diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..89ddbc17 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,24 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +accounts/usbwallet @karalabe +accounts/scwallet @gballet +accounts/abi @gballet @MariusVanDerWijden +cmd/clef @holiman +cmd/puppeth @karalabe +consensus @karalabe +core/ @karalabe @holiman @rjl493456442 +eth/ @karalabe @holiman @rjl493456442 +eth/catalyst/ @gballet +eth/tracers/ @s1na +graphql/ @gballet @s1na +les/ @zsfelfoldi @rjl493456442 +light/ @zsfelfoldi @rjl493456442 +mobile/ @karalabe @ligi +node/ @fjl +p2p/ @fjl @zsfelfoldi +rpc/ @fjl @holiman +p2p/simulations @fjl +p2p/protocols @fjl +p2p/testing @fjl +signer/ @holiman diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..a08542df --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,40 @@ +# 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 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. + +## Coding guidelines + +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. + * Commit messages should be prefixed with the package(s) they modify. + * E.g. "eth, rpc: make trace configs optional" + +## Can I have feature X + +Before you submit a feature request, please check and make sure that it isn't +possible through some other means. The JavaScript-enabled console is a powerful +feature in the right hands. Please check our +[Geth documentation page](https://geth.ethereum.org/docs/) for more info +and help. + +## Configuration, dependencies, and tests + +Please see the [Developers' Guide](https://geth.ethereum.org/docs/developers/devguide) +for more details on configuring your environment, managing project dependencies +and testing procedures. diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 00000000..2aa2c48a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,30 @@ +--- +name: Report a bug +about: Something with go-ethereum is not working as expected +title: '' +labels: 'type:bug' +assignees: '' +--- + +#### System information + +Geth version: `geth version` +OS & Version: Windows/Linux/OSX +Commit hash : (if `develop`) + +#### Expected behaviour + + +#### Actual behaviour + + +#### Steps to reproduce the behaviour + + +#### Backtrace + +```` +[backtrace] +```` + +When submitting logs: please submit them as text and not screenshots. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 00000000..aacd885f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,17 @@ +--- +name: Request a feature +about: Report a missing feature - e.g. as a step before submitting a PR +title: '' +labels: 'type:feature' +assignees: '' +--- + +# Rationale + +Why should this feature exist? +What are the use-cases? + +# Implementation + +Do you have ideas regarding the implementation of this feature? +Are you willing to implement this feature? \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 00000000..8f460ab5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,9 @@ +--- +name: Ask a question +about: Something is unclear +title: '' +labels: 'type:docs' +assignees: '' +--- + +This should only be used in very rare cases e.g. if you are not 100% sure if something is a bug or asking a question that leads to improving the documentation. For general questions please use [discord](https://discord.gg/nthXNEv) or the Ethereum stack exchange at https://ethereum.stackexchange.com. diff --git a/.github/no-response.yml b/.github/no-response.yml new file mode 100644 index 00000000..903d4ce8 --- /dev/null +++ b/.github/no-response.yml @@ -0,0 +1,11 @@ +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 30 +# Label requiring a response +responseRequiredLabel: "need:more-information" +# Comment to post when closing an Issue for lack of response. Set to `false` to disable +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have more relevant information or + answers to our questions so that we can investigate further. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..6d921cc7 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 366 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 42 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security +# Label to use when marking an issue as stale +staleLabel: "status:inactive" +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.gitignore b/.gitignore index 3016face..1ee8b830 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ build/_vendor/pkg # used by the Makefile /build/_workspace/ +/build/cache/ /build/bin/ /geth*.zip diff --git a/.gitmodules b/.gitmodules index 32bdb3b6..241c169c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,8 @@ [submodule "tests"] path = tests/testdata url = https://github.com/ethereum/tests + shallow = true +[submodule "evm-benchmarks"] + path = tests/evm-benchmarks + url = https://github.com/ipsilon/evm-benchmarks + shallow = true diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..4c129722 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,73 @@ +# This file configures github.com/golangci/golangci-lint. + +run: + timeout: 20m + tests: true + # default is true. Enables skipping of directories: + # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + skip-dirs-use-default: true + skip-files: + - core/genesis_alloc.go + +linters: + disable-all: true + enable: + - deadcode + - goconst + - goimports + - gosimple + - govet + - ineffassign + - misspell + - unconvert + - varcheck + - typecheck + - unused + - staticcheck + - bidichk + - durationcheck + - exportloopref + - gosec + - whitespace + + # - structcheck # lots of false positives + # - errcheck #lot of false positives + # - contextcheck + # - errchkjson # lots of false positives + # - errorlint # this check crashes + # - exhaustive # silly check + # - makezero # false positives + # - nilerr # several intentional + +linters-settings: + gofmt: + simplify: true + goconst: + min-len: 3 # minimum length of string constant + min-occurrences: 6 # minimum number of occurrences + gosec: + excludes: + - G404 # Use of weak random number generator - lots of FP + - G107 # Potential http request -- those are intentional + - G306 # G306: Expect WriteFile permissions to be 0600 or less + +issues: + exclude-rules: + - path: crypto/bn256/cloudflare/optate.go + linters: + - deadcode + - staticcheck + - path: internal/build/pgp.go + text: 'SA1019: package golang.org/x/crypto/openpgp is deprecated' + - path: core/vm/contracts.go + text: 'SA1019: package golang.org/x/crypto/ripemd160 is deprecated' + - path: accounts/usbwallet/trezor.go + text: 'SA1019: package github.com/golang/protobuf/proto is deprecated' + - path: accounts/usbwallet/trezor/ + text: 'SA1019: package github.com/golang/protobuf/proto is deprecated' + exclude: + - 'SA1019: event.TypeMux is deprecated: use Feed' + - 'SA1019: strings.Title is deprecated' + - 'SA1019: strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead.' + - 'SA1029: should not use built-in type string as key for value' + - 'G306: Expect WriteFile permissions to be 0600 or less' diff --git a/.mailmap b/.mailmap index cc4b871a..aa074b76 100644 --- a/.mailmap +++ b/.mailmap @@ -1,123 +1,237 @@ -Jeffrey Wilcke -Jeffrey Wilcke -Jeffrey Wilcke -Jeffrey Wilcke +Aaron Buchwald -Viktor Trón +Aaron Kumavis -Joseph Goulden +Abel Nieto +Abel Nieto -Nick Savers +Afri Schoedon <58883403+q9f@users.noreply.github.com> +Afri Schoedon <5chdn@users.noreply.github.com> <58883403+q9f@users.noreply.github.com> -Maran Hidskes +Alec Perseghin -Taylor Gerring -Taylor Gerring +Aleksey Smyrnov + +Alex Leverington +Alex Leverington + +Alex Pozhilenkov +Alex Pozhilenkov + +Alexey Akhunov + +Alon Muroch + +Andrey Petrov +Andrey Petrov + +Arkadiy Paronyan + +Armin Braun + +Aron Fischer + +Austin Roberts +Austin Roberts Bas van Kervel Bas van Kervel Bas van Kervel Bas van Kervel -Sven Ehlert +Boqin Qin +Boqin Qin -Vitalik Buterin +Casey Detrio -Marian Oancea +Cheng Li + +Chris Ziogas +Chris Ziogas Christoph Jentzsch -Heiko Hees +Diederik Loerakker -Alex Leverington -Alex Leverington +Dimitry Khokhlov -Zsolt Felföldi +Domino Valdano +Domino Valdano + +Edgar Aroutiounian + +Elliot Shepherd + +Enrique Fynn + +Enrique Fynn +Enrique Fynn + +Ernesto del Toro +Ernesto del Toro + +Everton Fraga + +Felix Lange +Felix Lange + +Frank Wang + +Gary Rong Gavin Wood -Martin Becze -Martin Becze +Gregg Dourgarian -Dimitry Khokhlov +Guillaume Ballet +Guillaume Ballet <3272758+gballet@users.noreply.github.com> -Roman Mandeleil +Guillaume Nicolas -Alec Perseghin +Hanjiang Yu +Hanjiang Yu <42531996+de1acr0ix@users.noreply.github.com> -Alon Muroch +Heiko Hees -Arkadiy Paronyan +Henning Diedrich +Henning Diedrich Drake Burroughs + +Hwanjo Heo <34005989+hwanjo@users.noreply.github.com> + +Iskander (Alex) Sharipov +Iskander (Alex) Sharipov Jae Kwon -Aaron Kumavis +Janoš Guljaš +Janoš Guljaš Janos Guljas -Nick Dodson +Jared Wasinger Jason Carver Jason Carver +Javier Peletier +Javier Peletier + +Jeffrey Wilcke +Jeffrey Wilcke +Jeffrey Wilcke +Jeffrey Wilcke + +Jens Agerberg + Joseph Chow Joseph Chow ethers -Enrique Fynn -Vincent G +Joseph Goulden -RJ Catalano -RJ Catalano +Justin Drake -Nchinda Nchinda +Kenso Trabing +Kenso Trabing -Aron Fischer +Liang Ma +Liang Ma -Vlad Gluhovsky +Louis Holbrook +Louis Holbrook -Ville Sundell +Maran Hidskes -Elliot Shepherd +Marian Oancea -Yohann Léon +Martin Becze +Martin Becze -Gregg Dourgarian +Martin Lundfall -Casey Detrio +Matt Garnett <14004106+lightclient@users.noreply.github.com> -Jens Agerberg +Matthew Halpern +Matthew Halpern -Nick Johnson +Michael Riabzev -Henning Diedrich -Henning Diedrich Drake Burroughs +Nchinda Nchinda -Felix Lange -Felix Lange +Nick Dodson -Максим Чусовлянов +Nick Johnson -Louis Holbrook -Louis Holbrook +Nick Savers -Thomas Bocek +Nishant Das +Nishant Das -Victor Tran +Olivier Hervieu -Justin Drake +Pascal Dierich +Pascal Dierich -Frank Wang +RJ Catalano +RJ Catalano -Gary Rong +Ralph Caraveo -Guillaume Nicolas +Rene Lubov <41963722+renaynay@users.noreply.github.com> + +Robert Zaremba +Robert Zaremba + +Roman Mandeleil Sorin Neacsu Sorin Neacsu +Sven Ehlert + +Taylor Gerring +Taylor Gerring + +Thomas Bocek + +Tim Cooijmans + Valentin Wüstholz Valentin Wüstholz -Armin Braun +Victor Tran -Ernesto del Toro -Ernesto del Toro +Viktor Trón + +Ville Sundell + +Vincent G + +Vitalik Buterin + +Vlad Gluhovsky +Vlad Gluhovsky + +Wenshao Zhong +Wenshao Zhong <11510383@mail.sustc.edu.cn> +Wenshao Zhong <374662347@qq.com> + +Will Villanueva + +Xiaobing Jiang + +Xudong Liu <33193253+r1cs@users.noreply.github.com> + +Yohann Léon + +Zachinquarantine +Zachinquarantine + +Ziyuan Zhong + +Zsolt Felföldi + +meowsbits +meowsbits <45600330+meowsbits@users.noreply.github.com> + +nedifi <103940716+nedifi@users.noreply.github.com> + +Максим Чусовлянов diff --git a/.travis.yml b/.travis.yml index 3a40ff58..e08e271f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,12 +2,21 @@ language: go go_import_path: github.com/ethereum/go-ethereum sudo: false jobs: + allow_failures: + - stage: build + os: osx + go: 1.17.x + env: + - azure-osx + - azure-ios + - cocoapods-ios + include: - # This builder only tests code linters on latest version of Go + # This builder only tests code linters on latest version of Go - stage: lint os: linux - dist: xenial - go: 1.12.x + dist: bionic + go: 1.18.x env: - lint git: @@ -15,55 +24,51 @@ jobs: script: - go run build/ci.go lint + # These builders create the Docker sub-images for multi-arch push and each + # will attempt to push the multi-arch image if they are the last builder - stage: build + if: type = push os: linux - dist: xenial - go: 1.10.x + arch: amd64 + dist: bionic + go: 1.18.x + env: + - docker + services: + - docker + git: + submodules: false # avoid cloning ethereum/tests + before_install: + - export DOCKER_CLI_EXPERIMENTAL=enabled script: - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES + - go run build/ci.go docker -image -manifest amd64,arm64 -upload ethereum/client-go - stage: build + if: type = push os: linux - dist: xenial - go: 1.11.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.12.x - script: - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES - - - stage: build - os: osx - go: 1.12.x + arch: arm64 + dist: bionic + go: 1.18.x + env: + - docker + services: + - docker + git: + submodules: false # avoid cloning ethereum/tests + before_install: + - export DOCKER_CLI_EXPERIMENTAL=enabled script: - - echo "Increase the maximum number of open file descriptors on macOS" - - NOFILE=20480 - - sudo sysctl -w kern.maxfiles=$NOFILE - - sudo sysctl -w kern.maxfilesperproc=$NOFILE - - sudo launchctl limit maxfiles $NOFILE $NOFILE - - sudo launchctl limit maxfiles - - ulimit -S -n $NOFILE - - ulimit -n - - unset -f cd # workaround for https://github.com/travis-ci/travis-ci/issues/8703 - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES + - go run build/ci.go docker -image -manifest amd64,arm64 -upload ethereum/client-go # This builder does the Ubuntu PPA upload - stage: build if: type = push os: linux - dist: xenial - go: 1.12.x + dist: bionic + go: 1.18.x env: - ubuntu-ppa + - GO111MODULE=on git: submodules: false # avoid cloning ethereum/tests addons: @@ -83,11 +88,12 @@ jobs: - stage: build if: type = push os: linux - dist: xenial + dist: bionic sudo: required - go: 1.12.x + go: 1.18.x env: - azure-linux + - GO111MODULE=on git: submodules: false # avoid cloning ethereum/tests addons: @@ -96,105 +102,77 @@ jobs: - gcc-multilib script: # Build for the primary platforms that Trusty can manage - - go run build/ci.go install - - go run build/ci.go archive -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - go run build/ci.go install -arch 386 - - go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds + - go run build/ci.go install -dlgo + - go run build/ci.go archive -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds + - go run build/ci.go install -dlgo -arch 386 + - go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds # Switch over GCC to cross compilation (breaks 386, hence why do it here only) - sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross - sudo ln -s /usr/include/asm-generic /usr/include/asm - - GOARM=5 go run build/ci.go install -arch arm -cc arm-linux-gnueabi-gcc - - GOARM=5 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - GOARM=6 go run build/ci.go install -arch arm -cc arm-linux-gnueabi-gcc - - GOARM=6 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - GOARM=7 go run build/ci.go install -arch arm -cc arm-linux-gnueabihf-gcc - - GOARM=7 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - go run build/ci.go install -arch arm64 -cc aarch64-linux-gnu-gcc - - 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 - - stage: build - if: type = push - os: linux - dist: xenial - services: - - docker - go: 1.12.x - env: - - azure-linux-mips - git: - submodules: false # avoid cloning ethereum/tests - script: - - go run build/ci.go xgo --alltools -- --targets=linux/mips --ldflags '-extldflags "-static"' -v - - for bin in build/bin/*-linux-mips; do mv -f "${bin}" "${bin/-linux-mips/}"; done - - go run build/ci.go archive -arch mips -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - - go run build/ci.go xgo --alltools -- --targets=linux/mipsle --ldflags '-extldflags "-static"' -v - - for bin in build/bin/*-linux-mipsle; do mv -f "${bin}" "${bin/-linux-mipsle/}"; done - - go run build/ci.go archive -arch mipsle -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - - go run build/ci.go xgo --alltools -- --targets=linux/mips64 --ldflags '-extldflags "-static"' -v - - for bin in build/bin/*-linux-mips64; do mv -f "${bin}" "${bin/-linux-mips64/}"; done - - go run build/ci.go archive -arch mips64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - - - go run build/ci.go xgo --alltools -- --targets=linux/mips64le --ldflags '-extldflags "-static"' -v - - for bin in build/bin/*-linux-mips64le; do mv -f "${bin}" "${bin/-linux-mips64le/}"; done - - go run build/ci.go archive -arch mips64le -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds + - GOARM=5 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc + - GOARM=5 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds + - GOARM=6 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc + - GOARM=6 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds + - GOARM=7 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabihf-gcc + - GOARM=7 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds + - go run build/ci.go install -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc + - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds # This builder does the Android Maven and Azure uploads - stage: build if: type = push os: linux - dist: xenial + dist: bionic addons: apt: packages: - - oracle-java8-installer - - oracle-java8-set-default - language: android - android: - components: - - platform-tools - - tools - - android-15 - - android-19 - - android-24 + - openjdk-8-jdk env: - azure-android - maven-android + - GO111MODULE=on git: submodules: false # avoid cloning ethereum/tests before_install: - - curl https://dl.google.com/go/go1.12.linux-amd64.tar.gz | tar -xz + # Install Android and it's dependencies manually, Travis is stale + - export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 + - curl https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -o android.zip + - unzip -q android.zip -d $HOME/sdk && rm android.zip + - mv $HOME/sdk/cmdline-tools $HOME/sdk/latest && mkdir $HOME/sdk/cmdline-tools && mv $HOME/sdk/latest $HOME/sdk/cmdline-tools + - export PATH=$PATH:$HOME/sdk/cmdline-tools/latest/bin + - export ANDROID_HOME=$HOME/sdk + + - yes | sdkmanager --licenses >/dev/null + - sdkmanager "platform-tools" "platforms;android-15" "platforms;android-19" "platforms;android-24" "ndk-bundle" + + # Install Go to allow building with + - curl https://dl.google.com/go/go1.18.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-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/go-ethereum - - go run build/ci.go aar -signer ANDROID_SIGNING_KEY -deploy https://oss.sonatype.org -upload gethstore/builds + - go run build/ci.go aar -signer ANDROID_SIGNING_KEY -signify SIGNIFY_KEY -deploy https://oss.sonatype.org -upload gethstore/builds # This builder does the OSX Azure, iOS CocoaPods and iOS Azure uploads - stage: build if: type = push os: osx - go: 1.12.x + go: 1.18.x env: - azure-osx - azure-ios - cocoapods-ios + - GO111MODULE=on git: submodules: false # avoid cloning ethereum/tests script: - - go run build/ci.go install - - go run build/ci.go archive -type tar -signer OSX_SIGNING_KEY -upload gethstore/builds + - go run build/ci.go install -dlgo + - go run build/ci.go archive -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds # Build the iOS framework and upload it to CocoaPods and Azure - gem uninstall cocoapods -a -x @@ -209,17 +187,61 @@ jobs: # Workaround for https://github.com/golang/go/issues/23749 - export CGO_CFLAGS_ALLOW='-fmodules|-fblocks|-fobjc-arc' - - go run build/ci.go xcode -signer IOS_SIGNING_KEY -deploy trunk -upload gethstore/builds + - go run build/ci.go xcode -signer IOS_SIGNING_KEY -signify SIGNIFY_KEY -deploy trunk -upload gethstore/builds + + # These builders run the tests + - stage: build + os: linux + arch: amd64 + dist: bionic + go: 1.18.x + env: + - GO111MODULE=on + script: + - go run build/ci.go test -coverage $TEST_PACKAGES + + - stage: build + if: type = pull_request + os: linux + arch: arm64 + dist: bionic + go: 1.18.x + env: + - GO111MODULE=on + script: + - go run build/ci.go test -coverage $TEST_PACKAGES + + - stage: build + os: linux + dist: bionic + go: 1.17.x + env: + - GO111MODULE=on + script: + - go run build/ci.go test -coverage $TEST_PACKAGES # This builder does the Azure archive purges to avoid accumulating junk - stage: build if: type = cron os: linux - dist: xenial - go: 1.12.x + dist: bionic + go: 1.18.x env: - azure-purge + - GO111MODULE=on git: submodules: false # avoid cloning ethereum/tests script: - go run build/ci.go purge -store gethstore/builds -days 14 + + # This builder executes race tests + - stage: build + if: type = cron + os: linux + dist: bionic + go: 1.18.x + env: + - GO111MODULE=on + script: + - go run build/ci.go test -race -coverage $TEST_PACKAGES + diff --git a/AUTHORS b/AUTHORS index 526ea35c..151c8501 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,27 +1,46 @@ # This is the official list of go-ethereum authors for copyright purposes. +6543 <6543@obermui.de> a e r t h +Aaron Buchwald Abel Nieto -Abel Nieto Adam Babik +Adam Schmideg Aditya +Aditya Arora Adrià Cidre +Afanasii Kurakin Afri Schoedon <5chdn@users.noreply.github.com> Agustin Armellini Fischer +Ahyun Airead Alan Chen Alejandro Isaza +Aleksey Smyrnov Ales Katona +Alex Beregszaszi Alex Leverington +Alex Mazalov +Alex Pozhilenkov +Alex Prut <1648497+alexprut@users.noreply.github.com> Alex Wu +Alexander van der Meij +Alexander Yastrebov Alexandre Van de Sande +Alexey Akhunov +Alexey Shekhirin +alexwang <39109351+dipingxian2@users.noreply.github.com> +Ali Atiia <42751398+aliatiia@users.noreply.github.com> Ali Hajimirza am2rican5 +AmitBRD <60668103+AmitBRD@users.noreply.github.com> +Anatole <62328077+a2br@users.noreply.github.com> Andrea Franz -Andrey Petrov +Andrei Maiboroda Andrey Petrov ANOTHEL Antoine Rondelet +Antoine Toulme Anton Evangelatov Antonio Salazar Cardozo Arba Sasmoyo @@ -29,19 +48,26 @@ Armani Ferrante Armin Braun Aron Fischer atsushi-ishibashi +Austin Roberts ayeowch b00ris +b1ackd0t bailantaotao baizhenxuan +Balaji Shetty Pachai <32358081+balajipachai@users.noreply.github.com> Balint Gabor +baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com> Bas van Kervel Benjamin Brent benma Benoit Verkindt +Binacs bloonfield Bo Bo Ye Bob Glickstein +Boqin Qin +Brandon Harden Brent Brian Schroeder Bruno Škvorc @@ -49,36 +75,58 @@ C. Brown Caesar Chad Casey Detrio CDsigma +Ceelog +Ceyhun Onur +chabashilah changhong Chase Wright Chen Quan +Cheng Li +chenglin <910372762@qq.com> chenyufeng +Chris Pacia +Chris Ziogas Christian Muehlhaeuser Christoph Jentzsch +chuwt cong +Connor Stein Corey Lin <514971757@qq.com> +courtier cpusoft Crispin Flowerday croath cui <523516579@qq.com> +Dan DeGreef Dan Kinsley +Dan Sosedoff Daniel A. Nagy +Daniel Perez Daniel Sloof +Darioush Jalali Darrel Herbst Dave Appleton Dave McGregor +David Cai David Huie +Denver +Derek Chiang Derek Gottfrid +Di Peng +Diederik Loerakker Diego Siqueira Diep Pham dipingxian2 <39109351+dipingxian2@users.noreply.github.com> +divergencetech <94644849+divergencetech@users.noreply.github.com> dm4 Dmitrij Koniajev Dmitry Shulyak +Dmitry Zenovich Domino Valdano -Domino Valdano Dragan Milic dragonvslinux <35779158+dragononcrypto@users.noreply.github.com> +Edgar Aroutiounian +Eduard S Egon Elbre Elad Eli @@ -86,131 +134,189 @@ Elias Naur Elliot Shepherd Emil emile -Enrique Fynn +Emmanuel T Odeke +Eng Zer Jun Enrique Fynn +Enrique Ortiz EOS Classic Erichin Ernesto del Toro Ethan Buchman ethersphere +Eugene Lepeico Eugene Valeyev Evangelos Pappas +Everton Fraga Evgeny Evgeny Danilenko <6655321@bk.ru> evgk +Evolution404 <35091674+Evolution404@users.noreply.github.com> +EXEC Fabian Vogelsteller Fabio Barone Fabio Berger FaceHo +Felipe Strozberg <48066928+FelStroz@users.noreply.github.com> Felix Lange Ferenc Szabo ferhat elmas +Ferran Borreguero Fiisio +Fire Man <55934298+basdevelop@users.noreply.github.com> +flowerofdream <775654398@qq.com> +fomotrader <82184770+fomotrader@users.noreply.github.com> +ForLina <471133417@qq.com> Frank Szendzielarz <33515470+FrankSzendzielarz@users.noreply.github.com> Frank Wang Franklin Furkan KAMACI +Fuyang Deng GagziW Gary Rong +Gautam Botrel George Ornbo +Giuseppe Bertone +Greg Colvin Gregg Dourgarian +Gregory Markou <16929357+GregTheGreek@users.noreply.github.com> +Guifel Guilherme Salgado Guillaume Ballet Guillaume Nicolas GuiltyMorishita +Guruprasad Kamath <48196632+gurukamath@users.noreply.github.com> Gus Gustav Simonsson Gísli Kristjánsson Ha ĐANG HackyMiner hadv +Hanjiang Yu Hao Bryan Cheng +Hao Duan HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> +Harry Dutton +haryu703 <34744512+haryu703@users.noreply.github.com> +Hendrik Hofstadt Henning Diedrich +henopied <13500516+henopied@users.noreply.github.com> +hero5512 holisticode Hongbin Mao Hsien-Tang Kao +hsyodyssey <47173566+hsyodyssey@users.noreply.github.com> Husam Ibrahim <39692071+HusamIbrahim@users.noreply.github.com> +Hwanjo Heo <34005989+hwanjo@users.noreply.github.com> hydai Hyung-Kyu Hqueue Choi +Håvard Anda Estensen Ian Macalinao Ian Norden +icodezjb +Ikko Ashimine +Ilan Gitter <8359193+gitteri@users.noreply.github.com> +ImanSharaf <78227895+ImanSharaf@users.noreply.github.com> Isidoro Ghezzi Iskander (Alex) Sharipov +Ivan Bogatyy Ivan Daniluk Ivo Georgiev +jacksoom Jae Kwon +James Prestwich <10149425+prestwich@users.noreply.github.com> Jamie Pitts -Janos Guljas -Janoš Guljaš +Janoš Guljaš +Jared Wasinger Jason Carver Javier Peletier -Javier Peletier Javier Sagredo Jay Jay Guo Jaynti Kanani Jeff Prestes Jeff R. Allen +Jeff Wentworth Jeffery Robert Walsh Jeffrey Wilcke Jens Agerberg Jeremy McNevin Jeremy Schlatter Jerzy Lasyk +Jesse Tane Jia Chenhui Jim McDonald +jk-jeongkyun <45347815+jeongkyun-oh@users.noreply.github.com> jkcomment +JoeGruffins <34998433+JoeGruffins@users.noreply.github.com> Joel Burget John C. Vernaleo +John Difool Johns Beharry Jonas Jonathan Brown +Jonathan Chappelow +Jonathan Gimeno JoranHonig Jordan Krage +Jorropo Joseph Chow +Joshua Colvin +Joshua Gutow +jovijovi jtakalai JU HYEONG PARK +Julian Y Justin Clark-Casey Justin Drake -jwasinger +Justus +Kawashima <91420903+sscodereth@users.noreply.github.com> ken10100147 Kenji Siu -Kenso Trabing Kenso Trabing Kevin kevin.xu +KibGzr kiel barry +kilic kimmylin <30611210+kimmylin@users.noreply.github.com> Kitten King <53072918+kittenking@users.noreply.github.com> knarfeh Kobi Gurkan +komika Konrad Feldmeier Kris Shinn +Kristofer Peterson +Kumar Anirudha Kurkó Mihály Kushagra Sharma Kwuaint <34888408+kwuaint@users.noreply.github.com> Kyuntae Ethan Kim -ledgerwatch +Lee Bousfield Lefteris Karapetsas Leif Jurvetson Leo Shklovskii LeoLiao Lewis Marshall lhendre -Liang Ma +Li Dongwei Liang Ma Liang ZOU +libby kent libotony +LieutenantRoger ligi Lio李欧 +lmittmann Lorenzo Manacorda Louis Holbrook Luca Zeug +Lucas Hendren +lzhfromustc <43191155+lzhfromustc@users.noreply.github.com> Magicking manlio Maran Hidskes Marek Kotewicz +Mariano Cortesi Marius van der Wijden Mark Mark Rushakoff @@ -218,108 +324,193 @@ mark.lin Martin Alex Philip Dawson Martin Holst Swende Martin Klepsch +Martin Lundfall +Martin Michlmayr +Martin Redmond <21436+reds@users.noreply.github.com> +Mason Fischer +Mateusz Morusiewicz <11313015+Ruteri@users.noreply.github.com> Mats Julian Olsen +Matt Garnett <14004106+lightclient@users.noreply.github.com> Matt K <1036969+mkrump@users.noreply.github.com> Matthew Di Ferrante Matthew Halpern -Matthew Halpern Matthew Wampler-Doty Max Sistemich +Maxim Zhiburt Maximilian Meister +me020523 +Melvin Junhee Woo +meowsbits Micah Zoltu +Michael Forney +Michael Riabzev Michael Ruminer +michael1011 Miguel Mota +Mike Burr +Mikhail Mikheev +milesvant +Miro Miya Chen Mohanson mr_franklin +Mudit Gupta Mymskmkt <1847234666@qq.com> Nalin Bhardwaj +Natsu Kagami Nchinda Nchinda +nebojsa94 necaremus +nedifi <103940716+nedifi@users.noreply.github.com> needkane <604476380@qq.com> Nguyen Kien Trung Nguyen Sy Thanh Son +Nic Jansma Nick Dodson Nick Johnson +Nicolas Feignon Nicolas Guillaume +Nikita Kozhemyakin +Nikola Madjarevic Nilesh Trivedi Nimrod Gutman +Nishant Das njupt-moon <1015041018@njupt.edu.cn> nkbai +noam-alchemy <76969113+noam-alchemy@users.noreply.github.com> nobody Noman +nujabes403 +Nye Liu Oleg Kovalov Oli Bye +Oliver Tale-Yazdi +Olivier Hervieu +Or Neeman +Osoro Bironga Osuke +Pantelis Peslis +Pascal Dierich +Patrick O'Grady +Pau Paul Berg Paul Litvak +Paul-Armand Verhaegen Paulo L F Casaretto Paweł Bylica +Pedro Gomes Pedro Pombeiro Peter Broadhurst +peter cresswell Peter Pratscher +Peter Simard Petr Mikusek Philip Schlump Pierre Neter +Pierre R +piersy PilkyuJung -protolambda +Piotr Dyraga +ploui <64719999+ploui@users.noreply.github.com> +Preston Van Loon +Prince Sinha Péter Szilágyi qd-ethan <31876119+qdgogogo@users.noreply.github.com> +Qian Bin +Quest Henkart +Rachel Franks +Rafael Matias Raghav Sood Ralph Caraveo -Ralph Caraveo III Ramesh Nair +rangzen reinerRubin +Rene Lubov <41963722+renaynay@users.noreply.github.com> rhaps107 Ricardo Catalinas Jiménez Ricardo Domingos Richard Hart +Rick RJ Catalano Rob Rob Mulholand -Robert Zaremba +Robert Zaremba Roc Yu +Roman Mazalov <83914728+gopherxyz@users.noreply.github.com> +Ross <9055337+Chadsr@users.noreply.github.com> Runchao Han Russ Cox Ryan Schneider +ryanc414 Rémy Roy S. Matthew English salanfe +Sam <39165351+Xia-Sam@users.noreply.github.com> +Sammy Libre <7374093+sammy007@users.noreply.github.com> Samuel Marks +sanskarkhare Sarlor Sasuke1964 +Satpal <28562234+SatpalSandhu61@users.noreply.github.com> Saulius Grigaitis Sean -Sheldon <11510383@mail.sustc.edu.cn> -Sheldon <374662347@qq.com> +Serhat Şevki Dinçer +Shane Bammel +shawn <36943337+lxex@users.noreply.github.com> +shigeyuki azuchi +Shihao Xia +Shiming Shintaro Kaneko +shiqinfeng1 <150627601@qq.com> Shuai Qi +Shude Li Shunsuke Watanabe silence Simon Jentzsch +Sina Mahmoodi <1591639+s1na@users.noreply.github.com> +sixdays +SjonHortensius +Slava Karpenko slumber1122 Smilenator +soc1c Sorin Neacsu +Sparty Stein Dekker Steve Gattuso Steve Ruckdashel Steve Waldman +Steven E. Harris Steven Roose stompesi stormpang sunxiaojun2014 +Suriyaa Sundararuban +Sylvain Laurent +Taeik Lim tamirms +Tangui Clairet +Tatsuya Shimoda Taylor Gerring TColl <38299499+TColl@users.noreply.github.com> terasum +tgyKomgo <52910426+tgyKomgo@users.noreply.github.com> +Thad Guidry Thomas Bocek thomasmodeneis thumb8432 Ti Zhou +tia-99 <67107070+tia-99@users.noreply.github.com> +Tim Cooijmans +Tobias Hildebrandt <79341166+tobias-hildebrandt@users.noreply.github.com> Tosh Camille tsarpaul +Tyler Chambers <2775339+tylerchambers@users.noreply.github.com> tzapu +ucwong +uji <49834542+uji@users.noreply.github.com> ult-bobonovski +Valentin Trinqué Valentin Wüstholz Vedhavyas Singareddi Victor Farazdagi @@ -330,40 +521,71 @@ Ville Sundell vim88 Vincent G Vincent Serpoul +Vinod Damle Vitalik Buterin Vitaly Bogdanov Vitaly V Vivek Anand -Vlad Vlad Bokov -Vlad Gluhovsky +Vlad Gluhovsky +Ward Bradt +Water <44689567+codeoneline@users.noreply.github.com> +wbt weimumu <934657014@qq.com> Wenbiao Zheng +Wenshao Zhong +Will Villanueva +William Morriss William Setzer williambannas +wuff1996 <33193253+wuff1996@users.noreply.github.com> Wuxiang +Xiaobing Jiang xiekeyang xincaosu +xinluyin <31590468+xinluyin@users.noreply.github.com> +Xudong Liu <33193253+r1cs@users.noreply.github.com> +xwjack yahtoo +Yang Hau YaoZengzeng YH-Zhou +Yihau Chen Yohann Léon Yoichi Hirai +Yole <007yuyue@gmail.com> Yondon Fu YOSHIDA Masanori yoza +yumiel yoomee1313 Yusup +yutianwu +ywzqwwt <39263032+ywzqwwt@users.noreply.github.com> +zaccoding Zach +Zachinquarantine zah Zahoor Mohamed Zak Cole +zcheng9 zer0to0ne <36526113+zer0to0ne@users.noreply.github.com> +zgfzgf <48779939+zgfzgf@users.noreply.github.com> +Zhang Zhuo +zhangsoledad <787953403@qq.com> +zhaochonghe <41711151+zhaochonghe@users.noreply.github.com> Zhenguo Niu +zhiqiangxu <652732310@qq.com> +Zhou Zhiyao +Ziyuan Zhong Zoe Nolan +Zou Guangxian Zsolt Felföldi Łukasz Kurowski +Łukasz Zimnoch ΞTHΞЯSPHΞЯΞ <{viktor.tron,nagydani,zsfelfoldi}@gmail.com> Максим Чусовлянов 大彬 +沉风 贺鹏飞 +陈佳 유용환 <33824408+eric-yoo@users.noreply.github.com> diff --git a/COPYING b/COPYING index 8d66e877..f288702d 100644 --- a/COPYING +++ b/COPYING @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2014 The go-ethereum Authors. + 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. @@ -616,4 +616,59 @@ above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. \ No newline at end of file +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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. + + This program is distributed in the hope that 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 this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Dockerfile b/Dockerfile index 973fa221..143c92f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,33 @@ +# Support setting various labels on the final image +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + # Build Geth in a stock Go builder container -FROM golang:1.12-alpine as builder +FROM golang:1.18-alpine as builder + +RUN apk add --no-cache gcc musl-dev linux-headers git -RUN apk add --no-cache make gcc musl-dev linux-headers git +# Get dependencies - will also be cached if we won't change go.mod/go.sum +COPY go.mod /go-ethereum/ +COPY go.sum /go-ethereum/ +RUN cd /go-ethereum && go mod download -ADD . /ETH-ECC -RUN cd /ETH-ECC && make geth +ADD . /go-ethereum +RUN cd /go-ethereum && go run build/ci.go install -static ./cmd/geth # Pull Geth into a second stage deploy alpine container FROM alpine:latest RUN apk add --no-cache ca-certificates -COPY --from=builder /ETH-ECC/build/bin/geth /usr/local/bin/ +COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ EXPOSE 8545 8546 30303 30303/udp -ENTRYPOINT ["ETH-ECC"] +ENTRYPOINT ["geth"] + +# Add some metadata labels to help programatic image consumption +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + +LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM" diff --git a/Dockerfile.alltools b/Dockerfile.alltools index a4adba9d..176c4592 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -1,10 +1,20 @@ +# Support setting various labels on the final image +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + # Build Geth in a stock Go builder container -FROM golang:1.12-alpine as builder +FROM golang:1.18-alpine as builder + +RUN apk add --no-cache gcc musl-dev linux-headers git -RUN apk add --no-cache make gcc musl-dev linux-headers git +# Get dependencies - will also be cached if we won't change go.mod/go.sum +COPY go.mod /go-ethereum/ +COPY go.sum /go-ethereum/ +RUN cd /go-ethereum && go mod download ADD . /go-ethereum -RUN cd /go-ethereum && make all +RUN cd /go-ethereum && go run build/ci.go install -static # Pull all binaries into a second stage deploy alpine container FROM alpine:latest @@ -13,3 +23,10 @@ RUN apk add --no-cache ca-certificates COPY --from=builder /go-ethereum/build/bin/* /usr/local/bin/ EXPOSE 8545 8546 30303 30303/udp + +# Add some metadata labels to help programatic image consumption +ARG COMMIT="" +ARG VERSION="" +ARG BUILDNUM="" + +LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM" diff --git a/Makefile b/Makefile index 4bf52f5c..e97acbef 100644 --- a/Makefile +++ b/Makefile @@ -2,144 +2,49 @@ # 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 evm all test clean -.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: geth android ios evm all test clean -GOBIN = $(shell pwd)/build/bin +GOBIN = ./build/bin GO ?= latest +GORUN = env GO111MODULE=on go run geth: - build/env.sh go run build/ci.go install ./cmd/geth + $(GORUN) build/ci.go install ./cmd/geth @echo "Done building." @echo "Run \"$(GOBIN)/geth\" to launch geth." all: - build/env.sh go run build/ci.go install + $(GORUN) build/ci.go install android: - build/env.sh go run build/ci.go aar --local + $(GORUN) build/ci.go aar --local @echo "Done building." @echo "Import \"$(GOBIN)/geth.aar\" to use the library." + @echo "Import \"$(GOBIN)/geth-sources.jar\" to add javadocs" + @echo "For more info see https://stackoverflow.com/questions/20994336/android-studio-how-to-attach-javadoc" ios: - build/env.sh go run build/ci.go xcode --local + $(GORUN) build/ci.go xcode --local @echo "Done building." @echo "Import \"$(GOBIN)/Geth.framework\" to use the library." test: all - build/env.sh go run build/ci.go test + $(GORUN) build/ci.go test lint: ## Run linters. - build/env.sh go run build/ci.go lint + $(GORUN) build/ci.go lint clean: - ./build/clean_go_build_cache.sh + env GO111MODULE=on go clean -cache rm -fr build/_workspace/pkg/ $(GOBIN)/* # The devtools target installs tools required for 'go generate'. # You need to put $GOBIN (or $GOPATH/bin) in your PATH to use 'go generate'. devtools: - env GOBIN= go get -u golang.org/x/tools/cmd/stringer - env GOBIN= go get -u github.com/kevinburke/go-bindata/go-bindata - env GOBIN= go get -u github.com/fjl/gencodec - env GOBIN= go get -u github.com/golang/protobuf/protoc-gen-go + env GOBIN= go install golang.org/x/tools/cmd/stringer@latest + env GOBIN= go install github.com/fjl/gencodec@latest + env GOBIN= go install github.com/golang/protobuf/protoc-gen-go@latest env GOBIN= go install ./cmd/abigen - @type "npm" 2> /dev/null || echo 'Please install node.js and npm' @type "solc" 2> /dev/null || echo 'Please install solc' @type "protoc" 2> /dev/null || echo 'Please install protoc' - -# Cross Compilation Targets (xgo) - -geth-cross: geth-linux geth-darwin geth-windows geth-android geth-ios - @echo "Full cross compilation done:" - @ls -ld $(GOBIN)/geth-* - -geth-linux: geth-linux-386 geth-linux-amd64 geth-linux-arm geth-linux-mips64 geth-linux-mips64le - @echo "Linux cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* - -geth-linux-386: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/386 -v ./cmd/geth - @echo "Linux 386 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep 386 - -geth-linux-amd64: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/amd64 -v ./cmd/geth - @echo "Linux amd64 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep amd64 - -geth-linux-arm: geth-linux-arm-5 geth-linux-arm-6 geth-linux-arm-7 geth-linux-arm64 - @echo "Linux ARM cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep arm - -geth-linux-arm-5: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/arm-5 -v ./cmd/geth - @echo "Linux ARMv5 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep arm-5 - -geth-linux-arm-6: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/arm-6 -v ./cmd/geth - @echo "Linux ARMv6 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep arm-6 - -geth-linux-arm-7: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/arm-7 -v ./cmd/geth - @echo "Linux ARMv7 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep arm-7 - -geth-linux-arm64: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/arm64 -v ./cmd/geth - @echo "Linux ARM64 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep arm64 - -geth-linux-mips: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/mips --ldflags '-extldflags "-static"' -v ./cmd/geth - @echo "Linux MIPS cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep mips - -geth-linux-mipsle: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/mipsle --ldflags '-extldflags "-static"' -v ./cmd/geth - @echo "Linux MIPSle cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep mipsle - -geth-linux-mips64: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/mips64 --ldflags '-extldflags "-static"' -v ./cmd/geth - @echo "Linux MIPS64 cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep mips64 - -geth-linux-mips64le: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=linux/mips64le --ldflags '-extldflags "-static"' -v ./cmd/geth - @echo "Linux MIPS64le cross compilation done:" - @ls -ld $(GOBIN)/geth-linux-* | grep mips64le - -geth-darwin: geth-darwin-386 geth-darwin-amd64 - @echo "Darwin cross compilation done:" - @ls -ld $(GOBIN)/geth-darwin-* - -geth-darwin-386: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=darwin/386 -v ./cmd/geth - @echo "Darwin 386 cross compilation done:" - @ls -ld $(GOBIN)/geth-darwin-* | grep 386 - -geth-darwin-amd64: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=darwin/amd64 -v ./cmd/geth - @echo "Darwin amd64 cross compilation done:" - @ls -ld $(GOBIN)/geth-darwin-* | grep amd64 - -geth-windows: geth-windows-386 geth-windows-amd64 - @echo "Windows cross compilation done:" - @ls -ld $(GOBIN)/geth-windows-* - -geth-windows-386: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=windows/386 -v ./cmd/geth - @echo "Windows 386 cross compilation done:" - @ls -ld $(GOBIN)/geth-windows-* | grep 386 - -geth-windows-amd64: - build/env.sh go run build/ci.go xgo -- --go=$(GO) --targets=windows/amd64 -v ./cmd/geth - @echo "Windows amd64 cross compilation done:" - @ls -ld $(GOBIN)/geth-windows-* | grep amd64 diff --git a/README.md b/README.md index 6c05b789..d1377726 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,379 @@ -# DeSecure - -# [What is the DeSecure Blockchain?](https://Desecure.org) - -## ECCPoW -### What is the ECCPoW? -[Go to ECCPoW Repository](https://github.com/cryptoecc/ECCPoW) -### What is the BTC-ECC? -[Go to BTC-ECC Repository](https://github.com/cryptoecc/bitcoin_ECC/tree/ecc-0.1.2) -### What is the ETH-ECC? -[Go to ETH-ECC Repository](https://github.com/cryptoecc/ETH-ECC) - -### Build private network and test(Bitcoin-ECC) -[Go to Build private network and test](https://github.com/cryptoecc/bitcoin_ECC/blob/master/doc/Build_private_network.md) - -### Build private network and test(Ethereum-ECC) - -[Go to Build private network and test](https://github.com/cryptoecc/ETH-ECC/blob/master/tutorial.md) - -### How to deploy smart contract in ETH-ECC - -[Go to PDF guide](https://drive.google.com/file/d/1bCmuQf9TRn3uccVyYzlnPIfJfMSn0KBJ/view?usp=sharing) - -### How to check NFT smart contract in ETH-ECC - -[Go to PDF guide](https://drive.google.com/file/d/1fHLjr5VJfe_HaSFClLPb-psawsxb0SAo/view?usp=sharing) - -## Lecture -### 2019 Blockchain Special Lecture -1. [Blockchain Economy, 이흥노](https://youtu.be/1_xI0SibZAE) -2. [Blockchain and the Civil Society, 홍은표 판사](https://youtu.be/hQy5NXb89is) -3. [ICO/IEO/STO/ Crpyto Economy, 장중혁, 아톰릭스컨설팅 이사](https://youtu.be/PMxT94JFXno) -4. [Blockchain and World Economy, 오정근, 한국금융ICT융합학회 회장](https://youtu.be/FMUp-_wdpSU) -5. [Understanding the Ethereum Blockchain, 정순형, (주)온더 대표](https://youtu.be/wcdaa5bIxbg) -6. [Blockchain and Innovative Nation, 전하진, 블록체인협회 위원장](https://youtu.be/WPLivTGRYoY) -7. [Blockchain and Regulation Reform, 구태언 변호사](https://youtu.be/lv6UMa7OjGY) -8. [Blockchain and Financial Policy, 김기흥 경기대 교수](https://www.youtube.com/watch?v=uDR7NjU-6Kk) -9. [Blockchain and Judicial System, 황경태 법무법인 헤리티지 변호사](https://youtu.be/GM3y_1nyw4E) - -### Blockchain and Future Society(Lecture 1 ~ Lecture 19) -- [Lecture 1](https://youtu.be/G07CkGt5GYM) -### BTC is a bubble buster! -- [BTC is a bubble buster](https://youtu.be/58ITeYJd0Jw) - -## Journal -1. [Blockchain-Based Distributed Patient-Centric Image Management System, IEEE](https://drive.google.com/open?id=10Uh7XxH-ICHK74cTt5dNzeKv9-ad9lE0) -2. [Profitable Double-Spending Attacks](https://drive.google.com/open?id=1WAj_c4W9lek7FHA9FviFAlgtXCZM4Xj-) -3. [Time-Variant Proof-of-Work Using Error-Correction Codes](https://drive.google.com/file/d/1diH-Vpw66q-zHaKqVoS8btUqCxNCvvgC/view?usp=sharing) - -## EVENT -### 2019 DESECURE OPEN MEETING -1. [Scalable DeSecure ECCPoW Blockchain, Heung-No Lee](https://youtu.be/qrXomkcGg58) -2. [Introduction to ECCPoW, Sang-jun Park](https://youtu.be/PzxgEDMbung) -3. [BitcoinECC Developement plan, Hoe-Geun Oh](https://youtu.be/V0g-tdEyqoo) -4. [Understading mining process in py-evm](https://youtu.be/s4yrrPS4MN8) -### 2019 ETHCON KOREA -1. [Scalable DeSecure ECCPoW Blockchain, Heung-No Lee](https://youtu.be/VuRgKBDW4Lk) -2. [Profitable Double-Spending Attacks, Jehyuk Jang](https://youtu.be/AmyBtUkXyVk) -### 2019 Blockchain Consensus and Governance -1. [블록체인 거버넌스의 이론과 실제 그리고 규제](https://youtu.be/7ujkFgsKPdY) +## Go Ethereum + +Official Golang execution layer implementation of the Ethereum protocol. + +[![API Reference]( +https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 +)](https://pkg.go.dev/github.com/ethereum/go-ethereum?tab=doc) +[![Go Report Card](https://goreportcard.com/badge/github.com/ethereum/go-ethereum)](https://goreportcard.com/report/github.com/ethereum/go-ethereum) +[![Travis](https://travis-ci.com/ethereum/go-ethereum.svg?branch=master)](https://travis-ci.com/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/. + +## Building the source + +For prerequisites and detailed build instructions please read the [Installation Instructions](https://geth.ethereum.org/docs/install-and-build/installing-geth). + +Building `geth` requires both a Go (version 1.16 or later) and a C compiler. You can install +them using your favourite package manager. Once the dependencies are installed, run + +```shell +make geth +``` + +or, to build the full suite of utilities: + +```shell +make all +``` + +## Executables + +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 page](https://geth.ethereum.org/docs/interface/command-line-options) for command line options. | +| `clef` | Stand-alone signing tool, which can be used as a backend signer for `geth`. | +| `devp2p` | Utilities to interact with nodes on the networking layer, without running a full blockchain. | +| `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://docs.soliditylang.org/en/develop/abi-spec.html) 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://geth.ethereum.org/docs/dapp/native-bindings) 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 run`). | +| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://ethereum.org/en/developers/docs/data-structures-and-encoding/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` + +Going through all the possible command line flags is out of scope here (please consult our +[CLI Wiki page](https://geth.ethereum.org/docs/interface/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. + +### Hardware Requirements + +Minimum: + +* CPU with 2+ cores +* 4GB RAM +* 1TB free storage space to sync the Mainnet +* 8 MBit/sec download Internet service + +Recommended: + +* Fast CPU with 4+ cores +* 16GB+ RAM +* High Performance SSD with at least 1TB free space +* 25+ MBit/sec download Internet service + +### 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 +sync quickly to the current state of the network. To do so: + +```shell +$ geth console +``` + +This command will: + * Start `geth` in snap 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://geth.ethereum.org/docs/interface/javascript-console), + (via the trailing `console` subcommand) through which you can interact using [`web3` methods](https://github.com/ChainSafe/web3.js/blob/0.20.7/DOCUMENTATION.md) + (note: the `web3` version bundled within `geth` is very old, and not up to date with official docs), + as well as `geth`'s own [management APIs](https://geth.ethereum.org/docs/rpc/server). + This tool is optional and if you leave it out you can always attach to an already running + `geth` instance with `geth attach`. + +### A Full node on the Görli 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. + +```shell +$ geth --goerli console +``` + +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 `--goerli` flag, however, will reconfigure your `geth` instance a bit: + + * Instead of connecting the main Ethereum network, the client will connect to the Görli + 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 `goerli` subfolder (`~/.ethereum/goerli` 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 /goerli/geth.ipc`. Windows users are not affected by + this. + +*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 + +Go Ethereum also supports connecting to the older proof-of-authority based test network +called [*Rinkeby*](https://www.rinkeby.io) which is operated by members of the community. + +```shell +$ geth --rinkeby console +``` + +### Full node on the Ropsten test network + +In addition to Görli and Rinkeby, Geth also supports the ancient Ropsten testnet. The +Ropsten test network is 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. + +```shell +$ geth --ropsten console +``` + +*Note: Older Geth configurations store the Ropsten database in the `testnet` subdirectory.* + +### Configuration + +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: + +```shell +$ geth --your-favourite-flags dumpconfig +``` + +*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: + +```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 snap-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 `--http.addr 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 are not +accessible from the outside. + +### 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://ethereum.github.io/execution-apis/api-documentation/) +and [`geth` specific APIs](https://geth.ethereum.org/docs/rpc/server)). +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. + +HTTP based JSON-RPC API options: + + * `--http` Enable the HTTP-RPC server + * `--http.addr` HTTP-RPC server listening interface (default: `localhost`) + * `--http.port` HTTP-RPC server listening port (default: `8545`) + * `--http.api` API's offered over the HTTP-RPC interface (default: `eth,net,web3`) + * `--http.corsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced) + * `--ws` Enable the WS-RPC server + * `--ws.addr` WS-RPC server listening interface (default: `localhost`) + * `--ws.port` WS-RPC server listening port (default: `8546`) + * `--ws.api` API's offered over the WS-RPC interface (default: `eth,net,web3`) + * `--ws.origins` 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,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! + +**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. + +#### 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`): + +```json +{ + "config": { + "chainId": , + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 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, create +the accounts and populate the `alloc` field with their addresses. + +```json +"alloc": { + "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: + +```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: + +```shell +$ bootnode --genkey=boot.key +$ bootnode --nodekey=boot.key +``` + +With the bootnode online, it will display an [`enode` URL](https://ethereum.org/en/developers/docs/networking-layer/network-addresses/#enode) +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.* + +#### 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. + +```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.* + +#### 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 [ethminer](https://github.com/ethereum-mining/ethminer) 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: + +```shell +$ geth --mine --miner.threads=1 --miner.etherbase=0x0000000000000000000000000000000000000000 +``` + +Which will start mining blocks and transactions on a single CPU thread, crediting all +proceedings to the account specified by `--miner.etherbase`. You can further tune the mining +by changing the default gas limit blocks converge to (`--miner.targetgaslimit`) and the price +transactions are accepted at (`--miner.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! + +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 Discord Server](https://discord.gg/invite/nthXNEv) +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. + * 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://geth.ethereum.org/docs/developers/devguide) +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. + +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. diff --git a/SECURITY.md b/SECURITY.md index bc54ede4..41b900d5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,119 +2,174 @@ ## Supported Versions -Please see Releases. We recommend to use the most recent released version. +Please see [Releases](https://github.com/ethereum/go-ethereum/releases). We recommend using the [most recently released version](https://github.com/ethereum/go-ethereum/releases/latest). ## 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) | - - +| `Discv5` | 20191015 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf) | +| `Discv5` | 20200124 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2020-01-24_DiscV5_audit_Cure53.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. +To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. Please read the [disclosure page](https://github.com/ethereum/go-ethereum/security/advisories?state=published) for more information about publicly disclosed security vulnerabilities. + +Use the built-in `geth version-check` feature to check whether the software is affected by any known vulnerability. This command will fetch the latest [`vulnerabilities.json`](https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json) file which contains known security vulnerabilities concerning `geth`, and cross-check the data against its own version number. 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----- +Version: SKS 1.1.6 +Comment: Hostname: pgp.mit.edu + +mQINBFgl3tgBEAC8A1tUBkD9YV+eLrOmtgy+/JS/H9RoZvkg3K1WZ8IYfj6iIRaYneAk3Bp1 +82GUPVz/zhKr2g0tMXIScDR3EnaDsY+Qg+JqQl8NOG+Cikr1nnkG2on9L8c8yiqry1ZTCmYM +qCa2acTFqnyuXJ482aZNtB4QG2BpzfhW4k8YThpegk/EoRUim+y7buJDtoNf7YILlhDQXN8q +lHB02DWOVUihph9tUIFsPK6BvTr9SIr/eG6j6k0bfUo9pexOn7LS4SojoJmsm/5dp6AoKlac +48cZU5zwR9AYcq/nvkrfmf2WkObg/xRdEvKZzn05jRopmAIwmoC3CiLmqCHPmT5a29vEob/y +PFE335k+ujjZCPOu7OwjzDk7M0zMSfnNfDq8bXh16nn+ueBxJ0NzgD1oC6c2PhM+XRQCXCho +yI8vbfp4dGvCvYqvQAE1bWjqnumZ/7vUPgZN6gDfiAzG2mUxC2SeFBhacgzDvtQls+uuvm+F +nQOUgg2Hh8x2zgoZ7kqV29wjaUPFREuew7e+Th5BxielnzOfVycVXeSuvvIn6cd3g/s8mX1c +2kLSXJR7+KdWDrIrR5Az0kwAqFZt6B6QTlDrPswu3mxsm5TzMbny0PsbL/HBM+GZEZCjMXxB +8bqV2eSaktjnSlUNX1VXxyOxXA+ZG2jwpr51egi57riVRXokrQARAQABtDRFdGhlcmV1bSBG +b3VuZGF0aW9uIEJ1ZyBCb3VudHkgPGJvdW50eUBldGhlcmV1bS5vcmc+iQIcBBEBCAAGBQJa +FCY6AAoJEHoMA3Q0/nfveH8P+gJBPo9BXZL8isUfbUWjwLi81Yi70hZqIJUnz64SWTqBzg5b +mCZ69Ji5637THsxQetS2ARabz0DybQ779FhD/IWnqV9T3KuBM/9RzJtuhLzKCyMrAINPMo28 +rKWdunHHarpuR4m3tL2zWJkle5QVYb+vkZXJJE98PJw+N4IYeKKeCs2ubeqZu636GA0sMzzB +Jn3m/dRRA2va+/zzbr6F6b51ynzbMxWKTsJnstjC8gs8EeI+Zcd6otSyelLtCUkk3h5sTvpV +Wv67BNSU0BYsMkxyFi9PUyy07Wixgeas89K5jG1oOtDva/FkpRHrTE/WA5OXDRcLrHJM+SwD +CwqcLQqJd09NxwUW1iKeBmPptTiOGu1Gv2o7aEyoaWrHRBO7JuYrQrj6q2B3H1Je0zjAd2qt +09ni2bLwLn4LA+VDpprNTO+eZDprv09s2oFSU6NwziHybovu0y7X4pADGkK2evOM7c86PohX +QRQ1M1T16xLj6wP8/Ykwl6v/LUk7iDPXP3GPILnh4YOkwBR3DsCOPn8098xy7FxEELmupRzt +Cj9oC7YAoweeShgUjBPzb+nGY1m6OcFfbUPBgFyMMfwF6joHbiVIO+39+Ut2g2ysZa7KF+yp +XqVDqyEkYXsOLb25OC7brt8IJEPgBPwcHK5GNag6RfLxnQV+iVZ9KNH1yQgSiQI+BBMBAgAo +AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAUCWglh+gUJBaNgWAAKCRDojTM0+l9qCgQ2 +D/4udJpV4zGIZW1yNaVvtd3vfKsTLi7GIRJLUBqVb2Yx/uhnN8jTl/tAhCVosCQ1pzvi9kMl +s8qO1vu2kw5EWFFkwK96roI8pTql3VIjwhRVQrCkR7oAk/eUd1U/nt2q6J4UTYeVgqbq4dsI +ZZTRyPJMD667YpuAIcaah+w9j/E5xksYQdMeprnDrQkkBCb4FIMqfDzBPKvEa8DcQr949K85 +kxhr6LDq9i5l4Egxt2JdH8DaR4GLca6+oHy0MyPs/bZOsfmZUObfM2oZgPpqYM96JanhzO1j +dpnItyBii2pc+kNx5nMOf4eikE/MBv+WUJ0TttWzApGGmFUzDhtuEvRH9NBjtJ/pMrYspIGu +O/QNY5KKOKQTvVIlwGcm8dTsSkqtBDSUwZyWbfKfKOI1/RhM9dC3gj5/BOY57DYYV4rdTK01 +ZtYjuhdfs2bhuP1uF/cgnSSZlv8azvf7Egh7tHPnYxvLjfq1bJAhCIX0hNg0a81/ndPAEFky +fSko+JPKvdSvsUcSi2QQ4U2HX//jNBjXRfG4F0utgbJnhXzEckz6gqt7wSDZH2oddVuO8Ssc +T7sK+CdXthSKnRyuI+sGUpG+6glpKWIfYkWFKNZWuQ+YUatY3QEDHXTIioycSmV8p4d/g/0S +V6TegidLxY8bXMkbqz+3n6FArRffv5MH7qt3cYkCPgQTAQIAKAUCWCXhOwIbAwUJAeEzgAYL +CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ6I0zNPpfagrN/w/+Igp3vtYdNunikw3yHnYf +Jkm0MmaMDUM9mtsaXVN6xb9n25N3Xa3GWCpmdsbYZ8334tI/oQ4/NHq/bEI5WFH5F1aFkMkm +5AJVLuUkipCtmCZ5NkbRPJA9l0uNUUE6uuFXBhf4ddu7jb0jMetRF/kifJHVCCo5fISUNhLp +7bwcWq9qgDQNZNYMOo4s9WX5Tl+5x4gTZdd2/cAYt49h/wnkw+huM+Jm0GojpLqIQ1jZiffm +otf5rF4L+JhIIdW0W4IIh1v9BhHVllXw+z9oj0PALstT5h8/DuKoIiirFJ4DejU85GR1KKAS +DeO19G/lSpWj1rSgFv2N2gAOxq0X+BbQTua2jdcY6JpHR4H1JJ2wzfHsHPgDQcgY1rGlmjVF +aqU73WV4/hzXc/HshK/k4Zd8uD4zypv6rFsZ3UemK0aL2zXLVpV8SPWQ61nS03x675SmDlYr +A80ENfdqvsn00JQuBVIv4Tv0Ub7NfDraDGJCst8rObjBT/0vnBWTBCebb2EsnS2iStIFkWdz +/WXs4L4Yzre1iJwqRjiuqahZR5jHsjAUf2a0O29HVHE7zlFtCFmLPClml2lGQfQOpm5klGZF +rmvus+qZ9rt35UgWHPZezykkwtWrFOwspwuCWaPDto6tgbRJZ4ftitpdYYM3dKW9IGJXBwrt +BQrMsu+lp0vDF+yJAlUEEwEIAD8CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAFiEErpbt +lp5HmwCE8+F/6I0zNPpfagoFAmEAEJwFCQycmLgACgkQ6I0zNPpfagpWoBAAhOcbMAUw6Zt0 +GYzT3sR5/c0iatezPzXEXJf9ebzR8M5uPElXcxcnMx1dvXZmGPXPJKCPa99WCu1NZYy8F+Wj +GTOY9tfIkvSxhys1p/giPAmvid6uQmD+bz7ivktnyzCkDWfMA+l8lsCSEqVlaq6y5T+a6SWB +6TzC2S0MPb/RrC/7DpwyrNYWumvyVJh09adm1Mw/UGgst/sZ8eMaRYEd3X0yyT1CBpX4zp2E +qQj9IEOTizvzv1x2jkHe5ZUeU3+nTBNlhSA+WFHUi0pfBdo2qog3Mv2EC1P2qMKoSdD5tPbA +zql1yKoHHnXOMsqdftGwbiv2sYXWvrYvmaCd3Ys/viOyt3HOy9uV2ZEtBd9Yqo9x/NZj8QMA +nY5k8jjrIXbUC89MqrJsQ6xxWQIg5ikMT7DvY0Ln89ev4oJyVvwIQAwCm4jUzFNm9bZLYDOP +5lGJCV7tF5NYVU7NxNM8vescKc40mVNK/pygS5mxhK9QYOUjZsIv8gddrl1TkqrFMuxFnTyN +WvzE29wFu/n4N1DkF+ZBqS70SlRvB+Hjz5LrDgEzF1Wf1eA/wq1dZbvMjjDVIc2VGlYp8Cp2 +8ob23c1seTtYXTNYgSR5go4EpH+xi+bIWv01bQQ9xGwBbT5sm4WUeWOcmX4QewzLZ3T/wK9+ +N4Ye/hmU9O34FwWJOY58EIe0OUV0aGVyZXVtIEZvdW5kYXRpb24gU2VjdXJpdHkgVGVhbSA8 +c2VjdXJpdHlAZXRoZXJldW0ub3JnPokCHAQRAQgABgUCWhQmOgAKCRB6DAN0NP5372LSEACT +wZk1TASWZj5QF7rmkIM1GEyBxLE+PundNcMgM9Ktj1315ED8SmiukNI4knVS1MY99OIgXhQl +D1foF2GKdTomrwwC4012zTNyUYCY60LnPZ6Z511HG+rZgZtZrbkz0IiUpwAlhGQND77lBqem +J3K+CFX2XpDA/ojui/kqrY4cwMT5P8xPJkwgpRgw/jgdcZyJTsXdHblV9IGU4H1Vd1SgcfAf +Db3YxDUlBtzlp0NkZqxen8irLIXUQvsfuIfRUbUSkWoK/n3U/gOCajAe8ZNF07iX4OWjH4Sw +NDA841WhFWcGE+d8+pfMVfPASU3UPKH72uw86b2VgR46Av6voyMFd1pj+yCA+YAhJuOpV4yL +QaGg2Z0kVOjuNWK/kBzp1F58DWGh4YBatbhE/UyQOqAAtR7lNf0M3QF9AdrHTxX8oZeqVW3V +Fmi2mk0NwCIUv8SSrZr1dTchp04OtyXe5gZBXSfzncCSRQIUDC8OgNWaOzAaUmK299v4bvye +uSCxOysxC7Q1hZtjzFPKdljS81mRlYeUL4fHlJU9R57bg8mriSXLmn7eKrSEDm/EG5T8nRx7 +TgX2MqJs8sWFxD2+bboVEu75yuFmZ//nmCBApAit9Hr2/sCshGIEpa9MQ6xJCYUxyqeJH+Cc +Aja0UfXhnK2uvPClpJLIl4RE3gm4OXeE1IkCPgQTAQIAKAIbAwYLCQgHAwIGFQgCCQoLBBYC +AwECHgECF4AFAloJYfoFCQWjYFgACgkQ6I0zNPpfagr4MQ//cfp3GSbSG8dkqgctW67Fy7cQ +diiTmx3cwxY+tlI3yrNmdjtrIQMzGdqtY6LNz7aN87F8mXNf+DyVHX9+wd1Y8U+E+hVCTzKC +sefUfxTz6unD9TTcGqaoelgIPMn4IiKz1RZE6eKpfDWe6q78W1Y6x1bE0qGNSjqT/QSxpezF +E/OAm/t8RRxVxDtqz8LfH2zLea5zaC+ADj8EqgY9vX9TQa4DyVV8MgOyECCCadJQCD5O5hIA +B2gVDWwrAUw+KBwskXZ7Iq4reJTKLEmt5z9zgtJ/fABwaCFt66ojwg0/RjbO9cNA3ZwHLGwU +C6hkb6bRzIoZoMfYxVS84opiqf/Teq+t/XkBYCxbSXTJDA5MKjcVuw3N6YKWbkGP/EfQThe7 +BfAKFwwIw5YmsWjHK8IQj6R6hBxzTz9rz8y1Lu8EAAFfA7OJKaboI2qbOlauH98OuOUmVtr1 +TczHO+pTcgWVN0ytq2/pX5KBf4vbmULNbg3HFRq+gHx8CW+jyXGkcqjbgU/5FwtDxeqRTdGJ +SyBGNBEU6pBNolyynyaKaaJjJ/biY27pvjymL5rlz95BH3Dn16Z4RRmqwlT6eq/wFYginujg +CCE1icqOSE+Vjl7V8tV8AcgANkXKdbBE+Q8wlKsGI/kS1w4XFAYcaNHFT8qNeS8TSFXFhvU8 +HylYxO79t56JAj4EEwECACgFAlgl3tgCGwMFCQHhM4AGCwkIBwMCBhUIAgkKCwQWAgMBAh4B +AheAAAoJEOiNMzT6X2oKmUMP/0hnaL6bVyepAq2LIdvIUbHfagt/Oo/KVfZs4bkM+xJOitJR +0kwZV9PTihXFdzhL/YNWc2+LtEBtKItqkJZKmWC0E6OPXGVuU6hfFPebuzVccYJfm0Q3Ej19 +VJI9Uomf59Bpak8HYyEED7WVQjoYn7XVPsonwus/9+LDX+c5vutbrUdbjga3KjHbewD93X4O +wVVoXyHEmU2Plyg8qvzFbNDylCWO7N2McO6SN6+7DitGZGr2+jO+P2R4RT1cnl2V3IRVcWZ0 +OTspPSnRGVr2fFiHN/+v8G/wHPLQcJZFvYPfUGNdcYbTmhWdiY0bEYXFiNrgzCCsyad7eKUR +WN9QmxqmyqLDjUEDJCAh19ES6Vg3tqGwXk+uNUCoF30ga0TxQt6UXZJDEQFAGeASQ/RqE/q1 +EAuLv8IGM8o7IqKO2pWfLuqsY6dTbKBwDzz9YOJt7EOGuPPQbHxaYStTushZmJnm7hi8lhVG +jT7qsEJdE95Il+I/mHWnXsCevaXjZugBiyV9yvOq4Hwwe2s1zKfrnQ4u0cadvGAh2eIqum7M +Y3o6nD47aJ3YmEPX/WnhI56bACa2GmWvUwjI4c0/er3esSPYnuHnM9L8Am4qQwMVSmyU80tC +MI7A9e13Mvv+RRkYFLJ7PVPdNpbW5jqX1doklFpKf6/XM+B+ngYneU+zgCUBiQJVBBMBCAA/ +AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgBYhBK6W7ZaeR5sAhPPhf+iNMzT6X2oKBQJh +ABCQBQkMnJi4AAoJEOiNMzT6X2oKAv0P+gJ3twBp5efNWyVLcIg4h4cOo9uD0NPvz8/fm2gX +FoOJL3MeigtPuSVfE9kuTaTuRbArzuFtdvH6G/kcRQvOlO4zyiIRHCk1gDHoIvvtn6RbRhVm +/Xo4uGIsFHst7n4A7BjicwEK5Op6Ih5Hoq19xz83YSBgBVk2fYEJIRyJiKFbyPjH0eSYe8v+ +Ra5/F85ugLx1P6mMVkW+WPzULns89riW7BGTnZmXFHZp8nO2pkUlcI7F3KRG7l4kmlC50ox6 +DiG/6AJCVulbAClky9C68TmJ/R1RazQxU/9IqVywsydq66tbJQbm5Z7GEti0C5jjbSRJL2oT +1xC7Rilr85PMREkPL3vegJdgj5PKlffZ/MocD/0EohiQ7wFpejFD4iTljeh0exRUwCRb6655 +9ib34JSQgU8Hl4JJu+mEgd9v0ZHD0/1mMD6fnAR84zca+O3cdASbnQmzTOKcGzLIrkE8TEnU ++2UZ8Ol7SAAqmBgzY1gKOilUho6dkyCAwNL+QDpvrITDPLEFPsjyB/M2KudZSVEn+Rletju1 +qkMW31qFMNlsbwzMZw+0USeGcs31Cs0B2/WQsro99CExlhS9auUFkmoVjJmYVTIYOM0zuPa4 +OyGspqPhRu5hEsmMDPDWD7Aad5k4GTqogQNnuKyRliZjXXrDZqFD5nfsJSL8Ky/sJGEMuQIN +BFgl3tgBEACbgq6HTN5gEBi0lkD/MafInmNi+59U5gRGYqk46WlfRjhHudXjDpgD0lolGb4h +YontkMaKRlCg2Rvgjvk3Zve0PKWjKw7gr8YBa9fMFY8BhAXI32OdyI9rFhxEZFfWAfwKVmT1 +9BdeAQRFvcfd+8w8f1XVc+zddULMJFBTr+xKDlIRWwTkdLPQeWbjo0eHl/g4tuLiLrTxVbnj +26bf+2+1DbM/w5VavzPrkviHqvKe/QP/gay4QDViWvFgLb90idfAHIdsPgflp0VDS5rVHFL6 +D73rSRdIRo3I8c8mYoNjSR4XDuvgOkAKW9LR3pvouFHHjp6Fr0GesRbrbb2EG66iPsR99MQ7 +FqIL9VMHPm2mtR+XvbnKkH2rYyEqaMbSdk29jGapkAWle4sIhSKk749A4tGkHl08KZ2N9o6G +rfUehP/V2eJLaph2DioFL1HxRryrKy80QQKLMJRekxigq8greW8xB4zuf9Mkuou+RHNmo8Pe +bHjFstLigiD6/zP2e+4tUmrT0/JTGOShoGMl8Rt0VRxdPImKun+4LOXbfOxArOSkY6i35+gs +gkkSy1gTJE0BY3S9auT6+YrglY/TWPQ9IJxWVOKlT+3WIp5wJu2bBKQ420VLqDYzkoWytel/ +bM1ACUtipMiIVeUs2uFiRjpzA1Wy0QHKPTdSuGlJPRrfcQARAQABiQIlBBgBAgAPAhsMBQJa +CWIIBQkFo2BYAAoJEOiNMzT6X2oKgSwQAKKs7BGF8TyZeIEO2EUK7R2bdQDCdSGZY06tqLFg +3IHMGxDMb/7FVoa2AEsFgv6xpoebxBB5zkhUk7lslgxvKiSLYjxfNjTBltfiFJ+eQnf+OTs8 +KeR51lLa66rvIH2qUzkNDCCTF45H4wIDpV05AXhBjKYkrDCrtey1rQyFp5fxI+0IQ1UKKXvz +ZK4GdxhxDbOUSd38MYy93nqcmclGSGK/gF8XiyuVjeifDCM6+T1NQTX0K9lneidcqtBDvlgg +JTLJtQPO33o5EHzXSiud+dKth1uUhZOFEaYRZoye1YE3yB0TNOOE8fXlvu8iuIAMBSDL9ep6 +sEIaXYwoD60I2gHdWD0lkP0DOjGQpi4ouXM3Edsd5MTi0MDRNTij431kn8T/D0LCgmoUmYYM +BgbwFhXr67axPZlKjrqR0z3F/Elv0ZPPcVg1tNznsALYQ9Ovl6b5M3cJ5GapbbvNWC7yEE1q +Scl9HiMxjt/H6aPastH63/7wcN0TslW+zRBy05VNJvpWGStQXcngsSUeJtI1Gd992YNjUJq4 +/Lih6Z1TlwcFVap+cTcDptoUvXYGg/9mRNNPZwErSfIJ0Ibnx9wPVuRN6NiCLOt2mtKp2F1p +M6AOQPpZ85vEh6I8i6OaO0w/Z0UHBwvpY6jDUliaROsWUQsqz78Z34CVj4cy6vPW2EF4iQIl +BBgBAgAPBQJYJd7YAhsMBQkB4TOAAAoJEOiNMzT6X2oKTjgP/1ojCVyGyvHMLUgnX0zwrR5Q +1M5RKFz6kHwKjODVLR3Isp8I935oTQt3DY7yFDI4t0GqbYRQMtxcNEb7maianhK2trCXfhPs +6/L04igjDf5iTcmzamXN6xnh5xkz06hZJJCMuu4MvKxC9MQHCVKAwjswl/9H9JqIBXAY3E2l +LpX5P+5jDZuPxS86p3+k4Rrdp9KTGXjiuEleM3zGlz5BLWydqovOck7C2aKh27ETFpDYY0z3 +yQ5AsPJyk1rAr0wrH6+ywmwWlzuQewavnrLnJ2M8iMFXpIhyHeEIU/f7o8f+dQk72rZ9CGzd +cqig2za/BS3zawZWgbv2vB2elNsIllYLdir45jxBOxx2yvJvEuu4glz78y4oJTCTAYAbMlle +5gVdPkVcGyvvVS9tinnSaiIzuvWrYHKWll1uYPm2Q1CDs06P5I7bUGAXpgQLUh/XQguy/0sX +GWqW3FS5JzP+XgcR/7UASvwBdHylubKbeqEpB7G1s+m+8C67qOrc7EQv3Jmy1YDOkhEyNig1 +rmjplLuir3tC1X+D7dHpn7NJe7nMwFx2b2MpMkLA9jPPAGPp/ekcu5sxCe+E0J/4UF++K+CR +XIxgtzU2UJfp8p9x+ygbx5qHinR0tVRdIzv3ZnGsXrfxnWfSOaB582cU3VRN9INzHHax8ETa +QVDnGO5uQa+FiQI8BBgBCAAmAhsMFiEErpbtlp5HmwCE8+F/6I0zNPpfagoFAmEAELYFCQyc +mN4ACgkQ6I0zNPpfagoqAQ/+MnDjBx8JWMd/XjeFoYKx/Oo0ntkInV+ME61JTBls4PdVk+TB +8PWZdPQHw9SnTvRmykFeznXIRzuxkowjrZYXdPXBxY2b1WyD5V3Ati1TM9vqpaR4osyPs2xy +I4dzDssh9YvUsIRL99O04/65lGiYeBNuACq+yK/7nD/ErzBkDYJHhMCdadbVWUACxvVIDvro +yQeVLKMsHqMCd8BTGD7VDs79NXskPnN77pAFnkzS4Z2b8SNzrlgTc5pUiuZHIXPIpEYmsYzh +ucTU6uI3dN1PbSFHK5tG2pHb4ZrPxY3L20Dgc2Tfu5/SDApZzwvvKTqjdO891MEJ++H+ssOz +i4O1UeWKs9owWttan9+PI47ozBSKOTxmMqLSQ0f56Np9FJsV0ilGxRKfjhzJ4KniOMUBA7mP ++m+TmXfVtthJred4sHlJMTJNpt+sCcT6wLMmyc3keIEAu33gsJj3LTpkEA2q+V+ZiP6Q8HRB +402ITklABSArrPSE/fQU9L8hZ5qmy0Z96z0iyILgVMLuRCCfQOMWhwl8yQWIIaf1yPI07xur +epy6lH7HmxjjOR7eo0DaSxQGQpThAtFGwkWkFh8yki8j3E42kkrxvEyyYZDXn2YcI3bpqhJx +PtwCMZUJ3kc/skOrs6bOI19iBNaEoNX5Dllm7UHjOgWNDQkcCuOCxucKano= +=arte +-----END PGP PUBLIC KEY BLOCK------ ``` diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go index 4bb853af..81bbee2f 100644 --- a/accounts/abi/abi.go +++ b/accounts/abi/abi.go @@ -19,10 +19,12 @@ package abi import ( "bytes" "encoding/json" + "errors" "fmt" "io" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) // The ABI holds information about a contract's context and available @@ -32,6 +34,13 @@ type ABI struct { Constructor Method Methods map[string]Method Events map[string]Event + Errors map[string]Error + + // Additional "special" functions introduced in solidity v0.6.0. + // It's separated from the original default fallback. Each contract + // can only define one fallback and receive function. + Fallback Method // Note it's also used to represent legacy fallback before v0.6.0 + Receive Method } // JSON returns a parsed ABI interface and error if it failed. @@ -42,7 +51,6 @@ func JSON(reader io.Reader) (ABI, error) { if err := dec.Decode(&abi); err != nil { return ABI{}, err } - return abi, nil } @@ -70,110 +78,133 @@ 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, data []byte) (err error) { - if len(data) == 0 { - return fmt.Errorf("abi: unmarshalling empty output") - } +func (abi ABI) getArguments(name string, data []byte) (Arguments, error) { // since there can't be naming collisions with contracts and events, // we need to decide whether we're calling a method or an event + var args Arguments if method, ok := abi.Methods[name]; ok { if len(data)%32 != 0 { - return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(data), data) + return nil, fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(data), data) } - return method.Outputs.Unpack(v, data) + args = method.Outputs } if event, ok := abi.Events[name]; ok { - return event.Inputs.Unpack(v, data) + args = event.Inputs } - return fmt.Errorf("abi: could not locate named method or event") + if args == nil { + return nil, fmt.Errorf("abi: could not locate named method or event: %s", name) + } + return args, nil } -// 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") +// Unpack unpacks the output according to the abi specification. +func (abi ABI) Unpack(name string, data []byte) ([]interface{}, error) { + args, err := abi.getArguments(name, data) + if err != nil { + return nil, err } - // 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) + return args.Unpack(data) +} + +// UnpackIntoInterface unpacks the output in v according to the abi specification. +// It performs an additional copy. Please only use, if you want to unpack into a +// structure that does not strictly conform to the abi structure (e.g. has additional arguments) +func (abi ABI) UnpackIntoInterface(v interface{}, name string, data []byte) error { + args, err := abi.getArguments(name, data) + if err != nil { + return err } - if event, ok := abi.Events[name]; ok { - return event.Inputs.UnpackIntoMap(v, data) + unpacked, err := args.Unpack(data) + if err != nil { + return err + } + return args.Copy(v, unpacked) +} + +// UnpackIntoMap unpacks a log into the provided map[string]interface{}. +func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, data []byte) (err error) { + args, err := abi.getArguments(name, data) + if err != nil { + return err } - return fmt.Errorf("abi: could not locate named method or event") + return args.UnpackIntoMap(v, data) } -// UnmarshalJSON implements json.Unmarshaler interface +// UnmarshalJSON implements json.Unmarshaler interface. func (abi *ABI) UnmarshalJSON(data []byte) error { var fields []struct { - Type string - Name string - Constant bool + Type string + Name string + Inputs []Argument + Outputs []Argument + + // Status indicator which can be: "pure", "view", + // "nonpayable" or "payable". + StateMutability string + + // Deprecated Status indicators, but removed in v0.6.0. + Constant bool // True if function is either pure or view + Payable bool // True if function is payable + + // Event relevant indicator represents the event is + // declared as anonymous. Anonymous bool - 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) + abi.Errors = make(map[string]Error) for _, field := range fields { switch field.Type { case "constructor": - abi.Constructor = Method{ - Inputs: field.Inputs, + abi.Constructor = NewMethod("", "", Constructor, field.StateMutability, field.Constant, field.Payable, field.Inputs, nil) + case "function": + name := ResolveNameConflict(field.Name, func(s string) bool { _, ok := abi.Methods[s]; return ok }) + abi.Methods[name] = NewMethod(name, field.Name, Function, field.StateMutability, field.Constant, field.Payable, field.Inputs, field.Outputs) + case "fallback": + // New introduced function type in v0.6.0, check more detail + // here https://solidity.readthedocs.io/en/v0.6.0/contracts.html#fallback-function + if abi.HasFallback() { + return errors.New("only single fallback is allowed") } - // empty defaults to function according to the abi spec - case "function", "": - 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.Fallback = NewMethod("", "", Fallback, field.StateMutability, field.Constant, field.Payable, nil, nil) + case "receive": + // New introduced function type in v0.6.0, check more detail + // here https://solidity.readthedocs.io/en/v0.6.0/contracts.html#fallback-function + if abi.HasReceive() { + return errors.New("only single receive is allowed") } - abi.Methods[name] = Method{ - Name: name, - RawName: field.Name, - Const: field.Constant, - Inputs: field.Inputs, - Outputs: field.Outputs, + if field.StateMutability != "payable" { + return errors.New("the statemutability of receive can only be payable") } + abi.Receive = NewMethod("", "", Receive, field.StateMutability, field.Constant, field.Payable, nil, nil) case "event": - 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, - } + name := ResolveNameConflict(field.Name, func(s string) bool { _, ok := abi.Events[s]; return ok }) + abi.Events[name] = NewEvent(name, field.Name, field.Anonymous, field.Inputs) + case "error": + // Errors cannot be overloaded or overridden but are inherited, + // no need to resolve the name conflict here. + abi.Errors[field.Name] = NewError(field.Name, field.Inputs) + default: + return fmt.Errorf("abi: could not recognize type %v of field %v", field.Type, field.Name) } } - return nil } -// MethodById looks up a method by the 4-byte id -// returns nil if none found +// MethodById looks up a method by the 4-byte id, +// returns nil if none found. func (abi *ABI) MethodById(sigdata []byte) (*Method, error) { if len(sigdata) < 4 { 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 } } @@ -184,9 +215,41 @@ func (abi *ABI) MethodById(sigdata []byte) (*Method, error) { // 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()) { + if bytes.Equal(event.ID.Bytes(), topic.Bytes()) { return &event, nil } } return nil, fmt.Errorf("no event with id: %#x", topic.Hex()) } + +// HasFallback returns an indicator whether a fallback function is included. +func (abi *ABI) HasFallback() bool { + return abi.Fallback.Type == Fallback +} + +// HasReceive returns an indicator whether a receive function is included. +func (abi *ABI) HasReceive() bool { + return abi.Receive.Type == Receive +} + +// revertSelector is a special function selector for revert reason unpacking. +var revertSelector = crypto.Keccak256([]byte("Error(string)"))[:4] + +// UnpackRevert resolves the abi-encoded revert reason. According to the solidity +// spec https://solidity.readthedocs.io/en/latest/control-structures.html#revert, +// the provided revert reason is abi-encoded as if it were a call to a function +// `Error(string)`. So it's a special tool for it. +func UnpackRevert(data []byte) (string, error) { + if len(data) < 4 { + return "", errors.New("invalid data for unpacking") + } + if !bytes.Equal(data[:4], revertSelector) { + return "", errors.New("invalid data for unpacking") + } + typ, _ := NewType("string", "", nil) + unpacked, err := (Arguments{{Type: typ}}).Unpack(data[4:]) + if err != nil { + return "", err + } + return unpacked[0].(string), nil +} diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go index 6dff5857..cd9433ca 100644 --- a/accounts/abi/abi_test.go +++ b/accounts/abi/abi_test.go @@ -19,64 +19,116 @@ package abi import ( "bytes" "encoding/hex" + "errors" "fmt" "math/big" "reflect" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" ) const jsondata = ` [ - { "type" : "function", "name" : "balance", "constant" : true }, - { "type" : "function", "name" : "send", "constant" : false, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] } + { "type" : "function", "name" : ""}, + { "type" : "function", "name" : "balance", "stateMutability" : "view" }, + { "type" : "function", "name" : "send", "inputs" : [ { "name" : "amount", "type" : "uint256" } ] }, + { "type" : "function", "name" : "test", "inputs" : [ { "name" : "number", "type" : "uint32" } ] }, + { "type" : "function", "name" : "string", "inputs" : [ { "name" : "inputs", "type" : "string" } ] }, + { "type" : "function", "name" : "bool", "inputs" : [ { "name" : "inputs", "type" : "bool" } ] }, + { "type" : "function", "name" : "address", "inputs" : [ { "name" : "inputs", "type" : "address" } ] }, + { "type" : "function", "name" : "uint64[2]", "inputs" : [ { "name" : "inputs", "type" : "uint64[2]" } ] }, + { "type" : "function", "name" : "uint64[]", "inputs" : [ { "name" : "inputs", "type" : "uint64[]" } ] }, + { "type" : "function", "name" : "int8", "inputs" : [ { "name" : "inputs", "type" : "int8" } ] }, + { "type" : "function", "name" : "bytes32", "inputs" : [ { "name" : "inputs", "type" : "bytes32" } ] }, + { "type" : "function", "name" : "foo", "inputs" : [ { "name" : "inputs", "type" : "uint32" } ] }, + { "type" : "function", "name" : "bar", "inputs" : [ { "name" : "inputs", "type" : "uint32" }, { "name" : "string", "type" : "uint16" } ] }, + { "type" : "function", "name" : "slice", "inputs" : [ { "name" : "inputs", "type" : "uint32[2]" } ] }, + { "type" : "function", "name" : "slice256", "inputs" : [ { "name" : "inputs", "type" : "uint256[2]" } ] }, + { "type" : "function", "name" : "sliceAddress", "inputs" : [ { "name" : "inputs", "type" : "address[]" } ] }, + { "type" : "function", "name" : "sliceMultiAddress", "inputs" : [ { "name" : "a", "type" : "address[]" }, { "name" : "b", "type" : "address[]" } ] }, + { "type" : "function", "name" : "nestedArray", "inputs" : [ { "name" : "a", "type" : "uint256[2][2]" }, { "name" : "b", "type" : "address[]" } ] }, + { "type" : "function", "name" : "nestedArray2", "inputs" : [ { "name" : "a", "type" : "uint8[][2]" } ] }, + { "type" : "function", "name" : "nestedSlice", "inputs" : [ { "name" : "a", "type" : "uint8[][]" } ] }, + { "type" : "function", "name" : "receive", "inputs" : [ { "name" : "memo", "type" : "bytes" }], "outputs" : [], "payable" : true, "stateMutability" : "payable" }, + { "type" : "function", "name" : "fixedArrStr", "stateMutability" : "view", "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] }, + { "type" : "function", "name" : "fixedArrBytes", "stateMutability" : "view", "inputs" : [ { "name" : "bytes", "type" : "bytes" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] }, + { "type" : "function", "name" : "mixedArrStr", "stateMutability" : "view", "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr", "type" : "uint256[2]" }, { "name" : "dynArr", "type" : "uint256[]" } ] }, + { "type" : "function", "name" : "doubleFixedArrStr", "stateMutability" : "view", "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr1", "type" : "uint256[2]" }, { "name" : "fixedArr2", "type" : "uint256[3]" } ] }, + { "type" : "function", "name" : "multipleMixedArrStr", "stateMutability" : "view", "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr1", "type" : "uint256[2]" }, { "name" : "dynArr", "type" : "uint256[]" }, { "name" : "fixedArr2", "type" : "uint256[3]" } ] }, + { "type" : "function", "name" : "overloadedNames", "stateMutability" : "view", "inputs": [ { "components": [ { "internalType": "uint256", "name": "_f", "type": "uint256" }, { "internalType": "uint256", "name": "__f", "type": "uint256"}, { "internalType": "uint256", "name": "f", "type": "uint256"}],"internalType": "struct Overloader.F", "name": "f","type": "tuple"}]} ]` -const jsondata2 = ` -[ - { "type" : "function", "name" : "balance", "constant" : true }, - { "type" : "function", "name" : "send", "constant" : false, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] }, - { "type" : "function", "name" : "test", "constant" : false, "inputs" : [ { "name" : "number", "type" : "uint32" } ] }, - { "type" : "function", "name" : "string", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "string" } ] }, - { "type" : "function", "name" : "bool", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "bool" } ] }, - { "type" : "function", "name" : "address", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "address" } ] }, - { "type" : "function", "name" : "uint64[2]", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint64[2]" } ] }, - { "type" : "function", "name" : "uint64[]", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint64[]" } ] }, - { "type" : "function", "name" : "foo", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32" } ] }, - { "type" : "function", "name" : "bar", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32" }, { "name" : "string", "type" : "uint16" } ] }, - { "type" : "function", "name" : "slice", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32[2]" } ] }, - { "type" : "function", "name" : "slice256", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "uint256[2]" } ] }, - { "type" : "function", "name" : "sliceAddress", "constant" : false, "inputs" : [ { "name" : "inputs", "type" : "address[]" } ] }, - { "type" : "function", "name" : "sliceMultiAddress", "constant" : false, "inputs" : [ { "name" : "a", "type" : "address[]" }, { "name" : "b", "type" : "address[]" } ] }, - { "type" : "function", "name" : "nestedArray", "constant" : false, "inputs" : [ { "name" : "a", "type" : "uint256[2][2]" }, { "name" : "b", "type" : "address[]" } ] }, - { "type" : "function", "name" : "nestedArray2", "constant" : false, "inputs" : [ { "name" : "a", "type" : "uint8[][2]" } ] }, - { "type" : "function", "name" : "nestedSlice", "constant" : false, "inputs" : [ { "name" : "a", "type" : "uint8[][]" } ] } -]` +var ( + Uint256, _ = NewType("uint256", "", nil) + Uint32, _ = NewType("uint32", "", nil) + Uint16, _ = NewType("uint16", "", nil) + String, _ = NewType("string", "", nil) + Bool, _ = NewType("bool", "", nil) + Bytes, _ = NewType("bytes", "", nil) + Bytes32, _ = NewType("bytes32", "", nil) + Address, _ = NewType("address", "", nil) + Uint64Arr, _ = NewType("uint64[]", "", nil) + AddressArr, _ = NewType("address[]", "", nil) + Int8, _ = NewType("int8", "", nil) + // Special types for testing + Uint32Arr2, _ = NewType("uint32[2]", "", nil) + Uint64Arr2, _ = NewType("uint64[2]", "", nil) + Uint256Arr, _ = NewType("uint256[]", "", nil) + Uint256Arr2, _ = NewType("uint256[2]", "", nil) + Uint256Arr3, _ = NewType("uint256[3]", "", nil) + Uint256ArrNested, _ = NewType("uint256[2][2]", "", nil) + Uint8ArrNested, _ = NewType("uint8[][2]", "", nil) + Uint8SliceNested, _ = NewType("uint8[][]", "", nil) + TupleF, _ = NewType("tuple", "struct Overloader.F", []ArgumentMarshaling{ + {Name: "_f", Type: "uint256"}, + {Name: "__f", Type: "uint256"}, + {Name: "f", Type: "uint256"}}) +) + +var methods = map[string]Method{ + "": NewMethod("", "", Function, "", false, false, nil, nil), + "balance": NewMethod("balance", "balance", Function, "view", false, false, nil, nil), + "send": NewMethod("send", "send", Function, "", false, false, []Argument{{"amount", Uint256, false}}, nil), + "test": NewMethod("test", "test", Function, "", false, false, []Argument{{"number", Uint32, false}}, nil), + "string": NewMethod("string", "string", Function, "", false, false, []Argument{{"inputs", String, false}}, nil), + "bool": NewMethod("bool", "bool", Function, "", false, false, []Argument{{"inputs", Bool, false}}, nil), + "address": NewMethod("address", "address", Function, "", false, false, []Argument{{"inputs", Address, false}}, nil), + "uint64[]": NewMethod("uint64[]", "uint64[]", Function, "", false, false, []Argument{{"inputs", Uint64Arr, false}}, nil), + "uint64[2]": NewMethod("uint64[2]", "uint64[2]", Function, "", false, false, []Argument{{"inputs", Uint64Arr2, false}}, nil), + "int8": NewMethod("int8", "int8", Function, "", false, false, []Argument{{"inputs", Int8, false}}, nil), + "bytes32": NewMethod("bytes32", "bytes32", Function, "", false, false, []Argument{{"inputs", Bytes32, false}}, nil), + "foo": NewMethod("foo", "foo", Function, "", false, false, []Argument{{"inputs", Uint32, false}}, nil), + "bar": NewMethod("bar", "bar", Function, "", false, false, []Argument{{"inputs", Uint32, false}, {"string", Uint16, false}}, nil), + "slice": NewMethod("slice", "slice", Function, "", false, false, []Argument{{"inputs", Uint32Arr2, false}}, nil), + "slice256": NewMethod("slice256", "slice256", Function, "", false, false, []Argument{{"inputs", Uint256Arr2, false}}, nil), + "sliceAddress": NewMethod("sliceAddress", "sliceAddress", Function, "", false, false, []Argument{{"inputs", AddressArr, false}}, nil), + "sliceMultiAddress": NewMethod("sliceMultiAddress", "sliceMultiAddress", Function, "", false, false, []Argument{{"a", AddressArr, false}, {"b", AddressArr, false}}, nil), + "nestedArray": NewMethod("nestedArray", "nestedArray", Function, "", false, false, []Argument{{"a", Uint256ArrNested, false}, {"b", AddressArr, false}}, nil), + "nestedArray2": NewMethod("nestedArray2", "nestedArray2", Function, "", false, false, []Argument{{"a", Uint8ArrNested, false}}, nil), + "nestedSlice": NewMethod("nestedSlice", "nestedSlice", Function, "", false, false, []Argument{{"a", Uint8SliceNested, false}}, nil), + "receive": NewMethod("receive", "receive", Function, "payable", false, true, []Argument{{"memo", Bytes, false}}, []Argument{}), + "fixedArrStr": NewMethod("fixedArrStr", "fixedArrStr", Function, "view", false, false, []Argument{{"str", String, false}, {"fixedArr", Uint256Arr2, false}}, nil), + "fixedArrBytes": NewMethod("fixedArrBytes", "fixedArrBytes", Function, "view", false, false, []Argument{{"bytes", Bytes, false}, {"fixedArr", Uint256Arr2, false}}, nil), + "mixedArrStr": NewMethod("mixedArrStr", "mixedArrStr", Function, "view", false, false, []Argument{{"str", String, false}, {"fixedArr", Uint256Arr2, false}, {"dynArr", Uint256Arr, false}}, nil), + "doubleFixedArrStr": NewMethod("doubleFixedArrStr", "doubleFixedArrStr", Function, "view", false, false, []Argument{{"str", String, false}, {"fixedArr1", Uint256Arr2, false}, {"fixedArr2", Uint256Arr3, false}}, nil), + "multipleMixedArrStr": NewMethod("multipleMixedArrStr", "multipleMixedArrStr", Function, "view", false, false, []Argument{{"str", String, false}, {"fixedArr1", Uint256Arr2, false}, {"dynArr", Uint256Arr, false}, {"fixedArr2", Uint256Arr3, false}}, nil), + "overloadedNames": NewMethod("overloadedNames", "overloadedNames", Function, "view", false, false, []Argument{{"f", TupleF, false}}, nil), +} func TestReader(t *testing.T) { - Uint256, _ := NewType("uint256", nil) - exp := ABI{ - Methods: map[string]Method{ - "balance": { - "balance", "balance", true, nil, nil, - }, - "send": { - "send", "send", false, []Argument{ - {"amount", Uint256, false}, - }, nil, - }, - }, + abi := ABI{ + Methods: methods, } - abi, err := JSON(strings.NewReader(jsondata)) + exp, err := JSON(strings.NewReader(jsondata)) if err != nil { - t.Error(err) + t.Fatal(err) } - // deep equal fails for some reason for name, expM := range exp.Methods { gotM, exist := abi.Methods[name] if !exist { @@ -98,8 +150,55 @@ func TestReader(t *testing.T) { } } +func TestInvalidABI(t *testing.T) { + json := `[{ "type" : "function", "name" : "", "constant" : fals }]` + _, err := JSON(strings.NewReader(json)) + if err == nil { + t.Fatal("invalid json should produce error") + } + json2 := `[{ "type" : "function", "name" : "send", "constant" : false, "inputs" : [ { "name" : "amount", "typ" : "uint256" } ] }]` + _, err = JSON(strings.NewReader(json2)) + if err == nil { + t.Fatal("invalid json should produce error") + } +} + +// TestConstructor tests a constructor function. +// The test is based on the following contract: +// contract TestConstructor { +// constructor(uint256 a, uint256 b) public{} +// } +func TestConstructor(t *testing.T) { + json := `[{ "inputs": [{"internalType": "uint256","name": "a","type": "uint256" },{ "internalType": "uint256","name": "b","type": "uint256"}],"stateMutability": "nonpayable","type": "constructor"}]` + method := NewMethod("", "", Constructor, "nonpayable", false, false, []Argument{{"a", Uint256, false}, {"b", Uint256, false}}, nil) + // Test from JSON + abi, err := JSON(strings.NewReader(json)) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(abi.Constructor, method) { + t.Error("Missing expected constructor") + } + // Test pack/unpack + packed, err := abi.Pack("", big.NewInt(1), big.NewInt(2)) + if err != nil { + t.Error(err) + } + unpacked, err := abi.Constructor.Inputs.Unpack(packed) + if err != nil { + t.Error(err) + } + + if !reflect.DeepEqual(unpacked[0], big.NewInt(1)) { + t.Error("Unable to pack/unpack from constructor") + } + if !reflect.DeepEqual(unpacked[1], big.NewInt(2)) { + t.Error("Unable to pack/unpack from constructor") + } +} + func TestTestNumbers(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) + abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) } @@ -135,64 +234,26 @@ func TestTestNumbers(t *testing.T) { } } -func TestTestString(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) - if err != nil { - t.Fatal(err) - } - - if _, err := abi.Pack("string", "hello world"); err != nil { - t.Error(err) - } -} - -func TestTestBool(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) - if err != nil { - t.Fatal(err) - } - - if _, err := abi.Pack("bool", true); err != nil { - t.Error(err) - } -} - -func TestTestSlice(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) - if err != nil { - 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) - } -} - func TestMethodSignature(t *testing.T) { - String, _ := NewType("string", nil) - m := Method{"foo", "foo", false, []Argument{{"bar", String, false}, {"baz", String, false}}, nil} + m := NewMethod("foo", "foo", Function, "", false, false, []Argument{{"bar", String, false}, {"baz", String, false}}, nil) exp := "foo(string,string)" - if m.Sig() != exp { - t.Error("signature mismatch", exp, "!=", m.Sig()) + 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", "foo", false, []Argument{{"bar", uintt, false}}, nil} + m = NewMethod("foo", "foo", Function, "", false, false, []Argument{{"bar", Uint256, false}}, nil) exp = "foo(uint256)" - if m.Sig() != exp { - t.Error("signature mismatch", exp, "!=", m.Sig()) + if m.Sig != exp { + t.Error("signature mismatch", exp, "!=", m.Sig) } // Method with tuple arguments - s, _ := NewType("tuple", []ArgumentMarshaling{ + s, _ := NewType("tuple", "", []ArgumentMarshaling{ {Name: "a", Type: "int256"}, {Name: "b", Type: "int256[]"}, {Name: "c", Type: "tuple[]", Components: []ArgumentMarshaling{ @@ -204,10 +265,10 @@ func TestMethodSignature(t *testing.T) { {Name: "y", Type: "int256"}, }}, }) - m = Method{"foo", "foo", false, []Argument{{"s", s, false}, {"bar", String, false}}, nil} + m = NewMethod("foo", "foo", Function, "", false, 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()) + if m.Sig != exp { + t.Error("signature mismatch", exp, "!=", m.Sig) } } @@ -219,12 +280,12 @@ func TestOverloadedMethodSignature(t *testing.T) { } 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()) + 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()) + if abi.Events[name].Sig != expect { + t.Fatalf("The signature of overloaded event mismatch, want %s, have %s", expect, abi.Events[name].Sig) } } } @@ -234,8 +295,22 @@ func TestOverloadedMethodSignature(t *testing.T) { check("bar0", "bar(uint256,uint256)", false) } +func TestCustomErrors(t *testing.T) { + json := `[{ "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ],"name": "MyError", "type": "error"} ]` + abi, err := JSON(strings.NewReader(json)) + if err != nil { + t.Fatal(err) + } + check := func(name string, expect string) { + if abi.Errors[name].Sig != expect { + t.Fatalf("The signature of overloaded method mismatch, want %s, have %s", expect, abi.Methods[name].Sig) + } + } + check("MyError", "MyError(uint256)") +} + func TestMultiPack(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) + abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) } @@ -400,15 +475,7 @@ func TestInputVariableInputLength(t *testing.T) { } func TestInputFixedArrayAndVariableInputLength(t *testing.T) { - const definition = `[ - { "type" : "function", "name" : "fixedArrStr", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] }, - { "type" : "function", "name" : "fixedArrBytes", "constant" : true, "inputs" : [ { "name" : "str", "type" : "bytes" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] }, - { "type" : "function", "name" : "mixedArrStr", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr", "type": "uint256[2]" }, { "name" : "dynArr", "type": "uint256[]" } ] }, - { "type" : "function", "name" : "doubleFixedArrStr", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr1", "type": "uint256[2]" }, { "name" : "fixedArr2", "type": "uint256[3]" } ] }, - { "type" : "function", "name" : "multipleMixedArrStr", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr1", "type": "uint256[2]" }, { "name" : "dynArr", "type" : "uint256[]" }, { "name" : "fixedArr2", "type" : "uint256[3]" } ] } - ]` - - abi, err := JSON(strings.NewReader(definition)) + abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Error(err) } @@ -555,7 +622,7 @@ func TestInputFixedArrayAndVariableInputLength(t *testing.T) { strvalue = common.RightPadBytes([]byte(strin), 32) fixedarrin1value1 = common.LeftPadBytes(fixedarrin1[0].Bytes(), 32) fixedarrin1value2 = common.LeftPadBytes(fixedarrin1[1].Bytes(), 32) - dynarroffset = U256(big.NewInt(int64(256 + ((len(strin)/32)+1)*32))) + dynarroffset = math.U256Bytes(big.NewInt(int64(256 + ((len(strin)/32)+1)*32))) dynarrlength = make([]byte, 32) dynarrlength[31] = byte(len(dynarrin)) dynarrinvalue1 = common.LeftPadBytes(dynarrin[0].Bytes(), 32) @@ -582,7 +649,7 @@ func TestInputFixedArrayAndVariableInputLength(t *testing.T) { } func TestDefaultFunctionParsing(t *testing.T) { - const definition = `[{ "name" : "balance" }]` + const definition = `[{ "name" : "balance", "type" : "function" }]` abi, err := JSON(strings.NewReader(definition)) if err != nil { @@ -602,9 +669,7 @@ func TestBareEvents(t *testing.T) { { "type" : "event", "name" : "tuple", "inputs" : [{ "indexed":false, "name":"t", "type":"tuple", "components":[{"name":"a", "type":"uint256"}] }, { "indexed":true, "name":"arg1", "type":"address" }] } ]` - arg0, _ := NewType("uint256", nil) - arg1, _ := NewType("address", nil) - tuple, _ := NewType("tuple", []ArgumentMarshaling{{Name: "a", Type: "uint256"}}) + tuple, _ := NewType("tuple", "", []ArgumentMarshaling{{Name: "a", Type: "uint256"}}) expectedEvents := map[string]struct { Anonymous bool @@ -613,12 +678,12 @@ func TestBareEvents(t *testing.T) { "balance": {false, nil}, "anon": {true, nil}, "args": {false, []Argument{ - {Name: "arg0", Type: arg0, Indexed: false}, - {Name: "arg1", Type: arg1, Indexed: true}, + {Name: "arg0", Type: Uint256, Indexed: false}, + {Name: "arg1", Type: Address, Indexed: true}, }}, "tuple": {false, []Argument{ {Name: "t", Type: tuple, Indexed: false}, - {Name: "arg1", Type: arg1, Indexed: true}, + {Name: "arg1", Type: Address, Indexed: true}, }}, } @@ -692,7 +757,7 @@ func TestUnpackEvent(t *testing.T) { } var ev ReceivedEvent - err = abi.Unpack(&ev, "received", data) + err = abi.UnpackIntoInterface(&ev, "received", data) if err != nil { t.Error(err) } @@ -701,7 +766,7 @@ func TestUnpackEvent(t *testing.T) { Sender common.Address } var receivedAddrEv ReceivedAddrEvent - err = abi.Unpack(&receivedAddrEv, "receivedAddr", data) + err = abi.UnpackIntoInterface(&receivedAddrEv, "receivedAddr", data) if err != nil { t.Error(err) } @@ -891,45 +956,25 @@ func TestUnpackIntoMapNamingConflict(t *testing.T) { } func TestABI_MethodById(t *testing.T) { - const abiJSON = `[ - {"type":"function","name":"receive","constant":false,"inputs":[{"name":"memo","type":"bytes"}],"outputs":[],"payable":true,"stateMutability":"payable"}, - {"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"}]}, - {"type":"function","name":"fixedArrStr","constant":true,"inputs":[{"name":"str","type":"string"},{"name":"fixedArr","type":"uint256[2]"}]}, - {"type":"function","name":"fixedArrBytes","constant":true,"inputs":[{"name":"str","type":"bytes"},{"name":"fixedArr","type":"uint256[2]"}]}, - {"type":"function","name":"mixedArrStr","constant":true,"inputs":[{"name":"str","type":"string"},{"name":"fixedArr","type":"uint256[2]"},{"name":"dynArr","type":"uint256[]"}]}, - {"type":"function","name":"doubleFixedArrStr","constant":true,"inputs":[{"name":"str","type":"string"},{"name":"fixedArr1","type":"uint256[2]"},{"name":"fixedArr2","type":"uint256[3]"}]}, - {"type":"function","name":"multipleMixedArrStr","constant":true,"inputs":[{"name":"str","type":"string"},{"name":"fixedArr1","type":"uint256[2]"},{"name":"dynArr","type":"uint256[]"},{"name":"fixedArr2","type":"uint256[3]"}]}, - {"type":"function","name":"balance","constant":true}, - {"type":"function","name":"send","constant":false,"inputs":[{"name":"amount","type":"uint256"}]}, - {"type":"function","name":"test","constant":false,"inputs":[{"name":"number","type":"uint32"}]}, - {"type":"function","name":"string","constant":false,"inputs":[{"name":"inputs","type":"string"}]}, - {"type":"function","name":"bool","constant":false,"inputs":[{"name":"inputs","type":"bool"}]}, - {"type":"function","name":"address","constant":false,"inputs":[{"name":"inputs","type":"address"}]}, - {"type":"function","name":"uint64[2]","constant":false,"inputs":[{"name":"inputs","type":"uint64[2]"}]}, - {"type":"function","name":"uint64[]","constant":false,"inputs":[{"name":"inputs","type":"uint64[]"}]}, - {"type":"function","name":"foo","constant":false,"inputs":[{"name":"inputs","type":"uint32"}]}, - {"type":"function","name":"bar","constant":false,"inputs":[{"name":"inputs","type":"uint32"},{"name":"string","type":"uint16"}]}, - {"type":"function","name":"_slice","constant":false,"inputs":[{"name":"inputs","type":"uint32[2]"}]}, - {"type":"function","name":"__slice256","constant":false,"inputs":[{"name":"inputs","type":"uint256[2]"}]}, - {"type":"function","name":"sliceAddress","constant":false,"inputs":[{"name":"inputs","type":"address[]"}]}, - {"type":"function","name":"sliceMultiAddress","constant":false,"inputs":[{"name":"a","type":"address[]"},{"name":"b","type":"address[]"}]} - ] -` - abi, err := JSON(strings.NewReader(abiJSON)) + abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) } 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 %x) not 'findable' by id in ABI", name, m.ID) } } + // test unsuccessful lookups + if _, err = abi.MethodById(crypto.Keccak256()); err == nil { + t.Error("Expected error: no method with this id") + } // Also test empty if _, err := abi.MethodById([]byte{0x00}); err == nil { t.Errorf("Expected error, too short to decode data") @@ -993,10 +1038,8 @@ func TestABI_EventById(t *testing.T) { } 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) + } else 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")) @@ -1010,8 +1053,10 @@ func TestABI_EventById(t *testing.T) { } } -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"}]` +// 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) @@ -1030,24 +1075,86 @@ func TestDuplicateMethodNames(t *testing.T) { } } -// 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"}]` +// TestDoubleDuplicateEventNames checks that if send0 already exists, there won't be a name +// conflict and that the second send event will be renamed send1. +// The test runs the abi of the following contract. +// contract DuplicateEvent { +// event send(uint256 a); +// event send0(); +// event send(); +// } +func TestDoubleDuplicateEventNames(t *testing.T) { + abiJSON := `[{"anonymous": false,"inputs": [{"indexed": false,"internalType": "uint256","name": "a","type": "uint256"}],"name": "send","type": "event"},{"anonymous": false,"inputs": [],"name": "send0","type": "event"},{ "anonymous": false, "inputs": [],"name": "send","type": "event"}]` 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.Events["send"]; !ok { + t.Fatalf("Could not find original event") } - if _, ok := contractAbi.Methods["transfer0"]; !ok { - t.Fatalf("Could not find duplicate method") + if _, ok := contractAbi.Events["send0"]; !ok { + t.Fatalf("Could not find duplicate event") } - if _, ok := contractAbi.Methods["transfer1"]; !ok { - t.Fatalf("Could not find duplicate method") + if _, ok := contractAbi.Events["send1"]; !ok { + t.Fatalf("Could not find duplicate event") } - if _, ok := contractAbi.Methods["transfer2"]; ok { - t.Fatalf("Should not have found extra method") + if _, ok := contractAbi.Events["send2"]; ok { + t.Fatalf("Should not have found extra event") + } +} + +// TestUnnamedEventParam checks that an event with unnamed parameters is +// correctly handled. +// The test runs the abi of the following contract. +// contract TestEvent { +// event send(uint256, uint256); +// } +func TestUnnamedEventParam(t *testing.T) { + abiJSON := `[{ "anonymous": false, "inputs": [{ "indexed": false,"internalType": "uint256", "name": "","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "","type": "uint256"}],"name": "send","type": "event"}]` + contractAbi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + + event, ok := contractAbi.Events["send"] + if !ok { + t.Fatalf("Could not find event") + } + if event.Inputs[0].Name != "arg0" { + t.Fatalf("Could not find input") + } + if event.Inputs[1].Name != "arg1" { + t.Fatalf("Could not find input") + } +} + +func TestUnpackRevert(t *testing.T) { + t.Parallel() + + var cases = []struct { + input string + expect string + expectErr error + }{ + {"", "", errors.New("invalid data for unpacking")}, + {"08c379a1", "", errors.New("invalid data for unpacking")}, + {"08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000d72657665727420726561736f6e00000000000000000000000000000000000000", "revert reason", nil}, + } + for index, c := range cases { + t.Run(fmt.Sprintf("case %d", index), func(t *testing.T) { + got, err := UnpackRevert(common.Hex2Bytes(c.input)) + if c.expectErr != nil { + if err == nil { + t.Fatalf("Expected non-nil error") + } + if err.Error() != c.expectErr.Error() { + t.Fatalf("Expected error mismatch, want %v, got %v", c.expectErr, err) + } + return + } + if c.expect != got { + t.Fatalf("Output mismatch, want %v, got %v", c.expect, got) + } + }) } } diff --git a/accounts/abi/argument.go b/accounts/abi/argument.go index 4dae5865..ed204e0a 100644 --- a/accounts/abi/argument.go +++ b/accounts/abi/argument.go @@ -18,6 +18,7 @@ package abi import ( "encoding/json" + "errors" "fmt" "reflect" "strings" @@ -34,13 +35,14 @@ type Argument struct { type Arguments []Argument type ArgumentMarshaling struct { - Name string - Type string - Components []ArgumentMarshaling - Indexed bool + Name string + Type string + InternalType string + Components []ArgumentMarshaling + Indexed bool } -// UnmarshalJSON implements json.Unmarshaler interface +// UnmarshalJSON implements json.Unmarshaler interface. func (argument *Argument) UnmarshalJSON(data []byte) error { var arg ArgumentMarshaling err := json.Unmarshal(data, &arg) @@ -48,7 +50,7 @@ func (argument *Argument) UnmarshalJSON(data []byte) error { return fmt.Errorf("argument json err: %v", err) } - argument.Type, err = NewType(arg.Type, arg.Components) + argument.Type, err = NewType(arg.Type, arg.InternalType, arg.Components) if err != nil { return err } @@ -58,19 +60,7 @@ func (argument *Argument) UnmarshalJSON(data []byte) error { return nil } -// LengthNonIndexed returns the number of arguments when not counting 'indexed' ones. Only events -// can ever have 'indexed' arguments, it should always be false on arguments for method input/output -func (arguments Arguments) LengthNonIndexed() int { - out := 0 - for _, arg := range arguments { - if !arg.Indexed { - out++ - } - } - return out -} - -// NonIndexed returns the arguments with indexed arguments filtered out +// NonIndexed returns the arguments with indexed arguments filtered out. func (arguments Arguments) NonIndexed() Arguments { var ret []Argument for _, arg := range arguments { @@ -81,203 +71,121 @@ func (arguments Arguments) NonIndexed() Arguments { return ret } -// isTuple returns true for non-atomic constructs, like (uint,uint) or uint[] +// isTuple returns true for non-atomic constructs, like (uint,uint) or uint[]. func (arguments Arguments) isTuple() bool { return len(arguments) > 1 } -// Unpack performs the operation hexdata -> Go format -func (arguments Arguments) Unpack(v interface{}, data []byte) error { - // make sure the passed value is arguments pointer - if reflect.Ptr != reflect.ValueOf(v).Kind() { - return fmt.Errorf("abi: Unpack(non-pointer %T)", v) - } - marshalledValues, err := arguments.UnpackValues(data) - if err != nil { - return err - } - if arguments.isTuple() { - return arguments.unpackTuple(v, marshalledValues) +// Unpack performs the operation hexdata -> Go format. +func (arguments Arguments) Unpack(data []byte) ([]interface{}, error) { + if len(data) == 0 { + if len(arguments.NonIndexed()) != 0 { + return nil, errors.New("abi: attempting to unmarshall an empty string while arguments are expected") + } + return make([]interface{}, 0), nil } - return arguments.unpackAtomic(v, marshalledValues[0]) + return arguments.UnpackValues(data) } -// UnpackIntoMap performs the operation hexdata -> mapping of argument name to argument value +// 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 + // Make sure map is not nil + if v == nil { + return errors.New("abi: cannot unpack into a nil map") } - - 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 { - var ( - dstVal = reflect.ValueOf(dst).Elem() - srcVal = reflect.ValueOf(src) - ) - tuple, typ := false, t - for { - if typ.T == SliceTy || typ.T == ArrayTy { - typ = typ.Elem - continue + if len(data) == 0 { + if len(arguments.NonIndexed()) != 0 { + return errors.New("abi: attempting to unmarshall an empty string while arguments are expected") } - tuple = typ.T == TupleTy - break + return nil // Nothing to unmarshal, return } - if !tuple { - return set(dstVal, srcVal) + marshalledValues, err := arguments.UnpackValues(data) + if err != nil { + return err } - - // Dereferences interface or pointer wrapper - dstVal = indirectInterfaceOrPtr(dstVal) - - switch t.T { - case TupleTy: - if dstVal.Kind() != reflect.Struct { - return fmt.Errorf("abi: invalid dst value for unpack, want struct, got %s", dstVal.Kind()) - } - fieldmap, err := mapArgNamesToStructFields(t.TupleRawNames, dstVal) - if err != nil { - return err - } - for i, elem := range t.TupleElems { - fname := fieldmap[t.TupleRawNames[i]] - field := dstVal.FieldByName(fname) - if !field.IsValid() { - return fmt.Errorf("abi: field %s can't found in the given value", t.TupleRawNames[i]) - } - if err := unpack(elem, field.Addr().Interface(), srcVal.Field(i).Interface()); err != nil { - return err - } - } - return nil - case SliceTy: - if dstVal.Kind() != reflect.Slice { - return fmt.Errorf("abi: invalid dst value for unpack, want slice, got %s", dstVal.Kind()) - } - slice := reflect.MakeSlice(dstVal.Type(), srcVal.Len(), srcVal.Len()) - for i := 0; i < slice.Len(); i++ { - if err := unpack(t.Elem, slice.Index(i).Addr().Interface(), srcVal.Index(i).Interface()); err != nil { - return err - } - } - dstVal.Set(slice) - case ArrayTy: - if dstVal.Kind() != reflect.Array { - return fmt.Errorf("abi: invalid dst value for unpack, want array, got %s", dstVal.Kind()) - } - array := reflect.New(dstVal.Type()).Elem() - for i := 0; i < array.Len(); i++ { - if err := unpack(t.Elem, array.Index(i).Addr().Interface(), srcVal.Index(i).Interface()); err != nil { - return err - } - } - dstVal.Set(array) + for i, arg := range arguments.NonIndexed() { + v[arg.Name] = marshalledValues[i] } 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") +// Copy performs the operation go format -> provided struct. +func (arguments Arguments) Copy(v interface{}, values []interface{}) error { + // make sure the passed value is arguments pointer + if reflect.Ptr != reflect.ValueOf(v).Kind() { + return fmt.Errorf("abi: Unpack(non-pointer %T)", v) } - - for i, arg := range arguments.NonIndexed() { - v[arg.Name] = marshalledValues[i] + if len(values) == 0 { + if len(arguments.NonIndexed()) != 0 { + return errors.New("abi: attempting to copy no values while arguments are expected") + } + return nil // Nothing to copy, return } - return nil + if arguments.isTuple() { + return arguments.copyTuple(v, values) + } + return arguments.copyAtomic(v, values[0]) } // unpackAtomic unpacks ( hexdata -> go ) a single value -func (arguments Arguments) unpackAtomic(v interface{}, marshalledValues interface{}) error { - if arguments.LengthNonIndexed() == 0 { - return nil - } - argument := arguments.NonIndexed()[0] - elem := reflect.ValueOf(v).Elem() +func (arguments Arguments) copyAtomic(v interface{}, marshalledValues interface{}) error { + dst := reflect.ValueOf(v).Elem() + src := reflect.ValueOf(marshalledValues) - if elem.Kind() == reflect.Struct && argument.Type.T != TupleTy { - fieldmap, err := mapArgNamesToStructFields([]string{argument.Name}, elem) - if err != nil { - return err - } - field := elem.FieldByName(fieldmap[argument.Name]) - if !field.IsValid() { - return fmt.Errorf("abi: field %s can't be found in the given value", argument.Name) - } - return unpack(&argument.Type, field.Addr().Interface(), marshalledValues) + if dst.Kind() == reflect.Struct { + return set(dst.Field(0), src) } - return unpack(&argument.Type, elem.Addr().Interface(), marshalledValues) + return set(dst, src) } -// unpackTuple unpacks ( hexdata -> go ) a batch of values. -func (arguments Arguments) unpackTuple(v interface{}, marshalledValues []interface{}) error { - var ( - value = reflect.ValueOf(v).Elem() - typ = value.Type() - kind = value.Kind() - ) - if err := requireUnpackKind(value, typ, kind, arguments); err != nil { - return err - } +// copyTuple copies a batch of values from marshalledValues to v. +func (arguments Arguments) copyTuple(v interface{}, marshalledValues []interface{}) error { + value := reflect.ValueOf(v).Elem() + nonIndexedArgs := arguments.NonIndexed() - // If the interface is a struct, get of abi->struct_field mapping - var abi2struct map[string]string - if kind == reflect.Struct { - var ( - argNames []string - err error - ) - for _, arg := range arguments.NonIndexed() { - argNames = append(argNames, arg.Name) + switch value.Kind() { + case reflect.Struct: + argNames := make([]string, len(nonIndexedArgs)) + for i, arg := range nonIndexedArgs { + argNames[i] = arg.Name } - abi2struct, err = mapArgNamesToStructFields(argNames, value) + var err error + abi2struct, err := mapArgNamesToStructFields(argNames, value) if err != nil { return err } - } - for i, arg := range arguments.NonIndexed() { - switch kind { - case reflect.Struct: + for i, arg := range nonIndexedArgs { field := value.FieldByName(abi2struct[arg.Name]) if !field.IsValid() { return fmt.Errorf("abi: field %s can't be found in the given value", arg.Name) } - if err := unpack(&arg.Type, field.Addr().Interface(), marshalledValues[i]); err != nil { + if err := set(field, reflect.ValueOf(marshalledValues[i])); err != nil { return err } - case reflect.Slice, reflect.Array: - if value.Len() < i { - return fmt.Errorf("abi: insufficient number of arguments for unpack, want %d, got %d", len(arguments), value.Len()) - } - v := value.Index(i) - if err := requireAssignable(v, reflect.ValueOf(marshalledValues[i])); err != nil { - return err - } - if err := unpack(&arg.Type, v.Addr().Interface(), marshalledValues[i]); err != nil { + } + case reflect.Slice, reflect.Array: + if value.Len() < len(marshalledValues) { + return fmt.Errorf("abi: insufficient number of arguments for unpack, want %d, got %d", len(arguments), value.Len()) + } + for i := range nonIndexedArgs { + if err := set(value.Index(i), reflect.ValueOf(marshalledValues[i])); err != nil { return err } - default: - return fmt.Errorf("abi:[2] cannot unmarshal tuple in to %v", typ) } + default: + return fmt.Errorf("abi:[2] cannot unmarshal tuple in to %v", value.Type()) } return nil - } // UnpackValues can be used to unpack ABI-encoded hexdata according to the ABI-specification, // without supplying a struct to unpack into. Instead, this method returns a list containing the // values. An atomic argument will be a list with one element. func (arguments Arguments) UnpackValues(data []byte) ([]interface{}, error) { - retval := make([]interface{}, 0, arguments.LengthNonIndexed()) + nonIndexedArgs := arguments.NonIndexed() + retval := make([]interface{}, 0, len(nonIndexedArgs)) virtualArgs := 0 - for index, arg := range arguments.NonIndexed() { + for index, arg := range nonIndexedArgs { marshalledValue, err := toGoType((index+virtualArgs)*32, arg.Type, data) if arg.Type.T == ArrayTy && !isDynamicType(arg.Type) { // If we have a static array, like [3]uint256, these are coded as @@ -304,18 +212,18 @@ func (arguments Arguments) UnpackValues(data []byte) ([]interface{}, error) { return retval, nil } -// PackValues performs the operation Go format -> Hexdata -// It is the semantic opposite of UnpackValues +// PackValues performs the operation Go format -> Hexdata. +// It is the semantic opposite of UnpackValues. func (arguments Arguments) PackValues(args []interface{}) ([]byte, error) { return arguments.Pack(args...) } -// Pack performs the operation Go format -> Hexdata +// Pack performs the operation Go format -> Hexdata. func (arguments Arguments) Pack(args ...interface{}) ([]byte, error) { // Make sure arguments match up and pack them abiArgs := arguments if len(args) != len(abiArgs) { - return nil, fmt.Errorf("argument count mismatch: %d for %d", len(args), len(abiArgs)) + return nil, fmt.Errorf("argument count mismatch: got %d for %d", len(args), len(abiArgs)) } // variable input is the output appended at the end of packed // output. This is used for strings and bytes types input. diff --git a/accounts/abi/bind/auth.go b/accounts/abi/bind/auth.go index 4c015a7b..494dc88a 100644 --- a/accounts/abi/bind/auth.go +++ b/accounts/abi/bind/auth.go @@ -17,23 +17,34 @@ package bind import ( + "context" "crypto/ecdsa" "errors" "io" - "io/ioutil" + "math/big" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/external" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "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" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" ) +// ErrNoChainID is returned whenever the user failed to specify a chain id. +var ErrNoChainID = errors.New("no chain id specified") + +// ErrNotAuthorized is returned when an account is not properly unlocked. +var ErrNotAuthorized = errors.New("not authorized to sign this account") + // NewTransactor is a utility method to easily create a transaction signer from // an encrypted json key stream and the associated passphrase. +// +// Deprecated: Use NewTransactorWithChainID instead. func NewTransactor(keyin io.Reader, passphrase string) (*TransactOpts, error) { - json, err := ioutil.ReadAll(keyin) + log.Warn("WARNING: NewTransactor has been deprecated in favour of NewTransactorWithChainID") + json, err := io.ReadAll(keyin) if err != nil { return nil, err } @@ -45,13 +56,17 @@ func NewTransactor(keyin io.Reader, passphrase string) (*TransactOpts, error) { } // NewKeyStoreTransactor is a utility method to easily create a transaction signer from -// an decrypted key from a keystore +// an decrypted key from a keystore. +// +// Deprecated: Use NewKeyStoreTransactorWithChainID instead. func NewKeyStoreTransactor(keystore *keystore.KeyStore, account accounts.Account) (*TransactOpts, error) { + log.Warn("WARNING: NewKeyStoreTransactor has been deprecated in favour of NewTransactorWithChainID") + signer := types.HomesteadSigner{} return &TransactOpts{ From: account.Address, - Signer: func(signer types.Signer, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) { if address != account.Address { - return nil, errors.New("not authorized to sign this account") + return nil, ErrNotAuthorized } signature, err := keystore.SignHash(account, signer.Hash(tx).Bytes()) if err != nil { @@ -59,18 +74,23 @@ func NewKeyStoreTransactor(keystore *keystore.KeyStore, account accounts.Account } return tx.WithSignature(signer, signature) }, + Context: context.Background(), }, nil } // NewKeyedTransactor is a utility method to easily create a transaction signer // from a single private key. +// +// Deprecated: Use NewKeyedTransactorWithChainID instead. func NewKeyedTransactor(key *ecdsa.PrivateKey) *TransactOpts { + log.Warn("WARNING: NewKeyedTransactor has been deprecated in favour of NewKeyedTransactorWithChainID") keyAddr := crypto.PubkeyToAddress(key.PublicKey) + signer := types.HomesteadSigner{} return &TransactOpts{ From: keyAddr, - Signer: func(signer types.Signer, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) { if address != keyAddr { - return nil, errors.New("not authorized to sign this account") + return nil, ErrNotAuthorized } signature, err := crypto.Sign(signer.Hash(tx).Bytes(), key) if err != nil { @@ -78,7 +98,69 @@ func NewKeyedTransactor(key *ecdsa.PrivateKey) *TransactOpts { } return tx.WithSignature(signer, signature) }, + Context: context.Background(), + } +} + +// NewTransactorWithChainID is a utility method to easily create a transaction signer from +// an encrypted json key stream and the associated passphrase. +func NewTransactorWithChainID(keyin io.Reader, passphrase string, chainID *big.Int) (*TransactOpts, error) { + json, err := io.ReadAll(keyin) + if err != nil { + return nil, err } + key, err := keystore.DecryptKey(json, passphrase) + if err != nil { + return nil, err + } + return NewKeyedTransactorWithChainID(key.PrivateKey, chainID) +} + +// NewKeyStoreTransactorWithChainID is a utility method to easily create a transaction signer from +// an decrypted key from a keystore. +func NewKeyStoreTransactorWithChainID(keystore *keystore.KeyStore, account accounts.Account, chainID *big.Int) (*TransactOpts, error) { + if chainID == nil { + return nil, ErrNoChainID + } + signer := types.LatestSignerForChainID(chainID) + return &TransactOpts{ + From: account.Address, + Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) { + if address != account.Address { + return nil, ErrNotAuthorized + } + signature, err := keystore.SignHash(account, signer.Hash(tx).Bytes()) + if err != nil { + return nil, err + } + return tx.WithSignature(signer, signature) + }, + Context: context.Background(), + }, nil +} + +// NewKeyedTransactorWithChainID is a utility method to easily create a transaction signer +// from a single private key. +func NewKeyedTransactorWithChainID(key *ecdsa.PrivateKey, chainID *big.Int) (*TransactOpts, error) { + keyAddr := crypto.PubkeyToAddress(key.PublicKey) + if chainID == nil { + return nil, ErrNoChainID + } + signer := types.LatestSignerForChainID(chainID) + return &TransactOpts{ + From: keyAddr, + Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) { + if address != keyAddr { + return nil, ErrNotAuthorized + } + signature, err := crypto.Sign(signer.Hash(tx).Bytes(), key) + if err != nil { + return nil, err + } + return tx.WithSignature(signer, signature) + }, + Context: context.Background(), + }, nil } // NewClefTransactor is a utility method to easily create a transaction signer @@ -86,11 +168,12 @@ func NewKeyedTransactor(key *ecdsa.PrivateKey) *TransactOpts { 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) { + Signer: func(address common.Address, transaction *types.Transaction) (*types.Transaction, error) { if address != account.Address { - return nil, errors.New("not authorized to sign this account") + return nil, ErrNotAuthorized } return clef.SignTx(account, transaction, nil) // Clef enforces its own chain id }, + Context: context.Background(), } } diff --git a/accounts/abi/bind/backend.go b/accounts/abi/bind/backend.go index 19c5e344..c16990f3 100644 --- a/accounts/abi/bind/backend.go +++ b/accounts/abi/bind/backend.go @@ -21,9 +21,9 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) var ( @@ -32,22 +32,23 @@ var ( // have any code associated with it (i.e. suicided). ErrNoCode = errors.New("no contract code at given address") - // This error is raised when attempting to perform a pending state action + // ErrNoPendingState is raised when attempting to perform a pending state action // on a backend that doesn't implement PendingContractCaller. ErrNoPendingState = errors.New("backend does not support pending state") - // This error is returned by WaitDeployed if contract creation leaves an - // empty contract behind. + // ErrNoCodeAfterDeploy is returned by WaitDeployed if contract creation leaves + // an empty contract behind. ErrNoCodeAfterDeploy = errors.New("no contract code after deployment") ) -// ContractCaller defines the methods needed to allow operating with contract on a read +// ContractCaller defines the methods needed to allow operating with a contract on a read // only basis. type ContractCaller interface { // CodeAt returns the code of the given account. This is needed to differentiate // between contract internal errors and the local chain being out of sync. CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error) - // ContractCall executes an Ethereum contract call with the specified data as the + + // CallContract executes an Ethereum contract call with the specified data as the // input. CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) } @@ -58,28 +59,41 @@ type ContractCaller interface { type PendingContractCaller interface { // PendingCodeAt returns the code of the given account in the pending state. PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) + // PendingCallContract executes an Ethereum contract call against the pending state. PendingCallContract(ctx context.Context, call ethereum.CallMsg) ([]byte, error) } -// ContractTransactor defines the methods needed to allow operating with contract -// on a write only basis. Beside the transacting method, the remainder are helpers +// ContractTransactor defines the methods needed to allow operating with a contract +// on a write only basis. Besides the transacting method, the remainder are helpers // used when the user does not provide some needed values, but rather leaves it up // to the transactor to decide. type ContractTransactor interface { + // HeaderByNumber returns a block header from the current canonical chain. If + // number is nil, the latest known header is returned. + HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) + // PendingCodeAt returns the code of the given account in the pending state. PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) + // PendingNonceAt retrieves the current pending nonce associated with an account. PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) + // SuggestGasPrice retrieves the currently suggested gas price to allow a timely // execution of a transaction. SuggestGasPrice(ctx context.Context) (*big.Int, error) + + // SuggestGasTipCap retrieves the currently suggested 1559 priority fee to allow + // a timely execution of a transaction. + SuggestGasTipCap(ctx context.Context) (*big.Int, error) + // EstimateGas tries to estimate the gas needed to execute a specific // transaction based on the current pending state of the backend blockchain. // There is no guarantee that this is the true gas limit requirement as other // transactions may be added or removed by miners, but it should provide a basis // for setting a reasonable default. EstimateGas(ctx context.Context, call ethereum.CallMsg) (gas uint64, err error) + // SendTransaction injects the transaction into the pending pool for execution. SendTransaction(ctx context.Context, tx *types.Transaction) error } diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index b9942fe9..0095edbd 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -24,66 +24,81 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/filters" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "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/common/math" + "github.com/ethereum/go-ethereum/consensus/ethash" + "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" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) -// This nil assignment ensures compile time that SimulatedBackend implements bind.ContractBackend. +// This nil assignment ensures at 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") - errGasEstimationFailed = errors.New("gas required exceeds allowance or always failing transaction") + errBlockNumberUnsupported = errors.New("simulatedBackend cannot access blocks other than the latest block") + errBlockDoesNotExist = errors.New("block does not exist in blockchain") + errTransactionDoesNotExist = errors.New("transaction does not exist") ) // SimulatedBackend implements bind.ContractBackend, simulating a blockchain in -// the background. Its main purpose is to allow easily testing contract bindings. +// the background. Its main purpose is to allow for easy testing of contract bindings. +// Simulated backend implements the following interfaces: +// ChainReader, ChainStateReader, ContractBackend, ContractCaller, ContractFilterer, ContractTransactor, +// DeployBackend, GasEstimator, GasPricer, LogFilterer, PendingContractCaller, TransactionReader, and TransactionSender type SimulatedBackend struct { database ethdb.Database // In memory database to store our testing data blockchain *core.BlockChain // Ethereum blockchain to handle the consensus - mu sync.Mutex - pendingBlock *types.Block // Currently pending block that will be imported on request - pendingState *state.StateDB // Currently pending state that will be the active on on request + mu sync.Mutex + pendingBlock *types.Block // Currently pending block that will be imported on request + pendingState *state.StateDB // Currently pending state that will be the active on request + pendingReceipts types.Receipts // Currently receipts for the pending block - events *filters.EventSystem // Event system for filtering log events live + events *filters.EventSystem // for filtering log events live + filterSystem *filters.FilterSystem // for filtering database logs config *params.ChainConfig } // NewSimulatedBackendWithDatabase creates a new binding backend based on the given database // and uses a simulated blockchain for testing purposes. +// A simulated backend always uses chainID 1337. 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) + blockchain, _ := core.NewBlockChain(database, nil, &genesis, nil, ethash.NewFaker(), vm.Config{}, nil, nil) backend := &SimulatedBackend{ database: database, blockchain: blockchain, config: genesis.Config, - events: filters.NewEventSystem(new(event.TypeMux), &filterBackend{database, blockchain}, false), } - backend.rollback() + + filterBackend := &filterBackend{database, blockchain, backend} + backend.filterSystem = filters.NewFilterSystem(filterBackend, filters.Config{}) + backend.events = filters.NewEventSystem(backend.filterSystem, false) + + backend.rollback(blockchain.CurrentBlock()) return backend } // NewSimulatedBackend creates a new binding backend using a simulated blockchain // for testing purposes. +// A simulated backend always uses chainID 1337. func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend { return NewSimulatedBackendWithDatabase(rawdb.NewMemoryDatabase(), alloc, gasLimit) } @@ -96,14 +111,20 @@ func (b *SimulatedBackend) Close() error { // Commit imports all the pending transactions as a single block and starts a // fresh new state. -func (b *SimulatedBackend) Commit() { +func (b *SimulatedBackend) Commit() common.Hash { b.mu.Lock() defer b.mu.Unlock() if _, err := b.blockchain.InsertChain([]*types.Block{b.pendingBlock}); err != nil { panic(err) // This cannot happen unless the simulator is wrong, fail in that case } - b.rollback() + blockHash := b.pendingBlock.Hash() + + // Using the last inserted block here makes it possible to build on a side + // chain after a fork. + b.rollback(b.pendingBlock) + + return blockHash } // Rollback aborts all pending transactions, reverting to the last committed state. @@ -111,15 +132,53 @@ func (b *SimulatedBackend) Rollback() { b.mu.Lock() defer b.mu.Unlock() - b.rollback() + b.rollback(b.blockchain.CurrentBlock()) } -func (b *SimulatedBackend) rollback() { - blocks, _ := core.GenerateChain(b.config, b.blockchain.CurrentBlock(), ethash.NewFaker(), b.database, 1, func(int, *core.BlockGen) {}) - statedb, _ := b.blockchain.State() +func (b *SimulatedBackend) rollback(parent *types.Block) { + blocks, _ := core.GenerateChain(b.config, parent, ethash.NewFaker(), b.database, 1, func(int, *core.BlockGen) {}) b.pendingBlock = blocks[0] - b.pendingState, _ = state.New(b.pendingBlock.Root(), statedb.Database()) + b.pendingState, _ = state.New(b.pendingBlock.Root(), b.blockchain.StateCache(), nil) +} + +// Fork creates a side-chain that can be used to simulate reorgs. +// +// This function should be called with the ancestor block where the new side +// chain should be started. Transactions (old and new) can then be applied on +// top and Commit-ed. +// +// Note, the side-chain will only become canonical (and trigger the events) when +// it becomes longer. Until then CallContract will still operate on the current +// canonical chain. +// +// There is a % chance that the side chain becomes canonical at the same length +// to simulate live network behavior. +func (b *SimulatedBackend) Fork(ctx context.Context, parent common.Hash) error { + b.mu.Lock() + defer b.mu.Unlock() + + if len(b.pendingBlock.Transactions()) != 0 { + return errors.New("pending block dirty") + } + block, err := b.blockByHash(ctx, parent) + if err != nil { + return err + } + b.rollback(block) + return nil +} + +// stateByBlockNumber retrieves a state by a given blocknumber. +func (b *SimulatedBackend) stateByBlockNumber(ctx context.Context, blockNumber *big.Int) (*state.StateDB, error) { + if blockNumber == nil || blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) == 0 { + return b.blockchain.State() + } + block, err := b.blockByNumber(ctx, blockNumber) + if err != nil { + return nil, err + } + return b.blockchain.StateAt(block.Root()) } // CodeAt returns the code associated with a certain account in the blockchain. @@ -127,11 +186,12 @@ func (b *SimulatedBackend) CodeAt(ctx context.Context, contract common.Address, b.mu.Lock() defer b.mu.Unlock() - if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 { - return nil, errBlockNumberUnsupported + stateDB, err := b.stateByBlockNumber(ctx, blockNumber) + if err != nil { + return nil, err } - statedb, _ := b.blockchain.State() - return statedb.GetCode(contract), nil + + return stateDB.GetCode(contract), nil } // BalanceAt returns the wei balance of a certain account in the blockchain. @@ -139,11 +199,12 @@ func (b *SimulatedBackend) BalanceAt(ctx context.Context, contract common.Addres b.mu.Lock() defer b.mu.Unlock() - if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 { - return nil, errBlockNumberUnsupported + stateDB, err := b.stateByBlockNumber(ctx, blockNumber) + if err != nil { + return nil, err } - statedb, _ := b.blockchain.State() - return statedb.GetBalance(contract), nil + + return stateDB.GetBalance(contract), nil } // NonceAt returns the nonce of a certain account in the blockchain. @@ -151,11 +212,12 @@ func (b *SimulatedBackend) NonceAt(ctx context.Context, contract common.Address, b.mu.Lock() defer b.mu.Unlock() - if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 { - return 0, errBlockNumberUnsupported + stateDB, err := b.stateByBlockNumber(ctx, blockNumber) + if err != nil { + return 0, err } - statedb, _ := b.blockchain.State() - return statedb.GetNonce(contract), nil + + return stateDB.GetNonce(contract), nil } // StorageAt returns the value of key in the storage of an account in the blockchain. @@ -163,17 +225,24 @@ func (b *SimulatedBackend) StorageAt(ctx context.Context, contract common.Addres b.mu.Lock() defer b.mu.Unlock() - if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 { - return nil, errBlockNumberUnsupported + stateDB, err := b.stateByBlockNumber(ctx, blockNumber) + if err != nil { + return nil, err } - statedb, _ := b.blockchain.State() - val := statedb.GetState(contract, key) + + val := stateDB.GetState(contract, key) return val[:], nil } // TransactionReceipt returns the receipt of a transaction. func (b *SimulatedBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) { + b.mu.Lock() + defer b.mu.Unlock() + receipt, _, _, _ := rawdb.ReadReceipt(b.database, txHash, b.config) + if receipt == nil { + return nil, ethereum.NotFound + } return receipt, nil } @@ -196,6 +265,126 @@ func (b *SimulatedBackend) TransactionByHash(ctx context.Context, txHash common. return nil, false, ethereum.NotFound } +// BlockByHash retrieves a block based on the block hash. +func (b *SimulatedBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + b.mu.Lock() + defer b.mu.Unlock() + + return b.blockByHash(ctx, hash) +} + +// blockByHash retrieves a block based on the block hash without Locking. +func (b *SimulatedBackend) blockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + if hash == b.pendingBlock.Hash() { + return b.pendingBlock, nil + } + + block := b.blockchain.GetBlockByHash(hash) + if block != nil { + return block, nil + } + + return nil, errBlockDoesNotExist +} + +// BlockByNumber retrieves a block from the database by number, caching it +// (associated with its hash) if found. +func (b *SimulatedBackend) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { + b.mu.Lock() + defer b.mu.Unlock() + + return b.blockByNumber(ctx, number) +} + +// blockByNumber retrieves a block from the database by number, caching it +// (associated with its hash) if found without Lock. +func (b *SimulatedBackend) blockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { + if number == nil || number.Cmp(b.pendingBlock.Number()) == 0 { + return b.blockchain.CurrentBlock(), nil + } + + block := b.blockchain.GetBlockByNumber(uint64(number.Int64())) + if block == nil { + return nil, errBlockDoesNotExist + } + + return block, nil +} + +// HeaderByHash returns a block header from the current canonical chain. +func (b *SimulatedBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if hash == b.pendingBlock.Hash() { + return b.pendingBlock.Header(), nil + } + + header := b.blockchain.GetHeaderByHash(hash) + if header == nil { + return nil, errBlockDoesNotExist + } + + return header, nil +} + +// HeaderByNumber returns a block header from the current canonical chain. If number is +// nil, the latest known header is returned. +func (b *SimulatedBackend) HeaderByNumber(ctx context.Context, block *big.Int) (*types.Header, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if block == nil || block.Cmp(b.pendingBlock.Number()) == 0 { + return b.blockchain.CurrentHeader(), nil + } + + return b.blockchain.GetHeaderByNumber(uint64(block.Int64())), nil +} + +// TransactionCount returns the number of transactions in a given block. +func (b *SimulatedBackend) TransactionCount(ctx context.Context, blockHash common.Hash) (uint, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if blockHash == b.pendingBlock.Hash() { + return uint(b.pendingBlock.Transactions().Len()), nil + } + + block := b.blockchain.GetBlockByHash(blockHash) + if block == nil { + return uint(0), errBlockDoesNotExist + } + + return uint(block.Transactions().Len()), nil +} + +// TransactionInBlock returns the transaction for a specific block at a specific index. +func (b *SimulatedBackend) TransactionInBlock(ctx context.Context, blockHash common.Hash, index uint) (*types.Transaction, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if blockHash == b.pendingBlock.Hash() { + transactions := b.pendingBlock.Transactions() + if uint(len(transactions)) < index+1 { + return nil, errTransactionDoesNotExist + } + + return transactions[index], nil + } + + block := b.blockchain.GetBlockByHash(blockHash) + if block == nil { + return nil, errBlockDoesNotExist + } + + transactions := block.Transactions() + if uint(len(transactions)) < index+1 { + return nil, errTransactionDoesNotExist + } + + return transactions[index], nil +} + // 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() @@ -204,6 +393,36 @@ func (b *SimulatedBackend) PendingCodeAt(ctx context.Context, contract common.Ad return b.pendingState.GetCode(contract), nil } +func newRevertError(result *core.ExecutionResult) *revertError { + reason, errUnpack := abi.UnpackRevert(result.Revert()) + err := errors.New("execution reverted") + if errUnpack == nil { + err = fmt.Errorf("execution reverted: %v", reason) + } + return &revertError{ + error: err, + reason: hexutil.Encode(result.Revert()), + } +} + +// revertError is an API error that encompasses an EVM revert with JSON error +// code and a binary data blob. +type revertError struct { + error + reason string // revert reason hex encoded +} + +// ErrorCode returns the JSON error code for a revert. +// See: https://github.com/ethereum/wiki/wiki/JSON-RPC-Error-Codes-Improvement-Proposal +func (e *revertError) ErrorCode() int { + return 3 +} + +// ErrorData returns the hex encoded revert reason. +func (e *revertError) ErrorData() interface{} { + return e.reason +} + // CallContract executes a contract call. func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) { b.mu.Lock() @@ -212,12 +431,19 @@ func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallM if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 { return nil, errBlockNumberUnsupported } - state, err := b.blockchain.State() + stateDB, err := b.blockchain.State() if err != nil { return nil, err } - rval, _, _, err := b.callContract(ctx, call, b.blockchain.CurrentBlock(), state) - return rval, err + res, err := b.callContract(ctx, call, b.blockchain.CurrentBlock(), stateDB) + if err != nil { + return nil, err + } + // If the result contains a revert reason, try to unpack and return it. + if len(res.Revert()) > 0 { + return nil, newRevertError(res) + } + return res.Return(), res.Err } // PendingCallContract executes a contract call on the pending state. @@ -226,8 +452,15 @@ func (b *SimulatedBackend) PendingCallContract(ctx context.Context, call ethereu defer b.mu.Unlock() defer b.pendingState.RevertToSnapshot(b.pendingState.Snapshot()) - rval, _, _, err := b.callContract(ctx, call, b.pendingBlock, b.pendingState) - return rval, err + res, err := b.callContract(ctx, call, b.pendingBlock, b.pendingState) + if err != nil { + return nil, err + } + // If the result contains a revert reason, try to unpack and return it. + if len(res.Revert()) > 0 { + return nil, newRevertError(res) + } + return res.Return(), res.Err } // PendingNonceAt implements PendingStateReader.PendingNonceAt, retrieving @@ -242,6 +475,18 @@ func (b *SimulatedBackend) PendingNonceAt(ctx context.Context, account common.Ad // SuggestGasPrice implements ContractTransactor.SuggestGasPrice. Since the simulated // chain doesn't have miners, we just return a gas price of 1 for any call. func (b *SimulatedBackend) SuggestGasPrice(ctx context.Context) (*big.Int, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if b.pendingBlock.Header().BaseFee != nil { + return b.pendingBlock.Header().BaseFee, nil + } + return big.NewInt(1), nil +} + +// SuggestGasTipCap implements ContractTransactor.SuggestGasTipCap. Since the simulated +// chain doesn't have miners, we just return a gas tip of 1 for any call. +func (b *SimulatedBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { return big.NewInt(1), nil } @@ -262,25 +507,68 @@ func (b *SimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMs } else { hi = b.pendingBlock.GasLimit() } + // Normalize the max fee per gas the call is willing to spend. + var feeCap *big.Int + if call.GasPrice != nil && (call.GasFeeCap != nil || call.GasTipCap != nil) { + return 0, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } else if call.GasPrice != nil { + feeCap = call.GasPrice + } else if call.GasFeeCap != nil { + feeCap = call.GasFeeCap + } else { + feeCap = common.Big0 + } + // Recap the highest gas allowance with account's balance. + if feeCap.BitLen() != 0 { + balance := b.pendingState.GetBalance(call.From) // from can't be nil + available := new(big.Int).Set(balance) + if call.Value != nil { + if call.Value.Cmp(available) >= 0 { + return 0, errors.New("insufficient funds for transfer") + } + available.Sub(available, call.Value) + } + allowance := new(big.Int).Div(available, feeCap) + if allowance.IsUint64() && hi > allowance.Uint64() { + transfer := call.Value + if transfer == nil { + transfer = new(big.Int) + } + log.Warn("Gas estimation capped by limited funds", "original", hi, "balance", balance, + "sent", transfer, "feecap", feeCap, "fundable", allowance) + hi = allowance.Uint64() + } + } cap = hi // Create a helper to check if a gas allowance results in an executable transaction - executable := func(gas uint64) bool { + executable := func(gas uint64) (bool, *core.ExecutionResult, error) { call.Gas = gas snapshot := b.pendingState.Snapshot() - _, _, failed, err := b.callContract(ctx, call, b.pendingBlock, b.pendingState) + res, err := b.callContract(ctx, call, b.pendingBlock, b.pendingState) b.pendingState.RevertToSnapshot(snapshot) - if err != nil || failed { - return false + if err != nil { + if errors.Is(err, core.ErrIntrinsicGas) { + return true, nil, nil // Special case, raise gas limit + } + return true, nil, err // Bail out } - return true + return res.Failed(), res, nil } // Execute the binary search and hone in on an executable gas limit for lo+1 < hi { mid := (hi + lo) / 2 - if !executable(mid) { + failed, _, err := executable(mid) + + // If the error is not nil(consensus error), it means the provided message + // call or transaction will never be accepted no matter how much gas it is + // assigned. Return the error directly, don't struggle any more + if err != nil { + return 0, err + } + if failed { lo = mid } else { hi = mid @@ -288,8 +576,19 @@ func (b *SimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMs } // Reject the transaction as invalid if it still fails at the highest allowance if hi == cap { - if !executable(hi) { - return 0, errGasEstimationFailed + failed, result, err := executable(hi) + if err != nil { + return 0, err + } + if failed { + if result != nil && result.Err != vm.ErrOutOfGas { + if len(result.Revert()) > 0 { + return 0, newRevertError(result) + } + return 0, result.Err + } + // Otherwise, the specified gas cap is too low + return 0, fmt.Errorf("gas required exceeds allowance (%d)", cap) } } return hi, nil @@ -297,11 +596,39 @@ func (b *SimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMs // callContract implements common code between normal and pending contract calls. // state is modified during execution, make sure to copy it if necessary. -func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallMsg, block *types.Block, statedb *state.StateDB) ([]byte, uint64, bool, error) { - // Ensure message is initialized properly. - if call.GasPrice == nil { - call.GasPrice = big.NewInt(1) +func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallMsg, block *types.Block, stateDB *state.StateDB) (*core.ExecutionResult, error) { + // Gas prices post 1559 need to be initialized + if call.GasPrice != nil && (call.GasFeeCap != nil || call.GasTipCap != nil) { + return nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } + head := b.blockchain.CurrentHeader() + if !b.blockchain.Config().IsLondon(head.Number) { + // If there's no basefee, then it must be a non-1559 execution + if call.GasPrice == nil { + call.GasPrice = new(big.Int) + } + call.GasFeeCap, call.GasTipCap = call.GasPrice, call.GasPrice + } else { + // A basefee is provided, necessitating 1559-type execution + if call.GasPrice != nil { + // User specified the legacy gas field, convert to 1559 gas typing + call.GasFeeCap, call.GasTipCap = call.GasPrice, call.GasPrice + } else { + // User specified 1559 gas fields (or none), use those + if call.GasFeeCap == nil { + call.GasFeeCap = new(big.Int) + } + if call.GasTipCap == nil { + call.GasTipCap = new(big.Int) + } + // Backfill the legacy gasPrice for EVM execution, unless we're all zeroes + call.GasPrice = new(big.Int) + if call.GasFeeCap.BitLen() > 0 || call.GasTipCap.BitLen() > 0 { + call.GasPrice = math.BigMin(new(big.Int).Add(call.GasTipCap, head.BaseFee), call.GasFeeCap) + } + } } + // Ensure message is initialized properly. if call.Gas == 0 { call.Gas = 50000000 } @@ -309,45 +636,53 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallM call.Value = new(big.Int) } // Set infinite balance to the fake caller account. - from := statedb.GetOrNewStateObject(call.From) + from := stateDB.GetOrNewStateObject(call.From) from.SetBalance(math.MaxBig256) // Execute the call. - msg := callmsg{call} + msg := callMsg{call} - evmContext := core.NewEVMContext(msg, block.Header(), b.blockchain, nil) + txContext := core.NewEVMTxContext(msg) + evmContext := core.NewEVMBlockContext(block.Header(), b.blockchain, nil) // Create a new environment which holds all relevant information // about the transaction and calling mechanisms. - vmenv := vm.NewEVM(evmContext, statedb, b.config, vm.Config{}) - gaspool := new(core.GasPool).AddGas(math.MaxUint64) + vmEnv := vm.NewEVM(evmContext, txContext, stateDB, b.config, vm.Config{NoBaseFee: true}) + gasPool := new(core.GasPool).AddGas(math.MaxUint64) - return core.NewStateTransition(vmenv, msg, gaspool).TransitionDb() + return core.NewStateTransition(vmEnv, msg, gasPool).TransitionDb() } // SendTransaction updates the pending block to include the given transaction. -// It panics if the transaction is invalid. func (b *SimulatedBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error { b.mu.Lock() defer b.mu.Unlock() - sender, err := types.Sender(types.NewEIP155Signer(b.config.ChainID), tx) + // Get the last block + block, err := b.blockByHash(ctx, b.pendingBlock.ParentHash()) if err != nil { - panic(fmt.Errorf("invalid transaction: %v", err)) + return fmt.Errorf("could not fetch parent") + } + // Check transaction validity + signer := types.MakeSigner(b.blockchain.Config(), block.Number()) + sender, err := types.Sender(signer, tx) + if err != nil { + return fmt.Errorf("invalid transaction: %v", err) } nonce := b.pendingState.GetNonce(sender) if tx.Nonce() != nonce { - panic(fmt.Errorf("invalid transaction nonce: got %d, want %d", tx.Nonce(), nonce)) + return fmt.Errorf("invalid transaction nonce: got %d, want %d", tx.Nonce(), nonce) } - - blocks, _ := core.GenerateChain(b.config, b.blockchain.CurrentBlock(), ethash.NewFaker(), b.database, 1, func(number int, block *core.BlockGen) { + // Include tx in chain + blocks, receipts := core.GenerateChain(b.config, block, ethash.NewFaker(), b.database, 1, func(number int, block *core.BlockGen) { for _, tx := range b.pendingBlock.Transactions() { block.AddTxWithChain(b.blockchain, tx) } block.AddTxWithChain(b.blockchain, tx) }) - statedb, _ := b.blockchain.State() + stateDB, _ := b.blockchain.State() b.pendingBlock = blocks[0] - b.pendingState, _ = state.New(b.pendingBlock.Root(), statedb.Database()) + b.pendingState, _ = state.New(b.pendingBlock.Root(), stateDB.Database(), nil) + b.pendingReceipts = receipts[0] return nil } @@ -359,9 +694,9 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter var filter *filters.Filter if query.BlockHash != nil { // Block filter requested, construct a single-shot filter - filter = filters.NewBlockFilter(&filterBackend{b.database, b.blockchain}, *query.BlockHash, query.Addresses, query.Topics) + filter = b.filterSystem.NewBlockFilter(*query.BlockHash, query.Addresses, query.Topics) } else { - // Initialize unset filter boundaried to run from genesis to chain head + // Initialize unset filter boundaries to run from genesis to chain head from := int64(0) if query.FromBlock != nil { from = query.FromBlock.Int64() @@ -371,7 +706,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter to = query.ToBlock.Int64() } // Construct the range filter - filter = filters.NewRangeFilter(&filterBackend{b.database, b.blockchain}, from, to, query.Addresses, query.Topics) + filter = b.filterSystem.NewRangeFilter(from, to, query.Addresses, query.Topics) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) @@ -379,8 +714,8 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter return nil, err } res := make([]types.Log, len(logs)) - for i, log := range logs { - res[i] = *log + for i, nLog := range logs { + res[i] = *nLog } return res, nil } @@ -401,9 +736,9 @@ func (b *SimulatedBackend) SubscribeFilterLogs(ctx context.Context, query ethere for { select { case logs := <-sink: - for _, log := range logs { + for _, nlog := range logs { select { - case ch <- *log: + case ch <- *nlog: case err := <-sub.Err(): return err case <-quit: @@ -419,20 +754,50 @@ func (b *SimulatedBackend) SubscribeFilterLogs(ctx context.Context, query ethere }), nil } +// SubscribeNewHead returns an event subscription for a new header. +func (b *SimulatedBackend) SubscribeNewHead(ctx context.Context, ch chan<- *types.Header) (ethereum.Subscription, error) { + // subscribe to a new head + sink := make(chan *types.Header) + sub := b.events.SubscribeNewHeads(sink) + + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case head := <-sink: + select { + case ch <- head: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + // AdjustTime adds a time shift to the simulated clock. +// It can only be called on empty blocks. func (b *SimulatedBackend) AdjustTime(adjustment time.Duration) error { b.mu.Lock() defer b.mu.Unlock() + + if len(b.pendingBlock.Transactions()) != 0 { + return errors.New("Could not adjust time on non-empty block") + } + blocks, _ := core.GenerateChain(b.config, b.blockchain.CurrentBlock(), ethash.NewFaker(), b.database, 1, func(number int, block *core.BlockGen) { - for _, tx := range b.pendingBlock.Transactions() { - block.AddTx(tx) - } block.OffsetTime(int64(adjustment.Seconds())) }) - statedb, _ := b.blockchain.State() + stateDB, _ := b.blockchain.State() b.pendingBlock = blocks[0] - b.pendingState, _ = state.New(b.pendingBlock.Root(), statedb.Database()) + b.pendingState, _ = state.New(b.pendingBlock.Root(), stateDB.Database(), nil) return nil } @@ -442,28 +807,33 @@ func (b *SimulatedBackend) Blockchain() *core.BlockChain { return b.blockchain } -// callmsg implements core.Message to allow passing it as a transaction simulator. -type callmsg struct { +// callMsg implements core.Message to allow passing it as a transaction simulator. +type callMsg struct { ethereum.CallMsg } -func (m callmsg) From() common.Address { return m.CallMsg.From } -func (m callmsg) Nonce() uint64 { return 0 } -func (m callmsg) CheckNonce() bool { return false } -func (m callmsg) To() *common.Address { return m.CallMsg.To } -func (m callmsg) GasPrice() *big.Int { return m.CallMsg.GasPrice } -func (m callmsg) Gas() uint64 { return m.CallMsg.Gas } -func (m callmsg) Value() *big.Int { return m.CallMsg.Value } -func (m callmsg) Data() []byte { return m.CallMsg.Data } +func (m callMsg) From() common.Address { return m.CallMsg.From } +func (m callMsg) Nonce() uint64 { return 0 } +func (m callMsg) IsFake() bool { return true } +func (m callMsg) To() *common.Address { return m.CallMsg.To } +func (m callMsg) GasPrice() *big.Int { return m.CallMsg.GasPrice } +func (m callMsg) GasFeeCap() *big.Int { return m.CallMsg.GasFeeCap } +func (m callMsg) GasTipCap() *big.Int { return m.CallMsg.GasTipCap } +func (m callMsg) Gas() uint64 { return m.CallMsg.Gas } +func (m callMsg) Value() *big.Int { return m.CallMsg.Value } +func (m callMsg) Data() []byte { return m.CallMsg.Data } +func (m callMsg) AccessList() types.AccessList { return m.CallMsg.AccessList } // filterBackend implements filters.Backend to support filtering for logs without // taking bloom-bits acceleration structures into account. type filterBackend struct { - db ethdb.Database - bc *core.BlockChain + db ethdb.Database + bc *core.BlockChain + backend *SimulatedBackend } -func (fb *filterBackend) ChainDb() ethdb.Database { return fb.db } +func (fb *filterBackend) ChainDb() ethdb.Database { return fb.db } + func (fb *filterBackend) EventMux() *event.TypeMux { panic("not supported") } func (fb *filterBackend) HeaderByNumber(ctx context.Context, block rpc.BlockNumber) (*types.Header, error) { @@ -477,6 +847,10 @@ func (fb *filterBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*t return fb.bc.GetHeaderByHash(hash), nil } +func (fb *filterBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + return fb.backend.pendingBlock, fb.backend.pendingReceipts +} + func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { number := rawdb.ReadHeaderNumber(fb.db, hash) if number == nil { @@ -485,39 +859,40 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ return rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config()), nil } -func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) { - number := rawdb.ReadHeaderNumber(fb.db, hash) - if number == nil { - return nil, nil - } - receipts := rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config()) - if receipts == nil { - return nil, nil - } - logs := make([][]*types.Log, len(receipts)) - for i, receipt := range receipts { - logs[i] = receipt.Logs - } +func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, error) { + logs := rawdb.ReadLogs(fb.db, hash, number, fb.bc.Config()) return logs, nil } func (fb *filterBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { - return event.NewSubscription(func(quit <-chan struct{}) error { - <-quit - return nil - }) + return nullSubscription() } + func (fb *filterBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { return fb.bc.SubscribeChainEvent(ch) } + func (fb *filterBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { return fb.bc.SubscribeRemovedLogsEvent(ch) } + func (fb *filterBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { return fb.bc.SubscribeLogsEvent(ch) } +func (fb *filterBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { + return nullSubscription() +} + func (fb *filterBackend) BloomStatus() (uint64, uint64) { return 4096, 0 } + func (fb *filterBackend) ServiceFilter(ctx context.Context, ms *bloombits.MatcherSession) { panic("not supported") } + +func nullSubscription() event.Subscription { + return event.NewSubscription(func(quit <-chan struct{}) error { + <-quit + return nil + }) +} diff --git a/accounts/abi/bind/backends/simulated_test.go b/accounts/abi/bind/backends/simulated_test.go index 5b9b21e2..83367f09 100644 --- a/accounts/abi/bind/backends/simulated_test.go +++ b/accounts/abi/bind/backends/simulated_test.go @@ -14,30 +14,37 @@ // 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 +package backends import ( + "bytes" "context" + "errors" "math/big" + "math/rand" + "reflect" + "strings" "testing" + "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "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" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" ) func TestSimulatedBackend(t *testing.T) { var gasLimit uint64 = 8000029 key, _ := crypto.GenerateKey() // nolint: gosec - auth := bind.NewKeyedTransactor(key) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) genAlloc := make(core.GenesisAlloc) genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)} - sim := backends.NewSimulatedBackend(genAlloc, gasLimit) + sim := NewSimulatedBackend(genAlloc, gasLimit) defer sim.Close() // should return an error if the tx is not found @@ -52,9 +59,12 @@ func TestSimulatedBackend(t *testing.T) { } // generate a transaction and confirm you can retrieve it + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + code := `6060604052600a8060106000396000f360606040526008565b00` var gas uint64 = 3000000 - tx := types.NewContractCreation(0, big.NewInt(0), gas, big.NewInt(1), common.FromHex(code)) + tx := types.NewContractCreation(0, big.NewInt(0), gas, gasPrice, common.FromHex(code)) tx, _ = types.SignTx(tx, types.HomesteadSigner{}, key) err = sim.SendTransaction(context.Background(), tx) @@ -72,12 +82,1295 @@ func TestSimulatedBackend(t *testing.T) { } sim.Commit() - tx, isPending, err = sim.TransactionByHash(context.Background(), txHash) + _, 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") } +} + +var testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + +// the following is based on this contract: +// contract T { +// event received(address sender, uint amount, bytes memo); +// event receivedAddr(address sender); +// +// function receive(bytes calldata memo) external payable returns (string memory res) { +// emit received(msg.sender, msg.value, memo); +// emit receivedAddr(msg.sender); +// return "hello world"; +// } +// } +const abiJSON = `[ { "constant": false, "inputs": [ { "name": "memo", "type": "bytes" } ], "name": "receive", "outputs": [ { "name": "res", "type": "string" } ], "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" } ]` +const abiBin = `0x608060405234801561001057600080fd5b506102a0806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063a69b6ed014610040575b600080fd5b6100b76004803603602081101561005657600080fd5b810190808035906020019064010000000081111561007357600080fd5b82018360208201111561008557600080fd5b803590602001918460018302840111640100000000831117156100a757600080fd5b9091929391929390505050610132565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f75780820151818401526020810190506100dc565b50505050905090810190601f1680156101245780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60607f75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed33348585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a17f46923992397eac56cf13058aced2a1871933622717e27b24eabc13bf9dd329c833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16040805190810160405280600b81526020017f68656c6c6f20776f726c6400000000000000000000000000000000000000000081525090509291505056fea165627a7a72305820ff0c57dad254cfeda48c9cfb47f1353a558bccb4d1bc31da1dae69315772d29e0029` +const deployedCode = `60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063a69b6ed014610040575b600080fd5b6100b76004803603602081101561005657600080fd5b810190808035906020019064010000000081111561007357600080fd5b82018360208201111561008557600080fd5b803590602001918460018302840111640100000000831117156100a757600080fd5b9091929391929390505050610132565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f75780820151818401526020810190506100dc565b50505050905090810190601f1680156101245780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60607f75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed33348585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a17f46923992397eac56cf13058aced2a1871933622717e27b24eabc13bf9dd329c833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16040805190810160405280600b81526020017f68656c6c6f20776f726c6400000000000000000000000000000000000000000081525090509291505056fea165627a7a72305820ff0c57dad254cfeda48c9cfb47f1353a558bccb4d1bc31da1dae69315772d29e0029` + +// expected return value contains "hello world" +var expectedReturn = []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, 32, 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, 11, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +func simTestBackend(testAddr common.Address) *SimulatedBackend { + return NewSimulatedBackend( + core.GenesisAlloc{ + testAddr: {Balance: big.NewInt(10000000000000000)}, + }, 10000000, + ) +} + +func TestNewSimulatedBackend(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + expectedBal := big.NewInt(10000000000000000) + sim := simTestBackend(testAddr) + defer sim.Close() + + if sim.config != params.AllEthashProtocolChanges { + t.Errorf("expected sim config to equal params.AllEthashProtocolChanges, got %v", sim.config) + } + + if sim.blockchain.Config() != params.AllEthashProtocolChanges { + t.Errorf("expected sim blockchain config to equal params.AllEthashProtocolChanges, got %v", sim.config) + } + + stateDB, _ := sim.blockchain.State() + bal := stateDB.GetBalance(testAddr) + if bal.Cmp(expectedBal) != 0 { + t.Errorf("expected balance for test address not received. expected: %v actual: %v", expectedBal, bal) + } +} + +func TestAdjustTime(t *testing.T) { + sim := NewSimulatedBackend( + core.GenesisAlloc{}, 10000000, + ) + defer sim.Close() + + prevTime := sim.pendingBlock.Time() + if err := sim.AdjustTime(time.Second); err != nil { + t.Error(err) + } + newTime := sim.pendingBlock.Time() + + if newTime-prevTime != uint64(time.Second.Seconds()) { + t.Errorf("adjusted time not equal to a second. prev: %v, new: %v", prevTime, newTime) + } +} + +func TestNewAdjustTimeFail(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + + // Create tx and send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(0, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + sim.SendTransaction(context.Background(), signedTx) + // AdjustTime should fail on non-empty block + if err := sim.AdjustTime(time.Second); err == nil { + t.Error("Expected adjust time to error on non-empty block") + } + sim.Commit() + + prevTime := sim.pendingBlock.Time() + if err := sim.AdjustTime(time.Minute); err != nil { + t.Error(err) + } + newTime := sim.pendingBlock.Time() + if newTime-prevTime != uint64(time.Minute.Seconds()) { + t.Errorf("adjusted time not equal to a minute. prev: %v, new: %v", prevTime, newTime) + } + // Put a transaction after adjusting time + tx2 := types.NewTransaction(1, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx2, err := types.SignTx(tx2, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + sim.SendTransaction(context.Background(), signedTx2) + sim.Commit() + newTime = sim.pendingBlock.Time() + if newTime-prevTime >= uint64(time.Minute.Seconds()) { + t.Errorf("time adjusted, but shouldn't be: prev: %v, new: %v", prevTime, newTime) + } +} + +func TestBalanceAt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + expectedBal := big.NewInt(10000000000000000) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + bal, err := sim.BalanceAt(bgCtx, testAddr, nil) + if err != nil { + t.Error(err) + } + + if bal.Cmp(expectedBal) != 0 { + t.Errorf("expected balance for test address not received. expected: %v actual: %v", expectedBal, bal) + } +} + +func TestBlockByHash(t *testing.T) { + sim := NewSimulatedBackend( + core.GenesisAlloc{}, 10000000, + ) + defer sim.Close() + bgCtx := context.Background() + + block, err := sim.BlockByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + blockByHash, err := sim.BlockByHash(bgCtx, block.Hash()) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + + if block.Hash() != blockByHash.Hash() { + t.Errorf("did not get expected block") + } +} + +func TestBlockByNumber(t *testing.T) { + sim := NewSimulatedBackend( + core.GenesisAlloc{}, 10000000, + ) + defer sim.Close() + bgCtx := context.Background() + + block, err := sim.BlockByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + if block.NumberU64() != 0 { + t.Errorf("did not get most recent block, instead got block number %v", block.NumberU64()) + } + + // create one block + sim.Commit() + + block, err = sim.BlockByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + if block.NumberU64() != 1 { + t.Errorf("did not get most recent block, instead got block number %v", block.NumberU64()) + } + + blockByNumber, err := sim.BlockByNumber(bgCtx, big.NewInt(1)) + if err != nil { + t.Errorf("could not get block by number: %v", err) + } + if blockByNumber.Hash() != block.Hash() { + t.Errorf("did not get the same block with height of 1 as before") + } +} + +func TestNonceAt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + nonce, err := sim.NonceAt(bgCtx, testAddr, big.NewInt(0)) + if err != nil { + t.Errorf("could not get nonce for test addr: %v", err) + } + + if nonce != uint64(0) { + t.Errorf("received incorrect nonce. expected 0, got %v", nonce) + } + + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(nonce, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + sim.Commit() + + newNonce, err := sim.NonceAt(bgCtx, testAddr, big.NewInt(1)) + if err != nil { + t.Errorf("could not get nonce for test addr: %v", err) + } + + if newNonce != nonce+uint64(1) { + t.Errorf("received incorrect nonce. expected 1, got %v", nonce) + } + // create some more blocks + sim.Commit() + // Check that we can get data for an older block/state + newNonce, err = sim.NonceAt(bgCtx, testAddr, big.NewInt(1)) + if err != nil { + t.Fatalf("could not get nonce for test addr: %v", err) + } + if newNonce != nonce+uint64(1) { + t.Fatalf("received incorrect nonce. expected 1, got %v", nonce) + } +} + +func TestSendTransaction(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + sim.Commit() + block, err := sim.BlockByNumber(bgCtx, big.NewInt(1)) + if err != nil { + t.Errorf("could not get block at height 1: %v", err) + } + + if signedTx.Hash() != block.Transactions()[0].Hash() { + t.Errorf("did not commit sent transaction. expected hash %v got hash %v", block.Transactions()[0].Hash(), signedTx.Hash()) + } +} + +func TestTransactionByHash(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := NewSimulatedBackend( + core.GenesisAlloc{ + testAddr: {Balance: big.NewInt(10000000000000000)}, + }, 10000000, + ) + defer sim.Close() + bgCtx := context.Background() + + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + + // ensure tx is committed pending + receivedTx, pending, err := sim.TransactionByHash(bgCtx, signedTx.Hash()) + if err != nil { + t.Errorf("could not get transaction by hash %v: %v", signedTx.Hash(), err) + } + if !pending { + t.Errorf("expected transaction to be in pending state") + } + if receivedTx.Hash() != signedTx.Hash() { + t.Errorf("did not received committed transaction. expected hash %v got hash %v", signedTx.Hash(), receivedTx.Hash()) + } + + sim.Commit() + + // ensure tx is not and committed pending + receivedTx, pending, err = sim.TransactionByHash(bgCtx, signedTx.Hash()) + if err != nil { + t.Errorf("could not get transaction by hash %v: %v", signedTx.Hash(), err) + } + if pending { + t.Errorf("expected transaction to not be in pending state") + } + if receivedTx.Hash() != signedTx.Hash() { + t.Errorf("did not received committed transaction. expected hash %v got hash %v", signedTx.Hash(), receivedTx.Hash()) + } +} + +func TestEstimateGas(t *testing.T) { + /* + pragma solidity ^0.6.4; + contract GasEstimation { + function PureRevert() public { revert(); } + function Revert() public { revert("revert reason");} + function OOG() public { for (uint i = 0; ; i++) {}} + function Assert() public { assert(false);} + function Valid() public {} + }*/ + const contractAbi = "[{\"inputs\":[],\"name\":\"Assert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OOG\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PureRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Valid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + const contractBin = "0x60806040523480156100115760006000fd5b50610017565b61016e806100266000396000f3fe60806040523480156100115760006000fd5b506004361061005c5760003560e01c806350f6fe3414610062578063aa8b1d301461006c578063b9b046f914610076578063d8b9839114610080578063e09fface1461008a5761005c565b60006000fd5b61006a610094565b005b6100746100ad565b005b61007e6100b5565b005b6100886100c2565b005b610092610135565b005b6000600090505b5b808060010191505061009b565b505b565b60006000fd5b565b600015156100bf57fe5b5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f72657665727420726561736f6e0000000000000000000000000000000000000081526020015060200191505060405180910390fd5b565b5b56fea2646970667358221220345bbcbb1a5ecf22b53a78eaebf95f8ee0eceff6d10d4b9643495084d2ec934a64736f6c63430006040033" + + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + opts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + + sim := NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether)}}, 10000000) + defer sim.Close() + + parsed, _ := abi.JSON(strings.NewReader(contractAbi)) + contractAddr, _, _, _ := bind.DeployContract(opts, parsed, common.FromHex(contractBin), sim) + sim.Commit() + + var cases = []struct { + name string + message ethereum.CallMsg + expect uint64 + expectError error + expectData interface{} + }{ + {"plain transfer(valid)", ethereum.CallMsg{ + From: addr, + To: &addr, + Gas: 0, + GasPrice: big.NewInt(0), + Value: big.NewInt(1), + Data: nil, + }, params.TxGas, nil, nil}, + + {"plain transfer(invalid)", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 0, + GasPrice: big.NewInt(0), + Value: big.NewInt(1), + Data: nil, + }, 0, errors.New("execution reverted"), nil}, + + {"Revert", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 0, + GasPrice: big.NewInt(0), + Value: nil, + Data: common.Hex2Bytes("d8b98391"), + }, 0, errors.New("execution reverted: revert reason"), "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000d72657665727420726561736f6e00000000000000000000000000000000000000"}, + + {"PureRevert", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 0, + GasPrice: big.NewInt(0), + Value: nil, + Data: common.Hex2Bytes("aa8b1d30"), + }, 0, errors.New("execution reverted"), nil}, + + {"OOG", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 100000, + GasPrice: big.NewInt(0), + Value: nil, + Data: common.Hex2Bytes("50f6fe34"), + }, 0, errors.New("gas required exceeds allowance (100000)"), nil}, + + {"Assert", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 100000, + GasPrice: big.NewInt(0), + Value: nil, + Data: common.Hex2Bytes("b9b046f9"), + }, 0, errors.New("invalid opcode: INVALID"), nil}, + + {"Valid", ethereum.CallMsg{ + From: addr, + To: &contractAddr, + Gas: 100000, + GasPrice: big.NewInt(0), + Value: nil, + Data: common.Hex2Bytes("e09fface"), + }, 21275, nil, nil}, + } + for _, c := range cases { + got, err := sim.EstimateGas(context.Background(), c.message) + if c.expectError != nil { + if err == nil { + t.Fatalf("Expect error, got nil") + } + if c.expectError.Error() != err.Error() { + t.Fatalf("Expect error, want %v, got %v", c.expectError, err) + } + if c.expectData != nil { + if err, ok := err.(*revertError); !ok { + t.Fatalf("Expect revert error, got %T", err) + } else if !reflect.DeepEqual(err.ErrorData(), c.expectData) { + t.Fatalf("Error data mismatch, want %v, got %v", c.expectData, err.ErrorData()) + } + } + continue + } + if got != c.expect { + t.Fatalf("Gas estimation mismatch, want %d, got %d", c.expect, got) + } + } +} + +func TestEstimateGasWithPrice(t *testing.T) { + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + + sim := NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether*2 + 2e17)}}, 10000000) + defer sim.Close() + + recipient := common.HexToAddress("deadbeef") + var cases = []struct { + name string + message ethereum.CallMsg + expect uint64 + expectError error + }{ + {"EstimateWithoutPrice", ethereum.CallMsg{ + From: addr, + To: &recipient, + Gas: 0, + GasPrice: big.NewInt(0), + Value: big.NewInt(100000000000), + Data: nil, + }, 21000, nil}, + + {"EstimateWithPrice", ethereum.CallMsg{ + From: addr, + To: &recipient, + Gas: 0, + GasPrice: big.NewInt(100000000000), + Value: big.NewInt(100000000000), + Data: nil, + }, 21000, nil}, + + {"EstimateWithVeryHighPrice", ethereum.CallMsg{ + From: addr, + To: &recipient, + Gas: 0, + GasPrice: big.NewInt(1e14), // gascost = 2.1ether + Value: big.NewInt(1e17), // the remaining balance for fee is 2.1ether + Data: nil, + }, 21000, nil}, + + {"EstimateWithSuperhighPrice", ethereum.CallMsg{ + From: addr, + To: &recipient, + Gas: 0, + GasPrice: big.NewInt(2e14), // gascost = 4.2ether + Value: big.NewInt(100000000000), + Data: nil, + }, 21000, errors.New("gas required exceeds allowance (10999)")}, // 10999=(2.2ether-1000wei)/(2e14) + + {"EstimateEIP1559WithHighFees", ethereum.CallMsg{ + From: addr, + To: &addr, + Gas: 0, + GasFeeCap: big.NewInt(1e14), // maxgascost = 2.1ether + GasTipCap: big.NewInt(1), + Value: big.NewInt(1e17), // the remaining balance for fee is 2.1ether + Data: nil, + }, params.TxGas, nil}, + + {"EstimateEIP1559WithSuperHighFees", ethereum.CallMsg{ + From: addr, + To: &addr, + Gas: 0, + GasFeeCap: big.NewInt(1e14), // maxgascost = 2.1ether + GasTipCap: big.NewInt(1), + Value: big.NewInt(1e17 + 1), // the remaining balance for fee is 2.1ether + Data: nil, + }, params.TxGas, errors.New("gas required exceeds allowance (20999)")}, // 20999=(2.2ether-0.1ether-1wei)/(1e14) + } + for i, c := range cases { + got, err := sim.EstimateGas(context.Background(), c.message) + if c.expectError != nil { + if err == nil { + t.Fatalf("test %d: expect error, got nil", i) + } + if c.expectError.Error() != err.Error() { + t.Fatalf("test %d: expect error, want %v, got %v", i, c.expectError, err) + } + continue + } + if c.expectError == nil && err != nil { + t.Fatalf("test %d: didn't expect error, got %v", i, err) + } + if got != c.expect { + t.Fatalf("test %d: gas estimation mismatch, want %d, got %d", i, c.expect, got) + } + } +} + +func TestHeaderByHash(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + header, err := sim.HeaderByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + headerByHash, err := sim.HeaderByHash(bgCtx, header.Hash()) + if err != nil { + t.Errorf("could not get recent block: %v", err) + } + + if header.Hash() != headerByHash.Hash() { + t.Errorf("did not get expected block") + } +} + +func TestHeaderByNumber(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + latestBlockHeader, err := sim.HeaderByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get header for tip of chain: %v", err) + } + if latestBlockHeader == nil { + t.Errorf("received a nil block header") + } else if latestBlockHeader.Number.Uint64() != uint64(0) { + t.Errorf("expected block header number 0, instead got %v", latestBlockHeader.Number.Uint64()) + } + + sim.Commit() + + latestBlockHeader, err = sim.HeaderByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get header for blockheight of 1: %v", err) + } + + blockHeader, err := sim.HeaderByNumber(bgCtx, big.NewInt(1)) + if err != nil { + t.Errorf("could not get header for blockheight of 1: %v", err) + } + + if blockHeader.Hash() != latestBlockHeader.Hash() { + t.Errorf("block header and latest block header are not the same") + } + if blockHeader.Number.Int64() != int64(1) { + t.Errorf("did not get blockheader for block 1. instead got block %v", blockHeader.Number.Int64()) + } + + block, err := sim.BlockByNumber(bgCtx, big.NewInt(1)) + if err != nil { + t.Errorf("could not get block for blockheight of 1: %v", err) + } + + if block.Hash() != blockHeader.Hash() { + t.Errorf("block hash and block header hash do not match. expected %v, got %v", block.Hash(), blockHeader.Hash()) + } +} + +func TestTransactionCount(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + currentBlock, err := sim.BlockByNumber(bgCtx, nil) + if err != nil || currentBlock == nil { + t.Error("could not get current block") + } + + count, err := sim.TransactionCount(bgCtx, currentBlock.Hash()) + if err != nil { + t.Error("could not get current block's transaction count") + } + + if count != 0 { + t.Errorf("expected transaction count of %v does not match actual count of %v", 0, count) + } + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + + sim.Commit() + + lastBlock, err := sim.BlockByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get header for tip of chain: %v", err) + } + + count, err = sim.TransactionCount(bgCtx, lastBlock.Hash()) + if err != nil { + t.Error("could not get current block's transaction count") + } + + if count != 1 { + t.Errorf("expected transaction count of %v does not match actual count of %v", 1, count) + } +} + +func TestTransactionInBlock(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + transaction, err := sim.TransactionInBlock(bgCtx, sim.pendingBlock.Hash(), uint(0)) + if err == nil && err != errTransactionDoesNotExist { + t.Errorf("expected a transaction does not exist error to be received but received %v", err) + } + if transaction != nil { + t.Errorf("expected transaction to be nil but received %v", transaction) + } + + // expect pending nonce to be 0 since account has not been used + pendingNonce, err := sim.PendingNonceAt(bgCtx, testAddr) + if err != nil { + t.Errorf("did not get the pending nonce: %v", err) + } + + if pendingNonce != uint64(0) { + t.Errorf("expected pending nonce of 0 got %v", pendingNonce) + } + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + + sim.Commit() + + lastBlock, err := sim.BlockByNumber(bgCtx, nil) + if err != nil { + t.Errorf("could not get header for tip of chain: %v", err) + } + + transaction, err = sim.TransactionInBlock(bgCtx, lastBlock.Hash(), uint(1)) + if err == nil && err != errTransactionDoesNotExist { + t.Errorf("expected a transaction does not exist error to be received but received %v", err) + } + if transaction != nil { + t.Errorf("expected transaction to be nil but received %v", transaction) + } + + transaction, err = sim.TransactionInBlock(bgCtx, lastBlock.Hash(), uint(0)) + if err != nil { + t.Errorf("could not get transaction in the lastest block with hash %v: %v", lastBlock.Hash().String(), err) + } + + if signedTx.Hash().String() != transaction.Hash().String() { + t.Errorf("received transaction that did not match the sent transaction. expected hash %v, got hash %v", signedTx.Hash().String(), transaction.Hash().String()) + } +} + +func TestPendingNonceAt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + // expect pending nonce to be 0 since account has not been used + pendingNonce, err := sim.PendingNonceAt(bgCtx, testAddr) + if err != nil { + t.Errorf("did not get the pending nonce: %v", err) + } + + if pendingNonce != uint64(0) { + t.Errorf("expected pending nonce of 0 got %v", pendingNonce) + } + + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + + // expect pending nonce to be 1 since account has submitted one transaction + pendingNonce, err = sim.PendingNonceAt(bgCtx, testAddr) + if err != nil { + t.Errorf("did not get the pending nonce: %v", err) + } + + if pendingNonce != uint64(1) { + t.Errorf("expected pending nonce of 1 got %v", pendingNonce) + } + + // make a new transaction with a nonce of 1 + tx = types.NewTransaction(uint64(1), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err = types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not send tx: %v", err) + } + + // expect pending nonce to be 2 since account now has two transactions + pendingNonce, err = sim.PendingNonceAt(bgCtx, testAddr) + if err != nil { + t.Errorf("did not get the pending nonce: %v", err) + } + + if pendingNonce != uint64(2) { + t.Errorf("expected pending nonce of 2 got %v", pendingNonce) + } +} + +func TestTransactionReceipt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + // create a signed transaction to send + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewTransaction(uint64(0), testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, testKey) + if err != nil { + t.Errorf("could not sign tx: %v", err) + } + + // send tx to simulated backend + err = sim.SendTransaction(bgCtx, signedTx) + if err != nil { + t.Errorf("could not add tx to pending block: %v", err) + } + sim.Commit() + + receipt, err := sim.TransactionReceipt(bgCtx, signedTx.Hash()) + if err != nil { + t.Errorf("could not get transaction receipt: %v", err) + } + + if receipt.ContractAddress != testAddr && receipt.TxHash != signedTx.Hash() { + t.Errorf("received receipt is not correct: %v", receipt) + } +} + +func TestSuggestGasPrice(t *testing.T) { + sim := NewSimulatedBackend( + core.GenesisAlloc{}, + 10000000, + ) + defer sim.Close() + bgCtx := context.Background() + gasPrice, err := sim.SuggestGasPrice(bgCtx) + if err != nil { + t.Errorf("could not get gas price: %v", err) + } + if gasPrice.Uint64() != sim.pendingBlock.Header().BaseFee.Uint64() { + t.Errorf("gas price was not expected value of %v. actual: %v", sim.pendingBlock.Header().BaseFee.Uint64(), gasPrice.Uint64()) + } +} + +func TestPendingCodeAt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + code, err := sim.CodeAt(bgCtx, testAddr, nil) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) != 0 { + t.Errorf("got code for account that does not have contract code") + } + + parsed, err := abi.JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + auth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + contractAddr, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(abiBin), sim) + if err != nil { + t.Errorf("could not deploy contract: %v tx: %v contract: %v", err, tx, contract) + } + + code, err = sim.PendingCodeAt(bgCtx, contractAddr) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) == 0 { + t.Errorf("did not get code for account that has contract code") + } + // ensure code received equals code deployed + if !bytes.Equal(code, common.FromHex(deployedCode)) { + t.Errorf("code received did not match expected deployed code:\n expected %v\n actual %v", common.FromHex(deployedCode), code) + } +} + +func TestCodeAt(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + code, err := sim.CodeAt(bgCtx, testAddr, nil) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) != 0 { + t.Errorf("got code for account that does not have contract code") + } + + parsed, err := abi.JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + auth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + contractAddr, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(abiBin), sim) + if err != nil { + t.Errorf("could not deploy contract: %v tx: %v contract: %v", err, tx, contract) + } + + sim.Commit() + code, err = sim.CodeAt(bgCtx, contractAddr, nil) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) == 0 { + t.Errorf("did not get code for account that has contract code") + } + // ensure code received equals code deployed + if !bytes.Equal(code, common.FromHex(deployedCode)) { + t.Errorf("code received did not match expected deployed code:\n expected %v\n actual %v", common.FromHex(deployedCode), code) + } +} + +// When receive("X") is called with sender 0x00... and value 1, it produces this tx receipt: +// receipt{status=1 cgas=23949 bloom=00000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000040200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 logs=[log: b6818c8064f645cd82d99b59a1a267d6d61117ef [75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed] 000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158 9ae378b6d4409eada347a5dc0c180f186cb62dc68fcc0f043425eb917335aa28 0 95d429d309bb9d753954195fe2d69bd140b4ae731b9b5b605c34323de162cf00 0]} +func TestPendingAndCallContract(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + parsed, err := abi.JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + contractAuth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + addr, _, _, err := bind.DeployContract(contractAuth, parsed, common.FromHex(abiBin), sim) + if err != nil { + t.Errorf("could not deploy contract: %v", err) + } + + input, err := parsed.Pack("receive", []byte("X")) + if err != nil { + t.Errorf("could not pack receive function on contract: %v", err) + } + + // make sure you can call the contract in pending state + res, err := sim.PendingCallContract(bgCtx, ethereum.CallMsg{ + From: testAddr, + To: &addr, + Data: input, + }) + if err != nil { + t.Errorf("could not call receive method on contract: %v", err) + } + if len(res) == 0 { + t.Errorf("result of contract call was empty: %v", res) + } + + // while comparing against the byte array is more exact, also compare against the human readable string for readability + if !bytes.Equal(res, expectedReturn) || !strings.Contains(string(res), "hello world") { + t.Errorf("response from calling contract was expected to be 'hello world' instead received %v", string(res)) + } + + sim.Commit() + + // make sure you can call the contract + res, err = sim.CallContract(bgCtx, ethereum.CallMsg{ + From: testAddr, + To: &addr, + Data: input, + }, nil) + if err != nil { + t.Errorf("could not call receive method on contract: %v", err) + } + if len(res) == 0 { + t.Errorf("result of contract call was empty: %v", res) + } + + if !bytes.Equal(res, expectedReturn) || !strings.Contains(string(res), "hello world") { + t.Errorf("response from calling contract was expected to be 'hello world' instead received %v", string(res)) + } +} + +// This test is based on the following contract: +/* +contract Reverter { + function revertString() public pure{ + require(false, "some error"); + } + function revertNoString() public pure { + require(false, ""); + } + function revertASM() public pure { + assembly { + revert(0x0, 0x0) + } + } + function noRevert() public pure { + assembly { + // Assembles something that looks like require(false, "some error") but is not reverted + mstore(0x0, 0x08c379a000000000000000000000000000000000000000000000000000000000) + mstore(0x4, 0x0000000000000000000000000000000000000000000000000000000000000020) + mstore(0x24, 0x000000000000000000000000000000000000000000000000000000000000000a) + mstore(0x44, 0x736f6d65206572726f7200000000000000000000000000000000000000000000) + return(0x0, 0x64) + } + } +}*/ +func TestCallContractRevert(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + + reverterABI := `[{"inputs": [],"name": "noRevert","outputs": [],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "revertASM","outputs": [],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "revertNoString","outputs": [],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "revertString","outputs": [],"stateMutability": "pure","type": "function"}]` + reverterBin := "608060405234801561001057600080fd5b506101d3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634b409e01146100515780639b340e361461005b5780639bd6103714610065578063b7246fc11461006f575b600080fd5b610059610079565b005b6100636100ca565b005b61006d6100cf565b005b610077610145565b005b60006100c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b565b600080fd5b6000610143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f736f6d65206572726f720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f736f6d65206572726f720000000000000000000000000000000000000000000060445260646000f3fea2646970667358221220cdd8af0609ec4996b7360c7c780bad5c735740c64b1fffc3445aa12d37f07cb164736f6c63430006070033" + + parsed, err := abi.JSON(strings.NewReader(reverterABI)) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + contractAuth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + addr, _, _, err := bind.DeployContract(contractAuth, parsed, common.FromHex(reverterBin), sim) + if err != nil { + t.Errorf("could not deploy contract: %v", err) + } + + inputs := make(map[string]interface{}, 3) + inputs["revertASM"] = nil + inputs["revertNoString"] = "" + inputs["revertString"] = "some error" + + call := make([]func([]byte) ([]byte, error), 2) + call[0] = func(input []byte) ([]byte, error) { + return sim.PendingCallContract(bgCtx, ethereum.CallMsg{ + From: testAddr, + To: &addr, + Data: input, + }) + } + call[1] = func(input []byte) ([]byte, error) { + return sim.CallContract(bgCtx, ethereum.CallMsg{ + From: testAddr, + To: &addr, + Data: input, + }, nil) + } + + // Run pending calls then commit + for _, cl := range call { + for key, val := range inputs { + input, err := parsed.Pack(key) + if err != nil { + t.Errorf("could not pack %v function on contract: %v", key, err) + } + + res, err := cl(input) + if err == nil { + t.Errorf("call to %v was not reverted", key) + } + if res != nil { + t.Errorf("result from %v was not nil: %v", key, res) + } + if val != nil { + rerr, ok := err.(*revertError) + if !ok { + t.Errorf("expect revert error") + } + if rerr.Error() != "execution reverted: "+val.(string) { + t.Errorf("error was malformed: got %v want %v", rerr.Error(), val) + } + } else { + // revert(0x0,0x0) + if err.Error() != "execution reverted" { + t.Errorf("error was malformed: got %v want %v", err, "execution reverted") + } + } + } + input, err := parsed.Pack("noRevert") + if err != nil { + t.Errorf("could not pack noRevert function on contract: %v", err) + } + res, err := cl(input) + if err != nil { + t.Error("call to noRevert was reverted") + } + if res == nil { + t.Errorf("result from noRevert was nil") + } + sim.Commit() + } +} + +// TestFork check that the chain length after a reorg is correct. +// Steps: +// 1. Save the current block which will serve as parent for the fork. +// 2. Mine n blocks with n ∈ [0, 20]. +// 3. Assert that the chain length is n. +// 4. Fork by using the parent block as ancestor. +// 5. Mine n+1 blocks which should trigger a reorg. +// 6. Assert that the chain length is n+1. +// Since Commit() was called 2n+1 times in total, +// having a chain length of just n+1 means that a reorg occurred. +func TestFork(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + // 1. + parent := sim.blockchain.CurrentBlock() + // 2. + n := int(rand.Int31n(21)) + for i := 0; i < n; i++ { + sim.Commit() + } + // 3. + if sim.blockchain.CurrentBlock().NumberU64() != uint64(n) { + t.Error("wrong chain length") + } + // 4. + sim.Fork(context.Background(), parent.Hash()) + // 5. + for i := 0; i < n+1; i++ { + sim.Commit() + } + // 6. + if sim.blockchain.CurrentBlock().NumberU64() != uint64(n+1) { + t.Error("wrong chain length") + } +} + +/* +Example contract to test event emission: + +pragma solidity >=0.7.0 <0.9.0; +contract Callable { + event Called(); + function Call() public { emit Called(); } +} +*/ +const callableAbi = "[{\"anonymous\":false,\"inputs\":[],\"name\":\"Called\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"Call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + +const callableBin = "6080604052348015600f57600080fd5b5060998061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806334e2292114602d575b600080fd5b60336035565b005b7f81fab7a4a0aa961db47eefc81f143a5220e8c8495260dd65b1356f1d19d3c7b860405160405180910390a156fea2646970667358221220029436d24f3ac598ceca41d4d712e13ced6d70727f4cdc580667de66d2f51d8b64736f6c63430008010033" + +// TestForkLogsReborn check that the simulated reorgs +// correctly remove and reborn logs. +// Steps: +// 1. Deploy the Callable contract. +// 2. Set up an event subscription. +// 3. Save the current block which will serve as parent for the fork. +// 4. Send a transaction. +// 5. Check that the event was included. +// 6. Fork by using the parent block as ancestor. +// 7. Mine two blocks to trigger a reorg. +// 8. Check that the event was removed. +// 9. Re-send the transaction and mine a block. +// 10. Check that the event was reborn. +func TestForkLogsReborn(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + // 1. + parsed, _ := abi.JSON(strings.NewReader(callableAbi)) + auth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + _, _, contract, err := bind.DeployContract(auth, parsed, common.FromHex(callableBin), sim) + if err != nil { + t.Errorf("deploying contract: %v", err) + } + sim.Commit() + // 2. + logs, sub, err := contract.WatchLogs(nil, "Called") + if err != nil { + t.Errorf("watching logs: %v", err) + } + defer sub.Unsubscribe() + // 3. + parent := sim.blockchain.CurrentBlock() + // 4. + tx, err := contract.Transact(auth, "Call") + if err != nil { + t.Errorf("transacting: %v", err) + } + sim.Commit() + // 5. + log := <-logs + if log.TxHash != tx.Hash() { + t.Error("wrong event tx hash") + } + if log.Removed { + t.Error("Event should be included") + } + // 6. + if err := sim.Fork(context.Background(), parent.Hash()); err != nil { + t.Errorf("forking: %v", err) + } + // 7. + sim.Commit() + sim.Commit() + // 8. + log = <-logs + if log.TxHash != tx.Hash() { + t.Error("wrong event tx hash") + } + if !log.Removed { + t.Error("Event should be removed") + } + // 9. + if err := sim.SendTransaction(context.Background(), tx); err != nil { + t.Errorf("sending transaction: %v", err) + } + sim.Commit() + // 10. + log = <-logs + if log.TxHash != tx.Hash() { + t.Error("wrong event tx hash") + } + if log.Removed { + t.Error("Event should be included") + } +} + +// TestForkResendTx checks that re-sending a TX after a fork +// is possible and does not cause a "nonce mismatch" panic. +// Steps: +// 1. Save the current block which will serve as parent for the fork. +// 2. Send a transaction. +// 3. Check that the TX is included in block 1. +// 4. Fork by using the parent block as ancestor. +// 5. Mine a block, Re-send the transaction and mine another one. +// 6. Check that the TX is now included in block 2. +func TestForkResendTx(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + // 1. + parent := sim.blockchain.CurrentBlock() + // 2. + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + _tx := types.NewTransaction(0, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + tx, _ := types.SignTx(_tx, types.HomesteadSigner{}, testKey) + sim.SendTransaction(context.Background(), tx) + sim.Commit() + // 3. + receipt, _ := sim.TransactionReceipt(context.Background(), tx.Hash()) + if h := receipt.BlockNumber.Uint64(); h != 1 { + t.Errorf("TX included in wrong block: %d", h) + } + // 4. + if err := sim.Fork(context.Background(), parent.Hash()); err != nil { + t.Errorf("forking: %v", err) + } + // 5. + sim.Commit() + if err := sim.SendTransaction(context.Background(), tx); err != nil { + t.Errorf("sending transaction: %v", err) + } + sim.Commit() + // 6. + receipt, _ = sim.TransactionReceipt(context.Background(), tx.Hash()) + if h := receipt.BlockNumber.Uint64(); h != 2 { + t.Errorf("TX included in wrong block: %d", h) + } +} + +func TestCommitReturnValue(t *testing.T) { + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + + startBlockHeight := sim.blockchain.CurrentBlock().NumberU64() + + // Test if Commit returns the correct block hash + h1 := sim.Commit() + if h1 != sim.blockchain.CurrentBlock().Hash() { + t.Error("Commit did not return the hash of the last block.") + } + + // Create a block in the original chain (containing a transaction to force different block hashes) + head, _ := sim.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + _tx := types.NewTransaction(0, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) + tx, _ := types.SignTx(_tx, types.HomesteadSigner{}, testKey) + sim.SendTransaction(context.Background(), tx) + h2 := sim.Commit() + + // Create another block in the original chain + sim.Commit() + + // Fork at the first bock + if err := sim.Fork(context.Background(), h1); err != nil { + t.Errorf("forking: %v", err) + } + + // Test if Commit returns the correct block hash after the reorg + h2fork := sim.Commit() + if h2 == h2fork { + t.Error("The block in the fork and the original block are the same block!") + } + if sim.blockchain.GetHeader(h2fork, startBlockHeight+2) == nil { + t.Error("Could not retrieve the just created block (side-chain)") + } } diff --git a/accounts/abi/bind/base.go b/accounts/abi/bind/base.go index db217d75..88b99768 100644 --- a/accounts/abi/bind/base.go +++ b/accounts/abi/bind/base.go @@ -21,18 +21,22 @@ import ( "errors" "fmt" "math/big" + "strings" + "sync" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/event" ) +const basefeeWiggleMultiplier = 2 + // SignerFn is a signer function callback when a contract requires a method to // sign the transaction before submission. -type SignerFn func(types.Signer, common.Address, *types.Transaction) (*types.Transaction, error) +type SignerFn func(common.Address, *types.Transaction) (*types.Transaction, error) // CallOpts is the collection of options to fine tune a contract call request. type CallOpts struct { @@ -49,11 +53,15 @@ type TransactOpts struct { Nonce *big.Int // Nonce to use for the transaction execution (nil = use pending state) Signer SignerFn // Method to use for signing the transaction (mandatory) - Value *big.Int // Funds to transfer along along the transaction (nil = 0 = no funds) - GasPrice *big.Int // Gas price to use for the transaction execution (nil = gas price oracle) - GasLimit uint64 // Gas limit to set for the transaction execution (0 = estimate) + Value *big.Int // Funds to transfer along the transaction (nil = 0 = no funds) + GasPrice *big.Int // Gas price to use for the transaction execution (nil = gas price oracle) + GasFeeCap *big.Int // Gas fee cap to use for the 1559 transaction execution (nil = gas price oracle) + GasTipCap *big.Int // Gas priority fee cap to use for the 1559 transaction execution (nil = gas price oracle) + GasLimit uint64 // Gas limit to set for the transaction execution (0 = estimate) Context context.Context // Network context to support cancellation and timeouts (nil = no timeout) + + NoSend bool // Do all transact steps but do not send the transaction } // FilterOpts is the collection of options to fine tune filtering for events @@ -72,6 +80,29 @@ type WatchOpts struct { Context context.Context // Network context to support cancellation and timeouts (nil = no timeout) } +// MetaData collects all metadata for a bound contract. +type MetaData struct { + mu sync.Mutex + Sigs map[string]string + Bin string + ABI string + ab *abi.ABI +} + +func (m *MetaData) GetAbi() (*abi.ABI, error) { + m.mu.Lock() + defer m.mu.Unlock() + if m.ab != nil { + return m.ab, nil + } + if parsed, err := abi.JSON(strings.NewReader(m.ABI)); err != nil { + return nil, err + } else { + m.ab = &parsed + } + return m.ab, nil +} + // BoundContract is the base wrapper object that reflects a contract on the // Ethereum network. It contains a collection of methods that are used by the // higher level contract bindings to operate. @@ -117,11 +148,14 @@ func DeployContract(opts *TransactOpts, abi abi.ABI, bytecode []byte, backend Co // 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 (c *BoundContract) Call(opts *CallOpts, result interface{}, method string, params ...interface{}) error { +func (c *BoundContract) Call(opts *CallOpts, results *[]interface{}, method string, params ...interface{}) error { // Don't crash on a lazy user if opts == nil { opts = new(CallOpts) } + if results == nil { + results = new([]interface{}) + } // Pack the input, call and unpack the results input, err := c.abi.Pack(method, params...) if err != nil { @@ -139,7 +173,10 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string, return ErrNoPendingState } output, err = pb.PendingCallContract(ctx, msg) - if err == nil && len(output) == 0 { + if err != nil { + return err + } + if len(output) == 0 { // Make sure we have a contract to operate on, and bail out otherwise. if code, err = pb.PendingCodeAt(ctx, c.address); err != nil { return err @@ -149,7 +186,10 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string, } } else { output, err = c.caller.CallContract(ctx, msg, opts.BlockNumber) - if err == nil && len(output) == 0 { + if err != nil { + return err + } + if len(output) == 0 { // Make sure we have a contract to operate on, and bail out otherwise. if code, err = c.caller.CodeAt(ctx, c.address, opts.BlockNumber); err != nil { return err @@ -158,10 +198,14 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string, } } } - if err != nil { + + if len(*results) == 0 { + res, err := c.abi.Unpack(method, output) + *results = res return err } - return c.abi.Unpack(result, method, output) + res := *results + return c.abi.UnpackIntoInterface(res[0], method, output) } // Transact invokes the (paid) contract method with params as input values. @@ -171,73 +215,189 @@ func (c *BoundContract) Transact(opts *TransactOpts, method string, params ...in if err != nil { return nil, err } + // todo(rjl493456442) check the method is payable or not, + // reject invalid transaction at the first place return c.transact(opts, &c.address, input) } +// RawTransact initiates a transaction with the given raw calldata as the input. +// It's usually used to initiate transactions for invoking **Fallback** function. +func (c *BoundContract) RawTransact(opts *TransactOpts, calldata []byte) (*types.Transaction, error) { + // todo(rjl493456442) check the method is payable or not, + // reject invalid transaction at the first place + return c.transact(opts, &c.address, calldata) +} + // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. func (c *BoundContract) Transfer(opts *TransactOpts) (*types.Transaction, error) { + // todo(rjl493456442) check the payable fallback or receive is defined + // or not, reject invalid transaction at the first place return c.transact(opts, &c.address, nil) } -// transact executes an actual transaction invocation, first deriving any missing -// authorization fields, and then scheduling the transaction for execution. -func (c *BoundContract) transact(opts *TransactOpts, contract *common.Address, input []byte) (*types.Transaction, error) { - var err error - - // Ensure a valid value field and resolve the account nonce +func (c *BoundContract) createDynamicTx(opts *TransactOpts, contract *common.Address, input []byte, head *types.Header) (*types.Transaction, error) { + // Normalize value value := opts.Value if value == nil { value = new(big.Int) } - var nonce uint64 - if opts.Nonce == nil { - nonce, err = c.transactor.PendingNonceAt(ensureContext(opts.Context), opts.From) + // Estimate TipCap + gasTipCap := opts.GasTipCap + if gasTipCap == nil { + tip, err := c.transactor.SuggestGasTipCap(ensureContext(opts.Context)) if err != nil { - return nil, fmt.Errorf("failed to retrieve account nonce: %v", err) + return nil, err } - } else { - nonce = opts.Nonce.Uint64() + gasTipCap = tip + } + // Estimate FeeCap + gasFeeCap := opts.GasFeeCap + if gasFeeCap == nil { + gasFeeCap = new(big.Int).Add( + gasTipCap, + new(big.Int).Mul(head.BaseFee, big.NewInt(basefeeWiggleMultiplier)), + ) + } + if gasFeeCap.Cmp(gasTipCap) < 0 { + return nil, fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", gasFeeCap, gasTipCap) + } + // Estimate GasLimit + gasLimit := opts.GasLimit + if opts.GasLimit == 0 { + var err error + gasLimit, err = c.estimateGasLimit(opts, contract, input, nil, gasTipCap, gasFeeCap, value) + if err != nil { + return nil, err + } + } + // create the transaction + nonce, err := c.getNonce(opts) + if err != nil { + return nil, err + } + baseTx := &types.DynamicFeeTx{ + To: contract, + Nonce: nonce, + GasFeeCap: gasFeeCap, + GasTipCap: gasTipCap, + Gas: gasLimit, + Value: value, + Data: input, + } + return types.NewTx(baseTx), nil +} + +func (c *BoundContract) createLegacyTx(opts *TransactOpts, contract *common.Address, input []byte) (*types.Transaction, error) { + if opts.GasFeeCap != nil || opts.GasTipCap != nil { + return nil, errors.New("maxFeePerGas or maxPriorityFeePerGas specified but london is not active yet") + } + // Normalize value + value := opts.Value + if value == nil { + value = new(big.Int) } - // Figure out the gas allowance and gas price values + // Estimate GasPrice gasPrice := opts.GasPrice if gasPrice == nil { - gasPrice, err = c.transactor.SuggestGasPrice(ensureContext(opts.Context)) + price, err := c.transactor.SuggestGasPrice(ensureContext(opts.Context)) if err != nil { - return nil, fmt.Errorf("failed to suggest gas price: %v", err) + return nil, err } + gasPrice = price } + // Estimate GasLimit gasLimit := opts.GasLimit - if gasLimit == 0 { - // Gas estimation cannot succeed without code for method invocations - if contract != nil { - if code, err := c.transactor.PendingCodeAt(ensureContext(opts.Context), c.address); err != nil { - return nil, err - } else if len(code) == 0 { - return nil, ErrNoCode - } - } - // If the contract surely has code (or code is not needed), estimate the transaction - msg := ethereum.CallMsg{From: opts.From, To: contract, Value: value, Data: input} - gasLimit, err = c.transactor.EstimateGas(ensureContext(opts.Context), msg) + if opts.GasLimit == 0 { + var err error + gasLimit, err = c.estimateGasLimit(opts, contract, input, gasPrice, nil, nil, value) if err != nil { - return nil, fmt.Errorf("failed to estimate gas needed: %v", err) + return nil, err } } - // Create the transaction, sign it and schedule it for execution - var rawTx *types.Transaction - if contract == nil { - rawTx = types.NewContractCreation(nonce, value, gasLimit, gasPrice, input) + // create the transaction + nonce, err := c.getNonce(opts) + if err != nil { + return nil, err + } + baseTx := &types.LegacyTx{ + To: contract, + Nonce: nonce, + GasPrice: gasPrice, + Gas: gasLimit, + Value: value, + Data: input, + } + return types.NewTx(baseTx), nil +} + +func (c *BoundContract) estimateGasLimit(opts *TransactOpts, contract *common.Address, input []byte, gasPrice, gasTipCap, gasFeeCap, value *big.Int) (uint64, error) { + if contract != nil { + // Gas estimation cannot succeed without code for method invocations. + if code, err := c.transactor.PendingCodeAt(ensureContext(opts.Context), c.address); err != nil { + return 0, err + } else if len(code) == 0 { + return 0, ErrNoCode + } + } + msg := ethereum.CallMsg{ + From: opts.From, + To: contract, + GasPrice: gasPrice, + GasTipCap: gasTipCap, + GasFeeCap: gasFeeCap, + Value: value, + Data: input, + } + return c.transactor.EstimateGas(ensureContext(opts.Context), msg) +} + +func (c *BoundContract) getNonce(opts *TransactOpts) (uint64, error) { + if opts.Nonce == nil { + return c.transactor.PendingNonceAt(ensureContext(opts.Context), opts.From) + } else { + return opts.Nonce.Uint64(), nil + } +} + +// transact executes an actual transaction invocation, first deriving any missing +// authorization fields, and then scheduling the transaction for execution. +func (c *BoundContract) transact(opts *TransactOpts, contract *common.Address, input []byte) (*types.Transaction, error) { + if opts.GasPrice != nil && (opts.GasFeeCap != nil || opts.GasTipCap != nil) { + return nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } + // Create the transaction + var ( + rawTx *types.Transaction + err error + ) + if opts.GasPrice != nil { + rawTx, err = c.createLegacyTx(opts, contract, input) } else { - rawTx = types.NewTransaction(nonce, c.address, value, gasLimit, gasPrice, input) + // Only query for basefee if gasPrice not specified + if head, errHead := c.transactor.HeaderByNumber(ensureContext(opts.Context), nil); errHead != nil { + return nil, errHead + } else if head.BaseFee != nil { + rawTx, err = c.createDynamicTx(opts, contract, input, head) + } else { + // Chain is not London ready -> use legacy transaction + rawTx, err = c.createLegacyTx(opts, contract, input) + } } + if err != nil { + return nil, err + } + // Sign the transaction and schedule it for execution if opts.Signer == nil { return nil, errors.New("no signer to authorize the transaction with") } - signedTx, err := opts.Signer(types.HomesteadSigner{}, opts.From, rawTx) + signedTx, err := opts.Signer(opts.From, rawTx) if err != nil { return nil, err } + if opts.NoSend { + return signedTx, nil + } if err := c.transactor.SendTransaction(ensureContext(opts.Context), signedTx); err != nil { return nil, err } @@ -252,9 +412,9 @@ 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...) + topics, err := abi.MakeTopics(query...) if err != nil { return nil, nil, err } @@ -301,9 +461,9 @@ 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...) + topics, err := abi.MakeTopics(query...) if err != nil { return nil, nil, err } @@ -326,8 +486,11 @@ func (c *BoundContract) WatchLogs(opts *WatchOpts, name string, query ...[]inter // UnpackLog unpacks a retrieved log into the provided output structure. func (c *BoundContract) UnpackLog(out interface{}, event string, log types.Log) error { + if log.Topics[0] != c.abi.Events[event].ID { + return fmt.Errorf("event signature mismatch") + } if len(log.Data) > 0 { - if err := c.abi.Unpack(out, event, log.Data); err != nil { + if err := c.abi.UnpackIntoInterface(out, event, log.Data); err != nil { return err } } @@ -337,11 +500,14 @@ func (c *BoundContract) UnpackLog(out interface{}, event string, log types.Log) indexed = append(indexed, arg) } } - return parseTopics(out, indexed, log.Topics[1:]) + return abi.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 log.Topics[0] != c.abi.Events[event].ID { + return fmt.Errorf("event signature mismatch") + } if len(log.Data) > 0 { if err := c.abi.UnpackIntoMap(out, event, log.Data); err != nil { return err @@ -353,14 +519,14 @@ func (c *BoundContract) UnpackLogIntoMap(out map[string]interface{}, event strin indexed = append(indexed, arg) } } - return parseTopicsIntoMap(out, indexed, log.Topics[1:]) + return abi.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 { if ctx == nil { - return context.TODO() + return context.Background() } return ctx } diff --git a/accounts/abi/bind/base_test.go b/accounts/abi/bind/base_test.go index 1217fbe8..2307b987 100644 --- a/accounts/abi/bind/base_test.go +++ b/accounts/abi/bind/base_test.go @@ -17,39 +17,109 @@ package bind_test import ( - "bytes" "context" + "errors" "math/big" + "reflect" "strings" "testing" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "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" + "github.com/stretchr/testify/assert" ) +func mockSign(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { return tx, nil } + +type mockTransactor struct { + baseFee *big.Int + gasTipCap *big.Int + gasPrice *big.Int + suggestGasTipCapCalled bool + suggestGasPriceCalled bool +} + +func (mt *mockTransactor) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) { + return &types.Header{BaseFee: mt.baseFee}, nil +} + +func (mt *mockTransactor) PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) { + return []byte{1}, nil +} + +func (mt *mockTransactor) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) { + return 0, nil +} + +func (mt *mockTransactor) SuggestGasPrice(ctx context.Context) (*big.Int, error) { + mt.suggestGasPriceCalled = true + return mt.gasPrice, nil +} + +func (mt *mockTransactor) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + mt.suggestGasTipCapCalled = true + return mt.gasTipCap, nil +} + +func (mt *mockTransactor) EstimateGas(ctx context.Context, call ethereum.CallMsg) (gas uint64, err error) { + return 0, nil +} + +func (mt *mockTransactor) SendTransaction(ctx context.Context, tx *types.Transaction) error { + return nil +} + type mockCaller struct { codeAtBlockNumber *big.Int callContractBlockNumber *big.Int + callContractBytes []byte + callContractErr error + codeAtBytes []byte + codeAtErr error } func (mc *mockCaller) CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error) { mc.codeAtBlockNumber = blockNumber - return []byte{1, 2, 3}, nil + return mc.codeAtBytes, mc.codeAtErr } func (mc *mockCaller) CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) { mc.callContractBlockNumber = blockNumber - return nil, nil + return mc.callContractBytes, mc.callContractErr } -func TestPassingBlockNumber(t *testing.T) { - mc := &mockCaller{} +type mockPendingCaller struct { + *mockCaller + pendingCodeAtBytes []byte + pendingCodeAtErr error + pendingCodeAtCalled bool + pendingCallContractCalled bool + pendingCallContractBytes []byte + pendingCallContractErr error +} + +func (mc *mockPendingCaller) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) { + mc.pendingCodeAtCalled = true + return mc.pendingCodeAtBytes, mc.pendingCodeAtErr +} + +func (mc *mockPendingCaller) PendingCallContract(ctx context.Context, call ethereum.CallMsg) ([]byte, error) { + mc.pendingCallContractCalled = true + return mc.pendingCallContractBytes, mc.pendingCallContractErr +} + +func TestPassingBlockNumber(t *testing.T) { + mc := &mockPendingCaller{ + mockCaller: &mockCaller{ + codeAtBytes: []byte{1, 2, 3}, + }, + } bc := bind.NewBoundContract(common.HexToAddress("0x0"), abi.ABI{ Methods: map[string]abi.Method{ @@ -59,11 +129,10 @@ func TestPassingBlockNumber(t *testing.T) { }, }, }, mc, nil, nil) - var ret string blockNumber := big.NewInt(42) - bc.Call(&bind.CallOpts{BlockNumber: blockNumber}, &ret, "something") + bc.Call(&bind.CallOpts{BlockNumber: blockNumber}, nil, "something") if mc.callContractBlockNumber != blockNumber { t.Fatalf("CallContract() was not passed the block number") @@ -73,7 +142,7 @@ func TestPassingBlockNumber(t *testing.T) { t.Fatalf("CodeAt() was not passed the block number") } - bc.Call(&bind.CallOpts{}, &ret, "something") + bc.Call(&bind.CallOpts{}, nil, "something") if mc.callContractBlockNumber != nil { t.Fatalf("CallContract() was passed a block number when it should not have been") @@ -82,57 +151,39 @@ func TestPassingBlockNumber(t *testing.T) { if mc.codeAtBlockNumber != nil { t.Fatalf("CodeAt() was passed a block number when it should not have been") } + + bc.Call(&bind.CallOpts{BlockNumber: blockNumber, Pending: true}, nil, "something") + + if !mc.pendingCallContractCalled { + t.Fatalf("CallContract() was not passed the block number") + } + + if !mc.pendingCodeAtCalled { + t.Fatalf("CodeAt() was not passed the block number") + } } 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, + topics := []common.Hash{ + crypto.Keccak256Hash([]byte("received(string,address,uint256,bytes)")), + hash, } + mockLog := newMockLog(topics, common.HexToHash("0x0")) 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") - } + unpackAndCheck(t, bc, expectedReceivedMap, mockLog) } func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { @@ -141,51 +192,23 @@ func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { 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, + topics := []common.Hash{ + crypto.Keccak256Hash([]byte("received(string[],address,uint256,bytes)")), + hash, } + mockLog := newMockLog(topics, common.HexToHash("0x0")) 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") - } + unpackAndCheck(t, bc, expectedReceivedMap, mockLog) } func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { @@ -194,51 +217,23 @@ func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { 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, + topics := []common.Hash{ + crypto.Keccak256Hash([]byte("received(address[2],address,uint256,bytes)")), + hash, } + mockLog := newMockLog(topics, common.HexToHash("0x0")) 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") - } + unpackAndCheck(t, bc, expectedReceivedMap, mockLog) } func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { @@ -249,99 +244,254 @@ func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { 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, + topics := []common.Hash{ + crypto.Keccak256Hash([]byte("received(function,address,uint256,bytes)")), + common.BytesToHash(functionTyBytes), } - + mockLog := newMockLog(topics, common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42")) 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") - } + unpackAndCheck(t, bc, expectedReceivedMap, mockLog) } 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, + bytes := []byte{1, 2, 3, 4, 5} + hash := crypto.Keccak256Hash(bytes) + topics := []common.Hash{ + crypto.Keccak256Hash([]byte("received(bytes,address,uint256,bytes)")), + hash, } + mockLog := newMockLog(topics, common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42")) 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 { + unpackAndCheck(t, bc, expectedReceivedMap, mockLog) +} + +func TestTransactGasFee(t *testing.T) { + assert := assert.New(t) + + // GasTipCap and GasFeeCap + // When opts.GasTipCap and opts.GasFeeCap are nil + mt := &mockTransactor{baseFee: big.NewInt(100), gasTipCap: big.NewInt(5)} + bc := bind.NewBoundContract(common.Address{}, abi.ABI{}, nil, mt, nil) + opts := &bind.TransactOpts{Signer: mockSign} + tx, err := bc.Transact(opts, "") + assert.Nil(err) + assert.Equal(big.NewInt(5), tx.GasTipCap()) + assert.Equal(big.NewInt(205), tx.GasFeeCap()) + assert.Nil(opts.GasTipCap) + assert.Nil(opts.GasFeeCap) + assert.True(mt.suggestGasTipCapCalled) + + // Second call to Transact should use latest suggested GasTipCap + mt.gasTipCap = big.NewInt(6) + mt.suggestGasTipCapCalled = false + tx, err = bc.Transact(opts, "") + assert.Nil(err) + assert.Equal(big.NewInt(6), tx.GasTipCap()) + assert.Equal(big.NewInt(206), tx.GasFeeCap()) + assert.True(mt.suggestGasTipCapCalled) + + // GasPrice + // When opts.GasPrice is nil + mt = &mockTransactor{gasPrice: big.NewInt(5)} + bc = bind.NewBoundContract(common.Address{}, abi.ABI{}, nil, mt, nil) + opts = &bind.TransactOpts{Signer: mockSign} + tx, err = bc.Transact(opts, "") + assert.Nil(err) + assert.Equal(big.NewInt(5), tx.GasPrice()) + assert.Nil(opts.GasPrice) + assert.True(mt.suggestGasPriceCalled) + + // Second call to Transact should use latest suggested GasPrice + mt.gasPrice = big.NewInt(6) + mt.suggestGasPriceCalled = false + tx, err = bc.Transact(opts, "") + assert.Nil(err) + assert.Equal(big.NewInt(6), tx.GasPrice()) + assert.True(mt.suggestGasPriceCalled) +} + +func unpackAndCheck(t *testing.T, bc *bind.BoundContract, expected map[string]interface{}, mockLog types.Log) { + received := make(map[string]interface{}) + if err := bc.UnpackLogIntoMap(received, "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 len(received) != len(expected) { + t.Fatalf("unpacked map length %v not equal expected length of %v", len(received), len(expected)) } - if receivedMap["sender"] != expectedReceivedMap["sender"] { - t.Error("unpacked map does not match expected map") + for name, elem := range expected { + if !reflect.DeepEqual(elem, received[name]) { + t.Errorf("field %v does not match expected, want %v, got %v", name, elem, received[name]) + } } - if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { - t.Error("unpacked map does not match expected map") +} + +func newMockLog(topics []common.Hash, txHash common.Hash) types.Log { + return types.Log{ + Address: common.HexToAddress("0x0"), + Topics: topics, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: txHash, + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, } - if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { - t.Error("unpacked map does not match expected map") +} + +func TestCall(t *testing.T) { + var method, methodWithArg = "something", "somethingArrrrg" + tests := []struct { + name, method string + opts *bind.CallOpts + mc bind.ContractCaller + results *[]interface{} + wantErr bool + wantErrExact error + }{{ + name: "ok not pending", + mc: &mockCaller{ + codeAtBytes: []byte{0}, + }, + method: method, + }, { + name: "ok pending", + mc: &mockPendingCaller{ + pendingCodeAtBytes: []byte{0}, + }, + opts: &bind.CallOpts{ + Pending: true, + }, + method: method, + }, { + name: "pack error, no method", + mc: new(mockCaller), + method: "else", + wantErr: true, + }, { + name: "interface error, pending but not a PendingContractCaller", + mc: new(mockCaller), + opts: &bind.CallOpts{ + Pending: true, + }, + method: method, + wantErrExact: bind.ErrNoPendingState, + }, { + name: "pending call canceled", + mc: &mockPendingCaller{ + pendingCallContractErr: context.DeadlineExceeded, + }, + opts: &bind.CallOpts{ + Pending: true, + }, + method: method, + wantErrExact: context.DeadlineExceeded, + }, { + name: "pending code at error", + mc: &mockPendingCaller{ + pendingCodeAtErr: errors.New(""), + }, + opts: &bind.CallOpts{ + Pending: true, + }, + method: method, + wantErr: true, + }, { + name: "no pending code at", + mc: new(mockPendingCaller), + opts: &bind.CallOpts{ + Pending: true, + }, + method: method, + wantErrExact: bind.ErrNoCode, + }, { + name: "call contract error", + mc: &mockCaller{ + callContractErr: context.DeadlineExceeded, + }, + method: method, + wantErrExact: context.DeadlineExceeded, + }, { + name: "code at error", + mc: &mockCaller{ + codeAtErr: errors.New(""), + }, + method: method, + wantErr: true, + }, { + name: "no code at", + mc: new(mockCaller), + method: method, + wantErrExact: bind.ErrNoCode, + }, { + name: "unpack error missing arg", + mc: &mockCaller{ + codeAtBytes: []byte{0}, + }, + method: methodWithArg, + wantErr: true, + }, { + name: "interface unpack error", + mc: &mockCaller{ + codeAtBytes: []byte{0}, + }, + method: method, + results: &[]interface{}{0}, + wantErr: true, + }} + for _, test := range tests { + bc := bind.NewBoundContract(common.HexToAddress("0x0"), abi.ABI{ + Methods: map[string]abi.Method{ + method: { + Name: method, + Outputs: abi.Arguments{}, + }, + methodWithArg: { + Name: methodWithArg, + Outputs: abi.Arguments{abi.Argument{}}, + }, + }, + }, test.mc, nil, nil) + err := bc.Call(test.opts, test.results, test.method) + if test.wantErr || test.wantErrExact != nil { + if err == nil { + t.Fatalf("%q expected error", test.name) + } + if test.wantErrExact != nil && !errors.Is(err, test.wantErrExact) { + t.Fatalf("%q expected error %q but got %q", test.name, test.wantErrExact, err) + } + continue + } + if err != nil { + t.Fatalf("%q unexpected error: %v", test.name, err) + } } } + +// TestCrashers contains some strings which previously caused the abi codec to crash. +func TestCrashers(t *testing.T) { + abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"_1"}]}]}]`)) + abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"&"}]}]}]`)) + abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"----"}]}]}]`)) + abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"foo.Bar"}]}]}]`)) +} diff --git a/accounts/abi/bind/bind.go b/accounts/abi/bind/bind.go index b03b48d2..dac43f70 100644 --- a/accounts/abi/bind/bind.go +++ b/accounts/abi/bind/bind.go @@ -17,7 +17,7 @@ // Package bind generates Ethereum contract Go bindings. // // Detailed usage document and tutorial available on the go-ethereum Wiki page: -// https://github.com/cryptoecc/ETH-ECC/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts +// https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts package bind import ( @@ -30,8 +30,8 @@ import ( "text/template" "unicode" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/log" ) // Lang is a target programming language selector to generate bindings for. @@ -43,17 +43,58 @@ const ( LangObjC ) +func isKeyWord(arg string) bool { + switch arg { + case "break": + case "case": + case "chan": + case "const": + case "continue": + case "default": + case "defer": + case "else": + case "fallthrough": + case "for": + case "func": + case "go": + case "goto": + case "if": + case "import": + case "interface": + case "iota": + case "map": + case "make": + case "new": + case "package": + case "range": + case "return": + case "select": + case "struct": + case "switch": + case "type": + case "var": + default: + return false + } + + return true +} + // Bind generates a Go wrapper around a contract ABI. This wrapper isn't meant // 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, 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) +func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string]string, pkg string, lang Lang, libs map[string]string, aliases map[string]string) (string, error) { + var ( + // contracts is the map of each individual contract requested binding + contracts = make(map[string]*tmplContract) - // Map used to flag each encountered library as such - isLib := make(map[string]struct{}) + // structs is the map of all redeclared structs shared by passed contracts. + structs = make(map[string]*tmplStruct) + // isLib is the 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])) @@ -73,20 +114,47 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] calls = make(map[string]*tmplMethod) transacts = make(map[string]*tmplMethod) events = make(map[string]*tmplEvent) - structs = make(map[string]*tmplStruct) + fallback *tmplMethod + receive *tmplMethod + + // identifiers are used to detect duplicated identifiers of functions + // and events. For all calls, transacts and events, abigen will generate + // corresponding bindings. However we have to ensure there is no + // identifier collisions in the bindings of these categories. + callIdentifiers = make(map[string]bool) + transactIdentifiers = make(map[string]bool) + eventIdentifiers = make(map[string]bool) ) + + for _, input := range evmABI.Constructor.Inputs { + if hasStruct(input.Type) { + bindStructType[lang](input.Type, structs) + } + } + for _, original := range evmABI.Methods { // Normalize the method for capital cases and non-anonymous inputs/outputs normalized := original - normalized.Name = methodNormalizer[lang](original.Name) + normalizedName := methodNormalizer[lang](alias(aliases, original.Name)) + // Ensure there is no duplicated identifier + var identifiers = callIdentifiers + if !original.IsConstant() { + identifiers = transactIdentifiers + } + if identifiers[normalizedName] { + return "", fmt.Errorf("duplicated identifier \"%s\"(normalized \"%s\"), use --alias for renaming", original.Name, normalizedName) + } + identifiers[normalizedName] = true + + normalized.Name = normalizedName normalized.Inputs = make([]abi.Argument, len(original.Inputs)) copy(normalized.Inputs, original.Inputs) for j, input := range normalized.Inputs { - if input.Name == "" { + if input.Name == "" || isKeyWord(input.Name) { normalized.Inputs[j].Name = fmt.Sprintf("arg%d", j) } - if _, exist := structs[input.Type.String()]; input.Type.T == abi.TupleTy && !exist { + if hasStruct(input.Type) { bindStructType[lang](input.Type, structs) } } @@ -96,12 +164,12 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] if output.Name != "" { normalized.Outputs[j].Name = capitalise(output.Name) } - if _, exist := structs[output.Type.String()]; output.Type.T == abi.TupleTy && !exist { + if hasStruct(output.Type) { bindStructType[lang](output.Type, structs) } } // Append the methods to the call or transact lists - if original.Const { + if original.IsConstant() { calls[original.Name] = &tmplMethod{Original: original, Normalized: normalized, Structured: structured(original.Outputs)} } else { transacts[original.Name] = &tmplMethod{Original: original, Normalized: normalized, Structured: structured(original.Outputs)} @@ -114,25 +182,45 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] } // Normalize the event for capital cases and non-anonymous outputs normalized := original - normalized.Name = methodNormalizer[lang](original.Name) + // Ensure there is no duplicated identifier + normalizedName := methodNormalizer[lang](alias(aliases, original.Name)) + if eventIdentifiers[normalizedName] { + return "", fmt.Errorf("duplicated identifier \"%s\"(normalized \"%s\"), use --alias for renaming", original.Name, normalizedName) + } + eventIdentifiers[normalizedName] = true + normalized.Name = normalizedName + + used := make(map[string]bool) normalized.Inputs = make([]abi.Argument, len(original.Inputs)) copy(normalized.Inputs, original.Inputs) for j, input := range normalized.Inputs { - // Indexed fields are input, non-indexed ones are outputs - if input.Indexed { - 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) + if input.Name == "" || isKeyWord(input.Name) { + normalized.Inputs[j].Name = fmt.Sprintf("arg%d", j) + } + // Event is a bit special, we need to define event struct in binding, + // ensure there is no camel-case-style name conflict. + for index := 0; ; index++ { + if !used[capitalise(normalized.Inputs[j].Name)] { + used[capitalise(normalized.Inputs[j].Name)] = true + break } + normalized.Inputs[j].Name = fmt.Sprintf("%s%d", normalized.Inputs[j].Name, index) + } + if hasStruct(input.Type) { + bindStructType[lang](input.Type, structs) } } // Append the event to the accumulator list events[original.Name] = &tmplEvent{Original: original, Normalized: normalized} } - + // Add two special fallback functions if they exist + if evmABI.HasFallback() { + fallback = &tmplMethod{Original: evmABI.Fallback} + } + if evmABI.HasReceive() { + receive = &tmplMethod{Original: evmABI.Receive} + } // 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") @@ -140,14 +228,15 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] contracts[types[i]] = &tmplContract{ Type: capitalise(types[i]), - InputABI: strings.Replace(strippedABI, "\"", "\\\"", -1), + InputABI: strings.ReplaceAll(strippedABI, "\"", "\\\""), InputBin: strings.TrimPrefix(strings.TrimSpace(bytecodes[i]), "0x"), Constructor: evmABI.Constructor, Calls: calls, Transacts: transacts, + Fallback: fallback, + Receive: receive, Events: events, Libraries: make(map[string]string), - Structs: structs, } // Function 4-byte signatures are stored in the same sequence // as types, if available. @@ -179,6 +268,7 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] Package: pkg, Contracts: contracts, Libraries: libs, + Structs: structs, } buffer := new(bytes.Buffer) @@ -186,8 +276,6 @@ func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string] "bindtype": bindType[lang], "bindtopictype": bindTopicType[lang], "namedtype": namedType[lang], - "formatmethod": formatMethod, - "formatevent": formatEvent, "capitalise": capitalise, "decapitalise": decapitalise, } @@ -214,7 +302,7 @@ var bindType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) stri LangJava: bindTypeJava, } -// bindBasicTypeGo converts basic solidity types(except array, slice and tuple) to Go one. +// bindBasicTypeGo converts basic solidity types(except array, slice and tuple) to Go ones. func bindBasicTypeGo(kind abi.Type) string { switch kind.T { case abi.AddressTy: @@ -244,7 +332,7 @@ func bindBasicTypeGo(kind abi.Type) string { func bindTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { switch kind.T { case abi.TupleTy: - return structs[kind.String()].Name + return structs[kind.TupleRawName+kind.String()].Name case abi.ArrayTy: return fmt.Sprintf("[%d]", kind.Size) + bindTypeGo(*kind.Elem, structs) case abi.SliceTy: @@ -254,7 +342,7 @@ func bindTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { } } -// bindBasicTypeJava converts basic solidity types(except array, slice and tuple) to Java one. +// bindBasicTypeJava converts basic solidity types(except array, slice and tuple) to Java ones. func bindBasicTypeJava(kind abi.Type) string { switch kind.T { case abi.AddressTy: @@ -298,7 +386,7 @@ func bindBasicTypeJava(kind abi.Type) string { } // pluralizeJavaType explicitly converts multidimensional types to predefined -// type in go side. +// types in go side. func pluralizeJavaType(typ string) string { switch typ { case "boolean": @@ -321,7 +409,7 @@ func pluralizeJavaType(typ string) string { func bindTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { switch kind.T { case abi.TupleTy: - return structs[kind.String()].Name + return structs[kind.TupleRawName+kind.String()].Name case abi.ArrayTy, abi.SliceTy: return pluralizeJavaType(bindTypeJava(*kind.Elem, structs)) default: @@ -337,9 +425,16 @@ var bindTopicType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) } // 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. +// functionality as for simple types, but dynamic types get converted to hashes. func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { bound := bindTypeGo(kind, structs) + + // todo(rjl493456442) according solidity documentation, indexed event + // parameters that are not value types i.e. arrays and structs are not + // stored directly but instead a keccak256-hash of an encoding is stored. + // + // We only convert stringS and bytes to hash, still need to deal with + // array(both fixed-size and dynamic-size) and struct. if bound == "string" || bound == "[]byte" { bound = "common.Hash" } @@ -347,9 +442,16 @@ func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { } // 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. +// functionality as for simple types, but dynamic types get converted to hashes. func bindTopicTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { bound := bindTypeJava(kind, structs) + + // todo(rjl493456442) according solidity documentation, indexed event + // parameters that are not value types i.e. arrays and structs are not + // stored directly but instead a keccak256-hash of an encoding is stored. + // + // We only convert strings and bytes to hash, still need to deal with + // array(both fixed-size and dynamic-size) and struct. if bound == "String" || bound == "byte[]" { bound = "Hash" } @@ -369,16 +471,33 @@ var bindStructType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct func bindStructTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { switch kind.T { case abi.TupleTy: - if s, exist := structs[kind.String()]; exist { + // We compose a raw struct name and a canonical parameter expression + // together here. The reason is before solidity v0.5.11, kind.TupleRawName + // is empty, so we use canonical parameter expression to distinguish + // different struct definition. From the consideration of backward + // compatibility, we concat these two together so that if kind.TupleRawName + // is not empty, it can have unique id. + id := kind.TupleRawName + kind.String() + if s, exist := structs[id]; exist { return s.Name } - var fields []*tmplField + var ( + names = make(map[string]bool) + 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 := capitalise(kind.TupleRawNames[i]) + name = abi.ResolveNameConflict(name, func(s string) bool { return names[s] }) + names[name] = true + fields = append(fields, &tmplField{Type: bindStructTypeGo(*elem, structs), Name: name, SolKind: *elem}) } - name := fmt.Sprintf("Struct%d", len(structs)) - structs[kind.String()] = &tmplStruct{ + name := kind.TupleRawName + if name == "" { + name = fmt.Sprintf("Struct%d", len(structs)) + } + name = capitalise(name) + + structs[id] = &tmplStruct{ Name: name, Fields: fields, } @@ -398,7 +517,14 @@ func bindStructTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { switch kind.T { case abi.TupleTy: - if s, exist := structs[kind.String()]; exist { + // We compose a raw struct name and a canonical parameter expression + // together here. The reason is before solidity v0.5.11, kind.TupleRawName + // is empty, so we use canonical parameter expression to distinguish + // different struct definition. From the consideration of backward + // compatibility, we concat these two together so that if kind.TupleRawName + // is not empty, it can have unique id. + id := kind.TupleRawName + kind.String() + if s, exist := structs[id]; exist { return s.Name } var fields []*tmplField @@ -406,8 +532,11 @@ func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { 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 := kind.TupleRawName + if name == "" { + name = fmt.Sprintf("Class%d", len(structs)) + } + structs[id] = &tmplStruct{ Name: name, Fields: fields, } @@ -420,7 +549,7 @@ func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { } // namedType is a set of functions that transform language specific types to -// named versions that my be used inside method names. +// named versions that may be used inside method names. var namedType = map[Lang]func(string, abi.Type) string{ LangGo: func(string, abi.Type) string { panic("this shouldn't be needed") }, LangJava: namedTypeJava, @@ -452,17 +581,24 @@ func namedTypeJava(javaKind string, solKind abi.Type) string { } } +// alias returns an alias of the given string based on the aliasing rules +// or returns itself if no rule is matched. +func alias(aliases map[string]string, n string) string { + if alias, exist := aliases[n]; exist { + return alias + } + return n +} + // methodNormalizer is a name transformer that modifies Solidity method names to -// conform to target language naming concentions. +// conform to target language naming conventions. var methodNormalizer = map[Lang]func(string) string{ LangGo: abi.ToCamelCase, LangJava: decapitalise, } // capitalise makes a camel-case string which starts with an upper case character. -func capitalise(input string) string { - return abi.ToCamelCase(input) -} +var capitalise = abi.ToCamelCase // decapitalise makes a camel-case string which starts with a lower case character. func decapitalise(input string) string { @@ -497,62 +633,17 @@ 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) - } +// hasStruct returns an indicator whether the given type is struct, struct slice +// or struct array. +func hasStruct(t abi.Type) bool { + switch t.T { + case abi.SliceTy: + return hasStruct(*t.Elem) + case abi.ArrayTy: + return hasStruct(*t.Elem) + case abi.TupleTy: + return true + default: + return false } - 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 6208d3c6..5fa80384 100644 --- a/accounts/abi/bind/bind_test.go +++ b/accounts/abi/bind/bind_test.go @@ -18,7 +18,6 @@ package bind import ( "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -26,7 +25,7 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) var bindTests = []struct { @@ -38,6 +37,7 @@ var bindTests = []struct { tester string fsigs []map[string]string libs map[string]string + aliases map[string]string types []string }{ // Test that the binding is available in combined and separate forms too @@ -46,7 +46,7 @@ var bindTests = []struct { `contract NilContract {}`, []string{`606060405260068060106000396000f3606060405200`}, []string{`[]`}, - `"github.com/cryptoecc/ETH-ECC/common"`, + `"github.com/ethereum/go-ethereum/common"`, ` if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil { t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil) @@ -61,14 +61,15 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Test that all the official sample contracts bind correctly { `Token`, - `https://Onther-Tech.org/token`, + `https://ethereum.org/token`, []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/cryptoecc/ETH-ECC/common"`, + `"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) @@ -77,13 +78,14 @@ var bindTests = []struct { nil, nil, nil, + nil, }, { `Crowdsale`, - `https://Onther-Tech.org/crowdsale`, + `https://ethereum.org/crowdsale`, []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/cryptoecc/ETH-ECC/common"`, + `"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) @@ -92,13 +94,14 @@ var bindTests = []struct { nil, nil, nil, + nil, }, { `DAO`, - `https://Onther-Tech.org/dao`, + `https://ethereum.org/dao`, []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/cryptoecc/ETH-ECC/common"`, + `"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) @@ -107,6 +110,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Test that named and anonymous inputs are handled correctly { @@ -124,7 +128,7 @@ var bindTests = []struct { ` "fmt" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" `, `if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) @@ -143,6 +147,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Test that named and anonymous outputs are handled correctly { @@ -161,7 +166,7 @@ var bindTests = []struct { ` "fmt" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" `, `if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) @@ -182,6 +187,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that named, anonymous and indexed events are handled correctly { @@ -192,7 +198,8 @@ var bindTests = []struct { {"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]}, {"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]}, {"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"}]} + {"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"}]}, + {"type":"event","name":"unnamed","inputs":[{"name":"","type":"uint256","indexed": true},{"name":"","type":"uint256","indexed":true}]} ] `}, ` @@ -200,7 +207,7 @@ var bindTests = []struct { "math/big" "reflect" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" `, `if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil) @@ -242,6 +249,12 @@ var bindTests = []struct { fmt.Println(event.Addr) // Make sure the reconstructed indexed fields are present fmt.Println(res, str, dat, hash, err) + + oit, err := e.FilterUnnamed(nil, []*big.Int{}, []*big.Int{}) + + arg0 := oit.Event.Arg0 // Make sure unnamed arguments are handled correctly + arg1 := oit.Event.Arg1 // Make sure unnamed arguments are handled correctly + fmt.Println(arg0, arg1) } // Run a tiny reflection test to ensure disallowed methods don't appear if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok { @@ -250,6 +263,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Test that contract interactions (deploy, transact and call) generate working code { @@ -273,17 +287,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy an interaction tester contract and call a transaction on it @@ -311,6 +325,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that plain values can be properly returned and deserialized { @@ -327,17 +342,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a tuple tester contract and execute a structured call on it @@ -356,6 +371,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that tuples can be properly returned and deserialized { @@ -372,17 +388,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a tuple tester contract and execute a structured call on it @@ -401,6 +417,7 @@ var bindTests = []struct { nil, 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. @@ -428,18 +445,18 @@ var bindTests = []struct { "math/big" "reflect" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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/crypto" `, ` // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() - auth := bind.NewKeyedTransactor(key) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a slice tester contract and execute a n array call on it @@ -458,6 +475,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that anonymous default methods can be correctly invoked { @@ -476,17 +494,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a default method invoker contract and execute its default method @@ -508,6 +526,71 @@ var bindTests = []struct { nil, nil, nil, + nil, + }, + // Tests that structs are correctly unpacked + { + + `Structs`, + ` + pragma solidity ^0.6.5; + pragma experimental ABIEncoderV2; + contract Structs { + struct A { + bytes32 B; + } + + function F() public view returns (A[] memory a, uint256[] memory c, bool[] memory d) { + A[] memory a = new A[](2); + a[0].B = bytes32(uint256(1234) << 96); + uint256[] memory c; + bool[] memory d; + return (a, c, d); + } + + function G() public view returns (A[] memory a) { + A[] memory a = new A[](2); + a[0].B = bytes32(uint256(1234) << 96); + return a; + } + } + `, + []string{`608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806328811f591461003b5780636fecb6231461005b575b600080fd5b610043610070565b604051610052939291906101a0565b60405180910390f35b6100636100d6565b6040516100529190610186565b604080516002808252606082810190935282918291829190816020015b610095610131565b81526020019060019003908161008d575050805190915061026960611b9082906000906100be57fe5b60209081029190910101515293606093508392509050565b6040805160028082526060828101909352829190816020015b6100f7610131565b8152602001906001900390816100ef575050805190915061026960611b90829060009061012057fe5b602090810291909101015152905090565b60408051602081019091526000815290565b815260200190565b6000815180845260208085019450808401835b8381101561017b578151518752958201959082019060010161015e565b509495945050505050565b600060208252610199602083018461014b565b9392505050565b6000606082526101b3606083018661014b565b6020838203818501528186516101c98185610239565b91508288019350845b818110156101f3576101e5838651610143565b9484019492506001016101d2565b505084810360408601528551808252908201925081860190845b8181101561022b57825115158552938301939183019160010161020d565b509298975050505050505050565b9081526020019056fea2646970667358221220eb85327e285def14230424c52893aebecec1e387a50bb6b75fc4fdbed647f45f64736f6c63430006050033`}, + []string{`[{"inputs":[],"name":"F","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"},{"internalType":"uint256[]","name":"c","type":"uint256[]"},{"internalType":"bool[]","name":"d","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"G","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"}],"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.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) + defer sim.Close() + + // Deploy a structs method invoker contract and execute its default method + _, _, structs, err := DeployStructs(auth, sim) + if err != nil { + t.Fatalf("Failed to deploy defaulter contract: %v", err) + } + sim.Commit() + opts := bind.CallOpts{} + if _, err := structs.F(&opts); err != nil { + t.Fatalf("Failed to invoke F method: %v", err) + } + if _, err := structs.G(&opts); err != nil { + t.Fatalf("Failed to invoke G method: %v", err) + } + `, + nil, + nil, + nil, + nil, }, // Tests that non-existent contracts are reported as such (though only simulator test) { @@ -522,10 +605,10 @@ var bindTests = []struct { []string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`}, []string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, ` - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" + "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 @@ -547,6 +630,46 @@ var bindTests = []struct { nil, nil, nil, + nil, + }, + { + `NonExistentStruct`, + ` + contract NonExistentStruct { + function Struct() public view returns(uint256 a, uint256 b) { + return (10, 10); + } + } + `, + []string{`6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063d5f6622514602d575b600080fd5b6033604c565b6040805192835260208301919091528051918290030190f35b600a809156fea264697066735822beefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeef64736f6c6343decafe0033`}, + []string{`[{"inputs":[],"name":"Struct","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"stateMutability":"pure","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(core.GenesisAlloc{}, uint64(10000000000)) + defer sim.Close() + + nonexistent, err := NewNonExistentStruct(common.Address{}, sim) + if err != nil { + t.Fatalf("Failed to access non-existent contract: %v", err) + } + // Ensure that contract calls fail with the appropriate error + if res, err := nonexistent.Struct(nil); err == nil { + t.Fatalf("Call succeeded on non-existent contract: %v", res) + } else if (err != bind.ErrNoCode) { + t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode) + } + `, + nil, + nil, + nil, + nil, }, // Tests that gas estimation works for contracts with weird gas mechanics too. { @@ -569,17 +692,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a funky gas pattern contract @@ -602,6 +725,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Test that constant functions can be called from an (optional) specified address { @@ -617,18 +741,18 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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/crypto" `, ` // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() - auth := bind.NewKeyedTransactor(key) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a sender tester contract and execute a structured call on it @@ -655,6 +779,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that methods and returns with underscores inside work correctly. { @@ -692,17 +817,17 @@ var bindTests = []struct { "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy a underscorer tester contract and execute a structured call on it @@ -734,6 +859,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, // Tests that logs can be successfully filtered and decoded. { @@ -784,18 +910,18 @@ var bindTests = []struct { "math/big" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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/crypto" `, ` // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() - auth := bind.NewKeyedTransactor(key) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // Deploy an eventer contract @@ -955,6 +1081,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, { `DeeplyNestedArray`, @@ -974,17 +1101,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() //deploy the test contract @@ -1035,6 +1162,7 @@ var bindTests = []struct { nil, nil, nil, + nil, }, { `CallbackParam`, @@ -1076,6 +1204,7 @@ var bindTests = []struct { }, nil, nil, + nil, }, { `Tuple`, ` @@ -1085,7 +1214,10 @@ var bindTests = []struct { contract Tuple { struct S { uint a; uint[] b; T[] c; } struct T { uint x; uint y; } + struct P { uint8 x; uint8 y; } + struct Q { uint16 x; uint16 y; } event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e); + event TupleEvent2(P[]); 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); @@ -1093,28 +1225,28 @@ var bindTests = []struct { 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); } + function func3(Q[] memory) public pure {} // call function, nothing to return } - `, - []string{`608060405234801561001057600080fd5b50610eb2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063443c79b41461003b578063d0062cdd1461006f575b600080fd5b61005560048036036100509190810190610624565b61008b565b604051610066959493929190610b28565b60405180910390f35b61008960048036036100849190810190610624565b6100bc565b005b610093610102565b606061009d610123565b6060808989898989945094509450945094509550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd0085858585856040516100f3959493929190610b28565b60405180910390a15050505050565b60405180606001604052806000815260200160608152602001606081525090565b60405180604001604052806002905b60608152602001906001900390816101325790505090565b600082601f83011261015b57600080fd5b813561016e61016982610bcb565b610b9e565b9150818183526020840193506020810190508385608084028201111561019357600080fd5b60005b838110156101c357816101a988826102a6565b845260208401935060808301925050600181019050610196565b5050505092915050565b600082601f8301126101de57600080fd5b60026101f16101ec82610bf3565b610b9e565b9150818360005b83811015610228578135860161020e888261031a565b8452602084019350602083019250506001810190506101f8565b5050505092915050565b600082601f83011261024357600080fd5b813561025661025182610c15565b610b9e565b9150818183526020840193506020810190508360005b8381101561029c578135860161028288826104a3565b84526020840193506020830192505060018101905061026c565b5050505092915050565b600082601f8301126102b757600080fd5b60026102ca6102c582610c3d565b610b9e565b915081838560408402820111156102e057600080fd5b60005b8381101561031057816102f688826105c3565b8452602084019350604083019250506001810190506102e3565b5050505092915050565b600082601f83011261032b57600080fd5b813561033e61033982610c5f565b610b9e565b9150818183526020840193506020810190508385604084028201111561036357600080fd5b60005b83811015610393578161037988826105c3565b845260208401935060408301925050600181019050610366565b5050505092915050565b600082601f8301126103ae57600080fd5b81356103c16103bc82610c87565b610b9e565b915081818352602084019350602081019050838560208402820111156103e657600080fd5b60005b8381101561041657816103fc888261060f565b8452602084019350602083019250506001810190506103e9565b5050505092915050565b600082601f83011261043157600080fd5b813561044461043f82610caf565b610b9e565b9150818183526020840193506020810190508385602084028201111561046957600080fd5b60005b83811015610499578161047f888261060f565b84526020840193506020830192505060018101905061046c565b5050505092915050565b6000606082840312156104b557600080fd5b6104bf6060610b9e565b905060006104cf8482850161060f565b600083015250602082013567ffffffffffffffff8111156104ef57600080fd5b6104fb8482850161039d565b602083015250604082013567ffffffffffffffff81111561051b57600080fd5b6105278482850161031a565b60408301525092915050565b60006060828403121561054557600080fd5b61054f6060610b9e565b9050600061055f8482850161060f565b600083015250602082013567ffffffffffffffff81111561057f57600080fd5b61058b8482850161039d565b602083015250604082013567ffffffffffffffff8111156105ab57600080fd5b6105b78482850161031a565b60408301525092915050565b6000604082840312156105d557600080fd5b6105df6040610b9e565b905060006105ef8482850161060f565b60008301525060206106038482850161060f565b60208301525092915050565b60008135905061061e81610e58565b92915050565b600080600080600060a0868803121561063c57600080fd5b600086013567ffffffffffffffff81111561065657600080fd5b61066288828901610533565b955050602086013567ffffffffffffffff81111561067f57600080fd5b61068b8882890161014a565b945050604086013567ffffffffffffffff8111156106a857600080fd5b6106b4888289016101cd565b935050606086013567ffffffffffffffff8111156106d157600080fd5b6106dd88828901610232565b925050608086013567ffffffffffffffff8111156106fa57600080fd5b61070688828901610420565b9150509295509295909350565b600061071f83836108cb565b60808301905092915050565b60006107378383610922565b905092915050565b600061074b8383610a93565b905092915050565b600061075f8383610aea565b60408301905092915050565b60006107778383610b19565b60208301905092915050565b600061078e82610d3b565b6107988185610de3565b93506107a383610cd7565b8060005b838110156107d45781516107bb8882610713565b97506107c683610d88565b9250506001810190506107a7565b5085935050505092915050565b60006107ec82610d46565b6107f68185610df4565b93508360208202850161080885610ce7565b8060005b858110156108445784840389528151610825858261072b565b945061083083610d95565b925060208a0199505060018101905061080c565b50829750879550505050505092915050565b600061086182610d51565b61086b8185610dff565b93508360208202850161087d85610cf1565b8060005b858110156108b9578484038952815161089a858261073f565b94506108a583610da2565b925060208a01995050600181019050610881565b50829750879550505050505092915050565b6108d481610d5c565b6108de8184610e10565b92506108e982610d01565b8060005b8381101561091a5781516109018782610753565b965061090c83610daf565b9250506001810190506108ed565b505050505050565b600061092d82610d67565b6109378185610e1b565b935061094283610d0b565b8060005b8381101561097357815161095a8882610753565b975061096583610dbc565b925050600181019050610946565b5085935050505092915050565b600061098b82610d7d565b6109958185610e3d565b93506109a083610d2b565b8060005b838110156109d15781516109b8888261076b565b97506109c383610dd6565b9250506001810190506109a4565b5085935050505092915050565b60006109e982610d72565b6109f38185610e2c565b93506109fe83610d1b565b8060005b83811015610a2f578151610a16888261076b565b9750610a2183610dc9565b925050600181019050610a02565b5085935050505092915050565b6000606083016000830151610a546000860182610b19565b5060208301518482036020860152610a6c82826109de565b91505060408301518482036040860152610a868282610922565b9150508091505092915050565b6000606083016000830151610aab6000860182610b19565b5060208301518482036020860152610ac382826109de565b91505060408301518482036040860152610add8282610922565b9150508091505092915050565b604082016000820151610b006000850182610b19565b506020820151610b136020850182610b19565b50505050565b610b2281610e4e565b82525050565b600060a0820190508181036000830152610b428188610a3c565b90508181036020830152610b568187610783565b90508181036040830152610b6a81866107e1565b90508181036060830152610b7e8185610856565b90508181036080830152610b928184610980565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610bc157600080fd5b8060405250919050565b600067ffffffffffffffff821115610be257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c0a57600080fd5b602082029050919050565b600067ffffffffffffffff821115610c2c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c5457600080fd5b602082029050919050565b600067ffffffffffffffff821115610c7657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c9e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610cc657600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000819050919050565b610e6181610e4e565b8114610e6c57600080fd5b5056fea365627a7a72305820405a6336d8c302cee779de6788527018e5a2393892328fbf12b96065df2de00a6c6578706572696d656e74616cf564736f6c634300050a0040`}, + []string{`60806040523480156100115760006000fd5b50610017565b6110b2806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063443c79b41461004c578063d0062cdd14610080578063e4d9a43b1461009c57610046565b60006000fd5b610066600480360361006191908101906107b8565b6100b8565b604051610077959493929190610ccb565b60405180910390f35b61009a600480360361009591908101906107b8565b6100ef565b005b6100b660048036036100b19190810190610775565b610136565b005b6100c061013a565b60606100ca61015e565b606060608989898989945094509450945094506100e2565b9550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd008585858585604051610126959493929190610ccb565b60405180910390a15b5050505050565b5b50565b60405180606001604052806000815260200160608152602001606081526020015090565b60405180604001604052806002905b606081526020019060019003908161016d57905050905661106e565b600082601f830112151561019d5760006000fd5b81356101b06101ab82610d6f565b610d41565b915081818352602084019350602081019050838560808402820111156101d65760006000fd5b60005b8381101561020757816101ec888261037a565b8452602084019350608083019250505b6001810190506101d9565b5050505092915050565b600082601f83011215156102255760006000fd5b600261023861023382610d98565b610d41565b9150818360005b83811015610270578135860161025588826103f3565b8452602084019350602083019250505b60018101905061023f565b5050505092915050565b600082601f830112151561028e5760006000fd5b81356102a161029c82610dbb565b610d41565b915081818352602084019350602081019050838560408402820111156102c75760006000fd5b60005b838110156102f857816102dd888261058b565b8452602084019350604083019250505b6001810190506102ca565b5050505092915050565b600082601f83011215156103165760006000fd5b813561032961032482610de4565b610d41565b9150818183526020840193506020810190508360005b83811015610370578135860161035588826105d8565b8452602084019350602083019250505b60018101905061033f565b5050505092915050565b600082601f830112151561038e5760006000fd5b60026103a161039c82610e0d565b610d41565b915081838560408402820111156103b85760006000fd5b60005b838110156103e957816103ce88826106fe565b8452602084019350604083019250505b6001810190506103bb565b5050505092915050565b600082601f83011215156104075760006000fd5b813561041a61041582610e30565b610d41565b915081818352602084019350602081019050838560408402820111156104405760006000fd5b60005b83811015610471578161045688826106fe565b8452602084019350604083019250505b600181019050610443565b5050505092915050565b600082601f830112151561048f5760006000fd5b81356104a261049d82610e59565b610d41565b915081818352602084019350602081019050838560208402820111156104c85760006000fd5b60005b838110156104f957816104de8882610760565b8452602084019350602083019250505b6001810190506104cb565b5050505092915050565b600082601f83011215156105175760006000fd5b813561052a61052582610e82565b610d41565b915081818352602084019350602081019050838560208402820111156105505760006000fd5b60005b8381101561058157816105668882610760565b8452602084019350602083019250505b600181019050610553565b5050505092915050565b60006040828403121561059e5760006000fd5b6105a86040610d41565b905060006105b88482850161074b565b60008301525060206105cc8482850161074b565b60208301525092915050565b6000606082840312156105eb5760006000fd5b6105f56060610d41565b9050600061060584828501610760565b600083015250602082013567ffffffffffffffff8111156106265760006000fd5b6106328482850161047b565b602083015250604082013567ffffffffffffffff8111156106535760006000fd5b61065f848285016103f3565b60408301525092915050565b60006060828403121561067e5760006000fd5b6106886060610d41565b9050600061069884828501610760565b600083015250602082013567ffffffffffffffff8111156106b95760006000fd5b6106c58482850161047b565b602083015250604082013567ffffffffffffffff8111156106e65760006000fd5b6106f2848285016103f3565b60408301525092915050565b6000604082840312156107115760006000fd5b61071b6040610d41565b9050600061072b84828501610760565b600083015250602061073f84828501610760565b60208301525092915050565b60008135905061075a8161103a565b92915050565b60008135905061076f81611054565b92915050565b6000602082840312156107885760006000fd5b600082013567ffffffffffffffff8111156107a35760006000fd5b6107af8482850161027a565b91505092915050565b6000600060006000600060a086880312156107d35760006000fd5b600086013567ffffffffffffffff8111156107ee5760006000fd5b6107fa8882890161066b565b955050602086013567ffffffffffffffff8111156108185760006000fd5b61082488828901610189565b945050604086013567ffffffffffffffff8111156108425760006000fd5b61084e88828901610211565b935050606086013567ffffffffffffffff81111561086c5760006000fd5b61087888828901610302565b925050608086013567ffffffffffffffff8111156108965760006000fd5b6108a288828901610503565b9150509295509295909350565b60006108bb8383610a6a565b60808301905092915050565b60006108d38383610ac2565b905092915050565b60006108e78383610c36565b905092915050565b60006108fb8383610c8d565b60408301905092915050565b60006109138383610cbc565b60208301905092915050565b600061092a82610f0f565b6109348185610fb7565b935061093f83610eab565b8060005b8381101561097157815161095788826108af565b975061096283610f5c565b9250505b600181019050610943565b5085935050505092915050565b600061098982610f1a565b6109938185610fc8565b9350836020820285016109a585610ebb565b8060005b858110156109e257848403895281516109c285826108c7565b94506109cd83610f69565b925060208a019950505b6001810190506109a9565b50829750879550505050505092915050565b60006109ff82610f25565b610a098185610fd3565b935083602082028501610a1b85610ec5565b8060005b85811015610a585784840389528151610a3885826108db565b9450610a4383610f76565b925060208a019950505b600181019050610a1f565b50829750879550505050505092915050565b610a7381610f30565b610a7d8184610fe4565b9250610a8882610ed5565b8060005b83811015610aba578151610aa087826108ef565b9650610aab83610f83565b9250505b600181019050610a8c565b505050505050565b6000610acd82610f3b565b610ad78185610fef565b9350610ae283610edf565b8060005b83811015610b14578151610afa88826108ef565b9750610b0583610f90565b9250505b600181019050610ae6565b5085935050505092915050565b6000610b2c82610f51565b610b368185611011565b9350610b4183610eff565b8060005b83811015610b73578151610b598882610907565b9750610b6483610faa565b9250505b600181019050610b45565b5085935050505092915050565b6000610b8b82610f46565b610b958185611000565b9350610ba083610eef565b8060005b83811015610bd2578151610bb88882610907565b9750610bc383610f9d565b9250505b600181019050610ba4565b5085935050505092915050565b6000606083016000830151610bf76000860182610cbc565b5060208301518482036020860152610c0f8282610b80565b91505060408301518482036040860152610c298282610ac2565b9150508091505092915050565b6000606083016000830151610c4e6000860182610cbc565b5060208301518482036020860152610c668282610b80565b91505060408301518482036040860152610c808282610ac2565b9150508091505092915050565b604082016000820151610ca36000850182610cbc565b506020820151610cb66020850182610cbc565b50505050565b610cc581611030565b82525050565b600060a0820190508181036000830152610ce58188610bdf565b90508181036020830152610cf9818761091f565b90508181036040830152610d0d818661097e565b90508181036060830152610d2181856109f4565b90508181036080830152610d358184610b21565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610d655760006000fd5b8060405250919050565b600067ffffffffffffffff821115610d875760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610db05760006000fd5b602082029050919050565b600067ffffffffffffffff821115610dd35760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610dfc5760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e255760006000fd5b602082029050919050565b600067ffffffffffffffff821115610e485760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e715760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e9a5760006000fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061ffff82169050919050565b6000819050919050565b61104381611022565b811415156110515760006000fd5b50565b61105d81611030565b8114151561106b5760006000fd5b50565bfea365627a7a72315820d78c6ba7ee332581e6c4d9daa5fc07941841230f7ce49edf6e05b1b63853e8746c6578706572696d656e74616cf564736f6c634300050c0040`}, []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"}] +[{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"indexed":false,"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"}],"indexed":false,"internalType":"struct Tuple.P[]","name":"","type":"tuple[]"}],"name":"TupleEvent2","type":"event"},{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"","type":"tuple[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"components":[{"internalType":"uint16","name":"x","type":"uint16"},{"internalType":"uint16","name":"y","type":"uint16"}],"internalType":"struct Tuple.Q[]","name":"","type":"tuple[]"}],"name":"func3","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}] `}, ` "math/big" "reflect" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() _, _, contract, err := DeployTuple(auth, sim) @@ -1129,10 +1261,10 @@ var bindTests = []struct { } } - a := Struct1{ + a := TupleS{ A: big.NewInt(1), B: []*big.Int{big.NewInt(2), big.NewInt(3)}, - C: []Struct0{ + C: []TupleT{ { X: big.NewInt(4), Y: big.NewInt(5), @@ -1144,7 +1276,7 @@ var bindTests = []struct { }, } - b := [][2]Struct0{ + b := [][2]TupleT{ { { X: big.NewInt(8), @@ -1157,7 +1289,7 @@ var bindTests = []struct { }, } - c := [2][]Struct0{ + c := [2][]TupleT{ { { X: big.NewInt(12), @@ -1176,7 +1308,7 @@ var bindTests = []struct { }, } - d := []Struct1{a} + d := []TupleS{a} e := []*big.Int{big.NewInt(18), big.NewInt(19)} ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e) @@ -1207,10 +1339,16 @@ var bindTests = []struct { check(iter.Event.C, c, "field3 mismatch") check(iter.Event.D, d, "field4 mismatch") check(iter.Event.E, e, "field5 mismatch") + + err = contract.Func3(nil, nil) + if err != nil { + t.Fatalf("failed to call function which has no return, err %v", err) + } `, nil, nil, nil, + nil, }, { `UseLibrary`, @@ -1240,17 +1378,17 @@ var bindTests = []struct { ` "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) - sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() //deploy the test contract @@ -1279,6 +1417,7 @@ var bindTests = []struct { map[string]string{ "b98c933f0a6ececcd167bd4f9d3299b1a0": "Math", }, + nil, []string{"UseLibrary", "Math"}, }, { "Overload", @@ -1290,7 +1429,7 @@ var bindTests = []struct { event bar(uint256 i); event bar(uint256 i, uint256 j); - + function foo(uint256 i) public { emit bar(i); } @@ -1305,16 +1444,16 @@ var bindTests = []struct { "math/big" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" + "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) + auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) defer sim.Close() // deploy the test contract @@ -1354,7 +1493,7 @@ var bindTests = []struct { if n != 3 { t.Fatalf("Invalid bar0 event") } - case <-time.NewTimer(100 * time.Millisecond).C: + case <-time.NewTimer(3 * time.Second).C: t.Fatalf("Wait bar0 event timeout") } @@ -1365,7 +1504,7 @@ var bindTests = []struct { if n != 1 { t.Fatalf("Invalid bar event") } - case <-time.NewTimer(100 * time.Millisecond).C: + case <-time.NewTimer(3 * time.Second).C: t.Fatalf("Wait bar event timeout") } close(stopCh) @@ -1373,6 +1512,532 @@ var bindTests = []struct { nil, nil, nil, + nil, + }, + { + "IdentifierCollision", + ` + pragma solidity >=0.4.19 <0.6.0; + + contract IdentifierCollision { + uint public _myVar; + + function MyVar() public view returns (uint) { + return _myVar; + } + } + `, + []string{"60806040523480156100115760006000fd5b50610017565b60c3806100256000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c806301ad4d8714603c5780634ef1f0ad146058576036565b60006000fd5b60426074565b6040518082815260200191505060405180910390f35b605e607d565b6040518082815260200191505060405180910390f35b60006000505481565b60006000600050549050608b565b9056fea265627a7a7231582067c8d84688b01c4754ba40a2a871cede94ea1f28b5981593ab2a45b46ac43af664736f6c634300050c0032"}, + []string{`[{"constant":true,"inputs":[],"name":"MyVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_myVar","outputs":[{"internalType":"uint256","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/crypto" + "github.com/ethereum/go-ethereum/core" + `, + ` + // Initialize test accounts + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + + // Deploy registrar contract + sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(10000000000000000)}}, 10000000) + defer sim.Close() + + transactOpts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + _, _, _, err := DeployIdentifierCollision(transactOpts, sim) + if err != nil { + t.Fatalf("failed to deploy contract: %v", err) + } + `, + nil, + nil, + map[string]string{"_myVar": "pubVar"}, // alias MyVar to PubVar + nil, + }, + { + "MultiContracts", + ` + pragma solidity ^0.5.11; + pragma experimental ABIEncoderV2; + + library ExternalLib { + struct SharedStruct{ + uint256 f1; + bytes32 f2; + } + } + + contract ContractOne { + function foo(ExternalLib.SharedStruct memory s) pure public { + // Do stuff + } + } + + contract ContractTwo { + function bar(ExternalLib.SharedStruct memory s) pure public { + // Do stuff + } + } + `, + []string{ + `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c80639d8a8ba81461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a72315820749274eb7f6c01010d5322af4e1668b0a154409eb7968bd6cae5524c7ed669bb6c6578706572696d656e74616cf564736f6c634300050c0040`, + `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c8063db8ba08c1461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a723158209bc28ee7ea97c131a13330d77ec73b4493b5c59c648352da81dd288b021192596c6578706572696d656e74616cf564736f6c634300050c0040`, + `606c6026600b82828239805160001a6073141515601857fe5b30600052607381538281f350fe73000000000000000000000000000000000000000030146080604052600436106023575b60006000fdfea365627a7a72315820518f0110144f5b3de95697d05e456a064656890d08e6f9cff47f3be710cc46a36c6578706572696d656e74616cf564736f6c634300050c0040`, + }, + []string{ + `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`, + `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"bar","outputs":[],"payable":false,"stateMutability":"pure","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/crypto" + "github.com/ethereum/go-ethereum/core" + `, + ` + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + + // Deploy registrar contract + sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(10000000000000000)}}, 10000000) + defer sim.Close() + + transactOpts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + _, _, c1, err := DeployContractOne(transactOpts, sim) + if err != nil { + t.Fatal("Failed to deploy contract") + } + sim.Commit() + err = c1.Foo(nil, ExternalLibSharedStruct{ + F1: big.NewInt(100), + F2: [32]byte{0x01, 0x02, 0x03}, + }) + if err != nil { + t.Fatal("Failed to invoke function") + } + _, _, c2, err := DeployContractTwo(transactOpts, sim) + if err != nil { + t.Fatal("Failed to deploy contract") + } + sim.Commit() + err = c2.Bar(nil, ExternalLibSharedStruct{ + F1: big.NewInt(100), + F2: [32]byte{0x01, 0x02, 0x03}, + }) + if err != nil { + t.Fatal("Failed to invoke function") + } + `, + nil, + nil, + nil, + []string{"ContractOne", "ContractTwo", "ExternalLib"}, + }, + // Test the existence of the free retrieval calls + { + `PureAndView`, + `pragma solidity >=0.6.0; + contract PureAndView { + function PureFunc() public pure returns (uint) { + return 42; + } + function ViewFunc() public view returns (uint) { + return block.number; + } + } + `, + []string{`608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806376b5686a146037578063bb38c66c146053575b600080fd5b603d606f565b6040518082815260200191505060405180910390f35b60596077565b6040518082815260200191505060405180910390f35b600043905090565b6000602a90509056fea2646970667358221220d158c2ab7fdfce366a7998ec79ab84edd43b9815630bbaede2c760ea77f29f7f64736f6c63430006000033`}, + []string{`[{"inputs": [],"name": "PureFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "ViewFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"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.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000000000)}}, 10000000) + defer sim.Close() + + // Deploy a tester contract and execute a structured call on it + _, _, pav, err := DeployPureAndView(auth, sim) + if err != nil { + t.Fatalf("Failed to deploy PureAndView contract: %v", err) + } + sim.Commit() + + // This test the existence of the free retreiver call for view and pure functions + if num, err := pav.PureFunc(nil); err != nil { + t.Fatalf("Failed to call anonymous field retriever: %v", err) + } else if num.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 42) + } + if num, err := pav.ViewFunc(nil); err != nil { + t.Fatalf("Failed to call anonymous field retriever: %v", err) + } else if num.Cmp(big.NewInt(1)) != 0 { + t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 1) + } + `, + nil, + nil, + nil, + nil, + }, + // Test fallback separation introduced in v0.6.0 + { + `NewFallbacks`, + ` + pragma solidity >=0.6.0 <0.7.0; + + contract NewFallbacks { + event Fallback(bytes data); + fallback() external { + emit Fallback(msg.data); + } + + event Received(address addr, uint value); + receive() external payable { + emit Received(msg.sender, msg.value); + } + } + `, + []string{"6080604052348015600f57600080fd5b506101078061001f6000396000f3fe608060405236605f577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1005b348015606a57600080fd5b507f9043988963722edecc2099c75b0af0ff76af14ffca42ed6bce059a20a2a9f98660003660405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a100fea26469706673582212201f994dcfbc53bf610b19176f9a361eafa77b447fd9c796fa2c615dfd0aaf3b8b64736f6c634300060c0033"}, + []string{`[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Fallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]`}, + ` + "bytes" + "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" + `, + ` + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(10000000000000000)}}, 1000000) + defer sim.Close() + + opts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + _, _, c, err := DeployNewFallbacks(opts, sim) + if err != nil { + t.Fatalf("Failed to deploy contract: %v", err) + } + sim.Commit() + + // Test receive function + opts.Value = big.NewInt(100) + c.Receive(opts) + sim.Commit() + + var gotEvent bool + iter, _ := c.FilterReceived(nil) + defer iter.Close() + for iter.Next() { + if iter.Event.Addr != addr { + t.Fatal("Msg.sender mismatch") + } + if iter.Event.Value.Uint64() != 100 { + t.Fatal("Msg.value mismatch") + } + gotEvent = true + break + } + if !gotEvent { + t.Fatal("Expect to receive event emitted by receive") + } + + // Test fallback function + gotEvent = false + opts.Value = nil + calldata := []byte{0x01, 0x02, 0x03} + c.Fallback(opts, calldata) + sim.Commit() + + iter2, _ := c.FilterFallback(nil) + defer iter2.Close() + for iter2.Next() { + if !bytes.Equal(iter2.Event.Data, calldata) { + t.Fatal("calldata mismatch") + } + gotEvent = true + break + } + if !gotEvent { + t.Fatal("Expect to receive event emitted by fallback") + } + `, + nil, + nil, + nil, + nil, + }, + // Test resolving single struct argument + { + `NewSingleStructArgument`, + ` + pragma solidity ^0.8.0; + + contract NewSingleStructArgument { + struct MyStruct{ + uint256 a; + uint256 b; + } + event StructEvent(MyStruct s); + function TestEvent() public { + emit StructEvent(MyStruct({a: 1, b: 2})); + } + } + `, + []string{"608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806324ec1d3f14602d575b600080fd5b60336035565b005b7fb4b2ff75e30cb4317eaae16dd8a187dd89978df17565104caa6c2797caae27d460405180604001604052806001815260200160028152506040516078919060ba565b60405180910390a1565b6040820160008201516096600085018260ad565b50602082015160a7602085018260ad565b50505050565b60b48160d3565b82525050565b600060408201905060cd60008301846082565b92915050565b600081905091905056fea26469706673582212208823628796125bf9941ce4eda18da1be3cf2931b231708ab848e1bd7151c0c9a64736f6c63430008070033"}, + []string{`[{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"indexed":false,"internalType":"struct Test.MyStruct","name":"s","type":"tuple"}],"name":"StructEvent","type":"event"},{"inputs":[],"name":"TestEvent","outputs":[],"stateMutability":"nonpayable","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" + "github.com/ethereum/go-ethereum/eth/ethconfig" + `, + ` + var ( + key, _ = crypto.GenerateKey() + user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) + ) + defer sim.Close() + + _, _, d, err := DeployNewSingleStructArgument(user, sim) + if err != nil { + t.Fatalf("Failed to deploy contract %v", err) + } + sim.Commit() + + _, err = d.TestEvent(user) + if err != nil { + t.Fatalf("Failed to call contract %v", err) + } + sim.Commit() + + it, err := d.FilterStructEvent(nil) + if err != nil { + t.Fatalf("Failed to filter contract event %v", err) + } + var count int + for it.Next() { + if it.Event.S.A.Cmp(big.NewInt(1)) != 0 { + t.Fatal("Unexpected contract event") + } + if it.Event.S.B.Cmp(big.NewInt(2)) != 0 { + t.Fatal("Unexpected contract event") + } + count += 1 + } + if count != 1 { + t.Fatal("Unexpected contract event number") + } + `, + nil, + nil, + nil, + nil, + }, + // Test errors introduced in v0.8.4 + { + `NewErrors`, + ` + pragma solidity >0.8.4; + + contract NewErrors { + error MyError(uint256); + error MyError1(uint256); + error MyError2(uint256, uint256); + error MyError3(uint256 a, uint256 b, uint256 c); + function Error() public pure { + revert MyError3(1,2,3); + } + } + `, + []string{"0x6080604052348015600f57600080fd5b5060998061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063726c638214602d575b600080fd5b60336035565b005b60405163024876cd60e61b815260016004820152600260248201526003604482015260640160405180910390fdfea264697066735822122093f786a1bc60216540cd999fbb4a6109e0fef20abcff6e9107fb2817ca968f3c64736f6c63430008070033"}, + []string{`[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError1","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError2","type":"error"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"},{"internalType":"uint256","name":"c","type":"uint256"}],"name":"MyError3","type":"error"},{"inputs":[],"name":"Error","outputs":[],"stateMutability":"pure","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" + "github.com/ethereum/go-ethereum/eth/ethconfig" + `, + ` + var ( + key, _ = crypto.GenerateKey() + user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) + ) + defer sim.Close() + + _, tx, contract, err := DeployNewErrors(user, sim) + if err != nil { + t.Fatal(err) + } + sim.Commit() + _, err = bind.WaitDeployed(nil, sim, tx) + if err != nil { + t.Error(err) + } + if err := contract.Error(new(bind.CallOpts)); err == nil { + t.Fatalf("expected contract to throw error") + } + // TODO (MariusVanDerWijden unpack error using abigen + // once that is implemented + `, + nil, + nil, + nil, + nil, + }, + { + name: `ConstructorWithStructParam`, + contract: ` + pragma solidity >=0.8.0 <0.9.0; + + contract ConstructorWithStructParam { + struct StructType { + uint256 field; + } + + constructor(StructType memory st) {} + } + `, + bytecode: []string{`0x608060405234801561001057600080fd5b506040516101c43803806101c48339818101604052810190610032919061014a565b50610177565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100958261004c565b810181811067ffffffffffffffff821117156100b4576100b361005d565b5b80604052505050565b60006100c7610038565b90506100d3828261008c565b919050565b6000819050919050565b6100eb816100d8565b81146100f657600080fd5b50565b600081519050610108816100e2565b92915050565b60006020828403121561012457610123610047565b5b61012e60206100bd565b9050600061013e848285016100f9565b60008301525092915050565b6000602082840312156101605761015f610042565b5b600061016e8482850161010e565b91505092915050565b603f806101856000396000f3fe6080604052600080fdfea2646970667358221220cdffa667affecefac5561f65f4a4ba914204a8d4eb859d8cd426fb306e5c12a364736f6c634300080a0033`}, + abi: []string{`[{"inputs":[{"components":[{"internalType":"uint256","name":"field","type":"uint256"}],"internalType":"struct ConstructorWithStructParam.StructType","name":"st","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"}]`}, + imports: ` + "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" + "github.com/ethereum/go-ethereum/eth/ethconfig" + `, + tester: ` + var ( + key, _ = crypto.GenerateKey() + user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) + ) + defer sim.Close() + + _, tx, _, err := DeployConstructorWithStructParam(user, sim, ConstructorWithStructParamStructType{Field: big.NewInt(42)}) + if err != nil { + t.Fatalf("DeployConstructorWithStructParam() got err %v; want nil err", err) + } + sim.Commit() + + if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { + t.Logf("Deployment tx: %+v", tx) + t.Errorf("bind.WaitDeployed(nil, %T, ) got err %v; want nil err", sim, err) + } + `, + }, + { + name: `NameConflict`, + contract: ` + // SPDX-License-Identifier: GPL-3.0 + pragma solidity >=0.4.22 <0.9.0; + contract oracle { + struct request { + bytes data; + bytes _data; + } + event log (int msg, int _msg); + function addRequest(request memory req) public pure {} + function getRequest() pure public returns (request memory) { + return request("", ""); + } + } + `, + bytecode: []string{"0x608060405234801561001057600080fd5b5061042b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063c2bb515f1461003b578063cce7b04814610059575b600080fd5b610043610075565b60405161005091906101af565b60405180910390f35b610073600480360381019061006e91906103ac565b6100b5565b005b61007d6100b8565b604051806040016040528060405180602001604052806000815250815260200160405180602001604052806000815250815250905090565b50565b604051806040016040528060608152602001606081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561010c5780820151818401526020810190506100f1565b8381111561011b576000848401525b50505050565b6000601f19601f8301169050919050565b600061013d826100d2565b61014781856100dd565b93506101578185602086016100ee565b61016081610121565b840191505092915050565b600060408301600083015184820360008601526101888282610132565b915050602083015184820360208601526101a28282610132565b9150508091505092915050565b600060208201905081810360008301526101c9818461016b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61022282610121565b810181811067ffffffffffffffff82111715610241576102406101ea565b5b80604052505050565b60006102546101d1565b90506102608282610219565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff82111561028f5761028e6101ea565b5b61029882610121565b9050602081019050919050565b82818337600083830152505050565b60006102c76102c284610274565b61024a565b9050828152602081018484840111156102e3576102e261026f565b5b6102ee8482856102a5565b509392505050565b600082601f83011261030b5761030a61026a565b5b813561031b8482602086016102b4565b91505092915050565b60006040828403121561033a576103396101e5565b5b610344604061024a565b9050600082013567ffffffffffffffff81111561036457610363610265565b5b610370848285016102f6565b600083015250602082013567ffffffffffffffff81111561039457610393610265565b5b6103a0848285016102f6565b60208301525092915050565b6000602082840312156103c2576103c16101db565b5b600082013567ffffffffffffffff8111156103e0576103df6101e0565b5b6103ec84828501610324565b9150509291505056fea264697066735822122033bca1606af9b6aeba1673f98c52003cec19338539fb44b86690ce82c51483b564736f6c634300080e0033"}, + abi: []string{`[ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int256", "name": "msg", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "_msg", "type": "int256" } ], "name": "log", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "internalType": "struct oracle.request", "name": "req", "type": "tuple" } ], "name": "addRequest", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getRequest", "outputs": [ { "components": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "internalType": "struct oracle.request", "name": "", "type": "tuple" } ], "stateMutability": "pure", "type": "function" } ]`}, + imports: ` + "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" + "github.com/ethereum/go-ethereum/eth/ethconfig" + `, + tester: ` + var ( + key, _ = crypto.GenerateKey() + user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) + ) + defer sim.Close() + + _, tx, _, err := DeployNameConflict(user, sim) + if err != nil { + t.Fatalf("DeployNameConflict() got err %v; want nil err", err) + } + sim.Commit() + + if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { + t.Logf("Deployment tx: %+v", tx) + t.Errorf("bind.WaitDeployed(nil, %T, ) got err %v; want nil err", sim, err) + } + `, + }, + { + name: "RangeKeyword", + contract: ` + // SPDX-License-Identifier: GPL-3.0 + pragma solidity >=0.4.22 <0.9.0; + contract keywordcontract { + function functionWithKeywordParameter(range uint256) public pure {} + } + `, + bytecode: []string{"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063527a119f14602d575b600080fd5b60436004803603810190603f9190605b565b6045565b005b50565b6000813590506055816092565b92915050565b600060208284031215606e57606d608d565b5b6000607a848285016048565b91505092915050565b6000819050919050565b600080fd5b6099816083565b811460a357600080fd5b5056fea2646970667358221220d4f4525e2615516394055d369fb17df41c359e5e962734f27fd683ea81fd9db164736f6c63430008070033"}, + abi: []string{`[{"inputs":[{"internalType":"uint256","name":"range","type":"uint256"}],"name":"functionWithKeywordParameter","outputs":[],"stateMutability":"pure","type":"function"}]`}, + imports: ` + "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" + "github.com/ethereum/go-ethereum/eth/ethconfig" + `, + tester: ` + var ( + key, _ = crypto.GenerateKey() + user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) + sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) + ) + _, tx, _, err := DeployRangeKeyword(user, sim) + if err != nil { + t.Fatalf("error deploying contract: %v", err) + } + sim.Commit() + + if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { + t.Errorf("error deploying the contract: %v", err) + } + `, }, } @@ -1385,34 +2050,31 @@ func TestGolangBindings(t *testing.T) { t.Skip("go sdk not found for testing") } // Create a temporary workspace for the test suite - ws, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("failed to create temporary workspace: %v", err) - } - defer os.RemoveAll(ws) + ws := t.TempDir() pkg := filepath.Join(ws, "bindtest") - if err = os.MkdirAll(pkg, 0700); err != nil { + if err := os.MkdirAll(pkg, 0700); err != nil { t.Fatalf("failed to create package: %v", err) } // 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(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) - } - if err = ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil { - t.Fatalf("test %d: failed to write binding: %v", i, err) - } - // Generate the test file with the injected test code - code := fmt.Sprintf(` + t.Run(tt.name, func(t *testing.T) { + 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(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs, tt.aliases) + if err != nil { + t.Fatalf("test %d: failed to generate binding: %v", i, err) + } + if err = os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil { + t.Fatalf("test %d: failed to write binding: %v", i, err) + } + // Generate the test file with the injected test code + code := fmt.Sprintf(` package bindtest import ( @@ -1424,9 +2086,27 @@ func TestGolangBindings(t *testing.T) { %s } `, tt.imports, tt.name, tt.tester) - if err := ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil { - t.Fatalf("test %d: failed to write tests: %v", i, err) - } + if err := os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil { + t.Fatalf("test %d: failed to write tests: %v", i, err) + } + }) + } + // Convert the package to go modules and use the current source for go-ethereum + moder := exec.Command(gocmd, "mod", "init", "bindtest") + moder.Dir = pkg + if out, err := moder.CombinedOutput(); err != nil { + t.Fatalf("failed to convert binding test to modules: %v\n%s", err, out) + } + pwd, _ := os.Getwd() + replacer := exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/ethereum/go-ethereum@v0.0.0", "-replace", "github.com/ethereum/go-ethereum="+filepath.Join(pwd, "..", "..", "..")) // Repo root + replacer.Dir = pkg + if out, err := replacer.CombinedOutput(); err != nil { + t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) + } + tidier := exec.Command(gocmd, "mod", "tidy") + tidier.Dir = pkg + if out, err := tidier.CombinedOutput(); err != nil { + t.Fatalf("failed to tidy Go module file: %v\n%s", err, out) } // Test the entire package and report any failures cmd := exec.Command(gocmd, "test", "-v", "-count", "1") @@ -1497,13 +2177,10 @@ 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"; @@ -1511,8 +2188,6 @@ public class Test { 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)); } @@ -1523,7 +2198,6 @@ public class Test { this.Contract = deployment; } - // Ethereum address where this contract is located at. public final Address Address; @@ -1538,9 +2212,6 @@ public class Test { this(Geth.bindContract(address, ABI, client)); } - - - // setAddress is a paid mutator transaction binding the contract method 0xe30081a0. // // Solidity: function setAddress(address a) returns(address) @@ -1820,18 +2491,31 @@ public class Test { 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) + binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil, nil) if err != nil { t.Fatalf("test %d: failed to generate binding: %v", i, err) } - if binding != c.expected { + // Remove empty lines + removeEmptys := func(input string) string { + lines := strings.Split(input, "\n") + var index int + for _, line := range lines { + if strings.TrimSpace(line) != "" { + lines[index] = line + index += 1 + } + } + lines = lines[:index] + return strings.Join(lines, "\n") + } + binding = removeEmptys(binding) + expect := removeEmptys(c.expected) + if binding != expect { 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 c39d0fac..c9b00113 100644 --- a/accounts/abi/bind/template.go +++ b/accounts/abi/bind/template.go @@ -16,28 +16,30 @@ package bind -import "github.com/cryptoecc/ETH-ECC/accounts/abi" +import "github.com/ethereum/go-ethereum/accounts/abi" // tmplData is the data structure required to fill the binding template. 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 + Structs map[string]*tmplStruct // Contract struct type definitions } // tmplContract contains the data needed to generate an individual contract binding. 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 + InputBin string // Optional EVM bytecode used to generate 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 + Fallback *tmplMethod // Additional special fallback function + Receive *tmplMethod // Additional special receive function 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 + Library bool // Indicator whether the contract is a library } // tmplMethod is a wrapper around an abi.Method that contains a few preprocessed @@ -48,7 +50,8 @@ type tmplMethod struct { Structured bool // Whether the returns should be accumulated into a struct } -// tmplEvent is a wrapper around an a +// tmplEvent is a wrapper around an abi.Event that contains a few preprocessed +// and cached data fields. type tmplEvent struct { Original abi.Event // Original event as parsed by the abi package Normalized abi.Event // Normalized version of the parsed fields @@ -62,10 +65,10 @@ type tmplField struct { SolKind abi.Type // Raw abi type information } -// tmplStruct is a wrapper around an abi.tuple contains a auto-generated +// tmplStruct is a wrapper around an abi.tuple and contains an auto-generated // struct name. type tmplStruct struct { - Name string // Auto-generated struct name(We can't obtain the raw struct name through abi) + Name string // Auto-generated struct name(before solidity v0.5.11) or raw name. Fields []*tmplField // Struct fields definition depends on the binding language. } @@ -76,8 +79,8 @@ var tmplSource = map[Lang]string{ LangJava: tmplSourceJava, } -// tmplSourceGo is the Go source template use to generate the contract binding -// based on. +// tmplSourceGo is the Go source template that the generated Go contract binding +// is based on. const tmplSourceGo = ` // Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. @@ -87,55 +90,80 @@ package {{.Package}} import ( "math/big" "strings" - - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" + "errors" + + 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 ( + _ = errors.New _ = big.NewInt _ = strings.NewReader _ = ethereum.NotFound - _ = abi.U256 _ = bind.Bind _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription ) +{{$structs := .Structs}} +{{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 $contract := .Contracts}} - {{$structs := $contract.Structs}} + // {{.Type}}MetaData contains all meta data concerning the {{.Type}} contract. + var {{.Type}}MetaData = &bind.MetaData{ + ABI: "{{.InputABI}}", + {{if $contract.FuncSigs -}} + Sigs: map[string]string{ + {{range $strsig, $binsig := .FuncSigs}}"{{$binsig}}": "{{$strsig}}", + {{end}} + }, + {{end -}} + {{if .InputBin -}} + Bin: "0x{{.InputBin}}", + {{end}} + } // {{.Type}}ABI is the input ABI used to generate the binding from. - const {{.Type}}ABI = "{{.InputABI}}" + // Deprecated: Use {{.Type}}MetaData.ABI instead. + var {{.Type}}ABI = {{.Type}}MetaData.ABI {{if $contract.FuncSigs}} + // Deprecated: Use {{.Type}}MetaData.Sigs instead. // {{.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}} - } + var {{.Type}}FuncSigs = {{.Type}}MetaData.Sigs {{end}} {{if .InputBin}} // {{.Type}}Bin is the compiled bytecode used for deploying new contracts. - var {{.Type}}Bin = "0x{{.InputBin}}" + // Deprecated: Use {{.Type}}MetaData.Bin instead. + var {{.Type}}Bin = {{.Type}}MetaData.Bin // 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 $structs}}{{end}}) (common.Address, *types.Transaction, *{{.Type}}, error) { - parsed, err := abi.JSON(strings.NewReader({{.Type}}ABI)) + parsed, err := {{.Type}}MetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } {{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) + {{$contract.Type}}Bin = strings.ReplaceAll({{$contract.Type}}Bin, "__${{$pattern}}$__", {{decapitalise $name}}Addr.String()[2:]) {{end}} - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex({{.Type}}Bin), backend {{range .Constructor.Inputs}}, {{.Name}}{{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 } @@ -251,7 +279,7 @@ var ( // 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 (_{{$contract.Type}} *{{$contract.Type}}Raw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + func (_{{$contract.Type}} *{{$contract.Type}}Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { return _{{$contract.Type}}.Contract.{{$contract.Type}}Caller.contract.Call(opts, result, method, params...) } @@ -270,7 +298,7 @@ var ( // 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 (_{{$contract.Type}} *{{$contract.Type}}CallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + func (_{{$contract.Type}} *{{$contract.Type}}CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { return _{{$contract.Type}}.Contract.contract.Call(opts, result, method, params...) } @@ -285,44 +313,43 @@ 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}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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 $structs}} - {{end}} - }){{else}}var ( - {{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{}{ - {{range $i, $_ := .Normalized.Outputs}}ret{{$i}}, - {{end}} - }{{end}}{{end}} - err := _{{$contract.Type}}.contract.Call(opts, out, "{{.Original.Name}}" {{range .Normalized.Inputs}}, {{.Name}}{{end}}) - return {{if .Structured}}*ret,{{else}}{{range $i, $_ := .Normalized.Outputs}}*ret{{$i}},{{end}}{{end}} err + var out []interface{} + err := _{{$contract.Type}}.contract.Call(opts, &out, "{{.Original.Name}}" {{range .Normalized.Inputs}}, {{.Name}}{{end}}) + {{if .Structured}} + outstruct := new(struct{ {{range .Normalized.Outputs}} {{.Name}} {{bindtype .Type $structs}}; {{end}} }) + if err != nil { + return *outstruct, err + } + {{range $i, $t := .Normalized.Outputs}} + outstruct.{{.Name}} = *abi.ConvertType(out[{{$i}}], new({{bindtype .Type $structs}})).(*{{bindtype .Type $structs}}){{end}} + + return *outstruct, err + {{else}} + if err != nil { + return {{range $i, $_ := .Normalized.Outputs}}*new({{bindtype .Type $structs}}), {{end}} err + } + {{range $i, $t := .Normalized.Outputs}} + out{{$i}} := *abi.ConvertType(out[{{$i}}], new({{bindtype .Type $structs}})).(*{{bindtype .Type $structs}}){{end}} + + return {{range $i, $t := .Normalized.Outputs}}out{{$i}}, {{end}} err + {{end}} } // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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}}) } @@ -331,26 +358,72 @@ var ( {{range .Transacts}} // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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}}. // - // Solidity: {{formatmethod .Original $structs}} + // Solidity: {{.Original.String}} 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}} + {{if .Fallback}} + // Fallback is a paid mutator transaction binding the contract fallback function. + // + // Solidity: {{.Fallback.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _{{$contract.Type}}.contract.RawTransact(opts, calldata) + } + + // Fallback is a paid mutator transaction binding the contract fallback function. + // + // Solidity: {{.Fallback.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}Session) Fallback(calldata []byte) (*types.Transaction, error) { + return _{{$contract.Type}}.Contract.Fallback(&_{{$contract.Type}}.TransactOpts, calldata) + } + + // Fallback is a paid mutator transaction binding the contract fallback function. + // + // Solidity: {{.Fallback.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _{{$contract.Type}}.Contract.Fallback(&_{{$contract.Type}}.TransactOpts, calldata) + } + {{end}} + + {{if .Receive}} + // Receive is a paid mutator transaction binding the contract receive function. + // + // Solidity: {{.Receive.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _{{$contract.Type}}.contract.RawTransact(opts, nil) // calldata is disallowed for receive function + } + + // Receive is a paid mutator transaction binding the contract receive function. + // + // Solidity: {{.Receive.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}Session) Receive() (*types.Transaction, error) { + return _{{$contract.Type}}.Contract.Receive(&_{{$contract.Type}}.TransactOpts) + } + + // Receive is a paid mutator transaction binding the contract receive function. + // + // Solidity: {{.Receive.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}TransactorSession) Receive() (*types.Transaction, error) { + return _{{$contract.Type}}.Contract.Receive(&_{{$contract.Type}}.TransactOpts) + } + {{end}} + {{range .Events}} // {{$contract.Type}}{{.Normalized.Name}}Iterator is returned from Filter{{.Normalized.Name}} and is used to iterate over the raw logs and unpacked data for {{.Normalized.Name}} events raised by the {{$contract.Type}} contract. type {{$contract.Type}}{{.Normalized.Name}}Iterator struct { @@ -424,7 +497,7 @@ var ( // Filter{{.Normalized.Name}} is a free log retrieval operation binding the contract event 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{formatevent .Original $structs}} + // Solidity: {{.Original.String}} 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{} @@ -441,7 +514,7 @@ var ( // Watch{{.Normalized.Name}} is a free log subscription operation binding the contract event 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{formatevent .Original $structs}} + // 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 $structs}}{{end}}{{end}}) (event.Subscription, error) { {{range .Normalized.Inputs}} {{if .Indexed}}var {{.Name}}Rule []interface{} @@ -489,6 +562,7 @@ var ( if err := _{{$contract.Type}}.contract.UnpackLog(event, "{{.Original.Name}}", log); err != nil { return nil, err } + event.Raw = log return event, nil } @@ -496,8 +570,8 @@ var ( {{end}} ` -// tmplSourceJava is the Java source template use to generate the contract binding -// based on. +// tmplSourceJava is the Java source template that the generated Java contract binding +// is based on. const tmplSourceJava = ` // This file is an automatically generated Java binding. Do not modify as any // change will likely be lost upon the next re-generation! @@ -507,8 +581,8 @@ package {{.Package}}; import org.ethereum.geth.*; import java.util.*; +{{$structs := .Structs}} {{range $contract := .Contracts}} -{{$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}}"; @@ -577,7 +651,7 @@ import java.util.*; // {{.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 { + public {{if gt (len .Normalized.Outputs) 1}}{{capitalise .Normalized.Name}}Results{{else if eq (len .Normalized.Outputs) 0}}void{{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}} @@ -611,6 +685,24 @@ import java.util.*; return this.Contract.transact(opts, "{{.Original.Name}}" , args); } {{end}} + + {{if .Fallback}} + // Fallback is a paid mutator transaction binding the contract fallback function. + // + // Solidity: {{.Fallback.Original.String}} + public Transaction Fallback(TransactOpts opts, byte[] calldata) throws Exception { + return this.Contract.rawTransact(opts, calldata); + } + {{end}} + + {{if .Receive}} + // Receive is a paid mutator transaction binding the contract receive function. + // + // Solidity: {{.Receive.Original.String}} + public Transaction Receive(TransactOpts opts) throws Exception { + return this.Contract.rawTransact(opts, null); + } + {{end}} } {{end}} ` diff --git a/accounts/abi/bind/topics.go b/accounts/abi/bind/topics.go deleted file mode 100644 index 97d87448..00000000 --- a/accounts/abi/bind/topics.go +++ /dev/null @@ -1,241 +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 bind - -import ( - "encoding/binary" - "errors" - "fmt" - "math/big" - "reflect" - - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -// makeTopics converts a filter query argument list into a filter topic set. -func makeTopics(query ...[]interface{}) ([][]common.Hash, error) { - topics := make([][]common.Hash, len(query)) - for i, filter := range query { - for _, rule := range filter { - var topic common.Hash - - // Try to generate the topic based on simple types - switch rule := rule.(type) { - case common.Hash: - copy(topic[:], rule[:]) - case common.Address: - copy(topic[common.HashLength-common.AddressLength:], rule[:]) - case *big.Int: - blob := rule.Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case bool: - if rule { - topic[common.HashLength-1] = 1 - } - case int8: - blob := big.NewInt(int64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case int16: - blob := big.NewInt(int64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case int32: - blob := big.NewInt(int64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case int64: - blob := big.NewInt(rule).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case uint8: - blob := new(big.Int).SetUint64(uint64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case uint16: - blob := new(big.Int).SetUint64(uint64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case uint32: - blob := new(big.Int).SetUint64(uint64(rule)).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case uint64: - blob := new(big.Int).SetUint64(rule).Bytes() - copy(topic[common.HashLength-len(blob):], blob) - case string: - hash := crypto.Keccak256Hash([]byte(rule)) - copy(topic[:], hash[:]) - case []byte: - hash := crypto.Keccak256Hash(rule) - copy(topic[:], hash[:]) - - default: - // Attempt to generate the topic from funky types - 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[:val.Len()]), val) - - default: - return nil, fmt.Errorf("unsupported indexed type: %T", rule) - } - } - topics[i] = append(topics[i], topic) - } - } - return topics, nil -} - -// Big batch of reflect types for topic reconstruction. -var ( - reflectHash = reflect.TypeOf(common.Hash{}) - reflectAddress = reflect.TypeOf(common.Address{}) - reflectBigInt = reflect.TypeOf(new(big.Int)) -) - -// parseTopics converts the indexed topic fields into actual log field values. -// -// Note, dynamic types cannot be reconstructed since they get mapped to Keccak256 -// hashes as the topic value! -func parseTopics(out 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") - } - field := reflect.ValueOf(out).Elem().FieldByName(capitalise(arg.Name)) - - // Try to parse the topic back into the fields based on primitive types - switch field.Kind() { - case reflect.Bool: - if topics[0][common.HashLength-1] == 1 { - field.Set(reflect.ValueOf(true)) - } - case reflect.Int8: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(int8(num.Int64()))) - - case reflect.Int16: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(int16(num.Int64()))) - - case reflect.Int32: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(int32(num.Int64()))) - - case reflect.Int64: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(num.Int64())) - - case reflect.Uint8: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(uint8(num.Uint64()))) - - case reflect.Uint16: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(uint16(num.Uint64()))) - - case reflect.Uint32: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(uint32(num.Uint64()))) - - case reflect.Uint64: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(num.Uint64())) - - default: - // Ran out of plain primitive types, try custom types - switch field.Type() { - case reflectHash: // Also covers all dynamic types - field.Set(reflect.ValueOf(topics[0])) - - case reflectAddress: - var addr common.Address - copy(addr[:], topics[0][common.HashLength-common.AddressLength:]) - field.Set(reflect.ValueOf(addr)) - - case reflectBigInt: - num := new(big.Int).SetBytes(topics[0][:]) - field.Set(reflect.ValueOf(num)) - - 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][:arg.Type.Size])) - - default: - return fmt.Errorf("unsupported indexed type: %v", arg.Type) - } - } - } - topics = topics[1:] - } - 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 deleted file mode 100644 index efc733d8..00000000 --- a/accounts/abi/bind/topics_test.go +++ /dev/null @@ -1,103 +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 bind - -import ( - "reflect" - "testing" - - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/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.go b/accounts/abi/bind/util.go index ac0ba822..b931fbb0 100644 --- a/accounts/abi/bind/util.go +++ b/accounts/abi/bind/util.go @@ -18,12 +18,13 @@ package bind import ( "context" - "fmt" + "errors" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" ) // WaitMined waits for tx to be mined on the blockchain. @@ -35,14 +36,16 @@ func WaitMined(ctx context.Context, b DeployBackend, tx *types.Transaction) (*ty logger := log.New("hash", tx.Hash()) for { receipt, err := b.TransactionReceipt(ctx, tx.Hash()) - if receipt != nil { + if err == nil { return receipt, nil } - if err != nil { - logger.Trace("Receipt retrieval failed", "err", err) - } else { + + if errors.Is(err, ethereum.NotFound) { logger.Trace("Transaction not yet mined") + } else { + logger.Trace("Receipt retrieval failed", "err", err) } + // Wait for the next round. select { case <-ctx.Done(): @@ -56,14 +59,14 @@ func WaitMined(ctx context.Context, b DeployBackend, tx *types.Transaction) (*ty // contract address when it is mined. It stops waiting when ctx is canceled. func WaitDeployed(ctx context.Context, b DeployBackend, tx *types.Transaction) (common.Address, error) { if tx.To() != nil { - return common.Address{}, fmt.Errorf("tx is not contract creation") + return common.Address{}, errors.New("tx is not contract creation") } receipt, err := WaitMined(ctx, b, tx) if err != nil { return common.Address{}, err } if receipt.ContractAddress == (common.Address{}) { - return common.Address{}, fmt.Errorf("zero address") + return common.Address{}, errors.New("zero address") } // Check that code has indeed been deployed at the address. // This matters on pre-Homestead chains: OOG in the constructor diff --git a/accounts/abi/bind/util_test.go b/accounts/abi/bind/util_test.go index eab08e60..75fbc91c 100644 --- a/accounts/abi/bind/util_test.go +++ b/accounts/abi/bind/util_test.go @@ -18,16 +18,17 @@ package bind_test import ( "context" + "errors" "math/big" "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "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" ) var testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") @@ -55,14 +56,17 @@ func TestWaitDeployed(t *testing.T) { for name, test := range waitDeployedTests { backend := backends.NewSimulatedBackend( core.GenesisAlloc{ - crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000)}, + crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)}, }, 10000000, ) defer backend.Close() - // Create the transaction. - tx := types.NewContractCreation(0, big.NewInt(0), test.gas, big.NewInt(1), common.FromHex(test.code)) + // Create the transaction + head, _ := backend.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + tx := types.NewContractCreation(0, big.NewInt(0), test.gas, gasPrice, common.FromHex(test.code)) tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) // Wait for it to get mined in the background. @@ -84,7 +88,7 @@ func TestWaitDeployed(t *testing.T) { select { case <-mined: if err != test.wantErr { - t.Errorf("test %q: error mismatch: got %q, want %q", name, err, test.wantErr) + t.Errorf("test %q: error mismatch: want %q, got %q", name, test.wantErr, err) } if address != test.wantAddress { t.Errorf("test %q: unexpected contract address %s", name, address.Hex()) @@ -94,3 +98,43 @@ func TestWaitDeployed(t *testing.T) { } } } + +func TestWaitDeployedCornerCases(t *testing.T) { + backend := backends.NewSimulatedBackend( + core.GenesisAlloc{ + crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)}, + }, + 10000000, + ) + defer backend.Close() + + head, _ := backend.HeaderByNumber(context.Background(), nil) // Should be child's, good enough + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + + // Create a transaction to an account. + code := "6060604052600a8060106000396000f360606040526008565b00" + tx := types.NewTransaction(0, common.HexToAddress("0x01"), big.NewInt(0), 3000000, gasPrice, common.FromHex(code)) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + backend.SendTransaction(ctx, tx) + backend.Commit() + notContentCreation := errors.New("tx is not contract creation") + if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != notContentCreation.Error() { + t.Errorf("error missmatch: want %q, got %q, ", notContentCreation, err) + } + + // Create a transaction that is not mined. + tx = types.NewContractCreation(1, big.NewInt(0), 3000000, gasPrice, common.FromHex(code)) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) + + go func() { + contextCanceled := errors.New("context canceled") + if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != contextCanceled.Error() { + t.Errorf("error missmatch: want %q, got %q, ", contextCanceled, err) + } + }() + + backend.SendTransaction(ctx, tx) + cancel() +} diff --git a/accounts/abi/error.go b/accounts/abi/error.go index 9d8674ad..f53c996d 100644 --- a/accounts/abi/error.go +++ b/accounts/abi/error.go @@ -17,68 +17,77 @@ package abi import ( + "bytes" "errors" "fmt" - "reflect" -) + "strings" -var ( - errBadBool = errors.New("abi: improperly encoded boolean value") + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) -// formatSliceString formats the reflection kind with the given slice size -// and returns a formatted string representation. -func formatSliceString(kind reflect.Kind, sliceSize int) string { - if sliceSize == -1 { - return fmt.Sprintf("[]%v", kind) - } - return fmt.Sprintf("[%d]%v", sliceSize, kind) -} +type Error struct { + Name string + Inputs Arguments + str string -// sliceTypeCheck checks that the given slice can by assigned to the reflection -// type in t. -func sliceTypeCheck(t Type, val reflect.Value) error { - if val.Kind() != reflect.Slice && val.Kind() != reflect.Array { - return typeErr(formatSliceString(t.Kind, t.Size), val.Type()) - } + // Sig contains the string signature according to the ABI spec. + // e.g. error foo(uint32 a, int b) = "foo(uint32,int256)" + // Please note that "int" is substitute for its canonical representation "int256" + Sig string - if t.T == ArrayTy && val.Len() != t.Size { - return typeErr(formatSliceString(t.Elem.Kind, t.Size), formatSliceString(val.Type().Elem().Kind(), val.Len())) - } + // ID returns the canonical representation of the error's signature used by the + // abi definition to identify event names and types. + ID common.Hash +} - if t.Elem.T == SliceTy { - if val.Len() > 0 { - return sliceTypeCheck(*t.Elem, val.Index(0)) +func NewError(name string, inputs Arguments) Error { + // sanitize inputs to remove inputs without names + // and precompute string and sig representation. + names := make([]string, len(inputs)) + types := make([]string, len(inputs)) + for i, input := range inputs { + if input.Name == "" { + inputs[i] = Argument{ + Name: fmt.Sprintf("arg%d", i), + Indexed: input.Indexed, + Type: input.Type, + } + } else { + inputs[i] = input } - } else if t.Elem.T == ArrayTy { - return sliceTypeCheck(*t.Elem, val.Index(0)) - } - - if elemKind := val.Type().Elem().Kind(); elemKind != t.Elem.Kind { - return typeErr(formatSliceString(t.Elem.Kind, t.Size), val.Type()) + // string representation + names[i] = fmt.Sprintf("%v %v", input.Type, inputs[i].Name) + if input.Indexed { + names[i] = fmt.Sprintf("%v indexed %v", input.Type, inputs[i].Name) + } + // sig representation + types[i] = input.Type.String() } - return nil -} -// typeCheck checks that the given reflection value can be assigned to the reflection -// type in t. -func typeCheck(t Type, value reflect.Value) error { - if t.T == SliceTy || t.T == ArrayTy { - return sliceTypeCheck(t, value) - } + str := fmt.Sprintf("error %v(%v)", name, strings.Join(names, ", ")) + sig := fmt.Sprintf("%v(%v)", name, strings.Join(types, ",")) + id := common.BytesToHash(crypto.Keccak256([]byte(sig))) - // Check base type validity. Element types will be checked later on. - if t.Kind != value.Kind() { - return typeErr(t.Kind, value.Kind()) - } else if t.T == FixedBytesTy && t.Size != value.Len() { - return typeErr(t.Type, value.Type()) - } else { - return nil + return Error{ + Name: name, + Inputs: inputs, + str: str, + Sig: sig, + ID: id, } +} +func (e *Error) String() string { + return e.str } -// typeErr returns a formatted type casting error. -func typeErr(expected, got interface{}) error { - return fmt.Errorf("abi: cannot use %v as type %v as argument", got, expected) +func (e *Error) Unpack(data []byte) (interface{}, error) { + if len(data) < 4 { + return "", errors.New("invalid data for unpacking") + } + if !bytes.Equal(data[:4], e.ID[:4]) { + return "", errors.New("invalid data for unpacking") + } + return e.Inputs.Unpack(data[4:]) } diff --git a/accounts/abi/error_handling.go b/accounts/abi/error_handling.go new file mode 100644 index 00000000..7add7072 --- /dev/null +++ b/accounts/abi/error_handling.go @@ -0,0 +1,81 @@ +// 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 abi + +import ( + "errors" + "fmt" + "reflect" +) + +var ( + errBadBool = errors.New("abi: improperly encoded boolean value") +) + +// formatSliceString formats the reflection kind with the given slice size +// and returns a formatted string representation. +func formatSliceString(kind reflect.Kind, sliceSize int) string { + if sliceSize == -1 { + return fmt.Sprintf("[]%v", kind) + } + return fmt.Sprintf("[%d]%v", sliceSize, kind) +} + +// sliceTypeCheck checks that the given slice can by assigned to the reflection +// type in t. +func sliceTypeCheck(t Type, val reflect.Value) error { + if val.Kind() != reflect.Slice && val.Kind() != reflect.Array { + return typeErr(formatSliceString(t.GetType().Kind(), t.Size), val.Type()) + } + + if t.T == ArrayTy && val.Len() != t.Size { + return typeErr(formatSliceString(t.Elem.GetType().Kind(), t.Size), formatSliceString(val.Type().Elem().Kind(), val.Len())) + } + + if t.Elem.T == SliceTy || t.Elem.T == ArrayTy { + if val.Len() > 0 { + return sliceTypeCheck(*t.Elem, val.Index(0)) + } + } + + if val.Type().Elem().Kind() != t.Elem.GetType().Kind() { + return typeErr(formatSliceString(t.Elem.GetType().Kind(), t.Size), val.Type()) + } + return nil +} + +// typeCheck checks that the given reflection value can be assigned to the reflection +// type in t. +func typeCheck(t Type, value reflect.Value) error { + if t.T == SliceTy || t.T == ArrayTy { + return sliceTypeCheck(t, value) + } + + // Check base type validity. Element types will be checked later on. + if t.GetType().Kind() != value.Kind() { + return typeErr(t.GetType().Kind(), value.Kind()) + } else if t.T == FixedBytesTy && t.Size != value.Len() { + return typeErr(t.GetType(), value.Type()) + } else { + return nil + } +} + +// typeErr returns a formatted type casting error. +func typeErr(expected, got interface{}) error { + return fmt.Errorf("abi: cannot use %v as type %v as argument", got, expected) +} diff --git a/accounts/abi/event.go b/accounts/abi/event.go index a34fcfa2..f9457b86 100644 --- a/accounts/abi/event.go +++ b/accounts/abi/event.go @@ -20,8 +20,8 @@ import ( "fmt" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) // Event is an event potentially triggered by the EVM's LOG mechanism. The Event @@ -29,49 +29,75 @@ import ( // don't get the signature canonical representation as the first LOG topic. type Event struct { // 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. + // the raw name and a suffix will be added in the case of event overloading. // // e.g. - // There are two events have same name: + // These are two events that have the same name: // * foo(int,int) // * foo(uint,uint) - // The event name of the first one wll be resolved as foo while the second one + // The event 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 event name parsed from ABI. RawName string Anonymous bool Inputs Arguments + str string + + // Sig contains the string signature according to the ABI spec. + // e.g. event foo(uint32 a, int b) = "foo(uint32,int256)" + // Please note that "int" is substitute for its canonical representation "int256" + Sig string + + // ID returns the canonical representation of the event's signature used by the + // abi definition to identify event names and types. + ID common.Hash } -func (e Event) String() string { - inputs := make([]string, len(e.Inputs)) - for i, input := range e.Inputs { - inputs[i] = fmt.Sprintf("%v %v", input.Type, input.Name) +// NewEvent creates a new Event. +// It sanitizes the input arguments to remove unnamed arguments. +// It also precomputes the id, signature and string representation +// of the event. +func NewEvent(name, rawName string, anonymous bool, inputs Arguments) Event { + // sanitize inputs to remove inputs without names + // and precompute string and sig representation. + names := make([]string, len(inputs)) + types := make([]string, len(inputs)) + for i, input := range inputs { + if input.Name == "" { + inputs[i] = Argument{ + Name: fmt.Sprintf("arg%d", i), + Indexed: input.Indexed, + Type: input.Type, + } + } else { + inputs[i] = input + } + // string representation + names[i] = fmt.Sprintf("%v %v", input.Type, inputs[i].Name) if input.Indexed { - inputs[i] = fmt.Sprintf("%v indexed %v", input.Type, input.Name) + names[i] = fmt.Sprintf("%v indexed %v", input.Type, inputs[i].Name) } + // sig representation + types[i] = input.Type.String() } - return fmt.Sprintf("event %v(%v)", e.RawName, strings.Join(inputs, ", ")) -} -// 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)) - for i, input := range e.Inputs { - types[i] = input.Type.String() + str := fmt.Sprintf("event %v(%v)", rawName, strings.Join(names, ", ")) + sig := fmt.Sprintf("%v(%v)", rawName, strings.Join(types, ",")) + id := common.BytesToHash(crypto.Keccak256([]byte(sig))) + + return Event{ + Name: name, + RawName: rawName, + Anonymous: anonymous, + Inputs: inputs, + str: str, + Sig: sig, + ID: id, } - 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()))) +func (e Event) String() string { + return e.str } diff --git a/accounts/abi/event_test.go b/accounts/abi/event_test.go index 2faa7d91..8f734194 100644 --- a/accounts/abi/event_test.go +++ b/accounts/abi/event_test.go @@ -25,8 +25,8 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -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) } } } @@ -147,10 +147,6 @@ func TestEventString(t *testing.T) { // TestEventMultiValueWithArrayUnpack verifies that array fields will be counted after parsing array. func TestEventMultiValueWithArrayUnpack(t *testing.T) { definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": false, "name":"value1", "type":"uint8[2]"},{"indexed": false, "name":"value2", "type":"uint8"}]}]` - type testStruct struct { - Value1 [2]uint8 - Value2 uint8 - } abi, err := JSON(strings.NewReader(definition)) require.NoError(t, err) var b bytes.Buffer @@ -158,14 +154,13 @@ func TestEventMultiValueWithArrayUnpack(t *testing.T) { for ; i <= 3; i++ { b.Write(packNum(reflect.ValueOf(i))) } - var rst testStruct - require.NoError(t, abi.Unpack(&rst, "test", b.Bytes())) - require.Equal(t, [2]uint8{1, 2}, rst.Value1) - require.Equal(t, uint8(3), rst.Value2) + unpacked, err := abi.Unpack("test", b.Bytes()) + require.NoError(t, err) + require.Equal(t, [2]uint8{1, 2}, unpacked[0]) + require.Equal(t, uint8(3), unpacked[1]) } func TestEventTupleUnpack(t *testing.T) { - type EventTransfer struct { Value *big.Int } @@ -173,7 +168,7 @@ func TestEventTupleUnpack(t *testing.T) { type EventTransferWithTag struct { // this is valid because `value` is not exportable, // so value is only unmarshalled into `Value1`. - value *big.Int + value *big.Int //lint:ignore U1000 unused field is part of test Value1 *big.Int `abi:"value"` } @@ -312,14 +307,14 @@ func TestEventTupleUnpack(t *testing.T) { &[]interface{}{common.Address{}, new(big.Int)}, &[]interface{}{}, jsonEventPledge, - "abi: insufficient number of elements in the list/array for unpack, want 3, got 2", + "abi: insufficient number of arguments for unpack, want 3, got 2", "Can not unpack Pledge event into too short slice", }, { pledgeData1, new(map[string]interface{}), &[]interface{}{}, jsonEventPledge, - "abi: cannot unmarshal tuple into map[string]interface {}", + "abi:[2] cannot unmarshal tuple in to map[string]interface {}", "Can not unpack Pledge event into map", }, { mixedCaseData1, @@ -351,48 +346,14 @@ func unpackTestEventData(dest interface{}, hexData string, jsonEvent []byte, ass var e Event assert.NoError(json.Unmarshal(jsonEvent, &e), "Should be able to unmarshal event ABI") a := ABI{Events: map[string]Event{"e": e}} - return a.Unpack(dest, "e", data) -} - -/* -Taken from -https://github.com/cryptoecc/ETH-ECC/pull/15568 -*/ - -type testResult struct { - Values [2]*big.Int - Value1 *big.Int - Value2 *big.Int -} - -type testCase struct { - definition string - want testResult -} - -func (tc testCase) encoded(intType, arrayType Type) []byte { - var b bytes.Buffer - if tc.want.Value1 != nil { - val, _ := intType.pack(reflect.ValueOf(tc.want.Value1)) - b.Write(val) - } - - if !reflect.DeepEqual(tc.want.Values, [2]*big.Int{nil, nil}) { - val, _ := arrayType.pack(reflect.ValueOf(tc.want.Values)) - b.Write(val) - } - if tc.want.Value2 != nil { - val, _ := intType.pack(reflect.ValueOf(tc.want.Value2)) - b.Write(val) - } - return b.Bytes() + return a.UnpackIntoInterface(dest, "e", data) } // TestEventUnpackIndexed verifies that indexed field will be skipped by event decoder. func TestEventUnpackIndexed(t *testing.T) { definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": true, "name":"value1", "type":"uint8"},{"indexed": false, "name":"value2", "type":"uint8"}]}]` type testStruct struct { - Value1 uint8 + Value1 uint8 // indexed Value2 uint8 } abi, err := JSON(strings.NewReader(definition)) @@ -400,16 +361,16 @@ func TestEventUnpackIndexed(t *testing.T) { var b bytes.Buffer b.Write(packNum(reflect.ValueOf(uint8(8)))) var rst testStruct - require.NoError(t, abi.Unpack(&rst, "test", b.Bytes())) + require.NoError(t, abi.UnpackIntoInterface(&rst, "test", b.Bytes())) require.Equal(t, uint8(0), rst.Value1) require.Equal(t, uint8(8), rst.Value2) } -// TestEventIndexedWithArrayUnpack verifies that decoder will not overlow when static array is indexed input. +// TestEventIndexedWithArrayUnpack verifies that decoder will not overflow when static array is indexed input. func TestEventIndexedWithArrayUnpack(t *testing.T) { definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": true, "name":"value1", "type":"uint8[2]"},{"indexed": false, "name":"value2", "type":"string"}]}]` type testStruct struct { - Value1 [2]uint8 + Value1 [2]uint8 // indexed Value2 string } abi, err := JSON(strings.NewReader(definition)) @@ -422,7 +383,7 @@ func TestEventIndexedWithArrayUnpack(t *testing.T) { b.Write(common.RightPadBytes([]byte(stringOut), 32)) var rst testStruct - require.NoError(t, abi.Unpack(&rst, "test", b.Bytes())) + require.NoError(t, abi.UnpackIntoInterface(&rst, "test", b.Bytes())) require.Equal(t, [2]uint8{0, 0}, rst.Value1) require.Equal(t, stringOut, rst.Value2) } diff --git a/accounts/abi/method.go b/accounts/abi/method.go index 256d3084..f69e3ee9 100644 --- a/accounts/abi/method.go +++ b/accounts/abi/method.go @@ -20,14 +20,32 @@ import ( "fmt" "strings" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/crypto" +) + +// FunctionType represents different types of functions a contract might have. +type FunctionType int + +const ( + // Constructor represents the constructor of the contract. + // The constructor function is called while deploying a contract. + Constructor FunctionType = iota + // Fallback represents the fallback function. + // This function is executed if no other function matches the given function + // signature and no receive function is specified. + Fallback + // Receive represents the receive function. + // This function is executed on plain Ether transfers. + Receive + // Function represents a normal function. + Function ) // Method represents a callable given a `Name` and whether the method is a constant. // 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 therefore requires no Tx to be send to the +// from the storage and therefore requires no Tx to be sent to the // network. A method such as `Transact` does require a Tx and thus will // be flagged `false`. // Input specifies the required input parameters for this gives method. @@ -36,55 +54,114 @@ type Method struct { // 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: + // These are two functions that have the 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 + Name string + RawName string // RawName is the raw method name parsed from ABI + + // Type indicates whether the method is a + // special fallback introduced in solidity v0.6.0 + Type FunctionType + + // StateMutability indicates the mutability state of method, + // the default value is nonpayable. It can be empty if the abi + // is generated by legacy compiler. + StateMutability string + + // Legacy indicators generated by compiler before v0.6.0 + Constant bool + Payable bool + Inputs Arguments Outputs Arguments + str string + // Sig returns the methods string signature according to the ABI spec. + // e.g. function foo(uint32 a, int b) = "foo(uint32,int256)" + // Please note that "int" is substitute for its canonical representation "int256" + Sig string + // ID returns the canonical representation of the method's signature used by the + // abi definition to identify method names and types. + ID []byte } -// Sig returns the methods string signature according to the ABI spec. -// -// Example -// -// 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 { - types := make([]string, len(method.Inputs)) - for i, input := range method.Inputs { +// NewMethod creates a new Method. +// A method should always be created using NewMethod. +// It also precomputes the sig representation and the string representation +// of the method. +func NewMethod(name string, rawName string, funType FunctionType, mutability string, isConst, isPayable bool, inputs Arguments, outputs Arguments) Method { + var ( + types = make([]string, len(inputs)) + inputNames = make([]string, len(inputs)) + outputNames = make([]string, len(outputs)) + ) + for i, input := range inputs { + inputNames[i] = fmt.Sprintf("%v %v", input.Type, input.Name) types[i] = input.Type.String() } - return fmt.Sprintf("%v(%v)", method.RawName, strings.Join(types, ",")) -} - -func (method Method) String() string { - inputs := make([]string, len(method.Inputs)) - for i, input := range method.Inputs { - inputs[i] = fmt.Sprintf("%v %v", input.Type, input.Name) - } - outputs := make([]string, len(method.Outputs)) - for i, output := range method.Outputs { - outputs[i] = output.Type.String() + for i, output := range outputs { + outputNames[i] = output.Type.String() if len(output.Name) > 0 { - outputs[i] += fmt.Sprintf(" %v", output.Name) + outputNames[i] += fmt.Sprintf(" %v", output.Name) } } - constant := "" - if method.Const { - constant = "constant " + // calculate the signature and method id. Note only function + // has meaningful signature and id. + var ( + sig string + id []byte + ) + if funType == Function { + sig = fmt.Sprintf("%v(%v)", rawName, strings.Join(types, ",")) + id = crypto.Keccak256([]byte(sig))[:4] + } + // Extract meaningful state mutability of solidity method. + // If it's default value, never print it. + state := mutability + if state == "nonpayable" { + state = "" + } + if state != "" { + state = state + " " + } + identity := fmt.Sprintf("function %v", rawName) + if funType == Fallback { + identity = "fallback" + } else if funType == Receive { + identity = "receive" + } else if funType == Constructor { + identity = "constructor" + } + str := fmt.Sprintf("%v(%v) %sreturns(%v)", identity, strings.Join(inputNames, ", "), state, strings.Join(outputNames, ", ")) + + return Method{ + Name: name, + RawName: rawName, + Type: funType, + StateMutability: mutability, + Constant: isConst, + Payable: isPayable, + Inputs: inputs, + Outputs: outputs, + str: str, + Sig: sig, + ID: id, } - return fmt.Sprintf("function %v(%v) %sreturns(%v)", method.RawName, strings.Join(inputs, ", "), constant, strings.Join(outputs, ", ")) } -// 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] +func (method Method) String() string { + return method.str +} + +// IsConstant returns the indicator whether the method is read-only. +func (method Method) IsConstant() bool { + return method.StateMutability == "view" || method.StateMutability == "pure" || method.Constant +} + +// IsPayable returns the indicator whether the method can process +// plain ether transfers. +func (method Method) IsPayable() bool { + return method.StateMutability == "payable" || method.Payable } diff --git a/accounts/abi/method_test.go b/accounts/abi/method_test.go index 3ffdb702..395a5289 100644 --- a/accounts/abi/method_test.go +++ b/accounts/abi/method_test.go @@ -23,13 +23,15 @@ 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", "stateMutability": "view"}, + {"type": "function", "name": "send", "inputs": [{ "name": "amount", "type": "uint256" }]}, + {"type": "function", "name": "transfer", "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"} + {"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"}, + {"stateMutability":"nonpayable","type":"fallback"}, + {"stateMutability":"payable","type":"receive"} ]` func TestMethodString(t *testing.T) { @@ -39,7 +41,7 @@ func TestMethodString(t *testing.T) { }{ { method: "balance", - expectation: "function balance() constant returns()", + expectation: "function balance() view returns()", }, { method: "send", @@ -65,6 +67,14 @@ func TestMethodString(t *testing.T) { method: "complexTuple", expectation: "function complexTuple((uint256,uint256)[5][] a) returns()", }, + { + method: "fallback", + expectation: "fallback() returns()", + }, + { + method: "receive", + expectation: "receive() payable returns()", + }, } abi, err := JSON(strings.NewReader(methoddata)) @@ -73,7 +83,14 @@ func TestMethodString(t *testing.T) { } for _, test := range table { - got := abi.Methods[test.method].String() + var got string + if test.method == "fallback" { + got = abi.Fallback.String() + } else if test.method == "receive" { + got = abi.Receive.String() + } else { + got = abi.Methods[test.method].String() + } if got != test.expectation { t.Errorf("expected string to be %s, got %s", test.expectation, got) } @@ -120,7 +137,7 @@ func TestMethodSig(t *testing.T) { } for _, test := range cases { - got := abi.Methods[test.method].Sig() + 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/numbers.go b/accounts/abi/numbers.go deleted file mode 100644 index 544b06e9..00000000 --- a/accounts/abi/numbers.go +++ /dev/null @@ -1,44 +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 abi - -import ( - "math/big" - "reflect" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" -) - -var ( - bigT = reflect.TypeOf(&big.Int{}) - derefbigT = reflect.TypeOf(big.Int{}) - uint8T = reflect.TypeOf(uint8(0)) - uint16T = reflect.TypeOf(uint16(0)) - uint32T = reflect.TypeOf(uint32(0)) - uint64T = reflect.TypeOf(uint64(0)) - int8T = reflect.TypeOf(int8(0)) - int16T = reflect.TypeOf(int16(0)) - int32T = reflect.TypeOf(int32(0)) - int64T = reflect.TypeOf(int64(0)) - addressT = reflect.TypeOf(common.Address{}) -) - -// U256 converts a big Int into a 256bit EVM number. -func U256(n *big.Int) []byte { - return math.PaddedBigBytes(math.U256(n), 32) -} diff --git a/accounts/abi/pack.go b/accounts/abi/pack.go index 82ddf1c4..0cd91cb4 100644 --- a/accounts/abi/pack.go +++ b/accounts/abi/pack.go @@ -17,15 +17,17 @@ package abi import ( + "errors" + "fmt" "math/big" "reflect" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" ) // packBytesSlice packs the given bytes as [L, V] as the canonical representation -// bytes slice +// bytes slice. func packBytesSlice(bytes []byte, l int) []byte { len := packNum(reflect.ValueOf(l)) return append(len, common.RightPadBytes(bytes, (l+31)/32*32)...) @@ -33,49 +35,51 @@ func packBytesSlice(bytes []byte, l int) []byte { // packElement packs the given reflect value according to the abi specification in // t. -func packElement(t Type, reflectValue reflect.Value) []byte { +func packElement(t Type, reflectValue reflect.Value) ([]byte, error) { switch t.T { case IntTy, UintTy: - return packNum(reflectValue) + return packNum(reflectValue), nil case StringTy: - return packBytesSlice([]byte(reflectValue.String()), reflectValue.Len()) + return packBytesSlice([]byte(reflectValue.String()), reflectValue.Len()), nil case AddressTy: if reflectValue.Kind() == reflect.Array { reflectValue = mustArrayToByteSlice(reflectValue) } - return common.LeftPadBytes(reflectValue.Bytes(), 32) + return common.LeftPadBytes(reflectValue.Bytes(), 32), nil case BoolTy: if reflectValue.Bool() { - return math.PaddedBigBytes(common.Big1, 32) + return math.PaddedBigBytes(common.Big1, 32), nil } - return math.PaddedBigBytes(common.Big0, 32) + return math.PaddedBigBytes(common.Big0, 32), nil case BytesTy: if reflectValue.Kind() == reflect.Array { reflectValue = mustArrayToByteSlice(reflectValue) } - return packBytesSlice(reflectValue.Bytes(), reflectValue.Len()) + if reflectValue.Type() != reflect.TypeOf([]byte{}) { + return []byte{}, errors.New("Bytes type is neither slice nor array") + } + return packBytesSlice(reflectValue.Bytes(), reflectValue.Len()), nil case FixedBytesTy, FunctionTy: if reflectValue.Kind() == reflect.Array { reflectValue = mustArrayToByteSlice(reflectValue) } - return common.RightPadBytes(reflectValue.Bytes(), 32) + return common.RightPadBytes(reflectValue.Bytes(), 32), nil default: - panic("abi: fatal error") + return []byte{}, fmt.Errorf("Could not pack element, unknown type: %v", t.T) } } -// packNum packs the given number (using the reflect value) and will cast it to appropriate number representation +// packNum packs the given number (using the reflect value) and will cast it to appropriate number representation. func packNum(value reflect.Value) []byte { switch kind := value.Kind(); kind { case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return U256(new(big.Int).SetUint64(value.Uint())) + return math.U256Bytes(new(big.Int).SetUint64(value.Uint())) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return U256(big.NewInt(value.Int())) + return math.U256Bytes(big.NewInt(value.Int())) case reflect.Ptr: - return U256(value.Interface().(*big.Int)) + return math.U256Bytes(new(big.Int).Set(value.Interface().(*big.Int))) default: panic("abi: fatal error") } - } diff --git a/accounts/abi/pack_test.go b/accounts/abi/pack_test.go index 6919f840..5c7cb1cc 100644 --- a/accounts/abi/pack_test.go +++ b/accounts/abi/pack_test.go @@ -18,623 +18,51 @@ package abi import ( "bytes" + "encoding/hex" + "fmt" "math" "math/big" "reflect" + "strconv" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) +// TestPack tests the general pack/unpack tests in packing_test.go func TestPack(t *testing.T) { - for i, test := range []struct { - typ string - components []ArgumentMarshaling - input interface{} - output []byte - }{ - { - "uint8", - nil, - uint8(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint8[]", - nil, - []uint8{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint16", - nil, - uint16(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint16[]", - nil, - []uint16{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint32", - nil, - uint32(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint32[]", - nil, - []uint32{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint64", - nil, - uint64(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint64[]", - nil, - []uint64{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint256", - nil, - big.NewInt(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "uint256[]", - nil, - []*big.Int{big.NewInt(1), big.NewInt(2)}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int8", - nil, - int8(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int8[]", - nil, - []int8{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int16", - nil, - int16(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int16[]", - nil, - []int16{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int32", - nil, - int32(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int32[]", - nil, - []int32{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int64", - nil, - int64(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int64[]", - nil, - []int64{1, 2}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int256", - nil, - big.NewInt(2), - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "int256[]", - nil, - []*big.Int{big.NewInt(1), big.NewInt(2)}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002"), - }, - { - "bytes1", - nil, - [1]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes2", - nil, - [2]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes3", - nil, - [3]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes4", - nil, - [4]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes5", - nil, - [5]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes6", - nil, - [6]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes7", - nil, - [7]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes8", - nil, - [8]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes9", - nil, - [9]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes10", - nil, - [10]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes11", - nil, - [11]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes12", - nil, - [12]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes13", - nil, - [13]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes14", - nil, - [14]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes15", - nil, - [15]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes16", - nil, - [16]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes17", - nil, - [17]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes18", - nil, - [18]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes19", - nil, - [19]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes20", - nil, - [20]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes21", - nil, - [21]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes22", - nil, - [22]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes23", - nil, - [23]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes24", - nil, - [24]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes25", - nil, - [25]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes26", - nil, - [26]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes27", - nil, - [27]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes28", - nil, - [28]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes29", - nil, - [29]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes30", - nil, - [30]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes31", - nil, - [31]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "bytes32", - nil, - [32]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "uint32[2][3][4]", - nil, - [4][3][2]uint32{{{1, 2}, {3, 4}, {5, 6}}, {{7, 8}, {9, 10}, {11, 12}}, {{13, 14}, {15, 16}, {17, 18}}, {{19, 20}, {21, 22}, {23, 24}}}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000018"), - }, - { - "address[]", - nil, - []common.Address{{1}, {2}}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000200000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000"), - }, - { - "bytes32[]", - nil, - []common.Hash{{1}, {2}}, - common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000"), - }, - { - "function", - nil, - [24]byte{1}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - "string", - nil, - "foobar", - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000006666f6f6261720000000000000000000000000000000000000000000000000000"), - }, - { - "string[]", - nil, - []string{"hello", "foobar"}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002" + // len(array) = 2 - "0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 - "0000000000000000000000000000000000000000000000000000000000000080" + // offset 128 to i = 1 - "0000000000000000000000000000000000000000000000000000000000000005" + // len(str[0]) = 5 - "68656c6c6f000000000000000000000000000000000000000000000000000000" + // str[0] - "0000000000000000000000000000000000000000000000000000000000000006" + // len(str[1]) = 6 - "666f6f6261720000000000000000000000000000000000000000000000000000"), // str[1] - }, - { - "string[2]", - nil, - []string{"hello", "foobar"}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000040" + // offset to i = 0 - "0000000000000000000000000000000000000000000000000000000000000080" + // offset to i = 1 - "0000000000000000000000000000000000000000000000000000000000000005" + // len(str[0]) = 5 - "68656c6c6f000000000000000000000000000000000000000000000000000000" + // str[0] - "0000000000000000000000000000000000000000000000000000000000000006" + // len(str[1]) = 6 - "666f6f6261720000000000000000000000000000000000000000000000000000"), // str[1] - }, - { - "bytes32[][]", - nil, - [][]common.Hash{{{1}, {2}}, {{3}, {4}, {5}}}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002" + // len(array) = 2 - "0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 - "00000000000000000000000000000000000000000000000000000000000000a0" + // offset 160 to i = 1 - "0000000000000000000000000000000000000000000000000000000000000002" + // len(array[0]) = 2 - "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] - "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] - "0000000000000000000000000000000000000000000000000000000000000003" + // len(array[1]) = 3 - "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] - "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] - "0500000000000000000000000000000000000000000000000000000000000000"), // array[1][2] - }, - - { - "bytes32[][2]", - nil, - [][]common.Hash{{{1}, {2}}, {{3}, {4}, {5}}}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 - "00000000000000000000000000000000000000000000000000000000000000a0" + // offset 160 to i = 1 - "0000000000000000000000000000000000000000000000000000000000000002" + // len(array[0]) = 2 - "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] - "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] - "0000000000000000000000000000000000000000000000000000000000000003" + // len(array[1]) = 3 - "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] - "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] - "0500000000000000000000000000000000000000000000000000000000000000"), // array[1][2] - }, - - { - "bytes32[3][2]", - nil, - [][]common.Hash{{{1}, {2}, {3}}, {{3}, {4}, {5}}}, - common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] - "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] - "0300000000000000000000000000000000000000000000000000000000000000" + // array[0][2] - "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] - "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] - "0500000000000000000000000000000000000000000000000000000000000000"), // array[1][2] - }, - { - // static tuple - "tuple", - []ArgumentMarshaling{ - {Name: "a", Type: "int64"}, - {Name: "b", Type: "int256"}, - {Name: "c", Type: "int256"}, - {Name: "d", Type: "bool"}, - {Name: "e", Type: "bytes32[3][2]"}, - }, - struct { - A int64 - B *big.Int - C *big.Int - D bool - E [][]common.Hash - }{1, big.NewInt(1), big.NewInt(-1), true, [][]common.Hash{{{1}, {2}, {3}}, {{3}, {4}, {5}}}}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001" + // struct[a] - "0000000000000000000000000000000000000000000000000000000000000001" + // struct[b] - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // struct[c] - "0000000000000000000000000000000000000000000000000000000000000001" + // struct[d] - "0100000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][0] - "0200000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][1] - "0300000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][2] - "0300000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[1][0] - "0400000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[1][1] - "0500000000000000000000000000000000000000000000000000000000000000"), // struct[e] array[1][2] - }, - { - // dynamic tuple - "tuple", - []ArgumentMarshaling{ - {Name: "a", Type: "string"}, - {Name: "b", Type: "int64"}, - {Name: "c", Type: "bytes"}, - {Name: "d", Type: "string[]"}, - {Name: "e", Type: "int256[]"}, - {Name: "f", Type: "address[]"}, - }, - struct { - FieldA string `abi:"a"` // Test whether abi tag works - FieldB int64 `abi:"b"` - C []byte - D []string - E []*big.Int - F []common.Address - }{"foobar", 1, []byte{1}, []string{"foo", "bar"}, []*big.Int{big.NewInt(1), big.NewInt(-1)}, []common.Address{{1}, {2}}}, - common.Hex2Bytes("00000000000000000000000000000000000000000000000000000000000000c0" + // struct[a] offset - "0000000000000000000000000000000000000000000000000000000000000001" + // struct[b] - "0000000000000000000000000000000000000000000000000000000000000100" + // struct[c] offset - "0000000000000000000000000000000000000000000000000000000000000140" + // struct[d] offset - "0000000000000000000000000000000000000000000000000000000000000220" + // struct[e] offset - "0000000000000000000000000000000000000000000000000000000000000280" + // struct[f] offset - "0000000000000000000000000000000000000000000000000000000000000006" + // struct[a] length - "666f6f6261720000000000000000000000000000000000000000000000000000" + // struct[a] "foobar" - "0000000000000000000000000000000000000000000000000000000000000001" + // struct[c] length - "0100000000000000000000000000000000000000000000000000000000000000" + // []byte{1} - "0000000000000000000000000000000000000000000000000000000000000002" + // struct[d] length - "0000000000000000000000000000000000000000000000000000000000000040" + // foo offset - "0000000000000000000000000000000000000000000000000000000000000080" + // bar offset - "0000000000000000000000000000000000000000000000000000000000000003" + // foo length - "666f6f0000000000000000000000000000000000000000000000000000000000" + // foo - "0000000000000000000000000000000000000000000000000000000000000003" + // bar offset - "6261720000000000000000000000000000000000000000000000000000000000" + // bar - "0000000000000000000000000000000000000000000000000000000000000002" + // struct[e] length - "0000000000000000000000000000000000000000000000000000000000000001" + // 1 - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // -1 - "0000000000000000000000000000000000000000000000000000000000000002" + // struct[f] length - "0000000000000000000000000100000000000000000000000000000000000000" + // common.Address{1} - "0000000000000000000000000200000000000000000000000000000000000000"), // common.Address{2} - }, - { - // nested tuple - "tuple", - []ArgumentMarshaling{ - {Name: "a", Type: "tuple", Components: []ArgumentMarshaling{{Name: "a", Type: "uint256"}, {Name: "b", Type: "uint256[]"}}}, - {Name: "b", Type: "int256[]"}, - }, - struct { - A struct { - FieldA *big.Int `abi:"a"` - B []*big.Int - } - B []*big.Int - }{ - A: struct { - FieldA *big.Int `abi:"a"` // Test whether abi tag works for nested tuple - B []*big.Int - }{big.NewInt(1), []*big.Int{big.NewInt(1), big.NewInt(0)}}, - B: []*big.Int{big.NewInt(1), big.NewInt(0)}}, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000040" + // a offset - "00000000000000000000000000000000000000000000000000000000000000e0" + // b offset - "0000000000000000000000000000000000000000000000000000000000000001" + // a.a value - "0000000000000000000000000000000000000000000000000000000000000040" + // a.b offset - "0000000000000000000000000000000000000000000000000000000000000002" + // a.b length - "0000000000000000000000000000000000000000000000000000000000000001" + // a.b[0] value - "0000000000000000000000000000000000000000000000000000000000000000" + // a.b[1] value - "0000000000000000000000000000000000000000000000000000000000000002" + // b length - "0000000000000000000000000000000000000000000000000000000000000001" + // b[0] value - "0000000000000000000000000000000000000000000000000000000000000000"), // b[1] value - }, - { - // tuple slice - "tuple[]", - []ArgumentMarshaling{ - {Name: "a", Type: "int256"}, - {Name: "b", Type: "int256[]"}, - }, - []struct { - A *big.Int - B []*big.Int - }{ - {big.NewInt(-1), []*big.Int{big.NewInt(1), big.NewInt(0)}}, - {big.NewInt(1), []*big.Int{big.NewInt(2), big.NewInt(-1)}}, - }, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000002" + // tuple length - "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0] offset - "00000000000000000000000000000000000000000000000000000000000000e0" + // tuple[1] offset - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].A - "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0].B offset - "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[0].B length - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].B[0] value - "0000000000000000000000000000000000000000000000000000000000000000" + // tuple[0].B[1] value - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].A - "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[1].B offset - "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].B length - "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].B[0] value - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), // tuple[1].B[1] value - }, - { - // static tuple array - "tuple[2]", - []ArgumentMarshaling{ - {Name: "a", Type: "int256"}, - {Name: "b", Type: "int256"}, - }, - [2]struct { - A *big.Int - B *big.Int - }{ - {big.NewInt(-1), big.NewInt(1)}, - {big.NewInt(1), big.NewInt(-1)}, - }, - common.Hex2Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].a - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].b - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].a - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), // tuple[1].b - }, - { - // dynamic tuple array - "tuple[2]", - []ArgumentMarshaling{ - {Name: "a", Type: "int256[]"}, - }, - [2]struct { - A []*big.Int - }{ - {[]*big.Int{big.NewInt(-1), big.NewInt(1)}}, - {[]*big.Int{big.NewInt(1), big.NewInt(-1)}}, - }, - common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0] offset - "00000000000000000000000000000000000000000000000000000000000000c0" + // tuple[1] offset - "0000000000000000000000000000000000000000000000000000000000000020" + // tuple[0].A offset - "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[0].A length - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].A[0] - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].A[1] - "0000000000000000000000000000000000000000000000000000000000000020" + // tuple[1].A offset - "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].A length - "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].A[0] - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), // tuple[1].A[1] - }, - } { - typ, err := NewType(test.typ, test.components) - if err != nil { - t.Fatalf("%v failed. Unexpected parse error: %v", i, err) - } - output, err := typ.pack(reflect.ValueOf(test.input)) - if err != nil { - t.Fatalf("%v failed. Unexpected pack error: %v", i, err) - } - - if !bytes.Equal(output, test.output) { - t.Errorf("input %d for typ: %v failed. Expected bytes: '%x' Got: '%x'", i, typ.String(), test.output, output) - } + for i, test := range packUnpackTests { + t.Run(strconv.Itoa(i), func(t *testing.T) { + encb, err := hex.DecodeString(test.packed) + if err != nil { + t.Fatalf("invalid hex %s: %v", test.packed, err) + } + inDef := fmt.Sprintf(`[{ "name" : "method", "type": "function", "inputs": %s}]`, test.def) + inAbi, err := JSON(strings.NewReader(inDef)) + if err != nil { + t.Fatalf("invalid ABI definition %s, %v", inDef, err) + } + var packed []byte + packed, err = inAbi.Pack("method", test.unpacked) + + if err != nil { + t.Fatalf("test %d (%v) failed: %v", i, test.def, err) + } + if !reflect.DeepEqual(packed[4:], encb) { + t.Errorf("test %d (%v) failed: expected %v, got %v", i, test.def, encb, packed[4:]) + } + }) } } func TestMethodPack(t *testing.T) { - abi, err := JSON(strings.NewReader(jsondata2)) + abi, err := JSON(strings.NewReader(jsondata)) if err != nil { 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 +76,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 +91,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 +109,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 +123,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 +140,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 +156,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/packing_test.go b/accounts/abi/packing_test.go new file mode 100644 index 00000000..eae3b0df --- /dev/null +++ b/accounts/abi/packing_test.go @@ -0,0 +1,990 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +type packUnpackTest struct { + def string + unpacked interface{} + packed string +} + +var packUnpackTests = []packUnpackTest{ + // Booleans + { + def: `[{ "type": "bool" }]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: true, + }, + { + def: `[{ "type": "bool" }]`, + packed: "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: false, + }, + // Integers + { + def: `[{ "type": "uint8" }]`, + unpacked: uint8(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{ "type": "uint8[]" }]`, + unpacked: []uint8{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{ "type": "uint16" }]`, + unpacked: uint16(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{ "type": "uint16[]" }]`, + unpacked: []uint16{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "uint17"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: big.NewInt(1), + }, + { + def: `[{"type": "uint32"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: uint32(1), + }, + { + def: `[{"type": "uint32[]"}]`, + unpacked: []uint32{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "uint64"}]`, + unpacked: uint64(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "uint64[]"}]`, + unpacked: []uint64{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "uint256"}]`, + unpacked: big.NewInt(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "uint256[]"}]`, + unpacked: []*big.Int{big.NewInt(1), big.NewInt(2)}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int8"}]`, + unpacked: int8(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int8[]"}]`, + unpacked: []int8{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int16"}]`, + unpacked: int16(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int16[]"}]`, + unpacked: []int16{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int17"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: big.NewInt(1), + }, + { + def: `[{"type": "int32"}]`, + unpacked: int32(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int32"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: int32(1), + }, + { + def: `[{"type": "int32[]"}]`, + unpacked: []int32{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int64"}]`, + unpacked: int64(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int64[]"}]`, + unpacked: []int64{1, 2}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int256"}]`, + unpacked: big.NewInt(2), + packed: "0000000000000000000000000000000000000000000000000000000000000002", + }, + { + def: `[{"type": "int256"}]`, + packed: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + unpacked: big.NewInt(-1), + }, + { + def: `[{"type": "int256[]"}]`, + unpacked: []*big.Int{big.NewInt(1), big.NewInt(2)}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + }, + // Address + { + def: `[{"type": "address"}]`, + packed: "0000000000000000000000000100000000000000000000000000000000000000", + unpacked: common.Address{1}, + }, + { + def: `[{"type": "address[]"}]`, + unpacked: []common.Address{{1}, {2}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000100000000000000000000000000000000000000" + + "0000000000000000000000000200000000000000000000000000000000000000", + }, + // Bytes + { + def: `[{"type": "bytes1"}]`, + unpacked: [1]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes2"}]`, + unpacked: [2]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes3"}]`, + unpacked: [3]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes4"}]`, + unpacked: [4]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes5"}]`, + unpacked: [5]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes6"}]`, + unpacked: [6]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes7"}]`, + unpacked: [7]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes8"}]`, + unpacked: [8]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes9"}]`, + unpacked: [9]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes10"}]`, + unpacked: [10]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes11"}]`, + unpacked: [11]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes12"}]`, + unpacked: [12]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes13"}]`, + unpacked: [13]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes14"}]`, + unpacked: [14]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes15"}]`, + unpacked: [15]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes16"}]`, + unpacked: [16]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes17"}]`, + unpacked: [17]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes18"}]`, + unpacked: [18]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes19"}]`, + unpacked: [19]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes20"}]`, + unpacked: [20]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes21"}]`, + unpacked: [21]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes22"}]`, + unpacked: [22]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes23"}]`, + unpacked: [23]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes24"}]`, + unpacked: [24]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes25"}]`, + unpacked: [25]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes26"}]`, + unpacked: [26]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes27"}]`, + unpacked: [27]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes28"}]`, + unpacked: [28]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes29"}]`, + unpacked: [29]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes30"}]`, + unpacked: [30]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes31"}]`, + unpacked: [31]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes32"}]`, + unpacked: [32]byte{1}, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "bytes32"}]`, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + unpacked: [32]byte{1, 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}, + }, + { + def: `[{"type": "bytes"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000020" + + "0100000000000000000000000000000000000000000000000000000000000000", + unpacked: common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), + }, + { + def: `[{"type": "bytes32"}]`, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + unpacked: [32]byte{1, 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}, + }, + // Functions + { + def: `[{"type": "function"}]`, + packed: "0100000000000000000000000000000000000000000000000000000000000000", + unpacked: [24]byte{1}, + }, + // Slice and Array + { + def: `[{"type": "uint8[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []uint8{1, 2}, + }, + { + def: `[{"type": "uint8[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: []uint8{}, + }, + { + def: `[{"type": "uint256[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: []*big.Int{}, + }, + { + def: `[{"type": "uint8[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]uint8{1, 2}, + }, + { + def: `[{"type": "int8[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]int8{1, 2}, + }, + { + def: `[{"type": "int16[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []int16{1, 2}, + }, + { + def: `[{"type": "int16[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]int16{1, 2}, + }, + { + def: `[{"type": "int32[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []int32{1, 2}, + }, + { + def: `[{"type": "int32[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]int32{1, 2}, + }, + { + def: `[{"type": "int64[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []int64{1, 2}, + }, + { + def: `[{"type": "int64[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]int64{1, 2}, + }, + { + def: `[{"type": "int256[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []*big.Int{big.NewInt(1), big.NewInt(2)}, + }, + { + def: `[{"type": "int256[3]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000003", + unpacked: [3]*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, + }, + // multi dimensional, if these pass, all types that don't require length prefix should pass + { + def: `[{"type": "uint8[][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: [][]uint8{}, + }, + { + def: `[{"type": "uint8[][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "00000000000000000000000000000000000000000000000000000000000000a0" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [][]uint8{{1, 2}, {1, 2}}, + }, + { + def: `[{"type": "uint8[][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "00000000000000000000000000000000000000000000000000000000000000a0" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000003" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000003", + unpacked: [][]uint8{{1, 2}, {1, 2, 3}}, + }, + { + def: `[{"type": "uint8[2][2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2][2]uint8{{1, 2}, {1, 2}}, + }, + { + def: `[{"type": "uint8[][2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "0000000000000000000000000000000000000000000000000000000000000060" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: [2][]uint8{{}, {}}, + }, + { + def: `[{"type": "uint8[][2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "0000000000000000000000000000000000000000000000000000000000000080" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: [2][]uint8{{1}, {1}}, + }, + { + def: `[{"type": "uint8[2][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000000", + unpacked: [][2]uint8{}, + }, + { + def: `[{"type": "uint8[2][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [][2]uint8{{1, 2}}, + }, + { + def: `[{"type": "uint8[2][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [][2]uint8{{1, 2}, {1, 2}}, + }, + { + def: `[{"type": "uint16[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []uint16{1, 2}, + }, + { + def: `[{"type": "uint16[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]uint16{1, 2}, + }, + { + def: `[{"type": "uint32[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []uint32{1, 2}, + }, + { + def: `[{"type": "uint32[2][3][4]"}]`, + unpacked: [4][3][2]uint32{{{1, 2}, {3, 4}, {5, 6}}, {{7, 8}, {9, 10}, {11, 12}}, {{13, 14}, {15, 16}, {17, 18}}, {{19, 20}, {21, 22}, {23, 24}}}, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000003" + + "0000000000000000000000000000000000000000000000000000000000000004" + + "0000000000000000000000000000000000000000000000000000000000000005" + + "0000000000000000000000000000000000000000000000000000000000000006" + + "0000000000000000000000000000000000000000000000000000000000000007" + + "0000000000000000000000000000000000000000000000000000000000000008" + + "0000000000000000000000000000000000000000000000000000000000000009" + + "000000000000000000000000000000000000000000000000000000000000000a" + + "000000000000000000000000000000000000000000000000000000000000000b" + + "000000000000000000000000000000000000000000000000000000000000000c" + + "000000000000000000000000000000000000000000000000000000000000000d" + + "000000000000000000000000000000000000000000000000000000000000000e" + + "000000000000000000000000000000000000000000000000000000000000000f" + + "0000000000000000000000000000000000000000000000000000000000000010" + + "0000000000000000000000000000000000000000000000000000000000000011" + + "0000000000000000000000000000000000000000000000000000000000000012" + + "0000000000000000000000000000000000000000000000000000000000000013" + + "0000000000000000000000000000000000000000000000000000000000000014" + + "0000000000000000000000000000000000000000000000000000000000000015" + + "0000000000000000000000000000000000000000000000000000000000000016" + + "0000000000000000000000000000000000000000000000000000000000000017" + + "0000000000000000000000000000000000000000000000000000000000000018", + }, + + { + def: `[{"type": "bytes32[]"}]`, + unpacked: [][32]byte{{1}, {2}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0100000000000000000000000000000000000000000000000000000000000000" + + "0200000000000000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "uint32[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]uint32{1, 2}, + }, + { + def: `[{"type": "uint64[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []uint64{1, 2}, + }, + { + def: `[{"type": "uint64[2]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: [2]uint64{1, 2}, + }, + { + def: `[{"type": "uint256[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: []*big.Int{big.NewInt(1), big.NewInt(2)}, + }, + { + def: `[{"type": "uint256[3]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000003", + unpacked: [3]*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, + }, + { + def: `[{"type": "string[4]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000080" + + "00000000000000000000000000000000000000000000000000000000000000c0" + + "0000000000000000000000000000000000000000000000000000000000000100" + + "0000000000000000000000000000000000000000000000000000000000000140" + + "0000000000000000000000000000000000000000000000000000000000000005" + + "48656c6c6f000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000005" + + "576f726c64000000000000000000000000000000000000000000000000000000" + + "000000000000000000000000000000000000000000000000000000000000000b" + + "476f2d657468657265756d000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000008" + + "457468657265756d000000000000000000000000000000000000000000000000", + unpacked: [4]string{"Hello", "World", "Go-ethereum", "Ethereum"}, + }, + { + def: `[{"type": "string[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "0000000000000000000000000000000000000000000000000000000000000080" + + "0000000000000000000000000000000000000000000000000000000000000008" + + "457468657265756d000000000000000000000000000000000000000000000000" + + "000000000000000000000000000000000000000000000000000000000000000b" + + "676f2d657468657265756d000000000000000000000000000000000000000000", + unpacked: []string{"Ethereum", "go-ethereum"}, + }, + { + def: `[{"type": "bytes[]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "0000000000000000000000000000000000000000000000000000000000000080" + + "0000000000000000000000000000000000000000000000000000000000000003" + + "f0f0f00000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000003" + + "f0f0f00000000000000000000000000000000000000000000000000000000000", + unpacked: [][]byte{{0xf0, 0xf0, 0xf0}, {0xf0, 0xf0, 0xf0}}, + }, + { + def: `[{"type": "uint256[2][][]"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "00000000000000000000000000000000000000000000000000000000000000e0" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "00000000000000000000000000000000000000000000000000000000000000c8" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "00000000000000000000000000000000000000000000000000000000000003e8" + + "0000000000000000000000000000000000000000000000000000000000000002" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "00000000000000000000000000000000000000000000000000000000000000c8" + + "0000000000000000000000000000000000000000000000000000000000000001" + + "00000000000000000000000000000000000000000000000000000000000003e8", + unpacked: [][][2]*big.Int{{{big.NewInt(1), big.NewInt(200)}, {big.NewInt(1), big.NewInt(1000)}}, {{big.NewInt(1), big.NewInt(200)}, {big.NewInt(1), big.NewInt(1000)}}}, + }, + // struct outputs + { + def: `[{"components": [{"name":"int1","type":"int256"},{"name":"int2","type":"int256"}], "type":"tuple"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: struct { + Int1 *big.Int + Int2 *big.Int + }{big.NewInt(1), big.NewInt(2)}, + }, + { + def: `[{"components": [{"name":"int_one","type":"int256"}], "type":"tuple"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"components": [{"name":"int__one","type":"int256"}], "type":"tuple"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"components": [{"name":"int_one_","type":"int256"}], "type":"tuple"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001", + unpacked: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"components": [{"name":"int_one","type":"int256"}, {"name":"intone","type":"int256"}], "type":"tuple"}]`, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000002", + unpacked: struct { + IntOne *big.Int + Intone *big.Int + }{big.NewInt(1), big.NewInt(2)}, + }, + { + def: `[{"type": "string"}]`, + unpacked: "foobar", + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000006" + + "666f6f6261720000000000000000000000000000000000000000000000000000", + }, + { + def: `[{"type": "string[]"}]`, + unpacked: []string{"hello", "foobar"}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + // len(array) = 2 + "0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 + "0000000000000000000000000000000000000000000000000000000000000080" + // offset 128 to i = 1 + "0000000000000000000000000000000000000000000000000000000000000005" + // len(str[0]) = 5 + "68656c6c6f000000000000000000000000000000000000000000000000000000" + // str[0] + "0000000000000000000000000000000000000000000000000000000000000006" + // len(str[1]) = 6 + "666f6f6261720000000000000000000000000000000000000000000000000000", // str[1] + }, + { + def: `[{"type": "string[2]"}]`, + unpacked: [2]string{"hello", "foobar"}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000040" + // offset to i = 0 + "0000000000000000000000000000000000000000000000000000000000000080" + // offset to i = 1 + "0000000000000000000000000000000000000000000000000000000000000005" + // len(str[0]) = 5 + "68656c6c6f000000000000000000000000000000000000000000000000000000" + // str[0] + "0000000000000000000000000000000000000000000000000000000000000006" + // len(str[1]) = 6 + "666f6f6261720000000000000000000000000000000000000000000000000000", // str[1] + }, + { + def: `[{"type": "bytes32[][]"}]`, + unpacked: [][][32]byte{{{1}, {2}}, {{3}, {4}, {5}}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + // len(array) = 2 + "0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 + "00000000000000000000000000000000000000000000000000000000000000a0" + // offset 160 to i = 1 + "0000000000000000000000000000000000000000000000000000000000000002" + // len(array[0]) = 2 + "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] + "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] + "0000000000000000000000000000000000000000000000000000000000000003" + // len(array[1]) = 3 + "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] + "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] + "0500000000000000000000000000000000000000000000000000000000000000", // array[1][2] + }, + { + def: `[{"type": "bytes32[][2]"}]`, + unpacked: [2][][32]byte{{{1}, {2}}, {{3}, {4}, {5}}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000040" + // offset 64 to i = 0 + "00000000000000000000000000000000000000000000000000000000000000a0" + // offset 160 to i = 1 + "0000000000000000000000000000000000000000000000000000000000000002" + // len(array[0]) = 2 + "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] + "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] + "0000000000000000000000000000000000000000000000000000000000000003" + // len(array[1]) = 3 + "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] + "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] + "0500000000000000000000000000000000000000000000000000000000000000", // array[1][2] + }, + { + def: `[{"type": "bytes32[3][2]"}]`, + unpacked: [2][3][32]byte{{{1}, {2}, {3}}, {{3}, {4}, {5}}}, + packed: "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] + "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] + "0300000000000000000000000000000000000000000000000000000000000000" + // array[0][2] + "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] + "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] + "0500000000000000000000000000000000000000000000000000000000000000", // array[1][2] + }, + { + // static tuple + def: `[{"components": [{"name":"a","type":"int64"}, + {"name":"b","type":"int256"}, + {"name":"c","type":"int256"}, + {"name":"d","type":"bool"}, + {"name":"e","type":"bytes32[3][2]"}], "type":"tuple"}]`, + unpacked: struct { + A int64 + B *big.Int + C *big.Int + D bool + E [2][3][32]byte + }{1, big.NewInt(1), big.NewInt(-1), true, [2][3][32]byte{{{1}, {2}, {3}}, {{3}, {4}, {5}}}}, + packed: "0000000000000000000000000000000000000000000000000000000000000001" + // struct[a] + "0000000000000000000000000000000000000000000000000000000000000001" + // struct[b] + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // struct[c] + "0000000000000000000000000000000000000000000000000000000000000001" + // struct[d] + "0100000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][0] + "0200000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][1] + "0300000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][2] + "0300000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[1][0] + "0400000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[1][1] + "0500000000000000000000000000000000000000000000000000000000000000", // struct[e] array[1][2] + }, + { + def: `[{"components": [{"name":"a","type":"string"}, + {"name":"b","type":"int64"}, + {"name":"c","type":"bytes"}, + {"name":"d","type":"string[]"}, + {"name":"e","type":"int256[]"}, + {"name":"f","type":"address[]"}], "type":"tuple"}]`, + unpacked: struct { + A string + B int64 + C []byte + D []string + E []*big.Int + F []common.Address + }{"foobar", 1, []byte{1}, []string{"foo", "bar"}, []*big.Int{big.NewInt(1), big.NewInt(-1)}, []common.Address{{1}, {2}}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + // struct a + "00000000000000000000000000000000000000000000000000000000000000c0" + // struct[a] offset + "0000000000000000000000000000000000000000000000000000000000000001" + // struct[b] + "0000000000000000000000000000000000000000000000000000000000000100" + // struct[c] offset + "0000000000000000000000000000000000000000000000000000000000000140" + // struct[d] offset + "0000000000000000000000000000000000000000000000000000000000000220" + // struct[e] offset + "0000000000000000000000000000000000000000000000000000000000000280" + // struct[f] offset + "0000000000000000000000000000000000000000000000000000000000000006" + // struct[a] length + "666f6f6261720000000000000000000000000000000000000000000000000000" + // struct[a] "foobar" + "0000000000000000000000000000000000000000000000000000000000000001" + // struct[c] length + "0100000000000000000000000000000000000000000000000000000000000000" + // []byte{1} + "0000000000000000000000000000000000000000000000000000000000000002" + // struct[d] length + "0000000000000000000000000000000000000000000000000000000000000040" + // foo offset + "0000000000000000000000000000000000000000000000000000000000000080" + // bar offset + "0000000000000000000000000000000000000000000000000000000000000003" + // foo length + "666f6f0000000000000000000000000000000000000000000000000000000000" + // foo + "0000000000000000000000000000000000000000000000000000000000000003" + // bar offset + "6261720000000000000000000000000000000000000000000000000000000000" + // bar + "0000000000000000000000000000000000000000000000000000000000000002" + // struct[e] length + "0000000000000000000000000000000000000000000000000000000000000001" + // 1 + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // -1 + "0000000000000000000000000000000000000000000000000000000000000002" + // struct[f] length + "0000000000000000000000000100000000000000000000000000000000000000" + // common.Address{1} + "0000000000000000000000000200000000000000000000000000000000000000", // common.Address{2} + }, + { + def: `[{"components": [{ "type": "tuple","components": [{"name": "a","type": "uint256"}, + {"name": "b","type": "uint256[]"}], + "name": "a","type": "tuple"}, + {"name": "b","type": "uint256[]"}], "type": "tuple"}]`, + unpacked: struct { + A struct { + A *big.Int + B []*big.Int + } + B []*big.Int + }{ + A: struct { + A *big.Int + B []*big.Int + }{big.NewInt(1), []*big.Int{big.NewInt(1), big.NewInt(2)}}, + B: []*big.Int{big.NewInt(1), big.NewInt(2)}}, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + // struct a + "0000000000000000000000000000000000000000000000000000000000000040" + // a offset + "00000000000000000000000000000000000000000000000000000000000000e0" + // b offset + "0000000000000000000000000000000000000000000000000000000000000001" + // a.a value + "0000000000000000000000000000000000000000000000000000000000000040" + // a.b offset + "0000000000000000000000000000000000000000000000000000000000000002" + // a.b length + "0000000000000000000000000000000000000000000000000000000000000001" + // a.b[0] value + "0000000000000000000000000000000000000000000000000000000000000002" + // a.b[1] value + "0000000000000000000000000000000000000000000000000000000000000002" + // b length + "0000000000000000000000000000000000000000000000000000000000000001" + // b[0] value + "0000000000000000000000000000000000000000000000000000000000000002", // b[1] value + }, + + { + def: `[{"components": [{"name": "a","type": "int256"}, + {"name": "b","type": "int256[]"}], + "name": "a","type": "tuple[]"}]`, + unpacked: []struct { + A *big.Int + B []*big.Int + }{ + {big.NewInt(-1), []*big.Int{big.NewInt(1), big.NewInt(3)}}, + {big.NewInt(1), []*big.Int{big.NewInt(2), big.NewInt(-1)}}, + }, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple length + "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0] offset + "00000000000000000000000000000000000000000000000000000000000000e0" + // tuple[1] offset + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].A + "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0].B offset + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[0].B length + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].B[0] value + "0000000000000000000000000000000000000000000000000000000000000003" + // tuple[0].B[1] value + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].A + "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[1].B offset + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].B length + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].B[0] value + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // tuple[1].B[1] value + }, + { + def: `[{"components": [{"name": "a","type": "int256"}, + {"name": "b","type": "int256"}], + "name": "a","type": "tuple[2]"}]`, + unpacked: [2]struct { + A *big.Int + B *big.Int + }{ + {big.NewInt(-1), big.NewInt(1)}, + {big.NewInt(1), big.NewInt(-1)}, + }, + packed: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].a + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].b + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].a + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // tuple[1].b + }, + { + def: `[{"components": [{"name": "a","type": "int256[]"}], + "name": "a","type": "tuple[2]"}]`, + unpacked: [2]struct { + A []*big.Int + }{ + {[]*big.Int{big.NewInt(-1), big.NewInt(1)}}, + {[]*big.Int{big.NewInt(1), big.NewInt(-1)}}, + }, + packed: "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000040" + // tuple[0] offset + "00000000000000000000000000000000000000000000000000000000000000c0" + // tuple[1] offset + "0000000000000000000000000000000000000000000000000000000000000020" + // tuple[0].A offset + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[0].A length + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // tuple[0].A[0] + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[0].A[1] + "0000000000000000000000000000000000000000000000000000000000000020" + // tuple[1].A offset + "0000000000000000000000000000000000000000000000000000000000000002" + // tuple[1].A length + "0000000000000000000000000000000000000000000000000000000000000001" + // tuple[1].A[0] + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // tuple[1].A[1] + }, +} diff --git a/accounts/abi/reflect.go b/accounts/abi/reflect.go index 73ca8fa2..7917fa98 100644 --- a/accounts/abi/reflect.go +++ b/accounts/abi/reflect.go @@ -17,57 +17,74 @@ package abi import ( + "errors" "fmt" + "math/big" "reflect" "strings" ) -// indirect recursively dereferences the value until it either gets the value -// or finds a big.Int -func indirect(v reflect.Value) reflect.Value { - if v.Kind() == reflect.Ptr && v.Elem().Type() != derefbigT { - return indirect(v.Elem()) +// ConvertType converts an interface of a runtime type into a interface of the +// given type +// e.g. turn +// var fields []reflect.StructField +// fields = append(fields, reflect.StructField{ +// Name: "X", +// Type: reflect.TypeOf(new(big.Int)), +// Tag: reflect.StructTag("json:\"" + "x" + "\""), +// } +// into +// type TupleT struct { X *big.Int } +func ConvertType(in interface{}, proto interface{}) interface{} { + protoType := reflect.TypeOf(proto) + if reflect.TypeOf(in).ConvertibleTo(protoType) { + return reflect.ValueOf(in).Convert(protoType).Interface() } - return v + // Use set as a last ditch effort + if err := set(reflect.ValueOf(proto), reflect.ValueOf(in)); err != nil { + panic(err) + } + return proto } -// 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() { +// indirect recursively dereferences the value until it either gets the value +// or finds a big.Int +func indirect(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Ptr && v.Elem().Type() != reflect.TypeOf(big.Int{}) { return indirect(v.Elem()) } return v } -// reflectIntKind returns the reflect using the given size and +// reflectIntType returns the reflect using the given size and // unsignedness. -func reflectIntKindAndType(unsigned bool, size int) (reflect.Kind, reflect.Type) { +func reflectIntType(unsigned bool, size int) reflect.Type { + if unsigned { + switch size { + case 8: + return reflect.TypeOf(uint8(0)) + case 16: + return reflect.TypeOf(uint16(0)) + case 32: + return reflect.TypeOf(uint32(0)) + case 64: + return reflect.TypeOf(uint64(0)) + } + } switch size { case 8: - if unsigned { - return reflect.Uint8, uint8T - } - return reflect.Int8, int8T + return reflect.TypeOf(int8(0)) case 16: - if unsigned { - return reflect.Uint16, uint16T - } - return reflect.Int16, int16T + return reflect.TypeOf(int16(0)) case 32: - if unsigned { - return reflect.Uint32, uint32T - } - return reflect.Int32, int32T + return reflect.TypeOf(int32(0)) case 64: - if unsigned { - return reflect.Uint64, uint64T - } - return reflect.Int64, int64T + return reflect.TypeOf(int64(0)) } - return reflect.Ptr, bigT + return reflect.TypeOf(&big.Int{}) } -// mustArrayToBytesSlice creates a new byte slice with the exact same size as value +// mustArrayToByteSlice creates a new byte slice with the exact same size as value // and copies the bytes in value to the new slice. func mustArrayToByteSlice(value reflect.Value) reflect.Value { slice := reflect.MakeSlice(reflect.TypeOf([]byte{}), value.Len(), value.Len()) @@ -82,14 +99,18 @@ 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 && dst.Elem().IsValid(): + case dstType.Kind() == reflect.Interface && dst.Elem().IsValid() && (dst.Elem().Type().Kind() == reflect.Ptr || dst.Elem().CanSet()): return set(dst.Elem(), src) - case dstType.Kind() == reflect.Ptr && dstType.Elem() != derefbigT: + case dstType.Kind() == reflect.Ptr && dstType.Elem() != reflect.TypeOf(big.Int{}): return set(dst.Elem(), src) case srcType.AssignableTo(dstType) && dst.CanSet(): dst.Set(src) - case dstType.Kind() == reflect.Slice && srcType.Kind() == reflect.Slice: + case dstType.Kind() == reflect.Slice && srcType.Kind() == reflect.Slice && dst.CanSet(): return setSlice(dst, src) + case dstType.Kind() == reflect.Array: + return setArray(dst, src) + case dstType.Kind() == reflect.Struct: + return setStruct(dst, src) default: return fmt.Errorf("abi: cannot unmarshal %v in to %v", src.Type(), dst.Type()) } @@ -98,38 +119,52 @@ func set(dst, src reflect.Value) error { // setSlice attempts to assign src to dst when slices are not assignable by default // e.g. src: [][]byte -> dst: [][15]byte +// setSlice ignores if we cannot copy all of src' elements. func setSlice(dst, src reflect.Value) error { slice := reflect.MakeSlice(dst.Type(), src.Len(), src.Len()) for i := 0; i < src.Len(); i++ { - v := src.Index(i) - reflect.Copy(slice.Index(i), v) + if err := set(slice.Index(i), src.Index(i)); err != nil { + return err + } } - - dst.Set(slice) - return nil + if dst.CanSet() { + dst.Set(slice) + return nil + } + return errors.New("Cannot set slice, destination not settable") } -// requireAssignable assures that `dest` is a pointer and it's not an interface. -func requireAssignable(dst, src reflect.Value) error { - if dst.Kind() != reflect.Ptr && dst.Kind() != reflect.Interface { - return fmt.Errorf("abi: cannot unmarshal %v into %v", src.Type(), dst.Type()) +func setArray(dst, src reflect.Value) error { + if src.Kind() == reflect.Ptr { + return set(dst, indirect(src)) } - return nil + array := reflect.New(dst.Type()).Elem() + min := src.Len() + if src.Len() > dst.Len() { + min = dst.Len() + } + for i := 0; i < min; i++ { + if err := set(array.Index(i), src.Index(i)); err != nil { + return err + } + } + if dst.CanSet() { + dst.Set(array) + return nil + } + return errors.New("Cannot set array, destination not settable") } -// requireUnpackKind verifies preconditions for unpacking `args` into `kind` -func requireUnpackKind(v reflect.Value, t reflect.Type, k reflect.Kind, - args Arguments) error { - - switch k { - case reflect.Struct: - case reflect.Slice, reflect.Array: - if minLen := args.LengthNonIndexed(); v.Len() < minLen { - return fmt.Errorf("abi: insufficient number of elements in the list/array for unpack, want %d, got %d", - minLen, v.Len()) +func setStruct(dst, src reflect.Value) error { + for i := 0; i < src.NumField(); i++ { + srcField := src.Field(i) + dstField := dst.Field(i) + if !dstField.IsValid() || !srcField.IsValid() { + return fmt.Errorf("Could not find src field: %v value: %v in destination", srcField.Type().Name(), srcField) + } + if err := set(dstField, srcField); err != nil { + return err } - default: - return fmt.Errorf("abi: cannot unmarshal tuple into %v", t) } return nil } @@ -156,9 +191,8 @@ func mapArgNamesToStructFields(argNames []string, value reflect.Value) (map[stri continue } // skip fields that have no abi:"" tag. - var ok bool - var tagName string - if tagName, ok = typ.Field(i).Tag.Lookup("abi"); !ok { + tagName, ok := typ.Field(i).Tag.Lookup("abi") + if !ok { continue } // check if tag is empty. @@ -186,7 +220,6 @@ func mapArgNamesToStructFields(argNames []string, value reflect.Value) (map[stri // second round ~~~ for _, argName := range argNames { - structFieldName := ToCamelCase(argName) if structFieldName == "" { diff --git a/accounts/abi/reflect_test.go b/accounts/abi/reflect_test.go index c425e6e5..76ef1ad2 100644 --- a/accounts/abi/reflect_test.go +++ b/accounts/abi/reflect_test.go @@ -17,6 +17,7 @@ package abi import ( + "math/big" "reflect" "testing" ) @@ -31,7 +32,7 @@ type reflectTest struct { var reflectTests = []reflectTest{ { - name: "OneToOneCorrespondance", + name: "OneToOneCorrespondence", args: []string{"fieldA"}, struc: struct { FieldA int `abi:"fieldA"` @@ -189,3 +190,72 @@ func TestReflectNameToStruct(t *testing.T) { }) } } + +func TestConvertType(t *testing.T) { + // Test Basic Struct + type T struct { + X *big.Int + Y *big.Int + } + // Create on-the-fly structure + var fields []reflect.StructField + fields = append(fields, reflect.StructField{ + Name: "X", + Type: reflect.TypeOf(new(big.Int)), + Tag: "json:\"" + "x" + "\"", + }) + fields = append(fields, reflect.StructField{ + Name: "Y", + Type: reflect.TypeOf(new(big.Int)), + Tag: "json:\"" + "y" + "\"", + }) + val := reflect.New(reflect.StructOf(fields)) + val.Elem().Field(0).Set(reflect.ValueOf(big.NewInt(1))) + val.Elem().Field(1).Set(reflect.ValueOf(big.NewInt(2))) + // ConvertType + out := *ConvertType(val.Interface(), new(T)).(*T) + if out.X.Cmp(big.NewInt(1)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out.X, big.NewInt(1)) + } + if out.Y.Cmp(big.NewInt(2)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out.Y, big.NewInt(2)) + } + // Slice Type + val2 := reflect.MakeSlice(reflect.SliceOf(reflect.StructOf(fields)), 2, 2) + val2.Index(0).Field(0).Set(reflect.ValueOf(big.NewInt(1))) + val2.Index(0).Field(1).Set(reflect.ValueOf(big.NewInt(2))) + val2.Index(1).Field(0).Set(reflect.ValueOf(big.NewInt(3))) + val2.Index(1).Field(1).Set(reflect.ValueOf(big.NewInt(4))) + out2 := *ConvertType(val2.Interface(), new([]T)).(*[]T) + if out2[0].X.Cmp(big.NewInt(1)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out2[0].X, big.NewInt(1)) + } + if out2[0].Y.Cmp(big.NewInt(2)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out2[1].Y, big.NewInt(2)) + } + if out2[1].X.Cmp(big.NewInt(3)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out2[0].X, big.NewInt(1)) + } + if out2[1].Y.Cmp(big.NewInt(4)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out2[1].Y, big.NewInt(2)) + } + // Array Type + val3 := reflect.New(reflect.ArrayOf(2, reflect.StructOf(fields))) + val3.Elem().Index(0).Field(0).Set(reflect.ValueOf(big.NewInt(1))) + val3.Elem().Index(0).Field(1).Set(reflect.ValueOf(big.NewInt(2))) + val3.Elem().Index(1).Field(0).Set(reflect.ValueOf(big.NewInt(3))) + val3.Elem().Index(1).Field(1).Set(reflect.ValueOf(big.NewInt(4))) + out3 := *ConvertType(val3.Interface(), new([2]T)).(*[2]T) + if out3[0].X.Cmp(big.NewInt(1)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out3[0].X, big.NewInt(1)) + } + if out3[0].Y.Cmp(big.NewInt(2)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out3[1].Y, big.NewInt(2)) + } + if out3[1].X.Cmp(big.NewInt(3)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out3[0].X, big.NewInt(1)) + } + if out3[1].Y.Cmp(big.NewInt(4)) != 0 { + t.Errorf("ConvertType failed, got %v want %v", out3[1].Y, big.NewInt(2)) + } +} diff --git a/accounts/abi/selector_parser.go b/accounts/abi/selector_parser.go new file mode 100644 index 00000000..d5472e37 --- /dev/null +++ b/accounts/abi/selector_parser.go @@ -0,0 +1,176 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "fmt" +) + +type SelectorMarshaling struct { + Name string `json:"name"` + Type string `json:"type"` + Inputs []ArgumentMarshaling `json:"inputs"` +} + +func isDigit(c byte) bool { + return c >= '0' && c <= '9' +} + +func isAlpha(c byte) bool { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') +} + +func isIdentifierSymbol(c byte) bool { + return c == '$' || c == '_' +} + +func parseToken(unescapedSelector string, isIdent bool) (string, string, error) { + if len(unescapedSelector) == 0 { + return "", "", fmt.Errorf("empty token") + } + firstChar := unescapedSelector[0] + position := 1 + if !(isAlpha(firstChar) || (isIdent && isIdentifierSymbol(firstChar))) { + return "", "", fmt.Errorf("invalid token start: %c", firstChar) + } + for position < len(unescapedSelector) { + char := unescapedSelector[position] + if !(isAlpha(char) || isDigit(char) || (isIdent && isIdentifierSymbol(char))) { + break + } + position++ + } + return unescapedSelector[:position], unescapedSelector[position:], nil +} + +func parseIdentifier(unescapedSelector string) (string, string, error) { + return parseToken(unescapedSelector, true) +} + +func parseElementaryType(unescapedSelector string) (string, string, error) { + parsedType, rest, err := parseToken(unescapedSelector, false) + if err != nil { + return "", "", fmt.Errorf("failed to parse elementary type: %v", err) + } + // handle arrays + for len(rest) > 0 && rest[0] == '[' { + parsedType = parsedType + string(rest[0]) + rest = rest[1:] + for len(rest) > 0 && isDigit(rest[0]) { + parsedType = parsedType + string(rest[0]) + rest = rest[1:] + } + if len(rest) == 0 || rest[0] != ']' { + return "", "", fmt.Errorf("failed to parse array: expected ']', got %c", unescapedSelector[0]) + } + parsedType = parsedType + string(rest[0]) + rest = rest[1:] + } + return parsedType, rest, nil +} + +func parseCompositeType(unescapedSelector string) ([]interface{}, string, error) { + if len(unescapedSelector) == 0 || unescapedSelector[0] != '(' { + return nil, "", fmt.Errorf("expected '(', got %c", unescapedSelector[0]) + } + parsedType, rest, err := parseType(unescapedSelector[1:]) + if err != nil { + return nil, "", fmt.Errorf("failed to parse type: %v", err) + } + result := []interface{}{parsedType} + for len(rest) > 0 && rest[0] != ')' { + parsedType, rest, err = parseType(rest[1:]) + if err != nil { + return nil, "", fmt.Errorf("failed to parse type: %v", err) + } + result = append(result, parsedType) + } + if len(rest) == 0 || rest[0] != ')' { + return nil, "", fmt.Errorf("expected ')', got '%s'", rest) + } + if len(rest) >= 3 && rest[1] == '[' && rest[2] == ']' { + return append(result, "[]"), rest[3:], nil + } + return result, rest[1:], nil +} + +func parseType(unescapedSelector string) (interface{}, string, error) { + if len(unescapedSelector) == 0 { + return nil, "", fmt.Errorf("empty type") + } + if unescapedSelector[0] == '(' { + return parseCompositeType(unescapedSelector) + } else { + return parseElementaryType(unescapedSelector) + } +} + +func assembleArgs(args []interface{}) ([]ArgumentMarshaling, error) { + arguments := make([]ArgumentMarshaling, 0) + for i, arg := range args { + // generate dummy name to avoid unmarshal issues + name := fmt.Sprintf("name%d", i) + if s, ok := arg.(string); ok { + arguments = append(arguments, ArgumentMarshaling{name, s, s, nil, false}) + } else if components, ok := arg.([]interface{}); ok { + subArgs, err := assembleArgs(components) + if err != nil { + return nil, fmt.Errorf("failed to assemble components: %v", err) + } + tupleType := "tuple" + if len(subArgs) != 0 && subArgs[len(subArgs)-1].Type == "[]" { + subArgs = subArgs[:len(subArgs)-1] + tupleType = "tuple[]" + } + arguments = append(arguments, ArgumentMarshaling{name, tupleType, tupleType, subArgs, false}) + } else { + return nil, fmt.Errorf("failed to assemble args: unexpected type %T", arg) + } + } + return arguments, nil +} + +// ParseSelector converts a method selector into a struct that can be JSON encoded +// and consumed by other functions in this package. +// Note, although uppercase letters are not part of the ABI spec, this function +// still accepts it as the general format is valid. +func ParseSelector(unescapedSelector string) (SelectorMarshaling, error) { + name, rest, err := parseIdentifier(unescapedSelector) + if err != nil { + return SelectorMarshaling{}, fmt.Errorf("failed to parse selector '%s': %v", unescapedSelector, err) + } + args := []interface{}{} + if len(rest) >= 2 && rest[0] == '(' && rest[1] == ')' { + rest = rest[2:] + } else { + args, rest, err = parseCompositeType(rest) + if err != nil { + return SelectorMarshaling{}, fmt.Errorf("failed to parse selector '%s': %v", unescapedSelector, err) + } + } + if len(rest) > 0 { + return SelectorMarshaling{}, fmt.Errorf("failed to parse selector '%s': unexpected string '%s'", unescapedSelector, rest) + } + + // Reassemble the fake ABI and construct the JSON + fakeArgs, err := assembleArgs(args) + if err != nil { + return SelectorMarshaling{}, fmt.Errorf("failed to parse selector: %v", err) + } + + return SelectorMarshaling{name, "function", fakeArgs}, nil +} diff --git a/accounts/abi/selector_parser_test.go b/accounts/abi/selector_parser_test.go new file mode 100644 index 00000000..f6f13449 --- /dev/null +++ b/accounts/abi/selector_parser_test.go @@ -0,0 +1,79 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "fmt" + "log" + "reflect" + "testing" +) + +func TestParseSelector(t *testing.T) { + mkType := func(types ...interface{}) []ArgumentMarshaling { + var result []ArgumentMarshaling + for i, typeOrComponents := range types { + name := fmt.Sprintf("name%d", i) + if typeName, ok := typeOrComponents.(string); ok { + result = append(result, ArgumentMarshaling{name, typeName, typeName, nil, false}) + } else if components, ok := typeOrComponents.([]ArgumentMarshaling); ok { + result = append(result, ArgumentMarshaling{name, "tuple", "tuple", components, false}) + } else if components, ok := typeOrComponents.([][]ArgumentMarshaling); ok { + result = append(result, ArgumentMarshaling{name, "tuple[]", "tuple[]", components[0], false}) + } else { + log.Fatalf("unexpected type %T", typeOrComponents) + } + } + return result + } + tests := []struct { + input string + name string + args []ArgumentMarshaling + }{ + {"noargs()", "noargs", []ArgumentMarshaling{}}, + {"simple(uint256,uint256,uint256)", "simple", mkType("uint256", "uint256", "uint256")}, + {"other(uint256,address)", "other", mkType("uint256", "address")}, + {"withArray(uint256[],address[2],uint8[4][][5])", "withArray", mkType("uint256[]", "address[2]", "uint8[4][][5]")}, + {"singleNest(bytes32,uint8,(uint256,uint256),address)", "singleNest", mkType("bytes32", "uint8", mkType("uint256", "uint256"), "address")}, + {"multiNest(address,(uint256[],uint256),((address,bytes32),uint256))", "multiNest", + mkType("address", mkType("uint256[]", "uint256"), mkType(mkType("address", "bytes32"), "uint256"))}, + {"arrayNest((uint256,uint256)[],bytes32)", "arrayNest", mkType([][]ArgumentMarshaling{mkType("uint256", "uint256")}, "bytes32")}, + {"multiArrayNest((uint256,uint256)[],(uint256,uint256)[])", "multiArrayNest", + mkType([][]ArgumentMarshaling{mkType("uint256", "uint256")}, [][]ArgumentMarshaling{mkType("uint256", "uint256")})}, + {"singleArrayNestAndArray((uint256,uint256)[],bytes32[])", "singleArrayNestAndArray", + mkType([][]ArgumentMarshaling{mkType("uint256", "uint256")}, "bytes32[]")}, + {"singleArrayNestWithArrayAndArray((uint256[],address[2],uint8[4][][5])[],bytes32[])", "singleArrayNestWithArrayAndArray", + mkType([][]ArgumentMarshaling{mkType("uint256[]", "address[2]", "uint8[4][][5]")}, "bytes32[]")}, + } + for i, tt := range tests { + selector, err := ParseSelector(tt.input) + if err != nil { + t.Errorf("test %d: failed to parse selector '%v': %v", i, tt.input, err) + } + if selector.Name != tt.name { + t.Errorf("test %d: unexpected function name: '%s' != '%s'", i, selector.Name, tt.name) + } + + if selector.Type != "function" { + t.Errorf("test %d: unexpected type: '%s' != '%s'", i, selector.Type, "function") + } + if !reflect.DeepEqual(selector.Inputs, tt.args) { + t.Errorf("test %d: unexpected args: '%v' != '%v'", i, selector.Inputs, tt.args) + } + } +} diff --git a/accounts/abi/topics.go b/accounts/abi/topics.go new file mode 100644 index 00000000..360df7d5 --- /dev/null +++ b/accounts/abi/topics.go @@ -0,0 +1,173 @@ +// 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 abi + +import ( + "encoding/binary" + "errors" + "fmt" + "math/big" + "reflect" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +// MakeTopics converts a filter query argument list into a filter topic set. +func MakeTopics(query ...[]interface{}) ([][]common.Hash, error) { + topics := make([][]common.Hash, len(query)) + for i, filter := range query { + for _, rule := range filter { + var topic common.Hash + + // Try to generate the topic based on simple types + switch rule := rule.(type) { + case common.Hash: + copy(topic[:], rule[:]) + case common.Address: + copy(topic[common.HashLength-common.AddressLength:], rule[:]) + case *big.Int: + blob := rule.Bytes() + copy(topic[common.HashLength-len(blob):], blob) + case bool: + if rule { + topic[common.HashLength-1] = 1 + } + case int8: + copy(topic[:], genIntType(int64(rule), 1)) + case int16: + copy(topic[:], genIntType(int64(rule), 2)) + case int32: + copy(topic[:], genIntType(int64(rule), 4)) + case int64: + copy(topic[:], genIntType(rule, 8)) + case uint8: + blob := new(big.Int).SetUint64(uint64(rule)).Bytes() + copy(topic[common.HashLength-len(blob):], blob) + case uint16: + blob := new(big.Int).SetUint64(uint64(rule)).Bytes() + copy(topic[common.HashLength-len(blob):], blob) + case uint32: + blob := new(big.Int).SetUint64(uint64(rule)).Bytes() + copy(topic[common.HashLength-len(blob):], blob) + case uint64: + blob := new(big.Int).SetUint64(rule).Bytes() + copy(topic[common.HashLength-len(blob):], blob) + case string: + hash := crypto.Keccak256Hash([]byte(rule)) + copy(topic[:], hash[:]) + case []byte: + hash := crypto.Keccak256Hash(rule) + copy(topic[:], hash[:]) + + default: + // todo(rjl493456442) according solidity documentation, indexed event + // parameters that are not value types i.e. arrays and structs are not + // stored directly but instead a keccak256-hash of an encoding is stored. + // + // We only convert stringS and bytes to hash, still need to deal with + // array(both fixed-size and dynamic-size) and struct. + + // Attempt to generate the topic from funky types + 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[:val.Len()]), val) + default: + return nil, fmt.Errorf("unsupported indexed type: %T", rule) + } + } + topics[i] = append(topics[i], topic) + } + } + return topics, nil +} + +func genIntType(rule int64, size uint) []byte { + var topic [common.HashLength]byte + if rule < 0 { + // if a rule is negative, we need to put it into two's complement. + // extended to common.HashLength bytes. + topic = [common.HashLength]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} + } + for i := uint(0); i < size; i++ { + topic[common.HashLength-i-1] = byte(rule >> (i * 8)) + } + return topic[:] +} + +// ParseTopics converts the indexed topic fields into actual log field values. +func ParseTopics(out interface{}, fields Arguments, topics []common.Hash) error { + return parseTopicWithSetter(fields, topics, + func(arg Argument, reconstr interface{}) { + field := reflect.ValueOf(out).Elem().FieldByName(ToCamelCase(arg.Name)) + field.Set(reflect.ValueOf(reconstr)) + }) +} + +// ParseTopicsIntoMap converts the indexed topic field-value pairs into map key-value pairs. +func ParseTopicsIntoMap(out map[string]interface{}, fields Arguments, topics []common.Hash) error { + return parseTopicWithSetter(fields, topics, + func(arg Argument, reconstr interface{}) { + out[arg.Name] = reconstr + }) +} + +// parseTopicWithSetter converts the indexed topic field-value pairs and stores them using the +// provided set function. +// +// Note, dynamic types cannot be reconstructed since they get mapped to Keccak256 +// hashes as the topic value! +func parseTopicWithSetter(fields Arguments, topics []common.Hash, setter func(Argument, interface{})) 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 i, arg := range fields { + if !arg.Indexed { + return errors.New("non-indexed field in topic reconstruction") + } + var reconstr interface{} + switch arg.Type.T { + case TupleTy: + return errors.New("tuple type in topic reconstruction") + case StringTy, BytesTy, SliceTy, 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 + reconstr = topics[i] + case FunctionTy: + if garbage := binary.BigEndian.Uint64(topics[i][0:8]); garbage != 0 { + return fmt.Errorf("bind: got improperly encoded function type, got %v", topics[i].Bytes()) + } + var tmp [24]byte + copy(tmp[:], topics[i][8:32]) + reconstr = tmp + default: + var err error + reconstr, err = toGoType(0, arg.Type, topics[i].Bytes()) + if err != nil { + return err + } + } + // Use the setter function to store the value + setter(arg, reconstr) + } + + return nil +} diff --git a/accounts/abi/topics_test.go b/accounts/abi/topics_test.go new file mode 100644 index 00000000..30cf21d0 --- /dev/null +++ b/accounts/abi/topics_test.go @@ -0,0 +1,381 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "math/big" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +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, + }, + { + "support common hash types in topics", + args{[][]interface{}{{common.Hash{1, 2, 3, 4, 5}}}}, + [][]common.Hash{{common.Hash{1, 2, 3, 4, 5}}}, + false, + }, + { + "support address types in topics", + args{[][]interface{}{{common.Address{1, 2, 3, 4, 5}}}}, + [][]common.Hash{{common.Hash{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5}}}, + false, + }, + { + "support *big.Int types in topics", + args{[][]interface{}{{big.NewInt(1).Lsh(big.NewInt(2), 254)}}}, + [][]common.Hash{{common.Hash{128}}}, + false, + }, + { + "support boolean types in topics", + args{[][]interface{}{ + {true}, + {false}, + }}, + [][]common.Hash{ + {common.Hash{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}}, + {common.Hash{0}}, + }, + false, + }, + { + "support int/uint(8/16/32/64) types in topics", + args{[][]interface{}{ + {int8(-2)}, + {int16(-3)}, + {int32(-4)}, + {int64(-5)}, + {int8(1)}, + {int16(256)}, + {int32(65536)}, + {int64(4294967296)}, + {uint8(1)}, + {uint16(256)}, + {uint32(65536)}, + {uint64(4294967296)}, + }}, + [][]common.Hash{ + {common.Hash{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254}}, + {common.Hash{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253}}, + {common.Hash{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252}}, + {common.Hash{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251}}, + {common.Hash{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}}, + {common.Hash{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, 0}}, + {common.Hash{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, 0, 0}}, + {common.Hash{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, 0, 0, 0, 0}}, + {common.Hash{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}}, + {common.Hash{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, 0}}, + {common.Hash{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, 0, 0}}, + {common.Hash{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, 0, 0, 0, 0}}, + }, + false, + }, + { + "support string types in topics", + args{[][]interface{}{{"hello world"}}}, + [][]common.Hash{{crypto.Keccak256Hash([]byte("hello world"))}}, + false, + }, + { + "support byte slice types in topics", + args{[][]interface{}{{[]byte{1, 2, 3}}}}, + [][]common.Hash{{crypto.Keccak256Hash([]byte{1, 2, 3})}}, + 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) + } + }) + } +} + +type args struct { + createObj func() interface{} + resultObj func() interface{} + resultMap func() map[string]interface{} + fields Arguments + topics []common.Hash +} + +type bytesStruct struct { + StaticBytes [5]byte +} +type int8Struct struct { + Int8Value int8 +} +type int256Struct struct { + Int256Value *big.Int +} + +type hashStruct struct { + HashValue common.Hash +} + +type funcStruct struct { + FuncValue [24]byte +} + +type topicTest struct { + name string + args args + wantErr bool +} + +func setupTopicsTests() []topicTest { + bytesType, _ := NewType("bytes5", "", nil) + int8Type, _ := NewType("int8", "", nil) + int256Type, _ := NewType("int256", "", nil) + tupleType, _ := NewType("tuple(int256,int8)", "", nil) + stringType, _ := NewType("string", "", nil) + funcType, _ := NewType("function", "", nil) + + tests := []topicTest{ + { + 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}} }, + resultMap: func() map[string]interface{} { + return map[string]interface{}{"staticBytes": [5]byte{1, 2, 3, 4, 5}} + }, + fields: Arguments{Argument{ + Name: "staticBytes", + Type: bytesType, + Indexed: true, + }}, + topics: []common.Hash{ + {1, 2, 3, 4, 5}, + }, + }, + wantErr: false, + }, + { + name: "int8 with negative value", + args: args{ + createObj: func() interface{} { return &int8Struct{} }, + resultObj: func() interface{} { return &int8Struct{Int8Value: -1} }, + resultMap: func() map[string]interface{} { + return map[string]interface{}{"int8Value": int8(-1)} + }, + fields: Arguments{Argument{ + Name: "int8Value", + Type: int8Type, + Indexed: true, + }}, + topics: []common.Hash{ + {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, + }, + }, + wantErr: false, + }, + { + name: "int256 with negative value", + args: args{ + createObj: func() interface{} { return &int256Struct{} }, + resultObj: func() interface{} { return &int256Struct{Int256Value: big.NewInt(-1)} }, + resultMap: func() map[string]interface{} { + return map[string]interface{}{"int256Value": big.NewInt(-1)} + }, + fields: Arguments{Argument{ + Name: "int256Value", + Type: int256Type, + Indexed: true, + }}, + topics: []common.Hash{ + {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, + }, + }, + wantErr: false, + }, + { + name: "hash type", + args: args{ + createObj: func() interface{} { return &hashStruct{} }, + resultObj: func() interface{} { return &hashStruct{crypto.Keccak256Hash([]byte("stringtopic"))} }, + resultMap: func() map[string]interface{} { + return map[string]interface{}{"hashValue": crypto.Keccak256Hash([]byte("stringtopic"))} + }, + fields: Arguments{Argument{ + Name: "hashValue", + Type: stringType, + Indexed: true, + }}, + topics: []common.Hash{ + crypto.Keccak256Hash([]byte("stringtopic")), + }, + }, + wantErr: false, + }, + { + name: "function type", + args: args{ + createObj: func() interface{} { return &funcStruct{} }, + resultObj: func() interface{} { + return &funcStruct{[24]byte{255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} + }, + resultMap: func() map[string]interface{} { + return map[string]interface{}{"funcValue": [24]byte{255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} + }, + fields: Arguments{Argument{ + Name: "funcValue", + Type: funcType, + Indexed: true, + }}, + topics: []common.Hash{ + {0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, + }, + }, + wantErr: false, + }, + { + name: "error on topic/field count mismatch", + args: args{ + createObj: func() interface{} { return nil }, + resultObj: func() interface{} { return nil }, + resultMap: func() map[string]interface{} { return make(map[string]interface{}) }, + fields: Arguments{Argument{ + Name: "tupletype", + Type: tupleType, + Indexed: true, + }}, + topics: []common.Hash{}, + }, + wantErr: true, + }, + { + name: "error on unindexed arguments", + args: args{ + createObj: func() interface{} { return &int256Struct{} }, + resultObj: func() interface{} { return &int256Struct{} }, + resultMap: func() map[string]interface{} { return make(map[string]interface{}) }, + fields: Arguments{Argument{ + Name: "int256Value", + Type: int256Type, + Indexed: false, + }}, + topics: []common.Hash{ + {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, + }, + }, + wantErr: true, + }, + { + name: "error on tuple in topic reconstruction", + args: args{ + createObj: func() interface{} { return &tupleType }, + resultObj: func() interface{} { return &tupleType }, + resultMap: func() map[string]interface{} { return make(map[string]interface{}) }, + fields: Arguments{Argument{ + Name: "tupletype", + Type: tupleType, + Indexed: true, + }}, + topics: []common.Hash{{0}}, + }, + wantErr: true, + }, + { + name: "error on improper encoded function", + args: args{ + createObj: func() interface{} { return &funcStruct{} }, + resultObj: func() interface{} { return &funcStruct{} }, + resultMap: func() map[string]interface{} { + return make(map[string]interface{}) + }, + fields: Arguments{Argument{ + Name: "funcValue", + Type: funcType, + Indexed: true, + }}, + topics: []common.Hash{ + {0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, + }, + }, + wantErr: true, + }, + } + + return tests +} + +func TestParseTopics(t *testing.T) { + tests := setupTopicsTests() + + 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) + } + }) + } +} + +func TestParseTopicsIntoMap(t *testing.T) { + tests := setupTopicsTests() + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + outMap := make(map[string]interface{}) + if err := ParseTopicsIntoMap(outMap, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { + t.Errorf("parseTopicsIntoMap() error = %v, wantErr %v", err, tt.wantErr) + } + resultMap := tt.args.resultMap() + if !reflect.DeepEqual(outMap, resultMap) { + t.Errorf("parseTopicsIntoMap() = %v, want %v", outMap, resultMap) + } + }) + } +} diff --git a/accounts/abi/type.go b/accounts/abi/type.go index 597d3143..008b665b 100644 --- a/accounts/abi/type.go +++ b/accounts/abi/type.go @@ -23,6 +23,10 @@ import ( "regexp" "strconv" "strings" + "unicode" + "unicode/utf8" + + "github.com/ethereum/go-ethereum/common" ) // Type enumerator @@ -42,19 +46,19 @@ const ( FunctionTy ) -// Type is the reflection of the supported argument type +// Type is the reflection of the supported argument type. type Type struct { Elem *Type - Kind reflect.Kind - Type reflect.Type Size int T byte // Our own type checking stringKind string // holds the unparsed string for deriving signatures // Tuple relative fields - TupleElems []*Type // Type information of all tuple fields - TupleRawNames []string // Raw field name of all tuple fields + TupleRawName string // Raw struct name defined in source code, may be empty. + TupleElems []*Type // Type information of all tuple fields + TupleRawNames []string // Raw field name of all tuple fields + TupleType reflect.Type // Underlying struct of the tuple } var ( @@ -63,7 +67,7 @@ var ( ) // NewType creates a new reflection type of abi type given in t. -func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { +func NewType(t string, internalType string, components []ArgumentMarshaling) (typ Type, err error) { // check that array brackets are equal if they exist if strings.Count(t, "[") != strings.Count(t, "]") { return Type{}, fmt.Errorf("invalid arg type in abi") @@ -73,9 +77,14 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { // if there are brackets, get ready to go into slice/array mode and // recursively create the type if strings.Count(t, "[") != 0 { - i := strings.LastIndex(t, "[") + // Note internalType can be empty here. + subInternal := internalType + if i := strings.LastIndex(internalType, "["); i != -1 { + subInternal = subInternal[:i] + } // recursively embed the type - embeddedType, err := NewType(t[:i], components) + i := strings.LastIndex(t, "[") + embeddedType, err := NewType(t[:i], subInternal, components) if err != nil { return Type{}, err } @@ -88,20 +97,16 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { if len(intz) == 0 { // is a slice typ.T = SliceTy - typ.Kind = reflect.Slice typ.Elem = &embeddedType - typ.Type = reflect.SliceOf(embeddedType.Type) typ.stringKind = embeddedType.stringKind + sliced } else if len(intz) == 1 { - // is a array + // is an array typ.T = ArrayTy - typ.Kind = reflect.Array typ.Elem = &embeddedType typ.Size, err = strconv.Atoi(intz[0]) if err != nil { return Type{}, fmt.Errorf("abi: error parsing variable size: %v", err) } - typ.Type = reflect.ArrayOf(typ.Size, embeddedType.Type) typ.stringKind = embeddedType.stringKind + sliced } else { return Type{}, fmt.Errorf("invalid formatting of array type") @@ -133,36 +138,24 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { // varType is the parsed abi type switch varType := parsedType[1]; varType { case "int": - typ.Kind, typ.Type = reflectIntKindAndType(false, varSize) typ.Size = varSize typ.T = IntTy case "uint": - typ.Kind, typ.Type = reflectIntKindAndType(true, varSize) typ.Size = varSize typ.T = UintTy case "bool": - typ.Kind = reflect.Bool typ.T = BoolTy - typ.Type = reflect.TypeOf(bool(false)) case "address": - typ.Kind = reflect.Array - typ.Type = addressT typ.Size = 20 typ.T = AddressTy case "string": - typ.Kind = reflect.String - typ.Type = reflect.TypeOf("") typ.T = StringTy case "bytes": if varSize == 0 { typ.T = BytesTy - typ.Kind = reflect.Slice - typ.Type = reflect.SliceOf(reflect.TypeOf(byte(0))) } else { typ.T = FixedBytesTy - typ.Kind = reflect.Array typ.Size = varSize - typ.Type = reflect.ArrayOf(varSize, reflect.TypeOf(byte(0))) } case "tuple": var ( @@ -170,19 +163,29 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { elems []*Type names []string expression string // canonical parameter expression + used = make(map[string]bool) ) expression += "(" for idx, c := range components { - cType, err := NewType(c.Type, c.Components) + cType, err := NewType(c.Type, c.InternalType, c.Components) if err != nil { return Type{}, err } - if ToCamelCase(c.Name) == "" { + name := ToCamelCase(c.Name) + if name == "" { return Type{}, errors.New("abi: purely anonymous or underscored field is not supported") } + fieldName := ResolveNameConflict(name, func(s string) bool { return used[s] }) + if err != nil { + return Type{}, err + } + used[fieldName] = true + if !isValidFieldName(fieldName) { + return Type{}, fmt.Errorf("field %d has invalid name", idx) + } fields = append(fields, reflect.StructField{ - Name: ToCamelCase(c.Name), // reflect.StructOf will panic for any exported field. - Type: cType.Type, + Name: fieldName, // reflect.StructOf will panic for any exported field. + Type: cType.GetType(), Tag: reflect.StructTag("json:\"" + c.Name + "\""), }) elems = append(elems, &cType) @@ -193,17 +196,26 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { } } expression += ")" - typ.Kind = reflect.Struct - typ.Type = reflect.StructOf(fields) + + typ.TupleType = reflect.StructOf(fields) typ.TupleElems = elems typ.TupleRawNames = names typ.T = TupleTy typ.stringKind = expression + + const structPrefix = "struct " + // After solidity 0.5.10, a new field of abi "internalType" + // is introduced. From that we can obtain the struct name + // user defined in the source code. + if internalType != "" && strings.HasPrefix(internalType, structPrefix) { + // Foo.Bar type definition is not allowed in golang, + // convert the format to FooBar + typ.TupleRawName = strings.ReplaceAll(internalType[len(structPrefix):], ".", "") + } + case "function": - typ.Kind = reflect.Array typ.T = FunctionTy typ.Size = 24 - typ.Type = reflect.ArrayOf(24, reflect.TypeOf(byte(0))) default: return Type{}, fmt.Errorf("unsupported arg type: %s", t) } @@ -211,7 +223,43 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { return } -// String implements Stringer +// GetType returns the reflection type of the ABI type. +func (t Type) GetType() reflect.Type { + switch t.T { + case IntTy: + return reflectIntType(false, t.Size) + case UintTy: + return reflectIntType(true, t.Size) + case BoolTy: + return reflect.TypeOf(false) + case StringTy: + return reflect.TypeOf("") + case SliceTy: + return reflect.SliceOf(t.Elem.GetType()) + case ArrayTy: + return reflect.ArrayOf(t.Size, t.Elem.GetType()) + case TupleTy: + return t.TupleType + case AddressTy: + return reflect.TypeOf(common.Address{}) + case FixedBytesTy: + return reflect.ArrayOf(t.Size, reflect.TypeOf(byte(0))) + case BytesTy: + return reflect.SliceOf(reflect.TypeOf(byte(0))) + case HashTy: + // hashtype currently not used + return reflect.ArrayOf(32, reflect.TypeOf(byte(0))) + case FixedPointTy: + // fixedpoint type currently not used + return reflect.ArrayOf(32, reflect.TypeOf(byte(0))) + case FunctionTy: + return reflect.ArrayOf(24, reflect.TypeOf(byte(0))) + default: + panic("Invalid type") + } +} + +// String implements Stringer. func (t Type) String() (out string) { return t.stringKind } @@ -293,7 +341,7 @@ func (t Type) pack(v reflect.Value) ([]byte, error) { return append(ret, tail...), nil default: - return packElement(t, v), nil + return packElement(t, v) } } @@ -333,7 +381,7 @@ func isDynamicType(t Type) bool { func getTypeSize(t Type) int { if t.T == ArrayTy && !isDynamicType(*t.Elem) { // Recursively calculate type size if it is a nested array - if t.Elem.T == ArrayTy { + if t.Elem.T == ArrayTy || t.Elem.T == TupleTy { return t.Size * getTypeSize(*t.Elem) } return t.Size * 32 @@ -346,3 +394,30 @@ func getTypeSize(t Type) int { } return 32 } + +// isLetter reports whether a given 'rune' is classified as a Letter. +// This method is copied from reflect/type.go +func isLetter(ch rune) bool { + return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= utf8.RuneSelf && unicode.IsLetter(ch) +} + +// isValidFieldName checks if a string is a valid (struct) field name or not. +// +// According to the language spec, a field name should be an identifier. +// +// identifier = letter { letter | unicode_digit } . +// letter = unicode_letter | "_" . +// This method is copied from reflect/type.go +func isValidFieldName(fieldName string) bool { + for i, c := range fieldName { + if i == 0 && !isLetter(c) { + return false + } + + if !(isLetter(c) || unicode.IsDigit(c)) { + return false + } + } + + return len(fieldName) > 0 +} diff --git a/accounts/abi/type_test.go b/accounts/abi/type_test.go index a87d5098..8c3aedca 100644 --- a/accounts/abi/type_test.go +++ b/accounts/abi/type_test.go @@ -21,8 +21,8 @@ import ( "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common" ) // typeWithoutStringer is a alias for the Type type which simply doesn't implement @@ -36,58 +36,58 @@ func TestTypeRegexp(t *testing.T) { components []ArgumentMarshaling kind Type }{ - {"bool", nil, Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}}, - {"bool[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]bool(nil)), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[]"}}, - {"bool[2]", nil, Type{Size: 2, Kind: reflect.Array, T: ArrayTy, Type: reflect.TypeOf([2]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[2]"}}, - {"bool[2][]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([][2]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][]"}}, - {"bool[][]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([][]bool{}), Elem: &Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][]"}}, - {"bool[][2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][]bool{}), Elem: &Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][2]"}}, - {"bool[2][2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][2]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][2]"}}, - {"bool[2][][2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][][2]bool{}), Elem: &Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([][2]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][]"}, stringKind: "bool[2][][2]"}}, - {"bool[2][2][2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][2][2]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][2]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][2]"}, stringKind: "bool[2][2][2]"}}, - {"bool[][][]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([][][]bool{}), Elem: &Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([][]bool{}), Elem: &Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][]"}, stringKind: "bool[][][]"}}, - {"bool[][2][]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([][2][]bool{}), Elem: &Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][]bool{}), Elem: &Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]bool{}), Elem: &Type{Kind: reflect.Bool, T: BoolTy, Type: reflect.TypeOf(bool(false)), stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][2]"}, stringKind: "bool[][2][]"}}, - {"int8", nil, Type{Kind: reflect.Int8, Type: int8T, Size: 8, T: IntTy, stringKind: "int8"}}, - {"int16", nil, Type{Kind: reflect.Int16, Type: int16T, Size: 16, T: IntTy, stringKind: "int16"}}, - {"int32", nil, Type{Kind: reflect.Int32, Type: int32T, Size: 32, T: IntTy, stringKind: "int32"}}, - {"int64", nil, Type{Kind: reflect.Int64, Type: int64T, Size: 64, T: IntTy, stringKind: "int64"}}, - {"int256", nil, Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: IntTy, stringKind: "int256"}}, - {"int8[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]int8{}), Elem: &Type{Kind: reflect.Int8, Type: int8T, Size: 8, T: IntTy, stringKind: "int8"}, stringKind: "int8[]"}}, - {"int8[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]int8{}), Elem: &Type{Kind: reflect.Int8, Type: int8T, Size: 8, T: IntTy, stringKind: "int8"}, stringKind: "int8[2]"}}, - {"int16[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]int16{}), Elem: &Type{Kind: reflect.Int16, Type: int16T, Size: 16, T: IntTy, stringKind: "int16"}, stringKind: "int16[]"}}, - {"int16[2]", nil, Type{Size: 2, Kind: reflect.Array, T: ArrayTy, Type: reflect.TypeOf([2]int16{}), Elem: &Type{Kind: reflect.Int16, Type: int16T, Size: 16, T: IntTy, stringKind: "int16"}, stringKind: "int16[2]"}}, - {"int32[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]int32{}), Elem: &Type{Kind: reflect.Int32, Type: int32T, Size: 32, T: IntTy, stringKind: "int32"}, stringKind: "int32[]"}}, - {"int32[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]int32{}), Elem: &Type{Kind: reflect.Int32, Type: int32T, Size: 32, T: IntTy, stringKind: "int32"}, stringKind: "int32[2]"}}, - {"int64[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]int64{}), Elem: &Type{Kind: reflect.Int64, Type: int64T, Size: 64, T: IntTy, stringKind: "int64"}, stringKind: "int64[]"}}, - {"int64[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]int64{}), Elem: &Type{Kind: reflect.Int64, Type: int64T, Size: 64, T: IntTy, stringKind: "int64"}, stringKind: "int64[2]"}}, - {"int256[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]*big.Int{}), Elem: &Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: IntTy, stringKind: "int256"}, stringKind: "int256[]"}}, - {"int256[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]*big.Int{}), Elem: &Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: IntTy, stringKind: "int256"}, stringKind: "int256[2]"}}, - {"uint8", nil, Type{Kind: reflect.Uint8, Type: uint8T, Size: 8, T: UintTy, stringKind: "uint8"}}, - {"uint16", nil, Type{Kind: reflect.Uint16, Type: uint16T, Size: 16, T: UintTy, stringKind: "uint16"}}, - {"uint32", nil, Type{Kind: reflect.Uint32, Type: uint32T, Size: 32, T: UintTy, stringKind: "uint32"}}, - {"uint64", nil, Type{Kind: reflect.Uint64, Type: uint64T, Size: 64, T: UintTy, stringKind: "uint64"}}, - {"uint256", nil, Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: UintTy, stringKind: "uint256"}}, - {"uint8[]", nil, Type{Kind: reflect.Slice, T: SliceTy, Type: reflect.TypeOf([]uint8{}), Elem: &Type{Kind: reflect.Uint8, Type: uint8T, Size: 8, T: UintTy, stringKind: "uint8"}, stringKind: "uint8[]"}}, - {"uint8[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]uint8{}), Elem: &Type{Kind: reflect.Uint8, Type: uint8T, Size: 8, T: UintTy, stringKind: "uint8"}, stringKind: "uint8[2]"}}, - {"uint16[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]uint16{}), Elem: &Type{Kind: reflect.Uint16, Type: uint16T, Size: 16, T: UintTy, stringKind: "uint16"}, stringKind: "uint16[]"}}, - {"uint16[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]uint16{}), Elem: &Type{Kind: reflect.Uint16, Type: uint16T, Size: 16, T: UintTy, stringKind: "uint16"}, stringKind: "uint16[2]"}}, - {"uint32[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]uint32{}), Elem: &Type{Kind: reflect.Uint32, Type: uint32T, Size: 32, T: UintTy, stringKind: "uint32"}, stringKind: "uint32[]"}}, - {"uint32[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]uint32{}), Elem: &Type{Kind: reflect.Uint32, Type: uint32T, Size: 32, T: UintTy, stringKind: "uint32"}, stringKind: "uint32[2]"}}, - {"uint64[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]uint64{}), Elem: &Type{Kind: reflect.Uint64, Type: uint64T, Size: 64, T: UintTy, stringKind: "uint64"}, stringKind: "uint64[]"}}, - {"uint64[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]uint64{}), Elem: &Type{Kind: reflect.Uint64, Type: uint64T, Size: 64, T: UintTy, stringKind: "uint64"}, stringKind: "uint64[2]"}}, - {"uint256[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]*big.Int{}), Elem: &Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: UintTy, stringKind: "uint256"}, stringKind: "uint256[]"}}, - {"uint256[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Type: reflect.TypeOf([2]*big.Int{}), Size: 2, Elem: &Type{Kind: reflect.Ptr, Type: bigT, Size: 256, T: UintTy, stringKind: "uint256"}, stringKind: "uint256[2]"}}, - {"bytes32", nil, Type{Kind: reflect.Array, T: FixedBytesTy, Size: 32, Type: reflect.TypeOf([32]byte{}), stringKind: "bytes32"}}, - {"bytes[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([][]byte{}), Elem: &Type{Kind: reflect.Slice, Type: reflect.TypeOf([]byte{}), T: BytesTy, stringKind: "bytes"}, stringKind: "bytes[]"}}, - {"bytes[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][]byte{}), Elem: &Type{T: BytesTy, Type: reflect.TypeOf([]byte{}), Kind: reflect.Slice, stringKind: "bytes"}, stringKind: "bytes[2]"}}, - {"bytes32[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([][32]byte{}), Elem: &Type{Kind: reflect.Array, Type: reflect.TypeOf([32]byte{}), T: FixedBytesTy, Size: 32, stringKind: "bytes32"}, stringKind: "bytes32[]"}}, - {"bytes32[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2][32]byte{}), Elem: &Type{Kind: reflect.Array, T: FixedBytesTy, Size: 32, Type: reflect.TypeOf([32]byte{}), stringKind: "bytes32"}, stringKind: "bytes32[2]"}}, - {"string", nil, Type{Kind: reflect.String, T: StringTy, Type: reflect.TypeOf(""), stringKind: "string"}}, - {"string[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]string{}), Elem: &Type{Kind: reflect.String, Type: reflect.TypeOf(""), T: StringTy, stringKind: "string"}, stringKind: "string[]"}}, - {"string[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]string{}), Elem: &Type{Kind: reflect.String, T: StringTy, Type: reflect.TypeOf(""), stringKind: "string"}, stringKind: "string[2]"}}, - {"address", nil, Type{Kind: reflect.Array, Type: addressT, Size: 20, T: AddressTy, stringKind: "address"}}, - {"address[]", nil, Type{T: SliceTy, Kind: reflect.Slice, Type: reflect.TypeOf([]common.Address{}), Elem: &Type{Kind: reflect.Array, Type: addressT, Size: 20, T: AddressTy, stringKind: "address"}, stringKind: "address[]"}}, - {"address[2]", nil, Type{Kind: reflect.Array, T: ArrayTy, Size: 2, Type: reflect.TypeOf([2]common.Address{}), Elem: &Type{Kind: reflect.Array, Type: addressT, Size: 20, T: AddressTy, stringKind: "address"}, stringKind: "address[2]"}}, + {"bool", nil, Type{T: BoolTy, stringKind: "bool"}}, + {"bool[]", nil, Type{T: SliceTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[]"}}, + {"bool[2]", nil, Type{Size: 2, T: ArrayTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[2]"}}, + {"bool[2][]", nil, Type{T: SliceTy, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][]"}}, + {"bool[][]", nil, Type{T: SliceTy, Elem: &Type{T: SliceTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][]"}}, + {"bool[][2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: SliceTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][2]"}}, + {"bool[2][2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][2]"}}, + {"bool[2][][2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: SliceTy, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][]"}, stringKind: "bool[2][][2]"}}, + {"bool[2][2][2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[2]"}, stringKind: "bool[2][2]"}, stringKind: "bool[2][2][2]"}}, + {"bool[][][]", nil, Type{T: SliceTy, Elem: &Type{T: SliceTy, Elem: &Type{T: SliceTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][]"}, stringKind: "bool[][][]"}}, + {"bool[][2][]", nil, Type{T: SliceTy, Elem: &Type{T: ArrayTy, Size: 2, Elem: &Type{T: SliceTy, Elem: &Type{T: BoolTy, stringKind: "bool"}, stringKind: "bool[]"}, stringKind: "bool[][2]"}, stringKind: "bool[][2][]"}}, + {"int8", nil, Type{Size: 8, T: IntTy, stringKind: "int8"}}, + {"int16", nil, Type{Size: 16, T: IntTy, stringKind: "int16"}}, + {"int32", nil, Type{Size: 32, T: IntTy, stringKind: "int32"}}, + {"int64", nil, Type{Size: 64, T: IntTy, stringKind: "int64"}}, + {"int256", nil, Type{Size: 256, T: IntTy, stringKind: "int256"}}, + {"int8[]", nil, Type{T: SliceTy, Elem: &Type{Size: 8, T: IntTy, stringKind: "int8"}, stringKind: "int8[]"}}, + {"int8[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 8, T: IntTy, stringKind: "int8"}, stringKind: "int8[2]"}}, + {"int16[]", nil, Type{T: SliceTy, Elem: &Type{Size: 16, T: IntTy, stringKind: "int16"}, stringKind: "int16[]"}}, + {"int16[2]", nil, Type{Size: 2, T: ArrayTy, Elem: &Type{Size: 16, T: IntTy, stringKind: "int16"}, stringKind: "int16[2]"}}, + {"int32[]", nil, Type{T: SliceTy, Elem: &Type{Size: 32, T: IntTy, stringKind: "int32"}, stringKind: "int32[]"}}, + {"int32[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 32, T: IntTy, stringKind: "int32"}, stringKind: "int32[2]"}}, + {"int64[]", nil, Type{T: SliceTy, Elem: &Type{Size: 64, T: IntTy, stringKind: "int64"}, stringKind: "int64[]"}}, + {"int64[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 64, T: IntTy, stringKind: "int64"}, stringKind: "int64[2]"}}, + {"int256[]", nil, Type{T: SliceTy, Elem: &Type{Size: 256, T: IntTy, stringKind: "int256"}, stringKind: "int256[]"}}, + {"int256[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 256, T: IntTy, stringKind: "int256"}, stringKind: "int256[2]"}}, + {"uint8", nil, Type{Size: 8, T: UintTy, stringKind: "uint8"}}, + {"uint16", nil, Type{Size: 16, T: UintTy, stringKind: "uint16"}}, + {"uint32", nil, Type{Size: 32, T: UintTy, stringKind: "uint32"}}, + {"uint64", nil, Type{Size: 64, T: UintTy, stringKind: "uint64"}}, + {"uint256", nil, Type{Size: 256, T: UintTy, stringKind: "uint256"}}, + {"uint8[]", nil, Type{T: SliceTy, Elem: &Type{Size: 8, T: UintTy, stringKind: "uint8"}, stringKind: "uint8[]"}}, + {"uint8[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 8, T: UintTy, stringKind: "uint8"}, stringKind: "uint8[2]"}}, + {"uint16[]", nil, Type{T: SliceTy, Elem: &Type{Size: 16, T: UintTy, stringKind: "uint16"}, stringKind: "uint16[]"}}, + {"uint16[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 16, T: UintTy, stringKind: "uint16"}, stringKind: "uint16[2]"}}, + {"uint32[]", nil, Type{T: SliceTy, Elem: &Type{Size: 32, T: UintTy, stringKind: "uint32"}, stringKind: "uint32[]"}}, + {"uint32[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 32, T: UintTy, stringKind: "uint32"}, stringKind: "uint32[2]"}}, + {"uint64[]", nil, Type{T: SliceTy, Elem: &Type{Size: 64, T: UintTy, stringKind: "uint64"}, stringKind: "uint64[]"}}, + {"uint64[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 64, T: UintTy, stringKind: "uint64"}, stringKind: "uint64[2]"}}, + {"uint256[]", nil, Type{T: SliceTy, Elem: &Type{Size: 256, T: UintTy, stringKind: "uint256"}, stringKind: "uint256[]"}}, + {"uint256[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 256, T: UintTy, stringKind: "uint256"}, stringKind: "uint256[2]"}}, + {"bytes32", nil, Type{T: FixedBytesTy, Size: 32, stringKind: "bytes32"}}, + {"bytes[]", nil, Type{T: SliceTy, Elem: &Type{T: BytesTy, stringKind: "bytes"}, stringKind: "bytes[]"}}, + {"bytes[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: BytesTy, stringKind: "bytes"}, stringKind: "bytes[2]"}}, + {"bytes32[]", nil, Type{T: SliceTy, Elem: &Type{T: FixedBytesTy, Size: 32, stringKind: "bytes32"}, stringKind: "bytes32[]"}}, + {"bytes32[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: FixedBytesTy, Size: 32, stringKind: "bytes32"}, stringKind: "bytes32[2]"}}, + {"string", nil, Type{T: StringTy, stringKind: "string"}}, + {"string[]", nil, Type{T: SliceTy, Elem: &Type{T: StringTy, stringKind: "string"}, stringKind: "string[]"}}, + {"string[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{T: StringTy, stringKind: "string"}, stringKind: "string[2]"}}, + {"address", nil, Type{Size: 20, T: AddressTy, stringKind: "address"}}, + {"address[]", nil, Type{T: SliceTy, Elem: &Type{Size: 20, T: AddressTy, stringKind: "address"}, stringKind: "address[]"}}, + {"address[2]", nil, Type{T: ArrayTy, Size: 2, Elem: &Type{Size: 20, T: AddressTy, stringKind: "address"}, stringKind: "address[2]"}}, // TODO when fixed types are implemented properly // {"fixed", nil, Type{}}, // {"fixed128x128", nil, Type{}}, @@ -95,18 +95,18 @@ 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 { + {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{T: TupleTy, TupleType: 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 { + TupleElems: []*Type{{T: IntTy, Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"a"}}}, + {"tuple with long name", []ArgumentMarshaling{{Name: "aTypicalParamName", Type: "int64"}}, Type{T: TupleTy, TupleType: 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"}}}, + TupleElems: []*Type{{T: IntTy, Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"aTypicalParamName"}}}, } for _, tt := range tests { - typ, err := NewType(tt.blob, tt.components) + typ, err := NewType(tt.blob, "", tt.components) if err != nil { t.Errorf("type %q: failed to parse type string: %v", tt.blob, err) } @@ -255,7 +255,7 @@ func TestTypeCheck(t *testing.T) { {"bytes", nil, [2]byte{0, 1}, "abi: cannot use array as type slice as argument"}, {"bytes", nil, common.Hash{1}, "abi: cannot use array as type slice as argument"}, {"string", nil, "hello world", ""}, - {"string", nil, string(""), ""}, + {"string", nil, "", ""}, {"string", nil, []byte{}, "abi: cannot use slice as type string as argument"}, {"bytes32[]", nil, [][32]byte{{}}, ""}, {"function", nil, [24]byte{}, ""}, @@ -281,7 +281,7 @@ func TestTypeCheck(t *testing.T) { B *big.Int }{{big.NewInt(0), big.NewInt(0)}, {big.NewInt(0), big.NewInt(0)}}, ""}, } { - typ, err := NewType(test.typ, test.components) + typ, err := NewType(test.typ, "", test.components) if err != nil && len(test.err) == 0 { t.Fatal("unexpected parse error:", err) } else if err != nil && len(test.err) != 0 { @@ -306,3 +306,63 @@ func TestTypeCheck(t *testing.T) { } } } + +func TestInternalType(t *testing.T) { + components := []ArgumentMarshaling{{Name: "a", Type: "int64"}} + internalType := "struct a.b[]" + kind := Type{ + T: TupleTy, + TupleType: reflect.TypeOf(struct { + A int64 `json:"a"` + }{}), + stringKind: "(int64)", + TupleRawName: "ab[]", + TupleElems: []*Type{{T: IntTy, Size: 64, stringKind: "int64"}}, + TupleRawNames: []string{"a"}, + } + + blob := "tuple" + typ, err := NewType(blob, internalType, components) + if err != nil { + t.Errorf("type %q: failed to parse type string: %v", blob, err) + } + if !reflect.DeepEqual(typ, kind) { + t.Errorf("type %q: parsed type mismatch:\nGOT %s\nWANT %s ", blob, spew.Sdump(typeWithoutStringer(typ)), spew.Sdump(typeWithoutStringer(kind))) + } +} + +func TestGetTypeSize(t *testing.T) { + var testCases = []struct { + typ string + components []ArgumentMarshaling + typSize int + }{ + // simple array + {"uint256[2]", nil, 32 * 2}, + {"address[3]", nil, 32 * 3}, + {"bytes32[4]", nil, 32 * 4}, + // array array + {"uint256[2][3][4]", nil, 32 * (2 * 3 * 4)}, + // array tuple + {"tuple[2]", []ArgumentMarshaling{{Name: "x", Type: "bytes32"}, {Name: "y", Type: "bytes32"}}, (32 * 2) * 2}, + // simple tuple + {"tuple", []ArgumentMarshaling{{Name: "x", Type: "uint256"}, {Name: "y", Type: "uint256"}}, 32 * 2}, + // tuple array + {"tuple", []ArgumentMarshaling{{Name: "x", Type: "bytes32[2]"}}, 32 * 2}, + // tuple tuple + {"tuple", []ArgumentMarshaling{{Name: "x", Type: "tuple", Components: []ArgumentMarshaling{{Name: "x", Type: "bytes32"}}}}, 32}, + {"tuple", []ArgumentMarshaling{{Name: "x", Type: "tuple", Components: []ArgumentMarshaling{{Name: "x", Type: "bytes32[2]"}, {Name: "y", Type: "uint256"}}}}, 32 * (2 + 1)}, + } + + for i, data := range testCases { + typ, err := NewType(data.typ, "", data.components) + if err != nil { + t.Errorf("type %q: failed to parse type string: %v", data.typ, err) + } + + result := getTypeSize(typ) + if result != data.typSize { + t.Errorf("case %d type %q: get type size error: actual: %d expected: %d", i, data.typ, result, data.typSize) + } + } +} diff --git a/accounts/abi/unpack.go b/accounts/abi/unpack.go index 3d95ea6a..80078929 100644 --- a/accounts/abi/unpack.go +++ b/accounts/abi/unpack.go @@ -22,56 +22,58 @@ import ( "math/big" "reflect" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) var ( - maxUint256 = big.NewInt(0).Add( - big.NewInt(0).Exp(big.NewInt(2), big.NewInt(256), nil), - big.NewInt(-1)) - maxInt256 = big.NewInt(0).Add( - big.NewInt(0).Exp(big.NewInt(2), big.NewInt(255), nil), - big.NewInt(-1)) + // MaxUint256 is the maximum value that can be represented by a uint256. + MaxUint256 = new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 256), common.Big1) + // MaxInt256 is the maximum value that can be represented by a int256. + MaxInt256 = new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 255), common.Big1) ) -// reads the integer based on its kind -func readInteger(typ byte, kind reflect.Kind, b []byte) interface{} { - switch kind { - case reflect.Uint8: - return b[len(b)-1] - case reflect.Uint16: - return binary.BigEndian.Uint16(b[len(b)-2:]) - case reflect.Uint32: - return binary.BigEndian.Uint32(b[len(b)-4:]) - case reflect.Uint64: - return binary.BigEndian.Uint64(b[len(b)-8:]) - case reflect.Int8: +// ReadInteger reads the integer based on its kind and returns the appropriate value. +func ReadInteger(typ Type, b []byte) interface{} { + if typ.T == UintTy { + switch typ.Size { + case 8: + return b[len(b)-1] + case 16: + return binary.BigEndian.Uint16(b[len(b)-2:]) + case 32: + return binary.BigEndian.Uint32(b[len(b)-4:]) + case 64: + return binary.BigEndian.Uint64(b[len(b)-8:]) + default: + // the only case left for unsigned integer is uint256. + return new(big.Int).SetBytes(b) + } + } + switch typ.Size { + case 8: return int8(b[len(b)-1]) - case reflect.Int16: + case 16: return int16(binary.BigEndian.Uint16(b[len(b)-2:])) - case reflect.Int32: + case 32: return int32(binary.BigEndian.Uint32(b[len(b)-4:])) - case reflect.Int64: + case 64: return int64(binary.BigEndian.Uint64(b[len(b)-8:])) default: - // the only case lefts for integer is int256/uint256. - // big.SetBytes can't tell if a number is negative, positive on itself. + // the only case left for integer is int256 + // big.SetBytes can't tell if a number is negative or positive in itself. // On EVM, if the returned number > max int256, it is negative. + // A number is > max int256 if the bit at position 255 is set. ret := new(big.Int).SetBytes(b) - if typ == UintTy { - return ret - } - - if ret.Cmp(maxInt256) > 0 { - ret.Add(maxUint256, big.NewInt(0).Neg(ret)) - ret.Add(ret, big.NewInt(1)) + if ret.Bit(255) == 1 { + ret.Add(MaxUint256, new(big.Int).Neg(ret)) + ret.Add(ret, common.Big1) ret.Neg(ret) } return ret } } -// reads a bool +// readBool reads a bool. func readBool(word []byte) (bool, error) { for _, b := range word[:31] { if b != 0 { @@ -89,7 +91,8 @@ func readBool(word []byte) (bool, error) { } // A function type is simply the address with the function selection signature at the end. -// This enforces that standard by always presenting it as a 24-array (address + sig = 24 bytes) +// +// readFunctionType enforces that standard by always presenting it as a 24-array (address + sig = 24 bytes) func readFunctionType(t Type, word []byte) (funcTy [24]byte, err error) { if t.T != FunctionTy { return [24]byte{}, fmt.Errorf("abi: invalid type in call to make function type byte array") @@ -102,20 +105,19 @@ func readFunctionType(t Type, word []byte) (funcTy [24]byte, err error) { return } -// through reflection, creates a fixed array to be read from -func readFixedBytes(t Type, word []byte) (interface{}, error) { +// ReadFixedBytes uses reflection to create a fixed array to be read from. +func ReadFixedBytes(t Type, word []byte) (interface{}, error) { if t.T != FixedBytesTy { return nil, fmt.Errorf("abi: invalid type in call to make fixed byte array") } // convert - array := reflect.New(t.Type).Elem() + array := reflect.New(t.GetType()).Elem() reflect.Copy(array, reflect.ValueOf(word[0:t.Size])) return array.Interface(), nil - } -// iteratively unpack elements +// forEachUnpack iteratively unpack elements. func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error) { if size < 0 { return nil, fmt.Errorf("cannot marshal input to array, size is negative (%d)", size) @@ -129,10 +131,10 @@ func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error) if t.T == SliceTy { // declare our slice - refSlice = reflect.MakeSlice(t.Type, size, size) + refSlice = reflect.MakeSlice(t.GetType(), size, size) } else if t.T == ArrayTy { // declare our array - refSlice = reflect.New(t.Type).Elem() + refSlice = reflect.New(t.GetType()).Elem() } else { return nil, fmt.Errorf("abi: invalid type in array/slice unpacking stage") } @@ -156,7 +158,7 @@ func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error) } func forTupleUnpack(t Type, output []byte) (interface{}, error) { - retval := reflect.New(t.Type).Elem() + retval := reflect.New(t.GetType()).Elem() virtualArgs := 0 for index, elem := range t.TupleElems { marshalledValue, err := toGoType((index+virtualArgs)*32, *elem, output) @@ -216,21 +218,23 @@ func toGoType(index int, t Type, output []byte) (interface{}, error) { return nil, err } return forTupleUnpack(t, output[begin:]) - } else { - return forTupleUnpack(t, output[index:]) } + return forTupleUnpack(t, output[index:]) case SliceTy: return forEachUnpack(t, output[begin:], 0, length) case ArrayTy: if isDynamicType(*t.Elem) { - offset := int64(binary.BigEndian.Uint64(returnOutput[len(returnOutput)-8:])) + offset := binary.BigEndian.Uint64(returnOutput[len(returnOutput)-8:]) + if offset > uint64(len(output)) { + return nil, fmt.Errorf("abi: toGoType offset greater than output length: offset: %d, len(output): %d", offset, len(output)) + } return forEachUnpack(t, output[offset:], 0, t.Size) } return forEachUnpack(t, output[index:], 0, t.Size) case StringTy: // variable arrays are written at the end of the return bytes return string(output[begin : begin+length]), nil case IntTy, UintTy: - return readInteger(t.T, t.Kind, returnOutput), nil + return ReadInteger(t, returnOutput), nil case BoolTy: return readBool(returnOutput) case AddressTy: @@ -240,7 +244,7 @@ func toGoType(index int, t Type, output []byte) (interface{}, error) { case BytesTy: return output[begin : begin+length], nil case FixedBytesTy: - return readFixedBytes(t, returnOutput) + return ReadFixedBytes(t, returnOutput) case FunctionTy: return readFunctionType(t, returnOutput) default: @@ -248,9 +252,9 @@ func toGoType(index int, t Type, output []byte) (interface{}, error) { } } -// interprets a 32 byte slice as an offset and then determines which indice to look to decode the type. +// lengthPrefixPointsTo interprets a 32 byte slice as an offset and then determines which indices to look to decode the type. func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err error) { - bigOffsetEnd := big.NewInt(0).SetBytes(output[index : index+32]) + bigOffsetEnd := new(big.Int).SetBytes(output[index : index+32]) bigOffsetEnd.Add(bigOffsetEnd, common.Big32) outputLength := big.NewInt(int64(len(output))) @@ -263,11 +267,9 @@ func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err } offsetEnd := int(bigOffsetEnd.Uint64()) - lengthBig := big.NewInt(0).SetBytes(output[offsetEnd-32 : offsetEnd]) + lengthBig := new(big.Int).SetBytes(output[offsetEnd-32 : offsetEnd]) - totalSize := big.NewInt(0) - totalSize.Add(totalSize, bigOffsetEnd) - totalSize.Add(totalSize, lengthBig) + totalSize := new(big.Int).Add(bigOffsetEnd, lengthBig) if totalSize.BitLen() > 63 { return 0, 0, fmt.Errorf("abi: length larger than int64: %v", totalSize) } @@ -282,10 +284,10 @@ func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err // tuplePointsTo resolves the location reference for dynamic tuple. func tuplePointsTo(index int, output []byte) (start int, err error) { - offset := big.NewInt(0).SetBytes(output[index : index+32]) + offset := new(big.Int).SetBytes(output[index : index+32]) outputLen := big.NewInt(int64(len(output))) - if offset.Cmp(big.NewInt(int64(len(output)))) > 0 { + if offset.Cmp(outputLen) > 0 { return 0, fmt.Errorf("abi: cannot marshal in to go slice: offset %v would go over slice boundary (len=%v)", offset, outputLen) } if offset.BitLen() > 63 { diff --git a/accounts/abi/unpack_test.go b/accounts/abi/unpack_test.go index 35134427..363e0cd5 100644 --- a/accounts/abi/unpack_test.go +++ b/accounts/abi/unpack_test.go @@ -26,10 +26,36 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" ) +// TestUnpack tests the general pack/unpack tests in packing_test.go +func TestUnpack(t *testing.T) { + for i, test := range packUnpackTests { + t.Run(strconv.Itoa(i)+" "+test.def, func(t *testing.T) { + //Unpack + def := fmt.Sprintf(`[{ "name" : "method", "type": "function", "outputs": %s}]`, test.def) + abi, err := JSON(strings.NewReader(def)) + if err != nil { + t.Fatalf("invalid ABI definition %s: %v", def, err) + } + encb, err := hex.DecodeString(test.packed) + if err != nil { + t.Fatalf("invalid hex %s: %v", test.packed, err) + } + out, err := abi.Unpack("method", encb) + if err != nil { + t.Errorf("test %d (%v) failed: %v", i, test.def, err) + return + } + if !reflect.DeepEqual(test.unpacked, ConvertType(out[0], test.unpacked)) { + t.Errorf("test %d (%v) failed: expected %v, got %v", i, test.def, test.unpacked, out[0]) + } + }) + } +} + type unpackTest struct { def string // ABI definition JSON enc string // evm return data @@ -51,16 +77,7 @@ func (test unpackTest) checkError(err error) error { } var unpackTests = []unpackTest{ - { - def: `[{ "type": "bool" }]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001", - want: true, - }, - { - def: `[{ "type": "bool" }]`, - enc: "0000000000000000000000000000000000000000000000000000000000000000", - want: false, - }, + // Bools { def: `[{ "type": "bool" }]`, enc: "0000000000000000000000000000000000000000000000000001000000000001", @@ -73,11 +90,7 @@ var unpackTests = []unpackTest{ want: false, err: "abi: improperly encoded boolean value", }, - { - def: `[{"type": "uint32"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001", - want: uint32(1), - }, + // Integers { def: `[{"type": "uint32"}]`, enc: "0000000000000000000000000000000000000000000000000000000000000001", @@ -90,16 +103,6 @@ var unpackTests = []unpackTest{ want: uint16(0), err: "abi: cannot unmarshal *big.Int in to uint16", }, - { - def: `[{"type": "uint17"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001", - want: big.NewInt(1), - }, - { - def: `[{"type": "int32"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001", - want: int32(1), - }, { def: `[{"type": "int32"}]`, enc: "0000000000000000000000000000000000000000000000000000000000000001", @@ -112,36 +115,10 @@ var unpackTests = []unpackTest{ want: int16(0), err: "abi: cannot unmarshal *big.Int in to int16", }, - { - def: `[{"type": "int17"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001", - want: big.NewInt(1), - }, - { - def: `[{"type": "int256"}]`, - enc: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - want: big.NewInt(-1), - }, - { - def: `[{"type": "address"}]`, - enc: "0000000000000000000000000100000000000000000000000000000000000000", - want: common.Address{1}, - }, - { - def: `[{"type": "bytes32"}]`, - enc: "0100000000000000000000000000000000000000000000000000000000000000", - want: [32]byte{1, 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}, - }, { def: `[{"type": "bytes"}]`, enc: "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200100000000000000000000000000000000000000000000000000000000000000", - want: common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), - }, - { - def: `[{"type": "bytes"}]`, - enc: "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200100000000000000000000000000000000000000000000000000000000000000", - want: [32]byte{}, - err: "abi: cannot unmarshal []uint8 in to [32]uint8", + want: [32]byte{1}, }, { def: `[{"type": "bytes32"}]`, @@ -149,219 +126,13 @@ var unpackTests = []unpackTest{ want: []byte(nil), err: "abi: cannot unmarshal [32]uint8 in to []uint8", }, - { - def: `[{"type": "bytes32"}]`, - enc: "0100000000000000000000000000000000000000000000000000000000000000", - want: [32]byte{1, 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}, - }, - { - def: `[{"type": "function"}]`, - enc: "0100000000000000000000000000000000000000000000000000000000000000", - want: [24]byte{1}, - }, - // slices - { - def: `[{"type": "uint8[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []uint8{1, 2}, - }, - { - def: `[{"type": "uint8[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]uint8{1, 2}, - }, - // multi dimensional, if these pass, all types that don't require length prefix should pass - { - def: `[{"type": "uint8[][]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [][]uint8{{1, 2}, {1, 2}}, - }, - { - def: `[{"type": "uint8[][]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", - want: [][]uint8{{1, 2}, {1, 2, 3}}, - }, - { - def: `[{"type": "uint8[2][2]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2][2]uint8{{1, 2}, {1, 2}}, - }, - { - def: `[{"type": "uint8[][2]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - want: [2][]uint8{{1}, {1}}, - }, - { - def: `[{"type": "uint8[2][]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [][2]uint8{{1, 2}}, - }, - { - def: `[{"type": "uint8[2][]"}]`, - enc: "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [][2]uint8{{1, 2}, {1, 2}}, - }, - { - def: `[{"type": "uint16[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []uint16{1, 2}, - }, - { - def: `[{"type": "uint16[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]uint16{1, 2}, - }, - { - def: `[{"type": "uint32[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []uint32{1, 2}, - }, - { - def: `[{"type": "uint32[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]uint32{1, 2}, - }, - { - def: `[{"type": "uint32[2][3][4]"}]`, - enc: "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000018", - want: [4][3][2]uint32{{{1, 2}, {3, 4}, {5, 6}}, {{7, 8}, {9, 10}, {11, 12}}, {{13, 14}, {15, 16}, {17, 18}}, {{19, 20}, {21, 22}, {23, 24}}}, - }, - { - def: `[{"type": "uint64[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []uint64{1, 2}, - }, - { - def: `[{"type": "uint64[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]uint64{1, 2}, - }, - { - def: `[{"type": "uint256[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []*big.Int{big.NewInt(1), big.NewInt(2)}, - }, - { - def: `[{"type": "uint256[3]"}]`, - enc: "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", - want: [3]*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, - }, - { - def: `[{"type": "string[4]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000548656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576f726c64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b476f2d657468657265756d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008457468657265756d000000000000000000000000000000000000000000000000", - want: [4]string{"Hello", "World", "Go-ethereum", "Ethereum"}, - }, - { - def: `[{"type": "string[]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008457468657265756d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b676f2d657468657265756d000000000000000000000000000000000000000000", - want: []string{"Ethereum", "go-ethereum"}, - }, - { - def: `[{"type": "bytes[]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003f0f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f0f0f00000000000000000000000000000000000000000000000000000000000", - want: [][]byte{{0xf0, 0xf0, 0xf0}, {0xf0, 0xf0, 0xf0}}, - }, - { - def: `[{"type": "uint256[2][][]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e8", - want: [][][2]*big.Int{{{big.NewInt(1), big.NewInt(200)}, {big.NewInt(1), big.NewInt(1000)}}, {{big.NewInt(1), big.NewInt(200)}, {big.NewInt(1), big.NewInt(1000)}}}, - }, - { - def: `[{"type": "int8[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []int8{1, 2}, - }, - { - def: `[{"type": "int8[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]int8{1, 2}, - }, - { - def: `[{"type": "int16[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []int16{1, 2}, - }, - { - def: `[{"type": "int16[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]int16{1, 2}, - }, - { - def: `[{"type": "int32[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []int32{1, 2}, - }, - { - def: `[{"type": "int32[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]int32{1, 2}, - }, - { - def: `[{"type": "int64[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []int64{1, 2}, - }, - { - def: `[{"type": "int64[2]"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: [2]int64{1, 2}, - }, - { - def: `[{"type": "int256[]"}]`, - enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: []*big.Int{big.NewInt(1), big.NewInt(2)}, - }, - { - def: `[{"type": "int256[3]"}]`, - enc: "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", - want: [3]*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, - }, - // struct outputs - { - def: `[{"name":"int1","type":"int256"},{"name":"int2","type":"int256"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: struct { - Int1 *big.Int - Int2 *big.Int - }{big.NewInt(1), big.NewInt(2)}, - }, - { - def: `[{"name":"int_one","type":"int256"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: struct { - IntOne *big.Int - }{big.NewInt(1)}, - }, - { - def: `[{"name":"int__one","type":"int256"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: struct { - IntOne *big.Int - }{big.NewInt(1)}, - }, - { - def: `[{"name":"int_one_","type":"int256"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: struct { - IntOne *big.Int - }{big.NewInt(1)}, - }, - { - def: `[{"name":"int_one","type":"int256"}, {"name":"intone","type":"int256"}]`, - enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - want: struct { - IntOne *big.Int - Intone *big.Int - }{big.NewInt(1), big.NewInt(2)}, - }, { def: `[{"name":"___","type":"int256"}]`, enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", want: struct { IntOne *big.Int Intone *big.Int - }{}, - err: "abi: purely underscored output cannot unpack to struct", + }{IntOne: big.NewInt(1)}, }, { def: `[{"name":"int_one","type":"int256"},{"name":"IntOne","type":"int256"}]`, @@ -408,22 +179,64 @@ var unpackTests = []unpackTest{ }{}, err: "abi: purely underscored output cannot unpack to struct", }, + // Make sure only the first argument is consumed + { + def: `[{"name":"int_one","type":"int256"}]`, + enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + want: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"name":"int__one","type":"int256"}]`, + enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + want: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"name":"int_one_","type":"int256"}]`, + enc: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + want: struct { + IntOne *big.Int + }{big.NewInt(1)}, + }, + { + def: `[{"type":"bool"}]`, + enc: "", + want: false, + err: "abi: attempting to unmarshall an empty string while arguments are expected", + }, + { + def: `[{"type":"bytes32","indexed":true},{"type":"uint256","indexed":false}]`, + enc: "", + want: false, + err: "abi: attempting to unmarshall an empty string while arguments are expected", + }, + { + def: `[{"type":"bool","indexed":true},{"type":"uint64","indexed":true}]`, + enc: "", + want: false, + }, } -func TestUnpack(t *testing.T) { +// TestLocalUnpackTests runs test specially designed only for unpacking. +// All test cases that can be used to test packing and unpacking should move to packing_test.go +func TestLocalUnpackTests(t *testing.T) { for i, test := range unpackTests { t.Run(strconv.Itoa(i), func(t *testing.T) { - def := fmt.Sprintf(`[{ "name" : "method", "outputs": %s}]`, test.def) + //Unpack + def := fmt.Sprintf(`[{ "name" : "method", "type": "function", "outputs": %s}]`, test.def) abi, err := JSON(strings.NewReader(def)) if err != nil { t.Fatalf("invalid ABI definition %s: %v", def, err) } encb, err := hex.DecodeString(test.enc) if err != nil { - t.Fatalf("invalid hex: %s" + test.enc) + t.Fatalf("invalid hex %s: %v", test.enc, err) } outptr := reflect.New(reflect.TypeOf(test.want)) - err = abi.Unpack(outptr.Interface(), "method", encb) + err = abi.UnpackIntoInterface(outptr.Interface(), "method", encb) if err := test.checkError(err); err != nil { t.Errorf("test %d (%v) failed: %v", i, test.def, err) return @@ -436,7 +249,7 @@ func TestUnpack(t *testing.T) { } } -func TestUnpackSetDynamicArrayOutput(t *testing.T) { +func TestUnpackIntoInterfaceSetDynamicArrayOutput(t *testing.T) { abi, err := JSON(strings.NewReader(`[{"constant":true,"inputs":[],"name":"testDynamicFixedBytes15","outputs":[{"name":"","type":"bytes15[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"testDynamicFixedBytes32","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"}]`)) if err != nil { t.Fatal(err) @@ -451,7 +264,7 @@ func TestUnpackSetDynamicArrayOutput(t *testing.T) { ) // test 32 - err = abi.Unpack(&out32, "testDynamicFixedBytes32", marshalledReturn32) + err = abi.UnpackIntoInterface(&out32, "testDynamicFixedBytes32", marshalledReturn32) if err != nil { t.Fatal(err) } @@ -468,7 +281,7 @@ func TestUnpackSetDynamicArrayOutput(t *testing.T) { } // test 15 - err = abi.Unpack(&out15, "testDynamicFixedBytes32", marshalledReturn15) + err = abi.UnpackIntoInterface(&out15, "testDynamicFixedBytes32", marshalledReturn15) if err != nil { t.Fatal(err) } @@ -492,7 +305,7 @@ type methodMultiOutput struct { func methodMultiReturn(require *require.Assertions) (ABI, []byte, methodMultiOutput) { const definition = `[ - { "name" : "multi", "constant" : false, "outputs": [ { "name": "Int", "type": "uint256" }, { "name": "String", "type": "string" } ] }]` + { "name" : "multi", "type": "function", "outputs": [ { "name": "Int", "type": "uint256" }, { "name": "String", "type": "string" } ] }]` var expected = methodMultiOutput{big.NewInt(1), "hello"} abi, err := JSON(strings.NewReader(definition)) @@ -539,6 +352,11 @@ func TestMethodMultiReturn(t *testing.T) { &[]interface{}{&expected.Int, &expected.String}, "", "Can unpack into a slice", + }, { + &[]interface{}{&bigint, ""}, + &[]interface{}{&expected.Int, expected.String}, + "", + "Can unpack into a slice without indirection", }, { &[2]interface{}{&bigint, new(string)}, &[2]interface{}{&expected.Int, &expected.String}, @@ -562,14 +380,14 @@ func TestMethodMultiReturn(t *testing.T) { }, { &[]interface{}{new(int)}, &[]interface{}{}, - "abi: insufficient number of elements in the list/array for unpack, want 2, got 1", + "abi: insufficient number of arguments for unpack, want 2, got 1", "Can not unpack into a slice with wrong types", }} for _, tc := range testCases { tc := tc t.Run(tc.name, func(t *testing.T) { require := require.New(t) - err := abi.Unpack(tc.dest, "multi", data) + err := abi.UnpackIntoInterface(tc.dest, "multi", data) if tc.error == "" { require.Nil(err, "Should be able to unpack method outputs.") require.Equal(tc.expected, tc.dest) @@ -581,7 +399,7 @@ func TestMethodMultiReturn(t *testing.T) { } func TestMultiReturnWithArray(t *testing.T) { - const definition = `[{"name" : "multi", "outputs": [{"type": "uint64[3]"}, {"type": "uint64"}]}]` + const definition = `[{"name" : "multi", "type": "function", "outputs": [{"type": "uint64[3]"}, {"type": "uint64"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { t.Fatal(err) @@ -592,7 +410,7 @@ func TestMultiReturnWithArray(t *testing.T) { ret1, ret1Exp := new([3]uint64), [3]uint64{9, 9, 9} ret2, ret2Exp := new(uint64), uint64(8) - if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { + if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { t.Fatal(err) } if !reflect.DeepEqual(*ret1, ret1Exp) { @@ -604,19 +422,19 @@ func TestMultiReturnWithArray(t *testing.T) { } func TestMultiReturnWithStringArray(t *testing.T) { - const definition = `[{"name" : "multi", "outputs": [{"name": "","type": "uint256[3]"},{"name": "","type": "address"},{"name": "","type": "string[2]"},{"name": "","type": "bool"}]}]` + const definition = `[{"name" : "multi", "type": "function", "outputs": [{"name": "","type": "uint256[3]"},{"name": "","type": "address"},{"name": "","type": "string[2]"},{"name": "","type": "bool"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { t.Fatal(err) } buff := new(bytes.Buffer) buff.Write(common.Hex2Bytes("000000000000000000000000000000000000000000000000000000005c1b78ea0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000001a055690d9db80000000000000000000000000000ab1257528b3782fb40d7ed5f72e624b744dffb2f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008457468657265756d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001048656c6c6f2c20457468657265756d2100000000000000000000000000000000")) - temp, _ := big.NewInt(0).SetString("30000000000000000000", 10) + temp, _ := new(big.Int).SetString("30000000000000000000", 10) ret1, ret1Exp := new([3]*big.Int), [3]*big.Int{big.NewInt(1545304298), big.NewInt(6), temp} ret2, ret2Exp := new(common.Address), common.HexToAddress("ab1257528b3782fb40d7ed5f72e624b744dffb2f") ret3, ret3Exp := new([2]string), [2]string{"Ethereum", "Hello, Ethereum!"} ret4, ret4Exp := new(bool), false - if err := abi.Unpack(&[]interface{}{ret1, ret2, ret3, ret4}, "multi", buff.Bytes()); err != nil { + if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2, ret3, ret4}, "multi", buff.Bytes()); err != nil { t.Fatal(err) } if !reflect.DeepEqual(*ret1, ret1Exp) { @@ -634,7 +452,7 @@ func TestMultiReturnWithStringArray(t *testing.T) { } func TestMultiReturnWithStringSlice(t *testing.T) { - const definition = `[{"name" : "multi", "outputs": [{"name": "","type": "string[]"},{"name": "","type": "uint256[]"}]}]` + const definition = `[{"name" : "multi", "type": "function", "outputs": [{"name": "","type": "string[]"},{"name": "","type": "uint256[]"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { t.Fatal(err) @@ -654,7 +472,7 @@ func TestMultiReturnWithStringSlice(t *testing.T) { buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000065")) // output[1][1] value ret1, ret1Exp := new([]string), []string{"ethereum", "go-ethereum"} ret2, ret2Exp := new([]*big.Int), []*big.Int{big.NewInt(100), big.NewInt(101)} - if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { + if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { t.Fatal(err) } if !reflect.DeepEqual(*ret1, ret1Exp) { @@ -670,7 +488,7 @@ func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { // values of nested static arrays count towards the size as well, and any element following // after such nested array argument should be read with the correct offset, // so that it does not read content from the previous array argument. - const definition = `[{"name" : "multi", "outputs": [{"type": "uint64[3][2][4]"}, {"type": "uint64"}]}]` + const definition = `[{"name" : "multi", "type": "function", "outputs": [{"type": "uint64[3][2][4]"}, {"type": "uint64"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { t.Fatal(err) @@ -694,7 +512,7 @@ func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { {{0x411, 0x412, 0x413}, {0x421, 0x422, 0x423}}, } ret2, ret2Exp := new(uint64), uint64(0x9876) - if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { + if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { t.Fatal(err) } if !reflect.DeepEqual(*ret1, ret1Exp) { @@ -707,15 +525,15 @@ func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { func TestUnmarshal(t *testing.T) { const definition = `[ - { "name" : "int", "constant" : false, "outputs": [ { "type": "uint256" } ] }, - { "name" : "bool", "constant" : false, "outputs": [ { "type": "bool" } ] }, - { "name" : "bytes", "constant" : false, "outputs": [ { "type": "bytes" } ] }, - { "name" : "fixed", "constant" : false, "outputs": [ { "type": "bytes32" } ] }, - { "name" : "multi", "constant" : false, "outputs": [ { "type": "bytes" }, { "type": "bytes" } ] }, - { "name" : "intArraySingle", "constant" : false, "outputs": [ { "type": "uint256[3]" } ] }, - { "name" : "addressSliceSingle", "constant" : false, "outputs": [ { "type": "address[]" } ] }, - { "name" : "addressSliceDouble", "constant" : false, "outputs": [ { "name": "a", "type": "address[]" }, { "name": "b", "type": "address[]" } ] }, - { "name" : "mixedBytes", "constant" : true, "outputs": [ { "name": "a", "type": "bytes" }, { "name": "b", "type": "bytes32" } ] }]` + { "name" : "int", "type": "function", "outputs": [ { "type": "uint256" } ] }, + { "name" : "bool", "type": "function", "outputs": [ { "type": "bool" } ] }, + { "name" : "bytes", "type": "function", "outputs": [ { "type": "bytes" } ] }, + { "name" : "fixed", "type": "function", "outputs": [ { "type": "bytes32" } ] }, + { "name" : "multi", "type": "function", "outputs": [ { "type": "bytes" }, { "type": "bytes" } ] }, + { "name" : "intArraySingle", "type": "function", "outputs": [ { "type": "uint256[3]" } ] }, + { "name" : "addressSliceSingle", "type": "function", "outputs": [ { "type": "address[]" } ] }, + { "name" : "addressSliceDouble", "type": "function", "outputs": [ { "name": "a", "type": "address[]" }, { "name": "b", "type": "address[]" } ] }, + { "name" : "mixedBytes", "type": "function", "stateMutability" : "view", "outputs": [ { "name": "a", "type": "bytes" }, { "name": "b", "type": "bytes32" } ] }]` abi, err := JSON(strings.NewReader(definition)) if err != nil { @@ -733,7 +551,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000a")) buff.Write(common.Hex2Bytes("0102000000000000000000000000000000000000000000000000000000000000")) - err = abi.Unpack(&mixedBytes, "mixedBytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&mixedBytes, "mixedBytes", buff.Bytes()) if err != nil { t.Error(err) } else { @@ -748,7 +566,7 @@ func TestUnmarshal(t *testing.T) { // marshal int var Int *big.Int - err = abi.Unpack(&Int, "int", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")) + err = abi.UnpackIntoInterface(&Int, "int", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")) if err != nil { t.Error(err) } @@ -759,7 +577,7 @@ func TestUnmarshal(t *testing.T) { // marshal bool var Bool bool - err = abi.Unpack(&Bool, "bool", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")) + err = abi.UnpackIntoInterface(&Bool, "bool", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")) if err != nil { t.Error(err) } @@ -776,7 +594,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(bytesOut) var Bytes []byte - err = abi.Unpack(&Bytes, "bytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes()) if err != nil { t.Error(err) } @@ -792,7 +610,7 @@ func TestUnmarshal(t *testing.T) { bytesOut = common.RightPadBytes([]byte("hello"), 64) buff.Write(bytesOut) - err = abi.Unpack(&Bytes, "bytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes()) if err != nil { t.Error(err) } @@ -808,7 +626,7 @@ func TestUnmarshal(t *testing.T) { bytesOut = common.RightPadBytes([]byte("hello"), 64) buff.Write(bytesOut) - err = abi.Unpack(&Bytes, "bytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes()) if err != nil { t.Error(err) } @@ -818,7 +636,7 @@ func TestUnmarshal(t *testing.T) { } // marshal dynamic bytes output empty - err = abi.Unpack(&Bytes, "bytes", nil) + err = abi.UnpackIntoInterface(&Bytes, "bytes", nil) if err == nil { t.Error("expected error") } @@ -829,7 +647,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000005")) buff.Write(common.RightPadBytes([]byte("hello"), 32)) - err = abi.Unpack(&Bytes, "bytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes()) if err != nil { t.Error(err) } @@ -843,7 +661,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(common.RightPadBytes([]byte("hello"), 32)) var hash common.Hash - err = abi.Unpack(&hash, "fixed", buff.Bytes()) + err = abi.UnpackIntoInterface(&hash, "fixed", buff.Bytes()) if err != nil { t.Error(err) } @@ -856,12 +674,12 @@ func TestUnmarshal(t *testing.T) { // marshal error buff.Reset() buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000020")) - err = abi.Unpack(&Bytes, "bytes", buff.Bytes()) + err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes()) if err == nil { t.Error("expected error") } - err = abi.Unpack(&Bytes, "multi", make([]byte, 64)) + err = abi.UnpackIntoInterface(&Bytes, "multi", make([]byte, 64)) if err == nil { t.Error("expected error") } @@ -872,7 +690,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000003")) // marshal int array var intArray [3]*big.Int - err = abi.Unpack(&intArray, "intArraySingle", buff.Bytes()) + err = abi.UnpackIntoInterface(&intArray, "intArraySingle", buff.Bytes()) if err != nil { t.Error(err) } @@ -893,7 +711,7 @@ func TestUnmarshal(t *testing.T) { buff.Write(common.Hex2Bytes("0000000000000000000000000100000000000000000000000000000000000000")) var outAddr []common.Address - err = abi.Unpack(&outAddr, "addressSliceSingle", buff.Bytes()) + err = abi.UnpackIntoInterface(&outAddr, "addressSliceSingle", buff.Bytes()) if err != nil { t.Fatal("didn't expect error:", err) } @@ -920,7 +738,7 @@ func TestUnmarshal(t *testing.T) { A []common.Address B []common.Address } - err = abi.Unpack(&outAddrStruct, "addressSliceDouble", buff.Bytes()) + err = abi.UnpackIntoInterface(&outAddrStruct, "addressSliceDouble", buff.Bytes()) if err != nil { t.Fatal("didn't expect error:", err) } @@ -948,14 +766,14 @@ func TestUnmarshal(t *testing.T) { buff.Reset() buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000100")) - err = abi.Unpack(&outAddr, "addressSliceSingle", buff.Bytes()) + err = abi.UnpackIntoInterface(&outAddr, "addressSliceSingle", buff.Bytes()) if err == nil { t.Fatal("expected error:", err) } } func TestUnpackTuple(t *testing.T) { - const simpleTuple = `[{"name":"tuple","constant":false,"outputs":[{"type":"tuple","name":"ret","components":[{"type":"int256","name":"a"},{"type":"int256","name":"b"}]}]}]` + const simpleTuple = `[{"name":"tuple","type":"function","outputs":[{"type":"tuple","name":"ret","components":[{"type":"int256","name":"a"},{"type":"int256","name":"b"}]}]}]` abi, err := JSON(strings.NewReader(simpleTuple)) if err != nil { t.Fatal(err) @@ -966,25 +784,29 @@ func TestUnpackTuple(t *testing.T) { buff.Write(common.Hex2Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) // ret[b] = -1 // If the result is single tuple, use struct as return value container directly. - v := struct { + type v struct { A *big.Int B *big.Int - }{new(big.Int), new(big.Int)} + } + type r struct { + Result v + } + var ret0 = new(r) + err = abi.UnpackIntoInterface(ret0, "tuple", buff.Bytes()) - err = abi.Unpack(&v, "tuple", buff.Bytes()) if err != nil { t.Error(err) } else { - if v.A.Cmp(big.NewInt(1)) != 0 { - t.Errorf("unexpected value unpacked: want %x, got %x", 1, v.A) + if ret0.Result.A.Cmp(big.NewInt(1)) != 0 { + t.Errorf("unexpected value unpacked: want %x, got %x", 1, ret0.Result.A) } - if v.B.Cmp(big.NewInt(-1)) != 0 { - t.Errorf("unexpected value unpacked: want %x, got %x", v.B, -1) + if ret0.Result.B.Cmp(big.NewInt(-1)) != 0 { + t.Errorf("unexpected value unpacked: want %x, got %x", -1, ret0.Result.B) } } // Test nested tuple - const nestedTuple = `[{"name":"tuple","constant":false,"outputs":[ + const nestedTuple = `[{"name":"tuple","type":"function","outputs":[ {"type":"tuple","name":"s","components":[{"type":"uint256","name":"a"},{"type":"uint256[]","name":"b"},{"type":"tuple[]","name":"c","components":[{"name":"x", "type":"uint256"},{"name":"y","type":"uint256"}]}]}, {"type":"tuple","name":"t","components":[{"name":"x", "type":"uint256"},{"name":"y","type":"uint256"}]}, {"type":"uint256","name":"a"} @@ -1043,7 +865,7 @@ func TestUnpackTuple(t *testing.T) { A: big.NewInt(1), } - err = abi.Unpack(&ret, "tuple", buff.Bytes()) + err = abi.UnpackIntoInterface(&ret, "tuple", buff.Bytes()) if err != nil { t.Error(err) } @@ -1106,7 +928,7 @@ func TestOOMMaliciousInput(t *testing.T) { }, } for i, test := range oomTests { - def := fmt.Sprintf(`[{ "name" : "method", "outputs": %s}]`, test.def) + def := fmt.Sprintf(`[{ "name" : "method", "type": "function", "outputs": %s}]`, test.def) abi, err := JSON(strings.NewReader(def)) if err != nil { t.Fatalf("invalid ABI definition %s: %v", def, err) diff --git a/accounts/abi/utils.go b/accounts/abi/utils.go new file mode 100644 index 00000000..e24df5b7 --- /dev/null +++ b/accounts/abi/utils.go @@ -0,0 +1,41 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import "fmt" + +// ResolveNameConflict returns the next available name for a given thing. +// This helper can be used for lots of purposes: +// +// - In solidity function overloading is supported, this function can fix +// the name conflicts of overloaded functions. +// - In golang binding generation, the parameter(in function, event, error, +// and struct definition) name will be converted to camelcase style which +// may eventually lead to name conflicts. +// +// Name conflicts are mostly resolved by adding number suffix. +// e.g. if the abi contains Methods send, send1 +// ResolveNameConflict would return send2 for input send. +func ResolveNameConflict(rawName string, used func(string) bool) string { + name := rawName + ok := used(name) + for idx := 0; ok; idx++ { + name = fmt.Sprintf("%s%d", rawName, idx) + ok = used(name) + } + return name +} diff --git a/accounts/accounts.go b/accounts/accounts.go index e4279cc8..179a33c5 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -21,10 +21,10 @@ import ( "fmt" "math/big" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" + "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" ) @@ -46,7 +46,7 @@ const ( // accounts (derived from the same seed). type Wallet interface { // 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 + // used by upper layers to define a sorting order over all wallets from multiple // backends. URL() URL @@ -88,8 +88,8 @@ type Wallet interface { // 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 + // Note, self derivation will increment the last component of the specified path + // opposed to descending into a child path to allow discovering accounts starting // from non zero components. // // Some hardware wallets switched derivation paths through their evolution, so @@ -105,7 +105,7 @@ type Wallet interface { // 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), + // a password to decrypt the account, or a PIN code to 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 @@ -113,7 +113,7 @@ type Wallet interface { 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 + // NOTE: there's a 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) @@ -124,11 +124,13 @@ type Wallet interface { // 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), + // a password to decrypt the account, or a PIN code to 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 needed details via SignTextWithPassphrase, or by other means (e.g. unlock // the account in a keystore). + // + // This method should return the signature in 'canonical' format, with v 0 or 1. SignText(account Account, text []byte) ([]byte, error) // SignTextWithPassphrase is identical to Signtext, but also takes a password @@ -174,7 +176,7 @@ type Backend interface { // 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 +// 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. @@ -186,7 +188,7 @@ func TextHash(data []byte) []byte { // 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 +// 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. diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go index 03f4f3fd..e8274f9f 100644 --- a/accounts/accounts_test.go +++ b/accounts/accounts_test.go @@ -20,7 +20,7 @@ import ( "bytes" "testing" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common/hexutil" ) func TestTextHash(t *testing.T) { diff --git a/accounts/errors.go b/accounts/errors.go index 2fed35f9..03cb569e 100644 --- a/accounts/errors.go +++ b/accounts/errors.go @@ -41,8 +41,7 @@ var ErrInvalidPassphrase = errors.New("invalid password") // second time. var ErrWalletAlreadyOpen = errors.New("wallet already open") -// ErrWalletClosed is returned if a wallet is attempted to be opened the -// secodn time. +// ErrWalletClosed is returned if a wallet is offline. var ErrWalletClosed = errors.New("wallet closed") // AuthNeededError is returned by backends for signing requests where the user diff --git a/accounts/external/backend.go b/accounts/external/backend.go index 8a62e12e..d403b7e5 100644 --- a/accounts/external/backend.go +++ b/accounts/external/backend.go @@ -21,16 +21,15 @@ import ( "math/big" "sync" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/cryptoecc/ETH-ECC/signer/core" + "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/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) type ExternalBackend struct { @@ -131,6 +130,12 @@ func (api *ExternalSigner) Accounts() []accounts.Account { func (api *ExternalSigner) Contains(account accounts.Account) bool { api.cacheMu.RLock() defer api.cacheMu.RUnlock() + if api.cache == nil { + // If we haven't already fetched the accounts, it's time to do so now + api.cacheMu.RUnlock() + api.Accounts() + api.cacheMu.RLock() + } for _, a := range api.cache { if a.Address == account.Address && (account.URL == (accounts.URL{}) || account.URL == api.URL()) { return true @@ -147,10 +152,6 @@ func (api *ExternalSigner) SelfDerive(bases []accounts.DerivationPath, chain eth 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 @@ -161,7 +162,7 @@ func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, d hexutil.Encode(data)); err != nil { return nil, err } - // If V is on 27/28-form, convert to to 0/1 for Clique + // If V is on 27/28-form, convert 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 } @@ -169,34 +170,71 @@ func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, d } func (api *ExternalSigner) SignText(account accounts.Account, text []byte) ([]byte, error) { - var res hexutil.Bytes + var signature hexutil.Bytes var signAddress = common.NewMixedcaseAddress(account.Address) - if err := api.client.Call(&res, "account_signData", + if err := api.client.Call(&signature, "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 + if signature[64] == 27 || signature[64] == 28 { + // If clef is used as a backend, it may already have transformed + // the signature to ethereum-type signature. + signature[64] -= 27 // Transform V from Ethereum-legacy to 0/1 + } + return signature, nil } +// signTransactionResult represents the signinig result returned by clef. +type signTransactionResult struct { + Raw hexutil.Bytes `json:"raw"` + Tx *types.Transaction `json:"tx"` +} + +// SignTx sends the transaction to the external signer. +// If chainID is nil, or tx.ChainID is zero, the chain ID will be assigned +// by the external signer. For non-legacy transactions, the chain ID of the +// transaction overrides the chainID parameter. 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), + args := &apitypes.SendTxArgs{ + Data: &data, + Nonce: hexutil.Uint64(tx.Nonce()), + Value: hexutil.Big(*tx.Value()), + Gas: hexutil.Uint64(tx.Gas()), + To: to, + From: common.NewMixedcaseAddress(account.Address), + } + switch tx.Type() { + case types.LegacyTxType, types.AccessListTxType: + args.GasPrice = (*hexutil.Big)(tx.GasPrice()) + case types.DynamicFeeTxType: + args.MaxFeePerGas = (*hexutil.Big)(tx.GasFeeCap()) + args.MaxPriorityFeePerGas = (*hexutil.Big)(tx.GasTipCap()) + default: + return nil, fmt.Errorf("unsupported tx type %d", tx.Type()) + } + // We should request the default chain id that we're operating with + // (the chain we're executing on) + if chainID != nil && chainID.Sign() != 0 { + args.ChainID = (*hexutil.Big)(chainID) + } + if tx.Type() != types.LegacyTxType { + // However, if the user asked for a particular chain id, then we should + // use that instead. + if tx.ChainId().Sign() != 0 { + args.ChainID = (*hexutil.Big)(tx.ChainId()) + } + accessList := tx.AccessList() + args.AccessList = &accessList } + var res signTransactionResult if err := api.client.Call(&res, "account_signTransaction", args); err != nil { return nil, err } diff --git a/accounts/hd.go b/accounts/hd.go index 190fb96a..3009f19b 100644 --- a/accounts/hd.go +++ b/accounts/hd.go @@ -41,7 +41,7 @@ var DefaultBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, var LegacyLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0} // DerivationPath represents the computer friendly version of a hierarchical -// deterministic wallet account derivaion path. +// deterministic wallet account derivation path. // // The BIP-32 spec https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki // defines derivation paths to be of the form: @@ -54,7 +54,7 @@ var LegacyLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 // the `coin_type` 60' (or 0x8000003C) to Ethereum. // // The root path for Ethereum is m/44'/60'/0'/0 according to the specification -// from https://github.com/Onther-Tech/EIPs/issues/84, albeit it's not set in stone +// from https://github.com/ethereum/EIPs/issues/84, albeit it's not set in stone // yet whether accounts should increment the last component or the children of // that. We will go with the simpler approach of incrementing the last component. type DerivationPath []uint32 @@ -150,3 +150,31 @@ func (path *DerivationPath) UnmarshalJSON(b []byte) error { *path, err = ParseDerivationPath(dp) return err } + +// DefaultIterator creates a BIP-32 path iterator, which progresses by increasing the last component: +// i.e. m/44'/60'/0'/0/0, m/44'/60'/0'/0/1, m/44'/60'/0'/0/2, ... m/44'/60'/0'/0/N. +func DefaultIterator(base DerivationPath) func() DerivationPath { + path := make(DerivationPath, len(base)) + copy(path[:], base[:]) + // Set it back by one, so the first call gives the first result + path[len(path)-1]-- + return func() DerivationPath { + path[len(path)-1]++ + return path + } +} + +// LedgerLiveIterator creates a bip44 path iterator for Ledger Live. +// Ledger Live increments the third component rather than the fifth component +// i.e. m/44'/60'/0'/0/0, m/44'/60'/1'/0/0, m/44'/60'/2'/0/0, ... m/44'/60'/N'/0/0. +func LedgerLiveIterator(base DerivationPath) func() DerivationPath { + path := make(DerivationPath, len(base)) + copy(path[:], base[:]) + // Set it back by one, so the first call gives the first result + path[2]-- + return func() DerivationPath { + // ledgerLivePathIterator iterates on the third component + path[2]++ + return path + } +} diff --git a/accounts/hd_test.go b/accounts/hd_test.go index b6b23230..0743bbe6 100644 --- a/accounts/hd_test.go +++ b/accounts/hd_test.go @@ -17,6 +17,7 @@ package accounts import ( + "fmt" "reflect" "testing" ) @@ -61,7 +62,7 @@ func TestHDPathParsing(t *testing.T) { // Weird inputs just to ensure they work {" m / 44 '\n/\n 60 \n\n\t' /\n0 ' /\t\t 0", DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0}}, - // Invaid derivation paths + // Invalid derivation paths {"", nil}, // Empty relative derivation path {"m", nil}, // Empty absolute derivation path {"m/", nil}, // Missing last derivation component @@ -77,3 +78,41 @@ func TestHDPathParsing(t *testing.T) { } } } + +func testDerive(t *testing.T, next func() DerivationPath, expected []string) { + t.Helper() + for i, want := range expected { + if have := next(); fmt.Sprintf("%v", have) != want { + t.Errorf("step %d, have %v, want %v", i, have, want) + } + } +} + +func TestHdPathIteration(t *testing.T) { + testDerive(t, DefaultIterator(DefaultBaseDerivationPath), + []string{ + "m/44'/60'/0'/0/0", "m/44'/60'/0'/0/1", + "m/44'/60'/0'/0/2", "m/44'/60'/0'/0/3", + "m/44'/60'/0'/0/4", "m/44'/60'/0'/0/5", + "m/44'/60'/0'/0/6", "m/44'/60'/0'/0/7", + "m/44'/60'/0'/0/8", "m/44'/60'/0'/0/9", + }) + + testDerive(t, DefaultIterator(LegacyLedgerBaseDerivationPath), + []string{ + "m/44'/60'/0'/0", "m/44'/60'/0'/1", + "m/44'/60'/0'/2", "m/44'/60'/0'/3", + "m/44'/60'/0'/4", "m/44'/60'/0'/5", + "m/44'/60'/0'/6", "m/44'/60'/0'/7", + "m/44'/60'/0'/8", "m/44'/60'/0'/9", + }) + + testDerive(t, LedgerLiveIterator(DefaultBaseDerivationPath), + []string{ + "m/44'/60'/0'/0/0", "m/44'/60'/1'/0/0", + "m/44'/60'/2'/0/0", "m/44'/60'/3'/0/0", + "m/44'/60'/4'/0/0", "m/44'/60'/5'/0/0", + "m/44'/60'/6'/0/0", "m/44'/60'/7'/0/0", + "m/44'/60'/8'/0/0", "m/44'/60'/9'/0/0", + }) +} diff --git a/accounts/keystore/account_cache.go b/accounts/keystore/account_cache.go index df1b9670..a3ec6e9c 100644 --- a/accounts/keystore/account_cache.go +++ b/accounts/keystore/account_cache.go @@ -27,10 +27,10 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" ) // Minimum amount of time between cache reloads. This limit applies if the platform does @@ -262,7 +262,7 @@ func (ac *accountCache) scanAccounts() error { switch { case err != nil: log.Debug("Failed to decode keystore key", "path", path, "err", err) - case (addr == common.Address{}): + case addr == common.Address{}: log.Debug("Failed to decode keystore key", "path", path, "err", "missing or zero address") default: return &accounts.Account{ diff --git a/accounts/keystore/account_cache_test.go b/accounts/keystore/account_cache_test.go index e3749987..daea497d 100644 --- a/accounts/keystore/account_cache_test.go +++ b/accounts/keystore/account_cache_test.go @@ -18,7 +18,6 @@ package keystore import ( "fmt" - "io/ioutil" "math/rand" "os" "path/filepath" @@ -27,10 +26,10 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" "github.com/cespare/cp" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" ) var ( @@ -55,7 +54,6 @@ func TestWatchNewFile(t *testing.T) { t.Parallel() dir, ks := tmpKeyStore(t, false) - defer os.RemoveAll(dir) // Ensure the watcher is started before adding any files. ks.Accounts() @@ -96,7 +94,7 @@ func TestWatchNoDir(t *testing.T) { // Create ks but not the directory that it watches. rand.Seed(time.Now().UnixNano()) - dir := filepath.Join(os.TempDir(), fmt.Sprintf("eth-keystore-watch-test-%d-%d", os.Getpid(), rand.Int())) + dir := filepath.Join(os.TempDir(), fmt.Sprintf("eth-keystore-watchnodir-test-%d-%d", os.Getpid(), rand.Int())) ks := NewKeyStore(dir, LightScryptN, LightScryptP) list := ks.Accounts() @@ -320,9 +318,9 @@ func waitForAccounts(wantAccounts []accounts.Account, ks *KeyStore) error { func TestUpdatedKeyfileContents(t *testing.T) { t.Parallel() - // Create a temporary kesytore to test with + // Create a temporary keystore to test with rand.Seed(time.Now().UnixNano()) - dir := filepath.Join(os.TempDir(), fmt.Sprintf("eth-keystore-watch-test-%d-%d", os.Getpid(), rand.Int())) + dir := filepath.Join(os.TempDir(), fmt.Sprintf("eth-keystore-updatedkeyfilecontents-test-%d-%d", os.Getpid(), rand.Int())) ks := NewKeyStore(dir, LightScryptN, LightScryptP) list := ks.Accounts() @@ -381,11 +379,11 @@ func TestUpdatedKeyfileContents(t *testing.T) { return } - // needed so that modTime of `file` is different to its current value after ioutil.WriteFile + // needed so that modTime of `file` is different to its current value after os.WriteFile time.Sleep(1000 * time.Millisecond) // Now replace file contents with crap - if err := ioutil.WriteFile(file, []byte("foo"), 0644); err != nil { + if err := os.WriteFile(file, []byte("foo"), 0600); err != nil { t.Fatal(err) return } @@ -398,9 +396,9 @@ func TestUpdatedKeyfileContents(t *testing.T) { // forceCopyFile is like cp.CopyFile, but doesn't complain if the destination exists. func forceCopyFile(dst, src string) error { - data, err := ioutil.ReadFile(src) + data, err := os.ReadFile(src) if err != nil { return err } - return ioutil.WriteFile(dst, data, 0644) + return os.WriteFile(dst, data, 0644) } diff --git a/accounts/keystore/file_cache.go b/accounts/keystore/file_cache.go index a27e2eb3..79f9a296 100644 --- a/accounts/keystore/file_cache.go +++ b/accounts/keystore/file_cache.go @@ -17,22 +17,21 @@ package keystore import ( - "io/ioutil" "os" "path/filepath" "strings" "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/log" ) // fileCache is a cache of files seen during scan of keystore. type fileCache struct { all mapset.Set // Set of all files from the keystore folder lastMod time.Time // Last time instance when a file was modified - mu sync.RWMutex + mu sync.Mutex } // scan performs a new scan on the given directory, compares against the already @@ -40,8 +39,8 @@ type fileCache struct { func (fc *fileCache) scan(keyDir string) (mapset.Set, mapset.Set, mapset.Set, error) { t0 := time.Now() - // List all the failes from the keystore folder - files, err := ioutil.ReadDir(keyDir) + // List all the files from the keystore folder + files, err := os.ReadDir(keyDir) if err != nil { return nil, nil, nil, err } @@ -62,10 +61,14 @@ func (fc *fileCache) scan(keyDir string) (mapset.Set, mapset.Set, mapset.Set, er log.Trace("Ignoring file on account scan", "path", path) continue } - // Gather the set of all and fresly modified files + // Gather the set of all and freshly modified files all.Add(path) - modified := fi.ModTime() + info, err := fi.Info() + if err != nil { + return nil, nil, nil, err + } + modified := info.ModTime() if modified.After(fc.lastMod) { mods.Add(path) } @@ -89,13 +92,13 @@ func (fc *fileCache) scan(keyDir string) (mapset.Set, mapset.Set, mapset.Set, er } // nonKeyFile ignores editor backups, hidden files and folders/symlinks. -func nonKeyFile(fi os.FileInfo) bool { +func nonKeyFile(fi os.DirEntry) bool { // Skip editor backups and UNIX-style hidden files. if strings.HasSuffix(fi.Name(), "~") || strings.HasPrefix(fi.Name(), ".") { return true } // Skip misc special files, directories (yes, symlinks too). - if fi.IsDir() || fi.Mode()&os.ModeType != 0 { + if fi.IsDir() || !fi.Type().IsRegular() { return true } return false diff --git a/accounts/keystore/key.go b/accounts/keystore/key.go index 7b8474fd..9b2ac147 100644 --- a/accounts/keystore/key.go +++ b/accounts/keystore/key.go @@ -23,16 +23,15 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strings" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/pborman/uuid" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/google/uuid" ) const ( @@ -110,7 +109,10 @@ func (k *Key) UnmarshalJSON(j []byte) (err error) { } u := new(uuid.UUID) - *u = uuid.Parse(keyJSON.Id) + *u, err = uuid.Parse(keyJSON.Id) + if err != nil { + return err + } k.Id = *u addr, err := hex.DecodeString(keyJSON.Address) if err != nil { @@ -128,7 +130,10 @@ func (k *Key) UnmarshalJSON(j []byte) (err error) { } func newKeyFromECDSA(privateKeyECDSA *ecdsa.PrivateKey) *Key { - id := uuid.NewRandom() + id, err := uuid.NewRandom() + if err != nil { + panic(fmt.Sprintf("Could not create random uuid: %v", err)) + } key := &Key{ Id: id, Address: crypto.PubkeyToAddress(privateKeyECDSA.PublicKey), @@ -191,7 +196,7 @@ func writeTemporaryKeyFile(file string, content []byte) (string, error) { } // Atomic write: create a temporary hidden file first // then move it into place. TempFile assigns mode 0600. - f, err := ioutil.TempFile(filepath.Dir(file), "."+filepath.Base(file)+".tmp") + f, err := os.CreateTemp(filepath.Dir(file), "."+filepath.Base(file)+".tmp") if err != nil { return "", err } diff --git a/accounts/keystore/keystore.go b/accounts/keystore/keystore.go index f9649bbb..88dcfbeb 100644 --- a/accounts/keystore/keystore.go +++ b/accounts/keystore/keystore.go @@ -17,14 +17,13 @@ // Package keystore implements encrypted storage of secp256k1 private keys. // // Keys are stored as encrypted JSON files according to the Web3 Secret Storage specification. -// See https://github.com/Onther-Tech/wiki/wiki/Web3-Secret-Storage-Definition for more information. +// See https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition for more information. package keystore import ( "crypto/ecdsa" crand "crypto/rand" "errors" - "fmt" "math/big" "os" "path/filepath" @@ -33,17 +32,21 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/event" + "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/event" ) 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 password") + + // ErrAccountAlreadyExists is returned if an account attempted to import is + // already present in the keystore. + ErrAccountAlreadyExists = errors.New("account already exists") ) // KeyStoreType is the reflect type of a keystore backend. @@ -67,7 +70,8 @@ type KeyStore struct { updateScope event.SubscriptionScope // Subscription scope tracking current live listeners updating bool // Whether the event notification loop is running - mu sync.RWMutex + mu sync.RWMutex + importMu sync.Mutex // Import Mutex locks the import to prevent two insertions from racing } type unlocked struct { @@ -279,11 +283,9 @@ func (ks *KeyStore) SignTx(a accounts.Account, tx *types.Transaction, chainID *b if !found { return nil, ErrLocked } - // Depending on the presence of the chain ID, sign with EIP155 or homestead - if chainID != nil { - return types.SignTx(tx, types.NewEIP155Signer(chainID), unlockedKey.PrivateKey) - } - return types.SignTx(tx, types.HomesteadSigner{}, unlockedKey.PrivateKey) + // Depending on the presence of the chain ID, sign with 2718 or homestead + signer := types.LatestSignerForChainID(chainID) + return types.SignTx(tx, signer, unlockedKey.PrivateKey) } // SignHashWithPassphrase signs hash if the private key matching the given address @@ -306,12 +308,9 @@ func (ks *KeyStore) SignTxWithPassphrase(a accounts.Account, passphrase string, return nil, err } defer zeroKey(key.PrivateKey) - - // Depending on the presence of the chain ID, sign with EIP155 or homestead - if chainID != nil { - return types.SignTx(tx, types.NewEIP155Signer(chainID), key.PrivateKey) - } - return types.SignTx(tx, types.HomesteadSigner{}, key.PrivateKey) + // Depending on the presence of the chain ID, sign with or without replay protection. + signer := types.LatestSignerForChainID(chainID) + return types.SignTx(tx, signer, key.PrivateKey) } // Unlock unlocks the given account indefinitely. @@ -443,14 +442,27 @@ func (ks *KeyStore) Import(keyJSON []byte, passphrase, newPassphrase string) (ac if err != nil { return accounts.Account{}, err } + ks.importMu.Lock() + defer ks.importMu.Unlock() + + if ks.cache.hasAddress(key.Address) { + return accounts.Account{ + Address: key.Address, + }, ErrAccountAlreadyExists + } return ks.importKey(key, newPassphrase) } // ImportECDSA stores the given key into the key directory, encrypting it with the passphrase. func (ks *KeyStore) ImportECDSA(priv *ecdsa.PrivateKey, passphrase string) (accounts.Account, error) { + ks.importMu.Lock() + defer ks.importMu.Unlock() + key := newKeyFromECDSA(priv) if ks.cache.hasAddress(key.Address) { - return accounts.Account{}, fmt.Errorf("account already exists") + return accounts.Account{ + Address: key.Address, + }, ErrAccountAlreadyExists } return ks.importKey(key, passphrase) } diff --git a/accounts/keystore/keystore_test.go b/accounts/keystore/keystore_test.go index 2d169121..4cdf0b1e 100644 --- a/accounts/keystore/keystore_test.go +++ b/accounts/keystore/keystore_test.go @@ -17,25 +17,26 @@ package keystore import ( - "io/ioutil" "math/rand" "os" "runtime" "sort" "strings" + "sync" + "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/event" ) var testSigData = make([]byte, 32) func TestKeyStore(t *testing.T) { dir, ks := tmpKeyStore(t, true) - defer os.RemoveAll(dir) a, err := ks.NewAccount("foo") if err != nil { @@ -69,8 +70,7 @@ func TestKeyStore(t *testing.T) { } func TestSign(t *testing.T) { - dir, ks := tmpKeyStore(t, true) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, true) pass := "" // not used but required by API a1, err := ks.NewAccount(pass) @@ -86,8 +86,7 @@ func TestSign(t *testing.T) { } func TestSignWithPassphrase(t *testing.T) { - dir, ks := tmpKeyStore(t, true) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, true) pass := "passwd" acc, err := ks.NewAccount(pass) @@ -114,8 +113,7 @@ func TestSignWithPassphrase(t *testing.T) { } func TestTimedUnlock(t *testing.T) { - dir, ks := tmpKeyStore(t, true) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, true) pass := "foo" a1, err := ks.NewAccount(pass) @@ -149,8 +147,7 @@ func TestTimedUnlock(t *testing.T) { } func TestOverrideUnlock(t *testing.T) { - dir, ks := tmpKeyStore(t, false) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, false) pass := "foo" a1, err := ks.NewAccount(pass) @@ -190,8 +187,7 @@ func TestOverrideUnlock(t *testing.T) { // This test should fail under -race if signing races the expiration goroutine. func TestSignRace(t *testing.T) { - dir, ks := tmpKeyStore(t, false) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, false) // Create a test account. a1, err := ks.NewAccount("") @@ -218,9 +214,8 @@ func TestSignRace(t *testing.T) { // Tests that the wallet notifier loop starts and stops correctly based on the // addition and removal of wallet event subscriptions. func TestWalletNotifierLifecycle(t *testing.T) { - // Create a temporary kesytore to test with - dir, ks := tmpKeyStore(t, false) - defer os.RemoveAll(dir) + // Create a temporary keystore to test with + _, ks := tmpKeyStore(t, false) // Ensure that the notification updater is not running yet time.Sleep(250 * time.Millisecond) @@ -280,8 +275,7 @@ type walletEvent struct { // Tests that wallet notifications and correctly fired when accounts are added // or deleted from the keystore. func TestWalletNotifications(t *testing.T) { - dir, ks := tmpKeyStore(t, false) - defer os.RemoveAll(dir) + _, ks := tmpKeyStore(t, false) // Subscribe to the wallet feed and collect events. var ( @@ -333,11 +327,88 @@ func TestWalletNotifications(t *testing.T) { // Shut down the event collector and check events. sub.Unsubscribe() - <-updates + for ev := range updates { + events = append(events, walletEvent{ev, ev.Wallet.Accounts()[0]}) + } checkAccounts(t, live, ks.Wallets()) checkEvents(t, wantEvents, events) } +// TestImportExport tests the import functionality of a keystore. +func TestImportECDSA(t *testing.T) { + _, ks := tmpKeyStore(t, true) + key, err := crypto.GenerateKey() + if err != nil { + t.Fatalf("failed to generate key: %v", key) + } + if _, err = ks.ImportECDSA(key, "old"); err != nil { + t.Errorf("importing failed: %v", err) + } + if _, err = ks.ImportECDSA(key, "old"); err == nil { + t.Errorf("importing same key twice succeeded") + } + if _, err = ks.ImportECDSA(key, "new"); err == nil { + t.Errorf("importing same key twice succeeded") + } +} + +// TestImportECDSA tests the import and export functionality of a keystore. +func TestImportExport(t *testing.T) { + _, ks := tmpKeyStore(t, true) + acc, err := ks.NewAccount("old") + if err != nil { + t.Fatalf("failed to create account: %v", acc) + } + json, err := ks.Export(acc, "old", "new") + if err != nil { + t.Fatalf("failed to export account: %v", acc) + } + _, ks2 := tmpKeyStore(t, true) + if _, err = ks2.Import(json, "old", "old"); err == nil { + t.Errorf("importing with invalid password succeeded") + } + acc2, err := ks2.Import(json, "new", "new") + if err != nil { + t.Errorf("importing failed: %v", err) + } + if acc.Address != acc2.Address { + t.Error("imported account does not match exported account") + } + if _, err = ks2.Import(json, "new", "new"); err == nil { + t.Errorf("importing a key twice succeeded") + } +} + +// TestImportRace tests the keystore on races. +// This test should fail under -race if importing races. +func TestImportRace(t *testing.T) { + _, ks := tmpKeyStore(t, true) + acc, err := ks.NewAccount("old") + if err != nil { + t.Fatalf("failed to create account: %v", acc) + } + json, err := ks.Export(acc, "old", "new") + if err != nil { + t.Fatalf("failed to export account: %v", acc) + } + _, ks2 := tmpKeyStore(t, true) + var atom uint32 + var wg sync.WaitGroup + wg.Add(2) + for i := 0; i < 2; i++ { + go func() { + defer wg.Done() + if _, err := ks2.Import(json, "new", "new"); err != nil { + atomic.AddUint32(&atom, 1) + } + }() + } + wg.Wait() + if atom != 1 { + t.Errorf("Import is racy") + } +} + // checkAccounts checks that all known live accounts are present in the wallet list. func checkAccounts(t *testing.T, live map[common.Address]accounts.Account, wallets []accounts.Wallet) { if len(live) != len(wallets) { @@ -375,10 +446,7 @@ func checkEvents(t *testing.T, want []walletEvent, have []walletEvent) { } func tmpKeyStore(t *testing.T, encrypted bool) (string, *KeyStore) { - d, err := ioutil.TempDir("", "eth-keystore-test") - if err != nil { - t.Fatal(err) - } + d := t.TempDir() newKs := NewPlaintextKeyStore if encrypted { newKs = func(kd string) *KeyStore { return NewKeyStore(kd, veryLightScryptN, veryLightScryptP) } diff --git a/accounts/keystore/passphrase.go b/accounts/keystore/passphrase.go index 1c92820a..1701fbf5 100644 --- a/accounts/keystore/passphrase.go +++ b/accounts/keystore/passphrase.go @@ -19,7 +19,7 @@ This key store behaves as KeyStorePlain with the difference that the private key is encrypted and on disk uses another JSON encoding. -The crypto is documented at https://github.com/Onther-Tech/wiki/wiki/Web3-Secret-Storage-Definition +The crypto is documented at https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition */ @@ -34,15 +34,14 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "os" "path/filepath" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/pborman/uuid" + "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" + "github.com/google/uuid" "golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/scrypt" ) @@ -82,7 +81,7 @@ type keyStorePassphrase struct { func (ks keyStorePassphrase) GetKey(addr common.Address, filename, auth string) (*Key, error) { // Load the key from the keystore and decrypt its contents - keyjson, err := ioutil.ReadFile(filename) + keyjson, err := os.ReadFile(filename) if err != nil { return nil, err } @@ -121,8 +120,9 @@ func (ks keyStorePassphrase) StoreKey(filename string, key *Key, auth string) er "This indicates that the keystore is corrupted. \n" + "The corrupted file is stored at \n%v\n" + "Please file a ticket at:\n\n" + - "https://github.com/cryptoecc/ETH-ECC/issues." + + "https://github.com/ethereum/go-ethereum/issues." + "The error was : %s" + //lint:ignore ST1005 This is a message for the user return fmt.Errorf(msg, tmpName, err) } } @@ -138,7 +138,6 @@ func (ks keyStorePassphrase) JoinPath(filename string) string { // Encryptdata encrypts the data given as 'data' with the password 'auth'. func EncryptDataV3(data, auth []byte, scryptN, scryptP int) (CryptoJSON, error) { - salt := make([]byte, 32) if _, err := io.ReadFull(rand.Reader, salt); err != nil { panic("reading from crypto/rand failed: " + err.Error()) @@ -227,9 +226,12 @@ func DecryptKey(keyjson []byte, auth string) (*Key, error) { return nil, err } key := crypto.ToECDSAUnsafe(keyBytes) - + id, err := uuid.FromBytes(keyId) + if err != nil { + return nil, err + } return &Key{ - Id: uuid.UUID(keyId), + Id: id, Address: crypto.PubkeyToAddress(key.PublicKey), PrivateKey: key, }, nil @@ -237,7 +239,7 @@ func DecryptKey(keyjson []byte, auth string) (*Key, error) { func DecryptDataV3(cryptoJson CryptoJSON, auth string) ([]byte, error) { if cryptoJson.Cipher != "aes-128-ctr" { - return nil, fmt.Errorf("Cipher not supported: %v", cryptoJson.Cipher) + return nil, fmt.Errorf("cipher not supported: %v", cryptoJson.Cipher) } mac, err := hex.DecodeString(cryptoJson.MAC) if err != nil { @@ -273,9 +275,13 @@ func DecryptDataV3(cryptoJson CryptoJSON, auth string) ([]byte, error) { func decryptKeyV3(keyProtected *encryptedKeyJSONV3, auth string) (keyBytes []byte, keyId []byte, err error) { if keyProtected.Version != version { - return nil, nil, fmt.Errorf("Version not supported: %v", keyProtected.Version) + return nil, nil, fmt.Errorf("version not supported: %v", keyProtected.Version) + } + keyUUID, err := uuid.Parse(keyProtected.Id) + if err != nil { + return nil, nil, err } - keyId = uuid.Parse(keyProtected.Id) + keyId = keyUUID[:] plainText, err := DecryptDataV3(keyProtected.Crypto, auth) if err != nil { return nil, nil, err @@ -284,7 +290,11 @@ func decryptKeyV3(keyProtected *encryptedKeyJSONV3, auth string) (keyBytes []byt } func decryptKeyV1(keyProtected *encryptedKeyJSONV1, auth string) (keyBytes []byte, keyId []byte, err error) { - keyId = uuid.Parse(keyProtected.Id) + keyUUID, err := uuid.Parse(keyProtected.Id) + if err != nil { + return nil, nil, err + } + keyId = keyUUID[:] mac, err := hex.DecodeString(keyProtected.Crypto.MAC) if err != nil { return nil, nil, err @@ -330,18 +340,17 @@ func getKDFKey(cryptoJSON CryptoJSON, auth string) ([]byte, error) { r := ensureInt(cryptoJSON.KDFParams["r"]) p := ensureInt(cryptoJSON.KDFParams["p"]) return scrypt.Key(authArray, salt, n, r, p, dkLen) - } else if cryptoJSON.KDF == "pbkdf2" { c := ensureInt(cryptoJSON.KDFParams["c"]) prf := cryptoJSON.KDFParams["prf"].(string) if prf != "hmac-sha256" { - return nil, fmt.Errorf("Unsupported PBKDF2 PRF: %s", prf) + return nil, fmt.Errorf("unsupported PBKDF2 PRF: %s", prf) } key := pbkdf2.Key(authArray, salt, c, dkLen, sha256.New) return key, nil } - return nil, fmt.Errorf("Unsupported KDF: %s", cryptoJSON.KDF) + return nil, fmt.Errorf("unsupported KDF: %s", cryptoJSON.KDF) } // TODO: can we do without this when unmarshalling dynamic JSON? diff --git a/accounts/keystore/passphrase_test.go b/accounts/keystore/passphrase_test.go index fd023af8..1356b317 100644 --- a/accounts/keystore/passphrase_test.go +++ b/accounts/keystore/passphrase_test.go @@ -17,10 +17,10 @@ package keystore import ( - "io/ioutil" + "os" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) const ( @@ -30,7 +30,7 @@ const ( // Tests that a json key file can be decrypted and encrypted in multiple rounds. func TestKeyEncryptDecrypt(t *testing.T) { - keyjson, err := ioutil.ReadFile("testdata/very-light-scrypt.json") + keyjson, err := os.ReadFile("testdata/very-light-scrypt.json") if err != nil { t.Fatal(err) } @@ -52,7 +52,7 @@ func TestKeyEncryptDecrypt(t *testing.T) { t.Errorf("test %d: key address mismatch: have %x, want %x", i, key.Address, address) } // Recrypt with a new password and start over - password += "new data appended" + password += "new data appended" // nolint: gosec if keyjson, err = EncryptKey(key, password, veryLightScryptN, veryLightScryptP); err != nil { t.Errorf("test %d: failed to recrypt key %v", i, err) } diff --git a/accounts/keystore/plain.go b/accounts/keystore/plain.go index d2c1ae0b..f62a133c 100644 --- a/accounts/keystore/plain.go +++ b/accounts/keystore/plain.go @@ -22,7 +22,7 @@ import ( "os" "path/filepath" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) type keyStorePlain struct { diff --git a/accounts/keystore/plain_test.go b/accounts/keystore/plain_test.go index 91beb5ba..93165d5c 100644 --- a/accounts/keystore/plain_test.go +++ b/accounts/keystore/plain_test.go @@ -20,22 +20,17 @@ import ( "crypto/rand" "encoding/hex" "fmt" - "io/ioutil" - "os" "path/filepath" "reflect" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) func tmpKeyStoreIface(t *testing.T, encrypted bool) (dir string, ks keyStore) { - d, err := ioutil.TempDir("", "geth-keystore-test") - if err != nil { - t.Fatal(err) - } + d := t.TempDir() if encrypted { ks = &keyStorePassphrase{d, veryLightScryptN, veryLightScryptP, true} } else { @@ -45,8 +40,7 @@ func tmpKeyStoreIface(t *testing.T, encrypted bool) (dir string, ks keyStore) { } func TestKeyStorePlain(t *testing.T) { - dir, ks := tmpKeyStoreIface(t, false) - defer os.RemoveAll(dir) + _, ks := tmpKeyStoreIface(t, false) pass := "" // not used but required by API k1, account, err := storeNewKey(ks, rand.Reader, pass) @@ -66,8 +60,7 @@ func TestKeyStorePlain(t *testing.T) { } func TestKeyStorePassphrase(t *testing.T) { - dir, ks := tmpKeyStoreIface(t, true) - defer os.RemoveAll(dir) + _, ks := tmpKeyStoreIface(t, true) pass := "foo" k1, account, err := storeNewKey(ks, rand.Reader, pass) @@ -87,8 +80,7 @@ func TestKeyStorePassphrase(t *testing.T) { } func TestKeyStorePassphraseDecryptionFail(t *testing.T) { - dir, ks := tmpKeyStoreIface(t, true) - defer os.RemoveAll(dir) + _, ks := tmpKeyStoreIface(t, true) pass := "foo" k1, account, err := storeNewKey(ks, rand.Reader, pass) @@ -102,7 +94,6 @@ func TestKeyStorePassphraseDecryptionFail(t *testing.T) { func TestImportPreSaleKey(t *testing.T) { dir, ks := tmpKeyStoreIface(t, true) - defer os.RemoveAll(dir) // file content of a presale key file generated with: // python pyethsaletool.py genwallet diff --git a/accounts/keystore/presale.go b/accounts/keystore/presale.go index 77774cfd..0664dc2c 100644 --- a/accounts/keystore/presale.go +++ b/accounts/keystore/presale.go @@ -25,9 +25,9 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/pborman/uuid" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/crypto" + "github.com/google/uuid" "golang.org/x/crypto/pbkdf2" ) @@ -37,7 +37,10 @@ func importPreSaleKey(keyStore keyStore, keyJSON []byte, password string) (accou if err != nil { return accounts.Account{}, nil, err } - key.Id = uuid.NewRandom() + key.Id, err = uuid.NewRandom() + if err != nil { + return accounts.Account{}, nil, err + } a := accounts.Account{ Address: key.Address, URL: accounts.URL{ @@ -70,7 +73,7 @@ func decryptPreSaleKey(fileContent []byte, password string) (key *Key, err error iv := encSeedBytes[:16] cipherText := encSeedBytes[16:] /* - See https://github.com/Onther-Tech/pyethsaletool + See https://github.com/ethereum/pyethsaletool pyethsaletool generates the encryption key from password by 2000 rounds of PBKDF2 with HMAC-SHA-256 using password as salt (:(). @@ -86,7 +89,7 @@ func decryptPreSaleKey(fileContent []byte, password string) (key *Key, err error ecKey := crypto.ToECDSAUnsafe(ethPriv) key = &Key{ - Id: nil, + Id: uuid.UUID{}, Address: crypto.PubkeyToAddress(ecKey.PublicKey), PrivateKey: ecKey, } diff --git a/accounts/keystore/wallet.go b/accounts/keystore/wallet.go index 4a2fe1c2..1066095f 100644 --- a/accounts/keystore/wallet.go +++ b/accounts/keystore/wallet.go @@ -19,10 +19,10 @@ package keystore import ( "math/big" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "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 @@ -58,7 +58,7 @@ func (w *keystoreWallet) Open(passphrase string) error { return nil } func (w *keystoreWallet) Close() error { return nil } // Accounts implements accounts.Wallet, returning an account list consisting of -// a single account that the plain kestore wallet contains. +// a single account that the plain keystore wallet contains. func (w *keystoreWallet) Accounts() []accounts.Account { return []accounts.Account{w.account} } @@ -93,12 +93,12 @@ func (w *keystoreWallet) signHash(account accounts.Account, hash []byte) ([]byte return w.keystore.SignHash(account, hash) } -// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +// 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 +// 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) { @@ -108,12 +108,14 @@ func (w *keystoreWallet) SignDataWithPassphrase(account accounts.Account, passph return w.keystore.SignHashWithPassphrase(account, passphrase, crypto.Keccak256(data)) } +// SignText implements accounts.Wallet, attempting to sign the hash of +// the given text with the given account. 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. +// hash of the given text with the given account using passphrase as extra authentication. 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) { diff --git a/accounts/keystore/watch.go b/accounts/keystore/watch.go index 9c482e39..ad176040 100644 --- a/accounts/keystore/watch.go +++ b/accounts/keystore/watch.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build (darwin && !ios && cgo) || freebsd || (linux && !arm64) || netbsd || solaris // +build darwin,!ios,cgo freebsd linux,!arm64 netbsd solaris package keystore @@ -21,7 +22,7 @@ package keystore import ( "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" "github.com/rjeczalik/notify" ) diff --git a/accounts/keystore/watch_fallback.go b/accounts/keystore/watch_fallback.go index de0e87f8..e40eca42 100644 --- a/accounts/keystore/watch_fallback.go +++ b/accounts/keystore/watch_fallback.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build (darwin && !cgo) || 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. diff --git a/accounts/manager.go b/accounts/manager.go index 68733f53..1e111d19 100644 --- a/accounts/manager.go +++ b/accounts/manager.go @@ -21,10 +21,14 @@ import ( "sort" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" ) +// managerSubBufferSize determines how many incoming wallet events +// the manager will buffer in its channel. +const managerSubBufferSize = 50 + // Config contains the settings of the global account manager. // // TODO(rjl493456442, karalabe, holiman): Get rid of this when account management @@ -33,18 +37,27 @@ type Config struct { InsecureUnlockAllowed bool // Whether account unlocking in insecure environment is allowed } +// newBackendEvent lets the manager know it should +// track the given backend for wallet updates. +type newBackendEvent struct { + backend Backend + processed chan struct{} // Informs event emitter that backend has been integrated +} + // 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 - wallets []Wallet // Cache of all wallets from all registered backends + 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 + newBackends chan newBackendEvent // Incoming backends to be tracked by the manager + wallets []Wallet // Cache of all wallets from all registered backends feed event.Feed // Wallet feed notifying of arrivals/departures quit chan chan error + term chan struct{} // Channel is closed upon termination of the update loop lock sync.RWMutex } @@ -57,7 +70,7 @@ func NewManager(config *Config, backends ...Backend) *Manager { wallets = merge(wallets, backend.Wallets()...) } // Subscribe to wallet notifications from all backends - updates := make(chan WalletEvent, 4*len(backends)) + updates := make(chan WalletEvent, managerSubBufferSize) subs := make([]event.Subscription, len(backends)) for i, backend := range backends { @@ -65,12 +78,14 @@ func NewManager(config *Config, backends ...Backend) *Manager { } // Assemble the account manager and return am := &Manager{ - config: config, - backends: make(map[reflect.Type][]Backend), - updaters: subs, - updates: updates, - wallets: wallets, - quit: make(chan chan error), + config: config, + backends: make(map[reflect.Type][]Backend), + updaters: subs, + updates: updates, + newBackends: make(chan newBackendEvent), + wallets: wallets, + quit: make(chan chan error), + term: make(chan struct{}), } for _, backend := range backends { kind := reflect.TypeOf(backend) @@ -93,6 +108,14 @@ func (am *Manager) Config() *Config { return am.config } +// AddBackend starts the tracking of an additional backend for wallet updates. +// cmd/geth assumes once this func returns the backends have been already integrated. +func (am *Manager) AddBackend(backend Backend) { + done := make(chan struct{}) + am.newBackends <- newBackendEvent{backend, done} + <-done +} + // update is the wallet event loop listening for notifications from the backends // and updating the cache of wallets. func (am *Manager) update() { @@ -122,10 +145,22 @@ func (am *Manager) update() { // Notify any listeners of the event am.feed.Send(event) - + case event := <-am.newBackends: + am.lock.Lock() + // Update caches + backend := event.backend + am.wallets = merge(am.wallets, backend.Wallets()...) + am.updaters = append(am.updaters, backend.Subscribe(am.updates)) + kind := reflect.TypeOf(backend) + am.backends[kind] = append(am.backends[kind], backend) + am.lock.Unlock() + close(event.processed) case errc := <-am.quit: // Manager terminating, return errc <- nil + // Signals event emitters the loop is not receiving values + // to prevent them from getting stuck. + close(am.term) return } } @@ -133,6 +168,9 @@ func (am *Manager) update() { // Backends retrieves the backend(s) with the given type from the account manager. func (am *Manager) Backends(kind reflect.Type) []Backend { + am.lock.RLock() + defer am.lock.RUnlock() + return am.backends[kind] } @@ -141,6 +179,11 @@ func (am *Manager) Wallets() []Wallet { am.lock.RLock() defer am.lock.RUnlock() + return am.walletsNoLock() +} + +// walletsNoLock returns all registered wallets. Callers must hold am.lock. +func (am *Manager) walletsNoLock() []Wallet { cpy := make([]Wallet, len(am.wallets)) copy(cpy, am.wallets) return cpy @@ -155,7 +198,7 @@ func (am *Manager) Wallet(url string) (Wallet, error) { if err != nil { return nil, err } - for _, wallet := range am.Wallets() { + for _, wallet := range am.walletsNoLock() { if wallet.URL() == parsed { return wallet, nil } diff --git a/accounts/scwallet/README.md b/accounts/scwallet/README.md index cfca916b..4313d9c6 100644 --- a/accounts/scwallet/README.md +++ b/accounts/scwallet/README.md @@ -31,12 +31,16 @@ 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: + > personal.openWallet("keycard://044def09", "pairing password") ``` - Enter the pairing password that you have received during card initialization. Same with the PIN that you will subsequently be - asked for. + The pairing password has been generated during the card initialization process. + + The process needs to be repeated once more with the PIN: + + ``` + > personal.openWallet("keycard://044def09", "PIN number") + ``` If everything goes well, you should see your new account when typing `personal` on the console: diff --git a/accounts/scwallet/hub.go b/accounts/scwallet/hub.go index f8b1d957..f9dcf58e 100644 --- a/accounts/scwallet/hub.go +++ b/accounts/scwallet/hub.go @@ -34,17 +34,17 @@ package scwallet import ( "encoding/json" - "io/ioutil" + "io" "os" "path/filepath" "sort" "sync" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" + "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" ) @@ -96,7 +96,7 @@ func (hub *Hub) readPairings() error { return err } - pairingData, err := ioutil.ReadAll(pairingFile) + pairingData, err := io.ReadAll(pairingFile) if err != nil { return err } @@ -220,7 +220,7 @@ func (hub *Hub) refreshWallets() { // Mark the reader as present seen[reader] = struct{}{} - // If we alreay know about this card, skip to the next reader, otherwise clean up + // If we already 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 diff --git a/accounts/scwallet/securechannel.go b/accounts/scwallet/securechannel.go index b35466ca..b1b533eb 100644 --- a/accounts/scwallet/securechannel.go +++ b/accounts/scwallet/securechannel.go @@ -20,14 +20,14 @@ import ( "bytes" "crypto/aes" "crypto/cipher" + "crypto/elliptic" "crypto/rand" "crypto/sha256" "crypto/sha512" "fmt" - "github.com/cryptoecc/ETH-ECC/crypto" + "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" ) @@ -63,26 +63,19 @@ type SecureChannelSession struct { // 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) + key, err := crypto.GenerateKey() 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) + cardPublic, err := crypto.UnmarshalPubkey(keyData) if err != nil { - return nil, err + return nil, fmt.Errorf("could not unmarshal public key from card: %v", err) } - + secret, _ := key.Curve.ScalarMult(cardPublic.X, cardPublic.Y, key.D.Bytes()) return &SecureChannelSession{ card: card, - secret: secret, - publicKey: gen.Marshal(public), + secret: secret.Bytes(), + publicKey: elliptic.Marshal(crypto.S256(), key.PublicKey.X, key.PublicKey.Y), }, nil } @@ -109,7 +102,7 @@ func (s *SecureChannelSession) Pair(pairingPassword []byte) error { cardChallenge := response.Data[32:64] if !bytes.Equal(expectedCryptogram, cardCryptogram) { - return fmt.Errorf("Invalid card cryptogram %v != %v", expectedCryptogram, cardCryptogram) + return fmt.Errorf("invalid card cryptogram %v != %v", expectedCryptogram, cardCryptogram) } md.Reset() @@ -132,7 +125,7 @@ func (s *SecureChannelSession) Pair(pairingPassword []byte) error { // Unpair disestablishes an existing pairing. func (s *SecureChannelSession) Unpair() error { if s.PairingKey == nil { - return fmt.Errorf("Cannot unpair: not paired") + return fmt.Errorf("cannot unpair: not paired") } _, err := s.transmitEncrypted(claSCWallet, insUnpair, s.PairingIndex, 0, []byte{}) @@ -148,7 +141,7 @@ func (s *SecureChannelSession) Unpair() error { // Open initializes the secure channel. func (s *SecureChannelSession) Open() error { if s.iv != nil { - return fmt.Errorf("Session already opened") + return fmt.Errorf("session already opened") } response, err := s.open() @@ -185,11 +178,11 @@ func (s *SecureChannelSession) mutuallyAuthenticate() error { 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) + return fmt.Errorf("got unexpected response from MUTUALLY_AUTHENTICATE: %#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 fmt.Errorf("response from MUTUALLY_AUTHENTICATE was %d bytes, expected %d", len(response.Data), scSecretLength) } return nil @@ -222,7 +215,7 @@ func (s *SecureChannelSession) pair(p1 uint8, data []byte) (*responseAPDU, error // 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") + return nil, fmt.Errorf("channel not open") } data, err := s.encryptAPDU(data) @@ -261,14 +254,14 @@ func (s *SecureChannelSession) transmitEncrypted(cla, ins, p1, p2 byte, data []b return nil, err } if !bytes.Equal(s.iv, rmac) { - return nil, fmt.Errorf("Invalid MAC in response") + 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 nil, fmt.Errorf("unexpected response status Cla=%#x, Ins=%#x, Sw=%#x%x", cla, ins, rapdu.Sw1, rapdu.Sw2) } return rapdu, nil @@ -277,7 +270,7 @@ func (s *SecureChannelSession) transmitEncrypted(cla, ins, p1, p2 byte, data []b // 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) + return nil, fmt.Errorf("payload of %d bytes exceeds maximum of %d", len(data), maxPayloadSize) } data = pad(data, 0x80) @@ -323,10 +316,10 @@ func unpad(data []byte, terminator byte) ([]byte, error) { 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 %d", data[len(data)-i]) } } - return nil, fmt.Errorf("Expected end of padding, got 0") + return nil, fmt.Errorf("expected end of padding, got 0") } // updateIV is an internal method that updates the initialization vector after diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go index e87a41e0..5082dec1 100644 --- a/accounts/scwallet/wallet.go +++ b/accounts/scwallet/wallet.go @@ -33,12 +33,12 @@ import ( "sync" "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" + "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" ) @@ -167,7 +167,7 @@ func transmit(card *pcsc.Card, command *commandAPDU) (*responseAPDU, error) { } 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 nil, fmt.Errorf("unexpected insecure response status Cla=%#x, Ins=%#x, Sw=%#x%x", command.Cla, command.Ins, response.Sw1, response.Sw2) } return response, nil @@ -252,7 +252,7 @@ func (w *Wallet) release() error { // with the wallet. func (w *Wallet) pair(puk []byte) error { if w.session.paired() { - return fmt.Errorf("Wallet already paired") + return fmt.Errorf("wallet already paired") } pairing, err := w.session.pair(puk) if err != nil { @@ -312,15 +312,15 @@ func (w *Wallet) Status() (string, error) { } switch { case !w.session.verified && status.PinRetryCount == 0 && status.PukRetryCount == 0: - return fmt.Sprintf("Bricked, waiting for full wipe"), nil + return "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 + return "Empty, waiting for initialization", nil default: - return fmt.Sprintf("Online"), nil + return "Online", nil } } @@ -362,7 +362,7 @@ func (w *Wallet) Open(passphrase string) error { 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 + // but we can't return ErrPINNeeded directly here because we don't know whether // a PIN check or a PIN reset is needed. passphrase = "" } @@ -637,8 +637,8 @@ func (w *Wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Accoun // 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 +// Note, self derivation will increment the last component of the specified path +// opposed to descending into a child path to allow discovering accounts starting // from non zero components. // // Some hardware wallets switched derivation paths through their evolution, so @@ -699,7 +699,7 @@ func (w *Wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) // 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) + signer := types.LatestSignerForChainID(chainID) hash := signer.Hash(tx) sig, err := w.signHash(account, hash[:]) if err != nil { @@ -773,12 +773,12 @@ func (w *Wallet) findAccountPath(account accounts.Account) (accounts.DerivationP // 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) + 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) + return nil, fmt.Errorf("invalid URL format: %s", account.URL) } if parts[0] != fmt.Sprintf("%x", w.PublicKey[1:3]) { @@ -813,7 +813,7 @@ func (s *Session) pair(secret []byte) (smartcardPairing, error) { // unpair deletes an existing pairing. func (s *Session) unpair() error { if !s.verified { - return fmt.Errorf("Unpair requires that the PIN be verified") + return fmt.Errorf("unpair requires that the PIN be verified") } return s.Channel.Unpair() } @@ -850,7 +850,7 @@ func (s *Session) paired() bool { // 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) + 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 @@ -879,6 +879,7 @@ func (s *Session) walletStatus() (*walletStatus, error) { } // derivationPath fetches the wallet's current derivation path from the card. +//lint:ignore U1000 needs to be added to the console interface func (s *Session) derivationPath() (accounts.DerivationPath, error) { response, err := s.Channel.transmitEncrypted(claSCWallet, insStatus, statusP1Path, 0, nil) if err != nil { @@ -993,12 +994,14 @@ func (s *Session) derive(path accounts.DerivationPath) (accounts.Account, error) } // keyExport contains information on an exported keypair. +//lint:ignore U1000 needs to be added to the console interface type keyExport struct { PublicKey []byte `asn1:"tag:0"` PrivateKey []byte `asn1:"tag:1,optional"` } // publicKey returns the public key for the current derivation path. +//lint:ignore U1000 needs to be added to the console interface func (s *Session) publicKey() ([]byte, error) { response, err := s.Channel.transmitEncrypted(claSCWallet, insExportKey, exportP1Any, exportP2Pubkey, nil) if err != nil { diff --git a/accounts/url.go b/accounts/url.go index a5add102..12a84414 100644 --- a/accounts/url.go +++ b/accounts/url.go @@ -64,7 +64,7 @@ func (u URL) String() string { func (u URL) TerminalString() string { url := u.String() if len(url) > 32 { - return url[:31] + "…" + return url[:31] + ".." } return url } diff --git a/accounts/url_test.go b/accounts/url_test.go index d5d65b08..239aa06d 100644 --- a/accounts/url_test.go +++ b/accounts/url_test.go @@ -21,7 +21,7 @@ import ( ) func TestURLParsing(t *testing.T) { - url, err := parseURL("https://Onther-Tech.org") + url, err := parseURL("https://ethereum.org") if err != nil { t.Errorf("unexpected error: %v", err) } @@ -32,16 +32,17 @@ func TestURLParsing(t *testing.T) { t.Errorf("expected: %v, got: %v", "ethereum.org", url.Path) } - _, err = parseURL("ethereum.org") - if err == nil { - t.Error("expected err, got: nil") + for _, u := range []string{"ethereum.org", ""} { + if _, err = parseURL(u); err == nil { + t.Errorf("input %v, expected err, got: nil", u) + } } } func TestURLString(t *testing.T) { url := URL{Scheme: "https", Path: "ethereum.org"} - if url.String() != "https://Onther-Tech.org" { - t.Errorf("expected: %v, got: %v", "https://Onther-Tech.org", url.String()) + if url.String() != "https://ethereum.org" { + t.Errorf("expected: %v, got: %v", "https://ethereum.org", url.String()) } url = URL{Scheme: "", Path: "ethereum.org"} @@ -56,14 +57,14 @@ func TestURLMarshalJSON(t *testing.T) { if err != nil { t.Errorf("unexpcted error: %v", err) } - if string(json) != "\"https://Onther-Tech.org\"" { - t.Errorf("expected: %v, got: %v", "\"https://Onther-Tech.org\"", string(json)) + if string(json) != "\"https://ethereum.org\"" { + t.Errorf("expected: %v, got: %v", "\"https://ethereum.org\"", string(json)) } } func TestURLUnmarshalJSON(t *testing.T) { url := &URL{} - err := url.UnmarshalJSON([]byte("\"https://Onther-Tech.org\"")) + err := url.UnmarshalJSON([]byte("\"https://ethereum.org\"")) if err != nil { t.Errorf("unexpcted error: %v", err) } diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go index aa36e93b..23be98a0 100644 --- a/accounts/usbwallet/hub.go +++ b/accounts/usbwallet/hub.go @@ -23,9 +23,9 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" "github.com/karalabe/usb" ) diff --git a/accounts/usbwallet/ledger.go b/accounts/usbwallet/ledger.go index 04154699..3de3b409 100644 --- a/accounts/usbwallet/ledger.go +++ b/accounts/usbwallet/ledger.go @@ -28,13 +28,13 @@ import ( "io" "math/big" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" ) // ledgerOpcode is an enumeration encoding the supported Ledger opcodes. @@ -52,8 +52,10 @@ const ( ledgerOpRetrieveAddress ledgerOpcode = 0x02 // Returns the public key and Ethereum address for a given BIP 32 path ledgerOpSignTransaction ledgerOpcode = 0x04 // Signs an Ethereum transaction after having the user validate the parameters ledgerOpGetConfiguration ledgerOpcode = 0x06 // Returns specific wallet application configuration + ledgerOpSignTypedMessage ledgerOpcode = 0x0c // Signs an Ethereum message following the EIP 712 specification ledgerP1DirectlyFetchAddress ledgerParam1 = 0x00 // Return address directly from the wallet + ledgerP1InitTypedMessageData ledgerParam1 = 0x00 // First chunk of Typed Message data ledgerP1InitTransactionData ledgerParam1 = 0x00 // First transaction data block for signing ledgerP1ContTransactionData ledgerParam1 = 0x80 // Subsequent transaction data block for signing ledgerP2DiscardAddressChainCode ledgerParam2 = 0x00 // Do not return the chain code along with the address @@ -163,12 +165,31 @@ func (w *ledgerDriver) SignTx(path accounts.DerivationPath, tx *types.Transactio } // Ensure the wallet is capable of signing the given transaction if chainID != nil && w.version[0] <= 1 && w.version[1] <= 0 && w.version[2] <= 2 { + //lint:ignore ST1005 brand name displayed on the console return common.Address{}, nil, fmt.Errorf("Ledger v%d.%d.%d doesn't support signing this transaction, please update to v1.0.3 at least", w.version[0], w.version[1], w.version[2]) } // All infos gathered and metadata checks out, request signing return w.ledgerSign(path, tx, chainID) } +// SignTypedMessage implements usbwallet.driver, sending the message to the Ledger and +// waiting for the user to sign or deny the transaction. +// +// Note: this was introduced in the ledger 1.5.0 firmware +func (w *ledgerDriver) SignTypedMessage(path accounts.DerivationPath, domainHash []byte, messageHash []byte) ([]byte, error) { + // If the Ethereum app doesn't run, abort + if w.offline() { + return nil, accounts.ErrWalletClosed + } + // Ensure the wallet is capable of signing the given transaction + if w.version[0] < 1 && w.version[1] < 5 { + //lint:ignore ST1005 brand name displayed on the console + return nil, fmt.Errorf("Ledger version >= 1.5.0 required for EIP-712 signing (found version v%d.%d.%d)", w.version[0], w.version[1], w.version[2]) + } + // All infos gathered and metadata checks out, request signing + return w.ledgerSignTypedMessage(path, domainHash, messageHash) +} + // ledgerVersion retrieves the current version of the Ethereum wallet app running // on the Ledger wallet. // @@ -366,6 +387,68 @@ func (w *ledgerDriver) ledgerSign(derivationPath []uint32, tx *types.Transaction return sender, signed, nil } +// ledgerSignTypedMessage sends the transaction to the Ledger wallet, and waits for the user +// to confirm or deny the transaction. +// +// The signing protocol is defined as follows: +// +// CLA | INS | P1 | P2 | Lc | Le +// ----+-----+----+-----------------------------+-----+--- +// E0 | 0C | 00 | implementation version : 00 | variable | variable +// +// Where the input is: +// +// Description | Length +// -------------------------------------------------+---------- +// Number of BIP 32 derivations to perform (max 10) | 1 byte +// First derivation index (big endian) | 4 bytes +// ... | 4 bytes +// Last derivation index (big endian) | 4 bytes +// domain hash | 32 bytes +// message hash | 32 bytes +// +// +// +// And the output data is: +// +// Description | Length +// ------------+--------- +// signature V | 1 byte +// signature R | 32 bytes +// signature S | 32 bytes +func (w *ledgerDriver) ledgerSignTypedMessage(derivationPath []uint32, domainHash []byte, messageHash []byte) ([]byte, error) { + // Flatten the derivation path into the Ledger request + path := make([]byte, 1+4*len(derivationPath)) + path[0] = byte(len(derivationPath)) + for i, component := range derivationPath { + binary.BigEndian.PutUint32(path[1+4*i:], component) + } + // Create the 712 message + payload := append(path, domainHash...) + payload = append(payload, messageHash...) + + // Send the request and wait for the response + var ( + op = ledgerP1InitTypedMessageData + reply []byte + err error + ) + + // Send the message over, ensuring it's processed correctly + reply, err = w.ledgerExchange(ledgerOpSignTypedMessage, op, 0, payload) + + if err != nil { + return nil, err + } + + // Extract the Ethereum signature and do a sanity validation + if len(reply) != crypto.SignatureLength { + return nil, errors.New("reply lacks signature") + } + signature := append(reply[1:], reply[0]) + return signature, nil +} + // ledgerExchange performs a data exchange with the Ledger wallet, sending it a // message and retrieving the response. // diff --git a/accounts/usbwallet/trezor.go b/accounts/usbwallet/trezor.go index 0e7eb76d..e385682a 100644 --- a/accounts/usbwallet/trezor.go +++ b/accounts/usbwallet/trezor.go @@ -27,12 +27,12 @@ import ( "io" "math/big" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/usbwallet/trezor" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/accounts" + "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" + "github.com/ethereum/go-ethereum/log" "github.com/golang/protobuf/proto" ) @@ -185,6 +185,10 @@ func (w *trezorDriver) SignTx(path accounts.DerivationPath, tx *types.Transactio return w.trezorSign(path, tx, chainID) } +func (w *trezorDriver) SignTypedMessage(path accounts.DerivationPath, domainHash []byte, messageHash []byte) ([]byte, error) { + return nil, accounts.ErrNotSupported +} + // trezorDerive sends a derivation request to the Trezor device and returns the // Ethereum address located on that path. func (w *trezorDriver) trezorDerive(derivationPath []uint32) (common.Address, error) { @@ -192,10 +196,10 @@ func (w *trezorDriver) trezorDerive(derivationPath []uint32) (common.Address, er if _, err := w.trezorExchange(&trezor.EthereumGetAddress{AddressN: derivationPath}, address); err != nil { return common.Address{}, err } - if addr := address.GetAddressBin(); len(addr) > 0 { // Older firmwares use binary fomats + if addr := address.GetAddressBin(); len(addr) > 0 { // Older firmwares use binary formats return common.BytesToAddress(addr), nil } - if addr := address.GetAddressHex(); len(addr) > 0 { // Newer firmwares use hexadecimal fomats + if addr := address.GetAddressHex(); len(addr) > 0 { // Newer firmwares use hexadecimal formats return common.HexToAddress(addr), nil } return common.Address{}, errors.New("missing derived address") @@ -255,9 +259,11 @@ func (w *trezorDriver) trezorSign(derivationPath []uint32, tx *types.Transaction if chainID == nil { signer = new(types.HomesteadSigner) } else { + // Trezor backend does not support typed transactions yet. signer = types.NewEIP155Signer(chainID) signature[64] -= byte(chainID.Uint64()*2 + 35) } + // Inject the final signature into the transaction and sanity check the sender signed, err := tx.WithSignature(signer, signature) if err != nil { diff --git a/accounts/usbwallet/wallet.go b/accounts/usbwallet/wallet.go index 36595c0b..0e399a6d 100644 --- a/accounts/usbwallet/wallet.go +++ b/accounts/usbwallet/wallet.go @@ -25,12 +25,12 @@ import ( "sync" "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" + "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" "github.com/karalabe/usb" ) @@ -67,6 +67,8 @@ type driver interface { // SignTx sends the transaction to the USB device and waits for the user to confirm // or deny the transaction. SignTx(path accounts.DerivationPath, tx *types.Transaction, chainID *big.Int) (common.Address, *types.Transaction, error) + + SignTypedMessage(path accounts.DerivationPath, messageHash []byte, domainHash []byte) ([]byte, error) } // wallet represents the common functionality shared by all USB hardware @@ -368,18 +370,22 @@ func (w *wallet) selfDerive() { 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 + // We've just self-derived a new account, start tracking it locally + // unless the account was empty. + path := make(accounts.DerivationPath, len(nextPaths[i])) + copy(path[:], nextPaths[i][:]) if balance.Sign() == 0 && nonce == 0 { empty = true + // If it indeed was empty, make a log output for it anyway. In the case + // of legacy-ledger, the first account on the legacy-path will + // be shown to the user, even if we don't actively track it if i < len(nextAddrs)-1 { + w.log.Info("Skipping tracking first account on legacy path, use personal.deriveAccount(,, false) to track", + "path", path, "address", nextAddrs[i]) 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)}, @@ -489,8 +495,8 @@ func (w *wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Accoun // 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 +// Note, self derivation will increment the last component of the specified path +// opposed to descending into a child path to allow discovering accounts starting // from non zero components. // // Some hardware wallets switched derivation paths through their evolution, so @@ -520,7 +526,45 @@ func (w *wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) // 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)) + // Unless we are doing 712 signing, simply dispatch to signHash + if !(mimeType == accounts.MimetypeTypedData && len(data) == 66 && data[0] == 0x19 && data[1] == 0x01) { + return w.signHash(account, crypto.Keccak256(data)) + } + + // dispatch to 712 signing if the mimetype is TypedData and the format matches + w.stateLock.RLock() // Comms have own mutex, this is for the state fields + defer w.stateLock.RUnlock() + + // If the wallet is closed, abort + if w.device == nil { + return nil, accounts.ErrWalletClosed + } + // Make sure the requested account is contained within + path, ok := w.paths[account.Address] + if !ok { + return nil, accounts.ErrUnknownAccount + } + // All infos gathered and metadata checks out, request signing + <-w.commsLock + defer func() { w.commsLock <- struct{}{} }() + + // Ensure the device isn't screwed with while user confirmation is pending + // TODO(karalabe): remove if hotplug lands on Windows + w.hub.commsLock.Lock() + w.hub.commsPend++ + w.hub.commsLock.Unlock() + + defer func() { + w.hub.commsLock.Lock() + w.hub.commsPend-- + w.hub.commsLock.Unlock() + }() + // Sign the transaction + signature, err := w.driver.SignTypedMessage(path, data[2:34], data[34:66]) + if err != nil { + return nil, err + } + return signature, nil } // SignDataWithPassphrase implements accounts.Wallet, attempting to sign the given diff --git a/appveyor.yml b/appveyor.yml index 473ee1b7..d477e6db 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,40 +1,57 @@ -os: Visual Studio 2015 - -# Clone directly into GOPATH. -clone_folder: C:\gopath\src\github.com\ethereum\go-ethereum clone_depth: 5 version: "{branch}.{build}" + +image: + - Ubuntu + - Visual Studio 2019 + environment: - global: - GOPATH: C:\gopath - CC: gcc.exe matrix: - GETH_ARCH: amd64 - MSYS2_ARCH: x86_64 - MSYS2_BITS: 64 - MSYSTEM: MINGW64 - PATH: C:\msys64\mingw64\bin\;C:\Program Files (x86)\NSIS\;%PATH% + GETH_MINGW: 'C:\msys64\mingw64' - GETH_ARCH: 386 - MSYS2_ARCH: i686 - MSYS2_BITS: 32 - MSYSTEM: MINGW32 - PATH: C:\msys64\mingw32\bin\;C:\Program Files (x86)\NSIS\;%PATH% + GETH_MINGW: 'C:\msys64\mingw32' install: - - git submodule update --init - - rmdir C:\go /s /q - - appveyor DownloadFile https://dl.google.com/go/go1.12.9.windows-%GETH_ARCH%.zip - - 7z x go1.12.9.windows-%GETH_ARCH%.zip -y -oC:\ > NUL + - git submodule update --init --depth 1 --recursive - go version - - gcc --version -build_script: - - go run build\ci.go install +for: + # Linux has its own script without -arch and -cc. + # The linux builder also runs lint. + - matrix: + only: + - image: Ubuntu + build_script: + - go run build/ci.go lint + - go run build/ci.go install -dlgo + test_script: + - go run build/ci.go test -dlgo -coverage -after_build: - - go run build\ci.go archive -type zip -signer WINDOWS_SIGNING_KEY -upload gethstore/builds - - go run build\ci.go nsis -signer WINDOWS_SIGNING_KEY -upload gethstore/builds + # linux/386 is disabled. + - matrix: + exclude: + - image: Ubuntu + GETH_ARCH: 386 -test_script: - - set CGO_ENABLED=1 - - go run build\ci.go test -coverage + # Windows builds for amd64 + 386. + - matrix: + only: + - image: Visual Studio 2019 + environment: + # We use gcc from MSYS2 because it is the most recent compiler version available on + # AppVeyor. Note: gcc.exe only works properly if the corresponding bin/ directory is + # contained in PATH. + GETH_CC: '%GETH_MINGW%\bin\gcc.exe' + PATH: '%GETH_MINGW%\bin;C:\Program Files (x86)\NSIS\;%PATH%' + build_script: + - 'echo %GETH_ARCH%' + - 'echo %GETH_CC%' + - '%GETH_CC% --version' + - go run build/ci.go install -dlgo -arch %GETH_ARCH% -cc %GETH_CC% + after_build: + # Upload builds. Note that ci.go makes this a no-op PR builds. + - go run build/ci.go archive -arch %GETH_ARCH% -type zip -signer WINDOWS_SIGNING_KEY -upload gethstore/builds + - go run build/ci.go nsis -arch %GETH_ARCH% -signer WINDOWS_SIGNING_KEY -upload gethstore/builds + test_script: + - go run build/ci.go test -dlgo -arch %GETH_ARCH% -cc %GETH_CC% -coverage diff --git a/build/bot/macos-build.sh b/build/bot/macos-build.sh new file mode 100644 index 00000000..f1620bca --- /dev/null +++ b/build/bot/macos-build.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e -x + +# -- Check XCode version +xcodebuild -version +# xcrun simctl list + +# -- Build for macOS and upload to Azure +go run build/ci.go install -dlgo +go run build/ci.go archive -type tar # -signer OSX_SIGNING_KEY -upload gethstore/builds + +# # -- CocoaPods +# gem uninstall cocoapods -a -x +# gem install cocoapods +# mv ~/.cocoapods/repos/master ~/.cocoapods/repos/master.bak +# sed -i '.bak' 's/repo.join/!repo.join/g' $(dirname `gem which cocoapods`)/cocoapods/sources_manager.rb +# git clone --depth=1 https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/master +# pod setup --verbose + +# # -- Build for iOS and upload to Azure +# go run build/ci.go xcode -signer IOS_SIGNING_KEY -upload gethstore/builds diff --git a/build/bot/ppa-build.sh b/build/bot/ppa-build.sh new file mode 100644 index 00000000..ca04262a --- /dev/null +++ b/build/bot/ppa-build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e -x + +# Note: this script is meant to be run in a Debian/Ubuntu docker container, +# as user 'root'. + +# Install the required tools for creating source packages. +apt-get -yq --no-install-suggests --no-install-recommends install\ + devscripts debhelper dput fakeroot + +# Add the SSH key of ppa.launchpad.net to known_hosts. +mkdir -p ~/.ssh +echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts + +# Build the source package and upload. +go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder " diff --git a/build/checksums.txt b/build/checksums.txt new file mode 100644 index 00000000..f7b13a03 --- /dev/null +++ b/build/checksums.txt @@ -0,0 +1,38 @@ +# This file contains sha256 checksums of optional build dependencies. + +9920d3306a1ac536cdd2c796d6cb3c54bc559c226fc3cc39c32f1e0bd7f50d2a go1.18.5.src.tar.gz +828eeca8b5abea3e56921df8fa4b1101380a5ebcfee10acbc8ffe7ec0bf5876b go1.18.5.darwin-amd64.tar.gz +923a377c6fc9a2c789f5db61c24b8f64133f7889056897449891f256af34065f go1.18.5.darwin-arm64.tar.gz +c3d90264a706e2d88cfb44126dc6f0d008a48f00732e04bc377cea1a2b716a7c go1.18.5.freebsd-386.tar.gz +0de23843c568d388bc0f0e390a8966938cccaae0d74b698325f7175bac04e0c6 go1.18.5.freebsd-amd64.tar.gz +0c44f85d146c6f98c34e8ff436a42af22e90e36fe232d3d9d3101f23fd61362b go1.18.5.linux-386.tar.gz +9e5de37f9c49942c601b191ac5fba404b868bfc21d446d6960acc12283d6e5f2 go1.18.5.linux-amd64.tar.gz +006f6622718212363fa1ff004a6ab4d87bbbe772ec5631bab7cac10be346e4f1 go1.18.5.linux-arm64.tar.gz +d5ac34ac5f060a5274319aa04b7b11e41b123bd7887d64efb5f44ead236957af go1.18.5.linux-armv6l.tar.gz +2e37fb9c7cbaedd4e729492d658aa4cde821fc94117391a8105c13b25ca1c84b go1.18.5.linux-ppc64le.tar.gz +e3d536e7873639f85353e892444f83b14cb6670603961f215986ae8e28e8e07a go1.18.5.linux-s390x.tar.gz +7b3142ec0c5db991e7f73a231662a92429b90ee151fe47557acb566d8d9ae4d3 go1.18.5.windows-386.zip +73753620602d4b4469770040c53db55e5dd6af2ad07ecc18f71f164c3224eaad go1.18.5.windows-amd64.zip +4d154626affff12ef73ea1017af0e5b52dbc839ef92f6f9e76cf4f71278a5744 go1.18.5.windows-arm64.zip + +658078aaaf7608693f37c4cf1380b2af418ab8b2d23fdb33e7e2d4339328590e golangci-lint-1.46.2-darwin-amd64.tar.gz +81f9b4afd62ec5e612ef8bc3b1d612a88b56ff289874831845cdad394427385f golangci-lint-1.46.2-darwin-arm64.tar.gz +943486e703e62ec55ecd90caeb22bcd39f8cc3962a93eec18c06b7bae12cb46f golangci-lint-1.46.2-freebsd-386.tar.gz +a75dd9ba7e08e8315c411697171db5375c0f6a1ece9e6fbeb9e9a4386822e17d golangci-lint-1.46.2-freebsd-amd64.tar.gz +83eedca1af72e8be055a1235177eb1b33524fbf08bec5730df2e6c3efade2b23 golangci-lint-1.46.2-freebsd-armv6.tar.gz +513d276c490de6f82baa01f9346d8d78b385f2ae97608f42f05d1f0f1314cd54 golangci-lint-1.46.2-freebsd-armv7.tar.gz +461a60016d516c69d406dc3e2d4957b722dbe684b7085dfac4802d0f84409e27 golangci-lint-1.46.2-linux-386.tar.gz +242cd4f2d6ac0556e315192e8555784d13da5d1874e51304711570769c4f2b9b golangci-lint-1.46.2-linux-amd64.tar.gz +ff5448ada2b3982581984d64b0dec614dba0a3ea4cab2d6a343c77927fc89f7e golangci-lint-1.46.2-linux-arm64.tar.gz +177f5210ef04aee282bfbc6ec519d36af5fb7d2b2c8d3f4ea5e59fdba71b0a27 golangci-lint-1.46.2-linux-armv6.tar.gz +10dd512a36ee978a1009edbca3ba3af410f0fda8df4d85f0e4793a24213870cc golangci-lint-1.46.2-linux-armv7.tar.gz +67779fa517c688c9db1090c3c456117d95c6b92979c623fe8cce8fb84251f21e golangci-lint-1.46.2-linux-mips64.tar.gz +c085f0f57bdccbb2c902a41b72ce210a3dfff16ca856789374745ab52004b6ee golangci-lint-1.46.2-linux-mips64le.tar.gz +abecef6421499248e58ed75d2938bc12b4b1f98b057f25060680b77bb51a881e golangci-lint-1.46.2-linux-ppc64le.tar.gz +134843a8f5c5c182c11979ea75f5866945d54757b2a04f3e5e04a0cf4fbf3a39 golangci-lint-1.46.2-linux-riscv64.tar.gz +9fe21a9476567aafe7a2e1a926b9641a39f920d4c0ea8eda9d968bc6136337f9 golangci-lint-1.46.2-linux-s390x.tar.gz +b48a421ec12a43f8fc8f977b9cf7d4a1ea1c4b97f803a238de7d3ce4ab23a84b golangci-lint-1.46.2-windows-386.zip +604acc1378a566abb0eac799362f3a37b7fcb5fa2268aeb2d5d954c829367301 golangci-lint-1.46.2-windows-amd64.zip +927def10db073da9687594072e6a3d9c891f67fa897105a2cfd715e018e7386c golangci-lint-1.46.2-windows-arm64.zip +729b76ed1d8b4e2612e38772b211503cb940e00a137bbaace1aa066f7c943737 golangci-lint-1.46.2-windows-armv6.zip +ea27c86d91e0b245ecbcfbf6cdb4ac0522d4bc6dca56bba02ea1bc77ad2917ac golangci-lint-1.46.2-windows-armv7.zip diff --git a/build/ci-notes.md b/build/ci-notes.md index 13e1fd23..edd9adc1 100644 --- a/build/ci-notes.md +++ b/build/ci-notes.md @@ -22,19 +22,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.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 +we bundle the entire Go sources into our own source archive and start the built job by +compiling Go and then using that to build go-ethereum. On Trusty we have a special case +requiring the `~gophers/ubuntu/archive` PPA since Trusty can't even build Go itself. PPA +deps are set 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.11 and Debian packaging tools: +Install any version of Go and Debian packaging tools: - $ sudo apt-add-repository ppa:gophers/ubuntu/archive - $ sudo apt-get update - $ sudo apt-get install build-essential golang-1.11 devscripts debhelper python-bzrlib python-paramiko + $ sudo apt-get install build-essential golang-go devscripts debhelper python-bzrlib python-paramiko Create the source packages: @@ -42,10 +41,10 @@ Create the source packages: Then go into the source package directory for your running distribution and build the package: - $ cd dist/ethereum-unstable-1.6.0+xenial + $ cd dist/ethereum-unstable-1.9.6+bionic $ dpkg-buildpackage Built packages are placed in the dist/ directory. $ cd .. - $ dpkg-deb -c geth-unstable_1.6.0+xenial_amd64.deb + $ dpkg-deb -c geth-unstable_1.9.6+bionic_amd64.deb diff --git a/build/ci.go b/build/ci.go index f37689d2..24f225b7 100644 --- a/build/ci.go +++ b/build/ci.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build none // +build none /* @@ -26,13 +27,12 @@ Available commands are: install [ -arch architecture ] [ -cc compiler ] [ packages... ] -- builds packages and executables test [ -coverage ] [ packages... ] -- runs the tests lint -- runs certain pre-selected linters - archive [ -arch architecture ] [ -type zip|tar ] [ -signer key-envvar ] [ -upload dest ] -- archives build artifacts + archive [ -arch architecture ] [ -type zip|tar ] [ -signer key-envvar ] [ -signify key-envvar ] [ -upload dest ] -- archives build artifacts importkeys -- imports signing keys from env debsrc [ -signer key-id ] [ -upload dest ] -- creates a debian source package nsis -- creates a Windows NSIS installer aar [ -local ] [ -sign key-id ] [-deploy repo] [ -upload dest ] -- creates an Android archive xcode [ -local ] [ -sign key-id ] [-deploy repo] [ -upload dest ] -- creates an iOS XCode framework - xgo [ -alltools ] [ options ] -- cross builds according to options purge [ -store blobstore ] [ -days threshold ] -- purges old archives from the blobstore For all commands, -n prevents execution of external programs (dry run mode). @@ -46,20 +46,22 @@ import ( "encoding/base64" "flag" "fmt" - "go/parser" - "go/token" - "io/ioutil" "log" "os" "os/exec" + "path" "path/filepath" "regexp" "runtime" + "strconv" "strings" "time" - "github.com/cryptoecc/ETH-ECC/internal/build" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/cespare/cp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto/signify" + "github.com/ethereum/go-ethereum/internal/build" + "github.com/ethereum/go-ethereum/params" ) var ( @@ -78,7 +80,6 @@ var ( executablePath("geth"), executablePath("puppeth"), executablePath("rlpdump"), - executablePath("wnode"), executablePath("clef"), } @@ -108,10 +109,6 @@ var ( BinaryName: "rlpdump", Description: "Developer utility tool that prints RLP structures.", }, - { - BinaryName: "wnode", - Description: "Ethereum Whisper diagnostic tool", - }, { BinaryName: "clef", Description: "Ethereum account management tool.", @@ -119,7 +116,6 @@ var ( } // A debian package is created for all executables listed here. - debEthereum = debPackage{ Name: "ethereum", Version: params.Version, @@ -133,12 +129,27 @@ var ( // 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 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"} + // Note: the following Ubuntu releases have been officially deprecated on Launchpad: + // wily, yakkety, zesty, artful, cosmic, disco, eoan, groovy, hirsuite + debDistroGoBoots = map[string]string{ + "trusty": "golang-1.11", // EOL: 04/2024 + "xenial": "golang-go", // EOL: 04/2026 + "bionic": "golang-go", // EOL: 04/2028 + "focal": "golang-go", // EOL: 04/2030 + "impish": "golang-go", // EOL: 07/2022 + "jammy": "golang-go", // EOL: 04/2032 + //"kinetic": "golang-go", // EOL: 07/2023 + } + + debGoBootPaths = map[string]string{ + "golang-1.11": "/usr/lib/go-1.11", + "golang-go": "/usr/lib/go", + } + + // This is the version of go that will be downloaded by + // + // go run ci.go install -dlgo + dlgoVersion = "1.18.5" ) var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin")) @@ -153,7 +164,7 @@ func executablePath(name string) string { func main() { log.SetFlags(log.Lshortfile) - if _, err := os.Stat(filepath.Join("build", "ci.go")); os.IsNotExist(err) { + if !common.FileExist(filepath.Join("build", "ci.go")) { log.Fatal("this script must be run from the root of the repository") } if len(os.Args) < 2 { @@ -168,6 +179,8 @@ func main() { doLint(os.Args[2:]) case "archive": doArchive(os.Args[2:]) + case "docker": + doDocker(os.Args[2:]) case "debsrc": doDebianSource(os.Args[2:]) case "nsis": @@ -176,8 +189,6 @@ func main() { doAndroidArchive(os.Args[2:]) case "xcode": doXCodeFramework(os.Args[2:]) - case "xgo": - doXgo(os.Args[2:]) case "purge": doPurge(os.Args[2:]) default: @@ -189,113 +200,88 @@ func main() { func doInstall(cmdline []string) { var ( - arch = flag.String("arch", "", "Architecture to cross build for") - cc = flag.String("cc", "", "C compiler to cross build with") + dlgo = flag.Bool("dlgo", false, "Download Go and build with it") + arch = flag.String("arch", "", "Architecture to cross build for") + cc = flag.String("cc", "", "C compiler to cross build with") + staticlink = flag.Bool("static", false, "Create statically-linked executable") ) flag.CommandLine.Parse(cmdline) - env := build.Env() - // Check Go version. People regularly open issues about compilation - // failure with outdated Go. This should save them the trouble. - if !strings.Contains(runtime.Version(), "devel") { - // Figure out the minor version number since we can't textually compare (1.10 < 1.9) - var minor int - fmt.Sscanf(strings.TrimPrefix(runtime.Version(), "go1."), "%d", &minor) - - if minor < 9 { - log.Println("You have Go version", runtime.Version()) - log.Println("go-ethereum requires at least Go version 1.9 and cannot") - log.Println("be compiled with an earlier version. Please upgrade your Go installation.") - os.Exit(1) - } + // Configure the toolchain. + tc := build.GoToolchain{GOARCH: *arch, CC: *cc} + if *dlgo { + csdb := build.MustLoadChecksums("build/checksums.txt") + tc.Root = build.DownloadGo(csdb, dlgoVersion) } - // Compile packages given as arguments, or everything if there are no arguments. - packages := []string{"./..."} - if flag.NArg() > 0 { - packages = flag.Args() - } - packages = build.ExpandPackagesNoVendor(packages) - if *arch == "" || *arch == runtime.GOARCH { - goinstall := goTool("install", buildFlags(env)...) - goinstall.Args = append(goinstall.Args, "-v") - goinstall.Args = append(goinstall.Args, packages...) - build.MustRun(goinstall) - return + // Disable CLI markdown doc generation in release builds. + buildTags := []string{"urfave_cli_no_docs"} + + // Configure the build. + env := build.Env() + gobuild := tc.Go("build", buildFlags(env, *staticlink, buildTags)...) + + // arm64 CI builders are memory-constrained and can't handle concurrent builds, + // better disable it. This check isn't the best, it should probably + // check for something in env instead. + if env.CI && runtime.GOARCH == "arm64" { + gobuild.Args = append(gobuild.Args, "-p", "1") } - // If we are cross compiling to ARMv5 ARMv6 or ARMv7, clean any previous builds - if *arch == "arm" { - os.RemoveAll(filepath.Join(runtime.GOROOT(), "pkg", runtime.GOOS+"_arm")) - for _, path := range filepath.SplitList(build.GOPATH()) { - os.RemoveAll(filepath.Join(path, "pkg", runtime.GOOS+"_arm")) - } + + // We use -trimpath to avoid leaking local paths into the built executables. + gobuild.Args = append(gobuild.Args, "-trimpath") + + // Show packages during build. + gobuild.Args = append(gobuild.Args, "-v") + + // Now we choose what we're even building. + // Default: collect all 'main' packages in cmd/ and build those. + packages := flag.Args() + if len(packages) == 0 { + packages = build.FindMainPackages("./cmd") } - // Seems we are cross compiling, work around forbidden GOBIN - goinstall := goToolArch(*arch, *cc, "install", buildFlags(env)...) - goinstall.Args = append(goinstall.Args, "-v") - goinstall.Args = append(goinstall.Args, []string{"-buildmode", "archive"}...) - goinstall.Args = append(goinstall.Args, packages...) - build.MustRun(goinstall) - - if cmds, err := ioutil.ReadDir("cmd"); err == nil { - for _, cmd := range cmds { - pkgs, err := parser.ParseDir(token.NewFileSet(), filepath.Join(".", "cmd", cmd.Name()), nil, parser.PackageClauseOnly) - if err != nil { - log.Fatal(err) - } - for name := range pkgs { - if name == "main" { - gobuild := goToolArch(*arch, *cc, "build", buildFlags(env)...) - gobuild.Args = append(gobuild.Args, "-v") - gobuild.Args = append(gobuild.Args, []string{"-o", executablePath(cmd.Name())}...) - gobuild.Args = append(gobuild.Args, "."+string(filepath.Separator)+filepath.Join("cmd", cmd.Name())) - build.MustRun(gobuild) - break - } - } - } + + // Do the build! + for _, pkg := range packages { + args := make([]string, len(gobuild.Args)) + copy(args, gobuild.Args) + args = append(args, "-o", executablePath(path.Base(pkg))) + args = append(args, pkg) + build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env}) } } -func buildFlags(env build.Environment) (flags []string) { +// buildFlags returns the go tool flags for building. +func buildFlags(env build.Environment, staticLinking bool, buildTags []string) (flags []string) { var ld []string if env.Commit != "" { ld = append(ld, "-X", "main.gitCommit="+env.Commit) ld = append(ld, "-X", "main.gitDate="+env.Date) } + // Strip DWARF on darwin. This used to be required for certain things, + // and there is no downside to this, so we just keep doing it. if runtime.GOOS == "darwin" { ld = append(ld, "-s") } - + if runtime.GOOS == "linux" { + // Enforce the stacksize to 8M, which is the case on most platforms apart from + // alpine Linux. + extld := []string{"-Wl,-z,stack-size=0x800000"} + if staticLinking { + extld = append(extld, "-static") + // Under static linking, use of certain glibc features must be + // disabled to avoid shared library dependencies. + buildTags = append(buildTags, "osusergo", "netgo") + } + ld = append(ld, "-extldflags", "'"+strings.Join(extld, " ")+"'") + } if len(ld) > 0 { flags = append(flags, "-ldflags", strings.Join(ld, " ")) } - return flags -} - -func goTool(subcmd string, args ...string) *exec.Cmd { - return goToolArch(runtime.GOARCH, os.Getenv("CC"), subcmd, args...) -} - -func goToolArch(arch string, cc string, subcmd string, args ...string) *exec.Cmd { - cmd := build.GoTool(subcmd, args...) - cmd.Env = []string{"GOPATH=" + build.GOPATH()} - if arch == "" || arch == runtime.GOARCH { - cmd.Env = append(cmd.Env, "GOBIN="+GOBIN) - } else { - cmd.Env = append(cmd.Env, "CGO_ENABLED=1") - cmd.Env = append(cmd.Env, "GOARCH="+arch) - } - if cc != "" { - cmd.Env = append(cmd.Env, "CC="+cc) - } - for _, e := range os.Environ() { - if strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "GOBIN=") { - continue - } - cmd.Env = append(cmd.Env, e) + if len(buildTags) > 0 { + flags = append(flags, "-tags", strings.Join(buildTags, ",")) } - return cmd + return flags } // Running The Tests @@ -303,72 +289,97 @@ func goToolArch(arch string, cc string, subcmd string, args ...string) *exec.Cmd // "tests" also includes static analysis tools such as vet. func doTest(cmdline []string) { - coverage := flag.Bool("coverage", false, "Whether to record code coverage") + var ( + dlgo = flag.Bool("dlgo", false, "Download Go and build with it") + arch = flag.String("arch", "", "Run tests for given architecture") + cc = flag.String("cc", "", "Sets C compiler binary") + coverage = flag.Bool("coverage", false, "Whether to record code coverage") + verbose = flag.Bool("v", false, "Whether to log verbosely") + race = flag.Bool("race", false, "Execute the race detector") + ) flag.CommandLine.Parse(cmdline) - env := build.Env() - packages := []string{"./..."} - if len(flag.CommandLine.Args()) > 0 { - packages = flag.CommandLine.Args() + // Configure the toolchain. + tc := build.GoToolchain{GOARCH: *arch, CC: *cc} + if *dlgo { + csdb := build.MustLoadChecksums("build/checksums.txt") + tc.Root = build.DownloadGo(csdb, dlgoVersion) } - packages = build.ExpandPackagesNoVendor(packages) + gotest := tc.Go("test") - // 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") if *coverage { gotest.Args = append(gotest.Args, "-covermode=atomic", "-cover") } + if *verbose { + gotest.Args = append(gotest.Args, "-v") + } + if *race { + gotest.Args = append(gotest.Args, "-race") + } + packages := []string{"./..."} + if len(flag.CommandLine.Args()) > 0 { + packages = flag.CommandLine.Args() + } gotest.Args = append(gotest.Args, packages...) build.MustRun(gotest) } -// runs gometalinter on requested packages +// doLint runs golangci-lint on requested packages. func doLint(cmdline []string) { + var ( + cachedir = flag.String("cachedir", "./build/cache", "directory for caching golangci-lint binary.") + ) flag.CommandLine.Parse(cmdline) - packages := []string{"./..."} if len(flag.CommandLine.Args()) > 0 { packages = flag.CommandLine.Args() } - // Get metalinter and install all supported linters - build.MustRun(goTool("get", "gopkg.in/alecthomas/gometalinter.v2")) - build.MustRunCommand(filepath.Join(GOBIN, "gometalinter.v2"), "--install") - - // Run fast linters batched together - configs := []string{ - "--vendor", - "--tests", - "--deadline=2m", - "--disable-all", - "--enable=goimports", - "--enable=varcheck", - "--enable=vet", - "--enable=gofmt", - "--enable=misspell", - "--enable=goconst", - "--min-occurrences=6", // for goconst - } - build.MustRunCommand(filepath.Join(GOBIN, "gometalinter.v2"), append(configs, packages...)...) - - // Run slow linters one by one - for _, linter := range []string{"unconvert", "gosimple"} { - configs = []string{"--vendor", "--tests", "--deadline=10m", "--disable-all", "--enable=" + linter} - build.MustRunCommand(filepath.Join(GOBIN, "gometalinter.v2"), append(configs, packages...)...) + + linter := downloadLinter(*cachedir) + lflags := []string{"run", "--config", ".golangci.yml"} + build.MustRunCommand(linter, append(lflags, packages...)...) + fmt.Println("You have achieved perfection.") +} + +// downloadLinter downloads and unpacks golangci-lint. +func downloadLinter(cachedir string) string { + const version = "1.46.2" + + csdb := build.MustLoadChecksums("build/checksums.txt") + arch := runtime.GOARCH + ext := ".tar.gz" + + if runtime.GOOS == "windows" { + ext = ".zip" + } + if arch == "arm" { + arch += "v" + os.Getenv("GOARM") + } + base := fmt.Sprintf("golangci-lint-%s-%s-%s", version, runtime.GOOS, arch) + url := fmt.Sprintf("https://github.com/golangci/golangci-lint/releases/download/v%s/%s%s", version, base, ext) + archivePath := filepath.Join(cachedir, base+ext) + if err := csdb.DownloadFile(url, archivePath); err != nil { + log.Fatal(err) + } + if err := build.ExtractArchive(archivePath, cachedir); err != nil { + log.Fatal(err) } + return filepath.Join(cachedir, base, "golangci-lint") } // Release Packaging func doArchive(cmdline []string) { var ( - arch = flag.String("arch", runtime.GOARCH, "Architecture cross packaging") - atype = flag.String("type", "zip", "Type of archive to write (zip|tar)") - signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. LINUX_SIGNING_KEY)`) - upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) - ext string + arch = flag.String("arch", runtime.GOARCH, "Architecture cross packaging") + atype = flag.String("type", "zip", "Type of archive to write (zip|tar)") + signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. LINUX_SIGNING_KEY)`) + signify = flag.String("signify", "", `Environment variable holding the signify key (e.g. LINUX_SIGNIFY_KEY)`) + upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) + ext string ) flag.CommandLine.Parse(cmdline) switch *atype { @@ -381,8 +392,7 @@ func doArchive(cmdline []string) { } var ( - env = build.Env() - + env = build.Env() basegeth = archiveBasename(*arch, params.ArchiveVersion(env.Commit)) geth = "geth-" + basegeth + ext alltools = "geth-alltools-" + basegeth + ext @@ -395,7 +405,7 @@ func doArchive(cmdline []string) { log.Fatal(err) } for _, archive := range []string{geth, alltools} { - if err := archiveUpload(archive, *upload, *signer); err != nil { + if err := archiveUpload(archive, *upload, *signer, *signify); err != nil { log.Fatal(err) } } @@ -415,7 +425,7 @@ func archiveBasename(arch string, archiveVersion string) string { return platform + "-" + archiveVersion } -func archiveUpload(archive string, blobstore string, signer string) error { +func archiveUpload(archive string, blobstore string, signer string, signifyVar string) error { // If signing was requested, generate the signature files if signer != "" { key := getenvBase64(signer) @@ -423,6 +433,14 @@ func archiveUpload(archive string, blobstore string, signer string) error { return err } } + if signifyVar != "" { + key := os.Getenv(signifyVar) + untrustedComment := "verify with geth-release.pub" + trustedComment := fmt.Sprintf("%s (%s)", archive, time.Now().UTC().Format(time.RFC1123)) + if err := signify.SignFile(archive, archive+".sig", key, untrustedComment, trustedComment); err != nil { + return err + } + } // If uploading to Azure was requested, push the archive possibly with its signature if blobstore != "" { auth := build.AzureBlobstoreConfig{ @@ -438,6 +456,11 @@ func archiveUpload(archive string, blobstore string, signer string) error { return err } } + if signifyVar != "" { + if err := build.AzureBlobstoreUpload(archive+".sig", filepath.Base(archive+".sig"), auth); err != nil { + return err + } + } } return nil } @@ -445,31 +468,199 @@ func archiveUpload(archive string, blobstore string, signer string) error { // skips archiving for some build configurations. func maybeSkipArchive(env build.Environment) { if env.IsPullRequest { - log.Printf("skipping because this is a PR build") + log.Printf("skipping archive creation because this is a PR build") os.Exit(0) } if env.IsCronJob { - log.Printf("skipping because this is a cron job") + log.Printf("skipping archive creation because this is a cron job") os.Exit(0) } if env.Branch != "master" && !strings.HasPrefix(env.Tag, "v1.") { - log.Printf("skipping because branch %q, tag %q is not on the whitelist", env.Branch, env.Tag) + log.Printf("skipping archive creation because branch %q, tag %q is not on the inclusion list", env.Branch, env.Tag) os.Exit(0) } } +// Builds the docker images and optionally uploads them to Docker Hub. +func doDocker(cmdline []string) { + var ( + image = flag.Bool("image", false, `Whether to build and push an arch specific docker image`) + manifest = flag.String("manifest", "", `Push a multi-arch docker image for the specified architectures (usually "amd64,arm64")`) + upload = flag.String("upload", "", `Where to upload the docker image (usually "ethereum/client-go")`) + ) + flag.CommandLine.Parse(cmdline) + + // Skip building and pushing docker images for PR builds + env := build.Env() + maybeSkipArchive(env) + + // Retrieve the upload credentials and authenticate + user := getenvBase64("DOCKER_HUB_USERNAME") + pass := getenvBase64("DOCKER_HUB_PASSWORD") + + if len(user) > 0 && len(pass) > 0 { + auther := exec.Command("docker", "login", "-u", string(user), "--password-stdin") + auther.Stdin = bytes.NewReader(pass) + build.MustRun(auther) + } + // Retrieve the version infos to build and push to the following paths: + // - ethereum/client-go:latest - Pushes to the master branch, Geth only + // - ethereum/client-go:stable - Version tag publish on GitHub, Geth only + // - ethereum/client-go:alltools-latest - Pushes to the master branch, Geth & tools + // - ethereum/client-go:alltools-stable - Version tag publish on GitHub, Geth & tools + // - ethereum/client-go:release-. - Version tag publish on GitHub, Geth only + // - ethereum/client-go:alltools-release-. - Version tag publish on GitHub, Geth & tools + // - ethereum/client-go:v.. - Version tag publish on GitHub, Geth only + // - ethereum/client-go:alltools-v.. - Version tag publish on GitHub, Geth & tools + var tags []string + + switch { + case env.Branch == "master": + tags = []string{"latest"} + case strings.HasPrefix(env.Tag, "v1."): + tags = []string{"stable", fmt.Sprintf("release-1.%d", params.VersionMinor), "v" + params.Version} + } + // If architecture specific image builds are requested, build and push them + if *image { + build.MustRunCommand("docker", "build", "--build-arg", "COMMIT="+env.Commit, "--build-arg", "VERSION="+params.VersionWithMeta, "--build-arg", "BUILDNUM="+env.Buildnum, "--tag", fmt.Sprintf("%s:TAG", *upload), ".") + build.MustRunCommand("docker", "build", "--build-arg", "COMMIT="+env.Commit, "--build-arg", "VERSION="+params.VersionWithMeta, "--build-arg", "BUILDNUM="+env.Buildnum, "--tag", fmt.Sprintf("%s:alltools-TAG", *upload), "-f", "Dockerfile.alltools", ".") + + // Tag and upload the images to Docker Hub + for _, tag := range tags { + gethImage := fmt.Sprintf("%s:%s-%s", *upload, tag, runtime.GOARCH) + toolImage := fmt.Sprintf("%s:alltools-%s-%s", *upload, tag, runtime.GOARCH) + + // If the image already exists (non version tag), check the build + // number to prevent overwriting a newer commit if concurrent builds + // are running. This is still a tiny bit racey if two published are + // done at the same time, but that's extremely unlikely even on the + // master branch. + for _, img := range []string{gethImage, toolImage} { + if exec.Command("docker", "pull", img).Run() != nil { + continue // Generally the only failure is a missing image, which is good + } + buildnum, err := exec.Command("docker", "inspect", "--format", "{{index .Config.Labels \"buildnum\"}}", img).CombinedOutput() + if err != nil { + log.Fatalf("Failed to inspect container: %v\nOutput: %s", err, string(buildnum)) + } + buildnum = bytes.TrimSpace(buildnum) + + if len(buildnum) > 0 && len(env.Buildnum) > 0 { + oldnum, err := strconv.Atoi(string(buildnum)) + if err != nil { + log.Fatalf("Failed to parse old image build number: %v", err) + } + newnum, err := strconv.Atoi(env.Buildnum) + if err != nil { + log.Fatalf("Failed to parse current build number: %v", err) + } + if oldnum > newnum { + log.Fatalf("Current build number %d not newer than existing %d", newnum, oldnum) + } else { + log.Printf("Updating %s from build %d to %d", img, oldnum, newnum) + } + } + } + build.MustRunCommand("docker", "image", "tag", fmt.Sprintf("%s:TAG", *upload), gethImage) + build.MustRunCommand("docker", "image", "tag", fmt.Sprintf("%s:alltools-TAG", *upload), toolImage) + build.MustRunCommand("docker", "push", gethImage) + build.MustRunCommand("docker", "push", toolImage) + } + } + // If multi-arch image manifest push is requested, assemble it + if len(*manifest) != 0 { + // Since different architectures are pushed by different builders, wait + // until all required images are updated. + var mismatch bool + for i := 0; i < 2; i++ { // 2 attempts, second is race check + mismatch = false // hope there's no mismatch now + + for _, tag := range tags { + for _, arch := range strings.Split(*manifest, ",") { + gethImage := fmt.Sprintf("%s:%s-%s", *upload, tag, arch) + toolImage := fmt.Sprintf("%s:alltools-%s-%s", *upload, tag, arch) + + for _, img := range []string{gethImage, toolImage} { + if out, err := exec.Command("docker", "pull", img).CombinedOutput(); err != nil { + log.Printf("Required image %s unavailable: %v\nOutput: %s", img, err, out) + mismatch = true + break + } + buildnum, err := exec.Command("docker", "inspect", "--format", "{{index .Config.Labels \"buildnum\"}}", img).CombinedOutput() + if err != nil { + log.Fatalf("Failed to inspect container: %v\nOutput: %s", err, string(buildnum)) + } + buildnum = bytes.TrimSpace(buildnum) + + if string(buildnum) != env.Buildnum { + log.Printf("Build number mismatch on %s: want %s, have %s", img, env.Buildnum, buildnum) + mismatch = true + break + } + } + if mismatch { + break + } + } + if mismatch { + break + } + } + if mismatch { + // Build numbers mismatching, retry in a short time to + // avoid concurrent fails in both publisher images. If + // however the retry failed too, it means the concurrent + // builder is still crunching, let that do the publish. + if i == 0 { + time.Sleep(30 * time.Second) + } + continue + } + break + } + if mismatch { + log.Println("Relinquishing publish to other builder") + return + } + // Assemble and push the Geth manifest image + for _, tag := range tags { + gethImage := fmt.Sprintf("%s:%s", *upload, tag) + + var gethSubImages []string + for _, arch := range strings.Split(*manifest, ",") { + gethSubImages = append(gethSubImages, gethImage+"-"+arch) + } + build.MustRunCommand("docker", append([]string{"manifest", "create", gethImage}, gethSubImages...)...) + build.MustRunCommand("docker", "manifest", "push", gethImage) + } + // Assemble and push the alltools manifest image + for _, tag := range tags { + toolImage := fmt.Sprintf("%s:alltools-%s", *upload, tag) + + var toolSubImages []string + for _, arch := range strings.Split(*manifest, ",") { + toolSubImages = append(toolSubImages, toolImage+"-"+arch) + } + build.MustRunCommand("docker", append([]string{"manifest", "create", toolImage}, toolSubImages...)...) + build.MustRunCommand("docker", "manifest", "push", toolImage) + } + } +} + // Debian Packaging func doDebianSource(cmdline []string) { var ( - signer = flag.String("signer", "", `Signing key name, also used as package author`) - upload = flag.String("upload", "", `Where to upload the source package (usually "ethereum/Onther-Tech")`) - sshUser = flag.String("sftp-user", "", `Username for SFTP upload (usually "geth-ci")`) - workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`) - now = time.Now() + cachedir = flag.String("cachedir", "./build/cache", `Filesystem path to cache the downloaded Go bundles at`) + signer = flag.String("signer", "", `Signing key name, also used as package author`) + upload = flag.String("upload", "", `Where to upload the source package (usually "ethereum/ethereum")`) + sshUser = flag.String("sftp-user", "", `Username for SFTP upload (usually "geth-ci")`) + workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`) + now = time.Now() ) flag.CommandLine.Parse(cmdline) *workdir = makeWorkdir(*workdir) env := build.Env() + tc := new(build.GoToolchain) maybeSkipArchive(env) // Import the signing key. @@ -479,31 +670,71 @@ func doDebianSource(cmdline []string) { build.MustRun(gpg) } - // Create Debian packages and upload them + // Download and verify the Go source package. + gobundle := downloadGoSources(*cachedir) + + // Download all the dependencies needed to build the sources and run the ci script + srcdepfetch := tc.Go("mod", "download") + srcdepfetch.Env = append(srcdepfetch.Env, "GOPATH="+filepath.Join(*workdir, "modgopath")) + build.MustRun(srcdepfetch) + + cidepfetch := tc.Go("run", "./build/ci.go") + cidepfetch.Env = append(cidepfetch.Env, "GOPATH="+filepath.Join(*workdir, "modgopath")) + cidepfetch.Run() // Command fails, don't care, we only need the deps to start it + + // Create Debian packages and upload them. for _, pkg := range debPackages { - for _, distro := range debDistros { - meta := newDebMetadata(distro, *signer, env, now, pkg.Name, pkg.Version, pkg.Executables) + for distro, goboot := range debDistroGoBoots { + // Prepare the debian package with the go-ethereum sources. + meta := newDebMetadata(distro, goboot, *signer, env, now, pkg.Name, pkg.Version, pkg.Executables) pkgdir := stageDebianSource(*workdir, meta) - debuild := exec.Command("debuild", "-S", "-sa", "-us", "-uc", "-d", "-Zxz") + + // Add Go source code + if err := build.ExtractArchive(gobundle, pkgdir); err != nil { + log.Fatalf("Failed to extract Go sources: %v", err) + } + if err := os.Rename(filepath.Join(pkgdir, "go"), filepath.Join(pkgdir, ".go")); err != nil { + log.Fatalf("Failed to rename Go source folder: %v", err) + } + // Add all dependency modules in compressed form + os.MkdirAll(filepath.Join(pkgdir, ".mod", "cache"), 0755) + if err := cp.CopyAll(filepath.Join(pkgdir, ".mod", "cache", "download"), filepath.Join(*workdir, "modgopath", "pkg", "mod", "cache", "download")); err != nil { + log.Fatalf("Failed to copy Go module dependencies: %v", err) + } + // Run the packaging and upload to the PPA + debuild := exec.Command("debuild", "-S", "-sa", "-us", "-uc", "-d", "-Zxz", "-nc") debuild.Dir = pkgdir build.MustRun(debuild) var ( - basename = fmt.Sprintf("%s_%s", meta.Name(), meta.VersionString()) - source = filepath.Join(*workdir, basename+".tar.xz") - dsc = filepath.Join(*workdir, basename+".dsc") - changes = filepath.Join(*workdir, basename+"_source.changes") + basename = fmt.Sprintf("%s_%s", meta.Name(), meta.VersionString()) + source = filepath.Join(*workdir, basename+".tar.xz") + dsc = filepath.Join(*workdir, basename+".dsc") + changes = filepath.Join(*workdir, basename+"_source.changes") + buildinfo = filepath.Join(*workdir, basename+"_source.buildinfo") ) if *signer != "" { build.MustRunCommand("debsign", changes) } if *upload != "" { - ppaUpload(*workdir, *upload, *sshUser, []string{source, dsc, changes}) + ppaUpload(*workdir, *upload, *sshUser, []string{source, dsc, changes, buildinfo}) } } } } +// downloadGoSources downloads the Go source tarball. +func downloadGoSources(cachedir string) string { + csdb := build.MustLoadChecksums("build/checksums.txt") + file := fmt.Sprintf("go%s.src.tar.gz", dlgoVersion) + url := "https://dl.google.com/go/" + file + dst := filepath.Join(cachedir, file) + if err := csdb.DownloadFile(url, dst); err != nil { + log.Fatal(err) + } + return dst +} + func ppaUpload(workdir, ppa, sshUser string, files []string) { p := strings.Split(ppa, "/") if len(p) != 2 { @@ -517,8 +748,8 @@ func ppaUpload(workdir, ppa, sshUser string, files []string) { var idfile string if sshkey := getenvBase64("PPA_SSH_KEY"); len(sshkey) > 0 { idfile = filepath.Join(workdir, "sshkey") - if _, err := os.Stat(idfile); os.IsNotExist(err) { - ioutil.WriteFile(idfile, sshkey, 0600) + if !common.FileExist(idfile) { + os.WriteFile(idfile, sshkey, 0600) } } // Upload @@ -541,7 +772,7 @@ func makeWorkdir(wdflag string) string { if wdflag != "" { err = os.MkdirAll(wdflag, 0744) } else { - wdflag, err = ioutil.TempDir("", "geth-build-") + wdflag, err = os.MkdirTemp("", "geth-build-") } if err != nil { log.Fatal(err) @@ -563,7 +794,9 @@ type debPackage struct { } type debMetadata struct { - Env build.Environment + Env build.Environment + GoBootPackage string + GoBootPath string PackageName string @@ -592,19 +825,21 @@ func (d debExecutable) Package() string { return d.BinaryName } -func newDebMetadata(distro, author string, env build.Environment, t time.Time, name string, version string, exes []debExecutable) debMetadata { +func newDebMetadata(distro, goboot, author string, env build.Environment, t time.Time, name string, version string, exes []debExecutable) debMetadata { if author == "" { // No signing key, use default author. author = "Ethereum Builds " } return debMetadata{ - PackageName: name, - Env: env, - Author: author, - Distro: distro, - Version: version, - Time: t.Format(time.RFC1123Z), - Executables: exes, + GoBootPackage: goboot, + GoBootPath: debGoBootPaths[goboot], + PackageName: name, + Env: env, + Author: author, + Distro: distro, + Version: version, + Time: t.Format(time.RFC1123Z), + Executables: exes, } } @@ -669,7 +904,6 @@ func stageDebianSource(tmpdir string, meta debMetadata) (pkgdir string) { if err := os.Mkdir(pkgdir, 0755); err != nil { log.Fatal(err) } - // Copy the source code. build.MustRunCommand("git", "checkout-index", "-a", "--prefix", pkgdir+string(filepath.Separator)) @@ -687,7 +921,6 @@ func stageDebianSource(tmpdir string, meta debMetadata) (pkgdir string) { build.Render("build/deb/"+meta.PackageName+"/deb.install", install, 0644, exe) build.Render("build/deb/"+meta.PackageName+"/deb.docs", docs, 0644, exe) } - return pkgdir } @@ -697,6 +930,7 @@ func doWindowsInstaller(cmdline []string) { var ( arch = flag.String("arch", runtime.GOARCH, "Architecture for cross build packaging") signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. WINDOWS_SIGNING_KEY)`) + signify = flag.String("signify key", "", `Environment variable holding the signify signing key (e.g. WINDOWS_SIGNIFY_KEY)`) upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`) ) @@ -735,9 +969,12 @@ func doWindowsInstaller(cmdline []string) { build.Render("build/nsis.uninstall.nsh", filepath.Join(*workdir, "uninstall.nsh"), 0644, allTools) build.Render("build/nsis.pathupdate.nsh", filepath.Join(*workdir, "PathUpdate.nsh"), 0644, nil) build.Render("build/nsis.envvarupdate.nsh", filepath.Join(*workdir, "EnvVarUpdate.nsh"), 0644, nil) - build.CopyFile(filepath.Join(*workdir, "SimpleFC.dll"), "build/nsis.simplefc.dll", 0755) - build.CopyFile(filepath.Join(*workdir, "COPYING"), "COPYING", 0755) - + if err := cp.CopyFile(filepath.Join(*workdir, "SimpleFC.dll"), "build/nsis.simplefc.dll"); err != nil { + log.Fatalf("Failed to copy SimpleFC.dll: %v", err) + } + if err := cp.CopyFile(filepath.Join(*workdir, "COPYING"), "COPYING"); err != nil { + log.Fatalf("Failed to copy copyright note: %v", err) + } // Build the installer. This assumes that all the needed files have been previously // built (don't mix building and packaging to keep cross compilation complexity to a // minimum). @@ -745,7 +982,10 @@ func doWindowsInstaller(cmdline []string) { if env.Commit != "" { version[2] += "-" + env.Commit[:8] } - installer, _ := filepath.Abs("geth-" + archiveBasename(*arch, params.ArchiveVersion(env.Commit)) + ".exe") + installer, err := filepath.Abs("geth-" + archiveBasename(*arch, params.ArchiveVersion(env.Commit)) + ".exe") + if err != nil { + log.Fatalf("Failed to convert installer file path: %v", err) + } build.MustRunCommand("makensis.exe", "/DOUTPUTFILE="+installer, "/DMAJORVERSION="+version[0], @@ -754,9 +994,8 @@ func doWindowsInstaller(cmdline []string) { "/DARCH="+*arch, filepath.Join(*workdir, "geth.nsi"), ) - // Sign and publish installer. - if err := archiveUpload(installer, *upload, *signer); err != nil { + if err := archiveUpload(installer, *upload, *signer, *signify); err != nil { log.Fatal(err) } } @@ -765,25 +1004,37 @@ func doWindowsInstaller(cmdline []string) { func doAndroidArchive(cmdline []string) { var ( - local = flag.Bool("local", false, `Flag whether we're only doing a local build (skip Maven artifacts)`) - signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. ANDROID_SIGNING_KEY)`) - deploy = flag.String("deploy", "", `Destination to deploy the archive (usually "https://oss.sonatype.org")`) - upload = flag.String("upload", "", `Destination to upload the archive (usually "gethstore/builds")`) + local = flag.Bool("local", false, `Flag whether we're only doing a local build (skip Maven artifacts)`) + signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. ANDROID_SIGNING_KEY)`) + signify = flag.String("signify", "", `Environment variable holding the signify signing key (e.g. ANDROID_SIGNIFY_KEY)`) + deploy = flag.String("deploy", "", `Destination to deploy the archive (usually "https://oss.sonatype.org")`) + upload = flag.String("upload", "", `Destination to upload the archive (usually "gethstore/builds")`) ) flag.CommandLine.Parse(cmdline) env := build.Env() + tc := new(build.GoToolchain) // Sanity check that the SDK and NDK are installed and set if os.Getenv("ANDROID_HOME") == "" { log.Fatal("Please ensure ANDROID_HOME points to your Android SDK") } + + // Build gomobile. + install := tc.Install(GOBIN, "golang.org/x/mobile/cmd/gomobile@latest", "golang.org/x/mobile/cmd/gobind@latest") + install.Env = append(install.Env) + build.MustRun(install) + + // Ensure all dependencies are available. This is required to make + // gomobile bind work because it expects go.sum to contain all checksums. + build.MustRun(tc.Go("mod", "download")) + // 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("bind", "-ldflags", "-s -w", "--target", "android", "--javapkg", "org.ethereum", "-v", "github.com/cryptoecc/ETH-ECC/mobile")) + build.MustRun(gomobileTool("bind", "-ldflags", "-s -w", "--target", "android", "--javapkg", "org.ethereum", "-v", "github.com/ethereum/go-ethereum/mobile")) if *local { // If we're building locally, copy bundle to build dir and skip Maven os.Rename("geth.aar", filepath.Join(GOBIN, "geth.aar")) + os.Rename("geth-sources.jar", filepath.Join(GOBIN, "geth-sources.jar")) return } meta := newMavenMetadata(env) @@ -796,7 +1047,7 @@ func doAndroidArchive(cmdline []string) { archive := "geth-" + archiveBasename("android", params.ArchiveVersion(env.Commit)) + ".aar" os.Rename("geth.aar", archive) - if err := archiveUpload(archive, *upload, *signer); err != nil { + if err := archiveUpload(archive, *upload, *signer, *signify); err != nil { log.Fatal(err) } // Sign and upload all the artifacts to Maven Central @@ -827,15 +1078,15 @@ func gomobileTool(subcmd string, args ...string) *exec.Cmd { cmd := exec.Command(filepath.Join(GOBIN, "gomobile"), subcmd) cmd.Args = append(cmd.Args, args...) cmd.Env = []string{ - "GOPATH=" + build.GOPATH(), "PATH=" + GOBIN + string(os.PathListSeparator) + os.Getenv("PATH"), } for _, e := range os.Environ() { - if strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "PATH=") { + if strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "PATH=") || strings.HasPrefix(e, "GOBIN=") { continue } cmd.Env = append(cmd.Env, e) } + cmd.Env = append(cmd.Env, "GOBIN="+GOBIN) return cmd } @@ -889,45 +1140,48 @@ func newMavenMetadata(env build.Environment) mavenMetadata { func doXCodeFramework(cmdline []string) { var ( - local = flag.Bool("local", false, `Flag whether we're only doing a local build (skip Maven artifacts)`) - signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. IOS_SIGNING_KEY)`) - deploy = flag.String("deploy", "", `Destination to deploy the archive (usually "trunk")`) - upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) + local = flag.Bool("local", false, `Flag whether we're only doing a local build (skip Maven artifacts)`) + signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. IOS_SIGNING_KEY)`) + signify = flag.String("signify", "", `Environment variable holding the signify signing key (e.g. IOS_SIGNIFY_KEY)`) + deploy = flag.String("deploy", "", `Destination to deploy the archive (usually "trunk")`) + upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) ) flag.CommandLine.Parse(cmdline) env := build.Env() + tc := new(build.GoToolchain) + + // Build gomobile. + build.MustRun(tc.Install(GOBIN, "golang.org/x/mobile/cmd/gomobile", "golang.org/x/mobile/cmd/gobind")) // 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", "-v", "github.com/cryptoecc/ETH-ECC/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 - bind.Dir, _ = filepath.Abs(GOBIN) + bind.Dir = GOBIN build.MustRun(bind) return } + + // Create the archive. + maybeSkipArchive(env) archive := "geth-" + archiveBasename("ios", params.ArchiveVersion(env.Commit)) - if err := os.Mkdir(archive, os.ModePerm); err != nil { + if err := os.MkdirAll(archive, 0755); err != nil { log.Fatal(err) } bind.Dir, _ = filepath.Abs(archive) build.MustRun(bind) build.MustRunCommand("tar", "-zcvf", archive+".tar.gz", archive) - // Skip CocoaPods deploy and Azure upload for PR builds - maybeSkipArchive(env) - // Sign and upload the framework to Azure - if err := archiveUpload(archive+".tar.gz", *upload, *signer); err != nil { + if err := archiveUpload(archive+".tar.gz", *upload, *signer, *signify); err != nil { log.Fatal(err) } // Prepare and upload a PodSpec to CocoaPods if *deploy != "" { meta := newPodMetadata(env, archive) build.Render("build/pod.podspec", "Geth.podspec", 0755, meta) - build.MustRunCommand("pod", *deploy, "push", "Geth.podspec", "--allow-warnings", "--verbose") + build.MustRunCommand("pod", *deploy, "push", "Geth.podspec", "--allow-warnings") } } @@ -976,58 +1230,6 @@ func newPodMetadata(env build.Environment, archive string) podMetadata { } } -// Cross compilation - -func doXgo(cmdline []string) { - var ( - alltools = flag.Bool("alltools", false, `Flag whether we're building all known tools, or only on in particular`) - ) - flag.CommandLine.Parse(cmdline) - env := build.Env() - - // Make sure xgo is available for cross compilation - gogetxgo := goTool("get", "github.com/karalabe/xgo") - build.MustRun(gogetxgo) - - // If all tools building is requested, build everything the builder wants - args := append(buildFlags(env), flag.Args()...) - - if *alltools { - args = append(args, []string{"--dest", GOBIN}...) - 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))) - xgo := xgoTool(args) - build.MustRun(xgo) - args = args[:len(args)-1] - } - } - return - } - // Otherwise xxecute the explicit cross compilation - path := args[len(args)-1] - args = append(args[:len(args)-1], []string{"--dest", GOBIN, path}...) - - xgo := xgoTool(args) - build.MustRun(xgo) -} - -func xgoTool(args []string) *exec.Cmd { - cmd := exec.Command(filepath.Join(GOBIN, "xgo"), args...) - cmd.Env = []string{ - "GOPATH=" + build.GOPATH(), - "GOBIN=" + GOBIN, - } - for _, e := range os.Environ() { - if strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "GOBIN=") { - continue - } - cmd.Env = append(cmd.Env, e) - } - return cmd -} - // Binary distribution cleanups func doPurge(cmdline []string) { @@ -1051,27 +1253,30 @@ func doPurge(cmdline []string) { if err != nil { log.Fatal(err) } + fmt.Printf("Found %d blobs\n", len(blobs)) + // Iterate over the blobs, collect and sort all unstable builds for i := 0; i < len(blobs); i++ { - if !strings.Contains(blobs[i].Name, "unstable") { + if !strings.Contains(*blobs[i].Name, "unstable") { blobs = append(blobs[:i], blobs[i+1:]...) i-- } } for i := 0; i < len(blobs); i++ { for j := i + 1; j < len(blobs); j++ { - if blobs[i].Properties.LastModified.After(blobs[j].Properties.LastModified) { + if blobs[i].Properties.LastModified.After(*blobs[j].Properties.LastModified) { blobs[i], blobs[j] = blobs[j], blobs[i] } } } // Filter out all archives more recent that the given threshold for i, blob := range blobs { - if time.Since(blob.Properties.LastModified) < time.Duration(*limit)*24*time.Hour { + if time.Since(*blob.Properties.LastModified) < time.Duration(*limit)*24*time.Hour { blobs = blobs[:i] break } } + fmt.Printf("Deleting %d blobs\n", len(blobs)) // Delete all marked as such and return if err := build.AzureBlobstoreDelete(auth, blobs); err != nil { log.Fatal(err) diff --git a/build/clean_go_build_cache.sh b/build/clean_go_build_cache.sh deleted file mode 100755 index 1666381d..00000000 --- a/build/clean_go_build_cache.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -# Cleaning the Go cache only makes sense if we actually have Go installed... or -# if Go is actually callable. This does not hold true during deb packaging, so -# we need an explicit check to avoid build failures. -if ! command -v go > /dev/null; then - exit -fi - -version_gt() { - test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" -} - -golang_version=$(go version |cut -d' ' -f3 |sed 's/go//') - -# Clean go build cache when go version is greater than or equal to 1.10 -if !(version_gt 1.10 $golang_version); then - go clean -cache -fi diff --git a/build/deb/ethereum/completions/bash/geth b/build/deb/ethereum/completions/bash/geth new file mode 100644 index 00000000..a7895279 --- /dev/null +++ b/build/deb/ethereum/completions/bash/geth @@ -0,0 +1,16 @@ +_geth_bash_autocomplete() { + if [[ "${COMP_WORDS[0]}" != "source" ]]; then + local cur opts base + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + if [[ "$cur" == "-"* ]]; then + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion ) + else + opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) + fi + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi +} + +complete -o bashdefault -o default -o nospace -F _geth_bash_autocomplete geth diff --git a/build/deb/ethereum/completions/zsh/_geth b/build/deb/ethereum/completions/zsh/_geth new file mode 100644 index 00000000..119794c5 --- /dev/null +++ b/build/deb/ethereum/completions/zsh/_geth @@ -0,0 +1,18 @@ +_geth_zsh_autocomplete() { + local -a opts + local cur + cur=${words[-1]} + if [[ "$cur" == "-"* ]]; then + opts=("${(@f)$(${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}") + else + opts=("${(@f)$(${words[@]:0:#words[@]-1} --generate-bash-completion)}") + fi + + if [[ "${opts[1]}" != "" ]]; then + _describe 'values' opts + else + _files + fi +} + +compdef _geth_zsh_autocomplete geth diff --git a/build/deb/ethereum/deb.control b/build/deb/ethereum/deb.control index 5b3ff935..3b759f2d 100644 --- a/build/deb/ethereum/deb.control +++ b/build/deb/ethereum/deb.control @@ -2,10 +2,10 @@ Source: {{.Name}} Section: science Priority: extra Maintainer: {{.Author}} -Build-Depends: debhelper (>= 8.0.0), golang-1.11 +Build-Depends: debhelper (>= 8.0.0), {{.GoBootPackage}} Standards-Version: 3.9.5 Homepage: https://ethereum.org -Vcs-Git: git://github.com/ethereum/go-ethereum.git +Vcs-Git: https://github.com/ethereum/go-ethereum.git Vcs-Browser: https://github.com/ethereum/go-ethereum Package: {{.Name}} diff --git a/build/deb/ethereum/deb.install b/build/deb/ethereum/deb.install index e7666ce5..5a624594 100644 --- a/build/deb/ethereum/deb.install +++ b/build/deb/ethereum/deb.install @@ -1 +1,5 @@ build/bin/{{.BinaryName}} usr/bin +{{- if eq .BinaryName "geth" }} +build/deb/ethereum/completions/bash/geth etc/bash_completion.d +build/deb/ethereum/completions/zsh/_geth usr/share/zsh/vendor-completions +{{end -}} diff --git a/build/deb/ethereum/deb.rules b/build/deb/ethereum/deb.rules index 5280e0e5..0677ef91 100644 --- a/build/deb/ethereum/deb.rules +++ b/build/deb/ethereum/deb.rules @@ -4,11 +4,27 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 -# Launchpad rejects Go's access to $HOME/.cache, use custom folder +# Launchpad rejects Go's access to $HOME, use custom folders export GOCACHE=/tmp/go-build +export GOPATH=/tmp/gopath +export GOROOT_BOOTSTRAP={{.GoBootPath}} + +override_dh_auto_clean: + # Don't try to be smart Launchpad, we know our build rules better than you override_dh_auto_build: - 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}} + # We can't download a fresh Go within Launchpad, so we're shipping and building + # one on the fly. However, we can't build it inside the go-ethereum folder as + # bootstrapping clashes with go modules, so build in a sibling folder. + (mv .go ../ && cd ../.go/src && ./make.bash) + + # We can't download external go modules within Launchpad, so we're shipping the + # entire dependency source cache with go-ethereum. + mkdir -p $(GOPATH)/pkg + mv .mod $(GOPATH)/pkg/mod + + # A fresh Go was built, all dependency downloads faked, hope build works now + ../.go/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/env.sh b/build/env.sh deleted file mode 100755 index c19604e4..00000000 --- a/build/env.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -set -e - -if [ ! -f "build/env.sh" ]; then - echo "$0 must be run from the root of the repository." - exit 2 -fi - -# Create fake Go workspace if it doesn't exist yet. -workspace="$PWD/build/_workspace" -root="$PWD" -ethdir="$workspace/src/github.com/cryptoecc" -if [ ! -L "$ethdir/ETH-ECC" ]; then - mkdir -p "$ethdir" - cd "$ethdir" - ln -s ../../../../../. ETH-ECC - cd "$root" -fi - -# Set up the environment to use the workspace. -GOPATH="$workspace" -export GOPATH - -# Run the command inside the workspace. -cd "$ethdir/ETH-ECC" -PWD="$ethdir/ETH-ECC" - -# Launch the arguments with the configured environment. -exec "$@" diff --git a/build/goimports.sh b/build/goimports.sh old mode 100755 new mode 100644 diff --git a/build/nsis.envvarupdate.nsh b/build/nsis.envvarupdate.nsh index 9c3ecbe3..95c2f1f6 100644 --- a/build/nsis.envvarupdate.nsh +++ b/build/nsis.envvarupdate.nsh @@ -43,7 +43,7 @@ !ifndef Un${StrFuncName}_INCLUDED ${Un${StrFuncName}} !endif - !define un.${StrFuncName} "${Un${StrFuncName}}" + !define un.${StrFuncName} '${Un${StrFuncName}}' !macroend !insertmacro _IncludeStrFunction StrTok diff --git a/build/nsis.install.nsh b/build/nsis.install.nsh index 57ef5a37..9b73148a 100644 --- a/build/nsis.install.nsh +++ b/build/nsis.install.nsh @@ -19,9 +19,9 @@ Section "Geth" GETH_IDX # Create start menu launcher createDirectory "$SMPROGRAMS\${APPNAME}" - createShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\geth.exe" "--fast" "--cache=512" - createShortCut "$SMPROGRAMS\${APPNAME}\Attach.lnk" "$INSTDIR\geth.exe" "attach" "" "" - createShortCut "$SMPROGRAMS\${APPNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "" "" + createShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\geth.exe" + createShortCut "$SMPROGRAMS\${APPNAME}\Attach.lnk" "$INSTDIR\geth.exe" "attach" + createShortCut "$SMPROGRAMS\${APPNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" # Firewall - remove rules (if exists) SimpleFC::AdvRemoveRule "Geth incoming peers (TCP:30303)" diff --git a/p2p/discv5/metrics.go b/build/tools/tools.go similarity index 68% rename from p2p/discv5/metrics.go rename to build/tools/tools.go index 9748ecf9..fd2681a2 100644 --- a/p2p/discv5/metrics.go +++ b/build/tools/tools.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,11 +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 discv5 +//go:build tools +// +build tools -import "github.com/cryptoecc/ETH-ECC/metrics" +package tools -var ( - ingressTrafficMeter = metrics.NewRegisteredMeter("discv5/InboundTraffic", nil) - egressTrafficMeter = metrics.NewRegisteredMeter("discv5/OutboundTraffic", nil) +import ( + // Tool imports for go:generate. + _ "github.com/fjl/gencodec" + _ "github.com/golang/protobuf/protoc-gen-go" + _ "golang.org/x/tools/cmd/stringer" + + // Tool imports for mobile build. + _ "golang.org/x/mobile/cmd/gobind" + _ "golang.org/x/mobile/cmd/gomobile" ) diff --git a/build/travis_keepalive.sh b/build/travis_keepalive.sh old mode 100755 new mode 100644 diff --git a/build/update-license.go b/build/update-license.go index 80a0eca9..f6153647 100644 --- a/build/update-license.go +++ b/build/update-license.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build none // +build none /* @@ -39,7 +40,6 @@ import ( "bufio" "bytes" "fmt" - "io/ioutil" "log" "os" "os/exec" @@ -68,7 +68,9 @@ var ( "common/bitutil/bitutil", "common/prque/", "consensus/ethash/xor.go", + "crypto/blake2b/", "crypto/bn256/", + "crypto/bls12381/", "crypto/ecies/", "graphql/graphiql.go", "internal/jsre/deps", @@ -77,7 +79,7 @@ var ( "signer/rules/deps", // skip special licenses - "crypto/secp256k1", // Relicensed to BSD-3 via https://github.com/cryptoecc/ETH-ECC/pull/17225 + "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. @@ -241,7 +243,7 @@ func gitAuthors(files []string) []string { } func readAuthors() []string { - content, err := ioutil.ReadFile("AUTHORS") + content, err := os.ReadFile("AUTHORS") if err != nil && !os.IsNotExist(err) { log.Fatalln("error reading AUTHORS:", err) } @@ -305,7 +307,7 @@ func writeAuthors(files []string) { content.WriteString("\n") } fmt.Println("writing AUTHORS") - if err := ioutil.WriteFile("AUTHORS", content.Bytes(), 0644); err != nil { + if err := os.WriteFile("AUTHORS", content.Bytes(), 0644); err != nil { log.Fatalln(err) } } @@ -340,7 +342,10 @@ func isGenerated(file string) bool { } defer fd.Close() buf := make([]byte, 2048) - n, _ := fd.Read(buf) + n, err := fd.Read(buf) + if err != nil { + return false + } buf = buf[:n] for _, l := range bytes.Split(buf, []byte("\n")) { if bytes.HasPrefix(l, []byte("// Code generated")) { @@ -381,7 +386,7 @@ func writeLicense(info *info) { if err != nil { log.Fatalf("error stat'ing %s: %v\n", info.file, err) } - content, err := ioutil.ReadFile(info.file) + content, err := os.ReadFile(info.file) if err != nil { log.Fatalf("error reading %s: %v\n", info.file, err) } @@ -400,7 +405,7 @@ func writeLicense(info *info) { return } fmt.Println("writing", info.ShortLicense(), info.file) - if err := ioutil.WriteFile(info.file, buf.Bytes(), fi.Mode()); err != nil { + if err := os.WriteFile(info.file, buf.Bytes(), fi.Mode()); err != nil { log.Fatalf("error writing %s: %v", info.file, err) } } diff --git a/cmd/abidump/main.go b/cmd/abidump/main.go new file mode 100644 index 00000000..ae1ac641 --- /dev/null +++ b/cmd/abidump/main.go @@ -0,0 +1,74 @@ +// Copyright 2020 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 ( + "encoding/hex" + "flag" + "fmt" + "os" + "strings" + + "github.com/ethereum/go-ethereum/signer/core/apitypes" + "github.com/ethereum/go-ethereum/signer/fourbyte" +) + +func init() { + flag.Usage = func() { + fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "") + flag.PrintDefaults() + fmt.Fprintln(os.Stderr, ` +Parses the given ABI data and tries to interpret it from the fourbyte database.`) + } +} + +func parse(data []byte) { + db, err := fourbyte.New() + if err != nil { + die(err) + } + messages := apitypes.ValidationMessages{} + db.ValidateCallData(nil, data, &messages) + for _, m := range messages.Messages { + fmt.Printf("%v: %v\n", m.Typ, m.Message) + } +} + +// Example +// ./abidump a9059cbb000000000000000000000000ea0e2dc7d65a50e77fc7e84bff3fd2a9e781ff5c0000000000000000000000000000000000000000000000015af1d78b58c40000 +func main() { + flag.Parse() + + switch { + case flag.NArg() == 1: + hexdata := flag.Arg(0) + data, err := hex.DecodeString(strings.TrimPrefix(hexdata, "0x")) + if err != nil { + die(err) + } + parse(data) + default: + fmt.Fprintln(os.Stderr, "Error: one argument needed") + flag.Usage() + os.Exit(2) + } +} + +func die(args ...interface{}) { + fmt.Fprintln(os.Stderr, args...) + os.Exit(1) +} diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go index 48da90f9..56ebfa9e 100644 --- a/cmd/abigen/main.go +++ b/cmd/abigen/main.go @@ -19,29 +19,18 @@ package main import ( "encoding/json" "fmt" - "io/ioutil" + "io" "os" + "regexp" "strings" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common/compiler" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/urfave/cli" -) - -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}}` + "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/internal/flags" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" ) var ( @@ -50,88 +39,74 @@ var ( gitDate = "" app *cli.App +) +var ( // Flags needed by abigen - abiFlag = cli.StringFlag{ + abiFlag = &cli.StringFlag{ Name: "abi", Usage: "Path to the Ethereum contract ABI json to bind, - for STDIN", } - binFlag = cli.StringFlag{ + binFlag = &cli.StringFlag{ Name: "bin", Usage: "Path to the Ethereum contract bytecode (generate deploy method)", } - typeFlag = cli.StringFlag{ + typeFlag = &cli.StringFlag{ Name: "type", Usage: "Struct name for the binding (default = package name)", } - jsonFlag = cli.StringFlag{ + 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", + Usage: "Path to the combined-json file generated by compiler, - for STDIN", } - excFlag = cli.StringFlag{ + excFlag = &cli.StringFlag{ Name: "exc", Usage: "Comma separated types to exclude from binding", } - pkgFlag = cli.StringFlag{ + pkgFlag = &cli.StringFlag{ Name: "pkg", Usage: "Package name to generate the binding into", } - outFlag = cli.StringFlag{ + outFlag = &cli.StringFlag{ Name: "out", Usage: "Output file for the generated binding (default = stdout)", } - langFlag = cli.StringFlag{ + langFlag = &cli.StringFlag{ Name: "lang", Usage: "Destination language for the bindings (go, java, objc)", Value: "go", } + aliasFlag = &cli.StringFlag{ + Name: "alias", + Usage: "Comma separated aliases for function and event renaming, e.g. original1=alias1, original2=alias2", + } ) func init() { - app = utils.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") + app = flags.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") + app.Name = "abigen" app.Flags = []cli.Flag{ abiFlag, binFlag, typeFlag, jsonFlag, - solFlag, - solcFlag, - vyFlag, - vyperFlag, excFlag, pkgFlag, outFlag, langFlag, + aliasFlag, } - app.Action = utils.MigrateFlags(abigen) - cli.CommandHelpTemplate = commandHelperTemplate + app.Action = abigen } 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.CheckExclusive(c, abiFlag, jsonFlag) // Only one source can be selected. + + if c.String(pkgFlag.Name) == "" { utils.Fatalf("No destination package specified (--pkg)") } var lang bind.Lang - switch c.GlobalString(langFlag.Name) { + switch c.String(langFlag.Name) { case "go": lang = bind.LangGo case "java": @@ -140,27 +115,28 @@ func abigen(c *cli.Context) error { lang = bind.LangObjC utils.Fatalf("Objc binding generation is uncompleted") default: - utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.GlobalString(langFlag.Name)) + utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.String(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) + abis []string + bins []string + types []string + sigs []map[string]string + libs = make(map[string]string) + aliases = make(map[string]string) ) - if c.GlobalString(abiFlag.Name) != "" { + if c.String(abiFlag.Name) != "" { // Load up the ABI, optional bytecode and type name from the parameters var ( abi []byte err error ) - input := c.GlobalString(abiFlag.Name) + input := c.String(abiFlag.Name) if input == "-" { - abi, err = ioutil.ReadAll(os.Stdin) + abi, err = io.ReadAll(os.Stdin) } else { - abi, err = ioutil.ReadFile(input) + abi, err = os.ReadFile(input) } if err != nil { utils.Fatalf("Failed to read input ABI: %v", err) @@ -168,8 +144,8 @@ func abigen(c *cli.Context) error { abis = append(abis, string(abi)) var bin []byte - if binFile := c.GlobalString(binFlag.Name); binFile != "" { - if bin, err = ioutil.ReadFile(binFile); err != nil { + if binFile := c.String(binFlag.Name); binFile != "" { + if bin, err = os.ReadFile(binFile); err != nil { utils.Fatalf("Failed to read input bytecode: %v", err) } if strings.Contains(string(bin), "//") { @@ -178,35 +154,32 @@ func abigen(c *cli.Context) error { } bins = append(bins, string(bin)) - kind := c.GlobalString(typeFlag.Name) + kind := c.String(typeFlag.Name) if kind == "" { - kind = c.GlobalString(pkgFlag.Name) + kind = c.String(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(c.GlobalString(excFlag.Name), ",") { + for _, kind := range strings.Split(c.String(excFlag.Name), ",") { exclude[strings.ToLower(kind)] = true } - var err error 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 { - utils.Fatalf("Failed to build Solidity contract: %v", err) + if c.IsSet(jsonFlag.Name) { + var ( + input = c.String(jsonFlag.Name) + jsonOutput []byte + err error + ) + if input == "-" { + jsonOutput, err = io.ReadAll(os.Stdin) + } else { + jsonOutput, err = os.ReadFile(input) } - 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) + utils.Fatalf("Failed to read combined-json: %v", err) } contracts, err = compiler.ParseCombinedJSON(jsonOutput, "", "", "", "") if err != nil { @@ -228,21 +201,37 @@ func abigen(c *cli.Context) error { nameParts := strings.Split(name, ":") types = append(types, nameParts[len(nameParts)-1]) - libPattern := crypto.Keccak256Hash([]byte(name)).String()[2:36] + // Derive the library placeholder which is a 34 character prefix of the + // hex encoding of the keccak256 hash of the fully qualified library name. + // Note that the fully qualified library name is the path of its source + // file and the library name separated by ":". + libPattern := crypto.Keccak256Hash([]byte(name)).String()[2:36] // the first 2 chars are 0x libs[libPattern] = nameParts[len(nameParts)-1] } } + // Extract all aliases from the flags + if c.IsSet(aliasFlag.Name) { + // We support multi-versions for aliasing + // e.g. + // foo=bar,foo2=bar2 + // foo:bar,foo2:bar2 + re := regexp.MustCompile(`(?:(\w+)[:=](\w+))`) + submatches := re.FindAllStringSubmatch(c.String(aliasFlag.Name), -1) + for _, match := range submatches { + aliases[match[1]] = match[2] + } + } // Generate the contract binding - code, err := bind.Bind(types, abis, bins, sigs, c.GlobalString(pkgFlag.Name), lang, libs) + code, err := bind.Bind(types, abis, bins, sigs, c.String(pkgFlag.Name), lang, libs, aliases) if err != nil { utils.Fatalf("Failed to generate ABI binding: %v", err) } // Either flush it out to a file or display on the standard output - if !c.GlobalIsSet(outFlag.Name) { + if !c.IsSet(outFlag.Name) { fmt.Printf("%s\n", code) return nil } - if err := ioutil.WriteFile(c.GlobalString(outFlag.Name), []byte(code), 0600); err != nil { + if err := os.WriteFile(c.String(outFlag.Name), []byte(code), 0600); err != nil { utils.Fatalf("Failed to write ABI binding: %v", err) } return nil diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go index 809daf13..036b968e 100644 --- a/cmd/bootnode/main.go +++ b/cmd/bootnode/main.go @@ -24,14 +24,13 @@ import ( "net" "os" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/discover" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nat" + "github.com/ethereum/go-ethereum/p2p/netutil" ) func main() { @@ -44,7 +43,7 @@ func main() { natdesc = flag.String("nat", "none", "port mapping mechanism (any|none|upnp|pmp|extip:)") netrestrict = flag.String("netrestrict", "", "restrict network communication to the given IP networks (CIDR masks)") runv5 = flag.Bool("v5", false, "run a v5 topic discovery bootnode") - verbosity = flag.Int("verbosity", int(log.LvlInfo), "log verbosity (0-9)") + verbosity = flag.Int("verbosity", int(log.LvlInfo), "log verbosity (0-5)") vmodule = flag.String("vmodule", "", "log verbosity pattern") nodeKey *ecdsa.PrivateKey @@ -70,7 +69,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 != "": @@ -119,17 +120,17 @@ func main() { printNotice(&nodeKey.PublicKey, *realaddr) + db, _ := enode.OpenDB("") + ln := enode.NewLocalNode(db, nodeKey) + cfg := discover.Config{ + PrivateKey: nodeKey, + NetRestrict: restrictList, + } if *runv5 { - if _, err := discv5.ListenUDP(nodeKey, conn, "", restrictList); err != nil { + if _, err := discover.ListenV5(conn, ln, cfg); err != nil { utils.Fatalf("%v", err) } } else { - db, _ := enode.OpenDB("") - ln := enode.NewLocalNode(db, nodeKey) - cfg := discover.Config{ - PrivateKey: nodeKey, - NetRestrict: restrictList, - } if _, err := discover.ListenUDP(conn, ln, cfg); err != nil { utils.Fatalf("%v", err) } diff --git a/cmd/checkpoint-admin/README.md b/cmd/checkpoint-admin/README.md new file mode 100644 index 00000000..43e3785e --- /dev/null +++ b/cmd/checkpoint-admin/README.md @@ -0,0 +1,103 @@ +## Checkpoint-admin + +Checkpoint-admin is a tool for updating checkpoint oracle status. It provides a series of functions including deploying checkpoint oracle contract, signing for new checkpoints, and updating checkpoints in the checkpoint oracle contract. + +### Checkpoint + +In the LES protocol, there is an important concept called checkpoint. In simple terms, whenever a certain number of blocks are generated on the blockchain, a new checkpoint is generated which contains some important information such as + +* Block hash at checkpoint +* Canonical hash trie root at checkpoint +* Bloom trie root at checkpoint + +*For a more detailed introduction to checkpoint, please see the LES [spec](https://github.com/ethereum/devp2p/blob/master/caps/les.md).* + +Using this information, light clients can skip all historical block headers when synchronizing data and start synchronization from this checkpoint. Therefore, as long as the light client can obtain some latest and correct checkpoints, the amount of data and time for synchronization will be greatly reduced. + +However, from a security perspective, the most critical step in a synchronization algorithm based on checkpoints is to determine whether the checkpoint used by the light client is correct. Otherwise, all blockchain data synchronized based on this checkpoint may be wrong. For this we provide two different ways to ensure the correctness of the checkpoint used by the light client. + +#### Hardcoded checkpoint + +There are several hardcoded checkpoints in the [source code](https://github.com/ethereum/go-ethereum/blob/master/params/config.go#L38) of the go-ethereum project. These checkpoints are updated by go-ethereum developers when new versions of software are released. Because light client users trust Geth developers to some extent, hardcoded checkpoints in the code can also be considered correct. + +#### Checkpoint oracle + +Hardcoded checkpoints can solve the problem of verifying the correctness of checkpoints (although this is a more centralized solution). But the pain point of this solution is that developers can only update checkpoints when a new version of software is released. In addition, light client users usually do not keep the Geth version they use always up to date. So hardcoded checkpoints used by users are generally stale. Therefore, it still needs to download a large amount of blockchain data during synchronization. + +Checkpoint oracle is a more flexible solution. In simple terms, this is a smart contract that is deployed on the blockchain. The smart contract records several designated trusted signers. Whenever enough trusted signers have issued their signatures for the same checkpoint, it can be considered that the checkpoint has been authenticated by the signers. Checkpoints authenticated by trusted signers can be considered correct. + +So this way, even without updating the software version, as long as the trusted signers regularly update the checkpoint in oracle on time, the light client can always use the latest and verified checkpoint for data synchronization. + +### Usage + +Checkpoint-admin is a command line tool designed for checkpoint oracle. Users can easily deploy contracts and update checkpoints through this tool. + +#### Install + +```shell +go get github.com/ethereum/go-ethereum/cmd/checkpoint-admin +``` + +#### Deploy + +Deploy checkpoint oracle contract. `--signers` indicates the specified trusted signer, and `--threshold` indicates the minimum number of signatures required by trusted signers to update a checkpoint. + +```shell +checkpoint-admin deploy --rpc --clef --signer --signers --threshold 1 +``` + +It is worth noting that checkpoint-admin only supports clef as a signer for transactions and plain text(checkpoint). For more clef usage, please see the clef [tutorial](https://geth.ethereum.org/docs/clef/tutorial) . + +#### Sign + +Checkpoint-admin provides two different modes of signing. You can automatically obtain the current stable checkpoint and sign it interactively, and you can also use the information provided by the command line flags to sign checkpoint offline. + +**Interactive mode** + +```shell +checkpoint-admin sign --clef --signer --rpc +``` + +*It is worth noting that the connected Geth node can be a fullnode or a light client. If it is fullnode, you must enable the LES protocol. E.G. add `--light.serv 50` to the startup command line flags*. + +**Offline mode** + +```shell +checkpoint-admin sign --clef --signer --index --hash --oracle +``` + +*CHECKPOINT_HASH is obtained based on this [calculation method](https://github.com/ethereum/go-ethereum/blob/master/params/config.go#L251).* + +#### Publish + +Collect enough signatures from different trusted signers for the same checkpoint and submit them to oracle to update the "authenticated" checkpoint in the contract. + +```shell +checkpoint-admin publish --clef --rpc --signer --index --signatures +``` + +#### Status query + +Check the latest status of checkpoint oracle. + +```shell +checkpoint-admin status --rpc +``` + +### Enable checkpoint oracle in your private network + +Currently, only the Ethereum mainnet and the default supported test networks (ropsten, rinkeby, goerli) activate this feature. If you want to activate this feature in your private network, you can overwrite the relevant checkpoint oracle settings through the configuration file after deploying the oracle contract. + +* Get your node configuration file `geth dumpconfig OTHER_COMMAND_LINE_OPTIONS > config.toml` +* Edit the configuration file and add the following information + +```toml +[Eth.CheckpointOracle] +Address = CHECKPOINT_ORACLE_ADDRESS +Signers = [TRUSTED_SIGNER_1, ..., TRUSTED_SIGNER_N] +Threshold = THRESHOLD +``` + +* Start geth with the modified configuration file + +*In the private network, all fullnodes and light clients need to be started using the same checkpoint oracle settings.* \ No newline at end of file diff --git a/cmd/checkpoint-admin/common.go b/cmd/checkpoint-admin/common.go index bd169665..f86ac24f 100644 --- a/cmd/checkpoint-admin/common.go +++ b/cmd/checkpoint-admin/common.go @@ -19,21 +19,21 @@ package main import ( "strconv" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/external" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle" - "github.com/cryptoecc/ETH-ECC/ethclient" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/urfave/cli" + "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" + "github.com/urfave/cli/v2" ) // newClient creates a client with specified remote URL. func newClient(ctx *cli.Context) *ethclient.Client { - client, err := ethclient.Dial(ctx.GlobalString(nodeURLFlag.Name)) + client, err := ethclient.Dial(ctx.String(nodeURLFlag.Name)) if err != nil { utils.Fatalf("Failed to connect to Ethereum node: %v", err) } @@ -64,9 +64,9 @@ func getContractAddr(client *rpc.Client) common.Address { func getCheckpoint(ctx *cli.Context, client *rpc.Client) *params.TrustedCheckpoint { var checkpoint *params.TrustedCheckpoint - if ctx.GlobalIsSet(indexFlag.Name) { + if ctx.IsSet(indexFlag.Name) { var result [3]string - index := uint64(ctx.GlobalInt64(indexFlag.Name)) + index := uint64(ctx.Int64(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) } diff --git a/cmd/checkpoint-admin/exec.go b/cmd/checkpoint-admin/exec.go index 252a9fe4..cb67d030 100644 --- a/cmd/checkpoint-admin/exec.go +++ b/cmd/checkpoint-admin/exec.go @@ -25,21 +25,21 @@ import ( "strings" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle/contract" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethclient" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/urfave/cli" + "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" + "github.com/urfave/cli/v2" ) -var commandDeploy = cli.Command{ +var commandDeploy = &cli.Command{ Name: "deploy", Usage: "Deploy a new checkpoint oracle contract", Flags: []cli.Flag{ @@ -49,10 +49,10 @@ var commandDeploy = cli.Command{ signersFlag, thresholdFlag, }, - Action: utils.MigrateFlags(deploy), + Action: deploy, } -var commandSign = cli.Command{ +var commandSign = &cli.Command{ Name: "sign", Usage: "Sign the checkpoint with the specified key", Flags: []cli.Flag{ @@ -63,10 +63,10 @@ var commandSign = cli.Command{ hashFlag, oracleFlag, }, - Action: utils.MigrateFlags(sign), + Action: sign, } -var commandPublish = cli.Command{ +var commandPublish = &cli.Command{ Name: "publish", Usage: "Publish a checkpoint into the oracle", Flags: []cli.Flag{ @@ -76,7 +76,7 @@ var commandPublish = cli.Command{ indexFlag, signaturesFlag, }, - Action: utils.MigrateFlags(publish), + Action: publish, } // deploy deploys the checkpoint registrar contract. @@ -132,7 +132,7 @@ func sign(ctx *cli.Context) error { node *rpc.Client oracle *checkpointoracle.CheckpointOracle ) - if !ctx.GlobalIsSet(nodeURLFlag.Name) { + if !ctx.IsSet(nodeURLFlag.Name) { // Offline mode signing offline = true if !ctx.IsSet(hashFlag.Name) { @@ -151,7 +151,7 @@ func sign(ctx *cli.Context) error { address = common.HexToAddress(ctx.String(oracleFlag.Name)) } else { // Interactive mode signing, retrieve the data from the remote node - node = newRPCClient(ctx.GlobalString(nodeURLFlag.Name)) + node = newRPCClient(ctx.String(nodeURLFlag.Name)) checkpoint := getCheckpoint(ctx, node) chash, cindex, address = checkpoint.Hash(), checkpoint.SectionIndex, getContractAddr(node) @@ -265,7 +265,7 @@ func publish(ctx *cli.Context) error { } // Retrieve the checkpoint we want to sign to sort the signatures var ( - client = newRPCClient(ctx.GlobalString(nodeURLFlag.Name)) + client = newRPCClient(ctx.String(nodeURLFlag.Name)) addr, oracle = newContract(client) checkpoint = getCheckpoint(ctx, client) sighash = sighash(checkpoint.SectionIndex, addr, checkpoint.Hash()) diff --git a/cmd/checkpoint-admin/main.go b/cmd/checkpoint-admin/main.go index ebf0943a..0604ccaa 100644 --- a/cmd/checkpoint-admin/main.go +++ b/cmd/checkpoint-admin/main.go @@ -22,36 +22,23 @@ import ( "fmt" "os" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common/fdlimit" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/urfave/cli" -) - -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}}` + "github.com/ethereum/go-ethereum/common/fdlimit" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" ) var ( // Git SHA1 commit hash of the release (set via linker flags) gitCommit = "" gitDate = "" -) -var app *cli.App + app *cli.App +) func init() { - app = utils.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") - app.Commands = []cli.Command{ + app = flags.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") + app.Commands = []*cli.Command{ commandStatus, commandDeploy, commandSign, @@ -61,46 +48,45 @@ func init() { oracleFlag, nodeURLFlag, } - cli.CommandHelpTemplate = commandHelperTemplate } // Commonly used command line flags. var ( - indexFlag = cli.Int64Flag{ + indexFlag = &cli.Int64Flag{ Name: "index", Usage: "Checkpoint index (query latest from remote node if not specified)", } - hashFlag = cli.StringFlag{ + hashFlag = &cli.StringFlag{ Name: "hash", Usage: "Checkpoint hash (query latest from remote node if not specified)", } - oracleFlag = cli.StringFlag{ + oracleFlag = &cli.StringFlag{ Name: "oracle", Usage: "Checkpoint oracle address (query from remote node if not specified)", } - thresholdFlag = cli.Int64Flag{ + thresholdFlag = &cli.Int64Flag{ Name: "threshold", Usage: "Minimal number of signatures required to approve a checkpoint", } - nodeURLFlag = cli.StringFlag{ + nodeURLFlag = &cli.StringFlag{ Name: "rpc", Value: "http://localhost:8545", Usage: "The rpc endpoint of a local or remote geth node", } - clefURLFlag = cli.StringFlag{ + clefURLFlag = &cli.StringFlag{ Name: "clef", Value: "http://localhost:8550", Usage: "The rpc endpoint of clef", } - signerFlag = cli.StringFlag{ + signerFlag = &cli.StringFlag{ Name: "signer", Usage: "Signer address for clef signing", } - signersFlag = cli.StringFlag{ + signersFlag = &cli.StringFlag{ Name: "signers", Usage: "Comma separated accounts of trusted checkpoint signers", } - signaturesFlag = cli.StringFlag{ + signaturesFlag = &cli.StringFlag{ Name: "signatures", Usage: "Comma separated checkpoint signatures to submit", } diff --git a/cmd/checkpoint-admin/status.go b/cmd/checkpoint-admin/status.go index a42e83ed..bec97aed 100644 --- a/cmd/checkpoint-admin/status.go +++ b/cmd/checkpoint-admin/status.go @@ -19,24 +19,23 @@ package main import ( "fmt" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/common" + "github.com/urfave/cli/v2" ) -var commandStatus = cli.Command{ +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), + Action: 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))) + addr, oracle := newContract(newRPCClient(ctx.String(nodeURLFlag.Name))) fmt.Printf("Oracle => %s\n", addr.Hex()) fmt.Println() diff --git a/cmd/clef/README.md b/cmd/clef/README.md index e2ef610e..27c62817 100644 --- a/cmd/clef/README.md +++ b/cmd/clef/README.md @@ -9,7 +9,7 @@ Clef can run as a daemon on the same machine, off a usb-stick like [USB armory]( 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. +* [Setup docs](docs/setup.md) for information 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 @@ -29,16 +29,16 @@ 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") - --chainid value Chain id to use for signing (1=mainnet, 3=Ropsten, 4=Rinkeby, 5=Goerli, 12345=Lve, 12346=Lvetest)") (default: 1) + --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") + --http.addr value HTTP-RPC server listening interface (default: "localhost") + --http.vhosts 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) + --http Enable the HTTP-RPC server + --http.port value HTTP-RPC server listening port (default: 8550) --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") @@ -46,6 +46,7 @@ GLOBAL OPTIONS: --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 + --suppress-bootwarn If set, does not show the warning during boot --help, -h show help --version, -v print the version ``` @@ -112,11 +113,11 @@ Some snags and todos ### External API -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). +Clef listens to HTTP requests on `http.addr`:`http.port` (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 calls can require user interaction. Clients must be aware that responses may be delayed significantly or may never be received if a user 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, nor does it expect that requests have any authority. ### Internal UI API @@ -145,13 +146,11 @@ See the [external API changelog](extapi_changelog.md) for information about chan All hex encoded values must be prefixed with `0x`. -## Methods - ### account_new #### Create new password protected account -The signer will generate a new private key, encrypts it according to [web3 keystore spec](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) and stores it in the keystore directory. +The signer will generate a new private key, encrypt it according to [web3 keystore spec](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) and store it in the keystore directory. The client is responsible for creating a backup of the keystore. If the keystore is lost there is no method of retrieving lost accounts. #### Arguments @@ -160,7 +159,6 @@ None #### Result - address [string]: account address that is derived from the generated key - - url [string]: location of the keyfile #### Sample call ```json @@ -172,14 +170,11 @@ None } ``` Response -``` +```json { "id": 0, "jsonrpc": "2.0", - "result": { - "address": "0xbea9183f8f4f03d427f6bcea17388bdff1cab133", - "url": "keystore:///my/keystore/UTC--2017-08-24T08-40-15.419655028Z--bea9183f8f4f03d427f6bcea17388bdff1cab133" - } + "result": "0xbea9183f8f4f03d427f6bcea17388bdff1cab133" } ``` @@ -195,8 +190,6 @@ 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.url [string]: location of the account #### Sample call ```json @@ -207,21 +200,13 @@ None } ``` Response -``` +```json { "id": 1, "jsonrpc": "2.0", "result": [ - { - "address": "0xafb2f771f58513609765698f65d3f2f0224a956f", - "type": "account", - "url": "keystore:///tmp/keystore/UTC--2017-08-24T07-26-47.162109726Z--afb2f771f58513609765698f65d3f2f0224a956f" - }, - { - "address": "0xbea9183f8f4f03d427f6bcea17388bdff1cab133", - "type": "account", - "url": "keystore:///tmp/keystore/UTC--2017-08-24T08-40-15.419655028Z--bea9183f8f4f03d427f6bcea17388bdff1cab133" - } + "0xafb2f771f58513609765698f65d3f2f0224a956f", + "0xbea9183f8f4f03d427f6bcea17388bdff1cab133" ] } ``` @@ -229,10 +214,10 @@ Response ### account_signTransaction #### Sign transactions - Signs a transactions and responds with the signed transaction in RLP encoded form. + Signs a transaction and responds with the signed transaction in RLP-encoded and JSON forms. #### Arguments - 2. transaction object: + 1. transaction object: - `from` [address]: account to send the transaction from - `to` [address]: receiver account. If omitted or `0x`, will cause contract creation. - `gas` [number]: maximum amount of gas to burn @@ -240,12 +225,13 @@ Response - `value` [number:optional]: amount of Wei to send with the transaction - `data` [data:optional]: input data - `nonce` [number]: account nonce - 3. method signature [string:optional] + 1. method signature [string:optional] - The method signature, if present, is to aid decoding the calldata. Should consist of `methodname(paramtype,...)`, e.g. `transfer(uint256,address)`. The signer may use this data to parse the supplied calldata, and show the user. The data, however, is considered totally untrusted, and reliability is not expected. #### Result - - signed transaction in RLP encoded form [data] + - raw [data]: signed transaction in RLP encoded form + - tx [json]: signed transaction in JSON form #### Sample call ```json @@ -270,11 +256,22 @@ Response ```json { - "id": 2, "jsonrpc": "2.0", - "error": { - "code": -32000, - "message": "Request denied" + "id": 2, + "result": { + "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "tx": { + "nonce": "0x0", + "gasPrice": "0x1234", + "gas": "0x55555", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234", + "input": "0xabcd", + "v": "0x26", + "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", + "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" + } } } ``` @@ -326,7 +323,7 @@ Response Bash example: ```bash -#curl -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/ +> curl -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/ {"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"}}} ``` @@ -373,7 +370,7 @@ 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. + Signs a chunk of structured data conformant to [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 @@ -469,7 +466,7 @@ Response ### account_ecRecover -#### Sign data +#### Recover the signing address Derive the address from the account that was used to sign data with content type `text/plain` and the signature. @@ -487,7 +484,6 @@ Derive the address from the account that was used to sign data with content type "jsonrpc": "2.0", "method": "account_ecRecover", "params": [ - "data/plain", "0xaabbccdd", "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c" ] @@ -503,117 +499,36 @@ Response } ``` -### account_import +### account_version -#### 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) +#### Get external API version -#### 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 -{ - "id": 6, - "jsonrpc": "2.0", - "method": "account_import", - "params": [ - { - "address": "c7412fc59930fd90099c917a50e5f11d0934b2f5", - "crypto": { - "cipher": "aes-128-ctr", - "cipherparams": { - "iv": "401c39a7c7af0388491c3d3ecb39f532" - }, - "ciphertext": "eb045260b18dd35cd0e6d99ead52f8fa1e63a6b0af2d52a8de198e59ad783204", - "kdf": "scrypt", - "kdfparams": { - "dklen": 32, - "n": 262144, - "p": 1, - "r": 8, - "salt": "9a657e3618527c9b5580ded60c12092e5038922667b7b76b906496f021bb841a" - }, - "mac": "880dc10bc06e9cec78eb9830aeb1e7a4a26b4c2c19615c94acb632992b952806" - }, - "id": "09bccb61-b8d3-4e93-bf4f-205a8194f0b9", - "version": 3 - } - ] -} -``` -Response - -```json -{ - "id": 6, - "jsonrpc": "2.0", - "result": { - "address": "0xc7412fc59930fd90099c917a50e5f11d0934b2f5", - "type": "account", - "url": "keystore:///tmp/keystore/UTC--2017-08-24T11-00-42.032024108Z--c7412fc59930fd90099c917a50e5f11d0934b2f5" - } -} -``` - -### account_export - -#### Export account from keystore - 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. +Get the version of the external API used by Clef. #### Arguments - - account [address]: export private key that is associated with this account + +None #### Result - - exported key, see [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) for - more information + +* external API version [string] #### Sample call ```json { - "id": 5, + "id": 0, "jsonrpc": "2.0", - "method": "account_export", - "params": [ - "0xc7412fc59930fd90099c917a50e5f11d0934b2f5" - ] + "method": "account_version", + "params": [] } ``` -Response +Response ```json { - "id": 5, - "jsonrpc": "2.0", - "result": { - "address": "c7412fc59930fd90099c917a50e5f11d0934b2f5", - "crypto": { - "cipher": "aes-128-ctr", - "cipherparams": { - "iv": "401c39a7c7af0388491c3d3ecb39f532" - }, - "ciphertext": "eb045260b18dd35cd0e6d99ead52f8fa1e63a6b0af2d52a8de198e59ad783204", - "kdf": "scrypt", - "kdfparams": { - "dklen": 32, - "n": 262144, - "p": 1, - "r": 8, - "salt": "9a657e3618527c9b5580ded60c12092e5038922667b7b76b906496f021bb841a" - }, - "mac": "880dc10bc06e9cec78eb9830aeb1e7a4a26b4c2c19615c94acb632992b952806" - }, - "id": "09bccb61-b8d3-4e93-bf4f-205a8194f0b9", - "version": 3 - } + "id": 0, + "jsonrpc": "2.0", + "result": "6.0.0" } ``` @@ -625,7 +540,7 @@ By starting the signer with the switch `--stdio-ui-test`, the signer will invoke denials. This can be used during development to ensure that the API is (at least somewhat) correctly implemented. See `pythonsigner`, which can be invoked via `python3 pythonsigner.py test` to perform the 'denial-handshake-test'. -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. +All methods in this API use object-based parameters, so that there can be no mixup 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. @@ -784,12 +699,10 @@ Invoked when a request for account listing has been made. { "accounts": [ { - "type": "Account", "url": "keystore:///home/bazonk/.ethereum/keystore/UTC--2017-11-20T14-44-54.089682944Z--123409812340981234098123409812deadbeef42", "address": "0x123409812340981234098123409812deadbeef42" }, { - "type": "Account", "url": "keystore:///home/bazonk/.ethereum/keystore/UTC--2017-11-23T21-59-03.199240693Z--cafebabedeadbeef34098123409812deadbeef42", "address": "0xcafebabedeadbeef34098123409812deadbeef42" } @@ -819,7 +732,13 @@ Invoked when a request for account listing has been made. { "address": "0x123409812340981234098123409812deadbeef42", "raw_data": "0x01020304", - "message": "\u0019Ethereum Signed Message:\n4\u0001\u0002\u0003\u0004", + "messages": [ + { + "name": "message", + "value": "\u0019Ethereum Signed Message:\n4\u0001\u0002\u0003\u0004", + "type": "text/plain" + } + ], "hash": "0x7e3a4e7a9d1744bc5c675c25e1234ca8ed9162bd17f78b9085e48047c15ac310", "meta": { "remote": "signer binary", @@ -829,12 +748,34 @@ Invoked when a request for account listing has been made. } ] } +``` + +### ApproveNewAccount / `ui_approveNewAccount` + +Invoked when a request for creating a new account has been made. +#### Sample call + +```json +{ + "jsonrpc": "2.0", + "id": 4, + "method": "ui_approveNewAccount", + "params": [ + { + "meta": { + "remote": "signer binary", + "local": "main", + "scheme": "in-proc" + } + } + ] +} ``` ### ShowInfo / `ui_showInfo` -The UI should show the info to the user. Does not expect response. +The UI should show the info (a single message) to the user. Does not expect response. #### Sample call @@ -844,9 +785,7 @@ The UI should show the info to the user. Does not expect response. "id": 9, "method": "ui_showInfo", "params": [ - { - "text": "Tests completed" - } + "Tests completed" ] } @@ -854,18 +793,16 @@ The UI should show the info to the user. Does not expect response. ### ShowError / `ui_showError` -The UI should show the info to the user. Does not expect response. +The UI should show the error (a single message) to the user. Does not expect response. ```json { "jsonrpc": "2.0", "id": 2, - "method": "ShowError", + "method": "ui_showError", "params": [ - { - "text": "Testing 'ShowError'" - } + "Something bad happened!" ] } @@ -879,9 +816,36 @@ 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`. +Example call: +```json + +{ + "jsonrpc": "2.0", + "id": 1, + "method": "ui_onApprovedTx", + "params": [ + { + "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "tx": { + "nonce": "0x0", + "gasPrice": "0x1", + "gas": "0x333", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x0", + "input": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012", + "v": "0x26", + "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", + "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" + } + } + ] +} +``` + ### 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 provides the UI with information about what API version the signer uses (both internal and external) as well as build-info and external API, in k/v-form. Example call: @@ -905,6 +869,27 @@ Example call: ``` +### OnInputRequired / `ui_onInputRequired` + +Invoked when Clef requires user input (e.g. a password). + +Example call: +```json + +{ + "jsonrpc": "2.0", + "id": 1, + "method": "ui_onInputRequired", + "params": [ + { + "title": "Account password", + "prompt": "Please enter the password for account 0x694267f14675d7e1b9494fd8d72fefe1755710fa", + "isPassword": true + } + ] +} +``` + ### Rules for UI apis @@ -934,4 +919,4 @@ There are a couple of implementation for a UI. We'll try to keep this list up to | QtSigner| https://github.com/holiman/qtsigner/| Python3/QT-based| :+1:| :+1:| :+1:| :+1:| :+1:| :x: | :+1: (partially)| | GtkSigner| https://github.com/holiman/gtksigner| Python3/GTK-based| :+1:| :x:| :x:| :+1:| :+1:| :x: | :x: | | Frame | https://github.com/floating/frame/commits/go-signer| Electron-based| :x:| :x:| :x:| :x:| ?| :x: | :x: | -| Clef UI| https://github.com/kyokan/clef-ui| Golang/QT-based| :+1:| :+1:| :x:| :+1:| :+1:| :x: | :+1: (approve tx only)| +| Clef UI| https://github.com/ethereum/clef-ui| Golang/QT-based| :+1:| :+1:| :x:| :+1:| :+1:| :x: | :+1: (approve tx only)| diff --git a/cmd/clef/datatypes.md b/cmd/clef/datatypes.md index 5ebf9adc..dd8cda58 100644 --- a/cmd/clef/datatypes.md +++ b/cmd/clef/datatypes.md @@ -3,7 +3,7 @@ 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` +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` Example: ```json diff --git a/cmd/clef/docs/setup.md b/cmd/clef/docs/setup.md index 33d2b038..6cc7a412 100644 --- a/cmd/clef/docs/setup.md +++ b/cmd/clef/docs/setup.md @@ -34,7 +34,7 @@ There are two ways that this can be achieved: integrated via Qubes or integrated #### 1. Qubes Integrated -Qubes provdes a facility for inter-qubes communication via `qrexec`. A qube can request to make a cross-qube RPC request +Qubes provides a facility for inter-qubes communication via `qrexec`. A qube can request to make a cross-qube RPC request to another qube. The OS then asks the user if the call is permitted. ![Example](qubes/qrexec-example.png) @@ -48,7 +48,7 @@ This is how [Split GPG](https://www.qubes-os.org/doc/split-gpg/) is implemented. ![Clef via qrexec](qubes/clef_qubes_qrexec.png) -On the `target` qubes, we need to define the rpc service. +On the `target` qubes, we need to define the RPC service. [qubes.Clefsign](qubes/qubes.Clefsign): @@ -94,7 +94,7 @@ with minimal requirements. On the `client` qube, we need to create a listener which will receive the request from the Dapp, and proxy it. -[qubes-client.py](qubes/client/qubes-client.py): +[qubes-client.py](qubes/qubes-client.py): ```python @@ -135,11 +135,11 @@ $ cat newaccnt.json $ cat newaccnt.json| qrexec-client-vm debian-work qubes.Clefsign ``` -This should pop up first a dialog to allow the IPC call: +A dialog should pop up first to allow the IPC call: ![one](qubes/qubes_newaccount-1.png) -Followed by a GTK-dialog to approve the operation +Followed by a GTK-dialog to approve the operation: ![two](qubes/qubes_newaccount-2.png) @@ -169,7 +169,7 @@ However, it comes with a couple of drawbacks: - The `Origin` header must be forwarded - Information about the remote ip must be added as a `X-Forwarded-For`. However, Clef cannot always trust an `XFF` header, since malicious clients may lie about `XFF` in order to fool the http server into believing it comes from another address. -- Even with a policy in place to allow rpc-calls between `caller` and `target`, there will be several popups: +- Even with a policy in place to allow RPC calls between `caller` and `target`, there will be several popups: - One qubes-specific where the user specifies the `target` vm - One clef-specific to approve the transaction @@ -177,7 +177,7 @@ However, it comes with a couple of drawbacks: #### 2. Network integrated The second way to set up Clef on a qubes system is to allow networking, and have Clef listen to a port which is accessible -form other qubes. +from other qubes. ![Clef via http](qubes/clef_qubes_http.png) @@ -186,13 +186,13 @@ form other qubes. ## USBArmory -The [USB armory](https://inversepath.com/usbarmory) is an open source hardware design with an 800 Mhz ARM processor. It is a pocket-size +The [USB armory](https://inversepath.com/usbarmory) is an open source hardware design with an 800 MHz ARM processor. It is a pocket-size computer. When inserted into a laptop, it identifies itself as a USB network interface, basically adding another network to your computer. Over this new network interface, you can SSH into the device. Running Clef off a USB armory means that you can use the armory as a very versatile offline computer, which only ever connects to a local network between your computer and the device itself. -Needless to say, the while this model should be fairly secure against remote attacks, an attacker with physical access +Needless to say, while this model should be fairly secure against remote attacks, an attacker with physical access to the USB Armory would trivially be able to extract the contents of the device filesystem. diff --git a/cmd/clef/extapi_changelog.md b/cmd/clef/extapi_changelog.md index dbc30263..31554f07 100644 --- a/cmd/clef/extapi_changelog.md +++ b/cmd/clef/extapi_changelog.md @@ -10,6 +10,64 @@ TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the: Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. +### 6.1.0 + +The API-method `account_signGnosisSafeTx` was added. This method takes two parameters, +`[address, safeTx]`. The latter, `safeTx`, can be copy-pasted from the gnosis relay. For example: + +``` +{ + "jsonrpc": "2.0", + "method": "account_signGnosisSafeTx", + "params": ["0xfd1c4226bfD1c436672092F4eCbfC270145b7256", + { + "safe": "0x25a6c4BBd32B2424A9c99aEB0584Ad12045382B3", + "to": "0xB372a646f7F05Cc1785018dBDA7EBc734a2A20E2", + "value": "20000000000000000", + "data": null, + "operation": 0, + "gasToken": "0x0000000000000000000000000000000000000000", + "safeTxGas": 27845, + "baseGas": 0, + "gasPrice": "0", + "refundReceiver": "0x0000000000000000000000000000000000000000", + "nonce": 2, + "executionDate": null, + "submissionDate": "2020-09-15T21:54:49.617634Z", + "modified": "2020-09-15T21:54:49.617634Z", + "blockNumber": null, + "transactionHash": null, + "safeTxHash": "0x2edfbd5bc113ff18c0631595db32eb17182872d88d9bf8ee4d8c2dd5db6d95e2", + "executor": null, + "isExecuted": false, + "isSuccessful": null, + "ethGasPrice": null, + "gasUsed": null, + "fee": null, + "origin": null, + "dataDecoded": null, + "confirmationsRequired": null, + "confirmations": [ + { + "owner": "0xAd2e180019FCa9e55CADe76E4487F126Fd08DA34", + "submissionDate": "2020-09-15T21:54:49.663299Z", + "transactionHash": null, + "confirmationType": "CONFIRMATION", + "signature": "0x95a7250bb645f831c86defc847350e7faff815b2fb586282568e96cc859e39315876db20a2eed5f7a0412906ec5ab57652a6f645ad4833f345bda059b9da2b821c", + "signatureType": "EOA" + } + ], + "signatures": null + } + ], + "id": 67 +} +``` + +Not all fields are required, though. This method is really just a UX helper, which massages the +input to conform to the `EIP-712` [specification](https://docs.gnosis.io/safe/docs/contracts_tx_execution/#transaction-hash) +for the Gnosis Safe, and making the output be directly importable to by a relay service. + ### 6.0.0 diff --git a/cmd/clef/intapi_changelog.md b/cmd/clef/intapi_changelog.md index 38424f06..eaeb2e68 100644 --- a/cmd/clef/intapi_changelog.md +++ b/cmd/clef/intapi_changelog.md @@ -10,6 +10,17 @@ TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the: Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. +### 7.0.1 + +Added `clef_New` to the internal API callable from a UI. + +> `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 that was specified when this API was created. +> This method is the same as New on the external API, the difference being that +> this implementation does not ask for confirmation, since it's initiated by +> the user + ### 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. @@ -150,7 +161,7 @@ UserInputResponse struct { #### 1.2.0 * Add `OnStartup` method, to provide the UI with information about what API version -the signer uses (both internal and external) aswell as build-info and external api. +the signer uses (both internal and external) as well as build-info and external api. Example call: ```json diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 1955951b..05290f52 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -25,37 +25,36 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "math/big" "os" "os/signal" - "os/user" "path/filepath" "runtime" "strings" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/console" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/cryptoecc/ETH-ECC/signer/core" - "github.com/cryptoecc/ETH-ECC/signer/fourbyte" - "github.com/cryptoecc/ETH-ECC/signer/rules" - "github.com/cryptoecc/ETH-ECC/signer/storage" - colorable "github.com/mattn/go-colorable" + "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/crypto" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/internal/flags" + "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/core/apitypes" + "github.com/ethereum/go-ethereum/signer/fourbyte" + "github.com/ethereum/go-ethereum/signer/rules" + "github.com/ethereum/go-ethereum/signer/storage" + "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) const legalWarning = ` @@ -73,66 +72,70 @@ PURPOSE. See the GNU General Public License for more details. ` var ( - logLevelFlag = cli.IntFlag{ + logLevelFlag = &cli.IntFlag{ Name: "loglevel", Value: 4, Usage: "log level to emit to the screen", } - advancedMode = cli.BoolFlag{ + advancedMode = &cli.BoolFlag{ Name: "advanced", Usage: "If enabled, issues warnings instead of rejections for suspicious requests. Default off", } - keystoreFlag = cli.StringFlag{ + acceptFlag = &cli.BoolFlag{ + Name: "suppress-bootwarn", + Usage: "If set, does not show the warning during boot", + } + keystoreFlag = &cli.StringFlag{ Name: "keystore", Value: filepath.Join(node.DefaultDataDir(), "keystore"), Usage: "Directory for the keystore", } - configdirFlag = cli.StringFlag{ + configdirFlag = &cli.StringFlag{ Name: "configdir", Value: DefaultConfigDir(), Usage: "Directory for Clef configuration", } - chainIdFlag = cli.Int64Flag{ + 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, 12345=Lve, 12346=Lvetest)", + 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", - Value: node.DefaultHTTPPort + 5, + rpcPortFlag = &cli.IntFlag{ + Name: "http.port", + Usage: "HTTP-RPC server listening port", + Value: node.DefaultHTTPPort + 5, + Category: flags.APICategory, } - signerSecretFlag = cli.StringFlag{ + signerSecretFlag = &cli.StringFlag{ Name: "signersecret", Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash", } - customDBFlag = cli.StringFlag{ + customDBFlag = &cli.StringFlag{ Name: "4bytedb-custom", Usage: "File used for writing new 4byte-identifiers submitted via API", Value: "./4byte-custom.json", } - auditLogFlag = cli.StringFlag{ + auditLogFlag = &cli.StringFlag{ Name: "auditlog", Usage: "File used to emit audit logs. Set to \"\" to disable", Value: "audit.log", } - ruleFlag = cli.StringFlag{ + ruleFlag = &cli.StringFlag{ Name: "rules", Usage: "Path to the rule file to auto-authorize requests with", } - stdiouiFlag = cli.BoolFlag{ + stdiouiFlag = &cli.BoolFlag{ Name: "stdio-ui", Usage: "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.", } - testFlag = cli.BoolFlag{ + testFlag = &cli.BoolFlag{ Name: "stdio-ui-test", Usage: "Mechanism to test interface between Clef and UI. Requires 'stdio-ui'.", } - app = cli.NewApp() - initCommand = cli.Command{ - Action: utils.MigrateFlags(initializeSecrets), + initCommand = &cli.Command{ + Action: initializeSecrets, Name: "init", Usage: "Initialize the signer, generate secret storage", ArgsUsage: "", @@ -144,8 +147,8 @@ var ( 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{ - Action: utils.MigrateFlags(attestFile), + attestCommand = &cli.Command{ + Action: attestFile, Name: "attest", Usage: "Attest that a js-file is to be used", ArgsUsage: "", @@ -161,8 +164,8 @@ incoming requests. 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), + setCredentialCommand = &cli.Command{ + Action: setCredential, Name: "setpw", Usage: "Store a credential for a keystore file", ArgsUsage: "
", @@ -174,8 +177,8 @@ Clef that the file is 'safe' to execute.`, Description: ` The setpw command stores a password for a given address (keyfile). `} - delCredentialCommand = cli.Command{ - Action: utils.MigrateFlags(removeCredential), + delCredentialCommand = &cli.Command{ + Action: removeCredential, Name: "delpw", Usage: "Remove a credential for a keystore file", ArgsUsage: "
", @@ -187,7 +190,23 @@ The setpw command stores a password for a given address (keyfile). Description: ` The delpw command removes a password for a given address (keyfile). `} - gendocCommand = cli.Command{ + newAccountCommand = &cli.Command{ + Action: newAccount, + Name: "newaccount", + Usage: "Create a new account", + ArgsUsage: "", + Flags: []cli.Flag{ + logLevelFlag, + keystoreFlag, + utils.LightKDFFlag, + acceptFlag, + }, + Description: ` +The newaccount command creates a new keystore-backed account. It is a convenience-method +which can be used in lieu of an external UI.`, + } + + gendocCommand = &cli.Command{ Action: GenDoc, Name: "gendoc", Usage: "Generate documentation about json-rpc format", @@ -196,9 +215,16 @@ The gendoc generates example structures of the json-rpc communication types. `} ) +var ( + // Git SHA1 commit hash of the release (set via linker flags) + gitCommit = "" + gitDate = "" + + app = flags.NewApp(gitCommit, gitDate, "Manage Ethereum account operations") +) + func init() { app.Name = "Clef" - app.Usage = "Manage Ethereum account operations" app.Flags = []cli.Flag{ logLevelFlag, keystoreFlag, @@ -207,11 +233,11 @@ func init() { utils.LightKDFFlag, utils.NoUSBFlag, utils.SmartCardDaemonPathFlag, - utils.RPCListenAddrFlag, - utils.RPCVirtualHostsFlag, + utils.HTTPListenAddrFlag, + utils.HTTPVirtualHostsFlag, utils.IPCDisabledFlag, utils.IPCPathFlag, - utils.RPCEnabledFlag, + utils.HTTPEnabledFlag, rpcPortFlag, signerSecretFlag, customDBFlag, @@ -220,9 +246,16 @@ func init() { stdiouiFlag, testFlag, advancedMode, + acceptFlag, } app.Action = signer - app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand, delCredentialCommand, gendocCommand} + app.Commands = []*cli.Command{initCommand, + attestCommand, + setCredentialCommand, + delCredentialCommand, + newAccountCommand, + gendocCommand, + } } func main() { @@ -238,7 +271,7 @@ func initializeSecrets(c *cli.Context) error { return err } // Ensure the master key does not yet exist, we're not willing to overwrite - configDir := c.GlobalString(configdirFlag.Name) + configDir := c.String(configdirFlag.Name) if err := os.Mkdir(configDir, 0700); err != nil && !os.IsExist(err) { return err } @@ -256,13 +289,13 @@ func initializeSecrets(c *cli.Context) error { return fmt.Errorf("failed to read enough random") } n, p := keystore.StandardScryptN, keystore.StandardScryptP - if c.GlobalBool(utils.LightKDFFlag.Name) { + if c.Bool(utils.LightKDFFlag.Name) { n, p = keystore.LightScryptN, keystore.LightScryptP } 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) + password = utils.GetPassPhrase(text, true) if err := core.ValidatePasswordFormat(password); err != nil { fmt.Printf("invalid password: %v\n", err) } else { @@ -282,7 +315,7 @@ func initializeSecrets(c *cli.Context) error { return fmt.Errorf("master key %v already exists, will not overwrite", location) } // Write the file and print the usual warning message - if err = ioutil.WriteFile(location, cipherSeed, 0400); err != nil { + if err = os.WriteFile(location, cipherSeed, 0400); err != nil { return err } fmt.Printf("A master seed has been generated into %s\n", location) @@ -299,8 +332,9 @@ You should treat 'masterseed.json' with utmost secrecy and make a backup of it! `) return nil } + func attestFile(ctx *cli.Context) error { - if len(ctx.Args()) < 1 { + if ctx.NArg() < 1 { utils.Fatalf("This command requires an argument.") } if err := initialize(ctx); err != nil { @@ -311,7 +345,7 @@ func attestFile(ctx *cli.Context) error { if err != nil { utils.Fatalf(err.Error()) } - configDir := ctx.GlobalString(configdirFlag.Name) + configDir := ctx.String(configdirFlag.Name) vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) confKey := crypto.Keccak256([]byte("config"), stretchedKey) @@ -324,7 +358,7 @@ func attestFile(ctx *cli.Context) error { } func setCredential(ctx *cli.Context) error { - if len(ctx.Args()) < 1 { + if ctx.NArg() < 1 { utils.Fatalf("This command requires an address to be passed as an argument") } if err := initialize(ctx); err != nil { @@ -335,14 +369,14 @@ func setCredential(ctx *cli.Context) error { utils.Fatalf("Invalid address specified: %s", addr) } address := common.HexToAddress(addr) - password := getPassPhrase("Please enter a password to store for this address:", true) + password := utils.GetPassPhrase("Please enter a password to store for this address:", true) fmt.Println() stretchedKey, err := readMasterKey(ctx, nil) if err != nil { utils.Fatalf(err.Error()) } - configDir := ctx.GlobalString(configdirFlag.Name) + configDir := ctx.String(configdirFlag.Name) vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey) @@ -354,7 +388,7 @@ func setCredential(ctx *cli.Context) error { } func removeCredential(ctx *cli.Context) error { - if len(ctx.Args()) < 1 { + if ctx.NArg() < 1 { utils.Fatalf("This command requires an address to be passed as an argument") } if err := initialize(ctx); err != nil { @@ -370,7 +404,7 @@ func removeCredential(ctx *cli.Context) error { if err != nil { utils.Fatalf(err.Error()) } - configDir := ctx.GlobalString(configdirFlag.Name) + configDir := ctx.String(configdirFlag.Name) vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey) @@ -381,14 +415,41 @@ func removeCredential(ctx *cli.Context) error { return nil } +func newAccount(c *cli.Context) error { + if err := initialize(c); err != nil { + return err + } + // The newaccount is meant for users using the CLI, since 'real' external + // UIs can use the UI-api instead. So we'll just use the native CLI UI here. + var ( + ui = core.NewCommandlineUI() + pwStorage storage.Storage = &storage.NoStorage{} + ksLoc = c.String(keystoreFlag.Name) + lightKdf = c.Bool(utils.LightKDFFlag.Name) + ) + log.Info("Starting clef", "keystore", ksLoc, "light-kdf", lightKdf) + am := core.StartClefAccountManager(ksLoc, true, lightKdf, "") + // This gives is us access to the external API + apiImpl := core.NewSignerAPI(am, 0, true, ui, nil, false, pwStorage) + // This gives us access to the internal API + internalApi := core.NewUIServerAPI(apiImpl) + addr, err := internalApi.New(context.Background()) + if err == nil { + fmt.Printf("Generated account %v\n", addr.String()) + } + return err +} + func initialize(c *cli.Context) error { // Set up the logger to print everything logOutput := os.Stdout - if c.GlobalBool(stdiouiFlag.Name) { + if c.Bool(stdiouiFlag.Name) { logOutput = os.Stderr // If using the stdioui, we can't do the 'confirm'-flow - fmt.Fprintf(logOutput, legalWarning) - } else { + if !c.Bool(acceptFlag.Name) { + fmt.Fprint(logOutput, legalWarning) + } + } else if !c.Bool(acceptFlag.Name) { if !confirm(legalWarning) { return fmt.Errorf("aborted by user") } @@ -404,10 +465,31 @@ func initialize(c *cli.Context) error { return nil } +// ipcEndpoint resolves an IPC endpoint based on a configured value, taking into +// account the set data folders as well as the designated platform we're currently +// running on. +func ipcEndpoint(ipcPath, datadir string) string { + // On windows we can only use plain top-level pipes + if runtime.GOOS == "windows" { + if strings.HasPrefix(ipcPath, `\\.\pipe\`) { + return ipcPath + } + return `\\.\pipe\` + ipcPath + } + // Resolve names into the data directory full paths otherwise + if filepath.Base(ipcPath) == ipcPath { + if datadir == "" { + return filepath.Join(os.TempDir(), ipcPath) + } + return filepath.Join(datadir, ipcPath) + } + return ipcPath +} + 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 c.NArg() > 0 { + return fmt.Errorf("invalid command: %q", c.Args().First()) } if err := initialize(c); err != nil { return err @@ -415,7 +497,7 @@ func signer(c *cli.Context) error { var ( ui core.UIClientAPI ) - if c.GlobalBool(stdiouiFlag.Name) { + if c.Bool(stdiouiFlag.Name) { log.Info("Using stdin/stdout as UI-channel") ui = core.NewStdIOUI() } else { @@ -423,7 +505,7 @@ func signer(c *cli.Context) error { ui = core.NewCommandlineUI() } // 4bytedb data - fourByteLocal := c.GlobalString(customDBFlag.Name) + fourByteLocal := c.String(customDBFlag.Name) db, err := fourbyte.NewWithFile(fourByteLocal) if err != nil { utils.Fatalf(err.Error()) @@ -435,8 +517,7 @@ func signer(c *cli.Context) error { api core.ExternalAPI pwStorage storage.Storage = &storage.NoStorage{} ) - - configDir := c.GlobalString(configdirFlag.Name) + configDir := c.String(configdirFlag.Name) if stretchedKey, err := readMasterKey(c, ui); err != nil { log.Warn("Failed to open master, rules disabled", "err", err) } else { @@ -453,8 +534,8 @@ func signer(c *cli.Context) error { configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confkey) // Do we have a rule-file? - if ruleFile := c.GlobalString(ruleFlag.Name); ruleFile != "" { - ruleJS, err := ioutil.ReadFile(ruleFile) + if ruleFile := c.String(ruleFlag.Name); ruleFile != "" { + ruleJS, err := os.ReadFile(ruleFile) if err != nil { log.Warn("Could not load rules, disabling", "file", ruleFile, "err", err) } else { @@ -477,12 +558,12 @@ func signer(c *cli.Context) error { } } 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) + chainId = c.Int64(chainIdFlag.Name) + ksLoc = c.String(keystoreFlag.Name) + lightKdf = c.Bool(utils.LightKDFFlag.Name) + advanced = c.Bool(advancedMode.Name) + nousb = c.Bool(utils.NoUSBFlag.Name) + scpath = c.String(utils.SmartCardDaemonPathFlag.Name) ) log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc, "light-kdf", lightKdf, "advanced", advanced) @@ -494,7 +575,7 @@ func signer(c *cli.Context) error { ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl // Audit logging - if logfile := c.GlobalString(auditLogFlag.Name); logfile != "" { + if logfile := c.String(auditLogFlag.Name); logfile != "" { api, err = core.NewAuditLogger(logfile, api) if err != nil { utils.Fatalf(err.Error()) @@ -509,35 +590,41 @@ func signer(c *cli.Context) error { rpcAPI := []rpc.API{ { Namespace: "account", - Public: true, Service: api, - Version: "1.0"}, + }, } - if c.GlobalBool(utils.RPCEnabledFlag.Name) { - vhosts := splitAndTrim(c.GlobalString(utils.RPCVirtualHostsFlag.Name)) - cors := splitAndTrim(c.GlobalString(utils.RPCCORSDomainFlag.Name)) + if c.Bool(utils.HTTPEnabledFlag.Name) { + vhosts := utils.SplitAndTrim(c.String(utils.HTTPVirtualHostsFlag.Name)) + cors := utils.SplitAndTrim(c.String(utils.HTTPCORSDomainFlag.Name)) + + srv := rpc.NewServer() + err := node.RegisterApis(rpcAPI, []string{"account"}, srv) + if err != nil { + utils.Fatalf("Could not register API: %w", err) + } + handler := node.NewHTTPHandlerStack(srv, cors, vhosts, nil) + + // set port + port := c.Int(rpcPortFlag.Name) // start http server - httpEndpoint := fmt.Sprintf("%s:%d", c.GlobalString(utils.RPCListenAddrFlag.Name), c.Int(rpcPortFlag.Name)) - listener, _, err := rpc.StartHTTPEndpoint(httpEndpoint, rpcAPI, []string{"account"}, cors, vhosts, rpc.DefaultHTTPTimeouts) + httpEndpoint := fmt.Sprintf("%s:%d", c.String(utils.HTTPListenAddrFlag.Name), port) + httpServer, addr, err := node.StartHTTPEndpoint(httpEndpoint, rpc.DefaultHTTPTimeouts, handler) if err != nil { utils.Fatalf("Could not start RPC api: %v", err) } - extapiURL = fmt.Sprintf("http://%s", httpEndpoint) + extapiURL = fmt.Sprintf("http://%v/", addr) log.Info("HTTP endpoint opened", "url", extapiURL) defer func() { - listener.Close() - log.Info("HTTP endpoint closed", "url", httpEndpoint) + // Don't bother imposing a timeout here. + httpServer.Shutdown(context.Background()) + log.Info("HTTP endpoint closed", "url", extapiURL) }() } - if !c.GlobalBool(utils.IPCDisabledFlag.Name) { - if c.IsSet(utils.IPCPathFlag.Name) { - ipcapiURL = c.GlobalString(utils.IPCPathFlag.Name) - } else { - ipcapiURL = filepath.Join(configDir, "clef.ipc") - } - + if !c.Bool(utils.IPCDisabledFlag.Name) { + givenPath := c.String(utils.IPCPathFlag.Name) + ipcapiURL = ipcEndpoint(filepath.Join(givenPath, "clef.ipc"), configDir) listener, _, err := rpc.StartIPCEndpoint(ipcapiURL, rpcAPI) if err != nil { utils.Fatalf("Could not start IPC api: %v", err) @@ -547,10 +634,9 @@ func signer(c *cli.Context) error { listener.Close() log.Info("IPC endpoint closed", "url", ipcapiURL) }() - } - if c.GlobalBool(testFlag.Name) { + if c.Bool(testFlag.Name) { log.Info("Performing UI test") go testExternalUI(apiImpl) } @@ -563,7 +649,7 @@ func signer(c *cli.Context) error { }, }) - abortChan := make(chan os.Signal) + abortChan := make(chan os.Signal, 1) signal.Notify(abortChan, os.Interrupt) sig := <-abortChan @@ -572,21 +658,11 @@ func signer(c *cli.Context) error { return 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 -} - // DefaultConfigDir is the default config directory to use for the vaults and other // persistence requirements. func DefaultConfigDir() string { // Try to place the data folder in the user's home dir - home := homeDir() + home := flags.HomeDir() if home != "" { if runtime.GOOS == "darwin" { return filepath.Join(home, "Library", "Signer") @@ -594,40 +670,29 @@ func DefaultConfigDir() string { 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") + return filepath.Join(home, "AppData", "Roaming", "Signer") } + return filepath.Join(home, ".clef") } // As we cannot guess a stable location, return empty and handle later return "" } -func homeDir() string { - if home := os.Getenv("HOME"); home != "" { - return home - } - if usr, err := user.Current(); err == nil { - return usr.HomeDir - } - return "" -} func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) { var ( file string - configDir = ctx.GlobalString(configdirFlag.Name) + configDir = ctx.String(configdirFlag.Name) ) - if ctx.GlobalIsSet(signerSecretFlag.Name) { - file = ctx.GlobalString(signerSecretFlag.Name) + if ctx.IsSet(signerSecretFlag.Name) { + file = ctx.String(signerSecretFlag.Name) } else { file = filepath.Join(configDir, "masterseed.json") } if err := checkFile(file); err != nil { return nil, err } - cipherKey, err := ioutil.ReadFile(file) + cipherKey, err := os.ReadFile(file) if err != nil { return nil, err } @@ -643,7 +708,7 @@ func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) { } password = resp.Text } else { - password = getPassPhrase("Decrypt master seed of clef", false) + password = utils.GetPassPhrase("Decrypt master seed of clef", false) } masterSeed, err := decryptSeed(cipherKey, password) if err != nil { @@ -663,14 +728,16 @@ func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) { // checkFile is a convenience function to check if a file // * exists -// * is mode 0400 +// * is mode 0400 (unix only) func checkFile(filename string) error { info, err := os.Stat(filename) if err != nil { return fmt.Errorf("failed stat on %s: %v", filename, err) } // Check the unix permission bits - if info.Mode().Perm()&0377 != 0 { + // However, on windows, we cannot use the unix perm-bits, see + // https://github.com/ethereum/go-ethereum/issues/20123 + if runtime.GOOS != "windows" && info.Mode().Perm()&0377 != 0 { return fmt.Errorf("file (%v) has insecure file permissions (%v)", filename, info.Mode().String()) } return nil @@ -678,7 +745,7 @@ func checkFile(filename string) error { // confirm displays a text and asks for user confirmation func confirm(text string) bool { - fmt.Printf(text) + fmt.Print(text) fmt.Printf("\nEnter 'ok' to proceed:\n> ") text, err := bufio.NewReader(os.Stdin).ReadString('\n') @@ -692,7 +759,6 @@ func confirm(text string) bool { } 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") @@ -744,21 +810,19 @@ func testExternalUI(api *core.SignerAPI) { 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{}, + ParentHash: common.HexToHash("0000H45H"), + UncleHash: common.HexToHash("0000H45H"), + Coinbase: common.HexToAddress("0000H45H"), + Root: common.HexToHash("0000H00H"), + TxHash: common.HexToHash("0000H45H"), + ReceiptHash: common.HexToHash("0000H45H"), + Difficulty: big.NewInt(1337), + Number: big.NewInt(1337), + GasLimit: 1338, + GasUsed: 1338, + Time: 1338, + Extra: []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"), + MixDigest: common.HexToHash("0x0000H45H"), } cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader) if err != nil { @@ -774,7 +838,7 @@ func testExternalUI(api *core.SignerAPI) { 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 + var typedData apitypes.TypedData json.Unmarshal([]byte(data), &typedData) _, err := api.SignTypedData(ctx, *addr, typedData) expectApprove("sign 712 typed data", err) @@ -794,18 +858,17 @@ func testExternalUI(api *core.SignerAPI) { 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{ + tx := apitypes.SendTxArgs{ Data: &data, Nonce: 0x1, Value: hexutil.Big(*big.NewInt(6)), From: common.NewMixedcaseAddress(a), To: &to, - GasPrice: hexutil.Big(*big.NewInt(5)), + GasPrice: (*hexutil.Big)(big.NewInt(5)), Gas: 1000, Input: nil, } @@ -837,28 +900,6 @@ func testExternalUI(api *core.SignerAPI) { } 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 -// from a list of preloaded passphrases, or requested interactively from the user. -// 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("Password: ") - if err != nil { - utils.Fatalf("Failed to read password: %v", err) - } - if confirmation { - confirm, err := console.Stdin.PromptPassword("Repeat password: ") - if err != nil { - utils.Fatalf("Failed to read password confirmation: %v", err) - } - if password != confirm { - utils.Fatalf("Passwords do not match") - } - } - return password } type encryptedSeedStorage struct { @@ -894,8 +935,7 @@ func decryptSeed(keyjson []byte, auth string) ([]byte, error) { } // GenDoc outputs examples of all structures used in json-rpc communication -func GenDoc(ctx *cli.Context) { - +func GenDoc(ctx *cli.Context) error { var ( a = common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef") b = common.HexToAddress("0x1111111122222222222233333333334444444444") @@ -911,7 +951,7 @@ func GenDoc(ctx *cli.Context) { 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) + log.Error("Error generating output", "err", err) } } ) @@ -922,7 +962,7 @@ func GenDoc(ctx *cli.Context) { "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}} + messages := []*apitypes.NameValueType{{Name: "message", Value: msg, Typ: accounts.MimetypeTextPlain}} add("SignDataRequest", desc, &core.SignDataRequest{ Address: common.NewMixedcaseAddress(a), @@ -952,17 +992,17 @@ func GenDoc(ctx *cli.Context) { 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"}, + Callinfo: []apitypes.ValidationInfo{ + {Typ: "Warning", Message: "Something looks odd, show this message as a warning"}, + {Typ: "Info", Message: "User should see this as well"}, }, - Transaction: core.SendTxArgs{ + Transaction: apitypes.SendTxArgs{ Data: &data, Nonce: 0x1, Value: hexutil.Big(*big.NewInt(6)), From: common.NewMixedcaseAddress(a), To: nil, - GasPrice: hexutil.Big(*big.NewInt(5)), + GasPrice: (*hexutil.Big)(big.NewInt(5)), Gas: 1000, Input: nil, }}) @@ -972,13 +1012,13 @@ func GenDoc(ctx *cli.Context) { 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{ + Transaction: apitypes.SendTxArgs{ Data: &data, Nonce: 0x4, Value: hexutil.Big(*big.NewInt(6)), From: common.NewMixedcaseAddress(a), To: nil, - GasPrice: hexutil.Big(*big.NewInt(5)), + GasPrice: (*hexutil.Big)(big.NewInt(5)), Gas: 1000, Input: nil, }}) @@ -1003,9 +1043,8 @@ func GenDoc(ctx *cli.Context) { rlpdata := common.FromHex("0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed") var tx types.Transaction - rlp.DecodeBytes(rlpdata, &tx) + tx.UnmarshalBinary(rlpdata) 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)", @@ -1020,16 +1059,21 @@ func GenDoc(ctx *cli.Context) { &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"}}}, + {Address: a, URL: accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/a"}}, + {Address: b, URL: 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{}}, + { + Address: common.HexToAddress("0xcowbeef000000cowbeef00000000000000000c0w"), + URL: accounts.URL{Path: ".. ignored .."}, + }, + { + Address: common.HexToAddress("0xffffffffffffffffffffffffffffffffffffffff"), + }, }}) } @@ -1039,4 +1083,5 @@ These data types are defined in the channel between clef and the UI`) for _, elem := range output { fmt.Println(elem) } + return nil } diff --git a/cmd/clef/pythonsigner.py b/cmd/clef/pythonsigner.py index 315aabd7..b9ea1e40 100644 --- a/cmd/clef/pythonsigner.py +++ b/cmd/clef/pythonsigner.py @@ -1,177 +1,315 @@ -import os,sys, subprocess +import sys +import subprocess + from tinyrpc.transports import ServerTransport from tinyrpc.protocols.jsonrpc import JSONRPCProtocol -from tinyrpc.dispatch import public,RPCDispatcher +from tinyrpc.dispatch import public, RPCDispatcher from tinyrpc.server import RPCServer -""" This is a POC example of how to write a custom UI for Clef. The UI starts the -clef process with the '--stdio-ui' option, and communicates with clef using standard input / output. +""" +This is a POC example of how to write a custom UI for Clef. +The UI starts the clef process with the '--stdio-ui' option +and communicates with clef using standard input / output. + +The standard input/output is a relatively secure way to communicate, +as it does not require opening any ports or IPC files. Needless to say, +it does not protect against memory inspection mechanisms +where an attacker can access process memory. -The standard input/output is a relatively secure way to communicate, as it does not require opening any ports -or IPC files. Needless to say, it does not protect against memory inspection mechanisms where an attacker -can access process memory.""" +To make this work install all the requirements: + + pip install -r requirements.txt +""" try: import urllib.parse as urlparse except ImportError: import urllib as urlparse + class StdIOTransport(ServerTransport): - """ Uses std input/output for RPC """ + """Uses std input/output for RPC""" + def receive_message(self): return None, urlparse.unquote(sys.stdin.readline()) def send_reply(self, context, reply): print(reply) + class PipeTransport(ServerTransport): - """ Uses std a pipe for RPC """ + """Uses std a pipe for RPC""" - def __init__(self,input, output): + def __init__(self, input, output): self.input = input self.output = output def receive_message(self): data = self.input.readline() - print(">> {}".format( data)) + print(">> {}".format(data)) return None, urlparse.unquote(data) def send_reply(self, context, reply): - print("<< {}".format( reply)) - self.output.write(reply) - self.output.write("\n") + reply = str(reply, "utf-8") + print("<< {}".format(reply)) + self.output.write("{}\n".format(reply)) + -class StdIOHandler(): +def sanitize(txt, limit=100): + return txt[:limit].encode("unicode_escape").decode("utf-8") + + +def metaString(meta): + """ + "meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""} + """ # noqa: E501 + message = ( + "\tRequest context:\n" + "\t\t{remote} -> {scheme} -> {local}\n" + "\tAdditional HTTP header data, provided by the external caller:\n" + "\t\tUser-Agent: {user_agent}\n" + "\t\tOrigin: {origin}\n" + ) + return message.format( + remote=meta.get("remote", ""), + scheme=meta.get("scheme", ""), + local=meta.get("local", ""), + user_agent=sanitize(meta.get("User-Agent"), 200), + origin=sanitize(meta.get("Origin"), 100), + ) + + +class StdIOHandler: def __init__(self): pass @public - def ApproveTx(self,req): + def approveTx(self, req): """ Example request: - { - "jsonrpc": "2.0", - "method": "ApproveTx", - "params": [{ - "transaction": { - "to": "0xae967917c465db8578ca9024c205720b1a3651A9", - "gas": "0x333", - "gasPrice": "0x123", - "value": "0x10", - "data": "0xd7a5865800000000000000000000000000000000000000000000000000000000000000ff", - "nonce": "0x0" - }, - "from": "0xAe967917c465db8578ca9024c205720b1a3651A9", - "call_info": "Warning! Could not validate ABI-data against calldata\nSupplied ABI spec does not contain method signature in data: 0xd7a58658", - "meta": { - "remote": "127.0.0.1:34572", - "local": "localhost:8550", - "scheme": "HTTP/1.1" - } - }], - "id": 1 - } + + {"jsonrpc":"2.0","id":20,"method":"ui_approveTx","params":[{"transaction":{"from":"0xDEADbEeF000000000000000000000000DeaDbeEf","to":"0xDEADbEeF000000000000000000000000DeaDbeEf","gas":"0x3e8","gasPrice":"0x5","maxFeePerGas":null,"maxPriorityFeePerGas":null,"value":"0x6","nonce":"0x1","data":"0x"},"call_info":null,"meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]} :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: - """ - transaction = req.get('transaction') - _from = req.get('from') - call_info = req.get('call_info') - meta = req.get('meta') - + """ # noqa: E501 + message = ( + "Sign transaction request:\n" + "\t{meta_string}\n" + "\n" + "\tFrom: {from_}\n" + "\tTo: {to}\n" + "\n" + "\tAuto-rejecting request" + ) + meta = req.get("meta", {}) + transaction = req.get("transaction") + sys.stdout.write( + message.format( + meta_string=metaString(meta), + from_=transaction.get("from", ""), + to=transaction.get("to", ""), + ) + ) return { - "approved" : False, - #"transaction" : transaction, - # "from" : _from, -# "password" : None, + "approved": False, } @public - def ApproveSignData(self, req): - """ Example request - + def approveSignData(self, req): """ - return {"approved": False, "password" : None} + Example request: - @public - def ApproveExport(self, req): - """ Example request + {"jsonrpc":"2.0","id":8,"method":"ui_approveSignData","params":[{"content_type":"application/x-clique-header","address":"0x0011223344556677889900112233445566778899","raw_data":"+QIRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIFOYIFOYIFOoIFOoIFOppFeHRyYSBkYXRhIEV4dHJhIGRhdGEgRXh0cqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAA==","messages":[{"name":"Clique header","value":"clique header 1337 [0x44381ab449d77774874aca34634cb53bc21bd22aef2d3d4cf40e51176cb585ec]","type":"clique"}],"call_info":null,"hash":"0xa47ab61438a12a06c81420e308c2b7aae44e9cd837a5df70dd021421c0f58643","meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]} + """ # noqa: E501 + message = ( + "Sign data request:\n" + "\t{meta_string}\n" + "\n" + "\tContent-type: {content_type}\n" + "\tAddress: {address}\n" + "\tHash: {hash_}\n" + "\n" + "\tAuto-rejecting request\n" + ) + meta = req.get("meta", {}) + sys.stdout.write( + message.format( + meta_string=metaString(meta), + content_type=req.get("content_type"), + address=req.get("address"), + hash_=req.get("hash"), + ) + ) - """ - return {"approved" : False} + return { + "approved": False, + "password": None, + } @public - def ApproveImport(self, req): - """ Example request - + def approveNewAccount(self, req): """ - return { "approved" : False, "old_password": "", "new_password": ""} + Example request: - @public - def ApproveListing(self, req): - """ Example request + {"jsonrpc":"2.0","id":25,"method":"ui_approveNewAccount","params":[{"meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]} + """ # noqa: E501 + message = ( + "Create new account request:\n" + "\t{meta_string}\n" + "\n" + "\tAuto-rejecting request\n" + ) + meta = req.get("meta", {}) + sys.stdout.write(message.format(meta_string=metaString(meta))) + return { + "approved": False, + } + @public + def showError(self, req): """ - return {'accounts': []} + Example request: + + {"jsonrpc":"2.0","method":"ui_showError","params":[{"text":"If you see this message, enter 'yes' to the next question"}]} + + :param message: to display + :return:nothing + """ # noqa: E501 + message = ( + "## Error\n{text}\n" + "Press enter to continue\n" + ) + text = req.get("text") + sys.stdout.write(message.format(text=text)) + input() + return @public - def ApproveNewAccount(self, req): + def showInfo(self, req): """ - Example request + Example request: - :return: - """ - return {"approved": False, - #"password": "" - } + {"jsonrpc":"2.0","method":"ui_showInfo","params":[{"text":"If you see this message, enter 'yes' to next question"}]} + + :param message: to display + :return:nothing + """ # noqa: E501 + message = ( + "## Info\n{text}\n" + "Press enter to continue\n" + ) + text = req.get("text") + sys.stdout.write(message.format(text=text)) + input() + return @public - def ShowError(self,message = {}): + def onSignerStartup(self, req): """ Example request: - {"jsonrpc":"2.0","method":"ShowInfo","params":{"message":"Testing 'ShowError'"},"id":1} + {"jsonrpc":"2.0", "method":"ui_onSignerStartup", "params":[{"info":{"extapi_http":"n/a","extapi_ipc":"/home/user/.clef/clef.ipc","extapi_version":"6.1.0","intapi_version":"7.0.1"}}]} + """ # noqa: E501 + message = ( + "\n" + "\t\tExt api url: {extapi_http}\n" + "\t\tInt api ipc: {extapi_ipc}\n" + "\t\tExt api ver: {extapi_version}\n" + "\t\tInt api ver: {intapi_version}\n" + ) + info = req.get("info") + sys.stdout.write( + message.format( + extapi_http=info.get("extapi_http"), + extapi_ipc=info.get("extapi_ipc"), + extapi_version=info.get("extapi_version"), + intapi_version=info.get("intapi_version"), + ) + ) - :param message: to show - :return: nothing + @public + def approveListing(self, req): """ - if 'text' in message.keys(): - sys.stderr.write("Error: {}\n".format( message['text'])) - return + Example request: + + {"jsonrpc":"2.0","id":23,"method":"ui_approveListing","params":[{"accounts":[{"address":... + """ # noqa: E501 + message = ( + "\n" + "## Account listing request\n" + "\t{meta_string}\n" + "\tDo you want to allow listing the following accounts?\n" + "\t-{addrs}\n" + "\n" + "->Auto-answering No\n" + ) + meta = req.get("meta", {}) + accounts = req.get("accounts", []) + addrs = [x.get("address") for x in accounts] + sys.stdout.write( + message.format( + addrs="\n\t-".join(addrs), + meta_string=metaString(meta) + ) + ) + return {} @public - def ShowInfo(self,message = {}): + def onInputRequired(self, req): """ - Example request - {"jsonrpc":"2.0","method":"ShowInfo","params":{"message":"Testing 'ShowInfo'"},"id":0} + Example request: + + {"jsonrpc":"2.0","id":1,"method":"ui_onInputRequired","params":[{"title":"Master Password","prompt":"Please enter the password to decrypt the master seed","isPassword":true}]} :param message: to display :return:nothing - """ + """ # noqa: E501 + message = ( + "\n" + "## {title}\n" + "\t{prompt}\n" + "\n" + "> " + ) + sys.stdout.write( + message.format( + title=req.get("title"), + prompt=req.get("prompt") + ) + ) + isPassword = req.get("isPassword") + if not isPassword: + return {"text": input()} + + return "" - if 'text' in message.keys(): - sys.stdout.write("Error: {}\n".format( message['text'])) - return def main(args): cmd = ["clef", "--stdio-ui"] if len(args) > 0 and args[0] == "test": cmd.extend(["--stdio-ui-test"]) print("cmd: {}".format(" ".join(cmd))) + dispatcher = RPCDispatcher() - dispatcher.register_instance(StdIOHandler(), '') + dispatcher.register_instance(StdIOHandler(), "ui_") + # line buffered - p = subprocess.Popen(cmd, bufsize=1, universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + p = subprocess.Popen( + cmd, + bufsize=1, + universal_newlines=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + ) rpc_server = RPCServer( - PipeTransport(p.stdout, p.stdin), - JSONRPCProtocol(), - dispatcher + PipeTransport(p.stdout, p.stdin), JSONRPCProtocol(), dispatcher ) rpc_server.serve_forever() -if __name__ == '__main__': + +if __name__ == "__main__": main(sys.argv[1:]) diff --git a/cmd/clef/requirements.txt b/cmd/clef/requirements.txt new file mode 100644 index 00000000..5381862e --- /dev/null +++ b/cmd/clef/requirements.txt @@ -0,0 +1 @@ +tinyrpc==1.1.4 diff --git a/cmd/clef/sign_flow.png b/cmd/clef/sign_flow.png index 93ef81a3..e7010ab4 100644 Binary files a/cmd/clef/sign_flow.png and b/cmd/clef/sign_flow.png differ diff --git a/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json b/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json new file mode 100644 index 00000000..c5a13368 --- /dev/null +++ b/cmd/clef/testdata/sign_1559_missing_field_exp_fail.json @@ -0,0 +1,16 @@ +{ + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "gas": "0x333", + "maxFeePerGas": "0x123", + "nonce": "0x0", + "value": "0x10", + "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" + } + ], + "id": 67 +} diff --git a/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json b/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json new file mode 100644 index 00000000..df69231d --- /dev/null +++ b/cmd/clef/testdata/sign_1559_missing_maxfeepergas_exp_fail.json @@ -0,0 +1,16 @@ +{ + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "gas": "0x333", + "maxPriorityFeePerGas": "0x123", + "nonce": "0x0", + "value": "0x10", + "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" + } + ], + "id": 67 +} diff --git a/cmd/clef/testdata/sign_1559_tx.json b/cmd/clef/testdata/sign_1559_tx.json new file mode 100644 index 00000000..29355f6c --- /dev/null +++ b/cmd/clef/testdata/sign_1559_tx.json @@ -0,0 +1,17 @@ +{ + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "to": "0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "gas": "0x333", + "maxPriorityFeePerGas": "0x123", + "maxFeePerGas": "0x123", + "nonce": "0x0", + "value": "0x10", + "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" + } + ], + "id": 67 +} diff --git a/cmd/clef/testdata/sign_bad_checksum_exp_fail.json b/cmd/clef/testdata/sign_bad_checksum_exp_fail.json new file mode 100644 index 00000000..21ba7b3f --- /dev/null +++ b/cmd/clef/testdata/sign_bad_checksum_exp_fail.json @@ -0,0 +1,17 @@ +{ + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from":"0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "to":"0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "gas": "0x333", + "gasPrice": "0x123", + "nonce": "0x0", + "value": "0x10", + "data": + "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" + } + ], + "id": 67 +} diff --git a/cmd/clef/testdata/sign_normal_exp_ok.json b/cmd/clef/testdata/sign_normal_exp_ok.json new file mode 100644 index 00000000..7f3a9202 --- /dev/null +++ b/cmd/clef/testdata/sign_normal_exp_ok.json @@ -0,0 +1,17 @@ +{ + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from":"0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "to":"0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192", + "gas": "0x333", + "gasPrice": "0x123", + "nonce": "0x0", + "value": "0x10", + "data": + "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" + } + ], + "id": 67 +} diff --git a/cmd/clef/tutorial.md b/cmd/clef/tutorial.md index 4453472e..3ea662b5 100644 --- a/cmd/clef/tutorial.md +++ b/cmd/clef/tutorial.md @@ -1,6 +1,6 @@ ## Initializing Clef -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: +First things 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 $ clef init diff --git a/cmd/devp2p/README.md b/cmd/devp2p/README.md new file mode 100644 index 00000000..7f816b60 --- /dev/null +++ b/cmd/devp2p/README.md @@ -0,0 +1,140 @@ +# The devp2p command + +The devp2p command line tool is a utility for low-level peer-to-peer debugging and +protocol development purposes. It can do many things. + +### ENR Decoding + +Use `devp2p enrdump ` to verify and display an Ethereum Node Record. + +### Node Key Management + +The `devp2p key ...` command family deals with node key files. + +Run `devp2p key generate mynode.key` to create a new node key in the `mynode.key` file. + +Run `devp2p key to-enode mynode.key -ip 127.0.0.1 -tcp 30303` to create an enode:// URL +corresponding to the given node key and address information. + +### Maintaining DNS Discovery Node Lists + +The devp2p command can create and publish DNS discovery node lists. + +Run `devp2p dns sign ` to update the signature of a DNS discovery tree. + +Run `devp2p dns sync ` to download a complete DNS discovery tree. + +Run `devp2p dns to-cloudflare ` to publish a tree to CloudFlare DNS. + +Run `devp2p dns to-route53 ` to publish a tree to Amazon Route53. + +You can find more information about these commands in the [DNS Discovery Setup Guide][dns-tutorial]. + +### Node Set Utilities + +There are several commands for working with JSON node set files. These files are generated +by the discovery crawlers and DNS client commands. Node sets also used as the input of the +DNS deployer commands. + +Run `devp2p nodeset info ` to display statistics of a node set. + +Run `devp2p nodeset filter ` to write a new, filtered node +set to standard output. The following filters are supported: + +- `-limit ` limits the output set to N entries, taking the top N nodes by score +- `-ip ` filters nodes by IP subnet +- `-min-age ` filters nodes by 'first seen' time +- `-eth-network ` filters nodes by "eth" ENR entry +- `-les-server` filters nodes by LES server support +- `-snap` filters nodes by snap protocol support + +For example, given a node set in `nodes.json`, you could create a filtered set containing +up to 20 eth mainnet nodes which also support snap sync using this command: + + devp2p nodeset filter nodes.json -eth-network mainnet -snap -limit 20 + +### Discovery v4 Utilities + +The `devp2p discv4 ...` command family deals with the [Node Discovery v4][discv4] +protocol. + +Run `devp2p discv4 ping ` to ping a node. + +Run `devp2p discv4 resolve ` to find the most recent node record of a node in +the DHT. + +Run `devp2p discv4 crawl ` to create or update a JSON node set. + +### Discovery v5 Utilities + +The `devp2p discv5 ...` command family deals with the [Node Discovery v5][discv5] +protocol. This protocol is currently under active development. + +Run `devp2p discv5 ping ` to ping a node. + +Run `devp2p discv5 resolve ` to find the most recent node record of a node in +the discv5 DHT. + +Run `devp2p discv5 listen` to run a Discovery v5 node. + +Run `devp2p discv5 crawl ` to create or update a JSON node set containing +discv5 nodes. + +### Discovery Test Suites + +The devp2p command also contains interactive test suites for Discovery v4 and Discovery +v5. + +To run these tests against your implementation, you need to set up a networking +environment where two separate UDP listening addresses are available on the same machine. +The two listening addresses must also be routed such that they are able to reach the node +you want to test. + +For example, if you want to run the test on your local host, and the node under test is +also on the local host, you need to assign two IP addresses (or a larger range) to your +loopback interface. On macOS, this can be done by executing the following command: + + sudo ifconfig lo0 add 127.0.0.2 + +You can now run either test suite as follows: Start the node under test first, ensuring +that it won't talk to the Internet (i.e. disable bootstrapping). An easy way to prevent +unintended connections to the global DHT is listening on `127.0.0.1`. + +Now get the ENR of your node and store it in the `NODE` environment variable. + +Start the test by running `devp2p discv5 test -listen1 127.0.0.1 -listen2 127.0.0.2 $NODE`. + +### Eth Protocol Test Suite + +The Eth Protocol test suite is a conformance test suite for the [eth protocol][eth]. + +To run the eth protocol test suite against your implementation, the node needs to be initialized as such: + +1. initialize the geth node with the `genesis.json` file contained in the `testdata` directory +2. import the `halfchain.rlp` file in the `testdata` directory +3. run geth with the following flags: +``` +geth --datadir --nodiscover --nat=none --networkid 19763 --verbosity 5 +``` + +Then, run the following command, replacing `` with the enode of the geth node: + ``` + devp2p rlpx eth-test cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json +``` + +Repeat the above process (re-initialising the node) in order to run the Eth Protocol test suite again. + +#### Eth66 Test Suite + +The Eth66 test suite is also a conformance test suite for the eth 66 protocol version specifically. +To run the eth66 protocol test suite, initialize a geth node as described above and run the following command, +replacing `` with the enode of the geth node: + + ``` + devp2p rlpx eth66-test cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json +``` + +[eth]: https://github.com/ethereum/devp2p/blob/master/caps/eth.md +[dns-tutorial]: https://geth.ethereum.org/docs/developers/dns-discovery-setup +[discv4]: https://github.com/ethereum/devp2p/tree/master/discv4.md +[discv5]: https://github.com/ethereum/devp2p/tree/master/discv5/discv5.md diff --git a/cmd/devp2p/crawl.go b/cmd/devp2p/crawl.go new file mode 100644 index 00000000..9259b489 --- /dev/null +++ b/cmd/devp2p/crawl.go @@ -0,0 +1,156 @@ +// 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 ( + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +type crawler struct { + input nodeSet + output nodeSet + disc resolver + iters []enode.Iterator + inputIter enode.Iterator + ch chan *enode.Node + closed chan struct{} + + // settings + revalidateInterval time.Duration +} + +type resolver interface { + RequestENR(*enode.Node) (*enode.Node, error) +} + +func newCrawler(input nodeSet, disc resolver, iters ...enode.Iterator) *crawler { + c := &crawler{ + input: input, + output: make(nodeSet, len(input)), + disc: disc, + iters: iters, + inputIter: enode.IterNodes(input.nodes()), + ch: make(chan *enode.Node), + closed: make(chan struct{}), + } + c.iters = append(c.iters, c.inputIter) + // Copy input to output initially. Any nodes that fail validation + // will be dropped from output during the run. + for id, n := range input { + c.output[id] = n + } + return c +} + +func (c *crawler) run(timeout time.Duration) nodeSet { + var ( + timeoutTimer = time.NewTimer(timeout) + timeoutCh <-chan time.Time + doneCh = make(chan enode.Iterator, len(c.iters)) + liveIters = len(c.iters) + ) + defer timeoutTimer.Stop() + for _, it := range c.iters { + go c.runIterator(doneCh, it) + } + +loop: + for { + select { + case n := <-c.ch: + c.updateNode(n) + case it := <-doneCh: + if it == c.inputIter { + // Enable timeout when we're done revalidating the input nodes. + log.Info("Revalidation of input set is done", "len", len(c.input)) + if timeout > 0 { + timeoutCh = timeoutTimer.C + } + } + if liveIters--; liveIters == 0 { + break loop + } + case <-timeoutCh: + break loop + } + } + + close(c.closed) + for _, it := range c.iters { + it.Close() + } + for ; liveIters > 0; liveIters-- { + <-doneCh + } + return c.output +} + +func (c *crawler) runIterator(done chan<- enode.Iterator, it enode.Iterator) { + defer func() { done <- it }() + for it.Next() { + select { + case c.ch <- it.Node(): + case <-c.closed: + return + } + } +} + +func (c *crawler) updateNode(n *enode.Node) { + node, ok := c.output[n.ID()] + + // Skip validation of recently-seen nodes. + if ok && time.Since(node.LastCheck) < c.revalidateInterval { + return + } + + // Request the node record. + nn, err := c.disc.RequestENR(n) + node.LastCheck = truncNow() + if err != nil { + if node.Score == 0 { + // Node doesn't implement EIP-868. + log.Debug("Skipping node", "id", n.ID()) + return + } + node.Score /= 2 + } else { + node.N = nn + node.Seq = nn.Seq() + node.Score++ + if node.FirstResponse.IsZero() { + node.FirstResponse = node.LastCheck + } + node.LastResponse = node.LastCheck + } + + // Store/update node in output set. + if node.Score <= 0 { + log.Info("Removing node", "id", n.ID()) + delete(c.output, n.ID()) + } else { + log.Info("Updating node", "id", n.ID(), "seq", n.Seq(), "score", node.Score) + c.output[n.ID()] = node + } +} + +func truncNow() time.Time { + return time.Now().UTC().Truncate(1 * time.Second) +} diff --git a/cmd/devp2p/discv4cmd.go b/cmd/devp2p/discv4cmd.go index 9bee736d..9d35880b 100644 --- a/cmd/devp2p/discv4cmd.go +++ b/cmd/devp2p/discv4cmd.go @@ -19,55 +19,119 @@ package main import ( "fmt" "net" - "sort" "strings" "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/discover" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "github.com/urfave/cli/v2" ) var ( - discv4Command = cli.Command{ + discv4Command = &cli.Command{ Name: "discv4", Usage: "Node Discovery v4 tools", - Subcommands: []cli.Command{ + Subcommands: []*cli.Command{ discv4PingCommand, discv4RequestRecordCommand, discv4ResolveCommand, + discv4ResolveJSONCommand, + discv4CrawlCommand, + discv4TestCommand, }, } - discv4PingCommand = cli.Command{ - Name: "ping", - Usage: "Sends ping to a node", - Action: discv4Ping, + discv4PingCommand = &cli.Command{ + Name: "ping", + Usage: "Sends ping to a node", + Action: discv4Ping, + ArgsUsage: "", + Flags: v4NodeFlags, } - discv4RequestRecordCommand = cli.Command{ - Name: "requestenr", - Usage: "Requests a node record using EIP-868 enrRequest", - Action: discv4RequestRecord, + discv4RequestRecordCommand = &cli.Command{ + Name: "requestenr", + Usage: "Requests a node record using EIP-868 enrRequest", + Action: discv4RequestRecord, + ArgsUsage: "", + Flags: v4NodeFlags, } - discv4ResolveCommand = cli.Command{ - Name: "resolve", - Usage: "Finds a node in the DHT", - Action: discv4Resolve, - Flags: []cli.Flag{bootnodesFlag}, + discv4ResolveCommand = &cli.Command{ + Name: "resolve", + Usage: "Finds a node in the DHT", + Action: discv4Resolve, + ArgsUsage: "", + Flags: v4NodeFlags, + } + discv4ResolveJSONCommand = &cli.Command{ + Name: "resolve-json", + Usage: "Re-resolves nodes in a nodes.json file", + Action: discv4ResolveJSON, + Flags: v4NodeFlags, + ArgsUsage: "", + } + discv4CrawlCommand = &cli.Command{ + Name: "crawl", + Usage: "Updates a nodes.json file with random nodes found in the DHT", + Action: discv4Crawl, + Flags: flags.Merge(v4NodeFlags, []cli.Flag{crawlTimeoutFlag}), + } + discv4TestCommand = &cli.Command{ + Name: "test", + Usage: "Runs tests against a node", + Action: discv4Test, + Flags: []cli.Flag{ + remoteEnodeFlag, + testPatternFlag, + testTAPFlag, + testListen1Flag, + testListen2Flag, + }, + } +) + +var ( + bootnodesFlag = &cli.StringFlag{ + Name: "bootnodes", + Usage: "Comma separated nodes used for bootstrapping", + } + nodekeyFlag = &cli.StringFlag{ + Name: "nodekey", + Usage: "Hex-encoded node key", + } + nodedbFlag = &cli.StringFlag{ + Name: "nodedb", + Usage: "Nodes database location", + } + listenAddrFlag = &cli.StringFlag{ + Name: "addr", + Usage: "Listening address", + } + crawlTimeoutFlag = &cli.DurationFlag{ + Name: "timeout", + Usage: "Time limit for the crawl.", + Value: 30 * time.Minute, + } + remoteEnodeFlag = &cli.StringFlag{ + Name: "remote", + Usage: "Enode of the remote node under test", + EnvVars: []string{"REMOTE_ENODE"}, } ) -var bootnodesFlag = cli.StringFlag{ - Name: "bootnodes", - Usage: "Comma separated nodes used for bootstrapping", +var v4NodeFlags = []cli.Flag{ + bootnodesFlag, + nodekeyFlag, + nodedbFlag, + listenAddrFlag, } func discv4Ping(ctx *cli.Context) error { - n, disc, err := getNodeArgAndStartV4(ctx) - if err != nil { - return err - } + n := getNodeArg(ctx) + disc := startV4(ctx) defer disc.Close() start := time.Now() @@ -79,10 +143,8 @@ func discv4Ping(ctx *cli.Context) error { } func discv4RequestRecord(ctx *cli.Context) error { - n, disc, err := getNodeArgAndStartV4(ctx) - if err != nil { - return err - } + n := getNodeArg(ctx) + disc := startV4(ctx) defer disc.Close() respN, err := disc.RequestENR(n) @@ -94,39 +156,143 @@ func discv4RequestRecord(ctx *cli.Context) error { } func discv4Resolve(ctx *cli.Context) error { - n, disc, err := getNodeArgAndStartV4(ctx) - if err != nil { - return err - } + n := getNodeArg(ctx) + disc := startV4(ctx) defer disc.Close() fmt.Println(disc.Resolve(n).String()) return nil } -func getNodeArgAndStartV4(ctx *cli.Context) (*enode.Node, *discover.UDPv4, error) { - if ctx.NArg() != 1 { - return nil, nil, fmt.Errorf("missing node as command-line argument") +func discv4ResolveJSON(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + nodesFile := ctx.Args().Get(0) + inputSet := make(nodeSet) + if common.FileExist(nodesFile) { + inputSet = loadNodesJSON(nodesFile) } - n, err := parseNode(ctx.Args()[0]) + + // Add extra nodes from command line arguments. + var nodeargs []*enode.Node + for i := 1; i < ctx.NArg(); i++ { + n, err := parseNode(ctx.Args().Get(i)) + if err != nil { + exit(err) + } + nodeargs = append(nodeargs, n) + } + + // Run the crawler. + disc := startV4(ctx) + defer disc.Close() + c := newCrawler(inputSet, disc, enode.IterNodes(nodeargs)) + c.revalidateInterval = 0 + output := c.run(0) + writeNodesJSON(nodesFile, output) + return nil +} + +func discv4Crawl(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + nodesFile := ctx.Args().First() + var inputSet nodeSet + if common.FileExist(nodesFile) { + inputSet = loadNodesJSON(nodesFile) + } + + disc := startV4(ctx) + defer disc.Close() + c := newCrawler(inputSet, disc, disc.RandomNodes()) + c.revalidateInterval = 10 * time.Minute + output := c.run(ctx.Duration(crawlTimeoutFlag.Name)) + writeNodesJSON(nodesFile, output) + return nil +} + +// discv4Test runs the protocol test suite. +func discv4Test(ctx *cli.Context) error { + // Configure test package globals. + if !ctx.IsSet(remoteEnodeFlag.Name) { + return fmt.Errorf("Missing -%v", remoteEnodeFlag.Name) + } + v4test.Remote = ctx.String(remoteEnodeFlag.Name) + v4test.Listen1 = ctx.String(testListen1Flag.Name) + v4test.Listen2 = ctx.String(testListen2Flag.Name) + return runTests(ctx, v4test.AllTests) +} + +// startV4 starts an ephemeral discovery V4 node. +func startV4(ctx *cli.Context) *discover.UDPv4 { + ln, config := makeDiscoveryConfig(ctx) + socket := listen(ln, ctx.String(listenAddrFlag.Name)) + disc, err := discover.ListenV4(socket, ln, config) if err != nil { - return nil, nil, err + exit(err) } - var bootnodes []*enode.Node + return disc +} + +func makeDiscoveryConfig(ctx *cli.Context) (*enode.LocalNode, discover.Config) { + var cfg discover.Config + + if ctx.IsSet(nodekeyFlag.Name) { + key, err := crypto.HexToECDSA(ctx.String(nodekeyFlag.Name)) + if err != nil { + exit(fmt.Errorf("-%s: %v", nodekeyFlag.Name, err)) + } + cfg.PrivateKey = key + } else { + cfg.PrivateKey, _ = crypto.GenerateKey() + } + if commandHasFlag(ctx, bootnodesFlag) { - bootnodes, err = parseBootnodes(ctx) + bn, err := parseBootnodes(ctx) if err != nil { - return nil, nil, err + exit(err) } + cfg.Bootnodes = bn + } + + dbpath := ctx.String(nodedbFlag.Name) + db, err := enode.OpenDB(dbpath) + if err != nil { + exit(err) + } + ln := enode.NewLocalNode(db, cfg.PrivateKey) + return ln, cfg +} + +func listen(ln *enode.LocalNode, addr string) *net.UDPConn { + if addr == "" { + addr = "0.0.0.0:0" + } + socket, err := net.ListenPacket("udp4", addr) + if err != nil { + exit(err) } - disc, err := startV4(bootnodes) - return n, disc, err + usocket := socket.(*net.UDPConn) + uaddr := socket.LocalAddr().(*net.UDPAddr) + if uaddr.IP.IsUnspecified() { + ln.SetFallbackIP(net.IP{127, 0, 0, 1}) + } else { + ln.SetFallbackIP(uaddr.IP) + } + ln.SetFallbackUDP(uaddr.Port) + return usocket } func parseBootnodes(ctx *cli.Context) ([]*enode.Node, error) { s := params.RinkebyBootnodes if ctx.IsSet(bootnodesFlag.Name) { - s = strings.Split(ctx.String(bootnodesFlag.Name), ",") + input := ctx.String(bootnodesFlag.Name) + if input == "" { + return nil, nil + } + s = strings.Split(input, ",") } nodes := make([]*enode.Node, len(s)) var err error @@ -138,29 +304,3 @@ func parseBootnodes(ctx *cli.Context) ([]*enode.Node, error) { } return nodes, nil } - -// 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() -} - -// startV4 starts an ephemeral discovery V4 node. -func startV4(bootnodes []*enode.Node) (*discover.UDPv4, error) { - var cfg discover.Config - cfg.Bootnodes = bootnodes - 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 { - return nil, err - } - addr := socket.LocalAddr().(*net.UDPAddr) - ln.SetFallbackIP(net.IP{127, 0, 0, 1}) - ln.SetFallbackUDP(addr.Port) - return discover.ListenUDP(socket, ln, cfg) -} diff --git a/cmd/devp2p/discv5cmd.go b/cmd/devp2p/discv5cmd.go new file mode 100644 index 00000000..29819603 --- /dev/null +++ b/cmd/devp2p/discv5cmd.go @@ -0,0 +1,146 @@ +// Copyright 2020 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" + "time" + + "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v5test" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/urfave/cli/v2" +) + +var ( + discv5Command = &cli.Command{ + Name: "discv5", + Usage: "Node Discovery v5 tools", + Subcommands: []*cli.Command{ + discv5PingCommand, + discv5ResolveCommand, + discv5CrawlCommand, + discv5TestCommand, + discv5ListenCommand, + }, + } + discv5PingCommand = &cli.Command{ + Name: "ping", + Usage: "Sends ping to a node", + Action: discv5Ping, + } + discv5ResolveCommand = &cli.Command{ + Name: "resolve", + Usage: "Finds a node in the DHT", + Action: discv5Resolve, + Flags: []cli.Flag{bootnodesFlag}, + } + discv5CrawlCommand = &cli.Command{ + Name: "crawl", + Usage: "Updates a nodes.json file with random nodes found in the DHT", + Action: discv5Crawl, + Flags: []cli.Flag{bootnodesFlag, crawlTimeoutFlag}, + } + discv5TestCommand = &cli.Command{ + Name: "test", + Usage: "Runs protocol tests against a node", + Action: discv5Test, + Flags: []cli.Flag{ + testPatternFlag, + testTAPFlag, + testListen1Flag, + testListen2Flag, + }, + } + discv5ListenCommand = &cli.Command{ + Name: "listen", + Usage: "Runs a node", + Action: discv5Listen, + Flags: []cli.Flag{ + bootnodesFlag, + nodekeyFlag, + nodedbFlag, + listenAddrFlag, + }, + } +) + +func discv5Ping(ctx *cli.Context) error { + n := getNodeArg(ctx) + disc := startV5(ctx) + defer disc.Close() + + fmt.Println(disc.Ping(n)) + return nil +} + +func discv5Resolve(ctx *cli.Context) error { + n := getNodeArg(ctx) + disc := startV5(ctx) + defer disc.Close() + + fmt.Println(disc.Resolve(n)) + return nil +} + +func discv5Crawl(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + nodesFile := ctx.Args().First() + var inputSet nodeSet + if common.FileExist(nodesFile) { + inputSet = loadNodesJSON(nodesFile) + } + + disc := startV5(ctx) + defer disc.Close() + c := newCrawler(inputSet, disc, disc.RandomNodes()) + c.revalidateInterval = 10 * time.Minute + output := c.run(ctx.Duration(crawlTimeoutFlag.Name)) + writeNodesJSON(nodesFile, output) + return nil +} + +// discv5Test runs the protocol test suite. +func discv5Test(ctx *cli.Context) error { + suite := &v5test.Suite{ + Dest: getNodeArg(ctx), + Listen1: ctx.String(testListen1Flag.Name), + Listen2: ctx.String(testListen2Flag.Name), + } + return runTests(ctx, suite.AllTests()) +} + +func discv5Listen(ctx *cli.Context) error { + disc := startV5(ctx) + defer disc.Close() + + fmt.Println(disc.Self()) + select {} +} + +// startV5 starts an ephemeral discovery v5 node. +func startV5(ctx *cli.Context) *discover.UDPv5 { + ln, config := makeDiscoveryConfig(ctx) + socket := listen(ln, ctx.String(listenAddrFlag.Name)) + disc, err := discover.ListenV5(socket, ln, config) + if err != nil { + exit(err) + } + return disc +} diff --git a/cmd/devp2p/dns_cloudflare.go b/cmd/devp2p/dns_cloudflare.go new file mode 100644 index 00000000..92c6faf2 --- /dev/null +++ b/cmd/devp2p/dns_cloudflare.go @@ -0,0 +1,165 @@ +// 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 ( + "context" + "fmt" + "strings" + + "github.com/cloudflare/cloudflare-go" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/urfave/cli/v2" +) + +var ( + cloudflareTokenFlag = &cli.StringFlag{ + Name: "token", + Usage: "CloudFlare API token", + EnvVars: []string{"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(context.Background(), 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(context.Background(), 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 := rootTTL + if path != name { + ttl = treeNodeTTLCloudflare // Max TTL permitted by Cloudflare + } + record := cloudflare.DNSRecord{Type: "TXT", Name: path, Content: val, TTL: ttl} + _, err = c.CreateDNSRecord(context.Background(), c.zoneID, record) + } 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(context.Background(), c.zoneID, old.ID, old) + } else { + log.Debug(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(context.Background(), c.zoneID, entry.ID); err != nil { + return fmt.Errorf("failed to delete %s: %v", path, err) + } + } + return nil +} diff --git a/cmd/devp2p/dns_route53.go b/cmd/devp2p/dns_route53.go new file mode 100644 index 00000000..4aab0856 --- /dev/null +++ b/cmd/devp2p/dns_route53.go @@ -0,0 +1,408 @@ +// 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 ( + "context" + "errors" + "fmt" + "sort" + "strconv" + "strings" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/aws-sdk-go-v2/service/route53" + "github.com/aws/aws-sdk-go-v2/service/route53/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/urfave/cli/v2" +) + +const ( + // Route53 limits change sets to 32k of 'RDATA size'. Change sets are also limited to + // 1000 items. UPSERTs count double. + // https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests-changeresourcerecordsets + route53ChangeSizeLimit = 32000 + route53ChangeCountLimit = 1000 + maxRetryLimit = 60 +) + +var ( + route53AccessKeyFlag = &cli.StringFlag{ + Name: "access-key-id", + Usage: "AWS Access Key ID", + EnvVars: []string{"AWS_ACCESS_KEY_ID"}, + } + route53AccessSecretFlag = &cli.StringFlag{ + Name: "access-key-secret", + Usage: "AWS Access Key Secret", + EnvVars: []string{"AWS_SECRET_ACCESS_KEY"}, + } + route53ZoneIDFlag = &cli.StringFlag{ + Name: "zone-id", + Usage: "Route53 Zone ID", + } + route53RegionFlag = &cli.StringFlag{ + Name: "aws-region", + Usage: "AWS Region", + Value: "eu-central-1", + } +) + +type route53Client struct { + api *route53.Client + zoneID string +} + +type recordSet struct { + values []string + ttl int64 +} + +// newRoute53Client sets up a Route53 API client from command line flags. +func newRoute53Client(ctx *cli.Context) *route53Client { + akey := ctx.String(route53AccessKeyFlag.Name) + asec := ctx.String(route53AccessSecretFlag.Name) + if akey == "" || asec == "" { + exit(fmt.Errorf("need Route53 Access Key ID and secret to proceed")) + } + creds := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(akey, asec, "")) + cfg, err := config.LoadDefaultConfig(context.Background(), config.WithCredentialsProvider(creds)) + if err != nil { + exit(fmt.Errorf("can't initialize AWS configuration: %v", err)) + } + cfg.Region = ctx.String(route53RegionFlag.Name) + return &route53Client{ + api: route53.NewFromConfig(cfg), + zoneID: ctx.String(route53ZoneIDFlag.Name), + } +} + +// deploy uploads the given tree to Route53. +func (c *route53Client) deploy(name string, t *dnsdisc.Tree) error { + if err := c.checkZone(name); err != nil { + return err + } + + // Compute DNS changes. + existing, err := c.collectRecords(name) + if err != nil { + return err + } + log.Info(fmt.Sprintf("Found %d TXT records", len(existing))) + records := t.ToTXT(name) + changes := c.computeChanges(name, records, existing) + + // Submit to API. + comment := fmt.Sprintf("enrtree update of %s at seq %d", name, t.Seq()) + return c.submitChanges(changes, comment) +} + +// deleteDomain removes all TXT records of the given domain. +func (c *route53Client) deleteDomain(name string) error { + if err := c.checkZone(name); err != nil { + return err + } + + // Compute DNS changes. + existing, err := c.collectRecords(name) + if err != nil { + return err + } + log.Info(fmt.Sprintf("Found %d TXT records", len(existing))) + changes := makeDeletionChanges(existing, nil) + + // Submit to API. + comment := "enrtree delete of " + name + return c.submitChanges(changes, comment) +} + +// submitChanges submits the given DNS changes to Route53. +func (c *route53Client) submitChanges(changes []types.Change, comment string) error { + if len(changes) == 0 { + log.Info("No DNS changes needed") + return nil + } + + var err error + batches := splitChanges(changes, route53ChangeSizeLimit, route53ChangeCountLimit) + changesToCheck := make([]*route53.ChangeResourceRecordSetsOutput, len(batches)) + for i, changes := range batches { + log.Info(fmt.Sprintf("Submitting %d changes to Route53", len(changes))) + batch := &types.ChangeBatch{ + Changes: changes, + Comment: aws.String(fmt.Sprintf("%s (%d/%d)", comment, i+1, len(batches))), + } + req := &route53.ChangeResourceRecordSetsInput{HostedZoneId: &c.zoneID, ChangeBatch: batch} + changesToCheck[i], err = c.api.ChangeResourceRecordSets(context.TODO(), req) + if err != nil { + return err + } + } + + // Wait for all change batches to propagate. + for _, change := range changesToCheck { + log.Info(fmt.Sprintf("Waiting for change request %s", *change.ChangeInfo.Id)) + wreq := &route53.GetChangeInput{Id: change.ChangeInfo.Id} + var count int + for { + wresp, err := c.api.GetChange(context.TODO(), wreq) + if err != nil { + return err + } + + count++ + + if wresp.ChangeInfo.Status == types.ChangeStatusInsync || count >= maxRetryLimit { + break + } + + time.Sleep(30 * time.Second) + } + } + return nil +} + +// checkZone verifies zone information for the given domain. +func (c *route53Client) checkZone(name string) (err error) { + if c.zoneID == "" { + c.zoneID, err = c.findZoneID(name) + } + return err +} + +// findZoneID searches for the Zone ID containing the given domain. +func (c *route53Client) findZoneID(name string) (string, error) { + log.Info(fmt.Sprintf("Finding Route53 Zone ID for %s", name)) + var req route53.ListHostedZonesByNameInput + for { + resp, err := c.api.ListHostedZonesByName(context.TODO(), &req) + if err != nil { + return "", err + } + for _, zone := range resp.HostedZones { + if isSubdomain(name, *zone.Name) { + return *zone.Id, nil + } + } + if !resp.IsTruncated { + break + } + req.DNSName = resp.NextDNSName + req.HostedZoneId = resp.NextHostedZoneId + } + return "", errors.New("can't find zone ID for " + name) +} + +// computeChanges creates DNS changes for the given set of DNS discovery records. +// The 'existing' arg is the set of records that already exist on Route53. +func (c *route53Client) computeChanges(name string, records map[string]string, existing map[string]recordSet) []types.Change { + // Convert all names to lowercase. + lrecords := make(map[string]string, len(records)) + for name, r := range records { + lrecords[strings.ToLower(name)] = r + } + records = lrecords + + var changes []types.Change + for path, newValue := range records { + prevRecords, exists := existing[path] + prevValue := strings.Join(prevRecords.values, "") + + // prevValue contains quoted strings, encode newValue to compare. + newValue = splitTXT(newValue) + + // Assign TTL. + ttl := int64(rootTTL) + if path != name { + ttl = int64(treeNodeTTL) + } + + if !exists { + // Entry is unknown, push a new one + log.Info(fmt.Sprintf("Creating %s = %s", path, newValue)) + changes = append(changes, newTXTChange("CREATE", path, ttl, newValue)) + } else if prevValue != newValue || prevRecords.ttl != ttl { + // Entry already exists, only change its content. + log.Info(fmt.Sprintf("Updating %s from %s to %s", path, prevValue, newValue)) + changes = append(changes, newTXTChange("UPSERT", path, ttl, newValue)) + } else { + log.Debug(fmt.Sprintf("Skipping %s = %s", path, newValue)) + } + } + + // Iterate over the old records and delete anything stale. + changes = append(changes, makeDeletionChanges(existing, records)...) + + // Ensure changes are in the correct order. + sortChanges(changes) + return changes +} + +// makeDeletionChanges creates record changes which delete all records not contained in 'keep'. +func makeDeletionChanges(records map[string]recordSet, keep map[string]string) []types.Change { + var changes []types.Change + for path, set := range records { + if _, ok := keep[path]; ok { + continue + } + log.Info(fmt.Sprintf("Deleting %s = %s", path, strings.Join(set.values, ""))) + changes = append(changes, newTXTChange("DELETE", path, set.ttl, set.values...)) + } + return changes +} + +// sortChanges ensures DNS changes are in leaf-added -> root-changed -> leaf-deleted order. +func sortChanges(changes []types.Change) { + score := map[string]int{"CREATE": 1, "UPSERT": 2, "DELETE": 3} + sort.Slice(changes, func(i, j int) bool { + if changes[i].Action == changes[j].Action { + return *changes[i].ResourceRecordSet.Name < *changes[j].ResourceRecordSet.Name + } + return score[string(changes[i].Action)] < score[string(changes[j].Action)] + }) +} + +// splitChanges splits up DNS changes such that each change batch +// is smaller than the given RDATA limit. +func splitChanges(changes []types.Change, sizeLimit, countLimit int) [][]types.Change { + var ( + batches [][]types.Change + batchSize int + batchCount int + ) + for _, ch := range changes { + // Start new batch if this change pushes the current one over the limit. + count := changeCount(ch) + size := changeSize(ch) * count + overSize := batchSize+size > sizeLimit + overCount := batchCount+count > countLimit + if len(batches) == 0 || overSize || overCount { + batches = append(batches, nil) + batchSize = 0 + batchCount = 0 + } + batches[len(batches)-1] = append(batches[len(batches)-1], ch) + batchSize += size + batchCount += count + } + return batches +} + +// changeSize returns the RDATA size of a DNS change. +func changeSize(ch types.Change) int { + size := 0 + for _, rr := range ch.ResourceRecordSet.ResourceRecords { + if rr.Value != nil { + size += len(*rr.Value) + } + } + return size +} + +func changeCount(ch types.Change) int { + if ch.Action == types.ChangeActionUpsert { + return 2 + } + return 1 +} + +// collectRecords collects all TXT records below the given name. +func (c *route53Client) collectRecords(name string) (map[string]recordSet, error) { + var req route53.ListResourceRecordSetsInput + req.HostedZoneId = &c.zoneID + existing := make(map[string]recordSet) + for page := 0; ; page++ { + log.Info("Loading existing TXT records", "name", name, "zone", c.zoneID, "page", page) + resp, err := c.api.ListResourceRecordSets(context.TODO(), &req) + if err != nil { + return existing, err + } + for _, set := range resp.ResourceRecordSets { + if !isSubdomain(*set.Name, name) || set.Type != types.RRTypeTxt { + continue + } + s := recordSet{ttl: *set.TTL} + for _, rec := range set.ResourceRecords { + s.values = append(s.values, *rec.Value) + } + name := strings.TrimSuffix(*set.Name, ".") + existing[name] = s + } + + if !resp.IsTruncated { + break + } + // Set the cursor to the next batch. From the AWS docs: + // + // To display the next page of results, get the values of NextRecordName, + // NextRecordType, and NextRecordIdentifier (if any) from the response. Then submit + // another ListResourceRecordSets request, and specify those values for + // StartRecordName, StartRecordType, and StartRecordIdentifier. + req.StartRecordIdentifier = resp.NextRecordIdentifier + req.StartRecordName = resp.NextRecordName + req.StartRecordType = resp.NextRecordType + } + + return existing, nil +} + +// newTXTChange creates a change to a TXT record. +func newTXTChange(action, name string, ttl int64, values ...string) types.Change { + r := types.ResourceRecordSet{ + Type: types.RRTypeTxt, + Name: &name, + TTL: &ttl, + } + var rrs []types.ResourceRecord + for _, val := range values { + var rr types.ResourceRecord + rr.Value = aws.String(val) + rrs = append(rrs, rr) + } + + r.ResourceRecords = rrs + + return types.Change{ + Action: types.ChangeAction(action), + ResourceRecordSet: &r, + } +} + +// isSubdomain returns true if name is a subdomain of domain. +func isSubdomain(name, domain string) bool { + domain = strings.TrimSuffix(domain, ".") + name = strings.TrimSuffix(name, ".") + return strings.HasSuffix("."+name, "."+domain) +} + +// splitTXT splits value into a list of quoted 255-character strings. +func splitTXT(value string) string { + var result strings.Builder + for len(value) > 0 { + rlen := len(value) + if rlen > 253 { + rlen = 253 + } + result.WriteString(strconv.Quote(value[:rlen])) + value = value[rlen:] + } + return result.String() +} diff --git a/cmd/devp2p/dns_route53_test.go b/cmd/devp2p/dns_route53_test.go new file mode 100644 index 00000000..e6eb516e --- /dev/null +++ b/cmd/devp2p/dns_route53_test.go @@ -0,0 +1,190 @@ +// Copyright 2020 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 ( + "reflect" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/route53/types" +) + +// This test checks that computeChanges/splitChanges create DNS changes in +// leaf-added -> root-changed -> leaf-deleted order. +func TestRoute53ChangeSort(t *testing.T) { + testTree0 := map[string]recordSet{ + "2kfjogvxdqtxxugbh7gs7naaai.n": {ttl: 3333, values: []string{ + `"enr:-HW4QO1ml1DdXLeZLsUxewnthhUy8eROqkDyoMTyavfks9JlYQIlMFEUoM78PovJDPQrAkrb3LRJ-""vtrymDguKCOIAWAgmlkgnY0iXNlY3AyNTZrMaEDffaGfJzgGhUif1JqFruZlYmA31HzathLSWxfbq_QoQ4"`, + }}, + "fdxn3sn67na5dka4j2gok7bvqi.n": {ttl: treeNodeTTL, values: []string{`"enrtree-branch:"`}}, + "n": {ttl: rootTTL, values: []string{`"enrtree-root:v1 e=2KFJOGVXDQTXXUGBH7GS7NAAAI l=FDXN3SN67NA5DKA4J2GOK7BVQI seq=0 sig=v_-J_q_9ICQg5ztExFvLQhDBGMb0lZPJLhe3ts9LAcgqhOhtT3YFJsl8BWNDSwGtamUdR-9xl88_w-X42SVpjwE"`}}, + } + + testTree1 := map[string]string{ + "n": "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA", + "C7HRFPF3BLGF3YR4DY5KX3SMBE.n": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", + "JWXYDBPXYWG6FX3GMDIBFA6CJ4.n": "enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24", + "2XS2367YHAXJFGLZHVAWLQD4ZY.n": "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA", + "H4FHT4B454P6UXFD7JCYQ5PWDY.n": "enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI", + "MHTDO6TMUBRIA2XWG5LUDACK24.n": "enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o", + } + + wantChanges := []types.Change{ + { + Action: "CREATE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("2xs2367yhaxjfglzhvawlqd4zy.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + { + Action: "CREATE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("c7hrfpf3blgf3yr4dy5kx3smbe.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + { + Action: "CREATE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("h4fht4b454p6uxfd7jcyq5pwdy.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + { + Action: "CREATE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("jwxydbpxywg6fx3gmdibfa6cj4.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + { + Action: "CREATE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("mhtdo6tmubria2xwg5ludack24.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + { + Action: "UPSERT", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA"`), + }}, + TTL: ip(rootTTL), + Type: "TXT", + }, + }, + { + Action: "DELETE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("2kfjogvxdqtxxugbh7gs7naaai.n"), + ResourceRecords: []types.ResourceRecord{ + {Value: sp(`"enr:-HW4QO1ml1DdXLeZLsUxewnthhUy8eROqkDyoMTyavfks9JlYQIlMFEUoM78PovJDPQrAkrb3LRJ-""vtrymDguKCOIAWAgmlkgnY0iXNlY3AyNTZrMaEDffaGfJzgGhUif1JqFruZlYmA31HzathLSWxfbq_QoQ4"`)}, + }, + TTL: ip(3333), + Type: "TXT", + }, + }, + { + Action: "DELETE", + ResourceRecordSet: &types.ResourceRecordSet{ + Name: sp("fdxn3sn67na5dka4j2gok7bvqi.n"), + ResourceRecords: []types.ResourceRecord{{ + Value: sp(`"enrtree-branch:"`), + }}, + TTL: ip(treeNodeTTL), + Type: "TXT", + }, + }, + } + + var client route53Client + changes := client.computeChanges("n", testTree1, testTree0) + if !reflect.DeepEqual(changes, wantChanges) { + t.Fatalf("wrong changes (got %d, want %d)", len(changes), len(wantChanges)) + } + + // Check splitting according to size. + wantSplit := [][]types.Change{ + wantChanges[:4], + wantChanges[4:6], + wantChanges[6:], + } + split := splitChanges(changes, 600, 4000) + if !reflect.DeepEqual(split, wantSplit) { + t.Fatalf("wrong split batches: got %d, want %d", len(split), len(wantSplit)) + } + + // Check splitting according to count. + wantSplit = [][]types.Change{ + wantChanges[:5], + wantChanges[5:], + } + split = splitChanges(changes, 10000, 6) + if !reflect.DeepEqual(split, wantSplit) { + t.Fatalf("wrong split batches: got %d, want %d", len(split), len(wantSplit)) + } +} + +// This test checks that computeChanges compares the quoted value of the records correctly. +func TestRoute53NoChange(t *testing.T) { + // Existing record set. + testTree0 := map[string]recordSet{ + "n": {ttl: rootTTL, values: []string{ + `"enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA"`, + }}, + "2xs2367yhaxjfglzhvawlqd4zy.n": {ttl: treeNodeTTL, values: []string{ + `"enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA"`, + }}, + } + // New set. + testTree1 := map[string]string{ + "n": "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA", + "2XS2367YHAXJFGLZHVAWLQD4ZY.n": "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA", + } + + var client route53Client + changes := client.computeChanges("n", testTree1, testTree0) + if len(changes) > 0 { + t.Fatalf("wrong changes (got %d, want 0)", len(changes)) + } +} + +func sp(s string) *string { return &s } +func ip(i int64) *int64 { return &i } diff --git a/cmd/devp2p/dnscmd.go b/cmd/devp2p/dnscmd.go new file mode 100644 index 00000000..58eb6e8d --- /dev/null +++ b/cmd/devp2p/dnscmd.go @@ -0,0 +1,416 @@ +// 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 ( + "crypto/ecdsa" + "encoding/json" + "fmt" + "os" + "path/filepath" + "time" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/urfave/cli/v2" +) + +var ( + dnsCommand = &cli.Command{ + Name: "dns", + Usage: "DNS Discovery Commands", + Subcommands: []*cli.Command{ + dnsSyncCommand, + dnsSignCommand, + dnsTXTCommand, + dnsCloudflareCommand, + dnsRoute53Command, + dnsRoute53NukeCommand, + }, + } + 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}, + } + dnsRoute53Command = &cli.Command{ + Name: "to-route53", + Usage: "Deploy DNS TXT records to Amazon Route53", + ArgsUsage: "", + Action: dnsToRoute53, + Flags: []cli.Flag{ + route53AccessKeyFlag, + route53AccessSecretFlag, + route53ZoneIDFlag, + route53RegionFlag, + }, + } + dnsRoute53NukeCommand = &cli.Command{ + Name: "nuke-route53", + Usage: "Deletes DNS TXT records of a subdomain on Amazon Route53", + ArgsUsage: "", + Action: dnsNukeRoute53, + Flags: []cli.Flag{ + route53AccessKeyFlag, + route53AccessSecretFlag, + route53ZoneIDFlag, + route53RegionFlag, + }, + } +) + +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", + } +) + +const ( + rootTTL = 30 * 60 // 30 min + treeNodeTTL = 4 * 7 * 24 * 60 * 60 // 4 weeks + treeNodeTTLCloudflare = 24 * 60 * 60 // 1 day +) + +// 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() + writeTreeMetadata(outdir, def) + writeTreeNodes(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() + writeTreeMetadata(defdir, def) + return nil +} + +// directoryName returns the directory name of the given path. +// For example, when dir is "foo/bar", it returns "bar". +// When dir is ".", and the working directory is "example/foo", it returns "foo". +func directoryName(dir string) string { + abs, err := filepath.Abs(dir) + if err != nil { + exit(err) + } + return filepath.Base(abs) +} + +// dnsToTXT performs 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 performs 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) +} + +// dnsToRoute53 performs dnsRoute53Command. +func dnsToRoute53(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 := newRoute53Client(ctx) + return client.deploy(domain, t) +} + +// dnsNukeRoute53 performs dnsRoute53NukeCommand. +func dnsNukeRoute53(ctx *cli.Context) error { + if ctx.NArg() != 1 { + return fmt.Errorf("need domain name as argument") + } + client := newRoute53Client(ctx) + return client.deleteDomain(ctx.Args().First()) +} + +// loadSigningKey loads a private key in Ethereum keystore format. +func loadSigningKey(keyfile string) *ecdsa.PrivateKey { + keyjson, err := os.ReadFile(keyfile) + if err != nil { + exit(fmt.Errorf("failed to read the keyfile at '%s': %v", keyfile, err)) + } + password, _ := prompt.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) + } + return dnsdisc.NewClient(cfg) +} + +// 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 +} + +// writeTreeMetadata writes a DNS node tree metadata file to the given directory. +func writeTreeMetadata(directory string, def *dnsDefinition) { + metaJSON, err := json.MarshalIndent(&def.Meta, "", jsonIndent) + if err != nil { + exit(err) + } + if err := os.Mkdir(directory, 0744); err != nil && !os.IsExist(err) { + exit(err) + } + metaFile, _ := treeDefinitionFiles(directory) + if err := os.WriteFile(metaFile, metaJSON, 0644); err != nil { + exit(err) + } +} + +func writeTreeNodes(directory string, def *dnsDefinition) { + ns := make(nodeSet, len(def.Nodes)) + ns.add(def.Nodes...) + _, nodesFile := treeDefinitionFiles(directory) + writeNodesJSON(nodesFile, ns) +} + +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 := os.WriteFile(file, txtJSON, 0644); err != nil { + exit(err) + } +} diff --git a/cmd/devp2p/enrcmd.go b/cmd/devp2p/enrcmd.go index b28b2677..21104371 100644 --- a/cmd/devp2p/enrcmd.go +++ b/cmd/devp2p/enrcmd.go @@ -21,46 +21,48 @@ import ( "encoding/base64" "encoding/hex" "fmt" - "io/ioutil" + "io" "net" "os" "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" + "github.com/urfave/cli/v2" ) -var enrdumpCommand = cli.Command{ +var fileFlag = &cli.StringFlag{Name: "file"} + +var enrdumpCommand = &cli.Command{ Name: "enrdump", Usage: "Pretty-prints node records", Action: enrdump, Flags: []cli.Flag{ - cli.StringFlag{Name: "file"}, + fileFlag, }, } func enrdump(ctx *cli.Context) error { var source string - if file := ctx.String("file"); file != "" { + if file := ctx.String(fileFlag.Name); 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) + b, err = io.ReadAll(os.Stdin) } else { - b, err = ioutil.ReadFile(file) + b, err = os.ReadFile(file) } if err != nil { return err } source = string(b) } else if ctx.NArg() == 1 { - source = ctx.Args()[0] + source = ctx.Args().First() } else { return fmt.Errorf("need record as argument") } @@ -69,22 +71,30 @@ func enrdump(ctx *cli.Context) error { if err != nil { return fmt.Errorf("INVALID: %v", err) } - fmt.Print(dumpRecord(r)) + dumpRecord(os.Stdout, 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 { +func dumpRecord(out io.Writer, r *enr.Record) { + n, err := enode.New(enode.ValidSchemes, r) + if err != nil { fmt.Fprintf(out, "INVALID: %v\n", err) } else { fmt.Fprintf(out, "Node ID: %v\n", n.ID()) + dumpNodeURL(out, n) } 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 dumpNodeURL(out io.Writer, n *enode.Node) { + var key enode.Secp256k1 + if n.Load(&key) != nil { + return // no secp256k1 public key + } + fmt.Fprintf(out, "URLv4: %s\n", n.URLv4()) } func dumpRecordKV(kv []interface{}, indent int) string { diff --git a/cmd/devp2p/internal/ethtest/chain.go b/cmd/devp2p/internal/ethtest/chain.go new file mode 100644 index 00000000..83ceb2a4 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/chain.go @@ -0,0 +1,194 @@ +// Copyright 2020 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 ethtest + +import ( + "compress/gzip" + "encoding/json" + "fmt" + "io" + "math/big" + "os" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +type Chain struct { + genesis core.Genesis + blocks []*types.Block + chainConfig *params.ChainConfig +} + +// Len returns the length of the chain. +func (c *Chain) Len() int { + return len(c.blocks) +} + +// TD calculates the total difficulty of the chain at the +// chain head. +func (c *Chain) TD() *big.Int { + sum := new(big.Int) + for _, block := range c.blocks[:c.Len()] { + sum.Add(sum, block.Difficulty()) + } + return sum +} + +// TotalDifficultyAt calculates the total difficulty of the chain +// at the given block height. +func (c *Chain) TotalDifficultyAt(height int) *big.Int { + sum := new(big.Int) + if height >= c.Len() { + return sum + } + for _, block := range c.blocks[:height+1] { + sum.Add(sum, block.Difficulty()) + } + return sum +} + +func (c *Chain) RootAt(height int) common.Hash { + if height < c.Len() { + return c.blocks[height].Root() + } + return common.Hash{} +} + +// ForkID gets the fork id of the chain. +func (c *Chain) ForkID() forkid.ID { + return forkid.NewID(c.chainConfig, c.blocks[0].Hash(), uint64(c.Len())) +} + +// Shorten returns a copy chain of a desired height from the imported +func (c *Chain) Shorten(height int) *Chain { + blocks := make([]*types.Block, height) + copy(blocks, c.blocks[:height]) + + config := *c.chainConfig + return &Chain{ + blocks: blocks, + chainConfig: &config, + } +} + +// Head returns the chain head. +func (c *Chain) Head() *types.Block { + return c.blocks[c.Len()-1] +} + +func (c *Chain) GetHeaders(req *GetBlockHeaders) ([]*types.Header, error) { + if req.Amount < 1 { + return nil, fmt.Errorf("no block headers requested") + } + + headers := make([]*types.Header, req.Amount) + var blockNumber uint64 + + // range over blocks to check if our chain has the requested header + for _, block := range c.blocks { + if block.Hash() == req.Origin.Hash || block.Number().Uint64() == req.Origin.Number { + headers[0] = block.Header() + blockNumber = block.Number().Uint64() + } + } + if headers[0] == nil { + return nil, fmt.Errorf("no headers found for given origin number %v, hash %v", req.Origin.Number, req.Origin.Hash) + } + + if req.Reverse { + for i := 1; i < int(req.Amount); i++ { + blockNumber -= (1 - req.Skip) + headers[i] = c.blocks[blockNumber].Header() + } + + return headers, nil + } + + for i := 1; i < int(req.Amount); i++ { + blockNumber += (1 + req.Skip) + headers[i] = c.blocks[blockNumber].Header() + } + + return headers, nil +} + +// loadChain takes the given chain.rlp file, and decodes and returns +// the blocks from the file. +func loadChain(chainfile string, genesis string) (*Chain, error) { + gen, err := loadGenesis(genesis) + if err != nil { + return nil, err + } + gblock := gen.ToBlock() + + blocks, err := blocksFromFile(chainfile, gblock) + if err != nil { + return nil, err + } + + c := &Chain{genesis: gen, blocks: blocks, chainConfig: gen.Config} + return c, nil +} + +func loadGenesis(genesisFile string) (core.Genesis, error) { + chainConfig, err := os.ReadFile(genesisFile) + if err != nil { + return core.Genesis{}, err + } + var gen core.Genesis + if err := json.Unmarshal(chainConfig, &gen); err != nil { + return core.Genesis{}, err + } + return gen, nil +} + +func blocksFromFile(chainfile string, gblock *types.Block) ([]*types.Block, error) { + // Load chain.rlp. + fh, err := os.Open(chainfile) + if err != nil { + return nil, err + } + defer fh.Close() + var reader io.Reader = fh + if strings.HasSuffix(chainfile, ".gz") { + if reader, err = gzip.NewReader(reader); err != nil { + return nil, err + } + } + stream := rlp.NewStream(reader, 0) + var blocks = make([]*types.Block, 1) + blocks[0] = gblock + for i := 0; ; i++ { + var b types.Block + if err := stream.Decode(&b); err == io.EOF { + break + } else if err != nil { + return nil, fmt.Errorf("at block index %d: %v", i, err) + } + if b.NumberU64() != uint64(i+1) { + return nil, fmt.Errorf("block at index %d has wrong number %d", i, b.NumberU64()) + } + blocks = append(blocks, &b) + } + return blocks, nil +} diff --git a/cmd/devp2p/internal/ethtest/chain_test.go b/cmd/devp2p/internal/ethtest/chain_test.go new file mode 100644 index 00000000..67221923 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/chain_test.go @@ -0,0 +1,202 @@ +// Copyright 2020 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 ethtest + +import ( + "path/filepath" + "strconv" + "testing" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/p2p" + "github.com/stretchr/testify/assert" +) + +// TestEthProtocolNegotiation tests whether the test suite +// can negotiate the highest eth protocol in a status message exchange +func TestEthProtocolNegotiation(t *testing.T) { + var tests = []struct { + conn *Conn + caps []p2p.Cap + expected uint32 + }{ + { + conn: &Conn{ + ourHighestProtoVersion: 65, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + expected: uint32(65), + }, + { + conn: &Conn{ + ourHighestProtoVersion: 65, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + expected: uint32(65), + }, + { + conn: &Conn{ + ourHighestProtoVersion: 65, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + expected: uint32(65), + }, + { + conn: &Conn{ + ourHighestProtoVersion: 64, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + expected: 64, + }, + { + conn: &Conn{ + ourHighestProtoVersion: 65, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 0}, + {Name: "eth", Version: 89}, + {Name: "eth", Version: 65}, + }, + expected: uint32(65), + }, + { + conn: &Conn{ + ourHighestProtoVersion: 64, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "wrongProto", Version: 65}, + }, + expected: uint32(64), + }, + { + conn: &Conn{ + ourHighestProtoVersion: 65, + }, + caps: []p2p.Cap{ + {Name: "eth", Version: 63}, + {Name: "eth", Version: 64}, + {Name: "wrongProto", Version: 65}, + }, + expected: uint32(64), + }, + } + + for i, tt := range tests { + t.Run(strconv.Itoa(i), func(t *testing.T) { + tt.conn.negotiateEthProtocol(tt.caps) + assert.Equal(t, tt.expected, uint32(tt.conn.negotiatedProtoVersion)) + }) + } +} + +// TestChain_GetHeaders tests whether the test suite can correctly +// respond to a GetBlockHeaders request from a node. +func TestChain_GetHeaders(t *testing.T) { + chainFile, err := filepath.Abs("./testdata/chain.rlp") + if err != nil { + t.Fatal(err) + } + genesisFile, err := filepath.Abs("./testdata/genesis.json") + if err != nil { + t.Fatal(err) + } + + chain, err := loadChain(chainFile, genesisFile) + if err != nil { + t.Fatal(err) + } + + var tests = []struct { + req GetBlockHeaders + expected []*types.Header + }{ + { + req: GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Number: uint64(2)}, + Amount: uint64(5), + Skip: 1, + Reverse: false, + }, + }, + expected: []*types.Header{ + chain.blocks[2].Header(), + chain.blocks[4].Header(), + chain.blocks[6].Header(), + chain.blocks[8].Header(), + chain.blocks[10].Header(), + }, + }, + { + req: GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Number: uint64(chain.Len() - 1)}, + Amount: uint64(3), + Skip: 0, + Reverse: true, + }, + }, + expected: []*types.Header{ + chain.blocks[chain.Len()-1].Header(), + chain.blocks[chain.Len()-2].Header(), + chain.blocks[chain.Len()-3].Header(), + }, + }, + { + req: GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Hash: chain.Head().Hash()}, + Amount: uint64(1), + Skip: 0, + Reverse: false, + }, + }, + expected: []*types.Header{ + chain.Head().Header(), + }, + }, + } + + for i, tt := range tests { + t.Run(strconv.Itoa(i), func(t *testing.T) { + headers, err := chain.GetHeaders(&tt.req) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, headers, tt.expected) + }) + } +} diff --git a/cmd/devp2p/internal/ethtest/helpers.go b/cmd/devp2p/internal/ethtest/helpers.go new file mode 100644 index 00000000..eeeb4f93 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/helpers.go @@ -0,0 +1,643 @@ +// Copyright 2021 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 ethtest + +import ( + "fmt" + "net" + "reflect" + "strings" + "time" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/rlpx" +) + +var ( + pretty = spew.ConfigState{ + Indent: " ", + DisableCapacities: true, + DisablePointerAddresses: true, + SortKeys: true, + } + timeout = 20 * time.Second +) + +// dial attempts to dial the given node and perform a handshake, +// returning the created Conn if successful. +func (s *Suite) dial() (*Conn, error) { + // dial + fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", s.Dest.IP(), s.Dest.TCP())) + if err != nil { + return nil, err + } + conn := Conn{Conn: rlpx.NewConn(fd, s.Dest.Pubkey())} + // do encHandshake + conn.ourKey, _ = crypto.GenerateKey() + _, err = conn.Handshake(conn.ourKey) + if err != nil { + conn.Close() + return nil, err + } + // set default p2p capabilities + conn.caps = []p2p.Cap{ + {Name: "eth", Version: 66}, + {Name: "eth", Version: 67}, + } + conn.ourHighestProtoVersion = 67 + return &conn, nil +} + +// dialSnap creates a connection with snap/1 capability. +func (s *Suite) dialSnap() (*Conn, error) { + conn, err := s.dial() + if err != nil { + return nil, fmt.Errorf("dial failed: %v", err) + } + conn.caps = append(conn.caps, p2p.Cap{Name: "snap", Version: 1}) + conn.ourHighestSnapProtoVersion = 1 + return conn, nil +} + +// peer performs both the protocol handshake and the status message +// exchange with the node in order to peer with it. +func (c *Conn) peer(chain *Chain, status *Status) error { + if err := c.handshake(); err != nil { + return fmt.Errorf("handshake failed: %v", err) + } + if _, err := c.statusExchange(chain, status); err != nil { + return fmt.Errorf("status exchange failed: %v", err) + } + return nil +} + +// handshake performs a protocol handshake with the node. +func (c *Conn) handshake() error { + defer c.SetDeadline(time.Time{}) + c.SetDeadline(time.Now().Add(10 * time.Second)) + // write hello to client + pub0 := crypto.FromECDSAPub(&c.ourKey.PublicKey)[1:] + ourHandshake := &Hello{ + Version: 5, + Caps: c.caps, + ID: pub0, + } + if err := c.Write(ourHandshake); err != nil { + return fmt.Errorf("write to connection failed: %v", err) + } + // read hello from client + switch msg := c.Read().(type) { + case *Hello: + // set snappy if version is at least 5 + if msg.Version >= 5 { + c.SetSnappy(true) + } + c.negotiateEthProtocol(msg.Caps) + if c.negotiatedProtoVersion == 0 { + return fmt.Errorf("could not negotiate eth protocol (remote caps: %v, local eth version: %v)", msg.Caps, c.ourHighestProtoVersion) + } + // If we require snap, verify that it was negotiated + if c.ourHighestSnapProtoVersion != c.negotiatedSnapProtoVersion { + return fmt.Errorf("could not negotiate snap protocol (remote caps: %v, local snap version: %v)", msg.Caps, c.ourHighestSnapProtoVersion) + } + return nil + default: + return fmt.Errorf("bad handshake: %#v", msg) + } +} + +// negotiateEthProtocol sets the Conn's eth protocol version to highest +// advertised capability from peer. +func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) { + var highestEthVersion uint + var highestSnapVersion uint + for _, capability := range caps { + switch capability.Name { + case "eth": + if capability.Version > highestEthVersion && capability.Version <= c.ourHighestProtoVersion { + highestEthVersion = capability.Version + } + case "snap": + if capability.Version > highestSnapVersion && capability.Version <= c.ourHighestSnapProtoVersion { + highestSnapVersion = capability.Version + } + } + } + c.negotiatedProtoVersion = highestEthVersion + c.negotiatedSnapProtoVersion = highestSnapVersion +} + +// statusExchange performs a `Status` message exchange with the given node. +func (c *Conn) statusExchange(chain *Chain, status *Status) (Message, error) { + defer c.SetDeadline(time.Time{}) + c.SetDeadline(time.Now().Add(20 * time.Second)) + + // read status message from client + var message Message +loop: + for { + switch msg := c.Read().(type) { + case *Status: + if have, want := msg.Head, chain.blocks[chain.Len()-1].Hash(); have != want { + return nil, fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x", + want, chain.blocks[chain.Len()-1].NumberU64(), have) + } + if have, want := msg.TD.Cmp(chain.TD()), 0; have != want { + return nil, fmt.Errorf("wrong TD in status: have %v want %v", have, want) + } + if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) { + return nil, fmt.Errorf("wrong fork ID in status: have %v, want %v", have, want) + } + if have, want := msg.ProtocolVersion, c.ourHighestProtoVersion; have != uint32(want) { + return nil, fmt.Errorf("wrong protocol version: have %v, want %v", have, want) + } + message = msg + break loop + case *Disconnect: + return nil, fmt.Errorf("disconnect received: %v", msg.Reason) + case *Ping: + c.Write(&Pong{}) // TODO (renaynay): in the future, this should be an error + // (PINGs should not be a response upon fresh connection) + default: + return nil, fmt.Errorf("bad status message: %s", pretty.Sdump(msg)) + } + } + // make sure eth protocol version is set for negotiation + if c.negotiatedProtoVersion == 0 { + return nil, fmt.Errorf("eth protocol version must be set in Conn") + } + if status == nil { + // default status message + status = &Status{ + ProtocolVersion: uint32(c.negotiatedProtoVersion), + NetworkID: chain.chainConfig.ChainID.Uint64(), + TD: chain.TD(), + Head: chain.blocks[chain.Len()-1].Hash(), + Genesis: chain.blocks[0].Hash(), + ForkID: chain.ForkID(), + } + } + if err := c.Write(status); err != nil { + return nil, fmt.Errorf("write to connection failed: %v", err) + } + return message, nil +} + +// createSendAndRecvConns creates two connections, one for sending messages to the +// node, and one for receiving messages from the node. +func (s *Suite) createSendAndRecvConns() (*Conn, *Conn, error) { + sendConn, err := s.dial() + if err != nil { + return nil, nil, fmt.Errorf("dial failed: %v", err) + } + recvConn, err := s.dial() + if err != nil { + sendConn.Close() + return nil, nil, fmt.Errorf("dial failed: %v", err) + } + return sendConn, recvConn, nil +} + +// readAndServe serves GetBlockHeaders requests while waiting +// on another message from the node. +func (c *Conn) readAndServe(chain *Chain, timeout time.Duration) Message { + start := time.Now() + for time.Since(start) < timeout { + c.SetReadDeadline(time.Now().Add(10 * time.Second)) + + msg := c.Read() + switch msg := msg.(type) { + case *Ping: + c.Write(&Pong{}) + case *GetBlockHeaders: + headers, err := chain.GetHeaders(msg) + if err != nil { + return errorf("could not get headers for inbound header request: %v", err) + } + resp := &BlockHeaders{ + RequestId: msg.ReqID(), + BlockHeadersPacket: eth.BlockHeadersPacket(headers), + } + if err := c.Write(resp); err != nil { + return errorf("could not write to connection: %v", err) + } + default: + return msg + } + } + return errorf("no message received within %v", timeout) +} + +// headersRequest executes the given `GetBlockHeaders` request. +func (c *Conn) headersRequest(request *GetBlockHeaders, chain *Chain, reqID uint64) ([]*types.Header, error) { + defer c.SetReadDeadline(time.Time{}) + c.SetReadDeadline(time.Now().Add(20 * time.Second)) + + // write request + request.RequestId = reqID + if err := c.Write(request); err != nil { + return nil, fmt.Errorf("could not write to connection: %v", err) + } + + // wait for response + msg := c.waitForResponse(chain, timeout, request.RequestId) + resp, ok := msg.(*BlockHeaders) + if !ok { + return nil, fmt.Errorf("unexpected message received: %s", pretty.Sdump(msg)) + } + headers := []*types.Header(resp.BlockHeadersPacket) + return headers, nil +} + +func (c *Conn) snapRequest(msg Message, id uint64, chain *Chain) (Message, error) { + defer c.SetReadDeadline(time.Time{}) + c.SetReadDeadline(time.Now().Add(5 * time.Second)) + if err := c.Write(msg); err != nil { + return nil, fmt.Errorf("could not write to connection: %v", err) + } + return c.ReadSnap(id) +} + +// headersMatch returns whether the received headers match the given request +func headersMatch(expected []*types.Header, headers []*types.Header) bool { + return reflect.DeepEqual(expected, headers) +} + +// waitForResponse reads from the connection until a response with the expected +// request ID is received. +func (c *Conn) waitForResponse(chain *Chain, timeout time.Duration, requestID uint64) Message { + for { + msg := c.readAndServe(chain, timeout) + if msg.ReqID() == requestID { + return msg + } + } +} + +// sendNextBlock broadcasts the next block in the chain and waits +// for the node to propagate the block and import it into its chain. +func (s *Suite) sendNextBlock() error { + // set up sending and receiving connections + sendConn, recvConn, err := s.createSendAndRecvConns() + if err != nil { + return err + } + defer sendConn.Close() + defer recvConn.Close() + if err = sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + if err = recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + // create new block announcement + nextBlock := s.fullChain.blocks[s.chain.Len()] + blockAnnouncement := &NewBlock{ + Block: nextBlock, + TD: s.fullChain.TotalDifficultyAt(s.chain.Len()), + } + // send announcement and wait for node to request the header + if err = s.testAnnounce(sendConn, recvConn, blockAnnouncement); err != nil { + return fmt.Errorf("failed to announce block: %v", err) + } + // wait for client to update its chain + if err = s.waitForBlockImport(recvConn, nextBlock); err != nil { + return fmt.Errorf("failed to receive confirmation of block import: %v", err) + } + // update test suite chain + s.chain.blocks = append(s.chain.blocks, nextBlock) + return nil +} + +// testAnnounce writes a block announcement to the node and waits for the node +// to propagate it. +func (s *Suite) testAnnounce(sendConn, receiveConn *Conn, blockAnnouncement *NewBlock) error { + if err := sendConn.Write(blockAnnouncement); err != nil { + return fmt.Errorf("could not write to connection: %v", err) + } + return s.waitAnnounce(receiveConn, blockAnnouncement) +} + +// waitAnnounce waits for a NewBlock or NewBlockHashes announcement from the node. +func (s *Suite) waitAnnounce(conn *Conn, blockAnnouncement *NewBlock) error { + for { + switch msg := conn.readAndServe(s.chain, timeout).(type) { + case *NewBlock: + if !reflect.DeepEqual(blockAnnouncement.Block.Header(), msg.Block.Header()) { + return fmt.Errorf("wrong header in block announcement: \nexpected %v "+ + "\ngot %v", blockAnnouncement.Block.Header(), msg.Block.Header()) + } + if !reflect.DeepEqual(blockAnnouncement.TD, msg.TD) { + return fmt.Errorf("wrong TD in announcement: expected %v, got %v", blockAnnouncement.TD, msg.TD) + } + return nil + case *NewBlockHashes: + hashes := *msg + if blockAnnouncement.Block.Hash() != hashes[0].Hash { + return fmt.Errorf("wrong block hash in announcement: expected %v, got %v", blockAnnouncement.Block.Hash(), hashes[0].Hash) + } + return nil + case *NewPooledTransactionHashes: + // ignore tx announcements from previous tests + continue + default: + return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) + } + } +} + +func (s *Suite) waitForBlockImport(conn *Conn, block *types.Block) error { + defer conn.SetReadDeadline(time.Time{}) + conn.SetReadDeadline(time.Now().Add(20 * time.Second)) + // create request + req := &GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Hash: block.Hash()}, + Amount: 1, + }, + } + + // loop until BlockHeaders response contains desired block, confirming the + // node imported the block + for { + requestID := uint64(54) + headers, err := conn.headersRequest(req, s.chain, requestID) + if err != nil { + return fmt.Errorf("GetBlockHeader request failed: %v", err) + } + // if headers response is empty, node hasn't imported block yet, try again + if len(headers) == 0 { + time.Sleep(100 * time.Millisecond) + continue + } + if !reflect.DeepEqual(block.Header(), headers[0]) { + return fmt.Errorf("wrong header returned: wanted %v, got %v", block.Header(), headers[0]) + } + return nil + } +} + +func (s *Suite) oldAnnounce() error { + sendConn, receiveConn, err := s.createSendAndRecvConns() + if err != nil { + return err + } + defer sendConn.Close() + defer receiveConn.Close() + if err := sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + if err := receiveConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + // create old block announcement + oldBlockAnnounce := &NewBlock{ + Block: s.chain.blocks[len(s.chain.blocks)/2], + TD: s.chain.blocks[len(s.chain.blocks)/2].Difficulty(), + } + if err := sendConn.Write(oldBlockAnnounce); err != nil { + return fmt.Errorf("could not write to connection: %v", err) + } + // wait to see if the announcement is propagated + switch msg := receiveConn.readAndServe(s.chain, time.Second*8).(type) { + case *NewBlock: + block := *msg + if block.Block.Hash() == oldBlockAnnounce.Block.Hash() { + return fmt.Errorf("unexpected: block propagated: %s", pretty.Sdump(msg)) + } + case *NewBlockHashes: + hashes := *msg + for _, hash := range hashes { + if hash.Hash == oldBlockAnnounce.Block.Hash() { + return fmt.Errorf("unexpected: block announced: %s", pretty.Sdump(msg)) + } + } + case *Error: + errMsg := *msg + // check to make sure error is timeout (propagation didn't come through == test successful) + if !strings.Contains(errMsg.String(), "timeout") { + return fmt.Errorf("unexpected error: %v", pretty.Sdump(msg)) + } + default: + return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) + } + return nil +} + +func (s *Suite) maliciousHandshakes(t *utesting.T) error { + conn, err := s.dial() + if err != nil { + return fmt.Errorf("dial failed: %v", err) + } + defer conn.Close() + + // write hello to client + pub0 := crypto.FromECDSAPub(&conn.ourKey.PublicKey)[1:] + handshakes := []*Hello{ + { + Version: 5, + Caps: []p2p.Cap{ + {Name: largeString(2), Version: 64}, + }, + ID: pub0, + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + ID: append(pub0, byte(0)), + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + ID: append(pub0, pub0...), + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: 64}, + {Name: "eth", Version: 65}, + }, + ID: largeBuffer(2), + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: largeString(2), Version: 64}, + }, + ID: largeBuffer(2), + }, + } + for i, handshake := range handshakes { + t.Logf("Testing malicious handshake %v\n", i) + if err := conn.Write(handshake); err != nil { + return fmt.Errorf("could not write to connection: %v", err) + } + // check that the peer disconnected + for i := 0; i < 2; i++ { + switch msg := conn.readAndServe(s.chain, 20*time.Second).(type) { + case *Disconnect: + case *Error: + case *Hello: + // Discard one hello as Hello's are sent concurrently + continue + default: + return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) + } + } + // dial for the next round + conn, err = s.dial() + if err != nil { + return fmt.Errorf("dial failed: %v", err) + } + } + return nil +} + +func (s *Suite) maliciousStatus(conn *Conn) error { + if err := conn.handshake(); err != nil { + return fmt.Errorf("handshake failed: %v", err) + } + status := &Status{ + ProtocolVersion: uint32(conn.negotiatedProtoVersion), + NetworkID: s.chain.chainConfig.ChainID.Uint64(), + TD: largeNumber(2), + Head: s.chain.blocks[s.chain.Len()-1].Hash(), + Genesis: s.chain.blocks[0].Hash(), + ForkID: s.chain.ForkID(), + } + + // get status + msg, err := conn.statusExchange(s.chain, status) + if err != nil { + return fmt.Errorf("status exchange failed: %v", err) + } + switch msg := msg.(type) { + case *Status: + default: + return fmt.Errorf("expected status, got: %#v ", msg) + } + + // wait for disconnect + switch msg := conn.readAndServe(s.chain, timeout).(type) { + case *Disconnect: + return nil + case *Error: + return nil + default: + return fmt.Errorf("expected disconnect, got: %s", pretty.Sdump(msg)) + } +} + +func (s *Suite) hashAnnounce() error { + // create connections + sendConn, recvConn, err := s.createSendAndRecvConns() + if err != nil { + return fmt.Errorf("failed to create connections: %v", err) + } + defer sendConn.Close() + defer recvConn.Close() + if err := sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + if err := recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + + // create NewBlockHashes announcement + type anno struct { + Hash common.Hash // Hash of one particular block being announced + Number uint64 // Number of one particular block being announced + } + nextBlock := s.fullChain.blocks[s.chain.Len()] + announcement := anno{Hash: nextBlock.Hash(), Number: nextBlock.Number().Uint64()} + newBlockHash := &NewBlockHashes{announcement} + if err := sendConn.Write(newBlockHash); err != nil { + return fmt.Errorf("failed to write to connection: %v", err) + } + + // Announcement sent, now wait for a header request + msg := sendConn.Read() + blockHeaderReq, ok := msg.(*GetBlockHeaders) + if !ok { + return fmt.Errorf("unexpected %s", pretty.Sdump(msg)) + } + if blockHeaderReq.Amount != 1 { + return fmt.Errorf("unexpected number of block headers requested: %v", blockHeaderReq.Amount) + } + if blockHeaderReq.Origin.Hash != announcement.Hash { + return fmt.Errorf("unexpected block header requested. Announced:\n %v\n Remote request:\n%v", + pretty.Sdump(announcement), + pretty.Sdump(blockHeaderReq)) + } + err = sendConn.Write(&BlockHeaders{ + RequestId: blockHeaderReq.ReqID(), + BlockHeadersPacket: eth.BlockHeadersPacket{nextBlock.Header()}, + }) + if err != nil { + return fmt.Errorf("failed to write to connection: %v", err) + } + + // wait for block announcement + msg = recvConn.readAndServe(s.chain, timeout) + switch msg := msg.(type) { + case *NewBlockHashes: + hashes := *msg + if len(hashes) != 1 { + return fmt.Errorf("unexpected new block hash announcement: wanted 1 announcement, got %d", len(hashes)) + } + if nextBlock.Hash() != hashes[0].Hash { + return fmt.Errorf("unexpected block hash announcement, wanted %v, got %v", nextBlock.Hash(), + hashes[0].Hash) + } + + case *NewBlock: + // node should only propagate NewBlock without having requested the body if the body is empty + nextBlockBody := nextBlock.Body() + if len(nextBlockBody.Transactions) != 0 || len(nextBlockBody.Uncles) != 0 { + return fmt.Errorf("unexpected non-empty new block propagated: %s", pretty.Sdump(msg)) + } + if msg.Block.Hash() != nextBlock.Hash() { + return fmt.Errorf("mismatched hash of propagated new block: wanted %v, got %v", + nextBlock.Hash(), msg.Block.Hash()) + } + // check to make sure header matches header that was sent to the node + if !reflect.DeepEqual(nextBlock.Header(), msg.Block.Header()) { + return fmt.Errorf("incorrect header received: wanted %v, got %v", nextBlock.Header(), msg.Block.Header()) + } + default: + return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) + } + // confirm node imported block + if err := s.waitForBlockImport(recvConn, nextBlock); err != nil { + return fmt.Errorf("error waiting for node to import new block: %v", err) + } + // update the chain + s.chain.blocks = append(s.chain.blocks, nextBlock) + return nil +} diff --git a/cmd/devp2p/internal/ethtest/large.go b/cmd/devp2p/internal/ethtest/large.go new file mode 100644 index 00000000..40626c20 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/large.go @@ -0,0 +1,80 @@ +// Copyright 2020 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 ethtest + +import ( + "crypto/rand" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" +) + +// largeNumber returns a very large big.Int. +func largeNumber(megabytes int) *big.Int { + buf := make([]byte, megabytes*1024*1024) + rand.Read(buf) + bigint := new(big.Int) + bigint.SetBytes(buf) + return bigint +} + +// largeBuffer returns a very large buffer. +func largeBuffer(megabytes int) []byte { + buf := make([]byte, megabytes*1024*1024) + rand.Read(buf) + return buf +} + +// largeString returns a very large string. +func largeString(megabytes int) string { + buf := make([]byte, megabytes*1024*1024) + rand.Read(buf) + return hexutil.Encode(buf) +} + +func largeBlock() *types.Block { + return types.NewBlockWithHeader(largeHeader()) +} + +// Returns a random hash +func randHash() common.Hash { + var h common.Hash + rand.Read(h[:]) + return h +} + +func largeHeader() *types.Header { + return &types.Header{ + MixDigest: randHash(), + ReceiptHash: randHash(), + TxHash: randHash(), + Nonce: types.BlockNonce{}, + Extra: []byte{}, + Bloom: types.Bloom{}, + GasUsed: 0, + Coinbase: common.Address{}, + GasLimit: 0, + UncleHash: types.EmptyUncleHash, + Time: 1337, + ParentHash: randHash(), + Root: randHash(), + Number: largeNumber(2), + Difficulty: largeNumber(2), + } +} diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go new file mode 100644 index 00000000..032afeaf --- /dev/null +++ b/cmd/devp2p/internal/ethtest/snap.go @@ -0,0 +1,678 @@ +// Copyright 2022 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 ethtest + +import ( + "bytes" + "errors" + "fmt" + "math/rand" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +func (s *Suite) TestSnapStatus(t *utesting.T) { + conn, err := s.dialSnap() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } +} + +type accRangeTest struct { + nBytes uint64 + root common.Hash + origin common.Hash + limit common.Hash + + expAccounts int + expFirst common.Hash + expLast common.Hash +} + +// TestSnapGetAccountRange various forms of GetAccountRange requests. +func (s *Suite) TestSnapGetAccountRange(t *utesting.T) { + var ( + root = s.chain.RootAt(999) + ffHash = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + zero = common.Hash{} + firstKeyMinus1 = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf29") + firstKey = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") + firstKeyPlus1 = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2b") + secondKey = common.HexToHash("0x09e47cd5056a689e708f22fe1f932709a320518e444f5f7d8d46a3da523d6606") + storageRoot = common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790") + ) + for i, tc := range []accRangeTest{ + // Tests decreasing the number of bytes + {4000, root, zero, ffHash, 76, firstKey, common.HexToHash("0xd2669dcf3858e7f1eecb8b5fedbf22fbea3e9433848a75035f79d68422c2dcda")}, + {3000, root, zero, ffHash, 57, firstKey, common.HexToHash("0x9b63fa753ece5cb90657d02ecb15df4dc1508d8c1d187af1bf7f1a05e747d3c7")}, + {2000, root, zero, ffHash, 38, firstKey, common.HexToHash("0x5e6140ecae4354a9e8f47559a8c6209c1e0e69cb077b067b528556c11698b91f")}, + {1, root, zero, ffHash, 1, firstKey, firstKey}, + + // Tests variations of the range + // + // [00b to firstkey]: should return [firstkey, secondkey], where secondkey is out of bounds + {4000, root, common.HexToHash("0x00bf000000000000000000000000000000000000000000000000000000000000"), common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2b"), 2, firstKey, secondKey}, + // [00b0 to 0bf0]: where both are before firstkey. Should return firstKey (even though it's out of bounds) + {4000, root, common.HexToHash("0x00b0000000000000000000000000000000000000000000000000000000000000"), common.HexToHash("0x00bf100000000000000000000000000000000000000000000000000000000000"), 1, firstKey, firstKey}, + {4000, root, zero, zero, 1, firstKey, firstKey}, + {4000, root, firstKey, ffHash, 76, firstKey, common.HexToHash("0xd2669dcf3858e7f1eecb8b5fedbf22fbea3e9433848a75035f79d68422c2dcda")}, + {4000, root, firstKeyPlus1, ffHash, 76, secondKey, common.HexToHash("0xd28f55d3b994f16389f36944ad685b48e0fc3f8fbe86c3ca92ebecadf16a783f")}, + + // Test different root hashes + // + // A stateroot that does not exist + {4000, common.Hash{0x13, 37}, zero, ffHash, 0, zero, zero}, + // The genesis stateroot (we expect it to not be served) + {4000, s.chain.RootAt(0), zero, ffHash, 0, zero, zero}, + // A 127 block old stateroot, expected to be served + {4000, s.chain.RootAt(999 - 127), zero, ffHash, 77, firstKey, common.HexToHash("0xe4c6fdef5dd4e789a2612390806ee840b8ec0fe52548f8b4efe41abb20c37aac")}, + // A root which is not actually an account root, but a storage orot + {4000, storageRoot, zero, ffHash, 0, zero, zero}, + + // And some non-sensical requests + // + // range from [0xFF to 0x00], wrong order. Expect not to be serviced + {4000, root, ffHash, zero, 0, zero, zero}, + // range from [firstkey, firstkey-1], wrong order. Expect to get first key. + {4000, root, firstKey, firstKeyMinus1, 1, firstKey, firstKey}, + // range from [firstkey, 0], wrong order. Expect to get first key. + {4000, root, firstKey, zero, 1, firstKey, firstKey}, + // Max bytes: 0. Expect to deliver one account. + {0, root, zero, ffHash, 1, firstKey, firstKey}, + } { + tc := tc + if err := s.snapGetAccountRange(t, &tc); err != nil { + t.Errorf("test %d \n root: %x\n range: %#x - %#x\n bytes: %d\nfailed: %v", i, tc.root, tc.origin, tc.limit, tc.nBytes, err) + } + } +} + +type stRangesTest struct { + root common.Hash + accounts []common.Hash + origin []byte + limit []byte + nBytes uint64 + + expSlots int +} + +// TestSnapGetStorageRange various forms of GetStorageRanges requests. +func (s *Suite) TestSnapGetStorageRanges(t *utesting.T) { + var ( + ffHash = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + zero = common.Hash{} + firstKey = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") + secondKey = common.HexToHash("0x09e47cd5056a689e708f22fe1f932709a320518e444f5f7d8d46a3da523d6606") + ) + for i, tc := range []stRangesTest{ + { + root: s.chain.RootAt(999), + accounts: []common.Hash{secondKey, firstKey}, + origin: zero[:], + limit: ffHash[:], + nBytes: 500, + expSlots: 0, + }, + + /* + Some tests against this account: + { + "balance": "0", + "nonce": 1, + "root": "0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": "02", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "01", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "03" + }, + "key": "0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844" + } + */ + { // [:] -> [slot1, slot2, slot3] + root: s.chain.RootAt(999), + accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + origin: zero[:], + limit: ffHash[:], + nBytes: 500, + expSlots: 3, + }, + { // [slot1:] -> [slot1, slot2, slot3] + root: s.chain.RootAt(999), + accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"), + limit: ffHash[:], + nBytes: 500, + expSlots: 3, + }, + { // [slot1+ :] -> [slot2, slot3] + root: s.chain.RootAt(999), + accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf"), + limit: ffHash[:], + nBytes: 500, + expSlots: 2, + }, + { // [slot1:slot2] -> [slot1, slot2] + root: s.chain.RootAt(999), + accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"), + limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"), + nBytes: 500, + expSlots: 2, + }, + { // [slot1+:slot2+] -> [slot2, slot3] + root: s.chain.RootAt(999), + accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + origin: common.FromHex("0x4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7"), + nBytes: 500, + expSlots: 2, + }, + } { + tc := tc + if err := s.snapGetStorageRanges(t, &tc); err != nil { + t.Errorf("test %d \n root: %x\n range: %#x - %#x\n bytes: %d\n #accounts: %d\nfailed: %v", + i, tc.root, tc.origin, tc.limit, tc.nBytes, len(tc.accounts), err) + } + } +} + +type byteCodesTest struct { + nBytes uint64 + hashes []common.Hash + + expHashes int +} + +var ( + // 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 = common.HexToHash("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470") +) + +// TestSnapGetByteCodes various forms of GetByteCodes requests. +func (s *Suite) TestSnapGetByteCodes(t *utesting.T) { + // The halfchain import should yield these bytecodes + var hcBytecodes []common.Hash + for _, s := range []string{ + "0x200c90460d8b0063210d5f5b9918e053c8f2c024485e0f1b48be8b1fc71b1317", + "0x20ba67ed4ac6aff626e0d1d4db623e2fada9593daeefc4a6eb4b70e6cff986f3", + "0x24b5b4902cb3d897c1cee9f16be8e897d8fa277c04c6dc8214f18295fca5de44", + "0x320b9d0a2be39b8a1c858f9f8cb96b1df0983071681de07ded3a7c0d05db5fd6", + "0x48cb0d5275936a24632babc7408339f9f7b051274809de565b8b0db76e97e03c", + "0x67c7a6f5cdaa43b4baa0e15b2be63346d1b9ce9f2c3d7e5804e0cacd44ee3b04", + "0x6d8418059bdc8c3fabf445e6bfc662af3b6a4ae45999b953996e42c7ead2ab49", + "0x7043422e5795d03f17ee0463a37235258e609fdd542247754895d72695e3e142", + "0x727f9e6f0c4bac1ff8d72c2972122d9c8d37ccb37e04edde2339e8da193546f1", + "0x86ccd5e23c78568a8334e0cebaf3e9f48c998307b0bfb1c378cee83b4bfb29cb", + "0x8fc89b00d6deafd4c4279531e743365626dbfa28845ec697919d305c2674302d", + "0x92cfc353bcb9746bb6f9996b6b9df779c88af2e9e0eeac44879ca19887c9b732", + "0x941b4872104f0995a4898fcf0f615ea6bf46bfbdfcf63ea8f2fd45b3f3286b77", + "0xa02fe8f41159bb39d2b704c633c3d6389cf4bfcb61a2539a9155f60786cf815f", + "0xa4b94e0afdffcb0af599677709dac067d3145489ea7aede57672bee43e3b7373", + "0xaf4e64edd3234c1205b725e42963becd1085f013590bd7ed93f8d711c5eb65fb", + "0xb69a18fa855b742031420081999086f6fb56c3930ae8840944e8b8ae9931c51e", + "0xc246c217bc73ce6666c93a93a94faa5250564f50a3fdc27ea74c231c07fe2ca6", + "0xcd6e4ab2c3034df2a8a1dfaaeb1c4baecd162a93d22de35e854ee2945cbe0c35", + "0xe24b692d09d6fc2f3d1a6028c400a27c37d7cbb11511907c013946d6ce263d3b", + "0xe440c5f0e8603fd1ed25976eee261ccee8038cf79d6a4c0eb31b2bf883be737f", + "0xe6eacbc509203d21ac814b350e72934fde686b7f673c19be8cf956b0c70078ce", + "0xe8530de4371467b5be7ea0e69e675ab36832c426d6c1ce9513817c0f0ae1486b", + "0xe85d487abbbc83bf3423cf9731360cf4f5a37220e18e5add54e72ee20861196a", + "0xf195ea389a5eea28db0be93660014275b158963dec44af1dfa7d4743019a9a49", + } { + hcBytecodes = append(hcBytecodes, common.HexToHash(s)) + } + + for i, tc := range []byteCodesTest{ + // A few stateroots + { + nBytes: 10000, hashes: []common.Hash{s.chain.RootAt(0), s.chain.RootAt(999)}, + expHashes: 0, + }, + { + nBytes: 10000, hashes: []common.Hash{s.chain.RootAt(0), s.chain.RootAt(0)}, + expHashes: 0, + }, + // Empties + { + nBytes: 10000, hashes: []common.Hash{emptyRoot}, + expHashes: 0, + }, + { + nBytes: 10000, hashes: []common.Hash{emptyCode}, + expHashes: 1, + }, + { + nBytes: 10000, hashes: []common.Hash{emptyCode, emptyCode, emptyCode}, + expHashes: 3, + }, + // The existing bytecodes + { + nBytes: 10000, hashes: hcBytecodes, + expHashes: len(hcBytecodes), + }, + // The existing, with limited byte arg + { + nBytes: 1, hashes: hcBytecodes, + expHashes: 1, + }, + { + nBytes: 0, hashes: hcBytecodes, + expHashes: 1, + }, + { + nBytes: 1000, hashes: []common.Hash{hcBytecodes[0], hcBytecodes[0], hcBytecodes[0], hcBytecodes[0]}, + expHashes: 4, + }, + } { + tc := tc + if err := s.snapGetByteCodes(t, &tc); err != nil { + t.Errorf("test %d \n bytes: %d\n #hashes: %d\nfailed: %v", i, tc.nBytes, len(tc.hashes), err) + } + } +} + +type trieNodesTest struct { + root common.Hash + paths []snap.TrieNodePathSet + nBytes uint64 + + expHashes []common.Hash + expReject bool +} + +func decodeNibbles(nibbles []byte, bytes []byte) { + for bi, ni := 0, 0; ni < len(nibbles); bi, ni = bi+1, ni+2 { + bytes[bi] = nibbles[ni]<<4 | nibbles[ni+1] + } +} + +// hasTerm returns whether a hex key has the terminator flag. +func hasTerm(s []byte) bool { + return len(s) > 0 && s[len(s)-1] == 16 +} + +func keybytesToHex(str []byte) []byte { + l := len(str)*2 + 1 + var nibbles = make([]byte, l) + for i, b := range str { + nibbles[i*2] = b / 16 + nibbles[i*2+1] = b % 16 + } + nibbles[l-1] = 16 + return nibbles +} + +func hexToCompact(hex []byte) []byte { + terminator := byte(0) + if hasTerm(hex) { + terminator = 1 + hex = hex[:len(hex)-1] + } + buf := make([]byte, len(hex)/2+1) + buf[0] = terminator << 5 // the flag byte + if len(hex)&1 == 1 { + buf[0] |= 1 << 4 // odd flag + buf[0] |= hex[0] // first nibble is contained in the first byte + hex = hex[1:] + } + decodeNibbles(hex, buf[1:]) + return buf +} + +// TestSnapTrieNodes various forms of GetTrieNodes requests. +func (s *Suite) TestSnapTrieNodes(t *utesting.T) { + key := common.FromHex("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") + // helper function to iterate the key, and generate the compact-encoded + // trie paths along the way. + pathTo := func(length int) snap.TrieNodePathSet { + hex := keybytesToHex(key)[:length] + hex[len(hex)-1] = 0 // remove term flag + hKey := hexToCompact(hex) + return snap.TrieNodePathSet{hKey} + } + var accPaths []snap.TrieNodePathSet + for i := 1; i <= 65; i++ { + accPaths = append(accPaths, pathTo(i)) + } + empty := emptyCode + for i, tc := range []trieNodesTest{ + { + root: s.chain.RootAt(999), + paths: nil, + nBytes: 500, + expHashes: nil, + }, + { + root: s.chain.RootAt(999), + paths: []snap.TrieNodePathSet{ + {}, // zero-length pathset should 'abort' and kick us off + {[]byte{0}}, + }, + nBytes: 5000, + expHashes: []common.Hash{}, + expReject: true, + }, + { + root: s.chain.RootAt(999), + paths: []snap.TrieNodePathSet{ + {[]byte{0}}, + {[]byte{1}, []byte{0}}, + }, + nBytes: 5000, + //0x6b3724a41b8c38b46d4d02fba2bb2074c47a507eb16a9a4b978f91d32e406faf + expHashes: []common.Hash{s.chain.RootAt(999)}, + }, + { // nonsensically long path + root: s.chain.RootAt(999), + paths: []snap.TrieNodePathSet{ + {[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8}}, + }, + nBytes: 5000, + expHashes: []common.Hash{common.HexToHash("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")}, + }, + { + root: s.chain.RootAt(0), + paths: []snap.TrieNodePathSet{ + {[]byte{0}}, + {[]byte{1}, []byte{0}}, + }, + nBytes: 5000, + expHashes: []common.Hash{}, + }, + { + // The leaf is only a couple of levels down, so the continued trie traversal causes lookup failures. + root: s.chain.RootAt(999), + paths: accPaths, + nBytes: 5000, + expHashes: []common.Hash{ + common.HexToHash("0xbcefee69b37cca1f5bf3a48aebe08b35f2ea1864fa958bb0723d909a0e0d28d8"), + common.HexToHash("0x4fb1e4e2391e4b4da471d59641319b8fa25d76c973d4bec594d7b00a69ae5135"), + empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, + empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, + empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, + empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, + empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, + empty, empty, empty}, + }, + { + // Basically the same as above, with different ordering + root: s.chain.RootAt(999), + paths: []snap.TrieNodePathSet{ + accPaths[10], accPaths[1], accPaths[0], + }, + nBytes: 5000, + expHashes: []common.Hash{ + empty, + common.HexToHash("0x4fb1e4e2391e4b4da471d59641319b8fa25d76c973d4bec594d7b00a69ae5135"), + common.HexToHash("0xbcefee69b37cca1f5bf3a48aebe08b35f2ea1864fa958bb0723d909a0e0d28d8"), + }, + }, + } { + tc := tc + if err := s.snapGetTrieNodes(t, &tc); err != nil { + t.Errorf("test %d \n #hashes %x\n root: %#x\n bytes: %d\nfailed: %v", i, len(tc.expHashes), tc.root, tc.nBytes, err) + } + } +} + +func (s *Suite) snapGetAccountRange(t *utesting.T, tc *accRangeTest) error { + conn, err := s.dialSnap() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // write request + req := &GetAccountRange{ + ID: uint64(rand.Int63()), + Root: tc.root, + Origin: tc.origin, + Limit: tc.limit, + Bytes: tc.nBytes, + } + resp, err := conn.snapRequest(req, req.ID, s.chain) + if err != nil { + return fmt.Errorf("account range request failed: %v", err) + } + var res *snap.AccountRangePacket + if r, ok := resp.(*AccountRange); !ok { + return fmt.Errorf("account range response wrong: %T %v", resp, resp) + } else { + res = (*snap.AccountRangePacket)(r) + } + if exp, got := tc.expAccounts, len(res.Accounts); exp != got { + return fmt.Errorf("expected %d accounts, got %d", exp, got) + } + // Check that the encoding order is correct + for i := 1; i < len(res.Accounts); i++ { + if bytes.Compare(res.Accounts[i-1].Hash[:], res.Accounts[i].Hash[:]) >= 0 { + return fmt.Errorf("accounts not monotonically increasing: #%d [%x] vs #%d [%x]", i-1, res.Accounts[i-1].Hash[:], i, res.Accounts[i].Hash[:]) + } + } + var ( + hashes []common.Hash + accounts [][]byte + proof = res.Proof + ) + hashes, accounts, err = res.Unpack() + if err != nil { + return err + } + if len(hashes) == 0 && len(accounts) == 0 && len(proof) == 0 { + return nil + } + if len(hashes) > 0 { + if exp, got := tc.expFirst, res.Accounts[0].Hash; exp != got { + return fmt.Errorf("expected first account %#x, got %#x", exp, got) + } + if exp, got := tc.expLast, res.Accounts[len(res.Accounts)-1].Hash; exp != got { + return fmt.Errorf("expected last account %#x, got %#x", exp, got) + } + } + // Reconstruct a partial trie from the response and verify it + keys := make([][]byte, len(hashes)) + for i, key := range hashes { + keys[i] = common.CopyBytes(key[:]) + } + nodes := make(light.NodeList, len(proof)) + for i, node := range proof { + nodes[i] = node + } + proofdb := nodes.NodeSet() + + var end []byte + if len(keys) > 0 { + end = keys[len(keys)-1] + } + _, err = trie.VerifyRangeProof(tc.root, tc.origin[:], end, keys, accounts, proofdb) + return err +} + +func (s *Suite) snapGetStorageRanges(t *utesting.T, tc *stRangesTest) error { + conn, err := s.dialSnap() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // write request + req := &GetStorageRanges{ + ID: uint64(rand.Int63()), + Root: tc.root, + Accounts: tc.accounts, + Origin: tc.origin, + Limit: tc.limit, + Bytes: tc.nBytes, + } + resp, err := conn.snapRequest(req, req.ID, s.chain) + if err != nil { + return fmt.Errorf("account range request failed: %v", err) + } + var res *snap.StorageRangesPacket + if r, ok := resp.(*StorageRanges); !ok { + return fmt.Errorf("account range response wrong: %T %v", resp, resp) + } else { + res = (*snap.StorageRangesPacket)(r) + } + gotSlots := 0 + // Ensure the ranges are monotonically increasing + for i, slots := range res.Slots { + gotSlots += len(slots) + for j := 1; j < len(slots); j++ { + if bytes.Compare(slots[j-1].Hash[:], slots[j].Hash[:]) >= 0 { + return fmt.Errorf("storage slots not monotonically increasing for account #%d: #%d [%x] vs #%d [%x]", i, j-1, slots[j-1].Hash[:], j, slots[j].Hash[:]) + } + } + } + if exp, got := tc.expSlots, gotSlots; exp != got { + return fmt.Errorf("expected %d slots, got %d", exp, got) + } + return nil +} + +func (s *Suite) snapGetByteCodes(t *utesting.T, tc *byteCodesTest) error { + conn, err := s.dialSnap() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // write request + req := &GetByteCodes{ + ID: uint64(rand.Int63()), + Hashes: tc.hashes, + Bytes: tc.nBytes, + } + resp, err := conn.snapRequest(req, req.ID, s.chain) + if err != nil { + return fmt.Errorf("getBytecodes request failed: %v", err) + } + var res *snap.ByteCodesPacket + if r, ok := resp.(*ByteCodes); !ok { + return fmt.Errorf("bytecodes response wrong: %T %v", resp, resp) + } else { + res = (*snap.ByteCodesPacket)(r) + } + if exp, got := tc.expHashes, len(res.Codes); exp != got { + for i, c := range res.Codes { + fmt.Printf("%d. %#x\n", i, c) + } + return fmt.Errorf("expected %d bytecodes, got %d", exp, got) + } + // Cross reference the requested bytecodes with the response to find gaps + // that the serving node is missing + var ( + bytecodes = res.Codes + hasher = sha3.NewLegacyKeccak256().(crypto.KeccakState) + hash = make([]byte, 32) + codes = make([][]byte, len(req.Hashes)) + ) + + for i, j := 0, 0; i < len(bytecodes); i++ { + // Find the next hash that we've been served, leaving misses with nils + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Read(hash) + + for j < len(req.Hashes) && !bytes.Equal(hash, req.Hashes[j][:]) { + j++ + } + if j < len(req.Hashes) { + codes[j] = bytecodes[i] + j++ + continue + } + // We've either ran out of hashes, or got unrequested data + return errors.New("unexpected bytecode") + } + + return nil +} + +func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error { + conn, err := s.dialSnap() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // write request + req := &GetTrieNodes{ + ID: uint64(rand.Int63()), + Root: tc.root, + Paths: tc.paths, + Bytes: tc.nBytes, + } + resp, err := conn.snapRequest(req, req.ID, s.chain) + if err != nil { + if tc.expReject { + return nil + } + return fmt.Errorf("trienodes request failed: %v", err) + } + var res *snap.TrieNodesPacket + if r, ok := resp.(*TrieNodes); !ok { + return fmt.Errorf("trienodes response wrong: %T %v", resp, resp) + } else { + res = (*snap.TrieNodesPacket)(r) + } + + // Check the correctness + + // Cross reference the requested trienodes with the response to find gaps + // that the serving node is missing + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + hash := make([]byte, 32) + trienodes := res.Nodes + if got, want := len(trienodes), len(tc.expHashes); got != want { + return fmt.Errorf("wrong trienode count, got %d, want %d\n", got, want) + } + for i, trienode := range trienodes { + hasher.Reset() + hasher.Write(trienode) + hasher.Read(hash) + if got, want := hash, tc.expHashes[i]; !bytes.Equal(got, want[:]) { + fmt.Printf("hash %d wrong, got %#x, want %#x\n", i, got, want) + err = fmt.Errorf("hash %d wrong, got %#x, want %#x", i, got, want) + } + } + return err +} diff --git a/cmd/devp2p/internal/ethtest/snapTypes.go b/cmd/devp2p/internal/ethtest/snapTypes.go new file mode 100644 index 00000000..6bcaa929 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/snapTypes.go @@ -0,0 +1,60 @@ +// Copyright 2022 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 ethtest + +import "github.com/ethereum/go-ethereum/eth/protocols/snap" + +// GetAccountRange represents an account range query. +type GetAccountRange snap.GetAccountRangePacket + +func (msg GetAccountRange) Code() int { return 33 } +func (msg GetAccountRange) ReqID() uint64 { return msg.ID } + +type AccountRange snap.AccountRangePacket + +func (msg AccountRange) Code() int { return 34 } +func (msg AccountRange) ReqID() uint64 { return msg.ID } + +type GetStorageRanges snap.GetStorageRangesPacket + +func (msg GetStorageRanges) Code() int { return 35 } +func (msg GetStorageRanges) ReqID() uint64 { return msg.ID } + +type StorageRanges snap.StorageRangesPacket + +func (msg StorageRanges) Code() int { return 36 } +func (msg StorageRanges) ReqID() uint64 { return msg.ID } + +type GetByteCodes snap.GetByteCodesPacket + +func (msg GetByteCodes) Code() int { return 37 } +func (msg GetByteCodes) ReqID() uint64 { return msg.ID } + +type ByteCodes snap.ByteCodesPacket + +func (msg ByteCodes) Code() int { return 38 } +func (msg ByteCodes) ReqID() uint64 { return msg.ID } + +type GetTrieNodes snap.GetTrieNodesPacket + +func (msg GetTrieNodes) Code() int { return 39 } +func (msg GetTrieNodes) ReqID() uint64 { return msg.ID } + +type TrieNodes snap.TrieNodesPacket + +func (msg TrieNodes) Code() int { return 40 } +func (msg TrieNodes) ReqID() uint64 { return msg.ID } diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go new file mode 100644 index 00000000..7059b4ba --- /dev/null +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -0,0 +1,559 @@ +// Copyright 2020 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 ethtest + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// Suite represents a structure used to test a node's conformance +// to the eth protocol. +type Suite struct { + Dest *enode.Node + + chain *Chain + fullChain *Chain +} + +// NewSuite creates and returns a new eth-test suite that can +// be used to test the given node against the given blockchain +// data. +func NewSuite(dest *enode.Node, chainfile string, genesisfile string) (*Suite, error) { + chain, err := loadChain(chainfile, genesisfile) + if err != nil { + return nil, err + } + return &Suite{ + Dest: dest, + chain: chain.Shorten(1000), + fullChain: chain, + }, nil +} + +func (s *Suite) EthTests() []utesting.Test { + return []utesting.Test{ + // status + {Name: "TestStatus", Fn: s.TestStatus}, + // get block headers + {Name: "TestGetBlockHeaders", Fn: s.TestGetBlockHeaders}, + {Name: "TestSimultaneousRequests", Fn: s.TestSimultaneousRequests}, + {Name: "TestSameRequestID", Fn: s.TestSameRequestID}, + {Name: "TestZeroRequestID", Fn: s.TestZeroRequestID}, + // get block bodies + {Name: "TestGetBlockBodies", Fn: s.TestGetBlockBodies}, + // broadcast + {Name: "TestBroadcast", Fn: s.TestBroadcast}, + {Name: "TestLargeAnnounce", Fn: s.TestLargeAnnounce}, + {Name: "TestOldAnnounce", Fn: s.TestOldAnnounce}, + {Name: "TestBlockHashAnnounce", Fn: s.TestBlockHashAnnounce}, + // malicious handshakes + status + {Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake}, + {Name: "TestMaliciousStatus", Fn: s.TestMaliciousStatus}, + // test transactions + {Name: "TestTransaction", Fn: s.TestTransaction}, + {Name: "TestMaliciousTx", Fn: s.TestMaliciousTx}, + {Name: "TestLargeTxRequest", Fn: s.TestLargeTxRequest}, + {Name: "TestNewPooledTxs", Fn: s.TestNewPooledTxs}, + } +} + +func (s *Suite) SnapTests() []utesting.Test { + return []utesting.Test{ + {Name: "TestSnapStatus", Fn: s.TestSnapStatus}, + {Name: "TestSnapAccountRange", Fn: s.TestSnapGetAccountRange}, + {Name: "TestSnapGetByteCodes", Fn: s.TestSnapGetByteCodes}, + {Name: "TestSnapGetTrieNodes", Fn: s.TestSnapTrieNodes}, + {Name: "TestSnapGetStorageRanges", Fn: s.TestSnapGetStorageRanges}, + } +} + +// TestStatus attempts to connect to the given node and exchange +// a status message with it on the eth protocol. +func (s *Suite) TestStatus(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } +} + +// TestGetBlockHeaders tests whether the given node can respond to +// an eth `GetBlockHeaders` request and that the response is accurate. +func (s *Suite) TestGetBlockHeaders(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // write request + req := &GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Hash: s.chain.blocks[1].Hash()}, + Amount: 2, + Skip: 1, + Reverse: false, + }, + } + headers, err := conn.headersRequest(req, s.chain, 33) + if err != nil { + t.Fatalf("could not get block headers: %v", err) + } + // check for correct headers + expected, err := s.chain.GetHeaders(req) + if err != nil { + t.Fatalf("failed to get headers for given request: %v", err) + } + if !headersMatch(expected, headers) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) + } +} + +// TestSimultaneousRequests sends two simultaneous `GetBlockHeader` requests from +// the same connection with different request IDs and checks to make sure the node +// responds with the correct headers per request. +func (s *Suite) TestSimultaneousRequests(t *utesting.T) { + // create a connection + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + + // create two requests + req1 := &GetBlockHeaders{ + RequestId: uint64(111), + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Hash: s.chain.blocks[1].Hash(), + }, + Amount: 2, + Skip: 1, + Reverse: false, + }, + } + req2 := &GetBlockHeaders{ + RequestId: uint64(222), + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Hash: s.chain.blocks[1].Hash(), + }, + Amount: 4, + Skip: 1, + Reverse: false, + }, + } + + // write the first request + if err := conn.Write(req1); err != nil { + t.Fatalf("failed to write to connection: %v", err) + } + // write the second request + if err := conn.Write(req2); err != nil { + t.Fatalf("failed to write to connection: %v", err) + } + + // wait for responses + msg := conn.waitForResponse(s.chain, timeout, req1.RequestId) + headers1, ok := msg.(*BlockHeaders) + if !ok { + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } + msg = conn.waitForResponse(s.chain, timeout, req2.RequestId) + headers2, ok := msg.(*BlockHeaders) + if !ok { + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } + + // check received headers for accuracy + expected1, err := s.chain.GetHeaders(req1) + if err != nil { + t.Fatalf("failed to get expected headers for request 1: %v", err) + } + expected2, err := s.chain.GetHeaders(req2) + if err != nil { + t.Fatalf("failed to get expected headers for request 2: %v", err) + } + if !headersMatch(expected1, headers1.BlockHeadersPacket) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected1, headers1) + } + if !headersMatch(expected2, headers2.BlockHeadersPacket) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected2, headers2) + } +} + +// TestSameRequestID sends two requests with the same request ID to a +// single node. +func (s *Suite) TestSameRequestID(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // create requests + reqID := uint64(1234) + request1 := &GetBlockHeaders{ + RequestId: reqID, + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: 1, + }, + Amount: 2, + }, + } + request2 := &GetBlockHeaders{ + RequestId: reqID, + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: 33, + }, + Amount: 2, + }, + } + + // write the requests + if err = conn.Write(request1); err != nil { + t.Fatalf("failed to write to connection: %v", err) + } + if err = conn.Write(request2); err != nil { + t.Fatalf("failed to write to connection: %v", err) + } + + // wait for responses + msg := conn.waitForResponse(s.chain, timeout, reqID) + headers1, ok := msg.(*BlockHeaders) + if !ok { + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } + msg = conn.waitForResponse(s.chain, timeout, reqID) + headers2, ok := msg.(*BlockHeaders) + if !ok { + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } + + // check if headers match + expected1, err := s.chain.GetHeaders(request1) + if err != nil { + t.Fatalf("failed to get expected block headers: %v", err) + } + expected2, err := s.chain.GetHeaders(request2) + if err != nil { + t.Fatalf("failed to get expected block headers: %v", err) + } + if !headersMatch(expected1, headers1.BlockHeadersPacket) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected1, headers1) + } + if !headersMatch(expected2, headers2.BlockHeadersPacket) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected2, headers2) + } +} + +// TestZeroRequestID checks that a message with a request ID of zero is still handled +// by the node. +func (s *Suite) TestZeroRequestID(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + req := &GetBlockHeaders{ + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{Number: 0}, + Amount: 2, + }, + } + headers, err := conn.headersRequest(req, s.chain, 0) + if err != nil { + t.Fatalf("failed to get block headers: %v", err) + } + expected, err := s.chain.GetHeaders(req) + if err != nil { + t.Fatalf("failed to get expected block headers: %v", err) + } + if !headersMatch(expected, headers) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) + } +} + +// TestGetBlockBodies tests whether the given node can respond to +// a `GetBlockBodies` request and that the response is accurate. +func (s *Suite) TestGetBlockBodies(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // create block bodies request + req := &GetBlockBodies{ + RequestId: uint64(55), + GetBlockBodiesPacket: eth.GetBlockBodiesPacket{ + s.chain.blocks[54].Hash(), + s.chain.blocks[75].Hash(), + }, + } + if err := conn.Write(req); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + // wait for block bodies response + msg := conn.waitForResponse(s.chain, timeout, req.RequestId) + resp, ok := msg.(*BlockBodies) + if !ok { + t.Fatalf("unexpected: %s", pretty.Sdump(msg)) + } + bodies := resp.BlockBodiesPacket + t.Logf("received %d block bodies", len(bodies)) + if len(bodies) != len(req.GetBlockBodiesPacket) { + t.Fatalf("wrong bodies in response: expected %d bodies, "+ + "got %d", len(req.GetBlockBodiesPacket), len(bodies)) + } +} + +// TestBroadcast tests whether a block announcement is correctly +// propagated to the node's peers. +func (s *Suite) TestBroadcast(t *utesting.T) { + if err := s.sendNextBlock(); err != nil { + t.Fatalf("block broadcast failed: %v", err) + } +} + +// TestLargeAnnounce tests the announcement mechanism with a large block. +func (s *Suite) TestLargeAnnounce(t *utesting.T) { + nextBlock := len(s.chain.blocks) + blocks := []*NewBlock{ + { + Block: largeBlock(), + TD: s.fullChain.TotalDifficultyAt(nextBlock), + }, + { + Block: s.fullChain.blocks[nextBlock], + TD: largeNumber(2), + }, + { + Block: largeBlock(), + TD: largeNumber(2), + }, + } + + for i, blockAnnouncement := range blocks[0:3] { + t.Logf("Testing malicious announcement: %v\n", i) + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + if err := conn.Write(blockAnnouncement); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + // Invalid announcement, check that peer disconnected + switch msg := conn.readAndServe(s.chain, 8*time.Second).(type) { + case *Disconnect: + case *Error: + break + default: + t.Fatalf("unexpected: %s wanted disconnect", pretty.Sdump(msg)) + } + conn.Close() + } + // Test the last block as a valid block + if err := s.sendNextBlock(); err != nil { + t.Fatalf("failed to broadcast next block: %v", err) + } +} + +// TestOldAnnounce tests the announcement mechanism with an old block. +func (s *Suite) TestOldAnnounce(t *utesting.T) { + if err := s.oldAnnounce(); err != nil { + t.Fatal(err) + } +} + +// TestBlockHashAnnounce sends a new block hash announcement and expects +// the node to perform a `GetBlockHeaders` request. +func (s *Suite) TestBlockHashAnnounce(t *utesting.T) { + if err := s.hashAnnounce(); err != nil { + t.Fatalf("block hash announcement failed: %v", err) + } +} + +// TestMaliciousHandshake tries to send malicious data during the handshake. +func (s *Suite) TestMaliciousHandshake(t *utesting.T) { + if err := s.maliciousHandshakes(t); err != nil { + t.Fatal(err) + } +} + +// TestMaliciousStatus sends a status package with a large total difficulty. +func (s *Suite) TestMaliciousStatus(t *utesting.T) { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + + if err := s.maliciousStatus(conn); err != nil { + t.Fatal(err) + } +} + +// TestTransaction sends a valid transaction to the node and +// checks if the transaction gets propagated. +func (s *Suite) TestTransaction(t *utesting.T) { + if err := s.sendSuccessfulTxs(t); err != nil { + t.Fatal(err) + } +} + +// TestMaliciousTx sends several invalid transactions and tests whether +// the node will propagate them. +func (s *Suite) TestMaliciousTx(t *utesting.T) { + if err := s.sendMaliciousTxs(t); err != nil { + t.Fatal(err) + } +} + +// TestLargeTxRequest tests whether a node can fulfill a large GetPooledTransactions +// request. +func (s *Suite) TestLargeTxRequest(t *utesting.T) { + // send the next block to ensure the node is no longer syncing and + // is able to accept txs + if err := s.sendNextBlock(); err != nil { + t.Fatalf("failed to send next block: %v", err) + } + // send 2000 transactions to the node + hashMap, txs, err := generateTxs(s, 2000) + if err != nil { + t.Fatalf("failed to generate transactions: %v", err) + } + if err = sendMultipleSuccessfulTxs(t, s, txs); err != nil { + t.Fatalf("failed to send multiple txs: %v", err) + } + // set up connection to receive to ensure node is peered with the receiving connection + // before tx request is sent + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + // create and send pooled tx request + hashes := make([]common.Hash, 0) + for _, hash := range hashMap { + hashes = append(hashes, hash) + } + getTxReq := &GetPooledTransactions{ + RequestId: 1234, + GetPooledTransactionsPacket: hashes, + } + if err = conn.Write(getTxReq); err != nil { + t.Fatalf("could not write to conn: %v", err) + } + // check that all received transactions match those that were sent to node + switch msg := conn.waitForResponse(s.chain, timeout, getTxReq.RequestId).(type) { + case *PooledTransactions: + for _, gotTx := range msg.PooledTransactionsPacket { + if _, exists := hashMap[gotTx.Hash()]; !exists { + t.Fatalf("unexpected tx received: %v", gotTx.Hash()) + } + } + default: + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } +} + +// TestNewPooledTxs tests whether a node will do a GetPooledTransactions +// request upon receiving a NewPooledTransactionHashes announcement. +func (s *Suite) TestNewPooledTxs(t *utesting.T) { + // send the next block to ensure the node is no longer syncing and + // is able to accept txs + if err := s.sendNextBlock(); err != nil { + t.Fatalf("failed to send next block: %v", err) + } + + // generate 50 txs + hashMap, _, err := generateTxs(s, 50) + if err != nil { + t.Fatalf("failed to generate transactions: %v", err) + } + + // create new pooled tx hashes announcement + hashes := make([]common.Hash, 0) + for _, hash := range hashMap { + hashes = append(hashes, hash) + } + announce := NewPooledTransactionHashes(hashes) + + // send announcement + conn, err := s.dial() + if err != nil { + t.Fatalf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + if err = conn.Write(announce); err != nil { + t.Fatalf("failed to write to connection: %v", err) + } + + // wait for GetPooledTxs request + for { + msg := conn.readAndServe(s.chain, timeout) + switch msg := msg.(type) { + case *GetPooledTransactions: + if len(msg.GetPooledTransactionsPacket) != len(hashes) { + t.Fatalf("unexpected number of txs requested: wanted %d, got %d", len(hashes), len(msg.GetPooledTransactionsPacket)) + } + return + // ignore propagated txs from previous tests + case *NewPooledTransactionHashes: + continue + // ignore block announcements from previous tests + case *NewBlockHashes: + continue + case *NewBlock: + continue + default: + t.Fatalf("unexpected %s", pretty.Sdump(msg)) + } + } +} diff --git a/cmd/devp2p/internal/ethtest/suite_test.go b/cmd/devp2p/internal/ethtest/suite_test.go new file mode 100644 index 00000000..8a2b132f --- /dev/null +++ b/cmd/devp2p/internal/ethtest/suite_test.go @@ -0,0 +1,128 @@ +// Copyright 2021 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 ethtest + +import ( + "os" + "testing" + "time" + + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" +) + +var ( + genesisFile = "./testdata/genesis.json" + halfchainFile = "./testdata/halfchain.rlp" + fullchainFile = "./testdata/chain.rlp" +) + +func TestEthSuite(t *testing.T) { + geth, err := runGeth() + if err != nil { + t.Fatalf("could not run geth: %v", err) + } + defer geth.Close() + + suite, err := NewSuite(geth.Server().Self(), fullchainFile, genesisFile) + if err != nil { + t.Fatalf("could not create new test suite: %v", err) + } + for _, test := range suite.EthTests() { + t.Run(test.Name, func(t *testing.T) { + result := utesting.RunTAP([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) + if result[0].Failed { + t.Fatal() + } + }) + } +} + +func TestSnapSuite(t *testing.T) { + geth, err := runGeth() + if err != nil { + t.Fatalf("could not run geth: %v", err) + } + defer geth.Close() + + suite, err := NewSuite(geth.Server().Self(), fullchainFile, genesisFile) + if err != nil { + t.Fatalf("could not create new test suite: %v", err) + } + for _, test := range suite.SnapTests() { + t.Run(test.Name, func(t *testing.T) { + result := utesting.RunTAP([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) + if result[0].Failed { + t.Fatal() + } + }) + } +} + +// runGeth creates and starts a geth node +func runGeth() (*node.Node, error) { + stack, err := node.New(&node.Config{ + P2P: p2p.Config{ + ListenAddr: "127.0.0.1:0", + NoDiscovery: true, + MaxPeers: 10, // in case a test requires multiple connections, can be changed in the future + NoDial: true, + }, + }) + if err != nil { + return nil, err + } + + err = setupGeth(stack) + if err != nil { + stack.Close() + return nil, err + } + if err = stack.Start(); err != nil { + stack.Close() + return nil, err + } + return stack, nil +} + +func setupGeth(stack *node.Node) error { + chain, err := loadChain(halfchainFile, genesisFile) + if err != nil { + return err + } + + backend, err := eth.New(stack, ðconfig.Config{ + Genesis: &chain.genesis, + NetworkId: chain.genesis.Config.ChainID.Uint64(), // 19763 + DatabaseCache: 10, + TrieCleanCache: 10, + TrieCleanCacheJournal: "", + TrieCleanCacheRejournal: 60 * time.Minute, + TrieDirtyCache: 16, + TrieTimeout: 60 * time.Minute, + SnapshotCache: 10, + }) + if err != nil { + return err + } + + _, err = backend.BlockChain().InsertChain(chain.blocks[1:]) + return err +} diff --git a/cmd/devp2p/internal/ethtest/testdata/chain.rlp b/cmd/devp2p/internal/ethtest/testdata/chain.rlp new file mode 100644 index 00000000..5ebc2f3b Binary files /dev/null and b/cmd/devp2p/internal/ethtest/testdata/chain.rlp differ diff --git a/cmd/devp2p/internal/ethtest/testdata/genesis.json b/cmd/devp2p/internal/ethtest/testdata/genesis.json new file mode 100644 index 00000000..d8b5d225 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/testdata/genesis.json @@ -0,0 +1,26 @@ +{ + "config": { + "chainId": 19763, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "ethash": {} + }, + "nonce": "0xdeadbeefdeadbeef", + "timestamp": "0x0", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x80000000", + "difficulty": "0x20000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "71562b71999873db5b286df957af199ec94617f7": { + "balance": "0xffffffffffffffffffffffffff" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/cmd/devp2p/internal/ethtest/testdata/halfchain.rlp b/cmd/devp2p/internal/ethtest/testdata/halfchain.rlp new file mode 100644 index 00000000..1a820734 Binary files /dev/null and b/cmd/devp2p/internal/ethtest/testdata/halfchain.rlp differ diff --git a/cmd/devp2p/internal/ethtest/transaction.go b/cmd/devp2p/internal/ethtest/transaction.go new file mode 100644 index 00000000..c4748bf8 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/transaction.go @@ -0,0 +1,411 @@ +// Copyright 2020 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 ethtest + +import ( + "fmt" + "math/big" + "strings" + "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/internal/utesting" + "github.com/ethereum/go-ethereum/params" +) + +//var faucetAddr = common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7") +var faucetKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + +func (s *Suite) sendSuccessfulTxs(t *utesting.T) error { + tests := []*types.Transaction{ + getNextTxFromChain(s), + unknownTx(s), + } + for i, tx := range tests { + if tx == nil { + return fmt.Errorf("could not find tx to send") + } + t.Logf("Testing tx propagation %d: sending tx %v %v %v\n", i, tx.Hash().String(), tx.GasPrice(), tx.Gas()) + // get previous tx if exists for reference in case of old tx propagation + var prevTx *types.Transaction + if i != 0 { + prevTx = tests[i-1] + } + // write tx to connection + if err := sendSuccessfulTx(s, tx, prevTx); err != nil { + return fmt.Errorf("send successful tx test failed: %v", err) + } + } + return nil +} + +func sendSuccessfulTx(s *Suite, tx *types.Transaction, prevTx *types.Transaction) error { + sendConn, recvConn, err := s.createSendAndRecvConns() + if err != nil { + return err + } + defer sendConn.Close() + defer recvConn.Close() + if err = sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + // Send the transaction + if err = sendConn.Write(&Transactions{tx}); err != nil { + return fmt.Errorf("failed to write to connection: %v", err) + } + // peer receiving connection to node + if err = recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + + // update last nonce seen + nonce = tx.Nonce() + + // Wait for the transaction announcement + for { + switch msg := recvConn.readAndServe(s.chain, timeout).(type) { + case *Transactions: + recTxs := *msg + // if you receive an old tx propagation, read from connection again + if len(recTxs) == 1 && prevTx != nil { + if recTxs[0] == prevTx { + continue + } + } + for _, gotTx := range recTxs { + if gotTx.Hash() == tx.Hash() { + // Ok + return nil + } + } + return fmt.Errorf("missing transaction: got %v missing %v", recTxs, tx.Hash()) + case *NewPooledTransactionHashes: + txHashes := *msg + // if you receive an old tx propagation, read from connection again + if len(txHashes) == 1 && prevTx != nil { + if txHashes[0] == prevTx.Hash() { + continue + } + } + for _, gotHash := range txHashes { + if gotHash == tx.Hash() { + // Ok + return nil + } + } + return fmt.Errorf("missing transaction announcement: got %v missing %v", txHashes, tx.Hash()) + default: + return fmt.Errorf("unexpected message in sendSuccessfulTx: %s", pretty.Sdump(msg)) + } + } +} + +func (s *Suite) sendMaliciousTxs(t *utesting.T) error { + badTxs := []*types.Transaction{ + getOldTxFromChain(s), + invalidNonceTx(s), + hugeAmount(s), + hugeGasPrice(s), + hugeData(s), + } + + // setup receiving connection before sending malicious txs + recvConn, err := s.dial() + if err != nil { + return fmt.Errorf("dial failed: %v", err) + } + defer recvConn.Close() + if err = recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + + for i, tx := range badTxs { + t.Logf("Testing malicious tx propagation: %v\n", i) + if err = sendMaliciousTx(s, tx); err != nil { + return fmt.Errorf("malicious tx test failed:\ntx: %v\nerror: %v", tx, err) + } + } + // check to make sure bad txs aren't propagated + return checkMaliciousTxPropagation(s, badTxs, recvConn) +} + +func sendMaliciousTx(s *Suite, tx *types.Transaction) error { + conn, err := s.dial() + if err != nil { + return fmt.Errorf("dial failed: %v", err) + } + defer conn.Close() + if err = conn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + + // write malicious tx + if err = conn.Write(&Transactions{tx}); err != nil { + return fmt.Errorf("failed to write to connection: %v", err) + } + return nil +} + +var nonce = uint64(99) + +// sendMultipleSuccessfulTxs sends the given transactions to the node and +// expects the node to accept and propagate them. +func sendMultipleSuccessfulTxs(t *utesting.T, s *Suite, txs []*types.Transaction) error { + txMsg := Transactions(txs) + t.Logf("sending %d txs\n", len(txs)) + + sendConn, recvConn, err := s.createSendAndRecvConns() + if err != nil { + return err + } + defer sendConn.Close() + defer recvConn.Close() + if err = sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + if err = recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) + } + + // Send the transactions + if err = sendConn.Write(&txMsg); err != nil { + return fmt.Errorf("failed to write message to connection: %v", err) + } + + // update nonce + nonce = txs[len(txs)-1].Nonce() + + // Wait for the transaction announcement(s) and make sure all sent txs are being propagated. + // all txs should be announced within 3 announcements. + recvHashes := make([]common.Hash, 0) + + for i := 0; i < 3; i++ { + switch msg := recvConn.readAndServe(s.chain, timeout).(type) { + case *Transactions: + for _, tx := range *msg { + recvHashes = append(recvHashes, tx.Hash()) + } + case *NewPooledTransactionHashes: + recvHashes = append(recvHashes, *msg...) + default: + if !strings.Contains(pretty.Sdump(msg), "i/o timeout") { + return fmt.Errorf("unexpected message while waiting to receive txs: %s", pretty.Sdump(msg)) + } + } + // break once all 2000 txs have been received + if len(recvHashes) == 2000 { + break + } + if len(recvHashes) > 0 { + _, missingTxs := compareReceivedTxs(recvHashes, txs) + if len(missingTxs) > 0 { + continue + } else { + t.Logf("successfully received all %d txs", len(txs)) + return nil + } + } + } + _, missingTxs := compareReceivedTxs(recvHashes, txs) + if len(missingTxs) > 0 { + for _, missing := range missingTxs { + t.Logf("missing tx: %v", missing.Hash()) + } + return fmt.Errorf("missing %d txs", len(missingTxs)) + } + return nil +} + +// checkMaliciousTxPropagation checks whether the given malicious transactions were +// propagated by the node. +func checkMaliciousTxPropagation(s *Suite, txs []*types.Transaction, conn *Conn) error { + switch msg := conn.readAndServe(s.chain, time.Second*8).(type) { + case *Transactions: + // check to see if any of the failing txs were in the announcement + recvTxs := make([]common.Hash, len(*msg)) + for i, recvTx := range *msg { + recvTxs[i] = recvTx.Hash() + } + badTxs, _ := compareReceivedTxs(recvTxs, txs) + if len(badTxs) > 0 { + return fmt.Errorf("received %d bad txs: \n%v", len(badTxs), badTxs) + } + case *NewPooledTransactionHashes: + badTxs, _ := compareReceivedTxs(*msg, txs) + if len(badTxs) > 0 { + return fmt.Errorf("received %d bad txs: \n%v", len(badTxs), badTxs) + } + case *Error: + // Transaction should not be announced -> wait for timeout + return nil + default: + return fmt.Errorf("unexpected message in sendFailingTx: %s", pretty.Sdump(msg)) + } + return nil +} + +// compareReceivedTxs compares the received set of txs against the given set of txs, +// returning both the set received txs that were present within the given txs, and +// the set of txs that were missing from the set of received txs +func compareReceivedTxs(recvTxs []common.Hash, txs []*types.Transaction) (present []*types.Transaction, missing []*types.Transaction) { + // create a map of the hashes received from node + recvHashes := make(map[common.Hash]common.Hash) + for _, hash := range recvTxs { + recvHashes[hash] = hash + } + + // collect present txs and missing txs separately + present = make([]*types.Transaction, 0) + missing = make([]*types.Transaction, 0) + for _, tx := range txs { + if _, exists := recvHashes[tx.Hash()]; exists { + present = append(present, tx) + } else { + missing = append(missing, tx) + } + } + return present, missing +} + +func unknownTx(s *Suite) *types.Transaction { + tx := getNextTxFromChain(s) + if tx == nil { + return nil + } + var to common.Address + if tx.To() != nil { + to = *tx.To() + } + txNew := types.NewTransaction(tx.Nonce()+1, to, tx.Value(), tx.Gas(), tx.GasPrice(), tx.Data()) + return signWithFaucet(s.chain.chainConfig, txNew) +} + +func getNextTxFromChain(s *Suite) *types.Transaction { + // Get a new transaction + for _, blocks := range s.fullChain.blocks[s.chain.Len():] { + txs := blocks.Transactions() + if txs.Len() != 0 { + return txs[0] + } + } + return nil +} + +func generateTxs(s *Suite, numTxs int) (map[common.Hash]common.Hash, []*types.Transaction, error) { + txHashMap := make(map[common.Hash]common.Hash, numTxs) + txs := make([]*types.Transaction, numTxs) + + nextTx := getNextTxFromChain(s) + if nextTx == nil { + return nil, nil, fmt.Errorf("failed to get the next transaction") + } + gas := nextTx.Gas() + + nonce = nonce + 1 + // generate txs + for i := 0; i < numTxs; i++ { + tx := generateTx(s.chain.chainConfig, nonce, gas) + if tx == nil { + return nil, nil, fmt.Errorf("failed to get the next transaction") + } + txHashMap[tx.Hash()] = tx.Hash() + txs[i] = tx + nonce = nonce + 1 + } + return txHashMap, txs, nil +} + +func generateTx(chainConfig *params.ChainConfig, nonce uint64, gas uint64) *types.Transaction { + var to common.Address + tx := types.NewTransaction(nonce, to, big.NewInt(1), gas, big.NewInt(1), []byte{}) + return signWithFaucet(chainConfig, tx) +} + +func getOldTxFromChain(s *Suite) *types.Transaction { + for _, blocks := range s.fullChain.blocks[:s.chain.Len()-1] { + txs := blocks.Transactions() + if txs.Len() != 0 { + return txs[0] + } + } + return nil +} + +func invalidNonceTx(s *Suite) *types.Transaction { + tx := getNextTxFromChain(s) + if tx == nil { + return nil + } + var to common.Address + if tx.To() != nil { + to = *tx.To() + } + txNew := types.NewTransaction(tx.Nonce()-2, to, tx.Value(), tx.Gas(), tx.GasPrice(), tx.Data()) + return signWithFaucet(s.chain.chainConfig, txNew) +} + +func hugeAmount(s *Suite) *types.Transaction { + tx := getNextTxFromChain(s) + if tx == nil { + return nil + } + amount := largeNumber(2) + var to common.Address + if tx.To() != nil { + to = *tx.To() + } + txNew := types.NewTransaction(tx.Nonce(), to, amount, tx.Gas(), tx.GasPrice(), tx.Data()) + return signWithFaucet(s.chain.chainConfig, txNew) +} + +func hugeGasPrice(s *Suite) *types.Transaction { + tx := getNextTxFromChain(s) + if tx == nil { + return nil + } + gasPrice := largeNumber(2) + var to common.Address + if tx.To() != nil { + to = *tx.To() + } + txNew := types.NewTransaction(tx.Nonce(), to, tx.Value(), tx.Gas(), gasPrice, tx.Data()) + return signWithFaucet(s.chain.chainConfig, txNew) +} + +func hugeData(s *Suite) *types.Transaction { + tx := getNextTxFromChain(s) + if tx == nil { + return nil + } + var to common.Address + if tx.To() != nil { + to = *tx.To() + } + txNew := types.NewTransaction(tx.Nonce(), to, tx.Value(), tx.Gas(), tx.GasPrice(), largeBuffer(2)) + return signWithFaucet(s.chain.chainConfig, txNew) +} + +func signWithFaucet(chainConfig *params.ChainConfig, tx *types.Transaction) *types.Transaction { + signer := types.LatestSigner(chainConfig) + signedTx, err := types.SignTx(tx, signer, faucetKey) + if err != nil { + return nil + } + return signedTx +} diff --git a/cmd/devp2p/internal/ethtest/types.go b/cmd/devp2p/internal/ethtest/types.go new file mode 100644 index 00000000..2c5cb94c --- /dev/null +++ b/cmd/devp2p/internal/ethtest/types.go @@ -0,0 +1,279 @@ +// Copyright 2020 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 ethtest + +import ( + "crypto/ecdsa" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/rlpx" + "github.com/ethereum/go-ethereum/rlp" +) + +type Message interface { + Code() int + ReqID() uint64 +} + +type Error struct { + err error +} + +func (e *Error) Unwrap() error { return e.err } +func (e *Error) Error() string { return e.err.Error() } +func (e *Error) String() string { return e.Error() } + +func (e *Error) Code() int { return -1 } +func (e *Error) ReqID() uint64 { return 0 } + +func errorf(format string, args ...interface{}) *Error { + return &Error{fmt.Errorf(format, args...)} +} + +// Hello is the RLP structure of the protocol handshake. +type Hello struct { + Version uint64 + Name string + Caps []p2p.Cap + ListenPort uint64 + ID []byte // secp256k1 public key + + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` +} + +func (msg Hello) Code() int { return 0x00 } +func (msg Hello) ReqID() uint64 { return 0 } + +// Disconnect is the RLP structure for a disconnect message. +type Disconnect struct { + Reason p2p.DiscReason +} + +func (msg Disconnect) Code() int { return 0x01 } +func (msg Disconnect) ReqID() uint64 { return 0 } + +type Ping struct{} + +func (msg Ping) Code() int { return 0x02 } +func (msg Ping) ReqID() uint64 { return 0 } + +type Pong struct{} + +func (msg Pong) Code() int { return 0x03 } +func (msg Pong) ReqID() uint64 { return 0 } + +// Status is the network packet for the status message for eth/64 and later. +type Status eth.StatusPacket + +func (msg Status) Code() int { return 16 } +func (msg Status) ReqID() uint64 { return 0 } + +// NewBlockHashes is the network packet for the block announcements. +type NewBlockHashes eth.NewBlockHashesPacket + +func (msg NewBlockHashes) Code() int { return 17 } +func (msg NewBlockHashes) ReqID() uint64 { return 0 } + +type Transactions eth.TransactionsPacket + +func (msg Transactions) Code() int { return 18 } +func (msg Transactions) ReqID() uint64 { return 18 } + +// GetBlockHeaders represents a block header query. +type GetBlockHeaders eth.GetBlockHeadersPacket66 + +func (msg GetBlockHeaders) Code() int { return 19 } +func (msg GetBlockHeaders) ReqID() uint64 { return msg.RequestId } + +type BlockHeaders eth.BlockHeadersPacket66 + +func (msg BlockHeaders) Code() int { return 20 } +func (msg BlockHeaders) ReqID() uint64 { return msg.RequestId } + +// GetBlockBodies represents a GetBlockBodies request +type GetBlockBodies eth.GetBlockBodiesPacket66 + +func (msg GetBlockBodies) Code() int { return 21 } +func (msg GetBlockBodies) ReqID() uint64 { return msg.RequestId } + +// BlockBodies is the network packet for block content distribution. +type BlockBodies eth.BlockBodiesPacket66 + +func (msg BlockBodies) Code() int { return 22 } +func (msg BlockBodies) ReqID() uint64 { return msg.RequestId } + +// NewBlock is the network packet for the block propagation message. +type NewBlock eth.NewBlockPacket + +func (msg NewBlock) Code() int { return 23 } +func (msg NewBlock) ReqID() uint64 { return 0 } + +// NewPooledTransactionHashes is the network packet for the tx hash propagation message. +type NewPooledTransactionHashes eth.NewPooledTransactionHashesPacket + +func (msg NewPooledTransactionHashes) Code() int { return 24 } +func (msg NewPooledTransactionHashes) ReqID() uint64 { return 0 } + +type GetPooledTransactions eth.GetPooledTransactionsPacket66 + +func (msg GetPooledTransactions) Code() int { return 25 } +func (msg GetPooledTransactions) ReqID() uint64 { return msg.RequestId } + +type PooledTransactions eth.PooledTransactionsPacket66 + +func (msg PooledTransactions) Code() int { return 26 } +func (msg PooledTransactions) ReqID() uint64 { return msg.RequestId } + +// Conn represents an individual connection with a peer +type Conn struct { + *rlpx.Conn + ourKey *ecdsa.PrivateKey + negotiatedProtoVersion uint + negotiatedSnapProtoVersion uint + ourHighestProtoVersion uint + ourHighestSnapProtoVersion uint + caps []p2p.Cap +} + +// Read reads an eth66 packet from the connection. +func (c *Conn) Read() Message { + code, rawData, _, err := c.Conn.Read() + if err != nil { + return errorf("could not read from connection: %v", err) + } + + var msg Message + switch int(code) { + case (Hello{}).Code(): + msg = new(Hello) + case (Ping{}).Code(): + msg = new(Ping) + case (Pong{}).Code(): + msg = new(Pong) + case (Disconnect{}).Code(): + msg = new(Disconnect) + case (Status{}).Code(): + msg = new(Status) + case (GetBlockHeaders{}).Code(): + ethMsg := new(eth.GetBlockHeadersPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*GetBlockHeaders)(ethMsg) + case (BlockHeaders{}).Code(): + ethMsg := new(eth.BlockHeadersPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*BlockHeaders)(ethMsg) + case (GetBlockBodies{}).Code(): + ethMsg := new(eth.GetBlockBodiesPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*GetBlockBodies)(ethMsg) + case (BlockBodies{}).Code(): + ethMsg := new(eth.BlockBodiesPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*BlockBodies)(ethMsg) + case (NewBlock{}).Code(): + msg = new(NewBlock) + case (NewBlockHashes{}).Code(): + msg = new(NewBlockHashes) + case (Transactions{}).Code(): + msg = new(Transactions) + case (NewPooledTransactionHashes{}).Code(): + msg = new(NewPooledTransactionHashes) + case (GetPooledTransactions{}.Code()): + ethMsg := new(eth.GetPooledTransactionsPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*GetPooledTransactions)(ethMsg) + case (PooledTransactions{}.Code()): + ethMsg := new(eth.PooledTransactionsPacket66) + if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return (*PooledTransactions)(ethMsg) + default: + msg = errorf("invalid message code: %d", code) + } + + if msg != nil { + if err := rlp.DecodeBytes(rawData, msg); err != nil { + return errorf("could not rlp decode message: %v", err) + } + return msg + } + return errorf("invalid message: %s", string(rawData)) +} + +// Write writes a eth packet to the connection. +func (c *Conn) Write(msg Message) error { + payload, err := rlp.EncodeToBytes(msg) + if err != nil { + return err + } + _, err = c.Conn.Write(uint64(msg.Code()), payload) + return err +} + +// ReadSnap reads a snap/1 response with the given id from the connection. +func (c *Conn) ReadSnap(id uint64) (Message, error) { + respId := id + 1 + start := time.Now() + for respId != id && time.Since(start) < timeout { + code, rawData, _, err := c.Conn.Read() + if err != nil { + return nil, fmt.Errorf("could not read from connection: %v", err) + } + var snpMsg interface{} + switch int(code) { + case (GetAccountRange{}).Code(): + snpMsg = new(GetAccountRange) + case (AccountRange{}).Code(): + snpMsg = new(AccountRange) + case (GetStorageRanges{}).Code(): + snpMsg = new(GetStorageRanges) + case (StorageRanges{}).Code(): + snpMsg = new(StorageRanges) + case (GetByteCodes{}).Code(): + snpMsg = new(GetByteCodes) + case (ByteCodes{}).Code(): + snpMsg = new(ByteCodes) + case (GetTrieNodes{}).Code(): + snpMsg = new(GetTrieNodes) + case (TrieNodes{}).Code(): + snpMsg = new(TrieNodes) + default: + //return nil, fmt.Errorf("invalid message code: %d", code) + continue + } + if err := rlp.DecodeBytes(rawData, snpMsg); err != nil { + return nil, fmt.Errorf("could not rlp decode message: %v", err) + } + return snpMsg.(Message), nil + } + return nil, fmt.Errorf("request timed out") +} diff --git a/cmd/devp2p/internal/v4test/discv4tests.go b/cmd/devp2p/internal/v4test/discv4tests.go new file mode 100644 index 00000000..5f340ed9 --- /dev/null +++ b/cmd/devp2p/internal/v4test/discv4tests.go @@ -0,0 +1,500 @@ +// Copyright 2020 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 v4test + +import ( + "bytes" + "crypto/rand" + "fmt" + "net" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/p2p/discover/v4wire" +) + +const ( + expiration = 20 * time.Second + wrongPacket = 66 + macSize = 256 / 8 +) + +var ( + // Remote node under test + Remote string + // IP where the first tester is listening, port will be assigned + Listen1 string = "127.0.0.1" + // IP where the second tester is listening, port will be assigned + // Before running the test, you may have to `sudo ifconfig lo0 add 127.0.0.2` (on MacOS at least) + Listen2 string = "127.0.0.2" +) + +type pingWithJunk struct { + Version uint + From, To v4wire.Endpoint + Expiration uint64 + JunkData1 uint + JunkData2 []byte +} + +func (req *pingWithJunk) Name() string { return "PING/v4" } +func (req *pingWithJunk) Kind() byte { return v4wire.PingPacket } + +type pingWrongType struct { + Version uint + From, To v4wire.Endpoint + Expiration uint64 +} + +func (req *pingWrongType) Name() string { return "WRONG/v4" } +func (req *pingWrongType) Kind() byte { return wrongPacket } + +func futureExpiration() uint64 { + return uint64(time.Now().Add(expiration).Unix()) +} + +// This test just sends a PING packet and expects a response. +func BasicPing(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + pingHash := te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + if err := te.checkPingPong(pingHash); err != nil { + t.Fatal(err) + } +} + +// checkPingPong verifies that the remote side sends both a PONG with the +// correct hash, and a PING. +// The two packets do not have to be in any particular order. +func (te *testenv) checkPingPong(pingHash []byte) error { + var ( + pings int + pongs int + ) + for i := 0; i < 2; i++ { + reply, _, err := te.read(te.l1) + if err != nil { + return err + } + switch reply.Kind() { + case v4wire.PongPacket: + if err := te.checkPong(reply, pingHash); err != nil { + return err + } + pongs++ + case v4wire.PingPacket: + pings++ + default: + return fmt.Errorf("expected PING or PONG, got %v %v", reply.Name(), reply) + } + } + if pongs == 1 && pings == 1 { + return nil + } + return fmt.Errorf("expected 1 PING (got %d) and 1 PONG (got %d)", pings, pongs) +} + +// checkPong verifies that reply is a valid PONG matching the given ping hash, +// and a PING. The two packets do not have to be in any particular order. +func (te *testenv) checkPong(reply v4wire.Packet, pingHash []byte) error { + if reply == nil { + return fmt.Errorf("expected PONG reply, got nil") + } + if reply.Kind() != v4wire.PongPacket { + return fmt.Errorf("expected PONG reply, got %v %v", reply.Name(), reply) + } + pong := reply.(*v4wire.Pong) + if !bytes.Equal(pong.ReplyTok, pingHash) { + return fmt.Errorf("PONG reply token mismatch: got %x, want %x", pong.ReplyTok, pingHash) + } + if want := te.localEndpoint(te.l1); !want.IP.Equal(pong.To.IP) || want.UDP != pong.To.UDP { + return fmt.Errorf("PONG 'to' endpoint mismatch: got %+v, want %+v", pong.To, want) + } + if v4wire.Expired(pong.Expiration) { + return fmt.Errorf("PONG is expired (%v)", pong.Expiration) + } + return nil +} + +// This test sends a PING packet with wrong 'to' field and expects a PONG response. +func PingWrongTo(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")} + pingHash := te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: te.localEndpoint(te.l1), + To: wrongEndpoint, + Expiration: futureExpiration(), + }) + if err := te.checkPingPong(pingHash); err != nil { + t.Fatal(err) + } +} + +// This test sends a PING packet with wrong 'from' field and expects a PONG response. +func PingWrongFrom(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")} + pingHash := te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: wrongEndpoint, + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + + if err := te.checkPingPong(pingHash); err != nil { + t.Fatal(err) + } +} + +// This test sends a PING packet with additional data at the end and expects a PONG +// response. The remote node should respond because EIP-8 mandates ignoring additional +// trailing data. +func PingExtraData(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + pingHash := te.send(te.l1, &pingWithJunk{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + JunkData1: 42, + JunkData2: []byte{9, 8, 7, 6, 5, 4, 3, 2, 1}, + }) + + if err := te.checkPingPong(pingHash); err != nil { + t.Fatal(err) + } +} + +// This test sends a PING packet with additional data and wrong 'from' field +// and expects a PONG response. +func PingExtraDataWrongFrom(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")} + req := pingWithJunk{ + Version: 4, + From: wrongEndpoint, + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + JunkData1: 42, + JunkData2: []byte{9, 8, 7, 6, 5, 4, 3, 2, 1}, + } + pingHash := te.send(te.l1, &req) + if err := te.checkPingPong(pingHash); err != nil { + t.Fatal(err) + } +} + +// This test sends a PING packet with an expiration in the past. +// The remote node should not respond. +func PingPastExpiration(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: -futureExpiration(), + }) + + reply, _, _ := te.read(te.l1) + if reply != nil { + t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply) + } +} + +// This test sends an invalid packet. The remote node should not respond. +func WrongPacketType(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + te.send(te.l1, &pingWrongType{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + + reply, _, _ := te.read(te.l1) + if reply != nil { + t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply) + } +} + +// This test verifies that the default behaviour of ignoring 'from' fields is unaffected by +// the bonding process. After bonding, it pings the target with a different from endpoint. +func BondThenPingWithWrongFrom(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + bond(t, te) + + wrongEndpoint := v4wire.Endpoint{IP: net.ParseIP("192.0.2.0")} + pingHash := te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: wrongEndpoint, + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + if reply, _, err := te.read(te.l1); err != nil { + t.Fatal(err) + } else if err := te.checkPong(reply, pingHash); err != nil { + t.Fatal(err) + } +} + +// This test just sends FINDNODE. The remote node should not reply +// because the endpoint proof has not completed. +func FindnodeWithoutEndpointProof(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + req := v4wire.Findnode{Expiration: futureExpiration()} + rand.Read(req.Target[:]) + te.send(te.l1, &req) + + for { + reply, _, _ := te.read(te.l1) + if reply == nil { + // No response, all good + break + } + if reply.Kind() == v4wire.PingPacket { + continue // A ping is ok, just ignore it + } + t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply) + } +} + +// BasicFindnode sends a FINDNODE request after performing the endpoint +// proof. The remote node should respond. +func BasicFindnode(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + bond(t, te) + + findnode := v4wire.Findnode{Expiration: futureExpiration()} + rand.Read(findnode.Target[:]) + te.send(te.l1, &findnode) + + reply, _, err := te.read(te.l1) + if err != nil { + t.Fatal("read find nodes", err) + } + if reply.Kind() != v4wire.NeighborsPacket { + t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply) + } +} + +// This test sends an unsolicited NEIGHBORS packet after the endpoint proof, then sends +// FINDNODE to read the remote table. The remote node should not return the node contained +// in the unsolicited NEIGHBORS packet. +func UnsolicitedNeighbors(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + bond(t, te) + + // Send unsolicited NEIGHBORS response. + fakeKey, _ := crypto.GenerateKey() + encFakeKey := v4wire.EncodePubkey(&fakeKey.PublicKey) + neighbors := v4wire.Neighbors{ + Expiration: futureExpiration(), + Nodes: []v4wire.Node{{ + ID: encFakeKey, + IP: net.IP{1, 2, 3, 4}, + UDP: 30303, + TCP: 30303, + }}, + } + te.send(te.l1, &neighbors) + + // Check if the remote node included the fake node. + te.send(te.l1, &v4wire.Findnode{ + Expiration: futureExpiration(), + Target: encFakeKey, + }) + + reply, _, err := te.read(te.l1) + if err != nil { + t.Fatal("read find nodes", err) + } + if reply.Kind() != v4wire.NeighborsPacket { + t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply) + } + nodes := reply.(*v4wire.Neighbors).Nodes + if contains(nodes, encFakeKey) { + t.Fatal("neighbors response contains node from earlier unsolicited neighbors response") + } +} + +// This test sends FINDNODE with an expiration timestamp in the past. +// The remote node should not respond. +func FindnodePastExpiration(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + bond(t, te) + + findnode := v4wire.Findnode{Expiration: -futureExpiration()} + rand.Read(findnode.Target[:]) + te.send(te.l1, &findnode) + + for { + reply, _, _ := te.read(te.l1) + if reply == nil { + return + } else if reply.Kind() == v4wire.NeighborsPacket { + t.Fatal("Unexpected NEIGHBORS response for expired FINDNODE request") + } + } +} + +// bond performs the endpoint proof with the remote node. +func bond(t *utesting.T, te *testenv) { + te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + + var gotPing, gotPong bool + for !gotPing || !gotPong { + req, hash, err := te.read(te.l1) + if err != nil { + t.Fatal(err) + } + switch req.(type) { + case *v4wire.Ping: + te.send(te.l1, &v4wire.Pong{ + To: te.remoteEndpoint(), + ReplyTok: hash, + Expiration: futureExpiration(), + }) + gotPing = true + case *v4wire.Pong: + // TODO: maybe verify pong data here + gotPong = true + } + } +} + +// This test attempts to perform a traffic amplification attack against a +// 'victim' endpoint using FINDNODE. In this attack scenario, the attacker +// attempts to complete the endpoint proof non-interactively by sending a PONG +// with mismatching reply token from the 'victim' endpoint. The attack works if +// the remote node does not verify the PONG reply token field correctly. The +// attacker could then perform traffic amplification by sending many FINDNODE +// requests to the discovery node, which would reply to the 'victim' address. +func FindnodeAmplificationInvalidPongHash(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + // Send PING to start endpoint verification. + te.send(te.l1, &v4wire.Ping{ + Version: 4, + From: te.localEndpoint(te.l1), + To: te.remoteEndpoint(), + Expiration: futureExpiration(), + }) + + var gotPing, gotPong bool + for !gotPing || !gotPong { + req, _, err := te.read(te.l1) + if err != nil { + t.Fatal(err) + } + switch req.(type) { + case *v4wire.Ping: + // Send PONG from this node ID, but with invalid ReplyTok. + te.send(te.l1, &v4wire.Pong{ + To: te.remoteEndpoint(), + ReplyTok: make([]byte, macSize), + Expiration: futureExpiration(), + }) + gotPing = true + case *v4wire.Pong: + gotPong = true + } + } + + // Now send FINDNODE. The remote node should not respond because our + // PONG did not reference the PING hash. + findnode := v4wire.Findnode{Expiration: futureExpiration()} + rand.Read(findnode.Target[:]) + te.send(te.l1, &findnode) + + // If we receive a NEIGHBORS response, the attack worked and the test fails. + reply, _, _ := te.read(te.l1) + if reply != nil && reply.Kind() == v4wire.NeighborsPacket { + t.Error("Got neighbors") + } +} + +// This test attempts to perform a traffic amplification attack using FINDNODE. +// The attack works if the remote node does not verify the IP address of FINDNODE +// against the endpoint verification proof done by PING/PONG. +func FindnodeAmplificationWrongIP(t *utesting.T) { + te := newTestEnv(Remote, Listen1, Listen2) + defer te.close() + + // Do the endpoint proof from the l1 IP. + bond(t, te) + + // Now send FINDNODE from the same node ID, but different IP address. + // The remote node should not respond. + findnode := v4wire.Findnode{Expiration: futureExpiration()} + rand.Read(findnode.Target[:]) + te.send(te.l2, &findnode) + + // If we receive a NEIGHBORS response, the attack worked and the test fails. + reply, _, _ := te.read(te.l2) + if reply != nil { + t.Error("Got NEIGHORS response for FINDNODE from wrong IP") + } +} + +var AllTests = []utesting.Test{ + {Name: "Ping/Basic", Fn: BasicPing}, + {Name: "Ping/WrongTo", Fn: PingWrongTo}, + {Name: "Ping/WrongFrom", Fn: PingWrongFrom}, + {Name: "Ping/ExtraData", Fn: PingExtraData}, + {Name: "Ping/ExtraDataWrongFrom", Fn: PingExtraDataWrongFrom}, + {Name: "Ping/PastExpiration", Fn: PingPastExpiration}, + {Name: "Ping/WrongPacketType", Fn: WrongPacketType}, + {Name: "Ping/BondThenPingWithWrongFrom", Fn: BondThenPingWithWrongFrom}, + {Name: "Findnode/WithoutEndpointProof", Fn: FindnodeWithoutEndpointProof}, + {Name: "Findnode/BasicFindnode", Fn: BasicFindnode}, + {Name: "Findnode/UnsolicitedNeighbors", Fn: UnsolicitedNeighbors}, + {Name: "Findnode/PastExpiration", Fn: FindnodePastExpiration}, + {Name: "Amplification/InvalidPongHash", Fn: FindnodeAmplificationInvalidPongHash}, + {Name: "Amplification/WrongIP", Fn: FindnodeAmplificationWrongIP}, +} diff --git a/cmd/devp2p/internal/v4test/framework.go b/cmd/devp2p/internal/v4test/framework.go new file mode 100644 index 00000000..92865941 --- /dev/null +++ b/cmd/devp2p/internal/v4test/framework.go @@ -0,0 +1,123 @@ +// Copyright 2020 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 v4test + +import ( + "crypto/ecdsa" + "fmt" + "net" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/discover/v4wire" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +const waitTime = 300 * time.Millisecond + +type testenv struct { + l1, l2 net.PacketConn + key *ecdsa.PrivateKey + remote *enode.Node + remoteAddr *net.UDPAddr +} + +func newTestEnv(remote string, listen1, listen2 string) *testenv { + l1, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", listen1)) + if err != nil { + panic(err) + } + l2, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", listen2)) + if err != nil { + panic(err) + } + key, err := crypto.GenerateKey() + if err != nil { + panic(err) + } + node, err := enode.Parse(enode.ValidSchemes, remote) + if err != nil { + panic(err) + } + if node.IP() == nil || node.UDP() == 0 { + var ip net.IP + var tcpPort, udpPort int + if ip = node.IP(); ip == nil { + ip = net.ParseIP("127.0.0.1") + } + if tcpPort = node.TCP(); tcpPort == 0 { + tcpPort = 30303 + } + if udpPort = node.TCP(); udpPort == 0 { + udpPort = 30303 + } + node = enode.NewV4(node.Pubkey(), ip, tcpPort, udpPort) + } + addr := &net.UDPAddr{IP: node.IP(), Port: node.UDP()} + return &testenv{l1, l2, key, node, addr} +} + +func (te *testenv) close() { + te.l1.Close() + te.l2.Close() +} + +func (te *testenv) send(c net.PacketConn, req v4wire.Packet) []byte { + packet, hash, err := v4wire.Encode(te.key, req) + if err != nil { + panic(fmt.Errorf("can't encode %v packet: %v", req.Name(), err)) + } + if _, err := c.WriteTo(packet, te.remoteAddr); err != nil { + panic(fmt.Errorf("can't send %v: %v", req.Name(), err)) + } + return hash +} + +func (te *testenv) read(c net.PacketConn) (v4wire.Packet, []byte, error) { + buf := make([]byte, 2048) + if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil { + return nil, nil, err + } + n, _, err := c.ReadFrom(buf) + if err != nil { + return nil, nil, err + } + p, _, hash, err := v4wire.Decode(buf[:n]) + return p, hash, err +} + +func (te *testenv) localEndpoint(c net.PacketConn) v4wire.Endpoint { + addr := c.LocalAddr().(*net.UDPAddr) + return v4wire.Endpoint{ + IP: addr.IP.To4(), + UDP: uint16(addr.Port), + TCP: 0, + } +} + +func (te *testenv) remoteEndpoint() v4wire.Endpoint { + return v4wire.NewEndpoint(te.remoteAddr, 0) +} + +func contains(ns []v4wire.Node, key v4wire.Pubkey) bool { + for _, n := range ns { + if n.ID == key { + return true + } + } + return false +} diff --git a/cmd/devp2p/internal/v5test/discv5tests.go b/cmd/devp2p/internal/v5test/discv5tests.go new file mode 100644 index 00000000..7866498f --- /dev/null +++ b/cmd/devp2p/internal/v5test/discv5tests.go @@ -0,0 +1,377 @@ +// Copyright 2020 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 v5test + +import ( + "bytes" + "net" + "sync" + "time" + + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/p2p/discover/v5wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/netutil" +) + +// Suite is the discv5 test suite. +type Suite struct { + Dest *enode.Node + Listen1, Listen2 string // listening addresses +} + +func (s *Suite) listen1(log logger) (*conn, net.PacketConn) { + c := newConn(s.Dest, log) + l := c.listen(s.Listen1) + return c, l +} + +func (s *Suite) listen2(log logger) (*conn, net.PacketConn, net.PacketConn) { + c := newConn(s.Dest, log) + l1, l2 := c.listen(s.Listen1), c.listen(s.Listen2) + return c, l1, l2 +} + +func (s *Suite) AllTests() []utesting.Test { + return []utesting.Test{ + {Name: "Ping", Fn: s.TestPing}, + {Name: "PingLargeRequestID", Fn: s.TestPingLargeRequestID}, + {Name: "PingMultiIP", Fn: s.TestPingMultiIP}, + {Name: "PingHandshakeInterrupted", Fn: s.TestPingHandshakeInterrupted}, + {Name: "TalkRequest", Fn: s.TestTalkRequest}, + {Name: "FindnodeZeroDistance", Fn: s.TestFindnodeZeroDistance}, + {Name: "FindnodeResults", Fn: s.TestFindnodeResults}, + } +} + +// This test sends PING and expects a PONG response. +func (s *Suite) TestPing(t *utesting.T) { + conn, l1 := s.listen1(t) + defer conn.close() + + ping := &v5wire.Ping{ReqID: conn.nextReqID()} + switch resp := conn.reqresp(l1, ping).(type) { + case *v5wire.Pong: + checkPong(t, resp, ping, l1) + default: + t.Fatal("expected PONG, got", resp.Name()) + } +} + +func checkPong(t *utesting.T, pong *v5wire.Pong, ping *v5wire.Ping, c net.PacketConn) { + if !bytes.Equal(pong.ReqID, ping.ReqID) { + t.Fatalf("wrong request ID %x in PONG, want %x", pong.ReqID, ping.ReqID) + } + if !pong.ToIP.Equal(laddr(c).IP) { + t.Fatalf("wrong destination IP %v in PONG, want %v", pong.ToIP, laddr(c).IP) + } + if int(pong.ToPort) != laddr(c).Port { + t.Fatalf("wrong destination port %v in PONG, want %v", pong.ToPort, laddr(c).Port) + } +} + +// This test sends PING with a 9-byte request ID, which isn't allowed by the spec. +// The remote node should not respond. +func (s *Suite) TestPingLargeRequestID(t *utesting.T) { + conn, l1 := s.listen1(t) + defer conn.close() + + ping := &v5wire.Ping{ReqID: make([]byte, 9)} + switch resp := conn.reqresp(l1, ping).(type) { + case *v5wire.Pong: + t.Errorf("PONG response with unknown request ID %x", resp.ReqID) + case *readError: + if resp.err == v5wire.ErrInvalidReqID { + t.Error("response with oversized request ID") + } else if !netutil.IsTimeout(resp.err) { + t.Error(resp) + } + } +} + +// In this test, a session is established from one IP as usual. The session is then reused +// on another IP, which shouldn't work. The remote node should respond with WHOAREYOU for +// the attempt from a different IP. +func (s *Suite) TestPingMultiIP(t *utesting.T) { + conn, l1, l2 := s.listen2(t) + defer conn.close() + + // Create the session on l1. + ping := &v5wire.Ping{ReqID: conn.nextReqID()} + resp := conn.reqresp(l1, ping) + if resp.Kind() != v5wire.PongMsg { + t.Fatal("expected PONG, got", resp) + } + checkPong(t, resp.(*v5wire.Pong), ping, l1) + + // Send on l2. This reuses the session because there is only one codec. + ping2 := &v5wire.Ping{ReqID: conn.nextReqID()} + conn.write(l2, ping2, nil) + switch resp := conn.read(l2).(type) { + case *v5wire.Pong: + t.Fatalf("remote responded to PING from %v for session on IP %v", laddr(l2).IP, laddr(l1).IP) + case *v5wire.Whoareyou: + t.Logf("got WHOAREYOU for new session as expected") + resp.Node = s.Dest + conn.write(l2, ping2, resp) + default: + t.Fatal("expected WHOAREYOU, got", resp) + } + + // Catch the PONG on l2. + switch resp := conn.read(l2).(type) { + case *v5wire.Pong: + checkPong(t, resp, ping2, l2) + default: + t.Fatal("expected PONG, got", resp) + } + + // Try on l1 again. + ping3 := &v5wire.Ping{ReqID: conn.nextReqID()} + conn.write(l1, ping3, nil) + switch resp := conn.read(l1).(type) { + case *v5wire.Pong: + t.Fatalf("remote responded to PING from %v for session on IP %v", laddr(l1).IP, laddr(l2).IP) + case *v5wire.Whoareyou: + t.Logf("got WHOAREYOU for new session as expected") + default: + t.Fatal("expected WHOAREYOU, got", resp) + } +} + +// This test starts a handshake, but doesn't finish it and sends a second ordinary message +// packet instead of a handshake message packet. The remote node should respond with +// another WHOAREYOU challenge for the second packet. +func (s *Suite) TestPingHandshakeInterrupted(t *utesting.T) { + conn, l1 := s.listen1(t) + defer conn.close() + + // First PING triggers challenge. + ping := &v5wire.Ping{ReqID: conn.nextReqID()} + conn.write(l1, ping, nil) + switch resp := conn.read(l1).(type) { + case *v5wire.Whoareyou: + t.Logf("got WHOAREYOU for PING") + default: + t.Fatal("expected WHOAREYOU, got", resp) + } + + // Send second PING. + ping2 := &v5wire.Ping{ReqID: conn.nextReqID()} + switch resp := conn.reqresp(l1, ping2).(type) { + case *v5wire.Pong: + checkPong(t, resp, ping2, l1) + default: + t.Fatal("expected WHOAREYOU, got", resp) + } +} + +// This test sends TALKREQ and expects an empty TALKRESP response. +func (s *Suite) TestTalkRequest(t *utesting.T) { + conn, l1 := s.listen1(t) + defer conn.close() + + // Non-empty request ID. + id := conn.nextReqID() + resp := conn.reqresp(l1, &v5wire.TalkRequest{ReqID: id, Protocol: "test-protocol"}) + switch resp := resp.(type) { + case *v5wire.TalkResponse: + if !bytes.Equal(resp.ReqID, id) { + t.Fatalf("wrong request ID %x in TALKRESP, want %x", resp.ReqID, id) + } + if len(resp.Message) > 0 { + t.Fatalf("non-empty message %x in TALKRESP", resp.Message) + } + default: + t.Fatal("expected TALKRESP, got", resp.Name()) + } + + // Empty request ID. + resp = conn.reqresp(l1, &v5wire.TalkRequest{Protocol: "test-protocol"}) + switch resp := resp.(type) { + case *v5wire.TalkResponse: + if len(resp.ReqID) > 0 { + t.Fatalf("wrong request ID %x in TALKRESP, want empty byte array", resp.ReqID) + } + if len(resp.Message) > 0 { + t.Fatalf("non-empty message %x in TALKRESP", resp.Message) + } + default: + t.Fatal("expected TALKRESP, got", resp.Name()) + } +} + +// This test checks that the remote node returns itself for FINDNODE with distance zero. +func (s *Suite) TestFindnodeZeroDistance(t *utesting.T) { + conn, l1 := s.listen1(t) + defer conn.close() + + nodes, err := conn.findnode(l1, []uint{0}) + if err != nil { + t.Fatal(err) + } + if len(nodes) != 1 { + t.Fatalf("remote returned more than one node for FINDNODE [0]") + } + if nodes[0].ID() != conn.remote.ID() { + t.Errorf("ID of response node is %v, want %v", nodes[0].ID(), conn.remote.ID()) + } +} + +// In this test, multiple nodes ping the node under test. After waiting for them to be +// accepted into the remote table, the test checks that they are returned by FINDNODE. +func (s *Suite) TestFindnodeResults(t *utesting.T) { + // Create bystanders. + nodes := make([]*bystander, 5) + added := make(chan enode.ID, len(nodes)) + for i := range nodes { + nodes[i] = newBystander(t, s, added) + defer nodes[i].close() + } + + // Get them added to the remote table. + timeout := 60 * time.Second + timeoutCh := time.After(timeout) + for count := 0; count < len(nodes); { + select { + case id := <-added: + t.Logf("bystander node %v added to remote table", id) + count++ + case <-timeoutCh: + t.Errorf("remote added %d bystander nodes in %v, need %d to continue", count, timeout, len(nodes)) + t.Logf("this can happen if the node has a non-empty table from previous runs") + return + } + } + t.Logf("all %d bystander nodes were added", len(nodes)) + + // Collect our nodes by distance. + var dists []uint + expect := make(map[enode.ID]*enode.Node) + for _, bn := range nodes { + n := bn.conn.localNode.Node() + expect[n.ID()] = n + d := uint(enode.LogDist(n.ID(), s.Dest.ID())) + if !containsUint(dists, d) { + dists = append(dists, d) + } + } + + // Send FINDNODE for all distances. + conn, l1 := s.listen1(t) + defer conn.close() + foundNodes, err := conn.findnode(l1, dists) + if err != nil { + t.Fatal(err) + } + t.Logf("remote returned %d nodes for distance list %v", len(foundNodes), dists) + for _, n := range foundNodes { + delete(expect, n.ID()) + } + if len(expect) > 0 { + t.Errorf("missing %d nodes in FINDNODE result", len(expect)) + t.Logf("this can happen if the test is run multiple times in quick succession") + t.Logf("and the remote node hasn't removed dead nodes from previous runs yet") + } else { + t.Logf("all %d expected nodes were returned", len(nodes)) + } +} + +// A bystander is a node whose only purpose is filling a spot in the remote table. +type bystander struct { + dest *enode.Node + conn *conn + l net.PacketConn + + addedCh chan enode.ID + done sync.WaitGroup +} + +func newBystander(t *utesting.T, s *Suite, added chan enode.ID) *bystander { + conn, l := s.listen1(t) + conn.setEndpoint(l) // bystander nodes need IP/port to get pinged + bn := &bystander{ + conn: conn, + l: l, + dest: s.Dest, + addedCh: added, + } + bn.done.Add(1) + go bn.loop() + return bn +} + +// id returns the node ID of the bystander. +func (bn *bystander) id() enode.ID { + return bn.conn.localNode.ID() +} + +// close shuts down loop. +func (bn *bystander) close() { + bn.conn.close() + bn.done.Wait() +} + +// loop answers packets from the remote node until quit. +func (bn *bystander) loop() { + defer bn.done.Done() + + var ( + lastPing time.Time + wasAdded bool + ) + for { + // Ping the remote node. + if !wasAdded && time.Since(lastPing) > 10*time.Second { + bn.conn.reqresp(bn.l, &v5wire.Ping{ + ReqID: bn.conn.nextReqID(), + ENRSeq: bn.dest.Seq(), + }) + lastPing = time.Now() + } + // Answer packets. + switch p := bn.conn.read(bn.l).(type) { + case *v5wire.Ping: + bn.conn.write(bn.l, &v5wire.Pong{ + ReqID: p.ReqID, + ENRSeq: bn.conn.localNode.Seq(), + ToIP: bn.dest.IP(), + ToPort: uint16(bn.dest.UDP()), + }, nil) + wasAdded = true + bn.notifyAdded() + case *v5wire.Findnode: + bn.conn.write(bn.l, &v5wire.Nodes{ReqID: p.ReqID, Total: 1}, nil) + wasAdded = true + bn.notifyAdded() + case *v5wire.TalkRequest: + bn.conn.write(bn.l, &v5wire.TalkResponse{ReqID: p.ReqID}, nil) + case *readError: + if !netutil.IsTemporaryError(p.err) { + bn.conn.logf("shutting down: %v", p.err) + return + } + } + } +} + +func (bn *bystander) notifyAdded() { + if bn.addedCh != nil { + bn.addedCh <- bn.id() + bn.addedCh = nil + } +} diff --git a/cmd/devp2p/internal/v5test/framework.go b/cmd/devp2p/internal/v5test/framework.go new file mode 100644 index 00000000..6ccbbd07 --- /dev/null +++ b/cmd/devp2p/internal/v5test/framework.go @@ -0,0 +1,261 @@ +// Copyright 2020 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 v5test + +import ( + "bytes" + "crypto/ecdsa" + "encoding/binary" + "fmt" + "net" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/discover/v5wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" +) + +// readError represents an error during packet reading. +// This exists to facilitate type-switching on the result of conn.read. +type readError struct { + err error +} + +func (p *readError) Kind() byte { return 99 } +func (p *readError) Name() string { return fmt.Sprintf("error: %v", p.err) } +func (p *readError) Error() string { return p.err.Error() } +func (p *readError) Unwrap() error { return p.err } +func (p *readError) RequestID() []byte { return nil } +func (p *readError) SetRequestID([]byte) {} + +// readErrorf creates a readError with the given text. +func readErrorf(format string, args ...interface{}) *readError { + return &readError{fmt.Errorf(format, args...)} +} + +// This is the response timeout used in tests. +const waitTime = 300 * time.Millisecond + +// conn is a connection to the node under test. +type conn struct { + localNode *enode.LocalNode + localKey *ecdsa.PrivateKey + remote *enode.Node + remoteAddr *net.UDPAddr + listeners []net.PacketConn + + log logger + codec *v5wire.Codec + idCounter uint32 +} + +type logger interface { + Logf(string, ...interface{}) +} + +// newConn sets up a connection to the given node. +func newConn(dest *enode.Node, log logger) *conn { + key, err := crypto.GenerateKey() + if err != nil { + panic(err) + } + db, err := enode.OpenDB("") + if err != nil { + panic(err) + } + ln := enode.NewLocalNode(db, key) + + return &conn{ + localKey: key, + localNode: ln, + remote: dest, + remoteAddr: &net.UDPAddr{IP: dest.IP(), Port: dest.UDP()}, + codec: v5wire.NewCodec(ln, key, mclock.System{}), + log: log, + } +} + +func (tc *conn) setEndpoint(c net.PacketConn) { + tc.localNode.SetStaticIP(laddr(c).IP) + tc.localNode.SetFallbackUDP(laddr(c).Port) +} + +func (tc *conn) listen(ip string) net.PacketConn { + l, err := net.ListenPacket("udp", fmt.Sprintf("%v:0", ip)) + if err != nil { + panic(err) + } + tc.listeners = append(tc.listeners, l) + return l +} + +// close shuts down all listeners and the local node. +func (tc *conn) close() { + for _, l := range tc.listeners { + l.Close() + } + tc.localNode.Database().Close() +} + +// nextReqID creates a request id. +func (tc *conn) nextReqID() []byte { + id := make([]byte, 4) + tc.idCounter++ + binary.BigEndian.PutUint32(id, tc.idCounter) + return id +} + +// reqresp performs a request/response interaction on the given connection. +// The request is retried if a handshake is requested. +func (tc *conn) reqresp(c net.PacketConn, req v5wire.Packet) v5wire.Packet { + reqnonce := tc.write(c, req, nil) + switch resp := tc.read(c).(type) { + case *v5wire.Whoareyou: + if resp.Nonce != reqnonce { + return readErrorf("wrong nonce %x in WHOAREYOU (want %x)", resp.Nonce[:], reqnonce[:]) + } + resp.Node = tc.remote + tc.write(c, req, resp) + return tc.read(c) + default: + return resp + } +} + +// findnode sends a FINDNODE request and waits for its responses. +func (tc *conn) findnode(c net.PacketConn, dists []uint) ([]*enode.Node, error) { + var ( + findnode = &v5wire.Findnode{ReqID: tc.nextReqID(), Distances: dists} + reqnonce = tc.write(c, findnode, nil) + first = true + total uint8 + results []*enode.Node + ) + for n := 1; n > 0; { + switch resp := tc.read(c).(type) { + case *v5wire.Whoareyou: + // Handle handshake. + if resp.Nonce == reqnonce { + resp.Node = tc.remote + tc.write(c, findnode, resp) + } else { + return nil, fmt.Errorf("unexpected WHOAREYOU (nonce %x), waiting for NODES", resp.Nonce[:]) + } + case *v5wire.Ping: + // Handle ping from remote. + tc.write(c, &v5wire.Pong{ + ReqID: resp.ReqID, + ENRSeq: tc.localNode.Seq(), + }, nil) + case *v5wire.Nodes: + // Got NODES! Check request ID. + if !bytes.Equal(resp.ReqID, findnode.ReqID) { + return nil, fmt.Errorf("NODES response has wrong request id %x", resp.ReqID) + } + // Check total count. It should be greater than one + // and needs to be the same across all responses. + if first { + if resp.Total == 0 || resp.Total > 6 { + return nil, fmt.Errorf("invalid NODES response 'total' %d (not in (0,7))", resp.Total) + } + total = resp.Total + n = int(total) - 1 + first = false + } else { + n-- + if resp.Total != total { + return nil, fmt.Errorf("invalid NODES response 'total' %d (!= %d)", resp.Total, total) + } + } + // Check nodes. + nodes, err := checkRecords(resp.Nodes) + if err != nil { + return nil, fmt.Errorf("invalid node in NODES response: %v", err) + } + results = append(results, nodes...) + default: + return nil, fmt.Errorf("expected NODES, got %v", resp) + } + } + return results, nil +} + +// write sends a packet on the given connection. +func (tc *conn) write(c net.PacketConn, p v5wire.Packet, challenge *v5wire.Whoareyou) v5wire.Nonce { + packet, nonce, err := tc.codec.Encode(tc.remote.ID(), tc.remoteAddr.String(), p, challenge) + if err != nil { + panic(fmt.Errorf("can't encode %v packet: %v", p.Name(), err)) + } + if _, err := c.WriteTo(packet, tc.remoteAddr); err != nil { + tc.logf("Can't send %s: %v", p.Name(), err) + } else { + tc.logf(">> %s", p.Name()) + } + return nonce +} + +// read waits for an incoming packet on the given connection. +func (tc *conn) read(c net.PacketConn) v5wire.Packet { + buf := make([]byte, 1280) + if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil { + return &readError{err} + } + n, fromAddr, err := c.ReadFrom(buf) + if err != nil { + return &readError{err} + } + _, _, p, err := tc.codec.Decode(buf[:n], fromAddr.String()) + if err != nil { + return &readError{err} + } + tc.logf("<< %s", p.Name()) + return p +} + +// logf prints to the test log. +func (tc *conn) logf(format string, args ...interface{}) { + if tc.log != nil { + tc.log.Logf("(%s) %s", tc.localNode.ID().TerminalString(), fmt.Sprintf(format, args...)) + } +} + +func laddr(c net.PacketConn) *net.UDPAddr { + return c.LocalAddr().(*net.UDPAddr) +} + +func checkRecords(records []*enr.Record) ([]*enode.Node, error) { + nodes := make([]*enode.Node, len(records)) + for i := range records { + n, err := enode.New(enode.ValidSchemes, records[i]) + if err != nil { + return nil, err + } + nodes[i] = n + } + return nodes, nil +} + +func containsUint(ints []uint, x uint) bool { + for i := range ints { + if ints[i] == x { + return true + } + } + return false +} diff --git a/cmd/devp2p/keycmd.go b/cmd/devp2p/keycmd.go new file mode 100644 index 00000000..e824abe6 --- /dev/null +++ b/cmd/devp2p/keycmd.go @@ -0,0 +1,105 @@ +// Copyright 2020 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" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/urfave/cli/v2" +) + +var ( + keyCommand = &cli.Command{ + Name: "key", + Usage: "Operations on node keys", + Subcommands: []*cli.Command{ + keyGenerateCommand, + keyToNodeCommand, + }, + } + keyGenerateCommand = &cli.Command{ + Name: "generate", + Usage: "Generates node key files", + ArgsUsage: "keyfile", + Action: genkey, + } + keyToNodeCommand = &cli.Command{ + Name: "to-enode", + Usage: "Creates an enode URL from a node key file", + ArgsUsage: "keyfile", + Action: keyToURL, + Flags: []cli.Flag{hostFlag, tcpPortFlag, udpPortFlag}, + } +) + +var ( + hostFlag = &cli.StringFlag{ + Name: "ip", + Usage: "IP address of the node", + Value: "127.0.0.1", + } + tcpPortFlag = &cli.IntFlag{ + Name: "tcp", + Usage: "TCP port of the node", + Value: 30303, + } + udpPortFlag = &cli.IntFlag{ + Name: "udp", + Usage: "UDP port of the node", + Value: 30303, + } +) + +func genkey(ctx *cli.Context) error { + if ctx.NArg() != 1 { + return fmt.Errorf("need key file as argument") + } + file := ctx.Args().Get(0) + + key, err := crypto.GenerateKey() + if err != nil { + return fmt.Errorf("could not generate key: %v", err) + } + return crypto.SaveECDSA(file, key) +} + +func keyToURL(ctx *cli.Context) error { + if ctx.NArg() != 1 { + return fmt.Errorf("need key file as argument") + } + + var ( + file = ctx.Args().Get(0) + host = ctx.String(hostFlag.Name) + tcp = ctx.Int(tcpPortFlag.Name) + udp = ctx.Int(udpPortFlag.Name) + ) + key, err := crypto.LoadECDSA(file) + if err != nil { + return err + } + ip := net.ParseIP(host) + if ip == nil { + return fmt.Errorf("invalid IP address %q", host) + } + node := enode.NewV4(&key.PublicKey, ip, tcp, udp) + fmt.Println(node.URLv4()) + return nil +} diff --git a/cmd/devp2p/main.go b/cmd/devp2p/main.go index 2928055d..51b9fdb7 100644 --- a/cmd/devp2p/main.go +++ b/cmd/devp2p/main.go @@ -21,9 +21,11 @@ import ( "os" "path/filepath" - "github.com/cryptoecc/ETH-ECC/internal/debug" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "github.com/urfave/cli/v2" ) var ( @@ -43,7 +45,8 @@ 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, "") + flags.MigrateGlobalFlags(ctx) + return debug.Setup(ctx) } app.After = func(ctx *cli.Context) error { debug.Exit() @@ -54,15 +57,52 @@ func init() { os.Exit(1) } // Add subcommands. - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ enrdumpCommand, + keyCommand, discv4Command, + discv5Command, + dnsCommand, + nodesetCommand, + rlpxCommand, } } func main() { - if err := app.Run(os.Args); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + 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 { + names := flag.Names() + set := make(map[string]struct{}, len(names)) + for _, name := range names { + set[name] = struct{}{} + } + for _, fn := range ctx.FlagNames() { + if _, ok := set[fn]; ok { + return true + } + } + return false +} + +// 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().First()) + 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 00000000..33c39f4b --- /dev/null +++ b/cmd/devp2p/nodeset.go @@ -0,0 +1,127 @@ +// 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" + "os" + "sort" + "time" + + "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"` + + // The score tracks how many liveness checks were performed. It is incremented by one + // every time the node passes a check, and halved every time it doesn't. + Score int `json:"score,omitempty"` + // These two track the time of last successful contact. + FirstResponse time.Time `json:"firstResponse,omitempty"` + LastResponse time.Time `json:"lastResponse,omitempty"` + // This one tracks the time of our last attempt to contact the node. + LastCheck time.Time `json:"lastCheck,omitempty"` +} + +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 file == "-" { + os.Stdout.Write(nodesJSON) + return + } + if err := os.WriteFile(file, nodesJSON, 0644); err != nil { + exit(err) + } +} + +// nodes returns the node records contained in the set. +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 +} + +// add ensures the given nodes are present in the set. +func (ns nodeSet) add(nodes ...*enode.Node) { + for _, n := range nodes { + v := ns[n.ID()] + v.N = n + v.Seq = n.Seq() + ns[n.ID()] = v + } +} + +// topN returns the top n nodes by score as a new set. +func (ns nodeSet) topN(n int) nodeSet { + if n >= len(ns) { + return ns + } + + byscore := make([]nodeJSON, 0, len(ns)) + for _, v := range ns { + byscore = append(byscore, v) + } + sort.Slice(byscore, func(i, j int) bool { + return byscore[i].Score >= byscore[j].Score + }) + result := make(nodeSet, n) + for _, v := range byscore[:n] { + result[v.N.ID()] = v + } + return result +} + +// verify performs integrity checks on the node set. +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/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go new file mode 100644 index 00000000..2cf10459 --- /dev/null +++ b/cmd/devp2p/nodesetcmd.go @@ -0,0 +1,275 @@ +// 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 ( + "errors" + "fmt" + "net" + "sort" + "strconv" + "strings" + "time" + + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/urfave/cli/v2" +) + +var ( + nodesetCommand = &cli.Command{ + Name: "nodeset", + Usage: "Node set tools", + Subcommands: []*cli.Command{ + nodesetInfoCommand, + nodesetFilterCommand, + }, + } + nodesetInfoCommand = &cli.Command{ + Name: "info", + Usage: "Shows statistics about a node set", + Action: nodesetInfo, + ArgsUsage: "", + } + nodesetFilterCommand = &cli.Command{ + Name: "filter", + Usage: "Filters a node set", + Action: nodesetFilter, + ArgsUsage: " filters..", + + SkipFlagParsing: true, + } +) + +func nodesetInfo(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + + ns := loadNodesJSON(ctx.Args().First()) + fmt.Printf("Set contains %d nodes.\n", len(ns)) + showAttributeCounts(ns) + return nil +} + +// showAttributeCounts prints the distribution of ENR attributes in a node set. +func showAttributeCounts(ns nodeSet) { + attrcount := make(map[string]int) + var attrlist []interface{} + for _, n := range ns { + r := n.N.Record() + attrlist = r.AppendElements(attrlist[:0])[1:] + for i := 0; i < len(attrlist); i += 2 { + key := attrlist[i].(string) + attrcount[key]++ + } + } + + var keys []string + var maxlength int + for key := range attrcount { + keys = append(keys, key) + if len(key) > maxlength { + maxlength = len(key) + } + } + sort.Strings(keys) + fmt.Println("ENR attribute counts:") + for _, key := range keys { + fmt.Printf("%s%s: %d\n", strings.Repeat(" ", maxlength-len(key)+1), key, attrcount[key]) + } +} + +func nodesetFilter(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + // Parse -limit. + limit, err := parseFilterLimit(ctx.Args().Tail()) + if err != nil { + return err + } + // Parse the filters. + filter, err := andFilter(ctx.Args().Tail()) + if err != nil { + return err + } + + // Load nodes and apply filters. + ns := loadNodesJSON(ctx.Args().First()) + result := make(nodeSet) + for id, n := range ns { + if filter(n) { + result[id] = n + } + } + if limit >= 0 { + result = result.topN(limit) + } + writeNodesJSON("-", result) + return nil +} + +type nodeFilter func(nodeJSON) bool + +type nodeFilterC struct { + narg int + fn func([]string) (nodeFilter, error) +} + +var filterFlags = map[string]nodeFilterC{ + "-limit": {1, trueFilter}, // needed to skip over -limit + "-ip": {1, ipFilter}, + "-min-age": {1, minAgeFilter}, + "-eth-network": {1, ethFilter}, + "-les-server": {0, lesFilter}, + "-snap": {0, snapFilter}, +} + +// parseFilters parses nodeFilters from args. +func parseFilters(args []string) ([]nodeFilter, error) { + var filters []nodeFilter + for len(args) > 0 { + fc, ok := filterFlags[args[0]] + if !ok { + return nil, fmt.Errorf("invalid filter %q", args[0]) + } + if len(args)-1 < fc.narg { + return nil, fmt.Errorf("filter %q wants %d arguments, have %d", args[0], fc.narg, len(args)-1) + } + filter, err := fc.fn(args[1 : 1+fc.narg]) + if err != nil { + return nil, fmt.Errorf("%s: %v", args[0], err) + } + filters = append(filters, filter) + args = args[1+fc.narg:] + } + return filters, nil +} + +// parseFilterLimit parses the -limit option in args. It returns -1 if there is no limit. +func parseFilterLimit(args []string) (int, error) { + limit := -1 + for i, arg := range args { + if arg == "-limit" { + if i == len(args)-1 { + return -1, errors.New("-limit requires an argument") + } + n, err := strconv.Atoi(args[i+1]) + if err != nil { + return -1, fmt.Errorf("invalid -limit %q", args[i+1]) + } + limit = n + } + } + return limit, nil +} + +// andFilter parses node filters in args and returns a single filter that requires all +// of them to match. +func andFilter(args []string) (nodeFilter, error) { + checks, err := parseFilters(args) + if err != nil { + return nil, err + } + f := func(n nodeJSON) bool { + for _, filter := range checks { + if !filter(n) { + return false + } + } + return true + } + return f, nil +} + +func trueFilter(args []string) (nodeFilter, error) { + return func(n nodeJSON) bool { return true }, nil +} + +func ipFilter(args []string) (nodeFilter, error) { + _, cidr, err := net.ParseCIDR(args[0]) + if err != nil { + return nil, err + } + f := func(n nodeJSON) bool { return cidr.Contains(n.N.IP()) } + return f, nil +} + +func minAgeFilter(args []string) (nodeFilter, error) { + minage, err := time.ParseDuration(args[0]) + if err != nil { + return nil, err + } + f := func(n nodeJSON) bool { + age := n.LastResponse.Sub(n.FirstResponse) + return age >= minage + } + return f, nil +} + +func ethFilter(args []string) (nodeFilter, error) { + var filter forkid.Filter + switch args[0] { + case "mainnet": + filter = forkid.NewStaticFilter(params.MainnetChainConfig, params.MainnetGenesisHash) + case "rinkeby": + filter = forkid.NewStaticFilter(params.RinkebyChainConfig, params.RinkebyGenesisHash) + case "goerli": + filter = forkid.NewStaticFilter(params.GoerliChainConfig, params.GoerliGenesisHash) + case "ropsten": + filter = forkid.NewStaticFilter(params.RopstenChainConfig, params.RopstenGenesisHash) + case "sepolia": + filter = forkid.NewStaticFilter(params.SepoliaChainConfig, params.SepoliaGenesisHash) + default: + return nil, fmt.Errorf("unknown network %q", args[0]) + } + + f := func(n nodeJSON) bool { + var eth struct { + ForkID forkid.ID + Tail []rlp.RawValue `rlp:"tail"` + } + if n.N.Load(enr.WithEntry("eth", ð)) != nil { + return false + } + return filter(eth.ForkID) == nil + } + return f, nil +} + +func lesFilter(args []string) (nodeFilter, error) { + f := func(n nodeJSON) bool { + var les struct { + Tail []rlp.RawValue `rlp:"tail"` + } + return n.N.Load(enr.WithEntry("les", &les)) == nil + } + return f, nil +} + +func snapFilter(args []string) (nodeFilter, error) { + f := func(n nodeJSON) bool { + var snap struct { + Tail []rlp.RawValue `rlp:"tail"` + } + return n.N.Load(enr.WithEntry("snap", &snap)) == nil + } + return f, nil +} diff --git a/cmd/devp2p/rlpxcmd.go b/cmd/devp2p/rlpxcmd.go new file mode 100644 index 00000000..42b38120 --- /dev/null +++ b/cmd/devp2p/rlpxcmd.go @@ -0,0 +1,125 @@ +// Copyright 2020 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" + + "github.com/ethereum/go-ethereum/cmd/devp2p/internal/ethtest" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/rlpx" + "github.com/ethereum/go-ethereum/rlp" + "github.com/urfave/cli/v2" +) + +var ( + rlpxCommand = &cli.Command{ + Name: "rlpx", + Usage: "RLPx Commands", + Subcommands: []*cli.Command{ + rlpxPingCommand, + rlpxEthTestCommand, + rlpxSnapTestCommand, + }, + } + rlpxPingCommand = &cli.Command{ + Name: "ping", + Usage: "ping ", + Action: rlpxPing, + } + rlpxEthTestCommand = &cli.Command{ + Name: "eth-test", + Usage: "Runs tests against a node", + ArgsUsage: " ", + Action: rlpxEthTest, + Flags: []cli.Flag{ + testPatternFlag, + testTAPFlag, + }, + } + rlpxSnapTestCommand = &cli.Command{ + Name: "snap-test", + Usage: "Runs tests against a node", + ArgsUsage: " ", + Action: rlpxSnapTest, + Flags: []cli.Flag{ + testPatternFlag, + testTAPFlag, + }, + } +) + +func rlpxPing(ctx *cli.Context) error { + n := getNodeArg(ctx) + fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", n.IP(), n.TCP())) + if err != nil { + return err + } + conn := rlpx.NewConn(fd, n.Pubkey()) + ourKey, _ := crypto.GenerateKey() + _, err = conn.Handshake(ourKey) + if err != nil { + return err + } + code, data, _, err := conn.Read() + if err != nil { + return err + } + switch code { + case 0: + var h ethtest.Hello + if err := rlp.DecodeBytes(data, &h); err != nil { + return fmt.Errorf("invalid handshake: %v", err) + } + fmt.Printf("%+v\n", h) + case 1: + var msg []p2p.DiscReason + if rlp.DecodeBytes(data, &msg); len(msg) == 0 { + return fmt.Errorf("invalid disconnect message") + } + return fmt.Errorf("received disconnect message: %v", msg[0]) + default: + return fmt.Errorf("invalid message code %d, expected handshake (code zero)", code) + } + return nil +} + +// rlpxEthTest runs the eth protocol test suite. +func rlpxEthTest(ctx *cli.Context) error { + if ctx.NArg() < 3 { + exit("missing path to chain.rlp as command-line argument") + } + suite, err := ethtest.NewSuite(getNodeArg(ctx), ctx.Args().Get(1), ctx.Args().Get(2)) + if err != nil { + exit(err) + } + return runTests(ctx, suite.EthTests()) +} + +// rlpxSnapTest runs the snap protocol test suite. +func rlpxSnapTest(ctx *cli.Context) error { + if ctx.NArg() < 3 { + exit("missing path to chain.rlp as command-line argument") + } + suite, err := ethtest.NewSuite(getNodeArg(ctx), ctx.Args().Get(1), ctx.Args().Get(2)) + if err != nil { + exit(err) + } + return runTests(ctx, suite.SnapTests()) +} diff --git a/cmd/devp2p/runtest.go b/cmd/devp2p/runtest.go new file mode 100644 index 00000000..f72aa911 --- /dev/null +++ b/cmd/devp2p/runtest.go @@ -0,0 +1,69 @@ +// Copyright 2020 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 ( + "os" + + "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test" + "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" +) + +var ( + testPatternFlag = &cli.StringFlag{ + Name: "run", + Usage: "Pattern of test suite(s) to run", + } + testTAPFlag = &cli.BoolFlag{ + Name: "tap", + Usage: "Output TAP", + } + // These two are specific to the discovery tests. + testListen1Flag = &cli.StringFlag{ + Name: "listen1", + Usage: "IP address of the first tester", + Value: v4test.Listen1, + } + testListen2Flag = &cli.StringFlag{ + Name: "listen2", + Usage: "IP address of the second tester", + Value: v4test.Listen2, + } +) + +func runTests(ctx *cli.Context, tests []utesting.Test) error { + // Filter test cases. + if ctx.IsSet(testPatternFlag.Name) { + tests = utesting.MatchTests(tests, ctx.String(testPatternFlag.Name)) + } + // Disable logging unless explicitly enabled. + if !ctx.IsSet("verbosity") && !ctx.IsSet("vmodule") { + log.Root().SetHandler(log.DiscardHandler()) + } + // Run the tests. + var run = utesting.RunTests + if ctx.Bool(testTAPFlag.Name) { + run = utesting.RunTAP + } + results := run(tests, os.Stdout) + if utesting.CountFailures(results) > 0 { + os.Exit(1) + } + return nil +} diff --git a/cmd/ethkey/changepassword.go b/cmd/ethkey/changepassword.go index 21540761..4298e2b8 100644 --- a/cmd/ethkey/changepassword.go +++ b/cmd/ethkey/changepassword.go @@ -18,20 +18,20 @@ package main import ( "fmt" - "io/ioutil" + "os" "strings" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/urfave/cli/v2" ) -var newPassphraseFlag = cli.StringFlag{ +var newPassphraseFlag = &cli.StringFlag{ Name: "newpasswordfile", Usage: "the file that contains the new password for the keyfile", } -var commandChangePassphrase = cli.Command{ +var commandChangePassphrase = &cli.Command{ Name: "changepassword", Usage: "change the password on a keyfile", ArgsUsage: "", @@ -45,13 +45,13 @@ Change the password of a keyfile.`, keyfilepath := ctx.Args().First() // Read key from file. - keyjson, err := ioutil.ReadFile(keyfilepath) + keyjson, err := os.ReadFile(keyfilepath) if err != nil { utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err) } // Decrypt key with passphrase. - passphrase := getPassphrase(ctx) + passphrase := getPassphrase(ctx, false) key, err := keystore.DecryptKey(keyjson, passphrase) if err != nil { utils.Fatalf("Error decrypting key: %v", err) @@ -61,13 +61,13 @@ Change the password of a keyfile.`, fmt.Println("Please provide a new password") var newPhrase string if passFile := ctx.String(newPassphraseFlag.Name); passFile != "" { - content, err := ioutil.ReadFile(passFile) + content, err := os.ReadFile(passFile) if err != nil { utils.Fatalf("Failed to read new password file '%s': %v", passFile, err) } newPhrase = strings.TrimRight(string(content), "\r\n") } else { - newPhrase = promptPassphrase(true) + newPhrase = utils.GetPassPhrase("", true) } // Encrypt the key with the new passphrase. @@ -77,7 +77,7 @@ Change the password of a keyfile.`, } // Then write the new keyfile in place of the old one. - if err := ioutil.WriteFile(keyfilepath, newJson, 600); err != nil { + if err := os.WriteFile(keyfilepath, newJson, 0600); err != nil { utils.Fatalf("Error writing new keyfile to disk: %v", err) } diff --git a/cmd/ethkey/generate.go b/cmd/ethkey/generate.go index cac39a40..60d8b3c7 100644 --- a/cmd/ethkey/generate.go +++ b/cmd/ethkey/generate.go @@ -19,15 +19,14 @@ package main import ( "crypto/ecdsa" "fmt" - "io/ioutil" "os" "path/filepath" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/pborman/uuid" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/crypto" + "github.com/google/uuid" + "github.com/urfave/cli/v2" ) type outputGenerate struct { @@ -35,7 +34,18 @@ type outputGenerate struct { AddressEIP55 string } -var commandGenerate = cli.Command{ +var ( + privateKeyFlag = &cli.StringFlag{ + Name: "privatekey", + Usage: "file containing a raw private key to encrypt", + } + lightKDFFlag = &cli.BoolFlag{ + Name: "lightkdf", + Usage: "use less secure scrypt parameters", + } +) + +var commandGenerate = &cli.Command{ Name: "generate", Usage: "generate new keyfile", ArgsUsage: "[ ]", @@ -48,10 +58,8 @@ If you want to encrypt an existing private key, it can be specified by setting Flags: []cli.Flag{ passphraseFlag, jsonFlag, - cli.StringFlag{ - Name: "privatekey", - Usage: "file containing a raw private key to encrypt", - }, + privateKeyFlag, + lightKDFFlag, }, Action: func(ctx *cli.Context) error { // Check if keyfile path given and make sure it doesn't already exist. @@ -67,7 +75,7 @@ If you want to encrypt an existing private key, it can be specified by setting var privateKey *ecdsa.PrivateKey var err error - if file := ctx.String("privatekey"); file != "" { + if file := ctx.String(privateKeyFlag.Name); file != "" { // Load private key from file. privateKey, err = crypto.LoadECDSA(file) if err != nil { @@ -82,16 +90,23 @@ If you want to encrypt an existing private key, it can be specified by setting } // Create the keyfile object with a random UUID. - id := uuid.NewRandom() + UUID, err := uuid.NewRandom() + if err != nil { + utils.Fatalf("Failed to generate random uuid: %v", err) + } key := &keystore.Key{ - Id: id, + Id: UUID, Address: crypto.PubkeyToAddress(privateKey.PublicKey), PrivateKey: privateKey, } // Encrypt key with passphrase. - passphrase := promptPassphrase(true) - keyjson, err := keystore.EncryptKey(key, passphrase, keystore.StandardScryptN, keystore.StandardScryptP) + passphrase := getPassphrase(ctx, true) + scryptN, scryptP := keystore.StandardScryptN, keystore.StandardScryptP + if ctx.Bool(lightKDFFlag.Name) { + scryptN, scryptP = keystore.LightScryptN, keystore.LightScryptP + } + keyjson, err := keystore.EncryptKey(key, passphrase, scryptN, scryptP) if err != nil { utils.Fatalf("Error encrypting key: %v", err) } @@ -100,7 +115,7 @@ If you want to encrypt an existing private key, it can be specified by setting if err := os.MkdirAll(filepath.Dir(keyfilepath), 0700); err != nil { utils.Fatalf("Could not create directory %s", filepath.Dir(keyfilepath)) } - if err := ioutil.WriteFile(keyfilepath, keyjson, 0600); err != nil { + if err := os.WriteFile(keyfilepath, keyjson, 0600); err != nil { utils.Fatalf("Failed to write keyfile to %s: %v", keyfilepath, err) } diff --git a/cmd/ethkey/inspect.go b/cmd/ethkey/inspect.go index 68993a47..29b1c13e 100644 --- a/cmd/ethkey/inspect.go +++ b/cmd/ethkey/inspect.go @@ -19,12 +19,12 @@ package main import ( "encoding/hex" "fmt" - "io/ioutil" + "os" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/crypto" + "github.com/urfave/cli/v2" ) type outputInspect struct { @@ -33,7 +33,14 @@ type outputInspect struct { PrivateKey string } -var commandInspect = cli.Command{ +var ( + privateFlag = &cli.BoolFlag{ + Name: "private", + Usage: "include the private key in the output", + } +) + +var commandInspect = &cli.Command{ Name: "inspect", Usage: "inspect a keyfile", ArgsUsage: "", @@ -45,29 +52,26 @@ make sure to use this feature with great caution!`, Flags: []cli.Flag{ passphraseFlag, jsonFlag, - cli.BoolFlag{ - Name: "private", - Usage: "include the private key in the output", - }, + privateFlag, }, Action: func(ctx *cli.Context) error { keyfilepath := ctx.Args().First() // Read key from file. - keyjson, err := ioutil.ReadFile(keyfilepath) + keyjson, err := os.ReadFile(keyfilepath) if err != nil { utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err) } // Decrypt key with passphrase. - passphrase := getPassphrase(ctx) + passphrase := getPassphrase(ctx, false) key, err := keystore.DecryptKey(keyjson, passphrase) if err != nil { utils.Fatalf("Error decrypting key: %v", err) } // Output all relevant information we can retrieve. - showPrivate := ctx.Bool("private") + showPrivate := ctx.Bool(privateFlag.Name) out := outputInspect{ Address: key.Address.Hex(), PublicKey: hex.EncodeToString( diff --git a/cmd/ethkey/main.go b/cmd/ethkey/main.go index b4c0f278..2b21f3cd 100644 --- a/cmd/ethkey/main.go +++ b/cmd/ethkey/main.go @@ -20,8 +20,8 @@ import ( "fmt" "os" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/urfave/cli/v2" ) const ( @@ -35,8 +35,8 @@ var gitDate = "" var app *cli.App func init() { - app = utils.NewApp(gitCommit, gitDate, "an Ethereum key manager") - app.Commands = []cli.Command{ + app = flags.NewApp(gitCommit, gitDate, "an Ethereum key manager") + app.Commands = []*cli.Command{ commandGenerate, commandInspect, commandChangePassphrase, @@ -47,11 +47,11 @@ func init() { // Commonly used command line flags. var ( - passphraseFlag = cli.StringFlag{ + passphraseFlag = &cli.StringFlag{ Name: "passwordfile", Usage: "the file that contains the password for the keyfile", } - jsonFlag = cli.BoolFlag{ + jsonFlag = &cli.BoolFlag{ Name: "json", Usage: "output JSON instead of human-readable format", } diff --git a/cmd/ethkey/message.go b/cmd/ethkey/message.go index be199089..6b8dec03 100644 --- a/cmd/ethkey/message.go +++ b/cmd/ethkey/message.go @@ -19,25 +19,26 @@ package main import ( "encoding/hex" "fmt" - "io/ioutil" - - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/urfave/cli" + "os" + + "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/crypto" + "github.com/urfave/cli/v2" ) type outputSign struct { Signature string } -var msgfileFlag = cli.StringFlag{ +var msgfileFlag = &cli.StringFlag{ Name: "msgfile", Usage: "file containing the message to sign/verify", } -var commandSignMessage = cli.Command{ +var commandSignMessage = &cli.Command{ Name: "signmessage", Usage: "sign a message", ArgsUsage: " ", @@ -56,19 +57,19 @@ To sign a message contained in a file, use the --msgfile flag. // Load the keyfile. keyfilepath := ctx.Args().First() - keyjson, err := ioutil.ReadFile(keyfilepath) + keyjson, err := os.ReadFile(keyfilepath) if err != nil { utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err) } // Decrypt key with passphrase. - passphrase := getPassphrase(ctx) + passphrase := getPassphrase(ctx, false) key, err := keystore.DecryptKey(keyjson, passphrase) if err != nil { utils.Fatalf("Error decrypting key: %v", err) } - signature, err := crypto.Sign(signHash(message), key.PrivateKey) + signature, err := crypto.Sign(accounts.TextHash(message), key.PrivateKey) if err != nil { utils.Fatalf("Failed to sign message: %v", err) } @@ -88,7 +89,7 @@ type outputVerify struct { RecoveredPublicKey string } -var commandVerifyMessage = cli.Command{ +var commandVerifyMessage = &cli.Command{ Name: "verifymessage", Usage: "verify the signature of a signed message", ArgsUsage: "
", @@ -113,7 +114,7 @@ It is possible to refer to a file containing the message.`, utils.Fatalf("Signature encoding is not hexadecimal: %v", err) } - recoveredPubkey, err := crypto.SigToPub(signHash(message), signature) + recoveredPubkey, err := crypto.SigToPub(accounts.TextHash(message), signature) if err != nil || recoveredPubkey == nil { utils.Fatalf("Signature verification failed: %v", err) } @@ -142,18 +143,18 @@ It is possible to refer to a file containing the message.`, } func getMessage(ctx *cli.Context, msgarg int) []byte { - if file := ctx.String("msgfile"); file != "" { - if len(ctx.Args()) > msgarg { + if file := ctx.String(msgfileFlag.Name); file != "" { + if ctx.NArg() > msgarg { utils.Fatalf("Can't use --msgfile and message argument at the same time.") } - msg, err := ioutil.ReadFile(file) + msg, err := os.ReadFile(file) if err != nil { utils.Fatalf("Can't read message file: %v", err) } return msg - } else if len(ctx.Args()) == msgarg+1 { + } else if ctx.NArg() == msgarg+1 { return []byte(ctx.Args().Get(msgarg)) } - utils.Fatalf("Invalid number of arguments: want %d, got %d", msgarg+1, len(ctx.Args())) + utils.Fatalf("Invalid number of arguments: want %d, got %d", msgarg+1, ctx.NArg()) return nil } diff --git a/cmd/ethkey/message_test.go b/cmd/ethkey/message_test.go index e9e8eeea..544a494c 100644 --- a/cmd/ethkey/message_test.go +++ b/cmd/ethkey/message_test.go @@ -17,24 +17,18 @@ package main import ( - "io/ioutil" - "os" "path/filepath" "testing" ) func TestMessageSignVerify(t *testing.T) { - tmpdir, err := ioutil.TempDir("", "ethkey-test") - if err != nil { - t.Fatal("Can't create temporary directory:", err) - } - defer os.RemoveAll(tmpdir) + tmpdir := t.TempDir() keyfile := filepath.Join(tmpdir, "the-keyfile") message := "test message" // Create the key. - generate := runEthkey(t, "generate", keyfile) + generate := runEthkey(t, "generate", "--lightkdf", keyfile) generate.Expect(` !! Unsupported terminal, password will be echoed. Password: {{.InputLine "foobar"}} diff --git a/cmd/ethkey/run_test.go b/cmd/ethkey/run_test.go index c7ae94fc..6006f6b5 100644 --- a/cmd/ethkey/run_test.go +++ b/cmd/ethkey/run_test.go @@ -21,8 +21,8 @@ import ( "os" "testing" - "github.com/cryptoecc/ETH-ECC/internal/cmdtest" "github.com/docker/docker/pkg/reexec" + "github.com/ethereum/go-ethereum/internal/cmdtest" ) type testEthkey struct { diff --git a/cmd/ethkey/utils.go b/cmd/ethkey/utils.go index 338d48ce..28211450 100644 --- a/cmd/ethkey/utils.go +++ b/cmd/ethkey/utils.go @@ -19,44 +19,21 @@ package main import ( "encoding/json" "fmt" - "io/ioutil" + "os" "strings" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/console" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/urfave/cli/v2" ) -// 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("Password: ") - if err != nil { - utils.Fatalf("Failed to read password: %v", err) - } - - if confirmation { - confirm, err := console.Stdin.PromptPassword("Repeat password: ") - if err != nil { - utils.Fatalf("Failed to read password confirmation: %v", err) - } - if passphrase != confirm { - utils.Fatalf("Passwords do not match") - } - } - - return passphrase -} - // getPassphrase obtains a passphrase given by the user. It first checks the // --passfile command line flag and ultimately prompts the user for a // passphrase. -func getPassphrase(ctx *cli.Context) string { +func getPassphrase(ctx *cli.Context, confirmation bool) string { // Look for the --passwordfile flag. passphraseFile := ctx.String(passphraseFlag.Name) if passphraseFile != "" { - content, err := ioutil.ReadFile(passphraseFile) + content, err := os.ReadFile(passphraseFile) if err != nil { utils.Fatalf("Failed to read password file '%s': %v", passphraseFile, err) @@ -65,19 +42,7 @@ func getPassphrase(ctx *cli.Context) string { } // Otherwise prompt the user for the passphrase. - return promptPassphrase(false) -} - -// 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)) + return utils.GetPassPhrase("", confirmation) } // mustPrintJSON prints the JSON encoding of the given object and diff --git a/cmd/evm/README.md b/cmd/evm/README.md new file mode 100644 index 00000000..1a029ab7 --- /dev/null +++ b/cmd/evm/README.md @@ -0,0 +1,338 @@ +## EVM state transition tool + +The `evm t8n` tool is a stateless state transition utility. It is a utility +which can + +1. Take a prestate, including +- Accounts, +- Block context information, +- Previous blockshashes (*optional) +2. Apply a set of transactions, +3. Apply a mining-reward (*optional), +4. And generate a post-state, including +- State root, transaction root, receipt root, +- Information about rejected transactions, +- Optionally: a full or partial post-state dump + +## Specification + +The idea is to specify the behaviour of this binary very _strict_, so that other +node implementors can build replicas based on their own state-machines, and the +state generators can swap between a `geth`-based implementation and a `parityvm`-based +implementation. + +### Command line params + +Command line params that has to be supported are +``` + + --trace Output full trace logs to files .jsonl + --trace.nomemory Disable full memory dump in traces + --trace.nostack Disable stack output in traces + --trace.noreturndata Disable return data output in traces + --output.basedir value Specifies where output files are placed. Will be created if it does not exist. + --output.alloc alloc Determines where to put the alloc of the post-state. + `stdout` - into the stdout output + `stderr` - into the stderr output + --output.result result Determines where to put the result (stateroot, txroot etc) of the post-state. + `stdout` - into the stdout output + `stderr` - into the stderr output + --output.body value If set, the RLP of the transactions (block body) will be written to this file. + --input.txs stdin stdin or file name of where to find the transactions to apply. If the file prefix is '.rlp', then the data is interpreted as an RLP list of signed transactions.The '.rlp' format is identical to the output.body format. (default: "txs.json") + --state.fork value Name of ruleset to use. + --state.chainid value ChainID to use (default: 1) + --state.reward value Mining reward. Set to -1 to disable (default: 0) + +``` + +### Error codes and output + +All logging should happen against the `stderr`. +There are a few (not many) errors that can occur, those are defined below. + +#### EVM-based errors (`2` to `9`) + +- Other EVM error. Exit code `2` +- Failed configuration: when a non-supported or invalid fork was specified. Exit code `3`. +- Block history is not supplied, but needed for a `BLOCKHASH` operation. If `BLOCKHASH` + is invoked targeting a block which history has not been provided for, the program will + exit with code `4`. + +#### IO errors (`10`-`20`) + +- Invalid input json: the supplied data could not be marshalled. + The program will exit with code `10` +- IO problems: failure to load or save files, the program will exit with code `11` + +## Examples +### Basic usage + +Invoking it with the provided example files +``` +./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json +``` +Two resulting files: + +`alloc.json`: +```json +{ + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": { + "balance": "0xfeed1a9d", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "nonce": "0xac" + }, + "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xa410" + } +} +``` +`result.json`: +```json +{ + "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13", + "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d", + "receiptRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x5208", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + } + ], + "rejected": [ + { + "index": 1, + "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" + } + ] +} +``` + +We can make them spit out the data to e.g. `stdout` like this: +``` +./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.result=stdout --output.alloc=stdout +``` +Output: +```json +{ + "alloc": { + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": { + "balance": "0xfeed1a9d", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "nonce": "0xac" + }, + "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xa410" + } + }, + "result": { + "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13", + "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d", + "receiptRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x5208", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + } + ], + "rejected": [ + { + "index": 1, + "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" + } + ] + } +} +``` + +## About Ommers + +Mining rewards and ommer rewards might need to be added. This is how those are applied: + +- `block_reward` is the block mining reward for the miner (`0xaa`), of a block at height `N`. +- For each ommer (mined by `0xbb`), with blocknumber `N-delta` + - (where `delta` is the difference between the current block and the ommer) + - The account `0xbb` (ommer miner) is awarded `(8-delta)/ 8 * block_reward` + - The account `0xaa` (block miner) is awarded `block_reward / 32` + +To make `state_t8n` apply these, the following inputs are required: + +- `state.reward` + - For ethash, it is `5000000000000000000` `wei`, + - If this is not defined, mining rewards are not applied, + - A value of `0` is valid, and causes accounts to be 'touched'. +- For each ommer, the tool needs to be given an `address` and a `delta`. This + is done via the `env`. + +Note: the tool does not verify that e.g. the normal uncle rules apply, +and allows e.g two uncles at the same height, or the uncle-distance. This means that +the tool allows for negative uncle reward (distance > 8) + +Example: +`./testdata/5/env.json`: +```json +{ + "currentCoinbase": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "currentDifficulty": "0x20000", + "currentGasLimit": "0x750a163df65e8a", + "currentNumber": "1", + "currentTimestamp": "1000", + "ommers": [ + {"delta": 1, "address": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" }, + {"delta": 2, "address": "0xcccccccccccccccccccccccccccccccccccccccc" } + ] +} +``` +When applying this, using a reward of `0x80` +Output: +```json +{ + "alloc": { + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { + "balance": "0x88" + }, + "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": { + "balance": "0x70" + }, + "0xcccccccccccccccccccccccccccccccccccccccc": { + "balance": "0x60" + } + } +} +``` +### Future EIPS + +It is also possible to experiment with future eips that are not yet defined in a hard fork. +Example, putting EIP-1344 into Frontier: +``` +./evm t8n --state.fork=Frontier+1344 --input.pre=./testdata/1/pre.json --input.txs=./testdata/1/txs.json --input.env=/testdata/1/env.json +``` + +### Block history + +The `BLOCKHASH` opcode requires blockhashes to be provided by the caller, inside the `env`. +If a required blockhash is not provided, the exit code should be `4`: +Example where blockhashes are provided: +``` +./evm --verbosity=1 t8n --input.alloc=./testdata/3/alloc.json --input.txs=./testdata/3/txs.json --input.env=./testdata/3/env.json --trace +INFO [07-27|11:53:40.960] Trie dumping started root=b7341d..857ea1 +INFO [07-27|11:53:40.960] Trie dumping complete accounts=3 elapsed="103.298µs" +INFO [07-27|11:53:40.960] Wrote file file=alloc.json +INFO [07-27|11:53:40.960] Wrote file file=result.json + +``` + +``` +cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2 +``` +``` +{"pc":0,"op":96,"gas":"0x5f58ef8","gasCost":"0x3","memory":"0x","memSize":0,"stack":[],"returnData":"0x","depth":1,"refund":0,"opName":"PUSH1","error":""} +{"pc":2,"op":64,"gas":"0x5f58ef5","gasCost":"0x14","memory":"0x","memSize":0,"stack":["0x1"],"returnData":"0x","depth":1,"refund":0,"opName":"BLOCKHASH","error":""} +{"pc":3,"op":0,"gas":"0x5f58ee1","gasCost":"0x0","memory":"0x","memSize":0,"stack":["0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"],"returnData":"0x","depth":1,"refund":0,"opName":"STOP","error":""} +{"output":"","gasUsed":"0x17","time":156276} +``` + +In this example, the caller has not provided the required blockhash: +``` +./evm t8n --input.alloc=./testdata/4/alloc.json --input.txs=./testdata/4/txs.json --input.env=./testdata/4/env.json --trace +ERROR(4): getHash(3) invoked, blockhash for that block not provided +``` +Error code: 4 + +### Chaining + +Another thing that can be done, is to chain invocations: +``` +./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.alloc=stdout | ./evm t8n --input.alloc=stdin --input.env=./testdata/1/env.json --input.txs=./testdata/1/txs.json +INFO [07-27|11:53:41.049] rejected tx index=1 hash=0557ba..18d673 from=0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192 error="nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" +INFO [07-27|11:53:41.050] Trie dumping started root=84208a..ae4e13 +INFO [07-27|11:53:41.050] Trie dumping complete accounts=3 elapsed="59.412µs" +INFO [07-27|11:53:41.050] Wrote file file=result.json +INFO [07-27|11:53:41.051] rejected tx index=0 hash=0557ba..18d673 from=0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192 error="nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" +INFO [07-27|11:53:41.051] rejected tx index=1 hash=0557ba..18d673 from=0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192 error="nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" +INFO [07-27|11:53:41.052] Trie dumping started root=84208a..ae4e13 +INFO [07-27|11:53:41.052] Trie dumping complete accounts=3 elapsed="45.734µs" +INFO [07-27|11:53:41.052] Wrote file file=alloc.json +INFO [07-27|11:53:41.052] Wrote file file=result.json + +``` +What happened here, is that we first applied two identical transactions, so the second one was rejected. +Then, taking the poststate alloc as the input for the next state, we tried again to include +the same two transactions: this time, both failed due to too low nonce. + +In order to meaningfully chain invocations, one would need to provide meaningful new `env`, otherwise the +actual blocknumber (exposed to the EVM) would not increase. + +### Transactions in RLP form + +It is possible to provide already-signed transactions as input to, using an `input.txs` which ends with the `rlp` suffix. +The input format for RLP-form transactions is _identical_ to the _output_ format for block bodies. Therefore, it's fully possible +to use the evm to go from `json` input to `rlp` input. + +The following command takes **json** the transactions in `./testdata/13/txs.json` and signs them. After execution, they are output to `signed_txs.rlp`.: +``` +./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./testdata/13/txs.json --input.env=./testdata/13/env.json --output.result=alloc_jsontx.json --output.body=signed_txs.rlp +INFO [07-27|11:53:41.124] Trie dumping started root=e4b924..6aef61 +INFO [07-27|11:53:41.124] Trie dumping complete accounts=3 elapsed="94.284µs" +INFO [07-27|11:53:41.125] Wrote file file=alloc.json +INFO [07-27|11:53:41.125] Wrote file file=alloc_jsontx.json +INFO [07-27|11:53:41.125] Wrote file file=signed_txs.rlp + +``` + +The `output.body` is the rlp-list of transactions, encoded in hex and placed in a string a'la `json` encoding rules: +``` +cat signed_txs.rlp +"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" +``` + +We can use `rlpdump` to check what the contents are: +``` +rlpdump -hex $(cat signed_txs.rlp | jq -r ) +[ + 02f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904, + 02f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9, +] +``` +Now, we can now use those (or any other already signed transactions), as input, like so: +``` +./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./signed_txs.rlp --input.env=./testdata/13/env.json --output.result=alloc_rlptx.json +INFO [07-27|11:53:41.253] Trie dumping started root=e4b924..6aef61 +INFO [07-27|11:53:41.253] Trie dumping complete accounts=3 elapsed="128.445µs" +INFO [07-27|11:53:41.253] Wrote file file=alloc.json +INFO [07-27|11:53:41.255] Wrote file file=alloc_rlptx.json + +``` + +You might have noticed that the results from these two invocations were stored in two separate files. +And we can now finally check that they match. +``` +cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot +"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61" +"0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61" +``` diff --git a/cmd/evm/compiler.go b/cmd/evm/compiler.go index 2450da3a..699d434b 100644 --- a/cmd/evm/compiler.go +++ b/cmd/evm/compiler.go @@ -19,14 +19,14 @@ package main import ( "errors" "fmt" - "io/ioutil" + "os" - "github.com/cryptoecc/ETH-ECC/cmd/evm/internal/compiler" + "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler" - cli "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) -var compileCommand = cli.Command{ +var compileCommand = &cli.Command{ Action: compileCmd, Name: "compile", Usage: "compiles easm source to evm binary", @@ -34,14 +34,14 @@ var compileCommand = cli.Command{ } func compileCmd(ctx *cli.Context) error { - debug := ctx.GlobalBool(DebugFlag.Name) + debug := ctx.Bool(DebugFlag.Name) if len(ctx.Args().First()) == 0 { return errors.New("filename required") } fn := ctx.Args().First() - src, err := ioutil.ReadFile(fn) + src, err := os.ReadFile(fn) if err != nil { return err } diff --git a/cmd/evm/disasm.go b/cmd/evm/disasm.go index 8df89e05..a6a16fd1 100644 --- a/cmd/evm/disasm.go +++ b/cmd/evm/disasm.go @@ -19,14 +19,14 @@ package main import ( "errors" "fmt" - "io/ioutil" + "os" "strings" - "github.com/cryptoecc/ETH-ECC/core/asm" - cli "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/core/asm" + "github.com/urfave/cli/v2" ) -var disasmCommand = cli.Command{ +var disasmCommand = &cli.Command{ Action: disasmCmd, Name: "disasm", Usage: "disassembles evm binary", @@ -34,17 +34,22 @@ var disasmCommand = cli.Command{ } func disasmCmd(ctx *cli.Context) error { - if len(ctx.Args().First()) == 0 { - return errors.New("filename required") + var in string + switch { + case len(ctx.Args().First()) > 0: + fn := ctx.Args().First() + input, err := os.ReadFile(fn) + if err != nil { + return err + } + in = string(input) + case ctx.IsSet(InputFlag.Name): + in = ctx.String(InputFlag.Name) + default: + return errors.New("missing filename or --input value") } - fn := ctx.Args().First() - in, err := ioutil.ReadFile(fn) - if err != nil { - return err - } - - code := strings.TrimSpace(string(in)) + code := strings.TrimSpace(in) fmt.Printf("%v\n", code) return asm.PrintDisassembled(code) } diff --git a/cmd/evm/internal/compiler/compiler.go b/cmd/evm/internal/compiler/compiler.go index 2102893b..54981b66 100644 --- a/cmd/evm/internal/compiler/compiler.go +++ b/cmd/evm/internal/compiler/compiler.go @@ -20,7 +20,7 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/core/asm" + "github.com/ethereum/go-ethereum/core/asm" ) func Compile(fn string, src []byte, debug bool) (string, error) { diff --git a/cmd/evm/internal/t8ntool/block.go b/cmd/evm/internal/t8ntool/block.go new file mode 100644 index 00000000..4a070b6c --- /dev/null +++ b/cmd/evm/internal/t8ntool/block.go @@ -0,0 +1,380 @@ +// Copyright 2021 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 t8ntool + +import ( + "crypto/ecdsa" + "encoding/json" + "errors" + "fmt" + "math/big" + "os" + + "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/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/urfave/cli/v2" +) + +//go:generate go run github.com/fjl/gencodec -type header -field-override headerMarshaling -out gen_header.go +type header struct { + ParentHash common.Hash `json:"parentHash"` + OmmerHash *common.Hash `json:"sha3Uncles"` + Coinbase *common.Address `json:"miner"` + Root common.Hash `json:"stateRoot" gencodec:"required"` + TxHash *common.Hash `json:"transactionsRoot"` + ReceiptHash *common.Hash `json:"receiptsRoot"` + Bloom types.Bloom `json:"logsBloom"` + Difficulty *big.Int `json:"difficulty"` + Number *big.Int `json:"number" gencodec:"required"` + GasLimit uint64 `json:"gasLimit" gencodec:"required"` + GasUsed uint64 `json:"gasUsed"` + Time uint64 `json:"timestamp" gencodec:"required"` + Extra []byte `json:"extraData"` + MixDigest common.Hash `json:"mixHash"` + Nonce *types.BlockNonce `json:"nonce"` + BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"` +} + +type headerMarshaling struct { + Difficulty *math.HexOrDecimal256 + Number *math.HexOrDecimal256 + GasLimit math.HexOrDecimal64 + GasUsed math.HexOrDecimal64 + Time math.HexOrDecimal64 + Extra hexutil.Bytes + BaseFee *math.HexOrDecimal256 +} + +type bbInput struct { + Header *header `json:"header,omitempty"` + OmmersRlp []string `json:"ommers,omitempty"` + TxRlp string `json:"txs,omitempty"` + Clique *cliqueInput `json:"clique,omitempty"` + + Ethash bool `json:"-"` + EthashDir string `json:"-"` + PowMode ethash.Mode `json:"-"` + Txs []*types.Transaction `json:"-"` + Ommers []*types.Header `json:"-"` +} + +type cliqueInput struct { + Key *ecdsa.PrivateKey + Voted *common.Address + Authorize *bool + Vanity common.Hash +} + +// UnmarshalJSON implements json.Unmarshaler interface. +func (c *cliqueInput) UnmarshalJSON(input []byte) error { + var x struct { + Key *common.Hash `json:"secretKey"` + Voted *common.Address `json:"voted"` + Authorize *bool `json:"authorize"` + Vanity common.Hash `json:"vanity"` + } + if err := json.Unmarshal(input, &x); err != nil { + return err + } + if x.Key == nil { + return errors.New("missing required field 'secretKey' for cliqueInput") + } + if ecdsaKey, err := crypto.ToECDSA(x.Key[:]); err != nil { + return err + } else { + c.Key = ecdsaKey + } + c.Voted = x.Voted + c.Authorize = x.Authorize + c.Vanity = x.Vanity + return nil +} + +// ToBlock converts i into a *types.Block +func (i *bbInput) ToBlock() *types.Block { + header := &types.Header{ + ParentHash: i.Header.ParentHash, + UncleHash: types.EmptyUncleHash, + Coinbase: common.Address{}, + Root: i.Header.Root, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + Bloom: i.Header.Bloom, + Difficulty: common.Big0, + Number: i.Header.Number, + GasLimit: i.Header.GasLimit, + GasUsed: i.Header.GasUsed, + Time: i.Header.Time, + Extra: i.Header.Extra, + MixDigest: i.Header.MixDigest, + BaseFee: i.Header.BaseFee, + } + + // Fill optional values. + if i.Header.OmmerHash != nil { + header.UncleHash = *i.Header.OmmerHash + } else if len(i.Ommers) != 0 { + // Calculate the ommer hash if none is provided and there are ommers to hash + header.UncleHash = types.CalcUncleHash(i.Ommers) + } + if i.Header.Coinbase != nil { + header.Coinbase = *i.Header.Coinbase + } + if i.Header.TxHash != nil { + header.TxHash = *i.Header.TxHash + } + if i.Header.ReceiptHash != nil { + header.ReceiptHash = *i.Header.ReceiptHash + } + if i.Header.Nonce != nil { + header.Nonce = *i.Header.Nonce + } + if header.Difficulty != nil { + header.Difficulty = i.Header.Difficulty + } + return types.NewBlockWithHeader(header).WithBody(i.Txs, i.Ommers) +} + +// SealBlock seals the given block using the configured engine. +func (i *bbInput) SealBlock(block *types.Block) (*types.Block, error) { + switch { + case i.Ethash: + return i.sealEthash(block) + case i.Clique != nil: + return i.sealClique(block) + default: + return block, nil + } +} + +// sealEthash seals the given block using ethash. +func (i *bbInput) sealEthash(block *types.Block) (*types.Block, error) { + if i.Header.Nonce != nil { + return nil, NewError(ErrorConfig, fmt.Errorf("sealing with ethash will overwrite provided nonce")) + } + ethashConfig := ethash.Config{ + PowMode: i.PowMode, + DatasetDir: i.EthashDir, + CacheDir: i.EthashDir, + DatasetsInMem: 1, + DatasetsOnDisk: 2, + CachesInMem: 2, + CachesOnDisk: 3, + } + engine := ethash.New(ethashConfig, nil, true) + defer engine.Close() + // Use a buffered chan for results. + // If the testmode is used, the sealer will return quickly, and complain + // "Sealing result is not read by miner" if it cannot write the result. + results := make(chan *types.Block, 1) + if err := engine.Seal(nil, block, results, nil); err != nil { + panic(fmt.Sprintf("failed to seal block: %v", err)) + } + found := <-results + return block.WithSeal(found.Header()), nil +} + +// sealClique seals the given block using clique. +func (i *bbInput) sealClique(block *types.Block) (*types.Block, error) { + // If any clique value overwrites an explicit header value, fail + // to avoid silently building a block with unexpected values. + if i.Header.Extra != nil { + return nil, NewError(ErrorConfig, fmt.Errorf("sealing with clique will overwrite provided extra data")) + } + header := block.Header() + if i.Clique.Voted != nil { + if i.Header.Coinbase != nil { + return nil, NewError(ErrorConfig, fmt.Errorf("sealing with clique and voting will overwrite provided coinbase")) + } + header.Coinbase = *i.Clique.Voted + } + if i.Clique.Authorize != nil { + if i.Header.Nonce != nil { + return nil, NewError(ErrorConfig, fmt.Errorf("sealing with clique and voting will overwrite provided nonce")) + } + if *i.Clique.Authorize { + header.Nonce = [8]byte{} + } else { + header.Nonce = [8]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} + } + } + // Extra is fixed 32 byte vanity and 65 byte signature + header.Extra = make([]byte, 32+65) + copy(header.Extra[0:32], i.Clique.Vanity.Bytes()[:]) + + // Sign the seal hash and fill in the rest of the extra data + h := clique.SealHash(header) + sighash, err := crypto.Sign(h[:], i.Clique.Key) + if err != nil { + return nil, err + } + copy(header.Extra[32:], sighash) + block = block.WithSeal(header) + return block, nil +} + +// BuildBlock constructs a block from the given inputs. +func BuildBlock(ctx *cli.Context) error { + // Configure the go-ethereum logger + glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) + glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) + log.Root().SetHandler(glogger) + + baseDir, err := createBasedir(ctx) + if err != nil { + return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err)) + } + inputData, err := readInput(ctx) + if err != nil { + return err + } + block := inputData.ToBlock() + block, err = inputData.SealBlock(block) + if err != nil { + return err + } + return dispatchBlock(ctx, baseDir, block) +} + +func readInput(ctx *cli.Context) (*bbInput, error) { + var ( + headerStr = ctx.String(InputHeaderFlag.Name) + ommersStr = ctx.String(InputOmmersFlag.Name) + txsStr = ctx.String(InputTxsRlpFlag.Name) + cliqueStr = ctx.String(SealCliqueFlag.Name) + ethashOn = ctx.Bool(SealEthashFlag.Name) + ethashDir = ctx.String(SealEthashDirFlag.Name) + ethashMode = ctx.String(SealEthashModeFlag.Name) + inputData = &bbInput{} + ) + if ethashOn && cliqueStr != "" { + return nil, NewError(ErrorConfig, fmt.Errorf("both ethash and clique sealing specified, only one may be chosen")) + } + if ethashOn { + inputData.Ethash = ethashOn + inputData.EthashDir = ethashDir + switch ethashMode { + case "normal": + inputData.PowMode = ethash.ModeNormal + case "test": + inputData.PowMode = ethash.ModeTest + case "fake": + inputData.PowMode = ethash.ModeFake + default: + return nil, NewError(ErrorConfig, fmt.Errorf("unknown pow mode: %s, supported modes: test, fake, normal", ethashMode)) + } + } + if headerStr == stdinSelector || ommersStr == stdinSelector || txsStr == stdinSelector || cliqueStr == stdinSelector { + decoder := json.NewDecoder(os.Stdin) + if err := decoder.Decode(inputData); err != nil { + return nil, NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err)) + } + } + if cliqueStr != stdinSelector && cliqueStr != "" { + var clique cliqueInput + if err := readFile(cliqueStr, "clique", &clique); err != nil { + return nil, err + } + inputData.Clique = &clique + } + if headerStr != stdinSelector { + var env header + if err := readFile(headerStr, "header", &env); err != nil { + return nil, err + } + inputData.Header = &env + } + if ommersStr != stdinSelector && ommersStr != "" { + var ommers []string + if err := readFile(ommersStr, "ommers", &ommers); err != nil { + return nil, err + } + inputData.OmmersRlp = ommers + } + if txsStr != stdinSelector { + var txs string + if err := readFile(txsStr, "txs", &txs); err != nil { + return nil, err + } + inputData.TxRlp = txs + } + // Deserialize rlp txs and ommers + var ( + ommers = []*types.Header{} + txs = []*types.Transaction{} + ) + if inputData.TxRlp != "" { + if err := rlp.DecodeBytes(common.FromHex(inputData.TxRlp), &txs); err != nil { + return nil, NewError(ErrorRlp, fmt.Errorf("unable to decode transaction from rlp data: %v", err)) + } + inputData.Txs = txs + } + for _, str := range inputData.OmmersRlp { + type extblock struct { + Header *types.Header + Txs []*types.Transaction + Ommers []*types.Header + } + var ommer *extblock + if err := rlp.DecodeBytes(common.FromHex(str), &ommer); err != nil { + return nil, NewError(ErrorRlp, fmt.Errorf("unable to decode ommer from rlp data: %v", err)) + } + ommers = append(ommers, ommer.Header) + } + inputData.Ommers = ommers + + return inputData, nil +} + +// dispatchOutput writes the output data to either stderr or stdout, or to the specified +// files +func dispatchBlock(ctx *cli.Context, baseDir string, block *types.Block) error { + raw, _ := rlp.EncodeToBytes(block) + + type blockInfo struct { + Rlp hexutil.Bytes `json:"rlp"` + Hash common.Hash `json:"hash"` + } + var enc blockInfo + enc.Rlp = raw + enc.Hash = block.Hash() + + b, err := json.MarshalIndent(enc, "", " ") + if err != nil { + return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err)) + } + switch dest := ctx.String(OutputBlockFlag.Name); dest { + case "stdout": + os.Stdout.Write(b) + os.Stdout.WriteString("\n") + case "stderr": + os.Stderr.Write(b) + os.Stderr.WriteString("\n") + default: + if err := saveFile(baseDir, dest, enc); err != nil { + return err + } + } + return nil +} diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go new file mode 100644 index 00000000..77f6ec37 --- /dev/null +++ b/cmd/evm/internal/t8ntool/execution.go @@ -0,0 +1,312 @@ +// Copyright 2020 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 t8ntool + +import ( + "fmt" + "math/big" + "os" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "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/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +type Prestate struct { + Env stEnv `json:"env"` + Pre core.GenesisAlloc `json:"pre"` +} + +// ExecutionResult contains the execution status after running a state test, any +// error that might have occurred and a dump of the final state if requested. +type ExecutionResult struct { + StateRoot common.Hash `json:"stateRoot"` + TxRoot common.Hash `json:"txRoot"` + ReceiptRoot common.Hash `json:"receiptsRoot"` + LogsHash common.Hash `json:"logsHash"` + Bloom types.Bloom `json:"logsBloom" gencodec:"required"` + Receipts types.Receipts `json:"receipts"` + Rejected []*rejectedTx `json:"rejected,omitempty"` + Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"required"` + GasUsed math.HexOrDecimal64 `json:"gasUsed"` +} + +type ommer struct { + Delta uint64 `json:"delta"` + Address common.Address `json:"address"` +} + +//go:generate go run github.com/fjl/gencodec -type stEnv -field-override stEnvMarshaling -out gen_stenv.go +type stEnv struct { + Coinbase common.Address `json:"currentCoinbase" gencodec:"required"` + Difficulty *big.Int `json:"currentDifficulty"` + Random *big.Int `json:"currentRandom"` + ParentDifficulty *big.Int `json:"parentDifficulty"` + GasLimit uint64 `json:"currentGasLimit" gencodec:"required"` + Number uint64 `json:"currentNumber" gencodec:"required"` + Timestamp uint64 `json:"currentTimestamp" gencodec:"required"` + ParentTimestamp uint64 `json:"parentTimestamp,omitempty"` + BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"` + Ommers []ommer `json:"ommers,omitempty"` + BaseFee *big.Int `json:"currentBaseFee,omitempty"` + ParentUncleHash common.Hash `json:"parentUncleHash"` +} + +type stEnvMarshaling struct { + Coinbase common.UnprefixedAddress + Difficulty *math.HexOrDecimal256 + Random *math.HexOrDecimal256 + ParentDifficulty *math.HexOrDecimal256 + GasLimit math.HexOrDecimal64 + Number math.HexOrDecimal64 + Timestamp math.HexOrDecimal64 + ParentTimestamp math.HexOrDecimal64 + BaseFee *math.HexOrDecimal256 +} + +type rejectedTx struct { + Index int `json:"index"` + Err string `json:"error"` +} + +// Apply applies a set of transactions to a pre-state +func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, + txs types.Transactions, miningReward int64, + getTracerFn func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error)) (*state.StateDB, *ExecutionResult, error) { + // Capture errors for BLOCKHASH operation, if we haven't been supplied the + // required blockhashes + var hashError error + getHash := func(num uint64) common.Hash { + if pre.Env.BlockHashes == nil { + hashError = fmt.Errorf("getHash(%d) invoked, no blockhashes provided", num) + return common.Hash{} + } + h, ok := pre.Env.BlockHashes[math.HexOrDecimal64(num)] + if !ok { + hashError = fmt.Errorf("getHash(%d) invoked, blockhash for that block not provided", num) + } + return h + } + var ( + statedb = MakePreState(rawdb.NewMemoryDatabase(), pre.Pre) + signer = types.MakeSigner(chainConfig, new(big.Int).SetUint64(pre.Env.Number)) + gaspool = new(core.GasPool) + blockHash = common.Hash{0x13, 0x37} + rejectedTxs []*rejectedTx + includedTxs types.Transactions + gasUsed = uint64(0) + receipts = make(types.Receipts, 0) + txIndex = 0 + ) + gaspool.AddGas(pre.Env.GasLimit) + vmContext := vm.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + Coinbase: pre.Env.Coinbase, + BlockNumber: new(big.Int).SetUint64(pre.Env.Number), + Time: new(big.Int).SetUint64(pre.Env.Timestamp), + Difficulty: pre.Env.Difficulty, + GasLimit: pre.Env.GasLimit, + GetHash: getHash, + } + // If currentBaseFee is defined, add it to the vmContext. + if pre.Env.BaseFee != nil { + vmContext.BaseFee = new(big.Int).Set(pre.Env.BaseFee) + } + // If random is defined, add it to the vmContext. + if pre.Env.Random != nil { + rnd := common.BigToHash(pre.Env.Random) + vmContext.Random = &rnd + } + // If DAO is supported/enabled, we need to handle it here. In geth 'proper', it's + // done in StateProcessor.Process(block, ...), right before transactions are applied. + if chainConfig.DAOForkSupport && + chainConfig.DAOForkBlock != nil && + chainConfig.DAOForkBlock.Cmp(new(big.Int).SetUint64(pre.Env.Number)) == 0 { + misc.ApplyDAOHardFork(statedb) + } + + for i, tx := range txs { + msg, err := tx.AsMessage(signer, pre.Env.BaseFee) + if err != nil { + log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", err) + rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) + continue + } + tracer, err := getTracerFn(txIndex, tx.Hash()) + if err != nil { + return nil, nil, err + } + vmConfig.Tracer = tracer + vmConfig.Debug = (tracer != nil) + statedb.Prepare(tx.Hash(), txIndex) + txContext := core.NewEVMTxContext(msg) + snapshot := statedb.Snapshot() + evm := vm.NewEVM(vmContext, txContext, statedb, chainConfig, vmConfig) + + // (ret []byte, usedGas uint64, failed bool, err error) + msgResult, err := core.ApplyMessage(evm, msg, gaspool) + if err != nil { + statedb.RevertToSnapshot(snapshot) + log.Info("rejected tx", "index", i, "hash", tx.Hash(), "from", msg.From(), "error", err) + rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) + continue + } + includedTxs = append(includedTxs, tx) + if hashError != nil { + return nil, nil, NewError(ErrorMissingBlockhash, hashError) + } + gasUsed += msgResult.UsedGas + + // Receipt: + { + var root []byte + if chainConfig.IsByzantium(vmContext.BlockNumber) { + statedb.Finalise(true) + } else { + root = statedb.IntermediateRoot(chainConfig.IsEIP158(vmContext.BlockNumber)).Bytes() + } + + // Create a new receipt for the transaction, storing the intermediate root and + // gas used by the tx. + receipt := &types.Receipt{Type: tx.Type(), PostState: root, CumulativeGasUsed: gasUsed} + if msgResult.Failed() { + receipt.Status = types.ReceiptStatusFailed + } else { + receipt.Status = types.ReceiptStatusSuccessful + } + receipt.TxHash = tx.Hash() + receipt.GasUsed = msgResult.UsedGas + + // If the transaction created a contract, store the creation address in the receipt. + if msg.To() == nil { + receipt.ContractAddress = crypto.CreateAddress(evm.TxContext.Origin, tx.Nonce()) + } + + // Set the receipt logs and create the bloom filter. + receipt.Logs = statedb.GetLogs(tx.Hash(), blockHash) + receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + // These three are non-consensus fields: + //receipt.BlockHash + //receipt.BlockNumber + receipt.TransactionIndex = uint(txIndex) + receipts = append(receipts, receipt) + } + + txIndex++ + } + statedb.IntermediateRoot(chainConfig.IsEIP158(vmContext.BlockNumber)) + // Add mining reward? + if miningReward > 0 { + // Add mining reward. The mining reward may be `0`, which only makes a difference in the cases + // where + // - the coinbase suicided, or + // - there are only 'bad' transactions, which aren't executed. In those cases, + // the coinbase gets no txfee, so isn't created, and thus needs to be touched + var ( + blockReward = big.NewInt(miningReward) + minerReward = new(big.Int).Set(blockReward) + perOmmer = new(big.Int).Div(blockReward, big.NewInt(32)) + ) + for _, ommer := range pre.Env.Ommers { + // Add 1/32th for each ommer included + minerReward.Add(minerReward, perOmmer) + // Add (8-delta)/8 + reward := big.NewInt(8) + reward.Sub(reward, new(big.Int).SetUint64(ommer.Delta)) + reward.Mul(reward, blockReward) + reward.Div(reward, big.NewInt(8)) + statedb.AddBalance(ommer.Address, reward) + } + statedb.AddBalance(pre.Env.Coinbase, minerReward) + } + // Commit block + root, err := statedb.Commit(chainConfig.IsEIP158(vmContext.BlockNumber)) + if err != nil { + fmt.Fprintf(os.Stderr, "Could not commit state: %v", err) + return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err)) + } + execRs := &ExecutionResult{ + StateRoot: root, + TxRoot: types.DeriveSha(includedTxs, trie.NewStackTrie(nil)), + ReceiptRoot: types.DeriveSha(receipts, trie.NewStackTrie(nil)), + Bloom: types.CreateBloom(receipts), + LogsHash: rlpHash(statedb.Logs()), + Receipts: receipts, + Rejected: rejectedTxs, + Difficulty: (*math.HexOrDecimal256)(vmContext.Difficulty), + GasUsed: (math.HexOrDecimal64)(gasUsed), + } + return statedb, execRs, nil +} + +func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB { + sdb := state.NewDatabaseWithConfig(db, &trie.Config{Preimages: true}) + statedb, _ := state.New(common.Hash{}, sdb, nil) + for addr, a := range accounts { + statedb.SetCode(addr, a.Code) + statedb.SetNonce(addr, a.Nonce) + statedb.SetBalance(addr, a.Balance) + for k, v := range a.Storage { + statedb.SetState(addr, k, v) + } + } + // Commit and re-open to start with a clean state. + root, _ := statedb.Commit(false) + statedb, _ = state.New(root, sdb, nil) + return statedb +} + +func rlpHash(x interface{}) (h common.Hash) { + hw := sha3.NewLegacyKeccak256() + rlp.Encode(hw, x) + hw.Sum(h[:0]) + return h +} + +// calcDifficulty is based on ethash.CalcDifficulty. This method is used in case +// the caller does not provide an explicit difficulty, but instead provides only +// parent timestamp + difficulty. +// Note: this method only works for ethash engine. +func calcDifficulty(config *params.ChainConfig, number, currentTime, parentTime uint64, + parentDifficulty *big.Int, parentUncleHash common.Hash) *big.Int { + uncleHash := parentUncleHash + if uncleHash == (common.Hash{}) { + uncleHash = types.EmptyUncleHash + } + parent := &types.Header{ + ParentHash: common.Hash{}, + UncleHash: uncleHash, + Difficulty: parentDifficulty, + Number: new(big.Int).SetUint64(number - 1), + Time: parentTime, + } + return ethash.CalcDifficulty(config, currentTime, parent) +} diff --git a/cmd/evm/internal/t8ntool/flags.go b/cmd/evm/internal/t8ntool/flags.go new file mode 100644 index 00000000..62622031 --- /dev/null +++ b/cmd/evm/internal/t8ntool/flags.go @@ -0,0 +1,164 @@ +// Copyright 2020 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 t8ntool + +import ( + "fmt" + "strings" + + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/tests" + "github.com/urfave/cli/v2" +) + +var ( + TraceFlag = &cli.BoolFlag{ + Name: "trace", + Usage: "Output full trace logs to files .jsonl", + } + TraceDisableMemoryFlag = &cli.BoolFlag{ + Name: "trace.nomemory", + Value: true, + Usage: "Disable full memory dump in traces (deprecated)", + } + TraceEnableMemoryFlag = &cli.BoolFlag{ + Name: "trace.memory", + Usage: "Enable full memory dump in traces", + } + TraceDisableStackFlag = &cli.BoolFlag{ + Name: "trace.nostack", + Usage: "Disable stack output in traces", + } + TraceDisableReturnDataFlag = &cli.BoolFlag{ + Name: "trace.noreturndata", + Value: true, + Usage: "Disable return data output in traces (deprecated)", + } + TraceEnableReturnDataFlag = &cli.BoolFlag{ + Name: "trace.returndata", + Usage: "Enable return data output in traces", + } + OutputBasedir = &cli.StringFlag{ + Name: "output.basedir", + Usage: "Specifies where output files are placed. Will be created if it does not exist.", + Value: "", + } + OutputBodyFlag = &cli.StringFlag{ + Name: "output.body", + Usage: "If set, the RLP of the transactions (block body) will be written to this file.", + Value: "", + } + OutputAllocFlag = &cli.StringFlag{ + Name: "output.alloc", + Usage: "Determines where to put the `alloc` of the post-state.\n" + + "\t`stdout` - into the stdout output\n" + + "\t`stderr` - into the stderr output\n" + + "\t - into the file ", + Value: "alloc.json", + } + OutputResultFlag = &cli.StringFlag{ + Name: "output.result", + Usage: "Determines where to put the `result` (stateroot, txroot etc) of the post-state.\n" + + "\t`stdout` - into the stdout output\n" + + "\t`stderr` - into the stderr output\n" + + "\t - into the file ", + Value: "result.json", + } + OutputBlockFlag = &cli.StringFlag{ + Name: "output.block", + Usage: "Determines where to put the `block` after building.\n" + + "\t`stdout` - into the stdout output\n" + + "\t`stderr` - into the stderr output\n" + + "\t - into the file ", + Value: "block.json", + } + InputAllocFlag = &cli.StringFlag{ + Name: "input.alloc", + Usage: "`stdin` or file name of where to find the prestate alloc to use.", + Value: "alloc.json", + } + InputEnvFlag = &cli.StringFlag{ + Name: "input.env", + Usage: "`stdin` or file name of where to find the prestate env to use.", + Value: "env.json", + } + InputTxsFlag = &cli.StringFlag{ + Name: "input.txs", + Usage: "`stdin` or file name of where to find the transactions to apply. " + + "If the file extension is '.rlp', then the data is interpreted as an RLP list of signed transactions." + + "The '.rlp' format is identical to the output.body format.", + Value: "txs.json", + } + InputHeaderFlag = &cli.StringFlag{ + Name: "input.header", + Usage: "`stdin` or file name of where to find the block header to use.", + Value: "header.json", + } + InputOmmersFlag = &cli.StringFlag{ + Name: "input.ommers", + Usage: "`stdin` or file name of where to find the list of ommer header RLPs to use.", + } + InputTxsRlpFlag = &cli.StringFlag{ + Name: "input.txs", + Usage: "`stdin` or file name of where to find the transactions list in RLP form.", + Value: "txs.rlp", + } + SealCliqueFlag = &cli.StringFlag{ + Name: "seal.clique", + Usage: "Seal block with Clique. `stdin` or file name of where to find the Clique sealing data.", + } + SealEthashFlag = &cli.BoolFlag{ + Name: "seal.ethash", + Usage: "Seal block with ethash.", + } + SealEthashDirFlag = &cli.StringFlag{ + Name: "seal.ethash.dir", + Usage: "Path to ethash DAG. If none exists, a new DAG will be generated.", + } + SealEthashModeFlag = &cli.StringFlag{ + Name: "seal.ethash.mode", + Usage: "Defines the type and amount of PoW verification an ethash engine makes.", + Value: "normal", + } + RewardFlag = &cli.Int64Flag{ + Name: "state.reward", + Usage: "Mining reward. Set to -1 to disable", + Value: 0, + } + ChainIDFlag = &cli.Int64Flag{ + Name: "state.chainid", + Usage: "ChainID to use", + Value: 1, + } + ForknameFlag = &cli.StringFlag{ + Name: "state.fork", + Usage: fmt.Sprintf("Name of ruleset to use."+ + "\n\tAvailable forknames:"+ + "\n\t %v"+ + "\n\tAvailable extra eips:"+ + "\n\t %v"+ + "\n\tSyntax (+ExtraEip)", + strings.Join(tests.AvailableForks(), "\n\t "), + strings.Join(vm.ActivateableEips(), ", ")), + Value: "GrayGlacier", + } + VerbosityFlag = &cli.IntFlag{ + Name: "verbosity", + Usage: "sets the verbosity level", + Value: 3, + } +) diff --git a/cmd/evm/internal/t8ntool/gen_header.go b/cmd/evm/internal/t8ntool/gen_header.go new file mode 100644 index 00000000..196e49dd --- /dev/null +++ b/cmd/evm/internal/t8ntool/gen_header.go @@ -0,0 +1,135 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package t8ntool + +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" + "github.com/ethereum/go-ethereum/core/types" +) + +var _ = (*headerMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (h header) MarshalJSON() ([]byte, error) { + type header struct { + ParentHash common.Hash `json:"parentHash"` + OmmerHash *common.Hash `json:"sha3Uncles"` + Coinbase *common.Address `json:"miner"` + Root common.Hash `json:"stateRoot" gencodec:"required"` + TxHash *common.Hash `json:"transactionsRoot"` + ReceiptHash *common.Hash `json:"receiptsRoot"` + Bloom types.Bloom `json:"logsBloom"` + Difficulty *math.HexOrDecimal256 `json:"difficulty"` + Number *math.HexOrDecimal256 `json:"number" gencodec:"required"` + GasLimit math.HexOrDecimal64 `json:"gasLimit" gencodec:"required"` + GasUsed math.HexOrDecimal64 `json:"gasUsed"` + Time math.HexOrDecimal64 `json:"timestamp" gencodec:"required"` + Extra hexutil.Bytes `json:"extraData"` + MixDigest common.Hash `json:"mixHash"` + Nonce *types.BlockNonce `json:"nonce"` + BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas" rlp:"optional"` + } + var enc header + enc.ParentHash = h.ParentHash + enc.OmmerHash = h.OmmerHash + enc.Coinbase = h.Coinbase + enc.Root = h.Root + enc.TxHash = h.TxHash + enc.ReceiptHash = h.ReceiptHash + enc.Bloom = h.Bloom + enc.Difficulty = (*math.HexOrDecimal256)(h.Difficulty) + enc.Number = (*math.HexOrDecimal256)(h.Number) + enc.GasLimit = math.HexOrDecimal64(h.GasLimit) + enc.GasUsed = math.HexOrDecimal64(h.GasUsed) + enc.Time = math.HexOrDecimal64(h.Time) + enc.Extra = h.Extra + enc.MixDigest = h.MixDigest + enc.Nonce = h.Nonce + enc.BaseFee = (*math.HexOrDecimal256)(h.BaseFee) + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (h *header) UnmarshalJSON(input []byte) error { + type header struct { + ParentHash *common.Hash `json:"parentHash"` + OmmerHash *common.Hash `json:"sha3Uncles"` + Coinbase *common.Address `json:"miner"` + Root *common.Hash `json:"stateRoot" gencodec:"required"` + TxHash *common.Hash `json:"transactionsRoot"` + ReceiptHash *common.Hash `json:"receiptsRoot"` + Bloom *types.Bloom `json:"logsBloom"` + Difficulty *math.HexOrDecimal256 `json:"difficulty"` + Number *math.HexOrDecimal256 `json:"number" gencodec:"required"` + GasLimit *math.HexOrDecimal64 `json:"gasLimit" gencodec:"required"` + GasUsed *math.HexOrDecimal64 `json:"gasUsed"` + Time *math.HexOrDecimal64 `json:"timestamp" gencodec:"required"` + Extra *hexutil.Bytes `json:"extraData"` + MixDigest *common.Hash `json:"mixHash"` + Nonce *types.BlockNonce `json:"nonce"` + BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas" rlp:"optional"` + } + var dec header + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.ParentHash != nil { + h.ParentHash = *dec.ParentHash + } + if dec.OmmerHash != nil { + h.OmmerHash = dec.OmmerHash + } + if dec.Coinbase != nil { + h.Coinbase = dec.Coinbase + } + if dec.Root == nil { + return errors.New("missing required field 'stateRoot' for header") + } + h.Root = *dec.Root + if dec.TxHash != nil { + h.TxHash = dec.TxHash + } + if dec.ReceiptHash != nil { + h.ReceiptHash = dec.ReceiptHash + } + if dec.Bloom != nil { + h.Bloom = *dec.Bloom + } + if dec.Difficulty != nil { + h.Difficulty = (*big.Int)(dec.Difficulty) + } + if dec.Number == nil { + return errors.New("missing required field 'number' for header") + } + h.Number = (*big.Int)(dec.Number) + if dec.GasLimit == nil { + return errors.New("missing required field 'gasLimit' for header") + } + h.GasLimit = uint64(*dec.GasLimit) + if dec.GasUsed != nil { + h.GasUsed = uint64(*dec.GasUsed) + } + if dec.Time == nil { + return errors.New("missing required field 'timestamp' for header") + } + h.Time = uint64(*dec.Time) + if dec.Extra != nil { + h.Extra = *dec.Extra + } + if dec.MixDigest != nil { + h.MixDigest = *dec.MixDigest + } + if dec.Nonce != nil { + h.Nonce = dec.Nonce + } + if dec.BaseFee != nil { + h.BaseFee = (*big.Int)(dec.BaseFee) + } + return nil +} diff --git a/cmd/evm/internal/t8ntool/gen_stenv.go b/cmd/evm/internal/t8ntool/gen_stenv.go new file mode 100644 index 00000000..a6d774cd --- /dev/null +++ b/cmd/evm/internal/t8ntool/gen_stenv.go @@ -0,0 +1,109 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package t8ntool + +import ( + "encoding/json" + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" +) + +var _ = (*stEnvMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (s stEnv) MarshalJSON() ([]byte, error) { + type stEnv struct { + Coinbase common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"` + Difficulty *math.HexOrDecimal256 `json:"currentDifficulty"` + Random *math.HexOrDecimal256 `json:"currentRandom"` + ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"` + GasLimit math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"` + Number math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"` + Timestamp math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` + ParentTimestamp math.HexOrDecimal64 `json:"parentTimestamp,omitempty"` + BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"` + Ommers []ommer `json:"ommers,omitempty"` + BaseFee *math.HexOrDecimal256 `json:"currentBaseFee,omitempty"` + ParentUncleHash common.Hash `json:"parentUncleHash"` + } + var enc stEnv + enc.Coinbase = common.UnprefixedAddress(s.Coinbase) + enc.Difficulty = (*math.HexOrDecimal256)(s.Difficulty) + enc.Random = (*math.HexOrDecimal256)(s.Random) + enc.ParentDifficulty = (*math.HexOrDecimal256)(s.ParentDifficulty) + enc.GasLimit = math.HexOrDecimal64(s.GasLimit) + enc.Number = math.HexOrDecimal64(s.Number) + enc.Timestamp = math.HexOrDecimal64(s.Timestamp) + enc.ParentTimestamp = math.HexOrDecimal64(s.ParentTimestamp) + enc.BlockHashes = s.BlockHashes + enc.Ommers = s.Ommers + enc.BaseFee = (*math.HexOrDecimal256)(s.BaseFee) + enc.ParentUncleHash = s.ParentUncleHash + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (s *stEnv) UnmarshalJSON(input []byte) error { + type stEnv struct { + Coinbase *common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"` + Difficulty *math.HexOrDecimal256 `json:"currentDifficulty"` + Random *math.HexOrDecimal256 `json:"currentRandom"` + ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"` + GasLimit *math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"` + Number *math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"` + Timestamp *math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` + ParentTimestamp *math.HexOrDecimal64 `json:"parentTimestamp,omitempty"` + BlockHashes map[math.HexOrDecimal64]common.Hash `json:"blockHashes,omitempty"` + Ommers []ommer `json:"ommers,omitempty"` + BaseFee *math.HexOrDecimal256 `json:"currentBaseFee,omitempty"` + ParentUncleHash *common.Hash `json:"parentUncleHash"` + } + var dec stEnv + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.Coinbase == nil { + return errors.New("missing required field 'currentCoinbase' for stEnv") + } + s.Coinbase = common.Address(*dec.Coinbase) + if dec.Difficulty != nil { + s.Difficulty = (*big.Int)(dec.Difficulty) + } + if dec.Random != nil { + s.Random = (*big.Int)(dec.Random) + } + if dec.ParentDifficulty != nil { + s.ParentDifficulty = (*big.Int)(dec.ParentDifficulty) + } + if dec.GasLimit == nil { + return errors.New("missing required field 'currentGasLimit' for stEnv") + } + s.GasLimit = uint64(*dec.GasLimit) + if dec.Number == nil { + return errors.New("missing required field 'currentNumber' for stEnv") + } + s.Number = uint64(*dec.Number) + if dec.Timestamp == nil { + return errors.New("missing required field 'currentTimestamp' for stEnv") + } + s.Timestamp = uint64(*dec.Timestamp) + if dec.ParentTimestamp != nil { + s.ParentTimestamp = uint64(*dec.ParentTimestamp) + } + if dec.BlockHashes != nil { + s.BlockHashes = dec.BlockHashes + } + if dec.Ommers != nil { + s.Ommers = dec.Ommers + } + if dec.BaseFee != nil { + s.BaseFee = (*big.Int)(dec.BaseFee) + } + if dec.ParentUncleHash != nil { + s.ParentUncleHash = *dec.ParentUncleHash + } + return nil +} diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go new file mode 100644 index 00000000..3409c0a3 --- /dev/null +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -0,0 +1,179 @@ +// Copyright 2021 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 t8ntool + +import ( + "encoding/json" + "errors" + "fmt" + "math/big" + "os" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/tests" + "github.com/urfave/cli/v2" +) + +type result struct { + Error error + Address common.Address + Hash common.Hash + IntrinsicGas uint64 +} + +// MarshalJSON marshals as JSON with a hash. +func (r *result) MarshalJSON() ([]byte, error) { + type xx struct { + Error string `json:"error,omitempty"` + Address *common.Address `json:"address,omitempty"` + Hash *common.Hash `json:"hash,omitempty"` + IntrinsicGas hexutil.Uint64 `json:"intrinsicGas,omitempty"` + } + var out xx + if r.Error != nil { + out.Error = r.Error.Error() + } + if r.Address != (common.Address{}) { + out.Address = &r.Address + } + if r.Hash != (common.Hash{}) { + out.Hash = &r.Hash + } + out.IntrinsicGas = hexutil.Uint64(r.IntrinsicGas) + return json.Marshal(out) +} + +func Transaction(ctx *cli.Context) error { + // Configure the go-ethereum logger + glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) + glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) + log.Root().SetHandler(glogger) + + var ( + err error + ) + // We need to load the transactions. May be either in stdin input or in files. + // Check if anything needs to be read from stdin + var ( + txStr = ctx.String(InputTxsFlag.Name) + inputData = &input{} + chainConfig *params.ChainConfig + ) + // Construct the chainconfig + if cConf, _, err := tests.GetChainConfig(ctx.String(ForknameFlag.Name)); err != nil { + return NewError(ErrorConfig, fmt.Errorf("failed constructing chain configuration: %v", err)) + } else { + chainConfig = cConf + } + // Set the chain id + chainConfig.ChainID = big.NewInt(ctx.Int64(ChainIDFlag.Name)) + var body hexutil.Bytes + if txStr == stdinSelector { + decoder := json.NewDecoder(os.Stdin) + if err := decoder.Decode(inputData); err != nil { + return NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err)) + } + // Decode the body of already signed transactions + body = common.FromHex(inputData.TxRlp) + } else { + // Read input from file + inFile, err := os.Open(txStr) + if err != nil { + return NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err)) + } + defer inFile.Close() + decoder := json.NewDecoder(inFile) + if strings.HasSuffix(txStr, ".rlp") { + if err := decoder.Decode(&body); err != nil { + return err + } + } else { + return NewError(ErrorIO, errors.New("only rlp supported")) + } + } + signer := types.MakeSigner(chainConfig, new(big.Int)) + // We now have the transactions in 'body', which is supposed to be an + // rlp list of transactions + it, err := rlp.NewListIterator([]byte(body)) + if err != nil { + return err + } + var results []result + for it.Next() { + if err := it.Err(); err != nil { + return NewError(ErrorIO, err) + } + var tx types.Transaction + err := rlp.DecodeBytes(it.Value(), &tx) + if err != nil { + results = append(results, result{Error: err}) + continue + } + r := result{Hash: tx.Hash()} + if sender, err := types.Sender(signer, &tx); err != nil { + r.Error = err + results = append(results, r) + continue + } else { + r.Address = sender + } + // Check intrinsic gas + if gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, + chainConfig.IsHomestead(new(big.Int)), chainConfig.IsIstanbul(new(big.Int))); err != nil { + r.Error = err + results = append(results, r) + continue + } else { + r.IntrinsicGas = gas + if tx.Gas() < gas { + r.Error = fmt.Errorf("%w: have %d, want %d", core.ErrIntrinsicGas, tx.Gas(), gas) + results = append(results, r) + continue + } + } + // Validate <256bit fields + switch { + case tx.Nonce()+1 < tx.Nonce(): + r.Error = errors.New("nonce exceeds 2^64-1") + case tx.Value().BitLen() > 256: + r.Error = errors.New("value exceeds 256 bits") + case tx.GasPrice().BitLen() > 256: + r.Error = errors.New("gasPrice exceeds 256 bits") + case tx.GasTipCap().BitLen() > 256: + r.Error = errors.New("maxPriorityFeePerGas exceeds 256 bits") + case tx.GasFeeCap().BitLen() > 256: + r.Error = errors.New("maxFeePerGas exceeds 256 bits") + case tx.GasFeeCap().Cmp(tx.GasTipCap()) < 0: + r.Error = errors.New("maxFeePerGas < maxPriorityFeePerGas") + case new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256: + r.Error = errors.New("gas * gasPrice exceeds 256 bits") + case new(big.Int).Mul(tx.GasFeeCap(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256: + r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits") + } + results = append(results, r) + } + out, err := json.MarshalIndent(results, "", " ") + fmt.Println(string(out)) + return err +} diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go new file mode 100644 index 00000000..73a28e91 --- /dev/null +++ b/cmd/evm/internal/t8ntool/transition.go @@ -0,0 +1,456 @@ +// Copyright 2020 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 t8ntool + +import ( + "crypto/ecdsa" + "encoding/json" + "errors" + "fmt" + "math/big" + "os" + "path" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core" + "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/tracers/logger" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/tests" + "github.com/urfave/cli/v2" +) + +const ( + ErrorEVM = 2 + ErrorConfig = 3 + ErrorMissingBlockhash = 4 + + ErrorJson = 10 + ErrorIO = 11 + ErrorRlp = 12 + + stdinSelector = "stdin" +) + +type NumberedError struct { + errorCode int + err error +} + +func NewError(errorCode int, err error) *NumberedError { + return &NumberedError{errorCode, err} +} + +func (n *NumberedError) Error() string { + return fmt.Sprintf("ERROR(%d): %v", n.errorCode, n.err.Error()) +} + +func (n *NumberedError) ExitCode() int { + return n.errorCode +} + +// compile-time conformance test +var ( + _ cli.ExitCoder = (*NumberedError)(nil) +) + +type input struct { + Alloc core.GenesisAlloc `json:"alloc,omitempty"` + Env *stEnv `json:"env,omitempty"` + Txs []*txWithKey `json:"txs,omitempty"` + TxRlp string `json:"txsRlp,omitempty"` +} + +func Transition(ctx *cli.Context) error { + // Configure the go-ethereum logger + glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) + glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) + log.Root().SetHandler(glogger) + + var ( + err error + tracer vm.EVMLogger + ) + var getTracer func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) + + baseDir, err := createBasedir(ctx) + if err != nil { + return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err)) + } + if ctx.Bool(TraceFlag.Name) { + if ctx.IsSet(TraceDisableMemoryFlag.Name) && ctx.IsSet(TraceEnableMemoryFlag.Name) { + return NewError(ErrorConfig, fmt.Errorf("can't use both flags --%s and --%s", TraceDisableMemoryFlag.Name, TraceEnableMemoryFlag.Name)) + } + if ctx.IsSet(TraceDisableReturnDataFlag.Name) && ctx.IsSet(TraceEnableReturnDataFlag.Name) { + return NewError(ErrorConfig, fmt.Errorf("can't use both flags --%s and --%s", TraceDisableReturnDataFlag.Name, TraceEnableReturnDataFlag.Name)) + } + if ctx.IsSet(TraceDisableMemoryFlag.Name) { + log.Warn(fmt.Sprintf("--%s has been deprecated in favour of --%s", TraceDisableMemoryFlag.Name, TraceEnableMemoryFlag.Name)) + } + if ctx.IsSet(TraceDisableReturnDataFlag.Name) { + log.Warn(fmt.Sprintf("--%s has been deprecated in favour of --%s", TraceDisableReturnDataFlag.Name, TraceEnableReturnDataFlag.Name)) + } + // Configure the EVM logger + logConfig := &logger.Config{ + DisableStack: ctx.Bool(TraceDisableStackFlag.Name), + EnableMemory: !ctx.Bool(TraceDisableMemoryFlag.Name) || ctx.Bool(TraceEnableMemoryFlag.Name), + EnableReturnData: !ctx.Bool(TraceDisableReturnDataFlag.Name) || ctx.Bool(TraceEnableReturnDataFlag.Name), + Debug: true, + } + var prevFile *os.File + // This one closes the last file + defer func() { + if prevFile != nil { + prevFile.Close() + } + }() + getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { + if prevFile != nil { + prevFile.Close() + } + traceFile, err := os.Create(path.Join(baseDir, fmt.Sprintf("trace-%d-%v.jsonl", txIndex, txHash.String()))) + if err != nil { + return nil, NewError(ErrorIO, fmt.Errorf("failed creating trace-file: %v", err)) + } + prevFile = traceFile + return logger.NewJSONLogger(logConfig, traceFile), nil + } + } else { + getTracer = func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error) { + return nil, nil + } + } + // We need to load three things: alloc, env and transactions. May be either in + // stdin input or in files. + // Check if anything needs to be read from stdin + var ( + prestate Prestate + txs types.Transactions // txs to apply + allocStr = ctx.String(InputAllocFlag.Name) + + envStr = ctx.String(InputEnvFlag.Name) + txStr = ctx.String(InputTxsFlag.Name) + inputData = &input{} + ) + // Figure out the prestate alloc + if allocStr == stdinSelector || envStr == stdinSelector || txStr == stdinSelector { + decoder := json.NewDecoder(os.Stdin) + if err := decoder.Decode(inputData); err != nil { + return NewError(ErrorJson, fmt.Errorf("failed unmarshaling stdin: %v", err)) + } + } + if allocStr != stdinSelector { + if err := readFile(allocStr, "alloc", &inputData.Alloc); err != nil { + return err + } + } + prestate.Pre = inputData.Alloc + + // Set the block environment + if envStr != stdinSelector { + var env stEnv + if err := readFile(envStr, "env", &env); err != nil { + return err + } + inputData.Env = &env + } + prestate.Env = *inputData.Env + + vmConfig := vm.Config{ + Tracer: tracer, + Debug: (tracer != nil), + } + // Construct the chainconfig + var chainConfig *params.ChainConfig + if cConf, extraEips, err := tests.GetChainConfig(ctx.String(ForknameFlag.Name)); err != nil { + return NewError(ErrorConfig, fmt.Errorf("failed constructing chain configuration: %v", err)) + } else { + chainConfig = cConf + vmConfig.ExtraEips = extraEips + } + // Set the chain id + chainConfig.ChainID = big.NewInt(ctx.Int64(ChainIDFlag.Name)) + + var txsWithKeys []*txWithKey + if txStr != stdinSelector { + inFile, err := os.Open(txStr) + if err != nil { + return NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err)) + } + defer inFile.Close() + decoder := json.NewDecoder(inFile) + if strings.HasSuffix(txStr, ".rlp") { + var body hexutil.Bytes + if err := decoder.Decode(&body); err != nil { + return err + } + var txs types.Transactions + if err := rlp.DecodeBytes(body, &txs); err != nil { + return err + } + for _, tx := range txs { + txsWithKeys = append(txsWithKeys, &txWithKey{ + key: nil, + tx: tx, + }) + } + } else { + if err := decoder.Decode(&txsWithKeys); err != nil { + return NewError(ErrorJson, fmt.Errorf("failed unmarshaling txs-file: %v", err)) + } + } + } else { + if len(inputData.TxRlp) > 0 { + // Decode the body of already signed transactions + body := common.FromHex(inputData.TxRlp) + var txs types.Transactions + if err := rlp.DecodeBytes(body, &txs); err != nil { + return err + } + for _, tx := range txs { + txsWithKeys = append(txsWithKeys, &txWithKey{ + key: nil, + tx: tx, + }) + } + } else { + // JSON encoded transactions + txsWithKeys = inputData.Txs + } + } + // We may have to sign the transactions. + signer := types.MakeSigner(chainConfig, big.NewInt(int64(prestate.Env.Number))) + + if txs, err = signUnsignedTransactions(txsWithKeys, signer); err != nil { + return NewError(ErrorJson, fmt.Errorf("failed signing transactions: %v", err)) + } + // Sanity check, to not `panic` in state_transition + if chainConfig.IsLondon(big.NewInt(int64(prestate.Env.Number))) { + if prestate.Env.BaseFee == nil { + return NewError(ErrorConfig, errors.New("EIP-1559 config but missing 'currentBaseFee' in env section")) + } + } + isMerged := chainConfig.TerminalTotalDifficulty != nil && chainConfig.TerminalTotalDifficulty.BitLen() == 0 + env := prestate.Env + if isMerged { + // post-merge: + // - random must be supplied + // - difficulty must be zero + switch { + case env.Random == nil: + return NewError(ErrorConfig, errors.New("post-merge requires currentRandom to be defined in env")) + case env.Difficulty != nil && env.Difficulty.BitLen() != 0: + return NewError(ErrorConfig, errors.New("post-merge difficulty must be zero (or omitted) in env")) + } + prestate.Env.Difficulty = nil + } else if env.Difficulty == nil { + // pre-merge: + // If difficulty was not provided by caller, we need to calculate it. + switch { + case env.ParentDifficulty == nil: + return NewError(ErrorConfig, errors.New("currentDifficulty was not provided, and cannot be calculated due to missing parentDifficulty")) + case env.Number == 0: + return NewError(ErrorConfig, errors.New("currentDifficulty needs to be provided for block number 0")) + case env.Timestamp <= env.ParentTimestamp: + return NewError(ErrorConfig, fmt.Errorf("currentDifficulty cannot be calculated -- currentTime (%d) needs to be after parent time (%d)", + env.Timestamp, env.ParentTimestamp)) + } + prestate.Env.Difficulty = calcDifficulty(chainConfig, env.Number, env.Timestamp, + env.ParentTimestamp, env.ParentDifficulty, env.ParentUncleHash) + } + // Run the test and aggregate the result + s, result, err := prestate.Apply(vmConfig, chainConfig, txs, ctx.Int64(RewardFlag.Name), getTracer) + if err != nil { + return err + } + body, _ := rlp.EncodeToBytes(txs) + // Dump the excution result + collector := make(Alloc) + s.DumpToCollector(collector, nil) + return dispatchOutput(ctx, baseDir, result, collector, body) +} + +// txWithKey is a helper-struct, to allow us to use the types.Transaction along with +// a `secretKey`-field, for input +type txWithKey struct { + key *ecdsa.PrivateKey + tx *types.Transaction + protected bool +} + +func (t *txWithKey) UnmarshalJSON(input []byte) error { + // Read the metadata, if present + type txMetadata struct { + Key *common.Hash `json:"secretKey"` + Protected *bool `json:"protected"` + } + var data txMetadata + if err := json.Unmarshal(input, &data); err != nil { + return err + } + if data.Key != nil { + k := data.Key.Hex()[2:] + if ecdsaKey, err := crypto.HexToECDSA(k); err != nil { + return err + } else { + t.key = ecdsaKey + } + } + if data.Protected != nil { + t.protected = *data.Protected + } else { + t.protected = true + } + // Now, read the transaction itself + var tx types.Transaction + if err := json.Unmarshal(input, &tx); err != nil { + return err + } + t.tx = &tx + return nil +} + +// signUnsignedTransactions converts the input txs to canonical transactions. +// +// The transactions can have two forms, either +// 1. unsigned or +// 2. signed +// For (1), r, s, v, need so be zero, and the `secretKey` needs to be set. +// If so, we sign it here and now, with the given `secretKey` +// If the condition above is not met, then it's considered a signed transaction. +// +// To manage this, we read the transactions twice, first trying to read the secretKeys, +// and secondly to read them with the standard tx json format +func signUnsignedTransactions(txs []*txWithKey, signer types.Signer) (types.Transactions, error) { + var signedTxs []*types.Transaction + for i, txWithKey := range txs { + tx := txWithKey.tx + key := txWithKey.key + v, r, s := tx.RawSignatureValues() + if key != nil && v.BitLen()+r.BitLen()+s.BitLen() == 0 { + // This transaction needs to be signed + var ( + signed *types.Transaction + err error + ) + if txWithKey.protected { + signed, err = types.SignTx(tx, signer, key) + } else { + signed, err = types.SignTx(tx, types.FrontierSigner{}, key) + } + if err != nil { + return nil, NewError(ErrorJson, fmt.Errorf("tx %d: failed to sign tx: %v", i, err)) + } + signedTxs = append(signedTxs, signed) + } else { + // Already signed + signedTxs = append(signedTxs, tx) + } + } + return signedTxs, nil +} + +type Alloc map[common.Address]core.GenesisAccount + +func (g Alloc) OnRoot(common.Hash) {} + +func (g Alloc) OnAccount(addr common.Address, dumpAccount state.DumpAccount) { + balance, _ := new(big.Int).SetString(dumpAccount.Balance, 10) + var storage map[common.Hash]common.Hash + if dumpAccount.Storage != nil { + storage = make(map[common.Hash]common.Hash) + for k, v := range dumpAccount.Storage { + storage[k] = common.HexToHash(v) + } + } + genesisAccount := core.GenesisAccount{ + Code: dumpAccount.Code, + Storage: storage, + Balance: balance, + Nonce: dumpAccount.Nonce, + } + g[addr] = genesisAccount +} + +// saveFile marshalls the object to the given file +func saveFile(baseDir, filename string, data interface{}) error { + b, err := json.MarshalIndent(data, "", " ") + if err != nil { + return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err)) + } + location := path.Join(baseDir, filename) + if err = os.WriteFile(location, b, 0644); err != nil { + return NewError(ErrorIO, fmt.Errorf("failed writing output: %v", err)) + } + log.Info("Wrote file", "file", location) + return nil +} + +// dispatchOutput writes the output data to either stderr or stdout, or to the specified +// files +func dispatchOutput(ctx *cli.Context, baseDir string, result *ExecutionResult, alloc Alloc, body hexutil.Bytes) error { + stdOutObject := make(map[string]interface{}) + stdErrObject := make(map[string]interface{}) + dispatch := func(baseDir, fName, name string, obj interface{}) error { + switch fName { + case "stdout": + stdOutObject[name] = obj + case "stderr": + stdErrObject[name] = obj + case "": + // don't save + default: // save to file + if err := saveFile(baseDir, fName, obj); err != nil { + return err + } + } + return nil + } + if err := dispatch(baseDir, ctx.String(OutputAllocFlag.Name), "alloc", alloc); err != nil { + return err + } + if err := dispatch(baseDir, ctx.String(OutputResultFlag.Name), "result", result); err != nil { + return err + } + if err := dispatch(baseDir, ctx.String(OutputBodyFlag.Name), "body", body); err != nil { + return err + } + if len(stdOutObject) > 0 { + b, err := json.MarshalIndent(stdOutObject, "", " ") + if err != nil { + return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err)) + } + os.Stdout.Write(b) + os.Stdout.WriteString("\n") + } + if len(stdErrObject) > 0 { + b, err := json.MarshalIndent(stdErrObject, "", " ") + if err != nil { + return NewError(ErrorJson, fmt.Errorf("failed marshalling output: %v", err)) + } + os.Stderr.Write(b) + os.Stderr.WriteString("\n") + } + return nil +} diff --git a/cmd/evm/internal/t8ntool/utils.go b/cmd/evm/internal/t8ntool/utils.go new file mode 100644 index 00000000..8ec38c76 --- /dev/null +++ b/cmd/evm/internal/t8ntool/utils.go @@ -0,0 +1,54 @@ +// Copyright 2021 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 t8ntool + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/urfave/cli/v2" +) + +// readFile reads the json-data in the provided path and marshals into dest. +func readFile(path, desc string, dest interface{}) error { + inFile, err := os.Open(path) + if err != nil { + return NewError(ErrorIO, fmt.Errorf("failed reading %s file: %v", desc, err)) + } + defer inFile.Close() + decoder := json.NewDecoder(inFile) + if err := decoder.Decode(dest); err != nil { + return NewError(ErrorJson, fmt.Errorf("failed unmarshaling %s file: %v", desc, err)) + } + return nil +} + +// createBasedir makes sure the basedir exists, if user specified one. +func createBasedir(ctx *cli.Context) (string, error) { + baseDir := "" + if ctx.IsSet(OutputBasedir.Name) { + if base := ctx.String(OutputBasedir.Name); len(base) > 0 { + err := os.MkdirAll(base, 0755) // //rw-r--r-- + if err != nil { + return "", err + } + baseDir = base + } + } + return baseDir, nil +} diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 8596f2bf..994b6436 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -22,104 +22,179 @@ import ( "math/big" "os" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/urfave/cli/v2" ) -var gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags) -var gitDate = "" - var ( - app = utils.NewApp(gitCommit, gitDate, "the evm command line interface") + gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags) + gitDate = "" + + app = flags.NewApp(gitCommit, gitDate, "the evm command line interface") +) - DebugFlag = cli.BoolFlag{ +var ( + DebugFlag = &cli.BoolFlag{ Name: "debug", Usage: "output full trace logs", } - MemProfileFlag = cli.StringFlag{ + MemProfileFlag = &cli.StringFlag{ Name: "memprofile", Usage: "creates a memory profile at the given path", } - CPUProfileFlag = cli.StringFlag{ + CPUProfileFlag = &cli.StringFlag{ Name: "cpuprofile", Usage: "creates a CPU profile at the given path", } - StatDumpFlag = cli.BoolFlag{ + StatDumpFlag = &cli.BoolFlag{ Name: "statdump", Usage: "displays stack and heap memory information", } - CodeFlag = cli.StringFlag{ + CodeFlag = &cli.StringFlag{ Name: "code", Usage: "EVM code", } - CodeFileFlag = cli.StringFlag{ + CodeFileFlag = &cli.StringFlag{ Name: "codefile", Usage: "File containing EVM code. If '-' is specified, code is read from stdin ", } - GasFlag = cli.Uint64Flag{ + GasFlag = &cli.Uint64Flag{ Name: "gas", Usage: "gas limit for the evm", Value: 10000000000, } - PriceFlag = utils.BigFlag{ + PriceFlag = &flags.BigFlag{ Name: "price", Usage: "price set for the evm", Value: new(big.Int), } - ValueFlag = utils.BigFlag{ + ValueFlag = &flags.BigFlag{ Name: "value", Usage: "value set for the evm", Value: new(big.Int), } - DumpFlag = cli.BoolFlag{ + DumpFlag = &cli.BoolFlag{ Name: "dump", Usage: "dumps the state after the run", } - InputFlag = cli.StringFlag{ + InputFlag = &cli.StringFlag{ Name: "input", Usage: "input for the EVM", } - VerbosityFlag = cli.IntFlag{ + InputFileFlag = &cli.StringFlag{ + Name: "inputfile", + Usage: "file containing input for the EVM", + } + VerbosityFlag = &cli.IntFlag{ Name: "verbosity", Usage: "sets the verbosity level", } - CreateFlag = cli.BoolFlag{ + BenchFlag = &cli.BoolFlag{ + Name: "bench", + Usage: "benchmark the execution", + } + CreateFlag = &cli.BoolFlag{ Name: "create", Usage: "indicates the action should be create rather than call", } - GenesisFlag = cli.StringFlag{ + GenesisFlag = &cli.StringFlag{ Name: "prestate", Usage: "JSON file with prestate (genesis) config", } - MachineFlag = cli.BoolFlag{ + MachineFlag = &cli.BoolFlag{ Name: "json", Usage: "output trace logs in machine readable format (json)", } - SenderFlag = cli.StringFlag{ + SenderFlag = &cli.StringFlag{ Name: "sender", Usage: "The transaction origin", } - ReceiverFlag = cli.StringFlag{ + ReceiverFlag = &cli.StringFlag{ Name: "receiver", Usage: "The transaction receiver (execution context)", } - DisableMemoryFlag = cli.BoolFlag{ + DisableMemoryFlag = &cli.BoolFlag{ Name: "nomemory", + Value: true, Usage: "disable memory output", } - DisableStackFlag = cli.BoolFlag{ + DisableStackFlag = &cli.BoolFlag{ Name: "nostack", Usage: "disable stack output", } - EVMInterpreterFlag = cli.StringFlag{ - Name: "vm.evm", - Usage: "External EVM configuration (default = built-in interpreter)", - Value: "", + DisableStorageFlag = &cli.BoolFlag{ + Name: "nostorage", + Usage: "disable storage output", + } + DisableReturnDataFlag = &cli.BoolFlag{ + Name: "noreturndata", + Value: true, + Usage: "enable return data output", } ) +var stateTransitionCommand = &cli.Command{ + Name: "transition", + Aliases: []string{"t8n"}, + Usage: "executes a full state transition", + Action: t8ntool.Transition, + Flags: []cli.Flag{ + t8ntool.TraceFlag, + t8ntool.TraceDisableMemoryFlag, + t8ntool.TraceEnableMemoryFlag, + t8ntool.TraceDisableStackFlag, + t8ntool.TraceDisableReturnDataFlag, + t8ntool.TraceEnableReturnDataFlag, + t8ntool.OutputBasedir, + t8ntool.OutputAllocFlag, + t8ntool.OutputResultFlag, + t8ntool.OutputBodyFlag, + t8ntool.InputAllocFlag, + t8ntool.InputEnvFlag, + t8ntool.InputTxsFlag, + t8ntool.ForknameFlag, + t8ntool.ChainIDFlag, + t8ntool.RewardFlag, + t8ntool.VerbosityFlag, + }, +} + +var transactionCommand = &cli.Command{ + Name: "transaction", + Aliases: []string{"t9n"}, + Usage: "performs transaction validation", + Action: t8ntool.Transaction, + Flags: []cli.Flag{ + t8ntool.InputTxsFlag, + t8ntool.ChainIDFlag, + t8ntool.ForknameFlag, + t8ntool.VerbosityFlag, + }, +} + +var blockBuilderCommand = &cli.Command{ + Name: "block-builder", + Aliases: []string{"b11r"}, + Usage: "builds a block", + Action: t8ntool.BuildBlock, + Flags: []cli.Flag{ + t8ntool.OutputBasedir, + t8ntool.OutputBlockFlag, + t8ntool.InputHeaderFlag, + t8ntool.InputOmmersFlag, + t8ntool.InputTxsRlpFlag, + t8ntool.SealCliqueFlag, + t8ntool.SealEthashFlag, + t8ntool.SealEthashDirFlag, + t8ntool.SealEthashModeFlag, + t8ntool.VerbosityFlag, + }, +} + func init() { app.Flags = []cli.Flag{ + BenchFlag, CreateFlag, DebugFlag, VerbosityFlag, @@ -130,6 +205,7 @@ func init() { ValueFlag, DumpFlag, InputFlag, + InputFileFlag, MemProfileFlag, CPUProfileFlag, StatDumpFlag, @@ -139,19 +215,27 @@ func init() { ReceiverFlag, DisableMemoryFlag, DisableStackFlag, - EVMInterpreterFlag, + DisableStorageFlag, + DisableReturnDataFlag, } - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ compileCommand, disasmCommand, runCommand, stateTestCommand, + stateTransitionCommand, + transactionCommand, + blockBuilderCommand, } } func main() { if err := app.Run(os.Args); err != nil { + code := 1 + if ec, ok := err.(*t8ntool.NumberedError); ok { + code = ec.ExitCode() + } fmt.Fprintln(os.Stderr, err) - os.Exit(1) + os.Exit(code) } } diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index 62c49ef3..9b1975c0 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -17,29 +17,33 @@ package main import ( + "bytes" "encoding/json" "fmt" - "io/ioutil" + "io" "math/big" "os" goruntime "runtime" "runtime/pprof" + "testing" "time" - "github.com/cryptoecc/ETH-ECC/cmd/evm/internal/compiler" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/core/vm/runtime" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - cli "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler" + "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/eth/tracers/logger" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/urfave/cli/v2" ) -var runCommand = cli.Command{ +var runCommand = &cli.Command{ Action: runCmd, Name: "run", Usage: "run arbitrary evm binary", @@ -68,60 +72,91 @@ func readGenesis(genesisPath string) *core.Genesis { return genesis } +type execStats struct { + time time.Duration // The execution time. + allocs int64 // The number of heap allocations during execution. + bytesAllocated int64 // The cumulative number of bytes allocated during execution. +} + +func timedExec(bench bool, execFunc func() ([]byte, uint64, error)) (output []byte, gasLeft uint64, stats execStats, err error) { + if bench { + result := testing.Benchmark(func(b *testing.B) { + for i := 0; i < b.N; i++ { + output, gasLeft, err = execFunc() + } + }) + + // Get the average execution time from the benchmarking result. + // There are other useful stats here that could be reported. + stats.time = time.Duration(result.NsPerOp()) + stats.allocs = result.AllocsPerOp() + stats.bytesAllocated = result.AllocedBytesPerOp() + } else { + var memStatsBefore, memStatsAfter goruntime.MemStats + goruntime.ReadMemStats(&memStatsBefore) + startTime := time.Now() + output, gasLeft, err = execFunc() + stats.time = time.Since(startTime) + goruntime.ReadMemStats(&memStatsAfter) + stats.allocs = int64(memStatsAfter.Mallocs - memStatsBefore.Mallocs) + stats.bytesAllocated = int64(memStatsAfter.TotalAlloc - memStatsBefore.TotalAlloc) + } + + return output, gasLeft, stats, err +} + func runCmd(ctx *cli.Context) error { glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name))) + glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) log.Root().SetHandler(glogger) - logconfig := &vm.LogConfig{ - DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name), - DisableStack: ctx.GlobalBool(DisableStackFlag.Name), - Debug: ctx.GlobalBool(DebugFlag.Name), + logconfig := &logger.Config{ + EnableMemory: !ctx.Bool(DisableMemoryFlag.Name), + DisableStack: ctx.Bool(DisableStackFlag.Name), + DisableStorage: ctx.Bool(DisableStorageFlag.Name), + EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name), + Debug: ctx.Bool(DebugFlag.Name), } var ( - tracer vm.Tracer - debugLogger *vm.StructLogger + tracer vm.EVMLogger + debugLogger *logger.StructLogger statedb *state.StateDB chainConfig *params.ChainConfig sender = common.BytesToAddress([]byte("sender")) receiver = common.BytesToAddress([]byte("receiver")) genesisConfig *core.Genesis ) - if ctx.GlobalBool(MachineFlag.Name) { - tracer = vm.NewJSONLogger(logconfig, os.Stdout) - } else if ctx.GlobalBool(DebugFlag.Name) { - debugLogger = vm.NewStructLogger(logconfig) + if ctx.Bool(MachineFlag.Name) { + tracer = logger.NewJSONLogger(logconfig, os.Stdout) + } else if ctx.Bool(DebugFlag.Name) { + debugLogger = logger.NewStructLogger(logconfig) tracer = debugLogger } else { - debugLogger = vm.NewStructLogger(logconfig) + debugLogger = logger.NewStructLogger(logconfig) } - if ctx.GlobalString(GenesisFlag.Name) != "" { - gen := readGenesis(ctx.GlobalString(GenesisFlag.Name)) + if ctx.String(GenesisFlag.Name) != "" { + gen := readGenesis(ctx.String(GenesisFlag.Name)) genesisConfig = gen db := rawdb.NewMemoryDatabase() - genesis := gen.ToBlock(db) - statedb, _ = state.New(genesis.Root(), state.NewDatabase(db)) + genesis := gen.MustCommit(db) + statedb, _ = state.New(genesis.Root(), state.NewDatabase(db), nil) chainConfig = gen.Config } else { - statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) genesisConfig = new(core.Genesis) } - if ctx.GlobalString(SenderFlag.Name) != "" { - sender = common.HexToAddress(ctx.GlobalString(SenderFlag.Name)) + if ctx.String(SenderFlag.Name) != "" { + sender = common.HexToAddress(ctx.String(SenderFlag.Name)) } statedb.CreateAccount(sender) - if ctx.GlobalString(ReceiverFlag.Name) != "" { - receiver = common.HexToAddress(ctx.GlobalString(ReceiverFlag.Name)) + if ctx.String(ReceiverFlag.Name) != "" { + receiver = common.HexToAddress(ctx.String(ReceiverFlag.Name)) } - var ( - code []byte - ret []byte - err error - ) - codeFileFlag := ctx.GlobalString(CodeFileFlag.Name) - codeFlag := ctx.GlobalString(CodeFlag.Name) + var code []byte + codeFileFlag := ctx.String(CodeFileFlag.Name) + codeFlag := ctx.String(CodeFlag.Name) // The '--code' or '--codefile' flag overrides code in state if codeFileFlag != "" || codeFlag != "" { @@ -131,13 +166,13 @@ func runCmd(ctx *cli.Context) 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 { + if hexcode, err = io.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 { + if hexcode, err = os.ReadFile(codeFileFlag); err != nil { fmt.Printf("Could not load code from file: %v\n", err) os.Exit(1) } @@ -145,6 +180,7 @@ func runCmd(ctx *cli.Context) error { } else { hexcode = []byte(codeFlag) } + hexcode = bytes.TrimSpace(hexcode) if len(hexcode)%2 != 0 { fmt.Printf("Invalid input length for hex data (%d)\n", len(hexcode)) os.Exit(1) @@ -152,7 +188,7 @@ func runCmd(ctx *cli.Context) error { code = common.FromHex(string(hexcode)) } else if fn := ctx.Args().First(); len(fn) > 0 { // EASM-file to compile - src, err := ioutil.ReadFile(fn) + src, err := os.ReadFile(fn) if err != nil { return err } @@ -162,7 +198,7 @@ func runCmd(ctx *cli.Context) error { } code = common.Hex2Bytes(bin) } - initialGas := ctx.GlobalUint64(GasFlag.Name) + initialGas := ctx.Uint64(GasFlag.Name) if genesisConfig.GasLimit != 0 { initialGas = genesisConfig.GasLimit } @@ -170,20 +206,19 @@ func runCmd(ctx *cli.Context) error { Origin: sender, State: statedb, GasLimit: initialGas, - GasPrice: utils.GlobalBig(ctx, PriceFlag.Name), - Value: utils.GlobalBig(ctx, ValueFlag.Name), + GasPrice: flags.GlobalBig(ctx, PriceFlag.Name), + Value: flags.GlobalBig(ctx, ValueFlag.Name), Difficulty: genesisConfig.Difficulty, Time: new(big.Int).SetUint64(genesisConfig.Timestamp), Coinbase: genesisConfig.Coinbase, BlockNumber: new(big.Int).SetUint64(genesisConfig.Number), EVMConfig: vm.Config{ - Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), - EVMInterpreter: ctx.GlobalString(EVMInterpreterFlag.Name), + Tracer: tracer, + Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name), }, } - if cpuProfilePath := ctx.GlobalString(CPUProfileFlag.Name); cpuProfilePath != "" { + if cpuProfilePath := ctx.String(CPUProfileFlag.Name); cpuProfilePath != "" { f, err := os.Create(cpuProfilePath) if err != nil { fmt.Println("could not create CPU profile: ", err) @@ -198,27 +233,53 @@ func runCmd(ctx *cli.Context) error { if chainConfig != nil { runtimeConfig.ChainConfig = chainConfig + } else { + runtimeConfig.ChainConfig = params.AllEthashProtocolChanges } - tstart := time.Now() - var leftOverGas uint64 - if ctx.GlobalBool(CreateFlag.Name) { - input := append(code, common.Hex2Bytes(ctx.GlobalString(InputFlag.Name))...) - ret, _, leftOverGas, err = runtime.Create(input, &runtimeConfig) + + var hexInput []byte + if inputFileFlag := ctx.String(InputFileFlag.Name); inputFileFlag != "" { + var err error + if hexInput, err = os.ReadFile(inputFileFlag); err != nil { + fmt.Printf("could not load input from file: %v\n", err) + os.Exit(1) + } + } else { + hexInput = []byte(ctx.String(InputFlag.Name)) + } + hexInput = bytes.TrimSpace(hexInput) + if len(hexInput)%2 != 0 { + fmt.Println("input length must be even") + os.Exit(1) + } + input := common.FromHex(string(hexInput)) + + var execFunc func() ([]byte, uint64, error) + if ctx.Bool(CreateFlag.Name) { + input = append(code, input...) + execFunc = func() ([]byte, uint64, error) { + output, _, gasLeft, err := runtime.Create(input, &runtimeConfig) + return output, gasLeft, err + } } else { if len(code) > 0 { statedb.SetCode(receiver, code) } - ret, leftOverGas, err = runtime.Call(receiver, common.Hex2Bytes(ctx.GlobalString(InputFlag.Name)), &runtimeConfig) + execFunc = func() ([]byte, uint64, error) { + return runtime.Call(receiver, input, &runtimeConfig) + } } - execTime := time.Since(tstart) - if ctx.GlobalBool(DumpFlag.Name) { + bench := ctx.Bool(BenchFlag.Name) + output, leftOverGas, stats, err := timedExec(bench, execFunc) + + if ctx.Bool(DumpFlag.Name) { statedb.Commit(true) statedb.IntermediateRoot(true) - fmt.Println(string(statedb.Dump(false, false, true))) + fmt.Println(string(statedb.Dump(nil))) } - if memProfilePath := ctx.GlobalString(MemProfileFlag.Name); memProfilePath != "" { + if memProfilePath := ctx.String(MemProfileFlag.Name); memProfilePath != "" { f, err := os.Create(memProfilePath) if err != nil { fmt.Println("could not create memory profile: ", err) @@ -231,29 +292,24 @@ func runCmd(ctx *cli.Context) error { f.Close() } - if ctx.GlobalBool(DebugFlag.Name) { + if ctx.Bool(DebugFlag.Name) { if debugLogger != nil { fmt.Fprintln(os.Stderr, "#### TRACE ####") - vm.WriteTrace(os.Stderr, debugLogger.StructLogs()) + logger.WriteTrace(os.Stderr, debugLogger.StructLogs()) } fmt.Fprintln(os.Stderr, "#### LOGS ####") - vm.WriteLogs(os.Stderr, statedb.Logs()) + logger.WriteLogs(os.Stderr, statedb.Logs()) } - if ctx.GlobalBool(StatDumpFlag.Name) { - var mem goruntime.MemStats - goruntime.ReadMemStats(&mem) - fmt.Fprintf(os.Stderr, `evm execution time: %v -heap objects: %d -allocations: %d -total allocations: %d -GC calls: %d -Gas used: %d - -`, execTime, mem.HeapObjects, mem.Alloc, mem.TotalAlloc, mem.NumGC, initialGas-leftOverGas) + if bench || ctx.Bool(StatDumpFlag.Name) { + fmt.Fprintf(os.Stderr, `EVM gas used: %d +execution time: %v +allocations: %d +allocated bytes: %d +`, initialGas-leftOverGas, stats.time, stats.allocs, stats.bytesAllocated) } if tracer == nil { - fmt.Printf("0x%x\n", ret) + fmt.Printf("%#x\n", output) if err != nil { fmt.Printf(" error: %v\n", err) } diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go index 7296dcf0..36f4e19b 100644 --- a/cmd/evm/staterunner.go +++ b/cmd/evm/staterunner.go @@ -20,18 +20,18 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/tests" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers/logger" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/tests" - cli "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) -var stateTestCommand = cli.Command{ +var stateTestCommand = &cli.Command{ Action: stateTestCmd, Name: "statetest", Usage: "executes the given state tests", @@ -54,31 +54,33 @@ func stateTestCmd(ctx *cli.Context) error { } // Configure the go-ethereum logger glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name))) + glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) log.Root().SetHandler(glogger) // Configure the EVM logger - config := &vm.LogConfig{ - DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name), - DisableStack: ctx.GlobalBool(DisableStackFlag.Name), + config := &logger.Config{ + EnableMemory: !ctx.Bool(DisableMemoryFlag.Name), + DisableStack: ctx.Bool(DisableStackFlag.Name), + DisableStorage: ctx.Bool(DisableStorageFlag.Name), + EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name), } var ( - tracer vm.Tracer - debugger *vm.StructLogger + tracer vm.EVMLogger + debugger *logger.StructLogger ) switch { - case ctx.GlobalBool(MachineFlag.Name): - tracer = vm.NewJSONLogger(config, os.Stderr) + case ctx.Bool(MachineFlag.Name): + tracer = logger.NewJSONLogger(config, os.Stderr) - case ctx.GlobalBool(DebugFlag.Name): - debugger = vm.NewStructLogger(config) + case ctx.Bool(DebugFlag.Name): + debugger = logger.NewStructLogger(config) tracer = debugger default: - debugger = vm.NewStructLogger(config) + debugger = logger.NewStructLogger(config) } // Load the test content from the input file - src, err := ioutil.ReadFile(ctx.Args().First()) + src, err := os.ReadFile(ctx.Args().First()) if err != nil { return err } @@ -89,23 +91,23 @@ func stateTestCmd(ctx *cli.Context) error { // Iterate over all the tests, run them and aggregate the results cfg := vm.Config{ Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name), } results := make([]StatetestResult, 0, len(tests)) for key, test := range tests { for _, st := range test.Subtests() { // Run the test and aggregate the result result := &StatetestResult{Name: key, Fork: st.Fork, Pass: true} - state, err := test.Run(st, cfg) + _, s, err := test.Run(st, cfg, false) // print state root for evmlab tracing - if ctx.GlobalBool(MachineFlag.Name) && state != nil { - fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%x\"}\n", state.IntermediateRoot(false)) + if ctx.Bool(MachineFlag.Name) && s != nil { + fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%x\"}\n", s.IntermediateRoot(false)) } if err != nil { // 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(false, false, true) + if ctx.Bool(DumpFlag.Name) && s != nil { + dump := s.RawDump(nil) result.State = &dump } } @@ -113,10 +115,10 @@ func stateTestCmd(ctx *cli.Context) error { results = append(results, *result) // Print any structured logs collected - if ctx.GlobalBool(DebugFlag.Name) { + if ctx.Bool(DebugFlag.Name) { if debugger != nil { fmt.Fprintln(os.Stderr, "#### TRACE ####") - vm.WriteTrace(os.Stderr, debugger.StructLogs()) + logger.WriteTrace(os.Stderr, debugger.StructLogs()) } } } diff --git a/cmd/evm/t8n_test.go b/cmd/evm/t8n_test.go new file mode 100644 index 00000000..72c062e8 --- /dev/null +++ b/cmd/evm/t8n_test.go @@ -0,0 +1,514 @@ +// Copyright 2021 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 ( + "encoding/json" + "fmt" + "os" + "reflect" + "strings" + "testing" + + "github.com/docker/docker/pkg/reexec" + "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool" + "github.com/ethereum/go-ethereum/internal/cmdtest" +) + +func TestMain(m *testing.M) { + // Run the app if we've been exec'd as "ethkey-test" in runEthkey. + reexec.Register("evm-test", func() { + if err := app.Run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + os.Exit(0) + }) + // check if we have been reexec'd + if reexec.Init() { + return + } + os.Exit(m.Run()) +} + +type testT8n struct { + *cmdtest.TestCmd +} + +type t8nInput struct { + inAlloc string + inTxs string + inEnv string + stFork string + stReward string +} + +func (args *t8nInput) get(base string) []string { + var out []string + if opt := args.inAlloc; opt != "" { + out = append(out, "--input.alloc") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.inTxs; opt != "" { + out = append(out, "--input.txs") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.inEnv; opt != "" { + out = append(out, "--input.env") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.stFork; opt != "" { + out = append(out, "--state.fork", opt) + } + if opt := args.stReward; opt != "" { + out = append(out, "--state.reward", opt) + } + return out +} + +type t8nOutput struct { + alloc bool + result bool + body bool +} + +func (args *t8nOutput) get() (out []string) { + if args.body { + out = append(out, "--output.body", "stdout") + } else { + out = append(out, "--output.body", "") // empty means ignore + } + if args.result { + out = append(out, "--output.result", "stdout") + } else { + out = append(out, "--output.result", "") + } + if args.alloc { + out = append(out, "--output.alloc", "stdout") + } else { + out = append(out, "--output.alloc", "") + } + return out +} + +func TestT8n(t *testing.T) { + tt := new(testT8n) + tt.TestCmd = cmdtest.NewTestCmd(t, tt) + for i, tc := range []struct { + base string + input t8nInput + output t8nOutput + expExitCode int + expOut string + }{ + { // Test exit (3) on bad config + base: "./testdata/1", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Frontier+1346", "", + }, + output: t8nOutput{alloc: true, result: true}, + expExitCode: 3, + }, + { + base: "./testdata/1", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Byzantium", "", + }, + output: t8nOutput{alloc: true, result: true}, + expOut: "exp.json", + }, + { // blockhash test + base: "./testdata/3", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Berlin", "", + }, + output: t8nOutput{alloc: true, result: true}, + expOut: "exp.json", + }, + { // missing blockhash test + base: "./testdata/4", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Berlin", "", + }, + output: t8nOutput{alloc: true, result: true}, + expExitCode: 4, + }, + { // Uncle test + base: "./testdata/5", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Byzantium", "0x80", + }, + output: t8nOutput{alloc: true, result: true}, + expOut: "exp.json", + }, + { // Sign json transactions + base: "./testdata/13", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "London", "", + }, + output: t8nOutput{body: true}, + expOut: "exp.json", + }, + { // Already signed transactions + base: "./testdata/13", + input: t8nInput{ + "alloc.json", "signed_txs.rlp", "env.json", "London", "", + }, + output: t8nOutput{result: true}, + expOut: "exp2.json", + }, + { // Difficulty calculation - no uncles + base: "./testdata/14", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "London", "", + }, + output: t8nOutput{result: true}, + expOut: "exp.json", + }, + { // Difficulty calculation - with uncles + base: "./testdata/14", + input: t8nInput{ + "alloc.json", "txs.json", "env.uncles.json", "London", "", + }, + output: t8nOutput{result: true}, + expOut: "exp2.json", + }, + { // Difficulty calculation - with ommers + Berlin + base: "./testdata/14", + input: t8nInput{ + "alloc.json", "txs.json", "env.uncles.json", "Berlin", "", + }, + output: t8nOutput{result: true}, + expOut: "exp_berlin.json", + }, + { // Difficulty calculation on arrow glacier + base: "./testdata/19", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "London", "", + }, + output: t8nOutput{result: true}, + expOut: "exp_london.json", + }, + { // Difficulty calculation on arrow glacier + base: "./testdata/19", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "ArrowGlacier", "", + }, + output: t8nOutput{result: true}, + expOut: "exp_arrowglacier.json", + }, + { // Difficulty calculation on gray glacier + base: "./testdata/19", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "GrayGlacier", "", + }, + output: t8nOutput{result: true}, + expOut: "exp_grayglacier.json", + }, + { // Sign unprotected (pre-EIP155) transaction + base: "./testdata/23", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Berlin", "", + }, + output: t8nOutput{result: true}, + expOut: "exp.json", + }, + { // Test post-merge transition + base: "./testdata/24", + input: t8nInput{ + "alloc.json", "txs.json", "env.json", "Merged", "", + }, + output: t8nOutput{alloc: true, result: true}, + expOut: "exp.json", + }, + { // Test post-merge transition where input is missing random + base: "./testdata/24", + input: t8nInput{ + "alloc.json", "txs.json", "env-missingrandom.json", "Merged", "", + }, + output: t8nOutput{alloc: false, result: false}, + expExitCode: 3, + }, + } { + args := []string{"t8n"} + args = append(args, tc.output.get()...) + args = append(args, tc.input.get(tc.base)...) + var qArgs []string // quoted args for debugging purposes + for _, arg := range args { + if len(arg) == 0 { + qArgs = append(qArgs, `""`) + } else { + qArgs = append(qArgs, arg) + } + } + tt.Logf("args: %v\n", strings.Join(qArgs, " ")) + tt.Run("evm-test", args...) + // Compare the expected output, if provided + if tc.expOut != "" { + want, err := os.ReadFile(fmt.Sprintf("%v/%v", tc.base, tc.expOut)) + if err != nil { + t.Fatalf("test %d: could not read expected output: %v", i, err) + } + have := tt.Output() + ok, err := cmpJson(have, want) + switch { + case err != nil: + t.Fatalf("test %d, json parsing failed: %v", i, err) + case !ok: + t.Fatalf("test %d: output wrong, have \n%v\nwant\n%v\n", i, string(have), string(want)) + } + } + tt.WaitExit() + if have, want := tt.ExitStatus(), tc.expExitCode; have != want { + t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want) + } + } +} + +type t9nInput struct { + inTxs string + stFork string +} + +func (args *t9nInput) get(base string) []string { + var out []string + if opt := args.inTxs; opt != "" { + out = append(out, "--input.txs") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.stFork; opt != "" { + out = append(out, "--state.fork", opt) + } + return out +} + +func TestT9n(t *testing.T) { + tt := new(testT8n) + tt.TestCmd = cmdtest.NewTestCmd(t, tt) + for i, tc := range []struct { + base string + input t9nInput + expExitCode int + expOut string + }{ + { // London txs on homestead + base: "./testdata/15", + input: t9nInput{ + inTxs: "signed_txs.rlp", + stFork: "Homestead", + }, + expOut: "exp.json", + }, + { // London txs on London + base: "./testdata/15", + input: t9nInput{ + inTxs: "signed_txs.rlp", + stFork: "London", + }, + expOut: "exp2.json", + }, + { // An RLP list (a blockheader really) + base: "./testdata/15", + input: t9nInput{ + inTxs: "blockheader.rlp", + stFork: "London", + }, + expOut: "exp3.json", + }, + { // Transactions with too low gas + base: "./testdata/16", + input: t9nInput{ + inTxs: "signed_txs.rlp", + stFork: "London", + }, + expOut: "exp.json", + }, + { // Transactions with value exceeding 256 bits + base: "./testdata/17", + input: t9nInput{ + inTxs: "signed_txs.rlp", + stFork: "London", + }, + expOut: "exp.json", + }, + { // Invalid RLP + base: "./testdata/18", + input: t9nInput{ + inTxs: "invalid.rlp", + stFork: "London", + }, + expExitCode: t8ntool.ErrorIO, + }, + } { + args := []string{"t9n"} + args = append(args, tc.input.get(tc.base)...) + + tt.Run("evm-test", args...) + tt.Logf("args:\n go run . %v\n", strings.Join(args, " ")) + // Compare the expected output, if provided + if tc.expOut != "" { + want, err := os.ReadFile(fmt.Sprintf("%v/%v", tc.base, tc.expOut)) + if err != nil { + t.Fatalf("test %d: could not read expected output: %v", i, err) + } + have := tt.Output() + ok, err := cmpJson(have, want) + switch { + case err != nil: + t.Logf(string(have)) + t.Fatalf("test %d, json parsing failed: %v", i, err) + case !ok: + t.Fatalf("test %d: output wrong, have \n%v\nwant\n%v\n", i, string(have), string(want)) + } + } + tt.WaitExit() + if have, want := tt.ExitStatus(), tc.expExitCode; have != want { + t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want) + } + } +} + +type b11rInput struct { + inEnv string + inOmmersRlp string + inTxsRlp string + inClique string + ethash bool + ethashMode string + ethashDir string +} + +func (args *b11rInput) get(base string) []string { + var out []string + if opt := args.inEnv; opt != "" { + out = append(out, "--input.header") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.inOmmersRlp; opt != "" { + out = append(out, "--input.ommers") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.inTxsRlp; opt != "" { + out = append(out, "--input.txs") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.inClique; opt != "" { + out = append(out, "--seal.clique") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if args.ethash { + out = append(out, "--seal.ethash") + } + if opt := args.ethashMode; opt != "" { + out = append(out, "--seal.ethash.mode") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + if opt := args.ethashDir; opt != "" { + out = append(out, "--seal.ethash.dir") + out = append(out, fmt.Sprintf("%v/%v", base, opt)) + } + out = append(out, "--output.block") + out = append(out, "stdout") + return out +} + +func TestB11r(t *testing.T) { + tt := new(testT8n) + tt.TestCmd = cmdtest.NewTestCmd(t, tt) + for i, tc := range []struct { + base string + input b11rInput + expExitCode int + expOut string + }{ + { // unsealed block + base: "./testdata/20", + input: b11rInput{ + inEnv: "header.json", + inOmmersRlp: "ommers.json", + inTxsRlp: "txs.rlp", + }, + expOut: "exp.json", + }, + { // ethash test seal + base: "./testdata/21", + input: b11rInput{ + inEnv: "header.json", + inOmmersRlp: "ommers.json", + inTxsRlp: "txs.rlp", + }, + expOut: "exp.json", + }, + { // clique test seal + base: "./testdata/21", + input: b11rInput{ + inEnv: "header.json", + inOmmersRlp: "ommers.json", + inTxsRlp: "txs.rlp", + inClique: "clique.json", + }, + expOut: "exp-clique.json", + }, + { // block with ommers + base: "./testdata/22", + input: b11rInput{ + inEnv: "header.json", + inOmmersRlp: "ommers.json", + inTxsRlp: "txs.rlp", + }, + expOut: "exp.json", + }, + } { + args := []string{"b11r"} + args = append(args, tc.input.get(tc.base)...) + + tt.Run("evm-test", args...) + tt.Logf("args:\n go run . %v\n", strings.Join(args, " ")) + // Compare the expected output, if provided + if tc.expOut != "" { + want, err := os.ReadFile(fmt.Sprintf("%v/%v", tc.base, tc.expOut)) + if err != nil { + t.Fatalf("test %d: could not read expected output: %v", i, err) + } + have := tt.Output() + ok, err := cmpJson(have, want) + switch { + case err != nil: + t.Logf(string(have)) + t.Fatalf("test %d, json parsing failed: %v", i, err) + case !ok: + t.Fatalf("test %d: output wrong, have \n%v\nwant\n%v\n", i, string(have), string(want)) + } + } + tt.WaitExit() + if have, want := tt.ExitStatus(), tc.expExitCode; have != want { + t.Fatalf("test %d: wrong exit code, have %d, want %d", i, have, want) + } + } +} + +// cmpJson compares the JSON in two byte slices. +func cmpJson(a, b []byte) (bool, error) { + var j, j2 interface{} + if err := json.Unmarshal(a, &j); err != nil { + return false, err + } + if err := json.Unmarshal(b, &j2); err != nil { + return false, err + } + return reflect.DeepEqual(j2, j), nil +} diff --git a/cmd/evm/testdata/1/alloc.json b/cmd/evm/testdata/1/alloc.json new file mode 100644 index 00000000..cef1a25f --- /dev/null +++ b/cmd/evm/testdata/1/alloc.json @@ -0,0 +1,12 @@ +{ + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "code": "0x", + "nonce": "0xac", + "storage": {} + }, + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{ + "balance": "0xfeedbead", + "nonce" : "0x00" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/1/env.json b/cmd/evm/testdata/1/env.json new file mode 100644 index 00000000..dd60abd2 --- /dev/null +++ b/cmd/evm/testdata/1/env.json @@ -0,0 +1,7 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty": "0x20000", + "currentGasLimit": "0x750a163df65e8a", + "currentNumber": "1", + "currentTimestamp": "1000" +} \ No newline at end of file diff --git a/cmd/evm/testdata/1/exp.json b/cmd/evm/testdata/1/exp.json new file mode 100644 index 00000000..7d380501 --- /dev/null +++ b/cmd/evm/testdata/1/exp.json @@ -0,0 +1,44 @@ +{ + "alloc": { + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": { + "balance": "0xfeed1a9d", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "nonce": "0xac" + }, + "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xa410" + } + }, + "result": { + "stateRoot": "0x84208a19bc2b46ada7445180c1db162be5b39b9abc8c0a54b05d32943eae4e13", + "txRoot": "0xc4761fd7b87ff2364c7c60b6c5c8d02e522e815328aaea3f20e3b7b7ef52c42d", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x5208", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + } + ], + "rejected": [ + { + "index": 1, + "error": "nonce too low: address 0x8A8eAFb1cf62BfBeb1741769DAE1a9dd47996192, tx: 0 state: 1" + } + ], + "currentDifficulty": "0x20000", + "gasUsed": "0x5208" + } +} diff --git a/cmd/evm/testdata/1/txs.json b/cmd/evm/testdata/1/txs.json new file mode 100644 index 00000000..50b31ff3 --- /dev/null +++ b/cmd/evm/testdata/1/txs.json @@ -0,0 +1,26 @@ +[ + { + "gas": "0x5208", + "gasPrice": "0x2", + "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "input": "0x", + "nonce": "0x0", + "r": "0x9500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdb", + "s": "0x7235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "v": "0x1b", + "value": "0x1" + }, + { + "gas": "0x5208", + "gasPrice": "0x2", + "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "input": "0x", + "nonce": "0x0", + "r": "0x9500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdb", + "s": "0x7235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "v": "0x1b", + "value": "0x1" + } +] diff --git a/cmd/evm/testdata/10/alloc.json b/cmd/evm/testdata/10/alloc.json new file mode 100644 index 00000000..6e98e751 --- /dev/null +++ b/cmd/evm/testdata/10/alloc.json @@ -0,0 +1,23 @@ +{ + "0x1111111111111111111111111111111111111111" : { + "balance" : "0x010000000000", + "code" : "0xfe", + "nonce" : "0x01", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x010000000000", + "code" : "0x", + "nonce" : "0x01", + "storage" : { + } + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363" : { + "balance" : "0x01000000000000", + "code" : "0x", + "nonce" : "0x01", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/10/env.json b/cmd/evm/testdata/10/env.json new file mode 100644 index 00000000..3a82d46a --- /dev/null +++ b/cmd/evm/testdata/10/env.json @@ -0,0 +1,12 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentNumber" : "0x01", + "currentTimestamp" : "0x079e", + "previousHash" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f", + "currentGasLimit" : "0x40000000", + "currentBaseFee" : "0x036b", + "blockHashes" : { + "0" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/10/readme.md b/cmd/evm/testdata/10/readme.md new file mode 100644 index 00000000..c34be80b --- /dev/null +++ b/cmd/evm/testdata/10/readme.md @@ -0,0 +1,79 @@ +## EIP-1559 testing + +This test contains testcases for EIP-1559, which were reported by Ori as misbehaving. + +``` +[user@work evm]$ dir=./testdata/10 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout 2>&1 +INFO [05-09|22:11:59.436] rejected tx index=3 hash=db07bf..ede1e8 from=0xd02d72E067e77158444ef2020Ff2d325f929B363 error="gas limit reached" +``` +Output: +```json +{ + "alloc": { + "0x1111111111111111111111111111111111111111": { + "code": "0xfe", + "balance": "0x10000000000", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x10000000000", + "nonce": "0x1" + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363": { + "balance": "0xff5beffffc95", + "nonce": "0x4" + } + }, + "result": { + "stateRoot": "0xf91a7ec08e4bfea88719aab34deabb000c86902360532b52afa9599d41f2bb8b", + "txRoot": "0xda925f2306a52fa24c15d5cd212d736ee016415fd8dd0c45fd368de7917d64bb", + "receiptRoot": "0x439a25f7fc424c10fb1f89800e4aa1df74156b137239d9ac3eaa7c911c353cd5", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "type": "0x2", + "root": "0x", + "status": "0x0", + "cumulativeGasUsed": "0x10000001", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x88980f6efcc5358d9c359663e7b9414722d430497637340ea056b076bc206701", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x10000001", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + }, + { + "type": "0x2", + "root": "0x", + "status": "0x0", + "cumulativeGasUsed": "0x20000001", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0xd7bf3886f4e2aef74d525ae072c680f3846f550254401b67cbfda4a233757582", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x10000000", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x1" + }, + { + "type": "0x2", + "root": "0x", + "status": "0x0", + "cumulativeGasUsed": "0x30000001", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x50308296760f01f1eeec7500e9e73cad67469249b1f59e9a9f55e6625a4923db", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x10000000", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x2" + } + ], + "rejected": [ + 3 + ] + } +} +``` diff --git a/cmd/evm/testdata/10/txs.json b/cmd/evm/testdata/10/txs.json new file mode 100644 index 00000000..f7c9baa2 --- /dev/null +++ b/cmd/evm/testdata/10/txs.json @@ -0,0 +1,70 @@ +[ + { + "input" : "0x", + "gas" : "0x10000001", + "nonce" : "0x1", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x7a45f00bcde9036b026cdf1628b023cd8a31a95c62b5e4dbbee2fa7debe668fb", + "s" : "0x3cc9d6f2cd00a045b0263f2d6dad7d60938d5d13d061af4969f95928aa934d4a", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [ + ] + }, + { + "input" : "0x", + "gas" : "0x10000000", + "nonce" : "0x2", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x4c564b94b0281a8210eeec2dd1fe2e16ff1c1903a8c3a1078d735d7f8208b2af", + "s" : "0x56432b2593e6de95db1cb997b7385217aca03f1615327e231734446b39f266d", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [ + ] + }, + { + "input" : "0x", + "gas" : "0x10000000", + "nonce" : "0x3", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x2ed2ef52f924f59d4a21e1f2a50d3b1109303ce5e32334a7ece9b46f4fbc2a57", + "s" : "0x2980257129cbd3da987226f323d50ba3975a834d165e0681f991b75615605c44", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [ + ] + }, + { + "input" : "0x", + "gas" : "0x10000000", + "nonce" : "0x4", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x5df7d7f8f8e15b36fc9f189cacb625040fad10398d08fc90812595922a2c49b2", + "s" : "0x565fc1803f77a84d754ffe3c5363ab54a8d93a06ea1bb9d4c73c73a282b35917", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [ + ] + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/11/alloc.json b/cmd/evm/testdata/11/alloc.json new file mode 100644 index 00000000..86938230 --- /dev/null +++ b/cmd/evm/testdata/11/alloc.json @@ -0,0 +1,25 @@ +{ + "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x61ffff5060046000f3", + "nonce" : "0x01", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x00" + } + }, + "0xb94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x00", + "code" : "0x6001600055", + "nonce" : "0x00", + "storage" : { + } + } +} + diff --git a/cmd/evm/testdata/11/env.json b/cmd/evm/testdata/11/env.json new file mode 100644 index 00000000..37dedf09 --- /dev/null +++ b/cmd/evm/testdata/11/env.json @@ -0,0 +1,12 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentNumber" : "0x01", + "currentTimestamp" : "0x03e8", + "previousHash" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2", + "currentGasLimit" : "0x0f4240", + "blockHashes" : { + "0" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2" + } +} + diff --git a/cmd/evm/testdata/11/readme.md b/cmd/evm/testdata/11/readme.md new file mode 100644 index 00000000..d499f8e9 --- /dev/null +++ b/cmd/evm/testdata/11/readme.md @@ -0,0 +1,13 @@ +## Test missing basefee + +In this test, the `currentBaseFee` is missing from the env portion. +On a live blockchain, the basefee is present in the header, and verified as part of header validation. + +In `evm t8n`, we don't have blocks, so it needs to be added in the `env`instead. + +When it's missing, an error is expected. + +``` +dir=./testdata/11 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout 2>&1>/dev/null +ERROR(3): EIP-1559 config but missing 'currentBaseFee' in env section +``` \ No newline at end of file diff --git a/cmd/evm/testdata/11/txs.json b/cmd/evm/testdata/11/txs.json new file mode 100644 index 00000000..c54b0a1f --- /dev/null +++ b/cmd/evm/testdata/11/txs.json @@ -0,0 +1,14 @@ +[ + { + "input" : "0x38600060013960015160005560006000f3", + "gas" : "0x61a80", + "gasPrice" : "0x1", + "nonce" : "0x0", + "value" : "0x186a0", + "v" : "0x1c", + "r" : "0x2e1391fd903387f1cc2b51df083805fb4bbb0d4710a2cdf4a044d191ff7be63e", + "s" : "0x7f10a933c42ab74927db02b1db009e923d9d2ab24ac24d63c399f2fe5d9c9b22", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + } +] + diff --git a/cmd/evm/testdata/12/alloc.json b/cmd/evm/testdata/12/alloc.json new file mode 100644 index 00000000..3ed96894 --- /dev/null +++ b/cmd/evm/testdata/12/alloc.json @@ -0,0 +1,11 @@ +{ + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "84000000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x00" + } + } +} + diff --git a/cmd/evm/testdata/12/env.json b/cmd/evm/testdata/12/env.json new file mode 100644 index 00000000..8ae54653 --- /dev/null +++ b/cmd/evm/testdata/12/env.json @@ -0,0 +1,10 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentNumber" : "0x01", + "currentTimestamp" : "0x03e8", + "previousHash" : "0xfda4419b3660e99f37e536dae1ab081c180136bb38c837a93e93d9aab58553b2", + "currentGasLimit" : "0x0f4240", + "currentBaseFee" : "0x20" +} + diff --git a/cmd/evm/testdata/12/readme.md b/cmd/evm/testdata/12/readme.md new file mode 100644 index 00000000..b0177ecc --- /dev/null +++ b/cmd/evm/testdata/12/readme.md @@ -0,0 +1,40 @@ +## Test 1559 balance + gasCap + +This test contains an EIP-1559 consensus issue which happened on Ropsten, where +`geth` did not properly account for the value transfer while doing the check on `max_fee_per_gas * gas_limit`. + +Before the issue was fixed, this invocation allowed the transaction to pass into a block: +``` +dir=./testdata/12 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout +``` + +With the fix applied, the result is: +``` +dir=./testdata/12 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout --output.result=stdout +INFO [07-21|19:03:50.276] rejected tx index=0 hash=ccc996..d83435 from=0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B error="insufficient funds for gas * price + value: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B have 84000000 want 84000032" +INFO [07-21|19:03:50.276] Trie dumping started root=e05f81..6597a5 +INFO [07-21|19:03:50.276] Trie dumping complete accounts=1 elapsed="39.549µs" +{ + "alloc": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x501bd00" + } + }, + "result": { + "stateRoot": "0xe05f81f8244a76503ceec6f88abfcd03047a612a1001217f37d30984536597a5", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "rejected": [ + { + "index": 0, + "error": "insufficient funds for gas * price + value: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B have 84000000 want 84000032" + } + ] + } +} +``` + +The transaction is rejected. \ No newline at end of file diff --git a/cmd/evm/testdata/12/txs.json b/cmd/evm/testdata/12/txs.json new file mode 100644 index 00000000..cd683f27 --- /dev/null +++ b/cmd/evm/testdata/12/txs.json @@ -0,0 +1,20 @@ +[ + { + "input" : "0x", + "gas" : "0x5208", + "nonce" : "0x0", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x20", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x20", + "accessList" : [ + ] + } +] + diff --git a/cmd/evm/testdata/13/alloc.json b/cmd/evm/testdata/13/alloc.json new file mode 100644 index 00000000..6e98e751 --- /dev/null +++ b/cmd/evm/testdata/13/alloc.json @@ -0,0 +1,23 @@ +{ + "0x1111111111111111111111111111111111111111" : { + "balance" : "0x010000000000", + "code" : "0xfe", + "nonce" : "0x01", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x010000000000", + "code" : "0x", + "nonce" : "0x01", + "storage" : { + } + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363" : { + "balance" : "0x01000000000000", + "code" : "0x", + "nonce" : "0x01", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/13/env.json b/cmd/evm/testdata/13/env.json new file mode 100644 index 00000000..3a82d46a --- /dev/null +++ b/cmd/evm/testdata/13/env.json @@ -0,0 +1,12 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentNumber" : "0x01", + "currentTimestamp" : "0x079e", + "previousHash" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f", + "currentGasLimit" : "0x40000000", + "currentBaseFee" : "0x036b", + "blockHashes" : { + "0" : "0xcb23ee65a163121f640673b41788ee94633941405f95009999b502eedfbbfd4f" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/13/exp.json b/cmd/evm/testdata/13/exp.json new file mode 100644 index 00000000..2b049dfb --- /dev/null +++ b/cmd/evm/testdata/13/exp.json @@ -0,0 +1,3 @@ +{ + "body": "0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" +} diff --git a/cmd/evm/testdata/13/exp2.json b/cmd/evm/testdata/13/exp2.json new file mode 100644 index 00000000..ba8c9f86 --- /dev/null +++ b/cmd/evm/testdata/13/exp2.json @@ -0,0 +1,39 @@ +{ + "result": { + "stateRoot": "0xe4b924a6adb5959fccf769d5b7bb2f6359e26d1e76a2443c5a91a36d826aef61", + "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d", + "receiptsRoot": "0xa532a08aa9f62431d6fe5d924951b8efb86ed3c54d06fee77788c3767dd13420", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "type": "0x2", + "root": "0x", + "status": "0x0", + "cumulativeGasUsed": "0x84d0", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x84d0", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + }, + { + "type": "0x2", + "root": "0x", + "status": "0x0", + "cumulativeGasUsed": "0x109a0", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x84d0", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x1" + } + ], + "currentDifficulty": "0x20000", + "gasUsed": "0x109a0" + } +} diff --git a/cmd/evm/testdata/13/readme.md b/cmd/evm/testdata/13/readme.md new file mode 100644 index 00000000..64f52fc9 --- /dev/null +++ b/cmd/evm/testdata/13/readme.md @@ -0,0 +1,4 @@ +## Input transactions in RLP form + +This testdata folder is used to examplify how transaction input can be provided in rlp form. +Please see the README in `evm` folder for how this is performed. \ No newline at end of file diff --git a/cmd/evm/testdata/13/signed_txs.rlp b/cmd/evm/testdata/13/signed_txs.rlp new file mode 100644 index 00000000..9d1157ea --- /dev/null +++ b/cmd/evm/testdata/13/signed_txs.rlp @@ -0,0 +1 @@ +"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" \ No newline at end of file diff --git a/cmd/evm/testdata/13/txs.json b/cmd/evm/testdata/13/txs.json new file mode 100644 index 00000000..c45ef1e1 --- /dev/null +++ b/cmd/evm/testdata/13/txs.json @@ -0,0 +1,34 @@ +[ + { + "input" : "0x", + "gas" : "0x84d0", + "nonce" : "0x1", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [] + }, + { + "input" : "0x", + "gas" : "0x84d0", + "nonce" : "0x2", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x0", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x41f6e321b31e72173f8ff2e292359e1862f24fba42fe6f97efaf641980eff298", + "chainId" : "0x1", + "type" : "0x2", + "maxFeePerGas" : "0xfa0", + "maxPriorityFeePerGas" : "0x0", + "accessList" : [] + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/14/alloc.json b/cmd/evm/testdata/14/alloc.json new file mode 100644 index 00000000..cef1a25f --- /dev/null +++ b/cmd/evm/testdata/14/alloc.json @@ -0,0 +1,12 @@ +{ + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "code": "0x", + "nonce": "0xac", + "storage": {} + }, + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{ + "balance": "0xfeedbead", + "nonce" : "0x00" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/14/env.json b/cmd/evm/testdata/14/env.json new file mode 100644 index 00000000..0bf1c5cf --- /dev/null +++ b/cmd/evm/testdata/14/env.json @@ -0,0 +1,9 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentGasLimit": "0x750a163df65e8a", + "currentBaseFee": "0x500", + "currentNumber": "12800000", + "currentTimestamp": "100015", + "parentTimestamp" : "99999", + "parentDifficulty" : "0x2000000000000" +} diff --git a/cmd/evm/testdata/14/env.uncles.json b/cmd/evm/testdata/14/env.uncles.json new file mode 100644 index 00000000..83811b95 --- /dev/null +++ b/cmd/evm/testdata/14/env.uncles.json @@ -0,0 +1,10 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentGasLimit": "0x750a163df65e8a", + "currentBaseFee": "0x500", + "currentNumber": "12800000", + "currentTimestamp": "100035", + "parentTimestamp" : "99999", + "parentDifficulty" : "0x2000000000000", + "parentUncleHash" : "0x000000000000000000000000000000000000000000000000000000000000beef" +} diff --git a/cmd/evm/testdata/14/exp.json b/cmd/evm/testdata/14/exp.json new file mode 100644 index 00000000..9bf5635f --- /dev/null +++ b/cmd/evm/testdata/14/exp.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "currentDifficulty": "0x2000020000000", + "receipts": [], + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/14/exp2.json b/cmd/evm/testdata/14/exp2.json new file mode 100644 index 00000000..9c902538 --- /dev/null +++ b/cmd/evm/testdata/14/exp2.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x1ff8020000000", + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/14/exp_berlin.json b/cmd/evm/testdata/14/exp_berlin.json new file mode 100644 index 00000000..c2bf9531 --- /dev/null +++ b/cmd/evm/testdata/14/exp_berlin.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x1ff9000000000", + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/14/readme.md b/cmd/evm/testdata/14/readme.md new file mode 100644 index 00000000..9d0dc956 --- /dev/null +++ b/cmd/evm/testdata/14/readme.md @@ -0,0 +1,41 @@ +## Difficulty calculation + +This test shows how the `evm t8n` can be used to calculate the (ethash) difficulty, if none is provided by the caller. + +Calculating it (with an empty set of txs) using `London` rules (and no provided unclehash for the parent block): +``` +[user@work evm]$ ./evm t8n --input.alloc=./testdata/14/alloc.json --input.txs=./testdata/14/txs.json --input.env=./testdata/14/env.json --output.result=stdout --state.fork=London +INFO [08-30|20:43:09.352] Trie dumping started root=6f0588..7f4bdc +INFO [08-30|20:43:09.352] Trie dumping complete accounts=2 elapsed="82.533µs" +INFO [08-30|20:43:09.352] Wrote file file=alloc.json +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x2000020000000" + } +} +``` +Same thing, but this time providing a non-empty (and non-`emptyKeccak`) unclehash, which leads to a slightly different result: +``` +[user@work evm]$ ./evm t8n --input.alloc=./testdata/14/alloc.json --input.txs=./testdata/14/txs.json --input.env=./testdata/14/env.uncles.json --output.result=stdout --state.fork=London +INFO [08-30|20:44:33.102] Trie dumping started root=6f0588..7f4bdc +INFO [08-30|20:44:33.102] Trie dumping complete accounts=2 elapsed="72.91µs" +INFO [08-30|20:44:33.102] Wrote file file=alloc.json +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x1ff8020000000" + } +} +``` + diff --git a/cmd/evm/testdata/14/txs.json b/cmd/evm/testdata/14/txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/14/txs.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/15/blockheader.rlp b/cmd/evm/testdata/15/blockheader.rlp new file mode 100644 index 00000000..1124e8e2 --- /dev/null +++ b/cmd/evm/testdata/15/blockheader.rlp @@ -0,0 +1 @@ +"0xf901f0a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0101020383010203a00000000000000000000000000000000000000000000000000000000000000000880000000000000000" \ No newline at end of file diff --git a/cmd/evm/testdata/15/exp.json b/cmd/evm/testdata/15/exp.json new file mode 100644 index 00000000..1893fdfc --- /dev/null +++ b/cmd/evm/testdata/15/exp.json @@ -0,0 +1,10 @@ +[ + { + "error": "transaction type not supported", + "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476" + }, + { + "error": "transaction type not supported", + "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/15/exp2.json b/cmd/evm/testdata/15/exp2.json new file mode 100644 index 00000000..dd5e8a35 --- /dev/null +++ b/cmd/evm/testdata/15/exp2.json @@ -0,0 +1,12 @@ +[ + { + "address": "0xd02d72e067e77158444ef2020ff2d325f929b363", + "hash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", + "intrinsicGas": "0x5208" + }, + { + "address": "0xd02d72e067e77158444ef2020ff2d325f929b363", + "hash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", + "intrinsicGas": "0x5208" + } +] diff --git a/cmd/evm/testdata/15/exp3.json b/cmd/evm/testdata/15/exp3.json new file mode 100644 index 00000000..d7606a20 --- /dev/null +++ b/cmd/evm/testdata/15/exp3.json @@ -0,0 +1,47 @@ +[ + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + }, + { + "error": "typed transaction too short" + }, + { + "error": "typed transaction too short" + }, + { + "error": "typed transaction too short" + }, + { + "error": "typed transaction too short" + }, + { + "error": "typed transaction too short" + }, + { + "error": "rlp: expected input list for types.AccessListTx" + }, + { + "error": "transaction type not supported" + }, + { + "error": "transaction type not supported" + } +] diff --git a/cmd/evm/testdata/15/signed_txs.rlp b/cmd/evm/testdata/15/signed_txs.rlp new file mode 100644 index 00000000..9d1157ea --- /dev/null +++ b/cmd/evm/testdata/15/signed_txs.rlp @@ -0,0 +1 @@ +"0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" \ No newline at end of file diff --git a/cmd/evm/testdata/15/signed_txs.rlp.json b/cmd/evm/testdata/15/signed_txs.rlp.json new file mode 100644 index 00000000..187f40f2 --- /dev/null +++ b/cmd/evm/testdata/15/signed_txs.rlp.json @@ -0,0 +1,4 @@ +{ + "txsRlp" : "0xf8d2b86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" +} + diff --git a/cmd/evm/testdata/16/exp.json b/cmd/evm/testdata/16/exp.json new file mode 100644 index 00000000..137ade65 --- /dev/null +++ b/cmd/evm/testdata/16/exp.json @@ -0,0 +1,13 @@ +[ + { + "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "hash": "0x7cc3d1a8540a44736750f03bb4d85c0113be4b3472a71bf82241a3b261b479e6", + "intrinsicGas": "0x5208" + }, + { + "error": "intrinsic gas too low: have 82, want 21000", + "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "hash": "0x3b2d2609e4361562edb9169314f4c05afc6dbf5d706bf9dda5abe242ab76a22b", + "intrinsicGas": "0x5208" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/16/signed_txs.rlp b/cmd/evm/testdata/16/signed_txs.rlp new file mode 100644 index 00000000..952ced21 --- /dev/null +++ b/cmd/evm/testdata/16/signed_txs.rlp @@ -0,0 +1 @@ +"0xf8cab86401f8610180018252089411111111111111111111111111111111111111112080c001a0937f65ef1deece46c473b99962678fb7c38425cf303d1e8fa9717eb4b9d012b5a01940c5a5647c4940217ffde1051a5fd92ec8551e275c1787f81f50a2ad84de43b86201f85f018001529411111111111111111111111111111111111111112080c001a0241c3aec732205542a87fef8c76346741e85480bce5a42d05a9a73dac892f84ca04f52e2dfce57f3a02ed10e085e1a154edf38a726da34127c85fc53b4921759c8" \ No newline at end of file diff --git a/cmd/evm/testdata/16/unsigned_txs.json b/cmd/evm/testdata/16/unsigned_txs.json new file mode 100644 index 00000000..f6195894 --- /dev/null +++ b/cmd/evm/testdata/16/unsigned_txs.json @@ -0,0 +1,34 @@ +[ + { + "input" : "0x", + "gas" : "0x5208", + "nonce" : "0x0", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x20", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "chainId" : "0x1", + "type" : "0x1", + "gasPrice": "0x1", + "accessList" : [ + ] + }, + { + "input" : "0x", + "gas" : "0x52", + "nonce" : "0x0", + "to" : "0x1111111111111111111111111111111111111111", + "value" : "0x20", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "chainId" : "0x1", + "type" : "0x1", + "gasPrice": "0x1", + "accessList" : [ + ] + } +] diff --git a/cmd/evm/testdata/17/exp.json b/cmd/evm/testdata/17/exp.json new file mode 100644 index 00000000..48590604 --- /dev/null +++ b/cmd/evm/testdata/17/exp.json @@ -0,0 +1,22 @@ + [ + { + "error": "value exceeds 256 bits", + "address": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "hash": "0xfbd91685dcbf8172f0e8c53e2ddbb4d26707840da6b51a74371f62a33868fd82", + "intrinsicGas": "0x5208" + }, + { + "error": "gasPrice exceeds 256 bits", + "address": "0x1b57ccef1fe5fb73f1e64530fb4ebd9cf1655964", + "hash": "0x45dc05035cada83748e4c1fe617220106b331eca054f44c2304d5654a9fb29d5", + "intrinsicGas": "0x5208" + }, + { + "error": "invalid transaction v, r, s values", + "hash": "0xf06691c2a803ab7f3c81d06a0c0a896f80f311105c599fc59a9fdbc669356d35" + }, + { + "error": "invalid transaction v, r, s values", + "hash": "0x84703b697ad5b0db25e4f1f98fb6b1adce85b9edb2232eeba9cedd8c6601694b" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/17/rlpdata.txt b/cmd/evm/testdata/17/rlpdata.txt new file mode 100644 index 00000000..874461fd --- /dev/null +++ b/cmd/evm/testdata/17/rlpdata.txt @@ -0,0 +1,46 @@ +[ + [ + "", + "d", + 5208, + d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, + 010000000000000000000000000000000000000000000000000000000000000001, + "", + 1b, + c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d, + 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28, + ], + [ + "", + 010000000000000000000000000000000000000000000000000000000000000001, + 5208, + d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, + 11, + "", + 1b, + c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d, + 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28, + ], + [ + "", + 11, + 5208, + d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, + 11, + "", + 1b, + c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549daa, + 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28, + ], + [ + "", + 11, + 5208, + d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0, + 11, + "", + 1b, + c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549d, + 6180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28bb, + ], +] diff --git a/cmd/evm/testdata/17/signed_txs.rlp b/cmd/evm/testdata/17/signed_txs.rlp new file mode 100644 index 00000000..0e351fb0 --- /dev/null +++ b/cmd/evm/testdata/17/signed_txs.rlp @@ -0,0 +1 @@ +"0xf901c8f880806482520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a1010000000000000000000000000000000000000000000000000000000000000001801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f88080a101000000000000000000000000000000000000000000000000000000000000000182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f860801182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba1c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549daaa06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28f860801182520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d011801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da16180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28bb" \ No newline at end of file diff --git a/cmd/evm/testdata/18/README.md b/cmd/evm/testdata/18/README.md new file mode 100644 index 00000000..360a9bba --- /dev/null +++ b/cmd/evm/testdata/18/README.md @@ -0,0 +1,9 @@ +# Invalid rlp + +This folder contains a sample of invalid RLP, and it's expected +that the t9n handles this properly: + +``` +$ go run . t9n --input.txs=./testdata/18/invalid.rlp --state.fork=London +ERROR(11): rlp: value size exceeds available input length +``` \ No newline at end of file diff --git a/cmd/evm/testdata/18/invalid.rlp b/cmd/evm/testdata/18/invalid.rlp new file mode 100644 index 00000000..7ff2824c --- /dev/null +++ b/cmd/evm/testdata/18/invalid.rlp @@ -0,0 +1 @@ +"0xf852328001825208870b9331677e6ebf0a801ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa03887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3" \ No newline at end of file diff --git a/cmd/evm/testdata/19/alloc.json b/cmd/evm/testdata/19/alloc.json new file mode 100644 index 00000000..cef1a25f --- /dev/null +++ b/cmd/evm/testdata/19/alloc.json @@ -0,0 +1,12 @@ +{ + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "code": "0x", + "nonce": "0xac", + "storage": {} + }, + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{ + "balance": "0xfeedbead", + "nonce" : "0x00" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/19/env.json b/cmd/evm/testdata/19/env.json new file mode 100644 index 00000000..0c64392a --- /dev/null +++ b/cmd/evm/testdata/19/env.json @@ -0,0 +1,9 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentGasLimit": "0x750a163df65e8a", + "currentBaseFee": "0x500", + "currentNumber": "13000000", + "currentTimestamp": "100015", + "parentTimestamp" : "99999", + "parentDifficulty" : "0x2000000000000" +} diff --git a/cmd/evm/testdata/19/exp_arrowglacier.json b/cmd/evm/testdata/19/exp_arrowglacier.json new file mode 100644 index 00000000..9cf56ffa --- /dev/null +++ b/cmd/evm/testdata/19/exp_arrowglacier.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "currentDifficulty": "0x2000000200000", + "receipts": [], + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/19/exp_grayglacier.json b/cmd/evm/testdata/19/exp_grayglacier.json new file mode 100644 index 00000000..95a3cb16 --- /dev/null +++ b/cmd/evm/testdata/19/exp_grayglacier.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x2000000004000", + "gasUsed": "0x0" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/19/exp_london.json b/cmd/evm/testdata/19/exp_london.json new file mode 100644 index 00000000..a06bc8ca --- /dev/null +++ b/cmd/evm/testdata/19/exp_london.json @@ -0,0 +1,12 @@ +{ + "result": { + "stateRoot": "0x6f058887ca01549716789c380ede95aecc510e6d1fdc4dbf67d053c7c07f4bdc", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "currentDifficulty": "0x2000080000000", + "receipts": [], + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/19/readme.md b/cmd/evm/testdata/19/readme.md new file mode 100644 index 00000000..095d4525 --- /dev/null +++ b/cmd/evm/testdata/19/readme.md @@ -0,0 +1,9 @@ +## Difficulty calculation + +This test shows how the `evm t8n` can be used to calculate the (ethash) difficulty, if none is provided by the caller, +this time on `GrayGlacier` (Eip 5133). + +Calculating it (with an empty set of txs) using `GrayGlacier` rules (and no provided unclehash for the parent block): +``` +[user@work evm]$ ./evm t8n --input.alloc=./testdata/19/alloc.json --input.txs=./testdata/19/txs.json --input.env=./testdata/19/env.json --output.result=stdout --state.fork=GrayGlacier +``` \ No newline at end of file diff --git a/cmd/evm/testdata/19/txs.json b/cmd/evm/testdata/19/txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/19/txs.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/2/alloc.json b/cmd/evm/testdata/2/alloc.json new file mode 100644 index 00000000..a9720afc --- /dev/null +++ b/cmd/evm/testdata/2/alloc.json @@ -0,0 +1,16 @@ +{ + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x6001600053600160006001f0ff00", + "nonce" : "0x00", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/2/env.json b/cmd/evm/testdata/2/env.json new file mode 100644 index 00000000..ebadd3f0 --- /dev/null +++ b/cmd/evm/testdata/2/env.json @@ -0,0 +1,7 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentGasLimit" : "0x3b9aca00", + "currentNumber" : "0x01", + "currentTimestamp" : "0x03e8" +} \ No newline at end of file diff --git a/cmd/evm/testdata/2/readme.md b/cmd/evm/testdata/2/readme.md new file mode 100644 index 00000000..c116f0e7 --- /dev/null +++ b/cmd/evm/testdata/2/readme.md @@ -0,0 +1 @@ +These files examplify a selfdestruct to the `0`-address. \ No newline at end of file diff --git a/cmd/evm/testdata/2/txs.json b/cmd/evm/testdata/2/txs.json new file mode 100644 index 00000000..30444585 --- /dev/null +++ b/cmd/evm/testdata/2/txs.json @@ -0,0 +1,14 @@ +[ + { + "input" : "0x", + "gas" : "0x5f5e100", + "gasPrice" : "0x1", + "nonce" : "0x0", + "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0x186a0", + "v" : "0x1b", + "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b", + "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28", + "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/20/exp.json b/cmd/evm/testdata/20/exp.json new file mode 100644 index 00000000..7bec6cef --- /dev/null +++ b/cmd/evm/testdata/20/exp.json @@ -0,0 +1,4 @@ +{ + "rlp": "0xf902d9f90211a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e997a23b159e2e2a5ce72333262972374b15425ca0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e99476574682f76312e302e312f6c696e75782f676f312e342e32a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf8897435673d874f7c8f8c2f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600c0", + "hash": "0xaba9a3b6a4e96e9ecffcadaa5a2ae0589359455617535cd86589fe1dd26fe899" +} diff --git a/cmd/evm/testdata/20/header.json b/cmd/evm/testdata/20/header.json new file mode 100644 index 00000000..fb9b7fc5 --- /dev/null +++ b/cmd/evm/testdata/20/header.json @@ -0,0 +1,14 @@ +{ + "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e", + "miner": "0xe997a23b159e2e2a5ce72333262972374b15425c", + "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1000", + "number": "0xc3be", + "gasLimit": "0x50785", + "gasUsed": "0x0", + "timestamp": "0x55c5277e", + "extraData": "0x476574682f76312e302e312f6c696e75782f676f312e342e32", + "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf", + "nonce": "0x97435673d874f7c8" +} diff --git a/cmd/evm/testdata/20/ommers.json b/cmd/evm/testdata/20/ommers.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/20/ommers.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/20/readme.md b/cmd/evm/testdata/20/readme.md new file mode 100644 index 00000000..2c448a96 --- /dev/null +++ b/cmd/evm/testdata/20/readme.md @@ -0,0 +1,11 @@ +# Block building + +This test shows how `b11r` can be used to assemble an unsealed block. + +```console +$ go run . b11r --input.header=testdata/20/header.json --input.txs=testdata/20/txs.rlp --input.ommers=testdata/20/ommers.json --output.block=stdout +{ + "rlp": "0xf90216f90211a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e997a23b159e2e2a5ce72333262972374b15425ca0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e99476574682f76312e302e312f6c696e75782f676f312e342e32a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf8897435673d874f7c8c0c0", + "hash": "0xaba9a3b6a4e96e9ecffcadaa5a2ae0589359455617535cd86589fe1dd26fe899" +} +``` diff --git a/cmd/evm/testdata/20/txs.rlp b/cmd/evm/testdata/20/txs.rlp new file mode 100644 index 00000000..3599ff06 --- /dev/null +++ b/cmd/evm/testdata/20/txs.rlp @@ -0,0 +1 @@ +"0xf8c2f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600f85f8002825208948a8eafb1cf62bfbeb1741769dae1a9dd4799619201801ba09500e8ba27d3c33ca7764e107410f44cbd8c19794bde214d694683a7aa998cdba07235ae07e4bd6e0206d102b1f8979d6adab280466b6a82d2208ee08951f1f600" \ No newline at end of file diff --git a/cmd/evm/testdata/21/clique.json b/cmd/evm/testdata/21/clique.json new file mode 100644 index 00000000..84fa259a --- /dev/null +++ b/cmd/evm/testdata/21/clique.json @@ -0,0 +1,6 @@ +{ + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "voted": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "authorize": false, + "vanity": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +} diff --git a/cmd/evm/testdata/21/exp-clique.json b/cmd/evm/testdata/21/exp-clique.json new file mode 100644 index 00000000..c990ba8a --- /dev/null +++ b/cmd/evm/testdata/21/exp-clique.json @@ -0,0 +1,4 @@ +{ + "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0", + "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7" +} diff --git a/cmd/evm/testdata/21/exp.json b/cmd/evm/testdata/21/exp.json new file mode 100644 index 00000000..b3e5e7a8 --- /dev/null +++ b/cmd/evm/testdata/21/exp.json @@ -0,0 +1,4 @@ +{ + "rlp": "0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0", + "hash": "0x801411e9f6609a659825690d13e4f75a3cfe9143952fa2d9573f3b0a5eb9ebbb" +} diff --git a/cmd/evm/testdata/21/header.json b/cmd/evm/testdata/21/header.json new file mode 100644 index 00000000..62abe3cc --- /dev/null +++ b/cmd/evm/testdata/21/header.json @@ -0,0 +1,11 @@ +{ + "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e", + "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1000", + "number": "0xc3be", + "gasLimit": "0x50785", + "gasUsed": "0x0", + "timestamp": "0x55c5277e", + "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf" +} diff --git a/cmd/evm/testdata/21/ommers.json b/cmd/evm/testdata/21/ommers.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/21/ommers.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/21/readme.md b/cmd/evm/testdata/21/readme.md new file mode 100644 index 00000000..b70f106f --- /dev/null +++ b/cmd/evm/testdata/21/readme.md @@ -0,0 +1,23 @@ +# Sealed block building + +This test shows how `b11r` can be used to assemble a sealed block. + +## Ethash + +```console +$ go run . b11r --input.header=testdata/21/header.json --input.txs=testdata/21/txs.rlp --input.ommers=testdata/21/ommers.json --seal.ethash --seal.ethash.mode=test --output.block=stdout +{ + "rlp": "0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0", + "hash": "0x801411e9f6609a659825690d13e4f75a3cfe9143952fa2d9573f3b0a5eb9ebbb" +} +``` + +## Clique + +```console +$ go run . b11r --input.header=testdata/21/header.json --input.txs=testdata/21/txs.rlp --input.ommers=testdata/21/ommers.json --seal.clique=testdata/21/clique.json --output.block=stdout +{ + "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0", + "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7" +} +``` diff --git a/cmd/evm/testdata/21/txs.rlp b/cmd/evm/testdata/21/txs.rlp new file mode 100644 index 00000000..e815397b --- /dev/null +++ b/cmd/evm/testdata/21/txs.rlp @@ -0,0 +1 @@ +"c0" diff --git a/cmd/evm/testdata/22/exp-clique.json b/cmd/evm/testdata/22/exp-clique.json new file mode 100644 index 00000000..c990ba8a --- /dev/null +++ b/cmd/evm/testdata/22/exp-clique.json @@ -0,0 +1,4 @@ +{ + "rlp": "0xf9025ff9025aa0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277eb861aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac540a67aaee364005841da84f488f6b6d0116dfb5103d091402c81a163d5f66666595e37f56f196d8c5c98da714dbfae68d6b7e1790cc734a20ec6ce52213ad800a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf88ffffffffffffffffc0c0", + "hash": "0x71c59102cc805dbe8741e1210ebe229a321eff144ac7276006fefe39e8357dc7" +} diff --git a/cmd/evm/testdata/22/exp.json b/cmd/evm/testdata/22/exp.json new file mode 100644 index 00000000..14fd8199 --- /dev/null +++ b/cmd/evm/testdata/22/exp.json @@ -0,0 +1,4 @@ +{ + "rlp": "0xf905f5f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea06eb9f0c3cd68c9e97134e6725d12b1f1d8f0644458da6870a37ff84c908fb1e7940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0f903f6f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000", + "hash": "0xd9a81c8fcd57a7f2a0d2c375eff6ad192c30c3729a271303f0a9a7e1b357e755" +} diff --git a/cmd/evm/testdata/22/header.json b/cmd/evm/testdata/22/header.json new file mode 100644 index 00000000..62abe3cc --- /dev/null +++ b/cmd/evm/testdata/22/header.json @@ -0,0 +1,11 @@ +{ + "parentHash": "0xd6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34e", + "stateRoot": "0x325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2e", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1000", + "number": "0xc3be", + "gasLimit": "0x50785", + "gasUsed": "0x0", + "timestamp": "0x55c5277e", + "mixHash": "0x5865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf" +} diff --git a/cmd/evm/testdata/22/ommers.json b/cmd/evm/testdata/22/ommers.json new file mode 100644 index 00000000..997015b3 --- /dev/null +++ b/cmd/evm/testdata/22/ommers.json @@ -0,0 +1 @@ +["0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0","0xf901fdf901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0c0"] diff --git a/cmd/evm/testdata/22/readme.md b/cmd/evm/testdata/22/readme.md new file mode 100644 index 00000000..2cac8a24 --- /dev/null +++ b/cmd/evm/testdata/22/readme.md @@ -0,0 +1,11 @@ +# Building blocks with ommers + +This test shows how `b11r` can chain together ommer assembles into a canonical block. + +```console +$ echo "{ \"ommers\": [`go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --output.block=stdout | jq '.[\"rlp\"]'`,`go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --output.block=stdout | jq '.[\"rlp\"]'`]}" | go run . b11r --input.header=testdata/22/header.json --input.txs=testdata/22/txs.rlp --input.ommers=stdin --output.block=stdout +{ + "rlp": "0xf905f5f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea06eb9f0c3cd68c9e97134e6725d12b1f1d8f0644458da6870a37ff84c908fb1e7940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000c0f903f6f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000f901f8a0d6d785d33cbecf30f30d07e00e226af58f72efdf385d46bc3e6326c23b11e34ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0325aea6db48e9d737cddf59034843e99f05bec269453be83c9b9a981a232cc2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082100082c3be83050785808455c5277e80a05865e417635a26db6d1d39ac70d1abf373e5398b3c6fd506acd038fa1334eedf880000000000000000", + "hash": "0xd9a81c8fcd57a7f2a0d2c375eff6ad192c30c3729a271303f0a9a7e1b357e755" +} +``` diff --git a/cmd/evm/testdata/22/txs.rlp b/cmd/evm/testdata/22/txs.rlp new file mode 100644 index 00000000..e815397b --- /dev/null +++ b/cmd/evm/testdata/22/txs.rlp @@ -0,0 +1 @@ +"c0" diff --git a/cmd/evm/testdata/23/alloc.json b/cmd/evm/testdata/23/alloc.json new file mode 100644 index 00000000..239b3553 --- /dev/null +++ b/cmd/evm/testdata/23/alloc.json @@ -0,0 +1,16 @@ +{ + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x6001", + "nonce" : "0x00", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } +} diff --git a/cmd/evm/testdata/23/env.json b/cmd/evm/testdata/23/env.json new file mode 100644 index 00000000..1b463215 --- /dev/null +++ b/cmd/evm/testdata/23/env.json @@ -0,0 +1,7 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentGasLimit" : "0x3b9aca00", + "currentNumber" : "0x05", + "currentTimestamp" : "0x03e8" +} diff --git a/cmd/evm/testdata/23/exp.json b/cmd/evm/testdata/23/exp.json new file mode 100644 index 00000000..e51f37d9 --- /dev/null +++ b/cmd/evm/testdata/23/exp.json @@ -0,0 +1,25 @@ +{ + "result": { + "stateRoot": "0x65334305e4accfa18352deb24f007b837b5036425b0712cf0e65a43bfa95154d", + "txRoot": "0x75e61774a2ff58cbe32653420256c7f44bc715715a423b0b746d5c622979af6b", + "receiptsRoot": "0xf951f9396af203499cc7d379715a9110323de73967c5700e2f424725446a3c76", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x520b", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x520b", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + } + ], + "currentDifficulty": "0x20000", + "gasUsed": "0x520b" + } +} diff --git a/cmd/evm/testdata/23/readme.md b/cmd/evm/testdata/23/readme.md new file mode 100644 index 00000000..85fe8db6 --- /dev/null +++ b/cmd/evm/testdata/23/readme.md @@ -0,0 +1 @@ +These files examplify how to sign a transaction using the pre-EIP155 scheme. diff --git a/cmd/evm/testdata/23/txs.json b/cmd/evm/testdata/23/txs.json new file mode 100644 index 00000000..22f3840f --- /dev/null +++ b/cmd/evm/testdata/23/txs.json @@ -0,0 +1,15 @@ +[ + { + "input" : "0x", + "gas" : "0x5f5e100", + "gasPrice" : "0x1", + "nonce" : "0x0", + "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0x186a0", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "protected": false + } +] diff --git a/cmd/evm/testdata/24/alloc.json b/cmd/evm/testdata/24/alloc.json new file mode 100644 index 00000000..73a9a03c --- /dev/null +++ b/cmd/evm/testdata/24/alloc.json @@ -0,0 +1,14 @@ +{ + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "code": "0x", + "nonce": "0xac", + "storage": {} + }, + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{ + "balance": "0xfeedbead", + "nonce" : "0x00", + "code" : "0x44600055", + "_comment": "The code is 'sstore(0, random)'" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/24/env-missingrandom.json b/cmd/evm/testdata/24/env-missingrandom.json new file mode 100644 index 00000000..db49fd3f --- /dev/null +++ b/cmd/evm/testdata/24/env-missingrandom.json @@ -0,0 +1,9 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty": null, + "currentRandom": null, + "currentGasLimit": "0x750a163df65e8a", + "currentBaseFee": "0x500", + "currentNumber": "1", + "currentTimestamp": "1000" +} diff --git a/cmd/evm/testdata/24/env.json b/cmd/evm/testdata/24/env.json new file mode 100644 index 00000000..262cc252 --- /dev/null +++ b/cmd/evm/testdata/24/env.json @@ -0,0 +1,9 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty": null, + "currentRandom": "0xdeadc0de", + "currentGasLimit": "0x750a163df65e8a", + "currentBaseFee": "0x500", + "currentNumber": "1", + "currentTimestamp": "1000" +} diff --git a/cmd/evm/testdata/24/exp.json b/cmd/evm/testdata/24/exp.json new file mode 100644 index 00000000..05d8c7a0 --- /dev/null +++ b/cmd/evm/testdata/24/exp.json @@ -0,0 +1,53 @@ +{ + "alloc": { + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192": { + "code": "0x44600055", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000deadc0de" + }, + "balance": "0xfeedbeaf" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878b803f972", + "nonce": "0xae" + }, + "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x1030600" + } + }, + "result": { + "stateRoot": "0x9e4224c6bba343d5b0fdbe9200cc66a7ef2068240d901ae516e634c45a043c15", + "txRoot": "0x16cd3a7daa6686ceebadf53b7af2bc6919eccb730907f0e74a95a4423c209593", + "receiptsRoot": "0x22b85cda738345a9880260b2a71e144aab1ca9485f5db4fd251008350fc124c8", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0xa861", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x92ea4a28224d033afb20e0cc2b290d4c7c2d61f6a4800a680e4e19ac962ee941", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0xa861", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + }, + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x10306", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x16b1d912f1d664f3f60f4e1b5f296f3c82a64a1a253117b4851d18bc03c4f1da", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5aa5", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x1" + } + ], + "currentDifficulty": null, + "gasUsed": "0x10306" + } +} diff --git a/cmd/evm/testdata/24/txs.json b/cmd/evm/testdata/24/txs.json new file mode 100644 index 00000000..99c2068f --- /dev/null +++ b/cmd/evm/testdata/24/txs.json @@ -0,0 +1,28 @@ +[ + { + "gas": "0x186a0", + "gasPrice": "0x600", + "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "input": "0x", + "nonce": "0xac", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "value": "0x1", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + }, + { + "gas": "0x186a0", + "gasPrice": "0x600", + "hash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", + "input": "0x", + "nonce": "0xad", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "value": "0x1", + "v" : "0x0", + "r" : "0x0", + "s" : "0x0", + "secretKey" : "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + } +] diff --git a/cmd/evm/testdata/3/alloc.json b/cmd/evm/testdata/3/alloc.json new file mode 100644 index 00000000..dca318ee --- /dev/null +++ b/cmd/evm/testdata/3/alloc.json @@ -0,0 +1,16 @@ +{ + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x600140", + "nonce" : "0x00", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/3/env.json b/cmd/evm/testdata/3/env.json new file mode 100644 index 00000000..e283eff4 --- /dev/null +++ b/cmd/evm/testdata/3/env.json @@ -0,0 +1,8 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentGasLimit" : "0x3b9aca00", + "currentNumber" : "0x05", + "currentTimestamp" : "0x03e8", + "blockHashes" : { "1" : "0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"} +} \ No newline at end of file diff --git a/cmd/evm/testdata/3/exp.json b/cmd/evm/testdata/3/exp.json new file mode 100644 index 00000000..71b3d2f5 --- /dev/null +++ b/cmd/evm/testdata/3/exp.json @@ -0,0 +1,38 @@ +{ + "alloc": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": { + "code": "0x600140", + "balance": "0xde0b6b3a76586a0" + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "balance": "0x521f" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xde0b6b3a7622741", + "nonce": "0x1" + } + }, + "result": { + "stateRoot": "0xb7341da3f9f762a6884eaa186c32942734c146b609efee11c4b0214c44857ea1", + "txRoot": "0x75e61774a2ff58cbe32653420256c7f44bc715715a423b0b746d5c622979af6b", + "receiptsRoot": "0xd0d26df80374a327c025d405ebadc752b1bbd089d864801ae78ab704bcad8086", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x521f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x521f", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + } + ], + "currentDifficulty": "0x20000", + "gasUsed": "0x521f" + } +} diff --git a/cmd/evm/testdata/3/readme.md b/cmd/evm/testdata/3/readme.md new file mode 100644 index 00000000..499f03d7 --- /dev/null +++ b/cmd/evm/testdata/3/readme.md @@ -0,0 +1,2 @@ +These files examplify a transition where a transaction (excuted on block 5) requests +the blockhash for block `1`. diff --git a/cmd/evm/testdata/3/txs.json b/cmd/evm/testdata/3/txs.json new file mode 100644 index 00000000..30444585 --- /dev/null +++ b/cmd/evm/testdata/3/txs.json @@ -0,0 +1,14 @@ +[ + { + "input" : "0x", + "gas" : "0x5f5e100", + "gasPrice" : "0x1", + "nonce" : "0x0", + "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0x186a0", + "v" : "0x1b", + "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b", + "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28", + "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/4/alloc.json b/cmd/evm/testdata/4/alloc.json new file mode 100644 index 00000000..fadf2bdc --- /dev/null +++ b/cmd/evm/testdata/4/alloc.json @@ -0,0 +1,16 @@ +{ + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x600340", + "nonce" : "0x00", + "storage" : { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/4/env.json b/cmd/evm/testdata/4/env.json new file mode 100644 index 00000000..e283eff4 --- /dev/null +++ b/cmd/evm/testdata/4/env.json @@ -0,0 +1,8 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "0x020000", + "currentGasLimit" : "0x3b9aca00", + "currentNumber" : "0x05", + "currentTimestamp" : "0x03e8", + "blockHashes" : { "1" : "0xdac58aa524e50956d0c0bae7f3f8bb9d35381365d07804dd5b48a5a297c06af4"} +} \ No newline at end of file diff --git a/cmd/evm/testdata/4/readme.md b/cmd/evm/testdata/4/readme.md new file mode 100644 index 00000000..08840d37 --- /dev/null +++ b/cmd/evm/testdata/4/readme.md @@ -0,0 +1,3 @@ +These files examplify a transition where a transaction (excuted on block 5) requests +the blockhash for block `4`, but where the hash for that block is missing. +It's expected that executing these should cause `exit` with errorcode `4`. diff --git a/cmd/evm/testdata/4/txs.json b/cmd/evm/testdata/4/txs.json new file mode 100644 index 00000000..30444585 --- /dev/null +++ b/cmd/evm/testdata/4/txs.json @@ -0,0 +1,14 @@ +[ + { + "input" : "0x", + "gas" : "0x5f5e100", + "gasPrice" : "0x1", + "nonce" : "0x0", + "to" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0x186a0", + "v" : "0x1b", + "r" : "0x88544c93a564b4c28d2ffac2074a0c55fdd4658fe0d215596ed2e32e3ef7f56b", + "s" : "0x7fb4075d54190f825d7c47bb820284757b34fd6293904a93cddb1d3aa961ac28", + "hash" : "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81" + } +] \ No newline at end of file diff --git a/cmd/evm/testdata/5/alloc.json b/cmd/evm/testdata/5/alloc.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/cmd/evm/testdata/5/alloc.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/cmd/evm/testdata/5/env.json b/cmd/evm/testdata/5/env.json new file mode 100644 index 00000000..1085f63e --- /dev/null +++ b/cmd/evm/testdata/5/env.json @@ -0,0 +1,11 @@ +{ + "currentCoinbase": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "currentDifficulty": "0x20000", + "currentGasLimit": "0x750a163df65e8a", + "currentNumber": "1", + "currentTimestamp": "1000", + "ommers": [ + {"delta": 1, "address": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" }, + {"delta": 2, "address": "0xcccccccccccccccccccccccccccccccccccccccc" } + ] +} \ No newline at end of file diff --git a/cmd/evm/testdata/5/exp.json b/cmd/evm/testdata/5/exp.json new file mode 100644 index 00000000..7d715672 --- /dev/null +++ b/cmd/evm/testdata/5/exp.json @@ -0,0 +1,23 @@ +{ + "alloc": { + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { + "balance": "0x88" + }, + "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": { + "balance": "0x70" + }, + "0xcccccccccccccccccccccccccccccccccccccccc": { + "balance": "0x60" + } + }, + "result": { + "stateRoot": "0xa7312add33811645c6aa65d928a1a4f49d65d448801912c069a0aa8fe9c1f393", + "txRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [], + "currentDifficulty": "0x20000", + "gasUsed": "0x0" + } +} diff --git a/cmd/evm/testdata/5/readme.md b/cmd/evm/testdata/5/readme.md new file mode 100644 index 00000000..e2b608fa --- /dev/null +++ b/cmd/evm/testdata/5/readme.md @@ -0,0 +1 @@ +These files examplify a transition where there are no transcations, two ommers, at block `N-1` (delta 1) and `N-2` (delta 2). \ No newline at end of file diff --git a/cmd/evm/testdata/5/txs.json b/cmd/evm/testdata/5/txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/5/txs.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/7/alloc.json b/cmd/evm/testdata/7/alloc.json new file mode 100644 index 00000000..cef1a25f --- /dev/null +++ b/cmd/evm/testdata/7/alloc.json @@ -0,0 +1,12 @@ +{ + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x5ffd4878be161d74", + "code": "0x", + "nonce": "0xac", + "storage": {} + }, + "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192":{ + "balance": "0xfeedbead", + "nonce" : "0x00" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/7/env.json b/cmd/evm/testdata/7/env.json new file mode 100644 index 00000000..8fd9bc04 --- /dev/null +++ b/cmd/evm/testdata/7/env.json @@ -0,0 +1,7 @@ +{ + "currentCoinbase": "0xc94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000", + "currentGasLimit": "0x750a163df65e8a", + "currentNumber": "5", + "currentTimestamp": "1000" +} \ No newline at end of file diff --git a/cmd/evm/testdata/7/readme.md b/cmd/evm/testdata/7/readme.md new file mode 100644 index 00000000..c9826e0b --- /dev/null +++ b/cmd/evm/testdata/7/readme.md @@ -0,0 +1,7 @@ +This is a test for HomesteadToDao, checking if the +DAO-transition works + +Example: +``` +./statet8n --input.alloc=./testdata/7/alloc.json --input.txs=./testdata/7/txs.json --input.env=./testdata/7/env.json --output.alloc=stdout --state.fork=HomesteadToDaoAt5 +``` \ No newline at end of file diff --git a/cmd/evm/testdata/7/txs.json b/cmd/evm/testdata/7/txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/cmd/evm/testdata/7/txs.json @@ -0,0 +1 @@ +[] diff --git a/cmd/evm/testdata/8/alloc.json b/cmd/evm/testdata/8/alloc.json new file mode 100644 index 00000000..1d1b5f86 --- /dev/null +++ b/cmd/evm/testdata/8/alloc.json @@ -0,0 +1,11 @@ +{ + "0x000000000000000000000000000000000000aaaa": { + "balance": "0x03", + "code": "0x5854505854", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x100000", + "nonce": "0x00" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/8/env.json b/cmd/evm/testdata/8/env.json new file mode 100644 index 00000000..8b919347 --- /dev/null +++ b/cmd/evm/testdata/8/env.json @@ -0,0 +1,7 @@ +{ + "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty": "0x20000", + "currentGasLimit": "0x1000000000", + "currentNumber": "0x1000000", + "currentTimestamp": "0x04" +} \ No newline at end of file diff --git a/cmd/evm/testdata/8/readme.md b/cmd/evm/testdata/8/readme.md new file mode 100644 index 00000000..e021cd7e --- /dev/null +++ b/cmd/evm/testdata/8/readme.md @@ -0,0 +1,63 @@ +## EIP-2930 testing + +This test contains testcases for EIP-2930, which uses transactions with access lists. + +### Prestate + +The alloc portion contains one contract (`0x000000000000000000000000000000000000aaaa`), containing the +following code: `0x5854505854`: `PC ;SLOAD; POP; PC; SLOAD`. + +Essentialy, this contract does `SLOAD(0)` and `SLOAD(3)`. + +The alloc also contains some funds on `0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b`. + +## Transactions + +There are three transactions, each invokes the contract above. + +1. ACL-transaction, which contains some non-used slots +2. Regular transaction +3. ACL-transaction, which contains the slots `1` and `3` in `0x000000000000000000000000000000000000aaaa` + +## Execution + +Running it yields: +``` +dir=./testdata/8 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --trace && cat trace-* | grep SLOAD +{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x47c86","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":1,"op":84,"gas":"0x49cf6","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x494be","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x64","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x48456","gasCost":"0x64","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} + +``` + +Simlarly, we can provide the input transactions via `stdin` instead of as file: + +``` +dir=./testdata/8 \ + && cat $dir/txs.json | jq "{txs: .}" \ + | ./evm t8n --state.fork=Berlin \ + --input.alloc=$dir/alloc.json \ + --input.txs=stdin \ + --input.env=$dir/env.json \ + --trace \ + && cat trace-* | grep SLOAD + +{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x47c86","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":1,"op":84,"gas":"0x49cf6","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x494be","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":1,"op":84,"gas":"0x484be","gasCost":"0x64","memory":"0x","memSize":0,"stack":["0x0"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":4,"op":84,"gas":"0x48456","gasCost":"0x64","memory":"0x","memSize":0,"stack":["0x3"],"returnStack":[],"returnData":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +``` + +If we try to execute it on older rules: +``` +dir=./testdata/8 && ./evm t8n --state.fork=Istanbul --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json +INFO [01-21|23:21:51.265] rejected tx index=0 hash=d2818d..6ab3da error="tx type not supported" +INFO [01-21|23:21:51.265] rejected tx index=1 hash=26ea00..81c01b from=0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B error="nonce too high: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B, tx: 1 state: 0" +INFO [01-21|23:21:51.265] rejected tx index=2 hash=698d01..369cee error="tx type not supported" +``` +Number `1` and `3` are not applicable, and therefore number `2` has wrong nonce. \ No newline at end of file diff --git a/cmd/evm/testdata/8/txs.json b/cmd/evm/testdata/8/txs.json new file mode 100644 index 00000000..35142ba2 --- /dev/null +++ b/cmd/evm/testdata/8/txs.json @@ -0,0 +1,58 @@ +[ + { + "gas": "0x4ef00", + "gasPrice": "0x1", + "chainId": "0x1", + "input": "0x", + "nonce": "0x0", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x1", + "type" : "0x1", + "accessList": [ + {"address": "0x0000000000000000000000000000000000000000", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "v": "0x0", + "r": "0x0", + "s": "0x0", + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + }, + { + "gas": "0x4ef00", + "gasPrice": "0x1", + "input": "0x", + "nonce": "0x1", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x2", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + }, + { + "gas": "0x4ef00", + "gasPrice": "0x1", + "chainId": "0x1", + "input": "0x", + "nonce": "0x2", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x1", + "type" : "0x1", + "accessList": [ + {"address": "0x000000000000000000000000000000000000aaaa", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ] + } + ], + "v": "0x0", + "r": "0x0", + "s": "0x0", + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + } +] diff --git a/cmd/evm/testdata/9/alloc.json b/cmd/evm/testdata/9/alloc.json new file mode 100644 index 00000000..c14e38e8 --- /dev/null +++ b/cmd/evm/testdata/9/alloc.json @@ -0,0 +1,11 @@ +{ + "0x000000000000000000000000000000000000aaaa": { + "balance": "0x03", + "code": "0x58585454", + "nonce": "0x1" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0x100000000000000", + "nonce": "0x00" + } +} diff --git a/cmd/evm/testdata/9/env.json b/cmd/evm/testdata/9/env.json new file mode 100644 index 00000000..ec5164b9 --- /dev/null +++ b/cmd/evm/testdata/9/env.json @@ -0,0 +1,8 @@ +{ + "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty": "0x20000", + "currentGasTarget": "0x1000000000", + "currentBaseFee": "0x3B9ACA00", + "currentNumber": "0x1000000", + "currentTimestamp": "0x04" +} diff --git a/cmd/evm/testdata/9/readme.md b/cmd/evm/testdata/9/readme.md new file mode 100644 index 00000000..88f0f12a --- /dev/null +++ b/cmd/evm/testdata/9/readme.md @@ -0,0 +1,75 @@ +## EIP-1559 testing + +This test contains testcases for EIP-1559, which uses an new transaction type and has a new block parameter. + +### Prestate + +The alloc portion contains one contract (`0x000000000000000000000000000000000000aaaa`), containing the +following code: `0x58585454`: `PC; PC; SLOAD; SLOAD`. + +Essentialy, this contract does `SLOAD(0)` and `SLOAD(1)`. + +The alloc also contains some funds on `0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b`. + +## Transactions + +There are two transactions, each invokes the contract above. + +1. EIP-1559 ACL-transaction, which contains the `0x0` slot for `0xaaaa` +2. Legacy transaction + +## Execution + +Running it yields: +``` +$ dir=./testdata/9 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --trace && cat trace-* | grep SLOAD +{"pc":2,"op":84,"gas":"0x48c28","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0","0x1"],"returnStack":null,"returnD +ata":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":3,"op":84,"gas":"0x483f4","gasCost":"0x64","memory":"0x","memSize":0,"stack":["0x0","0x0"],"returnStack":null,"returnDa +ta":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":2,"op":84,"gas":"0x49cf4","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0","0x1"],"returnStack":null,"returnD +ata":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +{"pc":3,"op":84,"gas":"0x494c0","gasCost":"0x834","memory":"0x","memSize":0,"stack":["0x0","0x0"],"returnStack":null,"returnD +ata":"0x","depth":1,"refund":0,"opName":"SLOAD","error":""} +``` + +We can also get the post-alloc: +``` +$ dir=./testdata/9 && ./evm t8n --state.fork=London --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout +{ + "alloc": { + "0x000000000000000000000000000000000000aaaa": { + "code": "0x58585454", + "balance": "0x3", + "nonce": "0x1" + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "balance": "0xbfc02677a000" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xff104fcfea7800", + "nonce": "0x2" + } + } +} +``` + +If we try to execute it on older rules: +``` +dir=./testdata/9 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs.json --input.env=$dir/env.json --output.alloc=stdout +ERROR(10): Failed signing transactions: ERROR(10): Tx 0: failed to sign tx: transaction type not supported +``` + +It fails, due to the `evm t8n` cannot sign them in with the given signer. We can bypass that, however, +by feeding it presigned transactions, located in `txs_signed.json`. + +``` +dir=./testdata/9 && ./evm t8n --state.fork=Berlin --input.alloc=$dir/alloc.json --input.txs=$dir/txs_signed.json --input.env=$dir/env.json +INFO [05-07|12:28:42.072] rejected tx index=0 hash=b4821e..536819 error="transaction type not supported" +INFO [05-07|12:28:42.072] rejected tx index=1 hash=a9c6c6..fa4036 from=0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B error="nonce too high: address 0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B, tx: 1 state: 0" +INFO [05-07|12:28:42.073] Wrote file file=alloc.json +INFO [05-07|12:28:42.073] Wrote file file=result.json +``` + +Number `0` is not applicable, and therefore number `1` has wrong nonce, and both are rejected. + diff --git a/cmd/evm/testdata/9/txs.json b/cmd/evm/testdata/9/txs.json new file mode 100644 index 00000000..740abce0 --- /dev/null +++ b/cmd/evm/testdata/9/txs.json @@ -0,0 +1,37 @@ +[ + { + "gas": "0x4ef00", + "maxPriorityFeePerGas": "0x2", + "maxFeePerGas": "0x12A05F200", + "chainId": "0x1", + "input": "0x", + "nonce": "0x0", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x0", + "type" : "0x2", + "accessList": [ + {"address": "0x000000000000000000000000000000000000aaaa", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "v": "0x0", + "r": "0x0", + "s": "0x0", + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + }, + { + "gas": "0x4ef00", + "gasPrice": "0x12A05F200", + "chainId": "0x1", + "input": "0x", + "nonce": "0x1", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x0", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + } +] diff --git a/cmd/evm/transition-test.sh b/cmd/evm/transition-test.sh new file mode 100644 index 00000000..250238d1 --- /dev/null +++ b/cmd/evm/transition-test.sh @@ -0,0 +1,214 @@ +#!/bin/bash +ticks="\`\`\`" + +function showjson(){ + echo "\`$1\`:" + echo "${ticks}json" + cat $1 + echo "" + echo "$ticks" +} +function demo(){ + echo "$ticks" + echo "$1" + $1 + echo "" + echo "$ticks" + echo "" +} +function tick(){ + echo "$ticks" +} + +cat << EOF +## EVM state transition tool + +The \`evm t8n\` tool is a stateless state transition utility. It is a utility +which can + +1. Take a prestate, including + - Accounts, + - Block context information, + - Previous blockshashes (*optional) +2. Apply a set of transactions, +3. Apply a mining-reward (*optional), +4. And generate a post-state, including + - State root, transaction root, receipt root, + - Information about rejected transactions, + - Optionally: a full or partial post-state dump + +## Specification + +The idea is to specify the behaviour of this binary very _strict_, so that other +node implementors can build replicas based on their own state-machines, and the +state generators can swap between a \`geth\`-based implementation and a \`parityvm\`-based +implementation. + +### Command line params + +Command line params that has to be supported are +$(tick) + +` ./evm t8n -h | grep "trace\|output\|state\."` + +$(tick) + +### Error codes and output + +All logging should happen against the \`stderr\`. +There are a few (not many) errors that can occur, those are defined below. + +#### EVM-based errors (\`2\` to \`9\`) + +- Other EVM error. Exit code \`2\` +- Failed configuration: when a non-supported or invalid fork was specified. Exit code \`3\`. +- Block history is not supplied, but needed for a \`BLOCKHASH\` operation. If \`BLOCKHASH\` + is invoked targeting a block which history has not been provided for, the program will + exit with code \`4\`. + +#### IO errors (\`10\`-\`20\`) + +- Invalid input json: the supplied data could not be marshalled. + The program will exit with code \`10\` +- IO problems: failure to load or save files, the program will exit with code \`11\` + +EOF + +# This should exit with 3 +./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --state.fork=Frontier+1346 2>/dev/null +if [ $? != 3 ]; then + echo "Failed, exitcode should be 3" +fi +cat << EOF +## Examples +### Basic usage + +Invoking it with the provided example files +EOF +cmd="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json" +tick;echo "$cmd"; tick +$cmd 2>/dev/null +echo "Two resulting files:" +echo "" +showjson alloc.json +showjson result.json +echo "" + +echo "We can make them spit out the data to e.g. \`stdout\` like this:" +cmd="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.result=stdout --output.alloc=stdout" +tick;echo "$cmd"; tick +output=`$cmd 2>/dev/null` +echo "Output:" +echo "${ticks}json" +echo "$output" +echo "$ticks" + +cat << EOF + +## About Ommers + +Mining rewards and ommer rewards might need to be added. This is how those are applied: + +- \`block_reward\` is the block mining reward for the miner (\`0xaa\`), of a block at height \`N\`. +- For each ommer (mined by \`0xbb\`), with blocknumber \`N-delta\` + - (where \`delta\` is the difference between the current block and the ommer) + - The account \`0xbb\` (ommer miner) is awarded \`(8-delta)/ 8 * block_reward\` + - The account \`0xaa\` (block miner) is awarded \`block_reward / 32\` + +To make \`state_t8n\` apply these, the following inputs are required: + +- \`state.reward\` + - For ethash, it is \`5000000000000000000\` \`wei\`, + - If this is not defined, mining rewards are not applied, + - A value of \`0\` is valid, and causes accounts to be 'touched'. +- For each ommer, the tool needs to be given an \`address\` and a \`delta\`. This + is done via the \`env\`. + +Note: the tool does not verify that e.g. the normal uncle rules apply, +and allows e.g two uncles at the same height, or the uncle-distance. This means that +the tool allows for negative uncle reward (distance > 8) + +Example: +EOF + +showjson ./testdata/5/env.json + +echo "When applying this, using a reward of \`0x08\`" +cmd="./evm t8n --input.alloc=./testdata/5/alloc.json -input.txs=./testdata/5/txs.json --input.env=./testdata/5/env.json --output.alloc=stdout --state.reward=0x80" +output=`$cmd 2>/dev/null` +echo "Output:" +echo "${ticks}json" +echo "$output" +echo "$ticks" + +echo "### Future EIPS" +echo "" +echo "It is also possible to experiment with future eips that are not yet defined in a hard fork." +echo "Example, putting EIP-1344 into Frontier: " +cmd="./evm t8n --state.fork=Frontier+1344 --input.pre=./testdata/1/pre.json --input.txs=./testdata/1/txs.json --input.env=/testdata/1/env.json" +tick;echo "$cmd"; tick +echo "" + +echo "### Block history" +echo "" +echo "The \`BLOCKHASH\` opcode requires blockhashes to be provided by the caller, inside the \`env\`." +echo "If a required blockhash is not provided, the exit code should be \`4\`:" +echo "Example where blockhashes are provided: " +demo "./evm --verbosity=1 t8n --input.alloc=./testdata/3/alloc.json --input.txs=./testdata/3/txs.json --input.env=./testdata/3/env.json --trace" +cmd="cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2" +tick && echo $cmd && tick +echo "$ticks" +cat trace-0-0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81.jsonl | grep BLOCKHASH -C2 +echo "$ticks" +echo "" + +echo "In this example, the caller has not provided the required blockhash:" +cmd="./evm t8n --input.alloc=./testdata/4/alloc.json --input.txs=./testdata/4/txs.json --input.env=./testdata/4/env.json --trace" +tick && echo $cmd && $cmd +errc=$? +tick +echo "Error code: $errc" +echo "" + +echo "### Chaining" +echo "" +echo "Another thing that can be done, is to chain invocations:" +cmd1="./evm t8n --input.alloc=./testdata/1/alloc.json --input.txs=./testdata/1/txs.json --input.env=./testdata/1/env.json --output.alloc=stdout" +cmd2="./evm t8n --input.alloc=stdin --input.env=./testdata/1/env.json --input.txs=./testdata/1/txs.json" +echo "$ticks" +echo "$cmd1 | $cmd2" +output=$($cmd1 | $cmd2 ) +echo $output +echo "$ticks" +echo "What happened here, is that we first applied two identical transactions, so the second one was rejected. " +echo "Then, taking the poststate alloc as the input for the next state, we tried again to include" +echo "the same two transactions: this time, both failed due to too low nonce." +echo "" +echo "In order to meaningfully chain invocations, one would need to provide meaningful new \`env\`, otherwise the" +echo "actual blocknumber (exposed to the EVM) would not increase." +echo "" + +echo "### Transactions in RLP form" +echo "" +echo "It is possible to provide already-signed transactions as input to, using an \`input.txs\` which ends with the \`rlp\` suffix." +echo "The input format for RLP-form transactions is _identical_ to the _output_ format for block bodies. Therefore, it's fully possible" +echo "to use the evm to go from \`json\` input to \`rlp\` input." +echo "" +echo "The following command takes **json** the transactions in \`./testdata/13/txs.json\` and signs them. After execution, they are output to \`signed_txs.rlp\`.:" +demo "./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./testdata/13/txs.json --input.env=./testdata/13/env.json --output.result=alloc_jsontx.json --output.body=signed_txs.rlp" +echo "The \`output.body\` is the rlp-list of transactions, encoded in hex and placed in a string a'la \`json\` encoding rules:" +demo "cat signed_txs.rlp" +echo "We can use \`rlpdump\` to check what the contents are: " +echo "$ticks" +echo "rlpdump -hex \$(cat signed_txs.rlp | jq -r )" +rlpdump -hex $(cat signed_txs.rlp | jq -r ) +echo "$ticks" +echo "Now, we can now use those (or any other already signed transactions), as input, like so: " +demo "./evm t8n --state.fork=London --input.alloc=./testdata/13/alloc.json --input.txs=./signed_txs.rlp --input.env=./testdata/13/env.json --output.result=alloc_rlptx.json" + +echo "You might have noticed that the results from these two invocations were stored in two separate files. " +echo "And we can now finally check that they match." +echo "$ticks" +echo "cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot" +cat alloc_jsontx.json | jq .stateRoot && cat alloc_rlptx.json | jq .stateRoot +echo "$ticks" diff --git a/cmd/faucet/README.md b/cmd/faucet/README.md new file mode 100644 index 00000000..c31676b0 --- /dev/null +++ b/cmd/faucet/README.md @@ -0,0 +1,53 @@ +# Faucet + +The `faucet` is a simplistic web application with the goal of distributing small amounts of Ether in private and test networks. + +Users need to post their Ethereum addresses to fund in a Twitter status update or public Facebook post and share the link to the faucet. The faucet will in turn deduplicate user requests and send the Ether. After a funding round, the faucet prevents the same user requesting again for a pre-configured amount of time, proportional to the amount of Ether requested. + +## Operation + +The `faucet` is a single binary app (everything included) with all configurations set via command line flags and a few files. + +First thing's first, the `faucet` needs to connect to an Ethereum network, for which it needs the necessary genesis and network infos. Each of the following flags must be set: + +- `-genesis` is a path to a file containing the network `genesis.json`. or using: + - `-goerli` with the faucet with Görli network config + - `-rinkeby` with the faucet with Rinkeby network config + - `-sepolia` with the faucet with Sepolia network config +- `-network` is the devp2p network id used during connection +- `-bootnodes` is a list of `enode://` ids to join the network through + +The `faucet` will use the `les` protocol to join the configured Ethereum network and will store its data in `$HOME/.faucet` (currently not configurable). + +## Funding + +To be able to distribute funds, the `faucet` needs access to an already funded Ethereum account. This can be configured via: + +- `-account.json` is a path to the Ethereum account's JSON key file +- `-account.pass` is a path to a text file with the decryption passphrase + +The faucet is able to distribute various amounts of Ether in exchange for various timeouts. These can be configured via: + +- `-faucet.amount` is the number of Ethers to send by default +- `-faucet.minutes` is the time to wait before allowing a rerequest +- `-faucet.tiers` is the funding tiers to support (x3 time, x2.5 funds) + +## Sybil protection + +To prevent the same user from exhausting funds in a loop, the `faucet` ties requests to social networks and captcha resolvers. + +Captcha protection uses Google's invisible ReCaptcha, thus the `faucet` needs to run on a live domain. The domain needs to be registered in Google's systems to retrieve the captcha API token and secrets. After doing so, captcha protection may be enabled via: + +- `-captcha.token` is the API token for ReCaptcha +- `-captcha.secret` is the API secret for ReCaptcha + +Sybil protection via Twitter requires an API key as of 15th December, 2020. To obtain it, a Twitter user must be upgraded to developer status and a new Twitter App deployed with it. The app's `Bearer` token is required by the faucet to retrieve tweet data: + +- `-twitter.token` is the Bearer token for `v2` API access +- `-twitter.token.v1` is the Bearer token for `v1` API access + +Sybil protection via Facebook uses the website to directly download post data thus does not currently require an API configuration. + +## Miscellaneous + +Beside the above - mostly essential - CLI flags, there are a number that can be used to fine tune the `faucet`'s operation. Please see `faucet --help` for a full list. \ No newline at end of file diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 17be6e6d..dfb7d326 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -14,21 +14,19 @@ // You should have received a copy of the GNU General Public License // along with go-ethereum. If not, see . -// faucet is a Ether faucet backed by a light client. +// faucet is an Ether faucet backed by a light client. package main -//go:generate go-bindata -nometadata -o website.go faucet.html -//go:generate gofmt -w -s website.go - import ( "bytes" "context" + _ "embed" "encoding/json" "errors" "flag" "fmt" "html/template" - "io/ioutil" + "io" "math" "math/big" "net/http" @@ -41,24 +39,24 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/ethclient" - "github.com/cryptoecc/ETH-ECC/ethstats" - "github.com/cryptoecc/ETH-ECC/les" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/params" - "golang.org/x/net/websocket" + "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/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/ethstats" + "github.com/ethereum/go-ethereum/les" + "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/nat" + "github.com/ethereum/go-ethereum/params" + "github.com/gorilla/websocket" ) var ( @@ -82,6 +80,13 @@ var ( noauthFlag = flag.Bool("noauth", false, "Enables funding requests without authentication") logFlag = flag.Int("loglevel", 3, "Log level to use for Ethereum and the faucet") + + twitterTokenFlag = flag.String("twitter.token", "", "Bearer token to authenticate with the v2 Twitter API") + twitterTokenV1Flag = flag.String("twitter.token.v1", "", "Bearer token to authenticate with the v1.1 Twitter API") + + goerliFlag = flag.Bool("goerli", false, "Initializes the faucet with Görli network config") + rinkebyFlag = flag.Bool("rinkeby", false, "Initializes the faucet with Rinkeby network config") + sepoliaFlag = flag.Bool("sepolia", false, "Initializes the faucet with Sepolia network config") ) var ( @@ -93,6 +98,9 @@ var ( gitDate = "" // Git commit date YYYYMMDD of the release (set via linker flags) ) +//go:embed faucet.html +var websiteTmpl string + func main() { // Parse the flags and set up the logger to print everything requested flag.Parse() @@ -124,13 +132,8 @@ func main() { periods[i] = strings.TrimSuffix(periods[i], "s") } } - // Load up and render the faucet website - tmpl, err := Asset("faucet.html") - if err != nil { - log.Crit("Failed to load the faucet template", "err", err) - } website := new(bytes.Buffer) - err = template.Must(template.New("").Parse(string(tmpl))).Execute(website, map[string]interface{}{ + err := template.Must(template.New("").Parse(websiteTmpl)).Execute(website, map[string]interface{}{ "Network": *netnameFlag, "Amounts": amounts, "Periods": periods, @@ -141,40 +144,37 @@ func main() { log.Crit("Failed to render the faucet template", "err", err) } // Load and parse the genesis block requested by the user - blob, err := ioutil.ReadFile(*genesisFlag) + genesis, err := getGenesis(*genesisFlag, *goerliFlag, *rinkebyFlag, *sepoliaFlag) if err != nil { - log.Crit("Failed to read genesis block contents", "genesis", *genesisFlag, "err", err) - } - genesis := new(core.Genesis) - if err = json.Unmarshal(blob, genesis); err != nil { - log.Crit("Failed to parse genesis block json", "err", err) + log.Crit("Failed to parse genesis config", "err", err) } // Convert the bootnodes to internal enode representations - var enodes []*discv5.Node + var enodes []*enode.Node for _, boot := range strings.Split(*bootFlag, ",") { - if url, err := discv5.ParseNode(boot); err == nil { + if url, err := enode.Parse(enode.ValidSchemes, boot); err == nil { enodes = append(enodes, url) } else { log.Error("Failed to parse bootnode URL", "url", boot, "err", err) } } // Load up the account key and decrypt its password - if blob, err = ioutil.ReadFile(*accPassFlag); err != nil { + blob, err := os.ReadFile(*accPassFlag) + if err != nil { log.Crit("Failed to read account password contents", "file", *accPassFlag, "err", err) } - // Delete trailing newline in password pass := strings.TrimSuffix(string(blob), "\n") ks := keystore.NewKeyStore(filepath.Join(os.Getenv("HOME"), ".faucet", "keys"), keystore.StandardScryptN, keystore.StandardScryptP) - if blob, err = ioutil.ReadFile(*accJSONFlag); err != nil { + if blob, err = os.ReadFile(*accJSONFlag); err != nil { log.Crit("Failed to read account key contents", "file", *accJSONFlag, "err", err) } acc, err := ks.Import(blob, pass, pass) - if err != nil { + if err != nil && err != keystore.ErrAccountAlreadyExists { log.Crit("Failed to import faucet signer account", "err", err) } - ks.Unlock(acc, pass) - + if err := ks.Unlock(acc, pass); err != nil { + log.Crit("Failed to unlock faucet signer account", "err", err) + } // Assemble and start the faucet light service faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes()) if err != nil { @@ -209,7 +209,7 @@ type faucet struct { nonce uint64 // Current pending nonce of the faucet price *big.Int // Current gas price to issue funds with - conns []*websocket.Conn // Currently live websocket connections + conns []*wsConn // Currently live websocket connections timeouts map[string]time.Time // History of users and their funding timeouts reqs []*request // Currently pending funding requests update chan struct{} // Channel to signal request updates @@ -217,7 +217,14 @@ type faucet struct { lock sync.RWMutex // Lock protecting the faucet's internals } -func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) { +// wsConn wraps a websocket connection with a write mutex as the underlying +// websocket library does not synchronize access to the stream. +type wsConn struct { + conn *websocket.Conn + wlock sync.Mutex +} + +func newFaucet(genesis *core.Genesis, port int, enodes []*enode.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) { // Assemble the raw devp2p protocol stack stack, err := node.New(&node.Config{ Name: "geth", @@ -235,23 +242,22 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u if err != nil { return nil, err } + // Assemble the Ethereum light client protocol - if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - cfg := eth.DefaultConfig - cfg.SyncMode = downloader.LightSync - cfg.NetworkId = network - cfg.Genesis = genesis - return les.New(ctx, &cfg) - }); err != nil { - return nil, err + cfg := ethconfig.Defaults + cfg.SyncMode = downloader.LightSync + cfg.NetworkId = network + cfg.Genesis = genesis + utils.SetDNSDiscoveryDefaults(&cfg, genesis.ToBlock().Hash()) + + lesBackend, err := les.New(stack, &cfg) + if err != nil { + return nil, fmt.Errorf("Failed to register the Ethereum service: %w", err) } + // Assemble the ethstats monitoring and reporting service' if stats != "" { - if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - var serv *les.LightEthereum - ctx.Service(&serv) - return ethstats.New(stats, nil, serv) - }); err != nil { + if err := ethstats.New(stack, lesBackend.ApiBackend, lesBackend.Engine(), stats); err != nil { return nil, err } } @@ -268,7 +274,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u // Attach to the client and retrieve and interesting metadatas api, err := stack.Attach() if err != nil { - stack.Stop() + stack.Close() return nil, err } client := ethclient.NewClient(api) @@ -296,8 +302,7 @@ func (f *faucet) listenAndServe(port int) error { go f.loop() http.HandleFunc("/", f.webHandler) - http.Handle("/api", websocket.Handler(f.apiHandler)) - + http.HandleFunc("/api", f.apiHandler) return http.ListenAndServe(fmt.Sprintf(":%d", port), nil) } @@ -308,18 +313,25 @@ func (f *faucet) webHandler(w http.ResponseWriter, r *http.Request) { } // apiHandler handles requests for Ether grants and transaction statuses. -func (f *faucet) apiHandler(conn *websocket.Conn) { +func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { + upgrader := websocket.Upgrader{} + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + return + } + // Start tracking the connection and drop at the end defer conn.Close() f.lock.Lock() - f.conns = append(f.conns, conn) + wsconn := &wsConn{conn: conn} + f.conns = append(f.conns, wsconn) f.lock.Unlock() defer func() { f.lock.Lock() for i, c := range f.conns { - if c == conn { + if c.conn == conn { f.conns = append(f.conns[:i], f.conns[i+1:]...) break } @@ -331,7 +343,6 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { head *types.Header balance *big.Int nonce uint64 - err error ) for head == nil || balance == nil { // Retrieve the current stats cached by the faucet @@ -347,7 +358,8 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { if head == nil || balance == nil { // Report the faucet offline until initial stats are ready - if err = sendError(conn, errors.New("Faucet offline")); err != nil { + //lint:ignore ST1005 This error is to be displayed in the browser + if err = sendError(wsconn, errors.New("Faucet offline")); err != nil { log.Warn("Failed to send faucet error to client", "err", err) return } @@ -355,16 +367,19 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { } } // Send over the initial stats and the latest header - if err = send(conn, map[string]interface{}{ + f.lock.RLock() + reqs := f.reqs + f.lock.RUnlock() + if err = send(wsconn, map[string]interface{}{ "funds": new(big.Int).Div(balance, ether), "funded": nonce, "peers": f.stack.Server().PeerCount(), - "requests": f.reqs, + "requests": reqs, }, 3*time.Second); err != nil { log.Warn("Failed to send initial stats to client", "err", err) return } - if err = send(conn, head, 3*time.Second); err != nil { + if err = send(wsconn, head, 3*time.Second); err != nil { log.Warn("Failed to send initial header to client", "err", err) return } @@ -376,19 +391,19 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { Tier uint `json:"tier"` Captcha string `json:"captcha"` } - if err = websocket.JSON.Receive(conn, &msg); err != nil { + if err = conn.ReadJSON(&msg); err != nil { return } - if !*noauthFlag && !strings.HasPrefix(msg.URL, "https://gist.github.com/") && !strings.HasPrefix(msg.URL, "https://twitter.com/") && - !strings.HasPrefix(msg.URL, "https://plus.google.com/") && !strings.HasPrefix(msg.URL, "https://www.facebook.com/") { - if err = sendError(conn, errors.New("URL doesn't link to supported services")); err != nil { + if !*noauthFlag && !strings.HasPrefix(msg.URL, "https://twitter.com/") && !strings.HasPrefix(msg.URL, "https://www.facebook.com/") { + if err = sendError(wsconn, errors.New("URL doesn't link to supported services")); err != nil { log.Warn("Failed to send URL error to client", "err", err) return } continue } if msg.Tier >= uint(*tiersFlag) { - if err = sendError(conn, errors.New("Invalid funding tier requested")); err != nil { + //lint:ignore ST1005 This error is to be displayed in the browser + if err = sendError(wsconn, errors.New("Invalid funding tier requested")); err != nil { log.Warn("Failed to send tier error to client", "err", err) return } @@ -404,7 +419,7 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { res, err := http.PostForm("https://www.google.com/recaptcha/api/siteverify", form) if err != nil { - if err = sendError(conn, err); err != nil { + if err = sendError(wsconn, err); err != nil { log.Warn("Failed to send captcha post error to client", "err", err) return } @@ -417,7 +432,7 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { err = json.NewDecoder(res.Body).Decode(&result) res.Body.Close() if err != nil { - if err = sendError(conn, err); err != nil { + if err = sendError(wsconn, err); err != nil { log.Warn("Failed to send captcha decode error to client", "err", err) return } @@ -425,7 +440,8 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { } if !result.Success { log.Warn("Captcha verification failed", "err", string(result.Errors)) - if err = sendError(conn, errors.New("Beep-bop, you're a robot!")); err != nil { + //lint:ignore ST1005 it's funny and the robot won't mind + if err = sendError(wsconn, errors.New("Beep-bop, you're a robot!")); err != nil { log.Warn("Failed to send captcha failure to client", "err", err) return } @@ -434,34 +450,26 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { } // Retrieve the Ethereum address to fund, the requesting user and a profile picture var ( + id string username string avatar string address common.Address ) switch { - case strings.HasPrefix(msg.URL, "https://gist.github.com/"): - if err = sendError(conn, errors.New("GitHub authentication discontinued at the official request of GitHub")); err != nil { - log.Warn("Failed to send GitHub deprecation to client", "err", err) - 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) + id, username, avatar, address, err = authTwitter(msg.URL, *twitterTokenV1Flag, *twitterTokenFlag) case strings.HasPrefix(msg.URL, "https://www.facebook.com/"): username, avatar, address, err = authFacebook(msg.URL) + id = username case *noauthFlag: username, avatar, address, err = authNoAuth(msg.URL) + id = username default: - err = errors.New("Something funky happened, please open an issue at https://github.com/cryptoecc/ETH-ECC/issues") + //lint:ignore ST1005 This error is to be displayed in the browser + err = errors.New("Something funky happened, please open an issue at https://github.com/ethereum/go-ethereum/issues") } if err != nil { - if err = sendError(conn, err); err != nil { + if err = sendError(wsconn, err); err != nil { log.Warn("Failed to send prefix error to client", "err", err) return } @@ -475,7 +483,7 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { fund bool timeout time.Time ) - if timeout = f.timeouts[username]; time.Now().After(timeout) { + if timeout = f.timeouts[id]; time.Now().After(timeout) { // User wasn't funded recently, create the funding transaction amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) @@ -485,7 +493,7 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { signed, err := f.keystore.SignTx(f.account, tx, f.config.ChainID) if err != nil { f.lock.Unlock() - if err = sendError(conn, err); err != nil { + if err = sendError(wsconn, err); err != nil { log.Warn("Failed to send transaction creation error to client", "err", err) return } @@ -494,7 +502,7 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { // Submit the transaction and mark as funded if successful if err := f.client.SendTransaction(context.Background(), signed); err != nil { f.lock.Unlock() - if err = sendError(conn, err); err != nil { + if err = sendError(wsconn, err); err != nil { log.Warn("Failed to send transaction transmission error to client", "err", err) return } @@ -509,20 +517,20 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { 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) + f.timeouts[id] = time.Now().Add(timeout - grace) fund = true } f.lock.Unlock() // Send an error if too frequent funding, othewise a success if !fund { - if err = sendError(conn, fmt.Errorf("%s left until next allowance", common.PrettyDuration(timeout.Sub(time.Now())))); err != nil { // nolint: gosimple + if err = sendError(wsconn, fmt.Errorf("%s left until next allowance", common.PrettyDuration(time.Until(timeout)))); err != nil { // nolint: gosimple log.Warn("Failed to send funding error to client", "err", err) return } continue } - if err = sendSuccess(conn, fmt.Sprintf("Funding request accepted for %s into %s", username, address.Hex())); err != nil { + if err = sendSuccess(wsconn, fmt.Sprintf("Funding request accepted for %s into %s", username, address.Hex())); err != nil { log.Warn("Failed to send funding success to client", "err", err) return } @@ -615,12 +623,12 @@ func (f *faucet) loop() { "requests": f.reqs, }, time.Second); err != nil { log.Warn("Failed to send stats to client", "err", err) - conn.Close() + conn.conn.Close() continue } if err := send(conn, head, time.Second); err != nil { log.Warn("Failed to send header to client", "err", err) - conn.Close() + conn.conn.Close() } } f.lock.RUnlock() @@ -642,7 +650,7 @@ func (f *faucet) loop() { for _, conn := range f.conns { if err := send(conn, map[string]interface{}{"requests": f.reqs}, time.Second); err != nil { log.Warn("Failed to send requests to client", "err", err) - conn.Close() + conn.conn.Close() } } f.lock.RUnlock() @@ -652,71 +660,181 @@ func (f *faucet) loop() { // sends transmits a data packet to the remote end of the websocket, but also // setting a write deadline to prevent waiting forever on the node. -func send(conn *websocket.Conn, value interface{}, timeout time.Duration) error { +func send(conn *wsConn, value interface{}, timeout time.Duration) error { if timeout == 0 { timeout = 60 * time.Second } - conn.SetWriteDeadline(time.Now().Add(timeout)) - return websocket.JSON.Send(conn, value) + conn.wlock.Lock() + defer conn.wlock.Unlock() + conn.conn.SetWriteDeadline(time.Now().Add(timeout)) + return conn.conn.WriteJSON(value) } // sendError transmits an error to the remote end of the websocket, also setting // the write deadline to 1 second to prevent waiting forever. -func sendError(conn *websocket.Conn, err error) error { +func sendError(conn *wsConn, err error) error { return send(conn, map[string]string{"error": err.Error()}, time.Second) } // sendSuccess transmits a success message to the remote end of the websocket, also // setting the write deadline to 1 second to prevent waiting forever. -func sendSuccess(conn *websocket.Conn, msg string) error { +func sendSuccess(conn *wsConn, msg string) error { return send(conn, map[string]string{"success": msg}, time.Second) } // authTwitter tries to authenticate a faucet request using Twitter posts, returning -// the username, avatar URL and Ethereum address to fund on success. -func authTwitter(url string) (string, string, common.Address, error) { +// the uniqueness identifier (user id/username), username, avatar URL and Ethereum address to fund on success. +func authTwitter(url string, tokenV1, tokenV2 string) (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] != "status" { - return "", "", common.Address{}, errors.New("Invalid Twitter status URL") - } - // Twitter'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. + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", "", common.Address{}, errors.New("Invalid Twitter status URL") + } + // Strip any query parameters from the tweet id and ensure it's numeric + tweetID := strings.Split(parts[len(parts)-1], "?")[0] + if !regexp.MustCompile("^[0-9]+$").MatchString(tweetID) { + return "", "", "", common.Address{}, errors.New("Invalid Tweet URL") + } + // Twitter's API isn't really friendly with direct links. + // It is restricted to 300 queries / 15 minute with an app api key. + // Anything more will require read only authorization from the users and that we want to avoid. + + // If Twitter bearer token is provided, use the API, selecting the version + // the user would prefer (currently there's a limit of 1 v2 app / developer + // but unlimited v1.1 apps). + switch { + case tokenV1 != "": + return authTwitterWithTokenV1(tweetID, tokenV1) + case tokenV2 != "": + return authTwitterWithTokenV2(tweetID, tokenV2) + } + // Twitter API token isn't provided so we just load the public posts + // and scrape it for the Ethereum address and profile URL. We need to load + // the mobile page though since the main page loads tweet contents via JS. + url = strings.Replace(url, "https://twitter.com/", "https://mobile.twitter.com/", 1) + res, err := http.Get(url) if err != nil { - return "", "", common.Address{}, err + return "", "", "", common.Address{}, err } defer res.Body.Close() // Resolve the username from the final redirect, no intermediate junk parts = strings.Split(res.Request.URL.String(), "/") if len(parts) < 4 || parts[len(parts)-2] != "status" { - return "", "", common.Address{}, errors.New("Invalid Twitter status URL") + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", "", common.Address{}, errors.New("Invalid Twitter status URL") } username := parts[len(parts)-3] - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) if err != nil { - return "", "", common.Address{}, err + 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") + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") } var avatar string - if parts = regexp.MustCompile("src=\"([^\"]+twimg.com/profile_images[^\"]+)\"").FindStringSubmatch(string(body)); len(parts) == 2 { + if parts = regexp.MustCompile(`src="([^"]+twimg\.com/profile_images[^"]+)"`).FindStringSubmatch(string(body)); len(parts) == 2 { avatar = parts[1] } - return username + "@twitter", avatar, address, nil + return username + "@twitter", username, avatar, address, nil +} + +// authTwitterWithTokenV1 tries to authenticate a faucet request using Twitter's v1 +// API, returning the user id, username, avatar URL and Ethereum address to fund on +// success. +func authTwitterWithTokenV1(tweetID string, token string) (string, string, string, common.Address, error) { + // Query the tweet details from Twitter + url := fmt.Sprintf("https://api.twitter.com/1.1/statuses/show.json?id=%s", tweetID) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return "", "", "", common.Address{}, err + } + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + res, err := http.DefaultClient.Do(req) + if err != nil { + return "", "", "", common.Address{}, err + } + defer res.Body.Close() + + var result struct { + Text string `json:"text"` + User struct { + ID string `json:"id_str"` + Username string `json:"screen_name"` + Avatar string `json:"profile_image_url"` + } `json:"user"` + } + err = json.NewDecoder(res.Body).Decode(&result) + if err != nil { + return "", "", "", common.Address{}, err + } + address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(result.Text)) + if address == (common.Address{}) { + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") + } + return result.User.ID + "@twitter", result.User.Username, result.User.Avatar, address, nil +} + +// authTwitterWithTokenV2 tries to authenticate a faucet request using Twitter's v2 +// API, returning the user id, username, avatar URL and Ethereum address to fund on +// success. +func authTwitterWithTokenV2(tweetID string, token string) (string, string, string, common.Address, error) { + // Query the tweet details from Twitter + url := fmt.Sprintf("https://api.twitter.com/2/tweets/%s?expansions=author_id&user.fields=profile_image_url", tweetID) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return "", "", "", common.Address{}, err + } + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + res, err := http.DefaultClient.Do(req) + if err != nil { + return "", "", "", common.Address{}, err + } + defer res.Body.Close() + + var result struct { + Data struct { + AuthorID string `json:"author_id"` + Text string `json:"text"` + } `json:"data"` + Includes struct { + Users []struct { + ID string `json:"id"` + Username string `json:"username"` + Avatar string `json:"profile_image_url"` + } `json:"users"` + } `json:"includes"` + } + + err = json.NewDecoder(res.Body).Decode(&result) + if err != nil { + return "", "", "", common.Address{}, err + } + + address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(result.Data.Text)) + if address == (common.Address{}) { + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") + } + return result.Data.AuthorID + "@twitter", result.Includes.Users[0].Username, result.Includes.Users[0].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) { // Ensure the user specified a meaningful URL, no fancy nonsense - parts := strings.Split(url, "/") + parts := strings.Split(strings.Split(url, "?")[0], "/") + if parts[len(parts)-1] == "" { + parts = parts[0 : len(parts)-1] + } if len(parts) < 4 || parts[len(parts)-2] != "posts" { + //lint:ignore ST1005 This error is to be displayed in the browser return "", "", common.Address{}, errors.New("Invalid Facebook post URL") } username := parts[len(parts)-3] @@ -724,22 +842,29 @@ func authFacebook(url string) (string, string, common.Address, error) { // Facebook's Graph 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) + // + // Facebook recently changed their desktop webpage to use AJAX for loading post + // content, so switch over to the mobile site for now. Will probably end up having + // to use the API eventually. + crawl := strings.Replace(url, "www.facebook.com", "m.facebook.com", 1) + + res, err := http.Get(crawl) if err != nil { return "", "", common.Address{}, err } defer res.Body.Close() - body, err := ioutil.ReadAll(res.Body) + body, err := io.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") + //lint:ignore ST1005 This error is to be displayed in the browser + return "", "", common.Address{}, errors.New("No Ethereum address found to fund. Please check the post URL and verify that it can be viewed publicly.") } var avatar string - if parts = regexp.MustCompile("src=\"([^\"]+fbcdn.net[^\"]+)\"").FindStringSubmatch(string(body)); len(parts) == 2 { + if parts = regexp.MustCompile(`src="([^"]+fbcdn\.net[^"]+)"`).FindStringSubmatch(string(body)); len(parts) == 2 { avatar = parts[1] } return username + "@facebook", avatar, address, nil @@ -751,7 +876,26 @@ func authFacebook(url string) (string, string, common.Address, error) { func authNoAuth(url string) (string, string, common.Address, error) { address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(url)) if address == (common.Address{}) { + //lint:ignore ST1005 This error is to be displayed in the browser return "", "", common.Address{}, errors.New("No Ethereum address found to fund") } return address.Hex() + "@noauth", "", address, nil } + +// getGenesis returns a genesis based on input args +func getGenesis(genesisFlag string, goerliFlag bool, rinkebyFlag bool, sepoliaFlag bool) (*core.Genesis, error) { + switch { + case genesisFlag != "": + var genesis core.Genesis + err := common.LoadJSON(genesisFlag, &genesis) + return &genesis, err + case goerliFlag: + return core.DefaultGoerliGenesisBlock(), nil + case rinkebyFlag: + return core.DefaultRinkebyGenesisBlock(), nil + case sepoliaFlag: + return core.DefaultSepoliaGenesisBlock(), nil + default: + return nil, fmt.Errorf("no genesis flag provided") + } +} diff --git a/cmd/faucet/faucet.html b/cmd/faucet/faucet.html index 314b19e1..dad5ad84 100644 --- a/cmd/faucet/faucet.html +++ b/cmd/faucet/faucet.html @@ -49,7 +49,7 @@

{{
- +
- @@ -357,7 +302,7 @@ try! node?.start();
./gradlew runCustom -DgenesisFile={{.HarmonyGenesis}} -Dpeer.networkId={{.NetworkID}} -Ddatabase.dir=$HOME/.harmony/{{.Network}} {{.HarmonyBootnodes}} 


-

You can find Ethereum Harmony at https://github.com/ether-camp/Onther-Tech-harmony/.

+

You can find Ethereum Harmony at https://github.com/ether-camp/ethereum-harmony/.

@@ -401,7 +346,7 @@ try! node?.start();
pyethapp -c eth.genesis="$(cat {{.PythonGenesis}})" -c eth.network_id={{.NetworkID}} -c data_dir=$HOME/.config/pyethapp/{{.Network}} -c discovery.bootstrap_nodes="[{{.PythonBootnodes}}]" -c eth.block.HOMESTEAD_FORK_BLKNUM={{.Homestead}} -c eth.block.ANTI_DOS_FORK_BLKNUM={{.Tangerine}} -c eth.block.SPURIOUS_DRAGON_FORK_BLKNUM={{.Spurious}} -c eth.block.METROPOLIS_FORK_BLKNUM={{.Byzantium}} -c eth.block.DAO_FORK_BLKNUM=18446744073709551615 run --console


-

You can find pyethapp at https://github.com/Onther-Tech/pyethapp/.

+

You can find pyethapp at https://github.com/ethereum/pyethapp/.

@@ -416,10 +361,10 @@ try! node?.start();
-

Puppeth is a tool to aid you in creating a new Ethereum network down to the genesis block, bootnodes, signers, ethstats server, crypto faucet, wallet browsers, block explorer, dashboard and more; without the hassle that it would normally entail to manually configure all these services one by one.

+

Puppeth is a tool to aid you in creating a new Ethereum network down to the genesis block, bootnodes, signers, ethstats server, crypto faucet, block explorer, dashboard and more; without the hassle that it would normally entail to manually configure all these services one by one.

Puppeth uses ssh to dial in to remote servers, and builds its network components out of docker containers using docker-compose. The user is guided through the process via a command line wizard that does the heavy lifting and topology configuration automatically behind the scenes.


-

Puppeth is distributed as part of the Geth & Tools bundles, but can also be installed separately via:

go get github.com/cryptoecc/ETH-ECC/cmd/puppeth

+

Puppeth is distributed as part of the Geth & Tools bundles, but can also be installed separately via:

go get github.com/ethereum/go-ethereum/cmd/puppeth


Copyright 2017. The go-ethereum Authors.

@@ -461,9 +406,6 @@ try! node?.start(); case "#explorer": url = "//{{.ExplorerPage}}"; break; - case "#wallet": - url = "//{{.WalletPage}}"; - break; case "#faucet": url = "//{{.FaucetPage}}"; break; @@ -518,6 +460,8 @@ var dashboardMascot = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01s\x var dashboardDockerfile = ` FROM mhart/alpine-node:latest +WORKDIR /usr/app + RUN \ npm install connect serve-static && \ \ @@ -537,7 +481,7 @@ ADD puppeth.png /dashboard/puppeth.png EXPOSE 80 -CMD ["node", "/server.js"] +CMD ["node", "./server.js"] ` // dashboardComposefile is the docker-compose.yml file required to deploy and @@ -585,7 +529,6 @@ func deployDashboard(client *sshClient, network string, conf *config, config *da "VHost": config.host, "EthstatsPage": config.ethstats, "ExplorerPage": config.explorer, - "WalletPage": config.wallet, "FaucetPage": config.faucet, }) files[filepath.Join(workdir, "docker-compose.yaml")] = composefile.Bytes() @@ -613,7 +556,6 @@ func deployDashboard(client *sshClient, network string, conf *config, config *da "NetworkTitle": strings.Title(network), "EthstatsPage": config.ethstats, "ExplorerPage": config.explorer, - "WalletPage": config.wallet, "FaucetPage": config.faucet, "GethGenesis": network + ".json", "Bootnodes": conf.bootnodes, @@ -639,36 +581,6 @@ func deployDashboard(client *sshClient, network string, conf *config, config *da // Marshal the genesis spec files for go-ethereum and all the other clients genesis, _ := conf.Genesis.MarshalJSON() files[filepath.Join(workdir, network+".json")] = genesis - - if conf.Genesis.Config.Ethash != nil { - cppSpec, err := newAlethGenesisSpec(network, conf.Genesis) - if err != nil { - return nil, err - } - cppSpecJSON, _ := json.Marshal(cppSpec) - files[filepath.Join(workdir, network+"-cpp.json")] = cppSpecJSON - - harmonySpecJSON, _ := conf.Genesis.MarshalJSON() - files[filepath.Join(workdir, network+"-harmony.json")] = harmonySpecJSON - - paritySpec, err := newParityChainSpec(network, conf.Genesis, conf.bootnodes) - if err != nil { - return nil, err - } - paritySpecJSON, _ := json.Marshal(paritySpec) - files[filepath.Join(workdir, network+"-parity.json")] = paritySpecJSON - - pyethSpec, err := newPyEthereumGenesisSpec(network, conf.Genesis) - if err != nil { - return nil, err - } - pyethSpecJSON, _ := json.Marshal(pyethSpec) - files[filepath.Join(workdir, network+"-python.json")] = pyethSpecJSON - } else { - for _, client := range []string{"cpp", "harmony", "parity", "python"} { - files[filepath.Join(workdir, network+"-"+client+".json")] = []byte{} - } - } files[filepath.Join(workdir, "puppeth.png")] = dashboardMascot // Upload the deployment files to the remote server (and clean up afterwards) @@ -693,7 +605,6 @@ type dashboardInfos struct { ethstats string explorer string - wallet string faucet string } @@ -705,7 +616,6 @@ func (info *dashboardInfos) Report() map[string]string { "Website listener port": strconv.Itoa(info.port), "Ethstats service": info.ethstats, "Explorer service": info.explorer, - "Wallet service": info.wallet, "Faucet service": info.faucet, } } @@ -746,7 +656,6 @@ func checkDashboard(client *sshClient, network string) (*dashboardInfos, error) port: port, ethstats: infos.envvars["ETHSTATS_PAGE"], explorer: infos.envvars["EXPLORER_PAGE"], - wallet: infos.envvars["WALLET_PAGE"], faucet: infos.envvars["FAUCET_PAGE"], }, nil } diff --git a/cmd/puppeth/module_ethstats.go b/cmd/puppeth/module_ethstats.go index dd10fff9..abed4db5 100644 --- a/cmd/puppeth/module_ethstats.go +++ b/cmd/puppeth/module_ethstats.go @@ -25,7 +25,7 @@ import ( "strings" "text/template" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // ethstatsDockerfile is the Dockerfile required to build an ethstats backend @@ -158,7 +158,7 @@ func checkEthstats(client *sshClient, network string) (*ethstatsInfos, error) { if port != 80 && port != 443 { config += fmt.Sprintf(":%d", port) } - // Retrieve the IP blacklist + // Retrieve the IP banned list banned := strings.Split(infos.envvars["BANNED"], ",") // Run a sanity check to see if the port is reachable diff --git a/cmd/puppeth/module_explorer.go b/cmd/puppeth/module_explorer.go index 80ed39d5..3812f9fd 100644 --- a/cmd/puppeth/module_explorer.go +++ b/cmd/puppeth/module_explorer.go @@ -25,18 +25,18 @@ import ( "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // explorerDockerfile is the Dockerfile required to run a block explorer. var explorerDockerfile = ` -FROM cd4761/blockscout:latest +FROM puppeth/blockscout:latest ADD genesis.json /genesis.json RUN \ 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 $'geth --networkid {{.NetworkID}} --syncmode "full" --gcmode "archive" --port {{.EthPort}} --bootnodes {{.Bootnodes}} --ethstats \'{{.Ethstats}}\' --cache=512 --http --http.api "net,web3,eth,debug,txpool" --http.corsdomain "*" --http.vhosts "*" --ws --ws.origins "*" --exitwhensynced' >> explorer.sh && \ + echo $'exec geth --networkid {{.NetworkID}} --syncmode "full" --gcmode "archive" --port {{.EthPort}} --bootnodes {{.Bootnodes}} --ethstats \'{{.Ethstats}}\' --cache=512 --http --http.api "net,web3,eth,debug,txpool" --http.corsdomain "*" --http.vhosts "*" --ws --ws.origins "*" &' >> 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 && \ @@ -104,7 +104,7 @@ func deployExplorer(client *sshClient, network string, bootnodes []string, confi "Datadir": config.node.datadir, "DBDir": config.dbdir, "EthPort": config.node.port, - "EthName": config.node.ethstats[:strings.Index(config.node.ethstats, ":")], + "EthName": getEthName(config.node.ethstats), "WebPort": config.port, "Transformer": transformer, }) diff --git a/cmd/puppeth/module_faucet.go b/cmd/puppeth/module_faucet.go index 9db5e1e6..a4f6e656 100644 --- a/cmd/puppeth/module_faucet.go +++ b/cmd/puppeth/module_faucet.go @@ -26,14 +26,14 @@ import ( "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" ) // faucetDockerfile is the Dockerfile required to build a faucet container to // grant crypto tokens based on GitHub authentications. var faucetDockerfile = ` -FROM cd4761/eth-ecc:alltools-latest +FROM ethereum/client-go:alltools-latest ADD genesis.json /genesis.json ADD account.json /account.json @@ -46,6 +46,7 @@ ENTRYPOINT [ \ "--faucet.name", "{{.FaucetName}}", "--faucet.amount", "{{.FaucetAmount}}", "--faucet.minutes", "{{.FaucetMinutes}}", "--faucet.tiers", "{{.FaucetTiers}}", \ "--account.json", "/account.json", "--account.pass", "/account.pass" \ {{if .CaptchaToken}}, "--captcha.token", "{{.CaptchaToken}}", "--captcha.secret", "{{.CaptchaSecret}}"{{end}}{{if .NoAuth}}, "--noauth"{{end}} \ + {{if .TwitterToken}}, "--twitter.token.v1", "{{.TwitterToken}}"{{end}} \ ]` // faucetComposefile is the docker-compose.yml file required to deploy and maintain @@ -71,6 +72,7 @@ services: - FAUCET_TIERS={{.FaucetTiers}} - CAPTCHA_TOKEN={{.CaptchaToken}} - CAPTCHA_SECRET={{.CaptchaSecret}} + - TWITTER_TOKEN={{.TwitterToken}} - NO_AUTH={{.NoAuth}}{{if .VHost}} - VIRTUAL_HOST={{.VHost}} - VIRTUAL_PORT=8080{{end}} @@ -103,6 +105,7 @@ func deployFaucet(client *sshClient, network string, bootnodes []string, config "FaucetMinutes": config.minutes, "FaucetTiers": config.tiers, "NoAuth": config.noauth, + "TwitterToken": config.twitterToken, }) files[filepath.Join(workdir, "Dockerfile")] = dockerfile.Bytes() @@ -113,13 +116,14 @@ func deployFaucet(client *sshClient, network string, bootnodes []string, config "VHost": config.host, "ApiPort": config.port, "EthPort": config.node.port, - "EthName": config.node.ethstats[:strings.Index(config.node.ethstats, ":")], + "EthName": getEthName(config.node.ethstats), "CaptchaToken": config.captchaToken, "CaptchaSecret": config.captchaSecret, "FaucetAmount": config.amount, "FaucetMinutes": config.minutes, "FaucetTiers": config.tiers, "NoAuth": config.noauth, + "TwitterToken": config.twitterToken, }) files[filepath.Join(workdir, "docker-compose.yaml")] = composefile.Bytes() @@ -152,6 +156,7 @@ type faucetInfos struct { noauth bool captchaToken string captchaSecret string + twitterToken string } // Report converts the typed struct into a plain string->string map, containing @@ -165,6 +170,7 @@ func (info *faucetInfos) Report() map[string]string { "Funding cooldown (base tier)": fmt.Sprintf("%d mins", info.minutes), "Funding tiers": strconv.Itoa(info.tiers), "Captha protection": fmt.Sprintf("%v", info.captchaToken != ""), + "Using Twitter API": fmt.Sprintf("%v", info.twitterToken != ""), "Ethstats username": info.node.ethstats, } if info.noauth { @@ -213,7 +219,7 @@ func checkFaucet(client *sshClient, network string) (*faucetInfos, error) { minutes, _ := strconv.Atoi(infos.envvars["FAUCET_MINUTES"]) tiers, _ := strconv.Atoi(infos.envvars["FAUCET_TIERS"]) - // Retrieve the funding account informations + // Retrieve the funding account information var out []byte keyJSON, keyPass := "", "" if out, err = client.Run(fmt.Sprintf("docker exec %s_faucet_1 cat /account.json", network)); err == nil { @@ -243,5 +249,6 @@ func checkFaucet(client *sshClient, network string) (*faucetInfos, error) { captchaToken: infos.envvars["CAPTCHA_TOKEN"], captchaSecret: infos.envvars["CAPTCHA_SECRET"], noauth: infos.envvars["NO_AUTH"] == "true", + twitterToken: infos.envvars["TWITTER_TOKEN"], }, nil } diff --git a/cmd/puppeth/module_nginx.go b/cmd/puppeth/module_nginx.go index 9003b4c2..1b1ae61f 100644 --- a/cmd/puppeth/module_nginx.go +++ b/cmd/puppeth/module_nginx.go @@ -24,7 +24,7 @@ import ( "path/filepath" "strconv" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // nginxDockerfile is theis the Dockerfile required to build an nginx reverse- diff --git a/cmd/puppeth/module_node.go b/cmd/puppeth/module_node.go index b01ea64f..b8aa30db 100644 --- a/cmd/puppeth/module_node.go +++ b/cmd/puppeth/module_node.go @@ -26,13 +26,13 @@ import ( "strings" "text/template" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" ) // nodeDockerfile is the Dockerfile required to run an Ethereum node. var nodeDockerfile = ` -FROM cd4761/eth-ecc:latest +FROM ethereum/client-go:latest ADD genesis.json /genesis.json {{if .Unlock}} @@ -94,7 +94,7 @@ func deployNode(client *sshClient, network string, bootnodes []string, config *n lightFlag := "" if config.peersLight > 0 { - lightFlag = fmt.Sprintf("--lightpeers=%d --lightserv=50", config.peersLight) + lightFlag = fmt.Sprintf("--light.maxpeers=%d --light.serve=50", config.peersLight) } dockerfile := new(bytes.Buffer) template.Must(template.New("").Parse(nodeDockerfile)).Execute(dockerfile, map[string]interface{}{ @@ -123,7 +123,7 @@ func deployNode(client *sshClient, network string, bootnodes []string, config *n "TotalPeers": config.peersTotal, "Light": config.peersLight > 0, "LightPeers": config.peersLight, - "Ethstats": config.ethstats[:strings.Index(config.ethstats, ":")], + "Ethstats": getEthName(config.ethstats), "Etherbase": config.etherbase, "GasTarget": config.gasTarget, "GasLimit": config.gasLimit, diff --git a/cmd/puppeth/module_wallet.go b/cmd/puppeth/module_wallet.go deleted file mode 100644 index 988d0259..00000000 --- a/cmd/puppeth/module_wallet.go +++ /dev/null @@ -1,201 +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" - "html/template" - "math/rand" - "path/filepath" - "strconv" - "strings" - - "github.com/cryptoecc/ETH-ECC/log" -) - -// walletDockerfile is the Dockerfile required to run a web wallet. -var walletDockerfile = ` -FROM cd4761/eth-ecc:latest - -ADD genesis.json /genesis.json - -RUN \ - echo 'node server.js &' > wallet.sh && \ - echo 'geth --cache 512 init /genesis.json' >> wallet.sh && \ - echo $'exec geth --networkid {{.NetworkID}} --port {{.NodePort}} --bootnodes {{.Bootnodes}} --ethstats \'{{.Ethstats}}\' --cache=512 --rpc --rpcaddr=0.0.0.0 --rpccorsdomain "*" --rpcvhosts "*"' >> wallet.sh - -RUN \ - sed -i 's/PuppethNetworkID/{{.NetworkID}}/g' dist/js/etherwallet-master.js && \ - sed -i 's/PuppethNetwork/{{.Network}}/g' dist/js/etherwallet-master.js && \ - sed -i 's/PuppethDenom/{{.Denom}}/g' dist/js/etherwallet-master.js && \ - sed -i 's/PuppethHost/{{.Host}}/g' dist/js/etherwallet-master.js && \ - sed -i 's/PuppethRPCPort/{{.RPCPort}}/g' dist/js/etherwallet-master.js - -ENTRYPOINT ["/bin/sh", "wallet.sh"] -` - -// walletComposefile is the docker-compose.yml file required to deploy and -// maintain a web wallet. -var walletComposefile = ` -version: '2' -services: - wallet: - build: . - image: {{.Network}}/wallet - container_name: {{.Network}}_wallet_1 - ports: - - "{{.NodePort}}:{{.NodePort}}" - - "{{.NodePort}}:{{.NodePort}}/udp" - - "{{.RPCPort}}:8545"{{if not .VHost}} - - "{{.WebPort}}:80"{{end}} - volumes: - - {{.Datadir}}:/root/.ethereum - environment: - - NODE_PORT={{.NodePort}}/tcp - - STATS={{.Ethstats}}{{if .VHost}} - - VIRTUAL_HOST={{.VHost}} - - VIRTUAL_PORT=80{{end}} - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "10" - restart: always -` - -// deployWallet deploys a new web wallet 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 deployWallet(client *sshClient, network string, bootnodes []string, config *walletInfos, nocache 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(walletDockerfile)).Execute(dockerfile, map[string]interface{}{ - "Network": strings.ToTitle(network), - "Denom": strings.ToUpper(network), - "NetworkID": config.network, - "NodePort": config.nodePort, - "RPCPort": config.rpcPort, - "Bootnodes": strings.Join(bootnodes, ","), - "Ethstats": config.ethstats, - "Host": client.address, - }) - files[filepath.Join(workdir, "Dockerfile")] = dockerfile.Bytes() - - composefile := new(bytes.Buffer) - template.Must(template.New("").Parse(walletComposefile)).Execute(composefile, map[string]interface{}{ - "Datadir": config.datadir, - "Network": network, - "NodePort": config.nodePort, - "RPCPort": config.rpcPort, - "VHost": config.webHost, - "WebPort": config.webPort, - "Ethstats": config.ethstats[:strings.Index(config.ethstats, ":")], - }) - files[filepath.Join(workdir, "docker-compose.yaml")] = composefile.Bytes() - - files[filepath.Join(workdir, "genesis.json")] = config.genesis - - // Upload the deployment files to the remote server (and clean up afterwards) - if out, err := client.Upload(files); err != nil { - return out, err - } - defer client.Run("rm -rf " + workdir) - - // Build and deploy the boot or seal node service - if nocache { - return nil, client.Stream(fmt.Sprintf("cd %s && docker-compose -p %s build --pull --no-cache && docker-compose -p %s up -d --force-recreate --timeout 60", workdir, network, network)) - } - return nil, client.Stream(fmt.Sprintf("cd %s && docker-compose -p %s up -d --build --force-recreate --timeout 60", workdir, network)) -} - -// walletInfos is returned from a web wallet status check to allow reporting -// various configuration parameters. -type walletInfos struct { - genesis []byte - network int64 - datadir string - ethstats string - nodePort int - rpcPort int - webHost string - webPort 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 *walletInfos) Report() map[string]string { - report := map[string]string{ - "Data directory": info.datadir, - "Ethstats username": info.ethstats, - "Node listener port ": strconv.Itoa(info.nodePort), - "RPC listener port ": strconv.Itoa(info.rpcPort), - "Website address ": info.webHost, - "Website listener port ": strconv.Itoa(info.webPort), - } - return report -} - -// checkWallet does a health-check against web wallet server to verify whether -// it's running, and if yes, whether it's responsive. -func checkWallet(client *sshClient, network string) (*walletInfos, error) { - // Inspect a possible web wallet container on the host - infos, err := inspectContainer(client, fmt.Sprintf("%s_wallet_1", network)) - if err != nil { - return nil, err - } - if !infos.running { - return nil, ErrServiceOffline - } - // Resolve the port from the host, or the reverse proxy - webPort := infos.portmap["80/tcp"] - if webPort == 0 { - if proxy, _ := checkNginx(client, network); proxy != nil { - webPort = proxy.port - } - } - if webPort == 0 { - return nil, ErrNotExposed - } - // Resolve the host from the reverse-proxy and the config values - host := infos.envvars["VIRTUAL_HOST"] - if host == "" { - host = client.server - } - // Run a sanity check to see if the devp2p and RPC ports are reachable - nodePort := infos.portmap[infos.envvars["NODE_PORT"]] - if err = checkPort(client.server, nodePort); err != nil { - log.Warn(fmt.Sprintf("Wallet devp2p port seems unreachable"), "server", client.server, "port", nodePort, "err", err) - } - rpcPort := infos.portmap["8545/tcp"] - if err = checkPort(client.server, rpcPort); err != nil { - log.Warn(fmt.Sprintf("Wallet RPC port seems unreachable"), "server", client.server, "port", rpcPort, "err", err) - } - // Assemble and return the useful infos - stats := &walletInfos{ - datadir: infos.volumes["/root/.ethereum"], - nodePort: nodePort, - rpcPort: rpcPort, - webHost: host, - webPort: webPort, - ethstats: infos.envvars["STATS"], - } - return stats, nil -} diff --git a/cmd/puppeth/puppeth.go b/cmd/puppeth/puppeth.go index b269c6f8..415542b6 100644 --- a/cmd/puppeth/puppeth.go +++ b/cmd/puppeth/puppeth.go @@ -23,8 +23,8 @@ import ( "strings" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/urfave/cli" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" ) // main is just a boring entry point to set up the CLI app. @@ -33,11 +33,11 @@ func main() { app.Name = "puppeth" app.Usage = "assemble and maintain private Ethereum networks" app.Flags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "network", Usage: "name of the network to administer (no spaces or hyphens, please)", }, - cli.IntFlag{ + &cli.IntFlag{ Name: "loglevel", Value: 3, Usage: "log level to emit to the screen", diff --git a/cmd/puppeth/ssh.go b/cmd/puppeth/ssh.go index 3a289e92..a20b3bfd 100644 --- a/cmd/puppeth/ssh.go +++ b/cmd/puppeth/ssh.go @@ -21,16 +21,16 @@ import ( "bytes" "errors" "fmt" - "io/ioutil" "net" "os" "os/user" "path/filepath" "strings" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/crypto/ssh/agent" + "golang.org/x/term" ) // sshClient is a small wrapper around Go's SSH client with a few utility methods @@ -43,6 +43,8 @@ type sshClient struct { logger log.Logger } +const EnvSSHAuthSock = "SSH_AUTH_SOCK" + // dial establishes an SSH connection to a remote node using the current user and // the user's configured private RSA key. If that fails, password authentication // is fallen back to. server can be a string like user:identity@server:port. @@ -79,38 +81,49 @@ func dial(server string, pubkey []byte) (*sshClient, error) { if username == "" { username = user.Username } - // Configure the supported authentication methods (private key and password) - var auths []ssh.AuthMethod - path := filepath.Join(user.HomeDir, ".ssh", identity) - if buf, err := ioutil.ReadFile(path); err != nil { - log.Warn("No SSH key, falling back to passwords", "path", path, "err", err) + // Configure the supported authentication methods (ssh agent, private key and password) + var ( + auths []ssh.AuthMethod + conn net.Conn + ) + if conn, err = net.Dial("unix", os.Getenv(EnvSSHAuthSock)); err != nil { + log.Warn("Unable to dial SSH agent, falling back to private keys", "err", err) } else { - key, err := ssh.ParsePrivateKey(buf) - if err != nil { - fmt.Printf("What's the decryption password for %s? (won't be echoed)\n>", path) - blob, err := terminal.ReadPassword(int(os.Stdin.Fd())) - fmt.Println() - if err != nil { - log.Warn("Couldn't read password", "err", err) - } - key, err := ssh.ParsePrivateKeyWithPassphrase(buf, blob) + client := agent.NewClient(conn) + auths = append(auths, ssh.PublicKeysCallback(client.Signers)) + } + if err != nil { + path := filepath.Join(user.HomeDir, ".ssh", identity) + if buf, err := os.ReadFile(path); err != nil { + log.Warn("No SSH key, falling back to passwords", "path", path, "err", err) + } else { + key, err := ssh.ParsePrivateKey(buf) if err != nil { - log.Warn("Failed to decrypt SSH key, falling back to passwords", "path", path, "err", err) + fmt.Printf("What's the decryption password for %s? (won't be echoed)\n>", path) + blob, err := term.ReadPassword(int(os.Stdin.Fd())) + fmt.Println() + if err != nil { + log.Warn("Couldn't read password", "err", err) + } + key, err := ssh.ParsePrivateKeyWithPassphrase(buf, blob) + if err != nil { + log.Warn("Failed to decrypt SSH key, falling back to passwords", "path", path, "err", err) + } else { + auths = append(auths, ssh.PublicKeys(key)) + } } else { auths = append(auths, ssh.PublicKeys(key)) } - } else { - auths = append(auths, ssh.PublicKeys(key)) } - } - auths = append(auths, ssh.PasswordCallback(func() (string, error) { - fmt.Printf("What's the login password for %s at %s? (won't be echoed)\n> ", username, server) - blob, err := terminal.ReadPassword(int(os.Stdin.Fd())) + auths = append(auths, ssh.PasswordCallback(func() (string, error) { + fmt.Printf("What's the login password for %s at %s? (won't be echoed)\n> ", username, server) + blob, err := term.ReadPassword(int(os.Stdin.Fd())) - fmt.Println() - return string(blob), err - })) + fmt.Println() + return string(blob), err + })) + } // Resolve the IP address of the remote server addr, err := net.LookupHost(hostname) if err != nil { @@ -129,15 +142,20 @@ func dial(server string, pubkey []byte) (*sshClient, error) { fmt.Printf("SSH key fingerprint is %s [MD5]\n", ssh.FingerprintLegacyMD5(key)) fmt.Printf("Are you sure you want to continue connecting (yes/no)? ") - text, err := bufio.NewReader(os.Stdin).ReadString('\n') - switch { - case err != nil: - return err - case strings.TrimSpace(text) == "yes": - pubkey = key.Marshal() - return nil - default: - return fmt.Errorf("unknown auth choice: %v", text) + for { + text, err := bufio.NewReader(os.Stdin).ReadString('\n') + switch { + case err != nil: + return err + case strings.TrimSpace(text) == "yes": + pubkey = key.Marshal() + return nil + case strings.TrimSpace(text) == "no": + return errors.New("users says no") + default: + fmt.Println("Please answer 'yes' or 'no'") + continue + } } } // If a public key exists for this SSH server, check that it matches @@ -145,7 +163,7 @@ func dial(server string, pubkey []byte) (*sshClient, error) { return nil } // We have a mismatch, forbid connecting - return errors.New("ssh key mismatch, readd the machine to update") + return errors.New("ssh key mismatch, re-add the machine to update") } client, err := ssh.Dial("tcp", hostport, &ssh.ClientConfig{User: username, Auth: auths, HostKeyCallback: keycheck}) if err != nil { diff --git a/cmd/puppeth/testdata/stureby_aleth.json b/cmd/puppeth/testdata/stureby_aleth.json index 1ef1d8ae..d18ba385 100644 --- a/cmd/puppeth/testdata/stureby_aleth.json +++ b/cmd/puppeth/testdata/stureby_aleth.json @@ -1,112 +1,113 @@ { - "sealEngine":"Ethash", - "params":{ - "accountStartNonce":"0x00", - "maximumExtraDataSize":"0x20", - "homesteadForkBlock":"0x2710", - "daoHardforkBlock":"0x00", - "EIP150ForkBlock":"0x3a98", - "EIP158ForkBlock":"0x59d8", - "byzantiumForkBlock":"0x7530", - "constantinopleForkBlock":"0x9c40", - "minGasLimit":"0x1388", - "maxGasLimit":"0x7fffffffffffffff", - "tieBreakingGas":false, - "gasLimitBoundDivisor":"0x0400", - "minimumDifficulty":"0x20000", - "difficultyBoundDivisor":"0x0800", - "durationLimit":"0x0d", - "blockReward":"0x4563918244F40000", - "networkID":"0x4cb2e", - "chainID":"0x4cb2e", - "allowFutureBlocks":false + "sealEngine": "Ethash", + "params": { + "accountStartNonce": "0x0", + "maximumExtraDataSize": "0x20", + "homesteadForkBlock": "0x2710", + "daoHardforkBlock": "0x0", + "EIP150ForkBlock": "0x3a98", + "EIP158ForkBlock": "0x59d8", + "byzantiumForkBlock": "0x7530", + "constantinopleForkBlock": "0x9c40", + "constantinopleFixForkBlock": "0x9c40", + "istanbulForkBlock": "0xc350", + "minGasLimit": "0x1388", + "maxGasLimit": "0x7fffffffffffffff", + "tieBreakingGas": false, + "gasLimitBoundDivisor": "0x400", + "minimumDifficulty": "0x20000", + "difficultyBoundDivisor": "0x800", + "durationLimit": "0xd", + "blockReward": "0x4563918244f40000", + "networkID": "0x4cb2e", + "chainID": "0x4cb2e", + "allowFutureBlocks": false }, - "genesis":{ - "nonce":"0x0000000000000000", - "difficulty":"0x20000", - "mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000", - "author":"0x0000000000000000000000000000000000000000", - "timestamp":"0x59a4e76d", - "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", - "extraData":"0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", - "gasLimit":"0x47b760" + "genesis": { + "nonce": "0x0000000000000000", + "difficulty": "0x20000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "author": "0x0000000000000000000000000000000000000000", + "timestamp": "0x59a4e76d", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", + "gasLimit": "0x47b760" }, - "accounts":{ - "0000000000000000000000000000000000000001":{ - "balance":"1", - "precompiled":{ - "name":"ecrecover", - "linear":{ - "base":3000, - "word":0 + "accounts": { + "0000000000000000000000000000000000000001": { + "balance": "0x1", + "precompiled": { + "name": "ecrecover", + "linear": { + "base": 3000, + "word": 0 } } }, - "0000000000000000000000000000000000000002":{ - "balance":"1", - "precompiled":{ - "name":"sha256", - "linear":{ - "base":60, - "word":12 + "0000000000000000000000000000000000000002": { + "balance": "0x1", + "precompiled": { + "name": "sha256", + "linear": { + "base": 60, + "word": 12 } } }, - "0000000000000000000000000000000000000003":{ - "balance":"1", - "precompiled":{ - "name":"ripemd160", - "linear":{ - "base":600, - "word":120 + "0000000000000000000000000000000000000003": { + "balance": "0x1", + "precompiled": { + "name": "ripemd160", + "linear": { + "base": 600, + "word": 120 } } }, - "0000000000000000000000000000000000000004":{ - "balance":"1", - "precompiled":{ - "name":"identity", - "linear":{ - "base":15, - "word":3 + "0000000000000000000000000000000000000004": { + "balance": "0x1", + "precompiled": { + "name": "identity", + "linear": { + "base": 15, + "word": 3 } } }, - "0000000000000000000000000000000000000005":{ - "balance":"1", - "precompiled":{ - "name":"modexp", - "startingBlock":"0x7530" + "0000000000000000000000000000000000000005": { + "balance": "0x1", + "precompiled": { + "name": "modexp", + "startingBlock": "0x7530" } }, - "0000000000000000000000000000000000000006":{ - "balance":"1", - "precompiled":{ - "name":"alt_bn128_G1_add", - "startingBlock":"0x7530", - "linear":{ - "base":500, - "word":0 - } + "0000000000000000000000000000000000000006": { + "balance": "0x1", + "precompiled": { + "name": "alt_bn128_G1_add", + "startingBlock": "0x7530" } }, - "0000000000000000000000000000000000000007":{ - "balance":"1", - "precompiled":{ - "name":"alt_bn128_G1_mul", - "startingBlock":"0x7530", - "linear":{ - "base":40000, - "word":0 - } + "0000000000000000000000000000000000000007": { + "balance": "0x1", + "precompiled": { + "name": "alt_bn128_G1_mul", + "startingBlock": "0x7530" + } + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1", + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x7530" } }, - "0000000000000000000000000000000000000008":{ - "balance":"1", - "precompiled":{ - "name":"alt_bn128_pairing_product", - "startingBlock":"0x7530" + "0000000000000000000000000000000000000009": { + "balance": "0x1", + "precompiled": { + "name": "blake2_compression", + "startingBlock": "0xc350" } } } -} +} \ No newline at end of file diff --git a/cmd/puppeth/testdata/stureby_geth.json b/cmd/puppeth/testdata/stureby_geth.json index c8c3b3c9..79f03469 100644 --- a/cmd/puppeth/testdata/stureby_geth.json +++ b/cmd/puppeth/testdata/stureby_geth.json @@ -1,6 +1,5 @@ { "config": { - "ethash":{}, "chainId": 314158, "homesteadBlock": 10000, "eip150Block": 15000, @@ -8,11 +7,13 @@ "eip155Block": 23000, "eip158Block": 23000, "byzantiumBlock": 30000, - "constantinopleBlock": 40000 + "constantinopleBlock": 40000, + "petersburgBlock": 40000, + "istanbulBlock": 50000, + "ethash": {} }, "nonce": "0x0", "timestamp": "0x59a4e76d", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", "gasLimit": "0x47b760", "difficulty": "0x20000", @@ -20,28 +21,34 @@ "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { "0000000000000000000000000000000000000001": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000002": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000003": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000004": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000005": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000006": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000007": { - "balance": "0x01" + "balance": "0x1" }, "0000000000000000000000000000000000000008": { - "balance": "0x01" + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" } - } -} + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/cmd/puppeth/testdata/stureby_parity.json b/cmd/puppeth/testdata/stureby_parity.json index f3fa8386..e9229f99 100644 --- a/cmd/puppeth/testdata/stureby_parity.json +++ b/cmd/puppeth/testdata/stureby_parity.json @@ -1,181 +1,213 @@ { - "name":"Stureby", - "dataDir":"stureby", - "engine":{ - "Ethash":{ - "params":{ - "minimumDifficulty":"0x20000", - "difficultyBoundDivisor":"0x800", - "durationLimit":"0xd", - "blockReward":{ - "0x0":"0x4563918244f40000", - "0x7530":"0x29a2241af62c0000", - "0x9c40":"0x1bc16d674ec80000" + "name": "stureby", + "dataDir": "stureby", + "engine": { + "Ethash": { + "params": { + "minimumDifficulty": "0x20000", + "difficultyBoundDivisor": "0x800", + "durationLimit": "0xd", + "blockReward": { + "0x0": "0x4563918244f40000", + "0x7530": "0x29a2241af62c0000", + "0x9c40": "0x1bc16d674ec80000" }, - "homesteadTransition":"0x2710", - "eip100bTransition":"0x7530", - "difficultyBombDelays":{ - "0x7530":"0x2dc6c0", - "0x9c40":"0x1e8480" - } + "difficultyBombDelays": { + "0x7530": "0x2dc6c0", + "0x9c40": "0x1e8480" + }, + "homesteadTransition": "0x2710", + "eip100bTransition": "0x7530" } } }, - "params":{ - "accountStartNonce":"0x0", - "maximumExtraDataSize":"0x20", - "gasLimitBoundDivisor":"0x400", - "minGasLimit":"0x1388", - "networkID":"0x4cb2e", - "chainID":"0x4cb2e", - "maxCodeSize":"0x6000", - "maxCodeSizeTransition":"0x0", + "params": { + "accountStartNonce": "0x0", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0x1388", + "gasLimitBoundDivisor": "0x400", + "networkID": "0x4cb2e", + "chainID": "0x4cb2e", + "maxCodeSize": "0x6000", + "maxCodeSizeTransition": "0x0", "eip98Transition": "0x7fffffffffffffff", - "eip150Transition":"0x3a98", - "eip160Transition":"0x59d8", - "eip161abcTransition":"0x59d8", - "eip161dTransition":"0x59d8", - "eip155Transition":"0x59d8", - "eip140Transition":"0x7530", - "eip211Transition":"0x7530", - "eip214Transition":"0x7530", - "eip658Transition":"0x7530", - "eip145Transition":"0x9c40", - "eip1014Transition":"0x9c40", - "eip1052Transition":"0x9c40", - "eip1283Transition":"0x9c40" + "eip150Transition": "0x3a98", + "eip160Transition": "0x59d8", + "eip161abcTransition": "0x59d8", + "eip161dTransition": "0x59d8", + "eip155Transition": "0x59d8", + "eip140Transition": "0x7530", + "eip211Transition": "0x7530", + "eip214Transition": "0x7530", + "eip658Transition": "0x7530", + "eip145Transition": "0x9c40", + "eip1014Transition": "0x9c40", + "eip1052Transition": "0x9c40", + "eip1283Transition": "0x9c40", + "eip1283DisableTransition": "0x9c40", + "eip1283ReenableTransition": "0xc350", + "eip1344Transition": "0xc350", + "eip1884Transition": "0xc350", + "eip2028Transition": "0xc350" }, - "genesis":{ - "seal":{ - "ethereum":{ - "nonce":"0x0000000000000000", - "mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000" + "genesis": { + "seal": { + "ethereum": { + "nonce": "0x0000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "difficulty":"0x20000", - "author":"0x0000000000000000000000000000000000000000", - "timestamp":"0x59a4e76d", - "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", - "extraData":"0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", - "gasLimit":"0x47b760" + "difficulty": "0x20000", + "author": "0x0000000000000000000000000000000000000000", + "timestamp": "0x59a4e76d", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x0000000000000000000000000000000000000000000000000000000b4dc0ffee", + "gasLimit": "0x47b760" }, - "nodes":[ - "enode://dfa7aca3f5b635fbfe7d0b20575f25e40d9e27b4bfbb3cf74364a42023ad9f25c1a4383bcc8cced86ee511a7d03415345a4df05be37f1dff040e4c780699f1c0@168.61.153.255:31303", - "enode://ef441b20dd70aeabf0eac35c3b8a2854e5ce04db0e30be9152ea9fd129359dcbb3f803993303ff5781c755dfd7223f3fe43505f583cccb740949407677412ba9@40.74.91.252:31303", - "enode://953b5ea1c8987cf46008232a0160324fd00d41320ecf00e23af86ec8f5396b19eb57ddab37c78141be56f62e9077de4f4dfa0747fa768ed8c8531bbfb1046237@40.70.214.166:31303", - "enode://276e613dd4b277a66591e565711e6c8bb107f0905248a9f8f8228c1a87992e156e5114bb9937c02824a9d9d25f76340442cf86e2028bf5293cae19904fb2b98e@35.178.251.52:30303", - "enode://064c820d41e52ed7d426ac64b60506c2998235bedc7e67cb497c6faf7bb4fc54fe56fc82d0add3180b747c0c4f40a1108a6f84d7d0629ed606d504528e61cc57@3.8.5.3:30303", - "enode://90069fdabcc5e684fa5d59430bebbb12755d9362dfe5006a1485b13d71a78a3812d36e74dd7d88e50b51add01e097ea80f16263aeaa4f0230db6c79e2a97e7ca@217.29.191.142:30303", - "enode://0aac74b7fd28726275e466acb5e03bc88a95927e9951eb66b5efb239b2f798ada0690853b2f2823fe4efa408f0f3d4dd258430bc952a5ff70677b8625b3e3b14@40.115.33.57:40404", - "enode://0b96415a10f835106d83e090a0528eed5e7887e5c802a6d084e9f1993a9d0fc713781e6e4101f6365e9b91259712f291acc0a9e6e667e22023050d602c36fbe2@40.115.33.57:40414" - ], - "accounts":{ - "0000000000000000000000000000000000000001":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"ecrecover", - "pricing":{ - "linear":{ - "base":3000, - "word":0 + "nodes": [], + "accounts": { + "0000000000000000000000000000000000000001": { + "balance": "0x1", + "builtin": { + "name": "ecrecover", + "pricing": { + "linear": { + "base": 3000, + "word": 0 } } } }, - "0000000000000000000000000000000000000002":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"sha256", - "pricing":{ - "linear":{ - "base":60, - "word":12 + "0000000000000000000000000000000000000002": { + "balance": "0x1", + "builtin": { + "name": "sha256", + "pricing": { + "linear": { + "base": 60, + "word": 12 } } } }, - "0000000000000000000000000000000000000003":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"ripemd160", - "pricing":{ - "linear":{ - "base":600, - "word":120 + "0000000000000000000000000000000000000003": { + "balance": "0x1", + "builtin": { + "name": "ripemd160", + "pricing": { + "linear": { + "base": 600, + "word": 120 } } } }, - "0000000000000000000000000000000000000004":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"identity", - "pricing":{ - "linear":{ - "base":15, - "word":3 + "0000000000000000000000000000000000000004": { + "balance": "0x1", + "builtin": { + "name": "identity", + "pricing": { + "linear": { + "base": 15, + "word": 3 } } } }, - "0000000000000000000000000000000000000005":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"modexp", - "activate_at":"0x7530", - "pricing":{ - "modexp":{ - "divisor":20 + "0000000000000000000000000000000000000005": { + "balance": "0x1", + "builtin": { + "name": "modexp", + "pricing": { + "modexp": { + "divisor": 20 } - } + }, + "activate_at": "0x7530" } }, - "0000000000000000000000000000000000000006":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"alt_bn128_add", - "activate_at":"0x7530", - "pricing":{ - "linear":{ - "base":500, - "word":0 + "0000000000000000000000000000000000000006": { + "balance": "0x1", + "builtin": { + "name": "alt_bn128_add", + "pricing": { + "0x0": { + "price": { + "alt_bn128_const_operations": { + "price": 500 + } + } + }, + "0xc350": { + "price": { + "alt_bn128_const_operations": { + "price": 150 + } + } } - } + }, + "activate_at": "0x7530" } }, - "0000000000000000000000000000000000000007":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"alt_bn128_mul", - "activate_at":"0x7530", - "pricing":{ - "linear":{ - "base":40000, - "word":0 + "0000000000000000000000000000000000000007": { + "balance": "0x1", + "builtin": { + "name": "alt_bn128_mul", + "pricing": { + "0x0": { + "price": { + "alt_bn128_const_operations": { + "price": 40000 + } + } + }, + "0xc350": { + "price": { + "alt_bn128_const_operations": { + "price": 6000 + } + } } - } + }, + "activate_at": "0x7530" } }, - "0000000000000000000000000000000000000008":{ - "balance":"1", - "nonce":"0", - "builtin":{ - "name":"alt_bn128_pairing", - "activate_at":"0x7530", - "pricing":{ - "alt_bn128_pairing":{ - "base":100000, - "pair":80000 + "0000000000000000000000000000000000000008": { + "balance": "0x1", + "builtin": { + "name": "alt_bn128_pairing", + "pricing": { + "0x0": { + "price": { + "alt_bn128_pairing": { + "base": 100000, + "pair": 80000 + } + } + }, + "0xc350": { + "price": { + "alt_bn128_pairing": { + "base": 45000, + "pair": 34000 + } + } } - } + }, + "activate_at": "0x7530" + } + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1", + "builtin": { + "name": "blake2_f", + "pricing": { + "blake2_f": { + "gas_per_round": 1 + } + }, + "activate_at": "0xc350" } } } -} +} \ No newline at end of file diff --git a/cmd/puppeth/wizard.go b/cmd/puppeth/wizard.go index f561a72d..6e5ca41d 100644 --- a/cmd/puppeth/wizard.go +++ b/cmd/puppeth/wizard.go @@ -17,10 +17,8 @@ package main import ( - "bufio" "encoding/json" "fmt" - "io/ioutil" "math/big" "net" "net/url" @@ -31,10 +29,12 @@ import ( "strings" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/log" - "golang.org/x/crypto/ssh/terminal" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/log" + "github.com/peterh/liner" + "golang.org/x/term" ) // config contains all the configurations needed by puppeth that should be saved @@ -64,7 +64,7 @@ func (c config) flush() { os.MkdirAll(filepath.Dir(c.path), 0755) out, _ := json.MarshalIndent(c, "", " ") - if err := ioutil.WriteFile(c.path, out, 0644); err != nil { + if err := os.WriteFile(c.path, out, 0644); err != nil { log.Warn("Failed to save puppeth configs", "file", c.path, "err", err) } } @@ -76,17 +76,27 @@ type wizard struct { servers map[string]*sshClient // SSH connections to servers to administer services map[string][]string // Ethereum services known to be running on servers - in *bufio.Reader // Wrapper around stdin to allow reading user input - lock sync.Mutex // Lock to protect configs during concurrent service discovery + lock sync.Mutex // Lock to protect configs during concurrent service discovery +} + +// prompts the user for input with the given prompt string. Returns when a value is entered. +// Causes the wizard to exit if ctrl-d is pressed +func promptInput(p string) string { + for { + text, err := prompt.Stdin.PromptInput(p) + if err != nil { + if err != liner.ErrPromptAborted { + log.Crit("Failed to read user input", "err", err) + } + } else { + return text + } + } } // read reads a single line from stdin, trimming if from spaces. func (w *wizard) read() string { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") return strings.TrimSpace(text) } @@ -94,11 +104,7 @@ func (w *wizard) read() string { // non-emptyness. func (w *wizard) readString() string { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text != "" { return text } @@ -108,11 +114,7 @@ func (w *wizard) readString() string { // readDefaultString reads a single line from stdin, trimming if from spaces. If // an empty line is entered, the default value is returned. func (w *wizard) readDefaultString(def string) string { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text != "" { return text } @@ -124,11 +126,7 @@ func (w *wizard) readDefaultString(def string) string { // value is returned. func (w *wizard) readDefaultYesNo(def bool) bool { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.ToLower(strings.TrimSpace(text)); text == "" { return def } @@ -146,11 +144,7 @@ func (w *wizard) readDefaultYesNo(def bool) bool { // interpret it as a URL (http, https or file). func (w *wizard) readURL() *url.URL { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") uri, err := url.Parse(strings.TrimSpace(text)) if err != nil { log.Error("Invalid input, expected URL", "err", err) @@ -164,11 +158,7 @@ func (w *wizard) readURL() *url.URL { // to parse into an integer. func (w *wizard) readInt() int { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text == "" { continue } @@ -186,11 +176,7 @@ func (w *wizard) readInt() int { // returned. func (w *wizard) readDefaultInt(def int) int { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text == "" { return def } @@ -208,11 +194,7 @@ func (w *wizard) readDefaultInt(def int) int { // default value is returned. func (w *wizard) readDefaultBigInt(def *big.Int) *big.Int { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text == "" { return def } @@ -225,38 +207,11 @@ func (w *wizard) readDefaultBigInt(def *big.Int) *big.Int { } } -/* -// readFloat reads a single line from stdin, trimming if from spaces, enforcing it -// to parse into a float. -func (w *wizard) readFloat() float64 { - for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } - if text = strings.TrimSpace(text); text == "" { - continue - } - val, err := strconv.ParseFloat(strings.TrimSpace(text), 64) - if err != nil { - log.Error("Invalid input, expected float", "err", err) - continue - } - return val - } -} -*/ - // readDefaultFloat reads a single line from stdin, trimming if from spaces, enforcing // it to parse into a float. If an empty line is entered, the default value is returned. func (w *wizard) readDefaultFloat(def float64) float64 { for { - fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text == "" { return def } @@ -273,7 +228,7 @@ func (w *wizard) readDefaultFloat(def float64) float64 { // line and returns it. The input will not be echoed. func (w *wizard) readPassword() string { fmt.Printf("> ") - text, err := terminal.ReadPassword(int(os.Stdin.Fd())) + text, err := term.ReadPassword(int(os.Stdin.Fd())) if err != nil { log.Crit("Failed to read password", "err", err) } @@ -285,12 +240,7 @@ func (w *wizard) readPassword() string { // it to an Ethereum address. func (w *wizard) readAddress() *common.Address { for { - // Read the address from the user - fmt.Printf("> 0x") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> 0x") if text = strings.TrimSpace(text); text == "" { return nil } @@ -311,11 +261,7 @@ func (w *wizard) readAddress() *common.Address { func (w *wizard) readDefaultAddress(def common.Address) common.Address { for { // Read the address from the user - fmt.Printf("> 0x") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> 0x") if text = strings.TrimSpace(text); text == "" { return def } @@ -334,8 +280,9 @@ func (w *wizard) readJSON() string { var blob json.RawMessage for { - fmt.Printf("> ") - if err := json.NewDecoder(w.in).Decode(&blob); err != nil { + text := promptInput("> ") + reader := strings.NewReader(text) + if err := json.NewDecoder(reader).Decode(&blob); err != nil { log.Error("Invalid JSON, please try again", "err", err) continue } @@ -351,10 +298,7 @@ func (w *wizard) readIPAddress() string { for { // Read the IP address from the user fmt.Printf("> ") - text, err := w.in.ReadString('\n') - if err != nil { - log.Crit("Failed to read user input", "err", err) - } + text := promptInput("> ") if text = strings.TrimSpace(text); text == "" { return "" } diff --git a/cmd/puppeth/wizard_dashboard.go b/cmd/puppeth/wizard_dashboard.go index 78174fe3..b64bdca0 100644 --- a/cmd/puppeth/wizard_dashboard.go +++ b/cmd/puppeth/wizard_dashboard.go @@ -19,7 +19,7 @@ package main import ( "fmt" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // deployDashboard queries the user for various input on deploying a web-service @@ -60,7 +60,7 @@ func (w *wizard) deployDashboard() { available[service] = append(available[service], server) } } - for _, service := range []string{"ethstats", "explorer", "wallet", "faucet"} { + for _, service := range []string{"ethstats", "explorer", "faucet"} { // Gather all the locally hosted pages of this type var pages []string for _, server := range available[service] { @@ -79,10 +79,6 @@ func (w *wizard) deployDashboard() { if infos, err := checkExplorer(client, w.network); err == nil { port = infos.port } - case "wallet": - if infos, err := checkWallet(client, w.network); err == nil { - port = infos.webPort - } case "faucet": if infos, err := checkFaucet(client, w.network); err == nil { port = infos.port @@ -127,8 +123,6 @@ func (w *wizard) deployDashboard() { infos.ethstats = page case "explorer": infos.explorer = page - case "wallet": - infos.wallet = page case "faucet": infos.faucet = page } diff --git a/cmd/puppeth/wizard_ethstats.go b/cmd/puppeth/wizard_ethstats.go index 0d8fb0d8..95cab9da 100644 --- a/cmd/puppeth/wizard_ethstats.go +++ b/cmd/puppeth/wizard_ethstats.go @@ -20,7 +20,7 @@ import ( "fmt" "sort" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // deployEthstats queries the user for various input on deploying an ethstats @@ -63,20 +63,20 @@ func (w *wizard) deployEthstats() { fmt.Printf("What should be the secret password for the API? (default = %s)\n", infos.secret) infos.secret = w.readDefaultString(infos.secret) } - // Gather any blacklists to ban from reporting + // Gather any banned lists to ban from reporting if existed { fmt.Println() - fmt.Printf("Keep existing IP %v blacklist (y/n)? (default = yes)\n", infos.banned) + fmt.Printf("Keep existing IP %v in the banned list (y/n)? (default = yes)\n", infos.banned) if !w.readDefaultYesNo(true) { // The user might want to clear the entire list, although generally probably not fmt.Println() - fmt.Printf("Clear out blacklist and start over (y/n)? (default = no)\n") + fmt.Printf("Clear out the banned list and start over (y/n)? (default = no)\n") if w.readDefaultYesNo(false) { infos.banned = nil } // Offer the user to explicitly add/remove certain IP addresses fmt.Println() - fmt.Println("Which additional IP addresses should be blacklisted?") + fmt.Println("Which additional IP addresses should be in the banned list?") for { if ip := w.readIPAddress(); ip != "" { infos.banned = append(infos.banned, ip) @@ -85,7 +85,7 @@ func (w *wizard) deployEthstats() { break } fmt.Println() - fmt.Println("Which IP addresses should not be blacklisted?") + fmt.Println("Which IP addresses should not be in the banned list?") for { if ip := w.readIPAddress(); ip != "" { for i, addr := range infos.banned { diff --git a/cmd/puppeth/wizard_explorer.go b/cmd/puppeth/wizard_explorer.go index 59b50585..1df9cbc0 100644 --- a/cmd/puppeth/wizard_explorer.go +++ b/cmd/puppeth/wizard_explorer.go @@ -21,7 +21,7 @@ import ( "fmt" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // deployExplorer creates a new block explorer based on some user input. diff --git a/cmd/puppeth/wizard_faucet.go b/cmd/puppeth/wizard_faucet.go index 2b68d307..65d4e8b8 100644 --- a/cmd/puppeth/wizard_faucet.go +++ b/cmd/puppeth/wizard_faucet.go @@ -20,8 +20,8 @@ import ( "encoding/json" "fmt" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/log" ) // deployFaucet queries the user for various input on deploying a faucet, after @@ -102,6 +102,21 @@ func (w *wizard) deployFaucet() { infos.captchaSecret = w.readPassword() } } + // Accessing the Twitter API requires a bearer token, request it + if infos.twitterToken != "" { + fmt.Println() + fmt.Println("Reuse previous Twitter API token (y/n)? (default = yes)") + if !w.readDefaultYesNo(true) { + infos.twitterToken = "" + } + } + if infos.twitterToken == "" { + // No previous twitter token (or old one discarded) + fmt.Println() + fmt.Println() + fmt.Printf("What is the Twitter API app Bearer token?\n") + infos.twitterToken = w.readString() + } // Figure out where the user wants to store the persistent data fmt.Println() if infos.node.datadir == "" { diff --git a/cmd/puppeth/wizard_genesis.go b/cmd/puppeth/wizard_genesis.go index b94e5769..ac17bc7b 100644 --- a/cmd/puppeth/wizard_genesis.go +++ b/cmd/puppeth/wizard_genesis.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "math/big" "math/rand" "net/http" @@ -29,10 +28,10 @@ import ( "path/filepath" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) // makeGenesis creates a new genesis struct based on some user input. @@ -51,6 +50,7 @@ func (w *wizard) makeGenesis() { ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), }, } // Figure out which consensus engine to choose @@ -58,7 +58,6 @@ func (w *wizard) makeGenesis() { fmt.Println("Which consensus engine to use? (default = clique)") fmt.Println(" 1. Ethash - proof-of-work") fmt.Println(" 2. Clique - proof-of-authority") - fmt.Println(" 3. EccPoW - proof-of-work with LDPC") choice := w.read() switch { @@ -104,10 +103,6 @@ func (w *wizard) makeGenesis() { for i, signer := range signers { copy(genesis.ExtraData[32+i*common.AddressLength:], signer[:]) } - case choice == "3": - // In case of eccpow, we're pretty much done - genesis.Config.EccPoW = new(params.EccPoWConfig) - genesis.ExtraData = make([]byte, 32) default: log.Crit("Invalid consensus engine choice", "choice", choice) @@ -183,7 +178,7 @@ func (w *wizard) importGenesis() { // Parse the genesis file and inject it successful var genesis core.Genesis if err := json.NewDecoder(reader).Decode(&genesis); err != nil { - log.Error("Invalid genesis spec: %v", err) + log.Error("Invalid genesis spec", "err", err) return } log.Info("Imported genesis block") @@ -235,6 +230,18 @@ func (w *wizard) manageGenesis() { 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) + fmt.Println() + fmt.Printf("Which block should Istanbul come into effect? (default = %v)\n", w.conf.Genesis.Config.IstanbulBlock) + w.conf.Genesis.Config.IstanbulBlock = w.readDefaultBigInt(w.conf.Genesis.Config.IstanbulBlock) + + fmt.Println() + fmt.Printf("Which block should Berlin come into effect? (default = %v)\n", w.conf.Genesis.Config.BerlinBlock) + w.conf.Genesis.Config.BerlinBlock = w.readDefaultBigInt(w.conf.Genesis.Config.BerlinBlock) + + fmt.Println() + fmt.Printf("Which block should London come into effect? (default = %v)\n", w.conf.Genesis.Config.LondonBlock) + w.conf.Genesis.Config.LondonBlock = w.readDefaultBigInt(w.conf.Genesis.Config.LondonBlock) + out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", " ") fmt.Printf("Chain configuration updated:\n\n%s\n", out) @@ -243,8 +250,8 @@ func (w *wizard) manageGenesis() { case "2": // Save whatever genesis configuration we currently have fmt.Println() - fmt.Printf("Which folder to save the genesis specs into? (default = current)\n") - fmt.Printf(" Will create %s.json, %s-aleth.json, %s-harmony.json, %s-parity.json\n", w.network, w.network, w.network, w.network) + fmt.Printf("Which folder to save the genesis spec into? (default = current)\n") + fmt.Printf(" Will create %s.json\n", w.network) folder := w.readDefaultString(".") if err := os.MkdirAll(folder, 0755); err != nil { @@ -255,27 +262,12 @@ func (w *wizard) manageGenesis() { // Export the native genesis spec used by puppeth and Geth gethJson := filepath.Join(folder, fmt.Sprintf("%s.json", w.network)) - if err := ioutil.WriteFile((gethJson), out, 0644); err != nil { + if err := os.WriteFile(gethJson, out, 0644); err != nil { log.Error("Failed to save genesis file", "err", err) return } log.Info("Saved native genesis chain spec", "path", gethJson) - // Export the genesis spec used by Aleth (formerly C++ Ethereum) - if spec, err := newAlethGenesisSpec(w.network, w.conf.Genesis); err != nil { - log.Error("Failed to create Aleth chain spec", "err", err) - } else { - saveGenesis(folder, w.network, "aleth", spec) - } - // Export the genesis spec used by Parity - if spec, err := newParityChainSpec(w.network, w.conf.Genesis, []string{}); err != nil { - log.Error("Failed to create Parity chain spec", "err", err) - } else { - saveGenesis(folder, w.network, "parity", spec) - } - // Export the genesis spec used by Harmony (formerly EthereumJ - saveGenesis(folder, w.network, "harmony", w.conf.Genesis) - case "3": // Make sure we don't have any services running if len(w.conf.servers()) > 0 { @@ -291,15 +283,3 @@ func (w *wizard) manageGenesis() { return } } - -// saveGenesis JSON encodes an arbitrary genesis spec into a pre-defined file. -func saveGenesis(folder, network, client string, spec interface{}) { - path := filepath.Join(folder, fmt.Sprintf("%s-%s.json", network, client)) - - out, _ := json.Marshal(spec) - if err := ioutil.WriteFile(path, out, 0644); err != nil { - log.Error("Failed to save genesis file", "client", client, "err", err) - return - } - log.Info("Saved genesis chain spec", "client", client, "path", path) -} diff --git a/cmd/puppeth/wizard_intro.go b/cmd/puppeth/wizard_intro.go index b77325a9..adac943c 100644 --- a/cmd/puppeth/wizard_intro.go +++ b/cmd/puppeth/wizard_intro.go @@ -17,16 +17,13 @@ package main import ( - "bufio" "encoding/json" "fmt" - "io/ioutil" "os" "path/filepath" "strings" - "sync" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // makeWizard creates and returns a new puppeth wizard. @@ -38,7 +35,6 @@ func makeWizard(network string) *wizard { }, servers: make(map[string]*sshClient), services: make(map[string][]string), - in: bufio.NewReader(os.Stdin), } } @@ -76,31 +72,23 @@ func (w *wizard) run() { // Load initial configurations and connect to all live servers w.conf.path = filepath.Join(os.Getenv("HOME"), ".puppeth", w.network) - blob, err := ioutil.ReadFile(w.conf.path) + blob, err := os.ReadFile(w.conf.path) if err != nil { log.Warn("No previous configurations found", "path", w.conf.path) } else if err := json.Unmarshal(blob, &w.conf); err != nil { log.Crit("Previous configuration corrupted", "path", w.conf.path, "err", err) } else { - // Dial all previously known servers concurrently - var pend sync.WaitGroup + // Dial all previously known servers for server, pubkey := range w.conf.Servers { - pend.Add(1) - - go func(server string, pubkey []byte) { - defer pend.Done() - - log.Info("Dialing previously configured server", "server", server) - client, err := dial(server, pubkey) - if err != nil { - log.Error("Previous server unreachable", "server", server, "err", err) - } - w.lock.Lock() - w.servers[server] = client - w.lock.Unlock() - }(server, pubkey) + log.Info("Dialing previously configured server", "server", server) + client, err := dial(server, pubkey) + if err != nil { + log.Error("Previous server unreachable", "server", server, "err", err) + } + w.lock.Lock() + w.servers[server] = client + w.lock.Unlock() } - pend.Wait() w.networkStats() } // Basics done, loop ad infinitum about what to do diff --git a/cmd/puppeth/wizard_netstats.go b/cmd/puppeth/wizard_netstats.go index d78bfdd8..7b5671e6 100644 --- a/cmd/puppeth/wizard_netstats.go +++ b/cmd/puppeth/wizard_netstats.go @@ -23,8 +23,8 @@ import ( "strings" "sync" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/log" "github.com/olekukonko/tablewriter" ) @@ -141,14 +141,6 @@ func (w *wizard) gatherStats(server string, pubkey []byte, client *sshClient) *s } else { stat.services["explorer"] = infos.Report() } - logger.Debug("Checking for wallet availability") - if infos, err := checkWallet(client, w.network); err != nil { - if err != ErrServiceUnknown { - stat.services["wallet"] = map[string]string{"offline": err.Error()} - } - } else { - stat.services["wallet"] = infos.Report() - } logger.Debug("Checking for faucet availability") if infos, err := checkFaucet(client, w.network); err != nil { if err != ErrServiceUnknown { diff --git a/cmd/puppeth/wizard_network.go b/cmd/puppeth/wizard_network.go index 32ac5120..d015e06e 100644 --- a/cmd/puppeth/wizard_network.go +++ b/cmd/puppeth/wizard_network.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // manageServers displays a list of servers the user can disconnect from, and an @@ -175,9 +175,8 @@ func (w *wizard) deployComponent() { 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") - 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") + fmt.Println(" 5. Faucet - Crypto faucet to give away funds") + fmt.Println(" 6. Dashboard - Website listing above web-services") switch w.read() { case "1": @@ -189,10 +188,8 @@ func (w *wizard) deployComponent() { case "4": w.deployExplorer() case "5": - w.deployWallet() - case "6": w.deployFaucet() - case "7": + case "6": w.deployDashboard() default: log.Error("That's not something I can do") diff --git a/cmd/puppeth/wizard_nginx.go b/cmd/puppeth/wizard_nginx.go index bee81b3e..8397b7fd 100644 --- a/cmd/puppeth/wizard_nginx.go +++ b/cmd/puppeth/wizard_nginx.go @@ -19,7 +19,7 @@ package main import ( "fmt" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // ensureVirtualHost checks whether a reverse-proxy is running on the specified diff --git a/cmd/puppeth/wizard_node.go b/cmd/puppeth/wizard_node.go index f1a8abfb..2bae3321 100644 --- a/cmd/puppeth/wizard_node.go +++ b/cmd/puppeth/wizard_node.go @@ -21,9 +21,9 @@ import ( "fmt" "time" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" ) // deployNode creates a new node configuration based on some user input. @@ -146,21 +146,6 @@ func (w *wizard) deployNode(boot bool) { return } } - } else if w.conf.Genesis.Config.EccPoW != nil { - // Ethash based miners only need an etherbase to mine against - fmt.Println() - if infos.etherbase == "" { - fmt.Printf("What address should the miner use?\n") - for { - if address := w.readAddress(); address != nil { - infos.etherbase = address.Hex() - break - } - } - } else { - fmt.Printf("What address should the miner use? (default = %s)\n", infos.etherbase) - infos.etherbase = w.readDefaultAddress(common.HexToAddress(infos.etherbase)).Hex() - } } // Establish the gas dynamics to be enforced by the signer fmt.Println() diff --git a/cmd/puppeth/wizard_wallet.go b/cmd/puppeth/wizard_wallet.go deleted file mode 100644 index 70d1b25b..00000000 --- a/cmd/puppeth/wizard_wallet.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 ( - "encoding/json" - "fmt" - "time" - - "github.com/cryptoecc/ETH-ECC/log" -) - -// deployWallet creates a new web wallet based on some user input. -func (w *wizard) deployWallet() { - // Do some sanity check before the user wastes time on input - if w.conf.Genesis == nil { - log.Error("No genesis block configured") - return - } - if w.conf.ethstats == "" { - log.Error("No ethstats server configured") - return - } - // Select the server to interact with - server := w.selectServer() - if server == "" { - return - } - client := w.servers[server] - - // Retrieve any active node configurations from the server - infos, err := checkWallet(client, w.network) - if err != nil { - infos = &walletInfos{ - nodePort: 30303, rpcPort: 8545, webPort: 80, webHost: client.server, - } - } - existed := err == nil - - infos.genesis, _ = json.MarshalIndent(w.conf.Genesis, "", " ") - infos.network = w.conf.Genesis.Config.ChainID.Int64() - - // Figure out which port to listen on - fmt.Println() - fmt.Printf("Which port should the wallet listen on? (default = %d)\n", infos.webPort) - infos.webPort = w.readDefaultInt(infos.webPort) - - // Figure which virtual-host to deploy ethstats on - if infos.webHost, err = w.ensureVirtualHost(client, infos.webPort, infos.webHost); err != nil { - log.Error("Failed to decide on wallet 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() - } else { - fmt.Printf("Where should data be stored on the remote machine? (default = %s)\n", infos.datadir) - infos.datadir = w.readDefaultString(infos.datadir) - } - // Figure out which port to listen on - fmt.Println() - fmt.Printf("Which TCP/UDP port should the backing node listen on? (default = %d)\n", infos.nodePort) - infos.nodePort = w.readDefaultInt(infos.nodePort) - - fmt.Println() - fmt.Printf("Which port should the backing RPC API listen on? (default = %d)\n", infos.rpcPort) - infos.rpcPort = w.readDefaultInt(infos.rpcPort) - - // Set a proper name to report on the stats page - fmt.Println() - if infos.ethstats == "" { - fmt.Printf("What should the wallet be called on the stats page?\n") - infos.ethstats = w.readString() + ":" + w.conf.ethstats - } else { - fmt.Printf("What should the wallet be called on the stats page? (default = %s)\n", infos.ethstats) - infos.ethstats = w.readDefaultString(infos.ethstats) + ":" + w.conf.ethstats - } - // Try to deploy the wallet on the host - nocache := false - if existed { - fmt.Println() - fmt.Printf("Should the wallet be built from scratch (y/n)? (default = no)\n") - nocache = w.readDefaultYesNo(false) - } - if out, err := deployWallet(client, w.network, w.conf.bootnodes, infos, nocache); err != nil { - log.Error("Failed to deploy wallet container", "err", err) - if len(out) > 0 { - fmt.Printf("%s\n", out) - } - return - } - // All ok, run a network scan to pick any changes up - log.Info("Waiting for node to finish booting") - time.Sleep(3 * time.Second) - - w.networkStats() -} diff --git a/cmd/rlpdump/main.go b/cmd/rlpdump/main.go index ac38b0c6..70337749 100644 --- a/cmd/rlpdump/main.go +++ b/cmd/rlpdump/main.go @@ -18,7 +18,9 @@ package main import ( + "bufio" "bytes" + "container/list" "encoding/hex" "flag" "fmt" @@ -26,18 +28,20 @@ import ( "os" "strings" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" ) var ( - hexMode = flag.String("hex", "", "dump given hex data") - noASCII = flag.Bool("noascii", false, "don't print ASCII strings readably") - single = flag.Bool("single", false, "print only the first element, discard the rest") + hexMode = flag.String("hex", "", "dump given hex data") + reverseMode = flag.Bool("reverse", false, "convert ASCII to rlp") + noASCII = flag.Bool("noascii", false, "don't print ASCII strings readably") + single = flag.Bool("single", false, "print only the first element, discard the rest") ) func init() { flag.Usage = func() { - fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "[-noascii] [-hex ] [filename]") + fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "[-noascii] [-hex ][-reverse] [filename]") flag.PrintDefaults() fmt.Fprintln(os.Stderr, ` Dumps RLP data from the given file in readable form. @@ -73,23 +77,40 @@ func main() { flag.Usage() os.Exit(2) } + out := os.Stdout + if *reverseMode { + data, err := textToRlp(r) + if err != nil { + die(err) + } + fmt.Printf("%#x\n", data) + return + } else { + err := rlpToText(r, out) + if err != nil { + die(err) + } + } +} +func rlpToText(r io.Reader, out io.Writer) error { s := rlp.NewStream(r, 0) for { - if err := dump(s, 0); err != nil { + if err := dump(s, 0, out); err != nil { if err != io.EOF { - die(err) + return err } break } - fmt.Println() + fmt.Fprintln(out) if *single { break } } + return nil } -func dump(s *rlp.Stream, depth int) error { +func dump(s *rlp.Stream, depth int, out io.Writer) error { kind, size, err := s.Kind() if err != nil { return err @@ -101,28 +122,28 @@ func dump(s *rlp.Stream, depth int) error { return err } if len(str) == 0 || !*noASCII && isASCII(str) { - fmt.Printf("%s%q", ws(depth), str) + fmt.Fprintf(out, "%s%q", ws(depth), str) } else { - fmt.Printf("%s%x", ws(depth), str) + fmt.Fprintf(out, "%s%x", ws(depth), str) } case rlp.List: s.List() defer s.ListEnd() if size == 0 { - fmt.Print(ws(depth) + "[]") + fmt.Fprintf(out, ws(depth)+"[]") } else { - fmt.Println(ws(depth) + "[") + fmt.Fprintln(out, ws(depth)+"[") for i := 0; ; i++ { if i > 0 { - fmt.Print(",\n") + fmt.Fprint(out, ",\n") } - if err := dump(s, depth+1); err == rlp.EOL { + if err := dump(s, depth+1, out); err == rlp.EOL { break } else if err != nil { return err } } - fmt.Print(ws(depth) + "]") + fmt.Fprint(out, ws(depth)+"]") } } return nil @@ -145,3 +166,45 @@ func die(args ...interface{}) { fmt.Fprintln(os.Stderr, args...) os.Exit(1) } + +// textToRlp converts text into RLP (best effort). +func textToRlp(r io.Reader) ([]byte, error) { + // We're expecting the input to be well-formed, meaning that + // - each element is on a separate line + // - each line is either an (element OR a list start/end) + comma + // - an element is either hex-encoded bytes OR a quoted string + var ( + scanner = bufio.NewScanner(r) + obj []interface{} + stack = list.New() + ) + for scanner.Scan() { + t := strings.TrimSpace(scanner.Text()) + if len(t) == 0 { + continue + } + switch t { + case "[": // list start + stack.PushFront(obj) + obj = make([]interface{}, 0) + case "]", "],": // list end + parent := stack.Remove(stack.Front()).([]interface{}) + obj = append(parent, obj) + case "[],": // empty list + obj = append(obj, make([]interface{}, 0)) + default: // element + data := []byte(t)[:len(t)-1] // cut off comma + if data[0] == '"' { // ascii string + data = []byte(t)[1 : len(data)-1] + } else { // hex data + data = common.FromHex(string(data)) + } + obj = append(obj, data) + } + } + if err := scanner.Err(); err != nil { + return nil, err + } + data, err := rlp.EncodeToBytes(obj[0]) + return data, err +} diff --git a/cmd/rlpdump/rlpdump_test.go b/cmd/rlpdump/rlpdump_test.go new file mode 100644 index 00000000..a9ab57fd --- /dev/null +++ b/cmd/rlpdump/rlpdump_test.go @@ -0,0 +1,81 @@ +// Copyright 2021 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" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +func TestRoundtrip(t *testing.T) { + for i, want := range []string{ + "0xf880806482520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a1010000000000000000000000000000000000000000000000000000000000000001801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28", + "0xd5c0d3cb84746573742a2a808213378667617a6f6e6b", + "0xc780c0c1c0825208", + } { + var out strings.Builder + err := rlpToText(bytes.NewReader(common.FromHex(want)), &out) + if err != nil { + t.Fatal(err) + } + text := out.String() + rlpBytes, err := textToRlp(strings.NewReader(text)) + if err != nil { + t.Errorf("test %d: error %v", i, err) + continue + } + have := fmt.Sprintf("%#x", rlpBytes) + if have != want { + t.Errorf("test %d: have\n%v\nwant:\n%v\n", i, have, want) + } + } +} + +func TestTextToRlp(t *testing.T) { + type tc struct { + text string + want string + } + cases := []tc{ + { + text: `[ + "", + [], +[ + [], + ], + 5208, +]`, + want: "0xc780c0c1c0825208", + }, + } + for i, tc := range cases { + have, err := textToRlp(strings.NewReader(tc.text)) + if err != nil { + t.Errorf("test %d: error %v", i, err) + continue + } + if hexutil.Encode(have) != tc.want { + t.Errorf("test %d:\nhave %v\nwant %v", i, hexutil.Encode(have), tc.want) + } + } +} diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 91d309db..90f00904 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -18,7 +18,9 @@ package utils import ( + "bufio" "compress/gzip" + "errors" "fmt" "io" "os" @@ -26,17 +28,20 @@ import ( "runtime" "strings" "syscall" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/internal/debug" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/crypto" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/rlp" + "github.com/urfave/cli/v2" ) const ( @@ -63,7 +68,7 @@ func Fatalf(format string, args ...interface{}) { os.Exit(1) } -func StartNode(stack *node.Node) { +func StartNode(ctx *cli.Context, stack *node.Node, isConsole bool) { if err := stack.Start(); err != nil { Fatalf("Error starting protocol stack: %v", err) } @@ -71,20 +76,65 @@ func StartNode(stack *node.Node) { sigc := make(chan os.Signal, 1) signal.Notify(sigc, syscall.SIGINT, syscall.SIGTERM) defer signal.Stop(sigc) - <-sigc - log.Info("Got interrupt, shutting down...") - go stack.Stop() - for i := 10; i > 0; i-- { - <-sigc - if i > 1 { - log.Warn("Already shutting down, interrupt more to panic.", "times", i-1) + + minFreeDiskSpace := 2 * ethconfig.Defaults.TrieDirtyCache // Default 2 * 256Mb + if ctx.IsSet(MinFreeDiskSpaceFlag.Name) { + minFreeDiskSpace = ctx.Int(MinFreeDiskSpaceFlag.Name) + } else if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) { + minFreeDiskSpace = 2 * ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100 + } + if minFreeDiskSpace > 0 { + go monitorFreeDiskSpace(sigc, stack.InstanceDir(), uint64(minFreeDiskSpace)*1024*1024) + } + + shutdown := func() { + log.Info("Got interrupt, shutting down...") + go stack.Close() + for i := 10; i > 0; i-- { + <-sigc + if i > 1 { + log.Warn("Already shutting down, interrupt more to panic.", "times", i-1) + } } + debug.Exit() // ensure trace and CPU profile data is flushed. + debug.LoudPanic("boom") + } + + if isConsole { + // In JS console mode, SIGINT is ignored because it's handled by the console. + // However, SIGTERM still shuts down the node. + for { + sig := <-sigc + if sig == syscall.SIGTERM { + shutdown() + return + } + } + } else { + <-sigc + shutdown() } - debug.Exit() // ensure trace and CPU profile data is flushed. - debug.LoudPanic("boom") }() } +func monitorFreeDiskSpace(sigc chan os.Signal, path string, freeDiskSpaceCritical uint64) { + for { + freeSpace, err := getFreeDiskSpace(path) + if err != nil { + log.Warn("Failed to get free disk space", "path", path, "err", err) + break + } + if freeSpace < freeDiskSpaceCritical { + log.Error("Low disk space. Gracefully shutting down Geth to prevent database corruption.", "available", common.StorageSize(freeSpace)) + sigc <- syscall.SIGTERM + break + } else if freeSpace < 2*freeDiskSpaceCritical { + log.Warn("Disk space is running low. Geth will shutdown if disk space runs below critical level.", "available", common.StorageSize(freeSpace), "critical_level", common.StorageSize(freeDiskSpaceCritical)) + } + time.Sleep(30 * time.Second) + } +} + func ImportChain(chain *core.BlockChain, fn string) error { // Watch for Ctrl-C while the import is running. // If a signal is received, the import will stop at the next batch. @@ -238,6 +288,7 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las } // ImportPreimages imports a batch of exported hash preimages into the database. +// It's a part of the deprecated functionality, should be removed in the future. func ImportPreimages(db ethdb.Database, fn string) error { log.Info("Importing preimages", "file", fn) @@ -248,7 +299,7 @@ func ImportPreimages(db ethdb.Database, fn string) error { } defer fh.Close() - var reader io.Reader = fh + var reader io.Reader = bufio.NewReader(fh) if strings.HasSuffix(fn, ".gz") { if reader, err = gzip.NewReader(reader); err != nil { return err @@ -256,7 +307,7 @@ func ImportPreimages(db ethdb.Database, fn string) error { } stream := rlp.NewStream(reader, 0) - // Import the preimages in batches to prevent disk trashing + // Import the preimages in batches to prevent disk thrashing preimages := make(map[common.Hash][]byte) for { @@ -285,6 +336,7 @@ func ImportPreimages(db ethdb.Database, fn string) error { // ExportPreimages exports all known hash preimages into the specified file, // truncating any data already present in the file. +// It's a part of the deprecated functionality, should be removed in the future. func ExportPreimages(db ethdb.Database, fn string) error { log.Info("Exporting preimages", "file", fn) @@ -301,7 +353,7 @@ func ExportPreimages(db ethdb.Database, fn string) error { defer writer.(*gzip.Writer).Close() } // Iterate over the preimages and export them - it := db.NewIteratorWithPrefix([]byte("secure-key-")) + it := db.NewIterator([]byte("secure-key-"), nil) defer it.Release() for it.Next() { @@ -312,3 +364,207 @@ func ExportPreimages(db ethdb.Database, fn string) error { log.Info("Exported preimages", "file", fn) return nil } + +// exportHeader is used in the export/import flow. When we do an export, +// the first element we output is the exportHeader. +// Whenever a backwards-incompatible change is made, the Version header +// should be bumped. +// If the importer sees a higher version, it should reject the import. +type exportHeader struct { + Magic string // Always set to 'gethdbdump' for disambiguation + Version uint64 + Kind string + UnixTime uint64 +} + +const exportMagic = "gethdbdump" +const ( + OpBatchAdd = 0 + OpBatchDel = 1 +) + +// ImportLDBData imports a batch of snapshot data into the database +func ImportLDBData(db ethdb.Database, f string, startIndex int64, interrupt chan struct{}) error { + log.Info("Importing leveldb data", "file", f) + + // Open the file handle and potentially unwrap the gzip stream + fh, err := os.Open(f) + if err != nil { + return err + } + defer fh.Close() + + var reader io.Reader = bufio.NewReader(fh) + if strings.HasSuffix(f, ".gz") { + if reader, err = gzip.NewReader(reader); err != nil { + return err + } + } + stream := rlp.NewStream(reader, 0) + + // Read the header + var header exportHeader + if err := stream.Decode(&header); err != nil { + return fmt.Errorf("could not decode header: %v", err) + } + if header.Magic != exportMagic { + return errors.New("incompatible data, wrong magic") + } + if header.Version != 0 { + return fmt.Errorf("incompatible version %d, (support only 0)", header.Version) + } + log.Info("Importing data", "file", f, "type", header.Kind, "data age", + common.PrettyDuration(time.Since(time.Unix(int64(header.UnixTime), 0)))) + + // Import the snapshot in batches to prevent disk thrashing + var ( + count int64 + start = time.Now() + logged = time.Now() + batch = db.NewBatch() + ) + for { + // Read the next entry + var ( + op byte + key, val []byte + ) + if err := stream.Decode(&op); err != nil { + if err == io.EOF { + break + } + return err + } + if err := stream.Decode(&key); err != nil { + return err + } + if err := stream.Decode(&val); err != nil { + return err + } + if count < startIndex { + count++ + continue + } + switch op { + case OpBatchDel: + batch.Delete(key) + case OpBatchAdd: + batch.Put(key, val) + default: + return fmt.Errorf("unknown op %d\n", op) + } + if batch.ValueSize() > ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + return err + } + batch.Reset() + } + // Check interruption emitted by ctrl+c + if count%1000 == 0 { + select { + case <-interrupt: + if err := batch.Write(); err != nil { + return err + } + log.Info("External data import interrupted", "file", f, "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + return nil + default: + } + } + if count%1000 == 0 && time.Since(logged) > 8*time.Second { + log.Info("Importing external data", "file", f, "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + count += 1 + } + // Flush the last batch snapshot data + if batch.ValueSize() > 0 { + if err := batch.Write(); err != nil { + return err + } + } + log.Info("Imported chain data", "file", f, "count", count, + "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} + +// ChainDataIterator is an interface wraps all necessary functions to iterate +// the exporting chain data. +type ChainDataIterator interface { + // Next returns the key-value pair for next exporting entry in the iterator. + // When the end is reached, it will return (0, nil, nil, false). + Next() (byte, []byte, []byte, bool) + + // Release releases associated resources. Release should always succeed and can + // be called multiple times without causing error. + Release() +} + +// ExportChaindata exports the given data type (truncating any data already present) +// in the file. If the suffix is 'gz', gzip compression is used. +func ExportChaindata(fn string, kind string, iter ChainDataIterator, interrupt chan struct{}) error { + log.Info("Exporting chain data", "file", fn, "kind", kind) + defer iter.Release() + + // Open the file handle and potentially wrap with a gzip stream + fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) + if err != nil { + return err + } + defer fh.Close() + + var writer io.Writer = fh + if strings.HasSuffix(fn, ".gz") { + writer = gzip.NewWriter(writer) + defer writer.(*gzip.Writer).Close() + } + // Write the header + if err := rlp.Encode(writer, &exportHeader{ + Magic: exportMagic, + Version: 0, + Kind: kind, + UnixTime: uint64(time.Now().Unix()), + }); err != nil { + return err + } + // Extract data from source iterator and dump them out to file + var ( + count int64 + start = time.Now() + logged = time.Now() + ) + for { + op, key, val, ok := iter.Next() + if !ok { + break + } + if err := rlp.Encode(writer, op); err != nil { + return err + } + if err := rlp.Encode(writer, key); err != nil { + return err + } + if err := rlp.Encode(writer, val); err != nil { + return err + } + if count%1000 == 0 { + // Check interruption emitted by ctrl+c + select { + case <-interrupt: + log.Info("Chain data exporting interrupted", "file", fn, + "kind", kind, "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + return nil + default: + } + if time.Since(logged) > 8*time.Second { + log.Info("Exporting chain data", "file", fn, "kind", kind, + "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + count++ + } + log.Info("Exported chain data", "file", fn, "kind", kind, "count", count, + "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} diff --git a/cmd/utils/customflags.go b/cmd/utils/customflags.go deleted file mode 100644 index d6c23cc8..00000000 --- a/cmd/utils/customflags.go +++ /dev/null @@ -1,232 +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 utils - -import ( - "encoding" - "errors" - "flag" - "math/big" - "os" - "os/user" - "path" - "strings" - - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/urfave/cli" -) - -// 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 string - -func (s *DirectoryString) String() string { - return string(*s) -} - -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 - EnvVar string -} - -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)) { - parts := strings.Split(longName, ",") - for _, name := range parts { - name = strings.Trim(name, " ") - fn(name) - } -} - -type TextMarshaler interface { - encoding.TextMarshaler - encoding.TextUnmarshaler -} - -// textMarshalerVal turns a TextMarshaler into a flag.Value -type textMarshalerVal struct { - v TextMarshaler -} - -func (v textMarshalerVal) String() string { - if v.v == nil { - return "" - } - text, _ := v.v.MarshalText() - return string(text) -} - -func (v textMarshalerVal) Set(s string) error { - return v.v.UnmarshalText([]byte(s)) -} - -// TextMarshalerFlag wraps a TextMarshaler value. -type TextMarshalerFlag struct { - Name string - Value TextMarshaler - Usage string - EnvVar string -} - -func (f TextMarshalerFlag) GetName() string { - return f.Name -} - -func (f TextMarshalerFlag) String() string { - return cli.FlagStringer(f) -} - -func (f TextMarshalerFlag) Apply(set *flag.FlagSet) { - eachName(f.Name, func(name string) { - set.Var(textMarshalerVal{f.Value}, f.Name, f.Usage) - }) -} - -// GlobalTextMarshaler returns the value of a TextMarshalerFlag from the global flag set. -func GlobalTextMarshaler(ctx *cli.Context, name string) TextMarshaler { - val := ctx.GlobalGeneric(name) - if val == nil { - return nil - } - return val.(textMarshalerVal).v -} - -// 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 - EnvVar string -} - -// bigValue turns *big.Int into a flag.Value -type bigValue big.Int - -func (b *bigValue) String() string { - if b == nil { - return "" - } - return (*big.Int)(b).String() -} - -func (b *bigValue) Set(s string) error { - int, ok := math.ParseBig256(s) - if !ok { - return errors.New("invalid integer syntax") - } - *b = (bigValue)(*int) - return nil -} - -func (f BigFlag) GetName() string { - return f.Name -} - -func (f BigFlag) String() string { - return cli.FlagStringer(f) -} - -func (f BigFlag) Apply(set *flag.FlagSet) { - eachName(f.Name, func(name string) { - set.Var((*bigValue)(f.Value), f.Name, f.Usage) - }) -} - -// GlobalBig returns the value of a BigFlag from the global flag set. -func GlobalBig(ctx *cli.Context, name string) *big.Int { - val := ctx.GlobalGeneric(name) - if val == nil { - return nil - } - return (*big.Int)(val.(*bigValue)) -} - -func prefixFor(name string) (prefix string) { - if len(name) == 1 { - prefix = "-" - } else { - prefix = "--" - } - - return -} - -func prefixedNames(fullName string) (prefixed string) { - parts := strings.Split(fullName, ",") - for i, name := range parts { - name = strings.Trim(name, " ") - prefixed += prefixFor(name) + name - if i < len(parts)-1 { - prefixed += ", " - } - } - return -} - -// 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 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/utils/diskusage.go b/cmd/utils/diskusage.go new file mode 100644 index 00000000..0e88f919 --- /dev/null +++ b/cmd/utils/diskusage.go @@ -0,0 +1,44 @@ +// Copyright 2021 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 . + +//go:build !windows && !openbsd +// +build !windows,!openbsd + +package utils + +import ( + "fmt" + + "golang.org/x/sys/unix" +) + +func getFreeDiskSpace(path string) (uint64, error) { + var stat unix.Statfs_t + if err := unix.Statfs(path, &stat); err != nil { + return 0, fmt.Errorf("failed to call Statfs: %v", err) + } + + // Available blocks * size per block = available space in bytes + var bavail = stat.Bavail + // nolint:staticcheck + if stat.Bavail < 0 { + // FreeBSD can have a negative number of blocks available + // because of the grace limit. + bavail = 0 + } + //nolint:unconvert + return uint64(bavail) * uint64(stat.Bsize), nil +} diff --git a/cmd/utils/diskusage_openbsd.go b/cmd/utils/diskusage_openbsd.go new file mode 100644 index 00000000..0d71d84a --- /dev/null +++ b/cmd/utils/diskusage_openbsd.go @@ -0,0 +1,44 @@ +// Copyright 2021 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 . + +//go:build openbsd +// +build openbsd + +package utils + +import ( + "fmt" + + "golang.org/x/sys/unix" +) + +func getFreeDiskSpace(path string) (uint64, error) { + var stat unix.Statfs_t + if err := unix.Statfs(path, &stat); err != nil { + return 0, fmt.Errorf("failed to call Statfs: %v", err) + } + + // Available blocks * size per block = available space in bytes + var bavail = stat.F_bavail + // Not sure if the following check is necessary for OpenBSD + if stat.F_bavail < 0 { + // FreeBSD can have a negative number of blocks available + // because of the grace limit. + bavail = 0 + } + //nolint:unconvert + return uint64(bavail) * uint64(stat.F_bsize), nil +} diff --git a/cmd/utils/diskusage_windows.go b/cmd/utils/diskusage_windows.go new file mode 100644 index 00000000..db314493 --- /dev/null +++ b/cmd/utils/diskusage_windows.go @@ -0,0 +1,38 @@ +// Copyright 2021 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 utils + +import ( + "fmt" + + "golang.org/x/sys/windows" +) + +func getFreeDiskSpace(path string) (uint64, error) { + + cwd, err := windows.UTF16PtrFromString(path) + if err != nil { + return 0, fmt.Errorf("failed to call UTF16PtrFromString: %v", err) + } + + var freeBytesAvailableToCaller, totalNumberOfBytes, totalNumberOfFreeBytes uint64 + if err := windows.GetDiskFreeSpaceEx(cwd, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes); err != nil { + return 0, fmt.Errorf("failed to call GetDiskFreeSpaceEx: %v", err) + } + + return freeBytesAvailableToCaller, nil +} diff --git a/cmd/utils/export_test.go b/cmd/utils/export_test.go new file mode 100644 index 00000000..445e3fac --- /dev/null +++ b/cmd/utils/export_test.go @@ -0,0 +1,198 @@ +// Copyright 2021 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 utils + +import ( + "fmt" + "os" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/rlp" +) + +// TestExport does basic sanity checks on the export/import functionality +func TestExport(t *testing.T) { + f := fmt.Sprintf("%v/tempdump", os.TempDir()) + defer func() { + os.Remove(f) + }() + testExport(t, f) +} + +func TestExportGzip(t *testing.T) { + f := fmt.Sprintf("%v/tempdump.gz", os.TempDir()) + defer func() { + os.Remove(f) + }() + testExport(t, f) +} + +type testIterator struct { + index int +} + +func newTestIterator() *testIterator { + return &testIterator{index: -1} +} + +func (iter *testIterator) Next() (byte, []byte, []byte, bool) { + if iter.index >= 999 { + return 0, nil, nil, false + } + iter.index += 1 + if iter.index == 42 { + iter.index += 1 + } + return OpBatchAdd, []byte(fmt.Sprintf("key-%04d", iter.index)), + []byte(fmt.Sprintf("value %d", iter.index)), true +} + +func (iter *testIterator) Release() {} + +func testExport(t *testing.T, f string) { + err := ExportChaindata(f, "testdata", newTestIterator(), make(chan struct{})) + if err != nil { + t.Fatal(err) + } + db := rawdb.NewMemoryDatabase() + err = ImportLDBData(db, f, 5, make(chan struct{})) + if err != nil { + t.Fatal(err) + } + // verify + for i := 0; i < 1000; i++ { + v, err := db.Get([]byte(fmt.Sprintf("key-%04d", i))) + if (i < 5 || i == 42) && err == nil { + t.Fatalf("expected no element at idx %d, got '%v'", i, string(v)) + } + if !(i < 5 || i == 42) { + if err != nil { + t.Fatalf("expected element idx %d: %v", i, err) + } + if have, want := string(v), fmt.Sprintf("value %d", i); have != want { + t.Fatalf("have %v, want %v", have, want) + } + } + } + v, err := db.Get([]byte(fmt.Sprintf("key-%04d", 1000))) + if err == nil { + t.Fatalf("expected no element at idx %d, got '%v'", 1000, string(v)) + } +} + +// testDeletion tests if the deletion markers can be exported/imported correctly +func TestDeletionExport(t *testing.T) { + f := fmt.Sprintf("%v/tempdump", os.TempDir()) + defer func() { + os.Remove(f) + }() + testDeletion(t, f) +} + +// TestDeletionExportGzip tests if the deletion markers can be exported/imported +// correctly with gz compression. +func TestDeletionExportGzip(t *testing.T) { + f := fmt.Sprintf("%v/tempdump.gz", os.TempDir()) + defer func() { + os.Remove(f) + }() + testDeletion(t, f) +} + +type deletionIterator struct { + index int +} + +func newDeletionIterator() *deletionIterator { + return &deletionIterator{index: -1} +} + +func (iter *deletionIterator) Next() (byte, []byte, []byte, bool) { + if iter.index >= 999 { + return 0, nil, nil, false + } + iter.index += 1 + if iter.index == 42 { + iter.index += 1 + } + return OpBatchDel, []byte(fmt.Sprintf("key-%04d", iter.index)), nil, true +} + +func (iter *deletionIterator) Release() {} + +func testDeletion(t *testing.T, f string) { + err := ExportChaindata(f, "testdata", newDeletionIterator(), make(chan struct{})) + if err != nil { + t.Fatal(err) + } + db := rawdb.NewMemoryDatabase() + for i := 0; i < 1000; i++ { + db.Put([]byte(fmt.Sprintf("key-%04d", i)), []byte(fmt.Sprintf("value %d", i))) + } + err = ImportLDBData(db, f, 5, make(chan struct{})) + if err != nil { + t.Fatal(err) + } + for i := 0; i < 1000; i++ { + v, err := db.Get([]byte(fmt.Sprintf("key-%04d", i))) + if i < 5 || i == 42 { + if err != nil { + t.Fatalf("expected element at idx %d, got '%v'", i, err) + } + if have, want := string(v), fmt.Sprintf("value %d", i); have != want { + t.Fatalf("have %v, want %v", have, want) + } + } + if !(i < 5 || i == 42) { + if err == nil { + t.Fatalf("expected no element idx %d: %v", i, string(v)) + } + } + } +} + +// TestImportFutureFormat tests that we reject unsupported future versions. +func TestImportFutureFormat(t *testing.T) { + f := fmt.Sprintf("%v/tempdump-future", os.TempDir()) + defer func() { + os.Remove(f) + }() + fh, err := os.OpenFile(f, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) + if err != nil { + t.Fatal(err) + } + defer fh.Close() + if err := rlp.Encode(fh, &exportHeader{ + Magic: exportMagic, + Version: 500, + Kind: "testdata", + UnixTime: uint64(time.Now().Unix()), + }); err != nil { + t.Fatal(err) + } + db2 := rawdb.NewMemoryDatabase() + err = ImportLDBData(db2, f, 0, make(chan struct{})) + if err == nil { + t.Fatal("Expected error, got none") + } + if !strings.HasPrefix(err.Error(), "incompatible version") { + t.Fatalf("wrong error: %v", err) + } +} diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 727dc7cf..fb2aa7c2 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -19,107 +19,57 @@ package utils import ( "crypto/ecdsa" - "errors" "fmt" - "io" - "io/ioutil" + "math" "math/big" "os" "path/filepath" + godebug "runtime/debug" "strconv" "strings" - "text/tabwriter" - "text/template" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/fdlimit" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/clique" - "github.com/cryptoecc/ETH-ECC/consensus/eccpow" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/dashboard" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethstats" - "github.com/cryptoecc/ETH-ECC/graphql" - "github.com/cryptoecc/ETH-ECC/les" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/metrics/influxdb" - "github.com/cryptoecc/ETH-ECC/miner" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" - whisper "github.com/cryptoecc/ETH-ECC/whisper/whisperv6" + "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/fdlimit" + "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/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + ethcatalyst "github.com/ethereum/go-ethereum/eth/catalyst" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/remotedb" + "github.com/ethereum/go-ethereum/ethstats" + "github.com/ethereum/go-ethereum/graphql" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/les" + lescatalyst "github.com/ethereum/go-ethereum/les/catalyst" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/metrics/exp" + "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/enode" + "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" pcsclite "github.com/gballet/go-libpcsclite" - cli "github.com/urfave/cli" + gopsutil "github.com/shirou/gopsutil/mem" + "github.com/urfave/cli/v2" ) -var ( - CommandHelpTemplate = `{{.cmd.Name}}{{if .cmd.Subcommands}} command{{end}}{{if .cmd.Flags}} [command options]{{end}} [arguments...] -{{if .cmd.Description}}{{.cmd.Description}} -{{end}}{{if .cmd.Subcommands}} -SUBCOMMANDS: - {{range .cmd.Subcommands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}}{{end}}{{if .categorizedFlags}} -{{range $idx, $categorized := .categorizedFlags}}{{$categorized.Name}} OPTIONS: -{{range $categorized.Flags}}{{"\t"}}{{.}} -{{end}} -{{end}}{{end}}` -) - -func init() { - cli.AppHelpTemplate = `{{.Name}} {{if .Flags}}[global options] {{end}}command{{if .Flags}} [command options]{{end}} [arguments...] - -VERSION: - {{.Version}} - -COMMANDS: - {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}}{{if .Flags}} -GLOBAL OPTIONS: - {{range .Flags}}{{.}} - {{end}}{{end}} -` - cli.CommandHelpTemplate = CommandHelpTemplate - cli.HelpPrinter = printHelp -} - -// NewApp creates an app with sane defaults. -func NewApp(gitCommit, gitDate, usage string) *cli.App { - app := cli.NewApp() - app.Name = filepath.Base(os.Args[0]) - app.Author = "" - app.Email = "" - 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. @@ -129,668 +79,948 @@ func printHelp(out io.Writer, templ string, data interface{}) { var ( // General settings - DataDirFlag = DirectoryFlag{ - Name: "datadir", - Usage: "Data directory for the databases and keystore", - Value: DirectoryString(node.DefaultDataDir()), - } - AncientFlag = DirectoryFlag{ - Name: "datadir.ancient", - Usage: "Data directory for ancient chain segments (default = inside chaindata)", - } - KeyStoreDirFlag = DirectoryFlag{ - Name: "keystore", - Usage: "Directory for the keystore (default = inside the datadir)", - } - NoUSBFlag = cli.BoolFlag{ - 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)", - Value: eth.DefaultConfig.NetworkId, - } - TestnetFlag = cli.BoolFlag{ - Name: "testnet", - Usage: "Ropsten network: pre-configured proof-of-work test network", - } - RinkebyFlag = cli.BoolFlag{ - Name: "rinkeby", - Usage: "Rinkeby network: pre-configured proof-of-authority test network", - } - GoerliFlag = cli.BoolFlag{ - Name: "goerli", - Usage: "Görli network: pre-configured proof-of-authority test network", - } - // EccPoW settings - LveFlag = cli.BoolFlag{ - Name: "lve", - Usage: "LVE Network: Error-Correction Codes Proof-of-Work Main Network", - } - LvetestFlag = cli.BoolFlag{ - Name: "lvetest", - Usage: "LVE test network: Error-Correction Codes Proof-of-Work Test Network", - } - DeveloperFlag = cli.BoolFlag{ - Name: "dev", - Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", - } - DeveloperPeriodFlag = cli.IntFlag{ - Name: "dev.period", - Usage: "Block period to use in developer mode (0 = mine only if transaction pending)", - } - IdentityFlag = cli.StringFlag{ - Name: "identity", - Usage: "Custom node name", - } - DocRootFlag = DirectoryFlag{ - Name: "docroot", - Usage: "Document Root for HTTPClient file scheme", - Value: DirectoryString(homeDir()), - } - ExitWhenSyncedFlag = cli.BoolFlag{ - Name: "exitwhensynced", - Usage: "Exits after block synchronisation completes", - } - IterativeOutputFlag = cli.BoolFlag{ + DataDirFlag = &flags.DirectoryFlag{ + Name: "datadir", + Usage: "Data directory for the databases and keystore", + Value: flags.DirectoryString(node.DefaultDataDir()), + Category: flags.EthCategory, + } + RemoteDBFlag = &cli.StringFlag{ + Name: "remotedb", + Usage: "URL for remote database", + Category: flags.LoggingCategory, + } + AncientFlag = &flags.DirectoryFlag{ + Name: "datadir.ancient", + Usage: "Root directory for ancient data (default = inside chaindata)", + Category: flags.EthCategory, + } + MinFreeDiskSpaceFlag = &flags.DirectoryFlag{ + Name: "datadir.minfreedisk", + Usage: "Minimum free disk space in MB, once reached triggers auto shut down (default = --cache.gc converted to MB, 0 = disabled)", + Category: flags.EthCategory, + } + KeyStoreDirFlag = &flags.DirectoryFlag{ + Name: "keystore", + Usage: "Directory for the keystore (default = inside the datadir)", + Category: flags.AccountCategory, + } + USBFlag = &cli.BoolFlag{ + Name: "usb", + Usage: "Enable monitoring and management of USB hardware wallets", + Category: flags.AccountCategory, + } + SmartCardDaemonPathFlag = &cli.StringFlag{ + Name: "pcscdpath", + Usage: "Path to the smartcard daemon (pcscd) socket file", + Value: pcsclite.PCSCDSockName, + Category: flags.AccountCategory, + } + NetworkIdFlag = &cli.Uint64Flag{ + Name: "networkid", + Usage: "Explicitly set network id (integer)(For testnets: use --ropsten, --rinkeby, --goerli instead)", + Value: ethconfig.Defaults.NetworkId, + Category: flags.EthCategory, + } + MainnetFlag = &cli.BoolFlag{ + Name: "mainnet", + Usage: "Ethereum mainnet", + Category: flags.EthCategory, + } + RopstenFlag = &cli.BoolFlag{ + Name: "ropsten", + Usage: "Ropsten network: pre-configured proof-of-stake test network", + Category: flags.EthCategory, + } + RinkebyFlag = &cli.BoolFlag{ + Name: "rinkeby", + Usage: "Rinkeby network: pre-configured proof-of-authority test network", + Category: flags.EthCategory, + } + GoerliFlag = &cli.BoolFlag{ + Name: "goerli", + Usage: "Görli network: pre-configured proof-of-authority test network", + Category: flags.EthCategory, + } + SepoliaFlag = &cli.BoolFlag{ + Name: "sepolia", + Usage: "Sepolia network: pre-configured proof-of-work test network", + Category: flags.EthCategory, + } + KilnFlag = &cli.BoolFlag{ + Name: "kiln", + Usage: "Kiln network: pre-configured proof-of-work to proof-of-stake test network", + Category: flags.EthCategory, + } + + // Dev mode + DeveloperFlag = &cli.BoolFlag{ + Name: "dev", + Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", + Category: flags.DevCategory, + } + DeveloperPeriodFlag = &cli.IntFlag{ + Name: "dev.period", + Usage: "Block period to use in developer mode (0 = mine only if transaction pending)", + Category: flags.DevCategory, + } + DeveloperGasLimitFlag = &cli.Uint64Flag{ + Name: "dev.gaslimit", + Usage: "Initial block gas limit", + Value: 11500000, + Category: flags.DevCategory, + } + + IdentityFlag = &cli.StringFlag{ + Name: "identity", + Usage: "Custom node name", + Category: flags.NetworkingCategory, + } + DocRootFlag = &flags.DirectoryFlag{ + Name: "docroot", + Usage: "Document Root for HTTPClient file scheme", + Value: flags.DirectoryString(flags.HomeDir()), + Category: flags.APICategory, + } + ExitWhenSyncedFlag = &cli.BoolFlag{ + Name: "exitwhensynced", + Usage: "Exits after block synchronisation completes", + Category: flags.EthCategory, + } + + // Dump command options. + IterativeOutputFlag = &cli.BoolFlag{ Name: "iterative", Usage: "Print streaming JSON iteratively, delimited by newlines", + Value: true, } - ExcludeStorageFlag = cli.BoolFlag{ + ExcludeStorageFlag = &cli.BoolFlag{ Name: "nostorage", Usage: "Exclude storage entries (save db lookups)", } - IncludeIncompletesFlag = cli.BoolFlag{ + IncludeIncompletesFlag = &cli.BoolFlag{ Name: "incompletes", Usage: "Include accounts for which we don't have the address (missing preimage)", } - ExcludeCodeFlag = cli.BoolFlag{ + ExcludeCodeFlag = &cli.BoolFlag{ Name: "nocode", Usage: "Exclude contract code (save db lookups)", } - defaultSyncMode = eth.DefaultConfig.SyncMode - SyncModeFlag = TextMarshalerFlag{ - Name: "syncmode", - Usage: `Blockchain sync mode ("fast", "full", or "light")`, - Value: &defaultSyncMode, + StartKeyFlag = &cli.StringFlag{ + Name: "start", + Usage: "Start position. Either a hash or address", + Value: "0x0000000000000000000000000000000000000000000000000000000000000000", } - GCModeFlag = cli.StringFlag{ - Name: "gcmode", - Usage: `Blockchain garbage collection mode ("full", "archive")`, - Value: "full", - } - LightKDFFlag = cli.BoolFlag{ - Name: "lightkdf", - Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength", - } - WhitelistFlag = cli.StringFlag{ - Name: "whitelist", - Usage: "Comma separated block number-to-hash mappings to enforce (=)", + DumpLimitFlag = &cli.Uint64Flag{ + Name: "limit", + Usage: "Max number of elements (0 = no limit)", + Value: 0, } - OverrideIstanbulFlag = cli.Uint64Flag{ - Name: "override.istanbul", - Usage: "Manually specify Istanbul fork-block, overriding the bundled setting", + + defaultSyncMode = ethconfig.Defaults.SyncMode + SyncModeFlag = &flags.TextMarshalerFlag{ + Name: "syncmode", + Usage: `Blockchain sync mode ("snap", "full" or "light")`, + Value: &defaultSyncMode, + Category: flags.EthCategory, + } + GCModeFlag = &cli.StringFlag{ + Name: "gcmode", + Usage: `Blockchain garbage collection mode ("full", "archive")`, + Value: "full", + Category: flags.EthCategory, + } + SnapshotFlag = &cli.BoolFlag{ + Name: "snapshot", + Usage: `Enables snapshot-database mode (default = enable)`, + Value: true, + Category: flags.EthCategory, + } + TxLookupLimitFlag = &cli.Uint64Flag{ + Name: "txlookuplimit", + Usage: "Number of recent blocks to maintain transactions index for (default = about one year, 0 = entire chain)", + Value: ethconfig.Defaults.TxLookupLimit, + Category: flags.EthCategory, + } + LightKDFFlag = &cli.BoolFlag{ + Name: "lightkdf", + Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength", + Category: flags.AccountCategory, + } + EthRequiredBlocksFlag = &cli.StringFlag{ + Name: "eth.requiredblocks", + Usage: "Comma separated block number-to-hash mappings to require for peering (=)", + Category: flags.EthCategory, + } + LegacyWhitelistFlag = &cli.StringFlag{ + Name: "whitelist", + Usage: "Comma separated block number-to-hash mappings to enforce (=) (deprecated in favor of --eth.requiredblocks)", + Category: flags.DeprecatedCategory, + } + BloomFilterSizeFlag = &cli.Uint64Flag{ + Name: "bloomfilter.size", + Usage: "Megabytes of memory allocated to bloom-filter for pruning", + Value: 2048, + Category: flags.EthCategory, + } + OverrideTerminalTotalDifficulty = &flags.BigFlag{ + Name: "override.terminaltotaldifficulty", + Usage: "Manually specify TerminalTotalDifficulty, overriding the bundled setting", + Category: flags.EthCategory, + } + OverrideTerminalTotalDifficultyPassed = &cli.BoolFlag{ + Name: "override.terminaltotaldifficultypassed", + Usage: "Manually specify TerminalTotalDifficultyPassed, overriding the bundled setting", + Category: flags.EthCategory, } // 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: "dashboard", - Usage: "Enable the dashboard", - } - DashboardAddrFlag = cli.StringFlag{ - Name: "dashboard.addr", - Usage: "Dashboard listening interface", - Value: dashboard.DefaultConfig.Host, - } - DashboardPortFlag = cli.IntFlag{ - Name: "dashboard.host", - Usage: "Dashboard listening port", - Value: dashboard.DefaultConfig.Port, - } - DashboardRefreshFlag = cli.DurationFlag{ - Name: "dashboard.refresh", - Usage: "Dashboard metrics collection refresh rate", - Value: dashboard.DefaultConfig.Refresh, - } - // EccPoW settings - EccPoWFlag = cli.BoolFlag{ - Name: "eccpow", - Usage: "DeSecure Network with EccPoW", + LightServeFlag = &cli.IntFlag{ + Name: "light.serve", + Usage: "Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100)", + Value: ethconfig.Defaults.LightServ, + Category: flags.LightCategory, + } + LightIngressFlag = &cli.IntFlag{ + Name: "light.ingress", + Usage: "Incoming bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", + Value: ethconfig.Defaults.LightIngress, + Category: flags.LightCategory, + } + LightEgressFlag = &cli.IntFlag{ + Name: "light.egress", + Usage: "Outgoing bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", + Value: ethconfig.Defaults.LightEgress, + Category: flags.LightCategory, + } + LightMaxPeersFlag = &cli.IntFlag{ + Name: "light.maxpeers", + Usage: "Maximum number of light clients to serve, or light servers to attach to", + Value: ethconfig.Defaults.LightPeers, + Category: flags.LightCategory, + } + UltraLightServersFlag = &cli.StringFlag{ + Name: "ulc.servers", + Usage: "List of trusted ultra-light servers", + Value: strings.Join(ethconfig.Defaults.UltraLightServers, ","), + Category: flags.LightCategory, + } + UltraLightFractionFlag = &cli.IntFlag{ + Name: "ulc.fraction", + Usage: "Minimum % of trusted ultra-light servers required to announce a new head", + Value: ethconfig.Defaults.UltraLightFraction, + Category: flags.LightCategory, + } + UltraLightOnlyAnnounceFlag = &cli.BoolFlag{ + Name: "ulc.onlyannounce", + Usage: "Ultra light server sends announcements only", + Category: flags.LightCategory, + } + LightNoPruneFlag = &cli.BoolFlag{ + Name: "light.nopruning", + Usage: "Disable ancient light chain data pruning", + Category: flags.LightCategory, + } + LightNoSyncServeFlag = &cli.BoolFlag{ + Name: "light.nosyncserve", + Usage: "Enables serving light clients before syncing", + Category: flags.LightCategory, } + // Ethash settings - EthashCacheDirFlag = DirectoryFlag{ - Name: "ethash.cachedir", - Usage: "Directory to store the ethash verification caches (default = inside the datadir)", - } - EthashCachesInMemoryFlag = cli.IntFlag{ - Name: "ethash.cachesinmem", - Usage: "Number of recent ethash caches to keep in memory (16MB each)", - Value: eth.DefaultConfig.Ethash.CachesInMem, - } - EthashCachesOnDiskFlag = cli.IntFlag{ - Name: "ethash.cachesondisk", - Usage: "Number of recent ethash caches to keep on disk (16MB each)", - Value: eth.DefaultConfig.Ethash.CachesOnDisk, - } - EthashDatasetDirFlag = DirectoryFlag{ - Name: "ethash.dagdir", - Usage: "Directory to store the ethash mining DAGs", - Value: DirectoryString(eth.DefaultConfig.Ethash.DatasetDir), - } - EthashDatasetsInMemoryFlag = cli.IntFlag{ - Name: "ethash.dagsinmem", - Usage: "Number of recent ethash mining DAGs to keep in memory (1+GB each)", - Value: eth.DefaultConfig.Ethash.DatasetsInMem, - } - EthashDatasetsOnDiskFlag = cli.IntFlag{ - Name: "ethash.dagsondisk", - Usage: "Number of recent ethash mining DAGs to keep on disk (1+GB each)", - Value: eth.DefaultConfig.Ethash.DatasetsOnDisk, + EthashCacheDirFlag = &flags.DirectoryFlag{ + Name: "ethash.cachedir", + Usage: "Directory to store the ethash verification caches (default = inside the datadir)", + Category: flags.EthashCategory, + } + EthashCachesInMemoryFlag = &cli.IntFlag{ + Name: "ethash.cachesinmem", + Usage: "Number of recent ethash caches to keep in memory (16MB each)", + Value: ethconfig.Defaults.Ethash.CachesInMem, + Category: flags.EthashCategory, + } + EthashCachesOnDiskFlag = &cli.IntFlag{ + Name: "ethash.cachesondisk", + Usage: "Number of recent ethash caches to keep on disk (16MB each)", + Value: ethconfig.Defaults.Ethash.CachesOnDisk, + Category: flags.EthashCategory, + } + EthashCachesLockMmapFlag = &cli.BoolFlag{ + Name: "ethash.cacheslockmmap", + Usage: "Lock memory maps of recent ethash caches", + Category: flags.EthashCategory, + } + EthashDatasetDirFlag = &flags.DirectoryFlag{ + Name: "ethash.dagdir", + Usage: "Directory to store the ethash mining DAGs", + Value: flags.DirectoryString(ethconfig.Defaults.Ethash.DatasetDir), + Category: flags.EthashCategory, + } + EthashDatasetsInMemoryFlag = &cli.IntFlag{ + Name: "ethash.dagsinmem", + Usage: "Number of recent ethash mining DAGs to keep in memory (1+GB each)", + Value: ethconfig.Defaults.Ethash.DatasetsInMem, + Category: flags.EthashCategory, + } + EthashDatasetsOnDiskFlag = &cli.IntFlag{ + Name: "ethash.dagsondisk", + Usage: "Number of recent ethash mining DAGs to keep on disk (1+GB each)", + Value: ethconfig.Defaults.Ethash.DatasetsOnDisk, + Category: flags.EthashCategory, + } + EthashDatasetsLockMmapFlag = &cli.BoolFlag{ + Name: "ethash.dagslockmmap", + Usage: "Lock memory maps for recent ethash mining DAGs", + Category: flags.EthashCategory, } + // Transaction pool settings - TxPoolLocalsFlag = cli.StringFlag{ - Name: "txpool.locals", - Usage: "Comma separated accounts to treat as locals (no flush, priority inclusion)", - } - TxPoolNoLocalsFlag = cli.BoolFlag{ - Name: "txpool.nolocals", - Usage: "Disables price exemptions for locally submitted transactions", - } - TxPoolJournalFlag = cli.StringFlag{ - Name: "txpool.journal", - Usage: "Disk journal for local transaction to survive node restarts", - Value: core.DefaultTxPoolConfig.Journal, - } - TxPoolRejournalFlag = cli.DurationFlag{ - Name: "txpool.rejournal", - Usage: "Time interval to regenerate the local transaction journal", - Value: core.DefaultTxPoolConfig.Rejournal, - } - TxPoolPriceLimitFlag = cli.Uint64Flag{ - Name: "txpool.pricelimit", - Usage: "Minimum gas price limit to enforce for acceptance into the pool", - Value: eth.DefaultConfig.TxPool.PriceLimit, - } - TxPoolPriceBumpFlag = cli.Uint64Flag{ - Name: "txpool.pricebump", - Usage: "Price bump percentage to replace an already existing transaction", - Value: eth.DefaultConfig.TxPool.PriceBump, - } - TxPoolAccountSlotsFlag = cli.Uint64Flag{ - Name: "txpool.accountslots", - Usage: "Minimum number of executable transaction slots guaranteed per account", - Value: eth.DefaultConfig.TxPool.AccountSlots, - } - TxPoolGlobalSlotsFlag = cli.Uint64Flag{ - Name: "txpool.globalslots", - Usage: "Maximum number of executable transaction slots for all accounts", - Value: eth.DefaultConfig.TxPool.GlobalSlots, - } - TxPoolAccountQueueFlag = cli.Uint64Flag{ - Name: "txpool.accountqueue", - Usage: "Maximum number of non-executable transaction slots permitted per account", - Value: eth.DefaultConfig.TxPool.AccountQueue, - } - TxPoolGlobalQueueFlag = cli.Uint64Flag{ - Name: "txpool.globalqueue", - Usage: "Maximum number of non-executable transaction slots for all accounts", - Value: eth.DefaultConfig.TxPool.GlobalQueue, - } - TxPoolLifetimeFlag = cli.DurationFlag{ - Name: "txpool.lifetime", - Usage: "Maximum amount of time non-executable transaction are queued", - Value: eth.DefaultConfig.TxPool.Lifetime, + TxPoolLocalsFlag = &cli.StringFlag{ + Name: "txpool.locals", + Usage: "Comma separated accounts to treat as locals (no flush, priority inclusion)", + Category: flags.TxPoolCategory, + } + TxPoolNoLocalsFlag = &cli.BoolFlag{ + Name: "txpool.nolocals", + Usage: "Disables price exemptions for locally submitted transactions", + Category: flags.TxPoolCategory, + } + TxPoolJournalFlag = &cli.StringFlag{ + Name: "txpool.journal", + Usage: "Disk journal for local transaction to survive node restarts", + Value: core.DefaultTxPoolConfig.Journal, + Category: flags.TxPoolCategory, + } + TxPoolRejournalFlag = &cli.DurationFlag{ + Name: "txpool.rejournal", + Usage: "Time interval to regenerate the local transaction journal", + Value: core.DefaultTxPoolConfig.Rejournal, + Category: flags.TxPoolCategory, + } + TxPoolPriceLimitFlag = &cli.Uint64Flag{ + Name: "txpool.pricelimit", + Usage: "Minimum gas price limit to enforce for acceptance into the pool", + Value: ethconfig.Defaults.TxPool.PriceLimit, + Category: flags.TxPoolCategory, + } + TxPoolPriceBumpFlag = &cli.Uint64Flag{ + Name: "txpool.pricebump", + Usage: "Price bump percentage to replace an already existing transaction", + Value: ethconfig.Defaults.TxPool.PriceBump, + Category: flags.TxPoolCategory, + } + TxPoolAccountSlotsFlag = &cli.Uint64Flag{ + Name: "txpool.accountslots", + Usage: "Minimum number of executable transaction slots guaranteed per account", + Value: ethconfig.Defaults.TxPool.AccountSlots, + Category: flags.TxPoolCategory, + } + TxPoolGlobalSlotsFlag = &cli.Uint64Flag{ + Name: "txpool.globalslots", + Usage: "Maximum number of executable transaction slots for all accounts", + Value: ethconfig.Defaults.TxPool.GlobalSlots, + Category: flags.TxPoolCategory, + } + TxPoolAccountQueueFlag = &cli.Uint64Flag{ + Name: "txpool.accountqueue", + Usage: "Maximum number of non-executable transaction slots permitted per account", + Value: ethconfig.Defaults.TxPool.AccountQueue, + Category: flags.TxPoolCategory, + } + TxPoolGlobalQueueFlag = &cli.Uint64Flag{ + Name: "txpool.globalqueue", + Usage: "Maximum number of non-executable transaction slots for all accounts", + Value: ethconfig.Defaults.TxPool.GlobalQueue, + Category: flags.TxPoolCategory, + } + TxPoolLifetimeFlag = &cli.DurationFlag{ + Name: "txpool.lifetime", + Usage: "Maximum amount of time non-executable transaction are queued", + Value: ethconfig.Defaults.TxPool.Lifetime, + Category: flags.TxPoolCategory, } + // Performance tuning settings - CacheFlag = cli.IntFlag{ - Name: "cache", - Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", - Value: 1024, - } - CacheDatabaseFlag = cli.IntFlag{ - Name: "cache.database", - Usage: "Percentage of cache memory allowance to use for database io", - Value: 50, - } - CacheTrieFlag = cli.IntFlag{ - Name: "cache.trie", - 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 (default = 25% full mode, 0% archive mode)", - Value: 25, - } - CacheNoPrefetchFlag = cli.BoolFlag{ - Name: "cache.noprefetch", - Usage: "Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data)", + CacheFlag = &cli.IntFlag{ + Name: "cache", + Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", + Value: 1024, + Category: flags.PerfCategory, + } + CacheDatabaseFlag = &cli.IntFlag{ + Name: "cache.database", + Usage: "Percentage of cache memory allowance to use for database io", + Value: 50, + Category: flags.PerfCategory, + } + CacheTrieFlag = &cli.IntFlag{ + Name: "cache.trie", + Usage: "Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode)", + Value: 15, + Category: flags.PerfCategory, + } + CacheTrieJournalFlag = &cli.StringFlag{ + Name: "cache.trie.journal", + Usage: "Disk journal directory for trie cache to survive node restarts", + Value: ethconfig.Defaults.TrieCleanCacheJournal, + Category: flags.PerfCategory, + } + CacheTrieRejournalFlag = &cli.DurationFlag{ + Name: "cache.trie.rejournal", + Usage: "Time interval to regenerate the trie cache journal", + Value: ethconfig.Defaults.TrieCleanCacheRejournal, + Category: flags.PerfCategory, + } + CacheGCFlag = &cli.IntFlag{ + Name: "cache.gc", + Usage: "Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode)", + Value: 25, + Category: flags.PerfCategory, + } + CacheSnapshotFlag = &cli.IntFlag{ + Name: "cache.snapshot", + Usage: "Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode)", + Value: 10, + Category: flags.PerfCategory, + } + CacheNoPrefetchFlag = &cli.BoolFlag{ + Name: "cache.noprefetch", + Usage: "Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data)", + Category: flags.PerfCategory, + } + CachePreimagesFlag = &cli.BoolFlag{ + Name: "cache.preimages", + Usage: "Enable recording the SHA3/keccak preimages of trie keys", + Category: flags.PerfCategory, + } + CacheLogSizeFlag = &cli.IntFlag{ + Name: "cache.blocklogs", + Usage: "Size (in number of blocks) of the log cache for filtering", + Category: flags.PerfCategory, + Value: ethconfig.Defaults.FilterLogCacheSize, + } + FDLimitFlag = &cli.IntFlag{ + Name: "fdlimit", + Usage: "Raise the open file descriptor resource limit (default = system fd limit)", + Category: flags.PerfCategory, } + // Miner settings - MiningEnabledFlag = cli.BoolFlag{ - Name: "mine", - Usage: "Enable mining", - } - MinerThreadsFlag = cli.IntFlag{ - Name: "miner.threads", - Usage: "Number of CPU threads to use for mining", - Value: 0, - } - MinerLegacyThreadsFlag = cli.IntFlag{ - Name: "minerthreads", - Usage: "Number of CPU threads to use for mining (deprecated, use --miner.threads)", - Value: 0, - } - MinerNotifyFlag = cli.StringFlag{ - Name: "miner.notify", - Usage: "Comma separated HTTP URL list to notify of new work packages", - } - MinerGasTargetFlag = cli.Uint64Flag{ - Name: "miner.gastarget", - Usage: "Target gas floor for mined blocks", - Value: eth.DefaultConfig.Miner.GasFloor, - } - MinerLegacyGasTargetFlag = cli.Uint64Flag{ - Name: "targetgaslimit", - Usage: "Target gas floor for mined blocks (deprecated, use --miner.gastarget)", - Value: eth.DefaultConfig.Miner.GasFloor, - } - MinerGasLimitFlag = cli.Uint64Flag{ - Name: "miner.gaslimit", - Usage: "Target gas ceiling for mined blocks", - Value: eth.DefaultConfig.Miner.GasCeil, - } - MinerGasPriceFlag = BigFlag{ - Name: "miner.gasprice", - Usage: "Minimum gas price for mining a transaction", - Value: eth.DefaultConfig.Miner.GasPrice, - } - MinerLegacyGasPriceFlag = BigFlag{ - Name: "gasprice", - Usage: "Minimum gas price for mining a transaction (deprecated, use --miner.gasprice)", - Value: eth.DefaultConfig.Miner.GasPrice, - } - MinerEtherbaseFlag = cli.StringFlag{ - Name: "miner.etherbase", - Usage: "Public address for block mining rewards (default = first account)", - Value: "0", - } - MinerLegacyEtherbaseFlag = cli.StringFlag{ - Name: "etherbase", - Usage: "Public address for block mining rewards (default = first account, deprecated, use --miner.etherbase)", - Value: "0", - } - MinerExtraDataFlag = cli.StringFlag{ - Name: "miner.extradata", - Usage: "Block extra data set by the miner (default = client version)", - } - MinerLegacyExtraDataFlag = cli.StringFlag{ - Name: "extradata", - Usage: "Block extra data set by the miner (default = client version, deprecated, use --miner.extradata)", - } - MinerRecommitIntervalFlag = cli.DurationFlag{ - Name: "miner.recommit", - Usage: "Time interval to recreate the block being mined", - Value: eth.DefaultConfig.Miner.Recommit, - } - MinerNoVerfiyFlag = cli.BoolFlag{ - Name: "miner.noverify", - Usage: "Disable remote sealing verification", + MiningEnabledFlag = &cli.BoolFlag{ + Name: "mine", + Usage: "Enable mining", + Category: flags.MinerCategory, + } + MinerThreadsFlag = &cli.IntFlag{ + Name: "miner.threads", + Usage: "Number of CPU threads to use for mining", + Value: 0, + Category: flags.MinerCategory, + } + MinerNotifyFlag = &cli.StringFlag{ + Name: "miner.notify", + Usage: "Comma separated HTTP URL list to notify of new work packages", + Category: flags.MinerCategory, + } + MinerNotifyFullFlag = &cli.BoolFlag{ + Name: "miner.notify.full", + Usage: "Notify with pending block headers instead of work packages", + Category: flags.MinerCategory, + } + MinerGasLimitFlag = &cli.Uint64Flag{ + Name: "miner.gaslimit", + Usage: "Target gas ceiling for mined blocks", + Value: ethconfig.Defaults.Miner.GasCeil, + Category: flags.MinerCategory, + } + MinerGasPriceFlag = &flags.BigFlag{ + Name: "miner.gasprice", + Usage: "Minimum gas price for mining a transaction", + Value: ethconfig.Defaults.Miner.GasPrice, + Category: flags.MinerCategory, + } + MinerEtherbaseFlag = &cli.StringFlag{ + Name: "miner.etherbase", + Usage: "Public address for block mining rewards (default = first account)", + Value: "0", + Category: flags.MinerCategory, + } + MinerExtraDataFlag = &cli.StringFlag{ + Name: "miner.extradata", + Usage: "Block extra data set by the miner (default = client version)", + Category: flags.MinerCategory, + } + MinerRecommitIntervalFlag = &cli.DurationFlag{ + Name: "miner.recommit", + Usage: "Time interval to recreate the block being mined", + Value: ethconfig.Defaults.Miner.Recommit, + Category: flags.MinerCategory, + } + MinerNoVerifyFlag = &cli.BoolFlag{ + Name: "miner.noverify", + Usage: "Disable remote sealing verification", + Category: flags.MinerCategory, } + // Account settings - UnlockedAccountFlag = cli.StringFlag{ - Name: "unlock", - Usage: "Comma separated list of accounts to unlock", - Value: "", - } - PasswordFileFlag = cli.StringFlag{ - Name: "password", - 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", + UnlockedAccountFlag = &cli.StringFlag{ + Name: "unlock", + Usage: "Comma separated list of accounts to unlock", + Value: "", + Category: flags.AccountCategory, + } + PasswordFileFlag = &cli.PathFlag{ + Name: "password", + Usage: "Password file to use for non-interactive password input", + TakesFile: true, + Category: flags.AccountCategory, + } + ExternalSignerFlag = &cli.StringFlag{ + Name: "signer", + Usage: "External signer (url or path to ipc file)", + Value: "", + Category: flags.AccountCategory, + } + InsecureUnlockAllowedFlag = &cli.BoolFlag{ + Name: "allow-insecure-unlock", + Usage: "Allow insecure account unlocking when account-related RPCs are exposed by http", + Category: flags.AccountCategory, + } + + // EVM settings + VMEnableDebugFlag = &cli.BoolFlag{ + Name: "vmdebug", + Usage: "Record information useful for VM and contract debugging", + Category: flags.VMCategory, + } + + // API options. + RPCGlobalGasCapFlag = &cli.Uint64Flag{ + Name: "rpc.gascap", + Usage: "Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite)", + Value: ethconfig.Defaults.RPCGasCap, + Category: flags.APICategory, + } + RPCGlobalEVMTimeoutFlag = &cli.DurationFlag{ + Name: "rpc.evmtimeout", + Usage: "Sets a timeout used for eth_call (0=infinite)", + Value: ethconfig.Defaults.RPCEVMTimeout, + Category: flags.APICategory, + } + RPCGlobalTxFeeCapFlag = &cli.Float64Flag{ + Name: "rpc.txfeecap", + Usage: "Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap)", + Value: ethconfig.Defaults.RPCTxFeeCap, + Category: flags.APICategory, + } + // Authenticated RPC HTTP settings + AuthListenFlag = &cli.StringFlag{ + Name: "authrpc.addr", + Usage: "Listening address for authenticated APIs", + Value: node.DefaultConfig.AuthAddr, + Category: flags.APICategory, + } + AuthPortFlag = &cli.IntFlag{ + Name: "authrpc.port", + Usage: "Listening port for authenticated APIs", + Value: node.DefaultConfig.AuthPort, + Category: flags.APICategory, + } + AuthVirtualHostsFlag = &cli.StringFlag{ + Name: "authrpc.vhosts", + Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", + Value: strings.Join(node.DefaultConfig.AuthVirtualHosts, ","), + Category: flags.APICategory, + } + JWTSecretFlag = &cli.StringFlag{ + Name: "authrpc.jwtsecret", + Usage: "Path to a JWT secret to use for authenticated RPC endpoints", + Category: flags.APICategory, } + // Logging and debug settings - EthStatsURLFlag = cli.StringFlag{ - Name: "ethstats", - Usage: "Reporting URL of a ethstats service (nodename:secret@host:port)", + EthStatsURLFlag = &cli.StringFlag{ + Name: "ethstats", + Usage: "Reporting URL of a ethstats service (nodename:secret@host:port)", + Category: flags.MetricsCategory, } - FakePoWFlag = cli.BoolFlag{ - Name: "fakepow", - Usage: "Disables proof-of-work verification", + FakePoWFlag = &cli.BoolFlag{ + Name: "fakepow", + Usage: "Disables proof-of-work verification", + Category: flags.LoggingCategory, } - NoCompactionFlag = cli.BoolFlag{ - Name: "nocompaction", - 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", - } - RPCListenAddrFlag = cli.StringFlag{ - Name: "rpcaddr", - Usage: "HTTP-RPC server listening interface", - Value: node.DefaultHTTPHost, - } - RPCPortFlag = cli.IntFlag{ - Name: "rpcport", - Usage: "HTTP-RPC server listening port", - Value: node.DefaultHTTPPort, - } - RPCCORSDomainFlag = cli.StringFlag{ - Name: "rpccorsdomain", - Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", - Value: "", - } - RPCVirtualHostsFlag = cli.StringFlag{ - Name: "rpcvhosts", - Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", - Value: strings.Join(node.DefaultConfig.HTTPVirtualHosts, ","), - } - RPCApiFlag = cli.StringFlag{ - Name: "rpcapi", - Usage: "API's offered over the HTTP-RPC interface", - Value: "", - } - WSEnabledFlag = cli.BoolFlag{ - Name: "ws", - Usage: "Enable the WS-RPC server", - } - WSListenAddrFlag = cli.StringFlag{ - Name: "wsaddr", - Usage: "WS-RPC server listening interface", - Value: node.DefaultWSHost, - } - WSPortFlag = cli.IntFlag{ - Name: "wsport", - Usage: "WS-RPC server listening port", - Value: node.DefaultWSPort, - } - WSApiFlag = cli.StringFlag{ - Name: "wsapi", - Usage: "API's offered over the WS-RPC interface", - Value: "", - } - WSAllowedOriginsFlag = cli.StringFlag{ - Name: "wsorigins", - 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", - } - PreloadJSFlag = cli.StringFlag{ - Name: "preload", - Usage: "Comma separated list of JavaScript files to preload into the console", + NoCompactionFlag = &cli.BoolFlag{ + Name: "nocompaction", + Usage: "Disables db compaction after import", + Category: flags.LoggingCategory, } - // Network Settings - MaxPeersFlag = cli.IntFlag{ - Name: "maxpeers", - Usage: "Maximum number of network peers (network disabled if set to 0)", - Value: node.DefaultConfig.P2P.MaxPeers, - } - MaxPendingPeersFlag = cli.IntFlag{ - Name: "maxpendpeers", - Usage: "Maximum number of pending connection attempts (defaults used if set to 0)", - Value: node.DefaultConfig.P2P.MaxPendingPeers, - } - ListenPortFlag = cli.IntFlag{ - Name: "port", - Usage: "Network listening port", - Value: 30303, - } - BootnodesFlag = cli.StringFlag{ - Name: "bootnodes", - Usage: "Comma separated enode URLs for P2P discovery bootstrap (set v4+v5 instead for light servers)", - Value: "", - } - BootnodesV4Flag = cli.StringFlag{ - Name: "bootnodesv4", - Usage: "Comma separated enode URLs for P2P v4 discovery bootstrap (light server, full nodes)", - Value: "", - } - BootnodesV5Flag = cli.StringFlag{ - Name: "bootnodesv5", - Usage: "Comma separated enode URLs for P2P v5 discovery bootstrap (light server, light nodes)", - Value: "", - } - NodeKeyFileFlag = cli.StringFlag{ - Name: "nodekey", - Usage: "P2P node key file", - } - NodeKeyHexFlag = cli.StringFlag{ - Name: "nodekeyhex", - Usage: "P2P node key as hex (for testing)", - } - NATFlag = cli.StringFlag{ - Name: "nat", - Usage: "NAT port mapping mechanism (any|none|upnp|pmp|extip:)", - Value: "any", + IgnoreLegacyReceiptsFlag = &cli.BoolFlag{ + Name: "ignore-legacy-receipts", + Usage: "Geth will start up even if there are legacy receipts in freezer", + Category: flags.MiscCategory, } - NoDiscoverFlag = cli.BoolFlag{ - Name: "nodiscover", - Usage: "Disables the peer discovery mechanism (manual peer addition)", - } - DiscoveryV5Flag = cli.BoolFlag{ - Name: "v5disc", - Usage: "Enables the experimental RLPx V5 (Topic Discovery) mechanism", - } - NetrestrictFlag = cli.StringFlag{ - Name: "netrestrict", - Usage: "Restricts network communication to the given IP networks (CIDR masks)", + + // RPC settings + IPCDisabledFlag = &cli.BoolFlag{ + Name: "ipcdisable", + Usage: "Disable the IPC-RPC server", + Category: flags.APICategory, + } + IPCPathFlag = &flags.DirectoryFlag{ + Name: "ipcpath", + Usage: "Filename for IPC socket/pipe within the datadir (explicit paths escape it)", + Category: flags.APICategory, + } + HTTPEnabledFlag = &cli.BoolFlag{ + Name: "http", + Usage: "Enable the HTTP-RPC server", + Category: flags.APICategory, + } + HTTPListenAddrFlag = &cli.StringFlag{ + Name: "http.addr", + Usage: "HTTP-RPC server listening interface", + Value: node.DefaultHTTPHost, + Category: flags.APICategory, + } + HTTPPortFlag = &cli.IntFlag{ + Name: "http.port", + Usage: "HTTP-RPC server listening port", + Value: node.DefaultHTTPPort, + Category: flags.APICategory, + } + HTTPCORSDomainFlag = &cli.StringFlag{ + Name: "http.corsdomain", + Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", + Value: "", + Category: flags.APICategory, + } + HTTPVirtualHostsFlag = &cli.StringFlag{ + Name: "http.vhosts", + Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", + Value: strings.Join(node.DefaultConfig.HTTPVirtualHosts, ","), + Category: flags.APICategory, + } + HTTPApiFlag = &cli.StringFlag{ + Name: "http.api", + Usage: "API's offered over the HTTP-RPC interface", + Value: "", + Category: flags.APICategory, + } + HTTPPathPrefixFlag = &cli.StringFlag{ + Name: "http.rpcprefix", + Usage: "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths.", + Value: "", + Category: flags.APICategory, + } + GraphQLEnabledFlag = &cli.BoolFlag{ + Name: "graphql", + Usage: "Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well.", + Category: flags.APICategory, + } + GraphQLCORSDomainFlag = &cli.StringFlag{ + Name: "graphql.corsdomain", + Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", + Value: "", + Category: flags.APICategory, + } + 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, ","), + Category: flags.APICategory, + } + WSEnabledFlag = &cli.BoolFlag{ + Name: "ws", + Usage: "Enable the WS-RPC server", + Category: flags.APICategory, + } + WSListenAddrFlag = &cli.StringFlag{ + Name: "ws.addr", + Usage: "WS-RPC server listening interface", + Value: node.DefaultWSHost, + Category: flags.APICategory, + } + WSPortFlag = &cli.IntFlag{ + Name: "ws.port", + Usage: "WS-RPC server listening port", + Value: node.DefaultWSPort, + Category: flags.APICategory, + } + WSApiFlag = &cli.StringFlag{ + Name: "ws.api", + Usage: "API's offered over the WS-RPC interface", + Value: "", + Category: flags.APICategory, + } + WSAllowedOriginsFlag = &cli.StringFlag{ + Name: "ws.origins", + Usage: "Origins from which to accept websockets requests", + Value: "", + Category: flags.APICategory, + } + WSPathPrefixFlag = &cli.StringFlag{ + Name: "ws.rpcprefix", + Usage: "HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.", + Value: "", + Category: flags.APICategory, + } + ExecFlag = &cli.StringFlag{ + Name: "exec", + Usage: "Execute JavaScript statement", + Category: flags.APICategory, + } + PreloadJSFlag = &cli.StringFlag{ + Name: "preload", + Usage: "Comma separated list of JavaScript files to preload into the console", + Category: flags.APICategory, + } + AllowUnprotectedTxs = &cli.BoolFlag{ + Name: "rpc.allow-unprotected-txs", + Usage: "Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC", + Category: flags.APICategory, } - // ATM the url is left to the user and deployment to - JSpathFlag = cli.StringFlag{ - Name: "jspath", - Usage: "JavaScript root path for `loadScript`", - Value: ".", + // Network Settings + MaxPeersFlag = &cli.IntFlag{ + Name: "maxpeers", + Usage: "Maximum number of network peers (network disabled if set to 0)", + Value: node.DefaultConfig.P2P.MaxPeers, + Category: flags.NetworkingCategory, + } + MaxPendingPeersFlag = &cli.IntFlag{ + Name: "maxpendpeers", + Usage: "Maximum number of pending connection attempts (defaults used if set to 0)", + Value: node.DefaultConfig.P2P.MaxPendingPeers, + Category: flags.NetworkingCategory, + } + ListenPortFlag = &cli.IntFlag{ + Name: "port", + Usage: "Network listening port", + Value: 30303, + Category: flags.NetworkingCategory, + } + BootnodesFlag = &cli.StringFlag{ + Name: "bootnodes", + Usage: "Comma separated enode URLs for P2P discovery bootstrap", + Value: "", + Category: flags.NetworkingCategory, + } + NodeKeyFileFlag = &cli.StringFlag{ + Name: "nodekey", + Usage: "P2P node key file", + Category: flags.NetworkingCategory, + } + NodeKeyHexFlag = &cli.StringFlag{ + Name: "nodekeyhex", + Usage: "P2P node key as hex (for testing)", + Category: flags.NetworkingCategory, + } + NATFlag = &cli.StringFlag{ + Name: "nat", + Usage: "NAT port mapping mechanism (any|none|upnp|pmp|extip:)", + Value: "any", + Category: flags.NetworkingCategory, + } + NoDiscoverFlag = &cli.BoolFlag{ + Name: "nodiscover", + Usage: "Disables the peer discovery mechanism (manual peer addition)", + Category: flags.NetworkingCategory, + } + DiscoveryV5Flag = &cli.BoolFlag{ + Name: "v5disc", + Usage: "Enables the experimental RLPx V5 (Topic Discovery) mechanism", + Category: flags.NetworkingCategory, + } + NetrestrictFlag = &cli.StringFlag{ + Name: "netrestrict", + Usage: "Restricts network communication to the given IP networks (CIDR masks)", + Category: flags.NetworkingCategory, + } + DNSDiscoveryFlag = &cli.StringFlag{ + Name: "discovery.dns", + Usage: "Sets DNS discovery entry points (use \"\" to disable DNS)", + Category: flags.NetworkingCategory, + } + DiscoveryPortFlag = &cli.IntFlag{ + Name: "discovery.port", + Usage: "Use a custom UDP port for P2P discovery", + Value: 30303, + Category: flags.NetworkingCategory, + } + + // Console + JSpathFlag = &flags.DirectoryFlag{ + Name: "jspath", + Usage: "JavaScript root path for `loadScript`", + Value: flags.DirectoryString("."), + Category: flags.APICategory, } // Gas price oracle settings - GpoBlocksFlag = cli.IntFlag{ - Name: "gpoblocks", - Usage: "Number of recent blocks to check for gas prices", - Value: eth.DefaultConfig.GPO.Blocks, - } - GpoPercentileFlag = cli.IntFlag{ - Name: "gpopercentile", - Usage: "Suggested gas price is the given percentile of a set of recent transaction gas prices", - Value: eth.DefaultConfig.GPO.Percentile, - } - WhisperEnabledFlag = cli.BoolFlag{ - Name: "shh", - Usage: "Enable Whisper", - } - WhisperMaxMessageSizeFlag = cli.IntFlag{ - Name: "shh.maxmessagesize", - Usage: "Max message size accepted", - Value: int(whisper.DefaultMaxMessageSize), - } - WhisperMinPOWFlag = cli.Float64Flag{ - Name: "shh.pow", - Usage: "Minimum POW accepted", - Value: whisper.DefaultMinimumPoW, - } - WhisperRestrictConnectionBetweenLightClientsFlag = cli.BoolFlag{ - Name: "shh.restrict-light", - Usage: "Restrict connection between two whisper light clients", + GpoBlocksFlag = &cli.IntFlag{ + Name: "gpo.blocks", + Usage: "Number of recent blocks to check for gas prices", + Value: ethconfig.Defaults.GPO.Blocks, + Category: flags.GasPriceCategory, + } + GpoPercentileFlag = &cli.IntFlag{ + Name: "gpo.percentile", + Usage: "Suggested gas price is the given percentile of a set of recent transaction gas prices", + Value: ethconfig.Defaults.GPO.Percentile, + Category: flags.GasPriceCategory, + } + GpoMaxGasPriceFlag = &cli.Int64Flag{ + Name: "gpo.maxprice", + Usage: "Maximum transaction priority fee (or gasprice before London fork) to be recommended by gpo", + Value: ethconfig.Defaults.GPO.MaxPrice.Int64(), + Category: flags.GasPriceCategory, + } + GpoIgnoreGasPriceFlag = &cli.Int64Flag{ + Name: "gpo.ignoreprice", + Usage: "Gas price below which gpo will ignore transactions", + Value: ethconfig.Defaults.GPO.IgnorePrice.Int64(), + Category: flags.GasPriceCategory, } // Metrics flags - MetricsEnabledFlag = cli.BoolFlag{ - 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", - } - MetricsInfluxDBEndpointFlag = cli.StringFlag{ - Name: "metrics.influxdb.endpoint", - Usage: "InfluxDB API endpoint to report metrics to", - Value: "http://localhost:8086", - } - MetricsInfluxDBDatabaseFlag = cli.StringFlag{ - Name: "metrics.influxdb.database", - Usage: "InfluxDB database name to push reported metrics to", - Value: "geth", - } - MetricsInfluxDBUsernameFlag = cli.StringFlag{ - Name: "metrics.influxdb.username", - Usage: "Username to authorize access to the database", - Value: "test", - } - MetricsInfluxDBPasswordFlag = cli.StringFlag{ - Name: "metrics.influxdb.password", - Usage: "Password to authorize access to the database", - Value: "test", + MetricsEnabledFlag = &cli.BoolFlag{ + Name: "metrics", + Usage: "Enable metrics collection and reporting", + Category: flags.MetricsCategory, + } + MetricsEnabledExpensiveFlag = &cli.BoolFlag{ + Name: "metrics.expensive", + Usage: "Enable expensive metrics collection and reporting", + Category: flags.MetricsCategory, + } + + // MetricsHTTPFlag defines the endpoint for a stand-alone metrics HTTP endpoint. + // Since the pprof service enables sensitive/vulnerable behavior, this allows a user + // to enable a public-OK metrics endpoint without having to worry about ALSO exposing + // other profiling behavior or information. + MetricsHTTPFlag = &cli.StringFlag{ + Name: "metrics.addr", + Usage: "Enable stand-alone metrics HTTP server listening interface", + Value: metrics.DefaultConfig.HTTP, + Category: flags.MetricsCategory, + } + MetricsPortFlag = &cli.IntFlag{ + Name: "metrics.port", + Usage: "Metrics HTTP server listening port", + Value: metrics.DefaultConfig.Port, + Category: flags.MetricsCategory, + } + MetricsEnableInfluxDBFlag = &cli.BoolFlag{ + Name: "metrics.influxdb", + Usage: "Enable metrics export/push to an external InfluxDB database", + Category: flags.MetricsCategory, + } + MetricsInfluxDBEndpointFlag = &cli.StringFlag{ + Name: "metrics.influxdb.endpoint", + Usage: "InfluxDB API endpoint to report metrics to", + Value: metrics.DefaultConfig.InfluxDBEndpoint, + Category: flags.MetricsCategory, + } + MetricsInfluxDBDatabaseFlag = &cli.StringFlag{ + Name: "metrics.influxdb.database", + Usage: "InfluxDB database name to push reported metrics to", + Value: metrics.DefaultConfig.InfluxDBDatabase, + Category: flags.MetricsCategory, + } + MetricsInfluxDBUsernameFlag = &cli.StringFlag{ + Name: "metrics.influxdb.username", + Usage: "Username to authorize access to the database", + Value: metrics.DefaultConfig.InfluxDBUsername, + Category: flags.MetricsCategory, + } + MetricsInfluxDBPasswordFlag = &cli.StringFlag{ + Name: "metrics.influxdb.password", + Usage: "Password to authorize access to the database", + Value: metrics.DefaultConfig.InfluxDBPassword, + Category: flags.MetricsCategory, } // 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", + MetricsInfluxDBTagsFlag = &cli.StringFlag{ + Name: "metrics.influxdb.tags", + Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", + Value: metrics.DefaultConfig.InfluxDBTags, + Category: flags.MetricsCategory, } - EWASMInterpreterFlag = cli.StringFlag{ - Name: "vm.ewasm", - Usage: "External ewasm configuration (default = built-in interpreter)", - Value: "", + MetricsEnableInfluxDBV2Flag = &cli.BoolFlag{ + Name: "metrics.influxdbv2", + Usage: "Enable metrics export/push to an external InfluxDB v2 database", + Category: flags.MetricsCategory, } - EVMInterpreterFlag = cli.StringFlag{ - Name: "vm.evm", - Usage: "External EVM configuration (default = built-in interpreter)", - Value: "", + + MetricsInfluxDBTokenFlag = &cli.StringFlag{ + Name: "metrics.influxdb.token", + Usage: "Token to authorize access to the database (v2 only)", + Value: metrics.DefaultConfig.InfluxDBToken, + Category: flags.MetricsCategory, + } + + MetricsInfluxDBBucketFlag = &cli.StringFlag{ + Name: "metrics.influxdb.bucket", + Usage: "InfluxDB bucket name to push reported metrics to (v2 only)", + Value: metrics.DefaultConfig.InfluxDBBucket, + Category: flags.MetricsCategory, + } + + MetricsInfluxDBOrganizationFlag = &cli.StringFlag{ + Name: "metrics.influxdb.organization", + Usage: "InfluxDB organization name (v2 only)", + Value: metrics.DefaultConfig.InfluxDBOrganization, + Category: flags.MetricsCategory, + } +) + +var ( + // TestnetFlags is the flag group of all built-in supported testnets. + TestnetFlags = []cli.Flag{ + RopstenFlag, + RinkebyFlag, + GoerliFlag, + SepoliaFlag, + KilnFlag, + } + // NetworkFlags is the flag group of all built-in supported networks. + NetworkFlags = append([]cli.Flag{ + MainnetFlag, + }, TestnetFlags...) + + // DatabasePathFlags is the flag group of all database path flags. + DatabasePathFlags = []cli.Flag{ + DataDirFlag, + AncientFlag, + RemoteDBFlag, } ) // MakeDataDir retrieves the currently requested data directory, terminating // if none (or the empty string) is specified. If the node is starting a testnet, -// the a subdirectory of the specified datadir will be used. +// then a subdirectory of the specified datadir will be used. func MakeDataDir(ctx *cli.Context) string { - if path := ctx.GlobalString(DataDirFlag.Name); path != "" { - if ctx.GlobalBool(TestnetFlag.Name) { - return filepath.Join(path, "testnet") + if path := ctx.String(DataDirFlag.Name); path != "" { + if ctx.Bool(RopstenFlag.Name) { + // Maintain compatibility with older Geth configurations storing the + // Ropsten database in `testnet` instead of `ropsten`. + return filepath.Join(path, "ropsten") } - if ctx.GlobalBool(RinkebyFlag.Name) { + if ctx.Bool(RinkebyFlag.Name) { return filepath.Join(path, "rinkeby") } - if ctx.GlobalBool(GoerliFlag.Name) { + if ctx.Bool(GoerliFlag.Name) { return filepath.Join(path, "goerli") } - if ctx.GlobalBool(LveFlag.Name) { - return filepath.Join(path, "lve") + if ctx.Bool(SepoliaFlag.Name) { + return filepath.Join(path, "sepolia") } - if ctx.GlobalBool(LvetestFlag.Name) { - return filepath.Join(path, "lvetest") + if ctx.Bool(KilnFlag.Name) { + return filepath.Join(path, "kiln") } return path } @@ -803,8 +1033,8 @@ func MakeDataDir(ctx *cli.Context) string { // method returns nil and an emphemeral key is to be generated. func setNodeKey(ctx *cli.Context, cfg *p2p.Config) { var ( - hex = ctx.GlobalString(NodeKeyHexFlag.Name) - file = ctx.GlobalString(NodeKeyFileFlag.Name) + hex = ctx.String(NodeKeyHexFlag.Name) + file = ctx.String(NodeKeyFileFlag.Name) key *ecdsa.PrivateKey err error ) @@ -826,7 +1056,7 @@ func setNodeKey(ctx *cli.Context, cfg *p2p.Config) { // setNodeUserIdent creates the user identifier from CLI flags. func setNodeUserIdent(ctx *cli.Context, cfg *node.Config) { - if identity := ctx.GlobalString(IdentityFlag.Name); len(identity) > 0 { + if identity := ctx.String(IdentityFlag.Name); len(identity) > 0 { cfg.UserIdent = identity } } @@ -836,24 +1066,23 @@ func setNodeUserIdent(ctx *cli.Context, cfg *node.Config) { func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls := params.MainnetBootnodes switch { - case ctx.GlobalIsSet(BootnodesFlag.Name) || ctx.GlobalIsSet(BootnodesV4Flag.Name): - if ctx.GlobalIsSet(BootnodesV4Flag.Name) { - urls = strings.Split(ctx.GlobalString(BootnodesV4Flag.Name), ",") - } else { - urls = strings.Split(ctx.GlobalString(BootnodesFlag.Name), ",") - } - case ctx.GlobalBool(TestnetFlag.Name): - urls = params.TestnetBootnodes - case ctx.GlobalBool(RinkebyFlag.Name): + case ctx.IsSet(BootnodesFlag.Name): + urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) + case ctx.Bool(RopstenFlag.Name): + urls = params.RopstenBootnodes + case ctx.Bool(SepoliaFlag.Name): + urls = params.SepoliaBootnodes + case ctx.Bool(RinkebyFlag.Name): urls = params.RinkebyBootnodes - case ctx.GlobalBool(GoerliFlag.Name): + case ctx.Bool(GoerliFlag.Name): urls = params.GoerliBootnodes - case ctx.GlobalBool(LveFlag.Name): - urls = params.LveBootnodes - case ctx.GlobalBool(LvetestFlag.Name): - urls = params.LvetestBootnodes - case cfg.BootstrapNodes != nil: - return // already set, don't apply defaults. + case ctx.Bool(KilnFlag.Name): + urls = params.KilnBootnodes + } + + // don't apply defaults if BootstrapNodes is already set + if cfg.BootstrapNodes != nil { + return } cfg.BootstrapNodes = make([]*enode.Node, 0, len(urls)) @@ -872,30 +1101,18 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { // setBootstrapNodesV5 creates a list of bootstrap nodes from the command line // flags, reverting to pre-configured ones if none have been specified. func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { - urls := params.DiscoveryV5Bootnodes + urls := params.V5Bootnodes switch { - case ctx.GlobalIsSet(BootnodesFlag.Name) || ctx.GlobalIsSet(BootnodesV5Flag.Name): - if ctx.GlobalIsSet(BootnodesV5Flag.Name) { - urls = strings.Split(ctx.GlobalString(BootnodesV5Flag.Name), ",") - } else { - urls = strings.Split(ctx.GlobalString(BootnodesFlag.Name), ",") - } - case ctx.GlobalBool(RinkebyFlag.Name): - urls = params.RinkebyBootnodes - case ctx.GlobalBool(GoerliFlag.Name): - urls = params.GoerliBootnodes - case ctx.GlobalBool(LveFlag.Name): - urls = params.LveBootnodes - case ctx.GlobalBool(LvetestFlag.Name): - urls = params.LvetestBootnodes + case ctx.IsSet(BootnodesFlag.Name): + urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) case cfg.BootstrapNodesV5 != nil: return // already set, don't apply defaults. } - cfg.BootstrapNodesV5 = make([]*discv5.Node, 0, len(urls)) + cfg.BootstrapNodesV5 = make([]*enode.Node, 0, len(urls)) for _, url := range urls { if url != "" { - node, err := discv5.ParseNode(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { log.Error("Bootstrap URL invalid", "enode", url, "err", err) continue @@ -905,18 +1122,21 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { } } -// setListenAddress creates a TCP listening address string from set command -// line flags. +// setListenAddress creates TCP/UDP listening address strings from set command +// line flags func setListenAddress(ctx *cli.Context, cfg *p2p.Config) { - if ctx.GlobalIsSet(ListenPortFlag.Name) { - cfg.ListenAddr = fmt.Sprintf(":%d", ctx.GlobalInt(ListenPortFlag.Name)) + if ctx.IsSet(ListenPortFlag.Name) { + cfg.ListenAddr = fmt.Sprintf(":%d", ctx.Int(ListenPortFlag.Name)) + } + if ctx.IsSet(DiscoveryPortFlag.Name) { + cfg.DiscAddr = fmt.Sprintf(":%d", ctx.Int(DiscoveryPortFlag.Name)) } } // setNAT creates a port mapper from command line flags. func setNAT(ctx *cli.Context, cfg *p2p.Config) { - if ctx.GlobalIsSet(NATFlag.Name) { - natif, err := nat.Parse(ctx.GlobalString(NATFlag.Name)) + if ctx.IsSet(NATFlag.Name) { + natif, err := nat.Parse(ctx.String(NATFlag.Name)) if err != nil { Fatalf("Option %s: %v", NATFlag.Name, err) } @@ -924,74 +1144,98 @@ func setNAT(ctx *cli.Context, cfg *p2p.Config) { } } -// splitAndTrim splits input separated by a comma +// 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) +func SplitAndTrim(input string) (ret []string) { + l := strings.Split(input, ",") + for _, r := range l { + if r = strings.TrimSpace(r); r != "" { + ret = append(ret, r) + } } - return result + return ret } // setHTTP creates the HTTP RPC listener interface string from the set // command line flags, returning empty if the HTTP endpoint is disabled. func setHTTP(ctx *cli.Context, cfg *node.Config) { - if ctx.GlobalBool(RPCEnabledFlag.Name) && cfg.HTTPHost == "" { + if ctx.Bool(HTTPEnabledFlag.Name) && cfg.HTTPHost == "" { cfg.HTTPHost = "127.0.0.1" - if ctx.GlobalIsSet(RPCListenAddrFlag.Name) { - cfg.HTTPHost = ctx.GlobalString(RPCListenAddrFlag.Name) + if ctx.IsSet(HTTPListenAddrFlag.Name) { + cfg.HTTPHost = ctx.String(HTTPListenAddrFlag.Name) } } - if ctx.GlobalIsSet(RPCPortFlag.Name) { - cfg.HTTPPort = ctx.GlobalInt(RPCPortFlag.Name) + + if ctx.IsSet(HTTPPortFlag.Name) { + cfg.HTTPPort = ctx.Int(HTTPPortFlag.Name) + } + + if ctx.IsSet(AuthListenFlag.Name) { + cfg.AuthAddr = ctx.String(AuthListenFlag.Name) + } + + if ctx.IsSet(AuthPortFlag.Name) { + cfg.AuthPort = ctx.Int(AuthPortFlag.Name) + } + + if ctx.IsSet(AuthVirtualHostsFlag.Name) { + cfg.AuthVirtualHosts = SplitAndTrim(ctx.String(AuthVirtualHostsFlag.Name)) + } + + if ctx.IsSet(HTTPCORSDomainFlag.Name) { + cfg.HTTPCors = SplitAndTrim(ctx.String(HTTPCORSDomainFlag.Name)) } - if ctx.GlobalIsSet(RPCCORSDomainFlag.Name) { - cfg.HTTPCors = splitAndTrim(ctx.GlobalString(RPCCORSDomainFlag.Name)) + + if ctx.IsSet(HTTPApiFlag.Name) { + cfg.HTTPModules = SplitAndTrim(ctx.String(HTTPApiFlag.Name)) } - if ctx.GlobalIsSet(RPCApiFlag.Name) { - cfg.HTTPModules = splitAndTrim(ctx.GlobalString(RPCApiFlag.Name)) + + if ctx.IsSet(HTTPVirtualHostsFlag.Name) { + cfg.HTTPVirtualHosts = SplitAndTrim(ctx.String(HTTPVirtualHostsFlag.Name)) } - if ctx.GlobalIsSet(RPCVirtualHostsFlag.Name) { - cfg.HTTPVirtualHosts = splitAndTrim(ctx.GlobalString(RPCVirtualHostsFlag.Name)) + + if ctx.IsSet(HTTPPathPrefixFlag.Name) { + cfg.HTTPPathPrefix = ctx.String(HTTPPathPrefixFlag.Name) + } + if ctx.IsSet(AllowUnprotectedTxs.Name) { + cfg.AllowUnprotectedTxs = ctx.Bool(AllowUnprotectedTxs.Name) } } // 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.IsSet(GraphQLCORSDomainFlag.Name) { + cfg.GraphQLCors = SplitAndTrim(ctx.String(GraphQLCORSDomainFlag.Name)) } - if ctx.GlobalIsSet(GraphQLVirtualHostsFlag.Name) { - cfg.GraphQLVirtualHosts = splitAndTrim(ctx.GlobalString(GraphQLVirtualHostsFlag.Name)) + if ctx.IsSet(GraphQLVirtualHostsFlag.Name) { + cfg.GraphQLVirtualHosts = SplitAndTrim(ctx.String(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) { - if ctx.GlobalBool(WSEnabledFlag.Name) && cfg.WSHost == "" { + if ctx.Bool(WSEnabledFlag.Name) && cfg.WSHost == "" { cfg.WSHost = "127.0.0.1" - if ctx.GlobalIsSet(WSListenAddrFlag.Name) { - cfg.WSHost = ctx.GlobalString(WSListenAddrFlag.Name) + if ctx.IsSet(WSListenAddrFlag.Name) { + cfg.WSHost = ctx.String(WSListenAddrFlag.Name) } } - if ctx.GlobalIsSet(WSPortFlag.Name) { - cfg.WSPort = ctx.GlobalInt(WSPortFlag.Name) + if ctx.IsSet(WSPortFlag.Name) { + cfg.WSPort = ctx.Int(WSPortFlag.Name) } - if ctx.GlobalIsSet(WSAllowedOriginsFlag.Name) { - cfg.WSOrigins = splitAndTrim(ctx.GlobalString(WSAllowedOriginsFlag.Name)) + + if ctx.IsSet(WSAllowedOriginsFlag.Name) { + cfg.WSOrigins = SplitAndTrim(ctx.String(WSAllowedOriginsFlag.Name)) + } + + if ctx.IsSet(WSApiFlag.Name) { + cfg.WSModules = SplitAndTrim(ctx.String(WSApiFlag.Name)) } - if ctx.GlobalIsSet(WSApiFlag.Name) { - cfg.WSModules = splitAndTrim(ctx.GlobalString(WSApiFlag.Name)) + + if ctx.IsSet(WSPathPrefixFlag.Name) { + cfg.WSPathPrefix = ctx.String(WSPathPrefixFlag.Name) } } @@ -1000,55 +1244,68 @@ func setWS(ctx *cli.Context, cfg *node.Config) { func setIPC(ctx *cli.Context, cfg *node.Config) { CheckExclusive(ctx, IPCDisabledFlag, IPCPathFlag) switch { - case ctx.GlobalBool(IPCDisabledFlag.Name): + case ctx.Bool(IPCDisabledFlag.Name): cfg.IPCPath = "" - case ctx.GlobalIsSet(IPCPathFlag.Name): - cfg.IPCPath = ctx.GlobalString(IPCPathFlag.Name) + case ctx.IsSet(IPCPathFlag.Name): + cfg.IPCPath = ctx.String(IPCPathFlag.Name) } } // 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) +func setLes(ctx *cli.Context, cfg *ethconfig.Config) { + if ctx.IsSet(LightServeFlag.Name) { + cfg.LightServ = ctx.Int(LightServeFlag.Name) } - if ctx.GlobalIsSet(LightServeFlag.Name) { - cfg.LightServ = ctx.GlobalInt(LightServeFlag.Name) + if ctx.IsSet(LightIngressFlag.Name) { + cfg.LightIngress = ctx.Int(LightIngressFlag.Name) } - if ctx.GlobalIsSet(LightIngressFlag.Name) { - cfg.LightIngress = ctx.GlobalInt(LightIngressFlag.Name) + if ctx.IsSet(LightEgressFlag.Name) { + cfg.LightEgress = ctx.Int(LightEgressFlag.Name) } - if ctx.GlobalIsSet(LightEgressFlag.Name) { - cfg.LightEgress = ctx.GlobalInt(LightEgressFlag.Name) + if ctx.IsSet(LightMaxPeersFlag.Name) { + cfg.LightPeers = ctx.Int(LightMaxPeersFlag.Name) } - if ctx.GlobalIsSet(LightLegacyPeersFlag.Name) { - cfg.LightPeers = ctx.GlobalInt(LightLegacyPeersFlag.Name) + if ctx.IsSet(UltraLightServersFlag.Name) { + cfg.UltraLightServers = strings.Split(ctx.String(UltraLightServersFlag.Name), ",") } - if ctx.GlobalIsSet(LightMaxPeersFlag.Name) { - cfg.LightPeers = ctx.GlobalInt(LightMaxPeersFlag.Name) + if ctx.IsSet(UltraLightFractionFlag.Name) { + cfg.UltraLightFraction = ctx.Int(UltraLightFractionFlag.Name) } - if ctx.GlobalIsSet(UltraLightServersFlag.Name) { - cfg.UltraLightServers = strings.Split(ctx.GlobalString(UltraLightServersFlag.Name), ",") + if cfg.UltraLightFraction <= 0 && cfg.UltraLightFraction > 100 { + log.Error("Ultra light fraction is invalid", "had", cfg.UltraLightFraction, "updated", ethconfig.Defaults.UltraLightFraction) + cfg.UltraLightFraction = ethconfig.Defaults.UltraLightFraction } - if ctx.GlobalIsSet(UltraLightFractionFlag.Name) { - cfg.UltraLightFraction = ctx.GlobalInt(UltraLightFractionFlag.Name) + if ctx.IsSet(UltraLightOnlyAnnounceFlag.Name) { + cfg.UltraLightOnlyAnnounce = ctx.Bool(UltraLightOnlyAnnounceFlag.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.IsSet(LightNoPruneFlag.Name) { + cfg.LightNoPrune = ctx.Bool(LightNoPruneFlag.Name) } - if ctx.GlobalIsSet(UltraLightOnlyAnnounceFlag.Name) { - cfg.UltraLightOnlyAnnounce = ctx.GlobalBool(UltraLightOnlyAnnounceFlag.Name) + if ctx.IsSet(LightNoSyncServeFlag.Name) { + cfg.LightNoSyncServe = ctx.Bool(LightNoSyncServeFlag.Name) } } -// makeDatabaseHandles raises out the number of allowed file handles per process +// 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 { +func MakeDatabaseHandles(max int) int { limit, err := fdlimit.Maximum() if err != nil { Fatalf("Failed to retrieve file descriptor allowance: %v", err) } + switch { + case max == 0: + // User didn't specify a meaningful value, use system limits + case max < 128: + // User specified something unhealthy, just use system defaults + log.Error("File descriptor limit invalid (<128)", "had", max, "updated", limit) + case max > limit: + // User requested more than the OS allows, notify that we can't allocate it + log.Warn("Requested file descriptors denied by OS", "req", max, "limit", limit) + default: + // User limit is meaningful and within allowed range, use that + limit = max + } raised, err := fdlimit.Raise(uint64(limit)) if err != nil { Fatalf("Failed to raise file descriptor allowance: %v", err) @@ -1083,14 +1340,11 @@ func MakeAddress(ks *keystore.KeyStore, account string) (accounts.Account, error // setEtherbase retrieves the etherbase either from the directly specified // command line flags or from the keystore if CLI indexed. -func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) { - // Extract the current etherbase, new flag overriding legacy one +func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *ethconfig.Config) { + // Extract the current etherbase var etherbase string - if ctx.GlobalIsSet(MinerLegacyEtherbaseFlag.Name) { - etherbase = ctx.GlobalString(MinerLegacyEtherbaseFlag.Name) - } - if ctx.GlobalIsSet(MinerEtherbaseFlag.Name) { - etherbase = ctx.GlobalString(MinerEtherbaseFlag.Name) + if ctx.IsSet(MinerEtherbaseFlag.Name) { + etherbase = ctx.String(MinerEtherbaseFlag.Name) } // Convert the etherbase into an address and configure it if etherbase != "" { @@ -1108,11 +1362,11 @@ func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) { // MakePasswordList reads password lines from the file specified by the global --password flag. func MakePasswordList(ctx *cli.Context) []string { - path := ctx.GlobalString(PasswordFileFlag.Name) + path := ctx.Path(PasswordFileFlag.Name) if path == "" { return nil } - text, err := ioutil.ReadFile(path) + text, err := os.ReadFile(path) if err != nil { Fatalf("Failed to read password file: %v", err) } @@ -1131,23 +1385,25 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { setBootstrapNodes(ctx, cfg) setBootstrapNodesV5(ctx, cfg) - lightClient := ctx.GlobalString(SyncModeFlag.Name) == "light" - lightServer := (ctx.GlobalInt(LightLegacyServFlag.Name) != 0 || ctx.GlobalInt(LightServeFlag.Name) != 0) + lightClient := ctx.String(SyncModeFlag.Name) == "light" + lightServer := (ctx.Int(LightServeFlag.Name) != 0) - lightPeers := ctx.GlobalInt(LightLegacyPeersFlag.Name) - if ctx.GlobalIsSet(LightMaxPeersFlag.Name) { - lightPeers = ctx.GlobalInt(LightMaxPeersFlag.Name) + lightPeers := ctx.Int(LightMaxPeersFlag.Name) + if lightClient && !ctx.IsSet(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(LightLegacyPeersFlag.Name) && !ctx.GlobalIsSet(LightMaxPeersFlag.Name) { + + if ctx.IsSet(MaxPeersFlag.Name) { + cfg.MaxPeers = ctx.Int(MaxPeersFlag.Name) + if lightServer && !ctx.IsSet(LightMaxPeersFlag.Name) { cfg.MaxPeers += lightPeers } } else { if lightServer { cfg.MaxPeers += lightPeers } - if lightClient && (ctx.GlobalIsSet(LightLegacyPeersFlag.Name) || ctx.GlobalIsSet(LightMaxPeersFlag.Name)) && cfg.MaxPeers < lightPeers { + if lightClient && ctx.IsSet(LightMaxPeersFlag.Name) && cfg.MaxPeers < lightPeers { cfg.MaxPeers = lightPeers } } @@ -1160,24 +1416,24 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { } log.Info("Maximum peer count", "ETH", ethPeers, "LES", lightPeers, "total", cfg.MaxPeers) - if ctx.GlobalIsSet(MaxPendingPeersFlag.Name) { - cfg.MaxPendingPeers = ctx.GlobalInt(MaxPendingPeersFlag.Name) + if ctx.IsSet(MaxPendingPeersFlag.Name) { + cfg.MaxPendingPeers = ctx.Int(MaxPendingPeersFlag.Name) } - if ctx.GlobalIsSet(NoDiscoverFlag.Name) || lightClient { + if ctx.IsSet(NoDiscoverFlag.Name) || lightClient { cfg.NoDiscovery = true } // if we're running a light client or server, force enable the v5 peer discovery // unless it is explicitly disabled with --nodiscover note that explicitly specifying // --v5disc overrides --nodiscover, in which case the later only disables v4 discovery - forceV5Discovery := (lightClient || lightServer) && !ctx.GlobalBool(NoDiscoverFlag.Name) - if ctx.GlobalIsSet(DiscoveryV5Flag.Name) { - cfg.DiscoveryV5 = ctx.GlobalBool(DiscoveryV5Flag.Name) + forceV5Discovery := (lightClient || lightServer) && !ctx.Bool(NoDiscoverFlag.Name) + if ctx.IsSet(DiscoveryV5Flag.Name) { + cfg.DiscoveryV5 = ctx.Bool(DiscoveryV5Flag.Name) } else if forceV5Discovery { cfg.DiscoveryV5 = true } - if netrestrict := ctx.GlobalString(NetrestrictFlag.Name); netrestrict != "" { + if netrestrict := ctx.String(NetrestrictFlag.Name); netrestrict != "" { list, err := netutil.ParseNetlist(netrestrict) if err != nil { Fatalf("Option %q: %v", NetrestrictFlag.Name, err) @@ -1185,10 +1441,11 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { cfg.NetRestrict = list } - if ctx.GlobalBool(DeveloperFlag.Name) { + if ctx.Bool(DeveloperFlag.Name) { // --dev mode can't use p2p networking. cfg.MaxPeers = 0 - cfg.ListenAddr = ":0" + cfg.ListenAddr = "" + cfg.NoDial = true cfg.NoDiscovery = true cfg.DiscoveryV5 = false } @@ -1202,30 +1459,40 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { setGraphQL(ctx, cfg) setWS(ctx, cfg) setNodeUserIdent(ctx, cfg) - setDataDir(ctx, cfg) + SetDataDir(ctx, cfg) setSmartCard(ctx, cfg) - if ctx.GlobalIsSet(ExternalSignerFlag.Name) { - cfg.ExternalSigner = ctx.GlobalString(ExternalSignerFlag.Name) + if ctx.IsSet(JWTSecretFlag.Name) { + cfg.JWTSecret = ctx.String(JWTSecretFlag.Name) } - if ctx.GlobalIsSet(KeyStoreDirFlag.Name) { - cfg.KeyStoreDir = ctx.GlobalString(KeyStoreDirFlag.Name) + if ctx.IsSet(ExternalSignerFlag.Name) { + cfg.ExternalSigner = ctx.String(ExternalSignerFlag.Name) + } + + if ctx.IsSet(KeyStoreDirFlag.Name) { + cfg.KeyStoreDir = ctx.String(KeyStoreDirFlag.Name) + } + if ctx.IsSet(DeveloperFlag.Name) { + cfg.UseLightweightKDF = true + } + if ctx.IsSet(LightKDFFlag.Name) { + cfg.UseLightweightKDF = ctx.Bool(LightKDFFlag.Name) } - if ctx.GlobalIsSet(LightKDFFlag.Name) { - cfg.UseLightweightKDF = ctx.GlobalBool(LightKDFFlag.Name) + if ctx.IsSet(NoUSBFlag.Name) || cfg.NoUSB { + log.Warn("Option nousb is deprecated and USB is deactivated by default. Use --usb to enable") } - if ctx.GlobalIsSet(NoUSBFlag.Name) { - cfg.NoUSB = ctx.GlobalBool(NoUSBFlag.Name) + if ctx.IsSet(USBFlag.Name) { + cfg.USB = ctx.Bool(USBFlag.Name) } - if ctx.GlobalIsSet(InsecureUnlockAllowedFlag.Name) { - cfg.InsecureUnlockAllowed = ctx.GlobalBool(InsecureUnlockAllowedFlag.Name) + if ctx.IsSet(InsecureUnlockAllowedFlag.Name) { + cfg.InsecureUnlockAllowed = ctx.Bool(InsecureUnlockAllowedFlag.Name) } } func setSmartCard(ctx *cli.Context, cfg *node.Config) { // Skip enabling smartcards if no path is set - path := ctx.GlobalString(SmartCardDaemonPathFlag.Name) + path := ctx.String(SmartCardDaemonPathFlag.Name) if path == "" { return } @@ -1243,37 +1510,58 @@ func setSmartCard(ctx *cli.Context, cfg *node.Config) { cfg.SmartCardDaemonPath = path } -func setDataDir(ctx *cli.Context, cfg *node.Config) { +func SetDataDir(ctx *cli.Context, cfg *node.Config) { switch { - case ctx.GlobalIsSet(DataDirFlag.Name): - cfg.DataDir = ctx.GlobalString(DataDirFlag.Name) - case ctx.GlobalBool(DeveloperFlag.Name): + case ctx.IsSet(DataDirFlag.Name): + cfg.DataDir = ctx.String(DataDirFlag.Name) + case ctx.Bool(DeveloperFlag.Name): cfg.DataDir = "" // unless explicitly requested, use memory databases - case ctx.GlobalBool(TestnetFlag.Name) && cfg.DataDir == node.DefaultDataDir(): - cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet") - case ctx.GlobalBool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + case ctx.Bool(RopstenFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + // Maintain compatibility with older Geth configurations storing the + // Ropsten database in `testnet` instead of `ropsten`. + legacyPath := filepath.Join(node.DefaultDataDir(), "testnet") + if common.FileExist(legacyPath) { + log.Warn("Using the deprecated `testnet` datadir. Future versions will store the Ropsten chain in `ropsten`.") + cfg.DataDir = legacyPath + } else { + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "ropsten") + } + + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "ropsten") + case ctx.Bool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") - case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + case ctx.Bool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") - case ctx.GlobalBool(LveFlag.Name) && cfg.DataDir == node.DefaultDataDir(): - cfg.DataDir = filepath.Join(node.DefaultDataDir(), "lve") - case ctx.GlobalBool(LvetestFlag.Name) && cfg.DataDir == node.DefaultDataDir(): - cfg.DataDir = filepath.Join(node.DefaultDataDir(), "lvetest") + case ctx.Bool(SepoliaFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "sepolia") + case ctx.Bool(KilnFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "kiln") } } -func setGPO(ctx *cli.Context, cfg *gasprice.Config) { - if ctx.GlobalIsSet(GpoBlocksFlag.Name) { - cfg.Blocks = ctx.GlobalInt(GpoBlocksFlag.Name) +func setGPO(ctx *cli.Context, cfg *gasprice.Config, light bool) { + // If we are running the light client, apply another group + // settings for gas oracle. + if light { + *cfg = ethconfig.LightClientGPO + } + if ctx.IsSet(GpoBlocksFlag.Name) { + cfg.Blocks = ctx.Int(GpoBlocksFlag.Name) + } + if ctx.IsSet(GpoPercentileFlag.Name) { + cfg.Percentile = ctx.Int(GpoPercentileFlag.Name) + } + if ctx.IsSet(GpoMaxGasPriceFlag.Name) { + cfg.MaxPrice = big.NewInt(ctx.Int64(GpoMaxGasPriceFlag.Name)) } - if ctx.GlobalIsSet(GpoPercentileFlag.Name) { - cfg.Percentile = ctx.GlobalInt(GpoPercentileFlag.Name) + if ctx.IsSet(GpoIgnoreGasPriceFlag.Name) { + cfg.IgnorePrice = big.NewInt(ctx.Int64(GpoIgnoreGasPriceFlag.Name)) } } func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) { - if ctx.GlobalIsSet(TxPoolLocalsFlag.Name) { - locals := strings.Split(ctx.GlobalString(TxPoolLocalsFlag.Name), ",") + if ctx.IsSet(TxPoolLocalsFlag.Name) { + locals := strings.Split(ctx.String(TxPoolLocalsFlag.Name), ",") for _, account := range locals { if trimmed := strings.TrimSpace(account); !common.IsHexAddress(trimmed) { Fatalf("Invalid account in --txpool.locals: %s", trimmed) @@ -1282,112 +1570,115 @@ func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) { } } } - if ctx.GlobalIsSet(TxPoolNoLocalsFlag.Name) { - cfg.NoLocals = ctx.GlobalBool(TxPoolNoLocalsFlag.Name) + if ctx.IsSet(TxPoolNoLocalsFlag.Name) { + cfg.NoLocals = ctx.Bool(TxPoolNoLocalsFlag.Name) } - if ctx.GlobalIsSet(TxPoolJournalFlag.Name) { - cfg.Journal = ctx.GlobalString(TxPoolJournalFlag.Name) + if ctx.IsSet(TxPoolJournalFlag.Name) { + cfg.Journal = ctx.String(TxPoolJournalFlag.Name) } - if ctx.GlobalIsSet(TxPoolRejournalFlag.Name) { - cfg.Rejournal = ctx.GlobalDuration(TxPoolRejournalFlag.Name) + if ctx.IsSet(TxPoolRejournalFlag.Name) { + cfg.Rejournal = ctx.Duration(TxPoolRejournalFlag.Name) } - if ctx.GlobalIsSet(TxPoolPriceLimitFlag.Name) { - cfg.PriceLimit = ctx.GlobalUint64(TxPoolPriceLimitFlag.Name) + if ctx.IsSet(TxPoolPriceLimitFlag.Name) { + cfg.PriceLimit = ctx.Uint64(TxPoolPriceLimitFlag.Name) } - if ctx.GlobalIsSet(TxPoolPriceBumpFlag.Name) { - cfg.PriceBump = ctx.GlobalUint64(TxPoolPriceBumpFlag.Name) + if ctx.IsSet(TxPoolPriceBumpFlag.Name) { + cfg.PriceBump = ctx.Uint64(TxPoolPriceBumpFlag.Name) } - if ctx.GlobalIsSet(TxPoolAccountSlotsFlag.Name) { - cfg.AccountSlots = ctx.GlobalUint64(TxPoolAccountSlotsFlag.Name) + if ctx.IsSet(TxPoolAccountSlotsFlag.Name) { + cfg.AccountSlots = ctx.Uint64(TxPoolAccountSlotsFlag.Name) } - if ctx.GlobalIsSet(TxPoolGlobalSlotsFlag.Name) { - cfg.GlobalSlots = ctx.GlobalUint64(TxPoolGlobalSlotsFlag.Name) + if ctx.IsSet(TxPoolGlobalSlotsFlag.Name) { + cfg.GlobalSlots = ctx.Uint64(TxPoolGlobalSlotsFlag.Name) } - if ctx.GlobalIsSet(TxPoolAccountQueueFlag.Name) { - cfg.AccountQueue = ctx.GlobalUint64(TxPoolAccountQueueFlag.Name) + if ctx.IsSet(TxPoolAccountQueueFlag.Name) { + cfg.AccountQueue = ctx.Uint64(TxPoolAccountQueueFlag.Name) } - if ctx.GlobalIsSet(TxPoolGlobalQueueFlag.Name) { - cfg.GlobalQueue = ctx.GlobalUint64(TxPoolGlobalQueueFlag.Name) + if ctx.IsSet(TxPoolGlobalQueueFlag.Name) { + cfg.GlobalQueue = ctx.Uint64(TxPoolGlobalQueueFlag.Name) } - if ctx.GlobalIsSet(TxPoolLifetimeFlag.Name) { - cfg.Lifetime = ctx.GlobalDuration(TxPoolLifetimeFlag.Name) + if ctx.IsSet(TxPoolLifetimeFlag.Name) { + cfg.Lifetime = ctx.Duration(TxPoolLifetimeFlag.Name) } } -func setEthash(ctx *cli.Context, cfg *eth.Config) { - if ctx.GlobalIsSet(EthashCacheDirFlag.Name) { - cfg.Ethash.CacheDir = ctx.GlobalString(EthashCacheDirFlag.Name) +func setEthash(ctx *cli.Context, cfg *ethconfig.Config) { + if ctx.IsSet(EthashCacheDirFlag.Name) { + cfg.Ethash.CacheDir = ctx.String(EthashCacheDirFlag.Name) } - if ctx.GlobalIsSet(EthashDatasetDirFlag.Name) { - cfg.Ethash.DatasetDir = ctx.GlobalString(EthashDatasetDirFlag.Name) + if ctx.IsSet(EthashDatasetDirFlag.Name) { + cfg.Ethash.DatasetDir = ctx.String(EthashDatasetDirFlag.Name) } - if ctx.GlobalIsSet(EthashCachesInMemoryFlag.Name) { - cfg.Ethash.CachesInMem = ctx.GlobalInt(EthashCachesInMemoryFlag.Name) + if ctx.IsSet(EthashCachesInMemoryFlag.Name) { + cfg.Ethash.CachesInMem = ctx.Int(EthashCachesInMemoryFlag.Name) } - if ctx.GlobalIsSet(EthashCachesOnDiskFlag.Name) { - cfg.Ethash.CachesOnDisk = ctx.GlobalInt(EthashCachesOnDiskFlag.Name) + if ctx.IsSet(EthashCachesOnDiskFlag.Name) { + cfg.Ethash.CachesOnDisk = ctx.Int(EthashCachesOnDiskFlag.Name) } - if ctx.GlobalIsSet(EthashDatasetsInMemoryFlag.Name) { - cfg.Ethash.DatasetsInMem = ctx.GlobalInt(EthashDatasetsInMemoryFlag.Name) + if ctx.IsSet(EthashCachesLockMmapFlag.Name) { + cfg.Ethash.CachesLockMmap = ctx.Bool(EthashCachesLockMmapFlag.Name) } - if ctx.GlobalIsSet(EthashDatasetsOnDiskFlag.Name) { - cfg.Ethash.DatasetsOnDisk = ctx.GlobalInt(EthashDatasetsOnDiskFlag.Name) + if ctx.IsSet(EthashDatasetsInMemoryFlag.Name) { + cfg.Ethash.DatasetsInMem = ctx.Int(EthashDatasetsInMemoryFlag.Name) + } + if ctx.IsSet(EthashDatasetsOnDiskFlag.Name) { + cfg.Ethash.DatasetsOnDisk = ctx.Int(EthashDatasetsOnDiskFlag.Name) + } + if ctx.IsSet(EthashDatasetsLockMmapFlag.Name) { + cfg.Ethash.DatasetsLockMmap = ctx.Bool(EthashDatasetsLockMmapFlag.Name) } } 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.IsSet(MinerNotifyFlag.Name) { + cfg.Notify = strings.Split(ctx.String(MinerNotifyFlag.Name), ",") } - if ctx.GlobalIsSet(MinerLegacyGasTargetFlag.Name) { - cfg.GasFloor = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name) + cfg.NotifyFull = ctx.Bool(MinerNotifyFullFlag.Name) + if ctx.IsSet(MinerExtraDataFlag.Name) { + cfg.ExtraData = []byte(ctx.String(MinerExtraDataFlag.Name)) } - if ctx.GlobalIsSet(MinerGasTargetFlag.Name) { - cfg.GasFloor = ctx.GlobalUint64(MinerGasTargetFlag.Name) + if ctx.IsSet(MinerGasLimitFlag.Name) { + cfg.GasCeil = ctx.Uint64(MinerGasLimitFlag.Name) } - if ctx.GlobalIsSet(MinerGasLimitFlag.Name) { - cfg.GasCeil = ctx.GlobalUint64(MinerGasLimitFlag.Name) + if ctx.IsSet(MinerGasPriceFlag.Name) { + cfg.GasPrice = flags.GlobalBig(ctx, MinerGasPriceFlag.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) { + if ctx.IsSet(MinerRecommitIntervalFlag.Name) { cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name) } - if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) { - cfg.Noverify = ctx.Bool(MinerNoVerfiyFlag.Name) + if ctx.IsSet(MinerNoVerifyFlag.Name) { + cfg.Noverify = ctx.Bool(MinerNoVerifyFlag.Name) + } + if ctx.IsSet(LegacyMinerGasTargetFlag.Name) { + log.Warn("The generic --miner.gastarget flag is deprecated and will be removed in the future!") } } -func setWhitelist(ctx *cli.Context, cfg *eth.Config) { - whitelist := ctx.GlobalString(WhitelistFlag.Name) - if whitelist == "" { - return +func setRequiredBlocks(ctx *cli.Context, cfg *ethconfig.Config) { + requiredBlocks := ctx.String(EthRequiredBlocksFlag.Name) + if requiredBlocks == "" { + if ctx.IsSet(LegacyWhitelistFlag.Name) { + log.Warn("The flag --whitelist is deprecated and will be removed, please use --eth.requiredblocks") + requiredBlocks = ctx.String(LegacyWhitelistFlag.Name) + } else { + return + } } - cfg.Whitelist = make(map[uint64]common.Hash) - for _, entry := range strings.Split(whitelist, ",") { + cfg.RequiredBlocks = make(map[uint64]common.Hash) + for _, entry := range strings.Split(requiredBlocks, ",") { parts := strings.Split(entry, "=") if len(parts) != 2 { - Fatalf("Invalid whitelist entry: %s", entry) + Fatalf("Invalid required block entry: %s", entry) } number, err := strconv.ParseUint(parts[0], 0, 64) if err != nil { - Fatalf("Invalid whitelist block number %s: %v", parts[0], err) + Fatalf("Invalid required block number %s: %v", parts[0], err) } var hash common.Hash if err = hash.UnmarshalText([]byte(parts[1])); err != nil { - Fatalf("Invalid whitelist hash %s: %v", parts[1], err) + Fatalf("Invalid required block hash %s: %v", parts[1], err) } - cfg.Whitelist[number] = hash + cfg.RequiredBlocks[number] = hash } } @@ -1403,13 +1694,13 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { panic(fmt.Sprintf("invalid argument, not cli.Flag type: %T", args[i])) } // Check if next arg extends current and expand its name if so - name := flag.GetName() + name := flag.Names()[0] if i+1 < len(args) { switch option := args[i+1].(type) { case string: // Extended flag check, make sure value set doesn't conflict with passed in option - if ctx.GlobalString(flag.GetName()) == option { + if ctx.String(flag.Names()[0]) == option { name += "=" + option set = append(set, "--"+name) } @@ -1423,7 +1714,7 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { } } // Mark the flag if it's set - if ctx.GlobalIsSet(flag.GetName()) { + if ctx.IsSet(flag.Names()[0]) { set = append(set, "--"+name) } } @@ -1432,239 +1723,381 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { } } -// SetShhConfig applies shh-related command line flags to the config. -func SetShhConfig(ctx *cli.Context, stack *node.Node, cfg *whisper.Config) { - if ctx.GlobalIsSet(WhisperMaxMessageSizeFlag.Name) { - cfg.MaxMessageSize = uint32(ctx.GlobalUint(WhisperMaxMessageSizeFlag.Name)) - } - if ctx.GlobalIsSet(WhisperMinPOWFlag.Name) { - cfg.MinimumAcceptedPOW = ctx.GlobalFloat64(WhisperMinPOWFlag.Name) - } - if ctx.GlobalIsSet(WhisperRestrictConnectionBetweenLightClientsFlag.Name) { - cfg.RestrictConnectionBetweenLightClients = true - } -} - // SetEthConfig applies eth-related command line flags to the config. -func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { +func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags - CheckExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag, GoerliFlag, LveFlag, LvetestFlag) - CheckExclusive(ctx, LightLegacyServFlag, LightServeFlag, SyncModeFlag, "light") + CheckExclusive(ctx, MainnetFlag, DeveloperFlag, RopstenFlag, RinkebyFlag, GoerliFlag, SepoliaFlag, KilnFlag) + CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer - + if ctx.String(GCModeFlag.Name) == "archive" && ctx.Uint64(TxLookupLimitFlag.Name) != 0 { + ctx.Set(TxLookupLimitFlag.Name, "0") + log.Warn("Disable transaction unindexing for archive node") + } + if ctx.IsSet(LightServeFlag.Name) && ctx.Uint64(TxLookupLimitFlag.Name) != 0 { + log.Warn("LES server cannot serve old transaction status and cannot connect below les/4 protocol version if transaction lookup index is limited") + } 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) + setGPO(ctx, &cfg.GPO, ctx.String(SyncModeFlag.Name) == "light") setTxPool(ctx, &cfg.TxPool) setEthash(ctx, cfg) setMiner(ctx, &cfg.Miner) - setWhitelist(ctx, cfg) + setRequiredBlocks(ctx, cfg) setLes(ctx, cfg) - if ctx.GlobalIsSet(SyncModeFlag.Name) { - cfg.SyncMode = *GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode) + // Cap the cache allowance and tune the garbage collector + mem, err := gopsutil.VirtualMemory() + if err == nil { + if 32<<(^uintptr(0)>>63) == 32 && mem.Total > 2*1024*1024*1024 { + log.Warn("Lowering memory allowance on 32bit arch", "available", mem.Total/1024/1024, "addressable", 2*1024) + mem.Total = 2 * 1024 * 1024 * 1024 + } + allowance := int(mem.Total / 1024 / 1024 / 3) + if cache := ctx.Int(CacheFlag.Name); cache > allowance { + log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance) + ctx.Set(CacheFlag.Name, strconv.Itoa(allowance)) + } } - if ctx.GlobalIsSet(NetworkIdFlag.Name) { - cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name) + // Ensure Go's GC ignores the database cache for trigger percentage + cache := ctx.Int(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)) + + if ctx.IsSet(SyncModeFlag.Name) { + cfg.SyncMode = *flags.GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode) + } + if ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkId = ctx.Uint64(NetworkIdFlag.Name) } - if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheDatabaseFlag.Name) { - cfg.DatabaseCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheDatabaseFlag.Name) / 100 + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheDatabaseFlag.Name) { + cfg.DatabaseCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheDatabaseFlag.Name) / 100 } - cfg.DatabaseHandles = makeDatabaseHandles() - if ctx.GlobalIsSet(AncientFlag.Name) { - cfg.DatabaseFreezer = ctx.GlobalString(AncientFlag.Name) + cfg.DatabaseHandles = MakeDatabaseHandles(ctx.Int(FDLimitFlag.Name)) + if ctx.IsSet(AncientFlag.Name) { + cfg.DatabaseFreezer = ctx.String(AncientFlag.Name) } - if gcmode := ctx.GlobalString(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" { + if gcmode := ctx.String(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 + if ctx.IsSet(GCModeFlag.Name) { + cfg.NoPruning = ctx.String(GCModeFlag.Name) == "archive" + } + if ctx.IsSet(CacheNoPrefetchFlag.Name) { + cfg.NoPrefetch = ctx.Bool(CacheNoPrefetchFlag.Name) + } + // Read the value from the flag no matter if it's set or not. + cfg.Preimages = ctx.Bool(CachePreimagesFlag.Name) + if cfg.NoPruning && !cfg.Preimages { + cfg.Preimages = true + log.Info("Enabling recording of key preimages since archive mode is used") + } + if ctx.IsSet(TxLookupLimitFlag.Name) { + cfg.TxLookupLimit = ctx.Uint64(TxLookupLimitFlag.Name) } - if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheGCFlag.Name) { - cfg.TrieDirtyCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheGCFlag.Name) / 100 + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheTrieFlag.Name) { + cfg.TrieCleanCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheTrieFlag.Name) / 100 } - if ctx.GlobalIsSet(DocRootFlag.Name) { - cfg.DocRoot = ctx.GlobalString(DocRootFlag.Name) + if ctx.IsSet(CacheTrieJournalFlag.Name) { + cfg.TrieCleanCacheJournal = ctx.String(CacheTrieJournalFlag.Name) } - if ctx.GlobalIsSet(VMEnableDebugFlag.Name) { + if ctx.IsSet(CacheTrieRejournalFlag.Name) { + cfg.TrieCleanCacheRejournal = ctx.Duration(CacheTrieRejournalFlag.Name) + } + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) { + cfg.TrieDirtyCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100 + } + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheSnapshotFlag.Name) { + cfg.SnapshotCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheSnapshotFlag.Name) / 100 + } + if ctx.IsSet(CacheLogSizeFlag.Name) { + cfg.FilterLogCacheSize = ctx.Int(CacheLogSizeFlag.Name) + } + if !ctx.Bool(SnapshotFlag.Name) { + // If snap-sync is requested, this flag is also required + if cfg.SyncMode == downloader.SnapSync { + log.Info("Snap sync requested, enabling --snapshot") + } else { + cfg.TrieCleanCache += cfg.SnapshotCache + cfg.SnapshotCache = 0 // Disabled + } + } + if ctx.IsSet(DocRootFlag.Name) { + cfg.DocRoot = ctx.String(DocRootFlag.Name) + } + if ctx.IsSet(VMEnableDebugFlag.Name) { // TODO(fjl): force-enable this in --dev mode - cfg.EnablePreimageRecording = ctx.GlobalBool(VMEnableDebugFlag.Name) + cfg.EnablePreimageRecording = ctx.Bool(VMEnableDebugFlag.Name) } - if ctx.GlobalIsSet(EWASMInterpreterFlag.Name) { - cfg.EWASMInterpreter = ctx.GlobalString(EWASMInterpreterFlag.Name) + if ctx.IsSet(RPCGlobalGasCapFlag.Name) { + cfg.RPCGasCap = ctx.Uint64(RPCGlobalGasCapFlag.Name) } - - if ctx.GlobalIsSet(EVMInterpreterFlag.Name) { - cfg.EVMInterpreter = ctx.GlobalString(EVMInterpreterFlag.Name) + if cfg.RPCGasCap != 0 { + log.Info("Set global gas cap", "cap", cfg.RPCGasCap) + } else { + log.Info("Global gas cap disabled") } - if ctx.GlobalIsSet(RPCGlobalGasCap.Name) { - cfg.RPCGasCap = new(big.Int).SetUint64(ctx.GlobalUint64(RPCGlobalGasCap.Name)) + if ctx.IsSet(RPCGlobalEVMTimeoutFlag.Name) { + cfg.RPCEVMTimeout = ctx.Duration(RPCGlobalEVMTimeoutFlag.Name) + } + if ctx.IsSet(RPCGlobalTxFeeCapFlag.Name) { + cfg.RPCTxFeeCap = ctx.Float64(RPCGlobalTxFeeCapFlag.Name) + } + if ctx.IsSet(NoDiscoverFlag.Name) { + cfg.EthDiscoveryURLs, cfg.SnapDiscoveryURLs = []string{}, []string{} + } else if ctx.IsSet(DNSDiscoveryFlag.Name) { + urls := ctx.String(DNSDiscoveryFlag.Name) + if urls == "" { + cfg.EthDiscoveryURLs = []string{} + } else { + cfg.EthDiscoveryURLs = SplitAndTrim(urls) + } } - // Override any default configs for hard coded networks. switch { - case ctx.GlobalBool(TestnetFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + case ctx.Bool(MainnetFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 1 + } + cfg.Genesis = core.DefaultGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) + case ctx.Bool(RopstenFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 3 } - cfg.Genesis = core.DefaultTestnetGenesisBlock() - case ctx.GlobalBool(RinkebyFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + cfg.Genesis = core.DefaultRopstenGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.RopstenGenesisHash) + case ctx.Bool(SepoliaFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 11155111 + } + cfg.Genesis = core.DefaultSepoliaGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.SepoliaGenesisHash) + case ctx.Bool(RinkebyFlag.Name): + log.Warn("") + log.Warn("--------------------------------------------------------------------------------") + log.Warn("Please note, Rinkeby has been deprecated. It will still work for the time being,") + log.Warn("but there will be no further hard-forks shipped for it. Eventually the network") + log.Warn("will be permanently halted after the other networks transition through the merge") + log.Warn("and prove stable enough. For the most future proof testnet, choose Sepolia as") + log.Warn("your replacement environment (--sepolia instead of --rinkeby).") + log.Warn("--------------------------------------------------------------------------------") + log.Warn("") + + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 4 } cfg.Genesis = core.DefaultRinkebyGenesisBlock() - case ctx.GlobalBool(GoerliFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + SetDNSDiscoveryDefaults(cfg, params.RinkebyGenesisHash) + case ctx.Bool(GoerliFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 5 } cfg.Genesis = core.DefaultGoerliGenesisBlock() - case ctx.GlobalBool(LveFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { - cfg.NetworkId = 12345 - } - cfg.Genesis = core.DefaultLveGenesisBlock() - case ctx.GlobalBool(LvetestFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { - cfg.NetworkId = 12346 + SetDNSDiscoveryDefaults(cfg, params.GoerliGenesisHash) + case ctx.Bool(KilnFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkId = 1337802 } - cfg.Genesis = core.DefaultLvetestGenesisBlock() - case ctx.GlobalBool(DeveloperFlag.Name): - if !ctx.GlobalIsSet(NetworkIdFlag.Name) { + cfg.Genesis = core.DefaultKilnGenesisBlock() + SetDNSDiscoveryDefaults(cfg, params.KilnGenesisHash) + case ctx.Bool(DeveloperFlag.Name): + if !ctx.IsSet(NetworkIdFlag.Name) { cfg.NetworkId = 1337 } + cfg.SyncMode = downloader.FullSync // Create new developer account or reuse existing one var ( - developer accounts.Account - err error + developer accounts.Account + passphrase string + err error ) - if accs := ks.Accounts(); len(accs) > 0 { + if list := MakePasswordList(ctx); len(list) > 0 { + // Just take the first value. Although the function returns a possible multiple values and + // some usages iterate through them as attempts, that doesn't make sense in this setting, + // when we're definitely concerned with only one account. + passphrase = list[0] + } + // setEtherbase has been called above, configuring the miner address from command line flags. + if cfg.Miner.Etherbase != (common.Address{}) { + developer = accounts.Account{Address: cfg.Miner.Etherbase} + } else if accs := ks.Accounts(); len(accs) > 0 { developer = ks.Accounts()[0] } else { - developer, err = ks.NewAccount("") + developer, err = ks.NewAccount(passphrase) if err != nil { Fatalf("Failed to create developer account: %v", err) } } - if err := ks.Unlock(developer, ""); err != nil { + if err := ks.Unlock(developer, passphrase); err != nil { Fatalf("Failed to unlock developer account: %v", err) } log.Info("Using developer account", "address", developer.Address) - cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.GlobalInt(DeveloperPeriodFlag.Name)), developer.Address) - if !ctx.GlobalIsSet(MinerGasPriceFlag.Name) && !ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { + // Create a new developer genesis block or reuse existing one + cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.Int(DeveloperPeriodFlag.Name)), ctx.Uint64(DeveloperGasLimitFlag.Name), developer.Address) + if ctx.IsSet(DataDirFlag.Name) { + // If datadir doesn't exist we need to open db in write-mode + // so leveldb can create files. + readonly := true + if !common.FileExist(stack.ResolvePath("chaindata")) { + readonly = false + } + // Check if we have an already initialized chain and fall back to + // that if so. Otherwise we need to generate a new genesis spec. + chaindb := MakeChainDatabase(ctx, stack, readonly) + if rawdb.ReadCanonicalHash(chaindb, 0) != (common.Hash{}) { + cfg.Genesis = nil // fallback to db content + } + chaindb.Close() + } + if !ctx.IsSet(MinerGasPriceFlag.Name) { cfg.Miner.GasPrice = big.NewInt(1) } + default: + if cfg.NetworkId == 1 { + SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) + } } } -// SetDashboardConfig applies dashboard related command line flags to the config. -func SetDashboardConfig(ctx *cli.Context, cfg *dashboard.Config) { - cfg.Host = ctx.GlobalString(DashboardAddrFlag.Name) - cfg.Port = ctx.GlobalInt(DashboardPortFlag.Name) - cfg.Refresh = ctx.GlobalDuration(DashboardRefreshFlag.Name) +// SetDNSDiscoveryDefaults configures DNS discovery with the given URL if +// no URLs are set. +func SetDNSDiscoveryDefaults(cfg *ethconfig.Config, genesis common.Hash) { + if cfg.EthDiscoveryURLs != nil { + return // already set through flags/config + } + protocol := "all" + if cfg.SyncMode == downloader.LightSync { + protocol = "les" + } + if url := params.KnownDNSNetwork(genesis, protocol); url != "" { + cfg.EthDiscoveryURLs = []string{url} + cfg.SnapDiscoveryURLs = cfg.EthDiscoveryURLs + } } // RegisterEthService adds an Ethereum client to the stack. -func RegisterEthService(stack *node.Node, cfg *eth.Config) { - var err error +// The second return value is the full node instance, which may be nil if the +// node is running as a light client. +func RegisterEthService(stack *node.Node, cfg *ethconfig.Config) (ethapi.Backend, *eth.Ethereum) { if cfg.SyncMode == downloader.LightSync { - err = stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return les.New(ctx, cfg) - }) - } else { - err = stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - fullNode, err := eth.New(ctx, cfg) - if fullNode != nil && cfg.LightServ > 0 { - ls, _ := les.NewLesServer(fullNode, cfg) - fullNode.AddLesServer(ls) - } - return fullNode, err - }) + backend, err := les.New(stack, cfg) + if err != nil { + Fatalf("Failed to register the Ethereum service: %v", err) + } + stack.RegisterAPIs(tracers.APIs(backend.ApiBackend)) + if err := lescatalyst.Register(stack, backend); err != nil { + Fatalf("Failed to register the Engine API service: %v", err) + } + return backend.ApiBackend, nil } + backend, err := eth.New(stack, cfg) if err != nil { Fatalf("Failed to register the Ethereum service: %v", err) } -} - -// RegisterDashboardService adds a dashboard to the stack. -func RegisterDashboardService(stack *node.Node, cfg *dashboard.Config, commit string) { - stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return dashboard.New(cfg, commit, ctx.ResolvePath("logs")), nil - }) -} - -// RegisterShhService configures Whisper and adds it to the given node. -func RegisterShhService(stack *node.Node, cfg *whisper.Config) { - if err := stack.Register(func(n *node.ServiceContext) (node.Service, error) { - return whisper.New(cfg), nil - }); err != nil { - Fatalf("Failed to register the Whisper service: %v", err) + if cfg.LightServ > 0 { + _, err := les.NewLesServer(stack, backend, cfg) + if err != nil { + Fatalf("Failed to create the LES server: %v", err) + } + } + if err := ethcatalyst.Register(stack, backend); err != nil { + Fatalf("Failed to register the Engine API service: %v", err) } + stack.RegisterAPIs(tracers.APIs(backend.APIBackend)) + return backend.APIBackend, backend } -// RegisterEthStatsService configures the Ethereum Stats daemon and adds it to -// the given node. -func RegisterEthStatsService(stack *node.Node, url string) { - if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - // Retrieve both eth and les services - var ethServ *eth.Ethereum - ctx.Service(ðServ) - - var lesServ *les.LightEthereum - ctx.Service(&lesServ) - - // Let ethstats use whichever is not nil - return ethstats.New(url, ethServ, lesServ) - }); err != nil { +// RegisterEthStatsService configures the Ethereum Stats daemon and adds it to the node. +func RegisterEthStatsService(stack *node.Node, backend ethapi.Backend, url string) { + if err := ethstats.New(stack, backend, backend.Engine(), url); 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 { +// RegisterGraphQLService adds the GraphQL API to the node. +func RegisterGraphQLService(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cfg *node.Config) { + err := graphql.New(stack, backend, filterSystem, cfg.GraphQLCors, cfg.GraphQLVirtualHosts) + if err != nil { Fatalf("Failed to register the GraphQL service: %v", err) } } +// RegisterFilterAPI adds the eth log filtering RPC API to the node. +func RegisterFilterAPI(stack *node.Node, backend ethapi.Backend, ethcfg *ethconfig.Config) *filters.FilterSystem { + isLightClient := ethcfg.SyncMode == downloader.LightSync + filterSystem := filters.NewFilterSystem(backend, filters.Config{ + LogCacheSize: ethcfg.FilterLogCacheSize, + }) + stack.RegisterAPIs([]rpc.API{{ + Namespace: "eth", + Service: filters.NewFilterAPI(filterSystem, isLightClient), + }}) + return filterSystem +} + func SetupMetrics(ctx *cli.Context) { if metrics.Enabled { log.Info("Enabling metrics collection") + + var ( + enableExport = ctx.Bool(MetricsEnableInfluxDBFlag.Name) + enableExportV2 = ctx.Bool(MetricsEnableInfluxDBV2Flag.Name) + ) + + if enableExport || enableExportV2 { + CheckExclusive(ctx, MetricsEnableInfluxDBFlag, MetricsEnableInfluxDBV2Flag) + + v1FlagIsSet := ctx.IsSet(MetricsInfluxDBUsernameFlag.Name) || + ctx.IsSet(MetricsInfluxDBPasswordFlag.Name) + + v2FlagIsSet := ctx.IsSet(MetricsInfluxDBTokenFlag.Name) || + ctx.IsSet(MetricsInfluxDBOrganizationFlag.Name) || + ctx.IsSet(MetricsInfluxDBBucketFlag.Name) + + if enableExport && v2FlagIsSet { + Fatalf("Flags --influxdb.metrics.organization, --influxdb.metrics.token, --influxdb.metrics.bucket are only available for influxdb-v2") + } else if enableExportV2 && v1FlagIsSet { + Fatalf("Flags --influxdb.metrics.username, --influxdb.metrics.password are only available for influxdb-v1") + } + } + var ( - enableExport = ctx.GlobalBool(MetricsEnableInfluxDBFlag.Name) - endpoint = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name) - database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name) - username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name) - password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name) + endpoint = ctx.String(MetricsInfluxDBEndpointFlag.Name) + database = ctx.String(MetricsInfluxDBDatabaseFlag.Name) + username = ctx.String(MetricsInfluxDBUsernameFlag.Name) + password = ctx.String(MetricsInfluxDBPasswordFlag.Name) + + token = ctx.String(MetricsInfluxDBTokenFlag.Name) + bucket = ctx.String(MetricsInfluxDBBucketFlag.Name) + organization = ctx.String(MetricsInfluxDBOrganizationFlag.Name) ) if enableExport { - tagsMap := SplitTagsFlag(ctx.GlobalString(MetricsInfluxDBTagsFlag.Name)) + tagsMap := SplitTagsFlag(ctx.String(MetricsInfluxDBTagsFlag.Name)) log.Info("Enabling metrics export to InfluxDB") go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", tagsMap) + } else if enableExportV2 { + tagsMap := SplitTagsFlag(ctx.String(MetricsInfluxDBTagsFlag.Name)) + + log.Info("Enabling metrics export to InfluxDB (v2)") + + go influxdb.InfluxDBV2WithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, token, bucket, organization, "geth.", tagsMap) + } + + if ctx.IsSet(MetricsHTTPFlag.Name) { + address := fmt.Sprintf("%s:%d", ctx.String(MetricsHTTPFlag.Name), ctx.Int(MetricsPortFlag.Name)) + log.Info("Enabling stand-alone metrics HTTP endpoint", "address", address) + exp.Setup(address) } } } @@ -1687,16 +2120,23 @@ func SplitTagsFlag(tagsFlag string) map[string]string { } // MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails. -func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { +func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb.Database { var ( - cache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheDatabaseFlag.Name) / 100 - handles = makeDatabaseHandles() + cache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheDatabaseFlag.Name) / 100 + handles = MakeDatabaseHandles(ctx.Int(FDLimitFlag.Name)) + + err error + chainDb ethdb.Database ) - name := "chaindata" - if ctx.GlobalString(SyncModeFlag.Name) == "light" { - name = "lightchaindata" + switch { + case ctx.IsSet(RemoteDBFlag.Name): + log.Info("Using remote db", "url", ctx.String(RemoteDBFlag.Name)) + chainDb, err = remotedb.New(ctx.String(RemoteDBFlag.Name)) + case ctx.String(SyncModeFlag.Name) == "light": + chainDb, err = stack.OpenDatabase("lightchaindata", cache, handles, "", readonly) + default: + chainDb, err = stack.OpenDatabaseWithFreezer("chaindata", cache, handles, ctx.String(AncientFlag.Name), "", readonly) } - chainDb, err := stack.OpenDatabaseWithFreezer(name, cache, handles, ctx.GlobalString(AncientFlag.Name), "") if err != nil { Fatalf("Could not open database: %v", err) } @@ -1706,69 +2146,69 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { func MakeGenesis(ctx *cli.Context) *core.Genesis { var genesis *core.Genesis switch { - case ctx.GlobalBool(TestnetFlag.Name): - genesis = core.DefaultTestnetGenesisBlock() - case ctx.GlobalBool(RinkebyFlag.Name): + case ctx.Bool(MainnetFlag.Name): + genesis = core.DefaultGenesisBlock() + case ctx.Bool(RopstenFlag.Name): + genesis = core.DefaultRopstenGenesisBlock() + case ctx.Bool(SepoliaFlag.Name): + genesis = core.DefaultSepoliaGenesisBlock() + case ctx.Bool(RinkebyFlag.Name): genesis = core.DefaultRinkebyGenesisBlock() - case ctx.GlobalBool(GoerliFlag.Name): + case ctx.Bool(GoerliFlag.Name): genesis = core.DefaultGoerliGenesisBlock() - case ctx.GlobalBool(LveFlag.Name): - genesis = core.DefaultLveGenesisBlock() - case ctx.GlobalBool(LvetestFlag.Name): - genesis = core.DefaultLvetestGenesisBlock() - case ctx.GlobalBool(DeveloperFlag.Name): + case ctx.Bool(KilnFlag.Name): + genesis = core.DefaultKilnGenesisBlock() + case ctx.Bool(DeveloperFlag.Name): Fatalf("Developer chains are ephemeral") } return genesis } // MakeChain creates a chain manager from set command line flags. -func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chainDb ethdb.Database) { - var err error - chainDb = MakeChainDatabase(ctx, stack) - config, _, err := core.SetupGenesisBlock(chainDb, MakeGenesis(ctx)) +func MakeChain(ctx *cli.Context, stack *node.Node) (*core.BlockChain, ethdb.Database) { + var ( + gspec = MakeGenesis(ctx) + chainDb = MakeChainDatabase(ctx, stack, false) // TODO(rjl493456442) support read-only database + ) + cliqueConfig, err := core.LoadCliqueConfig(chainDb, gspec) if err != nil { Fatalf("%v", err) } - var engine consensus.Engine - if config.Clique != nil { - engine = clique.New(config.Clique, chainDb) - } else if config.EccPoW != nil { - engine = eccpow.NewFaker() - if !ctx.GlobalBool(EccPoWFlag.Name) { - engine = eccpow.New(eccpow.Config{}, nil, false) - } - } else { - engine = ethash.NewFaker() - if !ctx.GlobalBool(FakePoWFlag.Name) { - engine = ethash.New(ethash.Config{ - CacheDir: stack.ResolvePath(eth.DefaultConfig.Ethash.CacheDir), - CachesInMem: eth.DefaultConfig.Ethash.CachesInMem, - CachesOnDisk: eth.DefaultConfig.Ethash.CachesOnDisk, - DatasetDir: stack.ResolvePath(eth.DefaultConfig.Ethash.DatasetDir), - DatasetsInMem: eth.DefaultConfig.Ethash.DatasetsInMem, - DatasetsOnDisk: eth.DefaultConfig.Ethash.DatasetsOnDisk, - }, nil, false) - } + ethashConfig := ethconfig.Defaults.Ethash + if ctx.Bool(FakePoWFlag.Name) { + ethashConfig.PowMode = ethash.ModeFake } - if gcmode := ctx.GlobalString(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" { + engine := ethconfig.CreateConsensusEngine(stack, ðashConfig, cliqueConfig, nil, false, chainDb) + if gcmode := ctx.String(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" { Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name) } cache := &core.CacheConfig{ - TrieCleanLimit: eth.DefaultConfig.TrieCleanCache, - TrieCleanNoPrefetch: ctx.GlobalBool(CacheNoPrefetchFlag.Name), - TrieDirtyLimit: eth.DefaultConfig.TrieDirtyCache, - TrieDirtyDisabled: ctx.GlobalString(GCModeFlag.Name) == "archive", - TrieTimeLimit: eth.DefaultConfig.TrieTimeout, + TrieCleanLimit: ethconfig.Defaults.TrieCleanCache, + TrieCleanNoPrefetch: ctx.Bool(CacheNoPrefetchFlag.Name), + TrieDirtyLimit: ethconfig.Defaults.TrieDirtyCache, + TrieDirtyDisabled: ctx.String(GCModeFlag.Name) == "archive", + TrieTimeLimit: ethconfig.Defaults.TrieTimeout, + SnapshotLimit: ethconfig.Defaults.SnapshotCache, + Preimages: ctx.Bool(CachePreimagesFlag.Name), + } + if cache.TrieDirtyDisabled && !cache.Preimages { + cache.Preimages = true + log.Info("Enabling recording of key preimages since archive mode is used") } - if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheTrieFlag.Name) { - cache.TrieCleanLimit = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheTrieFlag.Name) / 100 + if !ctx.Bool(SnapshotFlag.Name) { + cache.SnapshotLimit = 0 // Disabled } - if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheGCFlag.Name) { - cache.TrieDirtyLimit = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheGCFlag.Name) / 100 + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheTrieFlag.Name) { + cache.TrieCleanLimit = ctx.Int(CacheFlag.Name) * ctx.Int(CacheTrieFlag.Name) / 100 } - vmcfg := vm.Config{EnablePreimageRecording: ctx.GlobalBool(VMEnableDebugFlag.Name)} - chain, err = core.NewBlockChain(chainDb, cache, config, engine, vmcfg, nil) + if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) { + cache.TrieDirtyLimit = ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100 + } + vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name)} + + // TODO(rjl493456442) disable snapshot generation/wiping if the chain is read only. + // Disable transaction indexing/unindexing by default. + chain, err := core.NewBlockChain(chainDb, cache, gspec, nil, engine, vmcfg, nil, nil) if err != nil { Fatalf("Can't create BlockChain: %v", err) } @@ -1779,39 +2219,14 @@ func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chai // scripts to preload before starting. func MakeConsolePreloads(ctx *cli.Context) []string { // Skip preloading if there's nothing to preload - if ctx.GlobalString(PreloadJSFlag.Name) == "" { + if ctx.String(PreloadJSFlag.Name) == "" { return nil } // Otherwise resolve absolute paths and return them var preloads []string - assets := ctx.GlobalString(JSpathFlag.Name) - for _, file := range strings.Split(ctx.GlobalString(PreloadJSFlag.Name), ",") { - preloads = append(preloads, common.AbsolutePath(assets, strings.TrimSpace(file))) + for _, file := range strings.Split(ctx.String(PreloadJSFlag.Name), ",") { + preloads = append(preloads, strings.TrimSpace(file)) } return preloads } - -// MigrateFlags sets the global flag from a local flag when it's set. -// This is a temporary function used for migrating old command/flags to the -// new format. -// -// e.g. geth account new --keystore /tmp/mykeystore --lightkdf -// -// is equivalent after calling this method with: -// -// geth --keystore /tmp/mykeystore --lightkdf account new -// -// This allows the use of the existing configuration functionality. -// When all flags are migrated this function can be removed and the existing -// configuration functionality must be changed that is uses local flags -func MigrateFlags(action func(ctx *cli.Context) error) func(*cli.Context) error { - return func(ctx *cli.Context) error { - for _, name := range ctx.FlagNames() { - if ctx.IsSet(name) { - ctx.GlobalSet(name, ctx.String(name)) - } - } - return action(ctx) - } -} diff --git a/cmd/utils/flags_legacy.go b/cmd/utils/flags_legacy.go new file mode 100644 index 00000000..651c69bd --- /dev/null +++ b/cmd/utils/flags_legacy.go @@ -0,0 +1,67 @@ +// Copyright 2020 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 utils + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/urfave/cli/v2" +) + +var ShowDeprecated = &cli.Command{ + Action: showDeprecated, + Name: "show-deprecated-flags", + Usage: "Show flags that have been deprecated", + ArgsUsage: " ", + Description: "Show flags that have been deprecated and will soon be removed", +} + +var DeprecatedFlags = []cli.Flag{ + LegacyMinerGasTargetFlag, + NoUSBFlag, +} + +var ( + // (Deprecated May 2020, shown in aliased flags section) + NoUSBFlag = &cli.BoolFlag{ + Name: "nousb", + Usage: "Disables monitoring for and managing USB hardware wallets (deprecated)", + Category: flags.DeprecatedCategory, + } + // (Deprecated July 2021, shown in aliased flags section) + LegacyMinerGasTargetFlag = &cli.Uint64Flag{ + Name: "miner.gastarget", + Usage: "Target gas floor for mined blocks (deprecated)", + Value: ethconfig.Defaults.Miner.GasFloor, + Category: flags.DeprecatedCategory, + } +) + +// showDeprecated displays deprecated flags that will be soon removed from the codebase. +func showDeprecated(*cli.Context) error { + fmt.Println("--------------------------------------------------------------------") + fmt.Println("The following flags are deprecated and will be removed in the future!") + fmt.Println("--------------------------------------------------------------------") + fmt.Println() + for _, flag := range DeprecatedFlags { + fmt.Println(flag.String()) + } + fmt.Println() + return nil +} diff --git a/cmd/utils/prompt.go b/cmd/utils/prompt.go new file mode 100644 index 00000000..f513e381 --- /dev/null +++ b/cmd/utils/prompt.go @@ -0,0 +1,62 @@ +// Copyright 2020 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 utils contains internal helper functions for go-ethereum commands. +package utils + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/console/prompt" +) + +// GetPassPhrase displays the given text(prompt) to the user and requests some textual +// data to be entered, but one which must not be echoed out into the terminal. +// The method returns the input provided by the user. +func GetPassPhrase(text string, confirmation bool) string { + if text != "" { + fmt.Println(text) + } + password, err := prompt.Stdin.PromptPassword("Password: ") + if err != nil { + Fatalf("Failed to read password: %v", err) + } + if confirmation { + confirm, err := prompt.Stdin.PromptPassword("Repeat password: ") + if err != nil { + Fatalf("Failed to read password confirmation: %v", err) + } + if password != confirm { + Fatalf("Passwords do not match") + } + } + return password +} + +// GetPassPhraseWithList retrieves the password associated with an account, either fetched +// from a list of preloaded passphrases, or requested interactively from the user. +func GetPassPhraseWithList(text string, confirmation bool, index int, passwords []string) string { + // If a list of passwords was supplied, retrieve from them + if len(passwords) > 0 { + if index < len(passwords) { + return passwords[index] + } + return passwords[len(passwords)-1] + } + // Otherwise prompt the user for the password + password := GetPassPhrase(text, confirmation) + return password +} diff --git a/cmd/utils/prompt_test.go b/cmd/utils/prompt_test.go new file mode 100644 index 00000000..86ee8b65 --- /dev/null +++ b/cmd/utils/prompt_test.go @@ -0,0 +1,74 @@ +// Copyright 2020 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 utils contains internal helper functions for go-ethereum commands. +package utils + +import ( + "testing" +) + +func TestGetPassPhraseWithList(t *testing.T) { + type args struct { + text string + confirmation bool + index int + passwords []string + } + tests := []struct { + name string + args args + want string + }{ + { + "test1", + args{ + "text1", + false, + 0, + []string{"zero", "one", "two"}, + }, + "zero", + }, + { + "test2", + args{ + "text2", + false, + 5, + []string{"zero", "one", "two"}, + }, + "two", + }, + { + "test3", + args{ + "text3", + true, + 1, + []string{"zero", "one", "two"}, + }, + "one", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GetPassPhraseWithList(tt.args.text, tt.args.confirmation, tt.args.index, tt.args.passwords); got != tt.want { + t.Errorf("GetPassPhraseWithList() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cmd/wnode/main.go b/cmd/wnode/main.go deleted file mode 100644 index 2d3ceb39..00000000 --- a/cmd/wnode/main.go +++ /dev/null @@ -1,772 +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 . - -// This is a simple Whisper node. It could be used as a stand-alone bootstrap node. -// Also, could be used for different test and diagnostics purposes. - -package main - -import ( - "bufio" - "crypto/ecdsa" - crand "crypto/rand" - "crypto/sha512" - "encoding/binary" - "encoding/hex" - "flag" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/console" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/whisper/mailserver" - whisper "github.com/cryptoecc/ETH-ECC/whisper/whisperv6" - "golang.org/x/crypto/pbkdf2" -) - -const quitCommand = "~Q" -const entropySize = 32 - -// singletons -var ( - server *p2p.Server - shh *whisper.Whisper - done chan struct{} - mailServer mailserver.WMailServer - entropy [entropySize]byte - - input = bufio.NewReader(os.Stdin) -) - -// encryption -var ( - symKey []byte - pub *ecdsa.PublicKey - asymKey *ecdsa.PrivateKey - nodeid *ecdsa.PrivateKey - topic whisper.TopicType - - asymKeyID string - asymFilterID string - symFilterID string - symPass string - msPassword string -) - -// cmd arguments -var ( - bootstrapMode = flag.Bool("standalone", false, "boostrap node: don't initiate connection to peers, just wait for incoming connections") - forwarderMode = flag.Bool("forwarder", false, "forwarder mode: only forward messages, neither encrypt nor decrypt messages") - mailServerMode = flag.Bool("mailserver", false, "mail server mode: delivers expired messages on demand") - requestMail = flag.Bool("mailclient", false, "request expired messages from the bootstrap server") - asymmetricMode = flag.Bool("asym", false, "use asymmetric encryption") - generateKey = flag.Bool("generatekey", false, "generate and show the private key") - fileExMode = flag.Bool("fileexchange", false, "file exchange mode") - fileReader = flag.Bool("filereader", false, "load and decrypt messages saved as files, display as plain text") - testMode = flag.Bool("test", false, "use of predefined parameters for diagnostics (password, etc.)") - echoMode = flag.Bool("echo", false, "echo mode: prints some arguments for diagnostics") - - argVerbosity = flag.Int("verbosity", int(log.LvlError), "log verbosity level") - argTTL = flag.Uint("ttl", 30, "time-to-live for messages in seconds") - argWorkTime = flag.Uint("work", 5, "work time in seconds") - argMaxSize = flag.Uint("maxsize", uint(whisper.DefaultMaxMessageSize), "max size of message") - argPoW = flag.Float64("pow", whisper.DefaultMinimumPoW, "PoW for normal messages in float format (e.g. 2.7)") - argServerPoW = flag.Float64("mspow", whisper.DefaultMinimumPoW, "PoW requirement for Mail Server request") - - argIP = flag.String("ip", "", "IP address and port of this node (e.g. 127.0.0.1:30303)") - argPub = flag.String("pub", "", "public key for asymmetric encryption") - argDBPath = flag.String("dbpath", "", "path to the server's DB directory") - argIDFile = flag.String("idfile", "", "file name with node id (private key)") - argEnode = flag.String("boot", "", "bootstrap node you want to connect to (e.g. enode://e454......08d50@52.176.211.200:16428)") - argTopic = flag.String("topic", "", "topic in hexadecimal format (e.g. 70a4beef)") - argSaveDir = flag.String("savedir", "", "directory where all incoming messages will be saved as files") -) - -func main() { - processArgs() - initialize() - run() - shutdown() -} - -func processArgs() { - flag.Parse() - - if len(*argIDFile) > 0 { - var err error - nodeid, err = crypto.LoadECDSA(*argIDFile) - if err != nil { - utils.Fatalf("Failed to load file [%s]: %s.", *argIDFile, err) - } - } - - const enodePrefix = "enode://" - if len(*argEnode) > 0 { - if (*argEnode)[:len(enodePrefix)] != enodePrefix { - *argEnode = enodePrefix + *argEnode - } - } - - if len(*argTopic) > 0 { - x, err := hex.DecodeString(*argTopic) - if err != nil { - utils.Fatalf("Failed to parse the topic: %s", err) - } - topic = whisper.BytesToTopic(x) - } - - if *asymmetricMode && len(*argPub) > 0 { - var err error - if pub, err = crypto.UnmarshalPubkey(common.FromHex(*argPub)); err != nil { - utils.Fatalf("invalid public key") - } - } - - if len(*argSaveDir) > 0 { - if _, err := os.Stat(*argSaveDir); os.IsNotExist(err) { - utils.Fatalf("Download directory '%s' does not exist", *argSaveDir) - } - } else if *fileExMode { - utils.Fatalf("Parameter 'savedir' is mandatory for file exchange mode") - } - - if *echoMode { - echo() - } -} - -func echo() { - fmt.Printf("ttl = %d \n", *argTTL) - fmt.Printf("workTime = %d \n", *argWorkTime) - fmt.Printf("pow = %f \n", *argPoW) - fmt.Printf("mspow = %f \n", *argServerPoW) - fmt.Printf("ip = %s \n", *argIP) - fmt.Printf("pub = %s \n", common.ToHex(crypto.FromECDSAPub(pub))) - fmt.Printf("idfile = %s \n", *argIDFile) - fmt.Printf("dbpath = %s \n", *argDBPath) - fmt.Printf("boot = %s \n", *argEnode) -} - -func initialize() { - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*argVerbosity), log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) - - done = make(chan struct{}) - var peers []*enode.Node - var err error - - if *generateKey { - key, err := crypto.GenerateKey() - if err != nil { - utils.Fatalf("Failed to generate private key: %s", err) - } - k := hex.EncodeToString(crypto.FromECDSA(key)) - fmt.Printf("Random private key: %s \n", k) - os.Exit(0) - } - - if *testMode { - symPass = "wwww" // ascii code: 0x77777777 - msPassword = "wwww" - } - - if *bootstrapMode { - if len(*argIP) == 0 { - argIP = scanLineA("Please enter your IP and port (e.g. 127.0.0.1:30348): ") - } - } else if *fileReader { - *bootstrapMode = true - } else { - if len(*argEnode) == 0 { - argEnode = scanLineA("Please enter the peer's enode: ") - } - peer := enode.MustParse(*argEnode) - peers = append(peers, peer) - } - - if *mailServerMode { - if len(msPassword) == 0 { - msPassword, err = console.Stdin.PromptPassword("Please enter the Mail Server password: ") - if err != nil { - utils.Fatalf("Failed to read Mail Server password: %s", err) - } - } - } - - cfg := &whisper.Config{ - MaxMessageSize: uint32(*argMaxSize), - MinimumAcceptedPOW: *argPoW, - } - - shh = whisper.New(cfg) - - if *argPoW != whisper.DefaultMinimumPoW { - err := shh.SetMinimumPoW(*argPoW) - if err != nil { - utils.Fatalf("Failed to set PoW: %s", err) - } - } - - if uint32(*argMaxSize) != whisper.DefaultMaxMessageSize { - err := shh.SetMaxMessageSize(uint32(*argMaxSize)) - if err != nil { - utils.Fatalf("Failed to set max message size: %s", err) - } - } - - asymKeyID, err = shh.NewKeyPair() - if err != nil { - utils.Fatalf("Failed to generate a new key pair: %s", err) - } - - asymKey, err = shh.GetPrivateKey(asymKeyID) - if err != nil { - utils.Fatalf("Failed to retrieve a new key pair: %s", err) - } - - if nodeid == nil { - tmpID, err := shh.NewKeyPair() - if err != nil { - utils.Fatalf("Failed to generate a new key pair: %s", err) - } - - nodeid, err = shh.GetPrivateKey(tmpID) - if err != nil { - utils.Fatalf("Failed to retrieve a new key pair: %s", err) - } - } - - maxPeers := 80 - if *bootstrapMode { - maxPeers = 800 - } - - _, err = crand.Read(entropy[:]) - if err != nil { - utils.Fatalf("crypto/rand failed: %s", err) - } - - if *mailServerMode { - shh.RegisterServer(&mailServer) - if err := mailServer.Init(shh, *argDBPath, msPassword, *argServerPoW); err != nil { - utils.Fatalf("Failed to init MailServer: %s", err) - } - } - - server = &p2p.Server{ - Config: p2p.Config{ - PrivateKey: nodeid, - MaxPeers: maxPeers, - Name: common.MakeName("wnode", "6.0"), - Protocols: shh.Protocols(), - ListenAddr: *argIP, - NAT: nat.Any(), - BootstrapNodes: peers, - StaticNodes: peers, - TrustedNodes: peers, - }, - } -} - -func startServer() error { - err := server.Start() - if err != nil { - fmt.Printf("Failed to start Whisper peer: %s.", err) - return err - } - - fmt.Printf("my public key: %s \n", common.ToHex(crypto.FromECDSAPub(&asymKey.PublicKey))) - fmt.Println(server.NodeInfo().Enode) - - if *bootstrapMode { - configureNode() - fmt.Println("Bootstrap Whisper node started") - } else { - fmt.Println("Whisper node started") - // first see if we can establish connection, then ask for user input - waitForConnection(true) - configureNode() - } - - if *fileExMode { - fmt.Printf("Please type the file name to be send. To quit type: '%s'\n", quitCommand) - } else if *fileReader { - fmt.Printf("Please type the file name to be decrypted. To quit type: '%s'\n", quitCommand) - } else if !*forwarderMode { - fmt.Printf("Please type the message. To quit type: '%s'\n", quitCommand) - } - return nil -} - -func configureNode() { - var err error - var p2pAccept bool - - if *forwarderMode { - return - } - - if *asymmetricMode { - if len(*argPub) == 0 { - s := scanLine("Please enter the peer's public key: ") - b := common.FromHex(s) - if b == nil { - utils.Fatalf("Error: can not convert hexadecimal string") - } - if pub, err = crypto.UnmarshalPubkey(b); err != nil { - utils.Fatalf("Error: invalid peer public key") - } - } - } - - if *requestMail { - p2pAccept = true - if len(msPassword) == 0 { - msPassword, err = console.Stdin.PromptPassword("Please enter the Mail Server password: ") - if err != nil { - utils.Fatalf("Failed to read Mail Server password: %s", err) - } - } - } - - if !*asymmetricMode && !*forwarderMode { - if len(symPass) == 0 { - symPass, err = console.Stdin.PromptPassword("Please enter the password for symmetric encryption: ") - if err != nil { - utils.Fatalf("Failed to read password: %v", err) - } - } - - symKeyID, err := shh.AddSymKeyFromPassword(symPass) - if err != nil { - utils.Fatalf("Failed to create symmetric key: %s", err) - } - symKey, err = shh.GetSymKey(symKeyID) - if err != nil { - utils.Fatalf("Failed to save symmetric key: %s", err) - } - if len(*argTopic) == 0 { - generateTopic([]byte(symPass)) - } - - fmt.Printf("Filter is configured for the topic: %x \n", topic) - } - - if *mailServerMode { - if len(*argDBPath) == 0 { - argDBPath = scanLineA("Please enter the path to DB file: ") - } - } - - symFilter := whisper.Filter{ - KeySym: symKey, - Topics: [][]byte{topic[:]}, - AllowP2P: p2pAccept, - } - symFilterID, err = shh.Subscribe(&symFilter) - if err != nil { - utils.Fatalf("Failed to install filter: %s", err) - } - - asymFilter := whisper.Filter{ - KeyAsym: asymKey, - Topics: [][]byte{topic[:]}, - AllowP2P: p2pAccept, - } - asymFilterID, err = shh.Subscribe(&asymFilter) - if err != nil { - utils.Fatalf("Failed to install filter: %s", err) - } -} - -func generateTopic(password []byte) { - x := pbkdf2.Key(password, password, 4096, 128, sha512.New) - for i := 0; i < len(x); i++ { - topic[i%whisper.TopicLength] ^= x[i] - } -} - -func waitForConnection(timeout bool) { - var cnt int - var connected bool - for !connected { - time.Sleep(time.Millisecond * 50) - connected = server.PeerCount() > 0 - if timeout { - cnt++ - if cnt > 1000 { - utils.Fatalf("Timeout expired, failed to connect") - } - } - } - - fmt.Println("Connected to peer.") -} - -func run() { - err := startServer() - if err != nil { - return - } - defer server.Stop() - shh.Start(nil) - defer shh.Stop() - - if !*forwarderMode { - go messageLoop() - } - - if *requestMail { - requestExpiredMessagesLoop() - } else if *fileExMode { - sendFilesLoop() - } else if *fileReader { - fileReaderLoop() - } else { - sendLoop() - } -} - -func shutdown() { - close(done) - mailServer.Close() -} - -func sendLoop() { - for { - s := scanLine("") - if s == quitCommand { - fmt.Println("Quit command received") - return - } - sendMsg([]byte(s)) - if *asymmetricMode { - // print your own message for convenience, - // because in asymmetric mode it is impossible to decrypt it - timestamp := time.Now().Unix() - from := crypto.PubkeyToAddress(asymKey.PublicKey) - fmt.Printf("\n%d <%x>: %s\n", timestamp, from, s) - } - } -} - -func sendFilesLoop() { - for { - s := scanLine("") - if s == quitCommand { - fmt.Println("Quit command received") - return - } - b, err := ioutil.ReadFile(s) - if err != nil { - fmt.Printf(">>> Error: %s \n", err) - } else { - h := sendMsg(b) - if (h == common.Hash{}) { - fmt.Printf(">>> Error: message was not sent \n") - } else { - timestamp := time.Now().Unix() - from := crypto.PubkeyToAddress(asymKey.PublicKey) - fmt.Printf("\n%d <%x>: sent message with hash %x\n", timestamp, from, h) - } - } - } -} - -func fileReaderLoop() { - watcher1 := shh.GetFilter(symFilterID) - watcher2 := shh.GetFilter(asymFilterID) - if watcher1 == nil && watcher2 == nil { - fmt.Println("Error: neither symmetric nor asymmetric filter is installed") - return - } - - for { - s := scanLine("") - if s == quitCommand { - fmt.Println("Quit command received") - return - } - raw, err := ioutil.ReadFile(s) - if err != nil { - fmt.Printf(">>> Error: %s \n", err) - } else { - env := whisper.Envelope{Data: raw} // the topic is zero - msg := env.Open(watcher1) // force-open envelope regardless of the topic - if msg == nil { - msg = env.Open(watcher2) - } - if msg == nil { - fmt.Printf(">>> Error: failed to decrypt the message \n") - } else { - printMessageInfo(msg) - } - } - } -} - -func scanLine(prompt string) string { - if len(prompt) > 0 { - fmt.Print(prompt) - } - txt, err := input.ReadString('\n') - if err != nil { - utils.Fatalf("input error: %s", err) - } - txt = strings.TrimRight(txt, "\n\r") - return txt -} - -func scanLineA(prompt string) *string { - s := scanLine(prompt) - return &s -} - -func scanUint(prompt string) uint32 { - s := scanLine(prompt) - i, err := strconv.Atoi(s) - if err != nil { - utils.Fatalf("Fail to parse the lower time limit: %s", err) - } - return uint32(i) -} - -func sendMsg(payload []byte) common.Hash { - params := whisper.MessageParams{ - Src: asymKey, - Dst: pub, - KeySym: symKey, - Payload: payload, - Topic: topic, - TTL: uint32(*argTTL), - PoW: *argPoW, - WorkTime: uint32(*argWorkTime), - } - - msg, err := whisper.NewSentMessage(¶ms) - if err != nil { - utils.Fatalf("failed to create new message: %s", err) - } - - envelope, err := msg.Wrap(¶ms) - if err != nil { - fmt.Printf("failed to seal message: %v \n", err) - return common.Hash{} - } - - err = shh.Send(envelope) - if err != nil { - fmt.Printf("failed to send message: %v \n", err) - return common.Hash{} - } - - return envelope.Hash() -} - -func messageLoop() { - sf := shh.GetFilter(symFilterID) - if sf == nil { - utils.Fatalf("symmetric filter is not installed") - } - - af := shh.GetFilter(asymFilterID) - if af == nil { - utils.Fatalf("asymmetric filter is not installed") - } - - ticker := time.NewTicker(time.Millisecond * 50) - - for { - select { - case <-ticker.C: - m1 := sf.Retrieve() - m2 := af.Retrieve() - messages := append(m1, m2...) - for _, msg := range messages { - reportedOnce := false - if !*fileExMode && len(msg.Payload) <= 2048 { - printMessageInfo(msg) - reportedOnce = true - } - - // All messages are saved upon specifying argSaveDir. - // fileExMode only specifies how messages are displayed on the console after they are saved. - // if fileExMode == true, only the hashes are displayed, since messages might be too big. - if len(*argSaveDir) > 0 { - writeMessageToFile(*argSaveDir, msg, !reportedOnce) - } - } - case <-done: - return - } - } -} - -func printMessageInfo(msg *whisper.ReceivedMessage) { - timestamp := fmt.Sprintf("%d", msg.Sent) // unix timestamp for diagnostics - text := string(msg.Payload) - - var address common.Address - if msg.Src != nil { - address = crypto.PubkeyToAddress(*msg.Src) - } - - if whisper.IsPubKeyEqual(msg.Src, &asymKey.PublicKey) { - fmt.Printf("\n%s <%x>: %s\n", timestamp, address, text) // message from myself - } else { - fmt.Printf("\n%s [%x]: %s\n", timestamp, address, text) // message from a peer - } -} - -func writeMessageToFile(dir string, msg *whisper.ReceivedMessage, show bool) { - if len(dir) == 0 { - return - } - - timestamp := fmt.Sprintf("%d", msg.Sent) - name := fmt.Sprintf("%x", msg.EnvelopeHash) - - var address common.Address - if msg.Src != nil { - address = crypto.PubkeyToAddress(*msg.Src) - } - - env := shh.GetEnvelope(msg.EnvelopeHash) - if env == nil { - fmt.Printf("\nUnexpected error: envelope not found: %x\n", msg.EnvelopeHash) - return - } - - // this is a sample code; uncomment if you don't want to save your own messages. - //if whisper.IsPubKeyEqual(msg.Src, &asymKey.PublicKey) { - // fmt.Printf("\n%s <%x>: message from myself received, not saved: '%s'\n", timestamp, address, name) - // return - //} - - fullpath := filepath.Join(dir, name) - err := ioutil.WriteFile(fullpath, env.Data, 0644) - if err != nil { - fmt.Printf("\n%s {%x}: message received but not saved: %s\n", timestamp, address, err) - } else if show { - fmt.Printf("\n%s {%x}: message received and saved as '%s' (%d bytes)\n", timestamp, address, name, len(env.Data)) - } -} - -func requestExpiredMessagesLoop() { - var key, peerID, bloom []byte - var timeLow, timeUpp uint32 - var t string - var xt whisper.TopicType - - keyID, err := shh.AddSymKeyFromPassword(msPassword) - if err != nil { - utils.Fatalf("Failed to create symmetric key for mail request: %s", err) - } - key, err = shh.GetSymKey(keyID) - if err != nil { - utils.Fatalf("Failed to save symmetric key for mail request: %s", err) - } - peerID = extractIDFromEnode(*argEnode) - shh.AllowP2PMessagesFromPeer(peerID) - - for { - timeLow = scanUint("Please enter the lower limit of the time range (unix timestamp): ") - timeUpp = scanUint("Please enter the upper limit of the time range (unix timestamp): ") - t = scanLine("Enter the topic (hex). Press enter to request all messages, regardless of the topic: ") - if len(t) == whisper.TopicLength*2 { - x, err := hex.DecodeString(t) - if err != nil { - fmt.Printf("Failed to parse the topic: %s \n", err) - continue - } - xt = whisper.BytesToTopic(x) - bloom = whisper.TopicToBloom(xt) - obfuscateBloom(bloom) - } else if len(t) == 0 { - bloom = whisper.MakeFullNodeBloom() - } else { - fmt.Println("Error: topic is invalid, request aborted") - continue - } - - if timeUpp == 0 { - timeUpp = 0xFFFFFFFF - } - - data := make([]byte, 8, 8+whisper.BloomFilterSize) - binary.BigEndian.PutUint32(data, timeLow) - binary.BigEndian.PutUint32(data[4:], timeUpp) - data = append(data, bloom...) - - var params whisper.MessageParams - params.PoW = *argServerPoW - params.Payload = data - params.KeySym = key - params.Src = asymKey - params.WorkTime = 5 - - msg, err := whisper.NewSentMessage(¶ms) - if err != nil { - utils.Fatalf("failed to create new message: %s", err) - } - env, err := msg.Wrap(¶ms) - if err != nil { - utils.Fatalf("Wrap failed: %s", err) - } - - err = shh.RequestHistoricMessages(peerID, env) - if err != nil { - utils.Fatalf("Failed to send P2P message: %s", err) - } - - time.Sleep(time.Second * 5) - } -} - -func extractIDFromEnode(s string) []byte { - n, err := enode.Parse(enode.ValidSchemes, s) - if err != nil { - utils.Fatalf("Failed to parse node: %s", err) - } - return n.ID().Bytes() -} - -// obfuscateBloom adds 16 random bits to the bloom -// filter, in order to obfuscate the containing topics. -// it does so deterministically within every session. -// despite additional bits, it will match on average -// 32000 times less messages than full node's bloom filter. -func obfuscateBloom(bloom []byte) { - const half = entropySize / 2 - for i := 0; i < half; i++ { - x := int(entropy[i]) - if entropy[half+i] < 128 { - x += 256 - } - - bloom[x/8] = 1 << uint(x%8) // set the bit number X - } -} diff --git a/common/bitutil/compress_test.go b/common/bitutil/compress_test.go index b9bc58c9..13a13011 100644 --- a/common/bitutil/compress_test.go +++ b/common/bitutil/compress_test.go @@ -21,7 +21,7 @@ import ( "math/rand" "testing" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common/hexutil" ) // Tests that data bitset encoding and decoding works and is bijective. diff --git a/common/bytes.go b/common/bytes.go index 910c97d3..d1f5c6c9 100644 --- a/common/bytes.go +++ b/common/bytes.go @@ -17,28 +17,12 @@ // Package common contains various helper functions. package common -import "encoding/hex" +import ( + "encoding/hex" + "errors" -// ToHex returns the hex representation of b, prefixed with '0x'. -// For empty slices, the return value is "0x0". -// -// Deprecated: use hexutil.Encode instead. -func ToHex(b []byte) string { - hex := Bytes2Hex(b) - if len(hex) == 0 { - hex = "0" - } - return "0x" + hex -} - -// ToHexArray creates a array of hex-string based on []byte -func ToHexArray(b [][]byte) []string { - r := make([]string, len(b)) - for i := range b { - r[i] = ToHex(b[i]) - } - return r -} + "github.com/ethereum/go-ethereum/common/hexutil" +) // FromHex returns the bytes represented by the hexadecimal string s. // s may be prefixed with "0x". @@ -111,6 +95,15 @@ func Hex2BytesFixed(str string, flen int) []byte { return hh } +// ParseHexOrString tries to hexdecode b, but if the prefix is missing, it instead just returns the raw bytes +func ParseHexOrString(str string) ([]byte, error) { + b, err := hexutil.Decode(str) + if errors.Is(err, hexutil.ErrMissingPrefix) { + return []byte(str), nil + } + return b, err +} + // RightPadBytes zero-pads slice to the right up to length l. func RightPadBytes(slice []byte, l int) []byte { if l <= len(slice) { @@ -134,3 +127,25 @@ 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:] +} + +// TrimRightZeroes returns a subslice of s without trailing zeroes +func TrimRightZeroes(s []byte) []byte { + idx := len(s) + for ; idx > 0; idx-- { + if s[idx-1] != 0 { + break + } + } + return s[:idx] +} diff --git a/common/bytes_test.go b/common/bytes_test.go index 97dd34d1..0e3ec974 100644 --- a/common/bytes_test.go +++ b/common/bytes_test.go @@ -19,41 +19,43 @@ package common import ( "bytes" "testing" - - checker "gopkg.in/check.v1" ) -type BytesSuite struct{} - -var _ = checker.Suite(&BytesSuite{}) +func TestCopyBytes(t *testing.T) { + input := []byte{1, 2, 3, 4} -func (s *BytesSuite) TestCopyBytes(c *checker.C) { - data1 := []byte{1, 2, 3, 4} - exp1 := []byte{1, 2, 3, 4} - res1 := CopyBytes(data1) - c.Assert(res1, checker.DeepEquals, exp1) + v := CopyBytes(input) + if !bytes.Equal(v, []byte{1, 2, 3, 4}) { + t.Fatal("not equal after copy") + } + v[0] = 99 + if bytes.Equal(v, input) { + t.Fatal("result is not a copy") + } } -func (s *BytesSuite) TestLeftPadBytes(c *checker.C) { - val1 := []byte{1, 2, 3, 4} - exp1 := []byte{0, 0, 0, 0, 1, 2, 3, 4} - - res1 := LeftPadBytes(val1, 8) - res2 := LeftPadBytes(val1, 2) +func TestLeftPadBytes(t *testing.T) { + val := []byte{1, 2, 3, 4} + padded := []byte{0, 0, 0, 0, 1, 2, 3, 4} - c.Assert(res1, checker.DeepEquals, exp1) - c.Assert(res2, checker.DeepEquals, val1) + if r := LeftPadBytes(val, 8); !bytes.Equal(r, padded) { + t.Fatalf("LeftPadBytes(%v, 8) == %v", val, r) + } + if r := LeftPadBytes(val, 2); !bytes.Equal(r, val) { + t.Fatalf("LeftPadBytes(%v, 2) == %v", val, r) + } } -func (s *BytesSuite) TestRightPadBytes(c *checker.C) { +func TestRightPadBytes(t *testing.T) { val := []byte{1, 2, 3, 4} - exp := []byte{1, 2, 3, 4, 0, 0, 0, 0} - - resstd := RightPadBytes(val, 8) - resshrt := RightPadBytes(val, 2) + padded := []byte{1, 2, 3, 4, 0, 0, 0, 0} - c.Assert(resstd, checker.DeepEquals, exp) - c.Assert(resshrt, checker.DeepEquals, val) + if r := RightPadBytes(val, 8); !bytes.Equal(r, padded) { + t.Fatalf("RightPadBytes(%v, 8) == %v", val, r) + } + if r := RightPadBytes(val, 2); !bytes.Equal(r, val) { + t.Fatalf("RightPadBytes(%v, 2) == %v", val, r) + } } func TestFromHex(t *testing.T) { @@ -103,3 +105,22 @@ func TestNoPrefixShortHexOddLength(t *testing.T) { t.Errorf("Expected %x got %x", expected, result) } } + +func TestTrimRightZeroes(t *testing.T) { + tests := []struct { + arr []byte + exp []byte + }{ + {FromHex("0x00ffff00ff0000"), FromHex("0x00ffff00ff")}, + {FromHex("0x00000000000000"), []byte{}}, + {FromHex("0xff"), FromHex("0xff")}, + {[]byte{}, []byte{}}, + {FromHex("0x00ffffffffffff"), FromHex("0x00ffffffffffff")}, + } + for i, test := range tests { + got := TrimRightZeroes(test.arr) + if !bytes.Equal(got, test.exp) { + t.Errorf("test %d, got %x exp %x", i, got, test.exp) + } + } +} diff --git a/common/compiler/helpers.go b/common/compiler/helpers.go index 5ed640de..063fc108 100644 --- a/common/compiler/helpers.go +++ b/common/compiler/helpers.go @@ -17,14 +17,6 @@ // 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"` @@ -51,15 +43,3 @@ type ContractInfo struct { 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 b689f258..9de94017 100644 --- a/common/compiler/solidity.go +++ b/common/compiler/solidity.go @@ -14,25 +14,14 @@ // 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 wraps the ABI compilation outputs. package compiler import ( - "bytes" "encoding/json" - "errors" "fmt" - "os/exec" - "strconv" - "strings" ) -// Solidity contains information about the solidity compiler. -type Solidity struct { - Path, Version, FullVersion string - Major, Minor, Patch int -} - // --combined-output format type solcOutput struct { Contracts map[string]struct { @@ -44,89 +33,18 @@ type solcOutput struct { Version string } -func (s *Solidity) makeArgs() []string { - p := []string{ - "--combined-json", "bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc", - "--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,hashes" - } - return p -} - -// SolidityVersion runs solc and parses its version output. -func SolidityVersion(solc string) (*Solidity, error) { - if solc == "" { - solc = "solc" - } - var out bytes.Buffer - cmd := exec.Command(solc, "--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 solc version %q", out.String()) - } - s := &Solidity{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 -} - -// CompileSolidityString builds and returns all the contracts contained within a source string. -func CompileSolidityString(solc, source string) (map[string]*Contract, error) { - if len(source) == 0 { - return nil, errors.New("solc: empty source string") - } - s, err := SolidityVersion(solc) - if err != nil { - return nil, err - } - args := append(s.makeArgs(), "--") - cmd := exec.Command(s.Path, append(args, "-")...) - cmd.Stdin = strings.NewReader(source) - return s.run(cmd, source) -} - -// CompileSolidity compiles all given Solidity source files. -func CompileSolidity(solc string, sourcefiles ...string) (map[string]*Contract, error) { - if len(sourcefiles) == 0 { - return nil, errors.New("solc: no source files") - } - source, err := slurpFiles(sourcefiles) - if err != nil { - return nil, err - } - s, err := SolidityVersion(solc) - if err != nil { - return nil, err - } - args := append(s.makeArgs(), "--") - cmd := exec.Command(s.Path, append(args, sourcefiles...)...) - return s.run(cmd, source) -} - -func (s *Solidity) 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("solc: %v\n%s", err, stderr.Bytes()) +// solidity v.0.8 changes the way ABI, Devdoc and Userdoc are serialized +type solcOutputV8 struct { + Contracts map[string]struct { + BinRuntime string `json:"bin-runtime"` + SrcMapRuntime string `json:"srcmap-runtime"` + Bin, SrcMap, Metadata string + Abi interface{} + Devdoc interface{} + Userdoc interface{} + Hashes map[string]string } - - return ParseCombinedJSON(stdout.Bytes(), source, s.Version, s.Version, strings.Join(s.makeArgs(), " ")) + Version string } // ParseCombinedJSON takes the direct output of a solc --combined-output run and @@ -141,19 +59,23 @@ func (s *Solidity) run(cmd *exec.Cmd, source string) (map[string]*Contract, erro func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion string, compilerVersion string, compilerOptions string) (map[string]*Contract, error) { var output solcOutput if err := json.Unmarshal(combinedJSON, &output); err != nil { - return nil, err + // Try to parse the output with the new solidity v.0.8.0 rules + return parseCombinedJSONV8(combinedJSON, source, languageVersion, compilerVersion, compilerOptions) } // Compilation succeeded, assemble and return the contracts. contracts := make(map[string]*Contract) for name, info := range output.Contracts { // Parse the individual compilation results. - var abi interface{} + var abi, userdoc, devdoc interface{} if err := json.Unmarshal([]byte(info.Abi), &abi); err != nil { return nil, fmt.Errorf("solc: error reading abi definition (%v)", err) } - var userdoc, devdoc interface{} - json.Unmarshal([]byte(info.Userdoc), &userdoc) - json.Unmarshal([]byte(info.Devdoc), &devdoc) + if err := json.Unmarshal([]byte(info.Userdoc), &userdoc); err != nil { + return nil, fmt.Errorf("solc: error reading userdoc definition (%v)", err) + } + if err := json.Unmarshal([]byte(info.Devdoc), &devdoc); err != nil { + return nil, fmt.Errorf("solc: error reading devdoc definition (%v)", err) + } contracts[name] = &Contract{ Code: "0x" + info.Bin, @@ -176,3 +98,35 @@ func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion strin } return contracts, nil } + +// parseCombinedJSONV8 parses the direct output of solc --combined-output +// and parses it using the rules from solidity v.0.8.0 and later. +func parseCombinedJSONV8(combinedJSON []byte, source string, languageVersion string, compilerVersion string, compilerOptions string) (map[string]*Contract, error) { + var output solcOutputV8 + 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 { + contracts[name] = &Contract{ + Code: "0x" + info.Bin, + RuntimeCode: "0x" + info.BinRuntime, + Hashes: info.Hashes, + Info: ContractInfo{ + Source: source, + Language: "Solidity", + LanguageVersion: languageVersion, + CompilerVersion: compilerVersion, + CompilerOptions: compilerOptions, + SrcMap: info.SrcMap, + SrcMapRuntime: info.SrcMapRuntime, + AbiDefinition: info.Abi, + UserDoc: info.Userdoc, + DeveloperDoc: info.Devdoc, + Metadata: info.Metadata, + }, + } + } + return contracts, nil +} diff --git a/common/compiler/solidity_test.go b/common/compiler/solidity_test.go deleted file mode 100644 index 491e3665..00000000 --- a/common/compiler/solidity_test.go +++ /dev/null @@ -1,78 +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 compiler - -import ( - "os/exec" - "testing" -) - -const ( - testSource = ` -pragma solidity >0.0.0; -contract test { - /// @notice Will multiply ` + "`a`" + ` by 7. - function multiply(uint a) public returns(uint d) { - return a * 7; - } -} -` -) - -func skipWithoutSolc(t *testing.T) { - if _, err := exec.LookPath("solc"); err != nil { - t.Skip(err) - } -} - -func TestSolidityCompiler(t *testing.T) { - skipWithoutSolc(t) - - contracts, err := CompileSolidityString("", testSource) - if err != nil { - t.Fatalf("error compiling source. result %v: %v", contracts, err) - } - if len(contracts) != 1 { - t.Errorf("one contract expected, got %d", len(contracts)) - } - c, ok := contracts["test"] - if !ok { - c, ok = contracts[":test"] - if !ok { - t.Fatal("info for contract 'test' not present in result") - } - } - if c.Code == "" { - t.Error("empty code") - } - if c.Info.Source != testSource { - t.Error("wrong source") - } - if c.Info.CompilerVersion == "" { - t.Error("empty version") - } -} - -func TestSolidityCompileError(t *testing.T) { - skipWithoutSolc(t) - - contracts, err := CompileSolidityString("", testSource[4:]) - if err == nil { - t.Errorf("error expected compiling source. got none. result %v", contracts) - } - t.Logf("error: %v", err) -} diff --git a/common/compiler/test.v.py b/common/compiler/test.v.py deleted file mode 100644 index 35af56c8..00000000 --- a/common/compiler/test.v.py +++ /dev/null @@ -1,3 +0,0 @@ -@public -def test(): - hello: int128 diff --git a/common/compiler/test_bad.v.py b/common/compiler/test_bad.v.py deleted file mode 100644 index 443ef782..00000000 --- a/common/compiler/test_bad.v.py +++ /dev/null @@ -1,3 +0,0 @@ -lic -def test(): - hello: int128 diff --git a/common/compiler/vyper.go b/common/compiler/vyper.go deleted file mode 100644 index a9bca95e..00000000 --- a/common/compiler/vyper.go +++ /dev/null @@ -1,144 +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 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 deleted file mode 100644 index 7761c92a..00000000 --- a/common/compiler/vyper_test.go +++ /dev/null @@ -1,71 +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 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/debug.go b/common/debug.go index ab5b384b..28c52b4a 100644 --- a/common/debug.go +++ b/common/debug.go @@ -26,7 +26,7 @@ import ( // Report gives off a warning requesting the user to submit an issue to the github tracker. func Report(extra ...interface{}) { - fmt.Fprintln(os.Stderr, "You've encountered a sought after, hard to reproduce bug. Please report this to the developers <3 https://github.com/cryptoecc/ETH-ECC/issues") + fmt.Fprintln(os.Stderr, "You've encountered a sought after, hard to reproduce bug. Please report this to the developers <3 https://github.com/ethereum/go-ethereum/issues") fmt.Fprintln(os.Stderr, extra...) _, file, line, _ := runtime.Caller(1) @@ -37,8 +37,8 @@ func Report(extra ...interface{}) { fmt.Fprintln(os.Stderr, "#### BUG! PLEASE REPORT ####") } -// PrintDepricationWarning prinst the given string in a box using fmt.Println. -func PrintDepricationWarning(str string) { +// PrintDeprecationWarning prints the given string in a box using fmt.Println. +func PrintDeprecationWarning(str string) { line := strings.Repeat("#", len(str)+4) emptyLine := strings.Repeat(" ", len(str)) fmt.Printf(` diff --git a/common/fdlimit/fdlimit_freebsd.go b/common/fdlimit/fdlimit_bsd.go similarity index 94% rename from common/fdlimit/fdlimit_freebsd.go rename to common/fdlimit/fdlimit_bsd.go index 0d872713..a3a6902c 100644 --- a/common/fdlimit/fdlimit_freebsd.go +++ b/common/fdlimit/fdlimit_bsd.go @@ -14,14 +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 freebsd +//go:build freebsd || dragonfly +// +build freebsd dragonfly package fdlimit import "syscall" // This file is largely identical to fdlimit_unix.go, -// but Rlimit fields have type int64 on FreeBSD so it needs +// but Rlimit fields have type int64 on *BSD so it needs // an extra conversion. // Raise tries to maximize the file descriptor allowance of this process diff --git a/common/fdlimit/fdlimit_test.go b/common/fdlimit/fdlimit_test.go index 21362b84..9fd5e9fc 100644 --- a/common/fdlimit/fdlimit_test.go +++ b/common/fdlimit/fdlimit_test.go @@ -17,7 +17,6 @@ package fdlimit import ( - "fmt" "testing" ) @@ -30,7 +29,7 @@ func TestFileDescriptorLimits(t *testing.T) { t.Fatal(err) } if hardlimit < target { - t.Skip(fmt.Sprintf("system limit is less than desired test target: %d < %d", hardlimit, target)) + t.Skipf("system limit is less than desired test target: %d < %d", hardlimit, target) } if limit, err := Current(); err != nil || limit <= 0 { diff --git a/common/fdlimit/fdlimit_unix.go b/common/fdlimit/fdlimit_unix.go index e5a575f7..a1f388eb 100644 --- a/common/fdlimit/fdlimit_unix.go +++ b/common/fdlimit/fdlimit_unix.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build linux || netbsd || openbsd || solaris // +build linux netbsd openbsd solaris package fdlimit diff --git a/common/format.go b/common/format.go index 6fc21af7..7af41f52 100644 --- a/common/format.go +++ b/common/format.go @@ -27,12 +27,12 @@ import ( // the unnecessary precision off from the formatted textual representation. type PrettyDuration time.Duration -var prettyDurationRe = regexp.MustCompile(`\.[0-9]+`) +var prettyDurationRe = regexp.MustCompile(`\.[0-9]{4,}`) // String implements the Stringer interface, allowing pretty printing of duration // values rounded to three decimals. func (d PrettyDuration) String() string { - label := fmt.Sprintf("%v", time.Duration(d)) + label := time.Duration(d).String() if match := prettyDurationRe.FindString(label); len(match) > 4 { label = strings.Replace(label, match, match[:4], 1) } diff --git a/common/hexutil/hexutil.go b/common/hexutil/hexutil.go index 46223a28..e0241f5f 100644 --- a/common/hexutil/hexutil.go +++ b/common/hexutil/hexutil.go @@ -176,13 +176,14 @@ func MustDecodeBig(input string) *big.Int { } // EncodeBig encodes bigint as a hex string with 0x prefix. -// The sign of the integer is ignored. func EncodeBig(bigint *big.Int) string { - nbits := bigint.BitLen() - if nbits == 0 { + if sign := bigint.Sign(); sign == 0 { return "0x0" + } else if sign > 0 { + return "0x" + bigint.Text(16) + } else { + return "-0x" + bigint.Text(16)[1:] } - return fmt.Sprintf("%#x", bigint) } func has0xPrefix(input string) bool { diff --git a/common/hexutil/hexutil_test.go b/common/hexutil/hexutil_test.go index ed6fccc3..f2b800d8 100644 --- a/common/hexutil/hexutil_test.go +++ b/common/hexutil/hexutil_test.go @@ -201,3 +201,15 @@ func TestDecodeUint64(t *testing.T) { } } } + +func BenchmarkEncodeBig(b *testing.B) { + for _, bench := range encodeBigTests { + b.Run(bench.want, func(b *testing.B) { + b.ReportAllocs() + bigint := bench.input.(*big.Int) + for i := 0; i < b.N; i++ { + EncodeBig(bigint) + } + }) + } +} diff --git a/common/hexutil/json.go b/common/hexutil/json.go index 777b08ec..50db2081 100644 --- a/common/hexutil/json.go +++ b/common/hexutil/json.go @@ -86,7 +86,7 @@ func (b *Bytes) UnmarshalGraphQL(input interface{}) error { } *b = data default: - err = fmt.Errorf("Unexpected type for Bytes: %v", input) + err = fmt.Errorf("unexpected type %T for Bytes", input) } return err } @@ -220,7 +220,7 @@ func (b *Big) UnmarshalGraphQL(input interface{}) error { num.SetInt64(int64(input)) *b = Big(num) default: - err = fmt.Errorf("Unexpected type for BigInt: %v", input) + err = fmt.Errorf("unexpected type %T for BigInt", input) } return err } @@ -284,7 +284,7 @@ func (b *Uint64) UnmarshalGraphQL(input interface{}) error { case int32: *b = Uint64(input) default: - err = fmt.Errorf("Unexpected type for Long: %v", input) + err = fmt.Errorf("unexpected type %T for Long", input) } return err } diff --git a/common/hexutil/json_example_test.go b/common/hexutil/json_example_test.go index a5cbaf83..80180d91 100644 --- a/common/hexutil/json_example_test.go +++ b/common/hexutil/json_example_test.go @@ -20,7 +20,7 @@ import ( "encoding/json" "fmt" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common/hexutil" ) type MyType [5]byte diff --git a/common/hexutil/json_test.go b/common/hexutil/json_test.go index 8a6b8643..ed7d6fad 100644 --- a/common/hexutil/json_test.go +++ b/common/hexutil/json_test.go @@ -88,7 +88,7 @@ func TestUnmarshalBytes(t *testing.T) { if !checkError(t, test.input, err, test.wantErr) { continue } - if !bytes.Equal(test.want.([]byte), []byte(v)) { + if !bytes.Equal(test.want.([]byte), v) { t.Errorf("input %s: value mismatch: got %x, want %x", test.input, &v, test.want) continue } diff --git a/common/math/big.go b/common/math/big.go index d31c59af..1af5b4d8 100644 --- a/common/math/big.go +++ b/common/math/big.go @@ -67,6 +67,40 @@ func (i *HexOrDecimal256) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf("%#x", (*big.Int)(i))), nil } +// Decimal256 unmarshals big.Int as a decimal string. When unmarshalling, +// it however accepts either "0x"-prefixed (hex encoded) or non-prefixed (decimal) +type Decimal256 big.Int + +// NewHexOrDecimal256 creates a new Decimal256 +func NewDecimal256(x int64) *Decimal256 { + b := big.NewInt(x) + d := Decimal256(*b) + return &d +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (i *Decimal256) UnmarshalText(input []byte) error { + bigint, ok := ParseBig256(string(input)) + if !ok { + return fmt.Errorf("invalid hex or decimal integer %q", input) + } + *i = Decimal256(*bigint) + return nil +} + +// MarshalText implements encoding.TextMarshaler. +func (i *Decimal256) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// String implements Stringer. +func (i *Decimal256) String() string { + if i == nil { + return "0" + } + return fmt.Sprintf("%#d", (*big.Int)(i)) +} + // ParseBig256 parses s as a 256 bit integer in decimal or hexadecimal syntax. // Leading zeros are accepted. The empty string parses as zero. func ParseBig256(s string) (*big.Int, bool) { @@ -184,6 +218,12 @@ func U256(x *big.Int) *big.Int { return x.And(x, tt256m1) } +// U256Bytes converts a big Int into a 256bit EVM number. +// This operation is destructive. +func U256Bytes(n *big.Int) []byte { + return PaddedBigBytes(U256(n), 32) +} + // S256 interprets x as a two's complement number. // x must not exceed 256 bits (the result is undefined if it does) and is not modified. // diff --git a/common/math/big_test.go b/common/math/big_test.go index dd2848d2..803b5e1c 100644 --- a/common/math/big_test.go +++ b/common/math/big_test.go @@ -22,7 +22,7 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) func TestHexOrDecimal256(t *testing.T) { @@ -171,7 +171,6 @@ func BenchmarkByteAt(b *testing.B) { } func BenchmarkByteAtOld(b *testing.B) { - bigint := MustParseBig256("0x18F8F8F1000111000110011100222004330052300000000000000000FEFCF3CC") for i := 0; i < b.N; i++ { PaddedBigBytes(bigint, 32) @@ -212,6 +211,16 @@ func TestU256(t *testing.T) { } } +func TestU256Bytes(t *testing.T) { + ubytes := make([]byte, 32) + ubytes[31] = 1 + + unsigned := U256Bytes(big.NewInt(1)) + if !bytes.Equal(unsigned, ubytes) { + t.Errorf("expected %x got %x", ubytes, unsigned) + } +} + func TestBigEndianByteAt(t *testing.T) { tests := []struct { x string @@ -234,7 +243,6 @@ func TestBigEndianByteAt(t *testing.T) { if actual != test.exp { t.Fatalf("Expected [%v] %v:th byte to be %v, was %v.", test.x, test.y, test.exp, actual) } - } } func TestLittleEndianByteAt(t *testing.T) { @@ -267,7 +275,6 @@ func TestLittleEndianByteAt(t *testing.T) { if actual != test.exp { t.Fatalf("Expected [%v] %v:th byte to be %v, was %v.", test.x, test.y, test.exp, actual) } - } } diff --git a/common/math/integer.go b/common/math/integer.go index 93b1d036..50d3eba1 100644 --- a/common/math/integer.go +++ b/common/math/integer.go @@ -18,6 +18,7 @@ package math import ( "fmt" + "math/bits" "strconv" ) @@ -78,22 +79,20 @@ func MustParseUint64(s string) uint64 { return v } -// NOTE: The following methods need to be optimised using either bit checking or asm - -// SafeSub returns subtraction result and whether overflow occurred. +// SafeSub returns x-y and checks for overflow. func SafeSub(x, y uint64) (uint64, bool) { - return x - y, x < y + diff, borrowOut := bits.Sub64(x, y, 0) + return diff, borrowOut != 0 } -// SafeAdd returns the result and whether overflow occurred. +// SafeAdd returns x+y and checks for overflow. func SafeAdd(x, y uint64) (uint64, bool) { - return x + y, y > MaxUint64-x + sum, carryOut := bits.Add64(x, y, 0) + return sum, carryOut != 0 } -// SafeMul returns multiplication result and whether overflow occurred. +// SafeMul returns x*y and checks for overflow. func SafeMul(x, y uint64) (uint64, bool) { - if x == 0 || y == 0 { - return 0, false - } - return x * y, y > MaxUint64/x + hi, lo := bits.Mul64(x, y) + return lo, hi != 0 } diff --git a/common/mclock/mclock.go b/common/mclock/mclock.go index 0c941082..c05738cf 100644 --- a/common/mclock/mclock.go +++ b/common/mclock/mclock.go @@ -20,63 +20,108 @@ package mclock import ( "time" - "github.com/aristanetworks/goarista/monotime" + _ "unsafe" // for go:linkname ) +//go:noescape +//go:linkname nanotime runtime.nanotime +func nanotime() int64 + // AbsTime represents absolute monotonic time. -type AbsTime time.Duration +type AbsTime int64 // Now returns the current absolute monotonic time. func Now() AbsTime { - return AbsTime(monotime.Now()) + return AbsTime(nanotime()) } -// Add returns t + d. +// Add returns t + d as absolute time. func (t AbsTime) Add(d time.Duration) AbsTime { return t + AbsTime(d) } -// Clock interface makes it possible to replace the monotonic system clock with +// Sub returns t - t2 as a duration. +func (t AbsTime) Sub(t2 AbsTime) time.Duration { + return time.Duration(t - t2) +} + +// 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()) Event + NewTimer(time.Duration) ChanTimer + After(time.Duration) <-chan AbsTime + AfterFunc(d time.Duration, f func()) Timer } -// Event represents a cancellable event returned by AfterFunc -type Event interface { - Cancel() bool +// Timer is a cancellable event created by AfterFunc. +type Timer interface { + // Stop cancels the timer. It returns false if the timer has already + // expired or been stopped. + Stop() bool +} + +// ChanTimer is a cancellable event created by NewTimer. +type ChanTimer interface { + Timer + + // The channel returned by C receives a value when the timer expires. + C() <-chan AbsTime + // Reset reschedules the timer with a new timeout. + // It should be invoked only on stopped or expired timers with drained channels. + Reset(time.Duration) } // System implements Clock using the system clock. type System struct{} -// Now implements Clock. -func (System) Now() AbsTime { - return AbsTime(monotime.Now()) +// Now returns the current monotonic time. +func (c System) Now() AbsTime { + return Now() } -// Sleep implements Clock. -func (System) Sleep(d time.Duration) { +// Sleep blocks for the given duration. +func (c System) Sleep(d time.Duration) { time.Sleep(d) } -// After implements Clock. -func (System) After(d time.Duration) <-chan time.Time { - return time.After(d) +// NewTimer creates a timer which can be rescheduled. +func (c System) NewTimer(d time.Duration) ChanTimer { + ch := make(chan AbsTime, 1) + t := time.AfterFunc(d, func() { + // This send is non-blocking because that's how time.Timer + // behaves. It doesn't matter in the happy case, but does + // when Reset is misused. + select { + case ch <- c.Now(): + default: + } + }) + return &systemTimer{t, ch} } -// AfterFunc implements Clock. -func (System) AfterFunc(d time.Duration, f func()) Event { - return (*SystemEvent)(time.AfterFunc(d, f)) +// After returns a channel which receives the current time after d has elapsed. +func (c System) After(d time.Duration) <-chan AbsTime { + ch := make(chan AbsTime, 1) + time.AfterFunc(d, func() { ch <- c.Now() }) + return ch } -// SystemEvent implements Event using time.Timer. -type SystemEvent time.Timer +// AfterFunc runs f on a new goroutine after the duration has elapsed. +func (c System) AfterFunc(d time.Duration, f func()) Timer { + return time.AfterFunc(d, f) +} + +type systemTimer struct { + *time.Timer + ch <-chan AbsTime +} + +func (st *systemTimer) Reset(d time.Duration) { + st.Timer.Reset(d) +} -// Cancel implements Event. -func (e *SystemEvent) Cancel() bool { - return (*time.Timer)(e).Stop() +func (st *systemTimer) C() <-chan AbsTime { + return st.ch } diff --git a/common/mclock/mclock.s b/common/mclock/mclock.s new file mode 100644 index 00000000..99a7a878 --- /dev/null +++ b/common/mclock/mclock.s @@ -0,0 +1 @@ +// This file exists in order to be able to use go:linkname. diff --git a/common/mclock/simclock.go b/common/mclock/simclock.go index af0f71c4..f5ad3f8b 100644 --- a/common/mclock/simclock.go +++ b/common/mclock/simclock.go @@ -17,6 +17,7 @@ package mclock import ( + "container/heap" "sync" "time" ) @@ -32,23 +33,24 @@ import ( // the timeout using a channel or semaphore. type Simulated struct { now AbsTime - scheduled []event + scheduled simTimerHeap mu sync.RWMutex cond *sync.Cond - lastId uint64 } -type event struct { - do func() - at AbsTime - id uint64 +// simTimer implements ChanTimer on the virtual clock. +type simTimer struct { + at AbsTime + index int // position in s.scheduled + s *Simulated + do func() + ch <-chan AbsTime } -// SimulatedEvent implements Event for a virtual clock. -type SimulatedEvent struct { - at AbsTime - id uint64 - s *Simulated +func (s *Simulated) init() { + if s.cond == nil { + s.cond = sync.NewCond(&s.mu) + } } // Run moves the clock by the given duration, executing all timers before that duration. @@ -56,16 +58,11 @@ func (s *Simulated) Run(d time.Duration) { s.mu.Lock() s.init() - end := s.now + AbsTime(d) + end := s.now.Add(d) var do []func() - for len(s.scheduled) > 0 { - ev := s.scheduled[0] - if ev.at > end { - break - } - s.now = ev.at + for len(s.scheduled) > 0 && s.scheduled[0].at <= end { + ev := heap.Pop(&s.scheduled).(*simTimer) do = append(do, ev.do) - s.scheduled = s.scheduled[1:] } s.now = end s.mu.Unlock() @@ -75,6 +72,7 @@ func (s *Simulated) Run(d time.Duration) { } } +// ActiveTimers returns the number of timers that haven't fired. func (s *Simulated) ActiveTimers() int { s.mu.RLock() defer s.mu.RUnlock() @@ -82,6 +80,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() @@ -92,7 +91,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() @@ -100,77 +99,111 @@ 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. -func (s *Simulated) After(d time.Duration) <-chan time.Time { - after := make(chan time.Time, 1) - s.AfterFunc(d, func() { - after <- (time.Time{}).Add(time.Duration(s.now)) - }) - return after +// NewTimer creates a timer which fires when the clock has advanced by d. +func (s *Simulated) NewTimer(d time.Duration) ChanTimer { + s.mu.Lock() + defer s.mu.Unlock() + + ch := make(chan AbsTime, 1) + var timer *simTimer + timer = s.schedule(d, func() { ch <- timer.at }) + timer.ch = ch + return timer +} + +// After returns a channel which receives the current time after the clock +// has advanced by d. +func (s *Simulated) After(d time.Duration) <-chan AbsTime { + return s.NewTimer(d).C() } -// AfterFunc implements Clock. -func (s *Simulated) AfterFunc(d time.Duration, do func()) Event { +// 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() + + return s.schedule(d, fn) +} + +func (s *Simulated) schedule(d time.Duration, fn func()) *simTimer { 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) || ((at == s.scheduled[m].at) && (id < s.scheduled[m].id)) { - h = m - } else { - l = m + 1 - } - } - s.scheduled = append(s.scheduled, event{}) - copy(s.scheduled[l+1:], s.scheduled[l:ll]) - e := event{do: do, at: at, id: id} - s.scheduled[l] = e + at := s.now.Add(d) + ev := &simTimer{do: fn, at: at, s: s} + heap.Push(&s.scheduled, ev) s.cond.Broadcast() - return &SimulatedEvent{at: at, id: id, s: s} + return ev } -func (s *Simulated) init() { - if s.cond == nil { - s.cond = sync.NewCond(&s.mu) +func (ev *simTimer) Stop() bool { + ev.s.mu.Lock() + defer ev.s.mu.Unlock() + + if ev.index < 0 { + return false } + heap.Remove(&ev.s.scheduled, ev.index) + ev.s.cond.Broadcast() + ev.index = -1 + return true } -// Cancel implements Event. -func (e *SimulatedEvent) Cancel() bool { - s := e.s - s.mu.Lock() - defer s.mu.Unlock() +func (ev *simTimer) Reset(d time.Duration) { + if ev.ch == nil { + panic("mclock: Reset() on timer created by AfterFunc") + } - l, h := 0, len(s.scheduled) - ll := h - for l != h { - m := (l + h) / 2 - if e.id == s.scheduled[m].id { - l = m - break - } - if (e.at < s.scheduled[m].at) || ((e.at == s.scheduled[m].at) && (e.id < s.scheduled[m].id)) { - h = m - } else { - l = m + 1 - } + ev.s.mu.Lock() + defer ev.s.mu.Unlock() + ev.at = ev.s.now.Add(d) + if ev.index < 0 { + heap.Push(&ev.s.scheduled, ev) // already expired + } else { + heap.Fix(&ev.s.scheduled, ev.index) // hasn't fired yet, reschedule } - if l >= ll || s.scheduled[l].id != e.id { - return false + ev.s.cond.Broadcast() +} + +func (ev *simTimer) C() <-chan AbsTime { + if ev.ch == nil { + panic("mclock: C() on timer created by AfterFunc") } - copy(s.scheduled[l:ll-1], s.scheduled[l+1:]) - s.scheduled = s.scheduled[:ll-1] - return true + return ev.ch +} + +type simTimerHeap []*simTimer + +func (h *simTimerHeap) Len() int { + return len(*h) +} + +func (h *simTimerHeap) Less(i, j int) bool { + return (*h)[i].at < (*h)[j].at +} + +func (h *simTimerHeap) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] + (*h)[i].index = i + (*h)[j].index = j +} + +func (h *simTimerHeap) Push(x interface{}) { + t := x.(*simTimer) + t.index = len(*h) + *h = append(*h, t) +} + +func (h *simTimerHeap) Pop() interface{} { + end := len(*h) - 1 + t := (*h)[end] + t.index = -1 + (*h)[end] = nil + *h = (*h)[:end] + return t } diff --git a/common/mclock/simclock_test.go b/common/mclock/simclock_test.go new file mode 100644 index 00000000..582bc31d --- /dev/null +++ b/common/mclock/simclock_test.go @@ -0,0 +1,162 @@ +// 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 mclock + +import ( + "testing" + "time" +) + +var _ Clock = System{} +var _ Clock = new(Simulated) + +func TestSimulatedAfter(t *testing.T) { + var ( + timeout = 30 * time.Minute + offset = 99 * time.Hour + adv = 11 * time.Minute + c Simulated + ) + c.Run(offset) + + 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 := AbsTime(0).Add(offset).Add(timeout) + if stamp != 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, 1) + ) + 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") + } +} + +func TestSimulatedTimerReset(t *testing.T) { + var ( + c Simulated + timeout = 1 * time.Hour + ) + timer := c.NewTimer(timeout) + c.Run(2 * timeout) + select { + case ftime := <-timer.C(): + if ftime != AbsTime(timeout) { + t.Fatalf("wrong time %v sent on timer channel, want %v", ftime, AbsTime(timeout)) + } + default: + t.Fatal("timer didn't fire") + } + + timer.Reset(timeout) + c.Run(2 * timeout) + select { + case ftime := <-timer.C(): + if ftime != AbsTime(3*timeout) { + t.Fatalf("wrong time %v sent on timer channel, want %v", ftime, AbsTime(3*timeout)) + } + default: + t.Fatal("timer didn't fire again") + } +} + +func TestSimulatedTimerStop(t *testing.T) { + var ( + c Simulated + timeout = 1 * time.Hour + ) + timer := c.NewTimer(timeout) + c.Run(2 * timeout) + if timer.Stop() { + t.Errorf("Stop returned true for fired timer") + } + select { + case <-timer.C(): + default: + t.Fatal("timer didn't fire") + } +} diff --git a/common/prque/lazyqueue.go b/common/prque/lazyqueue.go index 9fa3a27d..6fdb6cc1 100644 --- a/common/prque/lazyqueue.go +++ b/common/prque/lazyqueue.go @@ -20,7 +20,7 @@ import ( "container/heap" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) // LazyQueue is a priority queue data structure where priorities can change over @@ -36,50 +36,64 @@ type LazyQueue struct { // 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 + queue [2]*sstack + popQueue *sstack + period time.Duration + maxUntil mclock.AbsTime + indexOffset int + setIndex SetIndexCallback + priority PriorityCallback + maxPriority MaxPriorityCallback + lastRefresh1, lastRefresh2 mclock.AbsTime } type ( - PriorityCallback func(data interface{}, now mclock.AbsTime) int64 // actual priority callback + PriorityCallback func(data interface{}) 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} + popQueue: newSstack(nil, false), + setIndex: setIndex, + priority: priority, + maxPriority: maxPriority, + clock: clock, + period: refreshPeriod, + lastRefresh1: clock.Now(), + lastRefresh2: clock.Now(), + } q.Reset() - q.Refresh() + q.refresh(clock.Now()) 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) + q.queue[0] = newSstack(q.setIndex0, false) + q.queue[1] = newSstack(q.setIndex1, false) } -// Refresh should be called at least with the frequency specified by the refreshPeriod parameter +// Refresh performs queue re-evaluation if necessary func (q *LazyQueue) Refresh() { - q.maxUntil = q.clock.Now() + mclock.AbsTime(q.period) + now := q.clock.Now() + for time.Duration(now-q.lastRefresh2) >= q.period*2 { + q.refresh(now) + q.lastRefresh2 = q.lastRefresh1 + q.lastRefresh1 = now + } +} + +// refresh re-evaluates items in the older queue and swaps the two queues +func (q *LazyQueue) refresh(now mclock.AbsTime) { + q.maxUntil = now.Add(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) + q.maxUntil = q.maxUntil.Add(q.period) } // Push adds an item to the queue @@ -125,11 +139,10 @@ func (q *LazyQueue) peekIndex() int { // 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)}) + heap.Push(q.popQueue, &item{data, q.priority(data)}) 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) @@ -139,6 +152,7 @@ func (q *LazyQueue) MultiPop(callback func(data interface{}, priority int64) boo } return } + nextIndex = q.peekIndex() // re-check because callback is allowed to push items back } } } @@ -149,7 +163,7 @@ func (q *LazyQueue) PopItem() interface{} { return i } -// Remove removes removes the item with the given index. +// Remove removes the item with the given index. func (q *LazyQueue) Remove(index int) interface{} { if index < 0 { return nil diff --git a/common/prque/lazyqueue_test.go b/common/prque/lazyqueue_test.go index e1dc35b2..9a831d62 100644 --- a/common/prque/lazyqueue_test.go +++ b/common/prque/lazyqueue_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) const ( @@ -40,7 +40,7 @@ type lazyItem struct { index int } -func testPriority(a interface{}, now mclock.AbsTime) int64 { +func testPriority(a interface{}) int64 { return a.(*lazyItem).p } @@ -74,17 +74,22 @@ func TestLazyQueue(t *testing.T) { q.Push(&items[i]) } - var lock sync.Mutex - stopCh := make(chan chan struct{}) + var ( + lock sync.Mutex + wg sync.WaitGroup + stopCh = make(chan chan struct{}) + ) + defer wg.Wait() + wg.Add(1) go func() { + defer wg.Done() for { select { case <-clock.After(testQueueRefresh): lock.Lock() q.Refresh() lock.Unlock() - case stop := <-stopCh: - close(stop) + case <-stopCh: return } } @@ -104,6 +109,8 @@ func TestLazyQueue(t *testing.T) { if rand.Intn(100) == 0 { p := q.PopItem().(*lazyItem) if p.p != maxPri { + lock.Unlock() + close(stopCh) t.Fatalf("incorrect item (best known priority %d, popped %d)", maxPri, p.p) } q.Push(p) @@ -113,7 +120,5 @@ func TestLazyQueue(t *testing.T) { clock.WaitForTimers(1) } - stop := make(chan struct{}) - stopCh <- stop - <-stop + close(stopCh) } diff --git a/common/prque/prque.go b/common/prque/prque.go old mode 100755 new mode 100644 index 3cc5a1ad..fb02e341 --- a/common/prque/prque.go +++ b/common/prque/prque.go @@ -28,7 +28,12 @@ type Prque struct { // New creates a new priority queue. func New(setIndex SetIndexCallback) *Prque { - return &Prque{newSstack(setIndex)} + return &Prque{newSstack(setIndex, false)} +} + +// NewWrapAround creates a new priority queue with wrap-around priority handling. +func NewWrapAround(setIndex SetIndexCallback) *Prque { + return &Prque{newSstack(setIndex, true)} } // Pushes a value with a given priority into the queue, expanding if necessary. @@ -36,13 +41,13 @@ 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. +// Peek returns the value with the greatest 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. +// Pops the value with the greatest priority off the stack and returns it. // Currently no shrinking is done. func (p *Prque) Pop() (interface{}, int64) { item := heap.Pop(p.cont).(*item) diff --git a/common/prque/prque_test.go b/common/prque/prque_test.go new file mode 100644 index 00000000..1cffceba --- /dev/null +++ b/common/prque/prque_test.go @@ -0,0 +1,130 @@ +// 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). + +package prque + +import ( + "math/rand" + "testing" +) + +func TestPrque(t *testing.T) { + // Generate a batch of random data and a specific priority order + size := 16 * blockSize + prio := rand.Perm(size) + data := make([]int, size) + for i := 0; i < size; i++ { + data[i] = rand.Int() + } + queue := New(nil) + for rep := 0; rep < 2; rep++ { + // Fill a priority queue with the above data + for i := 0; i < size; i++ { + queue.Push(data[i], int64(prio[i])) + if queue.Size() != i+1 { + t.Errorf("queue size mismatch: have %v, want %v.", queue.Size(), i+1) + } + } + // Create a map the values to the priorities for easier verification + dict := make(map[int64]int) + for i := 0; i < size; i++ { + dict[int64(prio[i])] = data[i] + } + // Pop out the elements in priority order and verify them + prevPrio := int64(size + 1) + for !queue.Empty() { + val, prio := queue.Pop() + if prio > prevPrio { + t.Errorf("invalid priority order: %v after %v.", prio, prevPrio) + } + prevPrio = prio + if val != dict[prio] { + t.Errorf("push/pop mismatch: have %v, want %v.", val, dict[prio]) + } + delete(dict, prio) + } + } +} + +func TestReset(t *testing.T) { + // Generate a batch of random data and a specific priority order + size := 16 * blockSize + prio := rand.Perm(size) + data := make([]int, size) + for i := 0; i < size; i++ { + data[i] = rand.Int() + } + queue := New(nil) + for rep := 0; rep < 2; rep++ { + // Fill a priority queue with the above data + for i := 0; i < size; i++ { + queue.Push(data[i], int64(prio[i])) + if queue.Size() != i+1 { + t.Errorf("queue size mismatch: have %v, want %v.", queue.Size(), i+1) + } + } + // Create a map the values to the priorities for easier verification + dict := make(map[int64]int) + for i := 0; i < size; i++ { + dict[int64(prio[i])] = data[i] + } + // Pop out half the elements in priority order and verify them + prevPrio := int64(size + 1) + for i := 0; i < size/2; i++ { + val, prio := queue.Pop() + if prio > prevPrio { + t.Errorf("invalid priority order: %v after %v.", prio, prevPrio) + } + prevPrio = prio + if val != dict[prio] { + t.Errorf("push/pop mismatch: have %v, want %v.", val, dict[prio]) + } + delete(dict, prio) + } + // Reset and ensure it's empty + queue.Reset() + if !queue.Empty() { + t.Errorf("priority queue not empty after reset: %v", queue) + } + } +} + +func BenchmarkPush(b *testing.B) { + // Create some initial data + data := make([]int, b.N) + prio := make([]int64, b.N) + for i := 0; i < len(data); i++ { + data[i] = rand.Int() + prio[i] = rand.Int63() + } + // Execute the benchmark + b.ResetTimer() + queue := New(nil) + for i := 0; i < len(data); i++ { + queue.Push(data[i], prio[i]) + } +} + +func BenchmarkPop(b *testing.B) { + // Create some initial data + data := make([]int, b.N) + prio := make([]int64, b.N) + for i := 0; i < len(data); i++ { + data[i] = rand.Int() + prio[i] = rand.Int63() + } + queue := New(nil) + for i := 0; i < len(data); i++ { + queue.Push(data[i], prio[i]) + } + // Execute the benchmark + b.ResetTimer() + for !queue.Empty() { + queue.Pop() + } +} diff --git a/common/prque/sstack.go b/common/prque/sstack.go old mode 100755 new mode 100644 index 8518af54..b06a9541 --- a/common/prque/sstack.go +++ b/common/prque/sstack.go @@ -31,22 +31,24 @@ type SetIndexCallback func(data interface{}, index int) // the stack (heap) functionality and the Len, Less and Swap methods for the // sortability requirements of the heaps. type sstack struct { - setIndex SetIndexCallback - size int - capacity int - offset int + setIndex SetIndexCallback + size int + capacity int + offset int + wrapAround bool blocks [][]*item active []*item } // Creates a new, empty stack. -func newSstack(setIndex SetIndexCallback) *sstack { +func newSstack(setIndex SetIndexCallback, wrapAround bool) *sstack { result := new(sstack) result.setIndex = setIndex result.active = make([]*item, blockSize) result.blocks = [][]*item{result.active} result.capacity = blockSize + result.wrapAround = wrapAround return result } @@ -94,7 +96,11 @@ func (s *sstack) Len() int { // Compares the priority of two elements of the stack (higher is first). // Required by sort.Interface. func (s *sstack) Less(i, j int) bool { - return (s.blocks[i/blockSize][i%blockSize].priority - s.blocks[j/blockSize][j%blockSize].priority) > 0 + a, b := s.blocks[i/blockSize][i%blockSize].priority, s.blocks[j/blockSize][j%blockSize].priority + if s.wrapAround { + return a-b > 0 + } + return a > b } // Swaps two elements in the stack. Required by sort.Interface. @@ -110,5 +116,5 @@ func (s *sstack) Swap(i, j int) { // Resets the stack, effectively clearing its contents. func (s *sstack) Reset() { - *s = *newSstack(s.setIndex) + *s = *newSstack(s.setIndex, false) } diff --git a/common/prque/sstack_test.go b/common/prque/sstack_test.go new file mode 100644 index 00000000..bc629897 --- /dev/null +++ b/common/prque/sstack_test.go @@ -0,0 +1,100 @@ +// 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). + +package prque + +import ( + "math/rand" + "sort" + "testing" +) + +func TestSstack(t *testing.T) { + // Create some initial data + size := 16 * blockSize + data := make([]*item, size) + for i := 0; i < size; i++ { + data[i] = &item{rand.Int(), rand.Int63()} + } + stack := newSstack(nil, false) + for rep := 0; rep < 2; rep++ { + // Push all the data into the stack, pop out every second + secs := []*item{} + for i := 0; i < size; i++ { + stack.Push(data[i]) + if i%2 == 0 { + secs = append(secs, stack.Pop().(*item)) + } + } + rest := []*item{} + for stack.Len() > 0 { + rest = append(rest, stack.Pop().(*item)) + } + // Make sure the contents of the resulting slices are ok + for i := 0; i < size; i++ { + if i%2 == 0 && data[i] != secs[i/2] { + t.Errorf("push/pop mismatch: have %v, want %v.", secs[i/2], data[i]) + } + if i%2 == 1 && data[i] != rest[len(rest)-i/2-1] { + t.Errorf("push/pop mismatch: have %v, want %v.", rest[len(rest)-i/2-1], data[i]) + } + } + } +} + +func TestSstackSort(t *testing.T) { + // Create some initial data + size := 16 * blockSize + data := make([]*item, size) + for i := 0; i < size; i++ { + data[i] = &item{rand.Int(), int64(i)} + } + // Push all the data into the stack + stack := newSstack(nil, false) + for _, val := range data { + stack.Push(val) + } + // Sort and pop the stack contents (should reverse the order) + sort.Sort(stack) + for _, val := range data { + out := stack.Pop() + if out != val { + t.Errorf("push/pop mismatch after sort: have %v, want %v.", out, val) + } + } +} + +func TestSstackReset(t *testing.T) { + // Create some initial data + size := 16 * blockSize + data := make([]*item, size) + for i := 0; i < size; i++ { + data[i] = &item{rand.Int(), rand.Int63()} + } + stack := newSstack(nil, false) + for rep := 0; rep < 2; rep++ { + // Push all the data into the stack, pop out every second + secs := []*item{} + for i := 0; i < size; i++ { + stack.Push(data[i]) + if i%2 == 0 { + secs = append(secs, stack.Pop().(*item)) + } + } + // Reset and verify both pulled and stack contents + stack.Reset() + if stack.Len() != 0 { + t.Errorf("stack not empty after reset: %v", stack) + } + for i := 0; i < size; i++ { + if i%2 == 0 && data[i] != secs[i/2] { + t.Errorf("push/pop mismatch: have %v, want %v.", secs[i/2], data[i]) + } + } + } +} diff --git a/common/size_test.go b/common/size_test.go index 0938d483..28f053d3 100644 --- a/common/size_test.go +++ b/common/size_test.go @@ -25,6 +25,8 @@ func TestStorageSizeString(t *testing.T) { size StorageSize str string }{ + {2839274474874, "2.58 TiB"}, + {2458492810, "2.29 GiB"}, {2381273, "2.27 MiB"}, {2192, "2.14 KiB"}, {12, "12.00 B"}, @@ -36,3 +38,22 @@ func TestStorageSizeString(t *testing.T) { } } } + +func TestStorageSizeTerminalString(t *testing.T) { + tests := []struct { + size StorageSize + str string + }{ + {2839274474874, "2.58TiB"}, + {2458492810, "2.29GiB"}, + {2381273, "2.27MiB"}, + {2192, "2.14KiB"}, + {12, "12.00B"}, + } + + for _, test := range tests { + if test.size.TerminalString() != test.str { + t.Errorf("%f: got %q, want %q", float64(test.size), test.size.TerminalString(), test.str) + } + } +} diff --git a/common/test_utils.go b/common/test_utils.go index a848642f..7a175412 100644 --- a/common/test_utils.go +++ b/common/test_utils.go @@ -19,12 +19,12 @@ package common import ( "encoding/json" "fmt" - "io/ioutil" + "os" ) // LoadJSON reads the given file and unmarshals its content. func LoadJSON(file string, val interface{}) error { - content, err := ioutil.ReadFile(file) + content, err := os.ReadFile(file) if err != nil { return err } diff --git a/common/types.go b/common/types.go index 6a17818a..2205835c 100644 --- a/common/types.go +++ b/common/types.go @@ -17,16 +17,18 @@ package common import ( + "bytes" "database/sql/driver" "encoding/hex" "encoding/json" + "errors" "fmt" "math/big" "math/rand" "reflect" "strings" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common/hexutil" "golang.org/x/crypto/sha3" ) @@ -74,7 +76,7 @@ func (h Hash) Hex() string { return hexutil.Encode(h[:]) } // TerminalString implements log.TerminalStringer, formatting a string for console // output during logging. func (h Hash) TerminalString() string { - return fmt.Sprintf("%x…%x", h[:3], h[29:]) + return fmt.Sprintf("%x..%x", h[:3], h[29:]) } // String implements the stringer interface and is used also by the logger when @@ -83,10 +85,34 @@ func (h Hash) String() string { return h.Hex() } -// Format implements fmt.Formatter, forcing the byte slice to be formatted as is, -// without going through the stringer interface used for logging. +// Format implements fmt.Formatter. +// Hash supports the %v, %s, %q, %x, %X and %d format verbs. func (h Hash) Format(s fmt.State, c rune) { - fmt.Fprintf(s, "%"+string(c), h[:]) + hexb := make([]byte, 2+len(h)*2) + copy(hexb, "0x") + hex.Encode(hexb[2:], h[:]) + + switch c { + case 'x', 'X': + if !s.Flag('#') { + hexb = hexb[2:] + } + if c == 'X' { + hexb = bytes.ToUpper(hexb) + } + fallthrough + case 'v', 's': + s.Write(hexb) + case 'q': + q := []byte{'"'} + s.Write(q) + s.Write(hexb) + s.Write(q) + case 'd': + fmt.Fprint(s, ([len(h)]byte)(h)) + default: + fmt.Fprintf(s, "%%!%c(hash=%x)", c, h) + } } // UnmarshalText parses a hash in hex syntax. @@ -142,16 +168,16 @@ func (h Hash) Value() (driver.Value, error) { } // ImplementsGraphQLType returns true if Hash implements the specified GraphQL type. -func (_ Hash) ImplementsGraphQLType(name string) bool { return name == "Bytes32" } +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: - *h = HexToHash(input) + err = h.UnmarshalText([]byte(input)) default: - err = fmt.Errorf("Unexpected type for Bytes32: %v", input) + err = fmt.Errorf("unexpected type %T for Hash", input) } return err } @@ -207,39 +233,72 @@ func (a Address) Hash() Hash { return BytesToHash(a[:]) } // Hex returns an EIP55-compliant hex string representation of the address. func (a Address) Hex() string { - unchecksummed := hex.EncodeToString(a[:]) + return string(a.checksumHex()) +} + +// String implements fmt.Stringer. +func (a Address) String() string { + return a.Hex() +} + +func (a *Address) checksumHex() []byte { + buf := a.hex() + + // compute checksum sha := sha3.NewLegacyKeccak256() - sha.Write([]byte(unchecksummed)) + sha.Write(buf[2:]) hash := sha.Sum(nil) - - result := []byte(unchecksummed) - for i := 0; i < len(result); i++ { - hashByte := hash[i/2] + for i := 2; i < len(buf); i++ { + hashByte := hash[(i-2)/2] if i%2 == 0 { hashByte = hashByte >> 4 } else { hashByte &= 0xf } - if result[i] > '9' && hashByte > 7 { - result[i] -= 32 + if buf[i] > '9' && hashByte > 7 { + buf[i] -= 32 } } - return "0x" + string(result) + return buf[:] } -// String implements fmt.Stringer. -func (a Address) String() string { - return a.Hex() +func (a Address) hex() []byte { + var buf [len(a)*2 + 2]byte + copy(buf[:2], "0x") + hex.Encode(buf[2:], a[:]) + return buf[:] } -// Format implements fmt.Formatter, forcing the byte slice to be formatted as is, -// without going through the stringer interface used for logging. +// Format implements fmt.Formatter. +// Address supports the %v, %s, %q, %x, %X and %d format verbs. func (a Address) Format(s fmt.State, c rune) { - fmt.Fprintf(s, "%"+string(c), a[:]) + switch c { + case 'v', 's': + s.Write(a.checksumHex()) + case 'q': + q := []byte{'"'} + s.Write(q) + s.Write(a.checksumHex()) + s.Write(q) + case 'x', 'X': + // %x disables the checksum. + hex := a.hex() + if !s.Flag('#') { + hex = hex[2:] + } + if c == 'X' { + hex = bytes.ToUpper(hex) + } + s.Write(hex) + case 'd': + fmt.Fprint(s, ([len(a)]byte)(a)) + default: + fmt.Fprintf(s, "%%!%c(address=%x)", c, a) + } } // SetBytes sets the address to the value of b. -// If b is larger than len(a) it will panic. +// If b is larger than len(a), b will be cropped from the left. func (a *Address) SetBytes(b []byte) { if len(b) > len(a) { b = b[len(b)-AddressLength:] @@ -288,9 +347,9 @@ func (a *Address) UnmarshalGraphQL(input interface{}) error { var err error switch input := input.(type) { case string: - *a = HexToAddress(input) + err = a.UnmarshalText([]byte(input)) default: - err = fmt.Errorf("Unexpected type for Address: %v", input) + err = fmt.Errorf("unexpected type %T for Address", input) } return err } @@ -323,7 +382,7 @@ func NewMixedcaseAddress(addr Address) MixedcaseAddress { // NewMixedcaseAddressFromString is mainly meant for unit-testing func NewMixedcaseAddressFromString(hexaddr string) (*MixedcaseAddress, error) { if !IsHexAddress(hexaddr) { - return nil, fmt.Errorf("Invalid address") + return nil, errors.New("invalid address") } a := FromHex(hexaddr) return &MixedcaseAddress{addr: BytesToAddress(a), original: hexaddr}, nil diff --git a/common/types_test.go b/common/types_test.go index da5c0962..94492278 100644 --- a/common/types_test.go +++ b/common/types_test.go @@ -17,8 +17,10 @@ package common import ( + "bytes" "database/sql/driver" "encoding/json" + "fmt" "math/big" "reflect" "strings" @@ -126,7 +128,7 @@ func TestAddressHexChecksum(t *testing.T) { Input string Output string }{ - // Test cases from https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-55.md#specification + // Test cases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md#specification {"0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed", "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"}, {"0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359", "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359"}, {"0xdbf03b407c01e7cd3cbea99509d93f8dddc8c6fb", "0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB"}, @@ -153,8 +155,7 @@ func BenchmarkAddressHex(b *testing.B) { } func TestMixedcaseAccount_Address(t *testing.T) { - - // https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-55.md + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md // Note: 0X{checksum_addr} is not valid according to spec above var res []struct { @@ -190,9 +191,7 @@ func TestMixedcaseAccount_Address(t *testing.T) { if err := json.Unmarshal([]byte(r), &r2); err == nil { t.Errorf("Expected failure, input %v", r) } - } - } func TestHash_Scan(t *testing.T) { @@ -371,3 +370,167 @@ func TestAddress_Value(t *testing.T) { }) } } + +func TestAddress_Format(t *testing.T) { + b := []byte{ + 0xb2, 0x6f, 0x2b, 0x34, 0x2a, 0xab, 0x24, 0xbc, 0xf6, 0x3e, + 0xa2, 0x18, 0xc6, 0xa9, 0x27, 0x4d, 0x30, 0xab, 0x9a, 0x15, + } + var addr Address + addr.SetBytes(b) + + tests := []struct { + name string + out string + want string + }{ + { + name: "println", + out: fmt.Sprintln(addr), + want: "0xB26f2b342AAb24BCF63ea218c6A9274D30Ab9A15\n", + }, + { + name: "print", + out: fmt.Sprint(addr), + want: "0xB26f2b342AAb24BCF63ea218c6A9274D30Ab9A15", + }, + { + name: "printf-s", + out: func() string { + buf := new(bytes.Buffer) + fmt.Fprintf(buf, "%s", addr) + return buf.String() + }(), + want: "0xB26f2b342AAb24BCF63ea218c6A9274D30Ab9A15", + }, + { + name: "printf-q", + out: fmt.Sprintf("%q", addr), + want: `"0xB26f2b342AAb24BCF63ea218c6A9274D30Ab9A15"`, + }, + { + name: "printf-x", + out: fmt.Sprintf("%x", addr), + want: "b26f2b342aab24bcf63ea218c6a9274d30ab9a15", + }, + { + name: "printf-X", + out: fmt.Sprintf("%X", addr), + want: "B26F2B342AAB24BCF63EA218C6A9274D30AB9A15", + }, + { + name: "printf-#x", + out: fmt.Sprintf("%#x", addr), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15", + }, + { + name: "printf-v", + out: fmt.Sprintf("%v", addr), + want: "0xB26f2b342AAb24BCF63ea218c6A9274D30Ab9A15", + }, + // The original default formatter for byte slice + { + name: "printf-d", + out: fmt.Sprintf("%d", addr), + want: "[178 111 43 52 42 171 36 188 246 62 162 24 198 169 39 77 48 171 154 21]", + }, + // Invalid format char. + { + name: "printf-t", + out: fmt.Sprintf("%t", addr), + want: "%!t(address=b26f2b342aab24bcf63ea218c6a9274d30ab9a15)", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.out != tt.want { + t.Errorf("%s does not render as expected:\n got %s\nwant %s", tt.name, tt.out, tt.want) + } + }) + } +} + +func TestHash_Format(t *testing.T) { + var hash Hash + hash.SetBytes([]byte{ + 0xb2, 0x6f, 0x2b, 0x34, 0x2a, 0xab, 0x24, 0xbc, 0xf6, 0x3e, + 0xa2, 0x18, 0xc6, 0xa9, 0x27, 0x4d, 0x30, 0xab, 0x9a, 0x15, + 0xa2, 0x18, 0xc6, 0xa9, 0x27, 0x4d, 0x30, 0xab, 0x9a, 0x15, + 0x10, 0x00, + }) + + tests := []struct { + name string + out string + want string + }{ + { + name: "println", + out: fmt.Sprintln(hash), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000\n", + }, + { + name: "print", + out: fmt.Sprint(hash), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000", + }, + { + name: "printf-s", + out: func() string { + buf := new(bytes.Buffer) + fmt.Fprintf(buf, "%s", hash) + return buf.String() + }(), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000", + }, + { + name: "printf-q", + out: fmt.Sprintf("%q", hash), + want: `"0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000"`, + }, + { + name: "printf-x", + out: fmt.Sprintf("%x", hash), + want: "b26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000", + }, + { + name: "printf-X", + out: fmt.Sprintf("%X", hash), + want: "B26F2B342AAB24BCF63EA218C6A9274D30AB9A15A218C6A9274D30AB9A151000", + }, + { + name: "printf-#x", + out: fmt.Sprintf("%#x", hash), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000", + }, + { + name: "printf-#X", + out: fmt.Sprintf("%#X", hash), + want: "0XB26F2B342AAB24BCF63EA218C6A9274D30AB9A15A218C6A9274D30AB9A151000", + }, + { + name: "printf-v", + out: fmt.Sprintf("%v", hash), + want: "0xb26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000", + }, + // The original default formatter for byte slice + { + name: "printf-d", + out: fmt.Sprintf("%d", hash), + want: "[178 111 43 52 42 171 36 188 246 62 162 24 198 169 39 77 48 171 154 21 162 24 198 169 39 77 48 171 154 21 16 0]", + }, + // Invalid format char. + { + name: "printf-t", + out: fmt.Sprintf("%t", hash), + want: "%!t(hash=b26f2b342aab24bcf63ea218c6a9274d30ab9a15a218c6a9274d30ab9a151000)", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.out != tt.want { + t.Errorf("%s does not render as expected:\n got %s\nwant %s", tt.name, tt.out, tt.want) + } + }) + } +} diff --git a/consensus/beacon/consensus.go b/consensus/beacon/consensus.go new file mode 100644 index 00000000..7e4d6574 --- /dev/null +++ b/consensus/beacon/consensus.go @@ -0,0 +1,430 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package beacon + +import ( + "errors" + "fmt" + "math/big" + + "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/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/trie" +) + +// Proof-of-stake protocol constants. +var ( + beaconDifficulty = common.Big0 // The default block difficulty in the beacon consensus + beaconNonce = types.EncodeNonce(0) // The default block nonce in the beacon consensus +) + +// Various error messages to mark blocks invalid. These should be private to +// prevent engine specific errors from being referenced in the remainder of the +// codebase, inherently breaking if the engine is swapped out. Please put common +// error types into the consensus package. +var ( + errTooManyUncles = errors.New("too many uncles") + errInvalidNonce = errors.New("invalid nonce") + errInvalidUncleHash = errors.New("invalid uncle hash") + errInvalidTimestamp = errors.New("invalid timestamp") +) + +// Beacon is a consensus engine that combines the eth1 consensus and proof-of-stake +// algorithm. There is a special flag inside to decide whether to use legacy consensus +// rules or new rules. The transition rule is described in the eth1/2 merge spec. +// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3675.md +// +// The beacon here is a half-functional consensus engine with partial functions which +// is only used for necessary consensus checks. The legacy consensus engine can be any +// engine implements the consensus interface (except the beacon itself). +type Beacon struct { + ethone consensus.Engine // Original consensus engine used in eth1, e.g. ethash or clique +} + +// New creates a consensus engine with the given embedded eth1 engine. +func New(ethone consensus.Engine) *Beacon { + if _, ok := ethone.(*Beacon); ok { + panic("nested consensus engine") + } + return &Beacon{ethone: ethone} +} + +// Author implements consensus.Engine, returning the verified author of the block. +func (beacon *Beacon) Author(header *types.Header) (common.Address, error) { + if !beacon.IsPoSHeader(header) { + return beacon.ethone.Author(header) + } + return header.Coinbase, nil +} + +// VerifyHeader checks whether a header conforms to the consensus rules of the +// stock Ethereum consensus engine. +func (beacon *Beacon) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Header, seal bool) error { + reached, err := IsTTDReached(chain, header.ParentHash, header.Number.Uint64()-1) + if err != nil { + return err + } + if !reached { + return beacon.ethone.VerifyHeader(chain, header, seal) + } + // Short circuit if the parent is not known + parent := chain.GetHeader(header.ParentHash, header.Number.Uint64()-1) + if parent == nil { + return consensus.ErrUnknownAncestor + } + // Sanity checks passed, do a proper verification + return beacon.verifyHeader(chain, header, parent) +} + +// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers +// concurrently. The method returns a quit channel to abort the operations and +// a results channel to retrieve the async verifications. +// VerifyHeaders expect the headers to be ordered and continuous. +func (beacon *Beacon) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { + if !beacon.IsPoSHeader(headers[len(headers)-1]) { + return beacon.ethone.VerifyHeaders(chain, headers, seals) + } + var ( + preHeaders []*types.Header + postHeaders []*types.Header + preSeals []bool + ) + for index, header := range headers { + if beacon.IsPoSHeader(header) { + preHeaders = headers[:index] + postHeaders = headers[index:] + preSeals = seals[:index] + break + } + } + + if len(preHeaders) == 0 { + // All the headers are pos headers. Verify that the parent block reached total terminal difficulty. + if reached, err := IsTTDReached(chain, headers[0].ParentHash, headers[0].Number.Uint64()-1); !reached { + // TTD not reached for the first block, mark subsequent with invalid terminal block + if err == nil { + err = consensus.ErrInvalidTerminalBlock + } + results := make(chan error, len(headers)) + for i := 0; i < len(headers); i++ { + results <- err + } + return make(chan struct{}), results + } + return beacon.verifyHeaders(chain, headers, nil) + } + + // The transition point exists in the middle, separate the headers + // into two batches and apply different verification rules for them. + var ( + abort = make(chan struct{}) + results = make(chan error, len(headers)) + ) + go func() { + var ( + old, new, out = 0, len(preHeaders), 0 + errors = make([]error, len(headers)) + done = make([]bool, len(headers)) + oldDone, oldResult = beacon.ethone.VerifyHeaders(chain, preHeaders, preSeals) + newDone, newResult = beacon.verifyHeaders(chain, postHeaders, preHeaders[len(preHeaders)-1]) + ) + // Verify that pre-merge headers don't overflow the TTD + if index, err := verifyTerminalPoWBlock(chain, preHeaders); err != nil { + // Mark all subsequent pow headers with the error. + for i := index; i < len(preHeaders); i++ { + errors[i], done[i] = err, true + } + } + // Collect the results + for { + for ; done[out]; out++ { + results <- errors[out] + if out == len(headers)-1 { + return + } + } + select { + case err := <-oldResult: + if !done[old] { // skip TTD-verified failures + errors[old], done[old] = err, true + } + old++ + case err := <-newResult: + errors[new], done[new] = err, true + new++ + case <-abort: + close(oldDone) + close(newDone) + return + } + } + }() + return abort, results +} + +// verifyTerminalPoWBlock verifies that the preHeaders conform to the specification +// wrt. their total difficulty. +// It expects: +// - preHeaders to be at least 1 element +// - the parent of the header element to be stored in the chain correctly +// - the preHeaders to have a set difficulty +// - the last element to be the terminal block +func verifyTerminalPoWBlock(chain consensus.ChainHeaderReader, preHeaders []*types.Header) (int, error) { + td := chain.GetTd(preHeaders[0].ParentHash, preHeaders[0].Number.Uint64()-1) + if td == nil { + return 0, consensus.ErrUnknownAncestor + } + td = new(big.Int).Set(td) + // Check that all blocks before the last one are below the TTD + for i, head := range preHeaders { + if td.Cmp(chain.Config().TerminalTotalDifficulty) >= 0 { + return i, consensus.ErrInvalidTerminalBlock + } + td.Add(td, head.Difficulty) + } + // Check that the last block is the terminal block + if td.Cmp(chain.Config().TerminalTotalDifficulty) < 0 { + return len(preHeaders) - 1, consensus.ErrInvalidTerminalBlock + } + return 0, nil +} + +// VerifyUncles verifies that the given block's uncles conform to the consensus +// rules of the Ethereum consensus engine. +func (beacon *Beacon) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { + if !beacon.IsPoSHeader(block.Header()) { + return beacon.ethone.VerifyUncles(chain, block) + } + // Verify that there is no uncle block. It's explicitly disabled in the beacon + if len(block.Uncles()) > 0 { + return errTooManyUncles + } + return nil +} + +// verifyHeader checks whether a header conforms to the consensus rules of the +// stock Ethereum consensus engine. The difference between the beacon and classic is +// (a) The following fields are expected to be constants: +// - difficulty is expected to be 0 +// - nonce is expected to be 0 +// - unclehash is expected to be Hash(emptyHeader) +// to be the desired constants +// (b) we don't verify if a block is in the future anymore +// (c) the extradata is limited to 32 bytes +func (beacon *Beacon) verifyHeader(chain consensus.ChainHeaderReader, header, parent *types.Header) error { + // Ensure that the header's extra-data section is of a reasonable size + if len(header.Extra) > 32 { + return fmt.Errorf("extra-data longer than 32 bytes (%d)", len(header.Extra)) + } + // Verify the seal parts. Ensure the nonce and uncle hash are the expected value. + if header.Nonce != beaconNonce { + return errInvalidNonce + } + if header.UncleHash != types.EmptyUncleHash { + return errInvalidUncleHash + } + // Verify the timestamp + if header.Time <= parent.Time { + return errInvalidTimestamp + } + // Verify the block's difficulty to ensure it's the default constant + if beaconDifficulty.Cmp(header.Difficulty) != 0 { + return fmt.Errorf("invalid difficulty: have %v, want %v", header.Difficulty, beaconDifficulty) + } + // Verify that the gas limit is <= 2^63-1 + if header.GasLimit > params.MaxGasLimit { + return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, params.MaxGasLimit) + } + // Verify that the gasUsed is <= gasLimit + if header.GasUsed > header.GasLimit { + return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit) + } + // Verify that the block number is parent's +1 + if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(common.Big1) != 0 { + return consensus.ErrInvalidNumber + } + // Verify the header's EIP-1559 attributes. + return misc.VerifyEip1559Header(chain.Config(), parent, header) +} + +// verifyHeaders is similar to verifyHeader, but verifies a batch of headers +// concurrently. The method returns a quit channel to abort the operations and +// a results channel to retrieve the async verifications. An additional parent +// header will be passed if the relevant header is not in the database yet. +func (beacon *Beacon) verifyHeaders(chain consensus.ChainHeaderReader, headers []*types.Header, ancestor *types.Header) (chan<- struct{}, <-chan error) { + var ( + abort = make(chan struct{}) + results = make(chan error, len(headers)) + ) + go func() { + for i, header := range headers { + var parent *types.Header + if i == 0 { + if ancestor != nil { + parent = ancestor + } else { + parent = chain.GetHeader(headers[0].ParentHash, headers[0].Number.Uint64()-1) + } + } else if headers[i-1].Hash() == headers[i].ParentHash { + parent = headers[i-1] + } + if parent == nil { + select { + case <-abort: + return + case results <- consensus.ErrUnknownAncestor: + } + continue + } + err := beacon.verifyHeader(chain, header, parent) + select { + case <-abort: + return + case results <- err: + } + } + }() + return abort, results +} + +// Prepare implements consensus.Engine, initializing the difficulty field of a +// header to conform to the beacon protocol. The changes are done inline. +func (beacon *Beacon) Prepare(chain consensus.ChainHeaderReader, header *types.Header) error { + // Transition isn't triggered yet, use the legacy rules for preparation. + reached, err := IsTTDReached(chain, header.ParentHash, header.Number.Uint64()-1) + if err != nil { + return err + } + if !reached { + return beacon.ethone.Prepare(chain, header) + } + header.Difficulty = beaconDifficulty + return nil +} + +// Finalize implements consensus.Engine, setting the final state on the header +func (beacon *Beacon) Finalize(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { + // Finalize is different with Prepare, it can be used in both block generation + // and verification. So determine the consensus rules by header type. + if !beacon.IsPoSHeader(header) { + beacon.ethone.Finalize(chain, header, state, txs, uncles) + return + } + // The block reward is no longer handled here. It's done by the + // external consensus engine. + header.Root = state.IntermediateRoot(true) +} + +// FinalizeAndAssemble implements consensus.Engine, setting the final state and +// assembling the block. +func (beacon *Beacon) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { + // FinalizeAndAssemble is different with Prepare, it can be used in both block + // generation and verification. So determine the consensus rules by header type. + if !beacon.IsPoSHeader(header) { + return beacon.ethone.FinalizeAndAssemble(chain, header, state, txs, uncles, receipts) + } + // Finalize and assemble the block + beacon.Finalize(chain, header, state, txs, uncles) + return types.NewBlock(header, txs, uncles, receipts, trie.NewStackTrie(nil)), nil +} + +// Seal generates a new sealing request for the given input block and pushes +// the result into the given channel. +// +// Note, the method returns immediately and will send the result async. More +// than one result may also be returned depending on the consensus algorithm. +func (beacon *Beacon) Seal(chain consensus.ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { + if !beacon.IsPoSHeader(block.Header()) { + return beacon.ethone.Seal(chain, block, results, stop) + } + // The seal verification is done by the external consensus engine, + // return directly without pushing any block back. In another word + // beacon won't return any result by `results` channel which may + // blocks the receiver logic forever. + return nil +} + +// SealHash returns the hash of a block prior to it being sealed. +func (beacon *Beacon) SealHash(header *types.Header) common.Hash { + return beacon.ethone.SealHash(header) +} + +// CalcDifficulty is the difficulty adjustment algorithm. It returns +// the difficulty that a new block should have when created at time +// given the parent block's time and difficulty. +func (beacon *Beacon) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { + // Transition isn't triggered yet, use the legacy rules for calculation + if reached, _ := IsTTDReached(chain, parent.Hash(), parent.Number.Uint64()); !reached { + return beacon.ethone.CalcDifficulty(chain, time, parent) + } + return beaconDifficulty +} + +// APIs implements consensus.Engine, returning the user facing RPC APIs. +func (beacon *Beacon) APIs(chain consensus.ChainHeaderReader) []rpc.API { + return beacon.ethone.APIs(chain) +} + +// Close shutdowns the consensus engine +func (beacon *Beacon) Close() error { + return beacon.ethone.Close() +} + +// IsPoSHeader reports the header belongs to the PoS-stage with some special fields. +// This function is not suitable for a part of APIs like Prepare or CalcDifficulty +// because the header difficulty is not set yet. +func (beacon *Beacon) IsPoSHeader(header *types.Header) bool { + if header.Difficulty == nil { + panic("IsPoSHeader called with invalid difficulty") + } + return header.Difficulty.Cmp(beaconDifficulty) == 0 +} + +// InnerEngine returns the embedded eth1 consensus engine. +func (beacon *Beacon) InnerEngine() consensus.Engine { + return beacon.ethone +} + +// SetThreads updates the mining threads. Delegate the call +// to the eth1 engine if it's threaded. +func (beacon *Beacon) SetThreads(threads int) { + type threaded interface { + SetThreads(threads int) + } + if th, ok := beacon.ethone.(threaded); ok { + th.SetThreads(threads) + } +} + +// IsTTDReached checks if the TotalTerminalDifficulty has been surpassed on the `parentHash` block. +// It depends on the parentHash already being stored in the database. +// If the parentHash is not stored in the database a UnknownAncestor error is returned. +func IsTTDReached(chain consensus.ChainHeaderReader, parentHash common.Hash, number uint64) (bool, error) { + if chain.Config().TerminalTotalDifficulty == nil { + return false, nil + } + td := chain.GetTd(parentHash, number) + if td == nil { + return false, consensus.ErrUnknownAncestor + } + return td.Cmp(chain.Config().TerminalTotalDifficulty) >= 0, nil +} diff --git a/consensus/beacon/consensus_test.go b/consensus/beacon/consensus_test.go new file mode 100644 index 00000000..09c0b27c --- /dev/null +++ b/consensus/beacon/consensus_test.go @@ -0,0 +1,137 @@ +package beacon + +import ( + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" +) + +type mockChain struct { + config *params.ChainConfig + tds map[uint64]*big.Int +} + +func newMockChain() *mockChain { + return &mockChain{ + config: new(params.ChainConfig), + tds: make(map[uint64]*big.Int), + } +} + +func (m *mockChain) Config() *params.ChainConfig { + return m.config +} + +func (m *mockChain) CurrentHeader() *types.Header { panic("not implemented") } + +func (m *mockChain) GetHeader(hash common.Hash, number uint64) *types.Header { + panic("not implemented") +} + +func (m *mockChain) GetHeaderByNumber(number uint64) *types.Header { panic("not implemented") } + +func (m *mockChain) GetHeaderByHash(hash common.Hash) *types.Header { panic("not implemented") } + +func (m *mockChain) GetTd(hash common.Hash, number uint64) *big.Int { + num, ok := m.tds[number] + if ok { + return new(big.Int).Set(num) + } + return nil +} + +func TestVerifyTerminalBlock(t *testing.T) { + chain := newMockChain() + chain.tds[0] = big.NewInt(10) + chain.config.TerminalTotalDifficulty = big.NewInt(50) + + tests := []struct { + preHeaders []*types.Header + ttd *big.Int + err error + index int + }{ + // valid ttd + { + preHeaders: []*types.Header{ + {Number: big.NewInt(1), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(2), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(3), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(4), Difficulty: big.NewInt(10)}, + }, + ttd: big.NewInt(50), + }, + // last block doesn't reach ttd + { + preHeaders: []*types.Header{ + {Number: big.NewInt(1), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(2), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(3), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(4), Difficulty: big.NewInt(9)}, + }, + ttd: big.NewInt(50), + err: consensus.ErrInvalidTerminalBlock, + index: 3, + }, + // two blocks reach ttd + { + preHeaders: []*types.Header{ + {Number: big.NewInt(1), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(2), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(3), Difficulty: big.NewInt(20)}, + {Number: big.NewInt(4), Difficulty: big.NewInt(10)}, + }, + ttd: big.NewInt(50), + err: consensus.ErrInvalidTerminalBlock, + index: 3, + }, + // three blocks reach ttd + { + preHeaders: []*types.Header{ + {Number: big.NewInt(1), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(2), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(3), Difficulty: big.NewInt(20)}, + {Number: big.NewInt(4), Difficulty: big.NewInt(10)}, + {Number: big.NewInt(4), Difficulty: big.NewInt(10)}, + }, + ttd: big.NewInt(50), + err: consensus.ErrInvalidTerminalBlock, + index: 3, + }, + // parent reached ttd + { + preHeaders: []*types.Header{ + {Number: big.NewInt(1), Difficulty: big.NewInt(10)}, + }, + ttd: big.NewInt(9), + err: consensus.ErrInvalidTerminalBlock, + index: 0, + }, + // unknown parent + { + preHeaders: []*types.Header{ + {Number: big.NewInt(4), Difficulty: big.NewInt(10)}, + }, + ttd: big.NewInt(9), + err: consensus.ErrUnknownAncestor, + index: 0, + }, + } + + for i, test := range tests { + fmt.Printf("Test: %v\n", i) + chain.config.TerminalTotalDifficulty = test.ttd + index, err := verifyTerminalPoWBlock(chain, test.preHeaders) + if err != test.err { + t.Fatalf("Invalid error encountered, expected %v got %v", test.err, err) + } + if index != test.index { + t.Fatalf("Invalid index, expected %v got %v", test.index, index) + } + } +} diff --git a/consensus/clique/api.go b/consensus/clique/api.go index 93f63b12..cb270d32 100644 --- a/consensus/clique/api.go +++ b/consensus/clique/api.go @@ -17,16 +17,21 @@ package clique import ( - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/rpc" + "encoding/json" + "fmt" + + "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/types" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) // API is a user facing RPC API to allow controlling the signer and voting // mechanisms of the proof-of-authority scheme. type API struct { - chain consensus.ChainReader + chain consensus.ChainHeaderReader clique *Clique } @@ -117,3 +122,114 @@ func (api *API) Discard(address common.Address) { delete(api.clique.proposals, address) } + +type status struct { + InturnPercent float64 `json:"inturnPercent"` + SigningStatus map[common.Address]int `json:"sealerActivity"` + NumBlocks uint64 `json:"numBlocks"` +} + +// Status returns the status of the last N blocks, +// - the number of active signers, +// - the number of signers, +// - the percentage of in-turn blocks +func (api *API) Status() (*status, error) { + var ( + numBlocks = uint64(64) + header = api.chain.CurrentHeader() + diff = uint64(0) + optimals = 0 + ) + snap, err := api.clique.snapshot(api.chain, header.Number.Uint64(), header.Hash(), nil) + if err != nil { + return nil, err + } + var ( + signers = snap.signers() + end = header.Number.Uint64() + start = end - numBlocks + ) + if numBlocks > end { + start = 1 + numBlocks = end - start + } + signStatus := make(map[common.Address]int) + for _, s := range signers { + signStatus[s] = 0 + } + for n := start; n < end; n++ { + h := api.chain.GetHeaderByNumber(n) + if h == nil { + return nil, fmt.Errorf("missing block %d", n) + } + if h.Difficulty.Cmp(diffInTurn) == 0 { + optimals++ + } + diff += h.Difficulty.Uint64() + sealer, err := api.clique.Author(h) + if err != nil { + return nil, err + } + signStatus[sealer]++ + } + return &status{ + InturnPercent: float64(100*optimals) / float64(numBlocks), + SigningStatus: signStatus, + NumBlocks: numBlocks, + }, nil +} + +type blockNumberOrHashOrRLP struct { + *rpc.BlockNumberOrHash + RLP hexutil.Bytes `json:"rlp,omitempty"` +} + +func (sb *blockNumberOrHashOrRLP) UnmarshalJSON(data []byte) error { + bnOrHash := new(rpc.BlockNumberOrHash) + // Try to unmarshal bNrOrHash + if err := bnOrHash.UnmarshalJSON(data); err == nil { + sb.BlockNumberOrHash = bnOrHash + return nil + } + // Try to unmarshal RLP + var input string + if err := json.Unmarshal(data, &input); err != nil { + return err + } + blob, err := hexutil.Decode(input) + if err != nil { + return err + } + sb.RLP = blob + return nil +} + +// GetSigner returns the signer for a specific clique block. +// Can be called with either a blocknumber, blockhash or an rlp encoded blob. +// The RLP encoded blob can either be a block or a header. +func (api *API) GetSigner(rlpOrBlockNr *blockNumberOrHashOrRLP) (common.Address, error) { + if len(rlpOrBlockNr.RLP) == 0 { + blockNrOrHash := rlpOrBlockNr.BlockNumberOrHash + var header *types.Header + if blockNrOrHash == nil { + header = api.chain.CurrentHeader() + } else if hash, ok := blockNrOrHash.Hash(); ok { + header = api.chain.GetHeaderByHash(hash) + } else if number, ok := blockNrOrHash.Number(); ok { + header = api.chain.GetHeaderByNumber(uint64(number.Int64())) + } + if header == nil { + return common.Address{}, fmt.Errorf("missing block %v", blockNrOrHash.String()) + } + return api.clique.Author(header) + } + block := new(types.Block) + if err := rlp.DecodeBytes(rlpOrBlockNr.RLP, block); err == nil { + return api.clique.Author(block.Header()) + } + header := new(types.Header) + if err := rlp.DecodeBytes(rlpOrBlockNr.RLP, header); err != nil { + return common.Address{}, err + } + return api.clique.Author(header) +} diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index eda51c8c..dcdfb20c 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -20,25 +20,27 @@ package clique import ( "bytes" "errors" + "fmt" "io" "math/big" "math/rand" "sync" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/misc" + "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" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/trie" lru "github.com/hashicorp/golang-lru" "golang.org/x/crypto/sha3" ) @@ -121,9 +123,9 @@ var ( // turn of the signer. errWrongDifficulty = errors.New("wrong difficulty") - // ErrInvalidTimestamp is returned if the timestamp of a block is lower than + // errInvalidTimestamp is returned if the timestamp of a block is lower than // the previous block's timestamp + the minimum block period. - ErrInvalidTimestamp = errors.New("invalid timestamp") + errInvalidTimestamp = errors.New("invalid timestamp") // errInvalidVotingChain is returned if an authorization list is attempted to // be modified via out-of-range or non-contiguous headers. @@ -137,9 +139,8 @@ var ( errRecentlySigned = errors.New("recently signed") ) -// SignerFn is a signer callback function to request a header to be signed by a -// backing account. -type SignerFn func(accounts.Account, string, []byte) ([]byte, error) +// SignerFn hashes and signs the data to be signed by a backing account. +type SignerFn func(signer accounts.Account, mimeType string, message []byte) ([]byte, error) // ecrecover extracts the Ethereum account address from a signed header. func ecrecover(header *types.Header, sigcache *lru.ARCCache) (common.Address, error) { @@ -179,7 +180,7 @@ type Clique struct { signer common.Address // Ethereum address of the signing key signFn SignerFn // Signer function to authorize hashes with - lock sync.RWMutex // Protects the signer fields + lock sync.RWMutex // Protects the signer and proposals fields // The fields below are for testing only fakeDiff bool // Skip difficulty verifications @@ -213,14 +214,14 @@ func (c *Clique) Author(header *types.Header) (common.Address, error) { } // VerifyHeader checks whether a header conforms to the consensus rules. -func (c *Clique) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error { +func (c *Clique) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Header, seal bool) error { return c.verifyHeader(chain, header, nil) } // VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers. The // method returns a quit channel to abort the operations and a results channel to // retrieve the async verifications (the order is that of the input slice). -func (c *Clique) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { +func (c *Clique) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { abort := make(chan struct{}) results := make(chan error, len(headers)) @@ -242,7 +243,7 @@ func (c *Clique) VerifyHeaders(chain consensus.ChainReader, headers []*types.Hea // caller may optionally pass in a batch of parents (ascending order) to avoid // looking those up from the database. This is useful for concurrently verifying // a batch of new headers. -func (c *Clique) verifyHeader(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { +func (c *Clique) verifyHeader(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) error { if header.Number == nil { return errUnknownBlock } @@ -293,6 +294,10 @@ func (c *Clique) verifyHeader(chain consensus.ChainReader, header *types.Header, return errInvalidDifficulty } } + // Verify that the gas limit is <= 2^63-1 + if header.GasLimit > params.MaxGasLimit { + return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, params.MaxGasLimit) + } // If all checks passed, validate any special fields for hard forks if err := misc.VerifyForkHashes(chain.Config(), header, false); err != nil { return err @@ -305,13 +310,13 @@ func (c *Clique) verifyHeader(chain consensus.ChainReader, header *types.Header, // rather depend on a batch of previous headers. The caller may optionally pass // in a batch of parents (ascending order) to avoid looking those up from the // database. This is useful for concurrently verifying a batch of new headers. -func (c *Clique) verifyCascadingFields(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { +func (c *Clique) verifyCascadingFields(chain consensus.ChainHeaderReader, header *types.Header, parents []*types.Header) error { // The genesis block is the always valid dead-end number := header.Number.Uint64() if number == 0 { return nil } - // Ensure that the block's timestamp isn't too close to it's parent + // Ensure that the block's timestamp isn't too close to its parent var parent *types.Header if len(parents) > 0 { parent = parents[len(parents)-1] @@ -322,7 +327,23 @@ func (c *Clique) verifyCascadingFields(chain consensus.ChainReader, header *type return consensus.ErrUnknownAncestor } if parent.Time+c.config.Period > header.Time { - return ErrInvalidTimestamp + return errInvalidTimestamp + } + // Verify that the gasUsed is <= gasLimit + if header.GasUsed > header.GasLimit { + return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit) + } + if !chain.Config().IsLondon(header.Number) { + // Verify BaseFee not present before EIP-1559 fork. + if header.BaseFee != nil { + return fmt.Errorf("invalid baseFee before fork: have %d, want ", header.BaseFee) + } + if err := misc.VerifyGaslimit(parent.GasLimit, header.GasLimit); err != nil { + return err + } + } else if err := misc.VerifyEip1559Header(chain.Config(), parent, header); err != nil { + // Verify the header's EIP-1559 attributes. + return err } // Retrieve the snapshot needed to verify this header and cache it snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) @@ -341,11 +362,11 @@ func (c *Clique) verifyCascadingFields(chain consensus.ChainReader, header *type } } // All basic checks passed, verify the seal and return - return c.verifySeal(chain, header, parents) + return c.verifySeal(snap, header, parents) } // snapshot retrieves the authorization snapshot at a given point in time. -func (c *Clique) snapshot(chain consensus.ChainReader, number uint64, hash common.Hash, parents []*types.Header) (*Snapshot, error) { +func (c *Clique) snapshot(chain consensus.ChainHeaderReader, number uint64, hash common.Hash, parents []*types.Header) (*Snapshot, error) { // Search for a snapshot in memory or on disk for checkpoints var ( headers []*types.Header @@ -369,7 +390,7 @@ func (c *Clique) snapshot(chain consensus.ChainReader, number uint64, hash commo // 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)) { + if number == 0 || (number%c.config.Epoch == 0 && (len(headers) > params.FullImmutabilityThreshold || chain.GetHeaderByNumber(number-1) == nil)) { checkpoint := chain.GetHeaderByNumber(number) if checkpoint != nil { hash := checkpoint.Hash() @@ -434,28 +455,16 @@ func (c *Clique) VerifyUncles(chain consensus.ChainReader, block *types.Block) e return nil } -// VerifySeal implements consensus.Engine, checking whether the signature contained -// in the header satisfies the consensus protocol requirements. -func (c *Clique) VerifySeal(chain consensus.ChainReader, header *types.Header) error { - return c.verifySeal(chain, header, nil) -} - // verifySeal checks whether the signature contained in the header satisfies the // consensus protocol requirements. The method accepts an optional list of parent // headers that aren't yet part of the local blockchain to generate the snapshots // from. -func (c *Clique) verifySeal(chain consensus.ChainReader, header *types.Header, parents []*types.Header) error { +func (c *Clique) verifySeal(snap *Snapshot, header *types.Header, parents []*types.Header) error { // Verifying the genesis block is not supported number := header.Number.Uint64() if number == 0 { return errUnknownBlock } - // Retrieve the snapshot needed to verify this header and cache it - snap, err := c.snapshot(chain, number-1, header.ParentHash, parents) - if err != nil { - return err - } - // Resolve the authorization key and check against signers signer, err := ecrecover(header, c.signatures) if err != nil { @@ -487,7 +496,7 @@ func (c *Clique) verifySeal(chain consensus.ChainReader, header *types.Header, p // Prepare implements consensus.Engine, preparing all the consensus fields of the // header for running the transactions on top. -func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) error { +func (c *Clique) Prepare(chain consensus.ChainHeaderReader, header *types.Header) error { // If the block isn't a checkpoint, cast a random vote (good enough for now) header.Coinbase = common.Address{} header.Nonce = types.BlockNonce{} @@ -498,9 +507,8 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro if err != nil { return err } + c.lock.RLock() if number%c.config.Epoch != 0 { - c.lock.RLock() - // Gather all the proposals that make sense voting on addresses := make([]common.Address, 0, len(c.proposals)) for address, authorize := range c.proposals { @@ -517,12 +525,16 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro copy(header.Nonce[:], nonceDropVote) } } - c.lock.RUnlock() } + + // Copy signer protected by mutex to avoid race condition + signer := c.signer + c.lock.RUnlock() + // Set the correct difficulty - header.Difficulty = CalcDifficulty(snap, c.signer) + header.Difficulty = calcDifficulty(snap, signer) - // Ensure the extra data has all it's components + // Ensure the extra data has all its components if len(header.Extra) < extraVanity { header.Extra = append(header.Extra, bytes.Repeat([]byte{0x00}, extraVanity-len(header.Extra))...) } @@ -552,7 +564,7 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro // Finalize implements consensus.Engine, ensuring no uncles are set, nor block // rewards given. -func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { +func (c *Clique) Finalize(chain consensus.ChainHeaderReader, 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) @@ -560,13 +572,12 @@ func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, sta // 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) +func (c *Clique) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { + // Finalize block + c.Finalize(chain, header, state, txs, uncles) // Assemble and return the final block for sealing - return types.NewBlock(header, txs, nil, receipts), nil + return types.NewBlock(header, txs, nil, receipts, trie.NewStackTrie(nil)), nil } // Authorize injects a private key into the consensus engine to mint new blocks @@ -581,7 +592,7 @@ func (c *Clique) Authorize(signer common.Address, signFn SignerFn) { // Seal implements consensus.Engine, attempting to create a sealed block using // the local signing credentials. -func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { +func (c *Clique) Seal(chain consensus.ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { header := block.Header() // Sealing the genesis block is not supported @@ -591,8 +602,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c } // For 0-period chains, refuse to seal empty blocks (no reward but would spin sealing) if c.config.Period == 0 && len(block.Transactions()) == 0 { - log.Info("Sealing paused, waiting for transactions") - return nil + return errors.New("sealing paused while waiting for transactions") } // Don't hold the signer fields for the entire sealing procedure c.lock.RLock() @@ -612,8 +622,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c if recent == signer { // Signer is among recents, only wait if the current block doesn't shift it out if limit := uint64(len(snap.Signers)/2 + 1); number < limit || seen > number-limit { - log.Info("Signed recently, must wait for others") - return nil + return errors.New("signed recently, must wait for others") } } } @@ -652,20 +661,21 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c } // CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty -// that a new block should have based on the previous blocks in the chain and the -// current signer. -func (c *Clique) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { +// that a new block should have: +// * DIFF_NOTURN(2) if BLOCK_NUMBER % SIGNER_COUNT != SIGNER_INDEX +// * DIFF_INTURN(1) if BLOCK_NUMBER % SIGNER_COUNT == SIGNER_INDEX +func (c *Clique) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { snap, err := c.snapshot(chain, parent.Number.Uint64(), parent.Hash(), nil) if err != nil { return nil } - return CalcDifficulty(snap, c.signer) + c.lock.RLock() + signer := c.signer + c.lock.RUnlock() + return calcDifficulty(snap, signer) } -// CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty -// that a new block should have based on the previous blocks in the chain and the -// current signer. -func CalcDifficulty(snap *Snapshot, signer common.Address) *big.Int { +func calcDifficulty(snap *Snapshot, signer common.Address) *big.Int { if snap.inturn(snap.Number+1, signer) { return new(big.Int).Set(diffInTurn) } @@ -684,12 +694,10 @@ func (c *Clique) Close() error { // APIs implements consensus.Engine, returning the user facing RPC API to allow // controlling the signer voting. -func (c *Clique) APIs(chain consensus.ChainReader) []rpc.API { +func (c *Clique) APIs(chain consensus.ChainHeaderReader) []rpc.API { return []rpc.API{{ Namespace: "clique", - Version: "1.0", Service: &API{chain: chain, clique: c}, - Public: false, }} } @@ -697,7 +705,7 @@ func (c *Clique) APIs(chain consensus.ChainReader) []rpc.API { func SealHash(header *types.Header) (hash common.Hash) { hasher := sha3.NewLegacyKeccak256() encodeSigHeader(hasher, header) - hasher.Sum(hash[:0]) + hasher.(crypto.KeccakState).Read(hash[:]) return hash } @@ -715,7 +723,7 @@ func CliqueRLP(header *types.Header) []byte { } func encodeSigHeader(w io.Writer, header *types.Header) { - err := rlp.Encode(w, []interface{}{ + enc := []interface{}{ header.ParentHash, header.UncleHash, header.Coinbase, @@ -731,8 +739,11 @@ func encodeSigHeader(w io.Writer, header *types.Header) { header.Extra[:len(header.Extra)-crypto.SignatureLength], // Yes, this will panic if extra is too short header.MixDigest, header.Nonce, - }) - if err != nil { + } + if header.BaseFee != nil { + enc = append(enc, header.BaseFee) + } + if err := rlp.Encode(w, enc); err != nil { panic("can't encode: " + err.Error()) } } diff --git a/consensus/clique/clique_test.go b/consensus/clique/clique_test.go index cd2b9735..74d884a2 100644 --- a/consensus/clique/clique_test.go +++ b/consensus/clique/clique_test.go @@ -20,13 +20,13 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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. @@ -45,16 +45,18 @@ func TestReimportMirroredState(t *testing.T) { signer = new(types.HomesteadSigner) ) genspec := &core.Genesis{ + Config: params.AllCliqueProtocolChanges, ExtraData: make([]byte, extraVanity+common.AddressLength+extraSeal), Alloc: map[common.Address]core.GenesisAccount{ - addr: {Balance: big.NewInt(1)}, + addr: {Balance: big.NewInt(10000000000000000)}, }, + BaseFee: big.NewInt(params.InitialBaseFee), } 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) + chain, _ := core.NewBlockChain(db, nil, genspec, nil, engine, vm.Config{}, nil, nil) defer chain.Stop() blocks, _ := core.GenerateChain(params.AllCliqueProtocolChanges, genesis, engine, db, 3, func(i int, block *core.BlockGen) { @@ -65,7 +67,7 @@ func TestReimportMirroredState(t *testing.T) { // 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) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(addr), common.Address{0x00}, new(big.Int), params.TxGas, block.BaseFee(), nil), signer, key) if err != nil { panic(err) } @@ -88,7 +90,7 @@ func TestReimportMirroredState(t *testing.T) { db = rawdb.NewMemoryDatabase() genspec.MustCommit(db) - chain, _ = core.NewBlockChain(db, nil, params.AllCliqueProtocolChanges, engine, vm.Config{}, nil) + chain, _ = core.NewBlockChain(db, nil, genspec, nil, engine, vm.Config{}, nil, nil) defer chain.Stop() if _, err := chain.InsertChain(blocks[:2]); err != nil { @@ -99,9 +101,9 @@ func TestReimportMirroredState(t *testing.T) { } // 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 + // flushing the dirty states out. Insert the last block, triggering a sidechain // reimport. - chain, _ = core.NewBlockChain(db, nil, params.AllCliqueProtocolChanges, engine, vm.Config{}, nil) + chain, _ = core.NewBlockChain(db, nil, genspec, nil, engine, vm.Config{}, nil, nil) defer chain.Stop() if _, err := chain.InsertChain(blocks[2:]); err != nil { @@ -111,3 +113,16 @@ func TestReimportMirroredState(t *testing.T) { t.Fatalf("chain head mismatch: have %d, want %d", head, 3) } } + +func TestSealHash(t *testing.T) { + have := SealHash(&types.Header{ + Difficulty: new(big.Int), + Number: new(big.Int), + Extra: make([]byte, 32+65), + BaseFee: new(big.Int), + }) + want := common.HexToHash("0xbd3d1fa43fbc4c5bfcc91b179ec92e2861df3654de60468beb908ff805359e8f") + if have != want { + t.Errorf("have %x, want %x", have, want) + } +} diff --git a/consensus/clique/snapshot.go b/consensus/clique/snapshot.go index bd3950c2..4ee731a9 100644 --- a/consensus/clique/snapshot.go +++ b/consensus/clique/snapshot.go @@ -22,11 +22,11 @@ import ( "sort" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "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" ) diff --git a/consensus/clique/snapshot_test.go b/consensus/clique/snapshot_test.go index 1efcfe4e..a1e481ab 100644 --- a/consensus/clique/snapshot_test.go +++ b/consensus/clique/snapshot_test.go @@ -19,16 +19,17 @@ package clique import ( "bytes" "crypto/ecdsa" + "math/big" "sort" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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" ) // testerAccountPool is a pool to maintain currently active tester accounts, @@ -304,7 +305,7 @@ func TestClique(t *testing.T) { }, { // Ensure that pending votes don't survive authorization status changes. This // corner case can only appear if a signer is quickly added, removed and then - // readded (or the inverse), while one of the original voters dropped. If a + // re-added (or the inverse), while one of the original voters dropped. If a // past vote is left cached in the system somewhere, this will interfere with // the final signer outcome. signers: []string{"A", "B", "C", "D", "E"}, @@ -343,7 +344,7 @@ func TestClique(t *testing.T) { }, failure: errUnauthorizedSigner, }, { - // An authorized signer that signed recenty should not be able to sign again + // An authorized signer that signed recently should not be able to sign again signers: []string{"A", "B"}, votes: []testerVote{ {signer: "A"}, @@ -363,7 +364,7 @@ func TestClique(t *testing.T) { failure: errRecentlySigned, }, { // Recent signatures should not reset on checkpoint blocks imported in a new - // batch (https://github.com/cryptoecc/ETH-ECC/issues/17593). Whilst this + // batch (https://github.com/ethereum/go-ethereum/issues/17593). Whilst this // seems overly specific and weird, it was a Rinkeby consensus split. epoch: 3, signers: []string{"A", "B", "C"}, @@ -395,13 +396,14 @@ func TestClique(t *testing.T) { // Create the genesis block with the initial set of signers genesis := &core.Genesis{ ExtraData: make([]byte, extraVanity+common.AddressLength*len(signers)+extraSeal), + BaseFee: big.NewInt(params.InitialBaseFee), } for j, signer := range signers { copy(genesis.ExtraData[extraVanity+j*common.AddressLength:], signer[:]) } // Create a pristine blockchain with the genesis injected db := rawdb.NewMemoryDatabase() - genesis.Commit(db) + genesisBlock := genesis.MustCommit(db) // Assemble a chain of headers from the cast votes config := *params.TestChainConfig @@ -409,10 +411,11 @@ func TestClique(t *testing.T) { Period: 1, Epoch: tt.epoch, } + genesis.Config = &config engine := New(config.Clique, db) engine.fakeDiff = true - blocks, _ := core.GenerateChain(&config, genesis.ToBlock(db), engine, db, len(tt.votes), func(j int, gen *core.BlockGen) { + blocks, _ := core.GenerateChain(&config, genesisBlock, engine, db, len(tt.votes), func(j int, gen *core.BlockGen) { // Cast the vote contained in this block gen.SetCoinbase(accounts.address(tt.votes[j].voted)) if tt.votes[j].auth { @@ -423,7 +426,7 @@ func TestClique(t *testing.T) { }) // Iterate through the blocks and seal them individually for j, block := range blocks { - // Geth the header and prepare it for signing + // Get the header and prepare it for signing header := block.Header() if j > 0 { header.ParentHash = blocks[j-1].Hash() @@ -448,7 +451,7 @@ func TestClique(t *testing.T) { batches[len(batches)-1] = append(batches[len(batches)-1], block) } // Pass all the headers through clique and ensure tallying succeeds - chain, err := core.NewBlockChain(db, nil, &config, engine, vm.Config{}, nil) + chain, err := core.NewBlockChain(db, nil, genesis, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Errorf("test %d: failed to create test chain: %v", i, err) continue diff --git a/consensus/consensus.go b/consensus/consensus.go index 7a84ffd7..af8ce98f 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -20,16 +20,16 @@ package consensus import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) -// ChainReader defines a small collection of methods needed to access the local -// blockchain during header and/or uncle verification. -type ChainReader interface { +// ChainHeaderReader defines a small collection of methods needed to access the local +// blockchain during header verification. +type ChainHeaderReader interface { // Config retrieves the blockchain's chain configuration. Config() *params.ChainConfig @@ -45,6 +45,15 @@ type ChainReader interface { // GetHeaderByHash retrieves a block header from the database by its hash. GetHeaderByHash(hash common.Hash) *types.Header + // GetTd retrieves the total difficulty from the database by hash and number. + GetTd(hash common.Hash, number uint64) *big.Int +} + +// ChainReader defines a small collection of methods needed to access the local +// blockchain during header and/or uncle verification. +type ChainReader interface { + ChainHeaderReader + // GetBlock retrieves a block from the database by hash and number. GetBlock(hash common.Hash, number uint64) *types.Block } @@ -59,32 +68,28 @@ type Engine interface { // VerifyHeader checks whether a header conforms to the consensus rules of a // given engine. Verifying the seal may be done optionally here, or explicitly // via the VerifySeal method. - VerifyHeader(chain ChainReader, header *types.Header, seal bool) error + VerifyHeader(chain ChainHeaderReader, header *types.Header, seal bool) error // VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers // concurrently. The method returns a quit channel to abort the operations and // a results channel to retrieve the async verifications (the order is that of // the input slice). - VerifyHeaders(chain ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) + VerifyHeaders(chain ChainHeaderReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) // VerifyUncles verifies that the given block's uncles conform to the consensus // rules of a given engine. VerifyUncles(chain ChainReader, block *types.Block) error - // VerifySeal checks whether the crypto seal on a header is valid according to - // the consensus rules of the given engine. - VerifySeal(chain ChainReader, header *types.Header) error - // Prepare initializes the consensus fields of a block header according to the // rules of a particular engine. The changes are executed inline. - Prepare(chain ChainReader, header *types.Header) error + Prepare(chain ChainHeaderReader, header *types.Header) error // Finalize runs any post-transaction state modifications (e.g. block rewards) // 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, + Finalize(chain ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) // FinalizeAndAssemble runs any post-transaction state modifications (e.g. block @@ -92,7 +97,7 @@ type Engine interface { // // 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, + FinalizeAndAssemble(chain ChainHeaderReader, 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 @@ -100,17 +105,17 @@ type Engine interface { // // Note, the method returns immediately and will send the result async. More // than one result may also be returned depending on the consensus algorithm. - Seal(chain ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error + Seal(chain ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error // SealHash returns the hash of a block prior to it being sealed. SealHash(header *types.Header) common.Hash // CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty // that a new block should have. - CalcDifficulty(chain ChainReader, time uint64, parent *types.Header) *big.Int + CalcDifficulty(chain ChainHeaderReader, time uint64, parent *types.Header) *big.Int // APIs returns the RPC APIs this consensus engine provides. - APIs(chain ChainReader) []rpc.API + APIs(chain ChainHeaderReader) []rpc.API // Close terminates any background threads maintained by the consensus engine. Close() error diff --git a/consensus/eccpow/LDPCDecoder.go b/consensus/eccpow/LDPCDecoder.go deleted file mode 100644 index ac482aef..00000000 --- a/consensus/eccpow/LDPCDecoder.go +++ /dev/null @@ -1,97 +0,0 @@ -package eccpow - -import ( - "encoding/binary" - "math" - - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -//OptimizedDecoding return hashVector, outputWord, LRrtl -func OptimizedDecoding(parameters Parameters, hashVector []int, H, rowInCol, colInRow [][]int) ([]int, []int, [][]float64) { - outputWord := make([]int, parameters.n) - LRqtl := make([][]float64, parameters.n) - LRrtl := make([][]float64, parameters.n) - LRft := make([]float64, parameters.n) - - for i := 0; i < parameters.n; i++ { - LRqtl[i] = make([]float64, parameters.m) - LRrtl[i] = make([]float64, parameters.m) - LRft[i] = math.Log((1-crossErr)/crossErr) * float64((hashVector[i]*2 - 1)) - } - LRpt := make([]float64, parameters.n) - - for ind := 1; ind <= maxIter; ind++ { - for t := 0; t < parameters.n; t++ { - temp3 := 0.0 - - for mp := 0; mp < parameters.wc; mp++ { - temp3 = infinityTest(temp3 + LRrtl[t][rowInCol[mp][t]]) - } - for m := 0; m < parameters.wc; m++ { - temp4 := temp3 - temp4 = infinityTest(temp4 - LRrtl[t][rowInCol[m][t]]) - LRqtl[t][rowInCol[m][t]] = infinityTest(LRft[t] + temp4) - } - } - - for k := 0; k < parameters.wr; k++ { - for l := 0; l < parameters.wr; l++ { - temp3 := 0.0 - sign := 1.0 - tempSign := 0.0 - for m := 0; m < parameters.wr; m++ { - if m != l { - temp3 = temp3 + funcF(math.Abs(LRqtl[colInRow[m][k]][k])) - if LRqtl[colInRow[m][k]][k] > 0.0 { - tempSign = 1.0 - } else { - tempSign = -1.0 - } - sign = sign * tempSign - } - } - magnitude := funcF(temp3) - LRrtl[colInRow[l][k]][k] = infinityTest(sign * magnitude) - } - } - - for t := 0; t < parameters.n; t++ { - LRpt[t] = infinityTest(LRft[t]) - for k := 0; k < parameters.wc; k++ { - LRpt[t] += LRrtl[t][rowInCol[k][t]] - LRpt[t] = infinityTest(LRpt[t]) - } - - if LRpt[t] >= 0 { - outputWord[t] = 1 - } else { - outputWord[t] = 0 - } - } - } - - return hashVector, outputWord, LRrtl -} - -//VerifyOptimizedDecoding return bool, hashVector, outputword, digest which are used for validation -func VerifyOptimizedDecoding(header *types.Header, hash []byte) (bool, []int, []int, []byte) { - parameters, _ := setParameters(header) - H := generateH(parameters) - colInRow, rowInCol := generateQ(parameters, H) - - seed := make([]byte, 40) - copy(seed, hash) - binary.LittleEndian.PutUint64(seed[32:], header.Nonce.Uint64()) - seed = crypto.Keccak512(seed) - - hashVector := generateHv(parameters, seed) - hashVectorOfVerification, outputWordOfVerification, _ := OptimizedDecoding(parameters, hashVector, H, rowInCol, colInRow) - - if MakeDecision(header, colInRow, outputWordOfVerification) { - return true, hashVectorOfVerification, outputWordOfVerification, seed - } - - return false, hashVectorOfVerification, outputWordOfVerification, seed -} diff --git a/consensus/eccpow/LDPCDecoder_test.go b/consensus/eccpow/LDPCDecoder_test.go deleted file mode 100644 index c6dc1edd..00000000 --- a/consensus/eccpow/LDPCDecoder_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package eccpow - -import ( - "math/rand" - "reflect" - "testing" - - "github.com/cryptoecc/ETH-ECC/core/types" -) - -func TestNonceDecoding(t *testing.T) { - LDPCNonce := generateRandomNonce() - EncodedNonce := types.EncodeNonce(LDPCNonce) - DecodedNonce := EncodedNonce.Uint64() - - if LDPCNonce == DecodedNonce { - t.Logf("LDPCNonce : %v\n", LDPCNonce) - t.Logf("Decoded Nonce : %v\n", DecodedNonce) - } else { - t.Errorf("LDPCNonce : %v\n", LDPCNonce) - t.Errorf("Decoded Nonce : %v\n", DecodedNonce) - } -} - -func TestGenerateH(t *testing.T) { - for i := 0; i < 10; i++ { - header := new(types.Header) - header.Difficulty = ProbToDifficulty(Table[0].miningProb) - - parameters, _ := setParameters(header) - - H1 := generateH(parameters) - H2 := generateH(parameters) - - if !reflect.DeepEqual(H1, H2) { - t.Error("Wrong") - } - } -} - -func TestRandShuffle(t *testing.T) { - for attempt := 0; attempt < 100; attempt++ { - var hSeed int64 - var colOrder []int - - for i := 1; i < 4; i++ { - colOrder = nil - for j := 0; j < 32; j++ { - colOrder = append(colOrder, j) - } - - rand.Seed(hSeed) - rand.Shuffle(len(colOrder), func(i, j int) { - colOrder[i], colOrder[j] = colOrder[j], colOrder[i] - }) - hSeed-- - } - - var hSeed2 int64 - var colOrder2 []int - - for i := 1; i < 4; i++ { - colOrder2 = nil - for j := 0; j < 32; j++ { - colOrder2 = append(colOrder2, j) - } - - rand.Seed(hSeed2) - rand.Shuffle(len(colOrder2), func(i, j int) { - colOrder2[i], colOrder2[j] = colOrder2[j], colOrder2[i] - }) - hSeed2-- - } - - if !reflect.DeepEqual(colOrder, colOrder2) { - t.Error("Wrong") - } - } -} diff --git a/consensus/eccpow/LDPCDifficulty.go b/consensus/eccpow/LDPCDifficulty.go deleted file mode 100644 index 842c12d4..00000000 --- a/consensus/eccpow/LDPCDifficulty.go +++ /dev/null @@ -1,112 +0,0 @@ -package eccpow - -import ( - "math" - "math/big" - - "github.com/cryptoecc/ETH-ECC/core/types" -) - -/* - https://ethereum.stackexchange.com/questions/5913/how-does-the-ethereum-homestead-difficulty-adjustment-algorithm-work?noredirect=1&lq=1 - https://github.com/ethereum/EIPs/issues/100 - - Ethereum difficulty adjustment - algorithm: - diff = (parent_diff + - (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)) - ) + 2^(periodCount - 2) - - LDPC difficulty adjustment - algorithm: - diff = (parent_diff + - (parent_diff / 256 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // BlockGenerationTime), -99))) - - Why 8? - This number is sensitivity of blockgeneration time - If this number is high, difficulty is not changed much when block generation time is different from goal of block generation time - But if this number is low, difficulty is changed much when block generatin time is different from goal of block generation time - -*/ - -// "github.com/ethereum/go-ethereum/consensus/ethash/consensus.go" -// Some weird constants to avoid constant memory allocs for them. -var ( - MinimumDifficulty = ProbToDifficulty(Table[0].miningProb) - BlockGenerationTime = big.NewInt(36) - Sensitivity = big.NewInt(8) -) - -// MakeLDPCDifficultyCalculator calculate difficulty using difficulty table -func MakeLDPCDifficultyCalculator() func(time uint64, parent *types.Header) *big.Int { - return func(time uint64, parent *types.Header) *big.Int { - bigTime := new(big.Int).SetUint64(time) - bigParentTime := new(big.Int).SetUint64(parent.Time) - - // holds intermediate values to make the algo easier to read & audit - x := new(big.Int) - y := new(big.Int) - - // (2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // BlockGenerationTime - x.Sub(bigTime, bigParentTime) - //fmt.Printf("block_timestamp - parent_timestamp : %v\n", x) - - x.Div(x, BlockGenerationTime) - //fmt.Printf("(block_timestamp - parent_timestamp) / BlockGenerationTime : %v\n", x) - - if parent.UncleHash == types.EmptyUncleHash { - //fmt.Printf("No uncle\n") - x.Sub(big1, x) - } else { - //fmt.Printf("Uncle block exists") - x.Sub(big2, x) - } - //fmt.Printf("(2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) / BlockGenerationTime : %v\n", x) - - // max((2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // 9, -99) - if x.Cmp(bigMinus99) < 0 { - x.Set(bigMinus99) - } - //fmt.Printf("max(1 - (block_timestamp - parent_timestamp) / BlockGenerationTime, -99) : %v\n", x) - - // parent_diff + (parent_diff / Sensitivity * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // BlockGenerationTime), -99)) - y.Div(parent.Difficulty, Sensitivity) - //fmt.Printf("parent.Difficulty / 8 : %v\n", y) - - x.Mul(y, x) - //fmt.Printf("parent.Difficulty / 8 * max(1 - (block_timestamp - parent_timestamp) / BlockGenerationTime, -99) : %v\n", x) - - x.Add(parent.Difficulty, x) - //fmt.Printf("parent.Difficulty - parent.Difficulty / 8 * max(1 - (block_timestamp - parent_timestamp) / BlockGenerationTime, -99) : %v\n", x) - - // minimum difficulty can ever be (before exponential factor) - if x.Cmp(MinimumDifficulty) < 0 { - x.Set(MinimumDifficulty) - } - //fmt.Printf("x : %v, Minimum difficulty : %v\n", x, MinimumDifficulty) - - return x - } -} - -// SearchLevel return next level by using currentDifficulty of header -// Type of Ethereum difficulty is *bit.Int so arg is *big.int -func SearchLevel(difficulty *big.Int) int { - // foo := MakeLDPCDifficultyCalculator() - // Next level := SearchNextLevel(foo(currentBlock's time stamp, parentBlock)) - - var currentProb = DifficultyToProb(difficulty) - var level int - - distance := 1.0 - for i := range Table { - if math.Abs(currentProb-Table[i].miningProb) <= distance { - level = Table[i].level - distance = math.Abs(currentProb - Table[i].miningProb) - } else { - break - } - } - - return level -} diff --git a/consensus/eccpow/LDPCDifficulty_test.go b/consensus/eccpow/LDPCDifficulty_test.go deleted file mode 100644 index dbb58c03..00000000 --- a/consensus/eccpow/LDPCDifficulty_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package eccpow - -import ( - "fmt" - "math" - "math/big" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/core/types" -) - -func TestTablePrint(t *testing.T) { - for i := range Table { - fmt.Printf("level : %v, n : %v, wc : %v, wr : %v, decisionFrom : %v, decisionTo : %v, decisionStep : %v, miningProb : %v \n", Table[i].level, Table[i].n, Table[i].wc, Table[i].wr, Table[i].decisionFrom, Table[i].decisionTo, Table[i].decisionStep, Table[i].miningProb) - } -} - -func TestPrintReciprocal(t *testing.T) { - for i := range Table { - val := 1 / Table[i].miningProb - bigInt := FloatToBigInt(val) - fmt.Printf("Reciprocal of miningProb : %v \t big Int : %v\n", val, bigInt) - } -} - -func TestConversionFunc(t *testing.T) { - for i := range Table { - difficulty := ProbToDifficulty(Table[i].miningProb) - miningProb := DifficultyToProb(difficulty) - - // Consider only integer part. - fmt.Printf("Difficulty : %v \t MiningProb : %v\t, probability compare : %v \n", difficulty, miningProb, math.Abs(miningProb-Table[i].miningProb) < 1) - } -} - -func TestDifficultyChange(t *testing.T) { - var hash []byte - currentLevel := 0 - currentBlock := new(types.Header) - // Parent block's timestamp is 0 - // compare elapse time(timestamp) and parent block's timestamp(0) - currentBlock.Difficulty = big.NewInt(0) - currentBlock.Time = 0 - currentBlock.UncleHash = types.EmptyUncleHash - for i := 0; i < 5; i++ { - fmt.Printf("Current Difficulty : %v\n", currentBlock.Difficulty) - - startTime := time.Now() - - RunOptimizedConcurrencyLDPC(currentBlock, hash) - timeStamp := uint64(time.Since(startTime).Seconds()) - fmt.Printf("Block generation time : %v\n", timeStamp) - - difficultyCalculator := MakeLDPCDifficultyCalculator() - nextDifficulty := difficultyCalculator(timeStamp, currentBlock) - currentBlock.Difficulty = nextDifficulty - nextLevel := SearchLevel(nextDifficulty) - - fmt.Printf("Current prob : %v, Next Level : %v, Next difficulty : %v, Next difficulty from table : %v\n\n", Table[currentLevel].miningProb, Table[nextLevel].level, nextDifficulty, ProbToDifficulty(Table[nextLevel].miningProb)) - // currentBlock.ParentHash = outputWord conversion from []int to [32]byte - currentLevel = nextLevel - fmt.Printf("Current Level : %v\n", currentLevel) - } -} diff --git a/consensus/eccpow/LDPCDifficulty_utils.go b/consensus/eccpow/LDPCDifficulty_utils.go deleted file mode 100644 index a3a2f6b1..00000000 --- a/consensus/eccpow/LDPCDifficulty_utils.go +++ /dev/null @@ -1,447 +0,0 @@ -package eccpow - -import ( - "math/big" -) - -// Table : level, n, wc, wr, decisionFrom, decisionTo, decisionStep, _, miningProb -/* - How to decision - 1. The number of ones in outputword % decision_step == 0 - 2. The number of ones in outputword exists between decision_from to decision_to - - How to change difficulty level - - Reciprocal of difficulty is probability - - Therefore We can define difficulty is reciprocal of probability - - Find close probability - -*/ -type difficulty struct { - level int - n int - wc int - wr int - decisionFrom int - decisionTo int - decisionStep int - _ float32 - miningProb float64 -} - -// FloatToBigInt convert float64 to big integer -func FloatToBigInt(val float64) *big.Int { - // float64 -> bit float -> big int - bigFloat := big.NewFloat(val) - bigInt := new(big.Int) - bigFloat.Int(bigInt) - - return bigInt -} - -// BigIntToFloat convert big int to float64 -func BigIntToFloat(val *big.Int) float64 { - // big int -> bit float -> float64 - bigFloat := new(big.Float).SetInt(val) - floatVal, _ := bigFloat.Float64() - - return floatVal -} - -// DifficultyToProb convert difficulty to probability of table -func DifficultyToProb(difficulty *big.Int) float64 { - //big Int -> 1/bigInt -> float64 - prob := 1 / BigIntToFloat(difficulty) - return prob -} - -// ProbToDifficulty convert probability to difficulty of header -func ProbToDifficulty(miningProb float64) *big.Int { - // float64 -> 1/float64 -> big Int - difficulty := FloatToBigInt(1 / miningProb) - return difficulty -} - -// Table is difficulty table slice -var Table = []difficulty{ - {0, 32, 3, 4, 10, 22, 2, 0.329111, 3.077970e-05}, - {1, 32, 3, 4, 10, 22, 2, 0.329111, 3.077970e-05}, - {2, 32, 3, 4, 10, 16, 2, 0.329111, 2.023220e-05}, - {3, 32, 3, 4, 16, 16, 1, 0.329111, 9.684650e-06}, - {4, 32, 3, 4, 14, 14, 1, 0.329111, 6.784080e-06}, - {5, 36, 3, 4, 12, 24, 2, 0.329111, 4.830240e-06}, - {6, 36, 3, 4, 12, 18, 2, 0.369449, 3.125970e-06}, - {7, 32, 3, 4, 12, 12, 1, 0.369449, 2.862890e-06}, - {8, 44, 3, 4, 14, 30, 2, 0.369449, 1.637790e-06}, - {9, 36, 3, 4, 18, 18, 1, 0.369449, 1.421700e-06}, - {10, 36, 3, 4, 16, 16, 1, 0.369449, 1.051350e-06}, - {11, 44, 3, 4, 14, 22, 2, 0.411046, 1.029740e-06}, - {12, 40, 3, 4, 12, 28, 2, 0.411046, 7.570880e-07}, - {13, 36, 3, 4, 14, 14, 1, 0.411046, 4.865630e-07}, - {14, 40, 3, 4, 12, 20, 2, 0.411046, 4.813320e-07}, - {15, 44, 3, 4, 22, 22, 1, 0.411046, 4.216920e-07}, - {16, 44, 3, 4, 20, 20, 1, 0.411046, 3.350070e-07}, - {17, 48, 3, 4, 14, 34, 2, 0.452453, 2.677070e-07}, - {18, 40, 3, 4, 20, 20, 1, 0.452453, 2.055750e-07}, - {19, 44, 3, 4, 18, 18, 1, 0.452453, 1.788400e-07}, - {20, 48, 3, 4, 14, 24, 2, 0.452453, 1.664080e-07}, - {21, 40, 3, 4, 18, 18, 1, 0.452453, 1.583110e-07}, - {22, 40, 3, 4, 16, 16, 1, 0.452453, 7.917230e-08}, - {23, 44, 3, 4, 16, 16, 1, 0.498513, 7.103820e-08}, - {24, 48, 3, 4, 24, 24, 1, 0.498513, 6.510890e-08}, - {25, 48, 3, 4, 22, 22, 1, 0.498513, 5.300760e-08}, - {26, 52, 3, 4, 14, 40, 2, 0.498513, 4.266600e-08}, - {27, 48, 3, 4, 20, 20, 1, 0.498513, 2.990510e-08}, - {28, 40, 3, 4, 14, 14, 1, 0.498513, 2.927380e-08}, - {29, 52, 3, 4, 14, 26, 2, 0.498513, 2.626790e-08}, - {30, 60, 3, 4, 18, 42, 2, 0.498513, 1.485240e-08}, - {31, 48, 3, 4, 18, 18, 1, 0.546238, 1.267290e-08}, - {32, 52, 3, 4, 26, 26, 1, 0.546238, 9.891110e-09}, - {33, 60, 3, 4, 18, 30, 2, 0.546238, 9.019200e-09}, - {34, 48, 3, 4, 16, 32, 1, 0.546238, 8.762650e-09}, - {35, 52, 3, 4, 24, 24, 1, 0.546238, 8.213140e-09}, - {36, 56, 3, 4, 16, 42, 2, 0.546238, 6.658250e-09}, - {37, 52, 3, 4, 22, 22, 1, 0.546238, 4.856960e-09}, - {38, 48, 3, 4, 16, 16, 1, 0.546238, 4.381330e-09}, - {39, 56, 3, 4, 16, 28, 2, 0.546238, 4.068000e-09}, - {40, 60, 3, 4, 30, 30, 1, 0.546238, 3.186040e-09}, - {41, 60, 3, 4, 28, 28, 1, 0.578290, 2.725470e-09}, - {42, 64, 3, 4, 18, 46, 2, 0.578290, 2.410890e-09}, - {43, 52, 3, 4, 20, 20, 1, 0.578290, 2.181360e-09}, - {44, 60, 3, 4, 26, 26, 1, 0.578290, 1.737940e-09}, - {45, 52, 3, 4, 18, 34, 1, 0.578290, 1.595330e-09}, - {46, 56, 3, 4, 28, 28, 1, 0.578290, 1.481830e-09}, - {47, 64, 3, 4, 18, 32, 2, 0.578290, 1.454780e-09}, - {48, 56, 3, 4, 26, 26, 1, 0.578290, 1.250550e-09}, - {49, 60, 3, 4, 24, 24, 1, 0.578290, 8.614860e-10}, - {50, 52, 3, 4, 18, 18, 1, 0.578290, 7.976650e-10}, - {51, 56, 3, 4, 24, 24, 1, 0.628015, 7.700380e-10}, - {52, 60, 3, 4, 22, 38, 1, 0.628015, 6.978800e-10}, - {53, 52, 3, 4, 16, 36, 1, 0.628015, 5.069080e-10}, - {54, 64, 3, 4, 32, 32, 1, 0.628015, 4.986660e-10}, - {55, 64, 3, 4, 30, 30, 1, 0.628015, 4.315180e-10}, - {56, 68, 3, 4, 18, 50, 2, 0.628015, 3.848530e-10}, - {57, 56, 3, 4, 22, 22, 1, 0.628015, 3.643130e-10}, - {58, 60, 3, 4, 22, 22, 1, 0.628015, 3.489400e-10}, - {59, 64, 3, 4, 28, 28, 1, 0.628015, 2.836780e-10}, - {60, 56, 3, 4, 20, 36, 1, 0.628015, 2.809120e-10}, - {61, 52, 3, 4, 16, 16, 1, 0.666500, 2.534540e-10}, - {62, 60, 3, 4, 20, 40, 1, 0.666500, 2.427110e-10}, - {63, 68, 3, 4, 18, 34, 2, 0.666500, 2.309280e-10}, - {64, 64, 3, 4, 26, 26, 1, 0.666500, 1.466250e-10}, - {65, 56, 3, 4, 20, 20, 1, 0.666500, 1.404560e-10}, - {66, 76, 3, 4, 22, 54, 2, 0.666500, 1.375500e-10}, - {67, 60, 3, 4, 20, 20, 1, 0.666500, 1.213550e-10}, - {68, 56, 3, 4, 18, 38, 1, 0.666500, 9.340240e-11}, - {69, 76, 3, 4, 22, 38, 2, 0.666500, 8.174200e-11}, - {70, 68, 3, 4, 34, 34, 1, 0.666500, 7.700290e-11}, - {71, 68, 3, 4, 32, 32, 1, 0.666500, 6.729690e-11}, - {72, 64, 3, 4, 24, 24, 1, 0.706860, 6.217280e-11}, - {73, 72, 3, 4, 18, 56, 2, 0.706860, 6.056200e-11}, - {74, 56, 3, 4, 18, 18, 1, 0.706860, 4.670120e-11}, - {75, 68, 3, 4, 30, 30, 1, 0.706860, 4.543980e-11}, - {76, 64, 3, 4, 22, 42, 1, 0.706860, 4.517330e-11}, - {77, 72, 3, 4, 18, 36, 2, 0.706860, 3.615450e-11}, - {78, 76, 3, 4, 38, 38, 1, 0.706860, 2.593400e-11}, - {79, 68, 3, 4, 28, 28, 1, 0.706860, 2.438720e-11}, - {80, 76, 3, 4, 36, 36, 1, 0.706860, 2.303460e-11}, - {81, 64, 3, 4, 22, 22, 1, 0.706860, 2.258660e-11}, - {82, 80, 3, 4, 22, 58, 2, 0.706860, 2.229400e-11}, - {83, 76, 3, 4, 34, 34, 1, 0.706860, 1.626350e-11}, - {84, 64, 3, 4, 20, 40, 1, 0.706860, 1.465310e-11}, - {85, 80, 3, 4, 22, 40, 2, 0.763542, 1.319160e-11}, - {86, 72, 3, 4, 36, 36, 1, 0.763542, 1.174900e-11}, - {87, 68, 3, 4, 26, 26, 1, 0.763542, 1.078820e-11}, - {88, 72, 3, 4, 34, 34, 1, 0.763542, 1.035690e-11}, - {89, 76, 3, 4, 32, 32, 1, 0.763542, 9.311370e-12}, - {90, 68, 3, 4, 24, 44, 1, 0.763542, 8.173020e-12}, - {91, 64, 3, 4, 20, 20, 1, 0.763542, 7.326570e-12}, - {92, 72, 3, 4, 32, 32, 1, 0.763542, 7.160350e-12}, - {93, 76, 3, 4, 30, 30, 1, 0.763542, 4.440960e-12}, - {94, 80, 3, 4, 40, 40, 1, 0.763542, 4.089220e-12}, - {95, 68, 3, 4, 24, 24, 1, 0.763542, 4.086510e-12}, - {96, 72, 3, 4, 30, 30, 1, 0.763542, 3.975570e-12}, - {97, 80, 3, 4, 38, 38, 1, 0.763542, 3.656430e-12}, - {98, 76, 3, 4, 28, 48, 1, 0.763542, 3.634830e-12}, - {99, 84, 3, 4, 22, 62, 2, 0.763542, 3.566880e-12}, - {100, 68, 3, 4, 22, 46, 1, 0.783762, 2.750600e-12}, - {101, 80, 3, 4, 36, 36, 1, 0.783762, 2.630600e-12}, - {102, 84, 3, 4, 22, 42, 2, 0.783762, 2.102180e-12}, - {103, 72, 3, 4, 28, 28, 1, 0.783762, 1.828850e-12}, - {104, 76, 3, 4, 28, 28, 1, 0.783762, 1.817420e-12}, - {105, 80, 3, 4, 34, 34, 1, 0.783762, 1.548670e-12}, - {106, 72, 3, 4, 26, 46, 1, 0.783762, 1.441670e-12}, - {107, 68, 3, 4, 22, 22, 1, 0.783762, 1.375300e-12}, - {108, 76, 3, 4, 26, 50, 1, 0.783762, 1.314800e-12}, - {109, 92, 3, 4, 24, 68, 2, 0.783762, 1.296220e-12}, - {110, 68, 3, 4, 20, 48, 1, 0.783762, 8.516070e-13}, - {111, 80, 3, 4, 32, 32, 1, 0.783762, 7.636740e-13}, - {112, 92, 3, 4, 24, 46, 2, 0.783762, 7.585130e-13}, - {113, 72, 3, 4, 26, 26, 1, 0.824961, 7.208340e-13}, - {114, 76, 3, 4, 26, 26, 1, 0.824961, 6.573980e-13}, - {115, 80, 3, 4, 30, 50, 1, 0.824961, 6.475910e-13}, - {116, 84, 3, 4, 42, 42, 1, 0.824961, 6.374900e-13}, - {117, 84, 3, 4, 40, 40, 1, 0.824961, 5.734350e-13}, - {118, 88, 3, 4, 22, 66, 2, 0.824961, 5.640630e-13}, - {119, 72, 3, 4, 24, 48, 1, 0.824961, 5.032200e-13}, - {120, 76, 3, 4, 24, 52, 1, 0.824961, 4.325430e-13}, - {121, 68, 3, 4, 20, 20, 1, 0.824961, 4.258030e-13}, - {122, 84, 3, 4, 38, 38, 1, 0.824961, 4.195890e-13}, - {123, 88, 3, 4, 22, 44, 2, 0.824961, 3.312130e-13}, - {124, 80, 3, 4, 30, 30, 1, 0.824961, 3.237950e-13}, - {125, 84, 3, 4, 36, 36, 1, 0.824961, 2.533670e-13}, - {126, 72, 3, 4, 24, 24, 1, 0.824961, 2.516100e-13}, - {127, 80, 3, 4, 28, 52, 1, 0.824961, 2.424700e-13}, - {128, 92, 3, 4, 46, 46, 1, 0.865704, 2.208090e-13}, - {129, 76, 3, 4, 24, 24, 1, 0.865704, 2.162710e-13}, - {130, 96, 3, 4, 26, 72, 2, 0.865704, 2.099840e-13}, - {131, 92, 3, 4, 44, 44, 1, 0.865704, 2.006580e-13}, - {132, 72, 3, 4, 22, 50, 1, 0.865704, 1.605310e-13}, - {133, 92, 3, 4, 42, 42, 1, 0.865704, 1.511670e-13}, - {134, 84, 3, 4, 34, 34, 1, 0.865704, 1.288510e-13}, - {135, 96, 3, 4, 26, 48, 2, 0.865704, 1.224810e-13}, - {136, 80, 3, 4, 28, 28, 1, 0.865704, 1.212350e-13}, - {137, 88, 3, 4, 44, 44, 1, 0.865704, 9.836240e-14}, - {138, 92, 3, 4, 40, 40, 1, 0.865704, 9.542830e-14}, - {139, 88, 3, 4, 42, 42, 1, 0.865704, 8.895450e-14}, - {140, 80, 3, 4, 26, 54, 1, 0.865704, 8.227740e-14}, - {141, 72, 3, 4, 22, 22, 1, 0.865704, 8.026550e-14}, - {142, 88, 3, 4, 40, 40, 1, 0.865704, 6.609120e-14}, - {143, 84, 3, 4, 32, 32, 1, 0.865704, 5.648410e-14}, - {144, 92, 3, 4, 38, 38, 1, 0.908949, 5.127400e-14}, - {145, 72, 3, 4, 20, 52, 1, 0.908949, 4.822030e-14}, - {146, 84, 3, 4, 30, 54, 1, 0.908949, 4.372420e-14}, - {147, 80, 3, 4, 26, 26, 1, 0.908949, 4.113870e-14}, - {148, 88, 3, 4, 38, 38, 1, 0.908949, 4.084490e-14}, - {149, 96, 3, 4, 48, 48, 1, 0.908949, 3.497970e-14}, - {150, 100, 3, 4, 26, 76, 2, 0.908949, 3.365420e-14}, - {151, 96, 3, 4, 46, 46, 1, 0.908949, 3.192740e-14}, - {152, 80, 3, 4, 24, 56, 1, 0.908949, 2.593890e-14}, - {153, 96, 3, 4, 44, 44, 1, 0.908949, 2.435890e-14}, - {154, 72, 3, 4, 20, 20, 1, 0.908949, 2.411020e-14}, - {155, 92, 3, 4, 36, 36, 1, 0.908949, 2.388460e-14}, - {156, 84, 3, 4, 30, 30, 1, 0.908949, 2.186210e-14}, - {157, 88, 3, 4, 36, 36, 1, 0.908949, 2.137330e-14}, - {158, 92, 3, 4, 34, 58, 1, 0.908949, 1.967320e-14}, - {159, 100, 3, 4, 26, 50, 2, 0.908949, 1.957080e-14}, - {160, 96, 3, 4, 42, 42, 1, 0.908949, 1.568040e-14}, - {161, 84, 3, 4, 28, 56, 1, 0.908949, 1.529960e-14}, - {162, 80, 3, 4, 24, 24, 1, 0.954202, 1.296950e-14}, - {163, 108, 3, 4, 28, 82, 2, 0.954202, 1.237200e-14}, - {164, 92, 3, 4, 34, 34, 1, 0.954202, 9.836600e-15}, - {165, 88, 3, 4, 34, 34, 1, 0.954202, 9.667440e-15}, - {166, 96, 3, 4, 40, 40, 1, 0.954202, 8.634600e-15}, - {167, 88, 3, 4, 32, 56, 1, 0.954202, 7.725050e-15}, - {168, 84, 3, 4, 28, 28, 1, 0.954202, 7.649800e-15}, - {169, 92, 3, 4, 32, 60, 1, 0.954202, 7.305750e-15}, - {170, 108, 3, 4, 28, 54, 2, 0.954202, 7.154920e-15}, - {171, 100, 3, 4, 50, 50, 1, 0.954202, 5.487490e-15}, - {172, 104, 3, 4, 26, 78, 2, 0.954202, 5.340690e-15}, - {173, 100, 3, 4, 48, 48, 1, 0.954202, 5.028760e-15}, - {174, 84, 3, 4, 26, 58, 1, 0.954202, 4.951260e-15}, - {175, 96, 3, 4, 38, 38, 1, 0.954202, 4.134930e-15}, - {176, 100, 3, 4, 46, 46, 1, 0.954202, 3.881360e-15}, - {177, 88, 3, 4, 32, 32, 1, 0.954202, 3.862530e-15}, - {178, 92, 3, 4, 32, 32, 1, 0.954202, 3.652870e-15}, - {179, 96, 3, 4, 36, 60, 1, 0.954202, 3.505650e-15}, - {180, 104, 3, 4, 26, 52, 2, 0.993877, 3.096920e-15}, - {181, 88, 3, 4, 30, 58, 1, 0.993877, 2.785770e-15}, - {182, 100, 3, 4, 44, 44, 1, 0.993877, 2.543880e-15}, - {183, 92, 3, 4, 30, 62, 1, 0.993877, 2.493880e-15}, - {184, 84, 3, 4, 26, 26, 1, 0.993877, 2.475630e-15}, - {185, 112, 3, 4, 28, 86, 2, 0.993877, 2.003890e-15}, - {186, 108, 3, 4, 54, 54, 1, 0.993877, 1.937830e-15}, - {187, 108, 3, 4, 52, 52, 1, 0.993877, 1.788370e-15}, - {188, 96, 3, 4, 36, 36, 1, 0.993877, 1.752820e-15}, - {189, 84, 3, 4, 24, 60, 1, 0.993877, 1.514630e-15}, - {190, 100, 3, 4, 42, 42, 1, 0.993877, 1.433180e-15}, - {191, 108, 3, 4, 50, 50, 1, 0.993877, 1.408830e-15}, - {192, 88, 3, 4, 30, 30, 1, 0.993877, 1.392880e-15}, - {193, 96, 3, 4, 34, 62, 1, 0.993877, 1.339400e-15}, - {194, 92, 3, 4, 30, 30, 1, 0.993877, 1.246940e-15}, - {195, 112, 3, 4, 28, 56, 2, 0.993877, 1.155930e-15}, - {196, 108, 3, 4, 48, 48, 1, 0.993877, 9.534230e-16}, - {197, 88, 3, 4, 28, 60, 1, 0.993877, 9.258750e-16}, - {198, 104, 3, 4, 52, 52, 1, 1.035782, 8.531480e-16}, - {199, 92, 3, 4, 28, 64, 1, 1.035782, 7.972240e-16}, - {200, 104, 3, 4, 50, 50, 1, 1.035782, 7.847010e-16}, - {201, 84, 3, 4, 24, 24, 1, 1.035782, 7.573130e-16}, - {202, 100, 3, 4, 40, 40, 1, 1.035782, 7.043820e-16}, - {203, 96, 3, 4, 34, 34, 1, 1.035782, 6.696990e-16}, - {204, 100, 3, 4, 38, 62, 1, 1.035782, 6.138180e-16}, - {205, 104, 3, 4, 48, 48, 1, 1.035782, 6.121340e-16}, - {206, 108, 3, 4, 46, 46, 1, 1.035782, 5.596910e-16}, - {207, 96, 3, 4, 32, 64, 1, 1.035782, 4.694950e-16}, - {208, 88, 3, 4, 28, 28, 1, 1.035782, 4.629380e-16}, - {209, 104, 3, 4, 46, 46, 1, 1.035782, 4.079260e-16}, - {210, 92, 3, 4, 28, 28, 1, 1.035782, 3.986120e-16}, - {211, 116, 3, 4, 30, 86, 2, 1.035782, 3.215820e-16}, - {212, 112, 3, 4, 56, 56, 1, 1.035782, 3.079780e-16}, - {213, 100, 3, 4, 38, 38, 1, 1.035782, 3.069090e-16}, - {214, 88, 3, 4, 26, 62, 1, 1.035782, 2.893730e-16}, - {215, 108, 3, 4, 44, 44, 1, 1.035782, 2.884350e-16}, - {216, 112, 3, 4, 54, 54, 1, 1.035782, 2.851100e-16}, - {217, 92, 3, 4, 26, 66, 1, 1.035782, 2.429760e-16}, - {218, 100, 3, 4, 36, 64, 1, 1.083752, 2.410500e-16}, - {219, 104, 3, 4, 44, 44, 1, 1.083752, 2.347600e-16}, - {220, 96, 3, 4, 32, 32, 1, 1.083752, 2.347480e-16}, - {221, 112, 3, 4, 52, 52, 1, 1.083752, 2.266460e-16}, - {222, 116, 3, 4, 30, 58, 2, 1.083752, 1.850560e-16}, - {223, 112, 3, 4, 50, 50, 1, 1.083752, 1.555940e-16}, - {224, 96, 3, 4, 30, 66, 1, 1.083752, 1.536060e-16}, - {225, 88, 3, 4, 26, 26, 1, 1.083752, 1.446860e-16}, - {226, 108, 3, 4, 42, 42, 1, 1.083752, 1.322410e-16}, - {227, 92, 3, 4, 26, 26, 1, 1.083752, 1.214880e-16}, - {228, 100, 3, 4, 36, 36, 1, 1.083752, 1.205250e-16}, - {229, 124, 3, 4, 32, 94, 2, 1.083752, 1.192380e-16}, - {230, 104, 3, 4, 42, 42, 1, 1.083752, 1.182330e-16}, - {231, 108, 3, 4, 40, 68, 1, 1.083752, 1.093900e-16}, - {232, 112, 3, 4, 48, 48, 1, 1.083752, 9.304980e-17}, - {233, 100, 3, 4, 34, 66, 1, 1.083752, 8.672750e-17}, - {234, 88, 3, 4, 24, 64, 1, 1.083752, 8.671340e-17}, - {235, 96, 3, 4, 30, 30, 1, 1.083752, 7.680300e-17}, - {236, 124, 3, 4, 32, 62, 2, 1.083752, 6.831000e-17}, - {237, 108, 3, 4, 40, 40, 1, 1.083752, 5.469510e-17}, - {238, 104, 3, 4, 40, 40, 1, 1.083752, 5.287900e-17}, - {239, 120, 3, 4, 30, 90, 2, 1.122176, 5.116510e-17}, - {240, 112, 3, 4, 46, 46, 1, 1.122176, 4.900210e-17}, - {241, 116, 3, 4, 58, 58, 1, 1.122176, 4.853020e-17}, - {242, 96, 3, 4, 28, 68, 1, 1.122176, 4.769400e-17}, - {243, 116, 3, 4, 56, 56, 1, 1.122176, 4.505610e-17}, - {244, 100, 3, 4, 34, 34, 1, 1.122176, 4.336370e-17}, - {245, 88, 3, 4, 24, 24, 1, 1.122176, 4.335670e-17}, - {246, 104, 3, 4, 38, 66, 1, 1.122176, 4.264440e-17}, - {247, 108, 3, 4, 38, 70, 1, 1.122176, 4.139190e-17}, - {248, 116, 3, 4, 54, 54, 1, 1.122176, 3.611940e-17}, - {249, 120, 3, 4, 30, 60, 2, 1.122176, 2.937590e-17}, - {250, 100, 3, 4, 32, 68, 1, 1.122176, 2.904870e-17}, - {251, 116, 3, 4, 52, 52, 1, 1.122176, 2.512890e-17}, - {252, 96, 3, 4, 28, 28, 1, 1.122176, 2.384700e-17}, - {253, 112, 3, 4, 44, 44, 1, 1.122176, 2.300220e-17}, - {254, 104, 3, 4, 38, 38, 1, 1.122176, 2.132220e-17}, - {255, 108, 3, 4, 38, 38, 1, 1.122176, 2.069600e-17}, - {256, 112, 3, 4, 42, 70, 1, 1.122176, 1.949710e-17}, - {257, 128, 3, 4, 32, 98, 2, 1.122176, 1.931040e-17}, - {258, 124, 3, 4, 62, 62, 1, 1.122176, 1.738220e-17}, - {259, 124, 3, 4, 60, 60, 1, 1.122176, 1.622110e-17}, - {260, 104, 3, 4, 36, 68, 1, 1.165058, 1.573970e-17}, - {261, 116, 3, 4, 50, 50, 1, 1.165058, 1.529120e-17}, - {262, 108, 3, 4, 36, 72, 1, 1.165058, 1.452810e-17}, - {263, 100, 3, 4, 32, 32, 1, 1.165058, 1.452430e-17}, - {264, 124, 3, 4, 58, 58, 1, 1.165058, 1.320160e-17}, - {265, 128, 3, 4, 32, 64, 2, 1.165058, 1.103980e-17}, - {266, 112, 3, 4, 42, 42, 1, 1.165058, 9.748530e-18}, - {267, 124, 3, 4, 56, 56, 1, 1.165058, 9.408340e-18}, - {268, 100, 3, 4, 30, 70, 1, 1.165058, 9.198900e-18}, - {269, 116, 3, 4, 48, 48, 1, 1.165058, 8.218710e-18}, - {270, 104, 3, 4, 36, 36, 1, 1.165058, 7.869870e-18}, - {271, 120, 3, 4, 60, 60, 1, 1.165058, 7.586620e-18}, - {272, 112, 3, 4, 40, 72, 1, 1.165058, 7.557840e-18}, - {273, 108, 3, 4, 36, 36, 1, 1.165058, 7.264050e-18}, - {274, 120, 3, 4, 58, 58, 1, 1.165058, 7.062330e-18}, - {275, 124, 3, 4, 54, 54, 1, 1.165058, 5.908890e-18}, - {276, 120, 3, 4, 56, 56, 1, 1.165058, 5.705970e-18}, - {277, 104, 3, 4, 34, 70, 1, 1.165058, 5.397190e-18}, - {278, 108, 3, 4, 34, 74, 1, 1.165058, 4.794130e-18}, - {279, 100, 3, 4, 30, 30, 1, 1.165058, 4.599450e-18}, - {280, 120, 3, 4, 54, 54, 1, 1.165058, 4.019430e-18}, - {281, 116, 3, 4, 46, 46, 1, 1.165058, 3.945320e-18}, - {282, 112, 3, 4, 40, 40, 1, 1.165058, 3.778920e-18}, - {283, 116, 3, 4, 44, 72, 1, 1.231412, 3.423190e-18}, - {284, 124, 3, 4, 52, 52, 1, 1.231412, 3.297090e-18}, - {285, 100, 3, 4, 28, 72, 1, 1.231412, 2.795780e-18}, - {286, 128, 3, 4, 64, 64, 1, 1.231412, 2.769110e-18}, - {287, 112, 3, 4, 38, 74, 1, 1.231412, 2.714430e-18}, - {288, 104, 3, 4, 34, 34, 1, 1.231412, 2.698600e-18}, - {289, 128, 3, 4, 62, 62, 1, 1.231412, 2.590140e-18}, - {290, 120, 3, 4, 52, 52, 1, 1.231412, 2.486040e-18}, - {291, 108, 3, 4, 34, 34, 1, 1.231412, 2.397060e-18}, - {292, 128, 3, 4, 60, 60, 1, 1.231412, 2.122380e-18}, - {293, 104, 3, 4, 32, 72, 1, 1.231412, 1.744360e-18}, - {294, 116, 3, 4, 44, 44, 1, 1.231412, 1.711600e-18}, - {295, 124, 3, 4, 50, 50, 1, 1.231412, 1.649820e-18}, - {296, 128, 3, 4, 58, 58, 1, 1.231412, 1.529130e-18}, - {297, 108, 3, 4, 32, 76, 1, 1.231412, 1.506960e-18}, - {298, 100, 3, 4, 28, 28, 1, 1.231412, 1.397890e-18}, - {299, 120, 3, 4, 50, 50, 1, 1.231412, 1.362180e-18}, - {300, 116, 3, 4, 42, 74, 1, 1.231412, 1.358390e-18}, - {301, 112, 3, 4, 38, 38, 1, 1.231412, 1.357210e-18}, - {302, 128, 3, 4, 56, 56, 1, 1.231412, 9.742990e-19}, - {303, 112, 3, 4, 36, 76, 1, 1.231412, 9.147070e-19}, - {304, 104, 3, 4, 32, 32, 1, 1.231412, 8.721800e-19}, - {305, 108, 3, 4, 32, 32, 1, 1.231412, 7.534800e-19}, - {306, 124, 3, 4, 48, 48, 1, 1.273354, 7.478050e-19}, - {307, 116, 3, 4, 42, 42, 1, 1.273354, 6.791960e-19}, - {308, 120, 3, 4, 48, 48, 1, 1.273354, 6.679650e-19}, - {309, 124, 3, 4, 46, 78, 1, 1.273354, 6.204930e-19}, - {310, 120, 3, 4, 46, 74, 1, 1.273354, 5.926870e-19}, - {311, 128, 3, 4, 54, 54, 1, 1.273354, 5.530780e-19}, - {312, 104, 3, 4, 30, 74, 1, 1.273354, 5.388680e-19}, - {313, 116, 3, 4, 40, 76, 1, 1.273354, 4.990110e-19}, - {314, 112, 3, 4, 36, 36, 1, 1.273354, 4.573530e-19}, - {315, 108, 3, 4, 30, 78, 1, 1.273354, 4.570100e-19}, - {316, 124, 3, 4, 46, 46, 1, 1.273354, 3.102460e-19}, - {317, 120, 3, 4, 46, 46, 1, 1.273354, 2.963440e-19}, - {318, 112, 3, 4, 34, 78, 1, 1.273354, 2.927770e-19}, - {319, 128, 3, 4, 52, 52, 1, 1.273354, 2.821290e-19}, - {320, 104, 3, 4, 30, 30, 1, 1.273354, 2.694340e-19}, - {321, 116, 3, 4, 40, 40, 1, 1.273354, 2.495060e-19}, - {322, 120, 3, 4, 44, 76, 1, 1.273354, 2.405750e-19}, - {323, 124, 3, 4, 44, 80, 1, 1.273354, 2.381080e-19}, - {324, 108, 3, 4, 30, 30, 1, 1.273354, 2.285050e-19}, - {325, 116, 3, 4, 38, 78, 1, 1.273354, 1.717170e-19}, - {326, 104, 3, 4, 28, 76, 1, 1.273354, 1.613020e-19}, - {327, 112, 3, 4, 34, 34, 1, 1.273354, 1.463890e-19}, - {328, 128, 3, 4, 50, 50, 1, 1.273354, 1.305320e-19}, - {329, 120, 3, 4, 44, 44, 1, 1.273354, 1.202870e-19}, - {330, 124, 3, 4, 44, 44, 1, 1.273354, 1.190540e-19}, - {331, 128, 3, 4, 48, 80, 1, 1.307736, 1.106170e-19}, - {332, 120, 3, 4, 42, 78, 1, 1.307736, 9.035000e-20}, - {333, 112, 3, 4, 32, 80, 1, 1.307736, 9.008150e-20}, - {334, 116, 3, 4, 38, 38, 1, 1.307736, 8.585840e-20}, - {335, 124, 3, 4, 42, 82, 1, 1.307736, 8.539640e-20}, - {336, 104, 3, 4, 28, 28, 1, 1.307736, 8.065090e-20}, - {337, 116, 3, 4, 36, 80, 1, 1.307736, 5.599310e-20}, - {338, 128, 3, 4, 48, 48, 1, 1.307736, 5.530870e-20}, - {339, 120, 3, 4, 42, 42, 1, 1.307736, 4.517500e-20}, - {340, 112, 3, 4, 32, 32, 1, 1.307736, 4.504080e-20}, - {341, 128, 3, 4, 46, 82, 1, 1.307736, 4.334810e-20}, - {342, 124, 3, 4, 42, 42, 1, 1.307736, 4.269820e-20}, - {343, 120, 3, 4, 40, 80, 1, 1.307736, 3.174430e-20}, - {344, 124, 3, 4, 40, 84, 1, 1.307736, 2.891760e-20}, - {345, 116, 3, 4, 36, 36, 1, 1.307736, 2.799660e-20}, - {346, 112, 3, 4, 30, 82, 1, 1.307736, 2.695640e-20}, - {347, 128, 3, 4, 46, 46, 1, 1.307736, 2.167410e-20}, - {348, 116, 3, 4, 34, 82, 1, 1.307736, 1.749650e-20}, - {349, 120, 3, 4, 40, 40, 1, 1.307736, 1.587220e-20}, - {350, 128, 3, 4, 44, 84, 1, 1.307736, 1.586440e-20}, - {351, 124, 3, 4, 40, 40, 1, 1.307736, 1.445880e-20}, - {352, 112, 3, 4, 30, 30, 1, 1.307736, 1.347820e-20}, - {353, 120, 3, 4, 38, 82, 1, 1.307736, 1.054790e-20}, - {354, 124, 3, 4, 38, 86, 1, 1.307736, 9.338320e-21}, - {355, 116, 3, 4, 34, 34, 1, 1.345734, 8.748240e-21}, - {356, 128, 3, 4, 44, 44, 1, 1.345734, 7.932220e-21}, - {357, 128, 3, 4, 42, 86, 1, 1.345734, 5.474680e-21}, - {358, 116, 3, 4, 32, 84, 1, 1.345734, 5.297010e-21}, - {359, 120, 3, 4, 38, 38, 1, 1.345734, 5.273960e-21}, - {360, 124, 3, 4, 38, 38, 1, 1.345734, 4.669160e-21}, - {361, 120, 3, 4, 36, 84, 1, 1.345734, 3.349800e-21}, - {362, 124, 3, 4, 36, 88, 1, 1.345734, 2.903950e-21}, - {363, 128, 3, 4, 42, 42, 1, 1.345734, 2.737340e-21}, - {364, 116, 3, 4, 32, 32, 1, 1.345734, 2.648510e-21}, - {365, 128, 3, 4, 40, 88, 1, 1.345734, 1.798290e-21}, - {366, 120, 3, 4, 36, 36, 1, 1.345734, 1.674900e-21}, - {367, 124, 3, 4, 36, 36, 1, 1.345734, 1.451970e-21}, - {368, 120, 3, 4, 34, 86, 1, 1.345734, 1.027330e-21}, - {369, 128, 3, 4, 40, 40, 1, 1.345734, 8.991430e-22}, - {370, 124, 3, 4, 34, 90, 1, 1.345734, 8.779540e-22}, - {371, 128, 3, 4, 38, 90, 1, 1.345734, 5.674390e-22}, - {372, 120, 3, 4, 34, 34, 1, 1.345734, 5.136640e-22}, - {373, 124, 3, 4, 34, 34, 1, 1.345734, 4.389770e-22}, - {374, 120, 3, 4, 32, 88, 1, 1.345734, 3.073590e-22}, - {375, 128, 3, 4, 38, 38, 1, 1.345734, 2.837200e-22}, - {376, 128, 3, 4, 36, 92, 1, 1.345734, 1.735640e-22}, - {377, 120, 3, 4, 32, 32, 1, 1.345734, 1.536800e-22}, - {378, 128, 3, 4, 36, 36, 1, 1.345734, 8.678180e-23}, - {379, 128, 3, 4, 34, 94, 1, 1.345734, 5.192020e-23}, - {380, 128, 3, 4, 34, 34, 1, 1.345734, 2.600000e-23}, -} diff --git a/consensus/eccpow/LDPC_utils.go b/consensus/eccpow/LDPC_utils.go deleted file mode 100644 index e80d10c4..00000000 --- a/consensus/eccpow/LDPC_utils.go +++ /dev/null @@ -1,184 +0,0 @@ -package eccpow - -import ( - crand "crypto/rand" - "math" - "math/big" - "math/rand" - - "github.com/cryptoecc/ETH-ECC/core/types" -) - -//Parameters for matrix and seed -const ( - BigInfinity = 1000000.0 - Inf = 64.0 - MaxNonce = 1<<32 - 1 - - // These parameters are only used for the decoding function. - maxIter = 20 // The maximum number of iteration in the decoder - crossErr = 0.01 // A transisient error probability. This is also fixed as a small value -) - -type Parameters struct { - n int - m int - wc int - wr int - seed int -} - -// setParameters sets n, wc, wr, m, seed return parameters and difficulty level -func setParameters(header *types.Header) (Parameters, int) { - level := SearchLevel(header.Difficulty) - - parameters := Parameters{ - n: Table[level].n, - wc: Table[level].wc, - wr: Table[level].wr, - } - parameters.m = int(parameters.n * parameters.wc / parameters.wr) - parameters.seed = generateSeed(header.ParentHash) - - return parameters, level -} - -//generateRandomNonce generate 64bit random nonce with similar way of ethereum block nonce -func generateRandomNonce() uint64 { - seed, _ := crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) - source := rand.New(rand.NewSource(seed.Int64())) - - return uint64(source.Int63()) -} - -func funcF(x float64) float64 { - if x >= BigInfinity { - return 1.0 / BigInfinity - } else if x <= (1.0 / BigInfinity) { - return BigInfinity - } else { - return math.Log((math.Exp(x) + 1) / (math.Exp(x) - 1)) - } -} - -func infinityTest(x float64) float64 { - if x >= Inf { - return Inf - } else if x <= -Inf { - return -Inf - } else { - return x - } -} - -//generateSeed generate seed using previous hash vector -func generateSeed(phv [32]byte) int { - sum := 0 - for i := 0; i < len(phv); i++ { - sum += int(phv[i]) - } - return sum -} - -//generateH generate H matrix using parameters -//generateH Cannot be sure rand is same with original implementation of C++ -func generateH(parameters Parameters) [][]int { - var H [][]int - var hSeed int64 - var colOrder []int - - hSeed = int64(parameters.seed) - k := parameters.m / parameters.wc - - H = make([][]int, parameters.m) - for i := range H { - H[i] = make([]int, parameters.n) - } - - for i := 0; i < k; i++ { - for j := i * parameters.wr; j < (i+1)*parameters.wr; j++ { - H[i][j] = 1 - } - } - - for i := 1; i < parameters.wc; i++ { - colOrder = nil - for j := 0; j < parameters.n; j++ { - colOrder = append(colOrder, j) - } - - src := rand.NewSource(hSeed) - rnd := rand.New(src) - rnd.Seed(hSeed) - rnd.Shuffle(len(colOrder), func(i, j int) { - colOrder[i],colOrder[j] = colOrder[j], colOrder[i] - }) - hSeed-- - - for j := 0; j < parameters.n; j++ { - index := (colOrder[j]/parameters.wr + k*i) - H[index][j] = 1 - } - } - - return H -} - -//generateQ generate colInRow and rowInCol matrix using H matrix -func generateQ(parameters Parameters, H [][]int) ([][]int, [][]int) { - colInRow := make([][]int, parameters.wr) - for i := 0; i < parameters.wr; i++ { - colInRow[i] = make([]int, parameters.m) - } - - rowInCol := make([][]int, parameters.wc) - for i := 0; i < parameters.wc; i++ { - rowInCol[i] = make([]int, parameters.n) - } - - rowIndex := 0 - colIndex := 0 - - for i := 0; i < parameters.m; i++ { - for j := 0; j < parameters.n; j++ { - if H[i][j] == 1 { - colInRow[colIndex%parameters.wr][i] = j - colIndex++ - - rowInCol[rowIndex/parameters.n][j] = i - rowIndex++ - } - } - } - - return colInRow, rowInCol -} - -//generateHv generate hashvector -//It needs to compare with origin C++ implementation Especially when sha256 function is used -func generateHv(parameters Parameters, encryptedHeaderWithNonce []byte) []int { - hashVector := make([]int, parameters.n) - - /* - if parameters.n <= 256 { - tmpHashVector = sha256.Sum256(headerWithNonce) - } else { - /* - This section is for a case in which the size of a hash vector is larger than 256. - This section will be implemented soon. - } - transform the constructed hexadecimal array into an binary array - ex) FE01 => 11111110000 0001 - */ - - for i := 0; i < parameters.n/8; i++ { - decimal := int(encryptedHeaderWithNonce[i]) - for j := 7; j >= 0; j-- { - hashVector[j+8*(i)] = decimal % 2 - decimal /= 2 - } - } - - //outputWord := hashVector[:parameters.n] - return hashVector -} diff --git a/consensus/eccpow/algorithm.go b/consensus/eccpow/algorithm.go deleted file mode 100644 index 8f002a5a..00000000 --- a/consensus/eccpow/algorithm.go +++ /dev/null @@ -1,480 +0,0 @@ -package eccpow - -import ( - "encoding/binary" - "math/big" - "math/rand" - - //"reflect" - - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/rpc" -) - -type ECC struct { - config Config - - // Mining related fields - rand *rand.Rand // Properly seeded random source for nonces - threads int // Number of threads to mine on if mining - update chan struct{} // Notification channel to update mining parameters - hashrate metrics.Meter // Meter tracking the average hashrate - - // Remote sealer related fields - workCh chan *sealTask // Notification channel to push new work and relative result channel to remote sealer - fetchWorkCh chan *sealWork // Channel used for remote sealer to fetch mining work - submitWorkCh chan *mineResult // Channel used for remote sealer to submit their mining result - fetchRateCh chan chan uint64 // Channel used to gather submitted hash rate for local or remote sealer. - submitRateCh chan *hashrate // Channel used for remote sealer to submit their mining hashrate - - shared *ECC // Shared PoW verifier to avoid cache regeneration - fakeFail uint64 // Block number which fails PoW check even in fake mode - fakeDelay time.Duration // Time delay to sleep for before returning from verify - - lock sync.Mutex // Ensures thread safety for the in-memory caches and mining fields - closeOnce sync.Once // Ensures exit channel will not be closed twice. - exitCh chan chan error // Notification channel to exiting backend threads - -} - -type Mode uint - -const ( - ModeNormal Mode = iota - //ModeShared - ModeTest - ModeFake - ModeFullFake -) - -// Config are the configuration parameters of the ethash. -type Config struct { - PowMode Mode -} - -// sealTask wraps a seal block with relative result channel for remote sealer thread. -type sealTask struct { - block *types.Block - results chan<- *types.Block -} - -// mineResult wraps the pow solution parameters for the specified block. -type mineResult struct { - nonce types.BlockNonce - mixDigest common.Hash - hash common.Hash - - errc chan error -} - -// hashrate wraps the hash rate submitted by the remote sealer. -type hashrate struct { - id common.Hash - ping time.Time - rate uint64 - - done chan struct{} -} - -// sealWork wraps a seal work package for remote sealer. -type sealWork struct { - errc chan error - res chan [4]string -} - -// hasher is a repetitive hasher allowing the same hash data structures to be -// reused between hash runs instead of requiring new ones to be created. -//var hasher func(dest []byte, data []byte) - -var ( - two256 = new(big.Int).Exp(big.NewInt(2), big.NewInt(256), big.NewInt(0)) - - sharedECC = New(Config{ModeNormal}, nil, false) -) - -type verifyParameters struct { - n uint64 - m uint64 - wc uint64 - wr uint64 - seed uint64 - outputWord []uint64 -} - -//const cross_err = 0.01 - -//type ( -// intMatrix [][]int -// floatMatrix [][]float64 -//) - -//RunOptimizedConcurrencyLDPC use goroutine for mining block -func RunOptimizedConcurrencyLDPC(header *types.Header, hash []byte) (bool, []int, []int, uint64, []byte) { - //Need to set difficulty before running LDPC - // Number of goroutines : 500, Number of attempts : 50000 Not bad - - var LDPCNonce uint64 - var hashVector []int - var outputWord []int - var digest []byte - var flag bool - - //var wg sync.WaitGroup - //var outerLoopSignal = make(chan struct{}) - //var innerLoopSignal = make(chan struct{}) - //var goRoutineSignal = make(chan struct{}) - - parameters, _ := setParameters(header) - H := generateH(parameters) - colInRow, rowInCol := generateQ(parameters, H) - /* - outerLoop: - for { - select { - // If outerLoopSignal channel is closed, then break outerLoop - case <-outerLoopSignal: - break outerLoop - - default: - // Defined default to unblock select statement - } - - innerLoop: - //for i := 0; i < runtime.NumCPU(); i++ { - for i := 0; i < 1; i++ { - select { - // If innerLoop signal is closed, then break innerLoop and close outerLoopSignal - case <-innerLoopSignal: - close(outerLoopSignal) - break innerLoop - - default: - // Defined default to unblock select statement - } - - wg.Add(1) - go func(goRoutineSignal chan struct{}) { - defer wg.Done() - //goRoutineNonce := generateRandomNonce() - //fmt.Printf("Initial goroutine Nonce : %v\n", goRoutineNonce) - - var goRoutineHashVector []int - var goRoutineOutputWord []int - - select { - case <-goRoutineSignal: - break - - default: - attemptLoop: - for attempt := 0; attempt < 1; attempt++ { - goRoutineNonce := generateRandomNonce() - seed := make([]byte, 40) - copy(seed, hash) - binary.LittleEndian.PutUint64(seed[32:], goRoutineNonce) - seed = crypto.Keccak512(seed) - - goRoutineHashVector = generateHv(parameters, seed) - goRoutineHashVector, goRoutineOutputWord, _ = OptimizedDecoding(parameters, goRoutineHashVector, H, rowInCol, colInRow) - flag = MakeDecision(header, colInRow, goRoutineOutputWord) - - select { - case <-goRoutineSignal: - // fmt.Println("goRoutineSignal channel is already closed") - break attemptLoop - default: - if flag { - close(goRoutineSignal) - close(innerLoopSignal) - hashVector = goRoutineHashVector - outputWord = goRoutineOutputWord - LDPCNonce = goRoutineNonce - digest = seed - break attemptLoop - } - } - //goRoutineNonce++ - } - } - }(goRoutineSignal) - } - // Need to wait to prevent memory leak - wg.Wait() - } - */ - - for i := 0; i < 64; i++ { - var goRoutineHashVector []int - var goRoutineOutputWord []int - goRoutineNonce := generateRandomNonce() - seed := make([]byte, 40) - copy(seed, hash) - binary.LittleEndian.PutUint64(seed[32:], goRoutineNonce) - seed = crypto.Keccak512(seed) - - goRoutineHashVector = generateHv(parameters, seed) - goRoutineHashVector, goRoutineOutputWord, _ = OptimizedDecoding(parameters, goRoutineHashVector, H, rowInCol, colInRow) - flag = MakeDecision(header, colInRow, goRoutineOutputWord) - - if flag { - hashVector = goRoutineHashVector - outputWord = goRoutineOutputWord - LDPCNonce = goRoutineNonce - digest = seed - break - } - } - return flag, hashVector, outputWord, LDPCNonce, digest -} - -//MakeDecision check outputWord is valid or not using colInRow -func MakeDecision(header *types.Header, colInRow [][]int, outputWord []int) bool { - parameters, difficultyLevel := setParameters(header) - for i := 0; i < parameters.m; i++ { - sum := 0 - for j := 0; j < parameters.wr; j++ { - // fmt.Printf("i : %d, j : %d, m : %d, wr : %d \n", i, j, m, wr) - sum = sum + outputWord[colInRow[j][i]] - } - if sum%2 == 1 { - return false - } - } - - var numOfOnes int - for _, val := range outputWord { - numOfOnes += val - } - - if numOfOnes >= Table[difficultyLevel].decisionFrom && - numOfOnes <= Table[difficultyLevel].decisionTo && - numOfOnes%Table[difficultyLevel].decisionStep == 0 { - return true - } - - return false -} - -//func isRegular(nSize, wCol, wRow int) bool { -// res := float64(nSize*wCol) / float64(wRow) -// m := math.Round(res) -// -// if int(m)*wRow == nSize*wCol { -// return true -// } -// -// return false -//} - -//func SetDifficulty(nSize, wCol, wRow int) bool { -// if isRegular(nSize, wCol, wRow) { -// n = nSize -// wc = wCol -// wr = wRow -// m = int(n * wc / wr) -// return true -// } -// return false -//} - -//func newIntMatrix(rows, cols int) intMatrix { -// m := intMatrix(make([][]int, rows)) -// for i := range m { -// m[i] = make([]int, cols) -// } -// return m -//} -// -//func newFloatMatrix(rows, cols int) floatMatrix { -// m := floatMatrix(make([][]float64, rows)) -// for i := range m { -// m[i] = make([]float64, cols) -// } -// return m -//} - -// New creates a full sized ethash PoW scheme and starts a background thread for -// remote mining, also optionally notifying a batch of remote services of new work -// packages. -func New(config Config, notify []string, noverify bool) *ECC { - ecc := &ECC{ - config: config, - update: make(chan struct{}), - hashrate: metrics.NewMeterForced(), - workCh: make(chan *sealTask), - fetchWorkCh: make(chan *sealWork), - submitWorkCh: make(chan *mineResult), - fetchRateCh: make(chan chan uint64), - submitRateCh: make(chan *hashrate), - exitCh: make(chan chan error), - } - go ecc.remote(notify, noverify) - return ecc -} - -func NewTester(notify []string, noverify bool) *ECC { - ecc := &ECC{ - config: Config{PowMode: ModeTest}, - update: make(chan struct{}), - hashrate: metrics.NewMeterForced(), - workCh: make(chan *sealTask), - fetchWorkCh: make(chan *sealWork), - submitWorkCh: make(chan *mineResult), - fetchRateCh: make(chan chan uint64), - submitRateCh: make(chan *hashrate), - exitCh: make(chan chan error), - } - go ecc.remote(notify, noverify) - return ecc -} - -// NewFaker creates a ethash consensus engine with a fake PoW scheme that accepts -// all blocks' seal as valid, though they still have to conform to the Ethereum -// consensus rules. -func NewFaker() *ECC { - return &ECC{ - config: Config{ - PowMode: ModeFake, - }, - } -} - -// NewFakeFailer creates a ethash consensus engine with a fake PoW scheme that -// accepts all blocks as valid apart from the single one specified, though they -// still have to conform to the Ethereum consensus rules. -func NewFakeFailer(fail uint64) *ECC { - return &ECC{ - config: Config{ - PowMode: ModeFake, - }, - fakeFail: fail, - } -} - -// NewFakeDelayer creates a ethash consensus engine with a fake PoW scheme that -// accepts all blocks as valid, but delays verifications by some time, though -// they still have to conform to the Ethereum consensus rules. -func NewFakeDelayer(delay time.Duration) *ECC { - return &ECC{ - config: Config{ - PowMode: ModeFake, - }, - fakeDelay: delay, - } -} - -// NewFullFaker creates an ethash consensus engine with a full fake scheme that -// accepts all blocks as valid, without checking any consensus rules whatsoever. -func NewFullFaker() *ECC { - return &ECC{ - config: Config{ - PowMode: ModeFullFake, - }, - } -} - -// NewShared creates a full sized ethash PoW shared between all requesters running -// in the same process. -//func NewShared() *ECC { -// return &ECC{shared: sharedECC} -//} - -// Close closes the exit channel to notify all backend threads exiting. -func (ecc *ECC) Close() error { - var err error - ecc.closeOnce.Do(func() { - // Short circuit if the exit channel is not allocated. - if ecc.exitCh == nil { - return - } - errc := make(chan error) - ecc.exitCh <- errc - err = <-errc - close(ecc.exitCh) - }) - return err -} - -// Threads returns the number of mining threads currently enabled. This doesn't -// necessarily mean that mining is running! -func (ecc *ECC) Threads() int { - ecc.lock.Lock() - defer ecc.lock.Unlock() - - return ecc.threads -} - -// SetThreads updates the number of mining threads currently enabled. Calling -// this method does not start mining, only sets the thread count. If zero is -// specified, the miner will use all cores of the machine. Setting a thread -// count below zero is allowed and will cause the miner to idle, without any -// work being done. -func (ecc *ECC) SetThreads(threads int) { - ecc.lock.Lock() - defer ecc.lock.Unlock() - - // If we're running a shared PoW, set the thread count on that instead - if ecc.shared != nil { - ecc.shared.SetThreads(threads) - return - } - // Update the threads and ping any running seal to pull in any changes - ecc.threads = threads - select { - case ecc.update <- struct{}{}: - default: - } -} - -// Hashrate implements PoW, returning the measured rate of the search invocations -// per second over the last minute. -// Note the returned hashrate includes local hashrate, but also includes the total -// hashrate of all remote miner. -func (ecc *ECC) Hashrate() float64 { - // Short circuit if we are run the ecc in normal/test mode. - - var res = make(chan uint64, 1) - - select { - case ecc.fetchRateCh <- res: - case <-ecc.exitCh: - // Return local hashrate only if ecc is stopped. - return ecc.hashrate.Rate1() - } - - // Gather total submitted hash rate of remote sealers. - return ecc.hashrate.Rate1() + float64(<-res) -} - -// APIs implements consensus.Engine, returning the user facing RPC APIs. -func (ecc *ECC) APIs(chain consensus.ChainReader) []rpc.API { - // In order to ensure backward compatibility, we exposes ecc RPC APIs - // to both eth and ecc namespaces. - return []rpc.API{ - { - Namespace: "eth", - Version: "1.0", - Service: &API{ecc}, - Public: true, - }, - { - Namespace: "ecc", - Version: "1.0", - Service: &API{ecc}, - Public: true, - }, - } -} - -//// SeedHash is the seed to use for generating a verification cache and the mining -//// dataset. -func SeedHash(block *types.Block) []byte { - return block.ParentHash().Bytes() -} diff --git a/consensus/eccpow/algorithm_test.go b/consensus/eccpow/algorithm_test.go deleted file mode 100644 index 911e3fb8..00000000 --- a/consensus/eccpow/algorithm_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package eccpow - -import ( - "reflect" - "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" -) - -func TestRandomSeed(t *testing.T) { - header := new(types.Header) - header.Difficulty = ProbToDifficulty(Table[0].miningProb) - parameters, _ := setParameters(header) - - a := generateH(parameters) - b := generateH(parameters) - - if !reflect.DeepEqual(a, b) { - t.Error("Wrong matrix") - } else { - t.Log("Pass") - } -} - -func TestLDPC(t *testing.T) { - /* - prevHash := hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000000") - curHash := hexutil.MustDecode("0xca2ff06caae7c94dc968be7d76d0fbf60dd2e1989ee9bf0d5931e48564d5143b") - nonce, mixDigest := RunLDPC(prevHash, curHash) - - wantDigest := hexutil.MustDecode("0x535306ee4b42c92aecd0e71fca98572064f049c2babb2769faa3bbd87d67ec2d") - - if !bytes.Equal(mixDigest, wantDigest) { - t.Errorf("light hashimoto digest mismatch: have %x, want %x", mixDigest, wantDigest) - } - - t.Log(nonce) - */ - header := new(types.Header) - //t.Log(hexutil.Encode(header.ParentHash)) - header.Difficulty = ProbToDifficulty(Table[0].miningProb) - var hash []byte - hashVector, outputWord, LDPCNonce, digest := RunOptimizedConcurrencyLDPC(header, hash) - - t.Logf("Hash vector : %v\n", hashVector) - t.Logf("Outputword : %v\n", outputWord) - t.Logf("LDPC Nonce : %v\n", LDPCNonce) - t.Logf("Digest : %v\n", digest) -} - -func BenchmarkECCPoW(b *testing.B) { - //prevHash := hexutil.MustDecode("0xd783efa4d392943503f28438ad5830b2d5964696ffc285f338585e9fe0a37a05") - //curHash := hexutil.MustDecode("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") - - header := new(types.Header) - header.Difficulty = ProbToDifficulty(Table[0].miningProb) - var hash []byte - b.ResetTimer() - for i := 0; i < b.N; i++ { - RunOptimizedConcurrencyLDPC(header, hash) - } -} - -func TestHashRate(t *testing.T) { - var ( - hashrate = []hexutil.Uint64{100, 200, 300} - expect uint64 - ids = []common.Hash{common.HexToHash("a"), common.HexToHash("b"), common.HexToHash("c")} - ) - ecc := NewTester(nil, false) - defer ecc.Close() - - if tot := ecc.Hashrate(); tot != 0 { - t.Error("expect the result should be zero") - } - - api := &API{ecc} - for i := 0; i < len(hashrate); i++ { - if res := api.SubmitHashRate(hashrate[i], ids[i]); !res { - t.Error("remote miner submit hashrate failed") - } - expect += uint64(hashrate[i]) - } - if tot := ecc.Hashrate(); tot != float64(expect) { - t.Error("expect total hashrate should be same") - } -} diff --git a/consensus/eccpow/api.go b/consensus/eccpow/api.go deleted file mode 100644 index 2d615ae7..00000000 --- a/consensus/eccpow/api.go +++ /dev/null @@ -1,116 +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 eccpow - -import ( - "errors" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" -) - -var erreccStopped = errors.New("ecc stopped") - -// API exposes ecc related methods for the RPC interface. -type API struct { - ecc *ECC // Make sure the mode of ecc is normal. -} - -// GetWork returns a work package for external miner. -// -// The work package consists of 3 strings: -// result[0] - 32 bytes hex encoded current block header pow-hash -// result[1] - 32 bytes hex encoded seed hash used for DAG -// result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty -// result[3] - hex encoded block number -func (api *API) GetWork() ([4]string, error) { - //if api.ecc.config.PowMode != ModeNormal && api.ecc.config.PowMode != ModeTest { - // return [4]string{}, errors.New("not supported") - //} - - var ( - workCh = make(chan [4]string, 1) - errc = make(chan error, 1) - ) - - select { - case api.ecc.fetchWorkCh <- &sealWork{errc: errc, res: workCh}: - case <-api.ecc.exitCh: - return [4]string{}, erreccStopped - } - - select { - case work := <-workCh: - return work, nil - case err := <-errc: - return [4]string{}, err - } -} - -// SubmitWork can be used by external miner to submit their POW solution. -// It returns an indication if the work was accepted. -// Note either an invalid solution, a stale work a non-existent work will return false. -func (api *API) SubmitWork(nonce types.BlockNonce, hash, digest common.Hash) bool { - //if api.ecc.config.PowMode != ModeNormal && api.ecc.config.PowMode != ModeTest { - // return false - //} - - var errc = make(chan error, 1) - - select { - case api.ecc.submitWorkCh <- &mineResult{ - nonce: nonce, - mixDigest: digest, - hash: hash, - errc: errc, - }: - case <-api.ecc.exitCh: - return false - } - - err := <-errc - return err == nil -} - -// SubmitHashrate can be used for remote miners to submit their hash rate. -// This enables the node to report the combined hash rate of all miners -// which submit work through this node. -// -// It accepts the miner hash rate and an identifier which must be unique -// between nodes. -func (api *API) SubmitHashRate(rate hexutil.Uint64, id common.Hash) bool { - - var done = make(chan struct{}, 1) - - select { - case api.ecc.submitRateCh <- &hashrate{done: done, rate: uint64(rate), id: id}: - case <-api.ecc.exitCh: - return false - } - - // Block until hash rate submitted successfully. - <-done - - return true -} - -// Geccrate returns the current hashrate for local CPU miner and remote miner. -func (api *API) Geccrate() uint64 { - - return uint64(api.ecc.Hashrate()) -} diff --git a/consensus/eccpow/consensus.go b/consensus/eccpow/consensus.go deleted file mode 100644 index 99129b0c..00000000 --- a/consensus/eccpow/consensus.go +++ /dev/null @@ -1,632 +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 eccpow - -import ( - "bytes" - "errors" - "fmt" - "math/big" - "runtime" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - mapset "github.com/deckarep/golang-set" - "golang.org/x/crypto/sha3" -) - -// ecc proof-of-work protocol constants. -var ( - FrontierBlockReward = big.NewInt(5e+18) // Block reward in wei for successfully mining a block - ByzantiumBlockReward = big.NewInt(3e+18) // Block reward in wei for successfully mining a block upward from Byzantium - ConstantinopleBlockReward = big.NewInt(2e+18) // Block reward in wei for successfully mining a block upward from Constantinople - maxUncles = 2 // Maximum number of uncles allowed in a single block - allowedFutureBlockTime = 15 * time.Second // Max time from current time allowed for blocks, before they're considered future blocks - - // calcDifficultyConstantinople is the difficulty adjustment algorithm for Constantinople. - // It returns the difficulty that a new block should have when created at time given the - // parent block's time and difficulty. The calculation uses the Byzantium rules, but with - // bomb offset 5M. - // Specification EIP-1234: https://eips.ethereum.org/EIPS/eip-1234 - calcDifficultyConstantinople = makeDifficultyCalculator(big.NewInt(5000000)) - - // calcDifficultyByzantium is the difficulty adjustment algorithm. It returns - // the difficulty that a new block should have when created at time given the - // parent block's time and difficulty. The calculation uses the Byzantium rules. - // Specification EIP-649: https://eips.ethereum.org/EIPS/eip-649 - calcDifficultyByzantium = makeDifficultyCalculator(big.NewInt(3000000)) -) - -// Various error messages to mark blocks invalid. These should be private to -// prevent engine specific errors from being referenced in the remainder of the -// 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") - errUncleIsAncestor = errors.New("uncle is ancestor") - errDanglingUncle = errors.New("uncle's parent is not ancestor") - errInvalidDifficulty = errors.New("non-positive difficulty") - errInvalidMixDigest = errors.New("invalid mix digest") - errInvalidPoW = errors.New("invalid proof-of-work") -) - -// Author implements consensus.Engine, returning the header's coinbase as the -// proof-of-work verified author of the block. -func (ecc *ECC) Author(header *types.Header) (common.Address, error) { - return header.Coinbase, nil -} - -// VerifyHeader checks whether a header conforms to the consensus rules of the -// stock Ethereum ecc engine. -func (ecc *ECC) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error { - // If we're running a full engine faking, accept any input as valid - if ecc.config.PowMode == ModeFullFake { - return nil - } - // Short circuit if the header is known, or it's parent not - number := header.Number.Uint64() - if chain.GetHeader(header.Hash(), number) != nil { - return nil - } - parent := chain.GetHeader(header.ParentHash, number-1) - if parent == nil { - return consensus.ErrUnknownAncestor - } - // Sanity checks passed, do a proper verification - return ecc.verifyHeader(chain, header, parent, false, seal) -} - -// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers -// concurrently. The method returns a quit channel to abort the operations and -// a results channel to retrieve the async verifications. -func (ecc *ECC) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { - // If we're running a full engine faking, accept any input as valid - if ecc.config.PowMode == ModeFullFake || len(headers) == 0 { - abort, results := make(chan struct{}), make(chan error, len(headers)) - for i := 0; i < len(headers); i++ { - results <- nil - } - return abort, results - } - // Spawn as many workers as allowed threads - workers := runtime.GOMAXPROCS(0) - if len(headers) < workers { - workers = len(headers) - } - - // Create a task channel and spawn the verifiers - var ( - inputs = make(chan int) - done = make(chan int, workers) - errors = make([]error, len(headers)) - abort = make(chan struct{}) - ) - for i := 0; i < workers; i++ { - go func() { - for index := range inputs { - errors[index] = ecc.verifyHeaderWorker(chain, headers, seals, index) - done <- index - } - }() - } - - errorsOut := make(chan error, len(headers)) - go func() { - defer close(inputs) - var ( - in, out = 0, 0 - checked = make([]bool, len(headers)) - inputs = inputs - ) - for { - select { - case inputs <- in: - if in++; in == len(headers) { - // Reached end of headers. Stop sending to workers. - inputs = nil - } - case index := <-done: - for checked[index] = true; checked[out]; out++ { - errorsOut <- errors[out] - if out == len(headers)-1 { - return - } - } - case <-abort: - return - } - } - }() - return abort, errorsOut -} - -func (ecc *ECC) verifyHeaderWorker(chain consensus.ChainReader, headers []*types.Header, seals []bool, index int) error { - var parent *types.Header - if index == 0 { - parent = chain.GetHeader(headers[0].ParentHash, headers[0].Number.Uint64()-1) - } else if headers[index-1].Hash() == headers[index].ParentHash { - parent = headers[index-1] - } - if parent == nil { - return consensus.ErrUnknownAncestor - } - if chain.GetHeader(headers[index].Hash(), headers[index].Number.Uint64()) != nil { - return nil // known block - } - return ecc.verifyHeader(chain, headers[index], parent, false, seals[index]) -} - -// VerifyUncles verifies that the given block's uncles conform to the consensus -// rules of the stock Ethereum ecc engine. -func (ecc *ECC) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { - // If we're running a full engine faking, accept any input as valid - if ecc.config.PowMode == ModeFullFake { - return nil - } - // Verify that there are at most 2 uncles included in this block - if len(block.Uncles()) > maxUncles { - return errTooManyUncles - } - // Gather the set of past uncles and ancestors - uncles, ancestors := mapset.NewSet(), make(map[common.Hash]*types.Header) - - number, parent := block.NumberU64()-1, block.ParentHash() - for i := 0; i < 7; i++ { - ancestor := chain.GetBlock(parent, number) - if ancestor == nil { - break - } - ancestors[ancestor.Hash()] = ancestor.Header() - for _, uncle := range ancestor.Uncles() { - uncles.Add(uncle.Hash()) - } - parent, number = ancestor.ParentHash(), number-1 - } - ancestors[block.Hash()] = block.Header() - uncles.Add(block.Hash()) - - // Verify each of the uncles that it's recent, but not an ancestor - for _, uncle := range block.Uncles() { - // Make sure every uncle is rewarded only once - hash := uncle.Hash() - if uncles.Contains(hash) { - return errDuplicateUncle - } - uncles.Add(hash) - - // Make sure the uncle has a valid ancestry - if ancestors[hash] != nil { - return errUncleIsAncestor - } - if ancestors[uncle.ParentHash] == nil || uncle.ParentHash == block.ParentHash() { - return errDanglingUncle - } - if err := ecc.verifyHeader(chain, uncle, ancestors[uncle.ParentHash], true, true); err != nil { - return err - } - } - return nil -} - -// verifyHeader checks whether a header conforms to the consensus rules of the -// stock Ethereum ecc engine. -// See YP section 4.3.4. "Block Header Validity" -func (ecc *ECC) verifyHeader(chain consensus.ChainReader, header, parent *types.Header, uncle bool, seal bool) error { - // Ensure that the header's extra-data section is of a reasonable size - if uint64(len(header.Extra)) > params.MaximumExtraDataSize { - return fmt.Errorf("extra-data too long: %d > %d", len(header.Extra), params.MaximumExtraDataSize) - } - // Verify the header's timestamp - if !uncle { - if header.Time > uint64(time.Now().Add(allowedFutureBlockTime).Unix()) { - return consensus.ErrFutureBlock - } - } - - if header.Time <= parent.Time { - return errZeroBlockTime - } - // Verify the block's difficulty based in it's timestamp and parent's difficulty - expected := ecc.CalcDifficulty(chain, header.Time, parent) - - if expected.Cmp(header.Difficulty) != 0 { - return fmt.Errorf("invalid difficulty: have %v, want %v", header.Difficulty, expected) - } - // Verify that the gas limit is <= 2^63-1 - cap := uint64(0x7fffffffffffffff) - if header.GasLimit > cap { - return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, cap) - } - // Verify that the gasUsed is <= gasLimit - if header.GasUsed > header.GasLimit { - return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit) - } - - // Verify that the gas limit remains within allowed bounds - diff := int64(parent.GasLimit) - int64(header.GasLimit) - if diff < 0 { - diff *= -1 - } - limit := parent.GasLimit / params.GasLimitBoundDivisor - - if uint64(diff) >= limit || header.GasLimit < params.MinGasLimit { - return fmt.Errorf("invalid gas limit: have %d, want %d += %d", header.GasLimit, parent.GasLimit, limit) - } - // Verify that the block number is parent's +1 - if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(big.NewInt(1)) != 0 { - return consensus.ErrInvalidNumber - } - // Verify the engine specific seal securing the block - if seal { - if err := ecc.VerifySeal(chain, header); err != nil { - return err - } - } - // If all checks passed, validate any special fields for hard forks - if err := misc.VerifyDAOHeaderExtraData(chain.Config(), header); err != nil { - return err - } - if err := misc.VerifyForkHashes(chain.Config(), header, uncle); err != nil { - return err - } - return nil -} - -// CalcDifficulty is the difficulty adjustment algorithm. It returns -// the difficulty that a new block should have when created at time -// given the parent block's time and difficulty. -func (ecc *ECC) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { - return CalcDifficulty(chain.Config(), time, parent) -} - -// CalcDifficulty is the difficulty adjustment algorithm. It returns -// the difficulty that a new block should have when created at time -// given the parent block's time and difficulty. -func CalcDifficulty(config *params.ChainConfig, time uint64, parent *types.Header) *big.Int { - next := new(big.Int).Add(parent.Number, big1) - switch { - case config.IsConstantinople(next): - return calcDifficultyConstantinople(time, parent) - case config.IsByzantium(next): - return calcDifficultyByzantium(time, parent) - case config.IsHomestead(next): - return calcDifficultyHomestead(time, parent) - default: - return calcDifficultyFrontier(time, parent) - } -} - -// Some weird constants to avoid constant memory allocs for them. -var ( - expDiffPeriod = big.NewInt(100000) - big1 = big.NewInt(1) - big2 = big.NewInt(2) - big9 = big.NewInt(9) - big10 = big.NewInt(10) - bigMinus99 = big.NewInt(-99) -) - -// makeDifficultyCalculator creates a difficultyCalculator with the given bomb-delay. -// the difficulty is calculated with Byzantium rules, which differs from Homestead in -// how uncles affect the calculation -func makeDifficultyCalculator(bombDelay *big.Int) func(time uint64, parent *types.Header) *big.Int { - // Note, the calculations below looks at the parent number, which is 1 below - // the block number. Thus we remove one from the delay given - /* - bombDelayFromParent := new(big.Int).Sub(bombDelay, big1) - return func(time uint64, parent *types.Header) *big.Int { - // https://github.com/Onther-Tech/EIPs/issues/100. - // algorithm: - // diff = (parent_diff + - // (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)) - // ) + 2^(periodCount - 2) - - bigTime := new(big.Int).SetUint64(time) - bigParentTime := new(big.Int).SetUint64(parent.Time) - - // holds intermediate values to make the algo easier to read & audit - x := new(big.Int) - y := new(big.Int) - - // (2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // 9 - x.Sub(bigTime, bigParentTime) - x.Div(x, big9) - if parent.UncleHash == types.EmptyUncleHash { - x.Sub(big1, x) - } else { - x.Sub(big2, x) - } - // max((2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // 9, -99) - if x.Cmp(bigMinus99) < 0 { - x.Set(bigMinus99) - } - // parent_diff + (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)) - y.Div(parent.Difficulty, params.DifficultyBoundDivisor) - x.Mul(y, x) - x.Add(parent.Difficulty, x) - - // minimum difficulty can ever be (before exponential factor) - if x.Cmp(params.MinimumDifficulty) < 0 { - x.Set(params.MinimumDifficulty) - } - // calculate a fake block number for the ice-age delay - // Specification: https://eips.ethereum.org/EIPS/eip-1234 - fakeBlockNumber := new(big.Int) - if parent.Number.Cmp(bombDelayFromParent) >= 0 { - fakeBlockNumber = fakeBlockNumber.Sub(parent.Number, bombDelayFromParent) - } - // for the exponential factor - periodCount := fakeBlockNumber - periodCount.Div(periodCount, expDiffPeriod) - - // the exponential factor, commonly referred to as "the bomb" - // diff = diff + 2^(periodCount - 2) - if periodCount.Cmp(big1) > 0 { - y.Sub(periodCount, big2) - y.Exp(big2, y, nil) - x.Add(x, y) - } - return x - } - */ - return MakeLDPCDifficultyCalculator() -} - -// calcDifficultyHomestead is the difficulty adjustment algorithm. It returns -// the difficulty that a new block should have when created at time given the -// parent block's time and difficulty. The calculation uses the Homestead rules. -func calcDifficultyHomestead(time uint64, parent *types.Header) *big.Int { - // https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-2.md - // algorithm: - // diff = (parent_diff + - // (parent_diff / 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99)) - // ) + 2^(periodCount - 2) - - /* - bigTime := new(big.Int).SetUint64(time) - bigParentTime := new(big.Int).SetUint64(parent.Time) - - // holds intermediate values to make the algo easier to read & audit - x := new(big.Int) - y := new(big.Int) - - // 1 - (block_timestamp - parent_timestamp) // 10 - x.Sub(bigTime, bigParentTime) - x.Div(x, big10) - x.Sub(big1, x) - - // max(1 - (block_timestamp - parent_timestamp) // 10, -99) - if x.Cmp(bigMinus99) < 0 { - x.Set(bigMinus99) - } - // (parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99)) - y.Div(parent.Difficulty, params.DifficultyBoundDivisor) - x.Mul(y, x) - x.Add(parent.Difficulty, x) - - // minimum difficulty can ever be (before exponential factor) - if x.Cmp(params.MinimumDifficulty) < 0 { - x.Set(params.MinimumDifficulty) - } - // for the exponential factor - periodCount := new(big.Int).Add(parent.Number, big1) - periodCount.Div(periodCount, expDiffPeriod) - - // the exponential factor, commonly referred to as "the bomb" - // diff = diff + 2^(periodCount - 2) - if periodCount.Cmp(big1) > 0 { - y.Sub(periodCount, big2) - y.Exp(big2, y, nil) - x.Add(x, y) - } - return x - */ - difficultyCalculator := MakeLDPCDifficultyCalculator() - return difficultyCalculator(time, parent) -} - -// calcDifficultyFrontier is the difficulty adjustment algorithm. It returns the -// difficulty that a new block should have when created at time given the parent -// block's time and difficulty. The calculation uses the Frontier rules. -func calcDifficultyFrontier(time uint64, parent *types.Header) *big.Int { - /* - diff := new(big.Int) - adjust := new(big.Int).Div(parent.Difficulty, params.DifficultyBoundDivisor) - bigTime := new(big.Int) - bigParentTime := new(big.Int) - - bigTime.SetUint64(time) - bigParentTime.SetUint64(parent.Time) - - if bigTime.Sub(bigTime, bigParentTime).Cmp(params.DurationLimit) < 0 { - diff.Add(parent.Difficulty, adjust) - } else { - diff.Sub(parent.Difficulty, adjust) - } - if diff.Cmp(params.MinimumDifficulty) < 0 { - diff.Set(params.MinimumDifficulty) - } - - periodCount := new(big.Int).Add(parent.Number, big1) - periodCount.Div(periodCount, expDiffPeriod) - if periodCount.Cmp(big1) > 0 { - // diff = diff + 2^(periodCount - 2) - expDiff := periodCount.Sub(periodCount, big2) - expDiff.Exp(big2, expDiff, nil) - diff.Add(diff, expDiff) - diff = math.BigMax(diff, params.MinimumDifficulty) - } - return diff - */ - difficultyCalculator := MakeLDPCDifficultyCalculator() - return difficultyCalculator(time, parent) -} - -// VerifySeal implements consensus.Engine, checking whether the given block satisfies -// the PoW difficulty requirements. -func (ecc *ECC) VerifySeal(chain consensus.ChainReader, header *types.Header) error { - return ecc.verifySeal(chain, header, false) -} - -// verifySeal checks whether a block satisfies the PoW difficulty requirements, -// either using the usual ecc cache for it, or alternatively using a full DAG -// to make remote mining fast. -func (ecc *ECC) verifySeal(chain consensus.ChainReader, header *types.Header, fulldag bool) error { - // If we're running a fake PoW, accept any seal as valid - if ecc.config.PowMode == ModeFake || ecc.config.PowMode == ModeFullFake { - time.Sleep(ecc.fakeDelay) - if ecc.fakeFail == header.Number.Uint64() { - return errInvalidPoW - } - return nil - } - // If we're running a shared PoW, delegate verification to it - if ecc.shared != nil { - return ecc.shared.verifySeal(chain, header, fulldag) - } - // Ensure that we have a valid difficulty for the block - if header.Difficulty.Sign() <= 0 { - return errInvalidDifficulty - } - // Recompute the digest and PoW values - //number := header.Number.Uint64() - - var ( - digest []byte - nonce int - ) - //VerifyDecoding() - vParameter := &verifyParameters{} - - rlp.DecodeBytes(header.Extra, vParameter) - //VerifyDecoding(Parameters{},vParameter.outputWord, header.Nonce.Uint64(), header.ParentHash.Bytes()) - - var hash = ecc.SealHash(header).Bytes() - flag, _, _, digest := VerifyOptimizedDecoding(header, hash) - if flag == false { - return errInvalidPoW - } - - encodedDigest := common.BytesToHash(digest) - if !bytes.Equal(header.MixDigest[:], encodedDigest[:]) { - return errInvalidMixDigest - } - if nonce < 0 { - return errInvalidPoW - } - - //ToDo: replace target - //target := new(big.Int).Div(two256, header.Difficulty) - //if new(big.Int).SetBytes(result).Cmp(target) > 0 { - // return errInvalidPoW - //} - return nil -} - -// Prepare implements consensus.Engine, initializing the difficulty field of a -// header to conform to the ecc protocol. The changes are done inline. -func (ecc *ECC) Prepare(chain consensus.ChainReader, header *types.Header) error { - parent := chain.GetHeader(header.ParentHash, header.Number.Uint64()-1) - if parent == nil { - return consensus.ErrUnknownAncestor - } - header.Difficulty = ecc.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 (ecc *ECC) 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)) -} - -func (ecc *ECC) 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)) - - // Header seems complete, assemble into a block and return - return types.NewBlock(header, txs, uncles, receipts), nil -} - -// SealHash returns the hash of a block prior to it being sealed. -func (ecc *ECC) SealHash(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, - }) - hasher.Sum(hash[:0]) - return hash -} - -// Some weird constants to avoid constant memory allocs for them. -var ( - big8 = big.NewInt(8) - big32 = big.NewInt(32) -) - -// AccumulateRewards credits the coinbase of the given block with the mining -// reward. The total reward consists of the static block reward and rewards for -// included uncles. The coinbase of each uncle block is also rewarded. -func accumulateRewards(config *params.ChainConfig, state *state.StateDB, header *types.Header, uncles []*types.Header) { - // Select the correct block reward based on chain progression - blockReward := FrontierBlockReward - if config.IsByzantium(header.Number) { - blockReward = ByzantiumBlockReward - } - if config.IsConstantinople(header.Number) { - blockReward = ConstantinopleBlockReward - } - // Accumulate the rewards for the miner and any included uncles - reward := new(big.Int).Set(blockReward) - r := new(big.Int) - for _, uncle := range uncles { - r.Add(uncle.Number, big8) - r.Sub(r, header.Number) - r.Mul(r, blockReward) - r.Div(r, big8) - state.AddBalance(uncle.Coinbase, r) - - r.Div(blockReward, big32) - reward.Add(reward, r) - } - state.AddBalance(header.Coinbase, reward) -} diff --git a/consensus/eccpow/consensus_test.go b/consensus/eccpow/consensus_test.go deleted file mode 100644 index 323f8bd5..00000000 --- a/consensus/eccpow/consensus_test.go +++ /dev/null @@ -1,156 +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 eccpow - -import ( - "bytes" - "encoding/json" - "fmt" - "math/big" - "os" - "path/filepath" - "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" -) - -type diffTest struct { - ParentTimestamp uint64 - ParentDifficulty *big.Int - CurrentTimestamp uint64 - CurrentBlocknumber *big.Int - CurrentDifficulty *big.Int -} - -func (d *diffTest) UnmarshalJSON(b []byte) (err error) { - var ext struct { - ParentTimestamp string - ParentDifficulty string - CurrentTimestamp string - CurrentBlocknumber string - CurrentDifficulty string - } - if err := json.Unmarshal(b, &ext); err != nil { - return err - } - - d.ParentTimestamp = math.MustParseUint64(ext.ParentTimestamp) - d.ParentDifficulty = math.MustParseBig256(ext.ParentDifficulty) - d.CurrentTimestamp = math.MustParseUint64(ext.CurrentTimestamp) - d.CurrentBlocknumber = math.MustParseBig256(ext.CurrentBlocknumber) - d.CurrentDifficulty = math.MustParseBig256(ext.CurrentDifficulty) - - return nil -} - -func TestCalcDifficulty(t *testing.T) { - file, err := os.Open(filepath.Join("..", "..", "tests", "testdata", "BasicTests", "difficulty.json")) - if err != nil { - t.Skip(err) - } - defer file.Close() - - tests := make(map[string]diffTest) - err = json.NewDecoder(file).Decode(&tests) - if err != nil { - t.Fatal(err) - } - - config := ¶ms.ChainConfig{HomesteadBlock: big.NewInt(1150000)} - - for name, test := range tests { - number := new(big.Int).Sub(test.CurrentBlocknumber, big.NewInt(1)) - diff := CalcDifficulty(config, test.CurrentTimestamp, &types.Header{ - Number: number, - Time: test.ParentTimestamp, - Difficulty: test.ParentDifficulty, - }) - if diff.Cmp(test.CurrentDifficulty) != 0 { - t.Error(name, "failed. Expected", test.CurrentDifficulty, "and calculated", diff) - } - } -} - -func TestDecodingVerification(t *testing.T) { - for i := 0; i < 8; i++ { - ecc := ECC{} - header := new(types.Header) - header.Difficulty = ProbToDifficulty(Table[0].miningProb) - hash := ecc.SealHash(header).Bytes() - - hashVector, outputWord, LDPCNonce, digest := RunOptimizedConcurrencyLDPC(header, hash) - - headerForTest := types.CopyHeader(header) - headerForTest.MixDigest = common.BytesToHash(digest) - headerForTest.Nonce = types.EncodeNonce(LDPCNonce) - hashForTest := ecc.SealHash(headerForTest).Bytes() - - flag, hashVectorOfVerification, outputWordOfVerification, digestForValidation := VerifyOptimizedDecoding(headerForTest, hashForTest) - - encodedDigestForValidation := common.BytesToHash(digestForValidation) - - //fmt.Printf("%+v\n", header) - //fmt.Printf("Hash : %v\n", hash) - //fmt.Println() - - //fmt.Printf("%+v\n", headerForTest) - //fmt.Printf("headerForTest : %v\n", headerForTest) - //fmt.Println() - - // * means padding for compare easily - if flag && bytes.Equal(headerForTest.MixDigest[:], encodedDigestForValidation[:]) { - fmt.Printf("Hash vector ** ************ : %v\n", hashVector) - fmt.Printf("Hash vector of verification : %v\n", hashVectorOfVerification) - - fmt.Printf("Outputword ** ************ : %v\n", outputWord) - fmt.Printf("Outputword of verification : %v\n", outputWordOfVerification) - - fmt.Printf("LDPC Nonce : %v\n", LDPCNonce) - fmt.Printf("Digest : %v\n", headerForTest.MixDigest[:]) - /* - t.Logf("Hash vector : %v\n", hashVector) - t.Logf("Outputword : %v\n", outputWord) - t.Logf("LDPC Nonce : %v\n", LDPCNonce) - t.Logf("Digest : %v\n", header.MixDigest[:]) - */ - } else { - fmt.Printf("Hash vector ** ************ : %v\n", hashVector) - fmt.Printf("Hash vector of verification : %v\n", hashVectorOfVerification) - - fmt.Printf("Outputword ** ************ : %v\n", outputWord) - fmt.Printf("Outputword of verification : %v\n", outputWordOfVerification) - - fmt.Printf("flag : %v\n", flag) - fmt.Printf("Digest compare result : %v\n", bytes.Equal(headerForTest.MixDigest[:], encodedDigestForValidation[:])) - fmt.Printf("Digest *** ********** : %v\n", headerForTest.MixDigest[:]) - fmt.Printf("Digest for validation : %v\n", encodedDigestForValidation) - - t.Errorf("Test Fail") - /* - t.Errorf("flag : %v\n", flag) - t.Errorf("Digest compare result : %v", bytes.Equal(header.MixDigest[:], digestForValidation) - t.Errorf("Digest : %v\n", digest) - t.Errorf("Digest for validation : %v\n", digestForValidation) - */ - } - //t.Logf("\n") - fmt.Println() - } -} diff --git a/consensus/eccpow/sealer.go b/consensus/eccpow/sealer.go deleted file mode 100644 index 2aa020f0..00000000 --- a/consensus/eccpow/sealer.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 eccpow - -import ( - "bytes" - crand "crypto/rand" - "encoding/json" - "errors" - "fmt" - "math" - "math/big" - "math/rand" - "net/http" - "runtime" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" -) - -const ( - // staleThreshold is the maximum depth of the acceptable stale but valid ecc solution. - staleThreshold = 7 -) - -var ( - errNoMiningWork = errors.New("no mining work available yet") - errInvalidSealResult = errors.New("invalid or stale proof-of-work solution") -) - -// Seal implements consensus.Engine, attempting to find a nonce that satisfies -// the block's difficulty requirements. -func (ecc *ECC) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { - // If we're running a fake PoW, simply return a 0 nonce immediately - if ecc.config.PowMode == ModeFake || ecc.config.PowMode == ModeFullFake { - header := block.Header() - header.Nonce, header.MixDigest = types.BlockNonce{}, common.Hash{} - select { - case results <- block.WithSeal(header): - default: - log.Warn("Sealing result is not read by miner", "mode", "fake", "sealhash", ecc.SealHash(block.Header())) - } - return nil - } - // If we're running a shared PoW, delegate sealing to it - if ecc.shared != nil { - return ecc.shared.Seal(chain, block, results, stop) - } - // Create a runner and the multiple search threads it directs - abort := make(chan struct{}) - - ecc.lock.Lock() - threads := ecc.threads - if ecc.rand == nil { - seed, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) - if err != nil { - ecc.lock.Unlock() - return err - } - ecc.rand = rand.New(rand.NewSource(seed.Int64())) - } - ecc.lock.Unlock() - if threads == 0 { - threads = runtime.NumCPU() - } - if threads < 0 { - threads = 0 // Allows disabling local mining without extra logic around local/remote - } - // Push new work to remote sealer - if ecc.workCh != nil { - ecc.workCh <- &sealTask{block: block, results: results} - } - var ( - pend sync.WaitGroup - locals = make(chan *types.Block) - ) - for i := 0; i < threads; i++ { - pend.Add(1) - go func(id int, nonce uint64) { - defer pend.Done() - ecc.mine(block, id, nonce, abort, locals) - }(i, uint64(ecc.rand.Int63())) - } - - // Wait until sealing is terminated or a nonce is found - go func() { - var result *types.Block - select { - case <-stop: - // Outside abort, stop all miner threads - close(abort) - case result = <-locals: - // One of the threads found a block, abort all others - select { - case results <- result: - default: - log.Warn("Sealing result is not read by miner", "mode", "local", "sealhash", ecc.SealHash(block.Header())) - } - close(abort) - case <-ecc.update: - // Thread count was changed on user request, restart - close(abort) - if err := ecc.Seal(chain, block, results, stop); err != nil { - log.Error("Failed to restart sealing after update", "err", err) - } - } - // Wait for all miners to terminate and return the block - pend.Wait() - }() - - return nil -} - -// mine is the actual proof-of-work miner that searches for a nonce starting from -// seed that results in correct final block difficulty. -func (ecc *ECC) mine(block *types.Block, id int, seed uint64, abort chan struct{}, found chan *types.Block) { - // Extract some data from the header - var ( - header = block.Header() - hash = ecc.SealHash(header).Bytes() - //number = header.Number.Uint64() - //target = new(big.Int).Div(two256, header.Difficulty) - - ) - // Start generating random nonces until we abort or find a good one - var ( - attempts = int64(0) - nonce = seed - ) - logger := log.New("miner", id) - logger.Trace("Started ecc search for new nonces", "seed", seed) -search: - for { - select { - case <-abort: - // Mining terminated, update stats and abort - logger.Trace("ecc nonce search aborted", "attempts", nonce-seed) - ecc.hashrate.Mark(attempts) - break search - - default: - // We don't have to update hash rate on every nonce, so update after after 2^X nonces - attempts++ - if (attempts % (1 << 15)) == 0 { - ecc.hashrate.Mark(attempts) - attempts = 0 - } - // Compute the PoW value of this nonce - - flag, _, outputWord, LDPCNonce, digest := RunOptimizedConcurrencyLDPC(header, hash) - - // Correct nonce found, create a new header with it - if flag == true { - fmt.Printf("Codeword is found with nonce = %d\n", LDPCNonce) - fmt.Printf("Codeword : %d\n", outputWord) - - header = types.CopyHeader(header) - header.MixDigest = common.BytesToHash(digest) - header.Nonce = types.EncodeNonce(LDPCNonce) - - // Seal and return a block (if still needed) - select { - case found <- block.WithSeal(header): - logger.Trace("ecc nonce found and reported", "LDPCNonce", LDPCNonce) - case <-abort: - logger.Trace("ecc nonce found but discarded", "LDPCNonce", LDPCNonce) - } - break search - } - } - } -} - -// remote is a standalone goroutine to handle remote mining related stuff. -func (ecc *ECC) remote(notify []string, noverify bool) { - var ( - works = make(map[common.Hash]*types.Block) - rates = make(map[common.Hash]hashrate) - - results chan<- *types.Block - currentBlock *types.Block - currentWork [4]string - - notifyTransport = &http.Transport{} - notifyClient = &http.Client{ - Transport: notifyTransport, - Timeout: time.Second, - } - notifyReqs = make([]*http.Request, len(notify)) - ) - // notifyWork notifies all the specified mining endpoints of the availability of - // new work to be processed. - notifyWork := func() { - work := currentWork - blob, _ := json.Marshal(work) - - for i, url := range notify { - // Terminate any previously pending request and create the new work - if notifyReqs[i] != nil { - notifyTransport.CancelRequest(notifyReqs[i]) - } - notifyReqs[i], _ = http.NewRequest("POST", url, bytes.NewReader(blob)) - notifyReqs[i].Header.Set("Content-Type", "application/json") - - // Push the new work concurrently to all the remote nodes - go func(req *http.Request, url string) { - res, err := notifyClient.Do(req) - if err != nil { - log.Warn("Failed to notify remote miner", "err", err) - } else { - log.Trace("Notified remote miner", "miner", url, "hash", log.Lazy{Fn: func() common.Hash { return common.HexToHash(work[0]) }}, "target", work[2]) - res.Body.Close() - } - }(notifyReqs[i], url) - } - } - // makeWork creates a work package for external miner. - // - // The work package consists of 3 strings: - // result[0], 32 bytes hex encoded current block header pow-hash - // result[1], 32 bytes hex encoded seed hash used for DAG - // result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty - // result[3], hex encoded block number - makeWork := func(block *types.Block) { - hash := ecc.SealHash(block.Header()) - - currentWork[0] = hash.Hex() - currentWork[1] = common.BytesToHash(block.Header().ParentHash.Bytes()).Hex() - currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex() - currentWork[3] = hexutil.EncodeBig(block.Number()) - - // Trace the seal work fetched by remote sealer. - currentBlock = block - works[hash] = block - } - // submitWork verifies the submitted pow solution, returning - // whether the solution was accepted or not (not can be both a bad pow as well as - // any other error, like no pending work or stale mining result). - submitWork := func(nonce types.BlockNonce, mixDigest common.Hash, sealhash common.Hash) bool { - if currentBlock == nil { - log.Error("Pending work without block", "sealhash", sealhash) - return false - } - // Make sure the work submitted is present - block := works[sealhash] - if block == nil { - log.Warn("Work submitted but none pending", "sealhash", sealhash, "curnumber", currentBlock.NumberU64()) - return false - } - // Verify the correctness of submitted result. - header := block.Header() - header.Nonce = nonce - header.MixDigest = mixDigest - - start := time.Now() - if !noverify { - if err := ecc.verifySeal(nil, header, true); err != nil { - log.Warn("Invalid proof-of-work submitted", "sealhash", sealhash, "elapsed", time.Since(start), "err", err) - return false - } - } - // Make sure the result channel is assigned. - if results == nil { - log.Warn("ecc result channel is empty, submitted mining result is rejected") - return false - } - log.Trace("Verified correct proof-of-work", "sealhash", sealhash, "elapsed", time.Since(start)) - - // Solutions seems to be valid, return to the miner and notify acceptance. - solution := block.WithSeal(header) - - // The submitted solution is within the scope of acceptance. - if solution.NumberU64()+staleThreshold > currentBlock.NumberU64() { - select { - case results <- solution: - log.Debug("Work submitted is acceptable", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) - return true - default: - log.Warn("Sealing result is not read by miner", "mode", "remote", "sealhash", sealhash) - return false - } - } - // The submitted block is too old to accept, drop it. - log.Warn("Work submitted is too old", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) - return false - } - - ticker := time.NewTicker(5 * time.Second) - defer ticker.Stop() - - for { - select { - case work := <-ecc.workCh: - // Update current work with new received block. - // Note same work can be past twice, happens when changing CPU threads. - results = work.results - - makeWork(work.block) - - // Notify and requested URLs of the new work availability - notifyWork() - - case work := <-ecc.fetchWorkCh: - // Return current mining work to remote miner. - if currentBlock == nil { - work.errc <- errNoMiningWork - } else { - work.res <- currentWork - } - - case result := <-ecc.submitWorkCh: - // Verify submitted PoW solution based on maintained mining blocks. - if submitWork(result.nonce, result.mixDigest, result.hash) { - result.errc <- nil - } else { - result.errc <- errInvalidSealResult - } - - case result := <-ecc.submitRateCh: - // Trace remote sealer's hash rate by submitted value. - rates[result.id] = hashrate{rate: result.rate, ping: time.Now()} - close(result.done) - - case req := <-ecc.fetchRateCh: - // Gather all hash rate submitted by remote sealer. - var total uint64 - for _, rate := range rates { - // this could overflow - total += rate.rate - } - req <- total - - case <-ticker.C: - // Clear stale submitted hash rate. - for id, rate := range rates { - if time.Since(rate.ping) > 10*time.Second { - delete(rates, id) - } - } - // Clear stale pending blocks - if currentBlock != nil { - for hash, block := range works { - if block.NumberU64()+staleThreshold <= currentBlock.NumberU64() { - delete(works, hash) - } - } - } - - case errc := <-ecc.exitCh: - // Exit remote loop if ecc is closed and return relevant error. - errc <- nil - log.Trace("ecc remote sealer is exiting") - return - } - } -} diff --git a/consensus/eccpow/sealer_test.go b/consensus/eccpow/sealer_test.go deleted file mode 100644 index e7c0311c..00000000 --- a/consensus/eccpow/sealer_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package eccpow - -import ( - "encoding/json" - "io/ioutil" - "math/big" - "net" - "net/http" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" -) - -// Tests whether remote HTTP servers are correctly notified of new work. -func TestRemoteNotify(t *testing.T) { - // Start a simple webserver to capture notifications - sink := make(chan [3]string) - - server := &http.Server{ - Handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - blob, err := ioutil.ReadAll(req.Body) - if err != nil { - t.Fatalf("failed to read miner notification: %v", err) - } - var work [3]string - if err := json.Unmarshal(blob, &work); err != nil { - t.Fatalf("failed to unmarshal miner notification: %v", err) - } - sink <- work - }), - } - // Open a custom listener to extract its local address - listener, err := net.Listen("tcp", "localhost:0") - if err != nil { - t.Fatalf("failed to open notification server: %v", err) - } - defer listener.Close() - - go server.Serve(listener) - - // Wait for server to start listening - var tries int - for tries = 0; tries < 10; tries++ { - conn, _ := net.DialTimeout("tcp", listener.Addr().String(), 1*time.Second) - if conn != nil { - break - } - } - if tries == 10 { - t.Fatal("tcp listener not ready for more than 10 seconds") - } - - // Create the custom ecc engine - ecc := NewTester([]string{"http://" + listener.Addr().String()}, false) - defer ecc.Close() - - // Stream a work task and ensure the notification bubbles out - header := &types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(100)} - block := types.NewBlockWithHeader(header) - - ecc.Seal(nil, block, nil, nil) - select { - case work := <-sink: - if want := ecc.SealHash(header).Hex(); work[0] != want { - t.Errorf("work packet hash mismatch: have %s, want %s", work[0], want) - } - //if want := common.BytesToHash(SeedHash(header.Number.Uint64())).Hex(); work[1] != want { - if want := header.ParentHash.Hex(); work[1] != want { - t.Errorf("work packet seed mismatch: have %s, want %s", work[1], want) - } - //target := new(big.Int).Div(new(big.Int).Lsh(big.NewInt(1), 256), header.Difficulty) - //if want := common.BytesToHash(target.Bytes()).Hex(); work[2] != want { - // t.Errorf("work packet target mismatch: have %s, want %s", work[2], want) - //} - case <-time.After(3 * time.Second): - t.Fatalf("notification timed out") - } -} - -// Tests that pushing work packages fast to the miner doesn't cause any data race -// issues in the notifications. -func TestRemoteMultiNotify(t *testing.T) { - // Start a simple webserver to capture notifications - sink := make(chan [3]string, 64) - - server := &http.Server{ - Handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - blob, err := ioutil.ReadAll(req.Body) - if err != nil { - t.Fatalf("failed to read miner notification: %v", err) - } - var work [3]string - if err := json.Unmarshal(blob, &work); err != nil { - t.Fatalf("failed to unmarshal miner notification: %v", err) - } - sink <- work - }), - } - // Open a custom listener to extract its local address - listener, err := net.Listen("tcp", "localhost:0") - if err != nil { - t.Fatalf("failed to open notification server: %v", err) - } - defer listener.Close() - - go server.Serve(listener) - - // Create the custom ecc engine - ecc := NewTester([]string{"http://" + listener.Addr().String()}, false) - defer ecc.Close() - - // Stream a lot of work task and ensure all the notifications bubble out - for i := 0; i < cap(sink); i++ { - header := &types.Header{Number: big.NewInt(int64(i)), Difficulty: big.NewInt(100)} - block := types.NewBlockWithHeader(header) - - ecc.Seal(nil, block, nil, nil) - } - /* - for i := 0; i < cap(sink); i++ { - select { - case <-sink: - case <-time.After(3 * time.Second): - t.Fatalf("notification %d timed out", i) - } - } - */ -} - -// Tests whether stale solutions are correctly processed. -func TestStaleSubmission(t *testing.T) { - ecc := NewTester(nil, true) - defer ecc.Close() - api := &API{ecc} - - fakeNonce, fakeDigest := types.BlockNonce{0x01, 0x02, 0x03}, common.HexToHash("deadbeef") - - testcases := []struct { - headers []*types.Header - submitIndex int - submitRes bool - }{ - // Case1: submit solution for the latest mining package - { - []*types.Header{ - {ParentHash: common.BytesToHash([]byte{0xa}), Number: big.NewInt(1), Difficulty: big.NewInt(100000000)}, - }, - 0, - true, - }, - // Case2: submit solution for the previous package but have same parent. - { - []*types.Header{ - {ParentHash: common.BytesToHash([]byte{0xb}), Number: big.NewInt(2), Difficulty: big.NewInt(100000000)}, - {ParentHash: common.BytesToHash([]byte{0xb}), Number: big.NewInt(2), Difficulty: big.NewInt(100000001)}, - }, - 0, - true, - }, - // Case3: submit stale but acceptable solution - { - []*types.Header{ - {ParentHash: common.BytesToHash([]byte{0xc}), Number: big.NewInt(3), Difficulty: big.NewInt(100000000)}, - {ParentHash: common.BytesToHash([]byte{0xd}), Number: big.NewInt(9), Difficulty: big.NewInt(100000000)}, - }, - 0, - true, - }, - // Case4: submit very old solution - { - []*types.Header{ - {ParentHash: common.BytesToHash([]byte{0xe}), Number: big.NewInt(10), Difficulty: big.NewInt(100000000)}, - {ParentHash: common.BytesToHash([]byte{0xf}), Number: big.NewInt(17), Difficulty: big.NewInt(100000000)}, - }, - 0, - false, - }, - } - results := make(chan *types.Block, 16) - - for id, c := range testcases { - for _, h := range c.headers { - ecc.Seal(nil, types.NewBlockWithHeader(h), results, nil) - } - if res := api.SubmitWork(fakeNonce, ecc.SealHash(c.headers[c.submitIndex]), fakeDigest); res != c.submitRes { - t.Errorf("case %d submit result mismatch, want %t, get %t", id+1, c.submitRes, res) - } - if !c.submitRes { - continue - } - select { - case res := <-results: - if res.Header().Nonce != fakeNonce { - t.Errorf("case %d block nonce mismatch, want %s, get %s", id+1, fakeNonce, res.Header().Nonce) - } - if res.Header().MixDigest != fakeDigest { - t.Errorf("case %d block digest mismatch, want %s, get %s", id+1, fakeDigest, res.Header().MixDigest) - } - if res.Header().Difficulty.Uint64() != c.headers[c.submitIndex].Difficulty.Uint64() { - t.Errorf("case %d block difficulty mismatch, want %d, get %d", id+1, c.headers[c.submitIndex].Difficulty, res.Header().Difficulty) - } - if res.Header().Number.Uint64() != c.headers[c.submitIndex].Number.Uint64() { - t.Errorf("case %d block number mismatch, want %d, get %d", id+1, c.headers[c.submitIndex].Number.Uint64(), res.Header().Number.Uint64()) - } - if res.Header().ParentHash != c.headers[c.submitIndex].ParentHash { - t.Errorf("case %d block parent hash mismatch, want %s, get %s", id+1, c.headers[c.submitIndex].ParentHash.Hex(), res.Header().ParentHash.Hex()) - } - case <-time.NewTimer(time.Second).C: - t.Errorf("case %d fetch ecc result timeout", id+1) - } - } -} diff --git a/consensus/errors.go b/consensus/errors.go index a005c5f6..d508b658 100644 --- a/consensus/errors.go +++ b/consensus/errors.go @@ -31,7 +31,11 @@ var ( // to the current node. ErrFutureBlock = errors.New("block in the future") - // ErrInvalidNumber is returned if a block's number doesn't equal it's parent's + // ErrInvalidNumber is returned if a block's number doesn't equal its parent's // plus one. ErrInvalidNumber = errors.New("invalid block number") + + // ErrInvalidTerminalBlock is returned if a block is invalid wrt. the terminal + // total difficulty. + ErrInvalidTerminalBlock = errors.New("invalid terminal block") ) diff --git a/consensus/ethash/LDPCDecoder.go b/consensus/ethash/LDPCDecoder.go deleted file mode 100644 index da14515f..00000000 --- a/consensus/ethash/LDPCDecoder.go +++ /dev/null @@ -1,73 +0,0 @@ -package ethash - -import ( - "math" -) - -//OptimizedDecoding return hashVector, outputWord, LRrtl and It is 20% faster than previous decoding function when they use same nonce -//percentage can be changed because of random nonce -func OptimizedDecoding(parameters Parameters, hashVector []int, H, rowInCol, colInRow [][]int) ([]int, []int, [][]float64) { - outputWord := make([]int, parameters.n) - LRqtl := make([][]float64, parameters.n) - LRrtl := make([][]float64, parameters.n) - LRft := make([]float64, parameters.n) - - for i := 0; i < parameters.n; i++ { - LRqtl[i] = make([]float64, parameters.m) - LRrtl[i] = make([]float64, parameters.m) - LRft[i] = math.Log((1-crossErr)/crossErr) * float64((hashVector[i]*2 - 1)) - } - LRpt := make([]float64, parameters.n) - - for ind := 1; ind <= maxIter; ind++ { - for t := 0; t < parameters.n; t++ { - temp3 := 0.0 - - for mp := 0; mp < parameters.wc; mp++ { - temp3 = infinityTest(temp3 + LRrtl[t][rowInCol[mp][t]]) - } - for m := 0; m < parameters.wc; m++ { - temp4 := temp3 - temp4 = infinityTest(temp4 - LRrtl[t][rowInCol[m][t]]) - LRqtl[t][rowInCol[m][t]] = infinityTest(LRft[t] + temp4) - } - } - - for k := 0; k < parameters.wr; k++ { - for l := 0; l < parameters.wr; l++ { - temp3 := 0.0 - sign := 1.0 - tempSign := 0.0 - for m := 0; m < parameters.wr; m++ { - if m != l { - temp3 = temp3 + funcF(math.Abs(LRqtl[colInRow[m][k]][k])) - if LRqtl[colInRow[m][k]][k] > 0.0 { - tempSign = 1.0 - } else { - tempSign = -1.0 - } - sign = sign * tempSign - } - } - magnitude := funcF(temp3) - LRrtl[colInRow[l][k]][k] = infinityTest(sign * magnitude) - } - } - - for t := 0; t < parameters.n; t++ { - LRpt[t] = infinityTest(LRft[t]) - for k := 0; k < parameters.wc; k++ { - LRpt[t] += LRrtl[t][rowInCol[k][t]] - LRpt[t] = infinityTest(LRpt[t]) - } - - if LRpt[t] >= 0 { - outputWord[t] = 1 - } else { - outputWord[t] = 0 - } - } - } - - return hashVector, outputWord, LRrtl -} diff --git a/consensus/ethash/LDPC_utils.go b/consensus/ethash/LDPC_utils.go deleted file mode 100644 index 8e04e973..00000000 --- a/consensus/ethash/LDPC_utils.go +++ /dev/null @@ -1,181 +0,0 @@ -package ethash - -import ( - crand "crypto/rand" - "math" - "math/big" - "math/rand" -) - -//Parameters for matrix and seed -const ( - BigInfinity = 1000000.0 - Inf = 64.0 - MaxNonce = 1<<32 - 1 - - // These parameters are only used for the decoding function. - maxIter = 20 // The maximum number of iteration in the decoder - crossErr = 0.01 // A transisient error probability. This is also fixed as a small value -) - -type Parameters struct { - n int //256 - m int //34 - wc int - wr int - seed int -} - -// setParameters sets n, wc, wr, m, seed return parameters and difficulty level -func setParameters(hash []byte) Parameters { - parameters := Parameters{ - n: 256, - wc: 3, - wr: 4, - } - parameters.m = int(parameters.n * parameters.wc / parameters.wr) - - var arrayHash [32]byte - copy(arrayHash[:], hash[:32]) - parameters.seed = generateSeed(arrayHash) - - return parameters -} - -//generateRandomNonce generate 64bit random nonce with similar way of ethereum block nonce -func generateRandomNonce() uint64 { - seed, _ := crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) - source := rand.New(rand.NewSource(seed.Int64())) - - return uint64(source.Int63()) -} - -func funcF(x float64) float64 { - if x >= BigInfinity { - return 1.0 / BigInfinity - } else if x <= (1.0 / BigInfinity) { - return BigInfinity - } else { - return math.Log((math.Exp(x) + 1) / (math.Exp(x) - 1)) - } -} - -func infinityTest(x float64) float64 { - if x >= Inf { - return Inf - } else if x <= -Inf { - return -Inf - } else { - return x - } -} - -//generateSeed generate seed using previous hash vector -func generateSeed(phv [32]byte) int { - sum := 0 - for i := 0; i < len(phv); i++ { - sum += int(phv[i]) - } - return sum -} - -//generateH generate H matrix using parameters -//generateH Cannot be sure rand is same with original implementation of C++ -func generateH(parameters Parameters) [][]int { - var H [][]int - var hSeed int64 - var colOrder []int - - hSeed = int64(parameters.seed) - k := parameters.m / parameters.wc - - H = make([][]int, parameters.m) - for i := range H { - H[i] = make([]int, parameters.n) - } - - for i := 0; i < k; i++ { - for j := i * parameters.wr; j < (i+1)*parameters.wr; j++ { - H[i][j] = 1 - } - } - - for i := 1; i < parameters.wc; i++ { - colOrder = nil - for j := 0; j < parameters.n; j++ { - colOrder = append(colOrder, j) - } - - rand.Seed(hSeed) - rand.Shuffle(len(colOrder), func(i, j int) { - colOrder[i], colOrder[j] = colOrder[j], colOrder[i] - }) - hSeed-- - - for j := 0; j < parameters.n; j++ { - index := (colOrder[j]/parameters.wr + k*i) - H[index][j] = 1 - } - } - - return H -} - -//generateQ generate colInRow and rowInCol matrix using H matrix -func generateQ(parameters Parameters, H [][]int) ([][]int, [][]int) { - colInRow := make([][]int, parameters.wr) - for i := 0; i < parameters.wr; i++ { - colInRow[i] = make([]int, parameters.m) - } - - rowInCol := make([][]int, parameters.wc) - for i := 0; i < parameters.wc; i++ { - rowInCol[i] = make([]int, parameters.n) - } - - rowIndex := 0 - colIndex := 0 - - for i := 0; i < parameters.m; i++ { - for j := 0; j < parameters.n; j++ { - if H[i][j] == 1 { - colInRow[colIndex%parameters.wr][i] = j - colIndex++ - - rowInCol[rowIndex/parameters.n][j] = i - rowIndex++ - } - } - } - - return colInRow, rowInCol -} - -//generateHv generate hashvector -//It needs to compare with origin C++ implementation Especially when sha256 function is used -func generateHv(parameters Parameters, encryptedHeaderWithNonce []byte) []int { - hashVector := make([]int, parameters.n) - - /* - if parameters.n <= 256 { - tmpHashVector = sha256.Sum256(headerWithNonce) - } else { - /* - This section is for a case in which the size of a hash vector is larger than 256. - This section will be implemented soon. - } - transform the constructed hexadecimal array into an binary array - ex) FE01 => 11111110000 0001 - */ - - for i := 0; i < parameters.n/8; i++ { - decimal := int(encryptedHeaderWithNonce[i]) - for j := 7; j >= 0; j-- { - hashVector[j+8*(i)] = decimal % 2 - decimal /= 2 - } - } - - //outputWord := hashVector[:parameters.n] - return hashVector -} diff --git a/consensus/ethash/algorithm.go b/consensus/ethash/algorithm.go index 6095a277..065e60b9 100644 --- a/consensus/ethash/algorithm.go +++ b/consensus/ethash/algorithm.go @@ -27,10 +27,10 @@ import ( "time" "unsafe" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "golang.org/x/crypto/sha3" ) @@ -151,10 +151,12 @@ func generateCache(dest []uint32, epoch uint64, seed []byte) { logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) }() // Convert our destination slice to a byte buffer - header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) - header.Len *= 4 - header.Cap *= 4 - cache := *(*[]byte)(unsafe.Pointer(&header)) + var cache []byte + cacheHdr := (*reflect.SliceHeader)(unsafe.Pointer(&cache)) + dstHdr := (*reflect.SliceHeader)(unsafe.Pointer(&dest)) + cacheHdr.Data = dstHdr.Data + cacheHdr.Len = dstHdr.Len * 4 + cacheHdr.Cap = dstHdr.Cap * 4 // Calculate the number of theoretical rows (we'll store in one buffer nonetheless) size := uint64(len(cache)) @@ -172,7 +174,7 @@ func generateCache(dest []uint32, epoch uint64, seed []byte) { case <-done: return case <-time.After(3 * time.Second): - logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start))) + logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/(cacheRounds+1), "elapsed", common.PrettyDuration(time.Since(start))) } } }() @@ -283,10 +285,12 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) { swapped := !isLittleEndian() // Convert our destination slice to a byte buffer - header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) - header.Len *= 4 - header.Cap *= 4 - dataset := *(*[]byte)(unsafe.Pointer(&header)) + var dataset []byte + datasetHdr := (*reflect.SliceHeader)(unsafe.Pointer(&dataset)) + destHdr := (*reflect.SliceHeader)(unsafe.Pointer(&dest)) + datasetHdr.Data = destHdr.Data + datasetHdr.Len = destHdr.Len * 4 + datasetHdr.Cap = destHdr.Cap * 4 // Generate the dataset on many goroutines since it takes a while threads := runtime.NumCPU() @@ -295,7 +299,7 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) { var pend sync.WaitGroup pend.Add(threads) - var progress uint32 + var progress uint64 for i := 0; i < threads; i++ { go func(id int) { defer pend.Done() @@ -304,23 +308,23 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) { keccak512 := makeHasher(sha3.NewLegacyKeccak512()) // Calculate the data segment this thread should generate - batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) - first := uint32(id) * batch + batch := (size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)) + first := uint64(id) * batch limit := first + batch - if limit > uint32(size/hashBytes) { - limit = uint32(size / hashBytes) + if limit > size/hashBytes { + limit = size / hashBytes } // Calculate the dataset segment - percent := uint32(size / hashBytes / 100) + percent := size / hashBytes / 100 for index := first; index < limit; index++ { - item := generateDatasetItem(cache, index, keccak512) + item := generateDatasetItem(cache, uint32(index), keccak512) if swapped { swap(item) } copy(dataset[index*hashBytes:], item) - if status := atomic.AddUint32(&progress, 1); status%percent == 0 { - logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) + if status := atomic.AddUint64(&progress, 1); status%percent == 0 { + logger.Info("Generating DAG in progress", "percentage", (status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) } } }(i) @@ -368,25 +372,7 @@ func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) for i, val := range mix { binary.LittleEndian.PutUint32(digest[i*4:], val) } - - parameters := setParameters(hash) - H := generateH(parameters) - colInRow, rowInCol := generateQ(parameters, H) - - hashVector := generateHv(parameters, seed) - _, outputWord, _ := OptimizedDecoding(parameters, hashVector, H, rowInCol, colInRow) - - var byteOutputWord []byte - for i := range outputWord { - if outputWord[i] == 0 { - byteOutputWord = append(byteOutputWord, 0) - } else { - byteOutputWord = append(byteOutputWord, 1) - } - } - - return digest, crypto.Keccak256(append(byteOutputWord, append(seed, digest...)...)) - //return digest, crypto.Keccak256(append(seed, digest...)) + return digest, crypto.Keccak256(append(seed, digest...)) } // hashimotoLight aggregates data from the full dataset (using only a small diff --git a/consensus/ethash/algorithm_test.go b/consensus/ethash/algorithm_test.go index bd464626..88769d27 100644 --- a/consensus/ethash/algorithm_test.go +++ b/consensus/ethash/algorithm_test.go @@ -19,16 +19,15 @@ package ethash import ( "bytes" "encoding/binary" - "io/ioutil" "math/big" "os" "reflect" "sync" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" ) // prepare converts an ethash cache or dataset from a byte stream into the internal @@ -698,7 +697,9 @@ func TestHashimoto(t *testing.T) { // Tests that caches generated on disk may be done concurrently. func TestConcurrentDiskCacheGeneration(t *testing.T) { // Create a temp folder to generate the caches into - cachedir, err := ioutil.TempDir("", "") + // TODO: t.TempDir fails to remove the directory on Windows + // \AppData\Local\Temp\1\TestConcurrentDiskCacheGeneration2382060137\001\cache-R23-1dca8a85e74aa763: Access is denied. + cachedir, err := os.MkdirTemp("", "") if err != nil { t.Fatalf("Failed to create temporary cache dir: %v", err) } @@ -726,12 +727,16 @@ func TestConcurrentDiskCacheGeneration(t *testing.T) { for i := 0; i < 3; i++ { pend.Add(1) - go func(idx int) { defer pend.Done() - ethash := New(Config{cachedir, 0, 1, "", 0, 0, ModeNormal}, nil, false) + + config := Config{ + CacheDir: cachedir, + CachesOnDisk: 1, + } + ethash := New(config, nil, false) defer ethash.Close() - if err := ethash.VerifySeal(nil, block.Header()); err != nil { + if err := ethash.verifySeal(nil, block.Header(), false); err != nil { t.Errorf("proc %d: block verification failed: %v", idx, err) } }(i) @@ -787,3 +792,24 @@ func BenchmarkHashimotoFullSmall(b *testing.B) { hashimotoFull(dataset, hash, 0) } } + +func benchmarkHashimotoFullMmap(b *testing.B, name string, lock bool) { + b.Run(name, func(b *testing.B) { + tmpdir := b.TempDir() + + d := &dataset{epoch: 0} + d.generate(tmpdir, 1, lock, false) + var hash [common.HashLength]byte + b.ResetTimer() + for i := 0; i < b.N; i++ { + binary.PutVarint(hash[:], int64(i)) + hashimotoFull(d.dataset, hash[:], 0) + } + }) +} + +// Benchmarks the full verification performance for mmap +func BenchmarkHashimotoFullMmap(b *testing.B) { + benchmarkHashimotoFullMmap(b, "WithLock", true) + benchmarkHashimotoFullMmap(b, "WithoutLock", false) +} diff --git a/consensus/ethash/api.go b/consensus/ethash/api.go index dfc2b5f2..f4d3802e 100644 --- a/consensus/ethash/api.go +++ b/consensus/ethash/api.go @@ -19,16 +19,16 @@ package ethash import ( "errors" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" ) var errEthashStopped = errors.New("ethash stopped") // API exposes ethash related methods for the RPC interface. type API struct { - ethash *Ethash // Make sure the mode of ethash is normal. + ethash *Ethash } // GetWork returns a work package for external miner. @@ -39,7 +39,7 @@ type API struct { // result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty // result[3] - hex encoded block number func (api *API) GetWork() ([4]string, error) { - if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest { + if api.ethash.remote == nil { return [4]string{}, errors.New("not supported") } @@ -47,13 +47,11 @@ func (api *API) GetWork() ([4]string, error) { workCh = make(chan [4]string, 1) errc = make(chan error, 1) ) - select { - case api.ethash.fetchWorkCh <- &sealWork{errc: errc, res: workCh}: - case <-api.ethash.exitCh: + case api.ethash.remote.fetchWorkCh <- &sealWork{errc: errc, res: workCh}: + case <-api.ethash.remote.exitCh: return [4]string{}, errEthashStopped } - select { case work := <-workCh: return work, nil @@ -66,23 +64,21 @@ func (api *API) GetWork() ([4]string, error) { // It returns an indication if the work was accepted. // Note either an invalid solution, a stale work a non-existent work will return false. func (api *API) SubmitWork(nonce types.BlockNonce, hash, digest common.Hash) bool { - if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest { + if api.ethash.remote == nil { return false } var errc = make(chan error, 1) - select { - case api.ethash.submitWorkCh <- &mineResult{ + case api.ethash.remote.submitWorkCh <- &mineResult{ nonce: nonce, mixDigest: digest, hash: hash, errc: errc, }: - case <-api.ethash.exitCh: + case <-api.ethash.remote.exitCh: return false } - err := <-errc return err == nil } @@ -93,22 +89,20 @@ func (api *API) SubmitWork(nonce types.BlockNonce, hash, digest common.Hash) boo // // It accepts the miner hash rate and an identifier which must be unique // between nodes. -func (api *API) SubmitHashRate(rate hexutil.Uint64, id common.Hash) bool { - if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest { +func (api *API) SubmitHashrate(rate hexutil.Uint64, id common.Hash) bool { + if api.ethash.remote == nil { return false } var done = make(chan struct{}, 1) - select { - case api.ethash.submitRateCh <- &hashrate{done: done, rate: uint64(rate), id: id}: - case <-api.ethash.exitCh: + case api.ethash.remote.submitRateCh <- &hashrate{done: done, rate: uint64(rate), id: id}: + case <-api.ethash.remote.exitCh: return false } // Block until hash rate submitted successfully. <-done - return true } diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index e6e136be..1c38b80e 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -24,25 +24,46 @@ import ( "runtime" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" "golang.org/x/crypto/sha3" ) // Ethash proof-of-work protocol constants. var ( - FrontierBlockReward = big.NewInt(5e+18) // Block reward in wei for successfully mining a block - ByzantiumBlockReward = big.NewInt(3e+18) // Block reward in wei for successfully mining a block upward from Byzantium - ConstantinopleBlockReward = big.NewInt(2e+18) // Block reward in wei for successfully mining a block upward from Constantinople - maxUncles = 2 // Maximum number of uncles allowed in a single block - allowedFutureBlockTime = 15 * time.Second // Max time from current time allowed for blocks, before they're considered future blocks + FrontierBlockReward = big.NewInt(5e+18) // Block reward in wei for successfully mining a block + ByzantiumBlockReward = big.NewInt(3e+18) // Block reward in wei for successfully mining a block upward from Byzantium + ConstantinopleBlockReward = big.NewInt(2e+18) // Block reward in wei for successfully mining a block upward from Constantinople + maxUncles = 2 // Maximum number of uncles allowed in a single block + allowedFutureBlockTimeSeconds = int64(15) // Max seconds from current time allowed for blocks, before they're considered future blocks + + // calcDifficultyEip5133 is the difficulty adjustment algorithm as specified by EIP 5133. + // It offsets the bomb a total of 11.4M blocks. + // Specification EIP-5133: https://eips.ethereum.org/EIPS/eip-5133 + calcDifficultyEip5133 = makeDifficultyCalculator(big.NewInt(11_400_000)) + + // calcDifficultyEip4345 is the difficulty adjustment algorithm as specified by EIP 4345. + // It offsets the bomb a total of 10.7M blocks. + // Specification EIP-4345: https://eips.ethereum.org/EIPS/eip-4345 + calcDifficultyEip4345 = makeDifficultyCalculator(big.NewInt(10_700_000)) + + // calcDifficultyEip3554 is the difficulty adjustment algorithm as specified by EIP 3554. + // It offsets the bomb a total of 9.7M blocks. + // Specification EIP-3554: https://eips.ethereum.org/EIPS/eip-3554 + calcDifficultyEip3554 = makeDifficultyCalculator(big.NewInt(9700000)) + + // calcDifficultyEip2384 is the difficulty adjustment algorithm as specified by EIP 2384. + // It offsets the bomb 4M blocks from Constantinople, so in total 9M blocks. + // Specification EIP-2384: https://eips.ethereum.org/EIPS/eip-2384 + calcDifficultyEip2384 = makeDifficultyCalculator(big.NewInt(9000000)) // calcDifficultyConstantinople is the difficulty adjustment algorithm for Constantinople. // It returns the difficulty that a new block should have when created at time given the @@ -63,7 +84,7 @@ var ( // codebase, inherently breaking if the engine is swapped out. Please put common // error types into the consensus package. var ( - errZeroBlockTime = errors.New("timestamp equals parent's") + errOlderBlockTime = errors.New("timestamp older than parent") errTooManyUncles = errors.New("too many uncles") errDuplicateUncle = errors.New("duplicate uncle") errUncleIsAncestor = errors.New("uncle is ancestor") @@ -81,12 +102,12 @@ func (ethash *Ethash) Author(header *types.Header) (common.Address, error) { // VerifyHeader checks whether a header conforms to the consensus rules of the // stock Ethereum ethash engine. -func (ethash *Ethash) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error { +func (ethash *Ethash) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Header, seal bool) error { // If we're running a full engine faking, accept any input as valid if ethash.config.PowMode == ModeFullFake { return nil } - // Short circuit if the header is known, or it's parent not + // Short circuit if the header is known, or its parent not number := header.Number.Uint64() if chain.GetHeader(header.Hash(), number) != nil { return nil @@ -96,13 +117,13 @@ func (ethash *Ethash) VerifyHeader(chain consensus.ChainReader, header *types.He return consensus.ErrUnknownAncestor } // Sanity checks passed, do a proper verification - return ethash.verifyHeader(chain, header, parent, false, seal) + return ethash.verifyHeader(chain, header, parent, false, seal, time.Now().Unix()) } // VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers // concurrently. The method returns a quit channel to abort the operations and // a results channel to retrieve the async verifications. -func (ethash *Ethash) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { +func (ethash *Ethash) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { // If we're running a full engine faking, accept any input as valid if ethash.config.PowMode == ModeFullFake || len(headers) == 0 { abort, results := make(chan struct{}), make(chan error, len(headers)) @@ -120,15 +141,16 @@ func (ethash *Ethash) VerifyHeaders(chain consensus.ChainReader, headers []*type // Create a task channel and spawn the verifiers var ( - inputs = make(chan int) - done = make(chan int, workers) - errors = make([]error, len(headers)) - abort = make(chan struct{}) + inputs = make(chan int) + done = make(chan int, workers) + errors = make([]error, len(headers)) + abort = make(chan struct{}) + unixNow = time.Now().Unix() ) for i := 0; i < workers; i++ { go func() { for index := range inputs { - errors[index] = ethash.verifyHeaderWorker(chain, headers, seals, index) + errors[index] = ethash.verifyHeaderWorker(chain, headers, seals, index, unixNow) done <- index } }() @@ -164,7 +186,7 @@ func (ethash *Ethash) VerifyHeaders(chain consensus.ChainReader, headers []*type return abort, errorsOut } -func (ethash *Ethash) verifyHeaderWorker(chain consensus.ChainReader, headers []*types.Header, seals []bool, index int) error { +func (ethash *Ethash) verifyHeaderWorker(chain consensus.ChainHeaderReader, headers []*types.Header, seals []bool, index int, unixNow int64) error { var parent *types.Header if index == 0 { parent = chain.GetHeader(headers[0].ParentHash, headers[0].Number.Uint64()-1) @@ -174,10 +196,7 @@ func (ethash *Ethash) verifyHeaderWorker(chain consensus.ChainReader, headers [] if parent == nil { return consensus.ErrUnknownAncestor } - if chain.GetHeader(headers[index].Hash(), headers[index].Number.Uint64()) != nil { - return nil // known block - } - return ethash.verifyHeader(chain, headers[index], parent, false, seals[index]) + return ethash.verifyHeader(chain, headers[index], parent, false, seals[index], unixNow) } // VerifyUncles verifies that the given block's uncles conform to the consensus @@ -199,15 +218,23 @@ func (ethash *Ethash) VerifyUncles(chain consensus.ChainReader, block *types.Blo number, parent := block.NumberU64()-1, block.ParentHash() for i := 0; i < 7; i++ { - ancestor := chain.GetBlock(parent, number) - if ancestor == nil { + ancestorHeader := chain.GetHeader(parent, number) + if ancestorHeader == nil { break } - ancestors[ancestor.Hash()] = ancestor.Header() - for _, uncle := range ancestor.Uncles() { - uncles.Add(uncle.Hash()) + ancestors[parent] = ancestorHeader + // If the ancestor doesn't have any uncles, we don't have to iterate them + if ancestorHeader.UncleHash != types.EmptyUncleHash { + // Need to add those uncles to the banned list too + ancestor := chain.GetBlock(parent, number) + if ancestor == nil { + break + } + for _, uncle := range ancestor.Uncles() { + uncles.Add(uncle.Hash()) + } } - parent, number = ancestor.ParentHash(), number-1 + parent, number = ancestorHeader.ParentHash, number-1 } ancestors[block.Hash()] = block.Header() uncles.Add(block.Hash()) @@ -228,7 +255,7 @@ func (ethash *Ethash) VerifyUncles(chain consensus.ChainReader, block *types.Blo if ancestors[uncle.ParentHash] == nil || uncle.ParentHash == block.ParentHash() { return errDanglingUncle } - if err := ethash.verifyHeader(chain, uncle, ancestors[uncle.ParentHash], true, true); err != nil { + if err := ethash.verifyHeader(chain, uncle, ancestors[uncle.ParentHash], true, true, time.Now().Unix()); err != nil { return err } } @@ -238,45 +265,46 @@ func (ethash *Ethash) VerifyUncles(chain consensus.ChainReader, block *types.Blo // verifyHeader checks whether a header conforms to the consensus rules of the // stock Ethereum ethash engine. // See YP section 4.3.4. "Block Header Validity" -func (ethash *Ethash) verifyHeader(chain consensus.ChainReader, header, parent *types.Header, uncle bool, seal bool) error { +func (ethash *Ethash) verifyHeader(chain consensus.ChainHeaderReader, header, parent *types.Header, uncle bool, seal bool, unixNow int64) error { // Ensure that the header's extra-data section is of a reasonable size if uint64(len(header.Extra)) > params.MaximumExtraDataSize { return fmt.Errorf("extra-data too long: %d > %d", len(header.Extra), params.MaximumExtraDataSize) } // Verify the header's timestamp if !uncle { - if header.Time > uint64(time.Now().Add(allowedFutureBlockTime).Unix()) { + if header.Time > uint64(unixNow+allowedFutureBlockTimeSeconds) { return consensus.ErrFutureBlock } } if header.Time <= parent.Time { - return errZeroBlockTime + return errOlderBlockTime } - // Verify the block's difficulty based in it's timestamp and parent's difficulty + // Verify the block's difficulty based on its timestamp and parent's difficulty 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) } // Verify that the gas limit is <= 2^63-1 - cap := uint64(0x7fffffffffffffff) - if header.GasLimit > cap { - return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, cap) + if header.GasLimit > params.MaxGasLimit { + return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, params.MaxGasLimit) } // Verify that the gasUsed is <= gasLimit if header.GasUsed > header.GasLimit { return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit) } - - // Verify that the gas limit remains within allowed bounds - diff := int64(parent.GasLimit) - int64(header.GasLimit) - if diff < 0 { - diff *= -1 - } - limit := parent.GasLimit / params.GasLimitBoundDivisor - - if uint64(diff) >= limit || header.GasLimit < params.MinGasLimit { - return fmt.Errorf("invalid gas limit: have %d, want %d += %d", header.GasLimit, parent.GasLimit, limit) + // Verify the block's gas usage and (if applicable) verify the base fee. + if !chain.Config().IsLondon(header.Number) { + // Verify BaseFee not present before EIP-1559 fork. + if header.BaseFee != nil { + return fmt.Errorf("invalid baseFee before fork: have %d, expected 'nil'", header.BaseFee) + } + if err := misc.VerifyGaslimit(parent.GasLimit, header.GasLimit); err != nil { + return err + } + } else if err := misc.VerifyEip1559Header(chain.Config(), parent, header); err != nil { + // Verify the header's EIP-1559 attributes. + return err } // Verify that the block number is parent's +1 if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(big.NewInt(1)) != 0 { @@ -284,7 +312,7 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainReader, header, parent * } // Verify the engine specific seal securing the block if seal { - if err := ethash.VerifySeal(chain, header); err != nil { + if err := ethash.verifySeal(chain, header, false); err != nil { return err } } @@ -301,7 +329,7 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainReader, header, parent * // CalcDifficulty is the difficulty adjustment algorithm. It returns // the difficulty that a new block should have when created at time // given the parent block's time and difficulty. -func (ethash *Ethash) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { +func (ethash *Ethash) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { return CalcDifficulty(chain.Config(), time, parent) } @@ -311,6 +339,14 @@ func (ethash *Ethash) CalcDifficulty(chain consensus.ChainReader, time uint64, p func CalcDifficulty(config *params.ChainConfig, time uint64, parent *types.Header) *big.Int { next := new(big.Int).Add(parent.Number, big1) switch { + case config.IsGrayGlacier(next): + return calcDifficultyEip5133(time, parent) + case config.IsArrowGlacier(next): + return calcDifficultyEip4345(time, parent) + case config.IsLondon(next): + return calcDifficultyEip3554(time, parent) + case config.IsMuirGlacier(next): + return calcDifficultyEip2384(time, parent) case config.IsConstantinople(next): return calcDifficultyConstantinople(time, parent) case config.IsByzantium(next): @@ -340,7 +376,7 @@ func makeDifficultyCalculator(bombDelay *big.Int) func(time uint64, parent *type // the block number. Thus we remove one from the delay given bombDelayFromParent := new(big.Int).Sub(bombDelay, big1) return func(time uint64, parent *types.Header) *big.Int { - // https://github.com/Onther-Tech/EIPs/issues/100. + // https://github.com/ethereum/EIPs/issues/100. // algorithm: // diff = (parent_diff + // (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)) @@ -399,7 +435,7 @@ func makeDifficultyCalculator(bombDelay *big.Int) func(time uint64, parent *type // the difficulty that a new block should have when created at time given the // parent block's time and difficulty. The calculation uses the Homestead rules. func calcDifficultyHomestead(time uint64, parent *types.Header) *big.Int { - // https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-2.md + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md // algorithm: // diff = (parent_diff + // (parent_diff / 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99)) @@ -477,16 +513,15 @@ func calcDifficultyFrontier(time uint64, parent *types.Header) *big.Int { return diff } -// VerifySeal implements consensus.Engine, checking whether the given block satisfies -// the PoW difficulty requirements. -func (ethash *Ethash) VerifySeal(chain consensus.ChainReader, header *types.Header) error { - return ethash.verifySeal(chain, header, false) -} +// Exported for fuzzing +var FrontierDifficultyCalculator = calcDifficultyFrontier +var HomesteadDifficultyCalculator = calcDifficultyHomestead +var DynamicDifficultyCalculator = makeDifficultyCalculator // verifySeal checks whether a block satisfies the PoW difficulty requirements, // either using the usual ethash cache for it, or alternatively using a full DAG // to make remote mining fast. -func (ethash *Ethash) verifySeal(chain consensus.ChainReader, header *types.Header, fulldag bool) error { +func (ethash *Ethash) verifySeal(chain consensus.ChainHeaderReader, header *types.Header, fulldag bool) error { // If we're running a fake PoW, accept any seal as valid if ethash.config.PowMode == ModeFake || ethash.config.PowMode == ModeFullFake { time.Sleep(ethash.fakeDelay) @@ -551,7 +586,7 @@ func (ethash *Ethash) verifySeal(chain consensus.ChainReader, header *types.Head // Prepare implements consensus.Engine, initializing the difficulty field of a // header to conform to the ethash protocol. The changes are done inline. -func (ethash *Ethash) Prepare(chain consensus.ChainReader, header *types.Header) error { +func (ethash *Ethash) Prepare(chain consensus.ChainHeaderReader, header *types.Header) error { parent := chain.GetHeader(header.ParentHash, header.Number.Uint64()-1) if parent == nil { return consensus.ErrUnknownAncestor @@ -562,7 +597,7 @@ func (ethash *Ethash) Prepare(chain consensus.ChainReader, header *types.Header) // Finalize implements consensus.Engine, accumulating the block and uncle rewards, // 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) { +func (ethash *Ethash) Finalize(chain consensus.ChainHeaderReader, 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)) @@ -570,20 +605,19 @@ func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header // 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)) +func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { + // Finalize block + ethash.Finalize(chain, header, state, txs, uncles) // Header seems complete, assemble into a block and return - return types.NewBlock(header, txs, uncles, receipts), nil + return types.NewBlock(header, txs, uncles, receipts, trie.NewStackTrie(nil)), nil } // SealHash returns the hash of a block prior to it being sealed. func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { hasher := sha3.NewLegacyKeccak256() - rlp.Encode(hasher, []interface{}{ + enc := []interface{}{ header.ParentHash, header.UncleHash, header.Coinbase, @@ -597,7 +631,11 @@ func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { header.GasUsed, header.Time, header.Extra, - }) + } + if header.BaseFee != nil { + enc = append(enc, header.BaseFee) + } + rlp.Encode(hasher, enc) hasher.Sum(hash[:0]) return hash } diff --git a/consensus/ethash/consensus_test.go b/consensus/ethash/consensus_test.go index e61f16c8..db997d73 100644 --- a/consensus/ethash/consensus_test.go +++ b/consensus/ethash/consensus_test.go @@ -17,15 +17,18 @@ package ethash import ( + "encoding/binary" "encoding/json" "math/big" + "math/rand" "os" "path/filepath" "testing" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" ) type diffTest struct { @@ -84,3 +87,102 @@ func TestCalcDifficulty(t *testing.T) { } } } + +func randSlice(min, max uint32) []byte { + var b = make([]byte, 4) + rand.Read(b) + a := binary.LittleEndian.Uint32(b) + size := min + a%(max-min) + out := make([]byte, size) + rand.Read(out) + return out +} + +func TestDifficultyCalculators(t *testing.T) { + rand.Seed(2) + for i := 0; i < 5000; i++ { + // 1 to 300 seconds diff + var timeDelta = uint64(1 + rand.Uint32()%3000) + diffBig := new(big.Int).SetBytes(randSlice(2, 10)) + if diffBig.Cmp(params.MinimumDifficulty) < 0 { + diffBig.Set(params.MinimumDifficulty) + } + //rand.Read(difficulty) + header := &types.Header{ + Difficulty: diffBig, + Number: new(big.Int).SetUint64(rand.Uint64() % 50_000_000), + Time: rand.Uint64() - timeDelta, + } + if rand.Uint32()&1 == 0 { + header.UncleHash = types.EmptyUncleHash + } + bombDelay := new(big.Int).SetUint64(rand.Uint64() % 50_000_000) + for i, pair := range []struct { + bigFn func(time uint64, parent *types.Header) *big.Int + u256Fn func(time uint64, parent *types.Header) *big.Int + }{ + {FrontierDifficultyCalculator, CalcDifficultyFrontierU256}, + {HomesteadDifficultyCalculator, CalcDifficultyHomesteadU256}, + {DynamicDifficultyCalculator(bombDelay), MakeDifficultyCalculatorU256(bombDelay)}, + } { + time := header.Time + timeDelta + want := pair.bigFn(time, header) + have := pair.u256Fn(time, header) + if want.BitLen() > 256 { + continue + } + if want.Cmp(have) != 0 { + t.Fatalf("pair %d: want %x have %x\nparent.Number: %x\np.Time: %x\nc.Time: %x\nBombdelay: %v\n", i, want, have, + header.Number, header.Time, time, bombDelay) + } + } + } +} + +func BenchmarkDifficultyCalculator(b *testing.B) { + x1 := makeDifficultyCalculator(big.NewInt(1000000)) + x2 := MakeDifficultyCalculatorU256(big.NewInt(1000000)) + h := &types.Header{ + ParentHash: common.Hash{}, + UncleHash: types.EmptyUncleHash, + Difficulty: big.NewInt(0xffffff), + Number: big.NewInt(500000), + Time: 1000000, + } + b.Run("big-frontier", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + calcDifficultyFrontier(1000014, h) + } + }) + b.Run("u256-frontier", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + CalcDifficultyFrontierU256(1000014, h) + } + }) + b.Run("big-homestead", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + calcDifficultyHomestead(1000014, h) + } + }) + b.Run("u256-homestead", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + CalcDifficultyHomesteadU256(1000014, h) + } + }) + b.Run("big-generic", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + x1(1000014, h) + } + }) + b.Run("u256-generic", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + x2(1000014, h) + } + }) +} diff --git a/consensus/ethash/difficulty.go b/consensus/ethash/difficulty.go new file mode 100644 index 00000000..66a18059 --- /dev/null +++ b/consensus/ethash/difficulty.go @@ -0,0 +1,191 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/holiman/uint256" +) + +const ( + // frontierDurationLimit is for Frontier: + // The decision boundary on the blocktime duration used to determine + // whether difficulty should go up or down. + frontierDurationLimit = 13 + // minimumDifficulty The minimum that the difficulty may ever be. + minimumDifficulty = 131072 + // expDiffPeriod is the exponential difficulty period + expDiffPeriodUint = 100000 + // difficultyBoundDivisorBitShift is the bound divisor of the difficulty (2048), + // This constant is the right-shifts to use for the division. + difficultyBoundDivisor = 11 +) + +// CalcDifficultyFrontierU256 is the difficulty adjustment algorithm. It returns the +// difficulty that a new block should have when created at time given the parent +// block's time and difficulty. The calculation uses the Frontier rules. +func CalcDifficultyFrontierU256(time uint64, parent *types.Header) *big.Int { + /* + Algorithm + block_diff = pdiff + pdiff / 2048 * (1 if time - ptime < 13 else -1) + int(2^((num // 100000) - 2)) + + Where: + - pdiff = parent.difficulty + - ptime = parent.time + - time = block.timestamp + - num = block.number + */ + + pDiff, _ := uint256.FromBig(parent.Difficulty) // pDiff: pdiff + adjust := pDiff.Clone() + adjust.Rsh(adjust, difficultyBoundDivisor) // adjust: pDiff / 2048 + + if time-parent.Time < frontierDurationLimit { + pDiff.Add(pDiff, adjust) + } else { + pDiff.Sub(pDiff, adjust) + } + if pDiff.LtUint64(minimumDifficulty) { + pDiff.SetUint64(minimumDifficulty) + } + // 'pdiff' now contains: + // pdiff + pdiff / 2048 * (1 if time - ptime < 13 else -1) + + if periodCount := (parent.Number.Uint64() + 1) / expDiffPeriodUint; periodCount > 1 { + // diff = diff + 2^(periodCount - 2) + expDiff := adjust.SetOne() + expDiff.Lsh(expDiff, uint(periodCount-2)) // expdiff: 2 ^ (periodCount -2) + pDiff.Add(pDiff, expDiff) + } + return pDiff.ToBig() +} + +// CalcDifficultyHomesteadU256 is the difficulty adjustment algorithm. It returns +// the difficulty that a new block should have when created at time given the +// parent block's time and difficulty. The calculation uses the Homestead rules. +func CalcDifficultyHomesteadU256(time uint64, parent *types.Header) *big.Int { + /* + https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md + Algorithm: + block_diff = pdiff + pdiff / 2048 * max(1 - (time - ptime) / 10, -99) + 2 ^ int((num / 100000) - 2)) + + Our modification, to use unsigned ints: + block_diff = pdiff - pdiff / 2048 * max((time - ptime) / 10 - 1, 99) + 2 ^ int((num / 100000) - 2)) + + Where: + - pdiff = parent.difficulty + - ptime = parent.time + - time = block.timestamp + - num = block.number + */ + + pDiff, _ := uint256.FromBig(parent.Difficulty) // pDiff: pdiff + adjust := pDiff.Clone() + adjust.Rsh(adjust, difficultyBoundDivisor) // adjust: pDiff / 2048 + + x := (time - parent.Time) / 10 // (time - ptime) / 10) + var neg = true + if x == 0 { + x = 1 + neg = false + } else if x >= 100 { + x = 99 + } else { + x = x - 1 + } + z := new(uint256.Int).SetUint64(x) + adjust.Mul(adjust, z) // adjust: (pdiff / 2048) * max((time - ptime) / 10 - 1, 99) + if neg { + pDiff.Sub(pDiff, adjust) // pdiff - pdiff / 2048 * max((time - ptime) / 10 - 1, 99) + } else { + pDiff.Add(pDiff, adjust) // pdiff + pdiff / 2048 * max((time - ptime) / 10 - 1, 99) + } + if pDiff.LtUint64(minimumDifficulty) { + pDiff.SetUint64(minimumDifficulty) + } + // for the exponential factor, a.k.a "the bomb" + // diff = diff + 2^(periodCount - 2) + if periodCount := (1 + parent.Number.Uint64()) / expDiffPeriodUint; periodCount > 1 { + expFactor := adjust.Lsh(adjust.SetOne(), uint(periodCount-2)) + pDiff.Add(pDiff, expFactor) + } + return pDiff.ToBig() +} + +// MakeDifficultyCalculatorU256 creates a difficultyCalculator with the given bomb-delay. +// the difficulty is calculated with Byzantium rules, which differs from Homestead in +// how uncles affect the calculation +func MakeDifficultyCalculatorU256(bombDelay *big.Int) func(time uint64, parent *types.Header) *big.Int { + // Note, the calculations below looks at the parent number, which is 1 below + // the block number. Thus we remove one from the delay given + bombDelayFromParent := bombDelay.Uint64() - 1 + return func(time uint64, parent *types.Header) *big.Int { + /* + https://github.com/ethereum/EIPs/issues/100 + pDiff = parent.difficulty + BLOCK_DIFF_FACTOR = 9 + a = pDiff + (pDiff // BLOCK_DIFF_FACTOR) * adj_factor + b = min(parent.difficulty, MIN_DIFF) + child_diff = max(a,b ) + */ + x := (time - parent.Time) / 9 // (block_timestamp - parent_timestamp) // 9 + c := uint64(1) // if parent.unclehash == emptyUncleHashHash + if parent.UncleHash != types.EmptyUncleHash { + c = 2 + } + xNeg := x >= c + if xNeg { + // x is now _negative_ adjustment factor + x = x - c // - ( (t-p)/p -( 2 or 1) ) + } else { + x = c - x // (2 or 1) - (t-p)/9 + } + if x > 99 { + x = 99 // max(x, 99) + } + // parent_diff + (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)) + y := new(uint256.Int) + y.SetFromBig(parent.Difficulty) // y: p_diff + pDiff := y.Clone() // pdiff: p_diff + z := new(uint256.Int).SetUint64(x) //z : +-adj_factor (either pos or negative) + y.Rsh(y, difficultyBoundDivisor) // y: p__diff / 2048 + z.Mul(y, z) // z: (p_diff / 2048 ) * (+- adj_factor) + + if xNeg { + y.Sub(pDiff, z) // y: parent_diff + parent_diff/2048 * adjustment_factor + } else { + y.Add(pDiff, z) // y: parent_diff + parent_diff/2048 * adjustment_factor + } + // minimum difficulty can ever be (before exponential factor) + if y.LtUint64(minimumDifficulty) { + y.SetUint64(minimumDifficulty) + } + // calculate a fake block number for the ice-age delay + // Specification: https://eips.ethereum.org/EIPS/eip-1234 + var pNum = parent.Number.Uint64() + if pNum >= bombDelayFromParent { + if fakeBlockNumber := pNum - bombDelayFromParent; fakeBlockNumber >= 2*expDiffPeriodUint { + z.SetOne() + z.Lsh(z, uint(fakeBlockNumber/expDiffPeriodUint-2)) + y.Add(z, y) + } + } + return y.ToBig() + } +} diff --git a/consensus/ethash/ethash.go b/consensus/ethash/ethash.go index 86c16edf..dfe00d4b 100644 --- a/consensus/ethash/ethash.go +++ b/consensus/ethash/ethash.go @@ -33,13 +33,11 @@ import ( "time" "unsafe" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/rpc" - mmap "github.com/edsrzf/mmap-go" + "github.com/edsrzf/mmap-go" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/rpc" "github.com/hashicorp/golang-lru/simplelru" ) @@ -50,7 +48,7 @@ var ( two256 = new(big.Int).Exp(big.NewInt(2), big.NewInt(256), big.NewInt(0)) // sharedEthash is a full instance that can be shared between multiple users. - sharedEthash = New(Config{"", 3, 0, "", 1, 0, ModeNormal}, nil, false) + sharedEthash *Ethash // algorithmRevision is the data structure version used for file naming. algorithmRevision = 23 @@ -59,6 +57,15 @@ var ( dumpMagic = []uint32{0xbaddcafe, 0xfee1dead} ) +func init() { + sharedConfig := Config{ + PowMode: ModeNormal, + CachesInMem: 3, + DatasetsInMem: 1, + } + sharedEthash = New(sharedConfig, nil, false) +} + // isLittleEndian returns whether the local system is running in little or big // endian byte order. func isLittleEndian() bool { @@ -67,7 +74,7 @@ func isLittleEndian() bool { } // memoryMap tries to memory map a file of uint32s for read only access. -func memoryMap(path string) (*os.File, mmap.MMap, []uint32, error) { +func memoryMap(path string, lock bool) (*os.File, mmap.MMap, []uint32, error) { file, err := os.OpenFile(path, os.O_RDONLY, 0644) if err != nil { return nil, nil, nil, err @@ -84,6 +91,13 @@ func memoryMap(path string) (*os.File, mmap.MMap, []uint32, error) { return nil, nil, nil, ErrInvalidDumpMagic } } + if lock { + if err := mem.Lock(); err != nil { + mem.Unmap() + file.Close() + return nil, nil, nil, err + } + } return file, mem, buffer[len(dumpMagic):], err } @@ -98,18 +112,19 @@ func memoryMapFile(file *os.File, write bool) (mmap.MMap, []uint32, error) { if err != nil { return nil, nil, err } - // Yay, we managed to memory map the file, here be dragons - header := *(*reflect.SliceHeader)(unsafe.Pointer(&mem)) - header.Len /= 4 - header.Cap /= 4 - - return mem, *(*[]uint32)(unsafe.Pointer(&header)), nil + // The file is now memory-mapped. Create a []uint32 view of the file. + var view []uint32 + header := (*reflect.SliceHeader)(unsafe.Pointer(&view)) + header.Data = (*reflect.SliceHeader)(unsafe.Pointer(&mem)).Data + header.Cap = len(mem) / 4 + header.Len = header.Cap + return mem, view, nil } // memoryMapAndGenerate tries to memory map a temporary file of uint32s for write // access, fill it with the data from a generator and then move it into the final // path requested. -func memoryMapAndGenerate(path string, size uint64, generator func(buffer []uint32)) (*os.File, mmap.MMap, []uint32, error) { +func memoryMapAndGenerate(path string, size uint64, lock bool, generator func(buffer []uint32)) (*os.File, mmap.MMap, []uint32, error) { // Ensure the data folder exists if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { return nil, nil, nil, err @@ -121,13 +136,16 @@ func memoryMapAndGenerate(path string, size uint64, generator func(buffer []uint if err != nil { return nil, nil, nil, err } - if err = dump.Truncate(int64(len(dumpMagic))*4 + int64(size)); err != nil { + if err = ensureSize(dump, int64(len(dumpMagic))*4+int64(size)); err != nil { + dump.Close() + os.Remove(temp) return nil, nil, nil, err } // Memory map the file for writing and fill it with the generator mem, buffer, err := memoryMapFile(dump, true) if err != nil { dump.Close() + os.Remove(temp) return nil, nil, nil, err } copy(buffer, dumpMagic) @@ -144,7 +162,7 @@ func memoryMapAndGenerate(path string, size uint64, generator func(buffer []uint if err := os.Rename(temp, path); err != nil { return nil, nil, nil, err } - return memoryMap(path) + return memoryMap(path, lock) } // lru tracks caches or datasets by their last use time, keeping at most N of them. @@ -215,7 +233,7 @@ func newCache(epoch uint64) interface{} { } // generate ensures that the cache content is generated before use. -func (c *cache) generate(dir string, limit int, test bool) { +func (c *cache) generate(dir string, limit int, lock bool, test bool) { c.once.Do(func() { size := cacheSize(c.epoch*epochLength + 1) seed := seedHash(c.epoch*epochLength + 1) @@ -242,7 +260,7 @@ func (c *cache) generate(dir string, limit int, test bool) { // Try to load the file from disk and memory map it var err error - c.dump, c.mmap, c.cache, err = memoryMap(path) + c.dump, c.mmap, c.cache, err = memoryMap(path, lock) if err == nil { logger.Debug("Loaded old ethash cache from disk") return @@ -250,7 +268,7 @@ func (c *cache) generate(dir string, limit int, test bool) { logger.Debug("Failed to load old ethash cache", "err", err) // No previous cache available, create a new cache file to fill - c.dump, c.mmap, c.cache, err = memoryMapAndGenerate(path, size, func(buffer []uint32) { generateCache(buffer, c.epoch, seed) }) + c.dump, c.mmap, c.cache, err = memoryMapAndGenerate(path, size, lock, func(buffer []uint32) { generateCache(buffer, c.epoch, seed) }) if err != nil { logger.Error("Failed to generate mapped ethash cache", "err", err) @@ -260,8 +278,11 @@ func (c *cache) generate(dir string, limit int, test bool) { // Iterate over all previous instances and delete old ones for ep := int(c.epoch) - limit; ep >= 0; ep-- { seed := seedHash(uint64(ep)*epochLength + 1) - path := filepath.Join(dir, fmt.Sprintf("cache-R%d-%x%s", algorithmRevision, seed[:8], endian)) - os.Remove(path) + path := filepath.Join(dir, fmt.Sprintf("cache-R%d-%x%s*", algorithmRevision, seed[:8], endian)) + files, _ := filepath.Glob(path) // find also the temp files that are generated. + for _, file := range files { + os.Remove(file) + } } }) } @@ -292,7 +313,7 @@ func newDataset(epoch uint64) interface{} { } // generate ensures that the dataset content is generated before use. -func (d *dataset) generate(dir string, limit int, test bool) { +func (d *dataset) generate(dir string, limit int, lock bool, test bool) { d.once.Do(func() { // Mark the dataset generated after we're done. This is needed for remote defer atomic.StoreUint32(&d.done, 1) @@ -328,7 +349,7 @@ func (d *dataset) generate(dir string, limit int, test bool) { // Try to load the file from disk and memory map it var err error - d.dump, d.mmap, d.dataset, err = memoryMap(path) + d.dump, d.mmap, d.dataset, err = memoryMap(path, lock) if err == nil { logger.Debug("Loaded old ethash dataset from disk") return @@ -339,11 +360,11 @@ func (d *dataset) generate(dir string, limit int, test bool) { cache := make([]uint32, csize/4) generateCache(cache, d.epoch, seed) - d.dump, d.mmap, d.dataset, err = memoryMapAndGenerate(path, dsize, func(buffer []uint32) { generateDataset(buffer, d.epoch, cache) }) + d.dump, d.mmap, d.dataset, err = memoryMapAndGenerate(path, dsize, lock, func(buffer []uint32) { generateDataset(buffer, d.epoch, cache) }) if err != nil { logger.Error("Failed to generate mapped ethash dataset", "err", err) - d.dataset = make([]uint32, dsize/2) + d.dataset = make([]uint32, dsize/4) generateDataset(d.dataset, d.epoch, cache) } // Iterate over all previous instances and delete old ones @@ -374,13 +395,13 @@ func (d *dataset) finalizer() { // MakeCache generates a new ethash cache and optionally stores it to disk. func MakeCache(block uint64, dir string) { c := cache{epoch: block / epochLength} - c.generate(dir, math.MaxInt32, false) + c.generate(dir, math.MaxInt32, false, false) } // MakeDataset generates a new ethash dataset and optionally stores it to disk. func MakeDataset(block uint64, dir string) { d := dataset{epoch: block / epochLength} - d.generate(dir, math.MaxInt32, false) + d.generate(dir, math.MaxInt32, false, false) } // Mode defines the type and amount of PoW verification an ethash engine makes. @@ -396,43 +417,21 @@ const ( // Config are the configuration parameters of the ethash. type Config struct { - CacheDir string - CachesInMem int - CachesOnDisk int - DatasetDir string - DatasetsInMem int - DatasetsOnDisk int - PowMode Mode -} - -// sealTask wraps a seal block with relative result channel for remote sealer thread. -type sealTask struct { - block *types.Block - results chan<- *types.Block -} - -// mineResult wraps the pow solution parameters for the specified block. -type mineResult struct { - nonce types.BlockNonce - mixDigest common.Hash - hash common.Hash - - errc chan error -} + CacheDir string + CachesInMem int + CachesOnDisk int + CachesLockMmap bool + DatasetDir string + DatasetsInMem int + DatasetsOnDisk int + DatasetsLockMmap bool + PowMode Mode -// hashrate wraps the hash rate submitted by the remote sealer. -type hashrate struct { - id common.Hash - ping time.Time - rate uint64 + // When set, notifications sent by the remote sealer will + // be block header JSON objects instead of work package arrays. + NotifyFull bool - done chan struct{} -} - -// sealWork wraps a seal work package for remote sealer. -type sealWork struct { - errc chan error - res chan [4]string + Log log.Logger `toml:"-"` } // Ethash is a consensus engine based on proof-of-work implementing the ethash @@ -448,73 +447,52 @@ type Ethash struct { threads int // Number of threads to mine on if mining update chan struct{} // Notification channel to update mining parameters hashrate metrics.Meter // Meter tracking the average hashrate - - // Remote sealer related fields - workCh chan *sealTask // Notification channel to push new work and relative result channel to remote sealer - fetchWorkCh chan *sealWork // Channel used for remote sealer to fetch mining work - submitWorkCh chan *mineResult // Channel used for remote sealer to submit their mining result - fetchRateCh chan chan uint64 // Channel used to gather submitted hash rate for local or remote sealer. - submitRateCh chan *hashrate // Channel used for remote sealer to submit their mining hashrate + remote *remoteSealer // The fields below are hooks for testing shared *Ethash // Shared PoW verifier to avoid cache regeneration fakeFail uint64 // Block number which fails PoW check even in fake mode fakeDelay time.Duration // Time delay to sleep for before returning from verify - lock sync.Mutex // Ensures thread safety for the in-memory caches and mining fields - closeOnce sync.Once // Ensures exit channel will not be closed twice. - exitCh chan chan error // Notification channel to exiting backend threads + lock sync.Mutex // Ensures thread safety for the in-memory caches and mining fields + closeOnce sync.Once // Ensures exit channel will not be closed twice. } // New creates a full sized ethash PoW scheme and starts a background thread for // remote mining, also optionally notifying a batch of remote services of new work // packages. func New(config Config, notify []string, noverify bool) *Ethash { + if config.Log == nil { + config.Log = log.Root() + } if config.CachesInMem <= 0 { - log.Warn("One ethash cache must always be in memory", "requested", config.CachesInMem) + config.Log.Warn("One ethash cache must always be in memory", "requested", config.CachesInMem) config.CachesInMem = 1 } if config.CacheDir != "" && config.CachesOnDisk > 0 { - log.Info("Disk storage enabled for ethash caches", "dir", config.CacheDir, "count", config.CachesOnDisk) + config.Log.Info("Disk storage enabled for ethash caches", "dir", config.CacheDir, "count", config.CachesOnDisk) } if config.DatasetDir != "" && config.DatasetsOnDisk > 0 { - log.Info("Disk storage enabled for ethash DAGs", "dir", config.DatasetDir, "count", config.DatasetsOnDisk) + config.Log.Info("Disk storage enabled for ethash DAGs", "dir", config.DatasetDir, "count", config.DatasetsOnDisk) } ethash := &Ethash{ - config: config, - caches: newlru("cache", config.CachesInMem, newCache), - datasets: newlru("dataset", config.DatasetsInMem, newDataset), - update: make(chan struct{}), - hashrate: metrics.NewMeterForced(), - workCh: make(chan *sealTask), - fetchWorkCh: make(chan *sealWork), - submitWorkCh: make(chan *mineResult), - fetchRateCh: make(chan chan uint64), - submitRateCh: make(chan *hashrate), - exitCh: make(chan chan error), - } - go ethash.remote(notify, noverify) + config: config, + caches: newlru("cache", config.CachesInMem, newCache), + datasets: newlru("dataset", config.DatasetsInMem, newDataset), + update: make(chan struct{}), + hashrate: metrics.NewMeterForced(), + } + if config.PowMode == ModeShared { + ethash.shared = sharedEthash + } + ethash.remote = startRemoteSealer(ethash, notify, noverify) return ethash } // NewTester creates a small sized ethash PoW scheme useful only for testing // purposes. func NewTester(notify []string, noverify bool) *Ethash { - ethash := &Ethash{ - config: Config{PowMode: ModeTest}, - caches: newlru("cache", 1, newCache), - datasets: newlru("dataset", 1, newDataset), - update: make(chan struct{}), - hashrate: metrics.NewMeterForced(), - workCh: make(chan *sealTask), - fetchWorkCh: make(chan *sealWork), - submitWorkCh: make(chan *mineResult), - fetchRateCh: make(chan chan uint64), - submitRateCh: make(chan *hashrate), - exitCh: make(chan chan error), - } - go ethash.remote(notify, noverify) - return ethash + return New(Config{PowMode: ModeTest}, notify, noverify) } // NewFaker creates a ethash consensus engine with a fake PoW scheme that accepts @@ -524,6 +502,7 @@ func NewFaker() *Ethash { return &Ethash{ config: Config{ PowMode: ModeFake, + Log: log.Root(), }, } } @@ -535,6 +514,7 @@ func NewFakeFailer(fail uint64) *Ethash { return &Ethash{ config: Config{ PowMode: ModeFake, + Log: log.Root(), }, fakeFail: fail, } @@ -547,6 +527,7 @@ func NewFakeDelayer(delay time.Duration) *Ethash { return &Ethash{ config: Config{ PowMode: ModeFake, + Log: log.Root(), }, fakeDelay: delay, } @@ -558,6 +539,7 @@ func NewFullFaker() *Ethash { return &Ethash{ config: Config{ PowMode: ModeFullFake, + Log: log.Root(), }, } } @@ -570,18 +552,20 @@ func NewShared() *Ethash { // Close closes the exit channel to notify all backend threads exiting. func (ethash *Ethash) Close() error { - var err error + return ethash.StopRemoteSealer() +} + +// StopRemoteSealer stops the remote sealer +func (ethash *Ethash) StopRemoteSealer() error { ethash.closeOnce.Do(func() { // Short circuit if the exit channel is not allocated. - if ethash.exitCh == nil { + if ethash.remote == nil { return } - errc := make(chan error) - ethash.exitCh <- errc - err = <-errc - close(ethash.exitCh) + close(ethash.remote.requestExit) + <-ethash.remote.exitCh }) - return err + return nil } // cache tries to retrieve a verification cache for the specified block number @@ -593,12 +577,12 @@ func (ethash *Ethash) cache(block uint64) *cache { current := currentI.(*cache) // Wait for generation finish. - current.generate(ethash.config.CacheDir, ethash.config.CachesOnDisk, ethash.config.PowMode == ModeTest) + current.generate(ethash.config.CacheDir, ethash.config.CachesOnDisk, ethash.config.CachesLockMmap, ethash.config.PowMode == ModeTest) // If we need a new future cache, now's a good time to regenerate it. if futureI != nil { future := futureI.(*cache) - go future.generate(ethash.config.CacheDir, ethash.config.CachesOnDisk, ethash.config.PowMode == ModeTest) + go future.generate(ethash.config.CacheDir, ethash.config.CachesOnDisk, ethash.config.CachesLockMmap, ethash.config.PowMode == ModeTest) } return current } @@ -618,20 +602,20 @@ func (ethash *Ethash) dataset(block uint64, async bool) *dataset { // If async is specified, generate everything in a background thread if async && !current.generated() { go func() { - current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.PowMode == ModeTest) + current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest) if futureI != nil { future := futureI.(*dataset) - future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.PowMode == ModeTest) + future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest) } }() } else { // Either blocking generation was requested, or already done - current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.PowMode == ModeTest) + current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest) if futureI != nil { future := futureI.(*dataset) - go future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.PowMode == ModeTest) + go future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest) } } return current @@ -680,8 +664,8 @@ func (ethash *Ethash) Hashrate() float64 { var res = make(chan uint64, 1) select { - case ethash.fetchRateCh <- res: - case <-ethash.exitCh: + case ethash.remote.fetchRateCh <- res: + case <-ethash.remote.exitCh: // Return local hashrate only if ethash is stopped. return ethash.hashrate.Rate1() } @@ -691,21 +675,17 @@ func (ethash *Ethash) Hashrate() float64 { } // APIs implements consensus.Engine, returning the user facing RPC APIs. -func (ethash *Ethash) APIs(chain consensus.ChainReader) []rpc.API { +func (ethash *Ethash) APIs(chain consensus.ChainHeaderReader) []rpc.API { // In order to ensure backward compatibility, we exposes ethash RPC APIs // to both eth and ethash namespaces. return []rpc.API{ { Namespace: "eth", - Version: "1.0", Service: &API{ethash}, - Public: true, }, { Namespace: "ethash", - Version: "1.0", Service: &API{ethash}, - Public: true, }, } } diff --git a/consensus/ethash/ethash_test.go b/consensus/ethash/ethash_test.go index 534ab7cd..eb6bad96 100644 --- a/consensus/ethash/ethash_test.go +++ b/consensus/ethash/ethash_test.go @@ -17,7 +17,6 @@ package ethash import ( - "io/ioutil" "math/big" "math/rand" "os" @@ -25,9 +24,9 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" ) // Tests that ethash works correctly in test mode. @@ -46,23 +45,32 @@ func TestTestMode(t *testing.T) { case block := <-results: header.Nonce = types.EncodeNonce(block.Nonce()) header.MixDigest = block.MixDigest() - if err := ethash.VerifySeal(nil, header); err != nil { + if err := ethash.verifySeal(nil, header, false); err != nil { t.Fatalf("unexpected verification error: %v", err) } - case <-time.NewTimer(time.Second).C: + case <-time.NewTimer(4 * time.Second).C: t.Error("sealing result timeout") } } // This test checks that cache lru logic doesn't crash under load. -// It reproduces https://github.com/cryptoecc/ETH-ECC/issues/14943 +// It reproduces https://github.com/ethereum/go-ethereum/issues/14943 func TestCacheFileEvict(t *testing.T) { - tmpdir, err := ioutil.TempDir("", "ethash-test") + // TODO: t.TempDir fails to remove the directory on Windows + // \AppData\Local\Temp\1\TestCacheFileEvict2179435125\001\cache-R23-0000000000000000: Access is denied. + tmpdir, err := os.MkdirTemp("", "ethash-test") if err != nil { t.Fatal(err) } defer os.RemoveAll(tmpdir) - e := New(Config{CachesInMem: 3, CachesOnDisk: 10, CacheDir: tmpdir, PowMode: ModeTest}, nil, false) + + config := Config{ + CachesInMem: 3, + CachesOnDisk: 10, + CacheDir: tmpdir, + PowMode: ModeTest, + } + e := New(config, nil, false) defer e.Close() workers := 8 @@ -86,7 +94,7 @@ func verifyTest(wg *sync.WaitGroup, e *Ethash, workerIndex, epochs int) { block = 0 } header := &types.Header{Number: big.NewInt(block), Difficulty: big.NewInt(100)} - e.VerifySeal(nil, header) + e.verifySeal(nil, header, false) } } @@ -128,7 +136,7 @@ func TestRemoteSealer(t *testing.T) { } } -func TestHashRate(t *testing.T) { +func TestHashrate(t *testing.T) { var ( hashrate = []hexutil.Uint64{100, 200, 300} expect uint64 @@ -143,7 +151,7 @@ func TestHashRate(t *testing.T) { api := &API{ethash} for i := 0; i < len(hashrate); i += 1 { - if res := api.SubmitHashRate(hashrate[i], ids[i]); !res { + if res := api.SubmitHashrate(hashrate[i], ids[i]); !res { t.Error("remote miner submit hashrate failed") } expect += uint64(hashrate[i]) @@ -163,7 +171,7 @@ func TestClosedRemoteSealer(t *testing.T) { t.Error("expect to return an error to indicate ethash is stopped") } - if res := api.SubmitHashRate(hexutil.Uint64(100), common.HexToHash("a")); res { + if res := api.SubmitHashrate(hexutil.Uint64(100), common.HexToHash("a")); res { t.Error("expect to return false when submit hashrate to a stopped ethash") } } diff --git a/consensus/ethash/mmap_help_linux.go b/consensus/ethash/mmap_help_linux.go new file mode 100644 index 00000000..b40a1dd2 --- /dev/null +++ b/consensus/ethash/mmap_help_linux.go @@ -0,0 +1,35 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build linux +// +build linux + +package ethash + +import ( + "os" + + "golang.org/x/sys/unix" +) + +// ensureSize expands the file to the given size. This is to prevent runtime +// errors later on, if the underlying file expands beyond the disk capacity, +// even though it ostensibly is already expanded, but due to being sparse +// does not actually occupy the full declared size on disk. +func ensureSize(f *os.File, size int64) error { + // Docs: https://www.man7.org/linux/man-pages/man2/fallocate.2.html + return unix.Fallocate(int(f.Fd()), 0, 0, size) +} diff --git a/consensus/ethash/mmap_help_other.go b/consensus/ethash/mmap_help_other.go new file mode 100644 index 00000000..8ad514ce --- /dev/null +++ b/consensus/ethash/mmap_help_other.go @@ -0,0 +1,36 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build !linux +// +build !linux + +package ethash + +import ( + "os" +) + +// ensureSize expands the file to the given size. This is to prevent runtime +// errors later on, if the underlying file expands beyond the disk capacity, +// even though it ostensibly is already expanded, but due to being sparse +// does not actually occupy the full declared size on disk. +func ensureSize(f *os.File, size int64) error { + // On systems which do not support fallocate, we merely truncate it. + // More robust alternatives would be to + // - Use posix_fallocate, or + // - explicitly fill the file with zeroes. + return f.Truncate(size) +} diff --git a/consensus/ethash/sealer.go b/consensus/ethash/sealer.go index 6264a5d2..6fa60ef6 100644 --- a/consensus/ethash/sealer.go +++ b/consensus/ethash/sealer.go @@ -18,6 +18,7 @@ package ethash import ( "bytes" + "context" crand "crypto/rand" "encoding/json" "errors" @@ -29,11 +30,10 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "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/types" ) const ( @@ -48,7 +48,7 @@ var ( // Seal implements consensus.Engine, attempting to find a nonce that satisfies // the block's difficulty requirements. -func (ethash *Ethash) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { +func (ethash *Ethash) Seal(chain consensus.ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { // If we're running a fake PoW, simply return a 0 nonce immediately if ethash.config.PowMode == ModeFake || ethash.config.PowMode == ModeFullFake { header := block.Header() @@ -56,7 +56,7 @@ func (ethash *Ethash) Seal(chain consensus.ChainReader, block *types.Block, resu select { case results <- block.WithSeal(header): default: - log.Warn("Sealing result is not read by miner", "mode", "fake", "sealhash", ethash.SealHash(block.Header())) + ethash.config.Log.Warn("Sealing result is not read by miner", "mode", "fake", "sealhash", ethash.SealHash(block.Header())) } return nil } @@ -85,8 +85,8 @@ func (ethash *Ethash) Seal(chain consensus.ChainReader, block *types.Block, resu threads = 0 // Allows disabling local mining without extra logic around local/remote } // Push new work to remote sealer - if ethash.workCh != nil { - ethash.workCh <- &sealTask{block: block, results: results} + if ethash.remote != nil { + ethash.remote.workCh <- &sealTask{block: block, results: results} } var ( pend sync.WaitGroup @@ -111,14 +111,14 @@ func (ethash *Ethash) Seal(chain consensus.ChainReader, block *types.Block, resu select { case results <- result: default: - log.Warn("Sealing result is not read by miner", "mode", "local", "sealhash", ethash.SealHash(block.Header())) + ethash.config.Log.Warn("Sealing result is not read by miner", "mode", "local", "sealhash", ethash.SealHash(block.Header())) } close(abort) case <-ethash.update: // Thread count was changed on user request, restart close(abort) if err := ethash.Seal(chain, block, results, stop); err != nil { - log.Error("Failed to restart sealing after update", "err", err) + ethash.config.Log.Error("Failed to restart sealing after update", "err", err) } } // Wait for all miners to terminate and return the block @@ -140,10 +140,11 @@ func (ethash *Ethash) mine(block *types.Block, id int, seed uint64, abort chan s ) // Start generating random nonces until we abort or find a good one var ( - attempts = int64(0) - nonce = seed + attempts = int64(0) + nonce = seed + powBuffer = new(big.Int) ) - logger := log.New("miner", id) + logger := ethash.config.Log.New("miner", id) logger.Trace("Started ethash search for new nonces", "seed", seed) search: for { @@ -163,7 +164,7 @@ search: } // Compute the PoW value of this nonce digest, result := hashimotoFull(dataset.dataset, hash, nonce) - if new(big.Int).SetBytes(result).Cmp(target) <= 0 { + if powBuffer.SetBytes(result).Cmp(target) <= 0 { // Correct nonce found, create a new header with it header = types.CopyHeader(header) header.Nonce = types.EncodeNonce(nonce) @@ -186,160 +187,128 @@ search: runtime.KeepAlive(dataset) } -// remote is a standalone goroutine to handle remote mining related stuff. -func (ethash *Ethash) remote(notify []string, noverify bool) { - var ( - works = make(map[common.Hash]*types.Block) - rates = make(map[common.Hash]hashrate) +// This is the timeout for HTTP requests to notify external miners. +const remoteSealerTimeout = 1 * time.Second - results chan<- *types.Block - currentBlock *types.Block - currentWork [4]string +type remoteSealer struct { + works map[common.Hash]*types.Block + rates map[common.Hash]hashrate + currentBlock *types.Block + currentWork [4]string + notifyCtx context.Context + cancelNotify context.CancelFunc // cancels all notification requests + reqWG sync.WaitGroup // tracks notification request goroutines - notifyTransport = &http.Transport{} - notifyClient = &http.Client{ - Transport: notifyTransport, - Timeout: time.Second, - } - notifyReqs = make([]*http.Request, len(notify)) - ) - // notifyWork notifies all the specified mining endpoints of the availability of - // new work to be processed. - notifyWork := func() { - work := currentWork - blob, _ := json.Marshal(work) - - for i, url := range notify { - // Terminate any previously pending request and create the new work - if notifyReqs[i] != nil { - notifyTransport.CancelRequest(notifyReqs[i]) - } - notifyReqs[i], _ = http.NewRequest("POST", url, bytes.NewReader(blob)) - notifyReqs[i].Header.Set("Content-Type", "application/json") - - // Push the new work concurrently to all the remote nodes - go func(req *http.Request, url string) { - res, err := notifyClient.Do(req) - if err != nil { - log.Warn("Failed to notify remote miner", "err", err) - } else { - log.Trace("Notified remote miner", "miner", url, "hash", log.Lazy{Fn: func() common.Hash { return common.HexToHash(work[0]) }}, "target", work[2]) - res.Body.Close() - } - }(notifyReqs[i], url) - } - } - // makeWork creates a work package for external miner. - // - // The work package consists of 3 strings: - // result[0], 32 bytes hex encoded current block header pow-hash - // result[1], 32 bytes hex encoded seed hash used for DAG - // result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty - // result[3], hex encoded block number - makeWork := func(block *types.Block) { - hash := ethash.SealHash(block.Header()) - - currentWork[0] = hash.Hex() - currentWork[1] = common.BytesToHash(SeedHash(block.NumberU64())).Hex() - currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex() - currentWork[3] = hexutil.EncodeBig(block.Number()) - - // Trace the seal work fetched by remote sealer. - currentBlock = block - works[hash] = block - } - // submitWork verifies the submitted pow solution, returning - // whether the solution was accepted or not (not can be both a bad pow as well as - // any other error, like no pending work or stale mining result). - submitWork := func(nonce types.BlockNonce, mixDigest common.Hash, sealhash common.Hash) bool { - if currentBlock == nil { - log.Error("Pending work without block", "sealhash", sealhash) - return false - } - // Make sure the work submitted is present - block := works[sealhash] - if block == nil { - log.Warn("Work submitted but none pending", "sealhash", sealhash, "curnumber", currentBlock.NumberU64()) - return false - } - // Verify the correctness of submitted result. - header := block.Header() - header.Nonce = nonce - header.MixDigest = mixDigest - - start := time.Now() - if !noverify { - if err := ethash.verifySeal(nil, header, true); err != nil { - log.Warn("Invalid proof-of-work submitted", "sealhash", sealhash, "elapsed", common.PrettyDuration(time.Since(start)), "err", err) - return false - } - } - // Make sure the result channel is assigned. - if results == nil { - log.Warn("Ethash result channel is empty, submitted mining result is rejected") - return false - } - log.Trace("Verified correct proof-of-work", "sealhash", sealhash, "elapsed", common.PrettyDuration(time.Since(start))) + ethash *Ethash + noverify bool + notifyURLs []string + results chan<- *types.Block + workCh chan *sealTask // Notification channel to push new work and relative result channel to remote sealer + fetchWorkCh chan *sealWork // Channel used for remote sealer to fetch mining work + submitWorkCh chan *mineResult // Channel used for remote sealer to submit their mining result + fetchRateCh chan chan uint64 // Channel used to gather submitted hash rate for local or remote sealer. + submitRateCh chan *hashrate // Channel used for remote sealer to submit their mining hashrate + requestExit chan struct{} + exitCh chan struct{} +} - // Solutions seems to be valid, return to the miner and notify acceptance. - solution := block.WithSeal(header) +// sealTask wraps a seal block with relative result channel for remote sealer thread. +type sealTask struct { + block *types.Block + results chan<- *types.Block +} - // The submitted solution is within the scope of acceptance. - if solution.NumberU64()+staleThreshold > currentBlock.NumberU64() { - select { - case results <- solution: - log.Debug("Work submitted is acceptable", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) - return true - default: - log.Warn("Sealing result is not read by miner", "mode", "remote", "sealhash", sealhash) - return false - } - } - // The submitted block is too old to accept, drop it. - log.Warn("Work submitted is too old", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) - return false +// mineResult wraps the pow solution parameters for the specified block. +type mineResult struct { + nonce types.BlockNonce + mixDigest common.Hash + hash common.Hash + + errc chan error +} + +// hashrate wraps the hash rate submitted by the remote sealer. +type hashrate struct { + id common.Hash + ping time.Time + rate uint64 + + done chan struct{} +} + +// sealWork wraps a seal work package for remote sealer. +type sealWork struct { + errc chan error + res chan [4]string +} + +func startRemoteSealer(ethash *Ethash, urls []string, noverify bool) *remoteSealer { + ctx, cancel := context.WithCancel(context.Background()) + s := &remoteSealer{ + ethash: ethash, + noverify: noverify, + notifyURLs: urls, + notifyCtx: ctx, + cancelNotify: cancel, + works: make(map[common.Hash]*types.Block), + rates: make(map[common.Hash]hashrate), + workCh: make(chan *sealTask), + fetchWorkCh: make(chan *sealWork), + submitWorkCh: make(chan *mineResult), + fetchRateCh: make(chan chan uint64), + submitRateCh: make(chan *hashrate), + requestExit: make(chan struct{}), + exitCh: make(chan struct{}), } + go s.loop() + return s +} + +func (s *remoteSealer) loop() { + defer func() { + s.ethash.config.Log.Trace("Ethash remote sealer is exiting") + s.cancelNotify() + s.reqWG.Wait() + close(s.exitCh) + }() ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() for { select { - case work := <-ethash.workCh: + case work := <-s.workCh: // Update current work with new received block. // Note same work can be past twice, happens when changing CPU threads. - results = work.results - - makeWork(work.block) + s.results = work.results + s.makeWork(work.block) + s.notifyWork() - // Notify and requested URLs of the new work availability - notifyWork() - - case work := <-ethash.fetchWorkCh: + case work := <-s.fetchWorkCh: // Return current mining work to remote miner. - if currentBlock == nil { + if s.currentBlock == nil { work.errc <- errNoMiningWork } else { - work.res <- currentWork + work.res <- s.currentWork } - case result := <-ethash.submitWorkCh: + case result := <-s.submitWorkCh: // Verify submitted PoW solution based on maintained mining blocks. - if submitWork(result.nonce, result.mixDigest, result.hash) { + if s.submitWork(result.nonce, result.mixDigest, result.hash) { result.errc <- nil } else { result.errc <- errInvalidSealResult } - case result := <-ethash.submitRateCh: + case result := <-s.submitRateCh: // Trace remote sealer's hash rate by submitted value. - rates[result.id] = hashrate{rate: result.rate, ping: time.Now()} + s.rates[result.id] = hashrate{rate: result.rate, ping: time.Now()} close(result.done) - case req := <-ethash.fetchRateCh: + case req := <-s.fetchRateCh: // Gather all hash rate submitted by remote sealer. var total uint64 - for _, rate := range rates { + for _, rate := range s.rates { // this could overflow total += rate.rate } @@ -347,25 +316,135 @@ func (ethash *Ethash) remote(notify []string, noverify bool) { case <-ticker.C: // Clear stale submitted hash rate. - for id, rate := range rates { + for id, rate := range s.rates { if time.Since(rate.ping) > 10*time.Second { - delete(rates, id) + delete(s.rates, id) } } // Clear stale pending blocks - if currentBlock != nil { - for hash, block := range works { - if block.NumberU64()+staleThreshold <= currentBlock.NumberU64() { - delete(works, hash) + if s.currentBlock != nil { + for hash, block := range s.works { + if block.NumberU64()+staleThreshold <= s.currentBlock.NumberU64() { + delete(s.works, hash) } } } - case errc := <-ethash.exitCh: - // Exit remote loop if ethash is closed and return relevant error. - errc <- nil - log.Trace("Ethash remote sealer is exiting") + case <-s.requestExit: return } } } + +// makeWork creates a work package for external miner. +// +// The work package consists of 3 strings: +// result[0], 32 bytes hex encoded current block header pow-hash +// result[1], 32 bytes hex encoded seed hash used for DAG +// result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty +// result[3], hex encoded block number +func (s *remoteSealer) makeWork(block *types.Block) { + hash := s.ethash.SealHash(block.Header()) + s.currentWork[0] = hash.Hex() + s.currentWork[1] = common.BytesToHash(SeedHash(block.NumberU64())).Hex() + s.currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex() + s.currentWork[3] = hexutil.EncodeBig(block.Number()) + + // Trace the seal work fetched by remote sealer. + s.currentBlock = block + s.works[hash] = block +} + +// notifyWork notifies all the specified mining endpoints of the availability of +// new work to be processed. +func (s *remoteSealer) notifyWork() { + work := s.currentWork + + // Encode the JSON payload of the notification. When NotifyFull is set, + // this is the complete block header, otherwise it is a JSON array. + var blob []byte + if s.ethash.config.NotifyFull { + blob, _ = json.Marshal(s.currentBlock.Header()) + } else { + blob, _ = json.Marshal(work) + } + + s.reqWG.Add(len(s.notifyURLs)) + for _, url := range s.notifyURLs { + go s.sendNotification(s.notifyCtx, url, blob, work) + } +} + +func (s *remoteSealer) sendNotification(ctx context.Context, url string, json []byte, work [4]string) { + defer s.reqWG.Done() + + req, err := http.NewRequest("POST", url, bytes.NewReader(json)) + if err != nil { + s.ethash.config.Log.Warn("Can't create remote miner notification", "err", err) + return + } + ctx, cancel := context.WithTimeout(ctx, remoteSealerTimeout) + defer cancel() + req = req.WithContext(ctx) + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + s.ethash.config.Log.Warn("Failed to notify remote miner", "err", err) + } else { + s.ethash.config.Log.Trace("Notified remote miner", "miner", url, "hash", work[0], "target", work[2]) + resp.Body.Close() + } +} + +// submitWork verifies the submitted pow solution, returning +// whether the solution was accepted or not (not can be both a bad pow as well as +// any other error, like no pending work or stale mining result). +func (s *remoteSealer) submitWork(nonce types.BlockNonce, mixDigest common.Hash, sealhash common.Hash) bool { + if s.currentBlock == nil { + s.ethash.config.Log.Error("Pending work without block", "sealhash", sealhash) + return false + } + // Make sure the work submitted is present + block := s.works[sealhash] + if block == nil { + s.ethash.config.Log.Warn("Work submitted but none pending", "sealhash", sealhash, "curnumber", s.currentBlock.NumberU64()) + return false + } + // Verify the correctness of submitted result. + header := block.Header() + header.Nonce = nonce + header.MixDigest = mixDigest + + start := time.Now() + if !s.noverify { + if err := s.ethash.verifySeal(nil, header, true); err != nil { + s.ethash.config.Log.Warn("Invalid proof-of-work submitted", "sealhash", sealhash, "elapsed", common.PrettyDuration(time.Since(start)), "err", err) + return false + } + } + // Make sure the result channel is assigned. + if s.results == nil { + s.ethash.config.Log.Warn("Ethash result channel is empty, submitted mining result is rejected") + return false + } + s.ethash.config.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) + + // The submitted solution is within the scope of acceptance. + if solution.NumberU64()+staleThreshold > s.currentBlock.NumberU64() { + select { + case s.results <- solution: + s.ethash.config.Log.Debug("Work submitted is acceptable", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) + return true + default: + s.ethash.config.Log.Warn("Sealing result is not read by miner", "mode", "remote", "sealhash", sealhash) + return false + } + } + // The submitted block is too old to accept, drop it. + s.ethash.config.Log.Warn("Work submitted is too old", "number", solution.NumberU64(), "sealhash", sealhash, "hash", solution.Hash()) + return false +} diff --git a/consensus/ethash/sealer_test.go b/consensus/ethash/sealer_test.go index 145ed53a..e338f752 100644 --- a/consensus/ethash/sealer_test.go +++ b/consensus/ethash/sealer_test.go @@ -18,61 +18,42 @@ package ethash import ( "encoding/json" - "io/ioutil" + "io" "math/big" - "net" "net/http" + "net/http/httptest" + "strconv" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" ) // Tests whether remote HTTP servers are correctly notified of new work. func TestRemoteNotify(t *testing.T) { - // Start a simple webserver to capture notifications + // Start a simple web server to capture notifications. sink := make(chan [3]string) - - server := &http.Server{ - Handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - blob, err := ioutil.ReadAll(req.Body) - if err != nil { - t.Fatalf("failed to read miner notification: %v", err) - } - var work [3]string - if err := json.Unmarshal(blob, &work); err != nil { - t.Fatalf("failed to unmarshal miner notification: %v", err) - } - sink <- work - }), - } - // Open a custom listener to extract its local address - listener, err := net.Listen("tcp", "localhost:0") - if err != nil { - t.Fatalf("failed to open notification server: %v", err) - } - defer listener.Close() - - go server.Serve(listener) - - // Wait for server to start listening - var tries int - for tries = 0; tries < 10; tries++ { - conn, _ := net.DialTimeout("tcp", listener.Addr().String(), 1*time.Second) - if conn != nil { - break + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + blob, err := io.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read miner notification: %v", err) } - } - if tries == 10 { - t.Fatal("tcp listener not ready for more than 10 seconds") - } + var work [3]string + if err := json.Unmarshal(blob, &work); err != nil { + t.Errorf("failed to unmarshal miner notification: %v", err) + } + sink <- work + })) + defer server.Close() - // Create the custom ethash engine - ethash := NewTester([]string{"http://" + listener.Addr().String()}, false) + // Create the custom ethash engine. + ethash := NewTester([]string{server.URL}, false) defer ethash.Close() - // Stream a work task and ensure the notification bubbles out + // Stream a work task and ensure the notification bubbles out. header := &types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(100)} block := types.NewBlockWithHeader(header) @@ -94,49 +75,139 @@ func TestRemoteNotify(t *testing.T) { } } +// Tests whether remote HTTP servers are correctly notified of new work. (Full pending block body / --miner.notify.full) +func TestRemoteNotifyFull(t *testing.T) { + // Start a simple web server to capture notifications. + sink := make(chan map[string]interface{}) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + blob, err := io.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read miner notification: %v", err) + } + var work map[string]interface{} + if err := json.Unmarshal(blob, &work); err != nil { + t.Errorf("failed to unmarshal miner notification: %v", err) + } + sink <- work + })) + defer server.Close() + + // Create the custom ethash engine. + config := Config{ + PowMode: ModeTest, + NotifyFull: true, + Log: testlog.Logger(t, log.LvlWarn), + } + ethash := New(config, []string{server.URL}, false) + defer ethash.Close() + + // Stream a work task and ensure the notification bubbles out. + header := &types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(100)} + block := types.NewBlockWithHeader(header) + + ethash.Seal(nil, block, nil, nil) + select { + case work := <-sink: + if want := "0x" + strconv.FormatUint(header.Number.Uint64(), 16); work["number"] != want { + t.Errorf("pending block number mismatch: have %v, want %v", work["number"], want) + } + if want := "0x" + header.Difficulty.Text(16); work["difficulty"] != want { + t.Errorf("pending block difficulty mismatch: have %s, want %s", work["difficulty"], want) + } + case <-time.After(3 * time.Second): + t.Fatalf("notification timed out") + } +} + // Tests that pushing work packages fast to the miner doesn't cause any data race // issues in the notifications. func TestRemoteMultiNotify(t *testing.T) { - // Start a simple webserver to capture notifications + // Start a simple web server to capture notifications. sink := make(chan [3]string, 64) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + blob, err := io.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read miner notification: %v", err) + } + var work [3]string + if err := json.Unmarshal(blob, &work); err != nil { + t.Errorf("failed to unmarshal miner notification: %v", err) + } + sink <- work + })) + defer server.Close() - server := &http.Server{ - Handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - blob, err := ioutil.ReadAll(req.Body) - if err != nil { - t.Fatalf("failed to read miner notification: %v", err) - } - var work [3]string - if err := json.Unmarshal(blob, &work); err != nil { - t.Fatalf("failed to unmarshal miner notification: %v", err) - } - sink <- work - }), + // Create the custom ethash engine. + ethash := NewTester([]string{server.URL}, false) + ethash.config.Log = testlog.Logger(t, log.LvlWarn) + defer ethash.Close() + + // Provide a results reader. + // Otherwise the unread results will be logged asynchronously + // and this can happen after the test is finished, causing a panic. + results := make(chan *types.Block, cap(sink)) + + // Stream a lot of work task and ensure all the notifications bubble out. + for i := 0; i < cap(sink); i++ { + header := &types.Header{Number: big.NewInt(int64(i)), Difficulty: big.NewInt(100)} + block := types.NewBlockWithHeader(header) + ethash.Seal(nil, block, results, nil) } - // Open a custom listener to extract its local address - listener, err := net.Listen("tcp", "localhost:0") - if err != nil { - t.Fatalf("failed to open notification server: %v", err) + + for i := 0; i < cap(sink); i++ { + select { + case <-sink: + <-results + case <-time.After(10 * time.Second): + t.Fatalf("notification %d timed out", i) + } } - defer listener.Close() +} - go server.Serve(listener) +// Tests that pushing work packages fast to the miner doesn't cause any data race +// issues in the notifications. Full pending block body / --miner.notify.full) +func TestRemoteMultiNotifyFull(t *testing.T) { + // Start a simple web server to capture notifications. + sink := make(chan map[string]interface{}, 64) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + blob, err := io.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read miner notification: %v", err) + } + var work map[string]interface{} + if err := json.Unmarshal(blob, &work); err != nil { + t.Errorf("failed to unmarshal miner notification: %v", err) + } + sink <- work + })) + defer server.Close() - // Create the custom ethash engine - ethash := NewTester([]string{"http://" + listener.Addr().String()}, false) + // Create the custom ethash engine. + config := Config{ + PowMode: ModeTest, + NotifyFull: true, + Log: testlog.Logger(t, log.LvlWarn), + } + ethash := New(config, []string{server.URL}, false) defer ethash.Close() - // Stream a lot of work task and ensure all the notifications bubble out + // Provide a results reader. + // Otherwise the unread results will be logged asynchronously + // and this can happen after the test is finished, causing a panic. + results := make(chan *types.Block, cap(sink)) + + // Stream a lot of work task and ensure all the notifications bubble out. for i := 0; i < cap(sink); i++ { header := &types.Header{Number: big.NewInt(int64(i)), Difficulty: big.NewInt(100)} block := types.NewBlockWithHeader(header) - - ethash.Seal(nil, block, nil, nil) + ethash.Seal(nil, block, results, nil) } + for i := 0; i < cap(sink); i++ { select { case <-sink: - case <-time.After(3 * time.Second): + <-results + case <-time.After(10 * time.Second): t.Fatalf("notification %d timed out", i) } } @@ -206,10 +277,10 @@ func TestStaleSubmission(t *testing.T) { select { case res := <-results: if res.Header().Nonce != fakeNonce { - t.Errorf("case %d block nonce mismatch, want %s, get %s", id+1, fakeNonce, res.Header().Nonce) + t.Errorf("case %d block nonce mismatch, want %x, get %x", id+1, fakeNonce, res.Header().Nonce) } if res.Header().MixDigest != fakeDigest { - t.Errorf("case %d block digest mismatch, want %s, get %s", id+1, fakeDigest, res.Header().MixDigest) + t.Errorf("case %d block digest mismatch, want %x, get %x", id+1, fakeDigest, res.Header().MixDigest) } if res.Header().Difficulty.Uint64() != c.headers[c.submitIndex].Difficulty.Uint64() { t.Errorf("case %d block difficulty mismatch, want %d, get %d", id+1, c.headers[c.submitIndex].Difficulty, res.Header().Difficulty) diff --git a/consensus/merger.go b/consensus/merger.go new file mode 100644 index 00000000..ffbcbf2b --- /dev/null +++ b/consensus/merger.go @@ -0,0 +1,110 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package consensus + +import ( + "fmt" + "sync" + + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +// transitionStatus describes the status of eth1/2 transition. This switch +// between modes is a one-way action which is triggered by corresponding +// consensus-layer message. +type transitionStatus struct { + LeftPoW bool // The flag is set when the first NewHead message received + EnteredPoS bool // The flag is set when the first FinalisedBlock message received +} + +// Merger is an internal help structure used to track the eth1/2 transition status. +// It's a common structure can be used in both full node and light client. +type Merger struct { + db ethdb.KeyValueStore + status transitionStatus + mu sync.RWMutex +} + +// NewMerger creates a new Merger which stores its transition status in the provided db. +func NewMerger(db ethdb.KeyValueStore) *Merger { + var status transitionStatus + blob := rawdb.ReadTransitionStatus(db) + if len(blob) != 0 { + if err := rlp.DecodeBytes(blob, &status); err != nil { + log.Crit("Failed to decode the transition status", "err", err) + } + } + return &Merger{ + db: db, + status: status, + } +} + +// ReachTTD is called whenever the first NewHead message received +// from the consensus-layer. +func (m *Merger) ReachTTD() { + m.mu.Lock() + defer m.mu.Unlock() + + if m.status.LeftPoW { + return + } + m.status = transitionStatus{LeftPoW: true} + blob, err := rlp.EncodeToBytes(m.status) + if err != nil { + panic(fmt.Sprintf("Failed to encode the transition status: %v", err)) + } + rawdb.WriteTransitionStatus(m.db, blob) + log.Info("Left PoW stage") +} + +// FinalizePoS is called whenever the first FinalisedBlock message received +// from the consensus-layer. +func (m *Merger) FinalizePoS() { + m.mu.Lock() + defer m.mu.Unlock() + + if m.status.EnteredPoS { + return + } + m.status = transitionStatus{LeftPoW: true, EnteredPoS: true} + blob, err := rlp.EncodeToBytes(m.status) + if err != nil { + panic(fmt.Sprintf("Failed to encode the transition status: %v", err)) + } + rawdb.WriteTransitionStatus(m.db, blob) + log.Info("Entered PoS stage") +} + +// TDDReached reports whether the chain has left the PoW stage. +func (m *Merger) TDDReached() bool { + m.mu.RLock() + defer m.mu.RUnlock() + + return m.status.LeftPoW +} + +// PoSFinalized reports whether the chain has entered the PoS stage. +func (m *Merger) PoSFinalized() bool { + m.mu.RLock() + defer m.mu.RUnlock() + + return m.status.EnteredPoS +} diff --git a/consensus/misc/dao.go b/consensus/misc/dao.go index 7fd176c5..36df036f 100644 --- a/consensus/misc/dao.go +++ b/consensus/misc/dao.go @@ -21,13 +21,13 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" ) var ( - // ErrBadProDAOExtra is returned if a header doens't support the DAO fork on a + // ErrBadProDAOExtra is returned if a header doesn't support the DAO fork on a // pro-fork client. ErrBadProDAOExtra = errors.New("bad DAO pro-fork extra-data") diff --git a/consensus/misc/eip1559.go b/consensus/misc/eip1559.go new file mode 100644 index 00000000..e0216243 --- /dev/null +++ b/consensus/misc/eip1559.go @@ -0,0 +1,93 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package misc + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" +) + +// VerifyEip1559Header verifies some header attributes which were changed in EIP-1559, +// - gas limit check +// - basefee check +func VerifyEip1559Header(config *params.ChainConfig, parent, header *types.Header) error { + // Verify that the gas limit remains within allowed bounds + parentGasLimit := parent.GasLimit + if !config.IsLondon(parent.Number) { + parentGasLimit = parent.GasLimit * params.ElasticityMultiplier + } + if err := VerifyGaslimit(parentGasLimit, header.GasLimit); err != nil { + return err + } + // Verify the header is not malformed + if header.BaseFee == nil { + return fmt.Errorf("header is missing baseFee") + } + // Verify the baseFee is correct based on the parent header. + expectedBaseFee := CalcBaseFee(config, parent) + if header.BaseFee.Cmp(expectedBaseFee) != 0 { + return fmt.Errorf("invalid baseFee: have %s, want %s, parentBaseFee %s, parentGasUsed %d", + header.BaseFee, expectedBaseFee, parent.BaseFee, parent.GasUsed) + } + return nil +} + +// CalcBaseFee calculates the basefee of the header. +func CalcBaseFee(config *params.ChainConfig, parent *types.Header) *big.Int { + // If the current block is the first EIP-1559 block, return the InitialBaseFee. + if !config.IsLondon(parent.Number) { + return new(big.Int).SetUint64(params.InitialBaseFee) + } + + parentGasTarget := parent.GasLimit / params.ElasticityMultiplier + // If the parent gasUsed is the same as the target, the baseFee remains unchanged. + if parent.GasUsed == parentGasTarget { + return new(big.Int).Set(parent.BaseFee) + } + + var ( + num = new(big.Int) + denom = new(big.Int) + ) + + if parent.GasUsed > parentGasTarget { + // If the parent block used more gas than its target, the baseFee should increase. + // max(1, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + num.SetUint64(parent.GasUsed - parentGasTarget) + num.Mul(num, parent.BaseFee) + num.Div(num, denom.SetUint64(parentGasTarget)) + num.Div(num, denom.SetUint64(params.BaseFeeChangeDenominator)) + baseFeeDelta := math.BigMax(num, common.Big1) + + return num.Add(parent.BaseFee, baseFeeDelta) + } else { + // Otherwise if the parent block used less gas than its target, the baseFee should decrease. + // max(0, parentBaseFee * gasUsedDelta / parentGasTarget / baseFeeChangeDenominator) + num.SetUint64(parentGasTarget - parent.GasUsed) + num.Mul(num, parent.BaseFee) + num.Div(num, denom.SetUint64(parentGasTarget)) + num.Div(num, denom.SetUint64(params.BaseFeeChangeDenominator)) + baseFee := num.Sub(parent.BaseFee, num) + + return math.BigMax(baseFee, common.Big0) + } +} diff --git a/consensus/misc/eip1559_test.go b/consensus/misc/eip1559_test.go new file mode 100644 index 00000000..23cd9023 --- /dev/null +++ b/consensus/misc/eip1559_test.go @@ -0,0 +1,132 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package misc + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" +) + +// copyConfig does a _shallow_ copy of a given config. Safe to set new values, but +// do not use e.g. SetInt() on the numbers. For testing only +func copyConfig(original *params.ChainConfig) *params.ChainConfig { + return ¶ms.ChainConfig{ + ChainID: original.ChainID, + HomesteadBlock: original.HomesteadBlock, + DAOForkBlock: original.DAOForkBlock, + DAOForkSupport: original.DAOForkSupport, + EIP150Block: original.EIP150Block, + EIP150Hash: original.EIP150Hash, + EIP155Block: original.EIP155Block, + EIP158Block: original.EIP158Block, + ByzantiumBlock: original.ByzantiumBlock, + ConstantinopleBlock: original.ConstantinopleBlock, + PetersburgBlock: original.PetersburgBlock, + IstanbulBlock: original.IstanbulBlock, + MuirGlacierBlock: original.MuirGlacierBlock, + BerlinBlock: original.BerlinBlock, + LondonBlock: original.LondonBlock, + TerminalTotalDifficulty: original.TerminalTotalDifficulty, + Ethash: original.Ethash, + Clique: original.Clique, + } +} + +func config() *params.ChainConfig { + config := copyConfig(params.TestChainConfig) + config.LondonBlock = big.NewInt(5) + return config +} + +// TestBlockGasLimits tests the gasLimit checks for blocks both across +// the EIP-1559 boundary and post-1559 blocks +func TestBlockGasLimits(t *testing.T) { + initial := new(big.Int).SetUint64(params.InitialBaseFee) + + for i, tc := range []struct { + pGasLimit uint64 + pNum int64 + gasLimit uint64 + ok bool + }{ + // Transitions from non-london to london + {10000000, 4, 20000000, true}, // No change + {10000000, 4, 20019530, true}, // Upper limit + {10000000, 4, 20019531, false}, // Upper +1 + {10000000, 4, 19980470, true}, // Lower limit + {10000000, 4, 19980469, false}, // Lower limit -1 + // London to London + {20000000, 5, 20000000, true}, + {20000000, 5, 20019530, true}, // Upper limit + {20000000, 5, 20019531, false}, // Upper limit +1 + {20000000, 5, 19980470, true}, // Lower limit + {20000000, 5, 19980469, false}, // Lower limit -1 + {40000000, 5, 40039061, true}, // Upper limit + {40000000, 5, 40039062, false}, // Upper limit +1 + {40000000, 5, 39960939, true}, // lower limit + {40000000, 5, 39960938, false}, // Lower limit -1 + } { + parent := &types.Header{ + GasUsed: tc.pGasLimit / 2, + GasLimit: tc.pGasLimit, + BaseFee: initial, + Number: big.NewInt(tc.pNum), + } + header := &types.Header{ + GasUsed: tc.gasLimit / 2, + GasLimit: tc.gasLimit, + BaseFee: initial, + Number: big.NewInt(tc.pNum + 1), + } + err := VerifyEip1559Header(config(), parent, header) + if tc.ok && err != nil { + t.Errorf("test %d: Expected valid header: %s", i, err) + } + if !tc.ok && err == nil { + t.Errorf("test %d: Expected invalid header", i) + } + } +} + +// TestCalcBaseFee assumes all blocks are 1559-blocks +func TestCalcBaseFee(t *testing.T) { + tests := []struct { + parentBaseFee int64 + parentGasLimit uint64 + parentGasUsed uint64 + expectedBaseFee int64 + }{ + {params.InitialBaseFee, 20000000, 10000000, params.InitialBaseFee}, // usage == target + {params.InitialBaseFee, 20000000, 9000000, 987500000}, // usage below target + {params.InitialBaseFee, 20000000, 11000000, 1012500000}, // usage above target + } + for i, test := range tests { + parent := &types.Header{ + Number: common.Big32, + GasLimit: test.parentGasLimit, + GasUsed: test.parentGasUsed, + BaseFee: big.NewInt(test.parentBaseFee), + } + if have, want := CalcBaseFee(config(), parent), big.NewInt(test.expectedBaseFee); have.Cmp(want) != 0 { + t.Errorf("test %d: have %d want %d, ", i, have, want) + } + } +} diff --git a/consensus/misc/forks.go b/consensus/misc/forks.go index f602e488..a6f3303e 100644 --- a/consensus/misc/forks.go +++ b/consensus/misc/forks.go @@ -19,9 +19,9 @@ package misc import ( "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" ) // VerifyForkHashes verifies that blocks conforming to network hard-forks do have @@ -35,7 +35,7 @@ func VerifyForkHashes(config *params.ChainConfig, header *types.Header, uncle bo // If the homestead reprice hash is set, validate it if config.EIP150Block != nil && config.EIP150Block.Cmp(header.Number) == 0 { if config.EIP150Hash != (common.Hash{}) && config.EIP150Hash != header.Hash() { - return fmt.Errorf("homestead gas reprice fork: have 0x%x, want 0x%x", header.Hash(), config.EIP150Hash) + return fmt.Errorf("homestead gas reprice fork: have %#x, want %#x", header.Hash(), config.EIP150Hash) } } // All ok, return diff --git a/consensus/misc/gaslimit.go b/consensus/misc/gaslimit.go new file mode 100644 index 00000000..25f35300 --- /dev/null +++ b/consensus/misc/gaslimit.go @@ -0,0 +1,42 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package misc + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/params" +) + +// VerifyGaslimit verifies the header gas limit according increase/decrease +// in relation to the parent gas limit. +func VerifyGaslimit(parentGasLimit, headerGasLimit uint64) error { + // Verify that the gas limit remains within allowed bounds + diff := int64(parentGasLimit) - int64(headerGasLimit) + if diff < 0 { + diff *= -1 + } + limit := parentGasLimit / params.GasLimitBoundDivisor + if uint64(diff) >= limit { + return fmt.Errorf("invalid gas limit: have %d, want %d +-= %d", headerGasLimit, parentGasLimit, limit-1) + } + if headerGasLimit < params.MinGasLimit { + return errors.New("invalid gas limit below 5000") + } + return nil +} diff --git a/console/bridge.go b/console/bridge.go index b7d63247..21ef0e8e 100644 --- a/console/bridge.go +++ b/console/bridge.go @@ -20,26 +20,29 @@ import ( "encoding/json" "fmt" "io" + "reflect" "strings" "time" - "github.com/cryptoecc/ETH-ECC/accounts/scwallet" - "github.com/cryptoecc/ETH-ECC/accounts/usbwallet" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/robertkrimen/otto" + "github.com/dop251/goja" + "github.com/ethereum/go-ethereum/accounts/scwallet" + "github.com/ethereum/go-ethereum/accounts/usbwallet" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/internal/jsre" + "github.com/ethereum/go-ethereum/rpc" ) // bridge is a collection of JavaScript utility methods to bride the .js runtime // environment and the Go RPC connection backing the remote method calls. type bridge struct { - client *rpc.Client // RPC client to execute Ethereum requests through - prompter UserPrompter // Input prompter to allow interactive user feedback - printer io.Writer // Output writer to serialize any display strings to + client *rpc.Client // RPC client to execute Ethereum requests through + prompter prompt.UserPrompter // Input prompter to allow interactive user feedback + printer io.Writer // Output writer to serialize any display strings to } // newBridge creates a new JavaScript wrapper around an RPC client. -func newBridge(client *rpc.Client, prompter UserPrompter, printer io.Writer) *bridge { +func newBridge(client *rpc.Client, prompter prompt.UserPrompter, printer io.Writer) *bridge { return &bridge{ client: client, prompter: prompter, @@ -47,10 +50,18 @@ func newBridge(client *rpc.Client, prompter UserPrompter, printer io.Writer) *br } } +func getJeth(vm *goja.Runtime) *goja.Object { + jeth := vm.Get("jeth") + if jeth == nil { + panic(vm.ToValue("jeth object does not exist")) + } + return jeth.ToObject(vm) +} + // NewAccount is a wrapper around the personal.newAccount RPC method that uses a // non-echoing password prompt to acquire the passphrase and executes the original // RPC method (saved in jeth.newAccount) with it to actually execute the RPC call. -func (b *bridge) NewAccount(call otto.FunctionCall) (response otto.Value) { +func (b *bridge) NewAccount(call jsre.Call) (goja.Value, error) { var ( password string confirm string @@ -58,52 +69,57 @@ 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("Password: "); err != nil { - throwJSException(err.Error()) + case len(call.Arguments) == 0: + if password, err = b.prompter.PromptPassword("Passphrase: "); err != nil { + return nil, err } - if confirm, err = b.prompter.PromptPassword("Repeat password: "); err != nil { - throwJSException(err.Error()) + if confirm, err = b.prompter.PromptPassword("Repeat passphrase: "); err != nil { + return nil, err } if password != confirm { - throwJSException("passwords don't match!") + return nil, fmt.Errorf("passwords don't match!") } - // A single string password was specified, use that - case len(call.ArgumentList) == 1 && call.Argument(0).IsString(): - password, _ = call.Argument(0).ToString() - - // Otherwise fail with some error + case len(call.Arguments) == 1 && call.Argument(0).ToString() != nil: + password = call.Argument(0).ToString().String() default: - throwJSException("expected 0 or 1 string argument") + return nil, fmt.Errorf("expected 0 or 1 string argument") } // Password acquired, execute the call and return - ret, err := call.Otto.Call("jeth.newAccount", nil, password) + newAccount, callable := goja.AssertFunction(getJeth(call.VM).Get("newAccount")) + if !callable { + return nil, fmt.Errorf("jeth.newAccount is not callable") + } + ret, err := newAccount(goja.Null(), call.VM.ToValue(password)) if err != nil { - throwJSException(err.Error()) + return nil, err } - return ret + return ret, nil } // OpenWallet is a wrapper around personal.openWallet which can interpret and // react to certain error messages, such as the Trezor PIN matrix request. -func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { +func (b *bridge) OpenWallet(call jsre.Call) (goja.Value, error) { // Make sure we have a wallet specified to open - if !call.Argument(0).IsString() { - throwJSException("first argument must be the wallet URL to open") + if call.Argument(0).ToObject(call.VM).ClassName() != "String" { + return nil, fmt.Errorf("first argument must be the wallet URL to open") } wallet := call.Argument(0) - var passwd otto.Value - if call.Argument(1).IsUndefined() || call.Argument(1).IsNull() { - passwd, _ = otto.ToValue("") + var passwd goja.Value + if goja.IsUndefined(call.Argument(1)) || goja.IsNull(call.Argument(1)) { + passwd = call.VM.ToValue("") } else { passwd = call.Argument(1) } // Open the wallet and return if successful in itself - val, err := call.Otto.Call("jeth.openWallet", nil, wallet, passwd) + openWallet, callable := goja.AssertFunction(getJeth(call.VM).Get("openWallet")) + if !callable { + return nil, fmt.Errorf("jeth.openWallet is not callable") + } + val, err := openWallet(goja.Null(), wallet, passwd) if err == nil { - return val + return val, nil } // Wallet open failed, report error unless it's a PIN or PUK entry @@ -111,85 +127,83 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { case strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPINNeeded.Error()): val, err = b.readPinAndReopenWallet(call) if err == nil { - return val + return val, nil } val, err = b.readPassphraseAndReopenWallet(call) if err != nil { - throwJSException(err.Error()) + return nil, err } 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) + input, err := b.prompter.PromptPassword("Please enter the pairing password: ") + if err != nil { + return nil, err } - if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { + passwd = call.VM.ToValue(input) + if val, err = openWallet(goja.Null(), 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()) - } + return nil, err + } + // PIN input requested, fetch from the user and call open again + input, err := b.prompter.PromptPassword("Please enter current PIN: ") + if err != nil { + return nil, err + } + if val, err = openWallet(goja.Null(), wallet, call.VM.ToValue(input)); err != nil { + return nil, err } } 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 + input, err := b.prompter.PromptPassword("Please enter current PUK: ") + if err != nil { + return nil, err } - if input, err := b.prompter.PromptPassword("Please enter new PIN: "); err != nil { - throwJSException(err.Error()) - } else { - pukpin += input + pukpin = input + input, err = b.prompter.PromptPassword("Please enter new PIN: ") + if err != nil { + return nil, err } - passwd, _ = otto.ToValue(pukpin) - if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { - throwJSException(err.Error()) + pukpin += input + + if val, err = openWallet(goja.Null(), wallet, call.VM.ToValue(pukpin)); err != nil { + return nil, err } 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) + input, err := b.prompter.PromptPassword("Please enter current PIN: ") + if err != nil { + return nil, err } - if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { - throwJSException(err.Error()) + if val, err = openWallet(goja.Null(), wallet, call.VM.ToValue(input)); err != nil { + return nil, err } default: // Unknown error occurred, drop to the user - throwJSException(err.Error()) + return nil, err } - return val + return val, nil } -func (b *bridge) readPassphraseAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { - var passwd otto.Value +func (b *bridge) readPassphraseAndReopenWallet(call jsre.Call) (goja.Value, error) { wallet := call.Argument(0) - if input, err := b.prompter.PromptPassword("Please enter your password: "); err != nil { - throwJSException(err.Error()) - } else { - passwd, _ = otto.ToValue(input) + input, err := b.prompter.PromptPassword("Please enter your passphrase: ") + if err != nil { + return nil, err + } + openWallet, callable := goja.AssertFunction(getJeth(call.VM).Get("openWallet")) + if !callable { + return nil, fmt.Errorf("jeth.openWallet is not callable") } - return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) + return openWallet(goja.Null(), wallet, call.VM.ToValue(input)) } -func (b *bridge) readPinAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { - var passwd otto.Value +func (b *bridge) readPinAndReopenWallet(call jsre.Call) (goja.Value, error) { 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") @@ -199,155 +213,165 @@ func (b *bridge) readPinAndReopenWallet(call otto.FunctionCall) (otto.Value, err fmt.Fprintf(b.printer, "--+---+--\n") fmt.Fprintf(b.printer, "1 | 2 | 3\n\n") - if input, err := b.prompter.PromptPassword("Please enter current PIN: "); err != nil { - throwJSException(err.Error()) - } else { - passwd, _ = otto.ToValue(input) + input, err := b.prompter.PromptPassword("Please enter current PIN: ") + if err != nil { + return nil, err } - return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) + openWallet, callable := goja.AssertFunction(getJeth(call.VM).Get("openWallet")) + if !callable { + return nil, fmt.Errorf("jeth.openWallet is not callable") + } + return openWallet(goja.Null(), wallet, call.VM.ToValue(input)) } // UnlockAccount is a wrapper around the personal.unlockAccount RPC method that // uses a non-echoing password prompt to acquire the passphrase and executes the // original RPC method (saved in jeth.unlockAccount) with it to actually execute // the RPC call. -func (b *bridge) UnlockAccount(call otto.FunctionCall) (response otto.Value) { - // Make sure we have an account specified to unlock - if !call.Argument(0).IsString() { - throwJSException("first argument must be the account to unlock") +func (b *bridge) UnlockAccount(call jsre.Call) (goja.Value, error) { + if len(call.Arguments) < 1 { + return nil, fmt.Errorf("usage: unlockAccount(account, [ password, duration ])") } - account := call.Argument(0) - // If password is not given or is the null value, prompt the user for it - var passwd otto.Value + account := call.Argument(0) + // Make sure we have an account specified to unlock. + if goja.IsUndefined(account) || goja.IsNull(account) || account.ExportType().Kind() != reflect.String { + return nil, fmt.Errorf("first argument must be the account to unlock") + } - if call.Argument(1).IsUndefined() || call.Argument(1).IsNull() { + // If password is not given or is the null value, prompt the user for it. + var passwd goja.Value + if goja.IsUndefined(call.Argument(1)) || goja.IsNull(call.Argument(1)) { fmt.Fprintf(b.printer, "Unlock account %s\n", account) - if input, err := b.prompter.PromptPassword("Password: "); err != nil { - throwJSException(err.Error()) - } else { - passwd, _ = otto.ToValue(input) + input, err := b.prompter.PromptPassword("Passphrase: ") + if err != nil { + return nil, err } + passwd = call.VM.ToValue(input) } else { - if !call.Argument(1).IsString() { - throwJSException("password must be a string") + if call.Argument(1).ExportType().Kind() != reflect.String { + return nil, fmt.Errorf("password must be a string") } passwd = call.Argument(1) } - // Third argument is the duration how long the account must be unlocked. - duration := otto.NullValue() - if call.Argument(2).IsDefined() && !call.Argument(2).IsNull() { - if !call.Argument(2).IsNumber() { - throwJSException("unlock duration must be a number") + + // Third argument is the duration how long the account should be unlocked. + duration := goja.Null() + if !goja.IsUndefined(call.Argument(2)) && !goja.IsNull(call.Argument(2)) { + if !isNumber(call.Argument(2)) { + return nil, fmt.Errorf("unlock duration must be a number") } duration = call.Argument(2) } - // Send the request to the backend and return - val, err := call.Otto.Call("jeth.unlockAccount", nil, account, passwd, duration) - if err != nil { - throwJSException(err.Error()) + + // Send the request to the backend and return. + unlockAccount, callable := goja.AssertFunction(getJeth(call.VM).Get("unlockAccount")) + if !callable { + return nil, fmt.Errorf("jeth.unlockAccount is not callable") } - return val + return unlockAccount(goja.Null(), account, passwd, duration) } // Sign is a wrapper around the personal.sign RPC method that uses a non-echoing password // prompt to acquire the passphrase and executes the original RPC method (saved in // jeth.sign) with it to actually execute the RPC call. -func (b *bridge) Sign(call otto.FunctionCall) (response otto.Value) { +func (b *bridge) Sign(call jsre.Call) (goja.Value, error) { + if nArgs := len(call.Arguments); nArgs < 2 { + return nil, fmt.Errorf("usage: sign(message, account, [ password ])") + } var ( message = call.Argument(0) account = call.Argument(1) passwd = call.Argument(2) ) - if !message.IsString() { - throwJSException("first argument must be the message to sign") + if goja.IsUndefined(message) || message.ExportType().Kind() != reflect.String { + return nil, fmt.Errorf("first argument must be the message to sign") } - if !account.IsString() { - throwJSException("second argument must be the account to sign with") + if goja.IsUndefined(account) || account.ExportType().Kind() != reflect.String { + return nil, fmt.Errorf("second argument must be the account to sign with") } // if the password is not given or null ask the user and ensure password is a string - if passwd.IsUndefined() || passwd.IsNull() { + if goja.IsUndefined(passwd) || goja.IsNull(passwd) { fmt.Fprintf(b.printer, "Give password for account %s\n", account) - if input, err := b.prompter.PromptPassword("Password: "); err != nil { - throwJSException(err.Error()) - } else { - passwd, _ = otto.ToValue(input) + input, err := b.prompter.PromptPassword("Password: ") + if err != nil { + return nil, err } - } - if !passwd.IsString() { - throwJSException("third argument must be the password to unlock the account") + passwd = call.VM.ToValue(input) + } else if passwd.ExportType().Kind() != reflect.String { + return nil, fmt.Errorf("third argument must be the password to unlock the account") } // Send the request to the backend and return - val, err := call.Otto.Call("jeth.sign", nil, message, account, passwd) - if err != nil { - throwJSException(err.Error()) + sign, callable := goja.AssertFunction(getJeth(call.VM).Get("sign")) + if !callable { + return nil, fmt.Errorf("jeth.sign is not callable") } - return val + return sign(goja.Null(), message, account, passwd) } // Sleep will block the console for the specified number of seconds. -func (b *bridge) Sleep(call otto.FunctionCall) (response otto.Value) { - if call.Argument(0).IsNumber() { - sleep, _ := call.Argument(0).ToInteger() - time.Sleep(time.Duration(sleep) * time.Second) - return otto.TrueValue() +func (b *bridge) Sleep(call jsre.Call) (goja.Value, error) { + if nArgs := len(call.Arguments); nArgs < 1 { + return nil, fmt.Errorf("usage: sleep()") } - return throwJSException("usage: sleep()") + sleepObj := call.Argument(0) + if goja.IsUndefined(sleepObj) || goja.IsNull(sleepObj) || !isNumber(sleepObj) { + return nil, fmt.Errorf("usage: sleep()") + } + sleep := sleepObj.ToFloat() + time.Sleep(time.Duration(sleep * float64(time.Second))) + return call.VM.ToValue(true), nil } // SleepBlocks will block the console for a specified number of new blocks optionally // until the given timeout is reached. -func (b *bridge) SleepBlocks(call otto.FunctionCall) (response otto.Value) { +func (b *bridge) SleepBlocks(call jsre.Call) (goja.Value, error) { + // Parse the input parameters for the sleep. var ( blocks = int64(0) sleep = int64(9999999999999999) // indefinitely ) - // Parse the input parameters for the sleep - nArgs := len(call.ArgumentList) + nArgs := len(call.Arguments) if nArgs == 0 { - throwJSException("usage: sleepBlocks([, max sleep in seconds])") + return nil, fmt.Errorf("usage: sleepBlocks([, max sleep in seconds])") } if nArgs >= 1 { - if call.Argument(0).IsNumber() { - blocks, _ = call.Argument(0).ToInteger() - } else { - throwJSException("expected number as first argument") + if goja.IsNull(call.Argument(0)) || goja.IsUndefined(call.Argument(0)) || !isNumber(call.Argument(0)) { + return nil, fmt.Errorf("expected number as first argument") } + blocks = call.Argument(0).ToInteger() } if nArgs >= 2 { - if call.Argument(1).IsNumber() { - sleep, _ = call.Argument(1).ToInteger() - } else { - throwJSException("expected number as second argument") - } - } - // go through the console, this will allow web3 to call the appropriate - // callbacks if a delayed response or notification is received. - blockNumber := func() int64 { - result, err := call.Otto.Run("eth.blockNumber") - if err != nil { - throwJSException(err.Error()) - } - block, err := result.ToInteger() - if err != nil { - throwJSException(err.Error()) + if goja.IsNull(call.Argument(1)) || goja.IsUndefined(call.Argument(1)) || !isNumber(call.Argument(1)) { + return nil, fmt.Errorf("expected number as second argument") } - return block + sleep = call.Argument(1).ToInteger() } - // Poll the current block number until either it ot a timeout is reached - targetBlockNr := blockNumber() + blocks - deadline := time.Now().Add(time.Duration(sleep) * time.Second) + // Poll the current block number until either it or a timeout is reached. + deadline := time.Now().Add(time.Duration(sleep) * time.Second) + var lastNumber hexutil.Uint64 + if err := b.client.Call(&lastNumber, "eth_blockNumber"); err != nil { + return nil, err + } for time.Now().Before(deadline) { - if blockNumber() >= targetBlockNr { - return otto.TrueValue() + var number hexutil.Uint64 + if err := b.client.Call(&number, "eth_blockNumber"); err != nil { + return nil, err + } + if number != lastNumber { + lastNumber = number + blocks-- + } + if blocks <= 0 { + break } time.Sleep(time.Second) } - return otto.FalseValue() + return call.VM.ToValue(true), nil } type jsonrpcCall struct { @@ -357,15 +381,15 @@ type jsonrpcCall struct { } // Send implements the web3 provider "send" method. -func (b *bridge) Send(call otto.FunctionCall) (response otto.Value) { +func (b *bridge) Send(call jsre.Call) (goja.Value, error) { // Remarshal the request into a Go value. - JSON, _ := call.Otto.Object("JSON") - reqVal, err := JSON.Call("stringify", call.Argument(0)) + reqVal, err := call.Argument(0).ToObject(call.VM).MarshalJSON() if err != nil { - throwJSException(err.Error()) + return nil, err } + var ( - rawReq = reqVal.String() + rawReq = string(reqVal) dec = json.NewDecoder(strings.NewReader(rawReq)) reqs []jsonrpcCall batch bool @@ -381,58 +405,79 @@ func (b *bridge) Send(call otto.FunctionCall) (response otto.Value) { } // Execute the requests. - resps, _ := call.Otto.Object("new Array()") + var resps []*goja.Object for _, req := range reqs { - resp, _ := call.Otto.Object(`({"jsonrpc":"2.0"})`) + resp := call.VM.NewObject() + resp.Set("jsonrpc", "2.0") resp.Set("id", req.ID) + var result json.RawMessage - err = b.client.Call(&result, req.Method, req.Params...) - switch err := err.(type) { - case nil: + if err = b.client.Call(&result, req.Method, req.Params...); err == nil { if result == nil { // Special case null because it is decoded as an empty // raw message for some reason. - resp.Set("result", otto.NullValue()) + resp.Set("result", goja.Null()) } else { - resultVal, err := JSON.Call("parse", string(result)) + JSON := call.VM.Get("JSON").ToObject(call.VM) + parse, callable := goja.AssertFunction(JSON.Get("parse")) + if !callable { + return nil, fmt.Errorf("JSON.parse is not a function") + } + resultVal, err := parse(goja.Null(), call.VM.ToValue(string(result))) if err != nil { - setError(resp, -32603, err.Error()) + setError(resp, -32603, err.Error(), nil) } else { resp.Set("result", resultVal) } } - case rpc.Error: - setError(resp, err.ErrorCode(), err.Error()) - default: - setError(resp, -32603, err.Error()) + } else { + code := -32603 + var data interface{} + if err, ok := err.(rpc.Error); ok { + code = err.ErrorCode() + } + if err, ok := err.(rpc.DataError); ok { + data = err.ErrorData() + } + setError(resp, code, err.Error(), data) } - resps.Call("push", resp) + resps = append(resps, resp) } - // Return the responses either to the callback (if supplied) // or directly as the return value. + var result goja.Value if batch { - response = resps.Value() + result = call.VM.ToValue(resps) } else { - response, _ = resps.Get("0") + result = resps[0] } - if fn := call.Argument(1); fn.Class() == "Function" { - fn.Call(otto.NullValue(), otto.NullValue(), response) - return otto.UndefinedValue() + if fn, isFunc := goja.AssertFunction(call.Argument(1)); isFunc { + fn(goja.Null(), goja.Null(), result) + return goja.Undefined(), nil } - return response + return result, nil } -func setError(resp *otto.Object, code int, msg string) { - resp.Set("error", map[string]interface{}{"code": code, "message": msg}) +func setError(resp *goja.Object, code int, msg string, data interface{}) { + err := make(map[string]interface{}) + err["code"] = code + err["message"] = msg + if data != nil { + err["data"] = data + } + resp.Set("error", err) } -// throwJSException panics on an otto.Value. The Otto VM will recover from the -// Go panic and throw msg as a JavaScript error. -func throwJSException(msg interface{}) otto.Value { - val, err := otto.ToValue(msg) - if err != nil { - log.Error("Failed to serialize JavaScript exception", "exception", msg, "err", err) +// isNumber returns true if input value is a JS number. +func isNumber(v goja.Value) bool { + k := v.ExportType().Kind() + return k >= reflect.Int && k <= reflect.Float64 +} + +func getObject(vm *goja.Runtime, name string) *goja.Object { + v := vm.Get(name) + if v == nil { + return nil } - panic(val) + return v.ToObject(vm) } diff --git a/p2p/discv5/sim_testmain_test.go b/console/bridge_test.go similarity index 53% rename from p2p/discv5/sim_testmain_test.go rename to console/bridge_test.go index 77e751c4..e57e294f 100644 --- a/p2p/discv5/sim_testmain_test.go +++ b/console/bridge_test.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,35 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build go1.4,nacl,faketime_simulation - -package discv5 +package console import ( - "os" - "runtime" "testing" - "unsafe" + + "github.com/dop251/goja" + "github.com/ethereum/go-ethereum/internal/jsre" ) -// Enable fake time mode in the runtime, like on the go playground. -// There is a slight chance that this won't work because some go code -// might have executed before the variable is set. +// TestUndefinedAsParam ensures that personal functions can receive +// `undefined` as a parameter. +func TestUndefinedAsParam(t *testing.T) { + b := bridge{} + call := jsre.Call{} + call.Arguments = []goja.Value{goja.Undefined()} -//go:linkname faketime runtime.faketime -var faketime = 1 + b.UnlockAccount(call) + b.Sign(call) + b.Sleep(call) +} -func TestMain(m *testing.M) { - // We need to use unsafe somehow in order to get access to go:linkname. - _ = unsafe.Sizeof(0) +// TestNullAsParam ensures that personal functions can receive +// `null` as a parameter. +func TestNullAsParam(t *testing.T) { + b := bridge{} + call := jsre.Call{} + call.Arguments = []goja.Value{goja.Null()} - // Run the actual test. runWithPlaygroundTime ensures that the only test - // that runs is the one calling it. - runtime.GOMAXPROCS(8) - os.Exit(m.Run()) + b.UnlockAccount(call) + b.Sign(call) + b.Sleep(call) } diff --git a/console/console.go b/console/console.go index a6c7d8e3..7b9ed27e 100644 --- a/console/console.go +++ b/console/console.go @@ -17,27 +17,31 @@ package console import ( + "errors" "fmt" "io" - "io/ioutil" "os" "os/signal" "path/filepath" "regexp" "sort" "strings" + "sync" "syscall" - "github.com/cryptoecc/ETH-ECC/internal/jsre" - "github.com/cryptoecc/ETH-ECC/internal/web3ext" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/dop251/goja" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/internal/jsre" + "github.com/ethereum/go-ethereum/internal/jsre/deps" + "github.com/ethereum/go-ethereum/internal/web3ext" + "github.com/ethereum/go-ethereum/rpc" "github.com/mattn/go-colorable" "github.com/peterh/liner" - "github.com/robertkrimen/otto" ) var ( - passwordRegexp = regexp.MustCompile(`personal.[nus]`) + // u: unlock, s: signXX, sendXX, n: newAccount, i: importXX + passwordRegexp = regexp.MustCompile(`personal.[nusi]`) onlyWhitespace = regexp.MustCompile(`^\s*$`) exit = regexp.MustCompile(`^\s*exit\s*;*\s*$`) ) @@ -51,26 +55,33 @@ const DefaultPrompt = "> " // Config is the collection of configurations to fine tune the behavior of the // JavaScript console. type Config struct { - DataDir string // Data directory to store the console history at - DocRoot string // Filesystem path from where to load JavaScript files from - Client *rpc.Client // RPC client to execute Ethereum requests through - Prompt string // Input prompt prefix string (defaults to DefaultPrompt) - Prompter UserPrompter // Input prompter to allow interactive user feedback (defaults to TerminalPrompter) - Printer io.Writer // Output writer to serialize any display strings to (defaults to os.Stdout) - Preload []string // Absolute paths to JavaScript files to preload + DataDir string // Data directory to store the console history at + DocRoot string // Filesystem path from where to load JavaScript files from + Client *rpc.Client // RPC client to execute Ethereum requests through + Prompt string // Input prompt prefix string (defaults to DefaultPrompt) + Prompter prompt.UserPrompter // Input prompter to allow interactive user feedback (defaults to TerminalPrompter) + Printer io.Writer // Output writer to serialize any display strings to (defaults to os.Stdout) + Preload []string // Absolute paths to JavaScript files to preload } // Console is a JavaScript interpreted runtime environment. It is a fully fledged // JavaScript console attached to a running node via an external or in-process RPC // client. type Console struct { - client *rpc.Client // RPC client to execute Ethereum requests through - jsre *jsre.JSRE // JavaScript runtime environment running the interpreter - prompt string // Input prompt prefix string - prompter UserPrompter // Input prompter to allow interactive user feedback - histPath string // Absolute path to the console scrollback history - history []string // Scroll history maintained by the console - printer io.Writer // Output writer to serialize any display strings to + client *rpc.Client // RPC client to execute Ethereum requests through + jsre *jsre.JSRE // JavaScript runtime environment running the interpreter + prompt string // Input prompt prefix string + prompter prompt.UserPrompter // Input prompter to allow interactive user feedback + histPath string // Absolute path to the console scrollback history + history []string // Scroll history maintained by the console + printer io.Writer // Output writer to serialize any display strings to + + interactiveStopped chan struct{} + stopInteractiveCh chan struct{} + signalReceived chan struct{} + stopped chan struct{} + wg sync.WaitGroup + stopOnce sync.Once } // New initializes a JavaScript interpreted runtime environment and sets defaults @@ -78,7 +89,7 @@ type Console struct { func New(config Config) (*Console, error) { // Handle unset config values gracefully if config.Prompter == nil { - config.Prompter = Stdin + config.Prompter = prompt.Stdin } if config.Prompt == "" { config.Prompt = DefaultPrompt @@ -86,14 +97,19 @@ func New(config Config) (*Console, error) { if config.Printer == nil { config.Printer = colorable.NewColorableStdout() } + // Initialize the console and return console := &Console{ - client: config.Client, - jsre: jsre.New(config.DocRoot, config.Printer), - prompt: config.Prompt, - prompter: config.Prompter, - printer: config.Printer, - histPath: filepath.Join(config.DataDir, HistoryFile), + client: config.Client, + jsre: jsre.New(config.DocRoot, config.Printer), + prompt: config.Prompt, + prompter: config.Prompter, + printer: config.Printer, + histPath: filepath.Join(config.DataDir, HistoryFile), + interactiveStopped: make(chan struct{}), + stopInteractiveCh: make(chan struct{}), + signalReceived: make(chan struct{}, 1), + stopped: make(chan struct{}), } if err := os.MkdirAll(config.DataDir, 0700); err != nil { return nil, err @@ -101,126 +117,149 @@ func New(config Config) (*Console, error) { if err := console.init(config.Preload); err != nil { return nil, err } + + console.wg.Add(1) + go console.interruptHandler() + return console, nil } // init retrieves the available APIs from the remote RPC provider and initializes // the console's JavaScript namespaces based on the exposed modules. func (c *Console) init(preload []string) error { - // Initialize the JavaScript <-> Go RPC bridge + c.initConsoleObject() + + // Initialize the JavaScript <-> Go RPC bridge. bridge := newBridge(c.client, c.prompter, c.printer) - c.jsre.Set("jeth", struct{}{}) + if err := c.initWeb3(bridge); err != nil { + return err + } + if err := c.initExtensions(); err != nil { + return err + } - jethObj, _ := c.jsre.Get("jeth") - jethObj.Object().Set("send", bridge.Send) - jethObj.Object().Set("sendAsync", bridge.Send) + // Add bridge overrides for web3.js functionality. + c.jsre.Do(func(vm *goja.Runtime) { + c.initAdmin(vm, bridge) + c.initPersonal(vm, bridge) + }) - consoleObj, _ := c.jsre.Get("console") - consoleObj.Object().Set("log", c.consoleOutput) - consoleObj.Object().Set("error", c.consoleOutput) + // Preload JavaScript files. + for _, path := range preload { + if err := c.jsre.Exec(path); err != nil { + failure := err.Error() + if gojaErr, ok := err.(*goja.Exception); ok { + failure = gojaErr.String() + } + return fmt.Errorf("%s: %v", path, failure) + } + } + + // Configure the input prompter for history and tab completion. + if c.prompter != nil { + if content, err := os.ReadFile(c.histPath); err != nil { + c.prompter.SetHistory(nil) + } else { + c.history = strings.Split(string(content), "\n") + c.prompter.SetHistory(c.history) + } + c.prompter.SetWordCompleter(c.AutoCompleteInput) + } + return nil +} + +func (c *Console) initConsoleObject() { + c.jsre.Do(func(vm *goja.Runtime) { + console := vm.NewObject() + console.Set("log", c.consoleOutput) + console.Set("error", c.consoleOutput) + vm.Set("console", console) + }) +} - // Load all the internal utility JavaScript libraries - if err := c.jsre.Compile("bignumber.js", jsre.BignumberJs); err != nil { +func (c *Console) initWeb3(bridge *bridge) error { + if err := c.jsre.Compile("bignumber.js", deps.BigNumberJS); err != nil { return fmt.Errorf("bignumber.js: %v", err) } - if err := c.jsre.Compile("web3.js", jsre.Web3Js); err != nil { + if err := c.jsre.Compile("web3.js", deps.Web3JS); err != nil { return fmt.Errorf("web3.js: %v", err) } if _, err := c.jsre.Run("var Web3 = require('web3');"); err != nil { return fmt.Errorf("web3 require: %v", err) } - if _, err := c.jsre.Run("var web3 = new Web3(jeth);"); err != nil { - return fmt.Errorf("web3 provider: %v", err) - } - // Load the supported APIs into the JavaScript runtime environment + var err error + c.jsre.Do(func(vm *goja.Runtime) { + transport := vm.NewObject() + transport.Set("send", jsre.MakeCallback(vm, bridge.Send)) + transport.Set("sendAsync", jsre.MakeCallback(vm, bridge.Send)) + vm.Set("_consoleWeb3Transport", transport) + _, err = vm.RunString("var web3 = new Web3(_consoleWeb3Transport)") + }) + return err +} + +// initExtensions loads and registers web3.js extensions. +func (c *Console) initExtensions() error { + // Compute aliases from server-provided modules. apis, err := c.client.SupportedModules() if err != nil { return fmt.Errorf("api modules: %v", err) } - flatten := "var eth = web3.eth; var personal = web3.personal; " + aliases := map[string]struct{}{"eth": {}, "personal": {}} for api := range apis { if api == "web3" { - continue // manually mapped or ignore + continue } + aliases[api] = struct{}{} if file, ok := web3ext.Modules[api]; ok { - // Load our extension for the module. - if err = c.jsre.Compile(fmt.Sprintf("%s.js", api), file); err != nil { + if err = c.jsre.Compile(api+".js", file); err != nil { return fmt.Errorf("%s.js: %v", api, err) } - flatten += fmt.Sprintf("var %s = web3.%s; ", api, api) - } else if obj, err := c.jsre.Run("web3." + api); err == nil && obj.IsObject() { - // Enable web3.js built-in extension if available. - flatten += fmt.Sprintf("var %s = web3.%s; ", api, api) } } - if _, err = c.jsre.Run(flatten); err != nil { - return fmt.Errorf("namespace flattening: %v", err) - } - // Initialize the global name register (disabled for now) - //c.jsre.Run(`var GlobalRegistrar = eth.contract(` + registrar.GlobalRegistrarAbi + `); registrar = GlobalRegistrar.at("` + registrar.GlobalRegistrarAddr + `");`) - // If the console is in interactive mode, instrument password related methods to query the user - if c.prompter != nil { - // Retrieve the account management object to instrument - personal, err := c.jsre.Get("personal") - if err != nil { - return err - } - // Override the openWallet, unlockAccount, newAccount and sign methods since - // these require user interaction. Assign these method in the Console the - // original web3 callbacks. These will be called by the jeth.* methods after - // they got the password from the user and send the original web3 request to - // the backend. - if obj := personal.Object(); obj != nil { // make sure the personal api is enabled over the interface - if _, err = c.jsre.Run(`jeth.openWallet = personal.openWallet;`); err != nil { - return fmt.Errorf("personal.openWallet: %v", err) + // Apply aliases. + c.jsre.Do(func(vm *goja.Runtime) { + web3 := getObject(vm, "web3") + for name := range aliases { + if v := web3.Get(name); v != nil { + vm.Set(name, v) } - if _, err = c.jsre.Run(`jeth.unlockAccount = personal.unlockAccount;`); err != nil { - return fmt.Errorf("personal.unlockAccount: %v", err) - } - if _, err = c.jsre.Run(`jeth.newAccount = personal.newAccount;`); err != nil { - return fmt.Errorf("personal.newAccount: %v", err) - } - if _, err = c.jsre.Run(`jeth.sign = personal.sign;`); err != nil { - return fmt.Errorf("personal.sign: %v", err) - } - obj.Set("openWallet", bridge.OpenWallet) - obj.Set("unlockAccount", bridge.UnlockAccount) - obj.Set("newAccount", bridge.NewAccount) - obj.Set("sign", bridge.Sign) - } - } - // The admin.sleep and admin.sleepBlocks are offered by the console and not by the RPC layer. - admin, err := c.jsre.Get("admin") - if err != nil { - return err - } - if obj := admin.Object(); obj != nil { // make sure the admin api is enabled over the interface - obj.Set("sleepBlocks", bridge.SleepBlocks) - obj.Set("sleep", bridge.Sleep) - obj.Set("clearHistory", c.clearHistory) - } - // Preload any JavaScript files before starting the console - for _, path := range preload { - if err := c.jsre.Exec(path); err != nil { - failure := err.Error() - if ottoErr, ok := err.(*otto.Error); ok { - failure = ottoErr.String() - } - return fmt.Errorf("%s: %v", path, failure) } + }) + return nil +} + +// initAdmin creates additional admin APIs implemented by the bridge. +func (c *Console) initAdmin(vm *goja.Runtime, bridge *bridge) { + if admin := getObject(vm, "admin"); admin != nil { + admin.Set("sleepBlocks", jsre.MakeCallback(vm, bridge.SleepBlocks)) + admin.Set("sleep", jsre.MakeCallback(vm, bridge.Sleep)) + admin.Set("clearHistory", c.clearHistory) } - // Configure the console's input prompter for scrollback and tab completion - if c.prompter != nil { - if content, err := ioutil.ReadFile(c.histPath); err != nil { - c.prompter.SetHistory(nil) - } else { - c.history = strings.Split(string(content), "\n") - c.prompter.SetHistory(c.history) - } - c.prompter.SetWordCompleter(c.AutoCompleteInput) +} + +// initPersonal redirects account-related API methods through the bridge. +// +// If the console is in interactive mode and the 'personal' API is available, override +// the openWallet, unlockAccount, newAccount and sign methods since these require user +// interaction. The original web3 callbacks are stored in 'jeth'. These will be called +// by the bridge after the prompt and send the original web3 request to the backend. +func (c *Console) initPersonal(vm *goja.Runtime, bridge *bridge) { + personal := getObject(vm, "personal") + if personal == nil || c.prompter == nil { + return } - return nil + jeth := vm.NewObject() + vm.Set("jeth", jeth) + jeth.Set("openWallet", personal.Get("openWallet")) + jeth.Set("unlockAccount", personal.Get("unlockAccount")) + jeth.Set("newAccount", personal.Get("newAccount")) + jeth.Set("sign", personal.Get("sign")) + personal.Set("openWallet", jsre.MakeCallback(vm, bridge.OpenWallet)) + personal.Set("unlockAccount", jsre.MakeCallback(vm, bridge.UnlockAccount)) + personal.Set("newAccount", jsre.MakeCallback(vm, bridge.NewAccount)) + personal.Set("sign", jsre.MakeCallback(vm, bridge.Sign)) } func (c *Console) clearHistory() { @@ -235,13 +274,13 @@ 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 { +func (c *Console) consoleOutput(call goja.FunctionCall) goja.Value { var output []string - for _, argument := range call.ArgumentList { + for _, argument := range call.Arguments { output = append(output, fmt.Sprintf("%v", argument)) } fmt.Fprintln(c.printer, strings.Join(output, " ")) - return otto.Value{} + return goja.Null() } // AutoCompleteInput is a pre-assembled word completer to be used by the user @@ -251,7 +290,7 @@ func (c *Console) AutoCompleteInput(line string, pos int) (string, []string, str if len(line) == 0 || pos == 0 { return "", nil, "" } - // Chunck data to relevant part for autocompletion + // Chunk data to relevant part for autocompletion // E.g. in case of nested lines eth.getBalance(eth.coinb start := pos - 1 for ; start > 0; start-- { @@ -299,80 +338,137 @@ func (c *Console) Welcome() { sort.Strings(modules) message += " modules: " + strings.Join(modules, " ") + "\n" } + message += "\nTo exit, press ctrl-d or type exit" fmt.Fprintln(c.printer, message) } // Evaluate executes code and pretty prints the result to the specified output // stream. -func (c *Console) Evaluate(statement string) error { +func (c *Console) Evaluate(statement string) { defer func() { if r := recover(); r != nil { fmt.Fprintf(c.printer, "[native] error: %v\n", r) } }() - return c.jsre.Evaluate(statement, c.printer) + c.jsre.Evaluate(statement, c.printer) + + // Avoid exiting Interactive when jsre was interrupted by SIGINT. + c.clearSignalReceived() } -// Interactive starts an interactive user session, where input is propted from +// interruptHandler runs in its own goroutine and waits for signals. +// When a signal is received, it interrupts the JS interpreter. +func (c *Console) interruptHandler() { + defer c.wg.Done() + + // During Interactive, liner inhibits the signal while it is prompting for + // input. However, the signal will be received while evaluating JS. + // + // On unsupported terminals, SIGINT can also happen while prompting. + // Unfortunately, it is not possible to abort the prompt in this case and + // the c.readLines goroutine leaks. + sig := make(chan os.Signal, 1) + signal.Notify(sig, syscall.SIGINT) + defer signal.Stop(sig) + + for { + select { + case <-sig: + c.setSignalReceived() + c.jsre.Interrupt(errors.New("interrupted")) + case <-c.stopInteractiveCh: + close(c.interactiveStopped) + c.jsre.Interrupt(errors.New("interrupted")) + case <-c.stopped: + return + } + } +} + +func (c *Console) setSignalReceived() { + select { + case c.signalReceived <- struct{}{}: + default: + } +} + +func (c *Console) clearSignalReceived() { + select { + case <-c.signalReceived: + default: + } +} + +// StopInteractive causes Interactive to return as soon as possible. +func (c *Console) StopInteractive() { + select { + case c.stopInteractiveCh <- struct{}{}: + case <-c.stopped: + } +} + +// Interactive starts an interactive user session, where input is prompted from // the configured user prompter. func (c *Console) Interactive() { var ( - prompt = c.prompt // Current prompt line (used for multi-line inputs) - indents = 0 // Current number of input indents (used for multi-line inputs) - input = "" // Current user input - scheduler = make(chan string) // Channel to send the next prompt on and receive the input + prompt = c.prompt // the current prompt line (used for multi-line inputs) + indents = 0 // the current number of input indents (used for multi-line inputs) + input = "" // the current user input + inputLine = make(chan string, 1) // receives user input + inputErr = make(chan error, 1) // receives liner errors + requestLine = make(chan string) // requests a line of input ) - // Start a goroutine to listen for prompt requests and send back inputs - go func() { - for { - // Read the next user input - line, err := c.prompter.PromptInput(<-scheduler) - if err != nil { - // In case of an error, either clear the prompt or fail - if err == liner.ErrPromptAborted { // ctrl-C - prompt, indents, input = c.prompt, 0, "" - scheduler <- "" - continue - } - close(scheduler) - return - } - // User input retrieved, send for interpretation and loop - scheduler <- line - } + + defer func() { + c.writeHistory() }() - // Monitor Ctrl-C too in case the input is empty and we need to bail - abort := make(chan os.Signal, 1) - signal.Notify(abort, syscall.SIGINT, syscall.SIGTERM) - // Start sending prompts to the user and reading back inputs + // The line reader runs in a separate goroutine. + go c.readLines(inputLine, inputErr, requestLine) + defer close(requestLine) + for { - // Send the next prompt, triggering an input read and process the result - scheduler <- prompt + // Send the next prompt, triggering an input read. + requestLine <- prompt + select { - case <-abort: - // User forcefully quite the console + case <-c.interactiveStopped: + fmt.Fprintln(c.printer, "node is down, exiting console") + return + + case <-c.signalReceived: + // SIGINT received while prompting for input -> unsupported terminal. + // I'm not sure if the best choice would be to leave the console running here. + // Bash keeps running in this case. node.js does not. fmt.Fprintln(c.printer, "caught interrupt, exiting") return - case line, ok := <-scheduler: - // User input was returned by the prompter, handle special cases - if !ok || (indents <= 0 && exit.MatchString(line)) { + case err := <-inputErr: + if err == liner.ErrPromptAborted { + // When prompting for multi-line input, the first Ctrl-C resets + // the multi-line state. + prompt, indents, input = c.prompt, 0, "" + continue + } + return + + case line := <-inputLine: + // User input was returned by the prompter, handle special cases. + if indents <= 0 && exit.MatchString(line) { return } if onlyWhitespace.MatchString(line) { continue } - // Append the line to the input and check for multi-line interpretation + // Append the line to the input and check for multi-line interpretation. input += line + "\n" - indents = countIndents(input) if indents <= 0 { prompt = c.prompt } else { prompt = strings.Repeat(".", indents*3) + " " } - // If all the needed lines are present, save the command and run + // If all the needed lines are present, save the command and run it. if indents <= 0 { if len(input) > 0 && input[0] != ' ' && !passwordRegexp.MatchString(input) { if command := strings.TrimSpace(input); len(c.history) == 0 || command != c.history[len(c.history)-1] { @@ -389,7 +485,19 @@ func (c *Console) Interactive() { } } -// countIndents returns the number of identations for the given input. +// readLines runs in its own goroutine, prompting for input. +func (c *Console) readLines(input chan<- string, errc chan<- error, prompt <-chan string) { + for p := range prompt { + line, err := c.prompter.PromptInput(p) + if err != nil { + errc <- err + } else { + input <- line + } + } +} + +// countIndents returns the number of indentations for the given input. // In case of invalid input such as var a = } the result can be negative. func countIndents(input string) int { var ( @@ -432,19 +540,21 @@ func countIndents(input string) int { return indents } -// Execute runs the JavaScript file specified as the argument. -func (c *Console) Execute(path string) error { - return c.jsre.Exec(path) -} - // Stop cleans up the console and terminates the runtime environment. func (c *Console) Stop(graceful bool) error { - if err := ioutil.WriteFile(c.histPath, []byte(strings.Join(c.history, "\n")), 0600); err != nil { - return err - } - if err := os.Chmod(c.histPath, 0600); err != nil { // Force 0600, even if it was different previously - return err - } + c.stopOnce.Do(func() { + // Stop the interrupt handler. + close(c.stopped) + c.wg.Wait() + }) + c.jsre.Stop(graceful) return nil } + +func (c *Console) writeHistory() error { + if err := os.WriteFile(c.histPath, []byte(strings.Join(c.history, "\n")), 0600); err != nil { + return err + } + return os.Chmod(c.histPath, 0600) // Force 0600, even if it was different previously +} diff --git a/console/console_test.go b/console/console_test.go index a333df36..35341fcb 100644 --- a/console/console_test.go +++ b/console/console_test.go @@ -20,19 +20,20 @@ import ( "bytes" "errors" "fmt" - "io/ioutil" "os" "strings" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/internal/jsre" - "github.com/cryptoecc/ETH-ECC/miner" - "github.com/cryptoecc/ETH-ECC/node" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/internal/jsre" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" ) const ( @@ -67,10 +68,10 @@ func (p *hookedPrompter) PromptPassword(prompt string) (string, error) { func (p *hookedPrompter) PromptConfirm(prompt string) (bool, error) { return false, errors.New("not implemented") } -func (p *hookedPrompter) SetHistory(history []string) {} -func (p *hookedPrompter) AppendHistory(command string) {} -func (p *hookedPrompter) ClearHistory() {} -func (p *hookedPrompter) SetWordCompleter(completer WordCompleter) {} +func (p *hookedPrompter) SetHistory(history []string) {} +func (p *hookedPrompter) AppendHistory(command string) {} +func (p *hookedPrompter) ClearHistory() {} +func (p *hookedPrompter) SetWordCompleter(completer prompt.WordCompleter) {} // tester is a console test environment for the console tests to operate on. type tester struct { @@ -84,20 +85,17 @@ type tester struct { // newTester creates a test environment based on which the console can operate. // Please ensure you call Close() on the returned tester to avoid leaks. -func newTester(t *testing.T, confOverride func(*eth.Config)) *tester { +func newTester(t *testing.T, confOverride func(*ethconfig.Config)) *tester { // Create a temporary storage for the node keys and initialize it - workspace, err := ioutil.TempDir("", "console-tester-") - if err != nil { - t.Fatalf("failed to create temporary keystore: %v", err) - } + workspace := t.TempDir() // Create a networkless protocol stack and start an Ethereum service within stack, err := node.New(&node.Config{DataDir: workspace, UseLightweightKDF: true, Name: testInstance}) if err != nil { t.Fatalf("failed to create node: %v", err) } - ethConf := ð.Config{ - Genesis: core.DeveloperGenesisBlock(15, common.Address{}), + ethConf := ðconfig.Config{ + Genesis: core.DeveloperGenesisBlock(15, 11_500_000, common.Address{}), Miner: miner.Config{ Etherbase: common.HexToAddress(testAddress), }, @@ -108,7 +106,8 @@ func newTester(t *testing.T, confOverride func(*eth.Config)) *tester { if confOverride != nil { confOverride(ethConf) } - if err = stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { return eth.New(ctx, ethConf) }); err != nil { + ethBackend, err := eth.New(stack, ethConf) + if err != nil { t.Fatalf("failed to register Ethereum protocol: %v", err) } // Start the node and assemble the JavaScript console around it @@ -134,13 +133,10 @@ func newTester(t *testing.T, confOverride func(*eth.Config)) *tester { t.Fatalf("failed to create JavaScript console: %v", err) } // Create the final tester and return - var ethereum *eth.Ethereum - stack.Service(ðereum) - return &tester{ workspace: workspace, stack: stack, - ethereum: ethereum, + ethereum: ethBackend, console: console, input: prompter, output: printer, @@ -238,19 +234,6 @@ func TestPreload(t *testing.T) { } } -// Tests that JavaScript scripts can be executes from the configured asset path. -func TestExecute(t *testing.T) { - tester := newTester(t, nil) - defer tester.Close(t) - - tester.console.Execute("exec.js") - - tester.console.Evaluate("execed") - if output := tester.output.String(); !strings.Contains(output, "some-executed-string") { - t.Fatalf("execed variable missing: have %s, want %s", output, "some-executed-string") - } -} - // Tests that the JavaScript objects returned by statement executions are properly // pretty printed instead of just displaying "[object]". func TestPrettyPrint(t *testing.T) { @@ -289,7 +272,7 @@ func TestPrettyError(t *testing.T) { defer tester.Close(t) tester.console.Evaluate("throw 'hello'") - want := jsre.ErrorColor("hello") + "\n" + want := jsre.ErrorColor("hello") + "\n\tat :1:1(1)\n\n" if output := tester.output.String(); output != want { t.Fatalf("pretty error mismatch: have %s, want %s", output, want) } diff --git a/console/prompter.go b/console/prompt/prompter.go similarity index 98% rename from console/prompter.go rename to console/prompt/prompter.go index 65675061..2a20b690 100644 --- a/console/prompter.go +++ b/console/prompt/prompter.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 console +package prompt import ( "fmt" @@ -143,7 +143,7 @@ func (p *terminalPrompter) PromptPassword(prompt string) (passwd string, err err // choice to be made, returning that choice. func (p *terminalPrompter) PromptConfirm(prompt string) (bool, error) { input, err := p.Prompt(prompt + " [y/n] ") - if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" { + if len(input) > 0 && strings.EqualFold(input[:1], "y") { return true, nil } return false, err diff --git a/console/testdata/exec.js b/console/testdata/exec.js deleted file mode 100644 index 59e34d7c..00000000 --- a/console/testdata/exec.js +++ /dev/null @@ -1 +0,0 @@ -var execed = "some-executed-string"; diff --git a/contracts/checkpointoracle/contract/oracle.go b/contracts/checkpointoracle/contract/oracle.go index 43982fdf..a4a308f5 100644 --- a/contracts/checkpointoracle/contract/oracle.go +++ b/contracts/checkpointoracle/contract/oracle.go @@ -7,12 +7,12 @@ import ( "math/big" "strings" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" + 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. @@ -20,7 +20,6 @@ var ( _ = big.NewInt _ = strings.NewReader _ = ethereum.NotFound - _ = abi.U256 _ = bind.Bind _ = common.Big1 _ = types.BloomLookup @@ -28,10 +27,17 @@ var ( ) // 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\"}]" +const CheckpointOracleABI = "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_adminlist\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_sectionSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_processConfirms\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"checkpointHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"NewCheckpointVote\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GetAllAdmin\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetLatestCheckpoint\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_recentNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_recentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sectionIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint8[]\",\"name\":\"v\",\"type\":\"uint8[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"r\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"s\",\"type\":\"bytes32[]\"}],\"name\":\"SetCheckpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + +// CheckpointOracleFuncSigs maps the 4-byte function signature to its string representation. +var CheckpointOracleFuncSigs = map[string]string{ + "45848dfc": "GetAllAdmin()", + "4d6a304c": "GetLatestCheckpoint()", + "d459fc46": "SetCheckpoint(uint256,bytes32,bytes32,uint64,uint8[],bytes32[],bytes32[])", +} // CheckpointOracleBin is the compiled bytecode used for deploying new contracts. -const CheckpointOracleBin = `0x608060405234801561001057600080fd5b506040516108153803806108158339818101604052608081101561003357600080fd5b81019080805164010000000081111561004b57600080fd5b8201602081018481111561005e57600080fd5b815185602082028301116401000000008211171561007b57600080fd5b505060208201516040830151606090930151919450925060005b84518110156101415760016000808784815181106100af57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060018582815181106100fc57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610095565b50600592909255600655600755506106b78061015e6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806345848dfc146100465780634d6a304c1461009e578063d459fc46146100cf575b600080fd5b61004e6102b0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561008a578181015183820152602001610072565b505050509050019250505060405180910390f35b6100a661034f565b6040805167ffffffffffffffff9094168452602084019290925282820152519081900360600190f35b61029c600480360360e08110156100e557600080fd5b81359160208101359160408201359167ffffffffffffffff6060820135169181019060a08101608082013564010000000081111561012257600080fd5b82018360208201111561013457600080fd5b8035906020019184602083028401116401000000008311171561015657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156101a657600080fd5b8201836020820111156101b857600080fd5b803590602001918460208302840111640100000000831117156101da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561022a57600080fd5b82018360208201111561023c57600080fd5b8035906020019184602083028401116401000000008311171561025e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061036a945050505050565b604080519115158252519081900360200190f35b6060806001805490506040519080825280602002602001820160405280156102e2578160200160208202803883390190505b50905060005b60015481101561034957600181815481106102ff57fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061032957fe5b6001600160a01b03909216602092830291909101909101526001016102e8565b50905090565b60025460045460035467ffffffffffffffff90921691909192565b3360009081526020819052604081205460ff1661038657600080fd5b8688401461039357600080fd5b82518451146103a157600080fd5b81518451146103af57600080fd5b6006546005548660010167ffffffffffffffff1602014310156103d457506000610677565b60025467ffffffffffffffff90811690861610156103f457506000610677565b60025467ffffffffffffffff8681169116148015610426575067ffffffffffffffff8516151580610426575060035415155b1561043357506000610677565b8561044057506000610677565b60408051601960f81b6020808301919091526000602183018190523060601b60228401526001600160c01b031960c08a901b166036840152603e8084018b905284518085039091018152605e909301909352815191012090805b86518110156106715760006001848984815181106104b457fe5b60200260200101518985815181106104c857fe5b60200260200101518986815181106104dc57fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561053b573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526020819052919091205490925060ff16905061057057600080fd5b826001600160a01b0316816001600160a01b03161161058e57600080fd5b8092508867ffffffffffffffff167fce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a418b8a85815181106105ca57fe5b60200260200101518a86815181106105de57fe5b60200260200101518a87815181106105f257fe5b6020026020010151604051808581526020018460ff1660ff16815260200183815260200182815260200194505050505060405180910390a260075482600101106106685750505060048790555050436003556002805467ffffffffffffffff191667ffffffffffffffff86161790556001610677565b5060010161049a565b50600080fd5b97965050505050505056fea265627a7a723058207f6a191ce575596a2f1e907c8c0a01003d16b69fb2c4f432d10878e8c0a99a0264736f6c634300050a0032` +var CheckpointOracleBin = "0x608060405234801561001057600080fd5b506040516108703803806108708339818101604052608081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825186602082028301116401000000008211171561008557600080fd5b82525081516020918201928201910280838360005b838110156100b257818101518382015260200161009a565b50505050919091016040908152602083015190830151606090930151909450919250600090505b84518110156101855760016000808784815181106100f357fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600185828151811061014057fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b0390931692909217909155016100d9565b50600592909255600655600755506106ce806101a26000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806345848dfc146100465780634d6a304c1461009e578063d459fc46146100cf575b600080fd5b61004e6102b0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561008a578181015183820152602001610072565b505050509050019250505060405180910390f35b6100a6610365565b6040805167ffffffffffffffff9094168452602084019290925282820152519081900360600190f35b61029c600480360360e08110156100e557600080fd5b81359160208101359160408201359167ffffffffffffffff6060820135169181019060a08101608082013564010000000081111561012257600080fd5b82018360208201111561013457600080fd5b8035906020019184602083028401116401000000008311171561015657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156101a657600080fd5b8201836020820111156101b857600080fd5b803590602001918460208302840111640100000000831117156101da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561022a57600080fd5b82018360208201111561023c57600080fd5b8035906020019184602083028401116401000000008311171561025e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610380945050505050565b604080519115158252519081900360200190f35b600154606090819067ffffffffffffffff811180156102ce57600080fd5b506040519080825280602002602001820160405280156102f8578160200160208202803683370190505b50905060005b60015481101561035f576001818154811061031557fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061033f57fe5b6001600160a01b03909216602092830291909101909101526001016102fe565b50905090565b60025460045460035467ffffffffffffffff90921691909192565b3360009081526020819052604081205460ff1661039c57600080fd5b868840146103a957600080fd5b82518451146103b757600080fd5b81518451146103c557600080fd5b6006546005548660010167ffffffffffffffff1602014310156103ea5750600061068d565b60025467ffffffffffffffff908116908616101561040a5750600061068d565b60025467ffffffffffffffff868116911614801561043c575067ffffffffffffffff851615158061043c575060035415155b156104495750600061068d565b856104565750600061068d565b60408051601960f81b6020808301919091526000602183018190523060601b60228401526001600160c01b031960c08a901b166036840152603e8084018b905284518085039091018152605e909301909352815191012090805b86518110156106875760006001848984815181106104ca57fe5b60200260200101518985815181106104de57fe5b60200260200101518986815181106104f257fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610551573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526020819052919091205490925060ff16905061058657600080fd5b826001600160a01b0316816001600160a01b0316116105a457600080fd5b8092508867ffffffffffffffff167fce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a418b8a85815181106105e057fe5b60200260200101518a86815181106105f457fe5b60200260200101518a878151811061060857fe5b6020026020010151604051808581526020018460ff1660ff16815260200183815260200182815260200194505050505060405180910390a2600754826001011061067e5750505060048790555050436003556002805467ffffffffffffffff191667ffffffffffffffff8616179055600161068d565b506001016104b0565b50600080fd5b97965050505050505056fea26469706673582212202ddf9eda76bf59c0fc65584c0b22d84ecef2c703765de60439596d6ac34c2b7264736f6c634300060b0033" // 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) { @@ -39,6 +45,7 @@ func DeployCheckpointOracle(auth *bind.TransactOpts, backend bind.ContractBacken 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 @@ -154,7 +161,7 @@ func bindCheckpointOracle(address common.Address, caller bind.ContractCaller, tr // 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 { +func (_CheckpointOracle *CheckpointOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { return _CheckpointOracle.Contract.CheckpointOracleCaller.contract.Call(opts, result, method, params...) } @@ -173,7 +180,7 @@ func (_CheckpointOracle *CheckpointOracleRaw) Transact(opts *bind.TransactOpts, // 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 { +func (_CheckpointOracle *CheckpointOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { return _CheckpointOracle.Contract.contract.Call(opts, result, method, params...) } @@ -190,58 +197,64 @@ func (_CheckpointOracle *CheckpointOracleTransactorRaw) Transact(opts *bind.Tran // GetAllAdmin is a free data retrieval call binding the contract method 0x45848dfc. // -// Solidity: function GetAllAdmin() constant returns(address[]) +// Solidity: function GetAllAdmin() view 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 + var out []interface{} + err := _CheckpointOracle.contract.Call(opts, &out, "GetAllAdmin") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + } // GetAllAdmin is a free data retrieval call binding the contract method 0x45848dfc. // -// Solidity: function GetAllAdmin() constant returns(address[]) +// Solidity: function GetAllAdmin() view 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[]) +// Solidity: function GetAllAdmin() view 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) +// Solidity: function GetLatestCheckpoint() view 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, + var out []interface{} + err := _CheckpointOracle.contract.Call(opts, &out, "GetLatestCheckpoint") + + if err != nil { + return *new(uint64), *new([32]byte), *new(*big.Int), err } - err := _CheckpointOracle.contract.Call(opts, out, "GetLatestCheckpoint") - return *ret0, *ret1, *ret2, err + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out1 := *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return out0, out1, out2, err + } // GetLatestCheckpoint is a free data retrieval call binding the contract method 0x4d6a304c. // -// Solidity: function GetLatestCheckpoint() constant returns(uint64, bytes32, uint256) +// Solidity: function GetLatestCheckpoint() view 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) +// Solidity: function GetLatestCheckpoint() view returns(uint64, bytes32, uint256) func (_CheckpointOracle *CheckpointOracleCallerSession) GetLatestCheckpoint() (uint64, [32]byte, *big.Int, error) { return _CheckpointOracle.Contract.GetLatestCheckpoint(&_CheckpointOracle.CallOpts) } diff --git a/contracts/checkpointoracle/contract/oracle.sol b/contracts/checkpointoracle/contract/oracle.sol index 01064472..65bac09d 100644 --- a/contracts/checkpointoracle/contract/oracle.sol +++ b/contracts/checkpointoracle/contract/oracle.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.10; +pragma solidity ^0.6.0; /** * @title CheckpointOracle diff --git a/contracts/checkpointoracle/oracle.go b/contracts/checkpointoracle/oracle.go index a2e54949..dec01db2 100644 --- a/contracts/checkpointoracle/oracle.go +++ b/contracts/checkpointoracle/oracle.go @@ -17,20 +17,22 @@ // 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 +//go:generate solc contract/oracle.sol --combined-json bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc,metadata,hashes --optimize -o ./ --overwrite +//go:generate go run ../../cmd/abigen --pkg contract --out contract/oracle.go --combined-json ./combined.json import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle/contract" - "github.com/cryptoecc/ETH-ECC/core/types" + "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. +// CheckpointOracle is a Go wrapper around an on-chain checkpoint oracle contract. type CheckpointOracle struct { + address common.Address contract *contract.CheckpointOracle } @@ -40,7 +42,12 @@ func NewCheckpointOracle(contractAddr common.Address, backend bind.ContractBacke if err != nil { return nil, err } - return &CheckpointOracle{contract: c}, nil + return &CheckpointOracle{address: contractAddr, contract: c}, nil +} + +// ContractAddr returns the address of contract. +func (oracle *CheckpointOracle) ContractAddr() common.Address { + return oracle.address } // Contract returns the underlying contract instance. @@ -59,7 +66,7 @@ func (oracle *CheckpointOracle) LookupCheckpointEvents(blockLogs [][]*types.Log, if err != nil { continue } - if event.Index == section && common.Hash(event.CheckpointHash) == hash { + if event.Index == section && event.CheckpointHash == hash { votes = append(votes, event) } } diff --git a/contracts/checkpointoracle/oracle_test.go b/contracts/checkpointoracle/oracle_test.go index e05d4935..61dd8aec 100644 --- a/contracts/checkpointoracle/oracle_test.go +++ b/contracts/checkpointoracle/oracle_test.go @@ -27,13 +27,13 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle/contract" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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 ( @@ -175,10 +175,16 @@ func TestCheckpointRegister(t *testing.T) { 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) + contractBackend := backends.NewSimulatedBackend( + core.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(10000000000000000)}, + accounts[1].addr: {Balance: big.NewInt(10000000000000000)}, + accounts[2].addr: {Balance: big.NewInt(10000000000000000)}, + }, 10000000, + ) defer contractBackend.Close() - transactOpts := bind.NewKeyedTransactor(accounts[0].key) + transactOpts, _ := bind.NewKeyedTransactorWithChainID(accounts[0].key, big.NewInt(1337)) // 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)) diff --git a/core/asm/asm.go b/core/asm/asm.go index a9b4bc34..7c1e14ec 100644 --- a/core/asm/asm.go +++ b/core/asm/asm.go @@ -14,14 +14,14 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Provides support for dealing with EVM assembly instructions (e.g., disassembling them). +// Package asm provides support for dealing with EVM assembly instructions (e.g., disassembling them). package asm import ( "encoding/hex" "fmt" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/core/vm" ) // Iterator for disassembled EVM instructions @@ -34,14 +34,14 @@ type instructionIterator struct { started bool } -// Create a new instruction iterator. +// NewInstructionIterator create a new instruction iterator. func NewInstructionIterator(code []byte) *instructionIterator { it := new(instructionIterator) it.code = code return it } -// Returns true if there is a next instruction and moves on. +// Next returns true if there is a next instruction and moves on. func (it *instructionIterator) Next() bool { if it.error != nil || uint64(len(it.code)) <= it.pc { // We previously reached an error or the end. @@ -79,27 +79,27 @@ func (it *instructionIterator) Next() bool { return true } -// Returns any error that may have been encountered. +// Error returns any error that may have been encountered. func (it *instructionIterator) Error() error { return it.error } -// Returns the PC of the current instruction. +// PC returns the PC of the current instruction. func (it *instructionIterator) PC() uint64 { return it.pc } -// Returns the opcode of the current instruction. +// Op returns the opcode of the current instruction. func (it *instructionIterator) Op() vm.OpCode { return it.op } -// Returns the argument of the current instruction. +// Arg returns the argument of the current instruction. func (it *instructionIterator) Arg() []byte { return it.arg } -// Pretty-print all disassembled EVM instructions to stdout. +// PrintDisassembled pretty-print all disassembled EVM instructions to stdout. func PrintDisassembled(code string) error { script, err := hex.DecodeString(code) if err != nil { @@ -109,7 +109,7 @@ func PrintDisassembled(code string) error { it := NewInstructionIterator(script) for it.Next() { if it.Arg() != nil && 0 < len(it.Arg()) { - fmt.Printf("%05x: %v 0x%x\n", it.PC(), it.Op(), it.Arg()) + fmt.Printf("%05x: %v %#x\n", it.PC(), it.Op(), it.Arg()) } else { fmt.Printf("%05x: %v\n", it.PC(), it.Op()) } @@ -117,14 +117,14 @@ func PrintDisassembled(code string) error { return it.Error() } -// Return all disassembled EVM instructions in human-readable format. +// Disassemble returns all disassembled EVM instructions in human-readable format. func Disassemble(script []byte) ([]string, error) { instrs := make([]string, 0) it := NewInstructionIterator(script) for it.Next() { if it.Arg() != nil && 0 < len(it.Arg()) { - instrs = append(instrs, fmt.Sprintf("%05x: %v 0x%x\n", it.PC(), it.Op(), it.Arg())) + instrs = append(instrs, fmt.Sprintf("%05x: %v %#x\n", it.PC(), it.Op(), it.Arg())) } else { instrs = append(instrs, fmt.Sprintf("%05x: %v\n", it.PC(), it.Op())) } diff --git a/core/asm/compiler.go b/core/asm/compiler.go index 6bea3f51..ce2d23ab 100644 --- a/core/asm/compiler.go +++ b/core/asm/compiler.go @@ -22,8 +22,8 @@ import ( "os" "strings" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/vm" ) // Compiler contains information about the parsed source @@ -39,7 +39,7 @@ type Compiler struct { debug bool } -// newCompiler returns a new allocated compiler. +// NewCompiler returns a new allocated compiler. func NewCompiler(debug bool) *Compiler { return &Compiler{ labels: make(map[string]int), @@ -57,6 +57,7 @@ func NewCompiler(debug bool) *Compiler { // second stage to push labels and determine the right // position. func (c *Compiler) Feed(ch <-chan token) { + var prev token for i := range ch { switch i.typ { case number: @@ -73,10 +74,14 @@ func (c *Compiler) Feed(ch <-chan token) { c.labels[i.text] = c.pc c.pc++ case label: - c.pc += 5 + c.pc += 4 + if prev.typ == element && isJump(prev.text) { + c.pc++ + } } c.tokens = append(c.tokens, i) + prev = i } if c.debug { fmt.Fprintln(os.Stderr, "found", len(c.labels), "labels") @@ -100,16 +105,16 @@ func (c *Compiler) Compile() (string, []error) { } // turn the binary to hex - var bin string + var bin strings.Builder for _, v := range c.binary { switch v := v.(type) { case vm.OpCode: - bin += fmt.Sprintf("%x", []byte{byte(v)}) + bin.WriteString(fmt.Sprintf("%x", []byte{byte(v)})) case []byte: - bin += fmt.Sprintf("%x", v) + bin.WriteString(fmt.Sprintf("%x", v)) } } - return bin, errors + return bin.String(), errors } // next returns the next token and increments the @@ -181,6 +186,8 @@ func (c *Compiler) compileElement(element token) error { pos := big.NewInt(int64(c.labels[rvalue.text])).Bytes() pos = append(make([]byte, 4-len(pos)), pos...) c.pushBin(pos) + case lineEnd: + c.pos-- default: return compileErr(rvalue, rvalue.text, "number, string or label") } @@ -201,8 +208,8 @@ func (c *Compiler) compileElement(element token) error { case stringValue: value = []byte(rvalue.text[1 : len(rvalue.text)-1]) case label: - value = make([]byte, 4) - copy(value, big.NewInt(int64(c.labels[rvalue.text])).Bytes()) + value = big.NewInt(int64(c.labels[rvalue.text])).Bytes() + value = append(make([]byte, 4-len(value)), value...) default: return compileErr(rvalue, rvalue.text, "number, string or label") } @@ -236,12 +243,12 @@ func (c *Compiler) pushBin(v interface{}) { // isPush returns whether the string op is either any of // push(N). func isPush(op string) bool { - return strings.ToUpper(op) == "PUSH" + return strings.EqualFold(op, "PUSH") } // isJump returns whether the string op is jump(i) func isJump(op string) bool { - return strings.ToUpper(op) == "JUMPI" || strings.ToUpper(op) == "JUMP" + return strings.EqualFold(op, "JUMPI") || strings.EqualFold(op, "JUMP") } // toBinary converts text to a vm.OpCode diff --git a/signer/core/signed_data_internal_test.go b/core/asm/compiler_test.go similarity index 53% rename from signer/core/signed_data_internal_test.go rename to core/asm/compiler_test.go index 0d59fcfc..ce9df436 100644 --- a/signer/core/signed_data_internal_test.go +++ b/core/asm/compiler_test.go @@ -14,38 +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 core +package asm import ( - "math/big" "testing" ) -func TestParseInteger(t *testing.T) { - for i, tt := range []struct { - t string - v interface{} - exp *big.Int +func TestCompiler(t *testing.T) { + tests := []struct { + input, output string }{ - {"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 - } - if tt.exp == nil && res != nil { - t.Errorf("test %d, got %v, expected nil", i, res) - continue - } - if tt.exp != nil && res == nil { - t.Errorf("test %d, got '%v', expected %v", i, err, tt.exp) + { + input: ` + GAS + label: + PUSH @label +`, + output: "5a5b6300000001", + }, + { + input: ` + PUSH @label + label: +`, + output: "63000000055b", + }, + { + input: ` + PUSH @label + JUMP + label: +`, + output: "6300000006565b", + }, + { + input: ` + JUMP @label + label: +`, + output: "6300000006565b", + }, + } + for _, test := range tests { + ch := Lex([]byte(test.input), false) + c := NewCompiler(false) + c.Feed(ch) + output, err := c.Compile() + if len(err) != 0 { + t.Errorf("compile error: %v\ninput: %s", err, test.input) continue } - if tt.exp.Cmp(res) != 0 { - t.Errorf("test %d, got %v expected %v", i, res, tt.exp) + if output != test.output { + t.Errorf("incorrect output\ninput: %sgot: %s\nwant: %s\n", test.input, output, test.output) } } } diff --git a/core/asm/lex_test.go b/core/asm/lex_test.go index 16e0ad45..53e05fbb 100644 --- a/core/asm/lex_test.go +++ b/core/asm/lex_test.go @@ -60,6 +60,18 @@ func TestLexer(t *testing.T) { input: "0123abc", tokens: []token{{typ: lineStart}, {typ: number, text: "0123"}, {typ: element, text: "abc"}, {typ: eof}}, }, + { + input: "00123abc", + tokens: []token{{typ: lineStart}, {typ: number, text: "00123"}, {typ: element, text: "abc"}, {typ: eof}}, + }, + { + input: "@foo", + tokens: []token{{typ: lineStart}, {typ: label, text: "foo"}, {typ: eof}}, + }, + { + input: "@label123", + tokens: []token{{typ: lineStart}, {typ: label, text: "label123"}, {typ: eof}}, + }, } for _, test := range tests { diff --git a/core/asm/lexer.go b/core/asm/lexer.go index 00526242..d1b79a1f 100644 --- a/core/asm/lexer.go +++ b/core/asm/lexer.go @@ -68,10 +68,10 @@ func (it tokenType) String() string { var stringtokenTypes = []string{ eof: "EOF", + lineStart: "new line", + lineEnd: "end of line", invalidStatement: "invalid statement", element: "element", - lineEnd: "end of line", - lineStart: "new line", label: "label", labelDef: "label definition", number: "number", @@ -93,7 +93,7 @@ type lexer struct { debug bool // flag for triggering debug output } -// lex lexes the program by name with the given source. It returns a +// Lex lexes the program by name with the given source. It returns a // channel on which the tokens are delivered. func Lex(source []byte, debug bool) <-chan token { ch := make(chan token) @@ -234,7 +234,7 @@ func lexComment(l *lexer) stateFn { // the lex text state function to advance the parsing // process. func lexLabel(l *lexer) stateFn { - l.acceptRun(Alpha + "_") + l.acceptRun(Alpha + "_" + Numbers) l.emit(label) @@ -254,7 +254,7 @@ func lexInsideString(l *lexer) stateFn { func lexNumber(l *lexer) stateFn { acceptance := Numbers - if l.accept("0") || l.accept("xX") { + if l.accept("xX") { acceptance = HexadecimalNumbers } l.acceptRun(acceptance) diff --git a/core/beacon/errors.go b/core/beacon/errors.go new file mode 100644 index 00000000..7a30d09b --- /dev/null +++ b/core/beacon/errors.go @@ -0,0 +1,87 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package beacon + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rpc" +) + +// EngineAPIError is a standardized error message between consensus and execution +// clients, also containing any custom error message Geth might include. +type EngineAPIError struct { + code int + msg string + err error +} + +func (e *EngineAPIError) ErrorCode() int { return e.code } +func (e *EngineAPIError) Error() string { return e.msg } +func (e *EngineAPIError) ErrorData() interface{} { + if e.err == nil { + return nil + } + return struct { + Error string `json:"err"` + }{e.err.Error()} +} + +// With returns a copy of the error with a new embedded custom data field. +func (e *EngineAPIError) With(err error) *EngineAPIError { + return &EngineAPIError{ + code: e.code, + msg: e.msg, + err: err, + } +} + +var ( + _ rpc.Error = new(EngineAPIError) + _ rpc.DataError = new(EngineAPIError) +) + +var ( + // VALID is returned by the engine API in the following calls: + // - newPayloadV1: if the payload was already known or was just validated and executed + // - forkchoiceUpdateV1: if the chain accepted the reorg (might ignore if it's stale) + VALID = "VALID" + + // INVALID is returned by the engine API in the following calls: + // - newPayloadV1: if the payload failed to execute on top of the local chain + // - forkchoiceUpdateV1: if the new head is unknown, pre-merge, or reorg to it fails + INVALID = "INVALID" + + // SYNCING is returned by the engine API in the following calls: + // - newPayloadV1: if the payload was accepted on top of an active sync + // - forkchoiceUpdateV1: if the new head was seen before, but not part of the chain + SYNCING = "SYNCING" + + // ACCEPTED is returned by the engine API in the following calls: + // - newPayloadV1: if the payload was accepted, but not processed (side chain) + ACCEPTED = "ACCEPTED" + + INVALIDBLOCKHASH = "INVALID_BLOCK_HASH" + + GenericServerError = &EngineAPIError{code: -32000, msg: "Server error"} + UnknownPayload = &EngineAPIError{code: -38001, msg: "Unknown payload"} + InvalidForkChoiceState = &EngineAPIError{code: -38002, msg: "Invalid forkchoice state"} + InvalidPayloadAttributes = &EngineAPIError{code: -38003, msg: "Invalid payload attributes"} + + STATUS_INVALID = ForkChoiceResponse{PayloadStatus: PayloadStatusV1{Status: INVALID}, PayloadID: nil} + STATUS_SYNCING = ForkChoiceResponse{PayloadStatus: PayloadStatusV1{Status: SYNCING}, PayloadID: nil} + INVALID_TERMINAL_BLOCK = PayloadStatusV1{Status: INVALID, LatestValidHash: &common.Hash{}} +) diff --git a/core/beacon/gen_blockparams.go b/core/beacon/gen_blockparams.go new file mode 100644 index 00000000..0e2ea4bb --- /dev/null +++ b/core/beacon/gen_blockparams.go @@ -0,0 +1,53 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package beacon + +import ( + "encoding/json" + "errors" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var _ = (*payloadAttributesMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (p PayloadAttributesV1) MarshalJSON() ([]byte, error) { + type PayloadAttributesV1 struct { + Timestamp hexutil.Uint64 `json:"timestamp" gencodec:"required"` + Random common.Hash `json:"prevRandao" gencodec:"required"` + SuggestedFeeRecipient common.Address `json:"suggestedFeeRecipient" gencodec:"required"` + } + var enc PayloadAttributesV1 + enc.Timestamp = hexutil.Uint64(p.Timestamp) + enc.Random = p.Random + enc.SuggestedFeeRecipient = p.SuggestedFeeRecipient + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (p *PayloadAttributesV1) UnmarshalJSON(input []byte) error { + type PayloadAttributesV1 struct { + Timestamp *hexutil.Uint64 `json:"timestamp" gencodec:"required"` + Random *common.Hash `json:"prevRandao" gencodec:"required"` + SuggestedFeeRecipient *common.Address `json:"suggestedFeeRecipient" gencodec:"required"` + } + var dec PayloadAttributesV1 + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.Timestamp == nil { + return errors.New("missing required field 'timestamp' for PayloadAttributesV1") + } + p.Timestamp = uint64(*dec.Timestamp) + if dec.Random == nil { + return errors.New("missing required field 'prevRandao' for PayloadAttributesV1") + } + p.Random = *dec.Random + if dec.SuggestedFeeRecipient == nil { + return errors.New("missing required field 'suggestedFeeRecipient' for PayloadAttributesV1") + } + p.SuggestedFeeRecipient = *dec.SuggestedFeeRecipient + return nil +} diff --git a/core/beacon/gen_ed.go b/core/beacon/gen_ed.go new file mode 100644 index 00000000..dcee3bf1 --- /dev/null +++ b/core/beacon/gen_ed.go @@ -0,0 +1,139 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package beacon + +import ( + "encoding/json" + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var _ = (*executableDataMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (e ExecutableDataV1) MarshalJSON() ([]byte, error) { + type ExecutableDataV1 struct { + ParentHash common.Hash `json:"parentHash" gencodec:"required"` + FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"` + StateRoot common.Hash `json:"stateRoot" gencodec:"required"` + ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"` + LogsBloom hexutil.Bytes `json:"logsBloom" gencodec:"required"` + Random common.Hash `json:"prevRandao" gencodec:"required"` + Number hexutil.Uint64 `json:"blockNumber" gencodec:"required"` + GasLimit hexutil.Uint64 `json:"gasLimit" gencodec:"required"` + GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + Timestamp hexutil.Uint64 `json:"timestamp" gencodec:"required"` + ExtraData hexutil.Bytes `json:"extraData" gencodec:"required"` + BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"` + BlockHash common.Hash `json:"blockHash" gencodec:"required"` + Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"` + } + var enc ExecutableDataV1 + enc.ParentHash = e.ParentHash + enc.FeeRecipient = e.FeeRecipient + enc.StateRoot = e.StateRoot + enc.ReceiptsRoot = e.ReceiptsRoot + enc.LogsBloom = e.LogsBloom + enc.Random = e.Random + enc.Number = hexutil.Uint64(e.Number) + enc.GasLimit = hexutil.Uint64(e.GasLimit) + enc.GasUsed = hexutil.Uint64(e.GasUsed) + enc.Timestamp = hexutil.Uint64(e.Timestamp) + enc.ExtraData = e.ExtraData + enc.BaseFeePerGas = (*hexutil.Big)(e.BaseFeePerGas) + enc.BlockHash = e.BlockHash + if e.Transactions != nil { + enc.Transactions = make([]hexutil.Bytes, len(e.Transactions)) + for k, v := range e.Transactions { + enc.Transactions[k] = v + } + } + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (e *ExecutableDataV1) UnmarshalJSON(input []byte) error { + type ExecutableDataV1 struct { + ParentHash *common.Hash `json:"parentHash" gencodec:"required"` + FeeRecipient *common.Address `json:"feeRecipient" gencodec:"required"` + StateRoot *common.Hash `json:"stateRoot" gencodec:"required"` + ReceiptsRoot *common.Hash `json:"receiptsRoot" gencodec:"required"` + LogsBloom *hexutil.Bytes `json:"logsBloom" gencodec:"required"` + Random *common.Hash `json:"prevRandao" gencodec:"required"` + Number *hexutil.Uint64 `json:"blockNumber" gencodec:"required"` + GasLimit *hexutil.Uint64 `json:"gasLimit" gencodec:"required"` + GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + Timestamp *hexutil.Uint64 `json:"timestamp" gencodec:"required"` + ExtraData *hexutil.Bytes `json:"extraData" gencodec:"required"` + BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"` + BlockHash *common.Hash `json:"blockHash" gencodec:"required"` + Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"` + } + var dec ExecutableDataV1 + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.ParentHash == nil { + return errors.New("missing required field 'parentHash' for ExecutableDataV1") + } + e.ParentHash = *dec.ParentHash + if dec.FeeRecipient == nil { + return errors.New("missing required field 'feeRecipient' for ExecutableDataV1") + } + e.FeeRecipient = *dec.FeeRecipient + if dec.StateRoot == nil { + return errors.New("missing required field 'stateRoot' for ExecutableDataV1") + } + e.StateRoot = *dec.StateRoot + if dec.ReceiptsRoot == nil { + return errors.New("missing required field 'receiptsRoot' for ExecutableDataV1") + } + e.ReceiptsRoot = *dec.ReceiptsRoot + if dec.LogsBloom == nil { + return errors.New("missing required field 'logsBloom' for ExecutableDataV1") + } + e.LogsBloom = *dec.LogsBloom + if dec.Random == nil { + return errors.New("missing required field 'prevRandao' for ExecutableDataV1") + } + e.Random = *dec.Random + if dec.Number == nil { + return errors.New("missing required field 'blockNumber' for ExecutableDataV1") + } + e.Number = uint64(*dec.Number) + if dec.GasLimit == nil { + return errors.New("missing required field 'gasLimit' for ExecutableDataV1") + } + e.GasLimit = uint64(*dec.GasLimit) + if dec.GasUsed == nil { + return errors.New("missing required field 'gasUsed' for ExecutableDataV1") + } + e.GasUsed = uint64(*dec.GasUsed) + if dec.Timestamp == nil { + return errors.New("missing required field 'timestamp' for ExecutableDataV1") + } + e.Timestamp = uint64(*dec.Timestamp) + if dec.ExtraData == nil { + return errors.New("missing required field 'extraData' for ExecutableDataV1") + } + e.ExtraData = *dec.ExtraData + if dec.BaseFeePerGas == nil { + return errors.New("missing required field 'baseFeePerGas' for ExecutableDataV1") + } + e.BaseFeePerGas = (*big.Int)(dec.BaseFeePerGas) + if dec.BlockHash == nil { + return errors.New("missing required field 'blockHash' for ExecutableDataV1") + } + e.BlockHash = *dec.BlockHash + if dec.Transactions == nil { + return errors.New("missing required field 'transactions' for ExecutableDataV1") + } + e.Transactions = make([][]byte, len(dec.Transactions)) + for k, v := range dec.Transactions { + e.Transactions[k] = v + } + return nil +} diff --git a/core/beacon/types.go b/core/beacon/types.go new file mode 100644 index 00000000..e25d724c --- /dev/null +++ b/core/beacon/types.go @@ -0,0 +1,201 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package beacon + +import ( + "fmt" + "math/big" + + "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/trie" +) + +//go:generate go run github.com/fjl/gencodec -type PayloadAttributesV1 -field-override payloadAttributesMarshaling -out gen_blockparams.go + +// PayloadAttributesV1 structure described at https://github.com/ethereum/execution-apis/pull/74 +type PayloadAttributesV1 struct { + Timestamp uint64 `json:"timestamp" gencodec:"required"` + Random common.Hash `json:"prevRandao" gencodec:"required"` + SuggestedFeeRecipient common.Address `json:"suggestedFeeRecipient" gencodec:"required"` +} + +// JSON type overrides for PayloadAttributesV1. +type payloadAttributesMarshaling struct { + Timestamp hexutil.Uint64 +} + +//go:generate go run github.com/fjl/gencodec -type ExecutableDataV1 -field-override executableDataMarshaling -out gen_ed.go + +// ExecutableDataV1 structure described at https://github.com/ethereum/execution-apis/tree/main/src/engine/specification.md +type ExecutableDataV1 struct { + ParentHash common.Hash `json:"parentHash" gencodec:"required"` + FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"` + StateRoot common.Hash `json:"stateRoot" gencodec:"required"` + ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"` + LogsBloom []byte `json:"logsBloom" gencodec:"required"` + Random common.Hash `json:"prevRandao" gencodec:"required"` + Number uint64 `json:"blockNumber" gencodec:"required"` + GasLimit uint64 `json:"gasLimit" gencodec:"required"` + GasUsed uint64 `json:"gasUsed" gencodec:"required"` + Timestamp uint64 `json:"timestamp" gencodec:"required"` + ExtraData []byte `json:"extraData" gencodec:"required"` + BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"` + BlockHash common.Hash `json:"blockHash" gencodec:"required"` + Transactions [][]byte `json:"transactions" gencodec:"required"` +} + +// JSON type overrides for executableData. +type executableDataMarshaling struct { + Number hexutil.Uint64 + GasLimit hexutil.Uint64 + GasUsed hexutil.Uint64 + Timestamp hexutil.Uint64 + BaseFeePerGas *hexutil.Big + ExtraData hexutil.Bytes + LogsBloom hexutil.Bytes + Transactions []hexutil.Bytes +} + +type PayloadStatusV1 struct { + Status string `json:"status"` + LatestValidHash *common.Hash `json:"latestValidHash"` + ValidationError *string `json:"validationError"` +} + +type TransitionConfigurationV1 struct { + TerminalTotalDifficulty *hexutil.Big `json:"terminalTotalDifficulty"` + TerminalBlockHash common.Hash `json:"terminalBlockHash"` + TerminalBlockNumber hexutil.Uint64 `json:"terminalBlockNumber"` +} + +// PayloadID is an identifier of the payload build process +type PayloadID [8]byte + +func (b PayloadID) String() string { + return hexutil.Encode(b[:]) +} + +func (b PayloadID) MarshalText() ([]byte, error) { + return hexutil.Bytes(b[:]).MarshalText() +} + +func (b *PayloadID) UnmarshalText(input []byte) error { + err := hexutil.UnmarshalFixedText("PayloadID", input, b[:]) + if err != nil { + return fmt.Errorf("invalid payload id %q: %w", input, err) + } + return nil +} + +type ForkChoiceResponse struct { + PayloadStatus PayloadStatusV1 `json:"payloadStatus"` + PayloadID *PayloadID `json:"payloadId"` +} + +type ForkchoiceStateV1 struct { + HeadBlockHash common.Hash `json:"headBlockHash"` + SafeBlockHash common.Hash `json:"safeBlockHash"` + FinalizedBlockHash common.Hash `json:"finalizedBlockHash"` +} + +func encodeTransactions(txs []*types.Transaction) [][]byte { + var enc = make([][]byte, len(txs)) + for i, tx := range txs { + enc[i], _ = tx.MarshalBinary() + } + return enc +} + +func decodeTransactions(enc [][]byte) ([]*types.Transaction, error) { + var txs = make([]*types.Transaction, len(enc)) + for i, encTx := range enc { + var tx types.Transaction + if err := tx.UnmarshalBinary(encTx); err != nil { + return nil, fmt.Errorf("invalid transaction %d: %v", i, err) + } + txs[i] = &tx + } + return txs, nil +} + +// ExecutableDataToBlock constructs a block from executable data. +// It verifies that the following fields: +// len(extraData) <= 32 +// uncleHash = emptyUncleHash +// difficulty = 0 +// and that the blockhash of the constructed block matches the parameters. +func ExecutableDataToBlock(params ExecutableDataV1) (*types.Block, error) { + txs, err := decodeTransactions(params.Transactions) + if err != nil { + return nil, err + } + if len(params.ExtraData) > 32 { + return nil, fmt.Errorf("invalid extradata length: %v", len(params.ExtraData)) + } + if len(params.LogsBloom) != 256 { + return nil, fmt.Errorf("invalid logsBloom length: %v", len(params.LogsBloom)) + } + // Check that baseFeePerGas is not negative or too big + if params.BaseFeePerGas != nil && (params.BaseFeePerGas.Sign() == -1 || params.BaseFeePerGas.BitLen() > 256) { + return nil, fmt.Errorf("invalid baseFeePerGas: %v", params.BaseFeePerGas) + } + header := &types.Header{ + ParentHash: params.ParentHash, + UncleHash: types.EmptyUncleHash, + Coinbase: params.FeeRecipient, + Root: params.StateRoot, + TxHash: types.DeriveSha(types.Transactions(txs), trie.NewStackTrie(nil)), + ReceiptHash: params.ReceiptsRoot, + Bloom: types.BytesToBloom(params.LogsBloom), + Difficulty: common.Big0, + Number: new(big.Int).SetUint64(params.Number), + GasLimit: params.GasLimit, + GasUsed: params.GasUsed, + Time: params.Timestamp, + BaseFee: params.BaseFeePerGas, + Extra: params.ExtraData, + MixDigest: params.Random, + } + block := types.NewBlockWithHeader(header).WithBody(txs, nil /* uncles */) + if block.Hash() != params.BlockHash { + return nil, fmt.Errorf("blockhash mismatch, want %x, got %x", params.BlockHash, block.Hash()) + } + return block, nil +} + +// BlockToExecutableData constructs the executableDataV1 structure by filling the +// fields from the given block. It assumes the given block is post-merge block. +func BlockToExecutableData(block *types.Block) *ExecutableDataV1 { + return &ExecutableDataV1{ + BlockHash: block.Hash(), + ParentHash: block.ParentHash(), + FeeRecipient: block.Coinbase(), + StateRoot: block.Root(), + Number: block.NumberU64(), + GasLimit: block.GasLimit(), + GasUsed: block.GasUsed(), + BaseFeePerGas: block.BaseFee(), + Timestamp: block.Time(), + ReceiptsRoot: block.ReceiptHash(), + LogsBloom: block.Bloom().Bytes(), + Transactions: encodeTransactions(block.Transactions()), + Random: block.MixDigest(), + ExtraData: block.Extra(), + } +} diff --git a/core/bench_test.go b/core/bench_test.go index a65e4f76..e448310e 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -18,20 +18,18 @@ package core import ( "crypto/ecdsa" - "io/ioutil" "math/big" - "os" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "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" ) func BenchmarkInsertChain_empty_memdb(b *testing.B) { @@ -75,7 +73,7 @@ var ( // This is the content of the genesis block used by the benchmarks. benchRootKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") benchRootAddr = crypto.PubkeyToAddress(benchRootKey.PublicKey) - benchRootFunds = math.BigPow(2, 100) + benchRootFunds = math.BigPow(2, 200) ) // genValueTx returns a block generator that includes a single @@ -85,8 +83,20 @@ 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, false) - tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data), types.HomesteadSigner{}, benchRootKey) + gas, _ := IntrinsicGas(data, nil, false, false, false) + signer := types.MakeSigner(gen.config, big.NewInt(int64(i))) + gasPrice := big.NewInt(0) + if gen.header.BaseFee != nil { + gasPrice = gen.header.BaseFee + } + tx, _ := types.SignNewTx(benchRootKey, signer, &types.LegacyTx{ + Nonce: gen.TxNonce(benchRootAddr), + To: &toaddr, + Value: big.NewInt(1), + Gas: gas, + Data: data, + GasPrice: gasPrice, + }) gen.AddTx(tx) } } @@ -110,24 +120,38 @@ func init() { // and fills the blocks with many small transactions. func genTxRing(naccounts int) func(int, *BlockGen) { from := 0 + availableFunds := new(big.Int).Set(benchRootFunds) return func(i int, gen *BlockGen) { block := gen.PrevBlock(i - 1) - gas := CalcGasLimit(block, block.GasLimit(), block.GasLimit()) + gas := block.GasLimit() + gasPrice := big.NewInt(0) + if gen.header.BaseFee != nil { + gasPrice = gen.header.BaseFee + } + signer := types.MakeSigner(gen.config, big.NewInt(int64(i))) for { gas -= params.TxGas if gas < params.TxGas { break } to := (from + 1) % naccounts - tx := types.NewTransaction( - gen.TxNonce(ringAddrs[from]), - ringAddrs[to], - benchRootFunds, - params.TxGas, - nil, - nil, - ) - tx, _ = types.SignTx(tx, types.HomesteadSigner{}, ringKeys[from]) + burn := new(big.Int).SetUint64(params.TxGas) + burn.Mul(burn, gen.header.BaseFee) + availableFunds.Sub(availableFunds, burn) + if availableFunds.Cmp(big.NewInt(1)) < 0 { + panic("not enough funds") + } + tx, err := types.SignNewTx(ringKeys[from], signer, + &types.LegacyTx{ + Nonce: gen.TxNonce(ringAddrs[from]), + To: &ringAddrs[to], + Value: availableFunds, + Gas: params.TxGas, + GasPrice: gasPrice, + }) + if err != nil { + panic(err) + } gen.AddTx(tx) from = to } @@ -136,7 +160,7 @@ func genTxRing(naccounts int) func(int, *BlockGen) { // genUncles generates blocks with two uncle headers. func genUncles(i int, gen *BlockGen) { - if i >= 6 { + if i >= 7 { b2 := gen.PrevBlock(i - 6).Header() b2.Extra = []byte("foo") gen.AddUncle(b2) @@ -149,15 +173,12 @@ func genUncles(i int, gen *BlockGen) { 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 + var err error if !disk { 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 = rawdb.NewLevelDBDatabase(dir, 128, 128, "") + dir := b.TempDir() + db, err = rawdb.NewLevelDBDatabase(dir, 128, 128, "", false) if err != nil { b.Fatalf("cannot create temporary database: %v", err) } @@ -175,7 +196,7 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { // Time the insertion of the new chain. // State and blocks are stored in the same DB. - chainman, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + chainman, _ := NewBlockChain(db, nil, &gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer chainman.Stop() b.ReportAllocs() b.ResetTimer() @@ -241,53 +262,53 @@ func makeChainForBench(db ethdb.Database, full bool, count uint64) { rawdb.WriteCanonicalHash(db, hash, n) rawdb.WriteTd(db, hash, n, big.NewInt(int64(n+1))) + if n == 0 { + rawdb.WriteChainConfig(db, hash, params.AllEthashProtocolChanges) + } + rawdb.WriteHeadHeaderHash(db, hash) + if full || n == 0 { block := types.NewBlockWithHeader(header) rawdb.WriteBody(db, hash, n, block.Body()) rawdb.WriteReceipts(db, hash, n, nil) + rawdb.WriteHeadBlockHash(db, hash) } } } func benchWriteChain(b *testing.B, full bool, count uint64) { for i := 0; i < b.N; i++ { - dir, err := ioutil.TempDir("", "eth-chain-bench") - if err != nil { - b.Fatalf("cannot create temporary directory: %v", err) - } - db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") + dir := b.TempDir() + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "", false) if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } makeChainForBench(db, full, count) db.Close() - os.RemoveAll(dir) } } func benchReadChain(b *testing.B, full bool, count uint64) { - dir, err := ioutil.TempDir("", "eth-chain-bench") - if err != nil { - b.Fatalf("cannot create temporary directory: %v", err) - } - defer os.RemoveAll(dir) + dir := b.TempDir() - db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "", false) if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } makeChainForBench(db, full, count) db.Close() + cacheConfig := *defaultCacheConfig + cacheConfig.TrieDirtyDisabled = true b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "", false) if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } - chain, err := NewBlockChain(db, nil, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil) + chain, err := NewBlockChain(db, &cacheConfig, nil, nil, ethash.NewFaker(), vm.Config{}, nil, nil) if err != nil { b.Fatalf("error creating chain: %v", err) } diff --git a/core/block_validator.go b/core/block_validator.go index 9dcb2807..3763be0b 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -19,10 +19,11 @@ package core import ( "fmt" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" + "github.com/ethereum/go-ethereum/trie" ) // BlockValidator is responsible for validating block headers, uncles and @@ -61,7 +62,7 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error { if hash := types.CalcUncleHash(block.Uncles()); hash != header.UncleHash { return fmt.Errorf("uncle root hash mismatch: have %x, want %x", hash, header.UncleHash) } - if hash := types.DeriveSha(block.Transactions()); hash != header.TxHash { + if hash := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); hash != header.TxHash { return fmt.Errorf("transaction root hash mismatch: have %x, want %x", hash, header.TxHash) } if !v.bc.HasBlockAndState(block.ParentHash(), block.NumberU64()-1) { @@ -88,8 +89,8 @@ func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateD if rbloom != header.Bloom { return fmt.Errorf("invalid bloom (remote: %x local: %x)", header.Bloom, rbloom) } - // Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, R1]])) - receiptSha := types.DeriveSha(receipts) + // Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, Rn]])) + receiptSha := types.DeriveSha(receipts, trie.NewStackTrie(nil)) if receiptSha != header.ReceiptHash { return fmt.Errorf("invalid receipt root hash (remote: %x local: %x)", header.ReceiptHash, receiptSha) } @@ -102,37 +103,26 @@ func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateD } // CalcGasLimit computes the gas limit of the next block after parent. It aims -// to keep the baseline gas above the provided floor, and increase it towards the -// ceil if the blocks are full. If the ceil is exceeded, it will always decrease -// the gas allowance. -func CalcGasLimit(parent *types.Block, gasFloor, gasCeil uint64) uint64 { - // contrib = (parentGasUsed * 3 / 2) / 1024 - contrib := (parent.GasUsed() + parent.GasUsed()/2) / params.GasLimitBoundDivisor - - // decay = parentGasLimit / 1024 -1 - decay := parent.GasLimit()/params.GasLimitBoundDivisor - 1 - - /* - strategy: gasLimit of block-to-mine is set based on parent's - gasUsed value. if parentGasUsed > parentGasLimit * (2/3) then we - increase it, otherwise lower it (or leave it unchanged if it's right - at that usage) the amount increased/decreased depends on how far away - from parentGasLimit * (2/3) parentGasUsed is. - */ - limit := parent.GasLimit() - decay + contrib - if limit < params.MinGasLimit { - limit = params.MinGasLimit +// to keep the baseline gas close to the provided target, and increase it towards +// the target if the baseline gas is lower. +func CalcGasLimit(parentGasLimit, desiredLimit uint64) uint64 { + delta := parentGasLimit/params.GasLimitBoundDivisor - 1 + limit := parentGasLimit + if desiredLimit < params.MinGasLimit { + desiredLimit = params.MinGasLimit } // If we're outside our allowed gas range, we try to hone towards them - if limit < gasFloor { - limit = parent.GasLimit() + decay - if limit > gasFloor { - limit = gasFloor + if limit < desiredLimit { + limit = parentGasLimit + delta + if limit > desiredLimit { + limit = desiredLimit } - } else if limit > gasCeil { - limit = parent.GasLimit() - decay - if limit < gasCeil { - limit = gasCeil + return limit + } + if limit > desiredLimit { + limit = parentGasLimit - delta + if limit < desiredLimit { + limit = desiredLimit } } return limit diff --git a/core/block_validator_test.go b/core/block_validator_test.go index 685cad73..815bc865 100644 --- a/core/block_validator_test.go +++ b/core/block_validator_test.go @@ -17,15 +17,22 @@ package core import ( + "encoding/json" + "math/big" "runtime" "testing" "time" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" + "github.com/ethereum/go-ethereum/consensus/clique" + "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/params" ) // Tests that simple header verification works, for both good and bad blocks. @@ -42,7 +49,7 @@ func TestHeaderVerification(t *testing.T) { headers[i] = block.Header() } // Run the header checker for blocks one-by-one, checking for both valid and invalid nonces - chain, _ := NewBlockChain(testdb, nil, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil) + chain, _ := NewBlockChain(testdb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer chain.Stop() for i := 0; i < len(blocks); i++ { @@ -76,6 +83,174 @@ func TestHeaderVerification(t *testing.T) { } } +func TestHeaderVerificationForMergingClique(t *testing.T) { testHeaderVerificationForMerging(t, true) } +func TestHeaderVerificationForMergingEthash(t *testing.T) { testHeaderVerificationForMerging(t, false) } + +// Tests the verification for eth1/2 merging, including pre-merge and post-merge +func testHeaderVerificationForMerging(t *testing.T, isClique bool) { + var ( + testdb = rawdb.NewMemoryDatabase() + preBlocks []*types.Block + postBlocks []*types.Block + runEngine consensus.Engine + genspec *Genesis + merger = consensus.NewMerger(rawdb.NewMemoryDatabase()) + ) + if isClique { + var ( + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr = crypto.PubkeyToAddress(key.PublicKey) + engine = clique.New(params.AllCliqueProtocolChanges.Clique, testdb) + ) + genspec = &Genesis{ + Config: params.AllCliqueProtocolChanges, + ExtraData: make([]byte, 32+common.AddressLength+crypto.SignatureLength), + Alloc: map[common.Address]GenesisAccount{ + addr: {Balance: big.NewInt(1)}, + }, + BaseFee: big.NewInt(params.InitialBaseFee), + Difficulty: new(big.Int), + } + copy(genspec.ExtraData[32:], addr[:]) + genesis := genspec.MustCommit(testdb) + + genEngine := beacon.New(engine) + preBlocks, _ = GenerateChain(params.AllCliqueProtocolChanges, genesis, genEngine, testdb, 8, nil) + td := 0 + for i, block := range preBlocks { + header := block.Header() + if i > 0 { + header.ParentHash = preBlocks[i-1].Hash() + } + header.Extra = make([]byte, 32+crypto.SignatureLength) + header.Difficulty = big.NewInt(2) + + sig, _ := crypto.Sign(genEngine.SealHash(header).Bytes(), key) + copy(header.Extra[len(header.Extra)-crypto.SignatureLength:], sig) + preBlocks[i] = block.WithSeal(header) + // calculate td + td += int(block.Difficulty().Uint64()) + } + config := *params.AllCliqueProtocolChanges + config.TerminalTotalDifficulty = big.NewInt(int64(td)) + postBlocks, _ = GenerateChain(&config, preBlocks[len(preBlocks)-1], genEngine, testdb, 8, nil) + runEngine = beacon.New(engine) + genspec.Config = &config + } else { + genspec = &Genesis{Config: params.TestChainConfig} + genesis := genspec.MustCommit(testdb) + genEngine := beacon.New(ethash.NewFaker()) + + preBlocks, _ = GenerateChain(params.TestChainConfig, genesis, genEngine, testdb, 8, nil) + td := 0 + for _, block := range preBlocks { + // calculate td + td += int(block.Difficulty().Uint64()) + } + config := *params.TestChainConfig + config.TerminalTotalDifficulty = big.NewInt(int64(td)) + postBlocks, _ = GenerateChain(params.TestChainConfig, preBlocks[len(preBlocks)-1], genEngine, testdb, 8, nil) + + runEngine = beacon.New(ethash.NewFaker()) + genspec.Config = &config + } + + preHeaders := make([]*types.Header, len(preBlocks)) + for i, block := range preBlocks { + preHeaders[i] = block.Header() + + blob, _ := json.Marshal(block.Header()) + t.Logf("Log header before the merging %d: %v", block.NumberU64(), string(blob)) + } + postHeaders := make([]*types.Header, len(postBlocks)) + for i, block := range postBlocks { + postHeaders[i] = block.Header() + + blob, _ := json.Marshal(block.Header()) + t.Logf("Log header after the merging %d: %v", block.NumberU64(), string(blob)) + } + // Run the header checker for blocks one-by-one, checking for both valid and invalid nonces + chain, _ := NewBlockChain(testdb, nil, genspec, nil, runEngine, vm.Config{}, nil, nil) + defer chain.Stop() + + // Verify the blocks before the merging + for i := 0; i < len(preBlocks); i++ { + _, results := runEngine.VerifyHeaders(chain, []*types.Header{preHeaders[i]}, []bool{true}) + // Wait for the verification result + select { + case result := <-results: + if result != nil { + t.Errorf("test %d: verification failed %v", i, result) + } + case <-time.After(time.Second): + t.Fatalf("test %d: verification timeout", i) + } + // Make sure no more data is returned + select { + case result := <-results: + t.Fatalf("test %d: unexpected result returned: %v", i, result) + case <-time.After(25 * time.Millisecond): + } + chain.InsertChain(preBlocks[i : i+1]) + } + + // Make the transition + merger.ReachTTD() + merger.FinalizePoS() + + // Verify the blocks after the merging + for i := 0; i < len(postBlocks); i++ { + _, results := runEngine.VerifyHeaders(chain, []*types.Header{postHeaders[i]}, []bool{true}) + // Wait for the verification result + select { + case result := <-results: + if result != nil { + t.Errorf("test %d: verification failed %v", i, result) + } + case <-time.After(time.Second): + t.Fatalf("test %d: verification timeout", i) + } + // Make sure no more data is returned + select { + case result := <-results: + t.Fatalf("test %d: unexpected result returned: %v", i, result) + case <-time.After(25 * time.Millisecond): + } + chain.InsertBlockWithoutSetHead(postBlocks[i]) + } + + // Verify the blocks with pre-merge blocks and post-merge blocks + var ( + headers []*types.Header + seals []bool + ) + for _, block := range preBlocks { + headers = append(headers, block.Header()) + seals = append(seals, true) + } + for _, block := range postBlocks { + headers = append(headers, block.Header()) + seals = append(seals, true) + } + _, results := runEngine.VerifyHeaders(chain, headers, seals) + for i := 0; i < len(headers); i++ { + select { + case result := <-results: + if result != nil { + t.Errorf("test %d: verification failed %v", i, result) + } + case <-time.After(time.Second): + t.Fatalf("test %d: verification timeout", i) + } + } + // Make sure no more data is returned + select { + case result := <-results: + t.Fatalf("unexpected result returned: %v", result) + case <-time.After(25 * time.Millisecond): + } +} + // Tests that concurrent header verification works, for both good and bad blocks. func TestHeaderConcurrentVerification2(t *testing.T) { testHeaderConcurrentVerification(t, 2) } func TestHeaderConcurrentVerification8(t *testing.T) { testHeaderConcurrentVerification(t, 8) } @@ -106,11 +281,11 @@ func testHeaderConcurrentVerification(t *testing.T, threads int) { var results <-chan error if valid { - chain, _ := NewBlockChain(testdb, nil, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil) + chain, _ := NewBlockChain(testdb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) _, results = chain.engine.VerifyHeaders(chain, headers, seals) chain.Stop() } else { - chain, _ := NewBlockChain(testdb, nil, params.TestChainConfig, ethash.NewFakeFailer(uint64(len(headers)-1)), vm.Config{}, nil) + chain, _ := NewBlockChain(testdb, nil, gspec, nil, ethash.NewFakeFailer(uint64(len(headers)-1)), vm.Config{}, nil, nil) _, results = chain.engine.VerifyHeaders(chain, headers, seals) chain.Stop() } @@ -173,7 +348,7 @@ func testHeaderConcurrentAbortion(t *testing.T, threads int) { defer runtime.GOMAXPROCS(old) // Start the verifications and immediately abort - chain, _ := NewBlockChain(testdb, nil, params.TestChainConfig, ethash.NewFakeDelayer(time.Millisecond), vm.Config{}, nil) + chain, _ := NewBlockChain(testdb, nil, gspec, nil, ethash.NewFakeDelayer(time.Millisecond), vm.Config{}, nil, nil) defer chain.Stop() abort, results := chain.engine.VerifyHeaders(chain, headers, seals) @@ -197,3 +372,35 @@ func testHeaderConcurrentAbortion(t *testing.T, threads int) { t.Errorf("verification count too large: have %d, want below %d", verified, 2*threads) } } + +func TestCalcGasLimit(t *testing.T) { + for i, tc := range []struct { + pGasLimit uint64 + max uint64 + min uint64 + }{ + {20000000, 20019530, 19980470}, + {40000000, 40039061, 39960939}, + } { + // Increase + if have, want := CalcGasLimit(tc.pGasLimit, 2*tc.pGasLimit), tc.max; have != want { + t.Errorf("test %d: have %d want <%d", i, have, want) + } + // Decrease + if have, want := CalcGasLimit(tc.pGasLimit, 0), tc.min; have != want { + t.Errorf("test %d: have %d want >%d", i, have, want) + } + // Small decrease + if have, want := CalcGasLimit(tc.pGasLimit, tc.pGasLimit-1), tc.pGasLimit-1; have != want { + t.Errorf("test %d: have %d want %d", i, have, want) + } + // Small increase + if have, want := CalcGasLimit(tc.pGasLimit, tc.pGasLimit+1), tc.pGasLimit+1; have != want { + t.Errorf("test %d: have %d want %d", i, have, want) + } + // No change + if have, want := CalcGasLimit(tc.pGasLimit, tc.pGasLimit), tc.pGasLimit; have != want { + t.Errorf("test %d: have %d want %d", i, have, want) + } + } +} diff --git a/core/blockchain.go b/core/blockchain.go index 5ff58749..f588cc50 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -22,33 +22,37 @@ import ( "fmt" "io" "math/big" - mrand "math/rand" + "sort" + "strings" "sync" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" - "github.com/hashicorp/golang-lru" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "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/event" + "github.com/ethereum/go-ethereum/internal/syncx" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" + lru "github.com/hashicorp/golang-lru" ) var ( - headBlockGauge = metrics.NewRegisteredGauge("chain/head/block", nil) - headHeaderGauge = metrics.NewRegisteredGauge("chain/head/header", nil) - headFastBlockGauge = metrics.NewRegisteredGauge("chain/head/receipt", nil) + headBlockGauge = metrics.NewRegisteredGauge("chain/head/block", nil) + headHeaderGauge = metrics.NewRegisteredGauge("chain/head/header", nil) + headFastBlockGauge = metrics.NewRegisteredGauge("chain/head/receipt", nil) + headFinalizedBlockGauge = metrics.NewRegisteredGauge("chain/head/finalized", nil) + headSafeBlockGauge = metrics.NewRegisteredGauge("chain/head/safe", nil) accountReadTimer = metrics.NewRegisteredTimer("chain/account/reads", nil) accountHashTimer = metrics.NewRegisteredTimer("chain/account/hashes", nil) @@ -60,17 +64,25 @@ var ( storageUpdateTimer = metrics.NewRegisteredTimer("chain/storage/updates", nil) storageCommitTimer = metrics.NewRegisteredTimer("chain/storage/commits", nil) + snapshotAccountReadTimer = metrics.NewRegisteredTimer("chain/snapshot/account/reads", nil) + snapshotStorageReadTimer = metrics.NewRegisteredTimer("chain/snapshot/storage/reads", nil) + snapshotCommitTimer = metrics.NewRegisteredTimer("chain/snapshot/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) + + blockReorgMeter = metrics.NewRegisteredMeter("chain/reorg/executes", nil) + blockReorgAddMeter = metrics.NewRegisteredMeter("chain/reorg/add", nil) + blockReorgDropMeter = metrics.NewRegisteredMeter("chain/reorg/drop", nil) + blockReorgInvalidatedTx = metrics.NewRegisteredMeter("chain/reorg/invalidTx", nil) blockPrefetchExecuteTimer = metrics.NewRegisteredTimer("chain/prefetch/executes", nil) blockPrefetchInterruptMeter = metrics.NewRegisteredMeter("chain/prefetch/interrupts", nil) errInsertionInterrupted = errors.New("insertion is interrupted") + errChainStopped = errors.New("blockchain is stopped") ) const ( @@ -80,7 +92,6 @@ const ( txLookupCacheLimit = 1024 maxFutureBlocks = 256 maxTimeFutureBlocks = 30 - badBlockLimit = 10 TriesInMemory = 128 // BlockChainVersion ensures that an incompatible database forces a resync from scratch. @@ -103,17 +114,36 @@ const ( // - Version 7 // The following incompatible database changes were added: // * Use freezer as the ancient database to maintain all ancient data - BlockChainVersion uint64 = 7 + // - Version 8 + // The following incompatible database changes were added: + // * New scheme for contract code in order to separate the codes and trie nodes + BlockChainVersion uint64 = 8 ) // CacheConfig contains the configuration values for the trie caching/pruning // that's resident in a blockchain. type CacheConfig struct { TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory + TrieCleanJournal string // Disk journal for saving clean cache entries. + TrieCleanRejournal time.Duration // Time interval to dump clean cache to disk periodically 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 + SnapshotLimit int // Memory allowance (MB) to use for caching snapshot entries in memory + Preimages bool // Whether to store preimage of trie key to the disk + + SnapshotWait bool // Wait for snapshot construction on startup. TODO(karalabe): This is a dirty hack for testing, nuke it +} + +// defaultCacheConfig are the default caching values if none are specified by the +// user (also used during testing). +var defaultCacheConfig = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 256, + SnapshotWait: true, } // BlockChain represents the canonical chain given a database with a genesis @@ -135,9 +165,17 @@ type BlockChain struct { cacheConfig *CacheConfig // Cache configuration for pruning db ethdb.Database // Low level persistent database to store final content in + snaps *snapshot.Tree // Snapshot tree for fast trie leaf access triegc *prque.Prque // Priority queue mapping block numbers to tries to gc gcproc time.Duration // Accumulates canonical block processing for trie dumping + // txLookupLimit is the maximum number of blocks from head whose tx indices + // are reserved: + // * 0: means no limit and regenerate any missing indexes + // * N: means N block limit [HEAD-N+1, HEAD] and delete extra indexes + // * nil: disable tx reindexer/deleter, but still index new blocks + txLookupLimit uint64 + hc *HeaderChain rmLogsFeed event.Feed chainFeed event.Feed @@ -148,10 +186,14 @@ type BlockChain struct { scope event.SubscriptionScope genesisBlock *types.Block - chainmu sync.RWMutex // blockchain insertion lock + // This mutex synchronizes chain write operations. + // Readers don't need to take it, they can just read the database. + chainmu *syncx.ClosableMutex - 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!) + 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!) + currentFinalizedBlock atomic.Value // Current finalized head + currentSafeBlock atomic.Value // Current safe head stateCache state.Database // State database to reuse between imports (contains state cache) bodyCache *lru.Cache // Cache for the most recent block bodies @@ -161,33 +203,25 @@ type BlockChain struct { 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 - running int32 // running must be called atomically - // procInterrupt must be atomically called + wg sync.WaitGroup // + quit chan struct{} // shutdown signal, closed in Stop. + running int32 // 0 if chain is running, 1 when stopped procInterrupt int32 // interrupt signaler for block processing - wg sync.WaitGroup // chain processing wait group for shutting down engine consensus.Engine - validator Validator // Block and state validator interface - prefetcher Prefetcher // Block state prefetcher interface - processor Processor // Block transaction processor interface + validator Validator // Block and state validator interface + prefetcher Prefetcher + processor Processor // Block transaction processor interface + forker *ForkChoice vmConfig vm.Config - - 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 -// available in the database. It initialises the default Ethereum Validator and -// Processor. -func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *params.ChainConfig, engine consensus.Engine, vmConfig vm.Config, shouldPreserve func(block *types.Block) bool) (*BlockChain, error) { +// available in the database. It initialises the default Ethereum Validator +// and Processor. +func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis, overrides *ChainOverrides, engine consensus.Engine, vmConfig vm.Config, shouldPreserve func(header *types.Header) bool, txLookupLimit *uint64) (*BlockChain, error) { if cacheConfig == nil { - cacheConfig = &CacheConfig{ - TrieCleanLimit: 256, - TrieDirtyLimit: 256, - TrieTimeLimit: 5 * time.Minute, - } + cacheConfig = defaultCacheConfig } bodyCache, _ := lru.New(bodyCacheLimit) bodyRLPCache, _ := lru.New(bodyCacheLimit) @@ -195,32 +229,50 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par blockCache, _ := lru.New(blockCacheLimit) txLookupCache, _ := lru.New(txLookupCacheLimit) futureBlocks, _ := lru.New(maxFutureBlocks) - badBlocks, _ := lru.New(badBlockLimit) - bc := &BlockChain{ - chainConfig: chainConfig, - cacheConfig: cacheConfig, - db: db, - triegc: prque.New(nil), - stateCache: state.NewDatabaseWithCache(db, cacheConfig.TrieCleanLimit), - quit: make(chan struct{}), - shouldPreserve: shouldPreserve, - bodyCache: bodyCache, - bodyRLPCache: bodyRLPCache, - receiptsCache: receiptsCache, - blockCache: blockCache, - txLookupCache: txLookupCache, - futureBlocks: futureBlocks, - engine: engine, - vmConfig: vmConfig, - badBlocks: badBlocks, + // Setup the genesis block, commit the provided genesis specification + // to database if the genesis block is not present yet, or load the + // stored one from database. + chainConfig, genesisHash, genesisErr := SetupGenesisBlockWithOverride(db, genesis, overrides) + if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok { + return nil, genesisErr + } + log.Info("") + log.Info(strings.Repeat("-", 153)) + for _, line := range strings.Split(chainConfig.String(), "\n") { + log.Info(line) } + log.Info(strings.Repeat("-", 153)) + log.Info("") + + bc := &BlockChain{ + chainConfig: chainConfig, + cacheConfig: cacheConfig, + db: db, + triegc: prque.New(nil), + stateCache: state.NewDatabaseWithConfig(db, &trie.Config{ + Cache: cacheConfig.TrieCleanLimit, + Journal: cacheConfig.TrieCleanJournal, + Preimages: cacheConfig.Preimages, + }), + quit: make(chan struct{}), + chainmu: syncx.NewClosableMutex(), + bodyCache: bodyCache, + bodyRLPCache: bodyRLPCache, + receiptsCache: receiptsCache, + blockCache: blockCache, + txLookupCache: txLookupCache, + futureBlocks: futureBlocks, + engine: engine, + vmConfig: vmConfig, + } + bc.forker = NewForkChoice(bc, shouldPreserve) 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) + bc.hc, err = NewHeaderChain(db, chainConfig, engine, bc.insertStopped) if err != nil { return nil, err } @@ -228,18 +280,59 @@ 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) + bc.currentFinalizedBlock.Store(nilBlock) + bc.currentSafeBlock.Store(nilBlock) + // Initialize the chain with ancient data if it isn't empty. + var txIndexBlock uint64 + if bc.empty() { rawdb.InitDatabaseFromFreezer(bc.db) + // If ancient database is not empty, reconstruct all missing + // indices in the background. + frozen, _ := bc.db.Ancients() + if frozen > 0 { + txIndexBlock = frozen + } } 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) + // Make sure the state associated with the block is available + head := bc.CurrentBlock() + if _, err := state.New(head.Root(), bc.stateCache, bc.snaps); err != nil { + // Head state is missing, before the state recovery, find out the + // disk layer point of snapshot(if it's enabled). Make sure the + // rewound point is lower than disk layer. + var diskRoot common.Hash + if bc.cacheConfig.SnapshotLimit > 0 { + diskRoot = rawdb.ReadSnapshotRoot(bc.db) + } + if diskRoot != (common.Hash{}) { + log.Warn("Head state missing, repairing", "number", head.Number(), "hash", head.Hash(), "snaproot", diskRoot) + + snapDisk, err := bc.setHeadBeyondRoot(head.NumberU64(), diskRoot, true) + if err != nil { + return nil, err + } + // Chain rewound, persist old snapshot number to indicate recovery procedure + if snapDisk != 0 { + rawdb.WriteSnapshotRecoveryNumber(bc.db, snapDisk) + } + } else { + log.Warn("Head state missing, repairing", "number", head.Number(), "hash", head.Hash()) + if _, err := bc.setHeadBeyondRoot(head.NumberU64(), common.Hash{}, true); err != nil { + return nil, err + } + } + } + + // Ensure that a previous crash in SetHead doesn't leave extra ancients if frozen, err := bc.db.Ancients(); err == nil && frozen > 0 { var ( needRewind bool @@ -249,7 +342,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par // 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 { + if fullBlock != nil && fullBlock.Hash() != bc.genesisBlock.Hash() && fullBlock.NumberU64() < frozen-1 { needRewind = true low = fullBlock.NumberU64() } @@ -264,15 +357,17 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par } } 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)) + log.Error("Truncating ancient chain", "from", bc.CurrentHeader().Number.Uint64(), "to", low) + if err := bc.SetHead(low); err != nil { + return nil, err } - bc.Rollback(hashes) - log.Warn("Truncate ancient chain", "from", previous, "to", low) } } + // 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) + // 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 { @@ -281,23 +376,62 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par // make sure the headerByNumber (if present) is in our current canonical chain if headerByNumber != nil && headerByNumber.Hash() == header.Hash() { log.Error("Found bad hash, rewinding chain", "number", header.Number, "hash", header.ParentHash) - bc.SetHead(header.Number.Uint64() - 1) + if err := bc.SetHead(header.Number.Uint64() - 1); err != nil { + return nil, err + } log.Error("Chain rewind was successful, resuming normal operation") } } } - // Take ownership of this particular state - go bc.update() - return bc, nil -} -func (bc *BlockChain) getProcInterrupt() bool { - return atomic.LoadInt32(&bc.procInterrupt) == 1 -} + // Load any existing snapshot, regenerating it if loading failed + if bc.cacheConfig.SnapshotLimit > 0 { + // If the chain was rewound past the snapshot persistent layer (causing + // a recovery block number to be persisted to disk), check if we're still + // in recovery mode and in that case, don't invalidate the snapshot on a + // head mismatch. + var recover bool + + head := bc.CurrentBlock() + if layer := rawdb.ReadSnapshotRecoveryNumber(bc.db); layer != nil && *layer > head.NumberU64() { + log.Warn("Enabling snapshot recovery", "chainhead", head.NumberU64(), "diskbase", *layer) + recover = true + } + bc.snaps, _ = snapshot.New(bc.db, bc.stateCache.TrieDB(), bc.cacheConfig.SnapshotLimit, head.Root(), !bc.cacheConfig.SnapshotWait, true, recover) + } + + // Start future block processor. + bc.wg.Add(1) + go bc.updateFutureBlocks() + + // Start tx indexer/unindexer. + if txLookupLimit != nil { + bc.txLookupLimit = *txLookupLimit + + bc.wg.Add(1) + go bc.maintainTxIndex(txIndexBlock) + } -// GetVMConfig returns the block chain VM config. -func (bc *BlockChain) GetVMConfig() *vm.Config { - return &bc.vmConfig + // If periodic cache journal is required, spin it up. + if bc.cacheConfig.TrieCleanRejournal > 0 { + if bc.cacheConfig.TrieCleanRejournal < time.Minute { + log.Warn("Sanitizing invalid trie cache journal time", "provided", bc.cacheConfig.TrieCleanRejournal, "updated", time.Minute) + bc.cacheConfig.TrieCleanRejournal = time.Minute + } + triedb := bc.stateCache.TrieDB() + bc.wg.Add(1) + go func() { + defer bc.wg.Done() + triedb.SaveCachePeriodically(bc.cacheConfig.TrieCleanJournal, bc.cacheConfig.TrieCleanRejournal, bc.quit) + }() + } + // 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) + bc.SetHead(compat.RewindTo) + rawdb.WriteChainConfig(db, genesisHash, chainConfig) + } + return bc, nil } // empty returns an indicator whether the blockchain is empty. @@ -331,15 +465,6 @@ func (bc *BlockChain) loadLastState() error { log.Warn("Head block missing, resetting chain", "hash", head) return bc.Reset() } - // Make sure the state associated with the block is available - if _, err := state.New(currentBlock.Root(), bc.stateCache); err != nil { - // Dangling block without a state associated, init from scratch - log.Warn("Head state missing, repairing chain", "number", currentBlock.Number(), "hash", currentBlock.Hash()) - 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())) @@ -363,8 +488,21 @@ func (bc *BlockChain) loadLastState() error { headFastBlockGauge.Update(int64(block.NumberU64())) } } + + // Restore the last known finalized block and safe block + // Note: the safe block is not stored on disk and it is set to the last + // known finalized block on startup + if head := rawdb.ReadFinalizedBlockHash(bc.db); head != (common.Hash{}) { + if block := bc.GetBlockByHash(head); block != nil { + bc.currentFinalizedBlock.Store(block) + headFinalizedBlockGauge.Update(int64(block.NumberU64())) + bc.currentSafeBlock.Store(block) + headSafeBlockGauge.Update(int64(block.NumberU64())) + } + } // Issue a status log for the user currentFastBlock := bc.CurrentFastBlock() + currentFinalizedBlock := bc.CurrentFinalizedBlock() headerTd := bc.GetTd(currentHeader.Hash(), currentHeader.Number.Uint64()) blockTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) @@ -374,36 +512,133 @@ func (bc *BlockChain) loadLastState() error { 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))) + if currentFinalizedBlock != nil { + finalTd := bc.GetTd(currentFinalizedBlock.Hash(), currentFinalizedBlock.NumberU64()) + log.Info("Loaded most recent local finalized block", "number", currentFinalizedBlock.Number(), "hash", currentFinalizedBlock.Hash(), "td", finalTd, "age", common.PrettyAge(time.Unix(int64(currentFinalizedBlock.Time()), 0))) + } + if pivot := rawdb.ReadLastPivotNumber(bc.db); pivot != nil { + log.Info("Loaded last fast-sync pivot marker", "number", *pivot) + } return nil } -// SetHead rewinds the local chain to a new head. In the case of headers, everything -// above the new head will be deleted and the new one set. In the case of blocks -// though, the head may be further rewound if block bodies are missing (non-archive -// nodes after a fast sync). +// SetHead rewinds the local chain to a new head. Depending on whether the node +// was fast synced or full synced and in which state, the method will try to +// delete minimal data from disk whilst retaining chain consistency. func (bc *BlockChain) SetHead(head uint64) error { - log.Warn("Rewinding blockchain", "target", head) + _, err := bc.setHeadBeyondRoot(head, common.Hash{}, false) + return err +} - bc.chainmu.Lock() +// SetFinalized sets the finalized block. +func (bc *BlockChain) SetFinalized(block *types.Block) { + bc.currentFinalizedBlock.Store(block) + if block != nil { + rawdb.WriteFinalizedBlockHash(bc.db, block.Hash()) + headFinalizedBlockGauge.Update(int64(block.NumberU64())) + } else { + rawdb.WriteFinalizedBlockHash(bc.db, common.Hash{}) + headFinalizedBlockGauge.Update(0) + } +} + +// SetSafe sets the safe block. +func (bc *BlockChain) SetSafe(block *types.Block) { + bc.currentSafeBlock.Store(block) + if block != nil { + headSafeBlockGauge.Update(int64(block.NumberU64())) + } else { + headSafeBlockGauge.Update(0) + } +} + +// setHeadBeyondRoot rewinds the local chain to a new head with the extra condition +// that the rewind must pass the specified state root. This method is meant to be +// used when rewinding with snapshots enabled to ensure that we go back further than +// persistent disk layer. Depending on whether the node was fast synced or full, and +// in which state, the method will try to delete minimal data from disk whilst +// retaining chain consistency. +// +// The method returns the block number where the requested root cap was found. +func (bc *BlockChain) setHeadBeyondRoot(head uint64, root common.Hash, repair bool) (uint64, error) { + if !bc.chainmu.TryLock() { + return 0, errChainStopped + } 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() { + // Track the block number of the requested root hash + var rootNumber uint64 // (no root == always 0) + + // Retrieve the last pivot block to short circuit rollbacks beyond it and the + // current freezer limit to start nuking id underflown + pivot := rawdb.ReadLastPivotNumber(bc.db) + frozen, _ := bc.db.Ancients() + + updateFn := func(db ethdb.KeyValueWriter, header *types.Header) (uint64, bool) { + // Rewind the blockchain, ensuring we don't end up with a stateless head + // block. Note, depth equality is permitted to allow using SetHead as a + // chain reparation mechanism without deleting any data! + if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() <= currentBlock.NumberU64() { newHeadBlock := bc.GetBlock(header.Hash(), header.Number.Uint64()) if newHeadBlock == nil { + log.Error("Gap in the chain, rewinding to genesis", "number", header.Number, "hash", header.Hash()) 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 + // Block exists, keep rewinding until we find one with state, + // keeping rewinding until we exceed the optional threshold + // root hash + beyondRoot := (root == common.Hash{}) // Flag whether we're beyond the requested root (no root, always true) + + for { + // If a root threshold was requested but not yet crossed, check + if root != (common.Hash{}) && !beyondRoot && newHeadBlock.Root() == root { + beyondRoot, rootNumber = true, newHeadBlock.NumberU64() + } + if _, err := state.New(newHeadBlock.Root(), bc.stateCache, bc.snaps); err != nil { + log.Trace("Block state missing, rewinding further", "number", newHeadBlock.NumberU64(), "hash", newHeadBlock.Hash()) + if pivot == nil || newHeadBlock.NumberU64() > *pivot { + parent := bc.GetBlock(newHeadBlock.ParentHash(), newHeadBlock.NumberU64()-1) + if parent != nil { + newHeadBlock = parent + continue + } + log.Error("Missing block in the middle, aiming genesis", "number", newHeadBlock.NumberU64()-1, "hash", newHeadBlock.ParentHash()) + newHeadBlock = bc.genesisBlock + } else { + log.Trace("Rewind passed pivot, aiming genesis", "number", newHeadBlock.NumberU64(), "hash", newHeadBlock.Hash(), "pivot", *pivot) + newHeadBlock = bc.genesisBlock + } + } + if beyondRoot || newHeadBlock.NumberU64() == 0 { + if newHeadBlock.NumberU64() == 0 { + // Recommit the genesis state into disk in case the rewinding destination + // is genesis block and the relevant state is gone. In the future this + // rewinding destination can be the earliest block stored in the chain + // if the historical chain pruning is enabled. In that case the logic + // needs to be improved here. + if !bc.HasState(bc.genesisBlock.Root()) { + if err := CommitGenesisState(bc.db, bc.genesisBlock.Hash()); err != nil { + log.Crit("Failed to commit genesis state", "err", err) + } + log.Debug("Recommitted genesis state to disk") + } + } + log.Debug("Rewound to block with state", "number", newHeadBlock.NumberU64(), "hash", newHeadBlock.Hash()) + break + } + log.Debug("Skipping block with threshold state", "number", newHeadBlock.NumberU64(), "hash", newHeadBlock.Hash(), "root", newHeadBlock.Root()) + newHeadBlock = bc.GetBlock(newHeadBlock.ParentHash(), newHeadBlock.NumberU64()-1) // Keep rewinding } } rawdb.WriteHeadBlockHash(db, newHeadBlock.Hash()) + + // Degrade the chain markers if they are explicitly reverted. + // In theory we should update all in-memory markers in the + // last step, however the direction of SetHead is from high + // to low, so it's safe to update in-memory markers directly. 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()) @@ -412,11 +647,25 @@ func (bc *BlockChain) SetHead(head uint64) error { newHeadFastBlock = bc.genesisBlock } rawdb.WriteHeadFastBlockHash(db, newHeadFastBlock.Hash()) + + // Degrade the chain markers if they are explicitly reverted. + // In theory we should update all in-memory markers in the + // last step, however the direction of SetHead is from high + // to low, so it's safe the update in-memory markers directly. bc.currentFastBlock.Store(newHeadFastBlock) headFastBlockGauge.Update(int64(newHeadFastBlock.NumberU64())) } - } + head := bc.CurrentBlock().NumberU64() + // If setHead underflown the freezer threshold and the block processing + // intent afterwards is full block importing, delete the chain segment + // between the stateful-block and the sethead target. + var wipe bool + if head+1 < frozen { + wipe = pivot == nil || head >= *pivot + } + return head, wipe // Only force wipe if full synced + } // Rewind the header chain, deleting all block bodies until then delFn := func(db ethdb.KeyValueWriter, hash common.Hash, num uint64) { // Ignore the error here since light client won't hit this path @@ -424,10 +673,9 @@ func (bc *BlockChain) SetHead(head uint64) error { 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 { + if err := bc.db.TruncateHead(num); 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 { @@ -439,8 +687,18 @@ func (bc *BlockChain) SetHead(head uint64) error { } // Todo(rjl493456442) txlookup, bloombits, etc } - bc.hc.SetHead(head, updateFn, delFn) - + // If SetHead was only called as a chain reparation method, try to skip + // touching the header chain altogether, unless the freezer is broken + if repair { + if target, force := updateFn(bc.db, bc.CurrentBlock().Header()); force { + bc.hc.SetHead(target, updateFn, delFn) + } + } else { + // Rewind the chain to the requested head and keep going backwards until a + // block with a state is found or fast sync pivot is passed + log.Warn("Rewinding blockchain", "target", head) + bc.hc.SetHead(head, updateFn, delFn) + } // Clear out any stale content from the caches bc.bodyCache.Purge() bc.bodyRLPCache.Purge() @@ -449,72 +707,48 @@ func (bc *BlockChain) SetHead(head uint64) error { bc.txLookupCache.Purge() bc.futureBlocks.Purge() - return bc.loadLastState() + // Clear safe block, finalized block if needed + if safe := bc.CurrentSafeBlock(); safe != nil && head < safe.NumberU64() { + log.Warn("SetHead invalidated safe block") + bc.SetSafe(nil) + } + if finalized := bc.CurrentFinalizedBlock(); finalized != nil && head < finalized.NumberU64() { + log.Error("SetHead invalidated finalized block") + bc.SetFinalized(nil) + } + + return rootNumber, bc.loadLastState() } -// FastSyncCommitHead sets the current head block to the one defined by the hash +// SnapSyncCommitHead sets the current head block to the one defined by the hash // irrelevant what the chain contents were prior. -func (bc *BlockChain) FastSyncCommitHead(hash common.Hash) error { +func (bc *BlockChain) SnapSyncCommitHead(hash common.Hash) error { // Make sure that both the block as well at its state trie exists block := bc.GetBlockByHash(hash) if block == nil { - return fmt.Errorf("non existent block [%x…]", hash[:4]) + return fmt.Errorf("non existent block [%x..]", hash[:4]) } - if _, err := trie.NewSecure(block.Root(), bc.stateCache.TrieDB()); err != nil { + if _, err := trie.NewStateTrie(common.Hash{}, block.Root(), bc.stateCache.TrieDB()); err != nil { return err } - // If all checks out, manually set the head block - bc.chainmu.Lock() + + // If all checks out, manually set the head block. + if !bc.chainmu.TryLock() { + return errChainStopped + } bc.currentBlock.Store(block) headBlockGauge.Update(int64(block.NumberU64())) bc.chainmu.Unlock() + // Destroy any existing state snapshot and regenerate it in the background, + // also resuming the normal maintenance of any previously paused snapshot. + if bc.snaps != nil { + bc.snaps.Rebuild(block.Root()) + } log.Info("Committed new head block", "number", block.Number(), "hash", hash) return nil } -// GasLimit returns the gas limit of the current HEAD block. -func (bc *BlockChain) GasLimit() uint64 { - return bc.CurrentBlock().GasLimit() -} - -// CurrentBlock retrieves the current head block of the canonical chain. The -// block is retrieved from the blockchain's internal cache. -func (bc *BlockChain) CurrentBlock() *types.Block { - return bc.currentBlock.Load().(*types.Block) -} - -// CurrentFastBlock retrieves the current fast-sync head block of the canonical -// chain. The block is retrieved from the blockchain's internal cache. -func (bc *BlockChain) CurrentFastBlock() *types.Block { - return bc.currentFastBlock.Load().(*types.Block) -} - -// Validator returns the current validator. -func (bc *BlockChain) Validator() Validator { - return bc.validator -} - -// Processor returns the current processor. -func (bc *BlockChain) Processor() Processor { - return bc.processor -} - -// State returns a new mutable state based on the current HEAD block. -func (bc *BlockChain) State() (*state.StateDB, error) { - return bc.StateAt(bc.CurrentBlock().Root()) -} - -// StateAt returns a new mutable state based on a particular point in time. -func (bc *BlockChain) StateAt(root common.Hash) (*state.StateDB, error) { - return state.New(root, bc.stateCache) -} - -// StateCache returns the caching database underpinning the blockchain instance. -func (bc *BlockChain) StateCache() state.Database { - return bc.stateCache -} - // Reset purges the entire blockchain, restoring it to its genesis state. func (bc *BlockChain) Reset() error { return bc.ResetWithGenesisBlock(bc.genesisBlock) @@ -527,50 +761,31 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error { if err := bc.SetHead(0); err != nil { return err } - bc.chainmu.Lock() + if !bc.chainmu.TryLock() { + return errChainStopped + } 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 { - log.Crit("Failed to write genesis block TD", "err", err) + batch := bc.db.NewBatch() + rawdb.WriteTd(batch, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) + rawdb.WriteBlock(batch, genesis) + if err := batch.Write(); err != nil { + log.Crit("Failed to write genesis block", "err", err) } - rawdb.WriteBlock(bc.db, genesis) + bc.writeHeadBlock(genesis) + // Last update all in-memory chain markers 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 } -// repair tries to repair the current blockchain by rolling back the current block -// until one with associated state is found. This is needed to fix incomplete db -// writes caused either by crashes/power outages, or simply non-committed tries. -// -// This method only rolls back the current block. The current header and current -// fast block are left intact. -func (bc *BlockChain) repair(head **types.Block) error { - for { - // Abort if we've rewound to a head block that does have associated state - if _, err := state.New((*head).Root(), bc.stateCache); err == nil { - log.Info("Rewound blockchain to past state", "number", (*head).Number(), "hash", (*head).Hash()) - return nil - } - // Otherwise rewind one block and recheck state availability there - block := bc.GetBlock((*head).ParentHash(), (*head).NumberU64()-1) - if block == nil { - return fmt.Errorf("missing block %d [%x]", (*head).NumberU64()-1, (*head).ParentHash()) - } - *head = block - } -} - // Export writes the active chain to the given writer. func (bc *BlockChain) Export(w io.Writer) error { return bc.ExportN(w, uint64(0), bc.CurrentBlock().NumberU64()) @@ -578,20 +793,25 @@ 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.chainmu.RLock() - defer bc.chainmu.RUnlock() - if first > last { return fmt.Errorf("export failed: first (%d) is greater than last (%d)", first, last) } log.Info("Exporting batch of blocks", "count", last-first+1) - start, reported := time.Now(), time.Now() + var ( + parentHash common.Hash + start = time.Now() + reported = time.Now() + ) for nr := first; nr <= last; nr++ { block := bc.GetBlockByNumber(nr) if block == nil { return fmt.Errorf("export failed on #%d: not found", nr) } + if nr > first && block.ParentHash() != parentHash { + return fmt.Errorf("export failed: chain reorg during export") + } + parentHash = block.Hash() if err := block.EncodeRLP(w); err != nil { return err } @@ -603,201 +823,33 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { return nil } -// insert injects a new head block into the current block chain. This method +// writeHeadBlock injects a new head block into the current block chain. This method // assumes that the block is indeed a true head. It will also reset the head // header and the head fast sync block to this very same block if they are older // or if they are on a different side chain. // // Note, this function assumes that the `mu` mutex is held! -func (bc *BlockChain) insert(block *types.Block) { - // If the block is on a side chain or an unknown one, force other heads onto it too - updateHeads := rawdb.ReadCanonicalHash(bc.db, block.NumberU64()) != block.Hash() - +func (bc *BlockChain) writeHeadBlock(block *types.Block) { // Add the block to the canonical chain number scheme and mark as the head - rawdb.WriteCanonicalHash(bc.db, block.Hash(), block.NumberU64()) - 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 { - bc.hc.SetCurrentHeader(block.Header()) - rawdb.WriteHeadFastBlockHash(bc.db, block.Hash()) - - bc.currentFastBlock.Store(block) - headFastBlockGauge.Update(int64(block.NumberU64())) - } -} - -// Genesis retrieves the chain's genesis block. -func (bc *BlockChain) Genesis() *types.Block { - return bc.genesisBlock -} - -// GetBody retrieves a block body (transactions and uncles) from the database by -// hash, caching it if found. -func (bc *BlockChain) GetBody(hash common.Hash) *types.Body { - // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := bc.bodyCache.Get(hash); ok { - body := cached.(*types.Body) - return body - } - number := bc.hc.GetBlockNumber(hash) - if number == nil { - return nil - } - body := rawdb.ReadBody(bc.db, hash, *number) - if body == nil { - return nil - } - // Cache the found body for next time and return - bc.bodyCache.Add(hash, body) - return body -} - -// GetBodyRLP retrieves a block body in RLP encoding from the database by hash, -// caching it if found. -func (bc *BlockChain) GetBodyRLP(hash common.Hash) rlp.RawValue { - // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := bc.bodyRLPCache.Get(hash); ok { - return cached.(rlp.RawValue) - } - number := bc.hc.GetBlockNumber(hash) - if number == nil { - return nil - } - body := rawdb.ReadBodyRLP(bc.db, hash, *number) - if len(body) == 0 { - return nil - } - // Cache the found body for next time and return - bc.bodyRLPCache.Add(hash, body) - return body -} - -// HasBlock checks if a block is fully present in the database or not. -func (bc *BlockChain) HasBlock(hash common.Hash, number uint64) bool { - if bc.blockCache.Contains(hash) { - return true - } - return rawdb.HasBody(bc.db, hash, number) -} - -// HasFastBlock checks if a fast block is fully present in the database or not. -func (bc *BlockChain) HasFastBlock(hash common.Hash, number uint64) bool { - if !bc.HasBlock(hash, number) { - return false - } - if bc.receiptsCache.Contains(hash) { - return true - } - return rawdb.HasReceipts(bc.db, hash, number) -} - -// HasState checks if state trie is fully present in the database or not. -func (bc *BlockChain) HasState(hash common.Hash) bool { - _, err := bc.stateCache.OpenTrie(hash) - return err == nil -} - -// HasBlockAndState checks if a block and associated state trie is fully present -// in the database or not, caching it if present. -func (bc *BlockChain) HasBlockAndState(hash common.Hash, number uint64) bool { - // Check first that the block itself is known - block := bc.GetBlock(hash, number) - if block == nil { - return false - } - return bc.HasState(block.Root()) -} - -// GetBlock retrieves a block from the database by hash and number, -// caching it if found. -func (bc *BlockChain) GetBlock(hash common.Hash, number uint64) *types.Block { - // Short circuit if the block's already in the cache, retrieve otherwise - if block, ok := bc.blockCache.Get(hash); ok { - return block.(*types.Block) - } - block := rawdb.ReadBlock(bc.db, hash, number) - if block == nil { - return nil - } - // Cache the found block for next time and return - bc.blockCache.Add(block.Hash(), block) - return block -} - -// GetBlockByHash retrieves a block from the database by hash, caching it if found. -func (bc *BlockChain) GetBlockByHash(hash common.Hash) *types.Block { - number := bc.hc.GetBlockNumber(hash) - if number == nil { - return nil - } - return bc.GetBlock(hash, *number) -} - -// GetBlockByNumber retrieves a block from the database by number, caching it -// (associated with its hash) if found. -func (bc *BlockChain) GetBlockByNumber(number uint64) *types.Block { - hash := rawdb.ReadCanonicalHash(bc.db, number) - if hash == (common.Hash{}) { - return nil - } - return bc.GetBlock(hash, number) -} - -// GetReceiptsByHash retrieves the receipts for all transactions in a given block. -func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { - if receipts, ok := bc.receiptsCache.Get(hash); ok { - return receipts.(types.Receipts) - } - number := rawdb.ReadHeaderNumber(bc.db, hash) - if number == nil { - return nil - } - receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig) - if receipts == nil { - return nil - } - bc.receiptsCache.Add(hash, receipts) - return receipts -} + batch := bc.db.NewBatch() + rawdb.WriteHeadHeaderHash(batch, block.Hash()) + rawdb.WriteHeadFastBlockHash(batch, block.Hash()) + rawdb.WriteCanonicalHash(batch, block.Hash(), block.NumberU64()) + rawdb.WriteTxLookupEntriesByBlock(batch, block) + rawdb.WriteHeadBlockHash(batch, block.Hash()) -// GetBlocksFromHash returns the block corresponding to hash and up to n-1 ancestors. -// [deprecated by eth/62] -func (bc *BlockChain) GetBlocksFromHash(hash common.Hash, n int) (blocks []*types.Block) { - number := bc.hc.GetBlockNumber(hash) - if number == nil { - return nil - } - for i := 0; i < n; i++ { - block := bc.GetBlock(hash, *number) - if block == nil { - break - } - blocks = append(blocks, block) - hash = block.ParentHash() - *number-- + // Flush the whole batch into the disk, exit the node if failed + if err := batch.Write(); err != nil { + log.Crit("Failed to update chain indexes and markers", "err", err) } - return -} + // Update all in-memory chain markers in the last step + bc.hc.SetCurrentHeader(block.Header()) -// GetUnclesInChain retrieves all the uncles from a given block backwards until -// a specific distance is reached. -func (bc *BlockChain) GetUnclesInChain(block *types.Block, length int) []*types.Header { - uncles := []*types.Header{} - for i := 0; block != nil && i < length; i++ { - uncles = append(uncles, block.Uncles()...) - block = bc.GetBlock(block.ParentHash(), block.NumberU64()-1) - } - return uncles -} + bc.currentFastBlock.Store(block) + headFastBlockGauge.Update(int64(block.NumberU64())) -// TrieNode retrieves a blob of data associated with a trie node (or code hash) -// either from ephemeral in-memory cache, or from persistent storage. -func (bc *BlockChain) TrieNode(hash common.Hash) ([]byte, error) { - return bc.stateCache.TrieDB().Node(hash) + bc.currentBlock.Store(block) + headBlockGauge.Update(int64(block.NumberU64())) } // Stop stops the blockchain service. If any imports are currently in progress @@ -806,13 +858,32 @@ func (bc *BlockChain) Stop() { if !atomic.CompareAndSwapInt32(&bc.running, 0, 1) { return } - // Unsubscribe all subscriptions registered from blockchain + + // Unsubscribe all subscriptions registered from blockchain. bc.scope.Close() + + // Signal shutdown to all goroutines. close(bc.quit) - atomic.StoreInt32(&bc.procInterrupt, 1) + bc.StopInsert() + // Now wait for all chain modifications to end and persistent goroutines to exit. + // + // Note: Close waits for the mutex to become available, i.e. any running chain + // modification will have exited when Close returns. Since we also called StopInsert, + // the mutex should become available quickly. It cannot be taken again after Close has + // returned. + bc.chainmu.Close() bc.wg.Wait() + // Ensure that the entirety of the state snapshot is journalled to disk. + var snapBase common.Hash + if bc.snaps != nil { + var err error + if snapBase, err = bc.snaps.Journal(bc.CurrentBlock().Root()); err != nil { + log.Error("Failed to journal state snapshot", "err", err) + } + } + // Ensure the state of a recent block is also stored to disk before exiting. // We're writing three different states to catch different restart scenarios: // - HEAD: So we don't need to reprocess any blocks in the general case @@ -826,11 +897,17 @@ func (bc *BlockChain) Stop() { recent := bc.GetBlockByNumber(number - offset) log.Info("Writing cached state to disk", "block", recent.Number(), "hash", recent.Hash(), "root", recent.Root()) - if err := triedb.Commit(recent.Root(), true); err != nil { + if err := triedb.Commit(recent.Root(), true, nil); err != nil { log.Error("Failed to commit recent state trie", "err", err) } } } + if snapBase != (common.Hash{}) { + log.Info("Writing snapshot state to disk", "root", snapBase) + if err := triedb.Commit(snapBase, true, nil); err != nil { + log.Error("Failed to commit recent state trie", "err", err) + } + } for !bc.triegc.Empty() { triedb.Dereference(bc.triegc.PopItem().(common.Hash)) } @@ -838,7 +915,29 @@ func (bc *BlockChain) Stop() { log.Error("Dangling trie nodes after full cleanup") } } - log.Info("Blockchain manager stopped") + // Flush the collected preimages to disk + if err := bc.stateCache.TrieDB().CommitPreimages(); err != nil { + log.Error("Failed to commit trie preimages", "err", err) + } + // Ensure all live cached entries be saved into disk, so that we can skip + // cache warmup when node restarts. + if bc.cacheConfig.TrieCleanJournal != "" { + triedb := bc.stateCache.TrieDB() + triedb.SaveCache(bc.cacheConfig.TrieCleanJournal) + } + log.Info("Blockchain stopped") +} + +// StopInsert interrupts all insertion methods, causing them to return +// errInsertionInterrupted as soon as possible. Insertion is permanently disabled after +// calling this method. +func (bc *BlockChain) StopInsert() { + atomic.StoreInt32(&bc.procInterrupt, 1) +} + +// insertStopped returns true after StopInsert has been called. +func (bc *BlockChain) insertStopped() bool { + return atomic.LoadInt32(&bc.procInterrupt) == 1 } func (bc *BlockChain) procFutureBlocks() { @@ -849,8 +948,9 @@ func (bc *BlockChain) procFutureBlocks() { } } if len(blocks) > 0 { - types.BlockBy(types.Number).Sort(blocks) - + sort.Slice(blocks, func(i, j int) bool { + return blocks[i].NumberU64() < blocks[j].NumberU64() + }) // Insert one by one as chain insertion needs contiguous ancestry between blocks for i := range blocks { bc.InsertChain(blocks[i : i+1]) @@ -867,80 +967,6 @@ const ( SideStatTy ) -// 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.chainmu.Lock() - defer bc.chainmu.Unlock() - - for i := len(chain) - 1; i >= 0; i-- { - hash := chain[i] - - currentHeader := bc.hc.CurrentHeader() - if currentHeader.Hash() == hash { - bc.hc.SetCurrentHeader(bc.GetHeader(currentHeader.ParentHash, currentHeader.Number.Uint64()-1)) - } - if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock.Hash() == hash { - newFastBlock := bc.GetBlock(currentFastBlock.ParentHash(), currentFastBlock.NumberU64()-1) - 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) - 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) - } -} - -// 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() - - // 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() - - 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, ancientLimit uint64) (int, error) { @@ -959,7 +985,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ 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(), + 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]) } } @@ -973,169 +999,135 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ var ( stats = struct{ processed, ignored int32 }{} start = time.Now() - size = 0 + size = int64(0) ) + // updateHead updates the head fast sync block if the inserted blocks are better - // and returns a indicator whether the inserted blocks are canonical. + // and returns an indicator whether the inserted blocks are canonical. updateHead := func(head *types.Block) bool { - bc.chainmu.Lock() + if !bc.chainmu.TryLock() { + return false + } + defer bc.chainmu.Unlock() // 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 + reorg, err := bc.forker.ReorgNeeded(bc.CurrentFastBlock().Header(), head.Header()) + if err != nil { + log.Warn("Reorg failed", "err", err) + return false + } else if !reorg { + return false } + rawdb.WriteHeadFastBlockHash(bc.db, head.Hash()) + bc.currentFastBlock.Store(head) + headFastBlockGauge.Update(int64(head.NumberU64())) + 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) + first := blockChain[0] + last := blockChain[len(blockChain)-1] + + // Ensure genesis is in ancients. + if first.NumberU64() == 1 { + if frozen, _ := bc.db.Ancients(); frozen == 0 { + b := bc.genesisBlock + td := bc.genesisBlock.Difficulty() + writeSize, err := rawdb.WriteAncientBlocks(bc.db, []*types.Block{b}, []types.Receipts{nil}, td) + size += writeSize + if err != nil { + log.Error("Error writing genesis to ancients", "err", err) + return 0, err } + log.Info("Wrote genesis to ancients") } - }() - var deleted []*numberHash + } + // Before writing the blocks to the ancients, we need to ensure that + // they correspond to the what the headerchain 'expects'. + // We only check the last block/header, since it's a contiguous chain. + if !bc.HasHeader(last.Hash(), last.NumberU64()) { + return 0, fmt.Errorf("containing header #%d [%x..] unknown", last.Number(), last.Hash().Bytes()[:4]) + } + + // Write all chain data to ancients. + td := bc.GetTd(first.Hash(), first.NumberU64()) + writeSize, err := rawdb.WriteAncientBlocks(bc.db, blockChain, receiptChain, td) + size += writeSize + if err != nil { + log.Error("Error importing chain data to ancients", "err", err) + return 0, err + } + + // Write tx indices if any condition is satisfied: + // * If user requires to reserve all tx indices(txlookuplimit=0) + // * If all ancient tx indices are required to be reserved(txlookuplimit is even higher than ancientlimit) + // * If block number is large enough to be regarded as a recent block + // It means blocks below the ancientLimit-txlookupLimit won't be indexed. + // + // But if the `TxIndexTail` is not nil, e.g. Geth is initialized with + // an external ancient database, during the setup, blockchain will start + // a background routine to re-indexed all indices in [ancients - txlookupLimit, ancients) + // range. In this case, all tx indices of newly imported blocks should be + // generated. + var 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 + if bc.txLookupLimit == 0 || ancientLimit <= bc.txLookupLimit || block.NumberU64() >= ancientLimit-bc.txLookupLimit { + rawdb.WriteTxLookupEntriesByBlock(batch, block) + } else if rawdb.ReadTxIndexTail(bc.db) != nil { + rawdb.WriteTxLookupEntriesByBlock(batch, block) } - // 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 { + stats.processed++ - // 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 batch.ValueSize() > ethdb.IdealBatchSize || i == len(blockChain)-1 { + size += int64(batch.ValueSize()) + if err = batch.Write(); err != nil { + fastBlock := bc.CurrentFastBlock().NumberU64() + if err := bc.db.TruncateHead(fastBlock + 1); err != nil { + log.Error("Can't truncate ancient store after failed insert", "err", err) } - 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:] + return 0, err } + batch.Reset() } - 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++ - } - // Flush all tx-lookup index data. - size += batch.ValueSize() - if err := batch.Write(); err != nil { - return 0, err } - 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 } + // Update the current fast block because all block data is now present in DB. + previousFastBlock := bc.CurrentFastBlock().NumberU64() if !updateHead(blockChain[len(blockChain)-1]) { - return 0, errors.New("side blocks can't be accepted as the ancient chain data") - } - previous = nil // disable rollback explicitly - - // 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()) + // We end up here if the header chain has reorg'ed, and the blocks/receipts + // don't match the canonical chain. + if err := bc.db.TruncateHead(previousFastBlock + 1); err != nil { + log.Error("Can't truncate ancient store after failed insert", "err", err) } + return 0, errSideChainReceipts } - 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) + // Delete block data from the main database. + batch.Reset() + canonHashes := make(map[common.Hash]struct{}) + for _, block := range blockChain { + canonHashes[block.Hash()] = struct{}{} + if block.NumberU64() == 0 { + continue } + rawdb.DeleteCanonicalHash(batch, block.NumberU64()) + rawdb.DeleteBlockWithoutNumber(batch, block.Hash(), block.NumberU64()) } - 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()) - } + // Delete side chain hash-to-number mappings. + for _, nh := range rawdb.ReadAllHashesInRange(bc.db, first.NumberU64(), last.NumberU64()) { + if _, canon := canonHashes[nh.Hash]; !canon { + rawdb.DeleteHeader(batch, nh.Hash, nh.Number) } } if err := batch.Write(); err != nil { @@ -1143,38 +1135,54 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ } return 0, nil } + // writeLive writes blockchain and corresponding receipt chain into active store. writeLive := func(blockChain types.Blocks, receiptChain []types.Receipts) (int, error) { + skipPresenceCheck := false batch := bc.db.NewBatch() for i, block := range blockChain { // Short circuit insertion if shutting down or processing failed - if atomic.LoadInt32(&bc.procInterrupt) == 1 { + if bc.insertStopped() { 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]) + 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 + if !skipPresenceCheck { + // Ignore if the entire data is already known + if bc.HasBlock(block.Hash(), block.NumberU64()) { + stats.ignored++ + continue + } else { + // If block N is not present, neither are the later blocks. + // This should be true, but if we are mistaken, the shortcut + // here will only cause overwriting of some existing data + skipPresenceCheck = true + } } // 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) + rawdb.WriteTxLookupEntriesByBlock(batch, block) // Always write tx indices for live blocks, we assume they are needed - stats.processed++ + // Write everything belongs to the blocks into the database. So that + // we can ensure all components of body is completed(body, receipts, + // tx indexes) if batch.ValueSize() >= ethdb.IdealBatchSize { if err := batch.Write(); err != nil { return 0, err } - size += batch.ValueSize() + size += int64(batch.ValueSize()) batch.Reset() } + stats.processed++ } + // Write everything belongs to the blocks into the database. So that + // we can ensure all components of body is completed(body, receipts, + // tx indexes) if batch.ValueSize() > 0 { - size += batch.ValueSize() + size += int64(batch.ValueSize()) if err := batch.Write(); err != nil { return 0, err } @@ -1182,7 +1190,8 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ updateHead(blockChain[len(blockChain)-1]) return 0, nil } - // Write downloaded chain data and corresponding receipt chain data. + + // Write downloaded chain data and corresponding receipt chain data if len(ancientBlocks) > 0 { if n, err := writeAncient(ancientBlocks, ancientReceipts); err != nil { if err == errInsertionInterrupted { @@ -1191,6 +1200,19 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ return n, err } } + // Write the tx index tail (block number from where we index) before write any live blocks + if len(liveBlocks) > 0 && liveBlocks[0].NumberU64() == ancientLimit+1 { + // The tx index tail can only be one of the following two options: + // * 0: all ancient blocks have been indexed + // * ancient-limit: the indices of blocks before ancient-limit are ignored + if tail := rawdb.ReadTxIndexTail(bc.db); tail == nil { + if bc.txLookupLimit == 0 || ancientLimit <= bc.txLookupLimit { + rawdb.WriteTxIndexTail(bc.db, 0) + } else { + rawdb.WriteTxIndexTail(bc.db, ancientLimit-bc.txLookupLimit) + } + } + } if len(liveBlocks) > 0 { if n, err := writeLive(liveBlocks, liveReceipts); err != nil { if err == errInsertionInterrupted { @@ -1220,78 +1242,65 @@ var lastWrite uint64 // 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) { - bc.wg.Add(1) - defer bc.wg.Done() - - if err := bc.hc.WriteTd(block.Hash(), block.NumberU64(), td); err != nil { - return err + if bc.insertStopped() { + return errInsertionInterrupted } - rawdb.WriteBlock(bc.db, block) + batch := bc.db.NewBatch() + rawdb.WriteTd(batch, block.Hash(), block.NumberU64(), td) + rawdb.WriteBlock(batch, block) + if err := batch.Write(); err != nil { + log.Crit("Failed to write block into disk", "err", err) + } 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) + bc.writeHeadBlock(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() - +// writeBlockWithState writes block, metadata and corresponding state data to the +// database. +func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.Receipt, state *state.StateDB) error { // Calculate the total difficulty of the block ptd := bc.GetTd(block.ParentHash(), block.NumberU64()-1) if ptd == nil { - return NonStatTy, consensus.ErrUnknownAncestor + return consensus.ErrUnknownAncestor } // Make sure no inconsistent state is leaked during insertion - currentBlock := bc.CurrentBlock() - localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) externTd := new(big.Int).Add(block.Difficulty(), ptd) - // Irrelevant of the canonical status, write the block itself to the database - if err := bc.hc.WriteTd(block.Hash(), block.NumberU64(), externTd); err != nil { - return NonStatTy, err - } - rawdb.WriteBlock(bc.db, block) - + // Irrelevant of the canonical status, write the block itself to the database. + // + // Note all the components of block(td, hash->number map, header, body, receipts) + // should be written atomically. BlockBatch is used for containing all components. + blockBatch := bc.db.NewBatch() + rawdb.WriteTd(blockBatch, block.Hash(), block.NumberU64(), externTd) + rawdb.WriteBlock(blockBatch, block) + rawdb.WriteReceipts(blockBatch, block.Hash(), block.NumberU64(), receipts) + rawdb.WritePreimages(blockBatch, state.Preimages()) + if err := blockBatch.Write(); err != nil { + log.Crit("Failed to write block into disk", "err", err) + } + // Commit all cached state changes into underlying memory database. root, err := state.Commit(bc.chainConfig.IsEIP158(block.Number())) if err != nil { - return NonStatTy, err + return err } triedb := bc.stateCache.TrieDB() // If we're running an archive node, always flush if bc.cacheConfig.TrieDirtyDisabled { - if err := triedb.Commit(root, false); err != nil { - return NonStatTy, err - } + return triedb.Commit(root, false, nil) } else { // Full but not archive node, do proper garbage collection triedb.Reference(root, common.Hash{}) // metadata reference to keep trie alive @@ -1323,7 +1332,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. 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) + triedb.Commit(header.Root, true, nil) lastWrite = chosen bc.gcproc = 0 } @@ -1339,28 +1348,30 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. } } } + return nil +} - // Write other block data using a batch. - batch := bc.db.NewBatch() - rawdb.WriteReceipts(batch, block.Hash(), block.NumberU64(), receipts) - - // If the total difficulty is higher than our known, add it to the canonical chain - // Second clause in the if statement reduces the vulnerability to selfish mining. - // Please refer to http://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf - reorg := externTd.Cmp(localTd) > 0 - currentBlock = bc.CurrentBlock() - if !reorg && externTd.Cmp(localTd) == 0 { - // Split same-difficulty blocks by number, then preferentially select - // the block generated by the local miner as the canonical block. - if block.NumberU64() < currentBlock.NumberU64() { - reorg = true - } else if block.NumberU64() == currentBlock.NumberU64() { - var currentPreserve, blockPreserve bool - if bc.shouldPreserve != nil { - currentPreserve, blockPreserve = bc.shouldPreserve(currentBlock), bc.shouldPreserve(block) - } - reorg = !currentPreserve && (blockPreserve || mrand.Float64() < 0.5) - } +// WriteBlockAndSetHead writes the given block and all associated state to the database, +// and applies the block as the new chain head. +func (bc *BlockChain) WriteBlockAndSetHead(block *types.Block, receipts []*types.Receipt, logs []*types.Log, state *state.StateDB, emitHeadEvent bool) (status WriteStatus, err error) { + if !bc.chainmu.TryLock() { + return NonStatTy, errChainStopped + } + defer bc.chainmu.Unlock() + + return bc.writeBlockAndSetHead(block, receipts, logs, state, emitHeadEvent) +} + +// writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead. +// This function expects the chain mutex to be held. +func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types.Receipt, logs []*types.Log, state *state.StateDB, emitHeadEvent bool) (status WriteStatus, err error) { + if err := bc.writeBlockWithState(block, receipts, state); err != nil { + return NonStatTy, err + } + currentBlock := bc.CurrentBlock() + reorg, err := bc.forker.ReorgNeeded(currentBlock.Header(), block.Header()) + if err != nil { + return NonStatTy, err } if reorg { // Reorganise the chain if the parent is not the head block @@ -1369,34 +1380,50 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. return NonStatTy, err } } - // Write the positional metadata for transaction/receipt lookups and preimages - rawdb.WriteTxLookupEntries(batch, block) - rawdb.WritePreimages(batch, state.Preimages()) - status = CanonStatTy } else { status = SideStatTy } - if err := batch.Write(); err != nil { - return NonStatTy, err - } - // Set new head. if status == CanonStatTy { - bc.insert(block) + bc.writeHeadBlock(block) } bc.futureBlocks.Remove(block.Hash()) + + if status == CanonStatTy { + bc.chainFeed.Send(ChainEvent{Block: block, Hash: block.Hash(), Logs: logs}) + if len(logs) > 0 { + bc.logsFeed.Send(logs) + } + // In theory we should fire a ChainHeadEvent when we inject + // a canonical block, but sometimes we can insert a batch of + // canonical blocks. Avoid firing too many ChainHeadEvents, + // we will fire an accumulated ChainHeadEvent and disable fire + // event here. + if emitHeadEvent { + bc.chainHeadFeed.Send(ChainHeadEvent{Block: block}) + } + } else { + bc.chainSideFeed.Send(ChainSideEvent{Block: block}) + } return status, nil } // addFutureBlock checks if the block is within the max allowed window to get // accepted for future processing, and returns an error if the block is too far // ahead and was not added. +// +// TODO after the transition, the future block shouldn't be kept. Because +// it's not checked in the Geth side anymore. func (bc *BlockChain) addFutureBlock(block *types.Block) error { max := uint64(time.Now().Unix() + maxTimeFutureBlocks) if block.Time() > max { return fmt.Errorf("future block timestamp %v > allowed %v", block.Time(), max) } + if block.Difficulty().Cmp(common.Big0) == 0 { + // Never add PoS blocks into the future queue + return nil + } bc.futureBlocks.Add(block.Hash(), block) return nil } @@ -1404,44 +1431,36 @@ func (bc *BlockChain) addFutureBlock(block *types.Block) error { // InsertChain attempts to insert the given batch of blocks in to the canonical // chain or, otherwise, create a fork. If an error is returned it will return // the index number of the failing block as well an error describing what went -// wrong. -// -// After insertion is done, all accumulated events will be fired. +// wrong. After insertion is done, all accumulated events will be fired. func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { // Sanity check that we have something meaningful to import 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 + // Do a sanity check that the provided chain is actually ordered and linked. for i := 1; i < len(chain); i++ { - block = chain[i] - prev = chain[i-1] + block, prev := chain[i], 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", 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, prev.NumberU64(), + 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, 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 - bc.wg.Add(1) - bc.chainmu.Lock() - n, events, logs, err := bc.insertChain(chain, true) - bc.chainmu.Unlock() - bc.wg.Done() - - bc.PostChainEvents(events, logs) - return n, err + if !bc.chainmu.TryLock() { + return 0, errChainStopped + } + defer bc.chainmu.Unlock() + return bc.insertChain(chain, true, true) } // insertChain is the internal implementation of InsertChain, which assumes that @@ -1452,23 +1471,25 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { // racey behaviour. If a sidechain import is in progress, and the historic state // 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 up - if atomic.LoadInt32(&bc.procInterrupt) == 1 { - return 0, nil, nil, nil +func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals, setHead bool) (int, error) { + // If the chain is terminating, don't even bother starting up. + if bc.insertStopped() { + return 0, nil } + // Start a parallel signature recovery (signer will fluke on fork transition, minimal perf loss) senderCacher.recoverFromBlocks(types.MakeSigner(bc.chainConfig, chain[0].Number()), chain) - // A queued approach to delivering events. This is generally - // faster than direct delivery and requires much less mutex - // acquiring. var ( - stats = insertStats{startTime: mclock.Now()} - events = make([]interface{}, 0, len(chain)) - lastCanon *types.Block - coalescedLogs []*types.Log + stats = insertStats{startTime: mclock.Now()} + lastCanon *types.Block ) + // Fire a single chain head event if we've progressed the chain + defer func() { + if lastCanon != nil && bc.CurrentBlock().Hash() == lastCanon.Hash() { + bc.chainHeadFeed.Send(ChainHeadEvent{lastCanon}) + } + }() // Start the parallel header verifier headers := make([]*types.Header, len(chain)) seals := make([]bool, len(chain)) @@ -1482,25 +1503,33 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // Peek the error for the first block to decide the directing import logic it := newInsertIterator(chain, results, bc.validator) - block, err := it.next() - // Left-trim all the known blocks - if err == ErrKnownBlock { + // Left-trim all the known blocks that don't need to build snapshot + if bc.skipBlock(err, it) { // 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 + // 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 + reorg bool + current = bc.CurrentBlock() ) - for block != nil && err == ErrKnownBlock { - externTd = new(big.Int).Add(externTd, block.Difficulty()) - if localTd.Cmp(externTd) < 0 { - break + for block != nil && bc.skipBlock(err, it) { + reorg, err = bc.forker.ReorgNeeded(current.Header(), block.Header()) + if err != nil { + return it.index, err + } + if reorg { + // Switch to import mode if the forker says the reorg is necessary + // and also the block is not on the canonical chain. + // In eth2 the forker always returns true for reorg decision (blindly trusting + // the external consensus engine), but in order to prevent the unnecessary + // reorgs when importing known blocks, the special case is handled here. + if block.NumberU64() > current.NumberU64() || bc.GetCanonicalHash(block.NumberU64()) != block.Hash() { + break + } } log.Debug("Ignoring already known block", "number", block.Number(), "hash", block.Hash()) stats.ignored++ @@ -1515,10 +1544,10 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // 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 { + for block != nil && bc.skipBlock(err, it) { 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 + return it.index, err } lastCanon = block @@ -1527,17 +1556,24 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // 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: - log.Debug("Pruned ancestor, inserting as sidechain", "number", block.Number(), "hash", block.Hash()) - return bc.insertSideChain(block, it) - + // First block is pruned + case errors.Is(err, consensus.ErrPrunedAncestor): + if setHead { + // First block is pruned, insert as sidechain and reorg only if TD grows enough + log.Debug("Pruned ancestor, inserting as sidechain", "number", block.Number(), "hash", block.Hash()) + return bc.insertSideChain(block, it) + } else { + // We're post-merge and the parent is pruned, try to recover the parent state + log.Debug("Pruned ancestor", "number", block.Number(), "hash", block.Hash()) + _, err := bc.recoverAncestors(block) + return it.index, err + } // 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) { + case errors.Is(err, consensus.ErrFutureBlock) || (errors.Is(err, consensus.ErrUnknownAncestor) && bc.futureBlocks.Contains(it.first().ParentHash())): + for block != nil && (it.index == 0 || errors.Is(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 + return it.index, err } block, err = it.next() } @@ -1545,32 +1581,47 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] stats.ignored += it.remaining() // If there are any still remaining, mark as ignored - return it.index, events, coalescedLogs, err + return it.index, err - // Some other error occurred, abort - case err != nil: + // Some other error(except ErrKnownBlock) occurred, abort. + // ErrKnownBlock is allowed here since some known blocks + // still need re-execution to generate snapshots that are missing + case err != nil && !errors.Is(err, ErrKnownBlock): + bc.futureBlocks.Remove(block.Hash()) stats.ignored += len(it.chain) bc.reportBlock(block, nil, err) - return it.index, events, coalescedLogs, err + return it.index, err } // No validation errors for the first block (or chain prefix skipped) - for ; block != nil && err == nil || err == ErrKnownBlock; block, err = it.next() { + var activeState *state.StateDB + defer func() { + // The chain importer is starting and stopping trie prefetchers. If a bad + // block or other error is hit however, an early return may not properly + // terminate the background threads. This defer ensures that we clean up + // and dangling prefetcher, without defering each and holding on live refs. + if activeState != nil { + activeState.StopPrefetcher() + } + }() + + for ; block != nil && err == nil || errors.Is(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") + if bc.insertStopped() { + log.Debug("Abort during block processing") break } // If the header is a banned one, straight out abort if BadHashes[block.Hash()] { - bc.reportBlock(block, nil, ErrBlacklistedHash) - return it.index, events, coalescedLogs, ErrBlacklistedHash + bc.reportBlock(block, nil, ErrBannedHash) + return it.index, ErrBannedHash } // 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 { + // its header and body was already in the database). But if the corresponding + // snapshot layer is missing, forcibly rerun the execution to build it. + if bc.skipBlock(err, it) { logger := log.Debug if bc.chainConfig.Clique == nil { logger = log.Warn @@ -1579,63 +1630,83 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "uncles", len(block.Uncles()), "txs", len(block.Transactions()), "gas", block.GasUsed(), "root", block.Root()) + // Special case. Commit the empty receipt slice if we meet the known + // block in the middle. It can only happen in the clique chain. Whenever + // we insert blocks via `insertSideChain`, we only commit `td`, `header` + // and `body` if it's non-existent. Since we don't have receipts without + // reexecution, so nothing to commit. But if the sidechain will be adopted + // as the canonical chain eventually, it needs to be reexecuted for missing + // state, but if it's this special case here(skip reexecution) we will lose + // the empty receipt entry. + if len(block.Transactions()) == 0 { + rawdb.WriteReceipts(bc.db, block.Hash(), block.NumberU64(), nil) + } else { + log.Error("Please file an issue, skip known block execution without receipt", + "hash", block.Hash(), "number", block.NumberU64()) + } if err := bc.writeKnownBlock(block); err != nil { - return it.index, nil, nil, err + return it.index, 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.GetHeader(block.ParentHash(), block.NumberU64()-1) } - statedb, err := state.New(parent.Root, bc.stateCache) + statedb, err := state.New(parent.Root, bc.stateCache, bc.snaps) if err != nil { - return it.index, events, coalescedLogs, err + return it.index, err } + + // Enable prefetching to pull in trie node paths while processing transactions + statedb.StartPrefetcher("chain") + activeState = statedb + // 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) + throwaway, _ := state.New(parent.Root, bc.stateCache, bc.snaps) + + go func(start time.Time, followup *types.Block, throwaway *state.StateDB, interrupt *uint32) { bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, &followupInterrupt) blockPrefetchExecuteTimer.Update(time.Since(start)) - if atomic.LoadUint32(&followupInterrupt) == 1 { + if atomic.LoadUint32(interrupt) == 1 { blockPrefetchInterruptMeter.Mark(1) } - }(time.Now()) + }(time.Now(), followup, throwaway, &followupInterrupt) } } + // Process block using the parent state as reference point substart := time.Now() receipts, logs, usedGas, 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 + return it.index, 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 + // 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 + snapshotAccountReadTimer.Update(statedb.SnapshotAccountReads) // Account reads are complete, we can mark them + snapshotStorageReadTimer.Update(statedb.SnapshotStorageReads) // Storage reads are complete, we can mark them + triehash := statedb.AccountHashes + statedb.StorageHashes // Save to not double count in validation + trieproc := statedb.SnapshotAccountReads + statedb.AccountReads + statedb.AccountUpdates + trieproc += statedb.SnapshotStorageReads + statedb.StorageReads + statedb.StorageUpdates blockExecutionTimer.Update(time.Since(substart) - trieproc - triehash) @@ -1644,32 +1715,46 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] if err := bc.validator.ValidateState(block, statedb, receipts, usedGas); err != nil { bc.reportBlock(block, receipts, err) atomic.StoreUint32(&followupInterrupt, 1) - return it.index, events, coalescedLogs, err + return it.index, err } 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. substart = time.Now() - status, err := bc.writeBlockWithState(block, receipts, statedb) - if err != nil { - atomic.StoreUint32(&followupInterrupt, 1) - return it.index, events, coalescedLogs, err + var status WriteStatus + if !setHead { + // Don't set the head, only insert the block + err = bc.writeBlockWithState(block, receipts, statedb) + } else { + status, err = bc.writeBlockAndSetHead(block, receipts, logs, statedb, false) } atomic.StoreUint32(&followupInterrupt, 1) - + if err != nil { + return it.index, err + } // 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 + accountCommitTimer.Update(statedb.AccountCommits) // Account commits are complete, we can mark them + storageCommitTimer.Update(statedb.StorageCommits) // Storage commits are complete, we can mark them + snapshotCommitTimer.Update(statedb.SnapshotCommits) // Snapshot commits are complete, we can mark them - blockWriteTimer.Update(time.Since(substart) - statedb.AccountCommits - statedb.StorageCommits) + blockWriteTimer.Update(time.Since(substart) - statedb.AccountCommits - statedb.StorageCommits - statedb.SnapshotCommits) blockInsertTimer.UpdateSince(start) + // Report the import stats before returning the various results + stats.processed++ + stats.usedGas += usedGas + + dirty, _ := bc.stateCache.TrieDB().Size() + stats.report(chain, it.index, dirty, setHead) + + if !setHead { + return it.index, nil // Direct block insertion of a single block + } switch status { case CanonStatTy: log.Debug("Inserted new block", "number", block.Number(), "hash", block.Hash(), @@ -1677,8 +1762,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "elapsed", common.PrettyDuration(time.Since(start)), "root", block.Root()) - coalescedLogs = append(coalescedLogs, logs...) - events = append(events, ChainEvent{block, block.Hash(), logs}) lastCanon = block // Only count canonical blocks for GC processing time @@ -1689,7 +1772,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "diff", block.Difficulty(), "elapsed", common.PrettyDuration(time.Since(start)), "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 @@ -1699,33 +1781,25 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "txs", len(block.Transactions()), "gas", block.GasUsed(), "uncles", len(block.Uncles()), "root", block.Root()) } - stats.processed++ - stats.usedGas += usedGas - - 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 { + if block != nil && errors.Is(err, consensus.ErrFutureBlock) { if err := bc.addFutureBlock(block); err != nil { - return it.index, events, coalescedLogs, err + return it.index, err } block, err = it.next() - for ; block != nil && err == consensus.ErrUnknownAncestor; block, err = it.next() { + for ; block != nil && errors.Is(err, consensus.ErrUnknownAncestor); block, err = it.next() { if err := bc.addFutureBlock(block); err != nil { - return it.index, events, coalescedLogs, err + return it.index, err } stats.queued++ } } stats.ignored += it.remaining() - // Append a single chain head event if we've progressed the chain - if lastCanon != nil && bc.CurrentBlock().Hash() == lastCanon.Hash() { - events = append(events, ChainHeadEvent{lastCanon}) - } - return it.index, events, coalescedLogs, err + return it.index, err } // insertSideChain is called when an import batch hits upon a pruned ancestor @@ -1734,17 +1808,19 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // // 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) { +// insertSideChain is only used pre-merge. +func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator) (int, error) { var ( - externTd *big.Int - current = bc.CurrentBlock() + externTd *big.Int + lastBlock = block + 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 // ones. Any other errors means that the block is invalid, and should not be written // to disk. err := consensus.ErrPrunedAncestor - for ; block != nil && (err == consensus.ErrPrunedAncestor); block, err = it.next() { + for ; block != nil && errors.Is(err, consensus.ErrPrunedAncestor); block, err = it.next() { // Check the canonical state root for that number if number := block.NumberU64(); current.NumberU64() >= number { canonical := bc.GetBlockByNumber(number) @@ -1770,7 +1846,7 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator) (i // If someone legitimately side-mines blocks, they would still be imported as usual. However, // we cannot risk writing unverified blocks to disk when they obviously target the pruning // mechanism. - return it.index, nil, nil, errors.New("sidechain ghost-state attack") + return it.index, errors.New("sidechain ghost-state attack") } } if externTd == nil { @@ -1781,13 +1857,14 @@ 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 { - return it.index, nil, nil, err + return it.index, err } log.Debug("Injected sidechain block", "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()) } + lastBlock = block } // At this point, we've written all sidechain blocks to database. Loop ended // either on some other error or all were processed. If there was some other @@ -1795,10 +1872,14 @@ 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(current.Hash(), current.NumberU64()) - if localTd.Cmp(externTd) > 0 { + reorg, err := bc.forker.ReorgNeeded(current.Header(), lastBlock.Header()) + if err != nil { + return it.index, err + } + if !reorg { + localTd := bc.GetTd(current.Hash(), current.NumberU64()) log.Info("Sidechain written to disk", "start", it.first().NumberU64(), "end", it.previous().Number, "sidetd", externTd, "localtd", localTd) - return it.index, nil, nil, err + return it.index, err } // Gather all the sidechain hashes (full blocks may be memory heavy) var ( @@ -1813,7 +1894,7 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator) (i parent = bc.GetHeader(parent.ParentHash, parent.Number.Uint64()-1) } if parent == nil { - return it.index, nil, nil, errors.New("missing parent") + return it.index, errors.New("missing parent") } // Import all the pruned blocks to make the state available var ( @@ -1832,69 +1913,139 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator) (i // memory here. if len(blocks) >= 2048 || memory > 64*1024*1024 { log.Info("Importing heavy sidechain segment", "blocks", len(blocks), "start", blocks[0].NumberU64(), "end", block.NumberU64()) - if _, _, _, err := bc.insertChain(blocks, false); err != nil { - return 0, nil, nil, err + if _, err := bc.insertChain(blocks, false, true); err != nil { + return 0, err } blocks, memory = blocks[:0], 0 // If the chain is terminating, stop processing blocks - if atomic.LoadInt32(&bc.procInterrupt) == 1 { - log.Debug("Premature abort during blocks processing") - return 0, nil, nil, nil + if bc.insertStopped() { + log.Debug("Abort during blocks processing") + return 0, nil } } } if len(blocks) > 0 { log.Info("Importing sidechain segment", "start", blocks[0].NumberU64(), "end", blocks[len(blocks)-1].NumberU64()) - return bc.insertChain(blocks, false) + return bc.insertChain(blocks, false, true) + } + return 0, nil +} + +// recoverAncestors finds the closest ancestor with available state and re-execute +// all the ancestor blocks since that. +// recoverAncestors is only used post-merge. +// We return the hash of the latest block that we could correctly validate. +func (bc *BlockChain) recoverAncestors(block *types.Block) (common.Hash, error) { + // Gather all the sidechain hashes (full blocks may be memory heavy) + var ( + hashes []common.Hash + numbers []uint64 + parent = block + ) + for parent != nil && !bc.HasState(parent.Root()) { + hashes = append(hashes, parent.Hash()) + numbers = append(numbers, parent.NumberU64()) + parent = bc.GetBlock(parent.ParentHash(), parent.NumberU64()-1) + + // If the chain is terminating, stop iteration + if bc.insertStopped() { + log.Debug("Abort during blocks iteration") + return common.Hash{}, errInsertionInterrupted + } + } + if parent == nil { + return common.Hash{}, errors.New("missing parent") + } + // Import all the pruned blocks to make the state available + for i := len(hashes) - 1; i >= 0; i-- { + // If the chain is terminating, stop processing blocks + if bc.insertStopped() { + log.Debug("Abort during blocks processing") + return common.Hash{}, errInsertionInterrupted + } + var b *types.Block + if i == 0 { + b = block + } else { + b = bc.GetBlock(hashes[i], numbers[i]) + } + if _, err := bc.insertChain(types.Blocks{b}, false, false); err != nil { + return b.ParentHash(), err + } + } + return block.Hash(), nil +} + +// collectLogs collects the logs that were generated or removed during +// the processing of the block that corresponds with the given hash. +// These logs are later announced as deleted or reborn. +func (bc *BlockChain) collectLogs(hash common.Hash, removed bool) []*types.Log { + number := bc.hc.GetBlockNumber(hash) + if number == nil { + return nil + } + receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig) + + var logs []*types.Log + for _, receipt := range receipts { + for _, log := range receipt.Logs { + l := *log + if removed { + l.Removed = true + } + logs = append(logs, &l) + } + } + return logs +} + +// mergeLogs returns a merged log slice with specified sort order. +func mergeLogs(logs [][]*types.Log, reverse bool) []*types.Log { + var ret []*types.Log + if reverse { + for i := len(logs) - 1; i >= 0; i-- { + ret = append(ret, logs[i]...) + } + } else { + for i := 0; i < len(logs); i++ { + ret = append(ret, logs[i]...) + } } - return 0, nil, nil, nil + return ret } // 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. +// Note the new head block won't be processed here, callers need to handle it +// externally. func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { var ( newChain types.Blocks oldChain types.Blocks commonBlock *types.Block - deletedTxs types.Transactions - addedTxs types.Transactions + deletedTxs []common.Hash + addedTxs []common.Hash - 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 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, bc.chainConfig) - for _, receipt := range receipts { - for _, log := range receipt.Logs { - l := *log - if removed { - l.Removed = true - deletedLogs = append(deletedLogs, &l) - } else { - rebirthLogs = append(rebirthLogs, &l) - } - } - } - } + deletedLogs [][]*types.Log + rebirthLogs [][]*types.Log ) // Reduce the longer chain to the same number as the shorter one if oldBlock.NumberU64() > newBlock.NumberU64() { // 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(), true) + for _, tx := range oldBlock.Transactions() { + deletedTxs = append(deletedTxs, tx.Hash()) + } + + // Collect deleted logs for notification + logs := bc.collectLogs(oldBlock.Hash(), true) + if len(logs) > 0 { + deletedLogs = append(deletedLogs, logs) + } } } else { // New chain is longer, stash all blocks away for subsequent insertion @@ -1918,9 +2069,15 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { } // Remove an old block as well as stash away a new block oldChain = append(oldChain, oldBlock) - deletedTxs = append(deletedTxs, oldBlock.Transactions()...) - collectLogs(oldBlock.Hash(), true) + for _, tx := range oldBlock.Transactions() { + deletedTxs = append(deletedTxs, tx.Hash()) + } + // Collect deleted logs for notification + logs := bc.collectLogs(oldBlock.Hash(), true) + if len(logs) > 0 { + deletedLogs = append(deletedLogs, logs) + } newChain = append(newChain, newBlock) // Step back with both chains @@ -1933,6 +2090,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { return fmt.Errorf("invalid new chain") } } + // Ensure the user sees large reorgs if len(oldChain) > 0 && len(newChain) > 0 { logFn := log.Info @@ -1945,86 +2103,145 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { "drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash()) blockReorgAddMeter.Mark(int64(len(newChain))) blockReorgDropMeter.Mark(int64(len(oldChain))) + blockReorgMeter.Mark(1) + } else if len(newChain) > 0 { + // Special case happens in the post merge stage that current head is + // the ancestor of new head while these two blocks are not consecutive + log.Info("Extend chain", "add", len(newChain), "number", newChain[0].Number(), "hash", newChain[0].Hash()) + blockReorgAddMeter.Mark(int64(len(newChain))) } else { - log.Error("Impossible reorg, please file an issue", "oldnum", oldBlock.Number(), "oldhash", oldBlock.Hash(), "newnum", newBlock.Number(), "newhash", newBlock.Hash()) + // len(newChain) == 0 && len(oldChain) > 0 + // rewind the canonical chain to a lower point. + log.Error("Impossible reorg, please file an issue", "oldnum", oldBlock.Number(), "oldhash", oldBlock.Hash(), "oldblocks", len(oldChain), "newnum", newBlock.Number(), "newhash", newBlock.Hash(), "newblocks", len(newChain)) } // 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]) + bc.writeHeadBlock(newChain[i]) - // Collect reborn logs due to chain reorg - collectLogs(newChain[i].Hash(), false) + // Collect the new added transactions. + for _, tx := range newChain[i].Transactions() { + addedTxs = append(addedTxs, tx.Hash()) + } + } - // Write lookup entries for hash based transaction/receipt searches - rawdb.WriteTxLookupEntries(bc.db, newChain[i]) - addedTxs = append(addedTxs, newChain[i].Transactions()...) + // Delete useless indexes right now which includes the non-canonical + // transaction indexes, canonical chain indexes which above the head. + indexesBatch := bc.db.NewBatch() + for _, tx := range types.HashDifference(deletedTxs, addedTxs) { + rawdb.DeleteTxLookupEntry(indexesBatch, tx) } - // 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 types.TxDifference(deletedTxs, addedTxs) { - rawdb.DeleteTxLookupEntry(batch, tx.Hash()) + + // Delete all hash markers that are not part of the new canonical chain. + // Because the reorg function does not handle new chain head, all hash + // markers greater than or equal to new chain head should be deleted. + number := commonBlock.NumberU64() + if len(newChain) > 1 { + number = newChain[1].NumberU64() } - // 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) + rawdb.DeleteCanonicalHash(indexesBatch, i) + } + if err := indexesBatch.Write(); err != nil { + log.Crit("Failed to delete useless indexes", "err", err) + } + + // Collect the logs + for i := len(newChain) - 1; i >= 1; i-- { + // Collect reborn logs due to chain reorg + logs := bc.collectLogs(newChain[i].Hash(), false) + if len(logs) > 0 { + rebirthLogs = append(rebirthLogs, logs) + } } - 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}) - } + if len(deletedLogs) > 0 { + bc.rmLogsFeed.Send(RemovedLogsEvent{mergeLogs(deletedLogs, true)}) + } + if len(rebirthLogs) > 0 { + bc.logsFeed.Send(mergeLogs(rebirthLogs, false)) + } + if len(oldChain) > 0 { + for i := len(oldChain) - 1; i >= 0; i-- { + bc.chainSideFeed.Send(ChainSideEvent{Block: oldChain[i]}) } - }() + } return nil } -// PostChainEvents iterates over the events generated by a chain insertion and -// posts them into the event feed. -// TODO: Should not expose PostChainEvents. The chain events should be posted in WriteBlock. -func (bc *BlockChain) PostChainEvents(events []interface{}, logs []*types.Log) { - // post event logs for further processing - if logs != nil { - bc.logsFeed.Send(logs) +// InsertBlockWithoutSetHead executes the block, runs the necessary verification +// upon it and then persist the block and the associate state into the database. +// The key difference between the InsertChain is it won't do the canonical chain +// updating. It relies on the additional SetCanonical call to finalize the entire +// procedure. +func (bc *BlockChain) InsertBlockWithoutSetHead(block *types.Block) error { + if !bc.chainmu.TryLock() { + return errChainStopped } - for _, event := range events { - switch ev := event.(type) { - case ChainEvent: - bc.chainFeed.Send(ev) + defer bc.chainmu.Unlock() - case ChainHeadEvent: - bc.chainHeadFeed.Send(ev) + _, err := bc.insertChain(types.Blocks{block}, true, false) + return err +} + +// SetCanonical rewinds the chain to set the new head block as the specified +// block. It's possible that the state of the new head is missing, and it will +// be recovered in this function as well. +func (bc *BlockChain) SetCanonical(head *types.Block) (common.Hash, error) { + if !bc.chainmu.TryLock() { + return common.Hash{}, errChainStopped + } + defer bc.chainmu.Unlock() - case ChainSideEvent: - bc.chainSideFeed.Send(ev) + // Re-execute the reorged chain in case the head state is missing. + if !bc.HasState(head.Root()) { + if latestValidHash, err := bc.recoverAncestors(head); err != nil { + return latestValidHash, err } + log.Info("Recovered head state", "number", head.Number(), "hash", head.Hash()) + } + // Run the reorg if necessary and set the given block as new head. + start := time.Now() + if head.ParentHash() != bc.CurrentBlock().Hash() { + if err := bc.reorg(bc.CurrentBlock(), head); err != nil { + return common.Hash{}, err + } + } + bc.writeHeadBlock(head) + + // Emit events + logs := bc.collectLogs(head.Hash(), false) + bc.chainFeed.Send(ChainEvent{Block: head, Hash: head.Hash(), Logs: logs}) + if len(logs) > 0 { + bc.logsFeed.Send(logs) + } + bc.chainHeadFeed.Send(ChainHeadEvent{Block: head}) + + context := []interface{}{ + "number", head.Number(), + "hash", head.Hash(), + "root", head.Root(), + "elapsed", time.Since(start), + } + if timestamp := time.Unix(int64(head.Time()), 0); time.Since(timestamp) > time.Minute { + context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) } + log.Info("Chain head was updated", context...) + return head.Hash(), nil } -func (bc *BlockChain) update() { +func (bc *BlockChain) updateFutureBlocks() { futureTimer := time.NewTicker(5 * time.Second) defer futureTimer.Stop() + defer bc.wg.Done() for { select { case <-futureTimer.C: @@ -2035,26 +2252,145 @@ func (bc *BlockChain) update() { } } -// BadBlocks returns a list of the last 'bad blocks' that the client has seen on the network -func (bc *BlockChain) BadBlocks() []*types.Block { - blocks := make([]*types.Block, 0, bc.badBlocks.Len()) - for _, hash := range bc.badBlocks.Keys() { - if blk, exist := bc.badBlocks.Peek(hash); exist { - block := blk.(*types.Block) - blocks = append(blocks, block) - } +// skipBlock returns 'true', if the block being imported can be skipped over, meaning +// that the block does not need to be processed but can be considered already fully 'done'. +func (bc *BlockChain) skipBlock(err error, it *insertIterator) bool { + // We can only ever bypass processing if the only error returned by the validator + // is ErrKnownBlock, which means all checks passed, but we already have the block + // and state. + if !errors.Is(err, ErrKnownBlock) { + return false + } + // If we're not using snapshots, we can skip this, since we have both block + // and (trie-) state + if bc.snaps == nil { + return true + } + var ( + header = it.current() // header can't be nil + parentRoot common.Hash + ) + // If we also have the snapshot-state, we can skip the processing. + if bc.snaps.Snapshot(header.Root) != nil { + return true + } + // In this case, we have the trie-state but not snapshot-state. If the parent + // snapshot-state exists, we need to process this in order to not get a gap + // in the snapshot layers. + // Resolve parent block + if parent := it.previous(); parent != nil { + parentRoot = parent.Root + } else if parent = bc.GetHeaderByHash(header.ParentHash); parent != nil { + parentRoot = parent.Root } - return blocks + if parentRoot == (common.Hash{}) { + return false // Theoretically impossible case + } + // Parent is also missing snapshot: we can skip this. Otherwise process. + if bc.snaps.Snapshot(parentRoot) == nil { + return true + } + return false } -// addBadBlock adds a bad block to the bad-block LRU cache -func (bc *BlockChain) addBadBlock(block *types.Block) { - bc.badBlocks.Add(block.Hash(), block) +// maintainTxIndex is responsible for the construction and deletion of the +// transaction index. +// +// User can use flag `txlookuplimit` to specify a "recentness" block, below +// which ancient tx indices get deleted. If `txlookuplimit` is 0, it means +// all tx indices will be reserved. +// +// The user can adjust the txlookuplimit value for each launch after fast +// sync, Geth will automatically construct the missing indices and delete +// the extra indices. +func (bc *BlockChain) maintainTxIndex(ancients uint64) { + defer bc.wg.Done() + + // Before starting the actual maintenance, we need to handle a special case, + // where user might init Geth with an external ancient database. If so, we + // need to reindex all necessary transactions before starting to process any + // pruning requests. + if ancients > 0 { + var from = uint64(0) + if bc.txLookupLimit != 0 && ancients > bc.txLookupLimit { + from = ancients - bc.txLookupLimit + } + rawdb.IndexTransactions(bc.db, from, ancients, bc.quit) + } + + // indexBlocks reindexes or unindexes transactions depending on user configuration + indexBlocks := func(tail *uint64, head uint64, done chan struct{}) { + defer func() { done <- struct{}{} }() + + // If the user just upgraded Geth to a new version which supports transaction + // index pruning, write the new tail and remove anything older. + if tail == nil { + if bc.txLookupLimit == 0 || head < bc.txLookupLimit { + // Nothing to delete, write the tail and return + rawdb.WriteTxIndexTail(bc.db, 0) + } else { + // Prune all stale tx indices and record the tx index tail + rawdb.UnindexTransactions(bc.db, 0, head-bc.txLookupLimit+1, bc.quit) + } + return + } + // If a previous indexing existed, make sure that we fill in any missing entries + if bc.txLookupLimit == 0 || head < bc.txLookupLimit { + if *tail > 0 { + // It can happen when chain is rewound to a historical point which + // is even lower than the indexes tail, recap the indexing target + // to new head to avoid reading non-existent block bodies. + end := *tail + if end > head+1 { + end = head + 1 + } + rawdb.IndexTransactions(bc.db, 0, end, bc.quit) + } + return + } + // Update the transaction index to the new chain state + if head-bc.txLookupLimit+1 < *tail { + // Reindex a part of missing indices and rewind index tail to HEAD-limit + rawdb.IndexTransactions(bc.db, head-bc.txLookupLimit+1, *tail, bc.quit) + } else { + // Unindex a part of stale indices and forward index tail to HEAD-limit + rawdb.UnindexTransactions(bc.db, *tail, head-bc.txLookupLimit+1, bc.quit) + } + } + + // Any reindexing done, start listening to chain events and moving the index window + var ( + done chan struct{} // Non-nil if background unindexing or reindexing routine is active. + headCh = make(chan ChainHeadEvent, 1) // Buffered to avoid locking up the event feed + ) + sub := bc.SubscribeChainHeadEvent(headCh) + if sub == nil { + return + } + defer sub.Unsubscribe() + + for { + select { + case head := <-headCh: + if done == nil { + done = make(chan struct{}) + go indexBlocks(rawdb.ReadTxIndexTail(bc.db), head.Block.NumberU64(), done) + } + case <-done: + done = nil + case <-bc.quit: + if done != nil { + log.Info("Waiting background transaction indexer to exit") + <-done + } + return + } + } } // reportBlock logs a bad block error. func (bc *BlockChain) reportBlock(block *types.Block, receipts types.Receipts, err error) { - bc.addBadBlock(block) + rawdb.WriteBadBlock(bc.db, block) var receiptString string for i, receipt := range receipts { @@ -2067,7 +2403,7 @@ func (bc *BlockChain) reportBlock(block *types.Block, receipts types.Receipts, e Chain config: %v Number: %v -Hash: 0x%x +Hash: %#x %v Error: %v @@ -2084,134 +2420,26 @@ Error: %v // of the header retrieval mechanisms already need to verify nonces, as well as // because nonces can be verified sparsely, not needing to check each. func (bc *BlockChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { + if len(chain) == 0 { + return 0, nil + } start := time.Now() if i, err := bc.hc.ValidateHeaderChain(chain, checkFreq); err != nil { return i, err } - // Make sure only one thread manipulates the chain at once - bc.chainmu.Lock() - defer bc.chainmu.Unlock() - - bc.wg.Add(1) - defer bc.wg.Done() - - whFunc := func(header *types.Header) error { - _, err := bc.hc.WriteHeader(header) - return err - } - return bc.hc.InsertHeaderChain(chain, whFunc, start) -} - -// 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 { - return bc.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 (bc *BlockChain) GetTd(hash common.Hash, number uint64) *big.Int { - return bc.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 (bc *BlockChain) GetTdByHash(hash common.Hash) *big.Int { - return bc.hc.GetTdByHash(hash) -} - -// GetHeader retrieves a block header from the database by hash and number, -// caching it if found. -func (bc *BlockChain) GetHeader(hash common.Hash, number uint64) *types.Header { - return bc.hc.GetHeader(hash, number) -} - -// GetHeaderByHash retrieves a block header from the database by hash, caching it if -// found. -func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header { - return bc.hc.GetHeaderByHash(hash) -} - -// HasHeader checks if a block header is present in the database or not, caching -// it if present. -func (bc *BlockChain) HasHeader(hash common.Hash, number uint64) bool { - return bc.hc.HasHeader(hash, 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 { - return bc.hc.GetBlockHashesFromHash(hash, max) -} - -// GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or -// a close ancestor of it is canonical. maxNonCanonical points to a downwards counter limiting the -// 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 *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - bc.chainmu.RLock() - defer bc.chainmu.RUnlock() - - return bc.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 (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { - return bc.hc.GetHeaderByNumber(number) -} - -// 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 + if !bc.chainmu.TryLock() { + return 0, errChainStopped } - 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. -func (bc *BlockChain) Engine() consensus.Engine { return bc.engine } - -// SubscribeRemovedLogsEvent registers a subscription of RemovedLogsEvent. -func (bc *BlockChain) SubscribeRemovedLogsEvent(ch chan<- RemovedLogsEvent) event.Subscription { - return bc.scope.Track(bc.rmLogsFeed.Subscribe(ch)) -} - -// SubscribeChainEvent registers a subscription of ChainEvent. -func (bc *BlockChain) SubscribeChainEvent(ch chan<- ChainEvent) event.Subscription { - return bc.scope.Track(bc.chainFeed.Subscribe(ch)) -} - -// SubscribeChainHeadEvent registers a subscription of ChainHeadEvent. -func (bc *BlockChain) SubscribeChainHeadEvent(ch chan<- ChainHeadEvent) event.Subscription { - return bc.scope.Track(bc.chainHeadFeed.Subscribe(ch)) -} - -// SubscribeChainSideEvent registers a subscription of ChainSideEvent. -func (bc *BlockChain) SubscribeChainSideEvent(ch chan<- ChainSideEvent) event.Subscription { - return bc.scope.Track(bc.chainSideFeed.Subscribe(ch)) -} - -// SubscribeLogsEvent registers a subscription of []*types.Log. -func (bc *BlockChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { - return bc.scope.Track(bc.logsFeed.Subscribe(ch)) + defer bc.chainmu.Unlock() + _, err := bc.hc.InsertHeaderChain(chain, start, bc.forker) + return 0, err } -// 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)) +// SetBlockValidatorAndProcessorForTesting sets the current validator and processor. +// This method can be used to force an invalid blockchain to be verified for tests. +// This method is unsafe and should only be used before block import starts. +func (bc *BlockChain) SetBlockValidatorAndProcessorForTesting(v Validator, p Processor) { + bc.validator = v + bc.processor = p } diff --git a/core/blockchain_insert.go b/core/blockchain_insert.go index ac89270a..479eccc8 100644 --- a/core/blockchain_insert.go +++ b/core/blockchain_insert.go @@ -19,10 +19,10 @@ package core import ( "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "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/log" ) // insertStats tracks and reports on block insertion. @@ -39,11 +39,11 @@ 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, dirty common.StorageSize) { +func (st *insertStats) report(chain []*types.Block, index int, dirty common.StorageSize, setHead bool) { // Fetch the timings for the batch var ( now = mclock.Now() - elapsed = time.Duration(now) - time.Duration(st.startTime) + elapsed = now.Sub(st.startTime) ) // If we're at the last block of the batch or report period reached, log if index == len(chain)-1 || elapsed >= statsReportLimit { @@ -71,8 +71,11 @@ func (st *insertStats) report(chain []*types.Block, index int, dirty common.Stor if st.ignored > 0 { context = append(context, []interface{}{"ignored", st.ignored}...) } - log.Info("Imported new chain segment", context...) - + if setHead { + log.Info("Imported new chain segment", context...) + } else { + log.Info("Imported new potential chain segment", context...) + } // Bump the stats reported to the next section *st = insertStats{startTime: now, lastIndex: index + 1} } @@ -150,6 +153,14 @@ func (it *insertIterator) previous() *types.Header { return it.chain[it.index-1].Header() } +// current returns the current header that is being processed, or nil. +func (it *insertIterator) current() *types.Header { + if it.index == -1 || it.index >= len(it.chain) { + return nil + } + return it.chain[it.index].Header() +} + // first returns the first block in the it. func (it *insertIterator) first() *types.Block { return it.chain[0] diff --git a/core/blockchain_reader.go b/core/blockchain_reader.go new file mode 100644 index 00000000..5814c8a0 --- /dev/null +++ b/core/blockchain_reader.go @@ -0,0 +1,408 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// 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 { + return bc.hc.CurrentHeader() +} + +// CurrentBlock retrieves the current head block of the canonical chain. The +// block is retrieved from the blockchain's internal cache. +func (bc *BlockChain) CurrentBlock() *types.Block { + return bc.currentBlock.Load().(*types.Block) +} + +// CurrentFastBlock retrieves the current fast-sync head block of the canonical +// chain. The block is retrieved from the blockchain's internal cache. +func (bc *BlockChain) CurrentFastBlock() *types.Block { + return bc.currentFastBlock.Load().(*types.Block) +} + +// CurrentFinalizedBlock retrieves the current finalized block of the canonical +// chain. The block is retrieved from the blockchain's internal cache. +func (bc *BlockChain) CurrentFinalizedBlock() *types.Block { + return bc.currentFinalizedBlock.Load().(*types.Block) +} + +// CurrentSafeBlock retrieves the current safe block of the canonical +// chain. The block is retrieved from the blockchain's internal cache. +func (bc *BlockChain) CurrentSafeBlock() *types.Block { + return bc.currentSafeBlock.Load().(*types.Block) +} + +// HasHeader checks if a block header is present in the database or not, caching +// it if present. +func (bc *BlockChain) HasHeader(hash common.Hash, number uint64) bool { + return bc.hc.HasHeader(hash, number) +} + +// GetHeader retrieves a block header from the database by hash and number, +// caching it if found. +func (bc *BlockChain) GetHeader(hash common.Hash, number uint64) *types.Header { + return bc.hc.GetHeader(hash, number) +} + +// GetHeaderByHash retrieves a block header from the database by hash, caching it if +// found. +func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header { + return bc.hc.GetHeaderByHash(hash) +} + +// GetHeaderByNumber retrieves a block header from the database by number, +// caching it (associated with its hash) if found. +func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { + return bc.hc.GetHeaderByNumber(number) +} + +// GetHeadersFrom returns a contiguous segment of headers, in rlp-form, going +// backwards from the given number. +func (bc *BlockChain) GetHeadersFrom(number, count uint64) []rlp.RawValue { + return bc.hc.GetHeadersFrom(number, count) +} + +// GetBody retrieves a block body (transactions and uncles) from the database by +// hash, caching it if found. +func (bc *BlockChain) GetBody(hash common.Hash) *types.Body { + // Short circuit if the body's already in the cache, retrieve otherwise + if cached, ok := bc.bodyCache.Get(hash); ok { + body := cached.(*types.Body) + return body + } + number := bc.hc.GetBlockNumber(hash) + if number == nil { + return nil + } + body := rawdb.ReadBody(bc.db, hash, *number) + if body == nil { + return nil + } + // Cache the found body for next time and return + bc.bodyCache.Add(hash, body) + return body +} + +// GetBodyRLP retrieves a block body in RLP encoding from the database by hash, +// caching it if found. +func (bc *BlockChain) GetBodyRLP(hash common.Hash) rlp.RawValue { + // Short circuit if the body's already in the cache, retrieve otherwise + if cached, ok := bc.bodyRLPCache.Get(hash); ok { + return cached.(rlp.RawValue) + } + number := bc.hc.GetBlockNumber(hash) + if number == nil { + return nil + } + body := rawdb.ReadBodyRLP(bc.db, hash, *number) + if len(body) == 0 { + return nil + } + // Cache the found body for next time and return + bc.bodyRLPCache.Add(hash, body) + return body +} + +// HasBlock checks if a block is fully present in the database or not. +func (bc *BlockChain) HasBlock(hash common.Hash, number uint64) bool { + if bc.blockCache.Contains(hash) { + return true + } + if !bc.HasHeader(hash, number) { + return false + } + return rawdb.HasBody(bc.db, hash, number) +} + +// HasFastBlock checks if a fast block is fully present in the database or not. +func (bc *BlockChain) HasFastBlock(hash common.Hash, number uint64) bool { + if !bc.HasBlock(hash, number) { + return false + } + if bc.receiptsCache.Contains(hash) { + return true + } + return rawdb.HasReceipts(bc.db, hash, number) +} + +// GetBlock retrieves a block from the database by hash and number, +// caching it if found. +func (bc *BlockChain) GetBlock(hash common.Hash, number uint64) *types.Block { + // Short circuit if the block's already in the cache, retrieve otherwise + if block, ok := bc.blockCache.Get(hash); ok { + return block.(*types.Block) + } + block := rawdb.ReadBlock(bc.db, hash, number) + if block == nil { + return nil + } + // Cache the found block for next time and return + bc.blockCache.Add(block.Hash(), block) + return block +} + +// GetBlockByHash retrieves a block from the database by hash, caching it if found. +func (bc *BlockChain) GetBlockByHash(hash common.Hash) *types.Block { + number := bc.hc.GetBlockNumber(hash) + if number == nil { + return nil + } + return bc.GetBlock(hash, *number) +} + +// GetBlockByNumber retrieves a block from the database by number, caching it +// (associated with its hash) if found. +func (bc *BlockChain) GetBlockByNumber(number uint64) *types.Block { + hash := rawdb.ReadCanonicalHash(bc.db, number) + if hash == (common.Hash{}) { + return nil + } + return bc.GetBlock(hash, number) +} + +// GetBlocksFromHash returns the block corresponding to hash and up to n-1 ancestors. +// [deprecated by eth/62] +func (bc *BlockChain) GetBlocksFromHash(hash common.Hash, n int) (blocks []*types.Block) { + number := bc.hc.GetBlockNumber(hash) + if number == nil { + return nil + } + for i := 0; i < n; i++ { + block := bc.GetBlock(hash, *number) + if block == nil { + break + } + blocks = append(blocks, block) + hash = block.ParentHash() + *number-- + } + return +} + +// GetReceiptsByHash retrieves the receipts for all transactions in a given block. +func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { + if receipts, ok := bc.receiptsCache.Get(hash); ok { + return receipts.(types.Receipts) + } + number := rawdb.ReadHeaderNumber(bc.db, hash) + if number == nil { + return nil + } + receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig) + if receipts == nil { + return nil + } + bc.receiptsCache.Add(hash, receipts) + return receipts +} + +// GetUnclesInChain retrieves all the uncles from a given block backwards until +// a specific distance is reached. +func (bc *BlockChain) GetUnclesInChain(block *types.Block, length int) []*types.Header { + uncles := []*types.Header{} + for i := 0; block != nil && i < length; i++ { + uncles = append(uncles, block.Uncles()...) + block = bc.GetBlock(block.ParentHash(), block.NumberU64()-1) + } + return uncles +} + +// GetCanonicalHash returns the canonical hash for a given block number +func (bc *BlockChain) GetCanonicalHash(number uint64) common.Hash { + return bc.hc.GetCanonicalHash(number) +} + +// GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or +// a close ancestor of it is canonical. maxNonCanonical points to a downwards counter limiting the +// 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 *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { + return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) +} + +// 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 +} + +// GetTd retrieves a block's total difficulty in the canonical chain from the +// database by hash and number, caching it if found. +func (bc *BlockChain) GetTd(hash common.Hash, number uint64) *big.Int { + return bc.hc.GetTd(hash, number) +} + +// HasState checks if state trie is fully present in the database or not. +func (bc *BlockChain) HasState(hash common.Hash) bool { + _, err := bc.stateCache.OpenTrie(hash) + return err == nil +} + +// HasBlockAndState checks if a block and associated state trie is fully present +// in the database or not, caching it if present. +func (bc *BlockChain) HasBlockAndState(hash common.Hash, number uint64) bool { + // Check first that the block itself is known + block := bc.GetBlock(hash, number) + if block == nil { + return false + } + return bc.HasState(block.Root()) +} + +// TrieNode retrieves a blob of data associated with a trie node +// either from ephemeral in-memory cache, or from persistent storage. +func (bc *BlockChain) TrieNode(hash common.Hash) ([]byte, error) { + return bc.stateCache.TrieDB().Node(hash) +} + +// ContractCode retrieves a blob of data associated with a contract hash +// either from ephemeral in-memory cache, or from persistent storage. +func (bc *BlockChain) ContractCode(hash common.Hash) ([]byte, error) { + return bc.stateCache.ContractCode(common.Hash{}, hash) +} + +// ContractCodeWithPrefix retrieves a blob of data associated with a contract +// hash either from ephemeral in-memory cache, or from persistent storage. +// +// If the code doesn't exist in the in-memory cache, check the storage with +// new code scheme. +func (bc *BlockChain) ContractCodeWithPrefix(hash common.Hash) ([]byte, error) { + type codeReader interface { + ContractCodeWithPrefix(addrHash, codeHash common.Hash) ([]byte, error) + } + return bc.stateCache.(codeReader).ContractCodeWithPrefix(common.Hash{}, hash) +} + +// State returns a new mutable state based on the current HEAD block. +func (bc *BlockChain) State() (*state.StateDB, error) { + return bc.StateAt(bc.CurrentBlock().Root()) +} + +// StateAt returns a new mutable state based on a particular point in time. +func (bc *BlockChain) StateAt(root common.Hash) (*state.StateDB, error) { + return state.New(root, bc.stateCache, bc.snaps) +} + +// Config retrieves the chain's fork configuration. +func (bc *BlockChain) Config() *params.ChainConfig { return bc.chainConfig } + +// Engine retrieves the blockchain's consensus engine. +func (bc *BlockChain) Engine() consensus.Engine { return bc.engine } + +// Snapshots returns the blockchain snapshot tree. +func (bc *BlockChain) Snapshots() *snapshot.Tree { + return bc.snaps +} + +// Validator returns the current validator. +func (bc *BlockChain) Validator() Validator { + return bc.validator +} + +// Processor returns the current processor. +func (bc *BlockChain) Processor() Processor { + return bc.processor +} + +// StateCache returns the caching database underpinning the blockchain instance. +func (bc *BlockChain) StateCache() state.Database { + return bc.stateCache +} + +// GasLimit returns the gas limit of the current HEAD block. +func (bc *BlockChain) GasLimit() uint64 { + return bc.CurrentBlock().GasLimit() +} + +// Genesis retrieves the chain's genesis block. +func (bc *BlockChain) Genesis() *types.Block { + return bc.genesisBlock +} + +// GetVMConfig returns the block chain VM config. +func (bc *BlockChain) GetVMConfig() *vm.Config { + return &bc.vmConfig +} + +// SetTxLookupLimit is responsible for updating the txlookup limit to the +// original one stored in db if the new mismatches with the old one. +func (bc *BlockChain) SetTxLookupLimit(limit uint64) { + bc.txLookupLimit = limit +} + +// TxLookupLimit retrieves the txlookup limit used by blockchain to prune +// stale transaction indices. +func (bc *BlockChain) TxLookupLimit() uint64 { + return bc.txLookupLimit +} + +// SubscribeRemovedLogsEvent registers a subscription of RemovedLogsEvent. +func (bc *BlockChain) SubscribeRemovedLogsEvent(ch chan<- RemovedLogsEvent) event.Subscription { + return bc.scope.Track(bc.rmLogsFeed.Subscribe(ch)) +} + +// SubscribeChainEvent registers a subscription of ChainEvent. +func (bc *BlockChain) SubscribeChainEvent(ch chan<- ChainEvent) event.Subscription { + return bc.scope.Track(bc.chainFeed.Subscribe(ch)) +} + +// SubscribeChainHeadEvent registers a subscription of ChainHeadEvent. +func (bc *BlockChain) SubscribeChainHeadEvent(ch chan<- ChainHeadEvent) event.Subscription { + return bc.scope.Track(bc.chainHeadFeed.Subscribe(ch)) +} + +// SubscribeChainSideEvent registers a subscription of ChainSideEvent. +func (bc *BlockChain) SubscribeChainSideEvent(ch chan<- ChainSideEvent) event.Subscription { + return bc.scope.Track(bc.chainSideFeed.Subscribe(ch)) +} + +// SubscribeLogsEvent registers a subscription of []*types.Log. +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_repair_test.go b/core/blockchain_repair_test.go new file mode 100644 index 00000000..04154158 --- /dev/null +++ b/core/blockchain_repair_test.go @@ -0,0 +1,1985 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Tests that abnormal program termination (i.e.crash) and restart doesn't leave +// the database in some strange state with gaps in the chain, nor with block data +// dangling in the future. + +package core + +import ( + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "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/params" +) + +// Tests a recovery for a short canonical chain where a recent block was already +// committed to disk and then the process crashed. In this case we expect the full +// chain to be rolled back to the committed block, but the chain data itself left +// in the database for replaying. +func TestShortRepair(t *testing.T) { testShortRepair(t, false) } +func TestShortRepairWithSnapshots(t *testing.T) { testShortRepair(t, true) } + +func testShortRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 8, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain where the fast sync pivot point was +// already committed, after which the process crashed. In this case we expect the full +// chain to be rolled back to the committed block, but the chain data itself left in +// the database for replaying. +func TestShortSnapSyncedRepair(t *testing.T) { testShortSnapSyncedRepair(t, false) } +func TestShortSnapSyncedRepairWithSnapshots(t *testing.T) { testShortSnapSyncedRepair(t, true) } + +func testShortSnapSyncedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain where the fast sync pivot point was +// not yet committed, but the process crashed. In this case we expect the chain to +// detect that it was fast syncing and not delete anything, since we can just pick +// up directly where we left off. +func TestShortSnapSyncingRepair(t *testing.T) { testShortSnapSyncingRepair(t, false) } +func TestShortSnapSyncingRepairWithSnapshots(t *testing.T) { testShortSnapSyncingRepair(t, true) } + +func testShortSnapSyncingRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where a +// recent block was already committed to disk and then the process crashed. In this +// test scenario the side chain is below the committed block. In this case we expect +// the canonical chain to be rolled back to the committed block, but the chain data +// itself left in the database for replaying. +func TestShortOldForkedRepair(t *testing.T) { testShortOldForkedRepair(t, false) } +func TestShortOldForkedRepairWithSnapshots(t *testing.T) { testShortOldForkedRepair(t, true) } + +func testShortOldForkedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 8, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was already committed to disk and then the process +// crashed. In this test scenario the side chain is below the committed block. In +// this case we expect the canonical chain to be rolled back to the committed block, +// but the chain data itself left in the database for replaying. +func TestShortOldForkedSnapSyncedRepair(t *testing.T) { + testShortOldForkedSnapSyncedRepair(t, false) +} +func TestShortOldForkedSnapSyncedRepairWithSnapshots(t *testing.T) { + testShortOldForkedSnapSyncedRepair(t, true) +} + +func testShortOldForkedSnapSyncedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was not yet committed, but the process crashed. In this +// test scenario the side chain is below the committed block. In this case we expect +// the chain to detect that it was fast syncing and not delete anything, since we +// can just pick up directly where we left off. +func TestShortOldForkedSnapSyncingRepair(t *testing.T) { + testShortOldForkedSnapSyncingRepair(t, false) +} +func TestShortOldForkedSnapSyncingRepairWithSnapshots(t *testing.T) { + testShortOldForkedSnapSyncingRepair(t, true) +} + +func testShortOldForkedSnapSyncingRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where a +// recent block was already committed to disk and then the process crashed. In this +// test scenario the side chain reaches above the committed block. In this case we +// expect the canonical chain to be rolled back to the committed block, but the +// chain data itself left in the database for replaying. +func TestShortNewlyForkedRepair(t *testing.T) { testShortNewlyForkedRepair(t, false) } +func TestShortNewlyForkedRepairWithSnapshots(t *testing.T) { testShortNewlyForkedRepair(t, true) } + +func testShortNewlyForkedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 6, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 8, + expSidechainBlocks: 6, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was already committed to disk and then the process +// crashed. In this test scenario the side chain reaches above the committed block. +// In this case we expect the canonical chain to be rolled back to the committed +// block, but the chain data itself left in the database for replaying. +func TestShortNewlyForkedSnapSyncedRepair(t *testing.T) { + testShortNewlyForkedSnapSyncedRepair(t, false) +} +func TestShortNewlyForkedSnapSyncedRepairWithSnapshots(t *testing.T) { + testShortNewlyForkedSnapSyncedRepair(t, true) +} + +func testShortNewlyForkedSnapSyncedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 6, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 6, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was not yet committed, but the process crashed. In +// this test scenario the side chain reaches above the committed block. In this +// case we expect the chain to detect that it was fast syncing and not delete +// anything, since we can just pick up directly where we left off. +func TestShortNewlyForkedSnapSyncingRepair(t *testing.T) { + testShortNewlyForkedSnapSyncingRepair(t, false) +} +func TestShortNewlyForkedSnapSyncingRepairWithSnapshots(t *testing.T) { + testShortNewlyForkedSnapSyncingRepair(t, true) +} + +func testShortNewlyForkedSnapSyncingRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 6, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 6, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a longer side chain, where a +// recent block was already committed to disk and then the process crashed. In this +// case we expect the canonical chain to be rolled back to the committed block, but +// the chain data itself left in the database for replaying. +func TestShortReorgedRepair(t *testing.T) { testShortReorgedRepair(t, false) } +func TestShortReorgedRepairWithSnapshots(t *testing.T) { testShortReorgedRepair(t, true) } + +func testShortReorgedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 8, + expSidechainBlocks: 10, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a longer side chain, where +// the fast sync pivot point was already committed to disk and then the process +// crashed. In this case we expect the canonical chain to be rolled back to the +// committed block, but the chain data itself left in the database for replaying. +func TestShortReorgedSnapSyncedRepair(t *testing.T) { + testShortReorgedSnapSyncedRepair(t, false) +} +func TestShortReorgedSnapSyncedRepairWithSnapshots(t *testing.T) { + testShortReorgedSnapSyncedRepair(t, true) +} + +func testShortReorgedSnapSyncedRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 10, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a short canonical chain and a longer side chain, where +// the fast sync pivot point was not yet committed, but the process crashed. In +// this case we expect the chain to detect that it was fast syncing and not delete +// anything, since we can just pick up directly where we left off. +func TestShortReorgedSnapSyncingRepair(t *testing.T) { + testShortReorgedSnapSyncingRepair(t, false) +} +func TestShortReorgedSnapSyncingRepairWithSnapshots(t *testing.T) { + testShortReorgedSnapSyncingRepair(t, true) +} + +func testShortReorgedSnapSyncingRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 8, + expSidechainBlocks: 10, + expFrozen: 0, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where a recent +// block - newer than the ancient limit - was already committed to disk and then +// the process crashed. In this case we expect the chain to be rolled back to the +// committed block, with everything afterwards kept as fast sync data. +func TestLongShallowRepair(t *testing.T) { testLongShallowRepair(t, false) } +func TestLongShallowRepairWithSnapshots(t *testing.T) { testLongShallowRepair(t, true) } + +func testLongShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where a recent +// block - older than the ancient limit - was already committed to disk and then +// the process crashed. In this case we expect the chain to be rolled back to the +// committed block, with everything afterwards deleted. +func TestLongDeepRepair(t *testing.T) { testLongDeepRepair(t, false) } +func TestLongDeepRepairWithSnapshots(t *testing.T) { testLongDeepRepair(t, true) } + +func testLongDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where the fast +// sync pivot point - newer than the ancient limit - was already committed, after +// which the process crashed. In this case we expect the chain to be rolled back +// to the committed block, with everything afterwards kept as fast sync data. +func TestLongSnapSyncedShallowRepair(t *testing.T) { + testLongSnapSyncedShallowRepair(t, false) +} +func TestLongSnapSyncedShallowRepairWithSnapshots(t *testing.T) { + testLongSnapSyncedShallowRepair(t, true) +} + +func testLongSnapSyncedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where the fast +// sync pivot point - older than the ancient limit - was already committed, after +// which the process crashed. In this case we expect the chain to be rolled back +// to the committed block, with everything afterwards deleted. +func TestLongSnapSyncedDeepRepair(t *testing.T) { testLongSnapSyncedDeepRepair(t, false) } +func TestLongSnapSyncedDeepRepairWithSnapshots(t *testing.T) { testLongSnapSyncedDeepRepair(t, true) } + +func testLongSnapSyncedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where the fast +// sync pivot point - older than the ancient limit - was not yet committed, but the +// process crashed. In this case we expect the chain to detect that it was fast +// syncing and not delete anything, since we can just pick up directly where we +// left off. +func TestLongSnapSyncingShallowRepair(t *testing.T) { + testLongSnapSyncingShallowRepair(t, false) +} +func TestLongSnapSyncingShallowRepairWithSnapshots(t *testing.T) { + testLongSnapSyncingShallowRepair(t, true) +} + +func testLongSnapSyncingShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks where the fast +// sync pivot point - newer than the ancient limit - was not yet committed, but the +// process crashed. In this case we expect the chain to detect that it was fast +// syncing and not delete anything, since we can just pick up directly where we +// left off. +func TestLongSnapSyncingDeepRepair(t *testing.T) { testLongSnapSyncingDeepRepair(t, false) } +func TestLongSnapSyncingDeepRepairWithSnapshots(t *testing.T) { testLongSnapSyncingDeepRepair(t, true) } + +func testLongSnapSyncingDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected in leveldb: + // C8)->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 + // + // Expected head header : C24 + // Expected head fast block: C24 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 24, + expSidechainBlocks: 0, + expFrozen: 9, + expHeadHeader: 24, + expHeadFastBlock: 24, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - newer than the ancient limit - was already +// committed to disk and then the process crashed. In this test scenario the side +// chain is below the committed block. In this case we expect the chain to be +// rolled back to the committed block, with everything afterwards kept as fast +// sync data; the side chain completely nuked by the freezer. +func TestLongOldForkedShallowRepair(t *testing.T) { + testLongOldForkedShallowRepair(t, false) +} +func TestLongOldForkedShallowRepairWithSnapshots(t *testing.T) { + testLongOldForkedShallowRepair(t, true) +} + +func testLongOldForkedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - older than the ancient limit - was already +// committed to disk and then the process crashed. In this test scenario the side +// chain is below the committed block. In this case we expect the canonical chain +// to be rolled back to the committed block, with everything afterwards deleted; +// the side chain completely nuked by the freezer. +func TestLongOldForkedDeepRepair(t *testing.T) { testLongOldForkedDeepRepair(t, false) } +func TestLongOldForkedDeepRepairWithSnapshots(t *testing.T) { testLongOldForkedDeepRepair(t, true) } + +func testLongOldForkedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then the process crashed. In this test scenario +// the side chain is below the committed block. In this case we expect the chain +// to be rolled back to the committed block, with everything afterwards kept as +// fast sync data; the side chain completely nuked by the freezer. +func TestLongOldForkedSnapSyncedShallowRepair(t *testing.T) { + testLongOldForkedSnapSyncedShallowRepair(t, false) +} +func TestLongOldForkedSnapSyncedShallowRepairWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncedShallowRepair(t, true) +} + +func testLongOldForkedSnapSyncedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then the process crashed. In this test scenario +// the side chain is below the committed block. In this case we expect the canonical +// chain to be rolled back to the committed block, with everything afterwards deleted; +// the side chain completely nuked by the freezer. +func TestLongOldForkedSnapSyncedDeepRepair(t *testing.T) { + testLongOldForkedSnapSyncedDeepRepair(t, false) +} +func TestLongOldForkedSnapSyncedDeepRepairWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncedDeepRepair(t, true) +} + +func testLongOldForkedSnapSyncedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but the process crashed. In this test scenario the side +// chain is below the committed block. In this case we expect the chain to detect +// that it was fast syncing and not delete anything. The side chain is completely +// nuked by the freezer. +func TestLongOldForkedSnapSyncingShallowRepair(t *testing.T) { + testLongOldForkedSnapSyncingShallowRepair(t, false) +} +func TestLongOldForkedSnapSyncingShallowRepairWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncingShallowRepair(t, true) +} + +func testLongOldForkedSnapSyncingShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but the process crashed. In this test scenario the side +// chain is below the committed block. In this case we expect the chain to detect +// that it was fast syncing and not delete anything. The side chain is completely +// nuked by the freezer. +func TestLongOldForkedSnapSyncingDeepRepair(t *testing.T) { + testLongOldForkedSnapSyncingDeepRepair(t, false) +} +func TestLongOldForkedSnapSyncingDeepRepairWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncingDeepRepair(t, true) +} + +func testLongOldForkedSnapSyncingDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected in leveldb: + // C8)->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 + // + // Expected head header : C24 + // Expected head fast block: C24 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 24, + expSidechainBlocks: 0, + expFrozen: 9, + expHeadHeader: 24, + expHeadFastBlock: 24, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - newer than the ancient limit - was already +// committed to disk and then the process crashed. In this test scenario the side +// chain is above the committed block. In this case we expect the chain to be +// rolled back to the committed block, with everything afterwards kept as fast +// sync data; the side chain completely nuked by the freezer. +func TestLongNewerForkedShallowRepair(t *testing.T) { + testLongNewerForkedShallowRepair(t, false) +} +func TestLongNewerForkedShallowRepairWithSnapshots(t *testing.T) { + testLongNewerForkedShallowRepair(t, true) +} + +func testLongNewerForkedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - older than the ancient limit - was already +// committed to disk and then the process crashed. In this test scenario the side +// chain is above the committed block. In this case we expect the canonical chain +// to be rolled back to the committed block, with everything afterwards deleted; +// the side chain completely nuked by the freezer. +func TestLongNewerForkedDeepRepair(t *testing.T) { testLongNewerForkedDeepRepair(t, false) } +func TestLongNewerForkedDeepRepairWithSnapshots(t *testing.T) { testLongNewerForkedDeepRepair(t, true) } + +func testLongNewerForkedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then the process crashed. In this test scenario +// the side chain is above the committed block. In this case we expect the chain +// to be rolled back to the committed block, with everything afterwards kept as fast +// sync data; the side chain completely nuked by the freezer. +func TestLongNewerForkedSnapSyncedShallowRepair(t *testing.T) { + testLongNewerForkedSnapSyncedShallowRepair(t, false) +} +func TestLongNewerForkedSnapSyncedShallowRepairWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncedShallowRepair(t, true) +} + +func testLongNewerForkedSnapSyncedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then the process crashed. In this test scenario +// the side chain is above the committed block. In this case we expect the canonical +// chain to be rolled back to the committed block, with everything afterwards deleted; +// the side chain completely nuked by the freezer. +func TestLongNewerForkedSnapSyncedDeepRepair(t *testing.T) { + testLongNewerForkedSnapSyncedDeepRepair(t, false) +} +func TestLongNewerForkedSnapSyncedDeepRepairWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncedDeepRepair(t, true) +} + +func testLongNewerForkedSnapSyncedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but the process crashed. In this test scenario the side +// chain is above the committed block. In this case we expect the chain to detect +// that it was fast syncing and not delete anything. The side chain is completely +// nuked by the freezer. +func TestLongNewerForkedSnapSyncingShallowRepair(t *testing.T) { + testLongNewerForkedSnapSyncingShallowRepair(t, false) +} +func TestLongNewerForkedSnapSyncingShallowRepairWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncingShallowRepair(t, true) +} + +func testLongNewerForkedSnapSyncingShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but the process crashed. In this test scenario the side +// chain is above the committed block. In this case we expect the chain to detect +// that it was fast syncing and not delete anything. The side chain is completely +// nuked by the freezer. +func TestLongNewerForkedSnapSyncingDeepRepair(t *testing.T) { + testLongNewerForkedSnapSyncingDeepRepair(t, false) +} +func TestLongNewerForkedSnapSyncingDeepRepairWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncingDeepRepair(t, true) +} + +func testLongNewerForkedSnapSyncingDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected in leveldb: + // C8)->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 + // + // Expected head header : C24 + // Expected head fast block: C24 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 24, + expSidechainBlocks: 0, + expFrozen: 9, + expHeadHeader: 24, + expHeadFastBlock: 24, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer side +// chain, where a recent block - newer than the ancient limit - was already committed +// to disk and then the process crashed. In this case we expect the chain to be +// rolled back to the committed block, with everything afterwards kept as fast sync +// data. The side chain completely nuked by the freezer. +func TestLongReorgedShallowRepair(t *testing.T) { testLongReorgedShallowRepair(t, false) } +func TestLongReorgedShallowRepairWithSnapshots(t *testing.T) { testLongReorgedShallowRepair(t, true) } + +func testLongReorgedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer side +// chain, where a recent block - older than the ancient limit - was already committed +// to disk and then the process crashed. In this case we expect the canonical chains +// to be rolled back to the committed block, with everything afterwards deleted. The +// side chain completely nuked by the freezer. +func TestLongReorgedDeepRepair(t *testing.T) { testLongReorgedDeepRepair(t, false) } +func TestLongReorgedDeepRepairWithSnapshots(t *testing.T) { testLongReorgedDeepRepair(t, true) } + +func testLongReorgedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then the process crashed. In this case we +// expect the chain to be rolled back to the committed block, with everything +// afterwards kept as fast sync data. The side chain completely nuked by the +// freezer. +func TestLongReorgedSnapSyncedShallowRepair(t *testing.T) { + testLongReorgedSnapSyncedShallowRepair(t, false) +} +func TestLongReorgedSnapSyncedShallowRepairWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncedShallowRepair(t, true) +} + +func testLongReorgedSnapSyncedShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then the process crashed. In this case we +// expect the canonical chains to be rolled back to the committed block, with +// everything afterwards deleted. The side chain completely nuked by the freezer. +func TestLongReorgedSnapSyncedDeepRepair(t *testing.T) { + testLongReorgedSnapSyncedDeepRepair(t, false) +} +func TestLongReorgedSnapSyncedDeepRepairWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncedDeepRepair(t, true) +} + +func testLongReorgedSnapSyncedDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was not yet committed, but the process crashed. In this case we expect the +// chain to detect that it was fast syncing and not delete anything, since we +// can just pick up directly where we left off. +func TestLongReorgedSnapSyncingShallowRepair(t *testing.T) { + testLongReorgedSnapSyncingShallowRepair(t, false) +} +func TestLongReorgedSnapSyncingShallowRepairWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncingShallowRepair(t, true) +} + +func testLongReorgedSnapSyncingShallowRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 + // + // Expected head header : C18 + // Expected head fast block: C18 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 18, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 18, + expHeadFastBlock: 18, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a recovery for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but the process crashed. In this case we expect the +// chain to detect that it was fast syncing and not delete anything, since we +// can just pick up directly where we left off. +func TestLongReorgedSnapSyncingDeepRepair(t *testing.T) { + testLongReorgedSnapSyncingDeepRepair(t, false) +} +func TestLongReorgedSnapSyncingDeepRepairWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncingDeepRepair(t, true) +} + +func testLongReorgedSnapSyncingDeepRepair(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected in leveldb: + // C8)->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 + // + // Expected head header : C24 + // Expected head fast block: C24 + // Expected head block : G + testRepair(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + expCanonicalBlocks: 24, + expSidechainBlocks: 0, + expFrozen: 9, + expHeadHeader: 24, + expHeadFastBlock: 24, + expHeadBlock: 0, + }, snapshots) +} + +func testRepair(t *testing.T, tt *rewindTest, snapshots bool) { + // It's hard to follow the test case, visualize the input + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump(true)) + + // Create a temporary persistent database + datadir := t.TempDir() + + db, err := rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to create persistent database: %v", err) + } + defer db.Close() // Might double close, should be fine + + // Initialize a fresh chain + var ( + gspec = &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.AllEthashProtocolChanges, + } + genesis = gspec.MustCommit(db) + engine = ethash.NewFullFaker() + config = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 0, // Disable snapshot by default + } + ) + defer engine.Close() + if snapshots { + config.SnapshotLimit = 256 + config.SnapshotWait = true + } + chain, err := NewBlockChain(db, config, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to create chain: %v", err) + } + // If sidechain blocks are needed, make a light chain and import it + var sideblocks types.Blocks + if tt.sidechainBlocks > 0 { + sideblocks, _ = GenerateChain(params.TestChainConfig, genesis, engine, rawdb.NewMemoryDatabase(), tt.sidechainBlocks, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0x01}) + }) + if _, err := chain.InsertChain(sideblocks); err != nil { + t.Fatalf("Failed to import side chain: %v", err) + } + } + canonblocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, rawdb.NewMemoryDatabase(), tt.canonicalBlocks, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0x02}) + b.SetDifficulty(big.NewInt(1000000)) + }) + if _, err := chain.InsertChain(canonblocks[:tt.commitBlock]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + if tt.commitBlock > 0 { + chain.stateCache.TrieDB().Commit(canonblocks[tt.commitBlock-1].Root(), true, nil) + if snapshots { + if err := chain.snaps.Cap(canonblocks[tt.commitBlock-1].Root(), 0); err != nil { + t.Fatalf("Failed to flatten snapshots: %v", err) + } + } + } + if _, err := chain.InsertChain(canonblocks[tt.commitBlock:]); err != nil { + t.Fatalf("Failed to import canonical chain tail: %v", err) + } + // Force run a freeze cycle + type freezer interface { + Freeze(threshold uint64) error + Ancients() (uint64, error) + } + db.(freezer).Freeze(tt.freezeThreshold) + + // Set the simulated pivot block + if tt.pivotBlock != nil { + rawdb.WriteLastPivotNumber(db, *tt.pivotBlock) + } + // Pull the plug on the database, simulating a hard crash + db.Close() + + // Start a new blockchain back up and see where the repair leads us + db, err = rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to reopen persistent database: %v", err) + } + defer db.Close() + + newChain, err := NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer newChain.Stop() + + // Iterate over all the remaining blocks and ensure there are no gaps + verifyNoGaps(t, newChain, true, canonblocks) + verifyNoGaps(t, newChain, false, sideblocks) + verifyCutoff(t, newChain, true, canonblocks, tt.expCanonicalBlocks) + verifyCutoff(t, newChain, false, sideblocks, tt.expSidechainBlocks) + + if head := newChain.CurrentHeader(); head.Number.Uint64() != tt.expHeadHeader { + t.Errorf("Head header mismatch: have %d, want %d", head.Number, tt.expHeadHeader) + } + if head := newChain.CurrentFastBlock(); head.NumberU64() != tt.expHeadFastBlock { + t.Errorf("Head fast block mismatch: have %d, want %d", head.NumberU64(), tt.expHeadFastBlock) + } + if head := newChain.CurrentBlock(); head.NumberU64() != tt.expHeadBlock { + t.Errorf("Head block mismatch: have %d, want %d", head.NumberU64(), tt.expHeadBlock) + } + if frozen, err := db.(freezer).Ancients(); err != nil { + t.Errorf("Failed to retrieve ancient count: %v\n", err) + } else if int(frozen) != tt.expFrozen { + t.Errorf("Frozen block count mismatch: have %d, want %d", frozen, tt.expFrozen) + } +} + +// TestIssue23496 tests scenario described in https://github.com/ethereum/go-ethereum/pull/23496#issuecomment-926393893 +// Credits to @zzyalbert for finding the issue. +// +// Local chain owns these blocks: +// G B1 B2 B3 B4 +// B1: state committed +// B2: snapshot disk layer +// B3: state committed +// B4: head block +// +// Crash happens without fully persisting snapshot and in-memory states, +// chain rewinds itself to the B1 (skip B3 in order to recover snapshot) +// In this case the snapshot layer of B3 is not created because of existent +// state. +func TestIssue23496(t *testing.T) { + // It's hard to follow the test case, visualize the input + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + // Create a temporary persistent database + datadir := t.TempDir() + + db, err := rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to create persistent database: %v", err) + } + defer db.Close() // Might double close, should be fine + + // Initialize a fresh chain + var ( + gspec = &Genesis{ + Config: params.TestChainConfig, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(db) + engine = ethash.NewFullFaker() + config = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 256, + SnapshotWait: true, + } + ) + chain, err := NewBlockChain(db, config, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to create chain: %v", err) + } + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, rawdb.NewMemoryDatabase(), 4, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0x02}) + b.SetDifficulty(big.NewInt(1000000)) + }) + + // Insert block B1 and commit the state into disk + if _, err := chain.InsertChain(blocks[:1]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + chain.stateCache.TrieDB().Commit(blocks[0].Root(), true, nil) + + // Insert block B2 and commit the snapshot into disk + if _, err := chain.InsertChain(blocks[1:2]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + if err := chain.snaps.Cap(blocks[1].Root(), 0); err != nil { + t.Fatalf("Failed to flatten snapshots: %v", err) + } + + // Insert block B3 and commit the state into disk + if _, err := chain.InsertChain(blocks[2:3]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + chain.stateCache.TrieDB().Commit(blocks[2].Root(), true, nil) + + // Insert the remaining blocks + if _, err := chain.InsertChain(blocks[3:]); err != nil { + t.Fatalf("Failed to import canonical chain tail: %v", err) + } + + // Pull the plug on the database, simulating a hard crash + db.Close() + + // Start a new blockchain back up and see where the repair leads us + db, err = rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to reopen persistent database: %v", err) + } + defer db.Close() + + chain, err = NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer chain.Stop() + + if head := chain.CurrentHeader(); head.Number.Uint64() != uint64(4) { + t.Errorf("Head header mismatch: have %d, want %d", head.Number, 4) + } + if head := chain.CurrentFastBlock(); head.NumberU64() != uint64(4) { + t.Errorf("Head fast block mismatch: have %d, want %d", head.NumberU64(), uint64(4)) + } + if head := chain.CurrentBlock(); head.NumberU64() != uint64(1) { + t.Errorf("Head block mismatch: have %d, want %d", head.NumberU64(), uint64(1)) + } + + // Reinsert B2-B4 + if _, err := chain.InsertChain(blocks[1:]); err != nil { + t.Fatalf("Failed to import canonical chain tail: %v", err) + } + if head := chain.CurrentHeader(); head.Number.Uint64() != uint64(4) { + t.Errorf("Head header mismatch: have %d, want %d", head.Number, 4) + } + if head := chain.CurrentFastBlock(); head.NumberU64() != uint64(4) { + t.Errorf("Head fast block mismatch: have %d, want %d", head.NumberU64(), uint64(4)) + } + if head := chain.CurrentBlock(); head.NumberU64() != uint64(4) { + t.Errorf("Head block mismatch: have %d, want %d", head.NumberU64(), uint64(4)) + } + if layer := chain.Snapshots().Snapshot(blocks[2].Root()); layer == nil { + t.Error("Failed to regenerate the snapshot of known state") + } +} diff --git a/core/blockchain_sethead_test.go b/core/blockchain_sethead_test.go new file mode 100644 index 00000000..c5df7949 --- /dev/null +++ b/core/blockchain_sethead_test.go @@ -0,0 +1,2168 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Tests that setting the chain head backwards doesn't leave the database in some +// strange state with gaps in the chain, nor with block data dangling in the future. + +package core + +import ( + "fmt" + "math/big" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "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/params" +) + +// rewindTest is a test case for chain rollback upon user request. +type rewindTest struct { + canonicalBlocks int // Number of blocks to generate for the canonical chain (heavier) + sidechainBlocks int // Number of blocks to generate for the side chain (lighter) + freezeThreshold uint64 // Block number until which to move things into the freezer + commitBlock uint64 // Block number for which to commit the state to disk + pivotBlock *uint64 // Pivot block number in case of fast sync + + setheadBlock uint64 // Block number to set head back to + expCanonicalBlocks int // Number of canonical blocks expected to remain in the database (excl. genesis) + expSidechainBlocks int // Number of sidechain blocks expected to remain in the database (excl. genesis) + expFrozen int // Number of canonical blocks expected to be in the freezer (incl. genesis) + expHeadHeader uint64 // Block number of the expected head header + expHeadFastBlock uint64 // Block number of the expected head fast sync block + expHeadBlock uint64 // Block number of the expected head full block +} + +//nolint:unused +func (tt *rewindTest) dump(crash bool) string { + buffer := new(strings.Builder) + + fmt.Fprint(buffer, "Chain:\n G") + for i := 0; i < tt.canonicalBlocks; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprint(buffer, " (HEAD)\n") + if tt.sidechainBlocks > 0 { + fmt.Fprintf(buffer, " └") + for i := 0; i < tt.sidechainBlocks; i++ { + fmt.Fprintf(buffer, "->S%d", i+1) + } + fmt.Fprintf(buffer, "\n") + } + fmt.Fprintf(buffer, "\n") + + if tt.canonicalBlocks > int(tt.freezeThreshold) { + fmt.Fprint(buffer, "Frozen:\n G") + for i := 0; i < tt.canonicalBlocks-int(tt.freezeThreshold); i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprintf(buffer, "\n\n") + } else { + fmt.Fprintf(buffer, "Frozen: none\n") + } + fmt.Fprintf(buffer, "Commit: G") + if tt.commitBlock > 0 { + fmt.Fprintf(buffer, ", C%d", tt.commitBlock) + } + fmt.Fprint(buffer, "\n") + + if tt.pivotBlock == nil { + fmt.Fprintf(buffer, "Pivot : none\n") + } else { + fmt.Fprintf(buffer, "Pivot : C%d\n", *tt.pivotBlock) + } + if crash { + fmt.Fprintf(buffer, "\nCRASH\n\n") + } else { + fmt.Fprintf(buffer, "\nSetHead(%d)\n\n", tt.setheadBlock) + } + fmt.Fprintf(buffer, "------------------------------\n\n") + + if tt.expFrozen > 0 { + fmt.Fprint(buffer, "Expected in freezer:\n G") + for i := 0; i < tt.expFrozen-1; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprintf(buffer, "\n\n") + } + if tt.expFrozen > 0 { + if tt.expFrozen >= tt.expCanonicalBlocks { + fmt.Fprintf(buffer, "Expected in leveldb: none\n") + } else { + fmt.Fprintf(buffer, "Expected in leveldb:\n C%d)", tt.expFrozen-1) + for i := tt.expFrozen - 1; i < tt.expCanonicalBlocks; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprint(buffer, "\n") + if tt.expSidechainBlocks > tt.expFrozen { + fmt.Fprintf(buffer, " └") + for i := tt.expFrozen - 1; i < tt.expSidechainBlocks; i++ { + fmt.Fprintf(buffer, "->S%d", i+1) + } + fmt.Fprintf(buffer, "\n") + } + } + } else { + fmt.Fprint(buffer, "Expected in leveldb:\n G") + for i := tt.expFrozen; i < tt.expCanonicalBlocks; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprint(buffer, "\n") + if tt.expSidechainBlocks > tt.expFrozen { + fmt.Fprintf(buffer, " └") + for i := tt.expFrozen; i < tt.expSidechainBlocks; i++ { + fmt.Fprintf(buffer, "->S%d", i+1) + } + fmt.Fprintf(buffer, "\n") + } + } + fmt.Fprintf(buffer, "\n") + fmt.Fprintf(buffer, "Expected head header : C%d\n", tt.expHeadHeader) + fmt.Fprintf(buffer, "Expected head fast block: C%d\n", tt.expHeadFastBlock) + if tt.expHeadBlock == 0 { + fmt.Fprintf(buffer, "Expected head block : G\n") + } else { + fmt.Fprintf(buffer, "Expected head block : C%d\n", tt.expHeadBlock) + } + return buffer.String() +} + +// Tests a sethead for a short canonical chain where a recent block was already +// committed to disk and then the sethead called. In this case we expect the full +// chain to be rolled back to the committed block. Everything above the sethead +// point should be deleted. In between the committed block and the requested head +// the data can remain as "fast sync" data to avoid redownloading it. +func TestShortSetHead(t *testing.T) { testShortSetHead(t, false) } +func TestShortSetHeadWithSnapshots(t *testing.T) { testShortSetHead(t, true) } + +func testShortSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain where the fast sync pivot point was +// already committed, after which sethead was called. In this case we expect the +// chain to behave like in full sync mode, rolling back to the committed block +// Everything above the sethead point should be deleted. In between the committed +// block and the requested head the data can remain as "fast sync" data to avoid +// redownloading it. +func TestShortSnapSyncedSetHead(t *testing.T) { testShortSnapSyncedSetHead(t, false) } +func TestShortSnapSyncedSetHeadWithSnapshots(t *testing.T) { testShortSnapSyncedSetHead(t, true) } + +func testShortSnapSyncedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain where the fast sync pivot point was +// not yet committed, but sethead was called. In this case we expect the chain to +// detect that it was fast syncing and delete everything from the new head, since +// we can just pick up fast syncing from there. The head full block should be set +// to the genesis. +func TestShortSnapSyncingSetHead(t *testing.T) { testShortSnapSyncingSetHead(t, false) } +func TestShortSnapSyncingSetHeadWithSnapshots(t *testing.T) { testShortSnapSyncingSetHead(t, true) } + +func testShortSnapSyncingSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 0, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where a +// recent block was already committed to disk and then sethead was called. In this +// test scenario the side chain is below the committed block. In this case we expect +// the canonical full chain to be rolled back to the committed block. Everything +// above the sethead point should be deleted. In between the committed block and +// the requested head the data can remain as "fast sync" data to avoid redownloading +// it. The side chain should be left alone as it was shorter. +func TestShortOldForkedSetHead(t *testing.T) { testShortOldForkedSetHead(t, false) } +func TestShortOldForkedSetHeadWithSnapshots(t *testing.T) { testShortOldForkedSetHead(t, true) } + +func testShortOldForkedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was already committed to disk and then sethead was +// called. In this test scenario the side chain is below the committed block. In +// this case we expect the canonical full chain to be rolled back to the committed +// block. Everything above the sethead point should be deleted. In between the +// committed block and the requested head the data can remain as "fast sync" data +// to avoid redownloading it. The side chain should be left alone as it was shorter. +func TestShortOldForkedSnapSyncedSetHead(t *testing.T) { + testShortOldForkedSnapSyncedSetHead(t, false) +} +func TestShortOldForkedSnapSyncedSetHeadWithSnapshots(t *testing.T) { + testShortOldForkedSnapSyncedSetHead(t, true) +} + +func testShortOldForkedSnapSyncedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was not yet committed, but sethead was called. In this +// test scenario the side chain is below the committed block. In this case we expect +// the chain to detect that it was fast syncing and delete everything from the new +// head, since we can just pick up fast syncing from there. The head full block +// should be set to the genesis. +func TestShortOldForkedSnapSyncingSetHead(t *testing.T) { + testShortOldForkedSnapSyncingSetHead(t, false) +} +func TestShortOldForkedSnapSyncingSetHeadWithSnapshots(t *testing.T) { + testShortOldForkedSnapSyncingSetHead(t, true) +} + +func testShortOldForkedSnapSyncingSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 3, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where a +// recent block was already committed to disk and then sethead was called. In this +// test scenario the side chain reaches above the committed block. In this case we +// expect the canonical full chain to be rolled back to the committed block. All +// data above the sethead point should be deleted. In between the committed block +// and the requested head the data can remain as "fast sync" data to avoid having +// to redownload it. The side chain should be truncated to the head set. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortNewlyForkedSetHead(t *testing.T) { testShortNewlyForkedSetHead(t, false) } +func TestShortNewlyForkedSetHeadWithSnapshots(t *testing.T) { testShortNewlyForkedSetHead(t, true) } + +func testShortNewlyForkedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 10, + sidechainBlocks: 8, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was already committed to disk and then sethead was +// called. In this case we expect the canonical full chain to be rolled back to +// between the committed block and the requested head the data can remain as +// "fast sync" data to avoid having to redownload it. The side chain should be +// truncated to the head set. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortNewlyForkedSnapSyncedSetHead(t *testing.T) { + testShortNewlyForkedSnapSyncedSetHead(t, false) +} +func TestShortNewlyForkedSnapSyncedSetHeadWithSnapshots(t *testing.T) { + testShortNewlyForkedSnapSyncedSetHead(t, true) +} + +func testShortNewlyForkedSnapSyncedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 10, + sidechainBlocks: 8, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a shorter side chain, where +// the fast sync pivot point was not yet committed, but sethead was called. In +// this test scenario the side chain reaches above the committed block. In this +// case we expect the chain to detect that it was fast syncing and delete +// everything from the new head, since we can just pick up fast syncing from +// there. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortNewlyForkedSnapSyncingSetHead(t *testing.T) { + testShortNewlyForkedSnapSyncingSetHead(t, false) +} +func TestShortNewlyForkedSnapSyncingSetHeadWithSnapshots(t *testing.T) { + testShortNewlyForkedSnapSyncingSetHead(t, true) +} + +func testShortNewlyForkedSnapSyncingSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 10, + sidechainBlocks: 8, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a longer side chain, where a +// recent block was already committed to disk and then sethead was called. In this +// case we expect the canonical full chain to be rolled back to the committed block. +// All data above the sethead point should be deleted. In between the committed +// block and the requested head the data can remain as "fast sync" data to avoid +// having to redownload it. The side chain should be truncated to the head set. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortReorgedSetHead(t *testing.T) { testShortReorgedSetHead(t, false) } +func TestShortReorgedSetHeadWithSnapshots(t *testing.T) { testShortReorgedSetHead(t, true) } + +func testShortReorgedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G, C4 + // Pivot : none + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a longer side chain, where +// the fast sync pivot point was already committed to disk and then sethead was +// called. In this case we expect the canonical full chain to be rolled back to +// the committed block. All data above the sethead point should be deleted. In +// between the committed block and the requested head the data can remain as +// "fast sync" data to avoid having to redownload it. The side chain should be +// truncated to the head set. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortReorgedSnapSyncedSetHead(t *testing.T) { + testShortReorgedSnapSyncedSetHead(t, false) +} +func TestShortReorgedSnapSyncedSetHeadWithSnapshots(t *testing.T) { + testShortReorgedSnapSyncedSetHead(t, true) +} + +func testShortReorgedSnapSyncedSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a short canonical chain and a longer side chain, where +// the fast sync pivot point was not yet committed, but sethead was called. In +// this case we expect the chain to detect that it was fast syncing and delete +// everything from the new head, since we can just pick up fast syncing from +// there. +// +// The side chain could be left to be if the fork point was before the new head +// we are deleting to, but it would be exceedingly hard to detect that case and +// properly handle it, so we'll trade extra work in exchange for simpler code. +func TestShortReorgedSnapSyncingSetHead(t *testing.T) { + testShortReorgedSnapSyncingSetHead(t, false) +} +func TestShortReorgedSnapSyncingSetHeadWithSnapshots(t *testing.T) { + testShortReorgedSnapSyncingSetHead(t, true) +} + +func testShortReorgedSnapSyncingSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10 + // + // Frozen: none + // Commit: G + // Pivot : C4 + // + // SetHead(7) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7 + // └->S1->S2->S3->S4->S5->S6->S7 + // + // Expected head header : C7 + // Expected head fast block: C7 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 8, + sidechainBlocks: 10, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 7, + expCanonicalBlocks: 7, + expSidechainBlocks: 7, + expFrozen: 0, + expHeadHeader: 7, + expHeadFastBlock: 7, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where a recent +// block - newer than the ancient limit - was already committed to disk and then +// sethead was called. In this case we expect the full chain to be rolled back +// to the committed block. Everything above the sethead point should be deleted. +// In between the committed block and the requested head the data can remain as +// "fast sync" data to avoid redownloading it. +func TestLongShallowSetHead(t *testing.T) { testLongShallowSetHead(t, false) } +func TestLongShallowSetHeadWithSnapshots(t *testing.T) { testLongShallowSetHead(t, true) } + +func testLongShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where a recent +// block - older than the ancient limit - was already committed to disk and then +// sethead was called. In this case we expect the full chain to be rolled back +// to the committed block. Since the ancient limit was underflown, everything +// needs to be deleted onwards to avoid creating a gap. +func TestLongDeepSetHead(t *testing.T) { testLongDeepSetHead(t, false) } +func TestLongDeepSetHeadWithSnapshots(t *testing.T) { testLongDeepSetHead(t, true) } + +func testLongDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where the fast +// sync pivot point - newer than the ancient limit - was already committed, after +// which sethead was called. In this case we expect the full chain to be rolled +// back to the committed block. Everything above the sethead point should be +// deleted. In between the committed block and the requested head the data can +// remain as "fast sync" data to avoid redownloading it. +func TestLongSnapSyncedShallowSetHead(t *testing.T) { + testLongSnapSyncedShallowSetHead(t, false) +} +func TestLongSnapSyncedShallowSetHeadWithSnapshots(t *testing.T) { + testLongSnapSyncedShallowSetHead(t, true) +} + +func testLongSnapSyncedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where the fast +// sync pivot point - older than the ancient limit - was already committed, after +// which sethead was called. In this case we expect the full chain to be rolled +// back to the committed block. Since the ancient limit was underflown, everything +// needs to be deleted onwards to avoid creating a gap. +func TestLongSnapSyncedDeepSetHead(t *testing.T) { testLongSnapSyncedDeepSetHead(t, false) } +func TestLongSnapSyncedDeepSetHeadWithSnapshots(t *testing.T) { testLongSnapSyncedDeepSetHead(t, true) } + +func testLongSnapSyncedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where the fast +// sync pivot point - newer than the ancient limit - was not yet committed, but +// sethead was called. In this case we expect the chain to detect that it was fast +// syncing and delete everything from the new head, since we can just pick up fast +// syncing from there. +func TestLongSnapSyncingShallowSetHead(t *testing.T) { + testLongSnapSyncingShallowSetHead(t, false) +} +func TestLongSnapSyncingShallowSetHeadWithSnapshots(t *testing.T) { + testLongSnapSyncingShallowSetHead(t, true) +} + +func testLongSnapSyncingShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks where the fast +// sync pivot point - older than the ancient limit - was not yet committed, but +// sethead was called. In this case we expect the chain to detect that it was fast +// syncing and delete everything from the new head, since we can just pick up fast +// syncing from there. +func TestLongSnapSyncingDeepSetHead(t *testing.T) { + testLongSnapSyncingDeepSetHead(t, false) +} +func TestLongSnapSyncingDeepSetHeadWithSnapshots(t *testing.T) { + testLongSnapSyncingDeepSetHead(t, true) +} + +func testLongSnapSyncingDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6 + // + // Expected in leveldb: none + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 0, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 7, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter side +// chain, where a recent block - newer than the ancient limit - was already committed +// to disk and then sethead was called. In this case we expect the canonical full +// chain to be rolled back to the committed block. Everything above the sethead point +// should be deleted. In between the committed block and the requested head the data +// can remain as "fast sync" data to avoid redownloading it. The side chain is nuked +// by the freezer. +func TestLongOldForkedShallowSetHead(t *testing.T) { + testLongOldForkedShallowSetHead(t, false) +} +func TestLongOldForkedShallowSetHeadWithSnapshots(t *testing.T) { + testLongOldForkedShallowSetHead(t, true) +} + +func testLongOldForkedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter side +// chain, where a recent block - older than the ancient limit - was already committed +// to disk and then sethead was called. In this case we expect the canonical full +// chain to be rolled back to the committed block. Since the ancient limit was +// underflown, everything needs to be deleted onwards to avoid creating a gap. The +// side chain is nuked by the freezer. +func TestLongOldForkedDeepSetHead(t *testing.T) { testLongOldForkedDeepSetHead(t, false) } +func TestLongOldForkedDeepSetHeadWithSnapshots(t *testing.T) { testLongOldForkedDeepSetHead(t, true) } + +func testLongOldForkedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then sethead was called. In this test scenario +// the side chain is below the committed block. In this case we expect the canonical +// full chain to be rolled back to the committed block. Everything above the +// sethead point should be deleted. In between the committed block and the +// requested head the data can remain as "fast sync" data to avoid redownloading +// it. The side chain is nuked by the freezer. +func TestLongOldForkedSnapSyncedShallowSetHead(t *testing.T) { + testLongOldForkedSnapSyncedShallowSetHead(t, false) +} +func TestLongOldForkedSnapSyncedShallowSetHeadWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncedShallowSetHead(t, true) +} + +func testLongOldForkedSnapSyncedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then sethead was called. In this test scenario +// the side chain is below the committed block. In this case we expect the canonical +// full chain to be rolled back to the committed block. Since the ancient limit was +// underflown, everything needs to be deleted onwards to avoid creating a gap. The +// side chain is nuked by the freezer. +func TestLongOldForkedSnapSyncedDeepSetHead(t *testing.T) { + testLongOldForkedSnapSyncedDeepSetHead(t, false) +} +func TestLongOldForkedSnapSyncedDeepSetHeadWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncedDeepSetHead(t, true) +} + +func testLongOldForkedSnapSyncedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6 + // + // Expected in leveldb: none + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was not yet committed, but sethead was called. In this test scenario the side +// chain is below the committed block. In this case we expect the chain to detect +// that it was fast syncing and delete everything from the new head, since we can +// just pick up fast syncing from there. The side chain is completely nuked by the +// freezer. +func TestLongOldForkedSnapSyncingShallowSetHead(t *testing.T) { + testLongOldForkedSnapSyncingShallowSetHead(t, false) +} +func TestLongOldForkedSnapSyncingShallowSetHeadWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncingShallowSetHead(t, true) +} + +func testLongOldForkedSnapSyncingShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but sethead was called. In this test scenario the side +// chain is below the committed block. In this case we expect the chain to detect +// that it was fast syncing and delete everything from the new head, since we can +// just pick up fast syncing from there. The side chain is completely nuked by the +// freezer. +func TestLongOldForkedSnapSyncingDeepSetHead(t *testing.T) { + testLongOldForkedSnapSyncingDeepSetHead(t, false) +} +func TestLongOldForkedSnapSyncingDeepSetHeadWithSnapshots(t *testing.T) { + testLongOldForkedSnapSyncingDeepSetHead(t, true) +} + +func testLongOldForkedSnapSyncingDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6 + // + // Expected in leveldb: none + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 3, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 7, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - newer than the ancient limit - was already +// committed to disk and then sethead was called. In this test scenario the side +// chain is above the committed block. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongShallowSetHead. +func TestLongNewerForkedShallowSetHead(t *testing.T) { + testLongNewerForkedShallowSetHead(t, false) +} +func TestLongNewerForkedShallowSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedShallowSetHead(t, true) +} + +func testLongNewerForkedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where a recent block - older than the ancient limit - was already +// committed to disk and then sethead was called. In this test scenario the side +// chain is above the committed block. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongDeepSetHead. +func TestLongNewerForkedDeepSetHead(t *testing.T) { + testLongNewerForkedDeepSetHead(t, false) +} +func TestLongNewerForkedDeepSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedDeepSetHead(t, true) +} + +func testLongNewerForkedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then sethead was called. In this test scenario +// the side chain is above the committed block. In this case the freezer will delete +// the sidechain since it's dangling, reverting to TestLongSnapSyncedShallowSetHead. +func TestLongNewerForkedSnapSyncedShallowSetHead(t *testing.T) { + testLongNewerForkedSnapSyncedShallowSetHead(t, false) +} +func TestLongNewerForkedSnapSyncedShallowSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncedShallowSetHead(t, true) +} + +func testLongNewerForkedSnapSyncedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then sethead was called. In this test scenario +// the side chain is above the committed block. In this case the freezer will delete +// the sidechain since it's dangling, reverting to TestLongSnapSyncedDeepSetHead. +func TestLongNewerForkedSnapSyncedDeepSetHead(t *testing.T) { + testLongNewerForkedSnapSyncedDeepSetHead(t, false) +} +func TestLongNewerForkedSnapSyncedDeepSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncedDeepSetHead(t, true) +} + +func testLongNewerForkedSnapSyncedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was not yet committed, but sethead was called. In this test scenario the side +// chain is above the committed block. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongSnapSyncinghallowSetHead. +func TestLongNewerForkedSnapSyncingShallowSetHead(t *testing.T) { + testLongNewerForkedSnapSyncingShallowSetHead(t, false) +} +func TestLongNewerForkedSnapSyncingShallowSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncingShallowSetHead(t, true) +} + +func testLongNewerForkedSnapSyncingShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a shorter +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but sethead was called. In this test scenario the side +// chain is above the committed block. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongSnapSyncingDeepSetHead. +func TestLongNewerForkedSnapSyncingDeepSetHead(t *testing.T) { + testLongNewerForkedSnapSyncingDeepSetHead(t, false) +} +func TestLongNewerForkedSnapSyncingDeepSetHeadWithSnapshots(t *testing.T) { + testLongNewerForkedSnapSyncingDeepSetHead(t, true) +} + +func testLongNewerForkedSnapSyncingDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6 + // + // Expected in leveldb: none + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 12, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 7, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer side +// chain, where a recent block - newer than the ancient limit - was already committed +// to disk and then sethead was called. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongShallowSetHead. +func TestLongReorgedShallowSetHead(t *testing.T) { testLongReorgedShallowSetHead(t, false) } +func TestLongReorgedShallowSetHeadWithSnapshots(t *testing.T) { testLongReorgedShallowSetHead(t, true) } + +func testLongReorgedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer side +// chain, where a recent block - older than the ancient limit - was already committed +// to disk and then sethead was called. In this case the freezer will delete the +// sidechain since it's dangling, reverting to TestLongDeepSetHead. +func TestLongReorgedDeepSetHead(t *testing.T) { testLongReorgedDeepSetHead(t, false) } +func TestLongReorgedDeepSetHeadWithSnapshots(t *testing.T) { testLongReorgedDeepSetHead(t, true) } + +func testLongReorgedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : none + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: nil, + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was already committed to disk and then sethead was called. In this case the +// freezer will delete the sidechain since it's dangling, reverting to +// TestLongSnapSyncedShallowSetHead. +func TestLongReorgedSnapSyncedShallowSetHead(t *testing.T) { + testLongReorgedSnapSyncedShallowSetHead(t, false) +} +func TestLongReorgedSnapSyncedShallowSetHeadWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncedShallowSetHead(t, true) +} + +func testLongReorgedSnapSyncedShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - older than the ancient limit - +// was already committed to disk and then sethead was called. In this case the +// freezer will delete the sidechain since it's dangling, reverting to +// TestLongSnapSyncedDeepSetHead. +func TestLongReorgedSnapSyncedDeepSetHead(t *testing.T) { + testLongReorgedSnapSyncedDeepSetHead(t, false) +} +func TestLongReorgedSnapSyncedDeepSetHeadWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncedDeepSetHead(t, true) +} + +func testLongReorgedSnapSyncedDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G, C4 + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4 + // + // Expected in leveldb: none + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 4, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 4, + expSidechainBlocks: 0, + expFrozen: 5, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - newer than the ancient limit - +// was not yet committed, but sethead was called. In this case we expect the +// chain to detect that it was fast syncing and delete everything from the new +// head, since we can just pick up fast syncing from there. The side chain is +// completely nuked by the freezer. +func TestLongReorgedSnapSyncingShallowSetHead(t *testing.T) { + testLongReorgedSnapSyncingShallowSetHead(t, false) +} +func TestLongReorgedSnapSyncingShallowSetHeadWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncingShallowSetHead(t, true) +} + +func testLongReorgedSnapSyncingShallowSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2 + // + // Expected in leveldb: + // C2)->C3->C4->C5->C6 + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 18, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 3, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +// Tests a sethead for a long canonical chain with frozen blocks and a longer +// side chain, where the fast sync pivot point - older than the ancient limit - +// was not yet committed, but sethead was called. In this case we expect the +// chain to detect that it was fast syncing and delete everything from the new +// head, since we can just pick up fast syncing from there. The side chain is +// completely nuked by the freezer. +func TestLongReorgedSnapSyncingDeepSetHead(t *testing.T) { + testLongReorgedSnapSyncingDeepSetHead(t, false) +} +func TestLongReorgedSnapSyncingDeepSetHeadWithSnapshots(t *testing.T) { + testLongReorgedSnapSyncingDeepSetHead(t, true) +} + +func testLongReorgedSnapSyncingDeepSetHead(t *testing.T, snapshots bool) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10->C11->C12->C13->C14->C15->C16->C17->C18->C19->C20->C21->C22->C23->C24 (HEAD) + // └->S1->S2->S3->S4->S5->S6->S7->S8->S9->S10->S11->S12->S13->S14->S15->S16->S17->S18->S19->S20->S21->S22->S23->S24->S25->S26 + // + // Frozen: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Commit: G + // Pivot : C4 + // + // SetHead(6) + // + // ------------------------------ + // + // Expected in freezer: + // G->C1->C2->C3->C4->C5->C6 + // + // Expected in leveldb: none + // + // Expected head header : C6 + // Expected head fast block: C6 + // Expected head block : G + testSetHead(t, &rewindTest{ + canonicalBlocks: 24, + sidechainBlocks: 26, + freezeThreshold: 16, + commitBlock: 0, + pivotBlock: uint64ptr(4), + setheadBlock: 6, + expCanonicalBlocks: 6, + expSidechainBlocks: 0, + expFrozen: 7, + expHeadHeader: 6, + expHeadFastBlock: 6, + expHeadBlock: 0, + }, snapshots) +} + +func testSetHead(t *testing.T, tt *rewindTest, snapshots bool) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump(false)) + + // Create a temporary persistent database + datadir := t.TempDir() + + db, err := rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to create persistent database: %v", err) + } + defer db.Close() + + // Initialize a fresh chain + var ( + gspec = &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.AllEthashProtocolChanges, + } + genesis = gspec.MustCommit(db) + engine = ethash.NewFullFaker() + config = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 0, // Disable snapshot + } + ) + if snapshots { + config.SnapshotLimit = 256 + config.SnapshotWait = true + } + chain, err := NewBlockChain(db, config, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to create chain: %v", err) + } + // If sidechain blocks are needed, make a light chain and import it + var sideblocks types.Blocks + if tt.sidechainBlocks > 0 { + sideblocks, _ = GenerateChain(params.TestChainConfig, genesis, engine, rawdb.NewMemoryDatabase(), tt.sidechainBlocks, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0x01}) + }) + if _, err := chain.InsertChain(sideblocks); err != nil { + t.Fatalf("Failed to import side chain: %v", err) + } + } + canonblocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, rawdb.NewMemoryDatabase(), tt.canonicalBlocks, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{0x02}) + b.SetDifficulty(big.NewInt(1000000)) + }) + if _, err := chain.InsertChain(canonblocks[:tt.commitBlock]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + if tt.commitBlock > 0 { + chain.stateCache.TrieDB().Commit(canonblocks[tt.commitBlock-1].Root(), true, nil) + if snapshots { + if err := chain.snaps.Cap(canonblocks[tt.commitBlock-1].Root(), 0); err != nil { + t.Fatalf("Failed to flatten snapshots: %v", err) + } + } + } + if _, err := chain.InsertChain(canonblocks[tt.commitBlock:]); err != nil { + t.Fatalf("Failed to import canonical chain tail: %v", err) + } + // Manually dereference anything not committed to not have to work with 128+ tries + for _, block := range sideblocks { + chain.stateCache.TrieDB().Dereference(block.Root()) + } + for _, block := range canonblocks { + chain.stateCache.TrieDB().Dereference(block.Root()) + } + // Force run a freeze cycle + type freezer interface { + Freeze(threshold uint64) error + Ancients() (uint64, error) + } + db.(freezer).Freeze(tt.freezeThreshold) + + // Set the simulated pivot block + if tt.pivotBlock != nil { + rawdb.WriteLastPivotNumber(db, *tt.pivotBlock) + } + // Set the head of the chain back to the requested number + chain.SetHead(tt.setheadBlock) + + // Iterate over all the remaining blocks and ensure there are no gaps + verifyNoGaps(t, chain, true, canonblocks) + verifyNoGaps(t, chain, false, sideblocks) + verifyCutoff(t, chain, true, canonblocks, tt.expCanonicalBlocks) + verifyCutoff(t, chain, false, sideblocks, tt.expSidechainBlocks) + + if head := chain.CurrentHeader(); head.Number.Uint64() != tt.expHeadHeader { + t.Errorf("Head header mismatch: have %d, want %d", head.Number, tt.expHeadHeader) + } + if head := chain.CurrentFastBlock(); head.NumberU64() != tt.expHeadFastBlock { + t.Errorf("Head fast block mismatch: have %d, want %d", head.NumberU64(), tt.expHeadFastBlock) + } + if head := chain.CurrentBlock(); head.NumberU64() != tt.expHeadBlock { + t.Errorf("Head block mismatch: have %d, want %d", head.NumberU64(), tt.expHeadBlock) + } + if frozen, err := db.(freezer).Ancients(); err != nil { + t.Errorf("Failed to retrieve ancient count: %v\n", err) + } else if int(frozen) != tt.expFrozen { + t.Errorf("Frozen block count mismatch: have %d, want %d", frozen, tt.expFrozen) + } +} + +// verifyNoGaps checks that there are no gaps after the initial set of blocks in +// the database and errors if found. +func verifyNoGaps(t *testing.T, chain *BlockChain, canonical bool, inserted types.Blocks) { + t.Helper() + + var end uint64 + for i := uint64(0); i <= uint64(len(inserted)); i++ { + header := chain.GetHeaderByNumber(i) + if header == nil && end == 0 { + end = i + } + if header != nil && end > 0 { + if canonical { + t.Errorf("Canonical header gap between #%d-#%d", end, i-1) + } else { + t.Errorf("Sidechain header gap between #%d-#%d", end, i-1) + } + end = 0 // Reset for further gap detection + } + } + end = 0 + for i := uint64(0); i <= uint64(len(inserted)); i++ { + block := chain.GetBlockByNumber(i) + if block == nil && end == 0 { + end = i + } + if block != nil && end > 0 { + if canonical { + t.Errorf("Canonical block gap between #%d-#%d", end, i-1) + } else { + t.Errorf("Sidechain block gap between #%d-#%d", end, i-1) + } + end = 0 // Reset for further gap detection + } + } + end = 0 + for i := uint64(1); i <= uint64(len(inserted)); i++ { + receipts := chain.GetReceiptsByHash(inserted[i-1].Hash()) + if receipts == nil && end == 0 { + end = i + } + if receipts != nil && end > 0 { + if canonical { + t.Errorf("Canonical receipt gap between #%d-#%d", end, i-1) + } else { + t.Errorf("Sidechain receipt gap between #%d-#%d", end, i-1) + } + end = 0 // Reset for further gap detection + } + } +} + +// verifyCutoff checks that there are no chain data available in the chain after +// the specified limit, but that it is available before. +func verifyCutoff(t *testing.T, chain *BlockChain, canonical bool, inserted types.Blocks, head int) { + t.Helper() + + for i := 1; i <= len(inserted); i++ { + if i <= head { + if header := chain.GetHeader(inserted[i-1].Hash(), uint64(i)); header == nil { + if canonical { + t.Errorf("Canonical header #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain header #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + if block := chain.GetBlock(inserted[i-1].Hash(), uint64(i)); block == nil { + if canonical { + t.Errorf("Canonical block #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain block #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + if receipts := chain.GetReceiptsByHash(inserted[i-1].Hash()); receipts == nil { + if canonical { + t.Errorf("Canonical receipts #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain receipts #%2d [%x...] missing before cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + } else { + if header := chain.GetHeader(inserted[i-1].Hash(), uint64(i)); header != nil { + if canonical { + t.Errorf("Canonical header #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain header #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + if block := chain.GetBlock(inserted[i-1].Hash(), uint64(i)); block != nil { + if canonical { + t.Errorf("Canonical block #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain block #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + if receipts := chain.GetReceiptsByHash(inserted[i-1].Hash()); receipts != nil { + if canonical { + t.Errorf("Canonical receipts #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } else { + t.Errorf("Sidechain receipts #%2d [%x...] present after cap %d", inserted[i-1].Number(), inserted[i-1].Hash().Bytes()[:3], head) + } + } + } + } +} + +// uint64ptr is a weird helper to allow 1-line constant pointer creation. +func uint64ptr(n uint64) *uint64 { + return &n +} diff --git a/core/blockchain_snapshot_test.go b/core/blockchain_snapshot_test.go new file mode 100644 index 00000000..01a88d7a --- /dev/null +++ b/core/blockchain_snapshot_test.go @@ -0,0 +1,672 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Tests that abnormal program termination (i.e.crash) and restart can recovery +// the snapshot properly if the snapshot is enabled. + +package core + +import ( + "bytes" + "fmt" + "math/big" + "os" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/consensus" + "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" +) + +// snapshotTestBasic wraps the common testing fields in the snapshot tests. +type snapshotTestBasic struct { + chainBlocks int // Number of blocks to generate for the canonical chain + snapshotBlock uint64 // Block number of the relevant snapshot disk layer + commitBlock uint64 // Block number for which to commit the state to disk + + expCanonicalBlocks int // Number of canonical blocks expected to remain in the database (excl. genesis) + expHeadHeader uint64 // Block number of the expected head header + expHeadFastBlock uint64 // Block number of the expected head fast sync block + expHeadBlock uint64 // Block number of the expected head full block + expSnapshotBottom uint64 // The block height corresponding to the snapshot disk layer + + // share fields, set in runtime + datadir string + db ethdb.Database + gendb ethdb.Database + engine consensus.Engine + gspec *Genesis +} + +func (basic *snapshotTestBasic) prepare(t *testing.T) (*BlockChain, []*types.Block) { + // Create a temporary persistent database + datadir := t.TempDir() + + db, err := rawdb.NewLevelDBDatabaseWithFreezer(datadir, 0, 0, datadir, "", false) + if err != nil { + t.Fatalf("Failed to create persistent database: %v", err) + } + // Initialize a fresh chain + var ( + gspec = &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.AllEthashProtocolChanges, + } + genesis = gspec.MustCommit(db) + engine = ethash.NewFullFaker() + gendb = rawdb.NewMemoryDatabase() + + // Snapshot is enabled, the first snapshot is created from the Genesis. + // The snapshot memory allowance is 256MB, it means no snapshot flush + // will happen during the block insertion. + cacheConfig = defaultCacheConfig + ) + chain, err := NewBlockChain(db, cacheConfig, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to create chain: %v", err) + } + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, gendb, basic.chainBlocks, func(i int, b *BlockGen) {}) + + // Insert the blocks with configured settings. + var breakpoints []uint64 + if basic.commitBlock > basic.snapshotBlock { + breakpoints = append(breakpoints, basic.snapshotBlock, basic.commitBlock) + } else { + breakpoints = append(breakpoints, basic.commitBlock, basic.snapshotBlock) + } + var startPoint uint64 + for _, point := range breakpoints { + if _, err := chain.InsertChain(blocks[startPoint:point]); err != nil { + t.Fatalf("Failed to import canonical chain start: %v", err) + } + startPoint = point + + if basic.commitBlock > 0 && basic.commitBlock == point { + chain.stateCache.TrieDB().Commit(blocks[point-1].Root(), true, nil) + } + if basic.snapshotBlock > 0 && basic.snapshotBlock == point { + // Flushing the entire snap tree into the disk, the + // relevant (a) snapshot root and (b) snapshot generator + // will be persisted atomically. + chain.snaps.Cap(blocks[point-1].Root(), 0) + diskRoot, blockRoot := chain.snaps.DiskRoot(), blocks[point-1].Root() + if !bytes.Equal(diskRoot.Bytes(), blockRoot.Bytes()) { + t.Fatalf("Failed to flush disk layer change, want %x, got %x", blockRoot, diskRoot) + } + } + } + if _, err := chain.InsertChain(blocks[startPoint:]); err != nil { + t.Fatalf("Failed to import canonical chain tail: %v", err) + } + + // Set runtime fields + basic.datadir = datadir + basic.db = db + basic.gendb = gendb + basic.engine = engine + basic.gspec = gspec + return chain, blocks +} + +func (basic *snapshotTestBasic) verify(t *testing.T, chain *BlockChain, blocks []*types.Block) { + // Iterate over all the remaining blocks and ensure there are no gaps + verifyNoGaps(t, chain, true, blocks) + verifyCutoff(t, chain, true, blocks, basic.expCanonicalBlocks) + + if head := chain.CurrentHeader(); head.Number.Uint64() != basic.expHeadHeader { + t.Errorf("Head header mismatch: have %d, want %d", head.Number, basic.expHeadHeader) + } + if head := chain.CurrentFastBlock(); head.NumberU64() != basic.expHeadFastBlock { + t.Errorf("Head fast block mismatch: have %d, want %d", head.NumberU64(), basic.expHeadFastBlock) + } + if head := chain.CurrentBlock(); head.NumberU64() != basic.expHeadBlock { + t.Errorf("Head block mismatch: have %d, want %d", head.NumberU64(), basic.expHeadBlock) + } + + // Check the disk layer, ensure they are matched + block := chain.GetBlockByNumber(basic.expSnapshotBottom) + if block == nil { + t.Errorf("The correspnding block[%d] of snapshot disk layer is missing", basic.expSnapshotBottom) + } else if !bytes.Equal(chain.snaps.DiskRoot().Bytes(), block.Root().Bytes()) { + t.Errorf("The snapshot disk layer root is incorrect, want %x, get %x", block.Root(), chain.snaps.DiskRoot()) + } + + // Check the snapshot, ensure it's integrated + if err := chain.snaps.Verify(block.Root()); err != nil { + t.Errorf("The disk layer is not integrated %v", err) + } +} + +//nolint:unused +func (basic *snapshotTestBasic) dump() string { + buffer := new(strings.Builder) + + fmt.Fprint(buffer, "Chain:\n G") + for i := 0; i < basic.chainBlocks; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprint(buffer, " (HEAD)\n\n") + + fmt.Fprintf(buffer, "Commit: G") + if basic.commitBlock > 0 { + fmt.Fprintf(buffer, ", C%d", basic.commitBlock) + } + fmt.Fprint(buffer, "\n") + + fmt.Fprintf(buffer, "Snapshot: G") + if basic.snapshotBlock > 0 { + fmt.Fprintf(buffer, ", C%d", basic.snapshotBlock) + } + fmt.Fprint(buffer, "\n") + + //if crash { + // fmt.Fprintf(buffer, "\nCRASH\n\n") + //} else { + // fmt.Fprintf(buffer, "\nSetHead(%d)\n\n", basic.setHead) + //} + fmt.Fprintf(buffer, "------------------------------\n\n") + + fmt.Fprint(buffer, "Expected in leveldb:\n G") + for i := 0; i < basic.expCanonicalBlocks; i++ { + fmt.Fprintf(buffer, "->C%d", i+1) + } + fmt.Fprintf(buffer, "\n\n") + fmt.Fprintf(buffer, "Expected head header : C%d\n", basic.expHeadHeader) + fmt.Fprintf(buffer, "Expected head fast block: C%d\n", basic.expHeadFastBlock) + if basic.expHeadBlock == 0 { + fmt.Fprintf(buffer, "Expected head block : G\n") + } else { + fmt.Fprintf(buffer, "Expected head block : C%d\n", basic.expHeadBlock) + } + if basic.expSnapshotBottom == 0 { + fmt.Fprintf(buffer, "Expected snapshot disk : G\n") + } else { + fmt.Fprintf(buffer, "Expected snapshot disk : C%d\n", basic.expSnapshotBottom) + } + return buffer.String() +} + +func (basic *snapshotTestBasic) teardown() { + basic.db.Close() + basic.gendb.Close() + os.RemoveAll(basic.datadir) +} + +// snapshotTest is a test case type for normal snapshot recovery. +// It can be used for testing that restart Geth normally. +type snapshotTest struct { + snapshotTestBasic +} + +func (snaptest *snapshotTest) test(t *testing.T) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump()) + chain, blocks := snaptest.prepare(t) + + // Restart the chain normally + chain.Stop() + newchain, err := NewBlockChain(snaptest.db, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer newchain.Stop() + + snaptest.verify(t, newchain, blocks) +} + +// crashSnapshotTest is a test case type for innormal snapshot recovery. +// It can be used for testing that restart Geth after the crash. +type crashSnapshotTest struct { + snapshotTestBasic +} + +func (snaptest *crashSnapshotTest) test(t *testing.T) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump()) + chain, blocks := snaptest.prepare(t) + + // Pull the plug on the database, simulating a hard crash + db := chain.db + db.Close() + + // Start a new blockchain back up and see where the repair leads us + newdb, err := rawdb.NewLevelDBDatabaseWithFreezer(snaptest.datadir, 0, 0, snaptest.datadir, "", false) + if err != nil { + t.Fatalf("Failed to reopen persistent database: %v", err) + } + defer newdb.Close() + + // The interesting thing is: instead of starting the blockchain after + // the crash, we do restart twice here: one after the crash and one + // after the normal stop. It's used to ensure the broken snapshot + // can be detected all the time. + newchain, err := NewBlockChain(newdb, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + newchain.Stop() + + newchain, err = NewBlockChain(newdb, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer newchain.Stop() + + snaptest.verify(t, newchain, blocks) +} + +// gappedSnapshotTest is a test type used to test this scenario: +// - have a complete snapshot +// - restart without enabling the snapshot +// - insert a few blocks +// - restart with enabling the snapshot again +type gappedSnapshotTest struct { + snapshotTestBasic + gapped int // Number of blocks to insert without enabling snapshot +} + +func (snaptest *gappedSnapshotTest) test(t *testing.T) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump()) + chain, blocks := snaptest.prepare(t) + + // Insert blocks without enabling snapshot if gapping is required. + chain.Stop() + gappedBlocks, _ := GenerateChain(params.TestChainConfig, blocks[len(blocks)-1], snaptest.engine, snaptest.gendb, snaptest.gapped, func(i int, b *BlockGen) {}) + + // Insert a few more blocks without enabling snapshot + var cacheConfig = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 0, + } + newchain, err := NewBlockChain(snaptest.db, cacheConfig, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + newchain.InsertChain(gappedBlocks) + newchain.Stop() + + // Restart the chain with enabling the snapshot + newchain, err = NewBlockChain(snaptest.db, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer newchain.Stop() + + snaptest.verify(t, newchain, blocks) +} + +// setHeadSnapshotTest is the test type used to test this scenario: +// - have a complete snapshot +// - set the head to a lower point +// - restart +type setHeadSnapshotTest struct { + snapshotTestBasic + setHead uint64 // Block number to set head back to +} + +func (snaptest *setHeadSnapshotTest) test(t *testing.T) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump()) + chain, blocks := snaptest.prepare(t) + + // Rewind the chain if setHead operation is required. + chain.SetHead(snaptest.setHead) + chain.Stop() + + newchain, err := NewBlockChain(snaptest.db, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + defer newchain.Stop() + + snaptest.verify(t, newchain, blocks) +} + +// wipeCrashSnapshotTest is the test type used to test this scenario: +// - have a complete snapshot +// - restart, insert more blocks without enabling the snapshot +// - restart again with enabling the snapshot +// - crash +type wipeCrashSnapshotTest struct { + snapshotTestBasic + newBlocks int +} + +func (snaptest *wipeCrashSnapshotTest) test(t *testing.T) { + // It's hard to follow the test case, visualize the input + // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + // fmt.Println(tt.dump()) + chain, blocks := snaptest.prepare(t) + + // Firstly, stop the chain properly, with all snapshot journal + // and state committed. + chain.Stop() + + config := &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 0, + } + newchain, err := NewBlockChain(snaptest.db, config, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + newBlocks, _ := GenerateChain(params.TestChainConfig, blocks[len(blocks)-1], snaptest.engine, snaptest.gendb, snaptest.newBlocks, func(i int, b *BlockGen) {}) + newchain.InsertChain(newBlocks) + newchain.Stop() + + // Restart the chain, the wiper should starts working + config = &CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 256, + SnapshotWait: false, // Don't wait rebuild + } + _, err = NewBlockChain(snaptest.db, config, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + // Simulate the blockchain crash. + + newchain, err = NewBlockChain(snaptest.db, nil, snaptest.gspec, nil, snaptest.engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to recreate chain: %v", err) + } + snaptest.verify(t, newchain, blocks) +} + +// Tests a Geth restart with valid snapshot. Before the shutdown, all snapshot +// journal will be persisted correctly. In this case no snapshot recovery is +// required. +func TestRestartWithNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G + // Snapshot: G + // + // SetHead(0) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C8 + // Expected snapshot disk : G + test := &snapshotTest{ + snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 0, + commitBlock: 0, + expCanonicalBlocks: 8, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 8, + expSnapshotBottom: 0, // Initial disk layer built from genesis + }, + } + test.test(t) + test.teardown() +} + +// Tests a Geth was crashed and restarts with a broken snapshot. In this case the +// chain head should be rewound to the point with available state. And also the +// new head should must be lower than disk layer. But there is no committed point +// so the chain should be rewound to genesis and the disk layer should be left +// for recovery. +func TestNoCommitCrashWithNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G + // Snapshot: G, C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + // Expected snapshot disk : C4 + test := &crashSnapshotTest{ + snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 4, + commitBlock: 0, + expCanonicalBlocks: 8, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + expSnapshotBottom: 4, // Last committed disk layer, wait recovery + }, + } + test.test(t) + test.teardown() +} + +// Tests a Geth was crashed and restarts with a broken snapshot. In this case the +// chain head should be rewound to the point with available state. And also the +// new head should must be lower than disk layer. But there is only a low committed +// point so the chain should be rewound to committed point and the disk layer +// should be left for recovery. +func TestLowCommitCrashWithNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G, C2 + // Snapshot: G, C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : C2 + // Expected snapshot disk : C4 + test := &crashSnapshotTest{ + snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 4, + commitBlock: 2, + expCanonicalBlocks: 8, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 2, + expSnapshotBottom: 4, // Last committed disk layer, wait recovery + }, + } + test.test(t) + test.teardown() +} + +// Tests a Geth was crashed and restarts with a broken snapshot. In this case +// the chain head should be rewound to the point with available state. And also +// the new head should must be lower than disk layer. But there is only a high +// committed point so the chain should be rewound to genesis and the disk layer +// should be left for recovery. +func TestHighCommitCrashWithNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G, C6 + // Snapshot: G, C4 + // + // CRASH + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8 + // + // Expected head header : C8 + // Expected head fast block: C8 + // Expected head block : G + // Expected snapshot disk : C4 + test := &crashSnapshotTest{ + snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 4, + commitBlock: 6, + expCanonicalBlocks: 8, + expHeadHeader: 8, + expHeadFastBlock: 8, + expHeadBlock: 0, + expSnapshotBottom: 4, // Last committed disk layer, wait recovery + }, + } + test.test(t) + test.teardown() +} + +// Tests a Geth was running with snapshot enabled. Then restarts without +// enabling snapshot and after that re-enable the snapshot again. In this +// case the snapshot should be rebuilt with latest chain head. +func TestGappedNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G + // Snapshot: G + // + // SetHead(0) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10 + // + // Expected head header : C10 + // Expected head fast block: C10 + // Expected head block : C10 + // Expected snapshot disk : C10 + test := &gappedSnapshotTest{ + snapshotTestBasic: snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 0, + commitBlock: 0, + expCanonicalBlocks: 10, + expHeadHeader: 10, + expHeadFastBlock: 10, + expHeadBlock: 10, + expSnapshotBottom: 10, // Rebuilt snapshot from the latest HEAD + }, + gapped: 2, + } + test.test(t) + test.teardown() +} + +// Tests the Geth was running with snapshot enabled and resetHead is applied. +// In this case the head is rewound to the target(with state available). After +// that the chain is restarted and the original disk layer is kept. +func TestSetHeadWithNewSnapshot(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G + // Snapshot: G + // + // SetHead(4) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4 + // + // Expected head header : C4 + // Expected head fast block: C4 + // Expected head block : C4 + // Expected snapshot disk : G + test := &setHeadSnapshotTest{ + snapshotTestBasic: snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 0, + commitBlock: 0, + expCanonicalBlocks: 4, + expHeadHeader: 4, + expHeadFastBlock: 4, + expHeadBlock: 4, + expSnapshotBottom: 0, // The initial disk layer is built from the genesis + }, + setHead: 4, + } + test.test(t) + test.teardown() +} + +// Tests the Geth was running with a complete snapshot and then imports a few +// more new blocks on top without enabling the snapshot. After the restart, +// crash happens. Check everything is ok after the restart. +func TestRecoverSnapshotFromWipingCrash(t *testing.T) { + // Chain: + // G->C1->C2->C3->C4->C5->C6->C7->C8 (HEAD) + // + // Commit: G + // Snapshot: G + // + // SetHead(0) + // + // ------------------------------ + // + // Expected in leveldb: + // G->C1->C2->C3->C4->C5->C6->C7->C8->C9->C10 + // + // Expected head header : C10 + // Expected head fast block: C10 + // Expected head block : C8 + // Expected snapshot disk : C10 + test := &wipeCrashSnapshotTest{ + snapshotTestBasic: snapshotTestBasic{ + chainBlocks: 8, + snapshotBlock: 4, + commitBlock: 0, + expCanonicalBlocks: 10, + expHeadHeader: 10, + expHeadFastBlock: 10, + expHeadBlock: 10, + expSnapshotBottom: 10, + }, + newBlocks: 2, + } + test.test(t) + test.teardown() +} diff --git a/core/blockchain_test.go b/core/blockchain_test.go index a8a96932..713ac280 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -17,8 +17,8 @@ package core import ( + "errors" "fmt" - "io/ioutil" "math/big" "math/rand" "os" @@ -26,16 +26,20 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" + "github.com/ethereum/go-ethereum/consensus/ethash" + "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/tracers/logger" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" ) // So we can deterministically seed different blockchains @@ -49,12 +53,16 @@ var ( // header only chain. func newCanonical(engine consensus.Engine, n int, full bool) (ethdb.Database, *BlockChain, error) { var ( - db = rawdb.NewMemoryDatabase() - genesis = new(Genesis).MustCommit(db) + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.AllEthashProtocolChanges, + } + genesis = gspec.MustCommit(db) ) // Initialize a fresh chain with only a genesis block - blockchain, _ := NewBlockChain(db, nil, params.AllEthashProtocolChanges, engine, vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, nil) // Create and inject the requested chain if n == 0 { return db, blockchain, nil @@ -71,6 +79,10 @@ func newCanonical(engine consensus.Engine, n int, full bool) (ethdb.Database, *B return db, blockchain, err } +func newGwei(n int64) *big.Int { + return new(big.Int).Mul(big.NewInt(n), big.NewInt(params.GWei)) +} + // Test fork of length N starting from block i func testFork(t *testing.T, blockchain *BlockChain, i, n int, full bool, comparator func(td1, td2 *big.Int)) { // Copy old chain up to #i into a new db @@ -112,17 +124,21 @@ func testFork(t *testing.T, blockchain *BlockChain, i, n int, full bool, compara var tdPre, tdPost *big.Int if full { - tdPre = blockchain.GetTdByHash(blockchain.CurrentBlock().Hash()) + cur := blockchain.CurrentBlock() + tdPre = blockchain.GetTd(cur.Hash(), cur.NumberU64()) if err := testBlockChainImport(blockChainB, blockchain); err != nil { t.Fatalf("failed to import forked block chain: %v", err) } - tdPost = blockchain.GetTdByHash(blockChainB[len(blockChainB)-1].Hash()) + last := blockChainB[len(blockChainB)-1] + tdPost = blockchain.GetTd(last.Hash(), last.NumberU64()) } else { - tdPre = blockchain.GetTdByHash(blockchain.CurrentHeader().Hash()) + cur := blockchain.CurrentHeader() + tdPre = blockchain.GetTd(cur.Hash(), cur.Number.Uint64()) if err := testHeaderChainImport(headerChainB, blockchain); err != nil { t.Fatalf("failed to import forked header chain: %v", err) } - tdPost = blockchain.GetTdByHash(headerChainB[len(headerChainB)-1].Hash()) + last := headerChainB[len(headerChainB)-1] + tdPost = blockchain.GetTd(last.Hash(), last.Number.Uint64()) } // Compare the total difficulties of the chains comparator(tdPre, tdPost) @@ -143,7 +159,7 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { } return err } - statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), blockchain.stateCache) + statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), blockchain.stateCache, nil) if err != nil { return err } @@ -157,8 +173,9 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { blockchain.reportBlock(block, receipts, err) return err } - blockchain.chainmu.Lock() - rawdb.WriteTd(blockchain.db, block.Hash(), block.NumberU64(), new(big.Int).Add(block.Difficulty(), blockchain.GetTdByHash(block.ParentHash()))) + + blockchain.chainmu.MustLock() + rawdb.WriteTd(blockchain.db, block.Hash(), block.NumberU64(), new(big.Int).Add(block.Difficulty(), blockchain.GetTd(block.ParentHash(), block.NumberU64()-1))) rawdb.WriteBlock(blockchain.db, block) statedb.Commit(false) blockchain.chainmu.Unlock() @@ -175,8 +192,8 @@ 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.chainmu.Lock() - rawdb.WriteTd(blockchain.db, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, blockchain.GetTdByHash(header.ParentHash))) + blockchain.chainmu.MustLock() + rawdb.WriteTd(blockchain.db, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, blockchain.GetTd(header.ParentHash, header.Number.Uint64()-1))) rawdb.WriteHeader(blockchain.db, header) blockchain.chainmu.Unlock() } @@ -199,6 +216,55 @@ func TestLastBlock(t *testing.T) { } } +// Test inserts the blocks/headers after the fork choice rule is changed. +// The chain is reorged to whatever specified. +func testInsertAfterMerge(t *testing.T, blockchain *BlockChain, i, n int, full bool) { + // Copy old chain up to #i into a new db + db, blockchain2, err := newCanonical(ethash.NewFaker(), i, full) + if err != nil { + t.Fatal("could not make new canonical in testFork", err) + } + defer blockchain2.Stop() + + // Assert the chains have the same header/block at #i + var hash1, hash2 common.Hash + if full { + hash1 = blockchain.GetBlockByNumber(uint64(i)).Hash() + hash2 = blockchain2.GetBlockByNumber(uint64(i)).Hash() + } else { + hash1 = blockchain.GetHeaderByNumber(uint64(i)).Hash() + hash2 = blockchain2.GetHeaderByNumber(uint64(i)).Hash() + } + if hash1 != hash2 { + t.Errorf("chain content mismatch at %d: have hash %v, want hash %v", i, hash2, hash1) + } + + // Extend the newly created chain + if full { + blockChainB := makeBlockChain(blockchain2.CurrentBlock(), n, ethash.NewFaker(), db, forkSeed) + if _, err := blockchain2.InsertChain(blockChainB); err != nil { + t.Fatalf("failed to insert forking chain: %v", err) + } + if blockchain2.CurrentBlock().NumberU64() != blockChainB[len(blockChainB)-1].NumberU64() { + t.Fatalf("failed to reorg to the given chain") + } + if blockchain2.CurrentBlock().Hash() != blockChainB[len(blockChainB)-1].Hash() { + t.Fatalf("failed to reorg to the given chain") + } + } else { + headerChainB := makeHeaderChain(blockchain2.CurrentHeader(), n, ethash.NewFaker(), db, forkSeed) + if _, err := blockchain2.InsertHeaderChain(headerChainB, 1); err != nil { + t.Fatalf("failed to insert forking chain: %v", err) + } + if blockchain2.CurrentHeader().Number.Uint64() != headerChainB[len(headerChainB)-1].Number.Uint64() { + t.Fatalf("failed to reorg to the given chain") + } + if blockchain2.CurrentHeader().Hash() != headerChainB[len(headerChainB)-1].Hash() { + t.Fatalf("failed to reorg to the given chain") + } + } +} + // Tests that given a starting canonical chain of a given size, it can be extended // with various length chains. func TestExtendCanonicalHeaders(t *testing.T) { testExtendCanonical(t, false) } @@ -227,6 +293,25 @@ func testExtendCanonical(t *testing.T, full bool) { testFork(t, processor, length, 10, full, better) } +// Tests that given a starting canonical chain of a given size, it can be extended +// with various length chains. +func TestExtendCanonicalHeadersAfterMerge(t *testing.T) { testExtendCanonicalAfterMerge(t, false) } +func TestExtendCanonicalBlocksAfterMerge(t *testing.T) { testExtendCanonicalAfterMerge(t, true) } + +func testExtendCanonicalAfterMerge(t *testing.T, full bool) { + length := 5 + + // Make first chain starting from genesis + _, processor, err := newCanonical(ethash.NewFaker(), length, full) + if err != nil { + t.Fatalf("failed to make new canonical chain: %v", err) + } + defer processor.Stop() + + testInsertAfterMerge(t, processor, length, 1, full) + testInsertAfterMerge(t, processor, length, 10, full) +} + // Tests that given a starting canonical chain of a given size, creating shorter // forks do not take canonical ownership. func TestShorterForkHeaders(t *testing.T) { testShorterFork(t, false) } @@ -257,6 +342,29 @@ func testShorterFork(t *testing.T, full bool) { testFork(t, processor, 5, 4, full, worse) } +// Tests that given a starting canonical chain of a given size, creating shorter +// forks do not take canonical ownership. +func TestShorterForkHeadersAfterMerge(t *testing.T) { testShorterForkAfterMerge(t, false) } +func TestShorterForkBlocksAfterMerge(t *testing.T) { testShorterForkAfterMerge(t, true) } + +func testShorterForkAfterMerge(t *testing.T, full bool) { + length := 10 + + // Make first chain starting from genesis + _, processor, err := newCanonical(ethash.NewFaker(), length, full) + if err != nil { + t.Fatalf("failed to make new canonical chain: %v", err) + } + defer processor.Stop() + + testInsertAfterMerge(t, processor, 0, 3, full) + testInsertAfterMerge(t, processor, 0, 7, full) + testInsertAfterMerge(t, processor, 1, 1, full) + testInsertAfterMerge(t, processor, 1, 7, full) + testInsertAfterMerge(t, processor, 5, 3, full) + testInsertAfterMerge(t, processor, 5, 4, full) +} + // Tests that given a starting canonical chain of a given size, creating longer // forks do take canonical ownership. func TestLongerForkHeaders(t *testing.T) { testLongerFork(t, false) } @@ -272,19 +380,35 @@ func testLongerFork(t *testing.T, full bool) { } defer processor.Stop() - // Define the difficulty comparator - better := func(td1, td2 *big.Int) { - if td2.Cmp(td1) <= 0 { - t.Errorf("total difficulty mismatch: have %v, expected more than %v", td2, td1) - } + testInsertAfterMerge(t, processor, 0, 11, full) + testInsertAfterMerge(t, processor, 0, 15, full) + testInsertAfterMerge(t, processor, 1, 10, full) + testInsertAfterMerge(t, processor, 1, 12, full) + testInsertAfterMerge(t, processor, 5, 6, full) + testInsertAfterMerge(t, processor, 5, 8, full) +} + +// Tests that given a starting canonical chain of a given size, creating longer +// forks do take canonical ownership. +func TestLongerForkHeadersAfterMerge(t *testing.T) { testLongerForkAfterMerge(t, false) } +func TestLongerForkBlocksAfterMerge(t *testing.T) { testLongerForkAfterMerge(t, true) } + +func testLongerForkAfterMerge(t *testing.T, full bool) { + length := 10 + + // Make first chain starting from genesis + _, processor, err := newCanonical(ethash.NewFaker(), length, full) + if err != nil { + t.Fatalf("failed to make new canonical chain: %v", err) } - // Sum of numbers must be greater than `length` for this to be a longer fork - testFork(t, processor, 0, 11, full, better) - testFork(t, processor, 0, 15, full, better) - testFork(t, processor, 1, 10, full, better) - testFork(t, processor, 1, 12, full, better) - testFork(t, processor, 5, 6, full, better) - testFork(t, processor, 5, 8, full, better) + defer processor.Stop() + + testInsertAfterMerge(t, processor, 0, 11, full) + testInsertAfterMerge(t, processor, 0, 15, full) + testInsertAfterMerge(t, processor, 1, 10, full) + testInsertAfterMerge(t, processor, 1, 12, full) + testInsertAfterMerge(t, processor, 5, 6, full) + testInsertAfterMerge(t, processor, 5, 8, full) } // Tests that given a starting canonical chain of a given size, creating equal @@ -317,6 +441,29 @@ func testEqualFork(t *testing.T, full bool) { testFork(t, processor, 9, 1, full, equal) } +// Tests that given a starting canonical chain of a given size, creating equal +// forks do take canonical ownership. +func TestEqualForkHeadersAfterMerge(t *testing.T) { testEqualForkAfterMerge(t, false) } +func TestEqualForkBlocksAfterMerge(t *testing.T) { testEqualForkAfterMerge(t, true) } + +func testEqualForkAfterMerge(t *testing.T, full bool) { + length := 10 + + // Make first chain starting from genesis + _, processor, err := newCanonical(ethash.NewFaker(), length, full) + if err != nil { + t.Fatalf("failed to make new canonical chain: %v", err) + } + defer processor.Stop() + + testInsertAfterMerge(t, processor, 0, 10, full) + testInsertAfterMerge(t, processor, 1, 9, full) + testInsertAfterMerge(t, processor, 2, 8, full) + testInsertAfterMerge(t, processor, 5, 5, full) + testInsertAfterMerge(t, processor, 6, 4, full) + testInsertAfterMerge(t, processor, 9, 1, full) +} + // Tests that chains missing links do not get accepted by the processor. func TestBrokenHeaderChain(t *testing.T) { testBrokenChain(t, false) } func TestBrokenBlockChain(t *testing.T) { testBrokenChain(t, true) } @@ -349,7 +496,7 @@ func TestReorgLongHeaders(t *testing.T) { testReorgLong(t, false) } func TestReorgLongBlocks(t *testing.T) { testReorgLong(t, true) } func testReorgLong(t *testing.T, full bool) { - testReorg(t, []int64{0, 0, -9}, []int64{0, 0, 0, -9}, 393280, full) + testReorg(t, []int64{0, 0, -9}, []int64{0, 0, 0, -9}, 393280+params.GenesisDifficulty.Int64(), full) } // Tests that reorganising a short difficult chain after a long easy one @@ -360,7 +507,7 @@ func TestReorgShortBlocks(t *testing.T) { testReorgShort(t, true) } func testReorgShort(t *testing.T, full bool) { // Create a long easy chain vs. a short heavy one. Due to difficulty adjustment // we need a fairly long chain of blocks with different difficulties for a short - // one to become heavyer than a long one. The 96 is an empirical value. + // one to become heavier than a long one. The 96 is an empirical value. easy := make([]int64, 96) for i := 0; i < len(easy); i++ { easy[i] = 60 @@ -369,7 +516,7 @@ func testReorgShort(t *testing.T, full bool) { for i := 0; i < len(diff); i++ { diff[i] = -9 } - testReorg(t, easy, diff, 12615120, full) + testReorg(t, easy, diff, 12615120+params.GenesisDifficulty.Int64(), full) } func testReorg(t *testing.T, first, second []int64, td int64, full bool) { @@ -429,11 +576,13 @@ func testReorg(t *testing.T, first, second []int64, td int64, full bool) { // Make sure the chain total difficulty is the correct one want := new(big.Int).Add(blockchain.genesisBlock.Difficulty(), big.NewInt(td)) if full { - if have := blockchain.GetTdByHash(blockchain.CurrentBlock().Hash()); have.Cmp(want) != 0 { + cur := blockchain.CurrentBlock() + if have := blockchain.GetTd(cur.Hash(), cur.NumberU64()); have.Cmp(want) != 0 { t.Errorf("total difficulty mismatch: have %v, want %v", have, want) } } else { - if have := blockchain.GetTdByHash(blockchain.CurrentHeader().Hash()); have.Cmp(want) != 0 { + cur := blockchain.CurrentHeader() + if have := blockchain.GetTd(cur.Hash(), cur.Number.Uint64()); have.Cmp(want) != 0 { t.Errorf("total difficulty mismatch: have %v, want %v", have, want) } } @@ -467,8 +616,8 @@ func testBadHashes(t *testing.T, full bool) { _, err = blockchain.InsertHeaderChain(headers, 1) } - if err != ErrBlacklistedHash { - t.Errorf("error mismatch: have: %v, want: %v", err, ErrBlacklistedHash) + if !errors.Is(err, ErrBannedHash) { + t.Errorf("error mismatch: have: %v, want: %v", err, ErrBannedHash) } } @@ -509,7 +658,11 @@ func testReorgBadHashes(t *testing.T, full bool) { blockchain.Stop() // Create a new BlockChain and check that it rolled back the state. - ncm, err := NewBlockChain(blockchain.db, nil, blockchain.chainConfig, ethash.NewFaker(), vm.Config{}, nil) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.AllEthashProtocolChanges, + } + ncm, err := NewBlockChain(blockchain.db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create new chain manager: %v", err) } @@ -592,13 +745,14 @@ func TestFastVsFullChains(t *testing.T) { gendb = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) - funds = big.NewInt(1000000000) + funds = big.NewInt(1000000000000000) gspec = &Genesis{ - Config: params.TestChainConfig, - Alloc: GenesisAlloc{address: {Balance: funds}}, + Config: params.TestChainConfig, + Alloc: GenesisAlloc{address: {Balance: funds}}, + BaseFee: big.NewInt(params.InitialBaseFee), } genesis = gspec.MustCommit(gendb) - signer = types.NewEIP155Signer(gspec.Config.ChainID) + signer = types.LatestSigner(gspec.Config) ) blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, 1024, func(i int, block *BlockGen) { block.SetCoinbase(common.Address{0x00}) @@ -606,22 +760,22 @@ func TestFastVsFullChains(t *testing.T) { // If the block number is multiple of 3, send a few bonus transactions to the miner if i%3 == 2 { for j := 0; j < i%4+1; j++ { - tx, err := types.SignTx(types.NewTransaction(block.TxNonce(address), common.Address{0x00}, big.NewInt(1000), params.TxGas, nil, nil), signer, key) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(address), common.Address{0x00}, big.NewInt(1000), params.TxGas, block.header.BaseFee, nil), signer, key) if err != nil { panic(err) } block.AddTx(tx) } } - // If the block number is a multiple of 5, add a few bonus uncles to the block - if i%5 == 5 { - block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 1).Hash(), Number: big.NewInt(int64(i - 1))}) + // If the block number is a multiple of 5, add an uncle to the block + if i%5 == 4 { + block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 2).Hash(), Number: big.NewInt(int64(i))}) } }) // Import the chain as an archive node for the comparison baseline archiveDb := rawdb.NewMemoryDatabase() gspec.MustCommit(archiveDb) - archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + archive, _ := NewBlockChain(archiveDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer archive.Stop() if n, err := archive.InsertChain(blocks); err != nil { @@ -630,7 +784,7 @@ func TestFastVsFullChains(t *testing.T) { // Fast import the chain as a non-archive node to test fastDb := rawdb.NewMemoryDatabase() gspec.MustCommit(fastDb) - fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + fast, _ := NewBlockChain(fastDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer fast.Stop() headers := make([]*types.Header, len(blocks)) @@ -644,17 +798,14 @@ func TestFastVsFullChains(t *testing.T) { 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, "") + frdir := t.TempDir() + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) if err != nil { t.Fatalf("failed to create temp freezer db: %v", err) } + defer ancientDb.Close() gspec.MustCommit(ancientDb) - ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + ancient, _ := NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer ancient.Stop() if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { @@ -663,14 +814,15 @@ func TestFastVsFullChains(t *testing.T) { 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 for i := 0; i < len(blocks); i++ { num, hash := blocks[i].NumberU64(), blocks[i].Hash() - if ftd, atd := fast.GetTdByHash(hash), archive.GetTdByHash(hash); ftd.Cmp(atd) != 0 { + if ftd, atd := fast.GetTd(hash, num), archive.GetTd(hash, num); ftd.Cmp(atd) != 0 { 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 { + if antd, artd := ancient.GetTd(hash, num), archive.GetTd(hash, num); 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() { @@ -681,15 +833,32 @@ func TestFastVsFullChains(t *testing.T) { } 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()) { + } else if types.DeriveSha(fblock.Transactions(), trie.NewStackTrie(nil)) != types.DeriveSha(arblock.Transactions(), trie.NewStackTrie(nil)) || types.DeriveSha(anblock.Transactions(), trie.NewStackTrie(nil)) != types.DeriveSha(arblock.Transactions(), trie.NewStackTrie(nil)) { 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) { + + // Check receipts. + freceipts := rawdb.ReadReceipts(fastDb, hash, num, fast.Config()) + anreceipts := rawdb.ReadReceipts(ancientDb, hash, num, fast.Config()) + areceipts := rawdb.ReadReceipts(archiveDb, hash, num, fast.Config()) + if types.DeriveSha(freceipts, trie.NewStackTrie(nil)) != types.DeriveSha(areceipts, trie.NewStackTrie(nil)) { t.Errorf("block #%d [%x]: receipts mismatch: fastdb %v, ancientdb %v, archivedb %v", num, hash, freceipts, anreceipts, areceipts) } + + // Check that hash-to-number mappings are present in all databases. + if m := rawdb.ReadHeaderNumber(fastDb, hash); m == nil || *m != num { + t.Errorf("block #%d [%x]: wrong hash-to-number mapping in fastdb: %v", num, hash, m) + } + if m := rawdb.ReadHeaderNumber(ancientDb, hash); m == nil || *m != num { + t.Errorf("block #%d [%x]: wrong hash-to-number mapping in ancientdb: %v", num, hash, m) + } + if m := rawdb.ReadHeaderNumber(archiveDb, hash); m == nil || *m != num { + t.Errorf("block #%d [%x]: wrong hash-to-number mapping in archivedb: %v", num, hash, m) + } } + // 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 { @@ -709,34 +878,34 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { 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}}} + funds = big.NewInt(1000000000000000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{address: {Balance: funds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } genesis = gspec.MustCommit(gendb) ) 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, "") + makeDb := func() ethdb.Database { + dir := t.TempDir() + db, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), dir, "", false) if err != nil { t.Fatalf("failed to create temp freezer db: %v", err) } gspec.MustCommit(db) - return db, func() { os.RemoveAll(dir) } + return db } // Configure a subchain to roll back - remove := []common.Hash{} - for _, block := range blocks[height/2:] { - remove = append(remove, block.Hash()) - } + remove := blocks[height/2].NumberU64() + // Create a small assertion method to check the three heads assert := func(t *testing.T, kind string, chain *BlockChain, header uint64, fast uint64, block uint64) { + t.Helper() + if num := chain.CurrentBlock().NumberU64(); num != block { t.Errorf("%s head block mismatch: have #%v, want #%v", kind, num, block) } @@ -748,22 +917,26 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { } } // Import the chain as an archive node and ensure all pointers are updated - archiveDb, delfn := makeDb() - defer delfn() - archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + archiveDb := makeDb() + defer archiveDb.Close() + + archiveCaching := *defaultCacheConfig + archiveCaching.TrieDirtyDisabled = true + + archive, _ := NewBlockChain(archiveDb, &archiveCaching, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) if n, err := archive.InsertChain(blocks); err != nil { t.Fatalf("failed to process block %d: %v", n, err) } defer archive.Stop() assert(t, "archive", archive, height, height, height) - archive.Rollback(remove) + archive.SetHead(remove - 1) 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, delfn := makeDb() - defer delfn() - fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + fastDb := makeDb() + defer fastDb.Close() + fast, _ := NewBlockChain(fastDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer fast.Stop() headers := make([]*types.Header, len(blocks)) @@ -777,13 +950,13 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { t.Fatalf("failed to insert receipt %d: %v", n, err) } assert(t, "fast", fast, height, height, 0) - fast.Rollback(remove) + fast.SetHead(remove - 1) assert(t, "fast", fast, height/2, height/2, 0) // 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) + ancientDb := makeDb() + defer ancientDb.Close() + ancient, _ := NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer ancient.Stop() if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { @@ -793,23 +966,23 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { 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) - } + ancient.SetHead(remove - 1) + assert(t, "ancient", ancient, 0, 0, 0) + if frozen, err := ancientDb.Ancients(); err != nil || frozen != 1 { + t.Fatalf("failed to truncate ancient store, want %v, have %v", 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) + lightDb := makeDb() + defer lightDb.Close() + light, _ := NewBlockChain(lightDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) if n, err := light.InsertHeaderChain(headers, 1); err != nil { t.Fatalf("failed to insert header %d: %v", n, err) } defer light.Stop() assert(t, "light", light, height, 0, 0) - light.Rollback(remove) + light.SetHead(remove - 1) assert(t, "light", light, height/2, 0, 0) } @@ -827,20 +1000,20 @@ func TestChainTxReorgs(t *testing.T) { Config: params.TestChainConfig, GasLimit: 3141592, Alloc: GenesisAlloc{ - addr1: {Balance: big.NewInt(1000000)}, - addr2: {Balance: big.NewInt(1000000)}, - addr3: {Balance: big.NewInt(1000000)}, + addr1: {Balance: big.NewInt(1000000000000000)}, + addr2: {Balance: big.NewInt(1000000000000000)}, + addr3: {Balance: big.NewInt(1000000000000000)}, }, } genesis = gspec.MustCommit(db) - signer = types.NewEIP155Signer(gspec.Config.ChainID) + signer = types.LatestSigner(gspec.Config) ) // Create two transactions shared between the chains: // - postponed: transaction included at a later block in the forked chain // - swapped: transaction included at the same block number in the forked chain - postponed, _ := types.SignTx(types.NewTransaction(0, addr1, big.NewInt(1000), params.TxGas, nil, nil), signer, key1) - swapped, _ := types.SignTx(types.NewTransaction(1, addr1, big.NewInt(1000), params.TxGas, nil, nil), signer, key1) + postponed, _ := types.SignTx(types.NewTransaction(0, addr1, big.NewInt(1000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, key1) + swapped, _ := types.SignTx(types.NewTransaction(1, addr1, big.NewInt(1000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, key1) // Create two transactions that will be dropped by the forked chain: // - pastDrop: transaction dropped retroactively from a past block @@ -856,13 +1029,13 @@ func TestChainTxReorgs(t *testing.T) { chain, _ := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 3, func(i int, gen *BlockGen) { switch i { case 0: - pastDrop, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr2), addr2, big.NewInt(1000), params.TxGas, nil, nil), signer, key2) + pastDrop, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr2), addr2, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key2) gen.AddTx(pastDrop) // This transaction will be dropped in the fork from below the split point gen.AddTx(postponed) // This transaction will be postponed till block #3 in the fork case 2: - freshDrop, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr2), addr2, big.NewInt(1000), params.TxGas, nil, nil), signer, key2) + freshDrop, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr2), addr2, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key2) gen.AddTx(freshDrop) // This transaction will be dropped in the fork from exactly at the split point gen.AddTx(swapped) // This transaction will be swapped out at the exact height @@ -871,7 +1044,7 @@ func TestChainTxReorgs(t *testing.T) { } }) // Import the chain. This runs all block validation rules. - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) if i, err := blockchain.InsertChain(chain); err != nil { t.Fatalf("failed to insert original chain[%d]: %v", i, err) } @@ -881,18 +1054,18 @@ func TestChainTxReorgs(t *testing.T) { chain, _ = GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 5, func(i int, gen *BlockGen) { switch i { case 0: - pastAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, nil, nil), signer, key3) + pastAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key3) gen.AddTx(pastAdd) // This transaction needs to be injected during reorg case 2: gen.AddTx(postponed) // This transaction was postponed from block #1 in the original chain gen.AddTx(swapped) // This transaction was swapped from the exact current spot in the original chain - freshAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, nil, nil), signer, key3) + freshAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key3) gen.AddTx(freshAdd) // This transaction will be added exactly at reorg time case 3: - futureAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, nil, nil), signer, key3) + futureAdd, _ = types.SignTx(types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key3) gen.AddTx(futureAdd) // This transaction will be added after a full reorg } }) @@ -936,19 +1109,19 @@ func TestLogReorgs(t *testing.T) { db = rawdb.NewMemoryDatabase() // this code generates a log code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") - gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000000)}}} genesis = gspec.MustCommit(db) - signer = types.NewEIP155Signer(gspec.Config.ChainID) + signer = types.LatestSigner(gspec.Config) ) - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer blockchain.Stop() 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) + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, gen.header.BaseFee, code), signer, key1) if err != nil { t.Fatalf("failed to create tx: %v", err) } @@ -960,206 +1133,127 @@ func TestLogReorgs(t *testing.T) { } chain, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 3, func(i int, gen *BlockGen) {}) + done := make(chan struct{}) + go func() { + ev := <-rmLogsCh + if len(ev.Logs) == 0 { + t.Error("expected logs") + } + close(done) + }() if _, err := blockchain.InsertChain(chain); err != nil { t.Fatalf("failed to insert forked chain: %v", err) } - timeout := time.NewTimer(1 * time.Second) + defer timeout.Stop() select { - case ev := <-rmLogsCh: - if len(ev.Logs) == 0 { - t.Error("expected logs") - } + case <-done: case <-timeout.C: t.Fatal("Timeout. There is no RemovedLogsEvent has been sent.") } } +// This EVM code generates a log when the contract is created. +var logCode = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + +// This test checks that log events and RemovedLogsEvent are sent +// when the chain reorganizes. 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) + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000000)}}} + genesis = gspec.MustCommit(db) + signer = types.LatestSigner(gspec.Config) + engine = ethash.NewFaker() + blockchain, _ = NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, nil) ) - // 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) + // The event channels. + newLogCh := make(chan []*types.Log, 10) + rmLogsCh := make(chan RemovedLogsEvent, 10) + blockchain.SubscribeLogsEvent(newLogCh) blockchain.SubscribeRemovedLogsEvent(rmLogsCh) - chain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + // This chain contains a single log. + chain, _ := GenerateChain(params.TestChainConfig, genesis, engine, 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) + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, gen.header.BaseFee, logCode), 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") - } + checkLogEvents(t, newLogCh, rmLogsCh, 1, 0) - // Generate long reorg chain - forkChain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + // Generate long reorg chain containing another log. Inserting the + // chain removes one log and adds one. + forkChain, _ := GenerateChain(params.TestChainConfig, genesis, engine, 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) + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, gen.header.BaseFee, logCode), signer, key1) if err != nil { t.Fatalf("failed to create tx: %v", err) } gen.AddTx(tx) - // Higher block difficulty - gen.OffsetTime(-9) + gen.OffsetTime(-9) // higher block difficulty } }) - - // 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.") - } + checkLogEvents(t, newLogCh, rmLogsCh, 1, 1) - newBlocks, _ := GenerateChain(params.TestChainConfig, chain[len(chain)-1], ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) - go listenNewLog(logsCh, 1) + // This chain segment is rooted in the original chain, but doesn't contain any logs. + // When inserting it, the canonical chain switches away from forkChain and re-emits + // the log event for the old chain, as well as a RemovedLogsEvent for forkChain. + newBlocks, _ := GenerateChain(params.TestChainConfig, chain[len(chain)-1], engine, db, 1, func(i int, gen *BlockGen) {}) 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") - } + checkLogEvents(t, newLogCh, rmLogsCh, 1, 1) } +// This test is a variation of TestLogRebirth. It verifies that log events are emitted +// when a side chain containing log events overtakes the canonical chain. 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) + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000000)}}} + genesis = gspec.MustCommit(db) + signer = types.LatestSigner(gspec.Config) + blockchain, _ = NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) ) - // 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) + newLogCh := make(chan []*types.Log, 10) + rmLogsCh := make(chan RemovedLogsEvent, 10) + blockchain.SubscribeLogsEvent(newLogCh) + blockchain.SubscribeRemovedLogsEvent(rmLogsCh) chain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { if i == 1 { - // Higher block difficulty - gen.OffsetTime(-9) + gen.OffsetTime(-9) // higher block difficulty } }) if _, err := blockchain.InsertChain(chain); err != nil { t.Fatalf("failed to insert forked chain: %v", err) } + checkLogEvents(t, newLogCh, rmLogsCh, 0, 0) // 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) + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, gen.header.BaseFee, logCode), signer, key1) if err != nil { t.Fatalf("failed to create tx: %v", err) } @@ -1169,16 +1263,31 @@ func TestSideLogRebirth(t *testing.T) { if _, err := blockchain.InsertChain(sideChain); err != nil { t.Fatalf("failed to insert forked chain: %v", err) } + checkLogEvents(t, newLogCh, rmLogsCh, 0, 0) - // Generate a new block based on side chain + // 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") + checkLogEvents(t, newLogCh, rmLogsCh, 1, 0) +} + +func checkLogEvents(t *testing.T, logsCh <-chan []*types.Log, rmLogsCh <-chan RemovedLogsEvent, wantNew, wantRemoved int) { + t.Helper() + + if len(logsCh) != wantNew { + t.Fatalf("wrong number of log events: got %d, want %d", len(logsCh), wantNew) + } + if len(rmLogsCh) != wantRemoved { + t.Fatalf("wrong number of removed log events: got %d, want %d", len(rmLogsCh), wantRemoved) + } + // Drain events. + for i := 0; i < len(logsCh); i++ { + <-logsCh + } + for i := 0; i < len(rmLogsCh); i++ { + <-rmLogsCh } } @@ -1189,13 +1298,13 @@ func TestReorgSideEvent(t *testing.T) { addr1 = crypto.PubkeyToAddress(key1.PublicKey) gspec = &Genesis{ Config: params.TestChainConfig, - Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}, + Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000000)}}, } genesis = gspec.MustCommit(db) - signer = types.NewEIP155Signer(gspec.Config.ChainID) + signer = types.LatestSigner(gspec.Config) ) - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer blockchain.Stop() chain, _ := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 3, func(i int, gen *BlockGen) {}) @@ -1204,7 +1313,7 @@ func TestReorgSideEvent(t *testing.T) { } replacementBlocks, _ := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 4, func(i int, gen *BlockGen) { - tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, new(big.Int), nil), signer, key1) + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, gen.header.BaseFee, nil), signer, key1) if i == 2 { gen.OffsetTime(-9) } @@ -1262,7 +1371,6 @@ done: t.Errorf("unexpected event fired: %v", e) case <-time.After(250 * time.Millisecond): } - } // Tests if the canonical block can be fetched from the database during chain insertion. @@ -1289,14 +1397,17 @@ func TestCanonicalBlockRetrieval(t *testing.T) { continue // busy wait for canonical hash to be written } if ch != block.Hash() { - t.Fatalf("unknown canonical hash, want %s, got %s", block.Hash().Hex(), ch.Hex()) + t.Errorf("unknown canonical hash, want %s, got %s", block.Hash().Hex(), ch.Hex()) + return } fb := rawdb.ReadBlock(blockchain.db, ch, block.NumberU64()) if fb == nil { - t.Fatalf("unable to retrieve block %d for canonical hash: %s", block.NumberU64(), ch.Hex()) + t.Errorf("unable to retrieve block %d for canonical hash: %s", block.NumberU64(), ch.Hex()) + return } if fb.Hash() != block.Hash() { - t.Fatalf("invalid block hash for block %d, want %s, got %s", block.NumberU64(), block.Hash().Hex(), fb.Hash().Hex()) + t.Errorf("invalid block hash for block %d, want %s, got %s", block.NumberU64(), block.Hash().Hex(), fb.Hash().Hex()) + return } return } @@ -1318,13 +1429,13 @@ func TestEIP155Transition(t *testing.T) { funds = big.NewInt(1000000000) deleteAddr = common.Address{1} gspec = &Genesis{ - Config: ¶ms.ChainConfig{ChainID: big.NewInt(1), EIP155Block: big.NewInt(2), HomesteadBlock: new(big.Int)}, + Config: ¶ms.ChainConfig{ChainID: big.NewInt(1), EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(2), HomesteadBlock: new(big.Int)}, Alloc: GenesisAlloc{address: {Balance: funds}, deleteAddr: {Balance: new(big.Int)}}, } genesis = gspec.MustCommit(db) ) - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer blockchain.Stop() blocks, _ := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 4, func(i int, block *BlockGen) { @@ -1349,7 +1460,7 @@ func TestEIP155Transition(t *testing.T) { } block.AddTx(tx) - tx, err = basicTx(types.NewEIP155Signer(gspec.Config.ChainID)) + tx, err = basicTx(types.LatestSigner(gspec.Config)) if err != nil { t.Fatal(err) } @@ -1361,7 +1472,7 @@ func TestEIP155Transition(t *testing.T) { } block.AddTx(tx) - tx, err = basicTx(types.NewEIP155Signer(gspec.Config.ChainID)) + tx, err = basicTx(types.LatestSigner(gspec.Config)) if err != nil { t.Fatal(err) } @@ -1389,7 +1500,7 @@ func TestEIP155Transition(t *testing.T) { } // generate an invalid chain id transaction - config := ¶ms.ChainConfig{ChainID: big.NewInt(2), EIP155Block: big.NewInt(2), HomesteadBlock: new(big.Int)} + config := ¶ms.ChainConfig{ChainID: big.NewInt(2), EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(2), HomesteadBlock: new(big.Int)} blocks, _ = GenerateChain(config, blocks[len(blocks)-1], ethash.NewFaker(), db, 4, func(i int, block *BlockGen) { var ( tx *types.Transaction @@ -1399,7 +1510,7 @@ func TestEIP155Transition(t *testing.T) { } ) if i == 0 { - tx, err = basicTx(types.NewEIP155Signer(big.NewInt(2))) + tx, err = basicTx(types.LatestSigner(config)) if err != nil { t.Fatal(err) } @@ -1407,8 +1518,8 @@ func TestEIP155Transition(t *testing.T) { } }) _, err := blockchain.InsertChain(blocks) - if err != types.ErrInvalidChainId { - t.Error("expected error:", types.ErrInvalidChainId) + if have, want := err, types.ErrInvalidChainId; !errors.Is(have, want) { + t.Errorf("have %v, want %v", have, want) } } @@ -1425,20 +1536,21 @@ func TestEIP161AccountRemoval(t *testing.T) { ChainID: big.NewInt(1), HomesteadBlock: new(big.Int), EIP155Block: new(big.Int), + EIP150Block: new(big.Int), EIP158Block: big.NewInt(2), }, Alloc: GenesisAlloc{address: {Balance: funds}}, } genesis = gspec.MustCommit(db) ) - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer blockchain.Stop() blocks, _ := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 3, func(i int, block *BlockGen) { var ( tx *types.Transaction err error - signer = types.NewEIP155Signer(gspec.Config.ChainID) + signer = types.LatestSigner(gspec.Config) ) switch i { case 0: @@ -1469,7 +1581,7 @@ func TestEIP161AccountRemoval(t *testing.T) { t.Error("account should not exist") } - // account musn't be created post eip 161 + // account mustn't be created post eip 161 if _, err := blockchain.InsertChain(types.Blocks{blocks[2]}); err != nil { t.Fatal(err) } @@ -1482,13 +1594,17 @@ func TestEIP161AccountRemoval(t *testing.T) { // tests that under weird reorg conditions the blockchain and its internal header- // chain return the same latest block/header. // -// https://github.com/cryptoecc/ETH-ECC/pull/15941 +// https://github.com/ethereum/go-ethereum/pull/15941 func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + Config: params.TestChainConfig, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis := gspec.MustCommit(db) blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) // Generate a bunch of fork blocks, each side forking from the canonical chain @@ -1504,9 +1620,9 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { // Import the canonical and fork chain side by side, verifying the current block // and current header consistency diskdb := rawdb.NewMemoryDatabase() - new(Genesis).MustCommit(diskdb) + (&Genesis{BaseFee: big.NewInt(params.InitialBaseFee)}).MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -1515,13 +1631,13 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { t.Fatalf("block %d: failed to insert into chain: %v", i, err) } if chain.CurrentBlock().Hash() != chain.CurrentHeader().Hash() { - t.Errorf("block %d: current block/header mismatch: block #%d [%x…], header #%d [%x…]", i, chain.CurrentBlock().Number(), chain.CurrentBlock().Hash().Bytes()[:4], chain.CurrentHeader().Number, chain.CurrentHeader().Hash().Bytes()[:4]) + t.Errorf("block %d: current block/header mismatch: block #%d [%x..], header #%d [%x..]", i, chain.CurrentBlock().Number(), chain.CurrentBlock().Hash().Bytes()[:4], chain.CurrentHeader().Number, chain.CurrentHeader().Hash().Bytes()[:4]) } if _, err := chain.InsertChain(forks[i : i+1]); err != nil { t.Fatalf(" fork %d: failed to insert into chain: %v", i, err) } if chain.CurrentBlock().Hash() != chain.CurrentHeader().Hash() { - t.Errorf(" fork %d: current block/header mismatch: block #%d [%x…], header #%d [%x…]", i, chain.CurrentBlock().Number(), chain.CurrentBlock().Hash().Bytes()[:4], chain.CurrentHeader().Number, chain.CurrentHeader().Hash().Bytes()[:4]) + t.Errorf(" fork %d: current block/header mismatch: block #%d [%x..], header #%d [%x..]", i, chain.CurrentBlock().Number(), chain.CurrentBlock().Hash().Bytes()[:4], chain.CurrentHeader().Number, chain.CurrentHeader().Hash().Bytes()[:4]) } } } @@ -1533,7 +1649,11 @@ func TestTrieForkGC(t *testing.T) { engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + } + genesis := gspec.MustCommit(db) 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 @@ -1548,9 +1668,9 @@ func TestTrieForkGC(t *testing.T) { } // Import the canonical and fork chain side by side, forcing the trie cache to cache both diskdb := rawdb.NewMemoryDatabase() - new(Genesis).MustCommit(diskdb) + gspec.MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -1579,7 +1699,11 @@ func TestLargeReorgTrieGC(t *testing.T) { engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + } + genesis := gspec.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}) }) @@ -1587,9 +1711,9 @@ func TestLargeReorgTrieGC(t *testing.T) { // Import the shared chain and the original canonical one diskdb := rawdb.NewMemoryDatabase() - new(Genesis).MustCommit(diskdb) + gspec.MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -1639,17 +1763,15 @@ func TestBlockchainRecovery(t *testing.T) { 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, "") + frdir := t.TempDir() + + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) if err != nil { t.Fatalf("failed to create temp freezer db: %v", err) } + defer ancientDb.Close() gspec.MustCommit(ancientDb) - ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + ancient, _ := NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) headers := make([]*types.Header, len(blocks)) for i, block := range blocks { @@ -1661,6 +1783,7 @@ func TestBlockchainRecovery(t *testing.T) { if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(3*len(blocks)/4)); err != nil { t.Fatalf("failed to insert receipt %d: %v", n, err) } + rawdb.WriteLastPivotNumber(ancientDb, blocks[len(blocks)-1].NumberU64()) // Force fast sync behavior ancient.Stop() // Destroy head fast block manually @@ -1668,7 +1791,7 @@ func TestBlockchainRecovery(t *testing.T) { rawdb.WriteHeadFastBlockHash(ancientDb, midBlock.Hash()) // Reopen broken blockchain again - ancient, _ = NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + ancient, _ = NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer ancient.Stop() if num := ancient.CurrentBlock().NumberU64(); num != 0 { t.Errorf("head block mismatch: have #%v, want #%v", num, 0) @@ -1681,61 +1804,77 @@ func TestBlockchainRecovery(t *testing.T) { } } -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("", "") +// This test checks that InsertReceiptChain will roll back correctly when attempting to insert a side chain. +func TestInsertReceiptChainRollback(t *testing.T) { + // Generate forked chain. The returned BlockChain object is used to process the side chain blocks. + tmpChain, sideblocks, canonblocks, err := getLongAndShortChains() if err != nil { - t.Fatalf("failed to create temp freezer dir: %v", err) + t.Fatal(err) } - defer os.Remove(frdir) - ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "") + defer tmpChain.Stop() + // Get the side chain receipts. + if _, err := tmpChain.InsertChain(sideblocks); err != nil { + t.Fatal("processing side chain failed:", err) + } + t.Log("sidechain head:", tmpChain.CurrentBlock().Number(), tmpChain.CurrentBlock().Hash()) + sidechainReceipts := make([]types.Receipts, len(sideblocks)) + for i, block := range sideblocks { + sidechainReceipts[i] = tmpChain.GetReceiptsByHash(block.Hash()) + } + // Get the canon chain receipts. + if _, err := tmpChain.InsertChain(canonblocks); err != nil { + t.Fatal("processing canon chain failed:", err) + } + t.Log("canon head:", tmpChain.CurrentBlock().Number(), tmpChain.CurrentBlock().Hash()) + canonReceipts := make([]types.Receipts, len(canonblocks)) + for i, block := range canonblocks { + canonReceipts[i] = tmpChain.GetReceiptsByHash(block.Hash()) + } + + // Set up a BlockChain that uses the ancient store. + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), t.TempDir(), "", false) if err != nil { t.Fatalf("failed to create temp freezer db: %v", err) } + defer ancientDb.Close() + + gspec := Genesis{Config: params.AllEthashProtocolChanges} gspec.MustCommit(ancientDb) - ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) - defer ancient.Stop() + ancientChain, _ := NewBlockChain(ancientDb, nil, &gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + defer ancientChain.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) + // Import the canonical header chain. + canonHeaders := make([]*types.Header, len(canonblocks)) + for i, block := range canonblocks { + canonHeaders[i] = block.Header() } - // Abort ancient receipt chain insertion deliberately - ancient.terminateInsert = func(hash common.Hash, number uint64) bool { - return number == blocks[len(blocks)/2].NumberU64() + if _, err = ancientChain.InsertHeaderChain(canonHeaders, 1); err != nil { + t.Fatal("can't import canon headers:", err) } - 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) + + // Try to insert blocks/receipts of the side chain. + _, err = ancientChain.InsertReceiptChain(sideblocks, sidechainReceipts, uint64(len(sideblocks))) + if err == nil { + t.Fatal("expected error from InsertReceiptChain.") } - if ancient.CurrentFastBlock().NumberU64() != previousFastBlock.NumberU64() { - t.Fatalf("failed to rollback ancient data, want %d, have %d", previousFastBlock.NumberU64(), ancient.CurrentFastBlock().NumberU64()) + if ancientChain.CurrentFastBlock().NumberU64() != 0 { + t.Fatalf("failed to rollback ancient data, want %d, have %d", 0, ancientChain.CurrentFastBlock().NumberU64()) } - if frozen, err := ancient.db.Ancients(); err != nil || frozen != 1 { - t.Fatalf("failed to truncate ancient data") + if frozen, err := ancientChain.db.Ancients(); err != nil || frozen != 1 { + t.Fatalf("failed to truncate ancient data, frozen index is %d", frozen) } - 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) + + // Insert blocks/receipts of the canonical chain. + _, err = ancientChain.InsertReceiptChain(canonblocks, canonReceipts, uint64(len(canonblocks))) + if err != nil { + t.Fatalf("can't import canon chain receipts: %v", err) } - if ancient.CurrentFastBlock().NumberU64() != blocks[len(blocks)-1].NumberU64() { + if ancientChain.CurrentFastBlock().NumberU64() != canonblocks[len(canonblocks)-1].NumberU64() { t.Fatalf("failed to insert ancient recept chain after rollback") } + if frozen, _ := ancientChain.db.Ancients(); frozen != uint64(len(canonblocks))+1 { + t.Fatalf("wrong ancients count %d", frozen) + } } // Tests that importing a very large side fork, which is larger than the canon chain, @@ -1743,13 +1882,17 @@ func TestIncompleteAncientReceiptChainInsertion(t *testing.T) { // overtake the 'canon' chain until after it's passed canon by about 200 blocks. // // Details at: -// - https://github.com/cryptoecc/ETH-ECC/issues/18977 -// - https://github.com/cryptoecc/ETH-ECC/pull/18988 +// - 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) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + } + genesis := gspec.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 @@ -1760,9 +1903,9 @@ func TestLowDiffLongChain(t *testing.T) { // Import the canonical chain diskdb := rawdb.NewMemoryDatabase() - new(Genesis).MustCommit(diskdb) + gspec.MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -1798,24 +1941,59 @@ func TestLowDiffLongChain(t *testing.T) { // - 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) { - +// +// The mergePoint can be these values: +// -1: the transition won't happen +// 0: the transition happens since genesis +// 1: the transition happens after some chain segments +func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommonAncestorAndPruneblock int, mergePoint int) { + // Copy the TestChainConfig so we can modify it during tests + chainConfig := *params.TestChainConfig // Generate a canonical chain to act as the main dataset - engine := ethash.NewFaker() - db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + var ( + merger = consensus.NewMerger(rawdb.NewMemoryDatabase()) + genEngine = beacon.New(ethash.NewFaker()) + runEngine = beacon.New(ethash.NewFaker()) + db = rawdb.NewMemoryDatabase() + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr = crypto.PubkeyToAddress(key.PublicKey) + nonce = uint64(0) + + gspec = &Genesis{ + Config: &chainConfig, + Alloc: GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + signer = types.LatestSigner(gspec.Config) + genesis = gspec.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) + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, runEngine, vm.Config{}, nil, 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) - } + // Activate the transition since genesis if required + if mergePoint == 0 { + merger.ReachTTD() + merger.FinalizePoS() + + // Set the terminal total difficulty in the config + gspec.Config.TerminalTotalDifficulty = big.NewInt(0) + } + blocks, _ := GenerateChain(&chainConfig, genesis, genEngine, db, 2*TriesInMemory, func(i int, gen *BlockGen) { + tx, err := types.SignTx(types.NewTransaction(nonce, common.HexToAddress("deadbeef"), big.NewInt(100), 21000, big.NewInt(int64(i+1)*params.GWei), nil), signer, key) + if err != nil { + t.Fatalf("failed to create tx: %v", err) + } + gen.AddTx(tx) + nonce++ + }) + 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] @@ -1829,6 +2007,15 @@ func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommon if !chain.HasBlockAndState(firstNonPrunedBlock.Hash(), firstNonPrunedBlock.NumberU64()) { t.Errorf("Block %d pruned", firstNonPrunedBlock.NumberU64()) } + + // Activate the transition in the middle of the chain + if mergePoint == 1 { + merger.ReachTTD() + merger.FinalizePoS() + // Set the terminal total difficulty in the config + gspec.Config.TerminalTotalDifficulty = big.NewInt(int64(len(blocks))) + } + // Generate the sidechain // First block should be a known block, block after should be a pruned block. So // canon(pruned), side, side... @@ -1836,7 +2023,7 @@ func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommon // 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) { + fork, _ := GenerateChain(&chainConfig, parent, genEngine, db, 2*TriesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{2}) }) // Prepend the parent(s) @@ -1845,9 +2032,9 @@ func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommon sidechain = append(sidechain, blocks[parentIndex+1-i]) } sidechain = append(sidechain, fork...) - _, err = chain.InsertChain(sidechain) + n, err := chain.InsertChain(sidechain) if err != nil { - t.Errorf("Got error, %v", err) + t.Errorf("Got error, %v number %d - %d", err, sidechain[n].NumberU64(), n) } head := chain.CurrentBlock() if got := fork[len(fork)-1].Hash(); got != head.Hash() { @@ -1868,11 +2055,28 @@ 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) + testSideImport(t, 3, 3, -1) + testSideImport(t, 3, -3, -1) + testSideImport(t, 10, 0, -1) + testSideImport(t, 1, 10, -1) + testSideImport(t, 1, -10, -1) +} + +func TestPrunedImportSideWithMerging(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, 0) + testSideImport(t, 3, -3, 0) + testSideImport(t, 10, 0, 0) + testSideImport(t, 1, 10, 0) + testSideImport(t, 1, -10, 0) + + testSideImport(t, 3, 3, 1) + testSideImport(t, 3, -3, 1) + testSideImport(t, 10, 0, 1) + testSideImport(t, 1, 10, 1) + testSideImport(t, 1, -10, 1) } func TestInsertKnownHeaders(t *testing.T) { testInsertKnownChainData(t, "headers") } @@ -1883,7 +2087,11 @@ func testInsertKnownChainData(t *testing.T, typ string) { engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + Config: params.TestChainConfig, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis := gspec.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. @@ -1894,19 +2102,14 @@ func testInsertKnownChainData(t *testing.T, typ string) { 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, "") + chaindb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), t.TempDir(), "", false) if err != nil { t.Fatalf("failed to create temp freezer db: %v", err) } - new(Genesis).MustCommit(chaindb) - defer os.RemoveAll(dir) + gspec.MustCommit(chaindb) + defer chaindb.Close() - chain, err := NewBlockChain(chaindb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(chaindb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -1915,13 +2118,6 @@ func testInsertKnownChainData(t *testing.T, typ string) { 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)) @@ -1978,11 +2174,9 @@ func testInsertKnownChainData(t *testing.T, typ string) { 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) + rollback := blocks[len(blocks)/2].NumberU64() + + chain.SetHead(rollback - 1) if err := inserter(append(blocks, blocks2...), append(receipts, receipts2...)); err != nil { t.Fatalf("failed to insert chain data: %v", err) } @@ -2002,34 +2196,206 @@ func testInsertKnownChainData(t *testing.T, typ string) { 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.SetHead(rollback - 1) + 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]) +} + +func TestInsertKnownHeadersWithMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "headers", 0) +} +func TestInsertKnownReceiptChainWithMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "receipts", 0) +} +func TestInsertKnownBlocksWithMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "blocks", 0) +} +func TestInsertKnownHeadersAfterMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "headers", 1) +} +func TestInsertKnownReceiptChainAfterMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "receipts", 1) +} +func TestInsertKnownBlocksAfterMerging(t *testing.T) { + testInsertKnownChainDataWithMerging(t, "blocks", 1) +} + +// mergeHeight can be assigned in these values: +// 0: means the merging is applied since genesis +// 1: means the merging is applied after the first segment +func testInsertKnownChainDataWithMerging(t *testing.T, typ string, mergeHeight int) { + // Copy the TestChainConfig so we can modify it during tests + chainConfig := *params.TestChainConfig + var ( + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: &chainConfig, + } + genesis = gspec.MustCommit(db) + runMerger = consensus.NewMerger(db) + runEngine = beacon.New(ethash.NewFaker()) + genEngine = beacon.New(ethash.NewFaker()) + ) + applyMerge := func(engine *beacon.Beacon, height int) { + if engine != nil { + runMerger.FinalizePoS() + // Set the terminal total difficulty in the config + chainConfig.TerminalTotalDifficulty = big.NewInt(int64(height)) + } + } + + // Apply merging since genesis + if mergeHeight == 0 { + applyMerge(genEngine, 0) + } + blocks, receipts := GenerateChain(&chainConfig, genesis, genEngine, db, 32, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) + + // Apply merging after the first segment + if mergeHeight == 1 { + applyMerge(genEngine, len(blocks)) + } + // Longer chain and shorter chain + blocks2, receipts2 := GenerateChain(&chainConfig, blocks[len(blocks)-1], genEngine, db, 65, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) + blocks3, receipts3 := GenerateChain(&chainConfig, blocks[len(blocks)-1], genEngine, db, 64, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + b.OffsetTime(-9) // Time shifted, difficulty shouldn't be changed + }) + + // Import the shared chain and the original canonical one + dir := t.TempDir() + chaindb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), dir, "", false) + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + (&Genesis{BaseFee: big.NewInt(params.InitialBaseFee)}).MustCommit(chaindb) + defer chaindb.Close() + + chain, err := NewBlockChain(chaindb, nil, gspec, nil, runEngine, vm.Config{}, nil, 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) + ) + 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()) + } + } + } + + // Apply merging since genesis if required + if mergeHeight == 0 { + applyMerge(runEngine, 0) + } + 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. + rollback := blocks[len(blocks)/2].NumberU64() + chain.SetHead(rollback - 1) + if err := inserter(blocks, receipts); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + asserter(t, blocks[len(blocks)-1]) + + // Apply merging after the first segment + if mergeHeight == 1 { + applyMerge(runEngine, len(blocks)) + } + + // Import a longer 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) + } + asserter(t, blocks2[len(blocks2)-1]) + + // Import a shorter chain with some known data as prefix. + // The reorg is expected since the fork choice rule is + // already changed. + if err := inserter(append(blocks, blocks3...), append(receipts, receipts3...)); err != nil { + t.Fatalf("failed to insert chain data: %v", err) } - chain.Rollback(rollback) + // The head shouldn't change. + asserter(t, blocks3[len(blocks3)-1]) + // Reimport the longer chain again, the reorg is still expected + chain.SetHead(rollback - 1) 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) { +// getLongAndShortChains returns two chains: A is longer, B is heavier. +func getLongAndShortChains() (bc *BlockChain, longChain []*types.Block, heavyChain []*types.Block, err error) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + } + genesis := gspec.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) { + 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) + gspec.MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { return nil, nil, nil, fmt.Errorf("failed to create tester chain: %v", err) } @@ -2037,10 +2403,13 @@ func getLongAndShortChains() (*BlockChain, []*types.Block, []*types.Block, error // 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) { + heavyChainExt, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 75, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{2}) b.OffsetTime(-9) }) + heavyChain = append(heavyChain, longChain[:parentIndex+1]...) + heavyChain = append(heavyChain, heavyChainExt...) + // Verify that the test is sane var ( longerTd = new(big.Int) @@ -2056,12 +2425,12 @@ func getLongAndShortChains() (*BlockChain, []*types.Block, []*types.Block, error 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) + 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 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 } @@ -2070,6 +2439,7 @@ func getLongAndShortChains() (*BlockChain, []*types.Block, []*types.Block, error // 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 +// 4. The forked block should still be retrievable by hash func TestReorgToShorterRemovesCanonMapping(t *testing.T) { chain, canonblocks, sideblocks, err := getLongAndShortChains() if err != nil { @@ -2079,6 +2449,7 @@ func TestReorgToShorterRemovesCanonMapping(t *testing.T) { t.Fatalf("block %d: failed to insert into chain: %v", n, err) } canonNum := chain.CurrentBlock().NumberU64() + canonHash := chain.CurrentBlock().Hash() _, err = chain.InsertChain(sideblocks) if err != nil { t.Errorf("Got error, %v", err) @@ -2094,6 +2465,12 @@ func TestReorgToShorterRemovesCanonMapping(t *testing.T) { if headerByNum := chain.GetHeaderByNumber(canonNum); headerByNum != nil { t.Errorf("expected header to be gone: %v", headerByNum.Number.Uint64()) } + if blockByHash := chain.GetBlockByHash(canonHash); blockByHash == nil { + t.Errorf("expected block to be present: %x", blockByHash.Hash()) + } + if headerByHash := chain.GetHeaderByHash(canonHash); headerByHash == nil { + t.Errorf("expected header to be present: %x", headerByHash.Hash()) + } } // TestReorgToShorterRemovesCanonMappingHeaderChain is the same scenario @@ -2113,6 +2490,7 @@ func TestReorgToShorterRemovesCanonMappingHeaderChain(t *testing.T) { t.Fatalf("header %d: failed to insert into chain: %v", n, err) } canonNum := chain.CurrentHeader().Number.Uint64() + canonHash := chain.CurrentBlock().Hash() sideHeaders := make([]*types.Header, len(sideblocks)) for i, block := range sideblocks { sideHeaders[i] = block.Header() @@ -2131,6 +2509,225 @@ func TestReorgToShorterRemovesCanonMappingHeaderChain(t *testing.T) { if headerByNum := chain.GetHeaderByNumber(canonNum); headerByNum != nil { t.Errorf("expected header to be gone: %v", headerByNum.Number.Uint64()) } + if blockByHash := chain.GetBlockByHash(canonHash); blockByHash == nil { + t.Errorf("expected block to be present: %x", blockByHash.Hash()) + } + if headerByHash := chain.GetHeaderByHash(canonHash); headerByHash == nil { + t.Errorf("expected header to be present: %x", headerByHash.Hash()) + } +} + +func TestTransactionIndices(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(100000000000000000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{address: {Balance: funds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(gendb) + signer = types.LatestSigner(gspec.Config) + ) + height := uint64(128) + blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), func(i int, block *BlockGen) { + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(address), common.Address{0x00}, big.NewInt(1000), params.TxGas, block.header.BaseFee, nil), signer, key) + if err != nil { + panic(err) + } + block.AddTx(tx) + }) + blocks2, _ := GenerateChain(gspec.Config, blocks[len(blocks)-1], ethash.NewFaker(), gendb, 10, nil) + + check := func(tail *uint64, chain *BlockChain) { + stored := rawdb.ReadTxIndexTail(chain.db) + if tail == nil && stored != nil { + t.Fatalf("Oldest indexded block mismatch, want nil, have %d", *stored) + } + if tail != nil && *stored != *tail { + t.Fatalf("Oldest indexded block mismatch, want %d, have %d", *tail, *stored) + } + if tail != nil { + for i := *tail; i <= chain.CurrentBlock().NumberU64(); i++ { + block := rawdb.ReadBlock(chain.db, rawdb.ReadCanonicalHash(chain.db, i), i) + if block.Transactions().Len() == 0 { + continue + } + for _, tx := range block.Transactions() { + if index := rawdb.ReadTxLookupEntry(chain.db, tx.Hash()); index == nil { + t.Fatalf("Miss transaction indice, number %d hash %s", i, tx.Hash().Hex()) + } + } + } + for i := uint64(0); i < *tail; i++ { + block := rawdb.ReadBlock(chain.db, rawdb.ReadCanonicalHash(chain.db, i), i) + if block.Transactions().Len() == 0 { + continue + } + for _, tx := range block.Transactions() { + if index := rawdb.ReadTxLookupEntry(chain.db, tx.Hash()); index != nil { + t.Fatalf("Transaction indice should be deleted, number %d hash %s", i, tx.Hash().Hex()) + } + } + } + } + } + frdir := t.TempDir() + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(ancientDb) + + // Import all blocks into ancient db + l := uint64(0) + chain, err := NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, &l) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + headers := make([]*types.Header, len(blocks)) + for i, block := range blocks { + headers[i] = block.Header() + } + if n, err := chain.InsertHeaderChain(headers, 0); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + if n, err := chain.InsertReceiptChain(blocks, receipts, 128); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + chain.Stop() + ancientDb.Close() + + // Init block chain with external ancients, check all needed indices has been indexed. + limit := []uint64{0, 32, 64, 128} + for _, l := range limit { + ancientDb, err = rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(ancientDb) + l := l + chain, err = NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, &l) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + time.Sleep(50 * time.Millisecond) // Wait for indices initialisation + var tail uint64 + if l != 0 { + tail = uint64(128) - l + 1 + } + check(&tail, chain) + chain.Stop() + ancientDb.Close() + } + + // Reconstruct a block chain which only reserves HEAD-64 tx indices + ancientDb, err = rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + defer ancientDb.Close() + gspec.MustCommit(ancientDb) + + limit = []uint64{0, 64 /* drop stale */, 32 /* shorten history */, 64 /* extend history */, 0 /* restore all */} + tails := []uint64{0, 67 /* 130 - 64 + 1 */, 100 /* 131 - 32 + 1 */, 69 /* 132 - 64 + 1 */, 0} + for i, l := range limit { + l := l + chain, err = NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, &l) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + chain.InsertChain(blocks2[i : i+1]) // Feed chain a higher block to trigger indices updater. + time.Sleep(50 * time.Millisecond) // Wait for indices initialisation + check(&tails[i], chain) + chain.Stop() + } +} + +func TestSkipStaleTxIndicesInSnapSync(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(100000000000000000) + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{address: {Balance: funds}}} + genesis = gspec.MustCommit(gendb) + signer = types.LatestSigner(gspec.Config) + ) + height := uint64(128) + blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), func(i int, block *BlockGen) { + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(address), common.Address{0x00}, big.NewInt(1000), params.TxGas, block.header.BaseFee, nil), signer, key) + if err != nil { + panic(err) + } + block.AddTx(tx) + }) + + check := func(tail *uint64, chain *BlockChain) { + stored := rawdb.ReadTxIndexTail(chain.db) + if tail == nil && stored != nil { + t.Fatalf("Oldest indexded block mismatch, want nil, have %d", *stored) + } + if tail != nil && *stored != *tail { + t.Fatalf("Oldest indexded block mismatch, want %d, have %d", *tail, *stored) + } + if tail != nil { + for i := *tail; i <= chain.CurrentBlock().NumberU64(); i++ { + block := rawdb.ReadBlock(chain.db, rawdb.ReadCanonicalHash(chain.db, i), i) + if block.Transactions().Len() == 0 { + continue + } + for _, tx := range block.Transactions() { + if index := rawdb.ReadTxLookupEntry(chain.db, tx.Hash()); index == nil { + t.Fatalf("Miss transaction indice, number %d hash %s", i, tx.Hash().Hex()) + } + } + } + for i := uint64(0); i < *tail; i++ { + block := rawdb.ReadBlock(chain.db, rawdb.ReadCanonicalHash(chain.db, i), i) + if block.Transactions().Len() == 0 { + continue + } + for _, tx := range block.Transactions() { + if index := rawdb.ReadTxLookupEntry(chain.db, tx.Hash()); index != nil { + t.Fatalf("Transaction indice should be deleted, number %d hash %s", i, tx.Hash().Hex()) + } + } + } + } + } + + frdir := t.TempDir() + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + defer ancientDb.Close() + gspec.MustCommit(ancientDb) + + // Import all blocks into ancient db, only HEAD-32 indices are kept. + l := uint64(32) + chain, err := NewBlockChain(ancientDb, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, &l) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + headers := make([]*types.Header, len(blocks)) + for i, block := range blocks { + headers[i] = block.Header() + } + if n, err := chain.InsertHeaderChain(headers, 0); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + // The indices before ancient-N(32) should be ignored. After that all blocks should be indexed. + if n, err := chain.InsertReceiptChain(blocks, receipts, 64); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + tail := uint64(32) + check(&tail, chain) } // Benchmarks large blocks with value transfers to non-existing accounts @@ -2140,7 +2737,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in testBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testBankAddress = crypto.PubkeyToAddress(testBankKey.PublicKey) bankFunds = big.NewInt(100000000000000000) - gspec = Genesis{ + gspec = &Genesis{ Config: params.TestChainConfig, Alloc: GenesisAlloc{ testBankAddress: {Balance: bankFunds}, @@ -2162,7 +2759,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in for txi := 0; txi < numTxs; txi++ { uniq := uint64(i*numTxs + txi) recipient := recipientFn(uniq) - tx, err := types.SignTx(types.NewTransaction(uniq, recipient, big.NewInt(1), params.TxGas, big.NewInt(1), nil), signer, testBankKey) + tx, err := types.SignTx(types.NewTransaction(uniq, recipient, big.NewInt(1), params.TxGas, block.header.BaseFee, nil), signer, testBankKey) if err != nil { b.Error(err) } @@ -2178,7 +2775,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in diskdb := rawdb.NewMemoryDatabase() gspec.MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { b.Fatalf("failed to create tester chain: %v", err) } @@ -2189,7 +2786,6 @@ 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) - } } } @@ -2200,7 +2796,7 @@ func BenchmarkBlockChain_1x1000ValueTransferToNonexisting(b *testing.B) { numBlocks = 1 ) recipientFn := func(nonce uint64) common.Address { - return common.BigToAddress(big.NewInt(0).SetUint64(1337 + nonce)) + return common.BigToAddress(new(big.Int).SetUint64(1337 + nonce)) } dataFn := func(nonce uint64) []byte { return nil @@ -2217,7 +2813,7 @@ func BenchmarkBlockChain_1x1000ValueTransferToExisting(b *testing.B) { b.ResetTimer() recipientFn := func(nonce uint64) common.Address { - return common.BigToAddress(big.NewInt(0).SetUint64(1337)) + return common.BigToAddress(new(big.Int).SetUint64(1337)) } dataFn := func(nonce uint64) []byte { return nil @@ -2234,7 +2830,7 @@ func BenchmarkBlockChain_1x1000Executions(b *testing.B) { b.ResetTimer() recipientFn := func(nonce uint64) common.Address { - return common.BigToAddress(big.NewInt(0).SetUint64(0xc0de)) + return common.BigToAddress(new(big.Int).SetUint64(0xc0de)) } dataFn := func(nonce uint64) []byte { return nil @@ -2254,13 +2850,18 @@ func TestSideImportPrunedBlocks(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() db := rawdb.NewMemoryDatabase() - genesis := new(Genesis).MustCommit(db) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + } + genesis := gspec.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) + + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } @@ -2287,3 +2888,1019 @@ func TestSideImportPrunedBlocks(t *testing.T) { 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(100000000000000000) + 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), byte(vm.SELFDESTRUCT)}, + 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), + }, + }, + } + 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, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + // One transaction to BBBB + tx, _ = types.SignTx(types.NewTransaction(1, bb, + big.NewInt(0), 100000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + }) + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, 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) + } +} + +// TestDeleteRecreateSlots tests a state-transition that contains both deletion +// and recreation of contract state. +// Contract A exists, has slots 1 and 2 set +// Tx 1: Selfdestruct A +// Tx 2: Re-create A, set slots 3 and 4 +// Expected outcome is that _all_ slots are cleared from A, due to the selfdestruct, +// and then the new slots exist +func TestDeleteRecreateSlots(t *testing.T) { + var ( + // 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(1000000000000000) + bb = common.HexToAddress("0x000000000000000000000000000000000000bbbb") + aaStorage = make(map[common.Hash]common.Hash) // Initial storage in AA + aaCode = []byte{byte(vm.PC), byte(vm.SELFDESTRUCT)} // Code for AA (simple selfdestruct) + ) + // Populate two slots + aaStorage[common.HexToHash("01")] = common.HexToHash("01") + aaStorage[common.HexToHash("02")] = common.HexToHash("02") + + // The bb-code needs to CREATE2 the aa contract. It consists of + // both initcode and deployment code + // initcode: + // 1. Set slots 3=3, 4=4, + // 2. Return aaCode + + initCode := []byte{ + byte(vm.PUSH1), 0x3, // value + byte(vm.PUSH1), 0x3, // location + byte(vm.SSTORE), // Set slot[3] = 3 + byte(vm.PUSH1), 0x4, // value + byte(vm.PUSH1), 0x4, // location + byte(vm.SSTORE), // Set slot[4] = 4 + // Slots are set, now return the code + byte(vm.PUSH2), byte(vm.PC), byte(vm.SELFDESTRUCT), // Push code on stack + byte(vm.PUSH1), 0x0, // memory start on stack + byte(vm.MSTORE), + // Code is now in memory. + byte(vm.PUSH1), 0x2, // size + byte(vm.PUSH1), byte(32 - 2), // offset + byte(vm.RETURN), + } + if l := len(initCode); l > 32 { + t.Fatalf("init code is too long for a pushx, need a more elaborate deployer") + } + bbCode := []byte{ + // Push initcode onto stack + byte(vm.PUSH1) + byte(len(initCode)-1)} + bbCode = append(bbCode, initCode...) + bbCode = append(bbCode, []byte{ + byte(vm.PUSH1), 0x0, // memory start on stack + byte(vm.MSTORE), + byte(vm.PUSH1), 0x00, // salt + byte(vm.PUSH1), byte(len(initCode)), // size + byte(vm.PUSH1), byte(32 - len(initCode)), // offset + byte(vm.PUSH1), 0x00, // endowment + byte(vm.CREATE2), + }...) + + initHash := crypto.Keccak256Hash(initCode) + aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:]) + t.Logf("Destination address: %x\n", aa) + + gspec := &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address 0xAAAAA selfdestructs if called + aa: { + // Code needs to just selfdestruct + Code: aaCode, + Nonce: 1, + Balance: big.NewInt(0), + Storage: aaStorage, + }, + // The contract BB recreates AA + bb: { + Code: bbCode, + Balance: big.NewInt(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 AA, to kill it + tx, _ := types.SignTx(types.NewTransaction(0, aa, + big.NewInt(0), 50000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + // One transaction to BB, to recreate AA + tx, _ = types.SignTx(types.NewTransaction(1, bb, + big.NewInt(0), 100000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + }) + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{ + Debug: true, + Tracer: logger.NewJSONLogger(nil, os.Stdout), + }, nil, 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) + } + statedb, _ := chain.State() + + // If all is correct, then slot 1 and 2 are zero + if got, exp := statedb.GetState(aa, common.HexToHash("01")), (common.Hash{}); got != exp { + t.Errorf("got %x exp %x", got, exp) + } + if got, exp := statedb.GetState(aa, common.HexToHash("02")), (common.Hash{}); got != exp { + t.Errorf("got %x exp %x", got, exp) + } + // Also, 3 and 4 should be set + if got, exp := statedb.GetState(aa, common.HexToHash("03")), common.HexToHash("03"); got != exp { + t.Fatalf("got %x exp %x", got, exp) + } + if got, exp := statedb.GetState(aa, common.HexToHash("04")), common.HexToHash("04"); got != exp { + t.Fatalf("got %x exp %x", got, exp) + } +} + +// TestDeleteRecreateAccount tests a state-transition that contains deletion of a +// contract with storage, and a recreate of the same contract via a +// regular value-transfer +// Expected outcome is that _all_ slots are cleared from A +func TestDeleteRecreateAccount(t *testing.T) { + var ( + // 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(1000000000000000) + + aa = common.HexToAddress("0x7217d81b76bdd8707601e959454e3d776aee5f43") + aaStorage = make(map[common.Hash]common.Hash) // Initial storage in AA + aaCode = []byte{byte(vm.PC), byte(vm.SELFDESTRUCT)} // Code for AA (simple selfdestruct) + ) + // Populate two slots + aaStorage[common.HexToHash("01")] = common.HexToHash("01") + aaStorage[common.HexToHash("02")] = common.HexToHash("02") + + gspec := &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address 0xAAAAA selfdestructs if called + aa: { + // Code needs to just selfdestruct + Code: aaCode, + Nonce: 1, + Balance: big.NewInt(0), + Storage: aaStorage, + }, + }, + } + 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 AA, to kill it + tx, _ := types.SignTx(types.NewTransaction(0, aa, + big.NewInt(0), 50000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + // One transaction to AA, to recreate it (but without storage + tx, _ = types.SignTx(types.NewTransaction(1, aa, + big.NewInt(1), 100000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + }) + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{ + Debug: true, + Tracer: logger.NewJSONLogger(nil, os.Stdout), + }, nil, 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) + } + statedb, _ := chain.State() + + // If all is correct, then both slots are zero + if got, exp := statedb.GetState(aa, common.HexToHash("01")), (common.Hash{}); got != exp { + t.Errorf("got %x exp %x", got, exp) + } + if got, exp := statedb.GetState(aa, common.HexToHash("02")), (common.Hash{}); got != exp { + t.Errorf("got %x exp %x", got, exp) + } +} + +// TestDeleteRecreateSlotsAcrossManyBlocks tests multiple state-transition that contains both deletion +// and recreation of contract state. +// Contract A exists, has slots 1 and 2 set +// Tx 1: Selfdestruct A +// Tx 2: Re-create A, set slots 3 and 4 +// Expected outcome is that _all_ slots are cleared from A, due to the selfdestruct, +// and then the new slots exist +func TestDeleteRecreateSlotsAcrossManyBlocks(t *testing.T) { + var ( + // 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(1000000000000000) + bb = common.HexToAddress("0x000000000000000000000000000000000000bbbb") + aaStorage = make(map[common.Hash]common.Hash) // Initial storage in AA + aaCode = []byte{byte(vm.PC), byte(vm.SELFDESTRUCT)} // Code for AA (simple selfdestruct) + ) + // Populate two slots + aaStorage[common.HexToHash("01")] = common.HexToHash("01") + aaStorage[common.HexToHash("02")] = common.HexToHash("02") + + // The bb-code needs to CREATE2 the aa contract. It consists of + // both initcode and deployment code + // initcode: + // 1. Set slots 3=blocknum+1, 4=4, + // 2. Return aaCode + + initCode := []byte{ + byte(vm.PUSH1), 0x1, // + byte(vm.NUMBER), // value = number + 1 + byte(vm.ADD), // + byte(vm.PUSH1), 0x3, // location + byte(vm.SSTORE), // Set slot[3] = number + 1 + byte(vm.PUSH1), 0x4, // value + byte(vm.PUSH1), 0x4, // location + byte(vm.SSTORE), // Set slot[4] = 4 + // Slots are set, now return the code + byte(vm.PUSH2), byte(vm.PC), byte(vm.SELFDESTRUCT), // Push code on stack + byte(vm.PUSH1), 0x0, // memory start on stack + byte(vm.MSTORE), + // Code is now in memory. + byte(vm.PUSH1), 0x2, // size + byte(vm.PUSH1), byte(32 - 2), // offset + byte(vm.RETURN), + } + if l := len(initCode); l > 32 { + t.Fatalf("init code is too long for a pushx, need a more elaborate deployer") + } + bbCode := []byte{ + // Push initcode onto stack + byte(vm.PUSH1) + byte(len(initCode)-1)} + bbCode = append(bbCode, initCode...) + bbCode = append(bbCode, []byte{ + byte(vm.PUSH1), 0x0, // memory start on stack + byte(vm.MSTORE), + byte(vm.PUSH1), 0x00, // salt + byte(vm.PUSH1), byte(len(initCode)), // size + byte(vm.PUSH1), byte(32 - len(initCode)), // offset + byte(vm.PUSH1), 0x00, // endowment + byte(vm.CREATE2), + }...) + + initHash := crypto.Keccak256Hash(initCode) + aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:]) + t.Logf("Destination address: %x\n", aa) + gspec := &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address 0xAAAAA selfdestructs if called + aa: { + // Code needs to just selfdestruct + Code: aaCode, + Nonce: 1, + Balance: big.NewInt(0), + Storage: aaStorage, + }, + // The contract BB recreates AA + bb: { + Code: bbCode, + Balance: big.NewInt(1), + }, + }, + } + genesis := gspec.MustCommit(db) + var nonce uint64 + + type expectation struct { + exist bool + blocknum int + values map[int]int + } + var current = &expectation{ + exist: true, // exists in genesis + blocknum: 0, + values: map[int]int{1: 1, 2: 2}, + } + var expectations []*expectation + var newDestruct = func(e *expectation, b *BlockGen) *types.Transaction { + tx, _ := types.SignTx(types.NewTransaction(nonce, aa, + big.NewInt(0), 50000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + nonce++ + if e.exist { + e.exist = false + e.values = nil + } + t.Logf("block %d; adding destruct\n", e.blocknum) + return tx + } + var newResurrect = func(e *expectation, b *BlockGen) *types.Transaction { + tx, _ := types.SignTx(types.NewTransaction(nonce, bb, + big.NewInt(0), 100000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + nonce++ + if !e.exist { + e.exist = true + e.values = map[int]int{3: e.blocknum + 1, 4: 4} + } + t.Logf("block %d; adding resurrect\n", e.blocknum) + return tx + } + + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 150, func(i int, b *BlockGen) { + var exp = new(expectation) + exp.blocknum = i + 1 + exp.values = make(map[int]int) + for k, v := range current.values { + exp.values[k] = v + } + exp.exist = current.exist + + b.SetCoinbase(common.Address{1}) + if i%2 == 0 { + b.AddTx(newDestruct(exp, b)) + } + if i%3 == 0 { + b.AddTx(newResurrect(exp, b)) + } + if i%5 == 0 { + b.AddTx(newDestruct(exp, b)) + } + if i%7 == 0 { + b.AddTx(newResurrect(exp, b)) + } + expectations = append(expectations, exp) + current = exp + }) + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{ + //Debug: true, + //Tracer: vm.NewJSONLogger(nil, os.Stdout), + }, nil, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + var asHash = func(num int) common.Hash { + return common.BytesToHash([]byte{byte(num)}) + } + for i, block := range blocks { + blockNum := i + 1 + if n, err := chain.InsertChain([]*types.Block{block}); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + statedb, _ := chain.State() + // If all is correct, then slot 1 and 2 are zero + if got, exp := statedb.GetState(aa, common.HexToHash("01")), (common.Hash{}); got != exp { + t.Errorf("block %d, got %x exp %x", blockNum, got, exp) + } + if got, exp := statedb.GetState(aa, common.HexToHash("02")), (common.Hash{}); got != exp { + t.Errorf("block %d, got %x exp %x", blockNum, got, exp) + } + exp := expectations[i] + if exp.exist { + if !statedb.Exist(aa) { + t.Fatalf("block %d, expected %v to exist, it did not", blockNum, aa) + } + for slot, val := range exp.values { + if gotValue, expValue := statedb.GetState(aa, asHash(slot)), asHash(val); gotValue != expValue { + t.Fatalf("block %d, slot %d, got %x exp %x", blockNum, slot, gotValue, expValue) + } + } + } else { + if statedb.Exist(aa) { + t.Fatalf("block %d, expected %v to not exist, it did", blockNum, aa) + } + } + } +} + +// TestInitThenFailCreateContract tests a pretty notorious case that happened +// on mainnet over blocks 7338108, 7338110 and 7338115. +// - Block 7338108: address e771789f5cccac282f23bb7add5690e1f6ca467c is initiated +// with 0.001 ether (thus created but no code) +// - Block 7338110: a CREATE2 is attempted. The CREATE2 would deploy code on +// the same address e771789f5cccac282f23bb7add5690e1f6ca467c. However, the +// deployment fails due to OOG during initcode execution +// - Block 7338115: another tx checks the balance of +// e771789f5cccac282f23bb7add5690e1f6ca467c, and the snapshotter returned it as +// zero. +// +// The problem being that the snapshotter maintains a destructset, and adds items +// to the destructset in case something is created "onto" an existing item. +// We need to either roll back the snapDestructs, or not place it into snapDestructs +// in the first place. +// +func TestInitThenFailCreateContract(t *testing.T) { + var ( + // 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(1000000000000000) + bb = common.HexToAddress("0x000000000000000000000000000000000000bbbb") + ) + + // The bb-code needs to CREATE2 the aa contract. It consists of + // both initcode and deployment code + // initcode: + // 1. If blocknum < 1, error out (e.g invalid opcode) + // 2. else, return a snippet of code + initCode := []byte{ + byte(vm.PUSH1), 0x1, // y (2) + byte(vm.NUMBER), // x (number) + byte(vm.GT), // x > y? + byte(vm.PUSH1), byte(0x8), + byte(vm.JUMPI), // jump to label if number > 2 + byte(0xFE), // illegal opcode + byte(vm.JUMPDEST), + byte(vm.PUSH1), 0x2, // size + byte(vm.PUSH1), 0x0, // offset + byte(vm.RETURN), // return 2 bytes of zero-code + } + if l := len(initCode); l > 32 { + t.Fatalf("init code is too long for a pushx, need a more elaborate deployer") + } + bbCode := []byte{ + // Push initcode onto stack + byte(vm.PUSH1) + byte(len(initCode)-1)} + bbCode = append(bbCode, initCode...) + bbCode = append(bbCode, []byte{ + byte(vm.PUSH1), 0x0, // memory start on stack + byte(vm.MSTORE), + byte(vm.PUSH1), 0x00, // salt + byte(vm.PUSH1), byte(len(initCode)), // size + byte(vm.PUSH1), byte(32 - len(initCode)), // offset + byte(vm.PUSH1), 0x00, // endowment + byte(vm.CREATE2), + }...) + + initHash := crypto.Keccak256Hash(initCode) + aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:]) + t.Logf("Destination address: %x\n", aa) + + gspec := &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address aa has some funds + aa: {Balance: big.NewInt(100000)}, + // The contract BB tries to create code onto AA + bb: { + Code: bbCode, + Balance: big.NewInt(1), + }, + }, + } + genesis := gspec.MustCommit(db) + nonce := uint64(0) + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 4, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + // One transaction to BB + tx, _ := types.SignTx(types.NewTransaction(nonce, bb, + big.NewInt(0), 100000, b.header.BaseFee, nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + nonce++ + }) + + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{ + //Debug: true, + //Tracer: vm.NewJSONLogger(nil, os.Stdout), + }, nil, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + statedb, _ := chain.State() + if got, exp := statedb.GetBalance(aa), big.NewInt(100000); got.Cmp(exp) != 0 { + t.Fatalf("Genesis err, got %v exp %v", got, exp) + } + // First block tries to create, but fails + { + block := blocks[0] + if _, err := chain.InsertChain([]*types.Block{blocks[0]}); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", block.NumberU64(), err) + } + statedb, _ = chain.State() + if got, exp := statedb.GetBalance(aa), big.NewInt(100000); got.Cmp(exp) != 0 { + t.Fatalf("block %d: got %v exp %v", block.NumberU64(), got, exp) + } + } + // Import the rest of the blocks + for _, block := range blocks[1:] { + if _, err := chain.InsertChain([]*types.Block{block}); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", block.NumberU64(), err) + } + } +} + +// TestEIP2718Transition tests that an EIP-2718 transaction will be accepted +// after the fork block has passed. This is verified by sending an EIP-2930 +// access list transaction, which specifies a single slot access, and then +// checking that the gas usage of a hot SLOAD and a cold SLOAD are calculated +// correctly. +func TestEIP2718Transition(t *testing.T) { + var ( + aa = common.HexToAddress("0x000000000000000000000000000000000000aaaa") + + // 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(1000000000000000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address 0xAAAA sloads 0x00 and 0x01 + aa: { + Code: []byte{ + byte(vm.PC), + byte(vm.PC), + byte(vm.SLOAD), + byte(vm.SLOAD), + }, + Nonce: 0, + Balance: big.NewInt(0), + }, + }, + } + genesis = gspec.MustCommit(db) + ) + + blocks, _ := GenerateChain(gspec.Config, genesis, engine, db, 1, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + + // One transaction to 0xAAAA + signer := types.LatestSigner(gspec.Config) + tx, _ := types.SignNewTx(key, signer, &types.AccessListTx{ + ChainID: gspec.Config.ChainID, + Nonce: 0, + To: &aa, + Gas: 30000, + GasPrice: b.header.BaseFee, + AccessList: types.AccessList{{ + Address: aa, + StorageKeys: []common.Hash{{0}}, + }}, + }) + b.AddTx(tx) + }) + + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, 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) + } + + block := chain.GetBlockByNumber(1) + + // Expected gas is intrinsic + 2 * pc + hot load + cold load, since only one load is in the access list + expected := params.TxGas + params.TxAccessListAddressGas + params.TxAccessListStorageKeyGas + + vm.GasQuickStep*2 + params.WarmStorageReadCostEIP2929 + params.ColdSloadCostEIP2929 + if block.GasUsed() != expected { + t.Fatalf("incorrect amount of gas spent: expected %d, got %d", expected, block.GasUsed()) + } +} + +// TestEIP1559Transition tests the following: +// +// 1. A transaction whose gasFeeCap is greater than the baseFee is valid. +// 2. Gas accounting for access lists on EIP-1559 transactions is correct. +// 3. Only the transaction's tip will be received by the coinbase. +// 4. The transaction sender pays for both the tip and baseFee. +// 5. The coinbase receives only the partially realized tip when +// gasFeeCap - gasTipCap < baseFee. +// 6. Legacy transaction behave as expected (e.g. gasPrice = gasFeeCap = gasTipCap). +func TestEIP1559Transition(t *testing.T) { + var ( + aa = common.HexToAddress("0x000000000000000000000000000000000000aaaa") + + // Generate a canonical chain to act as the main dataset + engine = ethash.NewFaker() + db = rawdb.NewMemoryDatabase() + + // A sender who makes transactions, has some funds + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + key2, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + addr2 = crypto.PubkeyToAddress(key2.PublicKey) + funds = new(big.Int).Mul(common.Big1, big.NewInt(params.Ether)) + gspec = &Genesis{ + Config: params.AllEthashProtocolChanges, + Alloc: GenesisAlloc{ + addr1: {Balance: funds}, + addr2: {Balance: funds}, + // The address 0xAAAA sloads 0x00 and 0x01 + aa: { + Code: []byte{ + byte(vm.PC), + byte(vm.PC), + byte(vm.SLOAD), + byte(vm.SLOAD), + }, + Nonce: 0, + Balance: big.NewInt(0), + }, + }, + } + ) + + gspec.Config.BerlinBlock = common.Big0 + gspec.Config.LondonBlock = common.Big0 + genesis := gspec.MustCommit(db) + signer := types.LatestSigner(gspec.Config) + + blocks, _ := GenerateChain(gspec.Config, genesis, engine, db, 1, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + + // One transaction to 0xAAAA + accesses := types.AccessList{types.AccessTuple{ + Address: aa, + StorageKeys: []common.Hash{{0}}, + }} + + txdata := &types.DynamicFeeTx{ + ChainID: gspec.Config.ChainID, + Nonce: 0, + To: &aa, + Gas: 30000, + GasFeeCap: newGwei(5), + GasTipCap: big.NewInt(2), + AccessList: accesses, + Data: []byte{}, + } + tx := types.NewTx(txdata) + tx, _ = types.SignTx(tx, signer, key1) + + b.AddTx(tx) + }) + + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, 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) + } + + block := chain.GetBlockByNumber(1) + + // 1+2: Ensure EIP-1559 access lists are accounted for via gas usage. + expectedGas := params.TxGas + params.TxAccessListAddressGas + params.TxAccessListStorageKeyGas + + vm.GasQuickStep*2 + params.WarmStorageReadCostEIP2929 + params.ColdSloadCostEIP2929 + if block.GasUsed() != expectedGas { + t.Fatalf("incorrect amount of gas spent: expected %d, got %d", expectedGas, block.GasUsed()) + } + + state, _ := chain.State() + + // 3: Ensure that miner received only the tx's tip. + actual := state.GetBalance(block.Coinbase()) + expected := new(big.Int).Add( + new(big.Int).SetUint64(block.GasUsed()*block.Transactions()[0].GasTipCap().Uint64()), + ethash.ConstantinopleBlockReward, + ) + if actual.Cmp(expected) != 0 { + t.Fatalf("miner balance incorrect: expected %d, got %d", expected, actual) + } + + // 4: Ensure the tx sender paid for the gasUsed * (tip + block baseFee). + actual = new(big.Int).Sub(funds, state.GetBalance(addr1)) + expected = new(big.Int).SetUint64(block.GasUsed() * (block.Transactions()[0].GasTipCap().Uint64() + block.BaseFee().Uint64())) + if actual.Cmp(expected) != 0 { + t.Fatalf("sender balance incorrect: expected %d, got %d", expected, actual) + } + + blocks, _ = GenerateChain(gspec.Config, block, engine, db, 1, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{2}) + + txdata := &types.LegacyTx{ + Nonce: 0, + To: &aa, + Gas: 30000, + GasPrice: newGwei(5), + } + tx := types.NewTx(txdata) + tx, _ = types.SignTx(tx, signer, key2) + + b.AddTx(tx) + }) + + if n, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + + block = chain.GetBlockByNumber(2) + state, _ = chain.State() + effectiveTip := block.Transactions()[0].GasTipCap().Uint64() - block.BaseFee().Uint64() + + // 6+5: Ensure that miner received only the tx's effective tip. + actual = state.GetBalance(block.Coinbase()) + expected = new(big.Int).Add( + new(big.Int).SetUint64(block.GasUsed()*effectiveTip), + ethash.ConstantinopleBlockReward, + ) + if actual.Cmp(expected) != 0 { + t.Fatalf("miner balance incorrect: expected %d, got %d", expected, actual) + } + + // 4: Ensure the tx sender paid for the gasUsed * (effectiveTip + block baseFee). + actual = new(big.Int).Sub(funds, state.GetBalance(addr2)) + expected = new(big.Int).SetUint64(block.GasUsed() * (effectiveTip + block.BaseFee().Uint64())) + if actual.Cmp(expected) != 0 { + t.Fatalf("sender balance incorrect: expected %d, got %d", expected, actual) + } +} + +// Tests the scenario the chain is requested to another point with the missing state. +// It expects the state is recovered and all relevant chain markers are set correctly. +func TestSetCanonical(t *testing.T) { + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + var ( + db = rawdb.NewMemoryDatabase() + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + funds = big.NewInt(100000000000000000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{address: {Balance: funds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(db) + signer = types.LatestSigner(gspec.Config) + engine = ethash.NewFaker() + ) + // Generate and import the canonical chain + canon, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*TriesInMemory, func(i int, gen *BlockGen) { + tx, err := types.SignTx(types.NewTransaction(gen.TxNonce(address), common.Address{0x00}, big.NewInt(1000), params.TxGas, gen.header.BaseFee, nil), signer, key) + if err != nil { + panic(err) + } + gen.AddTx(tx) + }) + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + if n, err := chain.InsertChain(canon); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + + // Generate the side chain and import them + side, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*TriesInMemory, func(i int, gen *BlockGen) { + tx, err := types.SignTx(types.NewTransaction(gen.TxNonce(address), common.Address{0x00}, big.NewInt(1), params.TxGas, gen.header.BaseFee, nil), signer, key) + if err != nil { + panic(err) + } + gen.AddTx(tx) + }) + for _, block := range side { + err := chain.InsertBlockWithoutSetHead(block) + if err != nil { + t.Fatalf("Failed to insert into chain: %v", err) + } + } + for _, block := range side { + got := chain.GetBlockByHash(block.Hash()) + if got == nil { + t.Fatalf("Lost the inserted block") + } + } + + // Set the chain head to the side chain, ensure all the relevant markers are updated. + verify := func(head *types.Block) { + if chain.CurrentBlock().Hash() != head.Hash() { + t.Fatalf("Unexpected block hash, want %x, got %x", head.Hash(), chain.CurrentBlock().Hash()) + } + if chain.CurrentFastBlock().Hash() != head.Hash() { + t.Fatalf("Unexpected fast block hash, want %x, got %x", head.Hash(), chain.CurrentFastBlock().Hash()) + } + if chain.CurrentHeader().Hash() != head.Hash() { + t.Fatalf("Unexpected head header, want %x, got %x", head.Hash(), chain.CurrentHeader().Hash()) + } + if !chain.HasState(head.Root()) { + t.Fatalf("Lost block state %v %x", head.Number(), head.Hash()) + } + } + chain.SetCanonical(side[len(side)-1]) + verify(side[len(side)-1]) + + // Reset the chain head to original chain + chain.SetCanonical(canon[TriesInMemory-1]) + verify(canon[TriesInMemory-1]) +} + +// TestCanonicalHashMarker tests all the canonical hash markers are updated/deleted +// correctly in case reorg is called. +func TestCanonicalHashMarker(t *testing.T) { + var cases = []struct { + forkA int + forkB int + }{ + // ForkA: 10 blocks + // ForkB: 1 blocks + // + // reorged: + // markers [2, 10] should be deleted + // markers [1] should be updated + {10, 1}, + + // ForkA: 10 blocks + // ForkB: 2 blocks + // + // reorged: + // markers [3, 10] should be deleted + // markers [1, 2] should be updated + {10, 2}, + + // ForkA: 10 blocks + // ForkB: 10 blocks + // + // reorged: + // markers [1, 10] should be updated + {10, 10}, + + // ForkA: 10 blocks + // ForkB: 11 blocks + // + // reorged: + // markers [1, 11] should be updated + {10, 11}, + } + for _, c := range cases { + var ( + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(db) + engine = ethash.NewFaker() + ) + forkA, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, c.forkA, func(i int, gen *BlockGen) {}) + forkB, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, c.forkB, func(i int, gen *BlockGen) {}) + + // Initialize test chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + // Insert forkA and forkB, the canonical should on forkA still + if n, err := chain.InsertChain(forkA); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + if n, err := chain.InsertChain(forkB); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + + verify := func(head *types.Block) { + if chain.CurrentBlock().Hash() != head.Hash() { + t.Fatalf("Unexpected block hash, want %x, got %x", head.Hash(), chain.CurrentBlock().Hash()) + } + if chain.CurrentFastBlock().Hash() != head.Hash() { + t.Fatalf("Unexpected fast block hash, want %x, got %x", head.Hash(), chain.CurrentFastBlock().Hash()) + } + if chain.CurrentHeader().Hash() != head.Hash() { + t.Fatalf("Unexpected head header, want %x, got %x", head.Hash(), chain.CurrentHeader().Hash()) + } + if !chain.HasState(head.Root()) { + t.Fatalf("Lost block state %v %x", head.Number(), head.Hash()) + } + } + + // Switch canonical chain to forkB if necessary + if len(forkA) < len(forkB) { + verify(forkB[len(forkB)-1]) + } else { + verify(forkA[len(forkA)-1]) + chain.SetCanonical(forkB[len(forkB)-1]) + verify(forkB[len(forkB)-1]) + } + + // Ensure all hash markers are updated correctly + for i := 0; i < len(forkB); i++ { + block := forkB[i] + hash := chain.GetCanonicalHash(block.NumberU64()) + if hash != block.Hash() { + t.Fatalf("Unexpected canonical hash %d", block.NumberU64()) + } + } + if c.forkA > c.forkB { + for i := uint64(c.forkB) + 1; i <= uint64(c.forkA); i++ { + hash := chain.GetCanonicalHash(i) + if hash != (common.Hash{}) { + t.Fatalf("Unexpected canonical hash %d", i) + } + } + } + } +} diff --git a/core/blocks.go b/core/blocks.go index f16661f4..f20ba4aa 100644 --- a/core/blocks.go +++ b/core/blocks.go @@ -16,7 +16,7 @@ package core -import "github.com/cryptoecc/ETH-ECC/common" +import "github.com/ethereum/go-ethereum/common" // BadHashes represent a set of manually tracked bad hashes (usually hard forks) var BadHashes = map[common.Hash]bool{ diff --git a/core/bloom_indexer.go b/core/bloom_indexer.go new file mode 100644 index 00000000..68a35d81 --- /dev/null +++ b/core/bloom_indexer.go @@ -0,0 +1,92 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/core/bloombits" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" +) + +const ( + // bloomThrottling is the time to wait between processing two consecutive index + // sections. It's useful during chain upgrades to prevent disk overload. + bloomThrottling = 100 * time.Millisecond +) + +// BloomIndexer implements a core.ChainIndexer, building up a rotated bloom bits index +// for the Ethereum header bloom filters, permitting blazing fast filtering. +type BloomIndexer struct { + size uint64 // section size to generate bloombits for + db ethdb.Database // database instance to write index data and metadata into + gen *bloombits.Generator // generator to rotate the bloom bits crating the bloom index + section uint64 // Section is the section number being processed currently + head common.Hash // Head is the hash of the last header processed +} + +// NewBloomIndexer returns a chain indexer that generates bloom bits data for the +// canonical chain for fast logs filtering. +func NewBloomIndexer(db ethdb.Database, size, confirms uint64) *ChainIndexer { + backend := &BloomIndexer{ + db: db, + size: size, + } + table := rawdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) + + return NewChainIndexer(db, table, backend, size, confirms, bloomThrottling, "bloombits") +} + +// Reset implements core.ChainIndexerBackend, starting a new bloombits index +// section. +func (b *BloomIndexer) Reset(ctx context.Context, section uint64, lastSectionHead common.Hash) error { + gen, err := bloombits.NewGenerator(uint(b.size)) + b.gen, b.section, b.head = gen, section, common.Hash{} + return err +} + +// Process implements core.ChainIndexerBackend, adding a new header's bloom into +// the index. +func (b *BloomIndexer) Process(ctx context.Context, header *types.Header) error { + b.gen.AddBloom(uint(header.Number.Uint64()-b.section*b.size), header.Bloom) + b.head = header.Hash() + return nil +} + +// Commit implements core.ChainIndexerBackend, finalizing the bloom section and +// writing it out into the database. +func (b *BloomIndexer) Commit() error { + batch := b.db.NewBatchWithSize((int(b.size) / 8) * types.BloomBitLength) + for i := 0; i < types.BloomBitLength; i++ { + bits, err := b.gen.Bitset(uint(i)) + if err != nil { + return err + } + rawdb.WriteBloomBits(batch, uint(i), b.section, b.head, bitutil.CompressBytes(bits)) + } + return batch.Write() +} + +// Prune returns an empty error since we don't support pruning here. +func (b *BloomIndexer) Prune(threshold uint64) error { + return nil +} diff --git a/core/bloombits/generator.go b/core/bloombits/generator.go index 735e60af..646151db 100644 --- a/core/bloombits/generator.go +++ b/core/bloombits/generator.go @@ -19,7 +19,7 @@ package bloombits import ( "errors" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) var ( @@ -65,18 +65,23 @@ func (b *Generator) AddBloom(index uint, bloom types.Bloom) error { } // Rotate the bloom and insert into our collection byteIndex := b.nextSec / 8 - bitMask := byte(1) << byte(7-b.nextSec%8) - - for i := 0; i < types.BloomBitLength; i++ { - bloomByteIndex := types.BloomByteLength - 1 - i/8 - bloomBitMask := byte(1) << byte(i%8) - - if (bloom[bloomByteIndex] & bloomBitMask) != 0 { - b.blooms[i][byteIndex] |= bitMask + bitIndex := byte(7 - b.nextSec%8) + for byt := 0; byt < types.BloomByteLength; byt++ { + bloomByte := bloom[types.BloomByteLength-1-byt] + if bloomByte == 0 { + continue } + base := 8 * byt + b.blooms[base+7][byteIndex] |= ((bloomByte >> 7) & 1) << bitIndex + b.blooms[base+6][byteIndex] |= ((bloomByte >> 6) & 1) << bitIndex + b.blooms[base+5][byteIndex] |= ((bloomByte >> 5) & 1) << bitIndex + b.blooms[base+4][byteIndex] |= ((bloomByte >> 4) & 1) << bitIndex + b.blooms[base+3][byteIndex] |= ((bloomByte >> 3) & 1) << bitIndex + b.blooms[base+2][byteIndex] |= ((bloomByte >> 2) & 1) << bitIndex + b.blooms[base+1][byteIndex] |= ((bloomByte >> 1) & 1) << bitIndex + b.blooms[base][byteIndex] |= (bloomByte & 1) << bitIndex } b.nextSec++ - return nil } diff --git a/core/bloombits/generator_test.go b/core/bloombits/generator_test.go index c62a3f95..883948d1 100644 --- a/core/bloombits/generator_test.go +++ b/core/bloombits/generator_test.go @@ -21,7 +21,7 @@ import ( "math/rand" "testing" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) // Tests that batched bloom bits are correctly rotated from the input bloom @@ -58,3 +58,42 @@ func TestGenerator(t *testing.T) { } } } + +func BenchmarkGenerator(b *testing.B) { + var input [types.BloomBitLength][types.BloomByteLength]byte + b.Run("empty", func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + // Crunch the input through the generator and verify the result + gen, err := NewGenerator(types.BloomBitLength) + if err != nil { + b.Fatalf("failed to create bloombit generator: %v", err) + } + for j, bloom := range &input { + if err := gen.AddBloom(uint(j), bloom); err != nil { + b.Fatalf("bloom %d: failed to add: %v", i, err) + } + } + } + }) + for i := 0; i < types.BloomBitLength; i++ { + rand.Read(input[i][:]) + } + b.Run("random", func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + // Crunch the input through the generator and verify the result + gen, err := NewGenerator(types.BloomBitLength) + if err != nil { + b.Fatalf("failed to create bloombit generator: %v", err) + } + for j, bloom := range &input { + if err := gen.AddBloom(uint(j), bloom); err != nil { + b.Fatalf("bloom %d: failed to add: %v", i, err) + } + } + } + }) +} diff --git a/core/bloombits/matcher.go b/core/bloombits/matcher.go index fc036329..f2a8bda1 100644 --- a/core/bloombits/matcher.go +++ b/core/bloombits/matcher.go @@ -26,8 +26,8 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/crypto" ) // bloomIndexes represents the bit indexes inside the bloom filter that belong @@ -155,7 +155,6 @@ func (m *Matcher) Start(ctx context.Context, begin, end uint64, results chan uin session := &MatcherSession{ matcher: m, quit: make(chan struct{}), - kill: make(chan struct{}), ctx: ctx, } for _, scheduler := range m.schedulers { @@ -386,10 +385,8 @@ func (m *Matcher) distributor(dist chan *request, session *MatcherSession) { requests = make(map[uint][]uint64) // Per-bit list of section requests, ordered by section number unallocs = make(map[uint]struct{}) // Bits with pending requests but not allocated to any retriever retrievers chan chan uint // Waiting retrievers (toggled to nil if unallocs is empty) - ) - var ( - allocs int // Number of active allocations to handle graceful shutdown requests - shutdown = session.quit // Shutdown request channel, will gracefully wait for pending requests + allocs int // Number of active allocations to handle graceful shutdown requests + shutdown = session.quit // Shutdown request channel, will gracefully wait for pending requests ) // assign is a helper method fo try to assign a pending bit an actively @@ -409,15 +406,12 @@ func (m *Matcher) distributor(dist chan *request, session *MatcherSession) { for { select { case <-shutdown: - // Graceful shutdown requested, wait until all pending requests are honoured + // Shutdown requested. No more retrievers can be allocated, + // but we still need to wait until all pending requests have returned. + shutdown = nil if allocs == 0 { return } - shutdown = nil - - case <-session.kill: - // Pending requests not honoured in time, hard terminate - return case req := <-dist: // New retrieval request arrived to be distributed to some fetcher process @@ -499,8 +493,9 @@ func (m *Matcher) distributor(dist chan *request, session *MatcherSession) { assign(result.Bit) } } - // If we're in the process of shutting down, terminate - if allocs == 0 && shutdown == nil { + + // End the session when all pending deliveries have arrived. + if shutdown == nil && allocs == 0 { return } } @@ -514,10 +509,10 @@ type MatcherSession struct { closer sync.Once // Sync object to ensure we only ever close once quit chan struct{} // Quit channel to request pipeline termination - kill chan struct{} // Term channel to signal non-graceful forced shutdown - ctx context.Context // Context used by the light client to abort filtering - err atomic.Value // Global error to track retrieval failures deep in the chain + ctx context.Context // Context used by the light client to abort filtering + err error // Global error to track retrieval failures deep in the chain + errLock sync.Mutex pend sync.WaitGroup } @@ -529,23 +524,22 @@ func (s *MatcherSession) Close() { s.closer.Do(func() { // Signal termination and wait for all goroutines to tear down close(s.quit) - time.AfterFunc(time.Second, func() { close(s.kill) }) s.pend.Wait() }) } // Error returns any failure encountered during the matching session. func (s *MatcherSession) Error() error { - if err := s.err.Load(); err != nil { - return err.(error) - } - return nil + s.errLock.Lock() + defer s.errLock.Unlock() + + return s.err } -// AllocateRetrieval assigns a bloom bit index to a client process that can either +// allocateRetrieval assigns a bloom bit index to a client process that can either // immediately request and fetch the section contents assigned to this bit or wait // a little while for more sections to be requested. -func (s *MatcherSession) AllocateRetrieval() (uint, bool) { +func (s *MatcherSession) allocateRetrieval() (uint, bool) { fetcher := make(chan uint) select { @@ -557,9 +551,9 @@ func (s *MatcherSession) AllocateRetrieval() (uint, bool) { } } -// PendingSections returns the number of pending section retrievals belonging to +// pendingSections returns the number of pending section retrievals belonging to // the given bloom bit index. -func (s *MatcherSession) PendingSections(bit uint) int { +func (s *MatcherSession) pendingSections(bit uint) int { fetcher := make(chan uint) select { @@ -571,9 +565,9 @@ func (s *MatcherSession) PendingSections(bit uint) int { } } -// AllocateSections assigns all or part of an already allocated bit-task queue +// allocateSections assigns all or part of an already allocated bit-task queue // to the requesting process. -func (s *MatcherSession) AllocateSections(bit uint, count int) []uint64 { +func (s *MatcherSession) allocateSections(bit uint, count int) []uint64 { fetcher := make(chan *Retrieval) select { @@ -589,14 +583,10 @@ func (s *MatcherSession) AllocateSections(bit uint, count int) []uint64 { } } -// DeliverSections delivers a batch of section bit-vectors for a specific bloom +// deliverSections delivers a batch of section bit-vectors for a specific bloom // bit index to be injected into the processing pipeline. -func (s *MatcherSession) DeliverSections(bit uint, sections []uint64, bitsets [][]byte) { - select { - case <-s.kill: - return - case s.matcher.deliveries <- &Retrieval{Bit: bit, Sections: sections, Bitsets: bitsets}: - } +func (s *MatcherSession) deliverSections(bit uint, sections []uint64, bitsets [][]byte) { + s.matcher.deliveries <- &Retrieval{Bit: bit, Sections: sections, Bitsets: bitsets} } // Multiplex polls the matcher session for retrieval tasks and multiplexes it into @@ -608,17 +598,17 @@ func (s *MatcherSession) DeliverSections(bit uint, sections []uint64, bitsets [] func (s *MatcherSession) Multiplex(batch int, wait time.Duration, mux chan chan *Retrieval) { for { // Allocate a new bloom bit index to retrieve data for, stopping when done - bit, ok := s.AllocateRetrieval() + bit, ok := s.allocateRetrieval() if !ok { return } // Bit allocated, throttle a bit if we're below our batch limit - if s.PendingSections(bit) < batch { + if s.pendingSections(bit) < batch { select { case <-s.quit: // Session terminating, we can't meaningfully service, abort - s.AllocateSections(bit, 0) - s.DeliverSections(bit, []uint64{}, [][]byte{}) + s.allocateSections(bit, 0) + s.deliverSections(bit, []uint64{}, [][]byte{}) return case <-time.After(wait): @@ -626,13 +616,13 @@ func (s *MatcherSession) Multiplex(batch int, wait time.Duration, mux chan chan } } // Allocate as much as we can handle and request servicing - sections := s.AllocateSections(bit, batch) + sections := s.allocateSections(bit, batch) request := make(chan *Retrieval) select { case <-s.quit: // Session terminating, we can't meaningfully service, abort - s.DeliverSections(bit, sections, make([][]byte, len(sections))) + s.deliverSections(bit, sections, make([][]byte, len(sections))) return case mux <- request: @@ -641,10 +631,12 @@ func (s *MatcherSession) Multiplex(batch int, wait time.Duration, mux chan chan result := <-request if result.Error != nil { - s.err.Store(result.Error) + s.errLock.Lock() + s.err = result.Error + s.errLock.Unlock() s.Close() } - s.DeliverSections(result.Bit, result.Sections, result.Bitsets) + s.deliverSections(result.Bit, result.Sections, result.Bitsets) } } } diff --git a/core/bloombits/matcher_test.go b/core/bloombits/matcher_test.go index 557a67e1..93d4632b 100644 --- a/core/bloombits/matcher_test.go +++ b/core/bloombits/matcher_test.go @@ -23,13 +23,14 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) const testSectionSize = 4096 // Tests that wildcard filter rules (nil) can be specified and are handled well. func TestMatcherWildcards(t *testing.T) { + t.Parallel() matcher := NewMatcher(testSectionSize, [][][]byte{ {common.Address{}.Bytes(), common.Address{0x01}.Bytes()}, // Default address is not a wildcard {common.Hash{}.Bytes(), common.Hash{0x01}.Bytes()}, // Default hash is not a wildcard @@ -56,6 +57,7 @@ func TestMatcherWildcards(t *testing.T) { // Tests the matcher pipeline on a single continuous workflow without interrupts. func TestMatcherContinuous(t *testing.T) { + t.Parallel() testMatcherDiffBatches(t, [][]bloomIndexes{{{10, 20, 30}}}, 0, 100000, false, 75) testMatcherDiffBatches(t, [][]bloomIndexes{{{32, 3125, 100}}, {{40, 50, 10}}}, 0, 100000, false, 81) testMatcherDiffBatches(t, [][]bloomIndexes{{{4, 8, 11}, {7, 8, 17}}, {{9, 9, 12}, {15, 20, 13}}, {{18, 15, 15}, {12, 10, 4}}}, 0, 10000, false, 36) @@ -64,6 +66,7 @@ func TestMatcherContinuous(t *testing.T) { // Tests the matcher pipeline on a constantly interrupted and resumed work pattern // with the aim of ensuring data items are requested only once. func TestMatcherIntermittent(t *testing.T) { + t.Parallel() testMatcherDiffBatches(t, [][]bloomIndexes{{{10, 20, 30}}}, 0, 100000, true, 75) testMatcherDiffBatches(t, [][]bloomIndexes{{{32, 3125, 100}}, {{40, 50, 10}}}, 0, 100000, true, 81) testMatcherDiffBatches(t, [][]bloomIndexes{{{4, 8, 11}, {7, 8, 17}}, {{9, 9, 12}, {15, 20, 13}}, {{18, 15, 15}, {12, 10, 4}}}, 0, 10000, true, 36) @@ -71,6 +74,7 @@ func TestMatcherIntermittent(t *testing.T) { // Tests the matcher pipeline on random input to hopefully catch anomalies. func TestMatcherRandom(t *testing.T) { + t.Parallel() for i := 0; i < 10; i++ { testMatcherBothModes(t, makeRandomIndexes([]int{1}, 50), 0, 10000, 0) testMatcherBothModes(t, makeRandomIndexes([]int{3}, 50), 0, 10000, 0) @@ -82,8 +86,9 @@ func TestMatcherRandom(t *testing.T) { // Tests that the matcher can properly find matches if the starting block is // shifter from a multiple of 8. This is needed to cover an optimisation with -// bitset matching https://github.com/cryptoecc/ETH-ECC/issues/15309. +// bitset matching https://github.com/ethereum/go-ethereum/issues/15309. func TestMatcherShifted(t *testing.T) { + t.Parallel() // Block 0 always matches in the tests, skip ahead of first 8 blocks with the // start to get a potential zero byte in the matcher bitset. @@ -97,6 +102,7 @@ func TestMatcherShifted(t *testing.T) { // Tests that matching on everything doesn't crash (special case internally). func TestWildcardMatcher(t *testing.T) { + t.Parallel() testMatcherBothModes(t, nil, 0, 10000, 0) } @@ -118,13 +124,13 @@ func makeRandomIndexes(lengths []int, max int) [][]bloomIndexes { // testMatcherDiffBatches runs the given matches test in single-delivery and also // in batches delivery mode, verifying that all kinds of deliveries are handled -// correctly withn. +// correctly within. func testMatcherDiffBatches(t *testing.T, filter [][]bloomIndexes, start, blocks uint64, intermittent bool, retrievals uint32) { singleton := testMatcher(t, filter, start, blocks, intermittent, retrievals, 1) batched := testMatcher(t, filter, start, blocks, intermittent, retrievals, 16) if singleton != batched { - t.Errorf("filter = %v blocks = %v intermittent = %v: request count mismatch, %v in signleton vs. %v in batched mode", filter, blocks, intermittent, singleton, batched) + t.Errorf("filter = %v blocks = %v intermittent = %v: request count mismatch, %v in singleton vs. %v in batched mode", filter, blocks, intermittent, singleton, batched) } } diff --git a/core/bloombits/scheduler_test.go b/core/bloombits/scheduler_test.go index 70772e4a..707e8ea1 100644 --- a/core/bloombits/scheduler_test.go +++ b/core/bloombits/scheduler_test.go @@ -35,6 +35,7 @@ func TestSchedulerMultiClientSingleFetcher(t *testing.T) { testScheduler(t, 10, func TestSchedulerMultiClientMultiFetcher(t *testing.T) { testScheduler(t, 10, 10, 5000) } func testScheduler(t *testing.T, clients int, fetchers int, requests int) { + t.Parallel() f := newScheduler(0) // Create a batch of handler goroutines that respond to bloom bit requests and @@ -88,10 +89,10 @@ func testScheduler(t *testing.T, clients int, fetchers int, requests int) { } close(in) }() - + b := new(big.Int) for j := 0; j < requests; j++ { bits := <-out - if want := new(big.Int).SetUint64(uint64(j)).Bytes(); !bytes.Equal(bits, want) { + if want := b.SetUint64(uint64(j)).Bytes(); !bytes.Equal(bits, want) { t.Errorf("vector %d: delivered content mismatch: have %x, want %x", j, bits, want) } } diff --git a/core/chain_indexer.go b/core/chain_indexer.go index ec50bf5e..95901a0e 100644 --- a/core/chain_indexer.go +++ b/core/chain_indexer.go @@ -24,12 +24,12 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" + "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" + "github.com/ethereum/go-ethereum/log" ) // ChainIndexerBackend defines the methods needed to process chain segments in @@ -46,6 +46,9 @@ type ChainIndexerBackend interface { // Commit finalizes the section metadata and stores it into the database. Commit() error + + // Prune deletes the chain index older than the given threshold. + Prune(threshold uint64) error } // ChainIndexerChain interface is used for connecting the indexer to a blockchain @@ -91,7 +94,7 @@ type ChainIndexer struct { throttling time.Duration // Disk throttling to prevent a heavy upgrade from hogging resources log log.Logger - lock sync.RWMutex + lock sync.Mutex } // NewChainIndexer creates a new chain indexer to do background processing on @@ -386,7 +389,6 @@ func (c *ChainIndexer) processSection(section uint64, lastHead common.Hash) (com c.log.Trace("Processing new chain section", "section", section) // Reset and partial processing - if err := c.backend.Reset(c.ctx, section, lastHead); err != nil { c.setValidSections(0) return common.Hash{}, err @@ -399,7 +401,7 @@ func (c *ChainIndexer) processSection(section uint64, lastHead common.Hash) (com } header := rawdb.ReadHeader(c.chainDb, hash, number) if header == nil { - return common.Hash{}, fmt.Errorf("block #%d [%x…] not found", number, hash[:4]) + return common.Hash{}, fmt.Errorf("block #%d [%x..] not found", number, hash[:4]) } else if header.ParentHash != lastHead { return common.Hash{}, fmt.Errorf("chain reorged during section processing") } @@ -439,6 +441,9 @@ func (c *ChainIndexer) Sections() (uint64, uint64, common.Hash) { // AddChildIndexer adds a child ChainIndexer that can use the output of this one func (c *ChainIndexer) AddChildIndexer(indexer *ChainIndexer) { + if indexer == c { + panic("can't add indexer as a child of itself") + } c.lock.Lock() defer c.lock.Unlock() @@ -456,6 +461,11 @@ func (c *ChainIndexer) AddChildIndexer(indexer *ChainIndexer) { } } +// Prune deletes all chain data older than given threshold. +func (c *ChainIndexer) Prune(threshold uint64) error { + return c.backend.Prune(threshold) +} + // loadValidSections reads the number of valid sections from the index database // and caches is into the local state. func (c *ChainIndexer) loadValidSections() { diff --git a/core/chain_indexer_test.go b/core/chain_indexer_test.go index 9e6fa648..f0996090 100644 --- a/core/chain_indexer_test.go +++ b/core/chain_indexer_test.go @@ -18,15 +18,16 @@ package core import ( "context" + "errors" "fmt" "math/big" "math/rand" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" ) // Runs multiple tests with randomized parameters. @@ -203,7 +204,7 @@ func (b *testChainIndexBackend) assertBlocks(headNum, failNum uint64) (uint64, b } func (b *testChainIndexBackend) reorg(headNum uint64) uint64 { - firstChanged := headNum / b.indexer.sectionSize + firstChanged := (headNum + 1) / b.indexer.sectionSize if firstChanged < b.stored { b.stored = firstChanged } @@ -224,7 +225,10 @@ func (b *testChainIndexBackend) Process(ctx context.Context, header *types.Heade //t.processCh <- header.Number.Uint64() select { case <-time.After(10 * time.Second): - b.t.Fatal("Unexpected call to Process") + b.t.Error("Unexpected call to Process") + // Can't use Fatal since this is not the test's goroutine. + // Returning error stops the chainIndexer's updateLoop + return errors.New("Unexpected call to Process") case b.processCh <- header.Number.Uint64(): } return nil @@ -236,3 +240,7 @@ func (b *testChainIndexBackend) Commit() error { } return nil } + +func (b *testChainIndexBackend) Prune(threshold uint64) error { + return nil +} diff --git a/core/chain_makers.go b/core/chain_makers.go index 750c2a8b..c7bf60a4 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -20,14 +20,14 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" + "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/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" ) // BlockGen creates blocks for testing. @@ -102,8 +102,8 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { if b.gasPool == nil { b.SetCoinbase(common.Address{}) } - b.statedb.Prepare(tx.Hash(), common.Hash{}, len(b.txs)) - receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}) + b.statedb.Prepare(tx.Hash(), len(b.txs)) + receipt, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}) if err != nil { panic(err) } @@ -111,6 +111,11 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { b.receipts = append(b.receipts, receipt) } +// GetBalance returns the balance of the given address at the generated block. +func (b *BlockGen) GetBalance(addr common.Address) *big.Int { + return b.statedb.GetBalance(addr) +} + // AddUncheckedTx forcefully adds a transaction to the block without any // validation. // @@ -125,6 +130,11 @@ func (b *BlockGen) Number() *big.Int { return new(big.Int).Set(b.header.Number) } +// BaseFee returns the EIP-1559 base fee of the block being generated. +func (b *BlockGen) BaseFee() *big.Int { + return new(big.Int).Set(b.header.BaseFee) +} + // AddUncheckedReceipt forcefully adds a receipts to the block without a // backing transaction. // @@ -145,6 +155,28 @@ func (b *BlockGen) TxNonce(addr common.Address) uint64 { // AddUncle adds an uncle header to the generated block. func (b *BlockGen) AddUncle(h *types.Header) { + // The uncle will have the same timestamp and auto-generated difficulty + h.Time = b.header.Time + + var parent *types.Header + for i := b.i - 1; i >= 0; i-- { + if b.chain[i].Hash() == h.ParentHash { + parent = b.chain[i].Header() + break + } + } + chainreader := &fakeChainReader{config: b.config} + h.Difficulty = b.engine.CalcDifficulty(chainreader, b.header.Time, parent) + + // The gas limit and price should be derived from the parent + h.GasLimit = parent.GasLimit + if b.config.IsLondon(h.Number) { + h.BaseFee = misc.CalcBaseFee(b.config, parent) + if !b.config.IsLondon(parent.Number) { + parentGasLimit := parent.GasLimit * params.ElasticityMultiplier + h.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit) + } + } b.uncles = append(b.uncles, h) } @@ -195,6 +227,18 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse b := &BlockGen{i: i, chain: blocks, parent: parent, statedb: statedb, config: config, engine: engine} b.header = makeHeader(chainreader, parent, statedb, b.engine) + // Set the difficulty for clique block. The chain maker doesn't have access + // to a chain, so the difficulty will be left unset (nil). Set it here to the + // correct value. + if b.header.Difficulty == nil { + if config.TerminalTotalDifficulty == nil { + // Clique chain + b.header.Difficulty = big.NewInt(2) + } else { + // Post-merge chain + b.header.Difficulty = big.NewInt(0) + } + } // Mutate the state and block according to any hard-fork specs if daoBlock := config.DAOForkBlock; daoBlock != nil { limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) @@ -220,7 +264,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if err != nil { panic(fmt.Sprintf("state write error: %v", err)) } - if err := statedb.Database().TrieDB().Commit(root, false); err != nil { + if err := statedb.Database().TrieDB().Commit(root, false, nil); err != nil { panic(fmt.Sprintf("trie write error: %v", err)) } return block, b.receipts @@ -228,7 +272,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse return nil, nil } for i := 0; i < n; i++ { - statedb, err := state.New(parent.Root(), state.NewDatabase(db)) + statedb, err := state.New(parent.Root(), state.NewDatabase(db), nil) if err != nil { panic(err) } @@ -247,8 +291,7 @@ func makeHeader(chain consensus.ChainReader, parent *types.Block, state *state.S } else { time = parent.Time() + 10 // block time is fixed at 10 seconds } - - return &types.Header{ + header := &types.Header{ Root: state.IntermediateRoot(chain.Config().IsEIP158(parent.Number())), ParentHash: parent.Hash(), Coinbase: parent.Coinbase(), @@ -258,10 +301,18 @@ func makeHeader(chain consensus.ChainReader, parent *types.Block, state *state.S Difficulty: parent.Difficulty(), UncleHash: parent.UncleHash(), }), - GasLimit: CalcGasLimit(parent, parent.GasLimit(), parent.GasLimit()), + GasLimit: parent.GasLimit(), Number: new(big.Int).Add(parent.Number(), common.Big1), Time: time, } + if chain.Config().IsLondon(header.Number) { + header.BaseFee = misc.CalcBaseFee(chain.Config(), parent.Header()) + if !chain.Config().IsLondon(parent.Number()) { + parentGasLimit := parent.GasLimit() * params.ElasticityMultiplier + header.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit) + } + } + return header } // makeHeaderChain creates a deterministic chain of headers rooted at parent. @@ -283,8 +334,7 @@ func makeBlockChain(parent *types.Block, n int, engine consensus.Engine, db ethd } type fakeChainReader struct { - config *params.ChainConfig - genesis *types.Block + config *params.ChainConfig } // Config returns the chain configuration. @@ -297,3 +347,4 @@ func (cr *fakeChainReader) GetHeaderByNumber(number uint64) *types.Header func (cr *fakeChainReader) GetHeaderByHash(hash common.Hash) *types.Header { return nil } func (cr *fakeChainReader) GetHeader(hash common.Hash, number uint64) *types.Header { return nil } func (cr *fakeChainReader) GetBlock(hash common.Hash, number uint64) *types.Block { return nil } +func (cr *fakeChainReader) GetTd(hash common.Hash, number uint64) *big.Int { return nil } diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index 3bf7f0c3..166ac3f2 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -20,12 +20,12 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) func ExampleGenerateChain() { @@ -79,7 +79,7 @@ func ExampleGenerateChain() { }) // Import the chain. This runs all block validation rules. - blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + blockchain, _ := NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer blockchain.Stop() if i, err := blockchain.InsertChain(chain); err != nil { diff --git a/core/dao_test.go b/core/dao_test.go index 44766c0d..8089b547 100644 --- a/core/dao_test.go +++ b/core/dao_test.go @@ -20,42 +20,55 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) // Tests that DAO-fork enabled clients can properly filter out fork-commencing // blocks based on their extradata fields. func TestDAOForkRangeExtradata(t *testing.T) { forkBlock := big.NewInt(32) + chainConfig := *params.NonActivatedConfig + chainConfig.HomesteadBlock = big.NewInt(0) // Generate a common prefix for both pro-forkers and non-forkers db := rawdb.NewMemoryDatabase() - gspec := new(Genesis) + gspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: &chainConfig, + } genesis := gspec.MustCommit(db) - prefix, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) + prefix, _ := GenerateChain(&chainConfig, genesis, ethash.NewFaker(), db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) // Create the concurrent, conflicting two nodes proDb := rawdb.NewMemoryDatabase() - gspec.MustCommit(proDb) - - proConf := *params.TestChainConfig + proConf := *params.NonActivatedConfig + proConf.HomesteadBlock = big.NewInt(0) proConf.DAOForkBlock = forkBlock proConf.DAOForkSupport = true + progspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: &proConf, + } + gspec.MustCommit(proDb) - proBc, _ := NewBlockChain(proDb, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) + proBc, _ := NewBlockChain(proDb, nil, progspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer proBc.Stop() conDb := rawdb.NewMemoryDatabase() - gspec.MustCommit(conDb) - - conConf := *params.TestChainConfig + conConf := *params.NonActivatedConfig + conConf.HomesteadBlock = big.NewInt(0) conConf.DAOForkBlock = forkBlock conConf.DAOForkSupport = false + congspec := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: &conConf, + } + gspec.MustCommit(conDb) - conBc, _ := NewBlockChain(conDb, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) + conBc, _ := NewBlockChain(conDb, nil, congspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer conBc.Stop() if _, err := proBc.InsertChain(prefix); err != nil { @@ -68,8 +81,8 @@ func TestDAOForkRangeExtradata(t *testing.T) { for i := int64(0); i < params.DAOForkExtraRange.Int64(); i++ { // Create a pro-fork block, and try to feed into the no-fork chain db = rawdb.NewMemoryDatabase() - gspec.MustCommit(db) - bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) + congspec.MustCommit(db) + bc, _ := NewBlockChain(db, nil, congspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer bc.Stop() blocks := conBc.GetBlocksFromHash(conBc.CurrentBlock().Hash(), int(conBc.CurrentBlock().NumberU64())) @@ -79,7 +92,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { if _, err := bc.InsertChain(blocks); err != nil { t.Fatalf("failed to import contra-fork chain for expansion: %v", err) } - if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true); err != nil { + if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true, nil); err != nil { t.Fatalf("failed to commit contra-fork head for expansion: %v", err) } blocks, _ = GenerateChain(&proConf, conBc.CurrentBlock(), ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) @@ -93,8 +106,8 @@ func TestDAOForkRangeExtradata(t *testing.T) { } // Create a no-fork block, and try to feed into the pro-fork chain db = rawdb.NewMemoryDatabase() - gspec.MustCommit(db) - bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) + progspec.MustCommit(db) + bc, _ = NewBlockChain(db, nil, progspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer bc.Stop() blocks = proBc.GetBlocksFromHash(proBc.CurrentBlock().Hash(), int(proBc.CurrentBlock().NumberU64())) @@ -104,7 +117,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { if _, err := bc.InsertChain(blocks); err != nil { t.Fatalf("failed to import pro-fork chain for expansion: %v", err) } - if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true); err != nil { + if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true, nil); err != nil { t.Fatalf("failed to commit pro-fork head for expansion: %v", err) } blocks, _ = GenerateChain(&conConf, proBc.CurrentBlock(), ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) @@ -119,8 +132,8 @@ func TestDAOForkRangeExtradata(t *testing.T) { } // Verify that contra-forkers accept pro-fork extra-datas after forking finishes db = rawdb.NewMemoryDatabase() - gspec.MustCommit(db) - bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) + congspec.MustCommit(db) + bc, _ := NewBlockChain(db, nil, congspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer bc.Stop() blocks := conBc.GetBlocksFromHash(conBc.CurrentBlock().Hash(), int(conBc.CurrentBlock().NumberU64())) @@ -130,7 +143,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { if _, err := bc.InsertChain(blocks); err != nil { t.Fatalf("failed to import contra-fork chain for expansion: %v", err) } - if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true); err != nil { + if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true, nil); err != nil { t.Fatalf("failed to commit contra-fork head for expansion: %v", err) } blocks, _ = GenerateChain(&proConf, conBc.CurrentBlock(), ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) @@ -139,8 +152,8 @@ func TestDAOForkRangeExtradata(t *testing.T) { } // Verify that pro-forkers accept contra-fork extra-datas after forking finishes db = rawdb.NewMemoryDatabase() - gspec.MustCommit(db) - bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) + progspec.MustCommit(db) + bc, _ = NewBlockChain(db, nil, progspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) defer bc.Stop() blocks = proBc.GetBlocksFromHash(proBc.CurrentBlock().Hash(), int(proBc.CurrentBlock().NumberU64())) @@ -150,7 +163,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { if _, err := bc.InsertChain(blocks); err != nil { t.Fatalf("failed to import pro-fork chain for expansion: %v", err) } - if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true); err != nil { + if err := bc.stateCache.TrieDB().Commit(bc.CurrentHeader().Root, true, nil); err != nil { t.Fatalf("failed to commit pro-fork head for expansion: %v", err) } blocks, _ = GenerateChain(&conConf, proBc.CurrentBlock(), ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) diff --git a/core/error.go b/core/error.go index cd4be3d7..5b69c8dc 100644 --- a/core/error.go +++ b/core/error.go @@ -16,23 +16,84 @@ package core -import "errors" +import ( + "errors" + + "github.com/ethereum/go-ethereum/core/types" +) var ( // ErrKnownBlock is returned when a block to import is already known locally. ErrKnownBlock = errors.New("block already known") - // ErrGasLimitReached is returned by the gas pool if the amount of gas required - // by a transaction is higher than what's left in the block. - ErrGasLimitReached = errors.New("gas limit reached") + // ErrBannedHash is returned if a block to import is on the banned list. + ErrBannedHash = errors.New("banned hash") + + // ErrNoGenesis is returned when there is no Genesis Block. + ErrNoGenesis = errors.New("genesis not found in chain") - // ErrBlacklistedHash is returned if a block to import is on the blacklist. - ErrBlacklistedHash = errors.New("blacklisted hash") + errSideChainReceipts = errors.New("side blocks can't be accepted as ancient chain data") +) + +// List of evm-call-message pre-checking errors. All state transition messages will +// be pre-checked before execution. If any invalidation detected, the corresponding +// error should be returned which is defined here. +// +// - If the pre-checking happens in the miner, then the transaction won't be packed. +// - If the pre-checking happens in the block processing procedure, then a "BAD BLOCk" +// error should be emitted. +var ( + // ErrNonceTooLow is returned if the nonce of a transaction is lower than the + // one present in the local chain. + ErrNonceTooLow = errors.New("nonce too low") // 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") + // ErrNonceMax is returned if the nonce of a transaction sender account has + // maximum allowed value and would become invalid if incremented. + ErrNonceMax = errors.New("nonce has max value") + + // ErrGasLimitReached is returned by the gas pool if the amount of gas required + // by a transaction is higher than what's left in the block. + ErrGasLimitReached = errors.New("gas limit reached") + + // ErrInsufficientFundsForTransfer is returned if the transaction sender doesn't + // have enough funds for transfer(topmost call only). + ErrInsufficientFundsForTransfer = errors.New("insufficient funds for transfer") + + // ErrInsufficientFunds is returned if the total cost of executing a transaction + // is higher than the balance of the user's account. + ErrInsufficientFunds = errors.New("insufficient funds for gas * price + value") + + // ErrGasUintOverflow is returned when calculating gas usage. + ErrGasUintOverflow = errors.New("gas uint64 overflow") + + // ErrIntrinsicGas is returned if the transaction is specified to use less gas + // than required to start the invocation. + ErrIntrinsicGas = errors.New("intrinsic gas too low") + + // ErrTxTypeNotSupported is returned if a transaction is not supported in the + // current network configuration. + ErrTxTypeNotSupported = types.ErrTxTypeNotSupported + + // ErrTipAboveFeeCap is a sanity error to ensure no one is able to specify a + // transaction with a tip higher than the total fee cap. + ErrTipAboveFeeCap = errors.New("max priority fee per gas higher than max fee per gas") + + // ErrTipVeryHigh is a sanity error to avoid extremely big numbers specified + // in the tip field. + ErrTipVeryHigh = errors.New("max priority fee per gas higher than 2^256-1") + + // ErrFeeCapVeryHigh is a sanity error to avoid extremely big numbers specified + // in the fee cap field. + ErrFeeCapVeryHigh = errors.New("max fee per gas higher than 2^256-1") + + // ErrFeeCapTooLow is returned if the transaction fee cap is less than the + // base fee of the block. + ErrFeeCapTooLow = errors.New("max fee per gas less than block base fee") + + // ErrSenderNoEOA is returned if the sender of a transaction is a contract. + ErrSenderNoEOA = errors.New("sender not an eoa") ) diff --git a/core/events.go b/core/events.go index 52490f75..ac935a13 100644 --- a/core/events.go +++ b/core/events.go @@ -17,18 +17,13 @@ package core import ( - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // NewTxsEvent is posted when a batch of transactions enter the transaction pool. type NewTxsEvent struct{ Txs []*types.Transaction } -// PendingLogsEvent is posted pre mining and notifies of pending logs. -type PendingLogsEvent struct { - Logs []*types.Log -} - // NewMinedBlockEvent is posted when a block has been imported. type NewMinedBlockEvent struct{ Block *types.Block } diff --git a/core/evm.go b/core/evm.go index bea7b066..e929da25 100644 --- a/core/evm.go +++ b/core/evm.go @@ -19,10 +19,10 @@ package core import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" ) // ChainContext supports retrieving headers and consensus parameters from the @@ -31,53 +31,85 @@ type ChainContext interface { // Engine retrieves the chain's consensus engine. Engine() consensus.Engine - // GetHeader returns the hash corresponding to their hash. + // GetHeader returns the header corresponding to the hash/number argument pair. GetHeader(common.Hash, uint64) *types.Header } -// NewEVMContext creates a new context for use in the EVM. -func NewEVMContext(msg Message, header *types.Header, chain ChainContext, author *common.Address) vm.Context { +// NewEVMBlockContext creates a new context for use in the EVM. +func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common.Address) vm.BlockContext { + var ( + beneficiary common.Address + baseFee *big.Int + random *common.Hash + ) + // If we don't have an explicit author (i.e. not mining), extract from the header - var beneficiary common.Address if author == nil { beneficiary, _ = chain.Engine().Author(header) // Ignore error, we're past header validation } else { beneficiary = *author } - return vm.Context{ + if header.BaseFee != nil { + baseFee = new(big.Int).Set(header.BaseFee) + } + if header.Difficulty.Cmp(common.Big0) == 0 { + random = &header.MixDigest + } + return vm.BlockContext{ CanTransfer: CanTransfer, Transfer: Transfer, GetHash: GetHashFn(header, chain), - Origin: msg.From(), Coinbase: beneficiary, BlockNumber: new(big.Int).Set(header.Number), Time: new(big.Int).SetUint64(header.Time), Difficulty: new(big.Int).Set(header.Difficulty), + BaseFee: baseFee, GasLimit: header.GasLimit, - GasPrice: new(big.Int).Set(msg.GasPrice()), + Random: random, + } +} + +// NewEVMTxContext creates a new transaction context for a single transaction. +func NewEVMTxContext(msg Message) vm.TxContext { + return vm.TxContext{ + Origin: msg.From(), + GasPrice: new(big.Int).Set(msg.GasPrice()), } } // GetHashFn returns a GetHashFunc which retrieves header hashes by number func GetHashFn(ref *types.Header, chain ChainContext) func(n uint64) common.Hash { - var cache map[uint64]common.Hash + // Cache will initially contain [refHash.parent], + // Then fill up with [refHash.p, refHash.pp, refHash.ppp, ...] + var cache []common.Hash return func(n uint64) common.Hash { + if ref.Number.Uint64() <= n { + // This situation can happen if we're doing tracing and using + // block overrides. + return common.Hash{} + } // If there's no hash cache yet, make one - if cache == nil { - cache = map[uint64]common.Hash{ - ref.Number.Uint64() - 1: ref.ParentHash, - } + if len(cache) == 0 { + cache = append(cache, ref.ParentHash) } - // Try to fulfill the request from the cache - if hash, ok := cache[n]; ok { - return hash + if idx := ref.Number.Uint64() - n - 1; idx < uint64(len(cache)) { + return cache[idx] } - // Not cached, iterate the blocks and cache the hashes - for header := chain.GetHeader(ref.ParentHash, ref.Number.Uint64()-1); header != nil; header = chain.GetHeader(header.ParentHash, header.Number.Uint64()-1) { - cache[header.Number.Uint64()-1] = header.ParentHash - if n == header.Number.Uint64()-1 { - return header.ParentHash + // No luck in the cache, but we can start iterating from the last element we already know + lastKnownHash := cache[len(cache)-1] + lastKnownNumber := ref.Number.Uint64() - uint64(len(cache)) + + for { + header := chain.GetHeader(lastKnownHash, lastKnownNumber) + if header == nil { + break + } + cache = append(cache, header.ParentHash) + lastKnownHash = header.ParentHash + lastKnownNumber = header.Number.Uint64() - 1 + if n == lastKnownNumber { + return lastKnownHash } } return common.Hash{} diff --git a/core/forkchoice.go b/core/forkchoice.go new file mode 100644 index 00000000..b0dbb200 --- /dev/null +++ b/core/forkchoice.go @@ -0,0 +1,108 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + crand "crypto/rand" + "errors" + "math/big" + mrand "math/rand" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +// ChainReader defines a small collection of methods needed to access the local +// blockchain during header verification. It's implemented by both blockchain +// and lightchain. +type ChainReader interface { + // Config retrieves the header chain's chain configuration. + Config() *params.ChainConfig + + // GetTd returns the total difficulty of a local block. + GetTd(common.Hash, uint64) *big.Int +} + +// ForkChoice is the fork chooser based on the highest total difficulty of the +// chain(the fork choice used in the eth1) and the external fork choice (the fork +// choice used in the eth2). This main goal of this ForkChoice is not only for +// offering fork choice during the eth1/2 merge phase, but also keep the compatibility +// for all other proof-of-work networks. +type ForkChoice struct { + chain ChainReader + rand *mrand.Rand + + // preserve is a helper function used in td fork choice. + // Miners will prefer to choose the local mined block if the + // local td is equal to the extern one. It can be nil for light + // client + preserve func(header *types.Header) bool +} + +func NewForkChoice(chainReader ChainReader, preserve func(header *types.Header) bool) *ForkChoice { + // Seed a fast but crypto originating random generator + seed, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) + if err != nil { + log.Crit("Failed to initialize random seed", "err", err) + } + return &ForkChoice{ + chain: chainReader, + rand: mrand.New(mrand.NewSource(seed.Int64())), + preserve: preserve, + } +} + +// ReorgNeeded returns whether the reorg should be applied +// based on the given external header and local canonical chain. +// In the td mode, the new head is chosen if the corresponding +// total difficulty is higher. In the extern mode, the trusted +// header is always selected as the head. +func (f *ForkChoice) ReorgNeeded(current *types.Header, header *types.Header) (bool, error) { + var ( + localTD = f.chain.GetTd(current.Hash(), current.Number.Uint64()) + externTd = f.chain.GetTd(header.Hash(), header.Number.Uint64()) + ) + if localTD == nil || externTd == nil { + return false, errors.New("missing td") + } + // Accept the new header as the chain head if the transition + // is already triggered. We assume all the headers after the + // transition come from the trusted consensus layer. + if ttd := f.chain.Config().TerminalTotalDifficulty; ttd != nil && ttd.Cmp(externTd) <= 0 { + return true, nil + } + // If the total difficulty is higher than our known, add it to the canonical chain + // Second clause in the if statement reduces the vulnerability to selfish mining. + // Please refer to http://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf + reorg := externTd.Cmp(localTD) > 0 + if !reorg && externTd.Cmp(localTD) == 0 { + number, headNumber := header.Number.Uint64(), current.Number.Uint64() + if number < headNumber { + reorg = true + } else if number == headNumber { + var currentPreserve, externPreserve bool + if f.preserve != nil { + currentPreserve, externPreserve = f.preserve(current), f.preserve(header) + } + reorg = !currentPreserve && (externPreserve || f.rand.Float64() < 0.5) + } + } + return reorg, nil +} diff --git a/core/forkid/forkid.go b/core/forkid/forkid.go index 1f300d73..f56ce85f 100644 --- a/core/forkid/forkid.go +++ b/core/forkid/forkid.go @@ -26,10 +26,10 @@ import ( "reflect" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) var ( @@ -44,25 +44,29 @@ var ( ErrLocalIncompatibleOrStale = errors.New("local incompatible or needs update") ) +// Blockchain defines all necessary method to build a forkID. +type Blockchain interface { + // Config retrieves the chain's fork configuration. + Config() *params.ChainConfig + + // Genesis retrieves the chain's genesis block. + Genesis() *types.Block + + // CurrentHeader retrieves the current head header of the canonical chain. + CurrentHeader() *types.Header +} + // 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(), - ) -} +// Filter is a fork id filter to validate a remotely advertised ID. +type Filter func(id ID) error -// 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 { +// NewID calculates the Ethereum fork ID from the chain config, genesis hash, and head. +func NewID(config *params.ChainConfig, genesis common.Hash, head uint64) ID { // Calculate the starting checksum from the genesis hash hash := crc32.ChecksumIEEE(genesis[:]) @@ -80,9 +84,18 @@ func newID(config *params.ChainConfig, genesis common.Hash, head uint64) ID { return ID{Hash: checksumToBytes(hash), Next: next} } -// NewFilter creates an filter that returns if a fork ID should be rejected or not +// NewIDWithChain calculates the Ethereum fork ID from an existing chain instance. +func NewIDWithChain(chain Blockchain) ID { + return NewID( + chain.Config(), + chain.Genesis().Hash(), + chain.CurrentHeader().Number.Uint64(), + ) +} + +// NewFilter creates a 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 { +func NewFilter(chain Blockchain) Filter { return newFilter( chain.Config(), chain.Genesis().Hash(), @@ -92,10 +105,16 @@ func NewFilter(chain *core.BlockChain) func(id ID) error { ) } +// NewStaticFilter creates a filter at block zero. +func NewStaticFilter(config *params.ChainConfig, genesis common.Hash) Filter { + head := func() uint64 { return 0 } + return newFilter(config, genesis, head) +} + // 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 { +func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() uint64) Filter { // Calculate the all the valid fork hash and fork next combos var ( forks = gatherForks(config) @@ -114,10 +133,13 @@ func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() ui // 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. + // 1. If local and remote FORK_CSUM matches, compare local head to FORK_NEXT. // 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). + // 1a. A remotely announced but remotely not passed block is already passed + // locally, disconnect, since the chains are incompatible. + // 1b. No remotely announced fork; or not yet passed locally, connect. // 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. @@ -133,13 +155,18 @@ func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() ui 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 { + 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 + // Fork checksum matched, check if a remote future fork block already passed + // locally without the local node being aware of it (rule #1a). + if id.Next > 0 && head >= id.Next { + return ErrLocalIncompatibleOrStale + } + // Haven't passed locally a remote-only fork, accept the connection (rule #1b). return nil } // The local and remote nodes are in different forks currently, check if the @@ -169,13 +196,6 @@ func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() ui } } -// 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 { @@ -213,7 +233,7 @@ func gatherForks(config *params.ChainConfig) []uint64 { forks = append(forks, rule.Uint64()) } } - // Sort the fork block numbers to permit chronologival XOR + // Sort the fork block numbers to permit chronological XOR for i := 0; i < len(forks); i++ { for j := i + 1; j < len(forks); j++ { if forks[i] > forks[j] { diff --git a/core/forkid/forkid_test.go b/core/forkid/forkid_test.go index f92a8f06..2a0fb167 100644 --- a/core/forkid/forkid_test.go +++ b/core/forkid/forkid_test.go @@ -19,16 +19,19 @@ package forkid import ( "bytes" "math" + "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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) { + mergeConfig := *params.MainnetChainConfig + mergeConfig.MergeNetsplitBlock = big.NewInt(18000000) type testcase struct { head uint64 want ID @@ -43,37 +46,57 @@ func TestCreation(t *testing.T) { 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 + {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: 9069000}}, // First and last Constantinople, first Petersburg block + {9068999, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // Last Petersburg block + {9069000, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // First Istanbul and first Muir Glacier block + {9199999, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // Last Istanbul and first Muir Glacier block + {9200000, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // First Muir Glacier block + {12243999, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // Last Muir Glacier block + {12244000, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // First Berlin block + {12964999, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // Last Berlin block + {12965000, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // First London block + {13772999, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // Last London block + {13773000, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // First Arrow Glacier block + {15049999, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // Last Arrow Glacier block + {15050000, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 0}}, // First Gray Glacier block + {20000000, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 0}}, // Future Gray Glacier block }, }, // Ropsten test cases { - params.TestnetChainConfig, - params.TestnetGenesisHash, + params.RopstenChainConfig, + params.RopstenGenesisHash, []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: 0}}, // First Petersburg block - {5822692, ID{Hash: checksumToBytes(0xd6e2149b), Next: 0}}, // Today Petersburg block + {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: 7117117}}, // First Istanbul block + {7117116, ID{Hash: checksumToBytes(0x4bc66396), Next: 7117117}}, // Last Istanbul block + {7117117, ID{Hash: checksumToBytes(0x6727ef90), Next: 9812189}}, // First Muir Glacier block + {9812188, ID{Hash: checksumToBytes(0x6727ef90), Next: 9812189}}, // Last Muir Glacier block + {9812189, ID{Hash: checksumToBytes(0xa157d377), Next: 10499401}}, // First Berlin block + {10499400, ID{Hash: checksumToBytes(0xa157d377), Next: 10499401}}, // Last Berlin block + {10499401, ID{Hash: checksumToBytes(0x7119b6b3), Next: 0}}, // First London block + {11000000, ID{Hash: checksumToBytes(0x7119b6b3), Next: 0}}, // Future London block }, }, // Rinkeby test cases @@ -90,8 +113,14 @@ func TestCreation(t *testing.T) { {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: 0}}, // First Petersburg block - {4586649, ID{Hash: checksumToBytes(0xafec6b27), Next: 0}}, // Today Petersburg 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: 8290928}}, // First Istanbul block + {8290927, ID{Hash: checksumToBytes(0xcbdb8838), Next: 8290928}}, // Last Istanbul block + {8290928, ID{Hash: checksumToBytes(0x6910c8bd), Next: 8897988}}, // First Berlin block + {8897987, ID{Hash: checksumToBytes(0x6910c8bd), Next: 8897988}}, // Last Berlin block + {8897988, ID{Hash: checksumToBytes(0x8E29F2F3), Next: 0}}, // First London block + {10000000, ID{Hash: checksumToBytes(0x8E29F2F3), Next: 0}}, // Future London block }, }, // Goerli test cases @@ -99,14 +128,64 @@ func TestCreation(t *testing.T) { params.GoerliChainConfig, params.GoerliGenesisHash, []testcase{ - {0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 0}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block - {795329, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 0}}, // Today Petersburg block + {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: 4460644}}, // First Istanbul block + {4460643, ID{Hash: checksumToBytes(0xc25efa5c), Next: 4460644}}, // Last Istanbul block + {4460644, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // First Berlin block + {5000000, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // Last Berlin block + {5062605, ID{Hash: checksumToBytes(0xB8C6299D), Next: 0}}, // First London block + {6000000, ID{Hash: checksumToBytes(0xB8C6299D), Next: 0}}, // Future London block + }, + }, + // Sepolia test cases + { + params.SepoliaChainConfig, + params.SepoliaGenesisHash, + []testcase{ + {0, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople, Petersburg, Istanbul, Berlin and first London block + {1735370, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Last London block + {1735371, ID{Hash: checksumToBytes(0xb96cbd13), Next: 0}}, // First MergeNetsplit block + }, + }, + // Merge test cases + { + &mergeConfig, + 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: 9069000}}, // First and last Constantinople, first Petersburg block + {9068999, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // Last Petersburg block + {9069000, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // First Istanbul and first Muir Glacier block + {9199999, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // Last Istanbul and first Muir Glacier block + {9200000, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // First Muir Glacier block + {12243999, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // Last Muir Glacier block + {12244000, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // First Berlin block + {12964999, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // Last Berlin block + {12965000, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // First London block + {13772999, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // Last London block + {13773000, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // First Arrow Glacier block + {15049999, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // Last Arrow Glacier block + {15050000, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 18000000}}, // First Gray Glacier block + {18000000, ID{Hash: checksumToBytes(0x4fb8a872), Next: 0}}, // First Merge Start block + {20000000, ID{Hash: checksumToBytes(0x4fb8a872), Next: 0}}, // Future Merge Start block }, }, } for i, tt := range tests { for j, ttt := range tt.cases { - if have := newID(tt.config, tt.genesis, ttt.head); have != ttt.want { + 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) } } @@ -143,9 +222,13 @@ func TestValidation(t *testing.T) { // 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 exactly on Petersburg, remote announces Byzantium + knowledge about Petersburg. Remote + // is simply out of sync, accept. + {7280000, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}, 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}, + {7987396, ID{Hash: checksumToBytes(0xa00bc324), 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. @@ -172,6 +255,16 @@ func TestValidation(t *testing.T) { // Local is mainnet Petersburg, remote is Rinkeby Petersburg. {7987396, ID{Hash: checksumToBytes(0xafec6b27), Next: 0}, ErrLocalIncompatibleOrStale}, + + // Local is mainnet Gray Glacier, far in the future. Remote announces Gopherium (non existing fork) + // at some future block 88888888, for itself, but past block for local. Local is incompatible. + // + // This case detects non-upgraded nodes with majority hash power (typical Ropsten mess). + {88888888, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 88888888}, ErrLocalIncompatibleOrStale}, + + // Local is mainnet Byzantium. Remote is also in Byzantium, but announces Gopherium (non existing + // fork) at block 7279999, before Petersburg. Local is incompatible. + {7279999, ID{Hash: checksumToBytes(0xa00bc324), Next: 7279999}, ErrLocalIncompatibleOrStale}, } for i, tt := range tests { filter := newFilter(params.MainnetChainConfig, params.MainnetGenesisHash, func() uint64 { return tt.head }) diff --git a/core/gen_genesis.go b/core/gen_genesis.go index 346f0ee8..4e0844e8 100644 --- a/core/gen_genesis.go +++ b/core/gen_genesis.go @@ -7,14 +7,15 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) var _ = (*genesisSpecMarshaling)(nil) +// MarshalJSON marshals as JSON. func (g Genesis) MarshalJSON() ([]byte, error) { type Genesis struct { Config *params.ChainConfig `json:"config"` @@ -29,6 +30,7 @@ func (g Genesis) MarshalJSON() ([]byte, error) { Number math.HexOrDecimal64 `json:"number"` GasUsed math.HexOrDecimal64 `json:"gasUsed"` ParentHash common.Hash `json:"parentHash"` + BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` } var enc Genesis enc.Config = g.Config @@ -48,9 +50,11 @@ func (g Genesis) MarshalJSON() ([]byte, error) { enc.Number = math.HexOrDecimal64(g.Number) enc.GasUsed = math.HexOrDecimal64(g.GasUsed) enc.ParentHash = g.ParentHash + enc.BaseFee = (*math.HexOrDecimal256)(g.BaseFee) return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (g *Genesis) UnmarshalJSON(input []byte) error { type Genesis struct { Config *params.ChainConfig `json:"config"` @@ -65,6 +69,7 @@ func (g *Genesis) UnmarshalJSON(input []byte) error { Number *math.HexOrDecimal64 `json:"number"` GasUsed *math.HexOrDecimal64 `json:"gasUsed"` ParentHash *common.Hash `json:"parentHash"` + BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` } var dec Genesis if err := json.Unmarshal(input, &dec); err != nil { @@ -112,5 +117,8 @@ func (g *Genesis) UnmarshalJSON(input []byte) error { if dec.ParentHash != nil { g.ParentHash = *dec.ParentHash } + if dec.BaseFee != nil { + g.BaseFee = (*big.Int)(dec.BaseFee) + } return nil } diff --git a/core/gen_genesis_account.go b/core/gen_genesis_account.go index 0f766d5d..a9d47e6b 100644 --- a/core/gen_genesis_account.go +++ b/core/gen_genesis_account.go @@ -7,13 +7,14 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" ) var _ = (*genesisAccountMarshaling)(nil) +// MarshalJSON marshals as JSON. func (g GenesisAccount) MarshalJSON() ([]byte, error) { type GenesisAccount struct { Code hexutil.Bytes `json:"code,omitempty"` @@ -36,6 +37,7 @@ func (g GenesisAccount) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (g *GenesisAccount) UnmarshalJSON(input []byte) error { type GenesisAccount struct { Code *hexutil.Bytes `json:"code,omitempty"` diff --git a/core/genesis.go b/core/genesis.go index e1aecc86..5b5b9c72 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -25,21 +25,22 @@ import ( "math/big" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/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" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) -//go:generate gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go -//go:generate gencodec -type GenesisAccount -field-override genesisAccountMarshaling -out gen_genesis_account.go +//go:generate go run github.com/fjl/gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go +//go:generate go run github.com/fjl/gencodec -type GenesisAccount -field-override genesisAccountMarshaling -out gen_genesis_account.go var errGenesisNoConfig = errors.New("genesis has no chain configuration") @@ -61,6 +62,7 @@ type Genesis struct { Number uint64 `json:"number"` GasUsed uint64 `json:"gasUsed"` ParentHash common.Hash `json:"parentHash"` + BaseFee *big.Int `json:"baseFeePerGas"` } // GenesisAlloc specifies the initial state that is part of the genesis block. @@ -78,6 +80,96 @@ func (ga *GenesisAlloc) UnmarshalJSON(data []byte) error { return nil } +// deriveHash computes the state root according to the genesis specification. +func (ga *GenesisAlloc) deriveHash() (common.Hash, error) { + // Create an ephemeral in-memory database for computing hash, + // all the derived states will be discarded to not pollute disk. + db := state.NewDatabase(rawdb.NewMemoryDatabase()) + statedb, err := state.New(common.Hash{}, db, nil) + if err != nil { + return common.Hash{}, err + } + for addr, account := range *ga { + statedb.AddBalance(addr, account.Balance) + statedb.SetCode(addr, account.Code) + statedb.SetNonce(addr, account.Nonce) + for key, value := range account.Storage { + statedb.SetState(addr, key, value) + } + } + return statedb.Commit(false) +} + +// flush is very similar with deriveHash, but the main difference is +// all the generated states will be persisted into the given database. +// Also, the genesis state specification will be flushed as well. +func (ga *GenesisAlloc) flush(db ethdb.Database) error { + statedb, err := state.New(common.Hash{}, state.NewDatabaseWithConfig(db, &trie.Config{Preimages: true}), nil) + if err != nil { + return err + } + for addr, account := range *ga { + statedb.AddBalance(addr, account.Balance) + statedb.SetCode(addr, account.Code) + statedb.SetNonce(addr, account.Nonce) + for key, value := range account.Storage { + statedb.SetState(addr, key, value) + } + } + root, err := statedb.Commit(false) + if err != nil { + return err + } + err = statedb.Database().TrieDB().Commit(root, true, nil) + if err != nil { + return err + } + // Marshal the genesis state specification and persist. + blob, err := json.Marshal(ga) + if err != nil { + return err + } + rawdb.WriteGenesisStateSpec(db, root, blob) + return nil +} + +// CommitGenesisState loads the stored genesis state with the given block +// hash and commits them into the given database handler. +func CommitGenesisState(db ethdb.Database, hash common.Hash) error { + var alloc GenesisAlloc + blob := rawdb.ReadGenesisStateSpec(db, hash) + if len(blob) != 0 { + if err := alloc.UnmarshalJSON(blob); err != nil { + return err + } + } else { + // Genesis allocation is missing and there are several possibilities: + // the node is legacy which doesn't persist the genesis allocation or + // the persisted allocation is just lost. + // - supported networks(mainnet, testnets), recover with defined allocations + // - private network, can't recover + var genesis *Genesis + switch hash { + case params.MainnetGenesisHash: + genesis = DefaultGenesisBlock() + case params.RopstenGenesisHash: + genesis = DefaultRopstenGenesisBlock() + case params.RinkebyGenesisHash: + genesis = DefaultRinkebyGenesisBlock() + case params.GoerliGenesisHash: + genesis = DefaultGoerliGenesisBlock() + case params.SepoliaGenesisHash: + genesis = DefaultSepoliaGenesisBlock() + } + if genesis != nil { + alloc = genesis.Alloc + } else { + return errors.New("not found") + } + } + return alloc.flush(db) +} + // GenesisAccount is an account in the state of the genesis block. type GenesisAccount struct { Code []byte `json:"code,omitempty"` @@ -96,6 +188,7 @@ type genesisSpecMarshaling struct { GasUsed math.HexOrDecimal64 Number math.HexOrDecimal64 Difficulty *math.HexOrDecimal256 + BaseFee *math.HexOrDecimal256 Alloc map[common.UnprefixedAddress]GenesisAccount } @@ -118,7 +211,6 @@ func (h *storageJSON) UnmarshalText(text []byte) error { } offset := len(h) - len(text)/2 // pad on the left if _, err := hex.Decode(h[offset:], text); err != nil { - fmt.Println(err) return fmt.Errorf("invalid hex storage key/value %q", text) } return nil @@ -138,6 +230,12 @@ func (e *GenesisMismatchError) Error() string { return fmt.Sprintf("database contains incompatible genesis (have %x, new %x)", e.Stored, e.New) } +// ChainOverrides contains the changes to chain config. +type ChainOverrides struct { + OverrideTerminalTotalDifficulty *big.Int + OverrideTerminalTotalDifficultyPassed *bool +} + // SetupGenesisBlock writes or updates the genesis block in db. // The block that will be used is: // @@ -155,10 +253,22 @@ func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig return SetupGenesisBlockWithOverride(db, genesis, nil) } -func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrideIstanbul *big.Int) (*params.ChainConfig, common.Hash, error) { +func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrides *ChainOverrides) (*params.ChainConfig, common.Hash, error) { if genesis != nil && genesis.Config == nil { return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig } + + applyOverrides := func(config *params.ChainConfig) { + if config != nil { + if overrides != nil && overrides.OverrideTerminalTotalDifficulty != nil { + config.TerminalTotalDifficulty = overrides.OverrideTerminalTotalDifficulty + } + if overrides != nil && overrides.OverrideTerminalTotalDifficultyPassed != nil { + config.TerminalTotalDifficultyPassed = *overrides.OverrideTerminalTotalDifficultyPassed + } + } + } + // Just commit the new block if there is no stored genesis block. stored := rawdb.ReadCanonicalHash(db, 0) if (stored == common.Hash{}) { @@ -172,18 +282,18 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override if err != nil { return genesis.Config, common.Hash{}, err } + applyOverrides(genesis.Config) 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 _, err := state.New(header.Root, state.NewDatabaseWithConfig(db, nil), nil); err != nil { if genesis == nil { genesis = DefaultGenesisBlock() } // Ensure the stored genesis matches with the given one. - hash := genesis.ToBlock(nil).Hash() + hash := genesis.ToBlock().Hash() if hash != stored { return genesis.Config, hash, &GenesisMismatchError{stored, hash} } @@ -191,21 +301,21 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override if err != nil { return genesis.Config, hash, err } + applyOverrides(genesis.Config) return genesis.Config, block.Hash(), nil } - // Check whether the genesis block is already written. if genesis != nil { - hash := genesis.ToBlock(nil).Hash() + hash := genesis.ToBlock().Hash() if hash != stored { return genesis.Config, hash, &GenesisMismatchError{stored, hash} } } - // Get the existing chain configuration. newcfg := genesis.configOrDefault(stored) - if overrideIstanbul != nil { - newcfg.IstanbulBlock = overrideIstanbul + applyOverrides(newcfg) + if err := newcfg.CheckConfigForkOrder(); err != nil { + return newcfg, common.Hash{}, err } storedcfg := rawdb.ReadChainConfig(db, stored) if storedcfg == nil { @@ -213,13 +323,15 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override rawdb.WriteChainConfig(db, stored, newcfg) return newcfg, stored, nil } - // Special case: don't change the existing config of a non-mainnet chain if no new - // config is supplied. These chains would get AllProtocolChanges (and a compat error) - // if we just continued here. + // Special case: if a private network is being used (no genesis and also no + // mainnet hash in the database), we must not apply the `configOrDefault` + // chain config as that would be AllProtocolChanges (applying any new fork + // on top of an existing private network genesis block). In that case, only + // apply the overrides. if genesis == nil && stored != params.MainnetGenesisHash { - return storedcfg, stored, nil + newcfg = storedcfg + applyOverrides(newcfg) } - // Check config compatibility and write the config. Compatibility errors // are returned to the caller unless we're already at block zero. height := rawdb.ReadHeaderNumber(db, rawdb.ReadHeadHeaderHash(db)) @@ -234,35 +346,69 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, override return newcfg, stored, nil } +// LoadCliqueConfig loads the stored clique config if the chain config +// is already present in database, otherwise, return the config in the +// provided genesis specification. Note the returned clique config can +// be nil if we are not in the clique network. +func LoadCliqueConfig(db ethdb.Database, genesis *Genesis) (*params.CliqueConfig, error) { + // Load the stored chain config from the database. It can be nil + // in case the database is empty. Notably, we only care about the + // chain config corresponds to the canonical chain. + stored := rawdb.ReadCanonicalHash(db, 0) + if stored != (common.Hash{}) { + storedcfg := rawdb.ReadChainConfig(db, stored) + if storedcfg != nil { + return storedcfg.Clique, nil + } + } + // Load the clique config from the provided genesis specification. + if genesis != nil { + // Reject invalid genesis spec without valid chain config + if genesis.Config == nil { + return nil, errGenesisNoConfig + } + // If the canonical genesis header is present, but the chain + // config is missing(initialize the empty leveldb with an + // external ancient chain segment), ensure the provided genesis + // is matched. + if stored != (common.Hash{}) && genesis.ToBlock().Hash() != stored { + return nil, &GenesisMismatchError{stored, genesis.ToBlock().Hash()} + } + return genesis.Config.Clique, nil + } + // There is no stored chain config and no new config provided, + // In this case the default chain config(mainnet) will be used, + // namely ethash is the specified consensus engine, return nil. + return nil, nil +} + func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { switch { case g != nil: return g.Config case ghash == params.MainnetGenesisHash: return params.MainnetChainConfig - case ghash == params.TestnetGenesisHash: - return params.TestnetChainConfig + case ghash == params.RopstenGenesisHash: + return params.RopstenChainConfig + case ghash == params.SepoliaGenesisHash: + return params.SepoliaChainConfig + case ghash == params.RinkebyGenesisHash: + return params.RinkebyChainConfig + case ghash == params.GoerliGenesisHash: + return params.GoerliChainConfig + case ghash == params.KilnGenesisHash: + return DefaultKilnGenesisBlock().Config default: return params.AllEthashProtocolChanges } } -// ToBlock creates the genesis block and writes state of a genesis specification -// to the given database (or discards it if nil). -func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { - if db == nil { - db = rawdb.NewMemoryDatabase() - } - statedb, _ := state.New(common.Hash{}, state.NewDatabase(db)) - for addr, account := range g.Alloc { - statedb.AddBalance(addr, account.Balance) - statedb.SetCode(addr, account.Code) - statedb.SetNonce(addr, account.Nonce) - for key, value := range account.Storage { - statedb.SetState(addr, key, value) - } +// ToBlock returns the genesis block according to genesis specification. +func (g *Genesis) ToBlock() *types.Block { + root, err := g.Alloc.deriveHash() + if err != nil { + panic(err) } - root := statedb.IntermediateRoot(false) head := &types.Header{ Number: new(big.Int).SetUint64(g.Number), Nonce: types.EncodeNonce(g.Nonce), @@ -271,6 +417,7 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { Extra: g.ExtraData, GasLimit: g.GasLimit, GasUsed: g.GasUsed, + BaseFee: g.BaseFee, Difficulty: g.Difficulty, MixDigest: g.Mixhash, Coinbase: g.Coinbase, @@ -279,34 +426,49 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { if g.GasLimit == 0 { head.GasLimit = params.GenesisGasLimit } - if g.Difficulty == nil { + if g.Difficulty == nil && g.Mixhash == (common.Hash{}) { head.Difficulty = params.GenesisDifficulty } - statedb.Commit(false) - statedb.Database().TrieDB().Commit(root, true) - - return types.NewBlock(head, nil, nil, nil) + if g.Config != nil && g.Config.IsLondon(common.Big0) { + if g.BaseFee != nil { + head.BaseFee = g.BaseFee + } else { + head.BaseFee = new(big.Int).SetUint64(params.InitialBaseFee) + } + } + return types.NewBlock(head, nil, nil, nil, trie.NewStackTrie(nil)) } // Commit writes the block and state of a genesis specification to the database. // The block is committed as the canonical head block. func (g *Genesis) Commit(db ethdb.Database) (*types.Block, error) { - block := g.ToBlock(db) + block := g.ToBlock() if block.Number().Sign() != 0 { - return nil, fmt.Errorf("can't commit genesis block with number > 0") + return nil, errors.New("can't commit genesis block with number > 0") + } + config := g.Config + if config == nil { + config = params.AllEthashProtocolChanges + } + if err := config.CheckConfigForkOrder(); err != nil { + return nil, err } - rawdb.WriteTd(db, block.Hash(), block.NumberU64(), g.Difficulty) + if config.Clique != nil && len(block.Extra()) < 32+crypto.SignatureLength { + return nil, errors.New("can't start clique chain without signers") + } + // All the checks has passed, flush the states derived from the genesis + // specification as well as the specification itself into the provided + // database. + if err := g.Alloc.flush(db); err != nil { + return nil, err + } + rawdb.WriteTd(db, block.Hash(), block.NumberU64(), block.Difficulty()) rawdb.WriteBlock(db, block) 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 - if config == nil { - config = params.AllEthashProtocolChanges - } rawdb.WriteChainConfig(db, block.Hash(), config) return block, nil } @@ -321,12 +483,6 @@ func (g *Genesis) MustCommit(db ethdb.Database) *types.Block { return block } -// GenesisBlockForTesting creates and writes a block in which addr has the given wei balance. -func GenesisBlockForTesting(db ethdb.Database, addr common.Address, balance *big.Int) *types.Block { - g := Genesis{Alloc: GenesisAlloc{addr: {Balance: balance}}} - return g.MustCommit(db) -} - // DefaultGenesisBlock returns the Ethereum main net genesis block. func DefaultGenesisBlock() *Genesis { return &Genesis{ @@ -339,15 +495,15 @@ func DefaultGenesisBlock() *Genesis { } } -// DefaultTestnetGenesisBlock returns the Ropsten network genesis block. -func DefaultTestnetGenesisBlock() *Genesis { +// DefaultRopstenGenesisBlock returns the Ropsten network genesis block. +func DefaultRopstenGenesisBlock() *Genesis { return &Genesis{ - Config: params.TestnetChainConfig, + Config: params.RopstenChainConfig, Nonce: 66, ExtraData: hexutil.MustDecode("0x3535353535353535353535353535353535353535353535353535353535353535"), GasLimit: 16777216, Difficulty: big.NewInt(1048576), - Alloc: decodePrealloc(testnetAllocData), + Alloc: decodePrealloc(ropstenAllocData), } } @@ -375,317 +531,44 @@ func DefaultGoerliGenesisBlock() *Genesis { } } -// DefaultlveGenesisBlock returns the Görli network genesis block. -//change!! -func DefaultLveGenesisBlock() *Genesis { +// DefaultSepoliaGenesisBlock returns the Sepolia network genesis block. +func DefaultSepoliaGenesisBlock() *Genesis { return &Genesis{ - Config: params.LveChainConfig, - Nonce: 0, - Timestamp: 1651123670, - ExtraData: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000000"), - GasLimit: 4700000, - Difficulty: big.NewInt(524288), - Mixhash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - Coinbase: common.HexToAddress("0x0000000000000000000000000000000000000000"), - Number: 0, - GasUsed: 0, - ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - Alloc: map[common.Address]GenesisAccount{ - common.BytesToAddress([]byte{0}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{1}): {Balance: big.NewInt(1)}, // ECRecover - common.BytesToAddress([]byte{2}): {Balance: big.NewInt(1)}, // SHA256 - common.BytesToAddress([]byte{3}): {Balance: big.NewInt(1)}, // RIPEMD - common.BytesToAddress([]byte{4}): {Balance: big.NewInt(1)}, // Identity - common.BytesToAddress([]byte{5}): {Balance: big.NewInt(1)}, // ModExp - common.BytesToAddress([]byte{6}): {Balance: big.NewInt(1)}, // ECAdd - common.BytesToAddress([]byte{7}): {Balance: big.NewInt(1)}, // ECScalarMul - common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, // ECPairing - common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{9}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{10}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{11}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{12}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{13}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{14}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{15}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{16}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{17}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{18}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{19}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{20}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{21}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{22}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{23}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{24}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{25}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{26}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{27}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{28}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{29}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{30}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{31}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{32}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{33}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{34}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{35}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{36}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{37}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{38}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{39}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{40}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{41}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{42}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{43}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{44}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{45}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{46}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{47}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{48}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{49}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{50}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{51}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{52}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{53}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{54}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{55}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{56}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{57}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{58}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{59}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{60}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{61}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{62}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{63}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{64}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{65}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{66}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{67}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{68}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{69}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{70}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{71}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{72}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{73}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{74}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{75}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{76}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{77}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{78}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{79}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{80}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{81}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{82}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{83}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{84}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{85}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{86}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{87}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{88}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{89}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{90}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{91}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{92}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{93}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{94}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{95}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{96}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{97}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{98}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{99}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{100}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{101}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{102}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{103}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{104}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{105}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{106}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{107}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{108}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{109}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{110}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{111}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{112}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{113}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{114}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{115}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{116}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{117}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{118}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{119}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{120}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{121}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{122}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{123}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{124}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{125}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{126}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{127}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{128}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{129}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{130}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{131}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{132}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{133}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{134}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{135}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{136}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{137}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{138}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{139}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{140}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{141}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{142}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{143}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{144}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{145}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{146}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{147}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{148}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{149}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{150}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{151}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{152}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{153}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{154}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{155}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{156}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{157}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{158}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{159}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{160}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{161}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{162}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{163}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{164}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{165}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{166}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{167}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{168}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{169}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{170}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{171}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{172}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{173}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{174}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{175}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{176}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{177}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{178}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{179}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{180}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{181}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{182}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{183}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{184}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{185}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{186}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{187}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{188}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{189}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{190}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{191}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{192}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{193}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{194}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{195}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{196}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{197}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{198}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{199}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{200}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{201}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{202}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{203}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{204}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{205}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{206}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{207}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{208}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{209}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{210}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{211}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{212}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{213}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{214}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{215}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{216}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{217}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{218}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{219}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{220}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{221}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{222}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{223}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{224}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{225}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{226}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{227}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{228}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{229}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{230}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{231}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{232}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{233}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{234}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{235}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{236}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{237}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{238}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{239}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{240}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{241}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{242}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{243}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{244}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{245}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{246}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{247}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{248}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{249}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{250}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{251}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{252}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{253}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{254}): {Balance: big.NewInt(1)}, - common.BytesToAddress([]byte{255}): {Balance: big.NewInt(1)}, - }, + Config: params.SepoliaChainConfig, + Nonce: 0, + ExtraData: []byte("Sepolia, Athens, Attica, Greece!"), + GasLimit: 0x1c9c380, + Difficulty: big.NewInt(0x20000), + Timestamp: 1633267481, + Alloc: decodePrealloc(sepoliaAllocData), } } -// DefaultLveGenesisBlock returns the Görli network genesis block. -func DefaultLvetestGenesisBlock() *Genesis { - return &Genesis{ - Config: params.LvetestChainConfig, - Timestamp: 1643853426, - ExtraData: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000000"), - GasLimit: 4700000, - Difficulty: big.NewInt(524288), - Alloc: map[common.Address]GenesisAccount{ - common.BytesToAddress([]byte{1}): {Balance: big.NewInt(1)}, // ECRecover - common.BytesToAddress([]byte{2}): {Balance: big.NewInt(1)}, // SHA256 - common.BytesToAddress([]byte{3}): {Balance: big.NewInt(1)}, // RIPEMD - common.BytesToAddress([]byte{4}): {Balance: big.NewInt(1)}, // Identity - common.BytesToAddress([]byte{5}): {Balance: big.NewInt(1)}, // ModExp - common.BytesToAddress([]byte{6}): {Balance: big.NewInt(1)}, // ECAdd - common.BytesToAddress([]byte{7}): {Balance: big.NewInt(1)}, // ECScalarMul - common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, // ECPairing - }, +// DefaultKilnGenesisBlock returns the kiln network genesis block. +func DefaultKilnGenesisBlock() *Genesis { + g := new(Genesis) + reader := strings.NewReader(KilnAllocData) + if err := json.NewDecoder(reader).Decode(g); err != nil { + panic(err) } + return g } - -// DeveloperGenesisBlock returns the 'geth --dev' genesis block. Note, this must -// be seeded with the -func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { +// DeveloperGenesisBlock returns the 'geth --dev' genesis block. +func DeveloperGenesisBlock(period uint64, gasLimit uint64, faucet common.Address) *Genesis { // Override the default period to the user requested one config := *params.AllCliqueProtocolChanges - config.Clique.Period = period + config.Clique = ¶ms.CliqueConfig{ + Period: period, + Epoch: config.Clique.Epoch, + } // 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, crypto.SignatureLength)...), - GasLimit: 6283185, + GasLimit: gasLimit, + BaseFee: big.NewInt(params.InitialBaseFee), Difficulty: big.NewInt(1), Alloc: map[common.Address]GenesisAccount{ common.BytesToAddress([]byte{1}): {Balance: big.NewInt(1)}, // ECRecover @@ -696,34 +579,12 @@ func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { common.BytesToAddress([]byte{6}): {Balance: big.NewInt(1)}, // ECAdd common.BytesToAddress([]byte{7}): {Balance: big.NewInt(1)}, // ECScalarMul common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, // ECPairing + common.BytesToAddress([]byte{9}): {Balance: big.NewInt(1)}, // BLAKE2b faucet: {Balance: new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(9))}, }, } } -func EccGenesisBlock() *Genesis { - config := *params.AllEccPoWProtocolChanges - - alloc := map[common.Address]GenesisAccount{ - common.BytesToAddress([]byte{1}): {Balance: big.NewInt(1)}, // ECRecover - common.BytesToAddress([]byte{2}): {Balance: big.NewInt(1)}, // SHA256 - common.BytesToAddress([]byte{3}): {Balance: big.NewInt(1)}, // RIPEMD - common.BytesToAddress([]byte{4}): {Balance: big.NewInt(1)}, // Identity - common.BytesToAddress([]byte{5}): {Balance: big.NewInt(1)}, // ModExp - common.BytesToAddress([]byte{6}): {Balance: big.NewInt(1)}, // ECAdd - common.BytesToAddress([]byte{7}): {Balance: big.NewInt(1)}, // ECScalarMul - common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, // ECPairing - } - - return &Genesis{ - Config: &config, - ExtraData: hexutil.MustDecode("0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), - GasLimit: 7500000, - Difficulty: big.NewInt(1), - Alloc: alloc, - } -} - func decodePrealloc(data string) GenesisAlloc { var p []struct{ Addr, Balance *big.Int } if err := rlp.NewStream(strings.NewReader(data), 0).Decode(&p); err != nil { diff --git a/core/genesis_alloc.go b/core/genesis_alloc.go index b3db5200..16df3905 100644 --- a/core/genesis_alloc.go +++ b/core/genesis_alloc.go @@ -22,8 +22,872 @@ package core // nolint: misspell const mainnetAllocData = "\xfa\x04]X\u0793\r\x83b\x011\x8e\u0189\x9agT\x06\x908'\x80t2\x80\x89\n\u05ce\xbcZ\xc6 \x00\x00\u0793\x17bC\x0e\xa9\u00e2nWI\xaf\xdbp\xda_x\u077b\x8c\x89\n\u05ce\xbcZ\xc6 \x00\x00\u0793\x1d\x14\x80K9\x9cn\xf8\x0edWoev`\x80O\xec\v\x89\u3bb5sr@\xa0\x00\x00\u07932@5\x87\x94{\x9f\x15b*h\xd1\x04\xd5M3\xdb\xd1\u0349\x043\x87Oc,\xc6\x00\x00\u0793I~\x92\xcd\xc0\xe0\xb9c\xd7R\xb2)j\u02c7\u0682\x8b$\x89\n\x8fd\x9f\xe7\xc6\x18\x00\x00\u0793K\xfb\xe1Tk\xc6\xc6[\\~\xaaU0K8\xbb\xfe\xc6\u04c9lk\x93[\x8b\xbd@\x00\x00\u0793Z\x9c\x03\xf6\x9d\x17\xd6l\xbb\x8a\xd7!\x00\x8a\x9e\xbb\xb86\xfb\x89lk\x93[\x8b\xbd@\x00\x00\u0793]\x0e\xe8\x15^\xc0\xa6\xffh\bU,\xa5\xf1k\xb5\xbe2:\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u0793v\"\xd8J#K\xb8\xb0x#\x0f\u03c4\xb6z\u9a2c\xae\x89%\xe1\xccQ\x99R\xf8\x00\x00\u0793{\x9f\xc3\x19\x05\xb4\x99K\x04\xc9\xe2\xcf\xdc^'pP?B\x89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u0793\u007fJ#\xca\x00\xcd\x04=%\u0088\x8c\x1a\xa5h\x8f\x81\xa3D\x89)\xf0\xa9[\xfb\xf7)\x00\x00\u0793\x869\u06bb\u3bac\x88{]\xc0\xe4>\x13\xbc\u0487\xd7l\x89\x10\xd0\xe3\xc8}n,\x00\x00\u0793\x89P\x86y\xab\xf8\xc7\x1b\xf6x\x16\x87\x12\x0e>j\x84XM\x89a\x94\x04\x9f0\xf7 \x00\x00\u0793\x8f\xc7\u02ed\xff\xbd\r\u007f\xe4O\x8d\xfd`\xa7\x9dr\x1a\x1c\x9c\x8965\u026d\xc5\u07a0\x00\x00\u0793\x95`\xa3\xdebxh\xf9\x1f\xa8\xbf\xe1\xc1\xb7\xaf\xaf\b\x18k\x89\x1cg\xf5\xf7\xba\xa0\xb0\x00\x00\u0793\x96\x97G\xf7\xa5\xb3\x06E\xfe\x00\xe4I\x01CZ\xce$\xcc7\x89\\(=A\x03\x94\x10\x00\x00\u0793\x9am}\xb3&g\x9bw\xc9\x03\x91\xa7Gm#\x8f;\xa3>\x89\n\xdaUGK\x814\x00\x00\u0793\x9e\xef\n\b\x86\x05n?i!\x18S\xb9\xb7E\u007f7\x82\u4262\xa8x\x06\x9b(\xe0\x00\x00\u0793\x9f\xdb\xf4N\x1fJcb\xb7i\u00daG_\x95\xa9l+\u01c9\x1e\x93\x12\x83\xcc\xc8P\x00\x00\u07d3\xa5y\u007fR\xc9\u054f\x18\x9f6\xb1\xd4]\x1b\xf6\x04\x1f/k\x8a\x01'\u0473F\x1a\xcd\x1a\x00\x00\u0793\xaaS\x81\xb2\x13\x8e\xbe\xff\xc1\x91\xd5\xd8\u00d1u;p\x98\u04895\xab\xb0\x9f\xfe\u07b6\x80\x00\u0793\xaa\xda%\xea\"\x86p\x9a\xbbB-A\x92?\u04c0\xcd\x04\u01c9#=\xf3)\x9far\x00\x00\u0793\xac\xbf\xb2\xf2ZT\x85\xc79\xefp\xa4N\xee\xeb|e\xa6o\x89\x05k\xc7^-c\x10\x00\x00\u07d3\xac\xc6\xf0\x82\xa4B\x82\x87d\xd1\x1fX\u0589J\xe4\b\xf0s\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u0793\xb2w\xb0\x99\xa8\xe8f\xca\x0e\xc6[\u02c7(O\xd1B\xa5\x82\x89j\xcb=\xf2~\x1f\x88\x00\x00\u0753\xbd\xd4\x01:\xa3\x1c\x04al+\xc9x_'\x88\xf9\x15g\x9b\x88\xb9\xf6]\x00\xf6<\x00\x00\u0793\xc2}c\xfd\xe2K\x92\xee\x8a\x1e~\xd5\xd2m\x8d\xc5\xc8;\x03\x89lk\x93[\x8b\xbd@\x00\x00\u0553\xc4\x0f\xe2\tT#P\x9b\x9f\u0677T21X\xaf#\x10\xf3\x80\u0793\xd7^\xd6\fwO\x8b:ZQs\xfb\x183\xadq\x05\xa2\u0649l\xb7\xe7Hg\xd5\xe6\x00\x00\u07d3\u05cd\x89\xb3_G'\x16\xec\xea\xfe\xbf`\x05'\u04e1\xf9i\x8a\x05\xe0T\x9c\x962\xe1\xd8\x00\x00\u0793\xda\xe2{5\v\xae \xc5e!$\xaf]\x8b\\\xba\x00\x1e\xc1\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u0793\xdc\x01\xcb\xf4Ix\xa4.\x8d\xe8\xe46\xed\xf9B\x05\u03f6\xec\x89O\x0f\xeb\xbc\u068c\xb4\x00\x00\u07d3\u607c-\x10\xdbb\u0785\x84\x83$I\"P4\x8e\x90\xbf\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d3\xf4c\xe17\xdc\xf6%\xfb\U000fc8de\u0298\u04b9h\xcf\u007f\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4\x01\x00\a9K\x8bue\xa1e\x8a\xf8\x8c\xe4cI\x915\u05b7\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x01\r\xf1\xdfK\xed#v\r-\x1c\x03x\x15\x86\xdd\xf7\x91\x8eT\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94\x01\x0fJ\x98\u07e1\xd9y\x9b\xf5\u01d6\xfbU\x0e\xfb\xe7\xec\xd8w\x8a\x01\xb2\xf2\x92#b\x92\xc7\x00\x00\u07d4\x01\x15PW\x00/k\r\x18\xac\xb98\x8d;\xc8\x12\x9f\x8fz \x89H\xa4\xa9\x0f\xb4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x01k`\xbbmg\x92\x8c)\xfd\x03\x13\xc6f\u068f\x16\x98\xd9\u0149lk\x93[\x8b\xbd@\x00\x00\u07d4\x01l\x85\xe1a;\x90\x0f\xa3W\xb8(;\x12\x0ee\xae\xfc\xdd\b\x89+]\x97\x84\xa9|\xd5\x00\x00\u07d4\x01\x84\x92H\x8b\xa1\xa2\x924\"G\xb3\x18U\xa5Y\x05\xfe\xf2i\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\x01\x8f \xa2{'\xecD\x1a\xf7#\xfd\x90\x99\xf2\u02f7\x9dbc\x89uy*\x8a\xbd\xef|\x00\x00\u07d4\x01\x91\xebT~{\xf6\x97k\x9b\x1bWuFv\x1d\xe6V\"\xe2\x89lkLM\xa6\u077e\x00\x00\u07d4\x01\x9dp\x95y\xffK\xc0\x9f\xdc\xdd\xe41\xdc\x14G\xd2\xc2`\xbc\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x01\xa2Z_Z\xf0\x16\x9b0\x86L;\xe4\xd7V<\xcdD\xf0\x9e\x89M\x85<\x8f\x89\b\x98\x00\x00\xe0\x94\x01\xa7\xd9\xfa}\x0e\xb1\x18\\g\xe5M\xa8<.u\xdbi\u37ca\x01\x9dJ\xdd\xd0\u063c\x96\x00\x00\u07d4\x01\xa8\x18\x13ZAB\x10\xc3|b\xb6%\xac\xa1\xa5F\x11\xac6\x89\x0e\x189\x8ev\x01\x90\x00\x00\u07d4\x01\xb1\xca\xe9\x1a;\x95Y\xaf\xb3<\xdcmh\x94B\xfd\xbf\xe07\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x01\xb5\xb5\xbcZ\x11\u007f\xa0\x8b4\xed\x1d\xb9D\x06\bYz\xc5H\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x01\xbb\xc1Og\xaf\x069\xaa\xb1D\x1ej\b\xd4\xceqb\t\x0f\x89F\xfc\xf6\x8f\xf8\xbe\x06\x00\x00\xe0\x94\x01\xd08\x15\xc6\x1fAkq\xa2a\n-\xab\xa5\x9f\xf6\xa6\xde[\x8a\x02\x05\xdf\xe5\v\x81\xc8.\x00\x00\u07d4\x01\u0559\xee\r_\x8c8\xab-9.,e\xb7L<\xe3\x18 \x89\x1b\xa5\xab\xf9\xe7y8\x00\x00\u07d4\x01\xe4\x05!\x12%0\u066c\x91\x11<\x06\xa0\x19\vmc\x85\v\x89Hz\x9a0E9D\x00\x00\u07d4\x01\xe6A]X{\x06T\x90\xf1\xed\u007f!\xd6\xe0\xf3\x86\xeegG\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x01\xe8d\xd3Tt\x1bB>oB\x85\x17$F\x8ct\xf5\xaa\x9c\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x01\xed_\xba\x8d.\xabg:\xec\x04-0\xe4\xe8\xa6\x11\xd8\xc5Z\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x01\xfb\x8e\xc1$%\xa0O\x81>F\xc5L\x05t\x8c\xa6\xb2\x9a\xa9\x89\x0e\x15s\x03\x85F|\x00\x00\u07d4\x01\xff\x1e\xb1\u07adP\xa7\xf2\xf9c\x8f\xde\xe6\xec\xcf:{*\u0209 \x86\xac5\x10R`\x00\x00\u07d4\x02\x03b\u00ed\xe8x\u0290\u05b2\u0609\xa4\xccU\x10\xee\xd5\xf3\x898\x88\xe8\xb3\x11\xad\xb3\x80\x00\u07d4\x02\x03\xae\x01\xd4\xc4\x1c\xae\x18e\xe0K\x1f[S\xcd\xfa\xec\xae1\x896\x89\xcd\u03b2\x8c\xd7\x00\x00\u07d4\x02\b\x93a\xa3\xfetQ\xfb\x1f\x87\xf0\x1a-\x86fS\xdc\v\a\x89\x02*\xc7H2\xb5\x04\x00\x00\u07d4\x02\x1fi\x04=\xe8\x8cI\x17\xca\x10\xf1\x84(\x97\xee\xc0X\x9c|\x89kD\u03f8\x14\x87\xf4\x00\x00\u07d4\x02)\x0f\xb5\xf9\xa5\x17\xf8(E\xac\xde\xca\x0f\xc8F\x03\x9b\xe23\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x029\xb4\xf2\x1f\x8e\x05\xcd\x01Q++\xe7\xa0\xe1\x8am\x97F\a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x02Gr\x12\xff\xddu\xe5\x15VQ\xb7e\x06\xb1dfq\xa1\xeb\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\x02J\t\x8a\xe7\x02\xbe\xf5@l\x9c\"\xb7\x8b\xd4\xeb,\u01e2\x93\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x02K\xdd,{\xfdP\x0e\xe7@O\u007f\xb3\xe9\xfb1\xdd \xfb\u0449\t\xc2\x00vQ\xb2P\x00\x00\u07d4\x02Sg\x96\x03\x04\xbe\xee4Y\x11\x18\xe9\xac-\x13X\xd8\x02\x1a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x02V\x14\x9f[Pc\xbe\xa1N\x15f\x1f\xfbX\xf9\xb4Y\xa9W\x89&)\xf6n\fS\x00\x00\x00\u07d4\x02`=z;\xb2\x97\xc6|\x87~]4\xfb\u0579\x13\xd4\xc6:\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x02a\xad:\x17*\xbf\x13\x15\xf0\xff\xec2p\x98j\x84\t\xcb%\x89\v\b!;\u03cf\xfe\x00\x00\u07d4\x02d2\xaf7\xdcQ\x13\xf1\xf4mH\nM\u0c80R#~\x89\x13I\xb7\x86\xe4\v\xfc\x00\x00\u07d4\x02f\xab\x1ck\x02\x16#\v\x93\x95D=_\xa7^hEh\u018965\u026d\xc5\u07a0\x00\x00\u07d4\x02u\x1d\u018c\xb5\xbdsp'\xab\xf7\u0777s\x90\xcdw\xc1k\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x02w\x8e9\x0f\xa1u\x10\xa3B\x8a\xf2\x87\fBsT}8l\x8a\x03lw\x80\x18\x8b\xf0\xef\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x037|\x0eUkd\x01\x03(\x9aa\x89\u1baecI4g\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x03IcM\u00a9\xe8\f?w!\xee+PF\xae\xaa\xed\xfb\xb5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x03U\xbc\xac\xbd!D\x1e\x95\xad\xee\xdc0\xc1r\x18\u0224\b\u0389\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x03n\xef\xf5\xba\x90\xa6\x87\x9a\x14\xdf\xf4\xc5\x04;\x18\xca\x04`\u0249\x05k\xc7^-c\x10\x00\x00\xe0\x94\x03qKA\u04a6\xf7Q\x00\x8e\xf8\xddM+)\xae\u02b8\xf3n\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x03r\xe8RX.\t44J\x0f\xed!x0M\xf2]F(\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x03r\xeeU\b\xbf\x81c\xed(N^\xef\x94\xceMsg\xe5\"\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x03}\xd0V\xe7\xfd\xbdd\x1d\xb5\xb6\xbe\xa2\xa8x\n\x83\xfa\u1009\a\x96\xe3\xea?\x8a\xb0\x00\x00\xe0\x94\x03\x83#\xb1\x84\xcf\xf7\xa8*\xe2\u1f67y?\xe41\x9c\xa0\xbf\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x03\x87y\xca-\xbef>c\xdb?\xe7V\x83\xea\x0e\xc6.#\x83\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94\x03\x8eE\xea\xdd=\x88\xb8\u007f\xe4\u06b0fh\x05\"\xf0\xdf\xc8\xf9\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x03\x92T\x9ar\u007f\x81eT)\u02d2\x8bR\x9f%\xdfM\x13\x85\x89\x01lC\xa0\xee\xa0t\x00\x00\u07d4\x03\x94\xb9\x0f\xad\xb8`O\x86\xf4?\xc1\xe3]1$\xb3*Y\x89\x89)j\xa1@'\x8ep\x00\x00\u0794\x03\x9ezN\xbc(N,\xcdB\xb1\xbd\xd6\v\xd6Q\x1c\x0fw\x06\x88\xf0\x15\xf2W6B\x00\x00\u07d4\x03\x9e\xf1\xceR\xfeyc\xf1f\u0562u\u0131\x06\x9f\xe3\xa82\x89\x15\xaf9\u4ab2t\x00\x00\u07d4\x03\xa2l\xfcL\x181op\u055e\x9e\x1ay\xee>\x8b\x96/L\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x03\xaab(\x81#m\xd0\xf4\x94\f$\xc3$\xff\x8b{~!\x86\x89\xadx\xeb\u016cb\x00\x00\x00\u07d4\x03\xafz\xd9\xd5\"<\xf7\xc8\xc1? \xdfg\xeb\xe5\xff\u017bA\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x03\xb0\xf1|\xd4F\x9d\xdc\u03f7\xdai~\x82\xa9\x1a_\x9ewt\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x03\xb4\x1bQ\xf4\x1d\xf2\r\xd2y\xba\xe1\x8c\x12w_w\xadw\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x03\xbe[F)\xae\xfb\xbc\xab\x9d\xe2m9Wl\xb7\xf6\x91\xd7d\x89\n\xdf0\xbap\u0217\x00\x00\u07d4\x03\xc6G\xa9\xf9)\xb0x\x1f\xe9\xae\x01\u02a3\xe1\x83\xe8vw~\x89\x18*\xb7\xc2\f\xe5$\x00\x00\u07d4\x03\xc9\x1d\x92\x946\x03\xe7R >\x054\x0eV`\x13\xb9\x00E\x89+|\xc2\xe9\xc3\"\\\x00\x00\u07d4\x03\xcbLOE\x16\xc4\xffy\xa1\xb6$O\xbfW.\x1c\u007f\xeay\x89\x94\x89#z\u06daP\x00\x00\u07d4\x03\u02d8\u05ec\xd8\x17\u079d\x88m\"\xfa\xb3\xf1\xb5}\x92\xa6\b\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\x03\u031d-!\xf8k\x84\xac\x8c\xea\xf9q\u06e7\x8a\x90\xe6%p\x89WG=\x05\u06ba\xe8\x00\x00\u07d4\x03\xd1rO\xd0\x0eT\xaa\xbc\xd2\xde*\x91\xe8F+\x10I\xdd:\x89\x8f\x1d\\\x1c\xae7@\x00\x00\u07d4\x03\xde\xdf\xcd\v<.\x17\xc7\x05\xda$\x87\x90\uf626\xbdWQ\x89Hz\x9a0E9D\x00\x00\u07d4\x03\u8c04SuW\xe7\t\xea\xe2\xe1\u1966\xbc\xe1\xef\x83\x14\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x03\xeam&\u0400\xe5z\xee9&\xb1\x8e\x8e\xd7:N[(&\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x03\xeb<\xb8`\xf6\x02\x8d\xa5T\xd3D\xa2\xbbZP\n\xe8\xb8o\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x03\xeb\xc6?\xdaf`\xa4e\x04^#_\xben\\\xf1\x95s_\x89\a\xb0l\xe8\u007f\xddh\x00\x00\xe0\x94\x03\xefj\xd2\x0f\xf7\xbdO\x00+\xacX\xd4uD\u03c7\x9a\xe7(\x8a\x01u\xc7X\u0439n\\\x00\x00\u07d4\x03\xf7\xb9 \b\x81:\xe0\xa6v\xeb!(\x14\xaf\xab5\"\x10i\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x04\x11p\xf5\x81\u0780\xe5\x8b*\x04\\\x8f|\x14\x93\xb0\x01\xb7\u02c90\xc8\xeca2\x89\nZ\xa8P\t\xe3\x9c\x00\x00\u07d4\x04i\xe8\xc4@E\v\x0eQ&&\xfe\x81~gT\xa8\x15(0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x04m'K\x1a\xf6\x15\xfbPZvJ\xd8\u0767p\xb1\xdb/=\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x04}Z&\u05ed\x8f\x8ep`\x0fp\xa3\x98\u076a\x1c-\xb2o\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x04~\x87\xc8\xf7\xd1\xfc\xe3\xb0\x13S\xa8Xb\xa9H\xac\x04\x9f>\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4\x04\u007f\x9b\xf1R\x9d\xaf\x87\xd4\a\x17^o\x17\x1b^Y\xe9\xff>\x89#<\x8f\xe4'\x03\xe8\x00\x00\xe0\x94\x04\x85'2\xb4\xc6R\xf6\xc2\u53b3e\x87\xe6\nb\xda\x14\u06ca\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x04\x8a\x89p\xeaAE\xc6MU\x17\xb8\xde[F\xd0YZ\xad\x06\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x04\x9c]K\xc6\xf2]NEli{R\xa0x\x11\xcc\u045f\xb1\x89\x10D\x00\xa2G\x0eh\x00\x00\u07d4\x04\xa1\xca\xda\x1c\xc7Q\b/\xf8\u0692\x8e<\xfa\x00\b \xa9\xe9\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x04\xa8\n\xfa\xd5>\xf1\xf8Ae\xcf\xd8R\xb0\xfd\xf1\xb1\xc2K\xa8\x89\x03$\xe9d\xb3\xec\xa8\x00\x00\u07d4\x04\xaa\xfc\x8a\xe5\xceoI\x03\u021d\u007f\xac\x9c\xb1\x95\x12\"Gw\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x04\xbaK\xb8q@\x02,!Jo\xacB\xdbZ\x16\u0755@E\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x04\xba\x8a?\x03\xf0\x8b\x89P\x95\x99M\xdaa\x9e\u06ac\xee>z\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x04\xc2\xc6K\xb5L>\xcc\xd0U\x85\xe1\x0e\xc6\xf9\x9a\f\xdb\x01\xa3\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x04\xceE\xf6\x00\xdb\x18\xa9\u0405\x1b)\xd99>\xbd\xaa\xfe=\u0149\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x04\u05b8\xd4\u0686t\a\xbb\x99wI\u07bb\xcd\xc0\xb3XS\x8a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x04\xd78\x96\xcfe\x93\xa6\x91\x97*\x13\xa6\xe4\x87\x1f\xf2\xc4+\x13\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x04\xd8*\xf9\xe0\x1a\x93m\x97\xf8\xf8Y@\xb9p\xf9\xd4\u06d96\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x04\xe5\xf5\xbc|\x92?\xd1\xe3\x175\xe7.\xf9h\xfdg\x11\fn\x89WU\x1d\xbc\x8ebL\x00\x00\u07d4\x04\xec\xa5\x01c\n\xbc\xe3R\x18\xb1t\x95k\x89\x1b\xa2^\xfb#\x8966\x9e\xd7t}&\x00\x00\u07d4\x05\x05\xa0\x8e\"\xa1\t\x01Z\"\xf6\x850STf*U1\u0549\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\u07d4\x05\x14\x95L\xe8\x81\xc807\x03d\x00\x89lO\xd1\xee$nx\x00\x00\u07d4\x05\x1dBBv\xb2\x129fQ\x86\x13=e;\xb8\xb1\x86/\x89\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x05!\xbc:\x9f\x87\x11\xfe\xcb\x10\xf5\a\x97\xd7\x10\x83\xe3A\ub749\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x05#mL\x90\xd0e\xf9\u34c3X\xaa\xff\xd7w\xb8j\xecI\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x05*X\xe05\xf1\xfe\x9c\xdd\x16\x9b\xcf \x97\x03E\xd1+\x9cQ\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4\x05.\xab\x1fa\xb6\xd4U\x17(?A\xd1D\x18$\x87\x87I\u0409\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x053n\x9ar'(\xd9c\xe7\xa1\xcf'Y\xfd\x02tS\x0f\u02891\xa2D?\x88\x8ay\x80\x00\u07d4\x054q\u035aA\x92[9\x04\xa5\xa8\xff\xca6Y\xe04\xbe#\x89\n\xd2\x01\xa6yO\xf8\x00\x00\u07d4\x056\x1d\x8e\xb6\x94\x1dN\x90\xfb~\x14\x18\xa9Z2\xd5%w2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x05B:T\xc8\xd0\xf9p~pAs\xd9#\xb9F\xed\xc8\xe7\x00\x89\x06\xea\x03\u00bf\x8b\xa5\x80\x00\u07d4\x05D\f[\a;R\x9bH) \x9d\xff\x88\t\x0e\a\xc4\xf6\xf5\x89E\u04977\xe2/ \x00\x00\u07d4\x05Z\xb6X\xc6\xf0\xedO\x87^\xd6t.K\xc7)-\x1a\xbb\xf0\x89\x04\x86\u02d7\x99\x19\x1e\x00\x00\u07d4\x05[\xd0,\xaf\x19\xd6 +\xbc\u0703m\x18{\xd1\xc0\x1c\xf2a\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x05^\xacO\x1a\xd3\xf5\x8f\v\xd0$\u058e\xa6\r\xbe\x01\u01af\xb3\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x05fQU\xccI\xcb\xf6\xaa\xbd\u056e\x92\xcb\xfa\xad\x82\xb8\xc0\xc1\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x05f\x86\a\x8f\xb6\xbc\xf9\xba\n\x8a\x8d\xc6:\x90o_\xea\xc0\xea\x89\x1b\x18\x1eK\xf24<\x00\x00\u07d4\x05iks\x91k\xd3\x03>\x05R\x1e2\x11\xdf\xec\x02n\x98\xe4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x05k\x15F\x89O\x9a\x85\xe2\x03\xfb3m\xb5i\xb1l%\xe0O\x89\t.\xdb\t\xff\b\u0600\x00\u07d4\x05yI\xe1\xca\x05pF\x9eL\xe3\u0190\xaea:k\x01\xc5Y\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x05}\u049f-\x19\xaa=\xa4#'\xeaP\xbc\xe8o\xf5\xc9\x11\u0649\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x05\u007f\u007f\x81\xcdz@o\xc4Y\x94@\x8bPI\x91,Vdc\x89\\(=A\x03\x94\x10\x00\x00\u07d4\x05\x91]N\"Zf\x81b\xae\xe7\xd6\xc2_\xcf\xc6\xed\x18\xdb\x03\x89\x03\x98\xc3ry%\x9e\x00\x00\u07d4\x05\x96\xa2}\xc3\xee\x11_\xce/\x94\xb4\x81\xbc z\x9e&\x15%\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x05\xa80rC\x02\xbc\x0fn\xbd\xaa\x1e\xbe\xee\xb4nl\xe0\v9\x89\x05V\xf6L\x1f\xe7\xfa\x00\x00\u07d4\x05\xae\u007f\u053b\u0300\xca\x11\xa9\n\x1e\u01e3\x01\xf7\xcc\u0303\u06c91T\xc9r\x9d\x05x\x00\x00\u07d4\x05\xbbd\xa9\x16\xbef\xf4`\xf5\xe3\xb6C2\x11\r \x9e\x19\xae\x89\u3bb5sr@\xa0\x00\x00\xe0\x94\x05\xbfO\xcf\xe7r\xe4[\x82dC\x85.l5\x13P\xcer\xa2\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94\x05\xc6@\x04\xa9\xa8&\xe9N^N\xe2g\xfa*v2\xddNo\x8a\x03m\xc4.\xbf\xf9\v\u007f\x80\x00\xe0\x94\x05\xc76\xd3e\xaa7\xb5\xc0\xbe\x9c\x12\u022d\\\xd9\x03\xc3,\xf9\x8a\x01E^{\x80\n\x86\x88\x00\x00\xe0\x94\x05\xcbl;\x00r\xd3\x11ga\xb52\xb2\x18D;S\xe8\xf6\u014a\x1e\x02\xc3\xd7\xfc\xa9\xb6(\x00\x00\u07d4\x05\xd0\xf4\xd7(\xeb\xe8.\x84\xbfYu\x15\xadA\xb6\v\xf2\x8b9\x89\u3bb5sr@\xa0\x00\x00\u07d4\x05\u058d\xada\u04fb\u07f3\xf7y&\\IGJ\xff?\xcd0\x89\x02\"\xc5]\xc1Q\x9d\x80\x00\u07d4\x05\xe6q\xdeU\xaf\xec\x96K\aM\xe5t\xd5\x15\x8d]!\xb0\xa3\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x05\xe9{\tI,\u058fc\xb1+\x89.\xd1\xd1\x1d\x15,\x0e\u02897\b\xba\xed=h\x90\x00\x00\u07d4\x05\xf3c\x1fVd\xbd\xad]\x012\xc88\x8d6\xd7\u0612\t\x18\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x06\t\xd8:l\xe1\xff\u0276\x90\xf3\xe9\xa8\x1e\x98>\x8b\xdcM\x9d\x8a\x0e\u04b5%\x84\x1a\xdf\xc0\x00\x00\u07d4\x06\x1e\xa4\x87|\u0409D\xebd\u0096n\x9d\xb8\xde\xdc\xfe\xc0k\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x06%\xd0`V\x96\x8b\x00\"\x06\xff\x91\x98\x01@$+\xfa\xa4\x99\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x06(\xbf\xbeU5x/\xb5\x88@k\xc9f`\xa4\x9b\x01\x1a\xf5\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d4\x061\u044b\xbb\xbd0\xd9\xe1s+\xf3n\xda\xe2\u0389\x01\xab\x80\x89\xa3\xf9\x88U\xec9\x90\x00\x00\u07d4\x061\xdc@\xd7NP\x95\xe3r\x9e\xdd\xf4\x95D\xec\xd49og\x89\b\xacr0H\x9e\x80\x00\x00\xe0\x94\x067Y\xdd\x1cN6.\xb1\x93\x98\x95\x1f\xf9\xf8\xfa\xd1\xd3\x10h\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x06_\xf5u\xfd\x9c\x16\xd3\xcbo\u058f\xfc\x8fH?\xc3.\xc85\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x06a\x8e\x9dWb\xdfb\x02\x86\x01\xa8\x1dD\x87\u05a0\xec\xb8\x0e\x89Hz\x9a0E9D\x00\x00\xe0\x94\x06fG\xcf\xc8]#\xd3v\x05W= \x8c\xa1T\xb2D\xd7l\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x06xeJ\xc6v\x1d\xb9\x04\xa2\xf7\xe8Y^\xc1\xea\xacsC\b\x89/\x98\xb2\x9c(\x18\xf8\x00\x00\u07d4\x06\x86\n\x93RYU\xffbI@\xfa\xdc\xff\xb8\xe1I\xfdY\x9c\x89lh\xcc\u041b\x02,\x00\x00\xe0\x94\x06\x8c\xe8\xbdn\x90*E\u02c3\xb5\x15A\xb4\x0f9\xc4F\x97\x12\x8a\x01\x1c\x0f\x9b\xadJF\xe0\x00\x00\u07d4\x06\x8e)\xb3\xf1\x91\xc8\x12\xa699\x18\xf7\x1a\xb93\xaehG\xf2\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x06\x8eeWf\xb9D\xfb&6\x19e\x87@\xb8P\xc9J\xfa1\x89\x01\xe8\u007f\x85\x80\x9d\xc0\x00\x00\u0794\x06\x96N-\x17\xe9\x18\x9f\x88\xa8 96\xb4\n\xc9nS<\x06\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x06\x99L\xd8:\xa2d\n\x97\xb2`\vA3\x9d\x1e\r>\xdel\x89\r\x8drkqw\xa8\x00\x00\u07d4\x06\x9e\u042bz\xa7}\xe5q\xf1a\x06\x05\x1d\x92\xaf\xe1\x95\xf2\u0409\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x06\xac&\xad\x92\u02c5\x9b\u0550]\xdc\xe4&j\xa0\xecP\xa9\u0149*\x03I\x19\u07ff\xbc\x00\x00\u07d4\x06\xb0\xc1\xe3\u007fZ^\u013b\xf5\b@T\x8f\x9d:\xc0(\x88\x97\x89\xd8\u0602\u148e}\x00\x00\u07d4\x06\xb0\xff\x83@s\xcc\xe1\xcb\xc9\xeaU~\xa8{`Yc\u8d09\x10CV\x1a\x88)0\x00\x00\xe0\x94\x06\xb1\x06d\x9a\xa8\xc4!\xdd\xcd\x1b\x8c2\xcd\x04\x18\xcf0\xda\x1f\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x06\xb5\xed\xe6\xfd\xf1\xd6\xe9\xa3G!7\x9a\xea\xa1|q=\xd8*\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x06\xcb\xfa\b\xcd\xd4\xfb\xa77\xba\xc4\a\xbe\x82$\xf4\xee\xf3X(\x89 +\xe5\xe88.\x8b\x80\x00\u07d4\x06\xd6\xcb0\x84\x81\xc36\xa6\xe1\xa2%\xa9\x12\xf6\xe65Y@\xa1\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\x06\xdc\u007f\x18\xce\xe7\xed\xab[yS7\xb1\xdfj\x9e\x8b\u062eY\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x06\xf6\x8d\xe3\xd79\xdbA\x12\x1e\xac\xf7y\xaa\xda=\xe8v!\a\x89\x01\x84\x93\xfb\xa6N\xf0\x00\x00\u07d4\x06\xf7\u070d\x1b\x94b\xce\xf6\xfe\xb13h\xa7\xe3\x97K\t\u007f\x9f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\a\x01\xf9\xf1G\xecHhV\xf5\xe1\xb7\x1d\xe9\xf1\x17\xe9\x9e!\x05\x89\te\xdaq\u007f\u0578\x00\x00\u07d4\a\r]6L\xb7\xbb\xf8\"\xfc,\xa9\x1a5\xbd\xd4A\xb2\x15\u0549lk\x93[\x8b\xbd@\x00\x00\xe0\x94\a\x1d\xd9\r\x14\xd4\x1fO\xf7\xc4\x13\xc2B8\xd35\x9c\xd6\x1a\a\x8a\a\xb5?y\xe8\x88\xda\xc0\x00\x00\u07d4\a&\xc4.\x00\xf4T\x04\x83n\xb1\xe2\x80\xd0s\xe7\x05\x96\x87\xf5\x89X\x00>?\xb9G\xa3\x80\x00\xe0\x94\a'\xbe\n*\x00! H\xb5R\x0f\xbe\xfb\x95>\xbc\x9dT\xa0\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\a)\xa8\xa4\xa5\xba#\xf5y\xd0\x02[\x1a\xd0\xf8\xa0\xd3\\\xdf\u048a\x02\r\u058a\xaf2\x89\x10\x00\x00\u07d4\a)\xb4\xb4|\t\xeb\x16\x15\x84d\u022a\u007f\xd9i\vC\x889\x89lh\xcc\u041b\x02,\x00\x00\u0794\a4\xa0\xa8\x1c\x95b\xf4\xd9\xe9\xe1\n\x85\x03\xda\x15\xdbF\xd7n\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\a\xa7\xef[G\x00\x00\xe0\x94\ap\xc6\x1b\xe7\x87r#\f\xb5\xa3\xbb$)\xa7&\x14\xa0\xb36\x8a\x01n\u0899\xb7\x13A\x80\x00\u07d4\ar><0\xe8\xb71\xeeEj)\x1e\xe0\u7630 Jw\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\as\xee\xac\xc0P\xf7G \xb4\xa1\xbdW\x89[\x1c\xce\xebI]\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\a\x80\r/\x80h\xe4H\u01daOi\xb1\xf1^\xf6\x82\xaa\xe5\xf6\x8a\x04\x1b\xad\x15^e\x12 \x00\x00\u07d4\a\xa8\xda\xde\xc1BW\x1a}S\xa4)pQxm\a,\xbaU\x89\x01;m\xa1\x13\x9b\u0680\x00\u07d4\a\xaf\x93\x8c\x127\xa2|\x900\tM\xcf$\aP$n=,\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\a\xb1\xa3\x06\xcbC\x12\xdffH,,\xaer\xd1\xe0a@\x0f\u034a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\a\xb7\xa5p3\xf8\xf1\x130\xe4f^\x18]#N\x83\xec\x14\v\x89\xea~\xe9*\f\x9a\v\x80\x00\u07d4\a\xbc,\xc8\xee\xdc\x01\x97\a\x00\xef\xc9\xc4\xfb6s^\x98\xcdq\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\a\xd4\x12\x17\xba\u0725\xe0\xe6\x03'\xd8E\xa3FO\x0f'\xf8J\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\a\xd43N\u00c5\xe8\xaaT\xee\xda\xea\xdb0\x02/\f\u07e4\xab\x89\x8e\x91\xd5 \xf2\xeby\x00\x00\u07d4\a\xda\xe6\"c\r\x1168\x193\u04adk\"\xb89\xd8!\x02\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\a\xdc+\xf8;\u01af\x19\xa8B\xff\xeaf\x1a\xf5\xb4\x1bg\xfd\xa1\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\a\u070c\x8b\x92z\xdb\xed\xfa\x8f]c\x9bCR5\x1f/6\u0489\x11\n\xed;U0\xdb\x00\x00\u07d4\a\xdd\xd0B,\x86\xefe\xbf\f\u007f\xc3E(b\xb1\"\x8b\b\xb8\x89o\xf5\u04aa\x8f\x9f\xcf\x00\x00\u07d4\a\xe1\x16,\xea\xe3\xcf!\xa3\xf6-\x10Y\x900.0\u007fN;\x89R\xf1\x03\xed\xb6k\xa8\x00\x00\u07d4\a\xe2\xb4\xcd\xee\xd9\u0407\xb1.Um\x9ew\f\x13\xc0\x99a_\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\a\xfe\xefT\xc16\x85\b)\xba\xdcKI\xc3\xf2\xa7<\x89\xfb\x9e\x89\x06hZ\xc1\xbf\xe3,\x00\x00\u07d4\b\x05FP\x8a=&\x82\u0239\x88O\x13c{\x88G\xb4M\xb3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\b\t\bv\xba\xad\xfe\xe6\\=6;\xa5S\x12t\x8c\xfa\x87=\x89\\*\x997\x1c\xff\xe1\x00\x00\u07d4\b\x16o\x021?\xea\u12f0D\xe7\x87|\x80\x8bU\xb5\xbfX\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\b)\xd0\xf7\xbb|Dl\xfb\xb0\u07ad\xb29M\x9d\xb7$\x9a\x87\x89\x02,\xa3X|\xf4\xeb\x00\x00\u07d4\b0m\xe5\x19\x81\u7b21\x85hY\xb7\xc7xijki\xf9\x89\xadx\xeb\u016cb\x00\x00\x00\xe0\x94\b7S\x9b_jR*H,\xdc\u04e9\xbbpC\xaf9\xbd\u048a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\b8\xa7v\x8d\x9c*\u028b\xa2y\xad\xfe\xe4\xb1\xf4\x91\xe3&\xf1\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\bA\x16R\xc8qq6\t\xaf\x00b\xa8\xa1(\x1b\xf1\xbb\xcf\u0649K\xe4\xe7&{j\xe0\x00\x00\xe0\x94\bM\x102Tu\x9b4<\xb2\xb9\xc2\xd8\xff\x9e\x1a\xc5\xf1E\x96\x8a\x01\x9b\xff/\xf5yh\xc0\x00\x00\u07d4\bPO\x05d?\xabY\x19\xf5\xee\xa5Y%\u05e3\xed}\x80z\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\b[J\xb7]\x83b\xd9\x14C\\\xed\xee\x1d\xaa+\x1e\xe1\xa2;\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\b[\xa6_\xeb\xe2>\xef\xc2\xc8\x02fj\xb1&#\x82\xcf\u0114\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\bt\x98\xc0FFh\xf3\x11P\xf4\xd3\u013c\u0765\"\x1b\xa1\x02\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\bw\uebabx\xd5\xc0\x0e\x83\xc3+-\x98\xfay\xadQH/\x89\x17\xd2-q\xdab&\x00\x00\u0794\b\x93j7\u07c5\xb3\xa1X\xca\xfd\x9d\xe0!\xf5\x817h\x13G\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\b\xa9\xa4N\x1fA\xde=\xbb\xa7\xa3c\xa3\xabA,\x12L\xd1^\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\b\xb7\xbd\u03d4MUp\x83\x8b\xe7\x04`$:\x86\x94HXX\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\b\xb8E6\xb7L\x8c\x01T=\xa8\x8b\x84\u05cb\xb9WG\xd8\"\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\b\xc2\xf26\xacJ\xdc\xd3\xfd\xa9\xfb\xc6\xe4S\"S\xf9\xda;\xec\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\b\xc8\x02\xf8wX4\x9f\xa0>k\xc2\xe2\xfd\a\x91\x19~\ua689lk\x93[\x8b\xbd@\x00\x00\u07d4\b\xc9\U0007fd89\xfd\xf8\x04\xd7i\xf8!#6\x02\x15\xaf\xf9;\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\b\xca\u0215&A\xd8\xfcRn\xc1\xabO-\xf8&\xa5\xe7q\x0f\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94\b\xcc\xdaP\xe4\xb2j\x0f\xfc\x0e\xf9.\x92\x051\a\x06\xbe\xc2\u01ca\x01Iul8W\xc6\x00\x00\x00\u07d4\b\u0406M\xc3/\x9a\xcb6\xbfN\xa4G\xe8\xddg&\x90j\x15\x89lnY\xe6|xT\x00\x00\u07d4\b\xd4&\u007f\xeb\x15\u0697\x00\xf7\xcc\xc3\xc8J\x89\x18\xbf\x17\xcf\u0789a\t=|,m8\x00\x00\xe0\x94\b\xd41\x1c\x9c\x1b\xba\xf8\u007f\xab\xe1\xa1\xd0\x14c\x82\x8d]\x98\u038a\x13\x0e\xe8\xe7\x17\x90D@\x00\x00\u07d4\b\xd5N\x83\xadHj\x93L\xfa\xea\u20e3>\xfd\"|\x0e\x99\x898S\x05\x83$^\xdc\x00\x00\u07d4\b\xd9~\xad\xfc\xb7\xb0d\xe1\xcc\xd9\u0217\x9f\xbe\xe5\xe7z\x97\x19\x89\x0el]\xa8\xd6z\xc1\x80\x00\u07d4\b\xda:z\x0fE!a\u03fc\xec1\x1b\xb6\x8e\xbf\xde\xe1~\x88\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\b\xe3\x8e\xe0\xceH\xc9\xcad\\\x10\x19\xf7;SUX\x1cV\xe6\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\b\xef?\xa4\xc4<\xcd\xc5{\"\xa4\xb9\xb23\x1a\x82\xe58\x18\xf2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\t\td\x8c\x18\xa3\xce[\xaez\x04~\xc2\xf8h\xd2L\u0768\x1d\x89\xcf\x15&@\xc5\xc80\x00\x00\u07d4\t\f\xd6{`\xe8\x1dT\xe7\xb5\xf6\a\x8f>\x02\x1b\xa6[\x9a\x1e\x8965\u026d\xc5\u07a0\x00\x00\u07d4\t\f\xeb\xef),>\xb0\x81\xa0_\u062a\xf7\u04db\xf0{\x89\u0509\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\t\x0f\xa96{\xdaW\xd0\xd3%:\n\x8f\xf7l\xe0\xb8\xe1\x9as\x8965\u026d\xc5\u07a0\x00\x00\u07d4\t\x14n\xa3\x88Qv\xf0w\x82\xe1\xfe0\xdc\xe3\xce$\u011e\x1f\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\t!`_\x99\x16N;\xcc(\xf3\x1c\xae\xcex\x971\x82V\x1d\x89+\ai*\x90e\xa8\x00\x00\xe0\x94\t&\x1f\x9a\xcbE\x1c7\x88\x84O\f\x14Q\xa3[\xadP\x98\xe3\x8a\x01\u056d'P) `\x00\x00\xe0\x94\t'\"\x04\x92\x19K.\u069f\u013b\xe3\x8f%\u0581\xdf\xd3l\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u0794\t*\xcbbK\b\xc0U\x10\x18\x9b\xbb\xe2\x1ee$\xd6D\u032d\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\t.\x81UX@-g\xf9\rk\xfem\xa0\xb2\xff\xfa\x91EZ\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\tP0\xe4\xb8&\x92\xdc\xf8\xb8\u0411$\x94\xb9\xb3x\xec\x93(\x89H\xa4zu\x80\x00\u07d4\t\x89\xc2\x00D\v\x87\x89\x91\xb6\x9d`\x95\xdf\xe6\x9e3\xa2.p\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\t\x90\xe8\x1c\u05c5Y\x9e\xa26\xbd\x19f\xcfRc\x02\xc3[\x9c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\t\x98\xd8'1\x15\xb5j\xf4%\xff\xc8>!\x8c\x1e\n\xfe\x89(\u01c8\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\t\xaeI\xe3\u007f\x12\x1d\xf5\xdc\x15\x8c\xfd\xe8\x06\xf1s\xa0k\f\u007f\x89\xd80\x9e&\xab\xa1\xd0\x00\x00\u07d4\t\xaf\xa7;\xc0G\xefF\xb9w\xfd\x97c\xf8r\x86\xa6\xbeh\u0189\x1b/\xb5\xe8\xf0jf\x00\x00\u07d4\t\xb4f\x86\x96\xf8j\b\x0f\x8b\xeb\xb9\x1d\xb8\xe6\xf8p\x15\x91Z\x89#\x8f\xf7\xb3O`\x01\x00\x00\xe0\x94\t\xb5\x9b\x86\x98\xa7\xfb\xd3\xd2\xf8\xc7:\x00\x89\x88\xde>@k+\x8a\bxg\x83&\xea\xc9\x00\x00\x00\xe0\x94\t\xb7\xa9\x88\xd1?\xf8\x91\x86so\x03\xfd\xf4au\xb5=\x16\xe0\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\t\xc1w\xf1\xaeD$\x11\u076c\xf1\x87\xd4m\xb9V\x14\x83`\xe7\x8a\x01\xe5.3l\xde\"\x18\x00\x00\xe0\x94\t\u020f\x91~Mj\xd4s\xfa\x12\u93a3\xc4G*^\xd6\u068a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\t\u0438\xcd\a|i\xd9\xf3-\x9c\xcaC\xb3\xc2\b\xa2\x1e\u050b\x89\b!\xd2!\xb5)\x1f\x80\x00\xe0\x94\t\xd6\xce\xfdu\xb0\u0133\xf8\xf1\u0587\xa5\"\xc9a#\xf1\xf59\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\t\xe47\xd4H\x86\x12(\xa22\xb6.\xe8\xd3ye\xa9\x04\ud70a\x04\x98\xcf@\x1d\xf8\x84.\x80\x00\u07d4\t\xee\x12\xb1\xb4+\x05\xaf\x9c\xf2\a\xd5\xfc\xac%[.\xc4\x11\xf2\x89\x031\xcd\xddG\xe0\xfe\x80\x00\u07d4\t\xf3\xf6\x01\xf6\x05D\x11@Xl\xe0eo\xa2J\xa5\xb1\u066e\x89Sswo\xe8\xc4T\x00\x00\u07d4\t\xf9W[\xe5}\x00G\x93\u01e4\ub137\x15\x87\xf9|\xbbj\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\n\x06P\x86\x1fx^\xd8\xe4\xbf\x10\x05\xc4P\xbb\xd0n\xb4\x8f\xb6\x89\xa6A;y\x14N~\x00\x00\u07d4\n\x06\xfa\xd7\xdc\u05e4\x92\xcb\xc0S\xee\xab\xdei4\xb3\x9d\x867\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\n\a}\xb1?\xfe\xb0\x94\x84\xc2\x17p\x9dX\x86\xb8\xbf\x9cZ\x8b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\n\x0e\u0366cow\x16\xef\x19saF\x87\xfd\x89\xa8 \xa7\x06\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\n)\xa8\xa4\xd5\xfd\x95\x00u\xff\xb3Mw\xaf\xeb-\x82;\u0589\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\n*\u0795\xb2\xe8\xc6m\x8a\xe6\xf0\xbad\xcaW\u05c3\xbemD\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\n+O\xc5\xd8\x1a\xceg\xdcK\xba\x03\xf7\xb4UA=F\xfe=\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\n-\xcbzg\x17\x01\u06f8\xf4\x95r\x80\x88&Xs5l\x8e\x89\b?\x16\xce\b\xa0l\x00\x00\u07d4\n=\xe1U\xd5\xec\xd8\xe8\x1c\x1f\xf9\xbb\xf07\x83\x01\xf8\xd4\xc6#\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\nG\xad\x90Y\xa2I\xfc\x93k&b5=\xa6\x90_u\u00b9\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\nH)ov1p\x8c\x95\u04b7Iu\xbcJ\xb8\x8a\xc19*\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94\nJ\x01\x19\x95\u0181\xbc\x99\x9f\xddyuN\x9a2J\xe3\xb3y\x8a\b\xc1\x9a\xb0n\xb8\x9a\xf6\x00\x00\u07d4\nX\xfd\xddq\x89\x8d\xe7s\xa7O\xda\xe4^{\xd8N\xf46F\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\n[y\xd8\xf2;d\x83\xdb\u2f6ab\xb1\x06L\xc7cf\xae\x89j\u0202\x10\tR\u01c0\x00\u07d4\ne.*\x8bw\xbd\x97\xa7\x90\xd0\xe9\x13a\u0248\x90\u06f0N\x8965\u026d\xc5\u07a0\x00\x00\u07d4\nn\xber;n\xd1\xf9\xa8ji\xdd\xdah\xdcGF\\+\x1b\x89@=-\xb5\x99\xd5\xe4\x00\x00\u07d4\nw\xe7\xf7+C{WO\x00\x12\x8b!\xf2\xac&Q3R\x8c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\n\x91\u007f;\\\xb0\xb8\x83\x04\u007f\u0676Y=\xbc\xd5W\xf4S\xb9\x8965\u026d\xc5\u07a0\x00\x00\u07d4\n\x93\x1bD\x9e\xa8\xf1,\xdb\xd5\xe2\xc8\xccv\xba\xd2\xc2|\x069\x89\x01?\x9e\x8cy\xfe\x05\x80\x00\u0794\n\x98\x04\x13x\x03\xbahh\xd9:U\xf9\x98_\xcdT\x04Q\u4239\x8b\xc8)\xa6\xf9\x00\x00\u07d4\n\x9a\xb2c\x8b\x1c\xfdeM%\u06b0\x18\xa0\xae\xbd\u07c5\xfdU\x89\x01.\x8c\xb5\xfeLJ\x80\x00\u07d4\n\xb3f\xe6\xe7\u056b\xbc\xe6\xb4JC\x8di\xa1\u02bb\x90\xd13\x89\x11X\xe4`\x91=\x00\x00\x00\u07d4\n\xb4(\x1e\xbb1\x85\x90\xab\xb8\x9a\x81\xdf\a\xfa:\xf9\x04%\x8a\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u0794\n\xb5\x9d9\a\x02\xc9\xc0Y\xdb\x14\x8e\xb4\xf3\xfc\xfa}\x04\xc7\xe7\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\n\xbf\xb3\x9b\x11HmyW(f\x19[\xa2lc\vg\x84\u06ca\x19\xba\x877\xf9i(\xf0\x00\x00\u07d4\n\u029aV&\x91;\b\xcf\u0266m@P\x8d\xceR\xb6\x0f\x87\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\n\xd3\xe4M<\x00\x1f\xa2\x90\xb3\x93ap0TA\b\xacn\xb9\x89j\xbd\xa0\xbc0\xb2\u07c0\x00\u07d4\n\xec.Bn\xd6\xcc\f\xf3\xc2I\xc1\x89~\xacG\xa7\xfa\xa9\xbd\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\n\xf6_\x14xNU\xa6\xf9Vg\xfds%*\x1c\x94\a-*\x89\nv;\x8e\x02\xd4O\x80\x00\u07d4\n\xf6\xc8\xd59\xc9mP%\x9e\x1b\xa6q\x9e\x9c\x80`\xf3\x88\u008965\u026d\xc5\u07a0\x00\x00\u07d4\v\x069\x0f$7\xb2\x0e\u0123\xd3C\x1b2y\xc6X>^\u05c9\n\x84Jt$\xd9\xc8\x00\x00\u07d4\v\v8b\x11*\xee\u00e04\x92\xb1\xb0_D\x0e\xcaT%n\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\v\x0e\x05[(\xcb\xd0=\xc5\xffD\xaad\xf3\xdc\xe0O^c\xfb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v\x11\x9d\xf9\x9ck\x8d\xe5\x8a\x1e,?)zgD\xbfU\"w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v\x14\x89\x19\x99\xa6\\\x9e\xf73\b\xef\xe3\x10\f\xa1\xb2\x0e\x81\x92\x89+^:\xf1k\x18\x80\x00\x00\u07d4\v!\x13PE4d*\x1d\xaf\x10.\xee\x10\xb9\xeb\xdev\xe2a\x89\x94,\xdd|\x95\xf2\xbd\x80\x00\xe0\x94\v(\x8aZ\x8bu\xf3\xdcA\x91\xeb\x04W\xe1\xc8=\xbd M%\x8a\x01\a\x14\xe7{\xb4:\xb4\x00\x00\u07d4\v6\x9e\x00.\x1bLy\x13\xfc\xf0\x0f-^\x19\u0141eG\x8f\x89\x03\u007fe\x16(\x8c4\x00\x00\u07d4\vC\xbd#\x91\x02U\x81\u0615l\xe4*\a%y\u02ff\xcb\x14\x89\x01\x04\xe7\x04d\xb1X\x00\x00\u07d4\vP|\xf5SV\x8d\xaa\xf6U\x04\xaeN\xaa\x17\xa8\xea<\xdb\xf5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v]f\xb1<\x87\xb3\x92\xe9M\x91\xd5\xf7l\rE\nU(C\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v^ \x11\xeb\xc2Z\x00\u007f!6)`I\x8a\xfb\x8a\xf2\x80\xfb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\vd\x9d\xa3\xb9j\x10,\xdcm\xb6R\xa0\xc0}e\xb1\xe4C\xe6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\vi \xa6K6;\x8d]\x90\x80$\x94\xcfVKT|C\r\x89A\rXj \xa4\xc0\x00\x00\u07d4\vp\x11\x01\xa4\x10\x9f\x9c\xb3`\xdcW\xb7tBg=^Y\x83\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\vq\xf5T\x12$i\uf5ce/\x1f\xef\xd7\u02f4\x10\x98'r\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\xe0\x94\v{\xb3B\xf0\x1b\u0248\x8ej\x9a\xf4\xa8\x87\xcb\xf4\xc2\xdd,\xaf\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\v}3\x93q\xe5\xbeg'\xe6\xe31\xb5\x82\x1f\xa2K\u06ddZ\x89.\u007f\x81\x86\x82b\x01\x00\x00\u07d4\v\u007f\xc9\xdd\xf7\x05v\xf63\x06i\xea\xaaq\xb6\xa81\xe9\x95(\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\v\x80\xfcp(,\xbd\xd5\xfd\xe3[\xf7\x89\x84\xdb;\xdb\x12\x01\x88\x8968\x02\x1c\xec\u06b0\x00\x00\u07d4\v\x92M\xf0\a\xe9\xc0\x87\x84\x17\xcf\xe6;\x97n\xa1\xa3\x82\xa8\x97\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\v\x93\xfc\xa4\xa4\xf0\x9c\xac \xdb`\xe0e\xed\xcc\xcc\x11\u0976\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\v\x9d\xf8\x0f\xbe# \t\xda\xcf\n\xa8\xca\u0153v\xe2Gb\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v\xa6\xe4j\xf2Z\x13\xf5qi%Z4\xa4\xda\xc7\xce\x12\xbe\x04\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\v\xa8p[\xf5\\\xf2\x19\xc0\x95k^?\xc0\x1cDt\xa6\xcd\xc1\x89\x05%\xe0Y]Mk\x80\x00\u07d4\v\xafn\u0379\x1a\xcb6\x06\xa85|\v\xc4\xf4\\\xfd-~o\x8965\u026d\xc5\u07a0\x00\x00\u07d4\v\xb0_r$\xbbX\x04\x85eV\xc0~\xea\xdb\ud1fa\x8f|\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\v\xb0\xc1&\x82\xa2\xf1\\\x9bWA\xb28\\\xbeA\xf04\x06\x8e\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\v\xb2\\\xa7\u0448\xe7\x1eMi={\x17\a\x17\xd6\xf8\xf0\xa7\n\x89\x12C\x02\xa8/\xad\xd7\x00\x00\u07d4\v\xb2e\x0e\xa0\x1a\xcau[\xc0\xc0\x17\xb6K\x1a\xb5\xa6m\x82\xe3\x89Hz\x9a0E9D\x00\x00\u07d4\v\xb5Lr\xfdf\x10\xbf\xa463\x97\xe0 8K\x02+\fI\x89Hz\x9a0E9D\x00\x00\u07d4\v\xb7\x16\n\xba)7b\xf8sO>\x03&\xff\u0264\xca\xc1\x90\x8965\u026d\xc5\u07a0\x00\x00\u07d4\v\xc9\\\xb3-\xbbWL\x83/\xa8\x17J\x815m8\xbc\x92\xac\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v\xd6}\xbd\xe0z\x85n\xbd\x89;^\xdcO:[\xe4 &\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\v\xdb\xc5L\u023d\xbb\xb4\x02\xa0\x89\x11\xe2#*T`\u0386k\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\v\xddX\xb9n|\x91m\xd2\xfb05o*\xeb\xfa\xaf\x1d\x860\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\v\u1f39\x03C\xfa\xe501s\xf4a\xbd\x91JH9\x05l\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\v\xe1\xfd\xf6&\xeea\x89\x10-p\xd1;1\x01,\x95\xcd\x1c\u0589lk\x93[\x8b\xbd@\x00\x00\u07d4\v\xe2\xb9J\xd9P\xa2\xa6&@\xc3[\xfc\xcdlg\xda\xe4P\xf6\x89i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94\v\u681eC\a\xfeH\xd4\x12\xb8\u0461\xa8(M\xceHba\x8a\x04\x0f\xbf\xf8\\\x0180\x00\x00\u07d4\v\xef\xb5G\a\xf6\x1b,\x9f\xb0G\x15\xab\x02n\x1b\xb7 B\xbd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\v\xf0dB\x8f\x83bg\"\xa7\xb5\xb2j\x9a\xb2\x04!\xa7r>\x89\a?u\u0460\x85\xba\x00\x00\u07d4\v\xfb\xb6\x92]\xc7^R\xcf&\x84\"K\xbe\x05P\xfe\xa6\x85\u04c9j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\f\b\x80\x06\xc6K0\xc4\u076f\xbc6\xcb_\x05F\x9e\xb6(4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\f s\xbaD\xd3\u077d\xb69\xc0N\x19\x109\xa7\x17\x16#\u007f\x89M\x85<\x8f\x89\b\x98\x00\x00\xe0\x94\f\",|A\u0270H\xef\xcc\xe0\xa22CCb\xe1-g;\x8a\x02\x1e\x83Yivw8\x00\x00\xe0\x94\f(\b\xb9Q\ud787-{2y\x0f\xccY\x94\xaeA\xff\u070a\x15\x99n[<\u05b3\xc0\x00\x00\u07d4\f(\x84~O\t\xdf\xce_\x9b%\xaf|NS\x0fY\u0200\xfe\x8965\u026d\xc5\u07a0\x00\x00\u07d4\f-\\\x92\x058\xe9S\u02af$\xf0s\u007fUL\u0192wB\x8965\u026d\xc5\u07a0\x00\x00\u07d4\f0\xca\xcc?r&\x9f\x8bO\x04\xcf\a=+\x05\xa8=\x9a\u0449lyt\x12?d\xa4\x00\x00\u07d4\f29\xe2\xe8A$-\xb9\x89\xa6\x15\x18\xc2\"G\xe8\xc5R\b\x89\x0eJ\xf6G\x174d\x00\x00\xe0\x94\fH\r\xe9\xf7F\x10\x02\x90\x8bI\xf6\x0f\xc6\x1e+b\xd3\x14\v\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\fH\xaeb\xd1S\x97\x88\xeb\xa0\x13\xd7^\xa6\vd\xee\xbaN\x80\x89w\xfb\xdcC\xe00\x99\x80\x00\u07d4\fU\x89\xa7\xa8\x9b\x9a\xd1[\x02u\x190AYH\xa8u\xfb\xef\x89\x06\u0519\xeclc8\x00\x00\u07d4\fg\x03=\xd8\xee\u007f\f\x8a\xe54\xd4*Q\xf7\xd9\xd4\xf7\x97\x8f\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\fhE\xbfA\xd5\xee'<>\u6d70\u059fo\xd5\xea\xbb\xf7\x89\xa2\xa1\xb9h.X\t\x00\x00\xe0\x94\f\u007f\x86\x9f\x8e\x90\xd5?\xdc\x03\u8c81\x9b\x01k\x9d\x18\xeb&\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\f\x86\x92\xee\xff*S\xd6\xd1h\x8e\xd5j\x9d\u06fdh\u06bb\xa1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\f\x8ff\xc6\x01{\xce[ 4r\x04\xb6\x02\xb7C\xba\u05cd`\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\f\x8f\xd7w^T\xa6\xd9\u0263\xbf\x89\x0ev\x1fewi?\xf0\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\f\x92Z\xd5\xeb5,\x8e\xf7m\f\"-\x11[\a\x91\xb9b\xa1\x89\xacc]\u007f\xa3N0\x00\x00\u07d4\f\x96~0a\xb8zu>\x84P~\xb6\t\x86x,\x8f0\x13\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\f\xa1*\xb0\xb9fl\xf0\xce\xc6g\x1a\x15)/&SGj\xb2\x8a,x'\xc4-\"\xd0|\x00\x00\u07d4\f\xa6p\xeb,\x8b\x96\u02e3y!\u007fY)\u00b8\x92\xf3\x9e\xf6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\f\xae\x10\x8em\xb9\x9b\x9ecxv\xb0d\xc60>\u068ae\u0209\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\f\xbd\x92\x1d\xbe\x12\x15c\xb9\x8ahq\xfe\xcb\x14\xf1\xcc~\x88\u05c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\f\xbf\x87p\xf0\xd1\b.\\ \u016e\xad4\xe5\xfc\xa9\xaez\xe2\x8965\u026d\xc5\u07a0\x00\x00\u07d4\f\xc6\u007f\x82s\xe1\xba\xe0\x86\u007f\xd4.\x8b\x81\x93\xd7&y\xdb\xf8\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\f\u05a1A\x91\x8d\x12k\x10m\x9f.\xbfi\xe1\x02\xdeM2w\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\f\xda\x12\xbfr\xd4a\xbb\xc4y\xeb\x92\xe6I\x1d\x05~kZ\u044a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\f\u0716\v\x99\x8c\x14\x19\x98\x16\r\xc1y\xb3l\x15\u0484p\xed\x89\x1b\x1bk\u05efd\xc7\x00\x00\xe0\x94\f\xfb\x17#5\xb1l\x87\xd5\x19\xcd\x14uS\r W\u007f^\x0e\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\r\x1f*Wq>\xbcn\x94\xde)\x84n\x88D\xd3vfWc\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\r2e\xd3\u7f79=^\x8e\x8b\x1c\xa4\u007f!\ny>\u030e\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\r5@\x8f\"ef\x11o\xb8\xac\u06a9\xe2\xc9\u055bvh?\x892\xf5\x1e\u06ea\xa30\x00\x00\u07d4\rU\x1e\xc1\xa2\x13<\x98\x1d_\u01a8\xc8\x17?\x9e|OG\xaf\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\r]\x98V\\d|\xa5\xf1w\xa2\xad\xb9\xd3\x02/\xac(\u007f!\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\re\x80\x14\xa1\x99\x06\x1c\xf6\xb3\x943\x14\x03\x03\xc2\x0f\xfdNZ\x8a\x01\xbc\x85\xdc*\x89\xbb \x00\x00\u07d4\rg\x87\x06\xd07\x18\u007f>\"\xe6\xf6\x9b\x99\xa5\x92\xd1\x1e\xbcY\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\ri\x10\f9\\\xe6\xc5\xea\xad\xf9]\x05\xd8r\x83~\xde\xdd!\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\rt~\u559b\xf7\x9dW8\x1do\xe3\xa2@l\xd0\xd8\xce'\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\r\x80#\x92\x9d\x91r4\xae@Q+\x1a\xab\xb5\xe8\xa4Q'q\x89\b\x05\xe9\x9f\xdc\xc5\xd0\x00\x00\xe0\x94\r\x8a\xab\x8ft\xea\x86,\xdfvh\x05\x00\x9d?>B\xd8\xd0\v\x8a\x01;\x80\xb9\x9cQ\x85p\x00\x00\u07d4\r\x8c@\xa7\x9e\x18\x99O\xf9\x9e\xc2Q\xee\x10\u0408\u00d1.\x80\x89\x066d\xfc\u04bb\xc4\x00\x00\u07d4\r\x8e\xd7\xd0\xd1V83\x0e\xd7\xe4\xea\u032b\x8aE\x8dus~\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\r\x92X/\u06e0^\xab\xc3\xe5\x158\xc5m\xb8\x817\x85\xb3(\x89\nZ\xa8P\t\xe3\x9c\x00\x00\u07d4\r\x94C\xa7\x94h\xa5\xbb\xf7\xc1\xe5\xb9\x15\xb3d\x87\xf9\x16\x1f\x19\x84m\x10\x1431\x8a\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\r\xbdA|7+\x8b\r\x01\xbc\xd9Dpk\xd3.`\xae(\u0449\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\r\xc1\x00\xb1\a\x01\x1c\u007f\xc0\xa13\x96\x12\xa1l\xce\xc3(R\b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\r\u03dd\x8c\x98\x04E\x9fd|\x14\x13\x8e\xd5\x0f\xadV;AT\x89\t`\xdbwh\x1e\x94\x00\x00\u07d4\r\xcf\xe87\xea\x1c\xf2\x8ce\xfc\xce\u00fe\xf1\xf8NY\xd1P\xc0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\r\xd4\xe6t\xbb\xad\xb1\xb0\u0702D\x98q=\xce;QV\xda)\x89\t79SM(h\x00\x00\u07d4\r\xfb\u0501pP\xd9\x1d\x9db\\\x02\x05<\xf6\x1a>\xe2\x85r\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\x0e\x02N\u007f\x02\x9cj\xaf:\x8b\x91\x0f^\b\bs\xb8W\x95\xaa\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x0e\tdl\x99\xafC\x8e\x99\xfa'L\xb2\xf9\xc8V\xcbe\xf76\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x0e\f\x9d\x00^\xa0\x16\u0095\xcdy\\\xc9!>\x87\xfe\xbc3\xeb\x89\n\xbb\xcdN\xf3wX\x00\x00\u07d4\x0e\rf3\xdb\x1e\f\u007f#Jm\xf1c\xa1\x0e\n\xb3\x9c \x0f\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x0e\x11\xd7z\x89w\xfa\xc3\r&\x84E\xe51\x14\x9b1T\x1a$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x0e\x12=}\xa6\xd1\xe6\xfa\xc2\u072d\xd2p)$\v\xb3\x90R\xfe\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x0e\x18\x01\xe7\vbb\x86\x1b\x114\u033c9\x1fV\x8a\xfc\x92\xf7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x0e \x94\xac\x16T\xa4k\xa1\xc4\u04e4\v\xb8\xc1}\xa7\U000d6209\x13h?\u007f<\x15\xd8\x00\x00\u07d4\x0e!\xaf\x1b\x8d\xbf'\xfc\xf6?7\xe0G\xb8z\x82\\\xbe|'\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x0e.PJ-\x11\"\xb5\xa9\xfe\xee\\\xb1E\x1b\xf4\u00ac\xe8{\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x0e/\x8e(\xa6\x81\xf7|X;\xd0\xec\xde\x16cK\xdd~\x00\u0349\x05'8\xf6Y\xbc\xa2\x00\x00\u07d4\x0e2\x02\x19\x83\x8e\x85\x9b/\x9f\x18\xb7.=@s\xcaP\xb3}\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x0e3\xfc\xbb\xc0\x03Q\v\xe3W\x85\xb5*\x9c]!k\xc0\x05\xf4\x89e\xea=\xb7UF`\x00\x00\u07d4\x0e6\x96\xcf\x1fB\x17\xb1c\u047c\x12\xa5\xeas\x0f\x1c2\xa1J\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x0e9\x0fD\x05=\xdf\xce\xf0\xd6\b\xb3^M\x9c,\xbe\x98q\xbb\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x0e:(\xc1\u07ef\xb0P[\xdc\xe1\x9f\xe0%\xf5\x06\xa6\xd0\x1c\xeb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x0e=\xd7\xd4\xe4)\xfe90\xa6A@5\xf5+\xdcY\x9dxM\x89\x02,\xa3X|\xf4\xeb\x00\x00\u07d4\x0eGey\x03Rek\xc6Vh,$\xfc^\xf3\xe7j#\u01c9\x02\x86\xd7\xfc\f\xb4\xf5\x00\x00\u07d4\x0eI\x88\x00Dqw\xb8\u022f\xc3\xfd\xfa\u007fi\xf4\x05\x1b\xb6)\x89t\x05\xb6\x9b\x8d\xe5a\x00\x00\u07d4\x0ek\xaa\xa3\u07b9\x89\xf2\x89b\x00vf\x86\x18\xe9\xac3(e\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x0el\xd6d\xad\x9c\x1e\xd6K\xf9\x87I\xf4\x06D\xb6&\xe3y,\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\xe0\x94\x0em\xfdU;.\x87=*\xec\x15\xbd_\xbb?\x84r\xd8\u04d4\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\x0en\xc3\x137bq\xdf\xf5T#\xabT\"\xcc:\x8b\x06\xb2+\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x0en\u0399\x11\x1c\xad\x19a\xc7H\xed=\xf5\x1e\xddi\u04a3\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\x0e\x83\xb8PH\x1a\xb4MI\xe0\xa2)\xa2\xe4d\x90,iS\x9b\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x0e\x89\xed\xdd?\xa0\xd7\x1d\x8a\xb0\xff\x8d\xa5X\x06\x86\xe3\xd4\xf7O\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x0e\x90\x96\xd3C\xc0`\xdbX\x1a\x12\x01\x12\xb2x`~\xc6\xe5+\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x0e\x9cQ\x18d\xa1w\xf4\x9b\xe7\x82\x02w?`H\x9f\xe0NR\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x0e\xa2\xa2\x101+>\x86~\xe0\xd1\xcch,\xe1\xd6f\xf1\x8e\u054a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x0e\xb1\x89\xef,-Wb\xa9c\u05b7\xbd\xf9i\x8e\xa8\u7d0a\x89Hz\x9a0E9D\x00\x00\xe0\x94\x0e\xb5\xb6b\xa1\xc7\x18`\x8f\xd5/\f%\xf97\x880\x17\x85\x19\x8a\x01J7(\x1aa.t\x00\x00\xe0\x94\x0e\xc4f\x96\xff\xac\x1fX\x00_\xa8C\x98$\xf0\x8e\xed\x1d\xf8\x9b\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x0e\xc5\n\xa8#\xf4e\xb9FK\v\xc0\u0125w$\xa5U\xf5\u058a\f\x83\xd1Bj\u01f1\xf0\x00\x00\u07d4\x0e\xc50\x8b1(.!\x8f\xc9\xe7Y\xd4\xfe\xc5\xdb7\b\xce\u01096C\xaady\x86\x04\x00\x00\u07d4\x0e\xcc\xf6\x17\x84O\xd6\x1f\xbab\xcb\x0eD[z\u018b\xcc\x1f\xbe\x89\x14\xfeO\xe65e\xc6\x00\x00\u07d4\x0e\u04fb:N\xb5T\xcf\u0297\x94}WU\a\xcd\xfdm!\u0609\x1d\xb3 _\xcc#\u0540\x00\u07d4\x0e\xd7l,;]P\xff\x8f\xb5\v>\xea\xcdh\x15\x90\xbe\x1c-\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x0e\u0680\xf4\xed\aJ\xeaiz\xed\xdf(;c\xdb\xca=\xc4\u0689lk\x93[\x8b\xbd@\x00\x00\u07d4\x0e\xddKX\x0f\xf1\x0f\xe0lJ\x03\x11b9\xef\x96b+\xae5\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\x0e\xe3\x91\xf0^\u038a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x0f\x92\x9c\xf8\x95\xdb\x01z\xf7\x9f>\xad\"\x16\xb1\xbdi\xc3}\u01c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x0f\xa0\x10\xce\fs\x1d;b\x8e6\xb9\x1fW\x13\x00\u477e\xab\x8963\x03\"\xd5#\x8c\x00\x00\u07d4\x0f\xa5\xd8\u0173\xf2\x94\xef\u0515\xabi\xd7h\xf8\x18rP\x85H\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x0f\xa6\u01f0\x97=\v\xae)@T\x0e$}6'\xe3|\xa3G\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x0f\xad\x05P|\u070f$\xb2\xbeL\xb7\xfa]\x92}\u06d1\x1b\x88\x89\xa2\xdf\x13\xf4A\xf0\t\x80\x00\u07d4\x0f\xb5\xd2\xc6s\xbf\xb1\xdd\xca\x14\x1b\x98\x94\xfdm?\x05\xdag \x89\x05k\xc7^-c\x10\x00\x00\u07d4\x0f\u0260\xe3AE\xfb\xfd\xd2\xc9\u04a4\x99\xb6\x17\u05e0)i\xb9\x89\t\xc2\x00vQ\xb2P\x00\x00\xe0\x94\x0f\xcf\xc4\x06P\b\xcf\xd3#0_b\x86\xb5zM\xd7\xee\xe2;\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x0f\xdde@#\x95\u07db\u045f\xeeE\a\xefSE\xf7E\x10L\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x0f\xecN\xe0\xd7\xca\x18\x02\x90\xb6\xbd \xf9\x99#B\xf6\x0f\xf6\x8d\x89\x12 \u007f\x0e\xdc\xe9q\x80\x00\u07d4\x0f\ue06c3\x1e\xfd\x8f\x81\x16\x1cW8+\xb4P{\xb9\xeb\xec\x89\x15\xaf\x88\r\x8c\u06c3\x00\x00\u07d4\x0f\xfe\xa0mq\x13\xfbj\xec(i\xf4\xa9\u07f0\x90\a\xfa\xce\xf4\x89\f8F\x81\xb1\xe1t\x00\x00\u07d4\x10\tq\x98\xb4\xe7\xee\x91\xff\x82\xcc/;\xd9_\xeds\xc5@\xc0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x10\vM\tw\xfc\xba\xd4\u07bd^d\xa0Iz\xea\xe5\x16\x8f\xab\x89\x11\f\x90s\xb5$Z\x00\x00\xe0\x94\x10\x1a\nd\xf9\xaf\xccD\x8a\x8a\x13\rM\xfc\xbe\xe8\x957\xd8T\x8a\x037\xfe_\xea\xf2\u0440\x00\x00\u07d4\x10,G}i\xaa\u06e9\xa0\xb0\xf6+tY\xe1\u007f\xbb\x1c\x15a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x101\xe0\xec\xb5I\x85\xae!\xaf\x17\x93\x95\r\xc8\x11\x88\x8f\xde|\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x104d\x14\xbe\xc6\xd3\xdc\xc4NP\xe5MT\u00b8\xc3sN>\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x108\x98X\xb8\x00\xe8\xc0\xec2\xf5\x1e\xd6\x1a5YF\xcc@\x9b\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x10Y\xcb\xc6>6\xc4>\x88\xf3\x00\b\xac\xa7\xce\x05\x8e\ua816\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\x10n\xd5\xc7\x19\xb5&\x14w\x89\x04%\xaeuQ\xdcY\xbd%\\\x8a\x02\x89jX\xc9[\xe5\x88\x00\x00\u07d4\x10q\x1c=\xda21x\x85\xf0\xa2\xfd\x8a\xe9.\x82\x06\x9b\r\v\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x10sy\xd4\xc4gFO#[\xc1\x8eU\x93\x8a\xad>h\x8a\u05c9\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94\x10v!-Ou\x8c\x8e\xc7\x12\x1c\x1c}t%I&E\x92\x84\x8a\ai[Y\xb5\xc1{L\x00\x00\u07d4\x10x\xd7\xf6\x1b\x0eV\xc7N\xe6c[.\x18\x19\xef\x1e=\x87\x85\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x10z\x03\xcf\bB\xdb\u07b0a\x8f\xb5\x87\xcai\x18\x9e\xc9/\xf5\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x10\x80\xc1\xd85\x8a\x15\xbc\x84\xda\xc8%\x89\u0392\xb9\x81\x89t\xc1\xfa\xb8\xad\xb4T\x00\x00\u07d4\x10\xe1\xe37x\x85\xc4-}\xf2\x18R.\xe7vh\x87\xc0^j\x89\x10C\xc4<\xde\x1d9\x80\x00\u07d4\x10\u342d+\xa3=\x82\xb3s\x88\u041cED\u01b0\"]\xe5\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x10\xf4\xbf\xf0\u02a5\x02|\nj-\xcf\xc9R\x82M\xe2\x94\t\t\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x11\x00\x1b\x89\xed\x87>:\xae\xc1\x15V4\xb4h\x16C\x98c#\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x11\x027\u03d1\x17\xe7g\x92/\u0121\xb7\x8dyd\u0682\xdf \x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x11\x11\xe5\xdb\xf4^o\x90mb\x86o\x17\b\x10\x17\x88\xdd\xd5q\x89F{\xe6S>\xc2\xe4\x00\x00\xe0\x94\x11\x17+'\x8d\xddD\xee\xa2\xfd\xf4\xcb\x1d\x16\x96#\x91\xc4S\u064a\xc6/=\x9b\xfdH\x95\xf0\x00\x00\u07d4\x11&4\xb4\xec0\xffxn\x02AY\xf7\x96\xa5y9\xea\x14N\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x110l}WX\x867x\x0f\xc9\xfd\xe8\xe9\x8e\xcb\x00\x8f\x01d\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\x116\x12\xbc;\xa0\xeeH\x98\xb4\x9d\xd2\x023\x90_/E\x8fb\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\x11A_\xaba\xe0\xdf\u0539\x06v\x14\x1aUz\x86\x9b\xa0\xbd\xe9\x89o\x05\xb5\x9d; \x00\x00\x00\u07d4\x11L\xbb\xbfo\xb5*\xc4\x14\xbe~\xc6\x1f{\xb7\x14\x95\xce\x1d\xfa\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x11L\xfe\xfeP\x17\r\xd9z\xe0\x8f\nDTIx\u0159T\x8d\x89.\u0207\xe7\xa1J\x1c\x00\x00\u07d4\x11a\b\xc1 \x84a.\xed\xa7\xa9=\xdc\xf8\xd2`.'\x9e\\\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x11d\u02aa\x8c\u0157z\xfe\x1f\xad\x8a}`(\xce-W)\x9b\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x11gZ%UF\a\xa3\xb6\xc9*\x9e\xe8\xf3ou\xed\xd3\xe36\x89\b\xa9\xab\xa5W\xe3l\x00\x00\u07d4\x11j\t\xdff\xcb\x15\x0e\x97W\x8e)\u007f\xb0n\x13\x04\f\x89<\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x11o\xef^`\x16B\xc9\x18\u02c9\x16\x0f\xc2);\xa7\x1d\xa96\x89+|\xc2\xe9\xc3\"\\\x00\x00\u07d4\x11xP\x1f\xf9J\xdd\x1cX\x81\xfe\x88a6\xf6\xdf\xdb\xe6\x1a\x94\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\x11y\xc6\r\xbd\x06\x8b\x15\v\aM\xa4\xbe#\x03; \u0185X\x89$\xdc\xe5M4\xa1\xa0\x00\x00\u07d4\x11}\x9a\xa3\xc4\xd1;\xee\x12\xc7P\x0f\t\xf5\xdd\x1cf\xc4e\x04\x89\v*\xd3\x04\x90\xb2x\x00\x00\xe0\x94\x11}\xb867\u007f\xe1TU\xe0,.\xbd\xa4\v\x1c\xebU\x1b\x19\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x11\x8c\x18\xb2\xdc\xe1p\xe8\xf4Eu;\xa5\xd7Q<\xb7cm-\x8a\x01\xdd\f\x88_\x9a\r\x80\x00\x00\u07d4\x11\x8f\xbdu;\x97\x929Z\xefzMx\xd2c\xcd\u02ab\xd4\xf7\x8963\x03\"\xd5#\x8c\x00\x00\xe0\x94\x11\x92\x83x\xd2}U\xc5 \xce\xed\xf2L\xeb\x1e\x82-\x89\r\xf0\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x11\x9a\xa6M[}\x18\x1d\xae\x9d<\xb4I\x95\\\x89\xc1\xf9c\xfa\x89%\xf2s\x93=\xb5p\x00\x00\xe0\x94\x11\xc05\x8a\xa6G\x9d\xe2\x18f\xfe!\a\x19$\xb6^p\xf8\xb9\x8a\a\xb5?y\xe8\x88\xda\xc0\x00\x00\xe0\x94\x11\xd2$z\"\x1ep\xc2\xd6m\x17\xee\x13\x8d8\xc5_\xfb\x86@\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x11\u05c4JG\x1e\xf8\x9a\x8d\x87uUX<\xee\xbd\x149\xea&\x8a\x02#i\u6e80\u0188\x00\x00\u07d4\x11\xdda\x85\u0668\xd7=\xdf\u06a7\x1e\x9bwtC\x1cM\xfe\u008965\u026d\xc5\u07a0\x00\x00\u07d4\x11\xe7\x99~\u0750E\x03\xd7}\xa6\x03\x8a\xb0\xa4\xc84\xbb\xd5c\x89\x15\b\x94\xe8I\xb3\x90\x00\x00\u07d4\x11\xec\x00\xf8I\xb61\x9c\xf5\x1a\xa8\u074ff\xb3U)\xc0\xbew\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x11\ufe22\x04Q\x16\x1bdJ\x8c\u03bb\xc1\xd3C\xa3\xbb\xcbR\x89\xadx\xeb\u016cb\x00\x00\x00\xe0\x94\x11\xfe\xfb]\xc1\xa4Y\x8a\xa7\x12d\fQwu\u07e1\xd9\x1f\x8c\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x12\x0f\x9d\xe6\xe0\xaf~\xc0*\a\xc6\t\u0284G\xf1W\xe64L\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\x12\x10\xf8\v\u06c2l\x17Tb\xab\a\x16\xe6\x9eF\xc2J\xd0v\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x12\x13N\u007fk\x01{\xf4\x8e\x85Z9\x9c\xa5\x8e.\x89/\xa5\u020965\u026d\xc5\u07a0\x00\x00\u07d4\x12\x170t\x98\x01S\xae\xaaK\r\xcb\xc7\x13.\xad\xce\xc2\x1bd\x89\r\x02\xabHl\xed\xc0\x00\x00\u07d4\x12\x1f\x85[p\x14\x9a\xc84s\xb9po\xb4MG\x82\x8b\x98;\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x12'\xe1\nM\xbf\x9c\xac\xa3\x1b\x17\x80#\x9fUv\x15\xfc5\xc1\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x12-\xcf\xd8\x1a\u0779}\x1a\x0eI%\u0135I\x80n\x9f;\xeb\x89R 5\xccn\x01!\x00\x00\u07d4\x12/V\x12%I\xd1h\xa5\xc5\xe2g\xf5&b\xe5\xc5\xcc\xe5\u0209\n\ad\a\xd3\xf7D\x00\x00\xe0\x94\x121o\xc7\xf1x\xea\xc2.\xb2\xb2Z\xed\xea\xdf=u\xd0\x01w\x8a\x04<3\xbe\x05\xf6\xbf\xb9\x80\x00\xe0\x94\x127Y\xf33\xe1>0i\xe2\x03KO\x059\x89\x18\x11\x9d6\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x12\\\xc5\xe4\xd5k+\xcc.\xe1\xc7\t\xfb\x9eh\xfb\x17t@\xbd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x12c#\x88\xb2v^\xe4E+P\x16\x1d\x1f\xff\xd9\x1a\xb8\x1fJ\x89(\x1d\x90\x1fO\xdd\x10\x00\x00\u07d4\x12h\x97\xa3\x11\xa1J\xd4;x\xe0\x92\x01\x00\xc4Bk\xfdk\u07494\xc7&\x89?-\x94\x80\x00\u07d4\x12m\x91\xf7\xad\x86\u07bb\x05W\xc6\x12\xca'n\xb7\xf9m\x00\xa1\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x12}?\xc5\x00;\xf6<\r\x83\xe99W\x83e\x15\xfd'\x90E\x89\x06\x10\xc9\".nu\x00\x00\xe0\x94\x12}\xb1\xca\xdf\x1bw\x1c\xbdtu\xe1\xb2ri\x0fU\x8c\x85e\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\x12\x84\xf0\xce\xe9\xd2\xff)\x89\xb6Ut\xd0o\xfd\x9a\xb0\xf7\xb8\x05\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x12\x8b\x90\x8f\xe7C\xa44 =\xe2\x94\xc4A\xc7\xe2\n\x86\xeag\x89&\xab\x14\xe0\xc0\xe1<\x00\x00\xe0\x94\x12\x93\u01cc}jD;\x9dt\xb0\xba^\xe7\xbbG\xfdA\x85\x88\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\x12\x96\xac\xde\xd1\xe0c\xaf9\xfe\x8b\xa0\xb4\xb6=\xf7\x89\xf7\x05\x17\x89\x05k\xf9\x1b\x1ae\xeb\x00\x00\u07d4\x12\xaa}\x86\xdd\xfb\xad0\x16\x92\xfe\xac\x8a\b\xf8A\xcb!\\7\x89\amA\xc6$\x94\x84\x00\x00\xe0\x94\x12\xaf\xbc\xba\x14'\xa6\xa3\x9e{\xa4\x84\x9fz\xb1\xc45\x8a\xc3\x1b\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x12\xb5\xe2\x89E\xbb)i\xf9\xc6Lc\xcc\x05\xb6\xf1\xf8\xd6\xf4\u054a\x01\xa2\x9e\x86\x91;t\x05\x00\x00\u0794\x12\u03cb\x0eFR\x13!\x1a[S\u07f0\xdd'\x1a(,\x12\u0248\xd2\xf1?w\x89\xf0\x00\x00\u07d4\x12\xd2\a\x90\xb7\xd3\xdb\u060c\x81\xa2y\xb8\x12\x03\x9e\x8a`;\u0409V\xf9\x85\u04c6D\xb8\x00\x00\xe0\x94\x12\xd6\re\xb7\xd9\xfcH\x84\v\xe5\xf8\x91\xc7E\xcev\xeeP\x1e\x8a\x04\x85\xe58\x8d\fv\x84\x00\x00\u0794\x12\xd9\x1a\x92\xd7O\xc8a\xa7)dm\xb1\x92\xa1%\xb7\x9fSt\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\x12\u992d*\xd5t\x84\xddp\x05e\xbd\xdbFB;\u067d1\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4\x12\xf3,\n\x1f-\xaa\xb6v\xfei\xab\xd9\xe0\x185-L\xcdE\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\x12\xf4`\xaedl\xd2x\x0f\xd3\\P\xa6\xafK\x9a\xcc\xfa\x85\u018965\u026d\xc5\u07a0\x00\x00\u07d4\x12\xff\xc1\x12\x86\x05\xcb\f\x13p\x9ar\x90Po&\x90\x97q\x93\x89\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4\x13\x03$F\xe7\xd6\x10\xaa\x00\xec\x8cV\u0275t\xd3l\xa1\xc0\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x13\x1cy,\x19}\x18\xbd\x04]p$\x93|\x1f\x84\xb6\x0fD8\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x13\x1d\xf8\xd30\xeb|\xc7\x14}\nUWo\x05\u078d&\xa8\xb7\x89\n1\x06+\xee\xedp\x00\x00\u07d4\x13\x1f\xae\xd1%a\xbbz\xee\x04\xe5\x18Z\xf8\x02\xb1\xc3C\x8d\x9b\x89\v\xdf\x0e\u0733\x90\xc9\xc8V\b\xb7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x13!\xcc\xf2\x979\xb9t\xe5\xa5\x16\xf1\x8f:\x846q\xe3\x96B\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x13'\xd7Y\xd5n\n\xb8z\xf3~\xcfc\xfe\x01\xf3\x10\xbe\x10\n\x89#\xbc<\xdbh\xa1\x80\x00\x00\u07d4\x13)\xdd\x19\xcdK\xaa\x9f\xc6C\x10\xef\xec\xea\xb2!\x17%\x1f\x12\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x137\x1f\x92\xa5n\xa88\x1eC\x05\x9a\x95\x12\x8b\xdcMC\u0166\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x13O\x15\xe1\xe3\x9cSCY0\xaa\xed\xf3\xe0\xfeV\xfd\xe8C\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x13Ac\xbe\x9f\xbb\xe1\xc5in\xe2U\xe9\v\x13%C\x95\xc3\x18\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x13\\\xec\xd9U\xe5y\x83pv\x920\x15\x93\x03\u0671\x83\x9ff\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x13]\x17\x19\xbf\x03\xe3\xf8f1$y\xfe3\x81\x18\xcd8~p\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x13^\xb8\xc0\xe9\xe1\x01\xde\xed\xec\x11\xf2\xec\xdbf\xae\x1a\xae\x88g\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x13`\xe8}\xf2Li\xeemQ\xc7nsv\u007f\xfe\x19\xa2\x13\x1c\x89\x04\xfc\xc1\xa8\x90'\xf0\x00\x00\u07d4\x13l\x83K\xf1\x112m s\x95)[.X>\xa7\xf35r\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x13mKf+\xbd\x10\x80\xcf\xe4D[\x0f\xa2\x13\x86D5\xb7\xf1\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x13oI\a\u02b4\x1e'\bK\x98E\x06\x9f\xf2\xfd\f\x9a\xdey\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x13t\xfa\xcd{?\x8dhd\x9d`\xd4U\x0e\xe6\x9f\xf0HA3\x89\x0e\x9e\xd6\xe1\x11r\xda\x00\x00\u07d4\x13|\xf3A\xe8Ql\x81X\x14\xeb\xcds\xe6V\x9a\xf1L\xf7\xbc\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x13\x84\x8bF\xeau\xbe\xb7\xea\xa8_Y\xd8f\xd7\u007f\xd2L\xf2\x1a\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\x13\x9d51\u0252*\xd5bi\xf60\x9a\xa7\x89\xfb$\x85\xf9\x8c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x13\x9eG\x97d\xb4\x99\xd6f \x8cJ\x8a\x04z\x97\x041c\u0749 w!*\xffm\xf0\x00\x00\u07d4\x13\xa5\xee\xcb80]\xf9Iq\xef-\x9e\x17\x9a\xe6\u03ba\xb37\x89\x11\u3ac3\x95\xc6\xe8\x00\x00\u07d4\x13\xac\xad\xa8\x98\n\xff\xc7PI!\xbe\x84\xebID\xc8\xfb\xb2\xbd\x89V\u04aa:\\\t\xa0\x00\x00\u07d4\x13\xb9\xb1\a\x15qL\t\xcf\xd6\x10\u03dc\x98F\x05\x1c\xb1\xd5\x13\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x13\xce3-\xffe\xa6\xab\x938\x97X\x8a\xa2>\x00\t\x80\xfa\x82\x89\x0e\x02\x056\xf0(\xf0\x00\x00\u07d4\x13\xd6z~%\xf2\xb1,\u06c5XP\t\xf8\xac\u011b\x96s\x01\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x13\xde\xe0>7\x99\x95-\a8\x84=K\xe8\xfc\n\x80?\xb2\x0e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x13\xe0/\xb4H\xd6\xc8J\xe1}\xb3\x10\xad(m\x05a`\u0695\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x13\xe3!r\x8c\x9cWb\x80X\xe9?\xc8f\xa02\xdd\v\u0690\x89&\xbc\xca#\xfe.\xa2\x00\x00\u07d4\x13\xec\x81\"\x84\x02n@\x9b\xc0f\xdf\xeb\xf9\u0564\xa2\xbf\x80\x1e\x89WG=\x05\u06ba\xe8\x00\x00\xe0\x94\x14\x01)\xea\xa7f\xb5\xa2\x9f[:\xf2WND\t\xf8\xf6\xd3\xf1\x8a\x01Z\xf1\u05cbX\xc4\x00\x00\x00\u07d4\x14\x05\x18\xa3\x19K\xad\x13P\xb8\x94\x9ee\x05e\u07bem\xb3\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x14\x06\x85M\x14\x9e\b\x1a\xc0\x9c\xb4\xcaV\r\xa4c\xf3\x120Y\x89Hz\x9a0E9D\x00\x00\u07d4\x14\f\xa2\x8f\xf3;\x9ff\xd7\xf1\xfc\x00x\xf8\xc1\xee\xf6\x9a\x1b\xc0\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\x14\x0f\xbaX\xdb\xc0H\x03\xd8L!0\xf0\x19x\xf9\xe0\xc71)\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\x14\x1a^9\xee/h\n`\x0f\xbfo\xa2\x97\u0790\xf3\"\\\u074a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x14%N\xa1&\xb5-\x01B\xda\n~\x18\x8c\xe2U\xd8\xc4qx\x89*\x03I\x19\u07ff\xbc\x00\x00\u07d4\x14+\x87\xc5\x04?\xfbZ\x91\xdf\x18\xc2\xe1\t\xce\xd6\xfeJq\u06c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x14\x87\xf5\xa5$\u0288Q^\x8a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4\x14\xa75 f6D\x04\xdbP\xf0\xd0\u05cduJ\"\x19\x8e\xf4\x89e\xea=\xb7UF`\x00\x00\u07d4\x14\xab\x16K;RL\x82\u05ab\xfb\xc0\u0783\x11&\xae\x8d\x13u\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x14\xb1`>\xc6+ \x02 3\xee\xc4\xd6\xd6eZ\xc2J\x01Z\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94\x14\xc6;\xa2\u0731\xddM\xf3=\u06b1\x1cO\x00\a\xfa\x96\xa6-\x8a\x03HA\xb6\x05z\xfa\xb0\x00\x00\xe0\x94\x14\xcd\u077c\x8b\t\xe6gZ\x9e\x9e\x05\t\x1c\xb9\"8\u00de\x1e\x8a\x01\x14x\xb7\xc3\n\xbc0\x00\x00\u07d4\x14\xd0\n\xad9\xa0\xa7\u045c\xa0SP\xf7\xb07'\xf0\x8d\xd8.\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x14\xee\xc0\x9b\xf0>5+\xd6\xff\x1b\x1e\x87k\xe6d\xce\xff\xd0\u03c9\x01\x16\xdc:\x89\x94\xb3\x00\x00\u07d4\x14\xf2!\x15\x95\x18x;\u0127\x06go\xc4\xf3\xc5\xee@X)\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x14\xfc\xd19\x1e}s/Avl\xda\u0344\xfa\x1d\xeb\x9f\xfd\u0489lk\x93[\x8b\xbd@\x00\x00\u07d4\x15\x0e=\xbc\xbc\xfc\x84\xcc\xf8\x9bsBwc\xa5e\xc2>`\u0409\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\x15\x18b{\x885\x1f\xed\xe7\x96\xd3\xf3\b3d\xfb\u0508{\f\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u0794\x15\"J\xd1\xc0\xfa\xceF\xf9\xf5V\xe4wJ0%\xad\x06\xbdR\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\x15/+\xd2)\xdd\xf3\xcb\x0f\xda\xf4U\xc1\x83 \x9c\x0e\x1e9\xa2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x15/N\x86\x0e\xf3\xee\x80jP'w\xa1\xb8\xdb\xc9\x1a\x90vh\x89 \x86\xac5\x10R`\x00\x00\u07d4\x15<\b\xaa\x8b\x96\xa6\x11\xefc\xc0%>*C4\x82\x9eW\x9d\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\x15<\xf2\x84,\xb9\u0787l'o\xa6Gg\u0468\xec\xf5s\xbb\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x15>\xf5\x8a\x1e.z>\xb6\xb4Y\xa8\n\xb2\xa5G\xc9A\x82\xa2\x8a\x14T+\xa1*3|\x00\x00\x00\u07d4\x15DY\xfa/!1\x8e44D\x97\x89\xd8&\xcd\xc1W\f\xe5\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x15G\xb9\xbfz\xd6bt\xf3A8'#\x1b\xa4\x05\ue308\xc1\x8a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u07d4\x15H\xb7p\xa5\x11\x8e\u0787\u06e2\xf6\x903\u007fam\u60eb\x89\x1c\x99V\x85\u0fc7\x00\x00\u07d4\x15R\x83P\xe0\xd9g\n.\xa2\u007f{J3\xb9\xc0\xf9b\x1d!\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\x15[7y\xbbmV4./\u0681{[-\x81\xc7\xf4\x13'\x89\x02\xb8\xaa:\al\x9c\x00\x00\u07d4\x15e\xaf\x83~\xf3\xb0\xbdN+#V\x8dP#\xcd4\xb1d\x98\x89\x15Q\xe9rJ\u013a\x00\x00\u07d4\x15f\x91\x80\xde\u2558\x86\x9b\b\xa7!\xc7\xd2LL\x0e\xe6?\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x15r\xcd\xfa\xb7*\x01\u0396\x8ex\xf5\xb5D\x8d\xa2\x98S\xfb\u074a\x01\x12blI\x06\x0f\xa6\x00\x00\xe0\x94\x15uY\xad\xc5Wd\xccm\xf7\x93#\t%4\xe3\xd6dZf\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x15x\xbd\xbc7\x1bM$8E3\x05V\xff\xf2\xd5\xefM\xffg\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x15~\xb3\xd3\x11;\u04f5\x97qM:\x95N\xdd\x01\x89\x82\xa5\u02c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x15\x84\xa2\xc0f\xb7\xa4U\xdb\u05ae(\a\xa73N\x83\xc3_\xa5\x89\a\f\x1c\xc7;\x00\xc8\x00\x00\u07d4\x15\x87F\x86\xb6s=\x10\xd7\x03\xc9\xf9\xbe\xc6\xc5.\xb8b\x8dg\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x15\x8a\ra\x92S\xbfD2\xb5\xcd\x02\u01f8b\xf7\u00b7V6\x89\a[\xac|[\x12\x18\x80\x00\u07d4\x15\x98\x12y\x82\xf2\xf8\xad;k\x8f\xc3\xcf'\xbfax\x01\xba+\x89\t`\xdbwh\x1e\x94\x00\x00\xe0\x94\x15\x9a\xdc\xe2z\xa1\vG#d)\xa3JZ\xc4,\xad[d\x16\x8a\x06\xbf\x90\xa9n\xdb\xfaq\x80\x00\u07d4\x15\xa0\xae\xc3\u007f\xf9\xff=T\t\xf2\xa4\xf0\xc1!*\xac\xcb\x02\x96\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x15\xaaS\r\xc3iX\xb4\xed\xb3\x8e\xeem\xd9\xe3\xc7}L\x91E\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x15\xac\xb6\x15h\xecJ\xf7\xea(\x198a\x81\xb1\x16\xa6\xc5\xeep\x8a\x06\x90\x83l\n\xf5\xf5`\x00\x00\u07d4\x15\xb9o0\xc2;\x86d\xe7I\x06Q\x06k\x00\xc49\x1f\xbf\x84\x89\x16B\xe9\xdfHv)\x00\x00\u07d4\x15\xc7\xed\xb8\x11\x8e\xe2{4\"\x85\xebY&\xb4z\x85[\u01e5\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x15\u0654hPz\xa0A?\xb6\r\xca*\xdc\u007fV\x9c\xb3kT\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x15\u06f4\x8c\x980\x97d\xf9\x9c\xed6\x92\xdc\xca5\xee0k\xac\x8a\x1f\u00c4+\xd1\xf0q\xc0\x00\x00\xe0\x94\x15\u072f\xcc+\xac\xe7\xb5[T\xc0\x1a\x1cQF&\xbfa\xeb\u060a\x01\xfd\x934\x94\xaa_\xe0\x00\x00\u07d4\x15\u3d44\x05kb\xc9s\xcf^\xb0\x96\xf1s>T\xc1\\\x91\x892\xc7Z\x02#\xdd\xf3\x00\x00\u07d4\x15\xeb\xd1\xc7\xca\u04af\xf1\x92u\xc6W\xc4\xd8\b\xd0\x10\xef\xa0\xf5\x89\n\xdf0\xbap\u0217\x00\x00\u07d4\x15\xee\x0f\xc6>\xbf\x1b\x1f\u011d{\xb3\x8f\x88c\x82:.\x17\u0489g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x15\xf1\xb3R\x11\rh\x90\x1d\x8fg\xaa\xc4jl\xfa\xfe\x03\x14w\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x15\xf2\xb7\xb1d2\xeeP\xa5\xf5[A#/c4\xedX\xbd\xc0\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x16\x01\x9aM\xaf\xabC\xf4\u067fAc\xfa\xe0\x84}\x84\x8a\xfc\xa2\x89\x01[\xc7\x019\xf7J\x00\x00\u07d4\x16\x02&\xef\xe7\xb5:\x8a\xf4b\xd1\x17\xa0\x10\x80\x89\xbd\xec\xc2\u0449\n\xdf0\xbap\u0217\x00\x00\u07d4\x16\f\xebo\x98\x0e\x041_S\xc4\xfc\x98\x8b+\xf6\x9e(M}\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\xe0\x94\x16\x1c\xafZ\x97*\u0383y\xa6\u0420J\xe6\xe1c\xfe!\xdf+\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\x16\x1d&\xefgY\xba[\x9f \xfd\xcdf\xf1a2\xc3RA^\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16!\x10\xf2\x9e\xac_}\x02\xb5C\xd8\xdc\u057bY\xa5\xe3;s\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x16+\xa5\x03'b\x14\xb5\t\xf9u\x86\xbd\x84!\x10\xd1\x03\xd5\x17\x8a\x01\xe7\xff\u0609\\\"h\x00\x00\u07d4\x16-v\xc2\xe6QJ:\xfbo\xe3\xd3\u02d3\xa3\\Z\xe7\x83\xf1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16;\xadJ\x12+E}d\xe8\x15\nA>\xaeM\a\x02>k\x89\x01\x04\xe7\x04d\xb1X\x00\x00\u07d4\x16<\u023e\"vF\xcb\tq\x91Y\xf2\x8e\u041c]\xc0\xdc\xe0\x89Hz\x9a0E9D\x00\x00\u07d4\x16=\xcas\xd7\xd6\xea?>`b2*\x874\x18\f\vx\uf25ft \x03\xcb}\xfc\x00\x00\u07d4\x16Mz\xac>\xec\xba\uc86dQ\x91\xb7S\xf1s\xfe\x12\xec3\x89(VR\xb8\xa4hi\x00\x00\u07d4\x16Rl\x9e\u07d4>\xfaOm\x0f\v\xae\x81\xe1\x8b1\xc5@y\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\x16S\x05\xb7\x872.%\xdcj\xd0\xce\xfelo3Fx\xd5i\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16e\xab\x179\xd7\x11\x19\xeea2\xab\xbd\x92j'\x9f\xe6yH\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\x16k\xf6\u06b2-\x84\x1bHl8\xe7\xbaj\xb3:\x14\x87\ud30a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x16v\x99\xf4\x8ax\xc6\x15Q%\x15s\x99X\x993\x12WO\a\x89\x02\x1d;\xd5^\x80<\x00\x00\u07d4\x16x\xc5\xf2\xa5\"92%\x19ca\x89OS\xccu/\xe2\xf3\x89h\xf3e\xae\xa1\xe4@\x00\x00\u07d4\x16|\xe7\xdee\xe8G\bYZRT\x97\xa3\xeb^ZfPs\x89\x1f1Gsfo\xc4\x00\x00\u07d4\x16~>:\xe2\x003HE\x93\x92\xf7\xdf\xceD\xaf|!\xadY\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x16\x80\xce\xc5\x02\x1e\xe90P\xf8\xae\x12rQ\x83\x9et\xc1\xf1\xfd\x8a\x02\xc6\x14a\xe5\xd7C\u0580\x00\u07d4\x16\x81j\xac\x0e\xde\r-<\xd4B\xday\xe0c\x88\x0f\x0f\x1dg\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x16\x8bP\x19\xb8\x18i\x16D\x83_\xe6\x9b\xf2)\xe1q\x12\xd5,\x8a\x05\xed\xe2\x0f\x01\xa4Y\x80\x00\x00\u07d4\x16\x8b\xde\xc8\x18\xea\xfcm)\x92\xe5\xefT\xaa\x0e\x16\x01\xe3\xc5a\x8967Pz0\xab\xeb\x00\x00\u07d4\x16\x8d0\xe5?\xa6\x81\t+R\xe9\xba\xe1Z\r\xcbA\xa8\u027b\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x16\x9b\xbe\xfcA\xcf\xd7\xd7\u02f8\xdf\xc60 \xe9\xfb\x06\u0515F\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16\xa5\x8e\x98]\xcc\xd7\a\xa5\x94\u0453\xe7\u0327\x8b]\x02xI\x89I\xb9\u029aiC@\x00\x00\u07d4\x16\xa9\xe9\xb7:\u92c6M\x17(y\x8b\x87f\xdb\xc6\xea\x8d\x12\x893\xe7\xb4K\r\xb5\x04\x00\x00\u07d4\x16\xaaR\xcb\vUG#\xe7\x06\x0f!\xf3'\xb0\xa6\x83\x15\xfe\xa3\x89\r\x8drkqw\xa8\x00\x00\u07d4\x16\xab\xb8\xb0!\xa7\x10\xbd\u01ce\xa54\x94\xb2\x06\x14\xffN\xaf\xe8\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\x16\xaf\xa7\x87\xfc\x9f\x94\xbd\xffiv\xb1\xa4/C\n\x8b\xf6\xfb\x0f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16\xba\xe5\xd2N\xff\x91w\x8c\u064bM:\x1c\xc3\x16/D\xaaw\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\x16\xbc@!Z\xbb\u066e](\v\x95\xb8\x01\vE\x14\xff\x12\x92\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x16\xbeu\u9299Z9R\"\xd0\v\u05df\xf4\xb6\xe68\u144a\a\x9f\x90\\o\xd3N\x80\x00\x00\u07d4\x16\xc1\xbf[}\xc9\xc8<\x17\x9e\xfa\xcb\xcf.\xb1t\xe3V\x1c\xb3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x16\u01f3\x1e\x8c7b\x82\xac\"qr\x8c1\xc9^5\xd9R\u00c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x16\xf3\x13\u03ca\xd0\x00\x91J\n\x17m\u01a44+y\xec%8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x16\xff\xac\x84\x03)@\xf0\x12\x1a\tf\x8b\x85\x8a~y\xff\xa3\xbb\x89\xd2J\xdan\x10\x87\x11\x00\x00\xe0\x94\x17\x03\xb4\xb2\x92\xb8\xa9\xde\xdd\xed\xe8\x1b\xb2]\x89\x17\x9fdF\xb6\x8a\x04+e\xa4U\xe8\xb1h\x00\x00\u07d4\x17\x04\x93\x11\x10\x1d\x81~\xfb\x1de\x91\x0ff6b\xa6\x99\u024c\x89lh\xcc\u041b\x02,\x00\x00\u07d4\x17\x04\xce\xfc\xfb\x131\xeczx8\x8b)9>\x85\xc1\xafy\x16\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x17\n\x88\xa8\x99\u007f\x92\xd287\x0f\x1a\xff\xde\xe64pP\xb0\x13\x89\xa2\xacw5\x14\x880\x00\x00\u07d4\x17\x10\x8d\xab,P\xf9\x9d\xe1\x10\u1cf3\xb4\u0342\xf5\xdf(\xe7\x895 ;g\xbc\xca\xd0\x00\x00\xe0\x94\x17\x12[Y\xacQ\xce\xe0)\xe4\xbdx\xd7\xf5\x94}\x1e\xa4\x9b\xb2\x8a\x04\xa8\x9fT\xef\x01!\xc0\x00\x00\u07d4\x17\x1a\u0660K\xed\u0238a\xe8\xedK\xdd\xf5qx\x13\xb1\xbbH\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x17\x1c\xa0*\x8bmb\xbfL\xa4~\x90i\x14\a\x98a\x97,\xb2\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x17\"\xc4\xcb\xe7\n\x94\xb6U\x9dBP\x84\xca\xee\xd4\xd6\xe6n!\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x17X\vvotSR\\\xa4\u01a8\x8b\x01\xb5\x05p\xea\b\x8c\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x17X\x9al\x00jT\xca\xd7\x01\x03\x12:\xae\n\x82\x13_\u07b4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x17Z\x18::#_\xfb\xb0;\xa85gRg\"\x94\x17\xa0\x91\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\x17_\xee\xea*\xa4\xe0\xef\xda\x12\xe1X\x8d/H2\x90\xed\xe8\x1a\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x17e6\x1c.\xc2\xf86\x16\u0383c\xaa\xe2\x10%\xf2Vo@\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x17gR\\_Z\"\xed\x80\xe9\xd4\xd7q\x0f\x03b\u049e\xfa3\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x17v%`\xe8*\x93\xb3\xf5\"\xe0\xe5$\xad\xb8a,:tp\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x17}\xaex\xbc\x01\x13\xd8\u04dcD\x02\xf2\xa6A\xae*\x10Z\xb8\x89b\x92BV \xb4H\x00\x00\xe0\x94\x17\x84\x94\x8b\xf9\x98H\u021eDV8PM\u0598'\x1bY$\x8a\x01GLA\r\x87\xba\xee\x00\x00\u07d4\x17\x88\u069bW\xfd\x05\xed\xc4\xff\x99\xe7\xfe\xf3\x01Q\x9c\x8a\n\x1e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x17\x8e\xafk\x85T\xc4]\xfd\xe1kx\xce\f\x15\u007f.\xe3\x13Q\x89\x11X\xe4`\x91=\x00\x00\x00\u07d4\x17\x96\x1dc;\xcf \xa7\xb0)\xa7\xd9K}\xf4\xda.\xc5B\u007f\x89\fo\xf0p\U000532c0\x00\u07d4\x17\x96\xbc\xc9{\x8a\xbcq\u007fKJ|k\x106\xea!\x82c\x9f\x89\x13A\xf9\x1c\xd8\xe3Q\x00\x00\u07d4\x17\x99=1*\xa1\x10iW\x86\x8fjU\xa5\xe8\xf1/w\xc8C\x89\x18e\xe8\x14\xf4\x14.\x80\x00\u07d4\x17\x9a\x82^\x0f\x1fn\x98S\tf\x84e\xcf\xfe\xd46\xf6\xae\xa9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x17\xb2\xd6\xcfe\xc6\xf4\xa3G\xdd\xc6W&U5M\x8aA+)\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x17\xb8\a\xaf\xa3\xdd\xd6G\xe7#T.{R\xfe\xe3\x95'\xf3\x06\x89\x15\xaf@\xff\xa7\xfc\x01\x00\x00\u07d4\x17\xc0G\x86W\xe1\xd3\xd1z\xaa3\x1d\xd4)\xce\u03d1\xf8\xae]\x8964\xfb\x9f\x14\x89\xa7\x00\x00\u07d4\x17\xc0\xfe\xf6\x98l\xfb.@A\xf9\x97\x9d\x99@\xb6\x9d\xff=\xe2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x17\u0511\x8d\xfa\xc1]w\xc4\u007f\x9e\xd4\x00\xa8P\x19\rd\xf1Q\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x17\xd5!\xa8\xd9w\x90#\xf7\x16M#<;d \xff\xd2#\xed\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x17\xd91\xd4\xc5b\x94\u073ew\xc8e[\xe4i_\x00mJ<\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x17\xdfIQ\x8ds\xb1)\xf0\xda6\xb1\u0274\f\xb6d \xfd\u01ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x17\xe4\xa0\xe5+\xac>\xe4N\xfe\tT\xe7S\u0538]dN\x05\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x17\xe5\x84\xe8\x10\xe5gp,a\xd5]CK4\u0375\xee0\xf6\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x17\xe8.px\xdcO\xd9\xe8y\xfb\x8aPf\u007fS\xa5\xc5E\x91\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x17\xe8o;[0\xc0\xbaY\xf2\xb2\xe8XB[\xa8\x9f\n\x10\xb0\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x17\xee\x9fT\xd4\xdd\xc8Mg\x0e\xff\x11\xe5Je\x9f\xd7/DU\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\xe0\x94\x17\xefJ\xcc\x1b\xf1G\xe3&t\x9d\x10\xe6w\xdc\xff\xd7o\x9e\x06\x8a\bwQ\xf4\xe0\xe1\xb50\x00\x00\u07d4\x17\xf1F2\xa7\xe2\x82\v\xe6\xe8\xf6\u07c25X(=\xad\xab-\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x17\xf5#\xf1\x17\xbc\x9f\xe9x\xaaH\x1e\xb4\xf5V\x17\x117\x1b\u0209li\xf7>)\x13N\x00\x00\u07d4\x17\xfd\x9bU\x1a\x98\xcba\xc2\xe0\u007f\xbfA\xd3\xe8\u02650\u02e5\x89\x01v\x8c0\x81\x93\x04\x80\x00\u07d4\x18\x04x\xa6U\u05cd\x0f;\fO +aH[\xc4\x00/\u0549lk\x93[\x8b\xbd@\x00\x00\u07d4\x18\x13l\x9d\xf1g\xaa\x17\xb6\xf1\x8e\"\xa7\x02\u020fK\u0082E\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x18\x15'\x9d\xff\x99R\xda;\xe8\xf7rI\xdb\xe2\"C7{\xe7\x8a\x01\x01|\xb7n{&d\x00\x00\u07d4\x18\x1f\xbb\xa8R\xa7\xf5\x01x\xb1\xc7\xf0>\xd9\xe5\x8dT\x16))\x89$\x1a\x9bOaz(\x00\x00\xe0\x94\x18'\x03\x9f\tW\x02\x94\b\x8f\xdd\xf0G\x16\\3\u65a4\x92\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\x18-\xb8R\x93\xf6\x06\u8248\xc3pL\xb3\xf0\xc0\xbb\xbf\xcaZ\x89\a?u\u0460\x85\xba\x00\x00\u07d4\x18H\x00<%\xbf\u052a\x90\xe7\xfc\xb5\u05f1k\xcd\f\xff\xc0\u060965\u026d\xc5\u07a0\x00\x00\xe0\x94\x18JO\v\xebq\xff\xd5X\xa6\xb6\xe8\xf2(\xb7\x87\x96\xc4\xcf>\x8a\x02\x8a\x85t%Fo\x80\x00\x00\xe0\x94\x18M\x86\xf3Fj\xe6h;\x19r\x99\x82\xe7\xa7\u1903G\xb2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x18Q\xa0c\xcc\xdb0T\x90w\xf1\xd19\xe7-\xe7\x97\x11\x97\u0549lk\x93[\x8b\xbd@\x00\x00\u07d4\x18UF\xe8v\x8dPhs\x81\x8a\xc9u\x1c\x1f\x12\x11j;\xef\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x18X\xcf\x11\xae\xa7\x9fS\x98\xad+\xb2\"g\xb5\xa3\xc9R\xeat\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\xe0\x94\x18Z\u007f\u012c\xe3h\xd23\xe6 \xb2\xa4Y5f\x12\x92\xbd\xf2\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x18d\xa3\u01f4\x81UD\x8cT\u020cp\x8f\x16g\tsm1\x89\a?u\u0460\x85\xba\x00\x00\u07d4\x18j\xfd\xc0\x85\xf2\xa3\xdc\xe4a^\xdf\xfb\xad\xf7\x1a\x11x\x0fP\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x18k\x95\xf8\xe5\xef\xfd\xdc\xc9O\x1a1[\xf0)];\x1e\xa5\x88\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x18}\x9f\f\a\xf8\xebt\xfa\xaa\xd1^\xbc{\x80Dt\x17\xf7\x82\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x18\x95\xa0\xebJCrr/\xcb\u016f\xe6\x93o(\x9c\x88\xa4\x19\x891T\xc9r\x9d\x05x\x00\x00\u07d4\x18\x99\xf6\x9fe;\x05\xa5\xa6\xe8\x1fH\a\x11\u041b\xbf\x97X\x8c\x89i\xfb\x13=\xf7P\xac\x00\x00\u07d4\x18\xa6\xd2\xfcR\xbes\b@#\xc9\x18\x02\xf0[\xc2JK\xe0\x9f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x18\xb0@|\xda\xd4\xceR`\x06#\xbd^\x1fj\x81\xaba\xf0&\x89\x11Q\xcc\xf0\xc6T\u0180\x00\u07d4\x18\xb8\xbc\xf9\x83!\xdaa\xfbN>\xac\xc1\xecT\x17'-\xc2~\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4\x18\xc6r:gS)\x9c\xb9\x14G}\x04\xa3\xbd!\x8d\xf8\xc7u\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x18\xe1\x13\xd8\x17|i\x1aa\xbexXR\xfa[\xb4z\uef6f\x89Hz\x9a0E9D\x00\x00\xe0\x94\x18\xe4\xceGH;S\x04\n\u06eb5\x17,\x01\xefdPn\f\x8a\x01\xe7\xe4\x17\x1b\xf4\u04e0\x00\x00\xe0\x94\x18\xe52C\x98\x1a\xab\xc8v}\xa1\fsD\x9f\x13\x91V\x0e\xaa\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x18\xfa\x86%\xc9\u0704>\x00\x15\x9e\x892\xf5\x1e\u06ea\xa30\x00\x00\xe0\x94\x193\xe34\xc4\x0f:\u02ed\f\v\x85\x11X i$\xbe\xca:\x8a\x01\x99^\xaf\x01\xb8\x96\x18\x80\x00\xe0\x94\x197\xc5\xc5\x15\x05uS\u033dF\u0546dU\xcef)\x02\x84\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\u07d4\x19:\xc6Q\x83e\x18\x00\xe25\x80\xf8\xf0\xea\u04fbY~\xb8\xa4\x89\x02\xb6*\xbc\xfb\x91\n\x00\x00\u07d4\x19=7\xed4}\x1c/N55\r\x9aDK\xc5|\xa4\xdbC\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94\x19@\u0713d\xa8R\x16_GAN'\xf5\x00$E\xa4\xf1C\x8a\x02L-\xffj<|H\x00\x00\u07d4\x19E\xfe7\u007f\xe6\u0537\x1e>y\x1fo\x17\xdb$<\x9b\x8b\x0f\x89vy\u7fb9\x886\x00\x00\u07d4\x19Jk\xb3\x02\xb8\xab\xa7\xa5\xb5y\u07d3\xe0\xdf\x15t\x96v%\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x19L\ubd12\x98\x82\xbf;K\xf9\x86L+\x1b\x0fb\u0083\xf9\x89\x1e\xf8aS\x1ft\xaa\x00\x00\u07d4\x19O\xf4J\xef\xc1{\xd2\x0e\xfdz LG\xd1b\f\x86\xdb]\x89\xa2\x99\th\u007fj\xa4\x00\x00\xe0\x94\x19O\xfex\xbb\xf5\xd2\r\u044a\x1f\x01\xdaU.\x00\xb7\xb1\x1d\xb1\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\x19S1>*\xd7F#\x9c\xb2'\x0fH\xaf4\u063b\x9cDe\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x19W\x1a+\x8f\x81\u01bc\xf6j\xb3\xa1\x00\x83)V\x17\x15\x00\x03\x89\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\xe0\x94\x19h}\xaa9\xc3h\x13\x9bn{\xe6\r\xc1u:\x9f\f\xbe\xa3\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x19l\x02!\nE\n\xb0\xb3cpe_qz\xa8{\xd1\xc0\x04\x89\x0e\x10\xac\xe1W\xdb\xc0\x00\x00\u07d4\x19n\x85\xdf~s+J\x8f\x0e\xd06#\xf4\u06dd\xb0\xb8\xfa1\x89\x01%\xb9/\\\xef$\x80\x00\u07d4\x19s+\xf9s\x05]\xbd\x91\xa4S:\u06a2\x14\x9a\x91\u04c3\x80\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x19vr\xfd9\xd6\xf2F\xcef\xa7\x90\xd1:\xa9\"\xd7\x0e\xa1\t\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x19y\x8c\xbd\xa7\x15\ua69b\x9dj\xab\x94,U\x12\x1e\x98\xbf\x91\x89A\rXj \xa4\xc0\x00\x00\u07d4\x19\x8b\xfc\xf1\xb0z\xe3\b\xfa,\x02\x06\x9a\xc9\xda\xfeq5\xfbG\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x19\x8e\xf1\xec2Z\x96\xcc5Lrf\xa08\xbe\x8b\\U\x8fg\x8a\x80\xd1\xe47>\u007f!\xda\x00\x00\xe0\x94\x19\x91\x8a\xa0\x9e}IN\x98\xff\xa5\xdbP5\b\x92\xf7\x15j\u018a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x19\xb3k\f\x87\xeafN\xd8\x03\x18\xdcw\xb6\x88\xdd\xe8}\x95\xa5\x89i\x9fI\x98\x020=\x00\x00\u07d4\x19\u07d4E\xa8\x1c\x1b=\x80J\xea\xebon NB6f?\x89\x02\x06\xd9NjI\x87\x80\x00\u07d4\x19\xe5\u07a37\n,tj\xae4\xa3|S\x1fA\xda&N\x83\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x19\xe7\xf3\xeb{\xf6\u007f5\x99 \x9e\xbe\b\xb6*\xd32\u007f\x8c\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\x19\xe9Nb\x00P\xaa\xd7f\xb9\xe1\xba\xd91#\x83\x12\u053fI\x89\x81\xe3-\xf9r\xab\xf0\x00\x00\u07d4\x19\xec\xf2\xab\xf4\f\x9e\x85{%/\xe1\xdb\xfd=L]\x8f\x81n\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x19\xf5\xca\xf4\xc4\x0ei\b\x81<\aE\xb0\xae\xa9Xm\x9d\xd91\x89#\xfe\xd9\xe1\xfa+`\x00\x00\u07d4\x19\xf6C\xe1\xa8\xfa\x04\xae\x16\x00`(\x13\x833\xa5\x9a\x96\u0787\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x19\xf9\x9f,\vF\u0389\x06\x87]\xc9\xf9\n\xe1\x04\xda\xe3U\x94\x89\xf4WZ]M\x16*\x00\x00\u07d4\x19\xff$O\xcf\xe3\xd4\xfa/O\u065f\x87\xe5[\xb3\x15\xb8\x1e\xb6\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1a\x04\xce\xc4 \xadC\"\x15$mw\xfe\x17\x8d3\x9e\u0435\x95\x89\x11!a\x85\u009fp\x00\x00\xe0\x94\x1a\x04\xd58\x9e\xb0\x06\xf9\u0388\f0\xd1SS\xf8\xd1\x1cK1\x8a\x03\x9d\x84\xb2\x18m\xc9\x10\x00\x00\u07d4\x1a\bA\xb9*\u007fpuV\x9d\xc4b~kv\u02b0Z\u0791\x89Rf<\u02b1\xe1\xc0\x00\x00\xe0\x94\x1a\b]C\xec\x92AN\xa2{\x91O\xe7g\xb6\xd4k\x1e\xefD\x8a\x06A\xe8\xa15c\xd8\xf8\x00\x00\u07d4\x1a\t\xfd\xc2\u01e2\x0e#WK\x97\u019e\x93\u07bag\xd3r \x89lO\xd1\xee$nx\x00\x00\u07d4\x1a\n\x1d\u07f01\xe5\xc8\xcc\x1dF\xcf\x05\x84-P\xfd\xdcq0\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x1a\x1c\x9a&\xe0\xe0$\x18\xa5\xcfh}\xa7Z'\\b,\x94@\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x1a \x1bC'\u03a7\xf3\x99\x04bF\xa3\xc8~n\x03\xa3\u0368\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1a$4\xccwD\"\u050dS\u055c]V,\u0384\a\xc9K\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4\x1a%\xe1\u017c~_P\xec\x16\xf8\x88_!\x0e\xa1\xb98\x80\x0e\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x1a&\x94\xec\a\xcf^Mh\xba@\xf3\xe7\xa1LS\xf3\x03\x8cn\x8966\xcd\x06\xe2\xdb:\x80\x00\u07d4\x1a5 E5\x82\xc7\x18\xa2\x1cB7[\xc5\as%RS\xe1\x89*\xd3s\xcef\x8e\x98\x00\x00\xe0\x94\x1a7n\x1b-/Y\ai\xbb\x85\x8dEu2\rN\x14\x99p\x8a\x01\x06q%v9\x1d\x18\x00\x00\u07d4\x1a:3\x0eO\xcbi\xdb\xef^i\x01x;\xf5\x0f\xd1\xc1SB\x89\u3bb5sr@\xa0\x00\x00\u07d4\x1aN\u01a0\xae\u007fZ\x94'\xd2=\xb9rL\r\f\xff\xb2\xab/\x89\t\xb4\x1f\xbf\x9e\n\xec\x00\x00\u07d4\x1aP^b\xa7N\x87\xe5wG>O:\xfa\x16\xbe\xdd<\xfaR\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x1a^\xe53\xac\xbf\xb3\xa2\xd7m[hRw\xb7\x96\xc5j\x05+\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1adJP\xcb\u00ae\xe8#\xbd+\xf2C\xe8%\xbeMG\xdf\x02\x89\x05k\xe0<\xa3\xe4}\x80\x00\u07d4\x1apD\xe28?\x87\b0[I[\xd1\x17k\x92\xe7\xef\x04:\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1ay\xc7\xf4\x03\x9cg\xa3\x9du\x13\x88L\xdc\x0e,4\"$\x90\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1a\x89\x89\x9c\xbe\xbd\xbbd\xbb&\xa1\x95\xa6<\bI\x1f\u035e\xee\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x1a\x8a\\\xe4\x14\u079c\xd1r\x93~7\xf2\u055c\xffq\xceW\xa0\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x1a\x95\xa8\xa8\b.FR\xe4\x17\r\xf9'\x1c\xb4\xbbC\x05\xf0\xb2\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\x1a\x95\u0277Tk]\x17\x86\u00c5\x8f\xb1#dF\xbc\f\xa4\u0389j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x1a\x98~?\x83\xdeu\xa4/\x1b\xde|\x99|\x19!{J_$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1a\x9ep/8]\xcd\x10^\x8b\x9f\xa4(\xee\xa2\x1cW\xffR\x8a\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x1a\xa1\x02\x1fU\n\xf1X\xc7Gf\x8d\xd1;F1`\xf9Z@\x89O\xb0Y\x1b\x9b08\x00\x00\u07d4\x1a\xa2v\x99\xca\u068d\u00e7oy3\xaaf\xc7\x19\x19\x04\x0e\x88\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x1a\xa4\x02p\xd2\x1e\\\u0786\xb61m\x1a\xc3\xc53IKy\xed\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1a\xb5:\x11\xbc\xc6=\u07ea@\xa0+\x9e\x18d\x96\u037b\x8a\xff\x89l?*\xac\x80\f\x00\x00\x00\u07d4\x1a\xbcN%;\b\n\xebCy\x84\xab\x05\xbc\xa0\x97\x9a\xa4>\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1a\xc0\x89\u00fcM\x82\xf0j \x05\x1a\x9ds-\xc0\xe74\xcba\x89%\xf6\x9dc\xa6\xce\x0e\x00\x00\xe0\x94\x1a\xd4V>\xa5xk\xe1\x15\x995\xab\xb0\xf1\u0547\x9c>sr\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x1a\xd7- \xa7n\u007f\xcckv@X\xf4\x8dA}Io\xa6\u0349lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x1a\xda\xf4\xab\xfa\x86}\xb1\u007f\x99\xafj\xbe\xbfpz<\xf5]\xf6\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x1a\xf6\x03C6\x0e\v-u%R\x107W \xdf!\xdb\\}\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1a\xfc\u0145\x89l\xd0\xed\xe1)\xee-\xe5\xc1\x9e\xa8\x11T\vd\x89\xaf*\xba\f\x8e[\xef\x80\x00\u07d4\x1b\x05\xeajj\u022f|\xb6\xa8\xb9\x11\xa8\xcc\xe8\xfe\x1a*\xcf\u0209lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\v1\xaf\xffKm\xf3e:\x94\xd7\xc8yx\xae5\xf3J\xae\x89\x139\x10E?\xa9\x84\x00\x00\u07d4\x1b\r\ah\x17\xe8\u058e\xe2\xdfN\x1d\xa1\xc1\x14-\x19\x8cD5\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\x1b\x13\ro\xa5\x1d\\H\xec\x8d\x1dR\u070a\"{\xe8s\\\x8a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b#\u02c6cUHq\xfb\xbe\r\x9e`9~\xfbo\xae\xdc>\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1b&9X\x8bU\xc3D\xb0#\xe8\xde_\xd4\b{\x1f\x04\x03a\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\x1b9 \xd0\x01\xc4>r\xb2N|\xa4o\x0f\xd6\xe0\xc2\n_\xf2\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x1b<\xb8\x1eQ\x01\x1bT\x9dx\xbfr\v\r\x92J\xc7c\xa7\u008av\x95\xa9, \xd6\xfe\x00\x00\x00\u07d4\x1bC#,\xcdH\x80\xd6\xf4o\xa7Q\xa9l\xd8$s1XA\x89\x04V9\x18$O@\x00\x00\u07d4\x1bK\xbc\xb1\x81e!\x1b&[(\a\x16\xcb?\x1f!!v\xe8\x89\x19\x9a\xd3}\x03\xd0`\x80\x00\u07d4\x1bM\a\xac\u04c1\x83\xa6\x1b\xb2x=+{\x17\x8d\xd5\x02\xac\x8d\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1bckzIo\x04MsYYn5:\x10F\x16Cok\x89\x13\x88\xea\x95\xc3?\x1d\x00\x00\u07d4\x1bd\x95\x89\x12@\xe6NYD\x93\xc2f!q\xdb^0\xce\x13\x89\tX\x87\u0595\xedX\x00\x00\u07d4\x1bf\x10\xfbh\xba\xd6\xed\x1c\xfa\xa0\xbb\xe3:$\xeb.\x96\xfa\xfb\x89\b=lz\xabc`\x00\x00\u07d4\x1by\x903\xefm\xc7\x12x\"\xf7EB\xbb\"\xdb\xfc\t\xa3\b\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x1b~\xd9t\xb6\xe24\u0381$t\x98B\x9a[\u0520\xa2\xd19\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\x82o\xb3\xc0\x12\xb0\xd1Y\u253a[\x8aI\x9f\xf3\xc0\xe0<\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\x8a\xa0\x16\f\u05df\x00_\x88Q\nqI\x13\xd7\n\u04fe3\x89\n\xef\xfb\x83\a\x9a\xd0\x00\x00\xe0\x94\x1b\x8b\xd6\xd2\xec\xa2\x01\x85\xa7\x8e}\x98\xe8\xe1\x85g\x8d\xacH0\x8a\x03\x89O\x0eo\x9b\x9fp\x00\x00\u07d4\x1b\x9b-\u0096\x0eL\xb9@\x8ft\x05\x82|\x9bY\a\x16\x12\xfd\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x1b\xa9\"\x8d8\x87'\xf3\x89\x15\x0e\xa0;s\xc8-\xe8\xeb.\t\x8a\x01\x89t\xfb\xe1w\xc9(\x00\x00\u07d4\x1b\xa9\xf7\x99~S\x87\xb6\xb2\xaa\x015\xac$R\xfe6\xb4\xc2\r\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\u07d4\x1b\xba\x03\xffkJ\u057f\x18\x18J\xcb!\xb1\x88\xa3\x99\xe9\xebJ\x89a\t=|,m8\x00\x00\u07d4\x1b\xbc\x19\x9eXg\x90\xbe\x87\xaf\xed\xc8I\xc0G&t\\]{\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x1b\xbc`\xbc\xc8\x0e\\\xdc5\xc5Aj\x1f\n@\xa8=\xae\x86{\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\xc4L\x87a#\x1b\xa1\xf1\x1f_\xaa@\xfaf\x9a\x01>\x12\u0389\v\tR\xc4Z\xea\xad\x00\x00\u07d4\x1b\xcf4A\xa8f\xbd\xbe\x960\t\xce3\xc8\x1c\xbb\x02a\xb0,\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\x1b\u048c\xd5\u01ca\xeeQ5|\x95\xc1\xef\x925\xe7\xc1\x8b\xc8T\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\xd8\xeb\xaavt\xbb\x18\u1458\xdb$OW\x03\x13\a_C\x89\b!\xab\rD\x14\x98\x00\x00\u07d4\x1b\xd9\t\xac\rJ\x11\x02\xec\x98\xdc\xf2\u0329j\n\xdc\u05e9Q\x89\x01\x16Q\xac>zu\x80\x00\u07d4\x1b\xe3T,6\x13hte\xf1Zp\xae\xeb\x81f+e\u0328\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1b\xeaM\xf5\x12/\xaf\u07b3`~\xdd\xda\x1e\xa4\xff\u06da\xbf*\x89\x12\xc1\xb6\xee\xd0=(\x00\x00\u07d4\x1b\xecM\x02\u0385\xfcH\xfe\xb6$\x89\x84\x1d\x85\xb1pXj\x9b\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\x1b\xf9t\u0650OE\u0381\xa8E\xe1\x1e\xf4\xcb\xcf'\xafq\x9e\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\x1c\x04VI\xcdS\xdc#T\x1f\x8e\xd4\xd3A\x81(\b\xd5\u075c\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\x1c\x12\x8b\xd6\u0365\xfc\xa2uu\xe4\xb4;2S\xc8\xc4\x17*\xfe\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1c\x13\u04c67\xb9\xa4|\xe7\x9d7\xa8oP\xfb@\x9c\x06\a(\x89Hz\x9a0E9D\x00\x00\u07d4\x1c \x10\xbdf-\xf4\x17\xf2\xa2q\x87\x9a\xfb\x13\xefL\x88\xa3\xae\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x1c%z\u0525Q\x05\xea;X\xed7K\x19\x8d\xa2f\xc8_c\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x1c.6\a\xe1'\xca\xca\x0f\xbd\\YH\xad\xad}\xd80\xb2\x85\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\x1c5l\xfd\xb9_\xeb\xb7\x14c;(\xd5\xc12\u0744\xa9\xb46\x89\x01Z\xf1\u05cbX\xc4\x00\x00\u07d4\x1c5\xaa\xb6\x88\xa0\u034e\xf8.vT\x1b\xa7\xac9R\u007ft;\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x1c>\xf0]\xae\x9d\xcb\u0509\xf3\x02D\bf\x9d\xe2D\xc5*\x02\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x1cJ\xf0\xe8c\xd2el\x865\xbco\xfe\xc8\u0759(\x90\x8c\xb5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1c`\x19\x93x\x92\a\xf9e\xbb\x86\\\xbbL\xd6W\xcc\xe7o\xc0\x89\x05T\x1ap7P?\x00\x00\u07d4\x1cc\xfa\x9e,\xbb\xf21a\xda3\xa1\xda}\xf7\r\x1b\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1c\xb6\xb2\xd7\xcf\xc5Y\xb7\xf4\x1eoV\xab\x95\xc7\xc9X\xcd\x0eL\x89Hz\x9a0E9D\x00\x00\u07d4\x1c\xc1\xd3\xc1O\x0f\xb8d\x0e6rM\xc42)\xd2\xeaz\x1eH\x89\\(=A\x03\x94\x10\x00\x00\u07d4\x1c\xc9\bv\x00A\t\xcdy\xa3\u07a8f\u02c4\n\xc3d\xba\x1b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1c\xd1\xf0\xa3\x14\u02f2\x00\xde\n\f\xb1\xef\x97\xe9 p\x9d\x97\u0089lk\x93[\x8b\xbd@\x00\x00\u0794\x1c\xdaA\x1b\xd5\x16;\xae\xca\x1eU\x85c`\x1c\xe7 \xe2N\xe1\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x1c\xe8\x1d1\xa7\x920\"\xe1%\xbfH\xa3\xe06\x93\xb9\x8d\xc9\u0749lk\x93[\x8b\xbd@\x00\x00\u07d4\x1c\xeb\xf0\x98]\u007fh\n\xaa\x91\\D\xccb\xed\xb4\x9e\xab&\x9e\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x1c\xedg\x15\xf8b\xb1\xff\x86\x05\x82\x01\xfc\xceP\x82\xb3nb\xb2\x8a\x01j^`\xbe\xe2s\xb1\x00\x00\u07d4\x1c\xf0L\xb1C\x80\x05\x9e\xfd?#\x8be\u057e\xb8j\xfa\x14\u0609\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1c\xf1\x05\xab#\x02;ULX>\x86\u05d2\x11y\xee\x83\x16\x9f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x1c\xf2\xebz\x8c\xca\u00ad\xea\xef\x0e\xe8sG\xd55\u04f9@X\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1c\xfc\xf7Q\u007f\f\bE\x97 \x94+dz\u0452\xaa\x9c\x88(\x89+^:\xf1k\x18\x80\x00\x00\xe0\x94\x1d\t\xad$\x12i\x1c\u0141\xc1\xab6\xb6\xf9CL\xd4\xf0\x8bT\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\x1d\x15|Xv\xc5\xca\xd5S\xc9\x12\xca\xf6\xce-Rw\xe0\\s\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x1d&\x15\xf8\xb6\xcaP\x12\xb6c\xbd\u0414\xb0\xc5\x13|w\x8d\u07ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x1d)\u01ea\xb4+ H\u04b2R%\u0518\u06e6z\x03\xfb\xb2\x89\n\u05ce\xbcZ\xc6 \x00\x00\u0794\x1d4\x1f\xa5\xa3\xa1\xbd\x05\x1f}\xb8\a\xb6\xdb/\u01faO\x9bE\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x1d4N\x96%g\xcb'\xe4M\xb9\xf2\xfa\u01f6\x8d\xf1\xc1\xe6\xf7\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\x1d6h0c\xb7\xe9\xeb\x99F-\xab\xd5i\xbd\xdc\xe7\x16\x86\xf2\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1d7aky?\x94\x91\x188\xac\x8e\x19\xee\x94I\u07d2\x1e\u0109QP\xae\x84\xa8\xcd\xf0\x00\x00\xe0\x94\x1d9[0\xad\xda\x1c\xf2\x1f\t\x1aOJ{u3q\x18\x94A\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\x1dEXn\xb8\x03\xca!\x90e\v\xf7H\xa2\xb1t1+\xb5\a\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x1dW.\xdd-\x87\xca'\x1ag\x14\xc1Z;7v\x1d\u0320\x05\x89\x06\xeb\xd5*\x8d\xdd9\x00\x00\u07d4\x1dc0\x97\xa8R%\xa1\xffC!\xb1)\x88\xfd\xd5\\+8D\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x1di\xc8=(\xff\x04t\xce\xeb\xea\xcb:\xd2'\xa1D\xec\u78ca\x01(\xcc\x03\x92\nb\u0480\x00\u07d4\x1d\x96\xbc\u0544W\xbb\xf1\xd3\u00a4o\xfa\xf1m\xbf}\x83hY\x89\tIr\t\xd8F~\x80\x00\u07d4\x1d\x9ej\xaf\x80\x19\xa0_#\x0e]\xef\x05\xaf]\x88\x9b\xd4\xd0\xf2\x89\a?u\u0460\x85\xba\x00\x00\u07d4\x1d\xab\x17.\xff\xa6\xfb\xeeSL\x94\xb1~yN\xda\xc5OU\xf8\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x1d\xb9\xac\x9a\x9e\xae\xec\nR7W\x05\fq\xf4rx\xc7-P\x89Hz\x9a0E9D\x00\x00\u07d4\x1d\xbe\x8e\x1c+\x8a\x00\x9f\x85\xf1\xad<\xe8\r.\x055\x0e\u3709\aW\rn\x9e\xbb\xe4\x00\x00\u07d4\x1d\xc7\xf7\xda\xd8]\xf5?\x12q\x15$\x03\xf4\xe1\xe4\xfd\xb3\xaf\xa0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1d\u03bc\xb7em\xf5\u072a3h\xa0U\xd2/\x9e\xd6\xcd\xd9@\x89\x1b\x18\x1eK\xf24<\x00\x00\xe0\x94\x1d\xd7tA\x84J\xfe\x9c\xc1\x8f\x15\xd8\xc7{\xcc\xfbe^\xe04\x8a\x01\x06\xebEW\x99D\x88\x00\x00\u07d4\x1d\xde\xfe\xfd5\xab\x8fe\x8b$q\xe5G\x90\xbc\x17\xaf\x98\u07a4\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1d\xee\xc0\x1a\xbe\\\r\x95-\xe9\x10l=\xc3\x069\xd8P\x05\u0589lk\x93[\x8b\xbd@\x00\x00\u07d4\x1d\xf6\x91\x16rg\x9b\xb0\xef5\t\x03\x8c\f'\xe3\x94\xfd\xfe0\x89\x1dF\x01b\xf5\x16\xf0\x00\x00\u07d4\x1d\xfa\xee\ar\x12\xf1\xbe\xaf\x0eo/\x18@Sz\xe1T\xad\x86\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x1e\x06\r\xc6\xc5\xf1\u02cc\xc7\xe1E.\x02\xee\x16u\b\xb5eB\x8a\x02\xb1O\x02\xc8d\xc7~\x00\x00\xe0\x94\x1e\x13\xecQ\x14,\ubde2`\x83A,<\xe3QD\xbaV\xa1\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x1e\x1aH(\x11\x9b\xe3\t\xbd\x88#nMH+PM\xc5W\x11\x89\xa00\xdc\xeb\xbd/L\x00\x00\u07d4\x1e\x1a\ud178leb\u02cf\xa1\xebo\x8f;\xc9\u072eny\x89\xf4\xd2\u0744%\x9b$\x00\x00\u07d4\x1e\x1ccQwj\xc3\x10\x919~\xcf\x16\x00-\x97\x9a\x1b-Q\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x1e\x1dz_$h\xb9N\xa8&\x98-\xbf!%yR*\xb7\xdf\n\u02ac\x9e\xee\xd3Y09\xe5\xacuy\x8a+\x14F\xddj\xef\xe4\x1c\x00\x00\u07d4\x1e{^M\x1fW+\xec\xf2\xc0\x0f\xc9\f\xb4v{Jn3\u0509\x06\x1f\xc6\x10u\x93\xe1\x00\x00\u07d4\x1e\x8eh\x9b\x02\x91|\xdc)$]\f\x9ch\xb0\x94\xb4\x1a\x9e\u0589lk\x93[\x8b\xbd@\x00\x00\u07d4\x1e\xa34\xb5u\b\a\xeat\xaa\u016b\x86\x94\xec_(\xaaw\u03c9\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\u07d4\x1e\xa4qU\x04\u01af\x10{\x01\x94\xf4\xf7\xb1\xcbo\xcc\xcdoK\x89 \x041\x97\xe0\xb0'\x00\x00\u07d4\x1e\xa4\x92\xbc\xe1\xad\x10~3\u007fK\u0527\xac\x9a{\xab\xcc\u036b\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x1e\xa6\xbf/\x15\xae\x9c\x1d\xbcd\u06a7\xf8\xeaM\r\x81\xaa\xd3\xeb\x89\u3bb5sr@\xa0\x00\x00\u07d4\x1e\xb4\xbfs\x15j\x82\xa0\xa6\x82 \x80\xc6\xed\xf4\x9cF\x9a\xf8\xb9\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94\x1e\xba\xcbxD\xfd\xc3\"\xf8\x05\x90O\xbf\x19b\x80-\xb1S|\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x1e\xc4\xecKw\xbf\x19\u0411\xa8h\xe6\xf4\x91T\x18\x05A\xf9\x0e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1e\xd0n\xe5\x16b\xa8lcE\x88\xfbb\xdcC\xc8\xf2~|\x17\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1e\u063b?\x06w\x8b\x03\x9e\x99a\xd8\x1c\xb7\x1as\xe6x|\x8e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x1e\xda\bNye\x00\xba\x14\xc5\x12\x1c\r\x90\x84of\xe4\xbeb\x89\x1c\xfd\xd7F\x82\x16\xe8\x00\x00\u07d4\x1e\xeel\xbe\xe4\xfe\x96\xadaZ\x9c\xf5\x85zdy@\u07ccx\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4\x1e\xf2\u073f\xe0\xa5\x00A\x1d\x95n\xb8\u0213\x9c=l\xfef\x9d\x89*\x11)\u0413g \x00\x00\xe0\x94\x1e\xf5\xc9\xc76P\u03fb\xde\\\x88U1\xd4'\xc7\xc3\xfeUD\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x1f\x04\x12\xbf\xed\u0356N\x83}\t,q\xa5\xfc\xba\xf3\x01&\xe2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1f\x17O@\xa0Dr4\xe6fS\x91Mu\xbc\x00>V\x90\u0709\b\xacr0H\x9e\x80\x00\x00\u07d4\x1f!\x86\xde\xd2>\f\xf9R\x16\x94\xe4\xe1dY>i\n\x96\x85\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x1f*\xfc\n\xed\x11\xbf\xc7\x1ew\xa9\ae{6\xeav\xe3\xfb\x99\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u0794\x1f9Y\xfc)\x11\x10\xe8\x822\xc3kvg\xfcx\xa3ya?\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x1f=\xa6\x8f\xe8~\xafC\xa8)\xabm~\u0166\xe0\t\xb2\x04\xfb\x89\x1e\x16\x01u\x8c,~\x00\x00\u07d4\x1fI\xb8m\r9EY\x06\x98\xa6\xaa\xf1g<7u\\\xa8\r\x89%\xf2s\x93=\xb5p\x00\x00\u07d4\x1f_;4\xbd\x13K'\x81\xaf\xe5\xa0BJ\u0144l\xde\xfd\x11\x89\x05]\xe6\xa7y\xbb\xac\x00\x00\u07d4\x1fo\x0004\x97R\x06\x1c\x96\a+\xc3\xd6\xeb5I \x8dk\x89\x01K\x8d\xe1\xeb\x88\u06c0\x00\u07d4\x1f}\x8e\x86\xd6\xee\xb0%E\xaa\xd9\x0e\x912{\xd3i\xd7\xd2\xf3\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1f\x81\x16\xbd\n\xf5W\x0e\xaf\fV\u011cz\xb5\xe3zX\x04X\x89lk\x93[\x8b\xbd@\x00\x00\u0794\x1f\x88\xf8\xa13\x8f\xc7\xc1\tv\xab\xcd?\xb8\u04c5T\xb5\uc708\xb9\xf6]\x00\xf6<\x00\x00\u07d4\x1f\x9c2hE\x8d\xa3\x01\xa2\xbeZ\xb0\x82W\xf7{\xb5\xa9\x8a\xa4\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x1f\xa21\x9f\xed\x8c-F*\xdf.\x17\xfe\xecjo0Qn\x95\x89\x06\xca\xe3\x06!\xd4r\x00\x00\u07d4\x1f\xb4c\xa08\x99\x83\xdf}Y?{\xddmxI\u007f\xed\x88y\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x1f\xb7\xbd1\r\x95\xf2\xa6\u067a\xaf\x8a\x8aC\n\x9a\x04E:\x8b\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x1f\xcc|\xe6\xa8HX\x95\xa3\x19\x9e\x16H\x1fr\xe1\xf7b\xde\xfe\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x1f\xcf\xd1\xd5\u007f\x87\"\x90V\f\xb6-`\x0e\x1d\xef\xbe\xfc\xcc\x1c\x89P\xc5\xe7a\xa4D\b\x00\x00\u0794\x1f\u0496\xbe\x03\xads|\x92\xf9\u0186\x9e\x8d\x80\xa7\x1cW\x14\xaa\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\x1f\xdd\xd8_\u024b\xe9\xc4\x04Ya\xf4\x0f\x93\x80^\xccEI\xe5\x89\b\xe3\xf5\v\x17<\x10\x00\x00\u07d4 \x01\xbe\xf7{f\xf5\x1e\x15\x99\xb0/\xb1\x10\x19J\x00\x99\xb7\x8d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4 \x02d\xa0\x9f\x8ch\xe3\xe6b\x97\x95(\x0fV%O\x86@\u0409\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4 \x03qy\a\xa7%`\xf40\u007f\x1b\xee\xccT6\xf4=!\xe7\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4 \r\xfc\vq\xe3Y\xb2\xb4eD\n6\xa6\xcd\xc3Rw0\a\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4 \x13L\xbf\xf8\x8b\xfa\xdcFkR\xec\ua9d8W\x89\x1d\x83\x1e\x8965\u026d\xc5\u07a0\x00\x00\u07d4 \x14&\x1f\x01\b\x9fSyV0\xba\x9d\xd2O\x9a4\xc2\xd9B\x89Hz\x9a0E9D\x00\x00\u07d4 \x16\x89]\xf3,\x8e\xd5G\x82iF\x84#\xae\xa7\xb7\xfb\xceP\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4 \x18\x1cKA\xf6\xf9r\xb6iX!_\x19\xf5p\xc1]\xdf\xf1\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4 \x18d\xa8\xf7\x84\xc2'{\v|\x9e\xe74\xf7\xb3w\xea\xb6H\x89\xf2(\x14\x00\xd1\xd5\xec\x00\x00\u07d4 \xb8\x1a\xe59&\xac\xe9\xf7\xd7AZ\x05\f\x03\x1dX_ \x89\x12\u007f\x19\xe8>\xb3H\x00\x00\xe0\x94 \x1d\x9e\xc1\xbc\v\x89-C\xf3\xeb\xfa\xfb,\x00\x00\u07d4 \xa1RV\xd5\f\xe0X\xbf\x0e\xacC\xaaS:\xa1n\u0273\x80\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4 \xa2\x9cPy\xe2k?\x181\x8b\xb2\xe5\x0e\x8e\x8b4n[\xe8\x89\x1b\x1a\xb3\x19\xf5\xecu\x00\x00\u07d4 \xa8\x16\x80\xe4e\xf8\x87\x90\xf0\aO`\xb4\xf3_]\x1ej\xa5\x89Ea\x80'\x8f\fw\x80\x00\u07d4 \xb9\xa9\u6f48\x80\u0659J\xe0\r\u0439(*\v\xea\xb8\x16\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4 \u0084\xba\x10\xa2\b0\xfc=i\x9e\xc9}-\xfa'\xe1\xb9^\x89lk\x93[\x8b\xbd@\x00\x00\u07d4 \xd1A\u007f\x99\xc5i\u3fb0\x95\x85e0\xfe\x12\xd0\xfc\uaa89@\x15\xf9K\x11\x83i\x80\x00\u07d4 \u074f\u02f4n\xa4o\u3066\x8b\x8c\xa0\xea[\xe2\x1f\u9949lk\x93[\x8b\xbd@\x00\x00\xe0\x94 \xff>\u078c\xad\xb5\xc3{H\xcb\x14X\x0f\xb6^#\t\n{\x8a\b\xe4\xd3\x16\x82v\x86@\x00\x00\xe0\x94!\x008\x1d`\xa5\xb5J\xdc\t\u0456\x83\xa8\xf6\u057bK\xfb\u02ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94!\x18\xc1\x16\xab\f\xdfo\xd1\x1dT\xa40\x93\a\xb4w\xc3\xfc\x0f\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94!\x1b)\xce\xfcy\xae\x97gD\xfd\xeb\u03bd<\xbb2\xc5\x13\x03\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4! l\xe2.\xa4\x80\xe8Y@\xd3\x13\x14\xe0\xd6ONM:\x04\x8965\u026d\xc5\u07a0\x00\x00\u07d4!2\xc0Qj.\x17\x17J\xc5G\xc4;{\x00 \xd1\xebLY\x895e\x9e\xf9?\x0f\xc4\x00\x00\xe0\x94!@\x8bMz,\x0en\xcaAC\xf2\xca\u037b\u033a\x12\x1b\u060a\x04<3\xc1\x93ud\x80\x00\x00\u07d4!Kt9U\xa5\x12\xden\r\x88j\x8c\xbd\x02\x82\xbe\xe6\u04a2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4!L\x89\u017d\x8e}\"\xbcWK\xb3^H\x95\x02\x11\xc6\xf7v\x89\x01\x06T\xf2X\xfd5\x80\x00\xe0\x94!Ti\x14\xdf\u04ef*\xddA\xb0\xff>\x83\xff\xdat\x14\xe1\xe0\x8a\x01C\x95\xe78ZP.\x00\x00\u07d4!X.\x99\xe5\x02\xcb\xf3\xd3\xc2;\xdf\xfbv\xe9\x01\xacmV\xb2\x89\x05k\xc7^-c\x10\x00\x00\u07d4!Y$\b\x13\xa70\x95\xa7\xeb\xf7\u00f3t>\x80(\xae_\t\x89lk\x93[\x8b\xbd@\x00\x00\u07d4!`\xb4\xc0,\xac\n\x81\u0791\b\xdeCE\x90\xa8\xbf\xe6\x875\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94!nA\x86N\xf9\x8f\x06\r\xa0\x8e\xca\xe1\x9a\xd1\x16j\x17\xd06\x8a\x016\x9f\xb9a(\xacH\x00\x00\u07d4!\x84o/\xdfZA\xed\x8d\xf3n^\xd8TM\xf7Y\x88\xec\xe3\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94!\xa6\xdbe'F{\xc6\xda\xd5K\xc1n\x9f\xe2\x95;g\x94\xed\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4!\xa6\xfe\xb6\xab\x11\xc7f\xfd\xd9w\xf8\xdfA!\x15_G\xa1\xc0\x89\x03\x19\xcf8\xf1\x00X\x00\x00\u07d4!\xb1\x82\xf2\xda+8D\x93\xcf_5\xf8=\x9d\x1e\xe1O*!\x89lk\x93[\x8b\xbd@\x00\x00\u07d4!\xbf\xe1\xb4\\\xac\xdebt\xfd\x86\b\u0661x\xbf>\xebn\u0709l\xee\x06\u077e\x15\xec\x00\x00\u07d4!\xc0s\x80HOl\xbc\x87$\xad2\xbc\x86L;Z\xd5\x00\xb7\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94!\u00e8\xbb\xa2g\xc8\u0322{\x1a\x9a\xfa\xba\xd8o`z\xf7\b\x8a\x01\xe4\xa3lI\u06580\x00\x00\u07d4!\xcem[\x90\x18\xce\xc0J\u0596yD\xbe\xa3\x9e\x800\xb6\xb8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4!\xd0'\x05\xf3\xf6I\x05\xd8\x0e\xd9\x14y\x13\xea\x8cs\a\u0595\x89I\xed\xb1\xc0\x98\x876\x00\x00\u07d4!\xd1?\f@$\xe9g\xd9G\a\x91\xb5\x0f\"\xde:\xfe\xcf\x1b\x89\xf1Z\xd3^.1\xe5\x00\x00\xe0\x94!\xdb\u06c1z\r\x84\x04\u01bd\xd6\x15\x047N\x9cC\xc9!\x0e\x8a\x02\x1e\x18\xb9\xe9\xabE\xe4\x80\x00\xe0\x94!\xdf\x1e\xc2KNK\xfey\xb0\xc0\x95\u03ba\xe1\x98\xf2\x91\xfb\u044a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94!\xdf-\u036ft\xb2\xbf\x804\x04\xddM\xe6\xa3^\xab\xec\x1b\xbd\x8a\x01w\"J\xa8D\xc7 \x00\x00\u07d4!\xe2\x19\u021c\xa8\xac\x14\xaeL\xbaa0\xee\xb7}\x9em9b\x89*\u035f\xaa\xa08\xee\x00\x00\u07d4!\xe5\u04ba\xe9\x95\xcc\xfd\b\xa5\xc1k\xb5$\xe1\xf60D\x8f\x82\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4!\xe5\xd7s 0L \x1c\x1eS\xb2a\xa1#\u0421\x06>\x81\x89\x04\xb6\xfa\x9d3\xddF\x00\x00\xe0\x94!\xea\xe6\xfe\xff\xa9\xfb\xf4\u0347OG9\xac\xe50\u033eY7\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4!\xec\xb2\u07e6Wy\xc7Y-\x04\x1c\xd2\x10Z\x81\xf4\xfdNF\x8965\u026d\xc5\u07a0\x00\x00\u07d4!\uff20\x9b5\x80\xb9\x8es\xf5\xb2\xf7\xf4\xdc\v\xf0,R\x9c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4!\xfd\v\xad\xe5\xf4\xeftt\xd0X\xb7\xf3\xd8T\xcb\x13\x00RN\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94!\xfdG\xc5%`\x12\x19\x8f\xa5\xab\xf11\xc0mj\xa1\x96_u\x8a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4!\xfdl]\x97\xf9\xc6\x00\xb7h!\xdd\xd4\xe7v5\x0f\xce+\xe0\x89lj\u04c2\xd4\xfba\x00\x00\u07d4\"\r\u018d\xf0\x19\xb6\xb0\u033f\xfbxKZZ\xb4\xb1]@`\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\"\x0e+\x92\xc0\xf6\xc9\x02\xb5\x13\xd9\xf1\xe6\xfa\xb6\xa8\xb0\xde\xf3\u05c9+^:\xf1k\x18\x80\x00\x00\u07d4\"V\x1cY1\x14560\x9c\x17\xe82X{b\\9\v\x9a\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\"W\xfc\xa1jn\\*d|<)\xf3l\xe2)\xab\x93\xb1~\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\"]5\xfa\xed\xb3\x91\u01fc-\xb7\xfa\x90q\x16\x04\x05\x99m\x00\x89\t\x18T\xfc\x18bc\x00\x00\u07d4\"_\x9e\xb3\xfbo\xf3\xe9\xe3\xc8D~\x14\xa6n\x8dO7y\xf6\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\"r\x18n\xf2}\xcb\xe2\xf5\xfc70P\xfd\xae\u007f*\xce#\x16\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d4\"s\xba\u05fcNHv\"\xd1u\xefzf\x98\x8bj\x93\xc4\xee\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\"v&K\xec\x85&\xc0\xc0\xf2pgz\xba\xf4\xf0\xe4A\xe1g\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\"\x82B\xf83n\xec\xd8$.\x1f\x00\x0fA\x93~q\xdf\xfb\xbf\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\"\x84*\xb80\xdaP\x99\x13\xf8\x1d\xd1\xf0O\x10\xaf\x9e\xdd\x1cU\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\"\x94O\xbc\xa9\xb5yc\bN\xb8M\xf7\xc8_\xb9\xbc\u07f8V\x89\xfc\x11\x8f\uf43a8\x80\x00\u07d4\"\x9c\xc4q\x1bbu^\xa2\x96DZ\u00f7\u007f\xc63\x82\x1c\xf2\x89\x02#\xe8\xb0R\x192\x80\x00\u0794\"\x9eC\r\xe2\xb7OD&Q\xdd\u0377\x01v\xbc\x05L\xadT\x88\xbb\xf9\x81\xbcJ\xaa\x80\x00\u07d4\"\x9fO\x1a*OT\atP[G\a\xa8\x1d\xe4D\x10%[\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\"\x9f\xf8\v\xf5p\x80\t\xa9\xf79\xe0\xf8\xb5`\x91@\x16\u0566\x89\x12\x11\xec\xb5m\x13H\x80\x00\u07d4\"\xa2X\x12\xabV\xdc\xc4#\x17^\xd1\u062d\xac\xce3\xcd\x18\x10\x89dI\xe8NG\xa8\xa8\x00\x00\xe0\x94\"\xb9j\xb2\xca\xd5]\xb1\x00\xb50\x01\xf9\xe4\xdb7\x81\x04\xc8\a\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\"\xbd\xff\xc2@\xa8\x8f\xf7C\x1a\xf3\xbf\xf5\x0e\x14\xda7\xd5\x18>\x8965\u026d\xc5\u07a0\x00\x00\u07d4\"\xce4\x91Y\xee\xb1D\xef\x06\xff&6X\x8a\xefy\xf6(2\x89\n1\x06+\xee\xedp\x00\x00\u07d4\"\xdbU\x9f,<\x14u\xa2\xe6\xff\xe8:YyY\x91\x96\xa7\xfa\x8965\u026d\xc5\u07a0\x00\x00\u07d4\"\xe1QX\xb5\xee>\x86\xeb\x032\xe3\u6a6cl\u0675^\u0349\b\xacr0H\x9e\x80\x00\x00\u07d4\"\xe2H\x8e-\xa2jI\xae\x84\xc0\x1b\xd5K!\xf2\x94x\x91\u0189]\u0212\xaa\x111\xc8\x00\x00\u07d4\"\xe5\x12\x14\x9a\x18\xd3i\xb7\x86\xc9\xed\xab\xaf\x1d\x89N\xe0.g\x14a\\\x00\x00\u07d4\"\xeb}\xb0\xbaV\xb0\xf8\xb8\x16\u0332\x06\xe6\x15\xd9)\x18[\r\x89\x04])s~\"\xf2\x00\x00\u07d4\"\xee\xd3'\xf8\xeb\x1d\x138\xa3\xcb{\x0f\x8aK\xaaY\a\u0355\x89\x01E]_Hw\b\x80\x00\xe0\x94\"\xf0\x04\u07cd\xe9\xe6\xeb\xf5#\u032c\xe4W\xac\xcb&\xf9r\x81\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u0794\"\xf2\xdc\xffZ\u05cc>\xb6\x85\v\\\xb9Q\x12{e\x95\"\u623e -j\x0e\xda\x00\x00\u07d4\"\xf3\xc7y\xddy\x02>\xa9*x\xb6\\\x1a\x17\x80\xf6-\\J\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\"\xfe\x88M\x907)\x1bMR\xe6(Z\xe6\x8d\xea\v\xe9\xff\xb5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#\x06\u07d3\x1a\x94\rX\xc0\x16e\xfaM\b\x00\x80,\x02\xed\xfe\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94#\t\xd3@\x91D[22Y\v\xd7\x0fO\x10\x02[,\x95\t\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4#\x12\x00F\xf6\x83!\x02\xa7R\xa7fVi\x1c\x86>\x17\u5709\x11\xe0\xe4\xf8\xa5\v\xd4\x00\x00\u07d4#\x1a\x15\xac\xc1\x99\u021f\xa9\xcb\"D\x1c\xc7\x030\xbd\xcc\xe6\x17\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4#\x1d\x94\x15]\xbc\xfe*\x93\xa3\x19\xb6\x17\x1fc\xb2\v\u04b6\xfa\x89\xcf\x14{\xb9\x06\xe2\xf8\x00\x00\u07d4#(2\xcdYw\xe0\nL0\xd0\x16?.$\xf0\x88\xa6\xcb\t\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4#,m\x03\xb5\xb6\xe6q\x1e\xff\xf1\x90\xe4\x9c(\xee\xf3l\x82\xb0\x89Hz\x9a0E9D\x00\x00\xe0\x94#,\xb1\xcdI\x99<\x14J?\x88\xb3a\x1e#5i\xa8k\u058a\x03L`lB\u042c`\x00\x00\u07d4#,\xe7\x82Pb%\xfd\x98`\xa2\xed\xc1Jz0Gsm\xa2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4#/R]U\x85\x9b}N`\x8d H\u007f\xaa\xdb\x00)15\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94#4\u0150\u01e4\x87i\x100E\u0176SL\x8a4i\xf4J\x8a\x03\xb1\x99\a=\xf7-\xc0\x00\x00\u07d4#7n\u02bftl\xe53!\xcfB\xc8fI\xb9+g\xb2\xff\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#7\x8fB\x92m\x01\x84\xb7\x93\xb0\xc8'\xa6\xdd>=3O\u0349\x03\t'\xf7L\x9d\xe0\x00\x00\u07d4#8B\xb1\xd0i/\xd1\x11@\xcfZ\u0364\xbf\x960\xba\xe5\xf8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#9\xe9I(p\xaf\xea%7\xf3\x89\xac/\x83\x83\x02\xa3<\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#;\xdd\xdd]\xa9HR\xf4\xad\xe8\xd2\x12\x88V\x82\xd9\ak\u0189\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4#OF\xba\xb7?\xe4]1\xbf\x87\xf0\xa1\xe0Fa\x99\xf2\ubb09\x1aJ\xba\"\\ t\x00\x00\u07d4#U\x1fV\x97_\xe9+1\xfaF\x9cI\xeaf\xeefb\xf4\x1e\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4#V\x95B\xc9}V`\x18\xc9\a\xac\xfc\xf3\x91\xd1@g\xe8~\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94#_\xa6l\x02^\xf5T\x00p\xeb\xcf\r7-\x81w\xc4g\xab\x8a\a\x12\x9e\x1c\xdf7>\xe0\x00\x00\xe0\x94#r\xc4\xc1\u0253\x9fz\xafl\xfa\xc0@\x90\xf0\x04t\x84\n\t\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4#s\f5z\x91\x02nD\xb1\xd0\xe2\xfc*Q\xd0q\xd8\xd7{\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4#v\xad\xa9\x033\xb1\u0441\bL\x97\xe6E\xe8\x10\xaa[v\xf1\x89(\xa8WBTf\xf8\x00\x00\u07d4#x\xfdC\x82Q\x1e\x96\x8e\u0452\x10g7\xd3$\xf4T\xb55\x8965\u026d\xc5\u07a0\x00\x00\u07d4#\x82\xa9\u050e\xc8>\xa3e(\x90\xfd\x0e\u7710{[-\xc1\x89\a?u\u0460\x85\xba\x00\x00\u07d4#\x83\xc2\"\xe6~\x96\x91\x90\xd3!\x9e\xf1M\xa3xP\xe2lU\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#\x8akv5%/RDHl\n\xf0\xa7: s\x85\xe09\x89JD\x91\xbdm\xcd(\x00\x00\u07d4#\x9as>k\x85Z\u0152\xd6c\x15a\x86\xa8\xa1t\xd2D\x9e\x89X\xbe7X\xb2A\xf6\x00\x00\xe0\x94#\xab\t\xe7?\x87\xaa\x0f;\xe0\x13\x9d\xf0\xc8\xebk\xe5cO\x95\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94#\xab\xd9\xe9>yW\xe5\xb66\xbeey\x05\x1c\x15\xe5\xce\v\x0e\x8a\x03\xa3\xc8\xf7\xcb\xf4,8\x00\x00\u07d4#\xb1\u0111\u007f\xbd\x93\xee=H8\x93\x06\x95s\x84\xa5Il\xbf\x89\xd8\xd8X?\xa2\xd5/\x00\x00\xe0\x94#\xba8d\xdaX=\xabV\xf4 \x87<7g\x96\x90\xe0/\x00\x8a\x02\x13BR\r_\xec \x00\x00\u07d4#\xc5Z\xebW9\x87o\n\xc8\xd7\xeb\xea\x13\xber\x96\x85\xf0\x00\x89Hz\x9a0E9D\x00\x00\u07d4#\u025b\xa0\x87D\x8e\x19\xc9p\x1d\xf6n\f\xabR6\x831\xfa\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#\xcc\xc3\u01ac\xd8\\.F\fO\xfd\xd8+\xc7]\xc8I\xea\x14\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4#\xcd%\x98\xa2\x0e\x14\x9e\xad*\u0593yWn\xce\xdb`\u3389lk\x93[\x8b\xbd@\x00\x00\u07d4#\u07cfH\xee\x00\x92V\xeay~\x1f\xa3i\xbe\xeb\xcfk\xc6c\x89|\xd3\xfa\xc2m\x19\x81\x80\x00\u07d4#\xe2\u01a8\xbe\x8e\n\u03e5\xc4\xdf^6\x05\x8b\xb7\u02ecZ\x81\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#\xeaf\x9e5d\x81\x9a\x83\xb0\xc2l\x00\xa1m\x9e\x82olF\x89M\x8dl\xa9h\xca\x13\x00\x00\u07d4#\xebo\xd8Vq\xa9\x06:\xb7g\x8e\xbe&Z \xf6\x1a\x02\xb3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4#\xf9\xec\xf3\xe5\xdd\u0723\x88\x15\xd3\xe5\x9e\xd3K[\x90\xb4\xa3S\x89\v\x17\x81\xa3\xf0\xbb \x00\x00\u07d4#\xfa~\xb5\x1aH\"\x95\x98\xf9~v+\xe0\x86\x96R\xdf\xfcf\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94$\x03\x05rs\x13\xd0\x1esT,w_\xf5\x9d\x11\xcd5\xf8\x19\x8a\x01A\x88Vf\x80\u007f\\\x80\x00\u07d4$\x04k\x91\u069ba\xb6)\u02cb\x8e\xc0\xc3Q\xa0~\a\x03\xe4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4$\x0eU\x9e'J\xae\xf0\xc2X\x99\x8c\x97\x9fg\x1d\x11s\xb8\x8b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94$\x13aU\x9f\xee\xf8\x0e\xf170!S\xbd\x9e\xd2\xf2]\xb3\xef\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94$;;\xcaj)\x93Y\xe8\x86\xce3\xa3\x03A\xfa\xfeMW=\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4$<\x84\xd1$ W\f\xc4\xef;\xab\xa1\xc9Y\u0083$\x95 \x89\u007f\x1fi\x93\xa8S\x04\x00\x00\xe0\x94$CJ>2\xe5N\xcf'/\xe3G\v_oQ/gU \x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4$HYo\x91\xc0\x9b\xaa0\xbc\x96\x10j-7\xb5p^](\x89lk\x93[\x8b\xbd@\x00\x00\u0794$Xn\xc5E\x175\xee\xaa\xebG\r\xc8sj\xaeu/\x82\xe5\x88\xf4?\xc2\xc0N\xe0\x00\x00\u07d4$X\xd6U_\xf9\x8a\x12\x9c\xce@7\x95=\x00 n\xffB\x87\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4$b\x91\x16[Y3-\xf5\xf1\x8c\xe5\u0248V\xfa\xe9X\x97\u0589\\(=A\x03\x94\x10\x00\x00\u07d4$g\u01a5\u0196\xed\xe9\xa1\xe5B\xbf\x1a\xd0k\xccK\x06\xac\xa0\x89\x01\x00\xbd3\xfb\x98\xba\x00\x00\u07d4$v\xb2\xbbu\x1c\xe7H\xe1\xa4\xc4\xff{#\v\xe0\xc1]\"E\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4$z\n\x11\xc5\u007f\x03\x83\xb9I\xdeT\vf\xde\xe6\x86\x04\xb0\xa1\x899\xfb\xae\x8d\x04-\xd0\x00\x00\u07d4$\x87\xc3\u013e\x86\xa2r=\x91|\x06\xb4XU\x01p\xc3\xed\xba\x8965\u026d\xc5\u07a0\x00\x00\u07d4$\x89\xac\x12i4\xd4\u05a9M\xf0\x87C\xda{v\x91\xe9y\x8e\x8965\u026d\xc5\u07a0\x00\x00\u07d4$\x9d\xb2\x9d\xbc\x19\xd1#]\xa7)\x8a\x04\b\x1c1WB\u9b09a\xac\xff\x81\xa7\x8a\xd4\x00\x00\u07d4$\xa4\xeb6\xa7\xe4\x98\xc3o\x99\x97\\\x1a\x8dr\x9f\u05b3\x05\u05c9\r\xfcx!\x0e\xb2\xc8\x00\x00\u07d4$\xa7P\xea\xe5\x87G\x11\x11m\xd7\xd4{q\x86\u0399\r1\x03\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4$\xaa\x11Q\xbbv_\xa3\xa8\x9c\xa5\x0e\xb6\xe1\xb1\xc7\x06A\u007f\u0509\xa8\r$g~\xfe\xf0\x00\x00\u0794$\xac\xa0\x8d[\xe8^\xbb\x9f12\xdf\xc1\xb6 \x82N\xdf\xed\xf9\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4$\xb2\xbe\x11\x8b\x16\u0632\x17Gi\xd1{L\xf8O\a\u0294m\x89lk\x93[\x8b\xbd@\x00\x00\u07d4$\xb8\xb4F\u07bd\x19G\x95]\u0404\xf2\xc5D\x933F\u04ed\x89\xeaim\x90@9\xbd\x80\x00\u07d4$\xb9^\xbe\xf7\x95\x00\xba\xa0\xed\xa7.w\xf8wA]\xf7\\3\x891T\xc9r\x9d\x05x\x00\x00\u07d4$\xb9\xe6dOk\xa4\xcd\xe1&'\r\x81\xf6\xab`\xf2\x86\xdf\xf4\x89\a?u\u0460\x85\xba\x00\x00\u07d4$\xbdY\x04\x05\x90\x91\xd2\xf9\xe1-j&\xa0\x10\xca\"\xab\x14\xe8\x89e\xea=\xb7UF`\x00\x00\u07d4$\xc0\u020bT\xa3TG\t\x82\x8a\xb4\xab\x06\x84\x05Y\xf6\xc5\u2250\xf54`\x8ar\x88\x00\x00\u07d4$\xc1\x17\xd1\u04b3\xa9z\xb1\x1aFy\u025awJ\x9e\xad\xe8\u044965\u026d\xc5\u07a0\x00\x00\u07d4$\xcf\xf0\xe93j\x9f\x80\xf9\xb1\u02d6\x8c\xafk\x1d\x1cI2\xa4\x89\n\xdaUGK\x814\x00\x00\u07d4$\u06aa\xdd\xf7\xb0k\xbc\ua6c0Y\x00\x85\xa8\x85gh+N\x89\x11K \x15\u04bb\xd0\x00\x00\u07d4$\xdc\xc2K\xd9\xc7!\f\xea\u03f3\r\xa9\x8a\xe0JM{\x8a\xb9\x8965\u026d\xc5\u07a0\x00\x00\u07d4$\xf7E\r\xdb\xf1\x8b\x02\x0f\xeb\x1a 2\xd9\xd5Kc>\xdf7\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4$\xfcs\xd2\a\x93\t\x8e\t\u076bW\x98Pb$\xfa\x1e\x18P\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4$\xfd\x9al\x87L/\xab?\xf3n\x9a\xfb\xf8\xce\r2\xc7\u0792\x89Hz\x9a0E9D\x00\x00\u07d4%\n@\xce\xf3 #\x97\xf2@F\x95H\xbe\xb5bj\xf4\xf2<\x89\x05\x03\xb2\x03\xe9\xfb\xa2\x00\x00\u07d4%\niC\av\xf64w\x03\xf9R\x97\x83\x95Za\x97\xb6\x82\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4%\x0e\xb7\xc6o\x86\x9d\xdfI\u0685\xf39>\x98\f\x02\x9a\xa44\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4%\x10j\xb6u]\xf8mkc\xa1\x87p;\f\xfe\xa0\u5520\x89\x01|@Z\xd4\x1d\xb4\x00\x00\xe0\x94%\x18_2Z\xcf-dP\x06\x98\xf6\\v\x9d\xdfh0\x16\x02\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4%\x1c\x12r,hy\"y\x92\xa3\x04\xeb5v\xcd\x18CN\xa5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4%\x1eh8\xf7\xce\u0173\x83\xc1\xd9\x01F4\x12t\xda\xf8\xe5\x02\x89\a\xff\x1c\xcbua\xdf\x00\x00\u07d4%%\x9d\x97Z!\xd8:\xe3\x0e3\xf8\x00\xf5?7\u07e0\x198\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4%({\x81_\\\x828\ns\xb0\xb1?\xba\xf9\x82\xbe$\xc4\u04c9\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94%+eU\xaf\u0700\xf2\xd9m\x97-\x17\u06c4\xeaZ\xd5!\xac\x8a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4%8S)6\x81<\x91\xe6S(O\x01|\x80\u00f8\xf8\xa3o\x89l\x87T\xc8\xf3\f\b\x00\x00\xe0\x94%>2\xb7N\xa4I\n\xb9&\x06\xfd\xa0\xaa%{\xf2=\u02cb\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94%?\x1et*,\uc1b0\u05f3\x06\xe5\xea\xcbl\xcb/\x85T\x8a\x04>^\xde\x1f\x87\x8c \x00\x00\u07d4%A1J\v@\x8e\x95\xa6\x94DIwq*Pq5\x91\xab\x89X\x9e\x1a]\xf4\u05f5\x00\x00\u07d4%L\x1e\xccc\f(w\u0780\x95\xf0\xa8\u06e1\xe8\xbf\x1fU\f\x89\\(=A\x03\x94\x10\x00\x00\u07d4%Z\xbc\x8d\b\xa0\x96\xa8\x8f=j\xb5_\xbcsR\xbd\u0739\u0389\x04t6\x821>\u0780\x00\u07d4%[\xdddt\u0302b\xf2j\"\u00cfE\x94\x0e\x1c\ue99b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4%`\xb0\x9b\x89\xa4\xaehI\xedZ<\x99XBf1qDf\x89\\(=A\x03\x94\x10\x00\x00\u07d4%a\xa18\xdc\xf8;\xd8\x13\xe0\xe7\xf1\bd+\xe3\xde=o\x05\x8964\xf4\x84\x17@\x1a\x00\x00\u0794%a\xec\x0f7\x92\x18\xfe^\xd4\xe0(\xa3\xf7D\xaaAuLr\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u0794%b\x92\xa1\x91\xbd\xda4\xc4\xdakk\u0591G\xbfu\u2a6b\x88\xc2\xff.\r\xfb\x03\x80\x00\u07d4%i~\xf2\f\u032ap\xd3-7o\x82r\xd9\xc1\a\f=x\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4%o\xa1P\u0307\xb5\x05j\a\xd0\x04\xef\xc8E$s\x9eb\xb5\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4%r\x1c\x87\xb0\xdc!7|r\x00\xe5$\xb1J\"\xf0\xafi\xfb\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4%\x899\xbb\xf0\f\x9d\xe9\xafS8\xf5\xd7\x14\xab\xf6\xd0\xc1\xc6q\x89T\x06\x923\xbf\u007fx\x00\x00\xe0\x94%\x90\x12hp\xe0\xbd\xe8\xa6c\xab\x04\nr\xa5W=\x8dA\u008a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4%\x9e\xc4\xd2e\xf3\xabSk|p\xfa\x97\xac\xa1Bi,\x13\xfc\x89\x01\x1b\x1b[\xea\x89\xf8\x00\x00\xe0\x94%\xa5\x00\xee\xeczf*\x84\x15R\xb5\x16\x8bp{\r\xe2\x1e\x9e\x8a\x02\x1f/o\x0f\xc3\xc6\x10\x00\x00\xe0\x94%\xa5\xa4M8\xa2\xf4Lj\x9d\xb9\u037ck\x1e.\x97\xab\xb5\t\x8a\x03\x99\x92d\x8a#\u0220\x00\x00\u07d4%\xa7L*\xc7]\u023a\xa8\xb3\x1a\x9c|\xb4\xb7\x82\x9b$V\u0689lk\x93[\x8b\xbd@\x00\x00\xe0\x94%\xad\xb8\xf9o9I,\x9b\xb4|^\u0708bNF\aV\x97\x8a\x05\xa9\x94\v\xc5hyP\x00\x00\u07d4%\xae\xe6\x8d\t\xaf\xb7\x1d\x88\x17\xf3\xf1\x84\xecV/x\x97\xb74\x89lk\x93[\x8b\xbd@\x00\x00\u07d4%\xb0S;\x81\xd0*a{\x92)\xc7\xec]o/g.[Z\x8965\u026d\xc5\u07a0\x00\x00\u07d4%\xb7\x8c\x9f\xad\x85\xb43C\xf0\xbf\xcd\x0f\xac\x11\u0254\x9c\xa5\xeb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4%\xbcI\xef(\x8c\xd1e\xe5%\xc6a\xa8\x12\u03c4\xfb\xec\x8f3\x89\x12Y!\xae\xbd\xa9\xd0\x00\x00\u07d4%\xbd\xfa>\xe2o8Ia{#\x00bX\x8a\x97\xe3\xca\xe7\x01\x8965\xe6\x19\xbb\x04\xd4\x00\x00\u07d4%\xc1\xa3~\xe5\xf0\x82e\xa1\xe1\r=\x90\xd5G)U\xf9x\x06\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4%\xc6\xe7O\xf1\xd9(\u07d8\x13z\xf4\u07c40\xdf$\xf0|\u05c9\x15$VU\xb1\x02X\x00\x00\xe0\x94%\xcf\xc4\xe2\\5\xc1;i\xf7\xe7}\xbf\xb0\x8b\xafXuk\x8d\x8a\bxg\x83&\xea\xc9\x00\x00\x00\xe0\x94%\xda\u0515\xa1\x1a\x86\xb9\xee\xec\xe1\xee\xec\x80^W\xf1W\xfa\xff\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\xe0\x94%\xe07\xf0\n\x18'\v\xa5\xec4 \"\x9d\xdb\n,\u33e2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4%\xe6a\xc99\x86:\xcc\x04No\x17\xb5i\x8c\xce7\x9e\xc3\u0309JD\x91\xbdm\xcd(\x00\x00\u07d4&\x04\x8f\xe8M\x9b\x01\nb\xe71b~I\xbc.\xb7?@\x8f\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4&\x06\u00f3\xb4\xca\x1b\t\x14\x98`,\xb1\x97\x8b\xf3\xb9R!\xc0\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4&\n#\x0eDe\a~\v\x14\xeeDB\xa4\x82\u0570\xc9\x14\xbf\x89Z\xf6\x06\xa0k[\x11\x80\x00\u07d4&\r\xf8\x94:\x8c\x9a]\xbayE2\u007f\xd7\xe0\x83|\x11\xad\a\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4&\x14\xf4-]\xa8D7ux\xe6\xb4H\xdc$0[\xef+\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4&\x15\x10\x0e\xa7\xe2[\xba\x9b\xcat`X\xaf\xbb\xb4\xff\xbeBD\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4&\x15u\xe9\xcfY\xc8\"o\xa7\xaa\xf9\x1d\xe8o\xb7\x0fZ\u00ee\x89\x10C\xa4CjR?\x00\x00\xe0\x94&\x1e\x0f\xa6LQ\x13te\xee\xcf[\x90\xf1\x97\xf7\x93\u007f\xdb\x05\x8a\x03\xcf\xc8.7\xe9\xa7@\x00\x00\u07d4&*\x8b\xfd}\x9d\xc5\xdd:\u05c1a\xb6\xbbV\b$76U\x89?j\x83\x84\a+v\x00\x00\xe0\x94&*\xedK\xc0\xf4\xa4\xb2\xc6\xfb5y>\x83ZI\x18\x9c\xdf\xec\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94&-\xc16L\xcfm\xf8\\C&\x8e\xe1\x82UM\xaei.)\x8a\x01\v /\xect\xce\xd8\x00\x00\u07d4&8\x140\x9d\xe4\xe65\xcfX^\r6Tw\xfc@\xe6l\xf7\x89\a\xea(2uw\b\x00\x00\u07d4&9\xee\xe9\x87<\xee\xc2o\u0314T\xb5H\xb9\xe7\xc5J\xa6\\\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94&>W\xda\xcb\xe0\x14\x9f\x82\xfee\xa2fH\x98\x86o\xf5\xb4c\x8a\b\v\xfb\xef\xcb_\v\xc0\x00\x00\u07d4>\x19\xc0m_\x14z\xa5\x97$\x8e\xb4l\xf7\xbe\xfad\xa5\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4&L\xc8\bj\x87\x10\xf9\x1b!r\t\x05\x91,\u05d6J\xe8h\x89\x01s\x17\x90SM\xf2\x00\x00\xe0\x94&S\x83\u058bR\xd04\x16\x1b\xfa\xb0\x1a\xe1\xb0G\x94/\xbc2\x8a\x04rq\xde\xe2\rt\\\x00\x00\u07d4&Y\xfa\xcb\x1e\x83CeS\xb5\xb4)\x89\xad\xb8\a_\x99S\xed\x89\x01\x97evw\x1a^\x00\x00\xe0\x94&o-\xa7\xf0\b^\xf3\xf3\xfa\t\xba\xee#+\x93\xc7D\xdb.\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4&qH\xfdr\xc5Ob\nY/\xb9'\x991\x9c\xc4S+\\\x89\x169\u46fa\x16(\x00\x00\xe0\x94&xJ\u0791\u0228:\x8e9e\x8c\x8d\x82wA<\u0319T\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4&z~n\x82\xe1\xb9\x1dQ\xde\u0776D\xf0\xe9m\xbb\x1f\u007f~\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4&\x80q=@\x80\x8e*P\xed\x011P\xa2\xa6\x94\xb9j\u007f\x1d\x89a\t=|,m8\x00\x00\u07d4&\x97\xb39\x81;\f-\x96K$q\xeb\x1c`oN\u02d6\x16\x89>\x8e\xf7\x95\u0610\xc8\x00\x00\u07d4&\xa6\x8e\xab\x90Z\x8b=\xce\x00\xe3\x170\x82%\u06b1\xb9\xf6\xb8\x89kV\x05\x15\x82\xa9p\x00\x00\u07d4&\xb1\x1d\x06e\x88\xcet\xa5r\xa8Zc(s\x92\x12\xaa\x8b@\x89lk\x93[\x8b\xbd@\x00\x00\u07d4&\xba\xbfB\xb2g\xfd\xcf8a\xfd\xd4#j^GHH\xb3X\x8965\u026d\xc5\u07a0\x00\x00\u07d4&\xc0\x05Kp\r:|-\xcb\xe2uh\x9dOL\xad\x16\xa35\x89lk\x93[\x8b\xbd@\x00\x00\u07d4&\xc2\xff\xc3\x0e\xfd\xc5'>v\x18:\x16\xc2i\x8dnS\x12\x86\x89*\x11)\u0413g \x00\x00\u07d4&\u025f\x88I\u0240+\x83\xc8a!\u007f\xd0z\x9e\x84\u0377\x9d\x89\x10CV\x1a\x88)0\x00\x00\u07d4&\xcf\xff\xd0R\x15+\xb3\xf9W\xb4x\xd5\xf9\x8b#:|+\x92\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4&\u0521h\x91\xf5)\"x\x92\x17\xfc\u0606\xf7\xfc\xe2\x96\xd4\x00\x89lk\x93[\x8b\xbd@\x00\x00\u07d4&\xd4\xec\x17\xd5\u03b2\u0214\xbd\u015d\nji]\xad+C\u0309\x9f\x1fxv\x1d4\x1a\x00\x00\u07d4&\xe8\x01\xb6,\x82q\x91\xddh\xd3\x1a\x01\x19\x90\x94\u007f\xd0\xeb\xe0\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4&\xe9\xe2\xadr\x97\x02bd\x17\xef%\xde\r\xc8\x00\xf7\xa7y\xb3\x8965\u026d\xc5\u07a0\x00\x00\u07d4&\xf9\xf7\xce\xfd~9K\x9d9$A+\xf2\u0083\x1f\xaf\x1f\x85\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94&\xfe\x17L\xbfRfP\xe0\xcd\x00\x9b\xd6\x12e\x02\u038ehM\x8a\x02w\x01s8\xa3\n\xe0\x00\x00\xe0\x94&\xff\nQ\xe7\xce\u0384\x00'ix\xdb\xd6#n\xf1b\xc0\xe6\x8a\x15.\x18V'T\nP\x00\x00\u07d4'\x10\x1a\x0fV\u04da\x88\u0168O\x9b2L\xdd\xe3>\\\xb6\x8c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4'\x14L\xa9\xa7w\x1a\x83j\xd5\x0f\x80?d\xd8i\xb2\xae+ \x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4'\x14i\x13V:\xa7E\xe2X\x840\xd94\x8e\x86\xea|5\x10\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4'\x1d=H\x1c\xb8\x8evq\xad!iI\xb66^\x060=\xe0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4' \xf9\xcaBn\xf2\xf2\xcb\xd2\xfe\xcd9\x92\fO\x1a\x89\xe1m\x89lk\x93[\x8b\xbd@\x00\x00\u07d4'*\x13\x1aZejz:\xca5\u023d \"\"\xa7Y\"X\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4'D\xffgFA!\xe3Z\xfc)\"\x17qd\xfa/\xcb\x02g\x89\x05k\xc7^-c\x10\x00\x00\u07d4'J=w\x1a=p\x97\x96\xfb\xc4\xd5\xf4\x8f\xce/\xe3\x8cy\u0589\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4'Mi\x17\x0f\xe7\x14\x14\x01\x88+\x88j\xc4a\x8cj\xe4\x0e\u06c93\xc5I\x901r\f\x00\x00\u07d4'R\x1d\xeb;n\xf1An\xa4\u01c1\xa2\xe5\u05f3n\xe8\x1ca\x89lk\x93[\x8b\xbd@\x00\x00\u07d4'Xu\xffO\xbb\f\xf3\xa40!1'H\u007fv\b\xd0L\xba\x89\x1b\x1c\x01\x0evmX\x00\x00\u07d4'j\x00n0(\xec\xd4L\xdbb\xba\nw\u0394\xeb\xd9\xf1\x0f\x89a\x94\x04\x9f0\xf7 \x00\x00\u07d4'k\x05!\xb0\xe6\x8b'}\xf0\xbb2\xf3\xfdH2cP\xbf\xb2\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4'o\xd7\xd2O\x8f\x88?Zz()[\xf1qQ\u01e8K\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4'p\xf1N\xfb\x16]\u07bay\xc1\v\xb0\xaf1\xc3\x1eY3L\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4'vw\xab\xa1\xe5,;S\xbf\xa2\a\x1dN\x85\x9a\n\xf7\xe8\xe1\x8965\u026d\xc5\u07a0\x00\x00\u07d4'\x82Ff\xd2x\xd7\x04#\xf0=\xfe\x1d\u01e3\xf0/C\u2d4966\xc2^f\xec\xe7\x00\x00\u07d4'\x83\f_`#\xaf\xaa\xf7\x97Egl J\x0f\xac\u0360\xba\x89\r\x02\xabHl\xed\xc0\x00\x00\xe0\x94'\x84\x90?\x1d|\x1b\\\xd9\x01\xf8\x87]\x14\xa7\x9b<\xbe*V\x8a\x04\xbd\xa7\xe9\xd7J\xd5P\x00\x00\u07d4'\x8c\v\xdec\x0e\u00d3\xb1\xe7&\u007f\xc9\xd7\xd9p\x19\xe4\x14[\x89lk\x93[\x8b\xbd@\x00\x00\u07d4'\x98q\x10\"\x1a\x88\b&\xad\xb2\xe7\xab^\xcax\xc6\xe3\x1a\xec\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94'\xac\a;\xe7\x9c\xe6W\xa9:\xa6\x93\xeeC\xbf\x0f\xa4\x1f\xef\x04\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4'\xb1iN\xaf\xa1e\xeb\xd7\xcc{\u025et\x81J\x95\x14\x19\u0709+^:\xf1k\x18\x80\x00\x00\u07d4'\xb6(\x16\xe1\xe3\xb8\u045by\xd1Q=]\xfa\x85[\f:*\x89\x05j\xf5\xc1\xfdiP\x80\x00\u07d4'\xbf\x94<\x163\xfe2\xf8\xbc\xcc\xdbc\x02\xb4\a\xa5rND\x892\xf8Lm\xf4\b\xc0\x80\x00\u07d4'\xbf\x9fD\xba}\x05\xc35@\u00e5;\xb0,\xbb\xff\xe7\xc3\u0189lk\x93[\x8b\xbd@\x00\x00\u07d4'\xc2\xd7\xcaPM\xaa=\x90f\xdc\t\x13}\xc4/:\xaa\xb4R\x89 \x86\xac5\x10R`\x00\x00\u07d4'\xd1X\xac=>\x11\t\xabnW\x0e\x90\xe8]8\x92\xcdv\x80\x89\x05k\xc7^-c\x10\x00\x00\u07d4'\xe69\x89\xca\x1e\x90;\xc6 \xcf\x1b\x9c?g\xb9\xe2\xaee\x81\x89Hz\x9a0E9D\x00\x00\xe0\x94'\xf0<\xf1\xab\xc5\xe1\xb5\x1d\xbcDK(\x9eT,\x9d\u07f0\xe6\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4'\xfc\x85\xa4\x9c\xff\x90\xdb\xcf\xda\u071d\xdd@\u05b9\xa2!\nl\x89\x05k\xc7^-c\x10\x00\x00\u07d4(\x05A^\x1d\u007f\xde\xc6\xde\u07f8\x9eR\x1d\x10Y-t<\x10\x89\x05k\xc7^-c\x10\x00\x00\u07d4(\a>\xfc\x17\xd0\\\xab1\x95\xc2\xdb3+a\x98Gw\xa6\x12\x8965\u026d\xc5\u07a0\x00\x00\u07d4(\x12P\xa2\x91!'\nN\xe5\u05cd$\xfe\xaf\xe8,p\xba:\x8965\u026d\xc5\u07a0\x00\x00\u07d4(\x13\xd2c\xfc_\xf2G\x9e\x97\x05\x95\u05b6\xb5`\xf8\xd6\xd6\u0449lk\x93[\x8b\xbd@\x00\x00\u07d4(.\x80\xa5T\x87ZVy\x9f\xa0\xa9\u007fU\x10\u7557LN\x8965\u026d\xc5\u07a0\x00\x00\u07d4(3\x96\xce<\xac9\x8b\xcb\xe7\"\u007f2>x\xff\x96\u0407g\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4(4\x9f~\xf9t\xeaU\xfe6\xa1X;4\xce\xc3\xc4Pe\xf0\x89\f\xb63\u051eeY\x00\x00\u07d4(6\x120F\xb2\x84\xe5\xef\x10+\xfd\"\xb1v^P\x81\x16\xad\x89\x16S\xfb\xb5\xc4'\xe4\x00\x00\u07d4(<#\x14(<\x92\u0530d\xf0\xae\xf9\xbbRF\xa7\x00\u007f9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4(>\x11 7I\xb1\xfaO2\xfe\xbbq\xe4\x9d\x13Y\x198*\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94(>bR\xb4\xef\xcfFT9\x1a\xcbu\xf9\x03\u015bx\xc5\xfb\x8a\x02\x8a\x85t%Fo\x80\x00\x00\xe0\x94(Q\x0en\xff\x1f\xc8)\xb6WoC(\xbc98\xecze\x80\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4(X\xac\xac\xaf!\xea\x81\u02b7Y\x8f\xdb\xd8kE.\x9e\x8e\x15\x89$\x1a\x9bOaz(\x00\x00\u07d4(Z\xe5\x1b\x95\x00\u014dT\x13e\xd9ui\xf1K\xb2\xa3p\x9b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4(f\xb8\x1d\xec\xb0.\xe7\n\xe2P\xce\xe5\xcd\xc7{Y\u05f6y\x89lk\x93[\x8b\xbd@\x00\x00\u07d4(i\x06\xb6\xbdIr\xe3\xc7\x16U\xe0K\xaf6&\f|\xb1S\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4(k\x18ma\xea\x1f\u05cd\x990\xfe\x12\xb0e7\xb0\\=Q\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94(t\xf3\xe2\x98]_{@f'\xe1{\xaaw+\x01\xab\u031e\x8a\x01F\x05\x04\x10v_8\x00\x00\xe0\x94(|\xf9\u0410.\xf8\x19\xa7\xa5\xf1ID[\xf1w^\xe8\xc4|\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4(\x81\x8e\x18\xb6\x10\x00\x13!\xb3\x1d\xf6\xfe}(\x15\u036d\xc9\xf5\x8965\u026d\xc5\u07a0\x00\x00\u07d4(\x86\x83$3~\x11\xba\x10l\xb4\x81\u0696/:\x84S\x80\x8d\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94(\x90K\xb7\xc40)C\xb7\t\xb1Myp\xe4+\x83$\u184a\x02\x1f\x97\x84j\a-~\x00\x00\u07d4(\x95\xe8\t\x99\xd4\x06\xadY.+&'7\xd3_}\xb4\xb6\x99\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4(\x96r\x80!N!\x8a\x12\f]\xda7\x04\x1b\x11\x1e\xa3mt\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4(\xa3\xda\t\xa8\x19H\x19\xae\x19\x9f.m\x9d\x13\x04\x81~(\xa5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4(\xab\x16_\xfbi\xed\xa0\xc5I\xae8\xe9\x82o_\u007f\x92\xf8S\x89FM\xf6\xd7\xc8DY\x00\x00\u07d4(\xb7u\x85\xcb=U\xa1\x99\xab)\x1d:\x18\u018f\u8684\x8a\x89j@v\xcfy\x95\xa0\x00\x00\xe0\x94(\xd4\xeb\xf4\x1e=\x95\xf9\xbb\x9a\x89u#\\\x1d\x009>\x80\x00\u07d4)\nV\xd4\x1fn\x9e\xfb\xdc\xea\x03B\u0dd2\x9a\x8c\xdf\xcb\x05\x89\x12\xa5\xf5\x81h\xee`\x00\x00\u07d4)\x15bK\xcbg\x917\xb8\xda\xe9\xabW\xd1\x1bI\x05\xea\xeeK\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4)\x1e\xfe\x00\x81\xdc\xe8\xc1G\x99\xf7\xb2\xa46\x19\xc0\u00f3\xfc\x1f\x89A\rXj \xa4\xc0\x00\x00\u07d4)\x1f\x92\x9c\xa5\x9bT\xf8D>=Mu\xd9]\xee$<\xefx\x89\x1b\x1a\b\x927\a=\x00\x00\xe0\x94))\x8c\xcb\xdf\xf6\x89\xf8\u007f\xe4\x1a\xa6\xe9\x8f\u07f5=\xea\xf3z\x8a\x041\\2\xd7\x1a\x9e`\x00\x00\u07d4)/\"\x8b\n\x94t\x8c\x8e\xeca-$o\x98\x93c\xe0\x8f\b\x89\n\ad\a\xd3\xf7D\x00\x00\u07d4)3\x84\xc4+o\x8f)\x05\xceR\xb7 \\\"t7la+\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4)4\xc0\xdf{\xbc\x17+l\x18k\vrTz\u038b\xf7TT\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4)<#\x06\xdf6\x04\xaeO\xda\r z\xbasog\xde\a\x92\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94)I\xfd\x1d\xef\\v\xa2\x86\xb3\x87$$\x80\x9a\a\xdb9f\xf3\x8a\x01\x1b\xd9\x06\u06a0\xc9C\x80\x00\u07d4)OIK?.\x14\xa3\xf8\xab\x00\x00\x00\u07d4)U\xc3W\xfd\x8fu\xd5\x15\x9a=\xfai\u0178z5\x9d\ua309lk\x93[\x8b\xbd@\x00\x00\u07d4)a\xfb9\x1ca\x95|\xb5\xc9\xe4\a\u0762\x938\u04f9,\x80\x8964\xfb\x9f\x14\x89\xa7\x00\x00\u07d4)h\x1d\x99\x12\xdd\xd0~\xaa\xbb\x88\xd0]\x90\xf7f\xe8bA}\x8965\u026d\xc5\u07a0\x00\x00\u07d4)kq\xc0\x01X\x19\xc2B\xa7\x86\x1eo\xf7\xed\xed\x8a_q\xe3\x89lh\xcc\u041b\x02,\x00\x00\u07d4)mf\xb5!W\x1aNA\x03\xa7\xf5b\xc5\x11\xe6\xaas-\x81\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4)o\x00\xde\x1d\u00fb\x01\xd4z\x8c\xcd\x1e]\x1d\u0661\xebw\x91\x8965\u026d\xc5\u07a0\x00\x00\u07d4)s\x85\xe8\x864FV\x85\xc21\xa3\x14\xa0\xd5\xdc\xd1F\xaf\x01\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4)v=\xd6\u069a|\x16\x11s\x88\x83!\ub9b6<\x8f\xb8E\x89\x11\xc7\xea\x16.x \x00\x00\u07d4)yt\x11t\xa8\xc1\xea\v\u007f\x9e\xdfe\x81w\x85\x94\x17\xf5\x12\x89\x19\x01\x96l\x84\x96\x83\x80\x00\u07d4)z\x88\x92\x1b_\xca\x10\u5edd\xed`\x02T7\xae\"\x16\x94\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94)}]\xbe\"//\xb5%1\xac\xbd\v\x01=\xc4F\xacsh\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4)\x82N\x94\xccCH\xbc\x962y\xdc\xdfG9\x17\x152L\u04c9i*\xe8\x89p\x81\xd0\x00\x00\u07d4)\x82\xd7j\x15\xf8G\xddA\xf1\x92*\xf3h\xfeg\x8d\x0eh\x1e\x89\x05k\xc7^-c\x10\x00\x00\u07d4)\x88\x87\xba\xb5|[\xa4\xf0aR)\xd7R_\xa1\x13\xb7\ua249\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94)\x8e\xc7kD\r\x88\a\xb3\xf7\x8b_\x90\x97\x9b\xeeB\xedC\u06ca\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4)\x93h`\x90B\xa8X\xd1\xec\xdf\x1f\xc0\xad\xa5\xea\xce\xca)\u03c9lk\x93[\x8b\xbd@\x00\x00\u07d4)\x9e\v\xcaU\xe0i\u0785\x04\xe8\x9a\xcan\xca!\u04ca\x9a]\x89\x03\x027\x9b\xf2\xca.\x00\x00\u07d4)\xac+E\x84T\xa3l~\x96\xc7:\x86g\"*\x12$,q\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94)\xad\u03c3\xb6\xb2\n\u01a44\xab\xb1\x99<\xbd\x05\xc6\x0e\xa2\xe4\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94)\xae\xf4\x8d\xe8\xc9\xfb\xadK\x9eL\xa9pyzU3\xebr-\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4)\xb3\xf5a\xeezn%\x94\x1e\x98\xa52[x\xad\u01d7\x85\xf3\x89\x05k\xc7^-c\x10\x00\x00\u07d4)\xbd\xc4\xf2\x8d\xe0\x18\x0fC<&\x94\xebt\xf5PL\xe9C7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4)\u0300M\x92+\xe9\x1fY\t\xf3H\xb0\xaa\xa5\xd2\x1b`x0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94)\xda>5\xb2;\xb1\xf7/\x8e\"X\xcf\u007fU3Y\xd2K\xac\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94)\xe6y\x90\xe1\xb6\xd5.\x10U\xff\xe0I\xc51\x95\xa8\x15B\u03ca\x04<3\xc1\x93ud\x80\x00\x00\u07d4)\uab82v\x17b\xf4\xd2\xdbS\xa9\u018b\x0fk\vmNf\x89lk\x93[\x8b\xbd@\x00\x00\u07d4)\xeb~\xef\xda\xe9\xfe\xb4I\xc6?\xf5\xf2y\xd6u\x10\xeb\x14\"\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4)\xf0\xed\xc6\x038\xe7\x11 \x85\xa1\xd1\x14\u068cB\u038fU\u0589\xa0Z\u007f\x0f\xd8%x\x00\x00\u07d4)\xf8\xfb\xa4\xc3\ar\xb0W\xed\xbb\xe6*\xe7B\f9\x05r\xe1\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94)\xf9(l\x0es\x8d\x17!\xa6\x91\u01b9Z\xb3\u0667\x97\xed\xe8\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4*\b^%\xb6Hb\xf5\xe6\x8dv\x8e+\x0fz\x85)\x85\x8e\xee\x89k\x88:\xcdWf\xcd\x00\x00\u07d4**\xb6\xb7Lz\xf1\xd9Gk\xb5\xbc\xb4RG\x97\xbe\xdc5R\x8965\u026d\xc5\u07a0\x00\x00\u07d4*9\x19\nO\u0783\u07f3\xdd\xcbL_\xbb\x83\xaclIu\\\x8965\u026d\xc5\u07a0\x00\x00\u07d4*@\r\xff\x85\x94\xder(\xb4\xfd\x15\xc3#\"\xb7[\xb8}\xa8\x89\x051\xa1\u007f`z-\x00\x00\xe0\x94*D\xa7!\x8f\xe4Me\xa1\xb4\xb7\xa7\u0671\xc2\xc5,\x8c>4\x8a\r-\x06\xc3\x05\xa1\xebW\x80\x00\u07d4*F\xd3Swqv\xff\x8e\x83\xff\xa8\x00\x1fOp\xf9s:\xa5\x89\x05\xbf\v\xa6cOh\x00\x00\u07d4*Y_\x16\xee\xe4\xcb\f\x17\u0662\xd99\xb3\xc1\x0flgrC\x89;\xa1\x91\v\xf3A\xb0\x00\x00\u07d4*Y\xe4~\xa5\xd8\xf0\xe7\xc0(\xa3\xe8\xe0\x93\xa4\x9c\x1bP\xb9\xa3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4*[\xa9\xe3L\u054d\xa5L\x9a'\x12f:;\xe2t\xc8\xe4{\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94*^:@\xd2\xcd\x03%vm\xe7:=g\x18\x96\xb3b\xc7;\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94*cY\x0e\xfe\x99\x86\xc3\xfe\xe0\x9b\n\n3\x8b\x15\xbe\xd9\x1f!\x8a\x01^\x1cN\x05\xee&\xd0\x00\x00\u07d4*gf\n\x13h\xef\xcdbn\xf3k+\x1b`\x19\x80\x94\x1c\x05\x89\a?u\u0460\x85\xba\x00\x00\u07d4*t+\x89\x10\x94\x1e\t2\x83\n\x1d\x96\x92\xcf\u0484\x94\xcf@\x89\x1b\x1a\xb3\x19\xf5\xecu\x00\x00\u07d4*tl\xd4@'\xaf>\xbd7\xc3x\xc8^\xf7\xf7T\xab_(\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4*\x81\xd2|\xb6\xd4w\x0f\xf4\xf3\u0123\xba\x18\xe5\xe5\u007f\aQ|\x89lk\x93[\x8b\xbd@\x00\x00\u07d4*\x91\xa9\xfe\xd4\x1b}\x0e\\\xd2\xd81X\xd3\xe8\xa4\x1a\x9a-q\x89i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94*\x9cW\xfe{k\x13\x8a\x92\rgo{\x1a%\x10\x80\xff\xb9\x8a4\xf0\x86\xf3\xb3;h@\x00\x00\u07d4+p\x1d\x16\xc0\xd3\xcc\x1eL\xd8TE\xe6\xad\x02\ue92c\x01-\x89 \x86\xac5\x10R`\x00\x00\xe0\x94+q|\xd42\xa3#\xa4e\x909\x84\x8d;\x87\xde&\xfc\x95F\x8ai\xe1\r\xe7fv\u0400\x00\x00\u07d4+t\xc3s\xd0K\xfb\x0f\xd6\n\x18\xa0\x1a\x88\xfb\xe8Gp\u5309\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4+w\xa4\u060c\rV\xa3\xdb\xe3\xba\xe0J\x05\xf4\xfc\u0477W\xe1\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94+\x84\x88\xbd-<\x19z=&\x15\x18\x15\xb5\xa7\x98\xd2qh\u070a\x01j\x1f\x9f_\xd7\xd9`\x00\x00\u07d4+\x8a\r\xee\\\xb0\xe1\xe9~\x15\xcf\xcan\x19\xad!\xf9\x95\ufb49\x1bUC\x8d\x9a$\x9b\x00\x00\xe0\x94+\x8f\xe4\x16n#\xd1\x19c\xc0\x93+\x8a\u078e\x01E\xea\ap\x8a\t(\x96R\x9b\xad\u0708\x00\x00\xe0\x94+\x99\xb4.OBa\x9e\xe3k\xaa~J\xf2\xd6^\xac\xfc\xba5\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4+\xab\x0f\xbe(\u0544 \xb5 6w\n\x12\xf9\x95*\xeai\x11\x89\xcf\x15&@\xc5\xc80\x00\x00\u07d4+\xad\xe9\x1d\x15E\x17b\x0f\u05349\xac\x97\x15zA\x02\xa9\xf7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4+\xaf\x8dn\"\x11t\x12H \xeeI+\x94Y\xecO\xad\xaf\xbb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4+\xaf\xbf\x9e\x9e\xd2\xc2\x19\xf7\xf2y\x13t\xe7\xd0\\\xb0gw\xe7\x89\v\xed\x1d\x02c\xd9\xf0\x00\x00\xe0\x94+\xb3f\xb9\xed\xcb\r\xa6\x80\xf0\xe1\v;n(t\x81\x90\xd6\u00ca\x01:b\u05f5v@d\x00\x00\xe0\x94+\xb6\xf5x\xad\xfb\u7ca1\x16\xb3UO\xac\xf9\x96\x98\x13\xc3\x19\x8a\x01\x91'\xa19\x1e\xa2\xa0\x00\x00\u07d4+\xbeb\xea\xc8\f\xa7\xf4\xd6\xfd\xee~}\x8e(\xb6:\xcfw\x0e\x89\x81\xe3-\xf9r\xab\xf0\x00\x00\u07d4+\xbeg*\x18WP\x8fc\x0f*^\xdbV=\x9e\x9d\xe9(\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4+\xc4)\xd6\x18\xa6jL\xf8-\xbb-\x82N\x93V\xef\xfa\x12j\x89lj\xccg\u05f1\xd4\x00\x00\u07d4+\xd2R\xe0\xd72\xff\x1d|x\xf0\xa0.l\xb2T#\xcf\x1b\x1a\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4+\xdd\x03\xbe\xbb\xee';l\xa1\x05\x9b4\x99\x9a[\xbda\xbby\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4,\x04\x11\\>R\x96\x1b\r\xc0\xb0\xbf1\xfb\xa4ToYf\xfd\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94,\x06\u0752+aQJ\xaf\xed\xd8D\x88\xc0\u008em\xcf\x0e\x99\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94,\f\xc3\xf9QH,\u0222\x92X\x15hN\xb9\xf9N\x06\x02\x00\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4,\x0e\xe14\u0633aE\xb4{\xee\u7bcd'8\xdb\xda\b\xe8\x89\n\xe5os\x0em\x84\x00\x00\u07d4,\x0f[\x9d\xf46%y\x8e~\x03\xc1\xa5\xfdjm\t\x1a\xf8+\x89\x01\xb0\xfc\xaa\xb2\x000\x00\x00\u07d4,\x12\x8c\x95\xd9W!Q\x01\xf0C\u074f\u0142EmA\x01m\x89-C\xf3\xeb\xfa\xfb,\x00\x00\u07d4,\x18\x00\xf3_\xa0->\xb6\xff[%(_^J\xdd\x13\xb3\x8d\x891\"\u04ed\xaf\xde\x10\x00\x00\u07d4,\x1c\x19\x11N=m\xe2xQHK\x8d'\x15\xe5\x0f\x8a\x10e\x89\x05k\xc7^-c\x10\x00\x00\u07d4,\x1c\xc6\xe1\x8c\x15$\x88\xba\x11\xc2\xcc\x1b\xce\xfa-\xf3\x06\xab\u0449Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94,\x1d\xf8\xa7oH\xf6\xb5K\u03dc\xafV\xf0\xee\x1c\xf5z\xb3=\x8a\x02$\u007fu\x00\x89\xdaX\x00\x00\u07d4,!G\x94z\xe3?\xb0\x98\xb4\x89\xa5\xc1k\xff\xf9\xab\xcdN*\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4,#OP\\\xa8\xdc\xc7}\x9b~\x01\xd2W\xc3\x18\xcc\x199m\x89\x05k\xc7^-c\x10\x00\x00\u07d4,$(\xe4\xa6it\xed\xc8\"\xd5\xdb\xfb$\x1b'(\aQX\x89lk\x93[\x8b\xbd@\x00\x00\u07d4,-\x15\xff9V\x1c\x1br\xed\xa1\xcc\x02\u007f\xfe\xf27C\xa1D\x89\u0500\xed\x9e\xf3+@\x00\x00\u07d4,-\xb2\x8c3\t7^\xea1\x82\x1b\x84\xd4\b\x93\x0e\xfa\x1a\u01c9lk\x93[\x8b\xbd@\x00\x00\u07d4,Z-\n\xbd\xa0;\xbe!W\x81\xb4\xff)l\x8ca\xbd\xba\xf6\x89\x01\xa8\xe5oH\xc0\"\x80\x00\u07d4,[}{\x19Z7\x1b\xf9\xab\u0774/\xe0O/\x1d\x9a\x99\x10\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4,]\xf8ffj\x19K&\u03bb@~J\x1f\xd7> \x8d^\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94,`?\xf0\xfe\x93alCW>\xf2y\xbf\xea@\x88\x8dj\xe7\x8a\x01\x00\xf4\xb6\xd6gW\x90\x00\x00\xe0\x94,hF\xa1\xaa\x99\x9a\"F\xa2\x87\x05`\x00\xbaM\u02e8\xe6=\x8a\x02\x1f/o\x0f\xc3\xc6\x10\x00\x00\u0794,j\xfc\xd4\x03|\x1e\xd1O\xa7O\xf6u\x8e\tE\xa1\x85\xa8\xe8\x88\xf4?\xc2\xc0N\xe0\x00\x00\u07d4,ki\x9d\x9e\xad4\x9f\x06\u007fEq\x1a\aJd\x1d\xb6\xa8\x97\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4,o\\\x12L\u01c9\xf8\xbb9\x8e?\x88\x97Q\xbcK`-\x9e\x89\x01Y\xf2\v\xed\x00\xf0\x00\x00\u07d4,\x83\xae\xb0/\xcf\x06}e\xa4p\x82\xfd\x97x3\xab\x1c\uc449\b'8#%\x8a\xc0\x00\x00\xe0\x94,\x89\xf5\xfd\xca=\x15T\t\xb68\xb9\x8at.U\xebFR\xb7\x8a\x14\u06f2\x19\\\xa2(\x90\x00\x00\u07d4,\x96HI\xb1\xf6\x9c\xc7\u03a4D%8\xed\x87\xfd\xf1l\xfc\x8f\x89lk\x93[\x8b\xbd@\x00\x00\u0794,\x9f\xa7,\x95\xf3}\b\xe9\xa3`\t\u7930\u007f)\xba\xd4\x1a\x88\xdfn\xb0\xb2\xd3\xca\x00\x00\u07d4,\xafk\xf4\xec}Z\x19\xc5\xe0\x89z^\xeb\x01\x1d\xce\xceB\x10\x89\a\x93H5\xa01\x16\x00\x00\u07d4,\xb4\xc3\xc1k\xb1\xc5^|kz\x19\xb1'\xa1\xac\x93\x90\xcc\t\x89\xb8'\x94\xa9$O\f\x80\x00\xe0\x94,\xb5IZPS6\xc2FT\x10\xd1\xca\xe0\x95\xb8\xe1\xba\\\u074a\x04<3\xc1\x93ud\x80\x00\x00\u07d4,\xb6\x15\a:@\xdc\u06d9\xfa\xa8HW.\x98{;\x05n\xfb\x89+X\xad\u06c9\xa2X\x00\x00\u07d4,\xbam]\r\xc2\x04\xea\x8a%\xad\xa2\xe2oVu\xbd_/\u0709H#\xef}\u06da\xf3\x80\x00\u07d4,\xbb\fs\u07d1\xb9\x17@\xb6i;wJ}\x05\x17~\x8eX\x89dI\xe8NG\xa8\xa8\x00\x00\u07d4,\xcbfIM\n\xf6\x89\xab\xf9H=6]x$D\xe7\u07ad\x8965\u026d\xc5\u07a0\x00\x00\u07d4,\xcc\x1f\x1c\xb5\xf4\xa8\x00.\x18k \x88]\x9d\xbc\x03\f\b\x94\x89lk\x93[\x8b\xbd@\x00\x00\u07d4,\u03c0\xe2\x18\x98\x12^\xb4\xe8\a\u0342\xe0\x9b\x9d(Y/n\x89lk\x93[\x8b\xbd@\x00\x00\u07d4,\u0456\x94\u0452j\x0f\xa9\x18\x9e\u07ba\xfcg\x1c\xf1\xb2\u02a5\x8965\u026d\xc5\u07a0\x00\x00\u07d4,\u04d34\xac~\xacyrW\xab\xe3sa\x95\xf5\xb4\xb5\xce\x0f\x89\x05kGx^7&\x00\x00\u07d4,\u05de\xb5 '\xb1,\x18\x82\x8e>\xaa\xb2\x96\x9b\xfc\u0487\xe9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4,\xd8xfV\x8d\xd8\x1a\xd4}\x9d:\u0404nZePss\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4,\xdb9De\x06\x16\xe4|\xb1\x82\xe0`2/\xa1Hyx\u0389b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4,\xe1\x1a\x92\xfa\xd0$\xff+>\x87\xe3\xb5B\xe6\xc6\r\xcb\u0656\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4-\x03&\xb2?\x04\t\xc0\xc0\xe9#hc\xa13\aZ\x94\xba\x18\x89\vg\x9b\xe7[\xe6\xae\x00\x00\u07d4-\r\xecQ\xa6\xe8s0\xa6\xa8\xfa*\x0fe\u060dJ\xbc\xdfs\x89\n\ad\a\xd3\xf7D\x00\x00\u07d4-#vkok\x05s}\xad\x80\xa4\x19\xc4\x0e\xdaMw\x10>\x89\xcf\x15&@\xc5\xc80\x00\x00\u07d4-+\x03#Y\xb3c\x96O\xc1\x1aQ\x82c\xbf\xd0T1\xe8g\x89\b\x1c\x1d\xf7b\x9ep\x00\x00\u07d4-4\x80\xbf\be\aJr\xc7u\x9e\xe5\x13{Mp\xc5\x1c\xe9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4-5\xa9\xdfbu\u007f\u007f\xfa\xd1\x04\x9a\xfb\x06\xcaJ\xfcFLQ\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4-@U\x8b\x06\xf9\n9#\x14U\x92\x12;gt\xe4n1\xf4\x8965\u026d\xc5\u07a0\x00\x00\u07d4-Bi\x12\xd0Y\xfa\xd9t\v.9\n.\xea\xc0To\xf0\x1b\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4-S-\xf4\xc69\x11\xd1\u0391\xf6\xd1\xfc\xbf\xf7\x96\x0fx\xa8\x85\x89Z\x85\x96\x8aXx\u0680\x00\u07d4-S\x91\xe98\xb3HX\u03d6[\x84\x051\xd5\xef\xdaA\v\t\x89K\xe4\xe7&{j\xe0\x00\x00\xe0\x94-[B\xfcY\xeb\xda\r\xfdf\xae\x91K\u008c\x1b\nn\xf8:\x8a+\u0235\x9f\xdc\xd86c\x80\x00\u07d4-]s5\xac\xb06+G\u07e3\xa8\xa4\xd3\xf5\x94\x95D\u04c0\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94-a\xbf\xc5hs\x92<+\x00\t]\xc3\xea\xa0\xf5\x90\u062e\x0f\x8a\x04ef\xdf\xf8\xceU`\x00\x00\u07d4-e\x11\xfdz8\x00\xb2hT\xc7\xec9\xc0\u0735\xf4\xc4\xe8\xe8\x89\x15\xad\u077a/\x9ew\x00\x00\u07d4-}\\@\u076f\xc4P\xb0Jt\xa4\u06bc+\xb5\xd6e\x00.\x89lk\x93[\x8b\xbd@\x00\x00\u07d4-\x89\xa8\x00jO\x13z \xdc+\xecF\xfe.\xb3\x12\xea\x96T\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4-\x8cR2\x9f8\u04a2\xfa\x9c\xba\xf5\u0143\xda\xf1I\v\xb1\x1c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4-\x8e\x06\x18\x92\xa5\xdc\xce!\x96j\xe1\xbb\a\x88\xfd>\x8b\xa0Y\x89\r\x8e\\\xe6\x17\xf2\xd5\x00\x00\u07d4-\x8e[\xb8\xd3R\x16\x95\xc7~|\x83N\x02\x91\xbf\xac\xeet\b\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4-\x90\xb4\x15\xa3\x8e.\x19\xcd\xd0/\U000ed069z\xf7\xcb\xf6r\x89\x05\xf3\xc7\xf6A1\xe4\x00\x00\u07d4-\x9b\xado\x1e\xe0*p\xf1\xf1=\xef\\\u0332z\x9a'@1\x89a\t=|,m8\x00\x00\u07d4-\x9c_\xec\u04b4O\xbbj\x1e\xc72\xea\x05\x9fO\x1f\x9d+\\\x896\xca2f\x1d\x1a\xa7\x00\x00\xe0\x94-\xa6\x17iP\t\xccW\xd2j\u0510\xb3*]\xfb\xeb\x93N^\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4-\xa7k|9\xb4 \u323a,\x10 \xb0\x85k\x02pd\x8a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4-\u01ddn\u007fU\xbc\xe2\xe2\xd0\xc0*\xd0|\uca3bR\x93T\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\xe0\x94-\xca\x0eD\x9a\xb6F\xdb\xdf\u04d3\xa9fb\x96\v\u02b5\xae\x1e\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4-\xd3%\xfd\xff\xb9{\x19\x99R\x84\xaf\xa5\xab\xdbWJ\x1d\xf1j\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4-\xd5x\xf7@}\xfb\xd5H\xd0^\x95\xcc\u00dcHT)bj\x89\u3bb5sr@\xa0\x00\x00\u07d4-\xd8\xee\xef\x87\x19J\xbc,\xe7X]\xa1\xe3[|\xeax\f\xb7\x8965\xc6 G9\u0640\x00\u07d4-\xdf@\x90Wi\xbc\xc4&\xcb,)8\xff\xe0w\xe1\u8758\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4-\xe0\x96D\x00\u0082\xbd\u05ca\x91\x9ck\xf7|k_yay\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94-\xe3\x1a\xfd\x18\x9a\x13\xa7o\xf6\xfes\xea\xd9\xf7K\xb5\u0126)\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4-\xec\x982\x9d\x1f\x96\u00e5\x9c\xaay\x81uTR\xd4\xdaI\u0549\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94-\ue422\x8f\x19-gj\x87s#+V\xf1\x8f#\x9e/\xad\x8a\x03\xef\xa7\xe7G\xb6\u046d\x00\x00\xe0\x94.\b\x80\xa3E\x96#\a \xf0Z\xc8\xf0e\xaf\x86\x81\u0736\u008a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4.\fW\xb4qP\xf9Z\xa6\xa7\xe1j\xb9\xb1\xcb\xf5C(\x97\x9a\x89\x05k\xc7^-c\x10\x00\x00\u07d4.\x10\x91\v\xa6\xe0\xbc\x17\xe0UUf\x14\u02c7\t\x0fM~[\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94.$\xb5\x97\x87;\xb1A\xbd\xb27\xea\x8aZ\xb7Gy\x9a\xf0-\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4.(\x10\xde\xe4J\xe4\xdf\xf3\xd8cB\xab\x12fW\xd6S\xc36\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4.,\xbdz\xd8%G\xb4\xf5\xff\x8b:\xb5o\x94*dE\xa3\xb0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4.-~\xa6k\x9fG\xd8\xccR\xc0\x1cR\xb6\u147c}G\x86\x89\xd8\xd4`,&\xbfl\x00\x00\u07d4.C\x93H\u07caBw\xb2*v\x84W\xd1\x15\x8e\x97\xc4\t\x04\x89*\x1e\x9f\xf2o\xbfA\x00\x00\xe0\x94.F\xfc\xeej;\xb1E\xb5\x94\xa2C\xa3\x91?\xce]\xado\xba\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u0794.G\xf2\x87\xf4\x98#7\x13\x85\r1&\x82<\xc6}\xce\xe2U\x88\u029d\x9e\xa5X\xb4\x00\x00\u07d4.N\u1b99j\xa0\xa1\xd9$(\xd0fR\xa6\xbe\xa6\xd2\xd1]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4.R\x91+\xc1\x0e\xa3\x9dT\xe2\x93\xf7\xae\u05b9\x9a\x0fLs\xbe\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4.a\x9fW\xab\xc1\u91ea\x93j\xe3\xa2&Ib\xe7\xeb-\x9a\x89(\xfb\x9b\x8a\x8aSP\x00\x00\u07d4.d\xa8\xd7\x11\x11\xa2/L]\xe1\xe09\xb36\xf6\x8d9\x8a|\x89lk\x93[\x8b\xbd@\x00\x00\u07d4.i3T=O,\xc0\vSP\xbd\x80h\xba\x92C\u05be\xb0\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94.~\x05\xe2\x9e\u0767\xe4\xae%\xc5\x175C\xef\xd7\x1fm=\x80\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4.\u007fFU \xec5\xcc#\u058eue\x1b\xb6h\x95D\xa1\x96\x898\xec[r\x1a\x1a&\x80\x00\u07d4.\x8e\xb3\nqn_\xe1\\t#>\x03\x9b\xfb\x11\x06\xe8\x1d\x12\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94.\x98$\xb5\xc12\x11\x1b\xca$\xdd\xfb\xa7\xe5u\xa5\xcdr\x96\xc1\x8a\x03\xa4\x84Qnm\u007f\xfe\x00\x00\u07d4.\xa5\xfe\xe6?3z7nK\x91\x8e\xa8!H\xf9MH\xa6&\x89e\x0f\x8e\r\u0493\xc5\x00\x00\u07d4.\xafN*F\xb7\x89\xcc\u0088\xc8\xd1\xd9)N?\xb0\x858\x96\x89lk\x93[\x8b\xbd@\x00\x00\u07d4.\xaf\xf9\xf8\xf8\x110d\u04d5z\xc6\xd6\xe1\x1e\xeeB\xc8\x19]\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4.\xba\fn\xe5\xa1\x14\\\x1cW9\x84\x96:`]\x88\nz \x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4.\xc9X\"\xeb\x88{\xc1\x13\xb4q*M\xfd\u007f\x13\xb0\x97\xb5\xe7\x8965\u026d\xc5\u07a0\x00\x00\u07d4.\xcaj<]\x9fD\x9d\tV\xbdC\xfa{M{\xe8CYX\x89lk\xdaip\x9c\xc2\x00\x00\xe0\x94.\xca\xc5\x04\xb23\x86n\xb5\xa4\xa9\x9e{\u0490\x13Y\xe4;=\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4.\xeb\xf5\x942\xb5(\x92\xf98\v\xd1@\xaa\x99\xdc\xf8\xad\f\x0f\x89\b=lz\xabc`\x00\x00\u07d4.\xee\xd5\x04q\xa1\xa2\xbfS\xee0\xb1#.n\x9d\x80\xef\x86m\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4.\xefk\x14\x17\u05f1\x0e\xcf\xc1\x9b\x12:\x8a\x89\xe7>RlX\x89 \x86\xac5\x10R`\x00\x00\u07d4.\xf8i\xf05\vW\xd54x\xd7\x01\xe3\xfe\xe5)\xbc\x91\x1cu\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4.\xf9\xe4eqj\xca\u03f8\xc8%/\xa8\xe7\xbcyi\xeb\xf6\u4255\x9e\xb1\xc0\xe4\xae \x00\x00\xe0\x94.\xfcLd}\xacj\xca\xc3Uw\xad\"\x17X\xfe\xf6ao\xaa\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4/\x13eu&\xb1w\xca\xd5G\u00d0\x8c\x84\x0e\xffd{E\u0649?v\x84\x9c\xf1\xee,\x80\x00\u07d4/\x18}ZpMZ3\x8c[(v\xa0\x90\xdc\xe9d(N)\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94/%#\u0303O\x00\x86\x05$\x02bb\x96gQ\x86\xa8\u508a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4/(*\xbb\xb6\u0523\xc3\xcd;\\\xa8\x12\xf7d>\x800_\x06\x89dI\xe8NG\xa8\xa8\x00\x00\u07d4/+\xba\x1b\x17\x96\x82\x1avo\xced\xb8O(\xech\xf1Z\xea\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4/1]\x90\x16\xe8\xee_Sf\x81 /\x90\x84\xb02TMM\x898<\xd1+\x9e\x86<\x00\x00\u07d4/M\xa7SC\x0f\xc0\x9es\xac\xbc\xcd\xcd\xe9\xdad\u007f+]7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4/P\x80\xb8?~-\xc0\xa1\xdd\x11\xb0\x92\xad\x04+\xffx\x8fL\x89\xb4\xf8\xfby#\x1d+\x80\x00\u07d4/a\uf941\x9dp_+\x1eN\xe7T\xae\xb8\xa8\x19Pju\x89O%\x91\xf8\x96\xa6P\x00\x00\xe0\x94/f\xbf\xbf\"b\xef\u030d+\xd0DO\u0170ib\x98\xff\x1e\x8a\x02\x1a\xd95\xf7\x9fv\xd0\x00\x00\u07d4/m\xce\x130\u015e\xf9!`!TW-MK\xac\xbd\x04\x8a\x8965\u026d\xc5\u07a0\x00\x00\u07d4/}2\x90\x85\x1b\xe5\u01b4\xb4?}Et2\x9fa\xa7\x92\u00c9\x05k\xc7^-c\x10\x00\x00\u07d4/\x858\x17\xaf\u04f8\xf3\xb8n\x9f`\xeew\xb5\xd9ws\xc0\xe3\x89N\xae\xeaD\xe3h\xb9\x00\x00\u07d4/\xa4\x91\xfbY \xa6WN\xbd(\x9f9\xc1\xb2C\r-\x9aj\x89lk\x93[\x8b\xbd@\x00\x00\u07d4/\xb5f\xc9K\xbb\xa4\xe3\xcbg\xcd\xda}_\xadq1S\x91\x02\x89lk\x93[\x8b\xbd@\x00\x00\u07d4/\xbbPJ]\xc5'\xd3\xe3\xeb\x00\x85\xe2\xfc<}\xd58\xcbz\x89C\u00b1\x8a\xec<\n\x80\x00\u07d4/\xbc\x85y\x8aX5\x98\xb5\"\x16mn\x9d\xda\x12\x1db}\xbc\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4/\xbc\xef3\x84\xd4 \xe4\xbfa\xa0f\x99\x90\xbcpT\U00065bc9lk\x93[\x8b\xbd@\x00\x00\xe0\x94/\xc8.\xf0v\x93#A&Oaz\f\x80\xddW\x1ej\xe99\x8a\x01\x84$\xf5\xf0\xb1\xb4\xe0\x00\x00\u07d4/\u075by\u07cd\xf50\xadc\xc2\x0eb\xafC\x1a\xe9\x92\x16\xb8\x89\x01#n\xfc\xbc\xbb4\x00\x00\u07d4/\xe0\x02?W\"e\x0f:\x8a\xc0\x10\t\x12^t\xe3\xf8.\x9b\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4/\xe0\xccBKS\xa3\x1f\t\x16\xbe\b\xec\x81\xc5\v\xf8\xea\xb0\xc1\x89 \x86\xac5\x10R`\x00\x00\u07d4/\xe1:\x8d\a\x85\u0787X\xa5\xe4\x18v\xc3n\x91l\xf7Pt\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4/\xea\x1b/\x83O\x02\xfcT3?\x8a\x80\x9f\x048\xe5\x87\n\xa9\x89\x01\x18T\xd0\xf9\xce\xe4\x00\x00\u07d4/\xee6\xa4\x9e\xe5\x0e\xcfqo\x10G\x91VFw\x9f\x8b\xa0?\x899B\"\xc4\u0686\xd7\x00\x00\u07d4/\xef\x81G\x8aK.\x80\x98\xdb_\xf3\x87\xba!S\xf4\xe2+y\x896'\xe8\xf7\x127<\x00\x00\u07d4/\xf1`\xc4Or\xa2\x99\xb5\xec-q\xe2\x8c\xe5Dm/\u02ef\x89\x13\x84\x00\xec\xa3d\xa0\x00\x00\u07d4/\xf1\xcaU\xfd\x9c\xec\x1b\x1f\xe9\U00029af7LQ<\x1e*\xaa\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94/\xf5\u02b1,\r\x95\u007f\xd33\xf3\x82\xee\xb7Q\a\xa6L\xb8\xe8\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94/\xf80\xcfU\xfb\x00\u0560\xe05\x14\xfe\xcdD1K\xd6\xd9\xf1\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4/\xfe\x93\xec\x1aV6\xe9\xee4\xafp\xdf\xf5&\x82\xe6\xffpy\x89lk\x93[\x8b\xbd@\x00\x00\u07d40\x03y\x88p&q\xac\xbe\x89,\x03\xfeW\x88\xaa\x98\xaf(z\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d40$\x8dX\xe4\x14\xb2\x0f\xed:lH+Y\xd9\xd8\xf5\xa4\xb7\xe2\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4019\xbcYd\x03\xd5\u04d3\x1fwLf\u013aFtT\u06c9\\%\xe1J\xea(?\x00\x00\u079408\x00\x87xie\x14\x9e\x81B;\x15\xe3\x13\xba2\xc5\u01c3\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d40:0\xacB\x86\xae\x17\xcfH=\xad{\x87\fk\xd6M{J\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d40?\xba\xeb\xbeF\xb3[n[t\x94j_\x99\xbc\x15\x85\xca\xe7\x89/\x9a\xc0i_[\xba\x00\x00\u07d40ADZ3\xba\x15\x87A\x16\r\x9c4N\xb8\x8e\\0o\x94\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d40H\x01d\xbc\xd8It\xeb\xc0\xd9\f\x9b\x9a\xfa\xb6&\xcd\x1cs\x89+^:\xf1k\x18\x80\x00\x00\u07d40N\u019atTW!\xd71j\xefM\u03f4\x1a\u015e\xe2\xf0\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x940Q\x182\x91\x8d\x804\xa7\xbe\xe7.\xf2\xbf\xeeD\x0e\u02fc\xf6\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d40Q?\u029f6\xfdx\x8c\xfe\xa7\xa3@\xe8m\xf9\x82\x94\xa2D\x89\x18;_\x03\xb1G\x9c\x00\x00\u07d40U\xef\xd2`)\xe0\xd1\x1b\x93\r\xf4\xf5;\x16,\x8c?\xd2\u0389\x1b\x1a\b\x927\a=\x00\x00\u07d40]&\xc1\v\xdc\x10?k\x9c!'.\xb7\xcb-\x91\b\xc4~\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d40_x\xd6\x18\xb9\x90\xb4)[\xac\x8a-\xfa&(\x84\xf8\x04\xea\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x940d\x89\x9a\x96\x1a>\x1d\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d40\x98\xb6]\xb9>\xca\xca\xf75\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d40\uc4d2$J!\b\u0247\xbc\\\xdd\xe0\ud7c3z\x81{\x89T\x99%\xf6\xc9\xc5%\x00\x00\xe0\x940\xed\x11\xb7{\xc1~^f\x94\u023c[nG\x98\xf6\x8d\x9c\xa7\x8a\x1eo\xb3B\x1f\xe0)\x9e\x00\x00\u07d40\xf7\xd0%\xd1o{\xee\x10U\x80Ho\x9fV\x1c{\xae?\xef\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x940\xfb\xe5\x88_\x9f\xcc\xe9\xea^\u06c2\xedJ\x11\x96\xdd%\x9a\xed\x8a\x01\x19\xe4\u007f!8\x1f@\x00\x00\u07d41\x04}p?c\xb94$\xfb\xbdn/\x1f\x9et\xde\x13\xe7\t\x89\x9a\x81f\xf7\u6ca7\x80\x00\u07d411?\xfdc[\xf2\xf32HA\xa8\x8c\a\xed\x14aD\xce\xeb\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d41Y\xe9\fH\xa9\x15\x90J\xdf\u24b2/\xa5\xfd^ryk\x896\xaf\xe9\x8f&\x06\x10\x00\x00\u07d41]\xb7C\x9f\xa1\u0574#\xaf\xa7\xddq\x98\xc1\xcft\xc9\x18\xbc\x89 \x86\xac5\x10R`\x00\x00\u07d41^\xf2\xdab\x0f\xd30\xd1.\xe5]\xe5\xf3)\xa6\x96\xe0\xa9h\x89\b!\xab\rD\x14\x98\x00\x00\u07d41n\x92\xa9\x1b\xbd\xa6\x8b\x9e/\x98\xb3\xc0H\x93N<\xc0\xb4\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d41n\xb4\xe4}\xf7\x1bB\xe1mo\xe4h%\xb72{\xaf1$\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d41q\x87~\x9d\x82\f\xc6\x18\xfc\t\x19\xb2\x9e\xfd3?\xdaI4\x8965\u026d\xc5\u07a0\x00\x00\u07d41|\xf4\xa2<\xb1\x91\xcd\xc5c\x12\u009d\x15\xe2\x10\xb3\xb9\xb7\x84\x89\a\xcef\xc5\x0e(@\x00\x00\u07d41\x8b.\xa5\xf0\xaa\xa8y\xc4\xd5\xe5H\xac\x9d\x92\xa0\xc6t\x87\xb7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d41\x8cv\xec\xfd\x8a\xf6\x8dpUSR\xe1\xf6\x01\xe3Y\x88\x04-\x89\x1b1\x19.h\xc7\xf0\x00\x00\u07d41\x8f\x1f\x8b\xd2 \xb0U\x8b\x95\xfb3\x10\x0f\xfd\xbbd\r|\xa6\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d41\xaa;\x1e\xbe\x8cM\xbc\xb6\xa7\b\xb1\xd7H1\xe6\x0eIv`\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d41\xab\b\x89f\xec\xc7\"\x92X\xf6\t\x8f\xceh\xcf9\xb3\x84\x85\x8965\u026d\xc5\u07a0\x00\x00\xe0\x941\xadM\x99F\xef\t\xd8\xe9\x88\xd9F\xb1\"\u007f\x91A\x90\x176\x8a\x04\xd8S\xc8\xf8\x90\x89\x80\x00\x00\xe0\x941\xb4;\x01]\x00\x81d~h\x00\x00\u07d424\x86\xcad\xb3uGO\xb2\xb7Y\xa9\xe7\xa15\x85\x9b\xd9\xf6\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d427I\xa3\xb9q\x95\x9eF\u0234\x82-\xca\xfa\xf7\xaa\xf9\xbdn\x89\x01\x16q\xa5\xb2Ep\x00\x00\u07d42:\xadA\xdfKo\xc8\xfe\u038c\x93\x95\x8a\xa9\x01\xfah\bC\x894\x95tD\xb8@\xe8\x00\x00\xe0\x942;<\xfe>\xe6+\xbd\xe2\xa2a\xe5<\xb3\xec\xc0X\x10\xf2\u018a\x02\ub3b1\xa1r\u0738\x00\x00\u07d42?\xca^\xd7\u007fi\x9f\x9d\x990\xf5\xce\xef\xf8\xe5oY\xf0<\x89Hz\x9a0E9D\x00\x00\u07d42H\\\x81\x87(\xc1\x97\xfe\xa4\x87\xfb\xb6\xe8)\x15\x9e\xba\x83p\x899!\xb4\x13\xbcN\xc0\x80\x00\xe0\x942P\xe3\xe8X\xc2j\xde\u032d\xf3jVc\xc2*\xa8LAp\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x942Y\xbd/\xdd\xfb\xbco\xba\u04f6\xe8t\xf0\xbb\xc0,\xda\x18\xb5\x8a\x02\x84`VI[\r\x18\x80\x00\u07d42uIo\xd4\u07491\xfdi\xfb\n\v\x04\xc4\xd1\xff\x87\x9e\xf5\x89\x18-~L\xfd\xa08\x00\x00\u07d42{\xb4\x9euOo\xb4\xf73\xc6\xe0o9\x89\xb4\xf6]K\xee\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d42\x82y\x1do\xd7\x13\xf1\xe9OK\xfdV^\xaax\xb3\xa0Y\x9d\x89Hz\x9a0E9D\x00\x00\u07d42\x83\xeb\u007f\x917\xdd9\xbe\xd5_\xfek\x8d\xc8E\xf3\xe1\xa0y\x89\x03\x97\n\xe9!Ux\x00\x00\u07d42\x86\t\x97\xd70\xb2\xd8;s$\x1a%\xd3f}Q\xc9\b\xef\x89\x1b\x1a\b\x927\a=\x00\x00\xe0\x942\x86\u047cez1,\x88G\xd9<\xb3\xcbyP\xf2\xb0\xc6\xe3\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x942\xa2\r\x02\x8e,b\x18\xb9\xd9[D\\w\x15$cj\"\xef\x8a\x02\x02\xfe\xfb\xf2\xd7\xc2\xf0\x00\x00\u07d42\xa7\x06\x91%\\\x9f\xc9y\x1aOu\u0238\x1f8\x8e\n%\x03\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d42\xb7\xfe\xeb\xc5\u015b\xf6^\x86\x1cL\v\xe4*v\x11\xa5T\x1a\x89w\u9aa8R\\\x10\x00\x00\xe0\x942\xba\x9a}\x04#\xe0:R_\xe2\xeb\xebf\x1d \x85w\x8b\u060a\x04<3\xc1\x93ud\x80\x00\x00\u07d42\xbb.\x96\x93\xe4\xe0\x854M/\r\xbdF\xa2\x83\u3807\xfd\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x942\xc2\xfd\u2daa\xbb\x80\u5ba2\xb9I\xa2\x17\xf3\xcb\t\"\x83\x8a\x010a`\xaf\xdf 7\x80\x00\u07d42\xd9P\xd5\xe9>\xa1\u0574\x8d\xb4qO\x86{\x03 \xb3\x1c\x0f\x897\b\xba\xed=h\x90\x00\x00\u07d42\u06f6qlT\xe81e\x82\x9aJ\xbb6uxI\xb6\xe4}\x8965\u026d\xc5\u07a0\x00\x00\u07d42\xebd\xbe\x1b]\xed\xe4\b\u01bd\xef\xben@\\\x16\xb7\xed\x02\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d42\xef\\\xdcg\x1d\xf5V*\x90\x1a\xee]\xb7\x16\xb9\xbev\xdc\xf6\x89lk\x93[\x8b\xbd@\x00\x00\u07d42\xf2\x9e\x87'\xa7LkC\x01\xe3\xff\xff\x06\x87\xc1\xb8p\xda\xe9\x8965\u026d\xc5\u07a0\x00\x00\u07d42\xfa\x0e\x86\xcd\b}\u058di1\x90\xf3-\x931\t\t\xedS\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d42\xfb\xee\xd6\xf6&\xfc\xdf\xd5\x1a\xca\xfbs\v\x9e\xef\xf6\x12\xf5d\x89lk\x93[\x8b\xbd@\x00\x00\u07943\x00\xfb\x14\x9a\xde\xd6[\u02e6\xc0N\x9c\u05b7\xa0;\x89;\xb1\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x943\x01\xd9\xca/;\xfe\x02by\xcdh\x19\xf7\x9a)=\x98\x15n\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\xe0\x943\b\xb04f\xc2z\x17\xdf\xe1\xaa\xfc\xeb\x81\xe1m)4Vo\x8a\x03\x99\x92d\x8a#\u0220\x00\x00\u07943\x1a\x1c&\xcci\x94\xcd\xd3\xc1K\xec\xe2v\xff\xffK\x9d\xf7|\x88\xfaz\xed\xdfO\x06\x80\x00\xe0\x943&\xb8\x8d\xe8\x06\x18DT\xc4\v'\xf3\t\xd9\xddm\u03f9x\x8a\x03\xca\\f\u067cD0\x00\x00\xe0\x943)\xeb;\xafCE\xd6\x00\xce\xd4\x0en\x99ueo\x117B\x8a\x01\x0f\b\xed\xa8\xe5U\t\x80\x00\u07d432\r\xd9\x0f+\xaa\x11\r\xd34\x87*\x99\x8f\x14\x84&E<\x8965f3\xeb\xd8\xea\x00\x00\u07d436\xc3\xefn\x8bP\xee\x90\xe07\xb1d\xb7\xa8\xea_\xaa\xc6]\x89\x0e\u0223\xa7\x1c\"T\x00\x00\xe0\x9438\fo\xffZ\xcd&Q0\x96)\u06daq\xbf? \u017a\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d43:\xd1Yd\x01\xe0Z\xea-6\xcaG1\x8e\xf4\xcd,\xb3\u07c9\x9d\xc0\\\xce(\u00b8\x00\x00\u07d43C@\xeeK\x9c\u0701\xf8P\xa7Q\x16\xd5\x0e\u9d98%\xbf\x89lk\x93[\x8b\xbd@\x00\x00\u07d43H\x1e\x85n\xbe\u050e\xa7\b\xa2t&\xef(\xe8g\xf5|\u0449\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x943V[\xa9\xda,\x03\xe7x\xce\x12)O\b\x1d\xfe\x81\x06M$\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07943X\x1c\xee#0\x88\xc0\x86\r\x94N\f\xf1\u03ab\xb8&\x1c.\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d43XX\xf7I\xf1i\u02bc\xfeR\xb7\x96\xe3\xc1\x1e\xc4~\xa3\u0089\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x943^\"\x02[zw\u00e0t\u01cb\x8e=\xfe\a\x13A\x94n\x8a\x02'\xcas\n\xb3\xf6\xac\x00\x00\u07d43b\x9b\xd5/\x0e\x10{\xc0q\x17ld\xdf\x10\x8fdw}I\x89\x01\xcf\xddth!n\x80\x00\u07d43{;\u07c6\xd7\x13\xdb\xd0{]\xbf\xcc\x02+z{\x19F\xae\x89\xd7\xc1\x98q\x0ef\xb0\x00\x00\u07d43|\xfe\x11W\xa5\u0191 \x10\xddV\x153y\x17i\u00b6\xa6\x8965\u026d\xc5\u07a0\x00\x00\u07d43\xb36\xf5\xba^\xdb{\x1c\xcc~\xb1\xa0\u0644\xc1#\x1d\x0e\u0709lk\x93[\x8b\xbd@\x00\x00\u07d43\xc4\a\x13;\x84\xb3\xcaL=\xed\x1fFX\x90\f8\x10\x16$\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\xe0\x943\xd1r\xab\a\\Q\xdb\x1c\xd4\n\x8c\xa8\xdb\xff\r\x93\xb8C\xbb\x8a\x016x\x05\x10\xd1-\xe3\x80\x00\u07d43\xe9\xb7\x18#\x95.\x1ff\x95\x8c'\x8f\u008b\x11\x96\xa6\u0164\x89\x05k\xc7^-c\x10\x00\x00\u07d43\xeakxU\xe0[\a\xab\x80\u06b1\xe1M\xe9\xb6I\xe9\x9bl\x89\x1c\xd6\xfb\xadW\xdb\xd0\x00\x00\u07d43\xf1R#1\rD\u078bf6h_:L=\x9cVU\xa5\x89\r\x94b\xc6\xcbKZ\x00\x00\u07d43\xf4\xa6G\x1e\xb1\xbc\xa6\xa9\xf8[;Hr\xe1\aU\xc8+\xe1\x89lk\x93[\x8b\xbd@\x00\x00\u07d43\xfbWzM!O\xe0\x10\xd3,\xca|>\xed\xa6?\x87\xce\xef\x8965\u026d\xc5\u07a0\x00\x00\u07d43\xfdq\x8f\v\x91\xb5\xce\u020a]\xc1^\xec\xf0\xec\xef\xa4\xef=\x89\x17r$\xaa\x84Lr\x00\x00\u07d44\x14\x80\u030c\xb4v\xf8\xd0\x1f\xf3\b\x12\xe7\xc7\x0e\x05\xaf\xaf]\x89lk\x93[\x8b\xbd@\x00\x00\u07d44'-^ut1]\xca\u9afd1{\xac\x90(\x9dGe\x89b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x9440\xa1c\x81\xf8i\xf6\xeaT#\x91XU\xe8\x00\x885%\xa9\x8a\x03\xca\\f\u067cD0\x00\x00\u07d441\x86%\x81\x8e\xc1?\x11\x83Z\xe9sS\xce7}oY\n\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d449<]\x91\xb9\xdeYr\x03\xe7[\xacC\t\xb5\xfa=(\u00c9\n\x84Jt$\xd9\xc8\x00\x00\u07d449\x99\x8b$|\xb4\xbf\x8b\xc8\nm+5'\xf1\xdf\xe9\xa6\u0489\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d44C}\x14ed\v\x13l\xb5\x84\x1c?\x93O\x9b\xa0\xb7\t}\x89\t`\xdbwh\x1e\x94\x00\x00\u07d44J\x8d\xb0\x86\xfa\xedN\xfc7\x13\x1b:\"\xb0x-\xadp\x95\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x944fM\"\x0f\xa7\xf3yX\x02J32\u0584\xbc\xc6\xd4\u023d\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d44f\xf6~9cl\x01\xf4;:!\xa0\xe8R\x93%\xc0\x86$\x89-\xb1\x16vP\xac\xd8\x00\x00\u07d44\x856\x1e\xe6\xbf\x06\xefe\b\xcc\xd2=\x94d\x1f\x81M>/\x89lk\x93[\x8b\xbd@\x00\x00\u07d44\x85\xf6!%d3\xb9\x8aB\x00\xda\xd8W\xef\xe5Y7\uc609lk\x93[\x8b\xbd@\x00\x00\u07d44\x95\x8aF\xd3\x0e0\xb2s\xec\xc6\xe5\xd3X\xa2\x12\xe50~\x8c\x89lk\x93[\x8b\xbd@\x00\x00\u07d44\x97\xddf\xfd\x11\x80q\xa7\x8c,\xb3n@\xb6e\x1c\xc8%\x98\x89\x05\xf1\x01kPv\xd0\x00\x00\xe0\x944\x9a\x81k\x17\xab='\xbb\xc0\xae\x00Q\xf6\xa0p\xbe\x1f\xf2\x9d\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d44\x9d,\x91\x8f\u041e(\a1\x8ef\xceC)\t\x17k\xd5\v\x89<\xb7\x1fQ\xfcU\x80\x00\x00\u07d44\xa0C\x1f\xff^\xad\x92\u007f\xb6`\f\x1e\xa8\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d44\xff&\xeb`\xa8\u0469ZH\x9f\xae\x13n\xe9\x1dNX\bL\x89 \x86\xac5\x10R`\x00\x00\u07d44\xffX)R\xff$E\x8f{\x13\xd5\x1f\vO\x98p\"\xc1\xfe\x89\x98\x06\xde=\xa6\xe9x\x00\x00\u07d45\x10k\xa9N\x85c\u0533\xcb<\\i,\x10\xe6\x04\xb7\xce\u0609lk\x93[\x8b\xbd@\x00\x00\xe0\x945\x14_b\x03\x97\u019c\xb8\xe0\tb\x96\x1f\x0fH\x86d9\x89\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d45\x14t0\xc3\x10e\x00\u77e2\xf5\x02F.\x94p<#\xb1\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x945\x17\x87\x845\x05\xf8\xe4\xef\xf4ef\xcc\u695fM\x1c_\xe7\x8a\x01\xf5q\x89\x87fKH\x00\x00\xe0\x945\x1f\x16\xe5\xe0sZ\xf5gQ\xb0\xe2%\xb2B\x11q9@\x90\x8a\x02\xd4\xca\x05\xe2\xb4<\xa8\x00\x00\xe0\x945$\xa0\x00#N\xba\xaf\a\x89\xa14\xa2\xa4\x178<\xe5(*\x8a\x011yU\x94}\x8e,\x00\x00\u07d45&\xee\xce\x1ak\xdc>\xe7\xb4\x00\xfe\x93[HF?1\xbe\u05c9\x04w\x87\x9bm\x140\x00\x00\u07d45*x_J\x92\x162PL\xe5\xd0\x15\xf8\xd7FO\xa3\xdb\x14\xe7r\x92\x13\u03aa7\x8c\t^\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d45\xaf\x04\n\f\xc23zv\xaf(\x81T\xc7V\x1e\x1a#3I\x8965\u026d\xc5\u07a0\x00\x00\u07d45\xb0>\xa4$W6\xf5{\x85\xd2\xebyb\x8f\x03m\xdc\xd7\x05\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d45\xbd$he\xfa\xb4\x90\xac\bz\xc1\xf1\xd4\xf2\xc1\r\f\xda\x03\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x945\xbff\x88R/5Fz\u007fu0#\x14\xc0+\xa1v\x80\x0e\x8a\x03\xafA\x82\x02\xd9T\xe0\x00\x00\u07d45\u022d\xc1\x11%C+;w\xac\xd6F%\xfeX\xeb\xee\x9df\x89lk\x93[\x8b\xbd@\x00\x00\u07d45\u0497\x0fI\xdc\xc8\x1e\xa9\xeep~\x9c\x8a\n\xb2\xa8\xbbtc\x89N\x10\x03\xb2\x8d\x92\x80\x00\x00\u07d45\xe0\x96\x12\r\xea\xa5\xc1\xec\xb1d^,\u02cbN\xdb\xd9)\x9a\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d45\xea!c\xa3\x8c\u07da\x12?\x82\xa5\xec\x00%\x8d\xae\v\xc7g\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d45\xf1\xda\x12{\x837o\x1b\x88\xc8*3Y\xf6z^g\xddP\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d45\xf2\x94\x9c\xf7\x8b\xc2\x19\xbbO\x01\x90|\xf3\xb4\xb3\u04c6T\x82\x89\x0f\xb5\xc8l\x92\xe44\x00\x00\u07d45\xf5\x86\x01I\xe4\xbb\xc0K\x8a\u0172r\xbeU\xad\x1a\xcaX\xe0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d46\x02E\x8d\xa8omj\x9d\x9e\xb0=\xaf\x97\xfeV\x19\xd4B\xfa\x89lk\x93[\x8b\xbd@\x00\x00\u07d46\x057-\x93\xa9\x01\t\x88\x01\x8f\x9f1]\x03.\u0448\x0f\xa1\x89\x1b\x1b\xcfQ\x89j}\x00\x00\u07d46\x16\xd4H\x98_]2\xae\xfa\x8b\x93\xa9\x93\xe0\x94\xbd\x85I\x86\x89\v\"\u007fc\xbe\x81<\x00\x00\u07d46\x16\xfbF\xc8\x15x\xc9\xc8\xebM;\xf8\x80E\x1a\x887\x9d}\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d46\x1cu\x93\x16\x96\xbc=B}\x93\xe7lw\xfd\x13\xb2A\xf6\xf4\x89\x1d\xc5\xd8\xfc&m\xd6\x00\x00\u07d46\x1d\x9e\xd8\v[\xd2|\xf9\xf1\"o&u2X\xee_\x9b?\x89\xbfi\x14\xba}r\xc2\x00\x00\u07d46\x1f;\xa9\xed\x95kw\x0f%}6r\xfe\x1f\xf9\xf7\xb0$\f\x89 \x86\xac5\x10R`\x00\x00\u07d46\"|\u07e0\xfd;\x9d~jtF\x85\xf5\xbe\x9a\xa3f\xa7\xf0\x89\n\xc2s\x0e\xe9\xc6\xc1\x80\x00\u07d46/\xbc\xb1\x06b7\n\x06\x8f\xc2e&\x02\xa2Wy7\xcc\xe6\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d460\xc5\xe5e\u03aa\x8a\x0f\x0f\xfe2\x87^\xae*l\xe6<\x19\x89\t7r+7t\xd0\x00\x00\u07d463\x9f\x84\xa5\u00b4L\xe5=\xfd\xb6\xd4\xf9}\xf7\x82\x12\xa7\u07c9\x11o\x18\xb8\x17\x15\xa0\x00\x00\u07d464:\xec\xa0{n\u054a\x0eb\xfaN\xcbI\x8a\x12O\xc9q\x89\x10CV\x1a\x88)0\x00\x00\u07d46au@4\x81\xe0\xab\x15\xbbQF\x15\u02f9\x89\xeb\u018f\x82\x89lk\x93[\x8b\xbd@\x00\x00\u07d46ro;\x88Z$\xf9)\x96\u0681b^\u022d\x16\xd8\xcb\xe6\x89S\xafu\u0441HW\x80\x00\xe0\x946s\x95C\x99\xf6\u07feg\x18\x18%\x9b\xb2x\xe2\xe9.\xe3\x15\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d46u\x8e\x04\x9c\u064b\u03a1\"w\xa6v\xf9)sb\x89\x00#\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d46\u007fY\u0302yS)8NA\xe1(1\x15\xe7\x91\xf2j\x01\x89lk\x93[\x8b\xbd@\x00\x00\u07d46\x81\x0f\xf9\xd2\x13\xa2q\xed\xa2\xb8\xaay\x8b\xe6T\xfaK\xbe\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d46\x8cT\x14\xb5k\x84U\x17\x1f\xbf\ab \xc1\u02e4\xb5\xca1\x89\x1e>\xf9\x11\xe8=r\x00\x00\xe0\x946\x90$k\xa3\xc8\x06y\xe2.\xacD\x12\xa1\xae\xfc\xe6\xd7\u0342\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d46\x92\x8bU\xbc\x86\x15\t\xd5\x1c\x8c\xf1\xd5F\xbf\xecn>\x90\xaf\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d46\x98\"\xf5W\x8b@\xdd\x1fDqpk\"\u0357\x13R\xdak\x89\x12\xc1\xb6\xee\xd0=(\x00\x00\u07d46\x9e\xf7a\x19_:7>$\xec\xe6\xcd\"R\x0f\xe0\xb9\xe8n\x89\x1c\xff\xaf\xc9M\xb2\b\x80\x00\u07d46\xa0\x8f\xd6\xfd\x1a\xc1|\xe1^\xd5~\xef\xb1*+\u2048\xbf\x89Hz\x9a0E9D\x00\x00\u07d46\xa0\xe6\x1e\x1b\xe4\u007f\xa8~0\xd3(\x88\xee\x030\x90\x1c\xa9\x91\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x946\xb2\xc8^:\xee\xeb\xb7\rc\u0124s\f\xe2\xe8\xe8\x8a6$\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x946\xbfC\xff5\u07d0\x90\x88$3l\x9b1\xce3\x06~/P\x8aIr\x15\x10\xc1\xc1\xe9H\x00\x00\u07d46\xbf\xe1\xfa;{p\xc1r\xeb\x04/h\x19\xa8\x97%\x95A>\x8965\u026d\xc5\u07a0\x00\x00\xe0\x946\xc5\x10\xbf\x8dnV\x9b\xf2\xf3}G&]\xbc\xb5\x02\xff+\u038a\x06ZM\xa2]0\x16\xc0\x00\x00\xe0\x946\xd8]\xc3h1V\xe6;\xf8\x80\xa9\xfa\xb7x\x8c\xf8\x14:'\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d46\u07cf\x88<\x12s\xec\x8a\x17\x1fz3\xcf\xd6I\xb1\xfe`u\x89\fRHJ\xc4\x16\x89\x00\x00\xe0\x946\xe1Va\f\xd8\xffd\xe7\x80\u061d\x00T8\\\xa7gU\xaa\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d46\xfe\xc6,,B^!\x9b\x18D\x8a\xd7W\x00\x9d\x8cT\x02o\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d47\x00\xe3\x02t$\xd99\xdb\xde]B\xfbx\xf6\xc4\xdb\xec\x1a\x8f\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d47\x02\xe7\x04\xcc!at9\xadN\xa2zW\x14\xf2\xfd\xa1\xe92\x8965\u026d\xc5\u07a0\x00\x00\u07d47\x035\fMo\xe374,\xdd\xc6[\xf1\xe28k\xf3\xf9\xb2\x89m\x81!\xa1\x94\xd1\x10\x00\x00\xe0\x947\b\xe5\x9d\xe6\xb4\x05P\x88x)\x02\xe0W\x9cr\x01\xa8\xbfP\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d47\x126~^U\xa9mZ\x19\x16\x8fn\xb2\xbc~\x99q\xf8i\x8965\u026d\xc5\u07a0\x00\x00\u07d47\x19Zc]\xccb\xf5jq\x80I\xd4~\x8f\x9f\x96\x83(\x91\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d47'4\x1f&\xc1 \x01\xe3x@^\xe3\x8b-\x84d\xecq@\x89lk\x93[\x8b\xbd@\x00\x00\u07d47.E:kb\x9f'g\x8c\u022e\xb5\xe5|\xe8^\xc0\xae\xf9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d474\xcb\x18t\x91\xed\xe7\x13\xae[;-\x12(J\xf4k\x81\x01\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d477!n\xe9\x1f\x17w2\xfbX\xfa@\x97&r\a\xe2\xcfU\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d47M;\xbb\x057Q\xf9\xf6\x8d\xdb\a\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d48r\xf4\x8d\xc5\xe3\xf8\x17\xbck*\xd2\xd00\xfc^\x04q\x19=\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d48~\xea\xfdk@\t\u07af\x8b\u0578Zr\x98:\x8d\xcc4\x87\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d48\x81\xde\xfa\xe1\xc0{<\xe0Lx\xab\xe2k\f\u070ds\xf0\x10\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d48\x83\xbe\xcc\b\xb9\xbeh\xad;\b6\xaa\u00f6 \xdc\x00\x17\xef\x89lk\x93[\x8b\xbd@\x00\x00\u07d48\x85\xfe\xe6q\a\xdc:\xa9\x8a\x1d\x99:t\xdf\\\xd7T\xb9\x8dR\x9a\x89a\t=|,m8\x00\x00\u07d48\xe4m\xe4E<8\xe9A\xe7\x93\x0fC0O\x94\xbb{+\xe8\x89l\xb7\xe7Hg\xd5\xe6\x00\x00\u07d48\xe7\u06e8\xfdO\x1f\x85\r\xbc&I\xd8\xe8O\tR\xe3\xeb<\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d48\xe8\xa3\x1a\xf2\xd2e\xe3\x1a\x9f\xff-\x8fF(m\x12E\xa4g\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d48\xeao[Z{\x88AuQ\xb4\x12=\xc1'\xdf\xe94-\xa6\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d48\xee\xc6\xe2\x17\xf4\xd4\x1a\xa9 \xe4$\xb9RQ\x97\x04\x1c\xd4\u0189\xf0\r%\xeb\x92.g\x00\x00\xe0\x948\xf3\x87\xe1\xa4\xedJs\x10n\xf2\xb4b\xe4t\xe2\xe3\x14:\u040a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d49\x11a\xb0\xe4<0 f\u898d,\xe7\xe1\x99\xec\xdb\x1dW\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x949\x15\uad6b.Yw\xd0u\xde\xc4}\x96\xb6\x8bK\\\xf5\x15\x8a\r\a\x01\x81\x85\x12\x0f@\x00\x00\u07d49\x1aw@\\\t\xa7+^\x846#z\xaa\xf9]h\xda\x17\t\x89\x02\xa9&J\xf3\u0479\x00\x00\u07d49\x1f \x17m\x126\rrMQG\n\x90p6uYJM\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d49$3\xd2\u0383\xd3\xfbJv\x02\u0323\xfa\xcaN\xc1@\xa4\xb0\x89\x02\xc3\xc4e\xcaX\xec\x00\x00\xe0\x949?x;\\\u06c6\"\x1b\xf0)O\xb7\x14\x95\x9c{E\x89\x9c\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d49?\xf4%^\\e\x8f.\u007f\x10\xec\xbd)%rg\x1b\xc2\u0489lk\x93[\x8b\xbd@\x00\x00\u07d49A2`\x0fAU\xe0\u007fME\xbc>\xb8\xd9\xfbr\xdc\u05c4\x89\x9fn\x92\xed\xea\a\xd4\x00\x00\u07d49Q\xe4\x8e<\x86\x9ekr\xa1C\xb6\xa4Ph\u0379\xd4f\u0409\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x949T\xbd\xfe\v\xf5\x87\u0195\xa3\x05\xd9$L=[\xdd\xda\u027b\x8a\x04\x10'\x83'\xf9\x85`\x80\x00\u07d49]m%U \xa8\xdb)\xab\xc4}\x83\xa5\u06ca\x1a}\xf0\x87\x89\x05k\xc7^-c\x10\x00\x00\u07d49ck%\x81\x1b\x17j\xbf\xcf\xee\xcad\xbc\x87E/\x1f\xdf\xf4\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d49i\xb4\xf7\x1b\xb8u\x1e\xdeC\xc0\x166:zaOv\x11\x8e\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x949x/\xfe\x06\xacx\x82*<:\x8a\xfe0^P\xa5a\x88\u038a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d49zn\xf8v:\x18\xf0\x0f\xac!~\x05\\\r0\x94\x10\x10\x11\x89lk\x93[\x8b\xbd@\x00\x00\u07d49|\u06cc\x80\xc6yP\xb1\x8deB)a\x0e\x93\xbf\xa6\xee\x1a\x89?\x95\xc8\xe0\x82\x15!\x00\x00\u07d49\x82O\x8b\xce\xd1v\xfd>\xa2.\u01a4\x93\xd0\xcc\xc3?\xc1G\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d49\x93l'\x19E\v\x94 \xcc%\"\u03d1\xdb\x01\xf2'\xc1\xc1\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d49\x95\xe0\x96\xb0\x8aZrh\x00\xfc\xd1}\x9cd\xc6N\b\x8d+\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d49\x9a\xa6\xf5\xd0x\xcb\tp\x88+\u0259 \x06\xf8\xfb\xdf4q\x8965\u026d\xc5\u07a0\x00\x00\u07d49\xaa\x05\xe5m}28T!\u03d36\xe9\r=\x15\xa9\xf8Y\x89\x01h\u048e?\x00(\x00\x00\u07d49\xaa\xf0\x85M\xb6\xeb9\xbc{.C\x84jv\x17\x1c\x04E\u0789dI\xe8NG\xa8\xa8\x00\x00\u07d49\xb1\xc4q\xae\x94\xe1!dE.\x81\x1f\xbb\xe2\xb3\xcdru\xac\x89lk\x93[\x8b\xbd@\x00\x00\u07d49\xb2\x992t\x90\xd7/\x9a\x9e\xdf\xf1\x1b\x83\xaf\xd0\xe9\xd3\xc4P\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d49\xba\u018d\x94xY\xf5\x9e\x92&\b\x9c\x96\xd6.\x9f\xbe<\u0789\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x949\xbf\xd9xh\x9b\xec\x04\x8f\xc7v\xaa\x15$\u007f^\x1d|9\xa2\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d49\xc7s6|\x88%\xd3YlhoB\xbf\r\x141\x9e?\x84\x89\a?u\u0460\x85\xba\x00\x00\u07d49\u05291@,\fy\xc4W\x18o$\u07c7)\u03d5p1\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d49\xd6\xca\xca\"\xbc\xcdjr\xf8~\xe7\u05b5\x9e\v\xde!\xd7\x19\x89l\x87T\xc8\xf3\f\b\x00\x00\u07d49\xe0\xdbM`V\x8c\x80\v\x8cU\x00\x02l%\x94\xf5v\x89`\x8965\u026d\xc5\u07a0\x00\x00\xe0\x949\xeeO\xe0\x0f\xbc\xeddph\xd4\xf5|\x01\xcb\"\xa8\v\xcc\u044a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d49\xf1\x983\x1eK!\xc1\xb7`\xa3\x15_J\xb2\xfe\x00\xa7F\x19\x89lk\x93[\x8b\xbd@\x00\x00\u07d49\xf4Fc\xd9%a\t\x1b\x82\xa7\r\xcfY=u@\x05\x97:\x89\n\u05cb.\xdc!Y\x80\x00\u07d4:\x03U\x94\xc7GGmB\xd1\xee\x96l6\"L\xdd\"I\x93\x89\x13J\xf7Ei\xf9\xc5\x00\x00\u07d4:\x04W(G\xd3\x1e\x81\xf7v\\\xa5\xbf\xc9\xd5W\x15\x9f6\x83\x89\a6-\r\xab\xea\xfd\x80\x00\xe0\x94:\x06\xe3\xbb\x1e\xdc\xfd\fD\xc3\aM\xe0\xbb`k\x04\x98\x94\xa2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u0794:\x10\x88\x8b~\x14\x9c\xae',\x010,2}\n\xf0\x1a\v$\x88\xeb\xec!\xee\x1d\xa4\x00\x00\u07d4:1\b\xc1\u6023;3l!\x13\x134@\x9d\x97\xe5\xad\xec\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4:6\x8e\xfeJ\u05c6\xe2c\x95\xec\x9f\u01adi\x8c\xae)\xfe\x01\x89\"E\x89\x96u\xf9\xf4\x00\x00\u07d4:=\xd1\x04\xcd~\xb0O!\x93/\xd43\xeaz\xff\u04d3i\xf5\x89\x13aO#\xe2B&\x00\x00\u07d4:B\x97\xda\xc4.\x1eO\xb8\xcb1\xec\xddC\xaew<\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94:\x99`&m\xf6I cS\x8a\x99\xf4\x87\xc9P\xa3\xa5\uc78a\x05\x15\n\xe8J\x8c\xdf\x00\x00\x00\u07d4:\x9b\x11\x10)\xce\x1f \xc9\x10\x9czt\xee\xee\xf3OO.\xb2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4:\x9eTA\xd4K$;\xe5[u\x02z\x1c\ub7ac\xf5\r\xf2\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94:\xa0z4\xa1\xaf\u0216}=\x13\x83\xb9kb\u03d6\xd5\xfa\x90\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94:\xa4,!\xb9\xb3\x1c>'\xcc\xd1~\t\x9a\xf6y\xcd\xf5i\a\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4:\xa9H\xea\x029wU\xef\xfb/\x9d\xc99-\xf1\x05\x8f~3\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\u07d4:\xad\xf9\x8ba\xe5\u0216\xe7\xd1\x00\xa39\x1d2P\"]a\u07c9\f\xafg\x007\x01h\x00\x00\u07d4:\xaeHr\xfd\x90\x93\xcb\xca\xd1@o\x1e\x80x\xba\xb5\x03Y\xe2\x89\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4:\xbb\x8a\xdf\xc6\x04\xf4\x8dY\x84\x81\x1d\u007f\x1dR\xfe\xf6u\x82p\x89\xf2\x97\x19\xb6o\x11\f\x00\x00\u07d4:\xc2\xf0\xff\x16\x12\xe4\xa1\xc3F\xd53\x82\xab\xf6\u0622[\xaaS\x89lk\x93[\x8b\xbd@\x00\x00\u07d4:\xc9\xdczCj\xe9\x8f\xd0\x1cz\x96!\xaa\x8e\x9d\v\x8bS\x1d\x89a\t=|,m8\x00\x00\xe0\x94:\xd0aI\xb2\x1cU\xff\x86|\xc3\xfb\x97@\u04bc\xc7\x10\x121\x8a)\xb7d2\xb9DQ \x00\x00\u07d4:\xd7\x02C\u060b\xf0@\x0fW\xc8\xc1\xfdW\x81\x18H\xaf\x16*\x89.\x9e\xe5\u00c6S\xf0\x00\x00\u07d4:\xd9\x15\xd5P\xb7#AV \xf5\xa9\xb5\xb8\x8a\x85\xf3\x82\xf05\x8965\u026d\xc5\u07a0\x00\x00\u07d4:\xe1`\xe3\xcd`\xae1\xb9\xd6t-h\xe1Nv\xbd\x96\xc5\x17\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4:\xe6+\xd2q\xa7`c\u007f\xady\xc3\x1c\x94\xffb\xb4\xcd\x12\xf7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4:\xeaN\x82\xd2@\x02H\xf9\x98q\xa4\x1c\xa2W\x06\r:\"\x1b\x8965\u026d\xc5\u07a0\x00\x00\u07d4:\xf6[>(\x89ZJ\x00\x11S9\x1d\x1ei\xc3\x1f\xb9\xdb9\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4;\a\xdbZ5\u007fZ\xf2HL\xbc\x9dw\xd7;\x1f\xd0Q\x9f\u01c9\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4;\n\u032fK`|\xfea\xd1s4\xc2\x14\xb7\\\xde\xfd\xbd\x89\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;\x13c\x1a\x1b\x89\xcbVeH\x89\x9a\x1d`\x91\\\xdc\xc4 [\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;\x15\x90\x99\aR\a\u0180vc\xb1\xf0\xf7\xed\xa5J\xc8\xcc\xe3\x89j\xc4\xe6[i\xf9-\x80\x00\u07d4;\x197\xd5\u74f8\x9bc\xfb\x8e\xb5\xf1\xb1\xc9\xcak\xa0\xfa\x8e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;\"\xda*\x02q\xc8\xef\xe1\x02S'scji\xb1\xc1~\t\x89\x1b6\xa6DJ>\x18\x00\x00\u07d4;\"\u07a3\xc2_\x1bY\u01fd'\xbb\x91\u04e3\xea\xec\xef9\x84\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94;#g\xf8IK_\xe1\x8dh<\x05]\x89\x99\x9c\x9f=\x1b4\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4;,E\x99\x0e!GDQ\xcfOY\xf0\x19U\xb31\xc7\xd7\u0249lk\x93[\x8b\xbd@\x00\x00\xe0\x94;A\x00\xe3\ns\xb0\xc74\xb1\x8f\xfa\x84&\u045b\x191/\x1a\x8a\v\xb5\u046ap\n\xfd\x90\x00\x00\u07d4;B\xa6m\x97\x9fX(4tz\x8b`B\x8e\x9bN\xec\xcd#\x89!\xa1\u01d0\xfa\xdcX\x00\x00\u07d4;Gh\xfdq\xe2\xdb,\xbe\u007f\xa0PH<'\xb4\xeb\x93\x1d\xf3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;Vj\x8a\xfa\u0456\x82\xdc,\xe8g\x9a<\xe4D\xa5\xb0\xfdO\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94;\\%\x1d\u007f\u05c9;\xa2\t\xfeT\x1c\xec\xd0\xce%:\x99\r\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4;^\x8b\x17w\xca\x18A\x896\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94;\x93\xb1a6\xf1\x1e\xaf\x10\x99l\x95\x99\r;'9\xcc\xea_\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4;\xabK\x01\xa7\xc8K\xa1?\uea70\xbb\x19\x1bw\xa3\xaa\u0723\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4;\xb55\x98\xcc \xe2\x05]\xc5S\xb0I@J\u0277\xdd\x1e\x83\x89!W\x1d\xf7|\x00\xbe\x00\x00\u07d4;\xbc\x13\xd0J\xcc\xc0pz\xeb\u072e\xf0\x87\u0438~\v^\u327e\xd1\xd0&=\x9f\x00\x00\x00\u07d4;\xc6\xe3\xeezV\u038f\x14\xa3u2Y\x0fcqk\x99f\xe8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;\xc8]ls[\x9c\xdaK\xba_H\xb2K\x13\xe7\x0600{\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4;\xd6$\xb5H\xcbe\x976\x90~\u062a<\fp^$\xb5u\x89lk\x93[\x8b\xbd@\x00\x00\u07d4;\u0660m\x1b\xd3lN\xdd'\xfc\r\x1f[\b\x8d\xda\xe3\xc7*\x89\x1b\x1azB\v\xa0\r\x00\x00\u0794;\u077c\x814\xf7}UY\u007f\xc9|&\xd2f\x98\t\x06\x04\ub23e -j\x0e\xda\x00\x00\xe0\x94;\xf8n\u0623\x15>\xc93xj\x02\xac\t\x03\x01\x85^Wk\x8a_J\x8c\x83u\xd1U@\x00\x00\u07d4;\xfb\u04c4|\x17\xa6\x1c\xf3\xf1{R\xf8\ub879`\xb3\U000df262\xa1]\tQ\x9b\xe0\x00\x00\u07d4<\x03\xbb\xc0#\xe1\xe9?\xa3\xa3\xa6\xe4(\xcf\f\xd8\xf9^\x1e\u0189Rf<\u02b1\xe1\xc0\x00\x00\u07d4<\f=\ufb1c\xeaz\xcc1\x9a\x96\xc3\v\x8e\x1f\xed\xabEt\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4<\x15\xb3Q\x1d\xf6\xf04.sH\u0309\xaf9\xa1h\xb7s\x0f\x8965\u026d\xc5\u07a0\x00\x00\u07d4<\x1f\x91\xf3\x01\xf4\xb5e\xbc\xa2GQ\xaa\x1fv\x13\"p\x9d\u0749a\t=|,m8\x00\x00\xe0\x94<(l\xfb0\x14n_\u05d0\xc2\xc8T\x15RW\x8d\xe34\u060a\x02)\x1b\x11\xaa0n\x8c\x00\x00\u07d4<2.a\x1f\u06c2\rG\xc6\xf8\xfcd\xb6\xfa\xd7L\xa9_^\x89\r%\x8e\xce\x1b\x13\x15\x00\x00\u07d4\xa5\xe5\xbfb\xbb\u0309\x05V\xf6L\x1f\xe7\xfa\x00\x00\u07d4<\x86\x9c\tie#\xce\xd8$\xa0pAF\x05\xbbv#\x1f\xf2\x8965\u026d\xc5\u07a0\x00\x00\u07d4<\x92V\x19\u02731DF?\x057\u06165\x87\x06\xc5 \xb0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4<\x98YK\xf6\x8bW5\x1e\x88\x14\xae\x9em\xfd-%J\xa0o\x89\x10CV\x1a\x88)0\x00\x00\u07d4<\xad\xeb=>\xed?b1\x1dRU>p\xdfJ\xfc\xe5o#\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94<\xae\xdbS\x19\xfe\x80eC\xc5nP!\xd3r\xf7\x1b\xe9\x06.\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4<\xaf\xaf^bPV\x15\x06\x8a\xf8\xeb\"\xa1:\u0629\xe5Pp\x89lf\x06E\xaaG\x18\x00\x00\u07d4<\xb1y\xcbH\x01\xa9\x9b\x95\u00f0\xc3$\xa2\xbd\xc1\x01\xa6S`\x89\x01h\u048e?\x00(\x00\x00\u07d4<\xb5a\u0386BK5\x98\x91\xe3d\xec\x92_\xfe\xff'}\xf7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4<\xcbq\xaah\x80\xcb\v\x84\x01-\x90\xe6\a@\xec\x06\xac\u05cf\x89lk\x93[\x8b\xbd@\x00\x00\u07d4<\xce\xf8\x86yW9G\xe9I\x97y\x8a\x1e2~\b`:e\x89+\xc9\x16\u059f;\x02\x00\x00\xe0\x94<\xd1\xd9s\x1b\xd5H\xc1\xddo\u03a6\x1b\xebu\xd9\x17T\xf7\u04ca\x01\x16\x1d\x01\xb2\x15\xca\xe4\x80\x00\u07d4<\u04e6\xe95y\xc5mIAq\xfcS>z\x90\xe6\xf5\x94d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4<\u05b7Y<\xbe\xe7x0\xa8\xb1\x9d\b\x01\x95\x8f\xcdK\xc5z\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4<\xd7\xf7\xc7\xc257\x80\xcd\xe0\x81\xee\xecE\x82+%\xf2\x86\f\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4<\xe1\u0717\xfc\u05f7\xc4\u04e1\x8aI\xd6\xf2\xa5\xc1\xb1\xa9\x06\u05c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4<\xea0*G*\x94\x03y\xdd9\x8a$\xea\xfd\xba\u07c8\xady\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94<\xec\xa9k\xb1\xcd\xc2\x14\x02\x9c\xbc^\x18\x1d9\x8a\xb9M=A\x8a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4<\xf4\x84RO\xbd\xfa\xda\xe2m\xc1\x85\xe3++c\x0f\xd2\xe7&\x89\x18TR\xcb*\x91\xc3\x00\x00\u07d4<\xf9\xa1\xd4e\xe7\x8bp9\xe3iDx\xe2b{6\xfc\xd1A\x89J`S*\xd5\x1b\xf0\x00\x00\u07d4<\xfb\xf0fVYpc\x9e\x13\r\xf2\xa7\xd1k\x0e\x14\xd6\t\x1c\x89\\(=A\x03\x94\x10\x00\x00\xe0\x94=\th\x8d\x93\xad\a\xf3\xab\xe6\x8cr'#\xcdh\t\x90C^\x8a\x06ZL\xe9\x9fv\x9en\x00\x00\u07d4=1X{_\u0546\x98Ex\x87%\xa6c)\nI\xd3g\x8c\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4=?\xadI\xc9\xe5\xd2u\x9c\x8e\x8eZzM`\xa0\xdd\x13V\x92\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4=WO\xcf\x00\xfa\xe1\u064c\u023f\x9d\u07e1\xb3\x95;\x97A\xbc\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4=Z\x8b+\x80\xbe\x8b5\xd8\xec\xf7\x89\xb5\xedz\au\xc5\al\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4=f\xcdK\xd6M\\\x8c\x1b^\xea(\x1e\x10m\x1cZ\xad#s\x89i\xc4\xf3\xa8\xa1\x10\xa6\x00\x00\u0794=j\xe0S\xfc\xbc1\x8do\xd0\xfb\xc3S\xb8\xbfT.h\r'\x88\xc6s\xce<@\x16\x00\x00\u07d4=o\xf8,\x93w\x05\x9f\xb3\r\x92\x15r?`\xc7u\u0211\xfe\x89\r\x8e\\\xe6\x17\xf2\xd5\x00\x00\u07d4=y\xa8S\xd7\x1b\xe0b\x1bD\xe2\x97Yel\xa0u\xfd\xf4\t\x89lk\x93[\x8b\xbd@\x00\x00\u07d4=~\xa5\xbf\x03R\x81\x00\xed\x8a\xf8\xae\xd2e>\x92\x1bng%\x8965\u026d\xc5\u07a0\x00\x00\u07d4=\x81?\xf2\xb6\xedW\xb97\u06bf+8\x1d\x14\x8aA\x1f\xa0\x85\x89\x05k\xc7^-c\x10\x00\x00\u07d4=\x88\x143\xf0J}\r'\xf8ID\xe0\x8aQ-\xa3UR\x87\x89A\rXj \xa4\xc0\x00\x00\u07d4=\x89\xe5\x05\xcbF\xe2\x11\xa5?2\xf1g\xa8w\xbe\xc8\u007fK\n\x89\x01[5W\xf1\x93\u007f\x80\x00\xe0\x94=\x8d\a#r\x1es\xa6\xc0\xd8`\xaa\x05W\xab\xd1L\x1e\xe3b\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4=\x8f9\x88\x1b\x9e\xdf\xe9\x12'\xc3?\xa4\xcd\xd9\x1eg\x85D\xb0\x89\x04\xab\a\xbaC\xad\xa9\x80\x00\u07d4=\x9dk\xe5\u007f\xf8>\x06Y\x85fO\x12VD\x83\xf2\xe6\x00\xb2\x89n\xac\xe4?#\xbd\x80\x00\x00\u07d4=\xa3\x9c\xe3\xefJz9f\xb3.\xe7\xeaN\xbc#5\xa8\xf1\x1f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4=\xaa\x01\u03b7\x0e\xaf\x95\x91\xfaR\x1b\xa4\xa2~\xa9\xfb\x8e\xdeJ\x89Zc\xd2\u027cvT\x00\x00\u07d4=\xb5\xfejh\xbd6\x12\xac\x15\xa9\x9aa\xe5U\x92\x8e\xec\xea\xf3\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4=\xb9\xed\u007f\x02L~&7/\xea\xcf+\x05\b\x03D^8\x10\x89E\xb1H\xb4\x99j0\x00\x00\u07d4=\xbf\r\xbf\xd7x\x90\x80\x053\xf0\x9d\xea\x83\x01\xb9\xf0%\u04a6\x8965\u026d\xc5\u07a0\x00\x00\u07d4=\xce\U0005c18b\x15\xd3N\xdaBn\xc7\xe0K\x18\xb6\x01p\x02\x89lh\xcc\u041b\x02,\x00\x00\xe0\x94=\xd1.Uj`76\xfe\xbaJo\xa8\xbdJ\xc4]f*\x04\x8a#u{\x91\x83\xe0x(\x00\x00\u07d4=\u078b\x15\xb3\u033a\xa5x\x01\x12\xc3\xd6t\xf3\x13\xbb\xa6\x80&\x89`\x1dQZ>O\x94\x00\x00\xe0\x94=\xde\xdb\xe4\x89#\xfb\xf9\xe56\xbf\x9f\xfb\aG\xc9\xcd\u04de\xef\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d4=\xea\xe43'\x91?b\x80\x8f\xaa\x1bbv\xa2\xbdch\xea\u0649lk\x93[\x8b\xbd@\x00\x00\u07d4=\xf7b\x04\x9e\u068a\u0192}\x90Lz\xf4/\x94\xe5Q\x96\x01\x89lk\x93[\x8b\xbd@\x00\x00\u07d4>\x04\r@\u02c0\xba\x01%\xf3\xb1_\xde\xfc\xc8?0\x05\xda\x1b\x898E$\xccp\xb7x\x00\x00\u07d4>\v\x8e\xd8n\xd6i\xe1'#\xafur\xfb\xac\xfe\x82\x9b\x1e\x16\x89QM\xe7\xf9\xb8\x12\xdc\x00\x00\xe0\x94>\f\xbejm\xcba\xf1\x10\xc4[\xa2\xaa6\x1d\u007f\xca\xd3\xdas\x8a\x01\xb2\u07dd!\x9fW\x98\x00\x00\u07d4>\x19KN\xce\xf8\xbbq\x1e\xa2\xff$\xfe\xc4\xe8{\xd02\xf7\u0449\x8b\x9d\xc1\xbc\x1a\x03j\x80\x00\xe0\x94>\x1b\"0\xaf\xbb\xd3\x10\xb4\x92jLwmZ\u705cf\x1d\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4>\x1cS0\x0eL\x16\x89\x12\x16<~\x99\xb9]\xa2h\xad(\n\x896b2\\\u044f\xe0\x00\x00\u07d4>\x1c\x96 c\xe0\xd5)YA\xf2\x10\u0723\xabS\x1e\xec\x88\t\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4>,\xa0\xd24\xba\xf6\a\xadFj\x1b\x85\xf4\xa6H\x8e\xf0\n\xe7\x89\x04\xda!\xa3H=V\x80\x00\u07d4>/&#^\x13zs$\xe4\xdc\x15K]\xf5\xafF\xea\x1aI\x89\x017\xaa\xd8\x03-\xb9\x00\x00\xe0\x94>1a\xf1\xea/\xbf\x12ny\xda\x18\x01\u0695\x12\xb3y\x88\u024a\nm\xd9\f\xaeQ\x14H\x00\x00\xe0\x94>6\xc1rS\xc1\x1c\xf3\x89t\xed\r\xb1\xb7Y\x16\r\xa67\x83\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4><\u04fe\xc0e\x91\xd64o%Kb\x1e\xb4\x1c\x89\x00\x8d1\x895\u07fe\u069f74\x00\x00\u07d4>E\xbdU\u06d0`\xec\xed\x92;\xb9\xcbs<\xb3W?\xb51\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4>M\x13\xc5Z\x84\xe4n\xd7\xe9\u02d0\xfd5^\x8a\u0651\u33c965\u026d\xc5\u07a0\x00\x00\u07d4>N\x92e\"<\x9782L\xf2\v\xd0`\x06\xd0\a>\u06cc\x89\a?u\u0460\x85\xba\x00\x00\xe0\x94>O\xbdf\x10\x15\xf6F\x1e\xd6s\\\xef\xef\x01\xf3\x14E\xde:\x8a\x03n4)\x98\xb8\xb0 \x00\x00\xe0\x94>S\xff!\a\xa8\u07be3(I:\x92\xa5\x86\xa7\xe1\xf4\x97X\x8a\x04\xe6\x9c*q\xa4\x05\xab\x00\x00\u07d4>Z9\xfd\xdap\xdf\x11&\xab\r\u011asx1\x1aSz\x1f\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\xe0\x94>Z\xbd\t\xceZ\xf7\xba\x84\x87\xc3Y\xe0\xf2\xa9:\x98k\v\x18\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4>\\\xb8\x92\x8cAx%\xc0:;\xfc\xc5!\x83\xe5\xc9\x1eB\u05c9\xe71\xd9\xc5,\x96/\x00\x00\u07d4>^\x93\xfbL\x9c\x9d\x12F\xf8\xf2G5\x8e\"\xc3\xc5\xd1{j\x89\b!\xab\rD\x14\x98\x00\x00\u07d4>a\x83P\xfa\x01ez\xb0\xef>\xba\xc8\xe3p\x12\xf8\xfc+o\x89\x98\x06\xde=\xa6\xe9x\x00\x00\u07d4>c\xce;$\xca(e\xb4\u0166\x87\xb7\xae\xa3Y~\xf6\xe5H\x89lk\x93[\x8b\xbd@\x00\x00\u07d4>f\xb8GiVj\xb6yE\xd5\xfa\x8175V\xbc\u00e1\xfa\x89\b=lz\xabc`\x00\x00\xe0\x94>v\xa6-\xb1\x87\xaat\xf68\x17S;0l\xea\xd0\xe8\u03be\x8a\x06\x9bZ\xfa\xc7P\xbb\x80\x00\x00\u07d4>z\x96k]\xc3W\xff\xb0~\x9f\xe0g\xc4W\x91\xfd\x8e0I\x89\x034-`\xdf\xf1\x96\x00\x00\xe0\x94>\x81w!u#~\xb4\xcb\xe0\xfe-\xca\xfd\xad\xff\xebj\x19\x99\x8a\x01\xdd\f\x88_\x9a\r\x80\x00\x00\u07d4>\x83I\xb6\u007fWED\x9fe\x93g\u066dG\x12\xdb[\x89Z\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4>\x83TO\x00\x82U%r\u01c2\xbe\xe5\xd2\x18\xf1\xef\x06J\x9d\x89\x05l\xd5_\xc6M\xfe\x00\x00\u07d4>\x84\xb3\\[\"ePpa\xd3\vo\x12\xda\x03?\xe6\xf8\xb9\x89a\t=|,m8\x00\x00\u07d4>\x86A\xd4\x87E\xba2/_\xd6\xcbP\x12N\xc4f\x88\u01e6\x9a\u007f\xae\x8a\x01\n\xfc\x1a\xde;N\xd4\x00\x00\u07d4>\x91N0\x18\xac\x00D\x93A\u011d\xa7\x1d\x04\xdf\xee\xedb!\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4>\x94\x10\u04f9\xa8~\xd5\xe4Q\xa6\xb9\x1b\xb8\x92?\xe9\x0f\xb2\xb5\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4>\x94\xdfS\x13\xfaR\x05p\xef#+\xc31\x1d_b/\xf1\x83\x89lk\x93[\x8b\xbd@\x00\x00\u0794>\x9b4\xa5\u007f3u\xaeY\xc0\xa7^\x19\u0136A\"\x8d\x97\x00\x88\xf8i\x93)g~\x00\x00\u07d4>\xad\xa8\xc9/V\x06~\x1b\xb7<\xe3x\xdaV\xdc,\xdf\xd3e\x89w\xcd\xe9:\xeb\rH\x00\x00\xe0\x94>\xaf\by\xb5\xb6\xdb\x15\x9bX\x9f\x84W\x8bjt\xf6\xc1\x03W\x8a\x01\x898\xb6q\xfae\xa2\x80\x00\u07d4>\xaf1k\x87a]\x88\xf7\xad\xc7|X\xe7\x12\xedMw\x96k\x89\x05m\xbcL\xee$d\x80\x00\u07d4>\xb8\xb3;!\xd2<\u0686\xd8(\x88\x84\xabG\x0e\x16F\x91\xb5\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4>\xb9\xef\x06\xd0\xc2Y\x04\x03\x19\x94~\x8czh\x12\xaa\x02S\u0609\t\r\x97/22<\x00\x00\u07d4>\u030e\x16h\xdd\xe9\x95\xdcW\x0f\xe4\x14\xf4B\x11\xc54\xa6\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4>\u03752\xe3\x97W\x96b\xb2\xa4aA\u73c25\x93j_\x89\x03\x9f\xba\xe8\xd0B\xdd\x00\x00\u07d4>\xeeo\x1e\x966\vv\x89\xb3\x06\x9a\xda\xf9\xaf\x8e\xb6\f\u404965\u026d\xc5\u07a0\x00\x00\xe0\x94?\b\u066d\x89O\x81>\x8e!H\xc1`\xd2K5:\x8et\xb0\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4?\f\x83\xaa\xc5qybsN\\\xea\xea\xec\u04db(\xad\x06\xbe\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94?\x10\x80\x02\x82\u0477\xdd\u01cf\xa9-\x820\aN\x1b\xf6\xae\xae\x8a\x01\n\xfc\x1a\xde;N\xd4\x00\x00\u07d4?\x123qO M\xe9\xdeN\xe9m\a;6\x8d\x81\x97\x98\x9f\x89\x02\x17\xc4\x10t\xe6\xbb\x00\x00\u07d4?\x17:\xa6\xed\xf4i\u0445\xe5\x9b\xd2j\xe4#k\x92\xb4\xd8\xe1\x89\x11X\xe4`\x91=\x00\x00\x00\u07d4?\x1b\xc4 \xc5<\x00,\x9e\x90\x03|D\xfej\x8e\xf4\xdd\xc9b\x89\t`\xdbwh\x1e\x94\x00\x00\u07d4?#a\b\xee\xc7\"\x89\xba\u00e6\\\u0483\xf9^\x04\x1d\x14L\x8964\xbf9\xab\x98x\x80\x00\u07d4?-\xa0\x93\xbb\x16\xeb\x06O\x8b\xfa\x9e0\xb9)\xd1_\x8e\x1cL\x89lk\x93[\x8b\xbd@\x00\x00\u07d4?-\xd5]\xb7\xea\xb0\xeb\xeee\xb3>\xd8 ,\x1e\x99.\x95\x8b\x89,s\xc97t,P\x00\x00\u07d4?/8\x14\x91y|\xc5\xc0\u0502\x96\xc1O\xd0\xcd\x00\xcd\xfa-\x89+\x95\xbd\xcc9\xb6\x10\x00\x00\u07d4?0\u04fc\x9f`\"2\xbcrB\x88\xcaF\xcd\v\a\x88\xf7\x15\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4?<\x8ea\xe5`L\xef\x06\x05\xd46\xdd\"\xac\u0346\"\x17\xfc\x89Hz\x9a0E9D\x00\x00\u07d4??F\xb7\\\xab\xe3{\xfa\u0307`(\x1fCA\xca\u007fF=\x89 \xacD\x825\xfa\xe8\x80\x00\u07d4?G)c\x19x\x83\xbb\xdaZ\x9b}\xfc\xb2-\xb1\x14@\xad1\x89\x1a\x19d<\xb1\xef\xf0\x80\x00\u07d4?L\xd19\x9f\x8a4\xed\u06da\x17\xa4q\xfc\x92+Xp\xaa\xfc\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4?U\x1b\xa9<\xd5F\x93\xc1\x83\xfb\x9a\xd6\re\xe1`\x96s\u0249lk\x93[\x8b\xbd@\x00\x00\xe0\x94?bzv\x9ej\x95\x0e\xb8p\x17\xa7\u035c\xa2\bq\x13h1\x8a\x02\ub3b1\xa1r\u0738\x00\x00\u07d4?m\xd3e\x0e\xe4(\u0737u\x95S\xb0\x17\xa9j\x94(j\u0249Hz\x9a0E9D\x00\x00\u07d4?tr7\x80o\xed?\x82\x8ahR\xeb\bg\xf7\x90'\xaf\x89\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4?u\xaea\xcc\x1d\x80Be;[\xae\xc4D>\x05\x1c^z\xbd\x89\x05-T(\x04\xf1\xce\x00\x00\u07d4?\xb7\u0457\xb3\xbaO\xe0E\xef\xc2=P\xa1E\x85\xf5X\u0672\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94?\xbc\x1eE\x18\xd74\x00\xc6\xd0F5\x949\xfbh\xea\x1aI\xf4\x8a\x03y\v\xb8U\x13v@\x00\x00\u07d4?\xbe\xd6\xe7\xe0\u029c\x84\xfb\xe9\xeb\u03ddN\xf9\xbbIB\x81e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4?\u043bGy\x8c\xf4L\u07feM3=\xe67\xdfJ\x00\xe4\\\x89\x05lUy\xf7\"\x14\x00\x00\xe0\x94?\xe4\x0f\xbd\x91\x9a\xad(\x18\xdf\x01\xeeM\xf4lF\x84*\xc59\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4?\xe8\x01\xe6\x135\xc5\x14\r\xc7\xed\xa2\xefR\x04F\nP\x120\x89lk\x93[\x8b\xbd@\x00\x00\u07d4?\xf86\xb6\xf5{\x90\x1bD\f0\xe4\xdb\xd0e\xcf7\xd3\u050c\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4?\xfc\xb8p\xd4\x02=%]Qg\u0625\a\xce\xfc6kh\xba\x89#4^\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4@s\xfaI\xb8q\x17\u02d0\x8c\xf1\xabQ-\xa7T\xa92\xd4w\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4@\x8ai\xa4\a\x15\xe1\xb3\x13\xe15N`\b\x00\xa1\xe6\xdc\x02\xa5\x89\x01\u7e11\u0312T\x00\x00\u07d4@\x9b\xd7P\x85\x82\x1c\x1d\xe7\f\xdc;\x11\xff\xc3\xd9#\xc7@\x10\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4@\x9dZ\x96.\xde\uefa1x\x01\x8c\x0f8\xb9\u0372\x13\xf2\x89\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4@\xa31\x19[\x97s%\u00aa(\xfa/B\xcb%\xec<%<\x89lk\x93[\x8b\xbd@\x00\x00\u07d4@\xa7\xf7(g\xa7\u0706w\v\x16+uW\xa44\xedP\xcc\xe9\x8965\u026d\xc5\u07a0\x00\x00\u07d4@\xab\n>\x83\xd0\u022c\x93f\x91\x05 \xea\xb1w+\xac;\x1a\x894\xf1\f-\xc0^|\x00\x00\u07d4@\xabf\xfe!>\xa5l:\xfb\x12\xc7[\xe3?\x8e2\xfd\b]\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94@\xadt\xbc\v\xce*E\xe5/6\xc3\u07bb\x1b:\xda\x1bv\x19\x8a\x01p\x16-\xe1\t\xc6X\x00\x00\u07d4@\u03c9\x05\x91\xea\u484f\x81*)T\xcb)_c3'\xe6\x89\x02\x9b\xf76\xfcY\x1a\x00\x00\u07d4@\u03d0\xef[v\x8c]\xa5\x85\x00,\xcb\xe6avP\xd8\xe87\x8963\x03\"\xd5#\x8c\x00\x00\xe0\x94@\xd4]\x9dv%\xd1QV\xc92\xb7q\xca{\x05'\x13\tX\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4@\xdb\x1b\xa5\x85\xce4S\x1e\xde\xc5IHI9\x13\x81\xe6\xcc\u04c9a\t=|,m8\x00\x00\xe0\x94@\xdfI^\xcf?\x8bL\xef*l\x18\x99W$\x8f\u813c+\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4@\xe0\xdb\xf3\xef\uf404\xea\x1c\xd7\xe5\x03\xf4\v;J\x84C\xf6\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4@\xe2D\n\xe1B\u02006j\x12\xc6\xd4\x10/K\x844\xb6*\x8965\u026d\xc5\u07a0\x00\x00\u07d4@\xe3\u0083\xf7\xe2M\xe0A\f\x12\x1b\xee`\xa5`\u007f>)\xa6\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94@\xeaPD\xb2\x04\xb20v\xb1\xa5\x80;\xf1\xd3\f\x0f\x88\x87\x1a\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\xe0\x94@\xed\xdbD\x8di\x0e\xd7.\x05\xc2%\xd3O\xc85\x0f\xa1\xe4\u014a\x01{x\x83\xc0i\x16`\x00\x00\xe0\x94@\xf4\xf4\xc0ls,\xd3[\x11\x9b\x89;\x12~}\x9d\aq\xe4\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4A\x01\x0f\u023a\xf8C}\x17\xa0Ci\x80\x9a\x16\x8a\x17\xcaV\xfb\x89\x05k\xc7^-c\x10\x00\x00\u07d4A\x03)\x96q\xd4gc\x97\x8f\xa4\xaa\x19\xee4\xb1\xfc\x95'\x84\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4A\x03<\x1bm\x05\xe1\u0289\xb0\x94\x8f\xc6DS\xfb\xe8z\xb2^\x89Hz\x9a0E9D\x00\x00\u07d4A\t\x8a\x81E#\x17\xc1\x9e>\xef\v\xd1#\xbb\xe1x\xe9\xe9\u0289\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4A\x16\x10\xb1x\xd5a}\xfa\xb94\u0493\xf5\x12\xa9>\\\x10\xe1\x89\t79SM(h\x00\x00\u07d4A\x1c\x83\x1c\xc6\xf4O\x19e\xecWW\xabN[<\xa4\xcf\xfd\x1f\x89\x17\n\x0fP@\xe5\x04\x00\x00\xe0\x94A*h\xf6\xc6EU\x9c\xc9w\xfcId\x04z \x1d\x1b\xb0\xe2\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4A?K\x02f\x9c\xcf\xf6\x80k\xc8&\xfc\xb7\xde\xca;\x0e\xa9\xbc\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4AE\x99\t.\x87\x9a\xe2Sr\xa8MsZ\xf5\xc4\xe5\x10\xcdm\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4AHV\x12\xd04F\xecL\x05\xe5$NV?\x1c\xba\xe0\xf1\x97\x894\x95tD\xb8@\xe8\x00\x00\u07d4A]\tj\xb0b\x93\x18?<\x03=%\xf6\xcfqx\xac;\u01c9\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4Af\xfc\b\u0285\xf7f\xfd\xe81F\x0e\x9d\xc9<\x0e!\xaal\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94Ag\x84\xaf`\x960\xb0p\u051a\x8b\xcd\x12#\\d(\xa4\b\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4Ag\xcdH\xe73A\x8e\x8f\x99\xff\xd14\x12\x1cJJ\xb2x\u0109\xc5S%\xcat\x15\xe0\x00\x00\u07d4Al\x86\xb7 \x83\xd1\xf8\x90}\x84\xef\xd2\xd2\u05c3\xdf\xfa>\xfb\x89lj\xccg\u05f1\xd4\x00\x00\u07d4AsA\x9d\\\x9fc)U\x1d\xc4\xd3\xd0\u03ac\x1bp\x1b\x86\x9e\x89\x04\xc5>\xcd\xc1\x8a`\x00\x00\u07d4At\xfa\x1b\xc1*;q\x83\u02eb\xb7z\vYU{\xa5\xf1\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4Axj\x10\xd4G\xf4\x84\xd32D\u0337\xfa\u034bB{[\x8c\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94Az<\u0454\x96S\nmB\x04\u00f5\xa1|\xe0\xf2\a\xb1\xa5\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4A~N&\x88\xb1\xfdf\xd8!R\x9eF\xedOB\xf8\xb3\xdb=\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94A\x9aq\xa3l\x11\xd1\x05\xe0\xf2\xae\xf5\xa3\xe5\x98\a\x8e\x85\xc8\v\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94A\x9b\xdes\x16\xcc\x1e\u0495\u0205\xac\xe3B\u01db\xf7\xee3\xea\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4A\xa2\xf2\xe6\xec\xb8c\x94\xec\x0e3\x8c\x0f\xc9~\x9cU\x83\xde\u0489l\xee\x06\u077e\x15\xec\x00\x00\u07d4A\xa8\u0083\x00\x81\xb1\x02\xdfn\x011e|\a\xabc[T\u0389lj\xccg\u05f1\xd4\x00\x00\u07d4A\xa8\xe26\xa3\x0emc\xc1\xffdM\x13*\xa2\\\x89S~\x01\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4A\xa9\xa4\x04\xfc\x9f[\xfe\xe4\x8e\xc2e\xb1%#3\x8e)\xa8\xbf\x89\x15\b\x94\xe8I\xb3\x90\x00\x00\u07d4A\xad6\x9fu\x8f\xef8\xa1\x9a\xa3\x14\x93y\x83,\x81\x8e\xf2\xa0\x8966\x9e\xd7t}&\x00\x00\u07d4A\xb2\xd3O\xde\v\x10)&+Ar\xc8\x1c\x15\x90@[\x03\xae\x8965\u026d\xc5\u07a0\x00\x00\u07d4A\xb2\xdb\u05dd\u069b\x86Ojp0'T\x19\u00dd>\xfd;\x89\xadx\xeb\u016cb\x00\x00\x00\u07d4A\xc3\xc26u4\xd1;\xa2\xb3?\x18\\\xdb\xe6\xacC\xc2\xfa1\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4A\u02d8\x96D_p\xa1\n\x14!R\x96\xda\xf6\x14\xe3,\xf4\u0549g\x8a\x93 b\xe4\x18\x00\x00\u07d4A\xcey\x95\t5\xcf\xf5[\xf7\x8eL\xce\xc2\xfec\x17\x85\u06d5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4A\u04f71\xa3&\xe7hX\xba\xa5\xf4\xbd\x89\xb5{6\x93#C\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\xe0\x94A\xe4\xa2\x02u\xe3\x9b\xdc\xef\xebe\\\x03\"tKvQ@\u008a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4A\xed-\x8ep\x81H,\x91\x9f\xc2=\x8f\x00\x91\xb3\xc8,F\x85\x89F:\x1ev[\u05ca\x00\x00\xe0\x94A\xf2~tK\u049d\xe2\xb0Y\x8f\x02\xa0\xbb\x9f\x98\xe6\x81\ua90a\x01\xa4\xab\xa2%\xc2\a@\x00\x00\u07d4A\xf4\x89\xa1\xect{\u009c>_\x9d\x8d\xb9xw\xd4\u0474\xe9\x89\a?u\u0460\x85\xba\x00\x00\u07d4B\x0f\xb8n}+Q@\x1f\xc5\xe8\xc7 \x15\xde\xcbN\xf8\xfc.\x8965\u026d\xc5\u07a0\x00\x00\u07d4B\x16\x84\xba\xa9\xc0\xb4\xb5\xf5S8\xe6\xf6\xe7\xc8\xe1F\xd4\x1c\xb7\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4B9\x96Y\xac\xa6\xa5\xa8c\xea\"E\xc93\xfe\x9a5\xb7\x88\x0e\x89n\xce2\xc2l\x82p\x00\x00\xe0\x94B;\xcaG\xab\xc0\fpW\xe3\xad4\xfc\xa6>7_\xbd\x8bJ\x8a\x03\xcf\xc8.7\xe9\xa7@\x00\x00\u07d4B<1\a\xf4\xba\xceANI\x9cd9\nQ\xf7F\x15\xca^\x89lk\x93[\x8b\xbd@\x00\x00\u07d4B<\xc4YL\xf4\xab\xb66\x8d\xe5\x9f\u04b1#\a4a!C\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94BD\xf13\x11X\xb9\xce&\xbb\xe0\xb9#k\x92\x03\xca5\x144\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u0794BQw\xebt\xad\n\x9d\x9aWR\"\x81G\xeemcV\xa6\u6239\x8b\xc8)\xa6\xf9\x00\x00\u07d4BW%\xc0\xf0\x8f\b\x11\xf5\xf0\x06\xee\xc9\x1c\\\\\x12k\x12\xae\x89\b!\xab\rD\x14\x98\x00\x00\xe0\x94BX\xfdf/\xc4\xce2\x95\xf0\xd4\xed\x8f{\xb1D\x96\x00\xa0\xa9\x8a\x01lE.\xd6\b\x8a\xd8\x00\x00\xe0\x94B\\\x18\x16\x86\x8fww\xcc+\xa6\xc6\u048c\x9e\x1eylR\xb3\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4B\\3\x8a\x13%\xe3\xa1W\x8e\xfa)\x9eW\u0646\xebGO\x81\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94BbY\xb0\xa7Vp\x1a\x8bf5(R!V\xc0(\x8f\x0f$\x8a\x02\x18\xae\x19k\x8dO0\x00\x00\u07d4Bm\x15\xf4\a\xa0\x115\xb1:kr\xf8\xf2R\v51\xe3\x02\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4Box\xf7\r\xb2Y\xac\x854\x14[)4\xf4\xef\x10\x98\xb5\u0609\x13\x84\x00\xec\xa3d\xa0\x00\x00\u07d4Bs-\x8e\xf4\x9f\xfd\xa0K\x19x\x0f\xd3\xc1\x84i\xfb7A\x06\x89\x17\v\x00\xe5\u4a7e\x00\x00\u07d4Bt\x17\xbd\x16\xb1\xb3\xd2-\xbb\x90-\x8f\x96W\x01o$\xa6\x1c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Btj\xee\xa1O'\xbe\xff\f\r\xa6BS\xf1\xe7\x97\x18\x90\xa0\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4B{F*\xb8NP\x91\xf4\x8aF\xeb\f\u0712\xdd\xcb&\xe0x\x89lk\x93[\x8b\xbd@\x00\x00\u07d4B~GQ\u00fa\xbex\xcf\xf8\x83\b\x86\xfe\xbc\x10\xf9\x90\x8dt\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94B~\xc6h\xac\x94\x04\xe8\x95\u0306\x15\x11\xd1b\nI\x12\xbe\x98\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4B\x80\xa5\x8f\x8b\xb1\v\x94@\u0794\xf4+OY! \x82\x01\x91\x89lk\x93[\x8b\xbd@\x00\x00\u07d4B\x8a\x1e\xe0\xed3\x1dyR\u033e\x1cyt\xb2\x85+\u0453\x8a\x89w\xb7JN\x8d\xe5e\x00\x00\u0794B\x9c\x06\xb4\x87\xe8Tj\xbd\xfc\x95\x8a%\xa3\xf0\xfb\xa5?o\x00\x88\xbbdJ\xf5B\x19\x80\x00\xe0\x94B\xa9\x8b\xf1`'\xceX\x9cN\xd2\xc9X1\xe2rB\x05\x06N\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4B\xc6\xed\xc5\x15\xd3UW\x80\x8d\x13\xcdD\xdc\xc4@\v%\x04\xe4\x89\n\xba\x14\u015b\xa72\x00\x00\u07d4B\xce\xcf\u0492\x10y\xc2\xd7\xdf?\b\xb0z\xa3\xbe\xee^!\x9a\x8965\u026d\xc5\u07a0\x00\x00\u07d4B\u04669\x9b0\x16\xa8Y\u007f\x8bd\t'\xb8\xaf\xbc\xe4\xb2\x15\x89\xa1\x8b\xce\xc3H\x88\x10\x00\x00\u07d4B\xd3I@\xed\xd2\xe7\x00]F\xe2\x18\x8eL\xfe\u0383\x11\xd7M\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4B\u04e5\xa9\x01\xf2\xf6\xbd\x93V\xf1\x12\xa7\x01\x80\xe5\xa1U\v`\x892$\xf4'#\xd4T\x00\x00\u07d4B\u05b2c\xd9\xe9\xf4\x11lA\x14$\xfc\x99Ux;\xa1\xc5\x1b\x81\x0f\xc4g\u057aM\xeaB\xf7\xa9\x88^i\x8a\bxg\x83&\xea\xc9\x00\x00\x00\xe0\x94C>\xb9J3\x90\x86\xed\x12\u067d\xe9\xcd\x1dE\x86\x03\xc9}\u058a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4CI\"Zb\xf7\n\xeaH\n\x02\x99\x15\xa0\x1eSy\xe6O\xa5\x89\x8c\xd6~#4\xc0\xd8\x00\x00\u07d4CT\"\x1eb\xdc\t\xe6@d6\x16:\x18^\xf0m\x11J\x81\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94CTC\xb8\x1d\xfd\xb9\xbd\x8cg\x87\xbc%\x18\xe2\xd4~W\xc1_\x8a\x01C\x8d\x93\x97\x88\x1e\xf2\x00\x00\u07d4Ca\u0504o\xaf\xb3w\xb6\xc0\xeeI\xa5\x96\xa7\x8d\xdf5\x16\xa3\x89\xc2\x12z\xf8X\xdap\x00\x00\xe0\x94Cd0\x9a\x9f\xa0p\x95`\x0fy\xed\xc6Q \xcd\xcd#\xdcd\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4Cg\xaeK\f\xe9d\xf4\xa5J\xfdK\\6\x84\x96\xdb\x16\x9e\x9a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Ct\x89(\xe8\xc3\xecD6\xa1\u0412\xfb\xe4:\xc7I\xbe\x12Q\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4Cv{\xf7\xfd*\xf9[r\xe91-\xa9D<\xb1h\x8eCC\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94Cy\x838\x8a\xb5\x9aO\xfc!_\x8e\x82iF\x10)\xc3\xf1\xc1\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4C\x89\x8cI\xa3MP\x9b\xfe\xd4\xf7`A\xee\x91\xca\xf3\xaaj\xa5\x89\x10CV\x1a\x88)0\x00\x00\u07d4C\x8c/T\xff\x8eb\x9b\xab6\xb1D+v\v\x12\xa8\x8f\x02\xae\x89lk\x93[\x8b\xbd@\x00\x00\u07d4C\x98b\x8e\xa6c-9>\x92\x9c\xbd\x92\x84d\xc5h\xaaJ\f\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4C\x9d//Q\x10\xa4\u054b\x17W\x93P\x15@\x87@\xfe\xc7\xf8\x89\u03e5\xc5\x15\x0fL\x88\x80\x00\u07d4C\x9d\xee?vy\xff\x100s?\x93@\xc0\x96hkI9\v\x89lk\x93[\x8b\xbd@\x00\x00\u07d4C\xb0y\xba\xf0ry\x99\xe6k\xf7C\u057c\xbfwl;\t\"\x89lk\x93[\x8b\xbd@\x00\x00\u07d4C\xbc-M\xdc\xd6X;\xe2\u01fc\tK(\xfbr\xe6+\xa8;\x89lk\x93[\x8b\xbd@\x00\x00\u07d4C\xc7\xeb\u0173\xe7\xaf\x16\xf4}\xc5az\xb1\x0e\x0f9\xb4\xaf\xbb\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4C\u02d6R\x81\x8coMg\x96\xb0\xe8\x94\t0ly\xdbcI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4C\xcc\b\xd0s*\xa5\x8a\xde\xf7a\x9b\xedFU\x8a\xd7wAs\x89\xf0\xe7\u0730\x12*\x8f\x00\x00\xe0\x94C\u0567\x1c\xe8\xb8\xf8\xae\x02\xb2\xea\xf8\xea\xf2\xca(@\xb9?\xb6\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u0794C\xdb\u007f\xf9Z\bm(\ubff8/\xb8\xfb_#\n^\xbc\u0348\xdfn\xb0\xb2\xd3\xca\x00\x00\u07d4C\xe7\xec\x84cX\xd7\xd0\xf97\xad\x1c5\v\xa0i\u05ffr\xbf\x89\x06p\xaeb\x92\x14h\x00\x00\u07d4C\xf1o\x1eu\xc3\xc0j\x94x\xe8\u0157\xa4\n<\xb0\xbf\x04\u0309\x9d\xf7\u07e8\xf7`H\x00\x00\u07d4C\xf4p\xede\x9e)\x91\xc3u\x95~]\xde\u017d\x1d8\"1\x89\x05k\xc7^-c\x10\x00\x00\u07d4C\xf7\xe8n8\x1e\xc5\x1e\u0110m\x14v\u02e9z=\xb5\x84\xe4\x8965\u026d\xc5\u07a0\x00\x00\u07d4C\xff8t>\xd0\xcdC0\x8c\x06e\t\u030e~r\xc8b\xaa\x89i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94C\xff\x88S\xe9\x8e\xd8@k\x95\x00\n\u0684\x83b\u05a09*\x8a\x04\xae\v\x1cM.\x84\xd0\x00\x00\u07d4D\t\x88f\xa6\x9bh\xc0\xb6\xbc\x16\x82)\xb9`5\x87\x05\x89g\x89\n1\x06+\xee\xedp\x00\x00\u07d4D\x19\xaca\x8d]\xea|\xdc`w o\xb0}\xbd\xd7\x1c\x17\x02\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4D\x1aR\x00\x16a\xfa\xc7\x18\xb2\u05f3Q\xb7\xc6\xfbR\x1az\xfd\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94D\x1a\u0282c\x13$\xac\xbf\xa2F\x8b\xda2[\xbdxG{\xbf\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4D\x1f7\xe8\xa0)\xfd\x02H/(\x9cI\xb5\xd0m\x00\xe4\b\xa4\x89\x12\x11\xec\xb5m\x13H\x80\x00\u07d4D \xaa5F[\xe6\x17\xad$\x98\xf3p\xde\n<\xc4\xd20\xaf\x89lk\x93[\x8b\xbd@\x00\x00\u07d4D#/\xf6m\xda\xd1\xfd\x84\x12f8\x006\xaf\xd7\xcf}\u007fB\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4D%\rGn\x06$\x84\xe9\b\n9g\xbf:Js*\xd7?\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4D)\xa2\x9f\xee\x19\x84Pg,\f\x1d\a1b%\v\xecdt\x896*\xaf\x82\x02\xf2P\x00\x00\u07d4D5RS\xb2wH\xe3\xf3O\xe9\xca\xe1\xfbq\x8c\x8f$\x95)\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4D8\xe8\x80\xcb'f\xb0\xc1\u03ae\xc9\xd2A\x8f\u03b9R\xa0D\x89\a?\xa0s\x90?\b\x00\x00\u07d4DL\xafy\xb7\x138\ue6a7\xc73\xb0*\u02a7\xdc\x02YH\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4D\\\xb8\xde^=\xf5 \xb4\x99\xef\u0240\xf5+\xff@\xf5\\v\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94Dj\x809\xce\u03dd\xceHy\xcb\xca\xf3I;\xf5E\xa8\x86\x10\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4Dt)\x9d\x0e\xe0\x90\u0710x\x9a\x14\x86H\x9c=\rd^m\x8965\u026d\xc5\u07a0\x00\x00\u07d4D\x8b\xf4\x10\xad\x9b\xbc/\xec\xc4P\x8d\x87\xa7\xfc.K\x85a\xad\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4D\x90\x1e\r\x0e\b\xac=^\x95\xb8\xec\x9d^\x0f\xf5\xf1.\x03\x93\x89\x16\xa1\xf9\xf5\xfd}\x96\x00\x00\xe0\x94D\x93\x12<\x02\x1e\xce;3\xb1\xa4R\xc9&\x8d\xe1@\a\xf9\u04ca\x01je\x02\xf1Z\x1eT\x00\x00\xe0\x94D\x9a\xc4\xfb\xe3\x83\xe3g8\x85^6JW\xf4q\xb2\xbf\xa11\x8a)\xb7d2\xb9DQ \x00\x00\u07d4D\xa0\x1f\xb0J\xc0\xdb,\xce]\xbe(\x1e\x1cF\xe2\x8b9\xd8x\x89lj\xccg\u05f1\xd4\x00\x00\u07d4D\xa6=\x18BE\x87\xb9\xb3\a\xbf\xc3\xc3d\xae\x10\xcd\x04\xc7\x13\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94D\xa8\x98\x9e20\x81!\xf7$f\x97\x8d\xb3\x95\xd1\xf7l:K\x8a\x01\x88P)\x9fB\xb0j\x00\x00\u07d4D\xc1\x11\v\x18\x87\x0e\xc8\x11x\xd9=!X8\xc5Q\u050ed\x89\n\xd6\xf9\x85\x93\xbd\x8f\x00\x00\u07d4D\xc1Ge\x12|\xde\x11\xfa\xb4l],\xf4\u0532\x89\x00#\xfd\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94D\xc5N\xaa\x8a\xc9@\xf9\xe8\x0f\x1et\xe8/\xc1O\x16v\x85j\x8a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4D\xcdwSZ\x89?\xa7\xc4\xd5\xeb:$\x0ey\u0419\xa7--\x89,s\xc97t,P\x00\x00\u07d4D\u07faP\xb8)\xbe\xcc_O\x14\u0470J\xab3 \xa2\x95\xe5\x8965\u026d\xc5\u07a0\x00\x00\u07d4D\xe2\xfd\xc6y\xe6\xbe\xe0\x1e\x93\xefJ:\xb1\xbc\xce\x01*\xbc|\x89\x16=\x19I\x00\xc5E\x80\x00\xe0\x94D\xf6/*\xaa\xbc)\xad:k\x04\xe1\xffo\x9c\xe4R\xd1\xc1@\x8a\x03\x99\x92d\x8a#\u0220\x00\x00\u07d4D\xff\xf3{\xe0\x1a8\x88\u04f8\xb8\u1200\xa7\xdd\xef\xee\xea\u04c9\x0e\f[\xfc}\xae\x9a\x80\x00\u07d4E\x06\xfe\x19\xfaK\x00k\xaa9\x84R\x9d\x85\x16\xdb++P\xab\x89lk\x93[\x8b\xbd@\x00\x00\u07d4E\x1b6\x99G[\xed]y\x05\xf8\x90Z\xa3Eo\x1e\u05c8\xfc\x89\x8a\xc7#\x04\x89\xe8\x00\x00\x00\u0794E\x1bpp%\x9b\u06e2q\x00\xe3n#B\x8aS\xdf\xe3\x04\u9239\x8b\xc8)\xa6\xf9\x00\x00\u07d4E'+\x8fb\xe9\xf9\xfa\x8c\xe0D \u1ba3\xeb\xa9hn\xac\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94E+d\u06ce\xf7\xd6\u07c7\u01c8c\x9c\"\x90\xbe\x84\x82\xd5u\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4E>5\x9a3\x97\x94LZ'Z\xb1\xa2\xf7\n^Z?i\x89\x89\r\x02\xabHl\xed\xc0\x00\x00\u07d4EI\xb1Yy%_~e\xe9\x9b\rV\x04\u06d8\xdf\xca\u023f\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4EKa\xb3D\xc0\xef\x96Qy#\x81U\xf2w\u00c2\x9d\v8\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94EO\x01A\xd7!\xd3<\xbd\xc4\x10\x18\xbd\x01\x11\x9a\xa4xH\x18\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4ES3\x90\xe3@\xfe\r\xe3\xb3\xcf_\xb9\xfc\x8e\xa5R\xe2\x9eb\x89O%\x91\xf8\x96\xa6P\x00\x00\u07d4ES\x96\xa4\xbb\u067a\u8bdf\xb7\xc4\xd6MG\x1d\xb9\xc2E\x05\x89\b\xbaR\xe6\xfcE\xe4\x00\x00\u07d4E[\x92\x96\x92\x1at\xd1\xfcAa\u007fC\xb80>o>\xd7l\x89\u3bb5sr@\xa0\x00\x00\u07d4E\\\xb8\xee9\xff\xbcu#1\xe5\xae\xfcX\x8e\xf0\xeeY4T\x8965F:x\r\xef\x80\x00\u07d4Ej\u0b24\x8e\xbc\xfa\xe1f\x06\x02PR_c\x96^v\x0f\x89\x10CV\x1a\x88)0\x00\x00\u07d4Eo\x8dtf\x82\xb2$g\x93I\x06M\x1b6\x8c|\x05\xb1v\x89\u0213\u041c\x8fQP\x00\x00\u07d4Ep)\xc4i\xc4T\x8d\x16\x8c\xec>e\x87.D(\xd4+g\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Eq\xdeg+\x99\x04\xba\xd8t6\x92\xc2\x1cO\xdc\xeaL.\x01\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4Ex\x1b\xbew\x14\xa1\xc8\xf7;\x1cty!\xdfO\x84'\x8bp\x89lk\x93[\x8b\xbd@\x00\x00\u07d4E{\xce\xf3}\xd3\xd6\v-\xd0\x19\xe3\xfea\xd4k?\x1erR\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94E\x8e<\u025e\x94xD\xa1\x8ejB\x91\x8f\xef~\u007f_^\xb3\x8a\a\xb5?y\xe8\x88\xda\xc0\x00\x00\u07d4E\x93\x93\xd6:\x06>\xf3r\x1e\x16\xbd\x9f\xdeE\ue77dw\xfb\x89j\xba\u05a3\xc1S\x05\x00\x00\u07d4E\xa5p\xdc\xc2\t\f\x86\xa6\xb3\xea)\xa6\bc\xdd\xe4\x1f\x13\xb5\x89\f\x9a\x95\xee)\x86R\x00\x00\u07d4E\xa8 \xa0g/\x17\xdct\xa0\x81\x12\xbcd?\xd1\x16w6\u00c9\n\xd6\xc4;(\x15\xed\x80\x00\u07d4E\xb4q\x05\xfeB\xc4q-\xcen*!\xc0[\xff\xd5\xeaG\xa9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4E\xbb\x82\x96R\u063f\xb5\x8b\x85'\xf0\xec\xb6!\u009e!.\u00c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94E\xc0\u045f\v\x8e\x05O\x9e\x8986\xd5\xec\xaey\x01\xaf(\x12\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4E\xc4\xec\xb4\xee\x89\x1e\xa9\x84\xa7\xc5\xce\xfd\x8d\xfb\x001\v(P\x89kV\x05\x15\x82\xa9p\x00\x00\u07d4E\u028d\x95f\b\xf9\xe0\n/\x99t\x02\x86@\x88\x84ef\x8f\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94E\u0298b\x00;N@\xa3\x17\x1f\xb5\xca\xfa\x90(\xca\xc8\xde\x19\x8a\x02\ub3b1\xa1r\u0738\x00\x00\u07d4E\xd1\xc9\xee\xdf|\xabA\xa7y\x05{y9_T(\xd8\x05(\x89lk\x93[\x8b\xbd@\x00\x00\u07d4E\u0535M7\xa8\xcfY\x98!#_\x06/\xa9\xd1p\xed\u8909\x11\x90g;_\u0690\x00\x00\xe0\x94E\xdb\x03\xbc\xcf\u05a5\xf4\xd0&k\x82\xa2*6\x87\x92\xc7}\x83\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4E\xe3\xa9>r\x14J\u0686\f\xbcV\xff\x85\x14Z\xda8\xc6\u0689WG=\x05\u06ba\xe8\x00\x00\u07d4E\u6378\u06fa\xba_\xc2\xcb3|b\xbc\xd0\xd6\x1b\x05\x91\x89\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94E\u6379L}\n\xb7\xacA\x85zq\xd6qG\x87\x0fNq\x8aT\xb4\v\x1f\x85+\xda\x00\x00\x00\u07d4E\xf4\xfc`\xf0\x8e\xac\xa1\x05\x98\xf03c)\x80\x1e<\x92\xcbF\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4F\rSU\xb2\xce\xebnb\x10}\x81\xe5\x12p\xb2k\xf4V \x89l\xb7\xe7Hg\xd5\xe6\x00\x00\xe0\x94F\"O2\xf4\xec\xe5\u0206p\x90\xd4@\x9dU\xe5\v\x18C-\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4F'\xc6\x06\x84&q\xab\u0782\x95\xee]\xd9L\u007fT\x954\xf4\x89\x0f\x89_\xbd\x872\xf4\x00\x00\u07d4F+g\x8bQ\xb5\x84\xf3\xedz\xda\a\v\\\u065c\v\xf7\xb8\u007f\x89\x05k\xc7^-c\x10\x00\x00\u07d4FM\x9c\x89\xcc\xe4\x84\xdf\x00\x02w\x19\x8e\xd8\a_\xa65r\u0449\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4FPNj!Z\xc8;\xcc\xf9V\xbe\xfc\x82\xabZg\x93q\u0209\x1c!(\x05\u00b4\xa5\x00\x00\xe0\x94FQ\xdcB\x0e\b\xc3);'\xd2Ix\x90\xebP\":\xe2\xf4\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4FS\x1e\x8b\x1b\xde\t\u007f\u07c4\x9dm\x11\x98\x85`\x8a\x00\x8d\xf7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4Fb\x92\xf0\xe8\rC\xa7\x87t'u\x90\xa9\xebE\x96\x12\x14\xf4\x894\x95tD\xb8@\xe8\x00\x00\xe0\x94Fb\xa1v^\xe9!\x84-\u0708\x89\x8d\x1d\xc8bu\x97\xbd~\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4Fe\xe4s\x96\xc7\u06d7\xeb*\x03\xd9\bc\xd5\u053a1\x9a\x94\x89 \x86\xac5\x10R`\x00\x00\u07d4Fo\xdak\x9bX\xc5S'P0j\x10\xa2\xa8\xc7h\x10;\a\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4Fq$\xae\u007fE/&\xb3\xd5t\xf6\b\x88\x94\xfa]\x1c\xfb;\x89\x92^\x06\xee\xc9r\xb0\x00\x00\u0794Fr*6\xa0\x1e\x84\x1d\x03\xf7\x80\x93^\x91}\x85\u0566z\xbd\x88\xce\xc7o\x0eqR\x00\x00\u07d4Fw\x9aVV\xff\x00\xd7>\xac:\xd0\u00cbl\x850\x94\xfb@\x89\f\x82S\xc9lj\xf0\x00\x00\u07d4Fw\xb0N\x03C\xa3!1\xfdj\xbb9\xb1\xb6\x15k\xba=[\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4F}Y\x88$\x9ahaG\x16e\x98@\xed\n\xe6\xf6\xf4W\xbc\x89\x15\x01\xa4\x8c\xef\xdf\xde\x00\x00\u07d4F~\x0e\xd5O;v\xae\x066\x17n\aB\b\x15\xa0!sn\x89lk\x93[\x8b\xbd@\x00\x00\u07d4F~\xa1\x04E\x82~\xf1\xe5\x02\xda\xf7k\x92\x8a \x9e\r@2\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94F\u007f\xbfAD\x16\x00u\u007f\xe1X0\xc8\xcd_O\xfb\xbb\xd5`\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94F\x93Xp\x932\xc8+\x88~ \xbc\xdd\xd0\"\x0f\x8e\u06e7\u040a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u07d4F\x97\xba\xaf\x9c\xcb`?\xd3\x040h\x9dCTE\xe9\u024b\xf5\x89\n\xd2\x01\xa6yO\xf8\x00\x00\u07d4F\xa3\v\x8a\x80\x891!tE\xc3\xf5\xa9>\x88,\x03E\xb4&\x89\r\x8d\xb5\xeb\u05f2c\x80\x00\u07d4F\xa40\xa2\u0528\x94\xa0\u062a?\xea\xc6\x156\x14\x15\xc3\xf8\x1f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4F\xaaP\x18pg~\u007f\nPHv\xb4\xe8\x80\x1a\n\xd0\x1cF\x89+^:\xf1k\x18\x80\x00\x00\u07d4F\xbf\u0172\a\xeb \x13\xe2\xe6\x0fw_\xec\xd7\x18\x10\u0159\f\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4F\xc1\xaa\"D\xb9\u0229W\u028f\xacC\x1b\x05\x95\xa3\xb8h$\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4F\xd8\x061(B\x03\xf6(\x8e\xcdNWX\xbb\x9dA\xd0]\xbe\x89lk\x93[\x8b\xbd@\x00\x00\u07d4G\n\xc5\xd1\xf3\xef\xe2\x8f8\x02\xaf\x92[W\x1ec\x86\x8b9}\x89lk\x93[\x8b\xbd@\x00\x00\u07d4G\x10\x10\xdaI/@\x18\x83;\b\x8d\x98r\x90\x1e\x06\x12\x91t\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4G\x12T\x02e\xcb\xee\u00c4p\"\u015f\x1b1\x8dC@\n\x9e\x89\xbd\xbcA\xe04\x8b0\x00\x00\xe0\x94G\x14\u03e4\xf4k\u05bdps}u\x87\x81\x97\xe0\x8f\x88\xe61\x8a\x02\u007f>\u07f3Nn@\x00\x00\u07d4G H\xcc`\x9a\xeb$!e\uaa87\x05\x85\f\xf3\x12]\xe0\x8965\u026d\xc5\u07a0\x00\x00\u07d4G!\x92)\xe8\xcdVe\x9ae\u00a9C\xe2\u075a\x8fK\xfd\x89\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d4G7\xd0B\xdcj\xe7>\xc7:\xe2Qz\u03a2\xfd\xd9d\x87\u014965\u026d\xc5\u07a0\x00\x00\u07d4GAX\xa1\xa9\xdci<\x13?e\xe4{\\:\xe2\xf7s\xa8o\x89\n\xdaUGK\x814\x00\x00\u07d4GE\xab\x18\x1a6\xaa\x8c\xbf\"\x89\xd0\xc4Qe\xbc~\xbe#\x81\x89\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4GPf\xf9\xad&eQ\x96\xd5SS'\xbb\xeb\x9by)\xcb\x04\x89\xa4\xccy\x95c\u00c0\x00\x00\xe0\x94GR!\x8eT\xdeB?\x86\xc0P\x193\x91z\xea\b\xc8\xfe\u054a\x04<3\xc1\x93ud\x80\x00\x00\u07d4GZa\x93W-JNY\u05fe\t\u02d6\r\u074cS\x0e/\x89$,\xf7\x8c\xdf\a\xff\x80\x00\u07d4Gd\x8b\xed\x01\xf3\xcd2I\bNc]\x14\u06a9\xe7\xec<\x8a\x89\n\x84Jt$\xd9\xc8\x00\x00\u07d4Gh\x84\x10\xff%\xd6T\xd7.\xb2\xbc\x06\xe4\xad$\xf83\xb0\x94\x89\b\xb2\x8da\xf3\u04ec\x00\x00\u07d4GkU\x99\b\x9a?\xb6\xf2\x9clr\xe4\x9b.G@\ua00d\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4Gs\x0f_\x8e\xbf\x89\xacr\xef\x80\xe4l\x12\x19P8\xec\xdcI\x89\xabM\xcf9\x9a:`\x00\x00\xe0\x94G{$\xee\u80deO\u045d\x12P\xbd\vfEyJa\u028a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4G\x81\xa1\nM\xf5\uef02\xf4\xcf\xe1\a\xba\x1d\x8av@\xbdf\x89a\t=|,m8\x00\x00\u07d4G\x88Z\xba\xbe\xdfM\x92\x8e\x1c\x88\x83\xa6a\x9cl(\x11\x84\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94G\xe2]\xf8\x82%8\xa8Yk(\xc67\x89kM\x14<5\x1d\x8a\x11\v\xe9\xeb$\xb8\x81P\x00\x00\u07d4G\xf4ik\xd4b\xb2\r\xa0\x9f\xb8>\xd2\x03\x98\x18\xd7v%\xb3\x89\b\x13\xcaV\x90m4\x00\x00\u07d4G\xfe\xf5\x85\x84FRH\xa0\x81\r`F>\xe9>Zn\xe8\u04c9\x0fX\xcd>\x12i\x16\x00\x00\u07d4G\xffo\xebC! `\xbb\x15\x03\u05e3\x97\xfc\b\xf4\xe7\x03R\x89lk\x93[\x8b\xbd@\x00\x00\u07d4G\xff\xf4,g\x85Q\xd1A\xebu\xa6\xee9\x81\x17\xdf>J\x8d\x89\x05k\xea\xe5\x1f\xd2\xd1\x00\x00\u07d4H\x01\x0e\xf3\xb8\xe9^?0\x8f0\xa8\xcb\u007fN\xb4\xbf`\xd9e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4H\n\xf5 v\x00\x9c\xa77\x81\xb7\x0eC\xb9Y\x16\xa6\"\x03\xab\x892\x19r\xf4\b=\x87\x80\x00\u07d4H\x0f1\xb9\x891\x1eA$\u01a7F_ZD\tM6\xf9\u04097\x90\xbb\x85Q7d\x00\x00\xe0\x94H\x11\x15)j\xb7\xdbRI/\xf7\xb6G\xd63)\xfb\\\xbck\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d4H\x1e:\x91\xbf\xdc/\x1c\x84(\xa0\x11\x9d\x03\xa4\x16\x01A~\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4H(\xe4\xcb\xe3N\x15\x10\xaf\xb7,+\ueb0aE\x13\xea\xeb\u0649\u0556{\xe4\xfc?\x10\x00\x00\xe0\x94H)\x82\xac\x1f\x1cm\x17!\xfe\xec\u0679\xc9l\xd9I\x80PU\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4H0,1\x1e\xf8\xe5\xdcfAX\xddX<\x81\x19Mn\rX\x89\xb6gl\xe0\xbc\xcb\\\x00\x00\u07d4H;\xa9\x904\xe9\x00\xe3\xae\xdfaI\x9d;+\xce9\xbe\xb7\xaa\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4HT\x8bK\xa6+\xcb/\r4\xa8\x8d\u019ah\x0eS\x9c\xf0F\x89\x05l\xf1\u02fbt2\x00\x00\u07d4Hc\x84\x979&Zc\xb0\xa2\xbf#jY\x13\xe6\xf9Y\xce\x15\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d4He\x9d\x8f\x8c\x9a/\xd4Oh\u06a5]#\xa6\b\xfb\xe5\x00\u0709lk\x93[\x8b\xbd@\x00\x00\xe0\x94Hf\x9e\xb5\xa8\x01\u0637_\xb6\xaaX\xc3E\x1bpX\xc2C\xbf\x8a\x06\x8dB\xc18\u06b9\xf0\x00\x00\u07d4Hjl\x85\x83\xa8D\x84\xe3\xdfC\xa1#\x83\u007f\x8c~#\x17\u0409\x11\x87\xc5q\xab\x80E\x00\x00\u07d4Hz\xdf}p\xa6t\x0f\x8dQ\xcb\xddh\xbb?\x91\u0125\xceh\x89\x03\x9f\xba\xe8\xd0B\xdd\x00\x00\u07d4H~\x10\x85\x02\xb0\xb1\x89\uf70cm\xa4\xd0\xdbba\xee\xc6\xc0\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94H\x88\xfb%\xcdP\u06f9\xe0H\xf4\x1c\xa4}x\xb7\x8a'\xc7\u064a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u0794H\x934\u00b6\x95\xc8\xee\a\x94\xbd\x86B\x17\xfb\x9f\xd8\xf8\xb15\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4H\xa3\r\xe1\xc9\x19\xd3\xfd1\x80\xe9}_+*\x9d\xbd\x96M-\x89\x02b\x9ff\xe0\xc50\x00\x00\u07d4H\xbf\x14\u05f1\xfc\x84\xeb\xf3\xc9k\xe1/{\xce\x01\xaai\xb0>\x89\x06\x81U\xa46v\xe0\x00\x00\u07d4H\xc2\ue465\aV\xd8\u039a\xbe\xebu\x89\xd2,o\xee]\xfb\x89\xae\x8ez\v\xb5u\xd0\x00\x00\u07d4H\xc5\u0197\v\x91a\xbb\x1c{z\xdf\xed\x9c\xde\u078a\x1b\xa8d\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94H\xd2CKz}\xbb\xff\b\";c\x87\xb0]\xa2\xe5\t1&\x8a\x03\xcf\xc8.7\xe9\xa7@\x00\x00\u07d4H\xd4\xf2F\x8f\x96?\u05da\x00a\x98\xbbg\x89]-Z\xa4\u04c9K\xe4\xe7&{j\xe0\x00\x00\u07d4H\xe0\xcb\xd6\u007f\x18\xac\xdbzb\x91\xe1%M\xb3.\trs\u007f\x89\x05k\xe0<\xa3\xe4}\x80\x00\u07d4H\xf6\n5HO\xe7y+\u030a{c\x93\xd0\u0761\xf6\xb7\x17\x89\xc3(\t>a\xee@\x00\x00\u07d4H\xf8\x83\xe5g\xb46\xa2{\xb5\xa3\x12M\xbc\x84\xde\xc7u\xa8\x00\x89)\xd7n\x86\x9d\u0340\x00\x00\xe0\x94I\x01E\xaf\xa8\xb5E\"\xbb!\xf3R\xf0m\xa5\xa7\x88\xfa\x8f\x1d\x8a\x01\xf4lb\x90\x1a\x03\xfb\x00\x00\u07d4I\t\xb3\x19\x98\xea\xd4\x14\xb8\xfb\x0e\x84k\xd5\xcb\xde995\xbe\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4I\x12\xd9\x02\x93\x16v\xff9\xfc4\xfe<<\xc8\xfb!\x82\xfaz\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4I\x13o\xe6\xe2\x8btS\xfc\xb1kk\xbb\u9aac\xba\x837\xfd\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94I\x15a\u06cbo\xaf\xb9\x00~b\xd0P\u0082\xe9,Kk\u020a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4I\x18]\xd7\xc262\xf4lu\x94s\ubb96`\b\xcd5\x98\x89\r\xc5_\xdb\x17d{\x00\x00\u07d4I,\xb5\xf8a\xb1\x87\xf9\xdf!\xcdD\x85\xbe\xd9\vP\xff\xe2-\x89\x1b\x19\xe5\vD\x97|\x00\x00\u07d4I-\xe4j\xaf\x8f\x1dp\x8dY\u05da\xf1\xd0:\xd2\xcb`\x90/\x89lk\x93[\x8b\xbd@\x00\x00\u07d4I.p\xf0M\x18@\x8c\xb4\x1e%`70Pk5\xa2\x87k\x89\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4I:g\xfe#\xde\xccc\xb1\r\xdau\xf3(v\x95\xa8\x1b\u056b\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4I=H\xbd\xa0\x15\xa9\xbf\xcf\x16\x03\x93n\xabh\x02L\xe5Q\xe0\x89\x018\xa3\x88\xa4<\x00\x00\x00\xe0\x94IBV\xe9\x9b\x0f\x9c\xd6\xe5\xeb\xca8\x99\x862R\x90\x01e\u020a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4IM\xecM^\xe8\x8a'q\xa8\x15\xf1\xeerd\x94/\xb5\x8b(\x89lk\x93[\x8b\xbd@\x00\x00\u07d4I[d\x1b\x1c\u07a3b\u00f4\u02fd\x0f\\\xc5\v\x1e\x17k\x9c\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94Ih\xa2\xce\xdbEuU\xa19)Z\xea(wnT\x00<\x87\x8a\x02#\x1a\xef\u0266b\x8f\x00\x00\u07d4Im6U4S\n_\xc1W|\nRA\u02c8\xc4\xdapr\x89a\t=|,m8\x00\x00\xe0\x94In1\x95\x92\xb3A\xea\xcc\xd7x\u0767\xc8\x19mT\xca\xc7u\x8a\x01\xf5q\x89\x87fKH\x00\x00\u07d4IoXC\xf6\xd2L\u064d%^L#\xd1\xe1\xf0#\"uE\x89_\x17\x9f\u0526\xee\t\x80\x00\xe0\x94Ip\u04ec\xf7+[\x1f2\xa7\x00<\xf1\x02\xc6N\xe0TyA\x8a\x1d\xa5jK\b5\xbf\x80\x00\x00\u07d4Iw\xa7\x93\x9d\t9h\x94U\xce&9\xd0\xeeZL\xd9\x10\xed\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4Iy\x19N\xc9\xe9}\xb9\xbe\xe84;|w\xd9\xd7\xf3\xf1\u071f\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4Iy4c\xe1h\x10\x83\u05ab\xd6\xe7%\u057b\xa7E\xdc\xcd\xe8\x89\x1d\x98\xe9LNG\x1f\x00\x00\u07d4I\x81\xc5\xfff\xccN\x96\x80%\x1f\xc4\xcd/\xf9\a\xcb2xe\x89(\xa8WBTf\xf8\x00\x00\u07d4I\x89\u007f\xe92\xbb\xb3\x15L\x95\u04fc\xe6\xd9;ms)\x04\u0749\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4I\x89\xe1\xab^|\xd0\aF\xb3\x93\x8e\xf0\xf0\xd0d\xa2\x02[\xa5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4I\x8a\xbd\xeb\x14\xc2k{r4\xd7\x0f\u03ae\xf3a\xa7m\xffr\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4I\xa6E\xe0f}\xfd{2\xd0u\xcc$g\u074ch\t\a\u0109\a\x06\x01\x95\x8f\u02dc\x00\x00\xe0\x94I\xb7N\x16\x92e\xf0\x1a\x89\xecL\x90r\u0164\xcdr\xe4\xe85\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d4I\xbd\xbc{\xa5\xab\xeb\xb68\x9e\x91\xa3(R \xd3E\x1b\xd2S\x8965\u026d\xc5\u07a0\x00\x00\u07d4I\xc9A\xe0\xe5\x01\x87&\xb7)\x0f\xc4s\xb4q\xd4\x1d\xae\x80\u0449\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94I\xc9w\x1f\xca\x19\u0579\xd2E\u0211\xf8\x15\x8f\xe4\x9fG\xa0b\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4I\xcf\x1eT\xbe61\x06\xb9 r\x9d-\v\xa4o\bg\x98\x9a\x89\x0e\x87?D\x13<\xb0\x00\x00\u07d4I\xd2\u008e\xe9\xbcT^\xaa\xf7\xfd\x14\xc2|@s\xb4\xbb_\x1a\x89O\xe9\xb8\x06\xb4\r\xaf\x00\x00\u07d4I\xdd\xee\x90.\x1d\f\x99\u0471\x1a\xf3\u030a\x96\xf7\x8eM\xcf\x1a\x89\n\u03a5\xe4\xc1\x8cS\x00\x00\u07d4I\xf0(9[Z\x86\xc9\xe0\u007fwxc\x0eL.=7:w\x89\x06\xa7JP8\u06d1\x80\x00\xe0\x94J\x19 5\xe2a\x9b$\xb0p\x9dVY\x0e\x91\x83\xcc\xf2\xc1\u064a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4J@S\xb3\x1d\x0e\xe5\u06ef\xb1\xd0k\u05ec\u007f\xf3\",G\u0589K\xe4\xe7&{j\xe0\x00\x00\u07d4JC\x01p\x15-\xe5\x17&3\u0742b\xd1\a\xa0\xaf\xd9j\x0f\x89\xabM\xcf9\x9a:`\x00\x00\u07d4JG\xfc>\x17\u007fVz\x1e8\x93\xe0\x00\xe3k\xba#R\n\xb8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4JR\xba\xd2\x03W\"\x8f\xaa\x1e\x99k\xedy\f\x93gK\xa7\u0409Hz\x9a0E9D\x00\x00\u07d4JS\xdc\xdbV\xceL\xdc\xe9\xf8.\xc0\xeb\x13\xd6sR\xe7\u020b\x89\u3bb5sr@\xa0\x00\x00\u07d4J_\xae;\x03r\xc20\xc1%\xd6\xd4p\x14\x037\xab\x91VV\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4Jq\x90a\xf5(T\x95\xb3{\x9d~\xf8\xa5\x1b\a\xd6\u6b2c\x89\n\xd4\xc81j\v\f\x00\x00\u07d4Js8\x92\x98\x03\x1b\x88\x16\u0329FB\x1c\x19\x9e\x18\xb3C\u0589\"8h\xb8y\x14o\x00\x00\u07d4Js]\"G\x927m3\x13g\xc0\x93\xd3\x1c\x87\x944\x15\x82\x89f\xff\xcb\xfd^Z0\x00\x00\u07d4Jt\x94\xcc\xe4HU\u0300X(B\xbe\x95\x8a\r\x1c\x00r\ue242\x1a\xb0\xd4AI\x80\x00\x00\u07d4Ju\xc3\xd4\xfao\u033d]\u0567\x03\xc1Sy\xa1\xe7\x83\u9dc9b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x94J\x81\xab\xe4\x98L|k\xefc\u0598 \xe5WC\xc6\x1f \x1c\x8a\x03d\x01\x00N\x9a\xa3G\x00\x00\u07d4J\x82iO\xa2\x9d\x9e!2\x02\xa1\xa2\t(]\xf6\xe7E\xc2\t\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4J\x83\\%\x82LG\xec\xbf\u01d49\xbf?\\4\x81\xaau\u0349K\xe4\xe7&{j\xe0\x00\x00\u07d4J\x91\x802C\x91Y\xbb1[g%\xb6\x83\r\xc86\x97s\x9f\x89\x12\xa3.\xf6x3L\x00\x00\u07d4J\x97\xe8\xfc\xf4c^\xa7\xfc^\x96\xeeQu.\u00c8qk`\x89\x1d\x99E\xab+\x03H\x00\x00\u07d4J\x9a&\xfd\n\x8b\xa1\x0f\x97}\xa4\xf7|1\x90\x8d\xabJ\x80\x16\x89a\t=|,m8\x00\x00\u07d4J\xa1H\xc2\xc34\x01\xe6j+Xnew\u0132\x92\xd3\xf2@\x89\v\xb8`\xb2\x85\xf7t\x00\x00\u07d4J\xa6\x93\xb1\"\xf3\x14H*G\xb1\x1c\xc7|h\xa4\x97\x87ab\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4J\xb2\xd3O\x04\x83O\xbftyd\x9c\xab\x92=,G%\xc5S\x89\xbe\xd1\xd0&=\x9f\x00\x00\x00\u07d4J\xc0vs\xe4/d\xc1\xa2^\xc2\xfa-\x86\xe5\xaa+4\xe09\x89lk\x93[\x8b\xbd@\x00\x00\u07d4J\u016c\xad\x00\v\x88w!L\xb1\xae\x00\xea\u0263}Y\xa0\xfd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4J\u0250ZL\xb6\xab\x1c\xfdbTn\xe5\x91s\x00\xb8|O\u07897\b\xba\xed=h\x90\x00\x00\u07d4J\u03e9\xd9N\xdaf%\xc9\u07e5\xf9\xf4\xf5\xd1\a\xc4\x03\x1f\u07c9\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4J\xd0G\xfa\xe6~\xf1b\xfeh\xfe\xdb\xc2};e\xca\xf1\f6\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4J\xd9]\x18\x8dddp\x9a\xdd%U\xfbM\x97\xfe\x1e\xbf1\x1f\x89\x12\xc1\xb6\xee\xd0=(\x00\x00\u07d4J\xdb\xf4\xaa\xe0\xe3\xefD\xf7\xddM\x89\x85\u03ef\tn\u010e\x98\x89\b!\xab\rD\x14\x98\x00\x00\u07d4J\xe2\xa0M9\t\xefENTL\xcf\xd6\x14\xbf\xef\xa7\x10\x89\xae\x89\x18\x01\x15\x9d\xf1\xee\xf8\x00\x00\xe0\x94J\xe90\x82\xe4Q\x87\xc2a`\xe6g\x92\xf5\u007f\xad5Q\xc7:\x8a\x04\x96\x15 \xda\xff\x82(\x00\x00\u07d4J\xf0\xdb\a{\xb9\xba^D>!\xe1H\xe5\x9f7\x91\x05\u0152\x89 \x86\xac5\x10R`\x00\x00\u07d4K\x06\x19\xd9\u062a1:\x951\xac}\xbe\x04\xca\rjZ\u0476\x89lk\x93[\x8b\xbd@\x00\x00\u07d4K\v\u062c\xfc\xbcS\xa6\x01\v@\xd4\u040d\xdd-\x9dib-\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4K\x19\xeb\f5K\xc199`\xeb\x06\x06;\x83\x92o\rg\xb2\x89\x01\x92t\xb2Y\xf6T\x00\x00\u07d4K)C|\x97\xb4\xa8D\xbeq\u0323\xb6H\xd4\xca\x0f\u075b\xa4\x89\b$q\x984\u03ec\x00\x00\u07d4K1\xbfA\xab\xc7\\\x9a\xe2\u034f\u007f5\x16;n+tPT\x89\x14\xb5P\xa0\x13\xc78\x00\x00\u07d4K:|\u00e7\u05f0\x0e\xd5(\"!\xa6\x02Y\xf2[\xf6S\x8a\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94K:\xab3^\xbb\xfa\xa8p\xccM`^}.t\xc6h6\x9f\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4K\xcd\xc1\x8a`\x00\x00\u07d4K`\xa3\xe2S\xbf8\xc8\xd5f \x10\xbb\x93\xa4s\xc9e\xc3\xe5\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4Kt\xf5\xe5\x8e.\xdfv\xda\xf7\x01Q\x96J\v\x8f\x1d\xe0f<\x89\x11\x90\xaeID\xba\x12\x00\x00\u07d4Kv!f\xdd\x11\x18\xe8Ci\xf8\x04\xc7_\x9c\xd6W\xbfs\f\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4Ky.)h>\xb5\x86\u353b3Rl`\x01\xb3\x97\x99\x9e\x89 \x86\xac5\x10R`\x00\x00\u07d4K\x90N\x93K\xd0\u030b p_\x87\x9e\x90[\x93\xea\f\xcc0\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94K\x92\x06\xbakT\x9a\x1a\u007f\x96\x9e\x1d]\xba\x86u9\xd1\xfag\x8a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4K\x98N\xf2lWn\x81Z.\xae\xd2\xf5\x17\u007f\a\u06f1\xc4v\x89T\x91YV\xc4\t`\x00\x00\u07d4K\x9e\x06\x8f\xc4h\tv\xe6\x15\x04\x91)\x85\xfd\\\xe9K\xab\r\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4K\xa0\xd9\xe8\x96\x01w+IhG\xa2\xbbC@\x18g\x87\xd2e\x8965\u026d\xc5\u07a0\x00\x00\u07d4K\xa5:\xb5I\xe2\x01m\xfa\"<\x9e\u0563\x8f\xad\x91(\x8d\a\x89K\xe4\xe7&{j\xe0\x00\x00\xe0\x94K\xa8\xe0\x11\u007f\xc0\xb6\xa3\xe5k$\xa3\xa5\x8f\xe6\xce\xf4B\xff\x98\x8a\x011\xbe\xb9%\xff\xd3 \x00\x00\u07d4K\xac\x84j\xf4\x16\x9f\x1d\x95C\x1b4\x1d\x88\x00\xb2!\x80\xaf\x1a\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4K\xb6\xd8k\x83\x14\xc2-\x8d7\xeaQm\x00\x19\xf1V\xaa\xe1-\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94K\xb9e\\\xfb*6\xea|cz{\x85\x9bJ1T\xe2n\xbe\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\xe0\x94K\xbc\xbf8\xb3\xc9\x01c\xa8K\x1c\u04a9;X\xb2\xa34\x8d\x87\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94K\xd6\xdd\f\xff#@\x0e\x170\xba{\x89E\x04W}\x14\xe7J\x8a+\xa0\xcc\xdd\xd0\xdfs\xb0\x00\x00\u07d4K\xe8b\x8a\x81T\x87N\x04\x8d\x80\xc1B\x18\x10\"\xb1\x80\xbc\xc1\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4K\xe9\rA!)\u0564\xd0BCa\xd6d\x9dNG\xa6#\x16\x897\b\xba\xed=h\x90\x00\x00\xe0\x94K\xea(\x8e\xeaB\u0115^\xb9\xfa\xad*\x9f\xafG\x83\xcb\u076c\x8a\x06\x18\xbe\x16c\u012fI\x00\x00\u07d4K\xf4G\x97\x99\xef\x82\xee\xa2\tC7OV\xa1\xbfT\x00\x1e^\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4K\xf8\xbf\x1d5\xa211Wd\xfc\x80\x01\x80\x9a\x94\x92\x94\xfcI\x89\x03\x9f\xba\xe8\xd0B\xdd\x00\x00\u07d4K\xf8\xe2oL'\x90\xdae3\xa2\xac\x9a\xba\xc3\u019a\x19\x943\x89\n\u05ce\xbcZ\xc6 \x00\x00\u0794L\n\xcaP\x8b<\xaf^\xe0(\xbcp}\xd1\xe8\x00\xb88\xf4S\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94L\v\x15\x15\xdf\xce\u05e1>\x13\xee\x12\xc0\xf5#\xaePO\x03+\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4L\x13\x98\f2\xdc\xf3\x92\vx\xa4\xa7\x903\x12\x90|\x1b\x12?\x89\x03A\x00\x15\xfa\xae\f\x00\x00\u07d4L\x15y\xaf3\x12\xe4\xf8\x8a\xe9\x95\xcc9W\xd2R\xce\v\xf0\xc8}[O\"4g.p\x89\x87\x86x2n\xac\x90\x00\x00\u07d4LB1y\x82i\x1d\x10\x89\x05k\xc7^-c\x10\x00\x00\u07d4LZ\xfe@\xf1\x8f\xfcH\u04e1\xae\xc4\x1f\u009d\xe1y\xf4\u0497\x89lk\x93[\x8b\xbd@\x00\x00\u07d4L[=\xc0\xe2\xb96\x0f\x91(\x9b\x1f\xe1<\xe1,\x0f\xbd\xa3\xe1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Lfk\x86\xf1\xc5\ue324\x12\x85\xf5\xbd\xe4\xf7\x90R\b\x14\x06\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4Lik\xe9\x9f:i\x04@\xc3CjY\xa7\xd7\xe97\u05ba\r\x89\xbb\x91%T\"c\x90\x00\x00\u07d4Lj$\x8f\xc9}p]\xefI\\\xa2\aY\x16\x9e\xf0\xd3dq\x89)3\x1eeX\xf0\xe0\x00\x00\u07d4Lj\x9d\xc2\u02b1\n\xbb.|\x13p\x06\xf0\x8f\ucd77y\xe1\x89\x1b\r\x04 /G\xec\x00\x00\u07d4Lk\x93\xa3\xbe\xc1cIT\f\xbf\xca\xe9l\x96!\xd6dP\x10\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Lu\x98\x13\xad\x13\x86\xbe\xd2\u007f\xfa\xe9\xe4\x81^60\u0323\x12\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94Lv\f\xd9\xe1\x95\xeeO-k\xce%\x00\xff\x96\xda|C\ue44a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4Lv{e\xfd\x91\x16\x1fO\xbd\xccji\xe2\xf6\xadq\x1b\xb9\x18\x89'\b\x01\xd9F\xc9@\x00\x00\u07d4L~.+w\xad\f\xd6\xf4J\xcb(a\xf0\xfb\x8b(u\x0e\xf9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4L\x85\xed6/$\xf6\xb9\xf0L\xdf\xcc\xd0\"\xaeSQG\u02f9\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4L\x93[\xb2Pw\x8b0\x9b==\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4L\xee\x90\x1bJ\u0231V\xc5\xe2\xf8\xa6\xf1\xbe\xf5r\xa7\xdc\xeb~\x8965\u026d\xc5\u07a0\x00\x00\u07d4L\xef\xbe#\x98\xe4}R\u73743L\x8bivu\U00053b89\xd9o\u0390\u03eb\xcc\x00\x00\u07d4L\xf5S{\x85\x84/\x89\xcf\xee5\x9e\xaeP\x0f\xc4I\xd2\x11\x8f\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94M\bG\x1dh\x00z\xff*\xe2y\xbc^?\xe4\x15o\xbb\xe3\u078a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4M \x01\x10\x12@\b\xd5ov\x98\x12VB\f\x94jo\xf4\\\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4M$\xb7\xacG\xd2\xf2}\xe9\tt\xba=\xe5\xea\xd2\x03TK\u0349\x05k\xc7^-c\x10\x00\x00\u0794M)\xfcR:,\x16)S!!\u0699\x98\u9d6b\x9d\x1bE\x88\xdbD\xe0I\xbb,\x00\x00\u07d4M8\xd9\x0f\x83\xf4Q\\\x03\xccx2j\x15M5\x8b\u0602\xb7\x89\n\ad\a\xd3\xf7D\x00\x00\u07d4ML\xf5\x80t)a^0\xcd\xfa\xce\x1eZ\xaeM\xad0U\xe6\x89 \x86\xac5\x10R`\x00\x00\u07d4MW\xe7\x16\x87l\f\x95\xef^\xae\xbd5\xc8\xf4\x1b\x06\x9bk\xfe\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94Mg\U000ab159\xfe\xf5\xfcA9\x99\xaa\x01\xfd\u007f\xcep\xb4=\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4Mn\x8f\xe1\t\xcc\xd2\x15\x8eM\xb1\x14\x13/\xe7_\xec\u023e[\x89\x01[5W\xf1\x93\u007f\x80\x00\xe0\x94Mq\xa6\xeb=\u007f2~\x184'\x8e(\v\x03\x9e\xdd\xd3\x1c/\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4M|\xfa\xa8L\xb31\x06\x80\n\x8c\x80/\xb8\xaaF8\x96\u0159\x89a\t=|,m8\x00\x00\u07d4M\x80\x10\x93\xc1\x9c\xa9\xb8\xf3B\xe3<\xc9\xc7{\xbdL\x83\x12\u03c9\x12\xb3\xe7\xfb\x95\u0364\x80\x00\u07d4M\x82\x88\x94u/o%\x17]\xaf!w\tD\x87\x95Ko\x9f\x89O!+\xc2\u011c\x83\x80\x00\xe0\x94M\x82\xd7p\f\x12;\xb9\x19A\x9b\xba\xf0Fy\x9ck\x0e,f\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4M\x83m\x9d;\x0e,\xbdM\xe0PYo\xaaI\f\xff\xb6\r]\x89\x10CV\x1a\x88)0\x00\x00\u07d4M\x86\x97\xaf\x0f\xbf,\xa3n\x87h\xf4\xaf\"\x135phZ`\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4M\x92y\x96 )\xa8\xbdEc\x977\xe9\x8bQ\x1e\xff\aL!\x89Hz\x9a0E9D\x00\x00\u07d4M\x93io\xa2HY\xf5\u0493\x9a\xeb\xfaT\xb4\xb5\x1a\xe1\xdc\u0309\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4M\x9cw\xd0u\f^o\xbc$\u007f/\u05d2thl\xb3S\u0589\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4M\xa5\xed\u0188\xb0\xcbb\xe1@=\x17\x00\xd9\u0739\x9f\xfe?\u04c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94M\xa8\x03\ai\x84K\xc3A\x86\xb8\\\xd4\xc74\x88I\xffI\xe9\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4M\xb1\xc4:\x0f\x83M}\x04x\xb8\x96\ag\xec\x1a\xc4L\x9a\xeb\x89/Q\x810V'7\x00\x00\u07d4M\xb2\x12\x84\xbc\xd4\xf7\x87\xa7Ue\x00\xd6\xd7\xd8\xf3f#\xcf5\x89i(7Ow\xa3c\x00\x00\u07d4M\xc3\xda\x13\xb2\xb4\xaf\xd4O]\r1\x89\xf4D\xd4\xdd\xf9\x1b\x1b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4M\u013f^u\x89\xc4{(7\x8du\x03\u03d6H\x80a\u06fd\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4M\xc9\u057bK\x19\xce\u0354\xf1\x9e\xc2] \x0e\xa7/%\xd7\xed\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94M\xcd\x11\x81X\x18\xae)\xb8]\x016sI\xa8\xa7\xfb\x12\xd0k\x8a\x01\xacB\x86\x10\x01\x91\xf0\x00\x00\u07d4M\xcfb\xa3\xde?\x06\x1d\xb9\x14\x98\xfda\x06\x0f\x1fc\x98\xffs\x89lj\xccg\u05f1\xd4\x00\x00\u07d4M\xd11\xc7J\x06\x8a7\xc9\n\xde\xd4\xf3\t\xc2@\x9fdx\u04c9\x15\xaf9\u4ab2t\x00\x00\xe0\x94M\u0767Xk\"7\xb0S\xa7\xf3(\x9c\xf4`\xdcW\xd3z\t\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4M\xe3\xfe4\xa6\xfb\xf64\xc0Q\x99\u007fG\xcc\u007fHy\x1fX$\x89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u07d4M\xf1@\xbaye\x85\xddT\x891[\xcaK\xbah\n\u06f8\x18\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4N\x02\ay\xb5\xdd\xd3\xdf\"\x8a\x00\xcbH\xc2\xfc\x97\x9d\xa6\xae8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4N\v\xd3$s\xc4\xc5\x1b\xf2VT\xde\xf6\x9fy|k)\xa22\x89V\xc9]\xe8\xe8\xca\x1d\x00\x00\u07d4N\"%\xa1\xbbY\xbc\x88\xa21ft\xd33\xb9\xb0\xaf\xcafU\x89\bg\x0e\x9e\xc6Y\x8c\x00\x00\u07d4N#\x10\x19\x1e\xad\x8d;\xc6H\x98s\xa5\xf0\xc2\xeck\x87\u1f8965\u026d\xc5\u07a0\x00\x00\u07d4N#-S\xb3\u6f8f\x89Sa\xd3\x1c4\xd4v+\x12\xc8.\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4N+\xfaJFo\x82g\x1b\x80\x0e\xeeBj\xd0\f\a\x1b\xa1p\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4N>\xda\u0506M\xabd\xca\xe4\xc5Azvw@S\xdcd2\x89 \b\xfbG\x8c\xbf\xa9\x80\x00\u07d4NC\x18\xf5\xe1>\x82JT\xed\xfe0\xa7\xedO&\xcd=\xa5\x04\x89lk\x93[\x8b\xbd@\x00\x00\u07d4N[w\xf9\x06aY\xe6\x15\x93?-\xdatw\xfaNG\xd6H\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94Nf\x00\x80b\x89EJ\u03630\xa2\xa3U`\x10\u07ec\xad\xe6\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4Ns\xcf#y\xf1$\x86\x0fs\xd6\xd9\x1b\xf5\x9a\xcc\\\xfc\x84[\x89\x02,\xa3X|\xf4\xeb\x00\x00\xe0\x94Nz\xa6~\x12\x18>\xf9\xd7F\x8e\xa2\x8a\xd29\xc2\xee\xf7\x1bv\x8a\x01\n\xfc\x1a\xde;N\xd4\x00\x00\xe0\x94N{TGM\x01\xfe\xfd8\x8d\xfc\xd5;\x9ff&$A\x8a\x05\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94N\x89.\x80\x81\xbf6\xe4\x88\xfd\xdb;&0\xf3\xf1\xe8\xda0\u048a\x02\x8a\xba0u$Q\xfc\x00\x00\xe0\x94N\x8amcH\x9c\xcc\x10\xa5\u007f\x88_\x96\xeb\x04\xec\xbbT`$\x8a\x03\xea\xe3\x13\x0e\u0316\x90\x00\x00\u07d4N\x8eG\xae;\x1e\xf5\f\x9dT\xa3\x8e\x14 \x8c\x1a\xbd6\x03\u0089y(\xdb\x12vf\f\x00\x00\u0794N\x90\u03312X\xac\xaa\x9fO\xeb\xc0\xa3B\x92\xf9Y\x91\xe20\x88\xdbD\xe0I\xbb,\x00\x00\u07d4N\xa5n\x11\x12d\x1c\x03\x8d\x05e\xa9\u0096\xc4c\xaf\xef\xc1~\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\xe0\x94N\xa7\x0f\x041?\xaee\xc3\xff\"J\x05\\=-\xab(\xdd\u07ca\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4N\xb1EKW8\x05\u022c\xa3~\xde\xc7\x14\x9aA\xf6\x12\x02\xf4\x89\x10CV\x1a\x88)0\x00\x00\u07d4N\xb8{\xa8x\x8e\xba\r\xf8~[\x9b\xd5\n\x8eE6\x80\x91\xc1\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4N\xbcV)\xf9\xa6\xa6k,\xf36:\u0109\\\x03H\u8fc7\x8967\tlK\xcci\x00\x00\u07d4N\xc7h)^\xea\xba\xfcB\x95\x84\x15\xe2+\xe2\x16\xcd\xe7v\x18\x89\x03;\x1d\xbc9\xc5H\x00\x00\u07d4N\xcc\x19\x94\x8d\xd9\u0347\xb4\xc7 \x1a\xb4\x8eu\x8f(\xe7\xccv\x89\x1b\x1d\xaba\u04ead\x00\x00\u07d4N\xd1M\x81\xb6\v#\xfb%\x05M\x89%\u07e5s\u072eah\x89\x12nr\xa6\x9aP\xd0\x00\x00\xe0\x94N\xe1<\rA \vF\u045d\xee\\K\xce\xc7\x1d\x82\xbb\x8e8\x8a\x01\xab\xee\x13\u033e\ufbc0\x00\u07d4N\xea\xd4\n\xad\x8cs\xef\b\xfc\x84\xbc\n\x92\xc9\t/j6\xbf\x89\x01s\x17\x90SM\xf2\x00\x00\u07d4N\xeb\xe8\f\xb6\xf3\xaeY\x04\xf6\xf4\xb2\x8d\x90\u007f\x90q\x89\xfc\xab\x89lj\xccg\u05f1\xd4\x00\x00\u07d4N\xeb\xf1 ]\f\xc2\f\xeel\u007f\x8f\xf3\x11_V\u050f\xba&\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4N\xf1\xc2\x14c:\xd9\xc0p;N#t\xa2\xe3>>B\x92\x91\x89Hz\x9a0E9D\x00\x00\u07d4N\xfc\xd9\u01df\xb43L\xa6${\n3\xbd\x9c\xc32\b\xe2r\x89Hz\x9a0E9D\x00\x00\xe0\x94O\x06$k\x8dK\u0496a\xf4>\x93v\"\x01\u0486\x93Z\xb1\x8a\x01\x059O\xfcF6\x11\x00\x00\u07d4O\x15+/\xb8e\x9dCwn\xbb\x1e\x81g:\xa8Ai\xbe\x96\x89lk\x93[\x8b\xbd@\x00\x00\u07d4O\x17\u007f\x9dV\x95=\xedq\xa5a\x1f93\"\xc3\x02y\x89\\\x89\rU\uf422\xda\x18\x00\x00\u07d4O\x1a-\xa5JLm\xa1\x9d\x14$\x12\xe5n\x81WA\xdb#%\x89\x05k\xc7^-c\x10\x00\x00\u07d4O#\xb6\xb8\x17\xff\xa5\xc6d\xac\xda\u05db\xb7\xb7&\xd3\n\xf0\xf9\x89_h\xe8\x13\x1e\u03c0\x00\x00\xe0\x94O&i\f\x99+z1*\xb1.\x13\x85\xd9J\xcdX(\x8e{\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4O+G\xe2wZ\x1f\xa7\x17\x8d\xad\x92\x98Z[\xbeI;\xa6\u0589\n\u05ce\xbcZ\xc6 \x00\x00\u07d4O:HT\x91\x11E\xea\x01\xc6D\x04K\xdb.Z\x96\n\x98/\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4O?,g0i\xac\x97\xc2\x026\a\x15)\x81\xf5\xcd`c\xa0\x89 \x86\xac5\x10R`\x00\x00\xe0\x94OJ\x9b\xe1\f\xd5\xd3\xfb]\xe4\x8c\x17\xbe)o\x89V\x90d[\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4OR\xadap\xd2[*.\x85\x0e\xad\xbbRA?\xf20>\u007f\x89\xa4\xccy\x95c\u00c0\x00\x00\u07d4OX\x01\xb1\xeb0\xb7\x12\u0620WZ\x9aq\xff\x96]O4\xeb\x89\x10CV\x1a\x88)0\x00\x00\u07d4O]\xf5\xb9CW\u0794\x86\x04\xc5\x1bx\x93\xcd\xdf`v\xba\xad\x89\xcb\xd4{n\xaa\x8c\xc0\x00\x00\u07d4Od\xa8^\x8e\x9a@I\x8c\fu\xfc\xeb\x037\xfbI\b>^\x8965\u026d\xc5\u07a0\x00\x00\u07d4Og9m%S\xf9\x98x_pN\a\xa69\x19}\u0454\x8d\x89\x10DrR\x1b\xa78\x00\x00\u07d4OmG7\u05e9@8$\x87&H\x86i|\xf7c\u007f\x80\x15\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4Os0\toy\xed&N\xe0\x12\u007f]0\xd2\xf7?!\xcb\u007f\x04\x89\x04\x82\xfe&\f\xbc\xa9\x00\x00\u07d4O\xeeP\xc5\xf9\x88 k\t\xa5sF\x9f\xb1\u0434.\xbbm\u0389l\xee\x06\u077e\x15\xec\x00\x00\u07d4O\xf6v\xe2\u007fh\x1a\x98-\x8f\xd9\xd2\x0ed\x8b=\xce\x05\xe9E\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4O\xf6\u007f\xb8\u007fn\xfb\xa9'\x990\u03fd\x1bz4L\u057a\x8bN\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94PFf\u03891\x17^\x11\xa5\xed\x11\xc1\u072a\x06\xe5\u007fNf\x8a\x02\u007f>\u07f3Nn@\x00\x00\u0794PXM\x92\x06\xa4l\xe1\\0\x11\x17\xee(\xf1\\0\xe6\x0eu\x88\xb9\xf6]\x00\xf6<\x00\x00\xe0\x94PZ3\xa1\x864\xddH\x00i)\x13N\x00\x00\u07d4P\u0286\xb5\xeb\x1d\x01\x87M\xf8\xe5\xf3IE\u051cl\x1a\xb8H\x8965\u026d\xc5\u07a0\x00\x00\u07d4P\u0357\xe97\x8b\\\xf1\x8f\x179c#l\x99Q\xeft8\xa5\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4P\u073c'\xbc\xad\x98@\x93\xa2\x12\xa9\xb4\x17\x8e\xab\xe9\x01ua\x89\a\xe3by\v\\\xa4\x00\x00\u07d4P\xe10#\xbd\x9c\xa9j\xd4\xc5?\xdf\xd4\x10\xcbk\x1fB\v\u07c9\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94P\xe1\xc8\xec\x98A[\xefD&\x18p\x87\x99C{\x86\xe6\xc2\x05\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4P\xf8\xfaK\xb9\xe2g|\x99\nN\xe8\xcep\xdd\x15#%\x1eO\x89\x01i=#\x16Ok\x00\x00\u07d4P\xfb6\xc2q\a\xee,\xa9\xa3#n'F\u0321\x9a\xcekI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4P\xfe\xf2\x96\x95U\x88\u02aet\xc6.\xc3*#\xa4T\xe0\x9a\xb8\x89A\x1d\xff\xab\xc5\a8\x00\x00\u07d4Q\x02\xa4\xa4 w\xe1\x1cX\xdfGs\u3b14F#\xa6m\x9f\x89lp\x15\xfdR\xed@\x80\x00\u07d4Q\x03\x93w\xee\xd0\xc5s\xf9\x86\xc5\xe8\xa9_\xb9\x9aY\xe93\x0f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4Q\x03\xbc\t\x93>\x99!\xfdS\xdcSo\x11\xf0]\rG\x10}\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94Q\x04\xec\xc0\xe30\xdd\x1f\x81\xb5\x8a\xc9\u06f1\xa9\xfb\xf8\x8a<\x85\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4Q\r\x81Y\u0314Wh\xc7E\a\x90\xba\a>\xc0\xd9\xf8\x9e0\x89\x8a\xc7#\x04\x89\xe8\x00\x00\x00\u07d4Q\x0e\xdaV\x01I\x9a\r^\x1a\x00k\xff\xfd\x836r\xf2\xe2g\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Q\x12dF\xab=\x802U~\x8e\xbaeY}u\xfa\u0701\\\x89\x11t\xa5\xcd\xf8\x8b\xc8\x00\x00\xe0\x94Q\x18U}`\r\x05\xc2\xfc\xbf8\x06\xff\xbd\x93\xd0 %\xd70\x8a\x02g\u04ebd#\xf5\x80\x00\x00\u07d4Q\x1e\x0e\xfb\x04\xacN?\xf2\xe6U\x0eI\x82\x95\xbf\xcdV\xff\u0549$=M\x18\"\x9c\xa2\x00\x00\u07d4Q!\x16\x81{\xa9\xaa\xf8C\xd1P|e\xa5\xead\n{\x9e\xec\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4Q&F\ri,q\u026fo\x05WM\x93\x99\x83h\xa27\x99\x89\x02\u0465\x1c~\x00P\x00\x00\u07d4Q'\u007f\xe7\xc8\x1e\xeb\xd2R\xa0=\xf6\x9ak\x9f2n'\"\a\x89\x03@.y\u02b4L\x80\x00\u07d4Q)oPD'\r\x17pvF\x12\x9c\x86\xaa\xd1d^\xad\xc1\x89H|r\xb3\x10\xd4d\x80\x00\xe0\x94Q+\x91\xbb\xfa\xa9\xe5\x81\xefh?\xc9\r\x9d\xb2*\x8fI\xf4\x8b\x8aA\xa5\"8m\x9b\x95\xc0\x00\x00\u07d4Q5\xfb\x87W`\f\xf4tTbR\xf7M\xc0tm\x06&,\x89lk\x93[\x8b\xbd@\x00\x00\u07d4QF2\xef\xbdd,\x04\xdel\xa3B1]@\u0750\xa2\u06e6\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4QKu\x12\u026e^\xa6<\xbf\x11q[c\xf2\x1e\x18\u0496\xc1\x89lj\xccg\u05f1\xd4\x00\x00\u07d4QS\xa0\xc3\u0211(\x81\xbf\x1c5\x01\xbfd\xb4VI\xe4\x82\"\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94QVQ\xd6\xdbO\xaf\x9e\xcd\x10:\x92\x1b\xbb\xbej\xe9p\xfd\u050a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94Q_0\xbc\x90\xcd\xf4W~\xe4}e\u05c5\xfb\xe2\xe87\u01bc\x8a\x02'\x1b^\x01\x8b\xa0X\x00\x00\u07d4Q`\xeda.\x1bH\xe7??\xc1[\xc42\x1b\x8f#\xb8\xa2K\x89\x1e\x82kB(e\xd8\x00\x00\u07d4Qa\xfdI\xe8G\xf6tU\xf1\u023bz\xbb6\xe9\x85&\r\x03\x89A\rXj \xa4\xc0\x00\x00\u07d4QiT\x02_\xca&\b\xf4}\xa8\x1c!^\xed\xfd\x84J\t\xff\x89\x14\xb5P\xa0\x13\xc78\x00\x00\u07d4Qi\xc6\n\xeeL\xee\u0444\x9a\xb3mfL\xff\x97\x06\x1e\x8e\xa8\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4Q|uC\r\xe4\x01\xc3A\x03&\x86\x11'\x90\xf4mM6\x9e\x89\x15\b\x94\xe8I\xb3\x90\x00\x00\u07d4Q|\xd7`\x8e]\r\x83\xa2kq\u007f6\x03\xda\xc2'}\u00e4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Q\x86]\xb1H\x88\x19Q\xf5\x12Qq\x0e\x82\xb9\xbe\r~\xad\xb2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Q\x89\x1b,\xcd\xd2\xf5\xa4K*\x8b\u011a]\x9b\xcadw%\x1c\x89\x10\xce\x1d=\x8c\xb3\x18\x00\x00\u07d4Q\x8c\xef'\xb1\x05\x82\xb6\xd1OiH=\u06a0\xdd<\x87\xbb\\\x89 \x86\xac5\x10R`\x00\x00\u07d4Q\xa6\xd6'\xf6j\x89#\u060d`\x94\xc4qS\x80\xd3\x05|\xb6\x89>s\xd2z5\x94\x1e\x00\x00\u07d4Q\xa8\xc2\x166\x02\xa3.\xe2L\xf4\xaa\x97\xfd\x9e\xa4\x14QiA\x89\x03h\xf7\xe6\xb8g,\x00\x00\u07d4Q\xb4u\x8e\x9e\x14P\xe7\xafBh\xc3\u01f1\xe7\xbdo\\uP\x8965\u026d\xc5\u07a0\x00\x00\u07d4Q\u028b\xd4\xdcdO\xacG\xafgUc\u0540J\r\xa2\x1e\xeb\x89*\xb7\xb2`\xff?\xd0\x00\x00\u07d4Q\xd2K\xc3so\x88\xddc\xb7\" &\x88f0\xb6\ub1cd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Q\u05cb\x17\x8dp~9n\x87\x10\x96\\OA\xb1\xa1\xd9\x17\x9d\x89\x05\xfe\xe2\"\x04\x1e4\x00\x00\u07d4Q\xe3/\x14\xf4\xca^(|\xda\xc0W\xa7y^\xa9\xe0C\x99S\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4Q\xe4?\xe0\xd2\\x(`\xaf\x81\xea\x89\xddy<\x13\xf0\u02f1\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4Q\xe7\xb5\\/\x98 \xee\xd78\x846\x1bPf\xa5\x9boE\u0189lk\x93[\x8b\xbd@\x00\x00\xe0\x94Q\xea\x1c\t4\xe3\xd0@\"\ud715\xa0\x87\xa1P\xefp^\x81\x8a\x01Tp\x81\xe7\"M \x00\x00\u07d4Q\xee\f\xca;\xcb\x10\xcd>\x987\"\xce\xd8I=\x92l\bf\x8965f3\xeb\xd8\xea\x00\x00\xe0\x94Q\xf4f:\xb4O\xf7\x93E\xf4'\xa0\xf6\xf8\xa6\u0225?\xf24\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4Q\xf5^\xf4~dV\xa4\x18\xab2\xb9\"\x1e\xd2}\xbaf\b\xee\x89\u3bb5sr@\xa0\x00\x00\xe0\x94Q\xf9\xc42\xa4\xe5\x9a\xc8b\x82\u05ad\xabL.\xb8\x91\x91`\xeb\x8ap;[\x89\u00e6\xe7@\x00\x00\u07d4R\x0ff\xa0\xe2e\u007f\xf0\xacA\x95\xf2\xf0d\xcf/\xa4\xb2BP\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4R\x10#T\xa6\xac\xa9]\x8a.\x86\xd5\u07bd\xa6\xdei4`v\x89lk\x93[\x8b\xbd@\x00\x00\u07d4R\x13\xf4Y\xe0x\xad:\xb9Z\t #\x9f\xcf\x163\xdc\x04\u0289\x8c\xf2\x18|*\xfb\x18\x80\x00\u07d4R\x15\x18;\x8f\x80\xa9\xbc\x03\xd2l\xe9\x12\a\x83*\r9\xe6 \x8965\u026d\xc5\u07a0\x00\x00\xe0\x94R!Cx\xb5@\x04\x05j|\xc0\x8c\x89\x13'y\x8a\u01b2H\x8a\x037\xfe_\xea\xf2\u0440\x00\x00\xe0\x94R##\xaa\xd7\x1d\xbc\x96\xd8Z\xf9\x0f\bK\x99\xc3\xf0\x9d\ucdca\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4R>\x14\r\xc8\x11\xb1\x86\xde\xe5\xd6\u020b\xf6\x8e\x90\xb8\xe0\x96\xfd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4R?mdi\x0f\xda\u0354(SY\x1b\xb0\xff \xd3em\x95\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4RO\xb2\x10R,^#\xbbg\u07ff\x8c&\xaaam\xa4\x99U\x8965b\xa6m4#\x80\x00\u07d4RU\xdci\x15ZE\xb9p\xc6\x04\xd3\x00G\xe2\xf50i\x0e\u007f\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4R`\xdcQ\xee\a\xbd\u06ab\xab\xb9\xeetK9<\u007fG\x93\xa6\x89\x01\xd8f_\xa5\xfaL\x00\x00\u07d4Rg\xf4\xd4\x12\x92\xf3p\x86<\x90\u05d3)i\x03\x846%\u01c9K\xe4\xe7&{j\xe0\x00\x00\u07d4Rk\xb53\xb7n \xc8\xee\x1e\xbf\x12?\x1e\x9f\xf4\x14\x8e@\xbe\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4Rl\xb0\x9c\u3b63g.\xec\x1d\xebF [\xe8\x9aKV>\x89\x85\xcaa[\xf9\xc0\x10\x00\x00\u07d4Rs\x8c\x90\xd8`\xe0L\xb1/I\x8d\x96\xfd\xb5\xbf6\xfc4\x0e\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4Rz\x8c\xa1&\x863\xa6\xc99\xc5\xde\x1b\x92\x9a\ue4ae\xac\x8d\x890\xca\x02O\x98{\x90\x00\x00\u07d4R\x81\x01\xceF\xb7 \xa2!M\u036ef\x18\xa51w\xff\xa3w\x89\x1b\x96\x12\xb9\xdc\x01\xae\x00\x00\xe0\x94R\x81s4s\xe0\r\x87\xf1\x1e\x99U\u5275\x9fJ\u008ez\x8a\x8b\xd6/\xf4\xee\xc5Y \x00\x00\u07d4R\x98\xab\x18*\x195\x9f\xfc\xec\xaf\xd7\u0475\xfa!-\xed\xe6\u0749\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4R\x9a\xa0\x02\u0196*:\x85E\x02\u007f\u0630_\"\xb5\xbf\x95d\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4R\x9e\x82O\xa0rX+@2h:\xc7\xee\xcc\x1c\x04\xb4\xca\xc1\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94R\xa5\xe4\xdeC\x93\xee\xcc\xf0X\x1a\xc1\x1bR\u0183\xc7n\xa1]\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4R\xb4%|\xf4\x1bn(\x87\x8dP\xd5{\x99\x91O\xfa\x89\x87:\x89\xd5\r\u026a,Aw\x00\x00\u07d4R\xb8\xa9Y&4\xf70\v|\\Y\xa34[\x83_\x01\xb9\\\x89lk\x93[\x8b\xbd@\x00\x00\u07d4R\xbd\u066fYx\x85\v\xc2A\x10q\x8b7#u\x9bC~Y\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4R\xcd @;\xa7\xed\xa6\xbc0z=c\xb5\x91\x1b\x81|\x12c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794R\u04c0Q\x1d\xf1\x9d^\u0080{\xbc\xb6vX\x1bg\xfd7\xa3\x88\xb9\xf6]\x00\xf6<\x00\x00\xe0\x94R\xe1s\x13P\xf9\x83\xcc,A\x89\x84/\xde\x06\x13\xfa\xd5\f\xe1\x8a\x02w\x01s8\xa3\n\xe0\x00\x00\u07d4R\xe4g\x832\x9av\x93\x01\xb1u\x00\x9d4gh\xf4\xc8~\xe4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4R\xf0X\xd4aG\xe9\x00m)\xbf,\t0J\xd1\xcd\xddn\x15\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4R\xf1T#2<$\xf1\x9a\xe2\xabg7\x17\"\x9d?t}\x9b\x897\xa04\xcb\xe8\xe3\xf3\x80\x00\u07d4R\xf8\xb5\t\xfe\xe1\xa8t\xabo\x9d\x876\u007f\xbe\xaf\x15\xac\x13\u007f\x8965\u026d\xc5\u07a0\x00\x00\u07d4R\xfbF\xac]\x00\xc3Q\x8b,:\x1c\x17}D/\x81eU_\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4S\x00w\xc9\xf7\xb9\a\xff\x9c\xec\fw\xa4\x1ap\xe9\x02\x9a\xddJ\x89lk\x93[\x8b\xbd@\x00\x00\u07d4S\x03\x19\xdb\n\x8f\x93\xe5\xbb}M\xbfH\x161O\xbe\xd86\x1b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4S\x04}\u022c\x90\x83\xd9\x06r\xe8\xb3G<\x10\f\xcd'\x83#\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4S\va\xe4/9Bm$\b\xd4\bR\xb9\xe3J\xb5\xeb\xeb\u0149\x0e~\xeb\xa3A\vt\x00\x00\u07d4S\x0f\xfa\u00fc4\x12\xe2\xec\x0e\xa4{y\x81\xc7p\xf5\xbb/5\x89\a?u\u0460\x85\xba\x00\x00\u07d4S\x17\xec\xb0#\x05,\xa7\xf5e+\xe2\xfa\x85L\xfeEc\xdfM\x89\x1b\x1a\xb3\x19\xf5\xecu\x00\x00\u07d4S\x19M\x8a\xfa>\x885\x02v~\xdb\xc3\x05\x86\xaf3\xb1\x14\u04c9lk\x93[\x8b\xbd@\x00\x00\u07d4S*}\xa0\xa5\xadt\aF\x8d;\xe8\xe0~i\xc7\xddd\xe8a\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4S-2\xb0\x0f0[\xcc$\xdc\xefV\x81}b/4\xfb,$\x89a\x94\x04\x9f0\xf7 \x00\x00\u07d4S4DX@\x82\xeb\xa6T\xe1\xad0\xe1Is\\o{\xa9\"\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4S8\xefp\xea\xc9\u075a\xf5\xa0P;^\xfa\xd1\x03\x9eg\xe7%\x89\x90\xf54`\x8ar\x88\x00\x00\xe0\x94S9oJ&\u00b4`D\x960lTB\xe7\xfc\xba'.6\x8a\x04?/\b\xd4\x0eZ\xfc\x00\x00\xe0\x94S:s\xa4\xa2\"\x8e\xee\x05\xc4\xff\xd7\x18\xbb\xf3\xf9\xc1\xb1)\xa7\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4S<\x06\x92\x8f\x19\u0429V\xcc(\x86k\xf6\xc8\xd8\xf4\x19\x1a\x94\x89\x0f\xd8\xc1C8\xe60\x00\x00\u07d4S@e6\x1c\xb8T\xfa\xc4+\xfb\\\x9f\xcd\xe0`J\xc9\x19\u0689lk\x93[\x8b\xbd@\x00\x00\u07d4SC\u007f\xec\xf3J\xb9\xd45\xf4\u07b8\xca\x18\x15\x19\xe2Y 5\x89\n1\x06+\xee\xedp\x00\x00\u07d4SR\x01\xa0\xa1\xd74\"\x80\x1fU\xde\xd4\u07ee\xe4\xfb\xaan;\x89\x02&!\x1fy\x15B\x80\x00\xe0\x94S`\x81\x05\xceK\x9e\x11\xf8k\xf4\x97\xff\xca;x\x96{_\x96\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4SnM\x80)\xb7?Uy\u0723>p\xb2N\xba\x89\xe1\x1d~\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4Sp\rS%MC\x0f\"x\x1aJv\xa4c\x93;]k\b\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94S\u007f\x9dM1\xefp\x83\x9d\x84\xb0\xd9\u0377+\x9a\xfe\xdb\xdf5\x8a\x0e\u04b5%\x84\x1a\xdf\xc0\x00\x00\xe0\x94S\x81D\x85\x03\xc0\xc7\x02T+\x1d\xe7\xcc_\xb5\xf6\xab\x1c\xf6\xa5\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94S\x94.yI\xd6x\x8b\xb7\x80\xa7\xe8\xa0y'\x81\xb1aK\x84\x8a\x03]\xebFhO\x10\xc8\x00\x00\u07d4S\x95\xa4E]\x95\xd1x\xb4S*\xa4r[\x19?\xfeQ)a\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94S\x98\x9e\xd30V?\xd5}\xfe\u027d4<7`\xb0y\x93\x90\x8a\x01P\x89N\x84\x9b9\x00\x00\x00\u07d4S\xa2Dg(\x95H\x0fJ+\x1c\xdf}\xa5\xe5\xa2B\xecM\xbc\x8965\u026d\xc5\u07a0\x00\x00\u07d4S\xa7\x14\xf9\x9f\xa0\x0f\xefu\x8e#\xa2\xe7F2m\xad$|\xa7\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4S\xaf2\xc2/\uf640?\x17\x8c\xf9\v\x80/\xb5q\xc6\x1c\xb9\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4S\xc0\xbb\u007f\u020e\xa4\"\xd2\xef~T\x0e-\x8f(\xb1\xbb\x81\x83\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94S\xc5\xfe\x01\x19\xe1\xe8Hd\f\xee0\xad\ua594\x0f*]\x8b\x8a\x04\x9a\xda_\xa8\xc1\f\x88\x00\x00\u07d4S\xc9\xec\xa4\ts\xf6;\xb5\x92{\xe0\xbcj\x8a\x8b\xe1\x95\x1ft\x89lk\x93[\x8b\xbd@\x00\x00\u07d4S\u0388\xe6lZ\xf2\U0009bf4fY*V\xa3\xd1_ l2\x89\a\xa2\x8c1\xcc6\x04\x00\x00\u07d4S\xce\xc6\u0200\x92\xf7V\xef\xe5o}\xb1\x12(\xa2\xdbE\xb1\"\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4S\xe3[\x12#\x1f\x19\xc3\xfdwL\x88\xfe\xc8\xcb\xee\xdf\x14\b\xb2\x89\x1b\xc1mgN\xc8\x00\x00\x00\u07d4S\xe4\xd9im\xcb?M{?p\u072aN\xec\xb7\x17\x82\xff\\\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4S\xfa\xf1e\xbe\x03\x1e\xc1\x830\xd9\xfc\xe5\xbd\x12\x81\xa1\xaf\b\u06c9\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4T\n\x18\x19\xbd|5\x86\x1ey\x18\x04\xe5\xfb\xb3\xbc\x97\u026b\xb1\x89N\xd7\xda\xc6B0 \x00\x00\xe0\x94T\f\a(\x02\x01N\xf0\xd5a4Z\xecH\x1e\x8e\x11\xcb5p\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94T\f\xf2=\xd9\\MU\x8a'\x9dw\x8d+75\xb3\x16A\x91\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4T\x10`\xfcX\xc7P\xc4\x05\x12\xf83i\xc0\xa63@\xc1\"\xb6\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4T\x13\xc9\u007f\xfaJn*{\xba\x89a\u071f\u03850\xa7\x87\u05c965\u026d\xc5\u07a0\x00\x00\u07d4T\x1d\xb2\n\x80\xcf;\x17\xf1b\x1f\x1b?\xf7\x9b\x88/P\xde\xf3\x8965\u026d\xc5\u07a0\x00\x00\u07d4T.\x80\x96\xba\xfb\x88\x16&\x06\x00.\x8c\x8a>\u0458\x14\xae\xac\x89lk\x93[\x8b\xbd@\x00\x00\u07d4T1\v:\xa8\x87\x03\xa7%\u07e5}\xe6\xe6F\x93Qd\x80,\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4T1\xb1\u0447Q\xb9\x8f\xc9\u220a\xc7u\x9f\x155\xa2\xdbG\x89lk\x93[\x8b\xbd@\x00\x00\u07d4T1\xcaB~ae\xa6D\xba\xe3&\xbd\tu\n\x17\x8ce\r\x89lk\x93[\x8b\xbd@\x00\x00\u07d4T5\xc6\xc1y3\x17\xd3,\xe1;\xbaLO\xfe\xb9s\xb7\x8a\u0709\r\x8ek\x1c\x12\x85\xef\x00\x00\xe0\x94T6)\xc9\\\xde\xf4(\xad7\xd4S\u02958\xa9\xf9\t\x00\xac\x8a\t(\x96R\x9b\xad\u0708\x00\x00\u07d4T9\x1bM\x17mGl\xea\x16N_\xb55\u0197\x00\xcb%5\x89\x05l\xd5_\xc6M\xfe\x00\x00\xe0\x94T:\x8c\x0e\xfb\x8b\xcd\x15\xc5C\u29a4\xf8\aYv1\xad\xef\x8a\x01?\x80\xe7\xe1O-D\x00\x00\u07d4T?\x8cgN$b\xd8\xd5\u06a0\xe8\x01\x95\xa8p\x8e\x11\xa2\x9e\x89\x03wX\x83;:z\x00\x00\xe0\x94TK[5\x1d\x1b\xc8.\x92\x97C\x99H\xcfHa\xda\u026e\x11\x8a\x04\xa8\x9fT\xef\x01!\xc0\x00\x00\u07d4TM\xdaB\x1d\xc1\xebs\xbb$\xe3\xe5j$\x80\x13\xb8|\x0fD\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4TW\\1\x14u\x1e\x14o\xfe\u00c7nE\xf2\x0e\xe8AJ\u07ba\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4T\xb4B\x9b\x18/\x03w\xbe~bi9\xc5\xdbd@\xf7]z\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4T\xbc\xb8\xe7\xf7<\xda=s\xf4\u04cb-\bG\xe6\x00\xba\r\xf8\x89:pAX\x82\xdf\x18\x00\x00\u07d4T\xc9>\x03\xa9\xb2\xe8\xe4\xc3g(5\xa9\xeev\xf9a[\xc1N\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4T\u0388'YV\xde\xf5\xf9E\x8e;\x95\xde\xca\xcdH@!\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4T\xdb^\x06\xb4\x81]1\xcbV\xa8q\x9b\xa3:\xf2\xd7>rR\x89$R\x1e*0\x17\xb8\x00\x00\xe0\x94T\xe0\x12\x83\u030b8E8\xdddgp\xb3W\xc9`\xd6\xca\u034a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4T\xecs\x00\xb8\x1a\xc8C3\xed\x1b\x03<\xd5\u05e39r\xe24\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4T\xfe\xbc\xce \xfez\x90\x98\xa7U\xbd\x90\x98\x86\x02\xa4\x8c\b\x9e\x89\"\xb1\xc8\xc1\"z\x00\x00\x00\u07d4U\n\xad\xae\x12!\xb0z\xfe\xa3\x9f\xba.\xd6.\x05\u5df5\xf9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4U\f0o\x81\xef]\x95\x80\xc0l\xb1\xab \x1b\x95\xc7H\xa6\x91\x89$\x17\xd4\xc4p\xbf\x14\x00\x00\xe0\x94U\x19\x99\xdd\xd2\x05V3'\xb9\xb50xZ\xcf\xf9\xbcs\xa4\xba\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4U\x1ew\x84w\x8e\xf8\xe0H\xe4\x95\xdfI\xf2aO\x84\xa4\xf1\u0709 \x86\xac5\x10R`\x00\x00\xe0\x94U)\x83\na\xc1\xf1<\x19~U\v\xed\xdf\u05bd\x19\\\x9d\x02\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4U)\x87\xf0e\x1b\x91[.\x1eS(\xc1!\x96\rK\xddj\xf4\x89a\t=|,m8\x00\x00\u07d4U;k\x1cW\x05\x0e\x88\xcf\f1\x06{\x8dL\xd1\xff\x80\xcb\t\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4U?7\xd9$fU\x0e\x9f\xd7u\xaet6-\xf00\x17\x912\x89lk\x93[\x8b\xbd@\x00\x00\u07d4UC6\xeeN\xa1U\xf9\xf2O\x87\xbc\xa9\xcar\xe2S\xe1,\u0489\x05k\xc7^-c\x10\x00\x00\u0794UC\xddm\x16\x9e\xec\x8a!;\xbfz\x8a\xf9\xff\xd1]O\xf7Y\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4UG\xfd\xb4\xae\x11\x95>\x01)+x\a\xfa\x92#\xd0\xe4`j\x89\x05]\x11}\xcb\x1d&\x00\x00\u07d4UR\xf4\xb3\xed>\x1d\xa7\x9a/x\xbb\x13\xe8\xaeZh\xa9\xdf;\x8965\u026d\xc5\u07a0\x00\x00\u07d4U\\\xa9\xf0\\\xc14\xabT\xae\x9b\xea\x1c?\xf8z\xa8Q\x98\u0289\x05k\xc7^-c\x10\x00\x00\xe0\x94U]\x8d<\xe1y\x8a\u0290'T\xf1d\xb8\xbe*\x022\x9cl\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4U]\xf1\x93\x90\xc1m\x01)\x87r\xba\xe8\xbc:\x11R\x19\x9c\xbd\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4U^\xbe\x84\u06a4+\xa2V\xeax\x91\x05\xce\u0136\x93\xf1/\x18\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94U\u007f^e\xe0\xda3\x99\x82\x19\xadN\x99W\x05E\xb2\xa9\xd5\x11\x8a\x02U\x9c\xbb\x98XB@\x00\x00\u07d4U\x83` h\x83\xdd\x1bmJYc\x9eV)\xd0\xf0\xc6u\u0409lk\x93[\x8b\xbd@\x00\x00\u07d4U\x84B0P\xe3\xc2\x05\x1f\v\xbd\x8fD\xbdm\xbc'\xec\xb6,\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4U\x85)CI)p\xf8\xd6)\xa1Sf\xcd\xda\x06\xa9OE\x13\x89lk\x93[\x8b\xbd@\x00\x00\u0794U\x86d\x86\xec\x16\x8fy\xdb\xe0\u1af1\x88d\u0649\x91\xae,\x88\xdfn\xb0\xb2\xd3\xca\x00\x00\u07d4U\x8cTd\x9a\x8an\x94r+\xd6\xd2\x1d\x14qOqx\x054\x89lk\x93[\x8b\xbd@\x00\x00\u07d4U\x91\x940O\x14\xb1\xb9:\xfeDO\x06$\xe0S\xc2:\x00\t\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4U\x93\xc9\u0536ds\x0f\xd9<\xa6\x01Q\xc2\\.\xae\xd9<;\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4U\x97\x06\xc32\xd2\ay\xc4_\x8am\x04ji\x91Y\xb7I!\x89\x14\x9bD.\x85\xa3\u03c0\x00\u07d4U\x98\xb3\xa7\x9aH\xf3+\x1f_\xc9\x15\xb8{d]\x80]\x1a\xfe\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4U\xa3\xdfW\xb7\xaa\xec\x16\xa1b\xfdS\x16\xf3[\xec\b(!\u03c9j\xcb=\xf2~\x1f\x88\x00\x00\u07d4U\xa4\xca\xc0\u02cbX-\x9f\xef8\xc5\xc9\xff\xf9\xbdS\t=\x1f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4U\xa6\x1b\x10\x94\x80\xb5\xb2\xc4\xfc\xfd\xef\x92\xd9\x05\x84\x16\f\r5\x89\x02lVM+S\xf6\x00\x00\u07d4U\xaa]1>\xbb\bM\xa0\xe7\x80\x10\x91\u2792\xc5\xde\u00ea\x89lk\x93[\x8b\xbd@\x00\x00\u07d4U\xab\x99\xb0\xe0\xe5]{\xb8t\xb7\xcf\xe84\xdec\x1c\x97\xec#\x897\xe9\x8c\xe3h\x99\xe4\x00\x00\u07d4U\xaf\t/\x94\xbajy\x91\x8b\f\xf99\xea\xb3\xf0\x1b?Q\u01c9\b \xd5\xe3\x95v\x12\x00\x00\u07d4U\xc5dfAf\xa1\xed\xf3\x91>\x01i\xf1\xcdE\x1f\xdb]\f\x89\x82\x17\xeaIP\x8el\x00\x00\xe0\x94U\xcaj\xbey\xea$\x97\xf4o\u06f804`\x10\xfeF\x9c\xbe\x8a\x016\x9f\xb9a(\xacH\x00\x00\u07d4U\xca\xffK\xba\x04\xd2 \u0265\xd2\x01\x86r\xec\x85\xe3\x1e\xf8>\x89lk\x93[\x8b\xbd@\x00\x00\u07d4U\xd0W\xbc\xc0K\xd0\xf4\xaf\x96BQ:\xa5\t\v\xb3\xff\x93\xfe\x89;\xfeE,\x8e\xddL\x00\x00\u07d4U\xd4.\xb4\x95\xbfF\xa64\x99{_.\xa3b\x81I\x18\u2c09\x05\xc0\xd2e\xb5\xb2\xa8\x00\x00\u07d4U\u069d\xcd\xcaa\xcb\xfe\x1f\x13<{\xce\xfc\x86{\x9c\x81\"\xf9\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4U\xe2 \x87bb\xc2\x18\xafOVxG\x98\xc7\xe5]\xa0\x9e\x91\x89\a=\x99\xc1VE\xd3\x00\x00\u07d4U\xfd\b\u0440d\xbd ,\x0e\xc3\xd2\xcc\xe0\xce\v\x9d\x16\x9cM\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4V\x00s\nU\xf6\xb2\x0e\xbd$\x81\x1f\xaa=\xe9m\x16b\xab\xab\x89e\xea=\xb7UF`\x00\x00\u07d4V\x03$\x1e\xb8\xf0\x8fr\x1e4\x8c\x9d\x9a\xd9/H\u342a$\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4V\x056yJ\x9e+\x00I\xd1\x023\xc4\x1a\xdc_A\x8a&J\x8965\u026d\xc5\u07a0\x00\x00\u07d4V\aY\x00Y\xa9\xfe\xc1\x88\x11I\xa4K6\x94\x9a\xef\x85\xd5`\x89lk\x93[\x8b\xbd@\x00\x00\u07d4V\v\xec\xdfR\xb7\x1f=\x88'\xd9'a\x0f\x1a\x98\x0f3qo\x89\x17GMp_V\u0400\x00\xe0\x94V\r\xa3~\x95m\x86/\x81\xa7_\u0540\xa7\x13\\\x1b$cR\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94V\x0f\xc0\x8d\a\x9f\x04~\xd8\xd7\xdfuU\x1a\xa55\x01\xf5p\x13\x8a\x01\x9b\xff/\xf5yh\xc0\x00\x00\u07d4V\x1b\xe9)\x9b>k>c\xb7\x9b\t\x16\x9d\x1a\x94\x8a\xe6\xdb\x01\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94V \xe3\xedy-/\x185\xfe_UA}Q\x11F\fj\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4V \xf4m\x14Q\xc25=bC\xa5\u0534'\x13\v\xe2\xd4\a\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94V!\x05\xe8+\t\x975\xdeI\xf6&\x92\u0307\xcd8\xa8\xed\u034a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94V*\x8d\u02fe\xee\xf7\xb3`h]'0;\u059e\tJ\xcc\xf6\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4V+\xce\u04ca\xb2\xabl\b\x0f;\x05A\xb8Enp\x82K?\x89\"\xca5\x87\xcfN\xb0\x00\x00\xe0\x94V+\xe9Z\xba\x17\xc57\x1f\u2e82\x87\x99\xb1\xf5]!w\u058a\b\x16\xd3~\x87\xb9\xd1\xe0\x00\x00\u07d4V/\x16\u05da\xbf\xce\u00d4>4\xb2\x0f\x05\xf9{\xdf\u0366\x05\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4V7=\xaa\xb4c\x16\xfd~\x15v\xc6\x1ej\xff\xcbeY\xdd\u05c9\v\xacq]\x14l\x9e\x00\x00\u07d4V9v8\xbb<\xeb\xf1\xf6 byK^\xb9B\xf9\x16\x17\x1d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4V:\x03\xab\x9cV\xb6\x00\xf6\xd2[f\f!\xe1c5Qzu\x8965\u026d\xc5\u07a0\x00\x00\u07d4V<\xb8\x80<\x1d2\xa2['\xb6A\x14\x85+\xd0M\x9c \u0349\v\x14\x9e\xad\n\xd9\xd8\x00\x00\u07d4VXc\x91\x04\fW\xee\xc6\xf5\xaf\xfd\x8c\u052b\xde\x10\xb5\n\u0309\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4Vl\x10\xd68\u8e0bG\xd6\xe6\xa4\x14Iz\xfd\xd0\x06\x00\u0509\x05k9Bc\xa4\f\x00\x00\u07d4Vl(\xe3L8\b\xd9vo\xe8B\x1e\xbfO+\x1cO}w\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4V\x8d\xf3\x18Vi\x9b\xb5\xac\xfc\x1f\xe1\u0580\u07d9`\xcaCY\x89J\xcfUR\xf3\xb2I\x80\x00\u07d4V\x91\xdd/gE\xf2\x0e\"\xd2\xe1\u0479U\xaa)\x03\xd6VV\x89j\xc5\xc6-\x94\x86\a\x00\x00\u07d4V\xa1\xd6\r@\xf5\u007f0\x8e\xeb\xf0\x87\xde\xe3\xb3\u007f\x1e|,\xba\x89>\u072e\xc8-\x06\xf8\x00\x00\u07d4V\xac \xd6;\xd8\x03Y\\\xec\x03m\xa7\xed\x1d\xc6n\n\x9e\a\x89\x03w*S\xcc\xdce\x80\x00\u07d4V\xb6\xc2=\xd2\uc434r\x8f;\xb2\xe7d\xc3\xc5\f\x85\xf1D\x8965\u026d\xc5\u07a0\x00\x00\u07d4V\xdf\x05\xba\xd4l?\x00\xaeGn\xcf\x01{\xb8\xc8w8?\xf1\x89\n\xb1]\xaa\xefp@\x00\x00\u07d4V\xee\x19\u007fK\xbf\x9f\x1b\x06b\xe4\x1c+\xbd\x9a\xa1\xf7\x99\xe8F\x8965\u026d\xc5\u07a0\x00\x00\u07d4V\xf4\x93\xa3\xd1\b\xaa\xa2\u044d\x98\x92/\x8e\xfe\x16b\u03f7=\x89m\x81!\xa1\x94\xd1\x10\x00\x00\u07d4V\xfc\x1a{\xad@G#|\xe1\x16\x14b\x96#\x8e\a\x8f\x93\xad\x89\t\xa6?\b\xeac\x88\x00\x00\u07d4V\xfe\xbf\x9e\x10\x03\xaf\x15\xb1\xbdI\a\xec\b\x9aJ\x1b\x91\xd2h\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4W\x17\u0313\x01Q\x1dJ\x81\xb9\xf5\x83\x14\x8b\xee\xd3\xd3\u0303\t\x89\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\u07d4W\x17\xf2\xd8\xf1\x8f\xfc\xc0\xe5\xfe$}:B\x19\x03|:d\x9c\x89\u063beI\xb0+\xb8\x00\x00\u07d4W\x19P\xea,\x90\xc1B}\x93\x9da\xb4\xf2\xdeL\xf1\u03ff\xb0\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4W\x19\xf4\x9br\r\xa6\x88V\xf4\xb9\xe7\b\xf2VE\xbd\xbcKA\x89\"\xb1\xc8\xc1\"z\x00\x00\x00\u07d4W*\xc1\xab\xa0\xde#\xaeA\xa7\xca\xe1\xdc\bB\u062b\xfc\x10;\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94W-\xd8\xcd?\xe3\x99\xd1\xd0\xec(\x121\xb7\xce\xfc \xb9\u4eca\x023\xc8\xfeBp>\x80\x00\x00\xe0\x94WI!\x83\x8c\xc7}l\x98\xb1}\x90::\xe0\xee\r\xa9[\u040a\vS(\x17\x8a\xd0\xf2\xa0\x00\x00\u07d4WJ\xd95S\x90\u421e\xf4*\xcd\x13\x8b*'\xe7\x8c\x00\xae\x89Tg\xb72\xa9\x134\x00\x00\u07d4WM\xe1\xb3\xf3\x8d\x91XF\xae7\x18VJZ\xda \xc2\xf3\xed\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94W\\\x00\u0081\x82\x10\u0085U\xa0\xff)\x01\x02\x89\xd3\xf8#\t\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94Ws\xb6\x02g!\xa1\xdd\x04\xb7\x82\x8c\xd6+Y\x1b\xfb4SL\x8a\x05\xb7\xacES\xdez\xe0\x00\x00\xe0\x94WwD\x1c\x83\xe0?\v\xe8\xdd4\v\xdechP\x84|b\v\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4Wx\xff\u071b\x94\u0165\x9e\"N\xb9e\xb6\u0790\xf2\"\xd1p\x89\x12-\u007f\xf3f\x03\xfc\x00\x00\u07d4Wz\xee\xe8\u053c\b\xfc\x97\xab\x15n\xd5\u007f\xb9p\x92Sf\xbe\x89\x12\r\xf1\x14rX\xbf\x00\x00\u07d4W{-\a\xe9\xcfRJ\x18\u04c9\x15Vak\x96\x06g\x00\x00\u07d4W\xd5\xfd\x0e=0I3\x0f\xfc\xdc\xd0 Ei\x17e{\xa2\u0689k\xf2\x01\x95\xf5T\xd4\x00\x00\u07d4W\u0754q\xcb\xfa&'\t\xf5\U00106f37t\xc5\xf5'\xb8\xf8\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4W\xdf#\xbe\xbd\xc6^\xb7_\ub732\xfa\xd1\xc0si++\xaf\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4X\x00\u03410\x83\x9e\x94I]-\x84\x15\xa8\xea,\x90\xe0\xc5\u02c9\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94X\x03\xe6\x8b4\xda\x12\x1a\xef\b\xb6\x02\xba\u06ef\xb4\xd1$\x81\u028a\x03\xcf\xc8.7\xe9\xa7@\x00\x00\xe0\x94X\x16\xc2hww\xb6\xd7\u04a2C-Y\xa4\x1f\xa0Y\xe3\xa4\x06\x8a\x1cO\xe4:\xdb\n^\x90\x00\x00\u07d4X\x1a:\xf2\x97\xef\xa4Cj)\xaf\x00r\x92\x9a\xbf\x98&\xf5\x8b\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94X\x1b\x9f\xd6\xea\xe3r\xf3P\x1fB\xeb\x96\x19\xee\xc8 \xb7\x8a\x84\x8a\x04+\xe2\xc0\f\xa5;\x8d\x80\x00\u07d4X\x1b\xdf\x1b\xb2v\xdb\u0746\xae\xdc\xdb9z\x01\xef\xc0\xe0\f[\x8965\u026d\xc5\u07a0\x00\x00\u07d4X\x1f4\xb5#\xe5\xb4\x1c\t\xc8|)\x8e)\x9c\xbc\x0e)\xd0f\x89=X3\xaa\xfd9u\x80\x00\xe0\x94X$\xa7\xe2(8'q40\x8c_KP\u06b6^C\xbb1\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4X+pf\x9c\x97\xaa\xb7\u0581H\xd8\xd4\xe9\x04\x11\xe2\x81\rV\x8965f3\xeb\xd8\xea\x00\x00\u07d4X.|\xc4o\x1d{Nn\x9d\x95\x86\x8b\xfd7\x05s\x17\x8fL\x89lk\x93[\x8b\xbd@\x00\x00\u07d4X>\x83\xbaU\xe6~\x13\xe0\xe7o\x83\x92\xd8s\xcd!\xfb\xf7\x98\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4Xi\xfb\x86}q\xf18\u007f\x86;i\x8d\t\xfd\xfb\x87\u011b\\\x89\u01bb\xf8X\xb3\x16\b\x00\x00\u07d4X}hI\xb1h\xf6\xc33+z\xba\xe7\xeblB\xc3\u007fH\xbf\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4X\x87\xdcj3\xdf\xedZ\xc1\xed\xef\xe3^\xf9\x1a!b1\xac\x96\x89\r\x8drkqw\xa8\x00\x00\xe0\x94X\x8e\u0650\xa2\xaf\xf4J\x94\x10]X\xc3\x05%w5\xc8h\xac\x8a\x03h\xc8b:\x8bM\x10\x00\x00\u07d4X\xae-\xdc_L\x8a\u0697\xe0l\x00\x86\x17\x17g\xc4#\xf5\u05c9WG=\x05\u06ba\xe8\x00\x00\u07d4X\xae\xd6gJ\xff\xd9\xf6B3'*W\x8d\xd98k\x99\xc2c\x89\xb8Pz\x82\a( \x00\x00\xe0\x94X\xb8\b\xa6[Q\xe63\x89i\xaf\xb9^\xc7\a5\xe4Q\xd5&\x8a\bxK\xc1\xb9\x83z8\x00\x00\u07d4X\xb8\xae\x8fc\xef5\xed\ab\xf0\xb6#=J\xc1Nd\xb6M\x89lk\x93[\x8b\xbd@\x00\x00\u07d4X\xba\x15ie\x0e[\xbb\xb2\x1d5\xd3\xe1u\xc0\u05b0\xc6Q\xa9\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4X\xc5U\xbc)<\xdb\x16\xc66.\xd9z\xe9U\v\x92\xea\x18\x0e\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4X\xc6P\xce\xd4\v\xb6VA\xb8\xe8\xa9$\xa09\xde\xf4hT\u07c9\x01\x00\xbd3\xfb\x98\xba\x00\x00\u07d4X\xc9\aT\xd2\xf2\n\x1c\xb1\xdd3\x06%\xe0KE\xfaa\x9d\\\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94X\xe2\xf1\x12#\xfc\x827\xf6\x9d\x99\xc6(\x9c\x14\x8c\x06\x04\xf7B\x8a\x05\x15\n\xe8J\x8c\xdf\x00\x00\x00\u07d4X\xe5T\xaf=\x87b\x96 \xdaa\xd58\xc7\xf5\xb4\xb5LJ\xfe\x89FP\x9diE4r\x80\x00\u07d4X\xe5\xc9\xe3D\xc8\x06e\r\xac\xfc\x90M3\xed\xbaQ\a\xb0\u0789\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4X\xe6a\u043as\xd6\xcf$\t\x9aUb\xb8\b\xf7\xb3g;h\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94X\xf0[&%`P<\xa7a\xc6\x18\x90\xa4\x03_Lsr\x80\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4X\xfb\x94sd\xe7iWe6\x1e\xbb\x1e\x80\x1f\xfb\x8b\x95\xe6\u0409\n\u05ce\xbcZ\xc6 \x00\x00\u07d4Y\x01\x81\xd4E\x00{\u0407Z\xaf\x06\x1c\x8dQ\x159\x00\x83j\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Y\x02\xe4J\xf7i\xa8rF\xa2\x1e\a\x9c\b\xbf6\xb0n\xfe\xb3\x8965\u026d\xc5\u07a0\x00\x00\u07d4Y\n\xcb\xda7)\f\r>\xc8O\xc2\x00\rv\x97\xf9\xa4\xb1]\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94Y\f\xcbY\x11\xcfx\xf6\xf6\"\xf55\xc4t7_J\x12\xcf\u03ca\x04<3\xc1\x93ud\x80\x00\x00\u07d4Y\x10\x10m\xeb\u0491\xa1\u0340\xb0\xfb\xbb\x8d\x8d\x9e\x93\xa7\xcc\x1e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Y\x16\x17I\xfe\xdc\xf1\xc7!\xf2 -\x13\xad\xe2\xab\xcfF\v=\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94Y\x1b\xef1q\xd1\u0155w\x17\xa4\xe9\x8d\x17\xeb\x14,!NV\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4Y <\xc3u\x99\xb6H1*|\xc9\xe0m\xac\xb5\x89\xa9\xaej\x89\b\x0fyq\xb6@\x0e\x80\x00\u07d4Y&\x81q\xb83\xe0\xaa\x13\xc5KR\xcc\xc0B.O\xa0:\ub262\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94Y'w&\x1e;\xd8R\u010e\u0295\xb3\xa4L[\u007f-B,\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4Y0Dg\x0f\xae\xff\x00\xa5[Z\xe0Q\xeb{\xe8p\xb1\x16\x94\x89\a?u\u0460\x85\xba\x00\x00\xe0\x94Y;E\xa1\x86J\xc5\xc7\xe8\xf0\u02ae\xba\r\x87<\xd5\xd1\x13\xb2\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4Y_^\xdajV\xf1N%\xe0\xc6\xf3\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4Z\x1a3ib\xd6\xe0\xc601\u0303\u01a5\u01a6\xf4G\x8e\u02c965\u026d\xc5\u07a0\x00\x00\u07d4Z\x1d--\x1dR\x03\x04\xb6 \x88IW\x047\xeb0\x91\xbb\x9f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4Z&s1\xfa\xcb&-\xaa\xec\xd9\xddc\xa9p\f_RY\u07c9\x05k\xc7^-c\x10\x00\x00\xe0\x94Z(WU9\x1e\x91NX\x02_\xaaH\xcch_O\xd4\xf5\xb8\x8a\x05\x81v{\xa6\x18\x9c@\x00\x00\u07d4Z)\x16\xb8\xd2\xe8\xcc\x12\xe2\a\xabFMC>#p\xd8#\u0649lk\x93[\x8b\xbd@\x00\x00\u07d4Z+\x1c\x85:\xeb(\xc4U9\xafv\xa0\n\xc2\u0628$(\x96\x89\x01Z\xf1\u05cbX\xc4\x00\x00\u07d4Z-\xaa\xb2\\1\xa6\x1a\x92\xa4\xc8,\x99%\xa1\xd2\xefXX^\x89\f8\r\xa9\u01d5\f\x00\x00\u07d4Z0\xfe\xac7\xac\x9fr\u05f4\xaf\x0f+\xc79R\xc7O\xd5\u00c9lk\x93[\x8b\xbd@\x00\x00\u07d4ZTh\xfa\\\xa2&\xc7S.\xcf\x06\xe1\xbc\x1cE\"]~\u0249g\x8a\x93 b\xe4\x18\x00\x00\u07d4ZVR\x857JI\xee\xddPL\x95}Q\bt\xd0\x04U\xbc\x89\x05k\xc7^-c\x10\x00\x00\u07d4Z^\xe8\xe9\xbb\x0e\x8a\xb2\xfe\xcbK3\u0494x\xbeP\xbb\xd4K\x89*\x11)\u0413g \x00\x00\xe0\x94Z_\x85\b\xda\x0e\xbe\xbb\x90\xbe\x903\xbdM\x9e'A\x05\xae\x00\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4Z`q\xbc\xeb\xfc\xbaJ\xb5\u007fM\xb9o\u01e6\x8b\xec\xe2\xba[\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Z`\xc9$\x16(s\xfc~\xa4\xda\u007f\x97.5\x01g7`1\x89\x04\x87\xf2w\xa8\x85y\x80\x00\u07d4Zf\x86\xb0\xf1~\a\xed\xfcY\xb7Y\xc7}[\xef\x16M8y\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4Zp\x10o \xd6?\x87Re\xe4\x8e\r5\xf0\x0e\x17\xd0+\u0249\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794Zt\xbab\xe7\xc8\x1a4t\xe2}\x89O\xed3\xdd$\xad\x95\xfe\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94Zw5\x00}p\xb0hD\u0699\x01\xcd\xfa\xdb\x11\xa2X,/\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4Z\x82\xf9l\u0537\xe2\xd9=\x10\xf3\x18]\xc8\xf4=Ku\xaai\x89lc?\xba\xb9\x8c\x04\x00\x00\u07d4Z\x87\xf04\xe6\xf6\x8fNt\xff\xe6\fd\x81\x946\x03l\xf7\u05c9\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94Z\x89\x11U\xf5\x0eB\aCt\xc79\xba\xad\xf7\xdf&Q\x15:\x8a\x01\x02\xdao\xd0\xf7:<\x00\x00\u07d4Z\x9c\x8bi\xfcaMiVI\x99\xb0\r\xcbB\xdbg\xf9~\x90\x89\xb9\xe6\x15\xab\xad:w\x80\x00\xe0\x94Z\xaf\x1c1%Jn\x00_\xba\u007fZ\xb0\xecy\xd7\xfc+c\x0e\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4Z\xb1\xa5aSH\x00\x1c|w]\xc7WHf\x9b\x8b\xe4\xde\x14\x89%jr\xfb)\xe6\x9c\x00\x00\xe1\x94Z\xbf\xec%\xf7L\u06047c\x1aw1\x90i2wcV\xf9\x8b\t\xd8<\xc0\u07e1\x11w\xff\x80\x00\u07d4Z\u0090\x8b\x0f9\x8c\r\xf5\xba\xc2\xcb\x13\xcas\x14\xfb\xa8\xfa=\x89\n\xd4\xc81j\v\f\x00\x00\xe0\x94Z\u025a\u05c1j\xe9\x02\x0f\xf8\xad\xf7\x9f\xa9\x86\x9b|\xeaf\x01\x8a\x04ri\x8bA;C \x00\x00\u07d4Z\xd1,^\xd4\xfa\x82~!P\u03e0\u058c\n\xa3{\x17i\xb8\x89+^:\xf1k\x18\x80\x00\x00\xe0\x94Z\xd5\xe4 uV\x13\x88o5\xaaV\xac@>\xeb\xdf\xe4\xb0\u040a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4Z\xdew\xfd\x81\xc2\\\n\xf7\x13\xb1\a\x02v\x8c\x1e\xb2\xf9u\xe7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4Z\xe6N\x85;\xa0\xa5\x12\x82\u02cd\xb5.Aa^|\x9fs?\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Z\xed\x0el\xfe\x95\xf9\u0580\xc7dr\xa8\x1a+h\n\u007f\x93\xe2\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4Z\xef\x16\xa2&\xddh\a\x1f$\x83\xe1\xdaBY\x83\x19\xf6\x9b,\x89lk\x93[\x8b\xbd@\x00\x00\u07d4Z\xf4j%\xac\t\xcbsakS\xb1O\xb4/\xf0\xa5\x1c\u0772\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4Z\xf7\xc0r\xb2\u016c\xd7\x1cv\xad\xdc\xceS\\\xf7\xf8\xf95\x85\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94Z\xfd\xa9@\\\x8e\x976QEt\u0692\x8d\xe6tV\x01\t\x18\x8a\x01E\xb8\xb0#\x9aF\x92\x00\x00\u07d4[\x06\xd1\xe6\x93\f\x10Ti+y\xe3\xdb\xe6\xec\xceS\x96d \x89\v\"\u007fc\xbe\x81<\x00\x00\u07d4[%\xca\xe8m\xca\xfa*`\xe7r61\xfc_\xa4\x9c\x1a\xd8}\x89\x87\fXQ\x0e\x85 \x00\x00\u07d4[(|~sB\x99\xe7'bo\x93\xfb\x11\x87\xa6\rPW\xfe\x89\x05|\xd94\xa9\x14\xcb\x00\x00\u07d4[)\f\x01\x96|\x81.M\xc4\xc9\v\x17L\x1b@\x15\xba\xe7\x1e\x89\b \xeb4\x8dR\xb9\x00\x00\u07d4[+d\xe9\xc0X\u30a8\xb2\x99\"N\xec\xaa\x16\xe0\x9c\x8d\x92\x89\b\xbaR\xe6\xfcE\xe4\x00\x00\xe0\x94[./\x16\x18U.\xab\r\xb9\x8a\xddUc|)Q\xf1\xfb\x19\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4[0`\x8cg\x8e\x1a\xc4d\xa8\x99L;3\xe5\xcd\xf3Iq\x12\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4[36\x96\xe0L\xca\x16\x92\xe7\x19\x86W\x9c\x92\rk)\x16\xf9\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94[C\rw\x96\x96\xa3e?\xc6\x0et\xfb\u02ec\xf6\xb9\u00ba\xf1\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4[Cse\xae:\x9a/\xf9|h\xe6\xf9\nv \x18\x8c}\x19\x89l\x87T\xc8\xf3\f\b\x00\x00\u07d4[I\xaf\xcduDx8\xf6\xe7\xce\u068d!w}O\xc1\xc3\xc0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4[L\f`\xf1\x0e\u0489K\xdbB\xd9\xdd\x1d!\x05\x87\x81\n\r\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4[N\xa1m\xb6\x80\x9b\x03R\u0536\xe8\x1c9\x13\xf7jQ\xbb2\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4[[\xe0\xd8\xc6rv\xba\xab\xd8\xed\xb3\rH\xeaud\v\x8b)\x89,\xb1\xf5_\xb7\xbe\x10\x00\x00\u07d4[]Qp)2\x15b\x11\x1bC\bm\v\x045\x91\x10\x9ap\x89\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\xe0\x94[]\x8c\x8e\xedl\x85\xac!Va\xde\x02fv\x82?\xaa\n\f\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4[mU\xf6q)g@\\e\x91)\xf4\xb1\xde\t\xac\xf2\xcb{\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4[p\u011c\u024b=\xf3\xfb\xe2\xb1Y\u007f\\\x1bcG\xa3\x88\xb7\x894\x95tD\xb8@\xe8\x00\x00\u07d4[sn\xb1\x83Sb\x9b\u0796v\xda\xdd\x16P4\xce^\xcch\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4[u\x9f\xa1\x10\xa3\x1c\x88F\x9fT\xd4K\xa3\x03\xd5}\xd3\xe1\x0f\x89[F\xdd/\x0e\xa3\xb8\x00\x00\u07d4[w\x84\xca\xea\x01y\x9c\xa3\x02'\x82vg\xce |\\\xbcv\x89lk\x93[\x8b\xbd@\x00\x00\u07d4[x\xec\xa2\u007f\xbd\xeao&\xbe\xfb\xa8\x97+)^x\x146K\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94[\x80\v\xfd\x1b>\u0525}\x87Z\xed&\xd4/\x1aw\b\xd7*\x8a\x01Z\x82\xd1\u057b\x88\xe0\x00\x00\u07d4[\x85\xe6\x0e*\xf0TO/\x01\xc6N 2\x90\x0e\xbd8\xa3\u01c9lk\x93[\x8b\xbd@\x00\x00\u07d4[\xa2\xc6\xc3]\xfa\xec)h&Y\x19\x04\xd5DFJ\xea\xbd^\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94[\xafmt\x96 \x80>\x83H\xaf7\x10\xe5\xc4\xfb\xf2\x0f\u0214\x8a\x01\x0f@\x02a]\xfe\x90\x00\x00\u07d4[\xc1\xf9U\a\xb1\x01\x86B\xe4\\\xd9\xc0\xe2'3\xb9\xb1\xa3&\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94[\xd25GG\u007fm\t\u05f2\xa0\x05\xc5\xeee\fQ\fV\u05ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4[\xd2J\xac6\x12\xb2\f`\x9e\xb4gy\xbf\x95i\x84\a\xc5|\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4[\u0586-Q}M\xe4U\x9dN\xec\n\x06\xca\xd0^/\x94n\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4[\xe0EQ*\x02n?\x1c\xeb\xfdZ~\xc0\xcf\xc3o-\xc1k\x89\x06\x81U\xa46v\xe0\x00\x00\xe0\x94[\xf9\xf2\"nZ\xea\xcf\x1d\x80\xae\nY\xc6\xe3\x808\xbc\x8d\xb5\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4[\xfa\xfe\x97\xb1\xdd\x1dq+\xe8mA\xdfy\x89SE\x87Z\x87\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\\\x0f.Q7\x8fk\r{\xabas1X\vn9\xad<\xa5\x8a\x02\bj\xc3Q\x05&\x00\x00\x00\u07d4\\)\xf9\xe9\xa5#\xc1\xf8f\x94H\xb5\\H\xcb\xd4|%\xe6\x10\x894F\xa0\xda\xd0L\xb0\x00\x00\xe0\x94\\0\x8b\xacHW\xd3;\xae\xa0t\xf3\x95m6!\xd9\xfa(\xe1\x8a\x01\x0f\b\xed\xa8\xe5U\t\x80\x00\u07d4\\1*V\u01c4\xb1\"\t\x9bvM\x05\x9c!\xec\xe9^\x84\u0289\x05&c\u032b\x1e\x1c\x00\x00\u07d4\\1\x99m\xca\xc0\x15\xf9\xbe\x98[a\x1fF\x870\xef$M\x90\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\\24W\xe1\x87v\x1a\x82v\xe3Y\xb7\xb7\xaf?;n=\xf6\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\\<\x1cd[\x91uC\x11;>l\x1c\x05M\xa1\xfet+\x9a\x89+^:\xf1k\x18\x80\x00\x00\u0794\\=\x19D\x1d\x19l\xb4Cf \xfc\xad\u007f\xbby\xb2\x9ex\x88\xc6s\xce<@\x16\x00\x00\u07d4\\?V\u007f\xaf\xf7\xba\u0475\x12\x00\"\xe8\xcb\u02a8+I\x17\xb3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\\Ch\x91\x8a\xced\t\u01de\u0280\u036a\xe49\x1d+bN\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\\FA\x97y\x1c\x8a=\xa3\xc9%Co'z\xb1;\xf2\xfa\xa2\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\\H\x81\x16\\\xb4+\xb8.\x979l\x8e\xf4J\xdb\xf1s\xfb\x99\x89\x05\xfe\xe2\"\x04\x1e4\x00\x00\xe0\x94\\H\x92\x90z\a \xdfo\xd3A>c\xffv}k9\x80#\x8a\x02\xcb\x00\x9f\u04f5y\x0f\x80\x00\u07d4\\O$\xe9\x94\ud3c5\x0e\xa7\x81\x8fG\x1c\x8f\xac;\xcf\x04R\x89]\x80h\x8d\x9e1\xc0\x00\x00\u07d4\\T\x19V\\:\xadNqN\a92\x8e5!\u024f\x05\u0309\x1c\x9fx\u0489>@\x00\x00\u07d4\\a6\xe2\x18\xde\na\xa17\xb2\xb3\x96-*a\x12\xb8\t\u05c9\x0f\xf3\u06f6_\xf4\x86\x80\x00\xe0\x94\\a\xaby\xb4\b\xdd2)\xf6bY7\x05\xd7/\x1e\x14{\xb8\x8a\x04\xd0$=4\x98\u0344\x00\x00\u07d4\\m\x04\x1d\xa7\xafD\x87\xb9\xdcH\xe8\xe1\xf6\af\u0425m\xbc\x89O\a\n\x00>\x9ct\x00\x00\u07d4\\o6\xaf\x90\xab\x1aeln\xc8\xc7\xd5!Q'b\xbb\xa3\xe1\x89lh\xcc\u041b\x02,\x00\x00\u07d4\\{\x9e\u01e2C\x8d\x1eD*\x86\x0f\x8a\x02\x1e\x18\x99\xf07z\xea\x00\x00\u07d4\\\xcc\xf1P\x8b\xfd5\xc2\x050\xaad%\x00\xc1\r\xeee\xea\xed\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\u07d4\\\xcer\xd0h\xc7\xc3\xf5[\x1d(\x19T^w1|\xae\x82@\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\\\xd0\xe4u\xb5D!\xbd\xfc\f\x12\xea\x8e\b+\u05e5\xaf\nj\x89\x032\xca\x1bg\x94\f\x00\x00\u07d4\\\u0548\xa1N\xc6H\xcc\xf6G)\xf9\x16z\xa7\xbf\x8b\xe6\xeb=\x8965\u026d\xc5\u07a0\x00\x00\u07d4\\\u062f`\xdee\xf2M\xc3\xceW0\xba\x92e0\"\xdcYc\x89a\t=|,m8\x00\x00\u07d4\\\xdcG\b\xf1O@\xdc\xc1Zy_}\xc8\xcb\v\u007f\xaa\x9en\x89\x1d\x1c_>\xda \xc4\x00\x00\u07d4\\\u0d86,\u0391b\xe8~\bI\xe3\x87\xcb]\xf4\xf9\x11\x8c\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94\\\xe2\xe7\u03aa\xa1\x8a\xf0\xf8\xaa\xfa\u007f\xba\xd7L\u021e<\xd46\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\\\xe4@h\xb8\xf4\xa3\xfey\x9ej\x83\x11\xdb\xfd\xed\xa2\x9d\xee\x0e\x89lk\x93[\x8b\xbd@\x00\x00\u0794\\\xeb\xe3\v*\x95\xf4\xae\xfd\xa6ee\x1d\xc0\xcf~\xf5u\x81\x99\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\\\xf1\x8f\xa7\u0227\xc0\xa2\xb3\xd5\xef\u0459\x0fd\xdd\xc5i$,\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\\\xf4N\x10T\reqd#\xb1\xbc\xb5B\xd2\x1f\xf8:\x94\u034a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\\\xf8\xc0>\xb3\xe8r\xe5\x0f|\xfd\f/\x8d;?,\xb5\x18:\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\\\xfa\x8dV\x85ue\x8c\xa4\xc1\xa5\x93\xacL]\x0eD\xc6\aE\x89\x0f\xc6o\xae7F\xac\x00\x00\u07d4\\\xfa\x98w\xf7\x19\u01dd\x9eIJ\b\xd1\xe4\x1c\xf1\x03\xfc\x87\u0249\n\u05ce\xbcZ\xc6 \x00\x00\u07d4]\x1d\xc38{G\xb8E\x1eU\x10l\f\xc6}m\xc7+\u007f\v\x89lk\x93[\x8b\xbd@\x00\x00\u07d4]#\x1ap\xc1\xdf\xeb6\n\xbd\x97\xf6\x16\xe2\xd1\r9\xf3\u02b5\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4]$\xbd\xbc\x1cG\xf0\xeb\x83\xd1(\xca\xe4\x8a\xc3\xf4\xb5\x02bt\a\xda'/g\x81Jk\xec\u0509\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4]\x83\xb2\x1b\xd2q#`Ckg\xa5\x97\xee3x\xdb>z\xe4\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94]\x87+\x12.\x99N\xf2|q\xd7\u07b4W\xbfeB\x9e\xcal\x8a\x01\xb1\xad\xed\x81\u04d4\x10\x80\x00\xe0\x94]\x8d1\xfa\xa8d\xe2!Y\xcdoQu\xcc\xec\xc5?\xa5Mr\x8a\x05\xb6\x96\xb7\r\xd5g\x10\x00\x00\xe0\x94]\x95\x8a\x9b\u0449\u0098_\x86\u014a\x8ci\xa7\xa7\x88\x06\xe8\u068a\x02(\xf1o\x86\x15x`\x00\x00\u07d4]\xa2\xa9\xa4\xc2\xc0\xa4\xa9$\xcb\xe0\xa5:\xb9\xd0\xc6'\xa1\u03e0\x89'\xbf8\xc6TM\xf5\x00\x00\u07d4]\xa4\u0288\x93\\'\xf5\\1\x10H\x84\x0eX\x9e\x04\xa8\xa0I\x89\x04V9\x18$O@\x00\x00\u07d4]\xa5G\x85\u027d0W\\\x89\u07b5\x9d A\xd2\n9\xe1{\x89j\xa2\t\xf0\xb9\x1de\x80\x00\xe0\x94]\xb6\x9f\xe9>o\xb6\xfb\xd4P\x96k\x97#\x8b\x11\n\xd8'\x9a\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4]\xb7\xbb\xa1\xf9W?$\x11]\x8c\x8cb\xe9\u0388\x95\x06\x8e\x9f\x89\x02\xb5\xaa\xd7,e \x00\x00\xe0\x94]\xb8D\x00W\x00i\xa9W<\xab\x04\xb4\u6d955\xe2\x02\xb8\x8a\x02\r\u058a\xaf2\x89\x10\x00\x00\u07d4]\xc3m\xe55\x94P\xa1\xec\t\xcb\fD\xcf+\xb4+:\xe45\x89<\x94m\x89;3\x06\x00\x00\u07d4]\xc6\xf4_\xef&\xb0n3\x021?\x88M\xafH\xe2to\xb9\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94]\u0376\xb8zP\xa9\xde\x02C\x80\x00\x00\u07d4^Q\xb8\xa3\xbb\t\xd3\x03\xea|\x86\x05\x15\x82\xfd`\x0f\xb3\xdc\x1a\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794^X\xe2U\xfc\x19\x87\n\x040_\xf2\xa0F1\xf2\xff)K\xb1\x88\xf4?\xc2\xc0N\xe0\x00\x00\u07d4^ZD\x19t\xa8=t\u0187\xeb\xdcc?\xb1\xa4\x9e{\x1a\u05c9\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4^eE\x8b\xe9d\xaeD\x9fqw7\x04\x97\x97f\xf8\x89\x87a\x89\x1c\xa7\xccs[o|\x00\x00\u07d4^g\u07c9i\x10\x1a\u06bd\x91\xac\xcdk\xb1\x99\x12t\xaf\x8d\xf2\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4^n\x97G\xe1b\xf8\xb4\\en\x0fl\xaez\x84\xba\xc8\x0eN\x89lk\x93[\x8b\xbd@\x00\x00\u07d4^s\x1bU\xce\xd4R\xbb??\xe8q\xdd\xc3\xed~\xe6Q\n\x8f\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4^t\xed\x80\xe9eW\x88\xe1\xbb&\x97R1\x96g\xfeuNZ\x89\x03\t'\xf7L\x9d\xe0\x00\x00\u07d4^w.'\xf2\x88\x00\xc5\r\u0697;\xb3>\x10v.n\xea \x89a\t=|,m8\x00\x00\u07d4^{\x8cT\xdcW\xb0@ bq\x9d\xee~\xf5\xe3~\xa3]b\x89\x9b\xf9\x81\x0f\xd0\\\x84\x00\x00\u07d4^\u007fp7\x87uX\x9f\xc6j\x81\xd3\xf6S\xe9T\xf5U`\ub243\xf2\x89\x18\x1d\x84\xc8\x00\x00\xe0\x94^\x80n\x84W0\xf8\a>l\xc9\x01\x8e\xe9\x0f\\\x05\xf9\t\xa3\x8a\x02\x01\xe9m\xac\u03af \x00\x00\u07d4^\x8eM\xf1\x8c\xf0\xafw\tx\xa8\u07cd\xac\x90\x93\x15\x10\xa6y\x89lk\x93[\x8b\xbd@\x00\x00\u07d4^\x90\xc8Xw\x19\x87V\xb06l\x0e\x17\xb2\x8eR\xb4FPZ\x89\x14JJ\x18\xef\xebh\x00\x00\u07d4^\x95\xfe_\xfc\xf9\x98\xf9\xf9\xac\x0e\x9a\x81\u06b8>\xadw\x00=\x89\x1dB\xc2\r2y\u007f\x00\x00\u07d4^\xad)\x03z\x12\x89dx\xb1)j\xb7\x14\xe9\u02d5B\x8c\x81\x89\x03\xe0C\a-@n\x00\x00\u07d4^\xb3q\xc4\a@lB{;}\xe2q\xad<\x1e\x04&\x95y\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4^\u037a\xea\xb9\x10o\xfe]{Q\x96\x96`\x9a\x05\xba\ub16d\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4^\xd0\xd63\x85Y\xefD\xdcza\xed\xeb\x89?\xa5\xd8?\xa1\xb5\x89\v\xed\x1d\x02c\xd9\xf0\x00\x00\xe0\x94^\u04fb\xc0R@\xe0\u04d9\xebm\xdf\xe6\x0fb\xdeM\x95\t\xaf\x8a)\x14\xc0$u\xf9\xd6\xd3\x00\x00\u0594^\xd3\xf1\xeb\xe2\xaegV\xb5\xd8\xdc\x19\xca\xd0,A\x9a\xa5w\x8b\x80\u07d4^\xd5a\x15\xbde\x05\xa8\x82s\xdf\\V\x83\x94p\xd2J-\xb7\x89\x03\x8ee\x91\xeeVf\x80\x00\xe0\x94^\xf8\xc9a\x86\xb3y\x84\xcb\xfe\x04\u0158@n;\n\xc3\x17\x1f\x8a\x01\xfd\x934\x94\xaa_\xe0\x00\x00\u07d4^\xfb\xdf\xe58\x99\x99c<&`Z[\xfc,\x1b\xb5\x95\x93\x93\x89\x03\xc0W\xc9\\\xd9\b\x00\x00\xe0\x94_\x13\x15F1Fm\xcb\x13S\u0210\x93*|\x97\xe0\x87\x8e\x90\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4_\x16z\xa2B\xbcL\x18\x9a\xde\xcb:\u0127\xc4R\xcf\x19/\u03c9lkLM\xa6\u077e\x00\x00\xe0\x94_\x1c\x8a\x04\xc9\rs[\x8a\x15)\t\xae\xaeco\xb0\xce\x16e\x8a\x01{x'a\x8cZ7\x00\x00\u07d4_#\xba\x1f7\xa9lE\xbcI\x02YS\x8aT\u008b\xa3\xb0\u0549A\rXj \xa4\xc0\x00\x00\u07d4_&\xcf4Y\x9b\xc3n\xa6{\x9ez\x9f\x9bC0\xc9\xd5B\xa3\x8965\u026d\xc5\u07a0\x00\x00\u07d4_)\xc9\xdev]\xde%\x85*\xf0}3\xf2\xceF\x8f\xd2\t\x82\x89lk\x93[\x8b\xbd@\x00\x00\u07d4_/\a\xd2\u0597\xe8\xc5g\xfc\xfd\xfe\x02\x0fI\xf3`\xbe!9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4_2\x1b=\xaa\xa2\x96\xca\xdf)C\x9f\x9d\xab\x06*K\xff\xed\u0589\x04p%\x90>\xa7\xae\x00\x00\u07d4_3:;#\x10vZ\r\x182\xb9\xbeL\n\x03pL\x1c\t\x8965\u026d\xc5\u07a0\x00\x00\u07d4_4K\x01\xc7\x19\x1a2\xd0v*\xc1\x88\xf0\xec-\xd4`\x91\x1d\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94_6>\n\xb7G\xe0-\x1b;f\xab\xb6\x9e\xa5<{\xafR:\x8a\x02w\x01s8\xa3\n\xe0\x00\x00\u07d4_7[\x86`\f@\u0328\xb2gkz\x1a\x1d\x16D\xc5\xf5,\x89\x04F\x18\xd7Lb?\x00\x00\u07d4_>\x1eg9\xb0\xc6\"\x00\xe0\n\x006\x91\xd9\xef\xb28\u061f\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4_H?\xfb\x8fh\n\xed\xf2\xa3\x8fx3\xaf\xdc\xdeY\xb6\x1eK\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94_J\xceL\x1c\xc13\x91\xe0\x1f\x00\xb1\x98\xe1\xf2\v_\x91\xcb\xf5\x8a\x01\x0f\x0f\xa8\xb9\u04c1\x1a\x00\x00\xe0\x94_R\x12\x82\xe9\xb2x\u070c\x03Lr\xafS\xee)\xe5D=x\x8a\x01as-/\x8f:\xe0\x00\x00\u07d4_h\xa2L~\xb4\x11vgs{39?\xb3\xc2\x14\x8aS\xb6\x89\x02\xce\u0791\x8dE<\x00\x00\u07d4_p\x8e\xaf9\xd8#\x94lQ\xb3\xa3\u9df3\xc0\x03\xe2cA\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4_t.H~:\xb8\x1a\xf2\xf9J\xfd\xbe\x1b\x9b\x8f\\\u0301\xbc\x89u\xc4E\xd4\x11c\xe6\x00\x00\u07d4_t\xed\x0e$\xff\x80\u0672\u0124K\xaa\x99uB\x8c\u05b95\x89\xa1\x8b\xce\xc3H\x88\x10\x00\x00\u07d4_v\xf0\xa3\x06&\x9cx0k=e\r\xc3\xe9\xc3p\x84\xdba\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4_w\xa1\a\xab\x12&\xb3\xf9_\x10\ue0ee\xfcl]\xff>\u0709\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4_{;\xba\xc1m\xab\x83\x1aJ\x0f\xc5;\fT\x9d\xc3l1\u0289i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94_\x93\xff\x83't\xdbQ\x14\xc5[\xb4\xbfD\xcc\U000f53d0?\x8a(\xa9\xc9\x1a&4X)\x00\x00\u07d4_\x96\x16\xc4{Jg\xf4\x06\xb9Z\x14\xfeo\xc2h9o\x17!\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4_\x98\x109\xfc\xf5\x02%\xe2\xad\xf7bu!\x12\xd1\xcc&\xb6\xe3\x89\x1b\x1aAj!S\xa5\x00\x00\u07d4_\x99\u070eI\xe6\x1dW\xda\xef`j\xcd\xd9\x1bMp\a2j\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4_\xa6\x1f\x15-\xe6\x125\x16\xc7Q$)y(_yj\u01d1\x89\v\x0f\x11\x97)c\xb0\x00\x00\u07d4_\xa7\xbf\xe0C\x88a'\xd4\x01\x1d\x83V\xa4~\x94yc\xac\xa8\x89b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x94_\xa8\xa5Nh\x17lO\xe2\xc0\x1c\xf6q\xc5\x15\xbf\xbd\xd5(\xa8\x8aE\xe1U\xfa\x01\x10\xfa@\x00\x00\u07d4_\xad\x96\x0fk,\x84V\x9c\x9fMG\xbf\x19\x85\xfc\xb2\xc6]\xa6\x8965f3\xeb\xd8\xea\x00\x00\u07d4_\xc6\xc1\x14&\xb4\xa1\xea\xe7\xe5\x1d\xd5\x12\xad\x10\x90\xc6\xf1\xa8[\x89\x93\xfe\\W\xd7\x10h\x00\x00\u07d4_\u0344Th\x96\xdd\b\x1d\xb1\xa3 \xbdM\x8c\x1d\xd1R\x8cL\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4_\u0368G\xaa\xf8\xd7\xfa\x8b\xca\b\x02\x9c\xa2\x84\x91f\xaa\x15\xa3\x89!\u02b8\x12Y\xa3\xbf\x00\x00\u07d4_\xd1\xc3\xe3\x17x'l\xb4.\xa7@\xf5\xea\xe9\xc6A\xdb\xc7\x01\x89\n\x84Jt$\xd9\xc8\x00\x00\u07d4_\xd3\xd6w~\xc2b\n\xe8:\x05R\x8e\xd4%\a-<\xa8\xfd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4_\xd9s\xaf6j\xa5\x15|Te\x9b\u03f2|\xbf\xa5\xac\x15\u0589\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4_\xe7w\x03\x80\x8f\x82>l9\x93R\x10\x8b\xdb,R|\xb8|\x89j@v\xcfy\x95\xa0\x00\x00\xe0\x94_\xecI\xc6e\xe6N\xe8\x9d\xd4A\xeet\x05n\x1f\x01\xe9(p\x8a\x01V\x9b\x9es4t\xc0\x00\x00\u07d4_\xf3&\xcd`\xfd\x13k$^)\xe9\bzj\u04e6R\u007f\r\x89e\xea=\xb7UF`\x00\x00\u07d4_\xf9=\xe6\xee\x05L\xadE\x9b-^\xb0\xf6\x87\x03\x89\xdf\xcbt\x89\v\xed\x1d\x02c\xd9\xf0\x00\x00\u07d4`\x06\xe3m\x92\x9b\xf4]\x8f\x16#\x1b\x12j\x01\x1a\xe2\x83\xd9%\x89\t\x8a}\x9b\x83\x14\xc0\x00\x00\u07d4`!\xe8Z\x88\x14\xfc\xe1\xe8*A\xab\xd1\u04f2\xda\xd2\xfa\xef\xe0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4`8t\n\xe2\x8df\xba\x93\xb0\xbe\bH+2\x05\xa0\xf7\xa0{\x89\x11!a\x85\u009fp\x00\x00\u07d4`?/\xabz\xfbn\x01{\x94v`i\xa4\xb4;8\x96I#\x89Y\xd2\xdb$\x14\u0699\x00\x00\u07d4`B'm\xf2\x98?\xe2\xbcGY\xdc\x19C\xe1\x8f\xdb\xc3Ow\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4`B\xc6D\xba\xe2\xb9o%\xf9M1\xf6x\xc9\r\xc9f\x90\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4`L\xdf\x18b\x8d\xbf\xa82\x91\x94\xd4x\xddR\x01\xee\xccK\xe7\x89\x01?0j$\t\xfc\x00\x00\u07d4`N\x94w\xeb\xf4r|t[\u02bb\xed\xcbl\xcf)\x99@\"\x8966\x9e\xd7t}&\x00\x00\u07d4`gm\x1f\xa2\x1f\xca\x05\"\x97\xe2K\xf9c\x89\u0171*p\u05c9\r\x17|Zzh\xd6\x00\x00\u07d4`gn\x92\u044b\x00\x05\t\xc6\x1d\xe5@\xe6\xc5\u0776v\xd5\t\x89A\rXj \xa4\xc0\x00\x00\u07d4`o\x17q!\xf7\x85\\!\xa5\x06#0\xc8v\"d\xa9{1\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4`\x86B6\x93\r\x04\xd8@+]\xcb\xeb\x80\u007f<\xafa\x1e\xa2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4`\xabq\xcd&\xeamnY\xa7\xa0\xf6'\xee\a\x9c\x88^\xbb\xf6\x89\x01s\x17\x90SM\xf2\x00\x00\u07d4`\xaf\x0e\xe1\x18D<\x9b7\xd2\xfe\xadw\xf5\xe5!\u07be\x15s\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4`\xb3X\xcb=\xbe\xfa7\xf4}\xf2\xd76X@\u068e;\u024c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4`\xb8\u05b7;ySO\xb0\x8b\xb8\xcb\xce\xfa\xc7\xf3\x93\xc5{\xfe\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4`\xbeo\x95?*M%\xb6%o\xfd$#\xac\x148%.N\x89\b!\xab\rD\x14\x98\x00\x00\u0794`\xc3qO\xdd\xdbcFY\u48b1\xeaB\xc4r\x8c\u01f8\xba\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4`\xcc=D^\xbd\xf7j}z\xe5q\u0197\x1d\xffh\u0305\x85\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94`\xd5fq@\xd1&\x14\xb2\x1c\x8e^\x8a3\b.2\xdf\xcf#\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4`\xde\"\xa1Pt2\xa4{\x01\xcch\xc5*\v\xf8\xa2\xe0\u0418\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4`\xe0\xbd\u0422Y\xbb\x9c\xb0\x9d?7\xe5\u034b\x9d\xac\uafca\x89JD\x91\xbdm\xcd(\x00\x00\u07d4`\xe3\xccC\xbc\xdb\x02j\xadu\x9cpf\xf5U\xbb\xf2\xacf\xf5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4a\x04+\x80\xfd`\x95\u0478{\xe2\xf0\x0f\x10\x9f\xab\xaf\xd1W\xa6\x89\x05k\xc7^-c\x10\x00\x00\u07d4a\a\xd7\x1d\xd6\xd0\xee\xfb\x11\xd4\xc9\x16@L\xb9\x8cu>\x11}\x89lk\x93[\x8b\xbd@\x00\x00\u07d4a\x0f\xd6\xeeN\xeb\xab\x10\xa8\xc5]\vK\xd2\xe7\xd6\xef\x81qV\x89\x01\x15\x95a\x06]]\x00\x00\u07d4a\x14\xb0\xea\xe5Wi\x03\xf8\v\xfb\x98\x84-$\xed\x92#\u007f\x1e\x89\x05k\xc7^-c\x10\x00\x00\u07d4a!\xaf9\x8a[-\xa6\x9fe\xc68\x1a\xec\x88\u039c\xc6D\x1f\x89\"\xb1\xc8\xc1\"z\x00\x00\x00\u07d4a&g\xf1r\x13[\x95\v,\xd1\xde\x10\xaf\xde\xcehW\xb8s\x8965\u026d\xc5\u07a0\x00\x00\u07d4a,\xed\x8d\xc0\u071e\x89\x9e\xe4oyb33\x15\xf3\xf5^D\x89\x12^5\xf9\xcd=\x9b\x00\x00\u07d4a4\xd9B\xf07\xf2\xcc=BJ#\f`=g\xab\xd3\xed\xf7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4a:\xc5;\xe5e\xd4e6\xb8 q[\x9b\x8d:\xe6\x8aK\x95\x89\xcb\xd4{n\xaa\x8c\xc0\x00\x00\u07d4a?\xabD\xb1k\xbeUMD\xaf\xd1x\xab\x1d\x02\xf3z\ua949lk\x93[\x8b\xbd@\x00\x00\u07d4aN\x8b\xef=\xd2\u015bY\xa4\x14Vt@\x10\x185\x18\x84\xea\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4aQ\x84d\xfd\u0637<\x1b\xb6\xacm\xb6\x00eI8\xdb\xf1z\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4aT}7nSi\xbc\xf9x\xfc\x16,1\xc9\b\"3\xb8%\xd0%\xbe?{\x10V\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4a\x91\xdd\u0276J\x8e\b\x90\xb427\t\u05e0|H\xb9*d\x89*\x03I\x19\u07ff\xbc\x00\x00\u07d4a\x96\xc3\xd3\xc0\x90\x8d%Cf\xb7\xbc\xa5WE\"-\x9dM\xb1\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4a\x9f\x17\x14E\xd4+\x02\xe2\xe0p\x04\xad\x8a\xfeiO\xa5=j\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4a\xad\xf5\x92\x9a^)\x81hN\xa2C\xba\xa0\x1f}\x1f^\x14\x8a\x89\x05\xfa\xbfl\x98O#\x00\x00\u07d4a\xb1\xb8\xc0\x12\xcdLx\xf6\x98\xe4p\xf9\x02V\xe6\xa3\x0fH\u0749\n\u05ce\xbcZ\xc6 \x00\x00\u07d4a\xb3\xdf.\x9e\x9f\xd9h\x13\x1f\x1e\x88\xf0\xa0\xeb[\xd7eFM\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4a\xb9\x02\u0166s\x88X&\x82\r\x1f\xe1EI\xe4\x86_\xbd\u0089\x12$\xef\xed*\u1440\x00\u07d4a\xb9\x05\xdef?\xc1s\x86R;:(\xe2\xf7\xd07\xa6U\u0349\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4a\xba\x87\xc7~\x9bYm\xe7\xba\x0e2o\xdd\xfe\xec!c\xeff\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4a\xbf\x84\u056b\x02oX\xc8s\xf8o\xf0\xdf\u0282\xb5W3\xae\x89lk\x93[\x8b\xbd@\x00\x00\u07d4a\xc4\xee|\x86LMk^7\xea\x131\xc2\x03s\x9e\x82k/\x89\x01\xa15;8*\x91\x80\x00\u07d4a\xc80\xf1eG\x18\xf0u\u032b\xa3\x16\xfa\xac\xb8[}\x12\v\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4a\xc8\xf1\xfaC\xbf\x84i\x99\xec\xf4{+2M\xfbkc\xfe:\x89+^:\xf1k\x18\x80\x00\x00\u07d4a\xc9\xdc\u8c98\x1c\xb4\x0e\x98\xb0@+\xc3\xeb(4\x8f\x03\xac\x89\n\xac\xac\u0679\xe2+\x00\x00\u07d4a\u03a7\x1f\xa4d\xd6*\a\x06?\x92\v\f\xc9\x17S\x973\u0609Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4a\xd1\x01\xa03\xee\x0e.\xbb1\x00\xed\xe7f\xdf\x1a\xd0$IT\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4a\xedU\x96\u0197 \u007f=U\xb2\xa5\x1a\xa7\xd5\x0f\a\xfa\t\xe8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4a\xff\x8eg\xb3M\x9e\xe6\xf7\x8e\xb3o\xfe\xa1\xb9\xf7\xc1W\x87\xaf\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4b\x05\xc2\xd5dtp\x84\x8a8@\xf3\x88~\x9b\x01]4u\\\x89a\x94\x04\x9f0\xf7 \x00\x00\u07d4b(\xad\xe9^\x8b\xb1}\x1a\xe2;\xfb\x05\x18AMI~\x0e\xb8\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94b)\xdc\xc2\x03\xb1\xed\xcc\xfd\xf0n\x87\x91\fE*\x1fMzr\x8a\x06\xe1\xd4\x1a\x8f\x9e\xc3P\x00\x00\u0794b+\xe4\xb4T\x95\xfc\xd91C\xef\xc4\x12\u0599\xd6\xcd\xc2=\u0148\xf0\x15\xf2W6B\x00\x00\u07d4b3\x1d\xf2\xa3\xcb\xee5 \xe9\x11\u07a9\xf7>\x90_\x89%\x05\x89lk\x93[\x8b\xbd@\x00\x00\u07d4bVD\xc9Z\x87>\xf8\xc0l\u06de\x9fm\x8dv\x80\x04=b\x89a\x94\x04\x9f0\xf7 \x00\x00\u07d4be\xb2\xe7s\x0f6\xb7v\xb5-\f\x9d\x02\xad\xa5]\x8e<\xb6\x8965\u026d\xc5\u07a0\x00\x00\u07d4bh\n\x15\xf8\u0338\xbd\xc0/s`\xc2Z\xd8\u03f5{\x8c\u034965\u026d\xc5\u07a0\x00\x00\u07d4b\x94\xea\xe6\xe4 \xa3\xd5`\n9\xc4\x14\x1f\x83\x8f\xf8\xe7\xccH\x89\xa00\xdc\xeb\xbd/L\x00\x00\u07d4b\x97\x1b\xf2cL\xee\v\xe3\u0249\x0fQ\xa5`\x99\u06f9Q\x9b\x89#\x8f\xd4,\\\xf0@\x00\x00\u07d4b\x9b\xe7\xab\x12jS\x98\xed\xd6\u069f\x18D~x\u0192\xa4\xfd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4b\xb4\xa9\"nah\a\x1el\xbea\x11\xfe\xf0\xbcc\x8a\x03\xba\x19\x10\xbf4\x1b\x00\x00\x00\xe0\x94c\n\x91:\x901\xc9I*\xbdLA\u06f1PT\xcf\xecD\x16\x8a\x014X\xdbg\xaf5\xe0\x00\x00\xe0\x94c\fRs\x12mQ|\xe6q\x01\x81\x1c\xab\x16\xb8SL\xf9\xa8\x8a\x01\xfe\xcc\xc6%s\xbb\u04c0\x00\u07d4c\x100\xa5\xb2{\a(\x8aEio\x18\x9e\x11\x14\xf1*\x81\xc0\x89\x1b\x1azB\v\xa0\r\x00\x00\u07d4c\x10\xb0 \xfd\x98\x04IW\x99P\x92\t\x0f\x17\xf0NR\xcd\xfd\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4c+\x91I\xd7\x01x\xa7364'^\x82\u0555?'\x96{\x89%\xf2s\x93=\xb5p\x00\x00\u07d4c,\xec\xb1\f\xfc\xf3\x8e\u0246\xb4;\x87p\xad\xec\xe9 \x02!\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4c1\x02\x8c\xbbZ!H[\xc5\x1bVQB\x99;\xdb%\x82\xa9\x89\x1c\xfd\xd7F\x82\x16\xe8\x00\x00\u07d4c3O\xcf\x17E\x84\x0eK\tJ;\xb4\v\xb7o\x96\x04\xc0L\x89\u05e5\xd7\x03\xa7\x17\xe8\x00\x00\u07d4c4\nWqk\xfac\xebl\xd13r\x12\x02W[\xf7\x96\xf0\x89\va\xe0\xa2\f\x12q\x80\x00\u07d4cN\xfc$7\x11\a\xb4\xcb\xf0?y\xa9=\xfd\x93\xe41\xd5\xfd\x89B5\x82\xe0\x8e\xdc\\\x80\x00\xe0\x94c\\\x00\xfd\xf05\xbc\xa1_\xa3a\r\xf38N\x0f\xb7\x90h\xb1\x8a\x01\xe7\xe4\x17\x1b\xf4\u04e0\x00\x00\u07d4ca.xb\xc2{X|\xfbm\xaf\x99\x12\xcb\x05\x1f\x03\n\x9f\x89\x02[\x19\u053f\xe8\xed\x00\x00\u07d4cfgU\xbdA\xb5\x98i\x97x<\x13\x040\b$+<\xb5\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4c{\xe7\x1b:\xa8\x15\xffE=VB\xf70tE\vd\xc8*\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94c}g\xd8\u007fXo\nZG\x9e \xee\x13\xea1\n\x10\xb6G\x8a\n:Y&\xaf\xa1\xe70\x00\x00\u07d4c\u007fXi\xd6\xe4i_\x0e\xb9\xe2s\x11\u0107\x8a\xff33\x80\x89j\xc0Nh\xaa\xec\x86\x00\x00\u07d4c\x97|\xad}\r\xcd\xc5+\x9a\xc9\xf2\xff\xa16\xe8d(\x82\xb8\x89\x04\x10\u0546\xa2\nL\x00\x00\u07d4c\xa6\x1d\xc3\n\x8e;0\xa7c\xc4!<\x80\x1c\xbf\x98s\x81x\x8965\u026d\xc5\u07a0\x00\x00\u07d4c\xacT\\\x99\x12C\xfa\x18\xae\xc4\x1dOoY\x8eUP\x15\u0709 \x86\xac5\x10R`\x00\x00\u07d4c\xb9uMu\xd1-8@9\xeci\x06<\v\xe2\x10\xd5\xe0\u3252\v\x86\f\xc8\xec\xfd\x80\x00\u07d4c\xbbfO\x91\x17\x03v(YM\xa7\xe3\xc5\b\x9f\xd6\x18\xb5\xb5\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4c\u00a3\xd25\xe5\xee\xab\xd0\u0526\xaf\u06c9\xd9F'9d\x95\x89CN\xf0[\x9d\x84\x82\x00\x00\u07d4c\xc8\xdf\xde\v\x8e\x01\xda\xdc.t\x8c\x82L\xc06\x9d\U00010cc9\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4c\xd5Z\u065b\x917\xfd\x1b \xcc+O\x03\xd4,\xba\xdd\xf34\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4c\xd8\x00H\x87u\x96\xe0\u0084\x89\xe6P\xcdJ\xc1\x80\tjI\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\xe0\x94c\xe4\x14`>\x80\xd4\xe5\xa0\xf5\xc1\x87t FB%\x82\b\xe4\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94c\xe8\x8e.S\x9f\xfbE\x03\x86\xb4\xe4g\x89\xb2#\xf5GlE\x8a\x01U\x17\nw\x8e%\xd0\x00\x00\u07d4c\xef/\xbc=\xaf^\xda\xf4\xa2\x95b\x9c\xcf1\xbc\xdf@8\xe5\x89O%\x91\xf8\x96\xa6P\x00\x00\u07d4c\xf0\xe5\xa7R\xf7\x9fg\x12N\xedc:\xd3\xfd'\x05\xa3\x97\u0509\u0556{\xe4\xfc?\x10\x00\x00\xe0\x94c\xf5\xb5=y\xbf.A\x14\x89Re0\"8E\xfa\xc6\xf6\x01\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4c\xfc\x93\x00\x13\x05\xad\xfb\u0278])\xd9)\x1a\x05\xf8\xf1A\v\x8965\u026d\xc5\u07a0\x00\x00\u0794c\xfek\xccK\x8a\x98P\xab\xbeu\x8070\xc92%\x1f\x14[\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4d\x03\xd0bT\x96\x90\xc8\xe8\xb6>\xaeA\xd6\xc1\tGn%\x88\x89lk\x93[\x8b\xbd@\x00\x00\u07d4d\x04+\xa6\x8b\x12\xd4\xc1Qe\x1c\xa2\x81;sR\xbdV\xf0\x8e\x89 \x86\xac5\x10R`\x00\x00\u0794d\x05\xdd\x13\xe9:\xbc\xff7~p\x0e<\x1a\x00\x86\xec\xa2})\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94d\n\xbam\xe9\x84\xd9E\x177x\x03p^\xae\xa7\t_J\x11\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4d\v\xf8t\x15\xe0\xcf@s\x01\xe5Y\x9ah6m\xa0\x9b\xba\u0209\x1a\xbc\x9fA`\x98\x15\x80\x00\u07d4d \xf8\xbc\xc8\x16JaR\xa9\x9dk\x99i0\x05\xcc\xf7\xe0S\x8965f3\xeb\xd8\xea\x00\x00\u07d4d$\x1axD)\x0e\n\xb8U\xf1\u052au\xb5SE\x03\"$\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4d&J\xed\xd5-\xca\xe9\x18\xa0\x12\xfb\xcd\f\x03\x0e\xe6\xf7\x18!\x8965\u026d\xc5\u07a0\x00\x00\u07d4d7\x0e\x87 &E\x12Z5\xb2\a\xaf\x121\xfb`r\xf9\xa7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4d=\x9a\xee\u0531\x80\x94~\u04b9 |\xceL=\xdcU\xe1\xf7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4dC\xb8\xaec\x9d\xe9\x1c\xf7\xf0p\xa5G\x03\xb7\x18NH'l\\\x00w\xefK4\x89\x11X\xe4`\x91=\x00\x00\x00\xe0\x94d\xe2\xde! \v\x18\x99\u00e0\xc0e;P@\x13m\r\xc8B\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4d\xec\x8a[t?4y\xe7\a\xda\xe9\xee \u076aO@\xf1\u0649\n\u05ce\xbcZ\xc6 \x00\x00\u07d4e\x03\x86\v\x19\x10\b\xc1U\x83\xbf\u0201X\t\x93\x01v((\x8965\u026d\xc5\u07a0\x00\x00\u07d4e\x051\x911\x9e\x06z%\xe66\x1dG\xf3\u007fc\x18\xf84\x19\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4e\t;#\x9b\xbf\xba#\xc7w\\\xa7\xdaZ\x86H\xa9\xf5L\xf7\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4e\t\xee\xb14~\x84/\xfbA>7\x15^,\xbcs\x82s\xfd\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94e\vBUU\xe4\xe4\xc5\x17\x18\x14h6\xa2\xc1\xeew\xa5\xb4!\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4e\f\xf6}\xb0`\xcc\xe1uh\xd5\xf2\xa4#h|Idv\t\x89\x05k\xc7^-c\x10\x00\x00\u07d4e\x10\xdfB\xa5\x99\xbc\xb0\xa5\x19\u0329a\xb4\x88u\x9aogw\x89lk\x93[\x8b\xbd@\x00\x00\u07d4e6u\xb8B\xd7\u0634a\xf7\"\xb4\x11|\xb8\x1d\xac\x8ec\x9d\x89\x01\xae6\x1f\xc1E\x1c\x00\x00\u07d4eK~\x80\x87\x99\xa8=r\x87\xc6w\x06\xf2\xab\xf4\x9aId\x04\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94eORHG\xb3\xa6\xac\xc0\xd3\xd5\xf1\xf3b\xb6\x03\xed\xf6_\x96\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4eY4\u068etN\xaa=\xe3M\xbb\xc0\x89LN\xda\va\xf2\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4e]\\\xd7H\x96)\xe2ANIb?\xabb\xa1~M6\x11\x89\x05\fL\xb2\xa1\f`\x00\x00\u07d4e\xaf\x8d\x8b[\x1d\x1e\xed\xfaw\xbc\xbc\x96\xc1\xb13\xf83\x06\u07c9\x05P\x05\xf0\xc6\x14H\x00\x00\u07d4e\xaf\x90\x87\xe0QgqT\x97\u0265\xa7I\x18\x94\x89\x00M\xef\x89-C\xf3\xeb\xfa\xfb,\x00\x00\u0794e\xb4/\xae\xcc\x1e\u07f1B\x83\u0297\x9a\xf5E\xf6;0\xe6\f\x88\xfc\x93c\x92\x80\x1c\x00\x00\u0794e\xd3>\xb3\x9c\xdadS\xb1\x9ea\xc1\xfeM\xb91p\xef\x9d4\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4e\xd8\xddN%\x1c\xbc\x02\x1f\x05\xb0\x10\xf2\xd5\xdcR\f8r\xe0\x89-CW\x9a6\xa9\x0e\x00\x00\u07d4e\xea&\xea\xbb\xe2\xf6L\xcc\xcf\xe0h)\xc2]F7R\x02%\x89%\xf2s\x93=\xb5p\x00\x00\u07d4e\xeag\xad?\xb5j\xd5\xfb\x948}\u04ce\xb3\x83\x00\x1d|h\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94e\xeb\xae\xd2~\u06dd\xcc\x19W\xae\xe5\xf4R\xac!\x05\xa6\\\x0e\x8a\t7\u07ed\xae%\u26c0\x00\u07d4e\xee \xb0m\x9a\u0549\xa7\xe7\xce\x04\xb9\xf5\xf7\x95\xf4\x02\xae\u0389lk\x93[\x8b\xbd@\x00\x00\u07d4e\xf544m/\xfbx\u007f\xa9\xcf\x18]t[\xa4)\x86\xbdn\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94e\xf5\x87\x0f&\xbc\xe0\x89g}\xfc#\xb5\x00\x1e\xe4\x92H4(\x8a\x01\x12\xb1\xf1U\xaa2\xa3\x00\x00\u07d4e\xfd\x02\xd7\x04\xa1*M\xac\xe9G\x1b\x06E\xf9b\xa8\x96q\u0209\x01\x8d\x1c\xe6\xe4'\u0340\x00\u07d4e\xff\x87O\xaf\xceM\xa3\x18\xd6\xc9=W\xe2\u00ca\rs\xe8 \x8968\x02\x1c\xec\u06b0\x00\x00\xe0\x94f\x05W\xbbC\xf4\xbe:\x1b\x8b\x85\xe7\xdf{<[\xcdT\x80W\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4f\b,u\xa8\xde1\xa59\x13\xbb\xd4M\xe3\xa07O\u007f\xaaA\x89O%\x91\xf8\x96\xa6P\x00\x00\u07d4f\x11\xceY\xa9\x8b\a*\xe9Y\xdcI\xadQ\x1d\xaa\xaa\xa1\x9dk\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4f \x1b\xd2'\xaem\u01bd\xfe\xd5\xfb\u0781\x1f\xec\xfe^\x9d\u0649 >\x9e\x84\x92x\x8c\x00\x00\u07d4f#4\x81G$\x93[y1\xdd\xcaa\x00\xe0\rFw'\u0349\"\x88&\x9d\a\x83\xd4\x00\x00\u07d4f'O\xea\x82\xcd0\xb6\u009b#5\x0eOO=1\nX\x99\x89p7\x05P\xab\x82\x98\x00\x00\u07d4f,\xfa\x03\x8f\xab7\xa0\x17E\xa3d\u1e41'\xc5\x03tm\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4f5\xb4oq\x1d-\xa6\xf0\xe1cp\u034e\xe4>\xfb,-R\x89lk\x93[\x8b\xbd@\x00\x00\u07d4f6\x04\xb0P0F\xe6$\xcd&\xa8\xb6\xfbGB\xdc\xe0*o\x89\x03\x8b\x9by~\xf6\x8c\x00\x00\u07d4f6\u05ecczH\xf6\x1d8\xb1L\xfdHe\xd3m\x14(\x05\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4f@\xcc\xf0SU\\\x13\n\xe2\xb6Vd~\xa6\xe3\x167\xb9\xab\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4fBK\xd8x[\x8c\xb4a\x10*\x90\x02\x83\xc3]\xfa\a\xefj\x89\x02.-\xb2ff\xfc\x80\x00\u07d4fL\xd6}\xcc\u026c\x82(\xb4\\U\u06cdvU\ve\x9c\u0709\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4fNC\x11\x98p\xaf\x10zD\x8d\xb1'\x8b\x04H8\xff\u036f\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4fQso\xb5\x9b\x91\xfe\xe9\xc9:\xa0\xbdn\xa2\xf7\xb2Pa\x80\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4f[\x00\x0f\vw'P\xcc\x89k\x91\x8a\xacIK\x16\x80\x00\xe0\x94g]\\\xaa`\x9b\xf7\n\x18\xac\xa5\x80F]\x8f\xb71\r\x1b\xbb\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4gc F\u0732ZT\x93i(\xa9oB?3 \xcb\ud489lk\x93[\x8b\xbd@\x00\x00\u07d4ge\xdf%(\x0e\x8eO8\u0531\xcfDo\xc5\xd7\xebe\x9e4\x89\x05k\xc7^-c\x10\x00\x00\u07d4gv\xe13\xd9\xdc5L\x12\xa9Q\b{c\x96P\xf59\xa43\x89\x06\x81U\xa46v\xe0\x00\x00\u07d4g\x85Q<\xf72\xe4~\x87g\ap\xb5A\x9b\xe1\f\xd1\xfct\x89lk\x93[\x8b\xbd@\x00\x00\u07d4g\x947\xea\xcfCxx\xdc)=H\xa3\x9c\x87\xb7B\x1a!l\x89\x03\u007f\x81\x82\x1d\xb2h\x00\x00\u07d4g\x9b\x9a\x10\x990Q~\x89\x99\t\x9c\xcf*\x91LL\x8d\xd94\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4g\xa8\x0e\x01\x90r\x1f\x949\rh\x02r\x9d\xd1,1\xa8\x95\xad\x89lk\x13u\xbc\x91V\x00\x00\u07d4g\xb8\xa6\xe9\x0f\xdf\n\x1c\xacD\x17\x930\x1e\x87P\xa9\xfayW\x890\x84\x9e\xbe\x166\x9c\x00\x00\u07d4g\xbc\x85\xe8}\xc3LN\x80\xaa\xfa\x06k\xa8\u049d\xbb\x8eC\x8e\x89\x15\xd1\xcfAv\xae\xba\x00\x00\u07d4g\xc9&\t>\x9b\x89'\x938\x10\u0642\"\xd6.+\x82\x06\xbb\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4g\xcf\xdanp\xbfvW\u04d0Y\xb5\x97\x90\xe5\x14Z\xfd\xbea\x89#\x05\r\tXfX\x00\x00\u07d4g\u0582\xa2\x82\xefs\xfb\x8dn\x90q\xe2aOG\xab\x1d\x0f^\x8965\u026d\xc5\u07a0\x00\x00\u07d4g\u05a8\xaa\x1b\xf8\xd6\xea\xf78N\x99=\xfd\xf1\x0f\n\xf6\x8aa\x89\n\xbc\xbbW\x18\x97K\x80\x00\u07d4g\u0692.\xff\xa4r\xa6\xb1$\xe8N\xa8\xf8k$\xe0\xf5\x15\xaa\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4g\xdf$-$\r\u0538\a\x1dr\xf8\xfc\xf3[\xb3\x80\x9dq\xe8\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4g\xee@n\xa4\xa7\xaej:8\x1e\xb4\xed\xd2\xf0\x9f\x17KI(\x898)c_\th\xb0\x00\x00\u07d4g\xf2\xbbx\xb8\xd3\xe1\x1f|E\x8a\x10\xb5\xc8\xe0\xa1\xd3tF}\x89a\t=|,m8\x00\x00\u07d4g\xfcR}\xce\x17\x85\xf0\xfb\x8b\xc7\xe5\x18\xb1\xc6i\xf7\xec\u07f5\x89\r\x02\xabHl\xed\xc0\x00\x00\u07d4h\x02}\x19U\x8e\xd73\x9a\b\xae\xe8\xde5Y\xbe\x06>\xc2\xea\x89lk\x93[\x8b\xbd@\x00\x00\u07d4h\x06@\x83\x8b\xd0zD{\x16\x8dm\x92;\x90\xcflC\xcd\u0289]\u0212\xaa\x111\xc8\x00\x00\u07d4h\a\xdd\u020d\xb4\x89\xb03\xe6\xb2\xf9\xa8\x15SW\x1a\xb3\xc8\x05\x89\x01\x9f\x8euY\x92L\x00\x00\xe0\x94h\rY\x11\xed\x8d\xd9\xee\xc4\\\x06\f\"?\x89\xa7\xf6 \xbb\u054a\x04<3\xc1\x93ud\x80\x00\x00\u07d4h\x11\xb5L\u0456c\xb1\x1b\x94\xda\x1d\xe2D\x82\x85\u035fh\u0649;\xa1\x91\v\xf3A\xb0\x00\x00\u07d4h\x19\f\xa8\x85\xdaB1\x87L\x1c\xfbB\xb1X\n!s\u007f8\x89\xcf\x15&@\xc5\xc80\x00\x00\xe0\x94h(\x97\xbcO\x8e\x89\x02\x91 \xfc\xff\xb7\x87\xc0\x1a\x93\xe6A\x84\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4h)^\x8e\xa5\xaf\xd9\t?\xc0\xa4e\xd1W\x92+]*\xe24\x89\x01\x15NS!}\xdb\x00\x00\u07d4h.\x96'oQ\x8d1\xd7\xe5n0\u07f0\t\xc1!\x82\x01\xbd\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4h5\xc8\xe8\xb7J,\xa2\xae?J\x8d\x0fk\x95J>*\x83\x92\x89\x03B\x9c3]W\xfe\x00\x00\u07d4h63\x01\n\x88hk\xeaZ\x98\xeaS\xe8y\x97\xcb\xf7>i\x89\x05k9Bc\xa4\f\x00\x00\u07d4h=\xba6\xf7\xe9O@\xeaj\xea\ry\xb8\xf5!\xdeU\an\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4hA\x9cm\xd2\xd3\xceo\u02f3\xc7>/\xa0y\xf0`Q\xbd\xe6\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4hG;z}\x96Y\x04\xbe\u06e5V\u07fc\x17\x13l\xd5\xd44\x89\x05k\xc7^-c\x10\x00\x00\u07d4hG\x82[\xde\xe8$\x0e(\x04,\x83\xca\xd6B\U000868fd\u0709QP\xae\x84\xa8\xcd\xf0\x00\x00\xe0\x94hJD\xc0i3\x9d\b\xe1\x9auf\x8b\u06e3\x03\xbe\x85S2\x8a\x0e\u04b5%\x84\x1a\xdf\xc0\x00\x00\u07d4hS\x1fM\u0680\x8fS vz\x03\x114(\xca\f\xe2\xf3\x89\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4hy'\xe3\x04\x8b\xb5\x16*\xe7\xc1\\\xf7k\xd1$\xf9I{\x9e\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94h\x80\x9a\xf5\xd52\xa1\x1c\x1aMn2\xaa\xc7\\LR\xb0\x8e\xad\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4h\x86\xad\xa7\xbb\xb0a{\u0684!\x91\u018c\x92.\xa3\xa8\xac\x82\x89>\xe2;\xde\x0e} \x00\x00\xe0\x94h\x88>\x15.V`\xfe\xe5\x96&\xe7\xe3\xb4\xf0Q\x10\xe6\"/\x8a\v\x94c;\xe9u\xa6*\x00\x00\u07d4h\x8aV\x9e\x96U$\xeb\x1d\n\xc3\xd3s>\xab\x90\x9f\xb3\xd6\x1e\x89G\x8e\xae\x0eW\x1b\xa0\x00\x00\xe0\x94h\x8e\xb3\x85;\xbc\xc5\x0e\xcf\xee\x0f\xa8\u007f\n\xb6\x93\u02bd\xef\x02\x8a\x06\xb1\n\x18@\x06G\xc0\x00\x00\u07d4h\xa7B_\xe0\x9e\xb2\x8c\xf8n\xb1y>A\xb2\x11\xe5{\u058d\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4h\xa8l@#\x88\xfd\xdcY\x02\x8f\xecp!\u933f\x83\x0e\xac\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\xe0\x94h\xac\u06a9\xfb\x17\xd3\xc3\t\x91\x1aw\xb0_S\x91\xfa\x03N\xe9\x8a\x01\xe5.3l\xde\"\x18\x00\x00\u07d4h\xad\xdf\x01\x9dk\x9c\xabp\xac\xb1?\v1\x17\x99\x9f\x06.\x12\x89\x02\xb5\x12\x12\xe6\xb7\u0200\x00\u07d4h\xb3\x186\xa3\n\x01j\xda\x15{c\x8a\xc1]\xa7?\x18\xcf\u0789\x01h\u048e?\x00(\x00\x00\xe0\x94h\xb6\x85G\x88\xa7\xc6Il\xdb\xf5\xf8K\x9e\xc5\xef9+x\xbb\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4h\xc0\x84\x90\u021b\xf0\u05b6\xf3 \xb1\xac\xa9\\\x83\x12\xc0\x06\b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4h\xc7\xd1q\x1b\x01\x1a3\xf1o\x1fU\xb5\xc9\x02\xcc\xe9p\xbd\u05c9\b=lz\xabc`\x00\x00\u07d4h\xc8y\x1d\xc3B\xc3sv\x9e\xa6\x1f\xb7\xb5\x10\xf2Q\xd3 \x88\x8965\u026d\xc5\u07a0\x00\x00\u07d4h\u07d4|I[\ubbb8\u8273\xf9S\xd53\x87K\xf1\x06\x89\x1d\x99E\xab+\x03H\x00\x00\u07d4h\xe8\x02'@\xf4\xaf)\xebH\xdb2\xbc\xec\xdd\xfd\x14\x8d=\xe3\x8965\u026d\xc5\u07a0\x00\x00\u07d4h\xecy\u057eqUql@\x94\x1cy\u05cd\x17\u079e\xf8\x03\x89\x1b#8w\xb5 \x8c\x00\x00\u07d4h\xee\xc1\u222c1\xb6\xea\xba~\x1f\xbdO\x04\xadW\x9ak]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4h\xf5%\x92\x1d\xc1\x1c2\x9buO\xbf>R\x9f\xc7#\xc84\u0349WG=\x05\u06ba\xe8\x00\x00\u07d4h\xf7\x19\xae4+\xd7\xfe\xf1\x8a\x05\u02f0/pZ\u04ce\u0572\x898\xeb\xad\\\u0710(\x00\x00\xe0\x94h\xf7W<\xd4W\xe1L\x03\xfe\xa4>0-04|\x10p\\\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4h\xf8\xf4QU\xe9\x8cP)\xa4\xeb\u0175'\xa9.\x9f\xa81 \x89\xf0{D\xb4\a\x93 \x80\x00\u07d4h\xfe\x13W!\x8d\tXI\xcdW\x98B\u012a\x02\xff\x88\x8d\x93\x89lk\x93[\x8b\xbd@\x00\x00\u07d4i\x02(\xe4\xbb\x12\xa8\u0535\u09d7\xb0\xc5\xcf*u\t\x13\x1e\x89e\xea=\xb7UF`\x00\x00\u07d4i\x05\x94\xd3\x06a<\xd3\xe2\xfd$\xbc\xa9\x99J\u064a=s\xf8\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94i\a2ir\x9ed\x14\xb2n\xc8\xdc\x0f\xd95\xc7;W\x9f\x1e\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\xe0\x94i\x19\xdd^]\xfb\x1a\xfa@G\x03\xb9\xfa\xea\x8c\xee5\xd0\rp\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4i4\x92\xa5\xc5\x13\x96\xa4\x82\x88\x16i\xcc\xf6\xd8\xd7y\xf0\tQ\x89\x12\xbfPP:\xe3\x03\x80\x00\u07d4i=\x83\xbe\tE\x9e\xf89\v.0\xd7\xf7\u008d\xe4\xb4(N\x89lk\x93[\x8b\xbd@\x00\x00\u07d4iQp\x83\xe3\x03\xd4\xfb\xb6\xc2\x11E\x14!]i\xbcF\xa2\x99\x89\x05k\xc7^-c\x10\x00\x00\u07d4iUPel\xbf\x90\xb7]\x92\xad\x91\"\xd9\r#\xcah\xcaM\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94iX\xf8;\xb2\xfd\xfb'\xce\x04\t\xcd\x03\xf9\xc5\xed\xbfL\xbe\u074a\x04<3\xc1\x93ud\x80\x00\x00\u0794i[\x0fRBu7\x01\xb2d\xa6pq\xa2\u0708\b6\xb8\u06c8\u3601\x1b\xech\x00\x00\xe0\x94i[L\xce\bXV\xd9\xe1\xf9\xff>y\x94 #5\x9e_\xbc\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94if\x06:\xa5\xde\x1d\xb5\xc6q\xf3\xddi\x9dZ\xbe!>\xe9\x02\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4it\u0224\x14\u03ae\xfd<.M\xfd\xbe\xf40V\x8d\x9a\x96\v\x89\x12\x1e\xa6\x8c\x11NQ\x00\x00\xe0\x94iximQP\xa9\xa2cQ?\x8ft\u0196\xf8\xb19|\xab\x8a\x01g\xf4\x82\xd3\u0171\xc0\x00\x00\xe0\x94iy{\xfb\x12\u027e\u0582\xb9\x1f\xbcY5\x91\xd5\xe4\x027(\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94i\u007fUSk\xf8Z\xdaQ\x84\x1f\x02\x87b:\x9f\x0e\u041a\x17\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4i\x82\xfe\x8a\x86~\x93\xebJ\v\xd0QX\x93\x99\xf2\xec\x9aR\x92\x89lk\x93[\x8b\xbd@\x00\x00\u07d4i\x8a\x8ao\x01\xf9\xabh/c|yi\xbe\x88_lS\x02\xbf\x89\x01\r:\xa56\xe2\x94\x00\x00\u07d4i\x8a\xb9\xa2\xf33\x81\xe0|\fGC=\r!\xd6\xf36\xb1'\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4i\x94\xfb21\xd7\xe4\x1dI\x1a\x9dh\xd1\xfaL\xae,\xc1Y`\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4i\x9c\x9e\xe4q\x95Q\x1f5\xf8b\xcaL\"\xfd5\xae\x8f\xfb\xf4\x89\x04V9\x18$O@\x00\x00\u07d4i\x9f\xc6\u058aGuW<\x1d\u036e\xc80\xfe\xfdP9|N\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4i\xaf(\xb0tl\xac\r\xa1p\x84\xb99\x8c^6\xbb:\r\xf2\x896w\x03n\xdf\n\xf6\x00\x00\u07d4i\xb8\x0e\xd9\x0f\x84\x83J\xfa?\xf8.\xb9dp;V\tw\u0589\x01s\x17\x90SM\xf2\x00\x00\xe0\x94i\xb8\x1dY\x81\x14\x1e\u01e7\x14\x10`\xdf\u03cf5\x99\xff\xc6>\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4i\xbc\xfc\x1dC\xb4\xba\x19\xde{'K\xdf\xfb5\x13\x94\x12\xd3\u05c95e\x9e\xf9?\x0f\xc4\x00\x00\u07d4i\xbd%\xad\xe1\xa34lY\xc4\xe90\xdb*\x9dq^\xf0\xa2z\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4i\xc0\x8dtGT\xdep\x9c\xe9n\x15\xae\r\x1d9[:\"c\x8965\u026d\xc5\u07a0\x00\x00\u07d4i\xc2\xd85\xf1>\xe9\x05\x80@\x8ej2\x83\xc8\u0326\xa44\xa2\x89#\x8f\xd4,\\\xf0@\x00\x00\u07d4i\xc9N\a\u0129\xbe3\x84\xd9]\xfa<\xb9)\x00Q\x87;{\x89\x03\xcbq\xf5\x1f\xc5X\x00\x00\u07d4i\xcb>!S\x99\x8d\x86\xe5\xee \xc1\xfc\u0466\xba\uec86?\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4i\u04ddQ\b\x89\xe5R\xa3\x96\x13[\xfc\xdb\x06\xe3~8v3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94i\u064f8\xa3\xba=\xbc\x01\xfa\\,\x14'\xd8b\x83//p\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94i\xe2\xe2\xe7\x040|\xcc[\\\xa3\xf1d\xfe\xce.\xa7\xb2\xe5\x12\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4i\xffB\x90t\u02dblc\xbc\x91B\x84\xbc\xe5\xf0\xc8\xfb\xf7\u0409\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4i\xff\x89\x01\xb5Av?\x81|_)\x98\xf0-\xcf\xc1\xdf)\x97\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4j\x02:\xf5}XM\x84^i\x876\xf10\u06dd\xb4\r\xfa\x9a\x89\x05[ \x1c\x89\x00\x98\x00\x00\u07d4j\x04\xf5\xd5?\xc0\xf5\x15\xbe\x94+\x8f\x12\xa9\xcbz\xb0\xf3\x97x\x89\xa9\xaa\xb3E\x9b\xe1\x94\x00\x00\u07d4j\x05\xb2\x1cO\x17\xf9\xd7?_\xb2\xb0\u02c9\xffSV\xa6\xcc~\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\xe0\x94j\x0f\x05`f\xc2\xd5f(\x85\x02s\xd7\xec\xb7\xf8\xe6\xe9\x12\x9e\x8a\x01\x0f\r)<\u01e5\x88\x00\x00\u07d4j\x13\xd5\xe3,\x1f\xd2m~\x91\xffn\x051`\xa8\x9b,\x8a\xad\x89\x02\xe6/ \xa6\x9b\xe4\x00\x00\u07d4j.\x86F\x9a[\xf3|\xee\x82\xe8\x8bL8c\x89](\xfc\xaf\x89\x1c\"\x92f8[\xbc\x00\x00\u07d4j6\x94BL|\u01b8\xbc\u067c\u02baT\f\xc1\xf5\xdf\x18\u05c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94jB\u0297\x1cex\u056d\xe2\x95\xc3\xe7\xf4\xad3\x1d\xd3BN\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4jD\xaf\x96\xb3\xf02\xaed\x1b\xebg\xf4\xb6\xc83B\xd3|]\x89\x01\x92t\xb2Y\xf6T\x00\x00\u07d4jL\x89\a\xb6\x00$\x80W\xb1\xe4cT\xb1\x9b\u0705\x9c\x99\x1a\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4jQNbB\xf6\xb6\x8c\x13~\x97\xfe\xa1\u73b5U\xa7\xe5\xf7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4jS\xd4\x1a\xe4\xa7R\xb2\x1a\xbe\xd57FI\x95:Q=\xe5\xe5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4jaY\aJ\xb5s\xe0\xeeX\x1f\x0f=\xf2\u05a5\x94b\x9bt\x89\x10\xce\x1d=\x8c\xb3\x18\x00\x00\u07d4jc7\x83?\x8fjk\xf1\f\xa7\xec!\xaa\x81\x0e\xd4D\xf4\u02c97\xbd$4\\\xe8\xa4\x00\x00\u07d4jcS\xb9qX\x9f\x18\xf2\x95\\\xba(\xab\xe8\xac\xcejWa\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4jc\xfc\x89\xab\xc7\xf3n(-\x80x{{\x04\xaf\xd6U>q\x89\b\xacr0H\x9e\x80\x00\x00\u07d4jg\x9e7\x8f\xdc\xe6\xbf\xd9\u007f\xe6/\x04)Z$\xb9\x8965\u026d\xc5\u07a0\x00\x00\u07d4j\x8c\xea-\xe8J\x8d\xf9\x97\xfd?\x84\xe3\b=\x93\xdeW\u0369\x89\x05k\xe0<\xa3\xe4}\x80\x00\xe0\x94j\x97Xt;`>\xea:\xa0RKB\x88\x97#\xc4\x159H\x8a\x02#\x85\xa8'\xe8\x15P\x00\x00\u07d4j\xa5s/;\x86\xfb\x8c\x81\xef\xbek[G\xb5cs\v\x06\u020965\u026d\xc5\u07a0\x00\x00\u07d4j\xb3#\xaePV\xed\nE0r\u016b\xe2\xe4/\xcf]q9\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4j\xb5\xb4\xc4\x1c\u0778)i\f/\xda\u007f \xc8^b\x9d\xd5\u0549d\u052fqL2\x90\x00\x00\u07d4j\xc4\x0fS-\xfe\xe5\x11\x81\x17\u04ad5-\xa7}Om\xa2\u0209\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4j\xc4\u053e-\xb0\u065d\xa3\xfa\xaa\xf7RZ\xf2\x82\x05\x1dj\x90\x89\x04X\xcaX\xa9b\xb2\x80\x00\u07d4j\xcd\u0723\xcd+I\x90\xe2\\\xd6\\$\x14\x9d\t\x12\t\x9ey\x89\xa2\xa1\xe0|\x9fl\x90\x80\x00\u07d4j\xd9\v\xe2R\xd9\xcdFM\x99\x81%\xfa\xb6\x93\x06\v\xa8\xe4)\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4j\u0753!\x93\xcd8IJ\xa3\xf0:\xec\xccKz\xb7\xfa\xbc\xa2\x89\x04\xdbs%Gc\x00\x00\x00\xe0\x94j\xe5\u007f'\x91|V*\x13*M\x1b\xf7\xec\n\u01c5\x83)&\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4j\xeb\x9ftt.\xa4\x91\x81=\xbb\xf0\xd6\xfc\xde\x1a\x13\x1dM\xb3\x89\x17\xe5T0\x8a\xa00\x00\x00\u07d4j\xf25\u04bb\xe0P\xe6)\x16\x15\xb7\x1c\xa5\x82\x96X\x81\x01B\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4j\xf6\xc7\xee\x99\xdf'\x1b\xa1[\xf3\x84\xc0\xb7d\xad\xcbM\xa1\x82\x8965f3\xeb\xd8\xea\x00\x00\u07d4j\xf8\xe5Yih,q_H\xadO\xc0\xfb\xb6~\xb5\x97\x95\xa3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4j\xf9@\xf6>\u0278\xd8v'*\u0296\xfe\xf6\\\xda\xce\xcd\ua262\xa1]\tQ\x9b\xe0\x00\x00\u07d4j\xf9\xf0\xdf\uebbb_d\xbf\x91\xabw\x16i\xbf\x05)US\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4j\xff\x14f\xc2b6u\xe3\xcb\x0eu\xe4#\xd3z%\xe4B\xeb\x89]\u0212\xaa\x111\xc8\x00\x00\xe0\x94k\r\xa2Z\xf2g\u05c3l\"k\xca\xe8\xd8r\xd2\xceR\xc9A\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4k\x10\xf8\xf8\xb3\xe3\xb6\r\xe9\n\xa1-\x15_\x9f\xf5\xff\xb2,P\x89lk\x93[\x8b\xbd@\x00\x00\u07d4k\x17Y\x8a\x8e\xf5Oyz\xe5\x15\u0336Q}\x18Y\xbf\x80\x11\x89\x05k\xc7^-c\x10\x00\x00\u07d4k \xc0\x80`jy\xc7;\xd8\xe7[\x11qzN\x8d\xb3\xf1\u00c9\x10?sX\x03\xf0\x14\x00\x00\u07d4k\"\x84D\x02!\xce\x16\xa88-\xe5\xff\x02)G\"i\xde\xec\x8965\u026d\xc5\u07a0\x00\x00\u07d4k0\xf1\x829\x10\xb8m:\xcbZj\xfc\x9d\xef\xb6\xf3\xa3\v\xf8\x89\u3bb5sr@\xa0\x00\x00\u07d4k8\u0784\x1f\xad\u007fS\xfe\x02\xda\x11[\xd8j\xaff$f\xbd\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4kK\x99\xcb?\xa9\xf7\xb7L\u3903\x17\xb1\xcd\x13\t\n\x1az\x89\x03\x1b2~i]\xe2\x00\x00\u07d4kZ\xe7\xbfx\xecu\xe9\f\xb5\x03\xc7x\xcc\u04f2KO\x1a\xaf\x89+^:\xf1k\x18\x80\x00\x00\u07d4kc\xa2\u07f2\xbc\xd0\xca\xec\x00\"\xb8\x8b\xe3\f\x14Q\xeaV\xaa\x89+\xdbk\xf9\x1f\u007fL\x80\x00\u07d4kew\xf3\x90\x9aMm\xe0\xf4\x11R-Ep8d\x004\\\x89e\xea=\xb7UF`\x00\x00\u07d4kr\xa8\xf0a\xcf\xe6\x99j\xd4G\xd3\xc7,(\xc0\xc0\x8a\xb3\xa7\x89\xe7\x8cj\u01d9\x12b\x00\x00\u07d4kv\rHw\xe6\xa6'\xc1\xc9g\xbe\xe4Q\xa8P}\xdd\u06eb\x891T\xc9r\x9d\x05x\x00\x00\u07d4k\x83\xba\xe7\xb5e$EXU[\xcfK\xa8\xda \x11\x89\x1c\x17\x89lk\x93[\x8b\xbd@\x00\x00\u07d4k\x92]\xd5\xd8\xeda2\xabm\b`\xb8,D\xe1\xa5\x1f\x1f\xee\x89P; >\x9f\xba \x00\x00\xe0\x94k\x94a]\xb7Pej\u00cc~\x1c\xf2\x9a\x9d\x13g\u007fN\x15\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4k\x95\x1aC'N\xea\xfc\x8a\t\x03\xb0\xaf.\xc9+\xf1\xef\xc89\x89\x05k\xc7^-c\x10\x00\x00\u07d4k\x99%!\xec\x85#p\x84\x8a\u0597\xcc-\xf6Nc\xcc\x06\xff\x8965\u026d\xc5\u07a0\x00\x00\u07d4k\xa8\xf7\xe2_\xc2\xd8qa\x8e$\xe4\x01\x84\x19\x917\xf9\xf6\xaa\x89\x15\xafd\x86\x9ak\xc2\x00\x00\u07d4k\xa9\xb2\x1b5\x10k\xe1Y\xd1\xc1\xc2ez\xc5l\u049f\xfdD\x89\xf2\xdc}G\xf1V\x00\x00\x00\u07d4k\xafz*\x02\xaex\x80\x1e\x89\x04\xadz\xc0Q\b\xfcV\xcf\xf6\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94k\xb2\xac\xa2?\xa1bm\x18\xef\xd6w\u007f\xb9}\xb0-\x8e\n\xe4\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4k\xb4\xa6a\xa3:q\xd4$\u051b\xb5\xdf(b.\xd4\xdf\xfc\xf4\x89\",\x8e\xb3\xfff@\x00\x00\u07d4k\xb5\b\x13\x14j\x9a\xddB\xee\"\x03\x8c\x9f\x1fti\xd4\u007fG\x89\n\xdaUGK\x814\x00\x00\u07d4k\xbc?5\x8af\x8d\u0461\x1f\x03\x80\xf3\xf71\bBj\xbdJ\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4k\xbd\x1eq\x93\x90\xe6\xb9\x10C\xf8\xb6\xb9\u07c9\x8e\xa8\x00\x1b4\x89llO\xa6\xc3\xdaX\x80\x00\u07d4k\xc8Z\xcdY(r.\xf5\tS1\xee\x88\xf4\x84\xb8\u03c3W\x89\t\xc2\x00vQ\xb2P\x00\x00\u07d4k\xd3\xe5\x9f#\x9f\xaf\xe4wk\xb9\xbd\xddk\ue0fa]\x9d\x9f\x8965\u026d\xc5\u07a0\x00\x00\u07d4k\xd4W\xad\xe0Qy]\xf3\xf2F\\89\xae\xd3\xc5\xde\xe9x\x8964\xbf9\xab\x98x\x80\x00\u07d4k\xe1c\x13d>\xbc\x91\xff\x9b\xb1\xa2\xe1\x16\xb8T\xea\x93:E\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4k\xe7Y^\xa0\xf0hH\x9a'\x01\xecFI\x15\x8d\xdcC\xe1x\x89lk\x93[\x8b\xbd@\x00\x00\u07d4k\xe9\x03\x0e\xe6\xe2\xfb\u0111\xac\xa3\xde@\"\xd3\x01w+{}\x89\x01s\x17\x90SM\xf2\x00\x00\xe0\x94k\xec1\x1a\xd0P\b\xb4\xaf5<\x95\x8c@\xbd\x06s\x9a?\xf3\x8a\x03w\xf6*\x0f\nbp\x00\x00\u07d4k\xf7\xb3\xc0e\xf2\xc1\xe7\xc6\xeb\t+\xa0\xd1Pf\xf3\x93\u0478\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4k\xf8o\x1e/+\x802\xa9\\Mw8\xa1\t\xd3\xd0\xed\x81\x04\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4l\x05\xe3N^\xf2\xf4.\u041d\xef\xf1\x02l\xd6k\xcbi`\xbb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4l\b\xa6\xdc\x01s\xc74)U\xd1\xd3\xf2\xc0e\xd6/\x83\xae\u01c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4l\n\xe9\xf0C\xc84\xd4Bq\xf14\x06Y=\xfe\tO8\x9f\x89RD*\xe13\xb6*\x80\x00\u07d4l\f\xc9\x17\xcb\xee}|\t\x97c\xf1Nd\xdf}4\xe2\xbf\t\x89\r\x8drkqw\xa8\x00\x00\xe0\x94l\x0eq/@\\Yr_\xe8)\xe9wK\xf4\xdf\u007fM\xd9e\x8a\f(h\x88\x9c\xa6\x8aD\x00\x00\xe0\x94l\x10\x12\x05\xb3#\xd7uD\xd6\xdcR\xaf7\xac\xa3\xce\xc6\xf7\xf1\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4l\x15\xec5 \xbf\x8e\xbb\xc8 \xbd\x0f\xf1\x97x7T\x94\u03dd\x89l\xb7\xe7Hg\xd5\xe6\x00\x00\xe0\x94l\x1d\xdd3\xc8\x19f\u0706!w`q\xa4\x12\x94\x82\xf2\xc6_\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4l%2\u007f\x8d\u02f2\xf4^V\x1e\x86\xe3]\x88P\xe5:\xb0Y\x89;\xcd\xf9\xba\xfe\xf2\xf0\x00\x00\u07d4l.\x9b\xe6\u052bE\x0f\xd1%1\xf3?\x02\x8caFt\xf1\x97\x89\xc2\x12z\xf8X\xdap\x00\x00\u07d4l5\x9eX\xa1=Ex\xa93\x8e3\\g\xe7c\x9f_\xb4\u05c9\v\xd1[\x94\xfc\x8b(\x00\x00\u07d4l=\x18pA&\xaa\x99\xee3B\xce`\xf5\xd4\xc8_\x18g\u0349\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4lGK\xc6jTx\x00f\xaaOQ.\xef\xa7s\xab\xf9\x19\u01c9\x05\x18\x83\x15\xf7v\xb8\x00\x00\u07d4lNBn\x8d\xc0\x05\u07e3Ql\xb8\xa6\x80\xb0.\ua56e\x8e\x89Hz\x9a0E9D\x00\x00\u07d4lR\xcf\b\x95\xbb5\xe6V\x16\x1eM\xc4j\xe0\xe9m\xd3\xe6,\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4lT\"\xfbK\x14\xe6\u064b`\x91\xfd\xecq\xf1\xf0\x86@A\x9d\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4l\\:T\u0367\xc2\xf1\x18\xed\xbaCN\xd8\x1en\xbb\x11\xddz\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4lc\xf8EV\u0490\xbf\u0359\xe44\ue657\xbf\xd7yWz\x89lk\x93[\x8b\xbd@\x00\x00\u07d4lc\xfc\x85\x02\x9a&T\u05db+\xeaM\xe3I\xe4REw\u0149#\xc7W\a+\x8d\xd0\x00\x00\u07d4led\xe5\xc9\xc2N\xaa\xa7D\xc9\xc7\xc9h\xc9\xe2\xc9\xf1\xfb\xae\x89I\x9bB\xa2\x119d\x00\x00\xe0\x94lg\xd6\xdb\x1d\x03Ql\x12\x8b\x8f\xf24\xbf=I\xb2m)A\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4lg\xe0\u05f6.*\bPiE\xa5\xdf\xe3\x82c3\x9f\x1f\"\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4lj\xa0\xd3\vdr\x19\x90\xb9PJ\x86?\xa0\xbf\xb5\xe5}\xa7\x89\x92^\x06\xee\xc9r\xb0\x00\x00\u07d4lqJX\xff\xf6\xe9}\x14\xb8\xa5\xe3\x05\xeb$@eh\x8b\xbd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4l\x80\rKI\xba\a%\x04`\xf9\x93\xb8\xcb\xe0\v&j%S\x89\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\u07d4l\x80\x8c\xab\xb8\xff_\xbbc\x12\xd9\xc8\xe8J\xf8\xcf\x12\xef\bu\x89\xd8\xd8X?\xa2\xd5/\x00\x00\xe0\x94l\x82 )!\x8a\xc8\xe9\x8a&\f\x1e\x06@)4\x889\x87[\x8a\x01\x0f\x97\xb7\x87\xe1\xe3\b\x00\x00\u07d4l\x84\u02e7|m\xb4\xf7\xf9\x0e\xf1=^\xe2\x1e\x8c\xfc\u007f\x83\x14\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94l\x86\x87\xe3Aw\x10\xbb\x8a\x93U\x90!\xa1F\x9ej\x86\xbcw\x8a\x02[-\xa2x\xd9k{\x80\x00\xe0\x94l\x88,'s,\xef\\|\x13\xa6\x86\xf0\xa2\xeawUZ\u0089\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4l\xa5\xde\x00\x81}\xe0\xce\xdc\xe5\xfd\x00\x01(\xde\xde\x12d\x8b<\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4l\xa6\xa12\xce\x1c\u0488\xbe\xe3\x0e\xc7\xcf\xef\xfb\x85\xc1\xf5\nT\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94l\xb1\x1e\xcb2\xd3\u0382\x96\x011\x066\xf5\xa1\f\xf7\u03db_\x8a\x04?\u851c8\x01\xf5\x00\x00\u07d4l\xc1\xc8x\xfal\u078a\x9a\v\x83\x11$~t\x1eFB\xfem\x895e\x9e\xf9?\x0f\xc4\x00\x00\xe0\x94l\xcb\x03\xac\xf7\xf5<\xe8z\xad\xcc!\xa9\x93-\xe9\x15\xf8\x98\x04\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4l\xd2\x12\xae\xe0N\x01?=*\xba\u04a0#`k\xfb\\j\u01c9lj\xccg\u05f1\xd4\x00\x00\u07d4l\xd2(\xdcq!i0\u007f\xe2|\xebtw\xb4\x8c\xfc\x82r\xe5\x89\x044\xea\x94\u06caP\x00\x00\u07d4l\xe1\xb0\xf6\xad\xc4pQ\xe8\xab8\xb3\x9e\xdbA\x86\xb0;\xab\u0309Ay\x97\x94\xcd$\xcc\x00\x00\u07d4l\xea\xe3s=\x8f\xa4=l\xd8\f\x1a\x96\xe8\xeb\x93\x10\x9c\x83\xb7\x89\x10'\x94\xad \xdah\x00\x00\u07d4m\x05i\xe5U\x8f\xc7\xdf'f\xf2\xba\x15\u070a\xef\xfc[\xebu\x89\xd8\xe6\x00\x1el0+\x00\x00\u07d4m\x12\x0f\f\xaa\xe4O\xd9K\xca\xfeU\xe2\xe2y\uf5ba\\z\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4m\x14V\xff\xf0\x10N\xe8D\xa31G7\x8438\xd2L\xd6l\x89\a\xb0l\xe8\u007f\xddh\x00\x00\u07d4m \xef\x97\x04g\nP\v\xb2i\xb5\x83.\x85\x98\x02\x04\x9f\x01\x89\a\f\x1c\xc7;\x00\xc8\x00\x00\xe0\x94m/\x97g4\xb9\xd0\a\r\x18\x83\xcfz\u02b8\xb3\xe4\x92\x0f\xc1\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4m9\xa9\u93c1\xf7i\xd7:\xad,\xea\xd2v\xac\x13\x87\xba\xbe\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4m;x6\xa2\xb9\u0619r\x1aM#{R#\x85\xdc\xe8\xdf\u034966\xc2^f\xec\xe7\x00\x00\u07d4m?+\xa8V\u033b\x027\xfava\x15k\x14\xb0\x13\xf2\x12@\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94m@\b\xb4\xa8\x88\xa8&\xf2H\xeej\v\r\xfd\xe9\xf92\x10\xb9\x8a\x01'\xfc\xb8\xaf\xae \xd0\x00\x00\u07d4m@\xca'\x82m\x97s\x1b>\x86\xef\xfc\u05f9*Aa\xfe\x89\x89lk\x93[\x8b\xbd@\x00\x00\u07d4mD\x97J1\u0447\xed\xa1m\xddG\xb9\xc7\xecP\x02\xd6\x1f\xbe\x892\xf5\x1e\u06ea\xa30\x00\x00\xe0\x94mK\\\x05\xd0j \x95~\x17H\xabm\xf2\x06\xf3C\xf9/\x01\x8a\x02\x1f6\x06\x99\xbf\x82_\x80\x00\xe0\x94mL\xbf=\x82\x84\x83:\xe9\x93D0>\b\xb4\xd6\x14\xbf\xda;\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4mY\xb2\x1c\xd0\xe2t\x88\x04\u066b\xe0d\xea\u00be\xf0\xc9_'\x89lk\x93[\x8b\xbd@\x00\x00\u07d4mc\u04ce\xe8\xb9\x0e\x0en\xd8\xf1\x92\xed\xa0Q\xb2\u05a5\x8b\xfd\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4mf4\xb5\xb8\xa4\x01\x95\xd9I\x02z\xf4\x82\x88\x02\t,\ued89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94m}\x1c\x94\x95\x11\xf8\x83\x03\x80\x8c`\xc5\xea\x06@\xfc\xc0&\x83\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4m\x84m\xc1&W\xe9\x1a\xf2P\bQ\x9c>\x85\u007fQp}\u0589\xf8\xd3\v\xc9#B\xf8\x00\x00\u07d4m\x91\x93\x99k\x19F\x17!\x11\x06\xd1c^\xb2l\u0136ll\x89\x15\xaa\x1e~\x9d\xd5\x1c\x00\x00\u07d4m\x99\x97P\x98\x82\x02~\xa9G#\x14$\xbe\xde\xde)e\u043a\x89l\x81\u01f3\x11\x95\xe0\x00\x00\u07d4m\xa0\xed\x8f\x1di3\x9f\x05\x9f*\x0e\x02G\x1c\xb4O\xb8\u00fb\x892\xbc8\xbbc\xa8\x16\x00\x00\u07d4m\xb7+\xfdC\xfe\xf4e\xcaV2\xb4Z\xabra@N\x13\xbf\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94m\xbe\x8a\xbf\xa1t(\x06&9\x817\x1b\xf3\xd3U\x90\x80kn\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4m\xc3\xf9+\xaa\x1d!\u06b78+\x892a\xa05o\xa7\xc1\x87\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4m\xc7\x05:q\x86\x16\xcf\u01cb\xeec\x82\xeeQ\xad\xd0\xc7\x030\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94m\xcc~d\xfc\xaf\xcb\xc2\xdcl\x0e^f,\xb3G\xbf\xfc\xd7\x02\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4m\xda_x\x8alh\x8d\u07d2\x1f\xa3\x85.\xb6\xd6\xc6\xc6)f\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4m\xdb`\x92w\x9dXB\xea\xd3x\xe2\x1e\x81 \xfdLk\xc12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4m\xdf\xefc\x91U\u06ab\n\\\xb4\x95:\xa8\u016f\xaa\x88\x04S\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4m\xe0/-\xd6~\xfd\xb794\x02\xfa\x9e\xaa\xcb\xcfX\x9d.V\x89@\x13\x8b\x91~\u07f8\x00\x00\u07d4m\u4d418\\\xf7\xfc\x9f\xe8\xc7}\x13\x1f\xe2\xeew$\xc7j\x89})\x97s=\xcc\xe4\x00\x00\u07d4m\xe4\xd1R\x19\x18/\xaf:\xa2\xc5\xd4\xd2Y_\xf20\x91\xa7'\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4m\xed\xf6.t?M,*K\x87\xa7\x87\xf5BJz\xeb9<\x89\t\xc2\x00vQ\xb2P\x00\x00\u07d4m\xf2Of\x85\xa6/y\x1b\xa37\xbf?\xf6~\x91\xf3\u053c:\x89ukI\xd4\nH\x18\x00\x00\u07d4m\xf5\xc8O{\x90\x9a\xab>a\xfe\x0e\xcb\x1b;\xf2`\"*\u0489\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4m\xff\x90\xe6\xdc5\x9d%\x90\x88+\x14\x83\xed\xbc\xf8\x87\xc0\xe4#\x8965\u026d\xc5\u07a0\x00\x00\u07d4n\x01\xe4\xadV\x9c\x95\xd0\a\xad\xa3\r^-\xb1(\x88I\"\x94\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\a;f\u0478\xc6gD\u0600\x96\xa8\u0759\xec~\x02(\u0689\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\x0e\xe7\x06\x12\xc9v(}I\x9d\u07e6\xc0\xdc\xc1,\x06\xde\xea\x89\a\v\u0579V!F\x00\x00\xe0\x94n\x12\xb5\x1e\"[JCr\xe5\x9a\u05e2\xa1\xa1>\xa3\u04e17\x8a\x03\x00F\xc8\xccw_\x04\x00\x00\u07d4n\x1a\x04l\xaf[JW\xf4\xfdK\xc1sb!&\xb4\xe2\xfd\x86\x89a\t=|,m8\x00\x00\u07d4n\x1e\xa4\xb1\x83\xe2R\u027bwg\xa0\x06\u05346\x96\u02ca\xe9\x89\x0f\xf3x<\x85\xee\u0400\x00\u07d4n%[p\n\xe7\x13\x8aK\xac\xf2(\x88\xa9\xe2\xc0\n(^\xec\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n'\n\xd5)\xf1\xf0\xb8\xd9\xcbm$'\xec\x1b~-\xc6Jt\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4n.\xab\x85\u0709\xfe)\xdc\n\xa1\x852G\u06b4:R=V\x89\x04V9\x18$O@\x00\x00\u07d4n:Q\xdbt=3M/\xe8\x82$\xb5\xfe|\x00\x8e\x80\xe6$\x89\x05\xbf\v\xa6cOh\x00\x00\u07d4nL*\xb7\xdb\x02i9\xdb\u04fch8J\xf6`\xa6\x18\x16\xb2\x89\t\r\x97/22<\x00\x00\u07d4nM.9\u0203f)\u5d07\xb1\x91\x8af\x9a\xeb\u07556\x8965\u026d\xc5\u07a0\x00\x00\u07d4n\\-\x9b\x1cTj\x86\xee\xfd]\nQ \xc9\xe4\xe70\x19\x0e\x89\n\xd2\x01\xa6yO\xf8\x00\x00\u07d4n`\xae\u19cf\x8e\u068bBLs\xe3S5J\xe6|0B\x89\xbd5\xa4\x8d\x99\x19\xe6\x00\x00\u07d4nd\xe6\x12\x9f\"N7\x8c\x0ensj~z\x06\xc2\x11\xe9\xec\x8965\u026d\xc5\u07a0\x00\x00\u07d4nm[\xbb\xb9\x05;\x89\xd7D\xa2s\x16\u00a7\xb8\xc0\x9bT}\x891Rq\n\x02>m\x80\x00\u07d4nr\xb2\xa1\x18j\x8e)\x16T;\x1c\xb3jh\x87\x0e\xa5\u0457\x89\n\x15D\xbe\x87\x9e\xa8\x00\x00\u07d4nv\x1e\xaa\x0f4_w{TA\xb7:\x0f\xa5\xb5k\x85\xf2-\x89lk\x93[\x8b\xbd@\x00\x00\u07d4ny\xed\u0504[\anL\u060d\x18\x8bnC-\xd9?5\xaa\x893\xc5I\x901r\f\x00\x00\u07d4n\x82\x12\xb7\"\xaf\xd4\b\xa7\xa7>\xd3\xe29^\xe6EJ\x030\x89\b\x9e\x91y\x94\xf7\x1c\x00\x00\u07d4n\x84\x87m\xbb\x95\xc4\vfV\xe4+\xa9\xae\xa0\x8a\x99;T\u0709;\xbc`\xe3\xb6\u02fe\x00\x00\u07d4n\x84\xc2\xfd\x18\xd8\tW\x14\xa9h\x17\x18\x9c\xa2\x1c\xcab\xba\xb1\x89\x12{lp&!\u0340\x00\u07d4n\x86m\x03-@Z\xbd\xd6\\\xf6QA\x1d\x807\x96\xc2#\x11\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94n\x89\x9eY\xa9\xb4\x1a\xb7\xeaA\xdfu\x17\x86\x0f*\xcbY\xf4\xfd\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4n\x89\xc5\x1e\xa6\xde\x13\xe0l\xdct\x8bg\xc4A\x0f\u9f2b\x03\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\x8a&h\x9fz/\xde\xfd\x00\x9c\xba\xaaS\x10%4P\u06ba\x89o!7\x17\xba\xd8\xd3\x00\x00\u07d4n\x96\xfa\xed\xa3\x05C\x02\xc4_X\xf1a2L\x99\xa3\xee\xbbb\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4n\xb0\xa5\xa9\xae\x96\xd2,\xf0\x1d\x8f\xd6H;\x9f8\xf0\x8c,\x8b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\xb3\x81\x96\x17@@X&\x8f\f<\xff5\x96\xbf\xe9\x14\x8c\x1c\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94n\xb5W\x8ak\xb7\xc3!S\x19[\r\x80 \xa6\x91HR\xc0Y\x8a\x8b\u00ab\xf4\x02!\xf4\x80\x00\x00\u07d4n\xbb^iW\xaa\x82\x1e\xf6Y\xb6\x01\x8a9:PL\xaeDP\x89lk\x93[\x8b\xbd@\x00\x00\u07d4n\xbc\xf9\x95\u007f_\xc5\u916d\xd4u\";\x04\xb8\xc1Jz\xed\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4n\xc3e\x95q\xb1\x1f\x88\x9d\xd49\xbc\xd4\xd6u\x10\xa2[\xe5~\x89\x06\xaa\xf7\xc8Qm\f\x00\x00\u07d4n\u021b9\xf9\xf5'jU>\x8d\xa3\x0en\xc1z\xa4~\xef\u01c9\x18BO_\v\x1bN\x00\x00\u07d4n\xc9m\x13\xbd\xb2M\u01e5W)?\x02\x9e\x02\xddt\xb9zU\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\xca\xef\xa6\xfc>\xe54bm\xb0,o\x85\xa0\u00d5W\x1ew\x89 \x86\xac5\x10R`\x00\x00\u07d4n\u04a1+\x02\xf8\u0188\u01f5\u04e6\xea\x14\xd66\x87\u06b3\xb6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4n\u0604E\x9f\x80\x9d\xfa\x10\x16\xe7p\xed\xaf>\x9f\xefF\xfa0\x89\xb8R\xd6x \x93\xf1\x00\x00\xe0\x94n\xdf\u007fR\x83r\\\x95>\xe6C\x17\xf6a\x88\xaf\x11\x84\xb03\x8a\x01\xb4d1\x1dE\xa6\x88\x00\x00\u07d4n\xe8\xaa\xd7\xe0\xa0e\u0605-|;\x9an_\xdcK\xf5\f\x00\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4n\xef\u0705\x0e\x87\xb7\x15\xc7'\x91w<\x03\x16\xc3U\x9bX\xa4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4n\xf9\xe8\u0276!}Vv\x9a\xf9}\xbb\x1c\x8e\x1b\x8b\xe7\x99\u0489\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4n\xfb\xa8\xfb*\u0176s\a)\xa9r\xec\"D&\xa2\x87\u00ed\x89\x0fY\x85\xfb\xcb\xe1h\x00\x00\xe0\x94n\xfd\x90\xb55\xe0\v\xbd\x88\x9f\xda~\x9c1\x84\xf8y\xa1Q\u06ca\x02#\x85\xa8'\xe8\x15P\x00\x00\u07d4o\x05\x16f\xcbO{\u04b1\x90r!\xb8)\xb5U\u05e3\xdbt\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4o\x0e\xdd#\xbc\xd8_`\x15\xf9(\x9c(\x84\x1f\xe0L\x83\xef\xeb\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4o\x13zq\xa6\xf1\x97\xdf,\xbb\xf0\x10\u073d\x89a\t=|,m8\x00\x00\u07d4p\x10\xbe-\xf5{\u042b\x9a\xe8\x19l\xd5\n\xb0\xc5!\xab\xa9\xf9\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4p#\xc7\tV\xe0J\x92\xd7\x00%\xaa\u0497\xb59\xaf5Xi\x89lk\x93[\x8b\xbd@\x00\x00\u07d4p%\x96]+\x88\xda\x19}DY\xbe=\xc98cD\xcc\x1f1\x89l\xb7\xe7Hg\xd5\xe6\x00\x00\u07d4p(\x02\xf3m\x00%\x0f\xabS\xad\xbc\u0596\xf0\x17oc\x8aI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4pH\x19\xd2\xe4Mn\xd1\xda%\xbf\u0384\u011f\u0322V\x13\xe5\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4pJn\xb4\x1b\xa3O\x13\xad\xdd\xe7\xd2\xdb}\xf0I\x15\u01e2!\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4pJ\xb1\x15\r^\x10\xf5\xe3I\x95\b\xf0\xbfpe\x0f\x02\x8dK\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4pJ\xe2\x1dv-n\x1d\xde(\xc25\xd11\x04Yr6\xdb\x1a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4pM$<)x\xe4l,\x86\xad\xbe\xcd$n;)_\xf63\x89m\x12\x1b\xeb\xf7\x95\xf0\x00\x00\u07d4pM]\xe4\x84m9\xb5<\xd2\x1d\x1cI\xf0\x96\xdb\\\x19\xba)\x89\b=lz\xabc`\x00\x00\u07d4p]\xdd85T\x82\xb8\xc7\u04f5\x15\xbd\xa1P\r\xd7\u05e8\x17\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94pan(\x92\xfa&\x97\x05\xb2\x04k\x8f\xe3\xe7/\xa5X\x16\u04ca\x04<3\xc1\x93ud\x80\x00\x00\u07d4pg\x0f\xbb\x05\xd30\x14DK\x8d\x1e\x8ew\x00%\x8b\x8c\xaam\x89lk\x93[\x8b\xbd@\x00\x00\u07d4p\x81\xfak\xaa\xd6\u03f7\xf5\x1b,\xca\x16\xfb\x89p\x99\x1ad\xba\x89\f\xae\xc0\x05\xf6\xc0\xf6\x80\x00\xe0\x94p\x85\xae~~M\x93!\x97\xb5\u01c5\x8c\x00\xa3gF&\xb7\xa5\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4p\x86\xb4\xbd\xe3\xe3]J\xeb$\xb8%\xf1\xa2\x15\xf9\x9d\x85\xf7E\x89lh\xcc\u041b\x02,\x00\x00\u07d4p\x8a*\xf4%\u03b0\x1e\x87\xff\xc1\xbeT\xc0\xf52\xb2\x0e\xac\u0589\aE\u0503\xb1\xf5\xa1\x80\x00\u07d4p\x8e\xa7\a\xba\xe45\u007f\x1e\xbe\xa9Y\u00e2P\xac\u05aa!\xb3\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u0794p\x8f\xa1\x1f\xe3=\x85\xad\x1b\xef\u02ee8\x18\xac\xb7\x1fj}~\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4p\x9101\x16\xd5\xf28\x9b##\x8bMej\x85\x96\u0644\u04c9;N~\x80\xaaX3\x00\x00\u07d4p\x99\xd1/n\xc6V\x89\x9b\x04\x9avW\x06]b\x99h\x92\u0209\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4p\x9f\xe9\xd2\xc1\xf1\xceB |\x95\x85\x04J`\x89\x9f5\x94/\x89lk\x93[\x8b\xbd@\x00\x00\u07d4p\xa05I\xaaah\xe9~\x88\xa5\b3\nZ\v\xeatq\x1a\x89Hz\x9a0E9D\x00\x00\u07d4p\xa4\x06}D\x8c\xc2]\xc8\xe7\x0ee\x1c\xea|\xf8N\x92\x10\x9e\x89\t\x8a}\x9b\x83\x14\xc0\x00\x00\u07d4p\xab4\xbc\x17\xb6o\x9c;c\xf1Q'O*r|S\x92c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4p\xc2\x13H\x8a\x02\f<\xfb9\x01N\xf5\xbad\x04rK\u02a3\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4p\xd2^\xd2\u022d\xa5\x9c\b\x8c\xf7\r\xd2+\xf2\u06d3\xac\xc1\x8a\x899GEE\u4b7c\x00\x00\u07d4p\xe5\xe9\xdas_\xf0w$\x9d\u02da\xaf=\xb2\xa4\x8d\x94\x98\xc0\x8965\u026d\xc5\u07a0\x00\x00\u07d4p\xfe\xe0\x8b\x00\xc6\xc2\xc0Jp\xc0\xce=\x92\u03ca\x01Z\xf1\u05cbX\xc4\x00\x00\x00\u0794q\v\xe8\xfd^)\x18F\x8b\u2abe\xa8\r\x82\x845\u05d6\x12\x88\xf4?\xc2\xc0N\xe0\x00\x00\u07d4q\x13]\x8f\x05\x96<\x90ZJ\a\x92)\t#Z\x89jR\ua262\xa1]\tQ\x9b\xe0\x00\x00\u07d4q\x1e\xcfw\xd7\x1b=\x0e\xa9\\\xe4u\x8a\xfe\u0379\xc11\a\x9d\x89)3\x1eeX\xf0\xe0\x00\x00\u07d4q!?\xca14\x04 N\u02e8q\x97t\x1a\xa9\xdf\xe9c8\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94q+vQ\x02\x14\xdcb\x0fl:\x1d\u049a\xa2+\xf6\xd2\x14\xfb\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4q/\xf77\n\x13\xed6\ts\xfe\u071f\xf5\xd2\xc9:P^\x9e\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4q3\x84:x\xd99\u019dD\x86\xe1\x0e\xbc{`*4\x9f\xf7\x89\x11\xd5\xca\xcc\xe2\x1f\x84\x00\x00\u07d4qH\xae\xf32a\xd8\x03\x1f\xac?q\x82\xff5\x92\x8d\xafT\u0649\xdeB\xee\x15D\u0750\x00\x00\u07d4qcu\x8c\xbblLR^\x04\x14\xa4\n\x04\x9d\xcc\xcc\xe9\x19\xbb\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4qh\xb3\xbb\x8c\x16s!\u067d\xb0#\xa6\xe9\xfd\x11\xaf\u026f\u0649a\t=|,m8\x00\x00\u07d4qirN\xe7\"q\xc54\xca\xd6B\x0f\xb0N\xe6D\u02c6\xfe\x89\x16<+@\u06e5R\x00\x00\u07d4qj\xd3\xc3:\x9b\x9a\n\x18\x96sW\x96\x9b\x94\xee}*\xbc\x10\x89\x1a!\x17\xfeA*H\x00\x00\xe0\x94qk\xa0\x1e\xad*\x91'\x065\xf9_%\xbf\xaf-\xd6\x10\xca#\x8a\ty\xe7\x01 V\xaax\x00\x00\u07d4qmP\u0320\x1e\x93\x85\x00\xe6B\x1c\xc0p\xc3P|g\u04c7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4qv,cg\x8c\x18\xd1\xc67\x8c\xe0h\xe6f8\x13\x15\x14~\x89lk\x93[\x8b\xbd@\x00\x00\u07d4qxL\x10Q\x17\xc1\xf6\x895y\u007f\xe1Y\xab\xc7NC\xd1j\x89l\x81\u01f3\x11\x95\xe0\x00\x00\xe0\x94qyro\\q\xae\x1bm\x16\xa6\x84(\x17Nk4\xb26F\x8a\x01\x8e\xa2P\t|\xba\xf6\x00\x00\xe0\x94q|\xf9\xbe\xab680\x8d\xed~\x19^\f\x86\x13-\x16?\xed\x8a\x032n\xe6\xf8e\xf4\"\x00\x00\u07d4q\x80\xb8>\xe5WC\x17\xf2\x1c\x80r\xb1\x91\u0615\xd4aS\u00c9\x18\xef\xc8J\xd0\u01f0\x00\x00\u07d4q\x94kq\x17\xfc\x91^\xd1\a8_B\u065d\xda\xc62I\u0089lk\x93[\x8b\xbd@\x00\x00\xe0\x94q\x9e\x89\x1f\xbc\xc0\xa3>\x19\xc1-\xc0\xf0 9\xca\x05\xb8\x01\u07ca\x01OU8F:\x1bT\x00\x00\u07d4q\xc7#\n\x1d5\xbd\u0581\x9e\u0539\xa8\x8e\x94\xa0\xeb\a\x86\u0749\uc80b5=$\x14\x00\x00\u07d4q\xd2\xccm\x02W\x8ce\xf7\r\xf1\x1bH\xbe\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4r\x83\xcdFu\xdaX\u0116UaQ\xda\xfd\x80\xc7\xf9\x95\xd3\x18\x89)3\x1eeX\xf0\xe0\x00\x00\u07d4r\x86\xe8\x9c\xd9\u078fz\x8a\x00\xc8o\xfd\xb59\x92\u0752Q\u0449i*\xe8\x89p\x81\xd0\x00\x00\u07d4r\x8f\x9a\xb0\x80\x15}\xb3\a1V\xdb\xca\x1a\x16\x9e\xf3\x17\x94\a\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4r\x94\xc9\x18\xb1\xae\xfbM%\x92~\xf9\u05d9\xe7\x1f\x93\xa2\x8e\x85\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94r\x94\uc763\x10\xbckK\xbd\xf5C\xb0\xefE\xab\xfc>\x1bM\x8a\x04\xa8\x9fT\xef\x01!\xc0\x00\x00\u07d4r\x9a\xadF'tNS\xf5\xd6c\t\xaatD\x8b:\xcd\xf4o\x89lk\x93[\x8b\xbd@\x00\x00\u07d4r\xa2\xfc\x86u\xfe\xb9r\xfaA\xb5\r\xff\u06fa\xe7\xfa*\u07f7\x89\x9a\xb4\xfcg\xb5(\xc8\x00\x00\u07d4r\xa8&\b&)G&\xa7[\xf3\x9c\u066a\x9e\a\xa3\xea\x14\u0349lk\x93[\x8b\xbd@\x00\x00\u07d4r\xb0Yb\xfb*\u0549\xd6Z\xd1j\"U\x9e\xba\x14X\xf3\x87\x89\a?u\u0460\x85\xba\x00\x00\u07d4r\xb5c?\xe4w\xfeT.t/\xac\xfdi\f\x13xT\xf2\x16\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4r\xb7\xa0=\xda\x14\u029cf\x1a\x1dF\x9f\xd376\xf6s\xc8\xe8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4r\xb9\x04D\x0e\x90\xe7 \u05ac\x1c*\u05dc2\x1d\xcc\x1c\x1a\x86\x89T\x06\x923\xbf\u007fx\x00\x00\xe0\x94r\xb9\nM\xc0\x97#\x94\x92\u0179w}\xcd\x1eR\xba+\xe2\u008a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4r\xbb'\u02d9\xf3\xe2\xc2\u03d0\xa9\x8fp}0\xe4\xa2\x01\xa0q\x89X\xe7\x92n\xe8X\xa0\x00\x00\xe0\x94r\xc0\x83\xbe\xad\xbd\xc2'\xc5\xfbC\x88\x15\x97\xe3.\x83\xc2`V\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4r\xcd\x04\x8a\x11\x05tH)\x83I-\xfb\x1b\xd2yB\xa6\x96\xba\x89lk\x93[\x8b\xbd@\x00\x00\u07d4r\xd0=M\xfa\xb3P\f\xf8\x9b\x86\x86o\x15\xd4R\x8e\x14\xa1\x95\x89\xf3K\x82\xfd\x8e\x91 \x00\x00\u07d4r\u06bb[n\ud799\xbe\x91X\x88\xf6V\x80V8\x16\b\xf8\x89\vL\x96\xc5,\xb4\xfe\x80\x00\u07d4r\xfbI\u009d#\xa1\x89P\u0132\xdc\r\xdfA\x0fS-oS\x89lk\x93[\x8b\xbd@\x00\x00\u07d4r\xfe\xaf\x12EyR9Td[\u007f\xaf\xff\x03x\xd1\xc8$.\x8965\u026d\xc5\u07a0\x00\x00\u07d4s\x01\xdcL\xf2mq\x86\xf2\xa1\x1b\xf8\xb0\x8b\xf2)F?d\xa3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4s\x04G\xf9|\xe9\xb2_\"\xba\x1a\xfb6\xdf'\xf9Xk\ub6c9,s\xc97t,P\x00\x00\u07d4s\x06\xde\x0e(\x8bV\xcf\u07d8~\xf0\xd3\xcc)f\a\x93\xf6\u0749\x1b\x8a\xbf\xb6.\xc8\xf6\x00\x00\xe0\x94s\r\x87c\u01a4\xfd\x82J\xb8\xb8Y\x16\x1e\xf7\xe3\xa9j\x12\x00\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4s\x12\x81sH\x95(\x01.v\xb4\x1a^(\u018b\xa4\xe3\xa9\u050965\u026d\xc5\u07a0\x00\x00\u07d4s\x13F\x12\bETUFTE\xa4Y\xb0l7s\xb0\xeb0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4s/\xea\xd6\x0f{\xfd\u05a9\xde\u0101%\xe3s]\xb1\xb6eO\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4sB#\xd2\u007f\xf2>Y\x06\xca\xed\"YW\x01\xbb4\x83\f\xa1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4sG>r\x11Q\x10\xd0\xc3\xf1\x17\b\xf8nw\xbe+\xb0\x98<\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4sRXm\x02\x1a\xd0\xcfw\xe0\xe9(@JY\xf3t\xffE\x82\x89\xb8Pz\x82\a( \x00\x00\u07d4sU\v\xebs+\xa9\u076f\xdaz\xe4\x06\xe1\x8f\u007f\xeb\x0f\x8b\xb2\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4s[\x97\xf2\xfc\x1b\xd2K\x12\an\xfa\xf3\xd1(\x80s\xd2\f\x8c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4s^2\x86f\xedV7\x14+3\x06\xb7|\xccT`\xe7,=\x89j\xb8\xf3xy\u0251\x00\x00\u07d4sc\u0350\xfb\xab[\xb8\u011a\xc2\x0f\xc6,9\x8f\xe6\xfbtL\x89lk\x93[\x8b\xbd@\x00\x00\u07d4skDP=\xd2\xf6\xddTi\xffL[-\xb8\xeaO\xece\u0409\x11\x04\xeeu\x9f!\xe3\x00\x00\xe0\x94sk\xf1@,\x83\x80\x0f\x89>X1\x92X*\x13N\xb52\xe9\x8a\x02\x1e\x19\u0493\xc0\x1f&\x00\x00\xe0\x94s\x8c\xa9M\xb7\u038b\xe1\xc3\x05l\u0598\x8e\xb3v5\x9f3S\x8a\x05f[\x96\xcf5\xac\xf0\x00\x00\u07d4s\x91K\"\xfc/\x13\x15\x84$}\x82\xbeO\ucfd7\x8a\u053a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4s\x93'\t\xa9\u007f\x02\u024eQ\xb0\x911(e\x12#\x85\xae\x8e\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4s\x93\xcb\xe7\xf9\xba!e\xe5\xa7U5\x00\xb6\xe7]\xa3\xc3:\xbf\x89\x05k\xc7^-c\x10\x00\x00\u07d4s\xb4\u0519\xde?8\xbf5\xaa\xf7i\xa6\xe3\x18\xbcm\x126\x92\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94s\xbe\xddo\xda{\xa3'!\x85\b{cQ\xfc\x13=HN7\x8a\x01\x12&\xbf\x9d\xceYx\x00\x00\u07d4s\xbf\xe7q\x0f1\u02b9I\xb7\xa2`O\xbfR9\xce\xe7\x90\x15\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94s\u03c0\xae\x96\x88\xe1X\x0eh\xe7\x82\xcd\b\x11\xf7\xaaIM,\x8a\x01\xa4\xab\xa2%\xc2\a@\x00\x00\xe0\x94s\xd7&\x9f\xf0l\x9f\xfd3uL\xe5\x88\xf7J\x96j\xbb\xbb\xba\x8a\x01e\xc9fG\xb3\x8a \x00\x00\u07d4s\xd8\xfe\xe3\u02c6M\xce\"\xbb&\u029c/\bm^\x95\xe6;\x8965\u026d\xc5\u07a0\x00\x00\u07d4s\xdf<>yU\xf4\xf2\xd8Y\x83\x1b\xe3\x80\x00\xb1\ak8\x84\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4s\u48b6\f\U0010e2ef+w~\x17Z[\x1eM\f-\x8f\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94t\n\xf1\xee\xfd3e\u05cb\xa7\xb1,\xb1\xa6s\xe0j\arF\x8a\x04+\xf0kx\xed;P\x00\x00\xe0\x94t\v\xfdR\xe0\x16g\xa3A\x9b\x02\x9a\x1b\x8eEWj\x86\xa2\u06ca\x03\x8e\xba\xd5\xcd\xc9\x02\x80\x00\x00\u07d4t\x0fd\x16\x14w\x9d\u03e8\x8e\xd1\xd4%\xd6\r\xb4*\x06\f\xa6\x896\"\xc6v\b\x10W\x00\x00\u07d4t\x12\u027c0\xb4\xdfC\x9f\x021\x00\xe69$\x06j\xfdS\xaf\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4t\x16\x93\xc3\x03vP\x85\x13\b \xcc+c\xe9\xfa\x92\x13\x1b\x89A\rXj \xa4\xc0\x00\x00\u07d4t!\xce[\xe3\x81s\x8d\u0703\xf0&!\x97O\xf0hly\xb8\x89Xx\x8c\xb9K\x1d\x80\x00\x00\u07d4t1j\xdf%7\x8c\x10\xf5v\u0574\x1aoG\xfa\x98\xfc\xe3=\x89\x128\x13\x1e\\z\xd5\x00\x00\u07d4t6Q\xb5^\xf8B\x9d\xf5\f\xf8\x198\xc2P\x8d\xe5\u0207\x0f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4t=\xe5\x00&\xcag\xc9M\xf5O\x06b`\xe1\xd1J\xcc\x11\xac\x89lk\x93[\x8b\xbd@\x00\x00\u07d4tE /\ft)z\x00N\xb3rj\xa6\xa8-\xd7\xc0/\xa1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4tK\x03\xbb\xa8X*\xe5I\x8e-\xc2-\x19\x94\x94g\xabS\xfc\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4tL\fw\xba\u007f#i \xd1\xe44\xde]\xa3>H\xeb\xf0,\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4tP\xff\u007f\x99\xea\xa9\x11bu\u07ach\xe4(\xdf[\xbc\u0639\x89lk\x93[\x8b\xbd@\x00\x00\u07d4tV\u0172\xc5Cn>W\x10\b\x93?\x18\x05\xcc\xfe4\xe9\xec\x8965\u026d\xc5\u07a0\x00\x00\u07d4tZ\u04eb\xc6\xee\xeb$qh\x9bS\x9ex\x9c\xe2\xb8&\x83\x06\x89=A\x94\xbe\xa0\x11\x92\x80\x00\xe0\x94tZ\xec\xba\xf9\xbb9\xb7Jg\xea\x1c\xe6#\xde6\x84\x81\xba\xa6\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4t\\\xcf-\x81\x9e\u06fd\u07a8\x11{\\I\xed<*\x06n\x93\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4tb\u021c\xaa\x9d\x8dx\x91\xb2T]\xef!otd\u057b!\x89\x05\xea\xedT\xa2\x8b1\x00\x00\u07d4td\x8c\xaa\xc7H\xdd\x13\\\xd9\x1e\xa1L(\xe1\xbdM\u007f\xf6\xae\x89\xa8\r$g~\xfe\xf0\x00\x00\xe0\x94tq\xf7.\xeb0\x06$\xeb(.\xabM\x03r\x00\x00\x00\xe0\x94t\x84\xd2k\xec\xc1\xee\xa8\xc61^\xc3\xee\nE\x01\x17\u0706\xa0\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4t\x86:\xce\xc7]\x03\xd5>\x86\x0ed\x00/,\x16^S\x83w\x8965\u026d\xc5\u07a0\x00\x00\u07d4t\x89\u030a\xbeu\u0364\xef\r\x01\xce\xf2`^G\xed\xa6z\xb1\x89\a?u\u0460\x85\xba\x00\x00\u07d4t\x8c(^\xf1#?\xe4\xd3\x1c\x8f\xb17\x833r\x1c\x12\xe2z\x89lk\x93[\x8b\xbd@\x00\x00\u07d4t\x90\x87\xac\x0fZ\x97\xc6\xfa\xd0!S\x8b\xf1\xd6\u0361\x8e\r\xaa\x8965\u026d\xc5\u07a0\x00\x00\u07d4t\x95\xaex\xc0\xd9\x02a\xe2\x14\x0e\xf2\x061\x04s\x1a`\xd1\xed\x89\x01\xdbPq\x89%!\x00\x00\u07d4t\x9aJv\x8b_#rH\x93\x8a\x12\xc6#\x84{\xd4\xe6\x88\u0709\x03\xe73b\x87\x14 \x00\x00\u07d4t\x9a\xd6\xf2\xb5pk\xbe/h\x9aD\u0136@\xb5\x8e\x96\xb9\x92\x89\x05k\xc7^-c\x10\x00\x00\u07d4t\xa1\u007f\x06K4N\x84\xdbce\u0695\x91\xff\x16(%vC\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4t\xae\xec\x91]\xe0\x1c\u019b,\xb5\xa65o\xee\xa1FX\xc6\u0149\f\x9a\x95\xee)\x86R\x00\x00\u07d4t\xaf\xe5I\x02\xd6\x15x%v\xf8\xba\xac\x13\xac\x97\f\x05\x0fn\x89\t\xa1\xaa\xa3\xa9\xfb\xa7\x00\x00\u07d4t\xb7\xe0\"\x8b\xae\xd6YW\xae\xbbM\x91m3:\xae\x16O\x0e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4t\xbcJ^ E\xf4\xff\x8d\xb1\x84\xcf:\x9b\f\x06Z\xd8\a\u0489lk\x93[\x8b\xbd@\x00\x00\u07d4t\xbc\xe9\xec86-l\x94\u032c&\xd5\xc0\xe1:\x8b;\x1d@\x8965&A\x04B\xf5\x00\x00\u07d4t\xbfzZ\xb5\x92\x93\x14\x9b\\`\xcf6Bc\xe5\xeb\xf1\xaa\r\x89\x06G\f>w\x1e<\x00\x00\xe0\x94t\xc7<\x90R\x8a\x15s6\xf1\xe7\xea b\n\xe5?\xd2G(\x8a\x01\xe6:.S\x8f\x16\xe3\x00\x00\u07d4t\u0464\xd0\xc7RN\x01\x8dN\x06\xed;d\x80\x92\xb5\xb6\xaf,\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94t\xd3f\xb0{/VG}|pw\xaco\xe4\x97\xe0\xebeY\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4t\xd3zQt{\xf8\xb7q\xbf\xbfC\x9493\xd1\x00\xd2\x14\x83\x8965\u026d\xc5\u07a0\x00\x00\u07d4t\xd6q\u065c\xbe\xa1\xabW\x90cu\xb6?\xf4+PE\x1d\x17\x8965\u026d\xc5\u07a0\x00\x00\u07d4t\xeb\xf4BVF\xe6\u03c1\xb1\t\xce{\xf4\xa2\xa6=\x84\x81_\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4t\xed3\xac\xf4?5\xb9\x8c\x920\xb9\xe6d.\xcbS0\x83\x9e\x89$\xf6\xdf\xfbI\x8d(\x00\x00\u07d4t\xef(i\xcb\xe6\b\x85`E\xd8\xc2\x04\x11\x18W\x9f\"6\xea\x89\x03<\xd6E\x91\x95n\x00\x00\u07d4t\xfcZ\x99\xc0\xc5F\x05\x03\xa1;\x05\tE\x9d\xa1\x9c\xe7\u0350\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4u\v\xbb\x8c\x06\xbb\xbf$\bC\xccux.\xe0/\b\xa9tS\x89-C\xf3\xeb\xfa\xfb,\x00\x00\u07d4u\x14\xad\xbd\xc6?H?0M\x8e\x94\xb6\u007f\xf30\x9f\x18\v\x82\x89!\u0120n-\x13Y\x80\x00\u0794u\x17\xf1l(\xd12\xbb@\xe3\xba6\u01ae\xf11\xc4b\xda\x17\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4u\x1a,\xa3Nq\x87\xc1c\u048e6\x18\xdb(\xb1<\x19m&\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94u\x1a\xbc\xb6\xcc\x030Y\x91\x18\x15\xc9o\u04516\n\xb0D-\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4u&\xe4\x82R\x9f\n\x14\xee\u0248q\xdd\xdd\x0er\x1b\f\u0662\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4u)\xf3y{\xb6\xa2\x0f~\xa6I$\x19\xc8L\x86vA\xd8\x1c\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94u*^\xe22a,\xd3\x00_\xb2n[Y}\xe1\x9fwk\xe6\x8a\x01'\xfc\xb8\xaf\xae \xd0\x00\x00\u07d4u,\x9f\xeb\xf4/f\xc4x{\xfa~\xb1|\xf53;\xbaPp\x89j\x99\xf2\xb5O\xddX\x00\x00\u07d4u930F\u07b1\xef\x8e\u07b9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94u\xc1\xad#\xd2?$\xb3\x84\xd0\xc3\x14\x91w\xe8f\x97a\r!\x8a\x01\\[\xcdl(\x8b\xbd\x00\x00\u07d4u\xc2\xff\xa1\xbe\xf5I\x19\xd2\t\u007fz\x14-.\x14\xf9\xb0JX\x89\x90\xf3XP@2\xa1\x00\x00\u07d4u\xd6|\xe1N\x8d)\xe8\xc2\xff\u3051{\x93\v\x1a\xff\x1a\x87\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4u\xde~\x93R\xe9\v\x13\xa5\x9aXx\xff\xec\u01c3\x1c\xacM\x82\x89\x94\x89#z\u06daP\x00\x00\u07d4u\xf7S\x9d0\x9e\x909\x98\x9e\xfe.\x8b-\xbd\x86Z\r\xf0\x88\x89\x85[[\xa6\\\x84\xf0\x00\x00\u07d4v\b\xf47\xb3\x1f\x18\xbc\vd\u04c1\xae\x86\xfd\x97\x8e\u05f3\x1f\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94v\x0f\xf35N\x0f\u0793\x8d\x0f\xb5\xb8,\xef[\xa1\\=)\x16\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4v\x1an6,\x97\xfb\xbd|Yw\xac\xba-\xa7F\x876_I\x89\t\xf7J\xe1\xf9S\xd0\x00\x00\u07d4v\x1el\xae\xc1\x89\xc20\xa1b\xec\x00e0\x19>g\u03dd\x19\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94v\x1f\x8a:*\U00028f7e\x1d\xa0\t2\x1f\xb2\x97d\xebb\xa1\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4v)\x98\xe1\xd7R'\xfc\xedzp\xbe\x10\x9aL\vN\xd8d\x14\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4v-o0\u06b9\x915\xe4\xec\xa5\x1dRC\xd6\xc8b\x11\x02\u0549\x0fI\x89A\xe6d(\x00\x00\u07d4v3\x1e0yl\xe6d\xb2p\x0e\rASp\x0e\u0706\x97w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4v8\x86\xe33\xc5o\xef\xf8[\xe3\x95\x1a\xb0\xb8\x89\xce&.\x95\x89lk\x93[\x8b\xbd@\x00\x00\u07d4v:|\xba\xb7\rzd\u0427\xe5)\x80\xf6\x81G%\x93I\f\x89 \x86\xac5\x10R`\x00\x00\u07d4v>\xec\u0c0a\u021e2\xbf\xa4\xbe\xcev\x95\x14\xd8\xcb[\x85\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4v@\xa3\u007f\x80R\x98\x15\x15\xbc\xe0x\u0693\xaf\xa4x\x9bW4\x89lk\x93[\x8b\xbd@\x00\x00\u0794vA\xf7\xd2j\x86\xcd\xdb+\xe10\x81\x81\x0e\x01\xc9\xc8E\x89dI\xe8NG\xa8\xa8\x00\x00\xe0\x94vO\xc4mB\x8bm\xbc\"\x8a\x0f_U\xc9P\x8cw.\xab\x9f\x8a\x05\x81v{\xa6\x18\x9c@\x00\x00\u07d4vPn\xb4\xa7\x80\xc9Q\xc7J\x06\xb0=;\x83b\xf0\x99\x9dq\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94v[\xe2\xe1/b\x9ecI\xb9}!\xb6*\x17\xb7\xc80\xed\xab\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94vb\x81P\xe2\x99[['\x9f\xc8>\r\xd5\xf1\x02\xa6q\xdd\x1c\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4vk7Y\xe8yN\x92m\xacG=\x91:\x8f\xb6\x1a\xd0\xc2\u0249\x04\xb0m\xbb\xb4\x0fJ\x00\x00\u07d4vp\xb0/,<\xf8\xfdOG0\xf38\x1aq\xeaC\x1c3\u01c9\x0e~\xeb\xa3A\vt\x00\x00\u07d4vz\x03eZ\xf3`\x84\x1e\x81\r\x83\xf5\xe6\x1f\xb4\x0fL\xd1\x13\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4vz\u0190y\x1c.#E\x10\x89\xfelp\x83\xfeU\u07b6+\x89,s\xc97t,P\x00\x00\u07d4v\u007f\xd7y}Qi\xa0_sd2\x1c\x19\x84:\x8c4\x8e\x1e\x89\x01\x04\xe7\x04d\xb1X\x00\x00\u0794v\x84o\r\xe0;Zv\x97\x1e\xad)\x8c\xdd\b\x84:K\xc6\u0188\xd7\x1b\x0f\u088e\x00\x00\xe0\x94v\x84\x98\x93N7\xe9\x05\xf1\xd0\xe7{D\xb5t\xbc\xf3\xecJ\xe8\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4v\x8c\xe0\u06a0)\xb7\xde\xd0\"\xe5\xfcWM\x11\xcd\xe3\xec\xb5\x17\x89\x11t\xa5\xcd\xf8\x8b\xc8\x00\x00\xe0\x94v\x93\xbd\xebo\xc8+[\xcar\x13U\"1u\xd4z\bKM\x8a\x04\xa8\x9fT\xef\x01!\xc0\x00\x00\u07d4v\xaa\xf8\xc1\xac\x01/\x87R\xd4\xc0\x9b\xb4f\a\xb6e\x1d\\\xa8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4v\xab\x87\xddZ\x05\xad\x83\x9aN/\xc8\xc8Z\xa6\xba\x05d\x170\x89lk\x93[\x8b\xbd@\x00\x00\u07d4v\xaf\xc2%\xf4\xfa0}\xe4\x84U+\xbe\x1d\x9d?\x15\aLJ\x89\xa2\x90\xb5\u01ed9h\x00\x00\xe0\x94v\xbe\xca\xe4\xa3\x1d6\xf3\xcbW\u007f*CYO\xb1\xab\xc1\xbb\x96\x8a\x05C\xa9\xce\x0e\x132\xf0\x00\x00\u07d4v\xc2u5\xbc\xb5\x9c\xe1\xfa-\x8c\x91\x9c\xab\xebJk\xba\x01\u0449lk\x93[\x8b\xbd@\x00\x00\u07d4v\xca\"\xbc\xb8y\x9eS'\u012a*}\tI\xa1\xfc\xce_)\x89R\xa0?\"\x8cZ\xe2\x00\x00\u07d4v\xca\u0108\x11\x1aO\u0555\xf5h\xae:\x85\x87p\xfc\x91]_\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94v\u02dc\x8bi\xf48vu\u0102S\xe24\xcb~\rt\xa4&\x8a\x01\x90\xf4H.\xb9\x1d\xae\x00\x00\u07d4v\xf8:\xc3\xda0\xf7\t&(\xc73\x9f \x8b\xfc\x14,\xb1\ue25a\x18\xff\xe7B}d\x00\x00\xe0\x94v\xf9\xad=\x9b\xbd\x04\xae\x05\\\x14w\xc0\xc3^u\x92\xcb* \x8a\b\x83?\x11\xe3E\x8f \x00\x00\u07d4v\xff\xc1W\xadk\xf8\xd5m\x9a\x1a\u007f\u077c\x0f\xea\x01\n\xab\xf4\x8965\u026d\xc5\u07a0\x00\x00\u07d4w\x02\x8e@\x9c\xc4:;\xd3=!\xa9\xfcS\xec`n\x94\x91\x0e\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4w\f/\xb2\u0128\x17S\xac\x01\x82\xeaF\x0e\xc0\x9c\x90\xa5\x16\xf8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4w\r\x98\xd3\x1bCS\xfc\xee\xe8V\fL\u03c0>\x88\xc0\xc4\xe0\x89 \x86\xac5\x10R`\x00\x00\xe0\x94w\x13\xab\x807A\x1c\t\xbah\u007fo\x93d\xf0\xd3#\x9f\xac(\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4w\x15\a\xae\xeej%]\xc2\u035d\xf5QT\x06-\b\x97\xb2\x97\x89\x12\x1e\xa6\x8c\x11NQ\x00\x00\u07d4w\x19\x88\x87\x95\xadtY$\xc7W`\u0771\x82}\xff\xd8\u0368\x89lkLM\xa6\u077e\x00\x00\u07d4w'\xaf\x10\x1f\n\xab\xa4\xd2:\x1c\xaf\xe1|n\xb5\u06b1\xc6\u0709lk\x93[\x8b\xbd@\x00\x00\u07d4w,)\u007f\n\u0454H.\xe8\xc3\xf06\xbd\xeb\x01\xc2\x01\xd5\u0309\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94w0o\xfe.J\x8f<\xa8&\xc1\xa2I\xf7!-\xa4:\xef\xfd\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4w1A\x12}\x8c\xf3\x18\xae\xbf\x886Z\xdd=U'\xd8[j\x8966\u05ef^\u024e\x00\x00\u07d4wF\xb6\xc6i\x9c\x8f4\xca'h\xa8 \xf1\xff\xa4\xc2\a\xfe\x05\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4wQ\xf3c\xa0\xa7\xfd\x053\x19\b\t\u076f\x93@\xd8\xd1\x12\x91\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4wW\xa4\xb9\xcc=\x02G\u032a\xeb\x99\t\xa0\xe5n\x1d\xd6\xdc\u0089\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4w\\\x10\xc9>\r\xb7 [&CE\x823\xc6O\xc3?\xd7[\x89lk\x93[\x8b\xbd@\x00\x00\u07d4wa~\xbcK\xeb\xc5\xf5\xdd\xeb\x1bzp\xcd\xebj\xe2\xff\xa0$\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4wiC\xff\xb2\xef\\\xdd5\xb8<(\xbc\x04k\xd4\xf4gp\x98\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94wp\x1e,I=\xa4|\x1bX\xf4!\xb5I]\xeeE\xbe\xa3\x9b\x8a\x01H\xf6I\xcfaB\xa5\x80\x00\u07d4wy\x8f \x12W\xb9\xc3R\x04\x95pW\xb5Ft\xae\xfaQ\u07c9\b\x13\xcaV\x90m4\x00\x00\u07d4w\x8cC\xd1\x1a\xfe;Xo\xf3t\x19-\x96\xa7\xf2=+\x9b\u007f\x89\x8b\xb4\xfc\xfa;}k\x80\x00\u07d4w\x8cy\xf4\xde\x19S\xeb\u0398\xfe\x80\x06\xd5:\x81\xfbQ@\x12\x8963\x03\"\xd5#\x8c\x00\x00\u07d4w\x92t\xbf\x18\x03\xa36\xe4\u04f0\r\u0753\xf2\xd4\xf5\xf4\xa6.\x8965\u026d\xc5\u07a0\x00\x00\u07d4w\xa1q\"\xfa1\xb9\x8f\x17\x11\xd3*\x99\xf0>\xc3&\xf3=\b\x89\\(=A\x03\x94\x10\x00\x00\u07d4w\xa3I\a\xf3\x05\xa5L\x85\xdb\t\xc3c\xfd\xe3\xc4~j\xe2\x1f\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4w\xa7i\xfa\xfd\xec\xf4\xa68v-[\xa3\x96\x9d\xf61 \xa4\x1d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4w\xbekd\xd7\xc73\xa46\xad\xec^\x14\xbf\x9a\xd7@+\x1bF\x8965\u026d\xc5\u07a0\x00\x00\u07d4w\xbf\xe9<\u0367P\x84~A\xa1\xaf\xfe\xe6\xb2\u0696\xe7!N\x89\x10CV\x1a\x88)0\x00\x00\u07d4w\u0126\x97\xe6\x03\xd4+\x12\x05l\xbb\xa7a\xe7\xf5\x1d\x04C\xf5\x89$\xdc\xe5M4\xa1\xa0\x00\x00\u07d4w\xcc\x02\xf6#\xa9\u03d8S\t\x97\xeag\xd9\\;I\x18Y\xae\x89Is\x03\xc3n\xa0\xc2\x00\x00\u07d4w\xd4?\xa7\xb4\x81\xdb\xf3\xdbS\f\xfb\xf5\xfd\xce\xd0\xe6W\x181\x89lk\x93[\x8b\xbd@\x00\x00\u07d4w\xda^lr\xfb6\xbc\xe1\xd9y\x8f{\xcd\xf1\u044fE\x9c.\x89\x016\x95\xbbl\xf9>\x00\x00\u07d4w\xf4\xe3\xbd\xf0V\x88<\xc8r\x80\xdb\xe6@\xa1\x8a\r\x02\xa2\a\x89\n\x81\x99:+\xfb[\x00\x00\u0794w\xf6\t\u0287 \xa0#&,U\xc4o-&\xfb90\xaci\x88\xf0\x15\xf2W6B\x00\x00\u07d4w\xf8\x1b\x1b&\xfc\x84\xd6\u0797\uf2df\xbdr\xa310\xccJ\x8965\u026d\xc5\u07a0\x00\x00\u07d4x\x19\xb0E\x8e1N+S\xbf\xe0\f8I_\u0539\xfd\xf8\u0589\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4x\x1b\x15\x01dz.\x06\xc0\xedC\xff\x19\u007f\xcc\xec5\xe1p\v\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4x/R\xf0\xa6v\xc7w\x16\xd5t\xc8\x1e\xc4hO\x9a\x02\n\x97\x89.\x14\xe2\x06\xb70\xad\x80\x00\u07d4x5]\xf0\xa20\xf8=\x03,p1TAM\xe3\xee\u06b5W\x89lk\x93[\x8b\xbd@\x00\x00\u07d4x6\xf7\xefk\u01fd\x0f\xf3\xac\xafD\x9c\x84\xddk\x1e,\x93\x9f\x89\xe0\x8d\xe7\xa9,\xd9|\x00\x00\u07d4x7\xfc\xb8v\xda\x00\xd1\xeb;\x88\xfe\xb3\xdf?\xa4\x04/\xac\x82\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4x>\uc2a5\xda\xc7{.f#\xedQ\x98\xa41\xab\xba\xee\a\x89\x17\xda:\x04\u01f3\xe0\x00\x00\u07d4x\\\x8e\xa7t\xd70D\xa74\xfay\n\x1b\x1et>w\xed|\x89\f\xf1Rd\f\\\x83\x00\x00\u07d4x`\xa3\xde8\xdf8*\xe4\xa4\xdc\xe1\x8c\f\a\xb9\x8b\xce=\xfa\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94xcCq\xe1s\x04\xcb\xf39\xb1E*L\xe48\xdcvL\u038a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4xd\u0719\x9f\xe4\xf8\xe0\x03\xc0\xf4=\xec\u00da\xae\x15\"\xdc\x0f\x89\x05\x1e\x10+\xd8\xec\xe0\x00\x00\u07d4xtj\x95\x8d\xce\xd4\xc7d\xf8vP\x8cAJh4,\uce49\x02\xbe7O\xe8\xe2\xc4\x00\x00\xe0\x94x}1?\xd3k\x05>\xee\xae\xdb\xcet\xb9\xfb\x06x32\x89\x8a\x05\xc0X\xb7\x84'\x19`\x00\x00\u07d4x\x85\x9c[T\x8bp\r\x92\x84\xce\xe4\xb6c=GJ\x8a\x04{\x92\xc4\x15B$-\n\b\xc7\x0f\x99\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4x\u03c36\xb3(\xdb=\x87\x81:G+\x9e\x89\xb7^\f\xf3\xbc\x8965\u026d\xc5\u07a0\x00\x00\u07d4x\xd4\xf8\xc7\x1c\x1eh\xa6\x9a\x98\xf5/\xcbE\u068a\xf5n\xa1\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4x\xdf&\x81\xd6\xd6\x02\xe2!B\xd5A\x16\u07a1]EIW\xaa\x89\x10'\x94\xad \xdah\x00\x00\u07d4x\xe0\x8b\xc53A<&\u2473\x14?\xfa|\u026f\xb9{x\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4x\xe8?\x80\xb3g\x8cz\nN>\x8c\x84\xdc\xcd\xe0dBbw\x89a\t=|,m8\x00\x00\u07d4x\xf5\xc7G\x85\xc5f\x8a\x83\x80r\x04\x8b\xf8\xb4SYM\u06ab\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4y\x0f\x91\xbd]\x1c\\\xc4s\x9a\xe9\x13\x00\u06c9\xe1\xc10<\x93\x89lk\x93[\x8b\xbd@\x00\x00\u07d4y\x17\u5f42\xa9y\x0f\xd6P\xd0C\xcd\xd90\xf7y\x963\u06c9\xd8\xd4`,&\xbfl\x00\x00\u07d4y\x19\xe7b\u007f\x9b}T\xea;\x14\xbbM\xd4d\x9fO9\xde\xe0\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4y\x1f`@\xb4\xe3\xe5\r\xcf5S\xf1\x82\u0357\xa9\x060\xb7]\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4y0\xc2\xd9\xcb\xfa\x87\xf5\x10\xf8\xf9\x87w\xff\x8a\x84H\xcaV)\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4yE)\u041d\x01rq5\x970\x02pu\xb8z\xd8=\xaen\x89\x10\xce\x1d=\x8c\xb3\x18\x00\x00\u07d4yKQ\u00deS\xd9\xe7b\xb0a;\x82\x9aD\xb4r\xf4\xff\xf3\x89$5\xe0dxA\u0300\x00\xe0\x94yU\x1c\xed\xe3v\xf7G\xe3ql\x8dy@\rvm.\x01\x95\x8a\t\xcb7\xaf\xa4\xffxh\x00\x00\u07d4y^\xbc&&\xfc9\xb0\xc8b\x94\xe0\xe87\xdc\xf5#U0\x90\x8965\u026d\xc5\u07a0\x00\x00\u07d4yn\xbb\xf4\x9b>6\xd6v\x94\xady\xf8\xff6vz\xc6\xfa\xb0\x89\x03K\xc4\xfd\xde'\xc0\x00\x00\u07d4yo\x87\xbaaz)0\xb1g\v\xe9.\xd1(\x1f\xb0\xb3F\xe1\x89\x06\xf5\xe8o\xb5((\x00\x00\u07d4yt'\xe3\xdb\xf0\xfe\xaez%\x06\xf1-\xf1\xdc@2n\x85\x05\x8965\u026d\xc5\u07a0\x00\x00\u07d4yu\x10\xe3\x86\xf5c\x93\xce\xd8\xf4w7\x8aDLHO}\xad\x8965\u026d\xc5\u07a0\x00\x00\u07d4y{\xb7\xf1W\xd9\xfe\xaa\x17\xf7m\xa4\xf7\x04\xb7M\xc1\x03\x83A\x89\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4y\x88\x90\x131\xe3\x87\xf7\x13\xfa\u03b9\x00\\\xb9\xb6Q6\xeb\x14\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4y\x89\u041f8&\xc3\u5bccu*\x81\x15r:\x84\xd8\tp\x89\x16\x86\xf8aL\xf0\xad\x00\x00\xe0\x94y\x95\xbd\x8c\xe2\xe0\xc6{\xf1\u01e51\xd4w\xbc\xa1\xb2\xb9ua\x8a\x01BH\xd6\x17\x82\x9e\xce\x00\x00\u07d4y\xae\xb3Ef\xb9t\xc3ZX\x81\xde\xc0 \x92}\xa7\xdf]%\x89lk\x93[\x8b\xbd@\x00\x00\u07d4y\xb1 \xeb\x88\x06s#!(\x8fgZ'\xa9\"_\x1c\xd2\ub245\xa0\xbf7\xde\xc9\xe4\x00\x00\u07d4y\xb4\x8d-a7\u00c5Ma\x1c\x01\xeaBBz\x0fY{\xb7\x89\nZ\xa8P\t\xe3\x9c\x00\x00\u07d4y\xb8\xaa\xd8y\xdd0V~\x87x\xd2\xd21\xc8\xf3z\xb8sN\x89lk\x93[\x8b\xbd@\x00\x00\u07d4y\xbf/{n2\x8a\xaf&\xe0\xbb\t?\xa2-\xa2\x9e\xf2\xf4q\x89a\t=|,m8\x00\x00\u07d4y\xc10\xc7b\xb8v[\x19\u04ab\u0260\x83\xab\x8f:\xady@\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4y\xc1\xbe\x19q\x1fs\xbe\xe4\xe61j\xe7T\x94Y\xaa\u03a2\xe0\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4y\xc6\x00/\x84R\xca\x15\u007f\x13\x17\xe8\n/\xaf$GUY\xb7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4y\xca\xc6IO\x11\xef'\x98t\x8c\xb52\x85\xbd\x8e\"\xf9|\u0689lk\x93[\x8b\xbd@\x00\x00\u07d4y\u03e9x\n\xe6\xd8{,1\x88?\t'i\x86\u021ag5\x8965\u026d\xc5\u07a0\x00\x00\u07d4y\u06e2VG-\xb4\xe0X\xf2\xe4\xcd\xc3\xeaN\x8aBw83\x89O%\x91\xf8\x96\xa6P\x00\x00\u07d4y\xed\x10\xcf\x1fm\xb4\x82\x06\xb5\t\x19\xb9\xb6\x97\b\x1f\xbd\xaa\xf3\x89lk\x93[\x8b\xbd@\x00\x00\u0794y\xf0\x8e\x01\xce\t\x88\xe6<\u007f\x8f)\b\xfa\xdeC\xc7\xf9\xf5\u0248\xfc\x93c\x92\x80\x1c\x00\x00\u07d4y\xfdmH1Pf\xc2\x04\xf9e\x18i\xc1\tl\x14\xfc\x97\x81\x89lk\x93[\x8b\xbd@\x00\x00\u0794y\xff\xb4\xac\x13\x81*\vx\u0123{\x82u\">\x17k\xfd\xa5\x88\xf0\x15\xf2W6B\x00\x00\u07d4z\x05\x89\xb1C\xa8\xe5\xe1\a\u026cf\xa9\xf9\xf8Yz\xb3\u7ac9Q\xe92\xd7n\x8f{\x00\x00\u07d4z\nx\xa9\xcc9?\x91\xc3\xd9\xe3\x9ak\x8c\x06\x9f\a^k\xf5\x89Hz\x9a0E9D\x00\x00\u07d4z\x13p\xa7B\xec&\x87\xe7a\xa1\x9a\u0167\x942\x9e\xe6t\x04\x89\xa2\xa12ga\xe2\x92\x00\x00\xe0\x94z-\xfcw\x0e$6\x811\xb7\x84w\x95\xf2\x03\xf3\xd5\r[V\x8a\x02i\xfe\xc7\xf06\x1d \x00\x00\u07d4z3\x83N\x85\x83s>-R\xae\xadX\x9b\u046f\xfb\x1d\xd2V\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94z6\xab\xa5\xc3\x1e\xa0\xca~'{\xaa2\xecF\u0393\xcfu\x06\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94z8\x11\"\xba\xday\x1az\xb1\xf6\x03}\xac\x80C'S\xba\xad\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94zH\xd8w\xb6:\x8f\x8f\x93\x83\xe9\xd0\x1eS\xe8\fR\x8e\x95_\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4zO\x9b\x85\x06\x90\xc7\xc9F\x00\xdb\xee\f\xa4\xb0\xa4\x11\xe9\xc2!\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4zc\x86\x9f\xc7g\xa4\u01b1\xcd\x0e\x06I\xf3cL\xb1!\xd2K\x89\x043\x87Oc,\xc6\x00\x00\u07d4zg\xdd\x04:PO\xc2\xf2\xfcq\x94\xe9\xbe\xcfHL\xec\xb1\xfb\x89\r\x8drkqw\xa8\x00\x00\xe0\x94zk&\xf48\u0663RD\x91U\xb8\x87l\xbd\x17\xc9\u065bd\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4zmx\x1cw\u013a\x1f\xca\xdfhsA\xc1\xe3\x17\x99\xe9='\x89\x0e\u0683\x8cI)\b\x00\x00\u07d4zph\xe1\xc37\\\x0eY\x9d\xb1\xfb\xe6\xb2\xea#\xb8\xf4\a\u0489lk\x93[\x8b\xbd@\x00\x00\u07d4zt\xce\xe4\xfa\x0fcp\xa7\x89O\x11l\xd0\f\x11G\xb8>Y\x89+^:\xf1k\x18\x80\x00\x00\u07d4zy\xe3\x0f\xf0W\xf7\n=\x01\x91\xf7\xf5?v\x157\xaf}\xff\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94zzO\x80sW\xa4\xbb\xe6\x8e\x1a\xa8\x0692\x10\xc4\x11\u0333\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4z\x85c\x86y\x01 o?+\xf0\xfa>\x1c\x81\t\u02bc\u0345\x89\amA\xc6$\x94\x84\x00\x00\xe0\x94z\x87\x97i\n\xb7{Tp\xbf|\f\x1b\xbaa%\b\xe1\xac}\x8a\x01\xe0\x92\x96\xc37\x8d\xe4\x00\x00\u07d4z\x8c\x89\xc0\x14P\x9dV\u05f6\x810f\x8f\xf6\xa3\xec\xecsp\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94z\x94\xb1\x99\x92\u03b8\xcec\xbc\x92\xeeKZ\xde\xd1\fM\x97%\x8a\x03\x8d\x1a\x80d\xbbd\xc8\x00\x00\u07d4z\xa7\x9a\xc0C\x16\u030d\b\xf2\x00e\xba\xa6\xd4\x14(\x97\xd5N\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4z\xadM\xbc\u04ec\xf9\x97\u07d3XiV\xf7+d\u062d\x94\xee\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94z\xb2V\xb2\x04\x80\n\xf2\x017\xfa\xbc\xc9\x16\xa22Xu%\x01\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4z\xbaV\xf6:H\xbc\b\x17\u05b9p9\x03\x9az\xd6/\xae.\x89 \x86\xac5\x10R`\x00\x00\xe0\x94z\xbb\x10\xf5\xbd\x9b\xc3;\x8e\xc1\xa8-d\xb5[k\x18wuA\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4z\u010d@\xc6d\u031am\x89\xf1\xc5\xf5\xc8\n\x1cp\xe7D\u6263\x10b\xbe\xee\xd7\x00\x00\x00\u07d4z\u014fo\xfcO\x81\a\xaen07\x8eN\x9f\x99\xc5\u007f\xbb$\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4z\xd3\xf3\aao\x19\u0731C\xe6DM\xab\x9c<3a\x1fR\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4z\xd8,\xae\xa1\xa8\xb4\xed\x051\x9b\x9c\x98p\x17<\x81N\x06\xee\x89!d\xb7\xa0J\u0220\x00\x00\u07d4z\xde]f\xb9D\xbb\x86\f\x0e\xfd\xc8bv\u054fFS\xf7\x11\x89lk\x93[\x8b\xbd@\x00\x00\u07d4z\xdf\xed\xb0m\x91\xf3\xccs\x90E\v\x85U\x02p\x88<{\xb7\x89\x11x\xfa@Q]\xb4\x00\x00\u07d4z\xe1\xc1\x9eS\xc7\x1c\xeeLs\xfa\xe2\xd7\xfcs\xbf\x9a\xb5\u348965\u026d\xc5\u07a0\x00\x00\u07d4z\xe6Y\xeb;\xc4hR\xfa\x86\xfa\xc4\xe2\x1cv\x8dP8\x89E\x89\x0f\x81\f\x1c\xb5\x01\xb8\x00\x00\u07d4z\xea%\xd4+&\x12(n\x99\xc56\x97\u01bcA\x00\xe2\u06ff\x89lk\x93[\x8b\xbd@\x00\x00\u07d4z\xef{U\x1f\v\x9cF\xe7U\xc0\xf3\x8e[:s\xfe\x11\x99\xf5\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4{\v1\xffn$t^\xad\x8e\u067b\x85\xfc\v\xf2\xfe\x1dU\u0509+^:\xf1k\x18\x80\x00\x00\xe0\x94{\x0f\xea\x11v\xd5!Y3:\x14<)IC\xda6\xbb\u0774\x8a\x01\xfc}\xa6N\xa1L\x10\x00\x00\u07d4{\x11g<\xc0\x19bk)\f\xbd\xce&\x04o~m\x14\x1e!\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4{\x12!b\xc9\x13\xe7\x14l\xad\v~\xd3z\xff\xc9*\v\xf2\u007f\x89Q\xaf\tk#\x01\u0440\x00\u07d4{\x1b\xf5:\x9c\xbe\x83\xa7\u07a44W\x9f\xe7*\xac\x8d*\f\u0409\n\xd4\xc81j\v\f\x00\x00\u07d4{\x1d\xaf\x14\x89\x1b\x8a\x1e\x1b\xd4)\u0633k\x9aJ\xa1\u066f\xbf\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4{\x1f\xe1\xabM\xfd\x00\x88\xcd\xd7\xf6\x01c\xefY\xec*\xee\x06\xf5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4{%\xbb\x9c\xa8\xe7\x02!~\x933\"RP\xe5<6\x80MH\x89e\xea=\xb7UF`\x00\x00\u07d4{'\xd0\xd1\xf3\xdd<\x14\x02\x94\xd0H\x8bx>\xbf@\x15'}\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94{@\a\xc4^ZW?\u06f6\xf8\xbdtk\xf9J\xd0J<&\x8a\x038!\xf5\x13]%\x9a\x00\x00\u07d4{C\xc7\xee\xa8\xd6#U\xb0\xa8\xa8\x1d\xa0\x81\xc6Dk3\xe9\xe0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4{M*8&\x90i\xc1\x85Ww\rY\x1d$\xc5\x12\x1f^\x83\x89%\xf2s\x93=\xb5p\x00\x00\xe0\x94{au\xec\x9b\xef\xc78$\x955\xdd\xde4h\x8c\xd3n\xdf%\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94{f\x12hy\x84M\xfa4\xfee\xc9\xf2\x88\x11\u007f\xef\xb4I\xad\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4{j\x84q\x8d\xd8nc3\x84)\xac\x81\x1d|\x8a\x86\x0f!\xf1\x89a\t=|,m8\x00\x00\xe0\x94{q,z\xf1\x16v\x00jf\xd2\xfc\\\x1a\xb4\xc4y\xce`7\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4{s$-u\u029a\xd5X\xd6P)\r\xf1v\x92\xd5L\u0638\x89lnY\xe6|xT\x00\x00\u07d4{v\x1f\xeb\u007f\u03e7\xde\xd1\xf0\xeb\x05\x8fJ`\v\xf3\xa7\b\u02c9\xf9]\xd2\xec'\xcc\xe0\x00\x00\xe0\x94{\x82|\xae\u007f\xf4t\t\x18\xf2\xe00\xab&\u02d8\xc4\xf4l\xf5\x8a\x01\x94hL\v9\xde\x10\x00\x00\xe0\x94{\x892\x86B~r\xdb!\x9a!\xfcM\xcd_\xbfY(<1\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4{\x92&\xd4o\xe7Q\x94\v\xc4\x16\xa7\x98\xb6\x9c\xcf\r\xfa\xb6g\x89\u3bb5sr@\xa0\x00\x00\u07d4{\x98\xe2<\xb9k\xee\xe8\n\x16\x80i\ube8f \xed\xd5\\\u03c9\v\xa0\xc9\x15\x87\xc1J\x00\x00\u07d4{\xb0\xfd\xf5\xa6c\xb5\xfb\xa2\x8d\x9c\x90*\xf0\xc8\x11\xe2R\xf2\x98\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4{\xb9W\x1f9K\v\x1a\x8e\xbaVd\xe9\u0635\xe8@g{\xea\x89\x01\x11du\x9f\xfb2\x00\x00\xe0\x94{\xb9\x84\xc6\u06f9\xe2y\x96j\xfa\xfd\xa5\x9c\x01\xd0&'\xc8\x04\x8a\x01\xb4d1\x1dE\xa6\x88\x00\x00\u07d4{\xbb\xec^p\xbd\xea\u063b2\xb4(\x05\x98\x8e\x96H\xc0\xaa\x97\x8966\u05ef^\u024e\x00\x00\u07d4{\xca\x1d\xa6\xc8\nf\xba\xa5\xdbZ\u0245A\u013e'kD}\x89$\xcf\x04\x96\x80\xfa<\x00\x00\u07d4{\u0772\xee\x98\xde\x19\xeeL\x91\xf6a\xee\x8eg\xa9\x1d\x05K\x97\x8965\u026d\xc5\u07a0\x00\x00\u0794{\xe2\xf7h\f\x80-\xa6\x15L\x92\xc0\x19J\xe72Qzqi\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4{\xe7\xf2Eiq\x88;\x9a\x8d\xbeL\x91\xde\xc0\x8a\xc3N\x88b\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4{\xe8\u0334\xf1\x1bf\xcan\x1dW\xc0\xb59b!\xa3\x1b\xa5:\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94{\xeb\x81\xfb/^\x91Rk*\xc9y^v\u019b\xcf\xf0K\xc0\x8a\x0e\xb2.yO\n\x8d`\x00\x00\u07d4|\b\x83\x05L-\x02\xbcz\x85+\x1f\x86\xc4'w\xd0\xd5\xc8V\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4|\x0f^\a C\xc9\xeet\x02B\x19~x\xccK\x98\xcd\xf9`\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4|\x1d\xf2JO\u007f\xb2\u01f4r\xe0\xbb\x00l\xb2}\xcd\x16AV\x8965\u026d\xc5\u07a0\x00\x00\u07d4|)\xd4}W\xa73\xf5k\x9b!pc\xb5\x13\xdc;1Y#\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4|+\x96\x03\x88JO.FN\u03b9}\x17\x93\x8d\x82\x8b\xc0,\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4|8,\x02\x96a.N\x97\xe4@\xe0-8q';U\xf5;\x89\n\xb6@9\x12\x010\x00\x00\u07d4|>\xb7\x13\xc4\xc9\xe08\x1c\xd8\x15L|\x9a}\xb8d\\\xde\x17\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4|D\x01\xae\x98\xf1.\xf6\xde9\xae$\u03df\xc5\x1f\x80\xeb\xa1k\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4|E\xf0\xf8D*V\xdb\u04dd\xbf\x15\x99\x95A\\R\xedG\x9b\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94|S-\xb9\xe0\xc0l&\xfd@\xac\xc5j\xc5\\\x1e\xe9-<:\x8a?\x87\bW\xa3\xe0\xe3\x80\x00\x00\u07d4|`\xa0_zJ_\x8c\xf2xC\x916.uZ\x83A\xefY\x89f\x94\xf0\x18*7\xae\x00\x00\u07d4|`\xe5\x1f\v\xe2(\xe4\xd5o\xdd)\x92\xc8\x14\xdaw@\u01bc\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4|i$\xd0|>\xf5\x89\x19f\xfe\nxV\xc8{\xef\x9d 4\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94|\x8b\xb6Zo\xbbI\xbdA3\x96\xa9\xd7\xe3\x10S\xbb\xb3z\xa9\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94|\x9a\x11\f\xb1\x1f%\x98\xb2\xb2\x0e,\xa4\x002^A\xe9\xdb3\x8a\x05\x81v{\xa6\x18\x9c@\x00\x00\u07d4|\xbc\xa8\x8f\xcaj\x00`\xb9`\x98\\\x9a\xa1\xb0%4\xdc\"\b\x89\x19\x12z\x13\x91\xea*\x00\x00\u07d4|\xbe\xb9\x992\xe9~n\x02\x05\x8c\xfcb\u0432k\xc7\u0325+\x89lk\x93[\x8b\xbd@\x00\x00\u07d4|\xc2Jj\x95\x8c \xc7\xd1$\x96`\xf7Xb&\x95\v\r\x9a\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4|\xd2\x0e\u0335\x18\xb6\f\xab\t[r\x0fW\x15p\u02aaD~\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4|\xd5\xd8\x1e\xab7\xe1\x1ebv\xa3\xa1\t\x12Q`~\r~8\x89\x03hM^\xf9\x81\xf4\x00\x00\u07d4|\xdft!9E\x95=\xb3\x9a\xd0\xe8\xa9x\x1a\xddy.M\x1d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4|\xe4hdF\U000547be\xd6r\x15\xeb\rZ\x1d\xd7,\x11\xb8\x89x9\xd3!\xb8\x1a\xb8\x00\x00\u07d4|\xefMC\xaaA\u007f\x9e\xf8\xb7\x87\xf8\xb9\x9dS\xf1\xfe\xa1\ue209g\x8a\x93 b\xe4\x18\x00\x00\u07d4}\x03P\xe4\v3\x8d\xdasfa\x87+\xe3?\x1f\x97R\xd7U\x89\x02\xb4\xf5\xa6\U00051500\x00\xe0\x94}\x04\xd2\xed\xc0X\xa1\xaf\xc7a\xd9\u025a\xe4\xfc\\\x85\xd4\u0226\x8aB\xa9\xc4g\\\x94g\xd0\x00\x00\u07d4}\v%^\xfbW\xe1\x0fp\b\xaa\"\xd4\x0e\x97R\xdf\xcf\x03x\x89\x01\x9f\x8euY\x92L\x00\x00\xe0\x94}\x13\xd6pX\x84\xab!W\u074d\xccpF\xca\xf5\x8e\xe9K\xe4\x8a\x1d\r\xa0|\xbb>\xe9\xc0\x00\x00\u07d4}'>c~\xf1\xea\u0101\x11\x94\x13\xb9\x1c\x98\x9d\xc5\xea\xc1\"\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4}*R\xa7\xcf\f\x846\xa8\xe0\a\x97kl&\xb7\"\x9d\x1e\x15\x89\x17\xbf\x06\xb3*$\x1c\x00\x00\u07d4}4\x805i\xe0\v\u05b5\x9f\xff\b\x1d\xfa\\\n\xb4\x19zb\x89\\\xd8|\xb7\xb9\xfb\x86\x00\x00\u07d4}4\xffY\xae\x84\nt\x13\u01baL[\xb2\xba,u\xea\xb0\x18\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4}9(R\xf3\xab\xd9/\xf4\xbb[\xb2l\xb6\bt\xf2\xbeg\x95\x8966\xc2^f\xec\xe7\x00\x00\u07d4}DRg\u015a\xb8\u04a2\xd9\xe7\t\x99\x0e\th%\x80\u011f\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94}U\x13\x97\xf7\x9a)\x88\xb0d\xaf\xd0\xef\xeb\xee\x80,w!\xbc\x8a\bW\xe0\xd6\xf1\xdav\xa0\x00\x00\u07d4}Z\xa3?\xc1KQ\x84\x1a\x06\x90n\xdb+\xb4\x9c*\x11ri\x89\x10D\x00\xa2G\x0eh\x00\x00\xe0\x94}]/s\x94\x9d\xad\xda\bV\xb2\x06\x98\x9d\xf0\a\x8dQ\xa1\xe5\x8a\x02\xc4:H\x1d\xf0M\x01wb\xed\xcb\\\xaab\x9bZ\x89\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4~\x8f\x96\xcc)\xf5{\tu\x12\f\xb5\x93\xb7\u0743=`kS\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4~\x97*\x8a|*D\xc9;!Cl8\xd2\x1b\x92R\xc3E\xfe\x89a\t=|,m8\x00\x00\u07d4~\x99\u07fe\x98\x9d;\xa5)\u0457Q\xb7\xf41\u007f\x89S\xa3\xe2\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4~\xa0\xf9n\xe0\xa5s\xa30\xb5h\x97v\x1f=L\x010\xa8\xe3\x89Hz\x9a0E9D\x00\x00\u0794~\xa7\x91\xeb\xab\x04E\xa0\x0e\xfd\xfcNJ\x8e\x9a~ue\x13m\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4~\xab\xa05\xe2\xaf7\x93\xfdtgK\x10%@\xcf\x19\n\u0779\x89E\x02l\x83[`D\x00\x00\xe0\x94~\xb4\xb0\x18\\\x92\xb6C\x9a\b\xe72!h\xcb5<\x8awJ\x8a\x02'\x19l\xa0I\x83\xca\x00\x00\xe0\x94~\xbd\x95\xe9\xc4p\xf7(5\x83\xdcn\x9d,M\xce\v\ua3c4\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4~\u0425\xa8G\xbe\xf9\xa9\xda|\xba\x1dd\x11\xf5\xc3\x161&\x19\x89\x02(\xeb7\xe8u\x1d\x00\x00\u07d4~\xda\xfb\xa8\x98K\xafc\x1a\x82\vk\x92\xbb\xc2\xc56U\xf6\xbd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4~\xdb\x02\xc6\x1a\"r\x87a\x1a\xd9Pici\xccNdzh\x89\x0e\u0683\x8cI)\b\x00\x00\u07d4~\xe5\u0280]\xce#\xaf\x89\xc2\xd4D\xe7\xe4\af\xc5Lt\x04\x89\r\v\xd4\x12\xed\xbd\x82\x00\x00\xe0\x94~\xe6\x04\u01e9\xdc)\t\xce2\x1d\u6e72OWgWuU\x8a\x01+\xf9\u01d8\\\xf6-\x80\x00\u07d4~\xf1o\xd8\xd1[7\x8a\x0f\xba0k\x8d\x03\u0758\xfc\x92a\x9f\x89%\xf2s\x93=\xb5p\x00\x00\u07d4~\xf9\x8bR\xbe\xe9S\xbe\xf9\x92\xf3\x05\xfd\xa0'\xf8\x91\x1cXQ\x89\x1b\xe7\" i\x96\xbc\x80\x00\u07d4~\xfc\x90vj\x00\xbcR7,\xac\x97\xfa\xbd\x8a<\x83\x1f\x8e\u0349\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4~\xfe\xc0\xc6%<\xaf9\u007fq(|\x1c\a\xf6\xc9X+[\x86\x89\x1a,\xbc\xb8O0\u0540\x00\u07d4\u007f\x01\xdc|7G\xca`\x8f\x98=\xfc\x8c\x9b9\xe7U\xa3\xb9\x14\x89\v8l\xad_zZ\x00\x00\u07d4\u007f\x06b\xb4\x10)\x8c\x99\xf3\x11\u04e1EJ\x1e\xed\xba/\xeav\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\u007f\x06\u021dY\x80\u007f\xa6\v\xc6\x016\xfc\xf8\x14\u02ef%C\xbd\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u007f\v\x90\xa1\xfd\u050f'\xb2h\xfe\xb3\x83\x82\xe5]\xdbP\xef\x0f\x892\xf5\x1e\u06ea\xa30\x00\x00\u07d4\u007f\x0e\xc3\u06c0F\x92\xd4\xd1\xea2E6Z\xab\x05\x90\a[\u0109\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u007f\x0f\x04\xfc\xf3zS\xa4\xe2N\xden\x93\x10Nx\xbe\x1d<\x9e\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u007f\x13\xd7`I\x8dq\x93\xcahY\xbc\x95\xc9\x018d#\xd7l\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\u007f\x15\n\xfb\x1aw\u00b4Y(\xc2h\xc1\u9f74d\x1dG\u0609lk\x93[\x8b\xbd@\x00\x00\u07d4\u007f\x16\x19\x98\x8f7\x15\xe9O\xf1\xd2S&-\xc5X\x1d\xb3\xde\x1c\x890\xca\x02O\x98{\x90\x00\x00\u07d4\u007f\x1c\x81\xee\x16\x97\xfc\x14K|\v\xe5I;V\x15\xae\u007f\xdd\u0289\x1b\x1d\xaba\u04ead\x00\x00\u07d4\u007f#\x82\xff\xd8\xf89VFy7\xf9\xbar7F#\xf1\x1b8\x89 \x86\xac5\x10R`\x00\x00\u07d4\u007f7\t9\x1f?\xbe\xba5\x92\xd1u\xc7@\xe8z\tT\x1d\x02\x89\x1a\x05V\x90\xd9\u06c0\x00\x00\u07d4\u007f8\x9c\x12\xf3\xc6\x16OdFVlwf\x95\x03\xc2y%'\x89\x05V\xf6L\x1f\xe7\xfa\x00\x00\xe0\x94\u007f:\x1eE\xf6~\x92\u0200\xe5s\xb43y\xd7\x1e\xe0\x89\xdbT\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\u007f=r\x03\u0224G\xf7\xbf6\u060a\xe9\xb6\x06*^\xeex\xae\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\u007fF\xbb%F\r\xd7\xda\xe4!\x1c\xa7\xf1Z\xd3\x12\xfc}\xc7\\\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\u007fI\xe7\xa4&\x98\x82\xbd\x87\"\u0526\xf5f4v)b@y\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u007fI\xf2\a&G\x1a\xc1\u01e8>\xf1\x06\xe9w\\\xebf%f\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4\u007fK^'\x85x\xc0F\xcc\xea\xf6W0\xa0\xe0h2\x9e\u0576\x89e\xea=\xb7UF`\x00\x00\u07d4\u007fOY;a\x8c3\v\xa2\xc3\xd5\xf4\x1e\xce\xeb\x92\xe2~Bl\x89\x96n\xdcuk|\xfc\x00\x00\u07d4\u007fT\x14\x91\u04ac\x00\xd2a/\x94\xaa\u007f\v\xcb\x01FQ\xfb\u0509\x14b\fW\xdd\xda\xe0\x00\x00\u07d4\u007fZ\xe0Z\xe0\xf8\xcb\xe5\xdf\xe7!\xf0D\u05e7\xbe\xf4\xc2y\x97\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\u007f`:\xec\x17Y\xea_\a\xc7\xf8\xd4\x1a\x14(\xfb\xba\xf9\xe7b\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u007falo\x00\x8a\u07e0\x82\xf3M\xa7\xd0e\x04`6\x80u\xfb\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u007fa\xfal\xf5\xf8\x98\xb4@\xda\u016b\xd8`\rmi\x1f\xde\xf9\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\xe0\x94\u007fe\\g\x89\xed\xdfE\\\xb4\xb8\x80\x99r\x0698\x9e\ubb0a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\u007fk(\u0204!\xe4\x85~E\x92\x81\u05c4ai$\x89\xd3\xfb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u007fn\xfboC\x18\x87m.\xe6$\xe2u\x95\xf4DF\xf6\x8e\x93\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\u007fq\x92\xc0\xdf\x1c}\xb6\xd9\xede\xd7\x11\x84\xd8\xe4\x15Z\x17\xba\x89\x04Sr\x8d3\x94,\x00\x00\u07d4\u007fz:!\xb3\xf5\xa6]\x81\xe0\xfc\xb7\xd5-\xd0\n\x1a\xa3m\xba\x89\x05k\xc7^-c\x10\x00\x00\u07d4\u007f\x8d\xbc\xe1\x80\xed\x9cV65\xaa\xd2\xd9{L\xbcB\x89\x06\u0649\x90\xf54`\x8ar\x88\x00\x00\xe0\x94\u007f\x99=\xdb~\x02\u0082\xb8\x98\xf6\x15_h\x0e\xf5\xb9\xaf\xf9\a\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\u007f\x9f\x9bV\xe4(\x9d\xfbX\xe7\x0f\xd5\xf1*\x97\xb5m5\u01a5\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u007f\xa3~\xd6x\x87u\x1aG\x1f\x0e\xb3\x06\xbeD\xe0\xdb\xcd`\x89\x899vt\u007f\xe1\x1a\x10\x00\x00\u07d4\u007f\xaa0\xc3\x15\x19\xb5\x84\xe9rP\xed*<\xf38^\xd5\xfdP\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u007f\xcf[\xa6fo\x96lTH\xc1{\xf1\xcb\v\xbc\xd8\x01\x9b\x06\x89\x05k\xc3\u042e\xbeI\x80\x00\xe0\x94\u007f\xd6y\xe5\xfb\r\xa2\xa5\xd1\x16\x19M\xcbP\x83\x18\xed\u0140\xf3\x8a\x01c\x9eI\xbb\xa1b\x80\x00\x00\u07d4\u007f\u06e01\u01cf\x9c\tmb\xd0Z6\x9e\uac3c\xccU\u5257\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\u007f\xdb\u00e8D\xe4\r\x96\xb2\xf3\xa652.`e\xf4\xca\x0e\x84\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u007f\xdf\u020dx\xbf\x1b(Z\xc6O\x1a\xdb5\xdc\x11\xfc\xb09Q\x89|\x06\xfd\xa0/\xb06\x00\x00\u07d4\u007f\xea\x19b\xe3]b\x05\x97h\xc7I\xbe\u0756\u02b90\xd3x\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u007f\xef\x8c8w\x9f\xb3\a\xeco\x04K\xeb\xe4\u007f<\xfa\xe7\x96\xf1\x89\t#@\xf8l\xf0\x9e\x80\x00\u07d4\u007f\xf0\xc6?p$\x1b\xec\xe1\x9bs~SA\xb1+\x10\x901\u0609\x12\xc1\xb6\xee\xd0=(\x00\x00\xe0\x94\u007f\xfa\xbf\xbc9\f\xbeC\u0389\x18\x8f\bh\xb2}\xcb\x0f\f\xad\x8a\x01YQ\x82\"K&H\x00\x00\xe0\x94\u007f\xfd\x02\xed7\fp`\xb2\xaeS\xc0x\xc8\x01!\x90\u07fbu\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u0794\x80\x02*\x12\a\xe9\x10\x91\x1f\xc9(I\xb0i\xab\f\xda\xd0C\u04c8\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\x80\t\xa7\xcb\u0452\xb3\xae\u052d\xb9\x83\xd5(ER\xc1ltQ\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x80\x0e}c\x1cnW:\x903/\x17\xf7\x1f_\u045bR\x8c\xb9\x89\b=lz\xabc`\x00\x00\u07d4\x80\x15m\x10\ufa320\u0254\x10c\r7\xe2i\xd4\t<\xea\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x80\x172\xa4\x81\u00c0\xe5~\xd6-l)\u0799\x8a\xf3\xfa;\x13\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x80\x1de\xc5\x18\xb1\x1d\x0e?OG\x02!Ap\x13\xc8\xe5>\u0149\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x80&CZ\xacr\x8dI{\x19\xb3\xe7\xe5|(\xc5c\x95O+\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\x80-\xc3\xc4\xff-}\x92^\u215fJ\x06\u05fa`\xf10\x8c\x89\x05P\x94\f\x8f\xd3L\x00\x00\u07d4\x800\xb1\x11\u0198?\x04\x85\u076c\xa7b$\xc6\x18\x064x\x9f\x89\x04V9\x18$O@\x00\x00\u07d4\x805\xbc\xff\xae\xfd\xee\xea5\x83\fI}\x14(\x9d6 #\u0789\x10CV\x1a\x88)0\x00\x00\u07d4\x805\xfeNkj\xf2z\u44a5xQ^\x9d9\xfao\xa6[\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x80C\xed\"\xf9\x97\u58a4\xc1n6D\x86\xaed\x97V\x92\u0109=I\x04\xff\xc9\x11.\x80\x00\u07d4\x80C\xfd\u043cL\x97=\x16c\xd5_\xc15P\x8e\xc5\xd4\xf4\xfa\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x80L\xa9IrcOc:Q\xf3V\v\x1d\x06\xc0\xb2\x93\xb3\xb1\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x80R-\u07d4N\xc5.'\xd7$\xedL\x93\xe1\xf7\xbe`\x83\u0589\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x80Y\x1aB\x17\x9f4\xe6M\x9d\xf7]\xcdF;(hoUt\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x80\\\xe5\x12\x97\xa0y;\x81 g\xf0\x17\xb3\xe7\xb2\u07db\xb1\xf9\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\x80]\x84o\xb0\xbc\x02\xa73r&\u0585\xbe\x9e\xe7s\xb9\x19\x8a\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4\x80c7\x9a{\xf2\u02d2:\x84\xc5\t>h\xda\xc7\xf7T\x81\u0149\x11v\x10.n2\xdf\x00\x00\u07d4\x80hTX\x8e\xcc\xe5AI_\x81\u008a)\x03s\xdf\x02t\xb2\x89\x1f\x8c\xdf\\n\x8dX\x00\x00\u07d4\x80oD\xbd\xebh\x807\x01^\x84\xff!\x80I\xe3\x823*3\x89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u07d4\x80tF\x18\xde9jT1\x97\xeeH\x94\xab\xd0c\x98\xdd|'\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x80w\xc3\xe4\xc4EXn\tL\xe1\x02\x93\u007f\xa0[s{V\x8c\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x80\x90\u007fY1H\xb5|F\xc1w\xe2=%\xab\u012a\xe1\x83a\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x80\x97s\x16\x94NYB\xe7\x9b\x0e:\xba\u04cd\xa7F\be\x19\x89\x02\x1auJm\xc5(\x00\x00\xe0\x94\x80\xa0\xf6\xcc\x18l\xf6 \x14\x00sn\x06Z9\x1fR\xa9\xdfJ\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x80\xab\xecZ\xa3n\\\x9d\t\x8f\x1b\x94(\x81\xbdZ\xca\u0196=\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x80\xb2=8\v\x82\\F\xe098\x99\xa8UVF-\xa0\u1309lk\x93[\x8b\xbd@\x00\x00\u07d4\x80\xb4-\xe1p\xdb\xd7#\xf4T\xe8\x8fw\x16E-\x92\x98P\x92\x89\x10F#\xc0v-\xd1\x00\x00\u07d4\x80\xb7\x9f3\x83\x90\u047a\x1b77\xa2\x9a\x02W\xe5\xd9\x1e\a1\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x80\xbf\x99^\u063a\x92p\x1d\x10\xfe\u011f\x9e}\x01M\xbe\xe0&\x89\x1f\x047\xca\x1a~\x12\x80\x00\u07d4\x80\xc0N\xfd1\x0fD\x04\x83\xc7?tK[\x9edY\x9c\xe3\xec\x89A\rXj \xa4\xc0\x00\x00\u07d4\x80\u00e9\xf6\x95\xb1m\xb1Yr\x86\u0473\xa8\xb7il9\xfa'\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x80\xc5>\xe7\xe35\u007f\x94\xce\rxh\x00\x9c \x8bJ\x13\x01%\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x80\xcc!\xbd\x99\xf3\x90\x05\u014f\xe4\xa4H\x90\x92 !\x8ff\u02c966\xc9yd6t\x00\x00\u07d4\x80\xd5\xc4\fY\xc7\xf5N\xa3\xa5_\xcf\xd1uG\x1e\xa3P\x99\xb3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x80\xda/\u0762\x9a\x9e'\xf9\xe1\x15\x97^i\xae\x9c\xfb\xf3\xf2~\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x80\xe7\xb3 R0\xa5f\xa1\xf0a\xd9\"\x81\x9b\xb4\xd4\u04a0\xe1\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\x80\xea\x1a\xcc\x13n\xcaKh\xc8B\xa9Z\xdfk\u007f\xee~\xb8\xa2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x80\xf0z\xc0\x9e{,<\n=\x1e\x94\x13\xa5D\xc7:A\xbe\u02c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x81\r\xb2Vu\xf4^\xa4\xc7\xf3\x17\u007f7\xce)\xe2-g\x99\x9c\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x81\x13\x9b\xfd\u0326V\xc40 ?r\x95\x8cT;e\x80\xd4\f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x81\x14a\xa2\xb0\u0290\xba\xda\xc0j\x9e\xa1nx{3\xb1\x96\u0309\b\xe3\xf5\v\x17<\x10\x00\x00\u07d4\x81\x16M\xeb\x10\x81J\xe0\x83\x91\xf3,\bf{bH\xc2}z\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\x81\x18i1\x18A7\xd1\x19*\u020c\xd3\xe1\xe5\xd0\xfd\xb8jt\x89\x9d5\x95\xab$8\xd0\x00\x00\u0794\x81*U\xc4<\xae\xdcYr\x187\x90\x00\xceQ\rT\x886\xfd\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x81.\xa7\xa3\xb2\xc8n\xed2\xffO,sQL\xc6;\xac\xfb\u038965\u026d\xc5\u07a0\x00\x00\u07d4\x814\xdd\x1c\x9d\xf0\xd6\u0225\x81$&\xbbU\xc7a\u0283\x1f\b\x89\x06\xa2\x16\v\xb5|\xcc\x00\x00\u07d4\x81A5\u068f\x98\x11\aW\x83\xbf\x1a\xb6pb\xaf\x8d>\x9f@\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x81I\x8c\xa0{\x0f/\x17\xe8\xbb\xc7\xe6\x1a\u007fJ\xe7\xbef\xb7\x8b\x89\x05\x81\xfb\xb5\xb3;\xb0\x00\x00\u07d4\x81Um\xb2sI\xab\x8b'\x00ID\xedP\xa4n\x94\x1a\x0f_\x89\u063beI\xb0+\xb8\x00\x00\u07d4\x81U\xfalQ\xeb1\xd8\bA-t\x8a\xa0\x86\x10P\x18\x12/\x89e\xea=\xb7UF`\x00\x00\xe0\x94\x81V6\v\xbd7\ta\xce\xcakf\x91\xd7P\x06\xad L\xf2\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x81a\xd9@\xc3v\x01\x00\xb9\b\x05)\xf8\xa6\x03%\x03\x0fn\u0709\x10CV\x1a\x88)0\x00\x00\xe0\x94\x81d\xe7\x83\x14\xae\x16\xb2\x89&\xccU=,\xcb\x16\xf3V'\r\x8a\x01\xca\x13N\x95\xfb2\xc8\x00\x00\u07d4\x81e\u02b0\xea\xfbZ2\x8f\xc4\x1a\xc6M\xaeq[.\xef,e\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x81h\xed\xce\u007f)a\xcf)[\x9f\xcdZE\xc0l\xde\xdan\xf5\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x81m\x97r\xcf\x119\x91\x16\xcc\x1er\xc2lgt\xc9\xed\xd79\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x81s\xc85djg.\x01R\xbe\x10\xff\xe8Ab\xdd%nL\x89\x1a\xab\xdf!E\xb40\x00\x00\u07d4\x81t\x93\u035b\xc6#p*$\xa5o\x9f\x82\xe3\xfdH\xf3\xcd1\x89\x9eK#\xf1-L\xa0\x00\x00\u07d4\x81y\xc8\tp\x18,\u0177\xd8*M\xf0n\xa9M\xb6:%\xf3\x89'o%\x9d\xe6k\xf4\x00\x00\u07d4\x81z\xc3;\xd8\xf8GVsr\x95\x1fJ\x10\u05e9\x1c\xe3\xf40\x89\n\xd7\xc4\x06\xc6m\xc1\x80\x00\xe0\x94\x81\x8f\xfe'\x1f\u00d75e\xc3\x03\xf2\x13\xf6\xd2\u0689\x89~\xbd\x8a\x016\xe0SB\xfe\u1e40\x00\u07d4\x81\x97\x94\x81!s.c\xd9\xc1H\x19N\xca\xd4n0\xb7I\u0209\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x81\x9a\xf9\xa1\xc2s2\xb1\xc3i\xbb\xda\x1b=\xe1\xc6\xe93\xd6@\x89\x11\t\xe6T\xb9\x8fz\x00\x00\xe0\x94\x81\x9c\u06a506x\xef|\xecY\u050c\x82\x16:\xcc`\xb9R\x8a\x03\x13QT_y\x81l\x00\x00\u07d4\x81\x9e\xb4\x99\vZ\xbaUG\t=\xa1+k<\x10\x93\xdfmF\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x81\xa8\x81\x96\xfa\xc5\xf2<>\x12\xa6\x9d\xecK\x88\x0e\xb7\xd9s\x10\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x81\xbc\xcb\xff\x8fD4~\xb7\xfc\xa9['\xce|\x95$\x92\xaa\xad\x89\b@\xc1!e\xddx\x00\x00\u07d4\x81\xbdu\xab\xd8e\xe0\xc3\xf0J\vO\xdb\xcbt\xd3@\x82\xfb\xb7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x81\xc1\x8c*#\x8d\xdcL\xba#\n\a-\xd7\xdc\x10\x1eb\x02s\x89Hz\x9a0E9D\x00\x00\u07d4\x81\xc9\xe1\xae\xe2\xd36]S\xbc\xfd\u0356\xc7\xc58\xb0\xfd~\xec\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\x81\u03edv\t\x13\xd3\xc3\"\xfc\xc7{I\u00ae9\a\xe7On\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94\x81\xd6\x19\xffW&\xf2@_\x12\x90Lr\xeb\x1e$\xa0\xaa\xeeO\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x81\xef\u25aev\xc8`\xd1\xc5\xfb\xd3=G\xe8\u0399\x96\xd1W\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x81\xf8\xde,(=_\u052f\xbd\xa8]\xed\xf9v\x0e\xab\xbb\xb5r\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x82\f\x19)\x11\x96P[e\x05\x9d\x99\x14\xb7\t\v\xe1\u06c7\u0789\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\x82\x1c\xb5\xcd\x05\xc7\uf41f\xe1\xbe`s=\x89c\xd7`\xdcA\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x82\x1dy\x8a\xf1\x99\x89\u00ee[\x84\xa7\xa7(<\xd7\xfd\xa1\xfa\xbe\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x82\x1e\xb9\t\x94\xa2\xfb\xf9K\xdc23\x91\x02\x96\xf7o\x9b\xf6\xe7\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x82$\x9f\xe7\x0fa\u01b1o\x19\xa3$\x84\x0f\xdc\x02\x021\xbb\x02\x8a\x02\x036\xb0\x8a\x93c[\x00\x00\u07d4\x82(\xeb\xc0\x87H\x0f\xd6EG\xca(\x1f^\xac\xe3\x04\x14S\xb9\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94\x82)\u03b9\xf0\xd7\b9I\x8dD\xe6\xab\xed\x93\xc5\xca\x05\x9f]\x8a\x1a\x1c\x1b<\x98\x9a \x10\x00\x00\u07d4\x82.\xdf\xf66V:a\x06\xe5.\x9a%\x98\xf7\xe6\xd0\xef'\x82\x89\x01\xf4\xf9i=B\u04c0\x00\u07d4\x822\x19\xa2Yv\xbb*\xa4\xaf\x8b\xadA\xac5&\xb4\x936\x1f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x822\xd1\xf9t.\u07cd\xd9'\xda5;*\xe7\xb4\xcb\xceu\x92\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\x824\xf4c\u0444\x85P\x1f\x8f\x85\xac\xe4\x97,\x9bc-\xbc\u0309lk\x93[\x8b\xbd@\x00\x00\u07d4\x827htg7\xcem\xa3\x12\xd5>TSN\x10o\x96|\xf3\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x82;\xa7dr8\xd1\x13\xbc\xe9\x96JC\u0420\x98\x11\x8b\xfeM\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x82@t1(\x06\xdaGHCBf\xee\x00!@\u305a\u0089Q\xb1\u04c3\x92a\xac\x00\x00\u07d4\x82C\x8f\u04b3*\x9b\xddgKI\xd8\xcc_\xa2\xef\xf9x\x18G\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x82HW(\xd0\xe2\x81V7X\xc7Z\xb2~\xd9\u80a0\x00-\x89\a\xf8\b\xe9)\x1el\x00\x00\u07d4\x82K<\x19)]~\xf6\xfa\xa7\xf3t\xa4y\x84\x86\xa8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x82Q5\x8c\xa4\xe0`\u0775Y\xcaX\xbc\v\u077e\xb4\a\x02\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x82Q5\xb1\xa7\xfc\x16\x05aL\x8a\xa4\u042cm\xba\u040fH\x0e\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4\x82S\t\xa7\xd4]\x18\x12\xf5\x1en\x8d\xf5\xa7\xb9ol\x90\x88\x87\x89\x804\xf7\u0671f\xd4\x00\x00\u07d4\x82Z\u007fN\x10\x94\x9c\xb6\xf8\x96Bh\xf1\xfa_W\xe7\x12\xb4\u0109\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x82a\xfa#\f\x90\x1dC\xffW\x9fG\x80\u04d9\xf3\x1e`v\xbc\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x82b\x16\x9baXp\x13N\xb4\xacl_G\x1ck\xf2\xf7\x89\xfc\x89\x19\x12z\x13\x91\xea*\x00\x00\u07d4\x82c\xec\xe5\xd7\t\xe0\u05eeq\u0328h\xed7\xcd/\xef\x80{\x895\xab\x02\x8a\xc1T\xb8\x00\x00\xe0\x94\x82l\xe5y\x052\xe0T\x8ca\x02\xa3\r>\xac\x83k\xd68\x8f\x8a\x03\xcf\xc8.7\xe9\xa7@\x00\x00\u07d4\x82n\xb7\xcds\x19\xb8-\xd0z\x1f;@\x90q\xd9n9g\u007f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x82u1\xa6\u0141z\xe3_\x82\xb0\v\x97T\xfc\xf7LU\xe22\x89\xc3(\t>a\xee@\x00\x00\u0794\x82u\xcdhL6y\u0548}\x03fN3\x83E\xdc<\xdd\xe1\x88\xdbD\xe0I\xbb,\x00\x00\u07d4\x82\x84\x92;b\u62ff|+\x9f4\x14\xd1>\xf6\xc8\x12\xa9\x04\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\x82\x8b\xa6Q\u02d3\x0e\xd9xqV)\x9a=\xe4L\u040br\x12\x89Hz\x9a0E9D\x00\x00\u07d4\x82\xa1\\\xef\x1dl\x82`\xea\xf1Y\xea?\x01\x80\xd8g}\xce\x1c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x82\xa8\xb9kl\x9e\x13\xeb\xec\x1e\x9f\x18\xac\x02\xa6\x0e\xa8\x8aH\xff\x89lk\x8c@\x8es\xb3\x00\x00\u07d4\x82\xa8\u02ff\xdf\xf0+.8\xaeK\xbf\xca\x15\xf1\xf0\xe8;\x1a\xea\x89\x04\x9b\x99\x1c'\xefm\x80\x00\u07d4\x82\xe4F\x1e\xb9\xd8I\xf0\x04\x1c\x14\x04!\x9eBr\u0110\n\xb4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x82\xe5w\xb5\x15\xcb+\b`\xaa\xfe\x1c\xe0\x9aY\xe0\x9f\xe7\xd0@\x89 \x86\xac5\x10R`\x00\x00\u07d4\x82\xea\x01\xe3\xbf.\x83\x83nqpN\"\xa2q\x93w\xef\xd9\u00c9\xa4\xccy\x95c\u00c0\x00\x00\u07d4\x82\xf2\xe9\x91\xfd2L_]\x17v\x8e\x9fa3]\xb61\x9dl\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x82\xf3\x9b'X\xaeB'{\x86\u059fu\xe6(\xd9X\xeb\u02b0\x8a\bxg\x83&\xea\xc9\x00\x00\x00\xe0\x94\x82\xf8T\xc9\xc2\xf0\x87\xdf\xfa\x98Z\xc8 \x1ebl\xa5Fv\x86\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\x82\xffqo\xdf\x03>\xc7\xe9B\xc9\t\u0643\x18g\xb8\xb6\xe2\xef\x89a\t=|,m8\x00\x00\u07d4\x83\b\xed\n\xf7\xf8\xa3\xc1u\x1f\xaf\xc8w\xb5\xa4*\xf7\xd3X\x82\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x83\x1cD\xb3\b@G\x18K*\xd2\x18h\x06@\x907P\xc4]\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x83!\x05\x83\xc1jN\x1e\x1d\xac\x84\xeb\xd3~=\x0f|W\ub909lk\x93[\x8b\xbd@\x00\x00\u07d4\x83,T\x17k\xdfC\xd2\u027c\u05f8\b\xb8\x95V\xb8\x9c\xbf1\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x833\x16\x98]Gt+\xfe\xd4\x10`J\x91\x95<\x05\xfb\x12\xb0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x834vK{9zNW\x8fP6M`\xceD\x89\x9b\xff\x94\x89\x05\x03\xb2\x03\xe9\xfb\xa2\x00\x00\xe0\x94\x83;j\x8e\xc8\xda@\x81\x86\xac\x8a}*m\xd6\x15#\xe7\u0384\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\x83=?\xaeT*\xd5\xf8\xb5\f\xe1\x9b\xde+\xecW\x91\x80\u020c\x89\x12\xc1\xb6\xee\xd0=(\x00\x00\xe0\x94\x83=\xb4,\x14\x16<{\xe4\u02b8j\u0153\xe0bf\u0599\u054a$\xe4\r+iC\xef\x90\x00\x00\xe0\x94\x83V;\xc3d\ud060\xc6\xda;V\xffI\xbb\xf2g\x82z\x9c\x8a\x03\xab\x91\xd1{ \xdeP\x00\x00\u07d4\x83zd]\xc9\\IT\x9f\x89\x9cN\x8b\u03c7S$\xb2\xf5|\x89 \x8c9J\xf1\u0208\x00\x00\u07d4\x83\x8b\xd5e\xf9\x9f\xdeH\x05?y\x17\xfe3<\xf8J\xd5H\xab\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x83\x90\x8a\xa7G\x8am\x1c\x9b\x9b\x02\x81\x14\x8f\x8f\x9f$+\x9f\u0709lk\x93[\x8b\xbd@\x00\x00\u07d4\x83\x92\xe57vq5x\x01[\xffI@\xcfC\x84\x9d}\u02e1\x89\bM\xf05]V\x17\x00\x00\xe0\x94\x83\x97\xa1\xbcG\xac\xd6GA\x81Y\xb9\x9c\xeaW\xe1\xe6S-n\x8a\x01\xf1\x0f\xa8'\xb5P\xb4\x00\x00\u07d4\x83\x98\xe0~\xbc\xb4\xf7_\xf2\x11m\xe7|\x1c*\x99\xf3\x03\xa4\u03c9\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x83\xa3\x14\x883\xd9dI\x84\xf7\xc4u\xa7\x85\a\x16\ufd00\xff\x89\xb8Pz\x82\a( \x00\x00\u07d4\x83\xa4\x02C\x8e\x05\x19w=TH2k\xfba\xf8\xb2\f\xf5-\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d4\x83\xa9;[\xa4\x1b\xf8\x87 \xe4\x15y\f\xdc\vg\xb4\xaf4\u0109\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x83\xc2=\x8aP!$\xee\x15\x0f\b\xd7\x1d\xc6rt\x10\xa0\xf9\x01\x8a\a3\x1f;\xfef\x1b\x18\x00\x00\u07d4\x83\u0217\xa8Ki^\xeb\xe4fy\xf7\xda\x19\xd7vb\x1c&\x94\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x83\xd52\u04cdm\xee?`\xad\u018b\x93a3\u01e2\xa1\xb0\u0749\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x83\xdb\xf8\xa1(S\xb4\n\xc6\x19\x96\xf8\xbf\x1d\xc8\xfd\xba\xdd\xd3)\x894\x95tD\xb8@\xe8\x00\x00\u07d4\x83\xdb\xfd\x8e\xda\x01\xd0\u078e\x15\x8b\x16\u0413_\xc28\n]\u01c9 \x86\xac5\x10R`\x00\x00\u07d4\x83\xe4\x80U2|(\xb5\x93o\xd9\xf4D~s\xbd\xb2\xdd3v\x89\x90\xf54`\x8ar\x88\x00\x00\xe0\x94\x83\xfeZ\x1b2\x8b\xaeD\a\x11\xbe\xafj\xad`&\xed\xa6\xd2 \x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x84\x00\x8ar\xf8\x03o?\xeb\xa5B\xe3Px\xc0W\xf3*\x88%\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x84\x0e\xc8>\xa96!\xf04\xe7\xbb7b\xbb\x8e)\xde\xd4\xc4y\x89\x87\x86x2n\xac\x90\x00\x00\xe0\x94\x84\x11E\xb4H@\xc9F\xe2\x1d\xbc\x19\x02d\xb8\xe0\xd5\x02\x93i\x8a?\x87\bW\xa3\xe0\xe3\x80\x00\x00\u07d4\x84#!\a\x93+\x12\xe01\x86X5%\xce\x02:p>\xf8\u0649lk\x93[\x8b\xbd@\x00\x00\u07d4\x84$O\xc9ZiW\xed|\x15\x04\xe4\x9f0\xb8\xc3^\xcaKy\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x841'}{\xdd\x10E}\xc0\x17@\x8c\x8d\xbb\xbdAJ\x8d\xf3\x89\x02\"\xc8\xeb?\xf6d\x00\x00\u07d4\x847Z\xfb\xf5\x9b:\x1da\xa1\xbe2\xd0u\xe0\xe1ZO\xbc\xa5\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x84;\xd3P/E\xf8\xbcM\xa3p\xb3#\xbd\xac?\xcf_\x19\xa6\x89P\x03\x9dc\xd1\x1c\x90\x00\x00\u07d4\x84P34c\rw\xf7AG\xf6\x8b.\bf\x13\xc8\xf1\xad\xe9\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\x84R\x03u\x0fqH\xa9\xaa&)!\xe8mC\xbfd\x19t\xfd\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x84a\xec\u0126\xa4^\xb1\xa5\xb9G\xfb\x86\xb8\x80i\xb9\x1f\xcdo\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x84g^\x91wrmE\xea\xa4k9\x92\xa3@\xba\u007fq\f\x95\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x84hl{\xadv,T\xb6g\u055f\x90\x94<\xd1M\x11z&\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x84\x89\xf6\xad\x1d\x9a\x94\xa2\x97x\x91V\x89\x9d\xb6AT\xf1\u06f5\x89\x13t\a\xc0<\x8c&\x80\x00\u07d4\x84\x8c\x99Jy\x00?\xe7\xb7\xc2l\xc62\x12\xe1\xfc/\x9c\x19\xeb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x84\x8f\xbd)\xd6|\xf4\xa0\x13\xcb\x02\xa4\xb1v\xef$N\x9e\u6349\x01\x17*ck\xbd\xc2\x00\x00\u07d4\x84\x94\x9d\xbaU\x9ac\xbf\xc8E\xde\xd0n\x9f-\x9b\u007f\x11\xef$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x84\x9a\xb8\a\x90\xb2\x8f\xf1\xff\u05ba9N\xfctc\x10\\6\xf7\x89\x01\xe0+\xe4\xael\x84\x00\x00\u07d4\x84\x9b\x11oYc\x01\xc5\u063bb\xe0\xe9z\x82H\x12n9\xf3\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x84\xa7L\xee\xcf\xf6\\\xb9;/\x94\x9dw>\xf1\xad\u007f\xb4\xa2E\x89\x05\n\x9bDF\x85\xc7\x00\x00\u07d4\x84\xaa\xc7\xfa\x19\u007f\xf8\\0\xe0;zS\x82\xb9W\xf4\x1f:\xfb\x89\b\x8b#\xac\xff\u0650\x00\x00\u07d4\x84\xaf\x1b\x15sB\xd5Ch&\r\x17\x87b0\xa54\xb5K\x0e\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\x84\xb0\xeek\xb87\u04e4\xc4\xc5\x01\x1c:\"\x8c\x0e\u06b4cJ\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x84\xb4\xb7Nf#\xba\x9d\x15\x83\xe0\u03feId?\x168AI\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x84\xb6\xb6\xad\xbe/[>-h,f\xaf\x1b\u0110S@\xc3\xed\x89!\x92\xf8\xd2\"\x15\x00\x80\x00\xe0\x94\x84\xb9\x1e.)\x02\xd0^+Y\x1bA\b;\u05fe\xb2\xd5,t\x8a\x02\x15\xe5\x12\x8bE\x04d\x80\x00\u07d4\x84\xbc\xbf\"\xc0\x96\a\xac\x844\x1d.\xdb\xc0;\xfb\x179\xd7D\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x84\xbf\xce\xf0I\x1a\n\xe0iK7\u03ac\x02E\x84\xf2\xaa\x04g\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x84\xcb}\xa0P-\xf4\\\xf5a\x81{\xbd#b\xf4Q\xbe\x02\u0689Hz\x9a0E9D\x00\x00\u07d4\x84\xccxx\xda`_\xdb\x01\x9f\xab\x9bL\xcf\xc1Wp\x9c\u0765\x89Hy\x85\x13\xaf\x04\xc9\x00\x00\u07d4\x84\xdb\x14Y\xbb\x00\x81.\xa6~\xcb=\xc1\x89\xb7!\x87\xd9\xc5\x01\x89\b\x11\xb8\xfb\u0685\xab\x80\x00\u07d4\x84\u9516\x80\xbe\xcehA\xb9\xa7\xe5%\r\b\xac\xd8}\x16\u0349\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x84\xe9\u03c1f\xc3j\xbf\xa4\x90S\xb7\xa1\xad@6 &\x81\xef\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x84\xec\x06\xf2G\x00\xfeBAL\xb9\x89|\x15L\x88\xde/a2\x89Hz\x9a0E9D\x00\x00\xe0\x94\x84\xf5\"\xf0R\x0e\xbaR\xdd\x18\xad!\xfaK\x82\x9f+\x89\u02d7\x8a\x01\fQ\x06\xd5\x13O\x13\x00\x00\u07d4\x85\v\x9d\xb1\x8f\xf8K\xf0\xc7\xdaI\xea7\x81\xd9 \x90\xad~d\x89\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\u07d4\x85\x10\xee\x93O\f\xbc\x90\x0e\x10\a\xeb8\xa2\x1e*Q\x01\xb8\xb2\x89\x05\xbf\v\xa6cOh\x00\x00\u07d4\x85\x16\xfc\xafw\u0213\x97\x0f\xcd\x1a\x95\x8b\xa9\xa0\x0eI\x04@\x19\x89\n\xa3\xeb\x16\x91\xbc\xe5\x80\x00\u07d4\x85\x1a\xa9\x1c\x82\xf4/\xad]\xd8\xe8\xbb^\xa6\x9c\x8f:Yw\u0449\b\x0eV\x1f%xy\x80\x00\u07d4\x85\x1c\rb\xbeF5\xd4w~\x805\xe3~K\xa8Q|a2\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x85\x1d\u00ca\xdbE\x93r\x9av\xf3:\x86\x16\u06b6\xf5\xf5\x9aw\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x852I\b\x97\xbb\xb4\u038b\u007fk\x83~L\xba\x84\x8f\xbe\x99v\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x85>j\xba\xf4Di\xc7/\x15\x1dN\"8\x19\xac\xedN7(\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x85F\x91\xceqO2\\\xedU\xceY(\u039b\xa1/\xac\u0478\x89\xedp\xb5\xe9\xc3\xf2\xf0\x00\x00\u07d4\x85L\fF\x9c$k\x83\xb5\u0473\xec\xa4C\xb3\x9a\xf5\xee\x12\x8a\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\x85]\x9a\xef,9\xc6#\r\t\u025e\xf6II\x89\xab\u61c5\x89\b\xbaR\xe6\xfcE\xe4\x00\x00\u07d4\x85c\u0113a\xb6%\xe7hw\x1c\x96\x15\x1d\xbf\xbd\x1c\x90iv\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x85fa\t\x01\xaa\xce8\xb82D\xf3\xa9\xc810jg\xb9\u0709\xb0\x82\x13\xbc\xf8\xff\xe0\x00\x00\xe0\x94\x85j\xa2<\x82\xd7![\xec\x8dW\xf6\n\xd7^\xf1O\xa3_D\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x85nZ\xb3\xf6L\x9a\xb5k\x00\x93\x93\xb0\x16d\xfc\x03$\x05\x0e\x89a\t=|,m8\x00\x00\u07d4\x85n\xb2\x04$\x1a\x87\x83\x0f\xb2)\x03\x13C\xdc0\x85OX\x1a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x85s,\x06\\\xbdd\x11\x99A\xae\xd40\xacYg\vlQ\u0109'\xa5sb\xab\n\x0e\x80\x00\xe0\x94\x85x\xe1\x02\x12\xca\x14\xff\a2\xa8$\x1e7F}\xb8V2\xa9\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x85y\xda\xdf\x1a9Z4q\xe2\vov=\x9a\x0f\xf1\x9a?o\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x85\u007f\x10\v\x1aY0\"^\xfc~\x90 \u05c3'\xb4\x1c\x02\u02c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x85\x94mV\xa4\xd3q\xa93hS\x96\x90\xb6\x0e\xc8%\x10tT\x89]\u0212\xaa\x111\xc8\x00\x00\xe0\x94\x85\x99\xcb\u0566\xa9\xdc\u0539f\xbe8}iw]\xa5\xe3C'\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x86$_Yf\x91\t>\xce?=<\xa2&>\xac\xe8\x19A\u0649\n1\x06+\xee\xedp\x00\x00\u07d4\x86%i!\x1e\x8cc'\xb5A^:g\xe5s\x8b\x15\xba\xafn\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\x86)}s\x0f\xe0\xf7\xa9\xee$\xe0\x8f\xb1\b{1\xad\xb3\x06\xa7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x86D\xcc(\x1b\xe32\xcc\xce\xd3m\xa4\x83\xfb*\aF\u067a.\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x86I\x9a\x12(\xff-~\xe3\au\x93dPo\x8e\x8c\x83\a\xa5\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x86K\xecPi\xf8U\xa4\xfdX\x92\xa6\xc4I\x1d\xb0|\x88\xff|\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x86W\n\xb2Y\u0271\xc3,\x97) /w\xf5\x90\xc0}\xd6\x12\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x86c\xa2A\xa0\xa8\x9ep\xe1\x82\xc8E\xe2\x10\\\x8a\xd7&K\u03ca\x03#\xb1=\x83\x98\xf3#\x80\x00\u07d4\x86g\xfa\x11U\xfe\xd72\u03f8\u0725\xa0\xd7e\xce\r\a\x05\xed\x89\x04n\xc9e\u00d3\xb1\x00\x00\u07d4\x86h\xaf\x86\x8a\x1e\x98\x88_\x93\u007f&\x15\xde\xd6u\x18\x04\xeb-\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x86t\nFd\x8e\x84Z]\x96F\x1b\x18\t\x1f\xf5{\xe8\xa1o\x8a\x14\xc0\x974\x85\xbf9@\x00\x00\xe0\x94\x86~\xbaVt\x8aY\x045\r,\xa2\xa5\u039c\xa0\vg\n\x9b\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x86\x80dt\xc3X\x04}\x94\x06\xe6\xa0\u007f@\x94[\xc82\x8eg\x8a\x01u.\xb0\xf7\x01=\x10\x00\x00\u07d4\x86\x88=T\xcd9\x15\xe5I\tU0\xf9\xab\x18\x05\xe8\xc5C-\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x86\x8c#\xbe\x874f\xd4\xc7L\"\n\x19\xb2E\xd1x~\x80\u007f\x89J\x13\xbb\xbd\x92\u020e\x80\x00\xe0\x94\x86\x92O\xb2\x11\xaa\xd2<\xf5\xce`\x0e\n\xae\x80c\x96D@\x87\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x86\x93\u9e3e\x94B^\xefyi\xbci\xf9\xd4/|\xadg\x1e\x8967\tlK\xcci\x00\x00\xe0\x94\x86\x9f\x1a\xa3\x0eDU\xbe\xb1\x82 \x91\xde\\\xad\xecy\xa8\xf9F\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x86\xa1\xea\xde\xeb0F\x13E\xd9\xefk\xd0R\x16\xfa$|\r\f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x86\xa5\xf8%\x9e\u0570\x9e\x18\x8c\xe3F\xee\x92\xd3J\xa5\u0753\xfa\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x86\xb7\xbdV<\uad86\xf9bD\xf9\xdd\xc0*\u05f0\xb1K\u008a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x86\u008bVx\xaf7\xd7'\xec\x05\xe4Dw\x90\xf1_q\xf2\xea\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x86\xc4\xce\x06\u066c\x18[\xb1H\xd9o{z\xbes\xf4A\x00m\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x86\xc8\xd0\u0642\xb59\xf4\x8f\x980\xf9\x89\x1f\x9d`z\x94&Y\x8a\x02\xce\xd3wa\x82O\xb0\x00\x00\u07d4\x86\xc94\xe3\x8eS\xbe;3\xf2t\xd0S\x9c\xfc\xa1Y\xa4\xd0\u04494\x95tD\xb8@\xe8\x00\x00\xe0\x94\x86\xca\x01E\x95~k\r\xfe6\x87_\xbez\r\xecU\xe1z(\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x86\u02af\xac\xf3*\xa01|\x03*\xc3k\xab\xed\x97G\x91\xdc\x03\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x86\u0377\xe5\x1a\xc4Gr\xbe6\x90\xf6\x1d\x0eYvn\x8b\xfc\x18\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x86\xdfs\xbd7\u007f,\t\xdec\xc4]g\xf2\x83\xea\xef\xa0\xf4\xab\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x86\xe3\xfe\x86\xe9=\xa4\x86\xb1Bf\xea\xdf\x05l\xbf\xa4\xd9\x14C\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x86\xe8g\x0e'Y\x8e\xa0\x9c8\x99\xabw\x11\u04f9\xfe\x90\x1c\x17\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x86\xefd&!\x19I\xcc7\xf4\xc7^xP6\x9d\f\xf5\xf4y\x8a\x02\xd6_2\xea\x04Z\xf6\x00\x00\u07d4\x86\xf0]\x19\x06>\x93i\xc6\x00N\xb3\xf1#\x94:|\xffN\xab\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x86\xf2>\x9c\n\xaf\u01cb\x9c@M\xcd`3\x9a\x92[\xff\xa2f\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x86\xf4\xf4\n\u0644\xfb\xb8\t3\xaebn\x0eB\xf93?\xddA\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x86\xf9\\[\x11\xa2\x93\x94\x0e5\xc0\xb8\x98\u0637_\b\xaa\xb0m\x8a\x06D\xe3\xe8u\xfc\xcft\x00\x00\u07d4\x86\xff\xf2 \xe5\x93\x05\xc0\x9fH8`\xd6\xf9N\x96\xfb\xe3/W\x89\x02S[j\xb4\xc0B\x00\x00\u07d4\x87\a\x96\xab\xc0\u06c4\xaf\x82\xdaR\xa0\xedhsM\xe7\xe66\xf5\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x87\x0f\x15\xe5\u07cb\x0e\xab\xd0%iSz\x8e\xf9;Vx\\B\x89\x15\b\x94\xe8I\xb3\x90\x00\x00\u07d4\x87\x181`\xd1r\xd2\xe0\x84\xd3'\xb8k\xcb|\x1d\x8eg\x84\xef\x89\xd8\xd8X?\xa2\xd5/\x00\x00\xe0\x94\x87\x1b\x8a\x8bQ\u07a1\x98\x9aY!\xf1>\xc1\xa9U\xa5\x15\xadG\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x87%\xe8\xc7S\xb3\xac\xbf\u0725_I\x13\\3\x91\x99\x10`)\n\xa7\xf6\u0338\xf8Zx\u06c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x87Pa\xee\x12\xe8 \x04\x1a\x01\x94,\xb0\xe6[\xb4'\xb0\x00`\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\x87XJ?a;\xd4\xfa\xc7L\x1ex\v\x86\xd6\xca\xeb\x89\f\xb2\x89\\(=A\x03\x94\x10\x00\x00\u07d4\x87d\xd0'\"\x00\t\x96\xec\xd4u\xb43)\x8e\x9fT\v\x05\xbf\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x87l?!\x8bGv\xdf<\xa9\xdb\xfb'\r\xe1R\xd9N\xd2R\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x87u\xa6\x10\xc5\x02\xb9\xf1\xe6\xadL\xda\u06cc\xe2\x9b\xffu\xf6\xe4\x89 \x86\xac5\x10R`\x00\x00\u07d4\x87vN6w\xee\xf6\x04\xcb\u015a\xed$\xab\xdcVk\t\xfc%\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94\x87\x87\xd1&w\xa5\xec)\x1eW\xe3\x1f\xfb\xfa\xd1\x05\xc32K\x87\x8a\x02\xa2N\xb52\b\xf3\x12\x80\x00\u07d4\x87\x94\xbfG\xd5E@\xec\xe5\xc7\"7\xa1\xff\xb5\x11\u0777Gb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x87\xa5>\xa3\x9fY\xa3[\xad\xa85%!dU\x94\xa1\xa7\x14\u02c9g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x87\xa7\xc5\b\xefqX-\u0665Cr\xf8\x9c\xb0\x1f%/\xb1\x80\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x87\xaf%\xd3\xf6\xf8\xee\xa1S\x13\xd5\xfeEW\xe8\x10\xc5$\xc0\x83\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\x87\xb1\x0f\x9c(\x00\x98\x17\x9a+v\xe9\u0390\xbea\xfc\x84M\r\x89Hz\x9a0E9D\x00\x00\u07d4\x87\xbf|\xd5\u0629)\xe1\u01c5\xf9\xe5D\x91\x06\xac#$c\u0249\x047\xb1\x1f\xccEd\x00\x00\u07d4\x87\u0118\x17\t4\xb8#=\x1a\xd1\xe7i1}\\G_/@\x897\b\xba\xed=h\x90\x00\x00\u07d4\x87\xcf6\xad\x03\xc9\xea\xe9\x05:\xbbRB\u0791\x17\xbb\x0f*\v\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x87\u05ec\x06S\xcc\xc6z\xa9\xc3F\x9e\xefCR\x19?}\xbb\x86\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\xe0\x94\x87\xe3\x06+#!\xe9\u07f0\x87\\\u311c\x9b.5\"\xd5\n\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x87\xe6\x03N\xcf#\xf8\xb5c\x9d_\x0e\xa7\n\"S\x8a\x92\x04#\x89\x11\xc7\xea\x16.x \x00\x00\u07d4\x87\xefm\x8bj|\xbf\x9b\\\x8c\x97\xf6~\xe2\xad\u00a7;?w\x89\n\xdd\x1b\xd2<\x00L\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x88F\x92\x8dh2\x89\xa2\xd1\x1d\xf8\xdbz\x94t\x98\x8e\xf0\x13H\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x88I\x80\xebEe\xc1\x04\x83\x17\xa8\xf4\u007f\u06f4a\x96[\u4049\xd8\xd6\x11\x9a\x81F\x05\x00\x00\xe0\x94\x88Jz9\u0411n\x05\xf1\xc2B\xdfU`\u007f7\u07cc_\u068a\x04\xf4\x84<\x15|\x8c\xa0\x00\x00\u07d4\x88T\x93\xbd\xa3j\x042\x97eF\xc1\xdd\xceq\xc3\xf4W\x00!\x89\v\xbfQ\r\xdf\xcb&\x00\x00\xe0\x94\x88`\x9e\nF[n\x99\xfc\xe9\a\x16mW\xe9\xda\b\x14\xf5\u020a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x88m\n\x9e\x17\xc9\xc0\x95\xaf.\xa25\x8b\x89\xecpR\x12\ue509\x01\x84\x93\xfb\xa6N\xf0\x00\x00\u07d4\x88y~Xg^\xd5\xccL\x19\x98\a\x83\xdb\xd0\xc9V\bQS\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x88|\xacA\xcdpo3E\xf2\xd3J\xc3N\x01u*nY\t\x89 F\\\ue7617\x00\x00\u07d4\x88\x88\x8aW\xbd\x96\x87\xcb\xf9P\xae\xea\u03d7@\xdc\xc4\xd1\xefY\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u0794\x88\x89D\x83\x16\xcc\xf1N\xd8m\xf8\xe2\xf4x\xdcc\xc43\x83@\x88\xd2\xf1?w\x89\xf0\x00\x00\u07d4\x88\x8c\x16\x14I3\x19|\xac&PM\xd7n\x06\xfdf\x00\u01c9\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x88\x8e\x94\x91p\x83\xd1R +S\x1699\x86\x9d'\x11u\xb4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x88\x90\x87\xf6o\xf2\x84\xf8\xb5\xef\xbd)I;pg3\xab\x14G\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\x88\x95\xebrb&\xed\xc3\xf7\x8c\u01a5\x15\a{2\x96\xfd\xb9^\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x88\x97Z_\x1e\xf2R\x8c0\v\x83\xc0\xc6\a\xb8\xe8}\u0593\x15\x89\x04\x86\u02d7\x99\x19\x1e\x00\x00\u07d4\x88\x9d\xa4\x0f\xb1\xb6\x0f\x9e\xa9\xbdzE>XL\xf7\xb1\xb4\xd9\xf7\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x88\x9d\xa6b\xebJ\n*\x06\x9d+\xc2K\x05\xb4\xee.\x92\xc4\x1b\x89Z,\x8cTV\xc9\xf2\x80\x00\u07d4\x88\xa1\"\xa28,R91\xfbQ\xa0\u032d;\xeb[rY\u00c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x88\xa2\x15D0\xc0\xe4\x11G\xd3\xc1\xfe\u3cf0\x06\xf8Q\xed\xbd\x8965f3\xeb\xd8\xea\x00\x00\u07d4\x88\xb2\x17\u0337\x86\xa2T\xcfM\xc5\u007f]\x9a\xc3\xc4U\xa3\x04\x83\x892$\xf4'#\xd4T\x00\x00\xe0\x94\x88\xbcC\x01.\xdb\x0e\xa9\xf0b\xacCxC%\n9\xb7\x8f\xbb\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x88\xc2Qj|\xdb\t\xa6'mr\x97\xd3\x0fZM\xb1\xe8K\x86\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x88\xc3ad\rki7;\b\x1c\xe0\xc43\xbdY\x02\x87\xd5\xec\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\x88\xd5A\xc8@\xceC\xce\xfb\xafm\x19\xafk\x98Y\xb5s\xc1E\x89\t79SM(h\x00\x00\u07d4\x88\xde\x13\xb0\x991\x87|\x91\rY1e\xc3d\u0221d\x1b\u04c9\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x88\xde\u017d?N\xba-\x18\xb8\xaa\xce\xfa{r\x15H\xc3\x19\xba\x89JD\x91\xbdm\xcd(\x00\x00\u07d4\x88\xe6\xf9\xb2G\xf9\x88\xf6\xc0\xfc\x14\xc5o\x1d\xe5>\u019dC\u0309\x05k\xc7^-c\x10\x00\x00\u07d4\x88\xee\u007f\x0e\xfc\x8fw\x8ckh~\xc3+\xe9\xe7\xd6\xf0 \xb6t\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x88\xf1\x04_\x19\xf2\xd3\x19\x18\x16\xb1\xdf\x18\xbbn\x145\xad\x1b8\x89\r\x02\xabHl\xed\xc0\x00\x00\xe0\x94\x89\x00\x9e\a\xe3\xfahc\xa7x\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x89Wr~r\xcfb\x90 \xf4\xe0^\xdfy\x9a\xa7E\x80b\u0409wC\"\x17\xe6\x83`\x00\x00\u07d4\x89]iN\x88\v\x13\xcc\u0404\x8a\x86\xc5\xceA\x1f\x88Gk\xbf\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4\x89^\xc5TVD\u0dc30\xff\xfa\xb8\xdd\xea\xc9\xe83\x15l\x89 \x86\xac5\x10R`\x00\x00\u07d4\x89`\tRj,{\f\t\xa6\xf6:\x80\xbd\U0009d707\u079c\x89\xbb\xb8k\x82#\xed\xeb\x00\x00\u07d4\x89g\u05f9\xbd\xb7\xb4\xae\xd2.e\xa1]\xc8\x03\xcbz!?\x10\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x89n3\\\xa4z\xf5yb\xfa\x0fM\xbf>E\xe6\x88\u02e5\x84\x89J/\xc0\xab`R\x12\x00\x00\u07d4\x89s\xae\xfd^\xfa\xee\x96\t]\x9e(\x8fj\x04l\x977KC\x89\a\xa4\u0120\xf32\x14\x00\x00\u07d4\x89\x8cr\xddseX\xef\x9eK\xe9\xfd\xc3O\xefT\xd7\xfc~\b\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x89\x9b<$\x9f\fK\x81\xdfu\xd2\x12\x00M=m\x95/\xd2#\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x89\xab\x13\xee&mw\x9c5\xe8\xbb\x04\u034a\x90\xcc!\x03\xa9[\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4\x89\xc43\xd6\x01\xfa\xd7\x14\xdaci0\x8f\xd2l\x1d\u0254+\xbf\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x89\xd7[\x8e\b1\xe4o\x80\xbc\x17A\x88\x18N\x00o\xde\x0e\xae\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x89\u3d5a\x15\x86G7\u0513\xc1\xd2<\xc5=\xbf\x8d\xcb\x13b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x89\xfc\x8eM8k\r\v\xb4\xa7\a\xed\xf3\xbdV\r\xf1\xad\x8fN\x89\xa00\xdc\xeb\xbd/L\x00\x00\u07d4\x89\xfe\xe3\r\x17(\xd9l\xec\xc1\u06b3\xda.w\x1a\xfb\u03eaA\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\x8a\x1c\u016c\x11\x1cI\xbf\xcf\xd8H\xf3}\xd7h\xaae\u0208\x02\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x8a \xe5\xb5\xce\xe7\xcd\x1fU\x15\xba\xce;\xf4\xf7\u007f\xfd\xe5\xcc\a\x89\x04V9\x18$O@\x00\x00\xe0\x94\x8a!}\xb3\x8b\xc3_!_\xd9)\x06\xbeBCo\xe7\xe6\xed\x19\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x8a$:\n\x9f\xeaI\xb89TwE\xff-\x11\xaf?K\x05\"\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\x8a$}\x18e\x10\x80\x9fq\xcf\xfcEYG\x1c9\x10\x85\x81!\x89a\t=|,m8\x00\x00\u07d4\x8a4p(-^**\xef\u05e7P\x94\xc8\"\xc4\xf5\xae\uf289\r(\xbc`dx\xa5\x80\x00\u07d4\x8a6\x86\x9a\xd4x\x99|\xbfm\x89$\xd2\n<\x80\x18\xe9\x85[\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x8aC\x14\xfba\u0353\x8f\xc3>\x15\xe8\x16\xb1\x13\U000ac267\xfb\x89\x17vNz\xede\x10\x00\x00\u07d4\x8aOJ\u007fR\xa3U\xba\x10_\xca r\xd3\x06_\xc8\xf7\x94K\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x8aX1(,\xe1Jezs\r\xc1\x88&\xf7\xf9\xb9\x9d\xb9h\x89\uaf8a[A\xc16\x00\x00\u07d4\x8a_\xb7W\x93\xd0C\xf1\xbc\xd48\x85\xe07\xbd0\xa5(\xc9'\x89\x13Snm.\x9a\xc2\x00\x00\u07d4\x8af\xab\xbc-0\xce!\xa83\xb0\u06ceV\x1dQ\x05\xe0\xa7,\x89%\xf1\xde\\v\xac\xdf\x00\x00\u07d4\x8atl]g\x06G\x11\xbf\xcah[\x95\xa4\xfe)\x1a'\x02\x8e\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x8ax\n\xb8z\x91E\xfe\x10\xed`\xfaGjt\n\xf4\u02b1\u0489\x12\x1b.^ddx\x00\x00\u07d4\x8az\x06\xbe\x19\x9a:X\x01\x9d\x84j\xc9\xcb\xd4\xd9]\xd7W\u0789\xa2\xa4#\x94BV\xf4\x00\x00\u07d4\x8a\x81\x01\x14\xb2\x02]\xb9\xfb\xb5\x00\x99\xa6\xe0\u02de.\xfak\u0709g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x8a\x86\xe4\xa5\x1c\x01;\x1f\xb4\xc7k\xcf0f|x\xd5.\xed\xef\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8a\x9e\u029cZ\xba\x8e\x13\x9f\x80\x03\xed\xf1\x16:\xfbp\xaa:\xa9\x89#\xc7W\a+\x8d\xd0\x00\x00\u07d4\x8a\xb89\xae\xaf*\xd3|\xb7\x8b\xac\xbb\xb63\xbc\xc5\xc0\x99\xdcF\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8a\u021b\u06780\x1ek\x06w\xfa%\xfc\xf0\xf5\x8f\f\u01f6\x11\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x8a\xdcS\xef\x8c\x18\xed0Qx]\x88\xe9\x96\xf3\xe4\xb2\x0e\xcdQ\x8a\b\xe4\xd3\x16\x82v\x86@\x00\x00\u07d4\x8a\xe6\xf8\vp\xe1\xf2<\x91\xfb\u0569f\xb0\xe4\x99\xd9]\xf82\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\x8a\xe9\uf30a\x8a\u07e6\xaby\x8a\xb2\xcd\xc4\x05\b*\x1b\xbbp\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8a\xf6&\xa5\xf3'\xd7Pe\x89\xee\xb7\x01\x0f\xf9\xc9D` \u0489K\xe4\xe7&{j\xe0\x00\x00\xe0\x94\x8b\x01\xda4\xd4p\xc1\xd1\x15\xac\xf4\xd8\x11\xe1\x01\xdb\x1e\x14\xec\xc7\xd3\"\xc7+\x8c\x04s\x89\x18\xb2j1>\x8a\xe9\x00\x00\xe0\x94\x8bH\xe1\x9d9\xdd5\xb6nn\x1b\xb6\xb9\xc6W\xcb,\xf5\x9d\x04\x8a\x03\xc7U\xac\x9c\x02J\x01\x80\x00\xe0\x94\x8bP^(q\xf7\u07b7\xa68\x95 \x8e\x82'\u072a\x1b\xff\x05\x8a\f\xf6\x8e\xfc0\x8dy\xbc\x00\x00\u07d4\x8bW\xb2\xbc\x83\u030dM\xe31 N\x89?/;\x1d\xb1\a\x9a\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x8b\\\x91K\x12\x8b\xf1i\\\b\x89#\xfaF~y\x11\xf3Q\xfa\x89\x05V\xf6L\x1f\xe7\xfa\x00\x00\xe0\x94\x8b_)\xcc/\xaa&,\xde\xf3\x0e\xf5T\xf5\x0e\xb4\x88\x14n\xac\x8a\x01;hp\\\x97 \x81\x00\x00\u07d4\x8bpV\xf6\xab\xf3\xb1\x18\xd0&\xe9D\xd5\xc0sC<\xa4Q\u05c965\xc6 G9\u0640\x00\u07d4\x8bqE\"\xfa(9b\x04p\xed\xcf\fD\x01\xb7\x13f=\xf1\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x8bt\xa7\xcb\x1b\xb8\u014f\xce&tf\xa3\x03X\xad\xafR\u007fa\x8a\x02\xe2WxN%\xb4P\x00\x00\u07d4\x8b~\x9fo\x05\xf7\xe3dv\xa1n>q\x00\xc9\x03\x1c\xf4\x04\xaf\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8b\x81\x15ni\x869\x94<\x01\xa7Rr\xad=5\x85\x1a\xb2\x82\x89\x12\xb3\x16_e\xd3\xe5\x00\x00\u07d4\x8b\x95w\x92\x00S\xb1\xa0\x01\x890M\x88\x80\x10\xd9\xef,\xb4\xbf\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x8b\x98A\x86.w\xfb\xbe\x91\x94p\x93U\x83\xa9<\xf0'\xe4P\x89llS4B\u007f\x1f\x00\x00\u07d4\x8b\x99}\xbc\a\x8a\xd0)a5]\xa0\xa1Y\xf2\x92~\xd4=d\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94\x8b\x9f\xda}\x98\x1f\xe9\xd6B\x87\xf8\\\x94\xd8?\x90t\x84\x9f\u030a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\x8b\xb0!/2\x95\xe0)\u02b1\xd9a\xb0A3\xa1\x80\x9e{\x91\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8b\xbe\xac\xfc)\xcf\xe94\x02\xdb\xd6j\x1a\xcbvv\x85c7\xb9;\xf0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8b\xf3s\xd0v\x81L\xbcW\xe1\xc6\xd1j\x82\u017e\x13\xc7=7\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x8c\x10#\xfd\xe1WM\xb8\xbbT\xf1s\x96p\x15|\xa4}\xa6R\x8a\x01y\u03da\u00e1\xb1w\x00\x00\u07d4\x8c\x1f\xbe_\n\xea5\x9cZ\xa1\xfa\b\u0209T\x12\u028e\x05\xa6\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8c\"B`U\xb7o\x11\xf0\xa2\xde\x1a\u007f\x81\x9aa\x96\x85\xfe`\x89kV\x05\x15\x82\xa9p\x00\x00\u07d4\x8c+}\x8b`\x8d(\xb7\u007f\\\xaa\x9c\xd6E$*\x82>L\u0649b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\x8c/\xbe\ue3ac\xc5\xc5\xd7|\x16\xab\xd4b\ue701E\xf3K\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\x8c:\x9e\xe7\x1fr\x9f#l\xba8g\xb4\u05dd\x8c\xee\xe2]\xbc\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x8cP\xaa*\x92\x12\xbc\xdeVA\x8a\xe2a\xf0\xb3^z\x9d\xbb\x82\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x8cT\xc7\xf8\xb9\x89nu\xd7\xd5\xf5\xc7`%\x86\x99\x95qB\xad\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x8c]\x16\xede\xe3\xed~\x8b\x96\u0297+\xc8as\xe3P\v\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8cj\xa8\x82\xee2,\xa8HW\x8c\x06\xcb\x0f\xa9\x11\xd3`\x83\x05\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\x8cj\xe7\xa0Z\x1d\xe5u\x82\xae'h Bv\xc0\xffG\xed\x03\x8a,\v\xb3\xdd0\xc4\xe2\x00\x00\x00\u07d4\x8co\x9fN[z\xe2v\xbfXI{\u05ff*}%$_d\x89\x93\xfe\\W\xd7\x10h\x00\x00\u07d4\x8cu\x95n\x8f\xedP\xf5\xa7\xdd|\xfd'\xda \x0fgF\xae\xa6\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8c|\xb4\xe4\x8b%\x03\x1a\xa1\xc4\xf9)%\xd61\xa8\xc3\xed\xc7a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8c\u007f\xa5\xca\xe8/\xed\xb6\x9a\xb1\x89\xd3\xff'\xae \x92\x93\xfb\x93\x89\x15\xaf\x88\r\x8c\u06c3\x00\x00\xe0\x94\x8c\x81A\x0e\xa85L\xc5\xc6\\A\xbe\x8b\xd5\xdes<\v\x11\x1d\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\x8c\x83\xd4$\xa3\xcf$\xd5\x1f\x01\x92=\xd5J\x18\u05b6\xfe\xde{\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8c\x90\n\x826\xb0\x8c+e@]9\xd7_ \x06*ua\xfd\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4\x8c\x93\xc3\xc6\u06dd7q}\xe1e\u00e1\xb4\xfeQ\x95,\b\u0789\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x8c\x99\x95\x91\xfdr\xefq\x11\xef\xcaz\x9e\x97\xa25k;\x00\n\x89\xddd\xe2\xaa\ngP\x00\x00\u07d4\x8c\xa6\x98\x97F\xb0n2\xe2Hta\xb1\u0399j':\xcf\u05c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x8c\xb3\xaa?\xcd!(T\xd7W\x8f\xcc0\xfd\xed\xe6t*1*\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x8c\xc0\xd7\xc0\x16\xfaz\xa9P\x11J\xa1\xdb\tH\x82\xed\xa2t\xea\x89\b\xa9\xab\xa5W\xe3l\x00\x00\u07d4\x8c\xc6R\xdd\x13\xe7\xfe\x14\u06bb\xb3m]2\r\xb9\xff\xee\x8aT\x89a\t=|,m8\x00\x00\u07d4\x8c\u02bf%\a\u007f:\xa4\x15E4MS\xbe\x1b+\x9c3\x90\x00\x89[\xe8f\xc5b\xc5D\x00\x00\u07d4\x8c\xcf:\xa2\x1a\xb7BWj\xd8\xc4\"\xf7\x1b\xb1\x88Y\x1d\ua28965\u026d\xc5\u07a0\x00\x00\u07d4\x8c\xd0\xcd\"\xe6 \xed\xa7\x9c\x04a\xe8\x96\xc9\xd1b)\x12K_z\xfb\xec\x89\a?u\u0460\x85\xba\x00\x00\u07d4\x8c\xe2/\x9f\xa3rD\x9aB\x06\x10\xb4z\xe0\xc8\xd5eH\x122\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x8c\u451d\x8a\x16T-B<\x17\x98Ng9\xfar\u03b1w\x8a\x05K@Y&\xf4\xa6=\x80\x00\u07d4\x8c\xe5\xe3\xb5\xf5\x91\xd5\uc8ca\xbf\"\x8f.<5\x13K\xda\xc0\x89}\xc3[\x84\x89|8\x00\x00\xe0\x94\x8c\xee8\xd6YW\x88\xa5n?\xb9F4\xb3\xff\xe1\xfb\xdb&\u058a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x8c\xee\xa1^\xec;\xda\xd8\x02?\x98\xec\xf2[+\x8f\xef'\xdb)\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8c\xf3To\xd1\u0363=X\x84_\xc8\xfc\xfe\u02bc\xa7\xc5d*\x89\x1f\x1e9\x93,\xb3'\x80\x00\u07d4\x8c\xf6\xda\x02\x04\xdb\u0106\vF\xad\x97?\xc1\x11\x00\x8d\x9e\fF\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x8c\xfe\xde\xf1\x98\xdb\n\x91C\xf0\x91)\xb3\xfdd\u073b\x9bIV\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8d\x04\xa5\xeb\xfb]\xb4\t\xdb\x06\x17\xc9\xfaV1\xc1\x92\x86\x1fJ\x894\x95tD\xb8@\xe8\x00\x00\u07d4\x8d\x06\xe4d$\\\xadaI9\xe0\xaf\bE\xe6\xd70\xe2\x03t\x89\n\u070a(\xf3\xd8}\x80\x00\u07d4\x8d\a\xd4-\x83\x1c-|\x83\x8a\xa1\x87+:\xd5\xd2w\x17h#\x89\x12\xee\x1f\x9d\xdb\xeeh\x00\x00\u07d4\x8d\v\x9e\xa5?\xd2cA^\xac\x119\x1f|\xe9\x12V\xb9\xfb\x06`\xf6\xf0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8dy\\_JV\x89\xadb\u0696\x16q\xf0(\x06R\x86\xd5T\x89o\x05\xb5\x9d; \x00\x00\x00\u07d4\x8d\u007f>a)\x9c-\xb9\xb9\xc0H|\xf6'Q\x9e\xd0\n\x91#\x89^t\xa8P^\x80\xa0\x00\x00\xe0\x94\x8d\x89\x17\v\x92\xb2\xbe,\b\xd5|H\xa7\xb1\x90\xa2\xf1Fr\x0f\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\x8d\x93\xda\u01c5\xf8\x8f\x1a\x84\xbf\x92}Se+E\xa1T\xcc\u0749\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\x8d\x99R\u043bN\xbf\xa0\xef\xd0\x1a:\xa9\xe8\xe8\u007f\x05%t.\x89\xbb\x91%T\"c\x90\x00\x00\u07d4\x8d\x9a\fp\xd2& B\xdf\x10\x17\xd6\xc3\x03\x13 $w'\x12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8d\x9e\xd7\xf4U0X\xc2ox6\xa3\x80-0d\xeb\x1b6=\x89\x04\xe1\x00;(\xd9(\x00\x00\u07d4\x8d\xa1\x17\x8fU\xd9wr\xbb\x1d$\x11\x1a@JO\x87\x15\xb9]\x89/\x9a\xc3\xf6\xde\x00\x80\x80\x00\u07d4\x8d\xa1\xd3Y\xbal\xb4\xbc\xc5}zCw \xd5]\xb2\xf0\x1cr\x89\x04V9\x18$O@\x00\x00\u07d4\x8d\xab\x94\x8a\xe8\x1d\xa3\x01\xd9r\xe3\xf6\x17\xa9\x12\xe5\xa7Sq.\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x8d\xad\xdfR\xef\xbdt\u0695\xb9i\xa5GoO\xbb\xb5c\xbf\u0489-C\xf3\xeb\xfa\xfb,\x00\x00\u07d4\x8d\xb1\x85\xfe\x1bp\xa9Jj\b\x0e~#\xa8\xbe\xdcJ\xcb\xf3K\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x8d\xb5\x8e@n -\xf9\xbcpl\xb43\xe1\x94\xf4\x0f\x82\xb4\x0f\xaa\xdb\x1f\x8b\x85a\x16\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x8d\xc1\xd5\x11\x1d\t\xaf%\xfd\xfc\xacE\\|\xec(>mgu\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8d\u0504\xff\x8a0sd\xebf\xc5%\xa5q\xaa\xc7\x01\xc5\xc3\x18\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8d\u05a9\xba\xe5\u007fQ\x85I\xad\xa6wFo\ua2b0O\u0674\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8d\xde<\xb8\x11\x85h\xefE\x03\xfe\x99\x8c\xcd\xf56\xbf\x19\xa0\x98\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8d\xde`\xeb\b\xa0\x99\xd7\u06a3V\u06aa\xb2G\r{\x02Zk\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94\x8d\xf39!Kj\u0472Fc\xceq`4t\x9dn\xf88\u064a\x02TO\xaaw\x80\x90\xe0\x00\x00\xe0\x94\x8d\xf5=\x96\x19\x14q\xe0Y\xdeQ\xc7\x18\xb9\x83\xe4\xa5\x1d*\xfd\x8a\x06\u01b95\xb8\xbb\xd4\x00\x00\x00\u07d4\x8d\xfb\xaf\xbc\x0e[\\\x86\xcd\x1a\u0597\xfe\xea\x04\xf41\x88\u0796\x89\x15%+\u007f_\xa0\xde\x00\x00\u07d4\x8e\a;\xad%\xe4\"\x18a_J\x0ek.\xa8\xf8\xde\"0\xc0\x89\x82=b\x9d\x02k\xfa\x00\x00\u07d4\x8e\x0f\xee8hZ\x94\xaa\xbc\xd7\u0385{k\x14\t\x82Ou\xb8\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x8e#\xfa\xcd\x12\xc7e\xc3j\xb8\x1am\xd3M\x8a\xa9\xe6\x89\x18\xae\x89\t\x11\u418d\xba\x9b\x00\x00\xe0\x94\x8e/\x904\xc9%G\x19\u00ceP\u026ad0^\u0596\xdf\x1e\x8a\x01\x00N.E\xfb~\xe0\x00\x00\u07d4\x8e2@\xb0\x81\x0e\x1c\xf4\a\xa5\x00\x80G@\u03cdad2\xa4\x89\x02/fU\xef\v8\x80\x00\u07d4\x8eHj\x04B\xd1q\xc8`[\xe3H\xfe\xe5~\xb5\b^\xff\r\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8eaV3k\xe2\u037e2\x14\r\xf0\x8a+\xa5_\u0425\x84c\x89\x04\t\x9e\x1dcW\x18\x00\x00\u07d4\x8eg\b\x15\xfbg\xae\xae\xa5{\x86SN\xdc\x00\xcd\xf5d\xfe\u5272\xe4\xb3#\xd9\xc5\x10\x00\x00\u07d4\x8emt\x85\xcb\u942c\xc1\xad\x0e\xe9\xe8\xcc\xf3\x9c\f\x93D\x0e\x893\xc5I\x901r\f\x00\x00\xe0\x94\x8et\xe0\u0477~\xbc\x82:\xca\x03\xf1\x19\x85L\xb1 '\xf6\u05ca\x16\xb3R\xda^\x0e\xd3\x00\x00\x00\u07d4\x8ex\xf3QE}\x01oJ\xd2u^\xc7BN\\!\xbamQ\x89\a\xea(2uw\b\x00\x00\u07d4\x8ey6\u0552\x00\x8f\xdcz\xa0N\xde\xebuZ\xb5\x13\u06f8\x9d\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x8e\u007f\xd28H\xf4\xdb\a\x90j}\x10\xc0K!\x80;\xb0\x82'\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8e\x92\xab\xa3\x8er\xa0\x98\x17\v\x92\x95\x92FSz.UV\xc0\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\x8e\x98ve$\xb0\xcf'G\xc5\r\xd4;\x95gYM\x971\u0789lD\xb7\xc2a\x82(\x00\x00\u07d4\x8e\x9b5\xadJ\n\x86\xf7XDo\xff\xde4&\x9d\x94\f\xea\u0349\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8e\x9c\b\xf78f\x1f\x96v#n\xff\x82\xbaba\xdd?H\"\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x8e\x9cB\x92f\xdf\x05~\xfax\xdd\x1d_w\xfc@t*\xd4f\x89\x10D.\u0475l|\x80\x00\u07d4\x8e\xa6V\xe7\x1e\xc6Q\xbf\xa1|ZWY\xd8`1\xcc5\x99w\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x8e\xae)CU\x98\xba\x8f\x1c\x93B\x8c\xdb>+M1\a\x8e\x00\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8e\xb1\xfb\xe4\xe5\xd3\x01\x9c\xd7\xd3\r\xae\x9c\r[Lv\xfbc1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8e\xb5\x17t\xaf k\x96k\x89\t\xc4Z\xa6r'H\x80,\f\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x8e\xb8\xc7\x19\x82\xa0\x0f\xb8Bu)2S\xf8\x04ED\xb6kI\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\x8e\xcb\u03ec\xbf\xaf\xe9\xf0\f9\"\xa2N,\xf0\x02gV\xca \x8a\x011\xbe\xb9%\xff\xd3 \x00\x00\u07d4\x8e\u03b2\xe1$Sl[_\xfcd\x0e\xd1O\xf1^\u0668\xcbq\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8e\u042f\x11\xff(p\xda\x06\x81\x00J\xfe\x18\xb0\x13\xf7\xbd8\x82\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u0794\x8e\xd1Cp\x1f/r(\x0f\xd0J{Ad(\x19y\xea\x87\u0248\xc2I\xfd\xd3'x\x00\x00\u07d4\x8e\xd1R\x8bD~\xd4)y\x02\xf69\xc5\x14\u0414J\x88\xf8\u0209\n\xc6\xe7z\xb6c\xa8\x00\x00\u07d4\x8e\xd4(L\x0fGD\x9c\x15\xb8\u0673$]\u8fb6\u0380\xbf\x89+^:\xf1k\x18\x80\x00\x00\xe0\x94\x8e\xde~=\xc5\aI\xc6\xc5\x0e.(\x16\x84x\xc3M\xb8\x19F\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4\x8e\xe5\x843}\xdb\xc8\x0f\x9e4\x98\xdfU\xf0\xa2\x1e\xac\xb5\u007f\xb1\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x8e\xeb\xec\x1ab\xc0\x8b\x05\xa7\xd1\u0551\x80\xaf\x9f\xf0\u044e?6\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x8e\xf4\u0622\xc2o\xf7\x14\xb6u\x89\x19\x80\x1c\x83\xb6\xc7\xc0\x00\x00\u07d4\x8fM\x1dAi>F,\xf9\x82\xfd\x81\u042ap\x1d:St\u0249\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8fM\x1e~Ea(J4\xfe\xf9g<\r4\xe1*\xf4\xaa\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8fO\xb1\xae\xa7\xcd\x0fW\x0e\xa5\xe6\x1b@\xa4\xf4Q\vbd\xe4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x8fV\x1bA\xb2\t\xf2H\u0229\x9f\x85\x87\x887bP`\x9c\xf3\x89\\(=A\x03\x94\x10\x00\x00\xe0\x94\x8fX\xd84\x8f\xc1\xdcN\r\xd84;eC\xc8W\x04^\xe9@\x8a\x02\xe3\x03\x8d\xf4s\x03(\x00\x00\u07d4\x8f`\x89_\xbe\xbb\xb5\x01\u007f\xcb\xff<\u0763\x97)+\xf2[\xa6\x89\x17D\x06\xff\x9fo\u0480\x00\u07d4\x8fd\xb9\xc1$m\x85x1d1\a\xd3U\xb5\xc7_\xef]O\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\x8ff\x0f\x8b.L|\u00b4\xac\x9cG\xed(P\x8d_\x8f\x86P\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x8fi\xea\xfd\x023\xca\xdb@Y\xabw\x9cF\xed\xf2\xa0PnH\x89`\xf0f \xa8IE\x00\x00\xe0\x94\x8fq~\xc1U/LD\x00\x84\xfb\xa1\x15J\x81\xdc\x00>\xbd\xc0\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\x8f\x8a\xcb\x10v\a8\x84y\xf6K\xaa\xab\xea\x8f\xf0\a\xad\xa9}\x8a\x05\xc6\xf3\b\n\xd4#\xf4\x00\x00\u07d4\x8f\x8c\xd2n\x82\xe7\xc6\xde\xfd\x02\u07ed\a\x97\x90!\xcb\xf7\x15\f\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x8f\x8f7\u042d\x8f3]*q\x01\xb4\x11V\xb6\x88\xa8\x1a\x9c\xbe\x89\x03\xcbq\xf5\x1f\xc5X\x00\x00\u07d4\x8f\x92\x84O(*\x92\x99\x9e\u5d28\xd7s\xd0kiM\xbd\x9f\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\x8f\xact\x8fxJ\x0f\xedh\u06e43\x19\xb4*u\xb4d\x9cn\x891T\xc9r\x9d\x05x\x00\x00\u07d4\x8f\u0665\xc3:}\x9e\xdc\xe0\x99{\xdfw\xab0d$\xa1\x1e\xa9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x8f\xef\xfa\xdb8z\x15G\xfb(M\xa9\xb8\x14\u007f>|m\xc6\u0689-b{\xe4S\x05\b\x00\x00\u07d4\x8f\xf4`Ehw#\xdc3\xe4\u0419\xa0i\x04\xf1\ubd44\u0709lk\x93[\x8b\xbd@\x00\x00\u07d4\x8f\xfa\x06!\"\xac0t\x18\x82\x1a\u06d3\x11\aZ7\x03\xbf\xa3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x8f\xfe2)\x97\xb8\xe4\x04B-\x19\xc5J\xad\xb1\x8f[\xc8\u9dc9\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x90\x01\x94\u0131\aC\x05\u045d\xe4\x05\xb0\xacx(\x0e\xca\xf9g\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x90\x03\xd2p\x89\x1b\xa2\xdfd=\xa84\x15\x83\x195E\xe3\xe0\x00\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x90\x05z\xf9\xaaf0~\xc9\xf03\xb2\x97$\u04f2\xf4\x1e\xb6\xf9\x8a\x19\xd1\u05aa\xdb,R\xe8\x00\x00\u07d4\x90\x0f\v\x8e5\xb6h\xf8\x1e\xf2R\xb18U\xaaP\a\xd0\x12\xe7\x89\x17\n\x0fP@\xe5\x04\x00\x00\u07d4\x90\x18\xcc\x1fH\xd20\x8e%*\xb6\b\x9f\xb9\x9a|\x1dV\x94\x10\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x90\x1d\x99\xb6\x99\xe5\u0191\x15\x19\xcb v\xb4\xc7c0\xc5M\"\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x90-t\xa1W\xf7\u04b9\xa37\x8b\x1fVp70\xe0:\x17\x19\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x904\x13\x87\x8a\xea;\xc1\bc\t\xa3\xfev\x8beU\x9e\x8c\xab\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x90If\xcc\"\x13\xb5\xb8\xcb[\xd6\b\x9e\xf9\xcd\xdb\xef~\xdf\u0309lk\x93[\x8b\xbd@\x00\x00\u07d4\x90L\xaaB\x9ca\x9d\x94\x0f\x8egA\x82j\r\xb6\x92\xb1\x97(\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x90R\xf2\xe4\xa3\xe3\xc1-\xd1\xc7\x1b\xf7\x8aN\xc3\x04=\u020b~\x89\x0e~\xeb\xa3A\vt\x00\x00\u0794\x90U&V\x8a\xc1#\xaf\xc0\xe8J\xa7\x15\x12O\xeb\xe8=\xc8|\x88\xf8i\x93)g~\x00\x00\u07d4\x90\x92\x91\x87\a\xc6!\xfd\xbd\x1d\x90\xfb\x80\xebx\u007f\xd2osP\x89\x85[[\xa6\\\x84\xf0\x00\x00\u07d4\x90\x9b^v:9\xdc\u01d5\"=s\xa1\u06f7\xd9L\xa7Z\u0209lk\x93[\x8b\xbd@\x00\x00\u07d4\x90\xac\xce\xd7\xe4\x8c\b\u01b94dm\xfa\n\xdf)\u0714\aO\x89\x03\vK\x15{\xbdI\x00\x00\u07d4\x90\xb1\xf3p\xf9\xc1\xeb\v\xe0\xfb\x8e+\x8a\xd9jAcq\u074a\x890\xca\x02O\x98{\x90\x00\x00\u07d4\x90\xb6/\x13\x1a_)\xb4UqQ>\xe7\xa7J\x8f\v#\"\x02\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\x90\xbdb\xa0P\x84Ra\xfaJ\x9f|\xf2A\xeac\v\x05\ufe09\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x90\xc4\x1e\xba\x00\x8e \xcb\xe9'\xf3F`?\u0206\x98\x12Yi\x89\x02F\xdd\xf9yvh\x00\x00\u07d4\x90\u0480\x9a\xe1\xd1\xff\xd8\xf6>\xda\x01\xdeI\xddU-\xf3\u047c\x89\u063beI\xb0+\xb8\x00\x00\u07d4\x90\xdc\t\xf7\x17\xfc*[i\xfd`\xba\b\xeb\xf4\v\xf4\xe8$l\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\x90\xe3\x00\xacqE\x1e@\x1f\x88\u007fnw(\x85\x16G\xa8\x0e\a\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x90\xe3Z\xab\xb2\xde\xef@\x8b\xb9\xb5\xac\xefqDW\xdf\xdebr\x89\x05l\xd5_\xc6M\xfe\x00\x00\u07d4\x90\xe7\a\x0fM\x03?\xe6\x91\f\x9e\xfeZ'\x8e\x1f\xc6#M\xef\x89\x05q8\b\x19\xb3\x04\x00\x00\u07d4\x90\xe9>M\xc1q!HyR36\x14\x00+\xe4#VI\x8e\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x90\u9a68.\u06a8\x14\u0084\xd22\xb6\u9e90p\x1dIR\x89\x05k\xe0<\xa3\xe4}\x80\x00\u07d4\x90\xf7t\xc9\x14}\u0790\x85=\xdcC\xf0\x8f\x16\xd4U\x17\x8b\x8c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x90\xfcS{!\x06Xf\n\x83\xba\xa9\xacJ\x84\x02\xf6WF\xa8\x89e\xea=\xb7UF`\x00\x00\u07d4\x91\x05\n\\\xff\xad\xed\xb4\xbbn\xaa\xfb\xc9\xe5\x014(\xe9l\x80\x89\\(=A\x03\x94\x10\x00\x00\u07d4\x91\x05\x17d\xafk\x80\x8eB\x12\xc7~0\xa5W.\xaa1pp\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x91\v}Wz~9\xaa#\xac\xf6*\xd7\xf1\xef4)4\xb9h\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x91\x0e\x99eC4Lh\x15\xfb\x97\u0367\xafK\x86\x98vZ[\x89\x05\x9a\xf6\x98)\xcfd\x00\x00\u07d4\x91\x1f\xee\xa6\x1f\xe0\xedP\u0179\xe5\xa0\xd6`q9\x9d(\xbd\u0189\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\x91\x1f\xf23\xe1\xa2\x11\xc0\x17,\x92\xb4l\xf9\x97\x03\x05\x82\xc8:\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x91 \xe7\x11s\xe1\xba\x19\xba\x8f\x9fO\xdb\u072a4\xe1\u05bbx\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x91!\x17\x12q\x9f+\bM;8u\xa8Pi\xf4f61A\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x91#\x04\x11\x8b\x80G=\x9e\x9f\xe3\xeeE\x8f\xbea\x0f\xfd\xa2\xbb\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x91Tky\xec\xf6\x9f\x93kZV\x15\b\xb0\xd7\xe5\f\u0159/\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\x91V\u0440)5\x0eG\x04\b\xf1_\x1a\xa3\xbe\x9f\x04\ng\u018965\u026d\xc5\u07a0\x00\x00\u07d4\x91b\x0f>\xb3\x04\xe8\x13\u048b\x02\x97Ume\xdcN]\u5a89\xcf\x15&@\xc5\xc80\x00\x00\xe0\x94\x91k\xf7\xe3\xc5E\x92\x1d2\x06\xd9\x00\xc2O\x14\x12|\xbd^p\x8a\x03\xd0\u077c}\xf2\xbb\x10\x00\x00\u0794\x91l\xf1}qA(\x05\xf4\xaf\xc3DJ\v\x8d\xd1\xd93\x9d\x16\x88\xc6s\xce<@\x16\x00\x00\u07d4\x91{\x8f\x9f:\x8d\t\xe9 ,R\u009erA\x96\xb8\x97\xd3^\x89\b\xbaR\xe6\xfcE\xe4\x00\x00\u07d4\x91\x89g\x91\x8c\u0617\xdd\x00\x05\xe3m\xc6\u0203\xefC\x8f\xc8\u01c9\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\x91\x89\x8e\xab\x8c\x05\xc0\"(\x83\xcdM\xb2;w\x95\xe1\xa2J\u05c9lk\x93[\x8b\xbd@\x00\x00\u0794\x91\x91\xf9F\x98!\x05\x16\xcfc!\xa1B\a\x0e Yvt\xed\x88\xee\x9d[\xe6\xfc\x11\x00\x00\u07d4\x91\xa4\x14\x9a,{\x1b:g\xea(\xaf\xf3G%\u0fcdu$\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\x91\xa7\x87\xbcQ\x96\xf3HW\xfe\f7/M\xf3v\xaa\xa7f\x13\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x91\xa8\xba\xae\xd0\x12\xea.c\x80;Y=\r\f*\xabL[\n\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\x91\xac\\\xfeg\xc5J\xa7\xeb\xfb\xa4HflF\x1a;\x1f\xe2\xe1\x89\x15\xc94\x92\xbf\x9d\xfc\x00\x00\u07d4\x91\xbb?y\x02+\xf3\xc4S\xf4\xff%n&\x9b\x15\xcf,\x9c\xbd\x89RX\\\x13\xfe:\\\x00\x00\u07d4\x91\xc7^<\xb4\xaa\x89\xf3F\x19\xa1d\xe2\xa4x\x98\xf5gM\x9c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x91\xc8\f\xaa\b\x1b85\x1d*\x0e\x0e\x00\xf8\n4\xe5dt\xc1\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x91\xccF\xaa7\x9f\x85jf@\xdc\xcdZd\x8ay\x02\xf8I\u0649\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x91\u04a9\xee\x1am\xb2\x0fS\x17\u0327\xfb\xe218\x95\u06ce\xf8\x8a\x01\xcc\u00e5/0n(\x00\x00\u07d4\x91\xd6n\xa6(\x8f\xaaK=`l*\xa4\\{k\x8a%'9\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x91\u06f6\xaa\xad\x14\x95\x85\xbeG7\\]m\xe5\xff\t\x19\x15\x18\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x91\xe8\x81\x06R\xe8\xe6\x16\x15%\xd6;\xb7u\x1d\xc2\x0fg`v\x89'Mej\xc9\x0e4\x00\x00\u07d4\x91\xf5\x16\x14l\xda (\x17\x19\x97\x80`\u01beAI\x06|\x88\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x91\xf6$\xb2J\x1f\xa5\xa0V\xfeW\x12)\xe77\x9d\xb1K\x9a\x1e\x8a\x02\x8a\x85\x17\xc6i\xb3W\x00\x00\xe0\x94\x91\xfe\x8aLad\u07cf\xa6\x06\x99]k\xa7\xad\xca\xf1\u0213\u038a\x03\x99\x92d\x8a#\u0220\x00\x00\u07d4\x92\x1fRa\xf4\xf6\x12v\a\x06\x89&%\xc7^{\u0396\xb7\b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92!\xc9\xce\x01#&et\x10\x96\xac\a#Y\x03\xad\x1f\xe2\xfc\x89\x06\xdbc3U\"b\x80\x00\u07d4\x92%\x988`\xa1\xcbF#\xc7$\x80\xac\x16'+\f\x95\xe5\xf5\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x92%\xd4jZ\x80\x949$\xa3\x9e[\x84\xb9m\xa0\xacE\x05\x81\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x92* \u01da\x1d:&\xdd8)g{\xf1\xd4\\\x8fg+\xb6\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x92C\x8eR\x03\xb64o\xf8\x86\xd7\xc3b\x88\xaa\xcc\xccx\xce\u028965\u026d\xc5\u07a0\x00\x00\u07d4\x92C\xd7v-w({\x12c\x86\x88\xb9\x85N\x88\xa7i\xb2q\x8965\u026d\xc5\u07a0\x00\x00\u0794\x92K\xcez\x85<\x97\v\xb5\xec{\xb7Y\xba\xeb\x9ct\x10\x85{\x88\xbe -j\x0e\xda\x00\x00\u07d4\x92N\xfam\xb5\x95\xb7\x93\x13'~\x881\x96%\akX\n\x10\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92U\x82&\xb3\x84bl\xadH\xe0\x9d\x96k\xf19^\xe7\xea]\x89\x12\x1e\xa6\x8c\x11NQ\x00\x00\u07d4\x92`\x82\xcb~\xedK\x19\x93\xad$ZGrg\xe1\xc3<\xd5h\x89\x14Jt\xba\u07e4\xb6\x00\x00\u07d4\x92b\t\xb7\xfd\xa5N\x8d\u06dd\x9eM=\x19\xeb\u070e\x88\u009f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92h\xd6&FV6\x11\xdc;\x83*0\xaa#\x94\xc6F\x13\xe3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92i\x8e4Sx\xc6-\x8e\xda\x18M\x946j\x14K\f\x10[\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\x92y:\u0173rhwJq0\xde+\xbd3\x04\x05f\x17s\x89\x02,\xa3X|\xf4\xeb\x00\x00\xe0\x94\x92y\xb2\"\x8c\xec\x8f{M\xda?2\x0e\x9a\x04f\xc2\xf5\x85\u028a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x92|\xb7\xdc\x18p6\xb5B{\xc7\xe2\x00\xc5\xecE\f\x1d'\u0509\v\xb5\x9a'\x95<`\x00\x00\u07d4\x92|\u00bf\xda\x0e\b\x8d\x02\xef\xf7\v8\xb0\x8a\xa5<\xc3\tA\x89do`\xa1\xf9\x866\x00\x00\xe0\x94\x92\x84\xf9m\xdbG\xb5\x18n\xe5X\xaa12M\xf56\x1c\x0fs\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\x92\x9d6\x8e\xb4j-\x1f\xbd\xc8\xff\xa0`~\xdeK\xa8\x8fY\xad\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92\xa7\u0166Cb\xe9\xf8B\xa2=\xec\xa2\x105\x85\u007f\x88\x98\x00\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\x92\xa8\x98\xd4o\x19q\x9c8\x12j\x8a<'\x86z\xe2\xce\u5589lk\x93[\x8b\xbd@\x00\x00\u07d4\x92\xa9q\xa79y\x9f\x8c\xb4\x8e\xa8G]r\xb2\xd2GAr\xe6\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x92\xaa\xe5\x97h\xed\xdf\xf8<\xfe`\xbbQ.s\n\x05\xa1a\u05c9\\\x97xA\fv\u0440\x00\u07d4\x92\xad\x1b=u\xfb\xa6}Tf=\xa9\xfc\x84\x8a\x8a\xde\x10\xfag\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92\xae[|~\xb4\x92\xff\x1f\xfa\x16\xddB\xad\x9c\xad@\xb7\xf8\u0709.\xe4IU\b\x98\xe4\x00\x00\u07d4\x92\xc0\xf5s\xec\xcfb\xc5H\x10\xeek\xa8\xd1\xf1\x13T+0\x1b\x89\xb7ro\x16\u0331\xe0\x00\x00\u07d4\x92\xc1?\xe0\xd6\u0387\xfdP\xe0=\uf7e6@\x05\t\xbdps\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x92\xc9L( \xdf\xcfqV\xe6\xf10\x88\xec\u754b6v\xfd\x89\x05-T(\x04\xf1\xce\x00\x00\u07d4\x92\xcf\xd6\x01\x88\xef\u07f2\xf8\xc2\xe7\xb1i\x8a\xbb\x95&\xc1Q\x1f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x92\u062d\x9aMah;\x80\u0526g.\x84\xc2\rbB\x1e\x80\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x92\u0725\xe1\x02\xb3\xb8\x1b`\xf1\xa5\x04cIG\xc3t\xa8\x8c\u02c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x92\xe454\x0e\x9d%<\x00%c\x89\xf5+\x06}U\x97Nv\x89\x0e\x87?D\x13<\xb0\x00\x00\xe0\x94\x92\xe49(\x16\xe5\xf2\xef_\xb6X7\xce\xc2\xc22\\\xc6I\"\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x92\xe6X\x1e\x1d\xa1\xf9\xb8F\xe0\x93G3=\xc8\x18\xe2\u04acf\x89\xc5S%\xcat\x15\xe0\x00\x00\u07d4\x93\x1d\xf3M\x12%\xbc\xd4\"Nch\r\\L\t\xbc\xe75\xa6\x89\x03\xaf\xb0\x87\xb8v\x90\x00\x00\u07d4\x93\x1f\xe7\x12\xf6B\a\xa2\xfdP\"r\x88CT\x8b\xfb\x8c\xbb\x05\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x93#_4\r(c\xe1\x8d/LR\x99e\x16\x13\x8d\"\x02g\x89\x04\x00.D\xfd\xa7\xd4\x00\x00\u07d4\x93%\x82U\xb3|\u007fX\xf4\xb1\x06s\xa92\xdd:\xfd\x90\xf4\xf2\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x93(\xd5\\\xcb?\xceS\x1f\x19\x93\x823\x9f\x0eWn\xe8@\xa3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x93)\xff\xdc&\x8b\xab\u0788t\xb3f@l\x81D[\x9b-5\x89\x16\xe6/\x8cs\f\xa1\x80\x00\u07d4\x93+\x9c\x04\xd4\r*\xc80\x83\xd9B\x98\x16\x9d\xae\x81\xab.\u0409lk\x93[\x8b\xbd@\x00\x00\u07d4\x9346\xc8G&U\xf6L:\xfa\xaf|Lb\x1c\x83\xa6+8\x8965\u026d\xc5\u07a0\x00\x00\u0794\x93;\xf3?\x82\x99p+:\x90&B\xc3>\v\xfa\xea\\\x1c\xa3\x88\xd2\xf1?w\x89\xf0\x00\x00\u07d4\x93@4\\\xa6\xa3\uaf77sc\xf2X`C\xf2\x948\xce\v\x89\x1c\xc8\x05\xda\r\xff\xf1\x00\x00\xe0\x94\x93@\xb5\xf6x\xe4^\xe0^\xb7\b\xbbz\xbbn\xc8\xf0\x8f\x1bk\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x93J\xf2\x1b~\xbf\xa4g\xe2\xce\xd6Z\xa3N\xdd:\x0e\xc7\x132\x8a\a\x80\x1f>\x80\xcc\x0f\xf0\x00\x00\xe0\x94\x93PiDJj\x98M\xe2\bNFi*\xb9\x9fg\x1f\xc7'\x8a\x01\xe7\xe4\x17\x1b\xf4\u04e0\x00\x00\xe0\x94\x93P~\x9e\x81\x19\xcb\xce\u068a\xb0\x87\xe7\xec\xb0q8=i\x81\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\x93g\x8a\x00\x00\xe0\x94\x93m\xcf\x00\x01\x94\xe3\xbf\xf5\n\u0174$:;\xa0\x14\xd6a\u060a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x93o8\x13\xf5\xf6\xa1;\x8eO\xfe\xc8?\xe7\xf8&\x18jq\u0349\x1c0s\x1c\xec\x03 \x00\x00\u07d4\x93t\x86\x9dJ\x99\x11\xee\x1e\xafU\x8b\xc4\u00b6>\xc6:\xcf\u074965\u026d\xc5\u07a0\x00\x00\u07d4\x93uc\u0628\x0f\u05657\xb0\xe6m \xa0%%\xd5\u0606`\x89\x87\x86x2n\xac\x90\x00\x00\u07d4\x93v\xdc\xe2\xaf.\xc8\xdc\xdat\x1b~sEfF\x81\xd96h\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x93\x86\x8d\xdb*yM\x02\xeb\xda/\xa4\x80|v\xe3`\x98X\u0709m\xee\x15\xfc|$\xa7\x80\x00\xe0\x94\x93\x9cC\x13\xd2(\x0e\xdf^\a\x1b\xce\xd8F\x06?\n\x97]T\x8a\x19i6\x89t\xc0[\x00\x00\x00\xe0\x94\x93\xa6\xb3\xabB0\x10\xf9\x81\xa7H\x9dJ\xad%\xe2b\\WA\x8a\x04F\x80\xfej\x1e\xdeN\x80\x00\u07d4\x93\xaa\x8f\x92\xeb\xff\xf9\x91\xfc\x05^\x90ne\x1a\xc7h\xd3+\u02092\xf5\x1e\u06ea\xa30\x00\x00\u07d4\x93\xb4\xbf?\xdf\xf6\xde?NV\xbamw\x99\xdcK\x93\xa6T\x8f\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4\x93\xbc}\x9aJ\xbdD\u023b\xb8\xfe\x8b\xa8\x04\xc6\x1a\xd8\xd6Wl\x89\xd8\xd6\x11\x9a\x81F\x05\x00\x00\u07d4\x93\xc2\xe6N]\xe5X\x9e\xd2P\x06\xe8C\x19n\xe9\xb1\xcf\v>\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94\x93\u020e-\x88b\x1e0\xf5\x8a\x95\x86\xbe\xd4\t\x89\x99\xebg\u074a\x06\x9bZ\xfa\xc7P\xbb\x80\x00\x00\u07d4\x93\xe0\xf3~\xcd\xfb\x00\x86\xe3\xe8b\xa9p4D{\x1eM\xec\x1a\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\xe0\x94\x93\xe3\x03A\x1a\xfa\xf6\xc1\a\xa4A\x01\u026c[6\xe9\xd6S\x8b\x8a\r\xf9\xdd\xfe\xcd\x03e@\x00\x00\u07d4\x93\xf1\x8c\xd2R`@v\x14\x88\xc5\x13\x17M\x1eycv\x8b,\x89\x82\xff\xac\x9a\u0553r\x00\x00\u07d4\x94\x0fqQ@P\x9f\xfa\xbf\x97EF\xfa\xb3\x90\"\xa4\x19R\u0489K\xe4\xe7&{j\xe0\x00\x00\u07d4\x94,k\x8c\x95[\xc0\u0608\x12g\x8a#g%\xb3'9\xd9G\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\x94=7\x86JJS}5\xc8\u0657#\xcdd\x06\xce%b\xe6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x94C\x9c\xa9\xcc\x16\x9ay\u0520\x9c\xae^gvJo\x87\x1a!\x89\r\x02\xabHl\xed\xc0\x00\x00\xe0\x94\x94D\x9c\x01\xb3*\u007f\xa5Z\xf8\x10OB\xcd\xd8D\xaa\x8c\xbc@\x8a\x03\x81\x11\xa1\xf4\xf0<\x10\x00\x00\xe0\x94\x94E\xba\\0\xe9\x89a\xb8`$a\xd08]@\xfb\xd8\x03\x11\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x94O\a\xb9o\x90\xc5\xf0\xd7\xc0\u0140S1I\xf3\xf5\x85\xa0x\x89\x04\x02\xf4\xcf\xeeb\xe8\x00\x00\u07d4\x94T\xb3\xa8\xbf\xf9p\x9f\xd0\u1407~l\xb6\u0219t\xdb\u0589\x90\xf54`\x8ar\x88\x00\x00\u07d4\x94]\x96\xeaW>\x8d\xf7&+\xbf\xa5r\"\x9bK\x16\x01k\x0f\x89\vX\x9e\xf9\x14\xc1B\x00\x00\u07d4\x94^\x18v\x9d~\xe7'\xc7\x01?\x92\xde$\xd1\x17\x96\u007f\xf3\x17\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x94a'\x81\x03;W\xb1F\xeet\xe7S\xc6r\x01\u007fS\x85\xe4\x89\xc3(\t>a\xee@\x00\x00\xe0\x94\x94dJ\xd1\x16\xa4\x1c\xe2\xca\u007f\xbe\xc6\t\xbd\xefs\x8a*\xc7\u01ca\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x94p\xcc6YE\x86\x82\x18!\xc5\u0256\xb6\xed\xc8;mZ2\x89\x01M\x11 \u05f1`\x00\x00\xe0\x94\x94u\xc5\x10\xec\x9a&\x97\x92GtL=\x8c;\x0e\v_D\u04ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x94~\x11\xe5\xea)\ro\u00f3\x80H\x97\x9e\f\xd4N\xc7\xc1\u007f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x94\x83\u064f\x14\xa3?\xdc\x11\x8d@9U\u00995\xed\xfc_p\x89\x18\xea;4\xefQ\x88\x00\x00\u07d4\x94\x911\xf2\x89C\x92\\\xfc\x97\xd4\x1e\f\xea\v&)s\xa70\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\x94\x9f\x84\xf0\xb1\xd7\u0127\xcfI\xee\u007f\x8b,J\x13M\xe3(x\x89%\"H\u07b6\xe6\x94\x00\x00\u07d4\x94\x9f\x8c\x10{\xc7\xf0\xac\xea\xa0\xf1pR\xaa\xdb\xd2\xf9s+.\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x94\xa7\u0368\xf4\x81\xf9\u061dB\xc3\x03\xae\x162\xb3\xb7\t\xdb\x1d\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x94\xa9\xa7\x16\x911| d'\x1bQ\xc95?\xbd\xed5\x01\xa8\x89\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4\x94\xadK\xad\x82K\xd0\ub7a4\x9cX\u03bc\xc0\xff^\b4k\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\x94\xbb\xc6}\x13\xf8\x9e\xbc\xa5\x94\xbe\x94\xbcQp\x92\f0\xd9\xf3\x89\x04X\xff\xa3\x15\nT\x00\x00\u07d4\x94\xbe:\xe5Ob\xd6c\xb0\xd4\u031e\x1e\xa8\xfe\x95V\ua7bf\x89\x01C\x13,\xa8C\x18\x00\x00\xe0\x94\x94\xc0U\xe8X5z\xaa0\xcf A\xfa\x90Y\xce\x16J\x1f\x91\x8a\x04<%\xe0\xdc\xc1\xbd\x1c\x00\x00\xe0\x94\x94\xc7B\xfdz\x8by\x06\xb3\xbf\xe4\xf8\x90O\xc0\xbe\\v\x803\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x94\xcaV\xdew\u007f\xd4S\x17\u007f^\x06\x94\xc4x\xe6j\xff\x8a\x84\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x94\xd8\x10t\xdbZ\xe1\x97\u04bb\x13s\xab\x80\xa8}\x12\x1cK\u04ca\x01\xfd\x934\x94\xaa_\xe0\x00\x00\u07d4\x94\u06c0xs\x86\n\xac=Z\xea\x1e\x88^R\xbf\xf2\x86\x99T\x89\xae\x8ez\v\xb5u\xd0\x00\x00\u07d4\x94\xe1\xf5\u02db\x8a\xba\xce\x03\xa1\xa6B\x82VU;i\f#U\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x94\xef\x8b\xe4Pw\xc7\xd4\xc5e'@\u0794jbbOq?\x89\x05l\xf5Y:\x18\xf8\x80\x00\u07d4\x94\xf1?\x9f\b6\xa3\xee$7\xa8I\"\u0498M\xc0\xf7\xd5;\x89\xa2\xa02\x9b\u00ca\xbe\x00\x00\u07d4\x94\xf8\xf0W\xdb~`\xe6u\xad\x94\x0f\x15X\x85\u0464w4\x8e\x89\x15\xbeat\xe1\x91.\x00\x00\xe0\x94\x94\xfc\u03ad\xfe\\\x10\x9c^\xae\xafF-C\x871B\u020e\"\x8a\x01\x045a\xa8\x82\x93\x00\x00\x00\u07d4\x95\x03N\x16!\x86Q7\xcdG9\xb3F\xdc\x17\xda:'\xc3N\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\x95\fh\xa4\t\x88\x15M#\x93\xff\xf8\xda|\u0369\x96\x14\xf7,\x89\xf9AF\xfd\x8d\xcd\xe5\x80\x00\xe0\x94\x95\x0f\xe9\xc6\xca\xd5\f\x18\xf1\x1a\x9e\xd9\xc4W@\xa6\x18\x06\x12\u040a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x95!\x83\xcf\u04ce5.W\x9d6\xde\xce\u0171\x84P\xf7\xfb\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x95'\x8b\b\xde\xe7\xc0\xf2\xc8\xc0\xf7\"\xf9\xfc\xbb\xb9\xa5$\x1f\u0689\x82\x93\t\xf6O\r\xb0\x00\x00\u07d4\x95,W\xd2\xfb\x19Q\a\xd4\xcd\\\xa3\x00wA\x19\u07ed/x\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x955r\xf0\xeam\xf9\xb1\x97\xca\xe4\x0eK\x8e\xcc\x05lCq\u014965\u026d\xc5\u07a0\x00\x00\u07d4\x95>\xf6R\xe7\xb7i\xf5=nxjX\x95/\xa9>\xe6\xab\u725b\ny\x1f\x12\x110\x00\x00\u07d4\x95DpF1;/:^\x19\xb9H\xfd;\x8b\xed\xc8,q|\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x95]\xb3\xb7C`\xb9\xa2hg~s\u03a8!f\x8a\xf6\xfa\u038a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4\x95`\xe8\xacg\x18\xa6\xa1\xcd\xcf\xf1\x89\xd6\x03\xc9\x06>A=\xa6\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x95g\xa0\u0781\x1d\xe6\xff\t[~\xe6N\u007f\x1b\x83\xc2a[\x80\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\x95h\x1c\xda\xe6\x9b I\xce\x10\x1e2\\u\x98\x92\xca\xc3\xf8\x11\x89\x9a\xe9*\x9b\xc9L@\x00\x00\xe0\x94\x95h\xb7\xdeuV(\xaf5\x9a\x84T=\xe25\x04\xe1^A\xe6\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x95i\xc6:\x92\x84\xa8\x05bm\xb3\xa3.\x9d#c\x93GaQ\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x95\x80\x9e\x8d\xa3\xfb\xe4\xb7\xf2\x81\xf0\xb8\xb1q_B\x0f}}c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x95\x9fW\xfd\xedj\xe3y\x13\xd9\x00\xb8\x1e_H\xa7\x93\"\xc6'\x89\r\xdb&\x10GI\x11\x80\x00\u07d4\x95\x9f\xf1\u007f\x1dQ\xb4s\xb4@\x10\x05'U\xa7\xfa\x8cu\xbdT\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x95\xa5w\xdc.\xb3\xael\xb9\xdf\xc7z\xf6\x97\xd7\xef\xdf\xe8\x9a\x01\x89\a_a\x0fp\xed \x00\x00\u07d4\x95\xcbm\x8acy\xf9J\xba\x8b\x88ViV,MD\x8eV\xa7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x95\xd5PB{ZQLu\x1ds\xa0\xf6\u049f\xb6]\"\xed\x10\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x95\u064d\f\x10i\x90\x8f\x06zR\xac\xac+\x8bSM\xa3z\xfd\x89oY\xb60\xa9)p\x80\x00\xe0\x94\x95\xdfN4E\xd7f&$\u010e\xbat\u03de\nS\xe9\xf72\x8a\v\xdb\xc4\x1e\x03H\xb3\x00\x00\x00\u07d4\x95\xe6\xa5K-_g\xa2JHu\xafu\x10|\xa7\xea\x9f\xd2\xfa\x89Hz\x9a0E9D\x00\x00\xe0\x94\x95\xe6\xf9=\xac\"\x8b\xc7XZ%sZ\xc2\xd0v\xcc:@\x17\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x95\xe7ad$\xcd\ta\xa7\x17'$t7\xf0\x06\x92r(\x0e\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x95\xe8\n\x82\xc2\f\xbe= `$,\xb9-sX\x10\xd04\xa2\x89\x01\xc3.F?\u0539\x80\x00\u07d4\x95\xf6-\x02C\xed\xe6\x1d\xad\x9a1e\xf59\x05'\rT\xe2B\x89WG=\x05\u06ba\xe8\x00\x00\u07d4\x95\xfbZ\xfb\x14\xc1\uf6b7\xd1y\xc5\xc3\x00P?\xd6j^\xe2\x89\x01\xda\xf7\xa0+\r\xbe\x80\x00\u07d4\x96\x10Y\"\x02\u0082\xab\x9b\u0628\x84Q\x8b>\v\xd4u\x817\x89\x0e\x87?D\x13<\xb0\x00\x00\xe0\x94\x96\x1cY\xad\xc7E\x05\u0446M\x1e\xcf\u02ca\xfa\x04\x12Y<\x93\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\x96,\r\xec\x8a=FK\xf3\x9b\x12\x15\xea\xfd&H\n\xe4\x90\u0349l\x82\xe3\xea\xa5\x13\xe8\x00\x00\u07d4\x96,\xd2*\x8e\xdf\x1eONU\xb4\xb1]\xdb\xfb]\x9dT\x19q\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x963K\xfe\x04\xff\xfaY\x02\x13\xea\xb3e\x14\xf38\xb8d\xb76\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x967\xdc\x12r=\x9cxX\x85B\uac02fO?\x03\x8d\x9d\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x96N\xabK'kL\u0618>\x15\xcar\xb1\x06\x90\x0f\xe4\x1f\u0389\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x96b\xee\x02\x19&h+1\xc5\xf2\x00\xceEz\xbe\xa7ll\xe9\x89$Y\x0e\x85\x89\xebj\x00\x00\xe0\x94\x96l\x04x\x1c\xb5\xe6}\xde25\xd7\xf8b\x0e\x1a\xb6c\xa9\xa5\x8a\x10\r P\xdacQ`\x00\x00\u07d4\x96pv\xa8w\xb1\x8e\xc1ZA[\xb1\x16\xf0n\xf3&E\u06e3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x96{\xfa\xf7bC\u0379@\t\xae<\x8d5\x05\xe9\xc0\x80EK\xe0\xe8\x19\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x96\x92A\x91\xb7\xdfe[3\x19\xdcma7\xf4\x81\xa7:\x0f\xf3\x89\xd9\xec\xb4\xfd \x8eP\x00\x00\u07d4\x96\x96\x05!83\x8cr/\x11@\x81\\\xf7t\x9d\r;:t\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x96\xa5_\x00\xdf\xf4\x05\xdcM\xe5\xe5\x8cW\xf6\xf6\xf0\xca\xc5]/\x89jf\x167\x9c\x87\xb5\x80\x00\u07d4\x96\xaaW?\xed/#4\x10\u06eeQ\x80\x14[#\xc3\x1a\x02\xf0\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\x96\xadW\x9b\xbf\xa8\u06ce\xbe\xc9\u0486\xa7.Fa\xee\xd8\xe3V\x89:\v\xa4+\xeca\x83\x00\x00\u07d4\x96\xb44\xfe\x06W\xe4*\u0302\x12\xb6\x86Q9\xde\xde\x15\x97\x9c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x96\xb9\x06\xear\x9fFU\xaf\xe3\xe5}5'|\x96}\xfa\x15w\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x96\xd6-\xfdF\b\u007fb@\x9d\x93\xdd`a\x88\xe7\x0e8\x12W\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x96\xd9\u0328\xf5^\xea\x00@\xecn\xb3H\xa1wK\x95\xd9>\xf4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x96\xe7\xc0\xc9\u057f\x10\x82\x1b\xf1@\xc5X\xa1E\xb7\xca\xc2\x13\x97\x899>\xf1\xa5\x12|\x80\x00\x00\u07d4\x96\xeaj\u021a+\xac\x954{Q\u06e6=\x8b\xd5\xeb\xde\xdc\xe1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x96\xea\xfb\xf2\xfboM\xb9\xa46\xa7LE\xb5eDR\xe28\x19\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x96\xebR>\x83/P\n\x01}\xe1>\xc2\u007f]6lV\x0e\xff\x89\x10\xac\u03baC\xee(\x00\x00\u07d4\x96\xf0F*\xe6\xf8\xb9`\x88\xf7\xe9\u018ct\xb9\u062d4\xb3G\x89a\t=|,m8\x00\x00\u07d4\x96\xf8 P\vp\xf4\xa3\xe3#\x9da\x9c\xff\x8f\" u\xb15\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x96\xfeY\xc3\u06f3\xaa|\xc8\xcbbH\fe\xe5nb\x04\xa7\xe2\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x96\xffoP\x99h\xf3l\xb4,\xbaH\xdb2\xf2\x1fVv\xab\xf8\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x97\t8R*\xfb^\x8f\x99Hs\xc9\xfb\xdc&\xe3\xb3~1L\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x97\n\xbdS\xa5O\xcaJd) |\x18-MW\xbb9\u0520\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x97\r\x8b\x8a\x00\x16\xd1C\x05O\x14\x9f\xb3\xb8\xe5P\xdc\a\x97\u01c965\u026d\xc5\u07a0\x00\x00\u07d4\x97,/\x96\xaa\x00\u03ca/ Z\xbc\xf8\x93|\fu\xf5\xd8\u0649\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x97?N6\x1f\xe5\xde\u0358\x9dL\x8f}|\xc9y\x908]\xaf\x89\x15\x0f\x85C\xa3\x87B\x00\x00\u07d4\x97M\x05A\xabJG\xec\u007fu6\x9c\x00i\xb6J\x1b\x81w\x10\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u0794\x97M/\x17\x89_)\x02\x04\x9d\xea\xae\xcf\t\xc3\x04e\a@-\x88\xcc\x19\u00947\xab\x80\x00\u07d4\x97R\xd1O^\x10\x93\xf0qq\x1c\x1a\xdb\xc4\xe3\xeb\x1e\\W\xf3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x97V\xe1v\xc9\xefi>\xe1\xee\u01b9\xf8\xb1Q\xd3\x13\xbe\xb0\x99\x89A\rXj \xa4\xc0\x00\x00\u07d4\x97_7d\xe9{\xbc\xcfv|\xbd;y[\xa8m\x8b\xa9\x84\x0e\x89\x12\xc1\xb6\xee\xd0=(\x00\x00\xe0\x94\x97j\x18Sj\xf4\x18tBc\b\x87\x1b\xcd\x15\x12\xa7u\xc9\xf8\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x97n<\xea\xf3\xf1\xafQ\xf8\u009a\xff]\u007f\xa2\x1f\x03\x86\xd8\xee\x89\r\x02\xabHl\xed\xc0\x00\x00\xe0\x94\x97w\xcca\xcfuk\xe3\xb3\xc2\f\xd4I\x1ci\xd2u\xe7\xa1 \x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x97\x81\v\xaf\xc3~\x840c2\xaa\xcb5\xe9*\xd9\x11\xd2=$\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x97\x8cC\f\xe45\x9b\x06\xbc,\xdf\\)\x85\xfc\x95\x0eP\xd5\u0209\x1a\x05V\x90\xd9\u06c0\x00\x00\u07d4\x97\x95\xf6C\x19\xfc\x17\xdd\x0f\x82a\xf9\xd2\x06\xfbf\xb6L\xd0\u0249\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x97\x99\xca!\xdb\xcfi\xbf\xa1\xb3\xf7+\xacQ\xb9\xe3\xcaX|\xf9\x89\\(=A\x03\x94\x10\x00\x00\u07d4\x97\x9c\xbf!\xdf\xec\x8a\xce?\x1c\x19m\x82\u07d6%4\xdf9O\x89\x99\x91\xd4x\xddM\x16\x00\x00\u07d4\x97\x9dh\x1ca}\xa1o!\xbc\xac\xa1\x01\xed\x16\xed\x01Z\xb6\x96\x89e\xea=\xb7UF`\x00\x00\u07d4\x97\x9f0\x15\x8bWK\x99\x9a\xab4\x81\a\xb9\xee\xd8[\x1f\xf8\xc1\x894\x95tD\xb8@\xe8\x00\x00\u07d4\x97\xa8o\x01\xce?|\xfdDA3\x0e\x1c\x9b\x19\xe1\xb1\x06\x06\xef\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x97\xb9\x1e\xfesP\xc2\xd5~~@k\xab\x18\xf3a{\xcd\xe1J\x8a\x02\x1e\x19\x99\xbb\xd5\u04be\x00\x00\u07d4\x97\xd0\xd9r^;p\xe6u\x841s\x93\x8e\xd3q\xb6,\u007f\xac\x89\t79SM(h\x00\x00\u07d4\x97\xd9\xe4jv\x04\u05f5\xa4\xeaN\xe6\x1aB\xb3\xd25\x0f\xc3\xed\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x97\xdc&\xecg\n1\xe0\"\x1d*u\xbc]\xc9\xf9\f\x1fo\u0509\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94\x97\xde!\xe4!\xc3\u007f\xe4\xb8\x02_\x9aQ\xb7\xb3\x90\xb5\xdfx\x04\x8a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4\x97\xe2\x89s\xb8`\xc5g@(\x00\xfb\xb6<\xe3\x9a\x04\x8a=y\x89\x05B%:\x12l\xe4\x00\x00\u07d4\x97\xe5\xcca'\xc4\xf8\x85\xbe\x02\xf4KB\xd1\u0230\xac\x91\u44c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x97\xf1\xfeL\x80\x83\xe5\x96!*\x18w(\xdd\\\xf8\n1\xbe\u0149\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\x97\xf7v\x06W\xc1\xe2\x02u\x90\x86\x96>\xb4!\x1c_\x819\xb9\x8a\n\x8a\t\u007f\xcb=\x17h\x00\x00\xe0\x94\x97\xf9\x9bk\xa3\x13F\u0358\xa9\xfeL0\x8f\x87\u0165\x8cQQ\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x98\n\x84\xb6\x86\xfc1\xbd\xc8<\"\x10XTjq\xb1\x1f\x83\x8a\x89*AUH\xaf\x86\x81\x80\x00\u07d4\x98\x10\xe3J\x94\xdbn\xd1V\xd08\x9a\x0e+\x80\xf4\xfdk\n\x8a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x98\x1d\xdf\x04\x04\xe4\xd2-\xdaUj\a&\xf0\v-\x98\xab\x95i\x8965f3\xeb\xd8\xea\x00\x00\xe0\x94\x98\x1fq'u\xc0\xda\xd9u\x18\xff\xed\xcbG\xb9\xad\x1dl'b\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\x984h!\x80\xb9\x82\xd1f\xba\u06dd\x9d\x1d\x9b\xbf\x01m\x87\xee\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x986\xb4\xd3\x04sd\x1a\xb5j\xee\xe1\x92Bv\x1drrQx\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x989sB\xec_=L\xb8w\xe5N\xf5\xd6\xf1\xd3fs\x1b\u050a\x01@a\xb9\xd7z^\x98\x00\x00\xe0\x94\x98Fd\x886\xa3\a\xa0W\x18O\xd5\x1fb\x8a_\x8c\x12B|\x8a\x04\vi\xbfC\xdc\xe8\xf0\x00\x00\xe0\x94\x98Jy\x85\xe3\xcc~\xb5\xc96\x91\xf6\xf8\xcc{\x8f$]\x01\xb2\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x98]p\xd2\a\x89+\xed9\x85\x90\x02N$!\xb1\xcc\x11\x93Y\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x98m\xf4~v\xe4\u05e7\x89\xcd\xee\x91<\u0243\x16P\x93l\x9d\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\x98t\x80?\xe1\xf3\xa06^y\"\xb1Bp\xea\xeb\x03,\xc1\xb5\x89<\xf5\x92\x88$\xc6\xc2\x00\x00\u07d4\x98ub4\x95\xa4l\xdb\xf2YS\x0f\xf88\xa1y\x9e\u00c9\x91\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x98v\x18\xc8VV |{\xac\x15\a\xc0\xff\xef\xa2\xfbd\xb0\x92\x89\x03}\xfeC1\x89\xe3\x80\x00\u07d4\x98|\x9b\xcdn?9\x90\xa5+\xe3\xed\xa4q\f'Q\x8fOr\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x98\x82\x96|\xeeh\u04a89\xfa\u062bJ|=\xdd\xf6\xc0\xad\u0209Hx\xbe\x1f\xfa\xf9]\x00\x00\u07d4\x98\x85\\}\xfb\xee3SD\x90J\x12\xc4\fs\x17\x95\xb1:T\x899\xfb\xae\x8d\x04-\xd0\x00\x00\u07d4\x98\x9c\f\xcf\xf6T\xda\x03\xae\xb1\x1a\xf7\x01\x05Ea\xd6)~\x1d\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x98\xa0\xe5Lm\x9d\u023e\x96'l\xeb\xf4\xfe\xc4`\xf6#]\x85\x89j\u0202\x10\tR\u01c0\x00\u07d4\x98\xb7i\xcc0\\\xec\xfbb\x9a\x00\xc9\a\x06\x9d~\xf9\xbc:\x12\x89\x01h\u048e?\x00(\x00\x00\xe0\x94\x98\xbaN\x9c\xa7/\xdd\xc2\fi\xb49ov\xf8\x18?z*N\x8a\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\x00\u07d4\x98\xbeimQ\xe3\x90\xff\x1cP\x1b\x8a\x0fc1\xb6(\xdd\u016d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x98\xbe\u04e7.\xcc\xfb\xaf\xb9#H\x92\x93\xe4)\xe7\x03\xc7\xe2[\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x98\xbfJ\xf3\x81\v\x84#\x87\xdbp\xc1MF\t\x96&\x00=\x10\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x98\xc1\x0e\xbf,O\x97\u02e5\xa1\xab?*\xaf\xe1\xca\xc4#\xf8\u02c9\x10CV\x1a\x88)0\x00\x00\u07d4\x98\xc1\x9d\xba\x81\v\xa6\x11\xe6\x8f/\x83\xee\x16\xf6\xe7tO\f\x1f\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x98\xc5IJ\x03\xac\x91\xa7h\xdf\xfc\x0e\xa1\xdd\u0b3f\x88\x90\x19\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\x98\xd2\x04\xf9\b_\x8c\x8e}\xe2>X\x9bd\xc6\xef\xf6\x92\xccc\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x98\xd3s\x19\x92\xd1\xd4\x0e\x12\x11\xc7\xf75\xf2\x18\x9a\xfa\a\x02\xe0\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x98\xe2\xb6\xd6\x06\xfd-i\x91\xc9\xd6\xd4\a\u007f\xdf?\xddE\x85\u06890\xdf\x1ao\x8a\xd6(\x00\x00\u07d4\x98\xe3\xe9\v(\xfc\xca\ue087y\xb8\xd4\nUh\xc4\x11n!\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\x98\xe6\xf5G\u06c8\xe7_\x1f\x9c\x8a\xc2\xc5\xcf\x16'\xbaX\v>\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x98\xf4\xaf:\xf0\xae\xde_\xaf\xdcB\xa0\x81\xec\xc1\xf8\x9e<\xcf \x8a\x01\xfd\x934\x94\xaa_\xe0\x00\x00\u07d4\x98\xf6\xb8\xe6!=\xbc\x9aU\x81\xf4\xcc\xe6e_\x95%+\xdb\a\x89\x11Xr\xb0\xbc\xa40\x00\x00\u07d4\x99\te\r\u05719{\x8b\x8b\x0e\xb6\x94\x99\xb2\x91\xb0\xad\x12\x13\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x99\x11s`\x19G\xc2\bJb\xd69R~\x96\x15\x12W\x9a\xf9\x89 \x86\xac5\x10R`\x00\x00\u07d4\x99\x12\x9d[<\f\xdeG\xea\r\xefM\xfc\a\r\x1fJY\x95'\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x99\x17\u058dJ\xf3A\xd6Q\xe7\xf0\a\\m\xe6\xd7\x14Nt\t\x8a\x012\xd4Gl\b\xe6\xf0\x00\x00\u07d4\x99\x1a\xc7\xcap\x97\x11_& ^\xee\x0e\xf7\xd4\x1e\xb4\xe3\x11\xae\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794\x99#e\xd7d\xc5\xce5@9\xdd\xfc\x91.\x02:u\xb8\xe1h\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x99&F\xac\x1a\u02ab\xf5\u076b\xa8\xf9B\x9a\xa6\xa9Nt\x96\xa7\x8967Pz0\xab\xeb\x00\x00\u07d4\x99&\x83'\xc3s3.\x06\xc3\xf6\x16B\x87\xd4U\xb9\xd5\xfaK\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99(\xffqZ\xfc:+`\xf8\xebL\u013aN\xe8\u06b6\u5749\x17\xda:\x04\u01f3\xe0\x00\x00\u07d4\x992\xef\x1c\x85\xb7Z\x9b*\x80\x05}P\x874\xc5\x10\x85\xbe\u0309\x02\xb8?\xa50\x1dY\x00\x00\xe0\x94\x99?\x14ax`^f\xd5\x17\xbex.\xf0\xb3\xc6\x1aN\x19%\x8a\x01|\x1f\x055\u05e5\x83\x00\x00\xe0\x94\x99A7\x04\xb1\xa3.p\xf3\xbc\ri\u0748\x1c8VkT\u02ca\x05\xcckiF1\xf7\x12\x00\x00\u07d4\x99AR\xfc\x95\xd5\xc1\u028b\x88\x11:\xbb\xadMq\x0e@\xde\xf6\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x99D\xfe\xe9\xd3JJ\x88\x00#\u01c92\xc0\vY\xd5\xc8*\x82\x89(\xa8\xa5k6\x90\a\x00\x00\u07d4\x99L\u00b5\"~\xc3\xcf\x04\x85\x12F|A\xb7\xb7\xb7H\x90\x9f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99q\xdf`\xf0\xaef\xdc\xe9\xe8\xc8N\x17\x14\x9f\t\xf9\xc5/d\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x99v\x94~\xff_j\xe5\xda\b\xddT\x11\x92\xf3x\xb4(\xff\x94\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x99}e\x92\xa3\x15\x89\xac\xc3\x1b\x99\x01\xfb\xeb<\xc3\xd6[2\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99\x82\xa5\x89\x0f\xfbT\x06\u04ec\xa8\u04bf\xc1\xddp\xaa\xa8\n\xe0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99\x87\x8f\x9dn\n~\u066e\u01c2\x97\xb78y\xa8\x01\x95\xaf\xe0\x89\xd7\xc1\x98q\x0ef\xb0\x00\x00\u07d4\x99\x8c\x1f\x93\xbc\xdbo\xf2<\x10\xd0\u0712G(\xb7;\xe2\xff\x9f\x896[\xf3\xa43\xea\xf3\x00\x00\u07d4\x99\x91aL[\xaaG\xddl\x96\x87FE\xf9z\xdd,=\x83\x80\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x99\x92J\x98\x16\xbb}\xdf?\xec\x18D\x82\x8e\x9a\xd7\xd0k\xf4\xe6\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\x99\x99vh\xf7\xc1\xa4\xff\x9e1\xf9\x97z\xe3\"K\u02c8z\x85\x89\x0f\xc969(\x01\xc0\x00\x00\u07d4\x99\x9cI\xc1t\xca\x13\xbc\x83l\x1e\n\x92\xbf\xf4\x8b'\x15C\u0289\xb1\xcf$\xdd\u0431@\x00\x00\u07d4\x99\xa4\xde\x19\xde\u05d0\b\xcf\xdc\xd4]\x01M.XK\x89\x14\xa8\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\x99\xa9k\xf2$.\xa1\xb3\x9e\xceo\xcc\r\x18\xae\xd0\f\x01y\xf3\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x99\xb0\x18\x93+\xca\xd3U\xb6y+%]\xb6p-\xec\x8c\xe5\u0749\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\x99\xb7C\xd1\xd9\xef\xf9\r\x9a\x194\xb4\xdb!\xd5\x19\u061bJ8\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x99\xb8\xc8$\x86\x9d\xe9\xed$\xf3\xbf\xf6\x85L\xb6\xddE\xcc?\x9f\x89e\xea=\xb7UF`\x00\x00\u07d4\x99\xc0\x17L\xf8N\a\x83\xc2 \xb4\xebj\xe1\x8f\xe7\x03\x85J\u04c9py\xa2W=\fx\x00\x00\u07d4\x99\xc1\xd9\xf4\fj\xb7\xf8\xa9/\xce/\xdc\xe4zT\xa5\x86\xc5?\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\x99\xc26\x14\x1d\xae\xc87\xec\xe0O\xda\xee\x1d\x90\u03cb\xbd\xc1\x04\x89ve\x16\xac\xac\r \x00\x00\u07d4\x99\xc3\x1f\xe7HX7\x87\xcd\xd3\xe5%\xb2\x81\xb2\x18\x96\x179\xe3\x897\b\xba\xed=h\x90\x00\x00\u07d4\x99\xc4u\xbf\x02\xe8\xb9!J\xda_\xad\x02\xfd\xfd\x15\xba6\\\f\x89 \t\xc5\u023fo\xdc\x00\x00\u07d4\x99\u0203%\x85F\xcc~N\x97\x1fR.8\x99\x18\xda^\xa6:\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x99\xc9\xf9>E\xfe<\x14\x18\xc3S\xe4\u016c8\x94\xee\xf8\x12\x1e\x89\x05\x85\xba\xf1E\x05\v\x00\x00\xe0\x94\x99\xd1W\x9c\xd4&\x82\xb7dN\x1dOq(D\x1e\xef\xfe3\x9d\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\x99\u0475\x85\x96_@jB\xa4\x9a\x1c\xa7\x0fv\x9evZ?\x98\x8a\x03\x89O\x0eo\x9b\x9fp\x00\x00\u07d4\x99\xdf\xd0PL\x06\xc7C\xe4e4\xfd{U\xf1\xf9\xc7\xec3)\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99\xf4\x14|\xcck\u02c0\u0304.i\xf6\xd0\x0e0\xfaA3\u0649\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\x99\xf7\u007f\x99\x8b \xe0\xbc\xdc\xd9\xfc\x83\x86ARl\xf2Y\x18\xef\x89a\t=|,m8\x00\x00\u07d4\x99\xfa\xd5\x008\xd0\xd9\xd4\xc3\xfb\xb4\xbc\xe0V\x06\xec\xad\xcdQ!\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x99\xfe\r \x12(\xa7S\x14VU\xd4(\xeb\x9f\xd9I\x85\xd3m\x89i \xbf\xf3QZ:\x00\x00\u07d4\x9a\a\x9c\x92\xa6)\xca\x15\xc8\xca\xfa.\xb2\x8d[\xc1z\xf8(\x11\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x9a\r<\xee=\x98\x92\xea;7\x00\xa2\u007f\xf8A@\xd9\x02T\x93\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\x9a$\u038dH\\\xc4\xc8nI\u07b3\x90\"\xf9,t0\xe6~\x89Fy\x1f\xc8N\a\xd0\x00\x00\u07d4\x9a,\xe4;]\x89\u0593k\x8e\x8c5G\x91\xb8\xaf\xff\x96$%\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9a9\x01bS^9\x88w\xe4\x16x}b9\xe0uN\x93|\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9a=\xa6P#\xa10 \xd2!E\xcf\xc1\x8b\xab\x10\xbd\x19\xceN\x89\x18\xbfn\xa3FJ:\x00\x00\xe0\x94\x9a>+\x1b\xf3F\xdd\a\v\x02sW\xfe\xacD\xa4\xb2\xc9}\xb8\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9aL\xa8\xb8!\x17\x89NC\xdbr\xb9\xfax\xf0\xb9\xb9:\xce\t\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\x9aR.R\xc1\x95\xbf\xb7\xcf_\xfa\xae\u06d1\xa3\xbath\x16\x1d\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9aZ\xf3\x1c~\x063\x9a\u0234b\x8d|M\xb0\xce\x0fE\u0224\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u0794\x9ac?\xcd\x11,\xce\xebv_\xe0A\x81ps*\x97\x05\u7708\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x9ac\u0445\xa7\x91)\xfd\xab\x19\xb5\x8b\xb61\xea6\xa4 TN\x89\x02F\xdd\xf9yvh\x00\x00\u07d4\x9ag\b\u0778\x90<(\x9f\x83\xfe\x88\x9c\x1e\xdc\xd6\x1f\x85D#\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9ao\xf5\xf6\xa7\xaf{z\xe0\xed\x9c \xec\xecP#\u0481\xb7\x86\x89\x8a\x12\xb9\xbdjg\xec\x00\x00\xe0\x94\x9a\x82\x82m<)H\x1d\xcc+\u0495\x00G\xe8\xb6\x04\x86\xc38\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x9a\x8e\xcaA\x89\xffJ\xa8\xff~\u0536\xb7\x03\x9f\t\x02!\x9b\x15\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9a\x95;[\xccp\x93y\xfc\xb5Y\u05f9\x16\xaf\u06a5\f\xad\u0309\x05k\xc7^-c\x10\x00\x00\u07d4\x9a\x99\v\x8a\xebX\x8d~\xe7\xec.\xd8\xc2\xe6Os\x82\xa9\xfe\xe2\x89\x01\xd1'\xdbi\xfd\x8b\x00\x00\u07d4\x9a\x9d\x1d\xc0\xba\xa7}n \xc3\xd8I\u01c8b\xdd\x1c\x05L\x87\x89/\xb4t\t\x8fg\xc0\x00\x00\xe0\x94\x9a\xa4\x8cf\xe4\xfbJ\u0419\x93N2\x02.\x82t'\xf2w\xba\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9a\xa80\x8fB\x91\x0eZ\xde\t\xc1\xa5\xe2\x82\xd6\xd9\x17\x10\xbd\xbf\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9a\xaa\xfa\x00gd~\u0659\x06kzL\xa5\xb4\xb3\xf3\xfe\xaao\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9a\xb9\x88\xb5\x05\xcf\xee\x1d\xbe\x9c\u044e\x9bTs\xb9\xa2\xd4\xf56\x89\x11X\xe4`\x91=\x00\x00\x00\u07d4\x9a\xb9\x8dm\xbb\x1e\xaa\xe1mE\xa0EhT\x1a\xd3\xd8\xfe\x06\u0309\x0e\xc5\x04d\xfe#\xf3\x80\x00\xe0\x94\x9a\xba+^'\xffx\xba\xaa\xb5\xcd\u0248\xb7\xbe\x85\\\xeb\xbd\u038a\x02\x1e\f\x00\x13\a\n\xdc\x00\x00\u07d4\x9a\xc4\xdaQ\xd2x\"\xd1\xe2\b\xc9n\xa6J\x1e[U)\x97#\x89\x05lUy\xf7\"\x14\x00\x00\u0794\x9a\xc8S\x97y*i\u05cf(k\x86C*\a\xae\u03b6\x0ed\x88\xc6s\xce<@\x16\x00\x00\xe0\x94\x9a\xc9\a\xee\x85\xe6\xf3\xe2#E\x99\x92\xe2V\xa4?\xa0\x8f\xa8\xb2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9a\xd4\u007f\xdc\xf9\u0354-(\xef\xfd[\x84\x11[1\xa6X\xa1>\x89\xb2Y\xec\x00\xd5;(\x00\x00\u07d4\x9a\xdb\u04fc{\n\xfc\x05\xd1\xd2\xed\xa4\x9f\xf8c\x93\x9cH\xdbF\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4\x9a\xdfE\x8b\xff5\x99\xee\xe1\xa2c\x98\x85\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\x9a\xf9\xdb\xe4t\"\xd1w\xf9E\xbd\xea\xd7\xe6\xd8)05b0\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x9a\xfaSkLf\xbc8\xd8u\u0133\x00\x99\xd9&\x1f\xdb8\xeb\x89\v*\x8f\x84*w\xbc\x80\x00\u07d4\x9b\x06\xad\x84\x1d\xff\xbeL\xcfF\xf1\x03\x9f\u00c6\xf3\xc3!Dn\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9b\x11h\u078a\xb6KGU/3\x89\x80\n\x9c\xc0\x8bFf\u03c9]\u0212\xaa\x111\xc8\x00\x00\u07d4\x9b\x18\x11\xc3\x05\x1fF\xe6d\xaeK\xc9\xc8$\u0445\x92\xc4WJ\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4\x9b\x18G\x86U\xa4\x85\x1c\xc9\x06\xe6`\xfe\xaca\xf7\xf4\u023f\xfc\x89\xe2G\x8d8\x90}\x84\x00\x00\u07d4\x9b\"\xa8\r\\{3t\xa0[D`\x81\xf9}\n4\a\x9e\u007f\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x9b+\xe7\xf5gT\xf5\x05\xe3D\x1a\x10\xf7\xf0\xe2\x0f\xd3\xdd\xf8I\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\x9b2\xcfOQ\x15\xf4\xb3J\x00\xa6La}\xe0c\x875C#\x89\x05\xb8\x1e\u0608 |\x80\x00\u07d4\x9bC\u0739_\xde1\x80u\xa5g\xf1\xe6\xb5v\x17\x05^\xf9\xe8\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\x9bDO\xd37\xe5\xd7R\x93\xad\xcf\xffp\xe1\xea\x01\xdb\x022\"\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9bH$\xff\x9f\xb2\xab\xdaUM\xeeO\xb8\xcfT\x91eW\x061\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9bL'\x15x\f\xa4\xe9\x9e`\xeb\xf2\x19\xf1Y\f\x8c\xadP\n\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\x9bY\xeb!;\x1eue\xe4PG\xe0N\xa07O\x10v-\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9b\\9\xf7\xe0\xac\x16\x8c\x8e\xd0\xed4\x04w\x11}\x1bh.\xe9\x89\x05P\x05\xf0\xc6\x14H\x00\x00\u07d4\x9b^\xc1\x8e\x83\x13\x88}\xf4a\u0490.\x81\xe6z\x8f\x11;\xb1\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9bd\xd3\u034d+s\xf6hA\xb5\xc4k\xb6\x95\xb8\x8a\x9a\xb7]\x89\x01 :Ov\f\x16\x80\x00\u07d4\x9be\x8f\xb3a\xe0F\xd4\xfc\xaa\x8a\xefm\x02\xa9\x91\x11\"6%\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9bfA\xb1>\x17/\xc0r\xcaK\x83'\xa3\xbc(\xa1[f\xa9\x89\x06\x81U\xa46v\xe0\x00\x00\xe0\x94\x9bh\xf6t\x16\xa6;\xf4E\x1a1\x16L\x92\xf6r\xa6\x87Y\xe9\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4\x9bw6i\xe8}v\x01\x8c\t\x0f\x82U\xe5D\t\xb9\u0728\xb2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9bw\xeb\xce\xd7\xe2\x15\xf0\x92\x0e\x8c+\x87\x00$\xf6\xec\xb2\xff1\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9b|\x88\x10\xcc|\u021e\x80Nm>8\x12\x18PG(w\xfe\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9b\xa5=\xc8\xc9^\x9aG/\xeb\xa2\xc4\xe3,\x1d\xc4\xdd{\xabF\x89Hz\x9a0E9D\x00\x00\xe0\x94\x9b\xac\xd3\xd4\x0f;\x82\xac\x91\xa2d\xd9\u060d\x90\x8e\xac\x86d\xb9\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x9b\xb7`\xd5\u0089\xa3\xe1\xdb\x18\xdb\tSE\xcaA;\x9aC\u0089\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\x9b\xb7b\x04\x18j\xf2\xf6;\xe7\x91h`\x16\x87\xfc\x9b\xadf\x1f\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x9b\xb9\xb0*&\xbf\xe1\xcc\xc3\xf0\xc6!\x9e&\x1c9\u007f\xc5\xcax\x89Hz\x9a0E9D\x00\x00\u07d4\x9b\xc5s\xbc\xda#\xb8\xb2o\x90s\xd9\f#\x0e\x8eq\xe0'\v\x896/u\xa40]\f\x00\x00\u07d4\x9b\xd7\u00caB\x100JMe>\xde\xff\x1b<\xe4_\xcexC\x89\x0fI\x89A\xe6d(\x00\x00\xe0\x94\x9b\u0600h\xe10u\xf3\xa8\xca\xc4d\xa5\xf9I\xd6\xd8\x18\xc0\xf6\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x9b\xd9\x05\xf1q\x9f\u01ec\xd0\x15\x9dM\xc1\xf8\xdb/!G#8\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9b\xdb\u071b\x9741\xd1<\x89\xa3\xf9u~\x9b;bu\xbf\u01c9\x1b\x1a}\u03caD\u04c0\x00\u07d4\x9b\xe3\xc3)\xb6*(\xb8\xb0\x88l\xbd\x8b\x99\xf8\xbc\x93\f\xe3\xe6\x89\x04\t\xe5+H6\x9a\x00\x00\xe0\x94\x9b\xf5\x8e\xfb\xea\a\x84\xeb\x06\x8a\xde\u03e0\xbb!P\x84\xc7:5\x8a\x01:k+VHq\xa0\x00\x00\u07d4\x9b\xf6r\xd9y\xb3fR\xfcR\x82Tzjk\xc2\x12\xaeCh\x89#\x8f\xd4,\\\xf0@\x00\x00\xe0\x94\x9b\xf7\x03\xb4\x1c6$\xe1_@T\x96#\x90\xbc\xba0R\xf0\xfd\x8a\x01H>\x01S<.<\x00\x00\u07d4\x9b\xf7\x1f\u007f\xb57\xacT\xf4\xe5\x14\x94\u007f\xa7\xffg(\xf1m/\x89\x01\u03c4\xa3\n\n\f\x00\x00\u07d4\x9b\xf9\xb3\xb2\xf2<\xf4a\xebY\x1f(4\v\xc7\x19\x93\x1c\x83d\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x9b\xfce\x9c\x9c`\x1e\xa4*k!\xb8\xf1p\x84\xec\x87\xd7\x02\x12\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9b\xff\xf5\r\xb3jxUU\xf0vR\xa1S\xb0\xc4+\x1b\x8bv\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9c\x05\xe9\xd0\xf0u\x8eyS\x03q~1\xda!<\xa1W\u618965\u026d\xc5\u07a0\x00\x00\u07d4\x9c\x1bw\x1f\t\xaf\x88*\xf0d0\x83\xde*\xa7\x9d\xc0\x97\xc4\x0e\x89\x86p\xe9\xece\x98\xc0\x00\x00\u07d4\x9c(\xa2\xc4\b`\x91\xcb]\xa2&\xa6W\xce2H\xe8\xea{o\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\u07d4\x9c/\xd5@\x89\xaff]\xf5\x97\x1ds\xb8\x04a`9dsu\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9c4@\x98\xbaaZ9\x8f\x11\xd0\t\x90[\x17|D\xa7\xb6\x02\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9c=\x06\x92\xce\xee\xf8\n\xa4\x96\\\xee\xd2b\xff\xc7\xf0i\xf2\u0709\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9c@\\\xf6\x97\x95a8\x06^\x11\xc5\xf7U\x9eg$[\u0465\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x9cE *%\xf6\xad\x00\x11\xf1\x15\xa5\xa7\"\x04\xf2\xf2\x19\x88f\x8a\x01\x0f\xcf:b\xb0\x80\x98\x00\x00\xe0\x94\x9cI\xde\xffG\b_\xc0\x97\x04\u02a2\u0728\u0087\xa9\xa17\u068a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\x9cK\xbc\xd5\xf1dJo\aX$\xdd\xfe\x85\xc5q\u05ab\xf6\x9c\x89a\x94\x04\x9f0\xf7 \x00\x00\u07d4\x9cRj\x14\x06\x83\xed\xf1C\x1c\xfa\xa1(\xa95\xe2\xb6\x14\u060b\x89\x06\x04o7\xe5\x94\\\x00\x00\xe0\x94\x9cT\xe4\xedG\x9a\x85h)\u01bbB\u069f\vi*u\xf7(\x8a\x01\x97\xa8\xf6\xddU\x19\x80\x00\x00\xe0\x94\x9cX\x1a`\xb6\x10(\xd94\x16y)\xb2-p\xb3\x13\xc3O\u040a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\x9c\\\xc1\x11\t,\x12!\x16\xf1\xa8_N\xe3\x14\bt\x1a}/\x89\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\u07d4\x9ck\u0264k\x03\xaeT\x04\xf0C\xdf\xcf!\x88>A\x10\xcc3\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x9cx\x96?\xbc&<\t\xbdr\xe4\xf8\xde\xf7J\x94u\xf7\x05\\\x8a\x02\ub3b1\xa1r\u0738\x00\x00\u07d4\x9cx\xfb\xb4\xdfv\x9c\xe2\xc1V\x92\f\xfe\xdf\xda\x03:\x0e%J\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x9c{m\xc5\x19\x0f\xe2\x91)c\xfc\xd5yh>\xc79Q\x16\xb0\x89*\x11)\u0413g \x00\x00\u07d4\x9c\x80\xbc\x18\xe9\xf8\u0516\x8b\x18]\xa8\u01df\xa6\xe1\x1f\xfc>#\x89\r\x02\xabHl\xed\xc0\x00\x00\xe0\x94\x9c\x98\xfd\xf1\xfd\u034b\xa8\xf4\u0170L:\xe8X~\xfd\xf0\xf6\xe6\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\x9c\x99\xa1\u0691\u0552\v\xc1N\f\xb9\x14\xfd\xf6+\x94\u02c3X\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\x9c\x99\xb6&\x06(\x1b\\\xef\xab\xf3aV\xc8\xfeb\x83\x9e\xf5\xf3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x9c\x9a\a\xa8\xe5|1r\xa9\x19\xefdx\x94tI\x0f\r\x9fQ\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9c\x9d\xe4G$\xa4\x05M\xa0\xea\xa6\x05\xab\u0300&hw\x8b\xea\x89\n\xd7\xd5\xca?\xa5\xa2\x00\x00\u07d4\x9c\x9f;\x8a\x81\x1b!\xf3\xff?\xe2\x0f\xe9p\x05\x1c\xe6j\x82O\x89>\xc2\u07bc\a\u053e\x00\x00\xe0\x94\x9c\x9f\x89\xa3\x91\x0fj*\xe8\xa9\x10G\xa1z\xb7\x88\xbd\xde\xc1p\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9c\xa0B\x9f\x87O\x8d\xce\xe2\xe9\xc0b\xa9\x02\n\x84*Xz\xb9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9c\xa4.\u7838\x98\xf6\xa5\xcc`\xb5\xa5\u05f1\xbf\xa3\xc321\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9c\xb2\x8a\xc1\xa2\n\x10o\u007f76\x92\xc5\xceLs\xf172\xa1\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9c\xcd\u0732\xcf\u00b2[\br\x9a\n\x98\xd9\xe6\xf0 .\xa2\xc1\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9c\xe2\u007f$^\x02\xd1\xc3\x12\xc1\xd5\x00x\x8c\x9d\xefv\x90E;\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9c\xe56;\x13\xe8#\x8a\xa4\xdd\x15\xac\u0432\xe8\xaf\xe0\x872G\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\x9c\xf2\x92\x8b\xee\xf0\x9a@\xf9\xbf\xc9S\xbe\x06\xa2Q\x11a\x82\xfb\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x9d\x06\x91\x97\xd1\xdeP\x04Z\x18o^\xc7D\xac@\u8bd1\u0189lk\x93[\x8b\xbd@\x00\x00\u07d4\x9d\x0e}\x92\xfb0XS\u05d8&;\xf1^\x97\xc7+\xf9\xd7\xe0\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9d\x0f4~\x82k}\u03aa\xd2y\x06\n5\xc0\x06\x1e\xcf3K\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9d u\x17B,\xc0\xd6\r\xe7\xc27\tzMO\xce \x94\f\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\x9d%\n\xe4\xf1\x10\xd7\x1c\xaf\u01f0\xad\xb5.\x8d\x9a\xcbfy\xb8\x8a\x02\x15mn\x99r\x13\xc0\x00\x00\xe0\x94\x9d+\xfc6\x10o\x03\x82P\xc0\x18\x01hW\x85\xb1l\x86\xc6\r\x8aPw\xd7]\xf1\xb6u\x80\x00\x00\xe0\x94\x9d0\xcb#{\xc0\x96\xf1p6\xfc\x80\xdd!\xcah\x99,\xa2\u064a\x06n\xe71\x8f\u070f0\x00\x00\u07d4\x9d2\x96.\xa9\x97\x00\xd92(\xe9\xdb\xda\xd2\xcc7\xbb\x99\xf0~\x89\xb4c+\xed\xd4\xde\xd4\x00\x00\u07d4\x9d4\xda\xc2[\xd1X(\xfa\xef\xaa\xf2\x8fq\aS\xb3\x9e\x89\u0709;\x1cV\xfe\xd0-\xf0\x00\x00\u07d4\x9d6\x91e\xfbp\xb8\x1a:v_\x18\x8f\xd6\f\xbe^{\th\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9d@\xe0\x12\xf6\x04%\xa3@\xd8-\x03\xa1\xc7W\xbf\xab\xc7\x06\xfb\x89\t4o:\xdd\u020d\x80\x00\u07d4\x9dAt\xaaj\xf2\x84v\xe2)\xda\xdbF\x18\b\b\xc6u\x05\xc1\x89B\x1a\xfd\xa4.\u0597\x00\x00\u07d4\x9dB\x133\x9a\x01U\x18avL\x87\xa9<\xe8\xf8_\x87\x95\x9a\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9dF\f\x1b7\x9d\xdb\x19\xa8\xc8[LgG\x05\r\xdf\x17\xa8u\x89\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4\x9dG\xba[L\x85\x05\xad\x8d\xa4)4(\va\xa0\xe1\xe8\xb9q\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9dM2\x11w%n\xbd\x9a\xfb\xda0A5\xd5\x17\xc3\xdcV\x93\x89!d\xb7\xa0J\u0220\x00\x00\u07d4\x9dO\xf9\x89\xb7\xbe\u066b\x10\x9d\x10\xc8\xc7\xe5_\x02\xd7g4\xad\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\x9dQ\x15C\xb3\xd9\xdc`\xd4\u007f\t\u051d\x01\xb6\u0118\xd8 x\x8a\x02a\x97\xb9Qo\u00d4\x00\x00\u07d4\x9dn\u03e0:\xf2\xc6\xe1D\xb7\xc4i*\x86\x95\x1e\x90.\x9e\x1f\x89\xa2\xa5\xaa`\xad$?\x00\x00\u07d4\x9dvU\xe9\xf3\xe5\xba]n\x87\xe4\x12\xae\xbe\x9e\xe0\u0512G\ue24e\t1\x1c\x1d\x80\xfa\x00\x00\u07d4\x9dx1\xe84\xc2\v\x1b\xaaiz\xf1\xd8\xe0\xc6!\u016f\xff\x9a\x89\x04\xb0m\xbb\xb4\x0fJ\x00\x00\u07d4\x9dx\xa9u\xb7\xdb^M\x8e(\x84\\\xfb\xe7\xe3\x14\x01\xbe\r\u0649H\xa40k\xa2\u5e5c\x8ahX\u02f5,\f\xf75\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94\x9d\u007f\xdapp\xbf>\xe9\xbb\u0664\x1fU\xca\u0505J\xe6\xc2,\x8a\x02U\u02e3\xc4o\xcf\x12\x00\x00\u07d4\x9d\x81\xae\xa6\x9a\xedj\xd0p\x89\xd6\x14E4\x8c\x17\xf3K\xfc[\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x9d\x91\x1f6\x82\xf3/\xe0y.\x9f\xb6\xff<\xfcG\xf5\x89\xfc\xa5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9d\x91;]3\x9c\x95\xd8wEV%c\xfe\xa9\x8b#\xc6\f\u0109\tA0,\u007fM#\x00\x00\u07d4\x9d\x93\xfa\xb6\xe2(E\xf8\xf4Z\aIo\x11\xdeqS\r\xeb\u01c9lO\xd1\xee$nx\x00\x00\u07d4\x9d\x99\xb1\x89\xbb\u0664\x8f\xc2\xe1n\x8f\u0363;\xb9\x9a1{\xbb\x89=\x16\xe1\vm\x8b\xb2\x00\x00\u07d4\x9d\x9cN\xfe\x9fC9\x89\xe2;\xe9@I!S)\xfaU\xb4\u02c9\r\u3c89\x03\u01b5\x80\x00\u07d4\x9d\x9eW\xfd\xe3\x0ePh\xc0>I\x84\x8e\xdc\xe3C\xb7\x02\x83X\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\x9d\xa30\"@\xaf\x05\x11\xc6\xfd\x18W\xe6\u07779Ow\xabk\x89\xa8\r$g~\xfe\xf0\x00\x00\u07d4\x9d\xa4\xec@pw\xf4\xb9p{-\x9d.\xde^\xa5(+\xf1\u07c9\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9d\xa6\t\xfa:~l\xf2\xcc\x0ep\u036b\xe7\x8d\xc4\xe3\x82\xe1\x1e\x89A\rXj \xa4\xc0\x00\x00\xe0\x94\x9d\xa6\x1c\xcdb\xbf\x86\x06V\xe02]qW\xe2\xf1`\xd9;\xb5\x8a\x01\x0f\f\xa9V\xf8y\x9e\x00\x00\xe0\x94\x9d\xa6\xe0u\x98\x9ct\x19\tL\xc9\xf6\xd2\u44d3\xbb\x19\x96\x88\x8a\x02Y\xbbq\u056d\xf3\xf0\x00\x00\u07d4\x9d\xa8\xe2,\xa1\x0eg\xfe\xa4NR^GQ\xee\xac6\xa3\x11\x94\x89\x0e\x189\x8ev\x01\x90\x00\x00\u07d4\x9d\xb2\xe1\\\xa6\x81\xf4\xc6`H\xf6\xf9\xb7\x94\x1e\u040b\x1f\xf5\x06\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9d\xc1\x0f\xa3\x8f\x9f\xb0h\x10\xe1\x1f`\x17>\xc3\xd2\xfdju\x1e\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\x9d\xd2\x19f$\xa1\xdd\xf1J\x9d7^_\a\x15+\xaf\"\xaf\xa2\x89A\xb0^$c\xa5C\x80\x00\u07d4\x9d\xd4k\x1cm?\x05\u279co\x03~\xed\x9aYZ\xf4\xa9\xaa\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x9d\xdd5^cN\xe9\x92~K\u007fl\x97\xe7\xbf:/\x1ehz\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\x9d\xe2\n\xe7j\xa0\x82c\xb2\x05\xd5\x14$a\x96\x1e$\b\xd2f\x89\r\xa93\xd8\xd8\xc6p\x00\x00\u07d4\x9d\xe2\v\xc3~\u007fH\xa8\x0f\xfdz\xd8O\xfb\xf1\xa1\xab\xe1s\x8c\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9d\xe78m\xde@\x1c\xe4\xc6{q\xb6U?\x8a\xa3N\xa5\xa1}\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\x9d\xeb9\x02z\xf8w\x99+\x89\xf2\xecJ\x1f\x82.\xcd\xf1&\x93\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x9d\xef\xe5j\x0f\xf1\xa1\x94}\xba\t#\xf7\xdd%\x8d\x8f\x12\xfaE\x8a\x05\xb1*\ufbe8\x04\x00\x00\x00\u07d4\x9d\xf0W\xcd\x03\xa4\xe2~\x8e\x03/\x85y\x85\xfd\u007f\x01\xad\xc8\u05c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x9d\xf3*P\x1c\vx\x1c\x02\x81\x02/B\xa1)?\xfd{\x89*\x8a\x01\xe7\xe4\x17\x1b\xf4\u04e0\x00\x00\u07d4\x9e\x01vZ\xff\b\xbc\"\x05P\xac\xa5\xea.\x1c\xe8\u5c19#\x8965\u026d\xc5\u07a0\x00\x00\u07d4\x9e \xe5\xfd6\x1e\xab\xcfc\x89\x1f[\x87\xb0\x92h\xb8\xeb7\x93\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9e#,\b\xc1M\xc1\xa6\xed\v\x8a;(h\x97{\xa5\xc1}\x10\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9e#\xc5\u4dc2\xb0\n_\xad\U0006eb47\xda\xcf[\x03g\xa1\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9e59\x90q\xa4\xa1\x01\xe9\x19M\xaa?\t\xf0J\v_\x98p\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9e>\xb5\t'\x8f\xe0\xdc\xd8\xe0\xbb\xe7\x8a\x19N\x06\xb6\x809C\x892\xf5\x1e\u06ea\xa30\x00\x00\u07d4\x9eBrrQk>g\xd4\xfc\xbf\x82\xf5\x93\x90\xd0L\x8e(\xe5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\x9eL\xec5:\xc3\u3043^<\t\x91\xf8\xfa\xa5\xb7\u0428\xe6\x8a\x02\x1e\x18\xb9\xe9\xabE\xe4\x80\x00\u07d4\x9eX\x11\xb4\v\xe1\xe2\xa1\xe1\u048c;\at\xac\xde\n\t`=\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\x9eZ1\x1d\x9fi\x89\x8a|j\x9dc`h\x048\xe6z{/\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4\x9e| P\xa2'\xbb\xfd`\x93~&\x8c\xea>h\xfe\xa8\xd1\xfe\x89\x05k\xc7^-c\x10\x00\x00\u07d4\x9e\u007fe\xa9\x0e\x85\b\x86{\xcc\xc9\x14%j\x1e\xa5t\xcf\a\xe3\x89C8t\xf62\xcc`\x00\x00\xe0\x94\x9e\x81D\xe0\x8e\x89dx\x11\xfekr\xd4E\u05a5\xf8\n\xd2D\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9e\x8fd\xdd\xcd\u9e34Q\xba\xfa\xa25\xa9\xbfQ\x1a%\xac\x91\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\x9e\x95\x1fm\xc5\xe3R\xaf\xb8\xd0B\x99\xd2G\x8aE\x12Y\xbfV\x89\x03\xe7A\x98\x81\xa7:\x00\x00\u07d4\x9e\x96\r\xcd\x03\u057a\x99\xcb\x11]\x17\xffL\t$\x8a\xd4\u043e\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9e\xafj2\x8a@v\x02N\xfakg\xb4\x8b!\xee\xdc\xc0\xf0\xb8\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\x9e\xb1\xffqy\x8f(\xd6\xe9\x89\xfa\x1e\xa0X\x8e'\xba\x86\xcb}\x89\a\xa1\xfe\x16\x02w\x00\x00\x00\u07d4\x9e\xb2\x81\xc3'\x19\xc4\x0f\xdb>!m\xb0\xf3\u007f\xbcs\xa0&\xb7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\x9e\xb3\xa7\xcb^g&Bz:6\x1c\xfa\x8dad\xdb\u043a\x16\x89+\x95\xbd\xcc9\xb6\x10\x00\x00\u07d4\x9e\xb7\x83N\x17\x1dA\xe0i\xa7yG\xfc\xa8v\"\xf0\xbaNH\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\x9e\xc0>\x02\u51f7v\x9d\xefS\x84\x13\xe9\u007f~U\xbeq\u060a\x04+\xf0kx\xed;P\x00\x00\u07d4\x9e\u02eb\xb0\xb2'\x82\xb3uD)\xe1uz\xab\xa0K\x81\x18\x9f\x89,\xa7\xbb\x06\x1f^\x99\x80\x00\u07d4\x9e\xce\x14\x00\x80\t6\xc7\xc6H_\xcd\xd3b`\x17\u041a\xfb\xf6\x89\x10\xce\x1d=\x8c\xb3\x18\x00\x00\u07d4\x9e\xd4\xe6?ReB\xd4O\xdd\xd3MY\xcd%8\x8f\xfdk\u0689\u049b4\xa4cH\x94\x00\x00\u07d4\x9e\xd8\x0e\xda\u007fU\x05M\xb9\xfbR\x82E\x16\x88\xf2k\xb3t\xc1\x89\x10CV\x1a\x88)0\x00\x00\u07d4\x9e\u0710\xf4\xbe!\be!J\xb5\xb3^Z\x8d\xd7t\x15'\x9d\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9e\u07acL\x02k\x93\x05M\u0171\xd6a\fo9`\xf2\xads\x89A\rXj \xa4\xc0\x00\x00\u07d4\x9e\xe9?3\x9eg&\xece\xee\xa4O\x8aK\xfe\x10\xda=2\x82\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\x9e\xe9v\f\xc2s\xd4pj\xa0\x83u\xc3\xe4o\xa20\xaf\xf3\u054a\x01\xe5.3l\xde\"\x18\x00\x00\u07d4\x9e\xeb\a\xbd+x\x90\x19^}F\xbd\xf2\a\x1bf\x17QM\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\x9e\xefD-)\x1aD}t\xc5\xd2S\u011e\xf3$\xea\xc1\xd8\xf0\x89\xb9f\b\xc8\x10;\xf0\x00\x00\u07d4\x9e\xf1\x89k\x00|2\xa1Q\x14\xfb\x89\xd7=\xbdG\xf9\x12+i\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9f\x01w\x06\xb80\xfb\x9c0\ufc20\x9fPk\x91WEu4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9f\x10\xf2\xa0F;e\xae0\xb0p\xb3\xdf\x18\xcfF\xf5\x1e\x89\xbd\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\x9f\x19\xfa\u0223$7\xd8\n\u0183z\v\xb7\x84\x17)\xf4\x97.\x89#=\xf3)\x9far\x00\x00\u07d4\x9f\x1a\xa8\xfc\xfc\x89\xa1\xa52\x8c\xbdcD\xb7\x1f'\x8a,\xa4\xa0\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\x9f!0,\xa5\tk\xeat\x02\xb9\x1b\x0f\xd5\x06%O\x99\x9a=\x89C\x97E\x1a\x00=\xd8\x00\x00\u07d4\x9f'\x1d(U\x00\xd78F\xb1\x8fs>%\u074bO]J\x8b\x89'#\xc3F\xae\x18\b\x00\x00\u07d4\x9f4\x97\xf5\xef_\xe60\x95\x83l\x00N\xb9\xce\x02\xe9\x01;K\x89\"V\x86\x1b\xf9\xcf\b\x00\x00\xe0\x94\x9f:t\xfd^~\xdc\xc1\x16)\x93\x17\x13\x81\u02f62\xb7\xcf\xf0\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\x9fF\xe7\xc1\xe9\a\x8c\xae\x860Z\xc7\x06\v\x01F}f\x85\xee\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\x9fIl\xb2\x06\x95c\x14M\b\x11g{\xa0\xe4q:\nAC\x89<\xd2\xe0\xbfc\xa4H\x00\x00\u07d4\x9fJq\x95\xac|\x15\x1c\xa2X\xca\xfd\xa0\u02b0\x83\xe0I\xc6\x02\x89SS\x8c2\x18\\\xee\x00\x00\u07d4\x9fJ\xc9\xc9\xe7\xe2L\xb2DJ\x04T\xfa[\x9a\xd9\xd9-8S\x89-C\xf3\xeb\xfa\xfb,\x00\x00\u07d4\x9f_D\x02kWjJ\xdbA\xe9YaV\x1dA\x03\x9c\xa3\x91\x89\r\x8drkqw\xa8\x00\x00\u07d4\x9f`{?\x12F\x9fDa!\u03bf4u5kq\xb42\x8c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\x9fa\xbe\xb4o^\x85=\n\x85!\xc7Dnh\xe3L}\ts\x89\x1e[\x8f\xa8\xfe*\xc0\x00\x00\u07d4\x9fd\xa8\xe8\xda\xcfJ\xde0\xd1\x0fMY\xb0\xa3\u056b\xfd\xbft\x8966\x9e\xd7t}&\x00\x00\u07d4\x9ff.\x95'A!\xf1wVncm#\x96L\xf1\xfdho\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9fj2*mF\x99\x81Bj\xe8D\x86]~\xe0\xbb\x15\u01f3\x89\x02\xb5\xeeW\x92\x9f\u06c0\x00\u07d4\x9fy\x86\x92J\xeb\x02h|\xd6A\x89\x18\x9f\xb1g\xde\xd2\xdd\\\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\x9fz\x03\x92\xf8Ws.0\x04\xa3u\xe6\xb1\x06\x8dI\xd801\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9f\x82E\u00eb}\x171d\x86\x1c\u04d9\x1b\x94\xf1\xba@\xa9:\x89\x9b\ny\x1f\x12\x110\x00\x00\u07d4\x9f\x83\xa2\x93\xc3$\xd4\x10l\x18\xfa\xa8\x88\x8fd\u0499\x05L\xa0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\x9f\x86\xa0f\xed\xb6\x1f\xcbXV\u0793\xb7\\\x8cy\x18d\xb9{\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\x9f\x98\xeb4\xd4iy\xb0\xa6\u078b\x05\xaaS:\x89\xb8%\xdc\xf1\x89\x04\xb0m\xbb\xb4\x0fJ\x00\x00\xe0\x94\x9f\x9f\xe0\xc9_\x10\xfe\xe8z\xf1\xaf r6\xc8\xf3aN\xf0/\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\x9f\xae\xa1\xc5\xe8\x1ez\xcb?\x17\xf1\xc3Q\xee.\u0649\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa0\b\x01\x98c\xc1\xa7|\x14\x99\xeb9\xbb\u05ff-\u05e3\x1c\xb9\x89\amA\xc6$\x94\x84\x00\x00\u07d4\xa0\t\xbf\ao\x1b\xa3\xfaW\u04a7!r\x18\xbe\xd5VZzz\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa0\x1e\x94v\u07c4C\x18%\xc86\xe8\x80:\x97\xe2/\xa5\xa0\u034a\x01EB\xba\x12\xa37\xc0\x00\x00\u0794\xa0\x1f\x12\xd7\x0fD\xaa{\x11;(\\\"\xdc\xdbE\x874T\xa7\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xa0\x1f\u0450j\x90\x85\x06\xde\xda\xe1\xe2\b\x12\x88r\xb5n\u7489\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xa0\"\x82@\xf9\x9e\x1d\xe9\xcb2\xd8,\x0f/\xa9\xa3\xd4K\v\xf3\x89V\xbcu\xe2\xd61\x00\x00\x00\xe0\x94\xa0+\xdedahn\x19\xace\f\x97\r\x06r\xe7m\xcbO\u008a\x01\xe0\x92\x96\xc37\x8d\xe4\x00\x00\u07d4\xa0,\x1e4\x06O\x04u\xf7\xfa\x83\x1c\xcb%\x01L:\xa3\x1c\xa2\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\xa0-\u01aa2\x8b\x88\r\u97acTh#\xfc\xcfw@G\xfb\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xa0.?\x8fYY\xa7\xaa\xb7A\x86\x12\x12\x9bp\x1c\xa1\xb8\x00\x10\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa04\u007f\n\x98wc\x90\x16\\\x16m2\x96;\xf7M\xcd\n/\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa05\xa3e$x\xf8-\xbdm\x11_\xaa\x8c\xa9F\xec\x9eh\x1d\x89\x05\xf4\xe4-\u052f\xec\x00\x00\u07d4\xa0:=\xc7\xc53\xd1tB\x95\xbe\x95]a\xaf?R\xb5\x1a\xf5\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xa0E\x9e\xf3i:\xac\xd1d|\xd5\u0612\x989 L\xefS\xbe\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa0O*\xe0*\xdd\x14\xc1/\xafe\xcb%\x90\"\u0403\n\x8e&\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xa0l\xd1\xf3\x969l\ndFFQ\xd7\xc2\x05\xef\xaf8|\xa3\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xa0ri\x1c\x8d\xd7\xcdB7\xffr\xa7\\\x1a\x95\x06\xd0\xce[\x9e\x89\x14\x0e\xc8\x0f\xa7\xee\x88\x00\x00\u07d4\xa0r\u03beb\xa9\xe9\xf6\x1c\xc3\xfb\xf8\x8a\x9e\xfb\xfe>\x9a\x8dp\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xa0v\x82\x00\v\x1b\xcf0\x02\xf8\\\x80\xc0\xfa)I\xbd\x1e\x82\xfd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa0z\xa1mt\xae\u8a63(\x8dR\xdb\x15Q\u0553\x882\x97\x89 \x86\xac5\x10R`\x00\x00\u07d4\xa0\x8d![[j\xacHa\xa2\x81\xac~@\vx\xfe\xf0L\xbf\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa0\x95\x19p\xdf\u0403/\xb8;\xda\x12\xc25E\xe7\x90Aul\x89 \x86\xac5\x10R`\x00\x00\u07d4\xa0\x9fM^\xaae\xa2\xf4\xcbu\nI\x924\x01\xda\u5410\xaf\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\xe0\x94\xa0\xa0\xe6R\x04T\x1f\u029b/\xb2\x82\u0355\x13\x8f\xae\x16\xf8\t\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa0\xaa_\x02\x01\xf0M;\xbe\xb8\x98\x13/|\x11g\x94f\xd9\x01\x89\x01\xfb\xedR\x15\xbbL\x00\x00\u07d4\xa0\xaa\xdb\xd9P\x97\"p_m#X\xa5\u01df7\x97\x0f\x00\xf6\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa0\xb7q\x95\x1c\xe1\xde\xee6:\xe2\xb7q\xb7>\a\u0135\xe8\x00\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xa0\xde\\`\x1eif5\u0198\xb7\xae\x9c\xa4S\x9f\u01f9A\xec\x89\x12\xc3\xcb\xd7\x04\xc9w\x00\x00\u07d4\xa0\xe8\xbaf\x1bH\x15L\xf8C\xd4\u00a5\xc0\xf7\x92\xd5(\xee)\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xa0\xfc~S\xc5\xeb\xd2z*\xbd\xacE&\x1f\x84\xab;Q\xae\xfb\x89\xa3\x13\xda\xec\x9b\xc0\xd9\x00\x00\xe0\x94\xa0\xff[L\xf0\x16\x02~\x83#I}D(\xd3\xe5\xa8;\x87\x95\x8a\x01e\x98\xd3\xc8>\xc0B\x00\x00\u07d4\xa1\x06F[\xbd\x19\u1dbc\xe5\r\x1b\x11W\xdcY\tZ60\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xa1\x06\xe6\x92>\xddS\u028e\xd6P\x96\x8a\x91\b\xd6\xcc\xfd\x96p\x8a\x02\x02\xfe\x15\x05\xaf\uc240\x00\u07d4\xa1\t\u12f0\xa3\x9c\x9e\xf8/\xa1\x95\x97\xfc^\xd8\xe9\xebmX\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4\xa1\x1a\x03\u013b&\xd2\x1e\xffg}]U\\\x80\xb2TS\xeez\x89\x03\xcb'Y\xbcA\x0f\x80\x00\u07d4\xa1\x1e\xff\xabl\xf0\xf5\x97,\xff\xe4\xd5e\x96\xe9\x89h\x14J\x8f\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4\xa1 M\xad_V\a(\xa3\\\r\x8f\u01d4\x81\x05{\xf7s\x86\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa1&#\xe6)\u07d3\tg\x04\xb1`\x84\xbe,\u061dV-\xa4\x8a\x01\xcc\xc92E\x11\xe4P\x00\x00\xe0\x94\xa1*l-\x98]\xaf\x0eO_ z\xe8Q\xaa\xf7)\xb32\u034a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa13m\xfb\x96\xb6\xbc\xbeK>\xdf2\x05\xbeW#\xc9\x0f\xadR\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xa1;\x9d\x82\xa9\x9b<\x9b\xbaZ\xe7.\xf2\x19\x9e\xdc};\xb3l\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\xa1<\xfe\x82mm\x18A\u072eD;\xe8\u00c7Q\x816\xb5\xe8\x8a\x1d\xa5jK\b5\xbf\x80\x00\x00\xe0\x94\xa1C.\xd2\u01b7wz\x88\xe8\xd4m8\x8epG\u007f \x8c\xa5\x8a\x01\xb1\xa7\xe4\x13\xa1\x96\xc5\x00\x00\u07d4\xa1D\xf6\xb6\x0fr\xd6J!\xe30\xda\xdbb\u0619\n\xde+\t\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa1P%\xf5\x95\xac\xdb\xf3\x11\x0fw\u017f$G~eH\xf9\xe8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1X\x14\x8a.\x0f>\x92\xdc,\xe3\x8f\xeb\xc2\x01\a\xe3%<\x96\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1a`\x85\x1d+\x9c4\x9b\x92\xe4o\x82\x9a\xbf\xb2\x10\x945\x95\x89a\t=|,m8\x00\x00\u07d4\xa1f\xf9\x11\xc6D\xac2\x13\u049e\x0e\x1a\xe0\x10\xf7\x94\u056d&\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1m\x9e=c\x98aY\xa8\x00\xb4h7\xf4^\x8b\xb9\x80\xee\v\x89n\x11u\xdaz\xd1 \x00\x00\u07d4\xa1pp\xc2\xe9\u0169@\xa4\xec\x0eIT\xc4\xd7\xd6C\xbe\x8fI\x89lk\x17\x03;6\x1c\x80\x00\u07d4\xa1|\x9eC#\x06\x95\x18\x18\x9dR\a\xa0r\x8d\u02d20j?\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa1\x83`\xe9\x85\xf2\x06.\x8f\x8e\xfe\x02\xad,\xbc\x91\xad\x9aZ\xad\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xa1\x91\x14\x05\xcfn\x99\x9e\xd0\x11\xf0\xdd\xcd*O\xf7\u008f%&\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xa1\x92i\x80\a\xcc\x11\xaa`=\"\x1d_\xee\xa0v\xbc\xf7\xc3\r\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1\x92\xf0j\xb0R\xd5\xfd\u007f\x94\xee\xa81\x8e\x82x\x15\xfegz\x89\a\x1f\x8a\x93\xd0\x1eT\x00\x00\u07d4\xa1\x99\x81D\x96\x8a\\p\xa6AUT\xce\xfe\u0082F\x90\u0125\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa1\xa1\xf0\xfam \xb5\nyO\x02\xefR\b\\\x9d\x03j\xa6\u028965\u026d\xc5\u07a0\x00\x00\u07d4\xa1\xae\x8dE@\xd4\xdbo\xdd\xe7\x14oA[C\x1e\xb5\\y\x83\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xa1\xb4|M\x0e\xd6\x01\x88B\xe6\xcf\xc8c\n\u00e3\x14.^k\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xa1\xc4\xf4Z\x82\xe1\xc4x\xd8E\b.\xb1\x88u\xc4\xeae9\xab\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xa1\xdc\xd0\xe5\xb0Z\x97|\x96#\xe5\xae/Y\xb9\xad\xa2\xf3>1\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xa1\xe48\n;\x1ft\x96s\xe2p\"\x99\x93\xeeU\xf3Vc\xb4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1\xf1\x93\xa0Y/\x1f\xeb\x9f\xdf\xc9\n\xa8\x13xN\xb8\x04q\u0249K\xe4\xe7&{j\xe0\x00\x00\u07d4\xa1\xf2\x85@P\xf8re\x8e\xd8.R\xb0\xad{\xbc\x1c\xb9!\xf6\x89m\x03\x17\xe2\xb3&\xf7\x00\x00\u07d4\xa1\xf5\xb8@\x14\rZ\x9a\xce\xf4\x02\xac<\u00c8jh\xca\xd2H\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa1\xf7e\xc4O\xe4_y\x06w\x94HD\xbeO-B\x16_\xbd\x89\xc7\xe9\xcf\xdev\x8e\xc7\x00\x00\u07d4\xa1\xf7\xdd\xe1\xd78\xd8\xcdg\x9e\xa1\xee\x96[\xee\"K\xe7\xd0M\x89=\x18DP\xe5\xe9<\x00\x00\u07d4\xa1\xf8\u063c\xf9\x0ew\u007f\x19\xb3\xa6Iu\x9a\xd9P'\xab\xdf\u00c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa2\x02TrB\x80onp\xe7@X\xd6\xe5)-\xef\xc8\xc8\u0509l\x87T\xc8\xf3\f\b\x00\x00\u07d4\xa2\r\a\x1b\x1b\x000cI}y\x90\xe1$\x9d\xab\xf3l5\xf7\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa2\r\x8f\xf6\f\xaa\xe3\x1d\x02\xe0\xb6e\xfaC]v\xf7|\x94B\x89\x1a\x8a\x90\x9d\xfc\xef@\x00\x00\u07d4\xa2\x11\xda\x03\xcc\x0e1\xec\xceS\t\x99\x87\x18QU(\xa0\x90\u07c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa2\x14B\xab\x054\n\xdeh\xc9\x15\xf3\xc39\x9b\x99U\xf3\xf7\xeb\x89*\x03I\x19\u07ff\xbc\x00\x00\u07d4\xa2\"\"Y\u075c>=\xed\x12p\x84\xf8\b\xe9*\x18\x870,\x89\b\xc83\x9d\xaf\xedH\x00\x00\u07d4\xa2*\xde\r\xdb\\n\xf8\xd0\u034d\xe9M\x82\xb1\x10\x82\xcb.\x91\x897KW\xf3\xce\xf2p\x00\x00\u07d4\xa2L:\xb6!\x81\xe9\xa1[x\xc4b\x1eL|X\x81'\xbe&\x89\b\xcd\xe4:\x83\xd31\x00\x00\u07d4\xa2W\xadYK\u0603(\xa7\xd9\x0f\xc0\xa9\a\u07d5\xee\xca\xe3\x16\x89\x1c7\x86\xff8F\x93\x00\x00\u07d4\xa2[\bd7\xfd!\x92\u0420\xf6On\xd0D\xf3\x8e\xf3\xda2\x89\x12)\x0f\x15\x18\v\xdc\x00\x00\u07d4\xa2v\xb0X\u02d8\u060b\xee\xdbg\xe5CPl\x9a\r\x94p\u0609\x90\xaa\xfcv\xe0/\xbe\x00\x00\u07d4\xa2\x82\xe9i\xca\xc9\xf7\xa0\xe1\xc0\u0350\xf5\xd0\xc48\xacW\r\xa3\x89\"\a\xeb\x89\xfc'8\x00\x00\xe0\x94\xa2\x91\xe9\u01d9\rU-\u046e\x16\u03bc?\xca4,\xba\xf1\u044a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xa2\x93\x19\xe8\x10i\xe5\xd6\r\xf0\x0f=\xe5\xad\xee5\x05\xec\xd5\xfb\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xa2\x96\x8f\xc1\xc6K\xac\vz\xe0\u058b\xa9I\x87Mm\xb2S\xf4\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xa2\x9d[\xdat\xe0\x03GHr\xbdX\x94\xb8\x853\xffd\u00b5\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa2\x9df\x1acv\xf6m\vt\xe2\xfe\x9d\x8f&\xc0$~\xc8L\x89\xdf3\x04\a\x9c\x13\xd2\x00\x00\u07d4\xa2\xa45\xdeD\xa0\x1b\xd0\ucc9eD\xe4vD\xe4j\f\xdf\xfb\x89\x1b\x1dDZz\xff\xe7\x80\x00\u07d4\xa2\xac\xe4\u0253\xbb\x1eS\x83\xf8\xact\xe1y\x06n\x81O\x05\x91\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xa2\xb7\x01\xf9\xf5\xcd\u041eK\xa6+\xae\xba\u3a02W\x10X\x85\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa2\u0145O\xf1Y\x9f\x98\x89,W%\xd2b\xbe\x1d\xa9\x8a\xad\xac\x89\x11\t\xff30\x10\xe7\x80\x00\u07d4\xa2\xc7\xea\xff\xdc,\x9d\x93sE l\x90\x9aR\u07f1LG\x8f\x89\a\xc0\x86\x0eZ\x80\xdc\x00\x00\u07d4\xa2\u04aabk\t\xd6\xd4\xe4\xb1?\u007f\xfcZ\x88\xbdz\xd3gB\x89\xfb\x80xPuS\x83\x00\x00\u07d4\xa2\u04cd\xe1\xc79\x06\xf6\xa7\xcan\xfe\xb9|\xf6\xf6\x9c\xc4!\xbe\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa2\xdce\xee%kY\xa5\xbdy)wO\x90K5\x8d\U000ed84a\x04\x83\xbc\xe2\x8b\xeb\t\xf8\x00\x00\u07d4\xa2\xe0h:\x80]\xe6\xa0^\xdb/\xfb\xb5\xe9o\x05p\xb67\u00c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa2\u1e2a\x90\x0e\x9c\x13\x9b?\xa1\"5OaV\xd9*\x18\xb1\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xa2\u2d54\x1e\f\x01\x94K\xfe\x1d_\xb4\xe8\xa3K\x92,\u03f1\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa2\xe4`\xa9\x89\xcb\x15V_\x9e\u0327\xd1!\xa1\x8eN\xb4\x05\xb6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa2\xec\xce,I\xf7*\t\x95\xa0\xbd\xa5z\xac\xf1\xe9\xf0\x01\xe2*\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xa2\xf4r\xfeO\"\xb7}\xb4\x89!\x9e\xa4\x02=\x11X*\x93)\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xa2\xf7\x98\xe0w\xb0}\x86\x12N\x14\a\xdf2\x89\r\xbbKcy\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa2\xf8k\xc0a\x88N\x9e\xef\x05d\x0e\xddQ\xa2\xf7\xc0Yli\x89llD\xfeG\xec\x05\x00\x00\u07d4\xa2\xfa\x17\xc0\xfbPl\xe4\x94\x00\x8b\x95W\x84\x1c?d\x1b\x8c\xae\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa3\x04X\x8f\r\x85\f\xd8\u04cfv\xe9\xe8<\x1b\xf6>3>\u0789\x02(V\x01!l\x8c\x00\x00\u07d4\xa3\x05\x8cQszN\x96\xc5_.\xf6\xbd{\xb3X\x16~\u00a7\x89 \xdb:\xe4H\x1a\u0500\x00\u07d4\xa3\t\xdfT\u02bc\xe7\f\x95\xec03\x14\x9c\xd6g\x8ao\xd4\u03c9\f\x1f\x12\xc7Q\x01X\x00\x00\u07d4\xa3\nER\x0eR\x06\xd9\x00@p\xe6\xaf>{\xb2\xe8\xddS\x13\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xa3\x0e\n\xcbSL\x9b0\x84\xe8P\x1d\xa0\x90\xb4\xeb\x16\xa2\xc0\u0349lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3 0\x95\xed\xb7\x02\x8ehq\xce\n\x84\xf5HE\x9f\x830\n\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa3!\t\x1d0\x18\x06By\xdb9\x9d+*\x88\xa6\xf4@\xae$\x89\xadx\xeb\u016cb\x00\x00\x00\u07d4\xa3#-\x06\x8dP\x06I\x03\xc9\xeb\xc5c\xb5\x15\xac\u0237\xb0\x97\x89l\x87T\xc8\xf3\f\b\x00\x00\xe0\x94\xa3$\x1d\x89\n\x92\xba\xf5)\b\xdcJ\xa0Irk\xe4&\xeb\u04ca\x04<-\xa6a\xca/T\x00\x00\u07d4\xa3)F&\xec)\x84\xc4;C\xdaM]\x8eFi\xb1\x1dKY\x896\xa4\xcfcc\x19\xc0\x00\x00\u07d4\xa3,\xf7\xdd\xe2\f=\xd5g\x9f\xf5\xe3%\x84\\p\u0156&b\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa39\xa3\xd8\xca(\x0e'\xd2A[&\xd1\xfcy2(\xb6`C\x896\U00086577\x8f\xf0\x00\x00\u07d4\xa3<\xb4P\xf9[\xb4n%\xaf\xb5\x0f\xe0_\xee\xe6\xfb\x8c\xc8\xea\x89*\x11)\u0413g \x00\x00\u07d4\xa3?p\xdaru\xef\x05q\x04\u07e7\xdbd\xf4r\xe9\xf5\xd5S\x89\x04YF\xb0\xf9\xe9\xd6\x00\x00\u07d4\xa3@v\xf8K\xd9\x17\xf2\x0f\x83B\u024b\xa7\x9eo\xb0\x8e\xcd1\x89\u3bb5sr@\xa0\x00\x00\u07d4\xa3C\x0e\x1fd\u007f2\x1e\xd3G9V##\xc7\xd6#A\vV\x8964\xfb\x9f\x14\x89\xa7\x00\x00\u07d4\xa3O\x9dV\x8b\xf7\xaf\xd9L*[\x8a_\xf5\\f\xc4\by\x99\x89\x84}P;\"\x0e\xb0\x00\x00\u07d4\xa3V\x06\xd5\x12 \xee\u007f!F\xd4\x11X.\xe4\xeeJEYn\x89\u062a\xbe\b\v\xc9@\x00\x00\u07d4\xa3VU\x1b\xb7}OE\xa6\xd7\xe0\x9f\n\b\x9ey\u0322I\u02c9\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\xa3\\\x19\x13,\xac\x195Wj\xbf\xedl\x04\x95\xfb\a\x88\x1b\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3e\x91\x8b\xfe?&'\xb9\xf3\xa8gu\xd8un\x0f\u0629K\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xa3n\r\x94\xb9Sd\xa8&q\xb6\b\xcb-72Ea)\t\x89\b!\xd2!\xb5)\x1f\x80\x00\u07d4\xa3u\xb4\xbc$\xa2N\x1fyu\x93\xcc0+/3\x10c\xfa\\\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa3v\"\xac\x9b\xbd\xc4\xd8+u\x01]t[\x9f\x8d\xe6Z(\uc25d\xc0\\\xce(\u00b8\x00\x00\xe0\x94\xa3y\xa5\a\fP=/\xac\x89\xb8\xb3\xaf\xa0\x80\xfdE\xedK\xec\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\xa3\x80-\x8ae\x9e\x89\xa2\xc4~\x90T0\xb2\xa8'\x97\x89P\xa7\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa3\x83\x06\xcbp\xba\xa8\u4446\xbdh\xaap\xa8=$/)\a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3\x84vi\x1d4\x94.\xeak/v\x88\x92#\x04}\xb4az\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3\x87\xceN\x96\x1axG\xf5`\a\\d\xe1YkVA\xd2\x1c\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\xa3\x87\xec\xde\x0e\xe4\xc8\a\x94\x99\xfd\x8e\x03G;\u060a\xd7R*\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xa3\x88:$\xf7\xf1f _\x1aj\x99I\al&\xa7nqx\x89b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x94\xa3\x8b[\xd8\x1a\x9d\xb9\u04b2\x1d^\xc7\xc6\x05R\xcd\x02\xedV\x1b\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xa3\x90\xca\x12+\x85\x01\xee>^\a\xa8\xcaKA\x9f~M\xae\x15\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xa3\x93*1\xd6\xffu\xfb;\x12q\xac\xe7\u02a7\xd5\xe1\xff\x10Q\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xa3\x94\xadO\xd9\xe6S\x0eo\\S\xfa\xec\xbe\u0781\xcb\x17-\xa1\x8a\x01/\x93\x9c\x99\xed\xab\x80\x00\x00\u07d4\xa3\x97\x9a\x92v\n\x13Z\xdfi\xd7/u\xe1gu_\x1c\xb8\u00c9\x05k\xc7^-c\x10\x00\x00\xe0\x94\xa3\x9b\xfe\xe4\xae\u027du\xbd\"\u01b6r\x89\x8c\xa9\xa1\xe9]2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa3\xa2b\xaf\u0493h\x19#\b\x92\xfd\xe8O-ZYJ\xb2\x83\x89e\xea=\xb7UF`\x00\x00\u07d4\xa3\xa2\xe3\x19\xe7\u04e1D\x8bZ\xa2F\x89S\x16\f-\xbc\xbaq\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3\xa5{\a\x16\x13(\x04\xd6\n\xac(\x11\x97\xff+=#{\x01\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xa3\xa9>\xf9\xdb\xea&6&=\x06\xd8I/jA\u0790|\"\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94\xa3\xae\x18y\x00}\x80\x1c\xb5\xf3RqjM\u063a'!\xde=\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xa3\xba\r:6\x17\xb1\xe3\x1bNB,\xe2i\xe8s\x82\x8d]i\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\u07d4\xa3\xbc\x97\x9bp\x80\t/\xa1\xf9/n\x0f\xb3G\u2359PE\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\xa3\xbf\xf1\u07e9\x97\x16h6\f\r\x82\x82\x842\xe2{\xf5Ng\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xa3\xc1J\xce(\xb1\x92\u02f0b\x14_\u02fdXi\xc6rq\xf6\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa3\xc3:\xfc\x8c\xb4pN#\x15=\xe2\x04\x9d5\xaeq3$r\x89+X\xad\u06c9\xa2X\x00\x00\u07d4\xa3\u0430<\xff\xbb&\x9fyj\u009d\x80\xbf\xb0}\xc7\u01ad\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa3\u0543\xa7\xb6[#\xf6\vy\x05\xf3\xe4\xaab\xaa\xc8\u007fB'\x898\xbe\xfa\x12mZ\x9f\x80\x00\u07d4\xa3\xdb6J3-\x88K\xa9;&\x17\xaeM\x85\xa1H\x9b\xeaG\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xa3\xe0Q\xfbtJ\xa3A\f;\x88\xf8\x99\xf5\xd5\u007f\x16\x8d\xf1-\x89\xa00\xdc\xeb\xbd/L\x00\x00\u07d4\xa3\xe3\xa6\xeaP\x95s\xe2\x1b\xd0#\x9e\xce\x05#\xa7\xb7\u061b/\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xa3\xf4\xad\x14\xe0\xbbD\xe2\xce,\x145\x9cu\xb8\xe72\xd3pT\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa3\xfa\xccP\x19\\\vI3\xc8X\x97\xfe\xcc[\xbd\x99\\4\xb8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa4\x03Z\xb1\xe5\x18\b!\xf0\xf3\x80\xf1\x13\x1bs\x87\xc8\u0641\u0349\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa4\n\xa2\xbb\xce\fr\xb4\xd0\xdf\xff\xccBq[+T\xb0\x1b\xfa\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa4\x19\xa9\x84\x14#c&uuV`\x894\x0e\xea\x0e\xa2\b\x19\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\xa4!\u06f8\x9b:\aA\x90\x84\xad\x10\xc3\xc1]\xfe\x9b2\xd0\u008a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xa4\"\xe4\xbf\v\xf7AG\u0309[\xed\x8f\x16\xd3\xce\xf3BaT\x89\x12\xef?b\xee\x116\x80\x00\u07d4\xa4%\x9f\x83E\xf7\u3a37+\x0f\xec,\xf7^2\x1f\xdaM\u0089g\x8a\x93 b\xe4\x18\x00\x00\u07d4\xa4)\b\xe7\xfeS\x98\n\x9a\xbf@D\xe9W\xa5Kp\u973e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa4)\xfa\x88s\x1f\xdd5\x0e\x8e\xcdn\xa5B\x96\xb6HO\u6549j\xc5\xc6-\x94\x86\a\x00\x00\xe0\x94\xa40\x99]\xdb\x18[\x98e\xdb\xe6%9\xad\x90\xd2.Ks\u008a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa46\xc7TS\xcc\xcaJ\x1f\x1bb\xe5\u0123\r\x86\xdd\xe4\xbeh\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xa47\xfen\xc1\x03\u028d\x15\x8fc\xb34\"N\u032c[>\xa3\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa4;m\xa6\xcbz\xacW\x1d\xff'\xf0\x9d9\xf8F\xf57i\xb1\x89\x14\x99\x8f2\xacxp\x00\x00\u07d4\xa4;\x81\xf9\x93V\xc0\xaf\x14\x1a\x03\x01\rw\xbd\x04,q\xc1\xee\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa4>\x19G\xa9$+5Ua\xc3\n\x82\x9d\xfe\uc881Z\xf8\x89\xd2=\x99\x96\x9f\u0591\x80\x00\u07d4\xa4H\x9aP\xea\xd5\xd5DZ{\xeeM-U6\u00a7lA\xf8\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa4O\xe8\x00\xd9o\xca\xd7;qp\xd0\xf6\x10\u02cc\x06\x82\xd6\u0389\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa4T2\xa6\xf2\xac\x9dVW{\x93\x8a7\xfa\xba\xc8\xcc|F\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa4f\xd7p\u0618\xd8\xc9\xd4\x05\xe4\xa0\xe5Q\xef\xaf\xcd\xe5<\xf9\x89\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\xe0\x94\xa4g\a1\x17X\x93\xbb\xcf\xf4\xfa\x85\u0397\xd9O\xc5\x1cK\xa8\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa4kC\x87\xfbM\xcc\xe0\x11\xe7nMsT}D\x81\xe0\x9b\xe5\x89Hz\x9a0E9D\x00\x00\u07d4\xa4l\xd27\xb6>\xeaC\x8c\x8e;e\x85\xf6y\xe4\x86\b2\xac\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa4wy\u063c\x1c{\xce\x0f\x01\x1c\xcb9\xefh\xb8T\xf8\u078f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa4\x82kl8\x82\xfa\xd0\xed\\\x8f\xbb%\xcc@\xccO3u\x9f\x89p\x1bC\xe3D3\xd0\x00\x00\u07d4\xa4\x87Y(E\x8e\xc2\x00]\xbbW\x8c\\\xd35\x80\xf0\xcf\x14R\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa4\x9fR:\xa5\x13d\xcb\xc7\u0655\x16=4\xebY\r\xed/\b\x89\x90'B\x1b*\x9f\xbc\x00\x00\u07d4\xa4\xa4\x9f\v\xc8h\x8c\xc9\xe6\xdc\x04\xe1\xe0\x8dR\x10&\xe6Ut\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa4\xa7\xd3\x06\xf5\x10\xcdX5\x94(\xc0\xd2\xf7\xc3`\x9dVt\u05c9\xb5\x8c\xb6\x1c<\xcf4\x00\x00\u07d4\xa4\xa8:\a8y\x9b\x97\x1b\xf2\xdep\x8c.\xbf\x91\x1c\xa7\x9e\xb2\x89 \x86\xac5\x10R`\x00\x00\u07d4\xa4\xb0\x9d\xe6\xe7\x13\xdciTnv\xef\n\xcf@\xb9O\x02A\xe6\x89\x11}\xc0b~\xc8p\x00\x00\xe0\x94\xa4\u04b4)\xf1\xadSI\xe3\x17\x04\x96\x9e\xdc_%\xee\x8a\xca\x10\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xa4\xd6\xc8.\u076eYG\xfb\xe9\xcd\xfb\xd5H\xae3\xd9\x1aq\x91\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa4\xda4E\r\"\xec\x0f\xfc\xed\xe0\x00K\x02\xf7\x87.\xe0\xb7:\x89\x05\x0fafs\xf0\x83\x00\x00\xe0\x94\xa4\xddY\xab^Q}9\x8eI\xfaS\u007f\x89\x9f\xedL\x15\xe9]\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xa4\xe6#E\x1e~\x94\xe7\u86e5\xed\x95\u0228:b\xff\xc4\xea\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa4\xed\x11\xb0r\u061f\xb16u\x9f\u019bB\x8cH\xaa]L\xed\x89\x0e?\x15'\xa0<\xa8\x00\x00\u07d4\xa4\xfb\x14@\x9ag\xb4V\x88\xa8Y>\\\xc2\xcfYl\xedo\x11\x89a\t=|,m8\x00\x00\xe0\x94\xa5\x14\xd0\x0e\xddq\b\xa6\xbe\x83\x9ac\x8d\xb2AT\x18\x17A\x96\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\xe0\x94\xa5\"\xde~\xb6\xae\x12PR*Q13\xa9;\xd4(IG\\\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xa5$\xa8\xcc\xccIQ\x8d\x17\n2\x82p\xa2\xf8\x813\xfb\xaf]\x89\x0f\xf7\x02-\xac\x10\x8a\x00\x00\u07d4\xa59\xb4\xa4\x01\xb5\x84\xdf\xe0\xf3D\xb1\xb4\"\xc6UC\x16~.\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xa5>\xadT\xf7\x85\n\xf2\x148\xcb\xe0z\xf6\x86'\x9a1[\x86\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa5C\xa0f\xfb2\xa8f\x8a\xa0sj\f\x9c\xd4\rx\t\x87'\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa5gw\vj\xe3 \xbd\xdeP\xf9\x04\xd6c\xe7F\xa6\x1d\xac\xe6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa5h\xdbMW\xe4\xd6tb\xd73\u019a\x9e\x0f\xe2n!\x83'\x89;k\xff\x92f\xc0\xae\x00\x00\u07d4\xa5i\x8059\x1eg\xa4\x90\x13\xc0\x00 yY1\x14\xfe\xb3S\x89\r\x02\xabHl\xed\xc0\x00\x00\u07d4\xa5p\":\xe3\u02a8QA\x8a\x98C\xa1\xacU\xdbH$\xf4\xfd\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa5s`\xf0\x02\xe0\xd6M-tE}\x8c\xa4\x85~\xe0\v\xcd\u07c9\x123\xe22\xf6\x18\xaa\x00\x00\u07d4\xa5u\xf2\x89\x1d\xcf\u0368<\\\xf0\x14t\xaf\x11\xee\x01\xb7-\u0089\x05l\xd5_\xc6M\xfe\x00\x00\u07d4\xa5x;\xf342\xff\x82\xacI\x89\x85\xd7\xd4`\xaeg\xec6s\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xa5\x87MuF5\xa7b\xb3\x81\xa5\xc4\u01d2H:\xf8\xf2=\x1d\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94\xa5\xa4\"\u007fl\xf9\x88%\xc0\u057a\xffS\x15u,\xcc\x1a\x13\x91\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa5\xabK\xd3X\x8fF\xcb'.V\xe9=\xee\u04c6\xba\x8bu=\x89HB\xf0A\x05\x87,\x80\x00\xe0\x94\xa5\xba\xd8e\t\xfb\xe0\xe0\xe3\xc0\xe9?m8\x1f\x1a\xf6\xe9\u0501\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xa5\xc36\b;\x04\xf9G\x1b\x8cn\xd76y\xb7Mf\xc3c\uc263e\nL\x9d \xe2\x00\x00\u07d4\xa5\xcd\x129\x92\x19K4\xc4x\x13\x140;\x03\xc5IH\xf4\xb9\x89l\xfc\xc3\xd9\x1d\xa5c\x00\x00\u07d4\xa5\u0578\xb6-\x00-\xef\x92A7\x10\xd1;o\xf8\xd4\xfc}\u04c9\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xa5\xd9ni}F5\x8d\x11\x9a\xf7\x81\x9d\xc7\b\u007fj\xe4\u007f\xef\x8a\x03\x17\xbe\xe8\xaf3\x15\xa7\x80\x00\u07d4\xa5\xde^CO\xdc\xddh\x8f\x1c1\xb6\xfbQ,\xb1\x96rG\x01\x89+^:\xf1k\x18\x80\x00\x00\u07d4\xa5\xe0\xfc<:\xff\xed=\xb6q\tG\xd1\xd6\xfb\x01\u007f>'m\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa5\xe9;I\xea|P\x9d\xe7\xc4Ml\xfe\xdd\xefY\x10\u07aa\xf2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa5\xe9\xcdKt%]\"\xb7\u0672z\xe8\xddC\xedn\xd0%+\x89)\x8d\xb2\xf5D\x11\u0640\x00\xe0\x94\xa5\xf0\a{5\x1flP\\\xd5\x15\u07e6\xd2\xfa\u007f\\L\u0487\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xa5\xf0u\xfd@\x135W{f\x83\u0081\xe6\xd1\x01C-\xc6\xe0\x89\x91Hx\xa8\xc0^\xe0\x00\x00\u07d4\xa5\xfe,\xe9\u007f\x0e\x8c8V\xbe\r\xe5\xf4\u0732\xce]8\x9a\x16\x89\x01=\xb0\xb8\xb6\x86>\x00\x00\u07d4\xa5\xffb\"-\x80\xc0\x13\xce\xc1\xa0\xe8\x85\x0e\xd4\xd3T\xda\xc1m\x89\vA\a\\\x16\x8b\x18\x00\x00\u07d4\xa6\t\xc2m\xd3P\xc25\xe4K+\x9c\x1d\xdd\xcc\u0429\xd9\xf87\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa6\f\x12\tuO]\x87\xb1\x81\xdaO\b\x17\xa8\x18Y\xef\x9f\u0609\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\xe0\x94\xa6\x10\x1c\x96\x1e\x8e\x1c\x15y\x8f\xfc\xd0\xe3 \x1dw\x86\xec7:\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xa6\x13Ei\x96@\x8a\xf1\xc2\xe9>\x17w\x88\xabU\x89^+2\x8a\x01Y\x19\xffG|\x88\xb8\x00\x00\u07d4\xa6\x18\x87\x81\x8f\x91J \xe3\x10w)\v\x83qZk-n\xf9\x89e\xea=\xb7UF`\x00\x00\u07d4\xa6\x1aT\xdfxJD\xd7\x1bw\x1b\x871u\t!\x13\x81\xf2\x00\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa6\x1c\u06ed\xf0K\x1eT\u0203\xde`\x05\xfc\xdf\x16\xbe\xb8\xeb/\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xa69\xac\xd9k1\xbaS\xb0\u0407c\"\x9e\x1f\x06\xfd\x10^\x9d\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa6BP\x10\x04\xc9\x0e\xa9\xc9\xed\x19\x98\xba\x14\nL\xd6,o_\x89\r\x94\xfb\x8b\x10\xf8\xb1\x80\x00\u07d4\xa6D\xed\x92,\xc27\xa3\xe5\u0117\x9a\x99Tw\xf3nP\xbcb\x89\x1f\xa7=\x84]~\x96\x00\x00\u07d4\xa6F\xa9\\moY\xf1\x04\xc6T\x1dw`uz\xb3\x92\xb0\x8c\x89\u3bb5sr@\xa0\x00\x00\xe0\x94\xa6HL\u0184\xc4\xc9\x1d\xb5>\xb6\x8aM\xa4Zjk\xda0g\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xa6N_\xfbpL,\x919\xd7~\xf6\x1d\x8c\u07e3\x1dz\x88\xe9\x89\a\xc0\x86\x0eZ\x80\xdc\x00\x00\xe0\x94\xa6T&\xcf\xf3x\xed#%5\x13\xb1\x9fIm\xe4_\xa7\u13ca\x01\x86P\x12|\xc3\u0700\x00\x00\u07d4\xa6jIc\xb2\u007f\x1e\xe1\x93+\x17+\xe5\x96N\r:\xe5KQ\x89\t`\xdbwh\x1e\x94\x00\x00\u07d4\xa6\u007f8\x81\x95eB:\xa8_>:\xb6\x1b\xc7c\u02eb\x89\u0749sw\xb0\"\u01be\b\x00\x00\u07d4\xa6\x8c14E\xc2-\x91\x9e\xe4l\xc2\xd0\xcd\xff\x04:uX%\x89\x04\x13t\xfd!\xb0\u0600\x00\u07d4\xa6\x8e\f0\u02e3\xbcZ\x88>T\x03 \xf9\x99\xc7\xcdU\x8e\\\x89a\x9237b\xa5\x8c\x80\x00\u07d4\xa6\x90\xf1\xa4\xb2\n\xb7\xba4b\x86 \u079c\xa0@\xc4<\x19c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa6\x9d|\xd1}HB\xfe\x03\xf6*\x90\xb2\xfb\xf8\xf6\xaf{\xb3\x80\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xa6\xa0\x82R\xc8YQw\xcc.`\xfc'Y>#y\xc8\x1f\xb1\x89\x01\x16Q\xac>zu\x80\x00\u07d4\xa6\xa0\xdeB\x1a\xe5Om\x17(\x13\b\xf5dm/9\xf7w]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa6\xb2\xd5s)s`\x10,\a\xa1\x8f\xc2\x1d\xf2\xe7I\x9f\xf4\xeb\x89\xd9o\u0390\u03eb\xcc\x00\x00\xe0\x94\xa6\xc9\x10\xceMIJ\x91\x9c\u036a\xa1\xfc;\x82\xaat\xba\x06\u03ca\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xa6\u3ea3\x8e\x10J\x1e'\xa4\xd8(i\xaf\xb1\xc0\xaen\xff\x8d\x89\x01\x11@\ueb4bq\x00\x00\u07d4\xa6\xee\xbb\xe4d\u04d1\x87\xbf\x80\u029c\x13\xd7 '\xec[\xa8\xbe\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xa6\xf6+\x8a=\u007f\x11\"\a\x01\xab\x9f\xff\xfc\xb3'\x95\x9a'\x85\x89\x1bn)\x1f\x18\u06e8\x00\x00\u07d4\xa6\xf93\a\xf8\xbc\xe01\x95\xfe\u0387 C\xe8\xa0?{\xd1\x1a\x89\x9csK\xadQ\x11X\x00\x00\u07d4\xa7\x01\xdfy\xf5\x94\x90\x1a\xfe\x14DH^k \u00fd\xa2\xb9\xb3\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa7\x02L\xfdt,\x1e\xc1<\x01\xfe\xa1\x8d0B\xe6_\x1d]\xee\x8a\x02c\x11\x9a(\xab\u0430\x80\x00\u07d4\xa7\x18\xaa\xadY\xbf9\\\xba+#\xe0\x9b\x02\xfe\f\x89\x81bG\x8960<\x97\xe4hx\x00\x00\u07d4\xa7$|S\xd0Y\xeb|\x93\x10\xf6(\xd7\xfclj\nw?\b\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xa7%7c\xcfJu\u07d2\xca\x1evm\xc4\xee\x8a'E\x14{\x8a\x02F7p\xe9\n\x8fP\x00\x00\u07d4\xa7.\xe6f\u0133^\x82\xa5\x06\x80\x8bD<\xeb\xd5\xc62\xc7\u0749+^:\xf1k\x18\x80\x00\x00\u07d4\xa7DD\xf9\x0f\xbbT\xe5o:\u0276\xcf\u032aH\x19\xe4aJ\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa7GC\x9a\xd0\u04d3\xb5\xa08a\xd7r\x962m\u8edd\xb9\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xa7`{BW;\xb6\xf6\xb4\xd4\xf2<~*&\xb3\xa0\xf6\xb6\xf0\x89WG=\x05\u06ba\xe8\x00\x00\xe0\x94\xa7i)\x89\n{G\xfb\x85\x91\x96\x01lo\u0742\x89\u03b7U\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u0794\xa7kt?\x98\x1bi0r\xa11\xb2+\xa5\x10\x96\\/\xef\u05c8\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xa7m?\x15bQ\xb7,\f\xcfKG\xa39<\xbdoI\xa9\u0149Hz\x9a0E9D\x00\x00\u07d4\xa7t(\xbc\xb2\xa0\xdbv\xfc\x8e\xf1\xe2\x0eF\x1a\n2\u016c\x15\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\xa7u\x8c\xec\xb6\x0e\x8faL\u0396\x13~\xf7+O\xbd\awJ\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xa7w^J\xf6\xa2:\xfa \x1f\xb7\x8b\x91^Q\xa5\x15\xb7\xa7(\x89\x06\x81U\xa46v\xe0\x00\x00\u07d4\xa7\u007f>\u1793\x88\xbb\xbb\"\x15\xc6#\x97\xb9e`\x13#`\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xa7\x85\x9f\xc0\u007fun\xa7\xdc\xeb\xbc\xcdB\xf0X\x17X-\x97?\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa7\x96lH\x9fLt\x8az\u902a'\xa5t%\x17g\xca\xf9\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xa7\xa3\xbba9\xb0\xad\xa0\f\x1f\u007f\x1f\x9fV\u0654\xbaM\x1f\xa8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa7\xa3\xf1S\xcd\u00c8!\xc2\f]\x8c\x82A\xb2\x94\xa3\xf8+$\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xa7\xa5\x17\u05ed5\x82\v\t\u0517\xfa~U@\xcd\xe9IXS\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xa7\xc9\u04c8\xeb\xd8s\xe6k\x17\x13D\x83\x97\xd0\xf3\u007f\x8b\u04e8\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xa7\u073b\xa9\xb9\xbfgb\xc1EAlPjq\u3d17 \x9c\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xa7\xe7O\v\xdb'\x8f\xf0\xa8\x05\xa6Ha\x8e\xc5+\x16o\xf1\xbe\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xa7\xe87r\xbc \x0f\x90\x06\xaa*&\r\xba\xa8H=\xc5+0\x89\vB\xd56f7\xe5\x00\x00\xe0\x94\xa7\xef5\u0387\xed\xa6\u008d\xf2HxX\x15\x05>\xc9zPE\x8a\x01\x0f\f\xe9I\xe0\x0f\x93\x00\x00\u07d4\xa7\xf9\"\f\x80G\x82k\xd5\xd5\x18?Ngjmw\xbf\xed6\x89\bPh\x97k\xe8\x1c\x00\x00\u07d4\xa8\a\x10O'\x03\xd6y\xf8\u07af\xc4B\xbe\xfe\x84\x9eB\x95\v\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa8\f\xb1s\x8b\xac\b\xd4\xf9\xc0\x8bM\xef\xf5\x15T_\xa8XO\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xa8\x19\xd2\xec\xe1\"\xe0(\xc8\xe8\xa0J\x06M\x02\xb9\x02\x9b\b\xb9\x8965\u026d\xc5\u07a0\x00\x00\u0794\xa8%\xfdZ\xbby&\xa6|\xf3k\xa2F\xa2K\xd2{\xe6\xf6\xed\x88\xf4?\xc2\xc0N\xe0\x00\x00\u07d4\xa8(U9\x86\x9d\x88\xf8\xa9aS7Uq}~\xb6Uv\xae\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xa83\x82\xb6\xe1Rg\x97J\x85P\xb9\x8fqv\xc1\xa3S\xf9\xbe\x89\xbf\xfd\xaf/\xc1\xb1\xa4\x00\x00\xe0\x94\xa8DlG\x81\xa77\xacC(\xb1\xe1[\x8a\v?\xbb\x0f\xd6h\x8a\x04\x87\x94\xd1\xf2F\x19*\x00\x00\u07d4\xa8E[A\x17e\u0590\x1e1\x1erd\x03\t\x1eB\xc5f\x83\x89\xb7:\xec;\xfe\x14P\x00\x00\xe0\x94\xa8f\x13\xe6\u0124\xc9\xc5_\\\x10\xbc\xda2\x17]\u02f4\xaf`\x8a\x02C\xd6\xc2\xe3k\xe6\xae\x00\x00\u07d4\xa8m\xb0}\x9f\x81/G\x96b-@\xe0=\x13Xt\xa8\x8at\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa8\u007fz\xbdo\xa3\x11\x94(\x96x\xef\xb6<\xf5\x84\xee^*a\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xa8\x80\u2a3f\x88\xa1\xa8&H\xb4\x01W\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa8\x9d\xf3HY\xed\xd7\xc8 \u06c8w@\xd8\xff\x9e\x15\x15|{\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa8\xa4<\x00\x91\x00al\xb4\xaeN\x03?\x1f\xc5\xd7\xe0\xb6\xf1R\x89\u0548\xd0x\xb4?M\x80\x00\u07d4\xa8\xa7\b\xe8O\x82\u06c6\xa3U\x02\x19;Ln\xe9\xa7n\xbe\x8f\x897\b\xba\xed=h\x90\x00\x00\xe0\x94\xa8\xa7\xb6\x8a\u06b4\xe3\xea\xdf\xf1\x9f\xfaX\xe3J?\xce\xc0\xd9j\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xa8\xa8\xdb\xdd\x1a\x85\u047e\xee%i\xe9\x1c\xccM\t\xae\u007fn\xa1\x8a\x01:k+VHq\xa0\x00\x00\u07d4\xa8\xac\xa7H\xf9\xd3\x12\xect\u007f\x8bex\x14&\x94\xc7\xe9\xf3\x99\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa8\xb6[\xa3\x17\x1a?w\xa65\v\x9d\xaf\x1f\x8dU\xb4\xd2\x01\xeb\x89(b\xf3\xb0\xd2\"\x04\x00\x00\u07d4\xa8\xbe\xb9\x1c+\x99\u0216J\xa9[kJ\x18K\x12i\xfc4\x83\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u0794\xa8\xc0\xb0/\xaf\x02\xcbU\x19\u0768\x84\xde{\xbc\x8c\x88\xa2\u0681\x88\xe7\xc2Q\x85\x05\x06\x00\x00\u07d4\xa8\xc1\u05aaA\xfe=e\xf6{\xd0\x1d\xe2\xa8f\xed\x1e\u066eR\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4\xa8\xca\xfa\xc3\"\x80\xd0!\x02\v\xf6\xf2\xa9x(\x83\u05ea\xbe\x12\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xa8\xdb\v\x9b \x14S3A<;\fb\xf5\xf5.\u0544\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa8\xf3\u007f\n\xb3\xa1\xd4H\xa9\xe3\xce@\x96_\x97\xa6F\b:4\x89\x11\xe0\xe4\xf8\xa5\v\xd4\x00\x00\u07d4\xa8\xf8\x9d\xd5\xccnd\u05f1\xee\xac\xe0\a\x02\x02,\xd7\xd2\xf0=\x89%\xf2s\x93=\xb5p\x00\x00\xe0\x94\xa9\x04v\xe2\xef\xdf\xeeO8{\x0f2\xa5\x06x\xb0\xef\xb5s\xb5\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa9\x14PF\xfa6(\xcf_\xd4\xc6\x13\x92{\xe51\xe6\xdb\x1f\u0749\x06\x12O\xee\x99;\xc0\x00\x00\u07d4\xa9\x14\u0375q\xbf\xd9=d\xdaf\xa4\xe1\b\xea\x13NP\xd0\x00\x89M\x878\x99G\x13y\x80\x00\xe0\x94\xa9\x1aZ{4\x1f\x99\xc55\x14N \xbe\x9ck;\xb4\u008eM\x8a\x01&u:\xa2$\xa7\v\x00\x00\u07d4\xa9%%Q\xa6$\xaeQ7\x19\u06beR\a\xfb\xef\xb2\xfdwI\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xa9'\u050b\xb6\u02c1K\xc6\t\xcb\u02a9\x15\x1f]E\x9a'\xe1\x89\x0e\xb95\t\x00d\x18\x00\x00\u07d4\xa9)\u023dq\xdb\f0\x8d\xac\x06\b\n\x17G\xf2\x1b\x14e\xaa\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xa9K\xbb\x82\x14\u03cd\xa0\xc2\xf6h\xa2\xacs\xe8bHR\x8dK\x894\n\xad!\xb3\xb7\x00\x00\x00\u07d4\xa9Q\xb2D\xffP\u03eeY\x1d^\x1a\x14\x8d\xf6\xa98\xef*\x1a\x89^\x00\x15\x84\xdf\xcfX\x00\x00\u07d4\xa9`\xb1\xca\xdd;\\\x1a\x8el\xb3\xab\xca\xf5.\xe7\xc3\xd9\xfa\x88\x89R\x8b\xc3T^Rh\x00\x00\u07d4\xa9a\x17\x1fSB\xb1s\xddp\xe7\xbf\xe5\xb5\xca#\x8b\x13\xbc\u0749\xb8'\x94\xa9$O\f\x80\x00\u07d4\xa9u\xb0w\xfc\xb4\u030e\xfc\xbf\x83\x84Y\xb6\xfa$:AY\u0589\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\xa9{\xeb:H\xc4_\x15((L\xb6\xa9_}\xe4S5\x8e\u018a\x06\x90\x83l\n\xf5\xf5`\x00\x00\u07d4\xa9~\a!DI\x9f\xe5\xeb\xbd5J\xcc~~\xfbX\x98]\b\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\xa9\x86v/zO)O.\v\x172y\xad,\x81\xa2\"4X\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xa9\x8f\x10\x985\xf5\xea\xcd\x05Cd|4\xa6\xb2i\xe3\x80/\xac\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xa9\x97\xdf\u01d8j'\x05\bH\xfa\x1cd\u05e7\xd6\xe0z\u0322\x89\a\xc0\x86\x0eZ\x80\xdc\x00\x00\u07d4\xa9\x99\x91\u03bd\x98\xd9\xc88\xc2_zt\x16\xd9\xe2D\xca%\r\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xa9\xa1\xcd\xc3;\xfd7o\x1c\rv\xfbl\x84\xb6\xb4\xac'Mh\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xa9\xa8\xec\xa1\x1a#\xd6F\x89\xa2\xaa>A}\xbb=3k\xb5\x9a\x89\x0e4S\xcd;g\xba\x80\x00\u07d4\xa9\xac\xf6\x00\b\x1b\xb5[\xb6\xbf\xba\xb1\x81_\xfcN\x17\xe8Z\x95\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xa9\xad\x19&\xbcf\xbd\xb31X\x8e\xa8\x197\x88SM\x98,\x98\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4\xa9\xaf!\xac\xbeH/\x811\x89j\"\x806\xbaQ\xb1\x94S\u00c9\x02\xb5\xe0!\x98\f\xc1\x80\x00\xe0\x94\xa9\xb2\xd2\xe0IN\xab\x18\xe0}7\xbb\xb8V\xd8\x0e\x80\xf8L\u04ca\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xa9\xbaoA;\x82\xfc\xdd\xf3\xaf\xfb\xbd\u0412\x87\xdc\xf5\x04\x15\u0289\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xa9\xbe\x88\xad\x1eQ\x8b\v\xbb\x02J\xb1\xd8\xf0\xe7?y\x0e\fv\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\xa9\xbf\xc4\x10\xdd\xdb q\x1eE\xc0s\x87\xea\xb3\n\x05N\x19\xac\x89>\x99`\x1e\xdfNS\x00\x00\u07d4\xa9\u0522\xbc\xbe[\x9e\bi\xd7\x0f\x0f\xe2\xe1\u05aa\xcdE\xed\u0149\n\xc6\xe7z\xb6c\xa8\x00\x00\xe0\x94\xa9\xd6KO;\xb7\x85\a\"\xb5\x8bG\x8b\xa6\x917^\"NB\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xa9\xd6\xf8q\xcax\x1au\x9a \xac:\u06d7,\xf1()\xa2\b\x892$\xf4'#\xd4T\x00\x00\xe0\x94\xa9\xdc\x04$\u0196\x9dy\x83X\xb3\x93\xb1\x93:\x1fQ\xbe\xe0\n\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xa9\xe1\x94f\x1a\xacpN\xe9\u07a0C\x97N\x96\x92\xde\xd8J]\x89\x1a&\xa5\x14\"\xa0p\x00\x00\u07d4\xa9\xe2\x837\xe65q\x93\xd9\xe2\xcb#k\x01\xbeD\xb8\x14'\u07c9wC\"\x17\xe6\x83`\x00\x00\u07d4\xa9\xe6\xe2^ekv%Xa\x9f\x14z!\x98[\x88t\xed\xfe\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xa9\xe9\xdb\xcez,\xb06\x94y\x98\x97\xbe\xd7\xc5M\x15_\u06a8\x89\n\xb5\xae\x8f\u025de\x80\x00\u07d4\xa9\xed7{}n\xc2Yq\xc1\xa5\x97\xa3\xb0\xf3\xbe\xadW\u024f\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xaa\x02\x00\xf1\xd1~\x9cT\xda\x06G\xbb\x969]W\xa7\x858\u06099>\xf1\xa5\x12|\x80\x00\x00\u07d4\xaa\f\xa3ss7\x17\x8a\f\xaa\xc3\t\x9cXK\x05lV0\x1c\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4\xaa\x13kG\x96+\xb8\xb4\xfbT\r\xb4\xcc\xf5\xfd\xd0B\xff\xb8\u03c9\x1b\x1bk\u05efd\xc7\x00\x00\xe0\x94\xaa\x14B-o\n\xe5\xa7X\x19N\xd1W\x80\xc88\xd6\u007f\x1e\xe1\x8a\x06\t2\x05lD\x9d\xe8\x00\x00\u07d4\xaa\x16&\x9a\xac\x9c\r\x800h\xd8/\u01d1Q\xda\xdd3Kf\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xaa\x16p&\u04da\xb7\xa8V5\x94N\xd9\xed\xb2\xbf\xeb\xa1\x18P\x8a\x01\xc1\xd5\xe2\x1bO\xcfh\x00\x00\u07d4\xaa\x1b7h\xc1m\x82\x1fX\x0ev\xc8\xe4\xc8\xe8m}\u01c8S\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xaa\x1d\xf9.Q\xdf\xf7\v\x19s\xe0\xe9$\xc6b\x87\xb4\x94\xa1x\x89\x1c\xf8J0\xa0\xa0\xc0\x00\x00\u07d4\xaa,g\x00\x96\xd3\xf990S%B~\xb9U\xa8\xa6\r\xb3\u0149l\x95Y\x06\x99#-\x00\x00\u07d4\xaa15\xcbT\xf1\x02\xcb\xef\xe0\x9e\x96\x10:\x1ayg\x18\xffT\x89\x03\"\"\xd9\xc31\x94\x00\x00\u07d4\xaa2\x1f\xdb\xd4I\x18\r\xb8\xdd\xd3O\x0f\xe9\x06\xec\x18\xee\t\x14\x89%\"H\u07b6\xe6\x94\x00\x00\xe0\x94\xaa9%\xdc\"\v\xb4\xae!w\xb2\x880x\xb6\xdc4l\xa1\xb2\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xaa?)`\x1a\x131t^\x05\xc4(0\xa1^q\x93\x8ab7\x89\\(=A\x03\x94\x10\x00\x00\xe0\x94\xaaG\xa4\xff\xc9y622\u025b\x99\xfa\xda\x0f'4\xb0\xae\xee\x8a\x01\xb8H\x9d\xf4\xdb\xff\x94\x00\x00\u07d4\xaaI=?O\xb8fI\x1c\xf8\xf8\x00\xef\xb7\xe22N\xd7\xcf\xe5\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xaaV\xa6]\u012b\xb7/\x11\xba\xe3+o\xbb\aDG\x91\xd5\u0249(\x94\xe9u\xbfIl\x00\x00\xe0\x94\xaaZ\xfc\xfd\x83\t\xc2\u07dd\x15\xbe^jPN}pf$\u014a\x01<\xf4\"\xe3\x05\xa17\x80\x00\u07d4\xaa\x8e\xb0\x82;\a\xb0\xe6\xd2\n\xad\xda\x0e\x95\xcf85\xbe\x19.\x89\x01\xbc\x16\xd6t\xec\x80\x00\x00\u07d4\xaa\x91#~t\r%\xa9/\u007f\xa1F\xfa\xa1\x8c\xe5m\xc6\xe1\xf3\x892$\xf4'#\xd4T\x00\x00\u07d4\xaa\x96\x0e\x10\xc5#\x91\xc5N\x158|\xc6z\xf8'\xb51m\u0309lk\x93[\x8b\xbd@\x00\x00\u07d4\xaa\x9b\xd4X\x955\xdb'\xfa+\xc9\x03\xca\x17\xd6y\xddeH\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xaa\xa8\xde\xfe\x11\xe3a?\x11\x06\u007f\xb9\x83bZ\b\x99Z\x8d\xfc\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xaa\xaa\xe6\x8b2\x14\x02\xc8\xeb\xc14h\xf3A\xc6<\f\xf0?\u0389Rf<\u02b1\xe1\xc0\x00\x00\u07d4\xaa\xad\x1b\xaa\xdeZ\xf0N+\x17C\x9e\x93Y\x87\xbf\x8c+\xb4\xb9\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xaa\xb0\n\xbfX(\xd7\xeb\xf2kG\u03ac\u0378\xba\x032Qf\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xaa\xbd\xb3\\\x15\x14\x98J\x03\x92\x13y?3E\xa1h\xe8\x1f\xf1\x89\x10\xca\u0216\xd29\x00\x00\x00\u07d4\xaa\xca`\xd9\xd7\x00\u7156\xbb\xbb\xb1\xf1\xe2\xf7\x0fF'\xf9\u060965\xbbw\xcbK\x86\x00\x00\u07d4\xaa\xce\u0629V;\x1b\xc3\x11\xdb\xdf\xfc\x1a\xe7\xf5u\x19\xc4D\f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xaa\u04b7\xf8\x10f\x95\a\x8el\x13\x8e\xc8\x1at\x86\xaa\xca\x1e\xb2\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xaa\xe6\x1eC\xcb\r\f\x96\xb3\x06\x99\xf7~\x00\xd7\x11\u0423\x97\x9b\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xaa\xe72\xed\xa6Y\x88\u00e0\f\u007fG/5\x1cF;\x1c\x96\x8e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xaa\xf0#\xfe\U0009091b\xb7\x8b\xb7\xab\xc9]f\x9cP\xd5(\xb0\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xaa\xf5\xb2\a\xb8\x8b\r\xe4\xac@\xd7G\xce\xe0n\x17-\xf6\xe7E\x8a\x06\xa7\xb7\x1d\u007fQ\u0410\x00\x00\u07d4\xaa\xf9\xeeK\x88lm\x1e\x95Io\xd2t#[\xf4\xec\xfc\xb0}\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xaa\xfb{\x01:\xa1\xf8T\x1c~2{\xf6P\xad\xbd\x19L \x8f\x89I\x9e\t-\x01\xf4x\x00\x00\xe0\x94\xab\t\x863\xee\xee\f\xce\xfd\xf62\xf9WTV\xf6\u0740\xfc\x86\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xab\f\xedv.\x16a\xfa\xe1\xa9*\xfb\x14\b\x88\x94\x13yH%\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94\xab\x14\xd2!\xe3=TF)\x19\x8c\u0416\xedc\u07e2\x8d\x9fG\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xab \x9f\u0729y\u0426G\x01\n\xf9\xa8\xb5/\xc7\xd2\r\x8c\u044a\x01\xee\xe2S,|-\x04\x00\x00\u07d4\xab'\xbax\xc8\xe5\xe3\xda\xef1\xad\x05\xae\xf0\xff\x03%r\x1e\b\x89\x19^\xce\x00n\x02\xd0\x00\x00\u07d4\xab(q\xe5\a\u01fe9eI\x8e\x8f\xb4b\x02Z\x1a\x1cBd\x89*\x03I\x19\u07ff\xbc\x00\x00\u07d4\xab8a\"o\xfe\xc1(\x91\x87\xfb\x84\xa0\x8e\xc3\xed\x042d\xe8\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xab=\x86\xbc\x82\x92~\f\xd4!\xd1F\xe0\u007f\x91\x93'\xcd\xf6\xf9\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94\xab>b\xe7z\x8b\"^A\x15\x92\xb1\xaf0\aR\xfeA$c\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\xab>x)K\xa8\x86\xa0\xcf\xd5\xd3H\u007f\xb3\xa3\a\x8d3\x8dn\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xab@\x04\xc0@?~\xab\xb0\xeaXo!!V\xc4 =g\xf1\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xabAo\xe3\rX\xaf\xe5\xd9EL\u007f\xce\u007f\x83\v\xccu\x03V\x89\x0657\x01\xc6\x05\u06c0\x00\u07d4\xabEr\xfb\xb1\xd7+W]i\xecj\xd1s3\x87>\x85R\xfc\x89lj\xc5L\xdahG\x00\x00\u07d4\xabZy\x01av2\ts\xe8\xcd8\xf67U0\x02%1\xc0\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xab]\xfc\x1e\xa2\x1a\xdcB\u03cc?n6\x1e$?\xd0\xdaa\xe5\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xabke\xea\xb8\xdf\xc9\x17\xec\x02Q\xb9\xdb\x0e\u03e0\xfa\x03(I\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xabp\x91\x93.K\u00dd\xbbU#\x80\u0293O\xd7\x16m\x1en\x89\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4\xabt\x16\xff2%IQ\u02fcbN\xc7\xfbE\xfc~\u02a8r\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\xab|B\xc5\xe5-d\x1a\a\xadu\t\x9cb\x92\x8b\u007f\x86b/\x89\x126\x1a\xa2\x1d\x14\xba\x00\x00\u07d4\xab}T\xc7\xc6W\x0e\xfc\xa5\xb4\xb8\xcep\xf5*Ws\xe5\xd5;\x89\x0f(:\xbe\x9d\x9f8\x00\x00\u07d4\xab~\v\x83\xed\x9aBLm\x1ejo\x87\xa4\xdb\xf0d\t\xc7\u0589\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\xab\x84\xa0\xf1G\xad&T\x00\x00+\x85\x02\x9aA\xfc\x9c\xe5\u007f\x85\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xab\x93\xb2n\xce\n\n\xa2\x13e\xaf\xed\x1f\xa9\xae\xa3\x1c\xd5Dh\x89W+{\x98sl \x00\x00\u07d4\xab\x94\x8aJ\xe3y\\\xbc\xa11&\xe1\x92S\xbd\xc2\x1d:\x85\x14\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xab\x9a\xd3n\\t\xce.\x969\x9fW\x83\x941\xd0\u77d6\xab\x89\b\xe3\xf5\v\x17<\x10\x00\x00\u07d4\xab\xb2\xe6\xa7*@\xban\xd9\b\u037c\xec\x91\xac\xfdwx0\xd1dcG\x8a\xe0\xfcw \x89\a?u\u0460\x85\xba\x00\x00\xe0\x94\xab\u071f\x1b\xcfM\x19\xee\x96Y\x100\xe7r\xc340/}\x83\x8a\b~^\x11\xa8\x1c\xb5\xf8\x00\x00\u07d4\xab\xde\x14{*\xf7\x89\ua946T~f\xc4\xfa&d\xd3(\xa4\x89\rk`\x81\xf3L\x12\x80\x00\xe0\x94\xab\xe0|\xedj\xc5\xdd\xf9\x91\xef\xf6\xc3\xda\"jt\x1b\xd2C\xfe\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xab\xf1/\xa1\x9e\x82\xf7lq\x8f\x01\xbd\xca\x00\x03gE#\xef0\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xab\xf7(\u03d3\x12\xf2!(\x02NpF\xc2Q\xf5\xdcY\x01\xed\x8a\x06A\xe8\xa15c\xd8\xf8\x00\x00\u07d4\xab\xf8\xff\xe0p\x8a\x99\xb5(\xcc\x1e\xd4\xe9\xceK\r\x060\xbe\x8c\x89z\xb5\u00ae\xee\xe68\x00\x00\u07d4\xab\xfc\xf5\xf2P\x91\xceW\x87_\xc6t\xdc\xf1\x04\xe2\xa7=\xd2\xf2\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xab\xfe\x93d%\xdc\u01f7K\x95P\x82\xbb\xaa\xf2\xa1\x1dx\xbc\x05\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xac\x02OYO\x95X\xf0ICa\x8e\xb0\xe6\xb2\xeeP\x1d\xc2r\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xac\x12*\x03\xcd\x05\x8c\x12._\xe1{\x87/Hw\xf9\u07d5r\x89j\xc5\xc6-\x94\x86\a\x00\x00\u07d4\xac\x14.\xda\x11W\xb9\xa9\xa6C\x90\xdf~j\xe6\x94\xfa\u0249\x05\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xac\x1d\xfc\x98Kq\xa1\x99)\xa8\x1d\x81\xf0J|\xbb\x14\a7\x03\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xac!\xc1\xe5\xa3\xd7\xe0\xb5\x06\x81g\x9d\xd6\u01d2\xdb\u0287\xde\u02ca\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xac(\x89\xb5\x96o\f\u007f\x9e\xdbB\x89\\\xb6\x9d\x1c\x04\xf9#\xa2\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xac(\xb5\xed\xea\x05\xb7o\x8c_\x97\bEA'|\x96ijL\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xac,\x8e\t\xd0d\x93\xa68XC{\xd2\v\xe0\x19bE\x03e\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\xac.vm\xac?d\x8fcz\xc6q?\u0770h\xe4\xa4\xf0M\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94\xac9\x00)\x8d\xd1M|\xc9mJ\xbbB\x8d\xa1\xba\xe2\x13\xff\xed\x8a\x05<\xa1)t\x85\x1c\x01\x00\x00\u07d4\xac=\xa5&\xcf\u0388)s\x02\xf3LI\xcaR\r\xc2q\xf9\xb2\x89+^:\xf1k\x18\x80\x00\x00\u07d4\xacD`\xa7nm\xb2\xb9\xfc\xd1R\xd9\xc7q\x8d\x9a\xc6\xed\x8co\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xacJ\xcf\xc3n\xd6\tJ'\xe1\x18\xec\xc9\x11\xcdG>\x8f\xb9\x1f\x89a\x91>\x14@<\f\x00\x00\u07d4\xacL\xc2V\xaet\xd6$\xac\xe8\r\xb0x\xb2 \u007fW\x19\x8fk\x89lyt\x12?d\xa4\x00\x00\u07d4\xacN\xe9\xd5\x02\xe7\xd2\xd2\xe9\x9eY\xd8\xca}_\x00\xc9KM\u058965\u026d\xc5\u07a0\x00\x00\u07d4\xacR\xb7~\x15fH\x14\xf3\x9eO'\x1b\xe6A0\x8d\x91\xd6\u0309\v\xed\x1d\x02c\xd9\xf0\x00\x00\u07d4\xacY\x99\xa8\x9d-\u0486\u0568\fm\xee~\x86\xaa\xd4\x0f\x9e\x12\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\xac_br1H\r\r\x950.m\x89\xfc2\xcb\x1dO\xe7\xe3\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xac`\x8e+\xac\x9d\xd2\a(\u0494~\xff\xbb\xbf\x90\n\x9c\xe9K\x8a\x01EK\r\xb3uh\xfc\x00\x00\u07d4\xacm\x02\xe9\xa4k7\x9f\xacJ\u0271\u05f5\xd4{\xc8P\xce\x16\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xacoh\xe87\xcf\x19a\xcb\x14\xabGDm\xa1h\xa1m\u0789\x89Hz\x9a0E9D\x00\x00\u07d4\xacw\xbd\xf0\x0f\u0558[]\xb1+\xbe\xf8\x008\n\xbc*\x06w\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xac~\x03p'#\xcb\x16\xee'\xe2-\u0438\x15\xdc-\\\xae\x9f\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\xac\x8bP\x9a\xef\xea\x1d\xbf\xaf+\xb35\x00\xd6W\vo\xd9mQ\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xac\x8e\x87\xdd\xda^x\xfc\xbc\xb9\xfa\u007f\xc3\xce\x03\x8f\x9f}.4\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xac\x9f\xffh\xc6\x1b\x01\x1e\xfb\xec\xf08\xedr\u06d7\xbb\x9er\x81\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\xac\xa1\xe6\xbcd\xcc1\x80\xf6 \xe9M\u0171\xbc\xfd\x81X\xe4]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xac\xa2\xa883\v\x170-\xa71\xd3\r\xb4\x8a\x04\xf0\xf2\a\xc1\x89Hz\x9a0E9D\x00\x00\u07d4\xac\xaa\xdd\xcb\xf2\x86\xcb\x0e!]\xdaUY\x8f\u007f\xf0\xf4\xad\xa5\u018965\u026d\xc5\u07a0\x00\x00\u07d4\xac\xb9C8UK\u0108\u0308\xae-\x9d\x94\b\rk\u07c4\x10\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xac\xbc-\x19\xe0l;\xab\xbb[o\x05+k\xf7\xfc7\xe0r)\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xac\xbd\x18U\x89\xf7\xa6\x8ag\xaaK\x1b\xd6Pw\xf8\xc6NN!\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xac\xc0bp,Ya]4D\xefb\x14\xb8\x86+\x00\x9a\x02\xed\x89QO\xcb$\xff\x9cP\x00\x00\u07d4\xac\xc0\x90\x9f\xda.\xa6\xb7\xb7\xa8\x8d\xb7\xa0\xaa\xc8h\t\x1d\xdb\xf6\x89\x013v_\x1e&\u01c0\x00\u07d4\xac\xc1\u01c7\x86\xabM+;'q5\xb5\xba\x12>\x04\x00Hk\x89\x04E\x91\xd6\u007f\xec\xc8\x00\x00\u07d4\xac\xc4j*U\\t\xde\u0522\xbd\tN\x82\x1b\x97\x84;@\xc0\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xac\u015f;0\xce\xff\xc5da\xcc[\x8d\xf4\x89\x02$\x0e\x0e{\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xac\xce\x01\xe0\xa7\x06\x10\xdcp\xbb\x91\xe9\x92o\xa9\x95\u007f7/\xba\x89\x1d\x1c_>\xda \xc4\x00\x00\u07d4\xac\xd8\u0751\xf7\x14vLEg|c\xd8R\xe5n\xb9\xee\xce.\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xac\u2af6;\x06\x04@\x9f\xbd\xe3\xe7\x16\u0487mD\xe8\xe5\u0749\b=lz\xabc`\x00\x00\xe0\x94\xac\xec\x91\xefiA\xcfc\v\xa9\xa3\u71e0\x12\xf4\xa2\xd9\x1d\u050a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4\xad\nJ\xe4x\xe9cn\x88\xc6\x04\xf2B\xcfT9\xc6\xd4V9\x89\xbe\xd1\xd0&=\x9f\x00\x00\x00\u07d4\xad\x17\x99\xaa\xd7`+E@\u0343/\x9d\xb5\xf1\x11P\xf1hz\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xad\x1dh\xa08\xfd%\x86\x06~\xf6\xd15\xd9b\x8ey\xc2\xc9$\x89\xfe\t\xa5'\x9e*\xbc\x00\x00\u07d4\xad*\\\x00\xf9#\xaa\xf2\x1a\xb9\xf3\xfb\x06n\xfa\n\x03\xde/\xb2\x8965\xbbw\xcbK\x86\x00\x00\u07d4\xad5e\xd5+h\x8a\xdd\xed\b\x16\x8b-8r\xd1}\n&\xae\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xad7|\xd2^\xb5>\x83\xae\t\x1a\n\x1d+E\x16\xf4\x84\xaf\u0789i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94\xadAM)\xcb~\xe9s\xfe\xc5N\"\xa3\x88I\x17\x86\xcfT\x02\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\xadD5~\x01~$OGi1\u01f8\x18\x9e\xfe\xe8\n]\n\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xadW\xaa\x9d\x00\xd1\fC\x9b5\xef\xcc\v\xec\xac.9U\xc3\x13\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xadY\xa7\x8e\xb9\xa7J\u007f\xbd\xae\xfa\xfa\x82\xea\u0684u\xf0\u007f\x95\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xadZ\x8dV\x01L\xfc\xb3`\xf4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xadr\x81!\x87?\x04V\xd0Q\x8b\x80\xabe\x80\xa2\x03pe\x95\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xads,\x97e\x93\xee\xc4x;N.\xcdy9yx\v\xfe\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xad}\xd0S\x85\x9e\xdf\xf1\xcbo\x9d*\xcb\xedm\xd5\xe32Bo\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xad\x80\xd8e\xb8\\4\xd2\xe6IK.z\xef\xeak\x9a\xf1\x84\u06c9\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xad\x8b\xfe\xf8\u018aH\x16\xb3\x91o5\xcb{\xfc\xd7\xd3\x04\tv\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xad\x8eH\xa3wi]\xe0\x146:R:(\xb1\xa4\fx\xf2\b\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xad\x91\n#\u0585\x06\x13eJ\xf7\x863z\u04a7\bh\xacm\x89lh\xcc\u041b\x02,\x00\x00\u07d4\xad\x92~\x03\xd1Y\x9ax\xca+\xf0\xca\u04a1\x83\xdc\xebq\xea\xc0\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94\xad\x92\xca\x06n\xdb|q\x1d\xfc[\x16a\x92\xd1\xed\xf8\xe7q\x85\x8a\a\x9f\x90\\o\xd3N\x80\x00\x00\u07d4\xad\x94#_\u00f3\xf4z$\x13\xaf1\u8111I\b\xef\fE\x89\x1b\x1b\x01B\xd8\x15\x84\x00\x00\u07d4\xad\x9e\x97\xa0H/5:\x05\xc0\xf7\x92\xb9w\xb6\xc7\xe8\x11\xfa_\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xad\x9fL\x89\n;Q\x1c\xeeQ\xdf\xe6\xcf\xd7\xf1\t;vA,\x89\x1bv|\xbf\xeb\f\xe4\x00\x00\u07d4\xad\xaa\x0eT\x8c\x03Z\xff\xedd\xcag\x8a\x96?\xab\xe9\xa2k\xfd\x89\x03\xcbq\xf5\x1f\xc5X\x00\x00\u07d4\xad\xb9H\xb1\xb6\xfe\xfe }\xe6^\x9b\xbc-\xe9\x8e`]\vW\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xad\xc1\x9e\xc85\xaf\xe3\u5347\u0713\xa8\xa9!<\x90E\x13&\x89j\xdb\xe54\"\x82\x00\x00\x00\u07d4\xad\xc8\"\x8e\xf9(\xe1\x8b*\x80}\x00\xfb1\xfcgX\x15\xaa\x00\x00\u07d4\xad\xff\r\x1d\v\x97G\x1ev\u05c9\xd2\u470at\xf9\xbdT\xff\x89e\xea=\xb7UF`\x00\x00\u07d4\xae\x06,D\x86\x18d0u\xdez\x0004-\xce\xd6=\xba\u05c9,\xc6\u034c\u0082\xb3\x00\x00\xe0\x94\xae\x10\xe2z\x01O\r0k\xaf&mH\x97\u021a\xee\xe2\xe9t\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xae\x12k8,\xf2W\xfa\xd7\xf0\xbc}\x16)~T\xccrg\u0689\x10CV\x1a\x88)0\x00\x00\u07d4\xae\x13\xa0\x85\x11\x11\x0f2\xe5;\xe4\x12xE\xc8C\xa1\xa5|{\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xae\x17\x9aF\r\xb6c&t=$\xe6u#\xa5{$m\xaf\u007f\x8a\x01\x00\a\xae|\xe5\xbb\xe4\x00\x00\u07d4\xae\"(ey\x90y\xaa\xf4\xf0gJ\f\u06ab\x02\xa6\xd5p\xff\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xae#\x9a\xcf\xfdN\xbe.\x1b\xa5\xb4\x17\x05r\xdcy\xcce3\xec\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xae/\x9c\x19\xacv\x13e\x94C#\x93\xb0G\x1d\b\x90!d\u04c9%\xdf\x05\u01a8\x97\xe4\x00\x00\u07d4\xae4\x86\x1d4\"S\x19O\xfcfR\xdf\xdeQ\xabD\xca\xd3\xfe\x89\x19F\bhc\x16\xbd\x80\x00\u07d4\xae6\xf7E!!\x91>\x80\x0e\x0f\xcd\x1ae\xa5G\x1c#\x84o\x89\b\xe3\xf5\v\x17<\x10\x00\x00\u07d4\xae?\x98\xa4C\xef\xe0\x0f>q\x1dR]\x98\x94\u071aa\x15{\x89\x10\x04\xe2\xe4_\xb7\xee\x00\x00\xe0\x94\xaeG\xe2`\x9c\xfa\xfe6\x9df\xd4\x15\xd99\xde\x05\b\x1a\x98r\x8a\x05\xba\xec\xf0%\xf9\xb6P\x00\x00\u07d4\xaeO\x12.5\xc0\xb1\xd1\xe4\x06\x92\x91E|\x83\xc0\u007f\x96_\xa3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xaePU\x81L\xb8\xbe\f\x11{\xb8\xb1\xc8\u04b6;F\x98\xb7(\x89\x01\xbc\x93.\xc5s\xa3\x80\x00\u07d4\xaeS\x8cs\u0173\x8d\x8dXM~\xbd\xad\xef\xb1\\\xab\xe4\x83W\x896'\xe8\xf7\x127<\x00\x00\u07d4\xaeW\xcc\x12\x9a\x96\xa8\x99\x81\xda\xc6\r/\xfb\x87}]\xc5\xe42\x89<:#\x94\xb3\x96U\x00\x00\u07d4\xaeZ\xa1\xe6\u00b6\x0fo\xd3\xef\xe7!\xbbJq\x9c\xbe=o]\x89+$\u01b5Z^b\x00\x00\u07d4\xae\\\x9b\xda\xd3\xc5\u0221\"\x04D\xae\xa5\xc2)\xc1\x83\x9f\x1dd\x89\x19\xe2\xa4\xc8\x18\xb9\x06\x00\x00\u07d4\xae\\\xe35Z{\xa9\xb32v\f\tP\u00bcE\xa8_\xa9\xa0\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xae]\"\x1a\xfc\xd3\u0493U\xf5\b\xea\xdf\xca@\x8c\xe3<\xa9\x03\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xaec[\xf781\x11\x9d-)\xc0\xd0O\xf8\xf8\xd8\u0425zF\x89Hz\x9a0E9D\x00\x00\xe0\x94\xaed\x81U\xa6X7\x0f\x92\x9b\xe3\x84\xf7\xe0\x01\x04~I\xddF\x8a\x02\xdf$\xae2\xbe D\x00\x00\xe0\x94\xaeo\fs\xfd\xd7|H\x97'Q!t\u0675\x02\x96a\x1cL\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xaep\xe6\x9d,J\n\xf8\x18\x80{\x1a'\x05\xf7\x9f\u0435\xdb\u01095e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\xaew9\x12N\xd1S\x05%\x03\xfc\x10\x14\x10\xd1\xff\xd8\xcd\x13\xb7\x8964\xfb\x9f\x14\x89\xa7\x00\x00\u07d4\xaex\xbb\x84\x919\xa6\xba8\xae\x92\xa0\x9ai`\x1c\xc4\xcbb\u0449\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xae\x84\"\x10\xf4M\x14\u0124\u06d1\xfc\x9d;;P\x01O{\xf7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xae\x84.\x81\x85\x8e\xcf\xed\xf6Plhm\xc2\x04\xac\x15\xbf\x8b$\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xae\x89T\xf8\xd6\x16m\xe5\a\xcfa)}\x0f\xc7\xcak\x9eq(\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xae\x9e\xcdk\u0755.\xf4\x97\xc0\x05\n\u0aca\x82\xa9\x18\x98\u0389\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4\xae\x9f\\?\xbb\xe0\u027c\xbf\x1a\xf8\xfft\xea(\v:]\x8b\b\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\xae\xad\x88\u0589Ak\x1c\x91\xf26D!7[}\x82\xd0RR\n\xfb\\Wm\x9f~\xb9>\u048a\r\xd0A \xba\t\xcf\xe6\x00\x00\u07d4\xae\xc2\u007f\xf5\xd7\xf9\xdd\u0691\x18?F\xf9\xd5%C\xb6\xcd+/\x89\x18e\x01'\xcc=\xc8\x00\x00\u07d4\xae\xe4\x9dh\xad\xed\xb0\x81\xfdCpZ_x\xc7x\xfb\x90\xdeH\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xae\xf5\xb1\"X\xa1\x8d\xec\a\xd5\xec.1et\x91\x9dy\xd6\u0589lk\x93[\x8b\xbd@\x00\x00\u07d4\xae\xfc\xfe\x88\xc8&\xcc\xf11\xd5N\xb4\ua7b8\x0ea\xe1\xee%\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\xaf\x06\xf5\xfam\x12\x14\xecC\x96}\x1b\xd4\xdd\xe7J\xb8\x14\xa98\x89\x04\xc5>\xcd\xc1\x8a`\x00\x00\u07d4\xaf\x11H\xefl\x8e\x10=u0\xef\xc9\x16y\u026c'\x00\t\x93\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xaf >\"\x9d~mA\x9d\xf47\x8e\xa9\x87\x15Q_c\x14\x85\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94\xaf X\xc7(,\xf6|\x8c<\xf90\x13<\x89a|\xe7])\x8a\x01w\"J\xa8D\xc7 \x00\x00\u07d4\xaf&\xf7\u01bfE> x\xf0\x89S\u4c80\x04\xa2\xc1\xe2\t\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xaf0\x87\xe6.\x04\xbf\x90\rZT\xdc>\x94bt\u0692B;\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xaf6\x14\u0736\x8a6\xe4ZN\x91\x1ebybG\"-Y[\x89z\x81\x06_\x11\x03\xbc\x00\x00\u07d4\xaf6\x15\u01c9\u0431\x15*\xd4\xdb%\xfe]\xcf\"(\x04\xcfb\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xaf<\xb5\x96Y3\xe7\xda\u0603i;\x9c>\x15\xbe\xb6\x8aHs\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xafD\x93\xe8R\x1c\xa8\x9d\x95\xf5&|\x1a\xb6?\x9fEA\x1e\x1b\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xafL\xf4\x17\x85\x16\x1fW\x1d\f\xa6\x9c\x94\xf8\x02\x1fA)N\u028a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\xafR\x9b\xdbE\x9c\xc1\x85\xbe\xe5\xa1\u014b\xf7\xe8\xcc\xe2\\\x15\r\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xafg\xfd>\x12\u007f\xd9\xdc6\xeb?\xcdj\x80\u01feOu2\xb2\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4\xafw\x1094Z40\x01\xbc\x0f\x8aY#\xb1&\xb6\rP\x9c\x895e\x9e\xf9?\x0f\xc4\x00\x00\xe0\x94\xaf\u007fy\xcbAZ\x1f\xb8\u06fd\tF\a\xee\x8dA\xfb|Z;\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xaf\x87\xd27\x1e\xf3x\x95\u007f\xbd\x05\xba/\x1df\x93\x1b\x01\u2e09%\xf2s\x93=\xb5p\x00\x00\u07d4\xaf\x88\x0f\xc7V}U\x95\xca\xcc\xe1\\?\xc1L\x87B\xc2l\x9e\x89\a?u\u0460\x85\xba\x00\x00\u07d4\xaf\x8e\x1d\xcb1L\x95\r6\x87CM0\x98X\xe1\xa8s\x9c\u0509\x0e~\xeb\xa3A\vt\x00\x00\u07d4\xaf\x99-\xd6i\xc0\x88>U\x15\xd3\xf3\x11*\x13\xf6\x17\xa4\xc3g\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xaf\xa1\u056d8\xfe\xd4GY\xc0[\x89\x93\xc1\xaa\r\xac\xe1\x9f@\x89\x04V9\x18$O@\x00\x00\xe0\x94\xaf\xa59XnG\x19\x17J;F\xb9\xb3\xe6c\xa7\u0475\xb9\x87\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xaf\xa6\x94n\xff\xd5\xffS\x15O\x82\x01\x02S\xdfG\xae(\f\u0309j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xaf\xc8\xeb\u860b\xd4\x10Z\xccL\x01\x8eTj\x1e\x8f\x9cx\x88\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xaf\xcc}\xbb\x83V\xd8B\xd4:\xe7\xe2<\x84\"\xb0\"\xa3\b\x03\x8a\x06o\xfc\xbf\xd5\xe5\xa3\x00\x00\x00\u07d4\xaf\xd0\x19\xff6\xa0\x91U4ki\x97H\x15\xa1\xc9\x12\xc9\n\xa4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xaf\xda\xc5\xc1\xcbV\xe2E\xbfp3\x00f\xa8\x17\uabecL\u0449\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xaf\xdd\x1bxab\xb81~ \xf0\xe9y\xf4\xb2\xceHmv]\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xaf\xf1\x04Z\xdf'\xa1\xaa2\x94a\xb2M\xe1\xba\u950ai\x8b\x89\x01\u03c4\xa3\n\n\f\x00\x00\u07d4\xaf\xf1\a\x96\v~\xc3N\u0590\xb6e\x02M`\x83\x8c\x19\x0fp\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xaf\xf1\x1c\xcfi\x93\x04\xd5\xf5\x86*\xf8`\x83E\x1c&\xe7\x9a\xe5\x89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u07d4\xaf\xf1at\nm\x90\x9f\xe9\x9cY\xa9\xb7yE\xc9\x1c\xc9\x14H\x89\x03@\xaa\xd2\x1b;p\x00\x00\xe0\x94\xaf\xfc\x99\xd5\ubd28O\xe7x\x8d\x97\xdc\xe2t\xb08$\x048\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xaf\xfe\xa0G7\"\xcb\u007f\x0e\x0e\x86\xb9\xe1\x18\x83\xbfB\x8d\x8dT\x89i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94\xb0\t\x96\xb0Vn\xcb>rC\xb8\"y\x88\u0733R\xc2\x18\x99\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xb0\x1e8\x9b(\xa3\x1d\x8eI\x95\xbd\xd7\xd7\xc8\x1b\xee\xab\x1eA\x19\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb0-\x06(s3EE\u03a2\x92\x18\xe4\x05w`Y\x0ft#\x89\xac\xb6\xa1\xc7\xd9:\x88\x00\x00\u07d4\xb0/\xa2\x93\x87\xec\x12\xe3\u007fi\"\xacL\xe9\x8c[\t\xe0\xb0\x0f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb06\x91k\xda\u03d4\xb6\x9eZ\x8ae`)u\xeb\x02a\x04\u0749\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xb0A1\x0f\xe9\xee\u0586L\xed\u053e\xe5\x8d\xf8\x8e\xb4\xed<\xac\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xb0U\xafL\xad\xfc\xfd\xb4%\xcfe\xbad1\a\x8f\a\xec\u056b\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xb0W\x11S\xdb\x1cN\u05ec\xae\xfe\x13\xec\xdf\xdbr\xe7\xe4\xf0j\x8a\x11\f\xffyj\xc1\x95 \x00\x00\u07d4\xb0n\xab\t\xa6\x10\u01a5=V\xa9F\xb2\xc44\x87\xac\x1d[-\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb0rI\xe0U\x04J\x91U5\x9a@)7\xbb\xd9T\xfeH\xb6\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xb0v\x182\x8a\x90\x13\a\xa1\xb7\xa0\xd0X\xfc\xd5xn\x9er\xfe\x8a\x06gI]JC0\xce\x00\x00\u07d4\xb0y\xbbM\x98f\x14:m\xa7*\xe7\xac\x00\"\x06)\x811\\\x89)3\x1eeX\xf0\xe0\x00\x00\u07d4\xb0{\xcc\bZ\xb3\xf7)\xf2D\x00Ah7\xb6\x996\xba\x88s\x89lm\x84\xbc\xcd\xd9\xce\x00\x00\u07d4\xb0{\xcf\x1c\xc5\xd4F.Q$\xc9e\xec\xf0\xd7\r\xc2z\xcau\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\xb0|\xb9\xc1$\x05\xb7\x11\x80uC\u0113De\xf8\u007f\x98\xbd-\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xb0\u007f\u07af\xf9\x1dD`\xfel\xd0\u8870\xbd\x8d\"\xa6.\x87\x8a\x01\x1d%)\xf3SZ\xb0\x00\x00\xe0\x94\xb0\x9f\xe6\xd44\x9b\x99\xbc7\x93\x80T\x02-T\xfc\xa3f\xf7\xaf\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\xe0\x94\xb0\xaa\x00\x95\f\x0e\x81\xfa2\x10\x17>r\x9a\xaf\x16:'\xcdq\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xb0\xacN\xfff\x80\xee\x14\x16\x9c\xda\xdb\xff\xdb0\x80Om%\xf5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb0\xb3j\xf9\xae\xee\u07d7\xb6\xb0\"\x80\xf1\x14\xf19\x84\xea2`\x895e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\xb0\xb7y\xb9K\xfa<.\x1fX{\u031c~!x\x92\"7\x8f\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\xb0\xba\xeb0\xe3\x13wlLm$t\x02\xbaAg\xaf\u0361\u0309j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xb0\xbb)\xa8a\xea\x1dBME\xac\u053f\u0112\xfb\x8e\xd8\t\xb7\x89\x04V9\x18$O@\x00\x00\xe0\x94\xb0\xc1\xb1w\xa2 \xe4\x1f|t\xd0|\u0785i\xc2\x1cu\xc2\xf9\x8a\x01/\x93\x9c\x99\xed\xab\x80\x00\x00\u07d4\xb0\xc7\xceL\r\xc3\u00bb\xb9\x9c\xc1\x85{\x8aE_a\x17\x11\u0389\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb0\xce\xf8\xe8\xfb\x89\x84\xa6\x01\x9f\x01\xc6y\xf2r\xbb\xe6\x8f\\w\x89\b=lz\xabc`\x00\x00\xe0\x94\xb0\xd3+\xd7\xe4\u6577\xb0\x1a\xa3\xd0Ao\x80U}\xba\x99\x03\x8a\x03s\x9f\xf0\xf6\xe6\x130\x00\x00\xe0\x94\xb0\xd3\u0247+\x85\x05n\xa0\xc0\xe6\xd1\xec\xf7\xa7~<\u6ac5\x8a\x01\x0f\b\xed\xa8\xe5U\t\x80\x00\u07d4\xb0\xe4i\u0206Y8\x15\xb3IV8Y]\xae\xf0f_\xaeb\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xb0\xe7`\xbb\a\xc0\x81wsE\xe0W\x8e\x8b\u0218\"mN;\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb1\x040\x04\xec\x19A\xa8\xcfO+\x00\xb1W\x00\u076co\xf1~\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb1\x05\xdd=\x98|\xff\xd8\x13\xe9\xc8P\n\x80\xa1\xad%}V\u0189lj\xccg\u05f1\xd4\x00\x00\u07d4\xb1\x0f\u04a6G\x10/\x88\x1ft\xc9\xfb\xc3}\xa62\x94\x9f#u\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\xb1\x15\xee:\xb7d\x1e\x1a\xa6\xd0\x00\xe4\x1b\xfc\x1e\xc7!\f/2\x8a\x02\xc0\xbb=\xd3\fN \x00\x00\u07d4\xb1\x17\x8a\xd4s\x83\xc3\x1c\x814\xa1\x94\x1c\xbc\xd4t\xd0bD\xe2\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xb1\x17\x95\x89\u1779\xd4\x15W\xbb\xec\x1c\xb2L\xcc-\xec\x1c\u007f\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xb1\x19\u76a9\xb9\x16Re\x81\xcb\xf5!\xefGJ\xe8M\xcf\xf4\x89O\xba\x10\x01\xe5\xbe\xfe\x00\x00\u07d4\xb1\x1f\xa7\xfb'\n\xbc\xdfZ.\xab\x95\xaa0\u013566\uffc9+^:\xf1k\x18\x80\x00\x00\u07d4\xb1$\xbc\xb6\xff\xa40\xfc\xae.\x86\xb4_'\xe3\xf2\x1e\x81\xee\b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb1)\xa5\xcbq\x05\xfe\x81\v\u0615\xdcr\x06\xa9\x91\xa4TT\x88\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\xe0\x94\xb1.\xd0{\x8a8\xadU\x066?\xc0z\vmy\x996\xbd\xaf\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xb14\xc0\x049\x1a\xb4\x99(x3zQ\xec$/B(WB\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb1?\x93\xaf0\xe8\xd7fs\x81\xb2\xb9[\xc1\xa6\x99\xd5\xe3\xe1)\x89\x16\u012b\xbe\xbe\xa0\x10\x00\x00\u07d4\xb1E\x92\x85\x86>\xa2\xdb7Y\xe5F\u03b3\xfb7a\xf5\x90\x9c\x89<\xd7*\x89@\x87\xe0\x80\x00\u07d4\xb1F\xa0\xb9%U<\xf0o\xca\xf5J\x1bM\xfe\xa6!)\aW\x89lnY\xe6|xT\x00\x00\xe0\x94\xb1Jz\xaa\x8fI\xf2\xfb\x9a\x81\x02\u05bb\xe4\u010a\xe7\xc0o\xb2\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xb1K\xbe\xffpr\tu\xdca\x91\xb2\xa4O\xf4\x9f&r\x87<\x89\a\xc0\x86\x0eZ\x80\xdc\x00\x00\xe0\x94\xb1L\xc8\xde3\xd63\x826S\x9aH\x90 \xceFU\xa3+\u018a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xb1M\xdb\x03\x86\xfb`c\x98\xb8\xccGVZ\xfa\xe0\x0f\xf1\xd6j\x89\xa1*\xff\b>f\xf0\x00\x00\u07d4\xb1S\xf8(\xdd\amJ|\x1c%t\xbb-\xee\x1aD\xa3\x18\xa8\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb1T\x0e\x94\xcf\xf3F\\\xc3\u0447\xe7\xc8\u3f6f\x98FY\u2262\x15\xe4C\x90\xe33\x00\x00\u07d4\xb1X\xdbC\xfab\xd3\x0ee\xf3\u041b\xf7\x81\u01f6sr\uba89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u07d4\xb1ar_\xdc\xed\xd1yR\xd5{#\xef([~K\x11i\xe8\x89\x02\xb6\xdf\xed6d\x95\x80\x00\u07d4\xb1dy\xba\x8e}\xf8\xf6>\x1b\x95\xd1I\u0345)\xd75\xc2\u0689-\xe3:j\xac2T\x80\x00\u07d4\xb1f\xe3}.P\x1a\xe7<\x84\x14+_\xfbZ\xa6U\xddZ\x99\x89l]\xb2\xa4\xd8\x15\xdc\x00\x00\u07d4\xb1\x83\xeb\xeeO\xcbB\xc2 \xe4wt\xf5\x9dlT\xd5\xe3*\xb1\x89V\xf7\xa9\xc3<\x04\xd1\x00\x00\u07d4\xb1\x88\a\x84D\x02~8g\x98\xa8\xaehi\x89\x19\xd5\xcc#\r\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\xb1\x89j7\xe5\u0602Z-\x01vZ\xe5\xdeb\x99w\u0783R\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb1\x8eg\xa5\x05\n\x1d\xc9\xfb\x19\t\x19\xa3=\xa88\xefDP\x14\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb1\xa2\xb4:t3\xdd\x15\v\xb8\"'\xedQ\x9c\u05b1B\u04c2\x89\x94mb\rtK\x88\x00\x00\u07d4\xb1\xc0\u040b6\xe1\x84\xf9\x95*@7\xe3\xe5:f}\a\nN\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb1\xc3(\xfb\x98\xf2\xf1\x9a\xb6do\n|\x8cVo\xdaZ\x85@\x89\x87\x86x2n\xac\x90\x00\x00\xe0\x94\xb1\xc7Qxi9\xbb\xa0\xd6q\xa6w\xa1X\u01ab\xe7&^F\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xb1\xcdK\xdf\xd1\x04H\x9a\x02n\u025dYs\a\xa0By\xf1s\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xb1\u03d4\xf8\t\x15\x05\x05_\x01\n\xb4\xba\u0196\xe0\xca\x0fg\xa1\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xb1\u05b0\x1b\x94\xd8T\xfe\x8b7J\xa6^\x89\\\xf2*\xa2V\x0e\x892\xf5\x1e\u06ea\xa30\x00\x00\xe0\x94\xb1\u06e5%\v\xa9bWU$n\x06yg\xf2\xad/\a\x91\u078a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4\xb1\xe2\u0755\xe3\x9a\xe9w\\U\xae\xb1?\x12\xc2\xfa#0S\xba\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb1\xe6\xe8\x10\xc2J\xb0H\x8d\xe9\xe0\x1eWH7\x82\x9f|w\u0409\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb1\xe9\xc5\xf1\xd2\x1eauzk.\xe7Y\x13\xfcZ\x1aA\x01\u00c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xb2\x03\u049elV\xb9&\x99\u0139-\x1fo\x84d\x8d\xc4\u03fc\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb2\x16\xdcY\xe2|=ry\xf5\xcd[\xb2\xbe\u03f2`n\x14\u0649\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb2\x1byy\xbf|\\\xa0\x1f\xa8-\xd6@\xb4\x1c9\xe6\u01bcu\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xb2#\xbf\x1f\xbf\x80H\\\xa2\xb5V}\x98\xdb{\xc3SM\xd6i\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb2-PU\xd9b15\x96\x1ej\xbd'<\x90\xde\xea\x16\xa3\xe7\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xb2-\xad\xd7\xe1\xe0R2\xa927\xba\xed\x98\xe0\u07d2\xb1\x86\x9e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb24\x03_uDF<\xe1\xe2+\xc5S\x06F\x84\xc5\x13\xcdQ\x89\r\x89\xfa=\u010d\xcf\x00\x00\u07d4\xb2G\u03dcr\xecH*\xf3\xea\xa7Ye\x8fy=g\nW\f\x891p\x8a\xe0\x04T@\x00\x00\u07d4\xb2ghA\xee\x9f-1\xc1r\xe8#\x03\xb0\xfe\x9b\xbf\x9f\x1e\t\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb2y\xc7\xd3U\u0088\x03\x92\xaa\u046a!\xee\x86|;5\a\u07c9D[\xe3\xf2\uf1d4\x00\x00\u07d4\xb2|\x1a$ L\x1e\x11\x8du\x14\x9d\xd1\t1\x1e\a\xc0s\xab\x89\xa8\r$g~\xfe\xf0\x00\x00\u07d4\xb2\x81\x81\xa4X\xa4@\xf1\u01bb\x1d\xe8@\x02\x81\xa3\x14\x8fL5\x89\x14b\fW\xdd\xda\xe0\x00\x00\xe0\x94\xb2\x82E\x03|\xb1\x92\xf7W\x85\u02c6\xcb\xfe|\x93\r\xa2X\xb0\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\xb2\x87\xf7\xf8\xd8\u00c7,\x1bXk\xcd}\n\xed\xbf~s'2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb2\x8b\xb3\x9f4fQ|\xd4o\x97\x9c\xf5\x96S\xee}\x8f\x15.\x89\x18e\x01'\xcc=\xc8\x00\x00\u07d4\xb2\x8d\xbf\xc6I\x98\x94\xf7:q\xfa\xa0\n\xbe\x0fK\xc9\u045f*\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xb2\x96\x8f}5\xf2\b\x87\x161\xc6h{?=\xae\xab\xc6al\x89\bu\xc4\u007f(\x9fv\x00\x00\u07d4\xb2\x9f[|\x190\xd9\xf9z\x11^\x06pf\xf0\xb5M\xb4K;\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb2\xa1D\xb1\xeag\xb9Q\x0f\"g\xf9\xda9\xd3\xf9=\xe2fB\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb2\xa2\xc2\x11\x16\x12\xfb\x8b\xbb\x8e}\xd97\x8dg\xf1\xa3\x84\xf0P\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xb2\xa4\x98\xf0;\xd7\x17\x8b\u0627\x89\xa0\x0fR7\xafy\xa3\xe3\xf8\x8a\x04\x1b\xad\x15^e\x12 \x00\x00\u07d4\xb2\xaa/\x1f\x8e\x93\xe7\x97\x13\xd9,\xea\x9f\xfc\xe9\xa4\n\xf9\xc8-\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb2\xb5\x16\xfd\u045e\u007f8d\xb6\xd2\xcf\x1b%*AV\xf1\xb0;\x89\x02\xe9\x83\xc7a\x15\xfc\x00\x00\u07d4\xb2\xb7\u0374\xffKa\u0577\xce\v\"p\xbb\xb5&\x97C\xec\x04\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb2\xbd\xbe\u07d5\x90\x84v\xd7\x14\x8a7\f\u0193t6(\x05\u007f\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb2\xbf\xaaX\xb5\x19l\\\xb7\xf8\x9d\xe1_G\x9d\x188\xdeq=\x89\x01#n\xfc\xbc\xbb4\x00\x00\u07d4\xb2\xc5>\xfa3\xfeJ:\x1a\x80 \\s\xec;\x1d\xbc\xad\x06\x02\x89h\x01\u06b3Y\x18\x93\x80\x00\xe0\x94\xb2\xd06\x05\x15\xf1}\xab\xa9\x0f\u02ec\x82\x05\xd5i\xb9\x15\u05ac\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xb2\xd1\xe9\x9a\xf9\x121\x85\x8epe\xdd\x19\x183\r\xc4\xc7G\u054a\x03\x89O\x0eo\x9b\x9fp\x00\x00\u07d4\xb2\u066b\x96d\xbc\xf6\xdf <4o\u0192\xfd\x9c\xba\xb9 ^\x89\x17\xbex\x97`e\x18\x00\x00\u07d4\xb2\u0777\x86\xd3yN'\x01\x87\xd0E\x1a\xd6\u0237\x9e\x0e\x87E\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb2\xe0\x85\xfd\xdd\x14h\xba\aA['NsN\x11#\u007f\xb2\xa9\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xb2\xe9\xd7k\xf5\x0f\xc3k\xf7\u04d4Kc\xe9\u0288\x9bi\x99h\x89\x902\xeab\xb7K\x10\x00\x00\xe0\x94\xb2\xf9\xc9r\xc1\xe9swU\xb3\xff\x1b0\x88s\x83\x969[&\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xb2\xfc\x84\xa3\xe5\nP\xaf\x02\xf9M\xa08>\u055fq\xff\x01\u05ca\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4\xb3\x05\v\xef\xf9\xde3\xc8\x0e\x1f\xa1R%\xe2\x8f,A:\xe3\x13\x89%\xf2s\x93=\xb5p\x00\x00\u07d4\xb3\x11\x96qJH\xdf\xf7&\xea\x943\xcd)\x12\xf1\xa4\x14\xb3\xb3\x89\x91Hx\xa8\xc0^\xe0\x00\x00\xe0\x94\xb3\x14[tPm\x1a\x8d\x04|\xdc\xdcU9*{SPy\x9a\x8a\x1bb)t\x1c\r=]\x80\x00\u07d4\xb3 \x83H6\xd1\xdb\xfd\xa9\xe7\xa3\x18M\x1a\xd1\xfdC \xcc\xc0\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb3#\u073f.\xdd\xc58.\u4efb \x1c\xa3\x93\x1b\xe8\xb48\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xb3$\x00\xfd\x13\xc5P\t\x17\xcb\x03{)\xfe\"\xe7\xd5\"\x8f-\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xb3%gL\x01\xe3\xf7)\rR&3\x9f\xbe\xacg\xd2!'\x9f\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\xb3(%\xd5\xf3\xdb$\x9e\xf4\xe8\\\xc4\xf31S\x95\x89v\u8f09\x1b-\xf9\xd2\x19\xf5y\x80\x00\u07d4\xb3*\xf3\xd3\xe8\xd0u4I&To.2\x88{\xf9;\x16\xbd\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb3/\x1c&\x89\xa5\xcey\xf1\xbc\x97\v1XO\x1b\xcf\"\x83\xe7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb3<\x03#\xfb\xf9\xc2l\x1d\x8a\xc4N\xf7C\x91\u0400F\x96\u0689\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xb3O\x04\xb8\xdbe\xbb\xa9\xc2n\xfcL\xe6\xef\xc5\x04\x81\xf3\xd6]\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xb3U}9\xb5A\x1b\x84D__T\xf3\x8fb\xd2qM\x00\x87\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xb3X\xe9|p\xb6\x05\xb1\xd7\xd7)\u07f6@\xb4<^\xaf\xd1\xe7\x8a\x04<3\xc1\x93ud\x80\x00\x00\u0794\xb3^\x8a\x1c\r\xac~\x0ef\u06ecsjY*\xbdD\x01%a\x88\xcf\xceU\xaa\x12\xb3\x00\x00\xe0\x94\xb3fx\x94\xb7\x86<\x06\x8a\xd3D\x87?\xcf\xf4\xb5g\x1e\x06\x89\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xb3qw1\xda\xd6Q2\xday-\x87`0\xe4j\xc2'\xbb\x8a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb3s\x1b\x04l\x8a\u0195\xa1'\xfdy\u0425\xd5\xfaj\xe6\xd1.\x89lO\xd1\xee$nx\x00\x00\u07d4\xb3|+\x9fPc{\xec\xe0\u0295\x92\b\xae\xfe\xe6F;\xa7 \x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb3\x88\xb5\xdf\xec\xd2\xc5\u4d56W|d%V\xdb\xfe'xU\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb3\x8cNS{]\xf90\xd6Zt\xd0C\x83\x1dkH[\xbd\xe4\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xb3\x919Wa\x94\xa0\x86a\x95\x15\x1f3\xf2\x14\n\xd1\u0306\u03ca\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xb3\x9fL\x00\xb2c\f\xab}\xb7)^\xf4=G\xd5\x01\xe1\u007f\u05c9\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb3\xa6K\x11vrOT\t\xe1AJ5#f\x1b\xae\xe7KJ\x89\x01ch\xffO\xf9\xc1\x00\x00\u07d4\xb3\xa6\xbdA\xf9\xd9\xc3 \x1e\x05\v\x87\x19\x8f\xbd\xa3\x994\"\x10\x89\xc4a\xe1\xdd\x10)\xb5\x80\x00\u07d4\xb3\xa8\xc2\xcb}5\x8eW9\x94\x1d\x94[\xa9\x04Z\x02:\x8b\xbb\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb3\xaeT\xfb\xa0\x9d>\xe1\u05bd\xd1\xe9W\x929\x19\x02L5\xfa\x89\x03\x8d,\xeee\xb2*\x80\x00\u07d4\xb3\xb7\xf4\x93\xb4J,\x8d\x80\xecx\xb1\xcd\xc7Ze+s\xb0l\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb3\xc2(s\x1d\x18m-\xed[_\xbe\x00Lfl\x8eF\x9b\x86\x89\x01\x92t\xb2Y\xf6T\x00\x00\u07d4\xb3\xc2``\x9b\x9d\xf4\t^l]\xff9\x8e\xeb^-\xf4\x99\x85\x89\r\xc5_\xdb\x17d{\x00\x00\u07d4\xb3\xc6[\x84Z\xbal\xd8\x16\xfb\xaa\xe9\x83\xe0\xe4l\x82\xaa\x86\"\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb3\xc9H\x11\xe7\x17[\x14\x8b(\x1c\x1a\x84[\xfc\x9b\xb6\xfb\xc1\x15\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb3\xe2\x0e\xb4\xde\x18\xbd\x06\x02!h\x98\x94\xbe\u5bb2SQ\xee\x89\x03\xfc\x80\xcc\xe5\x16Y\x80\x00\u07d4\xb3\xe3\xc49\x06\x98\x80\x15f\x00\u0089.D\x8dA6\xc9-\x9b\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\xe0\x94\xb3\xf8*\x87\xe5\x9a9\xd0\u0480\x8f\aQ\xebr\xc22\x9c\xdc\u014a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xb3\xfc\x1dh\x81\xab\xfc\xb8\xbe\xcc\v\xb0!\xb8\xb7;r3\u0751\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\xb4\x05\x94\xc4\xf3fN\xf8I\u0326\"{\x8a%\xaai\t%\xee\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb4\x1e\xaf]Q\xa5\xba\x1b\xa3\x9b\xb4\x18\u06f5O\xabu\x0e\xfb\x1f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb4$\u058d\x9d\r\x00\xce\xc1\x93\x8c\x85N\x15\xff\xb8\x80\xba\x01p\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb4%bs\x96+\xf61\xd0\x14U\\\xc1\xda\r\xcc1akI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb40g\xfep\u0675Ys\xbaX\xdcd\xdd\u007f1\x1eUBY\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb46W\xa5\x0e\xec\xbc0w\xe0\x05\xd8\xf8\xd9O7xv\xba\u0509\x01\xec\x1b:\x1f\xf7Z\x00\x00\u07d4\xb4<'\xf7\xa0\xa1\"\bK\x98\xf4\x83\x92%A\u0203l\xee,\x89&\u009eG\u0104L\x00\x00\xe0\x94\xb4A5v\x86\x9c\b\xf9Q*\xd3\x11\xfe\x92Y\x88\xa5-4\x14\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xb4F\x05U$q\xa6\xee\xe4\u06abq\xff;\xb4\x13&\xd4s\xe0\x89-~=Q\xbaS\xd0\x00\x00\u07d4\xb4GW\x1d\xac\xbb>\u02f6\xd1\xcf\v\f\x8f88\xe5#$\xe2\x89\x01\xa3\x18f\u007f\xb4\x05\x80\x00\u07d4\xb4G\x83\xc8\xe5{H\a\x93\xcb\u059aE\xd9\f{O\fH\xac\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb4H\x15\xa0\xf2\x8eV\x9d\x0e\x92\x1aJ\u078f\xb2d%&Iz\x89\x03\x027\x9b\xf2\xca.\x00\x00\u07d4\xb4Im\xdb'y\x9a\"$W\xd79y\x11g(\u8844[\x89\x8d\x81\x9e\xa6_\xa6/\x80\x00\xe0\x94\xb4RL\x95\xa7\x86\x0e!\x84\x02\x96\xa6\x16$@\x19B\x1cJ\xba\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xb4\\\xca\r6\x82fbh<\xf7\u0432\xfd\xach\u007f\x02\xd0\u010965\u026d\xc5\u07a0\x00\x00\u0794\xb4d@\u01d7\xa5V\xe0L}\x91\x04f\x04\x91\xf9k\xb0v\xbf\x88\xce\xc7o\x0eqR\x00\x00\u07d4\xb4j\u0386^,P\xeaF\x98\xd2\x16\xabE]\xffZ\x11\xcdr\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb4m\x11\x82\xe5\xaa\xca\xff\r&\xb2\xfc\xf7/<\x9f\xfb\xcd\xd9}\x89\xaa*`<\xdd\u007f,\x00\x00\u07d4\xb4\x89!\xc9h}U\x10tE\x84\x93n\x88\x86\xbd\xbf-\xf6\x9b\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb4\x98\xbb\x0fR\x00\x05\xb6!jD%\xb7Z\xa9\xad\xc5-b+\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xb4\xb1\x1d\x10\x9f`\x8f\xa8\xed\xd3\xfe\xa9\xf8\xc3\x15d\x9a\xeb=\x11\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xb4\xb1K\xf4TU\u042b\b\x035\x8bu$\xa7+\xe1\xa2\x04[\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xb4\xb1\x85\xd9C\xee+Xc\x1e3\xdf\xf5\xafhT\xc1y\x93\xac\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb4\xbf$\u02c3hk\xc4i\x86\x9f\xef\xb0D\xb9\tqi\x93\xe2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb4\xc2\x00@\xcc\u0661\xa3(=\xa4\u0522\xf3e\x82\bC\xd7\xe2\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb4\xc8\x17\x0f{*\xb56\xd1\u0662[\xdd :\xe1(\x8d\xc3\u0549\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb4\xd8/.i\x94?}\xe0\xf5\xf7t8y@o\xac.\x9c\xec\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\xb4\xddF\f\xd0\x16rZd\xb2.\xa4\xf8\xe0n\x06gN\x03>\x8a\x01#\x1b\xb8t\x85G\xa8\x00\x00\u07d4\xb4\xddT\x99\xda\xeb%\a\xfb-\xe1\"\x97s\x1dLr\xb1k\xb0\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xb5\x04l\xb3\xdc\x1d\xed\xbd6E\x14\xa2\x84\x8eD\xc1\xdeN\xd1G\x8a\x03{}\x9b\xb8 @^\x00\x00\xe0\x94\xb5\b\xf9\x87\xb2\xde4\xaeL\xf1\x93\u0785\xbf\xf6\x13\x89b\x1f\x88\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xb5\tU\xaan4\x15q\x98f\b\xbd\u0211\xc2\x13\x9fT\f\u07c9j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xb5\f\x14\x9a\x19\x06\xfa\xd2xo\xfb\x13Z\xabP\x177\xe9\xe5o\x89\x15\b\x94\xe8I\xb3\x90\x00\x00\u07d4\xb5\f\x9fW\x89\xaeD\xe2\xdc\xe0\x17\xc7\x14\xca\xf0\f\x83\x00\x84\u0089\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\xb5\x14\x88,\x97\x9b\xb6B\xa8\r\u04c7T\u0578\xc8)m\x9a\a\x893\xc5I\x901r\f\x00\x00\u07d4\xb5\x1d\u0734\xddN\x8a\xe6\xbe3m\xd9eIq\xd9\xfe\xc8kA\x89\x16\xd4d\xf8=\u2500\x00\u07d4\xb5\x1eU\x8e\xb5Q/\xbc\xfa\x81\xf8\u043d\x93\x8cy\xeb\xb5$+\x89&\u009eG\u0104L\x00\x00\u07d4\xb5#\xff\xf9t\x98q\xb3S\x88C\x887\xf7\xe6\xe0\u07a9\xcbk\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xb5-\xfbE\xde]t\xe3\xdf \x832\xbcW\x1c\x80\x9b\x8d\xcf2\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xb55\xf8\u06c7\x9f\xc6\u007f\xecX\x82J\\\xbenT\x98\xab\xa6\x92\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\xb57\xd3jp\xee\xb8\xd3\xe5\xc8\r\xe8\x15\"\\\x11X\u02d2\u0109QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\xb5;\xcb\x17L%\x184\x8b\x81\x8a\xec\xe0 6E\x96Fk\xa3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5I>\xf1srDE\xcf4\\\x03]'\x9b\xa7Y\xf2\x8dQ\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb5S\xd2]kT!\xe8\x1c*\xd0^\v\x8b\xa7Q\xf8\xf0\x10\xe3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5Tt\xbaX\xf0\xf2\xf4\x0el\xba\xbe\xd4\xea\x17n\x01\x1f\xca\u0589j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xb5U\xd0\x0f\x91\x90\xcc6w\xae\xf3\x14\xac\xd7?\xdc99\x92Y\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5W\xab\x949\xefP\xd27\xb5S\xf0%\b6JFj\\\x03\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb5jx\x00(\x03\x9c\x81\xca\xf3{gu\xc6 \u7195Gd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5j\u04ae\xc6\xc8\xc3\xf1\x9e\x15\x15\xbb\xb7\u0751(RV\xb69\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb5t\x13\x06\n\xf3\xf1N\xb4y\x06_\x1e\x9d\x19\xb3uz\xe8\u0309\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xb5uI\xbf\xbc\x9b\xdd\x18\xf76\xb2&P\xe4\x8as`\x1f\xa6\\\x89\x18-~L\xfd\xa08\x00\x00\xe0\x94\xb5w\xb6\xbe\xfa\x05N\x9c\x04\x04a\x85P\x94\xb0\x02\xd7\xf5{\u05ca\x18#\xf3\xcfb\x1d#@\x00\x00\u07d4\xb5{\x04\xfa#\xd1 ?\xae\x06\x1e\xacEB\xcb`\xf3\xa5v7\x89\nZ\xa8P\t\xe3\x9c\x00\x00\u07d4\xb5\x87\f\xe3B\xd43C36s\x03\x8bGd\xa4n\x92_>\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb5\x87\xb4J,\xa7\x9eK\xc1\u074b\xfd\xd4: qP\xf2\xe7\xe0\x89\",\x8e\xb3\xfff@\x00\x00\u07d4\xb5\x89gm\x15\xa0DH4B0\xd4\xff'\xc9^\xdf\x12,I\x8965\u026d\xc5\u07a0\x00\x00\u0794\xb5\x8bR\x86^\xa5]\x806\xf2\xfa\xb2`\x98\xb3R\u0283~\x18\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xb5\x90k\n\u9881X\xe8\xacU\x0e9\xda\bn\xe3\x15v#\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb5\xa4g\x96\x85\xfa\x14\x19l.\x920\xc8\xc4\xe3;\xff\xbc\x10\xe2\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xb5\xa5\x89\u075f@q\u06f6\xfb\xa8\x9b?]]\xae}\x96\xc1c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5\xa6\x06\xf4\xdd\u02f9G\x1e\xc6\u007fe\x8c\xaf+\x00\xees\x02^\x89\xeaun\xa9*\xfct\x00\x00\u07d4\xb5\xadQW\u0769!\xe6\xba\xfa\u0350\x86\xaes\xae\x1fa\x1d?\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb5\xad\xd1\u701f}\x03\x06\x9b\xfe\x88;\n\x93\"\x10\xbe\x87\x12\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb5\xba)\x91|x\xa1\xd9\xe5\xc5\xc7\x13fl\x1eA\x1d\u007fi:\x89\xa8\r$g~\xfe\xf0\x00\x00\u07d4\xb5\xc8\x16\xa8(<\xa4\xdfh\xa1\xa7=c\xbd\x80&\x04\x88\xdf\b\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb5\xca\xc5\xed\x03G}9\v\xb2g\xd4\xeb\xd4a\x01\xfb\xc2\xc3\u0689\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xb5\u037cA\x15@oR\u5a85\xd0\xfe\xa1p\u0497\x9c\u01fa\x89Hz\x9a0E9D\x00\x00\u0794\xb5\u0653M{)+\xcf`;(\x80t\x1e\xb7`(\x83\x83\xa0\x88\xe7\xc2Q\x85\x05\x06\x00\x00\u07d4\xb5\xddP\xa1]\xa3Ih\x89\nS\xb4\xf1?\xe1\xaf\b\x1b\xaa\xaa\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb5\xfa\x81\x84\xe4>\xd3\u0e2b\x91!da\xb3R\x8d\x84\xfd\t\x89\x91Hx\xa8\xc0^\xe0\x00\x00\u07d4\xb5\xfb~\xa2\xdd\xc1Y\x8bfz\x9dW\xdd9\xe8Z8\xf3]V\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xb6\x00B\x97R\xf3\x99\xc8\r\a4tK\xae\n\x02.\xcag\u0189\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb6\x00\xfe\xabJ\xa9lSu\x04\xd9`W\"1Ai,\x19:\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xb6\x04|\u07d3-\xb3\xe4\x04_Iv\x12#AS~\u0556\x1e\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb6\x15\xe9@\x14>\xb5\u007f\x87X\x93\xbc\x98\xa6\x1b=a\x8c\x1e\x8c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xb6\x1c4\xfc\xac\xdap\x1aZ\xa8p$Y\u07b0\u4b83\x8d\xf8\x8a\aiZ\x92\xc2\ro\xe0\x00\x00\xe0\x94\xb60d\xbd3U\xe6\xe0~-7p$\x12Z3wlJ\xfa\x8a\b7Z*\xbc\xca$@\x00\x00\u07d4\xb65\xa4\xbcq\xfb(\xfd\xd5\xd2\xc3\"\x98:V\u0084Bni\x89\t79SM(h\x00\x00\u07d4\xb6F\u07d8\xb4\x94BtkaR\\\x81\xa3\xb0K\xa3\x10bP\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xb6YA\xd4LP\xd2Ffg\r6Gf\xe9\x91\xc0.\x11\u0089 \x86\xac5\x10R`\x00\x00\xe0\x94\xb6[\u05c0\xc7CA\x15\x16 'VR#\xf4NT\x98\xff\x8c\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4\xb6d\x11\xe3\xa0-\xed\xb7&\xfay\x10}\xc9\v\xc1\xca\xe6MH\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb6fu\x14.1\x11\xa1\xc2\xea\x1e\xb2A\x9c\xfaB\xaa\xf7\xa24\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xb6o\x92\x12K^c\x03XY\xe3\x90b\x88i\xdb\u07a9H^\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\xb6rsJ\xfc\xc2$\xe2\xe6\t\xfcQ\xd4\xf0Ys'D\xc9H\x89\x10\x04\xe2\xe4_\xb7\xee\x00\x00\xe0\x94\xb6w\x1b\v\xf3B\u007f\x9a\xe7\xa9>|.a\xeec\x94\x1f\xdb\b\x8a\x03\xfb&i)T\xbf\xc0\x00\x00\u07d4\xb6z\x80\xf1p\x19}\x96\xcd\xccJ\xb6\u02e6'\xb4\xaf\xa6\xe1,\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\xb6\x88\x99\xe7a\rL\x93\xa255\xbc\xc4H\x94[\xa1fo\x1c\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb6\xa8)3\xc9\xea\u06bd\x98\x1e]m`\xa6\x81\x8f\xf8\x06\xe3k\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xb6\xaa\u02cc\xb3\v\xab*\xe4\xa2BF&\xe6\xe1+\x02\xd0F\x05\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xb6\xb3J&?\x10\xc3\xd2\xec\xeb\n\xccU\x9a{*\xb8\\\xe5e\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb6\xbf\xe1\xc3\xef\x94\xe1\x84o\xb9\xe3\xac\xfe\x9bP\xc3\xe9\x06\x923\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xb6\xcdt2\xd5\x16\x1b\xe7\x97h\xadE\xde>Dz\a\x98 c\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb6\xceM\xc5`\xfcs\xdci\xfbzb\xe3\x88\xdb~r\xeavO\x894]\xf1i\xe9\xa3X\x00\x00\u07d4\xb6\xde\u03c2\x96\x98\x19\xba\x02\xde)\xb9\xb5\x93\xf2\x1bd\xee\xda\x0f\x89(\x1d\x90\x1fO\xdd\x10\x00\x00\xe0\x94\xb6\xe6\xc3\"+ko\x9b\xe2\x87]*\x89\xf1'\xfbd\x10\x0f\xe2\x8a\x01\xb2\x1dS#\xcc0 \x00\x00\u07d4\xb6\xe8\xaf\xd9=\xfa\x9a\xf2\u007f9\xb4\xdf\x06\ag\x10\xbe\xe3\u07eb\x89\x01Z\xf1\u05cbX\xc4\x00\x00\xe0\x94\xb6\xf7\x8d\xa4\xf4\xd0A\xb3\xbc\x14\xbc[\xa5\x19\xa5\xba\f2\xf1(\x8a$}\xd3,?\xe1\x95\x04\x80\x00\xe0\x94\xb6\xfb9xbP\b\x14&\xa3B\xc7\rG\xeeR\x1e[\xc5c\x8a\x03-&\xd1.\x98\v`\x00\x00\u07d4\xb7\r\xba\x93\x91h+J6Nw\xfe\x99%c\x01\xa6\xc0\xbf\x1f\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb7\x16#\xf3Q\a\xcft1\xa8?\xb3\xd2\x04\xb2\x9e\u0c67\xf4\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xb7\x1a\x13\xba\x8e\x95\x16{\x803\x1bR\u059e7\x05O\xe7\xa8&\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb7\x1bb\xf4\xb4H\xc0+\x12\x01\xcb^9J\xe6'\xb0\xa5`\xee\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xb7\" \xad\xe3d\xd06\x9f--\xa7\x83\xcaGM{\x9b4\u0389\x1b\x1a\xb3\x19\xf5\xecu\x00\x00\xe0\x94\xb7#\r\x1d\x1f\xf2\xac\xa3f\x969\x14\xa7\x9d\xf9\xf7\xc5\xea,\x98\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94\xb7$\n\U000af433<\b\xae\x97d\x10>5\xdc\xe3c\x84(\x8a\x01\xca\xdd/\xe9hnc\x80\x00\u07d4\xb7'\xa9\xfc\x82\xe1\xcf\xfc\\\x17_\xa1HZ\x9b\xef\xa2\u037d\u04496'\xe8\xf7\x127<\x00\x00\u07d4\xb7,*\x01\x1c\r\xf5\x0f\xbbn(\xb2\n\xe1\xaa\xd2\x17\x88g\x90\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb78-7\xdb\x03\x98\xacrA\f\xf9\x81=\xe9\xf8\xe1\uc36d\x8966\xc2^f\xec\xe7\x00\x00\u07d4\xb7;O\xf9\x9e\xb8\x8f\u061b\vmW\xa9\xbc3\x8e\x88o\xa0j\x89\x01\xbc\x16\xd6t\xec\x80\x00\x00\u07d4\xb7=jwU\x9c\x86\xcfet$)\x039K\xac\xf9n5p\x89\x04\xf1\xa7|\xcd;\xa0\x00\x00\u07d4\xb7Cr\xdb\xfa\x18\x1d\xc9$/9\xbf\x1d71\xdf\xfe+\xda\u03c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xb7G\x9d\xabP\"\xc4\xd5\u06ea\xf8\xde\x17\x1bN\x95\x1d\u0464W\x89\x04V9\x18$O@\x00\x00\u07d4\xb7I\xb5N\x04\u0571\x9b\xdc\xed\xfb\x84\xdaw\x01\xabG\x8c'\xae\x89\x91Hx\xa8\xc0^\xe0\x00\x00\u07d4\xb7N\xd2f`\x01\xc1c3\xcfz\xf5\x9eJ=H`6;\x9c\x89\n~\xbd^Cc\xa0\x00\x00\u07d4\xb7QI\xe1\x85\xf6\xe3\x92pWs\x90s\xa1\x82*\xe1\xcf\r\xf2\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\xb7S\xa7_\x9e\xd1\v!d:\n=\xc0Qz\xc9k\x1a@h\x89\x15\xc8\x18[,\x1f\xf4\x00\x00\xe0\x94\xb7V\xadR\xf3\xbft\xa7\xd2LgG\x1e\b\x87Ci6PL\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xb7Wn\x9d1M\xf4\x1e\xc5Pd\x94):\xfb\x1b\xd5\xd3\xf6]\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb7X\x89o\x1b\xaa\x86O\x17\xeb\xed\x16\xd9S\x88o\xeeh\xaa\xe6\x8965\u026d\xc5\u07a0\x00\x00\u0794\xb7h\xb5#N\xba:\x99h\xb3Mm\xdbH\x1c\x84\x19\xb3e]\x88\xcf\xceU\xaa\x12\xb3\x00\x00\u07d4\xb7\x82\xbf\xd1\xe2\xdep\xf4gdo\x9b\xc0\x9e\xa5\xb1\xfc\xf4P\xaf\x89\x0e~\xeb\xa3A\vt\x00\x00\xe0\x94\xb7\xa2\xc1\x03r\x8bs\x05\xb5\xaen\x96\x1c\x94\xee\x99\xc9\xfe\x8e+\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\xb7\xa3\x1a|8\xf3\xdb\t2.\xae\x11\xd2'!A\xea\"\x99\x02\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb7\xa6y\x1c\x16\xebN!b\xf1Ke7\xa0+=c\xbf\xc6\x02\x89*Rc\x91\xac\x93v\x00\x00\u07d4\xb7\xa7\xf7|4\x8f\x92\xa9\xf1\x10\fk\xd8)\xa8\xacm\u007f\u03d1\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xb7\xc0w\x94ft\xba\x93A\xfbLtz]P\xf5\xd2\xdad\x15\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xb7\xc0\xd0\xcc\vM4-@b\xba\xc6$\xcc\xc3\xc7\f\xc6\xda?\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xb7\xc9\xf1+\x03\x8esCm\x17\xe1\xc1/\xfe\x1a\xec\u0373\xf5\x8c\x89\x1dF\x01b\xf5\x16\xf0\x00\x00\u07d4\xb7\xcck\x1a\xcc2\u0632\x95\xdfh\xed\x9d^`\xb8\xf6L\xb6{\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xb7\xcehK\t\xab\xdaS8\x9a\x87Si\xf7\x19X\xae\xac;\u0749lk\x93[\x8b\xbd@\x00\x00\u07d4\xb7\xd1.\x84\xa2\xe4\u01264Z\xf1\xdd\x1d\xa9\xf2PJ*\x99n\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xb7\xd2R\xee\x94\x02\xb0\xee\xf1D)_\x0ei\xf0\xdbXl\bq\x89#\xc7W\a+\x8d\xd0\x00\x00\xe0\x94\xb7\u0541\xfe\n\xf1\xec8?;\xce\x00\xaf\x91\x99\xf3\xcf_\xe0\xcc\xe2\x8c\xd1J\x89\xcf\x15&@\xc5\xc80\x00\x00\u07d4\xb8R\x18\xf3B\xf8\x01.\u069f'Nc\xce!R\xb2\xdc\xfd\xab\x89\xa8\r$g~\xfe\xf0\x00\x00\u07d4\xb8UP\x10wn<\\\xb3\x11\xa5\xad\xee\xfe\x9e\x92\xbb\x9ad\xb9\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xb8_&\xdd\x0er\xd9\u009e\xba\xf6\x97\xa8\xafwG,+X\xb5\x8a\x02\x85\x19\xac\xc7\x19\fp\x00\x00\u07d4\xb8_\xf0>{_\xc4\"\x98\x1f\xae^\x99A\xda\xcb\u06bau\x84\x89Hz\x9a0E9D\x00\x00\xe0\x94\xb8f\a\x02\x1bb\xd3@\xcf&R\xf3\xf9_\xd2\xdcgi\x8b\u07ca\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xb8}\xe1\xbc\u0492i\xd5!\xb8v\x1c\u00dc\xfbC\x19\xd2\xea\u054965\u026d\xc5\u07a0\x00\x00\u07d4\xb8\u007fSv\xc2\xde\vl\xc3\xc1y\xc0`\x87\xaaG=kFt\x89Hz\x9a0E9D\x00\x00\u07d4\xb8\x84\xad\u060d\x83\xdcVJ\xb8\xe0\xe0,\xbd\xb69\x19\xae\xa8D\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb8\x8a7\xc2\u007fx\xa6\x17\xd5\xc0\x91\xb7\u0577:7a\xe6_*\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb8\x94x\"\u056c\u79ad\x83&\xe9T\x96\"\x1e\v\xe6\xb7=\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb8\x9c\x03n\xd7\u0112\x87\x99!\xbeA\xe1\f\xa1i\x81\x98\xa7L\x89b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x94\xb8\x9fF2\xdfY\t\xe5\x8b*\x99d\xf7O\xeb\x9a;\x01\xe0\u014a\x04\x88u\xbc\xc6\xe7\xcb\xeb\x80\x00\u07d4\xb8\xa7\x9c\x84\x94^G\xa9\xc3C\x86\x83\u05b5\x84,\xffv\x84\xb1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xb8\xa9y5'Y\xba\t\xe3Z\xa5\x93]\xf1u\xbf\xf6x\xa1\b\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xb8\xab9\x80[\xd8!\x18Ol\xbd=$s4{\x12\xbf\x17\\\x89\x06hZ\xc1\xbf\xe3,\x00\x00\xe0\x94\xb8\xac\x11}\x9f\r\xba\x80\x90\x14E\x82:\x92\x11\x03\xa51o\x85Zew\x9d\x1b\x8a\x05\x15\n\xe8J\x8c\xdf\x00\x00\x00\u07d4\xb9\xe9\f\x11\x92\xb3\xd5\xd3\xe3\xab\a\x00\xf1\xbfe_]\xd44z\x89\x1b\x19\xe5\vD\x97|\x00\x00\u07d4\xb9\xfd83\xe8\x8e|\xf1\xfa\x98y\xbd\xf5Z\xf4\xb9\x9c\xd5\xce?\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xba\x02I\xe0\x1d\x94[\xef\x93\xee^\xc6\x19%\xe0<\\\xa5\t\xfd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xba\x0f9\x02;\xdb)\xeb\x18b\xa9\xf9\x05\x9c\xab]0nf/\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xba\x10\xf2vB\x90\xf8uCCr\xf7\x9d\xbfq8\x01\u02ac\x01\x893\xc5I\x901r\f\x00\x00\u07d4\xba\x151\xfb\x9ey\x18\x96\xbc\xf3\xa8\x05X\xa3Y\xf6\xe7\xc1D\xbd\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\xba\x17m\xbe2I\xe3E\xcdO\xa9g\xc0\xed\x13\xb2LG\u5189\x15\xae\xf9\xf1\xc3\x1c\u007f\x00\x00\xe0\x94\xba\x1f\x0e\x03\u02da\xa0!\xf4\xdc\xeb\xfa\x94\xe5\u0209\xc9\u01fc\x9e\x8a\x06\u0450\xc4u\x16\x9a \x00\x00\u07d4\xba\x1f\xca\xf2#\x93~\xf8\x9e\x85gU\x03\xbd\xb7\xcaj\x92\x8bx\x89\"\xb1\xc8\xc1\"z\x00\x00\x00\xe0\x94\xba$\xfcCgS\xa79\xdb,\x8d@\xe6\xd4\xd0LR\x8e\x86\xfa\x8a\x02\xc0\xbb=\xd3\fN \x00\x00\u07d4\xbaB\xf9\xaa\xceL\x18E\x04\xab\xf5BWb\xac\xa2oq\xfb\u0709\x02\a\a}\u0627\x9c\x00\x00\u07d4\xbaF\x9a\xa5\u00c6\xb1\x92\x95\u0521\xb5G;T\x03S9\f\x85\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbad@\xae\xb3s{\x8e\xf0\xf1\xaf\x9b\f\x15\xf4\xc2\x14\xff\xc7\u03c965\u026d\xc5\u07a0\x00\x00\xe0\x94\xbam1\xb9\xa2a\xd6@\xb5\u07a5\x1e\xf2\x16,1\t\xf1\uba0a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xbap\xe8\xb4u\x9c\f<\x82\xcc\x00\xacN\x9a\x94\xdd[\xaf\xb2\xb8\x890C\xfa3\xc4\x12\xd7\x00\x00\u07d4\xba\x8ac\xf3\xf4\r\u4a03\x88\xbcP!/\xea\x8e\x06O\xbb\x86\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xba\x8eF\u059d.#C\xd8l`\xd8,\xf4, A\xa0\xc1\u0089\x05k\xc7^-c\x10\x00\x00\u07d4\xba\xa4\xb6L+\x15\xb7\x9f_ BF\xfdp\xbc\xbd\x86\xe4\xa9*\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xba\u0212,J\xcc},\xb6\xfdY\xa1N\xb4\\\xf3\xe7\x02!K\x89+^:\xf1k\x18\x80\x00\x00\u07d4\xba\xd25\xd5\b]\u01f0h\xa6|A&w\xb0>\x186\x88L\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xba\xd4B^\x17\x1c>r\x97^\xb4j\xc0\xa0\x15\xdb1Z]\x8f\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xba\xdc*\xef\x9fYQ\xa8\u05cak5\xc3\u0433\xa4\xe6\xe2\xe79\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xba\xdeCY\x9e\x02\xf8OL0\x14W\x1c\x97k\x13\xa3le\xab\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xba\xe9\xb8/r\x99c\x14\be\x9d\xd7N\x89\x1c\xb8\xf3\x86\x0f\xe5\x89j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94\xbb\x03f\xa7\u03fd4E\xa7\r\xb7\xfeZ\xe3H\x85uO\xd4h\x8a\x01M\xef,B\xeb\xd6@\x00\x00\u07d4\xbb\aj\xac\x92 \x80i\xea1\x8a1\xff\x8e\xeb\x14\xb7\xe9\x96\xe3\x89\b\x13\xcaV\x90m4\x00\x00\u07d4\xbb\bW\xf1\xc9\x11\xb2K\x86\u0227\x06\x81G?\u6aa1\xcc\xe2\x89\x05k\xc7^-c\x10\x00\x00\u0794\xbb\x19\xbf\x91\u02edt\xcc\xeb_\x81\x1d\xb2~A\x1b\xc2\xea\x06V\x88\xf4?\xc2\xc0N\xe0\x00\x00\xe0\x94\xbb'\u01a7\xf9\x10uGZ\xb2)a\x90@\xf8\x04\xc8\xeczj\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xbb7\x1cr\xc9\xf01l\xea+\xd9\xc6\xfb\xb4\a\x9ewT)\xef\x89_h\xe8\x13\x1e\u03c0\x00\x00\xe0\x94\xbb;\x01\v\x18\xe6\xe2\xbe\x115\x87\x10&\xb7\xba\x15\xea\x0f\xde$\x8a\x02 |\x800\x9bwp\x00\x00\xe0\x94\xbb;\x90\x05\xf4o\xd2\xca;0\x16%\x99\x92\x8cw\xd9\xf6\xb6\x01\x8a\x01\xb1\xae\u007f+\x1b\xf7\xdb\x00\x00\u07d4\xbb?\xc0\xa2\x9c\x03Mq\b\x12\xdc\xc7u\xc8\u02b9\u048diu\x899\xd4\xe8D\xd1\xcf_\x00\x00\u07d4\xbbH\xea\xf5\x16\xce-\xec>A\xfe\xb4\xc6y\xe4\x95vA\x16O\x89\xcf\x15&@\xc5\xc80\x00\x00\u07d4\xbbKJKT\x80p\xffAC,\x9e\b\xa0\xcao\xa7\xbc\x9fv\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\u07d4\xbbV\xa4\x04r<\xff \xd0hT\x88\xb0Z\x02\xcd\xc3Z\xac\xaa\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xbba\x8e%\"\x1a\u0667@\xb2\x99\xed\x14\x06\xbc94\xb0\xb1m\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbba\xa0K\xff\xd5|\x10G\rE\u00d1\x03\xf6FP4v\x16\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbbh#\xa1\xbd\x81\x9f\x13QU8&J-\xe0R\xb4D\"\b\x89\x01ch\xffO\xf9\xc1\x00\x00\u07d4\xbbl(J\xac\x8ai\xb7\\\u0770\x0f(\xe1EX;V\xbe\u0389lk\x93[\x8b\xbd@\x00\x00\u07d4\xbbu\xcbPQ\xa0\xb0\x94KFs\xcau*\x97\x03\u007f|\x8c\x15\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbb\x99;\x96\xee\x92Z\xda}\x99\u05c6W=?\x89\x18\f\u3a89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbb\xa3\u0180\x04$\x8eH\x95s\xab\xb2t6w\x06k$\u0227\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbb\xa4\xfa\xc3\xc4 9\xd8(\xe7B\xcd\xe0\xef\xff\xe7t\x94\x1b9\x89lj\u04c2\xd4\xfba\x00\x00\u07d4\xbb\xa8\xab\"\xd2\xfe\xdb\xcf\xc6?hL\b\xaf\xdf\x1c\x17P\x90\xb5\x89\x05_)\xf3~N;\x80\x00\u07d4\xbb\xa9v\xf1\xa1!_u\x12\x87\x18\x92\xd4_pH\xac\xd3V\u0209lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xbb\xab\x00\v\x04\b\xed\x01Z7\xc0GG\xbcF\x1a\xb1N\x15\x1b\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xbb\xab\xf6d;\xebK\xd0\x1c\x12\v\xd0Y\x8a\t\x87\xd8)g\u0449\xb52\x81x\xad\x0f*\x00\x00\u07d4\xbb\xb4\xee\x1d\x82\xf2\xe1VD,\xc938\xa2\xfc(o\xa2\x88d\x89JD\x91\xbdm\xcd(\x00\x00\u07d4\xbb\xb5\xa0\xf4\x80,\x86H\x00\x9e\x8ai\x98\xaf5,\u0787TO\x89\x05-T(\x04\xf1\xce\x00\x00\u07d4\xbb\xb6C\xd2\x18{6J\xfc\x10\xa6\xfd6\x8d}U\xf5\r\x1a<\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbb\xb8\xff\xe4?\x98\u078e\xae\x18F#\xaeRd\xe4$\u0438\u05c9\x05\xd5?\xfd\xe9(\b\x00\x00\u07d4\xbb\xbdn\u02f5u(\x91\xb4\u03b3\xcc\xe7:\x8fGpY7o\x89\x01\xf3\x99\xb1C\x8a\x10\x00\x00\u07d4\xbb\xbf9\xb1\xb6y\x95\xa4\"APO\x97\x03\u04a1JQV\x96\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xbb\xc8\xea\xffc~\x94\xfc\u014d\x91\xdb\\\x89\x12\x1d\x06\xe1/\xff\x98\x80\x00\u07d4\xbc\u065e\xdc!`\xf2\x10\xa0^:\x1f\xa0\xb0CL\xed\x00C\x9b\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbc\u07ec\xb9\xd9\x02<4\x17\x18.\x91\x00\xe8\xea\x1d73\x93\xa3\x89\x034-`\xdf\xf1\x96\x00\x00\u07d4\xbc\xe1>\"2*\u03f3U\xcd!\xfd\r\xf6\f\xf9:\xdd&\u0189\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xbc\xe4\x04u\xd3E\xb0q-\xeep=\x87\xcdvW\xfc\u007f;b\x8a\x01\xa4 \xdb\x02\xbd}X\x00\x00\u07d4\xbc\xed\xc4&|\u02c9\xb3\x1b\xb7d\xd7!\x11q\x00\x8d\x94\xd4M\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbc\xfc\x98\xe5\xc8+j\xdb\x18\n?\xcb\x12\v\x9av\x90\xc8j?\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xbd\x04;g\xc6>`\xf8A\xcc\xca\x15\xb1)\xcd\xfee\x90\xc8\xe3\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbd\x04\u007f\xf1\xe6\x9c\u01b2\x9a\xd2d\x97\xa9\xa6\xf2z\x90?\xc4\u0749.\xe4IU\b\x98\xe4\x00\x00\u07d4\xbd\b\xe0\xcd\xde\xc0\x97\xdby\x01\ua05a=\x1f\xd9\u0789Q\xa2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xbd\t\x12l\x89\x1cJ\x83\x06\x80Y\xfe\x0e\x15ylFa\xa9\xf4\x89+^:\xf1k\x18\x80\x00\x00\u07d4\xbd\f\\\u05d9\xeb\u0106B\xef\x97\xd7N\x8eB\x90d\xfe\u4489\x11\xac(\xa8\xc7)X\x00\x00\u07d4\xbd\x17\xee\xd8+\x9a%\x92\x01\x9a\x1b\x1b<\x0f\xba\xd4\\@\x8d\"\x89\r\x8drkqw\xa8\x00\x00\u07d4\xbd\x18\x037\v\u0771)\xd29\xfd\x16\xea\x85&\xa6\x18\x8a\u5389\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xbd+p\xfe\xcc7d\x0fiQO\xc7\xf3@IF\xaa\xd8k\x11\x89A\rXj \xa4\xc0\x00\x00\u07d4\xbd0\x97\xa7\x9b<\r.\xbf\xf0\xe6\xe8j\xb0\xed\xad\xbe\xd4p\x96\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4\xbd2]@)\xe0\xd8r\x9fm9\x9cG\x82$\xae\x9ez\xe4\x1e\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\xbdC*9\x16$\x9bG$):\xf9\x14nI\xb8(\n\u007f*\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xbdG\xf5\xf7n;\x93\x0f\xd9HR\t\xef\xa0\xd4v=\xa0uh\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbdK`\xfa\xect\n!\xe3\a\x13\x91\xf9j\xa54\xf7\xc1\xf4N\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\xbdK\u0571\"\xd8\xef{|\x8f\x06gE\x03 \xdb!\x16\x14.\x89 \x86\xac5\x10R`\x00\x00\u07d4\xbdQ\xee.\xa1C\u05f1\u05b7~~D\xbd\xd7\xda\x12\U00105b09G~\x06\u0332\xb9(\x00\x00\u07d4\xbdY\tN\aO\x8dy\x14*\xb1H\x9f\x14\x8e2\x15\x1f \x89\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xbdZ\x8c\x94\xbd\x8b\xe6G\x06D\xf7\f\x8f\x8a3\xa8\xa5\\cA\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbd^G:\xbc\xe8\xf9zi2\xf7|/\xac\xaf\x9c\xc0\xa0\x05\x14\x89<\x92X\xa1\x06\xa6\xb7\x00\x00\u07d4\xbd_F\u02ab,=K(\x93\x96\xbb\xb0\u007f *\x06\x11>\xd4\xc3\xfb\xa1\xa8\x91;\x19@~\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbd\x9eV\xe9\x02\xf4\xbe\x1f\xc8v\x8d\x808\xba\xc6>*\u02ff\x8e\x8965f3\xeb\xd8\xea\x00\x00\u07d4\xbd\xa4\xbe1~~K\xed\x84\xc0I^\xee2\xd6\a\xec8\xcaR\x89}2'yx\xefN\x80\x00\u07d4\xbd\xb6\v\x82:\x11s\xd4Z\a\x92$_\xb4\x96\xf1\xfd3\x01\u03c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xbd\xba\xf6CM@\xd65[\x1e\x80\xe4\f\u012b\x9ch\xd9a\x16\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xbd\xc0,\xd43\f\x93\xd6\xfb\xdaOm\xb2\xa8]\xf2/C\xc23\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbd\xc4aF+c\"\xb4b\xbd\xb3?\"y\x9e\x81\b\xe2A}\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\xbd\xc79\xa6\x99p\v.\x8e,JL{\x05\x8a\x0eQ=\u07be\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbd\xc7Hs\xaf\x92+\x9d\xf4t\x85;\x0f\xa7\xff\v\xf8\xc8&\x95\x89\xd8\xc9F\x00c\xd3\x1c\x00\x00\u07d4\xbd\xca*\x0f\xf3E\x88\xafb_\xa8\xe2\x8f\xc3\x01Z\xb5\xa3\xaa\x00\x89~\xd7?w5R\xfc\x00\x00\u07d4\xbd\xd3%N\x1b:m\xc6\xcc,i}Eq\x1a\xca!\xd5\x16\xb2\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xbd\u07e3M\x0e\xbf\x1b\x04\xafS\xb9\x9b\x82IJ\x9e=\x8a\xa1\x00\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xbd\xe4\xc7?\x96\x9b\x89\xe9\u03aef\xa2\xb5\x18DH\x0e\x03\x8e\x9a\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xbd\xe9xj\x84\xe7[H\xf1\x8erm\u05cdp\xe4\xaf>\xd8\x02\x8a\x016\x9f\xb9a(\xacH\x00\x00\u07d4\xbd\xed\x11a/\xb5\xc6\u0699\xd1\xe3\x0e2\v\xc0\x99Tf\x14\x1e\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xbd\xed~\a\xd0q\x1ehM\xe6Z\u0232\xabW\xc5\\\x1a\x86E\x89 \t\xc5\u023fo\xdc\x00\x00\u07d4\xbd\xf6\x93\xf83\xc3\xfeG\x17S\x18G\x88\xebK\xfeJ\xdc?\x96\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xbd\xf6\xe6\x8c\f\xd7X@\x80\xe8G\xd7,\xbb#\xaa\xd4j\xeb\x1d\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xbe\n/8_\t\xdb\xfc\xe9g2\xe1+\xb4\n\xc3I\x87\x1b\xa8\x89WL\x11^\x02\xb8\xbe\x00\x00\u07d4\xbe\f*\x80\xb9\xde\bK\x17(\x94\xa7l\xf4szOR\x9e\x1a\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xbe\x1c\xd7\xf4\xc4r\a\th\xf3\xbd\xe2h6k!\xee\xea\x83!\x89\xe9\x1a|\u045f\xa3\xb0\x00\x00\u07d4\xbe#F\xa2\u007f\xf9\xb7\x02\x04OP\r\xef\xf2\xe7\xff\xe6\x82EA\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xbe$q\xa6\u007f`G\x91\x87r\xd0\xe3h9%^\xd9\u0591\xae\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xbe+\"\x80R7h\xea\x8a\xc3\\\xd9\xe8\x88\xd6\nq\x93\x00\u0509lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xbe+2nx\xed\x10\xe5P\xfe\xe8\xef\xa8\xf8\a\x03\x96R/Z\x8a\bW\xe0\xd6\xf1\xdav\xa0\x00\x00\xe0\x94\xbe0Zyn3\xbb\xf7\xf9\xae\xaee\x12\x95\x90f\xef\xda\x10\x10\x8a\x02M\xceT\xd3J\x1a\x00\x00\x00\u07d4\xbeG\x8e\x8e=\xdek\xd4\x03\xbb-\x1ce|C\x10\xee\x19'#\x89\x1a\xb2\xcf|\x9f\x87\xe2\x00\x00\u07d4\xbeN}\x98?.*ck\x11\x02\xecp9\xef\xeb\xc8B\u9349\x03\x93\xef\x1aQ'\xc8\x00\x00\u07d4\xbeO\xd0sap\"\xb6\u007f\\\x13I\x9b\x82\u007fv69\xe4\xe3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbeRZ3\xea\x91aw\xf1r\x83\xfc\xa2\x9e\x8b5\v\u007fS\v\x89\x8f\x01\x9a\xafF\xe8x\x00\x00\u07d4\xbeS2/C\xfb\xb5\x84\x94\xd7\xcc\xe1\x9d\xda'+$P\xe8'\x89\n\xd7\u03afB\\\x15\x00\x00\u07d4\xbeS\x82F\xddNo\f \xbfZ\xd17<;F:\x13\x1e\x86\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbeZ`h\x99\x98c\x9a\xd7[\xc1\x05\xa3qt>\xef\x0fy@\x89\x1b2|s\xe1%z\x00\x00\u07d4\xbe\\\xba\x8d7By\x86\xe8\xca&\x00\xe8X\xbb\x03\xc3YR\x0f\x89\xa00\xdc\xeb\xbd/L\x00\x00\u07d4\xbe`\x03~\x90qJK\x91~a\xf1\x93\xd84\x90g\x03\xb1:\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xbec:77\xf6\x849\xba\xc7\xc9\nR\x14 X\ue38ao\x894\n\xad!\xb3\xb7\x00\x00\x00\xe0\x94\xbee\x9d\x85\xe7\xc3O\x883\xea\u007fH\x8d\xe1\xfb\xb5\xd4\x14\x9b\xef\x8a\x01\xeb\xd2:\xd9\u057br\x00\x00\u07d4\xbes'M\x8cZ\xa4J<\xbe\xfc\x82c\xc3{\xa1!\xb2\n\u04c9\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xbe\x86\u0430C\x84\x19\u03b1\xa081\x927\xbaR\x06\xd7.F\x8964\xfb\x9f\x14\x89\xa7\x00\x00\u07d4\xbe\x8d\u007f\x18\xad\xfe]l\xc7u9I\x89\xe1\x93\f\x97\x9d\x00}\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbe\x91\x86\xc3JRQJ\xbb\x91\a\x86\x0fgO\x97\xb8!\xbd[\x89\x1b\xa0\x1e\xe4\x06\x03\x10\x00\x00\u07d4\xbe\x93W\x93\xf4[p\xd8\x04]&T\xd8\xdd:\xd2K[a7\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4\xbe\x98\xa7\u007f\xd4\x10\x97\xb3OY\xd7X\x9b\xaa\xd0!e\x9f\xf7\x12\x890\xca\x02O\x98{\x90\x00\x00\u07d4\xbe\x9b\x8c4\xb7\x8e\xe9G\xff\x81G.\xdaz\xf9\xd2\x04\xbc\x84f\x89\b!\xab\rD\x14\x98\x00\x00\u07d4\xbe\xa0\r\xf1pg\xa4:\x82\xbc\x1d\xae\xca\xfbl\x140\x0e\x89\xe6\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xbe\xa0\xaf\xc9:\xae!\b\xa3\xfa\xc0Yb;\xf8o\xa5\x82\xa7^\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xbe\xb35\x8cP\u03dfu\xff\xc7mD<,\u007fU\aZ\x05\x89\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\xbe\xb4\xfd1UYC`E\u0739\x9dI\xdc\xec\x03\xf4\fB\u0709lk\x93[\x8b\xbd@\x00\x00\u07d4\xbe\xc2\xe6\xde9\xc0|+\xaeUj\u03fe\xe2\xc4r\x8b\x99\x82\xe3\x89\x1f\x0f\xf8\xf0\x1d\xaa\xd4\x00\x00\u07d4\xbe\xc6d\x0fI\t\xb5\x8c\xbf\x1e\x80cB\x96\x1d`u\x95\tl\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xbe\xc8\xca\xf7\xeeIF\x8f\xeeU.\xff:\xc5#N\xb9\xb1}B\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbe\xce\xf6\x1c\x1cD+\xef|\xe0Ks\xad\xb2I\xa8\xba\x04~\x00\x896;V\u00e7T\xc8\x00\x00\u0794\xbe\xd4d\x9d\xf6F\u2052)\x03-\x88hUo\xe1\xe0S\u04c8\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\xbe\xd4\xc8\xf0\x06\xa2|\x1e_|\xe2\x05\xdeu\xf5\x16\xbf\xb9\xf7d\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\xbe\xe8\u0430\bB\x19T\xf9-\x00\r9\x0f\xb8\xf8\xe6X\xea\xee\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbe\xec\u05af\x90\f\x8b\x06J\xfc\xc6\a?-\x85\u055a\xf1\x19V\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xbe\xef\x94!8y\xe0&\"\x14+\xeaa)\tx\x93\x9a`\u05ca\x016\x85{2\xad\x86\x04\x80\x00\xe0\x94\xbe\xf0}\x97\xc3H\x1f\x9dj\xee\x1c\x98\xf9\xd9\x1a\x18\n2D+\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xbe\xfbD\x8c\f_h?\xb6~\xe5p\xba\xf0\xdbV\x86Y\x97Q\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xbf\x05\a\f,4!\x93\x11\xc4T\x8b&\x14\xa48\x81\r\xedm\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbf\x05\xff^\xcf\r\xf2\u07c8wY\xfb\x82t\xd928\xac&}\x89+^:\xf1k\x18\x80\x00\x00\xe0\x94\xbf\t\xd7pH\xe2p\xb6b3\x0e\x94\x86\xb3\x8bC\xcdx\x14\x95\x8a\\S\x9b{\xf4\xff(\x80\x00\x00\u07d4\xbf\x17\xf3\x97\xf8\xf4o\x1b\xaeE\u0447\x14\x8c\x06\xee\xb9Y\xfaM\x896I\u0156$\xbb0\x00\x00\u07d4\xbf\x186A\xed\xb8\x86\xce`\xb8\x19\x02a\xe1OB\xd9<\xce\x01\x89\x01[5W\xf1\x93\u007f\x80\x00\u07d4\xbf*\xeaZ\x1d\xcfn\u04f5\xe829D\xe9\x83\xfe\xdf\u046c\xfb\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xbf@\x96\xbcT}\xbf\xc4\xe7H\t\xa3\x1c\x03\x9e{8\x9d^\x17\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\xbfI\xc1H\x981eg\u0637\t\xc2\xe5\x05\x94\xb3f\xc6\u04cc\x89'\xbf8\xc6TM\xf5\x00\x00\u07d4\xbfLs\xa7\xed\xe7\xb1d\xfe\a!\x14\x846T\xe4\xd8x\x1d\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\xbfP\xce.&K\x9f\xe2\xb0h0az\xed\xf5\x02\xb25\x1bE\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbfY\xae\xe2\x81\xfaC\xfe\x97\x19CQ\xa9\x85~\x01\xa3\xb8\x97\xb2\x89 \x86\xac5\x10R`\x00\x00\u07d4\xbfh\u048a\xaf\x1e\xee\xfe\xf6F\xb6^\x8c\xc8\u0450\xf6\xc6\u069c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xbfi%\xc0\aQ\x00\x84@\xa6s\x9a\x02\xbf+l\u06ab^:\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xbfw\x01\xfcb%\u0561x\x15C\x8a\x89A\xd2\x1e\xbc]\x05\x9d\x89e\xea=\xb7UF`\x00\x00\u07d4\xbf\x8b\x80\x05\xd66\xa4\x96d\xf7Bu\xefBC\x8a\xcde\xac\x91\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbf\x92A\x8a\fl1$M\"\x02`\xcb>\x86}\u05f4\xefI\x89\x05i\x00\xd3<\xa7\xfc\x00\x00\u07d4\xbf\x9a\xcdDE\xd9\xc9UF\x89\u02bb\xba\xb1\x88\x00\xff\x17A\u008965\u026d\xc5\u07a0\x00\x00\u07d4\xbf\x9f'\x1fz~\x12\xe3m\xd2\xfe\x9f\xac\xeb\xf3\x85\xfeaB\xbd\x89\x03f\xf8O{\xb7\x84\x00\x00\u07d4\xbf\xa8\xc8X\xdf\x10,\xb1$!\x00\x8b\n1\xc4\xc7\x19\n\xd5`\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xbf\xae\xb9\x10ga}\u03cbD\x17+\x02\xafaVt\x83]\xba\x89\b\xb5\x9e\x88H\x13\b\x80\x00\xe0\x94\xbf\xb0\xea\x02\xfe\xb6\x1d\xec\x9e\"\xa5\a\tY3\x02\x99\xc40r\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xbf\xbc\xa4\x18\xd3R\x9c\xb3\x93\b\x10b\x03*n\x11\x83\u01b2\u070a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xbf\xbe\x05\u831c\xbb\xcc\x0e\x92\xa4\x05\xfa\xc1\xd8]\xe2H\xee$\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xbf\xbf\xbc\xb6V\u0099+\xe8\xfc\u0782\x19\xfb\xc5J\xad\u055f)\x8a\x02\x1e\x18\xd2\xc8!\xc7R\x00\x00\u07d4\xbf\xc5z\xa6f\xfa\u239f\x10zI\xcbP\x89\xa4\xe2!Q\u074965\u026d\xc5\u07a0\x00\x00\u07d4\xbf\u02d70$c\x04p\r\xa9\vAS\xe7\x11Ab.\x1cA\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xbf\xd9<\x90\u009c\a\xbc_\xb5\xfcI\xae\xeaU\xa4\x0e\x13O5\x8a\x05\xed\xe2\x0f\x01\xa4Y\x80\x00\x00\xe0\x94\xbf\xe3\xa1\xfcn$\xc8\xf7\xb3%\x05`\x99\x1f\x93\u02e2\u03c0G\x8a\x10\xf0\xcf\x06M\u0552\x00\x00\x00\u07d4\xbf\u6f30\xf0\xc0xRd3$\xaa]\xf5\xfdb%\xab\xc3\u0289\x04\t\xe5+H6\x9a\x00\x00\u07d4\xbf\xf5\xdfv\x994\xb8\x94<\xa9\x13}\x0e\xfe\xf2\xfen\xbb\xb3N\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xbf\xfbi)$\x1fx\x86\x93'>p\"\xe6\x0e>\xab\x1f\xe8O\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc0\x06O\x1d\x94t\xab\x91]V\x90l\x9f\xb3 \xa2\xc7\t\x8c\x9b\x89\x13h?\u007f<\x15\xd8\x00\x00\u07d4\xc0\a\xf0\xbd\xb6\xe7\x00\x92\x02\xb7\xaf>\xa9\t\x02i|r\x14\x13\x89\xa2\xa0\xe4>\u007f\xb9\x83\x00\x00\u07d4\xc0\n\xb0\x80\xb6C\xe1\u00ba\xe3c\xe0\u0455\xde.\xff\xfc\x1cD\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u0794\xc0 wD\x9a\x13Jz\xd1\xef~M\x92z\xff\xec\ueb75\xae\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xc0$q\xe3\xfc.\xa0S&\x15\xa7W\x1dI2\x89\xc1<6\xef\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc0-n\xad\xea\xcf\x1bx\xb3\u0285\x03\\c{\xb1\xce\x01\xf4\x90\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc03\xb12Z\n\xf4Tr\xc2U'\x85;\x1f\x1c!\xfa5\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\xc03\xbe\x10\xcbHa;\xd5\xeb\xcb3\xedI\x02\xf3\x8bX0\x03\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xc04[3\xf4\x9c\xe2\u007f\xe8,\xf7\xc8M\x14\x1ch\xf5\x90\xcev\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc0=\xe4*\x10\x9bezd\xe9\"$\xc0\x8d\xc1'^\x80\u0672\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc0@i\u07f1\x8b\tlxg\xf8\xbe\xe7zm\xc7Gz\xd0b\x89\x90\xf54`\x8ar\x88\x00\x00\xe0\x94\xc0A?Z|-\x9aK\x81\b(\x9e\xf6\xec\xd2qx\x15$\xf4\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\xc0C\xf2E-\u02d6\x02\xefb\xbd6\x0e\x03=\xd29q\xfe\x84\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc0OK\xd4\x04\x9f\x04F\x85\xb8\x83\xb6)Y\xaec\x1df~5\x8a\x01;\x80\xb9\x9cQ\x85p\x00\x00\u07d4\xc0V\u053dk\xf3\u02ec\xace\xf8\xf5\xa0\xe3\x98\v\x85'@\xae\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xc0[t\x06 \xf1s\xf1nRG\x1d\u00cb\x9cQJ\v\x15&\x89\a\x96\xe3\xea?\x8a\xb0\x00\x00\u07d4\xc0i\xef\x0e\xb3B\x99\xab\xd2\xe3-\xab\xc4yD\xb2r3H$\x89\x06\x81U\xa46v\xe0\x00\x00\u07d4\xc0l\xeb\xbb\xf7\xf5\x14\x9af\xf7\xeb\x97k>G\xd5e\x16\xda/\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc0r^\u00bd\xc3:\x1d\x82`q\u07a2\x9db\xd48Z\x8c%\x8a\b\xa0\x85\x13F:\xa6\x10\x00\x00\u07d4\xc0~8g\xad\xa0\x96\x80z\x05\x1al\x9c4\xcc;?J\xd3J\x89`\xf0f \xa8IE\x00\x00\u07d4\xc0\x89^\xfd\x05m\x9a:\x81\xc3\xdaW\x8a\xda1\x1b\xfb\x93V\u03c9\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc0\x90\xfe#\xdc\xd8k5\x8c2\xe4\x8d*\xf9\x10$%\x9fef\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc0\x9af\x17*\xea7\r\x9ac\xda\x04\xffq\xff\xbb\xfc\xff\u007f\x94\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc0\x9e<\xfc\x19\xf6\x05\xff>\xc9\xc9\xc7\x0e%@\xd7\xee\x97Cf\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc0\xa0*\xb9N\xbeV\xd0E\xb4\x1bb\x9b\x98F.:\x02J\x93\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xc0\xa3\x93\b\xa8\x0e\x9e\x84\xaa\xaf\x16\xac\x01\xe3\xb0\x1dt\xbdk-\x89\afM\xddL\x1c\v\x80\x00\u07d4\xc0\xa6\u02edwi*=\x88\xd1A\xefv\x9a\x99\xbb\x9e<\x99Q\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xc0\xa7\xe8C]\xff\x14\xc2Uws\x9d\xb5\\$\u057fW\xa3\u064a\nm\xd9\f\xaeQ\x14H\x00\x00\u07d4\xc0\xae\x14\xd7$\x83./\xce'x\xde\u007f{\x8d\xaf{\x12\xa9>\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc0\xaf\xb7\u0637\x93p\xcf\xd6c\u018c\u01b9p*7\u035e\xff\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc0\xb0\xb7\xa8\xa6\xe1\xac\xdd\x05\xe4\u007f\x94\xc0\x96\x88\xaa\x16\u01ed\x8d\x89\x03{m\x02\xacvq\x00\x00\xe0\x94\xc0\xb3\xf2D\xbc\xa7\xb7\xde[H\xa5>\u06dc\xbe\xab\vm\x88\xc0\x8a\x01;\x80\xb9\x9cQ\x85p\x00\x00\u07d4\xc0\xc0M\x01\x06\x81\x0e>\xc0\xe5J\x19\U000ab157\xe6\x9aW=\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\xc0\xca2w\x94.tE\x87K\xe3\x1c\xeb\x90)rqO\x18#\x89\r\x8drkqw\xa8\x00\x00\u07d4\xc0\u02ed<\xcd\xf6T\xda\"\xcb\xcf\\xe\x97\xca\x19U\xc1\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc0\xcb\xf6\x03/\xa3\x9e|F\xffw\x8a\x94\xf7\xd4E\xfe\"\xcf0\x89\x10\xce\x1d=\x8c\xb3\x18\x00\x00\u07d4\xc0\xe0\xb9\x03\b\x8e\fc\xf5=\xd0iWTR\xaf\xf5$\x10\u00c9\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xc0\xe4W\xbdV\xec6\xa1$k\xfa20\xff\xf3\x8eY&\xef\"\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xc0\xed\rJ\xd1\r\xe045\xb1S\xa0\xfc%\xde;\x93\xf4R\x04\x89\xabM\xcf9\x9a:`\x00\x00\u07d4\xc0\xf2\x9e\xd0\af\x11\xb5\xe5^\x13\x05G\xe6\x8aH\xe2m\xf5\u4262\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xc1\x13(x#\\]\u06e5\xd9\xf3\"\x8bR6\xe4p \xdco\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc1\x17\r\xba\xad\xb3\xde\xe6\x19\x8e\xa5D\xba\xec\x93%\x18`\xfd\xa5\x89A\rXj \xa4\xc0\x00\x00\xe0\x94\xc1&W=\x87\xb0\x17ZR\x95\xf1\xdd\a\xc5u\u03cc\xfa\x15\xf2\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xc1'\xaa\xb5\x90e\xa2\x86D\xa5k\xa3\xf1^.\xac\x13\xda)\x95\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xc1+\u007f@\u07da/{\xf9\x83f\x14\"\xab\x84\xc9\xc1\xf5\bX\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xc1,\xfb{=\xf7\x0f\xce\xca\x0e\xde&5\x00\xe2xs\xf8\xed\x16\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc1/\x88\x1f\xa1\x12\xb8\x19\x9e\xcb\xc7>\xc4\x18W\x90\xe6\x14\xa2\x0f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc18Lnq~\xbeK#\x01NQ\xf3\x1c\x9d\xf7\xe4\xe2[1\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc1C\x8c\x99\xddQ\xef\x1c\xa88j\xf0\xa3\x17\xe9\xb0AEx\x88\x89\f\x1d\xaf\x81\u0623\xce\x00\x00\u07d4\xc1c\x12(\xef\xbf*.:@\x92\xee\x89\x00\xc69\xed4\xfb\u02093\xc5I\x901r\f\x00\x00\u07d4\xc1u\xbe1\x94\xe6iB-\x15\xfe\xe8\x1e\xb9\xf2\xc5lg\xd9\u0249\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc1\x82v\x86\xc0\x16\x94\x85\xec\x15\xb3\xa7\xc8\xc0\x15\x17\xa2\x87M\xe1\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xc1\x8a\xb4g\xfe\xb5\xa0\xaa\xdf\xff\x91#\x0f\xf0VFMx\xd8\x00\x89lk\x93[\x8b\xbd@\x00\x00\u0794\xc1\x95\x05CUM\x8aq0\x03\xf6b\xbba,\x10\xadL\xdf!\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xc1\xa4\x1aZ'\x19\x92&\xe4\xc7\xeb\x19\x8b\x03\x1bY\x19o\x98B\x89\nZ\xa8P\t\xe3\x9c\x00\x00\u07d4\xc1\xb2\xa0\xfb\x9c\xadE\xcdi\x91\x92\xcd'T\v\x88\xd38By\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc1\xb2\xaa\x8c\xb2\xbfb\xcd\xc1:G\xec\xc4e\u007f\xac\xaa\x99_\x98\x8967\x93\xfa\x96\u6980\x00\u07d4\xc1\xb5\x00\x01\x1c\xfb\xa9]|\xd66\xe9^l\xbfagFK%\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc1\xb9\xa5pM5\x1c\xfe\x98?y\xab\xee\xc3\u06fb\xae;\xb6)\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc1\xcb\xd2\xe23*RL\xf2\x19\xb1\r\x87\x1c\xcc \xaf\x1f\xb0\xfa\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xc1\xcd\xc6\x01\xf8\x9c\x04(\xb3\x13\x02\u0447\xe0\xdc\b\xad}\x1cW\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xc1\u052f8\xe9\xbay\x90@\x89HI\xb8\xa8!\x93u\xf1\xacx\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc1\xe1@\x9c\xa5,%CQ4\xd0\x06\u00a6\xa8T-\xfbrs\x89\x01\xdd\x1eK\xd8\xd1\xee\x00\x00\u07d4\xc1\xeb\xa5hJ\xa1\xb2L\xbac\x15\x02c\xb7\xa9\x13\x1a\xee\u008d\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc1\xec\x81\xdd\x12=K|-\u0674\xd48\xa7\a,\x11\u0707L\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc1\xf3\x9b\xd3]\xd9\xce\xc37\xb9oG\xc6w\x81\x81`\xdf7\xb7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794\xc1\xff\xad\a\u06d6\x13\x8cK*S\x0e\xc1\xc7\xde)\xb8\xa0Y,\x88\xf4?\xc2\xc0N\xe0\x00\x00\xe0\x94\xc2\x1f\xa6d:\x1f\x14\xc0)\x96\xadqD\xb7Y&\xe8~\xcbK\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc24\nL\xa9L\x96x\xb7IL<\x85%(\xed\xe5\xeeR\x9f\x89\x02\xa3k\x05\xa3\xfd|\x80\x00\u07d4\xc29\xab\u07ee>\x9a\xf5E\u007fR\xed+\x91\xfd\n\xb4\xd9\xc7\x00\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc2;/\x92\x1c\xe4\xa3z%\x9e\u4b4b!X\xd1]fOY\x89\x01`\x89\x95\xe8\xbd?\x80\x00\u07d4\xc2C\x99\xb4\xbf\x86\xf73\x8f\xbfd^;\"\xb0\u0dd79\x12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc2L\u03bc#D\xcc\xe5d\x17\xfbhL\xf8\x16\x13\xf0\xf4\xb9\xbd\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\xc2Rf\xc7gf2\xf1>\xf2\x9b\xe4U\ud50a\xddVw\x92\x89Hz\x9a0E9D\x00\x00\u07d4\xc2\\\xf8&U\f\x8e\xaf\x10\xaf\"4\xfe\xf9\x04\u0779R\x13\xbe\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc2f?\x81E\xdb\xfe\xc6\xc6F\xfc\\I\x96\x13E\xde\x1c\x9f\x11\x89%g\xacp9+\x88\x00\x00\u07d4\xc2pEh\x854+d\vL\xfc\x1bR\x0e\x1aTN\xe0\xd5q\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xc2sv\xf4]!\xe1^\xde;&\xf2e_\xce\xe0,\xcc\x0f*\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xc2w\x97q\xf0Smy\xa8p\x8fi1\xab\xc4K05\u964a\x047\u04ca\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xc2\xc1>r\xd2h\xe7\x15\r\u01d9\xe7\xc6\xcf\x03\u0209T\xce\u05c9%\xf2s\x93=\xb5p\x00\x00\u07d4\xc2\xcb\x1a\xda]\xa9\xa0B8s\x81G\x93\xf1aD\xef6\xb2\xf3\x89HU~;p\x17\xdf\x00\x00\u07d4\xc2\xd1w\x8e\xf6\xee_\xe4\x88\xc1E\xf3Xkn\xbb\xe3\xfb\xb4E\x89>\x1f\xf1\xe0;U\xa8\x00\x00\xe0\x94\xc2\xd9\xee\xdb\xc9\x01\x92c\xd9\xd1l\u016e\a-\x1d=\xd9\xdb\x03\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc2\xe0XJq4\x8c\xc3\x14\xb7; )\xb6#\v\x92\u06f1\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc2\xe2\u0518\xf7\r\xcd\bY\xe5\v\x02:q\nmK!3\xbd\x8989\x11\xf0\f\xbc\xe1\x00\x00\u07d4\xc2\xed_\xfd\u046d\xd8U\xa2i/\xe0b\xb5\xd6\x18t#`\u0509A\rXj \xa4\xc0\x00\x00\u07d4\xc2\xee\x91\xd3\xefX\xc9\u0465\x89\x84N\xa1\xae1%\xd6\u017ai\x894\x95tD\xb8@\xe8\x00\x00\u07d4\xc2\xfa\xfd\xd3\n\xcbmg\x06\xe9)<\xb0&A\xf9\xed\xbe\a\xb5\x89Q\x00\x86\vC\x0fH\x00\x00\u07d4\xc2\xfd\v\xf7\xc7%\xef>\x04~Z\xe1\u009f\xe1\x8f\x12\xa7)\x9c\x89Hz\x9a0E9D\x00\x00\u07d4\xc2\xfe}us\x1fcm\xcd\t\xdb\xda\x06q9;\xa0\xc8*}\x89wC\"\x17\xe6\x83`\x00\x00\u07d4\xc3\x10z\x9a\xf32-R8\xdf\x012A\x911b\x959W}\x89\x1a\xb4\xe4d\xd4\x141\x00\x00\xe0\x94\xc3\x11\v\xe0\x1d\xc9sL\xfcn\x1c\xe0\u007f\x87\xd7}\x13E\xb7\xe1\x8a\x01\x0f\f\xe9I\xe0\x0f\x93\x00\x00\u07d4\xc3 8\xcaR\xae\xe1\x97E\xbe\\1\xfc\xdcT\x14\x8b\xb2\xc4\u0409\x02\xb5\xaa\xd7,e \x00\x00\u07d4\xc3%\xc3R\x80\x1b\xa8\x83\xb3\"l_\xeb\r\xf9\xea\xe2\xd6\xe6S\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\xc3.\xc7\xe4*\xd1l\xe3\xe2UZ\xd4\xc5C\x06\xed\xa0\xb2gX\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc32\xdfP\xb1<\x014\x90\xa5\xd7\xc7]\xbf\xa3f\u0687\xb6\u0589\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc3:\u0373\xba\x1a\xab'P{\x86\xb1]g\xfa\xf9\x1e\xcfb\x93\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc3>\u0393Z\x8fN\xf98\xea~\x1b\xac\x87\u02d2]\x84\x90\u028a\a\x03\x8c\x16x\x1fxH\x00\x00\u07d4\xc3@\xf9\xb9\x1c&r\x8c1\xd1!\xd5\xd6\xfc;\xb5m=\x86$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc3F\xcb\x1f\xbc\xe2\xab(]\x8eT\x01\xf4-\xd7#M7\xe8m\x89\x04\x86\u02d7\x99\x19\x1e\x00\x00\xe0\x94\xc3H=n\x88\xac\x1fJ\xe7<\xc4@\x8dl\x03\xab\xe0\xe4\x9d\u028a\x03\x99\x92d\x8a#\u0220\x00\x00\xe0\x94\xc3H\xfcZF\x13#\xb5{\xe3\x03\u02c96\x1b\x99\x19\x13\xdf(\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xc3N;\xa12.\xd0W\x11\x83\xa2O\x94 N\xe4\x9c\x18fA\x89\x03'\xaf\uf927\xbc\x00\x00\xe0\x94\xc3[\x95\xa2\xa3s|\xb8\xf0\xf5\x96\xb3E$\x87+\xd3\r\xa24\x8a\x01\x98\xbe\x85#^-P\x00\x00\xe0\x94\xc3c\x1cv\x98\xb6\xc5\x11\x19\x89\xbfE''\xb3\xf99Zm\xea\x8a\x02C'X\x96d\x1d\xbe\x00\x00\u07d4\xc3l\vc\xbf\xd7\\/\x8e\xfb\x06\b\x83\xd8h\xcc\xcdl\xbd\xb4\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94\xc3uk\xcd\xcc~\xect\xed\x89j\xdf\xc35'Y0&n\b\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\u00c4\xacn\xe2|9\xe2\xf2x\xc2 \xbd\xfa[\xae\xd6&\xd9\u04c9 \x86\xac5\x10R`\x00\x00\u07d4\u00e0F\xe3\u04b2\xbfh\x14\x88\x82n2\xd9\xc0aQ\x8c\xfe\x8c\x89\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\u07d4\u00e9\"j\xe2u\xdf,\xab1+\x91\x10@cJ\x9c\x9c\x9e\xf6\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u00f9(\xa7o\xadex\xf0O\x05U\xe69R\xcd!\xd1R\n\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc3\xc2)s)\xa6\xfd\x99\x11~T\xfcj\xf3y\xb4\xd5VT~\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xc3\xc3\xc2Q\rg\x80 HZcs]\x13\a\xecL\xa60+\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc3\xcbk6\xafD?,n%\x8bJ9U:\x81\x87G\x81\x1f\x89WG=\x05\u06ba\xe8\x00\x00\xe0\x94\xc3\xdbVW\xbbr\xf1\rX\xf21\xfd\xdf\x11\x98\n\xffg\x86\x93\x8a\x01@a\xb9\xd7z^\x98\x00\x00\xe0\x94\xc3\u06df\xb6\xf4lH\n\xf3De\u05d7S\xb4\xe2\xb7Jg\u038a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc3\xddX\x908\x860;\x92\x86%%z\xe1\xa0\x13\xd7\x1a\xe2\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc3\xe0G\x1cd\xff5\xfaR2\xcc1!\xd1\u04cd\x1a\x0f\xb7\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\xc3\xe2\f\x96\u07cdN8\xf5\v&Z\x98\xa9\x06\xd6\x1b\xc5\x1aq\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc3\u31f0<\xe9\\\xcf\xd7\xfaQ\u0744\x01\x83\xbcCS(\t\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc3\xf8\xf6r\x95\xa5\xcd\x04\x93d\xd0]#P&#\xa3\xe5.\x84\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xc4\x01\xc4'\xcc\xcf\xf1\r\xec\xb8d /6\xf5\x80\x83\"\xa0\xa8\x89\xb4{Q\xa6\x9c\xd4\x02\x00\x00\u07d4\xc4\b\x8c\x02_>\x85\x01?T9\xfb4@\xa1s\x01\xe5D\xfe\x89~\t\xdbM\x9f?4\x00\x00\u07d4\xc4\x14a\xa3\u03fd2\u0246UU\xa4\x8117\xc0v1#`\x8965\xc6 G9\u0640\x00\u07d4\xc4 8\x8f\xbe\xe8J\xd6V\xddh\xcd\xc1\xfb\xaa\x93\x92x\v4\x89\n-\xcac\xaa\xf4\u0140\x00\u07d4\xc4\"P\xb0\xfeB\xe6\xb7\xdc\xd5\u0210\xa6\xf0\u020f__\xb5t\x89\b\x1e\xe4\x82SY\x84\x00\x00\u07d4\xc4-j\xebq\x0e:P\xbf\xb4Ml1\t)i\xa1\x1a\xa7\xf3\x89\b\"c\xca\xfd\x8c\xea\x00\x00\xe0\x94\xc4@\xc7\xca/\x96Kir\xeffJ\"a\xdd\xe8\x92a\x9d\x9c\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xc4K\xde\xc8\xc3l\\h\xba\xa2\xdd\xf1\xd41i2)rlC\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xc4OJ\xb5\xbc`9|s~\xb0h3\x91\xb63\xf8\xa2G\x1b\x12\x1c\xa4\x89 .h\xf2\u00ae\xe4\x00\x00\u07d4\xc4h\x1es\xbb\x0e2\xf6\xb7& H1\xffi\xba\xa4\x87~2\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xc4k\xbd\xefv\xd4\xca`\xd3\x16\xc0\u007f]\x1ax\x0e;\x16_~\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc4}a\v9\x92P\xf7\x0e\xcf\x13\x89\xba\xb6),\x91&O#\x89\x0f\xa7\xe7\xb5\xdf<\xd0\x00\x00\u07d4\u0100;\xb4\a\xc7b\xf9\vu\x96\xe6\xfd\u1513\x1ev\x95\x90\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u0106Q\xc1\xd9\xc1k\xffL\x95T\x88l??&C\x1foh\x89#\xab\x95\x99\xc4?\b\x00\x00\u07d4\u0109\xc8?\xfb\xb0%*\xc0\xdb\xe3R\x12\x17c\x0e\x0fI\x1f\x14\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u010bi<\xac\xef\xdb\xd6\xcb]x\x95\xa4.1\x962~&\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u0113H\x9eV\u00fd\xd8)\x00}\xc2\xf9VA)\x06\xf7k\xfa\x89\x02\xa7\x91H\x8eqT\x00\x00\u07d4\u0116\u02f0E\x9aj\x01`\x0f\u0149\xa5Z2\xb4T!\u007f\x9d\x89\x0e\u0683\x8cI)\b\x00\x00\u07d4\u011c\xfa\xa9g\xf3\xaf\xbfU\x03\x10a\xfcL\xef\x88\xf8]\xa5\x84\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u0136\xe5\xf0\x9c\xc1\xb9\r\xf0x\x03\xce=M\x13vj\x9cF\xf4\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\u013e\xc9c\b\xa2\x0f\x90\u02b1\x83\x99\u0113\xfd=\x06Z\xbfE\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\xe0\x94\xc4\xc0\x1a\xfc>\x0f\x04R!\xda\x12\x84\u05c7\x85tD/\xb9\xac\x8a\x01\x92\xb5\u0249\x02J\x19\xc1\xbdo\x12\x80\x00\xe0\x94\xc5\x00\xb7 sN\xd2)8\u05cc^H\xb2\xba\x93g\xa5u\xba\x8a\a\x12\x9e\x1c\xdf7>\xe0\x00\x00\u07d4\xc5\x0f\xe4\x15\xa6A\xb0\x85lNu\xbf\x96\x05\x15D\x1a\xfa5\x8d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc5\x13L\xfb\xb1\xdfz \xb0\xedpWb.\xee\u0480\x94}\xad\x89\xcd\xff\x97\xfa\xbc\xb4`\x00\x00\xe0\x94\xc5\x17\xd01\\\x87\x88\x13\xc7\x17\u132f\xa1\xea\xb2eN\x01\u068a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xc5\x18y\x9aY%Wb\x13\xe2\x18\x96\xe0S\x9a\xbb\x85\xb0Z\xe3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc5\"\xe2\x0f\xbf\x04\xed\u007fk\x05\xa3{G\x18\xd6\xfc\xe0\x14.\x1a\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc5$\bmF\xc8\x11+\x12\x8b/\xafo|}\x81`\xa88l\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xc5-\x1a\fs\u00a1\xbe\x84\x91Q\x85\xf8\xb3O\xaa\n\xdf\x1d\xe3\x89K\xe4\xea\xb3\xfa\x0f\xa6\x80\x00\xe0\x94\xc55\x94\xc7\u03f2\xa0\x8f(L\xc9\u05e6;\xbd\xfc\v1\x972\x8a\nk#(\xff:b\xc0\x00\x00\u07d4\xc57I(\xcd\xf1\x93pTC\xb1L\xc2\r\xa4#G<\xd9\u03c9\a}\x10P\x9b\xb3\xaf\x80\x00\u07d4\xc58\xa0\xff(*\xaa_Ku\u03f6,p\x03~\xe6}O\xb5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc5;P\xfd;+r\xbclC\v\xaf\x19JQU\x85\u04d8m\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xc5=y\xf7\u02dbp\x95/\xd3\x0f\xceX\xd5K\x9f\vY\xf6G\x8a\x01\x13\xe2\xd6tCE\xf8\x00\x00\u07d4\xc5I\u07c3\xc6\xf6^\xec\x0f\x1d\u0260\x93J\\_:P\xfd\x88\x89\x9d\xc0\\\xce(\u00b8\x00\x00\u07d4\xc5P\x05\xa6\xc3~\x8c\xa7\xe5C\xce%\x99s\xa3\xca\u0396\x1aJ\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc5U\xb91V\xf0\x91\x01#\x80\x00\xe0\x94\u0166)\xa3\x96%R\u02ce\xde\u0609cj\xaf\xbd\f\x18\xcee\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u016e\x86\xb0\xc6\xc7\xe3\x90\x0f\x13h\x10\\VS\u007f\xaf\x8dt>\x89\n1\x06+\xee\xedp\x00\x00\u07d4\u0170\t\xba\xea\xf7\x88\xa2v\xbd5\x81:\xd6[@\v\x84\x9f;\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u0175l\xd24&|(\xe8\x9cok\"f\xb0\x86\xa1/\x97\f\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xc5\u01a4\x99\x8a3\xfe\xb7dCz\x8b\xe9)\xa7;\xa3J\ad\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\xe0\x94\xc5\xc7=a\xcc\xe7\xc8\xfeL\x8f\xce)\xf3\x90\x92\xcd\x19>\x0f\xff\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xc5\xc7Y\vV!\xec\xf85\x85\x88\u079bh\x90\xf2baC\U000498a1]\tQ\x9b\xe0\x00\x00\u07d4\xc5\xcd\xce\xe0\xe8]\x11}\xab\xbfSj?@i\xbfD?T\xe7\x89j\xc5\xc6-\x94\x86\a\x00\x00\u07d4\xc5\u050c\xa2\xdb/\x85\xd8\xc5U\xcb\x0e\x9c\xfe\x82i6x?\x9e\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xc5\xde\x12\x03\xd3\xcc,\xea1\xc8.\xe2\xdeY\x16\x88\a\x99\xea\xfd\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xc5\xe4\x88\xcf+Vw\x939q\xf6L\xb8 -\xd0WR\xa2\xc0\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc5\xe8\x12\xf7o\x15\xf2\xe1\xf2\xf9\xbcH#H<\x88\x04cog\x89\x03\xf5\x14\x19:\xbb\x84\x00\x00\u07d4\xc5\u94d34\xf1%.\u04ba&\x81D\x87\xdf\u0498+1(\x89\x03\xcbq\xf5\x1f\xc5X\x00\x00\u07d4\xc5\xebB)^\x9c\xad\xea\xf2\xaf\x12\xde\u078a\x8dS\xc5y\xc4i\x89\xcf\x15&@\xc5\xc80\x00\x00\xe0\x94\xc5\xed\xbb\xd2\xca\x03WeJ\xd0\xeaG\x93\xf8\xc5\xce\xcd0\xe2T\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xc5\xf6K\xab\xb7\x031B\xf2\x0eF\u05eab\x01\xed\x86\xf6q\x03\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc5\xf6\x87qrF\u068a \r \xe5\u9f2c`\xb6\u007f8a\x89\x01\x8d\x99?4\xae\xf1\x00\x00\u07d4\xc6\x04[<5\vL\xe9\xca\fkuO\xb4\x1ai\xb9~\x99\x00\x892$\xf4'#\xd4T\x00\x00\u07d4\xc6\v\x04eN\x00;F\x83\x04\x1f\x1c\xbdk\u00cf\xda|\xdb\u0589lk\x93[\x8b\xbd@\x00\x00\u07d4\xc6\x14F\xb7T\xc2N;\x16B\xd9\xe5\x17e\xb4\xd3\xe4k4\xb6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc6\x18R\x13!\xab\xaf[&Q:J\x95(\bo\"\n\xdco\x89\x01v\xb3D\xf2\xa7\x8c\x00\x00\u07d4\xc6#FW\xa8\a8A&\xf8\x96\x8c\xa1p\x8b\xb0{\xaaI<\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc6%\xf8\u024d'\xa0\x9a\x1b\u02bdQ(\xb1\u00a9HV\xaf0\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xc65^\xc4v\x8cp\xa4\x9a\xf6\x95\x13\u0343\xa5\xbc\xa7\xe3\xb9\u034a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xc6:\xc4\x17\x99.\x9f\x9b`8n\xd9S\xe6\xd7\xdf\xf2\xb0\x90\xe8\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\xc6<\u05c8!\x18\xb8\xa9\x1e\aML\x8fK\xa9\x18Q0;\x9a\x89\x0e\x189\x8ev\x01\x90\x00\x00\u07d4\xc6R\x87\x1d\x19$\"\u01bc#_\xa0c\xb4J~\x1dC\u3149\bg\x0e\x9e\xc6Y\x8c\x00\x00\xe0\x94\xc6gD\x1e\u007f)y\x9a\xbaadQ\xd5;?H\x9f\x9e\x0fH\x8a\x02\xf2\x9a\xceh\xad\u0740\x00\x00\u07d4\xc6j\xe4\xce\xe8\u007f\xb352\x19\xf7\u007f\x1dd\x86\u0140(\x032\x89\x01\x9a\x16\xb0o\xf8\xcb\x00\x00\u07d4\xc6t\xf2\x8c\x8a\xfd\a?\x8by\x96\x91\xb2\xf0XM\xf9B\xe8D\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u0197\xb7\x04w\u02b4.+\x8b&f\x81\xf4\xaesu\xbb%A\x8a\x01.W2\xba\xba\\\x98\x00\x00\u07d4\u019b\x85U9\xce\x1b\x04qG(\xee\xc2Z7\xf3g\x95\x1d\xe7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u019b\xe4@\x13Mb\x80\x98\x01D\xa9\xf6M\x84t\x8a7\xf3I\x89&\u009eG\u0104L\x00\x00\u07d4\u019df<\x8d`\x90\x83\x91\xc8\xd26\x19\x153\xfd\xf7wV\x13\x89\x1aJ\xba\"\\ t\x00\x00\u0794\u01a2\x86\xe0e\xc8_:\xf7H\x12\xed\x8b\u04e8\xce]%\xe2\x1d\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\u01a3\x0e\xf5\xbb3 \xf4\r\xc5\xe9\x81#\rR\xae:\xc1\x93\"\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\u01ae(}\xdb\xe1\x14\x9b\xa1m\xdc\xcaO\xe0j\xa2\uaa48\xa9\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xc6\xc7\xc1\x917\x98\x97\u075c\x9d\x9a3\x83\x9cJ_b\xc0\x89\r\x89\xd8\xd8T\xb2$0h\x80\x00\xe0\x94\xc6\xcdh\xec56,Z\xd8L\x82\xadN\xdc#!%\x91-\x99\x8a\x05\xe0T\x9c\x962\xe1\xd8\x00\x00\u07d4\xc6\u0615N\x8f?\xc53\xd2\xd20\xff\x02\\\xb4\xdc\xe1O4&\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xc6\xdb\u06de\xfd^\xc1\xb3xn\x06q\xeb\"y\xb2S\xf2\x15\xed\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc6\xdf u\xeb\xd2@\xd4Hi\u00bek\u07c2\xe6=N\xf1\xf5\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc6\xe2\xf5\xaf\x97\x9a\x03\xfdr:\x1bn\xfar\x83\x18\u03dc\x18\x00\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\xc6\xe3$\xbe\xeb[6v^\xcdFB`\xf7\xf2`\x06\xc5\xc6.\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc6\xe4\xcc\fr\x83\xfc\x1c\x85\xbcH\x13\xef\xfa\xafr\xb4\x98#\xc0\x89\x0f\x03\x1e\xc9\xc8}\xd3\x00\x00\xe0\x94\xc6\xee5\x93B)i5)\xdcA\u067bq\xa2IfX\xb8\x8e\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\xc6\xfb\x1e\xe3t\x17\u0400\xa0\xd0H\x92;\u06ba\xb0\x95\xd0w\u0189\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc7\x05'\xd4D\u0110\xe9\xfc?\\\xc4Nf\xebO0k8\x0f\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc7\r\x85mb\x1e\xc1E0<\nd\x00\xcd\x17\xbb\xd6\xf5\xea\xf7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xc7\x0f\xa4Uv\xbf\x9c\x86_\x988\x93\x00,AI&\xf6\x10)\x89\x15\xb4\xaa\x8e\x97\x02h\x00\x00\u07d4\xc7\x11E\xe5)\u01e7\x14\xe6y\x03\xeeb\x06\xe4\xc3\x04+g'\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4\xc7\x1b*=q5\u04a8_\xb5\xa5q\u073ei^\x13\xfcC\u034965\u026d\xc5\u07a0\x00\x00\u07d4\xc7\x1f\x1du\x87?3\u0732\xddK9\x87\xa1-\a\x91\xa5\xce'\x897\b\xba\xed=h\x90\x00\x00\u07d4\xc7\x1f\x92\xa3\xa5J{\x8c/^\xa4C\x05\xfc\u02c4\xee\xe21H\x89\x02\xb5\x9c\xa11\xd2\x06\x00\x00\u07d4\xc7!\xb2\xa7\xaaD\xc2\x12\x98\xe8P9\xd0\x0e.F\x0eg\v\x9c\x89\a\xa1\xfe\x16\x02w\x00\x00\x00\u07d4\xc7,\xb3\x01%\x8e\x91\xbc\b\x99\x8a\x80]\u0452\xf2\\/\x9a5\x89 \t\xc5\u023fo\xdc\x00\x00\xe0\x94\xc76\x8b\x97\t\xa5\xc1\xb5\x1c\n\xdf\x18ze\xdf\x14\xe1+}\xba\x8a\x02\x02o\xc7\u007f\x03\u5b80\x00\u07d4\xc79%\x9e\u007f\x85\xf2e\x9b\xef_`\x9e\xd8k=Yl \x1e\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xc7>!\x12(\"\x15\xdc\ab\xf3+~\x80}\xcd\x1az\xae>\x8a\x01v\f\xbcb;\xb3P\x00\x00\xe0\x94\xc7If\x80B\xe7\x11#\xa6H\x97^\b\xedc\x82\xf8>\x05\xe2\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\xc7J9\x95\xf8\a\xde\x1d\xb0\x1a.\xb9\xc6.\x97\xd0T\x8fio\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc7Pl\x10\x19\x12\x1f\xf0\x8a,\x8c\x15\x91\xa6^\xb4\xbd\xfbJ?\x89 \x86\xac5\x10R`\x00\x00\u07d4\xc7\\7\xce-\xa0k\xbc@\b\x11Y\u01ba\x0f\x97n9\x93\xb1\x89:y#\x15\x1e\xcfX\x00\x00\u07d4\xc7]\"Y0j\xec}\xf0\"v\x8ci\x89\x9ae!\x85\xdb\u0109\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc7`\x97\x1b\xbc\x18\x1cj|\xf7tA\xf2BG\u045c\xe9\xb4\u03c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xc7a0\xc7<\xb9!\x028\x02\\\x9d\xf9]\v\xe5J\xc6\u007f\xbe\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\xc7e\xe0\x04v\x81\tG\x81j\xf1B\xd4m.\u7f28\xccO\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc7g^VG\xb9\xd8\xda\xf4\xd3\xdf\xf1\xe5R\xf6\xb0qT\xac8\x89\t\xc2\x00vQ\xb2P\x00\x00\u07d4\xc7{\x01\xa6\xe9\x11\xfa\x98\x8d\x01\xa3\xab3dk\xee\xf9\xc18\xf3\x89'\x1bo\xa5\xdb\xe6\xcc\x00\x00\u07d4\u01c3z\u0420\xbf\x14\x18i7\xac\xe0lUF\xa3j\xa5OF\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u01d8\x06\x03+\xc7\xd8(\xf1\x9a\u01a6@\u018e=\x82\x0f\xa4B\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u01d9\xe3N\x88\xff\x88\xbe}\xe2\x8e\x15\xe4\xf2\xa6=\v3\xc4\u02c9\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\u01ddPb\u01d6\xddwa\xf1\xf1>U\x8ds\xa5\x9f\x82\xf3\x8b\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\u01e0\x18\xf0\x96\x8aQ\xd1\xf6`<\\I\xdcT[\xcb\x0f\xf2\x93\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u01ef\xf9\x19)yt\x89UZ/\xf1\xd1M\\iZ\x10\x83U\x8965\u026d\xc5\u07a0\x00\x00\u0794\u01f1\xc8>c ?\x95G&>\xf6(.}\xa3;n\xd6Y\x88\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\u01f3\x9b\x06\x04Q\x00\f\xa1\x04\x9b\xa1T\xbc\xfa\x00\xff\x8a\xf2b\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\u01ff\x17\xc4\xc1\x1f\x98\x94\x1fP~w\bO\xff\xbd-\xbd=\xb5\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\u01ff.\xd1\xed1)@\xeej\xde\xd1Qn&\x8eJ`HV\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xc7\xd4O\xe3,\u007f\x8c\xd5\xf1\xa9t'\xb6\xcd:\xfc\x9eE\x02>\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xc7\xd5\xc7\x05@\x81\xe9\x18\xech{Z\xb3n\x97=\x18\x13)5\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\xc7\xde^\x8e\xaf\xb5\xf6+\x1a\n\xf2\x19\\\xf7\x93\u01c9L\x92h\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xc7\xe30\xcd\f\x89\n\u025f\xe7q\xfc\xc7\xe7\xb0\t\xb7A=\x8a\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc7\xea\xc3\x1a\xbc\xe6\xd5\xf1\u07a4\"\x02\xb6\xa6t\x15=\xb4z)\x89 \t\xc5\u023fo\xdc\x00\x00\xe0\x94\xc7\xecb\xb8\x04\xb1\xf6\x9b\x1e0p\xb5\xd3b\xc6/\xb3\t\xb0p\x8a\x02\xc4k\xf5A`f\x11\x00\x00\u07d4\xc7\xf7+\xb7X\x01k7G\x14\u0509\x9b\xce\"\xb4\xae\xc7\n1\x89:&\xc9G\x8f^-\x00\x00\u0794\xc8\v6\u047e\xaf\xba_\xccdM`\xacnF\xed)'\xe7\u0708\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\xc8\x11\xc2\xe9\xaa\x1a\xc3F.\xba^\x88\xfc\xb5\x12\x0e\x9fn,\xa2\x89K\xe6\u0607\xbd\x87n\x00\x00\u07d4\xc8\x17\xdf\x1b\x91\xfa\xf3\x0f\xe3%\x15qr|\x97\x11\xb4]\x8f\x06\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xc8\x1f\xb7\xd2\x0f\u0480\x01\x92\xf0\xaa\xc1\x98\xd6\u05a3}?\xcb}\x89\x0e\x11I3\x1c-\xde\x00\x00\u07d4\xc8 \xc7\x11\xf0w\x05'8\a\xaa\xaam\xe4M\x0eKH\xbe.\x89\bg\x0e\x9e\xc6Y\x8c\x00\x00\u07d4\xc8#\x1b\xa5\xa4\x11\xa1>\"+)\xbf\xc1\b?v1X\xf2&\x8967\tlK\xcci\x00\x00\u07d4\xc86\xe2Jo\xcf)\x94;6\b\xe6b)\n!_e)\xea\x89\x0f\xd4Pd\xea\xee\x10\x00\x00\xe0\x94\xc8;\xa6\u0755I\xbe\x1d2\x87\xa5\xa6T\xd1\x06\xc3Lk]\xa2\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\xc8>\x9djX%;\uefb7\x93\xe6\xf2\x8b\x05JXI\x1bt\x89\x0fF\u00b6\xf5\xa9\x14\x00\x00\u07d4\xc8A\x88O\xa4x_\xb7s\xb2\x8e\x97\x15\xfa\xe9\x9aQ40]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc8M\x9b\xea\n{\x9f\x14\x02 \xfd\x8b\x90\x97\u03ff\xd5\xed\xf5d\x89\x06\xab\x9e\u0091\xad}\x80\x00\u07d4\xc8RB\x8d+Xd\x97\xac\xd3\fV\xaa\x13\xfbU\x82\xf8D\x02\x893B\xd6\r\xff\x19`\x00\x00\u07d4\xc8S![\x9b\x9f-,\xd0t\x1eX^\x98{_\xb8\f!.\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\xc8S%\uaca5\x9b>\xd8c\xc8j_)\x06\xa0B)\xff\xa9\x89\x19=\u007f}%=\xe0\x00\x00\u07d4\xc8^\xf2}\x82\x04\x03\x80_\xc9\xed%\x9f\xffd\xac\xb8\xd64j\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc8akN\xc0\x91(\xcd\xff9\xd6\u4e6c\x86\xee\xc4q\xd5\xf2\x89\x01\r:\xa56\xe2\x94\x00\x00\xe0\x94\xc8a\x90\x90K\x8d\a\x9e\xc0\x10\xe4b\xcb\xff\xc9\b4\xff\xaa\\\x8a\x02#\x85\xa8'\xe8\x15P\x00\x00\u07d4\xc8q\r~\x8bZ;\u059aB\xfe\x0f\xa8\xb8|5\u007f\xdd\xcd\u0209\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc8sR\u06e5\x82\xee f\xb9\xc0\x02\xa9b\xe0\x03\x13Ox\xb1\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xc8|w\xe3\xc2J\xde\xcd\xcd\x108\xa3\x8bV\xe1\x8d\xea\u04f7\x02\x8a\x01\xdd\f\x88_\x9a\r\x80\x00\x00\u07d4\xc8}:\xe3\u0607\x04\u066b\x00\t\xdc\xc1\xa0\x06q1\xf8\xba<\x89j\xc5\xc6-\x94\x86\a\x00\x00\xe0\x94\u0201N4R>8\xe1\xf9'\xa7\xdc\xe8FjDz\t6\x03\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u0202U\xed\xdc\xf5!\xc6\xf8\x1d\x97\xf5\xa4!\x81\xc9\a=N\xf1\x89\x0f\u00d0D\xd0\n*\x80\x00\u07d4\u0205\xa1\x8a\xab\xf4T\x1b{{~\xcd0\xf6\xfa\u619d\x95i\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u020c\xa1\xe6\xe5\xf4\xd5X\xd17\x80\xf4\x88\xf1\rJ\xd3\x13\r4\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\u020e\xecT\xd3\x05\xc9(\xcc(H\xc2\xfe\xe251\xac\xb9mI\x89lj\u04c2\xd4\xfba\x00\x00\xe0\x94\u021c\xf5\x04\xb9\xf3\xf85\x18\x1f\xd8BO\\\xcb\xc8\xe1\xbd\xdf}\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u0222\xc4\xe5\x9e\x1c\u007f\xc5H\x05X\x048\xae\xd3\xe4J\xfd\xf0\x0e\x89\x02b\x9ff\xe0\xc50\x00\x00\u07d4\u022aI\u301f\b\x99\xf2\x8a\xb5~gCp\x9dXA\x903\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4\u022b\x1a<\xf4l\xb8\xb0d\xdf.\"-9`s\x94 2w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0231\x85\x05%\xd9F\xf2\xae\x84\xf3\x17\xb1Q\x88\xc56\xa5\u0706\x89\x91\x8d\xdc:B\xa3\xd4\x00\x00\u07d4\xc8\xd4\xe1Y\x9d\x03\xb7\x98\t\xe0\x13\n\x8d\u00c4\b\xf0^\x8c\u04c9\x9f\xad\x06$\x12y\x16\x00\x00\u07d4\xc8\xdd'\xf1k\xf2$P\xf5w\x1b\x9f\xe4\xedO\xfc\xb3\t6\xf4\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xc8\xdezVL\u007f@\x12\xa6\xf6\xd1\x0f\u040fG\x89\x0f\xbf\a\u0509\x10CV\x1a\x88)0\x00\x00\u07d4\xc8\xe2\xad\xebT^I\x9d\x98,\f\x11sc\u03b4\x89\u0171\x1f\x895e\x9e\xf9?\x0f\xc4\x00\x00\xe0\x94\xc8\xe5X\xa3\xc5i~o\xb2:%\x94\u0200\xb7\xa1\xb6\x8f\x98`\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xc8\xf2\xb3 \xe6\xdf\xd7\t\x06\u0157\xba\xd2\xf9P\x13\x12\u01c2Y\x89Q\x93K\x8b:W\xd0\x00\x00\u07d4\xc9\x03\x00\xcb\x1d@w\xe6\xa6\xd7\xe1i\xa4`F\x8c\xf4\xa4\x92\u05c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xc9\f7e\x15k\u028eH\x97\xab\x80$\x19\x15<\xbeR%\xa9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xc9\x10\xa9pUl\x97\x16\xeaS\xaff\xdd\xef\x93\x141$\x91=\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\xe0\x94\xc9\x12{\u007ff)\xee\x13\xfc?`\xbc/Dg\xa2\aE\xa7b\x8a\x03|\x9a\xa4\xe7\xceB\x1d\x80\x00\u07d4\xc9\x1b\xb5b\xe4+\xd4a0\xe2\u04eeFR\xb6\xa4\ub1bc\x0f\x89\x1dF\x01b\xf5\x16\xf0\x00\x00\xe0\x94\xc90\x88y\x05m\xfe\x13\x8e\xf8 \x8fy\xa9\x15\u01bc~p\xa8\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xc94\xbe\xca\xf7\x1f\"_\x8bJK\xf7\xb1\x97\xf4\xac\x9604\\\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc9?\xbd\xe8\xd4m+\xcc\x0f\xa9\xb3;\u063a\u007f\x80B\x12Ue\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xc9@\x89U:\xe4\xc2,\xa0\x9f\xbc\x98\xf5pu\xcf.\u0155\x04\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xc9A\x10\xe7\x1a\xfeW\x8a\xa2\x18\xe4\xfc(d\x03\xb03\n\u038d\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xc9F\u056c\xc14n\xba\nry\xa0\xac\x1dF\\\x99m\x82~\x8a\x03x=T_\xdf\n\xa4\x00\x00\u07d4\xc9J(\xfb20\xa9\xdd\xfa\x96Nw\x0f,\xe3\xc2S\xa7\xbeO\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xc9JXR\x03\xda{\xba\xfd\x93\xe1X\x84\xe6`\u0531\xea\xd8T\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\xc9O|5\xc0'\xd4}\xf8\xefO\x9d\xf8Z\x92H\xa1}\xd2;\x89\x01\x9f\x8euY\x92L\x00\x00\u07d4\xc9Q\x90\f4\x1a\xbb\xb3\xba\xfb\xf7\xee )7pq\xdb\xc3j\x89\x11\xc2]\x00M\x01\xf8\x00\x00\u07d4\xc9S\xf94\xc0\xeb-\x0f\x14K\u06b0\x04\x83\xfd\x81\x94\x86\\\xe7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc9f&r\x8a\xaaLO\xb3\xd3\x1c&\xdf:\xf3\x10\b\x17\x10\u0449\xb5\x0f\u03ef\xeb\xec\xb0\x00\x00\u07d4\xc9gQel\n\x8e\xf45{sD2!4\xb9\x83PJ\u0289lk\x93[\x8b\xbd@\x00\x00\u07d4\u0240Hh\u007f+\xfc\u027d\x90\xed\x18slW\xed\xd3R\xb6]\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u0241\xd3\x12\u0487\xd5X\x87\x1e\u0757:\xbbv\xb9y\xe5\xc3^\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u0242Xmc\xb0\xd7L \x1b\x1a\xf8A\x83r\xe3\fv\x16\xbe\x89\x05k\xc7^-c\x10\x00\x00\u07d4\u0249CO\x82Z\xaf\x9cU/h^\xba|\x11\xdbJ_\xc7:\x89\x1b(\u014d\x96\x96\xb4\x00\x00\u07d4\u0249\xee\xc3\a\u80db\x9dr7\xcf\xda\b\x82)b\xab\u41c9\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\u0252\xbeY\xc6r\x1c\xafN\x02\x8f\x9e\x8f\x05\xc2\\UQ[\u0509\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u0255{\xa9L\x1b)\xe5'~\xc3f\"pI\x04\xc6=\xc0#\x89h>\xfcg\x82d,\x00\x00\xe0\x94\u025a\x9c\xd6\xc9\xc1\xbe54\xee\u0352\xec\xc2/\\8\xe9Q[\x8a\x01\x05Y;:\x16\x9dw\x00\x00\xe0\x94\u026c\x01\xc3\xfb\t)\x03?\f\xcc~\x1a\xcf\uaae7\x94]G\x8a\x02\xa3j\x9e\x9c\xa4\xd2\x03\x80\x00\u07d4\u0276\x98\xe8\x98\xd2\rMO@\x8eNM\x06\x19\"\xaa\x85c\a\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\u0276\xb6\x86\x11\x16\x91\xeej\xa1\x97\xc7#\x1a\x88\xdc`\xbd)]\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc9\u01ec\v\u0753B\xb5\xea\xd46\t#\xf6\x8cr\xa6\xbac:\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xc9\xc8\r\xc1.{\xab\x86\xe9I\xd0\x1eL>\xd3_+\x9b\xba_\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xc9\xd7dF\u056a\xdf\xf8\vh\xb9\x1b\b\u035b\xc8\xf5U\x1a\xc1\x89&\xb4\xbd\x91\x10\xdc\xe8\x00\x00\xe0\x94\xc9\u073b\x05oM\xb7\xd9\xda9\x93b\x02\u017d\x820\xb3\xb4w\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xc9\xe0&\b\x06h(\x84\x8a\xeb(\xc76r\xa1)%\x18\x1fM\x89\x1b\x1bk\u05efd\xc7\x00\x00\u07d4\xca\x042\xcb\x15{Qy\xf0.\xbb\xa5\xc9\u0475O\xecM\x88\u028965\u026d\xc5\u07a0\x00\x00\u07d4\xca\x12,\xf0\U00094216\xb7HC\xf4\x9a\xfe\u043a\x16\x18\xee\u05c9\x1e[\x8f\xa8\xfe*\xc0\x00\x00\xe0\x94\xca\"\u0363`m\xa5\xca\xd0\x13\xb8\aG\x06\xd7\xe9\xe7!\xa5\f\x8a\x01q\x81\xc6\xfa9\x81\x94\x00\x00\u07d4\xca#\xf6-\xff\rd`\x03lb\xe8@\xae\xc5W~\v\xef\u0489\a\xa1\xfe\x16\x02w\x00\x00\x00\u07d4\xca%\xff4\x93L\x19B\xe2*N{\xd5o\x14\x02\x1a\x1a\xf0\x88\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xca7?\xe3\xc9\x06\xb8\xc6U\x9e\xe4\x9c\xcd\a\xf3|\xd4\xfbRf\x89a\t=|,m8\x00\x00\u07d4\xcaA\u032c0\x17 R\xd5\"\xcd//\x95}$\x81S@\x9f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xcaB\x88\x01N\xdd\xc5c/_\xac\xb5\xe3\x85\x17\xa8\xf8\xbc]\x98\x89\x12nr\xa6\x9aP\xd0\x00\x00\u07d4\xcaB\x88c\xa5\xca06\x98\x92\xd6\x12\x18>\xf9\xfb\x1a\x04\xbc\xea\x89Rf<\u02b1\xe1\xc0\x00\x00\u07d4\xcaI\xa5\xf5\x8a\xdb\xef\xae#\xeeY\xee\xa2A\xcf\x04\x82b.\xaa\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4\xcaL\xa9\xe4w\x9dS\x0e\u02ec\xd4~j\x80X\xcf\xdee\u064f\x89+^:\xf1k\x18\x80\x00\x00\u07d4\xcae~\xc0o\xe5\xbc\t\xcf#\xe5*\xf7\xf8\f\xc3h\x9en\u07890\xca\x02O\x98{\x90\x00\x00\u07d4\xcaf\xb2(\x0f\xa2\x82\u0176v1\xceU+b\xeeU\xad\x84t\x89j\xc4\"\xf54\x92\x88\x00\x00\xe0\x94\xcal\x81\x8b\xef\xd2Q6\x1e\x02t@h\xbe\x99\u062a`\xb8J\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xcap\xf4\u077f\x06\x9d!C\xbdk\xbc\u007fikRx\x9b2\u7262\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94\xcatuvDjL\x8f0\xb0\x83@\xfe\xe1\x98\xdec\xec\x92\u03ca\x01|\x8e\x12\x06r*0\x00\x00\u07d4\xca{\xa3\xffSl~_\x0e\x158\x00\xbd8=\xb81)\x98\xe0\x89\t1\xac=k\xb2@\x00\x00\xe0\x94\u0282v\xc4w\xb4\xa0{\x80\x10{\x845\x94\x18\x96\a\xb5;\xec\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\u0284\t\b>\x01\xb3\x97\xcf\x12\x92\x8a\x05\xb6\x84U\xceb\x01\u07c9V\xbcu\xe2\xd61\x00\x00\x00\u07d4\u0298\u01d8\x8e\xfa\b\xe9%\uf719ER\x03&\xe9\xf4;\x99\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u029a\x04*j\x80o\xfc\x92\x17\x95\x00\xd2D)\xe8\xabR\x81\x17\x89;\xa1\x91\v\xf3A\xb0\x00\x00\u07d4\u029d\xec\x02\x84\x1a\xdf\\\xc9 WjQ\x87\xed\u04bdCJ\x18\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u029f\xaa\x17T/\xaf\xbb8\x8e\xab!\xbcL\x94\u89f3G\x88\x89lk\x8f\xce\r\x18y\x80\x00\xe0\x94\u02aah\xeel\xdf\r4EJv\x9b\r\xa1H\xa1\xfa\xaa\x18e\x8a\x01\x87.\x1d\xe7\xfeR\xc0\x00\x00\u07d4\u02ad\x9d\xc2\rX\x9c\xe4(\xd8\xfd\xa3\xa9\xd5:`{y\x88\xb5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\u02b0\xd3,\xf3v\u007f\xa6\xb3S|\x842\x8b\xaa\x9fPE\x816\x8a\x01\xe5\xb8\xfa\x8f\xe2\xac\x00\x00\x00\u07d4\u02b9\xa3\x01\xe6\xbdF\xe9@5P(\xec\xcd@\xceMZ\x1a\u00c9\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\u02b9\xa9z\xda\x06\\\x87\x81nh`\xa8\xf1Bo\xe6\xb3\xd7u\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\u02ba\xb6'N\xd1P\x89s~({\xe8x\xb7W\x93Hd\xe2\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\u02bd\xaf5OG \xa4f\xa7d\xa5(\xd6\x0e:H*9<\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xca\xcbg^\t\x96#T\x04\ufbfb.\u02c1R'\x1bU\xe0\x89%\xf2s\x93=\xb5p\x00\x00\u07d4\xca\xd1O\x9e\xbb\xa7f\x80\xeb\x83k\a\x9c\u007f{\xaa\xf4\x81\xedm\x89\f\xef={\xd7\xd04\x00\x00\xe0\x94\xca\xe3\xa2S\xbc\xb2\xcfN\x13\xba\x80\u0098\xab\x04\x02\xda|*\xa0\x8a\x01$\xbc\r\u0752\xe5`\x00\x00\u07d4\xca\xef\x02{\x1a\xb5\x04\xc7?A\xf2\xa1\ty\xb4t\xf9~0\x9f\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xca\xf4H\x1d\x9d\xb7\x8d\xc4\xf2_{J\u023d;\x1c\xa0\x10k1\x8a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94\xca\xfd\xe8U\x86L%\x98\xda<\xaf\xc0Z\u064d\U00089380H\x8a\x03\x00\xa8\xed\x96\xffJ\x94\x00\x00\xe0\x94\xcb\r\xd7\xcfN]\x86a\xf6\x02\x89C\xa4\xb9\xb7\\\x91D6\xa7\x8a\x19i6\x89t\xc0[\x00\x00\x00\u07d4\xcb\x1b\xb6\xf1\xda^\xb1\rH\x99\xf7\xe6\x1d\x06\xc1\xb0\x0f\u07f5-\x898E$\xccp\xb7x\x00\x00\u07d4\xcb=vl\x98?\x19+\xce\xca\xc7\x0fN\xe0=\xd9\xffqMQ\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xcbB\xb4N\xb5\xfd`\xb5\x83~O\x9e\xb4rgR=\x1a\"\x9c\x89.\xe4IU\b\x98\xe4\x00\x00\u07d4\xcbG\xbd0\u03e8\xecTh\xaa\xa6\xa9FB\xce\xd9\xc8\x19\xc8\u0509\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xcbH\xfe\x82e\u066fU\xebp\x06\xbc3VE\xb0\xa3\xa1\x83\xbe\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xcbJ\x91M+\xb0)\xf3._\xef\\#LO\xec--\xd5w\x89a\x94\x04\x9f0\xf7 \x00\x00\xe0\x94\xcbJ\xbf\u0082\xae\xd7n]W\xaf\xfd\xa5B\xc1\xf3\x82\xfc\xac\xf4\x8a\x01\xb9\x0f\x11\xc3\x18?\xaa\x00\x00\u07d4\xcbJ\xd0\xc7#\xdaF\xabV\xd5&\xda\f\x1d%\xc7=\xaf\xf1\n\x89\x1b\xa5\xab\xf9\xe7y8\x00\x00\u07d4\xcbK\xb1\xc6#\xba(\xdcB\xbd\xaa\xa6\xe7N\x1d*\xa1%l*\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xcbPXt\x12\x82#\x04\xeb\u02e0}\xab:\x0f\t\xff\xfe\u4189JD\x91\xbdm\xcd(\x00\x00\u07d4\xcbX\x99\v\u0350\u03ffm\x8f\t\x86\xf6\xfa`\x02v\xb9N-\x8964\xbf9\xab\x98x\x80\x00\u07d4\xcbh\xaeZ\xbe\x02\xdc\xf8\xcb\u016aq\x9c%\x81FQ\xaf\x8b\x85\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xcbty\x10\x9bC\xb2fW\xf4F_M\x18\xc6\xf9t\xbe_B\x89b\xa9\x92\xe5:\n\xf0\x00\x00\xe0\x94\xcb}+\x80\x89\xe91,\u026e\xaa's\xf3S\b\xecl*{\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u02c6\xed\xbc\x8b\xbb\x1f\x911\x02+\xe6IV^\xbd\xb0\x9e2\xa1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u02d3\x19\x9b\x9c\x90\xbcI\x15\xbd\x85\x9e=B\x86m\xc8\xc1\x87I\x89\f\x90\xdf\a\xde\xf7\x8c\x00\x00\u07d4\u02d4\xe7o\xeb\xe2\b\x11g3\xe7n\x80]H\xd1\x12\xec\x9f\u028965\u026d\xc5\u07a0\x00\x00\u07d4\u02dbQ\x03\xe4\u0389\xafOd\x91aP\xbf\xf9\xee\u02df\xaa\\\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u02e2\\zP<\xc8\xe0\xd0Iq\xca\x05\xc7b\xf9\xb7b\xb4\x8b\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u02e2\x88\xcd<\x1e\xb4\u055d\xdb\x06\xa6B\x1c\x14\xc3E\xa4{$\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u02f3\x18\x9eK\xd7\xf4_\x17\x8b\x1c0\xc7n&1MJK\n\x89\x0f\xfe\vg|e\xa9\x80\x00\xe0\x94\u02f7\xbe\x17\x95?,\u0313\u1f19\x80[\xf4U\x11CNL\x8a\n\xae[\x9d\xf5m/ \x00\x00\xe0\x94\xcb\xc0KM\x8b\x82\xca\xf6p\x99o\x16\f6)@\xd6o\xcf\x1a\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xcb\u07974\xb8\xe6\xaaS\x8c)\x1dm\u007f\xac\xed\xb0\xf38\xf8W\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xcb\xe1\xb9H\x86M\x84t\xe7e\x14XX\xfc\xa4U\x0fxK\x92\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xcb\xe5/\xc53\xd7\xdd`\x8c\x92\xa2`\xb3|?E\u07b4\xeb3\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xcb\xe8\x10\xfe\x0f\xec\xc9dGJ\x1d\xb9w(\xbc\x87\xe9s\xfc\xbd\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xcb\xf1j\x0f\xe2tRX\xcdR\xdb+\xf2\x19T\xc9u\xfcj\x15\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94\xcb\xf3\u007f\xf8T\xa2\xf1\xceS\x93D\x94wx\x92\xd3\xeceW\x82\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xcb\xfaj\xf6\u0083\xb0F\xe2w,`c\xb0\xb2\x15S\xc4\x01\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcb\xfav\xdb\x04\xce8\xfb ]7\xb8\xd3w\xcf\x13\x80\xda\x03\x17\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4\xcc\x03I\x85\xd3\xf2\x8c-9\xb1\xa3K\xce\xd4\u04f2\xb6\xca#N\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\xcc\x04\x8d\u01f9]\xca%\xdf&\xee\xfac\x9d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcc+_D\x8f5(\xd3\xfeA\xcc}\x1f\xa9\xc0\xdcv\xf1\xb7v\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\xcc-\x04\xf0\xa4\x01q\x89\xb3@\xcaw\x19\x86A\xdc\xf6Ek\x91\x89\u0556{\xe4\xfc?\x10\x00\x00\xe0\x94\xccA\x9f\u0651+\x85\x13VY\xe7z\x93\xbc=\xf1\x82\xd4Q\x15\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xccE\xfb:U[\xad\x80{8\x8a\x03W\xc8U _|u\xe8\x89.\xe4IU\b\x98\xe4\x00\x00\u07d4\xccHAM*\xc4\xd4*Yb\xf2\x9e\xeeD\x97\t/C\x13R\x89\b\xbaR\xe6\xfcE\xe4\x00\x00\u07d4\xccJ/,\xf8l\xf3\xe43u\xf3`\xa4sF\x91\x19_\x14\x90\x89I\x15\x05;\xd1)\t\x80\x00\u07d4\xccO\x0f\xf2\xae\xb6}T\xce;\xc8\xc6Q\v\x9a\xe8>\x9d2\x8b\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xccO\xaa\xc0\v\xe6b\x8f\x92\xefk\x8c\xb1\xb1\xe7j\xac\x81\xfa\x18\x89\v\"\xa2\xea\xb0\xf0\xfd\x00\x00\xe0\x94\xccO\xebr\u07d8\xff5\xa18\xe0\x17a\xd1 ?\x9b~\xdf\n\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\xcc`oQ\x13\x97\xa3\x8f\u01c7+\u04f0\xbd\x03\xc7\x1b\xbdv\x8b\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xcc`\xf86\xac\xde\xf3T\x8a\x1f\xef\u0321>\u01a97\xdbD\xa0\x89\x04\xb0m\xbb\xb4\x0fJ\x00\x00\u07d4\xccl\x03\xbd`>\t\xdeT\xe9\xc4\u056cmA\xcb\xceqW$\x89\x05V\xf6L\x1f\xe7\xfa\x00\x00\u07d4\xccl-\xf0\x0e\x86\xec\xa4\x0f!\xff\xda\x1ag\xa1i\x0fG|e\x89\xabM\xcf9\x9a:`\x00\x00\xe0\x94\xccm{\x12\x06\x1b\xc9m\x10M`me\xff\xa3+\x006\xeb\a\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xccs\xdd5kIy\xb5y\xb4\x01\xd4\xccz1\xa2h\xdd\xceZ\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xccu\x8d\a\x1d%\xa62\n\xf6\x8c]\xc9\xc4\xf6\x95[\xa9E \x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xcc{\x04\x81\xcc2\xe6\xfa\xef#\x86\xa0p\"\xbc\xb6\xd2\u00f4\xfc\x89\xabM\xcf9\x9a:`\x00\x00\xe0\x94\u0314;\xe1\",\xd1@\n#\x99\xdd\x1bE\x94E\xcfmT\xa9\x8a\x02\xa7@\xaee6\xfc\x88\x00\x00\u07d4\u0315\x19\xd1\xf3\x98_k%^\xad\xed\x12\xd5bJ\x97'!\xe1\x8965\u026d\xc5\u07a0\x00\x00\u0794\u031a\xc7\x15\xcdo&\x10\xc5+XgdV\x88B\x97\x01\x8b)\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\u0320{\xb7\x94W\x1dJ\xcf\x04\x1d\xad\x87\xf0\xd1\xef1\x85\xb3\x19\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u032b\xc6\x04\x8aSFD$\xfc\xf7n\xeb\x9en\x18\x01\xfa#\u0509\x02\xab{&\x0f\xf3\xfd\x00\x00\u07d4\u032e\r=\x85*}\xa3\x86\x0f\x066\x15L\nl\xa3\x16(\u0509\x05\xc6\xd1+k\xc1\xa0\x00\x00\u07d4\xcc\xca$\xd8\xc5mn,\a\xdb\bn\xc0~X[\xe2g\xac\x8d\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xcc\xd5!\x13-\x98l\xb9hi\x84&\"\xa7\u0762l>\xd0W\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcc\xf49u\xb7k\xfes_\xec<\xb7\xd4\xdd$\xf8\x05\xba\tb\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\xcc\xf6*f?\x13S\xba.\xf8\xe6R\x1d\xc1\xec\xb6s\xec\x8e\xf7\x89\b=lz\xabc`\x00\x00\u07d4\xcc\xf7\x11\r\x1b\u0667K\xfd\x1d}}-\x9dU`~{\x83}\x890\xca\x02O\x98{\x90\x00\x00\u07d4\xcc\xfdrW`\xa6\x88#\xff\x1e\x06/L\xc9~\x13`\xe8\u0657\x89\x15\xacV\xed\xc4\xd1,\x00\x00\u07d4\xcd\x02\x0f\x8e\xdf\xcfRG\x98\xa9\xb7:d\x034\xbb\xf7/\x80\xa5\x89\a?u\u0460\x85\xba\x00\x00\u07d4\xcd\x06\xf8\xc1\xb5\u037d(\xe2\xd9kcF\xc3\xe8Z\x04\x83\xba$\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xcd\a.n\x183\x13y\x95\x19m{\xb1r_\xef\x87a\xf6U\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xcd\n\x16\x1b\xc3g\xae\t'\xa9*\xac\x9c\xf6\xe5\bg\x14\xef\u0289lk\x93[\x8b\xbd@\x00\x00\u07d4\xcd\n\xf3GN\"\xf0i\xec4\a\x87\r\xd7pD=[\x12\xb0\x89\x8e^\xb4\xeew\xb2\xef\x00\x00\u07d4\xcd\v\x02W\u70e3\xd2\xc2\u3e9dny\xb7^\xf9\x80$\u0509\x9f\xad\x06$\x12y\x16\x00\x00\u07d4\xcd\x10,\xd6\xdb=\xf1J\u05af\x0f\x87\xc7$y\x86\x1b\xfc=$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcd\x1ef\xedS\x9d\xd9/\xc4\v\xba\xa1\xfa\x16\u078c\x02\xc1ME\x89\fw\xe4%hc\xd8\x00\x00\u07d4\xcd\x1e\xd2c\xfb\xf6\xf6\xf7\xb4\x8a\xef\x8fs=2\x9dC\x82\xc7\u01c9\x01\x00\xbd3\xfb\x98\xba\x00\x00\u07d4\xcd*6\xd7S\xe9\xe0\xed\x01*XMqh\aX{A\xd5j\x89\x0e+\xa7[\v\x1f\x1c\x00\x00\u07d4\xcd2\xa4\xa8\xa2\u007f\x1c\xc69T\xaacOxW\x05s4\u01e3\x89:\xd1fWlr\xd4\x00\x00\u07d4\xcd5\xff\x01\x0e\xc5\x01\xa7!\xa1\xb2\xf0z\x9c\xa5\x87}\xfc\xf9Z\x89\xd9o\u0390\u03eb\xcc\x00\x00\u07d4\xcdC\x06\xd7\xf6\x94z\xc1tMN\x13\xb8\xef2\xcbe~\x1c\x00\x89\x1b\x1a\xb3\x19\xf5\xecu\x00\x00\u07d4\xcdC%\x8bs\x92\xa90\x83\x9aQ\xb2\xef\x8a\xd24\x12\xf7Z\x9f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcdI\xbf\x18^p\xd0E\a\x99\x9f\x92\xa4\xdeDU1('\u040965\u026d\xc5\u07a0\x00\x00\u07d4\xcdU\x10\xa2B\u07f0\x18=\xe9%\xfb\xa8f\xe3\x12\xfa\xbc\x16W\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\xcdVj\u05f8\x83\xf0\x1f\u04d9\x8a\x9aX\xa9\xde\xe4rM\u0725\x89\x030\xae\x185\xbe0\x00\x00\xe0\x94\xcdY\xf3\xdd\xe7~\t\x94\v\xef\xb6\xeeX\x03\x19e\xca\xe7\xa36\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xcdr]p\xbe\x97\xe6w\xe3\xc8\xe8\\\v&\xef1\xe9\x95PE\x89Hz\x9a0E9D\x00\x00\xe0\x94\xcd~G\x90\x94d\xd8q\xb9\xa6\xdcv\xa8\xe9\x19]\xb3H^z\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\xcd~\xce\bkKa\x9b;6\x93R\xee8\xb7\x1d\xdb\x06C\x9a\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xcd\u007f\t\xd7\xedf\xd0\u00cb\u016dN2\xb7\xf2\xb0\x8d\xc1\xb3\r\x89>;\xb3M\xa2\xa4p\x00\x00\u07d4\u0355)I+\\)\xe4u\xac\xb9A@+=;\xa5\x06\x86\xb0\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u0355\xfaB=o\xc1 'J\xac\xde\x19\xf4\xee\xb7f\xf1\x04 \x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\u035bL\xefs9\f\x83\xa8\xfdq\u05f5@\xa7\xf9\u03cb\x8c\x92\x89\x04\xe1\x00;(\xd9(\x00\x00\u07d4\u0361t\x11\t\xc0&[?\xb2\xbf\x8d^\xc9\u00b8\xa34kc\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u0361\xb8\x86\u39d5\u027aw\x91N\n/\xe5go\x0f\\\u03c9\x05\xbf`\xeaB\xc2\x04\x00\x00\u07d4\u0364S\x0fK\x9b\xc5\t\x05\xb7\x9d\x17\u008f\xc4o\x954\x9b\u07c93\x10\xe0I\x11\xf1\xf8\x00\x00\u07d4\u036bF\xa5\x90 \x80do\xbf\x95B\x04 J\xe8\x84\x04\x82+\x89\x1d\x8a\x96\xe5\xc6\x06\xeb\x00\x00\u07d4\u0375\x97)\x900\x18?n-#\x853\xf4d*\xa5\x87T\xb6\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xcd\xd5\u0601\xa76,\x90p\a;\u07fcu\xe7$S\xacQ\x0e\x89-\xa5\x18\xea\xe4\x8e\xe8\x00\x00\u07d4\xcd\xd6\rs\xef\xaa\xd8s\u027b\xfb\x17\x8c\xa1\xb7\x10Z\x81\xa6\x81\x89\x01\xbc\x16\xd6t\xec\x80\x00\x00\u07d4\xcd\xd9\xef\xacMm`\xbdq\xd9U\x85\xdc\xe5\u0557\x05\xc15d\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xcd\xe3m\x81\xd1(\u015d\xa1Ee!\x93\xee\u00bf\xd9e\x86\xef\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xcd\xea8o\x9d\x0f\xd8\x04\xd0(\x18\xf27\xb7\xd9\xfavF\xd3^\x89\xa3I\xd3m\x80\xecW\x80\x00\u07d4\xcd\xec\xf5gT3\u0370\xc2\xe5Zh\xdb]\x8b\xbexA\x9d\u0489\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xcd\xfd\x82\x173\x97%\xd7\xeb\xac\x11\xa66U\xf2e\xef\xf1\xcc=\x8a\x01\x0f\fid\x10\xe3\xa9\x00\x00\u07d4\xce\a\x9fQ\x88wt\xd8\x02\x1c\xb3\xb5u\xf5\x8f\x18\xe9\xac\xf9\x84\x89\t\xc2\x00vQ\xb2P\x00\x00\u07d4\xce\x18\x84\u077b\xb8\xe1\x0eM\xbanD\xfe\xee\u00a7\xe5\xf9/\x05\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xce\x1b\f\xb4j\xae\xcf\u05db\x88\f\xad\x0f-\u068a\x8d\xed\u0431\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xce&\xf9\xa50_\x83\x81\tCT\xdb\xfc\x92fN\x84\xf9\x02\xb5\x89\fz\xaa\xb0Y\x1e\xec\x00\x00\u07d4\xce-\xea\xb5\x1c\n\x9a\xe0\x9c\xd2\x12\xc4\xfaL\xc5+S\xcc\r\xec\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xce.\r\xa8\x93F\x99\xbb\x1aU>U\xa0\xb8\\\x16\x945\xbe\xa3\x8a\x01\x0f\fid\x10\xe3\xa9\x00\x00\u07d4\xce:a\xf0F\x1b\x00\x93^\x85\xfa\x1e\xad\x82\xc4^Zd\u0508\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xceK\x06]\xbc\xb20G 2b\xfbH\xc1\x18\x83d\x97tp\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xceS\xc8\xcd\xd7B\x96\xac\xa9\x87\xb2\xbc\x19\u00b8u\xa4\x87I\u0409\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xce^\x04\xf0\x18Ci\xbc\xfa\x06\xac\xa6o\xfa\x91\xbfY\xfa\x0f\xb9\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xce^\xb6:{\xf4\xfb\xc2\xf6\u4ea0\u018a\xb1\xcbL\xf9\x8f\xb4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xceb\x12Z\xde\xc37\n\xc5!\x10\x95:Nv\v\xe9E\x1e;\x89\b=lz\xabc`\x00\x00\xe0\x94\xceq\bmL`%T\xb8-\xcb\xfc\xe8\x8d cMS\xccM\x8a\t(\x96R\x9b\xad\u0708\x00\x00\u07d4\u038akmP3\xb1I\x8b\x1f\xfe\xb4\x1aAU\x04\x05\xfa\x03\xa2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u0397\x86\xd3q/\xa2\x00\xe9\xf6\x857\xee\xaa\x1a\x06\xa6\xf4ZK\x89a\t=|,m8\x00\x00\u07d4\u039d!\u0192\xcd<\x01\xf2\x01\x1fP_\x87\x006\xfa\x8fl\u0489\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\u03a2\x89f#\xf4\x91\x02\x87\xa2\xbd\u017e\x83\xae\xa3\xf2\xe6\xde\b\x8a\x01\xfbZ7Q\xe4\x90\xdc\x00\x00\u07d4\u03a3JM\xd9=\u066e\xfd9\x90\x02\xa9}\x99z\x1bK\x89\u0349QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\u03a4?pu\x81k`\xbb\xfc\u62d9:\xf0\x88\x12p\xf6\u0109lk\x93[\x8b\xbd@\x00\x00\u07d4\u03a8t3AS<\xb2\xf0\xb9\xc6\xef\xb8\xfd\xa8\rw\x16(%\x89\x05k\xc7^-c\x10\x00\x00\u07d4\u03b0\x89\xec\x8ax3~\x8e\xf8\x8d\xe1\x1bI\xe3\u0751\x0ft\x8f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u03b3=x\xe7Tz\x9d\xa2\xe8}Q\xae\xc5\xf3D\x1c\x87\x92:\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u03b3\x898\x1dH\xa8\xaeO\xfcH:\u043b^ L\xfd\xb1\xec\x89('\xe6\xe4\xddb\xba\x80\x00\u07d4\xce\xc6\xfce\x85?\x9c\xce_\x8e\x84Fv6.\x15y\x01_\x02\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xce\xd3\u01fe\x8d\xe7XQ@\x95*\xebP\x1d\xc1\xf8v\ucbf0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xce\xd8\x1e\xc3S?\xf1\xbf\xeb\xf3\xe3\x84>\xe7@\xad\x11u\x8d>\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xce\u0733\xa1\u0584?\xb6\xbe\xf6Ca}\xea\U000cf398\xdd_\x89\x19\xe2\xa4\xc8\x18\xb9\x06\x00\x00\u07d4\xce\xe6\x99\xc0pzx6%+)/\x04|\xe8\xad(\x9b/U\x89\x11\x9a\x1e!\xaaiV\x00\x00\u07d4\xce\xedG\xca[\x89\x9f\xd1b?!\xe9\xbdM\xb6Z\x10\u5c1d\x89\a8w@L\x1e\xee\x00\x00\u07d4\xce\xf7tQ\u07e2\xc6C\xe0\v\x15mlo\xf8N#s\xebf\x89\n1\x06+\xee\xedp\x00\x00\u07d4\xcf\x11i\x04\x1c\x17E\xe4[\x17$5\xa2\xfc\x99\xb4\x9a\xce+\x00\x89\x01\xbb\x88\xba\xab-|\x00\x00\xe0\x94\xcf\x15v\x12vN\x0f\u0596\xc8\xcb_\xba\x85\xdfL\r\xdc<\xb0\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u0794\xcf\x1b\xdby\x9b.\xa6<\xe14f\x8b\xdc\x19\x8bT\x84\x0f\x18\v\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xcf\"\x88\xefN\xbf\x88\xe8m\xb1=\x8a\x0e\v\xf5*\x05e\x82\u00c9\x89Po\xbf\x97@t\x00\x00\u07d4\xcf&Ni%\x13\t\x06\xc4\xd7\xc1\x85\x91\xaaA\xb2\xa6\u007foX\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcf&\xb4{\xd04\xbcP\x8elK\xcf\xd6\xc7\xd3\x004\x92Wa\x89a\x94\x04\x9f0\xf7 \x00\x00\xe0\x94\xcf.*\xd65\xe9\x86\x1a\xe9\\\xb9\xba\xfc\xca\x03kR\x81\xf5\u038a\at2!~h6\x00\x00\x00\u07d4\xcf.s@B\xa3U\xd0_\xfb.9\x15\xb1h\x11\xf4Zi^\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcf4\x8f/\xe4{~A<\az{\xaf:u\xfb\xf8B\x86\x92\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xcf?\x91(\xb0r\x03\xa3\xe1\r}WU\xc0\u012b\xc6\xe2\xca\u008a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xcf?\xbf\xa1\xfd2\u05e6\xe0\xe6\xf8\xefN\xabW\xbe4\x02\\L\x899\xa1\xc0\xf7YMH\x00\x00\u07d4\xcfAftn\x1d;\xc1\xf8\xd0qK\x01\xf1~\x8ab\xdf\x14d\x896w\x03n\xdf\n\xf6\x00\x00\u07d4\xcfO\x118\xf1\xbdk\xf5\xb6\u0505\xcc\xe4\xc1\x01\u007f\u02c5\xf0}\x89/\u043cw\xc3+\xff\x00\x00\u07d4\xcfZo\x9d\xf7Uy\xc6D\xf7\x94q\x12\x15\xb3\rw\xa0\xce@\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcf^\x0e\xac\u0473\x9d\x06U\xf2\xf7u5\xeff\b\xeb\x95\v\xa0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xcfhM\xfb\x83\x04r\x93U\xb5\x83\x15\xe8\x01\x9b\x1a\xa2\xad\x1b\xac\x89\x17r$\xaa\x84Lr\x00\x00\u07d4\xcfi@\x81\xc7m\x18\xc6L\xa7\x13\x82\xbe\\\xd6;<\xb4v\xf8\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xcfnR\xe6\xb7t\x80\xb1\x86~\xfe\xc6Dm\x9f\xc3\xcc5w\xe8\x89\f\t\x01\xf6\xbd\x98y\x00\x00\u07d4\u03c8: 2\x96g\xea\"j\x1e\x9a\x92*\x12\xf2\x1f\xaa\x03\x81V\x91\x8cO\u02dc\x89\x04E\x91\xd6\u007f\xec\xc8\x00\x00\u07d4\xcf\xf7\xf8\x9aMB\x19\xa3\x82\x95%\x131V\x82\x10\xff\xc1\xc14\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xcf\xf8\xd0k\x00\xe3\xf5\f\x19\x10\x99\xadV\xbaj\xe2eq\u0348\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xcf\xfcI\xc1x~\ubcb5l\xab\xe9$\x04\xb66\x14}EX\x8a\x013\xe00\x8f@\xa3\u0680\x00\u07d4\xd0\bQ;'`J\x89\xba\x17c\xb6\xf8L\u6233F\x94[\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd0\x0f\x06r\x86\xc0\xfb\u0402\xf9\xf4\xa6\x10\x83\xecv\u07b3\xce\xe6\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd0\x15\xf6\xfc\xb8M\xf7\xbbA\x0e\x8c\x8f\x04\x89J\x88\x1d\xca\xc27\x898E$\xccp\xb7x\x00\x00\u07d4\xd0\x1a\xf9\x13O\xafRW\x17N\x8by\x18oB\xee5Nd-\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd0!\b\u04ae<\xab\x10\xcb\xcf\x16W\xaf\">\x02|\x82\x10\xf6\x89lm\x84\xbc\xcd\xd9\xce\x00\x00\u07d4\xd0*\xfe\u03ce.\u00b6*\u022d Aa\xfd\x1f\xaew\x1d\x0e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd01\x919\xfb\xab.\x8e*\xcc\xc1\xd9$\u0531\x1d\xf6ilZ\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd07\xd2\x15\xd1\x1d\x1d\xf3\xd5O\xbd2\x1c\u0495\xc5F^';\x89K\xe4\xe7&{j\xe0\x00\x00\u07d4\xd0:-\xa4\x1e\x86\x8e\xd3\xfe\xf5t[\x96\xf5\xec\xa4b\xffo\u0689\xa2\xa1]\tQ\x9b\xe0\x00\x00\xe0\x94\xd0?\xc1eWj\xae\xd5%\xe5P,\x8e\x14\x0f\x8b.\x86\x969\x8a\x01sV\u0633%\x01\xc8\x00\x00\u07d4\xd0C\xa0\x11\xecBp\xee~\u0239hsu\x15\xe5\x03\xf80(\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd0K\x86\x1b=\x9a\xccV:\x90\x16\x89\x94\x1a\xb1\xe1\x86\x11a\xa2\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd0ZD|\x91\x1d\xbb'[\xfb.Z7\xe5\xa7\x03\xa5o\x99\x97\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd0_\xfb+t\xf8g O\xe51e;\x02H\xe2\x1c\x13TN\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd0bX\x81q\u03d9\xbb\xebX\xf1&\xb8p\xf9\xa3r\x8da\xec\x89\xf3\xf2\v\x8d\xfai\xd0\x00\x00\u07d4\xd0c\x8e\xa5q\x89\xa6\xa6\x99\x02J\u05ccq\xd99\xc1\xc2\xff\x8c\x89\x8e\xaeVg\x10\xfc \x00\x00\xe0\x94\xd0d\x8aX\x1b5\b\xe15\xa2\x93]\x12\xc9epE\xd8q\u028a\x01\xb2\u07dd!\x9fW\x98\x00\x00\u07d4\xd0q\x19)f\xebi\xc3R\x0f\xca:\xa4\xdd\x04)~\xa0KN\x89\x05\xf6\x8e\x811\xec\xf8\x00\x00\u07d4\xd0q\x85 \xea\xe0\xa4\xd6-p\xde\x1b\xe0\xcaC\x1c^\xea$\x82\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd0w]\xba*\xf4\xc3\n:x6Y9\xcdq\xc2\xf9\u0795\u0489i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xd0{\xe0\xf9\t\x97\xca\xf9\x03\u022c\x1dS\xcd\xe9\x04\xfb\x19\aA\x8968\x908\xb6\x99\xb4\x00\x00\u07d4\xd0~Q\x18d\xb1\u03d9i\xe3V\x06\x02\x82\x9e2\xfcNq\xf5\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\u0400\x94\x98\xc5H\x04z\x1e**\xa6\xa2\x9c\xd6\x1a\x0e\xe2h\xbd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0402'_tZ,\xac\x02v\xfb\xdb\x02\u0532\xa3\xab\x17\x11\xfe\x89\x01\xa0Ui\r\x9d\xb8\x00\x00\u07d4\u040f\xc0\x9a\x000\xfd\t(\xcd2\x11\x98X\x01\x82\xa7j\xae\x9f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u0413\xe8)\x81\x9f\xd2\xe2[\x978\x00\xbb=XA\xdd\x15-\x05\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u0414J\xa1\x85\xa13pa\xae \u071d\xd9l\x83\xb2\xbaF\x02\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\u0416V[|t\a\xd0e6X\x03U\xfd\xd6\xd29\x14J\xa1\x89\r\x8drkqw\xa8\x00\x00\u07d4\u041c\xb2\xe6\b-i:\x13\xe8\xd2\xf6\x8d\xd1\u0744a\xf5X@\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u0426\xc6\xf9\xe9\u0133\x83\xd7\x16\xb3\x1d\xe7\x8dVAM\xe8\xfa\x91\x89\x10CV\x1a\x88)0\x00\x00\u07d4\u0427 \x9b\x80\xcf`\xdbb\xf5}\n]}R\x1ai`fU\x89\b\xacr0H\x9e\x80\x00\x00\xe0\x94\u0428\xab\xd8\n\x19\x9bT\xb0\x8be\xf0\x1d \x9c'\xfe\xf0\x11[\x8a\x01a\xc6&\xdca\xa2\xef\x80\x00\xe0\x94\u042b\xccp\xc0B\x0e\x0e\x17/\x97\xd4;\x87\xd5\xe8\f3n\xa9\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u042es]\x91^\x94hf\xe1\xfe\xa7~^\xa4f\xb5\xca\xdd\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0431\x1do+\u0394^\fjP \u00f5'S\xf8\x03\xf9\u0449\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xd0\xc1\x01\xfd\x1f\x01\xc6?k\x1d\x19\xbc\x92\r\x9f\x93#\x14\xb16\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xd0\xc5Z\xbf\x97o\xdc=\xb2\xaf\u9f99\u0519HMWl\x02\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd0\u0422\xadE\xf5\x9a\x9d\xcc\u0195\xd8_%\xcaF\xed1\xa5\xa3\x89-\x89W}}@ \x00\x00\u07d4\xd0\xd6,G\xea`\xfb\x90\xa3c\x92\t\xbb\xfd\xd4\xd93\x99\x1c\u0189\n\x84Jt$\xd9\xc8\x00\x00\u07d4\xd0\xdbEax o\\D0\xfe\x00Pc\x90<=zI\xa7\x89&I\x1eE\xa7S\xc0\x80\x00\u07d4\xd0\xe1\x94\xf3K\x1d\xb6\t(\x85\t\xcc\xd2\xe7;a1\xa2S\x8b\x8965f3\xeb\xd8\xea\x00\x00\u07d4\xd0\xe3^\x04vF\xe7Y\xf4Qp\x93\xd6@\x86BQ\u007f\bM\x89\u054f\xa4h\x18\xec\u02c0\x00\u07d4\xd0\xeeM\x02\xcf$8,0\x90\xd3\xe9\x95`\xde6xs\\\u07c9\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\xd0\xf0OR\x10\x9a\xeb\xec\x9a{\x1e\x932v\x1e\x9f\xe2\xb9{\xb5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd0\xf9Yx\x11\xb0\xb9\x92\xbb}7W\xaa%\xb4\xc2V\x1d2\xe2\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd1\x03\x02\xfa\xa1\x92\x9a2i\x04\xd3v\xbf\v\x8d\xc9:\xd0LL\x89a\t=|,m8\x00\x00\xe0\x94\xd1\x10\r\xd0\x0f\xe2\xdd\xf1\x81c\xad\x96M\vi\xf1\xf2\xe9e\x8a\x8a\x01C\x12\tU\xb2Pk\x00\x00\u07d4\xd1\x16\xf3\xdc\xd5\xdbtK\xd0\b\x88v\x87\xaa\x0e\xc9\xfdr\x92\xaa\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd1\x19A|Fs,\xf3M\x1a\x1a\xfby\xc3\xe7\xe2\u034e\xec\xe4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd1-w\xae\x01\xa9-5\x11{\xacpZ\xac\u0642\xd0.t\xc1\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xd15yK\x14\x9a\x18\xe1G\xd1nb\x1ai1\xf0\xa4\n\x96\x9a\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xd1C%8\xe3[vd\x95j\u4563*\xbd\xf0A\xa7\xa2\x1c\x8a\x04+\xf0kx\xed;P\x00\x00\u07d4\xd1C\x82g#\x17\x04\xfcr\x80\xd5c\xad\xf4v8D\xa8\a\"\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd1S\x8e\x9a\x87\u5729\xec\x8eX&\xa5\xb7\x93\xf9\x9f\x96\xc4\u00c965\u026d\xc5\u07a0\x00\x00\xe0\x94\xd1d\x85\x03\xb1\xcc\u0178\xbe\x03\xfa\x1e\xc4\xf3\xee&~j\xdf{\x8a\x01;\xef\xbfQ\xee\xc0\x90\x00\x00\xe0\x94\xd1h,!Y\x01\x8d\xc3\xd0\u007f\b$\n\x8c`m\xafe\xf8\xe1\x8a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xd1q\xc3\xf2%\x8a\xef5\xe5\x99\xc7\xda\x1a\xa0s\x00#M\xa9\xa6\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd1w\x8c\x13\xfb\xd9h\xbc\b<\xb7\xd1\x02O\xfe\x1fI\xd0,\xaa\x89\xd9\xec\xb4\xfd \x8eP\x00\x00\u07d4\xd1\u007f\xbe\"\xd9\x04b\xed7(\x06p\xa2\xea\v0\x86\xa0\xd6\u0589\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4\u0441\x1cU\x97i\x80\xf0\x83\x90\x1d\x8a\r\xb2i\"-\xfb\\\xfe\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\u044e\xb9\xe1\u0485\u06be\x93\xe5\u053a\xe7k\xee\xfeC\xb5!\xe8\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\u0453\xe5\x83\xd6\a\x05c\xe7\xb8b\xb9aJG\u9509\xf3\xe5\x8965f3\xeb\xd8\xea\x00\x00\u07d4\u0457\x8f.4@\u007f\xab\x1d\xc2\x18=\x95\xcf\xdab`\xb3Y\x82\x89*\xb7\xb2`\xff?\xd0\x00\x00\u07d4\u045c\xaf9\xbb7\u007f\xdf,\xf1\x9b\xd4\xfbRY\x1c&1\xa6<\x8965\u026d\xc5\u07a0\x00\x00\u0794\u0463\x96\xdc\u06b2\xc7IA0\xb3\xfd0x 4\r\xfd\x8c\x1f\x88\xf9\"P\xe2\xdf\xd0\x00\x00\xe0\x94\u0467\x1b-\bX\xe82p\b]\x95\xa3\xb1T\x96P\x03^#\x8a\x03'\xbb\t\xd0j\xa8P\x00\x00\u07d4\u046c\xb5\xad\xc1\x189s%\x8dk\x85$\xff\xa2\x8f\xfe\xb2=\xe3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u0473\u007f\x03\xcb\x10t$\xe9\xc4\xddW\\\xcdOL\xeeW\xe6\u0349lk\x93[\x8b\xbd@\x00\x00\u07d4\u0475\xa4T\xac4\x05\xbbAy \x8cl\x84\xde\x00k\u02db\xe9\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd1\xc4YT\xa6+\x91\x1a\xd7\x01\xff.\x90\x13\x1e\x8c\xeb\x89\xc9\\\x89K\x91\xa2\xdeE~\x88\x00\x00\u07d4\xd1\xc9np\xf0Z\xe0\xe6\xcd`!\xb2\b7P\xa7q|\xdeV\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd1\u0571\u007f\xfe-{\xbby\xcc}y0\xbc\xb2\xe5\x18\xfb\x1b\xbf\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xd1\xda\f\x8f\xb7\xc2\x10\xe0\xf2\xeca\x8f\x85\xbd\xae}>sK\x1c\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xd1\xddy\xfb\x15\x81`\xe5\xb4\xe8\xe2?1.j\x90\u007f\xbcMN\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd1\xdeZ\xad:_\xd8\x03\U00071bb6\x10<\xb8\xe1O\xe7#\xb7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd1\xe1\xf2\xb9\xc1l0\x98t\xde\xe7\xfa\xc3&u\xaf\xf1)\u00d8\x89\x03\xf2M\x8eJ\x00p\x00\x00\xe0\x94\xd1\xe5\xe24\xa9\xf4Bf\xa4\xa6$\x1a\x84\u05e1\xa5Z\u0567\xfe\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xd1\xeaMr\xa6{[>\x0f1UY\xf5+\xd0aMq0i\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd1\xee\x90YW\xfe|\xc7\x0e\xc8\xf2\x86\x8bC\xfeG\xb1?\xeb\xff\x89\x02b\x9ff\xe0\xc50\x00\x00\u07d4\xd1\xf1iM\"g\x1bZ\xadj\x94\x99\\6\x9f\xbea3go\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd1\xf4\xdc\x1d\u06ca\xbb\x88H\xa8\xb1N%\xf3\xb5Z\x85\x91\xc2f\x89\r\x8drkqw\xa8\x00\x00\u07d4\xd1\xfe\u042e\xe6\xf5\xdf\xd7\xe2Wi%L<\xfa\xd1Z\xde\u032a\x89'\x92\xc8\xfcKS(\x00\x00\u07d4\xd2\x05\x1c\xb3\xcbg\x04\xf0T\x8c\u0210\xab\n\x19\xdb4\x15\xb4*\x89\x12\x1b.^ddx\x00\x00\u07d4\xd2\x06\xaa\u07736\xd4^yr\xe9<\xb0uG\x1d\x15\x89{]\x89 \x86\xac5\x10R`\x00\x00\u07d4\xd2\tH+\xb5I\xab\xc4w{\xeam\u007fe\x00b\xc9\xc5z\x1c\x89\x11e\x1a\xc3\xe7\xa7X\x00\x00\u07d4\xd2\r\xcb\vxh+\x94\xbc0\x00(\x14H\xd5W\xa2\v\xfc\x83\x890\x84\x9e\xbe\x166\x9c\x00\x00\u07d4\xd2\x10{57&\u00e2\xb4ef\xea\xa7\xd9\xf8\v]!\xdb\xe3\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd2\x11\xb2\x1f\x1b\x12\xb5\ta\x81Y\r\xe0~\xf8\x1a\x89S~\xad\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd2\x18\xef\xb4\u06d8\x1c\xddjy\u007fK\u050c|&)<\xeb@\x89\xa1Fk1\xc6C\x1c\x00\x00\xe0\x94\xd2\x1asA\xeb\x84\xfd\x15\x10T\xe5\u31fb%\xd3nI\x9c\t\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\xe0\x94\xd2$\xf8\x80\xf9G\x9a\x89\xd3/\t\xe5+\u9432\x88\x13\\\xef\x8a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u07d4\xd2/\f\xa4\xcdG\x9ef\x17u\x05;\xccI\xe3\x90\xf6p\u074a\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd21\x92\x975\x13!\x02G\x1b\xa5\x90\a\xb6dL\xc0\xc1\xde>\x8967\tlK\xcci\x00\x00\u07d4\xd25\xd1\\\xb5\xec\xee\xbba)\x9e\x0e\x82\u007f\xa8'H\x91\x1d\x89\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd2:$\xd7\xf9F\x83C\xc1C\xa4\x1ds\xb8\x8f|\xbec\xbe^\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd2=z\xff\xac\xdc>\x9f=\xaez\xfc\xb4\x00oX\xf8\xa4F\x00\x89\xc3(\t>a\xee@\x00\x00\u07d4\xd2C\x18L\x80\x1e]y\xd2\x06?5x\u06ee\x81\u7ce9\u02c9k\u0722h\x1e\x1a\xba\x00\x00\u07d4\xd2KfD\xf49\xc8\x05\x1d\xfcd\u04c1\xb8\xc8lu\xc1u8\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xd2K\xf1--\xdfE}\xec\xb1xt\xef\xde R\xb6\\\xbbI\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\xe0\x94\xd2Q\xf9\x03\xae\x18rrY\xee\xe8A\xa1\x89\xa1\xf5i\xa5\xfdv\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xd2R\x96\v\v\xf6\xb2\x84\x8f\u07ad\x80\x13m\xb5\xf5\a\xf8\xbe\x02\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xd2X\x1aU\xce#\xab\x10\u062d\x8cD7\x8fY\a\x9b\xd6\xf6X\x8a\x01\xdd\f\x88_\x9a\r\x80\x00\x00\u07d4\xd2Z\xec\xd7\xeb\x8b\xd64[\x06;]\xbd'\x1cw\xd3QD\x94\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xd2|#O\xf7\xac\xca\xce=\x99g\b\xf8\xf9\xb0Ip\xf9}6\x89Hz\x9a0E9D\x00\x00\u07d4\u0482\x98RM\xf5\xecK$\xb0\xff\xb9\u07c5\x17\n\x14Z\x9e\xb5\x89\x0f\x98\xa3\xb9\xb37\xe2\x00\x00\xe0\x94\u0483\xb8\xed\xb1\n%R\x8aD\x04\xde\x1ce\xe7A\r\xbc\xaag\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\u0484\xa5\x03\x82\xf8:am9\xb8\xa9\xc0\xf3\x96\xe0\ubfe9]\x8966\xc2^f\xec\xe7\x00\x00\u07d4\u0488\xe7\xcb{\xa9\xf6 \xab\x0ftR\xe5\bc=\x1cZ\xa2v\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\u049d\xc0\x8e\xfb\xb3\xd7.&?x\xabv\x10\xd0\"m\xe7k\x00\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\u04a00\xac\x89R2_\x9e\x1d\xb3x\xa7\x14\x85\xa2N\x1b\a\xb2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u04a4y@CG\xc5T:\xab)*\xe1\xbbJo\x15\x83W\xfa\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\u04a5\xa0$#\nW\xcc\xc6fv\v\x89\xb0\xe2l\xaf\u0449\u01ca\n\x96YZ\\n\x8a?\x80\x00\u07d4\u04a8\x03'\xcb\xe5\\L{\xd5\x1f\xf9\xdd\xe4\xcad\x8f\x9e\xb3\xf8\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\u04a8Oug\\b\xd8\f\x88ulB\x8e\xee+\xcb\x18T!\x89A\rXj \xa4\xc0\x00\x00\u07d4\u04ab\xd8J\x18\x10\x93\xe5\xe2)\x13oB\xd85\xe8#]\xe1\t\x89\x05k\xe0<\xa3\xe4}\x80\x00\u07d4\u04ac\r:X`^\x1d\x0f\x0e\xb3\xde%\xb2\xca\xd1)\xed`X\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u04bfg\xa7\xf3\xc6\xceV\xb7\xbeAg]\xbb\xad\xfe~\xa9:3\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xd2\xdb\xeb\xe8\x9b\x03W\xae\xa9\x8b\xbe\x8eIc8\u07bb(\xe8\x05\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd2\xe2\x1e\xd5hh\xfa\xb2\x8e\tG\x92z\xda\xf2\x9f#\xeb\xadl\x89l\x18O\x13U\xd0\xe8\x00\x00\u07d4\xd2\xe8\x17s\x8a\xbf\x1f\xb4\x86X?\x80\xc3P1\x8b\xed\x86\f\x80\x89\r\x02\xce\xcf_]\x81\x00\x00\u07d4\xd2\xed\xd1\xdd\xd6\xd8m\xc0\x05\xba\xebT\x1d\"\xb6@\xd5\xc7\xca\xe5\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd2\xf1\x99\x8e\x1c\xb1X\f\xecOl\x04}\xcd=\xce\xc5L\xf7<\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd2\xf2A%]\xd7\xc3\xf7<\a\x040q\xec\b\xdd\xd9\xc5\xcd\xe5\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd2\xffg \x16\xf6;/\x859\x8fJo\xed\xbb`\xa5\r<\u0389\x12\x91$o[sJ\x00\x00\u07d4\xd3\rLC\xad\xcfU\xb2\xcbS\u0583#&A4I\x8d\x89\u038965\u026d\xc5\u07a0\x00\x00\u07d4\xd3\x0e\xe9\xa1+Mh\xab\xac\xe6\xba\u029a\u05ff\\\xd1\xfa\xf9\x1c\x89QO\xcb$\xff\x9cP\x00\x00\u07d4\xd3\x11\x8e\xa3\xc85\x05\xa9\u0613\xbbg\xe2\xde\x14-Sz>\xe7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd3\x11\xbc\u05eaN\x9bO8?\xf3\xd0\u05b6\xe0~!\xe3p]\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd3\x15\xde\xea\x1d\x8c\x12q\xf9\xd11\x12c\xabG\xc0\a\xaf\xb6\xf5\x89\x03\xc8\x1dNeK@\x00\x00\u07d4\xd3+,y\xc3dx\xc5C\x19\x01\xf6\xd7\x00\xb0M\xbe\x9b\x88\x10\x89\x15w\x9a\x9d\xe6\xee\xb0\x00\x00\u07d4\xd3+EVF\x14Ql\x91\xb0\u007f\xa9\xf7-\xcfx|\xceN\x1c\x89\x0f\xc6o\xae7F\xac\x00\x00\u07d4\xd30r\x811\xfe\x8e:\x15Hz4W<\x93E~*\xfe\x95\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd31\xc8#\x82Z\x9eRc\xd0R\u0611]M\xcd\xe0z\\7\x89\x1e\x93\x12\x83\xcc\xc8P\x00\x00\u07d4\xd33btE\xf2\u05c7\x90\x1e\xf3;\xb2\xa8\xa3g^'\xff\xec\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xd3<\xf8+\xf1LY&@\xa0\x86\b\x91L#py\u057e4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd3Mp\x8ds\x98\x02E3\xa5\xa2\xb20\x9b\x19\xd3\xc5Qq\xbb\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xd3N\x03\xd3j+\xd4\u045a_\xa1b\x18\xd1\xd6\x1e?\xfa\v\x15\x89\x11X\xe4`\x91=\x00\x00\x00\u07d4\xd3Pu\xcaa\xfeY\xd1#\x96\x9c6\xa8-\x1a\xb2\xd9\x18\xaa8\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\xd3g\x00\x9a\xb6X&;b\xc23:\x1c\x9eA@I\x8e\x13\x89\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd3g\x9aG\xdf-\x99\xa4\x9b\x01\u024d\x1c>\f\x98|\xe1\xe1X\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\xe0\x94\u04cf\xa2\xc4\xcc\x14z\xd0j\u0562\xf7Uy(\x1f\"\xa7\xcc\x1f\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\u04da]\xa4`9+\x94\v\u01ee8\xf1e\u007f\x8a\x01f\xc5H\b\x89\xdbw\x00\x00\xe0\x94\xd3\xd6\xe9\xfb\x82T/\u049e\xd9\xea6\t\x89\x1e\x15\x13\x96\xb6\xf7\x8a\voX\x8a\xa7\xbc\xf5\xc0\x00\x00\xe0\x94\xd3\xda\u0476\u040dE\x81\u032ee\xa8s-\xb6\xaci\xf0\u019e\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xd3\xdf;S\xcb;GU\xdeT\xe1\x80E\x1c\xc4L\x9e\x8a\u0a89#\u0114\t\xb9w\x82\x80\x00\u07d4\xd3\xf8s\xbd\x99V\x13W\x89\xab\x00\xeb\xc1\x95\xb9\"\xe9K%\x9d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd4\x02\xb4\xf6\xa0\x99\xeb\xe7\x16\xcb\x14\xdfOy\xc0\xcd\x01\xc6\a\x1b\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xd4\r\x00U\xfd\x9a8H\x8a\xff\x92?\xd0=5\xecF\xd7\x11\xb3\x8a\x01\x0f\b\xed\xa8\xe5U\t\x80\x00\u07d4\xd4\x0e\xd6j\xb3\xce\xff$\xca\x05\xec\xd4q\ufd12\xc1__\xfa\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd4\x18\x87\v\xc2\xe4\xfa{\x8aa!\xae\br\xd5RG\xb6%\x01\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xd4\x1d\u007f\xb4\x9f\xe7\x01\xba\xac%qpBl\u0273\x8c\xa3\xa9\xb2\x89\t\x8a}\x9b\x83\x14\xc0\x00\x00\u07d4\xd4 U\x92\x84@U\xb3\u01e1\xf8\f\xef\xe3\xb8\xebP\x9b\xcd\xe7\x89\t\xb3\xbf\xd3B\xa9\xfc\x80\x00\u07d4\xd4+ \xbd\x03\x11`\x8bf\xf8\xa6\xd1[*\x95\xe6\xde'\u017f\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd44O}\\\xade\xd1~\\-\x0es#\x94=ob\xfe\x92\x89\x0e~\xeb\xa3A\vt\x00\x00\u07d4\xd4>\xe48\xd8=\xe9\xa3ub\xbbN(l\xb1\xbd\x19\xf4\x96M\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd4C4\xb4\xe2:\x16\x9a\f\x16\xbd!\xe8f\xbb\xa5-\x97\x05\x87\x89\x8c\xf2?\x90\x9c\x0f\xa0\x00\x00\xe0\x94\xd4M\x81\xe1\x8fF\xe2\u03f5\xc1\xfc\xf5\x04\x1b\xc8V\x97g\xd1\x00\x8a\a\xb4B\xe6\x84\xf6Z\xa4\x00\x00\u07d4\xd4OJ\xc5\xfa\xd7k\xdc\x157\xa3\xb3\xafdr1\x9bA\r\x9d\x89V\xbcu\xe2\xd61\x00\x00\x00\u07d4\xd4O^\xdf+\xcf$3\xf2\x11\xda\xdd\f\xc4P\xdb\x1b\x00\x8e\x14\x89\x0e~\xeb\xa3A\vt\x00\x00\xe0\x94\xd4Oj\u00d2;_\xd71\xa4\xc4YD\xecO~\xc5*j\xe4\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xd4[3A\xe8\xf1\\\x802\x93 \u00d7~;\x90\xe7\x82j~\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xd4]]\xaa\x13\x8d\xd1\xd3t\xc7\x1b\x90\x19\x91h\x11\xf4\xb2\nN\x89\x1f9\x9b\x148\xa1\x00\x00\x00\u07d4\xd4`\xa4\xb9\b\xdd+\x05gY\xb4\x88\x85\vf\xa88\xfcw\xa8\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xd4g\xcf\x06L\bq\x98\x9b\x90\u0632\xeb\x14\xcc\xc6;6\b#\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd4k\xaea\xb0'\xe5\xbbB.\x83\xa3\xf9\xc9?<\x8f\xc7}'\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd4o\x82#E)\x82\xa1\xee\xa0\x19\xa8\x81n\xfc-o\xc0\ah\x89\amA\xc6$\x94\x84\x00\x00\u07d4\xd4uG\u007f\xa5c\x90\xd30\x17Q\x8dg\x11\x02\u007f\x05\U0008dfc9k\x11\x133\xd4\xfdL\x00\x00\u07d4\xd4|$.\xdf\xfe\xa0\x91\xbcT\xd5}\xf5\xd1\xfd\xb91\x01Gl\x89\x9d\xf7\u07e8\xf7`H\x00\x00\u07d4\xd4}\x86\x85\xfa\xee\x14|R\x0f\u0646p\x91u\xbf/\x88k\xef\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd4\u007fP\u07c9\xa1\xcf\xf9e\x13\xbe\xf1\xb2\xae:)q\xac\xcf,\x89-\x89W}}@ \x00\x00\u07d4\u0502\xe7\xf6\x8eA\xf28\xfeQx)\xde\x15G\u007f\xe0\xf6\xdd\x1d\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u0507\x9f\xd1+\x1f:'\xf7\xe1\tv\x1b#\xca4\xfa#\x06K\x1c\xaf\x00Qn(pJ\x82\xa4\xf8\x89Hz\x9a0E9D\x00\x00\u07d4\xd5\x00\xe4\xd1\u0242K\xa9\xf5\xb65\u03e3\xa8\xc2\u00cb\xbdL\xed\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xd5\b\u04dcp\x91oj\xbcL\xc7\xf9\x99\xf0\x11\xf0w\x10X\x02\x89\x05rM$\xaf\xe7\u007f\x00\x00\u07d4\xd5\x0f\u007f\xa0>8\x98v\u04d0\x8b`\xa57\xa6pc\x04\xfbV\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xd5\x13\xa4P\x80\xff/\xeb\xe6,\u0545J\xbe)\xeeDg\xf9\x96\x89\bN\x13\xbcO\xc5\xd8\x00\x00\u07d4\xd5'o\f\xd5\xff\xd5\xff\xb6?\x98\xb5p=U\x94\xed\xe0\x83\x8b\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xd5)KfbB0;m\xf0\xb1\u020d7B\x9b\xc8\xc9e\xaa\x89\x10M\r\x00\u04b7\xf6\x00\x00\u07d4\xd5*\xec\xc6I98\xa2\x8c\xa1\xc3g\xb7\x01\xc2\x15\x98\xb6\xa0.\x89;\xa1\x91\v\xf3A\xb0\x00\x00\u07d4\xd5\x99x\xee \xa3\x8c?I\x8dc\xd5\u007f1\xa3\x9fj\x06\x8a\x022\xb3o\xfcg*\xb0\x00\x00\u07d4\u05568\xd3\xc5\xfa\xa7q\x1b\xf0\x85t_\x9d[\xdc#\u0518\u0609lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u055d\x92\xd2\xc8p\x19\x80\xcc\a<7]r\n\xf0dt<\f\x8a\x04\x05\xfd\xf7\u5bc5\xe0\x00\x00\u07d4\u0567\xbe\xc32\xad\xde\x18\xb3\x10KW\x92Tj\xa5\x9b\x87\x9bR\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0571\x17\xec\x11n\xb8FA\x89a\xeb~\xdbb\x9c\xd0\xddi\u007f\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\u0572\x84\x04\x010\xab\xf7\xc1\xd1cq#q\xcc~(\xadf\u0689j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u0579\xd2w\u062a\xd2\x06\x97\xa5\x1fv\xe2\tx\x99k\xff\xe0U\x89\a\xc3\xfe<\aj\xb5\x00\x00\u07d4\u057d^\x84U\xc10\x16\x93W\xc4q\xe3\u6077\x99jrv\x89-\x9e(\x8f\x8a\xbb6\x00\x00\u07d4\xd5\u02e5\xb2k\xea]s\xfa\xbb\x1a\xba\xfa\xcd\xef\x85\xde\xf3h\u0309\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd5\xceU\u0476/YC\xc0?\x89\b\xe3\x1f\xe1h\x9d\x8a\x00\x00\u07d4\xd6\x06Q\xe3\x93x4#\xe5\xcc\x1b\xc5\xf8\x89\xe4N\xf7\xea$>\x89\x15\x9ev7\x11)\xc8\x00\x00\u07d4\xd6\t\xbfO\x14n\xeak\r\xc8\xe0m\xdc\xf4D\x8a\x1f\xcc\xc9\xfa\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd6\t\xec\v\xe7\r\n\xd2ong\xc9\xd4v+R\xeeQ\x12,\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd6\nRX\a(R\r\xf7Tk\xc1\xe2\x83)\x17\x88\u06ee\f\x8964\x89\xef?\xf0\xd7\x00\x00\u07d4\xd6\v$s!\xa3*Z\xff\xb9k\x1e'\x99'\xccXM\xe9C\x89z\xd0 \xd6\xdd\xd7v\x00\x00\u07d4\xd6\x11\x02v\xcf\xe3\x1eB\x82ZW\u007fkC]\xbc\xc1\f\xf7d\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xd6\x12Y{\xc3\x17C\u01c63\xf63\xf29\xb1\xe9Bk\xd9%\x8a\x10\x17\xf7\u07d6\xbe\x17\x80\x00\x00\u07d4\xd6#J\xafE\xc6\xf2.f\xa2%\xff\xb9:\xddb\x9bN\xf8\x0f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd6.\u06d6\xfc\u259a\xaflT^\x96|\xf1\xc0\xbc\x80R\x05\x89\x04\xa5eSjZ\u0680\x00\u07d4\xd60\v2\x15\xb1\x1d\xe7b\xec\xdeKp\xb7\x92}\x01)\x15\x82\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd69]\xb5\xa4\xbbf\xe6\x0fL\xfb\xcd\xf0\x05{\xb4\xd9xb\xe2\x891T\xc9r\x9d\x05x\x00\x00\xe0\x94\xd6J-P\xf8\x85\x857\x18\x8a$\xe0\xf5\r\xf1h\x1a\xb0~\u05ca\b7Z*\xbc\xca$@\x00\x00\u07d4\xd6X\n\xb5\xedL}\xfaPo\xa6\xfed\xad\\\xe1)pw2\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd6Y\x8b\x13\x86\xe9<\\\u02d6\x02\xffK\xbb\xec\xdb\xd3p\x1d\u0109\f%\xf4\xec\xb0A\xf0\x00\x00\u07d4\xd6dM@\xe9\v\xc9\u007f\xe7\xdf\xe7\u02bd2i\xfdW\x9b\xa4\xb3\x89\b\x9e\x91y\x94\xf7\x1c\x00\x00\xe0\x94\xd6g\f\x03m\xf7T\xbeC\xda\u074fP\xfe\xea(\x9d\x06\x1f\u058a\x01D\xa2\x904H\xce\xf7\x80\x00\u07d4\xd6hR:\x90\xf0)=e\xc58\xd2\xddlWg7\x10\x19n\x89\x02$,0\xb8S\xee\x00\x00\u07d4\xd6j\xb7\x92\x94\aL\x8bb}\x84-\xabA\xe1}\xd7\f]\xe5\x8965\u026d\xc5\u07a0\x00\x00\u0794\xd6j\xcc\r\x11\xb6\x89\u03a6\xd9\xea_\xf4\x01L\"J]\xc7\u0108\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xd6m\xdf\x11Y\xcf\"\xfd\x8czK\xc8\u0540wV\xd43\xc4>\x89wC\"\x17\xe6\x83`\x00\x00\u07d4\u0587\xce\xc0\x05\x90\x87\xfd\xc7\x13\xd4\xd2\xd6^w\xda\xef\xed\xc1_\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\u0588\xe7\x85\u024f\x00\xf8K:\xa1S3U\u01e2X\xe8yH\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u05a2.Y\x8d\xab\u04ce\xa6\xe9X\xbdy\u050d\u0756\x04\xf4\u07c965\u026d\xc5\u07a0\x00\x00\u07d4\u05a7\xacM\xe7\xb5\x10\xf0\xe8\xdeQ\x9d\x97?\xa4\xc0\x1b\xa84\x00\x89e\xea=\xb7UF`\x00\x00\u07d4\u05ac\xc2 \xba.Q\xdf\xcf!\xd4C6\x1e\xeav\\\xbd5\u0609\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u05ac\xff\u043f\u065c8.{\xd5o\xf0\xe6\x14J\x9eR\xb0\x8e\x89\b\xacr0H\x9e\x80\x00\x00\u07d4\xd6\xc0\u043c\x93\xa6.%qtp\x0e\x10\xf0$\u0232?\x1f\x87\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xd6\xcf\\\x1b\u03dd\xa6b\xbc\xea\"U\x90P\x99\xf9\xd6\xe8M\u030a\x01\u011eB\x01W\xd9\xc2\x00\x00\u07d4\xd6\xd05r\xa4RE\xdb\xd46\x8cO\x82\xc9W\x14\xbd!g\xe2\x89?\x00\xc3\xd6f\x86\xfc\x00\x00\u07d4\xd6\xd6wiX\xee#\x14:\x81\xad\xad\xeb\b8 \t\xe9\x96\u0089\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xd6\xd9\xe3\x0f\bB\x01*qv\xa9\x17\xd9\xd2\x04\x8c\xa0s\x87Y\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd6\xe0\x9e\x98\xfe\x13\x003!\x04\xc1\xca4\xfb\xfa\xc5T6N\u0649lk\x93[\x8b\xbd@\x00\x00\u07d4\xd6\xe8\xe9z\u90db\x9e\xe5\a\xee\xdb(\xed\xfbtw\x03\x149\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd6\uea18\u052e+q\x80'\xa1\x9c\xe9\xa5\xebs\x00\xab\xe3\u0289\x01}J\xce\xeec\u06c0\x00\xe0\x94\xd6\xf1\xe5[\x16\x94\b\x9e\xbc\xb4\xfe}x\x82\xaaf\u0217av\x8a\x04<#\xbd\xbe\x92\x9d\xb3\x00\x00\u07d4\xd6\xf4\xa7\xd0N\x8f\xaf \xe8\xc6\ub15c\xf7\xf7\x8d\xd2=z\x15\x89\a$\xde\xd1\xc7H\x14\x00\x00\u07d4\xd6\xfc\x04F\u01a8\xd4\n\xe3U\x1d\xb7\xe7\x01\xd1\xfa\x87nJI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd7\x03\u01a4\xf1\x1d`\x19Ey\u054c'f\xa7\xef\x16\xc3\n)\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd7\x05%\x19uj\xf4%\x90\xf1S\x91\xb7#\xa0?\xa5d\xa9Q\x89\xfa61H\r\x01\xfd\x80\x00\u07d4\xd7\na+\xd6\u0769\xea\xb0\xdd\xdc\xffJ\xafA\"\u04cf\xea\xe4\x89\x1dF\x01b\xf5\x16\xf0\x00\x00\u07d4\xd7\n\xd2\xc4\xe9\uefe67\xefV\xbdHj\u04a1\xe5\xbc\xe0\x93\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd7\x14\f\x8eZC\a\xfa\xb0\xcc'\xba\u0752\x95\x01\x8b\xf8yp\x89\x05\xf1\x01kPv\xd0\x00\x00\u07d4\xd7\x16J\xa2a\xc0\x9a\u0672\xb5\x06\x8dE>\xd8\xebj\xa10\x83\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xd7\x1eC\xa4Qw\xadQ\xcb\xe0\xf7!\x84\xa5\xcbP9\x17(Z\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd7\x1f\xb10\xf0\x15\fVRi\xe0\x0e\xfbC\x90+R\xa4U\xa6\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd7\"W8\xdc\xf3W\x848\xf8\xe7\u0233\x83~B\xe0J&/\x89\x18+\x8c\ubec3\xaa\x00\x00\u07d4\xd7'MP\x80M\x9cw\u0693\xfaH\x01V\xef\xe5{\xa5\x01\u0789i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xd71\xbbk_<79^\t\u03ac\xcd\x14\xa9\x18\xa6\x06\a\x89\x89\u0556{\xe4\xfc?\x10\x00\x00\xe0\x94\xd7>\xd2\u0645\xb5\xf2\x1bU\xb2td;\xc6\xda\x03\x1d\x8e\u074d\x8a\nm\xd9\f\xaeQ\x14H\x00\x00\u07d4\xd7D\xac~S\x10\xbeijc\xb0\x03\xc4\v\xd097\x05a\u0189Z\x87\xe7\xd7\xf5\xf6X\x00\x00\xe0\x94\xd7Jn\x8dj\xab4\u0385\x97h\x14\xc12{\xd6\xea\a\x84\u048a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xd7ZP*[gr\x87G\x0fe\u016aQ\xb8|\x10\x15\x05r\x8910\xb4dc\x85t\x00\x00\u07d4\xd7m\xba\xeb\xc3\rN\xf6{\x03\xe6\xe6\xec\xc6\xd8N\x00MP-\x89mv\xb9\x18\x8e\x13\x85\x00\x00\u07d4\xd7q\xd9\xe0\u028a\b\xa1\x13wW1CN\xb3'\x05\x99\xc4\r\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xd7x\x8e\xf2\x86X\xaa\x06\xccS\xe1\xf3\xf0\xdeX\xe5\xc3q\xbex\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\xd7x\x92\xe2';#]v\x89\xe40\xe7\xae\ud73c\xe8\xa1\xf3\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u05c1\xf7\xfc\t\x18F\x11V\x85p\xb4\x98n,r\x87+~\u0409\x01\x15\x95a\x06]]\x00\x00\u07d4\u05c5\xa8\xf1\x8c8\xb9\xbcO\xfb\x9b\x8f\xa8\xc7r{\xd6B\xee\x1c\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u05ce\xcd%\xad\xc8k\xc2\x05\x1d\x96\xf6Sd\x86kB\xa4&\xb7\x89\xd20X\xbf/&\x12\x00\x00\xe0\x94\u05cf\x84\xe3\x89D\xa0\xe0%_\xae\xceH\xbaIP\u053d9\u048a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\u05d4\x83\xf6\xa8DO%I\xd6\x11\xaf\xe0,C-\x15\xe1\x10Q\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u05d85\xe4\x04\xfb\x86\xbf\x84_\xba\t\rk\xa2^\f\x88f\xa6\x89\x82\x1a\xb0\xd4AI\x80\x00\x00\u07d4\u05da\xff\x13\xba-\xa7]F$\f\xac\n$g\xc6V\x94\x98#\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\u05dd\xb5\xabCb\x1az=\xa7\x95\xe5\x89)\xf3\xdd%\xafg\u0649lj\xccg\u05f1\xd4\x00\x00\u07d4\u05e1C\x1e\xe4S\xd1\xe4\x9a\x05P\xd1%hy\xb4\xf5\xd1\x02\x01\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4\u05ed\t\xc6\xd3&WhSU\xb5\xc6\uc39fW\xb4\ube42\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u05f7@\xdf\xf8\xc4Wf\x8f\xdft\xf6\xa2f\xbf\xc1\u0737#\xf9\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xd7\u0080>\u05f0\xe0\x83sQA\x1a\x8ef7\xd1h\xbc[\x05\x8a\x06A\xda\xf5\xc9\x1b\xd95\x80\x00\u07d4\xd7\xc6&]\xea\x11\x87l\x90;q\x8eL\u062b$\xfe&[\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\xd7\xca\u007f\xdc\xfe\xbeE\x88\xef\xf5B\x1d\x15\"\xb6\x13(\xdf{\xf3\x89\xd8\xe6\x00\x1el0+\x00\x00\u07d4\xd7\u037dA\xff\xf2\r\xf7'\xc7\vbU\xc1\xbav\x06\x05Th\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd7\xd1W\xe4\xc0\xa9d7\xa6\u0485t\x1d\xd2>\xc46\x1f\xa3k\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd7\xd2\xc6\xfc\xa8\xad\x1fu9R\x10\xb5}\xe5\xdf\xd6s\x939\t\x89\x12nr\xa6\x9aP\xd0\x00\x00\xe0\x94\xd7\xd3\xc7Y Y\x048\xb8,>\x95\x15\xbe.\xb6\xedz\x8b\x1a\x8a\f\xb4\x9bD\xba`-\x80\x00\x00\u07d4\xd7\xd7\xf2\u02a4b\xa4\x1b;0\xa3J\xeb;\xa6\x10\x10\xe2bo\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd7\xe7J\xfd\xba\xd5^\x96\u03bcZ7O,\x8bv\x86\x80\xf2\xb0\x89\x05]\xe6\xa7y\xbb\xac\x00\x00\xe0\x94\xd7\xeb\x901b'\x1c\x1a\xfa5\xfei\xe3s\"\u0224\u049b\x11\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xd7\xeb\u0779\xf99\x87w\x9bh\x01U7T8\xdbe\xaf\xcbj\x89\x05t\x1a\xfe\xff\x94L\x00\x00\u07d4\xd7\xef4\x0ef\xb0\u05ef\xcc\xe2\n\x19\xcb{\xfc\x81\xda3\xd9N\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xd7\xf3p\u053e\xd9\xd5|oI\u0259\xder\x9e\xe5i\xd3\xf4\xe4\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd7\xfa_\xfb`H\xf9o\xb1\xab\xa0\x9e\xf8{\x1c\x11\xddp\x05\xe4\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd8\x06\x9f\x84\xb5!I?G\x15\x03\u007f2&\xb2_3\xb6\x05\x86\x89g\x8a\x93 b\xe4\x18\x00\x00\u0794\xd8\x15\xe1\xd9\xf4\xe2\xb5\xe5~4\x82k|\xfd\x88\x81\xb8Th\x90\x88\xf0\x15\xf2W6B\x00\x00\u07d4\xd8\x1b\xd5K\xa2\xc4Jok\xeb\x15a\u058b\x80\xb5DNm\u0189?\x17\r~\xe4\"\xf8\x9c\x80-1({\x96q\xe8\x1c\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\xd8K\x92/xA\xfcWt\xf0\x0e\x14`J\xe0\xdfB\xc8U\x1e\x89\xd9o\u0390\u03eb\xcc\x00\x00\u07d4\xd8U\xb0<\xcb\x02\x9awG\xb1\xf0s\x03\xe0\xa6dy59\u0209lk\x93[\x8b\xbd@\x00\x00\u07d4\xd8_\u07af*a\xf9]\xb9\x02\xf9\xb5\xa5<\x9b\x8f\x92f\u00ec\x89l\xf6Z~\x90G(\x00\x00\u07d4\xd8q^\xf9\x17o\x85\v.0\xeb\x8e8'\a\xf7w\xa6\xfb\xe9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd8t\xb9\u07eeEj\x92\x9b\xa3\xb1\xa2~W,\x9b,\xec\u07f3\x89\t79SM(h\x00\x00\u07d4\u0613\n9\xc7sW\xc3\n\u04e0`\xf0\v\x06\x04c1\xfdb\x89,s\xc97t,P\x00\x00\u07d4\u061b\xc2q\xb2{\xa3\xabib\xc9JU\x90\x06\xae8\xd5\xf5j\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0637}\xb9\xb8\x1b\xbe\x90B{b\xf7\x02\xb2\x01\xff\u009f\xf6\x18\x892m\x1eC\x96\xd4\\\x00\x00\u07d4\xd8\xcdd\xe0(N\xecS\xaaF9\xaf\xc4u\b\x10\xb9\u007f\xabV\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd8\xd6C\x84$\x9bwg\x94\x06;V\x98x\xd5\xe3\xb50\xa4\xb2\x89\t\xa0C\u0432\xf9V\x80\x00\u07d4\xd8\xd6T \xc1\x8c#'\xccZ\xf9t%\xf8W\xe4\xa9\xfdQ\xb3\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xd8\xe5\xc9g^\xf4\xde\xed&k\x86\x95o\xc4Y\x0e\xa7\u0522}\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xd8\xe8GB\x92\xe7\xa0Q`L\xa1d\xc0pw\x83\xbb(\x85\xe8\x8a\x02\xd4\xca\x05\xe2\xb4<\xa8\x00\x00\u07d4\xd8\xebxP>\xc3\x1aT\xa9\x016x\x1a\xe1\t\x00Lt2W\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd8\xee\xf4\xcfK\xeb\x01\xee \xd1\x11t\x8ba\xcbM?d\x1a\x01\x89\x94\x89#z\u06daP\x00\x00\u07d4\xd8\xf4\xba\xe6\xf8M\x91\rm}Z\xc9\x14\xb1\xe6\x83r\xf9A5\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xd8\xf6 6\xf0;v5\xb8X\xf1\x10?\x8a\x1d\x90\x19\xa8\x92\xb6\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\xd8\xf6e\xfd\x8c\xd5\u00bc\xc6\xdd\xc0\xa8\xaeR\x1eM\u01aa``\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xd8\xf9$\fU\xcf\xf05RB\x80\xc0\x9e\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xd8\xfe\b\x8f\xff\u0394\x8fQ7\xee#\xb0\x1d\x95\x9e\x84\xacB#\x89\f[T\xa9O\xc0\x17\x00\x00\u07d4\xd9\x0f0\t\xdbC~N\x11\u01c0\xbe\u0209os\x8de\xef\r\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd9\x10;\xb6\xb6zU\xa7\xfe\xce-\x1a\xf6-E|!x\x94m\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd9\x13\xf0w\x19Iu\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xd9D\u0226\x9f\xf2\xca\x12Ii\f\x12)\xc7\x19/6%\x10b\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xd9JW\x88*Rs\x9b\xbe*\x06G\xc8\f$\xf5\x8a+O\x1c\x89H\xb5N*\xdb\xe1+\x00\x00\xe0\x94\xd9SB\x95<\x8a!\xe8\xb65\xee\xfa\u01c1\x9b\xea0\xf1pG\x8a\x13\xf0l\u007f\xfe\xf0]@\x00\x00\u07d4\xd9\\\x90\xff\xbeT\x84\x86G\x80\xb8gIJ\x83\u0212V\xd6\xe4\x89X\xe7\x92n\xe8X\xa0\x00\x00\u07d4\xd9g\x11T\x0e.\x99\x83C\xd4\xf5\x90\xb6\xfc\x8f\xac;\xb8\xb3\x1d\x89_Z@h\xb7\x1c\xb0\x00\x00\u07d4\xd9j\xc2Pt\t\u01e3\x83\xab.\xee\x18\"\xa5\xd78\xb3kV\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xd9m\xb3;{Z\x95\f>\xfa-\xc3\x1b\x10\xba\x10\xa52\uf1c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xd9wYe\xb7\x16Gfu\xa8\xd5\x13\xeb\x14\xbb\xf7\xb0|\xd1J\x8a\x01\x13.m-#\xc5\xe4\x00\x00\u07d4\xd9{\xc8J\xbdG\xc0[\xbfE{.\xf6Y\xd6\x1c\xa5\xe5\u43c9\x06\x9d\x17\x11\x9d\u0168\x00\x00\u07d4\xd9\u007fE&\u07a9\xb1c\xf8\xe8\xe3:k\u03d2\xfb\x90}\xe6\xec\x89\x0feJ\xafM\xb2\xf0\x00\x00\u07d4\xd9\u007f\xe6\xf5?*X\xf6\xd7mu*\xdft\xa8\xa2\xc1\x8e\x90t\x89\x10\xcd\xf9\xb6\x9aCW\x00\x00\u07d4\u0659\x99\xa2I\r\x94\x94\xa50\xca\xe4\xda\xf3\x85T\xf4\xddc>\x89\x06\x81U\xa46v\xe0\x00\x00\u07d4\u065d\xf7B\x1b\x93\x82\xe4,\x89\xb0\x06\xc7\xf0\x87p*\aW\xc0\x89\x1a\x05V\x90\xd9\u06c0\x00\x00\xe0\x94\u0677\x83\xd3\x1d2\xad\xc5\x0f\xa3\xea\u02a1]\x92\xb5h\xea\xebG\x8a\a3\xaf\x907L\x1b(\x00\x00\u07d4\xd9\xd3p\xfe\xc65v\xab\x15\xb3\x18\xbf\x9eX6M\u00a3U*\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xd9\xd4/\xd1>\xbdK\xf6\x9c\xac^\x9c~\x82H:\xb4m\xd7\xe9\x8a\x01!\xeah\xc1\x14\xe5\x10\x00\x00\u07d4\xd9\xe2~\xb0}\xfcq\xa7\x06\x06\f\u007f\a\x928\u0293\xe8\x859\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xd9\xe3\x85~\xfd\x1e *D\x17p\xa7w\xa4\x9d\xccE\xe2\xe0\u04c9\f\x1d\xaf\x81\u0623\xce\x00\x00\u07d4\xd9\xec.\xfe\x99\xff\\\xf0\r\x03\xa81{\x92\xa2J\xefD\x1f~\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xd9\xec\x8f\xe6\x9bw\x16\xc0\x86Z\xf8\x88\xa1\x1b+\x12\xf7 \xed3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xd9\xf1\xb2d\b\xf0\xecg\xad\x1d\ro\xe2.\x85\x15\xe1t\x06$\x89\x01M\x11 \u05f1`\x00\x00\u07d4\xd9\xf5G\xf2\xc1\xde\x0e\u064aS\xd1a\xdfWc]\xd2\x1a\x00\xbd\x89\x05V\xf6L\x1f\xe7\xfa\x00\x00\u07d4\xd9\xff\x11]\x01&l\x9fs\xb0c\xc1\xc28\xef5e\xe6;6\x89$\xdc\xe5M4\xa1\xa0\x00\x00\u07d4\xda\x06\x04N)#&\xffil\x0091h\xceF\xff\xac9\xec\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xda*\x14\xf9r@\x15\u05d0\x14\xed\x8eY\th\x1dYaH\xf1\x89\x02\xa1\x0f\x0f\x8a\x91\xab\x80\x00\u07d4\xda*\u054ew\xde\xdd\xed\xe2\x18vF\xc4e\x94Z\x8d\xc3\xf6A\x89#\xc7W\a+\x8d\xd0\x00\x00\u07d4\xda0\x17\xc1P\xdd\r\xce\u007f\u03c8\x1b\nH\xd0\xd1\xc7V\xc4\u01c9\x05k\xf9\x1b\x1ae\xeb\x00\x00\u07d4\xda4\xb2\xea\xe3\v\xaf\xe8\xda\xec\xcd\xe8\x19\xa7\x94\u0349\xe0\x95I\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xdaJ_U\u007f;\xab9\n\x92\xf4\x9b\x9b\x90\n\xf3\fF\xae\x80\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xdaPU7S\u007f\xfb3\xc4\x15\xfe\xc6Ni\xba\xe0\x90\xc5\xf6\x0f\x89\b\xacr0H\x9e\x80\x00\x00\u07d4\xdai\x8dd\xc6\\\u007f+,rS\x05\x9c\xd3\u0441\u0619\xb6\xb7\x89\x10\x04\xe2\xe4_\xb7\xee\x00\x00\u07d4\xdaw2\xf0/.'.\xaf(\u07d7.\xcc\r\xde\xed\x9c\xf4\x98\x89\v \xbf\xbfig\x89\x00\x00\u07d4\xdaz\xd0%\xeb\xde%\xd2\"C\u02c3\x0e\xa1\xd3\xf6JVc#\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\u0685]SG\u007fP^\xc4\xc8\xd5\u8ed1\x80\u04c6\x81\x11\x9c\x8a\x01/\x93\x9c\x99\xed\xab\x80\x00\x00\u07d4\u0687^N/<\xab\xe4\xf3~\x0e\xae\xd7\xd1\xf6\xdc\xc6\xff\xefC\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u068b\xbe\xe1\x82\xe4U\xd2\t\x8a\xcb3\x8amE\xb4\xb1~\u0636\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0698.\x96C\xff\xec\xe7#\aZ@\xfewnZ\xce\x04\xb2\x9b\x89\b\xb8\xb6\u0259\x9b\xf2\x00\x00\u07d4\u069fUF\tF\u05ff\xb5p\xdd\xecu|\xa5w;XB\x9a\x89\x1b\x84]v\x9e\xb4H\x00\x00\u07d4\u06a1\xbdz\x91H\xfb\x86\\\xd6\x12\xdd5\xf1b\x86\x1d\x0f;\u0709\xa68\xabr\xd9,\x13\x80\x00\xe0\x94\u06a6<\xbd\xa4]\u0507\xa3\xf1\xcdJtj\x01\xbb^\x06\v\x90\x8a\x01\x04\x16\u0670*\x89$\x00\x00\u07d4\u06a7v\xa6uDi\u05f9&z\x89\xb8g%\xe7@\xda\x0f\xa0\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\u06ac\x91\xc1\xe8Y\xd5\xe5~\xd3\bKP \x0f\x97f\xe2\xc5+\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\u06ac\xda\xf4\"&\xd1\\\xb1\u03d8\xfa\x15\x04\x8c\u007fL\xee\xfei\x89\x10CV\x1a\x88)0\x00\x00\xe0\x94\u06b6\xbc\u06c3\xcf$\xa0\xae\x1c\xb2\x1b;[\x83\xc2\xf3\x82I'\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\u06bb\b\x89\xfc\x04)&\xb0^\xf5{% \x91\n\xbcKAI\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u06bc\"PB\xa6Y,\xfa\x13\xeb\xe5N\xfaA\x04\bx\xa5\xa2\x89\x0e\x11\xfa\xd5\xd8\\\xa3\x00\x00\u07d4\xda\xc0\xc1w\xf1\x1c\\>>x\xf2\xef\xd6c\xd12!H\x85t\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xda\xd16\xb8\x81x\xb4\x83zlx\x0f\xeb\xa2&\xb9\x85i\xa9L\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xda\xdb\xfa\xfd\x8bb\xb9*$\xef\xd7RV\u0743\xab\xdb\u05fb\u06c9\x01\x11du\x9f\xfb2\x00\x00\u07d4\xda\xdc\x00\xaby'`\xaa4\x15i\xfa\x9f\xf5\x98&\x84\x85JJ2\x8an\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xda\xe7 \x1e\xab\x8c\x063\x02\x93\ri9)\xd0\u007f\x95\xe7\x19b\x89\x91\xae\xc0(\xb4\x19\x81\x00\x00\u07d4\xda\xed\u052d\x10{'\x1e\x89Hl\xbf\x80\xeb\xd6!\u0757Ex\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdb\x04\xfa\xd9\u011f\x9e\x88\v\xeb\x8f\xcf\x1d:8\x90\u4cc4o\x89CZ\xe6\xcc\fX\xe5\x00\x00\u07d4\xdb\f\u01cft\u0642{\u070ads'n\xb8O\u0717b\x12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdb\x12\x93\xa5\x06\xe9\f\xad*Y\xe1\xb8V\x1f^f\x96\x1ag\x88\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdb\x19\xa3\x98\"06\x8f\x01w!\x9c\xb1\f\xb2Y\u0372%|\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdb#\xa6\xfe\xf1\xaf{X\x1ew,\xf9\x18\x82\u07b2Qo\xc0\xa7\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xdb$O\x97\xd9\xc4K\x15\x8a@\xed\x96\x06\xd9\xf7\xbd8\x9131\x89\x05\x87\x88\u02d4\xb1\xd8\x00\x00\u07d4\xdb(\x8f\x80\xff\xe22\u00baG\u0314\xc7c\xcfo\u0278+\r\x89\x04\x9b\x9c\xa9\xa6\x944\x00\x00\u07d4\xdb*\f\x9a\xb6M\xf5\x8d\u07f1\u06ec\xf8\xba\r\x89\xc8[1\xb4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xdb4t^\u0785v\xb4\x99\xdb\x01\xbe\xb7\xc1\xec\u0685\xcfJ\xbe\x89\x04V9\x18$O@\x00\x00\u07d4\xdb?%\x8a\xb2\xa3\xc2\xcf3\x9cD\x99\xf7ZK\xd1\xd3G.\x9e\x89QP\xae\x84\xa8\xcd\xf0\x00\x00\u07d4\xdbK\xc8;\x0ek\xaa\xdb\x11V\xc5\xcf\x06\xe0\xf7!\x80\x8cR\u01c9/\xb4t\t\x8fg\xc0\x00\x00\u07d4\xdbc\x12-\xe7\x03}\xa4\x97\x151\xfa\u9bc5\x86x\x86\u0192\x89\x0f\x04%\xb0d\x1f4\x00\x00\u07d4\xdbl*s\xda\xc7BJ\xb0\xd01\xb6ga\x12%f\xc0\x10C\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xdbnV\f\x9b\xc6 \u053e\xa3\xa9MG\xf7\x88\v\xf4\u007f-_\x89\x04\xda\x0f\xdf\xcf\x05v\x00\x00\u07d4\xdbo\xf7\x1b=\xb0\x92\x8f\x83\x9e\x05\xa72;\xfbW\u049c\x87\xaa\x891T\xc9r\x9d\x05x\x00\x00\u07d4\xdbsF\vY\xd8\xe8PE\xd5\xe7R\xe6%Y\x87^BP.\x8963\x03\"\xd5#\x8c\x00\x00\u07d4\xdbw\xb8\x8d\xcbq/\xd1~\xe9\x1a[\x94t\x8dr\f\x90\xa9\x94\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdb}@7\b\x1fle\xf9Gk\x06\x87\xd9\u007f\x1e\x04M\n\x1d\x89#\xc7W\a+\x8d\xd0\x00\x00\xe0\x94\u06c8.\xac\xed\xd0\xef\xf2cQ\x1b1*\u06fcY\u01b8\xb2[\x8a\x01\xedO\xdez\"6\xb0\x00\x00\u07d4\u06d3q\xb3\fL\x84NY\xe0>\x92K\xe6\x06\xa98\xd1\xd3\x10\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u06e4ym\f\xebM:\x83k\x84\xc9o\x91\n\xfc\x10?[\xa0\x89\t\b\xf4\x93\xf77A\x00\x00\u07d4\u06ed\xc6\x1e\xd5\xf0F\n\u007f\x18\xe5\x1b/\xb2aM\x92d\xa0\xe0\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\u06f6\xacH@'\x04\x16B\xbb\xfd\x8d\x80\xf9\xd0\xc1\xcf3\xc1\xeb\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u06fc\xbby\xbfG\x9aB\xadq\xdb\u02b7{Z\u07ea\x87,X\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\xdb\xc1\xce\x0eI\xb1\xa7\x05\xd2. 7\xae\xc8x\xee\ru\xc7\x03\x89\r\x8drkqw\xa8\x00\x00\u07d4\xdb\xc1\xd0\xee+\xabS\x11@\xde\x13w\"\xcd6\xbd\xb4\xe4q\x94\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xdb\u015e\u0609s\u07ad1\b\x84\":\xf4\x97c\xc0P0\xf1\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u0794\xdb\xc6ie\xe4&\xff\x1a\xc8z\xd6\xebx\xc1\xd9Rq\x15\x8f\x9f\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xdb\xcb\xcdzW\ua7724\x9b\x87\x8a\xf3K\x1a\xd6B\xa7\xf1\u0449\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xdb\xd5\x1c\xdf,;\xfa\xcd\xff\x10b!\xde.\x19\xadmB\x04\x14\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xdb\xd7\x1e\xfaK\x93\u0209\xe7e\x93\xde`\x9c;\x04\u02ef\xbe\b\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xdb\xf5\xf0a\xa0\xf4\x8e^ia\x879\xa7}.\xc1\x97h\xd2\x01\x89\b=lz\xabc`\x00\x00\u07d4\xdb\xf8\xb19g\xf5Q%'-\xe0V%6\xc4P\xbaVU\xa0\x89n\xf5x\xf0n\f\xcb\x00\x00\u07d4\xdb\xfb\x1b\xb4d\xb8\xa5\x8eP\r.\xd8\u0797,E\xf5\xf1\xc0\xfb\x89V\xbcu\xe2\xd61\x00\x00\x00\xe0\x94\xdc\x06~\xd3\xe1-q\x1e\xd4u\xf5\x15n\xf7\xe7\x1a\x80\xd94\xb9\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\xdc\b\u007f\x93\x90\xfb\x9e\x97j\xc2:\xb6\x89TJ\tB\xec !\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xdc\x1e\xb9\xb6\xe6CQ\xf5d$P\x96E\xf8>y\xee\xe7l\xf4\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xdc\x1f\x19ya_\b!@\xb8\xbbx\xc6{'\xa1\x94'\x13\xb1\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\xdc#\xb2`\xfc\xc2n}\x10\xf4\xbd\x04J\xf7\x94W\x94`\xd9\u0689\x1b\x1bk\u05efd\xc7\x00\x00\u07d4\xdc)\x11\x97E\xd23s \xdaQ\xe1\x91\x00\xc9H\u0640\xb9\x15\x89\b\xacr0H\x9e\x80\x00\x00\u07d4\xdc-\x15\xa6\x9fk\xb3;$j\xef@E\aQ\xc2\xf6uj\u0489l4\x10\x80\xbd\x1f\xb0\x00\x00\u07d4\xdc=\xaeY\xed\x0f\xe1\x8bXQ\x1eo\xe2\xfbi\xb2\x19h\x94#\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xdc?\x0evr\xf7\x1f\xe7R[\xa3\v\x97U\x18: \xb9\x16j\x8a\x02\b\x9c\xf5{[>\x96\x80\x00\xe0\x94\xdcCE\u0581.\x87\n\xe9\fV\x8cg\xd2\xc5g\u03f4\xf0<\x8a\x01k5-\xa5\xe0\xed0\x00\x00\u07d4\xdcD'[\x17\x15\xba\xea\x1b\x03EsZ)\xacB\xc9\xf5\x1bO\x89?\x19\xbe\xb8\xdd\x1a\xb0\x00\x00\u07d4\xdcF\xc13%\u034e\xdf\x020\xd0h\x89d\x86\xf0\a\xbfN\xf1\x89Hz\x9a0E9D\x00\x00\u07d4\xdcQ\xb2\u071d$z\x1d\x0e[\xc3l\xa3\x15oz\xf2\x1f\xf9\xf6\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xdcS\x05\xb4\x02\n\x06\xb4\x9de||\xa3L5\xc9\x1c_,V\x8a\x01}\xf6\xc1\r\xbe\xba\x97\x00\x00\u07d4\xdcW4[8\xe0\xf0g\u0263\x1d\x9d\xea\xc5'Z\x10\x94\x93!\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xdcWG}\xaf\xa4/p\\\u007f\xe4\x0e\xae\x9c\x81un\x02%\xf1\x89\x1b\x1b\x81(\xa7An\x00\x00\u07d4\xdc_Z\xd6c\xa6\xf2c2}d\xca\xc9\xcb\x13=,\x96\x05\x97\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdcp:_7\x94\xc8Ml\xb3TI\x18\xca\xe1J5\u00fdO\x89dI\xe8NG\xa8\xa8\x00\x00\xe0\x94\xdcs\x8f\xb2\x17\u03ad/iYL\b\x17\r\xe1\xaf\x10\xc4\x19\xe3\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xdcv\xe8[\xa5\v\x9b1\xec\x1e& \xbc\xe6\xe7\xc8\x05\x8c\x0e\xaf\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\u0703\xb6\xfd\rQ!1 G\a\xea\xf7.\xa0\xc8\u027e\xf9v\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u070c)\x12\xf0\x84\xa6\u0444\xaasc\x85\x13\u033c2n\x01\x02\x89F3\xbc6\xcb\xc2\xdc\x00\x00\u07d4\u0711\x1c\xf7\xdc]\u04016Vg\x05(\xe93\x8eg\x03G\x86\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0730;\xfal\x111#NV\xb7\xea|Or\x14\x87Tkz\x89Hz\x9a0E9D\x00\x00\xe0\x94\u0736M\xf47X\xc7\u03d7O\xa6`HO\xbbq\x8f\x8cg\xc1\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xdc\xc5-\x8f\x8d\x9f\xc7B\xa8\xb8'g\xf0US\x87\xc5c\xef\xff\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xdc\xcb7\x0e\u058a\xa9\"(0C\xef|\xad\x1b\x9d@?\xc3J\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xdc\u0324 E\xec>\x16P\x8b`?\xd96\xe7\xfd}\xe5\xf3j\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xdc\xd1\fU\xbb\x85OuD4\xf1!\x9c,\x9a\x98\xac\xe7\x9f\x03\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\xdc\u057c\xa2\x00S\x95\xb6u\xfd\xe5\x03VY\xb2k\xfe\xfcI\xee\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xdc\u06fdN&\x04\xe4\x0e\x17\x10\xccg0(\x9d\xcc\xfa\u04c9-\x89\xf9]\xd2\xec'\xcc\xe0\x00\x00\u07d4\xdc\xe3\f1\xf3\xcafr\x1e\xcb!<\x80\x9a\xabV\x1d\x9bR\xe4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdc\xf39eS\x13\x80\x161h\xfc\x11\xf6~\x89\xc6\xf1\xbc\x17\x8a\x89\x12'v\x854\x06\xb0\x80\x00\u07d4\xdc\xf6\xb6W&n\x91\xa4\xda\xe6\x03=\xda\xc1S2\u074d+4\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xdc\xf9q\x9b\xe8|oFum\xb4\x89\x1d\xb9\xb6\x11\xd2F\x9cP\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xdc\xff\xf3\xe8\xd2<*4\xb5k\u0473\xbdE\u01d3tC\"9\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xdd\x04\xee\xe7N\v\xf3\f?\x8dl,\u007fR\xe0Q\x92\x10\u07d3\x89\x04V9\x18$O@\x00\x00\xe0\x94\xdd&\xb4)\xfdC\xd8N\xc1y\x82S$\xba\u057f\xb9\x16\xb3`\x8a\x01\x16\xbf\x95\xbc\x842\x98\x00\x00\u07d4\xdd*#:\xde\xdef\xfe\x11&\xd6\xc1h#\xb6*\x02\x1f\xed\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xdd+\u07e9\x17\xc1\xf3\x10\xe6\xfa5\xaa\x8a\xf1i9\xc23\xcd}\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xdd5\xcf\xdb\u02d93\x95Sz\xec\xc9\xf5\x90\x85\xa8\xd5\u0776\xf5\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xddG\x18\x9a>d9qg\xf0b\x0eHEe\xb7b\xbf\xbb\xf4\x89dI\xe8NG\xa8\xa8\x00\x00\u07d4\xddM\xd6\xd3`3\xb0co\u030d\t8`\x9fM\xd6OJ\x86\x89\x03@\xaa\xd2\x1b;p\x00\x00\u07d4\xddO_\xa2\x11\x1d\xb6\x8fk\xde5\x89\xb60)9[i\xa9-\x89\b\x96=\xd8\xc2\xc5\xe0\x00\x00\xe0\x94\xddc\x04/%\xed2\x88J\xd2n:\xd9Y\xeb\x94\xea6\xbfg\x8a\x04\x84\xd7\xfd\xe7\u0553\xf0\x00\x00\u07d4\xdde\xf6\xe1qc\xb5\xd2\x03d\x1fQ\xcc{$\xb0\x0f\x02\xc8\xfb\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xddl\x06!\x93\xea\xc2=/\xdb\xf9\x97\xd5\x06:4k\xb3\xb4p\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xdd{\u0366Y$\xaa\xa4\x9b\x80\x98J\xe1su\x02X\xb9(G\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xdd\u007f\xf4A\xbao\xfe6q\xf3\xc0\u06bb\xff\x18#\xa5\x043p\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u0742T\x12\x1an\x94/\xc9\b(\xf2C\x1fQ\x1d\xad\u007f2\u6263\x9b)\xe1\xf3`\xe8\x00\x00\xe0\x94\u074a\xf9\xe7vR#\xf4DoD\xd3\xd5\t\x81\x9a==\xb4\x11\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\u0755\xdb\xe3\x0f\x1f\x18w\xc5\xddv\x84\xae\xef0*\xb6\x88Q\x92\x8a\x01\xc5\xd8\xd6\xeb>2P\x00\x00\xe0\x94\u0756|L_\x8a\xe4~&o\xb4\x16\xaa\u0456N\xe3\xe7\xe8\u00ca\x01\xa4 \xdb\x02\xbd}X\x00\x00\u07d4\u075bHZ;\x1c\xd3:j\x9cb\xf1\xe5\xbe\xe9'\x01\x85m%\x89\f3\x83\xed\x03\x1b~\x80\x00\xe0\x94\u0763q\xe6\x00\xd3\x06\x88\xd4q\x0e\b\x8e\x02\xfd\xf2\xb9RM_\x8a\x01w\"J\xa8D\xc7 \x00\x00\u07d4\u0764\xed*X\xa8\xdd \xa72u4{X\rq\xb9[\xf9\x9a\x89\x15\xa1<\xc2\x01\xe4\xdc\x00\x00\xe0\x94\u0764\xff}\xe4\x91\u0187\xdfEt\xdd\x1b\x17\xff\x8f$k\xa3\u044a\x04&\x84\xa4\x1a\xbf\xd8@\x00\x00\u07d4\u076bkQ\xa9\x03\v@\xfb\x95\xcf\vt\x8a\x05\x9c$\x17\xbe\u01c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94\u076bu\xfb/\xf9\xfe\u02c8\xf8\x94vh\x8e+\x00\xe3g\xeb\xf9\x8a\x04\x1b\xad\x15^e\x12 \x00\x00\xe0\x94\u076b\xf1<<\x8e\xa4\xe3\xd7=x\xecqz\xfa\xfaC\x0eTy\x8a\b\xcf#\xf9\t\xc0\xfa\x00\x00\x00\u07d4\u076c1*\x96UBj\x9c\f\x9e\xfa?\xd8%Y\xefE\x05\xbf\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\u076ck\xf4\xbb\xdd}Y}\x9chm\x06\x95Y;\xed\xcc\xc7\xfa\x89.\xe4IU\b\x98\xe4\x00\x00\xe0\x94\u077d+\x93,v;\xa5\xb1\xb7\xae;6.\xac>\x8d@\x12\x1a\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\u077d\xdd\x1b\xbd8\xff\xad\xe00]0\xf0 (\xd9.\x9f:\xa8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\u077e\xe6\xf0\x94\xea\xe64 \xb0\x03\xfbGW\x14*\xeal\xd0\xfd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdd\u059c[\x9b\xf5\xebZ9\xce\xe7\xc34\x1a\x12\r\x97?\xdb4\x89k\xc1K\x8f\x8e\x1b5\x00\x00\xe0\x94\xdd\xdd{\x9en\xab@\x9b\x92&:\xc2r\u0680\x1bfO\x8aW\x8ai\xe1\r\xe7fv\u0400\x00\x00\u07d4\xdd\xe6p\xd0\x169fuv\xa2-\xd0]2F\xd6\x1f\x06\xe0\x83\x89\x01s\x17\x90SM\xf2\x00\x00\xe0\x94\xdd\xe7zG@\xba\b\xe7\xf7?\xbe:\x16t\x91)1t.\xeb\x8a\x044\xfeMC\x82\xf1\u0500\x00\u07d4\xdd\xe8\xf0\xc3\x1bt\x15Q\x1d\xce\xd1\xcd}F2>K\xd1\"2\x89WG=\x05\u06ba\xe8\x00\x00\u07d4\xdd\xe9i\xae\xf3N\xa8z\u0099\xb7Y~)+J\x01U\u030a\x89\x102\xf2YJ\x01s\x80\x00\u07d4\xdd\xf0\xcc\xe1\xfe\x99m\x91v5\xf0\a\x12\xf4\x05 \x91\xdf\xf9\xea\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xdd\xf3\xadv58\x10\xbej\x89\xd71\xb7\x87\xf6\xf1q\x88a+\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xdd\xf5\x81\n\x0e\xb2\xfb.22;\xb2\u0255\t\xab2\x0f$\xac\x8a\x03\xca\\f\u067cD0\x00\x00\xe0\x94\xdd\xf9\\\x1e\x99\xce/\x9fV\x98\x05|\x19\xd5\xc9@'\xeeJn\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u0794\xdd\xfa\xfd\xbc|\x90\xf12\x0eT\xb9\x8f7F\x17\xfb\xd0\x1d\x10\x9f\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\xdd\xfc\xca\x13\xf94\xf0\u03fe#\x1d\xa109\xd7\x04u\xe6\xa1\u040968\"\x16`\xa5\xaa\x80\x00\u07d4\xde\x02~\xfb\xb3\x85\x03\"n\xd8q\t\x9c\xb3\v\xdb\x02\xaf\x135\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xde\x06\xd5\xeawzN\xb1G^`]\xbc\xbfCDN\x807\xea\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\xde\a\xfb[zFN;\xa7\xfb\xe0\x9e\x9a\xcb'\x1a\xf53\x8cX\x89\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\xde\x11!\x82\x9c\x9a\b(@\x87\xa4?\xbd/\xc1\x14*23\xb4\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xde\x17kR\x84\xbc\xee:\x83\x8b\xa2Og\xfc|\xbfg\u05ce\xf6\x89\x02\t\xce\b\xc9b\xb0\x00\x00\u07d4\xde!\"\x93\xf8\xf1\xd21\xfa\x10\xe6\tG\rQ,\xb8\xff\xc5\x12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xde0\xe4\x9eZ\xb3\x13!M/\x01\u072b\u0389@\xb8\x1b\x1cv\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xde3\xd7\b\xa3\xb8\x9e\x90\x9e\xafe;0\xfd\u00e5\xd5\u0334\xb3\x89\t\x9c\x88\"\x9f\xd4\xc2\x00\x00\u07d4\xde7B\x99\xc1\xd0}ySs\x85\x19\x0fD.\xf9\xca$\x06\x1f\x89\a?u\u0460\x85\xba\x00\x00\u07d4\xdeB\xfc\xd2L\xe4#\x93\x830CgY_\x06\x8f\fa\a@\x89\x02r*p\xf1\xa9\xa0\x00\x00\u07d4\xdeP\x86\x8e\xb7\xe3\xc7\x197\xecs\xfa\x89\u074b\x9e\xe1\rE\xaa\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xdeU\xde\x04X\xf8P\xb3~Mx\xa6A\xdd.\xb2\u074f8\u0389\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xde[\x00_\xe8\u06ae\x8d\x1f\x05\xde>\xda\x04 f\xc6\xc4i\x1c\x89;\xa1\x91\v\xf3A\xb0\x00\x00\u07d4\xdea-\a$\xe8N\xa4\xa7\xfe\xaa=!B\xbd^\xe8-2\x01\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xdem61\x06\xccb8\xd2\xf0\x92\xf0\xf07!6\xd1\xcdP\u018a\x01!\xeah\xc1\x14\xe5\x10\x00\x00\u07d4\xde}\xee\"\x0f\x04W\xa7\x18}V\xc1\xc4\x1f.\xb0\n\xc5`!\x89\"%\xf3\x9c\x85\x05*\x00\x00\u07d4\u0782\u030dJ\x1b\xb1\xd9CC\x92\x96[>\x80\xba\xd3\xc0=O\x89P\x18nu\u0797\xa6\x00\x00\u07d4\u0797\xf43\a\x00\xb4\x8cImC|\x91\xca\x1d\xe9\u0130\x1b\xa4\x89\x9d\xcc\x05\x15\xb5n\f\x00\x00\u07d4\u079e\xffLy\x88\x11\xd9h\xdc\xcbF\r\x9b\x06\x9c\xf3\x02x\xe0\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\u07b1\xbc4\xd8mJM\xde%\x80\u063e\xaf\aN\xb0\xe1\xa2D\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\u07b2I]j\xca{*j-\x13\x8bn\x1aB\xe2\xdc1\x1f\u0749lk\x93[\x8b\xbd@\x00\x00\u07d4\u07b9rTGL\r/Zyp\xdc\xdb/R\xfb\x10\x98\xb8\x96\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u07b9\xa4\x9aC\x870 \xf0u\x91\x85\xe2\v\xbbL\U000c1ecf\x89\vx\xed\xb0\xbf.^\x00\x00\u07d4\u07bb\u0743\x1e\x0f \xaen7\x82R\xde\xcd\xf9/|\xf0\xc6X\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xde\xc3\xee\xc2d\nu,Fn+~~\u616f\xe9\xacA\xf4\x89G\u0257SYk(\x80\x00\u07d4\xde\xc8#s\xad\xe8\xeb\xcf*\xcbo\x8b\xc2AM\u05eb\xb7\rw\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xde\u0221\xa8\x98\xf1\xb8\x95\xd80\x1f\xe6J\xb3\xad]\xe9A\xf6\x89\x89*\xb4\xf6~\x8as\x0f\x80\x00\u07d4\xde\u025e\x97/\xcaqwP\x8c\x8e\x1aG\xac\"\xd7h\xac\xab|\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xde\xd8w7\x84\a\xb9Nx\x1cN\xf4\xaf|\xfc[\xc2 \xb5\x16\x89\x141y\xd8i\x11\x02\x00\x00\u07d4\xde\xe9B\xd5\xca\xf5\xfa\xc1\x14!\xd8k\x01\vE\x8e\\9)\x90\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xde\xee&\x89\xfa\x90\x06\xb5\x9c\xf2\x85#}\xe5;:\u007f\xd0\x148\x89\x18ey\xf2\x9e %\x00\x00\u07d4\xde\xfd\xdf\u055b\x8d,\x15N\xec\xf5\xc7\xc1g\xbf\v\xa2\x90]>\x89\x05\x12\xcb^&GB\x00\x00\u07d4\xde\xfe\x91A\xf4pE\x99\x15\x9d{\"=\xe4+\xff\xd8\x04\x96\xb3\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xdf\t\x8f^N=\xff\xa5\x1a\xf27\xbd\xa8e,Os\ud726\x89\x1b6\xa6DJ>\x18\x00\x00\xe0\x94\xdf\r\ba{\xd2R\xa9\x11\u07cb\xd4\x1a9\xb8=\u07c0\x96s\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xdf\x0f\xf1\xf3\xd2z\x8e\xc9\xfb\x8fk\f\xb2T\xa6;\xba\x82$\xa5\x89\xec\xc5 )E\xd0\x02\x00\x00\u07d4\xdf\x1f\xa2\xe2\x0e1\x98^\xbe,\x0f\f\x93\xb5L\x0f\xb6z&K\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xdf!\x1c\xd2\x12\x88\xd6\xc5o\xaef\xc3\xffTb]\u0531T'\x89\x87\x86\xcdvN\x1f,\x00\x00\u07d4\xdf#k\xf6\xab\xf4\xf3)7\x95\xbf\f(q\x8f\x93\u3c73k\x89Hz\x9a0E9D\x00\x00\u07d4\xdf1\x02_VI\xd2\xc6\xee\xa4\x1e\u04fd\xd3G\x1ay\x0fu\x9a\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xdf7\xc2.`:\xed\xb6\nbrS\xc4}\x8b\xa8f\xf6\xd9r\x8a\x05\x15\n\xe8J\x8c\xdf\x00\x00\x00\u07d4\xdf;r\u017dq\u0501N\x88\xa6#!\xa9=@\x11\xe3W\x8b\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xdf?W\xb8\xeed4\xd0G\"=\xeft\xb2\x0fc\xf9\xe4\xf9U\x89\r\x94b\xc6\xcbKZ\x00\x00\u07d4\xdfD\xc4\u007f\xc3\x03\xacv\xe7O\x97\x19L\xcag\xb5\xbb<\x02?\x89 \t\xc5\u023fo\xdc\x00\x00\u07d4\xdfG\xa6\x1brSQ\x93\xc5a\xcc\xccu\xc3\xf3\xce\b\x04\xa2\x0e\x89\x15\x93\\\vN=x\x00\x00\u07d4\xdfG\xa8\xef\x95\xf2\xf4\x9f\x8eoX\x18AT\x14]\x11\xf7'\x97\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\xdfS\x003F\xd6\\^zdk\xc04\xf2\xb7\xd3/\xcb\xe5j\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xdfW5:\xaf\xf2\xaa\xdb\n\x04\xf9\x01N\x8d\xa7\x88N\x86X\x9c\x89\bH\x86\xa6nO\xb0\x00\x00\u07d4\xdf`\xf1\x8c\x81*\x11\xedN'v\xe7\xa8\x0e\xcf^S\x05\xb3\u05890\xca\x02O\x98{\x90\x00\x00\u07d4\xdfd\x85\xc4)z\xc1R\xb2\x89\xb1\x9d\xde2\xc7~\xc4\x17\xf4}\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xdff\n\x91\u06b9\xf70\xf6\x19\rP\xc89\x05aP\aV\u0289lk\x93[\x8b\xbd@\x00\x00\u07d4\xdfn\xd6\x00jj\xbe\x88n\xd3=\x95\xa4\xde(\xfc\x12\x189'\x891T\xc9r\x9d\x05x\x00\x00\u07d4\u07c5\x10y>\xee\x81\x1c-\xab\x1c\x93\xc6\xf4G?0\xfb\xef[\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u07cdH\xb1\xeb\a\xb3\xc2\x17y\x0el-\xf0M\xc3\x19\xe7\xe8H\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\u07e6\xb8\xb8\xad1\x84\xe3W\xda()Q\u05d1a\u03f0\x89\xbc\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\u07ef1\xe6\"\xc0=\x9e\x18\xa0\u0778\xbe`\xfb\xe3\xe6a\xbe\n\x8a\x02\x1e\x17\x1a>\xc9\xf7,\x00\x00\u07d4\u07f1bn\xf4\x8a\x1d}uR\xa5\xe0)\x8f\x1f\xc2:;H-\x89\\\xe8\x95\u0754\x9e\xfa\x00\x00\xe0\x94\u07f4\u052d\xe5/\u0301\x8a\xccz,k\xb2\xb0\x02$e\x8fx\x8a\x01\xa4 \xdb\x02\xbd}X\x00\x00\u07d4\u07fdB2\xc1|@z\x98\r\xb8\u007f\xfb\u036060\xe5\xc4Y\x89\x1d\xfc\u007f\x92I#S\x00\x00\u07d4\xdf\xcb\xdf\tEN\x1a^J@\xd3\xee\xf7\xc5\xcf\x1c\xd3\u0794\x86\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xdf\xdb\xce\xc1\x01K\x96\xda!X\xcaQ>\x9c\x8d;\x9a\xf1\xc3\u0409lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xdf\xde\xd2WK'\xd1a:}\x98\xb7\x15\x15\x9b\r\x00\xba\xab(\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xdf\xdfC9P\x8b\x0fnZ\xb1\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe0\x06\x04b\xc4\u007f\xf9g\x9b\xae\xf0qY\xca\xe0\x8c)\xf2t\xa9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\r\x15;\x106\x91C\xf9\u007fT\xb8\xd4\xca\"\x9e\xb3\xe8\xf3$\x89\b=lz\xabc`\x00\x00\u07d4\xe0\x12\xdbE8'\xa5\x8e\x16\xc16V\b\xd3n\xd6Xr\x05\a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\x15G\xbaB\xfc\xaf\xaf\x93\x93\x8b\xec\xf7i\x9ft)\n\xf7O\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\x16\xdc\x13\x8e%\x81[\x90\xbe?\xe9\xee\xe8\xff\xb2\xe1\x05bO\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe0\x18Y\xf2B\xf1\xa0\xec`/\xa8\xa3\xb0\xb5v@\xec\x89\a^\x89\x1e\x16,\x17{\xe5\xcc\x00\x00\xe0\x94\xe0 \xe8cb\xb4\x87u(6\xa6\xde\v\xc0,\xd8\u061a\x8bj\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xe0#\xf0\x9b(\x87a,|\x9c\xf1\x98\x8e::`+3\x94\u0249lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0'\"\x13\xe8\xd2\xfd>\x96\xbdb\x17\xb2KK\xa0\x1bapy\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe0+t\xa4v(\xbe1[\x1fv\xb3\x15\x05J\xd4J\xe9qo\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xe02 \u0197\xbc\u048f&\xef\vt@J\x8b\xeb\x06\xb2\xba{\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xe05/\u07c1\x9b\xa2e\xf1L\x06\xa61\\J\xc1\xfe\x13\x1b.\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe08\x8a\xed\xdd?\xe2\xadV\xf8WH\xe8\x0eq\n4\xb7\xc9.\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe0<\x00\xd0\x03\x88\xec\xbfO&=\n\xc7x\xbbA\xa5z@\u064966\xc9yd6t\x00\x00\u07d4\xe0I \xdcn\xcc\x1dn\xcc\bO\x88\xaa\n\xf5\u06d7\xbf\x89:\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\xe0Ir\xa8<\xa4\x11+\xc8q\xc7-J\xe1al/\a(\u06c9\x0e\x81\xc7\u007f)\xa3/\x00\x00\u07d4\xe0O\xf5\xe5\xa7\u2bd9]\x88W\xce\x02\x90\xb5:+\x0e\xda]\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xe0P)\xac\xeb\axg[\xef\x17A\xab,\u0493\x1e\xf7\xc8K\x8a\x01\x0f\r\xba\xe6\x10\tR\x80\x00\u07d4\xe0V\xbf?\xf4\x1c&%o\xefQqf\x12\xb9\u04da\u0799\x9c\x89\x05k\xe7W\xa1.\n\x80\x00\u07d4\xe0a\xa4\xf2\xfcw\xb2\x96\u045a\xda#\x8eI\xa5\u02ce\xcb\xfap\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xe0f>\x8c\xd6g\x92\xa6A\xf5nP\x03f\x01G\x88\x0f\x01\x8e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0f\x8f\xa8,\x14\xd6\xe8\xd9:S\x11>\xf2\x86/\xa8\x15\x81\xbc\x89//9\xfclT\x00\x00\x00\u07d4\xe0i\xc0\x173R\xb1\v\xf6\x83G\x19\xdb[\xed\x01\xad\xf9{\xbc\x89\x01\x064\xf8\xe52;\x00\x00\u07d4\xe0l)\xa8\x15\x17\xe0\u0507\xb6\u007f\xb0\xb6\xaa\xbcOW6\x83\x88\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\xe0l\xb6)G\x04\xee\xa7C|/\xc3\xd3\as\xb7\xbf8\x88\x9a\x89\x01\x16\xdc:\x89\x94\xb3\x00\x00\u07d4\xe0q7\xae\r\x11m\x0353\xc4\uad16\xf8\xa9\xfb\tV\x9c\x89K\xe4\xe7&{j\xe0\x00\x00\xe0\x94\xe0v\xdb0\xabHoy\x19N\xbb\xc4]\x8f\xab\x9a\x92B\xf6T\x8a\x01\x06`~4\x94\xba\xa0\x00\x00\u07d4\xe0~\xbb\xc7\xf4\xdaAnB\xc8\xd4\xf8B\xab\xa1b3\xc1%\x80\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\x81\xca\x1fH\x82\xdb`C\u0569\x19\a\x03\xfd\xe0\xab;\xf5m\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe0\x83\xd3Hc\xe0\xe1\u007f\x92ky(\xed\xff1~\x99\x8e\x9cK\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe0\x8b\x9a\xbak\xd9\u048b\xc2\x05gy\xd2\xfb\xf0\xf2\x85Z=\x9d\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\x8b\u009c+H\xb1i\xff+\xdc\x16qLXnl\xb8\\\u03c9\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe0\x8c`11\x06\xe3\xf93O\xe6\xf7\xe7bM!\x110\xc0w\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xe0\x9ch\xe6\x19\x98\xd9\xc8\x1b\x14\xe4\xee\x80+\xa7\xad\xf6\xd7L\u06c9\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xe0\x9f\xeauZ\xee\x1aD\xc0\xa8\x9f\x03\xb5\u07b7b\xba3\x00o\x89;\xa2\x89\xbc\x94O\xf7\x00\x00\xe0\x94\xe0\xa2T\xac\t\xb9r[\xeb\xc8\xe4`C\x1d\xd0s.\xbc\xab\xbf\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xe0\xaai6UU\xb7?(#3\xd1\xe3\f\x1b\xbd\a(T\xe8\x8a\x01{x\x83\xc0i\x16`\x00\x00\u07d4\xe0\xba\u064e\ue598\xdb\xf6\xd7`\x85\xb7\x92=\xe5uN\x90m\x89\t\r\x97/22<\x00\x00\u07d4\xe0\u012b\x90r\xb4\xe6\xe3eJI\xf8\xa8\xdb\x02jK3\x86\xa9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\u0380\xa4a\xb6H\xa5\x01\xfd\v\x82F\x90\u0206\x8b\x0eM\xe8\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe0\xcfi\x8a\x053'\xeb\xd1k}w\x00\t/\xe2\xe8T$F\x89\x05*4\u02f6\x1fW\x80\x00\xe0\x94\xe0\xd21\xe1D\xec\x91\a8l|\x9b\x02\xf1p,\xea\xa4\xf7\x00\x8a\x01\x0f\r\xba\xe6\x10\tR\x80\x00\u07d4\xe0\xd7kqf\xb1\xf3\xa1+@\x91\xee+)\u078c\xaa}\a\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xe0\xe0\xb2\xe2\x9d\xdes\xafu\x98~\xe4Dl\x82\x9a\x18\x9c\x95\xbc\x89\b\x13\xcaV\x90m4\x00\x00\xe0\x94\xe0\xe9xu=\x98/\u007f\x9d\x1d#\x8a\x18\xbdH\x89\xae\xfeE\x1b\x8a\x02\r\u058a\xaf2\x89\x10\x00\x00\u07d4\xe0\xf3r4|\x96\xb5_}C\x06\x03K\xeb\x83&o\xd9\tf\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe0\xf9\x03\xc1\xe4\x8a\xc4!\xabHR\x8f=J&H\b\x0f\xe0C\x897\b\xba\xed=h\x90\x00\x00\u07d4\xe0\xff\v\xd9\x15D9\u0125\xb7#>)\x1d}\x86\x8a\xf5?3\x89\x15y!jQ\xbb\xfb\x00\x00\xe0\x94\xe1\n\xc1\x9cTo\xc2T|a\xc19\xf5\xd1\xf4Zff\u0570\x8a\x01\x02\xdao\xd0\xf7:<\x00\x00\xe0\x94\xe1\fT\x00\x88\x11?\xa6\xec\x00\xb4\xb2\u0202O\x87\x96\xe9n\u010a2\x0fE\t\xab\x1e\xc7\xc0\x00\x00\xe0\x94\xe1\x17:$})\xd8#\x8d\xf0\x92/M\xf2Z\x05\xf2\xafw\u00ca\bx\xc9]V\x0f0G\x80\x00\xe0\x94\xe1 >\xb3\xa7#\xe9\x9c\" \x11|\xa6\xaf\xebf\xfaBOa\x8a\x02\x00\uf49e2V\xfe\x00\x00\xe0\x94\xe11\xf8~\xfc^\xf0~C\xf0\xf2\xf4\xa7G\xb5Q\xd7P\xd9\xe6\x8a\x04<%\xe0\xdc\xc1\xbd\x1c\x00\x00\u07d4\xe13N\x99\x83y\xdf\xe9\x83\x17pby\x1b\x90\xf8\x0e\xe2-\x8d\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe15@\xec\xee\x11\xb2\x12\xe8\xb7u\u070eq\xf3t\xaa\xe9\xb3\xf8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe1;=+\xbf\u073c\x87r\xa23\x15rL\x14%\x16|V\x88\x897\xf3y\x14\x1e\xd0K\x80\x00\u07d4\xe1D=\xbd\x95\xccA#\u007fa:HEi\x88\xa0Oh2\x82\x89\xd8\xd8X?\xa2\xd5/\x00\x00\u07d4\xe1F\x17\xf6\x02%\x01\xe9~{>-\x886\xaaa\xf0\xff-\xba\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe1I\xb5rl\xafm^\xb5\xbf*\xccA\xd4\xe2\xdc2\x8d\u1089i*\xe8\x89p\x81\xd0\x00\x00\xe0\x94\xe1T\xda\xea\xdbTX8\xcb\u01aa\fUu\x19\x02\xf5(h*\x8a\x01\n\xfc\x1a\xde;N\xd4\x00\x00\u07d4\xe1l\xe3Ya\xcdt\xbdY\r\x04\u012dJ\x19\x89\xe0V\x91\u0189\a\xea(2uw\b\x00\x00\u07d4\xe1r\xdf\xc8\xf8\f\xd1\xf8\u03459\xdc&\b \x14\xf5\xa8\xe3\u8262\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xe1w\xe0\xc2\x01\xd35\xba9V\x92\x9cW\x15\x88\xb5\x1cR#\xae\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe1x\x12\xf6l^e\x94\x1e\x18lF\x92+n{/\x0e\xebF\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xe1\x80\u079e\x86\xf5{\xaf\xac\u05d0O\x98&\xb6\xb4\xb2c7\xa3\x89-\x04\x1dpZ,`\x00\x00\xe0\x94\xe1\x92H\x9b\x85\xa9\x82\xc1\x882F\xd9\x15\xb2)\xcb\x13 \u007f8\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xe1\x95\xbb\xc6,{tD\x04\x0e\xb9\x96#\x96Ovg\xb3v\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe2\x06\xfbs$\xe9\u07b7\x9e\x19\x904\x96\u0596\x1b\x9b\xe5f\x03\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xe2\aW\x8e\x1fM\u06cf\xf6\u0546{9X-q\xb9\x81*\u0149\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\xe2\b\x81*h@\x98\xf3\xdaN\xfej\xba%bV\xad\xfe?\xe6\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe2\tT\xd0\xf4\x10\x8c\x82\xd4\u0732\x14\x8d&\xbb\xd9$\xf6\xdd$\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xe2\v\xb9\xf3\x96d\x19\xe1K\xbb\xaa\xaag\x89\xe9$\x96\u03e4y\x89\xbb\xd8%\x03\aRv\x00\x00\u07d4\xe2\r\x1b\xcbq(m\xc7\x12\x8a\x9f\xc7\xc6\xed\u007fs8\x92\xee\xf5\x896d\xf8\xe7\xc2J\xf4\x00\x00\u0794\xe2\x19\x12\x15\x98?3\xfd3\xe2,\u0522I\x00T\xdaS\xfd\u0708\xdbD\xe0I\xbb,\x00\x00\u07d4\xe2\x19\x8c\x8c\xa1\xb3\x99\xf7R\x15a\xfdS\x84\xa7\x13/\xbaHk\x897\b\xba\xed=h\x90\x00\x00\xe0\x94\xe2\x1cw\x8e\xf2\xa0\xd7\xf7Q\xea\x8c\aM\x1f\x81\"C\x86>N\x8a\x01\x1f\xc7\x0e,\x8c\x8a\xe1\x80\x00\xe0\x94\xe2)\xe7F\xa8?,\xe2S\xb0\xb0>\xb1G$\x11\xb5~W\x00\x8a\x016\x9f\xb9a(\xacH\x00\x00\u07d4\xe2+ \xc7x\x94F;\xafwL\xc2V\u057d\u06ff}\xdd\t\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe20\xfe\x1b\xff\x03\x18m\x02\x19\xf1]LH\x1b}Y\xbe(j\x89\x01\xfdt\x1e\x80\x88\x97\x00\x00\u07d4\xe27\xba\xa4\xdb\u0252n2\xa3\xd8]\x12d@-T\xdb\x01/\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe2A\t\xbe/Q=\x87I\x8e\x92j(d\x99uO\x9e\u051e\x890\x0e\xa8\xad\x1f'\xca\x00\x00\u07d4\xe2Fh<\u025d\xb7\u0125+\u02ec\xaa\xb0\xb3/k\xfc\x93\u05c9lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe2Z\x16{\x03\x1e\x84am\x0f\x01?1\xbd\xa9]\xcccP\xb9\x8a\x02\x8c*\xaa\u0243\xd0]\u0187st\xa8\xf4F\xee\xe9\x89\n\xb6@9\x12\x010\x00\x00\u07d4\xe2\x8b\x06\"Y\xe9n\xeb<\x8dA\x04\x94?\x9e\xb3%\x89<\xf5\x89Hz\x9a0E9D\x00\x00\xe0\x94\u237c\x8e\xfd^Ajv.\xc0\xe0\x18\x86K\xb9\xaa\x83({\x8a\x051\xf2\x00\xab>\x03\n\x80\x00\u07d4\xe2\x90K\x1a\xef\xa0V9\x8bb4\xcb5\x81\x12\x88\xd76\xdbg\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\u274a\xe4R\xdc\xf3\xb6\xacd^c\x04\t8UQ\xfa\xae\n\x89\x04Z\r\xa4\xad\xf5B\x00\x00\u07d4\xe2\xbb\xf8FA\xe3T\x1fl3\xe6\xedh:cZp\xbd\xe2\xec\x89\x1bA<\xfc\xbfY\xb7\x80\x00\u07d4\xe2\xcf6\n\xa22\x9e\xb7\x9d+\xf7\xca\x04\xa2z\x17\xc52\xe4\u0609\x05\x87\x88\u02d4\xb1\xd8\x00\x00\u07d4\xe2\xdf#\xf6\xea\x04\xbe\xcfJ\xb7\x01t\x8d\xc0\x961\x84U\\\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xe2\xe1\\`\xdd8\x1e:K\xe2Pq\xab$\x9aL\\Rd\u0689\u007fk\u011b\x81\xb57\x00\x00\u07d4\xe2\xe2nN\x1d\xcf0\xd0H\xccn\u03ddQ\xec\x12\x05\xa4\xe9&\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xe2\xeei\x1f#~\xe6R\x9beW\xf2\xfc\xdd=\xcf\fY\xecc\x8a\x01'r\x9c\x14h| \x00\x00\u07d4\xe2\xef\xa5\xfc\xa7\x958\xce`h\xbf1\xd2\xc5\x16\xd4\xd5<\b\xe5\x89\a\x1c\xc4\b\xdfc@\x00\x00\xe0\x94\xe2\xef\u0429\xbc@~\xce\x03\xd6~\x8e\xc8\xe9\u0483\xf4\x8d*I\x8a\x02\x99\xb3;\xf9\u0144\xe0\x00\x00\u07d4\xe2\xf4\r5\x8f^?\xe7F>\xc7\x04\x80\xbd.\u04d8\xa7\x06;\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe2\xf98=X\x10\xea{C\x18+\x87\x04\xb6+'\xf5\x92]9\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe2\xff\x9e\xe4\xb6\xec\xc1AA\xcct\xcaR\xa9\xe7\xa2\xee\x14\xd9\b\x89K\xe4\xe7&{j\xe0\x00\x00\xe0\x94\xe3\x02\x12\xb2\x01\x1b\xb5k\xdb\xf1\xbc5i\x0f:N\x0f\xd9\x05\xea\x8a\x01\xb2\u07dd!\x9fW\x98\x00\x00\u07d4\xe3\x03\x16\u007f=I`\xfe\x88\x1b2\x80\n+J\xef\xf1\xb0\x88\u0509lk\x93[\x8b\xbd@\x00\x00\u07d4\xe3\x04\xa3/\x05\xa87btJ\x95B\x97o\xf9\xb7#\xfa1\xea\x89Ur\xf2@\xa3F \x00\x00\u07d4\xe3\bCR\x04y7d\xf5\xfc\xbee\xebQ\x0fZtJeZ\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe3\t\x97L\xe3\x9d`\xaa\xdf.ig2Q\xbf\x0e\x04v\n\x10\x89\r\xc5_\xdb\x17d{\x00\x00\u07d4\xe3\x1bN\xef\x18L$\xab\t\x8e6\xc8\x02qK\xd4t=\xd0\u0509\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe3!\xbbJ\x94j\xda\xfd\xad\xe4W\x1f\xb1\\\x00C\u04de\xe3_\x89Udu8+L\x9e\x00\x00\u07d4\xe3&<\xe8\xafm\xb3\xe4gXE\x02\xedq\t\x12^\xae\"\xa5\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe3+\x1cG%\xa1\x87TI\u93d7\x0e\xb3\xe5@b\xd1X\x00\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe3/\x95vmW\xb5\xcdK\x172\x89\u0587o\x9edU\x81\x94\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xe38@\u063c\xa7\u0698\xa6\xf3\u0416\xd8=\xe7\x8bp\xb7\x1e\xf8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe38\xe8Y\xfe.\x8c\x15UHH\xb7\\\xae\u0368w\xa0\xe82\x89a\xac\xff\x81\xa7\x8a\xd4\x00\x00\u07d4\xe3=\x98\x02 \xfa\xb2Y\xafj\x1fK8\xcf\x0e\xf3\xc6\xe2\xea\x1a\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe3=\xf4\u0380\u0336*v\xb1+\xcd\xfc\xec\xc4b\x89\x97:\xa9\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xe3?\xf9\x87T\x1d\xde\\\xde\u0a29m\xcc?3\xc3\xf2L\u008a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xe3A\v\xb7U|\xf9\x1dy\xfai\xd0\xdf\xea\n\xa0u@&Q\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe3Ad-@\u04af\xce.\x91\a\xc6py\xacz&`\bl\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe3TS\xee\xf2\xcc2\x89\x10CR\x8d\t\x84i\x80\x00\xe0\x94\xe5\x10\xd6y\u007f\xba=f\x93\x83Z\x84N\xa2\xadT\x06\x91\x97\x1b\x8a\x03\xae9\xd4s\x83\xe8t\x00\x00\u07d4\xe5\x14!\xf8\xee\"\x10\xc7\x1e\xd8p\xfea\x82v\u0215J\xfb\xe9\x89Hz\x9a0E9D\x00\x00\u07d4\xe5\x1e\xb8~\u007f\xb71\x1fR(\xc4y\xb4\x8e\u0247\x881\xacL\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5!V1\xb1BH\xd4Z%R\x96\xbe\xd1\xfb\xfa\x030\xff5\x89G\x03\xe6\xebR\x91\xb8\x00\x00\xe0\x94\xe5(\xa0\xe5\xa2g\xd6g\xe99:e\x84\xe1\x9b4\u071b\xe9s\x8a\x01/\x93\x9c\x99\xed\xab\x80\x00\x00\u07d4\xe54%\xd8\xdf\x1f\x11\xc3A\xffX\xae_\x148\xab\xf1\xcaS\u03c9\x11t\xa5\xcd\xf8\x8b\xc8\x00\x00\u07d4\xe5No\x9c\xffV\xe1\x9cF\x1e\xb4T\xf9\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe5A\x02SM\xe8\xf2>\xff\xb0\x93\xb3\x12B\xad;#?\xac\xfd\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xe5E\xee\x84\xeaH\xe5d\x16\x1e\x94\x82\u055b\xcf@j`,\xa2\x89dI\xe8NG\xa8\xa8\x00\x00\u07d4\xe5H\x1a\u007f\xedB\xb9\x01\xbb\xed x\x9b\u052d\xe5\r_\x83\xb9\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5Y\xb5\xfd3{\x9cUr\xa9\xbf\x9e\x0f%!\xf7\xd4F\xdb\xe4\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe5\\\x80R\n\x1b\x0fu[\x9a,\xd3\xce!Ov%e>\x8a\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe5mC\x13$\xc9)\x11\xa1t\x9d\xf2\x92p\x9c\x14\xb7ze\u034a\x01\xbc\x85\xdc*\x89\xbb \x00\x00\u07d4\xe5})\x95\xb0\xeb\xdf?<\xa6\xc0\x15\xeb\x04&\r\xbb\x98\xb7\u0189lk\x93[\x8b\xbd@\x00\x00\u07d4\u51f1j\xbc\x8at\b\x1e6\x13\xe1CB\xc03u\xbf\bG\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\x89\xfav\x98M\xb5\xec@\x04\xb4n\u8954\x92\xc3\aD\u0389\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\xe5\x8d\xd228\xeen\xa7\xc2\x13\x8d8]\xf5\x00\xc3%\xf3v\xbe\x89b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xe5\x95?\xeaIq\x04\xef\x9a\xd2\xd4\xe5\x84\x1c'\x1f\a5\x19\u0089&)\xf6n\fS\x00\x00\x00\xe0\x94\u5587\x97F\x8e\xf7g\x10\x1bv\x1dC\x1f\xce\x14\xab\xff\u06f4\x8a\x01\xb3\xd9i\xfaA\x1c\xa0\x00\x00\u07d4\xe5\x97\xf0\x83\xa4i\xc4Y\x1c=+\x1d,w'\x87\xbe\xfe'\xb2\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\u07d4\xe5\x9b;\xd3\x00\x89?\x97#>\xf9G\xc4or\x17\xe3\x92\xf7\xe9\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe5\xa3e4<\xc4\xeb\x1ew\x03h\xe1\xf1\x14Jw\xb82\xd7\xe0\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe5\xa3\xd7\xeb\x13\xb1\\\x10\x01w#m\x1b\xeb0\xd1~\xe1T \x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\xaa\v\x83;\xb9\x16\xdc\x19\xa8\xddh?\x0e\xde$\x1d\x98\x8e\xba\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\u5def\x14i\x86\xc0\xff\x8f\x85\xd2.l\xc34\a}\x84\xe8$\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\xb8&\x19l\x0e\x1b\xc1\x11\x9b\x02\x1c\xf6\xd2Y\xa6\x10\u0256p\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe5\xb9o\u026c\x03\xd4H\xc1a:\xc9\x1d\x15\x97\x81E\xdb\xdf\u0449\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\u5e40\u048e\xec\xe2\xc0o\xcal\x94s\x06\x8b7\u0526\xd6\xe9\x89%\xaf\u058c\xac+\x90\x00\x00\u07d4\u5eb4\xf0\xaf\u0629\u0463\x81\xb4Wa\xaa\x18\xf3\xd3\xcc\xe1\x05\x89Q\xbf\xd7\xc18x\xd1\x00\x00\u07d4\xe5\xbc\u020c;%on\xd5\xfeU\x0eJ\x18\x19\x8b\x943V\xad\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\xbd\xf3OL\xccH>L\xa50\xcc|\xf2\xbb\x18\xfe\xbe\x92\xb3\x89\x06\xd85\xa1\v\xbc\xd2\x00\x00\u07d4\xe5\u0713I\xcbR\xe1a\x19a\"\u03c7\xa3\x896\xe2\xc5\u007f4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\xe38\x00\xa1\xb2\xe9k\xde\x101c\n\x95\x9a\xa0\a\xf2nQ\x89Hz\x9a0E9D\x00\x00\u07d4\xe5\xe3~\x19@\x8f,\xfb\xec\x834\x9d\u0501S\xa4\xa7\x95\xa0\x8f\x89\u3bb5sr@\xa0\x00\x00\u07d4\xe5\xed\xc7>bo]4A\xa4U9\xb5\xf7\xa3\x98\u0153\xed\xf6\x89.\xe4IU\b\x98\xe4\x00\x00\u07d4\xe5\xed\xf8\x12?$\x03\xce\x1a\x02\x99\xbe\xcfz\xactM\a_#\x89\n\xdaUGK\x814\x00\x00\u07d4\xe5\xf8\xefm\x97\x066\xb0\u072aO \x0f\xfd\xc9\xe7Z\xf1t\x1c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe5\xfb1\xa5\xca\xeej\x96\xde9;\xdb\xf8\x9f\xbee\xfe\x12[\xb3\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe5\xfb\xe3I\x84\xb67\x19o3\x1cg\x9d\f\fG\xd84\x10\xe1\x89llD\xfeG\xec\x05\x00\x00\u07d4\xe6\tU\xdc\v\xc1V\xf6\xc4\x18I\xf6\xbdwk\xa4K\x0e\xf0\xa1\x89\x10C\x16'\xa0\x93;\x00\x00\u07d4\xe6\nU\xf2\u07d9m\u00ee\xdbil\b\xdd\xe09\xb2d\x1d\xe8\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe6\x11[\x13\xf9y_~\x95e\x02\xd5\aEg\u06b9E\xcek\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xe6\x1f(\t\x15\xc7t\xa3\x1d\"<\xf8\f\x06\x92f\xe5\xad\xf1\x9b\x89/\xb4t\t\x8fg\xc0\x00\x00\u07d4\xe6/\x98e\a\x12\xeb\x15\x87S\xd8)r\xb8\u9723\xf6\x18w\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe6/\x9d|d\xe8\xe2cZ\xeb\x88=\xd7;\xa6\x84\xee|\x10y\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xe6>xt\x14\xb9\x04\x84x\xa5\a35\x9e\xcd\xd7\xe3dz\xa6\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xe6FfXr\xe4\v\rz\xa2\xff\x82r\x9c\xaa\xba[\xc3\u8789\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe6N\xf0\x12e\x8dT\xf8\xe8`\x9cN\x90#\xc0\x9f\xe8e\xc8;\x89\x01\x84\x93\xfb\xa6N\xf0\x00\x00\u07d4\xe6On\x1dd\x01\xb5l\akd\xa1\xb0\x86}\v/1\rN\x89\x02\u02edq\xc5:\xe5\x00\x00\u07d4\xe6g\xf6R\xf9W\u008c\x0ef\u04364\x17\xc8\f\x8c\x9d\xb8x\x89 \x9d\x92/RY\xc5\x00\x00\xe0\x94\xe6w\xc3\x1f\xd9\xcbr\x00u\u0724\x9f\x1a\xbc\xcdY\xec3\xf74\x8a\x01\xa6\u05be\xb1\xd4.\xe0\x00\x00\u07d4\xe6|,\x16e\u02038h\x81\x87b\x9fI\xe9\x9b`\xb2\u04fa\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xe6\x9al\xdb:\x8a}\xb8\xe1\xf3\f\x8b\x84\xcds\xba\xe0+\xc0\xf8\x8a\x03\x94\xfd\xc2\xe4R\xf6q\x80\x00\u07d4\xe6\x9d\x1c7\x8bw\x1e\x0f\xef\xf0Q\xdbi\xd9f\xacgy\xf4\xed\x89\x1d\xfaj\xaa\x14\x97\x04\x00\x00\u07d4\xe6\x9f\xcc&\xed\"_{.7\x984\xc5$\xd7\f\x175\u5f09lk\x93[\x8b\xbd@\x00\x00\u07d4\xe6\xa3\x01\x0f\x02\x01\xbc\x94\xffg\xa2\xf6\x99\xdf\xc2\x06\xf9\xe7gB\x89/\xa7\xcb\xf6dd\x98\x00\x00\u07d4\xe6\xa6\xf6\xddop\xa4V\xf4\xec\x15\xefz\xd5\xe5\u06f6\x8b\xd7\u0709\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe6\xb2\x0f\x98\n\xd8S\xad\x04\xcb\xfc\x88|\xe6`\x1ck\xe0\xb2L\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\u6cec?]M\xa5\xa8\x85}\v?0\xfcK+i+w\u05c9O%\x91\xf8\x96\xa6P\x00\x00\u07d4\xe6\xb9T_~\u0406\xe5R\x92F9\xf9\xa9\xed\xbb\xd5T\v>\x89\xcb\xd4{n\xaa\x8c\xc0\x00\x00\xe0\x94\xe6\xbc\xd3\n\x8f\xa18\xc5\xd9\xe5\xf6\xc7\xd2\u0680i\x92\x81-\u034a7\x0e\xa0\xd4|\xf6\x1a\x80\x00\x00\u07d4\xe6\xc8\x1f\xfc\xec\xb4~\xcd\xc5\\\vq\xe4\x85_>^\x97\xfc\x1e\x89\x12\x1e\xa6\x8c\x11NQ\x00\x00\u07d4\xe6\xcb&\vqmL\n\xb7&\xee\xeb\a\xc8pr\x04\xe2v\xae\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe6\xcb?1$\xc9\xc9\xcc84\xb1'K\xc33dV\xa3\x8b\xac\x89\x17+\x1d\xe0\xa2\x13\xff\x00\x00\xe0\x94\xe6\xd2\"\t\xff\u0438u\t\xad\xe3\xa8\xe2\xefB\x98y\u02c9\xb5\x8a\x03\xa7\xaa\x9e\x18\x99\xca0\x00\x00\u07d4\xe6\u051f\x86\xc2(\xf4sg\xa3^\x88l\xaa\xcb'\x1eS\x94)\x89\x16^\xc0\x9d\xa7\xa1\x98\x00\x00\u07d4\xe6\xe6!\xea\xab\x01\xf2\x0e\xf0\x83k|\xadGFL\xb5\xfd<\x96\x89\x11!\x93B\xaf\xa2K\x00\x00\u07d4\xe6\xe8\x861{jf\xa5\xb4\xf8\x1b\xf1d\xc58\xc2d5\x17e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe6\u98ddu\x0f\xe9\x949N\xb6\x82\x86\xe5\xeab\xa6\x99x\x82\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xe6\xec\\\xf0\u011b\x9c1~\x1epc\x15\uf7b7\xc0\xbf\x11\xa7\x8a\x03\xa4i\xf3F~\x8e\xc0\x00\x00\u07d4\xe6\xf5\xebd\x9a\xfb\x99Y\x9cAK'\xa9\xc9\xc8U5\u007f\xa8x\x89\x90\xf54`\x8ar\x88\x00\x00\xe0\x94\xe6\xfe\n\xfb\x9d\xce\xdd7\xb2\xe2,E\x1b\xa6\xfe\xabg4\x803\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xe7\x10\xdc\u041b\x81\x01\xf9C{\xd9}\xb9\ns\xef\x99=\v\xf4\x89\x14\xee6\xc0Z\xc2R\x00\x00\u07d4\xe7'\xe6~\xf9\x11\xb8\x1fl\xf9\xc7?\xcb\xfe\xbc+\x02\xb5\xbf\u0189lk\x93[\x8b\xbd@\x00\x00\u07d4\xe7.\x1d3\\\u009a\x96\xb9\xb1\xc0/\x00:\x16\xd9q\xe9\v\x9d\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xe71\x1c\x953\xf0\t,rH\xc9s\x9b[,\x86J4\xb1\u0389\x97\xf9}l\xc2m\xfe\x00\x00\u07d4\xe7;\xfe\xad\xa6\xf0\xfd\x01o\xbc\x84>\xbc\xf6\xe3p\xa6[\xe7\f\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xe7<\xcfCg%\xc1Q\xe2U\xcc\xf5!\f\xfc\xe5\xa4?\x13\xe3\x89\x01\x15NS!}\xdb\x00\x00\u07d4\xe7B\xb1\xe6\x06\x9a\x8f\xfc'\f\xc6\x1f\xa1d\xac\x15SE\\\x10]\x04\x88~\x14\x89\x06\x96\xd8Y\x00 \xbb\x00\x00\u07d4\xe7\\\x1f\xb1w\b\x9f>X\xb1\x06y5\xa6Yn\xf1s\u007f\xb5\x89\x05j\x87\x9f\xa7uG\x00\x00\u07d4\xe7\\;8\xa5\x8a?3\xd5V\x90\xa5\xa5\x97f\xbe\x18^\x02\x84\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe7a\xd2\u007f\xa3P,\xc7k\xb1\xa6\bt\x0e\x14\x03\u03dd\xfci\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\u07d4\xe7f\xf3O\xf1o<\xfc\xc9s!r\x1fC\xdd\xf5\xa3\x8b\f\xf4\x89T\x06\x923\xbf\u007fx\x00\x00\u07d4\xe7m\x94Z\xa8\x9d\xf1\xe4W\xaa4+1\x02\x8a^\x910\xb2\u03897\b\xba\xed=h\x90\x00\x00\u07d4\xe7s^\xc7e\x18\xfcj\xa9-\xa8qZ\x9e\xe3\xf6%x\x8f\x13\x89lM\x16\v\xaf\xa1\xb7\x80\x00\xe0\x94\xe7z\x89\xbdE\xdc\x04\xee\xb4\xe4\x1d{Ykp~nQ\xe7L\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xe7}}\uac96\u0234\xfa\a\xca;\xe1\x84\x16=Zm`l\x89\x05\x049\x04\xb6q\x19\x00\x00\u07d4\xe7\u007f\xeb\xab\xdf\b\x0f\x0f]\xca\x1d?Wf\xf2\xa7\x9c\x0f\xfa|\x89K\"\x9d(\xa8Ch\x00\x00\xe0\x94\u7025c\x06\xba\x1ek\xb31\x95,\"S\x9b\x85\x8a\xf9\xf7}\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\xe7\x81\xecs-@\x12\x02\xbb\x9b\xd18`\x91\r\xd6\u009a\xc0\xb6\x89C8t\xf62\xcc`\x00\x00\u07d4\xe7\x84\xdc\xc8s\xaa\x8c\x15\x13\xec&\xff6\xbc\x92\xea\xc6\xd4\xc9h\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe7\x91-L\xf4V,W=\xdc[q\xe3s\x10\xe3x\xef\x86\u0249\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\xe7\x91\u0545\xb8\x996\xb2])\x8f\x9d5\xf9\xf9\xed\xc2Z)2\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe7\x924\x9c\xe9\xf6\xf1O\x81\xd0g@\x96\xbe\xfa\x1f\x92!\xcd\xea\x89[]#J\r\xb48\x80\x00\u07d4\xe7\x96\xfdN\x83\x9bL\x95\xd7Q\x0f\xb7\xc5\xc7+\x83\xc6\xc3\xe3\u01c9\x1b\xc43\xf2?\x83\x14\x00\x00\xe0\x94\xe7\xa4/Y\xfe\xe0t\xe4\xfb\x13\xea\x9eW\xec\xf1\xccH(\"I\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xe7\xa4V\f\x84\xb2\x0e\x0f\xb5LIg\f)\x03\xb0\xa9lB\xa4\x89 j\xea\u01e9\x03\x98\x00\x00\u07d4\xe7\xa8\xe4q\xea\xfby\x8fET\xccnRg0\xfdV\xe6,}\x8965\u026d\xc5\u07a0\x00\x00\u07d4\u7f82\xc6Y<\x1e\xed\xdd*\xe0\xb1P\x01\xff \x1a\xb5{/\x89\x01\t\x10\xd4\xcd\xc9\xf6\x00\x00\u07d4\xe7\u01b5\xfc\x05\xfct\x8e[C\x81rdI\xa1\xc0\xad\x0f\xb0\xf1\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe7\xd1u$\xd0\v\xad\x82I|\x0f'\x15jd\u007f\xf5\x1d'\x92\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xe7\xd2\x13\x94\u007f\u02d0J\xd78H\v\x1e\xed/\\2\x9f'\xe8\x89\x01\x03\u00f1\xd3\xe9\xc3\x00\x00\u07d4\xe7\xd6$\x06 \xf4,^\u06f2\xed\xe6\xae\xc4=\xa4\xed\x9bWW\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe7\xda`\x9d@\xcd\xe8\x0f\x00\xce[O\xfbj\xa9\u04304\x94\xfc\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe7\xf0oi\x9b\xe3\x1cD\vC\xb4\xdb\x05\x01\xec\x0e%&\x16D\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe7\xf4\xd7\xfeoV\x1f\u007f\xa1\xda0\x05\xfd6TQ\xad\x89\u07c9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe7\xfd\x8f\xd9Y\xae\xd2v~\xa7\xfa\x96\f\xe1\xdbS\xaf\x80%s\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe8\x0e\u007f\xef\x18\xa5\xdb\x15\xb0\x14s\xf3\xadkx\xb2\xa2\xf8\xac\u0649\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xe8\x13\u007f\xc1\xb2\xec|\xc7\x10:\xf9!\x89\x9bJ9\xe1\xd9Y\xa1\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4\xe8\x1c-4l\n\xdfL\xc5g\b\xf69K\xa6\xc8\u0226J\x1e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe8,X\xc5yC\x1bg5F\xb5:\x86E\x9a\xca\xf1\u079b\x93\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xe84\xc6C\x18 \\\xa7\xddJ!\xab\xcb\b&l\xb2\x1f\xf0,\x8965\xc6 G9\u0640\x00\u07d4\xe86\x04\xe4\xffk\xe7\xf9o`\x18\xd3\xec0r\xecR]\xffk\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\xe0\x94\xe8E\xe3\x87\xc4\xcb\u07d8\"\x80\xf6\xaa\x01\xc4\x0eK\xe9X\u0772\x8a\x05K@\xb1\xf8R\xbd\xa0\x00\x00\u07d4\xe8H\xca~\xbf\xf5\xc2O\x9b\x9c1g\x97\xa4;\xf7\xc3V)-\x89\x06.\x11\\\x00\x8a\x88\x00\x00\u07d4\xe8KU\xb5%\xf1\x03\x9etK\x91\x8c\xb33$\x92\xe4^\xcaz\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe8O\x80v\xa0\xf2\x96\x9e\xcd3>\xef\x8d\xe4\x10B\x98b\x91\xf2\x89\x17k4O*x\xc0\x00\x00\u07d4\xe8d\xfe\xc0~\xd1!Je1\x1e\x11\xe3)\xde\x04\r\x04\xf0\xfd\x89Y\u0283\xf5\xc4\x04\x96\x80\x00\u07d4\xe8}\xba\xc66\xa3w!\xdfT\xb0\x8a2\xefIY\xb5\xe4\xff\x82\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xe8~\x9b\xbf\xbb\xb7\x1c\x1at\ft\xc7#Bm\xf5]\x06=\u064a\x01\xb1\x92\x8c\x00\u01e68\x00\x00\u07d4\xe8~\xacm`+A\t\xc9g\x1b\xf5{\x95\f,\xfd\xb9\x9dU\x89\x02\xb4\xf2\x19r\xec\xce\x00\x00\xe0\x94\u807b\xbeir-\x81\xef\xec\xaaH\u0455*\x10\xa2\xbf\xac\x8f\x8a\x03c\\\x9a\xdc]\xea\x00\x00\x00\u07d4\xe8\x92Is\x8b~\xce\xd7\xcbfjf\xe4s\xbcv\x82/U\t\x8d\x89\xb9\x1c\u0149lk\x93[\x8b\xbd@\x00\x00\u07d4\xe8\xc3\u04f0\xe1\u007f\x97\xd1\xe7V\xe6\x84\xf9N\x14p\xf9\x9c\x95\xa1\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xe8\xc3\xf0E\xbb}8\xc9\xd2\U000d5c3a\x84\x92\xb2S#\t\x01\x8a\x01\xe7\xe4\x17\x1b\xf4\u04e0\x00\x00\u07d4\xe8\xccC\xbcO\x8a\xcf9\xbf\xf0N\xbf\xbfB\xaa\xc0j2\x84p\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xe8\xd9B\xd8/\x17^\xcb\x1c\x16\xa4\x05\xb1\x01C\xb3\xf4k\x96:\x89\x1e\xd2\xe8\xffm\x97\x1c\x00\x00\u07d4\xe8\u077e\xd72\xeb\xfeu@\x96\xfd\xe9\bk\x8e\xa4\xa4\xcd\xc6\x16\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe8\xder^\xca]\xef\x80_\xf7\x94\x1d1\xac\x1c.4-\xfe\x95\x89\x85~\ro\x1d\xa7j\x00\x00\u07d4\xe8\xe9\x85\x05\x86\xe9OR\x99\xabIK\xb8!\xa5\xf4\f\x00\xbd\x04\x89\xcf\x15&@\xc5\xc80\x00\x00\xe0\x94\xe8\xea\u047b\x90\xcc\u00ee\xa2\xb0\xdc\u0175\x80VUFU\xd1\u054a\x01\xa4\xab\xa2%\xc2\a@\x00\x00\u07d4\xe8\xea\xf1)D\t-\xc3Y\x9b9S\xfa|\xb1\xc9v\x1c\xc2F\x89a\x94\x04\x9f0\xf7 \x00\x00\xe0\x94\xe8\xedQ\xbb\xb3\xac\xe6\x9e\x06\x02K3\xf8hD\xc4sH\u06de\x8a\"\xf9\xea\x89\xf4\xa7\xd6\xc4\x00\x00\u07d4\xe8\xef\x10\r|\xe0\x89X2\xf2g\x8d\xf7-J\u03cc(\xb8\xe3\x89\x1b\x1bk\u05efd\xc7\x00\x00\u07d4\xe8\xf2\x99i\xe7\\e\xe0\x1c\xe3\xd8aT }\n\x9e|v\xf2\x89\xa2/\xa9\xa7:'\x19\x80\x00\u07d4\xe8\xfc6\xb0\x13\x1e\xc1 \xac\x9e\x85\xaf\xc1\f\xe7\vV\u0636\xba\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe9\n5L\xec\x04\u059e]\x96\xdd\xc0\xc5\x13\x8d=3\x15\n\xa0\x89\x1b\x1a}\u03caD\u04c0\x00\xe0\x94\xe9\x13>}1\x84]_+f\xa2a\x87\x92\xe8i1\x1a\xcff\x8a\x05\x17\xc0\xcb\xf9\xa3\x90\x88\x00\x00\u07d4\xe9\x1d\xac\x01\x95\xb1\x9e7\xb5\x9bS\xf7\xc0\x17\xc0\xb29[\xa4L\x89e\xea=\xb7UF`\x00\x00\u07d4\xe9\x1f\xa0\xba\xda\u0779\xa9~\x88\xd3\xf4\xdb|U\u05bbt0\xfe\x89\x14b\fW\xdd\xda\xe0\x00\x00\u07d4\xe9#\xc0aw\xb3B~\xa4H\xc0\xa6\xff\x01\x9bT\xccT\x8d\x95\x89\x01\xf7\x80\x01Fg\xf2\x80\x00\xe0\x94\xe9=G\xa8\u0288]T\fNRo%\xd5\xc6\xf2\xc1\b\u0138\x8a\x17\xda:\x04\u01f3\xe0\x00\x00\x00\u07d4\xe9E\x8fh\xbb',\xb5g:\x04\xf7\x81\xb4\x03Uo\u04e3\x87\x89\x03N\x8b\x88\xce\xe2\xd4\x00\x00\u07d4\xe9IA\xb6\x03`\x19\xb4\x01j0\xc1\x03}Zi\x03\xba\xba\xad\x89*H\xac\xabb\x04\xb0\x00\x00\u07d4\xe9I[\xa5\x84'(\xc0\ud5fe7\xd0\xe4\"\xb9\x8di ,\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xe9M\xed\x99\u0735r\xb9\xbb\x1d\u02e3/m\xee\x91\xe0W\x98N\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\xe0\x94\xe9QyR}\uc951l\xa9\xa3\x8f!\\\x1e\x9c\xe77\xb4\u024a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xe9U\x91\x85\xf1f\xfc\x95\x13\xccq\x11aD\xce-\xeb\x0f\x1dK\x8a\x04<3\xc1\x93ud\x80\x00\x00\u0794\xe9^\x92\xbb\xc6\xde\a\xbf:f\x0e\xbf_\xeb\x1c\x8a5'\xe1\u0148\xfc\x93c\x92\x80\x1c\x00\x00\xe0\x94\xe9e\u06a3@9\xf7\xf0\xdfb7Z7\u5acar\xb3\x01\xe7\x8a\x01\x03\xfd\xde\u0373\xf5p\x00\x00\u07d4\xe9i\xea\x15\x95\xed\xc5\u0127\a\xcf\xde8\t)c2Q\xa2\xb0\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xe9k\x18N\x1f\x0fT\x92J\xc8t\xf6\v\xbfDptF\xb7+\x89\x9d\xcc\x05\x15\xb5n\f\x00\x00\xe0\x94\xe9m}L\xdd\x15U:NM1mmd\x80\xca<\xea\x1e8\x8a\x02\x95]\x02\xe1\xa15\xa0\x00\x00\u07d4\xe9n-8\x13\xef\xd1\x16_\x12\xf6\x02\xf9\u007fJb\x90\x9d\x1b;\xc0\xe9\xaa\"\u007f\x90\x89'\xcaK\xd7\x19\xf0\xb8\x00\x00\u07d4\xea,\x19}&\xe9\x8b\r\xa8>\x1br\u01c7a\x8c\x97\x9d=\xb0\x89\x01\x11du\x9f\xfb2\x00\x00\xe0\x94\xea7y\xd1J\x13\xf6\u01c5f\xbc\xde@5\x91A:b9\u06ca)\xb7d2\xb9DQ \x00\x00\u07d4\xeaN\x80\x9e&j\xe5\xf1<\xdb\u33dd\x04V\xe68m\x12t\x89\xf3\xf2\v\x8d\xfai\xd0\x00\x00\xe0\x94\xeaS\xc9T\xf4\xed\x97\xfdH\x10\x11\x1b\u06b6\x9e\xf9\x81\xef%\xb9\x8a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u07d4\xeaS\xd2ed\x85\x9d\x9e\x90\xbb\x0eS\xb7\xab\xf5`\xe0\x16,8\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xea`Ci\x12\xdek\xf1\x87\u04e4r\xff\x8fS3\xa0\xf7\xed\x06\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xea`T\x9e\xc7U?Q\x1d!I\xf2\xd4fl\xbd\x92C\xd9<\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xeaf\xe7\xb8M\u037f6\xee\xa3\xe7[\x858*u\xf1\xa1]\x96\x89]\xbc\x91\x91&o\x11\x80\x00\u07d4\xeahlPW\t<\x17\x1cf\u06d9\xe0\x1b\x0e\xce\xcb0\x86\x83\x89\x14\u0768],\xe1G\x80\x00\u07d4\xeaj\xfe,\xc9(\xac\x83\x91\xeb\x1e\x16_\xc4\x00@\xe3t!\u7262\u007f\xa0c\xb2\xe2\xe6\x80\x00\u07d4\xeay\x05}\xab\xef^d\xe7\xb4O\u007f\x18d\x8e~S7\x18\u0489\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xea|Mm\xc7)\xcdk\x15|\x03\xad#|\xa1\x9a \x93F\u00c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xea\x81h\xfb\xf2%\xe7\x86E\x9c\xa6\xbb\x18\xd9c\xd2kPS\t\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xea\x81\u02868T\f\xd9\xd4\xd7=\x06\x0f,\xeb\xf2$\x1f\xfc>\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xea\x83\x17\x19yYB@A\xd9\xd7\xc6z>\xce\x1d\xbbx\xbbU\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\xea\x85'\xfe\xbf\xa1\xad\xe2\x9e&A\x93)\u04d3\xb9@\xbb\xb7\u0709lj\xccg\u05f1\xd4\x00\x00\u07d4\xea\x8f0\xb6\xe4\xc5\xe6R\x90\xfb\x98d%\x9b\u0159\x0f\xa8\ue289\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xea\x94\xf3(\b\xa2\uf29b\xf0\x86\x1d\x1d$\x04\xf7\xb7\xbe%\x8a\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xea\xa4\\\xea\x02\xd8},\xc8\xfd\xa9CN-\x98[\xd4\x03\x15\x84\x89h\x1f\xc2\xccn+\x8b\x00\x00\xe0\x94\uac3d\x14\x83\t\x18l\xf8\xcb\xd1;r2\xd8\tZ\u02c3:\x8a\x02C\x9a\x88\x1cjq|\x00\x00\u07d4\uaed0\xd3y\x89\xaa\xb3\x1f\xea\xe5G\xe0\xe6\xf3\x99\x9c\xe6\xa3]\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xea\xc0\x82~\xff\fn?\xf2\x8a}JT\xf6\\\xb7h\x9d{\x99\x89\x9a\xd9\u67ddGR\x00\x00\u07d4\xea\xc1H(&\xac\xb6\x11\x1e\x19\xd3@\xa4_\xb8QWk\xed`\x89\x01\xbe\x8b\xab\x04\u067e\x80\x00\xe0\x94\xea\xc1{\x81\xedQ\x91\xfb\b\x02\xaaT3s\x13\x83A\a\xaa\xa4\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xea\u00efW\x84\x92\u007f\u9958\xfcN\xec8\xb8\x10/7\xbcX\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xea\u01b9\x88BT.\xa1\v\xb7O&\xd7\xc7H\x8fi\x8bdR\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xea\xc7h\xbf\x14\xb8\xf9C.i\xea\xa8*\x99\xfb\xeb\x94\xcd\f\x9c\x8a\x14\u06f2\x19\\\xa2(\x90\x00\x00\u07d4\xea\xd2\x1c\x1d\xec\u03ff\x1c\\\xd9f\x88\xa2Gki\xba\a\xceJ\x89\x03\xf2M\x8eJ\x00p\x00\x00\u07d4\xea\xd4\xd2\xee\xfbv\xab\xaeU3\x96\x1e\xdd\x11@\x04\x06\xb2\x98\xfc\x89\xd2U\xd1\x12\xe1\x03\xa0\x00\x00\u07d4\xea\xd6Rb\xed]\x12-\xf2\xb2u\x14\x10\xf9\x8c2\xd1#\x8fQ\x89\x05\x83\x17\xedF\xb9\xb8\x00\x00\u07d4\xea\xd7P\x16\u3801Pr\xb6\xb1\b\xbc\xc1\xb7\x99\xac\xf08>\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xea\xea#\xaa\x05r\x00\xe7\xc9\xc1^\x8f\xf1\x90\xd0\xe6l\f\x0e\x83\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xea\xed\x16\xea\xf5\u06ab[\xf0)^^\a\u007fY\xfb\x82U\x90\v\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xea\xed\xcck\x8bib\xd5\xd9(\x8c\x15lW\x9dG\xc0\xa9\xfc\xff\x89\x04\x9b\x9c\xa9\xa6\x944\x00\x00\u07d4\xea\xf5#\x88Tn\xc3Z\xcaolc\x93\xd8\xd6\t\xde:K\xf3\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xeb\x10E\x8d\xac\xa7\x9eJk$\xb2\x9a\x8a\x8a\xdaq\x1b\u007f.\xb6\x89\u063beI\xb0+\xb8\x00\x00\u07d4\xeb\x1c\xea{E\u047dM\x0e*\x00{\u04ff\xb3Tu\x9e,\x16\x89\n\xbb\xcdN\xf3wX\x00\x00\u07d4\xeb%H\x1f\u035c\"\x1f\x1a\xc7\xe5\xfd\x1e\u0353\a\xa1b\x15\xb8\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\xe0\x94\xeb.\xf3\u04cf\xe6R@<\xd4\xc9\xd8^\xd7\xf0h,\xd7\xc2\u078a\t\x0fSF\b\xa7(\x80\x00\x00\xe0\x94\xeb;\xddY\xdc\u0765\xa9\xbb*\xc1d\x1f\xd0!\x80\xf5\xf3e`\x8a\x01e\xc9fG\xb3\x8a \x00\x00\u07d4\xeb<\xe7\xfc8\x1cQ\xdb}_\xbdi/\x8f\x9e\x05\x8aLp=\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xebE?Z:\xdd\u074a\xb5gP\xfa\xdb\x0f\xe7\xf9M\x9c\x89\xe7\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xebO\x00\xe2\x836\xea\t\x94%\x88\ueb12\x18\x11\xc5\"\x14<\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xebR\xab\x10U4\x922\x9c\x1cT\x83:\xe6\x10\xf3\x98\xa6[\x9d\x89\b=lz\xabc`\x00\x00\u07d4\xebW\r\xba\x97R'\xb1\xc4-n\x8d\xea,V\u026d\x96\x06p\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xebc\x94\xa7\xbf\xa4\u0489\x11\u0565\xb2>\x93\xf3^4\f\"\x94\x89\x04:w\xaa\xbd\x00x\x00\x00\u07d4\xebh\x10i\x1d\x1a\xe0\u045eG\xbd\"\u03be\u0cfa'\xf8\x8a\x89\x87\x85c\x15\xd8x\x15\x00\x00\u07d4\xebvBL\x0f\u0557\xd3\xe3A\xa9d*\xd1\xee\x11\x8b+W\x9d\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xeb| +F+|\u0145]t\x84u_n&\xefC\xa1\x15\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xeb\x83\\\x1a\x91\x18\x17\x87\x8a3\xd1gV\x9e\xa3\xcd\u04c7\xf3(\x8965\u026d\xc5\u07a0\x00\x00\u07d4\ub268\x82g\t\t\xcf7~\x9ex(n\xe9{\xa7\x8dF\u0089+|\xc2\xe9\xc3\"\\\x00\x00\xe0\x94\xeb\x90\u01d3\xb3S\x97a\xe1\xc8\x14\xa2\x96q\x14\x86\x92\x19>\xb4\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xeb\x9c\xc9\xfe\bi\xd2\u06b5,\u01ea\xe8\xfdW\xad\xb3_\x9f\xeb\x89j\x93\xbb\x17\xaf\x81\xf8\x00\x00\xe0\x94\ub8c8\xb0\xda'\xc8{\x1c\xc0\xea\xc6\xc5{,Z\vE\x9c\x1a\x8a\x01p\xa0\xf5\x04\x0eP@\x00\x00\u07d4\xeb\xaa!m\xe9\xccZC\x03\x17\a\xd3o\xe6\u057e\xdc\x05\xbd\xf0\x89j\xc5\xc6-\x94\x86\a\x00\x00\u07d4\xeb\xac+D\b\xefT1\xa1;\x85\b\xe8bP\x98!\x14\xe1E\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xeb\xb6,\xf8\xe2,\x88K\x1b(\xc6\xfa\x88\xfb\xbc\x17\x93\x8a\xa7\x87\x89+By\x84\x03\u0278\x00\x00\u07d4\xeb\xb7\xd2\xe1\x1b\u01b5\x8f\n\x8dE\xc2\xf6\xde0\x10W\n\u0211\x89\x01s\x17\x90SM\xf2\x00\x00\u07d4\xeb\xbbO,=\xa8\xbe>\xb6-\x1f\xfb\x1f\x95\x02a\u03d8\xec\u0689lk\x93[\x8b\xbd@\x00\x00\u07d4\xeb\xbdM\xb9\x01\x99R\u058b\x1b\x0fm\x8c\xf0h<\x008{\xb5\x89\x12\x04\x01V=}\x91\x00\x00\u07d4\xeb\xbe\xeb%\x91\x84\xa6\xe0\x1c\xcc\xfc\"\a\xbb\u0603xZ\xc9\n\x89!\x9b\xc1\xb0G\x83\xd3\x00\x00\u07d4\xeb\xd3V\x15j81#4=H\x84;\xff\xeda\x03\xe8f\xb3\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xeb\xd3{%ec\xe3\fo\x92\x89\xa8\xe2p/\bR\x88\b3\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xeb\xe4l\xc3\xc3L2\xf5\xad\xd6\xc3\x19[\xb4\x86\xc4q>\xb9\x18\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xeb\xff\x84\xbb\xefB0q\xe6\x04\xc3a\xbb\xa6w\xf5Y=\xefN\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xec\t'\xba\xc7\xdc6f\x9c(5J\xb1\xbe\x83\xd7\xee\xc3\t4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xec\x0e\x18\xa0\x1d\xc4\xdc]\xaa\xe5g\xc3\xfaL\u007f\x8f\x9bY\x02\x05\x89\x11\x1f\xfe@JA\xe6\x00\x00\xe0\x94\xec\x116,\xec\x81\t\x85\xd0\xeb\xbd{sE\x14D\x98[6\x9f\x8a\x06ZNIWpW1\x80\x00\u07d4\xec,\xb8\xb97\x8d\xff1\xae\xc3\xc2.\x0em\xad\xff1J\xb5\u0749lk\x93[\x8b\xbd@\x00\x00\u07d4\xec0\xad\u0749[\x82\xee1\x9eT\xfb\x04\xcb+\xb09q\xf3k\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xec;\x8bX\xa1'\x03\xe5\x81\xce_\xfd~!\xc5}\x1e\\f?\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xecHg\xd2\x17Z\xb5\xb9F\x93aYUFUF\x84\u0364`\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xecM\b\xaa.GIm\u0287\"]\xe3?+@\xa8\xa5\xb3o\x89\b\x90\xb0\xc2\xe1O\xb8\x00\x00\u07d4\xecX\xbc\r\f \xd8\xf4\x94efAS\xc5\xc1\x96\xfeY\u6f89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xec[\x19\x8a\x00\u03f5Z\x97\xb5\xd56D\xcf\xfa\x8a\x04\u04abE\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xec]\xf2'\xbf\xa8]z\xd7kBn\x1c\xee\x96;\xc7\xf5\x19\u074965\u026d\xc5\u07a0\x00\x00\xe0\x94\xec_\xea\xfe!\f\x12\xbf\u0265\xd0Y%\xa1#\xf1\xe7?\xbe\xf8\x8a`\x8f\xcf=\x88t\x8d\x00\x00\x00\u07d4\xeci\x04\xba\xe1\xf6\x97\x90Y\x17\t\xb0`\x97\x83s?%s\xe3\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\xe0\x94\xecs\x11L^@o\u06fe\t\xb4\xfab\x1b\xd7\x0e\xd5N\xa1\xef\x8a\x050%\xcd!o\xceP\x00\x00\u07d4\xecs\x83=\xe4\xb8\x10\xbb\x02x\x10\xfc\x8fi\xf5D\xe8<\x12\u044965\u026d\xc5\u07a0\x00\x00\u07d4\xecu\xb4\xa4u\x13\x12\v\xa5\xf8`9\x81O\x19\x98\xe3\x81z\u00c9\t\xb0\xbc\xe2\xe8\xfd\xba\x00\x00\u07d4\xecv\xf1.W\xa6U\x04\x03?,\v\xceo\xc0;\xd7\xfa\n\u0109\xc2\x12z\xf8X\xdap\x00\x00\u0794\xec\x80\x14\xef\xc7\xcb\xe5\xb0\xceP\xf3V,\xf4\xe6\u007f\x85\x93\xcd2\x88\xf0\x15\xf2W6B\x00\x00\u07d4\xec\x82\xf5\r\x06G_hM\xf1\xb3\x92\xe0\r\xa3A\xaa\x14TD\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xec\x83\xe7\x98\u00d6\xb7\xa5^*\"$\xab\u0343K'\xeaE\x9c\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xec\x89\xf2\xb6x\xa1\xa1[\x914\xec^\xb7\fjb\a\x1f\xba\xf9\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xec\x8c\x1d{j\xac\xcdB\x9d\xb3\xa9\x1e\xe4\xc9\xeb\x1c\xa4\xf6\xf7<\x89\xe6d\x99\"\x88\xf2(\x00\x00\xe0\x94\xec\x98Q\xbd\x91rpa\x02g\xd6\x05\x18\xb5M<\xa2\xb3[\x17\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xec\x99\xe9]\xec\xe4o\xff\xfb\x17^\xb6@\x0f\xbe\xbb\b\ue6d5\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xec\xa5\xf5\x87\x92\xb8\xc6-*\xf5Vq~\xe3\xee0(\xbeM\u0389lk\x93[\x8b\xbd@\x00\x00\u07d4\xec\xabZ\xba[\x82\x8d\xe1pS\x81\xf3\x8b\xc7D\xb3+\xa1\xb47\x892\xf5\x1e\u06ea\xa30\x00\x00\u07d4\xec\xaf3P\xb7\xce\x14M\x06\x8b\x18`\x10\x85,\x84\xdd\f\xe0\xf0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xec\xb9LV\x8b\xfeY\xad\xe6Pd_O&0lsl\xac\xe4\x89\x0e~\xeb\xa3A\vt\x00\x00\xe0\x94\xec\xbeB^g\r9\tN \xfbVC\xa9\xd8\x18\xee\xd26\u078a\x01\x0f\f\xf0d\xddY \x00\x00\xe0\x94\xec\xbe^\x1c\x9a\u04b1\xdc\xcf\n0_\xc9R/Fi\xdd:\xe7\x8a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xec\xcfz\x04W\xb5f\xb3F\xcag:\x18\x0fDA0!j\u00c9\x05k\xc7^-c\x10\x00\x00\u07d4\xec\u0466(\x025\x1aAV\x8d#\x030\x04\xac\xc6\xc0\x05\xa5\u04c9\x02\xb5\xe3\xaf\x16\xb1\x88\x00\x00\u07d4\xec\xd2v\xafd\u01dd\x1b\u0669+\x86\xb5\u835a\x95\xeb\x88\xf8\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xec\u0506\xfc\x19g\x91\xb9,\xf6\x12\xd3HaO\x91VH\x8b~\x8a\x02\x8a\x85t%Fo\x80\x00\x00\u07d4\xec\xda\xf92)\xb4^\xe6r\xf6]\xb5\x06\xfb^\xca\x00\xf7\xfc\xe6\x89W\x01\xf9m\xcc@\xee\x80\x00\u07d4\xec\xe1\x11g\vV<\u037e\xbc\xa5#\x84)\x0e\xcdh\xfe\\\x92\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xec\xe1\x15&\x82\xb7Y\x8f\xe2\xd1\xe2\x1e\xc1U3\x88T5\xac\x85\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xec\xe1)\bw\xb5\x83\xe3a\xa2\xd4\x1b\x00\x93F\xe6'N%8\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xec\xf0]\a\xea\x02n~\xbfIA\x00#5\xba\xf2\xfe\xd0\xf0\x02\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xec\xf2L\xdd|\"\x92\x8cD\x1eiM\xe4\xaa1\xb0\xfa\xb5\x97x\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xec\xfd\x00M\x02\xf3l\xd4\u0634\xa8\xc1\xa9S;j\xf8\\\xd7\x16\x8a\x01\x0fA\xac\xb4\xbb;\x9c\x00\x00\xe0\x94\xed\x02\x06\xcb#1Q(\xf8\xca\xff&\xf6\xa3\v\x98Tg\xd0\"\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xed\x10e\xdb\u03dds\xc0O\xfcy\b\x87\r\x88\x14h\xc1\xe12\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xed\x12vQ;o\u0186(\xa7A\x85\xc2\xe2\f\xbb\xcax\x17\xbf\x89\nZ\xa8P\t\xe3\x9c\x00\x00\xe0\x94\xed\x12\xa1\xba\x1f\xb8\xad\xfc\xb2\r\xfa\x19X.RZ\xa3\xb7E$\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\xed\x16\xce9\xfe\xef;\xd7\xf5\xd1b\x04^\x0fg\xc0\xf0\x00F\xbb\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xed\x1a\\C\xc5t\xd4\xe94)\x9b$\xf1G,\u071f\xd6\xf0\x10\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xed\x1b$\xb6\x91-Q\xb34\xac\r\xe6\xe7q\xc7\xc0EF\x95\xea\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xed\x1f\x1e\x11Z\r`\xce\x02\xfb%\xdf\x01M(\x9e:\f\xbe}\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xed10\\1\x9f\x92s\u04d3m\x8f[/q\u9c72)c\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xed2z\x14\xd5\u03ed\u0641\x03\xfc\t\x99q\x8d~\xd7\x05(\xea\x89N\x10\x03\xb2\x8d\x92\x80\x00\x00\u07d4\xed<\xbc7\x82\u03bdg\x98\x9b0\\A3\xb2\xcd\xe3\"\x11\xeb\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xed@\x14S\x8c\xeefJ/\xbc\xb6\xdcf\x9fz\xb1m\v\xa5|\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xedA\u188f\\\xaa\x848\x80\xefN\x8b\b\xbdl3\x14\x1e\u07c9*\xd5\xdd\xfaz\x8d\x83\x00\x00\xe0\x94\xedK\xe0J\x05-z\u0333\xdc\u03901\x9d\xba@ \xab,h\x8a\a\xf3zp\xea\xf3b\x17\x80\x00\xe0\x94\xedR\xa2\xcc\bi\u071e\x9f\x84+\u0415|G\xa8\xe9\xb0\xc9\xff\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\xed[LA\xe7b\xd9B@Cs\xca\xf2\x1e\xd4a]%\xe6\xc1\x89m-O=\x95%\xb4\x00\x00\u07d4\xed`\u012bnT\x02\x061~5\x94zc\xa9\xcak\x03\xe2\u02c9\x03\x1a\u066d\vF\u007f\x80\x00\u07d4\xedd\x1e\x066\x8f\xb0\xef\xaa\x17\x03\xe0\x1f\xe4\x8fJhS\t\xeb\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xedfC\xc0\xe8\x88K-2\x11\x857\x85\xa0\x8b\xf8\xf3>\u049f\x89Hz\x9a0E9D\x00\x00\xe0\x94\xedp\xa3|\xdd\x1c\xbd\xa9tm\x93\x96X\xae*a\x81(\x85x\x8a\x02\bj\xc3Q\x05&\x00\x00\x00\u07d4\xedsFvn\x1agm\r\x06\xec\x82\x18g\xa2v\xa0\x83\xbf1\x89\u064a\t1\xcc-I\x00\x00\u07d4\xed\x86&\x16\xfc\xbf\xb3\xbe\xcbt\x06\xf7<\\\xbf\xf0\f\x94\aU\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xed\x9e\x03\f\xa7\\\xb1\u049e\xa0\x1d\rL\xdf\xdc\xcd8D\xb6\xe4\x89\x01\xac\xc1\x16\u03ef\xb1\x80\x00\xe0\x94\ud7bc\u02e4/\x98\x15\xe7\x823&m\xd6\xe85\xb6\xaf\xc3\x1b\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\ud7f1\xf5\xaf/\xbf\u007f\xfcP)\xce\xe4+p\xff\\'[\xf5\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\u07d4\xed\xa4\xb2\xfaY\u0584\xb2z\x81\r\xf8\x97\x8as\xdf0\x8ac\u0089\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xed\xb4s59y\xa2\x06\x87\x9d\xe1D\xc1\n:\xcf\x12\xa7'OV9a\xf57R\x9d\x89\xc7\u0789lk\x93[\x8b\xbd@\x00\x00\u07d4\xeer\x88\xd9\x10\x86\xd9\xe2\xeb\x91\x00\x14\u066b\x90\xa0-x\u00a0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xee|=\xed|(\xf4Y\xc9/\xe1;M\x95\xba\xfb\xab\x026}\x89%\xf2s\x93=\xb5p\x00\x00\xe0\x94\xee\x86} \x91k\xd2\xe9\xc9\xec\xe0\x8a\xa0C\x85\xdbf|\x91.\x8a\n\x96\x81c\xf0\xa5{@\x00\x00\u07d4\ue25b\x02\xcb\xcb99\xcda\xde\x13B\xd5\x04\x82\xab\xb6\x852\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xee\x90m}_\x17H%\x81t\xbeL\xbc8\x93\x03\x02\xab{B\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\ue5ea\x8a\u019e\xdfz\x98}mp\x97\x9f\x8e\xc1\xfb\xcaz\x94\x89\x14b\fW\xdd\xda\xe0\x00\x00\u07d4\xee\xa1\xe9y\x88\xdeu\xd8!\xcd(\xadh\"\xb2,\u0398\x8b1\x89\x1c0s\x1c\xec\x03 \x00\x00\xe0\x94\xee\u048c?\x06\x8e\tJ0K\x85<\x95\nh\t\xeb\xcb\x03\xe0\x8a\x03\xa9\u057a\xa4\xab\xf1\xd0\x00\x00\u07d4\xee\u04c4\xef-A\xd9\xd2\x03\x97NW\xc1#(\xeav\x0e\b\xea\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xee\xdflB\x80\xe6\xeb\x05\xb94\xac\xe4(\xe1\x1dB1\xb5\x90[\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xee\xe7a\x84~3\xfda\u0653\x87\xee\x14b\x86\x94\u047f\xd5%\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xee\xe9\xd0Rn\xda\x01\xe41\x16\xa3\x952-\u0689pW\x8f9\x8a\x02\x1e\x19\x99\xbb\xd5\u04be\x00\x00\u07d4\xee\xf1\xbb\xb1\xe5\xa8?\u0782H\xf8\x8e\xe3\x01\x8a\xfa-\x132\xeb\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xee\xfb\xa1-\xfc\x99gB\xdby\x04d\xca}';\xe6\xe8\x1b>\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xee\xfd\x05\xb0\xe3\xc4\x17\xd5[3C\x06\x04\x86\xcd\xd5\xe9*\xa7\xa6\x89M\x85<\x8f\x89\b\x98\x00\x00\u07d4\xef\r\xc7\xddzS\xd6\x12r\x8b\xcb\u04b2|\x19\xddM}fo\x89&A\x1c[5\xf0Z\x00\x00\u07d4\xef\x11RR\xb1\xb8E\u0345\u007f\x00-c\x0f\x1bo\xa3zNP\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xef\x1c\x04w\xf1\x18M`\xac\u02b3t\xd3tUz\n>\x10\xf3\x89\b=lz\xabc`\x00\x00\u07d4\xef,4\xbbH}7b\xc3\u0327\x82\xcc\xddz\x8f\xbb\n\x991\x89\t\xc2\x00vQ\xb2P\x00\x00\u07d4\xef5\xf6\u0531\a^j\xa19\x15\x1c\x97K/FX\xf7\x058\x89<;\xc3?\x94\xe5\r\x80\x00\u07d4\xef9\u0291s\xdf\x15S\x1ds\xe6\xb7*hKQ\xba\x0f+\xb4\x89V\xa0\xb4un\xe28\x00\x00\u07d4\xefF<&y\xfb'\x91d\xe2\f=&\x915\x87s\xa0\xad\x95\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xefG\xcf\a>6\xf2q\xd5\"\xd7\xfaNq \xadP\a\xa0\xbc\x89\x87\x86x2n\xac\x90\x00\x00\u07d4\xefa\x15[\xa0\t\xdc\u07be\xf1\v(\xd9\xda=\x1b\xc6\xc9\xce\u0509\x034-`\xdf\xf1\x96\x00\x00\u0794\xefix\x1f2\xff\xce34o,\x9a\xe3\xf0\x84\x93\xf3\xe8/\x89\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xefv\xa4\u034f\xeb\xcb\u0278\x18\xf1x(\xf8\xd94s\xf3\xf3\u02c9\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\uf4c1\x8fhM\xb0\xc3g^\xc8\x132\xb3\x18>\xcc(\xa4\x95\x89T\x06\x923\xbf\u007fx\x00\x00\xe0\x94\xef\x9fY\xae\xdaA\x8c\x14\x94h-\x94\x1a\xabI$\xb5\xf4\x92\x9a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\uf9b1\xf0\xdb`57\x82h\x91\xb8\xb4\xbc\x169\x84\xbb@\u03495e\x9e\xf9?\x0f\xc4\x00\x00\u07d4\xef\xbdR\xf9}\xa5\xfd:g:F\xcb\xf30D{~\x8a\xad\\\x89\x05l<\x9b\x80\xa0\xa6\x80\x00\xe0\x94\xef\xc8\xcf\x19c\u0269Rg\xb2(\xc0\x86#\x98\x89\xf4\xdf\xd4g\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xef\u02ae\x9f\xf6M,\xd9[RI\xdc\xff\xe7\xfa\xa0\xa0\xc0\xe4M\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\xef\xcc\xe0k\xd6\b\x9d\x0eE\x8e\xf5a\xf5\xa6\x89H\n\xfep\x00\x89 \x86\xac5\x10R`\x00\x00\u07d4\xef\xe0g]\xa9\x8a]\xdap\u0356\x19k\x87\xf4\xe7&\xb43H\x89?\x19\xbe\xb8\xdd\x1a\xb0\x00\x00\u07d4\xef\xe8\xff\x87\xfc&\x0e\agc\x8d\xd5\xd0/\xc4g.\x0e\xc0m\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xef\xeb\x19\x97\xaa\xd2w\xcc3C\x0ea\x11\xed\tCY@H\xb8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xef\xee\xa0\x10uo\x81\xdaK\xa2[r\x17\x87\xf0X\x17\v\uff49\x01\u009c\x9c\xf7p\xef\x00\x00\u07d4\xef\xf5\x1dr\xad\xfa\xe1C\xed\xf3\xa4+\x1a\xecU\xa2\xcc\xdd\v\x90\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xef\xf8kQ#\xbc\xdc\x17\xedL\xe8\xe0[~\x12\xe5\x13\x93\xa1\xf7\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xef\xfc\x15\u41f1\xbe\xda\n\x8d\x13%\xbd\xb4\x17\"@\xdcT\n\x89\x03\x8599\xee\xe1\xde\x00\x00\xe0\x94\xf0\x11\x95\xd6W\xef<\x94.l\xb89I\xe5\xa2\v\\\xfa\x8b\x1e\x8a\x05ts\xd0]\xab\xae\x80\x00\x00\u07d4\xf0'\x96)Q\x01gB\x88\xc1\xd94g\x05=\x04\"\x19\xb7\x94\x89(\x1d\x90\x1fO\xdd\x10\x00\x00\u07d4\xf09h={=\"[\xc7\xd8\u07ed\xefc\x164A\xbeA\xe2\x89\x01\xdd\x1eK\xd8\xd1\xee\x00\x00\u07d4\xf0Jj7\x97\b\xb9B\x8dr*\xa2\xb0kw\xe8\x895\u03c9\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xf0M,\x91\xef\xb6\xe9\xc4_\xfb\xe7KCL\x8c_+\x02\x8f\x1f\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf0W\xaaf\xcav~\xde\x12J\x1c[\x9c\xc5\xfc\x94\xef\v\x017\x89p\xa2K\u02b6\xf4]\x00\x00\u07d4\xf0[\xa8\u05f6\x859\xd930\v\xc9(\x9c=\x94t\xd0A\x9e\x89\x06\xda'\x02M\xd9`\x00\x00\u07d4\xf0\\\xee\xabeA\x05dp\x99Qw<\x84E\xad\x9fN\u01d7\x89\x10C\x16'\xa0\x93;\x00\x00\xe0\x94\xf0_\xcdL\rs\xaa\x16~US\xc8\xc0\xd6\xd4\xf2\xfa\xa3\x97W\x8a\x02\xd2\xd6l1p\xb2\x98\x00\x00\u07d4\xf0g\xe1\xf1\u0583UjL\xc4\xfd\f\x03\x13#\x9f2\xc4\xcf\u060965\u026d\xc5\u07a0\x00\x00\u07d4\xf0g\xfb\x10\u07f2\x93\u962b\xe5d\xc0U\xe34\x8f\x9f\xbf\x1e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf0h\xdf\xe9]\x15\xcd:\u007f\x98\xff\xa6\x88\xb44hB\xbe&\x90\x89D\n\xd8\x19\xe0\x97L\x00\x00\xe0\x94\xf0j\x85J<]\xc3m\x1cI\xf4\xc8}m\xb33\xb5~J\u074a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xf0y\xe1\xb1&_P\xe8\u0229\x8e\xc0\u01c1^\xb3\xae\xac\x9e\xb4\x89\x01\x16\xdc:\x89\x94\xb3\x00\x00\xe0\x94\xf0{\xd0\xe5\xc2\xcei\xc7\u0127$\xbd&\xbb\xfa\x9d*\x17\xca\x03\x8a\x01@a\xb9\xd7z^\x98\x00\x00\xe0\x94\xf0\x83*k\xb2U\x03\xee\xcaC[\xe3\x1b\v\xf9\x05\xca\x1f\xcfW\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\xf0\x9b>\x87\xf9\x13\xdd\xfdW\xae\x80I\xc71\u06e9\xb66\xdf\u00c9 \xf5\xb1\uab4d\x80\x00\x00\u07d4\xf0\xb14\v\x99oo\v\xf0\xd9V\x1c\x84\x9c\xaf\u007fD0\xbe\xfa\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf0\xb1\xf9\xe2x2\xc6\xdei\x14\xd7\n\xfc#\x8ct\x99\x95\xac\xe4\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xf0\xb4i\xea\xe8\x9d@\f\xe7\xd5\xd6j\x96\x95\x03p6\xb8\x89\x03\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xf0\xb9\u0583\u03a1+\xa6\x00\xba\xac\xe2\x19\xb0\xb3\xc9~\x8c\x00\xe4\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf0\xbe\x0f\xafMy#\xfcDF\"\u0458\f\xf2\u0650\xaa\xb3\a\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf0\xc0\x81\xdaR\xa9\xae6d*\xdf^\b _\x05\xc5Ah\xa6\x89\x06\x04o7\xe5\x94\\\x00\x00\u07d4\xf0\xc7\r\rm\xabvc\xaa\x9e\xd9\xce\xeaV~\xe2\u01b0'e\x89qC\x8a\u0167\x91\xa0\x80\x00\u07d4\xf0\xcb\xef\x84\xe1ic\x00\x98\xd4\xe3\x01\xb2\x02\b\xef\x05\x84j\u0249\x0e\v\x83EPkN\x00\x00\u07d4\xf0\xd2\x16c\u0630\x17n\x05\xfd\xe1\xb9\x0e\xf3\x1f\x850\xfd\xa9_\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\xf0\xd5\xc3\x1c\xcbl\xbe0\xc7\xc9\xea\x19\xf2h\xd1Y\x85\x1f\x8c\x9c\x8a\x03\x89O\x0eo\x9b\x9fp\x00\x00\u07d4\xf0\xd6L\xf9\xdf\tt\x113\xd1pH_\xd2K\x00P\x11\xd5 \x89\x1b\b\x93A\xe1O\xcc\x00\x00\u07d4\xf0\xd8X\x10^\x1bd\x81\x01\xac?\x85\xa0\xf8\"+\xf4\xf8\x1dj\x89 \x86\xac5\x10R`\x00\x00\u07d4\xf0\xdcC\xf2\x05a\x91'P{+\x1c\x1c\xfd\xf3-(1\t \x89\x10^\xb7\x9b\x94\x17\b\x80\x00\u07d4\xf0\xe1\u07e4*\u07ac/\x17\xf6\xfd\xf5\x84\xc9Hb\xfdV3\x93\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf0\xe2d\x9c~j?,]\xfe3\xbb\xfb\xd9'\xca<5\nX\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf0\xe7\xfb\x9eB\nS@\xd56\xf4\x04\b4O\xea\xef\xc0j\xef\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf1\x04b\xe5\x8f\xcc\a\U000d5121\x87c\x94Q\x16~\x85\x92\x01\x89\t4\xdd]3\xbc\x97\x00\x00\xe0\x94\xf1\x06a\xff\x94\x14\x0f >zH%rCy8\xbe\xc9\xc3\xf7\x8a\x04<3\xc1\x93ud\x80\x00\x00\u0794\xf1\x14\xff\r\x0f$\xef\xf8\x96\xed\xdeTq\u07a4\x84\x82J\x99\xb3\x88\xbe -j\x0e\xda\x00\x00\u07d4\xf1\x16\xb0\xb4h\x0fS\xabr\xc9h\xba\x80.\x10\xaa\x1b\xe1\x1d\u0209\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xf1\x1c\xf5\xd3cto\xeehd\xd3\xca3m\xd8\x06y\xbb\x87\xae\x8a\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xf1\x1e\x01\u01e9\xd1$\x99\x00_M\xaew\x16\tZ4\x17bw\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xf1;\b0\x93\xbaVN-\xc61V\x8c\xf7T\r\x9a\x0e\xc7\x19\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xf1O\x0e\xb8m\xb0\xebhu?\x16\x91\x8e]K\x80t7\xbd>\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf1Qx\xff\xc4:\xa8\a\x0e\xce2~\x93\x0f\x80\x9a\xb1\xa5O\x9d\x89\n\xb6@9\x12\x010\x00\x00\u07d4\xf1V\xdc\v*\x98\x1e[U\xd3\xf2\xf0;\x814\xe31\u06ed\xb7\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf1]\x9dZ!\xb1\x92\x9ey\x03q\xa1\u007f\x16\xd9_\fie\\\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf1^\x18,O\xbb\xady\xbd\x934\"B\xd4\xdc\xcf+\xe5\x89%\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xf1bM\x98\ve3o\xea\u0166\xd5A%\x00\\\xfc\xf2\xaa\u02c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xf1g\xf5\x86\x8d\xcfB3\xa7\x83\x06\th,\xaf-\xf4\xb1\xb8\a\x89\x81\xe5B\xe1\xa78?\x00\x00\u07d4\xf1m\xe1\x89\x1d\x81\x96F\x13\x95\xf9\xb16&[;\x95F\xf6\xef\x89\x01\xb2\x8e\x1f\x98\xbb\u0380\x00\u07d4\xf1z\x92\xe06\x1d\xba\xce\xcd\xc5\xde\r\x18\x94\x95Z\xf6\xa9\xb6\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf1z\xdbt\x0fE\u02fd\xe3\tN~\x13qo\x81\x03\xf5c\xbd\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf1\x8b\x14\xcb\xf6iC6\xd0\xfe\x12\xac\x1f%\xdf-\xa0\xc0]\xbb\x89\xd8\xd4`,&\xbfl\x00\x00\u07d4\xf1\x9b98\x9dG\xb1\x1b\x8a,?\x1d\xa9\x12M\xec\xff\xbe\xfa\xf7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf1\x9f\x195\b9>M*\x12{ \xb2\x03\x1f9\xc8%\x81\u0189\xbd\xbdz\x83\xbd/l\x00\x00\u07d4\xf1\xa1\xf3 @yd\xfd<\x8f.,\u0224X\r\xa9O\x01\xea\x89ll!wU|D\x00\x00\u07d4\xf1\xb4\xec\xc65%\xf7C,=\x83O\xfe+\x97\x0f\xbe\xb8r\x12\x89\xa2\xa2@h\xfa\u0340\x00\x00\u07d4\U000753ef\xfa\x87\x94\xf5\n\xf8\xe8\x83\t\u01e6&TU\xd5\x1a\x8963\x03\"\xd5#\x8c\x00\x00\u07d4\xf1\xc8\u0129A\xb4b\x8c\rl0\xfd\xa5dR\u065c~\x1bd\x89N\x8c\xea\x1e\xdeu\x04\x00\x00\u07d4\xf1\xda@so\x99\xd5\xdf;\x06\x8a]t_\xaf\xc6F?\u0271\x89\x06\x96\xca#\x05\x8d\xa1\x00\x00\u07d4\xf1\u070a\xc8\x10B\xc6z\x9c\\c2!\xa8\xf76>e\x87\f\x9f(t$\u04a9`\x89J\xcfX\xe0rW\x10\x00\x00\u07d4\xf2B\u0684]B\u053fw\x9a\x00\xf2\x95\xb4\aP\xfeI\xea\x13\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf2RY\xa5\xc99\xcd%\x96l\x9bc\x03\xd3s\x1cS\u077cL\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf2^Lp\xbcFV2\u021eV%\xa82\xa7r/k\xff\xab\x89\xf3K\x82\xfd\x8e\x91 \x00\x00\u07d4\xf2k\xce\xdc\xe3\xfe\xad\u03a3\xbc>\x96\xeb\x10@\xdf\xd8\xff\u1809*\x03I\x19\u07ff\xbc\x00\x00\u07d4\xf2py%v\xf0]QD\x93\xff\xd1\xf5\xe8K\xecK-\xf8\x10\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf2s,\xf2\xc1;\x8b\xb8\xe7I*\x98\x8f_\x89\xe3\x82s\xdd\u0209 \x86\xac5\x10R`\x00\x00\xe0\x94\xf2t.hY\xc5i\xd5\xf2\x10\x83Q\xe0\xbfM\xca5*H\xa8\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xf2\x81:d\xc5&]\x02\x025\u02dc1\x9bl\x96\xf9\x06\xc4\x1e\x89\x12\xf99\u025e\u06b8\x00\x00\u07d4\xf2\x87\xffR\xf4a\x11z\xdb>\x1d\xaaq\x93-\x14\x93\xc6_.\x89\xc5S%\xcat\x15\xe0\x00\x00\u07d4\xf2\xab\x11au\x02D\xd0\xec\xd0H\xee\r>Q\xab\xb1C\xa2\xfd\x89B\xfe+\x90ss\xbc\x00\x00\u07d4\xf2\xb4\xab,\x94'\xa9\x01^\xf6\xee\xff\xf5\xed\xb6\x019\xb7\x19\u0449&\u06d9*;\x18\x00\x00\x00\u07d4\xf2\xc0>*8\x99\x8c!d\x87`\xf1\xe5\xae~\xa3\a}\x85\"\x89\x8f?q\x93\xab\a\x9c\x00\x00\u0794\xf2\u0090N\x9f\xa6d\xa1\x1e\xe2VV\xd8\xfd,\xc0\u0665\"\xa0\x88\xb9\x8b\xc8)\xa6\xf9\x00\x00\u07d4\xf2\xc3b\xb0\xef\x99\x1b\xc8/\xb3nf\xffu\x93*\xe8\u0742%\x89\x04\x02\xf4\xcf\xeeb\xe8\x00\x00\u07d4\xf2\xd0\xe9\x86\xd8\x14\xea\x13\xc8\xf4f\xa0S\x8cS\u0712&Q\xf0\x89J\xcfX\xe0rW\x10\x00\x00\xe0\x94\xf2\u04775w$\xecL\x03\x18[\x87\x9bc\xf5~&X\x91S\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xf2\xd5v<\xe0s\x12~,\xed\xdeo\xab\xa7\x86\xc7<\xa9AA\x8a\x01\xacB\x86\x10\x01\x91\xf0\x00\x00\xe0\x94\xf2\u055c\x89#u\x90s\xd6\xf4\x15\xaa\xf8\xeb\x06_\xf2\U000f614a\x01\xab,\xf7\xc9\xf8~ \x00\x00\u07d4\xf2\xe9\x9f\\\xbb\x83kz\xd3bGW\x1a0,\xbeKH\x1ci\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf2\xed>w%J\u02c3#\x1d\xc0\x86\x0e\x1a\x11$+\xa6'\u06c9kV\x05\x15\x82\xa9p\x00\x00\xe0\x94\xf2\xed\xde7\xf9\xa8\u00dd\u07a2My\xf4\x01WW\xd0k\xf7\x86\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xf2\xef\xe9e`\xc9\xd9{r\xbd6DxC\x88\\\x1d\x90\xc21\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf2\xfb\xb6\u0607\xf8\xb8\xcc:\x86\x9a\xba\x84\u007f=\x1fd\xfcc\x97\xaae\xfbS\xa8\xf0z\x0f\x89:\xae0\xe8\xbc\xee\x89|\xf28\x1fa\x9f\x15\x00\x00\u07d4\xf3@\x83\xec\xea8P\x17\xaa@\xbd\xd3^\xf7\xef\xfbL\xe7v-\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xf3F\xd7\u0792t\x1c\b\xfcX\xa6M\xb5[\x06-\xde\x01-\x14\x89\x0f\xffk\x1fv\x1em\x00\x00\xe0\x94\xf3U\xd3\xec\f\xfb\x90}\x8d\xbb\x1b\xf3FNE\x81(\x19\v\xac\x8a\x01\v\x04n\u007f\r\x80\x10\x00\x00\u07d4\xf3m\xf0/\xbd\x89`sG\xaf\xce)i\xb9\xc4#jX\xa5\x06\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf3s\xe9\u06ac\f\x86u\xf5;yz\x16\x0fo\xc04\xaek#\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf3{BeG\xa1d-\x8032H\x14\xf0\xed\xe3\x11O\xc2\x12\x89\x15\xbeat\xe1\x91.\x00\x00\u07d4\xf3{\xf7\x8cXu\x15G\x11\xcbd\r7\xeam(\xcf\xcb\x12Y\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xf3\x82\xdfX1U\xd8T\x8f?\x93D\f\xd5\xf6\x8c\xb7\x9d`&\x8a8u}\x02\u007f\xc1\xfd\\\x00\x00\xe0\x94\xf3\x82\xe4\xc2\x04\x10\xb9Q\b\x9e\x19\xba\x96\xa2\xfe\xe3\xd9\x1c\xce~\x8a\x01\x11\xfaV\xee\u00a88\x00\x00\xe0\x94\xf3\x8al\xa8\x01hS~\x97M\x14\xe1\xc3\xd19\x90\xa4L,\x1b\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\u07d4\xf3\x9a\x9dz\xa3X\x1d\xf0~\xe4'\x9a\xe6\xc3\x12\xef!\x036X\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf3\xb6h\xb3\xf1M\x92\x0e\xbc7\x90\x92\u06d8\x03\x1bg\xb2\x19\xb3\x89\n\xd6\xee\xdd\x17\xcf;\x80\x00\u07d4\U000fe679\x10<\xe7U\n\xa7O\xf1\xdb\x18\xe0\x9d\xfe2\xe0\x05\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf3\xc1\xab\u049d\xc5{A\xdc\x19-\x0e8M\x02\x1d\xf0\xb4\xf6\u0509\x97\xae\f\u07cf\x86\xf8\x00\x00\u07d4\xf3\xc4qm\x1e\xe5'\x9a\x86\xd0\x16:\x14a\x81\x81\xe1a6\u01c965\u026d\xc5\u07a0\x00\x00\xe0\x94\xf3\u030b\xcbU\x94e\xf8\x1b\xfeX;\u05eb\n#\x06E;\x9e\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xf3\u0588\xf0k\xbd\xbfP\xf9\x93,AE\xcb\xe4\x8e\xcd\xf6\x89\x04\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf3\xdb\xcf\x13Z\u02dd\xee\x1aH\x9cY<\x02O\x03\u00bb\xae\u0389lk\x93[\x8b\xbd@\x00\x00\u07d4\xf3\xde_&\xefj\xde\xd6\xf0m;\x91\x13F\xeep@\x1d\xa4\xa0\x89\x13:\xb3}\x9f\x9d\x03\x00\x00\u07d4\xf3\xdfc\xa9q\x99\x93308;>\xd7W\v\x96\u0101#4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf3\xe7OG\f}:?\x003x\x0fv\xa8\x9f>\xf6\x91\xe6\u02c9\xa3\xcf\xe61\xd1Cd\x00\x00\u07d4\xf3\xeb\x19H\xb9Q\xe2-\xf1ax)\xbf;\x8d\x86\x80\xeckh\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf3\xf1\xfa9\x18\xca4\xe2\xcf~\x84g\v\x1fM\x8e\xca\x16\r\xb3\x89$\xdc\xe5M4\xa1\xa0\x00\x00\u07d4\xf3\xf2O\u009e @?\xc0\xe8\xf5\xeb\xbbU4&\xf7\x82p\xa2\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf3\xfar5R\xa5\xd0Q.+b\xf4\x8d\xca{+\x81\x050[\x89\amA\xc6$\x94\x84\x00\x00\u07d4\xf3\xfeQ\xfd\xe3D\x13\xc73\x18\xb9\xc8T7\xfe~\x82\x0fV\x1a\x896b2\\\u044f\xe0\x00\x00\u07d4\xf4\x00\xf9=_\\~?\xc3\x03\x12\x9a\xc8\xfb\f/xd\a\xfa\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf4\v\x13O\xea\"\u01b2\x9c\x84W\xf4\x9f\x00\x0f\x9c\xdax\x9a\u06c9 \x86\xac5\x10R`\x00\x00\u07d4\xf4\x15W\xdf\u07f1\xa1\xbd\xce\xfe\xfe.\xba\x1e!\xfe\nJ\x99B\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf4\x17z\r\x85\u050b\x0e&B\x11\xce*\xa2\xef\xd3\xf1\xb4\u007f\b\x89\xc2\xcc\xca&\xb7\xe8\x0e\x80\x00\u07d4\xf4/\x90R1\xc7p\xf0\xa4\x06\xf2\xb7h\x87\u007f\xb4\x9e\xee\x0f!\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xf42\xb9\u06ef\x11\xbd\xbds\xb6Q\x9f\xc0\xa9\x04\x19\x87q\xaa\u0189\b=lz\xabc`\x00\x00\u07d4\xf4=\xa3\xa4\xe3\xf5\xfa\xb1\x04\u029b\xc1\xa0\xf7\xf3\xbbJV\xf3Q\x89lj\xccg\u05f1\xd4\x00\x00\xe0\x94\xf4G\x10\x8b\x98\xdfd\xb5~\x87\x103\x88\\\x1a\xd7\x1d\xb1\xa3\xf9\x8a\x01v\xf4\x9e\xad4\x83P\x80\x00\u07d4\xf4O\x85Q\xac\xe93r\a\x12\xc5\u0111\u0376\xf2\xf9Qsl\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u0794\xf4V\x05Z\x11\xab\x91\xfff\x8e.\xc9\"\x96\x1f*#\xe3\xdb%\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xf4V\xa7[\xb9\x96U\xa7A,\xe9}\xa0\x81\x81m\xfd\xb2\xb1\xf2\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf4[\x1d\xcb.A\xdc'\xff\xa0$\u06ad\xf6\x19\xc1\x11u\xc0\x87\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xf4c\xa9\f\xb3\xf1>\x1f\x06CB66\xbe\xab\x84\xc1#\xb0m\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xf4h\x90n~\xdffJ\xb0\u063e=\x83\xebz\xb3\xf7\xff\xdcx\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xf4i\x80\u3929\u049ajn\x90`E7\xa3\x11K\xcb(\x97\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf4kk\x9c|\xb5R\x82\x9c\x1d=\xfd\x8f\xfb\x11\xaa\xba\xe7\x82\xf6\x89\x01#n\xfc\xbc\xbb4\x00\x00\u07d4\xf4v\xe1&\u007f\x86$|\xc9\b\x81o.z\xd58\x8c\x95-\xb0\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf4v\xf2\xcbr\b\xa3.\x05\x1f\xd9N\xa8f)\x92c\x82\x87\xa2\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xf4{\xb14\xda0\xa8\x12\xd0\x03\xaf\x8d\u0338\x88\xf4K\xbfW$\x8a\x01\x19Y\xb7\xfe3\x95X\x00\x00\u07d4\xf4\x83\xf6\a\xa2\x1f\xcc(\x10\n\x01\x8cV\x8f\xfb\xe1@8\x04\x10\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf4\x8e\x1f\x13\xf6\xafM\x84\xb3q\xd7\xdeK'=\x03\xa2c'\x8e\x89 \x86\xac5\x10R`\x00\x00\xe0\x94\xf4\x9cG\xb3\xef\xd8knj[\xc9A\x8d\x1f\x9f\xec\x81Ki\xef\x8a\x04<3\xc1\x93ud\x80\x00\x00\xe0\x94\xf4\x9fo\x9b\xaa\xbc\x01\x8c\x8f\x8e\x11\x9e\x01\x15\xf4\x91\xfc\x92\xa8\xa4\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xf4\xa3g\xb1f\u0499\x1a+\xfd\xa9\xf5dc\xa0\x9f%,\x1b\x1d\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf4\xa5\x1f\xceJ\x1d[\x94\xb0q\x83\x89\xbaNx\x14\x13\x9c\xa78\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xf4\xa9\xd0\f\xef\xa9{zX\xef\x94\x17\xfcbg\xa5\x06\x909\xee\x89\x01.\x89(\u007f\xa7\x84\x00\x00\u07d4\xf4\xaa\xa3\xa6\x16>7\x06W{I\xc0v~\x94\x8ah\x1e\x16\xee\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf4\xb1bn$\xf3\v\xca\xd9'!\xb2\x93r\x89U\xa6\xe7\x9c\xcd\x1d0\x00\x00\u07d4\xf5U\xa2{\xb1\xe2\xfdN,\u01c4\xca\ue493\x9f\xc0n/\u0249lk\x93[\x8b\xbd@\x00\x00\u07d4\xf5X\xa2\xb2\xdd&\u0755\x93\xaa\xe0E1\xfd<<\u00c5Kg\x89\n\xbb\xcdN\xf3wX\x00\x00\u07d4\xf5`H\xdd!\x81\u0523od\xfc\xec\xc6!T\x81\xe4*\xbc\x15\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf5dB\xf6\x0e!i\x13\x95\u043f\xfa\xa9\x19M\xca\xff\x12\u2dc9\x0e\x189\x8ev\x01\x90\x00\x00\u07d4\xf5yqJE\xeb\x8fR\xc3\xd5{\xbd\xef\xd2\xc1[./\x11\u07c9T\x91YV\xc4\t`\x00\x00\u07d4\xf5\x93\xc6R\x85\xeek\xbdf7\U000fe3c9\xad@\u0509\xf6U\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xf5\x98\xdb.\t\xa8\xa5\xee}r\r+\\C\xbb\x12m\x11\xec\u0089\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xf5\x9d\xab\x1b\xf8\xdf\x112~a\xf9\xb7\xa1KV:\x96\xec5T\x8a\x01EB\xba\x12\xa37\xc0\x00\x00\xe0\x94\xf5\x9f\x9f\x02\xbb\u024e\xfe\t~\xab\xb7\x82\x10\x97\x90!\x89\x8b\xfd\x8a\x02\x1e\x17\x1a>\xc9\xf7,\x00\x00\u07d4\xf5\xa5E\x9f\xcd\xd5\xe5\xb2s\x83\r\xf8\x8e\xeaL\xb7}\xda\u07f9\x89\x04\t\xe5+H6\x9a\x00\x00\u07d4\xf5\xa7gj\xd1H\xae\x9c\x1e\xf8\xb6\xf5\xe5\xa0\xc2\xc4s\xbe\x85\v\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf5\xb0h\x98\x9d\xf2\x9c%5w\xd0@Z\xden\x0eu(\xf8\x9e\x89WG=\x05\u06ba\xe8\x00\x00\u07d4\xf5\xb6\xe9\x06\x1aN\xb0\x96\x16\aw\xe2gb\xcfH\xbd\u0635]\x89\r\xc5_\xdb\x17d{\x00\x00\u07d4\xf5\xcf\xfb\xbabN~\xb3!\xbc\x83\xc6\f\xa6\x81\x99\xb4\xe3fq\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf5\xd1ER\xb1\xdc\xe0\xd6\xdc\x1f2\r\xa6\xff\u02231\xcdo\f\x89Hz\x9a0E9D\x00\x00\xe0\x94\xf5\xd6\x1a\xc4\u0295G^[{\xff\xd5\xf2\xf6\x90\xb3\x16u\x96\x15\x8a\x06\x92\xae\x88\x97\b\x1d\x00\x00\x00\u07d4\xf5\xd9\xcf\x00\xd6X\xddEQzH\xa9\xd3\xf5\xf63T\x1aS=\x89\x06O_\xdfIOx\x00\x00\u07d4\xf5\xea\xdc\xd2\u0478ez\x12\x1f3\xc4X\xa8\xb1>v\xb6U&\x89\r\x8b\x0fZZ\xc2J\x00\x00\u07d4\xf6\a\xc2\x15\r>\x1b\x99\xf2O\xa1\xc7\xd5@\xad\xd3\\N\xbe\x1e\x89\xa7\xf1\xaa\a\xfc\x8f\xaa\x00\x00\u07d4\xf6\v\xd75T>k\xfd.\xa6\xf1\x1b\xffbs@\xbc\x03Z#\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf6\f\x1bE\xf1d\xb9X\x0e 'Z\\9\xe1\xd7\x1e5\xf8\x91\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xf6\x0fb\xd797\x95?\xef5\x16\x9e\x11\xd8r\xd2\xea1~\xec\x8a\x01!\xeah\xc1\x14\xe5\x10\x00\x00\u07d4\xf6\x12\x83\xb4\xbd\x85\x04\x05\x8c\xa3`\u94d9\x9bb\xcb\xc8\xcdg\x89\r\xd2\xd5\xfc\xf3\xbc\x9c\x00\x00\u07d4\xf6\x17\xb9g\xb9\xbdH_v\x95\xd2\xefQ\xfbw\x92\u0618\xf5\x00\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf6\x18\u0671\x04A\x14\x80\xa8c\xe6#\xfcU#-\x1aOH\xaa\x89\x0eh\x9emD\xb1f\x80\x00\u07d4\xf6\"\u5126b>\xaa\xf9\x9f+\xe4\x9eS\x80\xc5\xcb\xcf\\\u0609\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf62\xad\xffI\r\xa4\xb7-\x126\xd0KQ\x0ft\xd2\xfa\xa3\u0349K\xe4\xe7&{j\xe0\x00\x00\u07d4\xf69\xac1\u069fg'\x1b\xd1\x04\x02\xb7eN\\\xe7c\xbdG\x89\x15\xaf\x0fB\xba\xf9&\x00\x00\u07d4\xf6:W\x9b\xc3\xea\u00a9I\x04\x10\x12\x8d\xbc\xeb\xe6\xd9\u0782C\x89P\xc5\xe7a\xa4D\b\x00\x00\u07d4\xf6E\xdd|\x89\x00\x93\xe8\xe4\u022a\x92\xa6\xbb55\"\xd3\u0718\x89\aC\x9f\xa2\t\x9eX\x00\x00\xe0\x94\xf6H\xea\x89\xc2u%q\x01r\x94Ny\xed\xff\x84x\x03\xb7u\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xf6JJ\xc8\xd5@\xa9(\x9ch\xd9`\xd5\xfb|\xc4Zw\x83\x1c\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf6N\xcf!\x17\x93\x1cmSZ1\x1eO\xfe\xae\xf9\u0514\x05\xb8\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\xf6O\xe0\x93\x9a\x8d\x1e\xea*\x0e\u035a\x970\xfdyX\xe31\t\x89\x01\x1d\xe1\xe6\xdbE\f\x00\x00\u07d4\xf6V\x16\xbe\x9c\x8by~t\x15\"|\x918\xfa\xa0\x89\x17B\u05c9*\xd3s\xcef\x8e\x98\x00\x00\u07d4\xf6W\xfc\xbeh.\xb4\xe8\xdb\x15.\u03c9$V\x00\vQ=\x15\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xf6X\x19\xacL\xc1L\x13\u007f\x05\xddyw\xc7\xda\xe0\x8d\x1aJ\xb5\x89\x05\x87\x88\u02d4\xb1\xd8\x00\x00\u07d4\xf6{\xb8\xe2\x11\x8b\xbc\u0550'fn\xed\xf6\x94>\xc9\xf8\x80\xa5\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf6\x84d\xbfd\xf2A\x13V\xe4\xd3%\x0e\xfe\xfe\\P\xa5\xf6[\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf6\x86x[\x89r\va\x14_\ua017\x8dj\u030e\v\xc1\x96\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf6\x8c^3\xfa\x97\x13\x9d\xf5\xb2\xe68\x86\xce4\xeb\xf3\u45dc\x89\xb3\xfaAi\xe2\xd8\xe0\x00\x00\u07d4\xf6\xa8cWW\xc5\xe8\xc14\xd2\r\x02\x8c\xf7x\u03c6\t\xe4j\x89O\x1dw/\xae\xc1|\x00\x00\u07d4\xf6\xb7\x82\xf4\xdc\xd7E\xa6\xc0\xe2\xe00`\x0e\x04\xa2K%\xe5B\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\xe0\x94\xf6\xbc7\xb1\u04a3x\x8dX\x9bm\xe2\x12\xdc\x17\x13\xb2\xf6\u738a\x01\x0f\f\xf0d\xddY \x00\x00\u07d4\xf6\xc3\u010a\x1a\xc0\xa3G\x99\xf0M\xb8n\u01e9u\xfewh\xf3\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf6\xd2]?=\x84m#\x9fR_\xa8\xca\xc9{\xc45x\u06ec\x890\x92\u007ft\xc9\xde\x00\x00\x00\u07d4\xf6\xea\xacp2\u0512\xef\x17\xfd`\x95\xaf\xc1\x1dcOV\xb3\x82\x89\x1b\x1bk\u05efd\xc7\x00\x00\xe0\x94\xf6\xea\xd6}\xbf[~\xb13X\xe1\x0f6\x18\x9dS\xe6C\xcf\u03ca\bxg\x83&\xea\xc9\x00\x00\x00\u07d4\xf6\xf1\xa4C\t\x05\x1ck%\xe4}\xff\x90\x9b\x17\x9b\xb9\xabY\x1c\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xf7\x03(\xef\x97b_\xe7E\xfa\xa4\x9e\xe0\xf9\u052a;\r\xfbi\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf7\n\x99\x8aq{3\x8d\x1d\u0658T@\x9b\x1a3\x8d\ue930\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf7\rcz\x84\\\x06\xdbl\u0711\xe67\x1c\xe7\xc48\x8ab\x8e\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf7\x15R\x13D\x98\x92tK\xc6\x0f.\x04@\a\x88\xbd\x04\x1f\u0749\x03\x9f\xba\xe8\xd0B\xdd\x00\x00\xe0\x94\xf7\x1bE4\xf2\x86\xe40\x93\xb1\xe1^\xfe\xa7I\xe7Y{\x8bW\x8a\x16\x1c\x13\xd34\x1c\x87(\x00\x00\u07d4\xf74\xec\x03rM\xde\xe5\xbbRy\xaa\x1a\xfc\xf6\x1b\f\xb4H\xa1\x89\xe5\xbf,\u0270\x97\x80\x00\x00\u07d4\xf76\u0716v\x00\x128\x8f\xe8\x8bf\xc0n\xfeW\xe0\xd7\xcf\n\x89q\xd7Z\xb9\xb9 P\x00\x00\u07d4\xf7:\xc4l ;\xe1S\x81\x11\xb1Q\xec\x82 \u01c6\xd8AD\x89\x0f\xf77x\x17\xb8+\x80\x00\u07d4\xf7=\xd9\xc1B\xb7\x1b\xce\x11\xd0n0\xe7\xe7\xd02\xf2\uc71e\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf7A\x8a\xa0\xe7\x13\xd2H\"\x87v\xb2\xe7CB\"\xaeu\u3949lk\x93[\x8b\xbd@\x00\x00\u07d4\xf7Nn\x14S\x82\xb4\u06c2\x1f\xe0\xf2\u0643\x88\xf4V\t\u019f\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xf7P\f\x16o\x8b\xea/\x824v\x06\xe5\x02K\xe9\xe4\xf4\u0399\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf7W\xfc\x87 \xd3\xc4\xfaRw\a^`\xbd\\A\x1a\xeb\xd9w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf7[\xb3\x9cy\x97y\xeb\xc0J3m&\r\xa61F\xed\x98\u0409\x01Z\xf1\u05cbX\xc4\x00\x00\xe0\x94\xf7h\xf3!\xfdd3\xd9kO5M<\xc1e,\x172\xf5\u007f\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xf7oi\xce\xe4\xfa\xa0\xa6;0\xae\x1ex\x81\xf4\xf7\x15ep\x10\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf7w6\x1a=\u062bb\xe5\xf1\xb9\xb0GV\x8c\xc0\xb5UpL\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf7|{\x84QI\xef\xba\x19\xe2a\xbc|u\x15y\b\xaf\xa9\x90\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf7\u007f\x95\x87\xffz-r\x95\xf1\xf5q\u0206\xbd3\x92jR|\x89lh\xcc\u041b\x02,\x00\x00\u07d4\xf7\x82X\xc1$\x81\xbc\xdd\u06f7*\x8c\xa0\xc0C\tra\xc6\u0149\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf7\x98\xd1m\xa4\xe4`\xc4`\xcdH_\xae\x0f\xa0Y\x97\b\ub08965\u026d\xc5\u07a0\x00\x00\u07d4\xf7\xa1\xad\xe2\xd0\xf5)\x12=\x10U\xf1\x9b\x17\x91\x9fV!Ng\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf7\xac\xff\x93K\x84\xda\ti\xdc7\xa8\xfc\xf6C\xb7\xd7\xfb\xedA\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xf7\xb1Q\xcc^W\x1c\x17\xc7e9\xdb\xe9\x96L\xbbo\xe5\xdey\x89tq|\xfbh\x83\x10\x00\x00\u07d4\xf7\xb2\x9b\x82\x19\\\x88-\xabx\x97\u00ae\x95\xe7w\x10\xf5xu\x89w5Aa2\xdb\xfc\x00\x00\u07d4\xf7\xbcLD\x91\rZ\xed\xd6n\xd25U8\xa6\xb1\x93\xc3a\xec\x89\x05A\xde,-\x8db\x00\x00\u07d4\xf7\xc0\f\xdb\x1f\x02\x03\x10\u056c\xab{Ij\xaaD\xb7y\b^\x89Z\x87\xe7\xd7\xf5\xf6X\x00\x00\u07d4\xf7\xc1\xb4C\x96\x8b\x11{]\u0677UW/\xcd9\xca^\xc0K\x89\x18\xb9h\u0092\xf1\xb5\x00\x00\xe0\x94\xf7\xc5\x0f\x92*\xd1ka\xc6\u047a\xa0E\xed\x81h\x15\xba\u010f\x8a\x02\xa99j\x97\x84\xad}\x00\x00\u07d4\xf7\xc7\b\x01Pq\xd4\xfb\n:*\t\xa4]\x15c\x96\xe34\x9e\x89\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xf7\xcb\u06e6\xbel\xfeh\xdb\xc2<+\x0f\xf50\xee\x05\"o\x84\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf7\xd0\xd3\x10\xac\xea\x18@a8\xba\xaa\xbb\xfe\x05q\xe8\r\xe8_\x89Hz\x9a0E9D\x00\x00\u07d4\xf7\u05ef LV\xf3\x1f\xd9C\x98\xe4\r\xf1\x96K\u063f\x12<\x89\b!\xd2!\xb5)\x1f\x80\x00\u07d4\xf7\xdc%\x11\x96\xfb\u02f7|\x94}|\x19F\xb0\xffe\x02\x1c\xea\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xf7\xe4Z\x12\xaaq\x1cp\x9a\xce\xfe\x95\xf3;xa-*\xd2*\x8a\x0e\x06U\xe2\xf2k\xc9\x18\x00\x00\u07d4\xf7\xf4\x89\x8cLRm\x95_!\xf0U\xcbnG\xb9\x15\xe5\x19d\x89|\b`\xe5\xa8\r\xc0\x00\x00\u07d4\xf7\xf9\x1ez\xcb[\x81)\xa3\x06\x87|\xe3\x16\x8eoC\x8bf\xa1\x89\t\x8a}\x9b\x83\x14\xc0\x00\x00\u07d4\xf7\xfcE\xab\xf7oP\x88\xe2\u5d68\xd12\xf2\x8aMN\xc1\xc0\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\x06:\xf4\xcc\x1d\xd9a\x9a\xb5\u063f\xf3\xfc\xd1\xfa\xa8H\x82!\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\bnBf\x1e\xa9)\xd2\u0761\xablt\x8c\xe3\x05]\x11\x1e\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xf8\bw\x86\xb4-\xa0N\xd6\xd1\xe0\xfe&\xf6\xc0\xee\xfe\x1e\x9fZ\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xf8\r6\x19p/\xa5\x83\x8cH9\x18Y\xa89\xfb\x9c\xe7\x16\x0f\x89l\a\xa7\u0471np\x00\x00\u07d4\xf8\x14y\x9fm\xdfM\xcb)\xc7\xee\x87\x0eu\xf9\xcc-52m\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xf8\x15\xc1\n\x03-\x13\xc3K\x89v\xfan;\xd2\xc9\x13\x1a\x8b\xa9\x89Hz\x9a0E9D\x00\x00\u07d4\xf8\x16\"\xe5WW\xda\xeafu\x97]\xd958\xda}\x16\x99\x1e\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8$\xee3\x1eJ\xc3\xccXv\x939[W\xec\xf6%\xa6\xc0\u0089V\xc9]\xe8\xe8\xca\x1d\x00\x00\u07d4\xf8'\xd5n\xd2\xd3' \u052b\xf1\x03\xd6\xd0\xefM;\xcdU\x9b\x89\x01l\x80\x06W\x91\xa2\x80\x00\u07d4\xf8)\x85\x91R>P\xb1\x03\xf0\xb7\x01\xd6#\xcb\xf0\xf7EV\xf6\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf8H\xfc\xe9\xaba\x1c}\x99 n#\xfa\u019a\u0508\xb9O\xe1\x89\x02\xa1\x12\x9d\t6r\x00\x00\u07d4\xf8O\t\n\xdf?\x8d\xb7\u1533P\xfb\xb7u\x00i\x9ff\xfd\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf8Q\xb0\x10\xf63\xc4\n\xf1\xa8\xf0js\ubeabe\az\xb5\x89\xee\x86D/\xcd\x06\xc0\x00\x00\u07d4\xf8X\x17\x1a\x04\xd3W\xa1;IA\xc1n~U\xdd\u0514\x13)\x89\x02F\xa5!\x8f*\x00\x00\x00\u07d4\xf8[\xab\x1c\xb3q\x0f\xc0_\xa1\x9f\xfa\xc2.gR\x1a\v\xa2\x1d\x89l\x955\u007f\xa6\xb3l\x00\x00\u07d4\xf8j>\xa8\a\x1fp\x95\xc7\u06ca\x05\xaePz\x89)\u06f8v\x89\x126\xef\xcb\u02f3@\x00\x00\u07d4\xf8pL\x16\xd2\xfd[\xa3\xa2\xc0\x1d\x0e\xb2\x04\x84\xe6\xec\xfa1\t\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf8p\x99_\xe1\xe5\"2\x1duC7\xa4\\\f\x9d{8\x95\x1c\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf8s\xe5ze\xc9;n\x18\xcbu\xf0\xdc\a}[\x893\xdc\\\x89\n\xad\xec\x98?\xcf\xf4\x00\x00\u07d4\xf8ua\x9d\x8a#\xe4]\x89\x98\u0444\u0500\xc0t\x89p\x82*\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf8{\xb0{(\x9d\xf70\x1eT\xc0\xef\xdaj,\xf2\x91\xe8\x92\x00\x89K\xe4\xe7&{j\xe0\x00\x00\u0794\xf8\x89\x00\xdbsyU\xb1Q\x9b\x1a}\x17\n\x18\x86L\xe5\x90\xeb\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xf8\x8bX\xdb7B\vFL\v\xe8\x8bE\xee+\x95)\x0f\x8c\xfa\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xf8\x96+u\xdb]$\xc7\xe8\xb7\xce\xf1\x06\x8c>g\u03bb0\xa5\x89\x0f-\xc7\xd4\u007f\x15`\x00\x00\u07d4\xf8\xa0e\xf2\x87\xd9\x1dw\xcdbj\xf3\x8f\xfa\"\r\x9bU*+\x89g\x8a\x93 b\xe4\x18\x00\x00\u07d4\xf8\xa4\x9c\xa29\f\x1fm\\\x0ebQ;\a\x95qt?|\u0189\xa2\xa1]\tQ\x9b\xe0\x00\x00\u07d4\xf8\xa5\f\xee.h\x8c\xee\u3b24\u0522\x97%\xd4\a,\u0103\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\xacJ9\xb5<\x110x \x97;D\x13e\xcf\xfeYof\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\xae\x85{g\xa4\xa2\x89:?\xbe|z\x87\xff\x1c\x01\u01a6\xe7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xf8\xbf\x9c\x04\x87NZw\xf3\x8fL8R~\x80\xc6v\xf7\xb8\x87\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\xc7\xf3J8\xb3\x18\x01\xdaC\x064w\xb1+'\xd0\xf2\x03\xff\x89\x1a\u04ba\xbao\xefH\x00\x00\u07d4\xf8\xca3l\x8e\x91\xbd \xe3\x14\xc2\v-\xd4`\x8b\x9c\x8b\x94Y\x89-\u071b\u0173,x\x00\x00\u07d4\xf8\xd1t$\xc7g\xbe\xa3\x12\x05s\x9a+W\xa7'r\x14\uef89\x02F\xdd\xf9yvh\x00\x00\u07d4\xf8\xd5-\xcc_\x96\xcc(\x00{>\u02f4\t\xf7\xe2*dl\xaa\x89\b\x16\x90\xe1\x81(H\x00\x00\u07d4\xf8\xdc\xe8g\xf0\xa3\x9c[\xef\x9e\xeb\xa6\t\"\x9e\xfa\x02g\x8bl\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf8\xf2&\x14*B\x844\xab\x17\xa1\x86J%\x97\xf6J\xab/\x06\x89\tY\x8b/\xb2\xe9\xf2\x80\x00\u07d4\xf8\xf6d^\r\xeedK=\xad\x81\xd5q\uf6ef\x84\x00!\xad\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf9\x01\xc0\x0f\xc1\u06c8\xb6\x9cK\xc3%+\\\xa7\x0e\xa6\xee\\\xf6\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xf9=[\xcb\x06D\xb0\xcc\xe5\xfc\u0763C\xf5\x16\x8f\xfa\xb2\x87}\x89\vb\a\xb6}&\xf9\x00\x00\u07d4\xf9W\x0e\x92L\x95\u07bbpa6\x97\x92\xcf.\xfe\u00a8-^\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xf9d \x86\xb1\xfb\xaea\xa6\x80M\xbe_\xb1^\xc2\u04b57\xf4\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf9d\x88i\x85\x90\xdc;,UVB\xb8q4\x8d\xfa\x06z\u0549\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf9d\u064d(\x170\xba5\xb2\xe3\xa3\x14yn{B\xfe\xdfg\x89S\xb0\x87`\x98\xd8\f\x00\x00\u07d4\xf9e\ri\x89\xf1\x99\xab\x1c\xc4ycm\xed0\xf2A\x02\x1fe\x89.\x14\x1e\xa0\x81\xca\b\x00\x00\xe0\x94\xf9h\x83X$Y\x90\x8c\x82v'\xe8o(\xe6F\xf9\xc7\xfcz\x8a\x01\u0127\x877\xcd\u03f8\x00\x00\u07d4\xf9kL\x00voSsj\x85t\xf8\"\xe6GL/!\xda-\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xf9r\x9dH(,\x9e\x87\x16m^\xef-\x01\xed\xa9\xdb\xf7\x88!\x89\x05k\x83\xdd\xc7(T\x80\x00\u07d4\xf9v~N\xcbJY\x80Ru\b\u05fe\xc3\xd4^Ld\x9c\x13\x89g\x8a\x93 b\xe4\x18\x00\x00\xe0\x94\xf9x\xb0%\xb6B3U\\\xc3\xc1\x9a\xda\u007fA\x99\xc94\x8b\xf7\x8aT\xb4\v\x1f\x85+\xda\x00\x00\x00\u07d4\xf9{V\xeb\u0577z\xbc\x9f\xba\u02eb\u0514\xb9\xd2\xc2!\xcd\x03\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xf9\x81\x1f\xa1\x9d\xad\xbf\x02\x9f\x8b\xfeV\x9a\xdb\x18\"\x8c\x80H\x1a\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xf9\x82Ps\fLa\xc5\u007f\x12\x985\xf2h\b\x94yEB\xf3\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xf9\x894gr\x99^\xc1\x90o\xaf\xfe\xba*\u007f\xe7\u079ck\xab\x8a\x01je\x02\xf1Z\x1eT\x00\x00\u07d4\xf9\x98\xca4\x11s\nl\xd1\x0etU\xb0A\x0f\xb0\xf6\xd3\xff\x80\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xf9\x9a\xeeDKW\x83\xc0\x93\xcf\xff\xd1\xc4c,\xf9\x90\x9f\xbb\x91\x1d/\x81\x92\xf8B\t\x89\x90\xf54`\x8ar\x88\x00\x00\u07d4\xf9\xbf\xb5\x9dS\x8a\xfcHt\xd4\xf5\x94\x1b\b\xc9s\x0e8\xe2K\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\u07d4\xf9\xdd#\x90\b\x18/\xb5\x19\xfb0\xee\xdd \x93\xfe\xd1c\x9b\xe8\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xf9\u07ba\xec\xb5\xf39\xbe\xeaH\x94\xe5 K\xfa4\r\x06\u007f%\x89ZB\x84Fs\xb1d\x00\x00\xe0\x94\xf9\xe3tG@lA!\x97\xb2\u2bbc\x00\x1dn0\u024c`\x8a\x01\xc4y\xbbCI\xc0\xee\x00\x00\u07d4\xf9\xe7\"/\xaa\xf0\xf4\xda@\xc1\u0124\x0607:\t\xbe\u05f6\x89\x9bO\u0730\x94V$\x00\x00\u07d4\xf9\xec\xe0\"\xbc\xcd,\x924i\x11\xe7\x9d\xd5\x03\x03\xc0\x1e\x01\x88\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfa\x00\xc3v\xe8\x9c\x05\u81c1z\x9d\xd0t\x8d\x96\xf3A\xaa\x89\x89\x10M\r\x00\u04b7\xf6\x00\x00\u07d4\xfa\f\x1a\x98\x8c\x8a\x17\xad5(\xeb(\xb3@\x9d\xaaX\"_&\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xfa\x10_\x1a\x11\xb6\xe4\xb1\xf5`\x12\xa2y\"\xe2\xac-\xa4\x81/\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\xfa\x14/\xe4~\u0697\xe6P;8k\x18\xa2\xbe\xdds\u0335\xb1\x89.\x15:\xd8\x15H\x10\x00\x00\u07d4\xfa\x14\xb5f#J\xbe\xe70B\xc3\x1d!qq\x82\u02e1J\xa1\x89\x11\xc7\xea\x16.x \x00\x00\u07d4\xfa\x19\xd6\xf7\xa5\x0fO\a\x98\x93\xd1g\xbf\x14\xe2\x1d\x00s\u0456\x89\x1c\xbb:?\xf0\x8d\b\x00\x00\u07d4\xfa\x1f\x19q\xa7u\xc3PO\xefPy\xf6@\xc2\u013c\xe7\xac\x05\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfa'\x9b\xfd\x87g\xf9V\xbf\u007f\xa0\xbdV`\x16\x8d\xa7V\x86\xbd\x89\x90\xf54`\x8ar\x88\x00\x00\xe0\x94\xfa'\xccI\xd0\vl\x98s6\xa8u\xae9\xdaX\xfb\x04\x1b.\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xfa(2\x99`=\x87X\xe8\u02b0\x82\x12],\x8f}DT)\x8a\x01[\xca\xcb\x1e\x05\x01\xae\x80\x00\u07d4\xfa+\xbc\xa1]?\u37ca2\x8e\x91\xf9\r\xa1Oz\xc6%=\x89\n\u05ce\xbcZ\xc6 \x00\x00\xe0\x94\xfa/\u049d\x03\xfe\xe9\xa0x\x93\xdf:&\x9fV\xb7/.\x1ed\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xfa3U2\x85\xa9sq\x9a\r_\x95o\xf8a\xb2\u061e\xd3\x04\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfa:\fK\x90?n\xa5.\xa7\xab{\x88c\xb6\xa6\x16\xadfP\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfa:\x1a\xa4H\x8b5\x1a\xa7V\f\xf5\xeec\n/\xd4\\2\"\x89/\xa4~j\xa74\r\x00\x00\u07d4\xfaA\tq\xad\"\x9c06\xf4\x1a\u03c5/*\u0259(\x19P\x89\u0633\x11\xa8\xdd\xfa|\x00\x00\u07d4\xfaD\xa8U\xe4\x04\xc8m\f\xa8\xef3$%\x1d\xfb4\x9cS\x9e\x89T\"S\xa1&\xce@\x00\x00\xe0\x94\xfaR\x01\xfe\x13B\xaf\x110{\x91B\xa0A$<\xa9./\t\x8a 8\x11j:\xc0C\x98\x00\x00\xe0\x94\xfa`\x86\x8a\xaf\xd4\xffL\\W\x91K\x8e\u054bBWs\u07e9\x8a\x01\xcf\xe5\xc8\b\xf3\x9f\xbc\x00\x00\u07d4\xfag\xb6{O7\xa0\x15\t\x15\x11\x0e\xde\a;\x05\xb8S\xbd\xa2\x89#\x19\xba\x94sq\xad\x00\x00\u07d4\xfah\xe0\xcb>\xdfQ\xf0\xa6\xf2\x11\u0272\xcb^\a<\x9b\xff\xe6\x89\x0f\xc969(\x01\xc0\x00\x00\xe0\x94\xfaj7\xf0\x18\xe9yg\x93\u007f\xc5\xe8a{\xa1\u05c6\xdd_w\x8a\x04<0\xfb\b\x84\xa9l\x00\x00\u07d4\xfav\x06C[5l\xee%{\xd2\xfc\xd3\xd9\xea\xcb<\xd1\xc4\xe1\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xfaz\xdff\v\x8d\x99\xce\x15\x93=|_\a/<\xbe\xb9\x9d3\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4\xfa\x86\xca'\xbf(T\u0648p\x83\u007f\xb6\xf6\xdf\xe4\xbfdS\xfc\x89\x11u~\x85%\xcf\x14\x80\x00\u07d4\xfa\x8c\xf4\xe6'i\x8c]W\x88\xab\xb7\x88\x04\x17\xe7P#\x13\x99\x89\xe6\x1a6\x96\xee\xf6\x10\x00\x00\u07d4\xfa\x8e;\x1f\x13C9\x00s}\xaa\xf1\xf6)\x9cH\x87\xf8[_\x89&\u009eG\u0104L\x00\x00\u07d4\xfa\x9e\xc8\xef\xe0\x86\x86\xfaX\xc1\x813Xr\xbai\x85`\ucac9lj\xccg\u05f1\xd4\x00\x00\u07d4\xfa\xad\x90]\x84|{#A\x8a\xee\xcb\xe3\xad\u06cd\xd3\xf8\x92J\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xfa\xae\xba\x8f\xc0\xbb\xdaU<\xa7.0\xef=s.&\xe8 A\x89H\x8d(*\xaf\xc9\xf6\x80\x00\u07d4\xfa\xb4\x87P\r\xf2\x0f\xb8>\xbe\xd9\x16y\x1dV\x17r\xad\xbe\xbf\x89lkLM\xa6\u077e\x00\x00\u07d4\xfa\xc5\u0294u\x80x\xfb\xfc\xcd\x19\xdb5X\xda~\u8827h\x897(\xa6+\r\xcf\xf6\x00\x00\u07d4\xfa\xd9j\xb6\xacv\x8a\xd5\t\x94R\xacGw\xbd\x1aG\xed\u010f\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xfa\xe7g\x19\xd9~\xacA\x87\x04(\xe9@'\x9d\x97\xddW\xb2\xf6\x8a\x14\u06f2\x19\\\xa2(\x90\x00\x00\u07d4\xfa\u8053pG\x89Zf\f\xf2)v\x0f'\xe6h(\xd6C\x89\t\xdd\xc1\xe3\xb9\x01\x18\x00\x00\u07d4\xfa\xe9,\x13p\xe9\u115a]\xf8;V\xd0\xf5\x86\xaa;@L\x89\x05\u0174\xf3\xd8C\x98\x00\x00\xe0\x94\xfa\xf5\xf0\xb7\xb6\xd5X\xf5\t\r\x9e\xa1\xfb-B%\x9cX`x\x8a\x01Z\xff\xb8B\fkd\x00\x00\xe0\x94\xfb\x12o\x0e\xc7i\xf4\x9d\xce\xfc\xa2\xf2\x00(dQX0\x84\xb8\x8a\x01\x0f\xcb\xc25\x03\x96\xbf\x00\x00\xe0\x94\xfb\x13^\xb1Z\x8b\xacr\xb6\x99\x154*`\xbb\xc0k~\a|\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xfb\"<\x1e\"\xea\xc1&\x9b2\xee\x15jS\x85\x92.\xd3o\xb8\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfb7\xcfkO\x81\xa9\xe2\"\xfb\xa2.\x9b\xd2KP\x98\xb73\u03c9\x02\x1auJm\xc5(\x00\x00\u07d4\xfb8`\xf4\x12\x1cC.\xbd\xc8\xecj\x031\xb1\xb7\ty.\x90\x89 \x8c9J\xf1\u0208\x00\x00\u07d4\xfb9\x18\x9a\xf8v\xe7b\xc7\x1dl>t\x18\x93\xdf\"l\xed\u0589\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xfb:\v\rkjq\x8fo\xc0)*\x82]\xc9$z\x90\xa5\u0409\n\xd6\xdd\x19\x9e\x97[\x00\x00\xe0\x94\xfb?\xa1\xac\b\xab\xa9\xcc;\xf0\xfe\x9dH8 h\x8fe\xb4\x10\x8a\x06ZM\xa2]0\x16\xc0\x00\x00\u07d4\xfb?\xe0\x9b\xb86\x86\x15)\xd7Q\x8d\xa2v5\xf58PV\x15\x89K\xe3\x92\x16\xfd\xa0p\x00\x00\xe0\x94\xfbQ%\xbf\x0f^\xb0\xb6\xf0 \xe5k\xfc/\xdf=@,\t~\x8a\x01@a\xb9\xd7z^\x98\x00\x00\u07d4\xfbU\x18qL\xef\xc3m\x04\x86]\xe5\x91^\xf0\xffG\xdf\xe7C\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfb_\xfa\xa0\xf7aW&5x\x91GX\x18\x93\x9d 7\u03d6\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfbh\\\x15\xe49\x96^\xf6&\xbf\r\x83L\u0468\x9f+V\x95\x89\u0556{\xe4\xfc?\x10\x00\x00\u07d4\xfbtK\x95\x1d\tK1\x02b\xc8\xf9\x86\xc8`\u07da\xb1\xdee\x89\x02\xd1\xc5\x15\xf1\xcbJ\x80\x00\u07d4\xfby\xab\u06d2\\U\xb9\xf9\x8e\xfe\xefd\xcf\xc9\xeba\xf5\x1b\xb1\x89a@\xc0V\xfb\n\xc8\x00\x00\u07d4\xfb\x81\x13\xf9M\x91s\xee\xfdZ0s\xf5\x16\x80:\x10\xb2\x86\xae\x89\x04V9\x18$O@\x00\x00\u07d4\xfb\x84,\xa2\xc5\xef\x139\x17\xa26\xa0\u052c@i\x01\x10\xb08\x89\x10\x96\x9ab\xbe\x15\x88\x00\x00\u07d4\xfb\x91\xfb\x1aiUS\xf0\u018e!'m\xec\xf0\xb89\t\xb8m\x89\x05l\x006\x17\xafx\x00\x00\u07d4\xfb\x94s\xcfw\x125\n\x1f\xa09Rs\xfc\x80V\aR\xe4\xfb\x89\x06\xaf!\x98\xba\x85\xaa\x00\x00\xe0\x94\xfb\x94\x9cd\u007f\xdc\xfd%\x14\xc7\u054e1\xf2\x8aS-\x8cX3\x8a\x04<3\xc1\x93ud\x80\x00\x00\u07d4\xfb\xa5HmS\xc6\xe2@IBA\xab\xf8~C\xc7`\rA:\x89k\xbfaIIH4\x00\x00\u07d4\xfb\xb1a\xfe\x87_\t)\nK&+\xc6\x01\x10\x84\x8f\r\"&\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfb\xbb\xeb\u03fe#^W\xdd#\x06\xad\x1a\x9e\u0141\xc7\xf9\xf4\x8f\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\xfb\xc0\x1d\xb5NG\xcd\xc3\xc48iJ\xb7\x17\xa8V\xc2?\xe6\xe9\x8a\x01\xcaqP\xab\x17OG\x00\x00\xe0\x94\xfb\xcf\xccJ{\x0f&\xcf&\xe9\xf33!2\xe2\xfcj#\af\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xfb\xe7\x16\"\xbc\xbd1\xc1\xa3iv\xe7\xe5\xf6p\xc0\u007f\xfe\x16\u0789\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xfb\xed\xe3,4\x9f3\x00\xefL\xd3;M\xe7\xdc\x18\xe4C\xd3&\x89\xabM\xcf9\x9a:`\x00\x00\u07d4\xfb\xf2\x04\xc8\x13\xf86\xd89b\u01c7\fx\b\xca4\u007f\xd3>\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xfb\xf7Y3\xe0\x1bu\xb1T\xef\x06i\ak\xe8\u007fb\xdf\xfa\xe1\x8a\x10\x84cr\xf2I\xd4\xc0\x00\x00\u07d4\xfc\x00\x96\xb2\x1e\x95\xac\xb8\xd6\x19\xd1v\xa4\xa1\xd8\xd5)\xba\xdb\xef\x89\x14\xd9i;\xcb\xec\x02\x80\x00\xe0\x94\xfc\x00\xa4 \xa3a\a\xdf\xd5\xf4\x95\x12\x8a_\u5af2\xdb\x0f4\x8a\x01C\x17\x9d\x86\x91\x10 \x00\x00\xe0\x94\xfc\x01\x8ai\n\xd6tm\xbe:\u03d7\x12\xdd\xcaR\xb6%\x009\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\u07d4\xfc\x02s@3\xe5\u007fpQ~\n\xfc~\xe6$a\xf0o\xad\x8e\x89\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\xfc\x0e\xe6\xf7\u00b3qJ\xe9\x91lEVf\x05\xb6V\xf3$A\x89_h\xe8\x13\x1e\u03c0\x00\x00\u07d4\xfc\x10\xb7\xa6{2h\xd53\x1b\xfbj\x14\xde\xf5\xeaJ\x16,\xa3\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xfc\x15\u02d9\xa8\xd1\x03\v\x12w\n\xdd\x03:y\xee\r\f\x90\x8c\x89\x12\xfa\x00\xbdR\xe6$\x00\x00\u07d4\xfc)R\xb4\u011f\xed\u043c\x05(\xa3\bI^mj\x1cq\u0589lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xfc,\x1f\x88\x96\x1d\x01\x9c>\x9e\xa30\t\x15.\x06\x93\xfb\xf8\x8a\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\xe0\x94\xfc6\x11\x05\u0750\xf9\xed\xe5fI\x9di\xe9\x13\x03\x95\xf1*\u020aS\xa4\xfe/ N\x80\xe0\x00\x00\u07d4\xfc7/\xf6\x92|\xb3\x96\xd9\xcf)\x805\x00\x11\r\xa62\xbcR\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfc9\xbeA\tK\x19\x97\xd2\x16\x9e\x82d\xc2\u00fa\xa6\u025b\u0109lk\x93[\x8b\xbd@\x00\x00\u07d4\xfc=\"k\xb3jX\xf5&V\x88W\xb0\xbb\x12\xd1\t\xec\x93\x01\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfcC\x82\x9a\u01c7\xff\x88\xaa\xf1\x83\xba5*\xad\xbfZ\x15\xb1\x93\x89\u05ac\n+\x05R\xe0\x00\x00\u07d4\xfcI\xc1C\x9aA\u05b3\xcf&\xbbg\xe06R$\xe5\xe3\x8f_\x8966\u05ef^\u024e\x00\x00\u07d4\xfcU\x00\x82Q\x05\xcfq*1\x8a^\x9c;\xfci\u021d\f\x12\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\xe0\x94\xfcf\xfa\xba'\u007fK]\xe6J\xd4^\xb1\x9c1\xe0\f\xed>\u054a\x011\xbe\xb9%\xff\xd3 \x00\x00\xe0\x94\xfc~\"\xa5\x03\xecZ\xbe\x9b\b\xc5\v\xd1I\x99\xf5 \xfaH\x84\x8a\x01ZG}\xfb\xe1\xea\x14\x80\x00\u07d4\xfc\x82\x15\xa0\xa6\x99\x13\xf6*C\xbf\x1c\x85\x90\xb9\xdd\xcd\r\x8d\u06c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xfc\x98\x9c\xb4\x87\xbf\x1a}\x17\xe4\xc1\xb7\u0137\xaa\xfd\xdak\n\x8d\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\xe0\x94\xfc\x9b4td\xb2\xf9\x92\x9d\x80~\x03\x9d\xaeH\xd3\u064d\xe3y\x8a\x02\xf6\xf1\a\x80\xd2,\xc0\x00\x00\u07d4\xfc\xa4;\xbc#\xa0\xd3!\xba\x9eF\xb9)s\\\xe7\xd8\xef\f\x18\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfc\xa7>\xff\x87q\xc0\x10;\xa3\xcc\x1a\x9c%\x94H\xc7*\xbf\v\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfc\xad\xa3\x00(?k\xcc\x13J\x91Eg`\xb0\xd7}\xe4\x10\xe0\x89lk\x93[\x8b\xbd@\x00\x00\xe0\x94\xfc\xbc\\q\xac\xe7\x97AE\v\x01,\xf6\xb8\xd3\xf1}\xb6\x8ap\x8a\x02\x05\xb4\u07e1\xeetx\x00\x00\u07d4\xfc\xbd\x85\xfe\xeajuO\xcf4ID\x9e7\xff\x97\x84\xf7w<\x89\xa7J\xdai\xab\xd7x\x00\x00\xe0\x94\xfc\xc9\u0524&.z\x02z\xb7Q\x91\x10\xd8\x02\u0115\xce\xea9\x8a\x01YQ\x82\"K&H\x00\x00\xe0\x94\xfc\xcd\r\x1e\xce\xe2z\xdd\xea\x95\xf6\x85z\xee\xc8\u01e0K(\xee\x8a\x02\x1e\x19\xe0\u027a\xb2@\x00\x00\xe0\x94\xfc\u0434\x82|\xd2\b\xff\xbf^u\x9d\xba\x8c<\xc6\x1d\x8c,<\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xfc\xe0\x89c\\\xe9z\xba\xc0kD\x81\x9b\xe5\xbb\n>.\v7\x89\x05\x03\x92\nv0\xa7\x80\x00\u07d4\xfc\xf1\x99\xf8\xb8T\"/\x18.N\x1d\t\x9dN2>*\xae\x01\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfc\xfc:P\x04\xd6xa?\v6\xa6B&\x9a\u007f7\x1c?j\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfd\x19\x1a5\x15}x\x13s\xfbA\x1b\xf9\xf2R\x90\x04|^\xef\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfd\x1f\xaa4{\x0f\u0300L-\xa8l6\xd5\xf1\u044bp\x87\xbb\x89\x02\xd6\xeb$z\x96\xf6\x00\x00\u07d4\xfd\x1f\xb5\xa8\x9a\x89\xa7!\xb8yph\xfb\xc4\u007f>\x9dR\xe1I\x89\f\u0435\x83\u007f\xc6X\x00\x00\u07d4\xfd OOJ\xba%%\xbar\x8a\xfd\xf7\x87\x92\xcb\u07b75\xae\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfd'W\xcc5Q\xa0\x95\x87\x8d\x97\x87V\x15\xfe\fj2\xaa\x8a\x89 m\xb1R\x99\xbe\xac\x00\x00\u07d4\xfd(r\u045eW\x85<\xfa\x16\xef\xfe\x93\u0431\xd4{O\x93\xfb\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xfd))'\x1e\x9d \x95\xa2dv~{\r\xf5.\xa0\xd1\xd4\x00\x89\xa2\xa1\xeb%\x1bZ\xe4\x00\x00\u07d4\xfd7z8Rr\x90\f\xb46\xa3\xbbyb\xcd\xff\xe9?]\xad\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfd@$+\xb3Jp\x85^\xf0\xfd\x90\xf3\x80-\xec!6\xb3'\x89h\xa8u\a>)$\x00\x00\xe0\x94\xfdE,9i\xec\xe3\x80\x1cT \xf1\xcd\u02a1\xc7\x1e\xd2=\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\u07d4\xfdKU\x1fo\xdb\u0366\xc5\x11\xb5\xbb7\"P\xa6\xb7\x83\xe54\x89\x01\x1d\xe1\xe6\xdbE\f\x00\x00\u07d4\xfdK\x98\x95X\xae\x11\xbe\f;6\xe2\xd6\xf2\xa5J\x93C\xca.\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfdM\xe8\xe3t\x8a(\x9c\xf7\xd0`Q}\x9d88\x8d\xb0\x1f\xb8\x89\r\x8drkqw\xa8\x00\x00\u07d4\xfdZc\x15\u007f\x91O\u04d8\uac5c\x13}\xd9U\v\xb7q\\\x89\x05k\xc7^-c\x10\x00\x00\u07d4\xfd`\u04b5\xaf=5\xf7\xaa\xf0\u00d3\x05.y\xc4\xd8#\u0645\x89\x03\x0e\xb5\r.\x14\b\x00\x00\u07d4\xfdhm\xe5?\xa9\u007f\x99c\x9e%hT\x97 \xbcX\x8c\x9e\xfc\x89j\xc5\xc6-\x94\x86\a\x00\x00\u07d4\xfd~\u078fR@\xa0eA\xebi\x9dx,/\x9a\xfb!p\xf6\x89Hz\x9a0E9D\x00\x00\u07d4\xfd\x81+\u019f\xb1p\xefW\xe22~\x80\xaf\xfd\x14\xf8\xe4\xb6\u0489lk\x93[\x8b\xbd@\x00\x00\u07d4\xfd\x88\xd1\x14\"\x0f\b\x1c\xb3\xd5\xe1[\xe8\x15*\xb0sfWj\x89\x10CV\x1a\x88)0\x00\x00\u07d4\xfd\x91\x856\xa8\xef\xa6\xf6\xce\xfe\x1f\xa1\x159\x95\xfe\xf5\xe3=;\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xfd\x92\x0fr&\x82\xaf\xb5\xafE\x1b\x05D\xd4\xf4\x1b;\x9dWB\x89~R\x05j\x12?<\x00\x00\u07d4\xfd\x95y\xf1\x19\xbb\xc8\x19\xa0+a\u3348\x03\xc9B\xf2M2\x89\x05\xb9~\x90\x81\xd9@\x00\x00\u07d4\xfd\xa0\xce\x153\a\a\xf1\v\xce2\x01\x17- \x18\xb9\xdd\xeat\x89\x02\xd0A\xd7\x05\xa2\xc6\x00\x00\xe0\x94\xfd\xa3\x04(\x19\xaf>f)\x00\xe1\xb9+CX\xed\xa6\xe9%\x90\x8a\x19\a\xa2\x84\u054fc\xe0\x00\x00\u07d4\xfd\xa6\x81\x0e\xa5\xac\x98]o\xfb\xf1\xc5\x11\xf1\xc1B\xed\xcf\xdd\xf7\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xfd\xb39D\xf26\x06\x15\xe5\xbe#\x95w\u0221\x9b\xa5-\x98\x87\x89 \x9d\x92/RY\xc5\x00\x00\u07d4\xfd\xbaSY\xf7\xec;\xc7p\xacI\x97]\x84N\xc9qbV\xf1\x8965\u026d\xc5\u07a0\x00\x00\xe0\x94\xfd\xc4\xd4vZ\x94/[\xf9i1\xa9\xe8\xccz\xb8\xb7W\xffL\x8a\x12lG\x8a\x0e>\xa8`\x00\x00\xe0\x94\xfd\xcd]\x80\xb1\x05\x89zW\xab\xc4xev\x8b)\x00RB\x95\x8a\x01Z\xf1\u05cbX\xc4\x00\x00\x00\u0794\xfd\xd1\x19_y}O5q}\x15\xe6\xf9\x81\n\x9a?\xf5T`\x88\xfc\x93c\x92\x80\x1c\x00\x00\u07d4\xfd\xd5\x02\xa7N\x81;\u03e3U\xce\xda<\x17ojhq\xaf\u007f\x89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xfd\u357c\vm\\\xbbL\x1d\x8f\xea>\vK\xffc^\x9d\xb7\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfd\xea\xac*\xcf\x1d\x13\x8e\x19\xf2\xfc?\x9f\xb7E\x92\xe3\ud04a\x89$=M\x18\"\x9c\xa2\x00\x00\u07d4\xfd\xec\xc8-\xdf\xc5a\x92\xe2oV<=h\xcbTJ\x96\xbf\xed\x89\x17\xda:\x04\u01f3\xe0\x00\x00\u07d4\xfd\xf4#C\x01\x9b\v\fk\xf2`\xb1s\xaf\xab~E\xb9\xd6!\x89lj\xccg\u05f1\xd4\x00\x00\u07d4\xfd\xf4I\xf1\b\xc6\xfbOZ+\b\x1e\xed~E\u645eM%\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfd\xfda4\xc0J\x8a\xb7\xeb\x16\xf0\x06C\xf8\xfe\xd7\u06aa\ucc89\x15\xaf\x1dx\xb5\x8c@\x00\x00\u07d4\xfe\x00\xbfC\x99\x11\xa5S\x98-\xb68\x03\x92E\xbc\xf02\xdb\u0709\x15[\xd90\u007f\x9f\xe8\x00\x00\u07d4\xfe\x01n\xc1~\xc5\xf1\x0e;\xb9\x8f\xf4\xa1\xed\xa0E\x15v\x82\xab\x89\x14_T\x02\xe7\xb2\xe6\x00\x00\u07d4\xfe\x0e0\xe2\x14)\rt=\xd3\x0e\xb0\x82\xf1\xf0\xa5\"Z\xdea\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xfe!\v\x8f\x04\xdcmOv!j\xcf\xcb\u055b\xa8;\xe9\xb60\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfe\"\xa0\xb3\x88f\x8d\x1a\xe2d>w\x1d\xac\xf3\x8aCB#\u0309\xd8\xdb^\xbd{&8\x00\x00\u07d4\xfe6&\x88\x84_\xa2D\u0300~K\x110\xeb7A\xa8\x05\x1e\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfe8'\xd5v0\u03c7a\xd5\x12y{\v\x85\x8eG\x8b\xbd\x12\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfeA\x8bB\x1a\x9cm76\x02y\x04u\xd20>\x11\xa7Y0\x897\b\xba\xed=h\x90\x00\x00\u07d4\xfeBI\x12yP\xe2\xf8\x96\xec\x0e~.=\x05Z\xab\x10U\x0f\x89$=M\x18\"\x9c\xa2\x00\x00\xe0\x94\xfeM\x84\x03!o\xd5qW+\xf1\xbd\xb0\x1d\x00W\x89x\u0588\x8a\x02\x15\xf85\xbcv\x9d\xa8\x00\x00\u07d4\xfeS\xb9I\x89\u0619d\xda aS\x95&\xbb\xe9y\xdd.\xa9\x89h\xa8u\a>)$\x00\x00\u07d4\xfeT\x9b\xbf\xe6G@\x18\x98\x92\x93%8\u06afF\u04b6\x1dO\x89\x02+\x1c\x8c\x12'\xa0\x00\x00\xe0\x94\xfea]\x97\\\b\x87\xe0\xc9\x11>\xc7)\x84 \xa7\x93\xaf\x8b\x96\x8a\x01\xb1\xaeMn.\xf5\x00\x00\x00\u07d4\xfee\xc4\x18\x8dy\"Wi\td D\xfd\xc5#\x95V\x01e\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xfei\u007f\xf2,\xa5G\xbf\xc9^3\xd9`\xda`\\gc\xf3[\x89G\xd4\x11\x9f\xd9`\x94\x00\x00\u07d4\xfej\x89[y\\\xb4\xbf\x85\x90=<\xe0\x9cZ\xa49S\u04ff\x89\xb8Pz\x82\a( \x00\x00\u07d4\xfeo_B\xb6\x19;\x1a\xd1b\x06\u4bf5#\x9dM}\xb4^\x89]\u0212\xaa\x111\xc8\x00\x00\u07d4\xfep\x11\xb6\x98\xbf3q\x13-tE\xb1\x9e\xb5\xb0\x945j\xee\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfe\x80\xe9#-\xea\xff\x19\xba\xf9\x98i\x88:K\xdf\x00\x04\xe5<\x89.b\xf2\ni\xbe@\x00\x00\u07d4\xfe\x8en6eW\r\xffz\x1b\xdaiz\xa5\x89\xc0\xb4\xe9\x02J\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfe\x8f\x1f\u072b\u007f\xbe\u0266\xa3\xfc\xc5\aa\x96\x00P\\6\xa3\x89\x01\x11du\x9f\xfb2\x00\x00\u07d4\xfe\x91\xec\xcf+\xd5f\xaf\xa1\x16\x96\xc5\x04\x9f\xa8Lic\nR\x89i*\xe8\x89p\x81\xd0\x00\x00\u07d4\xfe\x96\xc4\xcd8\x15b@\x1a\xa3*\x86\xe6[\x9dR\xfa\x8a\xee'\x89\x8f\x1d\\\x1c\xae7@\x00\x00\u07d4\xfe\x98\xc6d\xc3\xe4G\xa9^i\xbdX!q\xb7\x17n\xa2\xa6\x85\x89\xd8\xd7&\xb7\x17z\x80\x00\x00\u07d4\xfe\x9a\xd1.\xf0]m\x90&\x1f\x96\xc84\n\x03\x81\x97M\xf4w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfe\x9c\x0f\xff\xef\xb8\x03\b\x12V\xc0\xcfMfY\xe6\xd3>\xb4\xfb\x89R\xd5B\x80O\x1c\xe0\x00\x00\u07d4\xfe\x9c\xfc;\xb2\x93\u0772\x85\xe6%\xf3X/t\xa6\xb0\xa5\xa6\u0349j\xcb=\xf2~\x1f\x88\x00\x00\xe0\x94\xfe\x9e\x11\x97\u05d7JvH\xdc\u01e01\x12\xa8\x8e\xdb\xc9\x04]\x8a\x01\n\xfc\x1a\xde;N\xd4\x00\x00\xe0\x94\xfe\xac\xa2\xactbK\xf3H\xda\u0258QC\xcf\xd6R\xa4\xbeU\x8a\x05\x89\u007f\u02f0)\x14\b\x80\x00\u07d4\xfe\xad\x18\x03\xe5\xe77\xa6\x8e\x18G-\x9a\xc7\x15\xf0\x99L\u00be\x89\x1b\x1a\xe4\xd6\xe2\xefP\x00\x00\u07d4\xfe\xb8\xb8\xe2\xafqj\xe4\x1f\xc7\xc0K\xcf)T\x01VF\x1ek\x89TQt\xa5(\xa7z\x00\x00\u07d4\xfe\xb9-0\xbf\x01\xff\x9a\x19\x01flUsS+\xfa\a\xee\xec\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xfe\xbc1s\xbc\x90r\x13cT\x00+{O\xb3\xbf\xc5?\"\xf1\x89\x14\x0e\xc8\x0f\xa7\xee\x88\x00\x00\u07d4\xfe\xbdH\xd0\xff\xdb\xd5el\xd5\xe6\x866:a\x14R(\xf2y\x89\x97\xc9\xceL\xf6\xd5\xc0\x00\x00\u07d4\xfe\xbd\x9f\x81\xcfx\xbd_\xb6\u0139\xa2K\xd4\x14\xbb\x9b\xfaLN\x89k\xe1\x0f\xb8\xedn\x13\x80\x00\u07d4\xfe\xc0o\xe2{D\u01c4\xb29n\xc9/{\x92:\xd1~\x90w\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xfe\xc1NT\x85\xde+>\xef^t\xc4aF\u06ceEN\x035\x89\t\xb4\x1f\xbf\x9e\n\xec\x00\x00\u07d4\xfe\xd8Gm\x10\u0544\xb3\x8b\xfag7`\x0e\xf1\x9d5\xc4\x1e\u0609b\xa9\x92\xe5:\n\xf0\x00\x00\u07d4\xfe\xef;n\xab\xc9J\xff\xd31\f\x1cM\x0ee7^\x13\x11\x19\x89\x01\x15\x8eF\t\x13\xd0\x00\x00\u07d4\xfe\xf0\x9dp$?9\xed\x8c\xd8\x00\xbf\x96QG\x9e\x8fJ\xca<\x89\n\u05ce\xbcZ\xc6 \x00\x00\u07d4\xfe\xf3\xb3\u07ad\x1ai&\u051a\xa3+\x12\xc2*\xf5M\x9f\xf9\x85\x8965\u026d\xc5\u07a0\x00\x00\u07d4\xff\v|\xb7\x1d\xa9\xd4\xc1\xean\xcc(\xeb\xdaPLc\xf8/\u04498\x8a\x88]\xf2\xfcl\x00\x00\u07d4\xff\f\xc6\u73c9lk\x93[\x8b\xbd@\x00\x00\u07d4\xff'&)AH\xb8lx\xa97$\x97\xe4Y\x89\x8e\xd3\xfe\xe3\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xff=\xedz@\u04ef\xf0\u05e8\xc4_\xa6\x13j\xa0C=\xb4W\x89lh\xcc\u041b\x02,\x00\x00\u07d4\xff>\xeeW\xc3Mm\xae\x97\r\x8b1\x11\x17\xc55\x86\xcd5\x02\x89\\(=A\x03\x94\x10\x00\x00\u07d4\xff>\xf6\xba\x15\x1c!\xb5\x99\x86\xaed\xf6\xe8\"\x8b\u0262\xc73\x89lk\x93[\x8b\xbd@\x00\x00\u07d4\xffA\xd9\xe1\xb4\xef\xfe\x18\u0630\xd1\xf6?\xc4%_\xb4\xe0l=\x89Hz\x9a0E9D\x00\x00\u07d4\xffE\xcb4\xc9(6M\x9c\xc9\u063b\x0074ta\x8f\x06\xf3\x89\x05k\xc7^-c\x10\x00\x00\xe0\x94\xffI\xa7u\x81N\xc0\x00Q\xa7\x95\xa8u\xde$Y.\xa4\x00\u050a*Z\x05\x8f\u0095\xed\x00\x00\x00\u07d4\xffJ@\x8fP\xe9\xe7!F\xa2\x8c\xe4\xfc\x8d\x90'\x1f\x11n\x84\x89j\xcb=\xf2~\x1f\x88\x00\x00\u07d4\xffM\x9c\x84\x84\xc4\x10T\x89H\xa4\x80\xc2?\x80\xc2@\x80\xc2A\x80\xc2B\x80\xc2C\x80\xc2D\x80\xc2E\x80\xc2F\x80\xc2G\x80\xc2H\x80\xc2I\x80\xc2J\x80\xc2K\x80\xc2L\x80\xc2M\x80\xc2N\x80\xc2O\x80\xc2P\x80\xc2Q\x80\xc2R\x80\xc2S\x80\xc2T\x80\xc2U\x80\xc2V\x80\xc2W\x80\xc2X\x80\xc2Y\x80\xc2Z\x80\xc2[\x80\xc2\\\x80\xc2]\x80\xc2^\x80\xc2_\x80\xc2`\x80\xc2a\x80\xc2b\x80\xc2c\x80\xc2d\x80\xc2e\x80\xc2f\x80\xc2g\x80\xc2h\x80\xc2i\x80\xc2j\x80\xc2k\x80\xc2l\x80\xc2m\x80\xc2n\x80\xc2o\x80\xc2p\x80\xc2q\x80\xc2r\x80\xc2s\x80\xc2t\x80\xc2u\x80\xc2v\x80\xc2w\x80\xc2x\x80\xc2y\x80\xc2z\x80\xc2{\x80\xc2|\x80\xc2}\x80\xc2~\x80\xc2\u007f\x80\u00c1\x80\x80\u00c1\x81\x80\u00c1\x82\x80\u00c1\x83\x80\u00c1\x84\x80\u00c1\x85\x80\u00c1\x86\x80\u00c1\x87\x80\u00c1\x88\x80\u00c1\x89\x80\u00c1\x8a\x80\u00c1\x8b\x80\u00c1\x8c\x80\u00c1\x8d\x80\u00c1\x8e\x80\u00c1\x8f\x80\u00c1\x90\x80\u00c1\x91\x80\u00c1\x92\x80\u00c1\x93\x80\u00c1\x94\x80\u00c1\x95\x80\u00c1\x96\x80\u00c1\x97\x80\u00c1\x98\x80\u00c1\x99\x80\u00c1\x9a\x80\u00c1\x9b\x80\u00c1\x9c\x80\u00c1\x9d\x80\u00c1\x9e\x80\u00c1\x9f\x80\u00c1\xa0\x80\u00c1\xa1\x80\u00c1\xa2\x80\u00c1\xa3\x80\u00c1\xa4\x80\u00c1\xa5\x80\u00c1\xa6\x80\u00c1\xa7\x80\u00c1\xa8\x80\u00c1\xa9\x80\u00c1\xaa\x80\u00c1\xab\x80\u00c1\xac\x80\u00c1\xad\x80\u00c1\xae\x80\u00c1\xaf\x80\u00c1\xb0\x80\u00c1\xb1\x80\u00c1\xb2\x80\u00c1\xb3\x80\u00c1\xb4\x80\u00c1\xb5\x80\u00c1\xb6\x80\u00c1\xb7\x80\u00c1\xb8\x80\u00c1\xb9\x80\u00c1\xba\x80\u00c1\xbb\x80\u00c1\xbc\x80\u00c1\xbd\x80\u00c1\xbe\x80\u00c1\xbf\x80\u00c1\xc0\x80\u00c1\xc1\x80\u00c1\u0080\u00c1\u00c0\u00c1\u0100\u00c1\u0140\u00c1\u0180\u00c1\u01c0\u00c1\u0200\u00c1\u0240\u00c1\u0280\u00c1\u02c0\u00c1\u0300\u00c1\u0340\u00c1\u0380\u00c1\u03c0\u00c1\u0400\u00c1\u0440\u00c1\u0480\u00c1\u04c0\u00c1\u0500\u00c1\u0540\u00c1\u0580\u00c1\u05c0\u00c1\u0600\u00c1\u0640\u00c1\u0680\u00c1\u06c0\u00c1\u0700\u00c1\u0740\u00c1\u0780\u00c1\u07c0\u00c1\xe0\x80\u00c1\xe1\x80\u00c1\xe2\x80\u00c1\xe3\x80\u00c1\xe4\x80\u00c1\xe5\x80\u00c1\xe6\x80\u00c1\xe7\x80\u00c1\xe8\x80\u00c1\xe9\x80\u00c1\xea\x80\u00c1\xeb\x80\u00c1\xec\x80\u00c1\xed\x80\u00c1\xee\x80\u00c1\xef\x80\u00c1\xf0\x80\u00c1\xf1\x80\u00c1\xf2\x80\u00c1\xf3\x80\u00c1\xf4\x80\u00c1\xf5\x80\u00c1\xf6\x80\u00c1\xf7\x80\u00c1\xf8\x80\u00c1\xf9\x80\u00c1\xfa\x80\u00c1\xfb\x80\u00c1\xfc\x80\u00c1\xfd\x80\u00c1\xfe\x80\u00c1\xff\x80\u3507KT\xa8\xbd\x15)f\xd6?pk\xae\x1f\xfe\xb0A\x19!\xe5\x8d\f\x9f,\x9c\xd0Ft\xed\xea@\x00\x00\x00" +const ropstenAllocData = "\xf9\x03\xa4\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x80\xc2\v\x80\xc2\f\x80\xc2\r\x80\xc2\x0e\x80\xc2\x0f\x80\xc2\x10\x80\xc2\x11\x80\xc2\x12\x80\xc2\x13\x80\xc2\x14\x80\xc2\x15\x80\xc2\x16\x80\xc2\x17\x80\xc2\x18\x80\xc2\x19\x80\xc2\x1a\x80\xc2\x1b\x80\xc2\x1c\x80\xc2\x1d\x80\xc2\x1e\x80\xc2\x1f\x80\xc2 \x80\xc2!\x80\xc2\"\x80\xc2#\x80\xc2$\x80\xc2%\x80\xc2&\x80\xc2'\x80\xc2(\x80\xc2)\x80\xc2*\x80\xc2+\x80\xc2,\x80\xc2-\x80\xc2.\x80\xc2/\x80\xc20\x80\xc21\x80\xc22\x80\xc23\x80\xc24\x80\xc25\x80\xc26\x80\xc27\x80\xc28\x80\xc29\x80\xc2:\x80\xc2;\x80\xc2<\x80\xc2=\x80\xc2>\x80\xc2?\x80\xc2@\x80\xc2A\x80\xc2B\x80\xc2C\x80\xc2D\x80\xc2E\x80\xc2F\x80\xc2G\x80\xc2H\x80\xc2I\x80\xc2J\x80\xc2K\x80\xc2L\x80\xc2M\x80\xc2N\x80\xc2O\x80\xc2P\x80\xc2Q\x80\xc2R\x80\xc2S\x80\xc2T\x80\xc2U\x80\xc2V\x80\xc2W\x80\xc2X\x80\xc2Y\x80\xc2Z\x80\xc2[\x80\xc2\\\x80\xc2]\x80\xc2^\x80\xc2_\x80\xc2`\x80\xc2a\x80\xc2b\x80\xc2c\x80\xc2d\x80\xc2e\x80\xc2f\x80\xc2g\x80\xc2h\x80\xc2i\x80\xc2j\x80\xc2k\x80\xc2l\x80\xc2m\x80\xc2n\x80\xc2o\x80\xc2p\x80\xc2q\x80\xc2r\x80\xc2s\x80\xc2t\x80\xc2u\x80\xc2v\x80\xc2w\x80\xc2x\x80\xc2y\x80\xc2z\x80\xc2{\x80\xc2|\x80\xc2}\x80\xc2~\x80\xc2\u007f\x80\u00c1\x80\x80\u00c1\x81\x80\u00c1\x82\x80\u00c1\x83\x80\u00c1\x84\x80\u00c1\x85\x80\u00c1\x86\x80\u00c1\x87\x80\u00c1\x88\x80\u00c1\x89\x80\u00c1\x8a\x80\u00c1\x8b\x80\u00c1\x8c\x80\u00c1\x8d\x80\u00c1\x8e\x80\u00c1\x8f\x80\u00c1\x90\x80\u00c1\x91\x80\u00c1\x92\x80\u00c1\x93\x80\u00c1\x94\x80\u00c1\x95\x80\u00c1\x96\x80\u00c1\x97\x80\u00c1\x98\x80\u00c1\x99\x80\u00c1\x9a\x80\u00c1\x9b\x80\u00c1\x9c\x80\u00c1\x9d\x80\u00c1\x9e\x80\u00c1\x9f\x80\u00c1\xa0\x80\u00c1\xa1\x80\u00c1\xa2\x80\u00c1\xa3\x80\u00c1\xa4\x80\u00c1\xa5\x80\u00c1\xa6\x80\u00c1\xa7\x80\u00c1\xa8\x80\u00c1\xa9\x80\u00c1\xaa\x80\u00c1\xab\x80\u00c1\xac\x80\u00c1\xad\x80\u00c1\xae\x80\u00c1\xaf\x80\u00c1\xb0\x80\u00c1\xb1\x80\u00c1\xb2\x80\u00c1\xb3\x80\u00c1\xb4\x80\u00c1\xb5\x80\u00c1\xb6\x80\u00c1\xb7\x80\u00c1\xb8\x80\u00c1\xb9\x80\u00c1\xba\x80\u00c1\xbb\x80\u00c1\xbc\x80\u00c1\xbd\x80\u00c1\xbe\x80\u00c1\xbf\x80\u00c1\xc0\x80\u00c1\xc1\x80\u00c1\u0080\u00c1\u00c0\u00c1\u0100\u00c1\u0140\u00c1\u0180\u00c1\u01c0\u00c1\u0200\u00c1\u0240\u00c1\u0280\u00c1\u02c0\u00c1\u0300\u00c1\u0340\u00c1\u0380\u00c1\u03c0\u00c1\u0400\u00c1\u0440\u00c1\u0480\u00c1\u04c0\u00c1\u0500\u00c1\u0540\u00c1\u0580\u00c1\u05c0\u00c1\u0600\u00c1\u0640\u00c1\u0680\u00c1\u06c0\u00c1\u0700\u00c1\u0740\u00c1\u0780\u00c1\u07c0\u00c1\xe0\x80\u00c1\xe1\x80\u00c1\xe2\x80\u00c1\xe3\x80\u00c1\xe4\x80\u00c1\xe5\x80\u00c1\xe6\x80\u00c1\xe7\x80\u00c1\xe8\x80\u00c1\xe9\x80\u00c1\xea\x80\u00c1\xeb\x80\u00c1\xec\x80\u00c1\xed\x80\u00c1\xee\x80\u00c1\xef\x80\u00c1\xf0\x80\u00c1\xf1\x80\u00c1\xf2\x80\u00c1\xf3\x80\u00c1\xf4\x80\u00c1\xf5\x80\u00c1\xf6\x80\u00c1\xf7\x80\u00c1\xf8\x80\u00c1\xf9\x80\u00c1\xfa\x80\u00c1\xfb\x80\u00c1\xfc\x80\u00c1\xfd\x80\u00c1\xfe\x80\u00c1\xff\x80\u3507KT\xa8\xbd\x15)f\xd6?pk\xae\x1f\xfe\xb0A\x19!\xe5\x8d\f\x9f,\x9c\xd0Ft\xed\xea@\x00\x00\x00" const rinkebyAllocData = "\xf9\x03\xb7\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xf6\x941\xb9\x8d\x14\x00{\xde\xe67)\x80\x86\x98\x8a\v\xbd1\x18E#\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" const goerliAllocData = "\xf9\x04\x06\u0080\x01\xc2\x01\x01\xc2\x02\x01\xc2\x03\x01\xc2\x04\x01\xc2\x05\x01\xc2\x06\x01\xc2\a\x01\xc2\b\x01\xc2\t\x01\xc2\n\x01\xc2\v\x01\xc2\f\x01\xc2\r\x01\xc2\x0e\x01\xc2\x0f\x01\xc2\x10\x01\xc2\x11\x01\xc2\x12\x01\xc2\x13\x01\xc2\x14\x01\xc2\x15\x01\xc2\x16\x01\xc2\x17\x01\xc2\x18\x01\xc2\x19\x01\xc2\x1a\x01\xc2\x1b\x01\xc2\x1c\x01\xc2\x1d\x01\xc2\x1e\x01\xc2\x1f\x01\xc2 \x01\xc2!\x01\xc2\"\x01\xc2#\x01\xc2$\x01\xc2%\x01\xc2&\x01\xc2'\x01\xc2(\x01\xc2)\x01\xc2*\x01\xc2+\x01\xc2,\x01\xc2-\x01\xc2.\x01\xc2/\x01\xc20\x01\xc21\x01\xc22\x01\xc23\x01\xc24\x01\xc25\x01\xc26\x01\xc27\x01\xc28\x01\xc29\x01\xc2:\x01\xc2;\x01\xc2<\x01\xc2=\x01\xc2>\x01\xc2?\x01\xc2@\x01\xc2A\x01\xc2B\x01\xc2C\x01\xc2D\x01\xc2E\x01\xc2F\x01\xc2G\x01\xc2H\x01\xc2I\x01\xc2J\x01\xc2K\x01\xc2L\x01\xc2M\x01\xc2N\x01\xc2O\x01\xc2P\x01\xc2Q\x01\xc2R\x01\xc2S\x01\xc2T\x01\xc2U\x01\xc2V\x01\xc2W\x01\xc2X\x01\xc2Y\x01\xc2Z\x01\xc2[\x01\xc2\\\x01\xc2]\x01\xc2^\x01\xc2_\x01\xc2`\x01\xc2a\x01\xc2b\x01\xc2c\x01\xc2d\x01\xc2e\x01\xc2f\x01\xc2g\x01\xc2h\x01\xc2i\x01\xc2j\x01\xc2k\x01\xc2l\x01\xc2m\x01\xc2n\x01\xc2o\x01\xc2p\x01\xc2q\x01\xc2r\x01\xc2s\x01\xc2t\x01\xc2u\x01\xc2v\x01\xc2w\x01\xc2x\x01\xc2y\x01\xc2z\x01\xc2{\x01\xc2|\x01\xc2}\x01\xc2~\x01\xc2\u007f\x01\u00c1\x80\x01\u00c1\x81\x01\u00c1\x82\x01\u00c1\x83\x01\u00c1\x84\x01\u00c1\x85\x01\u00c1\x86\x01\u00c1\x87\x01\u00c1\x88\x01\u00c1\x89\x01\u00c1\x8a\x01\u00c1\x8b\x01\u00c1\x8c\x01\u00c1\x8d\x01\u00c1\x8e\x01\u00c1\x8f\x01\u00c1\x90\x01\u00c1\x91\x01\u00c1\x92\x01\u00c1\x93\x01\u00c1\x94\x01\u00c1\x95\x01\u00c1\x96\x01\u00c1\x97\x01\u00c1\x98\x01\u00c1\x99\x01\u00c1\x9a\x01\u00c1\x9b\x01\u00c1\x9c\x01\u00c1\x9d\x01\u00c1\x9e\x01\u00c1\x9f\x01\u00c1\xa0\x01\u00c1\xa1\x01\u00c1\xa2\x01\u00c1\xa3\x01\u00c1\xa4\x01\u00c1\xa5\x01\u00c1\xa6\x01\u00c1\xa7\x01\u00c1\xa8\x01\u00c1\xa9\x01\u00c1\xaa\x01\u00c1\xab\x01\u00c1\xac\x01\u00c1\xad\x01\u00c1\xae\x01\u00c1\xaf\x01\u00c1\xb0\x01\u00c1\xb1\x01\u00c1\xb2\x01\u00c1\xb3\x01\u00c1\xb4\x01\u00c1\xb5\x01\u00c1\xb6\x01\u00c1\xb7\x01\u00c1\xb8\x01\u00c1\xb9\x01\u00c1\xba\x01\u00c1\xbb\x01\u00c1\xbc\x01\u00c1\xbd\x01\u00c1\xbe\x01\u00c1\xbf\x01\u00c1\xc0\x01\u00c1\xc1\x01\u00c1\xc2\x01\u00c1\xc3\x01\u00c1\xc4\x01\u00c1\xc5\x01\u00c1\xc6\x01\u00c1\xc7\x01\u00c1\xc8\x01\u00c1\xc9\x01\u00c1\xca\x01\u00c1\xcb\x01\u00c1\xcc\x01\u00c1\xcd\x01\u00c1\xce\x01\u00c1\xcf\x01\u00c1\xd0\x01\u00c1\xd1\x01\u00c1\xd2\x01\u00c1\xd3\x01\u00c1\xd4\x01\u00c1\xd5\x01\u00c1\xd6\x01\u00c1\xd7\x01\u00c1\xd8\x01\u00c1\xd9\x01\u00c1\xda\x01\u00c1\xdb\x01\u00c1\xdc\x01\u00c1\xdd\x01\u00c1\xde\x01\u00c1\xdf\x01\u00c1\xe0\x01\u00c1\xe1\x01\u00c1\xe2\x01\u00c1\xe3\x01\u00c1\xe4\x01\u00c1\xe5\x01\u00c1\xe6\x01\u00c1\xe7\x01\u00c1\xe8\x01\u00c1\xe9\x01\u00c1\xea\x01\u00c1\xeb\x01\u00c1\xec\x01\u00c1\xed\x01\u00c1\xee\x01\u00c1\xef\x01\u00c1\xf0\x01\u00c1\xf1\x01\u00c1\xf2\x01\u00c1\xf3\x01\u00c1\xf4\x01\u00c1\xf5\x01\u00c1\xf6\x01\u00c1\xf7\x01\u00c1\xf8\x01\u00c1\xf9\x01\u00c1\xfa\x01\u00c1\xfb\x01\u00c1\xfc\x01\u00c1\xfd\x01\u00c1\xfe\x01\u00c1\xff\x01\xe0\x94L*\xe4\x82Y5\x05\xf0\x16<\xde\xfc\a>\x81\xc6<\xdaA\a\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe0\x94\xa8\xe8\xf1G2e\x8eKQ\xe8q\x191\x05:\x8ai\xba\xf2\xb1\x8a\x15-\x02\xc7\xe1J\xf6\x80\x00\x00\xe1\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\u08bdBX\xd2v\x887\xba\xa2j(\xfeq\xdc\a\x9f\x84\u01cbJG\xe3\xc1$H\xf4\xad\x00\x00\x00" -const LveAllocData ="" -const LvetestAllocData ="" +const sepoliaAllocData = "\xf9\x01\xee\u0791i\x16\xa8{\x823?BE\x04f#\xb27\x94\xc6\\\x8b\bE\x95\x16\x14\x01HJ\x00\x00\x00\xe1\x94\x10\xf5\xd4XT\xe08\a\x14\x85\xac\x9e@#\b\u03c0\xd2\xd2\xfe\x8bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\u0794y\x9d2\x9e_X4\x19\x16|\xd7\"\x96$\x85\x92n3\x8fJ\x88\r\u0db3\xa7d\x00\x00\xe0\x94|\xf5\xb7\x9b\xfe)\x1ag\xab\x02\xb3\x93\xe4V\xcc\xc4\xc2f\xf7S\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\x8b\u007f\tw\xbbO\x0f\xbepv\xfa\"\xbc$\xac\xa0CX?^\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xa2\xa6\xd949\x14O\xfeM'\xc9\xe0\x88\xdc\u0637\x83\x94bc\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xaa\xec\x869DA\xf9\x15\xbc\xe3\xe6\xab9\x99w\xe9\x90o;i\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\u1532\x1c3\xde\x1f\xab?\xa1T\x99\xc6+Y\xfe\f\xc3%\x00 \u044bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\xe0\x94\xbc\x11)Y6\xaay\u0554\x13\x9d\xe1\xb2\xe1&)AO;\u06ca\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xbe\xef2\xca[\x9a\x19\x8d'\xb4\xe0/LpC\x9f\xe6\x03V\u03ca\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe1\x94\xd7\xd7lX\xb3\xa5\x19\xe9\xfal\xc4\xd2-\xc0\x17%\x9b\u011f\x1e\x8bR\xb7\xd2\xdc\xc8\f\xd2\xe4\x00\x00\x00\xe0\x94\xd7\xed\xdbx\xed)[<\x96)$\x0e\x89$\xfb\x8d\x88t\xdd\u060a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\u0665\x17\x9f\t\x1d\x85\x05\x1d<\x98'\x85\xef\xd1E\\\uc199\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xe2\xe2e\x90(\x147\x84\xd5W\xbc\xeco\xf3\xa0r\x10H\x88\n\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00\xe0\x94\xf4|\xae\x1c\xf7\x9c\xa6u\x8b\xfcx}\xbd!\u6f7eq\x12\xb8\x8a\xd3\xc2\x1b\xce\xcc\xed\xa1\x00\x00\x00" +const KilnAllocData = `{ + "config": { + "chainId": 1337802, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "mergeForkBlock": 1000, + "terminalTotalDifficulty": 20000000000000 + }, + "alloc": { + "0x0000000000000000000000000000000000000000": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000001": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000005": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000006": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000007": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000008": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000009": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000000f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000010": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000011": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000012": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000013": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000014": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000015": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000016": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000017": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000018": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000019": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000001f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000020": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000021": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000022": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000023": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000024": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000025": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000026": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000027": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000028": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000029": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000002f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000030": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000031": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000032": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000033": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000034": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000035": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000036": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000037": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000038": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000039": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000003f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000040": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000041": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000042": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000043": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000044": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000045": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000046": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000047": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000048": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000049": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000004f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000050": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000051": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000052": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000053": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000054": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000055": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000056": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000057": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000058": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000059": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000005f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000060": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000061": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000062": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000063": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000064": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000065": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000066": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000067": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000068": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000069": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000006f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000070": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000071": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000072": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000073": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000074": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000075": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000076": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000077": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000078": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000079": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000007f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000080": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000081": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000082": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000083": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000084": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000085": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000086": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000087": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000088": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000089": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000008f": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000090": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000091": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000092": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000093": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000094": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000095": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000096": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000097": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000098": { + "balance": "1" + }, + "0x0000000000000000000000000000000000000099": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009a": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009b": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009c": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009d": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009e": { + "balance": "1" + }, + "0x000000000000000000000000000000000000009f": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000a9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000aa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ab": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ac": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ad": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ae": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000af": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000b9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ba": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000be": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000bf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000c9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ca": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ce": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000cf": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000d9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000da": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000db": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000dd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000de": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000df": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000e9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ea": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000eb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ec": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ed": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ee": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ef": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f0": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f1": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f2": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f3": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f4": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f5": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f6": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f7": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f8": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000f9": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fa": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fb": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fc": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fd": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000fe": { + "balance": "1" + }, + "0x00000000000000000000000000000000000000ff": { + "balance": "1" + }, + "0x4242424242424242424242424242424242424242": { + "balance": "0", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a26469706673582212201dd26f37a621703009abf16e77e69c93dc50c79db7f6cc37543e3e0e3decdc9764736f6c634300060b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0xf97e180c050e5Ab072211Ad2C213Eb5AEE4DF134": { + "balance": "10000000000000000000000000" + }, + "0x2cA5F489CC1Fd1CEC24747B64E8dE0F4A6A850E1": { + "balance": "10000000000000000000000000" + }, + "0x7203bd333a874D9d329050ecE393820fCD501eaA": { + "balance": "10000000000000000000000000" + }, + "0xA51918aA40D78Ff8be939bf0E8404252875c6aDF": { + "balance": "10000000000000000000000000" + }, + "0xAA81078e6b2121dd7A846690DFdD6b10d7658d8B": { + "balance": "10000000000000000000000000" + }, + "0xFA2d31D8f21c1D1633E9BEB641dF77D21D63ccDd": { + "balance": "10000000000000000000000000" + }, + "0xf751C9c6d60614226fE57D2cAD6e10C856a2ddA3": { + "balance": "10000000000000000000000000" + }, + "0x9cD16887f6A808AEaa65D3c840f059EeA4ca1319": { + "balance": "10000000000000000000000000" + }, + "0x2E07043584F11BFF0AC39c927665DF6c6ebaffFB": { + "balance": "10000000000000000000000000" + }, + "0x60e771E5eCA8E26690920de669520Da210D64A9B": { + "balance": "10000000000000000000000000" + }, + "0xFC4db92C2Cf77CE02fBfd7Da0346d2CbFA66aD59": { + "balance": "10000000000000000000000000" + } + }, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x01", + "extraData": "", + "gasLimit": "0x400000", + "nonce": "0x1234", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0" + }` diff --git a/core/genesis_test.go b/core/genesis_test.go index 57debfb9..a7d04f53 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -22,22 +22,19 @@ import ( "testing" "github.com/davecgh/go-spew/spew" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "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" ) -func TestDefaultGenesisBlock(t *testing.T) { - block := DefaultGenesisBlock().ToBlock(nil) - if block.Hash() != params.MainnetGenesisHash { - t.Errorf("wrong mainnet genesis hash, got %v, want %v", block.Hash(), params.MainnetGenesisHash) - } - block = DefaultTestnetGenesisBlock().ToBlock(nil) - if block.Hash() != params.TestnetGenesisHash { - t.Errorf("wrong testnet genesis hash, got %v, want %v", block.Hash(), params.TestnetGenesisHash) +func TestInvalidCliqueConfig(t *testing.T) { + block := DefaultGoerliGenesisBlock() + block.ExtraData = []byte{} + if _, err := block.Commit(nil); err == nil { + t.Fatal("Expected error on invalid clique config") } } @@ -95,14 +92,14 @@ func TestSetupGenesis(t *testing.T) { wantConfig: customg.Config, }, { - name: "custom block in DB, genesis == testnet", + name: "custom block in DB, genesis == ropsten", fn: func(db ethdb.Database) (*params.ChainConfig, common.Hash, error) { customg.MustCommit(db) - return SetupGenesisBlock(db, DefaultTestnetGenesisBlock()) + return SetupGenesisBlock(db, DefaultRopstenGenesisBlock()) }, - wantErr: &GenesisMismatchError{Stored: customghash, New: params.TestnetGenesisHash}, - wantHash: params.TestnetGenesisHash, - wantConfig: params.TestnetChainConfig, + wantErr: &GenesisMismatchError{Stored: customghash, New: params.RopstenGenesisHash}, + wantHash: params.RopstenGenesisHash, + wantConfig: params.RopstenChainConfig, }, { name: "compatible config in DB", @@ -120,7 +117,7 @@ func TestSetupGenesis(t *testing.T) { // Advance to block #4, past the homestead transition block of customg. genesis := oldcustomg.MustCommit(db) - bc, _ := NewBlockChain(db, nil, oldcustomg.Config, ethash.NewFullFaker(), vm.Config{}, nil) + bc, _ := NewBlockChain(db, nil, &oldcustomg, nil, ethash.NewFullFaker(), vm.Config{}, nil, nil) defer bc.Stop() blocks, _ := GenerateChain(oldcustomg.Config, genesis, ethash.NewFaker(), db, 4, nil) @@ -162,3 +159,83 @@ func TestSetupGenesis(t *testing.T) { } } } + +// TestGenesisHashes checks the congruity of default genesis data to +// corresponding hardcoded genesis hash values. +func TestGenesisHashes(t *testing.T) { + for i, c := range []struct { + genesis *Genesis + want common.Hash + }{ + {DefaultGenesisBlock(), params.MainnetGenesisHash}, + {DefaultGoerliGenesisBlock(), params.GoerliGenesisHash}, + {DefaultRopstenGenesisBlock(), params.RopstenGenesisHash}, + {DefaultRinkebyGenesisBlock(), params.RinkebyGenesisHash}, + {DefaultSepoliaGenesisBlock(), params.SepoliaGenesisHash}, + } { + // Test via MustCommit + if have := c.genesis.MustCommit(rawdb.NewMemoryDatabase()).Hash(); have != c.want { + t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) + } + // Test via ToBlock + if have := c.genesis.ToBlock().Hash(); have != c.want { + t.Errorf("case: %d a), want: %s, got: %s", i, c.want.Hex(), have.Hex()) + } + } +} + +func TestGenesis_Commit(t *testing.T) { + genesis := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: params.TestChainConfig, + // difficulty is nil + } + + db := rawdb.NewMemoryDatabase() + genesisBlock := genesis.MustCommit(db) + if genesis.Difficulty != nil { + t.Fatalf("assumption wrong") + } + + // This value should have been set as default in the ToBlock method. + if genesisBlock.Difficulty().Cmp(params.GenesisDifficulty) != 0 { + t.Errorf("assumption wrong: want: %d, got: %v", params.GenesisDifficulty, genesisBlock.Difficulty()) + } + + // Expect the stored total difficulty to be the difficulty of the genesis block. + stored := rawdb.ReadTd(db, genesisBlock.Hash(), genesisBlock.NumberU64()) + + if stored.Cmp(genesisBlock.Difficulty()) != 0 { + t.Errorf("inequal difficulty; stored: %v, genesisBlock: %v", stored, genesisBlock.Difficulty()) + } +} + +func TestReadWriteGenesisAlloc(t *testing.T) { + var ( + db = rawdb.NewMemoryDatabase() + alloc = &GenesisAlloc{ + {1}: {Balance: big.NewInt(1), Storage: map[common.Hash]common.Hash{{1}: {1}}}, + {2}: {Balance: big.NewInt(2), Storage: map[common.Hash]common.Hash{{2}: {2}}}, + } + hash, _ = alloc.deriveHash() + ) + alloc.flush(db) + + var reload GenesisAlloc + err := reload.UnmarshalJSON(rawdb.ReadGenesisStateSpec(db, hash)) + if err != nil { + t.Fatalf("Failed to load genesis state %v", err) + } + if len(reload) != len(*alloc) { + t.Fatal("Unexpected genesis allocation") + } + for addr, account := range reload { + want, ok := (*alloc)[addr] + if !ok { + t.Fatal("Account is not found") + } + if !reflect.DeepEqual(want, account) { + t.Fatal("Unexpected account") + } + } +} diff --git a/core/headerchain.go b/core/headerchain.go index 06859895..d8c415f3 100644 --- a/core/headerchain.go +++ b/core/headerchain.go @@ -26,13 +26,14 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "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/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" lru "github.com/hashicorp/golang-lru" ) @@ -45,11 +46,18 @@ const ( // HeaderChain implements the basic block header chain logic that is shared by // core.BlockChain and light.LightChain. It is not usable in itself, only as // a part of either structure. +// +// HeaderChain is responsible for maintaining the header chain including the +// header query and updating. +// +// The components maintained by headerchain includes: (1) total difficulty +// (2) header (3) block hash -> number mapping (4) canonical number -> hash mapping +// and (5) head header flag. +// // It is not thread safe either, the encapsulating chain structures should do // the necessary mutex locking/unlocking. type HeaderChain struct { - config *params.ChainConfig - + config *params.ChainConfig chainDb ethdb.Database genesisHeader *types.Header @@ -66,10 +74,8 @@ type HeaderChain struct { engine consensus.Engine } -// NewHeaderChain creates a new HeaderChain structure. -// getValidator should return the parent's validator -// procInterrupt points to the parent's interrupt semaphore -// wg points to the parent's shutdown wait group +// NewHeaderChain creates a new HeaderChain structure. ProcInterrupt points +// to the parent's interrupt semaphore. func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine consensus.Engine, procInterrupt func() bool) (*HeaderChain, error) { headerCache, _ := lru.New(headerCacheLimit) tdCache, _ := lru.New(tdCacheLimit) @@ -80,7 +86,6 @@ func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine c if err != nil { return nil, err } - hc := &HeaderChain{ config: config, chainDb: chainDb, @@ -91,12 +96,10 @@ func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine c rand: mrand.New(mrand.NewSource(seed.Int64())), engine: engine, } - hc.genesisHeader = hc.GetHeaderByNumber(0) if hc.genesisHeader == nil { return nil, ErrNoGenesis } - hc.currentHeader.Store(hc.genesisHeader) if head := rawdb.ReadHeadBlockHash(chainDb); head != (common.Hash{}) { if chead := hc.GetHeaderByHash(head); chead != nil { @@ -105,7 +108,6 @@ func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine c } hc.currentHeaderHash = hc.CurrentHeader().Hash() headHeaderGauge.Update(hc.CurrentHeader().Number.Int64()) - return hc, nil } @@ -123,98 +125,206 @@ func (hc *HeaderChain) GetBlockNumber(hash common.Hash) *uint64 { return number } -// 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 (hc *HeaderChain) WriteHeader(header *types.Header) (status WriteStatus, err error) { - // Cache some values to prevent constant recalculation - var ( - hash = header.Hash() - number = header.Number.Uint64() - ) - // Calculate the total difficulty of the header - ptd := hc.GetTd(header.ParentHash, number-1) - if ptd == nil { - return NonStatTy, consensus.ErrUnknownAncestor - } - localTd := hc.GetTd(hc.currentHeaderHash, hc.CurrentHeader().Number.Uint64()) - externTd := new(big.Int).Add(header.Difficulty, ptd) +type headerWriteResult struct { + status WriteStatus + ignored int + imported int + lastHash common.Hash + lastHeader *types.Header +} - // Irrelevant of the canonical status, write the td and header to the database - if err := hc.WriteTd(hash, number, externTd); err != nil { - log.Crit("Failed to write header total difficulty", "err", err) +// Reorg reorgs the local canonical chain into the specified chain. The reorg +// can be classified into two cases: (a) extend the local chain (b) switch the +// head to the given header. +func (hc *HeaderChain) Reorg(headers []*types.Header) error { + // Short circuit if nothing to reorg. + if len(headers) == 0 { + return nil } - rawdb.WriteHeader(hc.chainDb, header) - - // If the total difficulty is higher than our known, add it to the canonical chain - // Second clause in the if statement reduces the vulnerability to selfish mining. - // Please refer to http://www.cs.cornell.edu/~ie53/publications/btcProcFC.pdf - if externTd.Cmp(localTd) > 0 || (externTd.Cmp(localTd) == 0 && mrand.Float64() < 0.5) { + // If the parent of the (first) block is already the canon header, + // we don't have to go backwards to delete canon blocks, but simply + // pile them onto the existing chain. Otherwise, do the necessary + // reorgs. + var ( + first = headers[0] + last = headers[len(headers)-1] + batch = hc.chainDb.NewBatch() + ) + if first.ParentHash != hc.currentHeaderHash { // Delete any canonical number assignments above the new head - batch := hc.chainDb.NewBatch() - for i := number + 1; ; i++ { + for i := last.Number.Uint64() + 1; ; i++ { hash := rawdb.ReadCanonicalHash(hc.chainDb, i) if hash == (common.Hash{}) { break } rawdb.DeleteCanonicalHash(batch, i) } - batch.Write() - - // Overwrite any stale canonical number assignments + // Overwrite any stale canonical number assignments, going + // backwards from the first header in this import until the + // cross link between two chains. var ( - headHash = header.ParentHash - headNumber = header.Number.Uint64() - 1 - headHeader = hc.GetHeader(headHash, headNumber) + header = first + headNumber = header.Number.Uint64() + headHash = header.Hash() ) for rawdb.ReadCanonicalHash(hc.chainDb, headNumber) != headHash { - rawdb.WriteCanonicalHash(hc.chainDb, headHash, headNumber) - - headHash = headHeader.ParentHash - headNumber = headHeader.Number.Uint64() - 1 - headHeader = hc.GetHeader(headHash, headNumber) + rawdb.WriteCanonicalHash(batch, headHash, headNumber) + if headNumber == 0 { + break // It shouldn't be reached + } + headHash, headNumber = header.ParentHash, header.Number.Uint64()-1 + header = hc.GetHeader(headHash, headNumber) + if header == nil { + return fmt.Errorf("missing parent %d %x", headNumber, headHash) + } } - // Extend the canonical chain with the new header - rawdb.WriteCanonicalHash(hc.chainDb, hash, number) - rawdb.WriteHeadHeaderHash(hc.chainDb, hash) - - 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) + // Extend the canonical chain with the new headers + for i := 0; i < len(headers)-1; i++ { + hash := headers[i+1].ParentHash // Save some extra hashing + num := headers[i].Number.Uint64() + rawdb.WriteCanonicalHash(batch, hash, num) + rawdb.WriteHeadHeaderHash(batch, hash) + } + // Write the last header + hash := headers[len(headers)-1].Hash() + num := headers[len(headers)-1].Number.Uint64() + rawdb.WriteCanonicalHash(batch, hash, num) + rawdb.WriteHeadHeaderHash(batch, hash) + + if err := batch.Write(); err != nil { + return err + } + // Last step update all in-memory head header markers + hc.currentHeaderHash = last.Hash() + hc.currentHeader.Store(types.CopyHeader(last)) + headHeaderGauge.Update(last.Number.Int64()) + return nil +} - return +// WriteHeaders writes a chain of headers into the local chain, given that the +// parents are already known. The chain head header won't be updated in this +// function, the additional SetCanonical is expected in order to finish the entire +// procedure. +func (hc *HeaderChain) WriteHeaders(headers []*types.Header) (int, error) { + if len(headers) == 0 { + return 0, nil + } + ptd := hc.GetTd(headers[0].ParentHash, headers[0].Number.Uint64()-1) + if ptd == nil { + return 0, consensus.ErrUnknownAncestor + } + var ( + newTD = new(big.Int).Set(ptd) // Total difficulty of inserted chain + inserted []rawdb.NumberHash // Ephemeral lookup of number/hash for the chain + parentKnown = true // Set to true to force hc.HasHeader check the first iteration + batch = hc.chainDb.NewBatch() + ) + for i, header := range headers { + var hash common.Hash + // The headers have already been validated at this point, so we already + // know that it's a contiguous chain, where + // headers[i].Hash() == headers[i+1].ParentHash + if i < len(headers)-1 { + hash = headers[i+1].ParentHash + } else { + hash = header.Hash() + } + number := header.Number.Uint64() + newTD.Add(newTD, header.Difficulty) + + // If the parent was not present, store it + // If the header is already known, skip it, otherwise store + alreadyKnown := parentKnown && hc.HasHeader(hash, number) + if !alreadyKnown { + // Irrelevant of the canonical status, write the TD and header to the database. + rawdb.WriteTd(batch, hash, number, newTD) + hc.tdCache.Add(hash, new(big.Int).Set(newTD)) + + rawdb.WriteHeader(batch, header) + inserted = append(inserted, rawdb.NumberHash{Number: number, Hash: hash}) + hc.headerCache.Add(hash, header) + hc.numberCache.Add(hash, number) + } + parentKnown = alreadyKnown + } + // Skip the slow disk write of all headers if interrupted. + if hc.procInterrupt() { + log.Debug("Premature abort during headers import") + return 0, errors.New("aborted") + } + // Commit to disk! + if err := batch.Write(); err != nil { + log.Crit("Failed to write headers", "error", err) + } + return len(inserted), nil } -// WhCallback is a callback function for inserting individual headers. -// A callback is used for two reasons: first, in a LightChain, status should be -// processed and light chain events sent, while in a BlockChain this is not -// necessary since chain events are sent after inserting blocks. Second, the -// header writes should be protected by the parent chain mutex individually. -type WhCallback func(*types.Header) error +// writeHeadersAndSetHead writes a batch of block headers and applies the last +// header as the chain head if the fork choicer says it's ok to update the chain. +// 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 (hc *HeaderChain) writeHeadersAndSetHead(headers []*types.Header, forker *ForkChoice) (*headerWriteResult, error) { + inserted, err := hc.WriteHeaders(headers) + if err != nil { + return nil, err + } + var ( + lastHeader = headers[len(headers)-1] + lastHash = headers[len(headers)-1].Hash() + result = &headerWriteResult{ + status: NonStatTy, + ignored: len(headers) - inserted, + imported: inserted, + lastHash: lastHash, + lastHeader: lastHeader, + } + ) + // Ask the fork choicer if the reorg is necessary + if reorg, err := forker.ReorgNeeded(hc.CurrentHeader(), lastHeader); err != nil { + return nil, err + } else if !reorg { + if inserted != 0 { + result.status = SideStatTy + } + return result, nil + } + // Special case, all the inserted headers are already on the canonical + // header chain, skip the reorg operation. + if hc.GetCanonicalHash(lastHeader.Number.Uint64()) == lastHash && lastHeader.Number.Uint64() <= hc.CurrentHeader().Number.Uint64() { + return result, nil + } + // Apply the reorg operation + if err := hc.Reorg(headers); err != nil { + return nil, err + } + result.status = CanonStatTy + return result, nil +} func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) (int, error) { // Do a sanity check that the provided chain is actually ordered and linked for i := 1; i < len(chain); i++ { - if chain[i].Number.Uint64() != chain[i-1].Number.Uint64()+1 || chain[i].ParentHash != chain[i-1].Hash() { + if chain[i].Number.Uint64() != chain[i-1].Number.Uint64()+1 { + hash := chain[i].Hash() + parentHash := chain[i-1].Hash() // Chain broke ancestry, log a message (programming error) and skip insertion - log.Error("Non contiguous header 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 header insert", "number", chain[i].Number, "hash", hash, + "parent", chain[i].ParentHash, "prevnumber", chain[i-1].Number, "prevhash", parentHash) - return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, chain[i-1].Number, - chain[i-1].Hash().Bytes()[:4], i, chain[i].Number, chain[i].Hash().Bytes()[:4], chain[i].ParentHash[:4]) + return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x..], item %d is #%d [%x..] (parent [%x..])", i-1, chain[i-1].Number, + parentHash.Bytes()[:4], i, chain[i].Number, hash.Bytes()[:4], chain[i].ParentHash[:4]) + } + // If the header is a banned one, straight out abort + if BadHashes[chain[i].ParentHash] { + return i - 1, ErrBannedHash + } + // If it's the last header in the cunk, we need to check it too + if i == len(chain)-1 && BadHashes[chain[i].Hash()] { + return i, ErrBannedHash } } @@ -222,7 +332,7 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) seals := make([]bool, len(chain)) if checkFreq != 0 { // In case of checkFreq == 0 all seals are left false. - for i := 0; i < len(seals)/checkFreq; i++ { + for i := 0; i <= len(seals)/checkFreq; i++ { index := i*checkFreq + hc.rand.Intn(checkFreq) if index >= len(seals) { index = len(seals) - 1 @@ -237,16 +347,12 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) defer close(abort) // Iterate over the headers and ensure they all check out - for i, header := range chain { + for i := range chain { // If the chain is terminating, stop processing blocks if hc.procInterrupt() { log.Debug("Premature abort during headers verification") return 0, errors.New("aborted") } - // If the header is a banned one, straight out abort - if BadHashes[header.Hash()] { - return i, ErrBlacklistedHash - } // Otherwise wait for headers checks and ensure they pass if err := <-results; err != nil { return i, err @@ -256,78 +362,40 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) return 0, nil } -// InsertHeaderChain attempts to insert the given header chain in to the local -// chain, possibly creating a reorg. If an error is returned, it will return the -// index number of the failing header as well an error describing what went wrong. +// InsertHeaderChain inserts the given headers and does the reorganisations. // -// The verify parameter can be used to fine tune whether nonce verification -// should be done or not. The reason behind the optional check is because some -// of the header retrieval mechanisms already need to verfy nonces, as well as -// because nonces can be verified sparsely, not needing to check each. -func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, writeHeader WhCallback, start time.Time) (int, error) { - // Collect some import statistics to report on - stats := struct{ processed, ignored int }{} - // All headers passed verification, import them into the database - for i, header := range chain { - // Short circuit insertion if shutting down - if hc.procInterrupt() { - log.Debug("Premature abort during headers import") - return i, errors.New("aborted") - } - // If the header's already known, skip it, otherwise store - 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 - } - stats.processed++ +// The validity of the headers is NOT CHECKED by this method, i.e. they need to be +// validated by ValidateHeaderChain before calling InsertHeaderChain. +// +// This insert is all-or-nothing. If this returns an error, no headers were written, +// otherwise they were all processed successfully. +// +// The returned 'write status' says if the inserted headers are part of the canonical chain +// or a side chain. +func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, start time.Time, forker *ForkChoice) (WriteStatus, error) { + if hc.procInterrupt() { + return 0, errors.New("aborted") + } + res, err := hc.writeHeadersAndSetHead(chain, forker) + if err != nil { + return 0, err } // Report some public statistics so the user has a clue what's going on - last := chain[len(chain)-1] - context := []interface{}{ - "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)), - "number", last.Number, "hash", last.Hash(), + "count", res.imported, + "elapsed", common.PrettyDuration(time.Since(start)), } - if timestamp := time.Unix(int64(last.Time), 0); time.Since(timestamp) > time.Minute { - context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) + if last := res.lastHeader; last != nil { + context = append(context, "number", last.Number, "hash", res.lastHash) + 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 { - context = append(context, []interface{}{"ignored", stats.ignored}...) + if res.ignored > 0 { + context = append(context, []interface{}{"ignored", res.ignored}...) } log.Info("Imported new block headers", context...) - - return 0, nil -} - -// GetBlockHashesFromHash retrieves a number of block hashes starting at a given -// hash, fetching towards the genesis block. -func (hc *HeaderChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { - // Get the origin header from which to fetch - header := hc.GetHeaderByHash(hash) - if header == nil { - return nil - } - // Iterate the headers until enough is collected or the genesis reached - chain := make([]common.Hash, 0, max) - for i := uint64(0); i < max; i++ { - next := header.ParentHash - if header = hc.GetHeader(next, header.Number.Uint64()-1); header == nil { - break - } - chain = append(chain, next) - if header.Number.Sign() == 0 { - break - } - } - return chain + return res.status, err } // GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or @@ -343,14 +411,16 @@ func (hc *HeaderChain) GetAncestor(hash common.Hash, number, ancestor uint64, ma // in this case it is cheaper to just read the header if header := hc.GetHeader(hash, number); header != nil { return header.ParentHash, number - 1 - } else { - return common.Hash{}, 0 } + return common.Hash{}, 0 } 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 @@ -383,24 +453,6 @@ func (hc *HeaderChain) GetTd(hash common.Hash, number uint64) *big.Int { return td } -// GetTdByHash retrieves a block's total difficulty in the canonical chain from the -// database by hash, caching it if found. -func (hc *HeaderChain) GetTdByHash(hash common.Hash) *big.Int { - number := hc.GetBlockNumber(hash) - if number == nil { - return nil - } - return hc.GetTd(hash, *number) -} - -// WriteTd stores a block's total difficulty into the database, also caching it -// along the way. -func (hc *HeaderChain) WriteTd(hash common.Hash, number uint64, td *big.Int) error { - rawdb.WriteTd(hc.chainDb, hash, number, td) - hc.tdCache.Add(hash, new(big.Int).Set(td)) - return nil -} - // GetHeader retrieves a block header from the database by hash and number, // caching it if found. func (hc *HeaderChain) GetHeader(hash common.Hash, number uint64) *types.Header { @@ -428,6 +480,8 @@ func (hc *HeaderChain) GetHeaderByHash(hash common.Hash) *types.Header { } // HasHeader checks if a block header is present in the database or not. +// In theory, if header is present in the database, all relative components +// like td and hash->number should be present too. func (hc *HeaderChain) HasHeader(hash common.Hash, number uint64) bool { if hc.numberCache.Contains(hash) || hc.headerCache.Contains(hash) { return true @@ -445,16 +499,59 @@ func (hc *HeaderChain) GetHeaderByNumber(number uint64) *types.Header { return hc.GetHeader(hash, number) } +// GetHeadersFrom returns a contiguous segment of headers, in rlp-form, going +// backwards from the given number. +// If the 'number' is higher than the highest local header, this method will +// return a best-effort response, containing the headers that we do have. +func (hc *HeaderChain) GetHeadersFrom(number, count uint64) []rlp.RawValue { + // If the request is for future headers, we still return the portion of + // headers that we are able to serve + if current := hc.CurrentHeader().Number.Uint64(); current < number { + if count > number-current { + count -= number - current + number = current + } else { + return nil + } + } + var headers []rlp.RawValue + // If we have some of the headers in cache already, use that before going to db. + hash := rawdb.ReadCanonicalHash(hc.chainDb, number) + if hash == (common.Hash{}) { + return nil + } + for count > 0 { + header, ok := hc.headerCache.Get(hash) + if !ok { + break + } + h := header.(*types.Header) + rlpData, _ := rlp.EncodeToBytes(h) + headers = append(headers, rlpData) + hash = h.ParentHash + count-- + number-- + } + // Read remaining from db + if count > 0 { + headers = append(headers, rawdb.ReadHeaderRange(hc.chainDb, number, count)...) + } + return headers +} + +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 { return hc.currentHeader.Load().(*types.Header) } -// SetCurrentHeader sets the current head header of the canonical chain. +// SetCurrentHeader sets the in-memory head header marker of the canonical chan +// as the given header. func (hc *HeaderChain) SetCurrentHeader(head *types.Header) { - rawdb.WriteHeadHeaderHash(hc.chainDb, head.Hash()) - hc.currentHeader.Store(head) hc.currentHeaderHash = head.Hash() headHeaderGauge.Update(head.Number.Int64()) @@ -462,8 +559,10 @@ func (hc *HeaderChain) SetCurrentHeader(head *types.Header) { type ( // UpdateHeadBlocksCallback is a callback function that is called by SetHead - // before head header is updated. - UpdateHeadBlocksCallback func(ethdb.KeyValueWriter, *types.Header) + // before head header is updated. The method will return the actual block it + // updated the head to (missing state) and a flag if setHead should continue + // rewinding till that forcefully (exceeded ancient limits) + UpdateHeadBlocksCallback func(ethdb.KeyValueWriter, *types.Header) (uint64, bool) // DeleteBlockContentCallback is a callback function that is called by SetHead // before each header is deleted. @@ -476,44 +575,75 @@ func (hc *HeaderChain) SetHead(head uint64, updateFn UpdateHeadBlocksCallback, d var ( parentHash common.Hash batch = hc.chainDb.NewBatch() + origin = true ) for hdr := hc.CurrentHeader(); hdr != nil && hdr.Number.Uint64() > head; hdr = hc.CurrentHeader() { - hash, num := hdr.Hash(), hdr.Number.Uint64() + num := 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 + parentHash = parent.Hash() + // 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 + // 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. + markerBatch := hc.chainDb.NewBatch() if updateFn != nil { - updateFn(hc.chainDb, parent) + newHead, force := updateFn(markerBatch, parent) + if force && newHead < head { + log.Warn("Force rewinding till ancient limit", "head", newHead) + head = newHead + } } // Update head header then. - rawdb.WriteHeadHeaderHash(hc.chainDb, parentHash) - - // Remove the relative data from the database. - if delFn != nil { - delFn(batch, hash, num) + rawdb.WriteHeadHeaderHash(markerBatch, parentHash) + if err := markerBatch.Write(); err != nil { + log.Crit("Failed to update chain markers", "error", err) } - // Rewind header chain to new head. - rawdb.DeleteHeader(batch, hash, num) - rawdb.DeleteTd(batch, hash, num) - rawdb.DeleteCanonicalHash(batch, num) - hc.currentHeader.Store(parent) hc.currentHeaderHash = parentHash headHeaderGauge.Update(parent.Number.Int64()) - } - batch.Write() + // If this is the first iteration, wipe any leftover data upwards too so + // we don't end up with dangling daps in the database + var nums []uint64 + if origin { + for n := num + 1; len(rawdb.ReadAllHashes(hc.chainDb, n)) > 0; n++ { + nums = append([]uint64{n}, nums...) // suboptimal, but we don't really expect this path + } + origin = false + } + nums = append(nums, num) + + // Remove the related data from the database on all sidechains + for _, num := range nums { + // Gather all the side fork hashes + hashes := rawdb.ReadAllHashes(hc.chainDb, num) + if len(hashes) == 0 { + // No hashes in the database whatsoever, probably frozen already + hashes = append(hashes, hdr.Hash()) + } + for _, hash := range hashes { + if delFn != nil { + delFn(batch, hash, num) + } + rawdb.DeleteHeader(batch, hash, num) + rawdb.DeleteTd(batch, hash, num) + } + rawdb.DeleteCanonicalHash(batch, num) + } + } + // Flush all accumulated deletions. + if err := batch.Write(); err != nil { + log.Crit("Failed to rewind block", "error", err) + } // Clear out any stale content from the caches hc.headerCache.Purge() hc.tdCache.Purge() diff --git a/core/headerchain_test.go b/core/headerchain_test.go new file mode 100644 index 00000000..ed052267 --- /dev/null +++ b/core/headerchain_test.go @@ -0,0 +1,117 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "fmt" + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/consensus" + "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/log" + "github.com/ethereum/go-ethereum/params" +) + +func verifyUnbrokenCanonchain(hc *HeaderChain) error { + h := hc.CurrentHeader() + for { + canonHash := rawdb.ReadCanonicalHash(hc.chainDb, h.Number.Uint64()) + if exp := h.Hash(); canonHash != exp { + return fmt.Errorf("Canon hash chain broken, block %d got %x, expected %x", + h.Number, canonHash[:8], exp[:8]) + } + // Verify that we have the TD + if td := rawdb.ReadTd(hc.chainDb, canonHash, h.Number.Uint64()); td == nil { + return fmt.Errorf("Canon TD missing at block %d", h.Number) + } + if h.Number.Uint64() == 0 { + break + } + h = hc.GetHeader(h.ParentHash, h.Number.Uint64()-1) + } + return nil +} + +func testInsert(t *testing.T, hc *HeaderChain, chain []*types.Header, wantStatus WriteStatus, wantErr error, forker *ForkChoice) { + t.Helper() + + status, err := hc.InsertHeaderChain(chain, time.Now(), forker) + if status != wantStatus { + t.Errorf("wrong write status from InsertHeaderChain: got %v, want %v", status, wantStatus) + } + // Always verify that the header chain is unbroken + if err := verifyUnbrokenCanonchain(hc); err != nil { + t.Fatal(err) + } + if !errors.Is(err, wantErr) { + t.Fatalf("unexpected error from InsertHeaderChain: %v", err) + } +} + +// This test checks status reporting of InsertHeaderChain. +func TestHeaderInsertion(t *testing.T) { + var ( + db = rawdb.NewMemoryDatabase() + genesis = (&Genesis{BaseFee: big.NewInt(params.InitialBaseFee)}).MustCommit(db) + ) + + hc, err := NewHeaderChain(db, params.AllEthashProtocolChanges, ethash.NewFaker(), func() bool { return false }) + if err != nil { + t.Fatal(err) + } + // chain A: G->A1->A2...A128 + chainA := makeHeaderChain(genesis.Header(), 128, ethash.NewFaker(), db, 10) + // chain B: G->A1->B1...B128 + chainB := makeHeaderChain(chainA[0], 128, ethash.NewFaker(), db, 10) + log.Root().SetHandler(log.StdoutHandler) + + forker := NewForkChoice(hc, nil) + // Inserting 64 headers on an empty chain, expecting + // 1 callbacks, 1 canon-status, 0 sidestatus, + testInsert(t, hc, chainA[:64], CanonStatTy, nil, forker) + + // Inserting 64 identical headers, expecting + // 0 callbacks, 0 canon-status, 0 sidestatus, + testInsert(t, hc, chainA[:64], NonStatTy, nil, forker) + + // Inserting the same some old, some new headers + // 1 callbacks, 1 canon, 0 side + testInsert(t, hc, chainA[32:96], CanonStatTy, nil, forker) + + // Inserting side blocks, but not overtaking the canon chain + testInsert(t, hc, chainB[0:32], SideStatTy, nil, forker) + + // Inserting more side blocks, but we don't have the parent + testInsert(t, hc, chainB[34:36], NonStatTy, consensus.ErrUnknownAncestor, forker) + + // Inserting more sideblocks, overtaking the canon chain + testInsert(t, hc, chainB[32:97], CanonStatTy, nil, forker) + + // Inserting more A-headers, taking back the canonicality + testInsert(t, hc, chainA[90:100], CanonStatTy, nil, forker) + + // And B becomes canon again + testInsert(t, hc, chainB[97:107], CanonStatTy, nil, forker) + + // And B becomes even longer + testInsert(t, hc, chainB[107:128], CanonStatTy, nil, forker) +} diff --git a/core/helper_test.go b/core/helper_test.go deleted file mode 100644 index 4dbda2f2..00000000 --- a/core/helper_test.go +++ /dev/null @@ -1,87 +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 core - -import ( - "container/list" - - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" -) - -// Implement our EthTest Manager -type TestManager struct { - // stateManager *StateManager - eventMux *event.TypeMux - - db ethdb.Database - txPool *TxPool - blockChain *BlockChain - Blocks []*types.Block -} - -func (tm *TestManager) IsListening() bool { - return false -} - -func (tm *TestManager) IsMining() bool { - return false -} - -func (tm *TestManager) PeerCount() int { - return 0 -} - -func (tm *TestManager) Peers() *list.List { - return list.New() -} - -func (tm *TestManager) BlockChain() *BlockChain { - return tm.blockChain -} - -func (tm *TestManager) TxPool() *TxPool { - return tm.txPool -} - -// func (tm *TestManager) StateManager() *StateManager { -// return tm.stateManager -// } - -func (tm *TestManager) EventMux() *event.TypeMux { - return tm.eventMux -} - -// func (tm *TestManager) KeyManager() *crypto.KeyManager { -// return nil -// } - -func (tm *TestManager) Db() ethdb.Database { - return tm.db -} - -func NewTestManager() *TestManager { - testManager := &TestManager{} - testManager.eventMux = new(event.TypeMux) - testManager.db = rawdb.NewMemoryDatabase() - // testManager.txPool = NewTxPool(testManager) - // testManager.blockChain = NewBlockChain(testManager) - // testManager.stateManager = NewStateManager(testManager) - return testManager -} diff --git a/core/mkalloc.go b/core/mkalloc.go index b9761891..df167d70 100644 --- a/core/mkalloc.go +++ b/core/mkalloc.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build none // +build none /* @@ -34,8 +35,8 @@ import ( "sort" "strconv" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/rlp" ) type allocItem struct{ Addr, Balance *big.Int } diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 12e4d287..aeba3690 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -19,32 +19,31 @@ package rawdb import ( "bytes" "encoding/binary" + "errors" + "fmt" "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "sort" + + "github.com/ethereum/go-ethereum/common" + "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" + "github.com/ethereum/go-ethereum/rlp" ) // ReadCanonicalHash retrieves the hash assigned to a canonical block 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. + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + data, _ = reader.Ancient(chainFreezerHashTable, number) if len(data) == 0 { - data, _ = db.Ancient(freezerHashTable, number) + // Get it by hash from leveldb + data, _ = db.Get(headerHashKey(number)) } - } - if len(data) == 0 { - return common.Hash{} - } + return nil + }) return common.BytesToHash(data) } @@ -68,7 +67,7 @@ func ReadAllHashes(db ethdb.Iteratee, number uint64) []common.Hash { prefix := headerKeyPrefix(number) hashes := make([]common.Hash, 0, 1) - it := db.NewIteratorWithPrefix(prefix) + it := db.NewIterator(prefix, nil) defer it.Release() for it.Next() { @@ -79,6 +78,70 @@ func ReadAllHashes(db ethdb.Iteratee, number uint64) []common.Hash { return hashes } +type NumberHash struct { + Number uint64 + Hash common.Hash +} + +// ReadAllHashesInRange retrieves all the hashes assigned to blocks at certain +// heights, both canonical and reorged forks included. +// This method considers both limits to be _inclusive_. +func ReadAllHashesInRange(db ethdb.Iteratee, first, last uint64) []*NumberHash { + var ( + start = encodeBlockNumber(first) + keyLength = len(headerPrefix) + 8 + 32 + hashes = make([]*NumberHash, 0, 1+last-first) + it = db.NewIterator(headerPrefix, start) + ) + defer it.Release() + for it.Next() { + key := it.Key() + if len(key) != keyLength { + continue + } + num := binary.BigEndian.Uint64(key[len(headerPrefix) : len(headerPrefix)+8]) + if num > last { + break + } + hash := common.BytesToHash(key[len(key)-32:]) + hashes = append(hashes, &NumberHash{num, hash}) + } + return hashes +} + +// ReadAllCanonicalHashes retrieves all canonical number and hash mappings at the +// certain chain range. If the accumulated entries reaches the given threshold, +// abort the iteration and return the semi-finish result. +func ReadAllCanonicalHashes(db ethdb.Iteratee, from uint64, to uint64, limit int) ([]uint64, []common.Hash) { + // Short circuit if the limit is 0. + if limit == 0 { + return nil, nil + } + var ( + numbers []uint64 + hashes []common.Hash + ) + // Construct the key prefix of start point. + start, end := headerHashKey(from), headerHashKey(to) + it := db.NewIterator(nil, start) + defer it.Release() + + for it.Next() { + if bytes.Compare(it.Key(), end) >= 0 { + break + } + if key := it.Key(); len(key) == len(headerPrefix)+8+1 && bytes.Equal(key[len(key)-1:], headerHashSuffix) { + numbers = append(numbers, binary.BigEndian.Uint64(key[len(headerPrefix):len(headerPrefix)+8])) + hashes = append(hashes, common.BytesToHash(it.Value())) + // If the accumulated entries reaches the limit threshold, return. + if len(numbers) >= limit { + break + } + } + } + return numbers, hashes +} + // ReadHeaderNumber returns the header number assigned to a hash. func ReadHeaderNumber(db ethdb.KeyValueReader, hash common.Hash) *uint64 { data, _ := db.Get(headerNumberKey(hash)) @@ -153,43 +216,156 @@ func WriteHeadFastBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { } } -// ReadFastTrieProgress retrieves the number of tries nodes fast synced to allow -// reporting correct numbers across restarts. -func ReadFastTrieProgress(db ethdb.KeyValueReader) uint64 { - data, _ := db.Get(fastTrieProgressKey) +// ReadFinalizedBlockHash retrieves the hash of the finalized block. +func ReadFinalizedBlockHash(db ethdb.KeyValueReader) common.Hash { + data, _ := db.Get(headFinalizedBlockKey) if len(data) == 0 { - return 0 + return common.Hash{} } - return new(big.Int).SetBytes(data).Uint64() + return common.BytesToHash(data) } -// WriteFastTrieProgress stores the fast sync trie process counter to support -// retrieving it across restarts. -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) +// WriteFinalizedBlockHash stores the hash of the finalized block. +func WriteFinalizedBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { + if err := db.Put(headFinalizedBlockKey, hash.Bytes()); err != nil { + log.Crit("Failed to store last finalized block's hash", "err", err) } } -// ReadHeaderRLP retrieves a block header in its raw RLP database encoding. -func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { - data, _ := db.Ancient(freezerHeaderTable, number) +// ReadLastPivotNumber retrieves the number of the last pivot block. If the node +// full synced, the last pivot will always be nil. +func ReadLastPivotNumber(db ethdb.KeyValueReader) *uint64 { + data, _ := db.Get(lastPivotKey) 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 nil + } + var pivot uint64 + if err := rlp.DecodeBytes(data, &pivot); err != nil { + log.Error("Invalid pivot block number in database", "err", err) + return nil + } + return &pivot +} + +// WriteLastPivotNumber stores the number of the last pivot block. +func WriteLastPivotNumber(db ethdb.KeyValueWriter, pivot uint64) { + enc, err := rlp.EncodeToBytes(pivot) + if err != nil { + log.Crit("Failed to encode pivot block number", "err", err) + } + if err := db.Put(lastPivotKey, enc); err != nil { + log.Crit("Failed to store pivot block number", "err", err) + } +} + +// ReadTxIndexTail retrieves the number of oldest indexed block +// whose transaction indices has been indexed. If the corresponding entry +// is non-existent in database it means the indexing has been finished. +func ReadTxIndexTail(db ethdb.KeyValueReader) *uint64 { + data, _ := db.Get(txIndexTailKey) + if len(data) != 8 { + return nil + } + number := binary.BigEndian.Uint64(data) + return &number +} + +// WriteTxIndexTail stores the number of oldest indexed block +// into database. +func WriteTxIndexTail(db ethdb.KeyValueWriter, number uint64) { + if err := db.Put(txIndexTailKey, encodeBlockNumber(number)); err != nil { + log.Crit("Failed to store the transaction index tail", "err", err) + } +} + +// ReadFastTxLookupLimit retrieves the tx lookup limit used in fast sync. +func ReadFastTxLookupLimit(db ethdb.KeyValueReader) *uint64 { + data, _ := db.Get(fastTxLookupLimitKey) + if len(data) != 8 { + return nil + } + number := binary.BigEndian.Uint64(data) + return &number +} + +// WriteFastTxLookupLimit stores the txlookup limit used in fast sync into database. +func WriteFastTxLookupLimit(db ethdb.KeyValueWriter, number uint64) { + if err := db.Put(fastTxLookupLimitKey, encodeBlockNumber(number)); err != nil { + log.Crit("Failed to store transaction lookup limit for fast sync", "err", err) + } +} + +// ReadHeaderRange returns the rlp-encoded headers, starting at 'number', and going +// backwards towards genesis. This method assumes that the caller already has +// placed a cap on count, to prevent DoS issues. +// Since this method operates in head-towards-genesis mode, it will return an empty +// slice in case the head ('number') is missing. Hence, the caller must ensure that +// the head ('number') argument is actually an existing header. +// +// N.B: Since the input is a number, as opposed to a hash, it's implicit that +// this method only operates on canon headers. +func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValue { + var rlpHeaders []rlp.RawValue + if count == 0 { + return rlpHeaders + } + i := number + if count-1 > number { + // It's ok to request block 0, 1 item + count = number + 1 + } + limit, _ := db.Ancients() + // First read live blocks + if i >= limit { + // If we need to read live blocks, we need to figure out the hash first + hash := ReadCanonicalHash(db, number) + for ; i >= limit && count > 0; i-- { + if data, _ := db.Get(headerKey(i, hash)); len(data) > 0 { + rlpHeaders = append(rlpHeaders, data) + // Get the parent hash for next query + hash = types.HeaderParentHashFromRLP(data) + } else { + break // Maybe got moved to ancients + } + count-- } } + if count == 0 { + return rlpHeaders + } + // read remaining from ancients + max := count * 700 + data, err := db.AncientRange(chainFreezerHeaderTable, i+1-count, count, max) + if err == nil && uint64(len(data)) == count { + // the data is on the order [h, h+1, .., n] -- reordering needed + for i := range data { + rlpHeaders = append(rlpHeaders, data[len(data)-1-i]) + } + } + return rlpHeaders +} + +// ReadHeaderRLP retrieves a block header in its raw RLP database encoding. +func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + // First try to look up the data in ancient database. Extra hash + // comparison is necessary since ancient database only maintains + // the canonical data. + data, _ = reader.Ancient(chainFreezerHeaderTable, number) + if len(data) > 0 && crypto.Keccak256Hash(data) == hash { + return nil + } + // If not, try reading from leveldb + data, _ = db.Get(headerKey(number, hash)) + return nil + }) return data } // HasHeader verifies the existence of a block header corresponding to the hash. func HasHeader(db ethdb.Reader, hash common.Hash, number uint64) bool { - if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + if isCanon(db, number, hash) { return true } if has, err := db.Has(headerKey(number, hash)); !has || err != nil { @@ -249,19 +425,51 @@ func deleteHeaderWithoutNumber(db ethdb.KeyValueWriter, hash common.Hash, number } } +// isCanon is an internal utility method, to check whether the given number/hash +// is part of the ancient (canon) set. +func isCanon(reader ethdb.AncientReaderOp, number uint64, hash common.Hash) bool { + h, err := reader.Ancient(chainFreezerHashTable, number) + if err != nil { + return false + } + return bytes.Equal(h, hash[:]) +} + // ReadBodyRLP retrieves the block body (transactions and uncles) in RLP encoding. func ReadBodyRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { - data, _ := db.Ancient(freezerBodiesTable, number) - if len(data) == 0 { + // First try to look up the data in ancient database. Extra hash + // comparison is necessary since ancient database only maintains + // the canonical data. + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + // Check if the data is in ancients + if isCanon(reader, number, hash) { + data, _ = reader.Ancient(chainFreezerBodiesTable, number) + return nil + } + // If not, try reading from leveldb 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 nil + }) + return data +} + +// ReadCanonicalBodyRLP retrieves the block body (transactions and uncles) for the canonical +// block at number, in RLP encoding. +func ReadCanonicalBodyRLP(db ethdb.Reader, number uint64) rlp.RawValue { + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + data, _ = reader.Ancient(chainFreezerBodiesTable, number) + if len(data) > 0 { + return nil } - } + // Block is not in ancients, read from leveldb by hash and number. + // Note: ReadCanonicalHash cannot be used here because it also + // calls ReadAncients internally. + hash, _ := db.Get(headerHashKey(number)) + data, _ = db.Get(blockBodyKey(number, common.BytesToHash(hash))) + return nil + }) return data } @@ -274,7 +482,7 @@ func WriteBodyRLP(db ethdb.KeyValueWriter, hash common.Hash, number uint64, rlp // HasBody verifies the existence of a block body corresponding to the hash. func HasBody(db ethdb.Reader, hash common.Hash, number uint64) bool { - if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + if isCanon(db, number, hash) { return true } if has, err := db.Has(blockBodyKey(number, hash)); !has || err != nil { @@ -315,17 +523,17 @@ func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { // 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) + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + // Check if the data is in ancients + if isCanon(reader, number, hash) { + data, _ = reader.Ancient(chainFreezerDifficultyTable, number) + return nil } - } + // If not, try reading from leveldb + data, _ = db.Get(headerTDKey(number, hash)) + return nil + }) return data } @@ -364,7 +572,7 @@ func DeleteTd(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { // HasReceipts verifies the existence of all the transaction receipts belonging // to a block. func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { - if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + if isCanon(db, number, hash) { return true } if has, err := db.Has(blockReceiptsKey(number, hash)); !has || err != nil { @@ -375,17 +583,17 @@ func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { // 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) + var data []byte + db.ReadAncients(func(reader ethdb.AncientReaderOp) error { + // Check if the data is in ancients + if isCanon(reader, number, hash) { + data, _ = reader.Ancient(chainFreezerReceiptTable, number) + return nil } - } + // If not, try reading from leveldb + data, _ = db.Get(blockReceiptsKey(number, hash)) + return nil + }) return data } @@ -412,7 +620,7 @@ func ReadRawReceipts(db ethdb.Reader, hash common.Hash, number uint64) types.Rec } // ReadReceipts retrieves all the transaction receipts belonging to a block, including -// its correspoinding metadata fields. If it is unable to populate these metadata +// its corresponding 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' @@ -460,6 +668,106 @@ func DeleteReceipts(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { } } +// storedReceiptRLP is the storage encoding of a receipt. +// Re-definition in core/types/receipt.go. +type storedReceiptRLP struct { + PostStateOrStatus []byte + CumulativeGasUsed uint64 + Logs []*types.LogForStorage +} + +// ReceiptLogs is a barebone version of ReceiptForStorage which only keeps +// the list of logs. When decoding a stored receipt into this object we +// avoid creating the bloom filter. +type receiptLogs struct { + Logs []*types.Log +} + +// DecodeRLP implements rlp.Decoder. +func (r *receiptLogs) DecodeRLP(s *rlp.Stream) error { + var stored storedReceiptRLP + if err := s.Decode(&stored); err != nil { + return err + } + r.Logs = make([]*types.Log, len(stored.Logs)) + for i, log := range stored.Logs { + r.Logs[i] = (*types.Log)(log) + } + return nil +} + +// DeriveLogFields fills the logs in receiptLogs with information such as block number, txhash, etc. +func deriveLogFields(receipts []*receiptLogs, hash common.Hash, number uint64, txs types.Transactions) error { + logIndex := uint(0) + if len(txs) != len(receipts) { + return errors.New("transaction and receipt count mismatch") + } + for i := 0; i < len(receipts); i++ { + txHash := txs[i].Hash() + // The derived log fields can simply be set from the block and transaction + for j := 0; j < len(receipts[i].Logs); j++ { + receipts[i].Logs[j].BlockNumber = number + receipts[i].Logs[j].BlockHash = hash + receipts[i].Logs[j].TxHash = txHash + receipts[i].Logs[j].TxIndex = uint(i) + receipts[i].Logs[j].Index = logIndex + logIndex++ + } + } + return nil +} + +// ReadLogs retrieves the logs for all transactions in a block. The log fields +// are populated with metadata. In case the receipts or the block body +// are not found, a nil is returned. +func ReadLogs(db ethdb.Reader, hash common.Hash, number uint64, config *params.ChainConfig) [][]*types.Log { + // Retrieve the flattened receipt slice + data := ReadReceiptsRLP(db, hash, number) + if len(data) == 0 { + return nil + } + receipts := []*receiptLogs{} + if err := rlp.DecodeBytes(data, &receipts); err != nil { + // Receipts might be in the legacy format, try decoding that. + // TODO: to be removed after users migrated + if logs := readLegacyLogs(db, hash, number, config); logs != nil { + return logs + } + log.Error("Invalid receipt array RLP", "hash", hash, "err", err) + 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 := deriveLogFields(receipts, hash, number, body.Transactions); err != nil { + log.Error("Failed to derive block receipts fields", "hash", hash, "number", number, "err", err) + return nil + } + logs := make([][]*types.Log, len(receipts)) + for i, receipt := range receipts { + logs[i] = receipt.Logs + } + return logs +} + +// readLegacyLogs is a temporary workaround for when trying to read logs +// from a block which has its receipt stored in the legacy format. It'll +// be removed after users have migrated their freezer databases. +func readLegacyLogs(db ethdb.Reader, hash common.Hash, number uint64, config *params.ChainConfig) [][]*types.Log { + receipts := ReadReceipts(db, hash, number, config) + if receipts == nil { + return nil + } + logs := make([][]*types.Log, len(receipts)) + for i, receipt := range receipts { + logs[i] = receipt.Logs + } + return logs +} + // ReadBlock retrieves an entire block corresponding to the hash, assembling it // back from the stored header and body. If either the header or body could not // be retrieved nil is returned. @@ -484,35 +792,49 @@ func WriteBlock(db ethdb.KeyValueWriter, block *types.Block) { 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) +// WriteAncientBlocks writes entire block data into ancient store and returns the total written size. +func WriteAncientBlocks(db ethdb.AncientWriter, blocks []*types.Block, receipts []types.Receipts, td *big.Int) (int64, error) { + var ( + tdSum = new(big.Int).Set(td) + stReceipts []*types.ReceiptForStorage + ) + return db.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for i, block := range blocks { + // Convert receipts to storage format and sum up total difficulty. + stReceipts = stReceipts[:0] + for _, receipt := range receipts[i] { + stReceipts = append(stReceipts, (*types.ReceiptForStorage)(receipt)) + } + header := block.Header() + if i > 0 { + tdSum.Add(tdSum, header.Difficulty) + } + if err := writeAncientBlock(op, block, header, stReceipts, tdSum); err != nil { + return err + } + } + return nil + }) +} + +func writeAncientBlock(op ethdb.AncientWriteOp, block *types.Block, header *types.Header, receipts []*types.ReceiptForStorage, td *big.Int) error { + num := block.NumberU64() + if err := op.AppendRaw(chainFreezerHashTable, num, block.Hash().Bytes()); err != nil { + return fmt.Errorf("can't add block %d hash: %v", num, err) } - bodyBlob, err := rlp.EncodeToBytes(block.Body()) - if err != nil { - log.Crit("Failed to RLP encode body", "err", err) + if err := op.Append(chainFreezerHeaderTable, num, header); err != nil { + return fmt.Errorf("can't append block header %d: %v", num, err) } - storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) - for i, receipt := range receipts { - storageReceipts[i] = (*types.ReceiptForStorage)(receipt) + if err := op.Append(chainFreezerBodiesTable, num, block.Body()); err != nil { + return fmt.Errorf("can't append block body %d: %v", num, err) } - receiptBlob, err := rlp.EncodeToBytes(storageReceipts) - if err != nil { - log.Crit("Failed to RLP encode block receipts", "err", err) + if err := op.Append(chainFreezerReceiptTable, num, receipts); err != nil { + return fmt.Errorf("can't append block %d receipts: %v", num, 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) + if err := op.Append(chainFreezerDifficultyTable, num, td); err != nil { + return fmt.Errorf("can't append block %d total difficulty: %v", num, err) } - return len(headerBlob) + len(bodyBlob) + len(receiptBlob) + len(tdBlob) + common.HashLength + return nil } // DeleteBlock removes all block data associated with a hash. @@ -532,6 +854,102 @@ func DeleteBlockWithoutNumber(db ethdb.KeyValueWriter, hash common.Hash, number DeleteTd(db, hash, number) } +const badBlockToKeep = 10 + +type badBlock struct { + Header *types.Header + Body *types.Body +} + +// badBlockList implements the sort interface to allow sorting a list of +// bad blocks by their number in the reverse order. +type badBlockList []*badBlock + +func (s badBlockList) Len() int { return len(s) } +func (s badBlockList) Less(i, j int) bool { + return s[i].Header.Number.Uint64() < s[j].Header.Number.Uint64() +} +func (s badBlockList) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// ReadBadBlock retrieves the bad block with the corresponding block hash. +func ReadBadBlock(db ethdb.Reader, hash common.Hash) *types.Block { + blob, err := db.Get(badBlockKey) + if err != nil { + return nil + } + var badBlocks badBlockList + if err := rlp.DecodeBytes(blob, &badBlocks); err != nil { + return nil + } + for _, bad := range badBlocks { + if bad.Header.Hash() == hash { + return types.NewBlockWithHeader(bad.Header).WithBody(bad.Body.Transactions, bad.Body.Uncles) + } + } + return nil +} + +// ReadAllBadBlocks retrieves all the bad blocks in the database. +// All returned blocks are sorted in reverse order by number. +func ReadAllBadBlocks(db ethdb.Reader) []*types.Block { + blob, err := db.Get(badBlockKey) + if err != nil { + return nil + } + var badBlocks badBlockList + if err := rlp.DecodeBytes(blob, &badBlocks); err != nil { + return nil + } + var blocks []*types.Block + for _, bad := range badBlocks { + blocks = append(blocks, types.NewBlockWithHeader(bad.Header).WithBody(bad.Body.Transactions, bad.Body.Uncles)) + } + return blocks +} + +// WriteBadBlock serializes the bad block into the database. If the cumulated +// bad blocks exceeds the limitation, the oldest will be dropped. +func WriteBadBlock(db ethdb.KeyValueStore, block *types.Block) { + blob, err := db.Get(badBlockKey) + if err != nil { + log.Warn("Failed to load old bad blocks", "error", err) + } + var badBlocks badBlockList + if len(blob) > 0 { + if err := rlp.DecodeBytes(blob, &badBlocks); err != nil { + log.Crit("Failed to decode old bad blocks", "error", err) + } + } + for _, b := range badBlocks { + if b.Header.Number.Uint64() == block.NumberU64() && b.Header.Hash() == block.Hash() { + log.Info("Skip duplicated bad block", "number", block.NumberU64(), "hash", block.Hash()) + return + } + } + badBlocks = append(badBlocks, &badBlock{ + Header: block.Header(), + Body: block.Body(), + }) + sort.Sort(sort.Reverse(badBlocks)) + if len(badBlocks) > badBlockToKeep { + badBlocks = badBlocks[:badBlockToKeep] + } + data, err := rlp.EncodeToBytes(badBlocks) + if err != nil { + log.Crit("Failed to encode bad blocks", "err", err) + } + if err := db.Put(badBlockKey, data); err != nil { + log.Crit("Failed to write bad blocks", "err", err) + } +} + +// DeleteBadBlocks deletes all the bad blocks from the database +func DeleteBadBlocks(db ethdb.KeyValueWriter) { + if err := db.Delete(badBlockKey); err != nil { + log.Crit("Failed to delete bad blocks", "err", err) + } +} + // FindCommonAncestor returns the last common ancestor of two block headers func FindCommonAncestor(db ethdb.Reader, a, b *types.Header) *types.Header { for bn := b.Number.Uint64(); a.Number.Uint64() > bn; { @@ -558,3 +976,29 @@ func FindCommonAncestor(db ethdb.Reader, a, b *types.Header) *types.Header { } return a } + +// ReadHeadHeader returns the current canonical head header. +func ReadHeadHeader(db ethdb.Reader) *types.Header { + headHeaderHash := ReadHeadHeaderHash(db) + if headHeaderHash == (common.Hash{}) { + return nil + } + headHeaderNumber := ReadHeaderNumber(db, headHeaderHash) + if headHeaderNumber == nil { + return nil + } + return ReadHeader(db, headHeaderHash, *headHeaderNumber) +} + +// ReadHeadBlock returns the current canonical head block. +func ReadHeadBlock(db ethdb.Reader) *types.Block { + headBlockHash := ReadHeadBlockHash(db) + if headBlockHash == (common.Hash{}) { + return nil + } + headBlockNumber := ReadHeaderNumber(db, headBlockHash) + if headBlockNumber == nil { + return nil + } + return ReadBlock(db, headBlockHash, *headBlockNumber) +} diff --git a/core/rawdb/accessors_chain_test.go b/core/rawdb/accessors_chain_test.go index 2f431196..21d23e1f 100644 --- a/core/rawdb/accessors_chain_test.go +++ b/core/rawdb/accessors_chain_test.go @@ -21,12 +21,16 @@ import ( "encoding/hex" "fmt" "math/big" + "math/rand" + "os" + "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) @@ -81,7 +85,7 @@ func TestBodyStorage(t *testing.T) { WriteBody(db, hash, 0, body) if entry := ReadBody(db, hash, 0); entry == nil { t.Fatalf("Stored body not found") - } else if types.DeriveSha(types.Transactions(entry.Transactions)) != types.DeriveSha(types.Transactions(body.Transactions)) || types.CalcUncleHash(entry.Uncles) != types.CalcUncleHash(body.Uncles) { + } else if types.DeriveSha(types.Transactions(entry.Transactions), newHasher()) != types.DeriveSha(types.Transactions(body.Transactions), newHasher()) || types.CalcUncleHash(entry.Uncles) != types.CalcUncleHash(body.Uncles) { t.Fatalf("Retrieved body mismatch: have %v, want %v", entry, body) } if entry := ReadBodyRLP(db, hash, 0); entry == nil { @@ -135,7 +139,7 @@ func TestBlockStorage(t *testing.T) { } if entry := ReadBody(db, block.Hash(), block.NumberU64()); entry == nil { t.Fatalf("Stored body not found") - } else if types.DeriveSha(types.Transactions(entry.Transactions)) != types.DeriveSha(block.Transactions()) || types.CalcUncleHash(entry.Uncles) != types.CalcUncleHash(block.Uncles()) { + } else if types.DeriveSha(types.Transactions(entry.Transactions), newHasher()) != types.DeriveSha(block.Transactions(), newHasher()) || types.CalcUncleHash(entry.Uncles) != types.CalcUncleHash(block.Uncles()) { t.Fatalf("Retrieved body mismatch: have %v, want %v", entry, block.Body()) } // Delete the block and verify the execution @@ -185,6 +189,75 @@ func TestPartialBlockStorage(t *testing.T) { } } +// Tests block storage and retrieval operations. +func TestBadBlockStorage(t *testing.T) { + db := NewMemoryDatabase() + + // Create a test block to move around the database and make sure it's really new + block := types.NewBlockWithHeader(&types.Header{ + Number: big.NewInt(1), + Extra: []byte("bad block"), + UncleHash: types.EmptyUncleHash, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + }) + if entry := ReadBadBlock(db, block.Hash()); entry != nil { + t.Fatalf("Non existent block returned: %v", entry) + } + // Write and verify the block in the database + WriteBadBlock(db, block) + if entry := ReadBadBlock(db, block.Hash()); entry == nil { + t.Fatalf("Stored block not found") + } else if entry.Hash() != block.Hash() { + t.Fatalf("Retrieved block mismatch: have %v, want %v", entry, block) + } + // Write one more bad block + blockTwo := types.NewBlockWithHeader(&types.Header{ + Number: big.NewInt(2), + Extra: []byte("bad block two"), + UncleHash: types.EmptyUncleHash, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + }) + WriteBadBlock(db, blockTwo) + + // Write the block one again, should be filtered out. + WriteBadBlock(db, block) + badBlocks := ReadAllBadBlocks(db) + if len(badBlocks) != 2 { + t.Fatalf("Failed to load all bad blocks") + } + + // Write a bunch of bad blocks, all the blocks are should sorted + // in reverse order. The extra blocks should be truncated. + for _, n := range rand.Perm(100) { + block := types.NewBlockWithHeader(&types.Header{ + Number: big.NewInt(int64(n)), + Extra: []byte("bad block"), + UncleHash: types.EmptyUncleHash, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + }) + WriteBadBlock(db, block) + } + badBlocks = ReadAllBadBlocks(db) + if len(badBlocks) != badBlockToKeep { + t.Fatalf("The number of persised bad blocks in incorrect %d", len(badBlocks)) + } + for i := 0; i < len(badBlocks)-1; i++ { + if badBlocks[i].NumberU64() < badBlocks[i+1].NumberU64() { + t.Fatalf("The bad blocks are not sorted #[%d](%d) < #[%d](%d)", i, i+1, badBlocks[i].NumberU64(), badBlocks[i+1].NumberU64()) + } + } + + // Delete all bad blocks + DeleteBadBlocks(db) + badBlocks = ReadAllBadBlocks(db) + if len(badBlocks) != 0 { + t.Fatalf("Failed to delete bad blocks") + } +} + // Tests block total difficulty storage and retrieval operations. func TestTdStorage(t *testing.T) { db := NewMemoryDatabase() @@ -212,7 +285,7 @@ func TestTdStorage(t *testing.T) { func TestCanonicalMappingStorage(t *testing.T) { db := NewMemoryDatabase() - // Create a test canonical number and assinged hash to move around + // Create a test canonical number and assigned hash to move around hash, number := common.Hash{0: 0xff}, uint64(314) if entry := ReadCanonicalHash(db, number); entry != (common.Hash{}) { t.Fatalf("Non existent canonical mapping returned: %v", entry) @@ -358,3 +431,507 @@ func checkReceiptsRLP(have, want types.Receipts) error { } return nil } + +func TestAncientStorage(t *testing.T) { + // Freezer style fast import the chain. + frdir := t.TempDir() + + db, err := NewDatabaseWithFreezer(NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create database with ancient backend") + } + defer db.Close() + // Create a test block + block := types.NewBlockWithHeader(&types.Header{ + Number: big.NewInt(0), + Extra: []byte("test block"), + UncleHash: types.EmptyUncleHash, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + }) + // Ensure nothing non-existent will be read + hash, number := block.Hash(), block.NumberU64() + if blob := ReadHeaderRLP(db, hash, number); len(blob) > 0 { + t.Fatalf("non existent header returned") + } + if blob := ReadBodyRLP(db, hash, number); len(blob) > 0 { + t.Fatalf("non existent body returned") + } + if blob := ReadReceiptsRLP(db, hash, number); len(blob) > 0 { + t.Fatalf("non existent receipts returned") + } + if blob := ReadTdRLP(db, hash, number); len(blob) > 0 { + t.Fatalf("non existent td returned") + } + + // Write and verify the header in the database + WriteAncientBlocks(db, []*types.Block{block}, []types.Receipts{nil}, big.NewInt(100)) + + if blob := ReadHeaderRLP(db, hash, number); len(blob) == 0 { + t.Fatalf("no header returned") + } + if blob := ReadBodyRLP(db, hash, number); len(blob) == 0 { + t.Fatalf("no body returned") + } + if blob := ReadReceiptsRLP(db, hash, number); len(blob) == 0 { + t.Fatalf("no receipts returned") + } + if blob := ReadTdRLP(db, hash, number); len(blob) == 0 { + t.Fatalf("no td returned") + } + + // Use a fake hash for data retrieval, nothing should be returned. + fakeHash := common.BytesToHash([]byte{0x01, 0x02, 0x03}) + if blob := ReadHeaderRLP(db, fakeHash, number); len(blob) != 0 { + t.Fatalf("invalid header returned") + } + if blob := ReadBodyRLP(db, fakeHash, number); len(blob) != 0 { + t.Fatalf("invalid body returned") + } + if blob := ReadReceiptsRLP(db, fakeHash, number); len(blob) != 0 { + t.Fatalf("invalid receipts returned") + } + if blob := ReadTdRLP(db, fakeHash, number); len(blob) != 0 { + t.Fatalf("invalid td returned") + } +} + +func TestCanonicalHashIteration(t *testing.T) { + var cases = []struct { + from, to uint64 + limit int + expect []uint64 + }{ + {1, 8, 0, nil}, + {1, 8, 1, []uint64{1}}, + {1, 8, 10, []uint64{1, 2, 3, 4, 5, 6, 7}}, + {1, 9, 10, []uint64{1, 2, 3, 4, 5, 6, 7, 8}}, + {2, 9, 10, []uint64{2, 3, 4, 5, 6, 7, 8}}, + {9, 10, 10, nil}, + } + // Test empty db iteration + db := NewMemoryDatabase() + numbers, _ := ReadAllCanonicalHashes(db, 0, 10, 10) + if len(numbers) != 0 { + t.Fatalf("No entry should be returned to iterate an empty db") + } + // Fill database with testing data. + for i := uint64(1); i <= 8; i++ { + WriteCanonicalHash(db, common.Hash{}, i) + WriteTd(db, common.Hash{}, i, big.NewInt(10)) // Write some interferential data + } + for i, c := range cases { + numbers, _ := ReadAllCanonicalHashes(db, c.from, c.to, c.limit) + if !reflect.DeepEqual(numbers, c.expect) { + t.Fatalf("Case %d failed, want %v, got %v", i, c.expect, numbers) + } + } +} + +func TestHashesInRange(t *testing.T) { + mkHeader := func(number, seq int) *types.Header { + h := types.Header{ + Difficulty: new(big.Int), + Number: big.NewInt(int64(number)), + GasLimit: uint64(seq), + } + return &h + } + db := NewMemoryDatabase() + // For each number, write N versions of that particular number + total := 0 + for i := 0; i < 15; i++ { + for ii := 0; ii < i; ii++ { + WriteHeader(db, mkHeader(i, ii)) + total++ + } + } + if have, want := len(ReadAllHashesInRange(db, 10, 10)), 10; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashesInRange(db, 10, 9)), 0; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashesInRange(db, 0, 100)), total; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashesInRange(db, 9, 10)), 9+10; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashes(db, 10)), 10; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashes(db, 16)), 0; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } + if have, want := len(ReadAllHashes(db, 1)), 1; have != want { + t.Fatalf("Wrong number of hashes read, want %d, got %d", want, have) + } +} + +// This measures the write speed of the WriteAncientBlocks operation. +func BenchmarkWriteAncientBlocks(b *testing.B) { + // Open freezer database. + frdir := b.TempDir() + db, err := NewDatabaseWithFreezer(NewMemoryDatabase(), frdir, "", false) + if err != nil { + b.Fatalf("failed to create database with ancient backend") + } + defer db.Close() + + // Create the data to insert. The blocks must have consecutive numbers, so we create + // all of them ahead of time. However, there is no need to create receipts + // individually for each block, just make one batch here and reuse it for all writes. + const batchSize = 128 + const blockTxs = 20 + allBlocks := makeTestBlocks(b.N, blockTxs) + batchReceipts := makeTestReceipts(batchSize, blockTxs) + b.ResetTimer() + + // The benchmark loop writes batches of blocks, but note that the total block count is + // b.N. This means the resulting ns/op measurement is the time it takes to write a + // single block and its associated data. + var td = big.NewInt(55) + var totalSize int64 + for i := 0; i < b.N; i += batchSize { + length := batchSize + if i+batchSize > b.N { + length = b.N - i + } + + blocks := allBlocks[i : i+length] + receipts := batchReceipts[:length] + writeSize, err := WriteAncientBlocks(db, blocks, receipts, td) + if err != nil { + b.Fatal(err) + } + totalSize += writeSize + } + + // Enable MB/s reporting. + b.SetBytes(totalSize / int64(b.N)) +} + +// makeTestBlocks creates fake blocks for the ancient write benchmark. +func makeTestBlocks(nblock int, txsPerBlock int) []*types.Block { + key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + signer := types.LatestSignerForChainID(big.NewInt(8)) + + // Create transactions. + txs := make([]*types.Transaction, txsPerBlock) + for i := 0; i < len(txs); i++ { + var err error + to := common.Address{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} + txs[i], err = types.SignNewTx(key, signer, &types.LegacyTx{ + Nonce: 2, + GasPrice: big.NewInt(30000), + Gas: 0x45454545, + To: &to, + }) + if err != nil { + panic(err) + } + } + + // Create the blocks. + blocks := make([]*types.Block, nblock) + for i := 0; i < nblock; i++ { + header := &types.Header{ + Number: big.NewInt(int64(i)), + Extra: []byte("test block"), + } + blocks[i] = types.NewBlockWithHeader(header).WithBody(txs, nil) + blocks[i].Hash() // pre-cache the block hash + } + return blocks +} + +// makeTestReceipts creates fake receipts for the ancient write benchmark. +func makeTestReceipts(n int, nPerBlock int) []types.Receipts { + receipts := make([]*types.Receipt, nPerBlock) + for i := 0; i < len(receipts); i++ { + receipts[i] = &types.Receipt{ + Status: types.ReceiptStatusSuccessful, + CumulativeGasUsed: 0x888888888, + Logs: make([]*types.Log, 5), + } + } + allReceipts := make([]types.Receipts, n) + for i := 0; i < n; i++ { + allReceipts[i] = receipts + } + return allReceipts +} + +type fullLogRLP struct { + Address common.Address + Topics []common.Hash + Data []byte + BlockNumber uint64 + TxHash common.Hash + TxIndex uint + BlockHash common.Hash + Index uint +} + +func newFullLogRLP(l *types.Log) *fullLogRLP { + return &fullLogRLP{ + Address: l.Address, + Topics: l.Topics, + Data: l.Data, + BlockNumber: l.BlockNumber, + TxHash: l.TxHash, + TxIndex: l.TxIndex, + BlockHash: l.BlockHash, + Index: l.Index, + } +} + +// Tests that logs associated with a single block can be retrieved. +func TestReadLogs(t *testing.T) { + 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, + Logs: []*types.Log{ + {Address: common.BytesToAddress([]byte{0x11})}, + {Address: common.BytesToAddress([]byte{0x01, 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, + Logs: []*types.Log{ + {Address: common.BytesToAddress([]byte{0x22})}, + {Address: common.BytesToAddress([]byte{0x02, 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} + + hash := common.BytesToHash([]byte{0x03, 0x14}) + // Check that no receipt entries are in a pristine database + 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) + + logs := ReadLogs(db, hash, 0, params.TestChainConfig) + if len(logs) == 0 { + t.Fatalf("no logs returned") + } + if have, want := len(logs), 2; have != want { + t.Fatalf("unexpected number of logs returned, have %d want %d", have, want) + } + if have, want := len(logs[0]), 2; have != want { + t.Fatalf("unexpected number of logs[0] returned, have %d want %d", have, want) + } + if have, want := len(logs[1]), 2; have != want { + t.Fatalf("unexpected number of logs[1] returned, have %d want %d", have, want) + } + + // Fill in log fields so we can compare their rlp encoding + if err := types.Receipts(receipts).DeriveFields(params.TestChainConfig, hash, 0, body.Transactions); err != nil { + t.Fatal(err) + } + for i, pr := range receipts { + for j, pl := range pr.Logs { + rlpHave, err := rlp.EncodeToBytes(newFullLogRLP(logs[i][j])) + if err != nil { + t.Fatal(err) + } + rlpWant, err := rlp.EncodeToBytes(newFullLogRLP(pl)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(rlpHave, rlpWant) { + t.Fatalf("receipt #%d: receipt mismatch: have %s, want %s", i, hex.EncodeToString(rlpHave), hex.EncodeToString(rlpWant)) + } + } + } +} + +func TestDeriveLogFields(t *testing.T) { + // Create a few transactions to have receipts for + to2 := common.HexToAddress("0x2") + to3 := common.HexToAddress("0x3") + txs := types.Transactions{ + types.NewTx(&types.LegacyTx{ + Nonce: 1, + Value: big.NewInt(1), + Gas: 1, + GasPrice: big.NewInt(1), + }), + types.NewTx(&types.LegacyTx{ + To: &to2, + Nonce: 2, + Value: big.NewInt(2), + Gas: 2, + GasPrice: big.NewInt(2), + }), + types.NewTx(&types.AccessListTx{ + To: &to3, + Nonce: 3, + Value: big.NewInt(3), + Gas: 3, + GasPrice: big.NewInt(3), + }), + } + // Create the corresponding receipts + receipts := []*receiptLogs{ + { + Logs: []*types.Log{ + {Address: common.BytesToAddress([]byte{0x11})}, + {Address: common.BytesToAddress([]byte{0x01, 0x11})}, + }, + }, + { + Logs: []*types.Log{ + {Address: common.BytesToAddress([]byte{0x22})}, + {Address: common.BytesToAddress([]byte{0x02, 0x22})}, + }, + }, + { + Logs: []*types.Log{ + {Address: common.BytesToAddress([]byte{0x33})}, + {Address: common.BytesToAddress([]byte{0x03, 0x33})}, + }, + }, + } + + // Derive log metadata fields + number := big.NewInt(1) + hash := common.BytesToHash([]byte{0x03, 0x14}) + if err := deriveLogFields(receipts, hash, number.Uint64(), txs); err != nil { + t.Fatal(err) + } + + // Iterate over all the computed fields and check that they're correct + logIndex := uint(0) + for i := range receipts { + 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].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 BenchmarkDecodeRLPLogs(b *testing.B) { + // Encoded receipts from block 0x14ee094309fbe8f70b65f45ebcc08fb33f126942d97464aad5eb91cfd1e2d269 + buf, err := os.ReadFile("testdata/stored_receipts.bin") + if err != nil { + b.Fatal(err) + } + b.Run("ReceiptForStorage", func(b *testing.B) { + b.ReportAllocs() + var r []*types.ReceiptForStorage + for i := 0; i < b.N; i++ { + if err := rlp.DecodeBytes(buf, &r); err != nil { + b.Fatal(err) + } + } + }) + b.Run("rlpLogs", func(b *testing.B) { + b.ReportAllocs() + var r []*receiptLogs + for i := 0; i < b.N; i++ { + if err := rlp.DecodeBytes(buf, &r); err != nil { + b.Fatal(err) + } + } + }) +} + +func TestHeadersRLPStorage(t *testing.T) { + // Have N headers in the freezer + frdir := t.TempDir() + + db, err := NewDatabaseWithFreezer(NewMemoryDatabase(), frdir, "", false) + if err != nil { + t.Fatalf("failed to create database with ancient backend") + } + defer db.Close() + // Create blocks + var chain []*types.Block + var pHash common.Hash + for i := 0; i < 100; i++ { + block := types.NewBlockWithHeader(&types.Header{ + Number: big.NewInt(int64(i)), + Extra: []byte("test block"), + UncleHash: types.EmptyUncleHash, + TxHash: types.EmptyRootHash, + ReceiptHash: types.EmptyRootHash, + ParentHash: pHash, + }) + chain = append(chain, block) + pHash = block.Hash() + } + var receipts []types.Receipts = make([]types.Receipts, 100) + // Write first half to ancients + WriteAncientBlocks(db, chain[:50], receipts[:50], big.NewInt(100)) + // Write second half to db + for i := 50; i < 100; i++ { + WriteCanonicalHash(db, chain[i].Hash(), chain[i].NumberU64()) + WriteBlock(db, chain[i]) + } + checkSequence := func(from, amount int) { + headersRlp := ReadHeaderRange(db, uint64(from), uint64(amount)) + if have, want := len(headersRlp), amount; have != want { + t.Fatalf("have %d headers, want %d", have, want) + } + for i, headerRlp := range headersRlp { + var header types.Header + if err := rlp.DecodeBytes(headerRlp, &header); err != nil { + t.Fatal(err) + } + if have, want := header.Number.Uint64(), uint64(from-i); have != want { + t.Fatalf("wrong number, have %d want %d", have, want) + } + } + } + checkSequence(99, 20) // Latest block and 19 parents + checkSequence(99, 50) // Latest block -> all db blocks + checkSequence(99, 51) // Latest block -> one from ancients + checkSequence(99, 52) // Latest blocks -> two from ancients + checkSequence(50, 2) // One from db, one from ancients + checkSequence(49, 1) // One from ancients + checkSequence(49, 50) // All ancient ones + checkSequence(99, 100) // All blocks + checkSequence(0, 1) // Only genesis + checkSequence(1, 1) // Only block 1 + checkSequence(1, 2) // Genesis + block 1 +} diff --git a/core/rawdb/accessors_indexes.go b/core/rawdb/accessors_indexes.go index e3c81f1e..25a44354 100644 --- a/core/rawdb/accessors_indexes.go +++ b/core/rawdb/accessors_indexes.go @@ -17,14 +17,15 @@ package rawdb import ( + "bytes" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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 @@ -52,20 +53,44 @@ func ReadTxLookupEntry(db ethdb.Reader, hash common.Hash) *uint64 { return &entry.BlockIndex } -// WriteTxLookupEntries stores a positional metadata for every transaction from +// writeTxLookupEntry stores a positional metadata for a transaction, +// enabling hash based transaction and receipt lookups. +func writeTxLookupEntry(db ethdb.KeyValueWriter, hash common.Hash, numberBytes []byte) { + if err := db.Put(txLookupKey(hash), numberBytes); err != nil { + log.Crit("Failed to store transaction lookup entry", "err", err) + } +} + +// WriteTxLookupEntries is identical to WriteTxLookupEntry, but it works on +// a list of hashes +func WriteTxLookupEntries(db ethdb.KeyValueWriter, number uint64, hashes []common.Hash) { + numberBytes := new(big.Int).SetUint64(number).Bytes() + for _, hash := range hashes { + writeTxLookupEntry(db, hash, numberBytes) + } +} + +// WriteTxLookupEntriesByBlock stores a positional metadata for every transaction from // a block, enabling hash based transaction and receipt lookups. -func WriteTxLookupEntries(db ethdb.KeyValueWriter, block *types.Block) { - number := block.Number().Bytes() +func WriteTxLookupEntriesByBlock(db ethdb.KeyValueWriter, block *types.Block) { + numberBytes := 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) - } + writeTxLookupEntry(db, tx.Hash(), numberBytes) } } // DeleteTxLookupEntry removes all transaction data associated with a hash. func DeleteTxLookupEntry(db ethdb.KeyValueWriter, hash common.Hash) { - db.Delete(txLookupKey(hash)) + if err := db.Delete(txLookupKey(hash)); err != nil { + log.Crit("Failed to delete transaction lookup entry", "err", err) + } +} + +// DeleteTxLookupEntries removes all transaction lookups for a given block. +func DeleteTxLookupEntries(db ethdb.KeyValueWriter, hashes []common.Hash) { + for _, hash := range hashes { + DeleteTxLookupEntry(db, hash) + } } // ReadTransaction retrieves a specific transaction from the database, along with @@ -81,7 +106,7 @@ func ReadTransaction(db ethdb.Reader, hash common.Hash) (*types.Transaction, com } body := ReadBody(db, blockHash, *blockNumber) if body == nil { - log.Error("Transaction referenced missing", "number", blockNumber, "hash", blockHash) + log.Error("Transaction referenced missing", "number", *blockNumber, "hash", blockHash) return nil, common.Hash{}, 0, 0 } for txIndex, tx := range body.Transactions { @@ -89,7 +114,7 @@ func ReadTransaction(db ethdb.Reader, hash common.Hash) (*types.Transaction, com return tx, blockHash, *blockNumber, uint64(txIndex) } } - log.Error("Transaction not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + log.Error("Transaction not found", "number", *blockNumber, "hash", blockHash, "txhash", hash) return nil, common.Hash{}, 0, 0 } @@ -112,7 +137,7 @@ func ReadReceipt(db ethdb.Reader, hash common.Hash, config *params.ChainConfig) return receipt, blockHash, *blockNumber, uint64(receiptIndex) } } - log.Error("Receipt not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + log.Error("Receipt not found", "number", *blockNumber, "hash", blockHash, "txhash", hash) return nil, common.Hash{}, 0, 0 } @@ -129,3 +154,24 @@ func WriteBloomBits(db ethdb.KeyValueWriter, bit uint, section uint64, head comm log.Crit("Failed to store bloom bits", "err", err) } } + +// DeleteBloombits removes all compressed bloom bits vector belonging to the +// given section range and bit index. +func DeleteBloombits(db ethdb.Database, bit uint, from uint64, to uint64) { + start, end := bloomBitsKey(bit, from, common.Hash{}), bloomBitsKey(bit, to, common.Hash{}) + it := db.NewIterator(nil, start) + defer it.Release() + + for it.Next() { + if bytes.Compare(it.Key(), end) >= 0 { + break + } + if len(it.Key()) != len(bloomBitsPrefix)+2+8+32 { + continue + } + db.Delete(it.Key()) + } + if it.Error() != nil { + log.Crit("Failed to delete bloom bits", "err", it.Error()) + } +} diff --git a/core/rawdb/accessors_indexes_test.go b/core/rawdb/accessors_indexes_test.go index 31f97733..4734e986 100644 --- a/core/rawdb/accessors_indexes_test.go +++ b/core/rawdb/accessors_indexes_test.go @@ -17,25 +17,53 @@ package rawdb import ( + "bytes" + "hash" "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/rlp" + "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" ) +// testHasher is the helper tool for transaction/receipt list hashing. +// The original hasher is trie, in order to get rid of import cycle, +// use the testing hasher instead. +type testHasher struct { + hasher hash.Hash +} + +func newHasher() *testHasher { + return &testHasher{hasher: sha3.NewLegacyKeccak256()} +} + +func (h *testHasher) Reset() { + h.hasher.Reset() +} + +func (h *testHasher) Update(key, val []byte) { + h.hasher.Write(key) + h.hasher.Write(val) +} + +func (h *testHasher) Hash() common.Hash { + return common.BytesToHash(h.hasher.Sum(nil)) +} + // Tests that positional lookup metadata can be stored and retrieved. func TestLookupStorage(t *testing.T) { tests := []struct { - name string - writeTxLookupEntries func(ethdb.Writer, *types.Block) + name string + writeTxLookupEntriesByBlock func(ethdb.Writer, *types.Block) }{ { "DatabaseV6", func(db ethdb.Writer, block *types.Block) { - WriteTxLookupEntries(db, block) + WriteTxLookupEntriesByBlock(db, block) }, }, { @@ -71,7 +99,7 @@ func TestLookupStorage(t *testing.T) { 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} - block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, nil) + block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, nil, newHasher()) // Check that no transactions entries are in a pristine database for i, tx := range txs { @@ -82,7 +110,7 @@ func TestLookupStorage(t *testing.T) { // Insert all the transactions into the database, and verify contents WriteCanonicalHash(db, block.Hash(), block.NumberU64()) WriteBlock(db, block) - tc.writeTxLookupEntries(db, block) + tc.writeTxLookupEntriesByBlock(db, block) for i, tx := range txs { if txn, hash, number, index := ReadTransaction(db, tx.Hash()); txn == nil { @@ -106,3 +134,46 @@ func TestLookupStorage(t *testing.T) { }) } } + +func TestDeleteBloomBits(t *testing.T) { + // Prepare testing data + db := NewMemoryDatabase() + for i := uint(0); i < 2; i++ { + for s := uint64(0); s < 2; s++ { + WriteBloomBits(db, i, s, params.MainnetGenesisHash, []byte{0x01, 0x02}) + WriteBloomBits(db, i, s, params.RinkebyGenesisHash, []byte{0x01, 0x02}) + } + } + check := func(bit uint, section uint64, head common.Hash, exist bool) { + bits, _ := ReadBloomBits(db, bit, section, head) + if exist && !bytes.Equal(bits, []byte{0x01, 0x02}) { + t.Fatalf("Bloombits mismatch") + } + if !exist && len(bits) > 0 { + t.Fatalf("Bloombits should be removed") + } + } + // Check the existence of written data. + check(0, 0, params.MainnetGenesisHash, true) + check(0, 0, params.RinkebyGenesisHash, true) + + // Check the existence of deleted data. + DeleteBloombits(db, 0, 0, 1) + check(0, 0, params.MainnetGenesisHash, false) + check(0, 0, params.RinkebyGenesisHash, false) + check(0, 1, params.MainnetGenesisHash, true) + check(0, 1, params.RinkebyGenesisHash, true) + + // Check the existence of deleted data. + DeleteBloombits(db, 0, 0, 2) + check(0, 0, params.MainnetGenesisHash, false) + check(0, 0, params.RinkebyGenesisHash, false) + check(0, 1, params.MainnetGenesisHash, false) + check(0, 1, params.RinkebyGenesisHash, false) + + // Bit1 shouldn't be affect. + check(1, 0, params.MainnetGenesisHash, true) + check(1, 0, params.RinkebyGenesisHash, true) + check(1, 1, params.MainnetGenesisHash, true) + check(1, 1, params.RinkebyGenesisHash, true) +} diff --git a/core/rawdb/accessors_metadata.go b/core/rawdb/accessors_metadata.go index 300f8dc8..7a9e6442 100644 --- a/core/rawdb/accessors_metadata.go +++ b/core/rawdb/accessors_metadata.go @@ -18,19 +18,20 @@ package rawdb import ( "encoding/json" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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 ethdb.KeyValueReader) *uint64 { var version uint64 - enc, _ := db.Get(databaseVerisionKey) + enc, _ := db.Get(databaseVersionKey) if len(enc) == 0 { return nil } @@ -47,7 +48,7 @@ func WriteDatabaseVersion(db ethdb.KeyValueWriter, version uint64) { if err != nil { log.Crit("Failed to encode database version", "err", err) } - if err = db.Put(databaseVerisionKey, enc); err != nil { + if err = db.Put(databaseVersionKey, enc); err != nil { log.Crit("Failed to store the database version", "err", err) } } @@ -80,19 +81,109 @@ func WriteChainConfig(db ethdb.KeyValueWriter, hash common.Hash, cfg *params.Cha } } -// ReadPreimage retrieves a single preimage of the provided hash. -func ReadPreimage(db ethdb.KeyValueReader, hash common.Hash) []byte { - data, _ := db.Get(preimageKey(hash)) +// ReadGenesisStateSpec retrieves the genesis state specification based on the +// given genesis hash. +func ReadGenesisStateSpec(db ethdb.KeyValueReader, hash common.Hash) []byte { + data, _ := db.Get(genesisStateSpecKey(hash)) return data } -// WritePreimages writes the provided set of preimages to the database. -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) - } +// WriteGenesisStateSpec writes the genesis state specification into the disk. +func WriteGenesisStateSpec(db ethdb.KeyValueWriter, hash common.Hash, data []byte) { + if err := db.Put(genesisStateSpecKey(hash), data); err != nil { + log.Crit("Failed to store genesis state", "err", err) + } +} + +// crashList is a list of unclean-shutdown-markers, for rlp-encoding to the +// database +type crashList struct { + Discarded uint64 // how many ucs have we deleted + Recent []uint64 // unix timestamps of 10 latest unclean shutdowns +} + +const crashesToKeep = 10 + +// PushUncleanShutdownMarker appends a new unclean shutdown marker and returns +// the previous data +// - a list of timestamps +// - a count of how many old unclean-shutdowns have been discarded +func PushUncleanShutdownMarker(db ethdb.KeyValueStore) ([]uint64, uint64, error) { + var uncleanShutdowns crashList + // Read old data + if data, err := db.Get(uncleanShutdownKey); err != nil { + log.Warn("Error reading unclean shutdown markers", "error", err) + } else if err := rlp.DecodeBytes(data, &uncleanShutdowns); err != nil { + return nil, 0, err + } + var discarded = uncleanShutdowns.Discarded + var previous = make([]uint64, len(uncleanShutdowns.Recent)) + copy(previous, uncleanShutdowns.Recent) + // Add a new (but cap it) + uncleanShutdowns.Recent = append(uncleanShutdowns.Recent, uint64(time.Now().Unix())) + if count := len(uncleanShutdowns.Recent); count > crashesToKeep+1 { + numDel := count - (crashesToKeep + 1) + uncleanShutdowns.Recent = uncleanShutdowns.Recent[numDel:] + uncleanShutdowns.Discarded += uint64(numDel) + } + // And save it again + data, _ := rlp.EncodeToBytes(uncleanShutdowns) + if err := db.Put(uncleanShutdownKey, data); err != nil { + log.Warn("Failed to write unclean-shutdown marker", "err", err) + return nil, 0, err + } + return previous, discarded, nil +} + +// PopUncleanShutdownMarker removes the last unclean shutdown marker +func PopUncleanShutdownMarker(db ethdb.KeyValueStore) { + var uncleanShutdowns crashList + // Read old data + if data, err := db.Get(uncleanShutdownKey); err != nil { + log.Warn("Error reading unclean shutdown markers", "error", err) + } else if err := rlp.DecodeBytes(data, &uncleanShutdowns); err != nil { + log.Error("Error decoding unclean shutdown markers", "error", err) // Should mos def _not_ happen + } + if l := len(uncleanShutdowns.Recent); l > 0 { + uncleanShutdowns.Recent = uncleanShutdowns.Recent[:l-1] + } + data, _ := rlp.EncodeToBytes(uncleanShutdowns) + if err := db.Put(uncleanShutdownKey, data); err != nil { + log.Warn("Failed to clear unclean-shutdown marker", "err", err) + } +} + +// UpdateUncleanShutdownMarker updates the last marker's timestamp to now. +func UpdateUncleanShutdownMarker(db ethdb.KeyValueStore) { + var uncleanShutdowns crashList + // Read old data + if data, err := db.Get(uncleanShutdownKey); err != nil { + log.Warn("Error reading unclean shutdown markers", "error", err) + } else if err := rlp.DecodeBytes(data, &uncleanShutdowns); err != nil { + log.Warn("Error decoding unclean shutdown markers", "error", err) + } + // This shouldn't happen because we push a marker on Backend instantiation + count := len(uncleanShutdowns.Recent) + if count == 0 { + log.Warn("No unclean shutdown marker to update") + return + } + uncleanShutdowns.Recent[count-1] = uint64(time.Now().Unix()) + data, _ := rlp.EncodeToBytes(uncleanShutdowns) + if err := db.Put(uncleanShutdownKey, data); err != nil { + log.Warn("Failed to write unclean-shutdown marker", "err", err) + } +} + +// ReadTransitionStatus retrieves the eth2 transition status from the database +func ReadTransitionStatus(db ethdb.KeyValueReader) []byte { + data, _ := db.Get(transitionStatusKey) + return data +} + +// WriteTransitionStatus stores the eth2 transition status to the database +func WriteTransitionStatus(db ethdb.KeyValueWriter, data []byte) { + if err := db.Put(transitionStatusKey, data); err != nil { + log.Crit("Failed to store the eth2 transition status", "err", err) } - preimageCounter.Inc(int64(len(preimages))) - preimageHitCounter.Inc(int64(len(preimages))) } diff --git a/core/rawdb/accessors_snapshot.go b/core/rawdb/accessors_snapshot.go new file mode 100644 index 00000000..3c82b3f7 --- /dev/null +++ b/core/rawdb/accessors_snapshot.go @@ -0,0 +1,210 @@ +// 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" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// ReadSnapshotDisabled retrieves if the snapshot maintenance is disabled. +func ReadSnapshotDisabled(db ethdb.KeyValueReader) bool { + disabled, _ := db.Has(snapshotDisabledKey) + return disabled +} + +// WriteSnapshotDisabled stores the snapshot pause flag. +func WriteSnapshotDisabled(db ethdb.KeyValueWriter) { + if err := db.Put(snapshotDisabledKey, []byte("42")); err != nil { + log.Crit("Failed to store snapshot disabled flag", "err", err) + } +} + +// DeleteSnapshotDisabled deletes the flag keeping the snapshot maintenance disabled. +func DeleteSnapshotDisabled(db ethdb.KeyValueWriter) { + if err := db.Delete(snapshotDisabledKey); err != nil { + log.Crit("Failed to remove snapshot disabled flag", "err", err) + } +} + +// ReadSnapshotRoot retrieves the root of the block whose state is contained in +// the persisted snapshot. +func ReadSnapshotRoot(db ethdb.KeyValueReader) common.Hash { + data, _ := db.Get(SnapshotRootKey) + if len(data) != common.HashLength { + return common.Hash{} + } + return common.BytesToHash(data) +} + +// WriteSnapshotRoot stores the root of the block whose state is contained in +// the persisted snapshot. +func WriteSnapshotRoot(db ethdb.KeyValueWriter, root common.Hash) { + if err := db.Put(SnapshotRootKey, root[:]); err != nil { + log.Crit("Failed to store snapshot root", "err", err) + } +} + +// DeleteSnapshotRoot deletes the hash of the block whose state is contained in +// the persisted snapshot. Since snapshots are not immutable, this method can +// be used during updates, so a crash or failure will mark the entire snapshot +// invalid. +func DeleteSnapshotRoot(db ethdb.KeyValueWriter) { + if err := db.Delete(SnapshotRootKey); err != nil { + log.Crit("Failed to remove snapshot root", "err", err) + } +} + +// ReadAccountSnapshot retrieves the snapshot entry of an account trie leaf. +func ReadAccountSnapshot(db ethdb.KeyValueReader, hash common.Hash) []byte { + data, _ := db.Get(accountSnapshotKey(hash)) + return data +} + +// WriteAccountSnapshot stores the snapshot entry of an account trie leaf. +func WriteAccountSnapshot(db ethdb.KeyValueWriter, hash common.Hash, entry []byte) { + if err := db.Put(accountSnapshotKey(hash), entry); err != nil { + log.Crit("Failed to store account snapshot", "err", err) + } +} + +// DeleteAccountSnapshot removes the snapshot entry of an account trie leaf. +func DeleteAccountSnapshot(db ethdb.KeyValueWriter, hash common.Hash) { + if err := db.Delete(accountSnapshotKey(hash)); err != nil { + log.Crit("Failed to delete account snapshot", "err", err) + } +} + +// ReadStorageSnapshot retrieves the snapshot entry of an storage trie leaf. +func ReadStorageSnapshot(db ethdb.KeyValueReader, accountHash, storageHash common.Hash) []byte { + data, _ := db.Get(storageSnapshotKey(accountHash, storageHash)) + return data +} + +// WriteStorageSnapshot stores the snapshot entry of an storage trie leaf. +func WriteStorageSnapshot(db ethdb.KeyValueWriter, accountHash, storageHash common.Hash, entry []byte) { + if err := db.Put(storageSnapshotKey(accountHash, storageHash), entry); err != nil { + log.Crit("Failed to store storage snapshot", "err", err) + } +} + +// DeleteStorageSnapshot removes the snapshot entry of an storage trie leaf. +func DeleteStorageSnapshot(db ethdb.KeyValueWriter, accountHash, storageHash common.Hash) { + if err := db.Delete(storageSnapshotKey(accountHash, storageHash)); err != nil { + log.Crit("Failed to delete storage snapshot", "err", err) + } +} + +// IterateStorageSnapshots returns an iterator for walking the entire storage +// space of a specific account. +func IterateStorageSnapshots(db ethdb.Iteratee, accountHash common.Hash) ethdb.Iterator { + return NewKeyLengthIterator(db.NewIterator(storageSnapshotsKey(accountHash), nil), len(SnapshotStoragePrefix)+2*common.HashLength) +} + +// ReadSnapshotJournal retrieves the serialized in-memory diff layers saved at +// the last shutdown. The blob is expected to be max a few 10s of megabytes. +func ReadSnapshotJournal(db ethdb.KeyValueReader) []byte { + data, _ := db.Get(snapshotJournalKey) + return data +} + +// WriteSnapshotJournal stores the serialized in-memory diff layers to save at +// shutdown. The blob is expected to be max a few 10s of megabytes. +func WriteSnapshotJournal(db ethdb.KeyValueWriter, journal []byte) { + if err := db.Put(snapshotJournalKey, journal); err != nil { + log.Crit("Failed to store snapshot journal", "err", err) + } +} + +// DeleteSnapshotJournal deletes the serialized in-memory diff layers saved at +// the last shutdown +func DeleteSnapshotJournal(db ethdb.KeyValueWriter) { + if err := db.Delete(snapshotJournalKey); err != nil { + log.Crit("Failed to remove snapshot journal", "err", err) + } +} + +// ReadSnapshotGenerator retrieves the serialized snapshot generator saved at +// the last shutdown. +func ReadSnapshotGenerator(db ethdb.KeyValueReader) []byte { + data, _ := db.Get(snapshotGeneratorKey) + return data +} + +// WriteSnapshotGenerator stores the serialized snapshot generator to save at +// shutdown. +func WriteSnapshotGenerator(db ethdb.KeyValueWriter, generator []byte) { + if err := db.Put(snapshotGeneratorKey, generator); err != nil { + log.Crit("Failed to store snapshot generator", "err", err) + } +} + +// DeleteSnapshotGenerator deletes the serialized snapshot generator saved at +// the last shutdown +func DeleteSnapshotGenerator(db ethdb.KeyValueWriter) { + if err := db.Delete(snapshotGeneratorKey); err != nil { + log.Crit("Failed to remove snapshot generator", "err", err) + } +} + +// ReadSnapshotRecoveryNumber retrieves the block number of the last persisted +// snapshot layer. +func ReadSnapshotRecoveryNumber(db ethdb.KeyValueReader) *uint64 { + data, _ := db.Get(snapshotRecoveryKey) + if len(data) == 0 { + return nil + } + if len(data) != 8 { + return nil + } + number := binary.BigEndian.Uint64(data) + return &number +} + +// WriteSnapshotRecoveryNumber stores the block number of the last persisted +// snapshot layer. +func WriteSnapshotRecoveryNumber(db ethdb.KeyValueWriter, number uint64) { + var buf [8]byte + binary.BigEndian.PutUint64(buf[:], number) + if err := db.Put(snapshotRecoveryKey, buf[:]); err != nil { + log.Crit("Failed to store snapshot recovery number", "err", err) + } +} + +// DeleteSnapshotRecoveryNumber deletes the block number of the last persisted +// snapshot layer. +func DeleteSnapshotRecoveryNumber(db ethdb.KeyValueWriter) { + if err := db.Delete(snapshotRecoveryKey); err != nil { + log.Crit("Failed to remove snapshot recovery number", "err", err) + } +} + +// ReadSnapshotSyncStatus retrieves the serialized sync status saved at shutdown. +func ReadSnapshotSyncStatus(db ethdb.KeyValueReader) []byte { + data, _ := db.Get(snapshotSyncStatusKey) + return data +} + +// WriteSnapshotSyncStatus stores the serialized sync status to save at shutdown. +func WriteSnapshotSyncStatus(db ethdb.KeyValueWriter, status []byte) { + if err := db.Put(snapshotSyncStatusKey, status); err != nil { + log.Crit("Failed to store snapshot sync status", "err", err) + } +} diff --git a/core/rawdb/accessors_state.go b/core/rawdb/accessors_state.go new file mode 100644 index 00000000..41e21b6c --- /dev/null +++ b/core/rawdb/accessors_state.go @@ -0,0 +1,120 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// ReadPreimage retrieves a single preimage of the provided hash. +func ReadPreimage(db ethdb.KeyValueReader, hash common.Hash) []byte { + data, _ := db.Get(preimageKey(hash)) + return data +} + +// ReadCode retrieves the contract code of the provided code hash. +func ReadCode(db ethdb.KeyValueReader, hash common.Hash) []byte { + // Try with the prefixed code scheme first, if not then try with legacy + // scheme. + data := ReadCodeWithPrefix(db, hash) + if len(data) != 0 { + return data + } + data, _ = db.Get(hash.Bytes()) + return data +} + +// ReadCodeWithPrefix retrieves the contract code of the provided code hash. +// The main difference between this function and ReadCode is this function +// will only check the existence with latest scheme(with prefix). +func ReadCodeWithPrefix(db ethdb.KeyValueReader, hash common.Hash) []byte { + data, _ := db.Get(codeKey(hash)) + return data +} + +// ReadTrieNode retrieves the trie node of the provided hash. +func ReadTrieNode(db ethdb.KeyValueReader, hash common.Hash) []byte { + data, _ := db.Get(hash.Bytes()) + return data +} + +// HasCode checks if the contract code corresponding to the +// provided code hash is present in the db. +func HasCode(db ethdb.KeyValueReader, hash common.Hash) bool { + // Try with the prefixed code scheme first, if not then try with legacy + // scheme. + if ok := HasCodeWithPrefix(db, hash); ok { + return true + } + ok, _ := db.Has(hash.Bytes()) + return ok +} + +// HasCodeWithPrefix checks if the contract code corresponding to the +// provided code hash is present in the db. This function will only check +// presence using the prefix-scheme. +func HasCodeWithPrefix(db ethdb.KeyValueReader, hash common.Hash) bool { + ok, _ := db.Has(codeKey(hash)) + return ok +} + +// HasTrieNode checks if the trie node with the provided hash is present in db. +func HasTrieNode(db ethdb.KeyValueReader, hash common.Hash) bool { + ok, _ := db.Has(hash.Bytes()) + return ok +} + +// WritePreimages writes the provided set of preimages to the database. +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) + } + } + preimageCounter.Inc(int64(len(preimages))) + preimageHitCounter.Inc(int64(len(preimages))) +} + +// WriteCode writes the provided contract code database. +func WriteCode(db ethdb.KeyValueWriter, hash common.Hash, code []byte) { + if err := db.Put(codeKey(hash), code); err != nil { + log.Crit("Failed to store contract code", "err", err) + } +} + +// WriteTrieNode writes the provided trie node database. +func WriteTrieNode(db ethdb.KeyValueWriter, hash common.Hash, node []byte) { + if err := db.Put(hash.Bytes(), node); err != nil { + log.Crit("Failed to store trie node", "err", err) + } +} + +// DeleteCode deletes the specified contract code from the database. +func DeleteCode(db ethdb.KeyValueWriter, hash common.Hash) { + if err := db.Delete(codeKey(hash)); err != nil { + log.Crit("Failed to delete contract code", "err", err) + } +} + +// DeleteTrieNode deletes the specified trie node from the database. +func DeleteTrieNode(db ethdb.KeyValueWriter, hash common.Hash) { + if err := db.Delete(hash.Bytes()); err != nil { + log.Crit("Failed to delete trie node", "err", err) + } +} diff --git a/core/rawdb/accessors_sync.go b/core/rawdb/accessors_sync.go new file mode 100644 index 00000000..e87ad43c --- /dev/null +++ b/core/rawdb/accessors_sync.go @@ -0,0 +1,80 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +// ReadSkeletonSyncStatus retrieves the serialized sync status saved at shutdown. +func ReadSkeletonSyncStatus(db ethdb.KeyValueReader) []byte { + data, _ := db.Get(skeletonSyncStatusKey) + return data +} + +// WriteSkeletonSyncStatus stores the serialized sync status to save at shutdown. +func WriteSkeletonSyncStatus(db ethdb.KeyValueWriter, status []byte) { + if err := db.Put(skeletonSyncStatusKey, status); err != nil { + log.Crit("Failed to store skeleton sync status", "err", err) + } +} + +// DeleteSkeletonSyncStatus deletes the serialized sync status saved at the last +// shutdown +func DeleteSkeletonSyncStatus(db ethdb.KeyValueWriter) { + if err := db.Delete(skeletonSyncStatusKey); err != nil { + log.Crit("Failed to remove skeleton sync status", "err", err) + } +} + +// ReadSkeletonHeader retrieves a block header from the skeleton sync store, +func ReadSkeletonHeader(db ethdb.KeyValueReader, number uint64) *types.Header { + data, _ := db.Get(skeletonHeaderKey(number)) + if len(data) == 0 { + return nil + } + header := new(types.Header) + if err := rlp.Decode(bytes.NewReader(data), header); err != nil { + log.Error("Invalid skeleton header RLP", "number", number, "err", err) + return nil + } + return header +} + +// WriteSkeletonHeader stores a block header into the skeleton sync store. +func WriteSkeletonHeader(db ethdb.KeyValueWriter, header *types.Header) { + data, err := rlp.EncodeToBytes(header) + if err != nil { + log.Crit("Failed to RLP encode header", "err", err) + } + key := skeletonHeaderKey(header.Number.Uint64()) + if err := db.Put(key, data); err != nil { + log.Crit("Failed to store skeleton header", "err", err) + } +} + +// DeleteSkeletonHeader removes all block header data associated with a hash. +func DeleteSkeletonHeader(db ethdb.KeyValueWriter, number uint64) { + if err := db.Delete(skeletonHeaderKey(number)); err != nil { + log.Crit("Failed to delete skeleton header", "err", err) + } +} diff --git a/core/rawdb/ancient_scheme.go b/core/rawdb/ancient_scheme.go new file mode 100644 index 00000000..3da061cb --- /dev/null +++ b/core/rawdb/ancient_scheme.go @@ -0,0 +1,86 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 "fmt" + +// The list of table names of chain freezer. +const ( + // chainFreezerHeaderTable indicates the name of the freezer header table. + chainFreezerHeaderTable = "headers" + + // chainFreezerHashTable indicates the name of the freezer canonical hash table. + chainFreezerHashTable = "hashes" + + // chainFreezerBodiesTable indicates the name of the freezer block body table. + chainFreezerBodiesTable = "bodies" + + // chainFreezerReceiptTable indicates the name of the freezer receipts table. + chainFreezerReceiptTable = "receipts" + + // chainFreezerDifficultyTable indicates the name of the freezer total difficulty table. + chainFreezerDifficultyTable = "diffs" +) + +// chainFreezerNoSnappy configures whether compression is disabled for the ancient-tables. +// Hashes and difficulties don't compress well. +var chainFreezerNoSnappy = map[string]bool{ + chainFreezerHeaderTable: false, + chainFreezerHashTable: true, + chainFreezerBodiesTable: false, + chainFreezerReceiptTable: false, + chainFreezerDifficultyTable: true, +} + +// The list of identifiers of ancient stores. +var ( + chainFreezerName = "chain" // the folder name of chain segment ancient store. +) + +// freezers the collections of all builtin freezers. +var freezers = []string{chainFreezerName} + +// InspectFreezerTable dumps out the index of a specific freezer table. The passed +// ancient indicates the path of root ancient directory where the chain freezer can +// be opened. Start and end specify the range for dumping out indexes. +// Note this function can only be used for debugging purposes. +func InspectFreezerTable(ancient string, freezerName string, tableName string, start, end int64) error { + var ( + path string + tables map[string]bool + ) + switch freezerName { + case chainFreezerName: + path, tables = resolveChainFreezerDir(ancient), chainFreezerNoSnappy + default: + return fmt.Errorf("unknown freezer, supported ones: %v", freezers) + } + noSnappy, exist := tables[tableName] + if !exist { + var names []string + for name := range tables { + names = append(names, name) + } + return fmt.Errorf("unknown table, supported ones: %v", names) + } + table, err := newFreezerTable(path, tableName, noSnappy, true) + if err != nil { + return err + } + table.dumpIndexStdout(start, end) + return nil +} diff --git a/core/rawdb/chain_freezer.go b/core/rawdb/chain_freezer.go new file mode 100644 index 00000000..7d9c9c01 --- /dev/null +++ b/core/rawdb/chain_freezer.go @@ -0,0 +1,303 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "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/params" +) + +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 +) + +// chainFreezer is a wrapper of freezer with additional chain freezing feature. +// The background thread will keep moving ancient chain segments from key-value +// database to flat files for saving space on live database. +type chainFreezer struct { + // WARNING: The `threshold` 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). + threshold uint64 // Number of recent blocks not to freeze (params.FullImmutabilityThreshold apart from tests) + + *Freezer + quit chan struct{} + wg sync.WaitGroup + trigger chan chan struct{} // Manual blocking freeze trigger, test determinism +} + +// newChainFreezer initializes the freezer for ancient chain data. +func newChainFreezer(datadir string, namespace string, readonly bool, maxTableSize uint32, tables map[string]bool) (*chainFreezer, error) { + freezer, err := NewFreezer(datadir, namespace, readonly, maxTableSize, tables) + if err != nil { + return nil, err + } + return &chainFreezer{ + Freezer: freezer, + threshold: params.FullImmutabilityThreshold, + quit: make(chan struct{}), + trigger: make(chan chan struct{}), + }, nil +} + +// Close closes the chain freezer instance and terminates the background thread. +func (f *chainFreezer) Close() error { + err := f.Freezer.Close() + select { + case <-f.quit: + default: + close(f.quit) + } + f.wg.Wait() + return err +} + +// 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 *chainFreezer) freeze(db ethdb.KeyValueStore) { + nfdb := &nofreezedb{KeyValueStore: db} + + var ( + backoff bool + triggered chan struct{} // Used in tests + ) + for { + select { + case <-f.quit: + log.Info("Freezer shutting down") + return + default: + } + if backoff { + // If we were doing a manual trigger, notify it + if triggered != nil { + triggered <- struct{}{} + triggered = nil + } + select { + case <-time.NewTimer(freezerRecheckInterval).C: + backoff = false + case triggered = <-f.trigger: + backoff = false + case <-f.quit: + return + } + } + // Retrieve the freezing threshold. + hash := ReadHeadBlockHash(nfdb) + if hash == (common.Hash{}) { + log.Debug("Current full block hash unavailable") // new chain, empty database + backoff = true + continue + } + number := ReadHeaderNumber(nfdb, hash) + threshold := atomic.LoadUint64(&f.threshold) + frozen := atomic.LoadUint64(&f.frozen) + switch { + case number == nil: + log.Error("Current full block number unavailable", "hash", hash) + backoff = true + continue + + case *number < threshold: + log.Debug("Current full block not old enough", "number", *number, "hash", hash, "delay", threshold) + backoff = true + continue + + case *number-threshold <= frozen: + log.Debug("Ancient blocks frozen already", "number", *number, "hash", hash, "frozen", frozen) + backoff = true + continue + } + head := ReadHeader(nfdb, hash, *number) + if head == nil { + log.Error("Current full block unavailable", "number", *number, "hash", hash) + backoff = true + continue + } + + // Seems we have data ready to be frozen, process in usable batches + var ( + start = time.Now() + first, _ = f.Ancients() + limit = *number - threshold + ) + if limit-first > freezerBatchLimit { + limit = first + freezerBatchLimit + } + ancients, err := f.freezeRange(nfdb, first, limit) + if err != nil { + log.Error("Error in block freeze operation", "err", err) + backoff = true + continue + } + + // 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 chains also and track dangling side chains + var dangling []common.Hash + frozen = atomic.LoadUint64(&f.frozen) // Needs reload after during freezeRange + for number := first; number < frozen; number++ { + // Always keep the genesis block in active database + if number != 0 { + dangling = ReadAllHashes(db, number) + for _, hash := range dangling { + log.Trace("Deleting side chain", "number", number, "hash", hash) + DeleteBlock(batch, hash, number) + } + } + } + if err := batch.Write(); err != nil { + log.Crit("Failed to delete frozen side blocks", "err", err) + } + batch.Reset() + + // Step into the future and delete and dangling side chains + if frozen > 0 { + tip := frozen + for len(dangling) > 0 { + drop := make(map[common.Hash]struct{}) + for _, hash := range dangling { + log.Debug("Dangling parent from Freezer", "number", tip-1, "hash", hash) + drop[hash] = struct{}{} + } + children := ReadAllHashes(db, tip) + for i := 0; i < len(children); i++ { + // Dig up the child and ensure it's dangling + child := ReadHeader(nfdb, children[i], tip) + if child == nil { + log.Error("Missing dangling header", "number", tip, "hash", children[i]) + continue + } + if _, ok := drop[child.ParentHash]; !ok { + children = append(children[:i], children[i+1:]...) + i-- + continue + } + // Delete all block data associated with the child + log.Debug("Deleting dangling block", "number", tip, "hash", children[i], "parent", child.ParentHash) + DeleteBlock(batch, children[i], tip) + } + dangling = children + tip++ + } + if err := batch.Write(); err != nil { + log.Crit("Failed to delete dangling side blocks", "err", err) + } + } + + // Log something friendly for the user + context := []interface{}{ + "blocks", frozen - first, "elapsed", common.PrettyDuration(time.Since(start)), "number", frozen - 1, + } + if n := len(ancients); n > 0 { + context = append(context, []interface{}{"hash", ancients[n-1]}...) + } + log.Debug("Deep froze chain segment", context...) + + // Avoid database thrashing with tiny writes + if frozen-first < freezerBatchLimit { + backoff = true + } + } +} + +func (f *chainFreezer) freezeRange(nfdb *nofreezedb, number, limit uint64) (hashes []common.Hash, err error) { + hashes = make([]common.Hash, 0, limit-number) + + _, err = f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for ; number <= limit; number++ { + // Retrieve all the components of the canonical block. + hash := ReadCanonicalHash(nfdb, number) + if hash == (common.Hash{}) { + return fmt.Errorf("canonical hash missing, can't freeze block %d", number) + } + header := ReadHeaderRLP(nfdb, hash, number) + if len(header) == 0 { + return fmt.Errorf("block header missing, can't freeze block %d", number) + } + body := ReadBodyRLP(nfdb, hash, number) + if len(body) == 0 { + return fmt.Errorf("block body missing, can't freeze block %d", number) + } + receipts := ReadReceiptsRLP(nfdb, hash, number) + if len(receipts) == 0 { + return fmt.Errorf("block receipts missing, can't freeze block %d", number) + } + td := ReadTdRLP(nfdb, hash, number) + if len(td) == 0 { + return fmt.Errorf("total difficulty missing, can't freeze block %d", number) + } + + // Write to the batch. + if err := op.AppendRaw(chainFreezerHashTable, number, hash[:]); err != nil { + return fmt.Errorf("can't write hash to Freezer: %v", err) + } + if err := op.AppendRaw(chainFreezerHeaderTable, number, header); err != nil { + return fmt.Errorf("can't write header to Freezer: %v", err) + } + if err := op.AppendRaw(chainFreezerBodiesTable, number, body); err != nil { + return fmt.Errorf("can't write body to Freezer: %v", err) + } + if err := op.AppendRaw(chainFreezerReceiptTable, number, receipts); err != nil { + return fmt.Errorf("can't write receipts to Freezer: %v", err) + } + if err := op.AppendRaw(chainFreezerDifficultyTable, number, td); err != nil { + return fmt.Errorf("can't write td to Freezer: %v", err) + } + + hashes = append(hashes, hash) + } + return nil + }) + + return hashes, err +} diff --git a/core/rawdb/chain_iterator.go b/core/rawdb/chain_iterator.go new file mode 100644 index 00000000..867fed63 --- /dev/null +++ b/core/rawdb/chain_iterator.go @@ -0,0 +1,354 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "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" + "github.com/ethereum/go-ethereum/rlp" +) + +// 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. +func InitDatabaseFromFreezer(db ethdb.Database) { + // If we can't access the freezer or it's empty, abort + frozen, err := db.Ancients() + if err != nil || frozen == 0 { + return + } + var ( + batch = db.NewBatch() + start = time.Now() + logged = start.Add(-7 * time.Second) // Unindex during import is fast, don't double log + hash common.Hash + ) + for i := uint64(0); i < frozen; { + // We read 100K hashes at a time, for a total of 3.2M + count := uint64(100_000) + if i+count > frozen { + count = frozen - i + } + data, err := db.AncientRange(chainFreezerHashTable, i, count, 32*count) + if err != nil { + log.Crit("Failed to init database from freezer", "err", err) + } + for j, h := range data { + number := i + uint64(j) + hash = common.BytesToHash(h) + WriteHeaderNumber(batch, hash, number) + // If enough data was accumulated in memory or we're at the last block, dump to disk + if batch.ValueSize() > ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + log.Crit("Failed to write data to db", "err", err) + } + batch.Reset() + } + } + i += uint64(len(data)) + // 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 database from freezer", "total", frozen, "number", i, "hash", hash, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + if err := batch.Write(); err != nil { + log.Crit("Failed to write data to db", "err", err) + } + batch.Reset() + + WriteHeadHeaderHash(db, hash) + WriteHeadFastBlockHash(db, hash) + log.Info("Initialized database from freezer", "blocks", frozen, "elapsed", common.PrettyDuration(time.Since(start))) +} + +type blockTxHashes struct { + number uint64 + hashes []common.Hash +} + +// iterateTransactions iterates over all transactions in the (canon) block +// number(s) given, and yields the hashes on a channel. If there is a signal +// received from interrupt channel, the iteration will be aborted and result +// channel will be closed. +func iterateTransactions(db ethdb.Database, from uint64, to uint64, reverse bool, interrupt chan struct{}) chan *blockTxHashes { + // One thread sequentially reads data from db + type numberRlp struct { + number uint64 + rlp rlp.RawValue + } + if to == from { + return nil + } + threads := to - from + if cpus := runtime.NumCPU(); threads > uint64(cpus) { + threads = uint64(cpus) + } + var ( + rlpCh = make(chan *numberRlp, threads*2) // we send raw rlp over this channel + hashesCh = make(chan *blockTxHashes, threads*2) // send hashes over hashesCh + ) + // lookup runs in one instance + lookup := func() { + n, end := from, to + if reverse { + n, end = to-1, from-1 + } + defer close(rlpCh) + for n != end { + data := ReadCanonicalBodyRLP(db, n) + // Feed the block to the aggregator, or abort on interrupt + select { + case rlpCh <- &numberRlp{n, data}: + case <-interrupt: + return + } + if reverse { + n-- + } else { + n++ + } + } + } + // process runs in parallel + nThreadsAlive := int32(threads) + process := func() { + defer func() { + // Last processor closes the result channel + if atomic.AddInt32(&nThreadsAlive, -1) == 0 { + close(hashesCh) + } + }() + for data := range rlpCh { + var body types.Body + if err := rlp.DecodeBytes(data.rlp, &body); err != nil { + log.Warn("Failed to decode block body", "block", data.number, "error", err) + return + } + var hashes []common.Hash + for _, tx := range body.Transactions { + hashes = append(hashes, tx.Hash()) + } + result := &blockTxHashes{ + hashes: hashes, + number: data.number, + } + // Feed the block to the aggregator, or abort on interrupt + select { + case hashesCh <- result: + case <-interrupt: + return + } + } + } + go lookup() // start the sequential db accessor + for i := 0; i < int(threads); i++ { + go process() + } + return hashesCh +} + +// indexTransactions creates txlookup indices of the specified block range. +// +// This function iterates canonical chain in reverse order, it has one main advantage: +// We can write tx index tail flag periodically even without the whole indexing +// procedure is finished. So that we can resume indexing procedure next time quickly. +// +// There is a passed channel, the whole procedure will be interrupted if any +// signal received. +func indexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool) { + // short circuit for invalid range + if from >= to { + return + } + var ( + hashesCh = iterateTransactions(db, from, to, true, interrupt) + batch = db.NewBatch() + start = time.Now() + logged = start.Add(-7 * time.Second) + // Since we iterate in reverse, we expect the first number to come + // in to be [to-1]. Therefore, setting lastNum to means that the + // prqueue gap-evaluation will work correctly + lastNum = to + queue = prque.New(nil) + // for stats reporting + blocks, txs = 0, 0 + ) + for chanDelivery := range hashesCh { + // Push the delivery into the queue and process contiguous ranges. + // Since we iterate in reverse, so lower numbers have lower prio, and + // we can use the number directly as prio marker + queue.Push(chanDelivery, int64(chanDelivery.number)) + for !queue.Empty() { + // If the next available item is gapped, return + if _, priority := queue.Peek(); priority != int64(lastNum-1) { + break + } + // For testing + if hook != nil && !hook(lastNum-1) { + break + } + // Next block available, pop it off and index it + delivery := queue.PopItem().(*blockTxHashes) + lastNum = delivery.number + WriteTxLookupEntries(batch, delivery.number, delivery.hashes) + blocks++ + txs += len(delivery.hashes) + // If enough data was accumulated in memory or we're at the last block, dump to disk + if batch.ValueSize() > ethdb.IdealBatchSize { + WriteTxIndexTail(batch, lastNum) // Also write the tail here + if err := batch.Write(); err != nil { + log.Crit("Failed writing batch to db", "error", err) + return + } + 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("Indexing transactions", "blocks", blocks, "txs", txs, "tail", lastNum, "total", to-from, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + } + // Flush the new indexing tail and the last committed data. It can also happen + // that the last batch is empty because nothing to index, but the tail has to + // be flushed anyway. + WriteTxIndexTail(batch, lastNum) + if err := batch.Write(); err != nil { + log.Crit("Failed writing batch to db", "error", err) + return + } + select { + case <-interrupt: + log.Debug("Transaction indexing interrupted", "blocks", blocks, "txs", txs, "tail", lastNum, "elapsed", common.PrettyDuration(time.Since(start))) + default: + log.Info("Indexed transactions", "blocks", blocks, "txs", txs, "tail", lastNum, "elapsed", common.PrettyDuration(time.Since(start))) + } +} + +// IndexTransactions creates txlookup indices of the specified block range. The from +// is included while to is excluded. +// +// This function iterates canonical chain in reverse order, it has one main advantage: +// We can write tx index tail flag periodically even without the whole indexing +// procedure is finished. So that we can resume indexing procedure next time quickly. +// +// There is a passed channel, the whole procedure will be interrupted if any +// signal received. +func IndexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}) { + indexTransactions(db, from, to, interrupt, nil) +} + +// indexTransactionsForTesting is the internal debug version with an additional hook. +func indexTransactionsForTesting(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool) { + indexTransactions(db, from, to, interrupt, hook) +} + +// unindexTransactions removes txlookup indices of the specified block range. +// +// There is a passed channel, the whole procedure will be interrupted if any +// signal received. +func unindexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool) { + // short circuit for invalid range + if from >= to { + return + } + var ( + hashesCh = iterateTransactions(db, from, to, false, interrupt) + batch = db.NewBatch() + start = time.Now() + logged = start.Add(-7 * time.Second) + // we expect the first number to come in to be [from]. Therefore, setting + // nextNum to from means that the prqueue gap-evaluation will work correctly + nextNum = from + queue = prque.New(nil) + // for stats reporting + blocks, txs = 0, 0 + ) + // Otherwise spin up the concurrent iterator and unindexer + for delivery := range hashesCh { + // Push the delivery into the queue and process contiguous ranges. + queue.Push(delivery, -int64(delivery.number)) + for !queue.Empty() { + // If the next available item is gapped, return + if _, priority := queue.Peek(); -priority != int64(nextNum) { + break + } + // For testing + if hook != nil && !hook(nextNum) { + break + } + delivery := queue.PopItem().(*blockTxHashes) + nextNum = delivery.number + 1 + DeleteTxLookupEntries(batch, delivery.hashes) + txs += len(delivery.hashes) + blocks++ + + // If enough data was accumulated in memory or we're at the last block, dump to disk + // A batch counts the size of deletion as '1', so we need to flush more + // often than that. + if blocks%1000 == 0 { + WriteTxIndexTail(batch, nextNum) + if err := batch.Write(); err != nil { + log.Crit("Failed writing batch to db", "error", err) + return + } + 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("Unindexing transactions", "blocks", blocks, "txs", txs, "total", to-from, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + } + // Flush the new indexing tail and the last committed data. It can also happen + // that the last batch is empty because nothing to unindex, but the tail has to + // be flushed anyway. + WriteTxIndexTail(batch, nextNum) + if err := batch.Write(); err != nil { + log.Crit("Failed writing batch to db", "error", err) + return + } + select { + case <-interrupt: + log.Debug("Transaction unindexing interrupted", "blocks", blocks, "txs", txs, "tail", to, "elapsed", common.PrettyDuration(time.Since(start))) + default: + log.Info("Unindexed transactions", "blocks", blocks, "txs", txs, "tail", to, "elapsed", common.PrettyDuration(time.Since(start))) + } +} + +// UnindexTransactions removes txlookup indices of the specified block range. +// The from is included while to is excluded. +// +// There is a passed channel, the whole procedure will be interrupted if any +// signal received. +func UnindexTransactions(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}) { + unindexTransactions(db, from, to, interrupt, nil) +} + +// unindexTransactionsForTesting is the internal debug version with an additional hook. +func unindexTransactionsForTesting(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool) { + unindexTransactions(db, from, to, interrupt, hook) +} diff --git a/core/rawdb/chain_iterator_test.go b/core/rawdb/chain_iterator_test.go new file mode 100644 index 00000000..e1f51597 --- /dev/null +++ b/core/rawdb/chain_iterator_test.go @@ -0,0 +1,208 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + "reflect" + "sort" + "sync" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +func TestChainIterator(t *testing.T) { + // Construct test chain db + chainDb := NewMemoryDatabase() + + var block *types.Block + var txs []*types.Transaction + to := common.BytesToAddress([]byte{0x11}) + block = types.NewBlock(&types.Header{Number: big.NewInt(int64(0))}, nil, nil, nil, newHasher()) // Empty genesis block + WriteBlock(chainDb, block) + WriteCanonicalHash(chainDb, block.Hash(), block.NumberU64()) + for i := uint64(1); i <= 10; i++ { + var tx *types.Transaction + if i%2 == 0 { + tx = types.NewTx(&types.LegacyTx{ + Nonce: i, + GasPrice: big.NewInt(11111), + Gas: 1111, + To: &to, + Value: big.NewInt(111), + Data: []byte{0x11, 0x11, 0x11}, + }) + } else { + tx = types.NewTx(&types.AccessListTx{ + ChainID: big.NewInt(1337), + Nonce: i, + GasPrice: big.NewInt(11111), + Gas: 1111, + To: &to, + Value: big.NewInt(111), + Data: []byte{0x11, 0x11, 0x11}, + }) + } + txs = append(txs, tx) + block = types.NewBlock(&types.Header{Number: big.NewInt(int64(i))}, []*types.Transaction{tx}, nil, nil, newHasher()) + WriteBlock(chainDb, block) + WriteCanonicalHash(chainDb, block.Hash(), block.NumberU64()) + } + + var cases = []struct { + from, to uint64 + reverse bool + expect []int + }{ + {0, 11, true, []int{10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}}, + {0, 0, true, nil}, + {0, 5, true, []int{4, 3, 2, 1, 0}}, + {10, 11, true, []int{10}}, + {0, 11, false, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, + {0, 0, false, nil}, + {10, 11, false, []int{10}}, + } + for i, c := range cases { + var numbers []int + hashCh := iterateTransactions(chainDb, c.from, c.to, c.reverse, nil) + if hashCh != nil { + for h := range hashCh { + numbers = append(numbers, int(h.number)) + if len(h.hashes) > 0 { + if got, exp := h.hashes[0], txs[h.number-1].Hash(); got != exp { + t.Fatalf("block %d: hash wrong, got %x exp %x", h.number, got, exp) + } + } + } + } + if !c.reverse { + sort.Ints(numbers) + } else { + sort.Sort(sort.Reverse(sort.IntSlice(numbers))) + } + if !reflect.DeepEqual(numbers, c.expect) { + t.Fatalf("Case %d failed, visit element mismatch, want %v, got %v", i, c.expect, numbers) + } + } +} + +func TestIndexTransactions(t *testing.T) { + // Construct test chain db + chainDb := NewMemoryDatabase() + + var block *types.Block + var txs []*types.Transaction + to := common.BytesToAddress([]byte{0x11}) + + // Write empty genesis block + block = types.NewBlock(&types.Header{Number: big.NewInt(int64(0))}, nil, nil, nil, newHasher()) + WriteBlock(chainDb, block) + WriteCanonicalHash(chainDb, block.Hash(), block.NumberU64()) + + for i := uint64(1); i <= 10; i++ { + var tx *types.Transaction + if i%2 == 0 { + tx = types.NewTx(&types.LegacyTx{ + Nonce: i, + GasPrice: big.NewInt(11111), + Gas: 1111, + To: &to, + Value: big.NewInt(111), + Data: []byte{0x11, 0x11, 0x11}, + }) + } else { + tx = types.NewTx(&types.AccessListTx{ + ChainID: big.NewInt(1337), + Nonce: i, + GasPrice: big.NewInt(11111), + Gas: 1111, + To: &to, + Value: big.NewInt(111), + Data: []byte{0x11, 0x11, 0x11}, + }) + } + txs = append(txs, tx) + block = types.NewBlock(&types.Header{Number: big.NewInt(int64(i))}, []*types.Transaction{tx}, nil, nil, newHasher()) + WriteBlock(chainDb, block) + WriteCanonicalHash(chainDb, block.Hash(), block.NumberU64()) + } + // verify checks whether the tx indices in the range [from, to) + // is expected. + verify := func(from, to int, exist bool, tail uint64) { + for i := from; i < to; i++ { + if i == 0 { + continue + } + number := ReadTxLookupEntry(chainDb, txs[i-1].Hash()) + if exist && number == nil { + t.Fatalf("Transaction index %d missing", i) + } + if !exist && number != nil { + t.Fatalf("Transaction index %d is not deleted", i) + } + } + number := ReadTxIndexTail(chainDb) + if number == nil || *number != tail { + t.Fatalf("Transaction tail mismatch") + } + } + IndexTransactions(chainDb, 5, 11, nil) + verify(5, 11, true, 5) + verify(0, 5, false, 5) + + IndexTransactions(chainDb, 0, 5, nil) + verify(0, 11, true, 0) + + UnindexTransactions(chainDb, 0, 5, nil) + verify(5, 11, true, 5) + verify(0, 5, false, 5) + + UnindexTransactions(chainDb, 5, 11, nil) + verify(0, 11, false, 11) + + // Testing corner cases + signal := make(chan struct{}) + var once sync.Once + indexTransactionsForTesting(chainDb, 5, 11, signal, func(n uint64) bool { + if n <= 8 { + once.Do(func() { + close(signal) + }) + return false + } + return true + }) + verify(9, 11, true, 9) + verify(0, 9, false, 9) + IndexTransactions(chainDb, 0, 9, nil) + + signal = make(chan struct{}) + var once2 sync.Once + unindexTransactionsForTesting(chainDb, 0, 11, signal, func(n uint64) bool { + if n >= 8 { + once2.Do(func() { + close(signal) + }) + return false + } + return true + }) + verify(8, 11, true, 8) + verify(0, 8, false, 8) +} diff --git a/core/rawdb/database.go b/core/rawdb/database.go index d3b9fa76..1eaf033b 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -21,30 +21,38 @@ import ( "errors" "fmt" "os" + "path" + "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethdb/leveldb" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" - "github.com/cryptoecc/ETH-ECC/log" + "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/log" "github.com/olekukonko/tablewriter" ) // freezerdb is a database wrapper that enabled freezer data retrievals. type freezerdb struct { + ancientRoot string ethdb.KeyValueStore ethdb.AncientStore } +// AncientDatadir returns the path of root ancient directory. +func (frdb *freezerdb) AncientDatadir() (string, error) { + return frdb.ancientRoot, nil +} + // 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 { + if err := frdb.AncientStore.Close(); err != nil { errs = append(errs, err) } - if err := frdb.AncientStore.Close(); err != nil { + if err := frdb.KeyValueStore.Close(); err != nil { errs = append(errs, err) } if len(errs) != 0 { @@ -53,6 +61,26 @@ func (frdb *freezerdb) Close() error { return nil } +// Freeze is a helper method used for external testing to trigger and block until +// a freeze cycle completes, without having to sleep for a minute to trigger the +// automatic background run. +func (frdb *freezerdb) Freeze(threshold uint64) error { + if frdb.AncientStore.(*chainFreezer).readonly { + return errReadOnly + } + // Set the freezer threshold to a temporary value + defer func(old uint64) { + atomic.StoreUint64(&frdb.AncientStore.(*chainFreezer).threshold, old) + }(atomic.LoadUint64(&frdb.AncientStore.(*chainFreezer).threshold)) + atomic.StoreUint64(&frdb.AncientStore.(*chainFreezer).threshold, threshold) + + // Trigger a freeze cycle and block until it's done + trigger := make(chan struct{}, 1) + frdb.AncientStore.(*chainFreezer).trigger <- trigger + <-trigger + return nil +} + // nofreezedb is a database wrapper that disables freezer data retrievals. type nofreezedb struct { ethdb.KeyValueStore @@ -68,23 +96,38 @@ func (db *nofreezedb) Ancient(kind string, number uint64) ([]byte, error) { return nil, errNotSupported } +// AncientRange returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) AncientRange(kind string, start, max, maxByteSize 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 } +// Tail returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) Tail() (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 { +// ModifyAncients is not supported. +func (db *nofreezedb) ModifyAncients(func(ethdb.AncientWriteOp) error) (int64, error) { + return 0, errNotSupported +} + +// TruncateHead returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) TruncateHead(items uint64) error { return errNotSupported } -// TruncateAncients returns an error as we don't have a backing chain freezer. -func (db *nofreezedb) TruncateAncients(items uint64) error { +// TruncateTail returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) TruncateTail(items uint64) error { return errNotSupported } @@ -93,20 +136,69 @@ func (db *nofreezedb) Sync() error { return errNotSupported } +func (db *nofreezedb) ReadAncients(fn func(reader ethdb.AncientReaderOp) error) (err error) { + // Unlike other ancient-related methods, this method does not return + // errNotSupported when invoked. + // The reason for this is that the caller might want to do several things: + // 1. Check if something is in freezer, + // 2. If not, check leveldb. + // + // This will work, since the ancient-checks inside 'fn' will return errors, + // and the leveldb work will continue. + // + // If we instead were to return errNotSupported here, then the caller would + // have to explicitly check for that, having an extra clause to do the + // non-ancient operations. + return fn(db) +} + +// MigrateTable processes the entries in a given table in sequence +// converting them to a new format if they're of an old format. +func (db *nofreezedb) MigrateTable(kind string, convert convertLegacyFn) error { + return errNotSupported +} + +// AncientDatadir returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) AncientDatadir() (string, 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, + return &nofreezedb{KeyValueStore: db} +} + +// resolveChainFreezerDir is a helper function which resolves the absolute path +// of chain freezer by considering backward compatibility. +func resolveChainFreezerDir(ancient string) string { + // Check if the chain freezer is already present in the specified + // sub folder, if not then two possibilities: + // - chain freezer is not initialized + // - chain freezer exists in legacy location (root ancient folder) + freezer := path.Join(ancient, chainFreezerName) + if !common.FileExist(freezer) { + if !common.FileExist(ancient) { + // The entire ancient store is not initialized, still use the sub + // folder for initialization. + } else { + // Ancient root is already initialized, then we hold the assumption + // that chain freezer is also initialized and located in root folder. + // In this case fallback to legacy location. + freezer = ancient + log.Info("Found legacy ancient chain path", "location", ancient) + } } + return freezer } // 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) { +// storage. The passed ancient indicates the path of root ancient directory +// where the chain freezer can be opened. +func NewDatabaseWithFreezer(db ethdb.KeyValueStore, ancient string, namespace string, readonly bool) (ethdb.Database, error) { // Create the idle freezer instance - frdb, err := newFreezer(freezer, namespace) + frdb, err := newChainFreezer(resolveChainFreezerDir(ancient), namespace, readonly, freezerTableSize, chainFreezerNoSnappy) if err != nil { return nil, err } @@ -123,7 +215,7 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace st // 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. + // ensure that there's no gap between the freezer and subsequently 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 @@ -137,24 +229,26 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace st // 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) { + frgenesis, err := frdb.Ancient(chainFreezerHashTable, 0) + if err != nil { + return nil, fmt.Errorf("failed to retrieve genesis from ancient %v", err) + } else if !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. + // Reject startup if 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). } + // Otherwise, key-value store continues where the freezer left off, all is fine. + // We might have duplicate blocks (crash after freezer write but before key-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 @@ -166,16 +260,22 @@ func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace st 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 + // Block #1 is still in the database, we're allowed to init a new freezer } + // Otherwise, the head header is still the genesis, we're allowed to init a new + // freezer. } } // Freezer is consistent with the key-value database, permit combining the two - go frdb.freeze(db) - + if !frdb.readonly { + frdb.wg.Add(1) + go func() { + frdb.freeze(db) + frdb.wg.Done() + }() + } return &freezerdb{ + ancientRoot: ancient, KeyValueStore: db, AncientStore: frdb, }, nil @@ -196,8 +296,8 @@ func NewMemoryDatabaseWithCap(size int) ethdb.Database { // 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) +func NewLevelDBDatabase(file string, cache int, handles int, namespace string, readonly bool) (ethdb.Database, error) { + db, err := leveldb.New(file, cache, handles, namespace, readonly) if err != nil { return nil, err } @@ -205,13 +305,15 @@ func NewLevelDBDatabase(file string, cache int, handles int, namespace string) ( } // 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) +// freezer moving immutable chain segments into cold storage. The passed ancient +// indicates the path of root ancient directory where the chain freezer can be +// opened. +func NewLevelDBDatabaseWithFreezer(file string, cache int, handles int, ancient string, namespace string, readonly bool) (ethdb.Database, error) { + kvdb, err := leveldb.New(file, cache, handles, namespace, readonly) if err != nil { return nil, err } - frdb, err := NewDatabaseWithFreezer(kvdb, freezer, namespace) + frdb, err := NewDatabaseWithFreezer(kvdb, ancient, namespace, readonly) if err != nil { kvdb.Close() return nil, err @@ -219,10 +321,40 @@ func NewLevelDBDatabaseWithFreezer(file string, cache int, handles int, freezer return frdb, nil } +type counter uint64 + +func (c counter) String() string { + return fmt.Sprintf("%d", c) +} + +func (c counter) Percentage(current uint64) string { + return fmt.Sprintf("%d", current*100/uint64(c)) +} + +// stat stores sizes and count for a parameter +type stat struct { + size common.StorageSize + count counter +} + +// Add size to the stat and increase the counter by 1 +func (s *stat) Add(size common.StorageSize) { + s.size += size + s.count++ +} + +func (s *stat) Size() string { + return s.size.String() +} + +func (s *stat) Count() string { + return s.count.String() +} + // InspectDatabase traverses the entire database and checks the size // of all different categories of data. -func InspectDatabase(db ethdb.Database) error { - it := db.NewIterator() +func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { + it := db.NewIterator(keyPrefix, keyStart) defer it.Release() var ( @@ -231,33 +363,39 @@ func InspectDatabase(db ethdb.Database) error { 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 + headers stat + bodies stat + receipts stat + tds stat + numHashPairings stat + hashNumPairings stat + tries stat + codes stat + txLookups stat + accountSnaps stat + storageSnaps stat + preimages stat + bloomBits stat + beaconHeaders stat + cliqueSnaps stat // Ancient store statistics - ancientHeaders common.StorageSize - ancientBodies common.StorageSize - ancientReceipts common.StorageSize - ancientHashes common.StorageSize - ancientTds common.StorageSize + ancientHeadersSize common.StorageSize + ancientBodiesSize common.StorageSize + ancientReceiptsSize common.StorageSize + ancientTdsSize common.StorageSize + ancientHashesSize common.StorageSize // Les statistic - chtTrieNodes common.StorageSize - bloomTrieNodes common.StorageSize + chtTrieNodes stat + bloomTrieNodes stat // Meta- and unaccounted data - metadata common.StorageSize - unaccounted common.StorageSize + metadata stat + unaccounted stat + + // Totals + total common.StorageSize ) // Inspect key-value database first. for it.Next() { @@ -267,89 +405,122 @@ func InspectDatabase(db ethdb.Database) error { ) 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 + headers.Add(size) case bytes.HasPrefix(key, blockBodyPrefix) && len(key) == (len(blockBodyPrefix)+8+common.HashLength): - bodySize += size + bodies.Add(size) case bytes.HasPrefix(key, blockReceiptsPrefix) && len(key) == (len(blockReceiptsPrefix)+8+common.HashLength): - receiptSize += size + receipts.Add(size) + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerTDSuffix): + tds.Add(size) + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix): + numHashPairings.Add(size) + case bytes.HasPrefix(key, headerNumberPrefix) && len(key) == (len(headerNumberPrefix)+common.HashLength): + hashNumPairings.Add(size) + case len(key) == common.HashLength: + tries.Add(size) + case bytes.HasPrefix(key, CodePrefix) && len(key) == len(CodePrefix)+common.HashLength: + codes.Add(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 + txLookups.Add(size) + case bytes.HasPrefix(key, SnapshotAccountPrefix) && len(key) == (len(SnapshotAccountPrefix)+common.HashLength): + accountSnaps.Add(size) + case bytes.HasPrefix(key, SnapshotStoragePrefix) && len(key) == (len(SnapshotStoragePrefix)+2*common.HashLength): + storageSnaps.Add(size) + case bytes.HasPrefix(key, PreimagePrefix) && len(key) == (len(PreimagePrefix)+common.HashLength): + preimages.Add(size) + case bytes.HasPrefix(key, configPrefix) && len(key) == (len(configPrefix)+common.HashLength): + metadata.Add(size) + case bytes.HasPrefix(key, genesisPrefix) && len(key) == (len(genesisPrefix)+common.HashLength): + metadata.Add(size) case bytes.HasPrefix(key, bloomBitsPrefix) && len(key) == (len(bloomBitsPrefix)+10+common.HashLength): - bloomBitsSize += size + bloomBits.Add(size) + case bytes.HasPrefix(key, BloomBitsIndexPrefix): + bloomBits.Add(size) + case bytes.HasPrefix(key, skeletonHeaderPrefix) && len(key) == (len(skeletonHeaderPrefix)+8): + beaconHeaders.Add(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 + cliqueSnaps.Add(size) + case bytes.HasPrefix(key, []byte("cht-")) || + bytes.HasPrefix(key, []byte("chtIndexV2-")) || + bytes.HasPrefix(key, []byte("chtRootV2-")): // Canonical hash trie + chtTrieNodes.Add(size) + case bytes.HasPrefix(key, []byte("blt-")) || + bytes.HasPrefix(key, []byte("bltIndex-")) || + bytes.HasPrefix(key, []byte("bltRoot-")): // Bloomtrie sub + bloomTrieNodes.Add(size) default: var accounted bool - for _, meta := range [][]byte{databaseVerisionKey, headHeaderKey, headBlockKey, headFastBlockKey, fastTrieProgressKey} { + for _, meta := range [][]byte{ + databaseVersionKey, headHeaderKey, headBlockKey, headFastBlockKey, headFinalizedBlockKey, + lastPivotKey, fastTrieProgressKey, snapshotDisabledKey, SnapshotRootKey, snapshotJournalKey, + snapshotGeneratorKey, snapshotRecoveryKey, txIndexTailKey, fastTxLookupLimitKey, + uncleanShutdownKey, badBlockKey, transitionStatusKey, skeletonSyncStatusKey, + } { if bytes.Equal(key, meta) { - metadata += size + metadata.Add(size) accounted = true break } } if !accounted { - unaccounted += size + unaccounted.Add(size) } } - count += 1 + count++ 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} { + ancientSizes := []*common.StorageSize{&ancientHeadersSize, &ancientBodiesSize, &ancientReceiptsSize, &ancientHashesSize, &ancientTdsSize} + for i, category := range []string{chainFreezerHeaderTable, chainFreezerBodiesTable, chainFreezerReceiptTable, chainFreezerHashTable, chainFreezerDifficultyTable} { if size, err := db.AncientSize(category); err == nil { - *ancients[i] += common.StorageSize(size) + *ancientSizes[i] += common.StorageSize(size) total += common.StorageSize(size) } } + // Get number of ancient rows inside the freezer + ancients := counter(0) + if count, err := db.Ancients(); err == nil { + ancients = counter(count) + } // 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()}, + {"Key-Value store", "Headers", headers.Size(), headers.Count()}, + {"Key-Value store", "Bodies", bodies.Size(), bodies.Count()}, + {"Key-Value store", "Receipt lists", receipts.Size(), receipts.Count()}, + {"Key-Value store", "Difficulties", tds.Size(), tds.Count()}, + {"Key-Value store", "Block number->hash", numHashPairings.Size(), numHashPairings.Count()}, + {"Key-Value store", "Block hash->number", hashNumPairings.Size(), hashNumPairings.Count()}, + {"Key-Value store", "Transaction index", txLookups.Size(), txLookups.Count()}, + {"Key-Value store", "Bloombit index", bloomBits.Size(), bloomBits.Count()}, + {"Key-Value store", "Contract codes", codes.Size(), codes.Count()}, + {"Key-Value store", "Trie nodes", tries.Size(), tries.Count()}, + {"Key-Value store", "Trie preimages", preimages.Size(), preimages.Count()}, + {"Key-Value store", "Account snapshot", accountSnaps.Size(), accountSnaps.Count()}, + {"Key-Value store", "Storage snapshot", storageSnaps.Size(), storageSnaps.Count()}, + {"Key-Value store", "Beacon sync headers", beaconHeaders.Size(), beaconHeaders.Count()}, + {"Key-Value store", "Clique snapshots", cliqueSnaps.Size(), cliqueSnaps.Count()}, + {"Key-Value store", "Singleton metadata", metadata.Size(), metadata.Count()}, + {"Ancient store", "Headers", ancientHeadersSize.String(), ancients.String()}, + {"Ancient store", "Bodies", ancientBodiesSize.String(), ancients.String()}, + {"Ancient store", "Receipt lists", ancientReceiptsSize.String(), ancients.String()}, + {"Ancient store", "Difficulties", ancientTdsSize.String(), ancients.String()}, + {"Ancient store", "Block number->hash", ancientHashesSize.String(), ancients.String()}, + {"Light client", "CHT trie nodes", chtTrieNodes.Size(), chtTrieNodes.Count()}, + {"Light client", "Bloom trie nodes", bloomTrieNodes.Size(), bloomTrieNodes.Count()}, } table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Database", "Category", "Size"}) - table.SetFooter([]string{"", "Total", total.String()}) + table.SetHeader([]string{"Database", "Category", "Size", "Items"}) + table.SetFooter([]string{"", "Total", total.String(), " "}) table.AppendBulk(stats) table.Render() - if unaccounted > 0 { - log.Error("Database contains unaccounted data", "size", unaccounted) + if unaccounted.size > 0 { + log.Error("Database contains unaccounted data", "size", unaccounted.size, "count", unaccounted.count) } + return nil } diff --git a/core/state/main_test.go b/core/rawdb/database_test.go similarity index 82% rename from core/state/main_test.go rename to core/rawdb/database_test.go index cd966103..a0d7b5ec 100644 --- a/core/state/main_test.go +++ b/core/rawdb/database_test.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// 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 @@ -14,12 +14,4 @@ // 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" - - checker "gopkg.in/check.v1" -) - -func Test(t *testing.T) { checker.TestingT(t) } +package rawdb diff --git a/core/rawdb/freezer.go b/core/rawdb/freezer.go index acc58181..6dea98c3 100644 --- a/core/rawdb/freezer.go +++ b/core/rawdb/freezer.go @@ -22,18 +22,22 @@ import ( "math" "os" "path/filepath" + "sync" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/params" + "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/prometheus/tsdb/fileutil" ) var ( + // errReadOnly is returned if the freezer is opened in read only mode. All the + // mutations are disallowed. + errReadOnly = errors.New("read only") + // errUnknownTable is returned if the user attempts to read from a table that is // not tracked by the freezer. errUnknownTable = errors.New("unknown table") @@ -47,42 +51,45 @@ var ( 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 -) +// freezerTableSize defines the maximum size of freezer data files. +const freezerTableSize = 2 * 1000 * 1000 * 1000 -// freezer is an memory mapped append-only database to store immutable chain data -// into flat files: +// Freezer is a memory mapped append-only database to store immutable ordered +// data into flat files: // -// - The append only nature ensures that disk writes are minimized. +// - 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 +type Freezer struct { + // WARNING: The `frozen` and `tail` 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 (https://golang.org/pkg/sync/atomic/#pkg-note-BUG). frozen uint64 // Number of blocks already frozen + tail uint64 // Number of the first stored item in the freezer + + // This lock synchronizes writers and the truncate operation, as well as + // the "atomic" (batched) read operations. + writeLock sync.RWMutex + writeBatch *freezerBatch + readonly bool tables map[string]*freezerTable // Data tables for storing everything instanceLock fileutil.Releaser // File-system lock to prevent double opens + closeOnce sync.Once } -// newFreezer creates a chain freezer that moves ancient chain data into -// append-only flat file containers. -func newFreezer(datadir string, namespace string) (*freezer, error) { +// NewFreezer creates a freezer instance for maintaining immutable ordered +// data according to the given parameters. +// +// The 'tables' argument defines the data tables. If the value of a map +// entry is true, snappy compression is disabled for the table. +func NewFreezer(datadir string, namespace string, readonly bool, maxTableSize uint32, tables map[string]bool) (*Freezer, error) { // Create the initial freezer object var ( - readMeter = metrics.NewRegisteredMeter(namespace+"ancient/read", nil) - writeMeter = metrics.NewRegisteredMeter(namespace+"ancient/write", nil) - sizeCounter = metrics.NewRegisteredCounter(namespace+"ancient/size", nil) + 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) { @@ -98,12 +105,15 @@ func newFreezer(datadir string, namespace string) (*freezer, error) { return nil, err } // Open all the supported data tables - freezer := &freezer{ + freezer := &Freezer{ + readonly: readonly, tables: make(map[string]*freezerTable), instanceLock: lock, } - for name, disableSnappy := range freezerNoSnappy { - table, err := newTable(datadir, name, readMeter, writeMeter, sizeCounter, disableSnappy) + + // Create the tables. + for name, disableSnappy := range tables { + table, err := newTable(datadir, name, readMeter, writeMeter, sizeGauge, maxTableSize, disableSnappy, readonly) if err != nil { for _, table := range freezer.tables { table.Close() @@ -113,28 +123,46 @@ func newFreezer(datadir string, namespace string) (*freezer, error) { } freezer.tables[name] = table } - if err := freezer.repair(); err != nil { + + if freezer.readonly { + // In readonly mode only validate, don't truncate. + // validate also sets `freezer.frozen`. + err = freezer.validate() + } else { + // Truncate all tables to common length. + err = freezer.repair() + } + if err != nil { for _, table := range freezer.tables { table.Close() } lock.Release() return nil, err } - log.Info("Opened ancient database", "database", datadir) + + // Create the write batch. + freezer.writeBatch = newFreezerBatch(freezer) + + log.Info("Opened ancient database", "database", datadir, "readonly", readonly) return freezer, nil } // Close terminates the chain freezer, unmapping all the data files. -func (f *freezer) Close() error { +func (f *Freezer) Close() error { + f.writeLock.Lock() + defer f.writeLock.Unlock() + var errs []error - for _, table := range f.tables { - if err := table.Close(); err != nil { + f.closeOnce.Do(func() { + 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 err := f.instanceLock.Release(); err != nil { - errs = append(errs, err) - } + }) if errs != nil { return fmt.Errorf("%v", errs) } @@ -143,7 +171,7 @@ func (f *freezer) Close() error { // HasAncient returns an indicator whether the specified ancient data exists // in the freezer. -func (f *freezer) HasAncient(kind string, number uint64) (bool, error) { +func (f *Freezer) HasAncient(kind string, number uint64) (bool, error) { if table := f.tables[kind]; table != nil { return table.has(number), nil } @@ -151,89 +179,133 @@ func (f *freezer) HasAncient(kind string, number uint64) (bool, error) { } // Ancient retrieves an ancient binary blob from the append-only immutable files. -func (f *freezer) Ancient(kind string, number uint64) ([]byte, error) { +func (f *Freezer) Ancient(kind string, number uint64) ([]byte, error) { if table := f.tables[kind]; table != nil { return table.Retrieve(number) } return nil, errUnknownTable } +// AncientRange retrieves multiple items in sequence, starting from the index 'start'. +// It will return +// - at most 'max' items, +// - at least 1 item (even if exceeding the maxByteSize), but will otherwise +// return as many items as fit into maxByteSize. +func (f *Freezer) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) { + if table := f.tables[kind]; table != nil { + return table.RetrieveItems(start, count, maxBytes) + } + return nil, errUnknownTable +} + // Ancients returns the length of the frozen items. -func (f *freezer) Ancients() (uint64, error) { +func (f *Freezer) Ancients() (uint64, error) { return atomic.LoadUint64(&f.frozen), nil } +// Tail returns the number of first stored item in the freezer. +func (f *Freezer) Tail() (uint64, error) { + return atomic.LoadUint64(&f.tail), nil +} + // AncientSize returns the ancient size of the specified category. -func (f *freezer) AncientSize(kind string) (uint64, error) { +func (f *Freezer) AncientSize(kind string) (uint64, error) { + // This needs the write lock to avoid data races on table fields. + // Speed doesn't matter here, AncientSize is for debugging. + f.writeLock.RLock() + defer f.writeLock.RUnlock() + 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. +// ReadAncients runs the given read operation while ensuring that no writes take place +// on the underlying freezer. +func (f *Freezer) ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error) { + f.writeLock.RLock() + defer f.writeLock.RUnlock() + + return fn(f) +} + +// ModifyAncients runs the given write operation. +func (f *Freezer) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize int64, err error) { + if f.readonly { + return 0, errReadOnly + } + f.writeLock.Lock() + defer f.writeLock.Unlock() + + // Roll back all tables to the starting position in case of error. + prevItem := atomic.LoadUint64(&f.frozen) defer func() { if err != nil { - rerr := f.repair() - if rerr != nil { - log.Crit("Failed to repair freezer", "err", rerr) + // The write operation has failed. Go back to the previous item position. + for name, table := range f.tables { + err := table.truncateHead(prevItem) + if err != nil { + log.Error("Freezer table roll-back failed", "table", name, "index", prevItem, "err", err) + } } - 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 + + f.writeBatch.reset() + if err := fn(f.writeBatch); err != nil { + return 0, 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 + item, writeSize, err := f.writeBatch.commit() + if err != nil { + return 0, 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 + atomic.StoreUint64(&f.frozen, item) + return writeSize, nil +} + +// TruncateHead discards any recent data above the provided threshold number. +func (f *Freezer) TruncateHead(items uint64) error { + if f.readonly { + return errReadOnly } - 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 + f.writeLock.Lock() + defer f.writeLock.Unlock() + + if atomic.LoadUint64(&f.frozen) <= items { + return nil } - 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 + for _, table := range f.tables { + if err := table.truncateHead(items); err != nil { + return err + } } - atomic.AddUint64(&f.frozen, 1) // Only modify atomically + atomic.StoreUint64(&f.frozen, items) 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 { +// TruncateTail discards any recent data below the provided threshold number. +func (f *Freezer) TruncateTail(tail uint64) error { + if f.readonly { + return errReadOnly + } + f.writeLock.Lock() + defer f.writeLock.Unlock() + + if atomic.LoadUint64(&f.tail) >= tail { return nil } for _, table := range f.tables { - if err := table.truncate(items); err != nil { + if err := table.truncateTail(tail); err != nil { return err } } - atomic.StoreUint64(&f.frozen, items) + atomic.StoreUint64(&f.tail, tail) return nil } -// sync flushes all data tables to disk. -func (f *freezer) Sync() error { +// 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 { @@ -246,148 +318,170 @@ func (f *freezer) Sync() error { 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 +// validate checks that every table has the same length. +// Used instead of `repair` in readonly mode. +func (f *Freezer) validate() error { + if len(f.tables) == 0 { + return nil + } + var ( + length uint64 + name string + ) + // Hack to get length of any table + for kind, table := range f.tables { + length = atomic.LoadUint64(&table.items) + name = kind + break + } + // Now check every table against that length + for kind, table := range f.tables { + items := atomic.LoadUint64(&table.items) + if length != items { + return fmt.Errorf("freezer tables %s and %s have differing lengths: %d != %d", kind, name, items, length) + } + } + atomic.StoreUint64(&f.frozen, length) + return nil +} + +// repair truncates all data tables to the same length. +func (f *Freezer) repair() error { + var ( + head = uint64(math.MaxUint64) + tail = uint64(0) + ) + for _, table := range f.tables { + items := atomic.LoadUint64(&table.items) + if head > items { + head = items } - 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 + hidden := atomic.LoadUint64(&table.itemHidden) + if hidden > tail { + tail = hidden } - head := ReadHeader(nfdb, hash, *number) - if head == nil { - log.Error("Current full block unavailable", "number", *number, "hash", hash) - time.Sleep(freezerRecheckInterval) - continue + } + for _, table := range f.tables { + if err := table.truncateHead(head); err != nil { + return err } - // 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 + if err := table.truncateTail(tail); err != nil { + return err } + } + atomic.StoreUint64(&f.frozen, head) + atomic.StoreUint64(&f.tail, tail) + return nil +} + +// convertLegacyFn takes a raw freezer entry in an older format and +// returns it in the new format. +type convertLegacyFn = func([]byte) ([]byte, error) + +// MigrateTable processes the entries in a given table in sequence +// converting them to a new format if they're of an old format. +func (f *Freezer) MigrateTable(kind string, convert convertLegacyFn) error { + if f.readonly { + return errReadOnly + } + f.writeLock.Lock() + defer f.writeLock.Unlock() + + table, ok := f.tables[kind] + if !ok { + return errUnknownTable + } + // forEach iterates every entry in the table serially and in order, calling `fn` + // with the item as argument. If `fn` returns an error the iteration stops + // and that error will be returned. + forEach := func(t *freezerTable, offset uint64, fn func(uint64, []byte) error) error { var ( - start = time.Now() - first = f.frozen - ancients = make([]common.Hash, 0, limit) + items = atomic.LoadUint64(&t.items) + batchSize = uint64(1024) + maxBytes = uint64(1024 * 1024) ) - 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 + for i := offset; i < items; { + if i+batchSize > items { + batchSize = items - i } - receipts := ReadReceiptsRLP(nfdb, hash, f.frozen) - if len(receipts) == 0 { - log.Error("Block receipts missing, can't freeze", "number", f.frozen, "hash", hash) - break + data, err := t.RetrieveItems(i, batchSize, maxBytes) + if err != nil { + return err } - 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) + for j, item := range data { + if err := fn(i+uint64(j), item); err != nil { + return err } } + i += uint64(len(data)) } - 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, + return nil + } + // TODO(s1na): This is a sanity-check since as of now no process does tail-deletion. But the migration + // process assumes no deletion at tail and needs to be modified to account for that. + if table.itemOffset > 0 || table.itemHidden > 0 { + return fmt.Errorf("migration not supported for tail-deleted freezers") + } + ancientsPath := filepath.Dir(table.index.Name()) + // Set up new dir for the migrated table, the content of which + // we'll at the end move over to the ancients dir. + migrationPath := filepath.Join(ancientsPath, "migration") + newTable, err := newFreezerTable(migrationPath, kind, table.noCompression, false) + if err != nil { + return err + } + var ( + batch = newTable.newBatch() + out []byte + start = time.Now() + logged = time.Now() + offset = newTable.items + ) + if offset > 0 { + log.Info("found previous migration attempt", "migrated", offset) + } + // Iterate through entries and transform them + if err := forEach(table, offset, func(i uint64, blob []byte) error { + if i%10000 == 0 && time.Since(logged) > 16*time.Second { + log.Info("Processing legacy elements", "count", i, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() } - if n := len(ancients); n > 0 { - context = append(context, []interface{}{"hash", ancients[n-1]}...) + out, err = convert(blob) + if err != nil { + return err } - log.Info("Deep froze chain segment", context...) - - // Avoid database thrashing with tiny writes - if f.frozen-first < freezerBatchLimit { - time.Sleep(freezerRecheckInterval) + if err := batch.AppendRaw(i, out); err != nil { + return err } + return nil + }); err != nil { + return err } -} + if err := batch.commit(); err != nil { + return err + } + log.Info("Replacing old table files with migrated ones", "elapsed", common.PrettyDuration(time.Since(start))) + // Release and delete old table files. Note this won't + // delete the index file. + table.releaseFilesAfter(0, true) -// 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 - } + if err := newTable.Close(); err != nil { + return err } - for _, table := range f.tables { - if err := table.truncate(min); err != nil { + files, err := os.ReadDir(migrationPath) + if err != nil { + return err + } + // Move migrated files to ancients dir. + for _, f := range files { + // This will replace the old index file as a side-effect. + if err := os.Rename(filepath.Join(migrationPath, f.Name()), filepath.Join(ancientsPath, f.Name())); err != nil { return err } } - atomic.StoreUint64(&f.frozen, min) + // Delete by now empty dir. + if err := os.Remove(migrationPath); err != nil { + return err + } return nil } diff --git a/core/rawdb/freezer_batch.go b/core/rawdb/freezer_batch.go new file mode 100644 index 00000000..54c98cee --- /dev/null +++ b/core/rawdb/freezer_batch.go @@ -0,0 +1,248 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/rlp" + "github.com/golang/snappy" +) + +// This is the maximum amount of data that will be buffered in memory +// for a single freezer table batch. +const freezerBatchBufferLimit = 2 * 1024 * 1024 + +// freezerBatch is a write operation of multiple items on a freezer. +type freezerBatch struct { + tables map[string]*freezerTableBatch +} + +func newFreezerBatch(f *Freezer) *freezerBatch { + batch := &freezerBatch{tables: make(map[string]*freezerTableBatch, len(f.tables))} + for kind, table := range f.tables { + batch.tables[kind] = table.newBatch() + } + return batch +} + +// Append adds an RLP-encoded item of the given kind. +func (batch *freezerBatch) Append(kind string, num uint64, item interface{}) error { + return batch.tables[kind].Append(num, item) +} + +// AppendRaw adds an item of the given kind. +func (batch *freezerBatch) AppendRaw(kind string, num uint64, item []byte) error { + return batch.tables[kind].AppendRaw(num, item) +} + +// reset initializes the batch. +func (batch *freezerBatch) reset() { + for _, tb := range batch.tables { + tb.reset() + } +} + +// commit is called at the end of a write operation and +// writes all remaining data to tables. +func (batch *freezerBatch) commit() (item uint64, writeSize int64, err error) { + // Check that count agrees on all batches. + item = uint64(math.MaxUint64) + for name, tb := range batch.tables { + if item < math.MaxUint64 && tb.curItem != item { + return 0, 0, fmt.Errorf("table %s is at item %d, want %d", name, tb.curItem, item) + } + item = tb.curItem + } + + // Commit all table batches. + for _, tb := range batch.tables { + if err := tb.commit(); err != nil { + return 0, 0, err + } + writeSize += tb.totalBytes + } + return item, writeSize, nil +} + +// freezerTableBatch is a batch for a freezer table. +type freezerTableBatch struct { + t *freezerTable + + sb *snappyBuffer + encBuffer writeBuffer + dataBuffer []byte + indexBuffer []byte + curItem uint64 // expected index of next append + totalBytes int64 // counts written bytes since reset +} + +// newBatch creates a new batch for the freezer table. +func (t *freezerTable) newBatch() *freezerTableBatch { + batch := &freezerTableBatch{t: t} + if !t.noCompression { + batch.sb = new(snappyBuffer) + } + batch.reset() + return batch +} + +// reset clears the batch for reuse. +func (batch *freezerTableBatch) reset() { + batch.dataBuffer = batch.dataBuffer[:0] + batch.indexBuffer = batch.indexBuffer[:0] + batch.curItem = atomic.LoadUint64(&batch.t.items) + batch.totalBytes = 0 +} + +// Append rlp-encodes and adds data 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. +func (batch *freezerTableBatch) Append(item uint64, data interface{}) error { + if item != batch.curItem { + return fmt.Errorf("%w: have %d want %d", errOutOrderInsertion, item, batch.curItem) + } + + // Encode the item. + batch.encBuffer.Reset() + if err := rlp.Encode(&batch.encBuffer, data); err != nil { + return err + } + encItem := batch.encBuffer.data + if batch.sb != nil { + encItem = batch.sb.compress(encItem) + } + return batch.appendItem(encItem) +} + +// AppendRaw 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. +func (batch *freezerTableBatch) AppendRaw(item uint64, blob []byte) error { + if item != batch.curItem { + return fmt.Errorf("%w: have %d want %d", errOutOrderInsertion, item, batch.curItem) + } + + encItem := blob + if batch.sb != nil { + encItem = batch.sb.compress(blob) + } + return batch.appendItem(encItem) +} + +func (batch *freezerTableBatch) appendItem(data []byte) error { + // Check if item fits into current data file. + itemSize := int64(len(data)) + itemOffset := batch.t.headBytes + int64(len(batch.dataBuffer)) + if itemOffset+itemSize > int64(batch.t.maxFileSize) { + // It doesn't fit, go to next file first. + if err := batch.commit(); err != nil { + return err + } + if err := batch.t.advanceHead(); err != nil { + return err + } + itemOffset = 0 + } + + // Put data to buffer. + batch.dataBuffer = append(batch.dataBuffer, data...) + batch.totalBytes += itemSize + + // Put index entry to buffer. + entry := indexEntry{filenum: batch.t.headId, offset: uint32(itemOffset + itemSize)} + batch.indexBuffer = entry.append(batch.indexBuffer) + batch.curItem++ + + return batch.maybeCommit() +} + +// maybeCommit writes the buffered data if the buffer is full enough. +func (batch *freezerTableBatch) maybeCommit() error { + if len(batch.dataBuffer) > freezerBatchBufferLimit { + return batch.commit() + } + return nil +} + +// commit writes the batched items to the backing freezerTable. +func (batch *freezerTableBatch) commit() error { + // Write data. + _, err := batch.t.head.Write(batch.dataBuffer) + if err != nil { + return err + } + dataSize := int64(len(batch.dataBuffer)) + batch.dataBuffer = batch.dataBuffer[:0] + + // Write indices. + _, err = batch.t.index.Write(batch.indexBuffer) + if err != nil { + return err + } + indexSize := int64(len(batch.indexBuffer)) + batch.indexBuffer = batch.indexBuffer[:0] + + // Update headBytes of table. + batch.t.headBytes += dataSize + atomic.StoreUint64(&batch.t.items, batch.curItem) + + // Update metrics. + batch.t.sizeGauge.Inc(dataSize + indexSize) + batch.t.writeMeter.Mark(dataSize + indexSize) + return nil +} + +// snappyBuffer writes snappy in block format, and can be reused. It is +// reset when WriteTo is called. +type snappyBuffer struct { + dst []byte +} + +// compress snappy-compresses the data. +func (s *snappyBuffer) compress(data []byte) []byte { + // The snappy library does not care what the capacity of the buffer is, + // but only checks the length. If the length is too small, it will + // allocate a brand new buffer. + // To avoid that, we check the required size here, and grow the size of the + // buffer to utilize the full capacity. + if n := snappy.MaxEncodedLen(len(data)); len(s.dst) < n { + if cap(s.dst) < n { + s.dst = make([]byte, n) + } + s.dst = s.dst[:n] + } + + s.dst = snappy.Encode(s.dst, data) + return s.dst +} + +// writeBuffer implements io.Writer for a byte slice. +type writeBuffer struct { + data []byte +} + +func (wb *writeBuffer) Write(data []byte) (int, error) { + wb.data = append(wb.data, data...) + return len(data), nil +} + +func (wb *writeBuffer) Reset() { + wb.data = wb.data[:0] +} diff --git a/core/rawdb/freezer_meta.go b/core/rawdb/freezer_meta.go new file mode 100644 index 00000000..9eef9df3 --- /dev/null +++ b/core/rawdb/freezer_meta.go @@ -0,0 +1,109 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "io" + "os" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +const freezerVersion = 1 // The initial version tag of freezer table metadata + +// freezerTableMeta wraps all the metadata of the freezer table. +type freezerTableMeta struct { + // Version is the versioning descriptor of the freezer table. + Version uint16 + + // VirtualTail indicates how many items have been marked as deleted. + // Its value is equal to the number of items removed from the table + // plus the number of items hidden in the table, so it should never + // be lower than the "actual tail". + VirtualTail uint64 +} + +// newMetadata initializes the metadata object with the given virtual tail. +func newMetadata(tail uint64) *freezerTableMeta { + return &freezerTableMeta{ + Version: freezerVersion, + VirtualTail: tail, + } +} + +// readMetadata reads the metadata of the freezer table from the +// given metadata file. +func readMetadata(file *os.File) (*freezerTableMeta, error) { + _, err := file.Seek(0, io.SeekStart) + if err != nil { + return nil, err + } + var meta freezerTableMeta + if err := rlp.Decode(file, &meta); err != nil { + return nil, err + } + return &meta, nil +} + +// writeMetadata writes the metadata of the freezer table into the +// given metadata file. +func writeMetadata(file *os.File, meta *freezerTableMeta) error { + _, err := file.Seek(0, io.SeekStart) + if err != nil { + return err + } + return rlp.Encode(file, meta) +} + +// loadMetadata loads the metadata from the given metadata file. +// Initializes the metadata file with the given "actual tail" if +// it's empty. +func loadMetadata(file *os.File, tail uint64) (*freezerTableMeta, error) { + stat, err := file.Stat() + if err != nil { + return nil, err + } + // Write the metadata with the given actual tail into metadata file + // if it's non-existent. There are two possible scenarios here: + // - the freezer table is empty + // - the freezer table is legacy + // In both cases, write the meta into the file with the actual tail + // as the virtual tail. + if stat.Size() == 0 { + m := newMetadata(tail) + if err := writeMetadata(file, m); err != nil { + return nil, err + } + return m, nil + } + m, err := readMetadata(file) + if err != nil { + return nil, err + } + // Update the virtual tail with the given actual tail if it's even + // lower than it. Theoretically it shouldn't happen at all, print + // a warning here. + if m.VirtualTail < tail { + log.Warn("Updated virtual tail", "have", m.VirtualTail, "now", tail) + m.VirtualTail = tail + if err := writeMetadata(file, m); err != nil { + return nil, err + } + } + return m, nil +} diff --git a/core/rawdb/freezer_meta_test.go b/core/rawdb/freezer_meta_test.go new file mode 100644 index 00000000..ba1a95e4 --- /dev/null +++ b/core/rawdb/freezer_meta_test.go @@ -0,0 +1,60 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "os" + "testing" +) + +func TestReadWriteFreezerTableMeta(t *testing.T) { + f, err := os.CreateTemp(os.TempDir(), "*") + if err != nil { + t.Fatalf("Failed to create file %v", err) + } + err = writeMetadata(f, newMetadata(100)) + if err != nil { + t.Fatalf("Failed to write metadata %v", err) + } + meta, err := readMetadata(f) + if err != nil { + t.Fatalf("Failed to read metadata %v", err) + } + if meta.Version != freezerVersion { + t.Fatalf("Unexpected version field") + } + if meta.VirtualTail != uint64(100) { + t.Fatalf("Unexpected virtual tail field") + } +} + +func TestInitializeFreezerTableMeta(t *testing.T) { + f, err := os.CreateTemp(os.TempDir(), "*") + if err != nil { + t.Fatalf("Failed to create file %v", err) + } + meta, err := loadMetadata(f, uint64(100)) + if err != nil { + t.Fatalf("Failed to read metadata %v", err) + } + if meta.Version != freezerVersion { + t.Fatalf("Unexpected version field") + } + if meta.VirtualTail != uint64(100) { + t.Fatalf("Unexpected virtual tail field") + } +} diff --git a/core/rawdb/freezer_reinit.go b/core/rawdb/freezer_reinit.go deleted file mode 100644 index f511e16e..00000000 --- a/core/rawdb/freezer_reinit.go +++ /dev/null @@ -1,127 +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 rawdb - -import ( - "errors" - "runtime" - "sync/atomic" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/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 index 67ddafd0..3fe691cf 100644 --- a/core/rawdb/freezer_table.go +++ b/core/rawdb/freezer_table.go @@ -17,6 +17,7 @@ package rawdb import ( + "bytes" "encoding/binary" "errors" "fmt" @@ -26,9 +27,9 @@ import ( "sync" "sync/atomic" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/golang/snappy" ) @@ -45,29 +46,42 @@ var ( 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 +// indexEntry contains the number/id of the file that the data resides in, as well 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) + 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 { +// unmarshalBinary deserializes binary b into the rawIndex entry. +func (i *indexEntry) unmarshalBinary(b []byte) { 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 +// append adds the encoded entry to the end of b. +func (i *indexEntry) append(b []byte) []byte { + offset := len(b) + out := append(b, make([]byte, indexEntrySize)...) + binary.BigEndian.PutUint16(out[offset:], uint16(i.filenum)) + binary.BigEndian.PutUint32(out[offset+2:], i.offset) + return out +} + +// bounds returns the start- and end- offsets, and the file number of where to +// read there data item marked by the two index entries. The two entries are +// assumed to be sequential. +func (i *indexEntry) bounds(end *indexEntry) (startOffset, endOffset, fileId uint32) { + if i.filenum != end.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, end.offset, end.filenum + } + return i.offset, end.offset, end.filenum } // freezerTable represents a single chained data table within the freezer (e.g. blocks). @@ -77,106 +91,103 @@ 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 + items uint64 // Number of items stored in the table (including items removed from tail) + itemOffset uint64 // Number of items removed from the table + + // itemHidden is the number of items marked as deleted. Tail deletion is + // only supported at file level which means the actual deletion will be + // delayed until the entire data file is marked as deleted. Before that + // these items will be hidden to prevent being visited again. The value + // should never be lower than itemOffset. + itemHidden uint64 + + noCompression bool // if true, disables snappy compression. Note: does not work retroactively + readonly bool maxFileSize uint32 // Max file size for data-files name string path string head *os.File // File descriptor for the data head of the table + index *os.File // File descriptor for the indexEntry file of the table + meta *os.File // File descriptor for metadata 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 int64 // 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 - 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 - sizeCounter metrics.Counter // Counter for tracking the combined size of all freezer tables - - logger log.Logger // Logger with database path and table name ambedded + logger log.Logger // Logger with database path and table name embedded 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, sizeCounter metrics.Counter, disableSnappy bool) (*freezerTable, error) { - return newCustomTable(path, name, readMeter, writeMeter, sizeCounter, 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 +// newFreezerTable opens the given path as a freezer table. +func newFreezerTable(path, name string, disableSnappy, readonly bool) (*freezerTable, error) { + return newTable(path, name, metrics.NilMeter{}, metrics.NilMeter{}, metrics.NilGauge{}, freezerTableSize, disableSnappy, readonly) } -// 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 +// newTable 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, sizeCounter metrics.Counter, maxFilesize uint32, noCompression bool) (*freezerTable, error) { +func newTable(path string, name string, readMeter metrics.Meter, writeMeter metrics.Meter, sizeGauge metrics.Gauge, maxFilesize uint32, noCompression, readonly 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) + idxName = fmt.Sprintf("%s.ridx", name) // raw index file } else { - // Compressed idx - idxName = fmt.Sprintf("%s.cidx", name) + idxName = fmt.Sprintf("%s.cidx", name) // compressed index file } - offsets, err := openFreezerFileForAppend(filepath.Join(path, idxName)) - if err != nil { - return nil, err + var ( + err error + index *os.File + meta *os.File + ) + if readonly { + // Will fail if table doesn't exist + index, err = openFreezerFileForReadOnly(filepath.Join(path, idxName)) + if err != nil { + return nil, err + } + // TODO(rjl493456442) change it to read-only mode. Open the metadata file + // in rw mode. It's a temporary solution for now and should be changed + // whenever the tail deletion is actually used. The reason for this hack is + // the additional meta file for each freezer table is added in order to support + // tail deletion, but for most legacy nodes this file is missing. This check + // will suddenly break lots of database relevant commands. So the metadata file + // is always opened for mutation and nothing else will be written except + // the initialization. + meta, err = openFreezerFileForAppend(filepath.Join(path, fmt.Sprintf("%s.meta", name))) + if err != nil { + return nil, err + } + } else { + index, err = openFreezerFileForAppend(filepath.Join(path, idxName)) + if err != nil { + return nil, err + } + meta, err = openFreezerFileForAppend(filepath.Join(path, fmt.Sprintf("%s.meta", name))) + if err != nil { + return nil, err + } } // Create the table and repair any past inconsistency tab := &freezerTable{ - index: offsets, + index: index, + meta: meta, files: make(map[uint32]*os.File), readMeter: readMeter, writeMeter: writeMeter, - sizeCounter: sizeCounter, + sizeGauge: sizeGauge, name: name, path: path, logger: log.New("database", path, "table", name), noCompression: noCompression, + readonly: readonly, maxFileSize: maxFilesize, } if err := tab.repair(); err != nil { @@ -189,12 +200,12 @@ func newCustomTable(path string, name string, readMeter metrics.Meter, writeMete tab.Close() return nil, err } - tab.sizeCounter.Inc(int64(size)) + tab.sizeGauge.Inc(int64(size)) return tab, nil } -// repair cross checks the head and the index file and truncates them to +// 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 @@ -232,12 +243,32 @@ func (t *freezerTable) repair() error { t.index.ReadAt(buffer, 0) firstIndex.unmarshalBinary(buffer) - t.tailId = firstIndex.offset - t.itemOffset = firstIndex.filenum + // Assign the tail fields with the first stored index. + // The total removed items is represented with an uint32, + // which is not enough in theory but enough in practice. + // TODO: use uint64 to represent total removed items. + t.tailId = firstIndex.filenum + t.itemOffset = uint64(firstIndex.offset) - t.index.ReadAt(buffer, offsetsSize-indexEntrySize) - lastIndex.unmarshalBinary(buffer) - t.head, err = t.openFile(lastIndex.filenum, openFreezerFileForAppend) + // Load metadata from the file + meta, err := loadMetadata(t.meta, t.itemOffset) + if err != nil { + return err + } + t.itemHidden = meta.VirtualTail + + // Read the last index, use the default value in case the freezer is empty + if offsetsSize == indexEntrySize { + lastIndex = indexEntry{filenum: t.tailId, offset: 0} + } else { + t.index.ReadAt(buffer, offsetsSize-indexEntrySize) + lastIndex.unmarshalBinary(buffer) + } + if t.readonly { + t.head, err = t.openFile(lastIndex.filenum, openFreezerFileForReadOnly) + } else { + t.head, err = t.openFile(lastIndex.filenum, openFreezerFileForAppend) + } if err != nil { return err } @@ -248,7 +279,6 @@ func (t *freezerTable) repair() error { // 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 { @@ -265,9 +295,16 @@ func (t *freezerTable) repair() error { return err } offsetsSize -= indexEntrySize - t.index.ReadAt(buffer, offsetsSize-indexEntrySize) + + // Read the new head index, use the default value in case + // the freezer is already empty. var newLastIndex indexEntry - newLastIndex.unmarshalBinary(buffer) + if offsetsSize == indexEntrySize { + newLastIndex = indexEntry{filenum: t.tailId, offset: 0} + } else { + t.index.ReadAt(buffer, offsetsSize-indexEntrySize) + newLastIndex.unmarshalBinary(buffer) + } // We might have slipped back into an earlier head-file here if newLastIndex.filenum != lastIndex.filenum { // Release earlier opened file @@ -286,18 +323,30 @@ func (t *freezerTable) repair() error { 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 + // Sync() fails for read-only files on windows. + if !t.readonly { + // 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 + } + if err := t.meta.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.items = t.itemOffset + uint64(offsetsSize/indexEntrySize-1) // last indexEntry points to the end of the data file + t.headBytes = contentSize t.headId = lastIndex.filenum + // Delete the leftover files because of head deletion + t.releaseFilesAfter(t.headId, true) + + // Delete the leftover files because of tail deletion + t.releaseFilesBefore(t.tailId, true) + // Close opened files and preopen all files if err := t.preopen(); err != nil { return err @@ -313,44 +362,64 @@ func (t *freezerTable) repair() error { 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) + if t.readonly { + t.head, err = t.openFile(t.headId, openFreezerFileForReadOnly) + } else { + // 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 { +// truncateHead discards any recent data above the provided threshold number. +func (t *freezerTable) truncateHead(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 { + // Ensure the given truncate target falls in the correct range + existing := atomic.LoadUint64(&t.items) + if existing <= items { return nil } + if items < atomic.LoadUint64(&t.itemHidden) { + return errors.New("truncation below tail") + } // 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 + log := t.logger.Debug + if existing > items+1 { + log = t.logger.Warn // Only loud warn if we delete multiple items } - // 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 { + log("Truncating freezer table", "items", existing, "limit", items) + + // Truncate the index file first, the tail position is also considered + // when calculating the new freezer table length. + length := items - atomic.LoadUint64(&t.itemOffset) + if err := truncateFreezerFile(t.index, int64(length+1)*indexEntrySize); err != nil { return err } + // Calculate the new expected size of the data file and truncate it var expected indexEntry - expected.unmarshalBinary(buffer) - + if length == 0 { + expected = indexEntry{filenum: t.tailId, offset: 0} + } else { + buffer := make([]byte, indexEntrySize) + if _, err := t.index.ReadAt(buffer, int64(length*indexEntrySize)); err != nil { + return err + } + 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 @@ -364,22 +433,125 @@ func (t *freezerTable) truncate(items uint64) error { t.releaseFilesAfter(expected.filenum, true) // Set back the historic head t.head = newHead - atomic.StoreUint32(&t.headId, expected.filenum) + 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 + t.headBytes = int64(expected.offset) 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.sizeCounter.Dec(int64(oldSize - newSize)) + t.sizeGauge.Dec(int64(oldSize - newSize)) + return nil +} + +// truncateTail discards any recent data before the provided threshold number. +func (t *freezerTable) truncateTail(items uint64) error { + t.lock.Lock() + defer t.lock.Unlock() + + // Ensure the given truncate target falls in the correct range + if atomic.LoadUint64(&t.itemHidden) >= items { + return nil + } + if atomic.LoadUint64(&t.items) < items { + return errors.New("truncation above head") + } + // Load the new tail index by the given new tail position + var ( + newTailId uint32 + buffer = make([]byte, indexEntrySize) + ) + if atomic.LoadUint64(&t.items) == items { + newTailId = t.headId + } else { + offset := items - atomic.LoadUint64(&t.itemOffset) + if _, err := t.index.ReadAt(buffer, int64((offset+1)*indexEntrySize)); err != nil { + return err + } + var newTail indexEntry + newTail.unmarshalBinary(buffer) + newTailId = newTail.filenum + } + // Update the virtual tail marker and hidden these entries in table. + atomic.StoreUint64(&t.itemHidden, items) + if err := writeMetadata(t.meta, newMetadata(items)); err != nil { + return err + } + // Hidden items still fall in the current tail file, no data file + // can be dropped. + if t.tailId == newTailId { + return nil + } + // Hidden items fall in the incorrect range, returns the error. + if t.tailId > newTailId { + return fmt.Errorf("invalid index, tail-file %d, item-file %d", t.tailId, newTailId) + } + // Hidden items exceed the current tail file, drop the relevant + // data files. We need to truncate, save the old size for metrics + // tracking. + oldSize, err := t.sizeNolock() + if err != nil { + return err + } + // Count how many items can be deleted from the file. + var ( + newDeleted = items + deleted = atomic.LoadUint64(&t.itemOffset) + ) + for current := items - 1; current >= deleted; current -= 1 { + if _, err := t.index.ReadAt(buffer, int64((current-deleted+1)*indexEntrySize)); err != nil { + return err + } + var pre indexEntry + pre.unmarshalBinary(buffer) + if pre.filenum != newTailId { + break + } + newDeleted = current + } + // Commit the changes of metadata file first before manipulating + // the indexes file. + if err := t.meta.Sync(); err != nil { + return err + } + // Truncate the deleted index entries from the index file. + err = copyFrom(t.index.Name(), t.index.Name(), indexEntrySize*(newDeleted-deleted+1), func(f *os.File) error { + tailIndex := indexEntry{ + filenum: newTailId, + offset: uint32(newDeleted), + } + _, err := f.Write(tailIndex.append(nil)) + return err + }) + if err != nil { + return err + } + // Reopen the modified index file to load the changes + if err := t.index.Close(); err != nil { + return err + } + t.index, err = openFreezerFileForAppend(t.index.Name()) + if err != nil { + return err + } + // Release any files before the current tail + t.tailId = newTailId + atomic.StoreUint64(&t.itemOffset, newDeleted) + t.releaseFilesBefore(t.tailId, true) + // 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 } @@ -394,6 +566,11 @@ func (t *freezerTable) Close() error { } t.index = nil + if err := t.meta.Close(); err != nil { + errs = append(errs, err) + } + t.meta = nil + for _, f := range t.files { if err := f.Close(); err != nil { errs = append(errs, err) @@ -448,141 +625,206 @@ func (t *freezerTable) releaseFilesAfter(num uint32, remove bool) { } } -// 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 +// releaseFilesBefore closes all open files with a lower number, and optionally also deletes the files +func (t *freezerTable) releaseFilesBefore(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()) + } } - // 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.sizeCounter.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 +// getIndices returns the index entries for the given from-item, covering 'count' items. +// N.B: The actual number of returned indices for N items will always be N+1 (unless an +// error is returned). +// OBS: This method assumes that the caller has already verified (and/or trimmed) the range +// so that the items are within bounds. If this method is used to read out of bounds, +// it will return error. +func (t *freezerTable) getIndices(from, count uint64) ([]*indexEntry, error) { + // Apply the table-offset + from = from - t.itemOffset + // For reading N items, we need N+1 indices. + buffer := make([]byte, (count+1)*indexEntrySize) + if _, err := t.index.ReadAt(buffer, int64(from*indexEntrySize)); err != nil { + return nil, err } - return startIdx.offset, endIdx.offset, endIdx.filenum, nil + var ( + indices []*indexEntry + offset int + ) + for i := from; i <= from+count; i++ { + index := new(indexEntry) + index.unmarshalBinary(buffer[offset:]) + offset += indexEntrySize + indices = append(indices, index) + } + if from == 0 { + // Special case if we're reading the first item in the freezer. We assume that + // the first item always start from zero(regarding the deletion, we + // only support deletion by files, so that the assumption is held). + // This means we can use the first item metadata to carry information about + // the 'global' offset, for the deletion-case + indices[0].offset = 0 + indices[0].filenum = indices[1].filenum + } + return indices, 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 + items, err := t.RetrieveItems(item, 1, 0) + if err != nil { + return nil, err } - if atomic.LoadUint64(&t.items) <= item { - return nil, errOutOfBounds + return items[0], nil +} + +// RetrieveItems returns multiple items in sequence, starting from the index 'start'. +// It will return at most 'max' items, but will abort earlier to respect the +// 'maxBytes' argument. However, if the 'maxBytes' is smaller than the size of one +// item, it _will_ return one element and possibly overflow the maxBytes. +func (t *freezerTable) RetrieveItems(start, count, maxBytes uint64) ([][]byte, error) { + // First we read the 'raw' data, which might be compressed. + diskData, sizes, err := t.retrieveItems(start, count, maxBytes) + if err != nil { + return nil, err } - // Ensure the item was not deleted from the tail either - offset := atomic.LoadUint32(&t.itemOffset) - if uint64(offset) > item { - return nil, errOutOfBounds + var ( + output = make([][]byte, 0, count) + offset int // offset for reading + outputSize int // size of uncompressed data + ) + // Now slice up the data and decompress. + for i, diskSize := range sizes { + item := diskData[offset : offset+diskSize] + offset += diskSize + decompressedSize := diskSize + if !t.noCompression { + decompressedSize, _ = snappy.DecodedLen(item) + } + if i > 0 && uint64(outputSize+decompressedSize) > maxBytes { + break + } + if !t.noCompression { + data, err := snappy.Decode(nil, item) + if err != nil { + return nil, err + } + output = append(output, data) + } else { + output = append(output, item) + } + outputSize += decompressedSize } + return output, nil +} + +// retrieveItems reads up to 'count' items from the table. It reads at least +// one item, but otherwise avoids reading more than maxBytes bytes. +// It returns the (potentially compressed) data, and the sizes. +func (t *freezerTable) retrieveItems(start, count, maxBytes uint64) ([]byte, []int, error) { t.lock.RLock() - startOffset, endOffset, filenum, err := t.getBounds(item - uint64(offset)) - if err != nil { - t.lock.RUnlock() - return nil, err + defer t.lock.RUnlock() + + // Ensure the table and the item are accessible + if t.index == nil || t.head == nil { + return nil, nil, errClosed } - dataFile, exist := t.files[filenum] - if !exist { - t.lock.RUnlock() - return nil, fmt.Errorf("missing data file %d", filenum) + var ( + items = atomic.LoadUint64(&t.items) // the total items(head + 1) + hidden = atomic.LoadUint64(&t.itemHidden) // the number of hidden items + ) + // Ensure the start is written, not deleted from the tail, and that the + // caller actually wants something + if items <= start || hidden > start || count == 0 { + return nil, nil, errOutOfBounds } - // 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 + if start+count > items { + count = items - start + } + var ( + output = make([]byte, maxBytes) // Buffer to read data into + outputSize int // Used size of that buffer + ) + // readData is a helper method to read a single data item from disk. + readData := func(fileId, start uint32, length int) error { + // In case a small limit is used, and the elements are large, may need to + // realloc the read-buffer when reading the first (and only) item. + if len(output) < length { + output = make([]byte, length) + } + dataFile, exist := t.files[fileId] + if !exist { + return fmt.Errorf("missing data file %d", fileId) + } + if _, err := dataFile.ReadAt(output[outputSize:outputSize+length], int64(start)); err != nil { + return err + } + outputSize += length + return nil + } + // Read all the indexes in one go + indices, err := t.getIndices(start, count) + if err != nil { + return nil, nil, err } - t.lock.RUnlock() - t.readMeter.Mark(int64(len(blob) + 2*indexEntrySize)) + var ( + sizes []int // The sizes for each element + totalSize = 0 // The total size of all data read so far + readStart = indices[0].offset // Where, in the file, to start reading + unreadSize = 0 // The size of the as-yet-unread data + ) - if t.noCompression { - return blob, nil + for i, firstIndex := range indices[:len(indices)-1] { + secondIndex := indices[i+1] + // Determine the size of the item. + offset1, offset2, _ := firstIndex.bounds(secondIndex) + size := int(offset2 - offset1) + // Crossing a file boundary? + if secondIndex.filenum != firstIndex.filenum { + // If we have unread data in the first file, we need to do that read now. + if unreadSize > 0 { + if err := readData(firstIndex.filenum, readStart, unreadSize); err != nil { + return nil, nil, err + } + unreadSize = 0 + } + readStart = 0 + } + if i > 0 && uint64(totalSize+size) > maxBytes { + // About to break out due to byte limit being exceeded. We don't + // read this last item, but we need to do the deferred reads now. + if unreadSize > 0 { + if err := readData(secondIndex.filenum, readStart, unreadSize); err != nil { + return nil, nil, err + } + } + break + } + // Defer the read for later + unreadSize += size + totalSize += size + sizes = append(sizes, size) + if i == len(indices)-2 || uint64(totalSize) > maxBytes { + // Last item, need to do the read now + if err := readData(secondIndex.filenum, readStart, unreadSize); err != nil { + return nil, nil, err + } + break + } } - return snappy.Decode(nil, blob) + return output[:outputSize], sizes, nil } -// has returns an indicator whether the specified number data -// exists in the freezer table. +// has returns an indicator whether the specified number data is still accessible +// in the freezer table. func (t *freezerTable) has(number uint64) bool { - return atomic.LoadUint64(&t.items) > number + return atomic.LoadUint64(&t.items) > number && atomic.LoadUint64(&t.itemHidden) <= number } // size returns the total data size in the freezer table. @@ -604,34 +846,78 @@ func (t *freezerTable) sizeNolock() (uint64, error) { return total, nil } +// advanceHead should be called when the current head file would outgrow the file limits, +// and a new file must be opened. The caller of this method must hold the write-lock +// before calling this method. +func (t *freezerTable) advanceHead() error { + t.lock.Lock() + defer t.lock.Unlock() + + // We open the next file in truncated mode -- if this file already + // exists, we need to start over from scratch on it. + nextID := t.headId + 1 + newHead, err := t.openFile(nextID, openFreezerFileTruncated) + if err != nil { + 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 + t.headBytes = 0 + t.headId = nextID + return 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 } + if err := t.meta.Sync(); err != nil { + return err + } return t.head.Sync() } -// printIndex is a debug print utility function for testing -func (t *freezerTable) printIndex() { +func (t *freezerTable) dumpIndexStdout(start, stop int64) { + t.dumpIndex(os.Stdout, start, stop) +} + +func (t *freezerTable) dumpIndexString(start, stop int64) string { + var out bytes.Buffer + out.WriteString("\n") + t.dumpIndex(&out, start, stop) + return out.String() +} + +func (t *freezerTable) dumpIndex(w io.Writer, start, stop int64) { + meta, err := readMetadata(t.meta) + if err != nil { + fmt.Fprintf(w, "Failed to decode freezer table %v\n", err) + return + } + fmt.Fprintf(w, "Version %d deleted %d, hidden %d\n", meta.Version, atomic.LoadUint64(&t.itemOffset), atomic.LoadUint64(&t.itemHidden)) + buf := make([]byte, indexEntrySize) - fmt.Printf("|-----------------|\n") - fmt.Printf("| fileno | offset |\n") - fmt.Printf("|--------+--------|\n") + fmt.Fprintf(w, "| number | fileno | offset |\n") + fmt.Fprintf(w, "|--------|--------|--------|\n") - for i := uint64(0); ; i++ { - if _, err := t.index.ReadAt(buf, int64(i*indexEntrySize)); err != nil { + for i := uint64(start); ; i++ { + if _, err := t.index.ReadAt(buf, int64((i+1)*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") + fmt.Fprintf(w, "| %03d | %03d | %03d | \n", i, entry.filenum, entry.offset) + if stop > 0 && i >= uint64(stop) { break } } - fmt.Printf("|-----------------|\n") + fmt.Fprintf(w, "|--------------------------|\n") } diff --git a/core/rawdb/freezer_table_test.go b/core/rawdb/freezer_table_test.go index eba8e05b..ea28e717 100644 --- a/core/rawdb/freezer_table_test.go +++ b/core/rawdb/freezer_table_test.go @@ -18,54 +18,41 @@ package rawdb import ( "bytes" + "encoding/binary" "fmt" "math/rand" "os" "path/filepath" + "reflect" + "sync/atomic" "testing" + "testing/quick" "time" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/metrics" + "github.com/stretchr/testify/require" ) 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(), + f, err := newTable(os.TempDir(), fmt.Sprintf("unittest-%d", rand.Uint64()), - metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter(), 50, true) + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, false) 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) - } + writeChunks(t, f, 255, 15) //print(t, f, 0) //print(t, f, 1) @@ -79,7 +66,7 @@ func TestFreezerBasics(t *testing.T) { exp := getChunk(15, y) got, err := f.Retrieve(uint64(y)) if err != nil { - t.Fatal(err) + t.Fatalf("reading item %d: %v", y, err) } if !bytes.Equal(got, exp) { t.Fatalf("test %d, got \n%x != \n%x", y, got, exp) @@ -99,20 +86,25 @@ func TestFreezerBasicsClosing(t *testing.T) { // set cutoff at 50 bytes var ( fname = fmt.Sprintf("basics-close-%d", rand.Uint64()) - rm, wm, sc = metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + rm, wm, sg = metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() f *freezerTable err error ) - f, err = newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err = newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } - // Write 15 bytes 255 times, results in 85 files + + // Write 15 bytes 255 times, results in 85 files. + // In-between writes, the table is closed and re-opened. for x := 0; x < 255; x++ { data := getChunk(15, x) - f.Append(uint64(x), data) + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(uint64(x), data)) + require.NoError(t, batch.commit()) f.Close() - f, err = newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + + f, err = newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -129,7 +121,7 @@ func TestFreezerBasicsClosing(t *testing.T) { t.Fatalf("test %d, got \n%x != \n%x", y, got, exp) } f.Close() - f, err = newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err = newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -139,25 +131,25 @@ func TestFreezerBasicsClosing(t *testing.T) { // TestFreezerRepairDanglingHead tests that we can recover if index entries are removed func TestFreezerRepairDanglingHead(t *testing.T) { t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + // Fill table + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 255, 15) + // 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 { @@ -170,9 +162,10 @@ func TestFreezerRepairDanglingHead(t *testing.T) { } idxFile.Truncate(stat.Size() - 4) idxFile.Close() + // Now open it again { - f, err := newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -190,27 +183,25 @@ func TestFreezerRepairDanglingHead(t *testing.T) { // TestFreezerRepairDanglingHeadLarge tests that we can recover if very many index entries are removed func TestFreezerRepairDanglingHeadLarge(t *testing.T) { t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + // Fill a table and close it + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 255, 15) + // The last item should be there - if _, err = f.Retrieve(f.items - 1); err == nil { - if err != nil { - t.Fatal(err) - } + if _, err = f.Retrieve(f.items - 1); 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 { @@ -218,11 +209,12 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) { } // Remove everything but the first item, and leave data unaligned // 0-indexEntry, 1-indexEntry, corrupt-indexEntry - idxFile.Truncate(indexEntrySize + indexEntrySize + indexEntrySize/2) + idxFile.Truncate(2*indexEntrySize + indexEntrySize/2) idxFile.Close() + // Now open it again { - f, err := newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -235,15 +227,17 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) { t.Errorf("Expected error for missing index entry") } // We should now be able to store items again, from item = 1 + batch := f.newBatch() for x := 1; x < 0xff; x++ { - data := getChunk(15, ^x) - f.Append(uint64(x), data) + require.NoError(t, batch.AppendRaw(uint64(x), getChunk(15, ^x))) } + require.NoError(t, batch.commit()) 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, sc, 50, true) + f, _ := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) for y := 1; y < 255; y++ { exp := getChunk(15, ^y) got, err := f.Retrieve(uint64(y)) @@ -260,24 +254,23 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) { // TestSnappyDetection tests that we fail to open a snappy database and vice versa func TestSnappyDetection(t *testing.T) { t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 255, 15) f.Close() } + // Open without snappy { - f, err := newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, false) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, false, false) if err != nil { t.Fatal(err) } @@ -289,7 +282,7 @@ func TestSnappyDetection(t *testing.T) { // Open with snappy { - f, err := newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -299,8 +292,8 @@ func TestSnappyDetection(t *testing.T) { t.Fatalf("expected no error, got %v", err) } } - } + func assertFileSize(f string, size int64) error { stat, err := os.Stat(f) if err != nil { @@ -310,26 +303,24 @@ func assertFileSize(f string, size int64) error { 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, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + // Fill a table and close it + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 9, 15) + // The last item should be there if _, err = f.Retrieve(f.items - 1); err != nil { f.Close() @@ -338,6 +329,7 @@ func TestFreezerRepairDanglingIndex(t *testing.T) { 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 @@ -352,17 +344,18 @@ func TestFreezerRepairDanglingIndex(t *testing.T) { 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, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } + defer f.Close() if f.items != 7 { - f.Close() t.Fatalf("expected %d items, got %d", 7, f.items) } if err := assertFileSize(fileToCrop, 15); err != nil { @@ -372,35 +365,34 @@ func TestFreezerRepairDanglingIndex(t *testing.T) { } func TestFreezerTruncate(t *testing.T) { - t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + // Fill table + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 30, 15) + // 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, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } defer f.Close() - f.truncate(10) // 150 bytes + f.truncateHead(10) // 150 bytes if f.items != 10 { t.Fatalf("expected %d items, got %d", 10, f.items) } @@ -408,31 +400,35 @@ func TestFreezerTruncate(t *testing.T) { 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, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + + // Fill table + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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)) + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(0, getChunk(40, 0xFF))) + require.NoError(t, batch.AppendRaw(1, getChunk(40, 0xEE))) + require.NoError(t, batch.commit()) + // The last item should be there - if _, err = f.Retrieve(f.items - 1); err != nil { + if _, err = f.Retrieve(1); err != nil { t.Fatal(err) } f.Close() } + // Truncate the file in half fileToCrop := filepath.Join(os.TempDir(), fmt.Sprintf("%s.0001.rdat", fname)) { @@ -446,9 +442,10 @@ func TestFreezerRepairFirstFile(t *testing.T) { file.Truncate(20) file.Close() } + // Reopen { - f, err := newCustomTable(os.TempDir(), fname, rm, wm, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -456,9 +453,14 @@ func TestFreezerRepairFirstFile(t *testing.T) { f.Close() t.Fatalf("expected %d items, got %d", 0, f.items) } + // Write 40 bytes - f.Append(1, getChunk(40, 0xDD)) + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(1, getChunk(40, 0xDD))) + require.NoError(t, batch.commit()) + f.Close() + // Should have been truncated down to zero and then 40 written if err := assertFileSize(fileToCrop, 40); err != nil { t.Fatal(err) @@ -473,27 +475,28 @@ func TestFreezerRepairFirstFile(t *testing.T) { // - check that we did not keep the rdonly file descriptors func TestFreezerReadAndTruncate(t *testing.T) { t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 50, true) + + // Fill table + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) 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) - } + writeChunks(t, f, 30, 15) + // 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, sc, 50, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) if err != nil { t.Fatal(err) } @@ -504,40 +507,48 @@ func TestFreezerReadAndTruncate(t *testing.T) { for y := byte(0); y < 30; y++ { f.Retrieve(uint64(y)) } + // Now, truncate back to zero - f.truncate(0) + f.truncateHead(0) + // Write the data again + batch := f.newBatch() for x := 0; x < 30; x++ { - data := getChunk(15, ^x) - if err := f.Append(uint64(x), data); err != nil { - t.Fatalf("error %v", err) - } + require.NoError(t, batch.AppendRaw(uint64(x), getChunk(15, ^x))) } + require.NoError(t, batch.commit()) f.Close() } } -func TestOffset(t *testing.T) { +func TestFreezerOffset(t *testing.T) { t.Parallel() - rm, wm, sc := metrics.NewMeter(), metrics.NewMeter(), metrics.NewCounter() + 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, sc, 40, true) + + // Fill table + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) 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)) + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(0, getChunk(20, 0xFF))) + require.NoError(t, batch.AppendRaw(1, getChunk(20, 0xEE))) - f.Append(2, getChunk(20, 0xdd)) - f.Append(3, getChunk(20, 0xcc)) + require.NoError(t, batch.AppendRaw(2, getChunk(20, 0xdd))) + require.NoError(t, batch.AppendRaw(3, getChunk(20, 0xcc))) - f.Append(4, getChunk(20, 0xbb)) - f.Append(5, getChunk(20, 0xaa)) - f.printIndex() + require.NoError(t, batch.AppendRaw(4, getChunk(20, 0xbb))) + require.NoError(t, batch.AppendRaw(5, getChunk(20, 0xaa))) + require.NoError(t, batch.commit()) + + t.Log(f.dumpIndexString(0, 100)) f.Close() } + // Now crop it. { // delete files 0 and 1 @@ -559,59 +570,302 @@ func TestOffset(t *testing.T) { // 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, + filenum: uint32(2), // First file is 2 + offset: uint32(4), // We have removed four items } - buf := zeroIndex.marshallBinary() + buf := zeroIndex.append(nil) + // 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, sc, 40, true) + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) if err != nil { t.Fatal(err) } - f.printIndex() - // It should allow writing item 6 - f.Append(6, getChunk(20, 0x99)) + defer f.Close() + t.Log(f.dumpIndexString(0, 100)) + + // It should allow writing item 6. + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(6, getChunk(20, 0x99))) + require.NoError(t, batch.commit()) + + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + 2: errOutOfBounds, + 3: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x99), + }) + } - // It should be fine to fetch 4,5,6 - if got, err := f.Retrieve(4); err != nil { + // Edit the index again, with a much larger initial offset of 1M. + { + // 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) - } 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) + indexBuf := make([]byte, 3*indexEntrySize) + indexFile.Read(indexBuf) + + // Update the index file, so that we store + // [ file = 2, offset = 1M ] at index zero + + zeroIndex := indexEntry{ + offset: uint32(1000000), // We have removed 1M items + filenum: uint32(2), // First file is 2 } - if got, err := f.Retrieve(6); err != nil { + buf := zeroIndex.append(nil) + + // Overwrite index zero + copy(indexBuf, buf) + indexFile.WriteAt(indexBuf, 0) + indexFile.Close() + } + + // Check that existing items have been moved to index 1M. + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { t.Fatal(err) - } else if exp := getChunk(20, 0x99); !bytes.Equal(got, exp) { - t.Fatalf("expected %x got %x", exp, got) } + defer f.Close() + t.Log(f.dumpIndexString(0, 100)) - // 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") - } + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + 2: errOutOfBounds, + 3: errOutOfBounds, + 999999: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 1000000: getChunk(20, 0xbb), + 1000001: getChunk(20, 0xaa), + }) + } +} + +func TestTruncateTail(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("truncate-tail-%d", rand.Uint64()) + + // Fill table + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { + t.Fatal(err) + } + + // Write 7 x 20 bytes, splitting out into four files + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(0, getChunk(20, 0xFF))) + require.NoError(t, batch.AppendRaw(1, getChunk(20, 0xEE))) + require.NoError(t, batch.AppendRaw(2, getChunk(20, 0xdd))) + require.NoError(t, batch.AppendRaw(3, getChunk(20, 0xcc))) + require.NoError(t, batch.AppendRaw(4, getChunk(20, 0xbb))) + require.NoError(t, batch.AppendRaw(5, getChunk(20, 0xaa))) + require.NoError(t, batch.AppendRaw(6, getChunk(20, 0x11))) + require.NoError(t, batch.commit()) + + // nothing to do, all the items should still be there. + f.truncateTail(0) + fmt.Println(f.dumpIndexString(0, 1000)) + checkRetrieve(t, f, map[uint64][]byte{ + 0: getChunk(20, 0xFF), + 1: getChunk(20, 0xEE), + 2: getChunk(20, 0xdd), + 3: getChunk(20, 0xcc), + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + + // truncate single element( item 0 ), deletion is only supported at file level + f.truncateTail(1) + fmt.Println(f.dumpIndexString(0, 1000)) + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 1: getChunk(20, 0xEE), + 2: getChunk(20, 0xdd), + 3: getChunk(20, 0xcc), + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + + // Reopen the table, the deletion information should be persisted as well + f.Close() + f, err = newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { + t.Fatal(err) + } + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 1: getChunk(20, 0xEE), + 2: getChunk(20, 0xdd), + 3: getChunk(20, 0xcc), + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + + // truncate two elements( item 0, item 1 ), the file 0 should be deleted + f.truncateTail(2) + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 2: getChunk(20, 0xdd), + 3: getChunk(20, 0xcc), + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + + // Reopen the table, the above testing should still pass + f.Close() + f, err = newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 2: getChunk(20, 0xdd), + 3: getChunk(20, 0xcc), + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + + // truncate all, the entire freezer should be deleted + f.truncateTail(7) + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + 2: errOutOfBounds, + 3: errOutOfBounds, + 4: errOutOfBounds, + 5: errOutOfBounds, + 6: errOutOfBounds, + }) +} + +func TestTruncateHead(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("truncate-head-blow-tail-%d", rand.Uint64()) + + // Fill table + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { + t.Fatal(err) + } + + // Write 7 x 20 bytes, splitting out into four files + batch := f.newBatch() + require.NoError(t, batch.AppendRaw(0, getChunk(20, 0xFF))) + require.NoError(t, batch.AppendRaw(1, getChunk(20, 0xEE))) + require.NoError(t, batch.AppendRaw(2, getChunk(20, 0xdd))) + require.NoError(t, batch.AppendRaw(3, getChunk(20, 0xcc))) + require.NoError(t, batch.AppendRaw(4, getChunk(20, 0xbb))) + require.NoError(t, batch.AppendRaw(5, getChunk(20, 0xaa))) + require.NoError(t, batch.AppendRaw(6, getChunk(20, 0x11))) + require.NoError(t, batch.commit()) + + f.truncateTail(4) // Tail = 4 + + // NewHead is required to be 3, the entire table should be truncated + f.truncateHead(4) + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, // Deleted by tail + 1: errOutOfBounds, // Deleted by tail + 2: errOutOfBounds, // Deleted by tail + 3: errOutOfBounds, // Deleted by tail + 4: errOutOfBounds, // Deleted by Head + 5: errOutOfBounds, // Deleted by Head + 6: errOutOfBounds, // Deleted by Head + }) + + // Append new items + batch = f.newBatch() + require.NoError(t, batch.AppendRaw(4, getChunk(20, 0xbb))) + require.NoError(t, batch.AppendRaw(5, getChunk(20, 0xaa))) + require.NoError(t, batch.AppendRaw(6, getChunk(20, 0x11))) + require.NoError(t, batch.commit()) + + checkRetrieve(t, f, map[uint64][]byte{ + 4: getChunk(20, 0xbb), + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) +} + +func checkRetrieve(t *testing.T, f *freezerTable, items map[uint64][]byte) { + t.Helper() + + for item, wantBytes := range items { + value, err := f.Retrieve(item) + if err != nil { + t.Fatalf("can't get expected item %d: %v", item, err) + } + if !bytes.Equal(value, wantBytes) { + t.Fatalf("item %d has wrong value %x (want %x)", item, value, wantBytes) + } + } +} + +func checkRetrieveError(t *testing.T, f *freezerTable, items map[uint64]error) { + t.Helper() + + for item, wantError := range items { + value, err := f.Retrieve(item) + if err == nil { + t.Fatalf("unexpected value %x for item %d, want error %v", item, value, wantError) + } + if err != wantError { + t.Fatalf("wrong error for item %d: %v", item, err) } } } +// 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 +} + // TODO (?) // - test that if we remove several head-files, aswell as data last data-file, // the index is truncated accordingly @@ -619,6 +873,424 @@ func TestOffset(t *testing.T) { // 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. +// 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. + +func writeChunks(t *testing.T, ft *freezerTable, n int, length int) { + t.Helper() + + batch := ft.newBatch() + for i := 0; i < n; i++ { + if err := batch.AppendRaw(uint64(i), getChunk(length, i)); err != nil { + t.Fatalf("AppendRaw(%d, ...) returned error: %v", i, err) + } + } + if err := batch.commit(); err != nil { + t.Fatalf("Commit returned error: %v", err) + } +} + +// TestSequentialRead does some basic tests on the RetrieveItems. +func TestSequentialRead(t *testing.T) { + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("batchread-%d", rand.Uint64()) + { // Fill table + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 30 times + writeChunks(t, f, 30, 15) + f.dumpIndexStdout(0, 30) + f.Close() + } + { // Open it, iterate, verify iteration + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 50, true, false) + if err != nil { + t.Fatal(err) + } + items, err := f.RetrieveItems(0, 10000, 100000) + if err != nil { + t.Fatal(err) + } + if have, want := len(items), 30; have != want { + t.Fatalf("want %d items, have %d ", want, have) + } + for i, have := range items { + want := getChunk(15, i) + if !bytes.Equal(want, have) { + t.Fatalf("data corruption: have\n%x\n, want \n%x\n", have, want) + } + } + f.Close() + } + { // Open it, iterate, verify byte limit. The byte limit is less than item + // size, so each lookup should only return one item + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 40, true, false) + if err != nil { + t.Fatal(err) + } + items, err := f.RetrieveItems(0, 10000, 10) + if err != nil { + t.Fatal(err) + } + if have, want := len(items), 1; have != want { + t.Fatalf("want %d items, have %d ", want, have) + } + for i, have := range items { + want := getChunk(15, i) + if !bytes.Equal(want, have) { + t.Fatalf("data corruption: have\n%x\n, want \n%x\n", have, want) + } + } + f.Close() + } +} + +// TestSequentialReadByteLimit does some more advanced tests on batch reads. +// These tests check that when the byte limit hits, we correctly abort in time, +// but also properly do all the deferred reads for the previous data, regardless +// of whether the data crosses a file boundary or not. +func TestSequentialReadByteLimit(t *testing.T) { + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("batchread-2-%d", rand.Uint64()) + { // Fill table + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 100, true, false) + if err != nil { + t.Fatal(err) + } + // Write 10 bytes 30 times, + // Splitting it at every 100 bytes (10 items) + writeChunks(t, f, 30, 10) + f.Close() + } + for i, tc := range []struct { + items uint64 + limit uint64 + want int + }{ + {9, 89, 8}, + {10, 99, 9}, + {11, 109, 10}, + {100, 89, 8}, + {100, 99, 9}, + {100, 109, 10}, + } { + { + f, err := newTable(os.TempDir(), fname, rm, wm, sg, 100, true, false) + if err != nil { + t.Fatal(err) + } + items, err := f.RetrieveItems(0, tc.items, tc.limit) + if err != nil { + t.Fatal(err) + } + if have, want := len(items), tc.want; have != want { + t.Fatalf("test %d: want %d items, have %d ", i, want, have) + } + for ii, have := range items { + want := getChunk(10, ii) + if !bytes.Equal(want, have) { + t.Fatalf("test %d: data corruption item %d: have\n%x\n, want \n%x\n", i, ii, have, want) + } + } + f.Close() + } + } +} + +func TestFreezerReadonly(t *testing.T) { + tmpdir := os.TempDir() + // Case 1: Check it fails on non-existent file. + _, err := newTable(tmpdir, + fmt.Sprintf("readonlytest-%d", rand.Uint64()), + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, true) + if err == nil { + t.Fatal("readonly table instantiation should fail for non-existent table") + } + + // Case 2: Check that it fails on invalid index length. + fname := fmt.Sprintf("readonlytest-%d", rand.Uint64()) + idxFile, err := openFreezerFileForAppend(filepath.Join(tmpdir, fmt.Sprintf("%s.ridx", fname))) + if err != nil { + t.Errorf("Failed to open index file: %v\n", err) + } + // size should not be a multiple of indexEntrySize. + idxFile.Write(make([]byte, 17)) + idxFile.Close() + _, err = newTable(tmpdir, fname, + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, true) + if err == nil { + t.Errorf("readonly table instantiation should fail for invalid index size") + } + + // Case 3: Open table non-readonly table to write some data. + // Then corrupt the head file and make sure opening the table + // again in readonly triggers an error. + fname = fmt.Sprintf("readonlytest-%d", rand.Uint64()) + f, err := newTable(tmpdir, fname, + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, false) + if err != nil { + t.Fatalf("failed to instantiate table: %v", err) + } + writeChunks(t, f, 8, 32) + // Corrupt table file + if _, err := f.head.Write([]byte{1, 1}); err != nil { + t.Fatal(err) + } + if err := f.Close(); err != nil { + t.Fatal(err) + } + _, err = newTable(tmpdir, fname, + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, true) + if err == nil { + t.Errorf("readonly table instantiation should fail for corrupt table file") + } + + // Case 4: Write some data to a table and later re-open it as readonly. + // Should be successful. + fname = fmt.Sprintf("readonlytest-%d", rand.Uint64()) + f, err = newTable(tmpdir, fname, + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, false) + if err != nil { + t.Fatalf("failed to instantiate table: %v\n", err) + } + writeChunks(t, f, 32, 128) + if err := f.Close(); err != nil { + t.Fatal(err) + } + f, err = newTable(tmpdir, fname, + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, true) + if err != nil { + t.Fatal(err) + } + v, err := f.Retrieve(10) + if err != nil { + t.Fatal(err) + } + exp := getChunk(128, 10) + if !bytes.Equal(v, exp) { + t.Errorf("retrieved value is incorrect") + } + + // Case 5: Now write some data via a batch. + // This should fail either during AppendRaw or Commit + batch := f.newBatch() + writeErr := batch.AppendRaw(32, make([]byte, 1)) + if writeErr == nil { + writeErr = batch.commit() + } + if writeErr == nil { + t.Fatalf("Writing to readonly table should fail") + } +} + +// randTest performs random freezer table operations. +// Instances of this test are created by Generate. +type randTest []randTestStep + +type randTestStep struct { + op int + items []uint64 // for append and retrieve + blobs [][]byte // for append + target uint64 // for truncate(head/tail) + err error // for debugging +} + +const ( + opReload = iota + opAppend + opRetrieve + opTruncateHead + opTruncateHeadAll + opTruncateTail + opTruncateTailAll + opCheckAll + opMax // boundary value, not an actual op +) + +func getVals(first uint64, n int) [][]byte { + var ret [][]byte + for i := 0; i < n; i++ { + val := make([]byte, 8) + binary.BigEndian.PutUint64(val, first+uint64(i)) + ret = append(ret, val) + } + return ret +} + +func (randTest) Generate(r *rand.Rand, size int) reflect.Value { + var ( + deleted uint64 // The number of deleted items from tail + items []uint64 // The index of entries in table + + // getItems retrieves the indexes for items in table. + getItems = func(n int) []uint64 { + length := len(items) + if length == 0 { + return nil + } + var ret []uint64 + index := rand.Intn(length) + for i := index; len(ret) < n && i < length; i++ { + ret = append(ret, items[i]) + } + return ret + } + + // addItems appends the given length items into the table. + addItems = func(n int) []uint64 { + var first = deleted + if len(items) != 0 { + first = items[len(items)-1] + 1 + } + var ret []uint64 + for i := 0; i < n; i++ { + ret = append(ret, first+uint64(i)) + } + items = append(items, ret...) + return ret + } + ) + + var steps randTest + for i := 0; i < size; i++ { + step := randTestStep{op: r.Intn(opMax)} + switch step.op { + case opReload, opCheckAll: + case opAppend: + num := r.Intn(3) + step.items = addItems(num) + if len(step.items) == 0 { + step.blobs = nil + } else { + step.blobs = getVals(step.items[0], num) + } + case opRetrieve: + step.items = getItems(r.Intn(3)) + case opTruncateHead: + if len(items) == 0 { + step.target = deleted + } else { + index := r.Intn(len(items)) + items = items[:index] + step.target = deleted + uint64(index) + } + case opTruncateHeadAll: + step.target = deleted + items = items[:0] + case opTruncateTail: + if len(items) == 0 { + step.target = deleted + } else { + index := r.Intn(len(items)) + items = items[index:] + deleted += uint64(index) + step.target = deleted + } + case opTruncateTailAll: + step.target = deleted + uint64(len(items)) + items = items[:0] + deleted = step.target + } + steps = append(steps, step) + } + return reflect.ValueOf(steps) +} + +func runRandTest(rt randTest) bool { + fname := fmt.Sprintf("randtest-%d", rand.Uint64()) + f, err := newTable(os.TempDir(), fname, metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, false) + if err != nil { + panic("failed to initialize table") + } + var values [][]byte + for i, step := range rt { + switch step.op { + case opReload: + f.Close() + f, err = newTable(os.TempDir(), fname, metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true, false) + if err != nil { + rt[i].err = fmt.Errorf("failed to reload table %v", err) + } + case opCheckAll: + tail := atomic.LoadUint64(&f.itemHidden) + head := atomic.LoadUint64(&f.items) + + if tail == head { + continue + } + got, err := f.RetrieveItems(atomic.LoadUint64(&f.itemHidden), head-tail, 100000) + if err != nil { + rt[i].err = err + } else { + if !reflect.DeepEqual(got, values) { + rt[i].err = fmt.Errorf("mismatch on retrieved values %v %v", got, values) + } + } + + case opAppend: + batch := f.newBatch() + for i := 0; i < len(step.items); i++ { + batch.AppendRaw(step.items[i], step.blobs[i]) + } + batch.commit() + values = append(values, step.blobs...) + + case opRetrieve: + var blobs [][]byte + if len(step.items) == 0 { + continue + } + tail := atomic.LoadUint64(&f.itemHidden) + for i := 0; i < len(step.items); i++ { + blobs = append(blobs, values[step.items[i]-tail]) + } + got, err := f.RetrieveItems(step.items[0], uint64(len(step.items)), 100000) + if err != nil { + rt[i].err = err + } else { + if !reflect.DeepEqual(got, blobs) { + rt[i].err = fmt.Errorf("mismatch on retrieved values %v %v %v", got, blobs, step.items) + } + } + + case opTruncateHead: + f.truncateHead(step.target) + + length := atomic.LoadUint64(&f.items) - atomic.LoadUint64(&f.itemHidden) + values = values[:length] + + case opTruncateHeadAll: + f.truncateHead(step.target) + values = nil + + case opTruncateTail: + prev := atomic.LoadUint64(&f.itemHidden) + f.truncateTail(step.target) + + truncated := atomic.LoadUint64(&f.itemHidden) - prev + values = values[truncated:] + + case opTruncateTailAll: + f.truncateTail(step.target) + values = nil + } + // Abort the test on error. + if rt[i].err != nil { + return false + } + } + f.Close() + return true +} + +func TestRandom(t *testing.T) { + if err := quick.Check(runRandTest, nil); err != nil { + if cerr, ok := err.(*quick.CheckError); ok { + t.Fatalf("random test iteration %d failed: %s", cerr.Count, spew.Sdump(cerr.In)) + } + t.Fatal(err) + } +} diff --git a/core/rawdb/freezer_test.go b/core/rawdb/freezer_test.go new file mode 100644 index 00000000..630911ec --- /dev/null +++ b/core/rawdb/freezer_test.go @@ -0,0 +1,409 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "math/big" + "math/rand" + "os" + "path" + "sync" + "testing" + + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" + "github.com/stretchr/testify/require" +) + +var freezerTestTableDef = map[string]bool{"test": true} + +func TestFreezerModify(t *testing.T) { + t.Parallel() + + // Create test data. + var valuesRaw [][]byte + var valuesRLP []*big.Int + for x := 0; x < 100; x++ { + v := getChunk(256, x) + valuesRaw = append(valuesRaw, v) + iv := big.NewInt(int64(x)) + iv = iv.Exp(iv, iv, nil) + valuesRLP = append(valuesRLP, iv) + } + + tables := map[string]bool{"raw": true, "rlp": false} + f, _ := newFreezerForTesting(t, tables) + defer f.Close() + + // Commit test data. + _, err := f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for i := range valuesRaw { + if err := op.AppendRaw("raw", uint64(i), valuesRaw[i]); err != nil { + return err + } + if err := op.Append("rlp", uint64(i), valuesRLP[i]); err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatal("ModifyAncients failed:", err) + } + + // Dump indexes. + for _, table := range f.tables { + t.Log(table.name, "index:", table.dumpIndexString(0, int64(len(valuesRaw)))) + } + + // Read back test data. + checkAncientCount(t, f, "raw", uint64(len(valuesRaw))) + checkAncientCount(t, f, "rlp", uint64(len(valuesRLP))) + for i := range valuesRaw { + v, _ := f.Ancient("raw", uint64(i)) + if !bytes.Equal(v, valuesRaw[i]) { + t.Fatalf("wrong raw value at %d: %x", i, v) + } + ivEnc, _ := f.Ancient("rlp", uint64(i)) + want, _ := rlp.EncodeToBytes(valuesRLP[i]) + if !bytes.Equal(ivEnc, want) { + t.Fatalf("wrong RLP value at %d: %x", i, ivEnc) + } + } +} + +// This checks that ModifyAncients rolls back freezer updates +// when the function passed to it returns an error. +func TestFreezerModifyRollback(t *testing.T) { + t.Parallel() + + f, dir := newFreezerForTesting(t, freezerTestTableDef) + + theError := errors.New("oops") + _, err := f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + // Append three items. This creates two files immediately, + // because the table size limit of the test freezer is 2048. + require.NoError(t, op.AppendRaw("test", 0, make([]byte, 2048))) + require.NoError(t, op.AppendRaw("test", 1, make([]byte, 2048))) + require.NoError(t, op.AppendRaw("test", 2, make([]byte, 2048))) + return theError + }) + if err != theError { + t.Errorf("ModifyAncients returned wrong error %q", err) + } + checkAncientCount(t, f, "test", 0) + f.Close() + + // Reopen and check that the rolled-back data doesn't reappear. + tables := map[string]bool{"test": true} + f2, err := NewFreezer(dir, "", false, 2049, tables) + if err != nil { + t.Fatalf("can't reopen freezer after failed ModifyAncients: %v", err) + } + defer f2.Close() + checkAncientCount(t, f2, "test", 0) +} + +// This test runs ModifyAncients and Ancient concurrently with each other. +func TestFreezerConcurrentModifyRetrieve(t *testing.T) { + t.Parallel() + + f, _ := newFreezerForTesting(t, freezerTestTableDef) + defer f.Close() + + var ( + numReaders = 5 + writeBatchSize = uint64(50) + written = make(chan uint64, numReaders*6) + wg sync.WaitGroup + ) + wg.Add(numReaders + 1) + + // Launch the writer. It appends 10000 items in batches. + go func() { + defer wg.Done() + defer close(written) + for item := uint64(0); item < 10000; item += writeBatchSize { + _, err := f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for i := uint64(0); i < writeBatchSize; i++ { + item := item + i + value := getChunk(32, int(item)) + if err := op.AppendRaw("test", item, value); err != nil { + return err + } + } + return nil + }) + if err != nil { + panic(err) + } + for i := 0; i < numReaders; i++ { + written <- item + writeBatchSize + } + } + }() + + // Launch the readers. They read random items from the freezer up to the + // current frozen item count. + for i := 0; i < numReaders; i++ { + go func() { + defer wg.Done() + for frozen := range written { + for rc := 0; rc < 80; rc++ { + num := uint64(rand.Intn(int(frozen))) + value, err := f.Ancient("test", num) + if err != nil { + panic(fmt.Errorf("error reading %d (frozen %d): %v", num, frozen, err)) + } + if !bytes.Equal(value, getChunk(32, int(num))) { + panic(fmt.Errorf("wrong value at %d", num)) + } + } + } + }() + } + + wg.Wait() +} + +// This test runs ModifyAncients and TruncateHead concurrently with each other. +func TestFreezerConcurrentModifyTruncate(t *testing.T) { + f, _ := newFreezerForTesting(t, freezerTestTableDef) + defer f.Close() + + var item = make([]byte, 256) + + for i := 0; i < 1000; i++ { + // First reset and write 100 items. + if err := f.TruncateHead(0); err != nil { + t.Fatal("truncate failed:", err) + } + _, err := f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for i := uint64(0); i < 100; i++ { + if err := op.AppendRaw("test", i, item); err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatal("modify failed:", err) + } + checkAncientCount(t, f, "test", 100) + + // Now append 100 more items and truncate concurrently. + var ( + wg sync.WaitGroup + truncateErr error + modifyErr error + ) + wg.Add(3) + go func() { + _, modifyErr = f.ModifyAncients(func(op ethdb.AncientWriteOp) error { + for i := uint64(100); i < 200; i++ { + if err := op.AppendRaw("test", i, item); err != nil { + return err + } + } + return nil + }) + wg.Done() + }() + go func() { + truncateErr = f.TruncateHead(10) + wg.Done() + }() + go func() { + f.AncientSize("test") + wg.Done() + }() + wg.Wait() + + // Now check the outcome. If the truncate operation went through first, the append + // fails, otherwise it succeeds. In either case, the freezer should be positioned + // at 10 after both operations are done. + if truncateErr != nil { + t.Fatal("concurrent truncate failed:", err) + } + if !(errors.Is(modifyErr, nil) || errors.Is(modifyErr, errOutOrderInsertion)) { + t.Fatal("wrong error from concurrent modify:", modifyErr) + } + checkAncientCount(t, f, "test", 10) + } +} + +func TestFreezerReadonlyValidate(t *testing.T) { + tables := map[string]bool{"a": true, "b": true} + dir := t.TempDir() + // Open non-readonly freezer and fill individual tables + // with different amount of data. + f, err := NewFreezer(dir, "", false, 2049, tables) + if err != nil { + t.Fatal("can't open freezer", err) + } + var item = make([]byte, 1024) + aBatch := f.tables["a"].newBatch() + require.NoError(t, aBatch.AppendRaw(0, item)) + require.NoError(t, aBatch.AppendRaw(1, item)) + require.NoError(t, aBatch.AppendRaw(2, item)) + require.NoError(t, aBatch.commit()) + bBatch := f.tables["b"].newBatch() + require.NoError(t, bBatch.AppendRaw(0, item)) + require.NoError(t, bBatch.commit()) + if f.tables["a"].items != 3 { + t.Fatalf("unexpected number of items in table") + } + if f.tables["b"].items != 1 { + t.Fatalf("unexpected number of items in table") + } + require.NoError(t, f.Close()) + + // Re-openening as readonly should fail when validating + // table lengths. + _, err = NewFreezer(dir, "", true, 2049, tables) + if err == nil { + t.Fatal("readonly freezer should fail with differing table lengths") + } +} + +func newFreezerForTesting(t *testing.T, tables map[string]bool) (*Freezer, string) { + t.Helper() + + dir := t.TempDir() + // note: using low max table size here to ensure the tests actually + // switch between multiple files. + f, err := NewFreezer(dir, "", false, 2049, tables) + if err != nil { + t.Fatal("can't open freezer", err) + } + return f, dir +} + +// checkAncientCount verifies that the freezer contains n items. +func checkAncientCount(t *testing.T, f *Freezer, kind string, n uint64) { + t.Helper() + + if frozen, _ := f.Ancients(); frozen != n { + t.Fatalf("Ancients() returned %d, want %d", frozen, n) + } + + // Check at index n-1. + if n > 0 { + index := n - 1 + if ok, _ := f.HasAncient(kind, index); !ok { + t.Errorf("HasAncient(%q, %d) returned false unexpectedly", kind, index) + } + if _, err := f.Ancient(kind, index); err != nil { + t.Errorf("Ancient(%q, %d) returned unexpected error %q", kind, index, err) + } + } + + // Check at index n. + index := n + if ok, _ := f.HasAncient(kind, index); ok { + t.Errorf("HasAncient(%q, %d) returned true unexpectedly", kind, index) + } + if _, err := f.Ancient(kind, index); err == nil { + t.Errorf("Ancient(%q, %d) didn't return expected error", kind, index) + } else if err != errOutOfBounds { + t.Errorf("Ancient(%q, %d) returned unexpected error %q", kind, index, err) + } +} + +func TestRenameWindows(t *testing.T) { + var ( + fname = "file.bin" + fname2 = "file2.bin" + data = []byte{1, 2, 3, 4} + data2 = []byte{2, 3, 4, 5} + data3 = []byte{3, 5, 6, 7} + dataLen = 4 + ) + + // Create 2 temp dirs + dir1 := t.TempDir() + dir2 := t.TempDir() + + // Create file in dir1 and fill with data + f, err := os.Create(path.Join(dir1, fname)) + if err != nil { + t.Fatal(err) + } + f2, err := os.Create(path.Join(dir1, fname2)) + if err != nil { + t.Fatal(err) + } + f3, err := os.Create(path.Join(dir2, fname2)) + if err != nil { + t.Fatal(err) + } + if _, err := f.Write(data); err != nil { + t.Fatal(err) + } + if _, err := f2.Write(data2); err != nil { + t.Fatal(err) + } + if _, err := f3.Write(data3); err != nil { + t.Fatal(err) + } + if err := f.Close(); err != nil { + t.Fatal(err) + } + if err := f2.Close(); err != nil { + t.Fatal(err) + } + if err := f3.Close(); err != nil { + t.Fatal(err) + } + if err := os.Rename(f.Name(), path.Join(dir2, fname)); err != nil { + t.Fatal(err) + } + if err := os.Rename(f2.Name(), path.Join(dir2, fname2)); err != nil { + t.Fatal(err) + } + + // Check file contents + f, err = os.Open(path.Join(dir2, fname)) + if err != nil { + t.Fatal(err) + } + defer f.Close() + defer os.Remove(f.Name()) + buf := make([]byte, dataLen) + if _, err := f.Read(buf); err != nil { + t.Fatal(err) + } + if !bytes.Equal(buf, data) { + t.Errorf("unexpected file contents. Got %v\n", buf) + } + + f, err = os.Open(path.Join(dir2, fname2)) + if err != nil { + t.Fatal(err) + } + defer f.Close() + defer os.Remove(f.Name()) + if _, err := f.Read(buf); err != nil { + t.Fatal(err) + } + if !bytes.Equal(buf, data2) { + t.Errorf("unexpected file contents. Got %v\n", buf) + } +} diff --git a/core/rawdb/freezer_utils.go b/core/rawdb/freezer_utils.go new file mode 100644 index 00000000..e7cce292 --- /dev/null +++ b/core/rawdb/freezer_utils.go @@ -0,0 +1,119 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "io" + "os" + "path/filepath" +) + +// copyFrom copies data from 'srcPath' at offset 'offset' into 'destPath'. +// The 'destPath' is created if it doesn't exist, otherwise it is overwritten. +// Before the copy is executed, there is a callback can be registered to +// manipulate the dest file. +// It is perfectly valid to have destPath == srcPath. +func copyFrom(srcPath, destPath string, offset uint64, before func(f *os.File) error) error { + // Create a temp file in the same dir where we want it to wind up + f, err := os.CreateTemp(filepath.Dir(destPath), "*") + if err != nil { + return err + } + fname := f.Name() + + // Clean up the leftover file + defer func() { + if f != nil { + f.Close() + } + os.Remove(fname) + }() + // Apply the given function if it's not nil before we copy + // the content from the src. + if before != nil { + if err := before(f); err != nil { + return err + } + } + // Open the source file + src, err := os.Open(srcPath) + if err != nil { + return err + } + if _, err = src.Seek(int64(offset), 0); err != nil { + src.Close() + return err + } + // io.Copy uses 32K buffer internally. + _, err = io.Copy(f, src) + if err != nil { + src.Close() + return err + } + // Rename the temporary file to the specified dest name. + // src may be same as dest, so needs to be closed before + // we do the final move. + src.Close() + + if err := f.Close(); err != nil { + return err + } + f = nil + + if err := os.Rename(fname, destPath); err != nil { + return err + } + return nil +} + +// 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 +} diff --git a/core/rawdb/freezer_utils_test.go b/core/rawdb/freezer_utils_test.go new file mode 100644 index 00000000..829cbfb4 --- /dev/null +++ b/core/rawdb/freezer_utils_test.go @@ -0,0 +1,75 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "os" + "testing" +) + +func TestCopyFrom(t *testing.T) { + var ( + content = []byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8} + prefix = []byte{0x9, 0xa, 0xb, 0xc, 0xd, 0xf} + ) + var cases = []struct { + src, dest string + offset uint64 + writePrefix bool + }{ + {"foo", "bar", 0, false}, + {"foo", "bar", 1, false}, + {"foo", "bar", 8, false}, + {"foo", "foo", 0, false}, + {"foo", "foo", 1, false}, + {"foo", "foo", 8, false}, + {"foo", "bar", 0, true}, + {"foo", "bar", 1, true}, + {"foo", "bar", 8, true}, + } + for _, c := range cases { + os.WriteFile(c.src, content, 0600) + + if err := copyFrom(c.src, c.dest, c.offset, func(f *os.File) error { + if !c.writePrefix { + return nil + } + f.Write(prefix) + return nil + }); err != nil { + os.Remove(c.src) + t.Fatalf("Failed to copy %v", err) + } + + blob, err := os.ReadFile(c.dest) + if err != nil { + os.Remove(c.src) + os.Remove(c.dest) + t.Fatalf("Failed to read %v", err) + } + want := content[c.offset:] + if c.writePrefix { + want = append(prefix, want...) + } + if !bytes.Equal(blob, want) { + t.Fatal("Unexpected value") + } + os.Remove(c.src) + os.Remove(c.dest) + } +} diff --git a/core/rawdb/key_length_iterator.go b/core/rawdb/key_length_iterator.go new file mode 100644 index 00000000..d1c5af26 --- /dev/null +++ b/core/rawdb/key_length_iterator.go @@ -0,0 +1,47 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + +// KeyLengthIterator is a wrapper for a database iterator that ensures only key-value pairs +// with a specific key length will be returned. +type KeyLengthIterator struct { + requiredKeyLength int + ethdb.Iterator +} + +// NewKeyLengthIterator returns a wrapped version of the iterator that will only return key-value +// pairs where keys with a specific key length will be returned. +func NewKeyLengthIterator(it ethdb.Iterator, keyLen int) ethdb.Iterator { + return &KeyLengthIterator{ + Iterator: it, + requiredKeyLength: keyLen, + } +} + +func (it *KeyLengthIterator) Next() bool { + // Return true as soon as a key with the required key length is discovered + for it.Iterator.Next() { + if len(it.Iterator.Key()) == it.requiredKeyLength { + return true + } + } + + // Return false when we exhaust the keys in the underlying iterator. + return false +} diff --git a/core/rawdb/key_length_iterator_test.go b/core/rawdb/key_length_iterator_test.go new file mode 100644 index 00000000..654efc5b --- /dev/null +++ b/core/rawdb/key_length_iterator_test.go @@ -0,0 +1,60 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "testing" +) + +func TestKeyLengthIterator(t *testing.T) { + db := NewMemoryDatabase() + + keyLen := 8 + expectedKeys := make(map[string]struct{}) + for i := 0; i < 100; i++ { + key := make([]byte, keyLen) + binary.BigEndian.PutUint64(key, uint64(i)) + if err := db.Put(key, []byte{0x1}); err != nil { + t.Fatal(err) + } + expectedKeys[string(key)] = struct{}{} + + longerKey := make([]byte, keyLen*2) + binary.BigEndian.PutUint64(longerKey, uint64(i)) + if err := db.Put(longerKey, []byte{0x1}); err != nil { + t.Fatal(err) + } + } + + it := NewKeyLengthIterator(db.NewIterator(nil, nil), keyLen) + for it.Next() { + key := it.Key() + _, exists := expectedKeys[string(key)] + if !exists { + t.Fatalf("Found unexpected key %d", binary.BigEndian.Uint64(key)) + } + delete(expectedKeys, string(key)) + if len(key) != keyLen { + t.Fatalf("Found unexpected key in key length iterator with length %d", len(key)) + } + } + + if len(expectedKeys) != 0 { + t.Fatalf("Expected all keys of length %d to be removed from expected keys during iteration", keyLen) + } +} diff --git a/core/rawdb/schema.go b/core/rawdb/schema.go index 2c048c3e..d5f751da 100644 --- a/core/rawdb/schema.go +++ b/core/rawdb/schema.go @@ -18,16 +18,17 @@ package rawdb import ( + "bytes" "encoding/binary" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/metrics" ) // The fields below define the low level database schema prefixing. var ( - // databaseVerisionKey tracks the current database version. - databaseVerisionKey = []byte("DatabaseVersion") + // databaseVersionKey tracks the current database version. + databaseVersionKey = []byte("DatabaseVersion") // headHeaderKey tracks the latest known header's hash. headHeaderKey = []byte("LastHeader") @@ -38,9 +39,51 @@ var ( // headFastBlockKey tracks the latest known incomplete block's hash during fast sync. headFastBlockKey = []byte("LastFast") + // headFinalizedBlockKey tracks the latest known finalized block hash. + headFinalizedBlockKey = []byte("LastFinalized") + + // lastPivotKey tracks the last pivot block used by fast sync (to reenable on sethead). + lastPivotKey = []byte("LastPivot") + // fastTrieProgressKey tracks the number of trie entries imported during fast sync. fastTrieProgressKey = []byte("TrieSync") + // snapshotDisabledKey flags that the snapshot should not be maintained due to initial sync. + snapshotDisabledKey = []byte("SnapshotDisabled") + + // SnapshotRootKey tracks the hash of the last snapshot. + SnapshotRootKey = []byte("SnapshotRoot") + + // snapshotJournalKey tracks the in-memory diff layers across restarts. + snapshotJournalKey = []byte("SnapshotJournal") + + // snapshotGeneratorKey tracks the snapshot generation marker across restarts. + snapshotGeneratorKey = []byte("SnapshotGenerator") + + // snapshotRecoveryKey tracks the snapshot recovery marker across restarts. + snapshotRecoveryKey = []byte("SnapshotRecovery") + + // snapshotSyncStatusKey tracks the snapshot sync status across restarts. + snapshotSyncStatusKey = []byte("SnapshotSyncStatus") + + // skeletonSyncStatusKey tracks the skeleton sync status across restarts. + skeletonSyncStatusKey = []byte("SkeletonSyncStatus") + + // txIndexTailKey tracks the oldest block whose transactions have been indexed. + txIndexTailKey = []byte("TransactionIndexTail") + + // fastTxLookupLimitKey tracks the transaction lookup limit during fast sync. + fastTxLookupLimitKey = []byte("FastTransactionLookupLimit") + + // badBlockKey tracks the list of bad blocks seen by local + badBlockKey = []byte("InvalidBlock") + + // uncleanShutdownKey tracks the list of local crashes + uncleanShutdownKey = []byte("unclean-shutdown") // config prefix for the db + + // transitionStatusKey tracks the eth2 transition status. + transitionStatusKey = []byte("eth2-transition") + // Data item prefixes (use single byte to avoid mixing data types, avoid `i`, used for indexes). headerPrefix = []byte("h") // headerPrefix + num (uint64 big endian) + hash -> header headerTDSuffix = []byte("t") // headerPrefix + num (uint64 big endian) + hash + headerTDSuffix -> td @@ -50,11 +93,16 @@ var ( blockBodyPrefix = []byte("b") // blockBodyPrefix + num (uint64 big endian) + hash -> block body blockReceiptsPrefix = []byte("r") // blockReceiptsPrefix + num (uint64 big endian) + hash -> block receipts - txLookupPrefix = []byte("l") // txLookupPrefix + hash -> transaction/receipt lookup metadata - bloomBitsPrefix = []byte("B") // bloomBitsPrefix + bit (uint16 big endian) + section (uint64 big endian) + hash -> bloom bits + txLookupPrefix = []byte("l") // txLookupPrefix + hash -> transaction/receipt lookup metadata + bloomBitsPrefix = []byte("B") // bloomBitsPrefix + bit (uint16 big endian) + section (uint64 big endian) + hash -> bloom bits + SnapshotAccountPrefix = []byte("a") // SnapshotAccountPrefix + account hash -> account trie value + SnapshotStoragePrefix = []byte("o") // SnapshotStoragePrefix + account hash + storage hash -> storage trie value + CodePrefix = []byte("c") // CodePrefix + code hash -> account code + skeletonHeaderPrefix = []byte("S") // skeletonHeaderPrefix + num (uint64 big endian) -> header - preimagePrefix = []byte("secure-key-") // preimagePrefix + hash -> preimage - configPrefix = []byte("ethereum-config-") // config prefix for the db + PreimagePrefix = []byte("secure-key-") // PreimagePrefix + hash -> preimage + configPrefix = []byte("ethereum-config-") // config prefix for the db + genesisPrefix = []byte("ethereum-genesis-") // genesis state prefix for the db // Chain index prefixes (use `i` + single byte to avoid mixing data types). BloomBitsIndexPrefix = []byte("iB") // BloomBitsIndexPrefix is the data table of a chain indexer to track its progress @@ -63,33 +111,6 @@ var ( preimageHitCounter = metrics.NewRegisteredCounter("db/preimage/hits", nil) ) -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 { @@ -145,6 +166,21 @@ func txLookupKey(hash common.Hash) []byte { return append(txLookupPrefix, hash.Bytes()...) } +// accountSnapshotKey = SnapshotAccountPrefix + hash +func accountSnapshotKey(hash common.Hash) []byte { + return append(SnapshotAccountPrefix, hash.Bytes()...) +} + +// storageSnapshotKey = SnapshotStoragePrefix + account hash + storage hash +func storageSnapshotKey(accountHash, storageHash common.Hash) []byte { + return append(append(SnapshotStoragePrefix, accountHash.Bytes()...), storageHash.Bytes()...) +} + +// storageSnapshotsKey = SnapshotStoragePrefix + account hash + storage hash +func storageSnapshotsKey(accountHash common.Hash) []byte { + return append(SnapshotStoragePrefix, accountHash.Bytes()...) +} + // bloomBitsKey = bloomBitsPrefix + bit (uint16 big endian) + section (uint64 big endian) + hash func bloomBitsKey(bit uint, section uint64, hash common.Hash) []byte { key := append(append(bloomBitsPrefix, make([]byte, 10)...), hash.Bytes()...) @@ -155,12 +191,36 @@ func bloomBitsKey(bit uint, section uint64, hash common.Hash) []byte { return key } -// preimageKey = preimagePrefix + hash +// skeletonHeaderKey = skeletonHeaderPrefix + num (uint64 big endian) +func skeletonHeaderKey(number uint64) []byte { + return append(skeletonHeaderPrefix, encodeBlockNumber(number)...) +} + +// preimageKey = PreimagePrefix + hash func preimageKey(hash common.Hash) []byte { - return append(preimagePrefix, hash.Bytes()...) + return append(PreimagePrefix, hash.Bytes()...) +} + +// codeKey = CodePrefix + hash +func codeKey(hash common.Hash) []byte { + return append(CodePrefix, hash.Bytes()...) +} + +// IsCodeKey reports whether the given byte slice is the key of contract code, +// if so return the raw code hash as well. +func IsCodeKey(key []byte) (bool, []byte) { + if bytes.HasPrefix(key, CodePrefix) && len(key) == common.HashLength+len(CodePrefix) { + return true, key[len(CodePrefix):] + } + return false, nil } // configKey = configPrefix + hash func configKey(hash common.Hash) []byte { return append(configPrefix, hash.Bytes()...) } + +// genesisStateSpecKey = genesisPrefix + hash +func genesisStateSpecKey(hash common.Hash) []byte { + return append(genesisPrefix, hash.Bytes()...) +} diff --git a/core/rawdb/table.go b/core/rawdb/table.go index dee3eb58..6d6fa055 100644 --- a/core/rawdb/table.go +++ b/core/rawdb/table.go @@ -17,7 +17,7 @@ package rawdb import ( - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/ethdb" ) // table is a wrapper around a database that prefixes each key access with a pre- @@ -62,28 +62,49 @@ func (t *table) Ancient(kind string, number uint64) ([]byte, error) { return t.db.Ancient(kind, number) } +// AncientRange is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) { + return t.db.AncientRange(kind, start, count, maxBytes) +} + // Ancients is a noop passthrough that just forwards the request to the underlying // database. func (t *table) Ancients() (uint64, error) { return t.db.Ancients() } +// Tail is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) Tail() (uint64, error) { + return t.db.Tail() +} + // 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 +// ModifyAncients runs an ancient write operation on the underlying database. +func (t *table) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (int64, error) { + return t.db.ModifyAncients(fn) +} + +func (t *table) ReadAncients(fn func(reader ethdb.AncientReaderOp) error) (err error) { + return t.db.ReadAncients(fn) +} + +// TruncateHead 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) +func (t *table) TruncateHead(items uint64) error { + return t.db.TruncateHead(items) } -// TruncateAncients is a noop passthrough that just forwards the request to the underlying +// TruncateTail 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) +func (t *table) TruncateTail(items uint64) error { + return t.db.TruncateTail(items) } // Sync is a noop passthrough that just forwards the request to the underlying @@ -92,6 +113,17 @@ func (t *table) Sync() error { return t.db.Sync() } +// MigrateTable processes the entries in a given table in sequence +// converting them to a new format if they're of an old format. +func (t *table) MigrateTable(kind string, convert convertLegacyFn) error { + return t.db.MigrateTable(kind, convert) +} + +// AncientDatadir returns the ancient datadir of the underlying database. +func (t *table) AncientDatadir() (string, error) { + return t.db.AncientDatadir() +} + // 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 { @@ -103,23 +135,16 @@ 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...)) +// NewIterator creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix, starting at a particular +// initial key (or after, if it does not exist). +func (t *table) NewIterator(prefix []byte, start []byte) ethdb.Iterator { + innerPrefix := append([]byte(t.prefix), prefix...) + iter := t.db.NewIterator(innerPrefix, start) + return &tableIterator{ + iter: iter, + prefix: t.prefix, + } } // Stat returns a particular internal stat of the database. @@ -138,6 +163,8 @@ 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) + } else { + start = append([]byte(t.prefix), start...) } // If no limit was specified, use the first element not matching the prefix // as the limit @@ -154,6 +181,8 @@ func (t *table) Compact(start []byte, limit []byte) error { limit = nil } } + } else { + limit = append([]byte(t.prefix), limit...) } // Range correctly calculated based on table prefix, delegate down return t.db.Compact(start, limit) @@ -166,6 +195,18 @@ func (t *table) NewBatch() ethdb.Batch { return &tableBatch{t.db.NewBatch(), t.prefix} } +// NewBatchWithSize creates a write-only database batch with pre-allocated buffer. +func (t *table) NewBatchWithSize(size int) ethdb.Batch { + return &tableBatch{t.db.NewBatchWithSize(size), t.prefix} +} + +// NewSnapshot creates a database snapshot based on the current state. +// The created snapshot will not be affected by all following mutations +// happened on the database. +func (t *table) NewSnapshot() (ethdb.Snapshot, error) { + return t.db.NewSnapshot() +} + // tableBatch is a wrapper around a database batch that prefixes each key access // with a pre-configured string. type tableBatch struct { @@ -198,7 +239,69 @@ func (b *tableBatch) Reset() { b.batch.Reset() } +// tableReplayer is a wrapper around a batch replayer which truncates +// the added prefix. +type tableReplayer struct { + w ethdb.KeyValueWriter + prefix string +} + +// Put implements the interface KeyValueWriter. +func (r *tableReplayer) Put(key []byte, value []byte) error { + trimmed := key[len(r.prefix):] + return r.w.Put(trimmed, value) +} + +// Delete implements the interface KeyValueWriter. +func (r *tableReplayer) Delete(key []byte) error { + trimmed := key[len(r.prefix):] + return r.w.Delete(trimmed) +} + // Replay replays the batch contents. func (b *tableBatch) Replay(w ethdb.KeyValueWriter) error { - return b.batch.Replay(w) + return b.batch.Replay(&tableReplayer{w: w, prefix: b.prefix}) +} + +// tableIterator is a wrapper around a database iterator that prefixes each key access +// with a pre-configured string. +type tableIterator struct { + iter ethdb.Iterator + prefix string +} + +// Next moves the iterator to the next key/value pair. It returns whether the +// iterator is exhausted. +func (iter *tableIterator) Next() bool { + return iter.iter.Next() +} + +// Error returns any accumulated error. Exhausting all the key/value pairs +// is not considered to be an error. +func (iter *tableIterator) Error() error { + return iter.iter.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. +func (iter *tableIterator) Key() []byte { + key := iter.iter.Key() + if key == nil { + return nil + } + return key[len(iter.prefix):] +} + +// 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 (iter *tableIterator) Value() []byte { + return iter.iter.Value() +} + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (iter *tableIterator) Release() { + iter.iter.Release() } diff --git a/core/rawdb/table_test.go b/core/rawdb/table_test.go new file mode 100644 index 00000000..aa6adf3e --- /dev/null +++ b/core/rawdb/table_test.go @@ -0,0 +1,128 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "testing" + + "github.com/ethereum/go-ethereum/ethdb" +) + +func TestTableDatabase(t *testing.T) { testTableDatabase(t, "prefix") } +func TestEmptyPrefixTableDatabase(t *testing.T) { testTableDatabase(t, "") } + +type testReplayer struct { + puts [][]byte + dels [][]byte +} + +func (r *testReplayer) Put(key []byte, value []byte) error { + r.puts = append(r.puts, key) + return nil +} + +func (r *testReplayer) Delete(key []byte) error { + r.dels = append(r.dels, key) + return nil +} + +func testTableDatabase(t *testing.T, prefix string) { + db := NewTable(NewMemoryDatabase(), prefix) + + var entries = []struct { + key []byte + value []byte + }{ + {[]byte{0x01, 0x02}, []byte{0x0a, 0x0b}}, + {[]byte{0x03, 0x04}, []byte{0x0c, 0x0d}}, + {[]byte{0x05, 0x06}, []byte{0x0e, 0x0f}}, + + {[]byte{0xff, 0xff, 0x01}, []byte{0x1a, 0x1b}}, + {[]byte{0xff, 0xff, 0x02}, []byte{0x1c, 0x1d}}, + {[]byte{0xff, 0xff, 0x03}, []byte{0x1e, 0x1f}}, + } + + // Test Put/Get operation + for _, entry := range entries { + db.Put(entry.key, entry.value) + } + for _, entry := range entries { + got, err := db.Get(entry.key) + if err != nil { + t.Fatalf("Failed to get value: %v", err) + } + if !bytes.Equal(got, entry.value) { + t.Fatalf("Value mismatch: want=%v, got=%v", entry.value, got) + } + } + + // Test batch operation + db = NewTable(NewMemoryDatabase(), prefix) + batch := db.NewBatch() + for _, entry := range entries { + batch.Put(entry.key, entry.value) + } + batch.Write() + for _, entry := range entries { + got, err := db.Get(entry.key) + if err != nil { + t.Fatalf("Failed to get value: %v", err) + } + if !bytes.Equal(got, entry.value) { + t.Fatalf("Value mismatch: want=%v, got=%v", entry.value, got) + } + } + + // Test batch replayer + r := &testReplayer{} + batch.Replay(r) + for index, entry := range entries { + got := r.puts[index] + if !bytes.Equal(got, entry.key) { + t.Fatalf("Key mismatch: want=%v, got=%v", entry.key, got) + } + } + + check := func(iter ethdb.Iterator, expCount, index int) { + count := 0 + for iter.Next() { + key, value := iter.Key(), iter.Value() + if !bytes.Equal(key, entries[index].key) { + t.Fatalf("Key mismatch: want=%v, got=%v", entries[index].key, key) + } + if !bytes.Equal(value, entries[index].value) { + t.Fatalf("Value mismatch: want=%v, got=%v", entries[index].value, value) + } + index += 1 + count++ + } + if count != expCount { + t.Fatalf("Wrong number of elems, exp %d got %d", expCount, count) + } + iter.Release() + } + // Test iterators + check(db.NewIterator(nil, nil), 6, 0) + // Test iterators with prefix + check(db.NewIterator([]byte{0xff, 0xff}, nil), 3, 3) + // Test iterators with start point + check(db.NewIterator(nil, []byte{0xff, 0xff, 0x02}), 2, 4) + // Test iterators with prefix and start point + check(db.NewIterator([]byte{0xee}, nil), 0, 0) + check(db.NewIterator(nil, []byte{0x00}), 6, 0) +} diff --git a/core/rawdb/testdata/stored_receipts.bin b/core/rawdb/testdata/stored_receipts.bin new file mode 100644 index 00000000..8204fae0 Binary files /dev/null and b/core/rawdb/testdata/stored_receipts.bin differ diff --git a/core/rlp_test.go b/core/rlp_test.go new file mode 100644 index 00000000..bf5a934c --- /dev/null +++ b/core/rlp_test.go @@ -0,0 +1,201 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "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/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/crypto/sha3" +) + +func getBlock(transactions int, uncles int, dataSize int) *types.Block { + var ( + aa = common.HexToAddress("0x000000000000000000000000000000000000aaaa") + // 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(1_000_000_000_000_000_000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{address: {Balance: funds}}, + } + genesis = gspec.MustCommit(db) + ) + + // We need to generate as many blocks +1 as uncles + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, uncles+1, + func(n int, b *BlockGen) { + if n == uncles { + // Add transactions and stuff on the last block + for i := 0; i < transactions; i++ { + tx, _ := types.SignTx(types.NewTransaction(uint64(i), aa, + big.NewInt(0), 50000, b.header.BaseFee, make([]byte, dataSize)), types.HomesteadSigner{}, key) + b.AddTx(tx) + } + for i := 0; i < uncles; i++ { + b.AddUncle(&types.Header{ParentHash: b.PrevBlock(n - 1 - i).Hash(), Number: big.NewInt(int64(n - i))}) + } + } + }) + block := blocks[len(blocks)-1] + return block +} + +// TestRlpIterator tests that individual transactions can be picked out +// from blocks without full unmarshalling/marshalling +func TestRlpIterator(t *testing.T) { + for _, tt := range []struct { + txs int + uncles int + datasize int + }{ + {0, 0, 0}, + {0, 2, 0}, + {10, 0, 0}, + {10, 2, 0}, + {10, 2, 50}, + } { + testRlpIterator(t, tt.txs, tt.uncles, tt.datasize) + } +} + +func testRlpIterator(t *testing.T, txs, uncles, datasize int) { + desc := fmt.Sprintf("%d txs [%d datasize] and %d uncles", txs, datasize, uncles) + bodyRlp, _ := rlp.EncodeToBytes(getBlock(txs, uncles, datasize).Body()) + it, err := rlp.NewListIterator(bodyRlp) + if err != nil { + t.Fatal(err) + } + // Check that txs exist + if !it.Next() { + t.Fatal("expected two elems, got zero") + } + txdata := it.Value() + // Check that uncles exist + if !it.Next() { + t.Fatal("expected two elems, got one") + } + // No more after that + if it.Next() { + t.Fatal("expected only two elems, got more") + } + txIt, err := rlp.NewListIterator(txdata) + if err != nil { + t.Fatal(err) + } + var gotHashes []common.Hash + var expHashes []common.Hash + for txIt.Next() { + gotHashes = append(gotHashes, crypto.Keccak256Hash(txIt.Value())) + } + + var expBody types.Body + err = rlp.DecodeBytes(bodyRlp, &expBody) + if err != nil { + t.Fatal(err) + } + for _, tx := range expBody.Transactions { + expHashes = append(expHashes, tx.Hash()) + } + if gotLen, expLen := len(gotHashes), len(expHashes); gotLen != expLen { + t.Fatalf("testcase %v: length wrong, got %d exp %d", desc, gotLen, expLen) + } + // also sanity check against input + if gotLen := len(gotHashes); gotLen != txs { + t.Fatalf("testcase %v: length wrong, got %d exp %d", desc, gotLen, txs) + } + for i, got := range gotHashes { + if exp := expHashes[i]; got != exp { + t.Errorf("testcase %v: hash wrong, got %x, exp %x", desc, got, exp) + } + } +} + +// BenchmarkHashing compares the speeds of hashing a rlp raw data directly +// without the unmarshalling/marshalling step +func BenchmarkHashing(b *testing.B) { + // Make a pretty fat block + var ( + bodyRlp []byte + blockRlp []byte + ) + { + block := getBlock(200, 2, 50) + bodyRlp, _ = rlp.EncodeToBytes(block.Body()) + blockRlp, _ = rlp.EncodeToBytes(block) + } + var got common.Hash + var hasher = sha3.NewLegacyKeccak256() + b.Run("iteratorhashing", func(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + var hash common.Hash + it, err := rlp.NewListIterator(bodyRlp) + if err != nil { + b.Fatal(err) + } + it.Next() + txs := it.Value() + txIt, err := rlp.NewListIterator(txs) + if err != nil { + b.Fatal(err) + } + for txIt.Next() { + hasher.Reset() + hasher.Write(txIt.Value()) + hasher.Sum(hash[:0]) + got = hash + } + } + }) + var exp common.Hash + b.Run("fullbodyhashing", func(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + var body types.Body + rlp.DecodeBytes(bodyRlp, &body) + for _, tx := range body.Transactions { + exp = tx.Hash() + } + } + }) + b.Run("fullblockhashing", func(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + var block types.Block + rlp.DecodeBytes(blockRlp, &block) + for _, tx := range block.Transactions() { + tx.Hash() + } + } + }) + if got != exp { + b.Fatalf("hash wrong, got %x exp %x", got, exp) + } +} diff --git a/core/state/access_list.go b/core/state/access_list.go new file mode 100644 index 00000000..41946913 --- /dev/null +++ b/core/state/access_list.go @@ -0,0 +1,136 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "github.com/ethereum/go-ethereum/common" +) + +type accessList struct { + addresses map[common.Address]int + slots []map[common.Hash]struct{} +} + +// ContainsAddress returns true if the address is in the access list. +func (al *accessList) ContainsAddress(address common.Address) bool { + _, ok := al.addresses[address] + return ok +} + +// Contains checks if a slot within an account is present in the access list, returning +// separate flags for the presence of the account and the slot respectively. +func (al *accessList) Contains(address common.Address, slot common.Hash) (addressPresent bool, slotPresent bool) { + idx, ok := al.addresses[address] + if !ok { + // no such address (and hence zero slots) + return false, false + } + if idx == -1 { + // address yes, but no slots + return true, false + } + _, slotPresent = al.slots[idx][slot] + return true, slotPresent +} + +// newAccessList creates a new accessList. +func newAccessList() *accessList { + return &accessList{ + addresses: make(map[common.Address]int), + } +} + +// Copy creates an independent copy of an accessList. +func (a *accessList) Copy() *accessList { + cp := newAccessList() + for k, v := range a.addresses { + cp.addresses[k] = v + } + cp.slots = make([]map[common.Hash]struct{}, len(a.slots)) + for i, slotMap := range a.slots { + newSlotmap := make(map[common.Hash]struct{}, len(slotMap)) + for k := range slotMap { + newSlotmap[k] = struct{}{} + } + cp.slots[i] = newSlotmap + } + return cp +} + +// AddAddress adds an address to the access list, and returns 'true' if the operation +// caused a change (addr was not previously in the list). +func (al *accessList) AddAddress(address common.Address) bool { + if _, present := al.addresses[address]; present { + return false + } + al.addresses[address] = -1 + return true +} + +// AddSlot adds the specified (addr, slot) combo to the access list. +// Return values are: +// - address added +// - slot added +// For any 'true' value returned, a corresponding journal entry must be made. +func (al *accessList) AddSlot(address common.Address, slot common.Hash) (addrChange bool, slotChange bool) { + idx, addrPresent := al.addresses[address] + if !addrPresent || idx == -1 { + // Address not present, or addr present but no slots there + al.addresses[address] = len(al.slots) + slotmap := map[common.Hash]struct{}{slot: {}} + al.slots = append(al.slots, slotmap) + return !addrPresent, true + } + // There is already an (address,slot) mapping + slotmap := al.slots[idx] + if _, ok := slotmap[slot]; !ok { + slotmap[slot] = struct{}{} + // Journal add slot change + return false, true + } + // No changes required + return false, false +} + +// DeleteSlot removes an (address, slot)-tuple from the access list. +// This operation needs to be performed in the same order as the addition happened. +// This method is meant to be used by the journal, which maintains ordering of +// operations. +func (al *accessList) DeleteSlot(address common.Address, slot common.Hash) { + idx, addrOk := al.addresses[address] + // There are two ways this can fail + if !addrOk { + panic("reverting slot change, address not present in list") + } + slotmap := al.slots[idx] + delete(slotmap, slot) + // If that was the last (first) slot, remove it + // Since additions and rollbacks are always performed in order, + // we can delete the item without worrying about screwing up later indices + if len(slotmap) == 0 { + al.slots = al.slots[:idx] + al.addresses[address] = -1 + } +} + +// DeleteAddress removes an address from the access list. This operation +// needs to be performed in the same order as the addition happened. +// This method is meant to be used by the journal, which maintains ordering of +// operations. +func (al *accessList) DeleteAddress(address common.Address) { + delete(al.addresses, address) +} diff --git a/core/state/database.go b/core/state/database.go index 2a1f9a2a..96b6bcfe 100644 --- a/core/state/database.go +++ b/core/state/database.go @@ -17,17 +17,24 @@ package state import ( + "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/VictoriaMetrics/fastcache" + "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/trie" lru "github.com/hashicorp/golang-lru" ) const ( // Number of codehash->size associations to keep. codeSizeCacheSize = 100000 + + // Cache size granted for caching clean code. + codeCacheSize = 64 * 1024 * 1024 ) // Database wraps access to tries and contract code. @@ -56,7 +63,7 @@ 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 + // TODO(fjl): remove this when StateTrie is removed GetKey([]byte) []byte // TryGet returns the value for key stored in the trie. The value bytes must @@ -64,23 +71,36 @@ type Trie interface { // trie.MissingNodeError is returned. TryGet(key []byte) ([]byte, error) + // TryGetAccount abstract an account read from the trie. + TryGetAccount(key []byte) (*types.StateAccount, 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 + // TryUpdateAccount abstract an account write to the trie. + TryUpdateAccount(key []byte, account *types.StateAccount) 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 + // TryDeleteAccount abstracts an account deletion from the trie. + TryDeleteAccount(key []byte) 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) + // Commit collects all dirty nodes in the trie and replace them with the + // corresponding node hash. All collected nodes(including dirty leaves if + // collectLeaf is true) will be encapsulated into a nodeset for return. + // The returned nodeset can be nil if the trie is clean(nothing to commit). + // Once the trie is committed, it's not usable anymore. A new trie must + // be created with new root and updated trie database for following usage + Commit(collectLeaf bool) (common.Hash, *trie.NodeSet, error) // NodeIterator returns an iterator that returns nodes of the trie. Iteration // starts at the key after the given start key. @@ -98,41 +118,51 @@ type Trie interface { // NewDatabase creates a backing store for state. The returned database is safe for // concurrent use, but does not retain any recent trie nodes in memory. To keep some -// historical state in memory, use the NewDatabaseWithCache constructor. +// historical state in memory, use the NewDatabaseWithConfig constructor. func NewDatabase(db ethdb.Database) Database { - return NewDatabaseWithCache(db, 0) + return NewDatabaseWithConfig(db, nil) } -// NewDatabaseWithCache creates a backing store for state. The returned database +// NewDatabaseWithConfig 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 { +func NewDatabaseWithConfig(db ethdb.Database, config *trie.Config) Database { csc, _ := lru.New(codeSizeCacheSize) return &cachingDB{ - db: trie.NewDatabaseWithCache(db, cache), + db: trie.NewDatabaseWithConfig(db, config), codeSizeCache: csc, + codeCache: fastcache.New(codeCacheSize), } } type cachingDB struct { db *trie.Database codeSizeCache *lru.Cache + codeCache *fastcache.Cache } // OpenTrie opens the main account trie at a specific root hash. func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { - return trie.NewSecure(root, db.db) + tr, err := trie.NewStateTrie(common.Hash{}, root, db.db) + if err != nil { + return nil, err + } + return tr, nil } // OpenStorageTrie opens the storage trie of an account. func (db *cachingDB) OpenStorageTrie(addrHash, root common.Hash) (Trie, error) { - return trie.NewSecure(root, db.db) + tr, err := trie.NewStateTrie(addrHash, root, db.db) + if err != nil { + return nil, err + } + return tr, nil } // CopyTrie returns an independent copy of the given trie. func (db *cachingDB) CopyTrie(t Trie) Trie { switch t := t.(type) { - case *trie.SecureTrie: + case *trie.StateTrie: return t.Copy() default: panic(fmt.Errorf("unknown trie type %T", t)) @@ -141,11 +171,32 @@ func (db *cachingDB) CopyTrie(t Trie) Trie { // ContractCode retrieves a particular contract's code. func (db *cachingDB) ContractCode(addrHash, codeHash common.Hash) ([]byte, error) { - code, err := db.db.Node(codeHash) - if err == nil { + if code := db.codeCache.Get(nil, codeHash.Bytes()); len(code) > 0 { + return code, nil + } + code := rawdb.ReadCode(db.db.DiskDB(), codeHash) + if len(code) > 0 { + db.codeCache.Set(codeHash.Bytes(), code) + db.codeSizeCache.Add(codeHash, len(code)) + return code, nil + } + return nil, errors.New("not found") +} + +// ContractCodeWithPrefix retrieves a particular contract's code. If the +// code can't be found in the cache, then check the existence with **new** +// db scheme. +func (db *cachingDB) ContractCodeWithPrefix(addrHash, codeHash common.Hash) ([]byte, error) { + if code := db.codeCache.Get(nil, codeHash.Bytes()); len(code) > 0 { + return code, nil + } + code := rawdb.ReadCodeWithPrefix(db.db.DiskDB(), codeHash) + if len(code) > 0 { + db.codeCache.Set(codeHash.Bytes(), code) db.codeSizeCache.Add(codeHash, len(code)) + return code, nil } - return code, err + return nil, errors.New("not found") } // ContractCodeSize retrieves a particular contracts code's size. diff --git a/core/state/dump.go b/core/state/dump.go index c051c53a..bfcc0354 100644 --- a/core/state/dump.go +++ b/core/state/dump.go @@ -19,51 +19,87 @@ package state import ( "encoding/json" "fmt" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "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/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) -// DumpAccount represents an account in the state +// DumpConfig is a set of options to control what portions of the statewill be +// iterated and collected. +type DumpConfig struct { + SkipCode bool + SkipStorage bool + OnlyWithAddresses bool + Start []byte + Max uint64 +} + +// DumpCollector interface which the state trie calls during iteration +type DumpCollector interface { + // OnRoot is called with the state root + OnRoot(common.Hash) + // OnAccount is called once for each account in the trie + OnAccount(common.Address, DumpAccount) +} + +// 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,omitempty"` + Root hexutil.Bytes `json:"root"` + CodeHash hexutil.Bytes `json:"codeHash"` + Code hexutil.Bytes `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 +// Dump represents the full dump in a collected format, as one large map. type Dump struct { 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 +// OnRoot implements DumpCollector interface +func (d *Dump) OnRoot(root common.Hash) { + d.Root = fmt.Sprintf("%x", root) +} + +// OnAccount implements DumpCollector interface +func (d *Dump) OnAccount(addr common.Address, account DumpAccount) { + d.Accounts[addr] = account +} + +// IteratorDump is an implementation for iterating over data. +type IteratorDump struct { + Root string `json:"root"` + Accounts map[common.Address]DumpAccount `json:"accounts"` + Next []byte `json:"next,omitempty"` // nil if no more accounts +} -// Collector interface which the state trie calls during iteration -type collector interface { - onRoot(common.Hash) - onAccount(common.Address, DumpAccount) +// OnRoot implements DumpCollector interface +func (d *IteratorDump) OnRoot(root common.Hash) { + d.Root = fmt.Sprintf("%x", root) } -func (self *Dump) onRoot(root common.Hash) { - self.Root = fmt.Sprintf("%x", root) +// OnAccount implements DumpCollector interface +func (d *IteratorDump) OnAccount(addr common.Address, account DumpAccount) { + d.Accounts[addr] = account } -func (self *Dump) onAccount(addr common.Address, account DumpAccount) { - self.Accounts[addr] = account +// iterativeDump is a DumpCollector-implementation which dumps output line-by-line iteratively. +type iterativeDump struct { + *json.Encoder } -func (self iterativeDump) onAccount(addr common.Address, account DumpAccount) { +// OnAccount implements DumpCollector interface +func (d iterativeDump) OnAccount(addr common.Address, account DumpAccount) { dumpAccount := &DumpAccount{ Balance: account.Balance, Nonce: account.Nonce, @@ -77,82 +113,123 @@ func (self iterativeDump) onAccount(addr common.Address, account DumpAccount) { if addr != (common.Address{}) { dumpAccount.Address = &addr } - (*json.Encoder)(&self).Encode(dumpAccount) + d.Encode(dumpAccount) } -func (self iterativeDump) onRoot(root common.Hash) { - (*json.Encoder)(&self).Encode(struct { + +// OnRoot implements DumpCollector interface +func (d iterativeDump) OnRoot(root common.Hash) { + d.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)) +// DumpToCollector iterates the state according to the given options and inserts +// the items into a collector for aggregation or serialization. +func (s *StateDB) DumpToCollector(c DumpCollector, conf *DumpConfig) (nextKey []byte) { + // Sanitize the input to allow nil configs + if conf == nil { + conf = new(DumpConfig) + } + var ( + missingPreimages int + accounts uint64 + start = time.Now() + logged = time.Now() + ) + log.Info("Trie dumping started", "root", s.trie.Hash()) + c.OnRoot(s.trie.Hash()) + + it := trie.NewIterator(s.trie.NodeIterator(conf.Start)) for it.Next() { - var data Account + var data types.StateAccount if err := rlp.DecodeBytes(it.Value, &data); err != nil { panic(err) } - 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), + Balance: data.Balance.String(), + Nonce: data.Nonce, + Root: data.Root[:], + CodeHash: data.CodeHash, + SecureKey: it.Key, } - if emptyAddress == addr { + addrBytes := s.trie.GetKey(it.Key) + if addrBytes == nil { // Preimage missing missingPreimages++ - if excludeMissingPreimages { + if conf.OnlyWithAddresses { continue } account.SecureKey = it.Key } - if !excludeCode { - account.Code = common.Bytes2Hex(obj.Code(self.db)) + addr := common.BytesToAddress(addrBytes) + obj := newObject(s, addr, data) + if !conf.SkipCode { + account.Code = obj.Code(s.db) } - if !excludeStorage { + if !conf.SkipStorage { account.Storage = make(map[common.Hash]string) - storageIt := trie.NewIterator(obj.getTrie(self.db).NodeIterator(nil)) + storageIt := trie.NewIterator(obj.getTrie(s.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) + account.Storage[common.BytesToHash(s.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(content) + } + } + c.OnAccount(addr, account) + accounts++ + if time.Since(logged) > 8*time.Second { + log.Info("Trie dumping in progress", "at", it.Key, "accounts", accounts, + "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + if conf.Max > 0 && accounts >= conf.Max { + if it.Next() { + nextKey = it.Key } + break } - c.onAccount(addr, account) } if missingPreimages > 0 { log.Warn("Dump incomplete due to missing preimages", "missing", missingPreimages) } + log.Info("Trie dumping complete", "accounts", accounts, + "elapsed", common.PrettyDuration(time.Since(start))) + + return nextKey } // RawDump returns the entire state an a single large object -func (self *StateDB) RawDump(excludeCode, excludeStorage, excludeMissingPreimages bool) Dump { +func (s *StateDB) RawDump(opts *DumpConfig) Dump { dump := &Dump{ Accounts: make(map[common.Address]DumpAccount), } - self.dump(dump, excludeCode, excludeStorage, excludeMissingPreimages) + s.DumpToCollector(dump, opts) return *dump } // 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) +func (s *StateDB) Dump(opts *DumpConfig) []byte { + dump := s.RawDump(opts) json, err := json.MarshalIndent(dump, "", " ") if err != nil { - fmt.Println("dump err", err) + 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) +func (s *StateDB) IterativeDump(opts *DumpConfig, output *json.Encoder) { + s.DumpToCollector(iterativeDump{output}, opts) +} + +// IteratorDump dumps out a batch of accounts starts with the given start key +func (s *StateDB) IteratorDump(opts *DumpConfig) IteratorDump { + iterator := &IteratorDump{ + Accounts: make(map[common.Address]DumpAccount), + } + iterator.Next = s.DumpToCollector(iterator, opts) + return *iterator } diff --git a/core/state/iterator.go b/core/state/iterator.go index 32066e7f..611df524 100644 --- a/core/state/iterator.go +++ b/core/state/iterator.go @@ -20,9 +20,10 @@ import ( "bytes" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) // NodeIterator is an iterator to traverse the entire state trie post-order, @@ -104,7 +105,7 @@ func (it *NodeIterator) step() error { return nil } // Otherwise we've reached an account node, initiate data iteration - var account Account + var account types.StateAccount if err := rlp.Decode(bytes.NewReader(it.stateIt.LeafBlob()), &account); err != nil { return err } diff --git a/core/state/iterator_test.go b/core/state/iterator_test.go index c1f387cc..d1afe9ca 100644 --- a/core/state/iterator_test.go +++ b/core/state/iterator_test.go @@ -20,16 +20,17 @@ import ( "bytes" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" ) // Tests that the node iterator indeed walks over the entire database contents. func TestNodeIteratorCoverage(t *testing.T) { // Create some arbitrary test state to iterate db, root, _ := makeTestState() + db.TrieDB().Commit(root, false, nil) - state, err := New(root, db) + state, err := New(root, db, nil) if err != nil { t.Fatalf("failed to create state trie at %x: %v", root, err) } @@ -42,7 +43,10 @@ func TestNodeIteratorCoverage(t *testing.T) { } // Cross check the iterated hashes and the database/nodepool content for hash := range hashes { - if _, err := db.TrieDB().Node(hash); err != nil { + if _, err = db.TrieDB().Node(hash); err != nil { + _, err = db.ContractCode(common.Hash{}, hash) + } + if err != nil { t.Errorf("failed to retrieve reported node %x", hash) } } @@ -51,7 +55,7 @@ func TestNodeIteratorCoverage(t *testing.T) { t.Errorf("state entry not reported %x", hash) } } - it := db.TrieDB().DiskDB().(ethdb.Database).NewIterator() + it := db.TrieDB().DiskDB().(ethdb.Database).NewIterator(nil, nil) for it.Next() { key := it.Key() if bytes.HasPrefix(key, []byte("secure-key-")) { diff --git a/core/state/journal.go b/core/state/journal.go index a1ecfb88..57a692dc 100644 --- a/core/state/journal.go +++ b/core/state/journal.go @@ -19,7 +19,7 @@ package state import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // journalEntry is a modification entry in the state change journal that can be @@ -33,14 +33,14 @@ type journalEntry interface { } // journal contains the list of state modifications applied since the last state -// commit. These are tracked to be able to be reverted in case of an execution -// exception or revertal request. +// commit. These are tracked to be able to be reverted in the case of an execution +// exception or request for reversal. type journal struct { entries []journalEntry // Current changes tracked by the journal dirties map[common.Address]int // Dirty accounts and the number of changes } -// newJournal create a new initialized journal. +// newJournal creates a new initialized journal. func newJournal() *journal { return &journal{ dirties: make(map[common.Address]int), @@ -90,7 +90,8 @@ type ( account *common.Address } resetObjectChange struct { - prev *stateObject + prev *stateObject + prevdestruct bool } suicideChange struct { account *common.Address @@ -127,9 +128,15 @@ type ( hash common.Hash } touchChange struct { - account *common.Address - prev bool - prevDirty bool + account *common.Address + } + // Changes to the access list + accessListAddAccountChange struct { + address *common.Address + } + accessListAddSlotChange struct { + address *common.Address + slot *common.Hash } ) @@ -144,6 +151,9 @@ func (ch createObjectChange) dirtied() *common.Address { func (ch resetObjectChange) revert(s *StateDB) { s.setStateObject(ch.prev) + if !ch.prevdestruct && s.snap != nil { + delete(s.snapDestructs, ch.prev.addrHash) + } } func (ch resetObjectChange) dirtied() *common.Address { @@ -232,3 +242,28 @@ func (ch addPreimageChange) revert(s *StateDB) { func (ch addPreimageChange) dirtied() *common.Address { return nil } + +func (ch accessListAddAccountChange) revert(s *StateDB) { + /* + One important invariant here, is that whenever a (addr, slot) is added, if the + addr is not already present, the add causes two journal entries: + - one for the address, + - one for the (address,slot) + Therefore, when unrolling the change, we can always blindly delete the + (addr) at this point, since no storage adds can remain when come upon + a single (addr) change. + */ + s.accessList.DeleteAddress(*ch.address) +} + +func (ch accessListAddAccountChange) dirtied() *common.Address { + return nil +} + +func (ch accessListAddSlotChange) revert(s *StateDB) { + s.accessList.DeleteSlot(*ch.address, *ch.slot) +} + +func (ch accessListAddSlotChange) dirtied() *common.Address { + return nil +} diff --git a/core/state/metrics.go b/core/state/metrics.go new file mode 100644 index 00000000..35d2df92 --- /dev/null +++ b/core/state/metrics.go @@ -0,0 +1,28 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 "github.com/ethereum/go-ethereum/metrics" + +var ( + accountUpdatedMeter = metrics.NewRegisteredMeter("state/update/account", nil) + storageUpdatedMeter = metrics.NewRegisteredMeter("state/update/storage", nil) + accountDeletedMeter = metrics.NewRegisteredMeter("state/delete/account", nil) + storageDeletedMeter = metrics.NewRegisteredMeter("state/delete/storage", nil) + accountTrieCommittedMeter = metrics.NewRegisteredMeter("state/commit/accountnodes", nil) + storageTriesCommittedMeter = metrics.NewRegisteredMeter("state/commit/storagenodes", nil) +) diff --git a/core/state/pruner/bloom.go b/core/state/pruner/bloom.go new file mode 100644 index 00000000..72315db7 --- /dev/null +++ b/core/state/pruner/bloom.go @@ -0,0 +1,132 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package pruner + +import ( + "encoding/binary" + "errors" + "os" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/log" + bloomfilter "github.com/holiman/bloomfilter/v2" +) + +// stateBloomHasher 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 or +// contract code hash into a 64 bit mini hash. +type stateBloomHasher []byte + +func (f stateBloomHasher) Write(p []byte) (n int, err error) { panic("not implemented") } +func (f stateBloomHasher) Sum(b []byte) []byte { panic("not implemented") } +func (f stateBloomHasher) Reset() { panic("not implemented") } +func (f stateBloomHasher) BlockSize() int { panic("not implemented") } +func (f stateBloomHasher) Size() int { return 8 } +func (f stateBloomHasher) Sum64() uint64 { return binary.BigEndian.Uint64(f) } + +// stateBloom is a bloom filter used during the state conversion(snapshot->state). +// The keys of all generated entries will be recorded here so that in the pruning +// stage the entries belong to the specific version can be avoided for deletion. +// +// The false-positive is allowed here. The "false-positive" entries means they +// actually don't belong to the specific version but they are not deleted in the +// pruning. The downside of the false-positive allowance is we may leave some "dangling" +// nodes in the disk. But in practice the it's very unlike the dangling node is +// state root. So in theory this pruned state shouldn't be visited anymore. Another +// potential issue is for fast sync. If we do another fast sync upon the pruned +// database, it's problematic which will stop the expansion during the syncing. +// TODO address it @rjl493456442 @holiman @karalabe. +// +// After the entire state is generated, the bloom filter should be persisted into +// the disk. It indicates the whole generation procedure is finished. +type stateBloom struct { + bloom *bloomfilter.Filter +} + +// newStateBloomWithSize creates a brand new state bloom for state generation. +// The bloom filter will be created by the passing bloom filter size. According +// to the https://hur.st/bloomfilter/?n=600000000&p=&m=2048MB&k=4, the parameters +// are picked so that the false-positive rate for mainnet is low enough. +func newStateBloomWithSize(size uint64) (*stateBloom, error) { + bloom, err := bloomfilter.New(size*1024*1024*8, 4) + if err != nil { + return nil, err + } + log.Info("Initialized state bloom", "size", common.StorageSize(float64(bloom.M()/8))) + return &stateBloom{bloom: bloom}, nil +} + +// NewStateBloomFromDisk loads the state bloom from the given file. +// In this case the assumption is held the bloom filter is complete. +func NewStateBloomFromDisk(filename string) (*stateBloom, error) { + bloom, _, err := bloomfilter.ReadFile(filename) + if err != nil { + return nil, err + } + return &stateBloom{bloom: bloom}, nil +} + +// Commit flushes the bloom filter content into the disk and marks the bloom +// as complete. +func (bloom *stateBloom) Commit(filename, tempname string) error { + // Write the bloom out into a temporary file + _, err := bloom.bloom.WriteFile(tempname) + if err != nil { + return err + } + // Ensure the file is synced to disk + f, err := os.OpenFile(tempname, os.O_RDWR, 0666) + if err != nil { + return err + } + if err := f.Sync(); err != nil { + f.Close() + return err + } + f.Close() + + // Move the temporary file into it's final location + return os.Rename(tempname, filename) +} + +// Put implements the KeyValueWriter interface. But here only the key is needed. +func (bloom *stateBloom) Put(key []byte, value []byte) error { + // If the key length is not 32bytes, ensure it's contract code + // entry with new scheme. + if len(key) != common.HashLength { + isCode, codeKey := rawdb.IsCodeKey(key) + if !isCode { + return errors.New("invalid entry") + } + bloom.bloom.Add(stateBloomHasher(codeKey)) + return nil + } + bloom.bloom.Add(stateBloomHasher(key)) + return nil +} + +// Delete removes the key from the key-value data store. +func (bloom *stateBloom) Delete(key []byte) error { panic("not supported") } + +// Contain is the wrapper of the underlying contains function which +// reports whether the key is contained. +// - If it says yes, the key may be contained +// - If it says no, the key is definitely not contained. +func (bloom *stateBloom) Contain(key []byte) (bool, error) { + return bloom.bloom.Contains(stateBloomHasher(key)), nil +} diff --git a/core/state/pruner/pruner.go b/core/state/pruner/pruner.go new file mode 100644 index 00000000..2da2eda8 --- /dev/null +++ b/core/state/pruner/pruner.go @@ -0,0 +1,506 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package pruner + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "math" + "os" + "path/filepath" + "strings" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "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/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +const ( + // stateBloomFilePrefix is the filename prefix of state bloom filter. + stateBloomFilePrefix = "statebloom" + + // stateBloomFilePrefix is the filename suffix of state bloom filter. + stateBloomFileSuffix = "bf.gz" + + // stateBloomFileTempSuffix is the filename suffix of state bloom filter + // while it is being written out to detect write aborts. + stateBloomFileTempSuffix = ".tmp" + + // rangeCompactionThreshold is the minimal deleted entry number for + // triggering range compaction. It's a quite arbitrary number but just + // to avoid triggering range compaction because of small deletion. + rangeCompactionThreshold = 100000 +) + +var ( + // 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.Keccak256(nil) +) + +// Pruner is an offline tool to prune the stale state with the +// help of the snapshot. The workflow of pruner is very simple: +// +// - iterate the snapshot, reconstruct the relevant state +// - iterate the database, delete all other state entries which +// don't belong to the target state and the genesis state +// +// It can take several hours(around 2 hours for mainnet) to finish +// the whole pruning work. It's recommended to run this offline tool +// periodically in order to release the disk usage and improve the +// disk read performance to some extent. +type Pruner struct { + db ethdb.Database + stateBloom *stateBloom + datadir string + trieCachePath string + headHeader *types.Header + snaptree *snapshot.Tree +} + +// NewPruner creates the pruner instance. +func NewPruner(db ethdb.Database, datadir, trieCachePath string, bloomSize uint64) (*Pruner, error) { + headBlock := rawdb.ReadHeadBlock(db) + if headBlock == nil { + return nil, errors.New("Failed to load head block") + } + snaptree, err := snapshot.New(db, trie.NewDatabase(db), 256, headBlock.Root(), false, false, false) + if err != nil { + return nil, err // The relevant snapshot(s) might not exist + } + // Sanitize the bloom filter size if it's too small. + if bloomSize < 256 { + log.Warn("Sanitizing bloomfilter size", "provided(MB)", bloomSize, "updated(MB)", 256) + bloomSize = 256 + } + stateBloom, err := newStateBloomWithSize(bloomSize) + if err != nil { + return nil, err + } + return &Pruner{ + db: db, + stateBloom: stateBloom, + datadir: datadir, + trieCachePath: trieCachePath, + headHeader: headBlock.Header(), + snaptree: snaptree, + }, nil +} + +func prune(snaptree *snapshot.Tree, root common.Hash, maindb ethdb.Database, stateBloom *stateBloom, bloomPath string, middleStateRoots map[common.Hash]struct{}, start time.Time) error { + // Delete all stale trie nodes in the disk. With the help of state bloom + // the trie nodes(and codes) belong to the active state will be filtered + // out. A very small part of stale tries will also be filtered because of + // the false-positive rate of bloom filter. But the assumption is held here + // that the false-positive is low enough(~0.05%). The probablity of the + // dangling node is the state root is super low. So the dangling nodes in + // theory will never ever be visited again. + var ( + count int + size common.StorageSize + pstart = time.Now() + logged = time.Now() + batch = maindb.NewBatch() + iter = maindb.NewIterator(nil, nil) + ) + for iter.Next() { + key := iter.Key() + + // All state entries don't belong to specific state and genesis are deleted here + // - trie node + // - legacy contract code + // - new-scheme contract code + isCode, codeKey := rawdb.IsCodeKey(key) + if len(key) == common.HashLength || isCode { + checkKey := key + if isCode { + checkKey = codeKey + } + if _, exist := middleStateRoots[common.BytesToHash(checkKey)]; exist { + log.Debug("Forcibly delete the middle state roots", "hash", common.BytesToHash(checkKey)) + } else { + if ok, err := stateBloom.Contain(checkKey); err != nil { + return err + } else if ok { + continue + } + } + count += 1 + size += common.StorageSize(len(key) + len(iter.Value())) + batch.Delete(key) + + var eta time.Duration // Realistically will never remain uninited + if done := binary.BigEndian.Uint64(key[:8]); done > 0 { + var ( + left = math.MaxUint64 - binary.BigEndian.Uint64(key[:8]) + speed = done/uint64(time.Since(pstart)/time.Millisecond+1) + 1 // +1s to avoid division by zero + ) + eta = time.Duration(left/speed) * time.Millisecond + } + if time.Since(logged) > 8*time.Second { + log.Info("Pruning state data", "nodes", count, "size", size, + "elapsed", common.PrettyDuration(time.Since(pstart)), "eta", common.PrettyDuration(eta)) + logged = time.Now() + } + // Recreate the iterator after every batch commit in order + // to allow the underlying compactor to delete the entries. + if batch.ValueSize() >= ethdb.IdealBatchSize { + batch.Write() + batch.Reset() + + iter.Release() + iter = maindb.NewIterator(nil, key) + } + } + } + if batch.ValueSize() > 0 { + batch.Write() + batch.Reset() + } + iter.Release() + log.Info("Pruned state data", "nodes", count, "size", size, "elapsed", common.PrettyDuration(time.Since(pstart))) + + // Pruning is done, now drop the "useless" layers from the snapshot. + // Firstly, flushing the target layer into the disk. After that all + // diff layers below the target will all be merged into the disk. + if err := snaptree.Cap(root, 0); err != nil { + return err + } + // Secondly, flushing the snapshot journal into the disk. All diff + // layers upon are dropped silently. Eventually the entire snapshot + // tree is converted into a single disk layer with the pruning target + // as the root. + if _, err := snaptree.Journal(root); err != nil { + return err + } + // Delete the state bloom, it marks the entire pruning procedure is + // finished. If any crashes or manual exit happens before this, + // `RecoverPruning` will pick it up in the next restarts to redo all + // the things. + os.RemoveAll(bloomPath) + + // Start compactions, will remove the deleted data from the disk immediately. + // Note for small pruning, the compaction is skipped. + if count >= rangeCompactionThreshold { + cstart := time.Now() + for b := 0x00; b <= 0xf0; b += 0x10 { + var ( + start = []byte{byte(b)} + end = []byte{byte(b + 0x10)} + ) + if b == 0xf0 { + end = nil + } + log.Info("Compacting database", "range", fmt.Sprintf("%#x-%#x", start, end), "elapsed", common.PrettyDuration(time.Since(cstart))) + if err := maindb.Compact(start, end); err != nil { + log.Error("Database compaction failed", "error", err) + return err + } + } + log.Info("Database compaction finished", "elapsed", common.PrettyDuration(time.Since(cstart))) + } + log.Info("State pruning successful", "pruned", size, "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} + +// Prune deletes all historical state nodes except the nodes belong to the +// specified state version. If user doesn't specify the state version, use +// the bottom-most snapshot diff layer as the target. +func (p *Pruner) Prune(root common.Hash) error { + // If the state bloom filter is already committed previously, + // reuse it for pruning instead of generating a new one. It's + // mandatory because a part of state may already be deleted, + // the recovery procedure is necessary. + _, stateBloomRoot, err := findBloomFilter(p.datadir) + if err != nil { + return err + } + if stateBloomRoot != (common.Hash{}) { + return RecoverPruning(p.datadir, p.db, p.trieCachePath) + } + // If the target state root is not specified, use the HEAD-127 as the + // target. The reason for picking it is: + // - in most of the normal cases, the related state is available + // - the probability of this layer being reorg is very low + var layers []snapshot.Snapshot + if root == (common.Hash{}) { + // Retrieve all snapshot layers from the current HEAD. + // In theory there are 128 difflayers + 1 disk layer present, + // so 128 diff layers are expected to be returned. + layers = p.snaptree.Snapshots(p.headHeader.Root, 128, true) + if len(layers) != 128 { + // Reject if the accumulated diff layers are less than 128. It + // means in most of normal cases, there is no associated state + // with bottom-most diff layer. + return fmt.Errorf("snapshot not old enough yet: need %d more blocks", 128-len(layers)) + } + // Use the bottom-most diff layer as the target + root = layers[len(layers)-1].Root() + } + // Ensure the root is really present. The weak assumption + // is the presence of root can indicate the presence of the + // entire trie. + if !rawdb.HasTrieNode(p.db, root) { + // The special case is for clique based networks(rinkeby, goerli + // and some other private networks), it's possible that two + // consecutive blocks will have same root. In this case snapshot + // difflayer won't be created. So HEAD-127 may not paired with + // head-127 layer. Instead the paired layer is higher than the + // bottom-most diff layer. Try to find the bottom-most snapshot + // layer with state available. + // + // Note HEAD and HEAD-1 is ignored. Usually there is the associated + // state available, but we don't want to use the topmost state + // as the pruning target. + var found bool + for i := len(layers) - 2; i >= 2; i-- { + if rawdb.HasTrieNode(p.db, layers[i].Root()) { + root = layers[i].Root() + found = true + log.Info("Selecting middle-layer as the pruning target", "root", root, "depth", i) + break + } + } + if !found { + if len(layers) > 0 { + return errors.New("no snapshot paired state") + } + return fmt.Errorf("associated state[%x] is not present", root) + } + } else { + if len(layers) > 0 { + log.Info("Selecting bottom-most difflayer as the pruning target", "root", root, "height", p.headHeader.Number.Uint64()-127) + } else { + log.Info("Selecting user-specified state as the pruning target", "root", root) + } + } + // Before start the pruning, delete the clean trie cache first. + // It's necessary otherwise in the next restart we will hit the + // deleted state root in the "clean cache" so that the incomplete + // state is picked for usage. + deleteCleanTrieCache(p.trieCachePath) + + // All the state roots of the middle layer should be forcibly pruned, + // otherwise the dangling state will be left. + middleRoots := make(map[common.Hash]struct{}) + for _, layer := range layers { + if layer.Root() == root { + break + } + middleRoots[layer.Root()] = struct{}{} + } + // Traverse the target state, re-construct the whole state trie and + // commit to the given bloom filter. + start := time.Now() + if err := snapshot.GenerateTrie(p.snaptree, root, p.db, p.stateBloom); err != nil { + return err + } + // Traverse the genesis, put all genesis state entries into the + // bloom filter too. + if err := extractGenesis(p.db, p.stateBloom); err != nil { + return err + } + filterName := bloomFilterName(p.datadir, root) + + log.Info("Writing state bloom to disk", "name", filterName) + if err := p.stateBloom.Commit(filterName, filterName+stateBloomFileTempSuffix); err != nil { + return err + } + log.Info("State bloom filter committed", "name", filterName) + return prune(p.snaptree, root, p.db, p.stateBloom, filterName, middleRoots, start) +} + +// RecoverPruning will resume the pruning procedure during the system restart. +// This function is used in this case: user tries to prune state data, but the +// system was interrupted midway because of crash or manual-kill. In this case +// if the bloom filter for filtering active state is already constructed, the +// pruning can be resumed. What's more if the bloom filter is constructed, the +// pruning **has to be resumed**. Otherwise a lot of dangling nodes may be left +// in the disk. +func RecoverPruning(datadir string, db ethdb.Database, trieCachePath string) error { + stateBloomPath, stateBloomRoot, err := findBloomFilter(datadir) + if err != nil { + return err + } + if stateBloomPath == "" { + return nil // nothing to recover + } + headBlock := rawdb.ReadHeadBlock(db) + if headBlock == nil { + return errors.New("Failed to load head block") + } + // Initialize the snapshot tree in recovery mode to handle this special case: + // - Users run the `prune-state` command multiple times + // - Neither these `prune-state` running is finished(e.g. interrupted manually) + // - The state bloom filter is already generated, a part of state is deleted, + // so that resuming the pruning here is mandatory + // - The state HEAD is rewound already because of multiple incomplete `prune-state` + // In this case, even the state HEAD is not exactly matched with snapshot, it + // still feasible to recover the pruning correctly. + snaptree, err := snapshot.New(db, trie.NewDatabase(db), 256, headBlock.Root(), false, false, true) + if err != nil { + return err // The relevant snapshot(s) might not exist + } + stateBloom, err := NewStateBloomFromDisk(stateBloomPath) + if err != nil { + return err + } + log.Info("Loaded state bloom filter", "path", stateBloomPath) + + // Before start the pruning, delete the clean trie cache first. + // It's necessary otherwise in the next restart we will hit the + // deleted state root in the "clean cache" so that the incomplete + // state is picked for usage. + deleteCleanTrieCache(trieCachePath) + + // All the state roots of the middle layers should be forcibly pruned, + // otherwise the dangling state will be left. + var ( + found bool + layers = snaptree.Snapshots(headBlock.Root(), 128, true) + middleRoots = make(map[common.Hash]struct{}) + ) + for _, layer := range layers { + if layer.Root() == stateBloomRoot { + found = true + break + } + middleRoots[layer.Root()] = struct{}{} + } + if !found { + log.Error("Pruning target state is not existent") + return errors.New("non-existent target state") + } + return prune(snaptree, stateBloomRoot, db, stateBloom, stateBloomPath, middleRoots, time.Now()) +} + +// extractGenesis loads the genesis state and commits all the state entries +// into the given bloomfilter. +func extractGenesis(db ethdb.Database, stateBloom *stateBloom) error { + genesisHash := rawdb.ReadCanonicalHash(db, 0) + if genesisHash == (common.Hash{}) { + return errors.New("missing genesis hash") + } + genesis := rawdb.ReadBlock(db, genesisHash, 0) + if genesis == nil { + return errors.New("missing genesis block") + } + t, err := trie.NewStateTrie(common.Hash{}, genesis.Root(), trie.NewDatabase(db)) + if err != nil { + return err + } + accIter := t.NodeIterator(nil) + for accIter.Next(true) { + hash := accIter.Hash() + + // Embedded nodes don't have hash. + if hash != (common.Hash{}) { + stateBloom.Put(hash.Bytes(), nil) + } + // If it's a leaf node, yes we are touching an account, + // dig into the storage trie further. + if accIter.Leaf() { + var acc types.StateAccount + if err := rlp.DecodeBytes(accIter.LeafBlob(), &acc); err != nil { + return err + } + if acc.Root != emptyRoot { + storageTrie, err := trie.NewStateTrie(common.BytesToHash(accIter.LeafKey()), acc.Root, trie.NewDatabase(db)) + if err != nil { + return err + } + storageIter := storageTrie.NodeIterator(nil) + for storageIter.Next(true) { + hash := storageIter.Hash() + if hash != (common.Hash{}) { + stateBloom.Put(hash.Bytes(), nil) + } + } + if storageIter.Error() != nil { + return storageIter.Error() + } + } + if !bytes.Equal(acc.CodeHash, emptyCode) { + stateBloom.Put(acc.CodeHash, nil) + } + } + } + return accIter.Error() +} + +func bloomFilterName(datadir string, hash common.Hash) string { + return filepath.Join(datadir, fmt.Sprintf("%s.%s.%s", stateBloomFilePrefix, hash.Hex(), stateBloomFileSuffix)) +} + +func isBloomFilter(filename string) (bool, common.Hash) { + filename = filepath.Base(filename) + if strings.HasPrefix(filename, stateBloomFilePrefix) && strings.HasSuffix(filename, stateBloomFileSuffix) { + return true, common.HexToHash(filename[len(stateBloomFilePrefix)+1 : len(filename)-len(stateBloomFileSuffix)-1]) + } + return false, common.Hash{} +} + +func findBloomFilter(datadir string) (string, common.Hash, error) { + var ( + stateBloomPath string + stateBloomRoot common.Hash + ) + if err := filepath.Walk(datadir, func(path string, info os.FileInfo, err error) error { + if info != nil && !info.IsDir() { + ok, root := isBloomFilter(path) + if ok { + stateBloomPath = path + stateBloomRoot = root + } + } + return nil + }); err != nil { + return "", common.Hash{}, err + } + return stateBloomPath, stateBloomRoot, nil +} + +const warningLog = ` + +WARNING! + +The clean trie cache is not found. Please delete it by yourself after the +pruning. Remember don't start the Geth without deleting the clean trie cache +otherwise the entire database may be damaged! + +Check the command description "geth snapshot prune-state --help" for more details. +` + +func deleteCleanTrieCache(path string) { + if !common.FileExist(path) { + log.Warn(warningLog) + return + } + os.RemoveAll(path) + log.Info("Deleted trie clean cache", "path", path) +} diff --git a/core/state/snapshot/account.go b/core/state/snapshot/account.go new file mode 100644 index 00000000..b92e9429 --- /dev/null +++ b/core/state/snapshot/account.go @@ -0,0 +1,86 @@ +// 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 snapshot + +import ( + "bytes" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" +) + +// Account is a modified version of a state.Account, where the root is replaced +// with a byte slice. This format can be used to represent full-consensus format +// or slim-snapshot format which replaces the empty root and code hash as nil +// byte slice. +type Account struct { + Nonce uint64 + Balance *big.Int + Root []byte + CodeHash []byte +} + +// SlimAccount converts a state.Account content into a slim snapshot account +func SlimAccount(nonce uint64, balance *big.Int, root common.Hash, codehash []byte) Account { + slim := Account{ + Nonce: nonce, + Balance: balance, + } + if root != emptyRoot { + slim.Root = root[:] + } + if !bytes.Equal(codehash, emptyCode[:]) { + slim.CodeHash = codehash + } + return slim +} + +// SlimAccountRLP converts a state.Account content into a slim snapshot +// version RLP encoded. +func SlimAccountRLP(nonce uint64, balance *big.Int, root common.Hash, codehash []byte) []byte { + data, err := rlp.EncodeToBytes(SlimAccount(nonce, balance, root, codehash)) + if err != nil { + panic(err) + } + return data +} + +// FullAccount decodes the data on the 'slim RLP' format and return +// the consensus format account. +func FullAccount(data []byte) (Account, error) { + var account Account + if err := rlp.DecodeBytes(data, &account); err != nil { + return Account{}, err + } + if len(account.Root) == 0 { + account.Root = emptyRoot[:] + } + if len(account.CodeHash) == 0 { + account.CodeHash = emptyCode[:] + } + return account, nil +} + +// FullAccountRLP converts data on the 'slim RLP' format into the full RLP-format. +func FullAccountRLP(data []byte) ([]byte, error) { + account, err := FullAccount(data) + if err != nil { + return nil, err + } + return rlp.EncodeToBytes(account) +} diff --git a/core/state/snapshot/context.go b/core/state/snapshot/context.go new file mode 100644 index 00000000..67d7e41a --- /dev/null +++ b/core/state/snapshot/context.go @@ -0,0 +1,241 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import ( + "bytes" + "encoding/binary" + "errors" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/log" +) + +const ( + snapAccount = "account" // Identifier of account snapshot generation + snapStorage = "storage" // Identifier of storage snapshot generation +) + +// generatorStats is a collection of statistics gathered by the snapshot generator +// for logging purposes. +type generatorStats struct { + origin uint64 // Origin prefix where generation started + start time.Time // Timestamp when generation started + accounts uint64 // Number of accounts indexed(generated or recovered) + slots uint64 // Number of storage slots indexed(generated or recovered) + dangling uint64 // Number of dangling storage slots + storage common.StorageSize // Total account and storage slot size(generation or recovery) +} + +// Log creates an contextual log with the given message and the context pulled +// from the internally maintained statistics. +func (gs *generatorStats) Log(msg string, root common.Hash, marker []byte) { + var ctx []interface{} + if root != (common.Hash{}) { + ctx = append(ctx, []interface{}{"root", root}...) + } + // Figure out whether we're after or within an account + switch len(marker) { + case common.HashLength: + ctx = append(ctx, []interface{}{"at", common.BytesToHash(marker)}...) + case 2 * common.HashLength: + ctx = append(ctx, []interface{}{ + "in", common.BytesToHash(marker[:common.HashLength]), + "at", common.BytesToHash(marker[common.HashLength:]), + }...) + } + // Add the usual measurements + ctx = append(ctx, []interface{}{ + "accounts", gs.accounts, + "slots", gs.slots, + "storage", gs.storage, + "dangling", gs.dangling, + "elapsed", common.PrettyDuration(time.Since(gs.start)), + }...) + // Calculate the estimated indexing time based on current stats + if len(marker) > 0 { + if done := binary.BigEndian.Uint64(marker[:8]) - gs.origin; done > 0 { + left := math.MaxUint64 - binary.BigEndian.Uint64(marker[:8]) + + speed := done/uint64(time.Since(gs.start)/time.Millisecond+1) + 1 // +1s to avoid division by zero + ctx = append(ctx, []interface{}{ + "eta", common.PrettyDuration(time.Duration(left/speed) * time.Millisecond), + }...) + } + } + log.Info(msg, ctx...) +} + +// generatorContext carries a few global values to be shared by all generation functions. +type generatorContext struct { + stats *generatorStats // Generation statistic collection + db ethdb.KeyValueStore // Key-value store containing the snapshot data + account *holdableIterator // Iterator of account snapshot data + storage *holdableIterator // Iterator of storage snapshot data + batch ethdb.Batch // Database batch for writing batch data atomically + logged time.Time // The timestamp when last generation progress was displayed +} + +// newGeneratorContext initializes the context for generation. +func newGeneratorContext(stats *generatorStats, db ethdb.KeyValueStore, accMarker []byte, storageMarker []byte) *generatorContext { + ctx := &generatorContext{ + stats: stats, + db: db, + batch: db.NewBatch(), + logged: time.Now(), + } + ctx.openIterator(snapAccount, accMarker) + ctx.openIterator(snapStorage, storageMarker) + return ctx +} + +// openIterator constructs global account and storage snapshot iterators +// at the interrupted position. These iterators should be reopened from time +// to time to avoid blocking leveldb compaction for a long time. +func (ctx *generatorContext) openIterator(kind string, start []byte) { + if kind == snapAccount { + iter := ctx.db.NewIterator(rawdb.SnapshotAccountPrefix, start) + ctx.account = newHoldableIterator(rawdb.NewKeyLengthIterator(iter, 1+common.HashLength)) + return + } + iter := ctx.db.NewIterator(rawdb.SnapshotStoragePrefix, start) + ctx.storage = newHoldableIterator(rawdb.NewKeyLengthIterator(iter, 1+2*common.HashLength)) +} + +// reopenIterator releases the specified snapshot iterator and re-open it +// in the next position. It's aimed for not blocking leveldb compaction. +func (ctx *generatorContext) reopenIterator(kind string) { + // Shift iterator one more step, so that we can reopen + // the iterator at the right position. + var iter = ctx.account + if kind == snapStorage { + iter = ctx.storage + } + hasNext := iter.Next() + if !hasNext { + // Iterator exhausted, release forever and create an already exhausted virtual iterator + iter.Release() + if kind == snapAccount { + ctx.account = newHoldableIterator(memorydb.New().NewIterator(nil, nil)) + return + } + ctx.storage = newHoldableIterator(memorydb.New().NewIterator(nil, nil)) + return + } + next := iter.Key() + iter.Release() + ctx.openIterator(kind, next[1:]) +} + +// close releases all the held resources. +func (ctx *generatorContext) close() { + ctx.account.Release() + ctx.storage.Release() +} + +// iterator returns the corresponding iterator specified by the kind. +func (ctx *generatorContext) iterator(kind string) *holdableIterator { + if kind == snapAccount { + return ctx.account + } + return ctx.storage +} + +// removeStorageBefore deletes all storage entries which are located before +// the specified account. When the iterator touches the storage entry which +// is located in or outside the given account, it stops and holds the current +// iterated element locally. +func (ctx *generatorContext) removeStorageBefore(account common.Hash) { + var ( + count uint64 + start = time.Now() + iter = ctx.storage + ) + for iter.Next() { + key := iter.Key() + if bytes.Compare(key[1:1+common.HashLength], account.Bytes()) >= 0 { + iter.Hold() + break + } + count++ + ctx.batch.Delete(key) + if ctx.batch.ValueSize() > ethdb.IdealBatchSize { + ctx.batch.Write() + ctx.batch.Reset() + } + } + ctx.stats.dangling += count + snapStorageCleanCounter.Inc(time.Since(start).Nanoseconds()) +} + +// removeStorageAt deletes all storage entries which are located in the specified +// account. When the iterator touches the storage entry which is outside the given +// account, it stops and holds the current iterated element locally. An error will +// be returned if the initial position of iterator is not in the given account. +func (ctx *generatorContext) removeStorageAt(account common.Hash) error { + var ( + count int64 + start = time.Now() + iter = ctx.storage + ) + for iter.Next() { + key := iter.Key() + cmp := bytes.Compare(key[1:1+common.HashLength], account.Bytes()) + if cmp < 0 { + return errors.New("invalid iterator position") + } + if cmp > 0 { + iter.Hold() + break + } + count++ + ctx.batch.Delete(key) + if ctx.batch.ValueSize() > ethdb.IdealBatchSize { + ctx.batch.Write() + ctx.batch.Reset() + } + } + snapWipedStorageMeter.Mark(count) + snapStorageCleanCounter.Inc(time.Since(start).Nanoseconds()) + return nil +} + +// removeStorageLeft deletes all storage entries which are located after +// the current iterator position. +func (ctx *generatorContext) removeStorageLeft() { + var ( + count uint64 + start = time.Now() + iter = ctx.storage + ) + for iter.Next() { + count++ + ctx.batch.Delete(iter.Key()) + if ctx.batch.ValueSize() > ethdb.IdealBatchSize { + ctx.batch.Write() + ctx.batch.Reset() + } + } + ctx.stats.dangling += count + snapDanglingStorageMeter.Mark(int64(count)) + snapStorageCleanCounter.Inc(time.Since(start).Nanoseconds()) +} diff --git a/core/state/snapshot/conversion.go b/core/state/snapshot/conversion.go new file mode 100644 index 00000000..0f3934cb --- /dev/null +++ b/core/state/snapshot/conversion.go @@ -0,0 +1,375 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "math" + "runtime" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +// trieKV represents a trie key-value pair +type trieKV struct { + key common.Hash + value []byte +} + +type ( + // trieGeneratorFn is the interface of trie generation which can + // be implemented by different trie algorithm. + trieGeneratorFn func(db ethdb.KeyValueWriter, owner common.Hash, in chan (trieKV), out chan (common.Hash)) + + // leafCallbackFn is the callback invoked at the leaves of the trie, + // returns the subtrie root with the specified subtrie identifier. + leafCallbackFn func(db ethdb.KeyValueWriter, accountHash, codeHash common.Hash, stat *generateStats) (common.Hash, error) +) + +// GenerateAccountTrieRoot takes an account iterator and reproduces the root hash. +func GenerateAccountTrieRoot(it AccountIterator) (common.Hash, error) { + return generateTrieRoot(nil, it, common.Hash{}, stackTrieGenerate, nil, newGenerateStats(), true) +} + +// GenerateStorageTrieRoot takes a storage iterator and reproduces the root hash. +func GenerateStorageTrieRoot(account common.Hash, it StorageIterator) (common.Hash, error) { + return generateTrieRoot(nil, it, account, stackTrieGenerate, nil, newGenerateStats(), true) +} + +// GenerateTrie takes the whole snapshot tree as the input, traverses all the +// accounts as well as the corresponding storages and regenerate the whole state +// (account trie + all storage tries). +func GenerateTrie(snaptree *Tree, root common.Hash, src ethdb.Database, dst ethdb.KeyValueWriter) error { + // Traverse all state by snapshot, re-generate the whole state trie + acctIt, err := snaptree.AccountIterator(root, common.Hash{}) + if err != nil { + return err // The required snapshot might not exist. + } + defer acctIt.Release() + + got, err := generateTrieRoot(dst, acctIt, common.Hash{}, stackTrieGenerate, func(dst ethdb.KeyValueWriter, accountHash, codeHash common.Hash, stat *generateStats) (common.Hash, error) { + // Migrate the code first, commit the contract code into the tmp db. + if codeHash != emptyCode { + code := rawdb.ReadCode(src, codeHash) + if len(code) == 0 { + return common.Hash{}, errors.New("failed to read contract code") + } + rawdb.WriteCode(dst, codeHash, code) + } + // Then migrate all storage trie nodes into the tmp db. + storageIt, err := snaptree.StorageIterator(root, accountHash, common.Hash{}) + if err != nil { + return common.Hash{}, err + } + defer storageIt.Release() + + hash, err := generateTrieRoot(dst, storageIt, accountHash, stackTrieGenerate, nil, stat, false) + if err != nil { + return common.Hash{}, err + } + return hash, nil + }, newGenerateStats(), true) + + if err != nil { + return err + } + if got != root { + return fmt.Errorf("state root hash mismatch: got %x, want %x", got, root) + } + return nil +} + +// generateStats is a collection of statistics gathered by the trie generator +// for logging purposes. +type generateStats struct { + head common.Hash + start time.Time + + accounts uint64 // Number of accounts done (including those being crawled) + slots uint64 // Number of storage slots done (including those being crawled) + + slotsStart map[common.Hash]time.Time // Start time for account slot crawling + slotsHead map[common.Hash]common.Hash // Slot head for accounts being crawled + + lock sync.RWMutex +} + +// newGenerateStats creates a new generator stats. +func newGenerateStats() *generateStats { + return &generateStats{ + slotsStart: make(map[common.Hash]time.Time), + slotsHead: make(map[common.Hash]common.Hash), + start: time.Now(), + } +} + +// progressAccounts updates the generator stats for the account range. +func (stat *generateStats) progressAccounts(account common.Hash, done uint64) { + stat.lock.Lock() + defer stat.lock.Unlock() + + stat.accounts += done + stat.head = account +} + +// finishAccounts updates the gemerator stats for the finished account range. +func (stat *generateStats) finishAccounts(done uint64) { + stat.lock.Lock() + defer stat.lock.Unlock() + + stat.accounts += done +} + +// progressContract updates the generator stats for a specific in-progress contract. +func (stat *generateStats) progressContract(account common.Hash, slot common.Hash, done uint64) { + stat.lock.Lock() + defer stat.lock.Unlock() + + stat.slots += done + stat.slotsHead[account] = slot + if _, ok := stat.slotsStart[account]; !ok { + stat.slotsStart[account] = time.Now() + } +} + +// finishContract updates the generator stats for a specific just-finished contract. +func (stat *generateStats) finishContract(account common.Hash, done uint64) { + stat.lock.Lock() + defer stat.lock.Unlock() + + stat.slots += done + delete(stat.slotsHead, account) + delete(stat.slotsStart, account) +} + +// report prints the cumulative progress statistic smartly. +func (stat *generateStats) report() { + stat.lock.RLock() + defer stat.lock.RUnlock() + + ctx := []interface{}{ + "accounts", stat.accounts, + "slots", stat.slots, + "elapsed", common.PrettyDuration(time.Since(stat.start)), + } + if stat.accounts > 0 { + // If there's progress on the account trie, estimate the time to finish crawling it + if done := binary.BigEndian.Uint64(stat.head[:8]) / stat.accounts; done > 0 { + var ( + left = (math.MaxUint64 - binary.BigEndian.Uint64(stat.head[:8])) / stat.accounts + speed = done/uint64(time.Since(stat.start)/time.Millisecond+1) + 1 // +1s to avoid division by zero + eta = time.Duration(left/speed) * time.Millisecond + ) + // If there are large contract crawls in progress, estimate their finish time + for acc, head := range stat.slotsHead { + start := stat.slotsStart[acc] + if done := binary.BigEndian.Uint64(head[:8]); done > 0 { + var ( + left = math.MaxUint64 - binary.BigEndian.Uint64(head[:8]) + speed = done/uint64(time.Since(start)/time.Millisecond+1) + 1 // +1s to avoid division by zero + ) + // Override the ETA if larger than the largest until now + if slotETA := time.Duration(left/speed) * time.Millisecond; eta < slotETA { + eta = slotETA + } + } + } + ctx = append(ctx, []interface{}{ + "eta", common.PrettyDuration(eta), + }...) + } + } + log.Info("Iterating state snapshot", ctx...) +} + +// reportDone prints the last log when the whole generation is finished. +func (stat *generateStats) reportDone() { + stat.lock.RLock() + defer stat.lock.RUnlock() + + var ctx []interface{} + ctx = append(ctx, []interface{}{"accounts", stat.accounts}...) + if stat.slots != 0 { + ctx = append(ctx, []interface{}{"slots", stat.slots}...) + } + ctx = append(ctx, []interface{}{"elapsed", common.PrettyDuration(time.Since(stat.start))}...) + log.Info("Iterated snapshot", ctx...) +} + +// runReport periodically prints the progress information. +func runReport(stats *generateStats, stop chan bool) { + timer := time.NewTimer(0) + defer timer.Stop() + + for { + select { + case <-timer.C: + stats.report() + timer.Reset(time.Second * 8) + case success := <-stop: + if success { + stats.reportDone() + } + return + } + } +} + +// generateTrieRoot generates the trie hash based on the snapshot iterator. +// It can be used for generating account trie, storage trie or even the +// whole state which connects the accounts and the corresponding storages. +func generateTrieRoot(db ethdb.KeyValueWriter, it Iterator, account common.Hash, generatorFn trieGeneratorFn, leafCallback leafCallbackFn, stats *generateStats, report bool) (common.Hash, error) { + var ( + in = make(chan trieKV) // chan to pass leaves + out = make(chan common.Hash, 1) // chan to collect result + stoplog = make(chan bool, 1) // 1-size buffer, works when logging is not enabled + wg sync.WaitGroup + ) + // Spin up a go-routine for trie hash re-generation + wg.Add(1) + go func() { + defer wg.Done() + generatorFn(db, account, in, out) + }() + // Spin up a go-routine for progress logging + if report && stats != nil { + wg.Add(1) + go func() { + defer wg.Done() + runReport(stats, stoplog) + }() + } + // Create a semaphore to assign tasks and collect results through. We'll pre- + // fill it with nils, thus using the same channel for both limiting concurrent + // processing and gathering results. + threads := runtime.NumCPU() + results := make(chan error, threads) + for i := 0; i < threads; i++ { + results <- nil // fill the semaphore + } + // stop is a helper function to shutdown the background threads + // and return the re-generated trie hash. + stop := func(fail error) (common.Hash, error) { + close(in) + result := <-out + for i := 0; i < threads; i++ { + if err := <-results; err != nil && fail == nil { + fail = err + } + } + stoplog <- fail == nil + + wg.Wait() + return result, fail + } + var ( + logged = time.Now() + processed = uint64(0) + leaf trieKV + ) + // Start to feed leaves + for it.Next() { + if account == (common.Hash{}) { + var ( + err error + fullData []byte + ) + if leafCallback == nil { + fullData, err = FullAccountRLP(it.(AccountIterator).Account()) + if err != nil { + return stop(err) + } + } else { + // Wait until the semaphore allows us to continue, aborting if + // a sub-task failed + if err := <-results; err != nil { + results <- nil // stop will drain the results, add a noop back for this error we just consumed + return stop(err) + } + // Fetch the next account and process it concurrently + account, err := FullAccount(it.(AccountIterator).Account()) + if err != nil { + return stop(err) + } + go func(hash common.Hash) { + subroot, err := leafCallback(db, hash, common.BytesToHash(account.CodeHash), stats) + if err != nil { + results <- err + return + } + if !bytes.Equal(account.Root, subroot.Bytes()) { + results <- fmt.Errorf("invalid subroot(path %x), want %x, have %x", hash, account.Root, subroot) + return + } + results <- nil + }(it.Hash()) + fullData, err = rlp.EncodeToBytes(account) + if err != nil { + return stop(err) + } + } + leaf = trieKV{it.Hash(), fullData} + } else { + leaf = trieKV{it.Hash(), common.CopyBytes(it.(StorageIterator).Slot())} + } + in <- leaf + + // Accumulate the generation statistic if it's required. + processed++ + if time.Since(logged) > 3*time.Second && stats != nil { + if account == (common.Hash{}) { + stats.progressAccounts(it.Hash(), processed) + } else { + stats.progressContract(account, it.Hash(), processed) + } + logged, processed = time.Now(), 0 + } + } + // Commit the last part statistic. + if processed > 0 && stats != nil { + if account == (common.Hash{}) { + stats.finishAccounts(processed) + } else { + stats.finishContract(account, processed) + } + } + return stop(nil) +} + +func stackTrieGenerate(db ethdb.KeyValueWriter, owner common.Hash, in chan trieKV, out chan common.Hash) { + t := trie.NewStackTrieWithOwner(db, owner) + for leaf := range in { + t.TryUpdate(leaf.key[:], leaf.value) + } + var root common.Hash + if db == nil { + root = t.Hash() + } else { + root, _ = t.Commit() + } + out <- root +} diff --git a/core/state/snapshot/difflayer.go b/core/state/snapshot/difflayer.go new file mode 100644 index 00000000..f916a020 --- /dev/null +++ b/core/state/snapshot/difflayer.go @@ -0,0 +1,559 @@ +// 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 snapshot + +import ( + "encoding/binary" + "fmt" + "math" + "math/rand" + "sort" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" + bloomfilter "github.com/holiman/bloomfilter/v2" +) + +var ( + // aggregatorMemoryLimit is the maximum size of the bottom-most diff layer + // that aggregates the writes from above until it's flushed into the disk + // layer. + // + // Note, bumping this up might drastically increase the size of the bloom + // filters that's stored in every diff layer. Don't do that without fully + // understanding all the implications. + aggregatorMemoryLimit = uint64(4 * 1024 * 1024) + + // aggregatorItemLimit is an approximate number of items that will end up + // in the agregator layer before it's flushed out to disk. A plain account + // weighs around 14B (+hash), a storage slot 32B (+hash), a deleted slot + // 0B (+hash). Slots are mostly set/unset in lockstep, so that average at + // 16B (+hash). All in all, the average entry seems to be 15+32=47B. Use a + // smaller number to be on the safe side. + aggregatorItemLimit = aggregatorMemoryLimit / 42 + + // bloomTargetError is the target false positive rate when the aggregator + // layer is at its fullest. The actual value will probably move around up + // and down from this number, it's mostly a ballpark figure. + // + // Note, dropping this down might drastically increase the size of the bloom + // filters that's stored in every diff layer. Don't do that without fully + // understanding all the implications. + bloomTargetError = 0.02 + + // bloomSize is the ideal bloom filter size given the maximum number of items + // it's expected to hold and the target false positive error rate. + bloomSize = math.Ceil(float64(aggregatorItemLimit) * math.Log(bloomTargetError) / math.Log(1/math.Pow(2, math.Log(2)))) + + // bloomFuncs is the ideal number of bits a single entry should set in the + // bloom filter to keep its size to a minimum (given it's size and maximum + // entry count). + bloomFuncs = math.Round((bloomSize / float64(aggregatorItemLimit)) * math.Log(2)) + + // the bloom offsets are runtime constants which determines which part of the + // account/storage hash the hasher functions looks at, to determine the + // bloom key for an account/slot. This is randomized at init(), so that the + // global population of nodes do not all display the exact same behaviour with + // regards to bloom content + bloomDestructHasherOffset = 0 + bloomAccountHasherOffset = 0 + bloomStorageHasherOffset = 0 +) + +func init() { + // Init the bloom offsets in the range [0:24] (requires 8 bytes) + bloomDestructHasherOffset = rand.Intn(25) + bloomAccountHasherOffset = rand.Intn(25) + bloomStorageHasherOffset = rand.Intn(25) + + // The destruct and account blooms must be different, as the storage slots + // will check for destruction too for every bloom miss. It should not collide + // with modified accounts. + for bloomAccountHasherOffset == bloomDestructHasherOffset { + bloomAccountHasherOffset = rand.Intn(25) + } +} + +// diffLayer represents a collection of modifications made to a state snapshot +// after running a block on top. It contains one sorted list for the account trie +// and one-one list for each storage tries. +// +// The goal of a diff layer is to act as a journal, tracking recent modifications +// made to the state, that have not yet graduated into a semi-immutable state. +type diffLayer struct { + origin *diskLayer // Base disk layer to directly use on bloom misses + parent snapshot // Parent snapshot modified by this one, never nil + memory uint64 // Approximate guess as to how much memory we use + + root common.Hash // Root hash to which this snapshot diff belongs to + stale uint32 // Signals that the layer became stale (state progressed) + + // destructSet is a very special helper marker. If an account is marked as + // deleted, then it's recorded in this set. However it's allowed that an account + // is included here but still available in other sets(e.g. storageData). The + // reason is the diff layer includes all the changes in a *block*. It can + // happen that in the tx_1, account A is self-destructed while in the tx_2 + // it's recreated. But we still need this marker to indicate the "old" A is + // deleted, all data in other set belongs to the "new" A. + destructSet map[common.Hash]struct{} // Keyed markers for deleted (and potentially) recreated accounts + accountList []common.Hash // List of account for iteration. If it exists, it's sorted, otherwise it's nil + accountData map[common.Hash][]byte // Keyed accounts for direct retrieval (nil means deleted) + storageList map[common.Hash][]common.Hash // List of storage slots for iterated retrievals, one per account. Any existing lists are sorted if non-nil + storageData map[common.Hash]map[common.Hash][]byte // Keyed storage slots for direct retrieval. one per account (nil means deleted) + + diffed *bloomfilter.Filter // Bloom filter tracking all the diffed items up to the disk layer + + lock sync.RWMutex +} + +// destructBloomHasher is a wrapper around a common.Hash to satisfy the interface +// API requirements of the bloom library used. It's used to convert a destruct +// event into a 64 bit mini hash. +type destructBloomHasher common.Hash + +func (h destructBloomHasher) Write(p []byte) (n int, err error) { panic("not implemented") } +func (h destructBloomHasher) Sum(b []byte) []byte { panic("not implemented") } +func (h destructBloomHasher) Reset() { panic("not implemented") } +func (h destructBloomHasher) BlockSize() int { panic("not implemented") } +func (h destructBloomHasher) Size() int { return 8 } +func (h destructBloomHasher) Sum64() uint64 { + return binary.BigEndian.Uint64(h[bloomDestructHasherOffset : bloomDestructHasherOffset+8]) +} + +// accountBloomHasher is a wrapper around a common.Hash to satisfy the interface +// API requirements of the bloom library used. It's used to convert an account +// hash into a 64 bit mini hash. +type accountBloomHasher common.Hash + +func (h accountBloomHasher) Write(p []byte) (n int, err error) { panic("not implemented") } +func (h accountBloomHasher) Sum(b []byte) []byte { panic("not implemented") } +func (h accountBloomHasher) Reset() { panic("not implemented") } +func (h accountBloomHasher) BlockSize() int { panic("not implemented") } +func (h accountBloomHasher) Size() int { return 8 } +func (h accountBloomHasher) Sum64() uint64 { + return binary.BigEndian.Uint64(h[bloomAccountHasherOffset : bloomAccountHasherOffset+8]) +} + +// storageBloomHasher is a wrapper around a [2]common.Hash to satisfy the interface +// API requirements of the bloom library used. It's used to convert an account +// hash into a 64 bit mini hash. +type storageBloomHasher [2]common.Hash + +func (h storageBloomHasher) Write(p []byte) (n int, err error) { panic("not implemented") } +func (h storageBloomHasher) Sum(b []byte) []byte { panic("not implemented") } +func (h storageBloomHasher) Reset() { panic("not implemented") } +func (h storageBloomHasher) BlockSize() int { panic("not implemented") } +func (h storageBloomHasher) Size() int { return 8 } +func (h storageBloomHasher) Sum64() uint64 { + return binary.BigEndian.Uint64(h[0][bloomStorageHasherOffset:bloomStorageHasherOffset+8]) ^ + binary.BigEndian.Uint64(h[1][bloomStorageHasherOffset:bloomStorageHasherOffset+8]) +} + +// newDiffLayer creates a new diff on top of an existing snapshot, whether that's a low +// level persistent database or a hierarchical diff already. +func newDiffLayer(parent snapshot, root common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) *diffLayer { + // Create the new layer with some pre-allocated data segments + dl := &diffLayer{ + parent: parent, + root: root, + destructSet: destructs, + accountData: accounts, + storageData: storage, + storageList: make(map[common.Hash][]common.Hash), + } + switch parent := parent.(type) { + case *diskLayer: + dl.rebloom(parent) + case *diffLayer: + dl.rebloom(parent.origin) + default: + panic("unknown parent type") + } + // Sanity check that accounts or storage slots are never nil + for accountHash, blob := range accounts { + if blob == nil { + panic(fmt.Sprintf("account %#x nil", accountHash)) + } + // Determine memory size and track the dirty writes + dl.memory += uint64(common.HashLength + len(blob)) + snapshotDirtyAccountWriteMeter.Mark(int64(len(blob))) + } + for accountHash, slots := range storage { + if slots == nil { + panic(fmt.Sprintf("storage %#x nil", accountHash)) + } + // Determine memory size and track the dirty writes + for _, data := range slots { + dl.memory += uint64(common.HashLength + len(data)) + snapshotDirtyStorageWriteMeter.Mark(int64(len(data))) + } + } + dl.memory += uint64(len(destructs) * common.HashLength) + return dl +} + +// rebloom discards the layer's current bloom and rebuilds it from scratch based +// on the parent's and the local diffs. +func (dl *diffLayer) rebloom(origin *diskLayer) { + dl.lock.Lock() + defer dl.lock.Unlock() + + defer func(start time.Time) { + snapshotBloomIndexTimer.Update(time.Since(start)) + }(time.Now()) + + // Inject the new origin that triggered the rebloom + dl.origin = origin + + // Retrieve the parent bloom or create a fresh empty one + if parent, ok := dl.parent.(*diffLayer); ok { + parent.lock.RLock() + dl.diffed, _ = parent.diffed.Copy() + parent.lock.RUnlock() + } else { + dl.diffed, _ = bloomfilter.New(uint64(bloomSize), uint64(bloomFuncs)) + } + // Iterate over all the accounts and storage slots and index them + for hash := range dl.destructSet { + dl.diffed.Add(destructBloomHasher(hash)) + } + for hash := range dl.accountData { + dl.diffed.Add(accountBloomHasher(hash)) + } + for accountHash, slots := range dl.storageData { + for storageHash := range slots { + dl.diffed.Add(storageBloomHasher{accountHash, storageHash}) + } + } + // Calculate the current false positive rate and update the error rate meter. + // This is a bit cheating because subsequent layers will overwrite it, but it + // should be fine, we're only interested in ballpark figures. + k := float64(dl.diffed.K()) + n := float64(dl.diffed.N()) + m := float64(dl.diffed.M()) + snapshotBloomErrorGauge.Update(math.Pow(1.0-math.Exp((-k)*(n+0.5)/(m-1)), k)) +} + +// Root returns the root hash for which this snapshot was made. +func (dl *diffLayer) Root() common.Hash { + return dl.root +} + +// Parent returns the subsequent layer of a diff layer. +func (dl *diffLayer) Parent() snapshot { + dl.lock.RLock() + defer dl.lock.RUnlock() + + return dl.parent +} + +// Stale return whether this layer has become stale (was flattened across) or if +// it's still live. +func (dl *diffLayer) Stale() bool { + return atomic.LoadUint32(&dl.stale) != 0 +} + +// Account directly retrieves the account associated with a particular hash in +// the snapshot slim data format. +func (dl *diffLayer) Account(hash common.Hash) (*Account, error) { + data, err := dl.AccountRLP(hash) + if err != nil { + return nil, err + } + if len(data) == 0 { // can be both nil and []byte{} + return nil, nil + } + account := new(Account) + if err := rlp.DecodeBytes(data, account); err != nil { + panic(err) + } + return account, nil +} + +// AccountRLP directly retrieves the account RLP associated with a particular +// hash in the snapshot slim data format. +// +// Note the returned account is not a copy, please don't modify it. +func (dl *diffLayer) AccountRLP(hash common.Hash) ([]byte, error) { + // Check the bloom filter first whether there's even a point in reaching into + // all the maps in all the layers below + dl.lock.RLock() + hit := dl.diffed.Contains(accountBloomHasher(hash)) + if !hit { + hit = dl.diffed.Contains(destructBloomHasher(hash)) + } + var origin *diskLayer + if !hit { + origin = dl.origin // extract origin while holding the lock + } + dl.lock.RUnlock() + + // If the bloom filter misses, don't even bother with traversing the memory + // diff layers, reach straight into the bottom persistent disk layer + if origin != nil { + snapshotBloomAccountMissMeter.Mark(1) + return origin.AccountRLP(hash) + } + // The bloom filter hit, start poking in the internal maps + return dl.accountRLP(hash, 0) +} + +// accountRLP is an internal version of AccountRLP that skips the bloom filter +// checks and uses the internal maps to try and retrieve the data. It's meant +// to be used if a higher layer's bloom filter hit already. +func (dl *diffLayer) accountRLP(hash common.Hash, depth int) ([]byte, error) { + dl.lock.RLock() + defer dl.lock.RUnlock() + + // If the layer was flattened into, consider it invalid (any live reference to + // the original should be marked as unusable). + if dl.Stale() { + return nil, ErrSnapshotStale + } + // If the account is known locally, return it + if data, ok := dl.accountData[hash]; ok { + snapshotDirtyAccountHitMeter.Mark(1) + snapshotDirtyAccountHitDepthHist.Update(int64(depth)) + snapshotDirtyAccountReadMeter.Mark(int64(len(data))) + snapshotBloomAccountTrueHitMeter.Mark(1) + return data, nil + } + // If the account is known locally, but deleted, return it + if _, ok := dl.destructSet[hash]; ok { + snapshotDirtyAccountHitMeter.Mark(1) + snapshotDirtyAccountHitDepthHist.Update(int64(depth)) + snapshotDirtyAccountInexMeter.Mark(1) + snapshotBloomAccountTrueHitMeter.Mark(1) + return nil, nil + } + // Account unknown to this diff, resolve from parent + if diff, ok := dl.parent.(*diffLayer); ok { + return diff.accountRLP(hash, depth+1) + } + // Failed to resolve through diff layers, mark a bloom error and use the disk + snapshotBloomAccountFalseHitMeter.Mark(1) + return dl.parent.AccountRLP(hash) +} + +// Storage directly retrieves the storage data associated with a particular hash, +// within a particular account. If the slot is unknown to this diff, it's parent +// is consulted. +// +// Note the returned slot is not a copy, please don't modify it. +func (dl *diffLayer) Storage(accountHash, storageHash common.Hash) ([]byte, error) { + // Check the bloom filter first whether there's even a point in reaching into + // all the maps in all the layers below + dl.lock.RLock() + hit := dl.diffed.Contains(storageBloomHasher{accountHash, storageHash}) + if !hit { + hit = dl.diffed.Contains(destructBloomHasher(accountHash)) + } + var origin *diskLayer + if !hit { + origin = dl.origin // extract origin while holding the lock + } + dl.lock.RUnlock() + + // If the bloom filter misses, don't even bother with traversing the memory + // diff layers, reach straight into the bottom persistent disk layer + if origin != nil { + snapshotBloomStorageMissMeter.Mark(1) + return origin.Storage(accountHash, storageHash) + } + // The bloom filter hit, start poking in the internal maps + return dl.storage(accountHash, storageHash, 0) +} + +// storage is an internal version of Storage that skips the bloom filter checks +// and uses the internal maps to try and retrieve the data. It's meant to be +// used if a higher layer's bloom filter hit already. +func (dl *diffLayer) storage(accountHash, storageHash common.Hash, depth int) ([]byte, error) { + dl.lock.RLock() + defer dl.lock.RUnlock() + + // If the layer was flattened into, consider it invalid (any live reference to + // the original should be marked as unusable). + if dl.Stale() { + return nil, ErrSnapshotStale + } + // If the account is known locally, try to resolve the slot locally + if storage, ok := dl.storageData[accountHash]; ok { + if data, ok := storage[storageHash]; ok { + snapshotDirtyStorageHitMeter.Mark(1) + snapshotDirtyStorageHitDepthHist.Update(int64(depth)) + if n := len(data); n > 0 { + snapshotDirtyStorageReadMeter.Mark(int64(n)) + } else { + snapshotDirtyStorageInexMeter.Mark(1) + } + snapshotBloomStorageTrueHitMeter.Mark(1) + return data, nil + } + } + // If the account is known locally, but deleted, return an empty slot + if _, ok := dl.destructSet[accountHash]; ok { + snapshotDirtyStorageHitMeter.Mark(1) + snapshotDirtyStorageHitDepthHist.Update(int64(depth)) + snapshotDirtyStorageInexMeter.Mark(1) + snapshotBloomStorageTrueHitMeter.Mark(1) + return nil, nil + } + // Storage slot unknown to this diff, resolve from parent + if diff, ok := dl.parent.(*diffLayer); ok { + return diff.storage(accountHash, storageHash, depth+1) + } + // Failed to resolve through diff layers, mark a bloom error and use the disk + snapshotBloomStorageFalseHitMeter.Mark(1) + return dl.parent.Storage(accountHash, storageHash) +} + +// Update creates a new layer on top of the existing snapshot diff tree with +// the specified data items. +func (dl *diffLayer) Update(blockRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) *diffLayer { + return newDiffLayer(dl, blockRoot, destructs, accounts, storage) +} + +// flatten pushes all data from this point downwards, flattening everything into +// a single diff at the bottom. Since usually the lowermost diff is the largest, +// the flattening builds up from there in reverse. +func (dl *diffLayer) flatten() snapshot { + // If the parent is not diff, we're the first in line, return unmodified + parent, ok := dl.parent.(*diffLayer) + if !ok { + return dl + } + // Parent is a diff, flatten it first (note, apart from weird corned cases, + // flatten will realistically only ever merge 1 layer, so there's no need to + // be smarter about grouping flattens together). + parent = parent.flatten().(*diffLayer) + + parent.lock.Lock() + defer parent.lock.Unlock() + + // Before actually writing all our data to the parent, first ensure that the + // parent hasn't been 'corrupted' by someone else already flattening into it + if atomic.SwapUint32(&parent.stale, 1) != 0 { + panic("parent diff layer is stale") // we've flattened into the same parent from two children, boo + } + // Overwrite all the updated accounts blindly, merge the sorted list + for hash := range dl.destructSet { + parent.destructSet[hash] = struct{}{} + delete(parent.accountData, hash) + delete(parent.storageData, hash) + } + for hash, data := range dl.accountData { + parent.accountData[hash] = data + } + // Overwrite all the updated storage slots (individually) + for accountHash, storage := range dl.storageData { + // If storage didn't exist (or was deleted) in the parent, overwrite blindly + if _, ok := parent.storageData[accountHash]; !ok { + parent.storageData[accountHash] = storage + continue + } + // Storage exists in both parent and child, merge the slots + comboData := parent.storageData[accountHash] + for storageHash, data := range storage { + comboData[storageHash] = data + } + } + // Return the combo parent + return &diffLayer{ + parent: parent.parent, + origin: parent.origin, + root: dl.root, + destructSet: parent.destructSet, + accountData: parent.accountData, + storageData: parent.storageData, + storageList: make(map[common.Hash][]common.Hash), + diffed: dl.diffed, + memory: parent.memory + dl.memory, + } +} + +// AccountList returns a sorted list of all accounts in this diffLayer, including +// the deleted ones. +// +// Note, the returned slice is not a copy, so do not modify it. +func (dl *diffLayer) AccountList() []common.Hash { + // If an old list already exists, return it + dl.lock.RLock() + list := dl.accountList + dl.lock.RUnlock() + + if list != nil { + return list + } + // No old sorted account list exists, generate a new one + dl.lock.Lock() + defer dl.lock.Unlock() + + dl.accountList = make([]common.Hash, 0, len(dl.destructSet)+len(dl.accountData)) + for hash := range dl.accountData { + dl.accountList = append(dl.accountList, hash) + } + for hash := range dl.destructSet { + if _, ok := dl.accountData[hash]; !ok { + dl.accountList = append(dl.accountList, hash) + } + } + sort.Sort(hashes(dl.accountList)) + dl.memory += uint64(len(dl.accountList) * common.HashLength) + return dl.accountList +} + +// StorageList returns a sorted list of all storage slot hashes in this diffLayer +// for the given account. If the whole storage is destructed in this layer, then +// an additional flag *destructed = true* will be returned, otherwise the flag is +// false. Besides, the returned list will include the hash of deleted storage slot. +// Note a special case is an account is deleted in a prior tx but is recreated in +// the following tx with some storage slots set. In this case the returned list is +// not empty but the flag is true. +// +// Note, the returned slice is not a copy, so do not modify it. +func (dl *diffLayer) StorageList(accountHash common.Hash) ([]common.Hash, bool) { + dl.lock.RLock() + _, destructed := dl.destructSet[accountHash] + if _, ok := dl.storageData[accountHash]; !ok { + // Account not tracked by this layer + dl.lock.RUnlock() + return nil, destructed + } + // If an old list already exists, return it + if list, exist := dl.storageList[accountHash]; exist { + dl.lock.RUnlock() + return list, destructed // the cached list can't be nil + } + dl.lock.RUnlock() + + // No old sorted account list exists, generate a new one + dl.lock.Lock() + defer dl.lock.Unlock() + + storageMap := dl.storageData[accountHash] + storageList := make([]common.Hash, 0, len(storageMap)) + for k := range storageMap { + storageList = append(storageList, k) + } + sort.Sort(hashes(storageList)) + dl.storageList[accountHash] = storageList + dl.memory += uint64(len(dl.storageList)*common.HashLength + common.HashLength) + return storageList, destructed +} diff --git a/core/state/snapshot/difflayer_test.go b/core/state/snapshot/difflayer_test.go new file mode 100644 index 00000000..59db9204 --- /dev/null +++ b/core/state/snapshot/difflayer_test.go @@ -0,0 +1,398 @@ +// 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 snapshot + +import ( + "bytes" + "math/rand" + "testing" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb/memorydb" +) + +func copyDestructs(destructs map[common.Hash]struct{}) map[common.Hash]struct{} { + copy := make(map[common.Hash]struct{}) + for hash := range destructs { + copy[hash] = struct{}{} + } + return copy +} + +func copyAccounts(accounts map[common.Hash][]byte) map[common.Hash][]byte { + copy := make(map[common.Hash][]byte) + for hash, blob := range accounts { + copy[hash] = blob + } + return copy +} + +func copyStorage(storage map[common.Hash]map[common.Hash][]byte) map[common.Hash]map[common.Hash][]byte { + copy := make(map[common.Hash]map[common.Hash][]byte) + for accHash, slots := range storage { + copy[accHash] = make(map[common.Hash][]byte) + for slotHash, blob := range slots { + copy[accHash][slotHash] = blob + } + } + return copy +} + +// TestMergeBasics tests some simple merges +func TestMergeBasics(t *testing.T) { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + // Fill up a parent + for i := 0; i < 100; i++ { + h := randomHash() + data := randomAccount() + + accounts[h] = data + if rand.Intn(4) == 0 { + destructs[h] = struct{}{} + } + if rand.Intn(2) == 0 { + accStorage := make(map[common.Hash][]byte) + value := make([]byte, 32) + rand.Read(value) + accStorage[randomHash()] = value + storage[h] = accStorage + } + } + // Add some (identical) layers on top + parent := newDiffLayer(emptyLayer(), common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + child := newDiffLayer(parent, common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + child = newDiffLayer(child, common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + child = newDiffLayer(child, common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + child = newDiffLayer(child, common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + // And flatten + merged := (child.flatten()).(*diffLayer) + + { // Check account lists + if have, want := len(merged.accountList), 0; have != want { + t.Errorf("accountList wrong: have %v, want %v", have, want) + } + if have, want := len(merged.AccountList()), len(accounts); have != want { + t.Errorf("AccountList() wrong: have %v, want %v", have, want) + } + if have, want := len(merged.accountList), len(accounts); have != want { + t.Errorf("accountList [2] wrong: have %v, want %v", have, want) + } + } + { // Check account drops + if have, want := len(merged.destructSet), len(destructs); have != want { + t.Errorf("accountDrop wrong: have %v, want %v", have, want) + } + } + { // Check storage lists + i := 0 + for aHash, sMap := range storage { + if have, want := len(merged.storageList), i; have != want { + t.Errorf("[1] storageList wrong: have %v, want %v", have, want) + } + list, _ := merged.StorageList(aHash) + if have, want := len(list), len(sMap); have != want { + t.Errorf("[2] StorageList() wrong: have %v, want %v", have, want) + } + if have, want := len(merged.storageList[aHash]), len(sMap); have != want { + t.Errorf("storageList wrong: have %v, want %v", have, want) + } + i++ + } + } +} + +// TestMergeDelete tests some deletion +func TestMergeDelete(t *testing.T) { + var ( + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + // Fill up a parent + h1 := common.HexToHash("0x01") + h2 := common.HexToHash("0x02") + + flipDrops := func() map[common.Hash]struct{} { + return map[common.Hash]struct{}{ + h2: {}, + } + } + flipAccs := func() map[common.Hash][]byte { + return map[common.Hash][]byte{ + h1: randomAccount(), + } + } + flopDrops := func() map[common.Hash]struct{} { + return map[common.Hash]struct{}{ + h1: {}, + } + } + flopAccs := func() map[common.Hash][]byte { + return map[common.Hash][]byte{ + h2: randomAccount(), + } + } + // Add some flipAccs-flopping layers on top + parent := newDiffLayer(emptyLayer(), common.Hash{}, flipDrops(), flipAccs(), storage) + child := parent.Update(common.Hash{}, flopDrops(), flopAccs(), storage) + child = child.Update(common.Hash{}, flipDrops(), flipAccs(), storage) + child = child.Update(common.Hash{}, flopDrops(), flopAccs(), storage) + child = child.Update(common.Hash{}, flipDrops(), flipAccs(), storage) + child = child.Update(common.Hash{}, flopDrops(), flopAccs(), storage) + child = child.Update(common.Hash{}, flipDrops(), flipAccs(), storage) + + if data, _ := child.Account(h1); data == nil { + t.Errorf("last diff layer: expected %x account to be non-nil", h1) + } + if data, _ := child.Account(h2); data != nil { + t.Errorf("last diff layer: expected %x account to be nil", h2) + } + if _, ok := child.destructSet[h1]; ok { + t.Errorf("last diff layer: expected %x drop to be missing", h1) + } + if _, ok := child.destructSet[h2]; !ok { + t.Errorf("last diff layer: expected %x drop to be present", h1) + } + // And flatten + merged := (child.flatten()).(*diffLayer) + + if data, _ := merged.Account(h1); data == nil { + t.Errorf("merged layer: expected %x account to be non-nil", h1) + } + if data, _ := merged.Account(h2); data != nil { + t.Errorf("merged layer: expected %x account to be nil", h2) + } + if _, ok := merged.destructSet[h1]; !ok { // Note, drops stay alive until persisted to disk! + t.Errorf("merged diff layer: expected %x drop to be present", h1) + } + if _, ok := merged.destructSet[h2]; !ok { // Note, drops stay alive until persisted to disk! + t.Errorf("merged diff layer: expected %x drop to be present", h1) + } + // If we add more granular metering of memory, we can enable this again, + // but it's not implemented for now + //if have, want := merged.memory, child.memory; have != want { + // t.Errorf("mem wrong: have %d, want %d", have, want) + //} +} + +// This tests that if we create a new account, and set a slot, and then merge +// it, the lists will be correct. +func TestInsertAndMerge(t *testing.T) { + // Fill up a parent + var ( + acc = common.HexToHash("0x01") + slot = common.HexToHash("0x02") + parent *diffLayer + child *diffLayer + ) + { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + parent = newDiffLayer(emptyLayer(), common.Hash{}, destructs, accounts, storage) + } + { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + accounts[acc] = randomAccount() + storage[acc] = make(map[common.Hash][]byte) + storage[acc][slot] = []byte{0x01} + child = newDiffLayer(parent, common.Hash{}, destructs, accounts, storage) + } + // And flatten + merged := (child.flatten()).(*diffLayer) + { // Check that slot value is present + have, _ := merged.Storage(acc, slot) + if want := []byte{0x01}; !bytes.Equal(have, want) { + t.Errorf("merged slot value wrong: have %x, want %x", have, want) + } + } +} + +func emptyLayer() *diskLayer { + return &diskLayer{ + diskdb: memorydb.New(), + cache: fastcache.New(500 * 1024), + } +} + +// BenchmarkSearch checks how long it takes to find a non-existing key +// BenchmarkSearch-6 200000 10481 ns/op (1K per layer) +// BenchmarkSearch-6 200000 10760 ns/op (10K per layer) +// BenchmarkSearch-6 100000 17866 ns/op +// +// BenchmarkSearch-6 500000 3723 ns/op (10k per layer, only top-level RLock() +func BenchmarkSearch(b *testing.B) { + // First, we set up 128 diff layers, with 1K items each + fill := func(parent snapshot) *diffLayer { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + for i := 0; i < 10000; i++ { + accounts[randomHash()] = randomAccount() + } + return newDiffLayer(parent, common.Hash{}, destructs, accounts, storage) + } + var layer snapshot + layer = emptyLayer() + for i := 0; i < 128; i++ { + layer = fill(layer) + } + key := crypto.Keccak256Hash([]byte{0x13, 0x38}) + b.ResetTimer() + for i := 0; i < b.N; i++ { + layer.AccountRLP(key) + } +} + +// BenchmarkSearchSlot checks how long it takes to find a non-existing key +// - Number of layers: 128 +// - Each layers contains the account, with a couple of storage slots +// BenchmarkSearchSlot-6 100000 14554 ns/op +// BenchmarkSearchSlot-6 100000 22254 ns/op (when checking parent root using mutex) +// BenchmarkSearchSlot-6 100000 14551 ns/op (when checking parent number using atomic) +// With bloom filter: +// BenchmarkSearchSlot-6 3467835 351 ns/op +func BenchmarkSearchSlot(b *testing.B) { + // First, we set up 128 diff layers, with 1K items each + accountKey := crypto.Keccak256Hash([]byte{0x13, 0x37}) + storageKey := crypto.Keccak256Hash([]byte{0x13, 0x37}) + accountRLP := randomAccount() + fill := func(parent snapshot) *diffLayer { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + accounts[accountKey] = accountRLP + + accStorage := make(map[common.Hash][]byte) + for i := 0; i < 5; i++ { + value := make([]byte, 32) + rand.Read(value) + accStorage[randomHash()] = value + storage[accountKey] = accStorage + } + return newDiffLayer(parent, common.Hash{}, destructs, accounts, storage) + } + var layer snapshot + layer = emptyLayer() + for i := 0; i < 128; i++ { + layer = fill(layer) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + layer.Storage(accountKey, storageKey) + } +} + +// With accountList and sorting +// BenchmarkFlatten-6 50 29890856 ns/op +// +// Without sorting and tracking accountList +// BenchmarkFlatten-6 300 5511511 ns/op +func BenchmarkFlatten(b *testing.B) { + fill := func(parent snapshot) *diffLayer { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + for i := 0; i < 100; i++ { + accountKey := randomHash() + accounts[accountKey] = randomAccount() + + accStorage := make(map[common.Hash][]byte) + for i := 0; i < 20; i++ { + value := make([]byte, 32) + rand.Read(value) + accStorage[randomHash()] = value + } + storage[accountKey] = accStorage + } + return newDiffLayer(parent, common.Hash{}, destructs, accounts, storage) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + b.StopTimer() + var layer snapshot + layer = emptyLayer() + for i := 1; i < 128; i++ { + layer = fill(layer) + } + b.StartTimer() + + for i := 1; i < 128; i++ { + dl, ok := layer.(*diffLayer) + if !ok { + break + } + layer = dl.flatten() + } + b.StopTimer() + } +} + +// This test writes ~324M of diff layers to disk, spread over +// - 128 individual layers, +// - each with 200 accounts +// - containing 200 slots +// +// BenchmarkJournal-6 1 1471373923 ns/ops +// BenchmarkJournal-6 1 1208083335 ns/op // bufio writer +func BenchmarkJournal(b *testing.B) { + fill := func(parent snapshot) *diffLayer { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + for i := 0; i < 200; i++ { + accountKey := randomHash() + accounts[accountKey] = randomAccount() + + accStorage := make(map[common.Hash][]byte) + for i := 0; i < 200; i++ { + value := make([]byte, 32) + rand.Read(value) + accStorage[randomHash()] = value + } + storage[accountKey] = accStorage + } + return newDiffLayer(parent, common.Hash{}, destructs, accounts, storage) + } + layer := snapshot(emptyLayer()) + for i := 1; i < 128; i++ { + layer = fill(layer) + } + b.ResetTimer() + + for i := 0; i < b.N; i++ { + layer.Journal(new(bytes.Buffer)) + } +} diff --git a/core/state/snapshot/disklayer.go b/core/state/snapshot/disklayer.go new file mode 100644 index 00000000..7cbf6e29 --- /dev/null +++ b/core/state/snapshot/disklayer.go @@ -0,0 +1,166 @@ +// 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 snapshot + +import ( + "bytes" + "sync" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +// diskLayer is a low level persistent snapshot built on top of a key-value store. +type diskLayer struct { + diskdb ethdb.KeyValueStore // Key-value store containing the base snapshot + triedb *trie.Database // Trie node cache for reconstruction purposes + cache *fastcache.Cache // Cache to avoid hitting the disk for direct access + + root common.Hash // Root hash of the base snapshot + stale bool // Signals that the layer became stale (state progressed) + + genMarker []byte // Marker for the state that's indexed during initial layer generation + genPending chan struct{} // Notification channel when generation is done (test synchronicity) + genAbort chan chan *generatorStats // Notification channel to abort generating the snapshot in this layer + + lock sync.RWMutex +} + +// Root returns root hash for which this snapshot was made. +func (dl *diskLayer) Root() common.Hash { + return dl.root +} + +// Parent always returns nil as there's no layer below the disk. +func (dl *diskLayer) Parent() snapshot { + return nil +} + +// Stale return whether this layer has become stale (was flattened across) or if +// it's still live. +func (dl *diskLayer) Stale() bool { + dl.lock.RLock() + defer dl.lock.RUnlock() + + return dl.stale +} + +// Account directly retrieves the account associated with a particular hash in +// the snapshot slim data format. +func (dl *diskLayer) Account(hash common.Hash) (*Account, error) { + data, err := dl.AccountRLP(hash) + if err != nil { + return nil, err + } + if len(data) == 0 { // can be both nil and []byte{} + return nil, nil + } + account := new(Account) + if err := rlp.DecodeBytes(data, account); err != nil { + panic(err) + } + return account, nil +} + +// AccountRLP directly retrieves the account RLP associated with a particular +// hash in the snapshot slim data format. +func (dl *diskLayer) AccountRLP(hash common.Hash) ([]byte, error) { + dl.lock.RLock() + defer dl.lock.RUnlock() + + // If the layer was flattened into, consider it invalid (any live reference to + // the original should be marked as unusable). + if dl.stale { + return nil, ErrSnapshotStale + } + // If the layer is being generated, ensure the requested hash has already been + // covered by the generator. + if dl.genMarker != nil && bytes.Compare(hash[:], dl.genMarker) > 0 { + return nil, ErrNotCoveredYet + } + // If we're in the disk layer, all diff layers missed + snapshotDirtyAccountMissMeter.Mark(1) + + // Try to retrieve the account from the memory cache + if blob, found := dl.cache.HasGet(nil, hash[:]); found { + snapshotCleanAccountHitMeter.Mark(1) + snapshotCleanAccountReadMeter.Mark(int64(len(blob))) + return blob, nil + } + // Cache doesn't contain account, pull from disk and cache for later + blob := rawdb.ReadAccountSnapshot(dl.diskdb, hash) + dl.cache.Set(hash[:], blob) + + snapshotCleanAccountMissMeter.Mark(1) + if n := len(blob); n > 0 { + snapshotCleanAccountWriteMeter.Mark(int64(n)) + } else { + snapshotCleanAccountInexMeter.Mark(1) + } + return blob, nil +} + +// Storage directly retrieves the storage data associated with a particular hash, +// within a particular account. +func (dl *diskLayer) Storage(accountHash, storageHash common.Hash) ([]byte, error) { + dl.lock.RLock() + defer dl.lock.RUnlock() + + // If the layer was flattened into, consider it invalid (any live reference to + // the original should be marked as unusable). + if dl.stale { + return nil, ErrSnapshotStale + } + key := append(accountHash[:], storageHash[:]...) + + // If the layer is being generated, ensure the requested hash has already been + // covered by the generator. + if dl.genMarker != nil && bytes.Compare(key, dl.genMarker) > 0 { + return nil, ErrNotCoveredYet + } + // If we're in the disk layer, all diff layers missed + snapshotDirtyStorageMissMeter.Mark(1) + + // Try to retrieve the storage slot from the memory cache + if blob, found := dl.cache.HasGet(nil, key); found { + snapshotCleanStorageHitMeter.Mark(1) + snapshotCleanStorageReadMeter.Mark(int64(len(blob))) + return blob, nil + } + // Cache doesn't contain storage slot, pull from disk and cache for later + blob := rawdb.ReadStorageSnapshot(dl.diskdb, accountHash, storageHash) + dl.cache.Set(key, blob) + + snapshotCleanStorageMissMeter.Mark(1) + if n := len(blob); n > 0 { + snapshotCleanStorageWriteMeter.Mark(int64(n)) + } else { + snapshotCleanStorageInexMeter.Mark(1) + } + return blob, nil +} + +// Update creates a new layer on top of the existing snapshot diff tree with +// the specified data items. Note, the maps are retained by the method to avoid +// copying everything. +func (dl *diskLayer) Update(blockHash common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) *diffLayer { + return newDiffLayer(dl, blockHash, destructs, accounts, storage) +} diff --git a/core/state/snapshot/disklayer_test.go b/core/state/snapshot/disklayer_test.go new file mode 100644 index 00000000..f95b7985 --- /dev/null +++ b/core/state/snapshot/disklayer_test.go @@ -0,0 +1,574 @@ +// 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 snapshot + +import ( + "bytes" + "testing" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/rlp" +) + +// reverse reverses the contents of a byte slice. It's used to update random accs +// with deterministic changes. +func reverse(blob []byte) []byte { + res := make([]byte, len(blob)) + for i, b := range blob { + res[len(blob)-1-i] = b + } + return res +} + +// Tests that merging something into a disk layer persists it into the database +// and invalidates any previously written and cached values. +func TestDiskMerge(t *testing.T) { + // Create some accounts in the disk layer + db := memorydb.New() + + var ( + accNoModNoCache = common.Hash{0x1} + accNoModCache = common.Hash{0x2} + accModNoCache = common.Hash{0x3} + accModCache = common.Hash{0x4} + accDelNoCache = common.Hash{0x5} + accDelCache = common.Hash{0x6} + conNoModNoCache = common.Hash{0x7} + conNoModNoCacheSlot = common.Hash{0x70} + conNoModCache = common.Hash{0x8} + conNoModCacheSlot = common.Hash{0x80} + conModNoCache = common.Hash{0x9} + conModNoCacheSlot = common.Hash{0x90} + conModCache = common.Hash{0xa} + conModCacheSlot = common.Hash{0xa0} + conDelNoCache = common.Hash{0xb} + conDelNoCacheSlot = common.Hash{0xb0} + conDelCache = common.Hash{0xc} + conDelCacheSlot = common.Hash{0xc0} + conNukeNoCache = common.Hash{0xd} + conNukeNoCacheSlot = common.Hash{0xd0} + conNukeCache = common.Hash{0xe} + conNukeCacheSlot = common.Hash{0xe0} + baseRoot = randomHash() + diffRoot = randomHash() + ) + + rawdb.WriteAccountSnapshot(db, accNoModNoCache, accNoModNoCache[:]) + rawdb.WriteAccountSnapshot(db, accNoModCache, accNoModCache[:]) + rawdb.WriteAccountSnapshot(db, accModNoCache, accModNoCache[:]) + rawdb.WriteAccountSnapshot(db, accModCache, accModCache[:]) + rawdb.WriteAccountSnapshot(db, accDelNoCache, accDelNoCache[:]) + rawdb.WriteAccountSnapshot(db, accDelCache, accDelCache[:]) + + rawdb.WriteAccountSnapshot(db, conNoModNoCache, conNoModNoCache[:]) + rawdb.WriteStorageSnapshot(db, conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conNoModCache, conNoModCache[:]) + rawdb.WriteStorageSnapshot(db, conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conModNoCache, conModNoCache[:]) + rawdb.WriteStorageSnapshot(db, conModNoCache, conModNoCacheSlot, conModNoCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conModCache, conModCache[:]) + rawdb.WriteStorageSnapshot(db, conModCache, conModCacheSlot, conModCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conDelNoCache, conDelNoCache[:]) + rawdb.WriteStorageSnapshot(db, conDelNoCache, conDelNoCacheSlot, conDelNoCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conDelCache, conDelCache[:]) + rawdb.WriteStorageSnapshot(db, conDelCache, conDelCacheSlot, conDelCacheSlot[:]) + + rawdb.WriteAccountSnapshot(db, conNukeNoCache, conNukeNoCache[:]) + rawdb.WriteStorageSnapshot(db, conNukeNoCache, conNukeNoCacheSlot, conNukeNoCacheSlot[:]) + rawdb.WriteAccountSnapshot(db, conNukeCache, conNukeCache[:]) + rawdb.WriteStorageSnapshot(db, conNukeCache, conNukeCacheSlot, conNukeCacheSlot[:]) + + rawdb.WriteSnapshotRoot(db, baseRoot) + + // Create a disk layer based on the above and cache in some data + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + baseRoot: &diskLayer{ + diskdb: db, + cache: fastcache.New(500 * 1024), + root: baseRoot, + }, + }, + } + base := snaps.Snapshot(baseRoot) + base.AccountRLP(accNoModCache) + base.AccountRLP(accModCache) + base.AccountRLP(accDelCache) + base.Storage(conNoModCache, conNoModCacheSlot) + base.Storage(conModCache, conModCacheSlot) + base.Storage(conDelCache, conDelCacheSlot) + base.Storage(conNukeCache, conNukeCacheSlot) + + // Modify or delete some accounts, flatten everything onto disk + if err := snaps.Update(diffRoot, baseRoot, map[common.Hash]struct{}{ + accDelNoCache: {}, + accDelCache: {}, + conNukeNoCache: {}, + conNukeCache: {}, + }, map[common.Hash][]byte{ + accModNoCache: reverse(accModNoCache[:]), + accModCache: reverse(accModCache[:]), + }, map[common.Hash]map[common.Hash][]byte{ + conModNoCache: {conModNoCacheSlot: reverse(conModNoCacheSlot[:])}, + conModCache: {conModCacheSlot: reverse(conModCacheSlot[:])}, + conDelNoCache: {conDelNoCacheSlot: nil}, + conDelCache: {conDelCacheSlot: nil}, + }); err != nil { + t.Fatalf("failed to update snapshot tree: %v", err) + } + if err := snaps.Cap(diffRoot, 0); err != nil { + t.Fatalf("failed to flatten snapshot tree: %v", err) + } + // Retrieve all the data through the disk layer and validate it + base = snaps.Snapshot(diffRoot) + if _, ok := base.(*diskLayer); !ok { + t.Fatalf("update not flattend into the disk layer") + } + + // assertAccount ensures that an account matches the given blob. + assertAccount := func(account common.Hash, data []byte) { + t.Helper() + blob, err := base.AccountRLP(account) + if err != nil { + t.Errorf("account access (%x) failed: %v", account, err) + } else if !bytes.Equal(blob, data) { + t.Errorf("account access (%x) mismatch: have %x, want %x", account, blob, data) + } + } + assertAccount(accNoModNoCache, accNoModNoCache[:]) + assertAccount(accNoModCache, accNoModCache[:]) + assertAccount(accModNoCache, reverse(accModNoCache[:])) + assertAccount(accModCache, reverse(accModCache[:])) + assertAccount(accDelNoCache, nil) + assertAccount(accDelCache, nil) + + // assertStorage ensures that a storage slot matches the given blob. + assertStorage := func(account common.Hash, slot common.Hash, data []byte) { + t.Helper() + blob, err := base.Storage(account, slot) + if err != nil { + t.Errorf("storage access (%x:%x) failed: %v", account, slot, err) + } else if !bytes.Equal(blob, data) { + t.Errorf("storage access (%x:%x) mismatch: have %x, want %x", account, slot, blob, data) + } + } + assertStorage(conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + assertStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + assertStorage(conModNoCache, conModNoCacheSlot, reverse(conModNoCacheSlot[:])) + assertStorage(conModCache, conModCacheSlot, reverse(conModCacheSlot[:])) + assertStorage(conDelNoCache, conDelNoCacheSlot, nil) + assertStorage(conDelCache, conDelCacheSlot, nil) + assertStorage(conNukeNoCache, conNukeNoCacheSlot, nil) + assertStorage(conNukeCache, conNukeCacheSlot, nil) + + // Retrieve all the data directly from the database and validate it + + // assertDatabaseAccount ensures that an account from the database matches the given blob. + assertDatabaseAccount := func(account common.Hash, data []byte) { + t.Helper() + if blob := rawdb.ReadAccountSnapshot(db, account); !bytes.Equal(blob, data) { + t.Errorf("account database access (%x) mismatch: have %x, want %x", account, blob, data) + } + } + assertDatabaseAccount(accNoModNoCache, accNoModNoCache[:]) + assertDatabaseAccount(accNoModCache, accNoModCache[:]) + assertDatabaseAccount(accModNoCache, reverse(accModNoCache[:])) + assertDatabaseAccount(accModCache, reverse(accModCache[:])) + assertDatabaseAccount(accDelNoCache, nil) + assertDatabaseAccount(accDelCache, nil) + + // assertDatabaseStorage ensures that a storage slot from the database matches the given blob. + assertDatabaseStorage := func(account common.Hash, slot common.Hash, data []byte) { + t.Helper() + if blob := rawdb.ReadStorageSnapshot(db, account, slot); !bytes.Equal(blob, data) { + t.Errorf("storage database access (%x:%x) mismatch: have %x, want %x", account, slot, blob, data) + } + } + assertDatabaseStorage(conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + assertDatabaseStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + assertDatabaseStorage(conModNoCache, conModNoCacheSlot, reverse(conModNoCacheSlot[:])) + assertDatabaseStorage(conModCache, conModCacheSlot, reverse(conModCacheSlot[:])) + assertDatabaseStorage(conDelNoCache, conDelNoCacheSlot, nil) + assertDatabaseStorage(conDelCache, conDelCacheSlot, nil) + assertDatabaseStorage(conNukeNoCache, conNukeNoCacheSlot, nil) + assertDatabaseStorage(conNukeCache, conNukeCacheSlot, nil) +} + +// Tests that merging something into a disk layer persists it into the database +// and invalidates any previously written and cached values, discarding anything +// after the in-progress generation marker. +func TestDiskPartialMerge(t *testing.T) { + // Iterate the test a few times to ensure we pick various internal orderings + // for the data slots as well as the progress marker. + for i := 0; i < 1024; i++ { + // Create some accounts in the disk layer + db := memorydb.New() + + var ( + accNoModNoCache = randomHash() + accNoModCache = randomHash() + accModNoCache = randomHash() + accModCache = randomHash() + accDelNoCache = randomHash() + accDelCache = randomHash() + conNoModNoCache = randomHash() + conNoModNoCacheSlot = randomHash() + conNoModCache = randomHash() + conNoModCacheSlot = randomHash() + conModNoCache = randomHash() + conModNoCacheSlot = randomHash() + conModCache = randomHash() + conModCacheSlot = randomHash() + conDelNoCache = randomHash() + conDelNoCacheSlot = randomHash() + conDelCache = randomHash() + conDelCacheSlot = randomHash() + conNukeNoCache = randomHash() + conNukeNoCacheSlot = randomHash() + conNukeCache = randomHash() + conNukeCacheSlot = randomHash() + baseRoot = randomHash() + diffRoot = randomHash() + genMarker = append(randomHash().Bytes(), randomHash().Bytes()...) + ) + + // insertAccount injects an account into the database if it's after the + // generator marker, drops the op otherwise. This is needed to seed the + // database with a valid starting snapshot. + insertAccount := func(account common.Hash, data []byte) { + if bytes.Compare(account[:], genMarker) <= 0 { + rawdb.WriteAccountSnapshot(db, account, data[:]) + } + } + insertAccount(accNoModNoCache, accNoModNoCache[:]) + insertAccount(accNoModCache, accNoModCache[:]) + insertAccount(accModNoCache, accModNoCache[:]) + insertAccount(accModCache, accModCache[:]) + insertAccount(accDelNoCache, accDelNoCache[:]) + insertAccount(accDelCache, accDelCache[:]) + + // insertStorage injects a storage slot into the database if it's after + // the generator marker, drops the op otherwise. This is needed to seed + // the database with a valid starting snapshot. + insertStorage := func(account common.Hash, slot common.Hash, data []byte) { + if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 { + rawdb.WriteStorageSnapshot(db, account, slot, data[:]) + } + } + insertAccount(conNoModNoCache, conNoModNoCache[:]) + insertStorage(conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + insertAccount(conNoModCache, conNoModCache[:]) + insertStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + insertAccount(conModNoCache, conModNoCache[:]) + insertStorage(conModNoCache, conModNoCacheSlot, conModNoCacheSlot[:]) + insertAccount(conModCache, conModCache[:]) + insertStorage(conModCache, conModCacheSlot, conModCacheSlot[:]) + insertAccount(conDelNoCache, conDelNoCache[:]) + insertStorage(conDelNoCache, conDelNoCacheSlot, conDelNoCacheSlot[:]) + insertAccount(conDelCache, conDelCache[:]) + insertStorage(conDelCache, conDelCacheSlot, conDelCacheSlot[:]) + + insertAccount(conNukeNoCache, conNukeNoCache[:]) + insertStorage(conNukeNoCache, conNukeNoCacheSlot, conNukeNoCacheSlot[:]) + insertAccount(conNukeCache, conNukeCache[:]) + insertStorage(conNukeCache, conNukeCacheSlot, conNukeCacheSlot[:]) + + rawdb.WriteSnapshotRoot(db, baseRoot) + + // Create a disk layer based on the above using a random progress marker + // and cache in some data. + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + baseRoot: &diskLayer{ + diskdb: db, + cache: fastcache.New(500 * 1024), + root: baseRoot, + }, + }, + } + snaps.layers[baseRoot].(*diskLayer).genMarker = genMarker + base := snaps.Snapshot(baseRoot) + + // assertAccount ensures that an account matches the given blob if it's + // already covered by the disk snapshot, and errors out otherwise. + assertAccount := func(account common.Hash, data []byte) { + t.Helper() + blob, err := base.AccountRLP(account) + if bytes.Compare(account[:], genMarker) > 0 && err != ErrNotCoveredYet { + t.Fatalf("test %d: post-marker (%x) account access (%x) succeeded: %x", i, genMarker, account, blob) + } + if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) { + t.Fatalf("test %d: pre-marker (%x) account access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data) + } + } + assertAccount(accNoModCache, accNoModCache[:]) + assertAccount(accModCache, accModCache[:]) + assertAccount(accDelCache, accDelCache[:]) + + // assertStorage ensures that a storage slot matches the given blob if + // it's already covered by the disk snapshot, and errors out otherwise. + assertStorage := func(account common.Hash, slot common.Hash, data []byte) { + t.Helper() + blob, err := base.Storage(account, slot) + if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && err != ErrNotCoveredYet { + t.Fatalf("test %d: post-marker (%x) storage access (%x:%x) succeeded: %x", i, genMarker, account, slot, blob) + } + if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) { + t.Fatalf("test %d: pre-marker (%x) storage access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data) + } + } + assertStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + assertStorage(conModCache, conModCacheSlot, conModCacheSlot[:]) + assertStorage(conDelCache, conDelCacheSlot, conDelCacheSlot[:]) + assertStorage(conNukeCache, conNukeCacheSlot, conNukeCacheSlot[:]) + + // Modify or delete some accounts, flatten everything onto disk + if err := snaps.Update(diffRoot, baseRoot, map[common.Hash]struct{}{ + accDelNoCache: {}, + accDelCache: {}, + conNukeNoCache: {}, + conNukeCache: {}, + }, map[common.Hash][]byte{ + accModNoCache: reverse(accModNoCache[:]), + accModCache: reverse(accModCache[:]), + }, map[common.Hash]map[common.Hash][]byte{ + conModNoCache: {conModNoCacheSlot: reverse(conModNoCacheSlot[:])}, + conModCache: {conModCacheSlot: reverse(conModCacheSlot[:])}, + conDelNoCache: {conDelNoCacheSlot: nil}, + conDelCache: {conDelCacheSlot: nil}, + }); err != nil { + t.Fatalf("test %d: failed to update snapshot tree: %v", i, err) + } + if err := snaps.Cap(diffRoot, 0); err != nil { + t.Fatalf("test %d: failed to flatten snapshot tree: %v", i, err) + } + // Retrieve all the data through the disk layer and validate it + base = snaps.Snapshot(diffRoot) + if _, ok := base.(*diskLayer); !ok { + t.Fatalf("test %d: update not flattend into the disk layer", i) + } + assertAccount(accNoModNoCache, accNoModNoCache[:]) + assertAccount(accNoModCache, accNoModCache[:]) + assertAccount(accModNoCache, reverse(accModNoCache[:])) + assertAccount(accModCache, reverse(accModCache[:])) + assertAccount(accDelNoCache, nil) + assertAccount(accDelCache, nil) + + assertStorage(conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + assertStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + assertStorage(conModNoCache, conModNoCacheSlot, reverse(conModNoCacheSlot[:])) + assertStorage(conModCache, conModCacheSlot, reverse(conModCacheSlot[:])) + assertStorage(conDelNoCache, conDelNoCacheSlot, nil) + assertStorage(conDelCache, conDelCacheSlot, nil) + assertStorage(conNukeNoCache, conNukeNoCacheSlot, nil) + assertStorage(conNukeCache, conNukeCacheSlot, nil) + + // Retrieve all the data directly from the database and validate it + + // assertDatabaseAccount ensures that an account inside the database matches + // the given blob if it's already covered by the disk snapshot, and does not + // exist otherwise. + assertDatabaseAccount := func(account common.Hash, data []byte) { + t.Helper() + blob := rawdb.ReadAccountSnapshot(db, account) + if bytes.Compare(account[:], genMarker) > 0 && blob != nil { + t.Fatalf("test %d: post-marker (%x) account database access (%x) succeeded: %x", i, genMarker, account, blob) + } + if bytes.Compare(account[:], genMarker) <= 0 && !bytes.Equal(blob, data) { + t.Fatalf("test %d: pre-marker (%x) account database access (%x) mismatch: have %x, want %x", i, genMarker, account, blob, data) + } + } + assertDatabaseAccount(accNoModNoCache, accNoModNoCache[:]) + assertDatabaseAccount(accNoModCache, accNoModCache[:]) + assertDatabaseAccount(accModNoCache, reverse(accModNoCache[:])) + assertDatabaseAccount(accModCache, reverse(accModCache[:])) + assertDatabaseAccount(accDelNoCache, nil) + assertDatabaseAccount(accDelCache, nil) + + // assertDatabaseStorage ensures that a storage slot inside the database + // matches the given blob if it's already covered by the disk snapshot, + // and does not exist otherwise. + assertDatabaseStorage := func(account common.Hash, slot common.Hash, data []byte) { + t.Helper() + blob := rawdb.ReadStorageSnapshot(db, account, slot) + if bytes.Compare(append(account[:], slot[:]...), genMarker) > 0 && blob != nil { + t.Fatalf("test %d: post-marker (%x) storage database access (%x:%x) succeeded: %x", i, genMarker, account, slot, blob) + } + if bytes.Compare(append(account[:], slot[:]...), genMarker) <= 0 && !bytes.Equal(blob, data) { + t.Fatalf("test %d: pre-marker (%x) storage database access (%x:%x) mismatch: have %x, want %x", i, genMarker, account, slot, blob, data) + } + } + assertDatabaseStorage(conNoModNoCache, conNoModNoCacheSlot, conNoModNoCacheSlot[:]) + assertDatabaseStorage(conNoModCache, conNoModCacheSlot, conNoModCacheSlot[:]) + assertDatabaseStorage(conModNoCache, conModNoCacheSlot, reverse(conModNoCacheSlot[:])) + assertDatabaseStorage(conModCache, conModCacheSlot, reverse(conModCacheSlot[:])) + assertDatabaseStorage(conDelNoCache, conDelNoCacheSlot, nil) + assertDatabaseStorage(conDelCache, conDelCacheSlot, nil) + assertDatabaseStorage(conNukeNoCache, conNukeNoCacheSlot, nil) + assertDatabaseStorage(conNukeCache, conNukeCacheSlot, nil) + } +} + +// Tests that when the bottom-most diff layer is merged into the disk +// layer whether the corresponding generator is persisted correctly. +func TestDiskGeneratorPersistence(t *testing.T) { + var ( + accOne = randomHash() + accTwo = randomHash() + accOneSlotOne = randomHash() + accOneSlotTwo = randomHash() + + accThree = randomHash() + accThreeSlot = randomHash() + baseRoot = randomHash() + diffRoot = randomHash() + diffTwoRoot = randomHash() + genMarker = append(randomHash().Bytes(), randomHash().Bytes()...) + ) + // Testing scenario 1, the disk layer is still under the construction. + db := rawdb.NewMemoryDatabase() + + rawdb.WriteAccountSnapshot(db, accOne, accOne[:]) + rawdb.WriteStorageSnapshot(db, accOne, accOneSlotOne, accOneSlotOne[:]) + rawdb.WriteStorageSnapshot(db, accOne, accOneSlotTwo, accOneSlotTwo[:]) + rawdb.WriteSnapshotRoot(db, baseRoot) + + // Create a disk layer based on all above updates + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + baseRoot: &diskLayer{ + diskdb: db, + cache: fastcache.New(500 * 1024), + root: baseRoot, + genMarker: genMarker, + }, + }, + } + // Modify or delete some accounts, flatten everything onto disk + if err := snaps.Update(diffRoot, baseRoot, nil, map[common.Hash][]byte{ + accTwo: accTwo[:], + }, nil); err != nil { + t.Fatalf("failed to update snapshot tree: %v", err) + } + if err := snaps.Cap(diffRoot, 0); err != nil { + t.Fatalf("failed to flatten snapshot tree: %v", err) + } + blob := rawdb.ReadSnapshotGenerator(db) + var generator journalGenerator + if err := rlp.DecodeBytes(blob, &generator); err != nil { + t.Fatalf("Failed to decode snapshot generator %v", err) + } + if !bytes.Equal(generator.Marker, genMarker) { + t.Fatalf("Generator marker is not matched") + } + // Test scenario 2, the disk layer is fully generated + // Modify or delete some accounts, flatten everything onto disk + if err := snaps.Update(diffTwoRoot, diffRoot, nil, map[common.Hash][]byte{ + accThree: accThree.Bytes(), + }, map[common.Hash]map[common.Hash][]byte{ + accThree: {accThreeSlot: accThreeSlot.Bytes()}, + }); err != nil { + t.Fatalf("failed to update snapshot tree: %v", err) + } + diskLayer := snaps.layers[snaps.diskRoot()].(*diskLayer) + diskLayer.genMarker = nil // Construction finished + if err := snaps.Cap(diffTwoRoot, 0); err != nil { + t.Fatalf("failed to flatten snapshot tree: %v", err) + } + blob = rawdb.ReadSnapshotGenerator(db) + if err := rlp.DecodeBytes(blob, &generator); err != nil { + t.Fatalf("Failed to decode snapshot generator %v", err) + } + if len(generator.Marker) != 0 { + t.Fatalf("Failed to update snapshot generator") + } +} + +// Tests that merging something into a disk layer persists it into the database +// and invalidates any previously written and cached values, discarding anything +// after the in-progress generation marker. +// +// This test case is a tiny specialized case of TestDiskPartialMerge, which tests +// some very specific cornercases that random tests won't ever trigger. +func TestDiskMidAccountPartialMerge(t *testing.T) { + // TODO(@karalabe) ? +} + +// TestDiskSeek tests that seek-operations work on the disk layer +func TestDiskSeek(t *testing.T) { + // Create some accounts in the disk layer + db := rawdb.NewMemoryDatabase() + defer db.Close() + + // Fill even keys [0,2,4...] + for i := 0; i < 0xff; i += 2 { + acc := common.Hash{byte(i)} + rawdb.WriteAccountSnapshot(db, acc, acc[:]) + } + // Add an 'higher' key, with incorrect (higher) prefix + highKey := []byte{rawdb.SnapshotAccountPrefix[0] + 1} + db.Put(highKey, []byte{0xff, 0xff}) + + baseRoot := randomHash() + rawdb.WriteSnapshotRoot(db, baseRoot) + + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + baseRoot: &diskLayer{ + diskdb: db, + cache: fastcache.New(500 * 1024), + root: baseRoot, + }, + }, + } + // Test some different seek positions + type testcase struct { + pos byte + expkey byte + } + var cases = []testcase{ + {0xff, 0x55}, // this should exit immediately without checking key + {0x01, 0x02}, + {0xfe, 0xfe}, + {0xfd, 0xfe}, + {0x00, 0x00}, + } + for i, tc := range cases { + it, err := snaps.AccountIterator(baseRoot, common.Hash{tc.pos}) + if err != nil { + t.Fatalf("case %d, error: %v", i, err) + } + count := 0 + for it.Next() { + k, v, err := it.Hash()[0], it.Account()[0], it.Error() + if err != nil { + t.Fatalf("test %d, item %d, error: %v", i, count, err) + } + // First item in iterator should have the expected key + if count == 0 && k != tc.expkey { + t.Fatalf("test %d, item %d, got %v exp %v", i, count, k, tc.expkey) + } + count++ + if v != k { + t.Fatalf("test %d, item %d, value wrong, got %v exp %v", i, count, v, k) + } + } + } +} diff --git a/core/state/snapshot/generate.go b/core/state/snapshot/generate.go new file mode 100644 index 00000000..bf714db4 --- /dev/null +++ b/core/state/snapshot/generate.go @@ -0,0 +1,747 @@ +// 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 snapshot + +import ( + "bytes" + "errors" + "fmt" + "math/big" + "time" + + "github.com/VictoriaMetrics/fastcache" + "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/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + // 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) + + // accountCheckRange is the upper limit of the number of accounts involved in + // each range check. This is a value estimated based on experience. If this + // range is too large, the failure rate of range proof will increase. Otherwise, + // if the range is too small, the efficiency of the state recovery will decrease. + accountCheckRange = 128 + + // storageCheckRange is the upper limit of the number of storage slots involved + // in each range check. This is a value estimated based on experience. If this + // range is too large, the failure rate of range proof will increase. Otherwise, + // if the range is too small, the efficiency of the state recovery will decrease. + storageCheckRange = 1024 + + // errMissingTrie is returned if the target trie is missing while the generation + // is running. In this case the generation is aborted and wait the new signal. + errMissingTrie = errors.New("missing trie") +) + +// generateSnapshot regenerates a brand new snapshot based on an existing state +// database and head block asynchronously. The snapshot is returned immediately +// and generation is continued in the background until done. +func generateSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash) *diskLayer { + // Create a new disk layer with an initialized state marker at zero + var ( + stats = &generatorStats{start: time.Now()} + batch = diskdb.NewBatch() + genMarker = []byte{} // Initialized but empty! + ) + rawdb.WriteSnapshotRoot(batch, root) + journalProgress(batch, genMarker, stats) + if err := batch.Write(); err != nil { + log.Crit("Failed to write initialized state marker", "err", err) + } + base := &diskLayer{ + diskdb: diskdb, + triedb: triedb, + root: root, + cache: fastcache.New(cache * 1024 * 1024), + genMarker: genMarker, + genPending: make(chan struct{}), + genAbort: make(chan chan *generatorStats), + } + go base.generate(stats) + log.Debug("Start snapshot generation", "root", root) + return base +} + +// journalProgress persists the generator stats into the database to resume later. +func journalProgress(db ethdb.KeyValueWriter, marker []byte, stats *generatorStats) { + // Write out the generator marker. Note it's a standalone disk layer generator + // which is not mixed with journal. It's ok if the generator is persisted while + // journal is not. + entry := journalGenerator{ + Done: marker == nil, + Marker: marker, + } + if stats != nil { + entry.Accounts = stats.accounts + entry.Slots = stats.slots + entry.Storage = uint64(stats.storage) + } + blob, err := rlp.EncodeToBytes(entry) + if err != nil { + panic(err) // Cannot happen, here to catch dev errors + } + var logstr string + switch { + case marker == nil: + logstr = "done" + case bytes.Equal(marker, []byte{}): + logstr = "empty" + case len(marker) == common.HashLength: + logstr = fmt.Sprintf("%#x", marker) + default: + logstr = fmt.Sprintf("%#x:%#x", marker[:common.HashLength], marker[common.HashLength:]) + } + log.Debug("Journalled generator progress", "progress", logstr) + rawdb.WriteSnapshotGenerator(db, blob) +} + +// proofResult contains the output of range proving which can be used +// for further processing regardless if it is successful or not. +type proofResult struct { + keys [][]byte // The key set of all elements being iterated, even proving is failed + vals [][]byte // The val set of all elements being iterated, even proving is failed + diskMore bool // Set when the database has extra snapshot states since last iteration + trieMore bool // Set when the trie has extra snapshot states(only meaningful for successful proving) + proofErr error // Indicator whether the given state range is valid or not + tr *trie.Trie // The trie, in case the trie was resolved by the prover (may be nil) +} + +// valid returns the indicator that range proof is successful or not. +func (result *proofResult) valid() bool { + return result.proofErr == nil +} + +// last returns the last verified element key regardless of whether the range proof is +// successful or not. Nil is returned if nothing involved in the proving. +func (result *proofResult) last() []byte { + var last []byte + if len(result.keys) > 0 { + last = result.keys[len(result.keys)-1] + } + return last +} + +// forEach iterates all the visited elements and applies the given callback on them. +// The iteration is aborted if the callback returns non-nil error. +func (result *proofResult) forEach(callback func(key []byte, val []byte) error) error { + for i := 0; i < len(result.keys); i++ { + key, val := result.keys[i], result.vals[i] + if err := callback(key, val); err != nil { + return err + } + } + return nil +} + +// proveRange proves the snapshot segment with particular prefix is "valid". +// The iteration start point will be assigned if the iterator is restored from +// the last interruption. Max will be assigned in order to limit the maximum +// amount of data involved in each iteration. +// +// The proof result will be returned if the range proving is finished, otherwise +// the error will be returned to abort the entire procedure. +func (dl *diskLayer) proveRange(ctx *generatorContext, owner common.Hash, root common.Hash, prefix []byte, kind string, origin []byte, max int, valueConvertFn func([]byte) ([]byte, error)) (*proofResult, error) { + var ( + keys [][]byte + vals [][]byte + proof = rawdb.NewMemoryDatabase() + diskMore = false + iter = ctx.iterator(kind) + start = time.Now() + min = append(prefix, origin...) + ) + for iter.Next() { + // Ensure the iterated item is always equal or larger than the given origin. + key := iter.Key() + if bytes.Compare(key, min) < 0 { + return nil, errors.New("invalid iteration position") + } + // Ensure the iterated item still fall in the specified prefix. If + // not which means the items in the specified area are all visited. + // Move the iterator a step back since we iterate one extra element + // out. + if !bytes.Equal(key[:len(prefix)], prefix) { + iter.Hold() + break + } + // Break if we've reached the max size, and signal that we're not + // done yet. Move the iterator a step back since we iterate one + // extra element out. + if len(keys) == max { + iter.Hold() + diskMore = true + break + } + keys = append(keys, common.CopyBytes(key[len(prefix):])) + + if valueConvertFn == nil { + vals = append(vals, common.CopyBytes(iter.Value())) + } else { + val, err := valueConvertFn(iter.Value()) + if err != nil { + // Special case, the state data is corrupted (invalid slim-format account), + // don't abort the entire procedure directly. Instead, let the fallback + // generation to heal the invalid data. + // + // Here append the original value to ensure that the number of key and + // value are aligned. + vals = append(vals, common.CopyBytes(iter.Value())) + log.Error("Failed to convert account state data", "err", err) + } else { + vals = append(vals, val) + } + } + } + // Update metrics for database iteration and merkle proving + if kind == snapStorage { + snapStorageSnapReadCounter.Inc(time.Since(start).Nanoseconds()) + } else { + snapAccountSnapReadCounter.Inc(time.Since(start).Nanoseconds()) + } + defer func(start time.Time) { + if kind == snapStorage { + snapStorageProveCounter.Inc(time.Since(start).Nanoseconds()) + } else { + snapAccountProveCounter.Inc(time.Since(start).Nanoseconds()) + } + }(time.Now()) + + // The snap state is exhausted, pass the entire key/val set for verification + if origin == nil && !diskMore { + stackTr := trie.NewStackTrieWithOwner(nil, owner) + for i, key := range keys { + stackTr.TryUpdate(key, vals[i]) + } + if gotRoot := stackTr.Hash(); gotRoot != root { + return &proofResult{ + keys: keys, + vals: vals, + proofErr: fmt.Errorf("wrong root: have %#x want %#x", gotRoot, root), + }, nil + } + return &proofResult{keys: keys, vals: vals}, nil + } + // Snap state is chunked, generate edge proofs for verification. + tr, err := trie.New(owner, root, dl.triedb) + if err != nil { + ctx.stats.Log("Trie missing, state snapshotting paused", dl.root, dl.genMarker) + return nil, errMissingTrie + } + // Firstly find out the key of last iterated element. + var last []byte + if len(keys) > 0 { + last = keys[len(keys)-1] + } + // Generate the Merkle proofs for the first and last element + if origin == nil { + origin = common.Hash{}.Bytes() + } + if err := tr.Prove(origin, 0, proof); err != nil { + log.Debug("Failed to prove range", "kind", kind, "origin", origin, "err", err) + return &proofResult{ + keys: keys, + vals: vals, + diskMore: diskMore, + proofErr: err, + tr: tr, + }, nil + } + if last != nil { + if err := tr.Prove(last, 0, proof); err != nil { + log.Debug("Failed to prove range", "kind", kind, "last", last, "err", err) + return &proofResult{ + keys: keys, + vals: vals, + diskMore: diskMore, + proofErr: err, + tr: tr, + }, nil + } + } + // Verify the snapshot segment with range prover, ensure that all flat states + // in this range correspond to merkle trie. + cont, err := trie.VerifyRangeProof(root, origin, last, keys, vals, proof) + return &proofResult{ + keys: keys, + vals: vals, + diskMore: diskMore, + trieMore: cont, + proofErr: err, + tr: tr}, + nil +} + +// onStateCallback is a function that is called by generateRange, when processing a range of +// accounts or storage slots. For each element, the callback is invoked. +// +// - If 'delete' is true, then this element (and potential slots) needs to be deleted from the snapshot. +// - If 'write' is true, then this element needs to be updated with the 'val'. +// - If 'write' is false, then this element is already correct, and needs no update. +// The 'val' is the canonical encoding of the value (not the slim format for accounts) +// +// However, for accounts, the storage trie of the account needs to be checked. Also, +// dangling storages(storage exists but the corresponding account is missing) need to +// be cleaned up. +type onStateCallback func(key []byte, val []byte, write bool, delete bool) error + +// generateRange generates the state segment with particular prefix. Generation can +// either verify the correctness of existing state through range-proof and skip +// generation, or iterate trie to regenerate state on demand. +func (dl *diskLayer) generateRange(ctx *generatorContext, owner common.Hash, root common.Hash, prefix []byte, kind string, origin []byte, max int, onState onStateCallback, valueConvertFn func([]byte) ([]byte, error)) (bool, []byte, error) { + // Use range prover to check the validity of the flat state in the range + result, err := dl.proveRange(ctx, owner, root, prefix, kind, origin, max, valueConvertFn) + if err != nil { + return false, nil, err + } + last := result.last() + + // Construct contextual logger + logCtx := []interface{}{"kind", kind, "prefix", hexutil.Encode(prefix)} + if len(origin) > 0 { + logCtx = append(logCtx, "origin", hexutil.Encode(origin)) + } + logger := log.New(logCtx...) + + // The range prover says the range is correct, skip trie iteration + if result.valid() { + snapSuccessfulRangeProofMeter.Mark(1) + logger.Trace("Proved state range", "last", hexutil.Encode(last)) + + // The verification is passed, process each state with the given + // callback function. If this state represents a contract, the + // corresponding storage check will be performed in the callback + if err := result.forEach(func(key []byte, val []byte) error { return onState(key, val, false, false) }); err != nil { + return false, nil, err + } + // Only abort the iteration when both database and trie are exhausted + return !result.diskMore && !result.trieMore, last, nil + } + logger.Trace("Detected outdated state range", "last", hexutil.Encode(last), "err", result.proofErr) + snapFailedRangeProofMeter.Mark(1) + + // Special case, the entire trie is missing. In the original trie scheme, + // all the duplicated subtries will be filtered out (only one copy of data + // will be stored). While in the snapshot model, all the storage tries + // belong to different contracts will be kept even they are duplicated. + // Track it to a certain extent remove the noise data used for statistics. + if origin == nil && last == nil { + meter := snapMissallAccountMeter + if kind == snapStorage { + meter = snapMissallStorageMeter + } + meter.Mark(1) + } + // We use the snap data to build up a cache which can be used by the + // main account trie as a primary lookup when resolving hashes + var snapNodeCache ethdb.KeyValueStore + if len(result.keys) > 0 { + snapNodeCache = memorydb.New() + snapTrieDb := trie.NewDatabase(snapNodeCache) + snapTrie, _ := trie.New(owner, common.Hash{}, snapTrieDb) + for i, key := range result.keys { + snapTrie.Update(key, result.vals[i]) + } + root, nodes, _ := snapTrie.Commit(false) + if nodes != nil { + snapTrieDb.Update(trie.NewWithNodeSet(nodes)) + } + snapTrieDb.Commit(root, false, nil) + } + // Construct the trie for state iteration, reuse the trie + // if it's already opened with some nodes resolved. + tr := result.tr + if tr == nil { + tr, err = trie.New(owner, root, dl.triedb) + if err != nil { + ctx.stats.Log("Trie missing, state snapshotting paused", dl.root, dl.genMarker) + return false, nil, errMissingTrie + } + } + var ( + trieMore bool + nodeIt = tr.NodeIterator(origin) + iter = trie.NewIterator(nodeIt) + kvkeys, kvvals = result.keys, result.vals + + // counters + count = 0 // number of states delivered by iterator + created = 0 // states created from the trie + updated = 0 // states updated from the trie + deleted = 0 // states not in trie, but were in snapshot + untouched = 0 // states already correct + + // timers + start = time.Now() + internal time.Duration + ) + nodeIt.AddResolver(snapNodeCache) + + for iter.Next() { + if last != nil && bytes.Compare(iter.Key, last) > 0 { + trieMore = true + break + } + count++ + write := true + created++ + for len(kvkeys) > 0 { + if cmp := bytes.Compare(kvkeys[0], iter.Key); cmp < 0 { + // delete the key + istart := time.Now() + if err := onState(kvkeys[0], nil, false, true); err != nil { + return false, nil, err + } + kvkeys = kvkeys[1:] + kvvals = kvvals[1:] + deleted++ + internal += time.Since(istart) + continue + } else if cmp == 0 { + // the snapshot key can be overwritten + created-- + if write = !bytes.Equal(kvvals[0], iter.Value); write { + updated++ + } else { + untouched++ + } + kvkeys = kvkeys[1:] + kvvals = kvvals[1:] + } + break + } + istart := time.Now() + if err := onState(iter.Key, iter.Value, write, false); err != nil { + return false, nil, err + } + internal += time.Since(istart) + } + if iter.Err != nil { + return false, nil, iter.Err + } + // Delete all stale snapshot states remaining + istart := time.Now() + for _, key := range kvkeys { + if err := onState(key, nil, false, true); err != nil { + return false, nil, err + } + deleted += 1 + } + internal += time.Since(istart) + + // Update metrics for counting trie iteration + if kind == snapStorage { + snapStorageTrieReadCounter.Inc((time.Since(start) - internal).Nanoseconds()) + } else { + snapAccountTrieReadCounter.Inc((time.Since(start) - internal).Nanoseconds()) + } + logger.Debug("Regenerated state range", "root", root, "last", hexutil.Encode(last), + "count", count, "created", created, "updated", updated, "untouched", untouched, "deleted", deleted) + + // If there are either more trie items, or there are more snap items + // (in the next segment), then we need to keep working + return !trieMore && !result.diskMore, last, nil +} + +// checkAndFlush checks if an interruption signal is received or the +// batch size has exceeded the allowance. +func (dl *diskLayer) checkAndFlush(ctx *generatorContext, current []byte) error { + var abort chan *generatorStats + select { + case abort = <-dl.genAbort: + default: + } + if ctx.batch.ValueSize() > ethdb.IdealBatchSize || abort != nil { + if bytes.Compare(current, dl.genMarker) < 0 { + log.Error("Snapshot generator went backwards", "current", fmt.Sprintf("%x", current), "genMarker", fmt.Sprintf("%x", dl.genMarker)) + } + // Flush out the batch anyway no matter it's empty or not. + // It's possible that all the states are recovered and the + // generation indeed makes progress. + journalProgress(ctx.batch, current, ctx.stats) + + if err := ctx.batch.Write(); err != nil { + return err + } + ctx.batch.Reset() + + dl.lock.Lock() + dl.genMarker = current + dl.lock.Unlock() + + if abort != nil { + ctx.stats.Log("Aborting state snapshot generation", dl.root, current) + return newAbortErr(abort) // bubble up an error for interruption + } + // Don't hold the iterators too long, release them to let compactor works + ctx.reopenIterator(snapAccount) + ctx.reopenIterator(snapStorage) + } + if time.Since(ctx.logged) > 8*time.Second { + ctx.stats.Log("Generating state snapshot", dl.root, current) + ctx.logged = time.Now() + } + return nil +} + +// generateStorages generates the missing storage slots of the specific contract. +// It's supposed to restart the generation from the given origin position. +func generateStorages(ctx *generatorContext, dl *diskLayer, account common.Hash, storageRoot common.Hash, storeMarker []byte) error { + onStorage := func(key []byte, val []byte, write bool, delete bool) error { + defer func(start time.Time) { + snapStorageWriteCounter.Inc(time.Since(start).Nanoseconds()) + }(time.Now()) + + if delete { + rawdb.DeleteStorageSnapshot(ctx.batch, account, common.BytesToHash(key)) + snapWipedStorageMeter.Mark(1) + return nil + } + if write { + rawdb.WriteStorageSnapshot(ctx.batch, account, common.BytesToHash(key), val) + snapGeneratedStorageMeter.Mark(1) + } else { + snapRecoveredStorageMeter.Mark(1) + } + ctx.stats.storage += common.StorageSize(1 + 2*common.HashLength + len(val)) + ctx.stats.slots++ + + // If we've exceeded our batch allowance or termination was requested, flush to disk + if err := dl.checkAndFlush(ctx, append(account[:], key...)); err != nil { + return err + } + return nil + } + // Loop for re-generating the missing storage slots. + var origin = common.CopyBytes(storeMarker) + for { + exhausted, last, err := dl.generateRange(ctx, account, storageRoot, append(rawdb.SnapshotStoragePrefix, account.Bytes()...), snapStorage, origin, storageCheckRange, onStorage, nil) + if err != nil { + return err // The procedure it aborted, either by external signal or internal error. + } + // Abort the procedure if the entire contract storage is generated + if exhausted { + break + } + if origin = increaseKey(last); origin == nil { + break // special case, the last is 0xffffffff...fff + } + } + return nil +} + +// generateAccounts generates the missing snapshot accounts as well as their +// storage slots in the main trie. It's supposed to restart the generation +// from the given origin position. +func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) error { + onAccount := func(key []byte, val []byte, write bool, delete bool) error { + // Make sure to clear all dangling storages before this account + account := common.BytesToHash(key) + ctx.removeStorageBefore(account) + + start := time.Now() + if delete { + rawdb.DeleteAccountSnapshot(ctx.batch, account) + snapWipedAccountMeter.Mark(1) + snapAccountWriteCounter.Inc(time.Since(start).Nanoseconds()) + + ctx.removeStorageAt(account) + return nil + } + // Retrieve the current account and flatten it into the internal format + var acc struct { + Nonce uint64 + Balance *big.Int + Root common.Hash + CodeHash []byte + } + if err := rlp.DecodeBytes(val, &acc); err != nil { + log.Crit("Invalid account encountered during snapshot creation", "err", err) + } + // If the account is not yet in-progress, write it out + if accMarker == nil || !bytes.Equal(account[:], accMarker) { + dataLen := len(val) // Approximate size, saves us a round of RLP-encoding + if !write { + if bytes.Equal(acc.CodeHash, emptyCode[:]) { + dataLen -= 32 + } + if acc.Root == emptyRoot { + dataLen -= 32 + } + snapRecoveredAccountMeter.Mark(1) + } else { + data := SlimAccountRLP(acc.Nonce, acc.Balance, acc.Root, acc.CodeHash) + dataLen = len(data) + rawdb.WriteAccountSnapshot(ctx.batch, account, data) + snapGeneratedAccountMeter.Mark(1) + } + ctx.stats.storage += common.StorageSize(1 + common.HashLength + dataLen) + ctx.stats.accounts++ + } + // If the snap generation goes here after interrupted, genMarker may go backward + // when last genMarker is consisted of accountHash and storageHash + marker := account[:] + if accMarker != nil && bytes.Equal(marker, accMarker) && len(dl.genMarker) > common.HashLength { + marker = dl.genMarker[:] + } + // If we've exceeded our batch allowance or termination was requested, flush to disk + if err := dl.checkAndFlush(ctx, marker); err != nil { + return err + } + snapAccountWriteCounter.Inc(time.Since(start).Nanoseconds()) // let's count flush time as well + + // If the iterated account is the contract, create a further loop to + // verify or regenerate the contract storage. + if acc.Root == emptyRoot { + ctx.removeStorageAt(account) + } else { + var storeMarker []byte + if accMarker != nil && bytes.Equal(account[:], accMarker) && len(dl.genMarker) > common.HashLength { + storeMarker = dl.genMarker[common.HashLength:] + } + if err := generateStorages(ctx, dl, account, acc.Root, storeMarker); err != nil { + return err + } + } + // Some account processed, unmark the marker + accMarker = nil + return nil + } + // Always reset the initial account range as 1 whenever recover from the + // interruption. TODO(rjl493456442) can we remove it? + var accountRange = accountCheckRange + if len(accMarker) > 0 { + accountRange = 1 + } + origin := common.CopyBytes(accMarker) + for { + exhausted, last, err := dl.generateRange(ctx, common.Hash{}, dl.root, rawdb.SnapshotAccountPrefix, snapAccount, origin, accountRange, onAccount, FullAccountRLP) + if err != nil { + return err // The procedure it aborted, either by external signal or internal error. + } + origin = increaseKey(last) + + // Last step, cleanup the storages after the last account. + // All the left storages should be treated as dangling. + if origin == nil || exhausted { + ctx.removeStorageLeft() + break + } + accountRange = accountCheckRange + } + return nil +} + +// generate is a background thread that iterates over the state and storage tries, +// constructing the state snapshot. All the arguments are purely for statistics +// gathering and logging, since the method surfs the blocks as they arrive, often +// being restarted. +func (dl *diskLayer) generate(stats *generatorStats) { + var ( + accMarker []byte + abort chan *generatorStats + ) + if len(dl.genMarker) > 0 { // []byte{} is the start, use nil for that + accMarker = dl.genMarker[:common.HashLength] + } + stats.Log("Resuming state snapshot generation", dl.root, dl.genMarker) + + // Initialize the global generator context. The snapshot iterators are + // opened at the interrupted position because the assumption is held + // that all the snapshot data are generated correctly before the marker. + // Even if the snapshot data is updated during the interruption (before + // or at the marker), the assumption is still held. + // For the account or storage slot at the interruption, they will be + // processed twice by the generator(they are already processed in the + // last run) but it's fine. + ctx := newGeneratorContext(stats, dl.diskdb, accMarker, dl.genMarker) + defer ctx.close() + + if err := generateAccounts(ctx, dl, accMarker); err != nil { + // Extract the received interruption signal if exists + if aerr, ok := err.(*abortErr); ok { + abort = aerr.abort + } + // Aborted by internal error, wait the signal + if abort == nil { + abort = <-dl.genAbort + } + abort <- stats + return + } + // Snapshot fully generated, set the marker to nil. + // Note even there is nothing to commit, persist the + // generator anyway to mark the snapshot is complete. + journalProgress(ctx.batch, nil, stats) + if err := ctx.batch.Write(); err != nil { + log.Error("Failed to flush batch", "err", err) + + abort = <-dl.genAbort + abort <- stats + return + } + ctx.batch.Reset() + + log.Info("Generated state snapshot", "accounts", stats.accounts, "slots", stats.slots, + "storage", stats.storage, "dangling", stats.dangling, "elapsed", common.PrettyDuration(time.Since(stats.start))) + + dl.lock.Lock() + dl.genMarker = nil + close(dl.genPending) + dl.lock.Unlock() + + // Someone will be looking for us, wait it out + abort = <-dl.genAbort + abort <- nil +} + +// increaseKey increase the input key by one bit. Return nil if the entire +// addition operation overflows. +func increaseKey(key []byte) []byte { + for i := len(key) - 1; i >= 0; i-- { + key[i]++ + if key[i] != 0x0 { + return key + } + } + return nil +} + +// abortErr wraps an interruption signal received to represent the +// generation is aborted by external processes. +type abortErr struct { + abort chan *generatorStats +} + +func newAbortErr(abort chan *generatorStats) error { + return &abortErr{abort: abort} +} + +func (err *abortErr) Error() string { + return "aborted" +} diff --git a/core/state/snapshot/generate_test.go b/core/state/snapshot/generate_test.go new file mode 100644 index 00000000..5e5ded61 --- /dev/null +++ b/core/state/snapshot/generate_test.go @@ -0,0 +1,873 @@ +// 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 snapshot + +import ( + "fmt" + "math/big" + "os" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +func hashData(input []byte) common.Hash { + var hasher = sha3.NewLegacyKeccak256() + var hash common.Hash + hasher.Reset() + hasher.Write(input) + hasher.Sum(hash[:0]) + return hash +} + +// Tests that snapshot generation from an empty database. +func TestGeneration(t *testing.T) { + // We can't use statedb to make a test trie (circular dependency), so make + // a fake one manually. We're going with a small account trie of 3 accounts, + // two of which also has the same 3-slot storage trie attached. + var helper = newHelper() + stRoot := helper.makeStorageTrie(common.Hash{}, common.Hash{}, []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, false) + + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) + + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + + root, snap := helper.CommitAndGenerate() + if have, want := root, common.HexToHash("0xe3712f1a226f3782caca78ca770ccc19ee000552813a9f59d479f8611db9b1fd"); have != want { + t.Fatalf("have %#x want %#x", have, want) + } + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation with existent flat state. +func TestGenerateExistentState(t *testing.T) { + // We can't use statedb to make a test trie (circular dependency), so make + // a fake one manually. We're going with a small account trie of 3 accounts, + // two of which also has the same 3-slot storage trie attached. + var helper = newHelper() + + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-1", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + helper.addSnapAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + + stRoot = helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-3", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +func checkSnapRoot(t *testing.T, snap *diskLayer, trieRoot common.Hash) { + t.Helper() + + accIt := snap.AccountIterator(common.Hash{}) + defer accIt.Release() + + snapRoot, err := generateTrieRoot(nil, accIt, common.Hash{}, stackTrieGenerate, + func(db ethdb.KeyValueWriter, accountHash, codeHash common.Hash, stat *generateStats) (common.Hash, error) { + storageIt, _ := snap.StorageIterator(accountHash, common.Hash{}) + defer storageIt.Release() + + hash, err := generateTrieRoot(nil, storageIt, accountHash, stackTrieGenerate, nil, stat, false) + if err != nil { + return common.Hash{}, err + } + return hash, nil + }, newGenerateStats(), true) + if err != nil { + t.Fatal(err) + } + if snapRoot != trieRoot { + t.Fatalf("snaproot: %#x != trieroot #%x", snapRoot, trieRoot) + } + if err := CheckDanglingStorage(snap.diskdb); err != nil { + t.Fatalf("Detected dangling storages: %v", err) + } +} + +type testHelper struct { + diskdb ethdb.Database + triedb *trie.Database + accTrie *trie.StateTrie + nodes *trie.MergedNodeSet +} + +func newHelper() *testHelper { + diskdb := rawdb.NewMemoryDatabase() + triedb := trie.NewDatabase(diskdb) + accTrie, _ := trie.NewStateTrie(common.Hash{}, common.Hash{}, triedb) + return &testHelper{ + diskdb: diskdb, + triedb: triedb, + accTrie: accTrie, + nodes: trie.NewMergedNodeSet(), + } +} + +func (t *testHelper) addTrieAccount(acckey string, acc *Account) { + val, _ := rlp.EncodeToBytes(acc) + t.accTrie.Update([]byte(acckey), val) +} + +func (t *testHelper) addSnapAccount(acckey string, acc *Account) { + val, _ := rlp.EncodeToBytes(acc) + key := hashData([]byte(acckey)) + rawdb.WriteAccountSnapshot(t.diskdb, key, val) +} + +func (t *testHelper) addAccount(acckey string, acc *Account) { + t.addTrieAccount(acckey, acc) + t.addSnapAccount(acckey, acc) +} + +func (t *testHelper) addSnapStorage(accKey string, keys []string, vals []string) { + accHash := hashData([]byte(accKey)) + for i, key := range keys { + rawdb.WriteStorageSnapshot(t.diskdb, accHash, hashData([]byte(key)), []byte(vals[i])) + } +} + +func (t *testHelper) makeStorageTrie(stateRoot, owner common.Hash, keys []string, vals []string, commit bool) []byte { + stTrie, _ := trie.NewStateTrie(owner, common.Hash{}, t.triedb) + for i, k := range keys { + stTrie.Update([]byte(k), []byte(vals[i])) + } + if !commit { + return stTrie.Hash().Bytes() + } + root, nodes, _ := stTrie.Commit(false) + if nodes != nil { + t.nodes.Merge(nodes) + } + return root.Bytes() +} + +func (t *testHelper) Commit() common.Hash { + root, nodes, _ := t.accTrie.Commit(true) + if nodes != nil { + t.nodes.Merge(nodes) + } + t.triedb.Update(t.nodes) + t.triedb.Commit(root, false, nil) + return root +} + +func (t *testHelper) CommitAndGenerate() (common.Hash, *diskLayer) { + root := t.Commit() + snap := generateSnapshot(t.diskdb, t.triedb, 16, root) + return root, snap +} + +// Tests that snapshot generation with existent flat state, where the flat state +// contains some errors: +// - the contract with empty storage root but has storage entries in the disk +// - the contract with non empty storage root but empty storage slots +// - the contract(non-empty storage) misses some storage slots +// - miss in the beginning +// - miss in the middle +// - miss in the end +// - the contract(non-empty storage) has wrong storage slots +// - wrong slots in the beginning +// - wrong slots in the middle +// - wrong slots in the end +// - the contract(non-empty storage) has extra storage slots +// - extra slots in the beginning +// - extra slots in the middle +// - extra slots in the end +func TestGenerateExistentStateWithWrongStorage(t *testing.T) { + helper := newHelper() + + // Account one, empty root but non-empty database + helper.addAccount("acc-1", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-1", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Account two, non empty root but empty database + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-2")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-2", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + + // Miss slots + { + // Account three, non empty root but misses slots in the beginning + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-3", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-3", []string{"key-2", "key-3"}, []string{"val-2", "val-3"}) + + // Account four, non empty root but misses slots in the middle + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-4")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-4", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-4", []string{"key-1", "key-3"}, []string{"val-1", "val-3"}) + + // Account five, non empty root but misses slots in the end + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-5")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-5", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-5", []string{"key-1", "key-2"}, []string{"val-1", "val-2"}) + } + + // Wrong storage slots + { + // Account six, non empty root but wrong slots in the beginning + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-6")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-6", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-6", []string{"key-1", "key-2", "key-3"}, []string{"badval-1", "val-2", "val-3"}) + + // Account seven, non empty root but wrong slots in the middle + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-7")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-7", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-7", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "badval-2", "val-3"}) + + // Account eight, non empty root but wrong slots in the end + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-8")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-8", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-8", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "badval-3"}) + + // Account 9, non empty root but rotated slots + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-9")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-9", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-9", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-3", "val-2"}) + } + + // Extra storage slots + { + // Account 10, non empty root but extra slots in the beginning + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-10")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-10", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-10", []string{"key-0", "key-1", "key-2", "key-3"}, []string{"val-0", "val-1", "val-2", "val-3"}) + + // Account 11, non empty root but extra slots in the middle + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-11")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-11", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-11", []string{"key-1", "key-2", "key-2-1", "key-3"}, []string{"val-1", "val-2", "val-2-1", "val-3"}) + + // Account 12, non empty root but extra slots in the end + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-12")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-12", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapStorage("acc-12", []string{"key-1", "key-2", "key-3", "key-4"}, []string{"val-1", "val-2", "val-3", "val-4"}) + } + + root, snap := helper.CommitAndGenerate() + t.Logf("Root: %#x\n", root) // Root = 0x8746cce9fd9c658b2cfd639878ed6584b7a2b3e73bb40f607fcfa156002429a0 + + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation with existent flat state, where the flat state +// contains some errors: +// - miss accounts +// - wrong accounts +// - extra accounts +func TestGenerateExistentStateWithWrongAccounts(t *testing.T) { + helper := newHelper() + + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-2")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-4")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-6")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + + // Trie accounts [acc-1, acc-2, acc-3, acc-4, acc-6] + // Extra accounts [acc-0, acc-5, acc-7] + + // Missing accounts, only in the trie + { + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) // Beginning + helper.addTrieAccount("acc-4", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) // Middle + helper.addTrieAccount("acc-6", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) // End + } + + // Wrong accounts + { + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapAccount("acc-2", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: common.Hex2Bytes("0x1234")}) + + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addSnapAccount("acc-3", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + } + + // Extra accounts, only in the snap + { + helper.addSnapAccount("acc-0", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyRoot.Bytes()}) // before the beginning + helper.addSnapAccount("acc-5", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: common.Hex2Bytes("0x1234")}) // Middle + helper.addSnapAccount("acc-7", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyRoot.Bytes()}) // after the end + } + + root, snap := helper.CommitAndGenerate() + t.Logf("Root: %#x\n", root) // Root = 0x825891472281463511e7ebcc7f109e4f9200c20fa384754e11fd605cd98464e8 + + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation errors out correctly in case of a missing trie +// node in the account trie. +func TestGenerateCorruptAccountTrie(t *testing.T) { + // We can't use statedb to make a test trie (circular dependency), so make + // a fake one manually. We're going with a small account trie of 3 accounts, + // without any storage slots to keep the test smaller. + helper := newHelper() + + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) // 0xc7a30f39aff471c95d8a837497ad0e49b65be475cc0953540f80cfcdbdcd9074 + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7 + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) // 0x19ead688e907b0fab07176120dceec244a72aff2f0aa51e8b827584e378772f4 + + root := helper.Commit() // Root: 0xa04693ea110a31037fb5ee814308a6f1d76bdab0b11676bdf4541d2de55ba978 + + // Delete an account trie leaf and ensure the generator chokes + helper.triedb.Commit(root, false, nil) + helper.diskdb.Delete(common.HexToHash("0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7").Bytes()) + + snap := generateSnapshot(helper.diskdb, helper.triedb, 16, root) + select { + case <-snap.genPending: + // Snapshot generation succeeded + t.Errorf("Snapshot generated against corrupt account trie") + + case <-time.After(time.Second): + // Not generated fast enough, hopefully blocked inside on missing trie node fail + } + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation errors out correctly in case of a missing root +// trie node for a storage trie. It's similar to internal corruption but it is +// handled differently inside the generator. +func TestGenerateMissingStorageTrie(t *testing.T) { + // We can't use statedb to make a test trie (circular dependency), so make + // a fake one manually. We're going with a small account trie of 3 accounts, + // two of which also has the same 3-slot storage trie attached. + helper := newHelper() + + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) // 0xddefcd9376dd029653ef384bd2f0a126bb755fe84fdcc9e7cf421ba454f2bc67 + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7 + stRoot = helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2 + + root := helper.Commit() + + // Delete a storage trie root and ensure the generator chokes + helper.diskdb.Delete(stRoot) + + snap := generateSnapshot(helper.diskdb, helper.triedb, 16, root) + select { + case <-snap.genPending: + // Snapshot generation succeeded + t.Errorf("Snapshot generated against corrupt storage trie") + + case <-time.After(time.Second): + // Not generated fast enough, hopefully blocked inside on missing trie node fail + } + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation errors out correctly in case of a missing trie +// node in a storage trie. +func TestGenerateCorruptStorageTrie(t *testing.T) { + // We can't use statedb to make a test trie (circular dependency), so make + // a fake one manually. We're going with a small account trie of 3 accounts, + // two of which also has the same 3-slot storage trie attached. + helper := newHelper() + + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) // 0xddefcd9376dd029653ef384bd2f0a126bb755fe84fdcc9e7cf421ba454f2bc67 + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) // 0x65145f923027566669a1ae5ccac66f945b55ff6eaeb17d2ea8e048b7d381f2d7 + stRoot = helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) // 0x50815097425d000edfc8b3a4a13e175fc2bdcfee8bdfbf2d1ff61041d3c235b2 + + root := helper.Commit() + + // Delete a storage trie leaf and ensure the generator chokes + helper.diskdb.Delete(common.HexToHash("0x18a0f4d79cff4459642dd7604f303886ad9d77c30cf3d7d7cedb3a693ab6d371").Bytes()) + + snap := generateSnapshot(helper.diskdb, helper.triedb, 16, root) + select { + case <-snap.genPending: + // Snapshot generation succeeded + t.Errorf("Snapshot generated against corrupt storage trie") + + case <-time.After(time.Second): + // Not generated fast enough, hopefully blocked inside on missing trie node fail + } + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation when an extra account with storage exists in the snap state. +func TestGenerateWithExtraAccounts(t *testing.T) { + helper := newHelper() + { + // Account one in the trie + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), + []string{"key-1", "key-2", "key-3", "key-4", "key-5"}, + []string{"val-1", "val-2", "val-3", "val-4", "val-5"}, + true, + ) + acc := &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + helper.accTrie.Update([]byte("acc-1"), val) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e + + // Identical in the snap + key := hashData([]byte("acc-1")) + rawdb.WriteAccountSnapshot(helper.triedb.DiskDB(), key, val) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("key-1")), []byte("val-1")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("key-2")), []byte("val-2")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("key-3")), []byte("val-3")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("key-4")), []byte("val-4")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("key-5")), []byte("val-5")) + } + { + // Account two exists only in the snapshot + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-2")), + []string{"key-1", "key-2", "key-3", "key-4", "key-5"}, + []string{"val-1", "val-2", "val-3", "val-4", "val-5"}, + true, + ) + acc := &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + key := hashData([]byte("acc-2")) + rawdb.WriteAccountSnapshot(helper.triedb.DiskDB(), key, val) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("b-key-1")), []byte("b-val-1")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("b-key-2")), []byte("b-val-2")) + rawdb.WriteStorageSnapshot(helper.triedb.DiskDB(), key, hashData([]byte("b-key-3")), []byte("b-val-3")) + } + root := helper.Commit() + + // To verify the test: If we now inspect the snap db, there should exist extraneous storage items + if data := rawdb.ReadStorageSnapshot(helper.triedb.DiskDB(), hashData([]byte("acc-2")), hashData([]byte("b-key-1"))); data == nil { + t.Fatalf("expected snap storage to exist") + } + snap := generateSnapshot(helper.diskdb, helper.triedb, 16, root) + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop + // If we now inspect the snap db, there should exist no extraneous storage items + if data := rawdb.ReadStorageSnapshot(helper.triedb.DiskDB(), hashData([]byte("acc-2")), hashData([]byte("b-key-1"))); data != nil { + t.Fatalf("expected slot to be removed, got %v", string(data)) + } +} + +func enableLogging() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) +} + +// Tests that snapshot generation when an extra account with storage exists in the snap state. +func TestGenerateWithManyExtraAccounts(t *testing.T) { + if false { + enableLogging() + } + helper := newHelper() + { + // Account one in the trie + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), + []string{"key-1", "key-2", "key-3"}, + []string{"val-1", "val-2", "val-3"}, + true, + ) + acc := &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + helper.accTrie.Update([]byte("acc-1"), val) // 0x9250573b9c18c664139f3b6a7a8081b7d8f8916a8fcc5d94feec6c29f5fd4e9e + + // Identical in the snap + key := hashData([]byte("acc-1")) + rawdb.WriteAccountSnapshot(helper.diskdb, key, val) + rawdb.WriteStorageSnapshot(helper.diskdb, key, hashData([]byte("key-1")), []byte("val-1")) + rawdb.WriteStorageSnapshot(helper.diskdb, key, hashData([]byte("key-2")), []byte("val-2")) + rawdb.WriteStorageSnapshot(helper.diskdb, key, hashData([]byte("key-3")), []byte("val-3")) + } + { + // 100 accounts exist only in snapshot + for i := 0; i < 1000; i++ { + //acc := &Account{Balance: big.NewInt(int64(i)), Root: stTrie.Hash().Bytes(), CodeHash: emptyCode.Bytes()} + acc := &Account{Balance: big.NewInt(int64(i)), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + key := hashData([]byte(fmt.Sprintf("acc-%d", i))) + rawdb.WriteAccountSnapshot(helper.diskdb, key, val) + } + } + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests this case +// maxAccountRange 3 +// snapshot-accounts: 01, 02, 03, 04, 05, 06, 07 +// trie-accounts: 03, 07 +// +// We iterate three snapshot storage slots (max = 3) from the database. They are 0x01, 0x02, 0x03. +// The trie has a lot of deletions. +// So in trie, we iterate 2 entries 0x03, 0x07. We create the 0x07 in the database and abort the procedure, because the trie is exhausted. +// But in the database, we still have the stale storage slots 0x04, 0x05. They are not iterated yet, but the procedure is finished. +func TestGenerateWithExtraBeforeAndAfter(t *testing.T) { + accountCheckRange = 3 + if false { + enableLogging() + } + helper := newHelper() + { + acc := &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + helper.accTrie.Update(common.HexToHash("0x03").Bytes(), val) + helper.accTrie.Update(common.HexToHash("0x07").Bytes(), val) + + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x01"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x02"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x03"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x04"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x05"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x06"), val) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x07"), val) + } + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// TestGenerateWithMalformedSnapdata tests what happes if we have some junk +// in the snapshot database, which cannot be parsed back to an account +func TestGenerateWithMalformedSnapdata(t *testing.T) { + accountCheckRange = 3 + if false { + enableLogging() + } + helper := newHelper() + { + acc := &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()} + val, _ := rlp.EncodeToBytes(acc) + helper.accTrie.Update(common.HexToHash("0x03").Bytes(), val) + + junk := make([]byte, 100) + copy(junk, []byte{0xde, 0xad}) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x02"), junk) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x03"), junk) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x04"), junk) + rawdb.WriteAccountSnapshot(helper.diskdb, common.HexToHash("0x05"), junk) + } + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop + // If we now inspect the snap db, there should exist no extraneous storage items + if data := rawdb.ReadStorageSnapshot(helper.diskdb, hashData([]byte("acc-2")), hashData([]byte("b-key-1"))); data != nil { + t.Fatalf("expected slot to be removed, got %v", string(data)) + } +} + +func TestGenerateFromEmptySnap(t *testing.T) { + //enableLogging() + accountCheckRange = 10 + storageCheckRange = 20 + helper := newHelper() + // Add 1K accounts to the trie + for i := 0; i < 400; i++ { + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte(fmt.Sprintf("acc-%d", i))), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount(fmt.Sprintf("acc-%d", i), + &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + } + root, snap := helper.CommitAndGenerate() + t.Logf("Root: %#x\n", root) // Root: 0x6f7af6d2e1a1bf2b84a3beb3f8b64388465fbc1e274ca5d5d3fc787ca78f59e4 + + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation with existent flat state, where the flat state +// storage is correct, but incomplete. +// The incomplete part is on the second range +// snap: [ 0x01, 0x02, 0x03, 0x04] , [ 0x05, 0x06, 0x07, {missing}] (with storageCheck = 4) +// trie: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 +// This hits a case where the snap verification passes, but there are more elements in the trie +// which we must also add. +func TestGenerateWithIncompleteStorage(t *testing.T) { + storageCheckRange = 4 + helper := newHelper() + stKeys := []string{"1", "2", "3", "4", "5", "6", "7", "8"} + stVals := []string{"v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8"} + // We add 8 accounts, each one is missing exactly one of the storage slots. This means + // we don't have to order the keys and figure out exactly which hash-key winds up + // on the sensitive spots at the boundaries + for i := 0; i < 8; i++ { + accKey := fmt.Sprintf("acc-%d", i) + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte(accKey)), stKeys, stVals, true) + helper.addAccount(accKey, &Account{Balance: big.NewInt(int64(i)), Root: stRoot, CodeHash: emptyCode.Bytes()}) + var moddedKeys []string + var moddedVals []string + for ii := 0; ii < 8; ii++ { + if ii != i { + moddedKeys = append(moddedKeys, stKeys[ii]) + moddedVals = append(moddedVals, stVals[ii]) + } + } + helper.addSnapStorage(accKey, moddedKeys, moddedVals) + } + root, snap := helper.CommitAndGenerate() + t.Logf("Root: %#x\n", root) // Root: 0xca73f6f05ba4ca3024ef340ef3dfca8fdabc1b677ff13f5a9571fd49c16e67ff + + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +func incKey(key []byte) []byte { + for i := len(key) - 1; i >= 0; i-- { + key[i]++ + if key[i] != 0x0 { + break + } + } + return key +} + +func decKey(key []byte) []byte { + for i := len(key) - 1; i >= 0; i-- { + key[i]-- + if key[i] != 0xff { + break + } + } + return key +} + +func populateDangling(disk ethdb.KeyValueStore) { + populate := func(accountHash common.Hash, keys []string, vals []string) { + for i, key := range keys { + rawdb.WriteStorageSnapshot(disk, accountHash, hashData([]byte(key)), []byte(vals[i])) + } + } + // Dangling storages of the "first" account + populate(common.Hash{}, []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Dangling storages of the "last" account + populate(common.HexToHash("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Dangling storages around the account 1 + hash := decKey(hashData([]byte("acc-1")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + hash = incKey(hashData([]byte("acc-1")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Dangling storages around the account 2 + hash = decKey(hashData([]byte("acc-2")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + hash = incKey(hashData([]byte("acc-2")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Dangling storages around the account 3 + hash = decKey(hashData([]byte("acc-3")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + hash = incKey(hashData([]byte("acc-3")).Bytes()) + populate(common.BytesToHash(hash), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + // Dangling storages of the random account + populate(randomHash(), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + populate(randomHash(), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + populate(randomHash(), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) +} + +// Tests that snapshot generation with dangling storages. Dangling storage means +// the storage data is existent while the corresponding account data is missing. +// +// This test will populate some dangling storages to see if they can be cleaned up. +func TestGenerateCompleteSnapshotWithDanglingStorage(t *testing.T) { + var helper = newHelper() + + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addAccount("acc-2", &Account{Balance: big.NewInt(1), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addAccount("acc-3", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + + helper.addSnapStorage("acc-1", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + helper.addSnapStorage("acc-3", []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}) + + populateDangling(helper.diskdb) + + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} + +// Tests that snapshot generation with dangling storages. Dangling storage means +// the storage data is existent while the corresponding account data is missing. +// +// This test will populate some dangling storages to see if they can be cleaned up. +func TestGenerateBrokenSnapshotWithDanglingStorage(t *testing.T) { + var helper = newHelper() + + stRoot := helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-1")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-1", &Account{Balance: big.NewInt(1), Root: stRoot, CodeHash: emptyCode.Bytes()}) + helper.addTrieAccount("acc-2", &Account{Balance: big.NewInt(2), Root: emptyRoot.Bytes(), CodeHash: emptyCode.Bytes()}) + + helper.makeStorageTrie(common.Hash{}, hashData([]byte("acc-3")), []string{"key-1", "key-2", "key-3"}, []string{"val-1", "val-2", "val-3"}, true) + helper.addTrieAccount("acc-3", &Account{Balance: big.NewInt(3), Root: stRoot, CodeHash: emptyCode.Bytes()}) + + populateDangling(helper.diskdb) + + root, snap := helper.CommitAndGenerate() + select { + case <-snap.genPending: + // Snapshot generation succeeded + + case <-time.After(3 * time.Second): + t.Errorf("Snapshot generation failed") + } + checkSnapRoot(t, snap, root) + + // Signal abortion to the generator and wait for it to tear down + stop := make(chan *generatorStats) + snap.genAbort <- stop + <-stop +} diff --git a/core/state/snapshot/holdable_iterator.go b/core/state/snapshot/holdable_iterator.go new file mode 100644 index 00000000..1e86ff9d --- /dev/null +++ b/core/state/snapshot/holdable_iterator.go @@ -0,0 +1,97 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" +) + +// holdableIterator is a wrapper of underlying database iterator. It extends +// the basic iterator interface by adding Hold which can hold the element +// locally where the iterator is currently located and serve it up next time. +type holdableIterator struct { + it ethdb.Iterator + key []byte + val []byte + atHeld bool +} + +// newHoldableIterator initializes the holdableIterator with the given iterator. +func newHoldableIterator(it ethdb.Iterator) *holdableIterator { + return &holdableIterator{it: it} +} + +// Hold holds the element locally where the iterator is currently located which +// can be served up next time. +func (it *holdableIterator) Hold() { + if it.it.Key() == nil { + return // nothing to hold + } + it.key = common.CopyBytes(it.it.Key()) + it.val = common.CopyBytes(it.it.Value()) + it.atHeld = false +} + +// Next moves the iterator to the next key/value pair. It returns whether the +// iterator is exhausted. +func (it *holdableIterator) Next() bool { + if !it.atHeld && it.key != nil { + it.atHeld = true + } else if it.atHeld { + it.atHeld = false + it.key = nil + it.val = nil + } + if it.key != nil { + return true // shifted to locally held value + } + return it.it.Next() +} + +// Error returns any accumulated error. Exhausting all the key/value pairs +// is not considered to be an error. +func (it *holdableIterator) Error() error { return it.it.Error() } + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (it *holdableIterator) Release() { + it.atHeld = false + it.key = nil + it.val = nil + it.it.Release() +} + +// 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 *holdableIterator) Key() []byte { + if it.key != nil { + return it.key + } + return it.it.Key() +} + +// 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 *holdableIterator) Value() []byte { + if it.val != nil { + return it.val + } + return it.it.Value() +} diff --git a/core/state/snapshot/holdable_iterator_test.go b/core/state/snapshot/holdable_iterator_test.go new file mode 100644 index 00000000..ce4cf6bb --- /dev/null +++ b/core/state/snapshot/holdable_iterator_test.go @@ -0,0 +1,163 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import ( + "bytes" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" +) + +func TestIteratorHold(t *testing.T) { + // Create the key-value data store + var ( + content = map[string]string{"k1": "v1", "k2": "v2", "k3": "v3"} + order = []string{"k1", "k2", "k3"} + db = rawdb.NewMemoryDatabase() + ) + for key, val := range content { + if err := db.Put([]byte(key), []byte(val)); err != nil { + t.Fatalf("failed to insert item %s:%s into database: %v", key, val, err) + } + } + // Iterate over the database with the given configs and verify the results + it, idx := newHoldableIterator(db.NewIterator(nil, nil)), 0 + + // Nothing should be affected for calling Discard on non-initialized iterator + it.Hold() + + for it.Next() { + if len(content) <= idx { + t.Errorf("more items than expected: checking idx=%d (key %q), expecting len=%d", idx, it.Key(), len(order)) + break + } + if !bytes.Equal(it.Key(), []byte(order[idx])) { + t.Errorf("item %d: key mismatch: have %s, want %s", idx, string(it.Key()), order[idx]) + } + if !bytes.Equal(it.Value(), []byte(content[order[idx]])) { + t.Errorf("item %d: value mismatch: have %s, want %s", idx, string(it.Value()), content[order[idx]]) + } + // Should be safe to call discard multiple times + it.Hold() + it.Hold() + + // Shift iterator to the discarded element + it.Next() + if !bytes.Equal(it.Key(), []byte(order[idx])) { + t.Errorf("item %d: key mismatch: have %s, want %s", idx, string(it.Key()), order[idx]) + } + if !bytes.Equal(it.Value(), []byte(content[order[idx]])) { + t.Errorf("item %d: value mismatch: have %s, want %s", idx, string(it.Value()), content[order[idx]]) + } + + // Discard/Next combo should work always + it.Hold() + it.Next() + if !bytes.Equal(it.Key(), []byte(order[idx])) { + t.Errorf("item %d: key mismatch: have %s, want %s", idx, string(it.Key()), order[idx]) + } + if !bytes.Equal(it.Value(), []byte(content[order[idx]])) { + t.Errorf("item %d: value mismatch: have %s, want %s", idx, string(it.Value()), content[order[idx]]) + } + idx++ + } + if err := it.Error(); err != nil { + t.Errorf("iteration failed: %v", err) + } + if idx != len(order) { + t.Errorf("iteration terminated prematurely: have %d, want %d", idx, len(order)) + } + db.Close() +} + +func TestReopenIterator(t *testing.T) { + var ( + content = map[common.Hash]string{ + common.HexToHash("a1"): "v1", + common.HexToHash("a2"): "v2", + common.HexToHash("a3"): "v3", + common.HexToHash("a4"): "v4", + common.HexToHash("a5"): "v5", + common.HexToHash("a6"): "v6", + } + order = []common.Hash{ + common.HexToHash("a1"), + common.HexToHash("a2"), + common.HexToHash("a3"), + common.HexToHash("a4"), + common.HexToHash("a5"), + common.HexToHash("a6"), + } + db = rawdb.NewMemoryDatabase() + ) + for key, val := range content { + rawdb.WriteAccountSnapshot(db, key, []byte(val)) + } + checkVal := func(it *holdableIterator, index int) { + if !bytes.Equal(it.Key(), append(rawdb.SnapshotAccountPrefix, order[index].Bytes()...)) { + t.Fatalf("Unexpected data entry key, want %v got %v", order[index], it.Key()) + } + if !bytes.Equal(it.Value(), []byte(content[order[index]])) { + t.Fatalf("Unexpected data entry key, want %v got %v", []byte(content[order[index]]), it.Value()) + } + } + // Iterate over the database with the given configs and verify the results + ctx, idx := newGeneratorContext(&generatorStats{}, db, nil, nil), -1 + + idx++ + ctx.account.Next() + checkVal(ctx.account, idx) + + ctx.reopenIterator(snapAccount) + idx++ + ctx.account.Next() + checkVal(ctx.account, idx) + + // reopen twice + ctx.reopenIterator(snapAccount) + ctx.reopenIterator(snapAccount) + idx++ + ctx.account.Next() + checkVal(ctx.account, idx) + + // reopen iterator with held value + ctx.account.Next() + ctx.account.Hold() + ctx.reopenIterator(snapAccount) + idx++ + ctx.account.Next() + checkVal(ctx.account, idx) + + // reopen twice iterator with held value + ctx.account.Next() + ctx.account.Hold() + ctx.reopenIterator(snapAccount) + ctx.reopenIterator(snapAccount) + idx++ + ctx.account.Next() + checkVal(ctx.account, idx) + + // shift to the end and reopen + ctx.account.Next() // the end + ctx.reopenIterator(snapAccount) + ctx.account.Next() + if ctx.account.Key() != nil { + t.Fatal("Unexpected iterated entry") + } +} diff --git a/core/state/snapshot/iterator.go b/core/state/snapshot/iterator.go new file mode 100644 index 00000000..c1a196c7 --- /dev/null +++ b/core/state/snapshot/iterator.go @@ -0,0 +1,400 @@ +// 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 snapshot + +import ( + "bytes" + "fmt" + "sort" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" +) + +// Iterator is an iterator to step over all the accounts or the specific +// storage in a snapshot which may or may not be composed of multiple layers. +type Iterator interface { + // Next steps the iterator forward one element, returning false if exhausted, + // or an error if iteration failed for some reason (e.g. root being iterated + // becomes stale and garbage collected). + Next() bool + + // Error returns any failure that occurred during iteration, which might have + // caused a premature iteration exit (e.g. snapshot stack becoming stale). + Error() error + + // Hash returns the hash of the account or storage slot the iterator is + // currently at. + Hash() common.Hash + + // Release releases associated resources. Release should always succeed and + // can be called multiple times without causing error. + Release() +} + +// AccountIterator is an iterator to step over all the accounts in a snapshot, +// which may or may not be composed of multiple layers. +type AccountIterator interface { + Iterator + + // Account returns the RLP encoded slim account the iterator is currently at. + // An error will be returned if the iterator becomes invalid + Account() []byte +} + +// StorageIterator is an iterator to step over the specific storage in a snapshot, +// which may or may not be composed of multiple layers. +type StorageIterator interface { + Iterator + + // Slot returns the storage slot the iterator is currently at. An error will + // be returned if the iterator becomes invalid + Slot() []byte +} + +// diffAccountIterator is an account iterator that steps over the accounts (both +// live and deleted) contained within a single diff layer. Higher order iterators +// will use the deleted accounts to skip deeper iterators. +type diffAccountIterator struct { + // curHash is the current hash the iterator is positioned on. The field is + // explicitly tracked since the referenced diff layer might go stale after + // the iterator was positioned and we don't want to fail accessing the old + // hash as long as the iterator is not touched any more. + curHash common.Hash + + layer *diffLayer // Live layer to retrieve values from + keys []common.Hash // Keys left in the layer to iterate + fail error // Any failures encountered (stale) +} + +// AccountIterator creates an account iterator over a single diff layer. +func (dl *diffLayer) AccountIterator(seek common.Hash) AccountIterator { + // Seek out the requested starting account + hashes := dl.AccountList() + index := sort.Search(len(hashes), func(i int) bool { + return bytes.Compare(seek[:], hashes[i][:]) <= 0 + }) + // Assemble and returned the already seeked iterator + return &diffAccountIterator{ + layer: dl, + keys: hashes[index:], + } +} + +// Next steps the iterator forward one element, returning false if exhausted. +func (it *diffAccountIterator) Next() bool { + // If the iterator was already stale, consider it a programmer error. Although + // we could just return false here, triggering this path would probably mean + // somebody forgot to check for Error, so lets blow up instead of undefined + // behavior that's hard to debug. + if it.fail != nil { + panic(fmt.Sprintf("called Next of failed iterator: %v", it.fail)) + } + // Stop iterating if all keys were exhausted + if len(it.keys) == 0 { + return false + } + if it.layer.Stale() { + it.fail, it.keys = ErrSnapshotStale, nil + return false + } + // Iterator seems to be still alive, retrieve and cache the live hash + it.curHash = it.keys[0] + // key cached, shift the iterator and notify the user of success + it.keys = it.keys[1:] + return true +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +func (it *diffAccountIterator) Error() error { + return it.fail +} + +// Hash returns the hash of the account the iterator is currently at. +func (it *diffAccountIterator) Hash() common.Hash { + return it.curHash +} + +// Account returns the RLP encoded slim account the iterator is currently at. +// This method may _fail_, if the underlying layer has been flattened between +// the call to Next and Account. That type of error will set it.Err. +// This method assumes that flattening does not delete elements from +// the accountdata mapping (writing nil into it is fine though), and will panic +// if elements have been deleted. +// +// Note the returned account is not a copy, please don't modify it. +func (it *diffAccountIterator) Account() []byte { + it.layer.lock.RLock() + blob, ok := it.layer.accountData[it.curHash] + if !ok { + if _, ok := it.layer.destructSet[it.curHash]; ok { + it.layer.lock.RUnlock() + return nil + } + panic(fmt.Sprintf("iterator referenced non-existent account: %x", it.curHash)) + } + it.layer.lock.RUnlock() + if it.layer.Stale() { + it.fail, it.keys = ErrSnapshotStale, nil + } + return blob +} + +// Release is a noop for diff account iterators as there are no held resources. +func (it *diffAccountIterator) Release() {} + +// diskAccountIterator is an account iterator that steps over the live accounts +// contained within a disk layer. +type diskAccountIterator struct { + layer *diskLayer + it ethdb.Iterator +} + +// AccountIterator creates an account iterator over a disk layer. +func (dl *diskLayer) AccountIterator(seek common.Hash) AccountIterator { + pos := common.TrimRightZeroes(seek[:]) + return &diskAccountIterator{ + layer: dl, + it: dl.diskdb.NewIterator(rawdb.SnapshotAccountPrefix, pos), + } +} + +// Next steps the iterator forward one element, returning false if exhausted. +func (it *diskAccountIterator) Next() bool { + // If the iterator was already exhausted, don't bother + if it.it == nil { + return false + } + // Try to advance the iterator and release it if we reached the end + for { + if !it.it.Next() { + it.it.Release() + it.it = nil + return false + } + if len(it.it.Key()) == len(rawdb.SnapshotAccountPrefix)+common.HashLength { + break + } + } + return true +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +// +// A diff layer is immutable after creation content wise and can always be fully +// iterated without error, so this method always returns nil. +func (it *diskAccountIterator) Error() error { + if it.it == nil { + return nil // Iterator is exhausted and released + } + return it.it.Error() +} + +// Hash returns the hash of the account the iterator is currently at. +func (it *diskAccountIterator) Hash() common.Hash { + return common.BytesToHash(it.it.Key()) // The prefix will be truncated +} + +// Account returns the RLP encoded slim account the iterator is currently at. +func (it *diskAccountIterator) Account() []byte { + return it.it.Value() +} + +// Release releases the database snapshot held during iteration. +func (it *diskAccountIterator) Release() { + // The iterator is auto-released on exhaustion, so make sure it's still alive + if it.it != nil { + it.it.Release() + it.it = nil + } +} + +// diffStorageIterator is a storage iterator that steps over the specific storage +// (both live and deleted) contained within a single diff layer. Higher order +// iterators will use the deleted slot to skip deeper iterators. +type diffStorageIterator struct { + // curHash is the current hash the iterator is positioned on. The field is + // explicitly tracked since the referenced diff layer might go stale after + // the iterator was positioned and we don't want to fail accessing the old + // hash as long as the iterator is not touched any more. + curHash common.Hash + account common.Hash + + layer *diffLayer // Live layer to retrieve values from + keys []common.Hash // Keys left in the layer to iterate + fail error // Any failures encountered (stale) +} + +// StorageIterator creates a storage iterator over a single diff layer. +// Except the storage iterator is returned, there is an additional flag +// "destructed" returned. If it's true then it means the whole storage is +// destructed in this layer(maybe recreated too), don't bother deeper layer +// for storage retrieval. +func (dl *diffLayer) StorageIterator(account common.Hash, seek common.Hash) (StorageIterator, bool) { + // Create the storage for this account even it's marked + // as destructed. The iterator is for the new one which + // just has the same address as the deleted one. + hashes, destructed := dl.StorageList(account) + index := sort.Search(len(hashes), func(i int) bool { + return bytes.Compare(seek[:], hashes[i][:]) <= 0 + }) + // Assemble and returned the already seeked iterator + return &diffStorageIterator{ + layer: dl, + account: account, + keys: hashes[index:], + }, destructed +} + +// Next steps the iterator forward one element, returning false if exhausted. +func (it *diffStorageIterator) Next() bool { + // If the iterator was already stale, consider it a programmer error. Although + // we could just return false here, triggering this path would probably mean + // somebody forgot to check for Error, so lets blow up instead of undefined + // behavior that's hard to debug. + if it.fail != nil { + panic(fmt.Sprintf("called Next of failed iterator: %v", it.fail)) + } + // Stop iterating if all keys were exhausted + if len(it.keys) == 0 { + return false + } + if it.layer.Stale() { + it.fail, it.keys = ErrSnapshotStale, nil + return false + } + // Iterator seems to be still alive, retrieve and cache the live hash + it.curHash = it.keys[0] + // key cached, shift the iterator and notify the user of success + it.keys = it.keys[1:] + return true +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +func (it *diffStorageIterator) Error() error { + return it.fail +} + +// Hash returns the hash of the storage slot the iterator is currently at. +func (it *diffStorageIterator) Hash() common.Hash { + return it.curHash +} + +// Slot returns the raw storage slot value the iterator is currently at. +// This method may _fail_, if the underlying layer has been flattened between +// the call to Next and Value. That type of error will set it.Err. +// This method assumes that flattening does not delete elements from +// the storage mapping (writing nil into it is fine though), and will panic +// if elements have been deleted. +// +// Note the returned slot is not a copy, please don't modify it. +func (it *diffStorageIterator) Slot() []byte { + it.layer.lock.RLock() + storage, ok := it.layer.storageData[it.account] + if !ok { + panic(fmt.Sprintf("iterator referenced non-existent account storage: %x", it.account)) + } + // Storage slot might be nil(deleted), but it must exist + blob, ok := storage[it.curHash] + if !ok { + panic(fmt.Sprintf("iterator referenced non-existent storage slot: %x", it.curHash)) + } + it.layer.lock.RUnlock() + if it.layer.Stale() { + it.fail, it.keys = ErrSnapshotStale, nil + } + return blob +} + +// Release is a noop for diff account iterators as there are no held resources. +func (it *diffStorageIterator) Release() {} + +// diskStorageIterator is a storage iterator that steps over the live storage +// contained within a disk layer. +type diskStorageIterator struct { + layer *diskLayer + account common.Hash + it ethdb.Iterator +} + +// StorageIterator creates a storage iterator over a disk layer. +// If the whole storage is destructed, then all entries in the disk +// layer are deleted already. So the "destructed" flag returned here +// is always false. +func (dl *diskLayer) StorageIterator(account common.Hash, seek common.Hash) (StorageIterator, bool) { + pos := common.TrimRightZeroes(seek[:]) + return &diskStorageIterator{ + layer: dl, + account: account, + it: dl.diskdb.NewIterator(append(rawdb.SnapshotStoragePrefix, account.Bytes()...), pos), + }, false +} + +// Next steps the iterator forward one element, returning false if exhausted. +func (it *diskStorageIterator) Next() bool { + // If the iterator was already exhausted, don't bother + if it.it == nil { + return false + } + // Try to advance the iterator and release it if we reached the end + for { + if !it.it.Next() { + it.it.Release() + it.it = nil + return false + } + if len(it.it.Key()) == len(rawdb.SnapshotStoragePrefix)+common.HashLength+common.HashLength { + break + } + } + return true +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +// +// A diff layer is immutable after creation content wise and can always be fully +// iterated without error, so this method always returns nil. +func (it *diskStorageIterator) Error() error { + if it.it == nil { + return nil // Iterator is exhausted and released + } + return it.it.Error() +} + +// Hash returns the hash of the storage slot the iterator is currently at. +func (it *diskStorageIterator) Hash() common.Hash { + return common.BytesToHash(it.it.Key()) // The prefix will be truncated +} + +// Slot returns the raw storage slot content the iterator is currently at. +func (it *diskStorageIterator) Slot() []byte { + return it.it.Value() +} + +// Release releases the database snapshot held during iteration. +func (it *diskStorageIterator) Release() { + // The iterator is auto-released on exhaustion, so make sure it's still alive + if it.it != nil { + it.it.Release() + it.it = nil + } +} diff --git a/core/state/snapshot/iterator_binary.go b/core/state/snapshot/iterator_binary.go new file mode 100644 index 00000000..22184b25 --- /dev/null +++ b/core/state/snapshot/iterator_binary.go @@ -0,0 +1,213 @@ +// 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 snapshot + +import ( + "bytes" + + "github.com/ethereum/go-ethereum/common" +) + +// binaryIterator is a simplistic iterator to step over the accounts or storage +// in a snapshot, which may or may not be composed of multiple layers. Performance +// wise this iterator is slow, it's meant for cross validating the fast one, +type binaryIterator struct { + a Iterator + b Iterator + aDone bool + bDone bool + accountIterator bool + k common.Hash + account common.Hash + fail error +} + +// initBinaryAccountIterator creates a simplistic iterator to step over all the +// accounts in a slow, but easily verifiable way. Note this function is used for +// initialization, use `newBinaryAccountIterator` as the API. +func (dl *diffLayer) initBinaryAccountIterator() Iterator { + parent, ok := dl.parent.(*diffLayer) + if !ok { + l := &binaryIterator{ + a: dl.AccountIterator(common.Hash{}), + b: dl.Parent().AccountIterator(common.Hash{}), + accountIterator: true, + } + l.aDone = !l.a.Next() + l.bDone = !l.b.Next() + return l + } + l := &binaryIterator{ + a: dl.AccountIterator(common.Hash{}), + b: parent.initBinaryAccountIterator(), + accountIterator: true, + } + l.aDone = !l.a.Next() + l.bDone = !l.b.Next() + return l +} + +// initBinaryStorageIterator creates a simplistic iterator to step over all the +// storage slots in a slow, but easily verifiable way. Note this function is used +// for initialization, use `newBinaryStorageIterator` as the API. +func (dl *diffLayer) initBinaryStorageIterator(account common.Hash) Iterator { + parent, ok := dl.parent.(*diffLayer) + if !ok { + // If the storage in this layer is already destructed, discard all + // deeper layers but still return an valid single-branch iterator. + a, destructed := dl.StorageIterator(account, common.Hash{}) + if destructed { + l := &binaryIterator{ + a: a, + account: account, + } + l.aDone = !l.a.Next() + l.bDone = true + return l + } + // The parent is disk layer, don't need to take care "destructed" + // anymore. + b, _ := dl.Parent().StorageIterator(account, common.Hash{}) + l := &binaryIterator{ + a: a, + b: b, + account: account, + } + l.aDone = !l.a.Next() + l.bDone = !l.b.Next() + return l + } + // If the storage in this layer is already destructed, discard all + // deeper layers but still return an valid single-branch iterator. + a, destructed := dl.StorageIterator(account, common.Hash{}) + if destructed { + l := &binaryIterator{ + a: a, + account: account, + } + l.aDone = !l.a.Next() + l.bDone = true + return l + } + l := &binaryIterator{ + a: a, + b: parent.initBinaryStorageIterator(account), + account: account, + } + l.aDone = !l.a.Next() + l.bDone = !l.b.Next() + return l +} + +// Next steps the iterator forward one element, returning false if exhausted, +// or an error if iteration failed for some reason (e.g. root being iterated +// becomes stale and garbage collected). +func (it *binaryIterator) Next() bool { + if it.aDone && it.bDone { + return false + } +first: + if it.aDone { + it.k = it.b.Hash() + it.bDone = !it.b.Next() + return true + } + if it.bDone { + it.k = it.a.Hash() + it.aDone = !it.a.Next() + return true + } + nextA, nextB := it.a.Hash(), it.b.Hash() + if diff := bytes.Compare(nextA[:], nextB[:]); diff < 0 { + it.aDone = !it.a.Next() + it.k = nextA + return true + } else if diff == 0 { + // Now we need to advance one of them + it.aDone = !it.a.Next() + goto first + } + it.bDone = !it.b.Next() + it.k = nextB + return true +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +func (it *binaryIterator) Error() error { + return it.fail +} + +// Hash returns the hash of the account the iterator is currently at. +func (it *binaryIterator) Hash() common.Hash { + return it.k +} + +// Account returns the RLP encoded slim account the iterator is currently at, or +// nil if the iterated snapshot stack became stale (you can check Error after +// to see if it failed or not). +// +// Note the returned account is not a copy, please don't modify it. +func (it *binaryIterator) Account() []byte { + if !it.accountIterator { + return nil + } + // The topmost iterator must be `diffAccountIterator` + blob, err := it.a.(*diffAccountIterator).layer.AccountRLP(it.k) + if err != nil { + it.fail = err + return nil + } + return blob +} + +// Slot returns the raw storage slot data the iterator is currently at, or +// nil if the iterated snapshot stack became stale (you can check Error after +// to see if it failed or not). +// +// Note the returned slot is not a copy, please don't modify it. +func (it *binaryIterator) Slot() []byte { + if it.accountIterator { + return nil + } + blob, err := it.a.(*diffStorageIterator).layer.Storage(it.account, it.k) + if err != nil { + it.fail = err + return nil + } + return blob +} + +// Release recursively releases all the iterators in the stack. +func (it *binaryIterator) Release() { + it.a.Release() + it.b.Release() +} + +// newBinaryAccountIterator creates a simplistic account iterator to step over +// all the accounts in a slow, but easily verifiable way. +func (dl *diffLayer) newBinaryAccountIterator() AccountIterator { + iter := dl.initBinaryAccountIterator() + return iter.(AccountIterator) +} + +// newBinaryStorageIterator creates a simplistic account iterator to step over +// all the storage slots in a slow, but easily verifiable way. +func (dl *diffLayer) newBinaryStorageIterator(account common.Hash) StorageIterator { + iter := dl.initBinaryStorageIterator(account) + return iter.(StorageIterator) +} diff --git a/core/state/snapshot/iterator_fast.go b/core/state/snapshot/iterator_fast.go new file mode 100644 index 00000000..435c28e9 --- /dev/null +++ b/core/state/snapshot/iterator_fast.go @@ -0,0 +1,350 @@ +// 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 snapshot + +import ( + "bytes" + "fmt" + "sort" + + "github.com/ethereum/go-ethereum/common" +) + +// weightedIterator is a iterator with an assigned weight. It is used to prioritise +// which account or storage slot is the correct one if multiple iterators find the +// same one (modified in multiple consecutive blocks). +type weightedIterator struct { + it Iterator + priority int +} + +// weightedIterators is a set of iterators implementing the sort.Interface. +type weightedIterators []*weightedIterator + +// Len implements sort.Interface, returning the number of active iterators. +func (its weightedIterators) Len() int { return len(its) } + +// Less implements sort.Interface, returning which of two iterators in the stack +// is before the other. +func (its weightedIterators) Less(i, j int) bool { + // Order the iterators primarily by the account hashes + hashI := its[i].it.Hash() + hashJ := its[j].it.Hash() + + switch bytes.Compare(hashI[:], hashJ[:]) { + case -1: + return true + case 1: + return false + } + // Same account/storage-slot in multiple layers, split by priority + return its[i].priority < its[j].priority +} + +// Swap implements sort.Interface, swapping two entries in the iterator stack. +func (its weightedIterators) Swap(i, j int) { + its[i], its[j] = its[j], its[i] +} + +// fastIterator is a more optimized multi-layer iterator which maintains a +// direct mapping of all iterators leading down to the bottom layer. +type fastIterator struct { + tree *Tree // Snapshot tree to reinitialize stale sub-iterators with + root common.Hash // Root hash to reinitialize stale sub-iterators through + + curAccount []byte + curSlot []byte + + iterators weightedIterators + initiated bool + account bool + fail error +} + +// newFastIterator creates a new hierarchical account or storage iterator with one +// element per diff layer. The returned combo iterator can be used to walk over +// the entire snapshot diff stack simultaneously. +func newFastIterator(tree *Tree, root common.Hash, account common.Hash, seek common.Hash, accountIterator bool) (*fastIterator, error) { + snap := tree.Snapshot(root) + if snap == nil { + return nil, fmt.Errorf("unknown snapshot: %x", root) + } + fi := &fastIterator{ + tree: tree, + root: root, + account: accountIterator, + } + current := snap.(snapshot) + for depth := 0; current != nil; depth++ { + if accountIterator { + fi.iterators = append(fi.iterators, &weightedIterator{ + it: current.AccountIterator(seek), + priority: depth, + }) + } else { + // If the whole storage is destructed in this layer, don't + // bother deeper layer anymore. But we should still keep + // the iterator for this layer, since the iterator can contain + // some valid slots which belongs to the re-created account. + it, destructed := current.StorageIterator(account, seek) + fi.iterators = append(fi.iterators, &weightedIterator{ + it: it, + priority: depth, + }) + if destructed { + break + } + } + current = current.Parent() + } + fi.init() + return fi, nil +} + +// init walks over all the iterators and resolves any clashes between them, after +// which it prepares the stack for step-by-step iteration. +func (fi *fastIterator) init() { + // Track which account hashes are iterators positioned on + var positioned = make(map[common.Hash]int) + + // Position all iterators and track how many remain live + for i := 0; i < len(fi.iterators); i++ { + // Retrieve the first element and if it clashes with a previous iterator, + // advance either the current one or the old one. Repeat until nothing is + // clashing any more. + it := fi.iterators[i] + for { + // If the iterator is exhausted, drop it off the end + if !it.it.Next() { + it.it.Release() + last := len(fi.iterators) - 1 + + fi.iterators[i] = fi.iterators[last] + fi.iterators[last] = nil + fi.iterators = fi.iterators[:last] + + i-- + break + } + // The iterator is still alive, check for collisions with previous ones + hash := it.it.Hash() + if other, exist := positioned[hash]; !exist { + positioned[hash] = i + break + } else { + // Iterators collide, one needs to be progressed, use priority to + // determine which. + // + // This whole else-block can be avoided, if we instead + // do an initial priority-sort of the iterators. If we do that, + // then we'll only wind up here if a lower-priority (preferred) iterator + // has the same value, and then we will always just continue. + // However, it costs an extra sort, so it's probably not better + if fi.iterators[other].priority < it.priority { + // The 'it' should be progressed + continue + } else { + // The 'other' should be progressed, swap them + it = fi.iterators[other] + fi.iterators[other], fi.iterators[i] = fi.iterators[i], fi.iterators[other] + continue + } + } + } + } + // Re-sort the entire list + sort.Sort(fi.iterators) + fi.initiated = false +} + +// Next steps the iterator forward one element, returning false if exhausted. +func (fi *fastIterator) Next() bool { + if len(fi.iterators) == 0 { + return false + } + if !fi.initiated { + // Don't forward first time -- we had to 'Next' once in order to + // do the sorting already + fi.initiated = true + if fi.account { + fi.curAccount = fi.iterators[0].it.(AccountIterator).Account() + } else { + fi.curSlot = fi.iterators[0].it.(StorageIterator).Slot() + } + if innerErr := fi.iterators[0].it.Error(); innerErr != nil { + fi.fail = innerErr + return false + } + if fi.curAccount != nil || fi.curSlot != nil { + return true + } + // Implicit else: we've hit a nil-account or nil-slot, and need to + // fall through to the loop below to land on something non-nil + } + // If an account or a slot is deleted in one of the layers, the key will + // still be there, but the actual value will be nil. However, the iterator + // should not export nil-values (but instead simply omit the key), so we + // need to loop here until we either + // - get a non-nil value, + // - hit an error, + // - or exhaust the iterator + for { + if !fi.next(0) { + return false // exhausted + } + if fi.account { + fi.curAccount = fi.iterators[0].it.(AccountIterator).Account() + } else { + fi.curSlot = fi.iterators[0].it.(StorageIterator).Slot() + } + if innerErr := fi.iterators[0].it.Error(); innerErr != nil { + fi.fail = innerErr + return false // error + } + if fi.curAccount != nil || fi.curSlot != nil { + break // non-nil value found + } + } + return true +} + +// next handles the next operation internally and should be invoked when we know +// that two elements in the list may have the same value. +// +// For example, if the iterated hashes become [2,3,5,5,8,9,10], then we should +// invoke next(3), which will call Next on elem 3 (the second '5') and will +// cascade along the list, applying the same operation if needed. +func (fi *fastIterator) next(idx int) bool { + // If this particular iterator got exhausted, remove it and return true (the + // next one is surely not exhausted yet, otherwise it would have been removed + // already). + if it := fi.iterators[idx].it; !it.Next() { + it.Release() + + fi.iterators = append(fi.iterators[:idx], fi.iterators[idx+1:]...) + return len(fi.iterators) > 0 + } + // If there's no one left to cascade into, return + if idx == len(fi.iterators)-1 { + return true + } + // We next-ed the iterator at 'idx', now we may have to re-sort that element + var ( + cur, next = fi.iterators[idx], fi.iterators[idx+1] + curHash, nextHash = cur.it.Hash(), next.it.Hash() + ) + if diff := bytes.Compare(curHash[:], nextHash[:]); diff < 0 { + // It is still in correct place + return true + } else if diff == 0 && cur.priority < next.priority { + // So still in correct place, but we need to iterate on the next + fi.next(idx + 1) + return true + } + // At this point, the iterator is in the wrong location, but the remaining + // list is sorted. Find out where to move the item. + clash := -1 + index := sort.Search(len(fi.iterators), func(n int) bool { + // The iterator always advances forward, so anything before the old slot + // is known to be behind us, so just skip them altogether. This actually + // is an important clause since the sort order got invalidated. + if n < idx { + return false + } + if n == len(fi.iterators)-1 { + // Can always place an elem last + return true + } + nextHash := fi.iterators[n+1].it.Hash() + if diff := bytes.Compare(curHash[:], nextHash[:]); diff < 0 { + return true + } else if diff > 0 { + return false + } + // The elem we're placing it next to has the same value, + // so whichever winds up on n+1 will need further iteraton + clash = n + 1 + + return cur.priority < fi.iterators[n+1].priority + }) + fi.move(idx, index) + if clash != -1 { + fi.next(clash) + } + return true +} + +// move advances an iterator to another position in the list. +func (fi *fastIterator) move(index, newpos int) { + elem := fi.iterators[index] + copy(fi.iterators[index:], fi.iterators[index+1:newpos+1]) + fi.iterators[newpos] = elem +} + +// Error returns any failure that occurred during iteration, which might have +// caused a premature iteration exit (e.g. snapshot stack becoming stale). +func (fi *fastIterator) Error() error { + return fi.fail +} + +// Hash returns the current key +func (fi *fastIterator) Hash() common.Hash { + return fi.iterators[0].it.Hash() +} + +// Account returns the current account blob. +// Note the returned account is not a copy, please don't modify it. +func (fi *fastIterator) Account() []byte { + return fi.curAccount +} + +// Slot returns the current storage slot. +// Note the returned slot is not a copy, please don't modify it. +func (fi *fastIterator) Slot() []byte { + return fi.curSlot +} + +// Release iterates over all the remaining live layer iterators and releases each +// of them individually. +func (fi *fastIterator) Release() { + for _, it := range fi.iterators { + it.it.Release() + } + fi.iterators = nil +} + +// Debug is a convenience helper during testing +func (fi *fastIterator) Debug() { + for _, it := range fi.iterators { + fmt.Printf("[p=%v v=%v] ", it.priority, it.it.Hash()[0]) + } + fmt.Println() +} + +// newFastAccountIterator creates a new hierarchical account iterator with one +// element per diff layer. The returned combo iterator can be used to walk over +// the entire snapshot diff stack simultaneously. +func newFastAccountIterator(tree *Tree, root common.Hash, seek common.Hash) (AccountIterator, error) { + return newFastIterator(tree, root, common.Hash{}, seek, true) +} + +// newFastStorageIterator creates a new hierarchical storage iterator with one +// element per diff layer. The returned combo iterator can be used to walk over +// the entire snapshot diff stack simultaneously. +func newFastStorageIterator(tree *Tree, root common.Hash, account common.Hash, seek common.Hash) (StorageIterator, error) { + return newFastIterator(tree, root, account, seek, false) +} diff --git a/core/state/snapshot/iterator_test.go b/core/state/snapshot/iterator_test.go new file mode 100644 index 00000000..2c7e876e --- /dev/null +++ b/core/state/snapshot/iterator_test.go @@ -0,0 +1,1046 @@ +// 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 snapshot + +import ( + "bytes" + "encoding/binary" + "fmt" + "math/rand" + "testing" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" +) + +// TestAccountIteratorBasics tests some simple single-layer(diff and disk) iteration +func TestAccountIteratorBasics(t *testing.T) { + var ( + destructs = make(map[common.Hash]struct{}) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + // Fill up a parent + for i := 0; i < 100; i++ { + h := randomHash() + data := randomAccount() + + accounts[h] = data + if rand.Intn(4) == 0 { + destructs[h] = struct{}{} + } + if rand.Intn(2) == 0 { + accStorage := make(map[common.Hash][]byte) + value := make([]byte, 32) + rand.Read(value) + accStorage[randomHash()] = value + storage[h] = accStorage + } + } + // Add some (identical) layers on top + diffLayer := newDiffLayer(emptyLayer(), common.Hash{}, copyDestructs(destructs), copyAccounts(accounts), copyStorage(storage)) + it := diffLayer.AccountIterator(common.Hash{}) + verifyIterator(t, 100, it, verifyNothing) // Nil is allowed for single layer iterator + + diskLayer := diffToDisk(diffLayer) + it = diskLayer.AccountIterator(common.Hash{}) + verifyIterator(t, 100, it, verifyNothing) // Nil is allowed for single layer iterator +} + +// TestStorageIteratorBasics tests some simple single-layer(diff and disk) iteration for storage +func TestStorageIteratorBasics(t *testing.T) { + var ( + nilStorage = make(map[common.Hash]int) + accounts = make(map[common.Hash][]byte) + storage = make(map[common.Hash]map[common.Hash][]byte) + ) + // Fill some random data + for i := 0; i < 10; i++ { + h := randomHash() + accounts[h] = randomAccount() + + accStorage := make(map[common.Hash][]byte) + value := make([]byte, 32) + + var nilstorage int + for i := 0; i < 100; i++ { + rand.Read(value) + if rand.Intn(2) == 0 { + accStorage[randomHash()] = common.CopyBytes(value) + } else { + accStorage[randomHash()] = nil // delete slot + nilstorage += 1 + } + } + storage[h] = accStorage + nilStorage[h] = nilstorage + } + // Add some (identical) layers on top + diffLayer := newDiffLayer(emptyLayer(), common.Hash{}, nil, copyAccounts(accounts), copyStorage(storage)) + for account := range accounts { + it, _ := diffLayer.StorageIterator(account, common.Hash{}) + verifyIterator(t, 100, it, verifyNothing) // Nil is allowed for single layer iterator + } + + diskLayer := diffToDisk(diffLayer) + for account := range accounts { + it, _ := diskLayer.StorageIterator(account, common.Hash{}) + verifyIterator(t, 100-nilStorage[account], it, verifyNothing) // Nil is allowed for single layer iterator + } +} + +type testIterator struct { + values []byte +} + +func newTestIterator(values ...byte) *testIterator { + return &testIterator{values} +} + +func (ti *testIterator) Seek(common.Hash) { + panic("implement me") +} + +func (ti *testIterator) Next() bool { + ti.values = ti.values[1:] + return len(ti.values) > 0 +} + +func (ti *testIterator) Error() error { + return nil +} + +func (ti *testIterator) Hash() common.Hash { + return common.BytesToHash([]byte{ti.values[0]}) +} + +func (ti *testIterator) Account() []byte { + return nil +} + +func (ti *testIterator) Slot() []byte { + return nil +} + +func (ti *testIterator) Release() {} + +func TestFastIteratorBasics(t *testing.T) { + type testCase struct { + lists [][]byte + expKeys []byte + } + for i, tc := range []testCase{ + {lists: [][]byte{{0, 1, 8}, {1, 2, 8}, {2, 9}, {4}, + {7, 14, 15}, {9, 13, 15, 16}}, + expKeys: []byte{0, 1, 2, 4, 7, 8, 9, 13, 14, 15, 16}}, + {lists: [][]byte{{0, 8}, {1, 2, 8}, {7, 14, 15}, {8, 9}, + {9, 10}, {10, 13, 15, 16}}, + expKeys: []byte{0, 1, 2, 7, 8, 9, 10, 13, 14, 15, 16}}, + } { + var iterators []*weightedIterator + for i, data := range tc.lists { + it := newTestIterator(data...) + iterators = append(iterators, &weightedIterator{it, i}) + } + fi := &fastIterator{ + iterators: iterators, + initiated: false, + } + count := 0 + for fi.Next() { + if got, exp := fi.Hash()[31], tc.expKeys[count]; exp != got { + t.Errorf("tc %d, [%d]: got %d exp %d", i, count, got, exp) + } + count++ + } + } +} + +type verifyContent int + +const ( + verifyNothing verifyContent = iota + verifyAccount + verifyStorage +) + +func verifyIterator(t *testing.T, expCount int, it Iterator, verify verifyContent) { + t.Helper() + + var ( + count = 0 + last = common.Hash{} + ) + for it.Next() { + hash := it.Hash() + if bytes.Compare(last[:], hash[:]) >= 0 { + t.Errorf("wrong order: %x >= %x", last, hash) + } + count++ + if verify == verifyAccount && len(it.(AccountIterator).Account()) == 0 { + t.Errorf("iterator returned nil-value for hash %x", hash) + } else if verify == verifyStorage && len(it.(StorageIterator).Slot()) == 0 { + t.Errorf("iterator returned nil-value for hash %x", hash) + } + last = hash + } + if count != expCount { + t.Errorf("iterator count mismatch: have %d, want %d", count, expCount) + } + if err := it.Error(); err != nil { + t.Errorf("iterator failed: %v", err) + } +} + +// TestAccountIteratorTraversal tests some simple multi-layer iteration. +func TestAccountIteratorTraversal(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Stack three diff layers on top with various overlaps + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa", "0xee", "0xff", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xbb", "0xdd", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, + randomAccountSet("0xcc", "0xf0", "0xff"), nil) + + // Verify the single and multi-layer iterators + head := snaps.Snapshot(common.HexToHash("0x04")) + + verifyIterator(t, 3, head.(snapshot).AccountIterator(common.Hash{}), verifyNothing) + verifyIterator(t, 7, head.(*diffLayer).newBinaryAccountIterator(), verifyAccount) + + it, _ := snaps.AccountIterator(common.HexToHash("0x04"), common.Hash{}) + verifyIterator(t, 7, it, verifyAccount) + it.Release() + + // Test after persist some bottom-most layers into the disk, + // the functionalities still work. + limit := aggregatorMemoryLimit + defer func() { + aggregatorMemoryLimit = limit + }() + aggregatorMemoryLimit = 0 // Force pushing the bottom-most layer into disk + snaps.Cap(common.HexToHash("0x04"), 2) + verifyIterator(t, 7, head.(*diffLayer).newBinaryAccountIterator(), verifyAccount) + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.Hash{}) + verifyIterator(t, 7, it, verifyAccount) + it.Release() +} + +func TestStorageIteratorTraversal(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Stack three diff layers on top with various overlaps + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x01", "0x02", "0x03"}}, nil)) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x04", "0x05", "0x06"}}, nil)) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x01", "0x02", "0x03"}}, nil)) + + // Verify the single and multi-layer iterators + head := snaps.Snapshot(common.HexToHash("0x04")) + + diffIter, _ := head.(snapshot).StorageIterator(common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 3, diffIter, verifyNothing) + verifyIterator(t, 6, head.(*diffLayer).newBinaryStorageIterator(common.HexToHash("0xaa")), verifyStorage) + + it, _ := snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 6, it, verifyStorage) + it.Release() + + // Test after persist some bottom-most layers into the disk, + // the functionalities still work. + limit := aggregatorMemoryLimit + defer func() { + aggregatorMemoryLimit = limit + }() + aggregatorMemoryLimit = 0 // Force pushing the bottom-most layer into disk + snaps.Cap(common.HexToHash("0x04"), 2) + verifyIterator(t, 6, head.(*diffLayer).newBinaryStorageIterator(common.HexToHash("0xaa")), verifyStorage) + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 6, it, verifyStorage) + it.Release() +} + +// TestAccountIteratorTraversalValues tests some multi-layer iteration, where we +// also expect the correct values to show up. +func TestAccountIteratorTraversalValues(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Create a batch of account sets to seed subsequent layers with + var ( + a = make(map[common.Hash][]byte) + b = make(map[common.Hash][]byte) + c = make(map[common.Hash][]byte) + d = make(map[common.Hash][]byte) + e = make(map[common.Hash][]byte) + f = make(map[common.Hash][]byte) + g = make(map[common.Hash][]byte) + h = make(map[common.Hash][]byte) + ) + for i := byte(2); i < 0xff; i++ { + a[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 0, i)) + if i > 20 && i%2 == 0 { + b[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 1, i)) + } + if i%4 == 0 { + c[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 2, i)) + } + if i%7 == 0 { + d[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 3, i)) + } + if i%8 == 0 { + e[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 4, i)) + } + if i > 50 || i < 85 { + f[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 5, i)) + } + if i%64 == 0 { + g[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 6, i)) + } + if i%128 == 0 { + h[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 7, i)) + } + } + // Assemble a stack of snapshots from the account layers + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, a, nil) + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, b, nil) + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, c, nil) + snaps.Update(common.HexToHash("0x05"), common.HexToHash("0x04"), nil, d, nil) + snaps.Update(common.HexToHash("0x06"), common.HexToHash("0x05"), nil, e, nil) + snaps.Update(common.HexToHash("0x07"), common.HexToHash("0x06"), nil, f, nil) + snaps.Update(common.HexToHash("0x08"), common.HexToHash("0x07"), nil, g, nil) + snaps.Update(common.HexToHash("0x09"), common.HexToHash("0x08"), nil, h, nil) + + it, _ := snaps.AccountIterator(common.HexToHash("0x09"), common.Hash{}) + head := snaps.Snapshot(common.HexToHash("0x09")) + for it.Next() { + hash := it.Hash() + want, err := head.AccountRLP(hash) + if err != nil { + t.Fatalf("failed to retrieve expected account: %v", err) + } + if have := it.Account(); !bytes.Equal(want, have) { + t.Fatalf("hash %x: account mismatch: have %x, want %x", hash, have, want) + } + } + it.Release() + + // Test after persist some bottom-most layers into the disk, + // the functionalities still work. + limit := aggregatorMemoryLimit + defer func() { + aggregatorMemoryLimit = limit + }() + aggregatorMemoryLimit = 0 // Force pushing the bottom-most layer into disk + snaps.Cap(common.HexToHash("0x09"), 2) + + it, _ = snaps.AccountIterator(common.HexToHash("0x09"), common.Hash{}) + for it.Next() { + hash := it.Hash() + want, err := head.AccountRLP(hash) + if err != nil { + t.Fatalf("failed to retrieve expected account: %v", err) + } + if have := it.Account(); !bytes.Equal(want, have) { + t.Fatalf("hash %x: account mismatch: have %x, want %x", hash, have, want) + } + } + it.Release() +} + +func TestStorageIteratorTraversalValues(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + wrapStorage := func(storage map[common.Hash][]byte) map[common.Hash]map[common.Hash][]byte { + return map[common.Hash]map[common.Hash][]byte{ + common.HexToHash("0xaa"): storage, + } + } + // Create a batch of storage sets to seed subsequent layers with + var ( + a = make(map[common.Hash][]byte) + b = make(map[common.Hash][]byte) + c = make(map[common.Hash][]byte) + d = make(map[common.Hash][]byte) + e = make(map[common.Hash][]byte) + f = make(map[common.Hash][]byte) + g = make(map[common.Hash][]byte) + h = make(map[common.Hash][]byte) + ) + for i := byte(2); i < 0xff; i++ { + a[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 0, i)) + if i > 20 && i%2 == 0 { + b[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 1, i)) + } + if i%4 == 0 { + c[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 2, i)) + } + if i%7 == 0 { + d[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 3, i)) + } + if i%8 == 0 { + e[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 4, i)) + } + if i > 50 || i < 85 { + f[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 5, i)) + } + if i%64 == 0 { + g[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 6, i)) + } + if i%128 == 0 { + h[common.Hash{i}] = []byte(fmt.Sprintf("layer-%d, key %d", 7, i)) + } + } + // Assemble a stack of snapshots from the account layers + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, randomAccountSet("0xaa"), wrapStorage(a)) + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, randomAccountSet("0xaa"), wrapStorage(b)) + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, randomAccountSet("0xaa"), wrapStorage(c)) + snaps.Update(common.HexToHash("0x05"), common.HexToHash("0x04"), nil, randomAccountSet("0xaa"), wrapStorage(d)) + snaps.Update(common.HexToHash("0x06"), common.HexToHash("0x05"), nil, randomAccountSet("0xaa"), wrapStorage(e)) + snaps.Update(common.HexToHash("0x07"), common.HexToHash("0x06"), nil, randomAccountSet("0xaa"), wrapStorage(e)) + snaps.Update(common.HexToHash("0x08"), common.HexToHash("0x07"), nil, randomAccountSet("0xaa"), wrapStorage(g)) + snaps.Update(common.HexToHash("0x09"), common.HexToHash("0x08"), nil, randomAccountSet("0xaa"), wrapStorage(h)) + + it, _ := snaps.StorageIterator(common.HexToHash("0x09"), common.HexToHash("0xaa"), common.Hash{}) + head := snaps.Snapshot(common.HexToHash("0x09")) + for it.Next() { + hash := it.Hash() + want, err := head.Storage(common.HexToHash("0xaa"), hash) + if err != nil { + t.Fatalf("failed to retrieve expected storage slot: %v", err) + } + if have := it.Slot(); !bytes.Equal(want, have) { + t.Fatalf("hash %x: slot mismatch: have %x, want %x", hash, have, want) + } + } + it.Release() + + // Test after persist some bottom-most layers into the disk, + // the functionalities still work. + limit := aggregatorMemoryLimit + defer func() { + aggregatorMemoryLimit = limit + }() + aggregatorMemoryLimit = 0 // Force pushing the bottom-most layer into disk + snaps.Cap(common.HexToHash("0x09"), 2) + + it, _ = snaps.StorageIterator(common.HexToHash("0x09"), common.HexToHash("0xaa"), common.Hash{}) + for it.Next() { + hash := it.Hash() + want, err := head.Storage(common.HexToHash("0xaa"), hash) + if err != nil { + t.Fatalf("failed to retrieve expected slot: %v", err) + } + if have := it.Slot(); !bytes.Equal(want, have) { + t.Fatalf("hash %x: slot mismatch: have %x, want %x", hash, have, want) + } + } + it.Release() +} + +// This testcase is notorious, all layers contain the exact same 200 accounts. +func TestAccountIteratorLargeTraversal(t *testing.T) { + // Create a custom account factory to recreate the same addresses + makeAccounts := func(num int) map[common.Hash][]byte { + accounts := make(map[common.Hash][]byte) + for i := 0; i < num; i++ { + h := common.Hash{} + binary.BigEndian.PutUint64(h[:], uint64(i+1)) + accounts[h] = randomAccount() + } + return accounts + } + // Build up a large stack of snapshots + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + for i := 1; i < 128; i++ { + snaps.Update(common.HexToHash(fmt.Sprintf("0x%02x", i+1)), common.HexToHash(fmt.Sprintf("0x%02x", i)), nil, makeAccounts(200), nil) + } + // Iterate the entire stack and ensure everything is hit only once + head := snaps.Snapshot(common.HexToHash("0x80")) + verifyIterator(t, 200, head.(snapshot).AccountIterator(common.Hash{}), verifyNothing) + verifyIterator(t, 200, head.(*diffLayer).newBinaryAccountIterator(), verifyAccount) + + it, _ := snaps.AccountIterator(common.HexToHash("0x80"), common.Hash{}) + verifyIterator(t, 200, it, verifyAccount) + it.Release() + + // Test after persist some bottom-most layers into the disk, + // the functionalities still work. + limit := aggregatorMemoryLimit + defer func() { + aggregatorMemoryLimit = limit + }() + aggregatorMemoryLimit = 0 // Force pushing the bottom-most layer into disk + snaps.Cap(common.HexToHash("0x80"), 2) + + verifyIterator(t, 200, head.(*diffLayer).newBinaryAccountIterator(), verifyAccount) + + it, _ = snaps.AccountIterator(common.HexToHash("0x80"), common.Hash{}) + verifyIterator(t, 200, it, verifyAccount) + it.Release() +} + +// TestAccountIteratorFlattening tests what happens when we +// - have a live iterator on child C (parent C1 -> C2 .. CN) +// - flattens C2 all the way into CN +// - continues iterating +func TestAccountIteratorFlattening(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Create a stack of diffs on top + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa", "0xee", "0xff", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xbb", "0xdd", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, + randomAccountSet("0xcc", "0xf0", "0xff"), nil) + + // Create an iterator and flatten the data from underneath it + it, _ := snaps.AccountIterator(common.HexToHash("0x04"), common.Hash{}) + defer it.Release() + + if err := snaps.Cap(common.HexToHash("0x04"), 1); err != nil { + t.Fatalf("failed to flatten snapshot stack: %v", err) + } + //verifyIterator(t, 7, it) +} + +func TestAccountIteratorSeek(t *testing.T) { + // Create a snapshot stack with some initial data + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa", "0xee", "0xff", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xbb", "0xdd", "0xf0"), nil) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, + randomAccountSet("0xcc", "0xf0", "0xff"), nil) + + // Account set is now + // 02: aa, ee, f0, ff + // 03: aa, bb, dd, ee, f0 (, f0), ff + // 04: aa, bb, cc, dd, ee, f0 (, f0), ff (, ff) + // Construct various iterators and ensure their traversal is correct + it, _ := snaps.AccountIterator(common.HexToHash("0x02"), common.HexToHash("0xdd")) + defer it.Release() + verifyIterator(t, 3, it, verifyAccount) // expected: ee, f0, ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x02"), common.HexToHash("0xaa")) + defer it.Release() + verifyIterator(t, 4, it, verifyAccount) // expected: aa, ee, f0, ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x02"), common.HexToHash("0xff")) + defer it.Release() + verifyIterator(t, 1, it, verifyAccount) // expected: ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x02"), common.HexToHash("0xff1")) + defer it.Release() + verifyIterator(t, 0, it, verifyAccount) // expected: nothing + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.HexToHash("0xbb")) + defer it.Release() + verifyIterator(t, 6, it, verifyAccount) // expected: bb, cc, dd, ee, f0, ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.HexToHash("0xef")) + defer it.Release() + verifyIterator(t, 2, it, verifyAccount) // expected: f0, ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.HexToHash("0xf0")) + defer it.Release() + verifyIterator(t, 2, it, verifyAccount) // expected: f0, ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.HexToHash("0xff")) + defer it.Release() + verifyIterator(t, 1, it, verifyAccount) // expected: ff + + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.HexToHash("0xff1")) + defer it.Release() + verifyIterator(t, 0, it, verifyAccount) // expected: nothing +} + +func TestStorageIteratorSeek(t *testing.T) { + // Create a snapshot stack with some initial data + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Stack three diff layers on top with various overlaps + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x01", "0x03", "0x05"}}, nil)) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x02", "0x05", "0x06"}}, nil)) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x01", "0x05", "0x08"}}, nil)) + + // Account set is now + // 02: 01, 03, 05 + // 03: 01, 02, 03, 05 (, 05), 06 + // 04: 01(, 01), 02, 03, 05(, 05, 05), 06, 08 + // Construct various iterators and ensure their traversal is correct + it, _ := snaps.StorageIterator(common.HexToHash("0x02"), common.HexToHash("0xaa"), common.HexToHash("0x01")) + defer it.Release() + verifyIterator(t, 3, it, verifyStorage) // expected: 01, 03, 05 + + it, _ = snaps.StorageIterator(common.HexToHash("0x02"), common.HexToHash("0xaa"), common.HexToHash("0x02")) + defer it.Release() + verifyIterator(t, 2, it, verifyStorage) // expected: 03, 05 + + it, _ = snaps.StorageIterator(common.HexToHash("0x02"), common.HexToHash("0xaa"), common.HexToHash("0x5")) + defer it.Release() + verifyIterator(t, 1, it, verifyStorage) // expected: 05 + + it, _ = snaps.StorageIterator(common.HexToHash("0x02"), common.HexToHash("0xaa"), common.HexToHash("0x6")) + defer it.Release() + verifyIterator(t, 0, it, verifyStorage) // expected: nothing + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.HexToHash("0x01")) + defer it.Release() + verifyIterator(t, 6, it, verifyStorage) // expected: 01, 02, 03, 05, 06, 08 + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.HexToHash("0x05")) + defer it.Release() + verifyIterator(t, 3, it, verifyStorage) // expected: 05, 06, 08 + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.HexToHash("0x08")) + defer it.Release() + verifyIterator(t, 1, it, verifyStorage) // expected: 08 + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.HexToHash("0x09")) + defer it.Release() + verifyIterator(t, 0, it, verifyStorage) // expected: nothing +} + +// TestAccountIteratorDeletions tests that the iterator behaves correct when there are +// deleted accounts (where the Account() value is nil). The iterator +// should not output any accounts or nil-values for those cases. +func TestAccountIteratorDeletions(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Stack three diff layers on top with various overlaps + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), + nil, randomAccountSet("0x11", "0x22", "0x33"), nil) + + deleted := common.HexToHash("0x22") + destructed := map[common.Hash]struct{}{ + deleted: {}, + } + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), + destructed, randomAccountSet("0x11", "0x33"), nil) + + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), + nil, randomAccountSet("0x33", "0x44", "0x55"), nil) + + // The output should be 11,33,44,55 + it, _ := snaps.AccountIterator(common.HexToHash("0x04"), common.Hash{}) + // Do a quick check + verifyIterator(t, 4, it, verifyAccount) + it.Release() + + // And a more detailed verification that we indeed do not see '0x22' + it, _ = snaps.AccountIterator(common.HexToHash("0x04"), common.Hash{}) + defer it.Release() + for it.Next() { + hash := it.Hash() + if it.Account() == nil { + t.Errorf("iterator returned nil-value for hash %x", hash) + } + if hash == deleted { + t.Errorf("expected deleted elem %x to not be returned by iterator", deleted) + } + } +} + +func TestStorageIteratorDeletions(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Stack three diff layers on top with various overlaps + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x01", "0x03", "0x05"}}, nil)) + + snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x02", "0x04", "0x06"}}, [][]string{{"0x01", "0x03"}})) + + // The output should be 02,04,05,06 + it, _ := snaps.StorageIterator(common.HexToHash("0x03"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 4, it, verifyStorage) + it.Release() + + // The output should be 04,05,06 + it, _ = snaps.StorageIterator(common.HexToHash("0x03"), common.HexToHash("0xaa"), common.HexToHash("0x03")) + verifyIterator(t, 3, it, verifyStorage) + it.Release() + + // Destruct the whole storage + destructed := map[common.Hash]struct{}{ + common.HexToHash("0xaa"): {}, + } + snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), destructed, nil, nil) + + it, _ = snaps.StorageIterator(common.HexToHash("0x04"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 0, it, verifyStorage) + it.Release() + + // Re-insert the slots of the same account + snaps.Update(common.HexToHash("0x05"), common.HexToHash("0x04"), nil, + randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x07", "0x08", "0x09"}}, nil)) + + // The output should be 07,08,09 + it, _ = snaps.StorageIterator(common.HexToHash("0x05"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 3, it, verifyStorage) + it.Release() + + // Destruct the whole storage but re-create the account in the same layer + snaps.Update(common.HexToHash("0x06"), common.HexToHash("0x05"), destructed, randomAccountSet("0xaa"), randomStorageSet([]string{"0xaa"}, [][]string{{"0x11", "0x12"}}, nil)) + it, _ = snaps.StorageIterator(common.HexToHash("0x06"), common.HexToHash("0xaa"), common.Hash{}) + verifyIterator(t, 2, it, verifyStorage) // The output should be 11,12 + it.Release() + + verifyIterator(t, 2, snaps.Snapshot(common.HexToHash("0x06")).(*diffLayer).newBinaryStorageIterator(common.HexToHash("0xaa")), verifyStorage) +} + +// BenchmarkAccountIteratorTraversal is a bit a bit notorious -- all layers contain the +// exact same 200 accounts. That means that we need to process 2000 items, but +// only spit out 200 values eventually. +// +// The value-fetching benchmark is easy on the binary iterator, since it never has to reach +// down at any depth for retrieving the values -- all are on the toppmost layer +// +// BenchmarkAccountIteratorTraversal/binary_iterator_keys-6 2239 483674 ns/op +// BenchmarkAccountIteratorTraversal/binary_iterator_values-6 2403 501810 ns/op +// BenchmarkAccountIteratorTraversal/fast_iterator_keys-6 1923 677966 ns/op +// BenchmarkAccountIteratorTraversal/fast_iterator_values-6 1741 649967 ns/op +func BenchmarkAccountIteratorTraversal(b *testing.B) { + // Create a custom account factory to recreate the same addresses + makeAccounts := func(num int) map[common.Hash][]byte { + accounts := make(map[common.Hash][]byte) + for i := 0; i < num; i++ { + h := common.Hash{} + binary.BigEndian.PutUint64(h[:], uint64(i+1)) + accounts[h] = randomAccount() + } + return accounts + } + // Build up a large stack of snapshots + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + for i := 1; i <= 100; i++ { + snaps.Update(common.HexToHash(fmt.Sprintf("0x%02x", i+1)), common.HexToHash(fmt.Sprintf("0x%02x", i)), nil, makeAccounts(200), nil) + } + // We call this once before the benchmark, so the creation of + // sorted accountlists are not included in the results. + head := snaps.Snapshot(common.HexToHash("0x65")) + head.(*diffLayer).newBinaryAccountIterator() + + b.Run("binary iterator keys", func(b *testing.B) { + for i := 0; i < b.N; i++ { + got := 0 + it := head.(*diffLayer).newBinaryAccountIterator() + for it.Next() { + got++ + } + if exp := 200; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("binary iterator values", func(b *testing.B) { + for i := 0; i < b.N; i++ { + got := 0 + it := head.(*diffLayer).newBinaryAccountIterator() + for it.Next() { + got++ + head.(*diffLayer).accountRLP(it.Hash(), 0) + } + if exp := 200; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("fast iterator keys", func(b *testing.B) { + for i := 0; i < b.N; i++ { + it, _ := snaps.AccountIterator(common.HexToHash("0x65"), common.Hash{}) + defer it.Release() + + got := 0 + for it.Next() { + got++ + } + if exp := 200; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("fast iterator values", func(b *testing.B) { + for i := 0; i < b.N; i++ { + it, _ := snaps.AccountIterator(common.HexToHash("0x65"), common.Hash{}) + defer it.Release() + + got := 0 + for it.Next() { + got++ + it.Account() + } + if exp := 200; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) +} + +// BenchmarkAccountIteratorLargeBaselayer is a pretty realistic benchmark, where +// the baselayer is a lot larger than the upper layer. +// +// This is heavy on the binary iterator, which in most cases will have to +// call recursively 100 times for the majority of the values +// +// BenchmarkAccountIteratorLargeBaselayer/binary_iterator_(keys)-6 514 1971999 ns/op +// BenchmarkAccountIteratorLargeBaselayer/binary_iterator_(values)-6 61 18997492 ns/op +// BenchmarkAccountIteratorLargeBaselayer/fast_iterator_(keys)-6 10000 114385 ns/op +// BenchmarkAccountIteratorLargeBaselayer/fast_iterator_(values)-6 4047 296823 ns/op +func BenchmarkAccountIteratorLargeBaselayer(b *testing.B) { + // Create a custom account factory to recreate the same addresses + makeAccounts := func(num int) map[common.Hash][]byte { + accounts := make(map[common.Hash][]byte) + for i := 0; i < num; i++ { + h := common.Hash{} + binary.BigEndian.PutUint64(h[:], uint64(i+1)) + accounts[h] = randomAccount() + } + return accounts + } + // Build up a large stack of snapshots + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, makeAccounts(2000), nil) + for i := 2; i <= 100; i++ { + snaps.Update(common.HexToHash(fmt.Sprintf("0x%02x", i+1)), common.HexToHash(fmt.Sprintf("0x%02x", i)), nil, makeAccounts(20), nil) + } + // We call this once before the benchmark, so the creation of + // sorted accountlists are not included in the results. + head := snaps.Snapshot(common.HexToHash("0x65")) + head.(*diffLayer).newBinaryAccountIterator() + + b.Run("binary iterator (keys)", func(b *testing.B) { + for i := 0; i < b.N; i++ { + got := 0 + it := head.(*diffLayer).newBinaryAccountIterator() + for it.Next() { + got++ + } + if exp := 2000; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("binary iterator (values)", func(b *testing.B) { + for i := 0; i < b.N; i++ { + got := 0 + it := head.(*diffLayer).newBinaryAccountIterator() + for it.Next() { + got++ + v := it.Hash() + head.(*diffLayer).accountRLP(v, 0) + } + if exp := 2000; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("fast iterator (keys)", func(b *testing.B) { + for i := 0; i < b.N; i++ { + it, _ := snaps.AccountIterator(common.HexToHash("0x65"), common.Hash{}) + defer it.Release() + + got := 0 + for it.Next() { + got++ + } + if exp := 2000; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) + b.Run("fast iterator (values)", func(b *testing.B) { + for i := 0; i < b.N; i++ { + it, _ := snaps.AccountIterator(common.HexToHash("0x65"), common.Hash{}) + defer it.Release() + + got := 0 + for it.Next() { + it.Account() + got++ + } + if exp := 2000; got != exp { + b.Errorf("iterator len wrong, expected %d, got %d", exp, got) + } + } + }) +} + +/* +func BenchmarkBinaryAccountIteration(b *testing.B) { + benchmarkAccountIteration(b, func(snap snapshot) AccountIterator { + return snap.(*diffLayer).newBinaryAccountIterator() + }) +} + +func BenchmarkFastAccountIteration(b *testing.B) { + benchmarkAccountIteration(b, newFastAccountIterator) +} + +func benchmarkAccountIteration(b *testing.B, iterator func(snap snapshot) AccountIterator) { + // Create a diff stack and randomize the accounts across them + layers := make([]map[common.Hash][]byte, 128) + for i := 0; i < len(layers); i++ { + layers[i] = make(map[common.Hash][]byte) + } + for i := 0; i < b.N; i++ { + depth := rand.Intn(len(layers)) + layers[depth][randomHash()] = randomAccount() + } + stack := snapshot(emptyLayer()) + for _, layer := range layers { + stack = stack.Update(common.Hash{}, layer, nil, nil) + } + // Reset the timers and report all the stats + it := iterator(stack) + + b.ResetTimer() + b.ReportAllocs() + + for it.Next() { + } +} +*/ diff --git a/core/state/snapshot/journal.go b/core/state/snapshot/journal.go new file mode 100644 index 00000000..9a22f273 --- /dev/null +++ b/core/state/snapshot/journal.go @@ -0,0 +1,360 @@ +// 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 snapshot + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "time" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +const journalVersion uint64 = 0 + +// journalGenerator is a disk layer entry containing the generator progress marker. +type journalGenerator struct { + // Indicator that whether the database was in progress of being wiped. + // It's deprecated but keep it here for background compatibility. + Wiping bool + + Done bool // Whether the generator finished creating the snapshot + Marker []byte + Accounts uint64 + Slots uint64 + Storage uint64 +} + +// journalDestruct is an account deletion entry in a diffLayer's disk journal. +type journalDestruct struct { + Hash common.Hash +} + +// journalAccount is an account entry in a diffLayer's disk journal. +type journalAccount struct { + Hash common.Hash + Blob []byte +} + +// journalStorage is an account's storage map in a diffLayer's disk journal. +type journalStorage struct { + Hash common.Hash + Keys []common.Hash + Vals [][]byte +} + +func ParseGeneratorStatus(generatorBlob []byte) string { + if len(generatorBlob) == 0 { + return "" + } + var generator journalGenerator + if err := rlp.DecodeBytes(generatorBlob, &generator); err != nil { + log.Warn("failed to decode snapshot generator", "err", err) + return "" + } + // Figure out whether we're after or within an account + var m string + switch marker := generator.Marker; len(marker) { + case common.HashLength: + m = fmt.Sprintf("at %#x", marker) + case 2 * common.HashLength: + m = fmt.Sprintf("in %#x at %#x", marker[:common.HashLength], marker[common.HashLength:]) + default: + m = fmt.Sprintf("%#x", marker) + } + return fmt.Sprintf(`Done: %v, Accounts: %d, Slots: %d, Storage: %d, Marker: %s`, + generator.Done, generator.Accounts, generator.Slots, generator.Storage, m) +} + +// loadAndParseJournal tries to parse the snapshot journal in latest format. +func loadAndParseJournal(db ethdb.KeyValueStore, base *diskLayer) (snapshot, journalGenerator, error) { + // Retrieve the disk layer generator. It must exist, no matter the + // snapshot is fully generated or not. Otherwise the entire disk + // layer is invalid. + generatorBlob := rawdb.ReadSnapshotGenerator(db) + if len(generatorBlob) == 0 { + return nil, journalGenerator{}, errors.New("missing snapshot generator") + } + var generator journalGenerator + if err := rlp.DecodeBytes(generatorBlob, &generator); err != nil { + return nil, journalGenerator{}, fmt.Errorf("failed to decode snapshot generator: %v", err) + } + // Retrieve the diff layer journal. It's possible that the journal is + // not existent, e.g. the disk layer is generating while that the Geth + // crashes without persisting the diff journal. + // So if there is no journal, or the journal is invalid(e.g. the journal + // is not matched with disk layer; or the it's the legacy-format journal, + // etc.), we just discard all diffs and try to recover them later. + var current snapshot = base + err := iterateJournal(db, func(parent common.Hash, root common.Hash, destructSet map[common.Hash]struct{}, accountData map[common.Hash][]byte, storageData map[common.Hash]map[common.Hash][]byte) error { + current = newDiffLayer(current, root, destructSet, accountData, storageData) + return nil + }) + if err != nil { + return base, generator, nil + } + return current, generator, nil +} + +// loadSnapshot loads a pre-existing state snapshot backed by a key-value store. +func loadSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash, recovery bool) (snapshot, bool, error) { + // If snapshotting is disabled (initial sync in progress), don't do anything, + // wait for the chain to permit us to do something meaningful + if rawdb.ReadSnapshotDisabled(diskdb) { + return nil, true, nil + } + // Retrieve the block number and hash of the snapshot, failing if no snapshot + // is present in the database (or crashed mid-update). + baseRoot := rawdb.ReadSnapshotRoot(diskdb) + if baseRoot == (common.Hash{}) { + return nil, false, errors.New("missing or corrupted snapshot") + } + base := &diskLayer{ + diskdb: diskdb, + triedb: triedb, + cache: fastcache.New(cache * 1024 * 1024), + root: baseRoot, + } + snapshot, generator, err := loadAndParseJournal(diskdb, base) + if err != nil { + log.Warn("Failed to load new-format journal", "error", err) + return nil, false, err + } + // Entire snapshot journal loaded, sanity check the head. If the loaded + // snapshot is not matched with current state root, print a warning log + // or discard the entire snapshot it's legacy snapshot. + // + // Possible scenario: Geth was crashed without persisting journal and then + // restart, the head is rewound to the point with available state(trie) + // which is below the snapshot. In this case the snapshot can be recovered + // by re-executing blocks but right now it's unavailable. + if head := snapshot.Root(); head != root { + // If it's legacy snapshot, or it's new-format snapshot but + // it's not in recovery mode, returns the error here for + // rebuilding the entire snapshot forcibly. + if !recovery { + return nil, false, fmt.Errorf("head doesn't match snapshot: have %#x, want %#x", head, root) + } + // It's in snapshot recovery, the assumption is held that + // the disk layer is always higher than chain head. It can + // be eventually recovered when the chain head beyonds the + // disk layer. + log.Warn("Snapshot is not continuous with chain", "snaproot", head, "chainroot", root) + } + // Everything loaded correctly, resume any suspended operations + if !generator.Done { + // Whether or not wiping was in progress, load any generator progress too + base.genMarker = generator.Marker + if base.genMarker == nil { + base.genMarker = []byte{} + } + base.genPending = make(chan struct{}) + base.genAbort = make(chan chan *generatorStats) + + var origin uint64 + if len(generator.Marker) >= 8 { + origin = binary.BigEndian.Uint64(generator.Marker) + } + go base.generate(&generatorStats{ + origin: origin, + start: time.Now(), + accounts: generator.Accounts, + slots: generator.Slots, + storage: common.StorageSize(generator.Storage), + }) + } + return snapshot, false, nil +} + +// Journal terminates any in-progress snapshot generation, also implicitly pushing +// the progress into the database. +func (dl *diskLayer) Journal(buffer *bytes.Buffer) (common.Hash, error) { + // If the snapshot is currently being generated, abort it + var stats *generatorStats + if dl.genAbort != nil { + abort := make(chan *generatorStats) + dl.genAbort <- abort + + if stats = <-abort; stats != nil { + stats.Log("Journalling in-progress snapshot", dl.root, dl.genMarker) + } + } + // Ensure the layer didn't get stale + dl.lock.RLock() + defer dl.lock.RUnlock() + + if dl.stale { + return common.Hash{}, ErrSnapshotStale + } + // Ensure the generator stats is written even if none was ran this cycle + journalProgress(dl.diskdb, dl.genMarker, stats) + + log.Debug("Journalled disk layer", "root", dl.root) + return dl.root, nil +} + +// Journal writes the memory layer contents into a buffer to be stored in the +// database as the snapshot journal. +func (dl *diffLayer) Journal(buffer *bytes.Buffer) (common.Hash, error) { + // Journal the parent first + base, err := dl.parent.Journal(buffer) + if err != nil { + return common.Hash{}, err + } + // Ensure the layer didn't get stale + dl.lock.RLock() + defer dl.lock.RUnlock() + + if dl.Stale() { + return common.Hash{}, ErrSnapshotStale + } + // Everything below was journalled, persist this layer too + if err := rlp.Encode(buffer, dl.root); err != nil { + return common.Hash{}, err + } + destructs := make([]journalDestruct, 0, len(dl.destructSet)) + for hash := range dl.destructSet { + destructs = append(destructs, journalDestruct{Hash: hash}) + } + if err := rlp.Encode(buffer, destructs); err != nil { + return common.Hash{}, err + } + accounts := make([]journalAccount, 0, len(dl.accountData)) + for hash, blob := range dl.accountData { + accounts = append(accounts, journalAccount{Hash: hash, Blob: blob}) + } + if err := rlp.Encode(buffer, accounts); err != nil { + return common.Hash{}, err + } + storage := make([]journalStorage, 0, len(dl.storageData)) + for hash, slots := range dl.storageData { + keys := make([]common.Hash, 0, len(slots)) + vals := make([][]byte, 0, len(slots)) + for key, val := range slots { + keys = append(keys, key) + vals = append(vals, val) + } + storage = append(storage, journalStorage{Hash: hash, Keys: keys, Vals: vals}) + } + if err := rlp.Encode(buffer, storage); err != nil { + return common.Hash{}, err + } + log.Debug("Journalled diff layer", "root", dl.root, "parent", dl.parent.Root()) + return base, nil +} + +// journalCallback is a function which is invoked by iterateJournal, every +// time a difflayer is loaded from disk. +type journalCallback = func(parent common.Hash, root common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) error + +// iterateJournal iterates through the journalled difflayers, loading them from +// the database, and invoking the callback for each loaded layer. +// The order is incremental; starting with the bottom-most difflayer, going towards +// the most recent layer. +// This method returns error either if there was some error reading from disk, +// OR if the callback returns an error when invoked. +func iterateJournal(db ethdb.KeyValueReader, callback journalCallback) error { + journal := rawdb.ReadSnapshotJournal(db) + if len(journal) == 0 { + log.Warn("Loaded snapshot journal", "diffs", "missing") + return nil + } + r := rlp.NewStream(bytes.NewReader(journal), 0) + // Firstly, resolve the first element as the journal version + version, err := r.Uint64() + if err != nil { + log.Warn("Failed to resolve the journal version", "error", err) + return errors.New("failed to resolve journal version") + } + if version != journalVersion { + log.Warn("Discarded the snapshot journal with wrong version", "required", journalVersion, "got", version) + return errors.New("wrong journal version") + } + // Secondly, resolve the disk layer root, ensure it's continuous + // with disk layer. Note now we can ensure it's the snapshot journal + // correct version, so we expect everything can be resolved properly. + var parent common.Hash + if err := r.Decode(&parent); err != nil { + return errors.New("missing disk layer root") + } + if baseRoot := rawdb.ReadSnapshotRoot(db); baseRoot != parent { + log.Warn("Loaded snapshot journal", "diskroot", baseRoot, "diffs", "unmatched") + return fmt.Errorf("mismatched disk and diff layers") + } + for { + var ( + root common.Hash + destructs []journalDestruct + accounts []journalAccount + storage []journalStorage + destructSet = make(map[common.Hash]struct{}) + accountData = make(map[common.Hash][]byte) + storageData = make(map[common.Hash]map[common.Hash][]byte) + ) + // Read the next diff journal entry + if err := r.Decode(&root); err != nil { + // The first read may fail with EOF, marking the end of the journal + if errors.Is(err, io.EOF) { + return nil + } + return fmt.Errorf("load diff root: %v", err) + } + if err := r.Decode(&destructs); err != nil { + return fmt.Errorf("load diff destructs: %v", err) + } + if err := r.Decode(&accounts); err != nil { + return fmt.Errorf("load diff accounts: %v", err) + } + if err := r.Decode(&storage); err != nil { + return fmt.Errorf("load diff storage: %v", err) + } + for _, entry := range destructs { + destructSet[entry.Hash] = struct{}{} + } + for _, entry := range accounts { + if len(entry.Blob) > 0 { // RLP loses nil-ness, but `[]byte{}` is not a valid item, so reinterpret that + accountData[entry.Hash] = entry.Blob + } else { + accountData[entry.Hash] = nil + } + } + for _, entry := range storage { + slots := make(map[common.Hash][]byte) + for i, key := range entry.Keys { + if len(entry.Vals[i]) > 0 { // RLP loses nil-ness, but `[]byte{}` is not a valid item, so reinterpret that + slots[key] = entry.Vals[i] + } else { + slots[key] = nil + } + } + storageData[entry.Hash] = slots + } + if err := callback(parent, root, destructSet, accountData, storageData); err != nil { + return err + } + parent = root + } +} diff --git a/core/state/snapshot/metrics.go b/core/state/snapshot/metrics.go new file mode 100644 index 00000000..43f417a0 --- /dev/null +++ b/core/state/snapshot/metrics.go @@ -0,0 +1,53 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import "github.com/ethereum/go-ethereum/metrics" + +// Metrics in generation +var ( + snapGeneratedAccountMeter = metrics.NewRegisteredMeter("state/snapshot/generation/account/generated", nil) + snapRecoveredAccountMeter = metrics.NewRegisteredMeter("state/snapshot/generation/account/recovered", nil) + snapWipedAccountMeter = metrics.NewRegisteredMeter("state/snapshot/generation/account/wiped", nil) + snapMissallAccountMeter = metrics.NewRegisteredMeter("state/snapshot/generation/account/missall", nil) + snapGeneratedStorageMeter = metrics.NewRegisteredMeter("state/snapshot/generation/storage/generated", nil) + snapRecoveredStorageMeter = metrics.NewRegisteredMeter("state/snapshot/generation/storage/recovered", nil) + snapWipedStorageMeter = metrics.NewRegisteredMeter("state/snapshot/generation/storage/wiped", nil) + snapMissallStorageMeter = metrics.NewRegisteredMeter("state/snapshot/generation/storage/missall", nil) + snapDanglingStorageMeter = metrics.NewRegisteredMeter("state/snapshot/generation/storage/dangling", nil) + snapSuccessfulRangeProofMeter = metrics.NewRegisteredMeter("state/snapshot/generation/proof/success", nil) + snapFailedRangeProofMeter = metrics.NewRegisteredMeter("state/snapshot/generation/proof/failure", nil) + + // snapAccountProveCounter measures time spent on the account proving + snapAccountProveCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/account/prove", nil) + // snapAccountTrieReadCounter measures time spent on the account trie iteration + snapAccountTrieReadCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/account/trieread", nil) + // snapAccountSnapReadCounter measues time spent on the snapshot account iteration + snapAccountSnapReadCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/account/snapread", nil) + // snapAccountWriteCounter measures time spent on writing/updating/deleting accounts + snapAccountWriteCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/account/write", nil) + // snapStorageProveCounter measures time spent on storage proving + snapStorageProveCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/prove", nil) + // snapStorageTrieReadCounter measures time spent on the storage trie iteration + snapStorageTrieReadCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/trieread", nil) + // snapStorageSnapReadCounter measures time spent on the snapshot storage iteration + snapStorageSnapReadCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/snapread", nil) + // snapStorageWriteCounter measures time spent on writing/updating storages + snapStorageWriteCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/write", nil) + // snapStorageCleanCounter measures time spent on deleting storages + snapStorageCleanCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/clean", nil) +) diff --git a/core/state/snapshot/snapshot.go b/core/state/snapshot/snapshot.go new file mode 100644 index 00000000..76200851 --- /dev/null +++ b/core/state/snapshot/snapshot.go @@ -0,0 +1,844 @@ +// 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 snapshot implements a journalled, dynamic state dump. +package snapshot + +import ( + "bytes" + "errors" + "fmt" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + snapshotCleanAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/hit", nil) + snapshotCleanAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/miss", nil) + snapshotCleanAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/inex", nil) + snapshotCleanAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/read", nil) + snapshotCleanAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/write", nil) + + snapshotCleanStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/hit", nil) + snapshotCleanStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/miss", nil) + snapshotCleanStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/inex", nil) + snapshotCleanStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/read", nil) + snapshotCleanStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/write", nil) + + snapshotDirtyAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/hit", nil) + snapshotDirtyAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/miss", nil) + snapshotDirtyAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/inex", nil) + snapshotDirtyAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/read", nil) + snapshotDirtyAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/write", nil) + + snapshotDirtyStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/hit", nil) + snapshotDirtyStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/miss", nil) + snapshotDirtyStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/inex", nil) + snapshotDirtyStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/read", nil) + snapshotDirtyStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/write", nil) + + snapshotDirtyAccountHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/account/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + snapshotDirtyStorageHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/storage/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + + snapshotFlushAccountItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/item", nil) + snapshotFlushAccountSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/size", nil) + snapshotFlushStorageItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/item", nil) + snapshotFlushStorageSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/size", nil) + + snapshotBloomIndexTimer = metrics.NewRegisteredResettingTimer("state/snapshot/bloom/index", nil) + snapshotBloomErrorGauge = metrics.NewRegisteredGaugeFloat64("state/snapshot/bloom/error", nil) + + snapshotBloomAccountTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/truehit", nil) + snapshotBloomAccountFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/falsehit", nil) + snapshotBloomAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/miss", nil) + + snapshotBloomStorageTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/truehit", nil) + snapshotBloomStorageFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/falsehit", nil) + snapshotBloomStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/miss", nil) + + // ErrSnapshotStale is returned from data accessors if the underlying snapshot + // layer had been invalidated due to the chain progressing forward far enough + // to not maintain the layer's original state. + ErrSnapshotStale = errors.New("snapshot stale") + + // ErrNotCoveredYet is returned from data accessors if the underlying snapshot + // is being generated currently and the requested data item is not yet in the + // range of accounts covered. + ErrNotCoveredYet = errors.New("not covered yet") + + // ErrNotConstructed is returned if the callers want to iterate the snapshot + // while the generation is not finished yet. + ErrNotConstructed = errors.New("snapshot is not constructed") + + // errSnapshotCycle is returned if a snapshot is attempted to be inserted + // that forms a cycle in the snapshot tree. + errSnapshotCycle = errors.New("snapshot cycle") +) + +// Snapshot represents the functionality supported by a snapshot storage layer. +type Snapshot interface { + // Root returns the root hash for which this snapshot was made. + Root() common.Hash + + // Account directly retrieves the account associated with a particular hash in + // the snapshot slim data format. + Account(hash common.Hash) (*Account, error) + + // AccountRLP directly retrieves the account RLP associated with a particular + // hash in the snapshot slim data format. + AccountRLP(hash common.Hash) ([]byte, error) + + // Storage directly retrieves the storage data associated with a particular hash, + // within a particular account. + Storage(accountHash, storageHash common.Hash) ([]byte, error) +} + +// snapshot is the internal version of the snapshot data layer that supports some +// additional methods compared to the public API. +type snapshot interface { + Snapshot + + // Parent returns the subsequent layer of a snapshot, or nil if the base was + // reached. + // + // Note, the method is an internal helper to avoid type switching between the + // disk and diff layers. There is no locking involved. + Parent() snapshot + + // Update creates a new layer on top of the existing snapshot diff tree with + // the specified data items. + // + // Note, the maps are retained by the method to avoid copying everything. + Update(blockRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) *diffLayer + + // Journal commits an entire diff hierarchy to disk into a single journal entry. + // This is meant to be used during shutdown to persist the snapshot without + // flattening everything down (bad for reorgs). + Journal(buffer *bytes.Buffer) (common.Hash, error) + + // Stale return whether this layer has become stale (was flattened across) or + // if it's still live. + Stale() bool + + // AccountIterator creates an account iterator over an arbitrary layer. + AccountIterator(seek common.Hash) AccountIterator + + // StorageIterator creates a storage iterator over an arbitrary layer. + StorageIterator(account common.Hash, seek common.Hash) (StorageIterator, bool) +} + +// Tree is an Ethereum state snapshot tree. It consists of one persistent base +// layer backed by a key-value store, on top of which arbitrarily many in-memory +// diff layers are topped. The memory diffs can form a tree with branching, but +// the disk layer is singleton and common to all. If a reorg goes deeper than the +// disk layer, everything needs to be deleted. +// +// The goal of a state snapshot is twofold: to allow direct access to account and +// storage data to avoid expensive multi-level trie lookups; and to allow sorted, +// cheap iteration of the account/storage tries for sync aid. +type Tree struct { + diskdb ethdb.KeyValueStore // Persistent database to store the snapshot + triedb *trie.Database // In-memory cache to access the trie through + cache int // Megabytes permitted to use for read caches + layers map[common.Hash]snapshot // Collection of all known layers + lock sync.RWMutex + + // Test hooks + onFlatten func() // Hook invoked when the bottom most diff layers are flattened +} + +// New attempts to load an already existing snapshot from a persistent key-value +// store (with a number of memory layers from a journal), ensuring that the head +// of the snapshot matches the expected one. +// +// If the snapshot is missing or the disk layer is broken, the snapshot will be +// reconstructed using both the existing data and the state trie. +// The repair happens on a background thread. +// +// If the memory layers in the journal do not match the disk layer (e.g. there is +// a gap) or the journal is missing, there are two repair cases: +// +// - if the 'recovery' parameter is true, all memory diff-layers will be discarded. +// This case happens when the snapshot is 'ahead' of the state trie. +// - otherwise, the entire snapshot is considered invalid and will be recreated on +// a background thread. +func New(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache int, root common.Hash, async bool, rebuild bool, recovery bool) (*Tree, error) { + // Create a new, empty snapshot tree + snap := &Tree{ + diskdb: diskdb, + triedb: triedb, + cache: cache, + layers: make(map[common.Hash]snapshot), + } + if !async { + defer snap.waitBuild() + } + // Attempt to load a previously persisted snapshot and rebuild one if failed + head, disabled, err := loadSnapshot(diskdb, triedb, cache, root, recovery) + if disabled { + log.Warn("Snapshot maintenance disabled (syncing)") + return snap, nil + } + if err != nil { + if rebuild { + log.Warn("Failed to load snapshot, regenerating", "err", err) + snap.Rebuild(root) + return snap, nil + } + return nil, err // Bail out the error, don't rebuild automatically. + } + // Existing snapshot loaded, seed all the layers + for head != nil { + snap.layers[head.Root()] = head + head = head.Parent() + } + return snap, nil +} + +// waitBuild blocks until the snapshot finishes rebuilding. This method is meant +// to be used by tests to ensure we're testing what we believe we are. +func (t *Tree) waitBuild() { + // Find the rebuild termination channel + var done chan struct{} + + t.lock.RLock() + for _, layer := range t.layers { + if layer, ok := layer.(*diskLayer); ok { + done = layer.genPending + break + } + } + t.lock.RUnlock() + + // Wait until the snapshot is generated + if done != nil { + <-done + } +} + +// Disable interrupts any pending snapshot generator, deletes all the snapshot +// layers in memory and marks snapshots disabled globally. In order to resume +// the snapshot functionality, the caller must invoke Rebuild. +func (t *Tree) Disable() { + // Interrupt any live snapshot layers + t.lock.Lock() + defer t.lock.Unlock() + + for _, layer := range t.layers { + switch layer := layer.(type) { + case *diskLayer: + // If the base layer is generating, abort it + if layer.genAbort != nil { + abort := make(chan *generatorStats) + layer.genAbort <- abort + <-abort + } + // Layer should be inactive now, mark it as stale + layer.lock.Lock() + layer.stale = true + layer.lock.Unlock() + + case *diffLayer: + // If the layer is a simple diff, simply mark as stale + layer.lock.Lock() + atomic.StoreUint32(&layer.stale, 1) + layer.lock.Unlock() + + default: + panic(fmt.Sprintf("unknown layer type: %T", layer)) + } + } + t.layers = map[common.Hash]snapshot{} + + // Delete all snapshot liveness information from the database + batch := t.diskdb.NewBatch() + + rawdb.WriteSnapshotDisabled(batch) + rawdb.DeleteSnapshotRoot(batch) + rawdb.DeleteSnapshotJournal(batch) + rawdb.DeleteSnapshotGenerator(batch) + rawdb.DeleteSnapshotRecoveryNumber(batch) + // Note, we don't delete the sync progress + + if err := batch.Write(); err != nil { + log.Crit("Failed to disable snapshots", "err", err) + } +} + +// Snapshot retrieves a snapshot belonging to the given block root, or nil if no +// snapshot is maintained for that block. +func (t *Tree) Snapshot(blockRoot common.Hash) Snapshot { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.layers[blockRoot] +} + +// Snapshots returns all visited layers from the topmost layer with specific +// root and traverses downward. The layer amount is limited by the given number. +// If nodisk is set, then disk layer is excluded. +func (t *Tree) Snapshots(root common.Hash, limits int, nodisk bool) []Snapshot { + t.lock.RLock() + defer t.lock.RUnlock() + + if limits == 0 { + return nil + } + layer := t.layers[root] + if layer == nil { + return nil + } + var ret []Snapshot + for { + if _, isdisk := layer.(*diskLayer); isdisk && nodisk { + break + } + ret = append(ret, layer) + limits -= 1 + if limits == 0 { + break + } + parent := layer.Parent() + if parent == nil { + break + } + layer = parent + } + return ret +} + +// Update adds a new snapshot into the tree, if that can be linked to an existing +// old parent. It is disallowed to insert a disk layer (the origin of all). +func (t *Tree) Update(blockRoot common.Hash, parentRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) error { + // Reject noop updates to avoid self-loops in the snapshot tree. This is a + // special case that can only happen for Clique networks where empty blocks + // don't modify the state (0 block subsidy). + // + // Although we could silently ignore this internally, it should be the caller's + // responsibility to avoid even attempting to insert such a snapshot. + if blockRoot == parentRoot { + return errSnapshotCycle + } + // Generate a new snapshot on top of the parent + parent := t.Snapshot(parentRoot) + if parent == nil { + return fmt.Errorf("parent [%#x] snapshot missing", parentRoot) + } + snap := parent.(snapshot).Update(blockRoot, destructs, accounts, storage) + + // Save the new snapshot for later + t.lock.Lock() + defer t.lock.Unlock() + + t.layers[snap.root] = snap + return nil +} + +// Cap traverses downwards the snapshot tree from a head block hash until the +// number of allowed layers are crossed. All layers beyond the permitted number +// are flattened downwards. +// +// Note, the final diff layer count in general will be one more than the amount +// requested. This happens because the bottom-most diff layer is the accumulator +// which may or may not overflow and cascade to disk. Since this last layer's +// survival is only known *after* capping, we need to omit it from the count if +// we want to ensure that *at least* the requested number of diff layers remain. +func (t *Tree) Cap(root common.Hash, layers int) error { + // Retrieve the head snapshot to cap from + snap := t.Snapshot(root) + if snap == nil { + return fmt.Errorf("snapshot [%#x] missing", root) + } + diff, ok := snap.(*diffLayer) + if !ok { + return fmt.Errorf("snapshot [%#x] is disk layer", root) + } + // If the generator is still running, use a more aggressive cap + diff.origin.lock.RLock() + if diff.origin.genMarker != nil && layers > 8 { + layers = 8 + } + diff.origin.lock.RUnlock() + + // Run the internal capping and discard all stale layers + t.lock.Lock() + defer t.lock.Unlock() + + // Flattening the bottom-most diff layer requires special casing since there's + // no child to rewire to the grandparent. In that case we can fake a temporary + // child for the capping and then remove it. + if layers == 0 { + // If full commit was requested, flatten the diffs and merge onto disk + diff.lock.RLock() + base := diffToDisk(diff.flatten().(*diffLayer)) + diff.lock.RUnlock() + + // Replace the entire snapshot tree with the flat base + t.layers = map[common.Hash]snapshot{base.root: base} + return nil + } + persisted := t.cap(diff, layers) + + // Remove any layer that is stale or links into a stale layer + children := make(map[common.Hash][]common.Hash) + for root, snap := range t.layers { + if diff, ok := snap.(*diffLayer); ok { + parent := diff.parent.Root() + children[parent] = append(children[parent], root) + } + } + var remove func(root common.Hash) + remove = func(root common.Hash) { + delete(t.layers, root) + for _, child := range children[root] { + remove(child) + } + delete(children, root) + } + for root, snap := range t.layers { + if snap.Stale() { + remove(root) + } + } + // If the disk layer was modified, regenerate all the cumulative blooms + if persisted != nil { + var rebloom func(root common.Hash) + rebloom = func(root common.Hash) { + if diff, ok := t.layers[root].(*diffLayer); ok { + diff.rebloom(persisted) + } + for _, child := range children[root] { + rebloom(child) + } + } + rebloom(persisted.root) + } + return nil +} + +// cap traverses downwards the diff tree until the number of allowed layers are +// crossed. All diffs beyond the permitted number are flattened downwards. If the +// layer limit is reached, memory cap is also enforced (but not before). +// +// The method returns the new disk layer if diffs were persisted into it. +// +// Note, the final diff layer count in general will be one more than the amount +// requested. This happens because the bottom-most diff layer is the accumulator +// which may or may not overflow and cascade to disk. Since this last layer's +// survival is only known *after* capping, we need to omit it from the count if +// we want to ensure that *at least* the requested number of diff layers remain. +func (t *Tree) cap(diff *diffLayer, layers int) *diskLayer { + // Dive until we run out of layers or reach the persistent database + for i := 0; i < layers-1; i++ { + // If we still have diff layers below, continue down + if parent, ok := diff.parent.(*diffLayer); ok { + diff = parent + } else { + // Diff stack too shallow, return without modifications + return nil + } + } + // We're out of layers, flatten anything below, stopping if it's the disk or if + // the memory limit is not yet exceeded. + switch parent := diff.parent.(type) { + case *diskLayer: + return nil + + case *diffLayer: + // Hold the write lock until the flattened parent is linked correctly. + // Otherwise, the stale layer may be accessed by external reads in the + // meantime. + diff.lock.Lock() + defer diff.lock.Unlock() + + // Flatten the parent into the grandparent. The flattening internally obtains a + // write lock on grandparent. + flattened := parent.flatten().(*diffLayer) + t.layers[flattened.root] = flattened + + // Invoke the hook if it's registered. Ugly hack. + if t.onFlatten != nil { + t.onFlatten() + } + diff.parent = flattened + if flattened.memory < aggregatorMemoryLimit { + // Accumulator layer is smaller than the limit, so we can abort, unless + // there's a snapshot being generated currently. In that case, the trie + // will move from underneath the generator so we **must** merge all the + // partial data down into the snapshot and restart the generation. + if flattened.parent.(*diskLayer).genAbort == nil { + return nil + } + } + default: + panic(fmt.Sprintf("unknown data layer: %T", parent)) + } + // If the bottom-most layer is larger than our memory cap, persist to disk + bottom := diff.parent.(*diffLayer) + + bottom.lock.RLock() + base := diffToDisk(bottom) + bottom.lock.RUnlock() + + t.layers[base.root] = base + diff.parent = base + return base +} + +// diffToDisk merges a bottom-most diff into the persistent disk layer underneath +// it. The method will panic if called onto a non-bottom-most diff layer. +// +// The disk layer persistence should be operated in an atomic way. All updates should +// be discarded if the whole transition if not finished. +func diffToDisk(bottom *diffLayer) *diskLayer { + var ( + base = bottom.parent.(*diskLayer) + batch = base.diskdb.NewBatch() + stats *generatorStats + ) + // If the disk layer is running a snapshot generator, abort it + if base.genAbort != nil { + abort := make(chan *generatorStats) + base.genAbort <- abort + stats = <-abort + } + // Put the deletion in the batch writer, flush all updates in the final step. + rawdb.DeleteSnapshotRoot(batch) + + // Mark the original base as stale as we're going to create a new wrapper + base.lock.Lock() + if base.stale { + panic("parent disk layer is stale") // we've committed into the same base from two children, boo + } + base.stale = true + base.lock.Unlock() + + // Destroy all the destructed accounts from the database + for hash := range bottom.destructSet { + // Skip any account not covered yet by the snapshot + if base.genMarker != nil && bytes.Compare(hash[:], base.genMarker) > 0 { + continue + } + // Remove all storage slots + rawdb.DeleteAccountSnapshot(batch, hash) + base.cache.Set(hash[:], nil) + + it := rawdb.IterateStorageSnapshots(base.diskdb, hash) + for it.Next() { + key := it.Key() + batch.Delete(key) + base.cache.Del(key[1:]) + snapshotFlushStorageItemMeter.Mark(1) + + // Ensure we don't delete too much data blindly (contract can be + // huge). It's ok to flush, the root will go missing in case of a + // crash and we'll detect and regenerate the snapshot. + if batch.ValueSize() > ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + log.Crit("Failed to write storage deletions", "err", err) + } + batch.Reset() + } + } + it.Release() + } + // Push all updated accounts into the database + for hash, data := range bottom.accountData { + // Skip any account not covered yet by the snapshot + if base.genMarker != nil && bytes.Compare(hash[:], base.genMarker) > 0 { + continue + } + // Push the account to disk + rawdb.WriteAccountSnapshot(batch, hash, data) + base.cache.Set(hash[:], data) + snapshotCleanAccountWriteMeter.Mark(int64(len(data))) + + snapshotFlushAccountItemMeter.Mark(1) + snapshotFlushAccountSizeMeter.Mark(int64(len(data))) + + // Ensure we don't write too much data blindly. It's ok to flush, the + // root will go missing in case of a crash and we'll detect and regen + // the snapshot. + if batch.ValueSize() > ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + log.Crit("Failed to write storage deletions", "err", err) + } + batch.Reset() + } + } + // Push all the storage slots into the database + for accountHash, storage := range bottom.storageData { + // Skip any account not covered yet by the snapshot + if base.genMarker != nil && bytes.Compare(accountHash[:], base.genMarker) > 0 { + continue + } + // Generation might be mid-account, track that case too + midAccount := base.genMarker != nil && bytes.Equal(accountHash[:], base.genMarker[:common.HashLength]) + + for storageHash, data := range storage { + // Skip any slot not covered yet by the snapshot + if midAccount && bytes.Compare(storageHash[:], base.genMarker[common.HashLength:]) > 0 { + continue + } + if len(data) > 0 { + rawdb.WriteStorageSnapshot(batch, accountHash, storageHash, data) + base.cache.Set(append(accountHash[:], storageHash[:]...), data) + snapshotCleanStorageWriteMeter.Mark(int64(len(data))) + } else { + rawdb.DeleteStorageSnapshot(batch, accountHash, storageHash) + base.cache.Set(append(accountHash[:], storageHash[:]...), nil) + } + snapshotFlushStorageItemMeter.Mark(1) + snapshotFlushStorageSizeMeter.Mark(int64(len(data))) + } + } + // Update the snapshot block marker and write any remainder data + rawdb.WriteSnapshotRoot(batch, bottom.root) + + // Write out the generator progress marker and report + journalProgress(batch, base.genMarker, stats) + + // Flush all the updates in the single db operation. Ensure the + // disk layer transition is atomic. + if err := batch.Write(); err != nil { + log.Crit("Failed to write leftover snapshot", "err", err) + } + log.Debug("Journalled disk layer", "root", bottom.root, "complete", base.genMarker == nil) + res := &diskLayer{ + root: bottom.root, + cache: base.cache, + diskdb: base.diskdb, + triedb: base.triedb, + genMarker: base.genMarker, + genPending: base.genPending, + } + // If snapshot generation hasn't finished yet, port over all the starts and + // continue where the previous round left off. + // + // Note, the `base.genAbort` comparison is not used normally, it's checked + // to allow the tests to play with the marker without triggering this path. + if base.genMarker != nil && base.genAbort != nil { + res.genMarker = base.genMarker + res.genAbort = make(chan chan *generatorStats) + go res.generate(stats) + } + return res +} + +// Journal commits an entire diff hierarchy to disk into a single journal entry. +// This is meant to be used during shutdown to persist the snapshot without +// flattening everything down (bad for reorgs). +// +// The method returns the root hash of the base layer that needs to be persisted +// to disk as a trie too to allow continuing any pending generation op. +func (t *Tree) Journal(root common.Hash) (common.Hash, error) { + // Retrieve the head snapshot to journal from var snap snapshot + snap := t.Snapshot(root) + if snap == nil { + return common.Hash{}, fmt.Errorf("snapshot [%#x] missing", root) + } + // Run the journaling + t.lock.Lock() + defer t.lock.Unlock() + + // Firstly write out the metadata of journal + journal := new(bytes.Buffer) + if err := rlp.Encode(journal, journalVersion); err != nil { + return common.Hash{}, err + } + diskroot := t.diskRoot() + if diskroot == (common.Hash{}) { + return common.Hash{}, errors.New("invalid disk root") + } + // Secondly write out the disk layer root, ensure the + // diff journal is continuous with disk. + if err := rlp.Encode(journal, diskroot); err != nil { + return common.Hash{}, err + } + // Finally write out the journal of each layer in reverse order. + base, err := snap.(snapshot).Journal(journal) + if err != nil { + return common.Hash{}, err + } + // Store the journal into the database and return + rawdb.WriteSnapshotJournal(t.diskdb, journal.Bytes()) + return base, nil +} + +// Rebuild wipes all available snapshot data from the persistent database and +// discard all caches and diff layers. Afterwards, it starts a new snapshot +// generator with the given root hash. +func (t *Tree) Rebuild(root common.Hash) { + t.lock.Lock() + defer t.lock.Unlock() + + // Firstly delete any recovery flag in the database. Because now we are + // building a brand new snapshot. Also reenable the snapshot feature. + rawdb.DeleteSnapshotRecoveryNumber(t.diskdb) + rawdb.DeleteSnapshotDisabled(t.diskdb) + + // Iterate over and mark all layers stale + for _, layer := range t.layers { + switch layer := layer.(type) { + case *diskLayer: + // If the base layer is generating, abort it and save + if layer.genAbort != nil { + abort := make(chan *generatorStats) + layer.genAbort <- abort + <-abort + } + // Layer should be inactive now, mark it as stale + layer.lock.Lock() + layer.stale = true + layer.lock.Unlock() + + case *diffLayer: + // If the layer is a simple diff, simply mark as stale + layer.lock.Lock() + atomic.StoreUint32(&layer.stale, 1) + layer.lock.Unlock() + + default: + panic(fmt.Sprintf("unknown layer type: %T", layer)) + } + } + // Start generating a new snapshot from scratch on a background thread. The + // generator will run a wiper first if there's not one running right now. + log.Info("Rebuilding state snapshot") + t.layers = map[common.Hash]snapshot{ + root: generateSnapshot(t.diskdb, t.triedb, t.cache, root), + } +} + +// AccountIterator creates a new account iterator for the specified root hash and +// seeks to a starting account hash. +func (t *Tree) AccountIterator(root common.Hash, seek common.Hash) (AccountIterator, error) { + ok, err := t.generating() + if err != nil { + return nil, err + } + if ok { + return nil, ErrNotConstructed + } + return newFastAccountIterator(t, root, seek) +} + +// StorageIterator creates a new storage iterator for the specified root hash and +// account. The iterator will be move to the specific start position. +func (t *Tree) StorageIterator(root common.Hash, account common.Hash, seek common.Hash) (StorageIterator, error) { + ok, err := t.generating() + if err != nil { + return nil, err + } + if ok { + return nil, ErrNotConstructed + } + return newFastStorageIterator(t, root, account, seek) +} + +// Verify iterates the whole state(all the accounts as well as the corresponding storages) +// with the specific root and compares the re-computed hash with the original one. +func (t *Tree) Verify(root common.Hash) error { + acctIt, err := t.AccountIterator(root, common.Hash{}) + if err != nil { + return err + } + defer acctIt.Release() + + got, err := generateTrieRoot(nil, acctIt, common.Hash{}, stackTrieGenerate, func(db ethdb.KeyValueWriter, accountHash, codeHash common.Hash, stat *generateStats) (common.Hash, error) { + storageIt, err := t.StorageIterator(root, accountHash, common.Hash{}) + if err != nil { + return common.Hash{}, err + } + defer storageIt.Release() + + hash, err := generateTrieRoot(nil, storageIt, accountHash, stackTrieGenerate, nil, stat, false) + if err != nil { + return common.Hash{}, err + } + return hash, nil + }, newGenerateStats(), true) + + if err != nil { + return err + } + if got != root { + return fmt.Errorf("state root hash mismatch: got %x, want %x", got, root) + } + return nil +} + +// disklayer is an internal helper function to return the disk layer. +// The lock of snapTree is assumed to be held already. +func (t *Tree) disklayer() *diskLayer { + var snap snapshot + for _, s := range t.layers { + snap = s + break + } + if snap == nil { + return nil + } + switch layer := snap.(type) { + case *diskLayer: + return layer + case *diffLayer: + return layer.origin + default: + panic(fmt.Sprintf("%T: undefined layer", snap)) + } +} + +// diskRoot is a internal helper function to return the disk layer root. +// The lock of snapTree is assumed to be held already. +func (t *Tree) diskRoot() common.Hash { + disklayer := t.disklayer() + if disklayer == nil { + return common.Hash{} + } + return disklayer.Root() +} + +// generating is an internal helper function which reports whether the snapshot +// is still under the construction. +func (t *Tree) generating() (bool, error) { + t.lock.Lock() + defer t.lock.Unlock() + + layer := t.disklayer() + if layer == nil { + return false, errors.New("disk layer is missing") + } + layer.lock.RLock() + defer layer.lock.RUnlock() + return layer.genMarker != nil, nil +} + +// diskRoot is a external helper function to return the disk layer root. +func (t *Tree) DiskRoot() common.Hash { + t.lock.Lock() + defer t.lock.Unlock() + + return t.diskRoot() +} diff --git a/core/state/snapshot/snapshot_test.go b/core/state/snapshot/snapshot_test.go new file mode 100644 index 00000000..7c8077b6 --- /dev/null +++ b/core/state/snapshot/snapshot_test.go @@ -0,0 +1,486 @@ +// 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 snapshot + +import ( + "encoding/binary" + "fmt" + "math/big" + "math/rand" + "testing" + "time" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/rlp" +) + +// randomHash generates a random blob of data and returns it as a hash. +func randomHash() common.Hash { + var hash common.Hash + if n, err := rand.Read(hash[:]); n != common.HashLength || err != nil { + panic(err) + } + return hash +} + +// randomAccount generates a random account and returns it RLP encoded. +func randomAccount() []byte { + root := randomHash() + a := Account{ + Balance: big.NewInt(rand.Int63()), + Nonce: rand.Uint64(), + Root: root[:], + CodeHash: emptyCode[:], + } + data, _ := rlp.EncodeToBytes(a) + return data +} + +// randomAccountSet generates a set of random accounts with the given strings as +// the account address hashes. +func randomAccountSet(hashes ...string) map[common.Hash][]byte { + accounts := make(map[common.Hash][]byte) + for _, hash := range hashes { + accounts[common.HexToHash(hash)] = randomAccount() + } + return accounts +} + +// randomStorageSet generates a set of random slots with the given strings as +// the slot addresses. +func randomStorageSet(accounts []string, hashes [][]string, nilStorage [][]string) map[common.Hash]map[common.Hash][]byte { + storages := make(map[common.Hash]map[common.Hash][]byte) + for index, account := range accounts { + storages[common.HexToHash(account)] = make(map[common.Hash][]byte) + + if index < len(hashes) { + hashes := hashes[index] + for _, hash := range hashes { + storages[common.HexToHash(account)][common.HexToHash(hash)] = randomHash().Bytes() + } + } + if index < len(nilStorage) { + nils := nilStorage[index] + for _, hash := range nils { + storages[common.HexToHash(account)][common.HexToHash(hash)] = nil + } + } + } + return storages +} + +// Tests that if a disk layer becomes stale, no active external references will +// be returned with junk data. This version of the test flattens every diff layer +// to check internal corner case around the bottom-most memory accumulator. +func TestDiskLayerExternalInvalidationFullFlatten(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Retrieve a reference to the base and commit a diff on top + ref := snaps.Snapshot(base.root) + + accounts := map[common.Hash][]byte{ + common.HexToHash("0xa1"): randomAccount(), + } + if err := snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if n := len(snaps.layers); n != 2 { + t.Errorf("pre-cap layer count mismatch: have %d, want %d", n, 2) + } + // Commit the diff layer onto the disk and ensure it's persisted + if err := snaps.Cap(common.HexToHash("0x02"), 0); err != nil { + t.Fatalf("failed to merge diff layer onto disk: %v", err) + } + // Since the base layer was modified, ensure that data retrieval on the external reference fail + if acc, err := ref.Account(common.HexToHash("0x01")); err != ErrSnapshotStale { + t.Errorf("stale reference returned account: %#x (err: %v)", acc, err) + } + if slot, err := ref.Storage(common.HexToHash("0xa1"), common.HexToHash("0xb1")); err != ErrSnapshotStale { + t.Errorf("stale reference returned storage slot: %#x (err: %v)", slot, err) + } + if n := len(snaps.layers); n != 1 { + t.Errorf("post-cap layer count mismatch: have %d, want %d", n, 1) + fmt.Println(snaps.layers) + } +} + +// Tests that if a disk layer becomes stale, no active external references will +// be returned with junk data. This version of the test retains the bottom diff +// layer to check the usual mode of operation where the accumulator is retained. +func TestDiskLayerExternalInvalidationPartialFlatten(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Retrieve a reference to the base and commit two diffs on top + ref := snaps.Snapshot(base.root) + + accounts := map[common.Hash][]byte{ + common.HexToHash("0xa1"): randomAccount(), + } + if err := snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if err := snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if n := len(snaps.layers); n != 3 { + t.Errorf("pre-cap layer count mismatch: have %d, want %d", n, 3) + } + // Commit the diff layer onto the disk and ensure it's persisted + defer func(memcap uint64) { aggregatorMemoryLimit = memcap }(aggregatorMemoryLimit) + aggregatorMemoryLimit = 0 + + if err := snaps.Cap(common.HexToHash("0x03"), 1); err != nil { + t.Fatalf("failed to merge accumulator onto disk: %v", err) + } + // Since the base layer was modified, ensure that data retrievald on the external reference fail + if acc, err := ref.Account(common.HexToHash("0x01")); err != ErrSnapshotStale { + t.Errorf("stale reference returned account: %#x (err: %v)", acc, err) + } + if slot, err := ref.Storage(common.HexToHash("0xa1"), common.HexToHash("0xb1")); err != ErrSnapshotStale { + t.Errorf("stale reference returned storage slot: %#x (err: %v)", slot, err) + } + if n := len(snaps.layers); n != 2 { + t.Errorf("post-cap layer count mismatch: have %d, want %d", n, 2) + fmt.Println(snaps.layers) + } +} + +// Tests that if a diff layer becomes stale, no active external references will +// be returned with junk data. This version of the test retains the bottom diff +// layer to check the usual mode of operation where the accumulator is retained. +func TestDiffLayerExternalInvalidationPartialFlatten(t *testing.T) { + // Create an empty base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Commit three diffs on top and retrieve a reference to the bottommost + accounts := map[common.Hash][]byte{ + common.HexToHash("0xa1"): randomAccount(), + } + if err := snaps.Update(common.HexToHash("0x02"), common.HexToHash("0x01"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if err := snaps.Update(common.HexToHash("0x03"), common.HexToHash("0x02"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if err := snaps.Update(common.HexToHash("0x04"), common.HexToHash("0x03"), nil, accounts, nil); err != nil { + t.Fatalf("failed to create a diff layer: %v", err) + } + if n := len(snaps.layers); n != 4 { + t.Errorf("pre-cap layer count mismatch: have %d, want %d", n, 4) + } + ref := snaps.Snapshot(common.HexToHash("0x02")) + + // Doing a Cap operation with many allowed layers should be a no-op + exp := len(snaps.layers) + if err := snaps.Cap(common.HexToHash("0x04"), 2000); err != nil { + t.Fatalf("failed to flatten diff layer into accumulator: %v", err) + } + if got := len(snaps.layers); got != exp { + t.Errorf("layers modified, got %d exp %d", got, exp) + } + // Flatten the diff layer into the bottom accumulator + if err := snaps.Cap(common.HexToHash("0x04"), 1); err != nil { + t.Fatalf("failed to flatten diff layer into accumulator: %v", err) + } + // Since the accumulator diff layer was modified, ensure that data retrievald on the external reference fail + if acc, err := ref.Account(common.HexToHash("0x01")); err != ErrSnapshotStale { + t.Errorf("stale reference returned account: %#x (err: %v)", acc, err) + } + if slot, err := ref.Storage(common.HexToHash("0xa1"), common.HexToHash("0xb1")); err != ErrSnapshotStale { + t.Errorf("stale reference returned storage slot: %#x (err: %v)", slot, err) + } + if n := len(snaps.layers); n != 3 { + t.Errorf("post-cap layer count mismatch: have %d, want %d", n, 3) + fmt.Println(snaps.layers) + } +} + +// TestPostCapBasicDataAccess tests some functionality regarding capping/flattening. +func TestPostCapBasicDataAccess(t *testing.T) { + // setAccount is a helper to construct a random account entry and assign it to + // an account slot in a snapshot + setAccount := func(accKey string) map[common.Hash][]byte { + return map[common.Hash][]byte{ + common.HexToHash(accKey): randomAccount(), + } + } + // Create a starting base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // The lowest difflayer + snaps.Update(common.HexToHash("0xa1"), common.HexToHash("0x01"), nil, setAccount("0xa1"), nil) + snaps.Update(common.HexToHash("0xa2"), common.HexToHash("0xa1"), nil, setAccount("0xa2"), nil) + snaps.Update(common.HexToHash("0xb2"), common.HexToHash("0xa1"), nil, setAccount("0xb2"), nil) + + snaps.Update(common.HexToHash("0xa3"), common.HexToHash("0xa2"), nil, setAccount("0xa3"), nil) + snaps.Update(common.HexToHash("0xb3"), common.HexToHash("0xb2"), nil, setAccount("0xb3"), nil) + + // checkExist verifies if an account exists in a snapshot + checkExist := func(layer *diffLayer, key string) error { + if data, _ := layer.Account(common.HexToHash(key)); data == nil { + return fmt.Errorf("expected %x to exist, got nil", common.HexToHash(key)) + } + return nil + } + // shouldErr checks that an account access errors as expected + shouldErr := func(layer *diffLayer, key string) error { + if data, err := layer.Account(common.HexToHash(key)); err == nil { + return fmt.Errorf("expected error, got data %x", data) + } + return nil + } + // check basics + snap := snaps.Snapshot(common.HexToHash("0xb3")).(*diffLayer) + + if err := checkExist(snap, "0xa1"); err != nil { + t.Error(err) + } + if err := checkExist(snap, "0xb2"); err != nil { + t.Error(err) + } + if err := checkExist(snap, "0xb3"); err != nil { + t.Error(err) + } + // Cap to a bad root should fail + if err := snaps.Cap(common.HexToHash("0x1337"), 0); err == nil { + t.Errorf("expected error, got none") + } + // Now, merge the a-chain + snaps.Cap(common.HexToHash("0xa3"), 0) + + // At this point, a2 got merged into a1. Thus, a1 is now modified, and as a1 is + // the parent of b2, b2 should no longer be able to iterate into parent. + + // These should still be accessible + if err := checkExist(snap, "0xb2"); err != nil { + t.Error(err) + } + if err := checkExist(snap, "0xb3"); err != nil { + t.Error(err) + } + // But these would need iteration into the modified parent + if err := shouldErr(snap, "0xa1"); err != nil { + t.Error(err) + } + if err := shouldErr(snap, "0xa2"); err != nil { + t.Error(err) + } + if err := shouldErr(snap, "0xa3"); err != nil { + t.Error(err) + } + // Now, merge it again, just for fun. It should now error, since a3 + // is a disk layer + if err := snaps.Cap(common.HexToHash("0xa3"), 0); err == nil { + t.Error("expected error capping the disk layer, got none") + } +} + +// TestSnaphots tests the functionality for retrieving the snapshot +// with given head root and the desired depth. +func TestSnaphots(t *testing.T) { + // setAccount is a helper to construct a random account entry and assign it to + // an account slot in a snapshot + setAccount := func(accKey string) map[common.Hash][]byte { + return map[common.Hash][]byte{ + common.HexToHash(accKey): randomAccount(), + } + } + makeRoot := func(height uint64) common.Hash { + var buffer [8]byte + binary.BigEndian.PutUint64(buffer[:], height) + return common.BytesToHash(buffer[:]) + } + // Create a starting base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: makeRoot(1), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // Construct the snapshots with 129 layers, flattening whatever's above that + var ( + last = common.HexToHash("0x01") + head common.Hash + ) + for i := 0; i < 129; i++ { + head = makeRoot(uint64(i + 2)) + snaps.Update(head, last, nil, setAccount(fmt.Sprintf("%d", i+2)), nil) + last = head + snaps.Cap(head, 128) // 130 layers (128 diffs + 1 accumulator + 1 disk) + } + var cases = []struct { + headRoot common.Hash + limit int + nodisk bool + expected int + expectBottom common.Hash + }{ + {head, 0, false, 0, common.Hash{}}, + {head, 64, false, 64, makeRoot(129 + 2 - 64)}, + {head, 128, false, 128, makeRoot(3)}, // Normal diff layers, no accumulator + {head, 129, true, 129, makeRoot(2)}, // All diff layers, including accumulator + {head, 130, false, 130, makeRoot(1)}, // All diff layers + disk layer + } + for i, c := range cases { + layers := snaps.Snapshots(c.headRoot, c.limit, c.nodisk) + if len(layers) != c.expected { + t.Errorf("non-overflow test %d: returned snapshot layers are mismatched, want %v, got %v", i, c.expected, len(layers)) + } + if len(layers) == 0 { + continue + } + bottommost := layers[len(layers)-1] + if bottommost.Root() != c.expectBottom { + t.Errorf("non-overflow test %d: snapshot mismatch, want %v, get %v", i, c.expectBottom, bottommost.Root()) + } + } + // Above we've tested the normal capping, which leaves the accumulator live. + // Test that if the bottommost accumulator diff layer overflows the allowed + // memory limit, the snapshot tree gets capped to one less layer. + // Commit the diff layer onto the disk and ensure it's persisted + defer func(memcap uint64) { aggregatorMemoryLimit = memcap }(aggregatorMemoryLimit) + aggregatorMemoryLimit = 0 + + snaps.Cap(head, 128) // 129 (128 diffs + 1 overflown accumulator + 1 disk) + + cases = []struct { + headRoot common.Hash + limit int + nodisk bool + expected int + expectBottom common.Hash + }{ + {head, 0, false, 0, common.Hash{}}, + {head, 64, false, 64, makeRoot(129 + 2 - 64)}, + {head, 128, false, 128, makeRoot(3)}, // All diff layers, accumulator was flattened + {head, 129, true, 128, makeRoot(3)}, // All diff layers, accumulator was flattened + {head, 130, false, 129, makeRoot(2)}, // All diff layers + disk layer + } + for i, c := range cases { + layers := snaps.Snapshots(c.headRoot, c.limit, c.nodisk) + if len(layers) != c.expected { + t.Errorf("overflow test %d: returned snapshot layers are mismatched, want %v, got %v", i, c.expected, len(layers)) + } + if len(layers) == 0 { + continue + } + bottommost := layers[len(layers)-1] + if bottommost.Root() != c.expectBottom { + t.Errorf("overflow test %d: snapshot mismatch, want %v, get %v", i, c.expectBottom, bottommost.Root()) + } + } +} + +// TestReadStateDuringFlattening tests the scenario that, during the +// bottom diff layers are merging which tags these as stale, the read +// happens via a pre-created top snapshot layer which tries to access +// the state in these stale layers. Ensure this read can retrieve the +// right state back(block until the flattening is finished) instead of +// an unexpected error(snapshot layer is stale). +func TestReadStateDuringFlattening(t *testing.T) { + // setAccount is a helper to construct a random account entry and assign it to + // an account slot in a snapshot + setAccount := func(accKey string) map[common.Hash][]byte { + return map[common.Hash][]byte{ + common.HexToHash(accKey): randomAccount(), + } + } + // Create a starting base layer and a snapshot tree out of it + base := &diskLayer{ + diskdb: rawdb.NewMemoryDatabase(), + root: common.HexToHash("0x01"), + cache: fastcache.New(1024 * 500), + } + snaps := &Tree{ + layers: map[common.Hash]snapshot{ + base.root: base, + }, + } + // 4 layers in total, 3 diff layers and 1 disk layers + snaps.Update(common.HexToHash("0xa1"), common.HexToHash("0x01"), nil, setAccount("0xa1"), nil) + snaps.Update(common.HexToHash("0xa2"), common.HexToHash("0xa1"), nil, setAccount("0xa2"), nil) + snaps.Update(common.HexToHash("0xa3"), common.HexToHash("0xa2"), nil, setAccount("0xa3"), nil) + + // Obtain the topmost snapshot handler for state accessing + snap := snaps.Snapshot(common.HexToHash("0xa3")) + + // Register the testing hook to access the state after flattening + var result = make(chan *Account) + snaps.onFlatten = func() { + // Spin up a thread to read the account from the pre-created + // snapshot handler. It's expected to be blocked. + go func() { + account, _ := snap.Account(common.HexToHash("0xa1")) + result <- account + }() + select { + case res := <-result: + t.Fatalf("Unexpected return %v", res) + case <-time.NewTimer(time.Millisecond * 300).C: + } + } + // Cap the snap tree, which will mark the bottom-most layer as stale. + snaps.Cap(common.HexToHash("0xa3"), 1) + select { + case account := <-result: + if account == nil { + t.Fatal("Failed to retrieve account") + } + case <-time.NewTimer(time.Millisecond * 300).C: + t.Fatal("Unexpected blocker") + } +} diff --git a/core/state/snapshot/sort.go b/core/state/snapshot/sort.go new file mode 100644 index 00000000..88841231 --- /dev/null +++ b/core/state/snapshot/sort.go @@ -0,0 +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 snapshot + +import ( + "bytes" + + "github.com/ethereum/go-ethereum/common" +) + +// hashes is a helper to implement sort.Interface. +type hashes []common.Hash + +// Len is the number of elements in the collection. +func (hs hashes) Len() int { return len(hs) } + +// Less reports whether the element with index i should sort before the element +// with index j. +func (hs hashes) Less(i, j int) bool { return bytes.Compare(hs[i][:], hs[j][:]) < 0 } + +// Swap swaps the elements with indexes i and j. +func (hs hashes) Swap(i, j int) { hs[i], hs[j] = hs[j], hs[i] } diff --git a/core/state/snapshot/utils.go b/core/state/snapshot/utils.go new file mode 100644 index 00000000..fa1f216e --- /dev/null +++ b/core/state/snapshot/utils.go @@ -0,0 +1,152 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snapshot + +import ( + "bytes" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +// CheckDanglingStorage iterates the snap storage data, and verifies that all +// storage also has corresponding account data. +func CheckDanglingStorage(chaindb ethdb.KeyValueStore) error { + if err := checkDanglingDiskStorage(chaindb); err != nil { + log.Error("Database check error", "err", err) + } + return checkDanglingMemStorage(chaindb) +} + +// checkDanglingDiskStorage checks if there is any 'dangling' storage data in the +// disk-backed snapshot layer. +func checkDanglingDiskStorage(chaindb ethdb.KeyValueStore) error { + var ( + lastReport = time.Now() + start = time.Now() + lastKey []byte + it = rawdb.NewKeyLengthIterator(chaindb.NewIterator(rawdb.SnapshotStoragePrefix, nil), 1+2*common.HashLength) + ) + log.Info("Checking dangling snapshot disk storage") + + defer it.Release() + for it.Next() { + k := it.Key() + accKey := k[1:33] + if bytes.Equal(accKey, lastKey) { + // No need to look up for every slot + continue + } + lastKey = common.CopyBytes(accKey) + if time.Since(lastReport) > time.Second*8 { + log.Info("Iterating snap storage", "at", fmt.Sprintf("%#x", accKey), "elapsed", common.PrettyDuration(time.Since(start))) + lastReport = time.Now() + } + if data := rawdb.ReadAccountSnapshot(chaindb, common.BytesToHash(accKey)); len(data) == 0 { + log.Warn("Dangling storage - missing account", "account", fmt.Sprintf("%#x", accKey), "storagekey", fmt.Sprintf("%#x", k)) + return fmt.Errorf("dangling snapshot storage account %#x", accKey) + } + } + log.Info("Verified the snapshot disk storage", "time", common.PrettyDuration(time.Since(start)), "err", it.Error()) + return nil +} + +// checkDanglingMemStorage checks if there is any 'dangling' storage in the journalled +// snapshot difflayers. +func checkDanglingMemStorage(db ethdb.KeyValueStore) error { + start := time.Now() + log.Info("Checking dangling journalled storage") + err := iterateJournal(db, func(pRoot, root common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) error { + for accHash := range storage { + if _, ok := accounts[accHash]; !ok { + log.Error("Dangling storage - missing account", "account", fmt.Sprintf("%#x", accHash), "root", root) + } + } + return nil + }) + if err != nil { + log.Info("Failed to resolve snapshot journal", "err", err) + return err + } + log.Info("Verified the snapshot journalled storage", "time", common.PrettyDuration(time.Since(start))) + return nil +} + +// CheckJournalAccount shows information about an account, from the disk layer and +// up through the diff layers. +func CheckJournalAccount(db ethdb.KeyValueStore, hash common.Hash) error { + // Look up the disk layer first + baseRoot := rawdb.ReadSnapshotRoot(db) + fmt.Printf("Disklayer: Root: %x\n", baseRoot) + if data := rawdb.ReadAccountSnapshot(db, hash); data != nil { + account := new(Account) + if err := rlp.DecodeBytes(data, account); err != nil { + panic(err) + } + fmt.Printf("\taccount.nonce: %d\n", account.Nonce) + fmt.Printf("\taccount.balance: %x\n", account.Balance) + fmt.Printf("\taccount.root: %x\n", account.Root) + fmt.Printf("\taccount.codehash: %x\n", account.CodeHash) + } + // Check storage + { + it := rawdb.NewKeyLengthIterator(db.NewIterator(append(rawdb.SnapshotStoragePrefix, hash.Bytes()...), nil), 1+2*common.HashLength) + fmt.Printf("\tStorage:\n") + for it.Next() { + slot := it.Key()[33:] + fmt.Printf("\t\t%x: %x\n", slot, it.Value()) + } + it.Release() + } + var depth = 0 + + return iterateJournal(db, func(pRoot, root common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) error { + _, a := accounts[hash] + _, b := destructs[hash] + _, c := storage[hash] + depth++ + if !a && !b && !c { + return nil + } + fmt.Printf("Disklayer+%d: Root: %x, parent %x\n", depth, root, pRoot) + if data, ok := accounts[hash]; ok { + account := new(Account) + if err := rlp.DecodeBytes(data, account); err != nil { + panic(err) + } + fmt.Printf("\taccount.nonce: %d\n", account.Nonce) + fmt.Printf("\taccount.balance: %x\n", account.Balance) + fmt.Printf("\taccount.root: %x\n", account.Root) + fmt.Printf("\taccount.codehash: %x\n", account.CodeHash) + } + if _, ok := destructs[hash]; ok { + fmt.Printf("\t Destructed!") + } + if data, ok := storage[hash]; ok { + fmt.Printf("\tStorage\n") + for k, v := range data { + fmt.Printf("\t\t%x: %x\n", k, v) + } + } + return nil + }) +} diff --git a/core/state/state_object.go b/core/state/state_object.go index b1e3e25e..a23df895 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -23,10 +23,12 @@ import ( "math/big" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) var emptyCodeHash = crypto.Keccak256(nil) @@ -48,7 +50,7 @@ func (s Storage) String() (str string) { } func (s Storage) Copy() Storage { - cpy := make(Storage) + cpy := make(Storage, len(s)) for key, value := range s { cpy[key] = value } @@ -65,7 +67,7 @@ func (s Storage) Copy() Storage { type stateObject struct { address common.Address addrHash common.Hash // hash of ethereum address of the account - data Account + data types.StateAccount db *StateDB // DB error. @@ -79,9 +81,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 - fakeStorage Storage // Fake storage which constructed by caller for debugging purpose. + 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 @@ -96,36 +99,31 @@ func (s *stateObject) empty() bool { return s.data.Nonce == 0 && s.data.Balance.Sign() == 0 && bytes.Equal(s.data.CodeHash, emptyCodeHash) } -// Account is the Ethereum consensus representation of accounts. -// These objects are stored in the main account trie. -type Account struct { - Nonce uint64 - Balance *big.Int - Root common.Hash // merkle root of the storage trie - CodeHash []byte -} - // newObject creates a state object. -func newObject(db *StateDB, address common.Address, data Account) *stateObject { +func newObject(db *StateDB, address common.Address, data types.StateAccount) *stateObject { if data.Balance == nil { data.Balance = new(big.Int) } 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 (s *stateObject) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, s.data) + return rlp.Encode(w, &s.data) } // setError remembers the first non-nil error it is called with. @@ -152,11 +150,20 @@ func (s *stateObject) touch() { func (s *stateObject) getTrie(db Database) Trie { if s.trie == nil { - var err error - s.trie, err = db.OpenStorageTrie(s.addrHash, s.data.Root) - if err != nil { - s.trie, _ = db.OpenStorageTrie(s.addrHash, common.Hash{}) - s.setError(fmt.Errorf("can't create storage trie: %v", err)) + // Try fetching from prefetcher first + // We don't prefetch empty tries + if s.data.Root != emptyRoot && s.db.prefetcher != nil { + // When the miner is creating the pending state, there is no + // prefetcher + s.trie = s.db.prefetcher.trie(s.addrHash, s.data.Root) + } + if s.trie == nil { + var err error + s.trie, err = db.OpenStorageTrie(s.addrHash, s.data.Root) + if err != nil { + s.trie, _ = db.OpenStorageTrie(s.addrHash, common.Hash{}) + s.setError(fmt.Errorf("can't create storage trie: %v", err)) + } } } return s.trie @@ -183,21 +190,47 @@ func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Has if s.fakeStorage != nil { return s.fakeStorage[key] } - // If we have the original value cached, return that - value, cached := s.originStorage[key] - if cached { + // If we have a pending write or clean cached, return that + if value, pending := s.pendingStorage[key]; pending { 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()) + if value, cached := s.originStorage[key]; cached { + return value } - // Otherwise load the value from the database - enc, err := s.getTrie(db).TryGet(key[:]) - if err != nil { - s.setError(err) - return common.Hash{} + // If no live objects are available, attempt to use snapshots + var ( + enc []byte + err error + ) + if s.db.snap != nil { + // If the object was destructed in *this* block (and potentially resurrected), + // the storage has been cleared out, and we should *not* consult the previous + // snapshot about any storage values. The only possible alternatives are: + // 1) resurrect happened, and new slot values were set -- those should + // have been handles via pendingStorage above. + // 2) we don't have new values, and can deliver empty response back + if _, destructed := s.db.snapDestructs[s.addrHash]; destructed { + return common.Hash{} + } + start := time.Now() + enc, err = s.db.snap.Storage(s.addrHash, crypto.Keccak256Hash(key.Bytes())) + if metrics.EnabledExpensive { + s.db.SnapshotStorageReads += time.Since(start) + } } + // If the snapshot is unavailable or reading from it fails, load from the database. + if s.db.snap == nil || err != nil { + start := time.Now() + enc, err = s.getTrie(db).TryGet(key.Bytes()) + if metrics.EnabledExpensive { + s.db.StorageReads += time.Since(start) + } + if err != nil { + s.setError(err) + return common.Hash{} + } + } + var value common.Hash if len(enc) > 0 { _, content, _, err := rlp.Split(enc) if err != nil { @@ -252,39 +285,89 @@ 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(prefetch bool) { + slotsToPrefetch := make([][]byte, 0, len(s.dirtyStorage)) + for key, value := range s.dirtyStorage { + s.pendingStorage[key] = value + if value != s.originStorage[key] { + slotsToPrefetch = append(slotsToPrefetch, common.CopyBytes(key[:])) // Copy needed for closure + } + } + if s.db.prefetcher != nil && prefetch && len(slotsToPrefetch) > 0 && s.data.Root != emptyRoot { + s.db.prefetcher.prefetch(s.addrHash, s.data.Root, slotsToPrefetch) + } + if len(s.dirtyStorage) > 0 { + s.dirtyStorage = make(Storage) + } +} + // updateTrie writes cached storage modifications into the object's storage trie. +// It will return nil if the trie has not been loaded and no changes have been made func (s *stateObject) updateTrie(db Database) Trie { - // Track the amount of time wasted on updating the storge trie + // Make sure all dirty slots are finalized into the pending storage area + s.finalise(false) // Don't prefetch anymore, pull directly if need be + if len(s.pendingStorage) == 0 { + return s.trie + } + // Track the amount of time wasted on updating the storage trie if metrics.EnabledExpensive { defer func(start time.Time) { s.db.StorageUpdates += time.Since(start) }(time.Now()) } - // Update all the dirty slots in the trie + // The snapshot storage map for the object + var storage map[common.Hash][]byte + // Insert all the pending updates into the trie tr := s.getTrie(db) - for key, value := range s.dirtyStorage { - delete(s.dirtyStorage, key) + hasher := s.db.hasher + usedStorage := make([][]byte, 0, len(s.pendingStorage)) + for key, value := range s.pendingStorage { // Skip noop changes, persist actual changes if value == s.originStorage[key] { continue } s.originStorage[key] = value + var v []byte if (value == common.Hash{}) { s.setError(tr.TryDelete(key[:])) - continue + s.db.StorageDeleted += 1 + } else { + // Encoding []byte cannot fail, ok to ignore the error. + v, _ = rlp.EncodeToBytes(common.TrimLeftZeroes(value[:])) + s.setError(tr.TryUpdate(key[:], v)) + s.db.StorageUpdated += 1 + } + // If state snapshotting is active, cache the data til commit + if s.db.snap != nil { + if storage == nil { + // Retrieve the old storage map, if available, create a new one otherwise + if storage = s.db.snapStorage[s.addrHash]; storage == nil { + storage = make(map[common.Hash][]byte) + s.db.snapStorage[s.addrHash] = storage + } + } + storage[crypto.HashData(hasher, key[:])] = v // v will be nil if it's deleted } - // Encoding []byte cannot fail, ok to ignore the error. - v, _ := rlp.EncodeToBytes(bytes.TrimLeft(value[:], "\x00")) - s.setError(tr.TryUpdate(key[:], v)) + usedStorage = append(usedStorage, common.CopyBytes(key[:])) // Copy needed for closure + } + if s.db.prefetcher != nil { + s.db.prefetcher.used(s.addrHash, s.data.Root, usedStorage) + } + if len(s.pendingStorage) > 0 { + s.pendingStorage = make(Storage) } return tr } // UpdateRoot sets the trie root to the current root hash of func (s *stateObject) updateRoot(db Database) { - s.updateTrie(db) - - // Track the amount of time wasted on hashing the storge trie + // If nothing changed, don't bother with hashing anything + if s.updateTrie(db) == nil { + return + } + // Track the amount of time wasted on hashing the storage trie if metrics.EnabledExpensive { defer func(start time.Time) { s.db.StorageHashes += time.Since(start) }(time.Now()) } @@ -293,38 +376,40 @@ func (s *stateObject) updateRoot(db Database) { // CommitTrie the storage trie of the object to db. // This updates the trie root. -func (s *stateObject) CommitTrie(db Database) error { - s.updateTrie(db) +func (s *stateObject) CommitTrie(db Database) (*trie.NodeSet, error) { + // If nothing changed, don't bother with hashing anything + if s.updateTrie(db) == nil { + return nil, nil + } if s.dbErr != nil { - return s.dbErr + return nil, s.dbErr } - // Track the amount of time wasted on committing the storge trie + // Track the amount of time wasted on committing the storage trie if metrics.EnabledExpensive { defer func(start time.Time) { s.db.StorageCommits += time.Since(start) }(time.Now()) } - root, err := s.trie.Commit(nil) + root, nodes, err := s.trie.Commit(false) if err == nil { s.data.Root = root } - return err + return nodes, err } -// AddBalance removes amount from c's balance. +// AddBalance adds amount to s's balance. // It is used to add funds to the destination account of a transfer. func (s *stateObject) AddBalance(amount *big.Int) { - // EIP158: We must check emptiness for the objects such that the account + // EIP161: We must check emptiness for the objects such that the account // clearing (0,0,0 objects) can take effect. if amount.Sign() == 0 { if s.empty() { s.touch() } - return } s.SetBalance(new(big.Int).Add(s.Balance(), amount)) } -// SubBalance removes amount from c's balance. +// SubBalance removes amount from s's balance. // It is used to remove funds from the origin account of a transfer. func (s *stateObject) SubBalance(amount *big.Int) { if amount.Sign() == 0 { @@ -345,9 +430,6 @@ 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 (s *stateObject) ReturnGas(gas *big.Int) {} - func (s *stateObject) deepCopy(db *StateDB) *stateObject { stateObject := newObject(db, s.address, s.data) if s.trie != nil { @@ -356,6 +438,7 @@ func (s *stateObject) deepCopy(db *StateDB) *stateObject { 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 @@ -387,6 +470,23 @@ func (s *stateObject) Code(db Database) []byte { return code } +// CodeSize returns the size of the contract code associated with this object, +// or zero if none. This method is an almost mirror of Code, but uses a cache +// inside the database to avoid loading codes seen recently. +func (s *stateObject) CodeSize(db Database) int { + if s.code != nil { + return len(s.code) + } + if bytes.Equal(s.CodeHash(), emptyCodeHash) { + return 0 + } + size, err := db.ContractCodeSize(s.addrHash, common.BytesToHash(s.CodeHash())) + if err != nil { + s.setError(fmt.Errorf("can't load code size %x: %v", s.CodeHash(), err)) + } + return size +} + func (s *stateObject) SetCode(codeHash common.Hash, code []byte) { prevcode := s.Code(s.db.db) s.db.journal.append(codeChange{ diff --git a/core/state/state_object_test.go b/core/state/state_object_test.go new file mode 100644 index 00000000..42fd7780 --- /dev/null +++ b/core/state/state_object_test.go @@ -0,0 +1,46 @@ +// 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" + "testing" + + "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 r == 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[:]) + } +} diff --git a/core/state/state_test.go b/core/state/state_test.go index 9327f9a4..b6b46e44 100644 --- a/core/state/state_test.go +++ b/core/state/state_test.go @@ -21,29 +21,35 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - checker "gopkg.in/check.v1" + "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/trie" ) -type StateSuite struct { +type stateTest struct { db ethdb.Database state *StateDB } -var _ = checker.Suite(&StateSuite{}) +func newStateTest() *stateTest { + db := rawdb.NewMemoryDatabase() + sdb, _ := New(common.Hash{}, NewDatabase(db), nil) + return &stateTest{db: db, state: sdb} +} -var toAddr = common.BytesToAddress +func TestDump(t *testing.T) { + db := rawdb.NewMemoryDatabase() + sdb, _ := New(common.Hash{}, NewDatabaseWithConfig(db, &trie.Config{Preimages: true}), nil) + s := &stateTest{db: db, state: sdb} -func (s *StateSuite) TestDump(c *checker.C) { // generate a few entries - obj1 := s.state.GetOrNewStateObject(toAddr([]byte{0x01})) + obj1 := s.state.GetOrNewStateObject(common.BytesToAddress([]byte{0x01})) obj1.AddBalance(big.NewInt(22)) - obj2 := s.state.GetOrNewStateObject(toAddr([]byte{0x01, 0x02})) + obj2 := s.state.GetOrNewStateObject(common.BytesToAddress([]byte{0x01, 0x02})) obj2.SetCode(crypto.Keccak256Hash([]byte{3, 3, 3, 3, 3, 3, 3}), []byte{3, 3, 3, 3, 3, 3, 3}) - obj3 := s.state.GetOrNewStateObject(toAddr([]byte{0x02})) + obj3 := s.state.GetOrNewStateObject(common.BytesToAddress([]byte{0x02})) obj3.SetBalance(big.NewInt(44)) // write some of them to the trie @@ -51,43 +57,42 @@ func (s *StateSuite) TestDump(c *checker.C) { s.state.updateStateObject(obj2) s.state.Commit(false) - // check that dump contains the state objects that are in trie - got := string(s.state.Dump(false, false, true)) + // check that DumpToCollector contains the state objects that are in trie + got := string(s.state.Dump(nil)) want := `{ "root": "71edff0130dd2385947095001c73d9e28d862fc286fca2b922ca6f6f3cddfdd2", "accounts": { "0x0000000000000000000000000000000000000001": { "balance": "22", "nonce": 0, - "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x1468288056310c82aa4c01a7e12a10f8111a0560e72b700555479031b86c357d" }, "0x0000000000000000000000000000000000000002": { "balance": "44", "nonce": 0, - "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xd52688a8f926c816ca1e079067caba944f158e764817b83fc43594370ca9cf62" }, "0x0000000000000000000000000000000000000102": { "balance": "0", "nonce": 0, - "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "87874902497a5bb968da31a2998d8f22e949d1ef6214bcdedd8bae24cca4b9e3", - "code": "03030303030303" + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x87874902497a5bb968da31a2998d8f22e949d1ef6214bcdedd8bae24cca4b9e3", + "code": "0x03030303030303", + "key": "0xa17eacbc25cda025e81db9c5c62868822c73ce097cee2a63e33a2e41268358a1" } } }` if got != want { - c.Errorf("dump mismatch:\ngot: %s\nwant: %s\n", got, want) + t.Errorf("DumpToCollector mismatch:\ngot: %s\nwant: %s\n", got, want) } } -func (s *StateSuite) SetUpTest(c *checker.C) { - s.db = rawdb.NewMemoryDatabase() - s.state, _ = New(common.Hash{}, NewDatabase(s.db)) -} - -func (s *StateSuite) TestNull(c *checker.C) { +func TestNull(t *testing.T) { + s := newStateTest() address := common.HexToAddress("0x823140710bf13990e4500136726d8b55") s.state.CreateAccount(address) //value := common.FromHex("0x823140710bf13990e4500136726d8b55") @@ -97,18 +102,19 @@ func (s *StateSuite) TestNull(c *checker.C) { s.state.Commit(false) if value := s.state.GetState(address, common.Hash{}); value != (common.Hash{}) { - c.Errorf("expected empty current value, got %x", value) + t.Errorf("expected empty current value, got %x", value) } if value := s.state.GetCommittedState(address, common.Hash{}); value != (common.Hash{}) { - c.Errorf("expected empty committed value, got %x", value) + t.Errorf("expected empty committed value, got %x", value) } } -func (s *StateSuite) TestSnapshot(c *checker.C) { - stateobjaddr := toAddr([]byte("aa")) +func TestSnapshot(t *testing.T) { + stateobjaddr := common.BytesToAddress([]byte("aa")) var storageaddr common.Hash data1 := common.BytesToHash([]byte{42}) data2 := common.BytesToHash([]byte{43}) + s := newStateTest() // snapshot the genesis state genesis := s.state.Snapshot() @@ -121,26 +127,33 @@ func (s *StateSuite) TestSnapshot(c *checker.C) { s.state.SetState(stateobjaddr, storageaddr, data2) s.state.RevertToSnapshot(snapshot) - c.Assert(s.state.GetState(stateobjaddr, storageaddr), checker.DeepEquals, data1) - c.Assert(s.state.GetCommittedState(stateobjaddr, storageaddr), checker.DeepEquals, common.Hash{}) + if v := s.state.GetState(stateobjaddr, storageaddr); v != data1 { + t.Errorf("wrong storage value %v, want %v", v, data1) + } + if v := s.state.GetCommittedState(stateobjaddr, storageaddr); v != (common.Hash{}) { + t.Errorf("wrong committed storage value %v, want %v", v, common.Hash{}) + } // revert up to the genesis state and ensure correct content s.state.RevertToSnapshot(genesis) - c.Assert(s.state.GetState(stateobjaddr, storageaddr), checker.DeepEquals, common.Hash{}) - c.Assert(s.state.GetCommittedState(stateobjaddr, storageaddr), checker.DeepEquals, common.Hash{}) + if v := s.state.GetState(stateobjaddr, storageaddr); v != (common.Hash{}) { + t.Errorf("wrong storage value %v, want %v", v, common.Hash{}) + } + if v := s.state.GetCommittedState(stateobjaddr, storageaddr); v != (common.Hash{}) { + t.Errorf("wrong committed storage value %v, want %v", v, common.Hash{}) + } } -func (s *StateSuite) TestSnapshotEmpty(c *checker.C) { +func TestSnapshotEmpty(t *testing.T) { + s := newStateTest() s.state.RevertToSnapshot(s.state.Snapshot()) } -// 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(rawdb.NewMemoryDatabase())) + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil) - stateobjaddr0 := toAddr([]byte("so0")) - stateobjaddr1 := toAddr([]byte("so1")) + stateobjaddr0 := common.BytesToAddress([]byte("so0")) + stateobjaddr1 := common.BytesToAddress([]byte("so1")) var storageaddr common.Hash data0 := common.BytesToHash([]byte{17}) @@ -159,7 +172,7 @@ func TestSnapshot2(t *testing.T) { state.setStateObject(so0) root, _ := state.Commit(false) - state.Reset(root) + state, _ = New(root, state.db, state.snaps) // and one with deleted == true so1 := state.getStateObject(stateobjaddr1) diff --git a/core/state/statedb.go b/core/state/statedb.go index 54e1ac67..50eee818 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -24,13 +24,15 @@ import ( "sort" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "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" ) type revision struct { @@ -41,9 +43,6 @@ type revision struct { var ( // 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) ) type proofList [][]byte @@ -57,18 +56,31 @@ func (n *proofList) Delete(key []byte) error { panic("not supported") } -// StateDBs within the ethereum protocol are used to store anything +// StateDB structs 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: // * Contracts // * Accounts type StateDB struct { - db Database - trie Trie + db Database + prefetcher *triePrefetcher + trie Trie + hasher crypto.KeccakState + + // originalRoot is the pre-state root, before any changes were made. + // It will be updated when the Commit is called. + originalRoot common.Hash + + snaps *snapshot.Tree + snap snapshot.Snapshot + snapDestructs map[common.Hash]struct{} + snapAccounts map[common.Hash][]byte + snapStorage map[common.Hash]map[common.Hash][]byte // 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 @@ -80,13 +92,16 @@ type StateDB struct { // The refund counter, also used by state transitioning. refund uint64 - thash, bhash common.Hash - txIndex int - logs map[common.Hash][]*types.Log - logSize uint + thash common.Hash + txIndex int + logs map[common.Hash][]*types.Log + logSize uint preimages map[common.Hash][]byte + // Per-transaction access list + accessList *accessList + // Journal of state modifications. This is the backbone of // Snapshot and RevertToSnapshot. journal *journal @@ -94,142 +109,168 @@ type StateDB struct { 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. -func New(root common.Hash, db Database) (*StateDB, error) { + AccountReads time.Duration + AccountHashes time.Duration + AccountUpdates time.Duration + AccountCommits time.Duration + StorageReads time.Duration + StorageHashes time.Duration + StorageUpdates time.Duration + StorageCommits time.Duration + SnapshotAccountReads time.Duration + SnapshotStorageReads time.Duration + SnapshotCommits time.Duration + + AccountUpdated int + StorageUpdated int + AccountDeleted int + StorageDeleted int +} + +// New creates a new state from a given trie. +func New(root common.Hash, db Database, snaps *snapshot.Tree) (*StateDB, error) { tr, err := db.OpenTrie(root) if err != nil { 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(), - }, nil + sdb := &StateDB{ + db: db, + trie: tr, + originalRoot: root, + snaps: snaps, + 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(), + accessList: newAccessList(), + hasher: crypto.NewKeccakState(), + } + if sdb.snaps != nil { + if sdb.snap = sdb.snaps.Snapshot(root); sdb.snap != nil { + sdb.snapDestructs = make(map[common.Hash]struct{}) + sdb.snapAccounts = make(map[common.Hash][]byte) + sdb.snapStorage = make(map[common.Hash]map[common.Hash][]byte) + } + } + return sdb, nil } -// setError remembers the first non-nil error it is called with. -func (self *StateDB) setError(err error) { - if self.dbErr == nil { - self.dbErr = err +// StartPrefetcher initializes a new trie prefetcher to pull in nodes from the +// state trie concurrently while the state is mutated so that when we reach the +// commit phase, most of the needed data is already hot. +func (s *StateDB) StartPrefetcher(namespace string) { + if s.prefetcher != nil { + s.prefetcher.close() + s.prefetcher = nil + } + if s.snap != nil { + s.prefetcher = newTriePrefetcher(s.db, s.originalRoot, namespace) } } -func (self *StateDB) Error() error { - return self.dbErr +// StopPrefetcher terminates a running prefetcher and reports any leftover stats +// from the gathered metrics. +func (s *StateDB) StopPrefetcher() { + if s.prefetcher != nil { + s.prefetcher.close() + s.prefetcher = nil + } } -// Reset clears out all ephemeral state objects from the state db, but keeps -// the underlying state trie to avoid reloading data for the next operations. -func (self *StateDB) Reset(root common.Hash) error { - tr, err := self.db.OpenTrie(root) - if err != nil { - return err - } - self.trie = tr - self.stateObjects = make(map[common.Address]*stateObject) - self.stateObjectsDirty = make(map[common.Address]struct{}) - self.thash = common.Hash{} - self.bhash = common.Hash{} - self.txIndex = 0 - self.logs = make(map[common.Hash][]*types.Log) - self.logSize = 0 - self.preimages = make(map[common.Hash][]byte) - self.clearJournalAndRefund() - return nil +// setError remembers the first non-nil error it is called with. +func (s *StateDB) setError(err error) { + if s.dbErr == nil { + s.dbErr = err + } } -func (self *StateDB) AddLog(log *types.Log) { - self.journal.append(addLogChange{txhash: self.thash}) +func (s *StateDB) Error() error { + return s.dbErr +} + +func (s *StateDB) AddLog(log *types.Log) { + s.journal.append(addLogChange{txhash: s.thash}) - log.TxHash = self.thash - log.BlockHash = self.bhash - log.TxIndex = uint(self.txIndex) - log.Index = self.logSize - self.logs[self.thash] = append(self.logs[self.thash], log) - self.logSize++ + log.TxHash = s.thash + log.TxIndex = uint(s.txIndex) + log.Index = s.logSize + s.logs[s.thash] = append(s.logs[s.thash], log) + s.logSize++ } -func (self *StateDB) GetLogs(hash common.Hash) []*types.Log { - return self.logs[hash] +func (s *StateDB) GetLogs(hash common.Hash, blockHash common.Hash) []*types.Log { + logs := s.logs[hash] + for _, l := range logs { + l.BlockHash = blockHash + } + return logs } -func (self *StateDB) Logs() []*types.Log { +func (s *StateDB) Logs() []*types.Log { var logs []*types.Log - for _, lgs := range self.logs { + for _, lgs := range s.logs { logs = append(logs, lgs...) } return logs } // AddPreimage records a SHA3 preimage seen by the VM. -func (self *StateDB) AddPreimage(hash common.Hash, preimage []byte) { - if _, ok := self.preimages[hash]; !ok { - self.journal.append(addPreimageChange{hash: hash}) +func (s *StateDB) AddPreimage(hash common.Hash, preimage []byte) { + if _, ok := s.preimages[hash]; !ok { + s.journal.append(addPreimageChange{hash: hash}) pi := make([]byte, len(preimage)) copy(pi, preimage) - self.preimages[hash] = pi + s.preimages[hash] = pi } } // Preimages returns a list of SHA3 preimages that have been submitted. -func (self *StateDB) Preimages() map[common.Hash][]byte { - return self.preimages +func (s *StateDB) Preimages() map[common.Hash][]byte { + return s.preimages } // AddRefund adds gas to the refund counter -func (self *StateDB) AddRefund(gas uint64) { - self.journal.append(refundChange{prev: self.refund}) - self.refund += gas +func (s *StateDB) AddRefund(gas uint64) { + s.journal.append(refundChange{prev: s.refund}) + s.refund += gas } // SubRefund removes gas from the refund counter. // This method will panic if the refund counter goes below zero -func (self *StateDB) SubRefund(gas uint64) { - self.journal.append(refundChange{prev: self.refund}) - if gas > self.refund { - panic("Refund counter below zero") +func (s *StateDB) SubRefund(gas uint64) { + s.journal.append(refundChange{prev: s.refund}) + if gas > s.refund { + panic(fmt.Sprintf("Refund counter below zero (gas: %d > refund: %d)", gas, s.refund)) } - self.refund -= gas + s.refund -= gas } // Exist reports whether the given account address exists in the state. // Notably this also returns true for suicided accounts. -func (self *StateDB) Exist(addr common.Address) bool { - return self.getStateObject(addr) != nil +func (s *StateDB) Exist(addr common.Address) bool { + return s.getStateObject(addr) != nil } // Empty returns whether the state object is either non-existent // or empty according to the EIP161 specification (balance = nonce = code = 0) -func (self *StateDB) Empty(addr common.Address) bool { - so := self.getStateObject(addr) +func (s *StateDB) Empty(addr common.Address) bool { + so := s.getStateObject(addr) return so == nil || so.empty() } -// Retrieve the balance from the given address or 0 if object not found -func (self *StateDB) GetBalance(addr common.Address) *big.Int { - stateObject := self.getStateObject(addr) +// GetBalance retrieves the balance from the given address or 0 if object not found +func (s *StateDB) GetBalance(addr common.Address) *big.Int { + stateObject := s.getStateObject(addr) if stateObject != nil { return stateObject.Balance() } return common.Big0 } -func (self *StateDB) GetNonce(addr common.Address) uint64 { - stateObject := self.getStateObject(addr) +func (s *StateDB) GetNonce(addr common.Address) uint64 { + stateObject := s.getStateObject(addr) if stateObject != nil { return stateObject.Nonce() } @@ -238,40 +279,28 @@ func (self *StateDB) GetNonce(addr common.Address) uint64 { } // TxIndex returns the current transaction index set by Prepare. -func (self *StateDB) TxIndex() int { - return self.txIndex +func (s *StateDB) TxIndex() int { + return s.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) +func (s *StateDB) GetCode(addr common.Address) []byte { + stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.Code(self.db) + return stateObject.Code(s.db) } return nil } -func (self *StateDB) GetCodeSize(addr common.Address) int { - stateObject := self.getStateObject(addr) - if stateObject == nil { - return 0 - } - if stateObject.code != nil { - return len(stateObject.code) - } - size, err := self.db.ContractCodeSize(stateObject.addrHash, common.BytesToHash(stateObject.CodeHash())) - if err != nil { - self.setError(err) +func (s *StateDB) GetCodeSize(addr common.Address) int { + stateObject := s.getStateObject(addr) + if stateObject != nil { + return stateObject.CodeSize(s.db) } - return size + return 0 } -func (self *StateDB) GetCodeHash(addr common.Address) common.Hash { - stateObject := self.getStateObject(addr) +func (s *StateDB) GetCodeHash(addr common.Address) common.Hash { + stateObject := s.getStateObject(addr) if stateObject == nil { return common.Hash{} } @@ -279,59 +308,65 @@ func (self *StateDB) GetCodeHash(addr common.Address) common.Hash { } // GetState retrieves a value from the given account's storage trie. -func (self *StateDB) GetState(addr common.Address, hash common.Hash) common.Hash { - stateObject := self.getStateObject(addr) +func (s *StateDB) GetState(addr common.Address, hash common.Hash) common.Hash { + stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.GetState(self.db, hash) + return stateObject.GetState(s.db, hash) } return common.Hash{} } -// GetProof returns the MerkleProof for a given Account -func (self *StateDB) GetProof(a common.Address) ([][]byte, error) { +// GetProof returns the Merkle proof for a given account. +func (s *StateDB) GetProof(addr common.Address) ([][]byte, error) { + return s.GetProofByHash(crypto.Keccak256Hash(addr.Bytes())) +} + +// GetProofByHash returns the Merkle proof for a given account. +func (s *StateDB) GetProofByHash(addrHash common.Hash) ([][]byte, error) { var proof proofList - err := self.trie.Prove(crypto.Keccak256(a.Bytes()), 0, &proof) - return [][]byte(proof), err + err := s.trie.Prove(addrHash[:], 0, &proof) + return proof, err } -// GetProof returns the StorageProof for given key -func (self *StateDB) GetStorageProof(a common.Address, key common.Hash) ([][]byte, error) { +// GetStorageProof returns the Merkle proof for given storage slot. +func (s *StateDB) GetStorageProof(a common.Address, key common.Hash) ([][]byte, error) { var proof proofList - trie := self.StorageTrie(a) + trie := s.StorageTrie(a) if trie == nil { return proof, errors.New("storage trie for requested address does not exist") } err := trie.Prove(crypto.Keccak256(key.Bytes()), 0, &proof) - return [][]byte(proof), err + return proof, err } // GetCommittedState retrieves a value from the given account's committed storage trie. -func (self *StateDB) GetCommittedState(addr common.Address, hash common.Hash) common.Hash { - stateObject := self.getStateObject(addr) +func (s *StateDB) GetCommittedState(addr common.Address, hash common.Hash) common.Hash { + stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.GetCommittedState(self.db, hash) + return stateObject.GetCommittedState(s.db, hash) } return common.Hash{} } // Database retrieves the low level database supporting the lower level trie ops. -func (self *StateDB) Database() Database { - return self.db +func (s *StateDB) Database() Database { + return s.db } // StorageTrie returns the storage trie of an account. // The return value is a copy and is nil for non-existent accounts. -func (self *StateDB) StorageTrie(addr common.Address) Trie { - stateObject := self.getStateObject(addr) +func (s *StateDB) StorageTrie(addr common.Address) Trie { + stateObject := s.getStateObject(addr) if stateObject == nil { return nil } - cpy := stateObject.deepCopy(self) - return cpy.updateTrie(self.db) + cpy := stateObject.deepCopy(s) + cpy.updateTrie(s.db) + return cpy.getTrie(s.db) } -func (self *StateDB) HasSuicided(addr common.Address) bool { - stateObject := self.getStateObject(addr) +func (s *StateDB) HasSuicided(addr common.Address) bool { + stateObject := s.getStateObject(addr) if stateObject != nil { return stateObject.suicided } @@ -343,53 +378,53 @@ func (self *StateDB) HasSuicided(addr common.Address) bool { */ // AddBalance adds amount to the account associated with addr. -func (self *StateDB) AddBalance(addr common.Address, amount *big.Int) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) AddBalance(addr common.Address, amount *big.Int) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.AddBalance(amount) } } // SubBalance subtracts amount from the account associated with addr. -func (self *StateDB) SubBalance(addr common.Address, amount *big.Int) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) SubBalance(addr common.Address, amount *big.Int) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.SubBalance(amount) } } -func (self *StateDB) SetBalance(addr common.Address, amount *big.Int) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) SetBalance(addr common.Address, amount *big.Int) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.SetBalance(amount) } } -func (self *StateDB) SetNonce(addr common.Address, nonce uint64) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) SetNonce(addr common.Address, nonce uint64) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.SetNonce(nonce) } } -func (self *StateDB) SetCode(addr common.Address, code []byte) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) SetCode(addr common.Address, code []byte) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.SetCode(crypto.Keccak256Hash(code), code) } } -func (self *StateDB) SetState(addr common.Address, key, value common.Hash) { - stateObject := self.GetOrNewStateObject(addr) +func (s *StateDB) SetState(addr common.Address, key, value common.Hash) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { - stateObject.SetState(self.db, key, value) + stateObject.SetState(s.db, key, value) } } // 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) +func (s *StateDB) SetStorage(addr common.Address, storage map[common.Hash]common.Hash) { + stateObject := s.GetOrNewStateObject(addr) if stateObject != nil { stateObject.SetStorage(storage) } @@ -400,12 +435,12 @@ func (self *StateDB) SetStorage(addr common.Address, storage map[common.Hash]com // // The account's state object is still available until the state is committed, // getStateObject will return a non-nil account after Suicide. -func (self *StateDB) Suicide(addr common.Address) bool { - stateObject := self.getStateObject(addr) +func (s *StateDB) Suicide(addr common.Address) bool { + stateObject := s.getStateObject(addr) if stateObject == nil { return false } - self.journal.append(suicideChange{ + s.journal.append(suicideChange{ account: &addr, prev: stateObject.suicided, prevbalance: new(big.Int).Set(stateObject.Balance()), @@ -421,90 +456,142 @@ func (self *StateDB) Suicide(addr common.Address) bool { // // updateStateObject writes the given object to the trie. -func (s *StateDB) updateStateObject(stateObject *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 := stateObject.Address() + addr := obj.Address() + if err := s.trie.TryUpdateAccount(addr[:], &obj.data); err != nil { + s.setError(fmt.Errorf("updateStateObject (%x) error: %v", addr[:], err)) + } - data, err := rlp.EncodeToBytes(stateObject) - if err != nil { - panic(fmt.Errorf("can't encode object at %x: %v", addr[:], err)) + // If state snapshotting is active, cache the data til commit. Note, this + // update mechanism is not symmetric to the deletion, because whereas it is + // enough to track account updates at commit time, deletions need tracking + // at transaction boundary level to ensure we capture state clearing. + if s.snap != nil { + s.snapAccounts[obj.addrHash] = snapshot.SlimAccountRLP(obj.data.Nonce, obj.data.Balance, obj.data.Root, obj.data.CodeHash) } - s.setError(s.trie.TryUpdate(addr[:], data)) } // deleteStateObject removes the given object from the state trie. -func (s *StateDB) deleteStateObject(stateObject *stateObject) { +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 - stateObject.deleted = true + addr := obj.Address() + if err := s.trie.TryDeleteAccount(addr[:]); err != nil { + s.setError(fmt.Errorf("deleteStateObject (%x) error: %v", addr[:], err)) + } +} - addr := stateObject.Address() - s.setError(s.trie.TryDelete(addr[:])) +// 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 } -// Retrieve a state object given by the address. Returns nil if not found. -func (s *StateDB) getStateObject(addr common.Address) (stateObject *stateObject) { - // Prefer live objects +// 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 s- +// 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 { - if obj.deleted { - return 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 { - s.setError(err) - return nil + // If no live objects are available, attempt to use snapshots + var data *types.StateAccount + if s.snap != nil { + start := time.Now() + acc, err := s.snap.Account(crypto.HashData(s.hasher, addr.Bytes())) + if metrics.EnabledExpensive { + s.SnapshotAccountReads += time.Since(start) + } + if err == nil { + if acc == nil { + return nil + } + data = &types.StateAccount{ + Nonce: acc.Nonce, + Balance: acc.Balance, + CodeHash: acc.CodeHash, + Root: common.BytesToHash(acc.Root), + } + if len(data.CodeHash) == 0 { + data.CodeHash = emptyCodeHash + } + if data.Root == (common.Hash{}) { + data.Root = emptyRoot + } + } } - var data Account - if err := rlp.DecodeBytes(enc, &data); err != nil { - log.Error("Failed to decode state object", "addr", addr, "err", err) - return nil + // If snapshot unavailable or reading from it failed, load from the database + if data == nil { + start := time.Now() + var err error + data, err = s.trie.TryGetAccount(addr.Bytes()) + if metrics.EnabledExpensive { + s.AccountReads += time.Since(start) + } + if err != nil { + s.setError(fmt.Errorf("getDeleteStateObject (%x) error: %w", addr.Bytes(), err)) + return nil + } + if data == nil { + return nil + } } // Insert into the live set - obj := newObject(s, addr, data) + obj := newObject(s, addr, *data) s.setStateObject(obj) return obj } -func (self *StateDB) setStateObject(object *stateObject) { - self.stateObjects[object.Address()] = object +func (s *StateDB) setStateObject(object *stateObject) { + s.stateObjects[object.Address()] = object } -// 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 { - stateObject, _ = self.createObject(addr) +// GetOrNewStateObject retrieves a state object or create a new state object if nil. +func (s *StateDB) GetOrNewStateObject(addr common.Address) *stateObject { + stateObject := s.getStateObject(addr) + if stateObject == nil { + stateObject, _ = s.createObject(addr) } return 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) - newobj = newObject(self, addr, Account{}) - newobj.setNonce(0) // sets the object to dirty +func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) { + prev = s.getDeletedStateObject(addr) // Note, prev might have been deleted, we need that! + + var prevdestruct bool + if s.snap != nil && prev != nil { + _, prevdestruct = s.snapDestructs[prev.addrHash] + if !prevdestruct { + s.snapDestructs[prev.addrHash] = struct{}{} + } + } + newobj = newObject(s, addr, types.StateAccount{}) if prev == nil { - self.journal.append(createObjectChange{account: &addr}) + s.journal.append(createObjectChange{account: &addr}) } else { - self.journal.append(resetObjectChange{prev: prev}) + s.journal.append(resetObjectChange{prev: prev, prevdestruct: prevdestruct}) } - self.setStateObject(newobj) - return newobj, prev + s.setStateObject(newobj) + if prev != nil && !prev.deleted { + return newobj, prev + } + return newobj, nil } // CreateAccount explicitly creates a state object. If a state object with the address @@ -517,8 +604,8 @@ func (self *StateDB) createObject(addr common.Address) (newobj, prev *stateObjec // 2. tx_create(sha(account ++ nonce)) (note that this gets the address of 1) // // Carrying over the balance ensures that Ether doesn't disappear. -func (self *StateDB) CreateAccount(addr common.Address) { - newObj, prev := self.createObject(addr) +func (s *StateDB) CreateAccount(addr common.Address) { + newObj, prev := s.createObject(addr) if prev != nil { newObj.setBalance(prev.data.Balance) } @@ -555,40 +642,54 @@ func (db *StateDB) ForEachStorage(addr common.Address, cb func(key, value common // Copy creates a deep, independent copy of the state. // Snapshots of the copied state cannot be applied to the copy. -func (self *StateDB) Copy() *StateDB { +func (s *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, len(self.preimages)), - journal: newJournal(), + db: s.db, + trie: s.db.CopyTrie(s.trie), + originalRoot: s.originalRoot, + stateObjects: make(map[common.Address]*stateObject, len(s.journal.dirties)), + stateObjectsPending: make(map[common.Address]struct{}, len(s.stateObjectsPending)), + stateObjectsDirty: make(map[common.Address]struct{}, len(s.journal.dirties)), + refund: s.refund, + logs: make(map[common.Hash][]*types.Log, len(s.logs)), + logSize: s.logSize, + preimages: make(map[common.Hash][]byte, len(s.preimages)), + journal: newJournal(), + hasher: crypto.NewKeccakState(), } // Copy the dirty states, logs, and preimages - for addr := range self.journal.dirties { - // As documented [here](https://github.com/cryptoecc/ETH-ECC/pull/16485#issuecomment-380438527), + for addr := range s.journal.dirties { + // As documented [here](https://github.com/ethereum/go-ethereum/pull/16485#issuecomment-380438527), // and in the Finalise-method, there is a case where an object is in the journal but not // 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 { + if object, exist := s.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.stateObjectsDirty { + for addr := range s.stateObjectsPending { if _, exist := state.stateObjects[addr]; !exist { - state.stateObjects[addr] = self.stateObjects[addr].deepCopy(state) - state.stateObjectsDirty[addr] = struct{}{} + state.stateObjects[addr] = s.stateObjects[addr].deepCopy(state) } + state.stateObjectsPending[addr] = struct{}{} } - for hash, logs := range self.logs { + for addr := range s.stateObjectsDirty { + if _, exist := state.stateObjects[addr]; !exist { + state.stateObjects[addr] = s.stateObjects[addr].deepCopy(state) + } + state.stateObjectsDirty[addr] = struct{}{} + } + for hash, logs := range s.logs { cpy := make([]*types.Log, len(logs)) for i, l := range logs { cpy[i] = new(types.Log) @@ -596,46 +697,86 @@ func (self *StateDB) Copy() *StateDB { } state.logs[hash] = cpy } - for hash, preimage := range self.preimages { + for hash, preimage := range s.preimages { state.preimages[hash] = preimage } + // Do we need to copy the access list? In practice: No. At the start of a + // transaction, the access list is empty. In practice, we only ever copy state + // _between_ transactions/blocks, never in the middle of a transaction. + // However, it doesn't cost us much to copy an empty list, so we do it anyway + // to not blow up if we ever decide copy it in the middle of a transaction + state.accessList = s.accessList.Copy() + + // If there's a prefetcher running, make an inactive copy of it that can + // only access data but does not actively preload (since the user will not + // know that they need to explicitly terminate an active copy). + if s.prefetcher != nil { + state.prefetcher = s.prefetcher.copy() + } + if s.snaps != nil { + // In order for the miner to be able to use and make additions + // to the snapshot tree, we need to copy that aswell. + // Otherwise, any block mined by ourselves will cause gaps in the tree, + // and force the miner to operate trie-backed only + state.snaps = s.snaps + state.snap = s.snap + // deep copy needed + state.snapDestructs = make(map[common.Hash]struct{}) + for k, v := range s.snapDestructs { + state.snapDestructs[k] = v + } + state.snapAccounts = make(map[common.Hash][]byte) + for k, v := range s.snapAccounts { + state.snapAccounts[k] = v + } + state.snapStorage = make(map[common.Hash]map[common.Hash][]byte) + for k, v := range s.snapStorage { + temp := make(map[common.Hash][]byte) + for kk, vv := range v { + temp[kk] = vv + } + state.snapStorage[k] = temp + } + } return state } // Snapshot returns an identifier for the current revision of the state. -func (self *StateDB) Snapshot() int { - id := self.nextRevisionId - self.nextRevisionId++ - self.validRevisions = append(self.validRevisions, revision{id, self.journal.length()}) +func (s *StateDB) Snapshot() int { + id := s.nextRevisionId + s.nextRevisionId++ + s.validRevisions = append(s.validRevisions, revision{id, s.journal.length()}) return id } // RevertToSnapshot reverts all state changes made since the given revision. -func (self *StateDB) RevertToSnapshot(revid int) { +func (s *StateDB) RevertToSnapshot(revid int) { // Find the snapshot in the stack of valid snapshots. - idx := sort.Search(len(self.validRevisions), func(i int) bool { - return self.validRevisions[i].id >= revid + idx := sort.Search(len(s.validRevisions), func(i int) bool { + return s.validRevisions[i].id >= revid }) - if idx == len(self.validRevisions) || self.validRevisions[idx].id != revid { + if idx == len(s.validRevisions) || s.validRevisions[idx].id != revid { panic(fmt.Errorf("revision id %v cannot be reverted", revid)) } - snapshot := self.validRevisions[idx].journalIndex + snapshot := s.validRevisions[idx].journalIndex // Replay the journal to undo changes and remove invalidated snapshots - self.journal.revert(self, snapshot) - self.validRevisions = self.validRevisions[:idx] + s.journal.revert(s, snapshot) + s.validRevisions = s.validRevisions[:idx] } // GetRefund returns the current value of the refund counter. -func (self *StateDB) GetRefund() uint64 { - return self.refund +func (s *StateDB) GetRefund() uint64 { + return s.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 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) { + addressesToPrefetch := make([][]byte, 0, len(s.journal.dirties)) 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 @@ -645,14 +786,31 @@ 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 + + // If state snapshotting is active, also mark the destruction there. + // Note, we can't do this only at the end of a block because multiple + // transactions within the same block might self destruct and then + // resurrect an account; but the snapshotter needs both events. + if s.snap != nil { + s.snapDestructs[obj.addrHash] = struct{}{} // We need to maintain account deletions explicitly (will remain set indefinitely) + delete(s.snapAccounts, obj.addrHash) // Clear out any previously updated account data (may be recreated via a ressurrect) + delete(s.snapStorage, obj.addrHash) // Clear out any previously updated storage data (may be recreated via a ressurrect) + } } else { - stateObject.updateRoot(s.db) - s.updateStateObject(stateObject) + obj.finalise(true) // Prefetch slots in the background } + s.stateObjectsPending[addr] = struct{}{} s.stateObjectsDirty[addr] = struct{}{} + + // At this point, also ship the address off to the precacher. The precacher + // will start loading tries, and when the change is eventually committed, + // the commit-phase will be a lot faster + addressesToPrefetch = append(addressesToPrefetch, common.CopyBytes(addr[:])) // Copy needed for closure + } + if s.prefetcher != nil && len(addressesToPrefetch) > 0 { + s.prefetcher.prefetch(common.Hash{}, s.originalRoot, addressesToPrefetch) } // Invalidate journal because reverting across transactions is not allowed. s.clearJournalAndRefund() @@ -662,8 +820,58 @@ 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) + // If there was a trie prefetcher operating, it gets aborted and irrevocably + // modified after we start retrieving tries. Remove it from the statedb after + // this round of use. + // + // This is weird pre-byzantium since the first tx runs with a prefetcher and + // the remainder without, but pre-byzantium even the initial prefetcher is + // useless, so no sleep lost. + prefetcher := s.prefetcher + if s.prefetcher != nil { + defer func() { + s.prefetcher.close() + s.prefetcher = nil + }() + } + // Although naively it makes sense to retrieve the account trie and then do + // the contract storage and account updates sequentially, that short circuits + // the account prefetcher. Instead, let's process all the storage updates + // first, giving the account prefetches just a few more milliseconds of time + // to pull useful data from disk. + for addr := range s.stateObjectsPending { + if obj := s.stateObjects[addr]; !obj.deleted { + obj.updateRoot(s.db) + } + } + // Now we're about to start to write changes to the trie. The trie is so far + // _untouched_. We can check with the prefetcher, if it can give us a trie + // which has the same root, but also has some content loaded into it. + if prefetcher != nil { + if trie := prefetcher.trie(common.Hash{}, s.originalRoot); trie != nil { + s.trie = trie + } + } + usedAddrs := make([][]byte, 0, len(s.stateObjectsPending)) + for addr := range s.stateObjectsPending { + if obj := s.stateObjects[addr]; obj.deleted { + s.deleteStateObject(obj) + s.AccountDeleted += 1 + } else { + s.updateStateObject(obj) + s.AccountUpdated += 1 + } + usedAddrs = append(usedAddrs, common.CopyBytes(addr[:])) // Copy needed for closure + } + if prefetcher != nil { + prefetcher.used(common.Hash{}, s.originalRoot, usedAddrs) + } + 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()) @@ -671,67 +879,180 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { return s.trie.Hash() } -// Prepare sets the current transaction hash and index and block hash which is +// Prepare sets the current transaction hash and index which are // used when the EVM emits new state logs. -func (self *StateDB) Prepare(thash, bhash common.Hash, ti int) { - self.thash = thash - self.bhash = bhash - self.txIndex = ti +func (s *StateDB) Prepare(thash common.Hash, ti int) { + s.thash = thash + s.txIndex = ti } 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 entries } // 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() - - for addr := range s.journal.dirties { - s.stateObjectsDirty[addr] = struct{}{} +func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { + if s.dbErr != nil { + return common.Hash{}, fmt.Errorf("commit aborted due to earlier error: %v", s.dbErr) } + // Finalize any pending changes and merge everything into the tries + s.IntermediateRoot(deleteEmptyObjects) + // Commit objects to the trie, measuring the elapsed time - 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: + var ( + accountTrieNodes int + storageTrieNodes int + nodes = trie.NewMergedNodeSet() + ) + codeWriter := s.db.TrieDB().DiskDB().NewBatch() + 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 { + rawdb.WriteCode(codeWriter, 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 + set, err := obj.CommitTrie(s.db) + if err != nil { return common.Hash{}, err } - // Update the object in the main account trie. - s.updateStateObject(stateObject) + // Merge the dirty nodes of storage trie into global set + if set != nil { + if err := nodes.Merge(set); err != nil { + return common.Hash{}, err + } + storageTrieNodes += set.Len() + } + } + } + if len(s.stateObjectsDirty) > 0 { + s.stateObjectsDirty = make(map[common.Address]struct{}) + } + if codeWriter.ValueSize() > 0 { + if err := codeWriter.Write(); err != nil { + log.Crit("Failed to commit dirty codes", "error", err) } - delete(s.stateObjectsDirty, addr) } - // Write the account trie changes, measuing the amount of wasted time + // Write the account trie changes, measuring the amount of wasted time + var start time.Time if metrics.EnabledExpensive { - defer func(start time.Time) { s.AccountCommits += time.Since(start) }(time.Now()) + start = time.Now() } - root, err = s.trie.Commit(func(leaf []byte, parent common.Hash) error { - var account Account - if err := rlp.DecodeBytes(leaf, &account); err != nil { - return nil + root, set, err := s.trie.Commit(true) + if err != nil { + return common.Hash{}, err + } + // Merge the dirty nodes of account trie into global set + if set != nil { + if err := nodes.Merge(set); err != nil { + return common.Hash{}, err } - if account.Root != emptyRoot { - s.db.TrieDB().Reference(account.Root, parent) + accountTrieNodes = set.Len() + } + if metrics.EnabledExpensive { + s.AccountCommits += time.Since(start) + + accountUpdatedMeter.Mark(int64(s.AccountUpdated)) + storageUpdatedMeter.Mark(int64(s.StorageUpdated)) + accountDeletedMeter.Mark(int64(s.AccountDeleted)) + storageDeletedMeter.Mark(int64(s.StorageDeleted)) + accountTrieCommittedMeter.Mark(int64(accountTrieNodes)) + storageTriesCommittedMeter.Mark(int64(storageTrieNodes)) + s.AccountUpdated, s.AccountDeleted = 0, 0 + s.StorageUpdated, s.StorageDeleted = 0, 0 + } + // If snapshotting is enabled, update the snapshot tree with this new version + if s.snap != nil { + if metrics.EnabledExpensive { + defer func(start time.Time) { s.SnapshotCommits += time.Since(start) }(time.Now()) } - code := common.BytesToHash(account.CodeHash) - if code != emptyCode { - s.db.TrieDB().Reference(code, parent) + // Only update if there's a state transition (skip empty Clique blocks) + if parent := s.snap.Root(); parent != root { + if err := s.snaps.Update(root, parent, s.snapDestructs, s.snapAccounts, s.snapStorage); err != nil { + log.Warn("Failed to update snapshot tree", "from", parent, "to", root, "err", err) + } + // Keep 128 diff layers in the memory, persistent layer is 129th. + // - head layer is paired with HEAD state + // - head-1 layer is paired with HEAD-1 state + // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state + if err := s.snaps.Cap(root, 128); err != nil { + log.Warn("Failed to cap snapshot tree", "root", root, "layers", 128, "err", err) + } } - return nil - }) + s.snap, s.snapDestructs, s.snapAccounts, s.snapStorage = nil, nil, nil, nil + } + if err := s.db.TrieDB().Update(nodes); err != nil { + return common.Hash{}, err + } + s.originalRoot = root return root, err } + +// PrepareAccessList handles the preparatory steps for executing a state transition with +// regards to both EIP-2929 and EIP-2930: +// +// - Add sender to access list (2929) +// - Add destination to access list (2929) +// - Add precompiles to access list (2929) +// - Add the contents of the optional tx access list (2930) +// +// This method should only be called if Berlin/2929+2930 is applicable at the current number. +func (s *StateDB) PrepareAccessList(sender common.Address, dst *common.Address, precompiles []common.Address, list types.AccessList) { + // Clear out any leftover from previous executions + s.accessList = newAccessList() + + s.AddAddressToAccessList(sender) + if dst != nil { + s.AddAddressToAccessList(*dst) + // If it's a create-tx, the destination will be added inside evm.create + } + for _, addr := range precompiles { + s.AddAddressToAccessList(addr) + } + for _, el := range list { + s.AddAddressToAccessList(el.Address) + for _, key := range el.StorageKeys { + s.AddSlotToAccessList(el.Address, key) + } + } +} + +// AddAddressToAccessList adds the given address to the access list +func (s *StateDB) AddAddressToAccessList(addr common.Address) { + if s.accessList.AddAddress(addr) { + s.journal.append(accessListAddAccountChange{&addr}) + } +} + +// AddSlotToAccessList adds the given (address, slot)-tuple to the access list +func (s *StateDB) AddSlotToAccessList(addr common.Address, slot common.Hash) { + addrMod, slotMod := s.accessList.AddSlot(addr, slot) + if addrMod { + // In practice, this should not happen, since there is no way to enter the + // scope of 'address' without having the 'address' become already added + // to the access list (via call-variant, create, etc). + // Better safe than sorry, though + s.journal.append(accessListAddAccountChange{&addr}) + } + if slotMod { + s.journal.append(accessListAddSlotChange{ + address: &addr, + slot: &slot, + }) + } +} + +// AddressInAccessList returns true if the given address is in the access list. +func (s *StateDB) AddressInAccessList(addr common.Address) bool { + return s.accessList.ContainsAddress(addr) +} + +// SlotInAccessList returns true if the given (address, slot)-tuple is in the access list. +func (s *StateDB) SlotInAccessList(addr common.Address, slot common.Hash) (addressPresent bool, slotPresent bool) { + return s.accessList.Contains(addr, slot) +} diff --git a/core/state/statedb_test.go b/core/state/statedb_test.go index 643dacc1..6fe36a7e 100644 --- a/core/state/statedb_test.go +++ b/core/state/statedb_test.go @@ -25,14 +25,13 @@ import ( "math/rand" "reflect" "strings" + "sync" "testing" "testing/quick" - check "gopkg.in/check.v1" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" ) // Tests that updating a state trie does not leak any database writes prior to @@ -40,7 +39,7 @@ import ( func TestUpdateLeaks(t *testing.T) { // Create an empty state database db := rawdb.NewMemoryDatabase() - state, _ := New(common.Hash{}, NewDatabase(db)) + state, _ := New(common.Hash{}, NewDatabase(db), nil) // Update it with some accounts for i := byte(0); i < 255; i++ { @@ -53,10 +52,15 @@ 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, nil); err != nil { + t.Errorf("can not commit trie %v to persistent database", root.Hex()) + } + // Ensure that no data was leaked into the database - it := db.NewIterator() + it := db.NewIterator(nil, nil) for it.Next() { t.Errorf("State leaked into database: %x -> %x", it.Key(), it.Value()) } @@ -69,8 +73,8 @@ func TestIntermediateLeaks(t *testing.T) { // Create two state databases, one transitioning to the final state, the other final from the beginning transDb := rawdb.NewMemoryDatabase() finalDb := rawdb.NewMemoryDatabase() - transState, _ := New(common.Hash{}, NewDatabase(transDb)) - finalState, _ := New(common.Hash{}, NewDatabase(finalDb)) + transState, _ := New(common.Hash{}, NewDatabase(transDb), nil) + finalState, _ := New(common.Hash{}, NewDatabase(finalDb), nil) modify := func(state *StateDB, addr common.Address, i, tweak byte) { state.SetBalance(addr, big.NewInt(int64(11*i)+int64(tweak))) @@ -98,36 +102,54 @@ func TestIntermediateLeaks(t *testing.T) { } // 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, nil); 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) } - it := finalDb.NewIterator() + if err = finalState.Database().TrieDB().Commit(finalRoot, false, nil); err != nil { + t.Errorf("can not commit trie %v to persistent database", finalRoot.Hex()) + } + + it := finalDb.NewIterator(nil, nil) for it.Next() { - key := it.Key() - if _, err := transDb.Get(key); err != nil { - t.Errorf("entry missing from the transition database: %x -> %x", key, it.Value()) + 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("value mismatch at key %x: %x in transition database, %x in final database", key, tvalue, fvalue) } } it.Release() - it = transDb.NewIterator() + it = transDb.NewIterator(nil, nil) for it.Next() { - key := it.Key() - if _, err := finalDb.Get(key); err != nil { + 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("value mismatch at key %x: %x in transition database, %x in final database", key, tvalue, fvalue) + } } } -// TestCopy tests that copying a statedb object indeed makes the original and +// TestCopy tests that copying a StateDB object indeed makes the original and // the copy independent of each other. This test is a regression test against -// https://github.com/cryptoecc/ETH-ECC/pull/15549. +// 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(rawdb.NewMemoryDatabase())) + orig, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil) for i := byte(0); i < 255; i++ { obj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i})) @@ -136,32 +158,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 all concurrently + finalise := func(wg *sync.WaitGroup, db *StateDB) { + defer wg.Done() + db.Finalise(true) } - // 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 + 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) @@ -169,6 +204,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) + } } } @@ -290,6 +328,20 @@ func newTestAction(addr common.Address, r *rand.Rand) testAction { }, args: make([]int64, 1), }, + { + name: "AddAddressToAccessList", + fn: func(a testAction, s *StateDB) { + s.AddAddressToAccessList(addr) + }, + }, + { + name: "AddSlotToAccessList", + fn: func(a testAction, s *StateDB) { + s.AddSlotToAccessList(addr, + common.Hash{byte(a.args[0])}) + }, + args: make([]int64, 1), + }, } action := actions[r.Intn(len(actions))] var nameargs []string @@ -347,7 +399,7 @@ func (test *snapshotTest) String() string { func (test *snapshotTest) run() bool { // Run all actions and create snapshots. var ( - state, _ = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) + state, _ = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil) snapshotRevs = make([]int, len(test.snapshots)) sindex = 0 ) @@ -361,7 +413,7 @@ func (test *snapshotTest) run() bool { // Revert all snapshots in reverse order. Each revert must yield a state // that is equivalent to fresh state with all actions up the snapshot applied. for sindex--; sindex >= 0; sindex-- { - checkstate, _ := New(common.Hash{}, state.Database()) + checkstate, _ := New(common.Hash{}, state.Database(), nil) for _, action := range test.actions[:test.snapshots[sindex]] { action.fn(action, checkstate) } @@ -411,41 +463,494 @@ func (test *snapshotTest) checkEqual(state, checkstate *StateDB) error { return fmt.Errorf("got GetRefund() == %d, want GetRefund() == %d", state.GetRefund(), checkstate.GetRefund()) } - if !reflect.DeepEqual(state.GetLogs(common.Hash{}), checkstate.GetLogs(common.Hash{})) { + if !reflect.DeepEqual(state.GetLogs(common.Hash{}, common.Hash{}), checkstate.GetLogs(common.Hash{}, common.Hash{})) { return fmt.Errorf("got GetLogs(common.Hash{}) == %v, want GetLogs(common.Hash{}) == %v", - state.GetLogs(common.Hash{}), checkstate.GetLogs(common.Hash{})) + state.GetLogs(common.Hash{}, common.Hash{}), checkstate.GetLogs(common.Hash{}, common.Hash{})) } return nil } -func (s *StateSuite) TestTouchDelete(c *check.C) { +func TestTouchDelete(t *testing.T) { + s := newStateTest() s.state.GetOrNewStateObject(common.Address{}) root, _ := s.state.Commit(false) - s.state.Reset(root) + s.state, _ = New(root, s.state.db, s.state.snaps) snapshot := s.state.Snapshot() s.state.AddBalance(common.Address{}, new(big.Int)) if len(s.state.journal.dirties) != 1 { - c.Fatal("expected one dirty state object") + t.Fatal("expected one dirty state object") } s.state.RevertToSnapshot(snapshot) if len(s.state.journal.dirties) != 0 { - c.Fatal("expected no dirty state object") + t.Fatal("expected no dirty state object") } } // TestCopyOfCopy tests that modified objects are carried over to the copy, and the copy of the copy. -// See https://github.com/cryptoecc/ETH-ECC/pull/15225#issuecomment-380191512 +// See https://github.com/ethereum/go-ethereum/pull/15225#issuecomment-380191512 func TestCopyOfCopy(t *testing.T) { - sdb, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil) 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()), nil) + + // 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()), nil) + + // 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 follow-up 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()), nil) + + addr := common.BytesToAddress([]byte("so")) + state.SetBalance(addr, big.NewInt(1)) + + root, _ := state.Commit(false) + state, _ = New(root, state.db, state.snaps) + + // 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, _ = New(root, state.db, state.snaps) + + if state.getStateObject(addr) != nil { + t.Fatalf("self-destructed contract came alive") + } +} + +// TestMissingTrieNodes tests that if the StateDB fails to load parts of the trie, +// the Commit operation fails with an error +// If we are missing trie nodes, we should not continue writing to the trie +func TestMissingTrieNodes(t *testing.T) { + // Create an initial state with a few accounts + memDb := rawdb.NewMemoryDatabase() + db := NewDatabase(memDb) + var root common.Hash + state, _ := New(common.Hash{}, db, nil) + addr := common.BytesToAddress([]byte("so")) + { + state.SetBalance(addr, big.NewInt(1)) + state.SetCode(addr, []byte{1, 2, 3}) + a2 := common.BytesToAddress([]byte("another")) + state.SetBalance(a2, big.NewInt(100)) + state.SetCode(a2, []byte{1, 2, 4}) + root, _ = state.Commit(false) + t.Logf("root: %x", root) + // force-flush + state.Database().TrieDB().Cap(0) + } + // Create a new state on the old root + state, _ = New(root, db, nil) + // Now we clear out the memdb + it := memDb.NewIterator(nil, nil) + for it.Next() { + k := it.Key() + // Leave the root intact + if !bytes.Equal(k, root[:]) { + t.Logf("key: %x", k) + memDb.Delete(k) + } + } + balance := state.GetBalance(addr) + // The removed elem should lead to it returning zero balance + if exp, got := uint64(0), balance.Uint64(); got != exp { + t.Errorf("expected %d, got %d", exp, got) + } + // Modify the state + state.SetBalance(addr, big.NewInt(2)) + root, err := state.Commit(false) + if err == nil { + t.Fatalf("expected error, got root :%x", root) + } +} + +func TestStateDBAccessList(t *testing.T) { + // Some helpers + addr := func(a string) common.Address { + return common.HexToAddress(a) + } + slot := func(a string) common.Hash { + return common.HexToHash(a) + } + + memDb := rawdb.NewMemoryDatabase() + db := NewDatabase(memDb) + state, _ := New(common.Hash{}, db, nil) + state.accessList = newAccessList() + + verifyAddrs := func(astrings ...string) { + t.Helper() + // convert to common.Address form + var addresses []common.Address + var addressMap = make(map[common.Address]struct{}) + for _, astring := range astrings { + address := addr(astring) + addresses = append(addresses, address) + addressMap[address] = struct{}{} + } + // Check that the given addresses are in the access list + for _, address := range addresses { + if !state.AddressInAccessList(address) { + t.Fatalf("expected %x to be in access list", address) + } + } + // Check that only the expected addresses are present in the access list + for address := range state.accessList.addresses { + if _, exist := addressMap[address]; !exist { + t.Fatalf("extra address %x in access list", address) + } + } + } + verifySlots := func(addrString string, slotStrings ...string) { + if !state.AddressInAccessList(addr(addrString)) { + t.Fatalf("scope missing address/slots %v", addrString) + } + var address = addr(addrString) + // convert to common.Hash form + var slots []common.Hash + var slotMap = make(map[common.Hash]struct{}) + for _, slotString := range slotStrings { + s := slot(slotString) + slots = append(slots, s) + slotMap[s] = struct{}{} + } + // Check that the expected items are in the access list + for i, s := range slots { + if _, slotPresent := state.SlotInAccessList(address, s); !slotPresent { + t.Fatalf("input %d: scope missing slot %v (address %v)", i, s, addrString) + } + } + // Check that no extra elements are in the access list + index := state.accessList.addresses[address] + if index >= 0 { + stateSlots := state.accessList.slots[index] + for s := range stateSlots { + if _, slotPresent := slotMap[s]; !slotPresent { + t.Fatalf("scope has extra slot %v (address %v)", s, addrString) + } + } + } + } + + state.AddAddressToAccessList(addr("aa")) // 1 + state.AddSlotToAccessList(addr("bb"), slot("01")) // 2,3 + state.AddSlotToAccessList(addr("bb"), slot("02")) // 4 + verifyAddrs("aa", "bb") + verifySlots("bb", "01", "02") + + // Make a copy + stateCopy1 := state.Copy() + if exp, got := 4, state.journal.length(); exp != got { + t.Fatalf("journal length mismatch: have %d, want %d", got, exp) + } + + // same again, should cause no journal entries + state.AddSlotToAccessList(addr("bb"), slot("01")) + state.AddSlotToAccessList(addr("bb"), slot("02")) + state.AddAddressToAccessList(addr("aa")) + if exp, got := 4, state.journal.length(); exp != got { + t.Fatalf("journal length mismatch: have %d, want %d", got, exp) + } + // some new ones + state.AddSlotToAccessList(addr("bb"), slot("03")) // 5 + state.AddSlotToAccessList(addr("aa"), slot("01")) // 6 + state.AddSlotToAccessList(addr("cc"), slot("01")) // 7,8 + state.AddAddressToAccessList(addr("cc")) + if exp, got := 8, state.journal.length(); exp != got { + t.Fatalf("journal length mismatch: have %d, want %d", got, exp) + } + + verifyAddrs("aa", "bb", "cc") + verifySlots("aa", "01") + verifySlots("bb", "01", "02", "03") + verifySlots("cc", "01") + + // now start rolling back changes + state.journal.revert(state, 7) + if _, ok := state.SlotInAccessList(addr("cc"), slot("01")); ok { + t.Fatalf("slot present, expected missing") + } + verifyAddrs("aa", "bb", "cc") + verifySlots("aa", "01") + verifySlots("bb", "01", "02", "03") + + state.journal.revert(state, 6) + if state.AddressInAccessList(addr("cc")) { + t.Fatalf("addr present, expected missing") + } + verifyAddrs("aa", "bb") + verifySlots("aa", "01") + verifySlots("bb", "01", "02", "03") + + state.journal.revert(state, 5) + if _, ok := state.SlotInAccessList(addr("aa"), slot("01")); ok { + t.Fatalf("slot present, expected missing") + } + verifyAddrs("aa", "bb") + verifySlots("bb", "01", "02", "03") + + state.journal.revert(state, 4) + if _, ok := state.SlotInAccessList(addr("bb"), slot("03")); ok { + t.Fatalf("slot present, expected missing") + } + verifyAddrs("aa", "bb") + verifySlots("bb", "01", "02") + + state.journal.revert(state, 3) + if _, ok := state.SlotInAccessList(addr("bb"), slot("02")); ok { + t.Fatalf("slot present, expected missing") + } + verifyAddrs("aa", "bb") + verifySlots("bb", "01") + + state.journal.revert(state, 2) + if _, ok := state.SlotInAccessList(addr("bb"), slot("01")); ok { + t.Fatalf("slot present, expected missing") + } + verifyAddrs("aa", "bb") + + state.journal.revert(state, 1) + if state.AddressInAccessList(addr("bb")) { + t.Fatalf("addr present, expected missing") + } + verifyAddrs("aa") + + state.journal.revert(state, 0) + if state.AddressInAccessList(addr("aa")) { + t.Fatalf("addr present, expected missing") + } + if got, exp := len(state.accessList.addresses), 0; got != exp { + t.Fatalf("expected empty, got %d", got) + } + if got, exp := len(state.accessList.slots), 0; got != exp { + t.Fatalf("expected empty, got %d", got) + } + // Check the copy + // Make a copy + state = stateCopy1 + verifyAddrs("aa", "bb") + verifySlots("bb", "01", "02") + if got, exp := len(state.accessList.addresses), 2; got != exp { + t.Fatalf("expected empty, got %d", got) + } + if got, exp := len(state.accessList.slots), 1; got != exp { + t.Fatalf("expected empty, got %d", got) + } +} + +// Tests that account and storage tries are flushed in the correct order and that +// no data loss occurs. +func TestFlushOrderDataLoss(t *testing.T) { + // Create a state trie with many accounts and slots + var ( + memdb = rawdb.NewMemoryDatabase() + statedb = NewDatabase(memdb) + state, _ = New(common.Hash{}, statedb, nil) + ) + for a := byte(0); a < 10; a++ { + state.CreateAccount(common.Address{a}) + for s := byte(0); s < 10; s++ { + state.SetState(common.Address{a}, common.Hash{a, s}, common.Hash{a, s}) + } + } + root, err := state.Commit(false) + if err != nil { + t.Fatalf("failed to commit state trie: %v", err) + } + statedb.TrieDB().Reference(root, common.Hash{}) + if err := statedb.TrieDB().Cap(1024); err != nil { + t.Fatalf("failed to cap trie dirty cache: %v", err) + } + if err := statedb.TrieDB().Commit(root, false, nil); err != nil { + t.Fatalf("failed to commit state trie: %v", err) + } + // Reopen the state trie from flushed disk and verify it + state, err = New(root, NewDatabase(memdb), nil) + if err != nil { + t.Fatalf("failed to reopen state trie: %v", err) + } + for a := byte(0); a < 10; a++ { + for s := byte(0); s < 10; s++ { + if have := state.GetState(common.Address{a}, common.Hash{a, s}); have != (common.Hash{a, s}) { + t.Errorf("account %d: slot %d: state mismatch: have %x, want %x", a, s, have, common.Hash{a, s}) + } + } + } +} diff --git a/core/state/sync.go b/core/state/sync.go index 486384b3..00a4c67a 100644 --- a/core/state/sync.go +++ b/core/state/sync.go @@ -19,24 +19,39 @@ package state import ( "bytes" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "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" + "github.com/ethereum/go-ethereum/trie" ) // NewStateSync create a new state trie download scheduler. -func NewStateSync(root common.Hash, database ethdb.KeyValueReader, bloom *trie.SyncBloom) *trie.Sync { +func NewStateSync(root common.Hash, database ethdb.KeyValueReader, onLeaf func(keys [][]byte, leaf []byte) error) *trie.Sync { + // Register the storage slot callback if the external callback is specified. + var onSlot func(keys [][]byte, path []byte, leaf []byte, parent common.Hash, parentPath []byte) error + if onLeaf != nil { + onSlot = func(keys [][]byte, path []byte, leaf []byte, parent common.Hash, parentPath []byte) error { + return onLeaf(keys, leaf) + } + } + // Register the account callback to connect the state trie and the storage + // trie belongs to the contract. var syncer *trie.Sync - callback := func(leaf []byte, parent common.Hash) error { - var obj Account + onAccount := func(keys [][]byte, path []byte, leaf []byte, parent common.Hash, parentPath []byte) error { + if onLeaf != nil { + if err := onLeaf(keys, leaf); err != nil { + return err + } + } + var obj types.StateAccount if err := rlp.Decode(bytes.NewReader(leaf), &obj); err != nil { return err } - syncer.AddSubTrie(obj.Root, 64, parent, nil) - syncer.AddRawEntry(common.BytesToHash(obj.CodeHash), 64, parent) + syncer.AddSubTrie(obj.Root, path, parent, parentPath, onSlot) + syncer.AddCodeEntry(common.BytesToHash(obj.CodeHash), path, parent, parentPath) return nil } - syncer = trie.NewSync(root, database, callback, bloom) + syncer = trie.NewSync(root, database, onAccount) return syncer } diff --git a/core/state/sync_test.go b/core/state/sync_test.go index 3f77056c..3d9fe556 100644 --- a/core/state/sync_test.go +++ b/core/state/sync_test.go @@ -21,12 +21,13 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" - "github.com/cryptoecc/ETH-ECC/trie" + "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/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) // testAccount is the data associated with an account used by the state tests. @@ -41,10 +42,10 @@ type testAccount struct { func makeTestState() (Database, common.Hash, []*testAccount) { // Create an empty state db := NewDatabase(rawdb.NewMemoryDatabase()) - state, _ := New(common.Hash{}, db) + state, _ := New(common.Hash{}, db, nil) // Fill it with some arbitrary data - accounts := []*testAccount{} + var accounts []*testAccount for i := byte(0); i < 96; i++ { obj := state.GetOrNewStateObject(common.BytesToAddress([]byte{i})) acc := &testAccount{address: common.BytesToAddress([]byte{i})} @@ -59,6 +60,12 @@ func makeTestState() (Database, common.Hash, []*testAccount) { obj.SetCode(crypto.Keccak256Hash([]byte{i, i, i, i, i}), []byte{i, i, i, i, i}) acc.code = []byte{i, i, i, i, i} } + if i%5 == 0 { + for j := byte(0); j < 5; j++ { + hash := crypto.Keccak256Hash([]byte{i, i, i, i, i, j, j}) + obj.SetState(db, hash, hash) + } + } state.updateStateObject(obj) accounts = append(accounts, acc) } @@ -72,7 +79,7 @@ func makeTestState() (Database, common.Hash, []*testAccount) { // account array. func checkStateAccounts(t *testing.T, db ethdb.Database, root common.Hash, accounts []*testAccount) { // Check root availability and state contents - state, err := New(root, NewDatabase(db)) + state, err := New(root, NewDatabase(db), nil) if err != nil { t.Fatalf("failed to create state trie at %x: %v", root, err) } @@ -97,7 +104,7 @@ func checkTrieConsistency(db ethdb.Database, root common.Hash) error { if v, _ := db.Get(root[:]); v == nil { return nil // Consider a non existent state consistent. } - trie, err := trie.New(root, trie.NewDatabase(db)) + trie, err := trie.New(common.Hash{}, root, trie.NewDatabase(db)) if err != nil { return err } @@ -113,7 +120,7 @@ func checkStateConsistency(db ethdb.Database, root common.Hash) error { if _, err := db.Get(root.Bytes()); err != nil { return nil // Consider a non existent state consistent. } - state, err := New(root, NewDatabase(db)) + state, err := New(root, NewDatabase(db), nil) if err != nil { return err } @@ -126,41 +133,144 @@ 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, rawdb.NewMemoryDatabase(), trie.NewSyncBloom(1, memorydb.New())).Missing(1); len(req) != 0 { - t.Errorf("content requested for empty state: %v", req) + sync := NewStateSync(empty, rawdb.NewMemoryDatabase(), nil) + if paths, nodes, codes := sync.Missing(1); len(paths) != 0 || len(nodes) != 0 || len(codes) != 0 { + t.Errorf("content requested for empty state: %v, %v, %v", nodes, paths, codes) } } // Tests that given a root hash, a state can sync iteratively on a single thread, // requesting retrieval tasks and returning all of them in one go. -func TestIterativeStateSyncIndividual(t *testing.T) { testIterativeStateSync(t, 1) } -func TestIterativeStateSyncBatched(t *testing.T) { testIterativeStateSync(t, 100) } +func TestIterativeStateSyncIndividual(t *testing.T) { + testIterativeStateSync(t, 1, false, false) +} +func TestIterativeStateSyncBatched(t *testing.T) { + testIterativeStateSync(t, 100, false, false) +} +func TestIterativeStateSyncIndividualFromDisk(t *testing.T) { + testIterativeStateSync(t, 1, true, false) +} +func TestIterativeStateSyncBatchedFromDisk(t *testing.T) { + testIterativeStateSync(t, 100, true, false) +} +func TestIterativeStateSyncIndividualByPath(t *testing.T) { + testIterativeStateSync(t, 1, false, true) +} +func TestIterativeStateSyncBatchedByPath(t *testing.T) { + testIterativeStateSync(t, 100, false, true) +} + +// stateElement represents the element in the state trie(bytecode or trie node). +type stateElement struct { + path string + hash common.Hash + code common.Hash + syncPath trie.SyncPath +} -func testIterativeStateSync(t *testing.T, batch int) { +func testIterativeStateSync(t *testing.T, count int, commit bool, bypath bool) { // Create a random state to copy srcDb, srcRoot, srcAccounts := makeTestState() + if commit { + srcDb.TrieDB().Commit(srcRoot, false, nil) + } + srcTrie, _ := trie.New(common.Hash{}, srcRoot, srcDb.TrieDB()) // Create a destination state and sync with the scheduler dstDb := rawdb.NewMemoryDatabase() - sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) - - queue := append([]common.Hash{}, sched.Missing(batch)...) - for len(queue) > 0 { - results := make([]trie.SyncResult, len(queue)) - for i, hash := range queue { - data, err := srcDb.TrieDB().Node(hash) + sched := NewStateSync(srcRoot, dstDb, nil) + + var ( + nodeElements []stateElement + codeElements []stateElement + ) + paths, nodes, codes := sched.Missing(count) + for i := 0; i < len(paths); i++ { + nodeElements = append(nodeElements, stateElement{ + path: paths[i], + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(paths[i])), + }) + } + for i := 0; i < len(codes); i++ { + codeElements = append(codeElements, stateElement{ + code: codes[i], + }) + } + for len(nodeElements)+len(codeElements) > 0 { + var ( + nodeResults = make([]trie.NodeSyncResult, len(nodeElements)) + codeResults = make([]trie.CodeSyncResult, len(codeElements)) + ) + for i, element := range codeElements { + data, err := srcDb.ContractCode(common.Hash{}, element.code) if err != nil { - t.Fatalf("failed to retrieve node data for %x", hash) + t.Fatalf("failed to retrieve contract bytecode for hash %x", element.code) + } + codeResults[i] = trie.CodeSyncResult{Hash: element.code, Data: data} + } + for i, node := range nodeElements { + if bypath { + if len(node.syncPath) == 1 { + data, _, err := srcTrie.TryGetNode(node.syncPath[0]) + if err != nil { + t.Fatalf("failed to retrieve node data for path %x: %v", node.syncPath[0], err) + } + nodeResults[i] = trie.NodeSyncResult{Path: node.path, Data: data} + } else { + var acc types.StateAccount + if err := rlp.DecodeBytes(srcTrie.Get(node.syncPath[0]), &acc); err != nil { + t.Fatalf("failed to decode account on path %x: %v", node.syncPath[0], err) + } + stTrie, err := trie.New(common.BytesToHash(node.syncPath[0]), acc.Root, srcDb.TrieDB()) + if err != nil { + t.Fatalf("failed to retriev storage trie for path %x: %v", node.syncPath[1], err) + } + data, _, err := stTrie.TryGetNode(node.syncPath[1]) + if err != nil { + t.Fatalf("failed to retrieve node data for path %x: %v", node.syncPath[1], err) + } + nodeResults[i] = trie.NodeSyncResult{Path: node.path, Data: data} + } + } else { + data, err := srcDb.TrieDB().Node(node.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for key %v", []byte(node.path)) + } + nodeResults[i] = trie.NodeSyncResult{Path: node.path, Data: data} } - results[i] = trie.SyncResult{Hash: hash, Data: data} } - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + for _, result := range codeResults { + if err := sched.ProcessCode(result); err != nil { + t.Errorf("failed to process result %v", err) + } + } + for _, result := range nodeResults { + if err := sched.ProcessNode(result); err != nil { + t.Errorf("failed to process result %v", err) + } + } + batch := dstDb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) + } + batch.Write() + + paths, nodes, codes = sched.Missing(count) + nodeElements = nodeElements[:0] + for i := 0; i < len(paths); i++ { + nodeElements = append(nodeElements, stateElement{ + path: paths[i], + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(paths[i])), + }) } - if index, err := sched.Commit(dstDb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + codeElements = codeElements[:0] + for i := 0; i < len(codes); i++ { + codeElements = append(codeElements, stateElement{ + code: codes[i], + }) } - queue = append(queue[:0], sched.Missing(batch)...) } // Cross check that the two states are in sync checkStateAccounts(t, dstDb, srcRoot, srcAccounts) @@ -174,26 +284,82 @@ func TestIterativeDelayedStateSync(t *testing.T) { // Create a destination state and sync with the scheduler dstDb := rawdb.NewMemoryDatabase() - sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) - - queue := append([]common.Hash{}, sched.Missing(0)...) - for len(queue) > 0 { + sched := NewStateSync(srcRoot, dstDb, nil) + + var ( + nodeElements []stateElement + codeElements []stateElement + ) + paths, nodes, codes := sched.Missing(0) + for i := 0; i < len(paths); i++ { + nodeElements = append(nodeElements, stateElement{ + path: paths[i], + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(paths[i])), + }) + } + for i := 0; i < len(codes); i++ { + codeElements = append(codeElements, stateElement{ + code: codes[i], + }) + } + for len(nodeElements)+len(codeElements) > 0 { // Sync only half of the scheduled nodes - results := make([]trie.SyncResult, len(queue)/2+1) - for i, hash := range queue[:len(results)] { - data, err := srcDb.TrieDB().Node(hash) - if err != nil { - t.Fatalf("failed to retrieve node data for %x", hash) + var nodeProcessed int + var codeProcessed int + if len(codeElements) > 0 { + codeResults := make([]trie.CodeSyncResult, len(codeElements)/2+1) + for i, element := range codeElements[:len(codeResults)] { + data, err := srcDb.ContractCode(common.Hash{}, element.code) + if err != nil { + t.Fatalf("failed to retrieve contract bytecode for %x", element.code) + } + codeResults[i] = trie.CodeSyncResult{Hash: element.code, Data: data} + } + for _, result := range codeResults { + if err := sched.ProcessCode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } + } + codeProcessed = len(codeResults) + } + if len(nodeElements) > 0 { + nodeResults := make([]trie.NodeSyncResult, len(nodeElements)/2+1) + for i, element := range nodeElements[:len(nodeResults)] { + data, err := srcDb.TrieDB().Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve contract bytecode for %x", element.code) + } + nodeResults[i] = trie.NodeSyncResult{Path: element.path, Data: data} + } + for _, result := range nodeResults { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - results[i] = trie.SyncResult{Hash: hash, Data: data} + nodeProcessed = len(nodeResults) + } + batch := dstDb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + batch.Write() + + paths, nodes, codes = sched.Missing(0) + nodeElements = nodeElements[nodeProcessed:] + for i := 0; i < len(paths); i++ { + nodeElements = append(nodeElements, stateElement{ + path: paths[i], + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(paths[i])), + }) } - if index, err := sched.Commit(dstDb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + codeElements = codeElements[codeProcessed:] + for i := 0; i < len(codes); i++ { + codeElements = append(codeElements, stateElement{ + code: codes[i], + }) } - queue = append(queue[len(results):], sched.Missing(0)...) } // Cross check that the two states are in sync checkStateAccounts(t, dstDb, srcRoot, srcAccounts) @@ -205,38 +371,78 @@ func TestIterativeDelayedStateSync(t *testing.T) { func TestIterativeRandomStateSyncIndividual(t *testing.T) { testIterativeRandomStateSync(t, 1) } func TestIterativeRandomStateSyncBatched(t *testing.T) { testIterativeRandomStateSync(t, 100) } -func testIterativeRandomStateSync(t *testing.T, batch int) { +func testIterativeRandomStateSync(t *testing.T, count int) { // Create a random state to copy srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler dstDb := rawdb.NewMemoryDatabase() - sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) - - queue := make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(batch) { - queue[hash] = struct{}{} + sched := NewStateSync(srcRoot, dstDb, nil) + + nodeQueue := make(map[string]stateElement) + codeQueue := make(map[common.Hash]struct{}) + paths, nodes, codes := sched.Missing(count) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } + } + for _, hash := range codes { + codeQueue[hash] = struct{}{} } - for len(queue) > 0 { + for len(nodeQueue)+len(codeQueue) > 0 { // Fetch all the queued nodes in a random order - results := make([]trie.SyncResult, 0, len(queue)) - for hash := range queue { - data, err := srcDb.TrieDB().Node(hash) - if err != nil { - t.Fatalf("failed to retrieve node data for %x", hash) + if len(codeQueue) > 0 { + results := make([]trie.CodeSyncResult, 0, len(codeQueue)) + for hash := range codeQueue { + data, err := srcDb.ContractCode(common.Hash{}, hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x", hash) + } + results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) + } + for _, result := range results { + if err := sched.ProcessCode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } + } + } + if len(nodeQueue) > 0 { + results := make([]trie.NodeSyncResult, 0, len(nodeQueue)) + for path, element := range nodeQueue { + data, err := srcDb.TrieDB().Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x %v %v", element.hash, []byte(element.path), element.path) + } + results = append(results, trie.NodeSyncResult{Path: path, Data: data}) + } + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - results = append(results, trie.SyncResult{Hash: hash, Data: data}) } // Feed the retrieved results back and queue new tasks - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + batch := dstDb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if index, err := sched.Commit(dstDb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch.Write() + + nodeQueue = make(map[string]stateElement) + codeQueue = make(map[common.Hash]struct{}) + paths, nodes, codes := sched.Missing(count) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } } - queue = make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(batch) { - queue[hash] = struct{}{} + for _, hash := range codes { + codeQueue[hash] = struct{}{} } } // Cross check that the two states are in sync @@ -251,37 +457,82 @@ func TestIterativeRandomDelayedStateSync(t *testing.T) { // Create a destination state and sync with the scheduler dstDb := rawdb.NewMemoryDatabase() - sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) - - queue := make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(0) { - queue[hash] = struct{}{} + sched := NewStateSync(srcRoot, dstDb, nil) + + nodeQueue := make(map[string]stateElement) + codeQueue := make(map[common.Hash]struct{}) + paths, nodes, codes := sched.Missing(0) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } } - for len(queue) > 0 { + for _, hash := range codes { + codeQueue[hash] = struct{}{} + } + for len(nodeQueue)+len(codeQueue) > 0 { // Sync only half of the scheduled nodes, even those in random order - results := make([]trie.SyncResult, 0, len(queue)/2+1) - for hash := range queue { - delete(queue, hash) + if len(codeQueue) > 0 { + results := make([]trie.CodeSyncResult, 0, len(codeQueue)/2+1) + for hash := range codeQueue { + delete(codeQueue, hash) + + data, err := srcDb.ContractCode(common.Hash{}, hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x", hash) + } + results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) - data, err := srcDb.TrieDB().Node(hash) - if err != nil { - t.Fatalf("failed to retrieve node data for %x", hash) + if len(results) >= cap(results) { + break + } + } + for _, result := range results { + if err := sched.ProcessCode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - results = append(results, trie.SyncResult{Hash: hash, Data: data}) + } + if len(nodeQueue) > 0 { + results := make([]trie.NodeSyncResult, 0, len(nodeQueue)/2+1) + for path, element := range nodeQueue { + delete(nodeQueue, path) + + data, err := srcDb.TrieDB().Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x", element.hash) + } + results = append(results, trie.NodeSyncResult{Path: path, Data: data}) - if len(results) >= cap(results) { - break + if len(results) >= cap(results) { + break + } + } + // Feed the retrieved results back and queue new tasks + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } } - // Feed the retrieved results back and queue new tasks - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + batch := dstDb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if index, err := sched.Commit(dstDb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch.Write() + + paths, nodes, codes := sched.Missing(0) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } } - for _, hash := range sched.Missing(0) { - queue[hash] = struct{}{} + for _, hash := range codes { + codeQueue[hash] = struct{}{} } } // Cross check that the two states are in sync @@ -294,60 +545,121 @@ func TestIncompleteStateSync(t *testing.T) { // Create a random state to copy srcDb, srcRoot, srcAccounts := makeTestState() + // isCodeLookup to save some hashing + var isCode = make(map[common.Hash]struct{}) + for _, acc := range srcAccounts { + if len(acc.code) > 0 { + isCode[crypto.Keccak256Hash(acc.code)] = struct{}{} + } + } + isCode[common.BytesToHash(emptyCodeHash)] = struct{}{} checkTrieConsistency(srcDb.TrieDB().DiskDB().(ethdb.Database), srcRoot) // Create a destination state and sync with the scheduler dstDb := rawdb.NewMemoryDatabase() - sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) - - added := []common.Hash{} - queue := append([]common.Hash{}, sched.Missing(1)...) - for len(queue) > 0 { + sched := NewStateSync(srcRoot, dstDb, nil) + + var ( + addedCodes []common.Hash + addedNodes []common.Hash + ) + nodeQueue := make(map[string]stateElement) + codeQueue := make(map[common.Hash]struct{}) + paths, nodes, codes := sched.Missing(1) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } + } + for _, hash := range codes { + codeQueue[hash] = struct{}{} + } + for len(nodeQueue)+len(codeQueue) > 0 { // Fetch a batch of state nodes - results := make([]trie.SyncResult, len(queue)) - for i, hash := range queue { - data, err := srcDb.TrieDB().Node(hash) - if err != nil { - t.Fatalf("failed to retrieve node data for %x", hash) + if len(codeQueue) > 0 { + results := make([]trie.CodeSyncResult, 0, len(codeQueue)) + for hash := range codeQueue { + data, err := srcDb.ContractCode(common.Hash{}, hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x", hash) + } + results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) + addedCodes = append(addedCodes, hash) + } + // Process each of the state nodes + for _, result := range results { + if err := sched.ProcessCode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - results[i] = trie.SyncResult{Hash: hash, Data: data} - } - // Process each of the state nodes - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) - } - if index, err := sched.Commit(dstDb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) - } - for _, result := range results { - added = append(added, result.Hash) } - // Check that all known sub-tries added so far are complete or missing entirely. - checkSubtries: - for _, hash := range added { - for _, acc := range srcAccounts { - if hash == crypto.Keccak256Hash(acc.code) { - continue checkSubtries // skip trie check of code nodes. + var nodehashes []common.Hash + if len(nodeQueue) > 0 { + results := make([]trie.NodeSyncResult, 0, len(nodeQueue)) + for key, element := range nodeQueue { + data, err := srcDb.TrieDB().Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x", element.hash) + } + results = append(results, trie.NodeSyncResult{Path: key, Data: data}) + + if element.hash != srcRoot { + addedNodes = append(addedNodes, element.hash) } + nodehashes = append(nodehashes, element.hash) } + // Process each of the state nodes + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } + } + } + batch := dstDb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) + } + batch.Write() + + for _, root := range nodehashes { // Can't use checkStateConsistency here because subtrie keys may have odd // length and crash in LeafKey. - if err := checkTrieConsistency(dstDb, hash); err != nil { + if err := checkTrieConsistency(dstDb, root); err != nil { t.Fatalf("state inconsistent: %v", err) } } // Fetch the next batch to retrieve - queue = append(queue[:0], sched.Missing(1)...) + nodeQueue = make(map[string]stateElement) + codeQueue = make(map[common.Hash]struct{}) + paths, nodes, codes := sched.Missing(1) + for i, path := range paths { + nodeQueue[path] = stateElement{ + path: path, + hash: nodes[i], + syncPath: trie.NewSyncPath([]byte(path)), + } + } + for _, hash := range codes { + codeQueue[hash] = struct{}{} + } } // Sanity check that removing any node from the database is detected - for _, node := range added[1:] { - key := node.Bytes() - value, _ := dstDb.Get(key) - - dstDb.Delete(key) - if err := checkStateConsistency(dstDb, added[0]); err == nil { - t.Fatalf("trie inconsistency not caught, missing: %x", key) + for _, node := range addedCodes { + val := rawdb.ReadCode(dstDb, node) + rawdb.DeleteCode(dstDb, node) + if err := checkStateConsistency(dstDb, srcRoot); err == nil { + t.Errorf("trie inconsistency not caught, missing: %x", node) + } + rawdb.WriteCode(dstDb, node, val) + } + for _, node := range addedNodes { + val := rawdb.ReadTrieNode(dstDb, node) + rawdb.DeleteTrieNode(dstDb, node) + if err := checkStateConsistency(dstDb, srcRoot); err == nil { + t.Errorf("trie inconsistency not caught, missing: %v", node.Hex()) } - dstDb.Put(key, value) + rawdb.WriteTrieNode(dstDb, node, val) } } diff --git a/core/state/trie_prefetcher.go b/core/state/trie_prefetcher.go new file mode 100644 index 00000000..83e8966d --- /dev/null +++ b/core/state/trie_prefetcher.go @@ -0,0 +1,353 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + // triePrefetchMetricsPrefix is the prefix under which to publish the metrics. + triePrefetchMetricsPrefix = "trie/prefetch/" +) + +// triePrefetcher is an active prefetcher, which receives accounts or storage +// items and does trie-loading of them. The goal is to get as much useful content +// into the caches as possible. +// +// Note, the prefetcher's API is not thread safe. +type triePrefetcher struct { + db Database // Database to fetch trie nodes through + root common.Hash // Root hash of the account trie for metrics + fetches map[string]Trie // Partially or fully fetcher tries + fetchers map[string]*subfetcher // Subfetchers for each trie + + deliveryMissMeter metrics.Meter + accountLoadMeter metrics.Meter + accountDupMeter metrics.Meter + accountSkipMeter metrics.Meter + accountWasteMeter metrics.Meter + storageLoadMeter metrics.Meter + storageDupMeter metrics.Meter + storageSkipMeter metrics.Meter + storageWasteMeter metrics.Meter +} + +func newTriePrefetcher(db Database, root common.Hash, namespace string) *triePrefetcher { + prefix := triePrefetchMetricsPrefix + namespace + p := &triePrefetcher{ + db: db, + root: root, + fetchers: make(map[string]*subfetcher), // Active prefetchers use the fetchers map + + deliveryMissMeter: metrics.GetOrRegisterMeter(prefix+"/deliverymiss", nil), + accountLoadMeter: metrics.GetOrRegisterMeter(prefix+"/account/load", nil), + accountDupMeter: metrics.GetOrRegisterMeter(prefix+"/account/dup", nil), + accountSkipMeter: metrics.GetOrRegisterMeter(prefix+"/account/skip", nil), + accountWasteMeter: metrics.GetOrRegisterMeter(prefix+"/account/waste", nil), + storageLoadMeter: metrics.GetOrRegisterMeter(prefix+"/storage/load", nil), + storageDupMeter: metrics.GetOrRegisterMeter(prefix+"/storage/dup", nil), + storageSkipMeter: metrics.GetOrRegisterMeter(prefix+"/storage/skip", nil), + storageWasteMeter: metrics.GetOrRegisterMeter(prefix+"/storage/waste", nil), + } + return p +} + +// close iterates over all the subfetchers, aborts any that were left spinning +// and reports the stats to the metrics subsystem. +func (p *triePrefetcher) close() { + for _, fetcher := range p.fetchers { + fetcher.abort() // safe to do multiple times + + if metrics.Enabled { + if fetcher.root == p.root { + p.accountLoadMeter.Mark(int64(len(fetcher.seen))) + p.accountDupMeter.Mark(int64(fetcher.dups)) + p.accountSkipMeter.Mark(int64(len(fetcher.tasks))) + + for _, key := range fetcher.used { + delete(fetcher.seen, string(key)) + } + p.accountWasteMeter.Mark(int64(len(fetcher.seen))) + } else { + p.storageLoadMeter.Mark(int64(len(fetcher.seen))) + p.storageDupMeter.Mark(int64(fetcher.dups)) + p.storageSkipMeter.Mark(int64(len(fetcher.tasks))) + + for _, key := range fetcher.used { + delete(fetcher.seen, string(key)) + } + p.storageWasteMeter.Mark(int64(len(fetcher.seen))) + } + } + } + // Clear out all fetchers (will crash on a second call, deliberate) + p.fetchers = nil +} + +// copy creates a deep-but-inactive copy of the trie prefetcher. Any trie data +// already loaded will be copied over, but no goroutines will be started. This +// is mostly used in the miner which creates a copy of it's actively mutated +// state to be sealed while it may further mutate the state. +func (p *triePrefetcher) copy() *triePrefetcher { + copy := &triePrefetcher{ + db: p.db, + root: p.root, + fetches: make(map[string]Trie), // Active prefetchers use the fetches map + + deliveryMissMeter: p.deliveryMissMeter, + accountLoadMeter: p.accountLoadMeter, + accountDupMeter: p.accountDupMeter, + accountSkipMeter: p.accountSkipMeter, + accountWasteMeter: p.accountWasteMeter, + storageLoadMeter: p.storageLoadMeter, + storageDupMeter: p.storageDupMeter, + storageSkipMeter: p.storageSkipMeter, + storageWasteMeter: p.storageWasteMeter, + } + // If the prefetcher is already a copy, duplicate the data + if p.fetches != nil { + for root, fetch := range p.fetches { + copy.fetches[root] = p.db.CopyTrie(fetch) + } + return copy + } + // Otherwise we're copying an active fetcher, retrieve the current states + for id, fetcher := range p.fetchers { + copy.fetches[id] = fetcher.peek() + } + return copy +} + +// prefetch schedules a batch of trie items to prefetch. +func (p *triePrefetcher) prefetch(owner common.Hash, root common.Hash, keys [][]byte) { + // If the prefetcher is an inactive one, bail out + if p.fetches != nil { + return + } + // Active fetcher, schedule the retrievals + id := p.trieID(owner, root) + fetcher := p.fetchers[id] + if fetcher == nil { + fetcher = newSubfetcher(p.db, owner, root) + p.fetchers[id] = fetcher + } + fetcher.schedule(keys) +} + +// trie returns the trie matching the root hash, or nil if the prefetcher doesn't +// have it. +func (p *triePrefetcher) trie(owner common.Hash, root common.Hash) Trie { + // If the prefetcher is inactive, return from existing deep copies + id := p.trieID(owner, root) + if p.fetches != nil { + trie := p.fetches[id] + if trie == nil { + p.deliveryMissMeter.Mark(1) + return nil + } + return p.db.CopyTrie(trie) + } + // Otherwise the prefetcher is active, bail if no trie was prefetched for this root + fetcher := p.fetchers[id] + if fetcher == nil { + p.deliveryMissMeter.Mark(1) + return nil + } + // Interrupt the prefetcher if it's by any chance still running and return + // a copy of any pre-loaded trie. + fetcher.abort() // safe to do multiple times + + trie := fetcher.peek() + if trie == nil { + p.deliveryMissMeter.Mark(1) + return nil + } + return trie +} + +// used marks a batch of state items used to allow creating statistics as to +// how useful or wasteful the prefetcher is. +func (p *triePrefetcher) used(owner common.Hash, root common.Hash, used [][]byte) { + if fetcher := p.fetchers[p.trieID(owner, root)]; fetcher != nil { + fetcher.used = used + } +} + +// trieID returns an unique trie identifier consists the trie owner and root hash. +func (p *triePrefetcher) trieID(owner common.Hash, root common.Hash) string { + return string(append(owner.Bytes(), root.Bytes()...)) +} + +// subfetcher is a trie fetcher goroutine responsible for pulling entries for a +// single trie. It is spawned when a new root is encountered and lives until the +// main prefetcher is paused and either all requested items are processed or if +// the trie being worked on is retrieved from the prefetcher. +type subfetcher struct { + db Database // Database to load trie nodes through + owner common.Hash // Owner of the trie, usually account hash + root common.Hash // Root hash of the trie to prefetch + trie Trie // Trie being populated with nodes + + tasks [][]byte // Items queued up for retrieval + lock sync.Mutex // Lock protecting the task queue + + wake chan struct{} // Wake channel if a new task is scheduled + stop chan struct{} // Channel to interrupt processing + term chan struct{} // Channel to signal interruption + copy chan chan Trie // Channel to request a copy of the current trie + + seen map[string]struct{} // Tracks the entries already loaded + dups int // Number of duplicate preload tasks + used [][]byte // Tracks the entries used in the end +} + +// newSubfetcher creates a goroutine to prefetch state items belonging to a +// particular root hash. +func newSubfetcher(db Database, owner common.Hash, root common.Hash) *subfetcher { + sf := &subfetcher{ + db: db, + owner: owner, + root: root, + wake: make(chan struct{}, 1), + stop: make(chan struct{}), + term: make(chan struct{}), + copy: make(chan chan Trie), + seen: make(map[string]struct{}), + } + go sf.loop() + return sf +} + +// schedule adds a batch of trie keys to the queue to prefetch. +func (sf *subfetcher) schedule(keys [][]byte) { + // Append the tasks to the current queue + sf.lock.Lock() + sf.tasks = append(sf.tasks, keys...) + sf.lock.Unlock() + + // Notify the prefetcher, it's fine if it's already terminated + select { + case sf.wake <- struct{}{}: + default: + } +} + +// peek tries to retrieve a deep copy of the fetcher's trie in whatever form it +// is currently. +func (sf *subfetcher) peek() Trie { + ch := make(chan Trie) + select { + case sf.copy <- ch: + // Subfetcher still alive, return copy from it + return <-ch + + case <-sf.term: + // Subfetcher already terminated, return a copy directly + if sf.trie == nil { + return nil + } + return sf.db.CopyTrie(sf.trie) + } +} + +// abort interrupts the subfetcher immediately. It is safe to call abort multiple +// times but it is not thread safe. +func (sf *subfetcher) abort() { + select { + case <-sf.stop: + default: + close(sf.stop) + } + <-sf.term +} + +// loop waits for new tasks to be scheduled and keeps loading them until it runs +// out of tasks or its underlying trie is retrieved for committing. +func (sf *subfetcher) loop() { + // No matter how the loop stops, signal anyone waiting that it's terminated + defer close(sf.term) + + // Start by opening the trie and stop processing if it fails + if sf.owner == (common.Hash{}) { + trie, err := sf.db.OpenTrie(sf.root) + if err != nil { + log.Warn("Trie prefetcher failed opening trie", "root", sf.root, "err", err) + return + } + sf.trie = trie + } else { + trie, err := sf.db.OpenStorageTrie(sf.owner, sf.root) + if err != nil { + log.Warn("Trie prefetcher failed opening trie", "root", sf.root, "err", err) + return + } + sf.trie = trie + } + // Trie opened successfully, keep prefetching items + for { + select { + case <-sf.wake: + // Subfetcher was woken up, retrieve any tasks to avoid spinning the lock + sf.lock.Lock() + tasks := sf.tasks + sf.tasks = nil + sf.lock.Unlock() + + // Prefetch any tasks until the loop is interrupted + for i, task := range tasks { + select { + case <-sf.stop: + // If termination is requested, add any leftover back and return + sf.lock.Lock() + sf.tasks = append(sf.tasks, tasks[i:]...) + sf.lock.Unlock() + return + + case ch := <-sf.copy: + // Somebody wants a copy of the current trie, grant them + ch <- sf.db.CopyTrie(sf.trie) + + default: + // No termination request yet, prefetch the next entry + if _, ok := sf.seen[string(task)]; ok { + sf.dups++ + } else { + if len(task) == len(common.Address{}) { + sf.trie.TryGetAccount(task) + } else { + sf.trie.TryGet(task) + } + sf.seen[string(task)] = struct{}{} + } + } + } + + case ch := <-sf.copy: + // Somebody wants a copy of the current trie, grant them + ch <- sf.db.CopyTrie(sf.trie) + + case <-sf.stop: + // Termination is requested, abort and leave remaining tasks + return + } + } +} diff --git a/core/state/trie_prefetcher_test.go b/core/state/trie_prefetcher_test.go new file mode 100644 index 00000000..cb0b67d7 --- /dev/null +++ b/core/state/trie_prefetcher_test.go @@ -0,0 +1,110 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" +) + +func filledStateDB() *StateDB { + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase()), nil) + + // 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 + for i := 0; i < 100; i++ { + sk := common.BigToHash(big.NewInt(int64(i))) + state.SetState(addr, sk, sk) // Change the storage trie + } + return state +} + +func TestCopyAndClose(t *testing.T) { + db := filledStateDB() + prefetcher := newTriePrefetcher(db.db, db.originalRoot, "") + skey := common.HexToHash("aaa") + prefetcher.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + prefetcher.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + time.Sleep(1 * time.Second) + a := prefetcher.trie(common.Hash{}, db.originalRoot) + prefetcher.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + b := prefetcher.trie(common.Hash{}, db.originalRoot) + cpy := prefetcher.copy() + cpy.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + cpy.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + c := cpy.trie(common.Hash{}, db.originalRoot) + prefetcher.close() + cpy2 := cpy.copy() + cpy2.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + d := cpy2.trie(common.Hash{}, db.originalRoot) + cpy.close() + cpy2.close() + if a.Hash() != b.Hash() || a.Hash() != c.Hash() || a.Hash() != d.Hash() { + t.Fatalf("Invalid trie, hashes should be equal: %v %v %v %v", a.Hash(), b.Hash(), c.Hash(), d.Hash()) + } +} + +func TestUseAfterClose(t *testing.T) { + db := filledStateDB() + prefetcher := newTriePrefetcher(db.db, db.originalRoot, "") + skey := common.HexToHash("aaa") + prefetcher.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + a := prefetcher.trie(common.Hash{}, db.originalRoot) + prefetcher.close() + b := prefetcher.trie(common.Hash{}, db.originalRoot) + if a == nil { + t.Fatal("Prefetching before close should not return nil") + } + if b != nil { + t.Fatal("Trie after close should return nil") + } +} + +func TestCopyClose(t *testing.T) { + db := filledStateDB() + prefetcher := newTriePrefetcher(db.db, db.originalRoot, "") + skey := common.HexToHash("aaa") + prefetcher.prefetch(common.Hash{}, db.originalRoot, [][]byte{skey.Bytes()}) + cpy := prefetcher.copy() + a := prefetcher.trie(common.Hash{}, db.originalRoot) + b := cpy.trie(common.Hash{}, db.originalRoot) + prefetcher.close() + c := prefetcher.trie(common.Hash{}, db.originalRoot) + d := cpy.trie(common.Hash{}, db.originalRoot) + if a == nil { + t.Fatal("Prefetching before close should not return nil") + } + if b == nil { + t.Fatal("Copy trie should return nil") + } + if c != nil { + t.Fatal("Trie after close should return nil") + } + if d == nil { + t.Fatal("Copy trie should not return nil") + } +} diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go index 4c341946..10a17229 100644 --- a/core/state_prefetcher.go +++ b/core/state_prefetcher.go @@ -19,12 +19,11 @@ package core import ( "sync/atomic" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" + "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 @@ -50,36 +49,46 @@ func newStatePrefetcher(config *params.ChainConfig, bc *BlockChain, engine conse // 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()) + header = block.Header() + gaspool = new(GasPool).AddGas(block.GasLimit()) + blockContext = NewEVMBlockContext(header, p.bc, nil) + evm = vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, cfg) + signer = types.MakeSigner(p.config, header.Number) ) // Iterate over and process the individual transactions + byzantium := p.config.IsByzantium(block.Number()) 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 { + // Convert the transaction into an executable message and pre-cache its sender + msg, err := tx.AsMessage(signer, header.BaseFee) + if err != nil { + return // Also invalid block, bail out + } + statedb.Prepare(tx.Hash(), i) + if err := precacheTransaction(msg, p.config, gaspool, statedb, header, evm); err != nil { return // Ugh, something went horribly wrong, bail out } + // If we're pre-byzantium, pre-load trie nodes for the intermediate root + if !byzantium { + statedb.IntermediateRoot(true) + } + } + // If were post-byzantium, pre-load trie nodes for the final root hash + if byzantium { + statedb.IntermediateRoot(true) } } // 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) +func precacheTransaction(msg types.Message, config *params.ChainConfig, gaspool *GasPool, statedb *state.StateDB, header *types.Header, evm *vm.EVM) error { + // Update the evm with the new transaction context. + evm.Reset(NewEVMTxContext(msg), statedb) + // Add addresses to access list if applicable + _, err := ApplyMessage(evm, msg, gaspool) return err } diff --git a/core/state_processor.go b/core/state_processor.go index af85c0b8..e511697c 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -17,14 +17,17 @@ package core import ( - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "fmt" + "math/big" + + "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/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/params" ) // StateProcessor is a basic Processor, which takes care of transitioning @@ -55,22 +58,30 @@ func NewStateProcessor(config *params.ChainConfig, bc *BlockChain, engine consen // transactions failed to execute due to insufficient gas it will return an error. func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (types.Receipts, []*types.Log, uint64, error) { var ( - receipts types.Receipts - usedGas = new(uint64) - header = block.Header() - allLogs []*types.Log - gp = new(GasPool).AddGas(block.GasLimit()) + receipts types.Receipts + usedGas = new(uint64) + header = block.Header() + blockHash = block.Hash() + blockNumber = block.Number() + allLogs []*types.Log + gp = new(GasPool).AddGas(block.GasLimit()) ) // Mutate the block and state according to any hard-fork specs if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { misc.ApplyDAOHardFork(statedb) } + blockContext := NewEVMBlockContext(header, p.bc, nil) + vmenv := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, 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, cfg) + msg, err := tx.AsMessage(types.MakeSigner(p.config, header.Number), header.BaseFee) + if err != nil { + return nil, nil, 0, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) + } + statedb.Prepare(tx.Hash(), i) + receipt, err := applyTransaction(msg, p.config, nil, gp, statedb, blockNumber, blockHash, tx, usedGas, vmenv) if err != nil { - return nil, nil, 0, err + return nil, nil, 0, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) } receipts = append(receipts, receipt) allLogs = append(allLogs, receipt.Logs...) @@ -81,49 +92,62 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg return receipts, allLogs, *usedGas, nil } -// ApplyTransaction attempts to apply a transaction to the given state database -// 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, cfg vm.Config) (*types.Receipt, uint64, error) { - msg, err := tx.AsMessage(types.MakeSigner(config, header.Number)) - if err != nil { - return nil, 0, err - } - // Create a new context to be used in the EVM environment - context := NewEVMContext(msg, header, bc, author) - // Create a new environment which holds all relevant information - // about the transaction and calling mechanisms. - vmenv := vm.NewEVM(context, statedb, config, cfg) - // Apply the transaction to the current state (included in the env) - _, gas, failed, err := ApplyMessage(vmenv, msg, gp) +func applyTransaction(msg types.Message, config *params.ChainConfig, author *common.Address, gp *GasPool, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, tx *types.Transaction, usedGas *uint64, evm *vm.EVM) (*types.Receipt, error) { + // Create a new context to be used in the EVM environment. + txContext := NewEVMTxContext(msg) + evm.Reset(txContext, statedb) + + // Apply the transaction to the current state (included in the env). + result, err := ApplyMessage(evm, msg, gp) if err != nil { - return nil, 0, err + return nil, err } - // Update the state with pending changes + + // Update the state with pending changes. var root []byte - if config.IsByzantium(header.Number) { + if config.IsByzantium(blockNumber) { statedb.Finalise(true) } else { - root = statedb.IntermediateRoot(config.IsEIP158(header.Number)).Bytes() + root = statedb.IntermediateRoot(config.IsEIP158(blockNumber)).Bytes() } - *usedGas += gas + *usedGas += result.UsedGas - // Create a new receipt for the transaction, storing the intermediate root and gas used by the tx - // based on the eip phase, we're passing whether the root touch-delete accounts. - receipt := types.NewReceipt(root, failed, *usedGas) + // Create a new receipt for the transaction, storing the intermediate root and gas used + // by the tx. + receipt := &types.Receipt{Type: tx.Type(), PostState: root, CumulativeGasUsed: *usedGas} + if result.Failed() { + receipt.Status = types.ReceiptStatusFailed + } else { + receipt.Status = types.ReceiptStatusSuccessful + } receipt.TxHash = tx.Hash() - receipt.GasUsed = gas - // if the transaction created a contract, store the creation address in the receipt. + receipt.GasUsed = result.UsedGas + + // If the transaction created a contract, store the creation address in the receipt. if msg.To() == nil { - receipt.ContractAddress = crypto.CreateAddress(vmenv.Context.Origin, tx.Nonce()) + receipt.ContractAddress = crypto.CreateAddress(evm.TxContext.Origin, tx.Nonce()) } - // Set the receipt logs and create a bloom for filtering - receipt.Logs = statedb.GetLogs(tx.Hash()) + + // Set the receipt logs and create the bloom filter. + receipt.Logs = statedb.GetLogs(tx.Hash(), blockHash) receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) - receipt.BlockHash = statedb.BlockHash() - receipt.BlockNumber = header.Number + receipt.BlockHash = blockHash + receipt.BlockNumber = blockNumber receipt.TransactionIndex = uint(statedb.TxIndex()) + return receipt, err +} - return receipt, gas, err +// ApplyTransaction attempts to apply a transaction to the given state database +// 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, cfg vm.Config) (*types.Receipt, error) { + msg, err := tx.AsMessage(types.MakeSigner(config, header.Number), header.BaseFee) + if err != nil { + return nil, err + } + // Create a new context to be used in the EVM environment + blockContext := NewEVMBlockContext(header, bc, author) + vmenv := vm.NewEVM(blockContext, vm.TxContext{}, statedb, config, cfg) + return applyTransaction(msg, config, author, gp, statedb, header.Number, header.Hash(), tx, usedGas, vmenv) } diff --git a/core/state_processor_test.go b/core/state_processor_test.go new file mode 100644 index 00000000..42faa28d --- /dev/null +++ b/core/state_processor_test.go @@ -0,0 +1,342 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "crypto/ecdsa" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "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/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" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +// TestStateProcessorErrors tests the output from the 'core' errors +// as defined in core/error.go. These errors are generated when the +// blockchain imports bad blocks, meaning blocks which have valid headers but +// contain invalid transactions +func TestStateProcessorErrors(t *testing.T) { + var ( + config = ¶ms.ChainConfig{ + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + Ethash: new(params.EthashConfig), + } + signer = types.LatestSigner(config) + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + key2, _ = crypto.HexToECDSA("0202020202020202020202020202020202020202020202020202002020202020") + ) + var makeTx = func(key *ecdsa.PrivateKey, nonce uint64, to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *types.Transaction { + tx, _ := types.SignTx(types.NewTransaction(nonce, to, amount, gasLimit, gasPrice, data), signer, key) + return tx + } + var mkDynamicTx = func(nonce uint64, to common.Address, gasLimit uint64, gasTipCap, gasFeeCap *big.Int) *types.Transaction { + tx, _ := types.SignTx(types.NewTx(&types.DynamicFeeTx{ + Nonce: nonce, + GasTipCap: gasTipCap, + GasFeeCap: gasFeeCap, + Gas: gasLimit, + To: &to, + Value: big.NewInt(0), + }), signer, key1) + return tx + } + { // Tests against a 'recent' chain definition + var ( + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + Config: config, + Alloc: GenesisAlloc{ + common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7"): GenesisAccount{ + Balance: big.NewInt(1000000000000000000), // 1 ether + Nonce: 0, + }, + common.HexToAddress("0xfd0810DD14796680f72adf1a371963d0745BCc64"): GenesisAccount{ + Balance: big.NewInt(1000000000000000000), // 1 ether + Nonce: math.MaxUint64, + }, + }, + } + genesis = gspec.MustCommit(db) + blockchain, _ = NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + ) + defer blockchain.Stop() + bigNumber := new(big.Int).SetBytes(common.FromHex("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) + tooBigNumber := new(big.Int).Set(bigNumber) + tooBigNumber.Add(tooBigNumber, common.Big1) + for i, tt := range []struct { + txs []*types.Transaction + want string + }{ + { // ErrNonceTooLow + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(0), params.TxGas, big.NewInt(875000000), nil), + makeTx(key1, 0, common.Address{}, big.NewInt(0), params.TxGas, big.NewInt(875000000), nil), + }, + want: "could not apply tx 1 [0x0026256b3939ed97e2c4a6f3fce8ecf83bdcfa6d507c47838c308a1fb0436f62]: nonce too low: address 0x71562b71999873DB5b286dF957af199Ec94617F7, tx: 0 state: 1", + }, + { // ErrNonceTooHigh + txs: []*types.Transaction{ + makeTx(key1, 100, common.Address{}, big.NewInt(0), params.TxGas, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0xdebad714ca7f363bd0d8121c4518ad48fa469ca81b0a081be3d10c17460f751b]: nonce too high: address 0x71562b71999873DB5b286dF957af199Ec94617F7, tx: 100 state: 0", + }, + { // ErrNonceMax + txs: []*types.Transaction{ + makeTx(key2, math.MaxUint64, common.Address{}, big.NewInt(0), params.TxGas, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0x84ea18d60eb2bb3b040e3add0eb72f757727122cc257dd858c67cb6591a85986]: nonce has max value: address 0xfd0810DD14796680f72adf1a371963d0745BCc64, nonce: 18446744073709551615", + }, + { // ErrGasLimitReached + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(0), 21000000, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0xbd49d8dadfd47fb846986695f7d4da3f7b2c48c8da82dbc211a26eb124883de9]: gas limit reached", + }, + { // ErrInsufficientFundsForTransfer + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(1000000000000000000), params.TxGas, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0x98c796b470f7fcab40aaef5c965a602b0238e1034cce6fb73823042dd0638d74]: insufficient funds for gas * price + value: address 0x71562b71999873DB5b286dF957af199Ec94617F7 have 1000000000000000000 want 1000018375000000000", + }, + { // ErrInsufficientFunds + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(0), params.TxGas, big.NewInt(900000000000000000), nil), + }, + want: "could not apply tx 0 [0x4a69690c4b0cd85e64d0d9ea06302455b01e10a83db964d60281739752003440]: insufficient funds for gas * price + value: address 0x71562b71999873DB5b286dF957af199Ec94617F7 have 1000000000000000000 want 18900000000000000000000", + }, + // ErrGasUintOverflow + // One missing 'core' error is ErrGasUintOverflow: "gas uint64 overflow", + // In order to trigger that one, we'd have to allocate a _huge_ chunk of data, such that the + // multiplication len(data) +gas_per_byte overflows uint64. Not testable at the moment + { // ErrIntrinsicGas + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(0), params.TxGas-1000, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0xcf3b049a0b516cb4f9274b3e2a264359e2ba53b2fb64b7bda2c634d5c9d01fca]: intrinsic gas too low: have 20000, want 21000", + }, + { // ErrGasLimitReached + txs: []*types.Transaction{ + makeTx(key1, 0, common.Address{}, big.NewInt(0), params.TxGas*1000, big.NewInt(875000000), nil), + }, + want: "could not apply tx 0 [0xbd49d8dadfd47fb846986695f7d4da3f7b2c48c8da82dbc211a26eb124883de9]: gas limit reached", + }, + { // ErrFeeCapTooLow + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, big.NewInt(0), big.NewInt(0)), + }, + want: "could not apply tx 0 [0xc4ab868fef0c82ae0387b742aee87907f2d0fc528fc6ea0a021459fb0fc4a4a8]: max fee per gas less than block base fee: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas: 0 baseFee: 875000000", + }, + { // ErrTipVeryHigh + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, tooBigNumber, big.NewInt(1)), + }, + want: "could not apply tx 0 [0x15b8391b9981f266b32f3ab7da564bbeb3d6c21628364ea9b32a21139f89f712]: max priority fee per gas higher than 2^256-1: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxPriorityFeePerGas bit length: 257", + }, + { // ErrFeeCapVeryHigh + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, big.NewInt(1), tooBigNumber), + }, + want: "could not apply tx 0 [0x48bc299b83fdb345c57478f239e89814bb3063eb4e4b49f3b6057a69255c16bd]: max fee per gas higher than 2^256-1: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas bit length: 257", + }, + { // ErrTipAboveFeeCap + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, big.NewInt(2), big.NewInt(1)), + }, + want: "could not apply tx 0 [0xf987a31ff0c71895780a7612f965a0c8b056deb54e020bb44fa478092f14c9b4]: max priority fee per gas higher than max fee per gas: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxPriorityFeePerGas: 2, maxFeePerGas: 1", + }, + { // ErrInsufficientFunds + // Available balance: 1000000000000000000 + // Effective cost: 18375000021000 + // FeeCap * gas: 1050000000000000000 + // This test is designed to have the effective cost be covered by the balance, but + // the extended requirement on FeeCap*gas < balance to fail + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, big.NewInt(1), big.NewInt(50000000000000)), + }, + want: "could not apply tx 0 [0x413603cd096a87f41b1660d3ed3e27d62e1da78eac138961c0a1314ed43bd129]: insufficient funds for gas * price + value: address 0x71562b71999873DB5b286dF957af199Ec94617F7 have 1000000000000000000 want 1050000000000000000", + }, + { // Another ErrInsufficientFunds, this one to ensure that feecap/tip of max u256 is allowed + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas, bigNumber, bigNumber), + }, + want: "could not apply tx 0 [0xd82a0c2519acfeac9a948258c47e784acd20651d9d80f9a1c67b4137651c3a24]: insufficient funds for gas * price + value: address 0x71562b71999873DB5b286dF957af199Ec94617F7 have 1000000000000000000 want 2431633873983640103894990685182446064918669677978451844828609264166175722438635000", + }, + } { + block := GenerateBadBlock(genesis, ethash.NewFaker(), tt.txs, gspec.Config) + _, err := blockchain.InsertChain(types.Blocks{block}) + if err == nil { + t.Fatal("block imported without errors") + } + if have, want := err.Error(), tt.want; have != want { + t.Errorf("test %d:\nhave \"%v\"\nwant \"%v\"\n", i, have, want) + } + } + } + + // ErrTxTypeNotSupported, For this, we need an older chain + { + var ( + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + Config: ¶ms.ChainConfig{ + 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(0), + MuirGlacierBlock: big.NewInt(0), + }, + Alloc: GenesisAlloc{ + common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7"): GenesisAccount{ + Balance: big.NewInt(1000000000000000000), // 1 ether + Nonce: 0, + }, + }, + } + genesis = gspec.MustCommit(db) + blockchain, _ = NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + ) + defer blockchain.Stop() + for i, tt := range []struct { + txs []*types.Transaction + want string + }{ + { // ErrTxTypeNotSupported + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas-1000, big.NewInt(0), big.NewInt(0)), + }, + want: "could not apply tx 0 [0x88626ac0d53cb65308f2416103c62bb1f18b805573d4f96a3640bbbfff13c14f]: transaction type not supported", + }, + } { + block := GenerateBadBlock(genesis, ethash.NewFaker(), tt.txs, gspec.Config) + _, err := blockchain.InsertChain(types.Blocks{block}) + if err == nil { + t.Fatal("block imported without errors") + } + if have, want := err.Error(), tt.want; have != want { + t.Errorf("test %d:\nhave \"%v\"\nwant \"%v\"\n", i, have, want) + } + } + } + + // ErrSenderNoEOA, for this we need the sender to have contract code + { + var ( + db = rawdb.NewMemoryDatabase() + gspec = &Genesis{ + Config: config, + Alloc: GenesisAlloc{ + common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7"): GenesisAccount{ + Balance: big.NewInt(1000000000000000000), // 1 ether + Nonce: 0, + Code: common.FromHex("0xB0B0FACE"), + }, + }, + } + genesis = gspec.MustCommit(db) + blockchain, _ = NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + ) + defer blockchain.Stop() + for i, tt := range []struct { + txs []*types.Transaction + want string + }{ + { // ErrSenderNoEOA + txs: []*types.Transaction{ + mkDynamicTx(0, common.Address{}, params.TxGas-1000, big.NewInt(0), big.NewInt(0)), + }, + want: "could not apply tx 0 [0x88626ac0d53cb65308f2416103c62bb1f18b805573d4f96a3640bbbfff13c14f]: sender not an eoa: address 0x71562b71999873DB5b286dF957af199Ec94617F7, codehash: 0x9280914443471259d4570a8661015ae4a5b80186dbc619658fb494bebc3da3d1", + }, + } { + block := GenerateBadBlock(genesis, ethash.NewFaker(), tt.txs, gspec.Config) + _, err := blockchain.InsertChain(types.Blocks{block}) + if err == nil { + t.Fatal("block imported without errors") + } + if have, want := err.Error(), tt.want; have != want { + t.Errorf("test %d:\nhave \"%v\"\nwant \"%v\"\n", i, have, want) + } + } + } +} + +// GenerateBadBlock constructs a "block" which contains the transactions. The transactions are not expected to be +// valid, and no proper post-state can be made. But from the perspective of the blockchain, the block is sufficiently +// valid to be considered for import: +// - valid pow (fake), ancestry, difficulty, gaslimit etc +func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Transactions, config *params.ChainConfig) *types.Block { + header := &types.Header{ + ParentHash: parent.Hash(), + Coinbase: parent.Coinbase(), + Difficulty: engine.CalcDifficulty(&fakeChainReader{config}, parent.Time()+10, &types.Header{ + Number: parent.Number(), + Time: parent.Time(), + Difficulty: parent.Difficulty(), + UncleHash: parent.UncleHash(), + }), + GasLimit: parent.GasLimit(), + Number: new(big.Int).Add(parent.Number(), common.Big1), + Time: parent.Time() + 10, + UncleHash: types.EmptyUncleHash, + } + if config.IsLondon(header.Number) { + header.BaseFee = misc.CalcBaseFee(config, parent.Header()) + } + var receipts []*types.Receipt + // The post-state result doesn't need to be correct (this is a bad block), but we do need something there + // Preferably something unique. So let's use a combo of blocknum + txhash + hasher := sha3.NewLegacyKeccak256() + hasher.Write(header.Number.Bytes()) + var cumulativeGas uint64 + for _, tx := range txs { + txh := tx.Hash() + hasher.Write(txh[:]) + receipt := types.NewReceipt(nil, false, cumulativeGas+tx.Gas()) + receipt.TxHash = tx.Hash() + receipt.GasUsed = tx.Gas() + receipts = append(receipts, receipt) + cumulativeGas += tx.Gas() + } + header.Root = common.BytesToHash(hasher.Sum(nil)) + // Assemble and return the final block for sealing + return types.NewBlock(header, txs, nil, receipts, trie.NewStackTrie(nil)) +} diff --git a/core/state_transition.go b/core/state_transition.go index c1967c58..0946c037 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -17,19 +17,19 @@ package core import ( - "errors" + "fmt" "math" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + cmath "github.com/ethereum/go-ethereum/common/math" + "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" ) -var ( - errInsufficientBalanceForGas = errors.New("insufficient balance to pay for gas") -) +var emptyCodeHash = crypto.Keccak256Hash(nil) /* The State Transitioning Model @@ -53,6 +53,8 @@ type StateTransition struct { msg Message gas uint64 gasPrice *big.Int + gasFeeCap *big.Int + gasTipCap *big.Int initialGas uint64 value *big.Int data []byte @@ -63,23 +65,60 @@ type StateTransition struct { // Message represents a message sent to a contract. type Message interface { From() common.Address - //FromFrontier() (common.Address, error) To() *common.Address GasPrice() *big.Int + GasFeeCap() *big.Int + GasTipCap() *big.Int Gas() uint64 Value() *big.Int Nonce() uint64 - CheckNonce() bool + IsFake() bool Data() []byte + AccessList() types.AccessList +} + +// ExecutionResult includes all output after executing given evm +// message no matter the execution itself is successful or not. +type ExecutionResult struct { + UsedGas uint64 // Total used gas but include the refunded gas + Err error // Any error encountered during the execution(listed in core/vm/errors.go) + ReturnData []byte // Returned data from evm(function result or data supplied with revert opcode) +} + +// Unwrap returns the internal evm error which allows us for further +// analysis outside. +func (result *ExecutionResult) Unwrap() error { + return result.Err +} + +// Failed returns the indicator whether the execution is successful or not +func (result *ExecutionResult) Failed() bool { return result.Err != nil } + +// Return is a helper function to help caller distinguish between revert reason +// and function return. Return returns the data after execution if no error occurs. +func (result *ExecutionResult) Return() []byte { + if result.Err != nil { + return nil + } + return common.CopyBytes(result.ReturnData) +} + +// Revert returns the concrete revert reason if the execution is aborted by `REVERT` +// opcode. Note the reason can be nil if no data supplied with revert opcode. +func (result *ExecutionResult) Revert() []byte { + if result.Err != vm.ErrExecutionReverted { + return nil + } + return common.CopyBytes(result.ReturnData) } // IntrinsicGas computes the 'intrinsic gas' for a message with the given data. -func IntrinsicGas(data []byte, contractCreation, isEIP155 bool, isEIP2028 bool) (uint64, error) { +func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation bool, isHomestead, isEIP2028 bool) (uint64, error) { // Set the starting gas for the raw transaction var gas uint64 - if contractCreation && isEIP155 { + if isContractCreation && isHomestead { gas = params.TxGasContractCreation } else { gas = params.TxGas @@ -99,29 +138,35 @@ func IntrinsicGas(data []byte, contractCreation, isEIP155 bool, isEIP2028 bool) nonZeroGas = params.TxDataNonZeroGasEIP2028 } if (math.MaxUint64-gas)/nonZeroGas < nz { - return 0, vm.ErrOutOfGas + return 0, ErrGasUintOverflow } gas += nz * nonZeroGas z := uint64(len(data)) - nz if (math.MaxUint64-gas)/params.TxDataZeroGas < z { - return 0, vm.ErrOutOfGas + return 0, ErrGasUintOverflow } gas += z * params.TxDataZeroGas } + if accessList != nil { + gas += uint64(len(accessList)) * params.TxAccessListAddressGas + gas += uint64(accessList.StorageKeys()) * params.TxAccessListStorageKeyGas + } return gas, nil } // NewStateTransition initialises and returns a new state transition object. func NewStateTransition(evm *vm.EVM, msg Message, gp *GasPool) *StateTransition { return &StateTransition{ - gp: gp, - evm: evm, - msg: msg, - gasPrice: msg.GasPrice(), - value: msg.Value(), - data: msg.Data(), - state: evm.StateDB, + gp: gp, + evm: evm, + msg: msg, + gasPrice: msg.GasPrice(), + gasFeeCap: msg.GasFeeCap(), + gasTipCap: msg.GasTipCap(), + value: msg.Value(), + data: msg.Data(), + state: evm.StateDB, } } @@ -132,7 +177,7 @@ func NewStateTransition(evm *vm.EVM, msg Message, gp *GasPool) *StateTransition // the gas used (which includes gas refunds) and an error if it failed. An error always // indicates a core error meaning that the message would always fail for that particular // state and would never be accepted within a block. -func ApplyMessage(evm *vm.EVM, msg Message, gp *GasPool) ([]byte, uint64, bool, error) { +func ApplyMessage(evm *vm.EVM, msg Message, gp *GasPool) (*ExecutionResult, error) { return NewStateTransition(evm, msg, gp).TransitionDb() } @@ -144,19 +189,17 @@ func (st *StateTransition) to() common.Address { return *st.msg.To() } -func (st *StateTransition) useGas(amount uint64) error { - if st.gas < amount { - return vm.ErrOutOfGas - } - st.gas -= amount - - return nil -} - func (st *StateTransition) buyGas() error { - mgval := new(big.Int).Mul(new(big.Int).SetUint64(st.msg.Gas()), st.gasPrice) - if st.state.GetBalance(st.msg.From()).Cmp(mgval) < 0 { - return errInsufficientBalanceForGas + mgval := new(big.Int).SetUint64(st.msg.Gas()) + mgval = mgval.Mul(mgval, st.gasPrice) + balanceCheck := mgval + if st.gasFeeCap != nil { + balanceCheck = new(big.Int).SetUint64(st.msg.Gas()) + balanceCheck = balanceCheck.Mul(balanceCheck, st.gasFeeCap) + balanceCheck.Add(balanceCheck, st.value) + } + if have, want := st.state.GetBalance(st.msg.From()), balanceCheck; have.Cmp(want) < 0 { + return fmt.Errorf("%w: address %v have %v want %v", ErrInsufficientFunds, st.msg.From().Hex(), have, want) } if err := st.gp.SubGas(st.msg.Gas()); err != nil { return err @@ -169,72 +212,159 @@ func (st *StateTransition) buyGas() error { } func (st *StateTransition) preCheck() error { - // Make sure this transaction's nonce is correct. - if st.msg.CheckNonce() { - nonce := st.state.GetNonce(st.msg.From()) - if nonce < st.msg.Nonce() { - return ErrNonceTooHigh - } else if nonce > st.msg.Nonce() { - return ErrNonceTooLow + // Only check transactions that are not fake + if !st.msg.IsFake() { + // Make sure this transaction's nonce is correct. + stNonce := st.state.GetNonce(st.msg.From()) + if msgNonce := st.msg.Nonce(); stNonce < msgNonce { + return fmt.Errorf("%w: address %v, tx: %d state: %d", ErrNonceTooHigh, + st.msg.From().Hex(), msgNonce, stNonce) + } else if stNonce > msgNonce { + return fmt.Errorf("%w: address %v, tx: %d state: %d", ErrNonceTooLow, + st.msg.From().Hex(), msgNonce, stNonce) + } else if stNonce+1 < stNonce { + return fmt.Errorf("%w: address %v, nonce: %d", ErrNonceMax, + st.msg.From().Hex(), stNonce) + } + // Make sure the sender is an EOA + if codeHash := st.state.GetCodeHash(st.msg.From()); codeHash != emptyCodeHash && codeHash != (common.Hash{}) { + return fmt.Errorf("%w: address %v, codehash: %s", ErrSenderNoEOA, + st.msg.From().Hex(), codeHash) + } + } + // Make sure that transaction gasFeeCap is greater than the baseFee (post london) + if st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) { + // Skip the checks if gas fields are zero and baseFee was explicitly disabled (eth_call) + if !st.evm.Config.NoBaseFee || st.gasFeeCap.BitLen() > 0 || st.gasTipCap.BitLen() > 0 { + if l := st.gasFeeCap.BitLen(); l > 256 { + return fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", ErrFeeCapVeryHigh, + st.msg.From().Hex(), l) + } + if l := st.gasTipCap.BitLen(); l > 256 { + return fmt.Errorf("%w: address %v, maxPriorityFeePerGas bit length: %d", ErrTipVeryHigh, + st.msg.From().Hex(), l) + } + if st.gasFeeCap.Cmp(st.gasTipCap) < 0 { + return fmt.Errorf("%w: address %v, maxPriorityFeePerGas: %s, maxFeePerGas: %s", ErrTipAboveFeeCap, + st.msg.From().Hex(), st.gasTipCap, st.gasFeeCap) + } + // This will panic if baseFee is nil, but basefee presence is verified + // as part of header validation. + if st.gasFeeCap.Cmp(st.evm.Context.BaseFee) < 0 { + return fmt.Errorf("%w: address %v, maxFeePerGas: %s baseFee: %s", ErrFeeCapTooLow, + st.msg.From().Hex(), st.gasFeeCap, st.evm.Context.BaseFee) + } } } return st.buyGas() } // TransitionDb will transition the state by applying the current message and -// returning the result including the used gas. It returns an error if failed. -// An error indicates a consensus issue. -func (st *StateTransition) TransitionDb() (ret []byte, usedGas uint64, failed bool, err error) { - if err = st.preCheck(); err != nil { - return - } - 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, istanbul) +// returning the evm execution result with following fields. +// +// - used gas: +// total gas used (including gas being refunded) +// - returndata: +// the returned data from evm +// - concrete execution error: +// various **EVM** error which aborts the execution, +// e.g. ErrOutOfGas, ErrExecutionReverted +// +// However if any consensus issue encountered, return the error directly with +// nil evm execution result. +func (st *StateTransition) TransitionDb() (*ExecutionResult, error) { + // First check this message satisfies all consensus rules before + // applying the message. The rules include these clauses + // + // 1. the nonce of the message caller is correct + // 2. caller has enough balance to cover transaction fee(gaslimit * gasprice) + // 3. the amount of gas required is available in the block + // 4. the purchased gas is enough to cover intrinsic usage + // 5. there is no overflow when calculating intrinsic gas + // 6. caller has enough balance to cover asset transfer for **topmost** call + + // Check clauses 1-3, buy gas if everything is correct + if err := st.preCheck(); err != nil { + return nil, err + } + + if st.evm.Config.Debug { + st.evm.Config.Tracer.CaptureTxStart(st.initialGas) + defer func() { + st.evm.Config.Tracer.CaptureTxEnd(st.gas) + }() + } + + var ( + msg = st.msg + sender = vm.AccountRef(msg.From()) + rules = st.evm.ChainConfig().Rules(st.evm.Context.BlockNumber, st.evm.Context.Random != nil) + contractCreation = msg.To() == nil + ) + + // Check clauses 4-5, subtract intrinsic gas if everything is correct + gas, err := IntrinsicGas(st.data, st.msg.AccessList(), contractCreation, rules.IsHomestead, rules.IsIstanbul) if err != nil { - return nil, 0, false, err + return nil, err } - if err = st.useGas(gas); err != nil { - return nil, 0, false, err + if st.gas < gas { + return nil, fmt.Errorf("%w: have %d, want %d", ErrIntrinsicGas, st.gas, gas) } + st.gas -= gas + // Check clause 6 + if msg.Value().Sign() > 0 && !st.evm.Context.CanTransfer(st.state, msg.From(), msg.Value()) { + return nil, fmt.Errorf("%w: address %v", ErrInsufficientFundsForTransfer, msg.From().Hex()) + } + + // Set up the initial access list. + if rules.IsBerlin { + st.state.PrepareAccessList(msg.From(), msg.To(), vm.ActivePrecompiles(rules), msg.AccessList()) + } var ( - evm = st.evm - // vm errors do not effect consensus and are therefor - // not assigned to err, except for insufficient balance - // error. - vmerr error + ret []byte + vmerr error // vm errors do not effect consensus and are therefore not assigned to err ) if contractCreation { - ret, _, st.gas, vmerr = evm.Create(sender, st.data, st.gas, st.value) + ret, _, st.gas, vmerr = st.evm.Create(sender, st.data, st.gas, st.value) } else { // Increment the nonce for the next transaction st.state.SetNonce(msg.From(), st.state.GetNonce(sender.Address())+1) - ret, st.gas, vmerr = evm.Call(sender, st.to(), st.data, st.gas, st.value) - } - if vmerr != nil { - log.Debug("VM returned with error", "err", vmerr) - // The only possible consensus-error would be if there wasn't - // sufficient balance to make the transfer happen. The first - // balance transfer may never fail. - if vmerr == vm.ErrInsufficientBalance { - return nil, 0, false, vmerr - } + ret, st.gas, vmerr = st.evm.Call(sender, st.to(), st.data, st.gas, st.value) + } + + if !rules.IsLondon { + // Before EIP-3529: refunds were capped to gasUsed / 2 + st.refundGas(params.RefundQuotient) + } else { + // After EIP-3529: refunds are capped to gasUsed / 5 + st.refundGas(params.RefundQuotientEIP3529) + } + effectiveTip := st.gasPrice + if rules.IsLondon { + effectiveTip = cmath.BigMin(st.gasTipCap, new(big.Int).Sub(st.gasFeeCap, st.evm.Context.BaseFee)) + } + + if st.evm.Config.NoBaseFee && st.gasFeeCap.Sign() == 0 && st.gasTipCap.Sign() == 0 { + // Skip fee payment when NoBaseFee is set and the fee fields + // are 0. This avoids a negative effectiveTip being applied to + // the coinbase when simulating calls. + } else { + fee := new(big.Int).SetUint64(st.gasUsed()) + fee.Mul(fee, effectiveTip) + st.state.AddBalance(st.evm.Context.Coinbase, fee) } - st.refundGas() - st.state.AddBalance(st.evm.Coinbase, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.gasPrice)) - return ret, st.gasUsed(), vmerr != nil, err + return &ExecutionResult{ + UsedGas: st.gasUsed(), + Err: vmerr, + ReturnData: ret, + }, nil } -func (st *StateTransition) refundGas() { - // Apply refund counter, capped to half of the used gas. - refund := st.gasUsed() / 2 +func (st *StateTransition) refundGas(refundQuotient uint64) { + // Apply refund counter, capped to a refund quotient + refund := st.gasUsed() / refundQuotient if refund > st.state.GetRefund() { refund = st.state.GetRefund() } diff --git a/core/tx_cacher.go b/core/tx_cacher.go index 17aa7ef0..b1e5d676 100644 --- a/core/tx_cacher.go +++ b/core/tx_cacher.go @@ -19,7 +19,7 @@ package core import ( "runtime" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) // senderCacher is a concurrent transaction sender recoverer and cacher. diff --git a/core/tx_journal.go b/core/tx_journal.go index cc76bf80..62344f56 100644 --- a/core/tx_journal.go +++ b/core/tx_journal.go @@ -19,12 +19,13 @@ package core import ( "errors" "io" + "io/fs" "os" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" ) // errNoActiveJournal is returned if a transaction is attempted to be inserted @@ -57,12 +58,12 @@ func newTxJournal(path string) *txJournal { // load parses a transaction journal dump from disk, loading its contents into // the specified pool. func (journal *txJournal) load(add func([]*types.Transaction) []error) error { - // Skip the parsing if the journal file doesn't exist at all - if _, err := os.Stat(journal.path); os.IsNotExist(err) { - return nil - } // Open the journal for loading any past transactions input, err := os.Open(journal.path) + if errors.Is(err, fs.ErrNotExist) { + // Skip the parsing if the journal file doesn't exist at all + return nil + } if err != nil { return err } @@ -138,7 +139,7 @@ func (journal *txJournal) rotate(all map[common.Address]types.Transactions) erro journal.writer = nil } // Generate a new journal with the contents of the current pool - replacement, err := os.OpenFile(journal.path+".new", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755) + replacement, err := os.OpenFile(journal.path+".new", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return err } @@ -158,7 +159,7 @@ func (journal *txJournal) rotate(all map[common.Address]types.Transactions) erro if err = os.Rename(journal.path+".new", journal.path); err != nil { return err } - sink, err := os.OpenFile(journal.path, os.O_WRONLY|os.O_APPEND, 0755) + sink, err := os.OpenFile(journal.path, os.O_WRONLY|os.O_APPEND, 0644) if err != nil { return err } diff --git a/core/tx_list.go b/core/tx_list.go index eb943d40..f141a03b 100644 --- a/core/tx_list.go +++ b/core/tx_list.go @@ -21,10 +21,12 @@ import ( "math" "math/big" "sort" + "sync" + "sync/atomic" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // nonceHeap is a heap.Interface implementation over 64bit unsigned integers for @@ -99,7 +101,30 @@ func (m *txSortedMap) Forward(threshold uint64) types.Transactions { // Filter iterates over the list of transactions and removes all of them for which // the specified function evaluates to true. +// Filter, as opposed to 'filter', re-initialises the heap after the operation is done. +// If you want to do several consecutive filterings, it's therefore better to first +// do a .filter(func1) followed by .Filter(func2) or reheap() func (m *txSortedMap) Filter(filter func(*types.Transaction) bool) types.Transactions { + removed := m.filter(filter) + // If transactions were removed, the heap and cache are ruined + if len(removed) > 0 { + m.reheap() + } + return removed +} + +func (m *txSortedMap) reheap() { + *m.index = make([]uint64, 0, len(m.items)) + for nonce := range m.items { + *m.index = append(*m.index, nonce) + } + heap.Init(m.index) + m.cache = nil +} + +// filter is identical to Filter, but **does not** regenerate the heap. This method +// should only be used if followed immediately by a call to Filter or reheap() +func (m *txSortedMap) filter(filter func(*types.Transaction) bool) types.Transactions { var removed types.Transactions // Collect all the transactions to filter out @@ -109,14 +134,7 @@ func (m *txSortedMap) Filter(filter func(*types.Transaction) bool) types.Transac delete(m.items, nonce) } } - // If transactions were removed, the heap and cache are ruined if len(removed) > 0 { - *m.index = make([]uint64, 0, len(m.items)) - for nonce := range m.items { - *m.index = append(*m.index, nonce) - } - heap.Init(m.index) - m.cache = nil } return removed @@ -197,10 +215,7 @@ func (m *txSortedMap) Len() int { return len(m.items) } -// Flatten creates a nonce-sorted slice of transactions based on the loosely -// sorted internal representation. The result of the sorting is cached in case -// it's requested again before any modifications are made to the contents. -func (m *txSortedMap) Flatten() types.Transactions { +func (m *txSortedMap) flatten() types.Transactions { // If the sorting was not cached yet, create and cache it if m.cache == nil { m.cache = make(types.Transactions, 0, len(m.items)) @@ -209,12 +224,27 @@ func (m *txSortedMap) Flatten() types.Transactions { } sort.Sort(types.TxByNonce(m.cache)) } + return m.cache +} + +// Flatten creates a nonce-sorted slice of transactions based on the loosely +// sorted internal representation. The result of the sorting is cached in case +// it's requested again before any modifications are made to the contents. +func (m *txSortedMap) Flatten() types.Transactions { // Copy the cache to prevent accidental modifications - txs := make(types.Transactions, len(m.cache)) - copy(txs, m.cache) + cache := m.flatten() + txs := make(types.Transactions, len(cache)) + copy(txs, cache) return txs } +// LastElement returns the last element of a flattened list, thus, the +// transaction with the highest nonce +func (m *txSortedMap) LastElement() *types.Transaction { + cache := m.flatten() + return cache[len(cache)-1] +} + // txList is a "list" of transactions belonging to an account, sorted by account // nonce. The same type can be used both for storing contiguous transactions for // the executable/pending queue; and for storing gapped transactions for the non- @@ -252,11 +282,23 @@ func (l *txList) Add(tx *types.Transaction, priceBump uint64) (bool, *types.Tran // If there's an older better transaction, abort old := l.txs.Get(tx.Nonce()) if old != nil { - threshold := new(big.Int).Div(new(big.Int).Mul(old.GasPrice(), big.NewInt(100+int64(priceBump))), big.NewInt(100)) - // Have to ensure that the new gas price is higher than the old gas - // price as well as checking the percentage threshold to ensure that - // this is accurate for low (Wei-level) gas price replacements - if old.GasPrice().Cmp(tx.GasPrice()) >= 0 || threshold.Cmp(tx.GasPrice()) > 0 { + if old.GasFeeCapCmp(tx) >= 0 || old.GasTipCapCmp(tx) >= 0 { + return false, nil + } + // thresholdFeeCap = oldFC * (100 + priceBump) / 100 + a := big.NewInt(100 + int64(priceBump)) + aFeeCap := new(big.Int).Mul(a, old.GasFeeCap()) + aTip := a.Mul(a, old.GasTipCap()) + + // thresholdTip = oldTip * (100 + priceBump) / 100 + b := big.NewInt(100) + thresholdFeeCap := aFeeCap.Div(aFeeCap, b) + thresholdTip := aTip.Div(aTip, b) + + // We have to ensure that both the new fee cap and tip are higher than the + // old ones as well as checking the percentage threshold to ensure that + // this is accurate for low (Wei-level) gas price replacements. + if tx.GasFeeCapIntCmp(thresholdFeeCap) < 0 || tx.GasTipCapIntCmp(thresholdTip) < 0 { return false, nil } } @@ -296,20 +338,25 @@ func (l *txList) Filter(costLimit *big.Int, gasLimit uint64) (types.Transactions l.gascap = gasLimit // Filter out all the transactions above the account's funds - removed := l.txs.Filter(func(tx *types.Transaction) bool { return tx.Cost().Cmp(costLimit) > 0 || tx.Gas() > gasLimit }) + removed := l.txs.Filter(func(tx *types.Transaction) bool { + return tx.Gas() > gasLimit || tx.Cost().Cmp(costLimit) > 0 + }) - // If the list was strict, filter anything above the lowest nonce + if len(removed) == 0 { + return nil, nil + } var invalids types.Transactions - - if l.strict && len(removed) > 0 { + // If the list was strict, filter anything above the lowest nonce + if l.strict { lowest := uint64(math.MaxUint64) for _, tx := range removed { if nonce := tx.Nonce(); lowest > nonce { lowest = nonce } } - invalids = l.txs.Filter(func(tx *types.Transaction) bool { return tx.Nonce() > lowest }) + invalids = l.txs.filter(func(tx *types.Transaction) bool { return tx.Nonce() > lowest }) } + l.txs.reheap() return removed, invalids } @@ -363,56 +410,107 @@ func (l *txList) Flatten() types.Transactions { return l.txs.Flatten() } +// LastElement returns the last element of a flattened list, thus, the +// transaction with the highest nonce +func (l *txList) LastElement() *types.Transaction { + return l.txs.LastElement() +} + // priceHeap is a heap.Interface implementation over transactions for retrieving -// price-sorted transactions to discard when the pool fills up. -type priceHeap []*types.Transaction +// price-sorted transactions to discard when the pool fills up. If baseFee is set +// then the heap is sorted based on the effective tip based on the given base fee. +// If baseFee is nil then the sorting is based on gasFeeCap. +type priceHeap struct { + baseFee *big.Int // heap should always be re-sorted after baseFee is changed + list []*types.Transaction +} -func (h priceHeap) Len() int { return len(h) } -func (h priceHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } +func (h *priceHeap) Len() int { return len(h.list) } +func (h *priceHeap) Swap(i, j int) { h.list[i], h.list[j] = h.list[j], h.list[i] } -func (h priceHeap) Less(i, j int) bool { - // Sort primarily by price, returning the cheaper one - switch h[i].GasPrice().Cmp(h[j].GasPrice()) { +func (h *priceHeap) Less(i, j int) bool { + switch h.cmp(h.list[i], h.list[j]) { case -1: return true case 1: return false + default: + return h.list[i].Nonce() > h.list[j].Nonce() } - // If the prices match, stabilize via nonces (high nonce is worse) - return h[i].Nonce() > h[j].Nonce() +} + +func (h *priceHeap) cmp(a, b *types.Transaction) int { + if h.baseFee != nil { + // Compare effective tips if baseFee is specified + if c := a.EffectiveGasTipCmp(b, h.baseFee); c != 0 { + return c + } + } + // Compare fee caps if baseFee is not specified or effective tips are equal + if c := a.GasFeeCapCmp(b); c != 0 { + return c + } + // Compare tips if effective tips and fee caps are equal + return a.GasTipCapCmp(b) } func (h *priceHeap) Push(x interface{}) { - *h = append(*h, x.(*types.Transaction)) + tx := x.(*types.Transaction) + h.list = append(h.list, tx) } func (h *priceHeap) Pop() interface{} { - old := *h + old := h.list n := len(old) x := old[n-1] - *h = old[0 : n-1] + old[n-1] = nil + h.list = old[0 : n-1] return x } // txPricedList is a price-sorted heap to allow operating on transactions pool -// contents in a price-incrementing way. +// contents in a price-incrementing way. It's built opon the all transactions +// in txpool but only interested in the remote part. It means only remote transactions +// will be considered for tracking, sorting, eviction, etc. +// +// Two heaps are used for sorting: the urgent heap (based on effective tip in the next +// block) and the floating heap (based on gasFeeCap). Always the bigger heap is chosen for +// eviction. Transactions evicted from the urgent heap are first demoted into the floating heap. +// In some cases (during a congestion, when blocks are full) the urgent heap can provide +// better candidates for inclusion while in other cases (at the top of the baseFee peak) +// the floating heap is better. When baseFee is decreasing they behave similarly. type txPricedList struct { - all *txLookup // Pointer to the map of all transactions - items *priceHeap // Heap of prices of all the stored transactions - stales int // Number of stale price points to (re-heap trigger) + // Number of stale price points to (re-heap trigger). + // This field is accessed atomically, and must be the first field + // to ensure it has correct alignment for atomic.AddInt64. + // See https://golang.org/pkg/sync/atomic/#pkg-note-BUG. + stales int64 + + all *txLookup // Pointer to the map of all transactions + urgent, floating priceHeap // Heaps of prices of all the stored **remote** transactions + reheapMu sync.Mutex // Mutex asserts that only one routine is reheaping the list } +const ( + // urgentRatio : floatingRatio is the capacity ratio of the two queues + urgentRatio = 4 + floatingRatio = 1 +) + // newTxPricedList creates a new price-sorted transaction heap. func newTxPricedList(all *txLookup) *txPricedList { return &txPricedList{ - all: all, - items: new(priceHeap), + all: all, } } // Put inserts a new transaction into the heap. -func (l *txPricedList) Put(tx *types.Transaction) { - heap.Push(l.items, tx) +func (l *txPricedList) Put(tx *types.Transaction, local bool) { + if local { + return + } + // Insert every new transaction to the urgent heap first; Discard will balance the heaps + heap.Push(&l.urgent, tx) } // Removed notifies the prices transaction list that an old transaction dropped @@ -420,101 +518,118 @@ func (l *txPricedList) Put(tx *types.Transaction) { // the heap if a large enough ratio of transactions go stale. func (l *txPricedList) Removed(count int) { // Bump the stale counter, but exit if still too low (< 25%) - l.stales += count - if l.stales <= len(*l.items)/4 { + stales := atomic.AddInt64(&l.stales, int64(count)) + if int(stales) <= (len(l.urgent.list)+len(l.floating.list))/4 { return } // Seems we've reached a critical number of stale transactions, reheap - reheap := make(priceHeap, 0, l.all.Count()) - - l.stales, l.items = 0, &reheap - l.all.Range(func(hash common.Hash, tx *types.Transaction) bool { - *l.items = append(*l.items, tx) - return true - }) - heap.Init(l.items) -} - -// Cap finds all the transactions below the given price threshold, drops them -// from the priced list and returns them for further removal from the entire pool. -func (l *txPricedList) Cap(threshold *big.Int, local *accountSet) types.Transactions { - drop := make(types.Transactions, 0, 128) // Remote underpriced transactions to drop - save := make(types.Transactions, 0, 64) // Local underpriced transactions to keep - - for len(*l.items) > 0 { - // Discard stale transactions if found during cleanup - tx := heap.Pop(l.items).(*types.Transaction) - if l.all.Get(tx.Hash()) == nil { - l.stales-- - continue - } - // Stop the discards if we've reached the threshold - if tx.GasPrice().Cmp(threshold) >= 0 { - save = append(save, tx) - break - } - // Non stale transaction found, discard unless local - if local.containsTx(tx) { - save = append(save, tx) - } else { - drop = append(drop, tx) - } - } - for _, tx := range save { - heap.Push(l.items, tx) - } - return drop + l.Reheap() } // Underpriced checks whether a transaction is cheaper than (or as cheap as) the -// lowest priced transaction currently being tracked. -func (l *txPricedList) Underpriced(tx *types.Transaction, local *accountSet) bool { - // Local transactions cannot be underpriced - if local.containsTx(tx) { - return false - } +// lowest priced (remote) transaction currently being tracked. +func (l *txPricedList) Underpriced(tx *types.Transaction) bool { + // Note: with two queues, being underpriced is defined as being worse than the worst item + // in all non-empty queues if there is any. If both queues are empty then nothing is underpriced. + return (l.underpricedFor(&l.urgent, tx) || len(l.urgent.list) == 0) && + (l.underpricedFor(&l.floating, tx) || len(l.floating.list) == 0) && + (len(l.urgent.list) != 0 || len(l.floating.list) != 0) +} + +// underpricedFor checks whether a transaction is cheaper than (or as cheap as) the +// lowest priced (remote) transaction in the given heap. +func (l *txPricedList) underpricedFor(h *priceHeap, tx *types.Transaction) bool { // Discard stale price points if found at the heap start - for len(*l.items) > 0 { - head := []*types.Transaction(*l.items)[0] - if l.all.Get(head.Hash()) == nil { - l.stales-- - heap.Pop(l.items) + for len(h.list) > 0 { + head := h.list[0] + if l.all.GetRemote(head.Hash()) == nil { // Removed or migrated + atomic.AddInt64(&l.stales, -1) + heap.Pop(h) continue } break } // Check if the transaction is underpriced or not - if len(*l.items) == 0 { - log.Error("Pricing query for empty pool") // This cannot happen, print to catch programming errors - return false + if len(h.list) == 0 { + return false // There is no remote transaction at all. } - cheapest := []*types.Transaction(*l.items)[0] - return cheapest.GasPrice().Cmp(tx.GasPrice()) >= 0 + // If the remote transaction is even cheaper than the + // cheapest one tracked locally, reject it. + return h.cmp(h.list[0], tx) >= 0 } // Discard finds a number of most underpriced transactions, removes them from the // priced list and returns them for further removal from the entire pool. -func (l *txPricedList) Discard(count int, local *accountSet) types.Transactions { - drop := make(types.Transactions, 0, count) // Remote underpriced transactions to drop - save := make(types.Transactions, 0, 64) // Local underpriced transactions to keep - - for len(*l.items) > 0 && count > 0 { - // Discard stale transactions if found during cleanup - tx := heap.Pop(l.items).(*types.Transaction) - if l.all.Get(tx.Hash()) == nil { - l.stales-- - continue - } - // Non stale transaction found, discard unless local - if local.containsTx(tx) { - save = append(save, tx) +// +// Note local transaction won't be considered for eviction. +func (l *txPricedList) Discard(slots int, force bool) (types.Transactions, bool) { + drop := make(types.Transactions, 0, slots) // Remote underpriced transactions to drop + for slots > 0 { + if len(l.urgent.list)*floatingRatio > len(l.floating.list)*urgentRatio || floatingRatio == 0 { + // Discard stale transactions if found during cleanup + tx := heap.Pop(&l.urgent).(*types.Transaction) + if l.all.GetRemote(tx.Hash()) == nil { // Removed or migrated + atomic.AddInt64(&l.stales, -1) + continue + } + // Non stale transaction found, move to floating heap + heap.Push(&l.floating, tx) } else { + if len(l.floating.list) == 0 { + // Stop if both heaps are empty + break + } + // Discard stale transactions if found during cleanup + tx := heap.Pop(&l.floating).(*types.Transaction) + if l.all.GetRemote(tx.Hash()) == nil { // Removed or migrated + atomic.AddInt64(&l.stales, -1) + continue + } + // Non stale transaction found, discard it drop = append(drop, tx) - count-- + slots -= numSlots(tx) } } - for _, tx := range save { - heap.Push(l.items, tx) + // If we still can't make enough room for the new transaction + if slots > 0 && !force { + for _, tx := range drop { + heap.Push(&l.urgent, tx) + } + return nil, false } - return drop + return drop, true +} + +// Reheap forcibly rebuilds the heap based on the current remote transaction set. +func (l *txPricedList) Reheap() { + l.reheapMu.Lock() + defer l.reheapMu.Unlock() + start := time.Now() + atomic.StoreInt64(&l.stales, 0) + l.urgent.list = make([]*types.Transaction, 0, l.all.RemoteCount()) + l.all.Range(func(hash common.Hash, tx *types.Transaction, local bool) bool { + l.urgent.list = append(l.urgent.list, tx) + return true + }, false, true) // Only iterate remotes + heap.Init(&l.urgent) + + // balance out the two heaps by moving the worse half of transactions into the + // floating heap + // Note: Discard would also do this before the first eviction but Reheap can do + // is more efficiently. Also, Underpriced would work suboptimally the first time + // if the floating queue was empty. + floatingCount := len(l.urgent.list) * floatingRatio / (urgentRatio + floatingRatio) + l.floating.list = make([]*types.Transaction, floatingCount) + for i := 0; i < floatingCount; i++ { + l.floating.list[i] = heap.Pop(&l.urgent).(*types.Transaction) + } + heap.Init(&l.floating) + reheapTimer.Update(time.Since(start)) +} + +// SetBaseFee updates the base fee and triggers a re-heap. Note that Removed is not +// necessary to call right before SetBaseFee when processing a new block. +func (l *txPricedList) SetBaseFee(baseFee *big.Int) { + l.urgent.baseFee = baseFee + l.Reheap() } diff --git a/core/tx_list_test.go b/core/tx_list_test.go index 05ab0a3e..ef49cae1 100644 --- a/core/tx_list_test.go +++ b/core/tx_list_test.go @@ -17,11 +17,12 @@ package core import ( + "math/big" "math/rand" "testing" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" ) // Tests that transactions can be added to strict lists and list contents and @@ -49,3 +50,23 @@ func TestStrictTxListAdd(t *testing.T) { } } } + +func BenchmarkTxListAdd(b *testing.B) { + // Generate a list of transactions to insert + key, _ := crypto.GenerateKey() + + txs := make(types.Transactions, 100000) + for i := 0; i < len(txs); i++ { + txs[i] = transaction(uint64(i), 0, key) + } + // Insert the transactions in a random order + priceLimit := big.NewInt(int64(DefaultTxPoolConfig.PriceLimit)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + list := newTxList(true) + for _, v := range rand.Perm(len(txs)) { + list.Add(txs[v], DefaultTxPoolConfig.PriceBump) + list.Filter(priceLimit, DefaultTxPoolConfig.PriceBump) + } + } +} diff --git a/core/tx_noncer.go b/core/tx_noncer.go index 4f3892c8..51fa8cf5 100644 --- a/core/tx_noncer.go +++ b/core/tx_noncer.go @@ -19,8 +19,8 @@ package core import ( "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/state" + "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 @@ -64,7 +64,7 @@ func (txn *txNoncer) set(addr common.Address, nonce uint64) { } // setIfLower updates a new virtual nonce into the virtual state database if the -// the new one is lower. +// new one is lower. func (txn *txNoncer) setIfLower(addr common.Address, nonce uint64) { txn.lock.Lock() defer txn.lock.Unlock() @@ -77,3 +77,11 @@ func (txn *txNoncer) setIfLower(addr common.Address, nonce uint64) { } txn.nonces[addr] = nonce } + +// setAll sets the nonces for all accounts to the given map. +func (txn *txNoncer) setAll(all map[common.Address]uint64) { + txn.lock.Lock() + defer txn.lock.Unlock() + + txn.nonces = all +} diff --git a/core/tx_pool.go b/core/tx_pool.go index afd27163..1c25442d 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -18,57 +18,66 @@ package core import ( "errors" - "fmt" "math" "math/big" "sort" "sync" + "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/params" ) const ( // chainHeadChanSize is the size of channel listening to ChainHeadEvent. chainHeadChanSize = 10 + + // txSlotSize is used to calculate how many data slots a single transaction + // takes up based on its size. The slots are used as DoS protection, ensuring + // that validating a new transaction remains a constant operation (in reality + // O(maxslots), where max slots are 4 currently). + txSlotSize = 32 * 1024 + + // txMaxSize is the maximum size a single transaction can have. This field has + // non-trivial consequences: larger transactions are significantly harder and + // more expensive to propagate; larger transactions also take more resources + // to validate whether they fit into the pool or not. + txMaxSize = 4 * txSlotSize // 128KB ) var ( + // ErrAlreadyKnown is returned if the transactions is already contained + // within the pool. + ErrAlreadyKnown = errors.New("already known") + // ErrInvalidSender is returned if the transaction contains an invalid signature. ErrInvalidSender = errors.New("invalid sender") - // ErrNonceTooLow is returned if the nonce of a transaction is lower than the - // one present in the local chain. - ErrNonceTooLow = errors.New("nonce too low") - // ErrUnderpriced is returned if a transaction's gas price is below the minimum // configured for the transaction pool. ErrUnderpriced = errors.New("transaction underpriced") + // ErrTxPoolOverflow is returned if the transaction pool is full and can't accpet + // another remote transaction. + ErrTxPoolOverflow = errors.New("txpool is full") + // ErrReplaceUnderpriced is returned if a transaction is attempted to be replaced // with a different one without the required price bump. ErrReplaceUnderpriced = errors.New("replacement transaction underpriced") - // ErrInsufficientFunds is returned if the total cost of executing a transaction - // is higher than the balance of the user's account. - ErrInsufficientFunds = errors.New("insufficient funds for gas * price + value") - - // ErrIntrinsicGas is returned if the transaction is specified to use less gas - // than required to start the invocation. - ErrIntrinsicGas = errors.New("intrinsic gas too low") - // ErrGasLimit is returned if a transaction's requested gas limit exceeds the // maximum allowance of the current block. ErrGasLimit = errors.New("exceeds block gas limit") - // ErrNegativeValue is a sanity error to ensure noone is able to specify a + // ErrNegativeValue is a sanity error to ensure no one is able to specify a // transaction with a negative value. ErrNegativeValue = errors.New("negative value") @@ -95,15 +104,29 @@ var ( 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 + queuedEvictionMeter = metrics.NewRegisteredMeter("txpool/queued/eviction", nil) // Dropped due to lifetime // General tx metrics - validMeter = metrics.NewRegisteredMeter("txpool/valid", 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) - - pendingCounter = metrics.NewRegisteredCounter("txpool/pending", nil) - queuedCounter = metrics.NewRegisteredCounter("txpool/queued", nil) - localCounter = metrics.NewRegisteredCounter("txpool/local", nil) + overflowedTxMeter = metrics.NewRegisteredMeter("txpool/overflowed", nil) + // throttleTxMeter counts how many transactions are rejected due to too-many-changes between + // txpool reorgs. + throttleTxMeter = metrics.NewRegisteredMeter("txpool/throttle", nil) + // reorgDurationTimer measures how long time a txpool reorg takes. + reorgDurationTimer = metrics.NewRegisteredTimer("txpool/reorgtime", nil) + // dropBetweenReorgHistogram counts how many drops we experience between two reorg runs. It is expected + // that this number is pretty low, since txpool reorgs happen very frequently. + dropBetweenReorgHistogram = metrics.NewRegisteredHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) + + pendingGauge = metrics.NewRegisteredGauge("txpool/pending", nil) + queuedGauge = metrics.NewRegisteredGauge("txpool/queued", nil) + localGauge = metrics.NewRegisteredGauge("txpool/local", nil) + slotsGauge = metrics.NewRegisteredGauge("txpool/slots", nil) + + reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", nil) ) // TxStatus is the current status of a transaction as seen by the pool. @@ -154,7 +177,7 @@ var DefaultTxPoolConfig = TxPoolConfig{ PriceBump: 10, AccountSlots: 16, - GlobalSlots: 4096, + GlobalSlots: 4096 + 1024, // urgent + floating queue capacity with 4:1 ratio AccountQueue: 64, GlobalQueue: 1024, @@ -218,6 +241,8 @@ type TxPool struct { mu sync.RWMutex istanbul bool // Fork indicator whether we are in the istanbul stage. + eip2718 bool // Fork indicator whether we are using EIP-2718 type transactions. + eip1559 bool // Fork indicator whether we are using EIP-1559 type transactions. currentState *state.StateDB // Current state in the blockchain head pendingNonces *txNoncer // Pending state tracking virtual nonces @@ -240,6 +265,9 @@ type TxPool struct { reorgDoneCh chan chan struct{} reorgShutdownCh chan struct{} // requests shutdown of scheduleReorgLoop wg sync.WaitGroup // tracks loop, scheduleReorgLoop + initDoneCh chan struct{} // is closed once the pool is initialized (for tests) + + changesSinceReorg int // A counter for how many drops we've performed in-between reorg. } type txpoolResetRequest struct { @@ -257,7 +285,7 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block config: config, chainconfig: chainconfig, chain: chain, - signer: types.NewEIP155Signer(chainconfig.ChainID), + signer: types.LatestSigner(chainconfig), pending: make(map[common.Address]*txList), queue: make(map[common.Address]*txList), beats: make(map[common.Address]time.Time), @@ -268,6 +296,7 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block queueTxEventCh: make(chan *types.Transaction), reorgDoneCh: make(chan chan struct{}), reorgShutdownCh: make(chan struct{}), + initDoneCh: make(chan struct{}), gasPrice: new(big.Int).SetUint64(config.PriceLimit), } pool.locals = newAccountSet(pool.signer) @@ -321,6 +350,8 @@ func (pool *TxPool) loop() { defer evict.Stop() defer journal.Stop() + // Notify tests that the init phase is done + close(pool.initDoneCh) for { select { // Handle ChainHeadEvent @@ -339,8 +370,8 @@ func (pool *TxPool) loop() { case <-report.C: pool.mu.RLock() pending, queued := pool.stats() - stales := pool.priced.stales pool.mu.RUnlock() + stales := int(atomic.LoadInt64(&pool.priced.stales)) if pending != prevPending || queued != prevQueued || stales != prevStales { log.Debug("Transaction pool status report", "executable", pending, "queued", queued, "stales", stales) @@ -357,9 +388,11 @@ func (pool *TxPool) loop() { } // Any non-locals old enough should be removed if time.Since(pool.beats[addr]) > pool.config.Lifetime { - for _, tx := range pool.queue[addr].Flatten() { + list := pool.queue[addr].Flatten() + for _, tx := range list { pool.removeTx(tx.Hash(), true) } + queuedEvictionMeter.Mark(int64(len(list))) } } pool.mu.Unlock() @@ -412,10 +445,18 @@ func (pool *TxPool) SetGasPrice(price *big.Int) { pool.mu.Lock() defer pool.mu.Unlock() + old := pool.gasPrice pool.gasPrice = price - for _, tx := range pool.priced.Cap(price, pool.locals) { - pool.removeTx(tx.Hash(), false) + // if the min miner fee increased, remove transactions below the new threshold + if price.Cmp(old) > 0 { + // pool.priced is sorted by GasFeeCap, so we have to iterate through pool.all instead + drop := pool.all.RemotesBelowTip(price) + for _, tx := range drop { + pool.removeTx(tx.Hash(), false) + } + pool.priced.Removed(len(drop)) } + log.Info("Transaction pool price threshold updated", "price", price) } @@ -468,18 +509,52 @@ func (pool *TxPool) Content() (map[common.Address]types.Transactions, map[common return pending, queued } +// ContentFrom retrieves the data content of the transaction pool, returning the +// pending as well as queued transactions of this address, grouped by nonce. +func (pool *TxPool) ContentFrom(addr common.Address) (types.Transactions, types.Transactions) { + pool.mu.RLock() + defer pool.mu.RUnlock() + + var pending types.Transactions + if list, ok := pool.pending[addr]; ok { + pending = list.Flatten() + } + var queued types.Transactions + if list, ok := pool.queue[addr]; ok { + queued = list.Flatten() + } + return pending, queued +} + // Pending retrieves all currently processable transactions, grouped by origin // account and sorted by nonce. The returned transaction set is a copy and can be // freely modified by calling code. -func (pool *TxPool) Pending() (map[common.Address]types.Transactions, error) { +// +// The enforceTips parameter can be used to do an extra filtering on the pending +// transactions and only return those whose **effective** tip is large enough in +// the next pending execution environment. +func (pool *TxPool) Pending(enforceTips bool) map[common.Address]types.Transactions { pool.mu.Lock() defer pool.mu.Unlock() pending := make(map[common.Address]types.Transactions) for addr, list := range pool.pending { - pending[addr] = list.Flatten() + txs := list.Flatten() + + // If the miner requests tip enforcement, cap the lists now + if enforceTips && !pool.locals.contains(addr) { + for i, tx := range txs { + if tx.EffectiveGasTipIntCmp(pool.gasPrice, pool.priced.urgent.baseFee) < 0 { + txs = txs[:i] + break + } + } + } + if len(txs) > 0 { + pending[addr] = txs + } } - return pending, nil + return pending } // Locals retrieves the accounts currently considered local by the pool. @@ -509,8 +584,16 @@ func (pool *TxPool) local() map[common.Address]types.Transactions { // 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 { - // Heuristic limit, reject transactions over 32KB to prevent DOS attacks - if tx.Size() > 32*1024 { + // Accept only legacy transactions until EIP-2718/2930 activates. + if !pool.eip2718 && tx.Type() != types.LegacyTxType { + return ErrTxTypeNotSupported + } + // Reject dynamic fee transactions until EIP-1559 activates. + if !pool.eip1559 && tx.Type() == types.DynamicFeeTxType { + return ErrTxTypeNotSupported + } + // Reject transactions over defined size to prevent DOS attacks + if uint64(tx.Size()) > txMaxSize { return ErrOversizedData } // Transactions can't be negative. This may never happen using RLP decoded @@ -522,14 +605,24 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { if pool.currentMaxGas < tx.Gas() { return ErrGasLimit } - // Make sure the transaction is signed properly + // Sanity check for extremely large numbers + if tx.GasFeeCap().BitLen() > 256 { + return ErrFeeCapVeryHigh + } + if tx.GasTipCap().BitLen() > 256 { + return ErrTipVeryHigh + } + // Ensure gasFeeCap is greater than or equal to gasTipCap. + if tx.GasFeeCapIntCmp(tx.GasTipCap()) < 0 { + return ErrTipAboveFeeCap + } + // Make sure the transaction is signed properly. from, err := types.Sender(pool.signer, tx) if err != nil { return ErrInvalidSender } - // Drop non-local transactions under our own minimal accepted gas price - local = local || pool.locals.contains(from) // account may be local even if the transaction arrived from the network - if !local && pool.gasPrice.Cmp(tx.GasPrice()) > 0 { + // Drop non-local transactions under our own minimal accepted gas price or tip + if !local && tx.GasTipCapIntCmp(pool.gasPrice) < 0 { return ErrUnderpriced } // Ensure the transaction adheres to nonce ordering @@ -542,7 +635,7 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { return ErrInsufficientFunds } // Ensure the transaction has more gas than the basic tx fee. - intrGas, err := IntrinsicGas(tx.Data(), tx.To() == nil, true, pool.istanbul) + intrGas, err := IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, true, pool.istanbul) if err != nil { return err } @@ -557,40 +650,63 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { // 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. +// be added to the allowlist, 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) - return false, fmt.Errorf("known transaction: %x", hash) + knownTxMeter.Mark(1) + return false, ErrAlreadyKnown } + // Make the local flag. If it's from local source or it's from the network but + // the sender is marked as local previously, treat it as the local transaction. + isLocal := local || pool.locals.containsTx(tx) // If the transaction fails basic validation, discard it - if err := pool.validateTx(tx, local); err != nil { + if err := pool.validateTx(tx, isLocal); err != nil { log.Trace("Discarding invalid transaction", "hash", hash, "err", err) invalidTxMeter.Mark(1) return false, err } - // If the transaction pool is full, discard underpriced transactions - if uint64(pool.all.Count()) >= pool.config.GlobalSlots+pool.config.GlobalQueue { + if uint64(pool.all.Slots()+numSlots(tx)) > pool.config.GlobalSlots+pool.config.GlobalQueue { // 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()) + if !isLocal && pool.priced.Underpriced(tx) { + log.Trace("Discarding underpriced transaction", "hash", hash, "gasTipCap", tx.GasTipCap(), "gasFeeCap", tx.GasFeeCap()) 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) + // We're about to replace a transaction. The reorg does a more thorough + // analysis of what to remove and how, but it runs async. We don't want to + // do too many replacements between reorg-runs, so we cap the number of + // replacements to 25% of the slots + if pool.changesSinceReorg > int(pool.config.GlobalSlots/4) { + throttleTxMeter.Mark(1) + return false, ErrTxPoolOverflow + } + + // New transaction is better than our worse ones, make room for it. + // If it's a local transaction, forcibly discard all available transactions. + // Otherwise if we can't make enough room for new one, abort the operation. + drop, success := pool.priced.Discard(pool.all.Slots()-int(pool.config.GlobalSlots+pool.config.GlobalQueue)+numSlots(tx), isLocal) + + // Special case, we still can't make the room for the new remote one. + if !isLocal && !success { + log.Trace("Discarding overflown transaction", "hash", hash) + overflowedTxMeter.Mark(1) + return false, ErrTxPoolOverflow + } + // Bump the counter of rejections-since-reorg + pool.changesSinceReorg += len(drop) + // Kick out the underpriced remote transactions. for _, tx := range drop { - log.Trace("Discarding freshly underpriced transaction", "hash", tx.Hash(), "price", tx.GasPrice()) + log.Trace("Discarding freshly underpriced transaction", "hash", tx.Hash(), "gasTipCap", tx.GasTipCap(), "gasFeeCap", tx.GasFeeCap()) underpricedTxMeter.Mark(1) pool.removeTx(tx.Hash(), false) } } - // 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) { @@ -606,29 +722,29 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err e pool.priced.Removed(1) pendingReplaceMeter.Mark(1) } - pool.all.Add(tx) - pool.priced.Put(tx) + pool.all.Add(tx, isLocal) + pool.priced.Put(tx, isLocal) pool.journalTx(from, tx) pool.queueTxEvent(tx) log.Trace("Pooled new executable transaction", "hash", hash, "from", from, "to", tx.To()) + + // Successful promotion, bump the heartbeat + pool.beats[from] = time.Now() return old != nil, nil } - // New transaction isn't replacing a pending one, push into queue - replaced, err = pool.enqueueTx(hash, tx) + replaced, err = pool.enqueueTx(hash, tx, isLocal, true) if err != nil { return false, err } - // Mark local addresses and journal local transactions - if local { - if !pool.locals.contains(from) { - log.Info("Setting new local account", "address", from) - pool.locals.add(from) - } + if local && !pool.locals.contains(from) { + log.Info("Setting new local account", "address", from) + pool.locals.add(from) + pool.priced.Removed(pool.all.RemoteToLocals(pool.locals)) // Migrate the remotes if it's marked as local first time. } - if local || pool.locals.contains(from) { - localCounter.Inc(1) + if isLocal { + localGauge.Inc(1) } pool.journalTx(from, tx) @@ -639,7 +755,7 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err e // enqueueTx inserts a new transaction into the non-executable transaction queue. // // Note, this method assumes the pool lock is held! -func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) (bool, error) { +func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction, local bool, addAll bool) (bool, error) { // Try to insert the transaction into the future queue from, _ := types.Sender(pool.signer, tx) // already validated if pool.queue[from] == nil { @@ -658,11 +774,20 @@ func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) (bool, er queuedReplaceMeter.Mark(1) } else { // Nothing was replaced, bump the queued counter - queuedCounter.Inc(1) + queuedGauge.Inc(1) } - if pool.all.Get(hash) == nil { - pool.all.Add(tx) - pool.priced.Put(tx) + // If the transaction isn't in lookup set but it's expected to be there, + // show the error log. + if pool.all.Get(hash) == nil && !addAll { + log.Error("Missing transaction in lookup set, please report the issue", "hash", hash) + } + if addAll { + pool.all.Add(tx, local) + pool.priced.Put(tx, local) + } + // If we never record the heartbeat, do it right now. + if _, exist := pool.beats[from]; !exist { + pool.beats[from] = time.Now() } return old != nil, nil } @@ -695,7 +820,6 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T // An older transaction was better, discard this pool.all.Remove(hash) pool.priced.Removed(1) - pendingDiscardMeter.Mark(1) return false } @@ -703,21 +827,16 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T if old != nil { pool.all.Remove(old.Hash()) pool.priced.Removed(1) - pendingReplaceMeter.Mark(1) } else { // Nothing was replaced, bump the pending counter - pendingCounter.Inc(1) - } - // Failsafe to work around direct pending inserts (tests) - if pool.all.Get(hash) == nil { - pool.all.Add(tx) - pool.priced.Put(tx) + pendingGauge.Inc(1) } // Set the potentially new pending nonce and notify any subsystems of the new tx - pool.beats[addr] = time.Now() pool.pendingNonces.set(addr, tx.Nonce()+1) + // Successful promotion, bump the heartbeat + pool.beats[addr] = time.Now() return true } @@ -768,15 +887,48 @@ func (pool *TxPool) AddRemote(tx *types.Transaction) error { // addTxs attempts to queue a batch of transactions if they are valid. func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error { - // Cache senders in transactions before obtaining lock (pool.signer is immutable) - for _, tx := range txs { - types.Sender(pool.signer, tx) + // 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 the transaction is known, pre-set the error slot + if pool.all.Get(tx.Hash()) != nil { + errs[i] = ErrAlreadyKnown + knownTxMeter.Mark(1) + continue + } + // Exclude transactions with invalid signatures as soon as + // possible and cache senders in transactions before + // obtaining lock + _, err := types.Sender(pool.signer, tx) + if err != nil { + errs[i] = ErrInvalidSender + invalidTxMeter.Mark(1) + continue + } + // Accumulate all unknown transactions for deeper processing + news = append(news, tx) + } + if len(news) == 0 { + return errs } + // Process all the new transaction and merge any errors into the original slice pool.mu.Lock() - errs, dirtyAddrs := pool.addTxsLocked(txs, local) + newErrs, dirtyAddrs := pool.addTxsLocked(news, local) pool.mu.Unlock() + var nilSlot = 0 + for _, err := range newErrs { + for errs[nilSlot] != nil { + nilSlot++ + } + errs[nilSlot] = err + nilSlot++ + } + // Reorg the pool internals if needed and return done := pool.requestPromoteExecutables(dirtyAddrs) if sync { <-done @@ -796,26 +948,29 @@ func (pool *TxPool) addTxsLocked(txs []*types.Transaction, local bool) ([]error, dirty.addTx(tx) } } - validMeter.Mark(int64(len(dirty.accounts))) + 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 } @@ -825,6 +980,12 @@ func (pool *TxPool) Get(hash common.Hash) *types.Transaction { return pool.all.Get(hash) } +// Has returns an indicator whether txpool has a transaction cached with the +// given hash. +func (pool *TxPool) Has(hash common.Hash) bool { + return pool.all.Get(hash) != nil +} + // removeTx removes a single transaction from the queue, moving all subsequent // transactions back to the future queue. func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { @@ -841,7 +1002,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { pool.priced.Removed(1) } if pool.locals.contains(addr) { - localCounter.Dec(1) + localGauge.Dec(1) } // Remove the transaction from the pending lists and reset the account nonce if pending := pool.pending[addr]; pending != nil { @@ -849,16 +1010,16 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { // If no more pending transactions are left, remove the list if pending.Empty() { delete(pool.pending, addr) - delete(pool.beats, addr) } // Postpone any invalidated transactions for _, tx := range invalids { - pool.enqueueTx(tx.Hash(), tx) + // Internal shuffle shouldn't touch the lookup set. + pool.enqueueTx(tx.Hash(), tx, false, false) } // Update the account nonce if needed pool.pendingNonces.setIfLower(addr, tx.Nonce()) // Reduce the pending counter - pendingCounter.Dec(int64(1 + len(invalids))) + pendingGauge.Dec(int64(1 + len(invalids))) return } } @@ -866,15 +1027,16 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { if future := pool.queue[addr]; future != nil { if removed, _ := future.Remove(tx); removed { // Reduce the queued counter - queuedCounter.Dec(1) + queuedGauge.Dec(1) } if future.Empty() { delete(pool.queue, addr) + delete(pool.beats, addr) } } } -// requestPromoteExecutables requests a pool reset to the new head block. +// requestReset 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 { @@ -978,10 +1140,16 @@ func (pool *TxPool) scheduleReorgLoop() { // 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 func(t0 time.Time) { + reorgDurationTimer.Update(time.Since(t0)) + }(time.Now()) defer close(done) var promoteAddrs []common.Address - if dirtyAccounts != nil { + if dirtyAccounts != nil && reset == nil { + // Only dirty accounts need to be promoted, unless we're resetting. + // For resets, all addresses in the tx queue will be promoted and + // the flatten operation can be avoided. promoteAddrs = dirtyAccounts.flatten() } pool.mu.Lock() @@ -997,38 +1165,47 @@ func (pool *TxPool) runReorg(done chan struct{}, reset *txpoolResetRequest, dirt } } // Reset needs promote for all addresses - promoteAddrs = promoteAddrs[:0] + promoteAddrs = make([]common.Address, 0, len(pool.queue)) 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() + if reset.newHead != nil && pool.chainconfig.IsLondon(new(big.Int).Add(reset.newHead.Number, big.NewInt(1))) { + pendingBaseFee := misc.CalcBaseFee(pool.chainconfig, reset.newHead) + pool.priced.SetBaseFee(pendingBaseFee) + } + // Update all accounts to the latest known pending nonce + nonces := make(map[common.Address]uint64, len(pool.pending)) + for addr, list := range pool.pending { + highestPending := list.LastElement() + nonces[addr] = highestPending.Nonce() + 1 + } + pool.pendingNonces.setAll(nonces) } // 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) - } + dropBetweenReorgHistogram.Update(int64(pool.changesSinceReorg)) + pool.changesSinceReorg = 0 // Reset change counter pool.mu.Unlock() // Notify subsystems for newly added transactions + for _, tx := range promoted { + addr, _ := types.Sender(pool.signer, tx) + if _, ok := events[addr]; !ok { + events[addr] = newTxSortedMap() + } + events[addr].Put(tx) + } if len(events) > 0 { var txs []*types.Transaction for _, set := range events { @@ -1063,44 +1240,45 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) { // 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 newNum >= oldNum { // 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 + // 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) + // We still need to update the current state s.th. the lost transactions can be readded by the user + } else { + 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 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 + 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 + } } - 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) } - reinject = types.TxDifference(discarded, included) } } // Initialize the internal state to the current head @@ -1124,6 +1302,8 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) { // 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) + pool.eip2718 = pool.chainconfig.IsBerlin(next) + pool.eip1559 = pool.chainconfig.IsLondon(next) } // promoteExecutables moves transactions that have become processable from the @@ -1144,15 +1324,15 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans for _, tx := range forwards { hash := tx.Hash() pool.all.Remove(hash) - log.Trace("Removed old queued transaction", "hash", hash) } + log.Trace("Removed old queued transactions", "count", len(forwards)) // 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() pool.all.Remove(hash) - log.Trace("Removed unpayable queued transaction", "hash", hash) } + log.Trace("Removed unpayable queued transactions", "count", len(drops)) queuedNofundsMeter.Mark(int64(len(drops))) // Gather all executable transactions and promote them @@ -1160,11 +1340,11 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans for _, tx := range readies { hash := tx.Hash() if pool.promoteTx(addr, hash, tx) { - log.Trace("Promoting queued transaction", "hash", hash) promoted = append(promoted, tx) } } - queuedCounter.Dec(int64(len(readies))) + log.Trace("Promoted queued transactions", "count", len(promoted)) + queuedGauge.Dec(int64(len(readies))) // Drop all transactions over the allowed limit var caps types.Transactions @@ -1179,13 +1359,14 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans } // Mark all the items dropped as removed pool.priced.Removed(len(forwards) + len(drops) + len(caps)) - queuedCounter.Dec(int64(len(forwards) + len(drops) + len(caps))) + queuedGauge.Dec(int64(len(forwards) + len(drops) + len(caps))) if pool.locals.contains(addr) { - localCounter.Dec(int64(len(forwards) + len(drops) + len(caps))) + 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) + delete(pool.beats, addr) } } return promoted @@ -1240,9 +1421,9 @@ func (pool *TxPool) truncatePending() { log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) } pool.priced.Removed(len(caps)) - pendingCounter.Dec(int64(len(caps))) + pendingGauge.Dec(int64(len(caps))) if pool.locals.contains(offenders[i]) { - localCounter.Dec(int64(len(caps))) + localGauge.Dec(int64(len(caps))) } pending-- } @@ -1267,9 +1448,9 @@ func (pool *TxPool) truncatePending() { log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) } pool.priced.Removed(len(caps)) - pendingCounter.Dec(int64(len(caps))) + pendingGauge.Dec(int64(len(caps))) if pool.locals.contains(addr) { - localCounter.Dec(int64(len(caps))) + localGauge.Dec(int64(len(caps))) } pending-- } @@ -1278,7 +1459,7 @@ func (pool *TxPool) truncatePending() { pendingRateLimitMeter.Mark(int64(pendingBeforeCap - pending)) } -// truncateQueue drops the oldes transactions in the queue if the pool is above the global queue limit. +// truncateQueue drops the oldest 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 { @@ -1295,7 +1476,7 @@ func (pool *TxPool) truncateQueue() { addresses = append(addresses, addressByHeartbeat{addr, pool.beats[addr]}) } } - sort.Sort(addresses) + sort.Sort(sort.Reverse(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; { @@ -1326,6 +1507,10 @@ func (pool *TxPool) truncateQueue() { // demoteUnexecutables removes invalid and processed transactions from the pools // executable/pending queue and any subsequent transactions that become unexecutable // are moved back into the future queue. +// +// Note: transactions are not marked as removed in the priced list because re-heaping +// is always explicitly triggered by SetBaseFee and it would be unnecessary and wasteful +// to trigger a re-heap is this function func (pool *TxPool) demoteUnexecutables() { // Iterate over all accounts and demote any non-executable transactions for addr, list := range pool.pending { @@ -1345,17 +1530,18 @@ func (pool *TxPool) demoteUnexecutables() { log.Trace("Removed unpayable pending transaction", "hash", hash) pool.all.Remove(hash) } - 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) + + // Internal shuffle shouldn't touch the lookup set. + pool.enqueueTx(hash, tx, false, false) } - pendingCounter.Dec(int64(len(olds) + len(drops) + len(invalids))) + pendingGauge.Dec(int64(len(olds) + len(drops) + len(invalids))) if pool.locals.contains(addr) { - localCounter.Dec(int64(len(olds) + len(drops) + len(invalids))) + 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 { @@ -1363,14 +1549,17 @@ func (pool *TxPool) demoteUnexecutables() { for _, tx := range gapped { hash := tx.Hash() log.Error("Demoting invalidated transaction", "hash", hash) - pool.enqueueTx(hash, tx) + + // Internal shuffle shouldn't touch the lookup set. + pool.enqueueTx(hash, tx, false, false) } - pendingCounter.Dec(int64(len(gapped))) + pendingGauge.Dec(int64(len(gapped))) + // This might happen in a reorg, so log it to the metering + blockReorgInvalidatedTx.Mark(int64(len(gapped))) } - // Delete the entire queue entry if it became empty. + // Delete the entire pending entry if it became empty. if list.Empty() { delete(pool.pending, addr) - delete(pool.beats, addr) } } } @@ -1457,8 +1646,8 @@ func (as *accountSet) merge(other *accountSet) { as.cache = nil } -// txLookup is used internally by TxPool to track transactions while allowing lookup without -// mutex contention. +// txLookup is used internally by TxPool to track transactions while allowing +// lookup without mutex contention. // // Note, although this type is properly protected against concurrent access, it // is **not** a type that should ever be mutated or even exposed outside of the @@ -1466,26 +1655,43 @@ func (as *accountSet) merge(other *accountSet) { // internal mechanisms. The sole purpose of the type is to permit out-of-bound // peeking into the pool in TxPool.Get without having to acquire the widely scoped // TxPool.mu mutex. +// +// This lookup set combines the notion of "local transactions", which is useful +// to build upper-level structure. type txLookup struct { - all map[common.Hash]*types.Transaction - lock sync.RWMutex + slots int + lock sync.RWMutex + locals map[common.Hash]*types.Transaction + remotes map[common.Hash]*types.Transaction } // newTxLookup returns a new txLookup structure. func newTxLookup() *txLookup { return &txLookup{ - all: make(map[common.Hash]*types.Transaction), + locals: make(map[common.Hash]*types.Transaction), + remotes: make(map[common.Hash]*types.Transaction), } } -// Range calls f on each key and value present in the map. -func (t *txLookup) Range(f func(hash common.Hash, tx *types.Transaction) bool) { +// Range calls f on each key and value present in the map. The callback passed +// should return the indicator whether the iteration needs to be continued. +// Callers need to specify which set (or both) to be iterated. +func (t *txLookup) Range(f func(hash common.Hash, tx *types.Transaction, local bool) bool, local bool, remote bool) { t.lock.RLock() defer t.lock.RUnlock() - for key, value := range t.all { - if !f(key, value) { - break + if local { + for key, value := range t.locals { + if !f(key, value, true) { + return + } + } + } + if remote { + for key, value := range t.remotes { + if !f(key, value, false) { + return + } } } } @@ -1495,23 +1701,73 @@ func (t *txLookup) Get(hash common.Hash) *types.Transaction { t.lock.RLock() defer t.lock.RUnlock() - return t.all[hash] + if tx := t.locals[hash]; tx != nil { + return tx + } + return t.remotes[hash] +} + +// GetLocal returns a transaction if it exists in the lookup, or nil if not found. +func (t *txLookup) GetLocal(hash common.Hash) *types.Transaction { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.locals[hash] +} + +// GetRemote returns a transaction if it exists in the lookup, or nil if not found. +func (t *txLookup) GetRemote(hash common.Hash) *types.Transaction { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.remotes[hash] } -// Count returns the current number of items in the lookup. +// Count returns the current number of transactions in the lookup. func (t *txLookup) Count() int { t.lock.RLock() defer t.lock.RUnlock() - return len(t.all) + return len(t.locals) + len(t.remotes) +} + +// LocalCount returns the current number of local transactions in the lookup. +func (t *txLookup) LocalCount() int { + t.lock.RLock() + defer t.lock.RUnlock() + + return len(t.locals) +} + +// RemoteCount returns the current number of remote transactions in the lookup. +func (t *txLookup) RemoteCount() int { + t.lock.RLock() + defer t.lock.RUnlock() + + return len(t.remotes) +} + +// Slots returns the current number of slots used in the lookup. +func (t *txLookup) Slots() int { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.slots } // Add adds a transaction to the lookup. -func (t *txLookup) Add(tx *types.Transaction) { +func (t *txLookup) Add(tx *types.Transaction, local bool) { t.lock.Lock() defer t.lock.Unlock() - t.all[tx.Hash()] = tx + t.slots += numSlots(tx) + slotsGauge.Update(int64(t.slots)) + + if local { + t.locals[tx.Hash()] = tx + } else { + t.remotes[tx.Hash()] = tx + } } // Remove removes a transaction from the lookup. @@ -1519,5 +1775,51 @@ func (t *txLookup) Remove(hash common.Hash) { t.lock.Lock() defer t.lock.Unlock() - delete(t.all, hash) + tx, ok := t.locals[hash] + if !ok { + tx, ok = t.remotes[hash] + } + if !ok { + log.Error("No transaction found to be deleted", "hash", hash) + return + } + t.slots -= numSlots(tx) + slotsGauge.Update(int64(t.slots)) + + delete(t.locals, hash) + delete(t.remotes, hash) +} + +// RemoteToLocals migrates the transactions belongs to the given locals to locals +// set. The assumption is held the locals set is thread-safe to be used. +func (t *txLookup) RemoteToLocals(locals *accountSet) int { + t.lock.Lock() + defer t.lock.Unlock() + + var migrated int + for hash, tx := range t.remotes { + if locals.containsTx(tx) { + t.locals[hash] = tx + delete(t.remotes, hash) + migrated += 1 + } + } + return migrated +} + +// RemotesBelowTip finds all remote transactions below the given tip threshold. +func (t *txLookup) RemotesBelowTip(threshold *big.Int) types.Transactions { + found := make(types.Transactions, 0, 128) + t.Range(func(hash common.Hash, tx *types.Transaction, local bool) bool { + if tx.GasTipCapIntCmp(threshold) < 0 { + found = append(found, tx) + } + return true + }, false, true) // Only iterate remotes + return found +} + +// numSlots calculates the number of slots needed for a single transaction. +func numSlots(tx *types.Transaction) int { + return int((tx.Size() + txSlotSize - 1) / txSlotSize) } diff --git a/core/tx_pool_test.go b/core/tx_pool_test.go index f7699702..2fd0f529 100644 --- a/core/tx_pool_test.go +++ b/core/tx_pool_test.go @@ -18,42 +18,54 @@ package core import ( "crypto/ecdsa" + "errors" "fmt" - "io/ioutil" "math/big" "math/rand" "os" + "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" + "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/event" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" ) -// testTxPoolConfig is a transaction pool configuration without stateful disk -// sideeffects used during testing. -var testTxPoolConfig TxPoolConfig +var ( + // testTxPoolConfig is a transaction pool configuration without stateful disk + // sideeffects used during testing. + testTxPoolConfig TxPoolConfig + + // eip1559Config is a chain config with EIP-1559 enabled at block 0. + eip1559Config *params.ChainConfig +) func init() { testTxPoolConfig = DefaultTxPoolConfig testTxPoolConfig.Journal = "" + + cpy := *params.TestChainConfig + eip1559Config = &cpy + eip1559Config.BerlinBlock = common.Big0 + eip1559Config.LondonBlock = common.Big0 } type testBlockChain struct { + gasLimit uint64 // must be first field for 64 bit alignment (atomic access) statedb *state.StateDB - gasLimit uint64 chainHeadFeed *event.Feed } func (bc *testBlockChain) CurrentBlock() *types.Block { return types.NewBlock(&types.Header{ - GasLimit: bc.gasLimit, - }, nil, nil, nil) + GasLimit: atomic.LoadUint64(&bc.gasLimit), + }, nil, nil, nil, trie.NewStackTrie(nil)) } func (bc *testBlockChain) GetBlock(hash common.Hash, number uint64) *types.Block { @@ -77,13 +89,42 @@ func pricedTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ec return tx } +func pricedDataTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ecdsa.PrivateKey, bytes uint64) *types.Transaction { + data := make([]byte, bytes) + rand.Read(data) + + tx, _ := types.SignTx(types.NewTransaction(nonce, common.Address{}, big.NewInt(0), gaslimit, gasprice, data), types.HomesteadSigner{}, key) + return tx +} + +func dynamicFeeTx(nonce uint64, gaslimit uint64, gasFee *big.Int, tip *big.Int, key *ecdsa.PrivateKey) *types.Transaction { + tx, _ := types.SignNewTx(key, types.LatestSignerForChainID(params.TestChainConfig.ChainID), &types.DynamicFeeTx{ + ChainID: params.TestChainConfig.ChainID, + Nonce: nonce, + GasTipCap: tip, + GasFeeCap: gasFee, + Gas: gaslimit, + To: &common.Address{}, + Value: big.NewInt(100), + Data: nil, + AccessList: nil, + }) + return tx +} + func setupTxPool() (*TxPool, *ecdsa.PrivateKey) { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + return setupTxPoolWithConfig(params.TestChainConfig) +} + +func setupTxPoolWithConfig(config *params.ChainConfig) (*TxPool, *ecdsa.PrivateKey) { + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{10000000, statedb, new(event.Feed)} key, _ := crypto.GenerateKey() - pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) + pool := NewTxPool(testTxPoolConfig, config, blockchain) + // wait for the pool to initialize + <-pool.initDoneCh return pool, key } @@ -97,8 +138,10 @@ func validateTxPoolInternals(pool *TxPool) error { if total := pool.all.Count(); total != pending+queued { return fmt.Errorf("total transaction count %d != %d pending + %d queued", total, pending, queued) } - if priced := pool.priced.items.Len() - pool.priced.stales; priced != pending+queued { - return fmt.Errorf("total priced transaction count %d != %d pending + %d queued", priced, pending, queued) + pool.priced.Reheap() + priced, remote := pool.priced.urgent.Len()+pool.priced.floating.Len(), pool.all.RemoteCount() + if priced != remote { + return fmt.Errorf("total priced transaction count %d != %d", priced, remote) } // Ensure the next nonce to assign is the correct one for addr, txs := range pool.pending { @@ -109,7 +152,7 @@ func validateTxPoolInternals(pool *TxPool) error { last = nonce } } - if nonce := pool.Nonce(addr); nonce != last+1 { + if nonce := pool.pendingNonces.get(addr); nonce != last+1 { return fmt.Errorf("pending nonce mismatch: have %v, want %v", nonce, last+1) } } @@ -163,7 +206,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(rawdb.NewMemoryDatabase())) + c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) // 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,13 +224,13 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { var ( key, _ = crypto.GenerateKey() address = crypto.PubkeyToAddress(key.PublicKey) - statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) trigger = false ) // setup pool with 2 transaction in it statedb.SetBalance(address, new(big.Int).SetUint64(params.Ether)) - blockchain := &testChain{&testBlockChain{statedb, 1000000000, new(event.Feed)}, address, &trigger} + blockchain := &testChain{&testBlockChain{1000000000, statedb, new(event.Feed)}, address, &trigger} tx0 := transaction(0, 100000, key) tx1 := transaction(1, 100000, key) @@ -211,16 +254,24 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { trigger = true <-pool.requestReset(nil, nil) - _, err := pool.Pending() - if err != nil { - t.Fatalf("Could not fetch pending transactions: %v", err) - } nonce = pool.Nonce(address) if nonce != 2 { t.Fatalf("Invalid nonce, want 2, got %d", nonce) } } +func testAddBalance(pool *TxPool, addr common.Address, amount *big.Int) { + pool.mu.Lock() + pool.currentState.AddBalance(addr, amount) + pool.mu.Unlock() +} + +func testSetNonce(pool *TxPool, addr common.Address, nonce uint64) { + pool.mu.Lock() + pool.currentState.SetNonce(addr, nonce) + pool.mu.Unlock() +} + func TestInvalidTransactions(t *testing.T) { t.Parallel() @@ -230,21 +281,21 @@ func TestInvalidTransactions(t *testing.T) { tx := transaction(0, 100, key) from, _ := deriveSender(tx) - pool.currentState.AddBalance(from, big.NewInt(1)) - if err := pool.AddRemote(tx); err != ErrInsufficientFunds { + testAddBalance(pool, from, big.NewInt(1)) + if err := pool.AddRemote(tx); !errors.Is(err, ErrInsufficientFunds) { t.Error("expected", ErrInsufficientFunds) } balance := new(big.Int).Add(tx.Value(), new(big.Int).Mul(new(big.Int).SetUint64(tx.Gas()), tx.GasPrice())) - pool.currentState.AddBalance(from, balance) - if err := pool.AddRemote(tx); err != ErrIntrinsicGas { + testAddBalance(pool, from, balance) + if err := pool.AddRemote(tx); !errors.Is(err, ErrIntrinsicGas) { t.Error("expected", ErrIntrinsicGas, "got", err) } - pool.currentState.SetNonce(from, 1) - pool.currentState.AddBalance(from, big.NewInt(0xffffffffffffff)) + testSetNonce(pool, from, 1) + testAddBalance(pool, from, big.NewInt(0xffffffffffffff)) tx = transaction(0, 100000, key) - if err := pool.AddRemote(tx); err != ErrNonceTooLow { + if err := pool.AddRemote(tx); !errors.Is(err, ErrNonceTooLow) { t.Error("expected", ErrNonceTooLow) } @@ -266,10 +317,10 @@ func TestTransactionQueue(t *testing.T) { tx := transaction(0, 100, key) from, _ := deriveSender(tx) - pool.currentState.AddBalance(from, big.NewInt(1000)) + testAddBalance(pool, from, big.NewInt(1000)) <-pool.requestReset(nil, nil) - pool.enqueueTx(tx.Hash(), tx) + pool.enqueueTx(tx.Hash(), tx, false, true) <-pool.requestPromoteExecutables(newAccountSet(pool.signer, from)) if len(pool.pending) != 1 { t.Error("expected valid txs to be 1 is", len(pool.pending)) @@ -277,8 +328,8 @@ func TestTransactionQueue(t *testing.T) { tx = transaction(1, 100, key) from, _ = deriveSender(tx) - pool.currentState.SetNonce(from, 2) - pool.enqueueTx(tx.Hash(), tx) + testSetNonce(pool, from, 2) + pool.enqueueTx(tx.Hash(), tx, false, true) <-pool.requestPromoteExecutables(newAccountSet(pool.signer, from)) if _, ok := pool.pending[from].txs.items[tx.Nonce()]; ok { @@ -299,12 +350,12 @@ func TestTransactionQueue2(t *testing.T) { tx2 := transaction(10, 100, key) tx3 := transaction(11, 100, key) from, _ := deriveSender(tx1) - pool.currentState.AddBalance(from, big.NewInt(1000)) + testAddBalance(pool, from, big.NewInt(1000)) pool.reset(nil, nil) - pool.enqueueTx(tx1.Hash(), tx1) - pool.enqueueTx(tx2.Hash(), tx2) - pool.enqueueTx(tx3.Hash(), tx3) + pool.enqueueTx(tx1.Hash(), tx1, false, true) + pool.enqueueTx(tx2.Hash(), tx2, false, true) + pool.enqueueTx(tx3.Hash(), tx3, false, true) pool.promoteExecutables([]common.Address{from}) if len(pool.pending) != 1 { @@ -323,12 +374,45 @@ func TestTransactionNegativeValue(t *testing.T) { tx, _ := types.SignTx(types.NewTransaction(0, common.Address{}, big.NewInt(-1), 100, big.NewInt(1), nil), types.HomesteadSigner{}, key) from, _ := deriveSender(tx) - pool.currentState.AddBalance(from, big.NewInt(1)) + testAddBalance(pool, from, big.NewInt(1)) if err := pool.AddRemote(tx); err != ErrNegativeValue { t.Error("expected", ErrNegativeValue, "got", err) } } +func TestTransactionTipAboveFeeCap(t *testing.T) { + t.Parallel() + + pool, key := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + + tx := dynamicFeeTx(0, 100, big.NewInt(1), big.NewInt(2), key) + + if err := pool.AddRemote(tx); err != ErrTipAboveFeeCap { + t.Error("expected", ErrTipAboveFeeCap, "got", err) + } +} + +func TestTransactionVeryHighValues(t *testing.T) { + t.Parallel() + + pool, key := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + + veryBigNumber := big.NewInt(1) + veryBigNumber.Lsh(veryBigNumber, 300) + + tx := dynamicFeeTx(0, 100, big.NewInt(1), veryBigNumber, key) + if err := pool.AddRemote(tx); err != ErrTipVeryHigh { + t.Error("expected", ErrTipVeryHigh, "got", err) + } + + tx2 := dynamicFeeTx(0, 100, veryBigNumber, big.NewInt(1), key) + if err := pool.AddRemote(tx2); err != ErrFeeCapVeryHigh { + t.Error("expected", ErrFeeCapVeryHigh, "got", err) + } +} + func TestTransactionChainFork(t *testing.T) { t.Parallel() @@ -337,10 +421,10 @@ func TestTransactionChainFork(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) statedb.AddBalance(addr, big.NewInt(100000000000000)) - pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} + pool.chain = &testBlockChain{1000000, statedb, new(event.Feed)} <-pool.requestReset(nil, nil) } resetState() @@ -366,10 +450,10 @@ func TestTransactionDoubleNonce(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) statedb.AddBalance(addr, big.NewInt(100000000000000)) - pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} + pool.chain = &testBlockChain{1000000, statedb, new(event.Feed)} <-pool.requestReset(nil, nil) } resetState() @@ -416,7 +500,7 @@ func TestTransactionMissingNonce(t *testing.T) { defer pool.Stop() addr := crypto.PubkeyToAddress(key.PublicKey) - pool.currentState.AddBalance(addr, big.NewInt(100000000000000)) + testAddBalance(pool, addr, big.NewInt(100000000000000)) tx := transaction(1, 100000, key) if _, err := pool.add(tx, false); err != nil { t.Error("didn't expect error", err) @@ -440,8 +524,8 @@ func TestTransactionNonceRecovery(t *testing.T) { defer pool.Stop() addr := crypto.PubkeyToAddress(key.PublicKey) - pool.currentState.SetNonce(addr, n) - pool.currentState.AddBalance(addr, big.NewInt(100000000000000)) + testSetNonce(pool, addr, n) + testAddBalance(pool, addr, big.NewInt(100000000000000)) <-pool.requestReset(nil, nil) tx := transaction(n, 100000, key) @@ -449,7 +533,7 @@ func TestTransactionNonceRecovery(t *testing.T) { t.Error(err) } // simulate some weird re-order of transactions and missing nonce(s) - pool.currentState.SetNonce(addr, n-1) + testSetNonce(pool, addr, 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) @@ -465,8 +549,8 @@ func TestTransactionDropping(t *testing.T) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000)) // Add some pending and some queued transactions var ( @@ -477,12 +561,21 @@ func TestTransactionDropping(t *testing.T) { tx11 = transaction(11, 200, key) tx12 = transaction(12, 300, key) ) + pool.all.Add(tx0, false) + pool.priced.Put(tx0, false) pool.promoteTx(account, tx0.Hash(), tx0) + + pool.all.Add(tx1, false) + pool.priced.Put(tx1, false) pool.promoteTx(account, tx1.Hash(), tx1) + + pool.all.Add(tx2, false) + pool.priced.Put(tx2, false) pool.promoteTx(account, tx2.Hash(), tx2) - pool.enqueueTx(tx10.Hash(), tx10) - pool.enqueueTx(tx11.Hash(), tx11) - pool.enqueueTx(tx12.Hash(), tx12) + + pool.enqueueTx(tx10.Hash(), tx10, false, true) + pool.enqueueTx(tx11.Hash(), tx11, false, true) + pool.enqueueTx(tx12.Hash(), tx12, false, true) // Check that pre and post validations leave the pool as is if pool.pending[account].Len() != 3 { @@ -505,7 +598,7 @@ func TestTransactionDropping(t *testing.T) { t.Errorf("total transaction mismatch: have %d, want %d", pool.all.Count(), 6) } // Reduce the balance of the account, and check that invalidated transactions are dropped - pool.currentState.AddBalance(account, big.NewInt(-650)) + testAddBalance(pool, account, big.NewInt(-650)) <-pool.requestReset(nil, nil) if _, ok := pool.pending[account].txs.items[tx0.Nonce()]; !ok { @@ -530,7 +623,7 @@ func TestTransactionDropping(t *testing.T) { t.Errorf("total transaction mismatch: have %d, want %d", pool.all.Count(), 4) } // Reduce the block gas limit, check that invalidated transactions are dropped - pool.chain.(*testBlockChain).gasLimit = 100 + atomic.StoreUint64(&pool.chain.(*testBlockChain).gasLimit, 100) <-pool.requestReset(nil, nil) if _, ok := pool.pending[account].txs.items[tx0.Nonce()]; !ok { @@ -557,8 +650,8 @@ func TestTransactionPostponing(t *testing.T) { t.Parallel() // Create the pool to test the postponing with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) defer pool.Stop() @@ -571,12 +664,11 @@ func TestTransactionPostponing(t *testing.T) { keys[i], _ = crypto.GenerateKey() accs[i] = crypto.PubkeyToAddress(keys[i].PublicKey) - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(50100)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(50100)) } // Add a batch consecutive pending transactions for validation txs := []*types.Transaction{} for i, key := range keys { - for j := 0; j < 100; j++ { var tx *types.Transaction if (i+j)%2 == 0 { @@ -614,7 +706,7 @@ func TestTransactionPostponing(t *testing.T) { } // Reduce the balance of the account, and check that transactions are reorganised for _, addr := range accs { - pool.currentState.AddBalance(addr, big.NewInt(-1)) + testAddBalance(pool, addr, big.NewInt(-1)) } <-pool.requestReset(nil, nil) @@ -674,8 +766,8 @@ func TestTransactionGapFilling(t *testing.T) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) // Keep track of transaction events to ensure all executables get announced events := make(chan NewTxsEvent, testTxPoolConfig.AccountQueue+5) @@ -728,8 +820,8 @@ func TestTransactionQueueAccountLimiting(t *testing.T) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) // Keep queuing up transactions and make sure all above a limit are dropped for i := uint64(1); i <= testTxPoolConfig.AccountQueue+5; i++ { @@ -770,8 +862,8 @@ 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(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.NoLocals = nolocals @@ -784,7 +876,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { keys := make([]*ecdsa.PrivateKey, 5) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } local := keys[len(keys)-1] @@ -849,17 +941,21 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { // // This logic should not hold for local transactions, unless the local tracking // mechanism is disabled. -func TestTransactionQueueTimeLimiting(t *testing.T) { testTransactionQueueTimeLimiting(t, false) } -func TestTransactionQueueTimeLimitingNoLocals(t *testing.T) { testTransactionQueueTimeLimiting(t, true) } +func TestTransactionQueueTimeLimiting(t *testing.T) { + testTransactionQueueTimeLimiting(t, false) +} +func TestTransactionQueueTimeLimitingNoLocals(t *testing.T) { + testTransactionQueueTimeLimiting(t, true) +} func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { // Reduce the eviction interval to a testable amount defer func(old time.Duration) { evictionInterval = old }(evictionInterval) - evictionInterval = time.Second + evictionInterval = time.Millisecond * 100 // Create the pool to test the non-expiration enforcement - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.Lifetime = time.Second @@ -872,8 +968,8 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { local, _ := crypto.GenerateKey() remote, _ := crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(local.PublicKey), big.NewInt(1000000000)) - pool.currentState.AddBalance(crypto.PubkeyToAddress(remote.PublicKey), big.NewInt(1000000000)) + testAddBalance(pool, crypto.PubkeyToAddress(local.PublicKey), big.NewInt(1000000000)) + testAddBalance(pool, crypto.PubkeyToAddress(remote.PublicKey), big.NewInt(1000000000)) // Add the two transactions and ensure they both are queued up if err := pool.AddLocal(pricedTransaction(1, 100000, big.NewInt(1), local)); err != nil { @@ -892,6 +988,22 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { if err := validateTxPoolInternals(pool); err != nil { t.Fatalf("pool internal state corrupted: %v", err) } + + // Allow the eviction interval to run + time.Sleep(2 * evictionInterval) + + // Transactions should not be evicted from the queue yet since lifetime duration has not passed + pending, queued = pool.Stats() + if pending != 0 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 0) + } + if queued != 2 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 2) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // Wait a bit for eviction to run and clean up any leftovers, and ensure only the local remains time.Sleep(2 * config.Lifetime) @@ -911,6 +1023,72 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { if err := validateTxPoolInternals(pool); err != nil { t.Fatalf("pool internal state corrupted: %v", err) } + + // remove current transactions and increase nonce to prepare for a reset and cleanup + statedb.SetNonce(crypto.PubkeyToAddress(remote.PublicKey), 2) + statedb.SetNonce(crypto.PubkeyToAddress(local.PublicKey), 2) + <-pool.requestReset(nil, nil) + + // make sure queue, pending are cleared + pending, queued = pool.Stats() + if pending != 0 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 0) + } + 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) + } + + // Queue gapped transactions + if err := pool.AddLocal(pricedTransaction(4, 100000, big.NewInt(1), local)); err != nil { + t.Fatalf("failed to add remote transaction: %v", err) + } + if err := pool.addRemoteSync(pricedTransaction(4, 100000, big.NewInt(1), remote)); err != nil { + t.Fatalf("failed to add remote transaction: %v", err) + } + time.Sleep(5 * evictionInterval) // A half lifetime pass + + // Queue executable transactions, the life cycle should be restarted. + if err := pool.AddLocal(pricedTransaction(2, 100000, big.NewInt(1), local)); err != nil { + t.Fatalf("failed to add remote transaction: %v", err) + } + if err := pool.addRemoteSync(pricedTransaction(2, 100000, big.NewInt(1), remote)); err != nil { + t.Fatalf("failed to add remote transaction: %v", err) + } + time.Sleep(6 * evictionInterval) + + // All gapped transactions shouldn't be kicked out + pending, queued = pool.Stats() + if pending != 2 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2) + } + if queued != 2 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 3) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + + // The whole life time pass after last promotion, kick out stale transactions + time.Sleep(2 * config.Lifetime) + pending, queued = pool.Stats() + if pending != 2 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2) + } + if nolocals { + if queued != 0 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 0) + } + } else { + if queued != 1 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 1) + } + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } } // Tests that even if the transaction count belonging to a single account goes @@ -923,8 +1101,8 @@ func TestTransactionPendingLimiting(t *testing.T) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) // Keep track of transaction events to ensure all executables get announced events := make(chan NewTxsEvent, testTxPoolConfig.AccountQueue+5) @@ -961,8 +1139,8 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.GlobalSlots = config.AccountSlots * 10 @@ -974,7 +1152,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 5) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Generate and queue a batch of transactions nonces := make(map[common.Address]uint64) @@ -1002,13 +1180,69 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { } } +// Test the limit on transaction size is enforced correctly. +// This test verifies every transaction having allowed size +// is added to the pool, and longer transactions are rejected. +func TestTransactionAllowedTxSize(t *testing.T) { + t.Parallel() + + // Create a test account and fund it + pool, key := setupTxPool() + defer pool.Stop() + + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000000)) + + // Compute maximal data size for transactions (lower bound). + // + // It is assumed the fields in the transaction (except of the data) are: + // - nonce <= 32 bytes + // - gasPrice <= 32 bytes + // - gasLimit <= 32 bytes + // - recipient == 20 bytes + // - value <= 32 bytes + // - signature == 65 bytes + // All those fields are summed up to at most 213 bytes. + baseSize := uint64(213) + dataSize := txMaxSize - baseSize + + // Try adding a transaction with maximal allowed size + tx := pricedDataTransaction(0, pool.currentMaxGas, big.NewInt(1), key, dataSize) + if err := pool.addRemoteSync(tx); err != nil { + t.Fatalf("failed to add transaction of size %d, close to maximal: %v", int(tx.Size()), err) + } + // Try adding a transaction with random allowed size + if err := pool.addRemoteSync(pricedDataTransaction(1, pool.currentMaxGas, big.NewInt(1), key, uint64(rand.Intn(int(dataSize))))); err != nil { + t.Fatalf("failed to add transaction of random allowed size: %v", err) + } + // Try adding a transaction of minimal not allowed size + if err := pool.addRemoteSync(pricedDataTransaction(2, pool.currentMaxGas, big.NewInt(1), key, txMaxSize)); err == nil { + t.Fatalf("expected rejection on slightly oversize transaction") + } + // Try adding a transaction of random not allowed size + if err := pool.addRemoteSync(pricedDataTransaction(2, pool.currentMaxGas, big.NewInt(1), key, dataSize+1+uint64(rand.Intn(10*txMaxSize)))); err == nil { + t.Fatalf("expected rejection on oversize transaction") + } + // Run some sanity checks on the pool internals + pending, queued := pool.Stats() + if pending != 2 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2) + } + 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 if transactions start being capped, transactions are also removed from 'all' func TestTransactionCapClearsFromAll(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.AccountSlots = 2 @@ -1021,7 +1255,7 @@ func TestTransactionCapClearsFromAll(t *testing.T) { // Create a number of test accounts and fund them key, _ := crypto.GenerateKey() addr := crypto.PubkeyToAddress(key.PublicKey) - pool.currentState.AddBalance(addr, big.NewInt(1000000)) + testAddBalance(pool, addr, big.NewInt(1000000)) txs := types.Transactions{} for j := 0; j < int(config.GlobalSlots)*2; j++ { @@ -1041,8 +1275,8 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.GlobalSlots = 1 @@ -1054,7 +1288,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 5) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Generate and queue a batch of transactions nonces := make(map[common.Address]uint64) @@ -1089,8 +1323,8 @@ func TestTransactionPoolRepricing(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)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) defer pool.Stop() @@ -1104,7 +1338,7 @@ func TestTransactionPoolRepricing(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 4) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Generate and queue a batch of transactions, both pending and queued txs := types.Transactions{} @@ -1204,23 +1438,150 @@ func TestTransactionPoolRepricing(t *testing.T) { } } +// Tests that setting the transaction pool gas price to a higher value correctly +// discards everything cheaper (legacy & dynamic fee) than that and moves any +// gapped transactions back from the pending pool to the queue. +// +// Note, local transactions are never allowed to be dropped. +func TestTransactionPoolRepricingDynamicFee(t *testing.T) { + t.Parallel() + + // Create the pool to test the pricing enforcement with + pool, _ := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + + // Keep track of transaction events to ensure all executables get announced + events := make(chan NewTxsEvent, 32) + sub := pool.txFeed.Subscribe(events) + defer sub.Unsubscribe() + + // Create a number of test accounts and fund them + keys := make([]*ecdsa.PrivateKey, 4) + for i := 0; i < len(keys); i++ { + keys[i], _ = crypto.GenerateKey() + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + } + // Generate and queue a batch of transactions, both pending and queued + txs := types.Transactions{} + + txs = append(txs, pricedTransaction(0, 100000, big.NewInt(2), keys[0])) + txs = append(txs, pricedTransaction(1, 100000, big.NewInt(1), keys[0])) + txs = append(txs, pricedTransaction(2, 100000, big.NewInt(2), keys[0])) + + txs = append(txs, dynamicFeeTx(0, 100000, big.NewInt(2), big.NewInt(1), keys[1])) + txs = append(txs, dynamicFeeTx(1, 100000, big.NewInt(3), big.NewInt(2), keys[1])) + txs = append(txs, dynamicFeeTx(2, 100000, big.NewInt(3), big.NewInt(2), keys[1])) + + txs = append(txs, dynamicFeeTx(1, 100000, big.NewInt(2), big.NewInt(2), keys[2])) + txs = append(txs, dynamicFeeTx(2, 100000, big.NewInt(1), big.NewInt(1), keys[2])) + txs = append(txs, dynamicFeeTx(3, 100000, big.NewInt(2), big.NewInt(2), keys[2])) + + ltx := dynamicFeeTx(0, 100000, big.NewInt(2), big.NewInt(1), keys[3]) + + // Import the batch and that both pending and queued transactions match up + pool.AddRemotesSync(txs) + pool.AddLocal(ltx) + + pending, queued := pool.Stats() + if pending != 7 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 7) + } + if queued != 3 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 3) + } + if err := validateEvents(events, 7); err != nil { + t.Fatalf("original event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // Reprice the pool and check that underpriced transactions get dropped + pool.SetGasPrice(big.NewInt(2)) + + pending, queued = pool.Stats() + if pending != 2 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2) + } + if queued != 5 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 5) + } + if err := validateEvents(events, 0); err != nil { + t.Fatalf("reprice event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // Check that we can't add the old transactions back + tx := pricedTransaction(1, 100000, big.NewInt(1), keys[0]) + if err := pool.AddRemote(tx); err != ErrUnderpriced { + t.Fatalf("adding underpriced pending transaction error mismatch: have %v, want %v", err, ErrUnderpriced) + } + tx = dynamicFeeTx(0, 100000, big.NewInt(2), big.NewInt(1), keys[1]) + if err := pool.AddRemote(tx); err != ErrUnderpriced { + t.Fatalf("adding underpriced pending transaction error mismatch: have %v, want %v", err, ErrUnderpriced) + } + tx = dynamicFeeTx(2, 100000, big.NewInt(1), big.NewInt(1), keys[2]) + if err := pool.AddRemote(tx); err != ErrUnderpriced { + t.Fatalf("adding underpriced queued transaction error mismatch: have %v, want %v", err, ErrUnderpriced) + } + if err := validateEvents(events, 0); err != nil { + t.Fatalf("post-reprice event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // However we can add local underpriced transactions + tx = dynamicFeeTx(1, 100000, big.NewInt(1), big.NewInt(1), keys[3]) + if err := pool.AddLocal(tx); err != nil { + t.Fatalf("failed to add underpriced local transaction: %v", err) + } + if pending, _ = pool.Stats(); pending != 3 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 3) + } + if err := validateEvents(events, 1); err != nil { + t.Fatalf("post-reprice local event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // And we can fill gaps with properly priced transactions + tx = pricedTransaction(1, 100000, big.NewInt(2), keys[0]) + if err := pool.AddRemote(tx); err != nil { + t.Fatalf("failed to add pending transaction: %v", err) + } + tx = dynamicFeeTx(0, 100000, big.NewInt(3), big.NewInt(2), keys[1]) + if err := pool.AddRemote(tx); err != nil { + t.Fatalf("failed to add pending transaction: %v", err) + } + tx = dynamicFeeTx(2, 100000, big.NewInt(2), big.NewInt(2), keys[2]) + if err := pool.AddRemote(tx); err != nil { + t.Fatalf("failed to add queued transaction: %v", err) + } + if err := validateEvents(events, 5); err != nil { + t.Fatalf("post-reprice event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } +} + // Tests that setting the transaction pool gas price to a higher value does not -// remove local transactions. +// remove local transactions (legacy & dynamic fee). func TestTransactionPoolRepricingKeepsLocals(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)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} - pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) + pool := NewTxPool(testTxPoolConfig, eip1559Config, blockchain) defer pool.Stop() // Create a number of test accounts and fund them keys := make([]*ecdsa.PrivateKey, 3) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000*1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000*1000000)) } // Create transaction (both pending and queued) with a linearly growing gasprice for i := uint64(0); i < 500; i++ { @@ -1234,9 +1595,20 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) { if err := pool.AddLocal(queuedTx); err != nil { t.Fatal(err) } + + // Add pending dynamic fee transaction. + pendingTx = dynamicFeeTx(i, 100000, big.NewInt(int64(i)+1), big.NewInt(int64(i)), keys[1]) + if err := pool.AddLocal(pendingTx); err != nil { + t.Fatal(err) + } + // Add queued dynamic fee transaction. + queuedTx = dynamicFeeTx(i+501, 100000, big.NewInt(int64(i)+1), big.NewInt(int64(i)), keys[1]) + if err := pool.AddLocal(queuedTx); err != nil { + t.Fatal(err) + } } pending, queued := pool.Stats() - expPending, expQueued := 500, 500 + expPending, expQueued := 1000, 1000 validate := func() { pending, queued = pool.Stats() if pending != expPending { @@ -1272,8 +1644,8 @@ func TestTransactionPoolUnderpricing(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)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.GlobalSlots = 2 @@ -1291,7 +1663,7 @@ func TestTransactionPoolUnderpricing(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 4) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Generate and queue a batch of transactions, both pending and queued txs := types.Transactions{} @@ -1378,8 +1750,8 @@ func TestTransactionPoolStableUnderpricing(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)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.GlobalSlots = 128 @@ -1397,7 +1769,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 2) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Fill up the entire queue with the same transaction price points txs := types.Transactions{} @@ -1438,14 +1810,246 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { } } +// Tests that when the pool reaches its global transaction limit, underpriced +// transactions (legacy & dynamic fee) are gradually shifted out for more +// expensive ones and any gapped pending transactions are moved into the queue. +// +// Note, local transactions are never allowed to be dropped. +func TestTransactionPoolUnderpricingDynamicFee(t *testing.T) { + t.Parallel() + + pool, _ := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + + pool.config.GlobalSlots = 2 + pool.config.GlobalQueue = 2 + + // Keep track of transaction events to ensure all executables get announced + events := make(chan NewTxsEvent, 32) + sub := pool.txFeed.Subscribe(events) + defer sub.Unsubscribe() + + // Create a number of test accounts and fund them + keys := make([]*ecdsa.PrivateKey, 4) + for i := 0; i < len(keys); i++ { + keys[i], _ = crypto.GenerateKey() + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + } + + // Generate and queue a batch of transactions, both pending and queued + txs := types.Transactions{} + + txs = append(txs, dynamicFeeTx(0, 100000, big.NewInt(3), big.NewInt(2), keys[0])) + txs = append(txs, pricedTransaction(1, 100000, big.NewInt(2), keys[0])) + txs = append(txs, dynamicFeeTx(1, 100000, big.NewInt(2), big.NewInt(1), keys[1])) + + ltx := dynamicFeeTx(0, 100000, big.NewInt(2), big.NewInt(1), keys[2]) + + // Import the batch and that both pending and queued transactions match up + pool.AddRemotes(txs) // Pend K0:0, K0:1; Que K1:1 + pool.AddLocal(ltx) // +K2:0 => Pend K0:0, K0:1, K2:0; Que K1:1 + + pending, queued := pool.Stats() + if pending != 3 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 3) + } + if queued != 1 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 1) + } + if err := validateEvents(events, 3); err != nil { + t.Fatalf("original event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + + // Ensure that adding an underpriced transaction fails + tx := dynamicFeeTx(0, 100000, big.NewInt(2), big.NewInt(1), keys[1]) + if err := pool.AddRemote(tx); err != ErrUnderpriced { // Pend K0:0, K0:1, K2:0; Que K1:1 + t.Fatalf("adding underpriced pending transaction error mismatch: have %v, want %v", err, ErrUnderpriced) + } + + // Ensure that adding high priced transactions drops cheap ones, but not own + tx = pricedTransaction(0, 100000, big.NewInt(2), keys[1]) + if err := pool.AddRemote(tx); err != nil { // +K1:0, -K1:1 => Pend K0:0, K0:1, K1:0, K2:0; Que - + t.Fatalf("failed to add well priced transaction: %v", err) + } + + tx = pricedTransaction(2, 100000, big.NewInt(3), keys[1]) + if err := pool.AddRemote(tx); err != nil { // +K1:2, -K0:1 => Pend K0:0 K1:0, K2:0; Que K1:2 + t.Fatalf("failed to add well priced transaction: %v", err) + } + tx = dynamicFeeTx(3, 100000, big.NewInt(4), big.NewInt(1), keys[1]) + if err := pool.AddRemote(tx); err != nil { // +K1:3, -K1:0 => Pend K0:0 K2:0; Que K1:2 K1:3 + t.Fatalf("failed to add well priced transaction: %v", err) + } + pending, queued = pool.Stats() + if pending != 2 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2) + } + if queued != 2 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 2) + } + if err := validateEvents(events, 1); err != nil { + t.Fatalf("additional event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } + // Ensure that adding local transactions can push out even higher priced ones + ltx = dynamicFeeTx(1, 100000, big.NewInt(0), big.NewInt(0), keys[2]) + if err := pool.AddLocal(ltx); err != nil { + t.Fatalf("failed to append underpriced local transaction: %v", err) + } + ltx = dynamicFeeTx(0, 100000, big.NewInt(0), big.NewInt(0), keys[3]) + if err := pool.AddLocal(ltx); err != nil { + t.Fatalf("failed to add new underpriced local transaction: %v", err) + } + pending, queued = pool.Stats() + if pending != 3 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 3) + } + if queued != 1 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 1) + } + if err := validateEvents(events, 2); err != nil { + t.Fatalf("local event firing failed: %v", err) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } +} + +// Tests whether highest fee cap transaction is retained after a batch of high effective +// tip transactions are added and vice versa +func TestDualHeapEviction(t *testing.T) { + t.Parallel() + + pool, _ := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + + pool.config.GlobalSlots = 10 + pool.config.GlobalQueue = 10 + + var ( + highTip, highCap *types.Transaction + baseFee int + ) + + check := func(tx *types.Transaction, name string) { + if pool.all.GetRemote(tx.Hash()) == nil { + t.Fatalf("highest %s transaction evicted from the pool", name) + } + } + + add := func(urgent bool) { + for i := 0; i < 20; i++ { + var tx *types.Transaction + // Create a test accounts and fund it + key, _ := crypto.GenerateKey() + testAddBalance(pool, crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000000000)) + if urgent { + tx = dynamicFeeTx(0, 100000, big.NewInt(int64(baseFee+1+i)), big.NewInt(int64(1+i)), key) + highTip = tx + } else { + tx = dynamicFeeTx(0, 100000, big.NewInt(int64(baseFee+200+i)), big.NewInt(1), key) + highCap = tx + } + pool.AddRemotesSync([]*types.Transaction{tx}) + } + pending, queued := pool.Stats() + if pending+queued != 20 { + t.Fatalf("transaction count mismatch: have %d, want %d", pending+queued, 10) + } + } + + add(false) + for baseFee = 0; baseFee <= 1000; baseFee += 100 { + pool.priced.SetBaseFee(big.NewInt(int64(baseFee))) + add(true) + check(highCap, "fee cap") + add(false) + check(highTip, "effective tip") + } + + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } +} + +// 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()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} + + pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) + defer pool.Stop() + + // Create a test account to add transactions with + key, _ := crypto.GenerateKey() + testAddBalance(pool, 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(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) defer pool.Stop() @@ -1457,7 +2061,7 @@ func TestTransactionReplacement(t *testing.T) { // Create a test account to add transactions with key, _ := crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000000)) + testAddBalance(pool, crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000000)) // Add pending transactions, ensuring the minimum price bump is enforced for replacement (for ultra low prices too) price := int64(100) @@ -1518,6 +2122,116 @@ func TestTransactionReplacement(t *testing.T) { } } +// Tests that the pool rejects replacement dynamic fee transactions that don't +// meet the minimum price bump required. +func TestTransactionReplacementDynamicFee(t *testing.T) { + t.Parallel() + + // Create the pool to test the pricing enforcement with + pool, key := setupTxPoolWithConfig(eip1559Config) + defer pool.Stop() + testAddBalance(pool, crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000000)) + + // Keep track of transaction events to ensure all executables get announced + events := make(chan NewTxsEvent, 32) + sub := pool.txFeed.Subscribe(events) + defer sub.Unsubscribe() + + // Add pending transactions, ensuring the minimum price bump is enforced for replacement (for ultra low prices too) + gasFeeCap := int64(100) + feeCapThreshold := (gasFeeCap * (100 + int64(testTxPoolConfig.PriceBump))) / 100 + gasTipCap := int64(60) + tipThreshold := (gasTipCap * (100 + int64(testTxPoolConfig.PriceBump))) / 100 + + // Run the following identical checks for both the pending and queue pools: + // 1. Send initial tx => accept + // 2. Don't bump tip or fee cap => discard + // 3. Bump both more than min => accept + // 4. Check events match expected (2 new executable txs during pending, 0 during queue) + // 5. Send new tx with larger tip and gasFeeCap => accept + // 6. Bump tip max allowed so it's still underpriced => discard + // 7. Bump fee cap max allowed so it's still underpriced => discard + // 8. Bump tip min for acceptance => discard + // 9. Bump feecap min for acceptance => discard + // 10. Bump feecap and tip min for acceptance => accept + // 11. Check events match expected (2 new executable txs during pending, 0 during queue) + stages := []string{"pending", "queued"} + for _, stage := range stages { + // Since state is empty, 0 nonce txs are "executable" and can go + // into pending immediately. 2 nonce txs are "happed + nonce := uint64(0) + if stage == "queued" { + nonce = 2 + } + + // 1. Send initial tx => accept + tx := dynamicFeeTx(nonce, 100000, big.NewInt(2), big.NewInt(1), key) + if err := pool.addRemoteSync(tx); err != nil { + t.Fatalf("failed to add original cheap %s transaction: %v", stage, err) + } + // 2. Don't bump tip or feecap => discard + tx = dynamicFeeTx(nonce, 100001, big.NewInt(2), big.NewInt(1), key) + if err := pool.AddRemote(tx); err != ErrReplaceUnderpriced { + t.Fatalf("original cheap %s transaction replacement error mismatch: have %v, want %v", stage, err, ErrReplaceUnderpriced) + } + // 3. Bump both more than min => accept + tx = dynamicFeeTx(nonce, 100000, big.NewInt(3), big.NewInt(2), key) + if err := pool.AddRemote(tx); err != nil { + t.Fatalf("failed to replace original cheap %s transaction: %v", stage, err) + } + // 4. Check events match expected (2 new executable txs during pending, 0 during queue) + count := 2 + if stage == "queued" { + count = 0 + } + if err := validateEvents(events, count); err != nil { + t.Fatalf("cheap %s replacement event firing failed: %v", stage, err) + } + // 5. Send new tx with larger tip and feeCap => accept + tx = dynamicFeeTx(nonce, 100000, big.NewInt(gasFeeCap), big.NewInt(gasTipCap), key) + if err := pool.addRemoteSync(tx); err != nil { + t.Fatalf("failed to add original proper %s transaction: %v", stage, err) + } + // 6. Bump tip max allowed so it's still underpriced => discard + tx = dynamicFeeTx(nonce, 100000, big.NewInt(gasFeeCap), big.NewInt(tipThreshold-1), key) + if err := pool.AddRemote(tx); err != ErrReplaceUnderpriced { + t.Fatalf("original proper %s transaction replacement error mismatch: have %v, want %v", stage, err, ErrReplaceUnderpriced) + } + // 7. Bump fee cap max allowed so it's still underpriced => discard + tx = dynamicFeeTx(nonce, 100000, big.NewInt(feeCapThreshold-1), big.NewInt(gasTipCap), key) + if err := pool.AddRemote(tx); err != ErrReplaceUnderpriced { + t.Fatalf("original proper %s transaction replacement error mismatch: have %v, want %v", stage, err, ErrReplaceUnderpriced) + } + // 8. Bump tip min for acceptance => accept + tx = dynamicFeeTx(nonce, 100000, big.NewInt(gasFeeCap), big.NewInt(tipThreshold), key) + if err := pool.AddRemote(tx); err != ErrReplaceUnderpriced { + t.Fatalf("original proper %s transaction replacement error mismatch: have %v, want %v", stage, err, ErrReplaceUnderpriced) + } + // 9. Bump fee cap min for acceptance => accept + tx = dynamicFeeTx(nonce, 100000, big.NewInt(feeCapThreshold), big.NewInt(gasTipCap), key) + if err := pool.AddRemote(tx); err != ErrReplaceUnderpriced { + t.Fatalf("original proper %s transaction replacement error mismatch: have %v, want %v", stage, err, ErrReplaceUnderpriced) + } + // 10. Check events match expected (3 new executable txs during pending, 0 during queue) + tx = dynamicFeeTx(nonce, 100000, big.NewInt(feeCapThreshold), big.NewInt(tipThreshold), key) + if err := pool.AddRemote(tx); err != nil { + t.Fatalf("failed to replace original cheap %s transaction: %v", stage, err) + } + // 11. Check events match expected (3 new executable txs during pending, 0 during queue) + count = 2 + if stage == "queued" { + count = 0 + } + if err := validateEvents(events, count); err != nil { + t.Fatalf("replacement %s event firing failed: %v", stage, err) + } + } + + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } +} + // Tests that local transactions are journaled to disk, but remote transactions // get discarded between restarts. func TestTransactionJournaling(t *testing.T) { testTransactionJournaling(t, false) } @@ -1527,7 +2241,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { t.Parallel() // Create a temporary file for the journal - file, err := ioutil.TempFile("", "") + file, err := os.CreateTemp("", "") if err != nil { t.Fatalf("failed to create temporary journal: %v", err) } @@ -1539,8 +2253,8 @@ 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(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} config := testTxPoolConfig config.NoLocals = nolocals @@ -1553,8 +2267,8 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { local, _ := crypto.GenerateKey() remote, _ := crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(local.PublicKey), big.NewInt(1000000000)) - pool.currentState.AddBalance(crypto.PubkeyToAddress(remote.PublicKey), big.NewInt(1000000000)) + testAddBalance(pool, crypto.PubkeyToAddress(local.PublicKey), big.NewInt(1000000000)) + testAddBalance(pool, crypto.PubkeyToAddress(remote.PublicKey), big.NewInt(1000000000)) // Add three local and a remote transactions and ensure they are queued up if err := pool.AddLocal(pricedTransaction(0, 100000, big.NewInt(1), local)); err != nil { @@ -1582,7 +2296,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { // Terminate the old pool, bump the local nonce, create a new pool and ensure relevant transaction survive pool.Stop() statedb.SetNonce(crypto.PubkeyToAddress(local.PublicKey), 1) - blockchain = &testBlockChain{statedb, 1000000, new(event.Feed)} + blockchain = &testBlockChain{1000000, statedb, new(event.Feed)} pool = NewTxPool(config, params.TestChainConfig, blockchain) @@ -1609,7 +2323,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { pool.Stop() statedb.SetNonce(crypto.PubkeyToAddress(local.PublicKey), 1) - blockchain = &testBlockChain{statedb, 1000000, new(event.Feed)} + blockchain = &testBlockChain{1000000, statedb, new(event.Feed)} pool = NewTxPool(config, params.TestChainConfig, blockchain) pending, queued = pool.Stats() @@ -1637,8 +2351,8 @@ func TestTransactionStatusCheck(t *testing.T) { t.Parallel() // Create the pool to test the status retrievals with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) - blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + blockchain := &testBlockChain{1000000, statedb, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) defer pool.Stop() @@ -1647,7 +2361,7 @@ func TestTransactionStatusCheck(t *testing.T) { keys := make([]*ecdsa.PrivateKey, 3) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() - pool.currentState.AddBalance(crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) + testAddBalance(pool, crypto.PubkeyToAddress(keys[i].PublicKey), big.NewInt(1000000)) } // Generate and queue a batch of transactions, both pending and queued txs := types.Transactions{} @@ -1687,6 +2401,24 @@ func TestTransactionStatusCheck(t *testing.T) { } } +// Test the transaction slots consumption is computed correctly +func TestTransactionSlotCount(t *testing.T) { + t.Parallel() + + key, _ := crypto.GenerateKey() + + // Check that an empty transaction consumes a single slot + smallTx := pricedDataTransaction(0, 0, big.NewInt(0), key, 0) + if slots := numSlots(smallTx); slots != 1 { + t.Fatalf("small transactions slot count mismatch: have %d want %d", slots, 1) + } + // Check that a large transaction consumes the correct number of slots + bigTx := pricedDataTransaction(0, 0, big.NewInt(0), key, uint64(10*txSlotSize)) + if slots := numSlots(bigTx); slots != 11 { + t.Fatalf("big transactions slot count mismatch: have %d want %d", slots, 11) + } +} + // Benchmarks the speed of validating the contents of the pending queue of the // transaction pool. func BenchmarkPendingDemotion100(b *testing.B) { benchmarkPendingDemotion(b, 100) } @@ -1698,8 +2430,8 @@ func benchmarkPendingDemotion(b *testing.B, size int) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) for i := 0; i < size; i++ { tx := transaction(uint64(i), 100000, key) @@ -1723,12 +2455,12 @@ func benchmarkFuturePromotion(b *testing.B, size int) { pool, key := setupTxPool() defer pool.Stop() - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) for i := 0; i < size; i++ { tx := transaction(uint64(1+i), 100000, key) - pool.enqueueTx(tx.Hash(), tx) + pool.enqueueTx(tx.Hash(), tx, false, true) } // Benchmark the speed of pool validation b.ResetTimer() @@ -1738,17 +2470,21 @@ func benchmarkFuturePromotion(b *testing.B, size int) { } // Benchmarks the speed of batched transaction insertion. -func BenchmarkPoolBatchInsert100(b *testing.B) { benchmarkPoolBatchInsert(b, 100) } -func BenchmarkPoolBatchInsert1000(b *testing.B) { benchmarkPoolBatchInsert(b, 1000) } -func BenchmarkPoolBatchInsert10000(b *testing.B) { benchmarkPoolBatchInsert(b, 10000) } +func BenchmarkPoolBatchInsert100(b *testing.B) { benchmarkPoolBatchInsert(b, 100, false) } +func BenchmarkPoolBatchInsert1000(b *testing.B) { benchmarkPoolBatchInsert(b, 1000, false) } +func BenchmarkPoolBatchInsert10000(b *testing.B) { benchmarkPoolBatchInsert(b, 10000, false) } + +func BenchmarkPoolBatchLocalInsert100(b *testing.B) { benchmarkPoolBatchInsert(b, 100, true) } +func BenchmarkPoolBatchLocalInsert1000(b *testing.B) { benchmarkPoolBatchInsert(b, 1000, true) } +func BenchmarkPoolBatchLocalInsert10000(b *testing.B) { benchmarkPoolBatchInsert(b, 10000, true) } -func benchmarkPoolBatchInsert(b *testing.B, size int) { +func benchmarkPoolBatchInsert(b *testing.B, size int, local bool) { // 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)) + account := crypto.PubkeyToAddress(key.PublicKey) + testAddBalance(pool, account, big.NewInt(1000000)) batches := make([]types.Transactions, b.N) for i := 0; i < b.N; i++ { @@ -1760,6 +2496,66 @@ func benchmarkPoolBatchInsert(b *testing.B, size int) { // Benchmark importing the transactions into the queue b.ResetTimer() for _, batch := range batches { - pool.AddRemotes(batch) + if local { + pool.AddLocals(batch) + } else { + pool.AddRemotes(batch) + } + } +} + +func BenchmarkInsertRemoteWithAllLocals(b *testing.B) { + // Allocate keys for testing + key, _ := crypto.GenerateKey() + account := crypto.PubkeyToAddress(key.PublicKey) + + remoteKey, _ := crypto.GenerateKey() + remoteAddr := crypto.PubkeyToAddress(remoteKey.PublicKey) + + locals := make([]*types.Transaction, 4096+1024) // Occupy all slots + for i := 0; i < len(locals); i++ { + locals[i] = transaction(uint64(i), 100000, key) + } + remotes := make([]*types.Transaction, 1000) + for i := 0; i < len(remotes); i++ { + remotes[i] = pricedTransaction(uint64(i), 100000, big.NewInt(2), remoteKey) // Higher gasprice + } + // Benchmark importing the transactions into the queue + b.ResetTimer() + for i := 0; i < b.N; i++ { + b.StopTimer() + pool, _ := setupTxPool() + testAddBalance(pool, account, big.NewInt(100000000)) + for _, local := range locals { + pool.AddLocal(local) + } + b.StartTimer() + // Assign a high enough balance for testing + testAddBalance(pool, remoteAddr, big.NewInt(100000000)) + for i := 0; i < len(remotes); i++ { + pool.AddRemotes([]*types.Transaction{remotes[i]}) + } + pool.Stop() + } +} + +// Benchmarks the speed of batch transaction insertion in case of multiple accounts. +func BenchmarkPoolMultiAccountBatchInsert(b *testing.B) { + // Generate a batch of transactions to enqueue into the pool + pool, _ := setupTxPool() + defer pool.Stop() + b.ReportAllocs() + batches := make(types.Transactions, b.N) + for i := 0; i < b.N; i++ { + key, _ := crypto.GenerateKey() + account := crypto.PubkeyToAddress(key.PublicKey) + pool.currentState.AddBalance(account, big.NewInt(1000000)) + tx := transaction(uint64(0), 100000, key) + batches[i] = tx + } + // Benchmark importing the transactions into the queue + b.ResetTimer() + for _, tx := range batches { + pool.AddRemotesSync([]*types.Transaction{tx}) } } diff --git a/core/types.go b/core/types.go index b73419f0..4c5b74a4 100644 --- a/core/types.go +++ b/core/types.go @@ -17,9 +17,9 @@ package core import ( - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" ) // Validator is an interface which defines the standard for block validation. It diff --git a/core/types/access_list_tx.go b/core/types/access_list_tx.go new file mode 100644 index 00000000..620848fe --- /dev/null +++ b/core/types/access_list_tx.go @@ -0,0 +1,115 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +//go:generate go run github.com/fjl/gencodec -type AccessTuple -out gen_access_tuple.go + +// AccessList is an EIP-2930 access list. +type AccessList []AccessTuple + +// AccessTuple is the element type of an access list. +type AccessTuple struct { + Address common.Address `json:"address" gencodec:"required"` + StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"` +} + +// StorageKeys returns the total number of storage keys in the access list. +func (al AccessList) StorageKeys() int { + sum := 0 + for _, tuple := range al { + sum += len(tuple.StorageKeys) + } + return sum +} + +// AccessListTx is the data of EIP-2930 access list transactions. +type AccessListTx struct { + ChainID *big.Int // destination chain ID + Nonce uint64 // nonce of sender account + GasPrice *big.Int // wei per gas + Gas uint64 // gas limit + To *common.Address `rlp:"nil"` // nil means contract creation + Value *big.Int // wei amount + Data []byte // contract invocation input data + AccessList AccessList // EIP-2930 access list + V, R, S *big.Int // signature values +} + +// copy creates a deep copy of the transaction data and initializes all fields. +func (tx *AccessListTx) copy() TxData { + cpy := &AccessListTx{ + Nonce: tx.Nonce, + To: copyAddressPtr(tx.To), + Data: common.CopyBytes(tx.Data), + Gas: tx.Gas, + // These are copied below. + AccessList: make(AccessList, len(tx.AccessList)), + Value: new(big.Int), + ChainID: new(big.Int), + GasPrice: new(big.Int), + V: new(big.Int), + R: new(big.Int), + S: new(big.Int), + } + copy(cpy.AccessList, tx.AccessList) + if tx.Value != nil { + cpy.Value.Set(tx.Value) + } + if tx.ChainID != nil { + cpy.ChainID.Set(tx.ChainID) + } + if tx.GasPrice != nil { + cpy.GasPrice.Set(tx.GasPrice) + } + if tx.V != nil { + cpy.V.Set(tx.V) + } + if tx.R != nil { + cpy.R.Set(tx.R) + } + if tx.S != nil { + cpy.S.Set(tx.S) + } + return cpy +} + +// accessors for innerTx. +func (tx *AccessListTx) txType() byte { return AccessListTxType } +func (tx *AccessListTx) chainID() *big.Int { return tx.ChainID } +func (tx *AccessListTx) accessList() AccessList { return tx.AccessList } +func (tx *AccessListTx) data() []byte { return tx.Data } +func (tx *AccessListTx) gas() uint64 { return tx.Gas } +func (tx *AccessListTx) gasPrice() *big.Int { return tx.GasPrice } +func (tx *AccessListTx) gasTipCap() *big.Int { return tx.GasPrice } +func (tx *AccessListTx) gasFeeCap() *big.Int { return tx.GasPrice } +func (tx *AccessListTx) value() *big.Int { return tx.Value } +func (tx *AccessListTx) nonce() uint64 { return tx.Nonce } +func (tx *AccessListTx) to() *common.Address { return tx.To } + +func (tx *AccessListTx) rawSignatureValues() (v, r, s *big.Int) { + return tx.V, tx.R, tx.S +} + +func (tx *AccessListTx) setSignatureValues(chainID, v, r, s *big.Int) { + tx.ChainID, tx.V, tx.R, tx.S = chainID, v, r, s +} diff --git a/core/types/block.go b/core/types/block.go index 97351ff4..7525a88f 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -23,18 +23,16 @@ import ( "io" "math/big" "reflect" - "sort" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/rlp" - "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/rlp" ) var ( - EmptyRootHash = DeriveSha(Transactions{}) + EmptyRootHash = common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") EmptyUncleHash = rlpHash([]*Header(nil)) ) @@ -65,13 +63,14 @@ func (n *BlockNonce) UnmarshalText(input []byte) error { return hexutil.UnmarshalFixedText("BlockNonce", input, n[:]) } -//go:generate gencodec -type Header -field-override headerMarshaling -out gen_header_json.go +//go:generate go run github.com/fjl/gencodec -type Header -field-override headerMarshaling -out gen_header_json.go +//go:generate go run ../../rlp/rlpgen -type Header -out gen_header_rlp.go // Header represents a block header in the Ethereum blockchain. type Header struct { ParentHash common.Hash `json:"parentHash" gencodec:"required"` UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"` - Coinbase common.Address `json:"miner" gencodec:"required"` + Coinbase common.Address `json:"miner"` Root common.Hash `json:"stateRoot" gencodec:"required"` TxHash common.Hash `json:"transactionsRoot" gencodec:"required"` ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"` @@ -84,6 +83,15 @@ type Header struct { Extra []byte `json:"extraData" gencodec:"required"` MixDigest common.Hash `json:"mixHash"` Nonce BlockNonce `json:"nonce"` + + // BaseFee was added by EIP-1559 and is ignored in legacy headers. + BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"` + + /* + TODO (MariusVanDerWijden) Add this field once needed + // Random was added during the merge and contains the BeaconState randomness + Random common.Hash `json:"random" rlp:"optional"` + */ } // field type overrides for gencodec @@ -94,6 +102,7 @@ type headerMarshaling struct { GasUsed hexutil.Uint64 Time hexutil.Uint64 Extra hexutil.Bytes + BaseFee *hexutil.Big Hash common.Hash `json:"hash"` // adds call to Hash() in MarshalJSON } @@ -127,14 +136,23 @@ func (h *Header) SanityCheck() error { if eLen := len(h.Extra); eLen > 100*1024 { return fmt.Errorf("too large block extradata: size %d", eLen) } + if h.BaseFee != nil { + if bfLen := h.BaseFee.BitLen(); bfLen > 256 { + return fmt.Errorf("too large base fee: bitlen %d", bfLen) + } + } return nil } -func rlpHash(x interface{}) (h common.Hash) { - hw := sha3.NewLegacyKeccak256() - rlp.Encode(hw, x) - hw.Sum(h[:0]) - return h +// EmptyBody returns true if there is no additional 'body' to complete the header +// that is: no transactions and no uncles. +func (h *Header) EmptyBody() bool { + return h.TxHash == EmptyRootHash && h.UncleHash == EmptyUncleHash +} + +// EmptyReceipts returns true if there are no receipts for this header/block. +func (h *Header) EmptyReceipts() bool { + return h.ReceiptHash == EmptyRootHash } // Body is a simple (mutable, non-safe) data container for storing and moving @@ -154,29 +172,12 @@ type Block struct { hash atomic.Value size atomic.Value - // Td is used by package core to store the total difficulty - // of the chain up to and including the block. - td *big.Int - // These fields are used by package eth to track // inter-peer block relay. ReceivedAt time.Time ReceivedFrom interface{} } -// DeprecatedTd is an old relic for extracting the TD of a block. It is in the -// code solely to facilitate upgrading the database from the old format to the -// new, after which it should be deleted. Do not use! -func (b *Block) DeprecatedTd() *big.Int { - return b.td -} - -// [deprecated by eth/63] -// StorageBlock defines the RLP encoding of a Block stored in the -// state database. The StorageBlock encoding contains fields that -// would otherwise need to be recomputed. -type StorageBlock Block - // "external" block encoding. used for eth protocol, etc. type extblock struct { Header *Header @@ -184,15 +185,6 @@ type extblock struct { Uncles []*Header } -// [deprecated by eth/63] -// "storage" block encoding. used for database. -type storageblock struct { - Header *Header - Txs []*Transaction - Uncles []*Header - TD *big.Int -} - // NewBlock creates a new block. The input data is copied, // changes to header and to the field values will not affect the // block. @@ -200,14 +192,14 @@ type storageblock struct { // The values of TxHash, UncleHash, ReceiptHash and Bloom in header // are ignored and set to values derived from the given txs, uncles // and receipts. -func NewBlock(header *Header, txs []*Transaction, uncles []*Header, receipts []*Receipt) *Block { - b := &Block{header: CopyHeader(header), td: new(big.Int)} +func NewBlock(header *Header, txs []*Transaction, uncles []*Header, receipts []*Receipt, hasher TrieHasher) *Block { + b := &Block{header: CopyHeader(header)} // TODO: panic if len(txs) != len(receipts) if len(txs) == 0 { b.header.TxHash = EmptyRootHash } else { - b.header.TxHash = DeriveSha(Transactions(txs)) + b.header.TxHash = DeriveSha(Transactions(txs), hasher) b.transactions = make(Transactions, len(txs)) copy(b.transactions, txs) } @@ -215,7 +207,7 @@ func NewBlock(header *Header, txs []*Transaction, uncles []*Header, receipts []* if len(receipts) == 0 { b.header.ReceiptHash = EmptyRootHash } else { - b.header.ReceiptHash = DeriveSha(Receipts(receipts)) + b.header.ReceiptHash = DeriveSha(Receipts(receipts), hasher) b.header.Bloom = CreateBloom(receipts) } @@ -249,6 +241,9 @@ func CopyHeader(h *Header) *Header { if cpy.Number = new(big.Int); h.Number != nil { cpy.Number.Set(h.Number) } + if h.BaseFee != nil { + cpy.BaseFee = new(big.Int).Set(h.BaseFee) + } if len(h.Extra) > 0 { cpy.Extra = make([]byte, len(h.Extra)) copy(cpy.Extra, h.Extra) @@ -277,16 +272,6 @@ func (b *Block) EncodeRLP(w io.Writer) error { }) } -// [deprecated by eth/63] -func (b *StorageBlock) DecodeRLP(s *rlp.Stream) error { - var sb storageblock - if err := s.Decode(&sb); err != nil { - return err - } - b.header, b.uncles, b.transactions, b.td = sb.Header, sb.Uncles, sb.Txs, sb.TD - return nil -} - // TODO: copies func (b *Block) Uncles() []*Header { return b.uncles } @@ -319,13 +304,20 @@ func (b *Block) ReceiptHash() common.Hash { return b.header.ReceiptHash } func (b *Block) UncleHash() common.Hash { return b.header.UncleHash } func (b *Block) Extra() []byte { return common.CopyBytes(b.header.Extra) } +func (b *Block) BaseFee() *big.Int { + if b.header.BaseFee == nil { + return nil + } + return new(big.Int).Set(b.header.BaseFee) +} + func (b *Block) Header() *Header { return CopyHeader(b.header) } // Body returns the non-header content of the block. func (b *Block) Body() *Body { return &Body{b.transactions, b.uncles} } // Size returns the true RLP encoded storage size of the block, either by encoding -// and returning it, or returning a previsouly cached value. +// and returning it, or returning a previously cached value. func (b *Block) Size() common.StorageSize { if size := b.size.Load(); size != nil { return size.(common.StorageSize) @@ -395,25 +387,20 @@ func (b *Block) Hash() common.Hash { type Blocks []*Block -type BlockBy func(b1, b2 *Block) bool - -func (self BlockBy) Sort(blocks Blocks) { - bs := blockSorter{ - blocks: blocks, - by: self, +// HeaderParentHashFromRLP returns the parentHash of an RLP-encoded +// header. If 'header' is invalid, the zero hash is returned. +func HeaderParentHashFromRLP(header []byte) common.Hash { + // parentHash is the first list element. + listContent, _, err := rlp.SplitList(header) + if err != nil { + return common.Hash{} } - sort.Sort(bs) -} - -type blockSorter struct { - blocks Blocks - by func(b1, b2 *Block) bool -} - -func (self blockSorter) Len() int { return len(self.blocks) } -func (self blockSorter) Swap(i, j int) { - self.blocks[i], self.blocks[j] = self.blocks[j], self.blocks[i] + parentHash, _, err := rlp.SplitString(listContent) + if err != nil { + return common.Hash{} + } + if len(parentHash) != 32 { + return common.Hash{} + } + return common.BytesToHash(parentHash) } -func (self blockSorter) Less(i, j int) bool { return self.by(self.blocks[i], self.blocks[j]) } - -func Number(b1, b2 *Block) bool { return b1.header.Number.Cmp(b2.header.Number) < 0 } diff --git a/core/types/block_test.go b/core/types/block_test.go index c5205661..9e7f581b 100644 --- a/core/types/block_test.go +++ b/core/types/block_test.go @@ -18,12 +18,17 @@ package types import ( "bytes" + "hash" "math/big" "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/crypto/sha3" ) // from bcValidBlockTest.json, "SimpleTx" @@ -54,6 +59,131 @@ func TestBlockEncoding(t *testing.T) { tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")) check("len(Transactions)", len(block.Transactions()), 1) check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) + ourBlockEnc, err := rlp.EncodeToBytes(&block) + if err != nil { + t.Fatal("encode error: ", err) + } + if !bytes.Equal(ourBlockEnc, blockEnc) { + t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc) + } +} + +func TestEIP1559BlockEncoding(t *testing.T) { + blockEnc := common.FromHex("f9030bf901fea083cafc574e1f51ba9dc0568fc617a08ea2429fb384059c972f13b19fa1c8dd55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a05fe50b260da6308036625b850b5d6ced6d0a9f814c0688bc91ffb7b7a3a54b67a0bc37d79753ad738a6dac4921e57392f145d8887476de3f783dfa7edae9283e52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd8825208845506eb0780a0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4843b9aca00f90106f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1b8a302f8a0018080843b9aca008301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000080a0fe38ca4e44a30002ac54af7cf922a6ac2ba11b7d22f548e8ecb3f51f41cb31b0a06de6a5cbae13c0c856e33acf021b51819636cfc009d39eafb9f606d546e305a8c0") + var block Block + if err := rlp.DecodeBytes(blockEnc, &block); err != nil { + t.Fatal("decode error: ", err) + } + + check := func(f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } + } + + check("Difficulty", block.Difficulty(), big.NewInt(131072)) + check("GasLimit", block.GasLimit(), uint64(3141592)) + check("GasUsed", block.GasUsed(), uint64(21000)) + check("Coinbase", block.Coinbase(), common.HexToAddress("8888f1f195afa192cfee860698584c030f4c9db1")) + check("MixDigest", block.MixDigest(), common.HexToHash("bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff498")) + check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) + check("Hash", block.Hash(), common.HexToHash("c7252048cd273fe0dac09650027d07f0e3da4ee0675ebbb26627cea92729c372")) + check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) + check("Time", block.Time(), uint64(1426516743)) + check("Size", block.Size(), common.StorageSize(len(blockEnc))) + check("BaseFee", block.BaseFee(), new(big.Int).SetUint64(params.InitialBaseFee)) + + tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), 50000, big.NewInt(10), nil) + tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")) + + addr := common.HexToAddress("0x0000000000000000000000000000000000000001") + accesses := AccessList{AccessTuple{ + Address: addr, + StorageKeys: []common.Hash{ + {0}, + }, + }} + to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") + txdata := &DynamicFeeTx{ + ChainID: big.NewInt(1), + Nonce: 0, + To: &to, + Gas: 123457, + GasFeeCap: new(big.Int).Set(block.BaseFee()), + GasTipCap: big.NewInt(0), + AccessList: accesses, + Data: []byte{}, + } + tx2 := NewTx(txdata) + tx2, err := tx2.WithSignature(LatestSignerForChainID(big.NewInt(1)), common.Hex2Bytes("fe38ca4e44a30002ac54af7cf922a6ac2ba11b7d22f548e8ecb3f51f41cb31b06de6a5cbae13c0c856e33acf021b51819636cfc009d39eafb9f606d546e305a800")) + if err != nil { + t.Fatal("invalid signature error: ", err) + } + + check("len(Transactions)", len(block.Transactions()), 2) + check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) + check("Transactions[1].Hash", block.Transactions()[1].Hash(), tx2.Hash()) + check("Transactions[1].Type", block.Transactions()[1].Type(), tx2.Type()) + ourBlockEnc, err := rlp.EncodeToBytes(&block) + if err != nil { + t.Fatal("encode error: ", err) + } + if !bytes.Equal(ourBlockEnc, blockEnc) { + t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc) + } +} + +func TestEIP2718BlockEncoding(t *testing.T) { + blockEnc := common.FromHex("f90319f90211a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017a0e6e49996c7ec59f7a23d22b83239a60151512c65613bf84a0d7da336399ebc4aa0cafe75574d59780665a97fbfd11365c7545aa8f1abf4e5e12e8243334ef7286bb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000820200832fefd882a410845506eb0796636f6f6c65737420626c6f636b206f6e20636861696ea0bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff49888a13a5a8c8f2bb1c4f90101f85f800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba09bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094fa08a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b1b89e01f89b01800a8301e24194095e7baea6a6c7c4c2dfeb977efac326af552d878080f838f7940000000000000000000000000000000000000001e1a0000000000000000000000000000000000000000000000000000000000000000001a03dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335a0476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef14c0") + var block Block + if err := rlp.DecodeBytes(blockEnc, &block); err != nil { + t.Fatal("decode error: ", err) + } + + check := func(f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } + } + check("Difficulty", block.Difficulty(), big.NewInt(131072)) + check("GasLimit", block.GasLimit(), uint64(3141592)) + check("GasUsed", block.GasUsed(), uint64(42000)) + check("Coinbase", block.Coinbase(), common.HexToAddress("8888f1f195afa192cfee860698584c030f4c9db1")) + check("MixDigest", block.MixDigest(), common.HexToHash("bd4472abb6659ebe3ee06ee4d7b72a00a9f4d001caca51342001075469aff498")) + check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) + check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) + check("Time", block.Time(), uint64(1426516743)) + check("Size", block.Size(), common.StorageSize(len(blockEnc))) + + // Create legacy tx. + to := common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") + tx1 := NewTx(&LegacyTx{ + Nonce: 0, + To: &to, + Value: big.NewInt(10), + Gas: 50000, + GasPrice: big.NewInt(10), + }) + sig := common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100") + tx1, _ = tx1.WithSignature(HomesteadSigner{}, sig) + + // Create ACL tx. + addr := common.HexToAddress("0x0000000000000000000000000000000000000001") + tx2 := NewTx(&AccessListTx{ + ChainID: big.NewInt(1), + Nonce: 0, + To: &to, + Gas: 123457, + GasPrice: big.NewInt(10), + AccessList: AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}}, + }) + sig2 := common.Hex2Bytes("3dbacc8d0259f2508625e97fdfc57cd85fdd16e5821bc2c10bdd1a52649e8335476e10695b183a87b0aa292a7f4b78ef0c3fbe62aa2c42c84e1d9c3da159ef1401") + tx2, _ = tx2.WithSignature(NewEIP2930Signer(big.NewInt(1)), sig2) + + check("len(Transactions)", len(block.Transactions()), 2) + check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) + check("Transactions[1].Hash", block.Transactions()[1].Hash(), tx2.Hash()) + check("Transactions[1].Type()", block.Transactions()[1].Type(), uint8(AccessListTxType)) ourBlockEnc, err := rlp.EncodeToBytes(&block) if err != nil { @@ -72,10 +202,143 @@ func TestUncleHash(t *testing.T) { t.Fatalf("empty uncle hash is wrong, got %x != %x", h, exp) } } -func BenchmarkUncleHash(b *testing.B) { - uncles := make([]*Header, 0) + +var benchBuffer = bytes.NewBuffer(make([]byte, 0, 32000)) + +func BenchmarkEncodeBlock(b *testing.B) { + block := makeBenchBlock() b.ResetTimer() + for i := 0; i < b.N; i++ { - CalcUncleHash(uncles) + benchBuffer.Reset() + if err := rlp.Encode(benchBuffer, block); err != nil { + b.Fatal(err) + } + } +} + +// testHasher is the helper tool for transaction/receipt list hashing. +// The original hasher is trie, in order to get rid of import cycle, +// use the testing hasher instead. +type testHasher struct { + hasher hash.Hash +} + +func newHasher() *testHasher { + return &testHasher{hasher: sha3.NewLegacyKeccak256()} +} + +func (h *testHasher) Reset() { + h.hasher.Reset() +} + +func (h *testHasher) Update(key, val []byte) { + h.hasher.Write(key) + h.hasher.Write(val) +} + +func (h *testHasher) Hash() common.Hash { + return common.BytesToHash(h.hasher.Sum(nil)) +} + +func makeBenchBlock() *Block { + var ( + key, _ = crypto.GenerateKey() + txs = make([]*Transaction, 70) + receipts = make([]*Receipt, len(txs)) + signer = LatestSigner(params.TestChainConfig) + uncles = make([]*Header, 3) + ) + header := &Header{ + Difficulty: math.BigPow(11, 11), + Number: math.BigPow(2, 9), + GasLimit: 12345678, + GasUsed: 1476322, + Time: 9876543, + Extra: []byte("coolest block on chain"), + } + for i := range txs { + amount := math.BigPow(2, int64(i)) + price := big.NewInt(300000) + data := make([]byte, 100) + tx := NewTransaction(uint64(i), common.Address{}, amount, 123457, price, data) + signedTx, err := SignTx(tx, signer, key) + if err != nil { + panic(err) + } + txs[i] = signedTx + receipts[i] = NewReceipt(make([]byte, 32), false, tx.Gas()) + } + for i := range uncles { + uncles[i] = &Header{ + Difficulty: math.BigPow(11, 11), + Number: math.BigPow(2, 9), + GasLimit: 12345678, + GasUsed: 1476322, + Time: 9876543, + Extra: []byte("benchmark uncle"), + } + } + return NewBlock(header, txs, uncles, receipts, newHasher()) +} + +func TestRlpDecodeParentHash(t *testing.T) { + // A minimum one + want := common.HexToHash("0x112233445566778899001122334455667788990011223344556677889900aabb") + if rlpData, err := rlp.EncodeToBytes(&Header{ParentHash: want}); err != nil { + t.Fatal(err) + } else { + if have := HeaderParentHashFromRLP(rlpData); have != want { + t.Fatalf("have %x, want %x", have, want) + } + } + // And a maximum one + // | Difficulty | dynamic| *big.Int | 0x5ad3c2c71bbff854908 (current mainnet TD: 76 bits) | + // | Number | dynamic| *big.Int | 64 bits | + // | Extra | dynamic| []byte | 65+32 byte (clique) | + // | BaseFee | dynamic| *big.Int | 64 bits | + mainnetTd := new(big.Int) + mainnetTd.SetString("5ad3c2c71bbff854908", 16) + if rlpData, err := rlp.EncodeToBytes(&Header{ + ParentHash: want, + Difficulty: mainnetTd, + Number: new(big.Int).SetUint64(math.MaxUint64), + Extra: make([]byte, 65+32), + BaseFee: new(big.Int).SetUint64(math.MaxUint64), + }); err != nil { + t.Fatal(err) + } else { + if have := HeaderParentHashFromRLP(rlpData); have != want { + t.Fatalf("have %x, want %x", have, want) + } + } + // Also test a very very large header. + { + // The rlp-encoding of the header belowCauses _total_ length of 65540, + // which is the first to blow the fast-path. + h := &Header{ + ParentHash: want, + Extra: make([]byte, 65041), + } + if rlpData, err := rlp.EncodeToBytes(h); err != nil { + t.Fatal(err) + } else { + if have := HeaderParentHashFromRLP(rlpData); have != want { + t.Fatalf("have %x, want %x", have, want) + } + } + } + { + // Test some invalid erroneous stuff + for i, rlpData := range [][]byte{ + nil, + common.FromHex("0x"), + common.FromHex("0x01"), + common.FromHex("0x3031323334"), + } { + if have, want := HeaderParentHashFromRLP(rlpData), (common.Hash{}); have != want { + t.Fatalf("invalid %d: have %x, want %x", i, have, want) + } + } } } diff --git a/core/types/bloom9.go b/core/types/bloom9.go index f4736bbc..a560a207 100644 --- a/core/types/bloom9.go +++ b/core/types/bloom9.go @@ -17,11 +17,12 @@ package types import ( + "encoding/binary" "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" ) type bytesBacked interface { @@ -57,28 +58,36 @@ func (b *Bloom) SetBytes(d []byte) { } // Add adds d to the filter. Future calls of Test(d) will return true. -func (b *Bloom) Add(d *big.Int) { - bin := new(big.Int).SetBytes(b[:]) - bin.Or(bin, bloom9(d.Bytes())) - b.SetBytes(bin.Bytes()) +func (b *Bloom) Add(d []byte) { + b.add(d, make([]byte, 6)) +} + +// add is internal version of Add, which takes a scratch buffer for reuse (needs to be at least 6 bytes) +func (b *Bloom) add(d []byte, buf []byte) { + i1, v1, i2, v2, i3, v3 := bloomValues(d, buf) + b[i1] |= v1 + b[i2] |= v2 + b[i3] |= v3 } // Big converts b to a big integer. +// Note: Converting a bloom filter to a big.Int and then calling GetBytes +// does not return the same bytes, since big.Int will trim leading zeroes func (b Bloom) Big() *big.Int { return new(big.Int).SetBytes(b[:]) } +// Bytes returns the backing byte slice of the bloom func (b Bloom) Bytes() []byte { return b[:] } -func (b Bloom) Test(test *big.Int) bool { - return BloomLookup(b, test) -} - -func (b Bloom) TestBytes(test []byte) bool { - return b.Test(new(big.Int).SetBytes(test)) - +// Test checks if the given topic is present in the bloom filter +func (b Bloom) Test(topic []byte) bool { + i1, v1, i2, v2, i3, v3 := bloomValues(topic, make([]byte, 6)) + return v1 == v1&b[i1] && + v2 == v2&b[i2] && + v3 == v3&b[i3] } // MarshalText encodes b as a hex string with 0x prefix. @@ -91,46 +100,61 @@ func (b *Bloom) UnmarshalText(input []byte) error { return hexutil.UnmarshalFixedText("Bloom", input, b[:]) } +// CreateBloom creates a bloom filter out of the give Receipts (+Logs) func CreateBloom(receipts Receipts) Bloom { - bin := new(big.Int) + buf := make([]byte, 6) + var bin Bloom for _, receipt := range receipts { - bin.Or(bin, LogsBloom(receipt.Logs)) + for _, log := range receipt.Logs { + bin.add(log.Address.Bytes(), buf) + for _, b := range log.Topics { + bin.add(b[:], buf) + } + } } - - return BytesToBloom(bin.Bytes()) + return bin } -func LogsBloom(logs []*Log) *big.Int { - bin := new(big.Int) +// LogsBloom returns the bloom bytes for the given logs +func LogsBloom(logs []*Log) []byte { + buf := make([]byte, 6) + var bin Bloom for _, log := range logs { - bin.Or(bin, bloom9(log.Address.Bytes())) + bin.add(log.Address.Bytes(), buf) for _, b := range log.Topics { - bin.Or(bin, bloom9(b[:])) + bin.add(b[:], buf) } } - - return bin + return bin[:] } -func bloom9(b []byte) *big.Int { - b = crypto.Keccak256(b) - - r := new(big.Int) - - for i := 0; i < 6; i += 2 { - t := big.NewInt(1) - b := (uint(b[i+1]) + (uint(b[i]) << 8)) & 2047 - r.Or(r, t.Lsh(t, b)) - } - - return r +// Bloom9 returns the bloom filter for the given data +func Bloom9(data []byte) []byte { + var b Bloom + b.SetBytes(data) + return b.Bytes() } -var Bloom9 = bloom9 +// bloomValues returns the bytes (index-value pairs) to set for the given data +func bloomValues(data []byte, hashbuf []byte) (uint, byte, uint, byte, uint, byte) { + sha := hasherPool.Get().(crypto.KeccakState) + sha.Reset() + sha.Write(data) + sha.Read(hashbuf) + hasherPool.Put(sha) + // The actual bits to flip + v1 := byte(1 << (hashbuf[1] & 0x7)) + v2 := byte(1 << (hashbuf[3] & 0x7)) + v3 := byte(1 << (hashbuf[5] & 0x7)) + // The indices for the bytes to OR in + i1 := BloomByteLength - uint((binary.BigEndian.Uint16(hashbuf)&0x7ff)>>3) - 1 + i2 := BloomByteLength - uint((binary.BigEndian.Uint16(hashbuf[2:])&0x7ff)>>3) - 1 + i3 := BloomByteLength - uint((binary.BigEndian.Uint16(hashbuf[4:])&0x7ff)>>3) - 1 + + return i1, v1, i2, v2, i3, v3 +} +// BloomLookup is a convenience-method to check presence in the bloom filter func BloomLookup(bin Bloom, topic bytesBacked) bool { - bloom := bin.Big() - cmp := bloom9(topic.Bytes()) - - return bloom.And(bloom, cmp).Cmp(cmp) == 0 + return bin.Test(topic.Bytes()) } diff --git a/core/types/bloom9_test.go b/core/types/bloom9_test.go index 2f9f673e..d3178d11 100644 --- a/core/types/bloom9_test.go +++ b/core/types/bloom9_test.go @@ -17,8 +17,12 @@ package types import ( + "fmt" "math/big" "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) func TestBloom(t *testing.T) { @@ -35,47 +39,117 @@ func TestBloom(t *testing.T) { var bloom Bloom for _, data := range positive { - bloom.Add(new(big.Int).SetBytes([]byte(data))) + bloom.Add([]byte(data)) } for _, data := range positive { - if !bloom.TestBytes([]byte(data)) { + if !bloom.Test([]byte(data)) { t.Error("expected", data, "to test true") } } for _, data := range negative { - if bloom.TestBytes([]byte(data)) { + if bloom.Test([]byte(data)) { t.Error("did not expect", data, "to test true") } } } -/* -import ( - "testing" - - "github.com/cryptoecc/ETH-ECC/core/state" -) - -func TestBloom9(t *testing.T) { - testCase := []byte("testtest") - bin := LogsBloom([]state.Log{ - {testCase, [][]byte{[]byte("hellohello")}, nil}, - }).Bytes() - res := BloomLookup(bin, testCase) +// TestBloomExtensively does some more thorough tests +func TestBloomExtensively(t *testing.T) { + var exp = common.HexToHash("c8d3ca65cdb4874300a9e39475508f23ed6da09fdbc487f89a2dcf50b09eb263") + var b Bloom + // Add 100 "random" things + for i := 0; i < 100; i++ { + data := fmt.Sprintf("xxxxxxxxxx data %d yyyyyyyyyyyyyy", i) + b.Add([]byte(data)) + //b.Add(new(big.Int).SetBytes([]byte(data))) + } + got := crypto.Keccak256Hash(b.Bytes()) + if got != exp { + t.Errorf("Got %x, exp %x", got, exp) + } + var b2 Bloom + b2.SetBytes(b.Bytes()) + got2 := crypto.Keccak256Hash(b2.Bytes()) + if got != got2 { + t.Errorf("Got %x, exp %x", got, got2) + } +} - if !res { - t.Errorf("Bloom lookup failed") +func BenchmarkBloom9(b *testing.B) { + test := []byte("testestestest") + for i := 0; i < b.N; i++ { + Bloom9(test) } } +func BenchmarkBloom9Lookup(b *testing.B) { + toTest := []byte("testtest") + bloom := new(Bloom) + for i := 0; i < b.N; i++ { + bloom.Test(toTest) + } +} -func TestAddress(t *testing.T) { - block := &Block{} - block.Coinbase = common.Hex2Bytes("22341ae42d6dd7384bc8584e50419ea3ac75b83f") - fmt.Printf("%x\n", crypto.Keccak256(block.Coinbase)) +func BenchmarkCreateBloom(b *testing.B) { + var 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), + } + var rSmall = 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, + }, + } - bin := CreateBloom(block) - fmt.Printf("bin = %x\n", common.LeftPadBytes(bin, 64)) + var rLarge = make(Receipts, 200) + // Fill it with 200 receipts x 2 logs + for i := 0; i < 200; i += 2 { + copy(rLarge[i:], rSmall) + } + b.Run("small", func(b *testing.B) { + b.ReportAllocs() + var bl Bloom + for i := 0; i < b.N; i++ { + bl = CreateBloom(rSmall) + } + b.StopTimer() + var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949") + got := crypto.Keccak256Hash(bl.Bytes()) + if got != exp { + b.Errorf("Got %x, exp %x", got, exp) + } + }) + b.Run("large", func(b *testing.B) { + b.ReportAllocs() + var bl Bloom + for i := 0; i < b.N; i++ { + bl = CreateBloom(rLarge) + } + b.StopTimer() + var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949") + got := crypto.Keccak256Hash(bl.Bytes()) + if got != exp { + b.Errorf("Got %x, exp %x", got, exp) + } + }) } -*/ diff --git a/core/types/dynamic_fee_tx.go b/core/types/dynamic_fee_tx.go new file mode 100644 index 00000000..53f246ea --- /dev/null +++ b/core/types/dynamic_fee_tx.go @@ -0,0 +1,103 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +type DynamicFeeTx struct { + ChainID *big.Int + Nonce uint64 + GasTipCap *big.Int // a.k.a. maxPriorityFeePerGas + GasFeeCap *big.Int // a.k.a. maxFeePerGas + Gas uint64 + To *common.Address `rlp:"nil"` // nil means contract creation + Value *big.Int + Data []byte + AccessList AccessList + + // Signature values + V *big.Int `json:"v" gencodec:"required"` + R *big.Int `json:"r" gencodec:"required"` + S *big.Int `json:"s" gencodec:"required"` +} + +// copy creates a deep copy of the transaction data and initializes all fields. +func (tx *DynamicFeeTx) copy() TxData { + cpy := &DynamicFeeTx{ + Nonce: tx.Nonce, + To: copyAddressPtr(tx.To), + Data: common.CopyBytes(tx.Data), + Gas: tx.Gas, + // These are copied below. + AccessList: make(AccessList, len(tx.AccessList)), + Value: new(big.Int), + ChainID: new(big.Int), + GasTipCap: new(big.Int), + GasFeeCap: new(big.Int), + V: new(big.Int), + R: new(big.Int), + S: new(big.Int), + } + copy(cpy.AccessList, tx.AccessList) + if tx.Value != nil { + cpy.Value.Set(tx.Value) + } + if tx.ChainID != nil { + cpy.ChainID.Set(tx.ChainID) + } + if tx.GasTipCap != nil { + cpy.GasTipCap.Set(tx.GasTipCap) + } + if tx.GasFeeCap != nil { + cpy.GasFeeCap.Set(tx.GasFeeCap) + } + if tx.V != nil { + cpy.V.Set(tx.V) + } + if tx.R != nil { + cpy.R.Set(tx.R) + } + if tx.S != nil { + cpy.S.Set(tx.S) + } + return cpy +} + +// accessors for innerTx. +func (tx *DynamicFeeTx) txType() byte { return DynamicFeeTxType } +func (tx *DynamicFeeTx) chainID() *big.Int { return tx.ChainID } +func (tx *DynamicFeeTx) accessList() AccessList { return tx.AccessList } +func (tx *DynamicFeeTx) data() []byte { return tx.Data } +func (tx *DynamicFeeTx) gas() uint64 { return tx.Gas } +func (tx *DynamicFeeTx) gasFeeCap() *big.Int { return tx.GasFeeCap } +func (tx *DynamicFeeTx) gasTipCap() *big.Int { return tx.GasTipCap } +func (tx *DynamicFeeTx) gasPrice() *big.Int { return tx.GasFeeCap } +func (tx *DynamicFeeTx) value() *big.Int { return tx.Value } +func (tx *DynamicFeeTx) nonce() uint64 { return tx.Nonce } +func (tx *DynamicFeeTx) to() *common.Address { return tx.To } + +func (tx *DynamicFeeTx) rawSignatureValues() (v, r, s *big.Int) { + return tx.V, tx.R, tx.S +} + +func (tx *DynamicFeeTx) setSignatureValues(chainID, v, r, s *big.Int) { + tx.ChainID, tx.V, tx.R, tx.S = chainID, v, r, s +} diff --git a/core/types/gen_access_tuple.go b/core/types/gen_access_tuple.go new file mode 100644 index 00000000..fc48a84c --- /dev/null +++ b/core/types/gen_access_tuple.go @@ -0,0 +1,43 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package types + +import ( + "encoding/json" + "errors" + + "github.com/ethereum/go-ethereum/common" +) + +// MarshalJSON marshals as JSON. +func (a AccessTuple) MarshalJSON() ([]byte, error) { + type AccessTuple struct { + Address common.Address `json:"address" gencodec:"required"` + StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"` + } + var enc AccessTuple + enc.Address = a.Address + enc.StorageKeys = a.StorageKeys + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (a *AccessTuple) UnmarshalJSON(input []byte) error { + type AccessTuple struct { + Address *common.Address `json:"address" gencodec:"required"` + StorageKeys []common.Hash `json:"storageKeys" gencodec:"required"` + } + var dec AccessTuple + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.Address == nil { + return errors.New("missing required field 'address' for AccessTuple") + } + a.Address = *dec.Address + if dec.StorageKeys == nil { + return errors.New("missing required field 'storageKeys' for AccessTuple") + } + a.StorageKeys = dec.StorageKeys + return nil +} diff --git a/core/types/gen_account_rlp.go b/core/types/gen_account_rlp.go new file mode 100644 index 00000000..5181d884 --- /dev/null +++ b/core/types/gen_account_rlp.go @@ -0,0 +1,27 @@ +// Code generated by rlpgen. DO NOT EDIT. + +//go:build !norlpgen +// +build !norlpgen + +package types + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *StateAccount) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + w.WriteUint64(obj.Nonce) + if obj.Balance == nil { + w.Write(rlp.EmptyString) + } else { + if obj.Balance.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(obj.Balance) + } + w.WriteBytes(obj.Root[:]) + w.WriteBytes(obj.CodeHash) + w.ListEnd(_tmp0) + return w.Flush() +} diff --git a/core/types/gen_header_json.go b/core/types/gen_header_json.go index 6fdd2133..74746d03 100644 --- a/core/types/gen_header_json.go +++ b/core/types/gen_header_json.go @@ -7,8 +7,8 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) var _ = (*headerMarshaling)(nil) @@ -18,7 +18,7 @@ func (h Header) MarshalJSON() ([]byte, error) { type Header struct { ParentHash common.Hash `json:"parentHash" gencodec:"required"` UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"` - Coinbase common.Address `json:"miner" gencodec:"required"` + Coinbase common.Address `json:"miner"` Root common.Hash `json:"stateRoot" gencodec:"required"` TxHash common.Hash `json:"transactionsRoot" gencodec:"required"` ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"` @@ -31,6 +31,7 @@ func (h Header) MarshalJSON() ([]byte, error) { Extra hexutil.Bytes `json:"extraData" gencodec:"required"` MixDigest common.Hash `json:"mixHash"` Nonce BlockNonce `json:"nonce"` + BaseFee *hexutil.Big `json:"baseFeePerGas" rlp:"optional"` Hash common.Hash `json:"hash"` } var enc Header @@ -49,6 +50,7 @@ func (h Header) MarshalJSON() ([]byte, error) { enc.Extra = h.Extra enc.MixDigest = h.MixDigest enc.Nonce = h.Nonce + enc.BaseFee = (*hexutil.Big)(h.BaseFee) enc.Hash = h.Hash() return json.Marshal(&enc) } @@ -58,7 +60,7 @@ func (h *Header) UnmarshalJSON(input []byte) error { type Header struct { ParentHash *common.Hash `json:"parentHash" gencodec:"required"` UncleHash *common.Hash `json:"sha3Uncles" gencodec:"required"` - Coinbase *common.Address `json:"miner" gencodec:"required"` + Coinbase *common.Address `json:"miner"` Root *common.Hash `json:"stateRoot" gencodec:"required"` TxHash *common.Hash `json:"transactionsRoot" gencodec:"required"` ReceiptHash *common.Hash `json:"receiptsRoot" gencodec:"required"` @@ -71,6 +73,7 @@ func (h *Header) UnmarshalJSON(input []byte) error { Extra *hexutil.Bytes `json:"extraData" gencodec:"required"` MixDigest *common.Hash `json:"mixHash"` Nonce *BlockNonce `json:"nonce"` + BaseFee *hexutil.Big `json:"baseFeePerGas" rlp:"optional"` } var dec Header if err := json.Unmarshal(input, &dec); err != nil { @@ -84,10 +87,9 @@ func (h *Header) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'sha3Uncles' for Header") } h.UncleHash = *dec.UncleHash - if dec.Coinbase == nil { - return errors.New("missing required field 'miner' for Header") + if dec.Coinbase != nil { + h.Coinbase = *dec.Coinbase } - h.Coinbase = *dec.Coinbase if dec.Root == nil { return errors.New("missing required field 'stateRoot' for Header") } @@ -134,5 +136,8 @@ func (h *Header) UnmarshalJSON(input []byte) error { if dec.Nonce != nil { h.Nonce = *dec.Nonce } + if dec.BaseFee != nil { + h.BaseFee = (*big.Int)(dec.BaseFee) + } return nil } diff --git a/core/types/gen_header_rlp.go b/core/types/gen_header_rlp.go new file mode 100644 index 00000000..e1a68733 --- /dev/null +++ b/core/types/gen_header_rlp.go @@ -0,0 +1,56 @@ +// Code generated by rlpgen. DO NOT EDIT. + +//go:build !norlpgen +// +build !norlpgen + +package types + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Header) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + w.WriteBytes(obj.ParentHash[:]) + w.WriteBytes(obj.UncleHash[:]) + w.WriteBytes(obj.Coinbase[:]) + w.WriteBytes(obj.Root[:]) + w.WriteBytes(obj.TxHash[:]) + w.WriteBytes(obj.ReceiptHash[:]) + w.WriteBytes(obj.Bloom[:]) + if obj.Difficulty == nil { + w.Write(rlp.EmptyString) + } else { + if obj.Difficulty.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(obj.Difficulty) + } + if obj.Number == nil { + w.Write(rlp.EmptyString) + } else { + if obj.Number.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(obj.Number) + } + w.WriteUint64(obj.GasLimit) + w.WriteUint64(obj.GasUsed) + w.WriteUint64(obj.Time) + w.WriteBytes(obj.Extra) + w.WriteBytes(obj.MixDigest[:]) + w.WriteBytes(obj.Nonce[:]) + _tmp1 := obj.BaseFee != nil + if _tmp1 { + if obj.BaseFee == nil { + w.Write(rlp.EmptyString) + } else { + if obj.BaseFee.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(obj.BaseFee) + } + } + w.ListEnd(_tmp0) + return w.Flush() +} diff --git a/core/types/gen_log_json.go b/core/types/gen_log_json.go index 68a8980f..90e1c14d 100644 --- a/core/types/gen_log_json.go +++ b/core/types/gen_log_json.go @@ -6,8 +6,8 @@ import ( "encoding/json" "errors" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) var _ = (*logMarshaling)(nil) @@ -20,9 +20,9 @@ func (l Log) MarshalJSON() ([]byte, error) { Data hexutil.Bytes `json:"data" gencodec:"required"` BlockNumber hexutil.Uint64 `json:"blockNumber"` TxHash common.Hash `json:"transactionHash" gencodec:"required"` - TxIndex hexutil.Uint `json:"transactionIndex" gencodec:"required"` + TxIndex hexutil.Uint `json:"transactionIndex"` BlockHash common.Hash `json:"blockHash"` - Index hexutil.Uint `json:"logIndex" gencodec:"required"` + Index hexutil.Uint `json:"logIndex"` Removed bool `json:"removed"` } var enc Log @@ -46,9 +46,9 @@ func (l *Log) UnmarshalJSON(input []byte) error { Data *hexutil.Bytes `json:"data" gencodec:"required"` BlockNumber *hexutil.Uint64 `json:"blockNumber"` TxHash *common.Hash `json:"transactionHash" gencodec:"required"` - TxIndex *hexutil.Uint `json:"transactionIndex" gencodec:"required"` + TxIndex *hexutil.Uint `json:"transactionIndex"` BlockHash *common.Hash `json:"blockHash"` - Index *hexutil.Uint `json:"logIndex" gencodec:"required"` + Index *hexutil.Uint `json:"logIndex"` Removed *bool `json:"removed"` } var dec Log @@ -74,17 +74,15 @@ func (l *Log) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'transactionHash' for Log") } l.TxHash = *dec.TxHash - if dec.TxIndex == nil { - return errors.New("missing required field 'transactionIndex' for Log") + if dec.TxIndex != nil { + l.TxIndex = uint(*dec.TxIndex) } - l.TxIndex = uint(*dec.TxIndex) if dec.BlockHash != nil { l.BlockHash = *dec.BlockHash } - if dec.Index == nil { - return errors.New("missing required field 'logIndex' for Log") + if dec.Index != nil { + l.Index = uint(*dec.Index) } - l.Index = uint(*dec.Index) if dec.Removed != nil { l.Removed = *dec.Removed } diff --git a/core/types/gen_log_rlp.go b/core/types/gen_log_rlp.go new file mode 100644 index 00000000..4a6c6b00 --- /dev/null +++ b/core/types/gen_log_rlp.go @@ -0,0 +1,23 @@ +// Code generated by rlpgen. DO NOT EDIT. + +//go:build !norlpgen +// +build !norlpgen + +package types + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *rlpLog) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + w.WriteBytes(obj.Address[:]) + _tmp1 := w.List() + for _, _tmp2 := range obj.Topics { + w.WriteBytes(_tmp2[:]) + } + w.ListEnd(_tmp1) + w.WriteBytes(obj.Data) + w.ListEnd(_tmp0) + return w.Flush() +} diff --git a/core/types/gen_receipt_json.go b/core/types/gen_receipt_json.go index 8a002527..bb892f85 100644 --- a/core/types/gen_receipt_json.go +++ b/core/types/gen_receipt_json.go @@ -7,8 +7,8 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) var _ = (*receiptMarshaling)(nil) @@ -16,6 +16,7 @@ var _ = (*receiptMarshaling)(nil) // MarshalJSON marshals as JSON. func (r Receipt) MarshalJSON() ([]byte, error) { type Receipt struct { + Type hexutil.Uint64 `json:"type,omitempty"` PostState hexutil.Bytes `json:"root"` Status hexutil.Uint64 `json:"status"` CumulativeGasUsed hexutil.Uint64 `json:"cumulativeGasUsed" gencodec:"required"` @@ -29,6 +30,7 @@ func (r Receipt) MarshalJSON() ([]byte, error) { TransactionIndex hexutil.Uint `json:"transactionIndex"` } var enc Receipt + enc.Type = hexutil.Uint64(r.Type) enc.PostState = r.PostState enc.Status = hexutil.Uint64(r.Status) enc.CumulativeGasUsed = hexutil.Uint64(r.CumulativeGasUsed) @@ -46,6 +48,7 @@ func (r Receipt) MarshalJSON() ([]byte, error) { // UnmarshalJSON unmarshals from JSON. func (r *Receipt) UnmarshalJSON(input []byte) error { type Receipt struct { + Type *hexutil.Uint64 `json:"type,omitempty"` PostState *hexutil.Bytes `json:"root"` Status *hexutil.Uint64 `json:"status"` CumulativeGasUsed *hexutil.Uint64 `json:"cumulativeGasUsed" gencodec:"required"` @@ -62,6 +65,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { if err := json.Unmarshal(input, &dec); err != nil { return err } + if dec.Type != nil { + r.Type = uint8(*dec.Type) + } if dec.PostState != nil { r.PostState = *dec.PostState } diff --git a/core/types/gen_tx_json.go b/core/types/gen_tx_json.go deleted file mode 100644 index 1743aa4e..00000000 --- a/core/types/gen_tx_json.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package types - -import ( - "encoding/json" - "errors" - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" -) - -var _ = (*txdataMarshaling)(nil) - -// MarshalJSON marshals as JSON. -func (t txdata) MarshalJSON() ([]byte, error) { - type txdata struct { - AccountNonce hexutil.Uint64 `json:"nonce" gencodec:"required"` - Price *hexutil.Big `json:"gasPrice" gencodec:"required"` - GasLimit hexutil.Uint64 `json:"gas" gencodec:"required"` - Recipient *common.Address `json:"to" rlp:"nil"` - Amount *hexutil.Big `json:"value" gencodec:"required"` - Payload hexutil.Bytes `json:"input" gencodec:"required"` - V *hexutil.Big `json:"v" gencodec:"required"` - R *hexutil.Big `json:"r" gencodec:"required"` - S *hexutil.Big `json:"s" gencodec:"required"` - Hash *common.Hash `json:"hash" rlp:"-"` - } - var enc txdata - enc.AccountNonce = hexutil.Uint64(t.AccountNonce) - enc.Price = (*hexutil.Big)(t.Price) - enc.GasLimit = hexutil.Uint64(t.GasLimit) - enc.Recipient = t.Recipient - enc.Amount = (*hexutil.Big)(t.Amount) - enc.Payload = t.Payload - enc.V = (*hexutil.Big)(t.V) - enc.R = (*hexutil.Big)(t.R) - enc.S = (*hexutil.Big)(t.S) - enc.Hash = t.Hash - 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"` - Price *hexutil.Big `json:"gasPrice" gencodec:"required"` - GasLimit *hexutil.Uint64 `json:"gas" gencodec:"required"` - Recipient *common.Address `json:"to" rlp:"nil"` - Amount *hexutil.Big `json:"value" gencodec:"required"` - Payload *hexutil.Bytes `json:"input" gencodec:"required"` - V *hexutil.Big `json:"v" gencodec:"required"` - R *hexutil.Big `json:"r" gencodec:"required"` - S *hexutil.Big `json:"s" gencodec:"required"` - Hash *common.Hash `json:"hash" rlp:"-"` - } - var dec txdata - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.AccountNonce == nil { - return errors.New("missing required field 'nonce' for txdata") - } - t.AccountNonce = uint64(*dec.AccountNonce) - if dec.Price == nil { - return errors.New("missing required field 'gasPrice' for txdata") - } - t.Price = (*big.Int)(dec.Price) - if dec.GasLimit == nil { - return errors.New("missing required field 'gas' for txdata") - } - t.GasLimit = uint64(*dec.GasLimit) - if dec.Recipient != nil { - t.Recipient = dec.Recipient - } - if dec.Amount == nil { - return errors.New("missing required field 'value' for txdata") - } - t.Amount = (*big.Int)(dec.Amount) - if dec.Payload == nil { - return errors.New("missing required field 'input' for txdata") - } - t.Payload = *dec.Payload - if dec.V == nil { - return errors.New("missing required field 'v' for txdata") - } - t.V = (*big.Int)(dec.V) - if dec.R == nil { - return errors.New("missing required field 'r' for txdata") - } - t.R = (*big.Int)(dec.R) - if dec.S == nil { - return errors.New("missing required field 's' for txdata") - } - t.S = (*big.Int)(dec.S) - if dec.Hash != nil { - t.Hash = dec.Hash - } - return nil -} diff --git a/core/types/hashing.go b/core/types/hashing.go new file mode 100644 index 00000000..3df75432 --- /dev/null +++ b/core/types/hashing.go @@ -0,0 +1,113 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/crypto/sha3" +) + +// hasherPool holds LegacyKeccak256 hashers for rlpHash. +var hasherPool = sync.Pool{ + New: func() interface{} { return sha3.NewLegacyKeccak256() }, +} + +// encodeBufferPool holds temporary encoder buffers for DeriveSha and TX encoding. +var encodeBufferPool = sync.Pool{ + New: func() interface{} { return new(bytes.Buffer) }, +} + +// rlpHash encodes x and hashes the encoded bytes. +func rlpHash(x interface{}) (h common.Hash) { + sha := hasherPool.Get().(crypto.KeccakState) + defer hasherPool.Put(sha) + sha.Reset() + rlp.Encode(sha, x) + sha.Read(h[:]) + return h +} + +// prefixedRlpHash writes the prefix into the hasher before rlp-encoding x. +// It's used for typed transactions. +func prefixedRlpHash(prefix byte, x interface{}) (h common.Hash) { + sha := hasherPool.Get().(crypto.KeccakState) + defer hasherPool.Put(sha) + sha.Reset() + sha.Write([]byte{prefix}) + rlp.Encode(sha, x) + sha.Read(h[:]) + return h +} + +// TrieHasher is the tool used to calculate the hash of derivable list. +// This is internal, do not use. +type TrieHasher interface { + Reset() + Update([]byte, []byte) + Hash() common.Hash +} + +// DerivableList is the input to DeriveSha. +// It is implemented by the 'Transactions' and 'Receipts' types. +// This is internal, do not use these methods. +type DerivableList interface { + Len() int + EncodeIndex(int, *bytes.Buffer) +} + +func encodeForDerive(list DerivableList, i int, buf *bytes.Buffer) []byte { + buf.Reset() + list.EncodeIndex(i, buf) + // It's really unfortunate that we need to do perform this copy. + // StackTrie holds onto the values until Hash is called, so the values + // written to it must not alias. + return common.CopyBytes(buf.Bytes()) +} + +// DeriveSha creates the tree hashes of transactions and receipts in a block header. +func DeriveSha(list DerivableList, hasher TrieHasher) common.Hash { + hasher.Reset() + + valueBuf := encodeBufferPool.Get().(*bytes.Buffer) + defer encodeBufferPool.Put(valueBuf) + + // StackTrie requires values to be inserted in increasing hash order, which is not the + // order that `list` provides hashes in. This insertion sequence ensures that the + // order is correct. + var indexBuf []byte + for i := 1; i < list.Len() && i <= 0x7f; i++ { + indexBuf = rlp.AppendUint64(indexBuf[:0], uint64(i)) + value := encodeForDerive(list, i, valueBuf) + hasher.Update(indexBuf, value) + } + if list.Len() > 0 { + indexBuf = rlp.AppendUint64(indexBuf[:0], 0) + value := encodeForDerive(list, 0, valueBuf) + hasher.Update(indexBuf, value) + } + for i := 0x80; i < list.Len(); i++ { + indexBuf = rlp.AppendUint64(indexBuf[:0], uint64(i)) + value := encodeForDerive(list, i, valueBuf) + hasher.Update(indexBuf, value) + } + return hasher.Hash() +} diff --git a/core/types/hashing_test.go b/core/types/hashing_test.go new file mode 100644 index 00000000..294a3977 --- /dev/null +++ b/core/types/hashing_test.go @@ -0,0 +1,229 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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_test + +import ( + "bytes" + "fmt" + "io" + "math/big" + mrand "math/rand" + "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/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +func TestDeriveSha(t *testing.T) { + txs, err := genTxs(0) + if err != nil { + t.Fatal(err) + } + for len(txs) < 1000 { + exp := types.DeriveSha(txs, trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase()))) + got := types.DeriveSha(txs, trie.NewStackTrie(nil)) + if !bytes.Equal(got[:], exp[:]) { + t.Fatalf("%d txs: got %x exp %x", len(txs), got, exp) + } + newTxs, err := genTxs(uint64(len(txs) + 1)) + if err != nil { + t.Fatal(err) + } + txs = append(txs, newTxs...) + } +} + +// TestEIP2718DeriveSha tests that the input to the DeriveSha function is correct. +func TestEIP2718DeriveSha(t *testing.T) { + for _, tc := range []struct { + rlpData string + exp string + }{ + { + rlpData: "0xb8a701f8a486796f6c6f763380843b9aca008262d4948a8eafb1cf62bfbeb1741769dae1a9dd479961928080f838f7940000000000000000000000000000000000001337e1a0000000000000000000000000000000000000000000000000000000000000000080a0775101f92dcca278a56bfe4d613428624a1ebfc3cd9e0bcc1de80c41455b9021a06c9deac205afe7b124907d4ba54a9f46161498bd3990b90d175aac12c9a40ee9", + exp: "01 01f8a486796f6c6f763380843b9aca008262d4948a8eafb1cf62bfbeb1741769dae1a9dd479961928080f838f7940000000000000000000000000000000000001337e1a0000000000000000000000000000000000000000000000000000000000000000080a0775101f92dcca278a56bfe4d613428624a1ebfc3cd9e0bcc1de80c41455b9021a06c9deac205afe7b124907d4ba54a9f46161498bd3990b90d175aac12c9a40ee9\n80 01f8a486796f6c6f763380843b9aca008262d4948a8eafb1cf62bfbeb1741769dae1a9dd479961928080f838f7940000000000000000000000000000000000001337e1a0000000000000000000000000000000000000000000000000000000000000000080a0775101f92dcca278a56bfe4d613428624a1ebfc3cd9e0bcc1de80c41455b9021a06c9deac205afe7b124907d4ba54a9f46161498bd3990b90d175aac12c9a40ee9\n", + }, + } { + d := &hashToHumanReadable{} + var t1, t2 types.Transaction + rlp.DecodeBytes(common.FromHex(tc.rlpData), &t1) + rlp.DecodeBytes(common.FromHex(tc.rlpData), &t2) + txs := types.Transactions{&t1, &t2} + types.DeriveSha(txs, d) + if tc.exp != string(d.data) { + t.Fatalf("Want\n%v\nhave:\n%v", tc.exp, string(d.data)) + } + } +} + +func BenchmarkDeriveSha200(b *testing.B) { + txs, err := genTxs(200) + if err != nil { + b.Fatal(err) + } + var exp common.Hash + var got common.Hash + b.Run("std_trie", func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + exp = types.DeriveSha(txs, trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase()))) + } + }) + + b.Run("stack_trie", func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + got = types.DeriveSha(txs, trie.NewStackTrie(nil)) + } + }) + if got != exp { + b.Errorf("got %x exp %x", got, exp) + } +} + +func TestFuzzDeriveSha(t *testing.T) { + // increase this for longer runs -- it's set to quite low for travis + rndSeed := mrand.Int() + for i := 0; i < 10; i++ { + seed := rndSeed + i + exp := types.DeriveSha(newDummy(i), trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase()))) + got := types.DeriveSha(newDummy(i), trie.NewStackTrie(nil)) + if !bytes.Equal(got[:], exp[:]) { + printList(newDummy(seed)) + t.Fatalf("seed %d: got %x exp %x", seed, got, exp) + } + } +} + +// TestDerivableList contains testcases found via fuzzing +func TestDerivableList(t *testing.T) { + type tcase []string + tcs := []tcase{ + { + "0xc041", + }, + { + "0xf04cf757812428b0763112efb33b6f4fad7deb445e", + "0xf04cf757812428b0763112efb33b6f4fad7deb445e", + }, + { + "0xca410605310cdc3bb8d4977ae4f0143df54a724ed873457e2272f39d66e0460e971d9d", + "0x6cd850eca0a7ac46bb1748d7b9cb88aa3bd21c57d852c28198ad8fa422c4595032e88a4494b4778b36b944fe47a52b8c5cd312910139dfcb4147ab8e972cc456bcb063f25dd78f54c4d34679e03142c42c662af52947d45bdb6e555751334ace76a5080ab5a0256a1d259855dfc5c0b8023b25befbb13fd3684f9f755cbd3d63544c78ee2001452dd54633a7593ade0b183891a0a4e9c7844e1254005fbe592b1b89149a502c24b6e1dca44c158aebedf01beae9c30cabe16a", + "0x14abd5c47c0be87b0454596baad2", + "0xca410605310cdc3bb8d4977ae4f0143df54a724ed873457e2272f39d66e0460e971d9d", + }, + } + for i, tc := range tcs[1:] { + exp := types.DeriveSha(flatList(tc), trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase()))) + got := types.DeriveSha(flatList(tc), trie.NewStackTrie(nil)) + if !bytes.Equal(got[:], exp[:]) { + t.Fatalf("case %d: got %x exp %x", i, got, exp) + } + } +} + +func genTxs(num uint64) (types.Transactions, error) { + key, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef") + if err != nil { + return nil, err + } + var addr = crypto.PubkeyToAddress(key.PublicKey) + newTx := func(i uint64) (*types.Transaction, error) { + signer := types.NewEIP155Signer(big.NewInt(18)) + utx := types.NewTransaction(i, addr, new(big.Int), 0, new(big.Int).SetUint64(10000000), nil) + tx, err := types.SignTx(utx, signer, key) + return tx, err + } + var txs types.Transactions + for i := uint64(0); i < num; i++ { + tx, err := newTx(i) + if err != nil { + return nil, err + } + txs = append(txs, tx) + } + return txs, nil +} + +type dummyDerivableList struct { + len int + seed int +} + +func newDummy(seed int) *dummyDerivableList { + d := &dummyDerivableList{} + src := mrand.NewSource(int64(seed)) + // don't use lists longer than 4K items + d.len = int(src.Int63() & 0x0FFF) + d.seed = seed + return d +} + +func (d *dummyDerivableList) Len() int { + return d.len +} + +func (d *dummyDerivableList) EncodeIndex(i int, w *bytes.Buffer) { + src := mrand.NewSource(int64(d.seed + i)) + // max item size 256, at least 1 byte per item + size := 1 + src.Int63()&0x00FF + io.CopyN(w, mrand.New(src), size) +} + +func printList(l types.DerivableList) { + fmt.Printf("list length: %d\n", l.Len()) + fmt.Printf("{\n") + for i := 0; i < l.Len(); i++ { + var buf bytes.Buffer + l.EncodeIndex(i, &buf) + fmt.Printf("\"%#x\",\n", buf.Bytes()) + } + fmt.Printf("},\n") +} + +type flatList []string + +func (f flatList) Len() int { + return len(f) +} +func (f flatList) EncodeIndex(i int, w *bytes.Buffer) { + w.Write(hexutil.MustDecode(f[i])) +} + +type hashToHumanReadable struct { + data []byte +} + +func (d *hashToHumanReadable) Reset() { + d.data = make([]byte, 0) +} + +func (d *hashToHumanReadable) Update(i []byte, i2 []byte) { + l := fmt.Sprintf("%x %x\n", i, i2) + d.data = append(d.data, []byte(l)...) +} + +func (d *hashToHumanReadable) Hash() common.Hash { + return common.Hash{} +} diff --git a/core/types/legacy.go b/core/types/legacy.go new file mode 100644 index 00000000..14ed30d8 --- /dev/null +++ b/core/types/legacy.go @@ -0,0 +1,53 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + + "github.com/ethereum/go-ethereum/rlp" +) + +// IsLegacyStoredReceipts tries to parse the RLP-encoded blob +// first as an array of v3 stored receipt, then v4 stored receipt and +// returns true if successful. +func IsLegacyStoredReceipts(raw []byte) (bool, error) { + var v3 []v3StoredReceiptRLP + if err := rlp.DecodeBytes(raw, &v3); err == nil { + return true, nil + } + var v4 []v4StoredReceiptRLP + if err := rlp.DecodeBytes(raw, &v4); err == nil { + return true, nil + } + var v5 []storedReceiptRLP + // Check to see valid fresh stored receipt + if err := rlp.DecodeBytes(raw, &v5); err == nil { + return false, nil + } + return false, errors.New("value is not a valid receipt encoding") +} + +// ConvertLegacyStoredReceipts takes the RLP encoding of an array of legacy +// stored receipts and returns a fresh RLP-encoded stored receipt. +func ConvertLegacyStoredReceipts(raw []byte) ([]byte, error) { + var receipts []ReceiptForStorage + if err := rlp.DecodeBytes(raw, &receipts); err != nil { + return nil, err + } + return rlp.EncodeToBytes(&receipts) +} diff --git a/core/types/legacy_tx.go b/core/types/legacy_tx.go new file mode 100644 index 00000000..14d30782 --- /dev/null +++ b/core/types/legacy_tx.go @@ -0,0 +1,112 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +// LegacyTx is the transaction data of regular Ethereum transactions. +type LegacyTx struct { + Nonce uint64 // nonce of sender account + GasPrice *big.Int // wei per gas + Gas uint64 // gas limit + To *common.Address `rlp:"nil"` // nil means contract creation + Value *big.Int // wei amount + Data []byte // contract invocation input data + V, R, S *big.Int // signature values +} + +// NewTransaction creates an unsigned legacy transaction. +// Deprecated: use NewTx instead. +func NewTransaction(nonce uint64, to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction { + return NewTx(&LegacyTx{ + Nonce: nonce, + To: &to, + Value: amount, + Gas: gasLimit, + GasPrice: gasPrice, + Data: data, + }) +} + +// NewContractCreation creates an unsigned legacy transaction. +// Deprecated: use NewTx instead. +func NewContractCreation(nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction { + return NewTx(&LegacyTx{ + Nonce: nonce, + Value: amount, + Gas: gasLimit, + GasPrice: gasPrice, + Data: data, + }) +} + +// copy creates a deep copy of the transaction data and initializes all fields. +func (tx *LegacyTx) copy() TxData { + cpy := &LegacyTx{ + Nonce: tx.Nonce, + To: copyAddressPtr(tx.To), + Data: common.CopyBytes(tx.Data), + Gas: tx.Gas, + // These are initialized below. + Value: new(big.Int), + GasPrice: new(big.Int), + V: new(big.Int), + R: new(big.Int), + S: new(big.Int), + } + if tx.Value != nil { + cpy.Value.Set(tx.Value) + } + if tx.GasPrice != nil { + cpy.GasPrice.Set(tx.GasPrice) + } + if tx.V != nil { + cpy.V.Set(tx.V) + } + if tx.R != nil { + cpy.R.Set(tx.R) + } + if tx.S != nil { + cpy.S.Set(tx.S) + } + return cpy +} + +// accessors for innerTx. +func (tx *LegacyTx) txType() byte { return LegacyTxType } +func (tx *LegacyTx) chainID() *big.Int { return deriveChainId(tx.V) } +func (tx *LegacyTx) accessList() AccessList { return nil } +func (tx *LegacyTx) data() []byte { return tx.Data } +func (tx *LegacyTx) gas() uint64 { return tx.Gas } +func (tx *LegacyTx) gasPrice() *big.Int { return tx.GasPrice } +func (tx *LegacyTx) gasTipCap() *big.Int { return tx.GasPrice } +func (tx *LegacyTx) gasFeeCap() *big.Int { return tx.GasPrice } +func (tx *LegacyTx) value() *big.Int { return tx.Value } +func (tx *LegacyTx) nonce() uint64 { return tx.Nonce } +func (tx *LegacyTx) to() *common.Address { return tx.To } + +func (tx *LegacyTx) rawSignatureValues() (v, r, s *big.Int) { + return tx.V, tx.R, tx.S +} + +func (tx *LegacyTx) setSignatureValues(chainID, v, r, s *big.Int) { + tx.V, tx.R, tx.S = v, r, s +} diff --git a/core/types/log.go b/core/types/log.go index 2216c1d3..eb30957b 100644 --- a/core/types/log.go +++ b/core/types/log.go @@ -19,12 +19,12 @@ package types import ( "io" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/rlp" ) -//go:generate gencodec -type Log -field-override logMarshaling -out gen_log_json.go +//go:generate go run github.com/fjl/gencodec -type Log -field-override logMarshaling -out gen_log_json.go // Log represents a contract log event. These events are generated by the LOG opcode and // stored/indexed by the node. @@ -44,11 +44,11 @@ type Log struct { // hash of the transaction TxHash common.Hash `json:"transactionHash" gencodec:"required"` // index of the transaction in the block - TxIndex uint `json:"transactionIndex" gencodec:"required"` + TxIndex uint `json:"transactionIndex"` // hash of the block in which the transaction was included BlockHash common.Hash `json:"blockHash"` // index of the log in the block - Index uint `json:"logIndex" gencodec:"required"` + Index uint `json:"logIndex"` // The Removed field is true if this log was reverted due to a chain reorganisation. // You must pay attention to this field if you receive logs through a filter query. @@ -62,15 +62,14 @@ type logMarshaling struct { Index hexutil.Uint } +//go:generate go run ../../rlp/rlpgen -type rlpLog -out gen_log_rlp.go + type rlpLog struct { Address common.Address Topics []common.Hash Data []byte } -// 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 @@ -85,7 +84,8 @@ type legacyRlpStorageLog struct { // EncodeRLP implements rlp.Encoder. func (l *Log) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, rlpLog{Address: l.Address, Topics: l.Topics, Data: l.Data}) + rl := rlpLog{Address: l.Address, Topics: l.Topics, Data: l.Data} + return rlp.Encode(w, &rl) } // DecodeRLP implements rlp.Decoder. @@ -98,17 +98,14 @@ func (l *Log) DecodeRLP(s *rlp.Stream) error { return err } -// LogForStorage is a wrapper around a Log that flattens and parses the entire content of -// a log including non-consensus fields. +// LogForStorage is a wrapper around a Log that handles +// backward compatibility with prior storage formats. 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, - }) + rl := rlpLog{Address: l.Address, Topics: l.Topics, Data: l.Data} + return rlp.Encode(w, &rl) } // DecodeRLP implements rlp.Decoder. @@ -119,7 +116,7 @@ func (l *LogForStorage) DecodeRLP(s *rlp.Stream) error { if err != nil { return err } - var dec rlpStorageLog + var dec rlpLog err = rlp.DecodeBytes(blob, &dec) if err == nil { *l = LogForStorage{ diff --git a/core/types/log_test.go b/core/types/log_test.go index 4ee94269..0e56acfe 100644 --- a/core/types/log_test.go +++ b/core/types/log_test.go @@ -22,9 +22,9 @@ import ( "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) var unmarshalLogTests = map[string]struct { diff --git a/core/types/receipt.go b/core/types/receipt.go index f5637c7d..bdf48451 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -24,20 +24,22 @@ import ( "math/big" "unsafe" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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" ) -//go:generate gencodec -type Receipt -field-override receiptMarshaling -out gen_receipt_json.go +//go:generate go run github.com/fjl/gencodec -type Receipt -field-override receiptMarshaling -out gen_receipt_json.go var ( receiptStatusFailedRLP = []byte{} receiptStatusSuccessfulRLP = []byte{0x01} ) +var errShortTypedReceipt = errors.New("typed receipt too short") + const ( // ReceiptStatusFailed is the status code of a transaction if execution failed. ReceiptStatusFailed = uint64(0) @@ -49,6 +51,7 @@ const ( // Receipt represents the results of a transaction. type Receipt struct { // Consensus fields: These fields are defined by the Yellow Paper + Type uint8 `json:"type,omitempty"` PostState []byte `json:"root"` Status uint64 `json:"status"` CumulativeGasUsed uint64 `json:"cumulativeGasUsed" gencodec:"required"` @@ -69,6 +72,7 @@ type Receipt struct { } type receiptMarshaling struct { + Type hexutil.Uint64 PostState hexutil.Bytes Status hexutil.Uint64 CumulativeGasUsed hexutil.Uint64 @@ -114,8 +118,13 @@ type v3StoredReceiptRLP struct { } // NewReceipt creates a barebone transaction receipt, copying the init fields. +// Deprecated: create receipts using a struct literal instead. func NewReceipt(root []byte, failed bool, cumulativeGasUsed uint64) *Receipt { - r := &Receipt{PostState: common.CopyBytes(root), CumulativeGasUsed: cumulativeGasUsed} + r := &Receipt{ + Type: LegacyTxType, + PostState: common.CopyBytes(root), + CumulativeGasUsed: cumulativeGasUsed, + } if failed { r.Status = ReceiptStatusFailed } else { @@ -127,21 +136,100 @@ func NewReceipt(root []byte, failed bool, cumulativeGasUsed uint64) *Receipt { // EncodeRLP implements rlp.Encoder, and flattens the consensus fields of a receipt // into an RLP stream. If no post state is present, byzantium fork is assumed. func (r *Receipt) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, &receiptRLP{r.statusEncoding(), r.CumulativeGasUsed, r.Bloom, r.Logs}) + data := &receiptRLP{r.statusEncoding(), r.CumulativeGasUsed, r.Bloom, r.Logs} + if r.Type == LegacyTxType { + return rlp.Encode(w, data) + } + buf := encodeBufferPool.Get().(*bytes.Buffer) + defer encodeBufferPool.Put(buf) + buf.Reset() + if err := r.encodeTyped(data, buf); err != nil { + return err + } + return rlp.Encode(w, buf.Bytes()) +} + +// encodeTyped writes the canonical encoding of a typed receipt to w. +func (r *Receipt) encodeTyped(data *receiptRLP, w *bytes.Buffer) error { + w.WriteByte(r.Type) + return rlp.Encode(w, data) +} + +// MarshalBinary returns the consensus encoding of the receipt. +func (r *Receipt) MarshalBinary() ([]byte, error) { + if r.Type == LegacyTxType { + return rlp.EncodeToBytes(r) + } + data := &receiptRLP{r.statusEncoding(), r.CumulativeGasUsed, r.Bloom, r.Logs} + var buf bytes.Buffer + err := r.encodeTyped(data, &buf) + return buf.Bytes(), err } // DecodeRLP implements rlp.Decoder, and loads the consensus fields of a receipt // from an RLP stream. func (r *Receipt) DecodeRLP(s *rlp.Stream) error { - var dec receiptRLP - if err := s.Decode(&dec); err != nil { + kind, _, err := s.Kind() + switch { + case err != nil: return err + case kind == rlp.List: + // It's a legacy receipt. + var dec receiptRLP + if err := s.Decode(&dec); err != nil { + return err + } + r.Type = LegacyTxType + return r.setFromRLP(dec) + default: + // It's an EIP-2718 typed tx receipt. + b, err := s.Bytes() + if err != nil { + return err + } + return r.decodeTyped(b) } - if err := r.setStatus(dec.PostStateOrStatus); err != nil { - return err +} + +// UnmarshalBinary decodes the consensus encoding of receipts. +// It supports legacy RLP receipts and EIP-2718 typed receipts. +func (r *Receipt) UnmarshalBinary(b []byte) error { + if len(b) > 0 && b[0] > 0x7f { + // It's a legacy receipt decode the RLP + var data receiptRLP + err := rlp.DecodeBytes(b, &data) + if err != nil { + return err + } + r.Type = LegacyTxType + return r.setFromRLP(data) } - r.CumulativeGasUsed, r.Bloom, r.Logs = dec.CumulativeGasUsed, dec.Bloom, dec.Logs - return nil + // It's an EIP2718 typed transaction envelope. + return r.decodeTyped(b) +} + +// decodeTyped decodes a typed receipt from the canonical format. +func (r *Receipt) decodeTyped(b []byte) error { + if len(b) <= 1 { + return errShortTypedReceipt + } + switch b[0] { + case DynamicFeeTxType, AccessListTxType: + var data receiptRLP + err := rlp.DecodeBytes(b[1:], &data) + if err != nil { + return err + } + r.Type = b[0] + return r.setFromRLP(data) + default: + return ErrTxTypeNotSupported + } +} + +func (r *Receipt) setFromRLP(data receiptRLP) error { + r.CumulativeGasUsed, r.Bloom, r.Logs = data.CumulativeGasUsed, data.Bloom, data.Logs + return r.setStatus(data.PostStateOrStatus) } func (r *Receipt) setStatus(postStateOrStatus []byte) error { @@ -172,7 +260,6 @@ func (r *Receipt) statusEncoding() []byte { // to approximate and limit the memory consumption of various caches. func (r *Receipt) Size() common.StorageSize { size := common.StorageSize(unsafe.Sizeof(*r)) + common.StorageSize(len(r.PostState)) - size += common.StorageSize(len(r.Logs)) * common.StorageSize(unsafe.Sizeof(Log{})) for _, log := range r.Logs { size += common.StorageSize(len(log.Topics)*common.HashLength + len(log.Data)) @@ -180,22 +267,26 @@ func (r *Receipt) Size() common.StorageSize { return size } -// ReceiptForStorage is a wrapper around a Receipt that flattens and parses the -// entire content of a receipt, as opposed to only the consensus fields originally. +// ReceiptForStorage is a wrapper around a Receipt with RLP serialization +// that omits the Bloom field and deserialization that re-computes it. 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 := &storedReceiptRLP{ - PostStateOrStatus: (*Receipt)(r).statusEncoding(), - CumulativeGasUsed: r.CumulativeGasUsed, - Logs: make([]*LogForStorage, len(r.Logs)), - } - for i, log := range r.Logs { - enc.Logs[i] = (*LogForStorage)(log) +func (r *ReceiptForStorage) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + outerList := w.List() + w.WriteBytes((*Receipt)(r).statusEncoding()) + w.WriteUint64(r.CumulativeGasUsed) + logList := w.List() + for _, log := range r.Logs { + if err := rlp.Encode(w, log); err != nil { + return err + } } - return rlp.Encode(w, enc) + w.ListEnd(logList) + w.ListEnd(outerList) + return w.Flush() } // DecodeRLP implements rlp.Decoder, and loads both consensus and implementation @@ -277,58 +368,70 @@ func decodeV3StoredReceiptRLP(r *ReceiptForStorage, blob []byte) error { return nil } -// Receipts is a wrapper around a Receipt array to implement DerivableList. +// Receipts implements DerivableList for receipts. type Receipts []*Receipt // Len returns the number of receipts in this list. -func (r Receipts) Len() int { return len(r) } - -// GetRlp returns the RLP encoding of one receipt from the list. -func (r Receipts) GetRlp(i int) []byte { - bytes, err := rlp.EncodeToBytes(r[i]) - if err != nil { - panic(err) +func (rs Receipts) Len() int { return len(rs) } + +// EncodeIndex encodes the i'th receipt to w. +func (rs Receipts) EncodeIndex(i int, w *bytes.Buffer) { + r := rs[i] + data := &receiptRLP{r.statusEncoding(), r.CumulativeGasUsed, r.Bloom, r.Logs} + switch r.Type { + case LegacyTxType: + rlp.Encode(w, data) + case AccessListTxType: + w.WriteByte(AccessListTxType) + rlp.Encode(w, data) + case DynamicFeeTxType: + w.WriteByte(DynamicFeeTxType) + rlp.Encode(w, data) + default: + // For unsupported types, write nothing. Since this is for + // DeriveSha, the error will be caught matching the derived hash + // to the block. } - 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 { +func (rs 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) { + if len(txs) != len(rs) { 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() + for i := 0; i < len(rs); i++ { + // The transaction type and hash can be retrieved from the transaction itself + rs[i].Type = txs[i].Type() + rs[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) + rs[i].BlockHash = hash + rs[i].BlockNumber = new(big.Int).SetUint64(number) + rs[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()) + rs[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 + rs[i].GasUsed = rs[i].CumulativeGasUsed } else { - r[i].GasUsed = r[i].CumulativeGasUsed - r[i-1].CumulativeGasUsed + rs[i].GasUsed = rs[i].CumulativeGasUsed - rs[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 + for j := 0; j < len(rs[i].Logs); j++ { + rs[i].Logs[j].BlockNumber = number + rs[i].Logs[j].BlockHash = hash + rs[i].Logs[j].TxHash = rs[i].TxHash + rs[i].Logs[j].TxIndex = uint(i) + rs[i].Logs[j].Index = logIndex logIndex++ } } diff --git a/core/types/receipt_test.go b/core/types/receipt_test.go index 26a77ab4..bba18d2a 100644 --- a/core/types/receipt_test.go +++ b/core/types/receipt_test.go @@ -23,12 +23,74 @@ import ( "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" ) +var ( + legacyReceipt = &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}, + }, + }, + } + accessListReceipt = &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}, + }, + }, + Type: AccessListTxType, + } + eip1559Receipt = &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}, + }, + }, + Type: DynamicFeeTxType, + } +) + +func TestDecodeEmptyTypedReceipt(t *testing.T) { + input := []byte{0x80} + var r Receipt + err := rlp.DecodeBytes(input, &r) + if err != errShortTypedReceipt { + t.Fatal("wrong error:", err) + } +} + func TestLegacyReceiptDecoding(t *testing.T) { tests := []struct { name string @@ -154,9 +216,29 @@ func encodeAsV3StoredReceiptRLP(want *Receipt) ([]byte, error) { // 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 + to2 := common.HexToAddress("0x2") + to3 := common.HexToAddress("0x3") 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), + NewTx(&LegacyTx{ + Nonce: 1, + Value: big.NewInt(1), + Gas: 1, + GasPrice: big.NewInt(1), + }), + NewTx(&LegacyTx{ + To: &to2, + Nonce: 2, + Value: big.NewInt(2), + Gas: 2, + GasPrice: big.NewInt(2), + }), + NewTx(&AccessListTx{ + To: &to3, + Nonce: 3, + Value: big.NewInt(3), + Gas: 3, + GasPrice: big.NewInt(3), + }), } // Create the corresponding receipts receipts := Receipts{ @@ -182,6 +264,18 @@ func TestDeriveFields(t *testing.T) { ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}), GasUsed: 2, }, + &Receipt{ + Type: AccessListTxType, + PostState: common.Hash{3}.Bytes(), + CumulativeGasUsed: 6, + Logs: []*Log{ + {Address: common.BytesToAddress([]byte{0x33})}, + {Address: common.BytesToAddress([]byte{0x03, 0x33})}, + }, + TxHash: txs[2].Hash(), + ContractAddress: common.BytesToAddress([]byte{0x03, 0x33, 0x33}), + GasUsed: 3, + }, } // Clear all the computed fields and re-derive them number := big.NewInt(1) @@ -196,6 +290,9 @@ func TestDeriveFields(t *testing.T) { logIndex := uint(0) for i := range receipts { + if receipts[i].Type != txs[i].Type() { + t.Errorf("receipts[%d].Type = %d, want %d", i, receipts[i].Type, txs[i].Type()) + } if receipts[i].TxHash != txs[i].Hash() { t.Errorf("receipts[%d].TxHash = %s, want %s", i, receipts[i].TxHash.String(), txs[i].Hash().String()) } @@ -229,9 +326,6 @@ func TestDeriveFields(t *testing.T) { 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) } @@ -243,6 +337,133 @@ func TestDeriveFields(t *testing.T) { } } +// TestTypedReceiptEncodingDecoding reproduces a flaw that existed in the receipt +// rlp decoder, which failed due to a shadowing error. +func TestTypedReceiptEncodingDecoding(t *testing.T) { + var payload = common.FromHex("f9043eb9010c01f90108018262d4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0b9010c01f901080182cd14b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0b9010d01f901090183013754b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0b9010d01f90109018301a194b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0") + check := func(bundle []*Receipt) { + t.Helper() + for i, receipt := range bundle { + if got, want := receipt.Type, uint8(1); got != want { + t.Fatalf("bundle %d: got %x, want %x", i, got, want) + } + } + } + { + var bundle []*Receipt + rlp.DecodeBytes(payload, &bundle) + check(bundle) + } + { + var bundle []*Receipt + r := bytes.NewReader(payload) + s := rlp.NewStream(r, uint64(len(payload))) + if err := s.Decode(&bundle); err != nil { + t.Fatal(err) + } + check(bundle) + } +} + +func TestReceiptMarshalBinary(t *testing.T) { + // Legacy Receipt + legacyReceipt.Bloom = CreateBloom(Receipts{legacyReceipt}) + have, err := legacyReceipt.MarshalBinary() + if err != nil { + t.Fatalf("marshal binary error: %v", err) + } + legacyReceipts := Receipts{legacyReceipt} + buf := new(bytes.Buffer) + legacyReceipts.EncodeIndex(0, buf) + haveEncodeIndex := buf.Bytes() + if !bytes.Equal(have, haveEncodeIndex) { + t.Errorf("BinaryMarshal and EncodeIndex mismatch, got %x want %x", have, haveEncodeIndex) + } + buf.Reset() + if err := legacyReceipt.EncodeRLP(buf); err != nil { + t.Fatalf("encode rlp error: %v", err) + } + haveRLPEncode := buf.Bytes() + if !bytes.Equal(have, haveRLPEncode) { + t.Errorf("BinaryMarshal and EncodeRLP mismatch for legacy tx, got %x want %x", have, haveRLPEncode) + } + legacyWant := common.FromHex("f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + if !bytes.Equal(have, legacyWant) { + t.Errorf("encoded RLP mismatch, got %x want %x", have, legacyWant) + } + + // 2930 Receipt + buf.Reset() + accessListReceipt.Bloom = CreateBloom(Receipts{accessListReceipt}) + have, err = accessListReceipt.MarshalBinary() + if err != nil { + t.Fatalf("marshal binary error: %v", err) + } + accessListReceipts := Receipts{accessListReceipt} + accessListReceipts.EncodeIndex(0, buf) + haveEncodeIndex = buf.Bytes() + if !bytes.Equal(have, haveEncodeIndex) { + t.Errorf("BinaryMarshal and EncodeIndex mismatch, got %x want %x", have, haveEncodeIndex) + } + accessListWant := common.FromHex("01f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + if !bytes.Equal(have, accessListWant) { + t.Errorf("encoded RLP mismatch, got %x want %x", have, accessListWant) + } + + // 1559 Receipt + buf.Reset() + eip1559Receipt.Bloom = CreateBloom(Receipts{eip1559Receipt}) + have, err = eip1559Receipt.MarshalBinary() + if err != nil { + t.Fatalf("marshal binary error: %v", err) + } + eip1559Receipts := Receipts{eip1559Receipt} + eip1559Receipts.EncodeIndex(0, buf) + haveEncodeIndex = buf.Bytes() + if !bytes.Equal(have, haveEncodeIndex) { + t.Errorf("BinaryMarshal and EncodeIndex mismatch, got %x want %x", have, haveEncodeIndex) + } + eip1559Want := common.FromHex("02f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + if !bytes.Equal(have, eip1559Want) { + t.Errorf("encoded RLP mismatch, got %x want %x", have, eip1559Want) + } +} + +func TestReceiptUnmarshalBinary(t *testing.T) { + // Legacy Receipt + legacyBinary := common.FromHex("f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + gotLegacyReceipt := new(Receipt) + if err := gotLegacyReceipt.UnmarshalBinary(legacyBinary); err != nil { + t.Fatalf("unmarshal binary error: %v", err) + } + legacyReceipt.Bloom = CreateBloom(Receipts{legacyReceipt}) + if !reflect.DeepEqual(gotLegacyReceipt, legacyReceipt) { + t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", gotLegacyReceipt, legacyReceipt) + } + + // 2930 Receipt + accessListBinary := common.FromHex("01f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + gotAccessListReceipt := new(Receipt) + if err := gotAccessListReceipt.UnmarshalBinary(accessListBinary); err != nil { + t.Fatalf("unmarshal binary error: %v", err) + } + accessListReceipt.Bloom = CreateBloom(Receipts{accessListReceipt}) + if !reflect.DeepEqual(gotAccessListReceipt, accessListReceipt) { + t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", gotAccessListReceipt, accessListReceipt) + } + + // 1559 Receipt + eip1559RctBinary := common.FromHex("02f901c58001b9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000080000000000000000000004000000000000000000000000000040000000000000000000000000000800000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f8bef85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff85d940000000000000000000000000000000000000111f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff") + got1559Receipt := new(Receipt) + if err := got1559Receipt.UnmarshalBinary(eip1559RctBinary); err != nil { + t.Fatalf("unmarshal binary error: %v", err) + } + eip1559Receipt.Bloom = CreateBloom(Receipts{eip1559Receipt}) + if !reflect.DeepEqual(got1559Receipt, eip1559Receipt) { + t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", got1559Receipt, eip1559Receipt) + } +} + func clearComputedFieldsOnReceipts(t *testing.T, receipts Receipts) { t.Helper() diff --git a/core/types/state_account.go b/core/types/state_account.go new file mode 100644 index 00000000..3b01be45 --- /dev/null +++ b/core/types/state_account.go @@ -0,0 +1,34 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +//go:generate go run ../../rlp/rlpgen -type StateAccount -out gen_account_rlp.go + +// StateAccount is the Ethereum consensus representation of accounts. +// These objects are stored in the main account trie. +type StateAccount struct { + Nonce uint64 + Balance *big.Int + Root common.Hash // merkle root of the storage trie + CodeHash []byte +} diff --git a/core/types/transaction.go b/core/types/transaction.go index 3c081e9c..715ede15 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -17,222 +17,373 @@ package types import ( + "bytes" "container/heap" "errors" "io" "math/big" "sync/atomic" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" ) -//go:generate gencodec -type txdata -field-override txdataMarshaling -out gen_tx_json.go - var ( - ErrInvalidSig = errors.New("invalid transaction v, r, s values") + ErrInvalidSig = errors.New("invalid transaction v, r, s values") + ErrUnexpectedProtection = errors.New("transaction type does not supported EIP-155 protected signatures") + ErrInvalidTxType = errors.New("transaction type not valid in this context") + ErrTxTypeNotSupported = errors.New("transaction type not supported") + ErrGasFeeCapTooLow = errors.New("fee cap less than base fee") + errShortTypedTx = errors.New("typed transaction too short") +) + +// Transaction types. +const ( + LegacyTxType = iota + AccessListTxType + DynamicFeeTxType ) +// Transaction is an Ethereum transaction. type Transaction struct { - data txdata + inner TxData // Consensus contents of a transaction + time time.Time // Time first seen locally (spam avoidance) + // caches hash atomic.Value size atomic.Value from atomic.Value } -type txdata struct { - AccountNonce uint64 `json:"nonce" gencodec:"required"` - Price *big.Int `json:"gasPrice" gencodec:"required"` - GasLimit uint64 `json:"gas" gencodec:"required"` - Recipient *common.Address `json:"to" rlp:"nil"` // nil means contract creation - Amount *big.Int `json:"value" gencodec:"required"` - Payload []byte `json:"input" gencodec:"required"` +// NewTx creates a new transaction. +func NewTx(inner TxData) *Transaction { + tx := new(Transaction) + tx.setDecoded(inner.copy(), 0) + return tx +} - // Signature values - V *big.Int `json:"v" gencodec:"required"` - R *big.Int `json:"r" gencodec:"required"` - S *big.Int `json:"s" gencodec:"required"` +// TxData is the underlying data of a transaction. +// +// This is implemented by DynamicFeeTx, LegacyTx and AccessListTx. +type TxData interface { + txType() byte // returns the type ID + copy() TxData // creates a deep copy and initializes all fields + + chainID() *big.Int + accessList() AccessList + data() []byte + gas() uint64 + gasPrice() *big.Int + gasTipCap() *big.Int + gasFeeCap() *big.Int + value() *big.Int + nonce() uint64 + to() *common.Address + + rawSignatureValues() (v, r, s *big.Int) + setSignatureValues(chainID, v, r, s *big.Int) +} - // This is only used when marshaling to JSON. - Hash *common.Hash `json:"hash" rlp:"-"` +// EncodeRLP implements rlp.Encoder +func (tx *Transaction) EncodeRLP(w io.Writer) error { + if tx.Type() == LegacyTxType { + return rlp.Encode(w, tx.inner) + } + // It's an EIP-2718 typed TX envelope. + buf := encodeBufferPool.Get().(*bytes.Buffer) + defer encodeBufferPool.Put(buf) + buf.Reset() + if err := tx.encodeTyped(buf); err != nil { + return err + } + return rlp.Encode(w, buf.Bytes()) } -type txdataMarshaling struct { - AccountNonce hexutil.Uint64 - Price *hexutil.Big - GasLimit hexutil.Uint64 - Amount *hexutil.Big - Payload hexutil.Bytes - V *hexutil.Big - R *hexutil.Big - S *hexutil.Big +// encodeTyped writes the canonical encoding of a typed transaction to w. +func (tx *Transaction) encodeTyped(w *bytes.Buffer) error { + w.WriteByte(tx.Type()) + return rlp.Encode(w, tx.inner) } -func NewTransaction(nonce uint64, to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction { - return newTransaction(nonce, &to, amount, gasLimit, gasPrice, data) +// MarshalBinary returns the canonical encoding of the transaction. +// For legacy transactions, it returns the RLP encoding. For EIP-2718 typed +// transactions, it returns the type and payload. +func (tx *Transaction) MarshalBinary() ([]byte, error) { + if tx.Type() == LegacyTxType { + return rlp.EncodeToBytes(tx.inner) + } + var buf bytes.Buffer + err := tx.encodeTyped(&buf) + return buf.Bytes(), err } -func NewContractCreation(nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction { - return newTransaction(nonce, nil, amount, gasLimit, gasPrice, data) +// DecodeRLP implements rlp.Decoder +func (tx *Transaction) DecodeRLP(s *rlp.Stream) error { + kind, size, err := s.Kind() + switch { + case err != nil: + return err + case kind == rlp.List: + // It's a legacy transaction. + var inner LegacyTx + err := s.Decode(&inner) + if err == nil { + tx.setDecoded(&inner, int(rlp.ListSize(size))) + } + return err + default: + // It's an EIP-2718 typed TX envelope. + var b []byte + if b, err = s.Bytes(); err != nil { + return err + } + inner, err := tx.decodeTyped(b) + if err == nil { + tx.setDecoded(inner, len(b)) + } + return err + } } -func newTransaction(nonce uint64, to *common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction { - if len(data) > 0 { - data = common.CopyBytes(data) +// UnmarshalBinary decodes the canonical encoding of transactions. +// It supports legacy RLP transactions and EIP2718 typed transactions. +func (tx *Transaction) UnmarshalBinary(b []byte) error { + if len(b) > 0 && b[0] > 0x7f { + // It's a legacy transaction. + var data LegacyTx + err := rlp.DecodeBytes(b, &data) + if err != nil { + return err + } + tx.setDecoded(&data, len(b)) + return nil } - d := txdata{ - AccountNonce: nonce, - Recipient: to, - Payload: data, - Amount: new(big.Int), - GasLimit: gasLimit, - Price: new(big.Int), - V: new(big.Int), - R: new(big.Int), - S: new(big.Int), + // It's an EIP2718 typed transaction envelope. + inner, err := tx.decodeTyped(b) + if err != nil { + return err } - if amount != nil { - d.Amount.Set(amount) + tx.setDecoded(inner, len(b)) + return nil +} + +// decodeTyped decodes a typed transaction from the canonical format. +func (tx *Transaction) decodeTyped(b []byte) (TxData, error) { + if len(b) <= 1 { + return nil, errShortTypedTx } - if gasPrice != nil { - d.Price.Set(gasPrice) + switch b[0] { + case AccessListTxType: + var inner AccessListTx + err := rlp.DecodeBytes(b[1:], &inner) + return &inner, err + case DynamicFeeTxType: + var inner DynamicFeeTx + err := rlp.DecodeBytes(b[1:], &inner) + return &inner, err + default: + return nil, ErrTxTypeNotSupported } - - return &Transaction{data: d} } -// ChainId returns which chain id this transaction was signed for (if at all) -func (tx *Transaction) ChainId() *big.Int { - return deriveChainId(tx.data.V) +// setDecoded sets the inner transaction and size after decoding. +func (tx *Transaction) setDecoded(inner TxData, size int) { + tx.inner = inner + tx.time = time.Now() + if size > 0 { + tx.size.Store(common.StorageSize(size)) + } } -// Protected returns whether the transaction is protected from replay protection. -func (tx *Transaction) Protected() bool { - return isProtectedV(tx.data.V) +func sanityCheckSignature(v *big.Int, r *big.Int, s *big.Int, maybeProtected bool) error { + if isProtectedV(v) && !maybeProtected { + return ErrUnexpectedProtection + } + + var plainV byte + if isProtectedV(v) { + chainID := deriveChainId(v).Uint64() + plainV = byte(v.Uint64() - 35 - 2*chainID) + } else if maybeProtected { + // Only EIP-155 signatures can be optionally protected. Since + // we determined this v value is not protected, it must be a + // raw 27 or 28. + plainV = byte(v.Uint64() - 27) + } else { + // If the signature is not optionally protected, we assume it + // must already be equal to the recovery id. + plainV = byte(v.Uint64()) + } + if !crypto.ValidateSignatureValues(plainV, r, s, false) { + return ErrInvalidSig + } + + return nil } func isProtectedV(V *big.Int) bool { if V.BitLen() <= 8 { v := V.Uint64() - return v != 27 && v != 28 + return v != 27 && v != 28 && v != 1 && v != 0 } // anything not 27 or 28 is considered protected return true } -// EncodeRLP implements rlp.Encoder -func (tx *Transaction) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, &tx.data) +// Protected says whether the transaction is replay-protected. +func (tx *Transaction) Protected() bool { + switch tx := tx.inner.(type) { + case *LegacyTx: + return tx.V != nil && isProtectedV(tx.V) + default: + return true + } } -// DecodeRLP implements rlp.Decoder -func (tx *Transaction) DecodeRLP(s *rlp.Stream) error { - _, size, _ := s.Kind() - err := s.Decode(&tx.data) - if err == nil { - tx.size.Store(common.StorageSize(rlp.ListSize(size))) - } +// Type returns the transaction type. +func (tx *Transaction) Type() uint8 { + return tx.inner.txType() +} - return err +// ChainId returns the EIP155 chain ID of the transaction. The return value will always be +// non-nil. For legacy transactions which are not replay-protected, the return value is +// zero. +func (tx *Transaction) ChainId() *big.Int { + return tx.inner.chainID() } -// MarshalJSON encodes the web3 RPC transaction format. -func (tx *Transaction) MarshalJSON() ([]byte, error) { - hash := tx.Hash() - data := tx.data - data.Hash = &hash - return data.MarshalJSON() +// Data returns the input data of the transaction. +func (tx *Transaction) Data() []byte { return tx.inner.data() } + +// AccessList returns the access list of the transaction. +func (tx *Transaction) AccessList() AccessList { return tx.inner.accessList() } + +// Gas returns the gas limit of the transaction. +func (tx *Transaction) Gas() uint64 { return tx.inner.gas() } + +// GasPrice returns the gas price of the transaction. +func (tx *Transaction) GasPrice() *big.Int { return new(big.Int).Set(tx.inner.gasPrice()) } + +// GasTipCap returns the gasTipCap per gas of the transaction. +func (tx *Transaction) GasTipCap() *big.Int { return new(big.Int).Set(tx.inner.gasTipCap()) } + +// GasFeeCap returns the fee cap per gas of the transaction. +func (tx *Transaction) GasFeeCap() *big.Int { return new(big.Int).Set(tx.inner.gasFeeCap()) } + +// Value returns the ether amount of the transaction. +func (tx *Transaction) Value() *big.Int { return new(big.Int).Set(tx.inner.value()) } + +// Nonce returns the sender account nonce of the transaction. +func (tx *Transaction) Nonce() uint64 { return tx.inner.nonce() } + +// To returns the recipient address of the transaction. +// For contract-creation transactions, To returns nil. +func (tx *Transaction) To() *common.Address { + return copyAddressPtr(tx.inner.to()) } -// UnmarshalJSON decodes the web3 RPC transaction format. -func (tx *Transaction) UnmarshalJSON(input []byte) error { - var dec txdata - if err := dec.UnmarshalJSON(input); err != nil { - return err - } +// Cost returns gas * gasPrice + value. +func (tx *Transaction) Cost() *big.Int { + total := new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64(tx.Gas())) + total.Add(total, tx.Value()) + return total +} - withSignature := dec.V.Sign() != 0 || dec.R.Sign() != 0 || dec.S.Sign() != 0 - if withSignature { - var V byte - if isProtectedV(dec.V) { - chainID := deriveChainId(dec.V).Uint64() - V = byte(dec.V.Uint64() - 35 - 2*chainID) - } else { - V = byte(dec.V.Uint64() - 27) - } - if !crypto.ValidateSignatureValues(V, dec.R, dec.S, false) { - return ErrInvalidSig - } +// 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.inner.rawSignatureValues() +} + +// GasFeeCapCmp compares the fee cap of two transactions. +func (tx *Transaction) GasFeeCapCmp(other *Transaction) int { + return tx.inner.gasFeeCap().Cmp(other.inner.gasFeeCap()) +} + +// GasFeeCapIntCmp compares the fee cap of the transaction against the given fee cap. +func (tx *Transaction) GasFeeCapIntCmp(other *big.Int) int { + return tx.inner.gasFeeCap().Cmp(other) +} + +// GasTipCapCmp compares the gasTipCap of two transactions. +func (tx *Transaction) GasTipCapCmp(other *Transaction) int { + return tx.inner.gasTipCap().Cmp(other.inner.gasTipCap()) +} + +// GasTipCapIntCmp compares the gasTipCap of the transaction against the given gasTipCap. +func (tx *Transaction) GasTipCapIntCmp(other *big.Int) int { + return tx.inner.gasTipCap().Cmp(other) +} + +// EffectiveGasTip returns the effective miner gasTipCap for the given base fee. +// Note: if the effective gasTipCap is negative, this method returns both error +// the actual negative value, _and_ ErrGasFeeCapTooLow +func (tx *Transaction) EffectiveGasTip(baseFee *big.Int) (*big.Int, error) { + if baseFee == nil { + return tx.GasTipCap(), nil + } + var err error + gasFeeCap := tx.GasFeeCap() + if gasFeeCap.Cmp(baseFee) == -1 { + err = ErrGasFeeCapTooLow } + return math.BigMin(tx.GasTipCap(), gasFeeCap.Sub(gasFeeCap, baseFee)), err +} - *tx = Transaction{data: dec} - return nil +// EffectiveGasTipValue is identical to EffectiveGasTip, but does not return an +// error in case the effective gasTipCap is negative +func (tx *Transaction) EffectiveGasTipValue(baseFee *big.Int) *big.Int { + effectiveTip, _ := tx.EffectiveGasTip(baseFee) + return effectiveTip } -func (tx *Transaction) Data() []byte { return common.CopyBytes(tx.data.Payload) } -func (tx *Transaction) Gas() uint64 { return tx.data.GasLimit } -func (tx *Transaction) GasPrice() *big.Int { return new(big.Int).Set(tx.data.Price) } -func (tx *Transaction) Value() *big.Int { return new(big.Int).Set(tx.data.Amount) } -func (tx *Transaction) Nonce() uint64 { return tx.data.AccountNonce } -func (tx *Transaction) CheckNonce() bool { return true } +// EffectiveGasTipCmp compares the effective gasTipCap of two transactions assuming the given base fee. +func (tx *Transaction) EffectiveGasTipCmp(other *Transaction, baseFee *big.Int) int { + if baseFee == nil { + return tx.GasTipCapCmp(other) + } + return tx.EffectiveGasTipValue(baseFee).Cmp(other.EffectiveGasTipValue(baseFee)) +} -// To returns the recipient address of the transaction. -// It returns nil if the transaction is a contract creation. -func (tx *Transaction) To() *common.Address { - if tx.data.Recipient == nil { - return nil +// EffectiveGasTipIntCmp compares the effective gasTipCap of a transaction to the given gasTipCap. +func (tx *Transaction) EffectiveGasTipIntCmp(other *big.Int, baseFee *big.Int) int { + if baseFee == nil { + return tx.GasTipCapIntCmp(other) } - to := *tx.data.Recipient - return &to + return tx.EffectiveGasTipValue(baseFee).Cmp(other) } -// Hash hashes the RLP encoding of tx. -// It uniquely identifies the transaction. +// Hash returns the transaction hash. func (tx *Transaction) Hash() common.Hash { if hash := tx.hash.Load(); hash != nil { return hash.(common.Hash) } - v := rlpHash(tx) - tx.hash.Store(v) - return v + + var h common.Hash + if tx.Type() == LegacyTxType { + h = rlpHash(tx.inner) + } else { + h = prefixedRlpHash(tx.Type(), tx.inner) + } + tx.hash.Store(h) + return h } // Size returns the true RLP encoded storage size of the transaction, either by -// encoding and returning it, or returning a previsouly cached value. +// encoding and returning it, or returning a previously cached value. func (tx *Transaction) Size() common.StorageSize { if size := tx.size.Load(); size != nil { return size.(common.StorageSize) } c := writeCounter(0) - rlp.Encode(&c, &tx.data) + rlp.Encode(&c, &tx.inner) tx.size.Store(common.StorageSize(c)) return common.StorageSize(c) } -// AsMessage returns the transaction as a core.Message. -// -// AsMessage requires a signer to derive the sender. -// -// XXX Rename message to something less arbitrary? -func (tx *Transaction) AsMessage(s Signer) (Message, error) { - msg := Message{ - nonce: tx.data.AccountNonce, - gasLimit: tx.data.GasLimit, - gasPrice: new(big.Int).Set(tx.data.Price), - to: tx.data.Recipient, - amount: tx.data.Amount, - data: tx.data.Payload, - checkNonce: true, - } - - var err error - msg.from, err = Sender(s, tx) - return msg, err -} - // WithSignature returns a new transaction with the given signature. // This signature needs to be in the [R || S || V] format where V is 0 or 1. func (tx *Transaction) WithSignature(signer Signer, sig []byte) (*Transaction, error) { @@ -240,37 +391,27 @@ func (tx *Transaction) WithSignature(signer Signer, sig []byte) (*Transaction, e if err != nil { return nil, err } - cpy := &Transaction{data: tx.data} - cpy.data.R, cpy.data.S, cpy.data.V = r, s, v - return cpy, nil -} - -// Cost returns amount + gasprice * gaslimit. -func (tx *Transaction) Cost() *big.Int { - total := new(big.Int).Mul(tx.data.Price, new(big.Int).SetUint64(tx.data.GasLimit)) - total.Add(total, tx.data.Amount) - return total + cpy := tx.inner.copy() + cpy.setSignatureValues(signer.ChainID(), v, r, s) + return &Transaction{inner: cpy, time: tx.time}, nil } -// 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 -} - -// Transactions is a Transaction slice type for basic sorting. +// Transactions implements DerivableList for transactions. type Transactions []*Transaction // Len returns the length of s. func (s Transactions) Len() int { return len(s) } -// Swap swaps the i'th and the j'th element in s. -func (s Transactions) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// GetRlp implements Rlpable and returns the i'th element of s in rlp. -func (s Transactions) GetRlp(i int) []byte { - enc, _ := rlp.EncodeToBytes(s[i]) - return enc +// EncodeIndex encodes the i'th transaction to w. Note that this does not check for errors +// because we assume that *Transaction will only ever contain valid txs that were either +// constructed by decoding or via public API in this package. +func (s Transactions) EncodeIndex(i int, w *bytes.Buffer) { + tx := s[i] + if tx.Type() == LegacyTxType { + rlp.Encode(w, tx.inner) + } else { + tx.encodeTyped(w) + } } // TxDifference returns a new set which is the difference between a and b. @@ -291,28 +432,74 @@ func TxDifference(a, b Transactions) Transactions { return keep } +// HashDifference returns a new set which is the difference between a and b. +func HashDifference(a, b []common.Hash) []common.Hash { + keep := make([]common.Hash, 0, len(a)) + + remove := make(map[common.Hash]struct{}) + for _, hash := range b { + remove[hash] = struct{}{} + } + + for _, hash := range a { + if _, ok := remove[hash]; !ok { + keep = append(keep, hash) + } + } + + return keep +} + // TxByNonce implements the sort interface to allow sorting a list of transactions // by their nonces. This is usually only useful for sorting transactions from a // single account, otherwise a nonce comparison doesn't make much sense. type TxByNonce Transactions func (s TxByNonce) Len() int { return len(s) } -func (s TxByNonce) Less(i, j int) bool { return s[i].data.AccountNonce < s[j].data.AccountNonce } +func (s TxByNonce) Less(i, j int) bool { return s[i].Nonce() < s[j].Nonce() } func (s TxByNonce) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -// TxByPrice implements both the sort and the heap interface, making it useful -// for all at once sorting as well as individually adding and removing elements. -type TxByPrice Transactions +// TxWithMinerFee wraps a transaction with its gas price or effective miner gasTipCap +type TxWithMinerFee struct { + tx *Transaction + minerFee *big.Int +} -func (s TxByPrice) Len() int { return len(s) } -func (s TxByPrice) Less(i, j int) bool { return s[i].data.Price.Cmp(s[j].data.Price) > 0 } -func (s TxByPrice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +// NewTxWithMinerFee creates a wrapped transaction, calculating the effective +// miner gasTipCap if a base fee is provided. +// Returns error in case of a negative effective miner gasTipCap. +func NewTxWithMinerFee(tx *Transaction, baseFee *big.Int) (*TxWithMinerFee, error) { + minerFee, err := tx.EffectiveGasTip(baseFee) + if err != nil { + return nil, err + } + return &TxWithMinerFee{ + tx: tx, + minerFee: minerFee, + }, nil +} -func (s *TxByPrice) Push(x interface{}) { - *s = append(*s, x.(*Transaction)) +// TxByPriceAndTime implements both the sort and the heap interface, making it useful +// for all at once sorting as well as individually adding and removing elements. +type TxByPriceAndTime []*TxWithMinerFee + +func (s TxByPriceAndTime) Len() int { return len(s) } +func (s TxByPriceAndTime) Less(i, j int) bool { + // If the prices are equal, use the time the transaction was first seen for + // deterministic sorting + cmp := s[i].minerFee.Cmp(s[j].minerFee) + if cmp == 0 { + return s[i].tx.time.Before(s[j].tx.time) + } + return cmp > 0 +} +func (s TxByPriceAndTime) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func (s *TxByPriceAndTime) Push(x interface{}) { + *s = append(*s, x.(*TxWithMinerFee)) } -func (s *TxByPrice) Pop() interface{} { +func (s *TxByPriceAndTime) Pop() interface{} { old := *s n := len(old) x := old[n-1] @@ -324,9 +511,10 @@ func (s *TxByPrice) Pop() interface{} { // transactions in a profit-maximizing sorted order, while supporting removing // entire batches of transactions for non-executable accounts. type TransactionsByPriceAndNonce struct { - txs map[common.Address]Transactions // Per account nonce-sorted list of transactions - heads TxByPrice // Next transaction for each unique account (price heap) - signer Signer // Signer for the set of transactions + txs map[common.Address]Transactions // Per account nonce-sorted list of transactions + heads TxByPriceAndTime // Next transaction for each unique account (price heap) + signer Signer // Signer for the set of transactions + baseFee *big.Int // Current base fee } // NewTransactionsByPriceAndNonce creates a transaction set that can retrieve @@ -334,25 +522,28 @@ type TransactionsByPriceAndNonce struct { // // Note, the input map is reowned so the caller should not interact any more with // if after providing it to the constructor. -func NewTransactionsByPriceAndNonce(signer Signer, txs map[common.Address]Transactions) *TransactionsByPriceAndNonce { - // Initialize a price based heap with the head transactions - heads := make(TxByPrice, 0, len(txs)) +func NewTransactionsByPriceAndNonce(signer Signer, txs map[common.Address]Transactions, baseFee *big.Int) *TransactionsByPriceAndNonce { + // Initialize a price and received time based heap with the head transactions + heads := make(TxByPriceAndTime, 0, len(txs)) for from, accTxs := range txs { - heads = append(heads, accTxs[0]) - // Ensure the sender address is from the signer acc, _ := Sender(signer, accTxs[0]) - txs[acc] = accTxs[1:] - if from != acc { + wrapped, err := NewTxWithMinerFee(accTxs[0], baseFee) + // Remove transaction if sender doesn't match from, or if wrapping fails. + if acc != from || err != nil { delete(txs, from) + continue } + heads = append(heads, wrapped) + txs[from] = accTxs[1:] } heap.Init(&heads) // Assemble and return the transaction set return &TransactionsByPriceAndNonce{ - txs: txs, - heads: heads, - signer: signer, + txs: txs, + heads: heads, + signer: signer, + baseFee: baseFee, } } @@ -361,18 +552,20 @@ func (t *TransactionsByPriceAndNonce) Peek() *Transaction { if len(t.heads) == 0 { return nil } - return t.heads[0] + return t.heads[0].tx } // Shift replaces the current best head with the next one from the same account. func (t *TransactionsByPriceAndNonce) Shift() { - acc, _ := Sender(t.signer, t.heads[0]) + acc, _ := Sender(t.signer, t.heads[0].tx) if txs, ok := t.txs[acc]; ok && len(txs) > 0 { - t.heads[0], t.txs[acc] = txs[0], txs[1:] - heap.Fix(&t.heads, 0) - } else { - heap.Pop(&t.heads) + if wrapped, err := NewTxWithMinerFee(txs[0], t.baseFee); err == nil { + t.heads[0], t.txs[acc] = wrapped, txs[1:] + heap.Fix(&t.heads, 0) + return + } } + heap.Pop(&t.heads) } // Pop removes the best transaction, *not* replacing it with the next one from @@ -392,11 +585,14 @@ type Message struct { amount *big.Int gasLimit uint64 gasPrice *big.Int + gasFeeCap *big.Int + gasTipCap *big.Int data []byte - checkNonce bool + accessList AccessList + isFake bool } -func NewMessage(from common.Address, to *common.Address, nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte, checkNonce bool) Message { +func NewMessage(from common.Address, to *common.Address, nonce uint64, amount *big.Int, gasLimit uint64, gasPrice, gasFeeCap, gasTipCap *big.Int, data []byte, accessList AccessList, isFake bool) Message { return Message{ from: from, to: to, @@ -404,16 +600,54 @@ func NewMessage(from common.Address, to *common.Address, nonce uint64, amount *b amount: amount, gasLimit: gasLimit, gasPrice: gasPrice, + gasFeeCap: gasFeeCap, + gasTipCap: gasTipCap, data: data, - checkNonce: checkNonce, + accessList: accessList, + isFake: isFake, + } +} + +// AsMessage returns the transaction as a core.Message. +func (tx *Transaction) AsMessage(s Signer, baseFee *big.Int) (Message, error) { + msg := Message{ + nonce: tx.Nonce(), + gasLimit: tx.Gas(), + gasPrice: new(big.Int).Set(tx.GasPrice()), + gasFeeCap: new(big.Int).Set(tx.GasFeeCap()), + gasTipCap: new(big.Int).Set(tx.GasTipCap()), + to: tx.To(), + amount: tx.Value(), + data: tx.Data(), + accessList: tx.AccessList(), + isFake: false, + } + // If baseFee provided, set gasPrice to effectiveGasPrice. + if baseFee != nil { + msg.gasPrice = math.BigMin(msg.gasPrice.Add(msg.gasTipCap, baseFee), msg.gasFeeCap) } + var err error + msg.from, err = Sender(s, tx) + return msg, err } -func (m Message) From() common.Address { return m.from } -func (m Message) To() *common.Address { return m.to } -func (m Message) GasPrice() *big.Int { return m.gasPrice } -func (m Message) Value() *big.Int { return m.amount } -func (m Message) Gas() uint64 { return m.gasLimit } -func (m Message) Nonce() uint64 { return m.nonce } -func (m Message) Data() []byte { return m.data } -func (m Message) CheckNonce() bool { return m.checkNonce } +func (m Message) From() common.Address { return m.from } +func (m Message) To() *common.Address { return m.to } +func (m Message) GasPrice() *big.Int { return m.gasPrice } +func (m Message) GasFeeCap() *big.Int { return m.gasFeeCap } +func (m Message) GasTipCap() *big.Int { return m.gasTipCap } +func (m Message) Value() *big.Int { return m.amount } +func (m Message) Gas() uint64 { return m.gasLimit } +func (m Message) Nonce() uint64 { return m.nonce } +func (m Message) Data() []byte { return m.data } +func (m Message) AccessList() AccessList { return m.accessList } +func (m Message) IsFake() bool { return m.isFake } + +// copyAddressPtr copies an address. +func copyAddressPtr(a *common.Address) *common.Address { + if a == nil { + return nil + } + cpy := *a + return &cpy +} diff --git a/core/types/transaction_marshalling.go b/core/types/transaction_marshalling.go new file mode 100644 index 00000000..aad31a5a --- /dev/null +++ b/core/types/transaction_marshalling.go @@ -0,0 +1,275 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "encoding/json" + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +// txJSON is the JSON representation of transactions. +type txJSON struct { + Type hexutil.Uint64 `json:"type"` + + // Common transaction fields: + Nonce *hexutil.Uint64 `json:"nonce"` + GasPrice *hexutil.Big `json:"gasPrice"` + MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"` + MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"` + Gas *hexutil.Uint64 `json:"gas"` + Value *hexutil.Big `json:"value"` + Data *hexutil.Bytes `json:"input"` + V *hexutil.Big `json:"v"` + R *hexutil.Big `json:"r"` + S *hexutil.Big `json:"s"` + To *common.Address `json:"to"` + + // Access list transaction fields: + ChainID *hexutil.Big `json:"chainId,omitempty"` + AccessList *AccessList `json:"accessList,omitempty"` + + // Only used for encoding: + Hash common.Hash `json:"hash"` +} + +// MarshalJSON marshals as JSON with a hash. +func (t *Transaction) MarshalJSON() ([]byte, error) { + var enc txJSON + // These are set for all tx types. + enc.Hash = t.Hash() + enc.Type = hexutil.Uint64(t.Type()) + + // Other fields are set conditionally depending on tx type. + switch tx := t.inner.(type) { + case *LegacyTx: + enc.Nonce = (*hexutil.Uint64)(&tx.Nonce) + enc.Gas = (*hexutil.Uint64)(&tx.Gas) + enc.GasPrice = (*hexutil.Big)(tx.GasPrice) + enc.Value = (*hexutil.Big)(tx.Value) + enc.Data = (*hexutil.Bytes)(&tx.Data) + enc.To = t.To() + enc.V = (*hexutil.Big)(tx.V) + enc.R = (*hexutil.Big)(tx.R) + enc.S = (*hexutil.Big)(tx.S) + case *AccessListTx: + enc.ChainID = (*hexutil.Big)(tx.ChainID) + enc.AccessList = &tx.AccessList + enc.Nonce = (*hexutil.Uint64)(&tx.Nonce) + enc.Gas = (*hexutil.Uint64)(&tx.Gas) + enc.GasPrice = (*hexutil.Big)(tx.GasPrice) + enc.Value = (*hexutil.Big)(tx.Value) + enc.Data = (*hexutil.Bytes)(&tx.Data) + enc.To = t.To() + enc.V = (*hexutil.Big)(tx.V) + enc.R = (*hexutil.Big)(tx.R) + enc.S = (*hexutil.Big)(tx.S) + case *DynamicFeeTx: + enc.ChainID = (*hexutil.Big)(tx.ChainID) + enc.AccessList = &tx.AccessList + enc.Nonce = (*hexutil.Uint64)(&tx.Nonce) + enc.Gas = (*hexutil.Uint64)(&tx.Gas) + enc.MaxFeePerGas = (*hexutil.Big)(tx.GasFeeCap) + enc.MaxPriorityFeePerGas = (*hexutil.Big)(tx.GasTipCap) + enc.Value = (*hexutil.Big)(tx.Value) + enc.Data = (*hexutil.Bytes)(&tx.Data) + enc.To = t.To() + enc.V = (*hexutil.Big)(tx.V) + enc.R = (*hexutil.Big)(tx.R) + enc.S = (*hexutil.Big)(tx.S) + } + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (t *Transaction) UnmarshalJSON(input []byte) error { + var dec txJSON + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + + // Decode / verify fields according to transaction type. + var inner TxData + switch dec.Type { + case LegacyTxType: + var itx LegacyTx + inner = &itx + if dec.To != nil { + itx.To = dec.To + } + if dec.Nonce == nil { + return errors.New("missing required field 'nonce' in transaction") + } + itx.Nonce = uint64(*dec.Nonce) + if dec.GasPrice == nil { + return errors.New("missing required field 'gasPrice' in transaction") + } + itx.GasPrice = (*big.Int)(dec.GasPrice) + if dec.Gas == nil { + return errors.New("missing required field 'gas' in transaction") + } + itx.Gas = uint64(*dec.Gas) + if dec.Value == nil { + return errors.New("missing required field 'value' in transaction") + } + itx.Value = (*big.Int)(dec.Value) + if dec.Data == nil { + return errors.New("missing required field 'input' in transaction") + } + itx.Data = *dec.Data + if dec.V == nil { + return errors.New("missing required field 'v' in transaction") + } + itx.V = (*big.Int)(dec.V) + if dec.R == nil { + return errors.New("missing required field 'r' in transaction") + } + itx.R = (*big.Int)(dec.R) + if dec.S == nil { + return errors.New("missing required field 's' in transaction") + } + itx.S = (*big.Int)(dec.S) + withSignature := itx.V.Sign() != 0 || itx.R.Sign() != 0 || itx.S.Sign() != 0 + if withSignature { + if err := sanityCheckSignature(itx.V, itx.R, itx.S, true); err != nil { + return err + } + } + + case AccessListTxType: + var itx AccessListTx + inner = &itx + // Access list is optional for now. + if dec.AccessList != nil { + itx.AccessList = *dec.AccessList + } + if dec.ChainID == nil { + return errors.New("missing required field 'chainId' in transaction") + } + itx.ChainID = (*big.Int)(dec.ChainID) + if dec.To != nil { + itx.To = dec.To + } + if dec.Nonce == nil { + return errors.New("missing required field 'nonce' in transaction") + } + itx.Nonce = uint64(*dec.Nonce) + if dec.GasPrice == nil { + return errors.New("missing required field 'gasPrice' in transaction") + } + itx.GasPrice = (*big.Int)(dec.GasPrice) + if dec.Gas == nil { + return errors.New("missing required field 'gas' in transaction") + } + itx.Gas = uint64(*dec.Gas) + if dec.Value == nil { + return errors.New("missing required field 'value' in transaction") + } + itx.Value = (*big.Int)(dec.Value) + if dec.Data == nil { + return errors.New("missing required field 'input' in transaction") + } + itx.Data = *dec.Data + if dec.V == nil { + return errors.New("missing required field 'v' in transaction") + } + itx.V = (*big.Int)(dec.V) + if dec.R == nil { + return errors.New("missing required field 'r' in transaction") + } + itx.R = (*big.Int)(dec.R) + if dec.S == nil { + return errors.New("missing required field 's' in transaction") + } + itx.S = (*big.Int)(dec.S) + withSignature := itx.V.Sign() != 0 || itx.R.Sign() != 0 || itx.S.Sign() != 0 + if withSignature { + if err := sanityCheckSignature(itx.V, itx.R, itx.S, false); err != nil { + return err + } + } + + case DynamicFeeTxType: + var itx DynamicFeeTx + inner = &itx + // Access list is optional for now. + if dec.AccessList != nil { + itx.AccessList = *dec.AccessList + } + if dec.ChainID == nil { + return errors.New("missing required field 'chainId' in transaction") + } + itx.ChainID = (*big.Int)(dec.ChainID) + if dec.To != nil { + itx.To = dec.To + } + if dec.Nonce == nil { + return errors.New("missing required field 'nonce' in transaction") + } + itx.Nonce = uint64(*dec.Nonce) + if dec.MaxPriorityFeePerGas == nil { + return errors.New("missing required field 'maxPriorityFeePerGas' for txdata") + } + itx.GasTipCap = (*big.Int)(dec.MaxPriorityFeePerGas) + if dec.MaxFeePerGas == nil { + return errors.New("missing required field 'maxFeePerGas' for txdata") + } + itx.GasFeeCap = (*big.Int)(dec.MaxFeePerGas) + if dec.Gas == nil { + return errors.New("missing required field 'gas' for txdata") + } + itx.Gas = uint64(*dec.Gas) + if dec.Value == nil { + return errors.New("missing required field 'value' in transaction") + } + itx.Value = (*big.Int)(dec.Value) + if dec.Data == nil { + return errors.New("missing required field 'input' in transaction") + } + itx.Data = *dec.Data + if dec.V == nil { + return errors.New("missing required field 'v' in transaction") + } + itx.V = (*big.Int)(dec.V) + if dec.R == nil { + return errors.New("missing required field 'r' in transaction") + } + itx.R = (*big.Int)(dec.R) + if dec.S == nil { + return errors.New("missing required field 's' in transaction") + } + itx.S = (*big.Int)(dec.S) + withSignature := itx.V.Sign() != 0 || itx.R.Sign() != 0 || itx.S.Sign() != 0 + if withSignature { + if err := sanityCheckSignature(itx.V, itx.R, itx.S, false); err != nil { + return err + } + } + + default: + return ErrTxTypeNotSupported + } + + // Now set the inner transaction. + t.setDecoded(inner, 0) + + // TODO: check hash here? + return nil +} diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go index 8c86b85b..1d0d2a4c 100644 --- a/core/types/transaction_signing.go +++ b/core/types/transaction_signing.go @@ -22,14 +22,12 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" ) -var ( - ErrInvalidChainId = errors.New("invalid chain id for signer") -) +var ErrInvalidChainId = errors.New("invalid chain id for signer") // sigCache is used to cache the derived sender and contains // the signer used to derive it. @@ -42,6 +40,10 @@ type sigCache struct { func MakeSigner(config *params.ChainConfig, blockNumber *big.Int) Signer { var signer Signer switch { + case config.IsLondon(blockNumber): + signer = NewLondonSigner(config.ChainID) + case config.IsBerlin(blockNumber): + signer = NewEIP2930Signer(config.ChainID) case config.IsEIP155(blockNumber): signer = NewEIP155Signer(config.ChainID) case config.IsHomestead(blockNumber): @@ -52,7 +54,43 @@ func MakeSigner(config *params.ChainConfig, blockNumber *big.Int) Signer { return signer } -// SignTx signs the transaction using the given signer and private key +// LatestSigner returns the 'most permissive' Signer available for the given chain +// configuration. Specifically, this enables support of EIP-155 replay protection and +// EIP-2930 access list transactions when their respective forks are scheduled to occur at +// any block number in the chain config. +// +// Use this in transaction-handling code where the current block number is unknown. If you +// have the current block number available, use MakeSigner instead. +func LatestSigner(config *params.ChainConfig) Signer { + if config.ChainID != nil { + if config.LondonBlock != nil { + return NewLondonSigner(config.ChainID) + } + if config.BerlinBlock != nil { + return NewEIP2930Signer(config.ChainID) + } + if config.EIP155Block != nil { + return NewEIP155Signer(config.ChainID) + } + } + return HomesteadSigner{} +} + +// LatestSignerForChainID returns the 'most permissive' Signer available. Specifically, +// this enables support for EIP-155 replay protection and all implemented EIP-2718 +// transaction types if chainID is non-nil. +// +// Use this in transaction-handling code where the current block number and fork +// configuration are unknown. If you have a ChainConfig, use LatestSigner instead. +// If you have a ChainConfig and know the current block number, use MakeSigner instead. +func LatestSignerForChainID(chainID *big.Int) Signer { + if chainID == nil { + return HomesteadSigner{} + } + return NewLondonSigner(chainID) +} + +// SignTx signs the transaction using the given signer and private key. func SignTx(tx *Transaction, s Signer, prv *ecdsa.PrivateKey) (*Transaction, error) { h := s.Hash(tx) sig, err := crypto.Sign(h[:], prv) @@ -62,6 +100,27 @@ func SignTx(tx *Transaction, s Signer, prv *ecdsa.PrivateKey) (*Transaction, err return tx.WithSignature(s, sig) } +// SignNewTx creates a transaction and signs it. +func SignNewTx(prv *ecdsa.PrivateKey, s Signer, txdata TxData) (*Transaction, error) { + tx := NewTx(txdata) + h := s.Hash(tx) + sig, err := crypto.Sign(h[:], prv) + if err != nil { + return nil, err + } + return tx.WithSignature(s, sig) +} + +// MustSignNewTx creates a transaction and signs it. +// This panics if the transaction cannot be signed. +func MustSignNewTx(prv *ecdsa.PrivateKey, s Signer, txdata TxData) *Transaction { + tx, err := SignNewTx(prv, s, txdata) + if err != nil { + panic(err) + } + return tx +} + // Sender returns the address derived from the signature (V, R, S) using secp256k1 // elliptic curve and an error if it failed deriving or upon an incorrect // signature. @@ -88,21 +147,190 @@ func Sender(signer Signer, tx *Transaction) (common.Address, error) { return addr, nil } -// Signer encapsulates transaction signature handling. Note that this interface is not a -// stable API and may change at any time to accommodate new protocol rules. +// Signer encapsulates transaction signature handling. The name of this type is slightly +// misleading because Signers don't actually sign, they're just for validating and +// processing of signatures. +// +// Note that this interface is not a stable API and may change at any time to accommodate +// new protocol rules. type Signer interface { // Sender returns the sender address of the transaction. Sender(tx *Transaction) (common.Address, error) + // SignatureValues returns the raw R, S, V values corresponding to the // given signature. SignatureValues(tx *Transaction, sig []byte) (r, s, v *big.Int, err error) - // Hash returns the hash to be signed. + ChainID() *big.Int + + // Hash returns 'signature hash', i.e. the transaction hash that is signed by the + // private key. This hash does not uniquely identify the transaction. Hash(tx *Transaction) common.Hash + // Equal returns true if the given signer is the same as the receiver. Equal(Signer) bool } -// EIP155Transaction implements Signer using the EIP155 rules. +type londonSigner struct{ eip2930Signer } + +// NewLondonSigner returns a signer that accepts +// - EIP-1559 dynamic fee transactions +// - EIP-2930 access list transactions, +// - EIP-155 replay protected transactions, and +// - legacy Homestead transactions. +func NewLondonSigner(chainId *big.Int) Signer { + return londonSigner{eip2930Signer{NewEIP155Signer(chainId)}} +} + +func (s londonSigner) Sender(tx *Transaction) (common.Address, error) { + if tx.Type() != DynamicFeeTxType { + return s.eip2930Signer.Sender(tx) + } + V, R, S := tx.RawSignatureValues() + // DynamicFee txs are defined to use 0 and 1 as their recovery + // id, add 27 to become equivalent to unprotected Homestead signatures. + V = new(big.Int).Add(V, big.NewInt(27)) + if tx.ChainId().Cmp(s.chainId) != 0 { + return common.Address{}, ErrInvalidChainId + } + return recoverPlain(s.Hash(tx), R, S, V, true) +} + +func (s londonSigner) Equal(s2 Signer) bool { + x, ok := s2.(londonSigner) + return ok && x.chainId.Cmp(s.chainId) == 0 +} + +func (s londonSigner) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big.Int, err error) { + txdata, ok := tx.inner.(*DynamicFeeTx) + if !ok { + return s.eip2930Signer.SignatureValues(tx, sig) + } + // Check that chain ID of tx matches the signer. We also accept ID zero here, + // because it indicates that the chain ID was not specified in the tx. + if txdata.ChainID.Sign() != 0 && txdata.ChainID.Cmp(s.chainId) != 0 { + return nil, nil, nil, ErrInvalidChainId + } + R, S, _ = decodeSignature(sig) + V = big.NewInt(int64(sig[64])) + return R, S, V, nil +} + +// Hash returns the hash to be signed by the sender. +// It does not uniquely identify the transaction. +func (s londonSigner) Hash(tx *Transaction) common.Hash { + if tx.Type() != DynamicFeeTxType { + return s.eip2930Signer.Hash(tx) + } + return prefixedRlpHash( + tx.Type(), + []interface{}{ + s.chainId, + tx.Nonce(), + tx.GasTipCap(), + tx.GasFeeCap(), + tx.Gas(), + tx.To(), + tx.Value(), + tx.Data(), + tx.AccessList(), + }) +} + +type eip2930Signer struct{ EIP155Signer } + +// NewEIP2930Signer returns a signer that accepts EIP-2930 access list transactions, +// EIP-155 replay protected transactions, and legacy Homestead transactions. +func NewEIP2930Signer(chainId *big.Int) Signer { + return eip2930Signer{NewEIP155Signer(chainId)} +} + +func (s eip2930Signer) ChainID() *big.Int { + return s.chainId +} + +func (s eip2930Signer) Equal(s2 Signer) bool { + x, ok := s2.(eip2930Signer) + return ok && x.chainId.Cmp(s.chainId) == 0 +} + +func (s eip2930Signer) Sender(tx *Transaction) (common.Address, error) { + V, R, S := tx.RawSignatureValues() + switch tx.Type() { + case LegacyTxType: + if !tx.Protected() { + return HomesteadSigner{}.Sender(tx) + } + V = new(big.Int).Sub(V, s.chainIdMul) + V.Sub(V, big8) + case AccessListTxType: + // AL txs are defined to use 0 and 1 as their recovery + // id, add 27 to become equivalent to unprotected Homestead signatures. + V = new(big.Int).Add(V, big.NewInt(27)) + default: + return common.Address{}, ErrTxTypeNotSupported + } + if tx.ChainId().Cmp(s.chainId) != 0 { + return common.Address{}, ErrInvalidChainId + } + return recoverPlain(s.Hash(tx), R, S, V, true) +} + +func (s eip2930Signer) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big.Int, err error) { + switch txdata := tx.inner.(type) { + case *LegacyTx: + return s.EIP155Signer.SignatureValues(tx, sig) + case *AccessListTx: + // Check that chain ID of tx matches the signer. We also accept ID zero here, + // because it indicates that the chain ID was not specified in the tx. + if txdata.ChainID.Sign() != 0 && txdata.ChainID.Cmp(s.chainId) != 0 { + return nil, nil, nil, ErrInvalidChainId + } + R, S, _ = decodeSignature(sig) + V = big.NewInt(int64(sig[64])) + default: + return nil, nil, nil, ErrTxTypeNotSupported + } + return R, S, V, nil +} + +// Hash returns the hash to be signed by the sender. +// It does not uniquely identify the transaction. +func (s eip2930Signer) Hash(tx *Transaction) common.Hash { + switch tx.Type() { + case LegacyTxType: + return rlpHash([]interface{}{ + tx.Nonce(), + tx.GasPrice(), + tx.Gas(), + tx.To(), + tx.Value(), + tx.Data(), + s.chainId, uint(0), uint(0), + }) + case AccessListTxType: + return prefixedRlpHash( + tx.Type(), + []interface{}{ + s.chainId, + tx.Nonce(), + tx.GasPrice(), + tx.Gas(), + tx.To(), + tx.Value(), + tx.Data(), + tx.AccessList(), + }) + default: + // This _should_ not happen, but in case someone sends in a bad + // json struct via RPC, it's probably more prudent to return an + // empty hash instead of killing the node with a panic + //panic("Unsupported transaction type: %d", tx.typ) + return common.Hash{} + } +} + +// EIP155Signer implements Signer using the EIP-155 rules. This accepts transactions which +// are replay-protected as well as unprotected homestead transactions. type EIP155Signer struct { chainId, chainIdMul *big.Int } @@ -117,6 +345,10 @@ func NewEIP155Signer(chainId *big.Int) EIP155Signer { } } +func (s EIP155Signer) ChainID() *big.Int { + return s.chainId +} + func (s EIP155Signer) Equal(s2 Signer) bool { eip155, ok := s2.(EIP155Signer) return ok && eip155.chainId.Cmp(s.chainId) == 0 @@ -125,24 +357,28 @@ func (s EIP155Signer) Equal(s2 Signer) bool { var big8 = big.NewInt(8) func (s EIP155Signer) Sender(tx *Transaction) (common.Address, error) { + if tx.Type() != LegacyTxType { + return common.Address{}, ErrTxTypeNotSupported + } if !tx.Protected() { return HomesteadSigner{}.Sender(tx) } if tx.ChainId().Cmp(s.chainId) != 0 { return common.Address{}, ErrInvalidChainId } - V := new(big.Int).Sub(tx.data.V, s.chainIdMul) + V, R, S := tx.RawSignatureValues() + V = new(big.Int).Sub(V, s.chainIdMul) V.Sub(V, big8) - return recoverPlain(s.Hash(tx), tx.data.R, tx.data.S, V, true) + return recoverPlain(s.Hash(tx), R, S, V, true) } // SignatureValues returns signature values. This signature // needs to be in the [R || S || V] format where V is 0 or 1. func (s EIP155Signer) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big.Int, err error) { - R, S, V, err = HomesteadSigner{}.SignatureValues(tx, sig) - if err != nil { - return nil, nil, nil, err + if tx.Type() != LegacyTxType { + return nil, nil, nil, ErrTxTypeNotSupported } + R, S, V = decodeSignature(sig) if s.chainId.Sign() != 0 { V = big.NewInt(int64(sig[64] + 35)) V.Add(V, s.chainIdMul) @@ -154,12 +390,12 @@ func (s EIP155Signer) SignatureValues(tx *Transaction, sig []byte) (R, S, V *big // It does not uniquely identify the transaction. func (s EIP155Signer) Hash(tx *Transaction) common.Hash { return rlpHash([]interface{}{ - tx.data.AccountNonce, - tx.data.Price, - tx.data.GasLimit, - tx.data.Recipient, - tx.data.Amount, - tx.data.Payload, + tx.Nonce(), + tx.GasPrice(), + tx.Gas(), + tx.To(), + tx.Value(), + tx.Data(), s.chainId, uint(0), uint(0), }) } @@ -168,6 +404,10 @@ func (s EIP155Signer) Hash(tx *Transaction) common.Hash { // homestead rules. type HomesteadSigner struct{ FrontierSigner } +func (s HomesteadSigner) ChainID() *big.Int { + return nil +} + func (s HomesteadSigner) Equal(s2 Signer) bool { _, ok := s2.(HomesteadSigner) return ok @@ -180,25 +420,39 @@ func (hs HomesteadSigner) SignatureValues(tx *Transaction, sig []byte) (r, s, v } func (hs HomesteadSigner) Sender(tx *Transaction) (common.Address, error) { - return recoverPlain(hs.Hash(tx), tx.data.R, tx.data.S, tx.data.V, true) + if tx.Type() != LegacyTxType { + return common.Address{}, ErrTxTypeNotSupported + } + v, r, s := tx.RawSignatureValues() + return recoverPlain(hs.Hash(tx), r, s, v, true) } type FrontierSigner struct{} +func (s FrontierSigner) ChainID() *big.Int { + return nil +} + func (s FrontierSigner) Equal(s2 Signer) bool { _, ok := s2.(FrontierSigner) return ok } +func (fs FrontierSigner) Sender(tx *Transaction) (common.Address, error) { + if tx.Type() != LegacyTxType { + return common.Address{}, ErrTxTypeNotSupported + } + v, r, s := tx.RawSignatureValues() + return recoverPlain(fs.Hash(tx), r, s, v, false) +} + // 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) != crypto.SignatureLength { - panic(fmt.Sprintf("wrong size for signature: got %d, want %d", len(sig), crypto.SignatureLength)) + if tx.Type() != LegacyTxType { + return nil, nil, nil, ErrTxTypeNotSupported } - r = new(big.Int).SetBytes(sig[:32]) - s = new(big.Int).SetBytes(sig[32:64]) - v = new(big.Int).SetBytes([]byte{sig[64] + 27}) + r, s, v = decodeSignature(sig) return r, s, v, nil } @@ -206,17 +460,23 @@ func (fs FrontierSigner) SignatureValues(tx *Transaction, sig []byte) (r, s, v * // It does not uniquely identify the transaction. func (fs FrontierSigner) Hash(tx *Transaction) common.Hash { return rlpHash([]interface{}{ - tx.data.AccountNonce, - tx.data.Price, - tx.data.GasLimit, - tx.data.Recipient, - tx.data.Amount, - tx.data.Payload, + tx.Nonce(), + tx.GasPrice(), + tx.Gas(), + tx.To(), + tx.Value(), + tx.Data(), }) } -func (fs FrontierSigner) Sender(tx *Transaction) (common.Address, error) { - return recoverPlain(fs.Hash(tx), tx.data.R, tx.data.S, tx.data.V, false) +func decodeSignature(sig []byte) (r, s, v *big.Int) { + 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]) + v = new(big.Int).SetBytes([]byte{sig[64] + 27}) + return r, s, v } func recoverPlain(sighash common.Hash, R, S, Vb *big.Int, homestead bool) (common.Address, error) { diff --git a/core/types/transaction_signing_test.go b/core/types/transaction_signing_test.go index 50b84a4f..1c775f12 100644 --- a/core/types/transaction_signing_test.go +++ b/core/types/transaction_signing_test.go @@ -20,9 +20,9 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" ) func TestEIP155Signing(t *testing.T) { @@ -111,7 +111,6 @@ func TestEIP155SigningVitalik(t *testing.T) { if from != addr { t.Errorf("%d: expected %x got %x", i, addr, from) } - } } diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index eeb5087d..67e5b3cc 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -20,17 +20,23 @@ import ( "bytes" "crypto/ecdsa" "encoding/json" + "fmt" "math/big" + "math/rand" + "reflect" "testing" + "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" ) // The values in those tests are from the Transaction Tests -// at github.com/Onther-Tech/tests. +// at github.com/ethereum/tests. var ( + testAddr = common.HexToAddress("b94f5374fce5edbc8e2a8697c15331677e6ebf0b") + emptyTx = NewTransaction( 0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), @@ -40,7 +46,7 @@ var ( rightvrsTx, _ = NewTransaction( 3, - common.HexToAddress("b94f5374fce5edbc8e2a8697c15331677e6ebf0b"), + testAddr, big.NewInt(10), 2000, big.NewInt(1), @@ -49,8 +55,32 @@ var ( HomesteadSigner{}, common.Hex2Bytes("98ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4a8887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a301"), ) + + emptyEip2718Tx = NewTx(&AccessListTx{ + ChainID: big.NewInt(1), + Nonce: 3, + To: &testAddr, + Value: big.NewInt(10), + Gas: 25000, + GasPrice: big.NewInt(1), + Data: common.FromHex("5544"), + }) + + signedEip2718Tx, _ = emptyEip2718Tx.WithSignature( + NewEIP2930Signer(big.NewInt(1)), + common.Hex2Bytes("c9519f4f2b30335884581971573fadf60c6204f59a911df35ee8a540456b266032f1e8e2c5dd761f9e4f88f41c8310aeaba26a8bfcdacfedfa12ec3862d3752101"), + ) ) +func TestDecodeEmptyTypedTx(t *testing.T) { + input := []byte{0x80} + var tx Transaction + err := rlp.DecodeBytes(input, &tx) + if err != errShortTypedTx { + t.Fatal("wrong error:", err) + } +} + func TestTransactionSigHash(t *testing.T) { var homestead HomesteadSigner if homestead.Hash(emptyTx) != common.HexToHash("c775b99e7ad12f50d819fcd602390467e28141316969f4b57f0626f74fe3b386") { @@ -72,10 +102,120 @@ func TestTransactionEncode(t *testing.T) { } } +func TestEIP2718TransactionSigHash(t *testing.T) { + s := NewEIP2930Signer(big.NewInt(1)) + if s.Hash(emptyEip2718Tx) != common.HexToHash("49b486f0ec0a60dfbbca2d30cb07c9e8ffb2a2ff41f29a1ab6737475f6ff69f3") { + t.Errorf("empty EIP-2718 transaction hash mismatch, got %x", s.Hash(emptyEip2718Tx)) + } + if s.Hash(signedEip2718Tx) != common.HexToHash("49b486f0ec0a60dfbbca2d30cb07c9e8ffb2a2ff41f29a1ab6737475f6ff69f3") { + t.Errorf("signed EIP-2718 transaction hash mismatch, got %x", s.Hash(signedEip2718Tx)) + } +} + +// This test checks signature operations on access list transactions. +func TestEIP2930Signer(t *testing.T) { + var ( + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + keyAddr = crypto.PubkeyToAddress(key.PublicKey) + signer1 = NewEIP2930Signer(big.NewInt(1)) + signer2 = NewEIP2930Signer(big.NewInt(2)) + tx0 = NewTx(&AccessListTx{Nonce: 1}) + tx1 = NewTx(&AccessListTx{ChainID: big.NewInt(1), Nonce: 1}) + tx2, _ = SignNewTx(key, signer2, &AccessListTx{ChainID: big.NewInt(2), Nonce: 1}) + ) + + tests := []struct { + tx *Transaction + signer Signer + wantSignerHash common.Hash + wantSenderErr error + wantSignErr error + wantHash common.Hash // after signing + }{ + { + tx: tx0, + signer: signer1, + wantSignerHash: common.HexToHash("846ad7672f2a3a40c1f959cd4a8ad21786d620077084d84c8d7c077714caa139"), + wantSenderErr: ErrInvalidChainId, + wantHash: common.HexToHash("1ccd12d8bbdb96ea391af49a35ab641e219b2dd638dea375f2bc94dd290f2549"), + }, + { + tx: tx1, + signer: signer1, + wantSenderErr: ErrInvalidSig, + wantSignerHash: common.HexToHash("846ad7672f2a3a40c1f959cd4a8ad21786d620077084d84c8d7c077714caa139"), + wantHash: common.HexToHash("1ccd12d8bbdb96ea391af49a35ab641e219b2dd638dea375f2bc94dd290f2549"), + }, + { + // This checks what happens when trying to sign an unsigned tx for the wrong chain. + tx: tx1, + signer: signer2, + wantSenderErr: ErrInvalidChainId, + wantSignerHash: common.HexToHash("367967247499343401261d718ed5aa4c9486583e4d89251afce47f4a33c33362"), + wantSignErr: ErrInvalidChainId, + }, + { + // This checks what happens when trying to re-sign a signed tx for the wrong chain. + tx: tx2, + signer: signer1, + wantSenderErr: ErrInvalidChainId, + wantSignerHash: common.HexToHash("846ad7672f2a3a40c1f959cd4a8ad21786d620077084d84c8d7c077714caa139"), + wantSignErr: ErrInvalidChainId, + }, + } + + for i, test := range tests { + sigHash := test.signer.Hash(test.tx) + if sigHash != test.wantSignerHash { + t.Errorf("test %d: wrong sig hash: got %x, want %x", i, sigHash, test.wantSignerHash) + } + sender, err := Sender(test.signer, test.tx) + if err != test.wantSenderErr { + t.Errorf("test %d: wrong Sender error %q", i, err) + } + if err == nil && sender != keyAddr { + t.Errorf("test %d: wrong sender address %x", i, sender) + } + signedTx, err := SignTx(test.tx, test.signer, key) + if err != test.wantSignErr { + t.Fatalf("test %d: wrong SignTx error %q", i, err) + } + if signedTx != nil { + if signedTx.Hash() != test.wantHash { + t.Errorf("test %d: wrong tx hash after signing: got %x, want %x", i, signedTx.Hash(), test.wantHash) + } + } + } +} + +func TestEIP2718TransactionEncode(t *testing.T) { + // RLP representation + { + have, err := rlp.EncodeToBytes(signedEip2718Tx) + if err != nil { + t.Fatalf("encode error: %v", err) + } + want := common.FromHex("b86601f8630103018261a894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a825544c001a0c9519f4f2b30335884581971573fadf60c6204f59a911df35ee8a540456b2660a032f1e8e2c5dd761f9e4f88f41c8310aeaba26a8bfcdacfedfa12ec3862d37521") + if !bytes.Equal(have, want) { + t.Errorf("encoded RLP mismatch, got %x", have) + } + } + // Binary representation + { + have, err := signedEip2718Tx.MarshalBinary() + if err != nil { + t.Fatalf("encode error: %v", err) + } + want := common.FromHex("01f8630103018261a894b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a825544c001a0c9519f4f2b30335884581971573fadf60c6204f59a911df35ee8a540456b2660a032f1e8e2c5dd761f9e4f88f41c8310aeaba26a8bfcdacfedfa12ec3862d37521") + if !bytes.Equal(have, want) { + t.Errorf("encoded RLP mismatch, got %x", have) + } + } +} + func decodeTx(data []byte) (*Transaction, error) { var tx Transaction t, err := &tx, rlp.Decode(bytes.NewReader(data), &tx) - return t, err } @@ -118,36 +258,77 @@ func TestRecipientNormal(t *testing.T) { } } +func TestTransactionPriceNonceSortLegacy(t *testing.T) { + testTransactionPriceNonceSort(t, nil) +} + +func TestTransactionPriceNonceSort1559(t *testing.T) { + testTransactionPriceNonceSort(t, big.NewInt(0)) + testTransactionPriceNonceSort(t, big.NewInt(5)) + testTransactionPriceNonceSort(t, big.NewInt(50)) +} + // Tests that transactions can be correctly sorted according to their price in // decreasing order, but at the same time with increasing nonces when issued by // the same account. -func TestTransactionPriceNonceSort(t *testing.T) { +func testTransactionPriceNonceSort(t *testing.T, baseFee *big.Int) { // Generate a batch of accounts to start with keys := make([]*ecdsa.PrivateKey, 25) for i := 0; i < len(keys); i++ { keys[i], _ = crypto.GenerateKey() } + signer := LatestSignerForChainID(common.Big1) - signer := HomesteadSigner{} // Generate a batch of transactions with overlapping values, but shifted nonces groups := map[common.Address]Transactions{} + expectedCount := 0 for start, key := range keys { addr := crypto.PubkeyToAddress(key.PublicKey) + count := 25 for i := 0; i < 25; i++ { - tx, _ := SignTx(NewTransaction(uint64(start+i), common.Address{}, big.NewInt(100), 100, big.NewInt(int64(start+i)), nil), signer, key) + var tx *Transaction + gasFeeCap := rand.Intn(50) + if baseFee == nil { + tx = NewTx(&LegacyTx{ + Nonce: uint64(start + i), + To: &common.Address{}, + Value: big.NewInt(100), + Gas: 100, + GasPrice: big.NewInt(int64(gasFeeCap)), + Data: nil, + }) + } else { + tx = NewTx(&DynamicFeeTx{ + Nonce: uint64(start + i), + To: &common.Address{}, + Value: big.NewInt(100), + Gas: 100, + GasFeeCap: big.NewInt(int64(gasFeeCap)), + GasTipCap: big.NewInt(int64(rand.Intn(gasFeeCap + 1))), + Data: nil, + }) + if count == 25 && int64(gasFeeCap) < baseFee.Int64() { + count = i + } + } + tx, err := SignTx(tx, signer, key) + if err != nil { + t.Fatalf("failed to sign tx: %s", err) + } groups[addr] = append(groups[addr], tx) } + expectedCount += count } // Sort the transactions and cross check the nonce ordering - txset := NewTransactionsByPriceAndNonce(signer, groups) + txset := NewTransactionsByPriceAndNonce(signer, groups, baseFee) txs := Transactions{} for tx := txset.Peek(); tx != nil; tx = txset.Peek() { txs = append(txs, tx) txset.Shift() } - if len(txs) != 25*25 { - t.Errorf("expected %d transactions, found %d", 25*25, len(txs)) + if len(txs) != expectedCount { + t.Errorf("expected %d transactions, found %d", expectedCount, len(txs)) } for i, txi := range txs { fromi, _ := Sender(signer, txi) @@ -155,67 +336,197 @@ func TestTransactionPriceNonceSort(t *testing.T) { // Make sure the nonce order is valid for j, txj := range txs[i+1:] { fromj, _ := Sender(signer, txj) - if fromi == fromj && txi.Nonce() > txj.Nonce() { t.Errorf("invalid nonce ordering: tx #%d (A=%x N=%v) < tx #%d (A=%x N=%v)", i, fromi[:4], txi.Nonce(), i+j, fromj[:4], txj.Nonce()) } } - // If the next tx has different from account, the price must be lower than the current one if i+1 < len(txs) { next := txs[i+1] fromNext, _ := Sender(signer, next) - if fromi != fromNext && txi.GasPrice().Cmp(next.GasPrice()) < 0 { + tip, err := txi.EffectiveGasTip(baseFee) + nextTip, nextErr := next.EffectiveGasTip(baseFee) + if err != nil || nextErr != nil { + t.Errorf("error calculating effective tip") + } + if fromi != fromNext && tip.Cmp(nextTip) < 0 { + t.Errorf("invalid gasprice ordering: tx #%d (A=%x P=%v) < tx #%d (A=%x P=%v)", i, fromi[:4], txi.GasPrice(), i+1, fromNext[:4], next.GasPrice()) + } + } + } +} + +// Tests that if multiple transactions have the same price, the ones seen earlier +// are prioritized to avoid network spam attacks aiming for a specific ordering. +func TestTransactionTimeSort(t *testing.T) { + // Generate a batch of accounts to start with + keys := make([]*ecdsa.PrivateKey, 5) + for i := 0; i < len(keys); i++ { + keys[i], _ = crypto.GenerateKey() + } + signer := HomesteadSigner{} + + // Generate a batch of transactions with overlapping prices, but different creation times + groups := map[common.Address]Transactions{} + for start, key := range keys { + addr := crypto.PubkeyToAddress(key.PublicKey) + + tx, _ := SignTx(NewTransaction(0, common.Address{}, big.NewInt(100), 100, big.NewInt(1), nil), signer, key) + tx.time = time.Unix(0, int64(len(keys)-start)) + + groups[addr] = append(groups[addr], tx) + } + // Sort the transactions and cross check the nonce ordering + txset := NewTransactionsByPriceAndNonce(signer, groups, nil) + + txs := Transactions{} + for tx := txset.Peek(); tx != nil; tx = txset.Peek() { + txs = append(txs, tx) + txset.Shift() + } + if len(txs) != len(keys) { + t.Errorf("expected %d transactions, found %d", len(keys), len(txs)) + } + for i, txi := range txs { + fromi, _ := Sender(signer, txi) + if i+1 < len(txs) { + next := txs[i+1] + fromNext, _ := Sender(signer, next) + + if txi.GasPrice().Cmp(next.GasPrice()) < 0 { t.Errorf("invalid gasprice ordering: tx #%d (A=%x P=%v) < tx #%d (A=%x P=%v)", i, fromi[:4], txi.GasPrice(), i+1, fromNext[:4], next.GasPrice()) } + // Make sure time order is ascending if the txs have the same gas price + if txi.GasPrice().Cmp(next.GasPrice()) == 0 && txi.time.After(next.time) { + t.Errorf("invalid received time ordering: tx #%d (A=%x T=%v) > tx #%d (A=%x T=%v)", i, fromi[:4], txi.time, i+1, fromNext[:4], next.time) + } } } } -// TestTransactionJSON tests serializing/de-serializing to/from JSON. -func TestTransactionJSON(t *testing.T) { +// TestTransactionCoding tests serializing/de-serializing to/from rlp and JSON. +func TestTransactionCoding(t *testing.T) { key, err := crypto.GenerateKey() if err != nil { t.Fatalf("could not generate key: %v", err) } - signer := NewEIP155Signer(common.Big1) - - transactions := make([]*Transaction, 0, 50) - for i := uint64(0); i < 25; i++ { - var tx *Transaction - switch i % 2 { + var ( + signer = NewEIP2930Signer(common.Big1) + addr = common.HexToAddress("0x0000000000000000000000000000000000000001") + recipient = common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") + accesses = AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}} + ) + for i := uint64(0); i < 500; i++ { + var txdata TxData + switch i % 5 { case 0: - tx = NewTransaction(i, common.Address{1}, common.Big0, 1, common.Big2, []byte("abcdef")) + // Legacy tx. + txdata = &LegacyTx{ + Nonce: i, + To: &recipient, + Gas: 1, + GasPrice: big.NewInt(2), + Data: []byte("abcdef"), + } case 1: - tx = NewContractCreation(i, common.Big0, 1, common.Big2, []byte("abcdef")) + // Legacy tx contract creation. + txdata = &LegacyTx{ + Nonce: i, + Gas: 1, + GasPrice: big.NewInt(2), + Data: []byte("abcdef"), + } + case 2: + // Tx with non-zero access list. + txdata = &AccessListTx{ + ChainID: big.NewInt(1), + Nonce: i, + To: &recipient, + Gas: 123457, + GasPrice: big.NewInt(10), + AccessList: accesses, + Data: []byte("abcdef"), + } + case 3: + // Tx with empty access list. + txdata = &AccessListTx{ + ChainID: big.NewInt(1), + Nonce: i, + To: &recipient, + Gas: 123457, + GasPrice: big.NewInt(10), + Data: []byte("abcdef"), + } + case 4: + // Contract creation with access list. + txdata = &AccessListTx{ + ChainID: big.NewInt(1), + Nonce: i, + Gas: 123457, + GasPrice: big.NewInt(10), + AccessList: accesses, + } } - transactions = append(transactions, tx) - - signedTx, err := SignTx(tx, signer, key) + tx, err := SignNewTx(key, signer, txdata) if err != nil { t.Fatalf("could not sign transaction: %v", err) } - - transactions = append(transactions, signedTx) - } - - for _, tx := range transactions { - data, err := json.Marshal(tx) + // RLP + parsedTx, err := encodeDecodeBinary(tx) if err != nil { - t.Fatalf("json.Marshal failed: %v", err) + t.Fatal(err) } - - var parsedTx *Transaction - if err := json.Unmarshal(data, &parsedTx); err != nil { - t.Fatalf("json.Unmarshal failed: %v", err) + if err := assertEqual(parsedTx, tx); err != nil { + t.Fatal(err) } - // compare nonce, price, gaslimit, recipient, amount, payload, V, R, S - if tx.Hash() != parsedTx.Hash() { - t.Errorf("parsed tx differs from original tx, want %v, got %v", tx, parsedTx) + // JSON + parsedTx, err = encodeDecodeJSON(tx) + if err != nil { + t.Fatal(err) } - if tx.ChainId().Cmp(parsedTx.ChainId()) != 0 { - t.Errorf("invalid chain id, want %d, got %d", tx.ChainId(), parsedTx.ChainId()) + if err := assertEqual(parsedTx, tx); err != nil { + t.Fatal(err) + } + } +} + +func encodeDecodeJSON(tx *Transaction) (*Transaction, error) { + data, err := json.Marshal(tx) + if err != nil { + return nil, fmt.Errorf("json encoding failed: %v", err) + } + var parsedTx = &Transaction{} + if err := json.Unmarshal(data, &parsedTx); err != nil { + return nil, fmt.Errorf("json decoding failed: %v", err) + } + return parsedTx, nil +} + +func encodeDecodeBinary(tx *Transaction) (*Transaction, error) { + data, err := tx.MarshalBinary() + if err != nil { + return nil, fmt.Errorf("rlp encoding failed: %v", err) + } + var parsedTx = &Transaction{} + if err := parsedTx.UnmarshalBinary(data); err != nil { + return nil, fmt.Errorf("rlp decoding failed: %v", err) + } + return parsedTx, nil +} + +func assertEqual(orig *Transaction, cpy *Transaction) error { + // compare nonce, price, gaslimit, recipient, amount, payload, V, R, S + if want, got := orig.Hash(), cpy.Hash(); want != got { + return fmt.Errorf("parsed tx differs from original tx, want %v, got %v", want, got) + } + if want, got := orig.ChainId(), cpy.ChainId(); want.Cmp(got) != 0 { + return fmt.Errorf("invalid chain id, want %d, got %d", want, got) + } + if orig.AccessList() != nil { + if !reflect.DeepEqual(orig.AccessList(), cpy.AccessList()) { + return fmt.Errorf("access list wrong!") } } + return nil } diff --git a/core/types/types_test.go b/core/types/types_test.go new file mode 100644 index 00000000..1fb386d5 --- /dev/null +++ b/core/types/types_test.go @@ -0,0 +1,148 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" +) + +type devnull struct{ len int } + +func (d *devnull) Write(p []byte) (int, error) { + d.len += len(p) + return len(p), nil +} + +func BenchmarkEncodeRLP(b *testing.B) { + benchRLP(b, true) +} + +func BenchmarkDecodeRLP(b *testing.B) { + benchRLP(b, false) +} + +func benchRLP(b *testing.B, encode bool) { + key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + to := common.HexToAddress("0x00000000000000000000000000000000deadbeef") + signer := NewLondonSigner(big.NewInt(1337)) + for _, tc := range []struct { + name string + obj interface{} + }{ + { + "legacy-header", + &Header{ + Difficulty: big.NewInt(10000000000), + Number: big.NewInt(1000), + GasLimit: 8_000_000, + GasUsed: 8_000_000, + Time: 555, + Extra: make([]byte, 32), + }, + }, + { + "london-header", + &Header{ + Difficulty: big.NewInt(10000000000), + Number: big.NewInt(1000), + GasLimit: 8_000_000, + GasUsed: 8_000_000, + Time: 555, + Extra: make([]byte, 32), + BaseFee: big.NewInt(10000000000), + }, + }, + { + "receipt-for-storage", + &ReceiptForStorage{ + Status: ReceiptStatusSuccessful, + CumulativeGasUsed: 0x888888888, + Logs: make([]*Log, 0), + }, + }, + { + "receipt-full", + &Receipt{ + Status: ReceiptStatusSuccessful, + CumulativeGasUsed: 0x888888888, + Logs: make([]*Log, 0), + }, + }, + { + "legacy-transaction", + MustSignNewTx(key, signer, + &LegacyTx{ + Nonce: 1, + GasPrice: big.NewInt(500), + Gas: 1000000, + To: &to, + Value: big.NewInt(1), + }), + }, + { + "access-transaction", + MustSignNewTx(key, signer, + &AccessListTx{ + Nonce: 1, + GasPrice: big.NewInt(500), + Gas: 1000000, + To: &to, + Value: big.NewInt(1), + }), + }, + { + "1559-transaction", + MustSignNewTx(key, signer, + &DynamicFeeTx{ + Nonce: 1, + Gas: 1000000, + To: &to, + Value: big.NewInt(1), + GasTipCap: big.NewInt(500), + GasFeeCap: big.NewInt(500), + }), + }, + } { + if encode { + b.Run(tc.name, func(b *testing.B) { + b.ReportAllocs() + var null = &devnull{} + for i := 0; i < b.N; i++ { + rlp.Encode(null, tc.obj) + } + b.SetBytes(int64(null.len / b.N)) + }) + } else { + data, _ := rlp.EncodeToBytes(tc.obj) + // Test decoding + b.Run(tc.name, func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + if err := rlp.DecodeBytes(data, tc.obj); err != nil { + b.Fatal(err) + } + } + b.SetBytes(int64(len(data))) + }) + } + } +} diff --git a/core/vm/analysis.go b/core/vm/analysis.go index 0ccf47b9..4aa8cfe7 100644 --- a/core/vm/analysis.go +++ b/core/vm/analysis.go @@ -16,22 +16,48 @@ package vm +const ( + set2BitsMask = uint16(0b11) + set3BitsMask = uint16(0b111) + set4BitsMask = uint16(0b1111) + set5BitsMask = uint16(0b1_1111) + set6BitsMask = uint16(0b11_1111) + set7BitsMask = uint16(0b111_1111) +) + // bitvec is a bit vector which maps bytes in a program. // An unset bit means the byte is an opcode, a set bit means // it's data (i.e. argument of PUSHxx). type bitvec []byte -func (bits *bitvec) set(pos uint64) { - (*bits)[pos/8] |= 0x80 >> (pos % 8) +func (bits bitvec) set1(pos uint64) { + bits[pos/8] |= 1 << (pos % 8) +} + +func (bits bitvec) setN(flag uint16, pos uint64) { + a := flag << (pos % 8) + bits[pos/8] |= byte(a) + if b := byte(a >> 8); b != 0 { + bits[pos/8+1] = b + } } -func (bits *bitvec) set8(pos uint64) { - (*bits)[pos/8] |= 0xFF >> (pos % 8) - (*bits)[pos/8+1] |= ^(0xFF >> (pos % 8)) + +func (bits bitvec) set8(pos uint64) { + a := byte(0xFF << (pos % 8)) + bits[pos/8] |= a + bits[pos/8+1] = ^a +} + +func (bits bitvec) set16(pos uint64) { + a := byte(0xFF << (pos % 8)) + bits[pos/8] |= a + bits[pos/8+1] = 0xFF + bits[pos/8+2] = ^a } // codeSegment checks if the position is in a code segment. func (bits *bitvec) codeSegment(pos uint64) bool { - return ((*bits)[pos/8] & (0x80 >> (pos % 8))) == 0 + return (((*bits)[pos/8] >> (pos % 8)) & 1) == 0 } // codeBitmap collects data locations in code. @@ -40,22 +66,52 @@ func codeBitmap(code []byte) bitvec { // ends with a PUSH32, the algorithm will push zeroes onto the // bitvector outside the bounds of the actual code. bits := make(bitvec, len(code)/8+1+4) + return codeBitmapInternal(code, bits) +} + +// codeBitmapInternal is the internal implementation of codeBitmap. +// It exists for the purpose of being able to run benchmark tests +// without dynamic allocations affecting the results. +func codeBitmapInternal(code, bits bitvec) bitvec { for pc := uint64(0); pc < uint64(len(code)); { op := OpCode(code[pc]) - - if op >= PUSH1 && op <= PUSH32 { - numbits := op - PUSH1 + 1 - pc++ + pc++ + if int8(op) < int8(PUSH1) { // If not PUSH (the int8(op) > int(PUSH32) is always false). + continue + } + numbits := op - PUSH1 + 1 + if numbits >= 8 { + for ; numbits >= 16; numbits -= 16 { + bits.set16(pc) + pc += 16 + } for ; numbits >= 8; numbits -= 8 { - bits.set8(pc) // 8 + bits.set8(pc) pc += 8 } - for ; numbits > 0; numbits-- { - bits.set(pc) - pc++ - } - } else { - pc++ + } + switch numbits { + case 1: + bits.set1(pc) + pc += 1 + case 2: + bits.setN(set2BitsMask, pc) + pc += 2 + case 3: + bits.setN(set3BitsMask, pc) + pc += 3 + case 4: + bits.setN(set4BitsMask, pc) + pc += 4 + case 5: + bits.setN(set5BitsMask, pc) + pc += 5 + case 6: + bits.setN(set6BitsMask, pc) + pc += 6 + case 7: + bits.setN(set7BitsMask, pc) + pc += 7 } } return bits diff --git a/core/vm/analysis_test.go b/core/vm/analysis_test.go index 491e920c..398861f8 100644 --- a/core/vm/analysis_test.go +++ b/core/vm/analysis_test.go @@ -17,9 +17,10 @@ package vm import ( + "math/bits" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/crypto" ) func TestJumpDestAnalysis(t *testing.T) { @@ -28,36 +29,42 @@ func TestJumpDestAnalysis(t *testing.T) { exp byte which int }{ - {[]byte{byte(PUSH1), 0x01, 0x01, 0x01}, 0x40, 0}, - {[]byte{byte(PUSH1), byte(PUSH1), byte(PUSH1), byte(PUSH1)}, 0x50, 0}, - {[]byte{byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), 0x01, 0x01, 0x01}, 0x7F, 0}, - {[]byte{byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x80, 1}, - {[]byte{0x01, 0x01, 0x01, 0x01, 0x01, byte(PUSH2), byte(PUSH2), byte(PUSH2), 0x01, 0x01, 0x01}, 0x03, 0}, - {[]byte{0x01, 0x01, 0x01, 0x01, 0x01, byte(PUSH2), 0x01, 0x01, 0x01, 0x01, 0x01}, 0x00, 1}, - {[]byte{byte(PUSH3), 0x01, 0x01, 0x01, byte(PUSH1), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x74, 0}, - {[]byte{byte(PUSH3), 0x01, 0x01, 0x01, byte(PUSH1), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x00, 1}, - {[]byte{0x01, byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x3F, 0}, - {[]byte{0x01, byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0xC0, 1}, - {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x7F, 0}, - {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0xFF, 1}, - {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0x80, 2}, - {[]byte{byte(PUSH8), 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, byte(PUSH1), 0x01}, 0x7f, 0}, - {[]byte{byte(PUSH8), 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, byte(PUSH1), 0x01}, 0xA0, 1}, - {[]byte{byte(PUSH32)}, 0x7F, 0}, - {[]byte{byte(PUSH32)}, 0xFF, 1}, - {[]byte{byte(PUSH32)}, 0xFF, 2}, + {[]byte{byte(PUSH1), 0x01, 0x01, 0x01}, 0b0000_0010, 0}, + {[]byte{byte(PUSH1), byte(PUSH1), byte(PUSH1), byte(PUSH1)}, 0b0000_1010, 0}, + {[]byte{0x00, byte(PUSH1), 0x00, byte(PUSH1), 0x00, byte(PUSH1), 0x00, byte(PUSH1)}, 0b0101_0100, 0}, + {[]byte{byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), byte(PUSH8), 0x01, 0x01, 0x01}, bits.Reverse8(0x7F), 0}, + {[]byte{byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0000_0001, 1}, + {[]byte{0x01, 0x01, 0x01, 0x01, 0x01, byte(PUSH2), byte(PUSH2), byte(PUSH2), 0x01, 0x01, 0x01}, 0b1100_0000, 0}, + {[]byte{0x01, 0x01, 0x01, 0x01, 0x01, byte(PUSH2), 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0000_0000, 1}, + {[]byte{byte(PUSH3), 0x01, 0x01, 0x01, byte(PUSH1), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0010_1110, 0}, + {[]byte{byte(PUSH3), 0x01, 0x01, 0x01, byte(PUSH1), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0000_0000, 1}, + {[]byte{0x01, byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b1111_1100, 0}, + {[]byte{0x01, byte(PUSH8), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0000_0011, 1}, + {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b1111_1110, 0}, + {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b1111_1111, 1}, + {[]byte{byte(PUSH16), 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 0b0000_0001, 2}, + {[]byte{byte(PUSH8), 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, byte(PUSH1), 0x01}, 0b1111_1110, 0}, + {[]byte{byte(PUSH8), 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, byte(PUSH1), 0x01}, 0b0000_0101, 1}, + {[]byte{byte(PUSH32)}, 0b1111_1110, 0}, + {[]byte{byte(PUSH32)}, 0b1111_1111, 1}, + {[]byte{byte(PUSH32)}, 0b1111_1111, 2}, + {[]byte{byte(PUSH32)}, 0b1111_1111, 3}, + {[]byte{byte(PUSH32)}, 0b0000_0001, 4}, } - for _, test := range tests { + for i, test := range tests { ret := codeBitmap(test.code) if ret[test.which] != test.exp { - t.Fatalf("expected %x, got %02x", test.exp, ret[test.which]) + t.Fatalf("test %d: expected %x, got %02x", i, test.exp, ret[test.which]) } } } +const analysisCodeSize = 1200 * 1024 + func BenchmarkJumpdestAnalysis_1200k(bench *testing.B) { // 1.4 ms - code := make([]byte, 1200000) + code := make([]byte, analysisCodeSize) + bench.SetBytes(analysisCodeSize) bench.ResetTimer() for i := 0; i < bench.N; i++ { codeBitmap(code) @@ -66,10 +73,37 @@ func BenchmarkJumpdestAnalysis_1200k(bench *testing.B) { } func BenchmarkJumpdestHashing_1200k(bench *testing.B) { // 4 ms - code := make([]byte, 1200000) + code := make([]byte, analysisCodeSize) + bench.SetBytes(analysisCodeSize) bench.ResetTimer() for i := 0; i < bench.N; i++ { crypto.Keccak256Hash(code) } bench.StopTimer() } + +func BenchmarkJumpdestOpAnalysis(bench *testing.B) { + var op OpCode + bencher := func(b *testing.B) { + code := make([]byte, analysisCodeSize) + b.SetBytes(analysisCodeSize) + for i := range code { + code[i] = byte(op) + } + bits := make(bitvec, len(code)/8+1+4) + b.ResetTimer() + for i := 0; i < b.N; i++ { + for j := range bits { + bits[j] = 0 + } + codeBitmapInternal(code, bits) + } + } + for op = PUSH1; op <= PUSH32; op++ { + bench.Run(op.String(), bencher) + } + op = JUMPDEST + bench.Run(op.String(), bencher) + op = STOP + bench.Run(op.String(), bencher) +} diff --git a/core/vm/common.go b/core/vm/common.go index f28f7951..90ba4a4a 100644 --- a/core/vm/common.go +++ b/core/vm/common.go @@ -17,15 +17,14 @@ package vm import ( - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/holiman/uint256" ) // calcMemSize64 calculates the required memory size, and returns // the size and whether the result overflowed uint64 -func calcMemSize64(off, l *big.Int) (uint64, bool) { +func calcMemSize64(off, l *uint256.Int) (uint64, bool) { if !l.IsUint64() { return 0, true } @@ -35,16 +34,16 @@ func calcMemSize64(off, l *big.Int) (uint64, bool) { // 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) { +func calcMemSize64WithUint(off *uint256.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() { + offset64, overflow := off.Uint64WithOverflow() + if overflow { return 0, true } - offset64 := off.Uint64() val := offset64 + length64 // if value < either of it's parts, then it overflowed return val, val < offset64 @@ -64,22 +63,6 @@ func getData(data []byte, start uint64, size uint64) []byte { return common.RightPadBytes(data[start:end], int(size)) } -// getDataBig returns a slice from the data based on the start and size and pads -// up to size with zero's. This function is overflow safe. -func getDataBig(data []byte, start *big.Int, size *big.Int) []byte { - dlen := big.NewInt(int64(len(data))) - - s := math.BigMin(start, dlen) - e := math.BigMin(new(big.Int).Add(s, size), dlen) - return common.RightPadBytes(data[s.Uint64():e.Uint64()], int(size.Uint64())) -} - -// 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.IsUint64() -} - // toWordSize returns the ceiled word size required for memory expansion. func toWordSize(size uint64) uint64 { if size > math.MaxUint64-31 { diff --git a/core/vm/contract.go b/core/vm/contract.go index 7a2e7bab..bb090296 100644 --- a/core/vm/contract.go +++ b/core/vm/contract.go @@ -19,7 +19,8 @@ package vm import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" ) // ContractRef is a reference to the contract's backing object @@ -81,18 +82,30 @@ func NewContract(caller ContractRef, object ContractRef, value *big.Int, gas uin return c } -func (c *Contract) validJumpdest(dest *big.Int) bool { - udest := dest.Uint64() +func (c *Contract) validJumpdest(dest *uint256.Int) bool { + udest, overflow := dest.Uint64WithOverflow() // PC cannot go beyond len(code) and certainly can't be bigger than 63bits. // Don't bother checking for JUMPDEST in that case. - if dest.BitLen() >= 63 || udest >= uint64(len(c.Code)) { + if overflow || udest >= uint64(len(c.Code)) { return false } // Only JUMPDESTs allowed for destinations if OpCode(c.Code[udest]) != JUMPDEST { return false } + return c.isCode(udest) +} + +// isCode returns true if the provided PC location is an actual opcode, as +// opposed to a data-segment following a PUSHN operation. +func (c *Contract) isCode(udest uint64) bool { + // Do we already have an analysis laying around? + if c.analysis != nil { + return c.analysis.codeSegment(udest) + } // Do we have a contract hash already? + // If we do have a hash, that means it's a 'regular' contract. For regular + // contracts ( not temporary initcode), we store the analysis in a map if c.CodeHash != (common.Hash{}) { // Does parent context have the analysis? analysis, exist := c.jumpdests[c.CodeHash] @@ -102,6 +115,8 @@ func (c *Contract) validJumpdest(dest *big.Int) bool { analysis = codeBitmap(c.Code) c.jumpdests[c.CodeHash] = analysis } + // Also stash it in current contract for faster access + c.analysis = analysis return analysis.codeSegment(udest) } // We don't have the code hash, most likely a piece of initcode not already @@ -128,16 +143,11 @@ func (c *Contract) AsDelegate() *Contract { // GetOp returns the n'th element in the contract's byte array func (c *Contract) GetOp(n uint64) OpCode { - return OpCode(c.GetByte(n)) -} - -// GetByte returns the n'th byte in the contract's byte array -func (c *Contract) GetByte(n uint64) byte { if n < uint64(len(c.Code)) { - return c.Code[n] + return OpCode(c.Code[n]) } - return 0 + return STOP } // Caller returns the caller of the contract. diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 1d8f1ec0..1b832b63 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -22,12 +22,13 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/crypto/blake2b" - "github.com/cryptoecc/ETH-ECC/crypto/bn256" - "github.com/cryptoecc/ETH-ECC/params" + "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/bls12381" + "github.com/ethereum/go-ethereum/crypto/bn256" + "github.com/ethereum/go-ethereum/params" "golang.org/x/crypto/ripemd160" ) @@ -55,7 +56,7 @@ var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{2}): &sha256hash{}, common.BytesToAddress([]byte{3}): &ripemd160hash{}, common.BytesToAddress([]byte{4}): &dataCopy{}, - common.BytesToAddress([]byte{5}): &bigModExp{}, + common.BytesToAddress([]byte{5}): &bigModExp{eip2565: false}, common.BytesToAddress([]byte{6}): &bn256AddByzantium{}, common.BytesToAddress([]byte{7}): &bn256ScalarMulByzantium{}, common.BytesToAddress([]byte{8}): &bn256PairingByzantium{}, @@ -68,20 +69,90 @@ var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{2}): &sha256hash{}, common.BytesToAddress([]byte{3}): &ripemd160hash{}, common.BytesToAddress([]byte{4}): &dataCopy{}, - common.BytesToAddress([]byte{5}): &bigModExp{}, + common.BytesToAddress([]byte{5}): &bigModExp{eip2565: false}, common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, common.BytesToAddress([]byte{9}): &blake2F{}, } +// PrecompiledContractsBerlin contains the default set of pre-compiled Ethereum +// contracts used in the Berlin release. +var PrecompiledContractsBerlin = 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{eip2565: true}, + common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + common.BytesToAddress([]byte{9}): &blake2F{}, +} + +// PrecompiledContractsBLS contains the set of pre-compiled Ethereum +// contracts specified in EIP-2537. These are exported for testing purposes. +var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{ + common.BytesToAddress([]byte{10}): &bls12381G1Add{}, + common.BytesToAddress([]byte{11}): &bls12381G1Mul{}, + common.BytesToAddress([]byte{12}): &bls12381G1MultiExp{}, + common.BytesToAddress([]byte{13}): &bls12381G2Add{}, + common.BytesToAddress([]byte{14}): &bls12381G2Mul{}, + common.BytesToAddress([]byte{15}): &bls12381G2MultiExp{}, + common.BytesToAddress([]byte{16}): &bls12381Pairing{}, + common.BytesToAddress([]byte{17}): &bls12381MapG1{}, + common.BytesToAddress([]byte{18}): &bls12381MapG2{}, +} + +var ( + PrecompiledAddressesBerlin []common.Address + PrecompiledAddressesIstanbul []common.Address + PrecompiledAddressesByzantium []common.Address + PrecompiledAddressesHomestead []common.Address +) + +func init() { + for k := range PrecompiledContractsHomestead { + PrecompiledAddressesHomestead = append(PrecompiledAddressesHomestead, k) + } + for k := range PrecompiledContractsByzantium { + PrecompiledAddressesByzantium = append(PrecompiledAddressesByzantium, k) + } + for k := range PrecompiledContractsIstanbul { + PrecompiledAddressesIstanbul = append(PrecompiledAddressesIstanbul, k) + } + for k := range PrecompiledContractsBerlin { + PrecompiledAddressesBerlin = append(PrecompiledAddressesBerlin, k) + } +} + +// ActivePrecompiles returns the precompiles enabled with the current configuration. +func ActivePrecompiles(rules params.Rules) []common.Address { + switch { + case rules.IsBerlin: + return PrecompiledAddressesBerlin + case rules.IsIstanbul: + return PrecompiledAddressesIstanbul + case rules.IsByzantium: + return PrecompiledAddressesByzantium + default: + return PrecompiledAddressesHomestead + } +} + // RunPrecompiledContract runs and evaluates the output of a precompiled contract. -func RunPrecompiledContract(p PrecompiledContract, input []byte, contract *Contract) (ret []byte, err error) { - gas := p.RequiredGas(input) - if contract.UseGas(gas) { - return p.Run(input) +// It returns +// - the returned bytes, +// - the _remaining_ gas, +// - any error that occurred +func RunPrecompiledContract(p PrecompiledContract, input []byte, suppliedGas uint64) (ret []byte, remainingGas uint64, err error) { + gasCost := p.RequiredGas(input) + if suppliedGas < gasCost { + return nil, 0, ErrOutOfGas } - return nil, ErrOutOfGas + suppliedGas -= gasCost + output, err := p.Run(input) + return output, suppliedGas, err } // ECRECOVER implemented as a native contract. @@ -106,8 +177,13 @@ func (c *ecrecover) Run(input []byte) ([]byte, error) { if !allZero(input[32:63]) || !crypto.ValidateSignatureValues(v, r, s, false) { return nil, nil } + // We must make sure not to modify the 'input', so placing the 'v' along with + // the signature needs to be done on a new allocation + sig := make([]byte, 65) + copy(sig, input[64:128]) + sig[64] = v // v needs to be at the end for libsecp256k1 - pubKey, err := crypto.Ecrecover(input[:32], append(input[64:128], v)) + pubKey, err := crypto.Ecrecover(input[:32], sig) // make sure the public key is a valid one if err != nil { return nil, nil @@ -163,13 +239,19 @@ func (c *dataCopy) Run(in []byte) ([]byte, error) { } // bigModExp implements a native big integer exponential modular operation. -type bigModExp struct{} +type bigModExp struct { + eip2565 bool +} var ( + big0 = big.NewInt(0) big1 = big.NewInt(1) + big3 = big.NewInt(3) big4 = big.NewInt(4) + big7 = big.NewInt(7) big8 = big.NewInt(8) big16 = big.NewInt(16) + big20 = big.NewInt(20) big32 = big.NewInt(32) big64 = big.NewInt(64) big96 = big.NewInt(96) @@ -179,6 +261,34 @@ var ( big199680 = big.NewInt(199680) ) +// modexpMultComplexity implements bigModexp multComplexity formula, as defined in EIP-198 +// +// def mult_complexity(x): +// if x <= 64: return x ** 2 +// elif x <= 1024: return x ** 2 // 4 + 96 * x - 3072 +// else: return x ** 2 // 16 + 480 * x - 199680 +// +// where is x is max(length_of_MODULUS, length_of_BASE) +func modexpMultComplexity(x *big.Int) *big.Int { + switch { + case x.Cmp(big64) <= 0: + x.Mul(x, x) // x ** 2 + case x.Cmp(big1024) <= 0: + // (x ** 2 // 4 ) + ( 96 * x - 3072) + x = new(big.Int).Add( + new(big.Int).Div(new(big.Int).Mul(x, x), big4), + new(big.Int).Sub(new(big.Int).Mul(big96, x), big3072), + ) + default: + // (x ** 2 // 16) + (480 * x - 199680) + x = new(big.Int).Add( + new(big.Int).Div(new(big.Int).Mul(x, x), big16), + new(big.Int).Sub(new(big.Int).Mul(big480, x), big199680), + ) + } + return x +} + // RequiredGas returns the gas required to execute the pre-compiled contract. func (c *bigModExp) RequiredGas(input []byte) uint64 { var ( @@ -213,25 +323,36 @@ func (c *bigModExp) RequiredGas(input []byte) uint64 { adjExpLen.Mul(big8, adjExpLen) } adjExpLen.Add(adjExpLen, big.NewInt(int64(msb))) - // Calculate the gas cost of the operation gas := new(big.Int).Set(math.BigMax(modLen, baseLen)) - switch { - case gas.Cmp(big64) <= 0: + if c.eip2565 { + // EIP-2565 has three changes + // 1. Different multComplexity (inlined here) + // in EIP-2565 (https://eips.ethereum.org/EIPS/eip-2565): + // + // def mult_complexity(x): + // ceiling(x/8)^2 + // + //where is x is max(length_of_MODULUS, length_of_BASE) + gas = gas.Add(gas, big7) + gas = gas.Div(gas, big8) gas.Mul(gas, gas) - case gas.Cmp(big1024) <= 0: - gas = new(big.Int).Add( - new(big.Int).Div(new(big.Int).Mul(gas, gas), big4), - new(big.Int).Sub(new(big.Int).Mul(big96, gas), big3072), - ) - default: - gas = new(big.Int).Add( - new(big.Int).Div(new(big.Int).Mul(gas, gas), big16), - new(big.Int).Sub(new(big.Int).Mul(big480, gas), big199680), - ) + + gas.Mul(gas, math.BigMax(adjExpLen, big1)) + // 2. Different divisor (`GQUADDIVISOR`) (3) + gas.Div(gas, big3) + if gas.BitLen() > 64 { + return math.MaxUint64 + } + // 3. Minimum price of 200 gas + if gas.Uint64() < 200 { + return 200 + } + return gas.Uint64() } + gas = modexpMultComplexity(gas) gas.Mul(gas, math.BigMax(adjExpLen, big1)) - gas.Div(gas, new(big.Int).SetUint64(params.ModExpQuadCoeffDiv)) + gas.Div(gas, big20) if gas.BitLen() > 64 { return math.MaxUint64 @@ -458,7 +579,7 @@ var ( ) func (c *blake2F) Run(input []byte) ([]byte, error) { - // Make sure the input is valid (correct lenth and final flag) + // Make sure the input is valid (correct length and final flag) if len(input) != blake2FInputLength { return nil, errBlake2FInvalidInputLength } @@ -468,7 +589,7 @@ func (c *blake2F) Run(input []byte) ([]byte, error) { // Parse the input into the Blake2b call parameters var ( rounds = binary.BigEndian.Uint32(input[0:4]) - final = (input[212] == blake2FFinalBlockBytes) + final = input[212] == blake2FFinalBlockBytes h [8]uint64 m [16]uint64 @@ -495,3 +616,428 @@ func (c *blake2F) Run(input []byte) ([]byte, error) { } return output, nil } + +var ( + errBLS12381InvalidInputLength = errors.New("invalid input length") + errBLS12381InvalidFieldElementTopBytes = errors.New("invalid field element top bytes") + errBLS12381G1PointSubgroup = errors.New("g1 point is not on correct subgroup") + errBLS12381G2PointSubgroup = errors.New("g2 point is not on correct subgroup") +) + +// bls12381G1Add implements EIP-2537 G1Add precompile. +type bls12381G1Add struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G1Add) RequiredGas(input []byte) uint64 { + return params.Bls12381G1AddGas +} + +func (c *bls12381G1Add) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G1Add precompile. + // > G1 addition call expects `256` bytes as an input that is interpreted as byte concatenation of two G1 points (`128` bytes each). + // > Output is an encoding of addition operation result - single G1 point (`128` bytes). + if len(input) != 256 { + return nil, errBLS12381InvalidInputLength + } + var err error + var p0, p1 *bls12381.PointG1 + + // Initialize G1 + g := bls12381.NewG1() + + // Decode G1 point p_0 + if p0, err = g.DecodePoint(input[:128]); err != nil { + return nil, err + } + // Decode G1 point p_1 + if p1, err = g.DecodePoint(input[128:]); err != nil { + return nil, err + } + + // Compute r = p_0 + p_1 + r := g.New() + g.Add(r, p0, p1) + + // Encode the G1 point result into 128 bytes + return g.EncodePoint(r), nil +} + +// bls12381G1Mul implements EIP-2537 G1Mul precompile. +type bls12381G1Mul struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G1Mul) RequiredGas(input []byte) uint64 { + return params.Bls12381G1MulGas +} + +func (c *bls12381G1Mul) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G1Mul precompile. + // > G1 multiplication call expects `160` bytes as an input that is interpreted as byte concatenation of encoding of G1 point (`128` bytes) and encoding of a scalar value (`32` bytes). + // > Output is an encoding of multiplication operation result - single G1 point (`128` bytes). + if len(input) != 160 { + return nil, errBLS12381InvalidInputLength + } + var err error + var p0 *bls12381.PointG1 + + // Initialize G1 + g := bls12381.NewG1() + + // Decode G1 point + if p0, err = g.DecodePoint(input[:128]); err != nil { + return nil, err + } + // Decode scalar value + e := new(big.Int).SetBytes(input[128:]) + + // Compute r = e * p_0 + r := g.New() + g.MulScalar(r, p0, e) + + // Encode the G1 point into 128 bytes + return g.EncodePoint(r), nil +} + +// bls12381G1MultiExp implements EIP-2537 G1MultiExp precompile. +type bls12381G1MultiExp struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G1MultiExp) RequiredGas(input []byte) uint64 { + // Calculate G1 point, scalar value pair length + k := len(input) / 160 + if k == 0 { + // Return 0 gas for small input length + return 0 + } + // Lookup discount value for G1 point, scalar value pair length + var discount uint64 + if dLen := len(params.Bls12381MultiExpDiscountTable); k < dLen { + discount = params.Bls12381MultiExpDiscountTable[k-1] + } else { + discount = params.Bls12381MultiExpDiscountTable[dLen-1] + } + // Calculate gas and return the result + return (uint64(k) * params.Bls12381G1MulGas * discount) / 1000 +} + +func (c *bls12381G1MultiExp) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G1MultiExp precompile. + // G1 multiplication call expects `160*k` bytes as an input that is interpreted as byte concatenation of `k` slices each of them being a byte concatenation of encoding of G1 point (`128` bytes) and encoding of a scalar value (`32` bytes). + // Output is an encoding of multiexponentiation operation result - single G1 point (`128` bytes). + k := len(input) / 160 + if len(input) == 0 || len(input)%160 != 0 { + return nil, errBLS12381InvalidInputLength + } + var err error + points := make([]*bls12381.PointG1, k) + scalars := make([]*big.Int, k) + + // Initialize G1 + g := bls12381.NewG1() + + // Decode point scalar pairs + for i := 0; i < k; i++ { + off := 160 * i + t0, t1, t2 := off, off+128, off+160 + // Decode G1 point + if points[i], err = g.DecodePoint(input[t0:t1]); err != nil { + return nil, err + } + // Decode scalar value + scalars[i] = new(big.Int).SetBytes(input[t1:t2]) + } + + // Compute r = e_0 * p_0 + e_1 * p_1 + ... + e_(k-1) * p_(k-1) + r := g.New() + g.MultiExp(r, points, scalars) + + // Encode the G1 point to 128 bytes + return g.EncodePoint(r), nil +} + +// bls12381G2Add implements EIP-2537 G2Add precompile. +type bls12381G2Add struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G2Add) RequiredGas(input []byte) uint64 { + return params.Bls12381G2AddGas +} + +func (c *bls12381G2Add) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G2Add precompile. + // > G2 addition call expects `512` bytes as an input that is interpreted as byte concatenation of two G2 points (`256` bytes each). + // > Output is an encoding of addition operation result - single G2 point (`256` bytes). + if len(input) != 512 { + return nil, errBLS12381InvalidInputLength + } + var err error + var p0, p1 *bls12381.PointG2 + + // Initialize G2 + g := bls12381.NewG2() + r := g.New() + + // Decode G2 point p_0 + if p0, err = g.DecodePoint(input[:256]); err != nil { + return nil, err + } + // Decode G2 point p_1 + if p1, err = g.DecodePoint(input[256:]); err != nil { + return nil, err + } + + // Compute r = p_0 + p_1 + g.Add(r, p0, p1) + + // Encode the G2 point into 256 bytes + return g.EncodePoint(r), nil +} + +// bls12381G2Mul implements EIP-2537 G2Mul precompile. +type bls12381G2Mul struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G2Mul) RequiredGas(input []byte) uint64 { + return params.Bls12381G2MulGas +} + +func (c *bls12381G2Mul) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G2MUL precompile logic. + // > G2 multiplication call expects `288` bytes as an input that is interpreted as byte concatenation of encoding of G2 point (`256` bytes) and encoding of a scalar value (`32` bytes). + // > Output is an encoding of multiplication operation result - single G2 point (`256` bytes). + if len(input) != 288 { + return nil, errBLS12381InvalidInputLength + } + var err error + var p0 *bls12381.PointG2 + + // Initialize G2 + g := bls12381.NewG2() + + // Decode G2 point + if p0, err = g.DecodePoint(input[:256]); err != nil { + return nil, err + } + // Decode scalar value + e := new(big.Int).SetBytes(input[256:]) + + // Compute r = e * p_0 + r := g.New() + g.MulScalar(r, p0, e) + + // Encode the G2 point into 256 bytes + return g.EncodePoint(r), nil +} + +// bls12381G2MultiExp implements EIP-2537 G2MultiExp precompile. +type bls12381G2MultiExp struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381G2MultiExp) RequiredGas(input []byte) uint64 { + // Calculate G2 point, scalar value pair length + k := len(input) / 288 + if k == 0 { + // Return 0 gas for small input length + return 0 + } + // Lookup discount value for G2 point, scalar value pair length + var discount uint64 + if dLen := len(params.Bls12381MultiExpDiscountTable); k < dLen { + discount = params.Bls12381MultiExpDiscountTable[k-1] + } else { + discount = params.Bls12381MultiExpDiscountTable[dLen-1] + } + // Calculate gas and return the result + return (uint64(k) * params.Bls12381G2MulGas * discount) / 1000 +} + +func (c *bls12381G2MultiExp) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 G2MultiExp precompile logic + // > G2 multiplication call expects `288*k` bytes as an input that is interpreted as byte concatenation of `k` slices each of them being a byte concatenation of encoding of G2 point (`256` bytes) and encoding of a scalar value (`32` bytes). + // > Output is an encoding of multiexponentiation operation result - single G2 point (`256` bytes). + k := len(input) / 288 + if len(input) == 0 || len(input)%288 != 0 { + return nil, errBLS12381InvalidInputLength + } + var err error + points := make([]*bls12381.PointG2, k) + scalars := make([]*big.Int, k) + + // Initialize G2 + g := bls12381.NewG2() + + // Decode point scalar pairs + for i := 0; i < k; i++ { + off := 288 * i + t0, t1, t2 := off, off+256, off+288 + // Decode G1 point + if points[i], err = g.DecodePoint(input[t0:t1]); err != nil { + return nil, err + } + // Decode scalar value + scalars[i] = new(big.Int).SetBytes(input[t1:t2]) + } + + // Compute r = e_0 * p_0 + e_1 * p_1 + ... + e_(k-1) * p_(k-1) + r := g.New() + g.MultiExp(r, points, scalars) + + // Encode the G2 point to 256 bytes. + return g.EncodePoint(r), nil +} + +// bls12381Pairing implements EIP-2537 Pairing precompile. +type bls12381Pairing struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381Pairing) RequiredGas(input []byte) uint64 { + return params.Bls12381PairingBaseGas + uint64(len(input)/384)*params.Bls12381PairingPerPairGas +} + +func (c *bls12381Pairing) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 Pairing precompile logic. + // > Pairing call expects `384*k` bytes as an inputs that is interpreted as byte concatenation of `k` slices. Each slice has the following structure: + // > - `128` bytes of G1 point encoding + // > - `256` bytes of G2 point encoding + // > Output is a `32` bytes where last single byte is `0x01` if pairing result is equal to multiplicative identity in a pairing target field and `0x00` otherwise + // > (which is equivalent of Big Endian encoding of Solidity values `uint256(1)` and `uin256(0)` respectively). + k := len(input) / 384 + if len(input) == 0 || len(input)%384 != 0 { + return nil, errBLS12381InvalidInputLength + } + + // Initialize BLS12-381 pairing engine + e := bls12381.NewPairingEngine() + g1, g2 := e.G1, e.G2 + + // Decode pairs + for i := 0; i < k; i++ { + off := 384 * i + t0, t1, t2 := off, off+128, off+384 + + // Decode G1 point + p1, err := g1.DecodePoint(input[t0:t1]) + if err != nil { + return nil, err + } + // Decode G2 point + p2, err := g2.DecodePoint(input[t1:t2]) + if err != nil { + return nil, err + } + + // 'point is on curve' check already done, + // Here we need to apply subgroup checks. + if !g1.InCorrectSubgroup(p1) { + return nil, errBLS12381G1PointSubgroup + } + if !g2.InCorrectSubgroup(p2) { + return nil, errBLS12381G2PointSubgroup + } + + // Update pairing engine with G1 and G2 ponits + e.AddPair(p1, p2) + } + // Prepare 32 byte output + out := make([]byte, 32) + + // Compute pairing and set the result + if e.Check() { + out[31] = 1 + } + return out, nil +} + +// decodeBLS12381FieldElement decodes BLS12-381 elliptic curve field element. +// Removes top 16 bytes of 64 byte input. +func decodeBLS12381FieldElement(in []byte) ([]byte, error) { + if len(in) != 64 { + return nil, errors.New("invalid field element length") + } + // check top bytes + for i := 0; i < 16; i++ { + if in[i] != byte(0x00) { + return nil, errBLS12381InvalidFieldElementTopBytes + } + } + out := make([]byte, 48) + copy(out[:], in[16:]) + return out, nil +} + +// bls12381MapG1 implements EIP-2537 MapG1 precompile. +type bls12381MapG1 struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381MapG1) RequiredGas(input []byte) uint64 { + return params.Bls12381MapG1Gas +} + +func (c *bls12381MapG1) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 Map_To_G1 precompile. + // > Field-to-curve call expects `64` bytes an an input that is interpreted as a an element of the base field. + // > Output of this call is `128` bytes and is G1 point following respective encoding rules. + if len(input) != 64 { + return nil, errBLS12381InvalidInputLength + } + + // Decode input field element + fe, err := decodeBLS12381FieldElement(input) + if err != nil { + return nil, err + } + + // Initialize G1 + g := bls12381.NewG1() + + // Compute mapping + r, err := g.MapToCurve(fe) + if err != nil { + return nil, err + } + + // Encode the G1 point to 128 bytes + return g.EncodePoint(r), nil +} + +// bls12381MapG2 implements EIP-2537 MapG2 precompile. +type bls12381MapG2 struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bls12381MapG2) RequiredGas(input []byte) uint64 { + return params.Bls12381MapG2Gas +} + +func (c *bls12381MapG2) Run(input []byte) ([]byte, error) { + // Implements EIP-2537 Map_FP2_TO_G2 precompile logic. + // > Field-to-curve call expects `128` bytes an an input that is interpreted as a an element of the quadratic extension field. + // > Output of this call is `256` bytes and is G2 point following respective encoding rules. + if len(input) != 128 { + return nil, errBLS12381InvalidInputLength + } + + // Decode input field element + fe := make([]byte, 96) + c0, err := decodeBLS12381FieldElement(input[:64]) + if err != nil { + return nil, err + } + copy(fe[48:], c0) + c1, err := decodeBLS12381FieldElement(input[64:]) + if err != nil { + return nil, err + } + copy(fe[:48], c1) + + // Initialize G2 + g := bls12381.NewG2() + + // Compute mapping + r, err := g.MapToCurve(fe) + if err != nil { + return nil, err + } + + // Encode the G2 point to 256 bytes + return g.EncodePoint(r), nil +} diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index aa3fbf04..b22d999e 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -17,424 +17,143 @@ package vm import ( + "bytes" + "encoding/json" "fmt" - "math/big" - "reflect" + "os" "testing" + "time" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // precompiledTest defines the input/output pairs for precompiled contract tests. type precompiledTest struct { - input, expected string - gas uint64 - name string - noBenchmark bool // Benchmark primarily the worst-cases + Input, Expected string + Gas uint64 + Name string + 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 + Input string + ExpectedError string + Name string } -// modexpTests are the test and benchmark data for the modexp precompiled contract. -var modexpTests = []precompiledTest{ - { - input: "0000000000000000000000000000000000000000000000000000000000000001" + - "0000000000000000000000000000000000000000000000000000000000000020" + - "0000000000000000000000000000000000000000000000000000000000000020" + - "03" + - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "eip_example1", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000000" + - "0000000000000000000000000000000000000000000000000000000000000020" + - "0000000000000000000000000000000000000000000000000000000000000020" + - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", - expected: "0000000000000000000000000000000000000000000000000000000000000000", - name: "eip_example2", - }, { - input: "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb502fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", - expected: "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb13cfb3d8f7f2a3c014122ebb3ed41b02783adc", - name: "nagydani-1-square", - }, { - input: "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb503fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", - expected: "4834a46ba565db27903b1c720c9d593e84e4cbd6ad2e64b31885d944f68cd801f92225a8961c952ddf2797fa4701b330c85c4b363798100b921a1a22a46a7fec", - name: "nagydani-1-qube", - }, { - input: "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5010001fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", - expected: "c36d804180c35d4426b57b50c5bfcca5c01856d104564cd513b461d3c8b8409128a5573e416d0ebe38f5f736766d9dc27143e4da981dfa4d67f7dc474cbee6d2", - name: "nagydani-1-pow0x10001", - }, { - input: "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5102e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", - expected: "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576da4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70", - name: "nagydani-2-square", - }, { - input: "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5103e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", - expected: "d89ceb68c32da4f6364978d62aaa40d7b09b59ec61eb3c0159c87ec3a91037f7dc6967594e530a69d049b64adfa39c8fa208ea970cfe4b7bcd359d345744405afe1cbf761647e32b3184c7fbe87cee8c6c7ff3b378faba6c68b83b6889cb40f1603ee68c56b4c03d48c595c826c041112dc941878f8c5be828154afd4a16311f", - name: "nagydani-2-qube", - }, { - input: "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51010001e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", - expected: "ad85e8ef13fd1dd46eae44af8b91ad1ccae5b7a1c92944f92a19f21b0b658139e0cabe9c1f679507c2de354bf2c91ebd965d1e633978a830d517d2f6f8dd5fd58065d58559de7e2334a878f8ec6992d9b9e77430d4764e863d77c0f87beede8f2f7f2ab2e7222f85cc9d98b8467f4bb72e87ef2882423ebdb6daf02dddac6db2", - name: "nagydani-2-pow0x10001", - }, { - input: "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb02d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", - expected: "affc7507ea6d84751ec6b3f0d7b99dbcc263f33330e450d1b3ff0bc3d0874320bf4edd57debd587306988157958cb3cfd369cc0c9c198706f635c9e0f15d047df5cb44d03e2727f26b083c4ad8485080e1293f171c1ed52aef5993a5815c35108e848c951cf1e334490b4a539a139e57b68f44fee583306f5b85ffa57206b3ee5660458858534e5386b9584af3c7f67806e84c189d695e5eb96e1272d06ec2df5dc5fabc6e94b793718c60c36be0a4d031fc84cd658aa72294b2e16fc240aef70cb9e591248e38bd49c5a554d1afa01f38dab72733092f7555334bbef6c8c430119840492380aa95fa025dcf699f0a39669d812b0c6946b6091e6e235337b6f8", - name: "nagydani-3-square", - }, { - input: "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb03d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", - expected: "1b280ecd6a6bf906b806d527c2a831e23b238f89da48449003a88ac3ac7150d6a5e9e6b3be4054c7da11dd1e470ec29a606f5115801b5bf53bc1900271d7c3ff3cd5ed790d1c219a9800437a689f2388ba1a11d68f6a8e5b74e9a3b1fac6ee85fc6afbac599f93c391f5dc82a759e3c6c0ab45ce3f5d25d9b0c1bf94cf701ea6466fc9a478dacc5754e593172b5111eeba88557048bceae401337cd4c1182ad9f700852bc8c99933a193f0b94cf1aedbefc48be3bc93ef5cb276d7c2d5462ac8bb0c8fe8923a1db2afe1c6b90d59c534994a6a633f0ead1d638fdc293486bb634ff2c8ec9e7297c04241a61c37e3ae95b11d53343d4ba2b4cc33d2cfa7eb705e", - name: "nagydani-3-qube", - }, { - input: "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb010001d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", - expected: "37843d7c67920b5f177372fa56e2a09117df585f81df8b300fba245b1175f488c99476019857198ed459ed8d9799c377330e49f4180c4bf8e8f66240c64f65ede93d601f957b95b83efdee1e1bfde74169ff77002eaf078c71815a9220c80b2e3b3ff22c2f358111d816ebf83c2999026b6de50bfc711ff68705d2f40b753424aefc9f70f08d908b5a20276ad613b4ab4309a3ea72f0c17ea9df6b3367d44fb3acab11c333909e02e81ea2ed404a712d3ea96bba87461720e2d98723e7acd0520ac1a5212dbedcd8dc0c1abf61d4719e319ff4758a774790b8d463cdfe131d1b2dcfee52d002694e98e720cb6ae7ccea353bc503269ba35f0f63bf8d7b672a76", - name: "nagydani-3-pow0x10001", - }, { - input: "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8102df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", - expected: "8a5aea5f50dcc03dc7a7a272b5aeebc040554dbc1ffe36753c4fc75f7ed5f6c2cc0de3a922bf96c78bf0643a73025ad21f45a4a5cadd717612c511ab2bff1190fe5f1ae05ba9f8fe3624de1de2a817da6072ddcdb933b50216811dbe6a9ca79d3a3c6b3a476b079fd0d05f04fb154e2dd3e5cb83b148a006f2bcbf0042efb2ae7b916ea81b27aac25c3bf9a8b6d35440062ad8eae34a83f3ffa2cc7b40346b62174a4422584f72f95316f6b2bee9ff232ba9739301c97c99a9ded26c45d72676eb856ad6ecc81d36a6de36d7f9dafafee11baa43a4b0d5e4ecffa7b9b7dcefd58c397dd373e6db4acd2b2c02717712e6289bed7c813b670c4a0c6735aa7f3b0f1ce556eae9fcc94b501b2c8781ba50a8c6220e8246371c3c7359fe4ef9da786ca7d98256754ca4e496be0a9174bedbecb384bdf470779186d6a833f068d2838a88d90ef3ad48ff963b67c39cc5a3ee123baf7bf3125f64e77af7f30e105d72c4b9b5b237ed251e4c122c6d8c1405e736299c3afd6db16a28c6a9cfa68241e53de4cd388271fe534a6a9b0dbea6171d170db1b89858468885d08fecbd54c8e471c3e25d48e97ba450b96d0d87e00ac732aaa0d3ce4309c1064bd8a4c0808a97e0143e43a24cfa847635125cd41c13e0574487963e9d725c01375db99c31da67b4cf65eff555f0c0ac416c727ff8d438ad7c42030551d68c2e7adda0abb1ca7c10", - name: "nagydani-4-square", - }, { - input: "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8103df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", - expected: "5a2664252aba2d6e19d9600da582cdd1f09d7a890ac48e6b8da15ae7c6ff1856fc67a841ac2314d283ffa3ca81a0ecf7c27d89ef91a5a893297928f5da0245c99645676b481b7e20a566ee6a4f2481942bee191deec5544600bb2441fd0fb19e2ee7d801ad8911c6b7750affec367a4b29a22942c0f5f4744a4e77a8b654da2a82571037099e9c6d930794efe5cdca73c7b6c0844e386bdca8ea01b3d7807146bb81365e2cdc6475f8c23e0ff84463126189dc9789f72bbce2e3d2d114d728a272f1345122de23df54c922ec7a16e5c2a8f84da8871482bd258c20a7c09bbcd64c7a96a51029bbfe848736a6ba7bf9d931a9b7de0bcaf3635034d4958b20ae9ab3a95a147b0421dd5f7ebff46c971010ebfc4adbbe0ad94d5498c853e7142c450d8c71de4b2f84edbf8acd2e16d00c8115b150b1c30e553dbb82635e781379fe2a56360420ff7e9f70cc64c00aba7e26ed13c7c19622865ae07248daced36416080f35f8cc157a857ed70ea4f347f17d1bee80fa038abd6e39b1ba06b97264388b21364f7c56e192d4b62d9b161405f32ab1e2594e86243e56fcf2cb30d21adef15b9940f91af681da24328c883d892670c6aa47940867a81830a82b82716895db810df1b834640abefb7db2092dd92912cb9a735175bc447be40a503cf22dfe565b4ed7a3293ca0dfd63a507430b323ee248ec82e843b673c97ad730728cebc", - name: "nagydani-4-qube", - }, { - input: "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81010001df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", - expected: "bed8b970c4a34849fc6926b08e40e20b21c15ed68d18f228904878d4370b56322d0da5789da0318768a374758e6375bfe4641fca5285ec7171828922160f48f5ca7efbfee4d5148612c38ad683ae4e3c3a053d2b7c098cf2b34f2cb19146eadd53c86b2d7ccf3d83b2c370bfb840913ee3879b1057a6b4e07e110b6bcd5e958bc71a14798c91d518cc70abee264b0d25a4110962a764b364ac0b0dd1ee8abc8426d775ec0f22b7e47b32576afaf1b5a48f64573ed1c5c29f50ab412188d9685307323d990802b81dacc06c6e05a1e901830ba9fcc67688dc29c5e27bde0a6e845ca925f5454b6fb3747edfaa2a5820838fb759eadf57f7cb5cec57fc213ddd8a4298fa079c3c0f472b07fb15aa6a7f0a3780bd296ff6a62e58ef443870b02260bd4fd2bbc98255674b8e1f1f9f8d33c7170b0ebbea4523b695911abbf26e41885344823bd0587115fdd83b721a4e8457a31c9a84b3d3520a07e0e35df7f48e5a9d534d0ec7feef1ff74de6a11e7f93eab95175b6ce22c68d78a642ad642837897ec11349205d8593ac19300207572c38d29ca5dfa03bc14cdbc32153c80e5cc3e739403d34c75915e49beb43094cc6dcafb3665b305ddec9286934ae66ec6b777ca528728c851318eb0f207b39f1caaf96db6eeead6b55ed08f451939314577d42bcc9f97c0b52d0234f88fd07e4c1d7780fdebc025cfffcb572cb27a8c33963", - name: "nagydani-4-pow0x10001", - }, { - input: "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf02e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", - expected: "d61fe4e3f32ac260915b5b03b78a86d11bfc41d973fce5b0cc59035cf8289a8a2e3878ea15fa46565b0d806e2f85b53873ea20ed653869b688adf83f3ef444535bf91598ff7e80f334fb782539b92f39f55310cc4b35349ab7b278346eda9bc37c0d8acd3557fae38197f412f8d9e57ce6a76b7205c23564cab06e5615be7c6f05c3d05ec690cba91da5e89d55b152ff8dd2157dc5458190025cf94b1ad98f7cbe64e9482faba95e6b33844afc640892872b44a9932096508f4a782a4805323808f23e54b6ff9b841dbfa87db3505ae4f687972c18ea0f0d0af89d36c1c2a5b14560c153c3fee406f5cf15cfd1c0bb45d767426d465f2f14c158495069d0c5955a00150707862ecaae30624ebacdd8ac33e4e6aab3ff90b6ba445a84689386b9e945d01823a65874444316e83767290fcff630d2477f49d5d8ffdd200e08ee1274270f86ed14c687895f6caf5ce528bd970c20d2408a9ba66216324c6a011ac4999098362dbd98a038129a2d40c8da6ab88318aa3046cb660327cc44236d9e5d2163bd0959062195c51ed93d0088b6f92051fc99050ece2538749165976233697ab4b610385366e5ce0b02ad6b61c168ecfbedcdf74278a38de340fd7a5fead8e588e294795f9b011e2e60377a89e25c90e145397cdeabc60fd32444a6b7642a611a83c464d8b8976666351b4865c37b02e6dc21dbcdf5f930341707b618cc0f03c3122646b3385c9df9f2ec730eec9d49e7dfc9153b6e6289da8c4f0ebea9ccc1b751948e3bb7171c9e4d57423b0eeeb79095c030cb52677b3f7e0b45c30f645391f3f9c957afa549c4e0b2465b03c67993cd200b1af01035962edbc4c9e89b31c82ac121987d6529dafdeef67a132dc04b6dc68e77f22862040b75e2ceb9ff16da0fca534e6db7bd12fa7b7f51b6c08c1e23dfcdb7acbd2da0b51c87ffbced065a612e9b1c8bba9b7e2d8d7a2f04fcc4aaf355b60d764879a76b5e16762d5f2f55d585d0c8e82df6940960cddfb72c91dfa71f6b4e1c6ca25dfc39a878e998a663c04fe29d5e83b9586d047b4d7ff70a9f0d44f127e7d741685ca75f11629128d916a0ffef4be586a30c4b70389cc746e84ebf177c01ee8a4511cfbb9d1ecf7f7b33c7dd8177896e10bbc82f838dcd6db7ac67de62bf46b6a640fb580c5d1d2708f3862e3d2b645d0d18e49ef088053e3a220adc0e033c2afcfe61c90e32151152eb3caaf746c5e377d541cafc6cbb0cc0fa48b5caf1728f2e1957f5addfc234f1a9d89e40d49356c9172d0561a695fce6dab1d412321bbf407f63766ffd7b6b3d79bcfa07991c5a9709849c1008689e3b47c50d613980bec239fb64185249d055b30375ccb4354d71fe4d05648fbf6c80634dfc3575f2f24abb714c1e4c95e8896763bf4316e954c7ad19e5780ab7a040ca6fb9271f90a8b22ae738daf6cb", - name: "nagydani-5-square", - }, { - input: "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf03e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", - expected: "5f9c70ec884926a89461056ad20ac4c30155e817f807e4d3f5bb743d789c83386762435c3627773fa77da5144451f2a8aad8adba88e0b669f5377c5e9bad70e45c86fe952b613f015a9953b8a5de5eaee4566acf98d41e327d93a35bd5cef4607d025e58951167957df4ff9b1627649d3943805472e5e293d3efb687cfd1e503faafeb2840a3e3b3f85d016051a58e1c9498aab72e63b748d834b31eb05d85dcde65e27834e266b85c75cc4ec0135135e0601cb93eeeb6e0010c8ceb65c4c319623c5e573a2c8c9fbbf7df68a930beb412d3f4dfd146175484f45d7afaa0d2e60684af9b34730f7c8438465ad3e1d0c3237336722f2aa51095bd5759f4b8ab4dda111b684aa3dac62a761722e7ae43495b7709933512c81c4e3c9133a51f7ce9f2b51fcec064f65779666960b4e45df3900f54311f5613e8012dd1b8efd359eda31a778264c72aa8bb419d862734d769076bce2810011989a45374e5c5d8729fec21427f0bf397eacbb4220f603cf463a4b0c94efd858ffd9768cd60d6ce68d755e0fbad007ce5c2223d70c7018345a102e4ab3c60a13a9e7794303156d4c2063e919f2153c13961fb324c80b240742f47773a7a8e25b3e3fb19b00ce839346c6eb3c732fbc6b888df0b1fe0a3d07b053a2e9402c267b2d62f794d8a2840526e3ade15ce2264496ccd7519571dfde47f7a4bb16292241c20b2be59f3f8fb4f6383f232d838c5a22d8c95b6834d9d2ca493f5a505ebe8899503b0e8f9b19e6e2dd81c1628b80016d02097e0134de51054c4e7674824d4d758760fc52377d2cad145e259aa2ffaf54139e1a66b1e0c1c191e32ac59474c6b526f5b3ba07d3e5ec286eddf531fcd5292869be58c9f22ef91026159f7cf9d05ef66b4299f4da48cc1635bf2243051d342d378a22c83390553e873713c0454ce5f3234397111ac3fe3207b86f0ed9fc025c81903e1748103692074f83824fda6341be4f95ff00b0a9a208c267e12fa01825054cc0513629bf3dbb56dc5b90d4316f87654a8be18227978ea0a8a522760cad620d0d14fd38920fb7321314062914275a5f99f677145a6979b156bd82ecd36f23f8e1273cc2759ecc0b2c69d94dad5211d1bed939dd87ed9e07b91d49713a6e16ade0a98aea789f04994e318e4ff2c8a188cd8d43aeb52c6daa3bc29b4af50ea82a247c5cd67b573b34cbadcc0a376d3bbd530d50367b42705d870f2e27a8197ef46070528bfe408360faa2ebb8bf76e9f388572842bcb119f4d84ee34ae31f5cc594f23705a49197b181fb78ed1ec99499c690f843a4d0cf2e226d118e9372271054fbabdcc5c92ae9fefaef0589cd0e722eaf30c1703ec4289c7fd81beaa8a455ccee5298e31e2080c10c366a6fcf56f7d13582ad0bcad037c612b710fc595b70fbefaaca23623b60c6c39b11beb8e5843b6b3dac60f", - name: "nagydani-5-qube", - }, { - input: "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf010001e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", - expected: "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f86780428982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c144a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b601fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c680844dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500", - name: "nagydani-5-pow0x10001", - }, -} - -// bn256AddTests are the test and benchmark data for the bn256 addition precompiled -// contract. -var bn256AddTests = []precompiledTest{ - { - input: "18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726607c2b7f58a84bd6145f00c9c2bc0bb1a187f20ff2c92963a88019e7c6a014eed06614e20c147e940f2d70da3f74c9a17df361706a4485c742bd6788478fa17d7", - expected: "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915", - name: "chfast1", - }, { - input: "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91518b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266", - expected: "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204", - name: "chfast2", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio1", - }, { - input: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio2", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio3", - }, { - input: "", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio4", - }, { - input: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio5", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - expected: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - name: "cdetrio6", - }, { - input: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - name: "cdetrio7", - }, { - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - expected: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - name: "cdetrio8", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - name: "cdetrio9", - }, { - input: "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - name: "cdetrio10", - }, { - input: "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", - expected: "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", - name: "cdetrio11", - }, { - input: "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", - name: "cdetrio12", - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98", - expected: "15bf2bb17880144b5d1cd2b1f46eff9d617bffd1ca57c37fb5a49bd84e53cf66049c797f9ce0d17083deb32b5e36f2ea2a212ee036598dd7624c168993d1355f", - name: "cdetrio13", - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - expected: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - name: "cdetrio14", - }, -} - -// bn256ScalarMulTests are the test and benchmark data for the bn256 scalar -// multipication precompiled contract. -var bn256ScalarMulTests = []precompiledTest{ - { - input: "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb20400000000000000000000000000000000000000000000000011138ce750fa15c2", - expected: "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc", - name: "chfast1", - }, { - input: "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46", - expected: "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a133a996eb6300b44da664d64251d05381bb8a02e", - name: "chfast2", - }, { - input: "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a133a996eb6300b44da664d64251d05381bb8a02e183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3", - expected: "14789d0d4a730b354403b5fac948113739e276c23e0258d8596ee72f9cd9d3230af18a63153e0ec25ff9f2951dd3fa90ed0197bfef6e2a1a62b5095b9d2b4a27", - name: "chfast3", - }, { - input: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - expected: "2cde5879ba6f13c0b5aa4ef627f159a3347df9722efce88a9afbb20b763b4c411aa7e43076f6aee272755a7f9b84832e71559ba0d2e0b17d5f9f01755e5b0d11", - name: "cdetrio1", - }, { - input: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", - expected: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451", - name: "cdetrio2", - noBenchmark: true, - }, { - input: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000", - expected: "1051acb0700ec6d42a88215852d582efbaef31529b6fcbc3277b5c1b300f5cf0135b2394bb45ab04b8bd7611bd2dfe1de6a4e6e2ccea1ea1955f577cd66af85b", - name: "cdetrio3", - noBenchmark: true, - }, { - input: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000009", - expected: "1dbad7d39dbc56379f78fac1bca147dc8e66de1b9d183c7b167351bfe0aeab742cd757d51289cd8dbd0acf9e673ad67d0f0a89f912af47ed1be53664f5692575", - name: "cdetrio4", - noBenchmark: true, - }, { - input: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000001", - expected: "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6", - name: "cdetrio5", - noBenchmark: true, - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - expected: "29e587aadd7c06722aabba753017c093f70ba7eb1f1c0104ec0564e7e3e21f6022b1143f6a41008e7755c71c3d00b6b915d386de21783ef590486d8afa8453b1", - name: "cdetrio6", - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", - expected: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb", - name: "cdetrio7", - noBenchmark: true, - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000100000000000000000000000000000000", - expected: "221a3577763877920d0d14a91cd59b9479f83b87a653bb41f82a3f6f120cea7c2752c7f64cdd7f0e494bff7b60419f242210f2026ed2ec70f89f78a4c56a1f15", - name: "cdetrio8", - noBenchmark: true, - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000000000000009", - expected: "228e687a379ba154554040f8821f4e41ee2be287c201aa9c3bc02c9dd12f1e691e0fd6ee672d04cfd924ed8fdc7ba5f2d06c53c1edc30f65f2af5a5b97f0a76a", - name: "cdetrio9", - noBenchmark: true, - }, { - input: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000000000000001", - expected: "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c", - name: "cdetrio10", - noBenchmark: true, - }, { - input: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - expected: "00a1a234d08efaa2616607e31eca1980128b00b415c845ff25bba3afcb81dc00242077290ed33906aeb8e42fd98c41bcb9057ba03421af3f2d08cfc441186024", - name: "cdetrio11", - }, { - input: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d9830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", - expected: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b8692929ee761a352600f54921df9bf472e66217e7bb0cee9032e00acc86b3c8bfaf", - name: "cdetrio12", - noBenchmark: true, - }, { - input: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000100000000000000000000000000000000", - expected: "1071b63011e8c222c5a771dfa03c2e11aac9666dd097f2c620852c3951a4376a2f46fe2f73e1cf310a168d56baa5575a8319389d7bfa6b29ee2d908305791434", - name: "cdetrio13", - noBenchmark: true, - }, { - input: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000000000000009", - expected: "19f75b9dd68c080a688774a6213f131e3052bd353a304a189d7a2ee367e3c2582612f545fb9fc89fde80fd81c68fc7dcb27fea5fc124eeda69433cf5c46d2d7f", - name: "cdetrio14", - noBenchmark: true, - }, { - input: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000000000000001", - expected: "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98", - name: "cdetrio15", - noBenchmark: true, - }, -} - -// bn256PairingTests are the test and benchmark data for the bn256 pairing check -// precompiled contract. -var bn256PairingTests = []precompiledTest{ - { - input: "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "jeff1", - }, { - input: "2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db841213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "jeff2", - }, { - input: "0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee245901b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b811d7511c78158de484232fc68daf8a45cf217d1c2fae693ff5871e8752d73b21198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "jeff3", - }, { - input: "2f2ea0b3da1e8ef11914acf8b2e1b32d99df51f5f4f206fc6b947eae860eddb6068134ddb33dc888ef446b648d72338684d678d2eb2371c61a50734d78da4b7225f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37fe3a5dcb7cb122acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d065bbad92e7c4e31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf6806d302580dc0661002994e7cd3a7f224e7ddc27802777486bf80f40e4ca3cfdb186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b008122ae2b09e539e152ec5364e7e2204b03d11d3caa038bfc7cd499f8176aacbee1f39e4e4afc4bc74790a4a028aff2c3d2538731fb755edefd8cb48d6ea589b5e283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b59db1c5d39140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e0764bb98575bd466d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd415794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f211b88da1679b0b64a63b7e0e7bfe52aae524f73a55be7fe70c7e9bfc94b4cf0da1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "jeff4", - }, { - input: "20a754d2071d4d53903e3b31a7e98ad6882d58aec240ef981fdf0a9d22c5926a29c853fcea789887315916bbeb89ca37edb355b4f980c9a12a94f30deeed30211213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c11073b3ff2cdbb38755f8691ea59e9606696b3ff278acfc098fa8226470d03869217cee0a9ad79a4493b5253e2e4e3a39fc2df38419f230d341f60cb064a0ac290a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64cba057b53c26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a98552fd72bd9edb657346127da132e5b82ab908f5816c826acb499e22f2412d1a2d70f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2198a1f162a73261f112401aa2db79c7dab1533c9935c77290a6ce3b191f2318d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "jeff5", - }, { - input: "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c103188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000000", - name: "jeff6", - }, { // ecpairing_empty_data_insufficient_gas - input: "", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "empty_data", - }, { // ecpairing_one_point_insufficient_gas - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000000", - name: "one_point", - }, { // ecpairing_two_point_match_2 - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "two_point_match_2", - }, { // ecpairing_two_point_match_3 - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "two_point_match_3", - }, { // ecpairing_two_point_match_4 - input: "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "two_point_match_4", - }, { - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "ten_point_match_1", - }, { - input: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "ten_point_match_2", - }, { // ecpairing_two_point_match_4 - input: "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75", - expected: "0000000000000000000000000000000000000000000000000000000000000001", - name: "ten_point_match_3", - }, +// allPrecompiles does not map to the actual set of precompiles, as it also contains +// repriced versions of precompiles at certain slots +var allPrecompiles = 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{eip2565: false}, + common.BytesToAddress([]byte{0xf5}): &bigModExp{eip2565: true}, + common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + common.BytesToAddress([]byte{9}): &blake2F{}, + common.BytesToAddress([]byte{10}): &bls12381G1Add{}, + common.BytesToAddress([]byte{11}): &bls12381G1Mul{}, + common.BytesToAddress([]byte{12}): &bls12381G1MultiExp{}, + common.BytesToAddress([]byte{13}): &bls12381G2Add{}, + common.BytesToAddress([]byte{14}): &bls12381G2Mul{}, + common.BytesToAddress([]byte{15}): &bls12381G2MultiExp{}, + common.BytesToAddress([]byte{16}): &bls12381Pairing{}, + common.BytesToAddress([]byte{17}): &bls12381MapG1{}, + common.BytesToAddress([]byte{18}): &bls12381MapG2{}, } // EIP-152 test vectors var blake2FMalformedInputTests = []precompiledFailureTest{ { - input: "", - expectedError: errBlake2FInvalidInputLength, - name: "vector 0: empty input", + Input: "", + ExpectedError: errBlake2FInvalidInputLength.Error(), + Name: "vector 0: empty input", }, { - input: "00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", - expectedError: errBlake2FInvalidInputLength, - name: "vector 1: less than 213 bytes input", + Input: "00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + ExpectedError: errBlake2FInvalidInputLength.Error(), + Name: "vector 1: less than 213 bytes input", }, { - input: "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", - expectedError: errBlake2FInvalidInputLength, - name: "vector 2: more than 213 bytes input", + Input: "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + ExpectedError: errBlake2FInvalidInputLength.Error(), + 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", + Input: "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000002", + ExpectedError: errBlake2FInvalidFinalFlag.Error(), + Name: "vector 3: malformed final block indicator flag", }, } func testPrecompiled(addr string, test precompiledTest, t *testing.T) { - p := PrecompiledContractsIstanbul[common.HexToAddress(addr)] - in := common.Hex2Bytes(test.input) - contract := NewContract(AccountRef(common.HexToAddress("1337")), - nil, new(big.Int), p.RequiredGas(in)) - t.Run(fmt.Sprintf("%s-Gas=%d", test.name, contract.Gas), func(t *testing.T) { - if res, err := RunPrecompiledContract(p, in, contract); err != nil { + p := allPrecompiles[common.HexToAddress(addr)] + in := common.Hex2Bytes(test.Input) + gas := p.RequiredGas(in) + t.Run(fmt.Sprintf("%s-Gas=%d", test.Name, gas), func(t *testing.T) { + if res, _, err := RunPrecompiledContract(p, in, gas); err != nil { t.Error(err) - } else if common.Bytes2Hex(res) != test.expected { - t.Errorf("Expected %v, got %v", test.expected, common.Bytes2Hex(res)) + } else if common.Bytes2Hex(res) != test.Expected { + t.Errorf("Expected %v, got %v", test.Expected, common.Bytes2Hex(res)) + } + if expGas := test.Gas; expGas != gas { + t.Errorf("%v: gas wrong, expected %d, got %d", test.Name, expGas, gas) + } + // Verify that the precompile did not touch the input buffer + exp := common.Hex2Bytes(test.Input) + if !bytes.Equal(in, exp) { + t.Errorf("Precompiled %v modified input data", addr) + } + }) +} + +func testPrecompiledOOG(addr string, test precompiledTest, t *testing.T) { + p := allPrecompiles[common.HexToAddress(addr)] + in := common.Hex2Bytes(test.Input) + gas := p.RequiredGas(in) - 1 + + t.Run(fmt.Sprintf("%s-Gas=%d", test.Name, gas), func(t *testing.T) { + _, _, err := RunPrecompiledContract(p, in, gas) + if err.Error() != "out of gas" { + t.Errorf("Expected error [out of gas], got [%v]", err) + } + // Verify that the precompile did not touch the input buffer + exp := common.Hex2Bytes(test.Input) + if !bytes.Equal(in, exp) { + t.Errorf("Precompiled %v modified input data", addr) } }) } 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) + p := allPrecompiles[common.HexToAddress(addr)] + in := common.Hex2Bytes(test.Input) + gas := p.RequiredGas(in) + t.Run(test.Name, func(t *testing.T) { + _, _, err := RunPrecompiledContract(p, in, gas) + if err.Error() != test.ExpectedError { + t.Errorf("Expected error [%v], got [%v]", test.ExpectedError, err) + } + // Verify that the precompile did not touch the input buffer + exp := common.Hex2Bytes(test.Input) + if !bytes.Equal(in, exp) { + t.Errorf("Precompiled %v modified input data", addr) } }) } func benchmarkPrecompiled(addr string, test precompiledTest, bench *testing.B) { - if test.noBenchmark { + if test.NoBenchmark { return } - p := PrecompiledContractsIstanbul[common.HexToAddress(addr)] - in := common.Hex2Bytes(test.input) + p := allPrecompiles[common.HexToAddress(addr)] + in := common.Hex2Bytes(test.Input) reqGas := p.RequiredGas(in) - contract := NewContract(AccountRef(common.HexToAddress("1337")), - nil, new(big.Int), reqGas) var ( res []byte @@ -442,21 +161,31 @@ func benchmarkPrecompiled(addr string, test precompiledTest, bench *testing.B) { data = make([]byte, len(in)) ) - bench.Run(fmt.Sprintf("%s-Gas=%d", test.name, contract.Gas), func(bench *testing.B) { + bench.Run(fmt.Sprintf("%s-Gas=%d", test.Name, reqGas), func(bench *testing.B) { + bench.ReportAllocs() + start := time.Now() bench.ResetTimer() for i := 0; i < bench.N; i++ { - contract.Gas = reqGas copy(data, in) - res, err = RunPrecompiledContract(p, data, contract) + res, _, err = RunPrecompiledContract(p, data, reqGas) } bench.StopTimer() + elapsed := uint64(time.Since(start)) + if elapsed < 1 { + elapsed = 1 + } + gasUsed := reqGas * uint64(bench.N) + bench.ReportMetric(float64(reqGas), "gas/op") + // Keep it as uint64, multiply 100 to get two digit float later + mgasps := (100 * 1000 * gasUsed) / elapsed + bench.ReportMetric(float64(mgasps)/100, "mgas/s") //Check if it is correct if err != nil { bench.Error(err) return } - if common.Bytes2Hex(res) != test.expected { - bench.Error(fmt.Sprintf("Expected %v, got %v", test.expected, common.Bytes2Hex(res))) + if common.Bytes2Hex(res) != test.Expected { + bench.Errorf("Expected %v, got %v", test.Expected, common.Bytes2Hex(res)) return } }) @@ -465,9 +194,9 @@ func benchmarkPrecompiled(addr string, test precompiledTest, bench *testing.B) { // Benchmarks the sample inputs from the ECRECOVER precompile. func BenchmarkPrecompiledEcrecover(bench *testing.B) { t := precompiledTest{ - input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", - expected: "000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d", - name: "", + Input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + Expected: "000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d", + Name: "", } benchmarkPrecompiled("01", t, bench) } @@ -475,9 +204,9 @@ func BenchmarkPrecompiledEcrecover(bench *testing.B) { // Benchmarks the sample inputs from the SHA256 precompile. func BenchmarkPrecompiledSha256(bench *testing.B) { t := precompiledTest{ - input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", - expected: "811c7003375852fabd0d362e40e68607a12bdabae61a7d068fe5fdd1dbbf2a5d", - name: "128", + Input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + Expected: "811c7003375852fabd0d362e40e68607a12bdabae61a7d068fe5fdd1dbbf2a5d", + Name: "128", } benchmarkPrecompiled("02", t, bench) } @@ -485,9 +214,9 @@ func BenchmarkPrecompiledSha256(bench *testing.B) { // Benchmarks the sample inputs from the RIPEMD precompile. func BenchmarkPrecompiledRipeMD(bench *testing.B) { t := precompiledTest{ - input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", - expected: "0000000000000000000000009215b8d9882ff46f0dfde6684d78e831467f65e6", - name: "128", + Input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + Expected: "0000000000000000000000009215b8d9882ff46f0dfde6684d78e831467f65e6", + Name: "128", } benchmarkPrecompiled("03", t, bench) } @@ -495,82 +224,170 @@ func BenchmarkPrecompiledRipeMD(bench *testing.B) { // Benchmarks the sample inputs from the identiy precompile. func BenchmarkPrecompiledIdentity(bench *testing.B) { t := precompiledTest{ - input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", - expected: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", - name: "128", + Input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + Expected: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + Name: "128", } benchmarkPrecompiled("04", t, bench) } // Tests the sample inputs from the ModExp EIP 198. -func TestPrecompiledModExp(t *testing.T) { +func TestPrecompiledModExp(t *testing.T) { testJson("modexp", "05", t) } +func BenchmarkPrecompiledModExp(b *testing.B) { benchJson("modexp", "05", b) } + +func TestPrecompiledModExpEip2565(t *testing.T) { testJson("modexp_eip2565", "f5", t) } +func BenchmarkPrecompiledModExpEip2565(b *testing.B) { benchJson("modexp_eip2565", "f5", b) } + +// Tests the sample inputs from the elliptic curve addition EIP 213. +func TestPrecompiledBn256Add(t *testing.T) { testJson("bn256Add", "06", t) } +func BenchmarkPrecompiledBn256Add(b *testing.B) { benchJson("bn256Add", "06", b) } + +// Tests OOG +func TestPrecompiledModExpOOG(t *testing.T) { + modexpTests, err := loadJson("modexp") + if err != nil { + t.Fatal(err) + } for _, test := range modexpTests { - testPrecompiled("05", test, t) + testPrecompiledOOG("05", test, t) } } -// Benchmarks the sample inputs from the ModExp EIP 198. -func BenchmarkPrecompiledModExp(bench *testing.B) { - for _, test := range modexpTests { - benchmarkPrecompiled("05", test, bench) +// Tests the sample inputs from the elliptic curve scalar multiplication EIP 213. +func TestPrecompiledBn256ScalarMul(t *testing.T) { testJson("bn256ScalarMul", "07", t) } +func BenchmarkPrecompiledBn256ScalarMul(b *testing.B) { benchJson("bn256ScalarMul", "07", b) } + +// Tests the sample inputs from the elliptic curve pairing check EIP 197. +func TestPrecompiledBn256Pairing(t *testing.T) { testJson("bn256Pairing", "08", t) } +func BenchmarkPrecompiledBn256Pairing(b *testing.B) { benchJson("bn256Pairing", "08", b) } + +func TestPrecompiledBlake2F(t *testing.T) { testJson("blake2F", "09", t) } +func BenchmarkPrecompiledBlake2F(b *testing.B) { benchJson("blake2F", "09", b) } + +func TestPrecompileBlake2FMalformedInput(t *testing.T) { + for _, test := range blake2FMalformedInputTests { + testPrecompiledFailure("09", test, t) } } -// Tests the sample inputs from the elliptic curve addition EIP 213. -func TestPrecompiledBn256Add(t *testing.T) { - for _, test := range bn256AddTests { - testPrecompiled("06", test, t) +func TestPrecompiledEcrecover(t *testing.T) { testJson("ecRecover", "01", t) } + +func testJson(name, addr string, t *testing.T) { + tests, err := loadJson(name) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + testPrecompiled(addr, test, t) } } -// Benchmarks the sample inputs from the elliptic curve addition EIP 213. -func BenchmarkPrecompiledBn256Add(bench *testing.B) { - for _, test := range bn256AddTests { - benchmarkPrecompiled("06", test, bench) +func testJsonFail(name, addr string, t *testing.T) { + tests, err := loadJsonFail(name) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + testPrecompiledFailure(addr, test, t) } } -// Tests the sample inputs from the elliptic curve scalar multiplication EIP 213. -func TestPrecompiledBn256ScalarMul(t *testing.T) { - for _, test := range bn256ScalarMulTests { - testPrecompiled("07", test, t) +func benchJson(name, addr string, b *testing.B) { + tests, err := loadJson(name) + if err != nil { + b.Fatal(err) + } + for _, test := range tests { + benchmarkPrecompiled(addr, test, b) } } -// Benchmarks the sample inputs from the elliptic curve scalar multiplication EIP 213. -func BenchmarkPrecompiledBn256ScalarMul(bench *testing.B) { - for _, test := range bn256ScalarMulTests { - benchmarkPrecompiled("07", test, bench) +func TestPrecompiledBLS12381G1Add(t *testing.T) { testJson("blsG1Add", "0a", t) } +func TestPrecompiledBLS12381G1Mul(t *testing.T) { testJson("blsG1Mul", "0b", t) } +func TestPrecompiledBLS12381G1MultiExp(t *testing.T) { testJson("blsG1MultiExp", "0c", t) } +func TestPrecompiledBLS12381G2Add(t *testing.T) { testJson("blsG2Add", "0d", t) } +func TestPrecompiledBLS12381G2Mul(t *testing.T) { testJson("blsG2Mul", "0e", t) } +func TestPrecompiledBLS12381G2MultiExp(t *testing.T) { testJson("blsG2MultiExp", "0f", t) } +func TestPrecompiledBLS12381Pairing(t *testing.T) { testJson("blsPairing", "10", t) } +func TestPrecompiledBLS12381MapG1(t *testing.T) { testJson("blsMapG1", "11", t) } +func TestPrecompiledBLS12381MapG2(t *testing.T) { testJson("blsMapG2", "12", t) } + +func BenchmarkPrecompiledBLS12381G1Add(b *testing.B) { benchJson("blsG1Add", "0a", b) } +func BenchmarkPrecompiledBLS12381G1Mul(b *testing.B) { benchJson("blsG1Mul", "0b", b) } +func BenchmarkPrecompiledBLS12381G1MultiExp(b *testing.B) { benchJson("blsG1MultiExp", "0c", b) } +func BenchmarkPrecompiledBLS12381G2Add(b *testing.B) { benchJson("blsG2Add", "0d", b) } +func BenchmarkPrecompiledBLS12381G2Mul(b *testing.B) { benchJson("blsG2Mul", "0e", b) } +func BenchmarkPrecompiledBLS12381G2MultiExp(b *testing.B) { benchJson("blsG2MultiExp", "0f", b) } +func BenchmarkPrecompiledBLS12381Pairing(b *testing.B) { benchJson("blsPairing", "10", b) } +func BenchmarkPrecompiledBLS12381MapG1(b *testing.B) { benchJson("blsMapG1", "11", b) } +func BenchmarkPrecompiledBLS12381MapG2(b *testing.B) { benchJson("blsMapG2", "12", b) } + +// Failure tests +func TestPrecompiledBLS12381G1AddFail(t *testing.T) { testJsonFail("blsG1Add", "0a", t) } +func TestPrecompiledBLS12381G1MulFail(t *testing.T) { testJsonFail("blsG1Mul", "0b", t) } +func TestPrecompiledBLS12381G1MultiExpFail(t *testing.T) { testJsonFail("blsG1MultiExp", "0c", t) } +func TestPrecompiledBLS12381G2AddFail(t *testing.T) { testJsonFail("blsG2Add", "0d", t) } +func TestPrecompiledBLS12381G2MulFail(t *testing.T) { testJsonFail("blsG2Mul", "0e", t) } +func TestPrecompiledBLS12381G2MultiExpFail(t *testing.T) { testJsonFail("blsG2MultiExp", "0f", t) } +func TestPrecompiledBLS12381PairingFail(t *testing.T) { testJsonFail("blsPairing", "10", t) } +func TestPrecompiledBLS12381MapG1Fail(t *testing.T) { testJsonFail("blsMapG1", "11", t) } +func TestPrecompiledBLS12381MapG2Fail(t *testing.T) { testJsonFail("blsMapG2", "12", t) } + +func loadJson(name string) ([]precompiledTest, error) { + data, err := os.ReadFile(fmt.Sprintf("testdata/precompiles/%v.json", name)) + if err != nil { + return nil, err } + var testcases []precompiledTest + err = json.Unmarshal(data, &testcases) + return testcases, err } -// Tests the sample inputs from the elliptic curve pairing check EIP 197. -func TestPrecompiledBn256Pairing(t *testing.T) { - for _, test := range bn256PairingTests { - testPrecompiled("08", test, t) +func loadJsonFail(name string) ([]precompiledFailureTest, error) { + data, err := os.ReadFile(fmt.Sprintf("testdata/precompiles/fail-%v.json", name)) + if err != nil { + return nil, err } + var testcases []precompiledFailureTest + err = json.Unmarshal(data, &testcases) + return testcases, err } -// Behcnmarks the sample inputs from the elliptic curve pairing check EIP 197. -func BenchmarkPrecompiledBn256Pairing(bench *testing.B) { - for _, test := range bn256PairingTests { - benchmarkPrecompiled("08", test, bench) +// BenchmarkPrecompiledBLS12381G1MultiExpWorstCase benchmarks the worst case we could find that still fits a gaslimit of 10MGas. +func BenchmarkPrecompiledBLS12381G1MultiExpWorstCase(b *testing.B) { + task := "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be1" + + "0000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe9" + + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + input := task + for i := 0; i < 4787; i++ { + input = input + task } -} -func TestPrecompiledBlake2F(t *testing.T) { - for _, test := range blake2FTests { - testPrecompiled("09", test, t) + testcase := precompiledTest{ + Input: input, + Expected: "0000000000000000000000000000000005a6310ea6f2a598023ae48819afc292b4dfcb40aabad24a0c2cb6c19769465691859eeb2a764342a810c5038d700f18000000000000000000000000000000001268ac944437d15923dc0aec00daa9250252e43e4b35ec7a19d01f0d6cd27f6e139d80dae16ba1c79cc7f57055a93ff5", + Name: "WorstCaseG1", + NoBenchmark: false, } + benchmarkPrecompiled("0c", testcase, b) } -func BenchmarkPrecompiledBlake2F(bench *testing.B) { - for _, test := range blake2FTests { - benchmarkPrecompiled("09", test, bench) +// BenchmarkPrecompiledBLS12381G2MultiExpWorstCase benchmarks the worst case we could find that still fits a gaslimit of 10MGas. +func BenchmarkPrecompiledBLS12381G2MultiExpWorstCase(b *testing.B) { + task := "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f" + + "000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b99" + + "00000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b" + + "000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c7" + + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + input := task + for i := 0; i < 1040; i++ { + input = input + task } -} -func TestPrecompileBlake2FMalformedInput(t *testing.T) { - for _, test := range blake2FMalformedInputTests { - testPrecompiledFailure("09", test, t) + testcase := precompiledTest{ + Input: input, + Expected: "0000000000000000000000000000000018f5ea0c8b086095cfe23f6bb1d90d45de929292006dba8cdedd6d3203af3c6bbfd592e93ecb2b2c81004961fdcbb46c00000000000000000000000000000000076873199175664f1b6493a43c02234f49dc66f077d3007823e0343ad92e30bd7dc209013435ca9f197aca44d88e9dac000000000000000000000000000000000e6f07f4b23b511eac1e2682a0fc224c15d80e122a3e222d00a41fab15eba645a700b9ae84f331ae4ed873678e2e6c9b000000000000000000000000000000000bcb4849e460612aaed79617255fd30c03f51cf03d2ed4163ca810c13e1954b1e8663157b957a601829bb272a4e6c7b8", + Name: "WorstCaseG2", + NoBenchmark: false, } + benchmarkPrecompiled("0f", testcase, b) } diff --git a/core/vm/eips.go b/core/vm/eips.go index b963e439..93f5c399 100644 --- a/core/vm/eips.go +++ b/core/vm/eips.go @@ -18,27 +18,47 @@ package vm import ( "fmt" + "sort" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" ) +var activators = map[int]func(*JumpTable){ + 3855: enable3855, + 3529: enable3529, + 3198: enable3198, + 2929: enable2929, + 2200: enable2200, + 1884: enable1884, + 1344: enable1344, +} + // 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: + enablerFn, ok := activators[eipNum] + if !ok { return fmt.Errorf("undefined eip %d", eipNum) } + enablerFn(jt) return nil } +func ValidEip(eipNum int) bool { + _, ok := activators[eipNum] + return ok +} +func ActivateableEips() []string { + var nums []string + for k := range activators { + nums = append(nums, fmt.Sprintf("%d", k)) + } + sort.Strings(nums) + return nums +} + // enable1884 applies EIP-1884 to the given jump table: // - Increase cost of BALANCE to 700 // - Increase cost of EXTCODEHASH to 700 @@ -46,23 +66,22 @@ func EnableEIP(eipNum int, jt *JumpTable) error { // - Define SELFBALANCE, with cost GasFastStep (5) func enable1884(jt *JumpTable) { // Gas cost changes + jt[SLOAD].constantGas = params.SloadGasEIP1884 jt[BALANCE].constantGas = params.BalanceGasEIP1884 jt[EXTCODEHASH].constantGas = params.ExtcodeHashGasEIP1884 - jt[SLOAD].constantGas = params.SloadGasEIP1884 // New opcode - jt[SELFBALANCE] = operation{ + 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) +func opSelfBalance(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + balance, _ := uint256.FromBig(interpreter.evm.StateDB.GetBalance(scope.Contract.Address())) + scope.Stack.push(balance) return nil, nil } @@ -70,23 +89,106 @@ func opSelfBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract, // - Adds an opcode that returns the current chain’s EIP-155 unique identifier func enable1344(jt *JumpTable) { // New opcode - jt[CHAINID] = operation{ + 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) +func opChainID(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + chainId, _ := uint256.FromBig(interpreter.evm.chainConfig.ChainID) + scope.Stack.push(chainId) return nil, nil } // enable2200 applies EIP-2200 (Rebalance net-metered SSTORE) func enable2200(jt *JumpTable) { + jt[SLOAD].constantGas = params.SloadGasEIP2200 jt[SSTORE].dynamicGas = gasSStoreEIP2200 } + +// enable2929 enables "EIP-2929: Gas cost increases for state access opcodes" +// https://eips.ethereum.org/EIPS/eip-2929 +func enable2929(jt *JumpTable) { + jt[SSTORE].dynamicGas = gasSStoreEIP2929 + + jt[SLOAD].constantGas = 0 + jt[SLOAD].dynamicGas = gasSLoadEIP2929 + + jt[EXTCODECOPY].constantGas = params.WarmStorageReadCostEIP2929 + jt[EXTCODECOPY].dynamicGas = gasExtCodeCopyEIP2929 + + jt[EXTCODESIZE].constantGas = params.WarmStorageReadCostEIP2929 + jt[EXTCODESIZE].dynamicGas = gasEip2929AccountCheck + + jt[EXTCODEHASH].constantGas = params.WarmStorageReadCostEIP2929 + jt[EXTCODEHASH].dynamicGas = gasEip2929AccountCheck + + jt[BALANCE].constantGas = params.WarmStorageReadCostEIP2929 + jt[BALANCE].dynamicGas = gasEip2929AccountCheck + + jt[CALL].constantGas = params.WarmStorageReadCostEIP2929 + jt[CALL].dynamicGas = gasCallEIP2929 + + jt[CALLCODE].constantGas = params.WarmStorageReadCostEIP2929 + jt[CALLCODE].dynamicGas = gasCallCodeEIP2929 + + jt[STATICCALL].constantGas = params.WarmStorageReadCostEIP2929 + jt[STATICCALL].dynamicGas = gasStaticCallEIP2929 + + jt[DELEGATECALL].constantGas = params.WarmStorageReadCostEIP2929 + jt[DELEGATECALL].dynamicGas = gasDelegateCallEIP2929 + + // This was previously part of the dynamic cost, but we're using it as a constantGas + // factor here + jt[SELFDESTRUCT].constantGas = params.SelfdestructGasEIP150 + jt[SELFDESTRUCT].dynamicGas = gasSelfdestructEIP2929 +} + +// enable3529 enabled "EIP-3529: Reduction in refunds": +// - Removes refunds for selfdestructs +// - Reduces refunds for SSTORE +// - Reduces max refunds to 20% gas +func enable3529(jt *JumpTable) { + jt[SSTORE].dynamicGas = gasSStoreEIP3529 + jt[SELFDESTRUCT].dynamicGas = gasSelfdestructEIP3529 +} + +// enable3198 applies EIP-3198 (BASEFEE Opcode) +// - Adds an opcode that returns the current block's base fee. +func enable3198(jt *JumpTable) { + // New opcode + jt[BASEFEE] = &operation{ + execute: opBaseFee, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + } +} + +// opBaseFee implements BASEFEE opcode +func opBaseFee(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + baseFee, _ := uint256.FromBig(interpreter.evm.Context.BaseFee) + scope.Stack.push(baseFee) + return nil, nil +} + +// enable3855 applies EIP-3855 (PUSH0 opcode) +func enable3855(jt *JumpTable) { + // New opcode + jt[PUSH0] = &operation{ + execute: opPush0, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + } +} + +// opPush0 implements the PUSH0 opcode +func opPush0(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int)) + return nil, nil +} diff --git a/core/vm/errors.go b/core/vm/errors.go index 7f88f324..004f8ef1 100644 --- a/core/vm/errors.go +++ b/core/vm/errors.go @@ -16,15 +16,57 @@ package vm -import "errors" +import ( + "errors" + "fmt" +) -// List execution errors +// List evm execution errors var ( ErrOutOfGas = errors.New("out of gas") ErrCodeStoreOutOfGas = errors.New("contract creation code storage out of gas") ErrDepth = errors.New("max call depth exceeded") - ErrTraceLimitReached = errors.New("the number of logs reached the specified limit") ErrInsufficientBalance = errors.New("insufficient balance for transfer") ErrContractAddressCollision = errors.New("contract address collision") - ErrNoCompatibleInterpreter = errors.New("no compatible interpreter") + ErrExecutionReverted = errors.New("execution reverted") + ErrMaxCodeSizeExceeded = errors.New("max code size exceeded") + ErrInvalidJump = errors.New("invalid jump destination") + ErrWriteProtection = errors.New("write protection") + ErrReturnDataOutOfBounds = errors.New("return data out of bounds") + ErrGasUintOverflow = errors.New("gas uint64 overflow") + ErrInvalidCode = errors.New("invalid code: must not begin with 0xef") + ErrNonceUintOverflow = errors.New("nonce uint64 overflow") + + // errStopToken is an internal token indicating interpreter loop termination, + // never returned to outside callers. + errStopToken = errors.New("stop token") ) + +// ErrStackUnderflow wraps an evm error when the items on the stack less +// than the minimal requirement. +type ErrStackUnderflow struct { + stackLen int + required int +} + +func (e *ErrStackUnderflow) Error() string { + return fmt.Sprintf("stack underflow (%d <=> %d)", e.stackLen, e.required) +} + +// ErrStackOverflow wraps an evm error when the items on the stack exceeds +// the maximum allowance. +type ErrStackOverflow struct { + stackLen int + limit int +} + +func (e *ErrStackOverflow) Error() string { + return fmt.Sprintf("stack limit reached %d (%d)", e.stackLen, e.limit) +} + +// ErrInvalidOpCode wraps an evm error when an invalid opcode is encountered. +type ErrInvalidOpCode struct { + opcode OpCode +} + +func (e *ErrInvalidOpCode) Error() string { return fmt.Sprintf("invalid opcode: %s", e.opcode) } diff --git a/core/vm/evm.go b/core/vm/evm.go index b39d308f..dd55618b 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -21,9 +21,10 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" ) // emptyCodeHash is used by create to ensure deployment is disallowed to already @@ -40,39 +41,25 @@ type ( GetHashFunc func(uint64) common.Hash ) -// run runs the given contract and takes care of running precompiles with a fallback to the byte code interpreter. -func run(evm *EVM, contract *Contract, input []byte, readOnly bool) ([]byte, error) { - if contract.CodeAddr != nil { - precompiles := PrecompiledContractsHomestead - if evm.chainRules.IsByzantium { - precompiles = PrecompiledContractsByzantium - } - if evm.chainRules.IsIstanbul { - precompiles = PrecompiledContractsIstanbul - } - if p := precompiles[*contract.CodeAddr]; p != nil { - return RunPrecompiledContract(p, input, contract) - } - } - for _, interpreter := range evm.interpreters { - if interpreter.CanRun(contract.Code) { - if evm.interpreter != interpreter { - // Ensure that the interpreter pointer is set back - // to its current value upon return. - defer func(i Interpreter) { - evm.interpreter = i - }(evm.interpreter) - evm.interpreter = interpreter - } - return interpreter.Run(contract, input, readOnly) - } +func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { + var precompiles map[common.Address]PrecompiledContract + switch { + case evm.chainRules.IsBerlin: + precompiles = PrecompiledContractsBerlin + case evm.chainRules.IsIstanbul: + precompiles = PrecompiledContractsIstanbul + case evm.chainRules.IsByzantium: + precompiles = PrecompiledContractsByzantium + default: + precompiles = PrecompiledContractsHomestead } - return nil, ErrNoCompatibleInterpreter + p, ok := precompiles[addr] + return p, ok } -// Context provides the EVM with auxiliary information. Once provided +// BlockContext provides the EVM with auxiliary information. Once provided // it shouldn't be modified. -type Context struct { +type BlockContext struct { // CanTransfer returns whether the account contains // sufficient ether to transfer the value CanTransfer CanTransferFunc @@ -81,16 +68,22 @@ type Context struct { // GetHash returns the hash corresponding to n GetHash GetHashFunc - // Message information - Origin common.Address // Provides information for ORIGIN - GasPrice *big.Int // Provides information for GASPRICE - // Block information Coinbase common.Address // Provides information for COINBASE GasLimit uint64 // Provides information for GASLIMIT BlockNumber *big.Int // Provides information for NUMBER Time *big.Int // Provides information for TIME Difficulty *big.Int // Provides information for DIFFICULTY + BaseFee *big.Int // Provides information for BASEFEE + Random *common.Hash // Provides information for RANDOM +} + +// TxContext provides the EVM with information about a transaction. +// All fields can change between transactions. +type TxContext struct { + // Message information + Origin common.Address // Provides information for ORIGIN + GasPrice *big.Int // Provides information for GASPRICE } // EVM is the Ethereum Virtual Machine base object and provides @@ -104,7 +97,8 @@ type Context struct { // The EVM should never be reused and is not thread safe. type EVM struct { // Context provides auxiliary blockchain related information - Context + Context BlockContext + TxContext // StateDB gives access to the underlying state StateDB StateDB // Depth is the current call stack @@ -116,11 +110,10 @@ type EVM struct { chainRules params.Rules // virtual machine configuration options used to initialise the // evm. - vmConfig Config + Config Config // global (to this context) ethereum virtual machine // used throughout the execution of the tx. - interpreters []Interpreter - interpreter Interpreter + interpreter *EVMInterpreter // abort is used to abort the EVM calling operations // NOTE: must be set atomically abort int32 @@ -132,40 +125,26 @@ type EVM struct { // NewEVM returns a new EVM. The returned EVM is not thread safe and should // only ever be used *once*. -func NewEVM(ctx Context, statedb StateDB, chainConfig *params.ChainConfig, vmConfig Config) *EVM { +func NewEVM(blockCtx BlockContext, txCtx TxContext, statedb StateDB, chainConfig *params.ChainConfig, config Config) *EVM { evm := &EVM{ - Context: ctx, - StateDB: statedb, - vmConfig: vmConfig, - chainConfig: chainConfig, - chainRules: chainConfig.Rules(ctx.BlockNumber), - interpreters: make([]Interpreter, 0, 1), - } - - if chainConfig.IsEWASM(ctx.BlockNumber) { - // to be implemented by EVM-C and Wagon PRs. - // if vmConfig.EWASMInterpreter != "" { - // extIntOpts := strings.Split(vmConfig.EWASMInterpreter, ":") - // path := extIntOpts[0] - // options := []string{} - // if len(extIntOpts) > 1 { - // options = extIntOpts[1..] - // } - // evm.interpreters = append(evm.interpreters, NewEVMVCInterpreter(evm, vmConfig, options)) - // } else { - // evm.interpreters = append(evm.interpreters, NewEWASMInterpreter(evm, vmConfig)) - // } - panic("No supported ewasm interpreter yet.") - } - - // vmConfig.EVMInterpreter will be used by EVM-C, it won't be checked here - // as we always want to have the built-in EVM as the failover option. - evm.interpreters = append(evm.interpreters, NewEVMInterpreter(evm, vmConfig)) - evm.interpreter = evm.interpreters[0] - + Context: blockCtx, + TxContext: txCtx, + StateDB: statedb, + Config: config, + chainConfig: chainConfig, + chainRules: chainConfig.Rules(blockCtx.BlockNumber, blockCtx.Random != nil), + } + evm.interpreter = NewEVMInterpreter(evm, config) return evm } +// Reset resets the EVM with a new transaction context.Reset +// This is not threadsafe and should only be done very cautiously. +func (evm *EVM) Reset(txCtx TxContext, statedb StateDB) { + evm.TxContext = txCtx + evm.StateDB = statedb +} + // Cancel cancels any running EVM operation. This may be called concurrently and // it's safe to be called multiple times. func (evm *EVM) Cancel() { @@ -178,7 +157,7 @@ func (evm *EVM) Cancelled() bool { } // Interpreter returns the current interpreter -func (evm *EVM) Interpreter() Interpreter { +func (evm *EVM) Interpreter() *EVMInterpreter { return evm.interpreter } @@ -187,70 +166,82 @@ func (evm *EVM) Interpreter() Interpreter { // the necessary steps to create accounts and reverses the state in case of an // execution error or failed value transfer. func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { - if evm.vmConfig.NoRecursion && evm.depth > 0 { - return nil, gas, nil - } - // Fail if we're trying to execute above the call depth limit if evm.depth > int(params.CallCreateDepth) { return nil, gas, ErrDepth } // Fail if we're trying to transfer more than the available balance - if !evm.Context.CanTransfer(evm.StateDB, caller.Address(), value) { + if value.Sign() != 0 && !evm.Context.CanTransfer(evm.StateDB, caller.Address(), value) { return nil, gas, ErrInsufficientBalance } + snapshot := evm.StateDB.Snapshot() + p, isPrecompile := evm.precompile(addr) - var ( - to = AccountRef(addr) - snapshot = evm.StateDB.Snapshot() - ) if !evm.StateDB.Exist(addr) { - precompiles := PrecompiledContractsHomestead - if evm.chainRules.IsByzantium { - precompiles = PrecompiledContractsByzantium - } - if evm.chainRules.IsIstanbul { - precompiles = PrecompiledContractsIstanbul - } - if precompiles[addr] == nil && evm.chainRules.IsEIP158 && value.Sign() == 0 { + if !isPrecompile && 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) - evm.vmConfig.Tracer.CaptureEnd(ret, 0, 0, nil) + if evm.Config.Debug { + if evm.depth == 0 { + evm.Config.Tracer.CaptureStart(evm, caller.Address(), addr, false, input, gas, value) + evm.Config.Tracer.CaptureEnd(ret, 0, 0, nil) + } else { + evm.Config.Tracer.CaptureEnter(CALL, caller.Address(), addr, input, gas, value) + evm.Config.Tracer.CaptureExit(ret, 0, nil) + } } return nil, gas, nil } evm.StateDB.CreateAccount(addr) } - evm.Transfer(evm.StateDB, caller.Address(), to.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. - contract := NewContract(caller, to, value, gas) - contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) - - // Even if the account has no code, we need to continue because it might be a precompile - start := time.Now() + evm.Context.Transfer(evm.StateDB, caller.Address(), addr, value) // Capture the tracer start/end events in debug mode - if evm.vmConfig.Debug && evm.depth == 0 { - evm.vmConfig.Tracer.CaptureStart(caller.Address(), addr, false, input, gas, value) - - defer func() { // Lazy evaluation of the parameters - evm.vmConfig.Tracer.CaptureEnd(ret, gas-contract.Gas, time.Since(start), err) - }() + if evm.Config.Debug { + if evm.depth == 0 { + evm.Config.Tracer.CaptureStart(evm, caller.Address(), addr, false, input, gas, value) + defer func(startGas uint64, startTime time.Time) { // Lazy evaluation of the parameters + evm.Config.Tracer.CaptureEnd(ret, startGas-gas, time.Since(startTime), err) + }(gas, time.Now()) + } else { + // Handle tracer events for entering and exiting a call frame + evm.Config.Tracer.CaptureEnter(CALL, caller.Address(), addr, input, gas, value) + defer func(startGas uint64) { + evm.Config.Tracer.CaptureExit(ret, startGas-gas, err) + }(gas) + } } - ret, err = run(evm, contract, input, false) + if isPrecompile { + ret, gas, err = RunPrecompiledContract(p, input, gas) + } else { + // 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. + code := evm.StateDB.GetCode(addr) + if len(code) == 0 { + ret, err = nil, nil // gas is unchanged + } else { + addrCopy := addr + // If the account has no code, we can abort here + // The depth-check is already done, and precompiles handled above + contract := NewContract(caller, AccountRef(addrCopy), value, gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), code) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } + } // 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 err != nil { evm.StateDB.RevertToSnapshot(snapshot) - if err != errExecutionReverted { - contract.UseGas(contract.Gas) + if err != ErrExecutionReverted { + gas = 0 } + // TODO: consider clearing up unused snapshots: + //} else { + // evm.StateDB.DiscardSnapshot(snapshot) } - return ret, contract.Gas, err + return ret, gas, err } // CallCode executes the contract associated with the addr with the given input @@ -261,36 +252,46 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas // CallCode differs from Call in the sense that it executes the given address' // code with the caller as context. func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { - if evm.vmConfig.NoRecursion && evm.depth > 0 { - return nil, gas, nil - } - // Fail if we're trying to execute above the call depth limit if evm.depth > int(params.CallCreateDepth) { return nil, gas, ErrDepth } // Fail if we're trying to transfer more than the available balance - if !evm.CanTransfer(evm.StateDB, caller.Address(), value) { + // Note although it's noop to transfer X ether to caller itself. But + // if caller doesn't have enough balance, it would be an error to allow + // over-charging itself. So the check here is necessary. + if !evm.Context.CanTransfer(evm.StateDB, caller.Address(), value) { return nil, gas, ErrInsufficientBalance } + var snapshot = evm.StateDB.Snapshot() + + // Invoke tracer hooks that signal entering/exiting a call frame + if evm.Config.Debug { + evm.Config.Tracer.CaptureEnter(CALLCODE, caller.Address(), addr, input, gas, value) + defer func(startGas uint64) { + evm.Config.Tracer.CaptureExit(ret, startGas-gas, err) + }(gas) + } - var ( - 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. - contract := NewContract(caller, to, value, gas) - contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) - - ret, err = run(evm, contract, input, false) + // It is allowed to call precompiles, even via delegatecall + if p, isPrecompile := evm.precompile(addr); isPrecompile { + ret, gas, err = RunPrecompiledContract(p, input, gas) + } else { + addrCopy := addr + // 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(caller.Address()), value, gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) - if err != errExecutionReverted { - contract.UseGas(contract.Gas) + if err != ErrExecutionReverted { + gas = 0 } } - return ret, contract.Gas, err + return ret, gas, err } // DelegateCall executes the contract associated with the addr with the given input @@ -299,31 +300,38 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, // DelegateCall differs from CallCode in the sense that it executes the given address' // code with the caller as context and the caller is set to the caller of the caller. func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { - if evm.vmConfig.NoRecursion && evm.depth > 0 { - return nil, gas, nil - } // Fail if we're trying to execute above the call depth limit if evm.depth > int(params.CallCreateDepth) { return nil, gas, ErrDepth } + var snapshot = evm.StateDB.Snapshot() + + // Invoke tracer hooks that signal entering/exiting a call frame + if evm.Config.Debug { + evm.Config.Tracer.CaptureEnter(DELEGATECALL, caller.Address(), addr, input, gas, nil) + defer func(startGas uint64) { + evm.Config.Tracer.CaptureExit(ret, startGas-gas, err) + }(gas) + } - var ( - snapshot = evm.StateDB.Snapshot() - to = AccountRef(caller.Address()) - ) - - // Initialise a new contract and make initialise the delegate values - contract := NewContract(caller, to, nil, gas).AsDelegate() - contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) - - ret, err = run(evm, contract, input, false) + // It is allowed to call precompiles, even via delegatecall + if p, isPrecompile := evm.precompile(addr); isPrecompile { + ret, gas, err = RunPrecompiledContract(p, input, gas) + } else { + addrCopy := addr + // Initialise a new contract and make initialise the delegate values + contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate() + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) - if err != errExecutionReverted { - contract.UseGas(contract.Gas) + if err != ErrExecutionReverted { + gas = 0 } } - return ret, contract.Gas, err + return ret, gas, err } // StaticCall executes the contract associated with the addr with the given input @@ -331,40 +339,55 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by // Opcodes that attempt to perform such modifications will result in exceptions // instead of performing the modifications. func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { - if evm.vmConfig.NoRecursion && evm.depth > 0 { - return nil, gas, nil - } // Fail if we're trying to execute above the call depth limit if evm.depth > int(params.CallCreateDepth) { return nil, gas, ErrDepth } - - var ( - 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. - contract := NewContract(caller, to, new(big.Int), gas) - contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) + // We take a snapshot here. This is a bit counter-intuitive, and could probably be skipped. + // However, even a staticcall is considered a 'touch'. On mainnet, static calls were introduced + // after all empty accounts were deleted, so this is not required. However, if we omit this, + // then certain tests start failing; stRevertTest/RevertPrecompiledTouchExactOOG.json. + // We could change this, but for now it's left for legacy reasons + var snapshot = evm.StateDB.Snapshot() // We do an AddBalance of zero here, just in order to trigger a touch. // This doesn't matter on Mainnet, where all empties are gone at the time of Byzantium, // but is the correct thing to do and matters on other networks, in tests, and potential // future scenarios - evm.StateDB.AddBalance(addr, bigZero) + evm.StateDB.AddBalance(addr, big0) + + // Invoke tracer hooks that signal entering/exiting a call frame + if evm.Config.Debug { + evm.Config.Tracer.CaptureEnter(STATICCALL, caller.Address(), addr, input, gas, nil) + defer func(startGas uint64) { + evm.Config.Tracer.CaptureExit(ret, startGas-gas, err) + }(gas) + } - // 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. - ret, err = run(evm, contract, input, true) + if p, isPrecompile := evm.precompile(addr); isPrecompile { + ret, gas, err = RunPrecompiledContract(p, input, gas) + } else { + // At this point, we use a copy of address. If we don't, the go compiler will + // leak the 'contract' to the outer scope, and make allocation for 'contract' + // even if the actual execution ends on RunPrecompiled above. + addrCopy := addr + // 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(addrCopy), new(big.Int), gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + // 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. + ret, err = evm.interpreter.Run(contract, input, true) + gas = contract.Gas + } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) - if err != errExecutionReverted { - contract.UseGas(contract.Gas) + if err != ErrExecutionReverted { + gas = 0 } } - return ret, contract.Gas, err + return ret, gas, err } type codeAndHash struct { @@ -380,18 +403,25 @@ func (c *codeAndHash) Hash() common.Hash { } // create creates a new contract using code as deployment code. -func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, value *big.Int, address common.Address) ([]byte, common.Address, uint64, error) { +func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, value *big.Int, address common.Address, typ OpCode) ([]byte, common.Address, uint64, error) { // Depth check execution. Fail if we're trying to execute above the // limit. if evm.depth > int(params.CallCreateDepth) { return nil, common.Address{}, gas, ErrDepth } - if !evm.CanTransfer(evm.StateDB, caller.Address(), value) { + if !evm.Context.CanTransfer(evm.StateDB, caller.Address(), value) { return nil, common.Address{}, gas, ErrInsufficientBalance } nonce := evm.StateDB.GetNonce(caller.Address()) + if nonce+1 < nonce { + return nil, common.Address{}, gas, ErrNonceUintOverflow + } evm.StateDB.SetNonce(caller.Address(), nonce+1) - + // We add this to the access list _before_ taking a snapshot. Even if the creation fails, + // the access-list change should not be rolled back + if evm.chainRules.IsBerlin { + evm.StateDB.AddAddressToAccessList(address) + } // Ensure there's no existing contract already at the designated address contractHash := evm.StateDB.GetCodeHash(address) if evm.StateDB.GetNonce(address) != 0 || (contractHash != (common.Hash{}) && contractHash != emptyCodeHash) { @@ -403,31 +433,40 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, if evm.chainRules.IsEIP158 { evm.StateDB.SetNonce(address, 1) } - evm.Transfer(evm.StateDB, caller.Address(), address, value) + evm.Context.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. contract := NewContract(caller, AccountRef(address), value, gas) contract.SetCodeOptionalHash(&address, codeAndHash) - if evm.vmConfig.NoRecursion && evm.depth > 0 { - return nil, address, gas, nil + if evm.Config.Debug { + if evm.depth == 0 { + evm.Config.Tracer.CaptureStart(evm, caller.Address(), address, true, codeAndHash.code, gas, value) + } else { + evm.Config.Tracer.CaptureEnter(typ, caller.Address(), address, codeAndHash.code, gas, value) + } } - if evm.vmConfig.Debug && evm.depth == 0 { - evm.vmConfig.Tracer.CaptureStart(caller.Address(), address, true, codeAndHash.code, gas, value) - } start := time.Now() - ret, err := run(evm, contract, nil, false) + ret, err := evm.interpreter.Run(contract, nil, false) + + // Check whether the max code size has been exceeded, assign err if the case. + if err == nil && evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize { + err = ErrMaxCodeSizeExceeded + } + + // Reject code starting with 0xEF if EIP-3541 is enabled. + if err == nil && len(ret) >= 1 && ret[0] == 0xEF && evm.chainRules.IsLondon { + err = ErrInvalidCode + } - // check whether the max code size has been exceeded - 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 // by the error checking condition below. - if err == nil && !maxCodeSizeExceeded { + if err == nil { createDataGas := uint64(len(ret)) * params.CreateDataGas if contract.UseGas(createDataGas) { evm.StateDB.SetCode(address, ret) @@ -439,37 +478,37 @@ 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.chainRules.IsHomestead || err != ErrCodeStoreOutOfGas)) { + if err != nil && (evm.chainRules.IsHomestead || err != ErrCodeStoreOutOfGas) { evm.StateDB.RevertToSnapshot(snapshot) - if err != errExecutionReverted { + if err != ErrExecutionReverted { contract.UseGas(contract.Gas) } } - // Assign err if contract code size exceeds the max while the err is still empty. - if maxCodeSizeExceeded && err == nil { - err = errMaxCodeSizeExceeded - } - if evm.vmConfig.Debug && evm.depth == 0 { - evm.vmConfig.Tracer.CaptureEnd(ret, gas-contract.Gas, time.Since(start), err) + + if evm.Config.Debug { + if evm.depth == 0 { + evm.Config.Tracer.CaptureEnd(ret, gas-contract.Gas, time.Since(start), err) + } else { + evm.Config.Tracer.CaptureExit(ret, gas-contract.Gas, err) + } } return ret, address, contract.Gas, err - } // Create creates a new contract using code as deployment code. func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) { contractAddr = crypto.CreateAddress(caller.Address(), evm.StateDB.GetNonce(caller.Address())) - return evm.create(caller, &codeAndHash{code: code}, gas, value, contractAddr) + return evm.create(caller, &codeAndHash{code: code}, gas, value, contractAddr, CREATE) } // Create2 creates a new contract using code as deployment code. // -// The different between Create2 with Create is Create2 uses sha3(0xff ++ msg.sender ++ salt ++ sha3(init_code))[12:] +// The different between Create2 with Create is Create2 uses keccak256(0xff ++ msg.sender ++ salt ++ keccak256(init_code))[12:] // instead of the usual sender-and-nonce-hash as the address where the contract is initialized at. -func (evm *EVM) Create2(caller ContractRef, code []byte, gas uint64, endowment *big.Int, salt *big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) { +func (evm *EVM) Create2(caller ContractRef, code []byte, gas uint64, endowment *big.Int, salt *uint256.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) { codeAndHash := &codeAndHash{code: code} - contractAddr = crypto.CreateAddress2(caller.Address(), common.BigToHash(salt), codeAndHash.Hash().Bytes()) - return evm.create(caller, codeAndHash, gas, endowment, contractAddr) + contractAddr = crypto.CreateAddress2(caller.Address(), salt.Bytes32(), codeAndHash.Hash().Bytes()) + return evm.create(caller, codeAndHash, gas, endowment, contractAddr, CREATE2) } // ChainConfig returns the environment's chain configuration diff --git a/core/vm/gas.go b/core/vm/gas.go index bd8b4f10..5cf1d852 100644 --- a/core/vm/gas.go +++ b/core/vm/gas.go @@ -17,7 +17,7 @@ package vm import ( - "math/big" + "github.com/holiman/uint256" ) // Gas costs @@ -30,23 +30,23 @@ const ( GasExtStep uint64 = 20 ) -// calcGas returns the actual gas cost of the call. +// callGas returns the actual gas cost of the call. // // 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) { +func callGas(isEip150 bool, availableGas, base uint64, callCost *uint256.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 + // is smaller than the requested amount. Therefore we return the new gas instead // of returning an error. if !callCost.IsUint64() || gas < callCost.Uint64() { return gas, nil } } if !callCost.IsUint64() { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return callCost.Uint64(), nil diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index ca58ec90..4c2cb3e5 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -19,9 +19,9 @@ package vm import ( "errors" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/params" ) // memoryGasCost calculates the quadratic gas for memory expansion. It does so @@ -36,7 +36,7 @@ func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { // overflow. The constant 0x1FFFFFFFE0 is the highest number that can be used // without overflowing the gas calculation. if newMemSize > 0x1FFFFFFFE0 { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } newMemSizeWords := toWordSize(newMemSize) newMemSize = newMemSizeWords * 32 @@ -60,7 +60,7 @@ func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { // as argument: // CALLDATACOPY (stack position 2) // CODECOPY (stack position 2) -// EXTCODECOPY (stack poition 3) +// EXTCODECOPY (stack position 3) // RETURNDATACOPY (stack position 2) func memoryCopierGas(stackpos int) gasFunc { return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { @@ -70,17 +70,17 @@ func memoryCopierGas(stackpos int) gasFunc { return 0, err } // And gas for copying data, charged per word at param.CopyGas - words, overflow := bigUint64(stack.Back(stackpos)) + words, overflow := stack.Back(stackpos).Uint64WithOverflow() if overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } if words, overflow = math.SafeMul(toWordSize(words), params.CopyGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } if gas, overflow = math.SafeAdd(gas, words); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -96,7 +96,7 @@ var ( 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)) + current = evm.StateDB.GetState(contract.Address(), x.Bytes32()) ) // The legacy gas metering only takes into consideration the current state // Legacy rules should be applied if we are in Petersburg (removal of EIP-1283) @@ -131,11 +131,11 @@ func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySi // 2.2.2. If original value equals new value (this storage slot is reset) // 2.2.2.1. If original value is 0, add 19800 gas to refund counter. // 2.2.2.2. Otherwise, add 4800 gas to refund counter. - value := common.BigToHash(y) + value := common.Hash(y.Bytes32()) if current == value { // noop (1) return params.NetSstoreNoopGas, nil } - original := evm.StateDB.GetCommittedState(contract.Address(), common.BigToHash(x)) + original := evm.StateDB.GetCommittedState(contract.Address(), x.Bytes32()) if original == current { if original == (common.Hash{}) { // create slot (2.1.1) return params.NetSstoreInitGas, nil @@ -163,18 +163,18 @@ func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySi } // 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. +// 1. If current value equals new value (this is a no-op), SLOAD_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.1.1. If original value is 0, SSTORE_SET_GAS (20K) gas is deducted. +// 2.1.2. Otherwise, SSTORE_RESET_GAS gas is deducted. If new value is 0, add SSTORE_CLEARS_SCHEDULE to refund counter. +// 2.2. If original value does not equal current value (this storage slot is dirty), SLOAD_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.1.1. If current value is 0 (also means that new value is not 0), subtract SSTORE_CLEARS_SCHEDULE gas from refund counter. +// 2.2.1.2. If new value is 0 (also means that current value is not 0), add SSTORE_CLEARS_SCHEDULE 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. +// 2.2.2.1. If original value is 0, add SSTORE_SET_GAS - SLOAD_GAS to refund counter. +// 2.2.2.2. Otherwise, add SSTORE_RESET_GAS - SLOAD_GAS 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 { @@ -183,45 +183,45 @@ func gasSStoreEIP2200(evm *EVM, contract *Contract, stack *Stack, mem *Memory, m // 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)) + current = evm.StateDB.GetState(contract.Address(), x.Bytes32()) ) - value := common.BigToHash(y) + value := common.Hash(y.Bytes32()) if current == value { // noop (1) - return params.SstoreNoopGasEIP2200, nil + return params.SloadGasEIP2200, nil } - original := evm.StateDB.GetCommittedState(contract.Address(), common.BigToHash(x)) + original := evm.StateDB.GetCommittedState(contract.Address(), x.Bytes32()) if original == current { if original == (common.Hash{}) { // create slot (2.1.1) - return params.SstoreInitGasEIP2200, nil + return params.SstoreSetGasEIP2200, nil } if value == (common.Hash{}) { // delete slot (2.1.2b) - evm.StateDB.AddRefund(params.SstoreClearRefundEIP2200) + evm.StateDB.AddRefund(params.SstoreClearsScheduleRefundEIP2200) } - return params.SstoreCleanGasEIP2200, nil // write existing slot (2.1.2) + return params.SstoreResetGasEIP2200, 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) + evm.StateDB.SubRefund(params.SstoreClearsScheduleRefundEIP2200) } else if value == (common.Hash{}) { // delete slot (2.2.1.2) - evm.StateDB.AddRefund(params.SstoreClearRefundEIP2200) + evm.StateDB.AddRefund(params.SstoreClearsScheduleRefundEIP2200) } } if original == value { if original == (common.Hash{}) { // reset to original inexistent slot (2.2.2.1) - evm.StateDB.AddRefund(params.SstoreInitRefundEIP2200) + evm.StateDB.AddRefund(params.SstoreSetGasEIP2200 - params.SloadGasEIP2200) } else { // reset to original existing slot (2.2.2.2) - evm.StateDB.AddRefund(params.SstoreCleanRefundEIP2200) + evm.StateDB.AddRefund(params.SstoreResetGasEIP2200 - params.SloadGasEIP2200) } } - return params.SstoreDirtyGasEIP2200, nil // dirty update (2.2) + return params.SloadGasEIP2200, nil // dirty update (2.2) } func makeGasLog(n uint64) gasFunc { return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - requestedSize, overflow := bigUint64(stack.Back(1)) + requestedSize, overflow := stack.Back(1).Uint64WithOverflow() if overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } gas, err := memoryGasCost(mem, memorySize) @@ -230,37 +230,37 @@ func makeGasLog(n uint64) gasFunc { } if gas, overflow = math.SafeAdd(gas, params.LogGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } if gas, overflow = math.SafeAdd(gas, n*params.LogTopicGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } var memorySizeGas uint64 if memorySizeGas, overflow = math.SafeMul(requestedSize, params.LogDataGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } if gas, overflow = math.SafeAdd(gas, memorySizeGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } } -func gasSha3(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasKeccak256(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - wordGas, overflow := bigUint64(stack.Back(1)) + wordGas, overflow := stack.Back(1).Uint64WithOverflow() if overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } - if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.Sha3WordGas); overflow { - return 0, errGasUintOverflow + if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.Keccak256WordGas); overflow { + return 0, ErrGasUintOverflow } if gas, overflow = math.SafeAdd(gas, wordGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -286,15 +286,15 @@ func gasCreate2(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memoryS if err != nil { return 0, err } - wordGas, overflow := bigUint64(stack.Back(2)) + wordGas, overflow := stack.Back(2).Uint64WithOverflow() if overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } - if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.Sha3WordGas); overflow { - return 0, errGasUintOverflow + if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.Keccak256WordGas); overflow { + return 0, ErrGasUintOverflow } if gas, overflow = math.SafeAdd(gas, wordGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -307,7 +307,7 @@ func gasExpFrontier(evm *EVM, contract *Contract, stack *Stack, mem *Memory, mem overflow bool ) if gas, overflow = math.SafeAdd(gas, params.ExpGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -320,7 +320,7 @@ func gasExpEIP158(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memor overflow bool ) if gas, overflow = math.SafeAdd(gas, params.ExpGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -328,8 +328,8 @@ func gasExpEIP158(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memor func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { var ( gas uint64 - transfersValue = stack.Back(2).Sign() != 0 - address = common.BigToAddress(stack.Back(1)) + transfersValue = !stack.Back(2).IsZero() + address = common.Address(stack.Back(1).Bytes20()) ) if evm.chainRules.IsEIP158 { if transfersValue && evm.StateDB.Empty(address) { @@ -347,7 +347,7 @@ func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize } var overflow bool if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) @@ -355,7 +355,7 @@ func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize return 0, err } if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -373,14 +373,14 @@ func gasCallCode(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memory gas += params.CallValueTransferGas } if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) if err != nil { return 0, err } if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -396,7 +396,7 @@ func gasDelegateCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, me } var overflow bool if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -412,7 +412,7 @@ func gasStaticCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memo } var overflow bool if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, errGasUintOverflow + return 0, ErrGasUintOverflow } return gas, nil } @@ -422,7 +422,7 @@ func gasSelfdestruct(evm *EVM, contract *Contract, stack *Stack, mem *Memory, me // EIP150 homestead gas reprice fork: if evm.chainRules.IsEIP150 { gas = params.SelfdestructGasEIP150 - var address = common.BigToAddress(stack.Back(0)) + var address = common.Address(stack.Back(0).Bytes20()) if evm.chainRules.IsEIP158 { // if empty and transfers value diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 3586cfde..6cd126c9 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -21,11 +21,11 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/params" + "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) { @@ -39,8 +39,8 @@ func TestMemoryGasCost(t *testing.T) { } 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 (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) @@ -81,17 +81,17 @@ 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, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) 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{ + vmctx := BlockContext{ 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}}) + vmenv := NewEVM(vmctx, TxContext{}, statedb, params.AllEthashProtocolChanges, Config{ExtraEips: []int{2200}}) _, gas, err := vmenv.Call(AccountRef(common.Address{}), address, nil, tt.gaspool, new(big.Int)) if err != tt.failure { diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 91c0ea02..92be3bf2 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -17,374 +17,225 @@ package vm import ( - "errors" - "math/big" + "sync/atomic" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" "golang.org/x/crypto/sha3" ) -var ( - bigZero = new(big.Int) - tt255 = math.BigPow(2, 255) - errWriteProtection = errors.New("evm: write protection") - 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) { - x, y := stack.pop(), stack.peek() - math.U256(y.Add(x, y)) - - interpreter.intPool.put(x) +func opAdd(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Add(&x, y) return nil, nil } -func opSub(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - math.U256(y.Sub(x, y)) - - interpreter.intPool.put(x) +func opSub(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Sub(&x, y) return nil, nil } -func opMul(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.pop() - stack.push(math.U256(x.Mul(x, y))) - - interpreter.intPool.put(y) - +func opMul(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Mul(&x, y) return nil, nil } -func opDiv(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - if y.Sign() != 0 { - math.U256(y.Div(x, y)) - } else { - y.SetUint64(0) - } - interpreter.intPool.put(x) +func opDiv(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Div(&x, y) return nil, nil } -func opSdiv(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := math.S256(stack.pop()), math.S256(stack.pop()) - res := interpreter.intPool.getZero() - - if y.Sign() == 0 || x.Sign() == 0 { - stack.push(res) - } else { - if x.Sign() != y.Sign() { - res.Div(x.Abs(x), y.Abs(y)) - res.Neg(res) - } else { - res.Div(x.Abs(x), y.Abs(y)) - } - stack.push(math.U256(res)) - } - interpreter.intPool.put(x, y) +func opSdiv(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.SDiv(&x, y) return nil, nil } -func opMod(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.pop() - if y.Sign() == 0 { - stack.push(x.SetUint64(0)) - } else { - stack.push(math.U256(x.Mod(x, y))) - } - interpreter.intPool.put(y) +func opMod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Mod(&x, y) return nil, nil } -func opSmod(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := math.S256(stack.pop()), math.S256(stack.pop()) - res := interpreter.intPool.getZero() - - if y.Sign() == 0 { - stack.push(res) - } else { - if x.Sign() < 0 { - res.Mod(x.Abs(x), y.Abs(y)) - res.Neg(res) - } else { - res.Mod(x.Abs(x), y.Abs(y)) - } - stack.push(math.U256(res)) - } - interpreter.intPool.put(x, y) +func opSmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.SMod(&x, y) return nil, nil } -func opExp(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - base, exponent := stack.pop(), stack.pop() - // some shortcuts - cmpToOne := exponent.Cmp(big1) - if cmpToOne < 0 { // Exponent is zero - // x ^ 0 == 1 - stack.push(base.SetUint64(1)) - } else if base.Sign() == 0 { - // 0 ^ y, if y != 0, == 0 - stack.push(base.SetUint64(0)) - } else if cmpToOne == 0 { // Exponent is one - // x ^ 1 == x - stack.push(base) - } else { - stack.push(math.Exp(base, exponent)) - interpreter.intPool.put(base) - } - interpreter.intPool.put(exponent) +func opExp(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + base, exponent := scope.Stack.pop(), scope.Stack.peek() + exponent.Exp(&base, exponent) return nil, nil } -func opSignExtend(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - back := stack.pop() - if back.Cmp(big.NewInt(31)) < 0 { - bit := uint(back.Uint64()*8 + 7) - num := stack.pop() - mask := back.Lsh(common.Big1, bit) - mask.Sub(mask, common.Big1) - if num.Bit(int(bit)) > 0 { - num.Or(num, mask.Not(mask)) - } else { - num.And(num, mask) - } - - stack.push(math.U256(num)) - } - - interpreter.intPool.put(back) +func opSignExtend(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + back, num := scope.Stack.pop(), scope.Stack.peek() + num.ExtendSign(num, &back) return nil, nil } -func opNot(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x := stack.peek() - math.U256(x.Not(x)) +func opNot(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x := scope.Stack.peek() + x.Not(x) return nil, nil } -func opLt(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - if x.Cmp(y) < 0 { - y.SetUint64(1) +func opLt(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + if x.Lt(y) { + y.SetOne() } else { - y.SetUint64(0) + y.Clear() } - interpreter.intPool.put(x) return nil, nil } -func opGt(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - if x.Cmp(y) > 0 { - y.SetUint64(1) +func opGt(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + if x.Gt(y) { + y.SetOne() } else { - y.SetUint64(0) + y.Clear() } - interpreter.intPool.put(x) return nil, nil } -func opSlt(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - - xSign := x.Cmp(tt255) - ySign := y.Cmp(tt255) - - switch { - case xSign >= 0 && ySign < 0: - y.SetUint64(1) - - case xSign < 0 && ySign >= 0: - y.SetUint64(0) - - default: - if x.Cmp(y) < 0 { - y.SetUint64(1) - } else { - y.SetUint64(0) - } +func opSlt(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + if x.Slt(y) { + y.SetOne() + } else { + y.Clear() } - interpreter.intPool.put(x) return nil, nil } -func opSgt(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - - xSign := x.Cmp(tt255) - ySign := y.Cmp(tt255) - - switch { - case xSign >= 0 && ySign < 0: - y.SetUint64(0) - - case xSign < 0 && ySign >= 0: - y.SetUint64(1) - - default: - if x.Cmp(y) > 0 { - y.SetUint64(1) - } else { - y.SetUint64(0) - } +func opSgt(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + if x.Sgt(y) { + y.SetOne() + } else { + y.Clear() } - interpreter.intPool.put(x) return nil, nil } -func opEq(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - if x.Cmp(y) == 0 { - y.SetUint64(1) +func opEq(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + if x.Eq(y) { + y.SetOne() } else { - y.SetUint64(0) + y.Clear() } - interpreter.intPool.put(x) return nil, nil } -func opIszero(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x := stack.peek() - if x.Sign() > 0 { - x.SetUint64(0) +func opIszero(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x := scope.Stack.peek() + if x.IsZero() { + x.SetOne() } else { - x.SetUint64(1) + x.Clear() } return nil, nil } -func opAnd(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.pop() - stack.push(x.And(x, y)) - - interpreter.intPool.put(y) +func opAnd(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.And(&x, y) return nil, nil } -func opOr(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - y.Or(x, y) - - interpreter.intPool.put(x) +func opOr(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Or(&x, y) return nil, nil } -func opXor(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y := stack.pop(), stack.peek() - y.Xor(x, y) - - interpreter.intPool.put(x) +func opXor(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y := scope.Stack.pop(), scope.Stack.peek() + y.Xor(&x, y) return nil, nil } -func opByte(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - th, val := stack.pop(), stack.peek() - if th.Cmp(common.Big32) < 0 { - b := math.Byte(val, 32, int(th.Int64())) - val.SetUint64(uint64(b)) - } else { - val.SetUint64(0) - } - interpreter.intPool.put(th) +func opByte(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + th, val := scope.Stack.pop(), scope.Stack.peek() + val.Byte(&th) return nil, nil } -func opAddmod(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y, z := stack.pop(), stack.pop(), stack.pop() - if z.Cmp(bigZero) > 0 { - x.Add(x, y) - x.Mod(x, z) - stack.push(math.U256(x)) +func opAddmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y, z := scope.Stack.pop(), scope.Stack.pop(), scope.Stack.peek() + if z.IsZero() { + z.Clear() } else { - stack.push(x.SetUint64(0)) + z.AddMod(&x, &y, z) } - interpreter.intPool.put(y, z) return nil, nil } -func opMulmod(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - x, y, z := stack.pop(), stack.pop(), stack.pop() - if z.Cmp(bigZero) > 0 { - x.Mul(x, y) - x.Mod(x, z) - stack.push(math.U256(x)) - } else { - stack.push(x.SetUint64(0)) - } - interpreter.intPool.put(y, z) +func opMulmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x, y, z := scope.Stack.pop(), scope.Stack.pop(), scope.Stack.peek() + z.MulMod(&x, &y, z) return nil, nil } // opSHL implements Shift Left // The SHL instruction (shift left) pops 2 values from the stack, first arg1 and then arg2, // and pushes on the stack arg2 shifted to the left by arg1 number of bits. -func opSHL(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opSHL(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // Note, second operand is left in the stack; accumulate result into it, and no need to push it afterwards - shift, value := math.U256(stack.pop()), math.U256(stack.peek()) - defer interpreter.intPool.put(shift) // First operand back into the pool - - if shift.Cmp(common.Big256) >= 0 { - value.SetUint64(0) - return nil, nil + shift, value := scope.Stack.pop(), scope.Stack.peek() + if shift.LtUint64(256) { + value.Lsh(value, uint(shift.Uint64())) + } else { + value.Clear() } - n := uint(shift.Uint64()) - math.U256(value.Lsh(value, n)) - return nil, nil } // opSHR implements Logical Shift Right // The SHR instruction (logical shift right) pops 2 values from the stack, first arg1 and then arg2, // and pushes on the stack arg2 shifted to the right by arg1 number of bits with zero fill. -func opSHR(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opSHR(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // Note, second operand is left in the stack; accumulate result into it, and no need to push it afterwards - shift, value := math.U256(stack.pop()), math.U256(stack.peek()) - defer interpreter.intPool.put(shift) // First operand back into the pool - - if shift.Cmp(common.Big256) >= 0 { - value.SetUint64(0) - return nil, nil + shift, value := scope.Stack.pop(), scope.Stack.peek() + if shift.LtUint64(256) { + value.Rsh(value, uint(shift.Uint64())) + } else { + value.Clear() } - n := uint(shift.Uint64()) - math.U256(value.Rsh(value, n)) - return nil, nil } // opSAR implements Arithmetic Shift Right // The SAR instruction (arithmetic shift right) pops 2 values from the stack, first arg1 and then arg2, // and pushes on the stack arg2 shifted to the right by arg1 number of bits with sign extension. -func opSAR(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - // Note, S256 returns (potentially) a new bigint, so we're popping, not peeking this one - shift, value := math.U256(stack.pop()), math.S256(stack.pop()) - defer interpreter.intPool.put(shift) // First operand back into the pool - - if shift.Cmp(common.Big256) >= 0 { +func opSAR(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + shift, value := scope.Stack.pop(), scope.Stack.peek() + if shift.GtUint64(256) { if value.Sign() >= 0 { - value.SetUint64(0) + value.Clear() } else { - value.SetInt64(-1) + // Max negative shift: all bits set + value.SetAllOne() } - stack.push(math.U256(value)) return nil, nil } n := uint(shift.Uint64()) - value.Rsh(value, n) - stack.push(math.U256(value)) - + value.SRsh(value, n) return nil, nil } -func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - offset, size := stack.pop(), stack.pop() - data := memory.Get(offset.Int64(), size.Int64()) +func opKeccak256(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + offset, size := scope.Stack.pop(), scope.Stack.peek() + data := scope.Memory.GetPtr(int64(offset.Uint64()), int64(size.Uint64())) if interpreter.hasher == nil { interpreter.hasher = sha3.NewLegacyKeccak256().(keccakState) @@ -395,124 +246,146 @@ func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory interpreter.hasher.Read(interpreter.hasherBuf[:]) evm := interpreter.evm - if evm.vmConfig.EnablePreimageRecording { + if evm.Config.EnablePreimageRecording { evm.StateDB.AddPreimage(interpreter.hasherBuf, data) } - stack.push(interpreter.intPool.get().SetBytes(interpreter.hasherBuf[:])) - interpreter.intPool.put(offset, size) + size.SetBytes(interpreter.hasherBuf[:]) return nil, nil } - -func opAddress(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetBytes(contract.Address().Bytes())) +func opAddress(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetBytes(scope.Contract.Address().Bytes())) return nil, nil } -func opBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - slot := stack.peek() - slot.Set(interpreter.evm.StateDB.GetBalance(common.BigToAddress(slot))) +func opBalance(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + slot := scope.Stack.peek() + address := common.Address(slot.Bytes20()) + slot.SetFromBig(interpreter.evm.StateDB.GetBalance(address)) return nil, nil } -func opOrigin(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Origin.Bytes())) +func opOrigin(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetBytes(interpreter.evm.Origin.Bytes())) return nil, nil } - -func opCaller(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetBytes(contract.Caller().Bytes())) +func opCaller(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetBytes(scope.Contract.Caller().Bytes())) return nil, nil } -func opCallValue(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().Set(contract.value)) +func opCallValue(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v, _ := uint256.FromBig(scope.Contract.value) + scope.Stack.push(v) return nil, nil } -func opCallDataLoad(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetBytes(getDataBig(contract.Input, stack.pop(), big32))) +func opCallDataLoad(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x := scope.Stack.peek() + if offset, overflow := x.Uint64WithOverflow(); !overflow { + data := getData(scope.Contract.Input, offset, 32) + x.SetBytes(data) + } else { + x.Clear() + } return nil, nil } -func opCallDataSize(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetInt64(int64(len(contract.Input)))) +func opCallDataSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(uint64(len(scope.Contract.Input)))) return nil, nil } -func opCallDataCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCallDataCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = stack.pop() - dataOffset = stack.pop() - length = stack.pop() + memOffset = scope.Stack.pop() + dataOffset = scope.Stack.pop() + length = scope.Stack.pop() ) - memory.Set(memOffset.Uint64(), length.Uint64(), getDataBig(contract.Input, dataOffset, length)) + dataOffset64, overflow := dataOffset.Uint64WithOverflow() + if overflow { + dataOffset64 = 0xffffffffffffffff + } + // These values are checked for overflow during gas cost calculation + memOffset64 := memOffset.Uint64() + length64 := length.Uint64() + scope.Memory.Set(memOffset64, length64, getData(scope.Contract.Input, dataOffset64, length64)) - interpreter.intPool.put(memOffset, dataOffset, length) return nil, nil } -func opReturnDataSize(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetUint64(uint64(len(interpreter.returnData)))) +func opReturnDataSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(uint64(len(interpreter.returnData)))) return nil, nil } -func opReturnDataCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opReturnDataCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = stack.pop() - dataOffset = stack.pop() - length = stack.pop() - - end = interpreter.intPool.get().Add(dataOffset, length) + memOffset = scope.Stack.pop() + dataOffset = scope.Stack.pop() + length = scope.Stack.pop() ) - defer interpreter.intPool.put(memOffset, dataOffset, length, end) - if !end.IsUint64() || uint64(len(interpreter.returnData)) < end.Uint64() { - return nil, errReturnDataOutOfBounds + offset64, overflow := dataOffset.Uint64WithOverflow() + if overflow { + return nil, ErrReturnDataOutOfBounds } - memory.Set(memOffset.Uint64(), length.Uint64(), interpreter.returnData[dataOffset.Uint64():end.Uint64()]) - + // we can reuse dataOffset now (aliasing it for clarity) + var end = dataOffset + end.Add(&dataOffset, &length) + end64, overflow := end.Uint64WithOverflow() + if overflow || uint64(len(interpreter.returnData)) < end64 { + return nil, ErrReturnDataOutOfBounds + } + scope.Memory.Set(memOffset.Uint64(), length.Uint64(), interpreter.returnData[offset64:end64]) return nil, nil } -func opExtCodeSize(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - slot := stack.peek() - slot.SetUint64(uint64(interpreter.evm.StateDB.GetCodeSize(common.BigToAddress(slot)))) - +func opExtCodeSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + slot := scope.Stack.peek() + slot.SetUint64(uint64(interpreter.evm.StateDB.GetCodeSize(slot.Bytes20()))) return nil, nil } -func opCodeSize(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - l := interpreter.intPool.get().SetInt64(int64(len(contract.Code))) - stack.push(l) - +func opCodeSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + l := new(uint256.Int) + l.SetUint64(uint64(len(scope.Contract.Code))) + scope.Stack.push(l) return nil, nil } -func opCodeCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = stack.pop() - codeOffset = stack.pop() - length = stack.pop() + memOffset = scope.Stack.pop() + codeOffset = scope.Stack.pop() + length = scope.Stack.pop() ) - codeCopy := getDataBig(contract.Code, codeOffset, length) - memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) + uint64CodeOffset, overflow := codeOffset.Uint64WithOverflow() + if overflow { + uint64CodeOffset = 0xffffffffffffffff + } + codeCopy := getData(scope.Contract.Code, uint64CodeOffset, length.Uint64()) + scope.Memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) - interpreter.intPool.put(memOffset, codeOffset, length) return nil, nil } -func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - addr = common.BigToAddress(stack.pop()) + stack = scope.Stack + a = stack.pop() memOffset = stack.pop() codeOffset = stack.pop() length = stack.pop() ) - codeCopy := getDataBig(interpreter.evm.StateDB.GetCode(addr), codeOffset, length) - memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) + uint64CodeOffset, overflow := codeOffset.Uint64WithOverflow() + if overflow { + uint64CodeOffset = 0xffffffffffffffff + } + addr := common.Address(a.Bytes20()) + codeCopy := getData(interpreter.evm.StateDB.GetCode(addr), uint64CodeOffset, length.Uint64()) + scope.Memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) - interpreter.intPool.put(memOffset, codeOffset, length) return nil, nil } @@ -542,393 +415,478 @@ func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contract, // // (6) Caller tries to get the code hash for an account which is marked as deleted, // this account should be regarded as a non-existent account and zero should be returned. -func opExtCodeHash(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - slot := stack.peek() - address := common.BigToAddress(slot) +func opExtCodeHash(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + slot := scope.Stack.peek() + address := common.Address(slot.Bytes20()) if interpreter.evm.StateDB.Empty(address) { - slot.SetUint64(0) + slot.Clear() } else { slot.SetBytes(interpreter.evm.StateDB.GetCodeHash(address).Bytes()) } return nil, nil } -func opGasprice(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().Set(interpreter.evm.GasPrice)) +func opGasprice(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v, _ := uint256.FromBig(interpreter.evm.GasPrice) + scope.Stack.push(v) return nil, nil } -func opBlockhash(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - num := stack.pop() - - n := interpreter.intPool.get().Sub(interpreter.evm.BlockNumber, common.Big257) - if num.Cmp(n) > 0 && num.Cmp(interpreter.evm.BlockNumber) < 0 { - stack.push(interpreter.evm.GetHash(num.Uint64()).Big()) +func opBlockhash(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + num := scope.Stack.peek() + num64, overflow := num.Uint64WithOverflow() + if overflow { + num.Clear() + return nil, nil + } + var upper, lower uint64 + upper = interpreter.evm.Context.BlockNumber.Uint64() + if upper < 257 { + lower = 0 + } else { + lower = upper - 256 + } + if num64 >= lower && num64 < upper { + num.SetBytes(interpreter.evm.Context.GetHash(num64).Bytes()) } else { - stack.push(interpreter.intPool.getZero()) + num.Clear() } - interpreter.intPool.put(num, n) return nil, nil } -func opCoinbase(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Coinbase.Bytes())) +func opCoinbase(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetBytes(interpreter.evm.Context.Coinbase.Bytes())) return nil, nil } -func opTimestamp(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(math.U256(interpreter.intPool.get().Set(interpreter.evm.Time))) +func opTimestamp(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v, _ := uint256.FromBig(interpreter.evm.Context.Time) + scope.Stack.push(v) return nil, nil } -func opNumber(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(math.U256(interpreter.intPool.get().Set(interpreter.evm.BlockNumber))) +func opNumber(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v, _ := uint256.FromBig(interpreter.evm.Context.BlockNumber) + scope.Stack.push(v) return nil, nil } -func opDifficulty(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(math.U256(interpreter.intPool.get().Set(interpreter.evm.Difficulty))) +func opDifficulty(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v, _ := uint256.FromBig(interpreter.evm.Context.Difficulty) + scope.Stack.push(v) return nil, nil } -func opGasLimit(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(math.U256(interpreter.intPool.get().SetUint64(interpreter.evm.GasLimit))) +func opRandom(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v := new(uint256.Int).SetBytes(interpreter.evm.Context.Random.Bytes()) + scope.Stack.push(v) return nil, nil } -func opPop(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - interpreter.intPool.put(stack.pop()) +func opGasLimit(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(interpreter.evm.Context.GasLimit)) return nil, nil } -func opMload(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - offset := stack.pop() - val := interpreter.intPool.get().SetBytes(memory.Get(offset.Int64(), 32)) - stack.push(val) +func opPop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.pop() + return nil, nil +} - interpreter.intPool.put(offset) +func opMload(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + v := scope.Stack.peek() + offset := int64(v.Uint64()) + v.SetBytes(scope.Memory.GetPtr(offset, 32)) return nil, nil } -func opMstore(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opMstore(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // pop value of the stack - mStart, val := stack.pop(), stack.pop() - memory.Set32(mStart.Uint64(), val) - - interpreter.intPool.put(mStart, val) + mStart, val := scope.Stack.pop(), scope.Stack.pop() + scope.Memory.Set32(mStart.Uint64(), &val) return nil, nil } -func opMstore8(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - off, val := stack.pop().Int64(), stack.pop().Int64() - memory.store[off] = byte(val & 0xff) - +func opMstore8(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + off, val := scope.Stack.pop(), scope.Stack.pop() + scope.Memory.store[off.Uint64()] = byte(val.Uint64()) return nil, nil } -func opSload(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - loc := stack.peek() - val := interpreter.evm.StateDB.GetState(contract.Address(), common.BigToHash(loc)) +func opSload(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + loc := scope.Stack.peek() + hash := common.Hash(loc.Bytes32()) + val := interpreter.evm.StateDB.GetState(scope.Contract.Address(), hash) loc.SetBytes(val.Bytes()) return nil, nil } -func opSstore(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - loc := common.BigToHash(stack.pop()) - val := stack.pop() - interpreter.evm.StateDB.SetState(contract.Address(), loc, common.BigToHash(val)) - - interpreter.intPool.put(val) +func opSstore(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if interpreter.readOnly { + return nil, ErrWriteProtection + } + loc := scope.Stack.pop() + val := scope.Stack.pop() + interpreter.evm.StateDB.SetState(scope.Contract.Address(), + loc.Bytes32(), val.Bytes32()) return nil, nil } -func opJump(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - pos := stack.pop() - if !contract.validJumpdest(pos) { - return nil, errInvalidJump +func opJump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if atomic.LoadInt32(&interpreter.evm.abort) != 0 { + return nil, errStopToken } - *pc = pos.Uint64() - - interpreter.intPool.put(pos) + pos := scope.Stack.pop() + if !scope.Contract.validJumpdest(&pos) { + return nil, ErrInvalidJump + } + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop return nil, nil } -func opJumpi(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - pos, cond := stack.pop(), stack.pop() - if cond.Sign() != 0 { - if !contract.validJumpdest(pos) { - return nil, errInvalidJump +func opJumpi(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if atomic.LoadInt32(&interpreter.evm.abort) != 0 { + return nil, errStopToken + } + pos, cond := scope.Stack.pop(), scope.Stack.pop() + if !cond.IsZero() { + if !scope.Contract.validJumpdest(&pos) { + return nil, ErrInvalidJump } - *pc = pos.Uint64() - } else { - *pc++ + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop } - - interpreter.intPool.put(pos, cond) return nil, nil } -func opJumpdest(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opJumpdest(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { return nil, nil } -func opPc(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetUint64(*pc)) +func opPc(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(*pc)) return nil, nil } -func opMsize(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetInt64(int64(memory.Len()))) +func opMsize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(uint64(scope.Memory.Len()))) return nil, nil } -func opGas(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.intPool.get().SetUint64(contract.Gas)) +func opGas(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(new(uint256.Int).SetUint64(scope.Contract.Gas)) return nil, nil } -func opCreate(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCreate(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if interpreter.readOnly { + return nil, ErrWriteProtection + } var ( - value = stack.pop() - offset, size = stack.pop(), stack.pop() - input = memory.Get(offset.Int64(), size.Int64()) - gas = contract.Gas + value = scope.Stack.pop() + offset, size = scope.Stack.pop(), scope.Stack.pop() + input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) + gas = scope.Contract.Gas ) if interpreter.evm.chainRules.IsEIP150 { gas -= gas / 64 } + // reuse size int for stackvalue + stackvalue := size + + scope.Contract.UseGas(gas) + //TODO: use uint256.Int instead of converting with toBig() + var bigVal = big0 + if !value.IsZero() { + bigVal = value.ToBig() + } - contract.UseGas(gas) - res, addr, returnGas, suberr := interpreter.evm.Create(contract, input, gas, value) + res, addr, returnGas, suberr := interpreter.evm.Create(scope.Contract, input, gas, bigVal) // Push item on the stack based on the returned error. If the ruleset is // 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.chainRules.IsHomestead && suberr == ErrCodeStoreOutOfGas { - stack.push(interpreter.intPool.getZero()) + stackvalue.Clear() } else if suberr != nil && suberr != ErrCodeStoreOutOfGas { - stack.push(interpreter.intPool.getZero()) + stackvalue.Clear() } else { - stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) + stackvalue.SetBytes(addr.Bytes()) } - contract.Gas += returnGas - interpreter.intPool.put(value, offset, size) + scope.Stack.push(&stackvalue) + scope.Contract.Gas += returnGas - if suberr == errExecutionReverted { + if suberr == ErrExecutionReverted { + interpreter.returnData = res // set REVERT data to return data buffer return res, nil } + interpreter.returnData = nil // clear dirty return data buffer return nil, nil } -func opCreate2(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCreate2(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if interpreter.readOnly { + return nil, ErrWriteProtection + } var ( - endowment = stack.pop() - offset, size = stack.pop(), stack.pop() - salt = stack.pop() - input = memory.Get(offset.Int64(), size.Int64()) - gas = contract.Gas + endowment = scope.Stack.pop() + offset, size = scope.Stack.pop(), scope.Stack.pop() + salt = scope.Stack.pop() + input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) + gas = scope.Contract.Gas ) // Apply EIP150 gas -= gas / 64 - contract.UseGas(gas) - res, addr, returnGas, suberr := interpreter.evm.Create2(contract, input, gas, endowment, salt) + scope.Contract.UseGas(gas) + // reuse size int for stackvalue + stackvalue := size + //TODO: use uint256.Int instead of converting with toBig() + bigEndowment := big0 + if !endowment.IsZero() { + bigEndowment = endowment.ToBig() + } + res, addr, returnGas, suberr := interpreter.evm.Create2(scope.Contract, input, gas, + bigEndowment, &salt) // Push item on the stack based on the returned error. if suberr != nil { - stack.push(interpreter.intPool.getZero()) + stackvalue.Clear() } else { - stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) + stackvalue.SetBytes(addr.Bytes()) } - contract.Gas += returnGas - interpreter.intPool.put(endowment, offset, size, salt) + scope.Stack.push(&stackvalue) + scope.Contract.Gas += returnGas - if suberr == errExecutionReverted { + if suberr == ErrExecutionReverted { + interpreter.returnData = res // set REVERT data to return data buffer return res, nil } + interpreter.returnData = nil // clear dirty return data buffer return nil, nil } -func opCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + stack := scope.Stack // Pop gas. The actual gas in interpreter.evm.callGasTemp. - interpreter.intPool.put(stack.pop()) + // We can use this as a temporary value + temp := stack.pop() gas := interpreter.evm.callGasTemp // Pop other call parameters. addr, value, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop() - toAddr := common.BigToAddress(addr) - value = math.U256(value) + toAddr := common.Address(addr.Bytes20()) // Get the arguments from the memory. - args := memory.Get(inOffset.Int64(), inSize.Int64()) + args := scope.Memory.GetPtr(int64(inOffset.Uint64()), int64(inSize.Uint64())) - if value.Sign() != 0 { + if interpreter.readOnly && !value.IsZero() { + return nil, ErrWriteProtection + } + var bigVal = big0 + //TODO: use uint256.Int instead of converting with toBig() + // By using big0 here, we save an alloc for the most common case (non-ether-transferring contract calls), + // but it would make more sense to extend the usage of uint256.Int + if !value.IsZero() { gas += params.CallStipend + bigVal = value.ToBig() } - ret, returnGas, err := interpreter.evm.Call(contract, toAddr, args, gas, value) + + ret, returnGas, err := interpreter.evm.Call(scope.Contract, toAddr, args, gas, bigVal) + if err != nil { - stack.push(interpreter.intPool.getZero()) + temp.Clear() } else { - stack.push(interpreter.intPool.get().SetUint64(1)) + temp.SetOne() } - if err == nil || err == errExecutionReverted { - memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { + ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) } - contract.Gas += returnGas + scope.Contract.Gas += returnGas - interpreter.intPool.put(addr, value, inOffset, inSize, retOffset, retSize) + interpreter.returnData = ret return ret, nil } -func opCallCode(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opCallCode(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // Pop gas. The actual gas is in interpreter.evm.callGasTemp. - interpreter.intPool.put(stack.pop()) + stack := scope.Stack + // We use it as a temporary value + temp := stack.pop() gas := interpreter.evm.callGasTemp // Pop other call parameters. addr, value, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop() - toAddr := common.BigToAddress(addr) - value = math.U256(value) + toAddr := common.Address(addr.Bytes20()) // Get arguments from the memory. - args := memory.Get(inOffset.Int64(), inSize.Int64()) + args := scope.Memory.GetPtr(int64(inOffset.Uint64()), int64(inSize.Uint64())) - if value.Sign() != 0 { + //TODO: use uint256.Int instead of converting with toBig() + var bigVal = big0 + if !value.IsZero() { gas += params.CallStipend + bigVal = value.ToBig() } - ret, returnGas, err := interpreter.evm.CallCode(contract, toAddr, args, gas, value) + + ret, returnGas, err := interpreter.evm.CallCode(scope.Contract, toAddr, args, gas, bigVal) if err != nil { - stack.push(interpreter.intPool.getZero()) + temp.Clear() } else { - stack.push(interpreter.intPool.get().SetUint64(1)) + temp.SetOne() } - if err == nil || err == errExecutionReverted { - memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { + ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) } - contract.Gas += returnGas + scope.Contract.Gas += returnGas - interpreter.intPool.put(addr, value, inOffset, inSize, retOffset, retSize) + interpreter.returnData = ret return ret, nil } -func opDelegateCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opDelegateCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + stack := scope.Stack // Pop gas. The actual gas is in interpreter.evm.callGasTemp. - interpreter.intPool.put(stack.pop()) + // We use it as a temporary value + temp := stack.pop() gas := interpreter.evm.callGasTemp // Pop other call parameters. addr, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop() - toAddr := common.BigToAddress(addr) + toAddr := common.Address(addr.Bytes20()) // Get arguments from the memory. - args := memory.Get(inOffset.Int64(), inSize.Int64()) + args := scope.Memory.GetPtr(int64(inOffset.Uint64()), int64(inSize.Uint64())) - ret, returnGas, err := interpreter.evm.DelegateCall(contract, toAddr, args, gas) + ret, returnGas, err := interpreter.evm.DelegateCall(scope.Contract, toAddr, args, gas) if err != nil { - stack.push(interpreter.intPool.getZero()) + temp.Clear() } else { - stack.push(interpreter.intPool.get().SetUint64(1)) + temp.SetOne() } - if err == nil || err == errExecutionReverted { - memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { + ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) } - contract.Gas += returnGas + scope.Contract.Gas += returnGas - interpreter.intPool.put(addr, inOffset, inSize, retOffset, retSize) + interpreter.returnData = ret return ret, nil } -func opStaticCall(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opStaticCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // Pop gas. The actual gas is in interpreter.evm.callGasTemp. - interpreter.intPool.put(stack.pop()) + stack := scope.Stack + // We use it as a temporary value + temp := stack.pop() gas := interpreter.evm.callGasTemp // Pop other call parameters. addr, inOffset, inSize, retOffset, retSize := stack.pop(), stack.pop(), stack.pop(), stack.pop(), stack.pop() - toAddr := common.BigToAddress(addr) + toAddr := common.Address(addr.Bytes20()) // Get arguments from the memory. - args := memory.Get(inOffset.Int64(), inSize.Int64()) + args := scope.Memory.GetPtr(int64(inOffset.Uint64()), int64(inSize.Uint64())) - ret, returnGas, err := interpreter.evm.StaticCall(contract, toAddr, args, gas) + ret, returnGas, err := interpreter.evm.StaticCall(scope.Contract, toAddr, args, gas) if err != nil { - stack.push(interpreter.intPool.getZero()) + temp.Clear() } else { - stack.push(interpreter.intPool.get().SetUint64(1)) + temp.SetOne() } - if err == nil || err == errExecutionReverted { - memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { + ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) } - contract.Gas += returnGas + scope.Contract.Gas += returnGas - interpreter.intPool.put(addr, inOffset, inSize, retOffset, retSize) + interpreter.returnData = ret return ret, nil } -func opReturn(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - offset, size := stack.pop(), stack.pop() - ret := memory.GetPtr(offset.Int64(), size.Int64()) +func opReturn(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + offset, size := scope.Stack.pop(), scope.Stack.pop() + ret := scope.Memory.GetPtr(int64(offset.Uint64()), int64(size.Uint64())) - interpreter.intPool.put(offset, size) - return ret, nil + return ret, errStopToken } -func opRevert(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - offset, size := stack.pop(), stack.pop() - ret := memory.GetPtr(offset.Int64(), size.Int64()) +func opRevert(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + offset, size := scope.Stack.pop(), scope.Stack.pop() + ret := scope.Memory.GetPtr(int64(offset.Uint64()), int64(size.Uint64())) - interpreter.intPool.put(offset, size) - return ret, nil + interpreter.returnData = ret + return ret, ErrExecutionReverted } -func opStop(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - return nil, nil +func opUndefined(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + return nil, &ErrInvalidOpCode{opcode: OpCode(scope.Contract.Code[*pc])} } -func opSuicide(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - balance := interpreter.evm.StateDB.GetBalance(contract.Address()) - interpreter.evm.StateDB.AddBalance(common.BigToAddress(stack.pop()), balance) +func opStop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + return nil, errStopToken +} - interpreter.evm.StateDB.Suicide(contract.Address()) - return nil, nil +func opSelfdestruct(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if interpreter.readOnly { + return nil, ErrWriteProtection + } + beneficiary := scope.Stack.pop() + balance := interpreter.evm.StateDB.GetBalance(scope.Contract.Address()) + interpreter.evm.StateDB.AddBalance(beneficiary.Bytes20(), balance) + interpreter.evm.StateDB.Suicide(scope.Contract.Address()) + if interpreter.cfg.Debug { + interpreter.cfg.Tracer.CaptureEnter(SELFDESTRUCT, scope.Contract.Address(), beneficiary.Bytes20(), []byte{}, 0, balance) + interpreter.cfg.Tracer.CaptureExit([]byte{}, 0, nil) + } + return nil, errStopToken } // following functions are used by the instruction jump table // make log instruction function func makeLog(size int) executionFunc { - return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { + return func(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + if interpreter.readOnly { + return nil, ErrWriteProtection + } topics := make([]common.Hash, size) + stack := scope.Stack mStart, mSize := stack.pop(), stack.pop() for i := 0; i < size; i++ { - topics[i] = common.BigToHash(stack.pop()) + addr := stack.pop() + topics[i] = addr.Bytes32() } - d := memory.Get(mStart.Int64(), mSize.Int64()) + d := scope.Memory.GetCopy(int64(mStart.Uint64()), int64(mSize.Uint64())) interpreter.evm.StateDB.AddLog(&types.Log{ - Address: contract.Address(), + Address: scope.Contract.Address(), Topics: topics, Data: d, // This is a non-consensus field, but assigned here because // core/state doesn't know the current block number. - BlockNumber: interpreter.evm.BlockNumber.Uint64(), + BlockNumber: interpreter.evm.Context.BlockNumber.Uint64(), }) - interpreter.intPool.put(mStart, mSize) return nil, nil } } // opPush1 is a specialized version of pushN -func opPush1(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { +func opPush1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - codeLen = uint64(len(contract.Code)) - integer = interpreter.intPool.get() + codeLen = uint64(len(scope.Contract.Code)) + integer = new(uint256.Int) ) *pc += 1 if *pc < codeLen { - stack.push(integer.SetUint64(uint64(contract.Code[*pc]))) + scope.Stack.push(integer.SetUint64(uint64(scope.Contract.Code[*pc]))) } else { - stack.push(integer.SetUint64(0)) + scope.Stack.push(integer.Clear()) } 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) { - codeLen := len(contract.Code) + return func(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + codeLen := len(scope.Contract.Code) startMin := codeLen if int(*pc+1) < startMin { @@ -940,8 +898,9 @@ func makePush(size uint64, pushByteSize int) executionFunc { endMin = startMin + pushByteSize } - integer := interpreter.intPool.get() - stack.push(integer.SetBytes(common.RightPadBytes(contract.Code[startMin:endMin], pushByteSize))) + integer := new(uint256.Int) + scope.Stack.push(integer.SetBytes(common.RightPadBytes( + scope.Contract.Code[startMin:endMin], pushByteSize))) *pc += size return nil, nil @@ -950,8 +909,8 @@ func makePush(size uint64, pushByteSize int) executionFunc { // make dup instruction function func makeDup(size int64) executionFunc { - return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.dup(interpreter.intPool, int(size)) + return func(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.dup(int(size)) return nil, nil } } @@ -960,8 +919,8 @@ func makeDup(size int64) executionFunc { func makeSwap(size int64) executionFunc { // switch n + 1 otherwise n would be swapped with n size++ - return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.swap(int(size)) + return func(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + scope.Stack.swap(int(size)) return nil, nil } } diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 6204e8cf..602cde51 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -20,13 +20,14 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" "math/big" + "os" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" ) type TwoOperandTestcase struct { @@ -40,11 +41,11 @@ type twoOperandParams struct { y string } +var alphabetSoup = "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" 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 @@ -90,49 +91,29 @@ func init() { } func testTwoOperandOp(t *testing.T, tests []TwoOperandTestcase, opFn executionFunc, name string) { - var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) stack = newstack() pc = uint64(0) - evmInterpreter = env.interpreter.(*EVMInterpreter) + evmInterpreter = env.interpreter ) - // 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)) - y := new(big.Int).SetBytes(common.Hex2Bytes(test.Y)) - expected := new(big.Int).SetBytes(common.Hex2Bytes(test.Expected)) + x := new(uint256.Int).SetBytes(common.Hex2Bytes(test.X)) + y := new(uint256.Int).SetBytes(common.Hex2Bytes(test.Y)) + expected := new(uint256.Int).SetBytes(common.Hex2Bytes(test.Expected)) stack.push(x) stack.push(y) - opFn(&pc, evmInterpreter, nil, nil, stack) + opFn(&pc, evmInterpreter, &ScopeContext{nil, stack, nil}) + if len(stack.data) != 1 { + t.Errorf("Expected one item on stack after %v, got %d: ", name, len(stack.data)) + } actual := stack.pop() if actual.Cmp(expected) != 0 { 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 - // 2.pool is not allowed to contain the same pointers twice - if evmInterpreter.intPool.pool.len() > 0 { - - poolvals := make(map[*big.Int]struct{}) - poolvals[actual] = struct{}{} - - for evmInterpreter.intPool.pool.len() > 0 { - key := evmInterpreter.intPool.get() - if _, exist := poolvals[key]; exist { - t.Errorf("Testcase %v %d, pool contains double-entry", name, i) - } - poolvals[key] = struct{}{} - } - } } - poolOfIntPools.put(evmInterpreter.intPool) } func TestByteOp(t *testing.T) { @@ -150,7 +131,7 @@ func TestByteOp(t *testing.T) { } func TestSHL(t *testing.T) { - // Testcases from https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left + // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000002"}, {"0000000000000000000000000000000000000000000000000000000000000001", "ff", "8000000000000000000000000000000000000000000000000000000000000000"}, @@ -167,7 +148,7 @@ func TestSHL(t *testing.T) { } func TestSHR(t *testing.T) { - // Testcases from https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right + // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, @@ -185,7 +166,7 @@ func TestSHR(t *testing.T) { } func TestSAR(t *testing.T) { - // Testcases from https://github.com/Onther-Tech/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right + // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, @@ -208,48 +189,86 @@ func TestSAR(t *testing.T) { testTwoOperandOp(t, tests, opSAR, "sar") } -// getResult is a convenience function to generate the expected values -func getResult(args []*twoOperandParams, opFn executionFunc) []TwoOperandTestcase { +func TestAddMod(t *testing.T) { var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) - stack = newstack() - pc = uint64(0) - interpreter = env.interpreter.(*EVMInterpreter) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) + stack = newstack() + evmInterpreter = NewEVMInterpreter(env, env.Config) + pc = uint64(0) ) - 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) + tests := []struct { + x string + y string + z string + expected string + }{ + {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + }, + } + // x + y = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd + // in 256 bit repr, fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd + + for i, test := range tests { + x := new(uint256.Int).SetBytes(common.Hex2Bytes(test.x)) + y := new(uint256.Int).SetBytes(common.Hex2Bytes(test.y)) + z := new(uint256.Int).SetBytes(common.Hex2Bytes(test.z)) + expected := new(uint256.Int).SetBytes(common.Hex2Bytes(test.expected)) + stack.push(z) stack.push(y) - opFn(&pc, interpreter, nil, nil, stack) + stack.push(x) + opAddmod(&pc, evmInterpreter, &ScopeContext{nil, stack, nil}) actual := stack.pop() - result[i] = TwoOperandTestcase{param.x, param.y, fmt.Sprintf("%064x", actual)} + if actual.Cmp(expected) != 0 { + t.Errorf("Testcase %d, expected %x, got %x", i, expected, actual) + } } - return result } // utility function to fill the json-file with testcases // Enable this test to generate the 'testcases_xx.json' files -func xTestWriteExpectedValues(t *testing.T) { +func TestWriteExpectedValues(t *testing.T) { + t.Skip("Enable this test to create json test cases.") + + // getResult is a convenience function to generate the expected values + getResult := func(args []*twoOperandParams, opFn executionFunc) []TwoOperandTestcase { + var ( + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) + stack = newstack() + pc = uint64(0) + interpreter = env.interpreter + ) + result := make([]TwoOperandTestcase, len(args)) + for i, param := range args { + x := new(uint256.Int).SetBytes(common.Hex2Bytes(param.x)) + y := new(uint256.Int).SetBytes(common.Hex2Bytes(param.y)) + stack.push(x) + stack.push(y) + opFn(&pc, interpreter, &ScopeContext{nil, stack, nil}) + actual := stack.pop() + result[i] = TwoOperandTestcase{param.x, param.y, fmt.Sprintf("%064x", actual)} + } + return result + } + 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) + _ = os.WriteFile(fmt.Sprintf("testdata/testcases_%v.json", name), data, 0644) if err != nil { t.Fatal(err) } } - 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)) + data, err := os.ReadFile(fmt.Sprintf("testdata/testcases_%v.json", name)) if err != nil { t.Fatal("Failed to read file", err) } @@ -259,31 +278,37 @@ func TestJsonTestcases(t *testing.T) { } } -func opBenchmark(bench *testing.B, op func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error), args ...string) { +func opBenchmark(bench *testing.B, op executionFunc, args ...string) { var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) stack = newstack() - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) + scope = &ScopeContext{nil, stack, nil} + evmInterpreter = NewEVMInterpreter(env, env.Config) ) env.interpreter = evmInterpreter - evmInterpreter.intPool = poolOfIntPools.get() // convert args - byteArgs := make([][]byte, len(args)) + intArgs := make([]*uint256.Int, len(args)) for i, arg := range args { - byteArgs[i] = common.Hex2Bytes(arg) + intArgs[i] = new(uint256.Int).SetBytes(common.Hex2Bytes(arg)) } pc := uint64(0) bench.ResetTimer() for i := 0; i < bench.N; i++ { - for _, arg := range byteArgs { - a := new(big.Int).SetBytes(arg) - stack.push(a) + for _, arg := range intArgs { + stack.push(arg) } - op(&pc, evmInterpreter, nil, nil, stack) + op(&pc, evmInterpreter, scope) stack.pop() } - poolOfIntPools.put(evmInterpreter.intPool) + bench.StopTimer() + + for i, arg := range args { + want := new(uint256.Int).SetBytes(common.Hex2Bytes(arg)) + if have := intArgs[i]; !want.Eq(have) { + bench.Fatalf("input #%d mutated, have %x want %x", i, have, want) + } + } } func BenchmarkOpAdd64(b *testing.B) { @@ -329,8 +354,8 @@ func BenchmarkOpSub256(b *testing.B) { } func BenchmarkOpMul(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opMul, x, y) } @@ -361,64 +386,64 @@ func BenchmarkOpSdiv(b *testing.B) { } func BenchmarkOpMod(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opMod, x, y) } func BenchmarkOpSmod(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opSmod, x, y) } func BenchmarkOpExp(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opExp, x, y) } func BenchmarkOpSignExtend(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opSignExtend, x, y) } func BenchmarkOpLt(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opLt, x, y) } func BenchmarkOpGt(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opGt, x, y) } func BenchmarkOpSlt(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opSlt, x, y) } func BenchmarkOpSgt(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opSgt, x, y) } func BenchmarkOpEq(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opEq, x, y) } @@ -428,45 +453,45 @@ func BenchmarkOpEq2(b *testing.B) { opBenchmark(b, opEq, x, y) } func BenchmarkOpAnd(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opAnd, x, y) } func BenchmarkOpOr(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opOr, x, y) } func BenchmarkOpXor(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opXor, x, y) } func BenchmarkOpByte(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup opBenchmark(b, opByte, x, y) } func BenchmarkOpAddmod(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - z := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup + z := alphabetSoup opBenchmark(b, opAddmod, x, y, z) } func BenchmarkOpMulmod(b *testing.B) { - x := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - y := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" - z := "ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff" + x := alphabetSoup + y := alphabetSoup + z := alphabetSoup opBenchmark(b, opMulmod, x, y, z) } @@ -496,72 +521,70 @@ func BenchmarkOpIsZero(b *testing.B) { func TestOpMstore(t *testing.T) { var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) stack = newstack() mem = NewMemory() - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) + evmInterpreter = NewEVMInterpreter(env, env.Config) ) env.interpreter = evmInterpreter - evmInterpreter.intPool = poolOfIntPools.get() mem.Resize(64) pc := uint64(0) v := "abcdef00000000000000abba000000000deaf000000c0de00100000000133700" - stack.pushN(new(big.Int).SetBytes(common.Hex2Bytes(v)), big.NewInt(0)) - opMstore(&pc, evmInterpreter, nil, mem, stack) - if got := common.Bytes2Hex(mem.Get(0, 32)); got != v { + stack.push(new(uint256.Int).SetBytes(common.Hex2Bytes(v))) + stack.push(new(uint256.Int)) + opMstore(&pc, evmInterpreter, &ScopeContext{mem, stack, nil}) + if got := common.Bytes2Hex(mem.GetCopy(0, 32)); got != v { t.Fatalf("Mstore fail, got %v, expected %v", got, v) } - stack.pushN(big.NewInt(0x1), big.NewInt(0)) - opMstore(&pc, evmInterpreter, nil, mem, stack) - if common.Bytes2Hex(mem.Get(0, 32)) != "0000000000000000000000000000000000000000000000000000000000000001" { + stack.push(new(uint256.Int).SetUint64(0x1)) + stack.push(new(uint256.Int)) + opMstore(&pc, evmInterpreter, &ScopeContext{mem, stack, nil}) + if common.Bytes2Hex(mem.GetCopy(0, 32)) != "0000000000000000000000000000000000000000000000000000000000000001" { t.Fatalf("Mstore failed to overwrite previous value") } - poolOfIntPools.put(evmInterpreter.intPool) } func BenchmarkOpMstore(bench *testing.B) { var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) stack = newstack() mem = NewMemory() - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) + evmInterpreter = NewEVMInterpreter(env, env.Config) ) env.interpreter = evmInterpreter - evmInterpreter.intPool = poolOfIntPools.get() mem.Resize(64) pc := uint64(0) - memStart := big.NewInt(0) - value := big.NewInt(0x1337) + memStart := new(uint256.Int) + value := new(uint256.Int).SetUint64(0x1337) bench.ResetTimer() for i := 0; i < bench.N; i++ { - stack.pushN(value, memStart) - opMstore(&pc, evmInterpreter, nil, mem, stack) + stack.push(value) + stack.push(memStart) + opMstore(&pc, evmInterpreter, &ScopeContext{mem, stack, nil}) } - poolOfIntPools.put(evmInterpreter.intPool) } -func BenchmarkOpSHA3(bench *testing.B) { +func BenchmarkOpKeccak256(bench *testing.B) { var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + env = NewEVM(BlockContext{}, TxContext{}, nil, params.TestChainConfig, Config{}) stack = newstack() mem = NewMemory() - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) + evmInterpreter = NewEVMInterpreter(env, env.Config) ) env.interpreter = evmInterpreter - evmInterpreter.intPool = poolOfIntPools.get() mem.Resize(32) pc := uint64(0) - start := big.NewInt(0) + start := new(uint256.Int) bench.ResetTimer() for i := 0; i < bench.N; i++ { - stack.pushN(big.NewInt(32), start) - opSha3(&pc, evmInterpreter, nil, mem, stack) + stack.push(uint256.NewInt(32)) + stack.push(start) + opKeccak256(&pc, evmInterpreter, &ScopeContext{mem, stack, nil}) } - poolOfIntPools.put(evmInterpreter.intPool) } func TestCreate2Addreses(t *testing.T) { @@ -616,7 +639,6 @@ func TestCreate2Addreses(t *testing.T) { expected: "0xE33C0C7F7df4809055C3ebA6c09CFe4BaF1BD9e0", }, } { - origin := common.BytesToAddress(common.FromHex(tt.origin)) salt := common.BytesToHash(common.FromHex(tt.salt)) code := common.FromHex(tt.code) @@ -635,6 +657,38 @@ func TestCreate2Addreses(t *testing.T) { if !bytes.Equal(expected.Bytes(), address.Bytes()) { t.Errorf("test %d: expected %s, got %s", i, expected.String(), address.String()) } + } +} +func TestRandom(t *testing.T) { + type testcase struct { + name string + random common.Hash + } + + for _, tt := range []testcase{ + {name: "empty hash", random: common.Hash{}}, + {name: "1", random: common.Hash{0}}, + {name: "emptyCodeHash", random: emptyCodeHash}, + {name: "hash(0x010203)", random: crypto.Keccak256Hash([]byte{0x01, 0x02, 0x03})}, + } { + var ( + env = NewEVM(BlockContext{Random: &tt.random}, TxContext{}, nil, params.TestChainConfig, Config{}) + stack = newstack() + pc = uint64(0) + evmInterpreter = env.interpreter + ) + opRandom(&pc, evmInterpreter, &ScopeContext{nil, stack, nil}) + if len(stack.data) != 1 { + t.Errorf("Expected one item on stack after %v, got %d: ", tt.name, len(stack.data)) + } + actual := stack.pop() + expected, overflow := uint256.FromBig(new(big.Int).SetBytes(tt.random.Bytes())) + if overflow { + t.Errorf("Testcase %v: invalid overflow", tt.name) + } + if actual.Cmp(expected) != 0 { + t.Errorf("Testcase %v: expected %x, got %x", tt.name, expected, actual) + } } } diff --git a/core/vm/interface.go b/core/vm/interface.go index 807af707..ad9b05d6 100644 --- a/core/vm/interface.go +++ b/core/vm/interface.go @@ -19,8 +19,8 @@ package vm import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // StateDB is an EVM database for full state querying. @@ -57,6 +57,16 @@ type StateDB interface { // is defined according to EIP161 (balance = nonce = code = 0). Empty(common.Address) bool + PrepareAccessList(sender common.Address, dest *common.Address, precompiles []common.Address, txAccesses types.AccessList) + AddressInAccessList(addr common.Address) bool + SlotInAccessList(addr common.Address, slot common.Hash) (addressOk bool, slotOk bool) + // AddAddressToAccessList adds the given address to the access list. This operation is safe to perform + // even if the feature/fork is not active yet + AddAddressToAccessList(addr common.Address) + // AddSlotToAccessList adds the given (address,slot) to the access list. This operation is safe to perform + // even if the feature/fork is not active yet + AddSlotToAccessList(addr common.Address, slot common.Hash) + RevertToSnapshot(int) Snapshot() int diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 608f0f96..40fe23dc 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -17,50 +17,31 @@ package vm import ( - "fmt" "hash" - "sync/atomic" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/log" ) // Config are the configuration options for the Interpreter type Config struct { - 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 + Debug bool // Enables debugging + Tracer EVMLogger // Opcode logger + NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls) + EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages - JumpTable [256]operation // EVM instruction table, automatically populated if unset - - EWASMInterpreter string // External EWASM interpreter options - EVMInterpreter string // External EVM interpreter options + JumpTable *JumpTable // EVM instruction table, automatically populated if unset ExtraEips []int // Additional EIPS that are to be enabled } -// Interpreter is used to run Ethereum based contracts and will utilise the -// passed environment to query external sources for state information. -// The Interpreter will run the byte code VM based on the passed -// configuration. -type Interpreter interface { - // Run loops and evaluates the contract's code with the given input data and returns - // the return byte-slice and an error if one occurred. - Run(contract *Contract, input []byte, static bool) ([]byte, error) - // CanRun tells if the contract, passed as an argument, can be - // run by the current interpreter. This is meant so that the - // caller can do something like: - // - // ```golang - // for _, interpreter := range interpreters { - // if interpreter.CanRun(contract.code) { - // interpreter.Run(contract.code, input) - // } - // } - // ``` - CanRun([]byte) bool +// ScopeContext contains the things that are per-call, such as stack and memory, +// but not transients like pc and gas +type ScopeContext struct { + Memory *Memory + Stack *Stack + Contract *Contract } // keccakState wraps sha3.state. In addition to the usual hash methods, it also supports @@ -76,8 +57,6 @@ type EVMInterpreter struct { evm *EVM cfg Config - intPool *intPool - hasher keccakState // Keccak256 hasher instance shared across opcodes hasherBuf common.Hash // Keccak256 hasher result array shared aross opcodes @@ -87,35 +66,39 @@ type EVMInterpreter struct { // NewEVMInterpreter returns a new instance of the Interpreter. func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter { - // We use the STOP instruction whether to see - // the jump table was initialised. If it was not - // we'll set the default jump table. - if !cfg.JumpTable[STOP].valid { - var jt JumpTable + // If jump table was not initialised we set the default one. + if cfg.JumpTable == nil { switch { + case evm.chainRules.IsMerge: + cfg.JumpTable = &mergeInstructionSet + case evm.chainRules.IsLondon: + cfg.JumpTable = &londonInstructionSet + case evm.chainRules.IsBerlin: + cfg.JumpTable = &berlinInstructionSet case evm.chainRules.IsIstanbul: - jt = istanbulInstructionSet + cfg.JumpTable = &istanbulInstructionSet case evm.chainRules.IsConstantinople: - jt = constantinopleInstructionSet + cfg.JumpTable = &constantinopleInstructionSet case evm.chainRules.IsByzantium: - jt = byzantiumInstructionSet + cfg.JumpTable = &byzantiumInstructionSet case evm.chainRules.IsEIP158: - jt = spuriousDragonInstructionSet + cfg.JumpTable = &spuriousDragonInstructionSet case evm.chainRules.IsEIP150: - jt = tangerineWhistleInstructionSet + cfg.JumpTable = &tangerineWhistleInstructionSet case evm.chainRules.IsHomestead: - jt = homesteadInstructionSet + cfg.JumpTable = &homesteadInstructionSet default: - jt = frontierInstructionSet + cfg.JumpTable = &frontierInstructionSet } for i, eip := range cfg.ExtraEips { - if err := EnableEIP(eip, &jt); err != nil { + copy := *cfg.JumpTable + if err := EnableEIP(eip, ©); 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 = © } - cfg.JumpTable = jt } return &EVMInterpreter{ @@ -129,22 +112,14 @@ func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter { // // It's important to note that any errors returned by the interpreter should be // considered a revert-and-consume-all-gas operation except for -// errExecutionReverted which means revert-and-keep-gas-left. +// ErrExecutionReverted which means revert-and-keep-gas-left. func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (ret []byte, err error) { - if in.intPool == nil { - in.intPool = poolOfIntPools.get() - defer func() { - poolOfIntPools.put(in.intPool) - in.intPool = nil - }() - } - // Increment the call depth which is restricted to 1024 in.evm.depth++ defer func() { in.evm.depth-- }() // Make sure the readOnly is only set if we aren't in readOnly yet. - // This makes also sure that the readOnly flag isn't removed for child calls. + // This also makes sure that the readOnly flag isn't removed for child calls. if readOnly && !in.readOnly { in.readOnly = true defer func() { in.readOnly = false }() @@ -160,32 +135,40 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( } var ( - op OpCode // current opcode - mem = NewMemory() // bound memory - stack = newstack() // local stack + op OpCode // current opcode + mem = NewMemory() // bound memory + stack = newstack() // local stack + callContext = &ScopeContext{ + Memory: mem, + Stack: stack, + Contract: contract, + } // For optimisation reason we're using uint64 as the program counter. // It's theoretically possible to go above 2^64. The YP defines the PC // to be uint256. Practically much less so feasible. pc = uint64(0) // program counter cost uint64 // copies used by tracer - 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 + pcCopy uint64 // needed for the deferred EVMLogger + gasCopy uint64 // for EVMLogger to log gas remaining before execution + logged bool // deferred EVMLogger should ignore already logged steps res []byte // result of the opcode execution function ) + // Don't move this deferred function, it's placed before the capturestate-deferred method, + // so that it get's executed _after_: the capturestate needs the stacks before + // they are returned to the pools + defer func() { + returnStack(stack) + }() contract.Input = input - // Reclaim the stack as an int pool when the execution stops - defer func() { in.intPool.put(stack.data...) }() - if in.cfg.Debug { defer func() { if err != nil { if !logged { - in.cfg.Tracer.CaptureState(in.evm, pcCopy, op, gasCopy, cost, mem, stack, contract, in.evm.depth, err) + in.cfg.Tracer.CaptureState(pcCopy, op, gasCopy, cost, callContext, in.returnData, in.evm.depth, err) } else { - in.cfg.Tracer.CaptureFault(in.evm, pcCopy, op, gasCopy, cost, mem, stack, contract, in.evm.depth, err) + in.cfg.Tracer.CaptureFault(pcCopy, op, gasCopy, cost, callContext, in.evm.depth, err) } } }() @@ -194,107 +177,74 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( // explicit STOP, RETURN or SELFDESTRUCT is executed, an error occurred during // the execution of one of the operations or until the done flag is set by the // parent context. - for atomic.LoadInt32(&in.evm.abort) == 0 { + for { if in.cfg.Debug { // Capture pre-execution values for tracing. logged, pcCopy, gasCopy = false, pc, contract.Gas } - // Get the operation from the jump table and validate the stack to ensure there are // enough stack items available to perform the operation. op = contract.GetOp(pc) operation := in.cfg.JumpTable[op] - if !operation.valid { - return nil, fmt.Errorf("invalid opcode 0x%x", int(op)) - } + cost = operation.constantGas // For tracing // Validate stack if sLen := stack.len(); sLen < operation.minStack { - return nil, fmt.Errorf("stack underflow (%d <=> %d)", sLen, operation.minStack) + return nil, &ErrStackUnderflow{stackLen: sLen, required: 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 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 - } + return nil, &ErrStackOverflow{stackLen: sLen, limit: operation.maxStack} } - // Static portion of gas - cost = operation.constantGas // For tracing - if !contract.UseGas(operation.constantGas) { + if !contract.UseGas(cost) { 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 := operation.memorySize(stack) - if overflow { - return nil, errGasUintOverflow - } - // memory is expanded in words of 32 bytes. Gas - // is also calculated in words. - if memorySize, overflow = math.SafeMul(toWordSize(memSize), 32); overflow { - 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 if operation.dynamicGas != nil { + // All ops with a dynamic memory usage also has a dynamic gas cost. + 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 := operation.memorySize(stack) + if overflow { + return nil, ErrGasUintOverflow + } + // memory is expanded in words of 32 bytes. Gas + // is also calculated in words. + if memorySize, overflow = math.SafeMul(toWordSize(memSize), 32); overflow { + return nil, ErrGasUintOverflow + } + } + // 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 var dynamicCost uint64 dynamicCost, err = operation.dynamicGas(in.evm, contract, stack, mem, memorySize) - cost += dynamicCost // total cost, for debug tracing + cost += dynamicCost // for tracing if err != nil || !contract.UseGas(dynamicCost) { return nil, ErrOutOfGas } - } - if memorySize > 0 { - mem.Resize(memorySize) - } - - if in.cfg.Debug { - in.cfg.Tracer.CaptureState(in.evm, pc, op, gasCopy, cost, mem, stack, contract, in.evm.depth, err) + // Do tracing before memory expansion + if in.cfg.Debug { + in.cfg.Tracer.CaptureState(pc, op, gasCopy, cost, callContext, in.returnData, in.evm.depth, err) + logged = true + } + if memorySize > 0 { + mem.Resize(memorySize) + } + } else if in.cfg.Debug { + in.cfg.Tracer.CaptureState(pc, op, gasCopy, cost, callContext, in.returnData, in.evm.depth, err) logged = true } - // execute the operation - 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 { - verifyIntegerPool(in.intPool) - } - // if the operation clears the return data (e.g. it has returning data) - // set the last return to the result of the operation. - if operation.returns { - in.returnData = res + res, err = operation.execute(&pc, in, callContext) + if err != nil { + break } + pc++ + } - switch { - case err != nil: - return nil, err - case operation.reverts: - return res, errExecutionReverted - case operation.halts: - return res, nil - case !operation.jumps: - pc++ - } + if err == errStopToken { + err = nil // clear stop token error } - return nil, nil -} -// CanRun tells if the contract, passed as an argument, can be -// run by the current interpreter. -func (in *EVMInterpreter) CanRun(code []byte) bool { - return true + return res, err } diff --git a/core/vm/interpreter_test.go b/core/vm/interpreter_test.go new file mode 100644 index 00000000..31ee9922 --- /dev/null +++ b/core/vm/interpreter_test.go @@ -0,0 +1,76 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/params" +) + +var loopInterruptTests = []string{ + // infinite loop using JUMP: push(2) jumpdest dup1 jump + "60025b8056", + // infinite loop using JUMPI: push(1) push(4) jumpdest dup2 dup2 jumpi + "600160045b818157", +} + +func TestLoopInterrupt(t *testing.T) { + address := common.BytesToAddress([]byte("contract")) + vmctx := BlockContext{ + Transfer: func(StateDB, common.Address, common.Address, *big.Int) {}, + } + + for i, tt := range loopInterruptTests { + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + statedb.CreateAccount(address) + statedb.SetCode(address, common.Hex2Bytes(tt)) + statedb.Finalise(true) + + evm := NewEVM(vmctx, TxContext{}, statedb, params.AllEthashProtocolChanges, Config{}) + + errChannel := make(chan error) + timeout := make(chan bool) + + go func(evm *EVM) { + _, _, err := evm.Call(AccountRef(common.Address{}), address, nil, math.MaxUint64, new(big.Int)) + errChannel <- err + }(evm) + + go func() { + <-time.After(time.Second) + timeout <- true + }() + + evm.Cancel() + + select { + case <-timeout: + t.Errorf("test %d timed out", i) + case err := <-errChannel: + if err != nil { + t.Errorf("test %d failure: %v", i, err) + } + } + } +} diff --git a/core/vm/intpool.go b/core/vm/intpool.go deleted file mode 100644 index 917a78d5..00000000 --- a/core/vm/intpool.go +++ /dev/null @@ -1,106 +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 vm - -import ( - "math/big" - "sync" -) - -var checkVal = big.NewInt(-42) - -const poolLimit = 256 - -// intPool is a pool of big integers that -// can be reused for all big.Int operations. -type intPool struct { - pool *Stack -} - -func newIntPool() *intPool { - return &intPool{pool: newstack()} -} - -// get retrieves a big int from the pool, allocating one if the pool is empty. -// Note, the returned int's value is arbitrary and will not be zeroed! -func (p *intPool) get() *big.Int { - if p.pool.len() > 0 { - return p.pool.pop() - } - return new(big.Int) -} - -// getZero retrieves a big int from the pool, setting it to zero or allocating -// a new one if the pool is empty. -func (p *intPool) getZero() *big.Int { - if p.pool.len() > 0 { - return p.pool.pop().SetUint64(0) - } - return new(big.Int) -} - -// put returns an allocated big int to the pool to be later reused by get calls. -// Note, the values as saved as is; neither put nor get zeroes the ints out! -func (p *intPool) put(is ...*big.Int) { - if len(p.pool.data) > poolLimit { - return - } - for _, i := range is { - // verifyPool is a build flag. Pool verification makes sure the integrity - // of the integer pool by comparing values to a default value. - if verifyPool { - i.Set(checkVal) - } - p.pool.push(i) - } -} - -// The intPool pool's default capacity -const poolDefaultCap = 25 - -// intPoolPool manages a pool of intPools. -type intPoolPool struct { - pools []*intPool - lock sync.Mutex -} - -var poolOfIntPools = &intPoolPool{ - pools: make([]*intPool, 0, poolDefaultCap), -} - -// get is looking for an available pool to return. -func (ipp *intPoolPool) get() *intPool { - ipp.lock.Lock() - defer ipp.lock.Unlock() - - if len(poolOfIntPools.pools) > 0 { - ip := ipp.pools[len(ipp.pools)-1] - ipp.pools = ipp.pools[:len(ipp.pools)-1] - return ip - } - return newIntPool() -} - -// put a pool that has been allocated with get. -func (ipp *intPoolPool) put(ip *intPool) { - ipp.lock.Lock() - defer ipp.lock.Unlock() - - if len(ipp.pools) < cap(ipp.pools) { - ipp.pools = append(ipp.pools, ip) - } -} diff --git a/core/vm/intpool_test.go b/core/vm/intpool_test.go deleted file mode 100644 index 6c0d00f3..00000000 --- a/core/vm/intpool_test.go +++ /dev/null @@ -1,55 +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 vm - -import ( - "testing" -) - -func TestIntPoolPoolGet(t *testing.T) { - poolOfIntPools.pools = make([]*intPool, 0, poolDefaultCap) - - nip := poolOfIntPools.get() - if nip == nil { - t.Fatalf("Invalid pool allocation") - } -} - -func TestIntPoolPoolPut(t *testing.T) { - poolOfIntPools.pools = make([]*intPool, 0, poolDefaultCap) - - nip := poolOfIntPools.get() - if len(poolOfIntPools.pools) != 0 { - t.Fatalf("Pool got added to list when none should have been") - } - - poolOfIntPools.put(nip) - if len(poolOfIntPools.pools) == 0 { - t.Fatalf("Pool did not get added to list when one should have been") - } -} - -func TestIntPoolPoolReUse(t *testing.T) { - poolOfIntPools.pools = make([]*intPool, 0, poolDefaultCap) - nip := poolOfIntPools.get() - poolOfIntPools.put(nip) - poolOfIntPools.get() - - if len(poolOfIntPools.pools) != 0 { - t.Fatalf("Invalid number of pools. Got %d, expected %d", len(poolOfIntPools.pools), 0) - } -} diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index b63678d6..707b52e7 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -17,20 +17,18 @@ package vm import ( - "errors" + "fmt" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" ) type ( - executionFunc func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) + executionFunc func(pc *uint64, interpreter *EVMInterpreter, callContext *ScopeContext) ([]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 @@ -44,13 +42,6 @@ type operation struct { // memorySize returns the memory size required for the operation memorySize memorySizeFunc - - halts bool // indicates whether the operation should halt further execution - jumps bool // indicates whether the program counter should not increment - writes bool // determines whether this a state modifying operation - valid bool // indication whether the retrieved operation is valid and known - reverts bool // determines whether the operation reverts state (implicitly halts) - returns bool // determines whether the operations sets the return data content } var ( @@ -61,13 +52,62 @@ var ( byzantiumInstructionSet = newByzantiumInstructionSet() constantinopleInstructionSet = newConstantinopleInstructionSet() istanbulInstructionSet = newIstanbulInstructionSet() + berlinInstructionSet = newBerlinInstructionSet() + londonInstructionSet = newLondonInstructionSet() + mergeInstructionSet = newMergeInstructionSet() ) // JumpTable contains the EVM opcodes supported at a given fork. -type JumpTable [256]operation +type JumpTable [256]*operation + +func validate(jt JumpTable) JumpTable { + for i, op := range jt { + if op == nil { + panic(fmt.Sprintf("op %#x is not set", i)) + } + // The interpreter has an assumption that if the memorySize function is + // set, then the dynamicGas function is also set. This is a somewhat + // arbitrary assumption, and can be removed if we need to -- but it + // allows us to avoid a condition check. As long as we have that assumption + // in there, this little sanity check prevents us from merging in a + // change which violates it. + if op.memorySize != nil && op.dynamicGas == nil { + panic(fmt.Sprintf("op %v has dynamic memory but not dynamic gas", OpCode(i).String())) + } + } + return jt +} + +func newMergeInstructionSet() JumpTable { + instructionSet := newLondonInstructionSet() + instructionSet[RANDOM] = &operation{ + execute: opRandom, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + } + return validate(instructionSet) +} + +// newLondonInstructionSet returns the frontier, homestead, byzantium, +// contantinople, istanbul, petersburg, berlin and london instructions. +func newLondonInstructionSet() JumpTable { + instructionSet := newBerlinInstructionSet() + enable3529(&instructionSet) // EIP-3529: Reduction in refunds https://eips.ethereum.org/EIPS/eip-3529 + enable3198(&instructionSet) // Base fee opcode https://eips.ethereum.org/EIPS/eip-3198 + return validate(instructionSet) +} + +// newBerlinInstructionSet returns the frontier, homestead, byzantium, +// contantinople, istanbul, petersburg and berlin instructions. +func newBerlinInstructionSet() JumpTable { + instructionSet := newIstanbulInstructionSet() + enable2929(&instructionSet) // Access lists for trie accesses https://eips.ethereum.org/EIPS/eip-2929 + return validate(instructionSet) +} -// newIstanbulInstructionSet returns the frontier, homestead -// byzantium, contantinople and petersburg instructions. +// newIstanbulInstructionSet returns the frontier, homestead, byzantium, +// contantinople, istanbul and petersburg instructions. func newIstanbulInstructionSet() JumpTable { instructionSet := newConstantinopleInstructionSet() @@ -75,104 +115,89 @@ func newIstanbulInstructionSet() JumpTable { 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 + return validate(instructionSet) } -// newConstantinopleInstructionSet returns the frontier, homestead +// newConstantinopleInstructionSet returns the frontier, homestead, // byzantium and contantinople instructions. func newConstantinopleInstructionSet() JumpTable { instructionSet := newByzantiumInstructionSet() - instructionSet[SHL] = operation{ + instructionSet[SHL] = &operation{ execute: opSHL, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, } - instructionSet[SHR] = operation{ + instructionSet[SHR] = &operation{ execute: opSHR, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, } - instructionSet[SAR] = operation{ + instructionSet[SAR] = &operation{ execute: opSAR, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, } - instructionSet[EXTCODEHASH] = operation{ + instructionSet[EXTCODEHASH] = &operation{ execute: opExtCodeHash, constantGas: params.ExtcodeHashGasConstantinople, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, } - instructionSet[CREATE2] = operation{ + instructionSet[CREATE2] = &operation{ 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 + return validate(instructionSet) } // newByzantiumInstructionSet returns the frontier, homestead and // byzantium instructions. func newByzantiumInstructionSet() JumpTable { instructionSet := newSpuriousDragonInstructionSet() - instructionSet[STATICCALL] = operation{ + instructionSet[STATICCALL] = &operation{ execute: opStaticCall, constantGas: params.CallGasEIP150, dynamicGas: gasStaticCall, minStack: minStack(6, 1), maxStack: maxStack(6, 1), memorySize: memoryStaticCall, - valid: true, - returns: true, } - instructionSet[RETURNDATASIZE] = operation{ + instructionSet[RETURNDATASIZE] = &operation{ execute: opReturnDataSize, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, } - instructionSet[RETURNDATACOPY] = operation{ + instructionSet[RETURNDATACOPY] = &operation{ execute: opReturnDataCopy, constantGas: GasFastestStep, dynamicGas: gasReturnDataCopy, minStack: minStack(3, 0), maxStack: maxStack(3, 0), memorySize: memoryReturnDataCopy, - valid: true, } - instructionSet[REVERT] = operation{ + instructionSet[REVERT] = &operation{ execute: opRevert, dynamicGas: gasRevert, minStack: minStack(2, 0), maxStack: maxStack(2, 0), memorySize: memoryRevert, - valid: true, - reverts: true, - returns: true, } - return instructionSet + return validate(instructionSet) } // EIP 158 a.k.a Spurious Dragon func newSpuriousDragonInstructionSet() JumpTable { instructionSet := newTangerineWhistleInstructionSet() instructionSet[EXP].dynamicGas = gasExpEIP158 - return instructionSet - + return validate(instructionSet) } // EIP 150 a.k.a Tangerine Whistle @@ -185,249 +210,215 @@ func newTangerineWhistleInstructionSet() JumpTable { instructionSet[CALL].constantGas = params.CallGasEIP150 instructionSet[CALLCODE].constantGas = params.CallGasEIP150 instructionSet[DELEGATECALL].constantGas = params.CallGasEIP150 - return instructionSet + return validate(instructionSet) } // newHomesteadInstructionSet returns the frontier and homestead // instructions that can be executed during the homestead phase. func newHomesteadInstructionSet() JumpTable { instructionSet := newFrontierInstructionSet() - instructionSet[DELEGATECALL] = operation{ + instructionSet[DELEGATECALL] = &operation{ execute: opDelegateCall, dynamicGas: gasDelegateCall, constantGas: params.CallGasFrontier, minStack: minStack(6, 1), maxStack: maxStack(6, 1), memorySize: memoryDelegateCall, - valid: true, - returns: true, } - return instructionSet + return validate(instructionSet) } // newFrontierInstructionSet returns the frontier instructions // that can be executed during the frontier phase. func newFrontierInstructionSet() JumpTable { - return JumpTable{ + tbl := JumpTable{ STOP: { execute: opStop, constantGas: 0, minStack: minStack(0, 0), maxStack: maxStack(0, 0), - halts: true, - valid: true, }, ADD: { execute: opAdd, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, MUL: { execute: opMul, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SUB: { execute: opSub, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, DIV: { execute: opDiv, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SDIV: { execute: opSdiv, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, MOD: { execute: opMod, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SMOD: { execute: opSmod, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, ADDMOD: { execute: opAddmod, constantGas: GasMidStep, minStack: minStack(3, 1), maxStack: maxStack(3, 1), - valid: true, }, MULMOD: { execute: opMulmod, constantGas: GasMidStep, minStack: minStack(3, 1), maxStack: maxStack(3, 1), - valid: true, }, EXP: { execute: opExp, dynamicGas: gasExpFrontier, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SIGNEXTEND: { execute: opSignExtend, constantGas: GasFastStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, LT: { execute: opLt, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, GT: { execute: opGt, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SLT: { execute: opSlt, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, SGT: { execute: opSgt, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, EQ: { execute: opEq, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, ISZERO: { execute: opIszero, constantGas: GasFastestStep, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, AND: { execute: opAnd, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, XOR: { execute: opXor, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, OR: { execute: opOr, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, NOT: { execute: opNot, constantGas: GasFastestStep, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, BYTE: { execute: opByte, constantGas: GasFastestStep, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - valid: true, }, - SHA3: { - execute: opSha3, - constantGas: params.Sha3Gas, - dynamicGas: gasSha3, + KECCAK256: { + execute: opKeccak256, + constantGas: params.Keccak256Gas, + dynamicGas: gasKeccak256, minStack: minStack(2, 1), maxStack: maxStack(2, 1), - memorySize: memorySha3, - valid: true, + memorySize: memoryKeccak256, }, ADDRESS: { execute: opAddress, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, BALANCE: { execute: opBalance, constantGas: params.BalanceGasFrontier, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, ORIGIN: { execute: opOrigin, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, CALLER: { execute: opCaller, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, CALLVALUE: { execute: opCallValue, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, CALLDATALOAD: { execute: opCallDataLoad, constantGas: GasFastestStep, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, CALLDATASIZE: { execute: opCallDataSize, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, CALLDATACOPY: { execute: opCallDataCopy, @@ -436,14 +427,12 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 0), maxStack: maxStack(3, 0), memorySize: memoryCallDataCopy, - valid: true, }, CODESIZE: { execute: opCodeSize, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, CODECOPY: { execute: opCodeCopy, @@ -452,21 +441,18 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 0), maxStack: maxStack(3, 0), memorySize: memoryCodeCopy, - valid: true, }, GASPRICE: { execute: opGasprice, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, EXTCODESIZE: { execute: opExtCodeSize, constantGas: params.ExtcodeSizeGasFrontier, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, EXTCODECOPY: { execute: opExtCodeCopy, @@ -475,56 +461,48 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(4, 0), maxStack: maxStack(4, 0), memorySize: memoryExtCodeCopy, - valid: true, }, BLOCKHASH: { execute: opBlockhash, constantGas: GasExtStep, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, COINBASE: { execute: opCoinbase, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, TIMESTAMP: { execute: opTimestamp, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, NUMBER: { execute: opNumber, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, DIFFICULTY: { execute: opDifficulty, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, GASLIMIT: { execute: opGasLimit, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, POP: { execute: opPop, constantGas: GasQuickStep, minStack: minStack(1, 0), maxStack: maxStack(1, 0), - valid: true, }, MLOAD: { execute: opMload, @@ -533,7 +511,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 1), maxStack: maxStack(1, 1), memorySize: memoryMLoad, - valid: true, }, MSTORE: { execute: opMstore, @@ -542,7 +519,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 0), maxStack: maxStack(2, 0), memorySize: memoryMStore, - valid: true, }, MSTORE8: { execute: opMstore8, @@ -551,515 +527,438 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryMStore8, minStack: minStack(2, 0), maxStack: maxStack(2, 0), - - valid: true, }, SLOAD: { execute: opSload, constantGas: params.SloadGasFrontier, minStack: minStack(1, 1), maxStack: maxStack(1, 1), - valid: true, }, SSTORE: { execute: opSstore, dynamicGas: gasSStore, minStack: minStack(2, 0), maxStack: maxStack(2, 0), - valid: true, - writes: true, }, JUMP: { execute: opJump, constantGas: GasMidStep, minStack: minStack(1, 0), maxStack: maxStack(1, 0), - jumps: true, - valid: true, }, JUMPI: { execute: opJumpi, constantGas: GasSlowStep, minStack: minStack(2, 0), maxStack: maxStack(2, 0), - jumps: true, - valid: true, }, PC: { execute: opPc, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, MSIZE: { execute: opMsize, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, GAS: { execute: opGas, constantGas: GasQuickStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, JUMPDEST: { execute: opJumpdest, constantGas: params.JumpdestGas, minStack: minStack(0, 0), maxStack: maxStack(0, 0), - valid: true, }, PUSH1: { execute: opPush1, constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH2: { execute: makePush(2, 2), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH3: { execute: makePush(3, 3), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH4: { execute: makePush(4, 4), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH5: { execute: makePush(5, 5), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH6: { execute: makePush(6, 6), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH7: { execute: makePush(7, 7), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH8: { execute: makePush(8, 8), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH9: { execute: makePush(9, 9), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH10: { execute: makePush(10, 10), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH11: { execute: makePush(11, 11), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH12: { execute: makePush(12, 12), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH13: { execute: makePush(13, 13), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH14: { execute: makePush(14, 14), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH15: { execute: makePush(15, 15), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH16: { execute: makePush(16, 16), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH17: { execute: makePush(17, 17), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH18: { execute: makePush(18, 18), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH19: { execute: makePush(19, 19), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH20: { execute: makePush(20, 20), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH21: { execute: makePush(21, 21), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH22: { execute: makePush(22, 22), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH23: { execute: makePush(23, 23), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH24: { execute: makePush(24, 24), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH25: { execute: makePush(25, 25), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH26: { execute: makePush(26, 26), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH27: { execute: makePush(27, 27), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH28: { execute: makePush(28, 28), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH29: { execute: makePush(29, 29), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH30: { execute: makePush(30, 30), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH31: { execute: makePush(31, 31), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, PUSH32: { execute: makePush(32, 32), constantGas: GasFastestStep, minStack: minStack(0, 1), maxStack: maxStack(0, 1), - valid: true, }, DUP1: { execute: makeDup(1), constantGas: GasFastestStep, minStack: minDupStack(1), maxStack: maxDupStack(1), - valid: true, }, DUP2: { execute: makeDup(2), constantGas: GasFastestStep, minStack: minDupStack(2), maxStack: maxDupStack(2), - valid: true, }, DUP3: { execute: makeDup(3), constantGas: GasFastestStep, minStack: minDupStack(3), maxStack: maxDupStack(3), - valid: true, }, DUP4: { execute: makeDup(4), constantGas: GasFastestStep, minStack: minDupStack(4), maxStack: maxDupStack(4), - valid: true, }, DUP5: { execute: makeDup(5), constantGas: GasFastestStep, minStack: minDupStack(5), maxStack: maxDupStack(5), - valid: true, }, DUP6: { execute: makeDup(6), constantGas: GasFastestStep, minStack: minDupStack(6), maxStack: maxDupStack(6), - valid: true, }, DUP7: { execute: makeDup(7), constantGas: GasFastestStep, minStack: minDupStack(7), maxStack: maxDupStack(7), - valid: true, }, DUP8: { execute: makeDup(8), constantGas: GasFastestStep, minStack: minDupStack(8), maxStack: maxDupStack(8), - valid: true, }, DUP9: { execute: makeDup(9), constantGas: GasFastestStep, minStack: minDupStack(9), maxStack: maxDupStack(9), - valid: true, }, DUP10: { execute: makeDup(10), constantGas: GasFastestStep, minStack: minDupStack(10), maxStack: maxDupStack(10), - valid: true, }, DUP11: { execute: makeDup(11), constantGas: GasFastestStep, minStack: minDupStack(11), maxStack: maxDupStack(11), - valid: true, }, DUP12: { execute: makeDup(12), constantGas: GasFastestStep, minStack: minDupStack(12), maxStack: maxDupStack(12), - valid: true, }, DUP13: { execute: makeDup(13), constantGas: GasFastestStep, minStack: minDupStack(13), maxStack: maxDupStack(13), - valid: true, }, DUP14: { execute: makeDup(14), constantGas: GasFastestStep, minStack: minDupStack(14), maxStack: maxDupStack(14), - valid: true, }, DUP15: { execute: makeDup(15), constantGas: GasFastestStep, minStack: minDupStack(15), maxStack: maxDupStack(15), - valid: true, }, DUP16: { execute: makeDup(16), constantGas: GasFastestStep, minStack: minDupStack(16), maxStack: maxDupStack(16), - valid: true, }, SWAP1: { execute: makeSwap(1), constantGas: GasFastestStep, minStack: minSwapStack(2), maxStack: maxSwapStack(2), - valid: true, }, SWAP2: { execute: makeSwap(2), constantGas: GasFastestStep, minStack: minSwapStack(3), maxStack: maxSwapStack(3), - valid: true, }, SWAP3: { execute: makeSwap(3), constantGas: GasFastestStep, minStack: minSwapStack(4), maxStack: maxSwapStack(4), - valid: true, }, SWAP4: { execute: makeSwap(4), constantGas: GasFastestStep, minStack: minSwapStack(5), maxStack: maxSwapStack(5), - valid: true, }, SWAP5: { execute: makeSwap(5), constantGas: GasFastestStep, minStack: minSwapStack(6), maxStack: maxSwapStack(6), - valid: true, }, SWAP6: { execute: makeSwap(6), constantGas: GasFastestStep, minStack: minSwapStack(7), maxStack: maxSwapStack(7), - valid: true, }, SWAP7: { execute: makeSwap(7), constantGas: GasFastestStep, minStack: minSwapStack(8), maxStack: maxSwapStack(8), - valid: true, }, SWAP8: { execute: makeSwap(8), constantGas: GasFastestStep, minStack: minSwapStack(9), maxStack: maxSwapStack(9), - valid: true, }, SWAP9: { execute: makeSwap(9), constantGas: GasFastestStep, minStack: minSwapStack(10), maxStack: maxSwapStack(10), - valid: true, }, SWAP10: { execute: makeSwap(10), constantGas: GasFastestStep, minStack: minSwapStack(11), maxStack: maxSwapStack(11), - valid: true, }, SWAP11: { execute: makeSwap(11), constantGas: GasFastestStep, minStack: minSwapStack(12), maxStack: maxSwapStack(12), - valid: true, }, SWAP12: { execute: makeSwap(12), constantGas: GasFastestStep, minStack: minSwapStack(13), maxStack: maxSwapStack(13), - valid: true, }, SWAP13: { execute: makeSwap(13), constantGas: GasFastestStep, minStack: minSwapStack(14), maxStack: maxSwapStack(14), - valid: true, }, SWAP14: { execute: makeSwap(14), constantGas: GasFastestStep, minStack: minSwapStack(15), maxStack: maxSwapStack(15), - valid: true, }, SWAP15: { execute: makeSwap(15), constantGas: GasFastestStep, minStack: minSwapStack(16), maxStack: maxSwapStack(16), - valid: true, }, SWAP16: { execute: makeSwap(16), constantGas: GasFastestStep, minStack: minSwapStack(17), maxStack: maxSwapStack(17), - valid: true, }, LOG0: { execute: makeLog(0), @@ -1067,8 +966,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 0), maxStack: maxStack(2, 0), memorySize: memoryLog, - valid: true, - writes: true, }, LOG1: { execute: makeLog(1), @@ -1076,8 +973,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 0), maxStack: maxStack(3, 0), memorySize: memoryLog, - valid: true, - writes: true, }, LOG2: { execute: makeLog(2), @@ -1085,8 +980,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(4, 0), maxStack: maxStack(4, 0), memorySize: memoryLog, - valid: true, - writes: true, }, LOG3: { execute: makeLog(3), @@ -1094,8 +987,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(5, 0), maxStack: maxStack(5, 0), memorySize: memoryLog, - valid: true, - writes: true, }, LOG4: { execute: makeLog(4), @@ -1103,8 +994,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(6, 0), maxStack: maxStack(6, 0), memorySize: memoryLog, - valid: true, - writes: true, }, CREATE: { execute: opCreate, @@ -1113,9 +1002,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 1), maxStack: maxStack(3, 1), memorySize: memoryCreate, - valid: true, - writes: true, - returns: true, }, CALL: { execute: opCall, @@ -1124,8 +1010,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(7, 1), maxStack: maxStack(7, 1), memorySize: memoryCall, - valid: true, - returns: true, }, CALLCODE: { execute: opCallCode, @@ -1134,8 +1018,6 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(7, 1), maxStack: maxStack(7, 1), memorySize: memoryCall, - valid: true, - returns: true, }, RETURN: { execute: opReturn, @@ -1143,17 +1025,21 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 0), maxStack: maxStack(2, 0), memorySize: memoryReturn, - halts: true, - valid: true, }, SELFDESTRUCT: { - execute: opSuicide, + execute: opSelfdestruct, dynamicGas: gasSelfdestruct, minStack: minStack(1, 0), maxStack: maxStack(1, 0), - halts: true, - valid: true, - writes: true, }, } + + // Fill all unassigned slots with opUndefined. + for i, entry := range tbl { + if entry == nil { + tbl[i] = &operation{execute: opUndefined, maxStack: maxStack(0, 0)} + } + } + + return validate(tbl) } diff --git a/core/vm/logger.go b/core/vm/logger.go index 0a084050..50fccafc 100644 --- a/core/vm/logger.go +++ b/core/vm/logger.go @@ -17,240 +17,28 @@ package vm import ( - "encoding/hex" - "fmt" - "io" "math/big" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" ) -// Storage represents a contract's storage. -type Storage map[common.Hash]common.Hash - -// Copy duplicates the current storage. -func (s Storage) Copy() Storage { - cpy := make(Storage) - for key, value := range s { - cpy[key] = value - } - - return cpy -} - -// LogConfig are the configuration options for structured logger the EVM -type LogConfig struct { - DisableMemory bool // disable memory capture - DisableStack bool // disable stack capture - DisableStorage bool // disable storage capture - Debug bool // print output during capture end - Limit int // maximum length of output, but zero means unlimited -} - -//go:generate gencodec -type StructLog -field-override structLogMarshaling -out gen_structlog.go - -// StructLog is emitted to the EVM each cycle and lists information about the current internal state -// prior to the execution of the statement. -type StructLog struct { - Pc uint64 `json:"pc"` - Op OpCode `json:"op"` - Gas uint64 `json:"gas"` - GasCost uint64 `json:"gasCost"` - Memory []byte `json:"memory"` - MemorySize int `json:"memSize"` - Stack []*big.Int `json:"stack"` - Storage map[common.Hash]common.Hash `json:"-"` - Depth int `json:"depth"` - RefundCounter uint64 `json:"refund"` - Err error `json:"-"` -} - -// overrides for gencodec -type structLogMarshaling struct { - Stack []*math.HexOrDecimal256 - Gas math.HexOrDecimal64 - GasCost math.HexOrDecimal64 - Memory hexutil.Bytes - OpName string `json:"opName"` // adds call to OpName() in MarshalJSON - ErrorString string `json:"error"` // adds call to ErrorString() in MarshalJSON -} - -// OpName formats the operand name in a human-readable format. -func (s *StructLog) OpName() string { - return s.Op.String() -} - -// ErrorString formats the log's error as a string. -func (s *StructLog) ErrorString() string { - if s.Err != nil { - return s.Err.Error() - } - return "" -} - -// Tracer is used to collect execution traces from an EVM transaction +// EVMLogger is used to collect execution traces from an EVM transaction // execution. CaptureState is called for each step of the VM with the // current VM state. // Note that reference types are actual VM data structures; make copies // if you need to retain them beyond the current call. -type Tracer interface { - CaptureStart(from common.Address, to common.Address, call bool, input []byte, gas uint64, value *big.Int) error - CaptureState(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error - CaptureFault(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error - CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) error -} - -// StructLogger is an EVM state logger and implements Tracer. -// -// StructLogger can capture state based on the given Log configuration and also keeps -// a track record of modified storage which is used in reporting snapshots of the -// contract their storage. -type StructLogger struct { - cfg LogConfig - - logs []StructLog - changedValues map[common.Address]Storage - output []byte - err error -} - -// NewStructLogger returns a new logger -func NewStructLogger(cfg *LogConfig) *StructLogger { - logger := &StructLogger{ - changedValues: make(map[common.Address]Storage), - } - if cfg != nil { - logger.cfg = *cfg - } - return logger -} - -// CaptureStart implements the Tracer interface to initialize the tracing operation. -func (l *StructLogger) CaptureStart(from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) error { - return nil -} - -// CaptureState logs a new structured log message and pushes it out to the environment -// -// CaptureState also tracks SSTORE ops to track dirty values. -func (l *StructLogger) CaptureState(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error { - // check if already accumulated the specified number of logs - if l.cfg.Limit != 0 && l.cfg.Limit <= len(l.logs) { - return ErrTraceLimitReached - } - - // initialise new changed values storage container for this contract - // if not present. - if l.changedValues[contract.Address()] == nil { - l.changedValues[contract.Address()] = make(Storage) - } - - // capture SSTORE opcodes and determine the changed value and store - // it in the local storage container. - if op == SSTORE && stack.len() >= 2 { - var ( - value = common.BigToHash(stack.data[stack.len()-2]) - address = common.BigToHash(stack.data[stack.len()-1]) - ) - l.changedValues[contract.Address()][address] = value - } - // 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())) - copy(mem, memory.Data()) - } - // Copy a snapshot of the current stack state to a new buffer - var stck []*big.Int - if !l.cfg.DisableStack { - stck = make([]*big.Int, len(stack.Data())) - for i, item := range stack.Data() { - stck[i] = new(big.Int).Set(item) - } - } - // Copy a snapshot of the current storage to a new container - var storage Storage - if !l.cfg.DisableStorage { - storage = l.changedValues[contract.Address()].Copy() - } - // 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) - return nil -} - -// CaptureFault implements the Tracer interface to trace an execution fault -// while running an opcode. -func (l *StructLogger) CaptureFault(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error { - return nil -} - -// CaptureEnd is called after the call finishes to finalize the tracing. -func (l *StructLogger) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) error { - l.output = output - l.err = err - if l.cfg.Debug { - fmt.Printf("0x%x\n", output) - if err != nil { - fmt.Printf(" error: %v\n", err) - } - } - return nil -} - -// StructLogs returns the captured log entries. -func (l *StructLogger) StructLogs() []StructLog { return l.logs } - -// Error returns the VM error captured by the trace. -func (l *StructLogger) Error() error { return l.err } - -// Output returns the VM return value captured by the trace. -func (l *StructLogger) Output() []byte { return l.output } - -// WriteTrace writes a formatted trace to the given writer -func WriteTrace(writer io.Writer, logs []StructLog) { - for _, log := range logs { - fmt.Fprintf(writer, "%-16spc=%08d gas=%v cost=%v", log.Op, log.Pc, log.Gas, log.GasCost) - if log.Err != nil { - fmt.Fprintf(writer, " ERROR: %v", log.Err) - } - fmt.Fprintln(writer) - - if len(log.Stack) > 0 { - fmt.Fprintln(writer, "Stack:") - for i := len(log.Stack) - 1; i >= 0; i-- { - fmt.Fprintf(writer, "%08d %x\n", len(log.Stack)-i-1, math.PaddedBigBytes(log.Stack[i], 32)) - } - } - if len(log.Memory) > 0 { - fmt.Fprintln(writer, "Memory:") - fmt.Fprint(writer, hex.Dump(log.Memory)) - } - if len(log.Storage) > 0 { - fmt.Fprintln(writer, "Storage:") - for h, item := range log.Storage { - fmt.Fprintf(writer, "%x: %x\n", h, item) - } - } - fmt.Fprintln(writer) - } -} - -// WriteLogs writes vm logs in a readable format to the given writer -func WriteLogs(writer io.Writer, logs []*types.Log) { - for _, log := range logs { - fmt.Fprintf(writer, "LOG%d: %x bn=%d txi=%x\n", len(log.Topics), log.Address, log.BlockNumber, log.TxIndex) - - for i, topic := range log.Topics { - fmt.Fprintf(writer, "%08d %x\n", i, topic) - } - - fmt.Fprint(writer, hex.Dump(log.Data)) - fmt.Fprintln(writer) - } +type EVMLogger interface { + // Transaction level + CaptureTxStart(gasLimit uint64) + CaptureTxEnd(restGas uint64) + // Top call frame + CaptureStart(env *EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) + CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) + // Rest of call frames + CaptureEnter(typ OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) + CaptureExit(output []byte, gasUsed uint64, err error) + // Opcode level + CaptureState(pc uint64, op OpCode, gas, cost uint64, scope *ScopeContext, rData []byte, depth int, err error) + CaptureFault(pc uint64, op OpCode, gas, cost uint64, scope *ScopeContext, depth int, err error) } diff --git a/core/vm/logger_test.go b/core/vm/logger_test.go deleted file mode 100644 index c869a811..00000000 --- a/core/vm/logger_test.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 . - -package vm - -import ( - "math/big" - "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/params" -) - -type dummyContractRef struct { - calledForEach bool -} - -func (dummyContractRef) ReturnGas(*big.Int) {} -func (dummyContractRef) Address() common.Address { return common.Address{} } -func (dummyContractRef) Value() *big.Int { return new(big.Int) } -func (dummyContractRef) SetCode(common.Hash, []byte) {} -func (d *dummyContractRef) ForEachStorage(callback func(key, value common.Hash) bool) { - d.calledForEach = true -} -func (d *dummyContractRef) SubBalance(amount *big.Int) {} -func (d *dummyContractRef) AddBalance(amount *big.Int) {} -func (d *dummyContractRef) SetBalance(*big.Int) {} -func (d *dummyContractRef) SetNonce(uint64) {} -func (d *dummyContractRef) Balance() *big.Int { return new(big.Int) } - -type dummyStatedb struct { - state.StateDB -} - -func (*dummyStatedb) GetRefund() uint64 { return 1337 } - -func TestStoreCapture(t *testing.T) { - var ( - env = NewEVM(Context{}, &dummyStatedb{}, params.TestChainConfig, Config{}) - logger = NewStructLogger(nil) - mem = NewMemory() - stack = newstack() - contract = NewContract(&dummyContractRef{}, &dummyContractRef{}, new(big.Int), 0) - ) - stack.push(big.NewInt(1)) - stack.push(big.NewInt(0)) - var index common.Hash - logger.CaptureState(env, 0, SSTORE, 0, 0, mem, stack, contract, 0, nil) - if len(logger.changedValues[contract.Address()]) == 0 { - t.Fatalf("expected exactly 1 changed value on address %x, got %d", contract.Address(), len(logger.changedValues[contract.Address()])) - } - exp := common.BigToHash(big.NewInt(1)) - if logger.changedValues[contract.Address()][index] != exp { - t.Errorf("expected %x, got %x", exp, logger.changedValues[contract.Address()][index]) - } -} diff --git a/core/vm/memory.go b/core/vm/memory.go index 10219907..35b72999 100644 --- a/core/vm/memory.go +++ b/core/vm/memory.go @@ -17,10 +17,7 @@ package vm import ( - "fmt" - "math/big" - - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/holiman/uint256" ) // Memory implements a simple memory model for the ethereum virtual machine. @@ -50,16 +47,15 @@ func (m *Memory) Set(offset, size uint64, value []byte) { // Set32 sets the 32 bytes starting at offset to the value of val, left-padded with zeroes to // 32 bytes. -func (m *Memory) Set32(offset uint64, val *big.Int) { +func (m *Memory) Set32(offset uint64, val *uint256.Int) { // length of store may never be less than offset + size. // The store should be resized PRIOR to setting the memory if offset+32 > uint64(len(m.store)) { panic("invalid memory: store empty") } - // Zero the memory area - copy(m.store[offset:offset+32], []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, 0}) // Fill in relevant bits - math.ReadBits(val, m.store[offset:offset+32]) + b32 := val.Bytes32() + copy(m.store[offset:], b32[:]) } // Resize resizes the memory to size @@ -69,8 +65,8 @@ func (m *Memory) Resize(size uint64) { } } -// Get returns offset + size as a new slice -func (m *Memory) Get(offset, size int64) (cpy []byte) { +// GetCopy returns offset + size as a new slice +func (m *Memory) GetCopy(offset, size int64) (cpy []byte) { if size == 0 { return nil } @@ -107,18 +103,3 @@ func (m *Memory) Len() int { func (m *Memory) Data() []byte { return m.store } - -// Print dumps the content of the memory. -func (m *Memory) Print() { - fmt.Printf("### mem %d bytes ###\n", len(m.store)) - if len(m.store) > 0 { - addr := 0 - for i := 0; i+32 <= len(m.store); i += 32 { - fmt.Printf("%03d: % x\n", addr, m.store[i:i+32]) - addr++ - } - } else { - fmt.Println("-- empty --") - } - fmt.Println("####################") -} diff --git a/core/vm/memory_table.go b/core/vm/memory_table.go index 4fcb4144..e35ca84e 100644 --- a/core/vm/memory_table.go +++ b/core/vm/memory_table.go @@ -16,7 +16,7 @@ package vm -func memorySha3(stack *Stack) (uint64, bool) { +func memoryKeccak256(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 ba0ba01b..77d619ab 100644 --- a/core/vm/opcodes.go +++ b/core/vm/opcodes.go @@ -32,96 +32,97 @@ func (op OpCode) IsPush() bool { return false } -// IsStaticJump specifies if an opcode is JUMP. -func (op OpCode) IsStaticJump() bool { - return op == JUMP -} - // 0x0 range - arithmetic ops. const ( - STOP OpCode = iota - ADD - MUL - SUB - DIV - SDIV - MOD - SMOD - ADDMOD - MULMOD - EXP - SIGNEXTEND + STOP OpCode = 0x0 + ADD OpCode = 0x1 + MUL OpCode = 0x2 + SUB OpCode = 0x3 + DIV OpCode = 0x4 + SDIV OpCode = 0x5 + MOD OpCode = 0x6 + SMOD OpCode = 0x7 + ADDMOD OpCode = 0x8 + MULMOD OpCode = 0x9 + EXP OpCode = 0xa + SIGNEXTEND OpCode = 0xb ) // 0x10 range - comparison ops. const ( - LT OpCode = iota + 0x10 - GT - SLT - SGT - EQ - ISZERO - AND - OR - XOR - NOT - BYTE - SHL - SHR - SAR + LT OpCode = 0x10 + GT OpCode = 0x11 + SLT OpCode = 0x12 + SGT OpCode = 0x13 + EQ OpCode = 0x14 + ISZERO OpCode = 0x15 + AND OpCode = 0x16 + OR OpCode = 0x17 + XOR OpCode = 0x18 + NOT OpCode = 0x19 + BYTE OpCode = 0x1a + SHL OpCode = 0x1b + SHR OpCode = 0x1c + SAR OpCode = 0x1d +) - SHA3 = 0x20 +// 0x20 range - crypto. +const ( + KECCAK256 OpCode = 0x20 ) // 0x30 range - closure state. const ( - ADDRESS OpCode = 0x30 + iota - BALANCE - ORIGIN - CALLER - CALLVALUE - CALLDATALOAD - CALLDATASIZE - CALLDATACOPY - CODESIZE - CODECOPY - GASPRICE - EXTCODESIZE - EXTCODECOPY - RETURNDATASIZE - RETURNDATACOPY - EXTCODEHASH + ADDRESS OpCode = 0x30 + BALANCE OpCode = 0x31 + ORIGIN OpCode = 0x32 + CALLER OpCode = 0x33 + CALLVALUE OpCode = 0x34 + CALLDATALOAD OpCode = 0x35 + CALLDATASIZE OpCode = 0x36 + CALLDATACOPY OpCode = 0x37 + CODESIZE OpCode = 0x38 + CODECOPY OpCode = 0x39 + GASPRICE OpCode = 0x3a + EXTCODESIZE OpCode = 0x3b + EXTCODECOPY OpCode = 0x3c + RETURNDATASIZE OpCode = 0x3d + RETURNDATACOPY OpCode = 0x3e + EXTCODEHASH OpCode = 0x3f ) // 0x40 range - block operations. const ( - BLOCKHASH OpCode = 0x40 + iota - COINBASE - TIMESTAMP - NUMBER - DIFFICULTY - GASLIMIT - CHAINID = 0x46 - SELFBALANCE = 0x47 + BLOCKHASH OpCode = 0x40 + COINBASE OpCode = 0x41 + TIMESTAMP OpCode = 0x42 + NUMBER OpCode = 0x43 + DIFFICULTY OpCode = 0x44 + RANDOM OpCode = 0x44 // Same as DIFFICULTY + GASLIMIT OpCode = 0x45 + CHAINID OpCode = 0x46 + SELFBALANCE OpCode = 0x47 + BASEFEE OpCode = 0x48 ) // 0x50 range - 'storage' and execution. const ( - POP OpCode = 0x50 + iota - MLOAD - MSTORE - MSTORE8 - SLOAD - SSTORE - JUMP - JUMPI - PC - MSIZE - GAS - JUMPDEST + POP OpCode = 0x50 + MLOAD OpCode = 0x51 + MSTORE OpCode = 0x52 + MSTORE8 OpCode = 0x53 + SLOAD OpCode = 0x54 + SSTORE OpCode = 0x55 + JUMP OpCode = 0x56 + JUMPI OpCode = 0x57 + PC OpCode = 0x58 + MSIZE OpCode = 0x59 + GAS OpCode = 0x5a + JUMPDEST OpCode = 0x5b + PUSH0 OpCode = 0x5f ) -// 0x60 range. +// 0x60 range - pushes. const ( PUSH1 OpCode = 0x60 + iota PUSH2 @@ -155,7 +156,11 @@ const ( PUSH30 PUSH31 PUSH32 - DUP1 +) + +// 0x80 range - dups. +const ( + DUP1 = 0x80 + iota DUP2 DUP3 DUP4 @@ -171,7 +176,11 @@ const ( DUP14 DUP15 DUP16 - SWAP1 +) + +// 0x90 range - swaps. +const ( + SWAP1 = 0x90 + iota SWAP2 SWAP3 SWAP4 @@ -198,25 +207,19 @@ const ( LOG4 ) -// unofficial opcodes used for parsing. -const ( - PUSH OpCode = 0xb0 + iota - DUP - SWAP -) - // 0xf0 range - closures. const ( - CREATE OpCode = 0xf0 + iota - CALL - CALLCODE - RETURN - DELEGATECALL - CREATE2 - STATICCALL = 0xfa + CREATE OpCode = 0xf0 + CALL OpCode = 0xf1 + CALLCODE OpCode = 0xf2 + RETURN OpCode = 0xf3 + DELEGATECALL OpCode = 0xf4 + CREATE2 OpCode = 0xf5 - REVERT = 0xfd - SELFDESTRUCT = 0xff + STATICCALL OpCode = 0xfa + REVERT OpCode = 0xfd + INVALID OpCode = 0xfe + SELFDESTRUCT OpCode = 0xff ) // Since the opcodes aren't all in order we can't use a regular slice. @@ -252,7 +255,7 @@ var opCodeToString = map[OpCode]string{ MULMOD: "MULMOD", // 0x20 range - crypto. - SHA3: "SHA3", + KECCAK256: "KECCAK256", // 0x30 range - closure state. ADDRESS: "ADDRESS", @@ -277,10 +280,11 @@ var opCodeToString = map[OpCode]string{ COINBASE: "COINBASE", TIMESTAMP: "TIMESTAMP", NUMBER: "NUMBER", - DIFFICULTY: "DIFFICULTY", + DIFFICULTY: "DIFFICULTY", // TODO (MariusVanDerWijden) rename to RANDOM post merge GASLIMIT: "GASLIMIT", CHAINID: "CHAINID", SELFBALANCE: "SELFBALANCE", + BASEFEE: "BASEFEE", // 0x50 range - 'storage' and execution. POP: "POP", @@ -297,6 +301,7 @@ var opCodeToString = map[OpCode]string{ MSIZE: "MSIZE", GAS: "GAS", JUMPDEST: "JUMPDEST", + PUSH0: "PUSH0", // 0x60 range - push. PUSH1: "PUSH1", @@ -380,17 +385,14 @@ var opCodeToString = map[OpCode]string{ CREATE2: "CREATE2", STATICCALL: "STATICCALL", REVERT: "REVERT", + INVALID: "INVALID", SELFDESTRUCT: "SELFDESTRUCT", - - PUSH: "PUSH", - DUP: "DUP", - SWAP: "SWAP", } func (op OpCode) String() string { str := opCodeToString[op] if len(str) == 0 { - return fmt.Sprintf("Missing opcode 0x%x", int(op)) + return fmt.Sprintf("opcode %#x not defined", int(op)) } return str @@ -423,7 +425,7 @@ var stringToOp = map[string]OpCode{ "SAR": SAR, "ADDMOD": ADDMOD, "MULMOD": MULMOD, - "SHA3": SHA3, + "KECCAK256": KECCAK256, "ADDRESS": ADDRESS, "BALANCE": BALANCE, "ORIGIN": ORIGIN, @@ -433,6 +435,7 @@ var stringToOp = map[string]OpCode{ "CALLDATASIZE": CALLDATASIZE, "CALLDATACOPY": CALLDATACOPY, "CHAINID": CHAINID, + "BASEFEE": BASEFEE, "DELEGATECALL": DELEGATECALL, "STATICCALL": STATICCALL, "CODESIZE": CODESIZE, @@ -462,6 +465,7 @@ var stringToOp = map[string]OpCode{ "MSIZE": MSIZE, "GAS": GAS, "JUMPDEST": JUMPDEST, + "PUSH0": PUSH0, "PUSH1": PUSH1, "PUSH2": PUSH2, "PUSH3": PUSH3, @@ -537,6 +541,7 @@ var stringToOp = map[string]OpCode{ "RETURN": RETURN, "CALLCODE": CALLCODE, "REVERT": REVERT, + "INVALID": INVALID, "SELFDESTRUCT": SELFDESTRUCT, } diff --git a/core/vm/operations_acl.go b/core/vm/operations_acl.go new file mode 100644 index 00000000..551e1f5f --- /dev/null +++ b/core/vm/operations_acl.go @@ -0,0 +1,244 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/params" +) + +func makeGasSStoreFunc(clearingRefund uint64) gasFunc { + return func(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.peek() + slot = common.Hash(x.Bytes32()) + current = evm.StateDB.GetState(contract.Address(), slot) + cost = uint64(0) + ) + // Check slot presence in the access list + if addrPresent, slotPresent := evm.StateDB.SlotInAccessList(contract.Address(), slot); !slotPresent { + cost = params.ColdSloadCostEIP2929 + // If the caller cannot afford the cost, this change will be rolled back + evm.StateDB.AddSlotToAccessList(contract.Address(), slot) + if !addrPresent { + // Once we're done with YOLOv2 and schedule this for mainnet, might + // be good to remove this panic here, which is just really a + // canary to have during testing + panic("impossible case: address was not present in access list during sstore op") + } + } + value := common.Hash(y.Bytes32()) + + if current == value { // noop (1) + // EIP 2200 original clause: + // return params.SloadGasEIP2200, nil + return cost + params.WarmStorageReadCostEIP2929, nil // SLOAD_GAS + } + original := evm.StateDB.GetCommittedState(contract.Address(), x.Bytes32()) + if original == current { + if original == (common.Hash{}) { // create slot (2.1.1) + return cost + params.SstoreSetGasEIP2200, nil + } + if value == (common.Hash{}) { // delete slot (2.1.2b) + evm.StateDB.AddRefund(clearingRefund) + } + // EIP-2200 original clause: + // return params.SstoreResetGasEIP2200, nil // write existing slot (2.1.2) + return cost + (params.SstoreResetGasEIP2200 - params.ColdSloadCostEIP2929), nil // write existing slot (2.1.2) + } + if original != (common.Hash{}) { + if current == (common.Hash{}) { // recreate slot (2.2.1.1) + evm.StateDB.SubRefund(clearingRefund) + } else if value == (common.Hash{}) { // delete slot (2.2.1.2) + evm.StateDB.AddRefund(clearingRefund) + } + } + if original == value { + if original == (common.Hash{}) { // reset to original inexistent slot (2.2.2.1) + // EIP 2200 Original clause: + //evm.StateDB.AddRefund(params.SstoreSetGasEIP2200 - params.SloadGasEIP2200) + evm.StateDB.AddRefund(params.SstoreSetGasEIP2200 - params.WarmStorageReadCostEIP2929) + } else { // reset to original existing slot (2.2.2.2) + // EIP 2200 Original clause: + // evm.StateDB.AddRefund(params.SstoreResetGasEIP2200 - params.SloadGasEIP2200) + // - SSTORE_RESET_GAS redefined as (5000 - COLD_SLOAD_COST) + // - SLOAD_GAS redefined as WARM_STORAGE_READ_COST + // Final: (5000 - COLD_SLOAD_COST) - WARM_STORAGE_READ_COST + evm.StateDB.AddRefund((params.SstoreResetGasEIP2200 - params.ColdSloadCostEIP2929) - params.WarmStorageReadCostEIP2929) + } + } + // EIP-2200 original clause: + //return params.SloadGasEIP2200, nil // dirty update (2.2) + return cost + params.WarmStorageReadCostEIP2929, nil // dirty update (2.2) + } +} + +// gasSLoadEIP2929 calculates dynamic gas for SLOAD according to EIP-2929 +// For SLOAD, if the (address, storage_key) pair (where address is the address of the contract +// whose storage is being read) is not yet in accessed_storage_keys, +// charge 2100 gas and add the pair to accessed_storage_keys. +// If the pair is already in accessed_storage_keys, charge 100 gas. +func gasSLoadEIP2929(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + loc := stack.peek() + slot := common.Hash(loc.Bytes32()) + // Check slot presence in the access list + if _, slotPresent := evm.StateDB.SlotInAccessList(contract.Address(), slot); !slotPresent { + // If the caller cannot afford the cost, this change will be rolled back + // If he does afford it, we can skip checking the same thing later on, during execution + evm.StateDB.AddSlotToAccessList(contract.Address(), slot) + return params.ColdSloadCostEIP2929, nil + } + return params.WarmStorageReadCostEIP2929, nil +} + +// gasExtCodeCopyEIP2929 implements extcodecopy according to EIP-2929 +// EIP spec: +// > If the target is not in accessed_addresses, +// > charge COLD_ACCOUNT_ACCESS_COST gas, and add the address to accessed_addresses. +// > Otherwise, charge WARM_STORAGE_READ_COST gas. +func gasExtCodeCopyEIP2929(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + // memory expansion first (dynamic part of pre-2929 implementation) + gas, err := gasExtCodeCopy(evm, contract, stack, mem, memorySize) + if err != nil { + return 0, err + } + addr := common.Address(stack.peek().Bytes20()) + // Check slot presence in the access list + if !evm.StateDB.AddressInAccessList(addr) { + evm.StateDB.AddAddressToAccessList(addr) + var overflow bool + // We charge (cold-warm), since 'warm' is already charged as constantGas + if gas, overflow = math.SafeAdd(gas, params.ColdAccountAccessCostEIP2929-params.WarmStorageReadCostEIP2929); overflow { + return 0, ErrGasUintOverflow + } + return gas, nil + } + return gas, nil +} + +// gasEip2929AccountCheck checks whether the first stack item (as address) is present in the access list. +// If it is, this method returns '0', otherwise 'cold-warm' gas, presuming that the opcode using it +// is also using 'warm' as constant factor. +// This method is used by: +// - extcodehash, +// - extcodesize, +// - (ext) balance +func gasEip2929AccountCheck(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + addr := common.Address(stack.peek().Bytes20()) + // Check slot presence in the access list + if !evm.StateDB.AddressInAccessList(addr) { + // If the caller cannot afford the cost, this change will be rolled back + evm.StateDB.AddAddressToAccessList(addr) + // The warm storage read cost is already charged as constantGas + return params.ColdAccountAccessCostEIP2929 - params.WarmStorageReadCostEIP2929, nil + } + return 0, nil +} + +func makeCallVariantGasCallEIP2929(oldCalculator gasFunc) gasFunc { + return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + addr := common.Address(stack.Back(1).Bytes20()) + // Check slot presence in the access list + warmAccess := evm.StateDB.AddressInAccessList(addr) + // The WarmStorageReadCostEIP2929 (100) is already deducted in the form of a constant cost, so + // the cost to charge for cold access, if any, is Cold - Warm + coldCost := params.ColdAccountAccessCostEIP2929 - params.WarmStorageReadCostEIP2929 + if !warmAccess { + evm.StateDB.AddAddressToAccessList(addr) + // Charge the remaining difference here already, to correctly calculate available + // gas for call + if !contract.UseGas(coldCost) { + return 0, ErrOutOfGas + } + } + // Now call the old calculator, which takes into account + // - create new account + // - transfer value + // - memory expansion + // - 63/64ths rule + gas, err := oldCalculator(evm, contract, stack, mem, memorySize) + if warmAccess || err != nil { + return gas, err + } + // In case of a cold access, we temporarily add the cold charge back, and also + // add it to the returned gas. By adding it to the return, it will be charged + // outside of this function, as part of the dynamic gas, and that will make it + // also become correctly reported to tracers. + contract.Gas += coldCost + return gas + coldCost, nil + } +} + +var ( + gasCallEIP2929 = makeCallVariantGasCallEIP2929(gasCall) + gasDelegateCallEIP2929 = makeCallVariantGasCallEIP2929(gasDelegateCall) + gasStaticCallEIP2929 = makeCallVariantGasCallEIP2929(gasStaticCall) + gasCallCodeEIP2929 = makeCallVariantGasCallEIP2929(gasCallCode) + gasSelfdestructEIP2929 = makeSelfdestructGasFn(true) + // gasSelfdestructEIP3529 implements the changes in EIP-2539 (no refunds) + gasSelfdestructEIP3529 = makeSelfdestructGasFn(false) + + // gasSStoreEIP2929 implements gas cost for SSTORE according to EIP-2929 + // + // When calling SSTORE, check if the (address, storage_key) pair is in accessed_storage_keys. + // If it is not, charge an additional COLD_SLOAD_COST gas, and add the pair to accessed_storage_keys. + // Additionally, modify the parameters defined in EIP 2200 as follows: + // + // Parameter Old value New value + // SLOAD_GAS 800 = WARM_STORAGE_READ_COST + // SSTORE_RESET_GAS 5000 5000 - COLD_SLOAD_COST + // + //The other parameters defined in EIP 2200 are unchanged. + // see gasSStoreEIP2200(...) in core/vm/gas_table.go for more info about how EIP 2200 is specified + gasSStoreEIP2929 = makeGasSStoreFunc(params.SstoreClearsScheduleRefundEIP2200) + + // gasSStoreEIP2539 implements gas cost for SSTORE according to EIP-2539 + // Replace `SSTORE_CLEARS_SCHEDULE` with `SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST` (4,800) + gasSStoreEIP3529 = makeGasSStoreFunc(params.SstoreClearsScheduleRefundEIP3529) +) + +// makeSelfdestructGasFn can create the selfdestruct dynamic gas function for EIP-2929 and EIP-2539 +func makeSelfdestructGasFn(refundsEnabled bool) gasFunc { + gasFunc := func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + var ( + gas uint64 + address = common.Address(stack.peek().Bytes20()) + ) + if !evm.StateDB.AddressInAccessList(address) { + // If the caller cannot afford the cost, this change will be rolled back + evm.StateDB.AddAddressToAccessList(address) + gas = params.ColdAccountAccessCostEIP2929 + } + // if empty and transfers value + if evm.StateDB.Empty(address) && evm.StateDB.GetBalance(contract.Address()).Sign() != 0 { + gas += params.CreateBySelfdestructGas + } + if refundsEnabled && !evm.StateDB.HasSuicided(contract.Address()) { + evm.StateDB.AddRefund(params.SelfdestructRefundGas) + } + return gas, nil + } + return gasFunc +} diff --git a/core/vm/runtime/env.go b/core/vm/runtime/env.go index 057948b7..dcb09742 100644 --- a/core/vm/runtime/env.go +++ b/core/vm/runtime/env.go @@ -17,25 +17,26 @@ package runtime import ( - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/vm" ) func NewEnv(cfg *Config) *vm.EVM { - context := vm.Context{ + txContext := vm.TxContext{ + Origin: cfg.Origin, + GasPrice: cfg.GasPrice, + } + blockContext := vm.BlockContext{ CanTransfer: core.CanTransfer, Transfer: core.Transfer, - GetHash: func(uint64) common.Hash { return common.Hash{} }, - - Origin: cfg.Origin, + GetHash: cfg.GetHashFn, Coinbase: cfg.Coinbase, BlockNumber: cfg.BlockNumber, Time: cfg.Time, Difficulty: cfg.Difficulty, GasLimit: cfg.GasLimit, - GasPrice: cfg.GasPrice, + BaseFee: cfg.BaseFee, } - return vm.NewEVM(context, cfg.State, cfg.ChainConfig, cfg.EVMConfig) + return vm.NewEVM(blockContext, txContext, cfg.State, cfg.ChainConfig, cfg.EVMConfig) } diff --git a/core/vm/runtime/runtime.go b/core/vm/runtime/runtime.go index 81e2d090..7861fb92 100644 --- a/core/vm/runtime/runtime.go +++ b/core/vm/runtime/runtime.go @@ -21,12 +21,12 @@ import ( "math/big" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) // Config is a basic type specifying certain configuration flags for running @@ -43,6 +43,7 @@ type Config struct { Value *big.Int Debug bool EVMConfig vm.Config + BaseFee *big.Int State *state.StateDB GetHashFn func(n uint64) common.Hash @@ -52,13 +53,21 @@ type Config struct { func setDefaults(cfg *Config) { if cfg.ChainConfig == nil { cfg.ChainConfig = ¶ms.ChainConfig{ - ChainID: big.NewInt(1), - HomesteadBlock: new(big.Int), - DAOForkBlock: new(big.Int), - DAOForkSupport: false, - EIP150Block: new(big.Int), - EIP155Block: new(big.Int), - EIP158Block: new(big.Int), + ChainID: big.NewInt(1), + HomesteadBlock: new(big.Int), + DAOForkBlock: new(big.Int), + DAOForkSupport: false, + EIP150Block: new(big.Int), + EIP150Hash: common.Hash{}, + EIP155Block: new(big.Int), + EIP158Block: new(big.Int), + ByzantiumBlock: new(big.Int), + ConstantinopleBlock: new(big.Int), + PetersburgBlock: new(big.Int), + IstanbulBlock: new(big.Int), + MuirGlacierBlock: new(big.Int), + BerlinBlock: new(big.Int), + LondonBlock: new(big.Int), } } @@ -85,13 +94,16 @@ func setDefaults(cfg *Config) { return common.BytesToHash(crypto.Keccak256([]byte(new(big.Int).SetUint64(n).String()))) } } + if cfg.BaseFee == nil { + cfg.BaseFee = big.NewInt(params.InitialBaseFee) + } } // Execute executes the code using the input as call data during the execution. // It returns the EVM's return value, the new state and an error if it failed. // -// Executes sets up a in memory, temporarily, environment for the execution of -// the given code. It makes sure that it's restored to it's original state afterwards. +// Execute sets up an in-memory, temporary, environment for the execution of +// the given code. It makes sure that it's restored to its original state afterwards. func Execute(code, input []byte, cfg *Config) ([]byte, *state.StateDB, error) { if cfg == nil { cfg = new(Config) @@ -99,13 +111,16 @@ 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(rawdb.NewMemoryDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) } var ( address = common.BytesToAddress([]byte("contract")) vmenv = NewEnv(cfg) sender = vm.AccountRef(cfg.Origin) ) + if rules := cfg.ChainConfig.Rules(vmenv.Context.BlockNumber, vmenv.Context.Random != nil); rules.IsBerlin { + cfg.State.PrepareAccessList(cfg.Origin, &address, vm.ActivePrecompiles(rules), nil) + } cfg.State.CreateAccount(address) // set the receiver's (the executing contract) code for execution. cfg.State.SetCode(address, code) @@ -129,13 +144,15 @@ 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(rawdb.NewMemoryDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) } var ( vmenv = NewEnv(cfg) sender = vm.AccountRef(cfg.Origin) ) - + if rules := cfg.ChainConfig.Rules(vmenv.Context.BlockNumber, vmenv.Context.Random != nil); rules.IsBerlin { + cfg.State.PrepareAccessList(cfg.Origin, nil, vm.ActivePrecompiles(rules), nil) + } // Call the code with the given configuration. code, address, leftOverGas, err := vmenv.Create( sender, @@ -157,6 +174,11 @@ func Call(address common.Address, input []byte, cfg *Config) ([]byte, uint64, er vmenv := NewEnv(cfg) sender := cfg.State.GetOrNewStateObject(cfg.Origin) + statedb := cfg.State + + if rules := cfg.ChainConfig.Rules(vmenv.Context.BlockNumber, vmenv.Context.Random != nil); rules.IsBerlin { + statedb.PrepareAccessList(cfg.Origin, &address, vm.ActivePrecompiles(rules), nil) + } // Call the code with the given configuration. ret, leftOverGas, err := vmenv.Call( sender, @@ -165,6 +187,5 @@ func Call(address common.Address, input []byte, cfg *Config) ([]byte, uint64, er cfg.GasLimit, cfg.Value, ) - return ret, leftOverGas, err } diff --git a/core/vm/runtime/runtime_example_test.go b/core/vm/runtime/runtime_example_test.go index 783ac1d2..b7d0ddc3 100644 --- a/core/vm/runtime/runtime_example_test.go +++ b/core/vm/runtime/runtime_example_test.go @@ -19,8 +19,8 @@ package runtime_test import ( "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/vm/runtime" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm/runtime" ) func ExampleExecute() { diff --git a/core/vm/runtime/runtime_test.go b/core/vm/runtime/runtime_test.go index a37482a0..ab77e284 100644 --- a/core/vm/runtime/runtime_test.go +++ b/core/vm/runtime/runtime_test.go @@ -17,16 +17,27 @@ package runtime import ( + "fmt" "math/big" + "os" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/asm" + "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/tracers" + "github.com/ethereum/go-ethereum/eth/tracers/logger" + "github.com/ethereum/go-ethereum/params" + + // force-load js tracers to trigger registration + _ "github.com/ethereum/go-ethereum/eth/tracers/js" ) func TestDefaults(t *testing.T) { @@ -95,7 +106,7 @@ func TestExecute(t *testing.T) { } func TestCall(t *testing.T) { - state, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + state, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) address := common.HexToAddress("0x0a") state.SetCode(address, []byte{ byte(vm.PUSH1), 10, @@ -151,7 +162,7 @@ func BenchmarkCall(b *testing.B) { } func benchmarkEVM_Create(bench *testing.B, code string) { var ( - statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) sender = common.BytesToAddress([]byte("sender")) receiver = common.BytesToAddress([]byte("receiver")) ) @@ -203,3 +214,709 @@ func BenchmarkEVM_CREATE2_1200(bench *testing.B) { // initcode size 1200K, repeatedly calls CREATE2 and then modifies the mem contents benchmarkEVM_Create(bench, "5b5862124f80600080f5600152600056") } + +func fakeHeader(n uint64, parentHash common.Hash) *types.Header { + header := types.Header{ + Coinbase: common.HexToAddress("0x00000000000000000000000000000000deadbeef"), + Number: big.NewInt(int64(n)), + ParentHash: parentHash, + Time: 1000, + Nonce: types.BlockNonce{0x1}, + Extra: []byte{}, + Difficulty: big.NewInt(0), + GasLimit: 100000, + } + return &header +} + +type dummyChain struct { + counter int +} + +// Engine retrieves the chain's consensus engine. +func (d *dummyChain) Engine() consensus.Engine { + return nil +} + +// GetHeader returns the hash corresponding to their hash. +func (d *dummyChain) GetHeader(h common.Hash, n uint64) *types.Header { + d.counter++ + parentHash := common.Hash{} + s := common.LeftPadBytes(big.NewInt(int64(n-1)).Bytes(), 32) + copy(parentHash[:], s) + + //parentHash := common.Hash{byte(n - 1)} + //fmt.Printf("GetHeader(%x, %d) => header with parent %x\n", h, n, parentHash) + return fakeHeader(n, parentHash) +} + +// TestBlockhash tests the blockhash operation. It's a bit special, since it internally +// requires access to a chain reader. +func TestBlockhash(t *testing.T) { + // Current head + n := uint64(1000) + parentHash := common.Hash{} + s := common.LeftPadBytes(big.NewInt(int64(n-1)).Bytes(), 32) + copy(parentHash[:], s) + header := fakeHeader(n, parentHash) + + // This is the contract we're using. It requests the blockhash for current num (should be all zeroes), + // then iteratively fetches all blockhashes back to n-260. + // It returns + // 1. the first (should be zero) + // 2. the second (should be the parent hash) + // 3. the last non-zero hash + // By making the chain reader return hashes which correlate to the number, we can + // verify that it obtained the right hashes where it should + + /* + + pragma solidity ^0.5.3; + contract Hasher{ + + function test() public view returns (bytes32, bytes32, bytes32){ + uint256 x = block.number; + bytes32 first; + bytes32 last; + bytes32 zero; + zero = blockhash(x); // Should be zeroes + first = blockhash(x-1); + for(uint256 i = 2 ; i < 260; i++){ + bytes32 hash = blockhash(x - i); + if (uint256(hash) != 0){ + last = hash; + } + } + return (zero, first, last); + } + } + + */ + // The contract above + data := common.Hex2Bytes("6080604052348015600f57600080fd5b50600436106045576000357c010000000000000000000000000000000000000000000000000000000090048063f8a8fd6d14604a575b600080fd5b60506074565b60405180848152602001838152602001828152602001935050505060405180910390f35b600080600080439050600080600083409050600184034092506000600290505b61010481101560c35760008186034090506000816001900414151560b6578093505b5080806001019150506094565b508083839650965096505050505090919256fea165627a7a72305820462d71b510c1725ff35946c20b415b0d50b468ea157c8c77dff9466c9cb85f560029") + // The method call to 'test()' + input := common.Hex2Bytes("f8a8fd6d") + chain := &dummyChain{} + ret, _, err := Execute(data, input, &Config{ + GetHashFn: core.GetHashFn(header, chain), + BlockNumber: new(big.Int).Set(header.Number), + }) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(ret) != 96 { + t.Fatalf("expected returndata to be 96 bytes, got %d", len(ret)) + } + + zero := new(big.Int).SetBytes(ret[0:32]) + first := new(big.Int).SetBytes(ret[32:64]) + last := new(big.Int).SetBytes(ret[64:96]) + if zero.BitLen() != 0 { + t.Fatalf("expected zeroes, got %x", ret[0:32]) + } + if first.Uint64() != 999 { + t.Fatalf("second block should be 999, got %d (%x)", first, ret[32:64]) + } + if last.Uint64() != 744 { + t.Fatalf("last block should be 744, got %d (%x)", last, ret[64:96]) + } + if exp, got := 255, chain.counter; exp != got { + t.Errorf("suboptimal; too much chain iteration, expected %d, got %d", exp, got) + } +} + +// benchmarkNonModifyingCode benchmarks code, but if the code modifies the +// state, this should not be used, since it does not reset the state between runs. +func benchmarkNonModifyingCode(gas uint64, code []byte, name string, tracerCode string, b *testing.B) { + cfg := new(Config) + setDefaults(cfg) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + cfg.GasLimit = gas + if len(tracerCode) > 0 { + tracer, err := tracers.New(tracerCode, new(tracers.Context), nil) + if err != nil { + b.Fatal(err) + } + cfg.EVMConfig = vm.Config{ + Debug: true, + Tracer: tracer, + } + } + var ( + destination = common.BytesToAddress([]byte("contract")) + vmenv = NewEnv(cfg) + sender = vm.AccountRef(cfg.Origin) + ) + cfg.State.CreateAccount(destination) + eoa := common.HexToAddress("E0") + { + cfg.State.CreateAccount(eoa) + cfg.State.SetNonce(eoa, 100) + } + reverting := common.HexToAddress("EE") + { + cfg.State.CreateAccount(reverting) + cfg.State.SetCode(reverting, []byte{ + byte(vm.PUSH1), 0x00, + byte(vm.PUSH1), 0x00, + byte(vm.REVERT), + }) + } + + //cfg.State.CreateAccount(cfg.Origin) + // set the receiver's (the executing contract) code for execution. + cfg.State.SetCode(destination, code) + vmenv.Call(sender, destination, nil, gas, cfg.Value) + + b.Run(name, func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + vmenv.Call(sender, destination, nil, gas, cfg.Value) + } + }) +} + +// BenchmarkSimpleLoop test a pretty simple loop which loops until OOG +// 55 ms +func BenchmarkSimpleLoop(b *testing.B) { + staticCallIdentity := []byte{ + byte(vm.JUMPDEST), // [ count ] + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.DUP1), // out insize + byte(vm.DUP1), // in offset + byte(vm.PUSH1), 0x4, // address of identity + byte(vm.GAS), // gas + byte(vm.STATICCALL), + byte(vm.POP), // pop return value + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + callIdentity := []byte{ + byte(vm.JUMPDEST), // [ count ] + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.DUP1), // out insize + byte(vm.DUP1), // in offset + byte(vm.DUP1), // value + byte(vm.PUSH1), 0x4, // address of identity + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), // pop return value + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + callInexistant := []byte{ + byte(vm.JUMPDEST), // [ count ] + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.DUP1), // out insize + byte(vm.DUP1), // in offset + byte(vm.DUP1), // value + byte(vm.PUSH1), 0xff, // address of existing contract + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), // pop return value + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + callEOA := []byte{ + byte(vm.JUMPDEST), // [ count ] + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.DUP1), // out insize + byte(vm.DUP1), // in offset + byte(vm.DUP1), // value + byte(vm.PUSH1), 0xE0, // address of EOA + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), // pop return value + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + loopingCode := []byte{ + byte(vm.JUMPDEST), // [ count ] + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.DUP1), // out insize + byte(vm.DUP1), // in offset + byte(vm.PUSH1), 0x4, // address of identity + byte(vm.GAS), // gas + + byte(vm.POP), byte(vm.POP), byte(vm.POP), byte(vm.POP), byte(vm.POP), byte(vm.POP), + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + callRevertingContractWithInput := []byte{ + byte(vm.JUMPDEST), // + // push args for the call + byte(vm.PUSH1), 0, // out size + byte(vm.DUP1), // out offset + byte(vm.PUSH1), 0x20, // in size + byte(vm.PUSH1), 0x00, // in offset + byte(vm.PUSH1), 0x00, // value + byte(vm.PUSH1), 0xEE, // address of reverting contract + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), // pop return value + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + //tracer := logger.NewJSONLogger(nil, os.Stdout) + //Execute(loopingCode, nil, &Config{ + // EVMConfig: vm.Config{ + // Debug: true, + // Tracer: tracer, + // }}) + // 100M gas + benchmarkNonModifyingCode(100000000, staticCallIdentity, "staticcall-identity-100M", "", b) + benchmarkNonModifyingCode(100000000, callIdentity, "call-identity-100M", "", b) + benchmarkNonModifyingCode(100000000, loopingCode, "loop-100M", "", b) + benchmarkNonModifyingCode(100000000, callInexistant, "call-nonexist-100M", "", b) + benchmarkNonModifyingCode(100000000, callEOA, "call-EOA-100M", "", b) + benchmarkNonModifyingCode(100000000, callRevertingContractWithInput, "call-reverting-100M", "", b) + + //benchmarkNonModifyingCode(10000000, staticCallIdentity, "staticcall-identity-10M", b) + //benchmarkNonModifyingCode(10000000, loopingCode, "loop-10M", b) +} + +// TestEip2929Cases contains various testcases that are used for +// EIP-2929 about gas repricings +func TestEip2929Cases(t *testing.T) { + t.Skip("Test only useful for generating documentation") + id := 1 + prettyPrint := func(comment string, code []byte) { + instrs := make([]string, 0) + it := asm.NewInstructionIterator(code) + for it.Next() { + if it.Arg() != nil && 0 < len(it.Arg()) { + instrs = append(instrs, fmt.Sprintf("%v %#x", it.Op(), it.Arg())) + } else { + instrs = append(instrs, fmt.Sprintf("%v", it.Op())) + } + } + ops := strings.Join(instrs, ", ") + fmt.Printf("### Case %d\n\n", id) + id++ + fmt.Printf("%v\n\nBytecode: \n```\n%#x\n```\nOperations: \n```\n%v\n```\n\n", + comment, + code, ops) + Execute(code, nil, &Config{ + EVMConfig: vm.Config{ + Debug: true, + Tracer: logger.NewMarkdownLogger(nil, os.Stdout), + ExtraEips: []int{2929}, + }, + }) + } + + { // First eip testcase + code := []byte{ + // Three checks against a precompile + byte(vm.PUSH1), 1, byte(vm.EXTCODEHASH), byte(vm.POP), + byte(vm.PUSH1), 2, byte(vm.EXTCODESIZE), byte(vm.POP), + byte(vm.PUSH1), 3, byte(vm.BALANCE), byte(vm.POP), + // Three checks against a non-precompile + byte(vm.PUSH1), 0xf1, byte(vm.EXTCODEHASH), byte(vm.POP), + byte(vm.PUSH1), 0xf2, byte(vm.EXTCODESIZE), byte(vm.POP), + byte(vm.PUSH1), 0xf3, byte(vm.BALANCE), byte(vm.POP), + // Same three checks (should be cheaper) + byte(vm.PUSH1), 0xf2, byte(vm.EXTCODEHASH), byte(vm.POP), + byte(vm.PUSH1), 0xf3, byte(vm.EXTCODESIZE), byte(vm.POP), + byte(vm.PUSH1), 0xf1, byte(vm.BALANCE), byte(vm.POP), + // Check the origin, and the 'this' + byte(vm.ORIGIN), byte(vm.BALANCE), byte(vm.POP), + byte(vm.ADDRESS), byte(vm.BALANCE), byte(vm.POP), + + byte(vm.STOP), + } + prettyPrint("This checks `EXT`(codehash,codesize,balance) of precompiles, which should be `100`, "+ + "and later checks the same operations twice against some non-precompiles. "+ + "Those are cheaper second time they are accessed. Lastly, it checks the `BALANCE` of `origin` and `this`.", code) + } + + { // EXTCODECOPY + code := []byte{ + // extcodecopy( 0xff,0,0,0,0) + byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, //length, codeoffset, memoffset + byte(vm.PUSH1), 0xff, byte(vm.EXTCODECOPY), + // extcodecopy( 0xff,0,0,0,0) + byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, //length, codeoffset, memoffset + byte(vm.PUSH1), 0xff, byte(vm.EXTCODECOPY), + // extcodecopy( this,0,0,0,0) + byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, byte(vm.PUSH1), 0x00, //length, codeoffset, memoffset + byte(vm.ADDRESS), byte(vm.EXTCODECOPY), + + byte(vm.STOP), + } + prettyPrint("This checks `extcodecopy( 0xff,0,0,0,0)` twice, (should be expensive first time), "+ + "and then does `extcodecopy( this,0,0,0,0)`.", code) + } + + { // SLOAD + SSTORE + code := []byte{ + + // Add slot `0x1` to access list + byte(vm.PUSH1), 0x01, byte(vm.SLOAD), byte(vm.POP), // SLOAD( 0x1) (add to access list) + // Write to `0x1` which is already in access list + byte(vm.PUSH1), 0x11, byte(vm.PUSH1), 0x01, byte(vm.SSTORE), // SSTORE( loc: 0x01, val: 0x11) + // Write to `0x2` which is not in access list + byte(vm.PUSH1), 0x11, byte(vm.PUSH1), 0x02, byte(vm.SSTORE), // SSTORE( loc: 0x02, val: 0x11) + // Write again to `0x2` + byte(vm.PUSH1), 0x11, byte(vm.PUSH1), 0x02, byte(vm.SSTORE), // SSTORE( loc: 0x02, val: 0x11) + // Read slot in access list (0x2) + byte(vm.PUSH1), 0x02, byte(vm.SLOAD), // SLOAD( 0x2) + // Read slot in access list (0x1) + byte(vm.PUSH1), 0x01, byte(vm.SLOAD), // SLOAD( 0x1) + } + prettyPrint("This checks `sload( 0x1)` followed by `sstore(loc: 0x01, val:0x11)`, then 'naked' sstore:"+ + "`sstore(loc: 0x02, val:0x11)` twice, and `sload(0x2)`, `sload(0x1)`. ", code) + } + { // Call variants + code := []byte{ + // identity precompile + byte(vm.PUSH1), 0x0, byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0x04, byte(vm.PUSH1), 0x0, byte(vm.CALL), byte(vm.POP), + + // random account - call 1 + byte(vm.PUSH1), 0x0, byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.PUSH1), 0x0, byte(vm.CALL), byte(vm.POP), + + // random account - call 2 + byte(vm.PUSH1), 0x0, byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.PUSH1), 0x0, byte(vm.STATICCALL), byte(vm.POP), + } + prettyPrint("This calls the `identity`-precompile (cheap), then calls an account (expensive) and `staticcall`s the same"+ + "account (cheap)", code) + } +} + +// TestColdAccountAccessCost test that the cold account access cost is reported +// correctly +// see: https://github.com/ethereum/go-ethereum/issues/22649 +func TestColdAccountAccessCost(t *testing.T) { + for i, tc := range []struct { + code []byte + step int + want uint64 + }{ + { // EXTCODEHASH(0xff) + code: []byte{byte(vm.PUSH1), 0xFF, byte(vm.EXTCODEHASH), byte(vm.POP)}, + step: 1, + want: 2600, + }, + { // BALANCE(0xff) + code: []byte{byte(vm.PUSH1), 0xFF, byte(vm.BALANCE), byte(vm.POP)}, + step: 1, + want: 2600, + }, + { // CALL(0xff) + code: []byte{ + byte(vm.PUSH1), 0x0, + byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.DUP1), byte(vm.CALL), byte(vm.POP), + }, + step: 7, + want: 2855, + }, + { // CALLCODE(0xff) + code: []byte{ + byte(vm.PUSH1), 0x0, + byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.DUP1), byte(vm.CALLCODE), byte(vm.POP), + }, + step: 7, + want: 2855, + }, + { // DELEGATECALL(0xff) + code: []byte{ + byte(vm.PUSH1), 0x0, + byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.DUP1), byte(vm.DELEGATECALL), byte(vm.POP), + }, + step: 6, + want: 2855, + }, + { // STATICCALL(0xff) + code: []byte{ + byte(vm.PUSH1), 0x0, + byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), + byte(vm.PUSH1), 0xff, byte(vm.DUP1), byte(vm.STATICCALL), byte(vm.POP), + }, + step: 6, + want: 2855, + }, + { // SELFDESTRUCT(0xff) + code: []byte{ + byte(vm.PUSH1), 0xff, byte(vm.SELFDESTRUCT), + }, + step: 1, + want: 7600, + }, + } { + tracer := logger.NewStructLogger(nil) + Execute(tc.code, nil, &Config{ + EVMConfig: vm.Config{ + Debug: true, + Tracer: tracer, + }, + }) + have := tracer.StructLogs()[tc.step].GasCost + if want := tc.want; have != want { + for ii, op := range tracer.StructLogs() { + t.Logf("%d: %v %d", ii, op.OpName(), op.GasCost) + } + t.Fatalf("tescase %d, gas report wrong, step %d, have %d want %d", i, tc.step, have, want) + } + } +} + +func TestRuntimeJSTracer(t *testing.T) { + jsTracers := []string{ + `{enters: 0, exits: 0, enterGas: 0, gasUsed: 0, steps:0, + step: function() { this.steps++}, + fault: function() {}, + result: function() { + return [this.enters, this.exits,this.enterGas,this.gasUsed, this.steps].join(",") + }, + enter: function(frame) { + this.enters++; + this.enterGas = frame.getGas(); + }, + exit: function(res) { + this.exits++; + this.gasUsed = res.getGasUsed(); + }}`, + `{enters: 0, exits: 0, enterGas: 0, gasUsed: 0, steps:0, + fault: function() {}, + result: function() { + return [this.enters, this.exits,this.enterGas,this.gasUsed, this.steps].join(",") + }, + enter: function(frame) { + this.enters++; + this.enterGas = frame.getGas(); + }, + exit: function(res) { + this.exits++; + this.gasUsed = res.getGasUsed(); + }}`} + tests := []struct { + code []byte + // One result per tracer + results []string + }{ + { + // CREATE + code: []byte{ + // Store initcode in memory at 0x00 (5 bytes left-padded to 32 bytes) + byte(vm.PUSH5), + // Init code: PUSH1 0, PUSH1 0, RETURN (3 steps) + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN), + byte(vm.PUSH1), 0, + byte(vm.MSTORE), + // length, offset, value + byte(vm.PUSH1), 5, byte(vm.PUSH1), 27, byte(vm.PUSH1), 0, + byte(vm.CREATE), + byte(vm.POP), + }, + results: []string{`"1,1,952855,6,12"`, `"1,1,952855,6,0"`}, + }, + { + // CREATE2 + code: []byte{ + // Store initcode in memory at 0x00 (5 bytes left-padded to 32 bytes) + byte(vm.PUSH5), + // Init code: PUSH1 0, PUSH1 0, RETURN (3 steps) + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN), + byte(vm.PUSH1), 0, + byte(vm.MSTORE), + // salt, length, offset, value + byte(vm.PUSH1), 1, byte(vm.PUSH1), 5, byte(vm.PUSH1), 27, byte(vm.PUSH1), 0, + byte(vm.CREATE2), + byte(vm.POP), + }, + results: []string{`"1,1,952846,6,13"`, `"1,1,952846,6,0"`}, + }, + { + // CALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xbb, //address + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), + }, + results: []string{`"1,1,981796,6,13"`, `"1,1,981796,6,0"`}, + }, + { + // CALLCODE + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xcc, //address + byte(vm.GAS), // gas + byte(vm.CALLCODE), + byte(vm.POP), + }, + results: []string{`"1,1,981796,6,13"`, `"1,1,981796,6,0"`}, + }, + { + // STATICCALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0xdd, //address + byte(vm.GAS), // gas + byte(vm.STATICCALL), + byte(vm.POP), + }, + results: []string{`"1,1,981799,6,12"`, `"1,1,981799,6,0"`}, + }, + { + // DELEGATECALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0xee, //address + byte(vm.GAS), // gas + byte(vm.DELEGATECALL), + byte(vm.POP), + }, + results: []string{`"1,1,981799,6,12"`, `"1,1,981799,6,0"`}, + }, + { + // CALL self-destructing contract + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xff, //address + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), + }, + results: []string{`"2,2,0,5003,12"`, `"2,2,0,5003,0"`}, + }, + } + calleeCode := []byte{ + byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, + byte(vm.RETURN), + } + depressedCode := []byte{ + byte(vm.PUSH1), 0xaa, + byte(vm.SELFDESTRUCT), + } + main := common.HexToAddress("0xaa") + for i, jsTracer := range jsTracers { + for j, tc := range tests { + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + statedb.SetCode(main, tc.code) + statedb.SetCode(common.HexToAddress("0xbb"), calleeCode) + statedb.SetCode(common.HexToAddress("0xcc"), calleeCode) + statedb.SetCode(common.HexToAddress("0xdd"), calleeCode) + statedb.SetCode(common.HexToAddress("0xee"), calleeCode) + statedb.SetCode(common.HexToAddress("0xff"), depressedCode) + + tracer, err := tracers.New(jsTracer, new(tracers.Context), nil) + if err != nil { + t.Fatal(err) + } + _, _, err = Call(main, nil, &Config{ + GasLimit: 1000000, + State: statedb, + EVMConfig: vm.Config{ + Debug: true, + Tracer: tracer, + }}) + if err != nil { + t.Fatal("didn't expect error", err) + } + res, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + if have, want := string(res), tc.results[i]; have != want { + t.Errorf("wrong result for tracer %d testcase %d, have \n%v\nwant\n%v\n", i, j, have, want) + } + } + } +} + +func TestJSTracerCreateTx(t *testing.T) { + jsTracer := ` + {enters: 0, exits: 0, + step: function() {}, + fault: function() {}, + result: function() { return [this.enters, this.exits].join(",") }, + enter: function(frame) { this.enters++ }, + exit: function(res) { this.exits++ }}` + code := []byte{byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN)} + + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + tracer, err := tracers.New(jsTracer, new(tracers.Context), nil) + if err != nil { + t.Fatal(err) + } + _, _, _, err = Create(code, &Config{ + State: statedb, + EVMConfig: vm.Config{ + Debug: true, + Tracer: tracer, + }}) + if err != nil { + t.Fatal(err) + } + + res, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + if have, want := string(res), `"0,0"`; have != want { + t.Errorf("wrong result for tracer, have \n%v\nwant\n%v\n", have, want) + } +} + +func BenchmarkTracerStepVsCallFrame(b *testing.B) { + // Simply pushes and pops some values in a loop + code := []byte{ + byte(vm.JUMPDEST), + byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, + byte(vm.POP), + byte(vm.POP), + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } + + stepTracer := ` + { + step: function() {}, + fault: function() {}, + result: function() {}, + }` + callFrameTracer := ` + { + enter: function() {}, + exit: function() {}, + fault: function() {}, + result: function() {}, + }` + + benchmarkNonModifyingCode(10000000, code, "tracer-step-10M", stepTracer, b) + benchmarkNonModifyingCode(10000000, code, "tracer-call-frame-10M", callFrameTracer, b) +} diff --git a/core/vm/stack.go b/core/vm/stack.go index 4c1b9e80..e1a957e2 100644 --- a/core/vm/stack.go +++ b/core/vm/stack.go @@ -17,37 +17,44 @@ package vm import ( - "fmt" - "math/big" + "sync" + + "github.com/holiman/uint256" ) +var stackPool = sync.Pool{ + New: func() interface{} { + return &Stack{data: make([]uint256.Int, 0, 16)} + }, +} + // Stack is an object for basic stack operations. Items popped to the stack are // expected to be changed and modified. stack does not take care of adding newly // initialised objects. type Stack struct { - data []*big.Int + data []uint256.Int } func newstack() *Stack { - return &Stack{data: make([]*big.Int, 0, 1024)} + return stackPool.Get().(*Stack) +} + +func returnStack(s *Stack) { + s.data = s.data[:0] + stackPool.Put(s) } -// Data returns the underlying big.Int array. -func (st *Stack) Data() []*big.Int { +// Data returns the underlying uint256.Int array. +func (st *Stack) Data() []uint256.Int { return st.data } -func (st *Stack) push(d *big.Int) { +func (st *Stack) push(d *uint256.Int) { // NOTE push limit (1024) is checked in baseCheck - //stackItem := new(big.Int).Set(d) - //st.data = append(st.data, stackItem) - st.data = append(st.data, d) -} -func (st *Stack) pushN(ds ...*big.Int) { - st.data = append(st.data, ds...) + st.data = append(st.data, *d) } -func (st *Stack) pop() (ret *big.Int) { +func (st *Stack) pop() (ret uint256.Int) { ret = st.data[len(st.data)-1] st.data = st.data[:len(st.data)-1] return @@ -61,35 +68,15 @@ func (st *Stack) swap(n int) { st.data[st.len()-n], st.data[st.len()-1] = st.data[st.len()-1], st.data[st.len()-n] } -func (st *Stack) dup(pool *intPool, n int) { - st.push(pool.get().Set(st.data[st.len()-n])) +func (st *Stack) dup(n int) { + st.push(&st.data[st.len()-n]) } -func (st *Stack) peek() *big.Int { - return st.data[st.len()-1] +func (st *Stack) peek() *uint256.Int { + return &st.data[st.len()-1] } // Back returns the n'th item in stack -func (st *Stack) Back(n int) *big.Int { - return st.data[st.len()-n-1] -} - -func (st *Stack) require(n int) error { - if st.len() < n { - return fmt.Errorf("stack underflow (%d <=> %d)", len(st.data), n) - } - return nil -} - -// Print dumps the content of the stack -func (st *Stack) Print() { - fmt.Println("### stack ###") - if len(st.data) > 0 { - for i, val := range st.data { - fmt.Printf("%-3d %v\n", i, val) - } - } else { - fmt.Println("-- empty --") - } - fmt.Println("#############") +func (st *Stack) Back(n int) *uint256.Int { + return &st.data[st.len()-n-1] } diff --git a/core/vm/stack_table.go b/core/vm/stack_table.go index f9d984c4..10c12901 100644 --- a/core/vm/stack_table.go +++ b/core/vm/stack_table.go @@ -17,7 +17,7 @@ package vm import ( - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" ) func minSwapStack(n int) int { diff --git a/core/vm/testdata/precompiles/blake2F.json b/core/vm/testdata/precompiles/blake2F.json new file mode 100644 index 00000000..a25f9ae5 --- /dev/null +++ b/core/vm/testdata/precompiles/blake2F.json @@ -0,0 +1,37 @@ +[ + { + "Input": "0000000048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "Expected": "08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d282e6ad7f520e511f6c3e2b8c68059b9442be0454267ce079217e1319cde05b", + "Name": "vector 4", + "Gas": 0, + "NoBenchmark": false + }, + { + "Input": "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "Expected": "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", + "Name": "vector 5", + "Gas": 12, + "NoBenchmark": false + }, + { + "Input": "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000", + "Expected": "75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d2875298743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735", + "Name": "vector 6", + "Gas": 12, + "NoBenchmark": false + }, + { + "Input": "0000000148c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "Expected": "b63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fba551b3a8333bcdf5f2f7e08993d53923de3d64fcc68c034e717b9293fed7a421", + "Name": "vector 7", + "Gas": 1, + "NoBenchmark": false + }, + { + "Input": "007A120048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "Expected": "6d2ce9e534d50e18ff866ae92d70cceba79bbcd14c63819fe48752c8aca87a4bb7dcc230d22a4047f0486cfcfb50a17b24b2899eb8fca370f22240adb5170189", + "Name": "vector 8", + "Gas": 8000000, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG1Add.json b/core/vm/testdata/precompiles/blsG1Add.json new file mode 100644 index 00000000..184d765a --- /dev/null +++ b/core/vm/testdata/precompiles/blsG1Add.json @@ -0,0 +1,730 @@ +[ + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", + "Name": "bls_g1add_(g1+g1=2*g1)", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d280000000000000000000000000000000009ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e522400000000000000000000000000000000032b80d3a6f5b09f8a84623389c5f80ca69a0cddabc3097f9d9c27310fd43be6e745256c634af45ca3473b0590ae30d1", + "Expected": "0000000000000000000000000000000010e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc0000000000000000000000000000000016ba437edcc6551e30c10512367494bfb6b01cc6681e8a4c3cd2501832ab5c4abc40b4578b85cbaffbf0bcd70d67c6e2", + "Name": "bls_g1add_(2*g1+3*g1=5*g1)", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Name": "bls_g1add_(inf+g1=g1)", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1add_(inf+inf=inf)", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992fee000000000000000000000000000000000001101098f5c39893765766af4512a0c74e1bb89bc7e6fdf14e3e7337d257cc0f94658179d83320b99f31ff94cd2bac0000000000000000000000000000000003e1a9f9f44ca2cdab4f43a1a3ee3470fdf90b2fc228eb3b709fcd72f014838ac82a6d797aeefed9a0804b22ed1ce8f7", + "Expected": "000000000000000000000000000000001466e1373ae4a7e7ba885c5f0c3ccfa48cdb50661646ac6b779952f466ac9fc92730dcaed9be831cd1f8c4fefffd5209000000000000000000000000000000000c1fb750d2285d4ca0378e1e8cdbf6044151867c34a711b73ae818aee6dbe9e886f53d7928cc6ed9c851e0422f609b11", + "Name": "matter_g1_add_0", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed2000000000000000000000000000000000441e7f7f96198e4c23bd5eb16f1a7f045dbc8c53219ab2bcea91d3a027e2dfe659feac64905f8b9add7e4bfc91bec2b0000000000000000000000000000000005fc51bb1b40c87cd4292d4b66f8ca5ce4ef9abd2b69d4464b4879064203bda7c9fc3f896a3844ebc713f7bb20951d95", + "Expected": "0000000000000000000000000000000016b8ab56b45a9294466809b8e858c1ad15ad0d52cfcb62f8f5753dc94cee1de6efaaebce10701e3ec2ecaa9551024ea600000000000000000000000000000000124571eec37c0b1361023188d66ec17c1ec230d31b515e0e81e599ec19e40c8a7c8cdea9735bc3d8b4e37ca7e5dd71f6", + "Name": "matter_g1_add_1", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f00000000000000000000000000000000114c3f11ba0b47551fa28f09f148936d6b290dc9f2d0534a83c32b0b849ab921ce6bcaa4ff3c917707798d9c74f2084f00000000000000000000000000000000149dc028207fb04a7795d94ea65e21f9952e445000eb954531ee519efde6901675d3d2446614d243efb77a9cfe0ca3ae", + "Expected": "0000000000000000000000000000000002ce7a08719448494857102da464bc65a47c95c77819af325055a23ac50b626df4732daf63feb9a663d71b7c9b8f2c510000000000000000000000000000000016117e87e9b55bd4bd5763d69d5240d30745e014b9aef87c498f9a9e3286ec4d5927df7cd5a2e54ac4179e78645acf27", + "Name": "matter_g1_add_2", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e4000000000000000000000000000000000c3d564ac1fe12f18f528c3750583ab6af8973bff3eded7bb4778c32805d9b17846cc7c687af0f46bc87de7748ab72980000000000000000000000000000000002f164c131cbd5afc85692c246157d38dc4bbb2959d2edfa6daf0a8b17c7a898aad53b400e8bdc2b29bf6688ee863db7", + "Expected": "0000000000000000000000000000000015510826f50b88fa369caf062ecdf8b03a67e660a35b219b44437a5583b5a9adf76991dce7bff9afc50257f847299504000000000000000000000000000000000a83e879895a1b47dbd6cd25ce8b719e7490cfe021614f7539e841fc2f9c09f071e386676de60b6579aa4bf6d37b13dd", + "Name": "matter_g1_add_3", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d30000000000000000000000000000000019fe3a64361fea14936ff0b3e630471494d0c0b9423e6a004184a2965221c18849b5ed0eb2708a587323d8d6c6735a90000000000000000000000000000000000340823d314703e5efeb0a65c23069199d7dfff8793aaacb98cdcd6177fc8e61ab3294c57bf13b4406266715752ef3e6", + "Expected": "00000000000000000000000000000000010b1c96d3910f56b0bf54da5ae8c7ab674a07f8143b61fed660e7309e626dc73eaa2b11886cdb82e2b6735e7802cc860000000000000000000000000000000002dabbbedd72872c2c012e7e893d2f3df1834c43873315488d814ddd6bfcca6758a18aa6bd02a0f3aed962cb51f0a222", + "Name": "matter_g1_add_4", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f90000000000000000000000000000000001461565b03a86df363d1854b4af74879115dffabeddfa879e2c8db9aa414fb291a076c3bdf0beee82d9c094ea8dc381a000000000000000000000000000000000e19d51ab619ee2daf25ea5bfa51eb217eabcfe0b5cb0358fd2fa105fd7cb0f5203816b990df6fda4e0e8d541be9bcf6", + "Expected": "000000000000000000000000000000000cb40d0bf86a627d3973f1e7846484ffd0bc4943b42a54ff9527c285fed3c056b947a9b6115824cabafe13cd1af8181c00000000000000000000000000000000076255fc12f1a9dbd232025815238baaa6a3977fd87594e8d1606caec0d37b916e1e43ee2d2953d75a40a7ba416df237", + "Name": "matter_g1_add_5", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1b0000000000000000000000000000000019cabba3e09ad34cc3d125e0eb41b527aa48a4562c2b7637467b2dbc71c373897d50eed1bc75b2bde8904ece5626d6e400000000000000000000000000000000056b0746f820cff527358c86479dc924a10b9f7cae24cd495625a4159c8b71a8c3ad1a15ebf22d3561cd4b74e8a6e48b", + "Expected": "000000000000000000000000000000000e115e0b61c1f1b25cc10a7b3bd21cf696b1433a0c366c2e1bca3c26b09482c6eced8c8ecfa69ce6b9b3b4419779262e00000000000000000000000000000000077b85daf61b9f947e81633e3bc64e697bc6c1d873f2c21e5c4c3a11302d4d5ef4c3ff5519564729aaf2a50a3c9f1196", + "Name": "matter_g1_add_6", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442a0000000000000000000000000000000011f649ee35ff8114060fc5e4df9ac828293f6212a9857ca31cb3e9ce49aa1212154a9808f1e763bc989b6d5ba7cf09390000000000000000000000000000000019af81eca7452f58c1a6e99fab50dc0d5eeebc7712153e717a14a31cffdfd0a923dbd585e652704a174905605a2e8b9d", + "Expected": "000000000000000000000000000000000013e37a8950a659265b285c6fb56930fb77759d9d40298acac2714b97b83ec7692a7d1c4ccb83f074384db9eedd809c0000000000000000000000000000000003215d524d6419214568ba42a31502f2a58a97d0139c66908e9d71755f5a7666567aafe30ea84d89308f06768f28a648", + "Name": "matter_g1_add_7", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795000000000000000000000000000000000d713e148769fac2efd380886f8566c6d4662dd38317bb7e68744c4339efaedbab88435ce3dc289afaa7ecb37df37a5300000000000000000000000000000000129d9cd031b31c77a4e68093dcdbb585feba786207aa115d9cf120fe4f19ca31a0dca9c692bd0f53721d60a55c333129", + "Expected": "00000000000000000000000000000000029405b9615e14bdac8b5666bbc5f3843d4bca17c97bed66d164f1b58d2a148f0f506d645d665a40e60d53fe29375ed400000000000000000000000000000000162761f1712814e474beb2289cc50519253d680699b530c2a6477f727ccc75a19681b82e490f441f91a3c611eeb0e9e2", + "Name": "matter_g1_add_8", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a1900000000000000000000000000000000006d92bcb599edca426ff4ceeb154ebf133c2dea210c7db0441f74bd37c8d239149c8b5056ace0bfefb1db04b42664f530000000000000000000000000000000008522fc155eef6d5746283808091f91b427f2a96ac248850f9e3d7aadd14848101c965663fd4a63aea1153d71918435a", + "Expected": "000000000000000000000000000000000cfaa8df9437c0b6f344a0c8dcbc7529a07aec0d7632ace89af6796b6b960b014f78dd10e987a993fb8a95cc909822ec0000000000000000000000000000000007475f115f6eb35f78ba9a2b71a44ccb6bbc1e980b8cd369c5c469565f3fb798bc907353cf47f524ba715deaedf379cb", + "Name": "matter_g1_add_9", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac9430000000000000000000000000000000016380d03b7c5cc3301ffcb2cf7c28c9bde54fc22ba2b36ec293739d8eb674678c8e6461e34c1704747817c8f8341499a000000000000000000000000000000000ec6667aa5c6a769a64c180d277a341926376c39376480dc69fcad9a8d3b540238eb39d05aaa8e3ca15fc2c3ab696047", + "Expected": "0000000000000000000000000000000011541d798b4b5069e2541fa5410dad03fd02784332e72658c7b0fa96c586142a967addc11a7a82bfcee33bd5d07066b900000000000000000000000000000000195b3fcb94ab7beb908208283b4e5d19c0af90fca4c76268f3c703859dea7d038aca976927f48839ebc7310869c724aa", + "Name": "matter_g1_add_10", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e00000000000000000000000000000000065eb0770ab40199658bf87db6c6b52cd8c6c843a3e40dd60433d4d79971ff31296c9e00a5d553df7c81ade533379f4b0000000000000000000000000000000017a6f6137ddd90c15cf5e415f040260e15287d8d2254c6bfee88938caec9e5a048ff34f10607d1345ba1f09f30441ef4", + "Expected": "0000000000000000000000000000000006b0853b3d41fc2d7b27da0bb2d6eb76be32530b59f8f537d227a6eb78364c7c0760447494a8bba69ef4b256dbef750200000000000000000000000000000000166e55ba2d20d94da474d4a085c14245147705e252e2a76ae696c7e37d75cde6a77fea738cef045182d5e628924dc0bb", + "Name": "matter_g1_add_11", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276b0000000000000000000000000000000006a3f7eb0e42567210cc1ba5e6f8c42d02f1eef325b6483fef49ba186f59ab69ca2284715b736086d2a0a1f0ea224b40000000000000000000000000000000000bc08427fda31a6cfbe657a8c71c73894a33700e93e411d42f1471160c403b939b535070b68d60a4dc50e47493da63dc", + "Expected": "000000000000000000000000000000000c35d4cd5d43e9cf52c15d46fef521666a1e1ab9f0b4a77b8e78882e9fab40f3f988597f202c5bd176c011a56a1887d4000000000000000000000000000000000ae2b5c24928a00c02daddf03fade45344f250dcf4c12eda06c39645b4d56147cb239d95b06fd719d4dc20fe332a6fce", + "Name": "matter_g1_add_12", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a578768100000000000000000000000000000000068e79aea45b7199ec4b6f26e01e88ec76533743639ce76df66937fff9e7de3edf6700d227f10f43e073afcc63e2eddc00000000000000000000000000000000039c0b6d9e9681401aeb57a94cedc0709a0eff423ace9253eb00ae75e21cabeb626b52ef4368e6a4592aed9689c6fca4", + "Expected": "0000000000000000000000000000000013bad27dafa20f03863454c30bd5ae6b202c9c7310875da302d4693fc1c2b78cca502b1ff851b183c4b2564c5d3eb4dc0000000000000000000000000000000000552b322b3d672704382b5d8b214c225b4f7868f9c5ae0766b7cdb181f97ed90a4892235915ffbc0daf3e14ec98a606", + "Name": "matter_g1_add_13", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f7680000000000000000000000000000000000adac9bb98bb6f35a8f941dbff39dfd307b6a4d5756ccae103c814564e3d3993a8866ff91581ccdd7686c1dce0b19f700000000000000000000000000000000083d235e0579032ca47f65b6ae007ce8ffd2f1a890ce3bc45ebd0df6673ad530d2f42125d543cb0c51ba0c28345729d8", + "Expected": "000000000000000000000000000000000b5513e42f5217490f395a8cb3673a4fc35142575f770af75ecf7a4fcd97eee215c4298fc4feab51915137cbdb814839000000000000000000000000000000000e9d4db04b233b0b12a7ff620faefef906aeb2b15481ce1609dad50eb6a7d0c09a850375599c501296219fb7b288e305", + "Name": "matter_g1_add_14", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931d000000000000000000000000000000000d5bb4fa8b494c0adf4b695477d4a05f0ce48f7f971ef53952f685e9fb69dc8db1603e4a58292ddab7129bb5911d6cea0000000000000000000000000000000004a568c556641f0e0a2f44124b77ba70e4e560d7e030f1a21eff41eeec0d3c437b43488c535cdabf19a70acc777bacca", + "Expected": "000000000000000000000000000000000c27ef4ebf37fd629370508f4cd062b74faa355b305d2ee60c7f4d67dd741363f18a7bbd368cdb17e848f372a5e33a6f0000000000000000000000000000000000ed833df28988944115502f554636e0b436cccf845341e21191e82d5b662482f32c24df492da4c605a0f9e0f8b00604", + "Name": "matter_g1_add_15", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d500000000000000000000000000000000091ee883cb9ea2c933f6645f0f4c535a826d95b6da6847b4fe2349342bd4bd496e0dd546df7a7a17a4b9fb8349e5064f000000000000000000000000000000000902d7e72242a5e6b068ca82d0cb71dc0f51335dbd302941045319f9a06777518b56a6e0b0b0c9fd8f1edf6b114ad331", + "Expected": "00000000000000000000000000000000122cce99f623944dfebffcdf6b0a0a3696162f35053e5952dddc2537421c60da9fe931579d1c4fc2e31082b6c25f96b500000000000000000000000000000000011366ffa91dc0b7da8b7c1839ea84d49299310f5c1ca244012eed0dd363dbcf4ad5813b8e3fb49361ef05ea8cb18ffe", + "Name": "matter_g1_add_16", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debe0000000000000000000000000000000000d3d4f11bc79b8425b77d25698b7e151d360ebb22c3a6afdb227de72fe432dcd6f0276b4fd3f1fcc2da5b59865053930000000000000000000000000000000015ac432071dc23148765f198ed7ea2234662745a96032c215cd9d7cf0ad8dafb8d52f209983fe98aaa2243ecc2073f1b", + "Expected": "000000000000000000000000000000000113ccf11264ff04448f8c58b279a6a49acb386750c2051eab2c90fa8b8e03d7c5b9e87eccf36b4b3f79446b80be7b1d0000000000000000000000000000000004358a1fabfe803f4c787a671196b593981a837ee78587225fb21d5a883b98a15b912862763b94d18b971cb7e37dbcf0", + "Name": "matter_g1_add_17", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb600000000000000000000000000000000034f725766897ed76394145da2f02c92c66794a51fd5ae07bd7cc60c013d7a48ebf1b07faf669dfed74d82d07e48d1150000000000000000000000000000000018f4926a3d0f740988da25379199ecb849250239ad7efcfef7ffaa43bc1373166c0448cc30dcdbd75ceb71f76f883ea7", + "Expected": "00000000000000000000000000000000167336aeeb9e447348156936849d518faee314c291c84d732fa3c1bd3951559230d94230e37a08e28e689e9d1fef05770000000000000000000000000000000005366535f7a68996e066ab80c55bb372a15fb0ed6634585b88fe7cafbf818fbfebbf6f6ddd9ca0ff72137594a1e84b35", + "Name": "matter_g1_add_18", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154b00000000000000000000000000000000079e5a154cf84190b6c735bc8cd968559182166568649b813732e4fb4c5c428c8b38e8265d4ef04990c49aa1381f51c8000000000000000000000000000000000ae08e682ef92b4986a5ac5d4f094ad0919c826a97efe8d8120a96877766eae5828803804a0cae67df9822fd18622aae", + "Expected": "000000000000000000000000000000000a3d66cf87b1ce8c5683d71a6de4bf829d094041240f56d9071aa84ff189a06940e8e1935127e23a970c78ca73c28bf6000000000000000000000000000000000b2adda87740873c0c59e3ebde44d33834773f0fe69e2f5e7ede99c4f928978a5caaede7262e45fd22136a394b3f7858", + "Name": "matter_g1_add_19", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af0000000000000000000000000000000008cefd0fd289d6964a962051c2c2ad98dab178612663548370dd5f007c5264fece368468d3ca8318a381b443c68c4cc7000000000000000000000000000000000708d118d44c1cb5609667fd51df9e58cacce8b65565ef20ad1649a3e1b9453e4fb37af67c95387de008d4c2114e5b95", + "Expected": "0000000000000000000000000000000004b2311897264fe08972d62872d3679225d9880a16f2f3d7dd59412226e5e3f4f2aa8a69d283a2dc5b93e022293f0ee1000000000000000000000000000000000f03e18cef3f9a86e6b842272f2c7ee48d0ad23bfc7f1d5a9a796d88e5d5ac31326db5fe90de8f0690c70ae6e0155039", + "Name": "matter_g1_add_20", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719290000000000000000000000000000000008e5afc16d909eb9d8bdaaf229ad291f34f7baf5247bbd4cc938278f1349adb4b0f0aacd14799c01d0ca2ed38c937d600000000000000000000000000000000006cf972c64e20403c82fee901c90eaa5547460d57cce2565fd091ff9bc55e24584595c9182298f148882d6949c36c9d5", + "Expected": "000000000000000000000000000000000caf46f480ae2ea8e700f7913c505d5150c4629c9137e917357d2a4ba8a7a1c63b8f6e2978293755952fbed7f0ad8d6d0000000000000000000000000000000002e62e715b72eebbc7c366a2390318f73e69203a9533e72340aab568f65105129ffc9889a8bc00a692494d93688c7ec0", + "Name": "matter_g1_add_21", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac0000000000000000000000000000000013a6439e0ec0fabe93f6c772e102b96b1f692971d7181c386f7f8a360daca6e5f99772e1a736f1e72a17148d90b08efe0000000000000000000000000000000010f27477f3171dcf74498e940fc324596ef5ec6792be590028c2963385d84ef8c4bbb12c6eb3f06b1afb6809a2cb0358", + "Expected": "000000000000000000000000000000000dea57d1fc19f994e6bdda9478a400b0ada23aed167bfe7a16ef79b6aa020403a04d554303c0b2a9c5a38f85cf6f3800000000000000000000000000000000000b8d76ccd41ba81a835775185bbf1d6bf94b031d94d5c78b3b97beb24cf246b0c25c4c309e2c06ae9896ed800169eeee", + "Name": "matter_g1_add_22", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff320000000000000000000000000000000005728a219d128bc0a1f851f228e2bf604a72400c393cfb0d3484456b6b28a2c5061198656f0e106bbe257d849be159040000000000000000000000000000000011f6d08baa91fb2c8b36191d5b2318e355f8964cc8112838394ba1ded84b075de58d90452601dcfc9aa8a275cfec695d", + "Expected": "0000000000000000000000000000000012e6d6c518c15cfd3020181ff3f829e29140b3b507b99251cc7f31795128adec817750296bce413bac18b9a80f69ca5000000000000000000000000000000000131ee9b748f6f1eb790adeb9edd0e79d89a9908368f5a6bb82ee0c913061cdfffe75d9ba411a49aa3f9194ee6d4d08a9", + "Name": "matter_g1_add_23", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f200000000000000000000000000000000171696781ba195f330241584e42fb112adf9b8437b54ad17d410892b45c7d334e8734e25862604d1b679097590b8ab0a000000000000000000000000000000001879328fdf0d1fb79afd920e0b0a386828be5b8e0e6024dfeea800ffcb5c65f9044061af26d639d4dcc27bcb5ba1481a", + "Expected": "00000000000000000000000000000000111c416d5bd018a77f3317e3fbf4b03d8e19658f2b810dc9c17863310dfb09e1c4ffdbb7c98951d357f1c3d93c5d0745000000000000000000000000000000000af0a252bff336d5eb3a406778557ef67d91776a9c788be9a76cff7727f519a70fc7809f1a50a58d29185cb9722624fd", + "Name": "matter_g1_add_24", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c2000000000000000000000000000000000231b0d6189a4faad082ce4a69398c1734fcf35d222b7bce22b14571033a1066b049ae3cd3bd6c8cec5bec743955cdd600000000000000000000000000000000037375237fb71536564ea693ab316ae11722aadd7cab12b17b926c8a31bd13c4565619e8c894bffb960e632896856bbe", + "Expected": "000000000000000000000000000000000d2b9c677417f4e9b38af6393718f55a27dbd23c730796c50472bc476ebf52172559b10f6ceb81e644ec2d0a41b3bb01000000000000000000000000000000001697f241ff6eceb05d9ada4be7d7078ecbbffa64dd4fb43ead0692eef270cb7cc31513ee4bf38a1b1154fe008a8b836a", + "Name": "matter_g1_add_25", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd10000000000000000000000000000000015653d1c5184736cdc78838be953390d12b307d268b394136b917b0462d5e31b8f1b9d96cce8f7a1203c2cae93db6a4000000000000000000000000000000000060efeece033ac711d500c1156e4b6dce3243156170c94bc948fd7beae7b28a31463a44872ca22ca49dc5d4d4dd27d1c", + "Expected": "0000000000000000000000000000000003996050756117eeab27a5e4fa9acdde2a1161d6fbfff2601a1c7329f900e93a29f55a8073f85be8f7c2a4d0323e95cc00000000000000000000000000000000010b195a132c1cba2f1a6a73f2507baa079e9b5cb8894ea78bebc16d4151ee56fe562b16e2741f3ab1e8640cdad83180", + "Name": "matter_g1_add_26", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc0000000000000000000000000000000018adb42928304cbc310a229306a205e7c21cdb31b9e5daf0ff6bb9437acee80cd8cf02b35dab823155d60f8a83fde5cc0000000000000000000000000000000018b57460c81cab43235be79c8c90dcda40fafcaf69e4e767133aee56308a6df07eac71275597dd8ed6607ffb9151ed9a", + "Expected": "0000000000000000000000000000000003c7a7ee3d1b73cf1f0213404363bf3c0de4425ab97d679ed51448e877b7537400f148f14eba588ed241fea34e56d465000000000000000000000000000000000c581b5070e6bb8582b7ee2cd312dfeb5aaf0b0da95cf5a22a505ffba21fc204e26a5e17311d1f47113653ff13349f57", + "Name": "matter_g1_add_27", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da00000000000000000000000000000000001da65df8574a864ab454e5f2fa929405501bb73c3162a600979a1145586079361c89839cc0c5a07f1135c94bf059f9c0000000000000000000000000000000002560df402c0550662a2c4c463ad428ab6e60297fbc42a6484107e397ae016b58494d1c46ac4952027aa8c0896c50be3", + "Expected": "000000000000000000000000000000000d7a539b679e5858271a6f9cf20108410eb5d5d2b1a905e09a8aa20318efbe9175450385d78389f08f836f5634f7a2f0000000000000000000000000000000000fb624e5f6c4c814b7d73eb63b70237c5de7d90d19ac81cac776d86171a8d307d3cc8c56da14f444fe8cf329ab7e63dd", + "Name": "matter_g1_add_28", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e0530000000000000000000000000000000005311c11f4d0bb8542f3b60247c1441656608e5ac5c363f4d62127cecb88800a771767cf23a0e7c45f698ffa5015061f0000000000000000000000000000000018f7f1d23c8b0566a6a1fcb58d3a5c6fd422573840eb04660c3c6ba65762ed1becc756ac6300e9ce4f5bfb962e963419", + "Expected": "0000000000000000000000000000000000849bbc7b0226b18abbcb4c9a9e78dca2f5f75a2cbb983bd95ff3a95b427b1a01fd909ce36384c49eb88ffb8ff77bb000000000000000000000000000000000087d8d28d92305b5313ca533a6b47f454ddce1c2d0fa3574b255128ef0b145fa4158beb07e4f0d50d6b7b90ea8a8ea8a", + "Name": "matter_g1_add_29", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265e000000000000000000000000000000000c8e293f730253128399e5c39ab18c3f040b6cd9df10d794a28d2a428a9256ea1a71cf53022bd1be11f501805e0ddda40000000000000000000000000000000003e60c2291be46900930f710969f79f27e76cf710efefc243236428db2fed93719edeeb64ada0edf6346a0411f2a4cb8", + "Expected": "00000000000000000000000000000000191084201608f706ea1f7c51dd5b593dda87b15d2c594b52829db66ce3beab6b30899d1d285bdb9590335949ceda5f050000000000000000000000000000000000d3460622c7f1d849658a20a7ae7b05e5afae1f01e871cad52ef632cc831b0529a3066f7b81248a7728d231e51fc4ad", + "Name": "matter_g1_add_30", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc80000000000000000000000000000000013267db8fdf8f488a2806fead5cffdcbb7b1b4b7681a2b67d322cd7f5985c65d088c70cdc2638e679ed678cae3cc63c80000000000000000000000000000000007757233ad6d38d488c3d9d8252b41e4ab7ee54e4ef4bbf171402df57c14f9977dd3583c6c8f9b5171b368d61f082447", + "Expected": "000000000000000000000000000000000c06fef6639ab7dceb44dc648ca6a7d614739e40e6486ee9fc01ecc55af580d98abc026c630a95878da7b6d5701d755c0000000000000000000000000000000007c9a7f2bc7fa1f65c9e3a1e463eb4e3283e47bb5490938edb12abf6c8f5a9b56d8ce7a81a60df67db8c399a9a1df1d4", + "Name": "matter_g1_add_31", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff17000000000000000000000000000000001975bc52669187f27a86096ae6bf2d60178706105d15bce8fe782759f14e449bc97cb1570e87eec5f12214a9ae0e0170000000000000000000000000000000000ca6106d6e6487a3b6f00fc2af769d21cb3b83b5dc03db19e4824fc28fd9b3d9f7a986e79f05c02b3a914ff26c7a78d6", + "Expected": "0000000000000000000000000000000002fbf4fba68ae416b42a99f3b26916dea464d662cebce55f4545481e5ab92d3c40f3e189504b54db4c9cd51ecdd60e8d0000000000000000000000000000000008e81e094c6d4ded718ef63c5edfacb2d258f48ccfa37562950c607299bb2dca18e680a620dff8c72dedc89b4e9d4759", + "Name": "matter_g1_add_32", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f00000000000000000000000000000000109f6168a719add6ea1a14f9dc95345e325d6b0e56da2f4ecff8408536446894069fa61e81bdaebfc96b13b402fad865000000000000000000000000000000001806aa27c576f4c4fa8a6db49d577cd8f257a8450e89b061cbc7773c0b5434f06bacf12b479abf6847f537c4cbefcb46", + "Expected": "0000000000000000000000000000000014e0bd4397b90a3f96240daf835d5fb05da28a64538f4bf42d9e7925a571f831c6e663910aa37dcc265ddd7938d83045000000000000000000000000000000001695d405d4f8ba385ebf4ad25fb3f34c65977217e90d6e5ed5085b3e5b0b143194f82e6c25766d28ad6c63114ca9dcdf", + "Name": "matter_g1_add_33", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af0000000000000000000000000000000019d3623a7866933e2d73214ceb2e56097a1b047db5943c3ecb846890aa02250126e90fc76a729a952cef895bd154cc7d000000000000000000000000000000000e87c376bbd695a356ef72226ac7ef6a550d99e9693d8485770a686e568ae28c038ee201d3f2ea38362046236ade91cd", + "Expected": "000000000000000000000000000000000ffeab47985bd9b3e10ce27c6636bbda336dcf540cd37eccc3faec2adff2d97dd126633bd83a7d3c8c73c3623bdf0ba2000000000000000000000000000000001992eca4b1e924b360d57ca98b543ab496a8b55bd288d23f03bcc1b22f6bc76d95b12f47c3e305812097253c73b876dd", + "Name": "matter_g1_add_34", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c300000000000000000000000000000000163aaecf83d6c77a5d7417e73f5cf9d71a6aedfd194b2f3b53c608d06a228190f4f79ac57b029d77504c72744df4ecc0000000000000000000000000000000000416e6f9ca188d16daa2c28acd6a594f8fcb990eaa26e60ca2a34dfcad7ad76c425b241acedf674d48d298d0df0f824d", + "Expected": "000000000000000000000000000000001812bcb26fa05e0ab5176e703699ab16f5ef8917a33a9626ae6ff20f2a6f4a9d5e2afe3a11f57061cbaa992e1f30477f000000000000000000000000000000000680acf0b632cb48017cb80baa93753d030aa4b49957178d8a10d1d1a27bbdc89ac6811a91868b2c181c5c0b9b6caf86", + "Name": "matter_g1_add_35", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000000aba7362eee717d03ef2d4f0fef2763822115fcc8fb9e2e8243683b6c1cde799ebc78f23812e557de2cc38e2b4a2e56700000000000000000000000000000000170833db69b3f067cf5c4c4690857e6711c9e3fcad91ca7cd045e9d2f38c7b31236960e8718f5dd4c8bfb4de76c6c9b9", + "Expected": "00000000000000000000000000000000196ffe76a4b726fa8dd720cc1cd04c040724cb18ec10915e312eaa90d124100b08f0ce3a7fc888f46914319a3d7581f4000000000000000000000000000000000e2612357059ca6dbb64efb98ef19370560c9e83e2aad7ab2d9015e2444fe4d8c796b5577584aac9f63258beb5ae863c", + "Name": "matter_g1_add_36", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da8257721808000000000000000000000000000000000a98ae36c690f2e3be8100f43678be5a1064390e210328dd23f61f5a496b87398db2798580edeabc6273fb9537fa12880000000000000000000000000000000009aedf77bb969592c6552ae0121a1c74de78ba222b6cd08623c7a34708a12763b5ff7969cf761ccd25adc1b65da0f02d", + "Expected": "00000000000000000000000000000000072334ec8349fc38b99d6dea0b4259c03cd96c1438c90ef0da6321df2495892de031a53c23838ca2b260774fa09b5461000000000000000000000000000000000e4535767c2477c4f87c087540c836eeffcd0c45960841f9c3561a8a5f8e61ab98b183b11192b8e7ea1c9c7717336243", + "Name": "matter_g1_add_37", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e00000000000000000000000000000000015c3c056ec904ce865d073f8f70ef2d4b5adb5b9238deaa5e167d32f45cad4901aa6d87efa2338c633e7853ce4c19185000000000000000000000000000000000a15f1aa6e662f21d7127351a1655821c943c4cf590e3c9e60c9ab968b4a835f87fb8d87eee6331ee4e194e5f1ea91f4", + "Expected": "000000000000000000000000000000000140fb6dcf872d0a3bff3e32a0cb4a7fb7e60ee4fb476bb120c4ce068e169d72e1c167d7fda321280d5855983d5a9af800000000000000000000000000000000108f54a4ec3ba26dd614f4d94c5c82652583906986158ad40ffea54c17703fa4b0bd7806633e1c0318d06e8dc7d41cde", + "Name": "matter_g1_add_38", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb000000000000000000000000000000000307841cb33e0f188103a83334a828fa864cea09c264d5f4343246f64ab244add4610c9ccd64c001816e5074fe84013f000000000000000000000000000000000e15bbeb6fff7f1435097828f5d64c448bbc800f31a5b7428436dcffd68abc92682f2b01744d7c60540e0cd1b57ab5d4", + "Expected": "000000000000000000000000000000000a1b50660ed9120fff1e5c4abb401e4691a09f41780ca188cea4b1c2d77002f08ce28eb1caa41ee3fe73169e3651bb7f00000000000000000000000000000000125439ac3b45c698a98063ab911364bd3c6dd2a69435d00d6edf89fc5566b33038e960a125e5e52141abb605587942fe", + "Name": "matter_g1_add_39", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000013866438b089d39de5a3ca2a624d72c241a54cbdcf5b2a67ebdd2db8373b112a814e74662bd52e37748ffbfc21782a5000000000000000000000000000000000d55454a22d5c2ef82611ef9cb6533e2f08668577764afc5bb9b7dfe32abd5d333147774fb1001dd24889775de57d305", + "Expected": "000000000000000000000000000000000037b4e8846b423335711ac12f91e2419de772216509d6b9deb9c27fd1c1ee5851b3e032bf3bcac3dd8e93f3dce8a91b00000000000000000000000000000000113a1bf4be1103e858c3be282effafd5e2384f4d1073350f7073b0a415ecf9e7a3bfb55c951c0b2c25c6bab35454ecf0", + "Name": "matter_g1_add_40", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f180320000000000000000000000000000000017440fd557df23286da15f9a96bb88cfbc79589b1c157af13baf02c65227dc0a5bdec6f2f300083ff91dae395ed8cb75000000000000000000000000000000000ad09b4290842cc599d346110fdb39ededbb1d651568579564e274465f07b8f77eeaf00fece0c10db69c2125de8ab394", + "Expected": "0000000000000000000000000000000007c158b4e21566742f7e4e39a672bd383e27864505acef4ef8c26f8b0a9db418f9c088b555b8e9eb25acf9859b1207b40000000000000000000000000000000016e06a1ace89f992d582af0de7662ef91c0a98f574306f6f6d0d8d5e80166638d2deef70105cce2e9b20faa9d6315510", + "Name": "matter_g1_add_41", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f0000000000000000000000000000000000d7ccc3a4efdfe1a92a88e453933b8216016091f1b9d575faf18a5b3abf90daf077813167a3f4acce7359472dee544bb00000000000000000000000000000000128008c075ab176100e755cbb8de5b9ff0e9a78114f862d26ed030d9c1d1dea1c21ec8ae4d82a84d3ff5ae4c1cd6f339", + "Expected": "000000000000000000000000000000000b84f9de79c748e37797c629cb78b86b4b736b199f161b30147b5dacf6eabe0b54afce40d5dacfe9a8ee8da5ef5b49de0000000000000000000000000000000010277ad094bb9a3b96379b1366dd90125b51a21ebeb4f776a81d9d9c1f37ab58c32a884a26fa32c83783ed0eef42b820", + "Name": "matter_g1_add_42", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e00000000000000000000000000000000008da4a93d5ffcdaa0adc736a59f0c187ae3bf11ecb5e9e6f6aedea976a47757739042200b4c4593c2dd5db555425531000000000000000000000000000000000a6fdb2d4160c6c35223daa6fa10d0b1073de07fe4f2eba28e65ed049ff8d8852ed0538b30759fe7a0d944009ddf9a6f", + "Expected": "000000000000000000000000000000000d740bd1effd8674250618af0358ad0b83bbc787f0264af9c2ada72fa5431be909e82155da1de0211f46fb307e9949f0000000000000000000000000000000000ddf62c91d587a14b64feef07da52c081b40fbbf9a0f2eae8b66022e0850fc94de6a467e7e4f580c7f2c806f6c6ed8cf", + "Name": "matter_g1_add_43", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d790000000000000000000000000000000003258d7931a1d72ab6344c7e96c0dbd435a7909fe68cc679c08ca9b62f7a6a04863082cbcfdbe9a736625d895e4f3bdb0000000000000000000000000000000009ee3e470e2b2cebc955ba3444b7e478f887138e36c13bd68490689122627269ea5e7ce22dd9c69792394a24187103d6", + "Expected": "000000000000000000000000000000000af674691f5d87655f0066188fac5013f31b4169a0181d3feb7ac3beae0d9a3429d4125f099ee344f644a2de8b941f9f00000000000000000000000000000000042a9603b8e4a6c37d59ede3a1398f5f80c5298da66de575a204ee28811d9f7c7c0dd40cef3769bd72a2156b9eb620c8", + "Name": "matter_g1_add_44", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e820000000000000000000000000000000001833807f1ced52399305419450355499a63411837ee61ad681559d59561db18511eb1e8ad3161e7fe30016b560d18b8f00000000000000000000000000000000198b11b31586e17964a4a4ccdee85703163d2106481833e71f26327a589bafb43578d08d87f6cb19c7a04b4ca92392bf", + "Expected": "000000000000000000000000000000001081c3359a0fadfe7850ce878182859e3dd77028772da7bcac9f6451ac6455739c22627889673db626bbea70aa3648d50000000000000000000000000000000000f4e8766f976fa49a0b05ef3f06f56d92fe6452ff05c3fac455f9c16efadf1b81a44d2921bed73511dda81d6fc7478e", + "Name": "matter_g1_add_45", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000007dc719ae9e3f1e11d3ed4747a546a7b973ccb1967adb1b3066645a8bde9632bcfa3530e768f088ddbc022b169e67cbf000000000000000000000000000000000bbf9cf884b19c84045da1cead7dcd9fdbf39d764ff1ad60d83ed1e4fd0ce0554f0fb618203952cf02a7c4ba466c66b8", + "Expected": "000000000000000000000000000000000f60d66fd1ed5eb04f9619d6458c522cc49f5ace111aff2b61903b112559972f80ac615591463abf2b944c4f99d4c03e000000000000000000000000000000000001a1abfa869be2cda6bd7e05454a8735e1b638db7e1b3715708539c2d14ade53069c7e68b36d3b08cff80837028b7d", + "Name": "matter_g1_add_46", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd0000000000000000000000000000000014b78c66c4acecdd913ba73cc4ab573c64b404a9494d29d4a2ba02393d9b8fdaba47bb7e76d32586df3a00e03ae2896700000000000000000000000000000000025c371cd8b72592a45dc521336a891202c5f96954812b1095ba2ea6bb11aad7b6941a44d68fe9b44e4e5fd06bd541d4", + "Expected": "0000000000000000000000000000000015b164c854a2277658f5d08e04887d896a082c6c20895c8809ed4b349da8492d6fa0333ace6059a1f0d37e92ae9bad30000000000000000000000000000000001510d176ddba09ab60bb452188c2705ef154f449bed26abf0255897673a625637b5761355b17676748f67844a61d4e9f", + "Name": "matter_g1_add_47", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe900000000000000000000000000000000104ee0990ba4194916f670f44e254200971b67a18ed45b25c17be49df66e4f9b934bac8c1552ecc25bdaa3af55952076000000000000000000000000000000000591094d9d89afe025ca1832d7f3e60444f83e72403a434b42216b6c4213980d29e4ef0c64ae497006de550c1faa9425", + "Expected": "0000000000000000000000000000000006db0cc24ffec8aa11aecc43e9b76a418daac51d51f3de437090c1bcaabace19f7f8b5ceb6277d6b32b7f3b239a90c4700000000000000000000000000000000069e01f60ca7468c6b9a247c79d18cf3d88bf5d1d62c76abf9237408edeba05dea744205ac5b501920f519bb847bb711", + "Name": "matter_g1_add_48", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a0000000000000000000000000000000004840d028d0c0f056aeb37b7a8505325081e9822ef26046f2da72f2155c20987dd51f4b5577c5395e24288b71d2ce5140000000000000000000000000000000015f231a233e997633c1d6492e0df358fb658ae29d0f53928c8a0578484c899a699178ca3223772210063aa08991c3fff", + "Expected": "000000000000000000000000000000000fa72bf2d7d564cc4982b9f2cdca743d2ac14f0f1be4218dbafb8b93a9277e55273487a5d2857fd3f731ac4ee469a6a1000000000000000000000000000000000fce44f886453c6ca5ebde9af41d2be92d1126e9897d72978a179dd7eebeed6242b6e9718604ab0c9369529a0426a575", + "Name": "matter_g1_add_49", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece1738220000000000000000000000000000000004877b97faa1d05d61ab65001110bf190d442cabcd6d4d1b9c1f0e513309aebd278f84a80354dfdef875769d00ec2c7500000000000000000000000000000000187066cccb5008bc2ffd0bcd1b227a5a0fe0cd4984316ba3cfd5113c4632a04c56cbda8d48993bd0dd50e9b7ce2b7ee9", + "Expected": "0000000000000000000000000000000019ecd38afacc6b281b2515270157328e18039d51574bae0f7e0ef16c3f6da89f55ddee9e3bbb450ad51fe11edfd9f18d00000000000000000000000000000000088a5e292761bbf7a914a9f723de099035e91bd3c1fe9cd50728a4ceaa4fd3953683f30aa8e70ba0eb23919092aa9e22", + "Name": "matter_g1_add_50", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000001881f5aba0603b0a256e03e5dc507598dd63682ce80a29e0fa141b2afdadf6168e98221e4ee45d378cee0416baaadc49000000000000000000000000000000000070d255101319dd3a0f8ca3a0856188428c09de15475d6b70d70a405e45ab379a5b1f2e55f84bd7fe5dd12aeedce670", + "Expected": "0000000000000000000000000000000011ccd455d5e3eba94567a17bcd777559b4ff1afa66fd6f05f99c69937404290a2f1c83cfd6c2c25886ebff4934332c0e0000000000000000000000000000000010920aa3d5974df25530610ef466adce3d51fd6a508d4b1111739c586dfd7ba9040836e075fd812fe111d92f25b67f51", + "Name": "matter_g1_add_51", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf000000000000000000000000000000000b53e5339f25bcd31afd091362874b5042c0b762ed7425341331630addbc4dccc299936e1acdf89823c36867d46c6f28000000000000000000000000000000000fc3c6b522268511dd52826dd1aee707413d925ee51aeb0e5d69c0e3eb697fabbc14783b5007e240cc0c53c299a40ada", + "Expected": "00000000000000000000000000000000060773b9b8f3babdba3db27089b7be3e6e287a635dbae19576039d34ae18a0e6413278bfa280570f6329ae05cdb693fd00000000000000000000000000000000075fb9527f99a8c8db41e67baaf1deafffd2c134badb1b3478a26b5501b31dca858fad6f0d52f412d5631ecfa72eece4", + "Name": "matter_g1_add_52", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000001693f4ebab3fed548784264196fb01cf55311399f47cdad74a9543bda5d1ca682a00ee04bb0b3954d5a0f00ceef97a750000000000000000000000000000000017f4019c23bd68e84d889857c417b17aa96c780fec3c1ed6ca75100cc70c97a8bb8272ad4c6de896d76dc2a1b09c7a61", + "Expected": "000000000000000000000000000000000a3ea8afdc83794f18f9a9427bcd60a355196925d38fdf74ab09d4a08279647b2da6f1fbe30948a785497d6c6dddc2a9000000000000000000000000000000001263c88f1ca3e574cafac21641432d45ee01e1b05eba95716565922abe28c7f0fb004c255afcbfa10cf7959bbe6b00d7", + "Name": "matter_g1_add_53", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000005d5602e05499a435effff3812744b582b0cd7c68f1c88faa3c268515c8b14f3c041b8ae322fe526b2406e7c25d84e61000000000000000000000000000000001038eaf49e74e19111e4456ebba01dc4d22c7e23a303d5dec821da832e90a1b07b1a6b8034137f1bfdcddeb58053a170", + "Expected": "0000000000000000000000000000000019258ea5023ce73343dcd201ec9be68ec1ee1cb4e5b9964309d801c2bc523343c8ebc4f8393a403c7881e5928f29db14000000000000000000000000000000001423bf52daefb432162ce2bd9ef78b256ff3b24d0a84766b87119489fd56ecf6156b2884c8a7e1220e493469723cd7f8", + "Name": "matter_g1_add_54", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000002626f28d421d9d1c28f5e1eb5a51ada9610dbdd62cd33c4078d2fdfc18dbd092e2847cf705ba5fcd8c1a60c1cc34a3b0000000000000000000000000000000001f7b8cfdb7e406c920f5fdecae45fb4be736f209480ccb455f972c6b1a1aebdd5ba116903c46ded72ce37cd8836e871", + "Expected": "00000000000000000000000000000000081d674f5b9c7c64673c39fe33f4f3d77271e826dcb4dfd2591062e47c931237e8539ef9c886c9e112eccc50da4f63fd00000000000000000000000000000000141b700695839110ed4ced5f8a3f4fd64a8086805358ab4a5abd2705592e616cd95ff01271212ca9014dcb68d8157ba0", + "Name": "matter_g1_add_55", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df91000000000000000000000000000000000259e307eacb1bc45a13811b02a7aeaaf4dc2bb405dcd88069bb6ec1c08a78905516169bd3440a36921764df0ef3a85b000000000000000000000000000000001263372b675124f6cc19ca16842ba069c5697dbf57730875fe72c864a81189d7d16fe126b5d24953a0524f96dbac5183", + "Expected": "000000000000000000000000000000001908aa3a640817e31a4213156fbd4fd39ab39eb931091670a0e06399def71a689e67286f90d38ce9f97cb85f6488d9c8000000000000000000000000000000000764e46b6b82aa2f8862d28e9d543a751a9de855645377b9633cc098c2110ec6ed4fd30f0044ea5868c93f950f6cfd24", + "Name": "matter_g1_add_56", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000a138203c916cb8425663db3bbff37f239a5745be885784b8e035a4f40c47954c48873f6d5aa06d579e213282fe789fa0000000000000000000000000000000016897b8adbc3a3a0dccd809f7311ba1f84f76e218c58af243c0aa29a1bb150ed719191d1ced802d4372e717c1c97570a", + "Expected": "0000000000000000000000000000000004ad79769fd10081ebaaed9e2131de5d8738d9ef143b6d0fa6e106bd82cfd53bbc9fab08c422aa03d03896a0fb2460d0000000000000000000000000000000000bb79356c2d477dfbcb1b0e417df7cb79affbe151c1f03fa60b1372d7d82fd53b2160afdd88be1bf0e9dc99596366055", + "Name": "matter_g1_add_57", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e29460000000000000000000000000000000019f60f2cf585bdbc36947f760a15fa16c54cf46435cc5707def410202a3f4fa61b577ab2481e058b0345982d3e3d1666000000000000000000000000000000000a70b7bbc55e1f3e11e9eb7efd79d4e396742de48d911ddff8dd0a7cf10422423d5e68021948e1448e92c2e07c194776", + "Expected": "000000000000000000000000000000000a87e7e115ccdf3c2c1a2716491d449c3f8329e73d264088f4af444d43cf05f8be0410da273ce7eeb32969830195b7e70000000000000000000000000000000010a973d6e4bd85105bf311eb0dcfdc0a5d38dba1c099206b60f2e2df4791fd58846bf19d83769506e1561212920b4895", + "Name": "matter_g1_add_58", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000109bd6e0636a7f96ffe2ce8e109171efaacfcd60189c7050259ddedd15dd257e11f2585bbd84e4a3f4d8fc5fbc0289cf0000000000000000000000000000000019b420d778da53aed81b48f2c9b9eb399e771edd5e124a41577452b409ca2503e2798cd25d791f489352fc7b7268ae23", + "Expected": "00000000000000000000000000000000162bd29f2de10002c1c446bd9583e89751fb91703ad564e7951d41673e28d214729aa9b4b9875c397989df197c912d5f0000000000000000000000000000000004d393181871c93714afab6c33c16f68ec391fbfcad606ac65cc1d070949c099e21f710e2fe0dd4e4f50f99ea2167a7e", + "Name": "matter_g1_add_59", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000012bb529b45ad7875784b62a7281d025002f15e7f86cc33555e7472df60da2cb15d37c8bf628142818c0711ee9047fb4d000000000000000000000000000000000baa801623312d95e2b51ce86373fea516007e468f265d974c2327c1779830db180bed6dbe8a64f0959aad26eaafb8d9", + "Expected": "0000000000000000000000000000000010c4b328d264893099d89ba81b0765d0642bf36b0ac043be090c7b4f7987d21a906228c3c208c4ec5123d577efb0771f0000000000000000000000000000000016d08ce3bf755da7d4bae5f4b06b37845c17a717329c547e941be93325a04e9a5095d3f6e6c6f9ec3b1a740f59d88919", + "Name": "matter_g1_add_60", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000002c9e50f37ff0db2676637be8a6275fce7948ae700df1e9e6a0861a8af942b6032cca2c3be8b8d95d4b4b36171b4b0d400000000000000000000000000000000050f1a9b2416bbda35bac9c8fdd4a91c12e7ee8e035973f79bd35e418fd88fa603761e2b36736c13f1d7a582984bd15e", + "Expected": "000000000000000000000000000000000f798f8d5c21cbce7e9cfcbb708c3800bf5c22773ec5b44590cdbb6f720ccddf05a9f5d5e6a51f704f7c295c291df29f000000000000000000000000000000001483903fde5a968dba6924dfac3933cd39f757e2f89120f4ca9d03aaaf9e18252bdb5c5d3939471666b8a42aeb31b4ed", + "Name": "matter_g1_add_61", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec000000000000000000000000000000000332cdc97c1611c043dac5fd0014cfeaee4879fee3f1ad36cddf43d76162108e2dc71f181407171da0ceec4165bcd9760000000000000000000000000000000015b96a13732a726bad5860446a8f7e3f40458e865229bd924181aa671d16b2df2171669a3faa3977f0ee27920a2c5270", + "Expected": "0000000000000000000000000000000001c762175f885a8d7cb0be11866bd370c97fb50d4277ab15b5531dacd08da0145e037d82be3a46a4ee4116305b807de6000000000000000000000000000000000bb6c4065723eaf84d432c9fde8ce05f80de7fe3baed26cf9d1662939baac9320da69c7fe956acdd085f725178fe1b97", + "Name": "matter_g1_add_62", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c50000000000000000000000000000000003ebca978ea429eedad3a2c782816929724fc7529fbf78ea5738f2ca049aab56c1773f625df2698433d55db7f5fc8ca2000000000000000000000000000000000d2477f57b21ed471a40566f99b7c2d84ce6b82eaf83a6c87a7c21f3242959c8423d4113b7fd8449277b363303bb17b0", + "Expected": "00000000000000000000000000000000071dc0f985703bd8335093779de651b524c02faca5fc967766abd3f6f59176d2046d7a14d18c0b757b8c9802e44ebcd300000000000000000000000000000000154e5cb66be8979ee276e8e0f240557e3f7dc074c497293af589256652da21d66a6e6b00ca5bfa6f89963fbd5bc6cf48", + "Name": "matter_g1_add_63", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001461afe277bf0e1754c12a8aabbe60262758941281f23496c2eeb714f8c01fd3793faf15139ae173be6c3ff5d534d2bc00000000000000000000000000000000148ad14901be55baa302fa166e5d81cc741d67a98a7052618d77294c12aea56e2d04b7e497662debc714096c433e844e", + "Expected": "0000000000000000000000000000000012c4dd169f55dfb5634bc4866f7cbd110648b5392ace6042b5f64aba3278f24085227521b7834864f00d01ec9998dd6800000000000000000000000000000000102d7a495850195424677853da01d70caeb6c0af5270bcfffbc2d4252c0f3680518cd8d2a0a6dbbbc7b52923a5b26562", + "Name": "matter_g1_add_64", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002218b4498c91e0fe66417fe835e03c2896d858a10338e92a461c9d76bcecd66df209771ae02c7dcace119596018f83c000000000000000000000000000000001990233c0bae1c21ba9b0e18e09b03aeb3680539c2b2ef8c9a95a3e94cf6e7c344730bf7a499d0f9f1b77345926fef2d", + "Expected": "0000000000000000000000000000000010c50bd0f5169ebd65ee1f9cd2341fa18dd5254b33d2f7da0c644327677fe99b5d655dd5bfdb705b50d4df9cfce33d1400000000000000000000000000000000088e47ffbbc80c69ec3c5f2abe644a483f62df3e7c17aa2ff025553d1aaf3c884a44506eff069f4c41d622df84bbafa1", + "Name": "matter_g1_add_65", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f7000000000000000000000000000000000160e0f540d64a3cedba9cf1e97b727be716bbfa97fbf980686c86e086833dc7a3028758be237de7be488e1c1c368fe100000000000000000000000000000000108250b265bd78f5e52f14ef11515d80af71e4d201389693a5c3ef202cf9d974628421d73666ead30481547582f7abaf", + "Expected": "00000000000000000000000000000000168af33c85ae6e650375ed29b91218198edd9135683f6a1428211acdcbf16bdf86f0a95575e47ee0969587a10fa9f3c90000000000000000000000000000000012d9f5d692c870b3da951b6d07797c186a8ddc89b9f08a1c0b8f0f119f10ca0b155e8df5424cf48900ad3bf09ce6872a", + "Name": "matter_g1_add_66", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d20000000000000000000000000000000002fa19b32a825608ab46b5c681c16ae23ebefd804bb06079059e3f2c7686fe1a74c9406f8581d29ff78f39221d995bfd000000000000000000000000000000000b41ea8a18c64de43301320eaf52d923a1f1d36812c92c6e8b34420eff031e05a037eed47b9fe701fd6a03eb045f2ca7", + "Expected": "000000000000000000000000000000000b99587f721a490b503a973591b2bb76152919269d80347aeba85d2912b864a3f67b868c34aee834ecc8cd82ac1373db0000000000000000000000000000000007767bb0ca3047eee40b83bf14d444e63d98e9fc6c4121bdf04ea7148bcfaf3819b70dcebd9a941134e5c649da8f8d80", + "Name": "matter_g1_add_67", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000002a540b681a6113a54249c0bbb47faf7c79e8da746260f71fbf83e60f18c17e5d6c8a7474badafee646fe74217a86ca4000000000000000000000000000000000fe2db7736129b35dc4958ffd0de7115359857fb9480b03a751c4fceb9ae1b2b05855398badffc517ae52c67f6394e2a", + "Expected": "000000000000000000000000000000000bc719a8397a035fc3587d32d7ef4b4cfd63d4a5619ab78301d59659208f86df9e247e5d12650acc51a3bca3827063a900000000000000000000000000000000150d5519380a65b1909b0d84da374484675d99b00b254d03e423e634a012b286e3fe074e9b0a7bb24ff52d327249a01b", + "Name": "matter_g1_add_68", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e787900000000000000000000000000000000019d917eb431ce0c066f80742fe7b48f5e008cffa55ee5d02a2a585cc7a105a32bbf47bdff44f8a855ade38184a8279e0000000000000000000000000000000012ee762e29d91a4fc70bc7a2fb296a1dcdd05c90368286cca352b3d5fffc76e3b838e14ea005773c461075beddf414d8", + "Expected": "0000000000000000000000000000000008197403ab10f32d873974c937ef4c27fbdb0f505c4df8ac96504705d4851cf951fb0263335e477063884527b21edf160000000000000000000000000000000005396f1affa20ca8530b519a4d5d400969f0c8c8731ecc0944e8086388e89a7ff7c16d9a2a90780972c4762b88a0f0af", + "Name": "matter_g1_add_69", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000d280fe0b8297311751de20adf5e2d9e97f0c1bfe0cd430514cfddbafd5cdcb8c61bd8af4176cc3394f51f2de64b152400000000000000000000000000000000039f511e890187f28c7a0b2bd695ae665e89b0544c325a44b9109da52cc6908d81e1a27163a353ab275d683860c2e007", + "Expected": "0000000000000000000000000000000002baea63055f72646189bdd133153dd83026f95afad5ce2cffbee3f74c8d47d5480094b2b58b0936c78aa33cd9a8f72f0000000000000000000000000000000013e600456a2d76f5a760059e0ba987b881c6bc10d6161f388d7a9d8b2031921054edfec46afbd80b1364d8e8f6a5a7a2", + "Name": "matter_g1_add_70", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000015bad24d12b5d68558e961a17dbc3e1686e1b918e6192ebe6f3f71c925177e61d0162e018ac81126099effa0cadfa185000000000000000000000000000000000de73182569184b3d79dcfa8c27f46ec7a31fe8a3fd73fe26eec37a088461192bdbcf4d4b37b33b6177d6fde015d1631", + "Expected": "000000000000000000000000000000000ced641c930387432d512861eefbf2d6131017154f99a0d3d24da880dfd2aaae91c2d9634053fab8b85fc11a7884d30600000000000000000000000000000000122071c0e87fae5031c850dccc4777c3ec9d8463bbc4ed84364d4261bc9d38f696a4320d53eea926a75ed9fcc9789a07", + "Name": "matter_g1_add_71", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b256730000000000000000000000000000000015cdf7dafedce64aba34e1f18c57b28f297629c07ee96b732029b545cf5ea6afdf926daa6a48d1250c67aa2a8b797d370000000000000000000000000000000004867352f86267dbe8e32806e4ed02f1487e036051068f8e06d02e8dea6d3773b422e065d2db27c89ea69246d0185351", + "Expected": "000000000000000000000000000000000e2c633351d627a075acd1e373bec96ba41b047f0307201f4b7c9978c1a72243d0b18113604cc421b8f66d76ec9b1360000000000000000000000000000000000844e258d602bf9aaa35ce46c4c91c80dd9337053d8ab22c1163a0571fcd1488a2ef57476e2b66dd9c26963b28284d11", + "Name": "matter_g1_add_72", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000077eb801bcde78e9dd73b58d2429a907ea0f5600a8005093d471be373bba23ea70bf828c766ccced6a46db84b440053f00000000000000000000000000000000101af9df2939089d72e42fe2dc3de3e32be8f4526a2263ebd872d0080ed4a152107bb3d2f56176bf72d5ae8bd0c30a3f", + "Expected": "0000000000000000000000000000000010205c6be10a5fc5390b0e5ae47a8a822c8e9a7a96f113d081cde477ec0de7bf0e8385e61780b2335e4297edb35bcc6d000000000000000000000000000000001796af180463ed70cf330791c8201ee3f0fe52993f64819291bda33017285fcc3a515669b3d48a411276c849fa021f6f", + "Name": "matter_g1_add_73", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a0000000000000000000000000000000019b09bb7dddd11c5d0e304dac120b920601dd3a3505e478c88850cc701c17eb02aa7bfb20e4017a62fc4fb544d4f9e8f00000000000000000000000000000000048ad536cf89576d4cce83ef065bc16c47f1a28ae27bd71d30d8f2177a9c6f8b2ed0cdf872ead71bc5a1252bccb4a7e0", + "Expected": "000000000000000000000000000000000fb047098a1996a625cd19021f81ea79895e038756878d8772aaee9b6bbb66930e474dcc04579ad58f4877b742a890900000000000000000000000000000000017da74a4caefc55794a36eda7938371f42265cc1f2d87d41883152db82873daeb59642e8e663afddd4f24536a1f52b3f", + "Name": "matter_g1_add_74", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa30000000000000000000000000000000005f84f9afa2a4a80ea1be03770cb26ac94bec65cf9cb3412a07683df41bb267c2b561b744b34779635218527484633e30000000000000000000000000000000013ce1d1764961d1b0dff236c1f64eabec2ce5a8526edf6b0bccb9ea412e5a91880db24510435cf297fcc1b774b318b65", + "Expected": "000000000000000000000000000000000f4ca788dc52b7c8c0cb3419ab62c26db9fb434321fc6830837333c2bb53b9f31138eecccc3c33461297f99a810e24ad0000000000000000000000000000000006785d4f9cdf42264c00fdc4452883b9050eb56e2f6e46c7b8fc8d937dfe4d3ad5072d969a47c4811b36d3887256d0b9", + "Name": "matter_g1_add_75", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000f0dd7a15dfc39dc2df47cf09761498b0b363157d8443356e768567f5a6d5913c2a67f12d93df2dcf50756bb686836b100000000000000000000000000000000055914dbda5b115222e738d94fbd430440c99bcc6d2c6cf7225c77756ffadf765b2d83447d395e876b5f6134563ed914", + "Expected": "000000000000000000000000000000000ac0f0f62202d09cede55ca77b7344b46fd831b41015eb357cac07f0fa49c2564c2e9d5c591630226677446a9100757c000000000000000000000000000000000ca21d0128ef933fc1a48c1b4967f56912513e63a416d86ad40c0a4590b2edf88e4e8a286338b8b176d8b341ea480277", + "Name": "matter_g1_add_76", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb211000000000000000000000000000000000a6ff5f01a97c0f3c89ac0a460861dc9040f00693bfae22d81ea9a46b6c570436f0688ed0deef5cdcc5e2142f195b5c000000000000000000000000000000000193a17880edffe5b2ebedf0dc25e479cac3b136db9b6b24009ea0a9ca526d6dd9714d10d64c999d4334baa081b9f2fbe", + "Expected": "000000000000000000000000000000000b728d4ae4b45fae9a9e242524e95e44f175356726da50f46236f690eec17fdd5edce5df1253383378dc8f9c1fee98ae00000000000000000000000000000000131d28a5eab968c45ddc86b82f220dcdeab7c009c7c61986ee4e55045c024e1bcbe76a4e35000b5699ccec5858ba427e", + "Name": "matter_g1_add_77", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a000000000000000000000000000000000b35fcf625cde78fba1b70904acb97d7eb449d968e8013855d44292e9c3b0df3cfbcace6f292ec3c7717e25490bb4c67000000000000000000000000000000000af57abd87df55034c32dbe68bd1c0b47139fc2c3a8887b7c151e57b57c9002070337c8dcb2ce2687f9f007d48dd68c1", + "Expected": "00000000000000000000000000000000178a19966b5b0fa70c138be7f5ea51d5399c7b8dcc5171cbef82ecb1451aeccbd1ed29170a27f404ebf6daa2ec99bd69000000000000000000000000000000000b1b748494806175030f6b5e2977c58982bd6ec6662d69237f0521351653c772a40035f2504ac8949fb448a901379fd6", + "Name": "matter_g1_add_78", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b00000000000000000000000000000000177a51fcc81580ccb7a8873fa93eaf860ca8fedde13cdf3eb53f11e66a1c1e934b82ee9251f711c5c479f33a22770c47000000000000000000000000000000000a0edc9a58f4bb414aa0aeec7bfa6076fb62bdbaee987192c18855adf4e813e7103b943e1dddc24754acfa90600a5750", + "Expected": "0000000000000000000000000000000019195049a2d457709e284c84c72a211224efc4d7d46d25c9a537eea94149b06506df02a2a4e0a6428263e9605eaaacb500000000000000000000000000000000061139f9a70ce7cd87ed3a701163bde247382295f557b47a3a0a880d2780f015e8ac753eb3243f9ad138f92c3a2257c5", + "Name": "matter_g1_add_79", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d000000000000000000000000000000001552982822e0b64a6204b27da0e192873bb5bd2997784ff0b6ed53801b402501a665c17f0a379fd946ab1adfae43c6af000000000000000000000000000000000938359655fe135dd2a390f83e27273feb68387ba94f2b6f7c15389f8272d64231ebe9c8271de90ff2358d935359ba85", + "Expected": "00000000000000000000000000000000168f958a40e85341d90012e134976d1a5839e807948410cc0c81a50961552c052bb784c50da4c734f6aa583777c22b28000000000000000000000000000000000d26998bac6ec11bc5fcf6fe7262c984d6500cd5b21af979048b940e20054f8d759f8a011f3e09d01d10f9cf8ab150e1", + "Name": "matter_g1_add_80", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d50000000000000000000000000000000000d94885dcc21b0b98821b6861a4d094e9eb5d5adcf7ca4275c5b759abbf9a9910f3b38073183d54a0569ecbbc1e9826400000000000000000000000000000000034a54b4bbb3f128608a866f5f5c554cf6ad7899f6650ca663a5bd5f1a3e4471e35a2440644c0e4e0a56080936b46d12", + "Expected": "000000000000000000000000000000000d4734ab1bbcf9e30cf142a7aa9e8cde1b3c88d92397b8d7d48c7a7402561feee58a810abf67776e1890489efe7f8ec20000000000000000000000000000000005be9e4af0c0c183c43601339f162345f7c013f5941167cd925057e91c4641e19091a20123a36f2e803142833c0bc1ef", + "Name": "matter_g1_add_81", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000014f16cbb17e7f63284d8a75968a4c8fc8ee7f37233ed656d696477c507c23e7c7eaf54001f44c93deb14c298aa6f94c00000000000000000000000000000000169bde83e861889c50b2138c76531a5866235d515a6fee4da7aaf8e8b903f2848a9fe7bbd55eac7f1c58ce3a88e7249d", + "Expected": "000000000000000000000000000000001400f774b2d932c6b990da6e1b3493685e8f51d429e0c53e9af1b4a2d3876781b790bca4a1bc28ce0240ea21be24a2350000000000000000000000000000000004993fcf5723b7e02095d4ba73ff3194bbe36027bc9099b57084c91c7e7d50b76331bfb06d3c678d3e401bc3f7fcc577", + "Name": "matter_g1_add_82", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000009acc4b4678b4b645fde47d1b75a5dda8caf6696ad2bf312dd5c12d7f3ab50b95152f5fe59842650c8a1a785f345c3ab000000000000000000000000000000000b672989004fe54f4d645e40cd29a21418151134fd2b90a68185040ceff141ced7f7ece1fdd9137c32589fa04b105a0e", + "Expected": "000000000000000000000000000000000fcb0ab180a69b0a230d9dba98099fdce4969f82fc7e7ad93352a7c8dd448bb0ba9c7d62f53d5dc80506bc36190d9bc700000000000000000000000000000000047b7306f4a53c21d42993c50f2365486d02dac495f2dee4f8971a4af308396fce6c90f3cfde857bf7a2c6bf5d0d8aa7", + "Name": "matter_g1_add_83", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f6000000000000000000000000000000000198e12ade128447a240e03e024183c401d605cab1ed81f0f5bb7bc4c7cc9c889a2a01f59c0e37a0767a927719e5a95d000000000000000000000000000000001946e39fee9b76ce552108b339b9b24d11e43d3275ac19d2d4bc745c409bdc3f7c473a60c4d3a4d2cc3b598ae0d66880", + "Expected": "00000000000000000000000000000000050b45f896fa40099cda8b1f20ab88644915c16f926589cd709e00149b12922347fa7122175424cd44e8875f217b9ad7000000000000000000000000000000001122b7e9b1509efe5616368b14085bdd36fb7adb85cd5a7f23e327548986f5298c045a602b6ee1265d53a4432a4a3c0e", + "Name": "matter_g1_add_84", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac47388620000000000000000000000000000000009c48aa2681b3005b24075bb3a122ac100cbaca872f761f4398edaba9dd9da6d04d4a4925028297dfe5f77c2b0b5c821000000000000000000000000000000000ea95c646fb68aa458e69c267a6ca640a6a24d40bdca0161246e4521d13c46facfc1ac86dfc0a804cfa6665cebeec822", + "Expected": "0000000000000000000000000000000005325a499aec678ada9eb673d366fe0475e885d5188e2fb687a96949e8f782852fba962197976b868ec083c512bfb66b000000000000000000000000000000000c4d6fcacc8d82401882bee355b37930d83e3cea2e4a7bc133e65a3e0af919b25fc3f30c333873da9406845ce42dbb87", + "Name": "matter_g1_add_85", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae80000000000000000000000000000000008e8799a6cc0339e94e861692c81eee53e8a7b326523d5344b416bfbce04290585ef56018834cfd93d234bfa2943369f000000000000000000000000000000000fa1b01aab0878adad693ec769fb68640931c355b3802c51d4a3772300be5b16ceecdc8328a229b3b9f3639170db96f8", + "Expected": "000000000000000000000000000000000685ec14da61c48bcb697966aca9e27601db43f0fb1f32e026fb33738eecfbb7012aa1ca3acf36a21fa846730245add70000000000000000000000000000000003fc52a1c3342b12271bbc178545bb20e96e8f1fde673e51f3d27ab5cb42e60aca49c6077e0f687be59b2d25cda9718e", + "Name": "matter_g1_add_86", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000bb3a76287fb98fe668cb0a5de603c768340ee6b7f9f686a22da3a86926d8734d2c565c41f94f08fa3ef0e665f4ccb520000000000000000000000000000000016c02dbfb307c96d5b9c144672fe62f3e9cd78991844f246945ee484cbdef2a4c1b001a017cafb3acc57b35f7c08dc44", + "Expected": "00000000000000000000000000000000021796fd6ef624eed7049b8a5c50415cc86104b2367f2966eb3a9f5b7c4833b9470ef558457426f87756d526d94d8dfe000000000000000000000000000000000f492dca3f0a89102b503d7a7d5b197946348e195954d23b8ab9ab7704b3bccecaa2123b8386662f95cd4cfdbbb7a64d", + "Name": "matter_g1_add_87", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f00000000000000000000000000000000127420ff97df415e336cf3e24c39c161fad630c45c7ccef80f1831c4f5ed54da12f2c49a161e72bc70285fa0498e46d00000000000000000000000000000000013e605c21014f72364f8bff392ce64a10078ea537237fa282d5dd252ba1677b84b8c15d7925e54a4ab36f1feb13d3064", + "Expected": "000000000000000000000000000000000ae916770455b0a63717e81802f5a7fcfbcc3e260b7adeca02a61a520c338d495eea29c4f070fd6efc1b8d23eb285e4c00000000000000000000000000000000134784e092744df573ba78f7d6f3cf1ed19491a0fc7ddfa02d3ca043bcf102fd40c33ac44b03a947308e3cc7af41c2df", + "Name": "matter_g1_add_88", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab40000000000000000000000000000000016f41e8b098839944adc12481e5f965657a4faedd4f4cdea51a9597a6a0356989e791a686d3d2ee6232ab93683259c6b000000000000000000000000000000000d27b4a56b2cc2216e61eb41061f9a586a704652704906f7fe0eab869ba00d34205ea66f7a02d337d08b916598494e52", + "Expected": "0000000000000000000000000000000012842c9d7f4309f6e40124a071d317f5597de419db0d5a8e5324a517f7b61dfdeea2fb4503ad7cdd8deb8aaa5c412554000000000000000000000000000000000ace4d9f98ee6e8a4416ef14d64f26dc49e102e69eced46ef829a352e58e8c1a7e1f083e3f4fc07f24ccd1685dedf215", + "Name": "matter_g1_add_89", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000019e7c8d182e3b674dfa21539613f7de5d4872d4f4732307a5c6d95ada7e81a01bc25bda34e0b46634e0b0b32cd47e8ec0000000000000000000000000000000008149237de73ab46d5c20dfd85b07f593c0caf2e2e364335450e3ebb478a9f6b9ac0af89174dffd92eda2783a5271f01", + "Expected": "000000000000000000000000000000000875289fdaead079a283aafe4de7035c88662642b6bba389b17583f8e3b5801dada6e46bd897af961997665e6ed4a55700000000000000000000000000000000050a6b9c1db35865df0a042d27a042ff4b8d3bec2fba6a3a28a71c5a574620dc05cda0e70932ce9b8966e4592220c147", + "Name": "matter_g1_add_90", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a6000000000000000000000000000000000c0f33f2d76366af661d6fa58a8b5aab207d35ce03899e495f7ddccedf201d9816f270468b207413a2ca70380c798fc60000000000000000000000000000000002a7dc7e2b163e65cadf93b5d682982288c8f36d08b1db8e0b1cb40cd3c7231f3f1672da42b4679f35db2076a8de5b42", + "Expected": "0000000000000000000000000000000019ea92820dcd442358db359146797aa82beff6154946b1ea14dccae05e8252b776b817dc044a20764e3514cd22799c0b000000000000000000000000000000000ed929fef2cb11e8b6b9b5d52bfde82080eda747f0c82f33b9cb87019476f0c128e6b918a4486172dee2884ba538ae5d", + "Name": "matter_g1_add_91", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000118fb45274a6b0ca9fe2654821e3b30caa46444f7c64b1921cf16dfd56a43916947d4fb6968d718a59a30ed38d65ce3000000000000000000000000000000000110e8e73e640bbea6927cd770baaf887c8e0e0c58260bca489c39b6dd7a24ab8c0c0a2495133d8ff8c7afb9790b37faa", + "Expected": "0000000000000000000000000000000009452bd0a167683e30c673ffd4e750c66a81edf309a8d2d6dd915c358b30b0ffc001c4165b1b17bf157a0f966bfd91d00000000000000000000000000000000015df0b1ee359dd3e35a7b2c33edbb8e92b18804ae3359a369c6a529f5561298e6be9a3498c9477f33353124af7e91968", + "Name": "matter_g1_add_92", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000005dcb54cdf9635db275540c16307fc9f07b4ca5cd91e3977e4b95b58e8103e40ed9fa74752b2a43d95b6acb6f5fcbf440000000000000000000000000000000007ef8457752a47864ef2698176a53990e4822421ecf83b2716251e3ce69151ab2767d4a6611a0a6e0e40a57164ffb94e", + "Expected": "0000000000000000000000000000000011f1ac702a06699dd64b63ebdd8b5381578f63b603c63c3a47413fe764af239ab7024712320f3ea3daefa6bd3cd3dfe9000000000000000000000000000000000918bb83a22b4fc66247e007c17155c4c2ec6326131c10fe04a5f9b82ddeca3d21c7c397a70a3949fda4d766540c85ff", + "Name": "matter_g1_add_93", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c35850000000000000000000000000000000006d3335e092616363e94436bb68be89667c706564ba687f4a3494fcf7da62fd9ad8ae68cb76524926c261983711a14ad000000000000000000000000000000000f085a3d013592c402a380e2e8d9019864a775e7b8e8b94603c8cc1eb1def1e91075fd5675f76534397e2a7d76c2331e", + "Expected": "000000000000000000000000000000000344951ccb5e60d1838f7793fcf8b765f5f252b69e1cfdb4bd3c20692c8ffa01afbda6950974a65f6ac74afb9da5942e0000000000000000000000000000000014f5f0e6b99a04d1c5c2adf96c53dd41f8c01aab8db4f0e6d7fc5eab27f6c03c429632db4e1c21467c09d8a54066a4d3", + "Name": "matter_g1_add_94", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b0000000000000000000000000000000019e2ed6e9757e2339d013078fac91c966045f7a1416a56135d75e603c2021a8bebf4acbf6c0d5ba911f66510e9a7ad1a0000000000000000000000000000000008b8585444ffb3bd4fb6ee23e8128142aa72fd574a506151a0eea8979cbd694e03897caba63771b0490d46063bc5bb57", + "Expected": "000000000000000000000000000000000a449fb0da911c544887b24860bc5fcaaf054041cc80f16bbb44c796520bee454d0d06f84fd5aa179a44fd4fac9f144a000000000000000000000000000000000fca81401349089caaef9156a86c64271c77235c9efd136dcfad9894450b076cb3dd1a05bfa1e62ef904435eee5d2250", + "Name": "matter_g1_add_95", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b767f399e4ebea34fd6b6b7f32a77f4a36841a12fc79e68910a963175d28cb634eeb8dc6e0533c662223c36b728cce2000000000000000000000000000000000cb3827fd6ac2c84f24f64789adac53439b4eba89409e12fbca0917faa6b7109aa831d16ca03191a124738228095ed65000000000000000000000000000000000f4a256b4288386545957a3ba28278c0ce69a8a412febfed1f952ca13e673822bacb6b7751ea75893b680ea363aab66400000000000000000000000000000000152379d006e74798199f83b0c6c22a98440ef653d7f0a8c5e3026bcdabec8be59a3cc291ba05860bd0639c5c5f5bee26", + "Expected": "000000000000000000000000000000000c427721953e139d4f12ad2a3f8f91a4caa49875a87001b619c8a6e909a7da8ddd9dd026bf56d5f85d49fd17527106a800000000000000000000000000000000018add2816914ef51a289e707ba0224fcf0b7bcfa4001487e90dbdce53f1b596e1f5872de32fcee6f63bce4484ccbef7", + "Name": "matter_g1_add_96", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000150b75e9e9c03ada40b607f3d648bd6c40269aba3a1a992986dc005c9fde80bb1605266add0819641a0ca702d67bceed00000000000000000000000000000000083b43df032654f2dce90c8049ae4872a39f9cd860f08512930f43898e0f1e5625a5620818788797f3ca68134bc27d220000000000000000000000000000000012dae9aee13ed6ad52fe664bf7d2d0a1f134f0951d0d7ce5184e223bde164f6860967f9aaaa44fa6654d77d026c52d2a000000000000000000000000000000000f71889d64ec2f7da7319994883eb8bd1c753e6cdd3495036b630c35f07118a1bc10568c411ecbdf468a9cdaa9b4811b", + "Expected": "000000000000000000000000000000000275b8efb3a3e43e2a24d0cda238154520f0a2b265f168bfc502b9cd4a07b930756961ae7e4fe3f01a5473d36ce3356200000000000000000000000000000000113403d5a968f01ba127dd8ef6c8d7b783a10d039a6b69c617032eba7122e9297f3ce2360c829ae64fdc9794695bf173", + "Name": "matter_g1_add_97", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cba419694214e95a3605a9b748854d16c8e6e1ee151c907487d8189acfac1361b790a5e78f43593152027295adf8df400000000000000000000000000000000110813ff6e0ddf3427e2a514d3f0bfbadcaf9dbf039e0f93fb9643d1e62bc2469fe84cd9ff0d585bdd1037255bbe54850000000000000000000000000000000004e9dd69012ab596b5d3f1f8e4593b448685fcec4ab3394008178b137b762ddf9150cbb8dbb74c8af45bd8baab9a6c4f000000000000000000000000000000001132b66a2127885774062732127951f051c9c3c9b5aba02406e3f3cd4ecfe2dbf6614ebaca3bfe9efbe4f6e5b15ba0f5", + "Expected": "000000000000000000000000000000000594c808954bb930bd038806500c9e3fd6460a83554e945baeeec2354a3805f046c76aea62c249080f16ae8e70f8fa6b00000000000000000000000000000000046924a32fb3f2df9a52615e45eeea2fa3ac0e2ccd38458194ada6b4d993ecdc0f441e41d0ea37599254a06aef68b9ae", + "Name": "matter_g1_add_98", + "Gas": 600, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000106df8eba767e90cce0eabdaacc24d8e226c6865012ef8cb1460de5a319d443fdc6b4f4e58fb668943e0528b1809da10000000000000000000000000000000019789f464c95c179af18704c0b67b881991880f75ee7b03b9feafa3eafcd0f7d30a17fdd9cf439ff7fe683adca2083b50000000000000000000000000000000017a81b957a12adf474a2913e8636f169ea9cd10be62c16b88f95f5caf661f158a032a9f7d249fdf2765caa1564bed0570000000000000000000000000000000017fbf2abc62dc2678b65d509e19c9c9c5d961c72565649a078da8dff98be6236ef314e9ff8022f639ff565353345c230", + "Expected": "00000000000000000000000000000000002c8bc5f39b2c9fea01372429e92a9c945fad152da67174f4e478fdead734d50f6e2da867c235f1f2f11bdfee67d2a7000000000000000000000000000000000c1dd27aad9f5d48c4824da3071daedf0c7a0e2a0b0ed39c50c9d25e61334a9c96765e049542ccaa00e0eccb316eec08", + "Name": "matter_g1_add_99", + "Gas": 600, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG1Mul.json b/core/vm/testdata/precompiles/blsG1Mul.json new file mode 100644 index 00000000..0e166a29 --- /dev/null +++ b/core/vm/testdata/precompiles/blsG1Mul.json @@ -0,0 +1,730 @@ +[ + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1mul_(0*g1=inf)", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1mul_(x*inf=inf)", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1mul_(1*g1=g1)", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000011", + "Expected": "000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436", + "Name": "bls_g1mul_(17*g1)", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992feeb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e", + "Expected": "000000000000000000000000000000000f1f230329be03ac700ba718bc43c8ee59a4b2d1e20c7de95b22df14e7867eae4658ed2f2dfed4f775d4dcedb4235cf00000000000000000000000000000000012924104fdb82fb074cfc868bdd22012694b5bae2c0141851a5d6a97d8bc6f22ecb2f6ddec18cba6483f2e73faa5b942", + "Name": "matter_g1_mul_0", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed24d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d", + "Expected": "00000000000000000000000000000000195592b927f3f1783a0c7b5117702cb09fa4f95bb2d35aa2a70fe89ba84aa4f385bdb2bfd4e1aaffbb0bfa002ac0e51b000000000000000000000000000000000607f070f4ae567633d019a63d0411a07d767bd7b6fe258c3ba1e720279e94c31f23166b806eabdb830bb632b003ca8b", + "Name": "matter_g1_mul_1", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be1", + "Expected": "0000000000000000000000000000000014f9bc24d65e3a2d046dbae935781596fb277359ba785808fd9ff7fd135ba8c1ddc27d97a16cc844427afbf4f8fc75a60000000000000000000000000000000017e3a485f84e2f2bdcf3255fe939945abe60dca5e0ae55eae9675dcc8d73e06d00b440a27ab4dc21c37f0bd492d70cf4", + "Name": "matter_g1_mul_2", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e44c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a", + "Expected": "000000000000000000000000000000000827517654873d535010e589eaf22f646cf7626144ca04738286de1f1d345342d5ae0eab9cd37ced9a3db90e569301720000000000000000000000000000000002a474c2443d71b0231d2b2b874a6aeac0452dd75da88e6f27949edafc7d094cb1577a79f4e643db42edcaecc17d66da", + "Name": "matter_g1_mul_3", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d38964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b89", + "Expected": "000000000000000000000000000000000d7e5794c88c549970383454d98f9b7cebb7fdf8545256f1a5e42a61aa1d61193f02075dc6314b650da14f3776da6ead0000000000000000000000000000000002054faff236d38d2307aa6cbbc696d50f5b3ffead1be2df97a05ebbcbc9e02eaf153f311a1e141eb95d411c0ec6e981", + "Name": "matter_g1_mul_4", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f90787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c944", + "Expected": "000000000000000000000000000000000ff16ff83b45eae09d858f8fe443c3f0e0b7418a87ac27bb00f7eea343d20a4a7f5c0fcc56da9b792fe12bd38d0d43c600000000000000000000000000000000042a815a4a5dca00bd1791889491c882a21f0fe0a53809d83740407455cf9c980c5547961f9ebe61871a4896dace7fbd", + "Name": "matter_g1_mul_5", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1baaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e1", + "Expected": "0000000000000000000000000000000009e425f5bdc7df5c2a72303918e5a3c7d2fdeeb071179c533f83cdcf38dbbdb1ec5f4ebc85f3ed80757641ee3f8a8637000000000000000000000000000000000819a3e81e9ac2baacdc778225129e16344107517157ab2a7bc5e3480938585c55fd2dd7185f52251f5ab191f162cf5d", + "Name": "matter_g1_mul_6", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442adac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c", + "Expected": "0000000000000000000000000000000015e6bea7ecf15d91bde67231f794397502c087960fab36d905137ce2608172b5a5def065cf7ee567ca7fb08a22adecf80000000000000000000000000000000001eed472d6138fbc56e10edb62563c086fdeb9acf6de957f2367db7f1c80d2c23197c09039ed55e65cb56de9fb9be64d", + "Name": "matter_g1_mul_7", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795bb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd108", + "Expected": "000000000000000000000000000000000220a71ad70fcf7e47df60381fbd1aba33c03a3f8537ba2029ad8e99b63c8677e0183f0b5bb2a5e1b23bc56693adb45c0000000000000000000000000000000017f26ac6ffc79ded7c08e08673336402f47ab48ef9ee2e46e3265e5cbb790cfc86f41bd1b578c5891eb052d11197c850", + "Name": "matter_g1_mul_8", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a190fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f8187672", + "Expected": "0000000000000000000000000000000006b27724c4898b4f71be9727b773709a7905997d06a41ee618b7dcf864d7457bb3241046f0139c1d678b6ba6226f090f000000000000000000000000000000000b20cabf58f9c29897e20e91a9b482f5f867bef45ce0941cb8850aaa2022182298a1a24655a4b905f436520cc42a30cd", + "Name": "matter_g1_mul_9", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac943b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea", + "Expected": "0000000000000000000000000000000004745f9877b3a0851df5bb770a54c69d5355cdadddc9d961e2bfdb3d0531d3d0f780f462335289be29ad4c62cb1250a00000000000000000000000000000000011034a094f59212c29e3f91c48df670e7a4021e4586645d250ee74a90f4b7b51510a5048dba3b555511c327ed211f81f", + "Name": "matter_g1_mul_10", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e3b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c76", + "Expected": "000000000000000000000000000000000841c1538c1a3b54418c1c5557a5815c9ed74f6e1c8ed70e1ad424220dc522c530e2e48affe6cb3190abb25af84b91a300000000000000000000000000000000167490a2aa6c8796736cbd364a4d18007ecfee403bde5dc13c611a214610e85af314ddddbf05ea129e027e0ae8d89b36", + "Name": "matter_g1_mul_11", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276bdd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c", + "Expected": "000000000000000000000000000000000ea1f952d65dbb9a40209aa89e367d9d75e1b4c3a70a609efda5fbe7f5c5483163671da425545d3f1afb817c6d8c59a0000000000000000000000000000000000cd537dc11cc63dd15c8ff74d15961390eaee59b2d5697b18c1ea6d534d71551f5e195e8a0793140d821dde97dc77623", + "Name": "matter_g1_mul_12", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a57876817010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a", + "Expected": "0000000000000000000000000000000004c92b7cf9199f47008dd561e624c822a067c57fdea9d016f79e6c7956dda9df0e36b4e78715f3da1319af9f4f1fb160000000000000000000000000000000000d2851d68617567ad5308f69dc5dbbf37603c2ba48cb3759b70fc4301fdce3bdc9fca076e2ae09562396c1b8558ccdcc", + "Name": "matter_g1_mul_13", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f76894c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a659054", + "Expected": "0000000000000000000000000000000006ed98add25d64f7488ed270e0899ee3633c84b73de26557c552017e7cda4cba1228c15e87efb5a740284dddb8cc80de000000000000000000000000000000000b363e14b0285fbd24eaacfe80b992d8df1abfe83991cc55b0484076385374bc87d9c7860177f06143c600503ac54577", + "Name": "matter_g1_mul_14", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931db3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", + "Expected": "00000000000000000000000000000000164671460621354cd352d93ca7de51828b3e6db0a37d2894a0ac475a5facdbc3ca5909d3bd7553271dadaa68b7474e2c00000000000000000000000000000000188827c6e2f4e9796c71703ba53ba2ded71bd6e8280e047fb6ea440b8dcafa7c4252d26bee1780ac67790e0d603c8ca7", + "Name": "matter_g1_mul_15", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d507f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf", + "Expected": "00000000000000000000000000000000023b2129ac67abc79966102ba223b982d40ca83e9b1ce33dff681c751b3f0c692f8bf19fa0394eae190767899829d1d10000000000000000000000000000000015449c6b5ee2c9f8b28e9732c9ebf6ffee5048263f7b5050a5ac9a76b034931a5c034f91d24b461636f5b116e37a26a5", + "Name": "matter_g1_mul_16", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da", + "Expected": "0000000000000000000000000000000004edac7b03b5861d178bb4aa34e795c776fd95e7c0980f19d111ef208ca4854f73a3ddc219bb6bca173dec67b0e863a00000000000000000000000000000000004dbff672368f86e048c3e33cbe90aba570484b4ca2221f7f6adaa1738c369f4c02c0a10118e84ea8e53cfbaa10fa48b", + "Name": "matter_g1_mul_17", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb6e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed833", + "Expected": "00000000000000000000000000000000169d637c52c31e4c62c9563a508869f7bb5adc7defedb5f4ba9f3eabe517fa8c0be2e44d656e50903dcab67a6a44984d00000000000000000000000000000000192b39d5cddac36940d896a738e25c25217768e1d0ca712968718b8fd9ad492bae63063b3cb168368c3df196306b6a1e", + "Name": "matter_g1_mul_18", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154bd411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f", + "Expected": "000000000000000000000000000000001608c3bfb131eae485545b7d19b8f42de18dcea6a0db3279eac2b7c008fbead54046bf13dd63835abe9c63110e12526c000000000000000000000000000000000abb41b2f17cfcc2292c5bf559b38af3b25db40121c6a5627997f65765eee1743c204f1161abe3f71ac1fe4de6aec1d7", + "Name": "matter_g1_mul_19", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af6bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc", + "Expected": "0000000000000000000000000000000016e3125ae97a2b1184e2c6dfe5d9459ac567c686e65674f3b0513df6de5e80d1efbff3c254e509eec3f951b0835b5829000000000000000000000000000000001889481258d3e898ed4e4a43e74c0eda5ba26c0b7525973ca86b896969240ac5928ba58bc86ec17a47f2469d023682dc", + "Name": "matter_g1_mul_20", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719292a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c52", + "Expected": "0000000000000000000000000000000017d8c0aa81ca6a1e4de8d0b8b3a13b1d6350f79ee8439da97a5d564d435f4d40bde99138b67284beffbb176daee92352000000000000000000000000000000000a04e0bee6b9681db56604a6dd5e41c072e84f8ee9cb4054410eb610472b96c09802a1d70e325c40c7ab7e248eb2e3e4", + "Name": "matter_g1_mul_21", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b1", + "Expected": "00000000000000000000000000000000089ae9fc5cdba1a24ca87fe4f1207d1a36c494d842eed330069f988d3bc8554af1deee3a5c59b5e74729097acc1185fb00000000000000000000000000000000002fd95001da3011b48067d351ec8667c2b2390b23fa0948896725292311dbae71b51d6d5d57e173970bc992d11fdd11", + "Name": "matter_g1_mul_22", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff327064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e9", + "Expected": "000000000000000000000000000000000548e7564e09c2bad9859dd63dd1045878c9b257015558b18cf5911d1763325e411c1fb8af52e8766fa7adae83eea12700000000000000000000000000000000111235351d136905fd19fa726eb6626085875c33c98067a01fde9688a5b2c289cb8e3f5d6a85d0829200a355c82f423e", + "Name": "matter_g1_mul_23", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f2686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b", + "Expected": "00000000000000000000000000000000165504769c7ab0d28b39f38f3bd09cd47c63b74c57d39935d1c03e262f9da0e8b0b9264b0d8e2908423fe5c74288c208000000000000000000000000000000001680df1d577bbbb66ffa10258bca54b74cd90a7b3f3d50472e70e18ef54b7a4412e9eb93e39b9b312e3e8e00a52e4067", + "Name": "matter_g1_mul_24", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c23176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a6", + "Expected": "00000000000000000000000000000000087a52e8eadd5461e202a640024fa17e201a9f0a2984be3fecfdeef86abed72d059e8879d0be8789f2a6db0d2cf55d3400000000000000000000000000000000196fe307db05207661a5a5f8f7fb24d8fea18ef91941ea7febbc18819f49f73aef9dd1bdf4fd605e031dc04f16fa92e3", + "Name": "matter_g1_mul_25", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd1d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36", + "Expected": "000000000000000000000000000000000301caf675cd5359bcc274b6141bb6ac53ab6a86a38ad4f8c3233cc9c1a77723eb0de4a2014e556185947dc1ef6624e3000000000000000000000000000000000136d286e623637f12c8b86cd9fad2bed8479ace5189e064a4e12e6e641447dfb0399757026126ad2d169c05011f5031", + "Name": "matter_g1_mul_26", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc9915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc", + "Expected": "0000000000000000000000000000000004ce73cde58c9af5d1f76e100849b0ba3d3cc6491e76b39cf4d7b681fed0686396440f6a721f73b31fb14b4c7624c176000000000000000000000000000000000e26b15c1051d7b049e82476a30545cfa4bf0a2075681d7028797c528712c7fba7a59145c9dd9ca9f5e9b1ac8a68b126", + "Name": "matter_g1_mul_27", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da05061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b208792", + "Expected": "00000000000000000000000000000000028a89c904f63eb8e68096bd2001458a4b9b32556c93fab5e52ab26ed73d62f0489d6bf1906a62c8148d50d30222a65f0000000000000000000000000000000007e54f21e2ac6d5287289ed9e2a15d457b5dac22ef36c19cb28a6cf9a0d11c981bf6549ddaf7ddc0a59b3d3a4698d975", + "Name": "matter_g1_mul_28", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e053f396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c", + "Expected": "0000000000000000000000000000000008c39ee7c8d86a56ad1a9dbe005b4f0d44849d6fea6bbeb0732de725ad561befd49d465a134bd1a63a39eadbb6e0bce1000000000000000000000000000000000d5c892c92817fa24afb0a0fb319ad21e309edfb6300397a215e34eb3aadf91cb41b4ab1c5273bfea6eaf33982c75eba", + "Name": "matter_g1_mul_29", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265ef0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa", + "Expected": "000000000000000000000000000000000ba1650840e24c0f99ddd10a6c3341661e5c96b2e95cb6bda3340e7a0167c906e2f0ccbac6f0be2d7dbb3f9370a5ec960000000000000000000000000000000011638a3d9a81c0fe2ebb547808db758c7cfa8648b4835fb8c4931fd622da3a001fbce9a21d61f98f35b1e907913ffd25", + "Name": "matter_g1_mul_30", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc8915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", + "Expected": "0000000000000000000000000000000000eccc25cfd8c5a58b330a74b92af0c2b932772eacfe898ff3d391fad5dfba52a3940e8edfc9bef5c4de670207c8585100000000000000000000000000000000095ae48a94c92c332915b0c07511bb0d54c316ff3a0dd2509a18a21320b506bbefa76a459260efdf4c045404f02e114d", + "Name": "matter_g1_mul_31", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff17d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd", + "Expected": "0000000000000000000000000000000017a7f3b439a98885994a6832b6394b0ec9968f665b5810da58e3ece3d8e8694c482a15d3129732b43d4b7008660f19c000000000000000000000000000000000195299086d3b9448b26fe830522d520d132ed59744e677e6eb114ba7d7045019a0d0386cf817701ca3afad2a0487a689", + "Name": "matter_g1_mul_32", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3fc00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc45", + "Expected": "00000000000000000000000000000000063c123a3cdb92469e7e57a18eaf3e7cab1d85d64cbcb52499d2e611e6ba71c717b0ebaf4cc9208b18c925a5ec167b78000000000000000000000000000000000fa5e78ae10ed8a4dee9440bfc7637d903404749681f85bcb62444d921c4fd809a646ffe3bb7c70dc906d07c62381415", + "Name": "matter_g1_mul_33", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9aff661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b", + "Expected": "00000000000000000000000000000000192b1497c71eb894a7509bbdaf308428e4d5899edb15f9e6e45a88340f55e1b76ee0901a830b66114deccda63a913a6b0000000000000000000000000000000017d58bd474a61ca0ceb23ec392dc08abe5697b8394fd60440cf787f15cddab36aa99c2ec2341bcc06dc1771b5f0fa139", + "Name": "matter_g1_mul_34", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c3346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca", + "Expected": "0000000000000000000000000000000015f72ad769cbaa2bbce0aecef9559b825ba4ec17ec5be2d9f0dbc7184383eb3e201de5163e71f1e71655acd5ee1fb30000000000000000000000000000000000194d27d9045b9760e66b578af24b282d9aeb28eb51206d2e18dc04bcb6df90553a846736afd92b23aa004f8de90bbf9f", + "Name": "matter_g1_mul_35", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db39a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc", + "Expected": "00000000000000000000000000000000146f12001844bb0ec185e773175634f2e56bfa7190caa851ad16443b629b375ce3967b0c936d30dac2f126343722ce5e00000000000000000000000000000000080e8e90ed0d259ad803269711e511577769f7886b425f9b7857dc90ab36438cbd7435f6eecf2328f5fb6eb56f370163", + "Name": "matter_g1_mul_36", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218082c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447", + "Expected": "000000000000000000000000000000001344d2c2bc5ef45dc69597e948ed6021d84f7bf2c36119869a3f84288f3bdd6fc3a0de2b9e2564a930c2207c1ee36a0e000000000000000000000000000000000dc4d15ae09642ffa17d77510fb1ad4bf9e06084e9d352f4e234ea35f33458df4f23a209e29da42c41fb9a3cec3e8242", + "Name": "matter_g1_mul_37", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d4828", + "Expected": "00000000000000000000000000000000084f2ed8573d5d04e41909d5c8ed3feb88f572726fc86d17d466276342f01503f7c8552498f8a7e96c875c4928b808f2000000000000000000000000000000000b618ca81b6ee891690099459634e011b5f59fb5c96488b0205139a65c77f15af135b3528a5ca3b794e7b2991d2434d6", + "Name": "matter_g1_mul_38", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcbd4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a", + "Expected": "0000000000000000000000000000000014733ee8425f42a30010366e4585cbbbdde6ed602a639bd299e63c113db3d797fa01075e24a042a060a043c9e1fa79f40000000000000000000000000000000013b44e1932681d238c52e959e1e3daa7a2e1ac67252ebea0cae90e8249f85b61812b9e09203d38d96f4916837b3693c8", + "Name": "matter_g1_mul_39", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6341776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb", + "Expected": "000000000000000000000000000000000ba15476a1346fbe9be2720721b592ce7c111b95f0b8738495e6c28487e12fcad60006314dfe68789e60f4df2db14eec000000000000000000000000000000000b44b9a9f695c94ad206717daa3128b672924d0db83ae0d47b62b3c79428f6fe151a65a39ae411e18b128d6796b67bbc", + "Name": "matter_g1_mul_40", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c425", + "Expected": "00000000000000000000000000000000070dfc697f7068180a7a792604d7b8453dbd393c993be9829a263ad5864c3575d3fb235692ab12a4dfa4221bc6e0c6d600000000000000000000000000000000123a9d9b83e2ca7c95de9602116b1e14d48175073e1fe766458e3fd4b6676f120adfcc5c497febe2f7ff68b1e3508e3c", + "Name": "matter_g1_mul_41", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f0e7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96", + "Expected": "000000000000000000000000000000000dcad6e29cda2332dff09377460c7a2b9d908ee53ab13f648cd892bf68a44ffcc8cd5d501f8b068f506b506d01d3f4430000000000000000000000000000000003aa625a60932474ca3f914a3e0aa8384533723f824b12c686a64863a734d96ba13670c8b355b52b0c01b49fbffb6149", + "Name": "matter_g1_mul_42", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5ec26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc", + "Expected": "00000000000000000000000000000000023909bac6048bff0373d27a06dbbb8aba8ddbada93f4fea65c983598307f3c3a8cbe163462484ebb88165c6b6da41590000000000000000000000000000000002162d8a498670158c23daebb724168b5379d9124b064de871674a3ecd15e6b546366287563928a1e279fb1eb2ea0ba4", + "Name": "matter_g1_mul_43", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79bba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca", + "Expected": "000000000000000000000000000000000f79050036c4bb6c6b8e91abb300dc49a75b32faaaeb258661c905b4d936f4096d59de89b911de294603a0e3443fada5000000000000000000000000000000000985105497cd87d5ae2698479da55f6be9bc2cf5a2093b651d7305b67e36343debaf19c266ccb55c23f3de55bdae23a6", + "Name": "matter_g1_mul_44", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e820705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a", + "Expected": "0000000000000000000000000000000017901e77745a98c09d6740597c40f27df841cca6dd95653a1da6d8eb1c57d5ebffa6a7b894369b6b419c61462697080b0000000000000000000000000000000001732540a1bfa4a1a851106209ce4807d7c0a33816d3742ad5e2729229f3403940e03b93121b79bb94c24f7e60539ece", + "Name": "matter_g1_mul_45", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b81158f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa4", + "Expected": "000000000000000000000000000000000f990d646495fff77d090f4a69b8af0e1762982b53ef8ae9bb955ad8b894942b85c7726587c9fd956ad58eb9e3ca25630000000000000000000000000000000007b7315e1f93cfba8076cf539aae01fd3bbe1cf92daa168a6fd6a2e7c969d35c51fe7eba04f1e0dd3e2020635f2c4f09", + "Name": "matter_g1_mul_46", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", + "Expected": "000000000000000000000000000000000de9d7e58919ba6386f32af53ccf36cb0b834855ac8dcc19af3c3c9522c3db2985e51ba36067b61181cb0fe8b47d853a0000000000000000000000000000000010ff0800ed1b4067f8c920462f7abd7361dac2371716f7b8648d64a71cc7d53265db6d80b26b9efddd572a2273ab1b17", + "Name": "matter_g1_mul_47", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe9a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac7", + "Expected": "0000000000000000000000000000000011a11cc098144fe9bd42ec8845be76b6cae4b3001a79f4bbbf9f20e8ac8bca5b37ef8006c958318c3894aac7d6bf77e8000000000000000000000000000000000d5c1e6b78c40a356a35bfabfd66a81924d2eae6d428b5caacf8f3992ab980640e857e756e649ca83f5aa4bda7cd00b7", + "Name": "matter_g1_mul_48", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193ab473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602", + "Expected": "0000000000000000000000000000000002e72f4568780fb41858edc3f5796f7936a30ee9ddc7b5034d9341614d301c7906238bfde3bcb77f063fe652a43b88270000000000000000000000000000000006f971f4a8ac554df7ae7ecdfab724410f1948af994d760c5f5977961f891ba4f4e76b27c3f0e5a1471ad017e91a9af7", + "Name": "matter_g1_mul_49", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c013", + "Expected": "0000000000000000000000000000000014b9ef8878af80f824748389d608bc9d0ffbca96230ed590d8e351586607a614f2658e348ac172f3184c1e5fde50f550000000000000000000000000000000000630f0556407c140d0a05b10ea65de48e4866e040455ebcd54fb6ed6996a6a3ac7a94a6818ba424936fa505c2c364124", + "Name": "matter_g1_mul_50", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10ca9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc8", + "Expected": "000000000000000000000000000000000e66c8be115a941ef7adf4490faea39149a3d812c29d4afb36febe3f813c7390a715f838dda90cd73556f89abf3949120000000000000000000000000000000015d85c185cb86af3ca1c526ffa6e9459a9c699c5a4d57278f33b14691e980e0f86b9239e626fc4064890cb610f10e496", + "Name": "matter_g1_mul_51", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bff228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b", + "Expected": "0000000000000000000000000000000009db6ac72cdcf1f69c6593bc183aaa2b3980ff78a4417e23243f81243987ec6f2636641c9e9c738c7af2a1e9f94149d0000000000000000000000000000000000ca7537c04c06607e42403e84e7d9e55b2a06c730ec342f16d03689bb684918e85f637e7a6279d95cb7774f106139d0f", + "Name": "matter_g1_mul_52", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b29431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb511244", + "Expected": "000000000000000000000000000000000620b092ea8cb718ae9669da4ff2faf639fb5e657b7759fdf292e6d841b51545afbabf95a98601847f64fc7367f872ff000000000000000000000000000000000a14bfc0e328310d62f116652b1de3a18282b122e0e3965619a099466986a546b73696274e12bd395224018a48b3d80d", + "Name": "matter_g1_mul_53", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b2051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d83", + "Expected": "000000000000000000000000000000000a633928be3f3bb4c94cf4d8d7a8169779f8bd4bad31ede895937e8e8b0ddea956d255776141541ef5791aa3a0bc6d360000000000000000000000000000000003dc3b703753a7b8ccf7676b04cac8021aa311233a99e8d5290655d2f84555dedff62f9f81322307b538c3f3458f6313", + "Name": "matter_g1_mul_54", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751ab96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f852", + "Expected": "0000000000000000000000000000000014911a8b41cb65cb7ccb940a472cfa58861f1a506a4f719888eb35d48ed9774ea0a0dc3ba38760253bedb4a1acd0963a00000000000000000000000000000000031388c90440f22cc63a1e9450256e5cfcf2f7448641ac66b43d542c4b77e9c590b957efdb1c6d75846b3faccf033276", + "Name": "matter_g1_mul_55", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df9178176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c", + "Expected": "000000000000000000000000000000001968070c01f0aeeb42ab71730f5b78ec122c10ca9dac1764ff5e916fc85a5eb5ed406c03263c57858fb03b15ac0035550000000000000000000000000000000012ecfee330e1cc8006c73e9d41ac1947b67f8704d12faf8c0c05c2519dca68be7bdf88a58eb4825b35a1d270554d6ce9", + "Name": "matter_g1_mul_56", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c049c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da0", + "Expected": "000000000000000000000000000000001469e7ab4c3740701927da2b0e34508a73387aea671857b042dabbc65cb849f8c8ed0b7f8c8e37f80aeee98ba953f4e4000000000000000000000000000000000674212f9f8e1419608ccf1a0447533fbd6fda87a35cb9fb39c8a7daf5d12f450c12bfac9e9f872b2643b1f8f201439a", + "Name": "matter_g1_mul_57", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e29462ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd45", + "Expected": "0000000000000000000000000000000009c756aec59a68832728b1133a69f0794f6a082e2f0f161e488078bec7420a0da19e812def625df9b12aa36d94d8a38600000000000000000000000000000000014aa28b18771ca07b7627446eb60d53bf4837541da661a0e5cadcfeaf58f5a650a39ac304f48e45d9b714cead9ba5d2", + "Name": "matter_g1_mul_58", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d3184fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f", + "Expected": "00000000000000000000000000000000153548fb1d7f1721c7fbdfeb167e1c060a90aab8f7b6572f4a2707de91b03a7b5e68f792a18d940167ae83d1380d6653000000000000000000000000000000000113bb747eab3987cd195e9eb755735698993332d517890f4e3285bf7274f8579ffcf84908a4758f0bb932021f2c76d6", + "Name": "matter_g1_mul_59", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae928a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d", + "Expected": "0000000000000000000000000000000014ca98181489c96227f8052a77730ab446615cb7b2b00a600cdd7defe8b3ee1cd53a6d98892ffccda5fd4916e0cf5886000000000000000000000000000000001567c3207cbd42c0445ea96b464dbd9099b85f5df1932d152436c936623d92fdeb009e69919368134501fa9363a0b1c4", + "Name": "matter_g1_mul_60", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b170d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a", + "Expected": "00000000000000000000000000000000139d093364c313d400603dba5a79479d566245a397f88aae748e110e09e7ab6dd271b8c37a90b86f6b48490ec1d0d8f3000000000000000000000000000000001099d4cb400f2d786dd2dd5d162580d2113c8405f51e8a619a6894d86a7f7ceb237289808acffa274069c24ee27c860c", + "Name": "matter_g1_mul_61", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ecdbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad997", + "Expected": "000000000000000000000000000000001247d4d3b1625ffccd350a9fc9759295637e91d9167d9bc72bbc1b60b1abb71dc29595b49ee1edc778f5219416bcd0cf000000000000000000000000000000000dfc69cdd0e4e126208b76a4e5fb8d032ae93031dde7da9bb1358507d4480881576c5d7cb7f0b3fa3032c0151650f2da", + "Name": "matter_g1_mul_62", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", + "Expected": "000000000000000000000000000000000150849c60273de83f9ce2016238c273359ecf486adeacc4450e1d1a6cb79fc0d0fb38974489375d5763da8a5f4e743e00000000000000000000000000000000157ec6c2dd68dc5fb3cef4e935fedb74e1f0e856f1d75890bf995a08ed6b53b52e2e0d412ae190365b139101e7fe040f", + "Name": "matter_g1_mul_63", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d", + "Expected": "00000000000000000000000000000000024b59fbec5240fbdf3fb4e565bbec20f26edbc2a1bf7ecaaeb5278ed9fe13d1e360fa298e2d3f9b2880b00aff827f620000000000000000000000000000000013ca56975d9fd667bab347ed67fb96a433d57836ca4069976e12459152e1369154bd095a15980880e21fd02b1d7e3156", + "Name": "matter_g1_mul_64", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e3616", + "Expected": "000000000000000000000000000000000aaff66eca5ddce81533afa27e2db1c25a2c6f0dc1dd7c2236d4c89cb9d2539e109cd1362dbfee86397156c3703d44e60000000000000000000000000000000013598d8ef4470998aec290e941576f5e94d696f7f0be40e3131b516a1679c5b0eba74dc9ae00ecb8f115e4613a50f3bb", + "Name": "matter_g1_mul_65", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f7a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af", + "Expected": "00000000000000000000000000000000163cf5475fae000c38e59754cd29f1290ab2d6550552e9186555d1ce2960b7dca5834e0347699d2869b8c9bc42f6f717000000000000000000000000000000000b21bd3bfe50e0536135a910359527f80c130a08029c24f990c82f02727def21973a20a2021c95aaa3a7c8a980b44f33", + "Name": "matter_g1_mul_66", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d245111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d145", + "Expected": "000000000000000000000000000000000bc3667c38602e7e1c018cc62933c013a9e78c375b50ba06f0c3d34fead5ec8a9658702a0856625a712520ac99afde230000000000000000000000000000000015c6b5487a52b41ae1a4634c8675f7b847aa5d319ee9eec0c92fc06d8e92e1cacc90ee394f8c90ce3e2c00307f53dec6", + "Name": "matter_g1_mul_67", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531fc07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a", + "Expected": "000000000000000000000000000000001358e1724cb3ec4028a63e4252eff164defaa41b21042037ea9a1e06bc1a0a1e838afc1965ee665de3da0163d22682420000000000000000000000000000000019828e11831e3e4216d843ed3446345edb357b2082b7947fe71932dfd894543928ddddd8649d32b4f1349f63f60bf095", + "Name": "matter_g1_mul_68", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e787929b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd0", + "Expected": "00000000000000000000000000000000130e09c096ce8ba86ae71a817426d929c7f9f8bfe00e76668b0041e935d1531d6f58e5eb743df3cf86fe88bdfda8c8a300000000000000000000000000000000187b25d8216fa3851bb6fbace998bf3f23dea80dd6e1cd94bb6a72d335702694804c6ef3d350519c5e781f941bb72f92", + "Name": "matter_g1_mul_69", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a63d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf54258", + "Expected": "0000000000000000000000000000000011e61e5158d9a7c59a5007732a76e27d14602e15159e8f62bd13be8b44c96736af5a77495c3da55c8244af6e60eb4f2c0000000000000000000000000000000008deda8447009898c89c6766e8add105892992585724d520c38d0d4f8c833f88d8c331e11b291b6def6847bfa9629d2b", + "Name": "matter_g1_mul_70", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f57a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e", + "Expected": "000000000000000000000000000000001182f2e45f06a729f82442ddb372f2eb8dbfccf12edd8df0764072c9f14cbe001893d932e89b948a643981ea8aa4fa41000000000000000000000000000000000910335dbdbef74b844a6f3b879d14c23c711ff2362213636ddab7eb1a44cd4b687659f8dd521c134b56bc4eed0ec5bc", + "Name": "matter_g1_mul_71", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567381b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83", + "Expected": "0000000000000000000000000000000019576d68ce66218d4c9e2e6fa9985451eea46ce60b11a74cf5ea9dbb9d0e8741d11436dfd77b0a8b490f4882cc5b416b00000000000000000000000000000000088ba5153e91738f7524034a2609848652a7e416fc68537ab2c16b6699f69695c62e5724dfda2f3b4f90277f5005bfa7", + "Name": "matter_g1_mul_72", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc3ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de07", + "Expected": "0000000000000000000000000000000005720fd4bff4da704edb7e317e3d41f1d1f45e3c1f22c1b98ee0b6875af414f6f58793e8ffd5c89bcec2af711973ca1600000000000000000000000000000000051441e34eed472766186a44b2028d86eebadd597cb7e3fa4f935d30aa043f11fb18670b31f0a3b8aa23bc8f05361064", + "Name": "matter_g1_mul_73", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b6", + "Expected": "00000000000000000000000000000000141a0eb238edd1cdb670737d94f658fef728691620f9c6d98e34ed8bd166b38ae6912b5bd90ea21b091766ad27d689480000000000000000000000000000000002d0e7d2584586ab2f08cbd419df3defab53a287ca467b6b081e474711a23608831c1507bac4f328750731b99a06c6da", + "Name": "matter_g1_mul_74", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa3ac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c79659", + "Expected": "000000000000000000000000000000001227b7021e9d3dc8bcbf5b346fc503f7f8576965769c5e22bb70056eef03c84b8c80290ae9ce20345770290c55549bce00000000000000000000000000000000188ddbbfb4ad2d34a8d3dc0ec92b70b63caa73ad7dea0cc9740bac2309b4bb11107912bd086379746e9a9bcd26d4db58", + "Name": "matter_g1_mul_75", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c88586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d", + "Expected": "00000000000000000000000000000000187cb196679b6baf78a7908c37d7f31a9fcefa90b7cf165d0748a358e6dd86fc5c2d91ff1c4429a563b5962b821cbb01000000000000000000000000000000000d94711dc6efed34385579532f59964ab18b9debeac96044f3eec14cb36965f380d21d39c246e972aa2d5891ce417e9f", + "Name": "matter_g1_mul_76", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb2116e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712", + "Expected": "000000000000000000000000000000001405c27eb28f58e7f66988a300df376f3536723e2ba5934d843ae629669485015c90a8da60ef5c00c63c0b08a00203a70000000000000000000000000000000000a62dc83ce27987849070a6022ab6a06186e2527f39ae94d5a23d2e4d234a465d50e03b0d7d175ed7f53ced0c3bbc8f", + "Name": "matter_g1_mul_77", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a85cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a72", + "Expected": "00000000000000000000000000000000142fa228919f71f75df073927d03d9204b36a5177b4ab7bc995b59ff312034f7ff916635e27abbe775379aafc24a35c30000000000000000000000000000000014429fb137cf912995ca785902877e6675105b252a64282412798f883063824fc31cd79b356ea4e4822363b948ec27d1", + "Name": "matter_g1_mul_78", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", + "Expected": "000000000000000000000000000000000cf0aa7969ec44cc21bc8cca97fc8a581aecb63054c4fa3b7b69d28e0e2e901fa51c42a629145d9126e63aefe7978c8b00000000000000000000000000000000199d565f26b9c6496a4115eefc75f1066480f498a50314b396685a3ade8e50ab03c7f56316be2bcc02dff8b11ad5e4d9", + "Name": "matter_g1_mul_79", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b", + "Expected": "0000000000000000000000000000000000bf4256ce2a2a976e35a9eb266d11dc53d043f6fcafb47eee06e120457ea56decab47ef22b251c6cce17df9a7d91e3300000000000000000000000000000000152c438e11fe1d661eea7c631e04e02eb9204ebe52cbceca1ab6a9b4c889a1ebdda01d7505df29fe2204ef5787749a63", + "Name": "matter_g1_mul_80", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d506e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a4035", + "Expected": "0000000000000000000000000000000007754a49dcdde1354412d3fe2e108675fde8a1df069c86be54c4bec46338a0952aeed50842c2486ac652202c26a1861c00000000000000000000000000000000023fe3f5e6786e339002e14ac5c9fdaac3c012526b33da9ed314cdb145f9279a71e306f5d51243a0f0dcdf59bc5d55ed", + "Name": "matter_g1_mul_81", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad51a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff", + "Expected": "00000000000000000000000000000000141464b4326b0353aa99674bbd98853b926aa580c1e03673297bcbe9094eb1d795331d16d883e0583ed0551f064d7a0f0000000000000000000000000000000002dbbfb86c4d313bdbc8ebd266c190e38645016aca22261665dc850b0d7db8b240aacebec8af097724e5291ff43e6f90", + "Name": "matter_g1_mul_82", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a9251bd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b", + "Expected": "00000000000000000000000000000000118ab56a65ca63becc8aea3f11b370c705f32418d51fb1b1ab64bdb8f0125de2a760cf21e7ffd4d99e9d7cde1368791c00000000000000000000000000000000047674c8f3627527dbb41f51fa52c0fe3a921d07466cb2b5484e4c8094556cae247347a0a1a98499510d1ce5067480ac", + "Name": "matter_g1_mul_83", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f6a300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d", + "Expected": "0000000000000000000000000000000000d76cf9fa103355e6f5cd4baa3420e694f252249aa6171569b70cb43c906eae9b60bb79b41af8dc714bd917638bf538000000000000000000000000000000000b9272015e64f292d7b76867714a55d7223bb026f354b20109e81122fa13fd0426bb3aec705b477e7b9560c5a99c9d60", + "Name": "matter_g1_mul_84", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886233e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b33", + "Expected": "0000000000000000000000000000000007c87e6d92bd41b7fa6a6ca890bf0b58304875a79af7959d9226a5be2f4ac2b4531fd09712eb6299c23d7c1c5ba3997f00000000000000000000000000000000164fb86eafac39e06c2403e315bff96faecc57474bfc964736b1850696ecfedbaa0795e537b8f541159d479ac5b52560", + "Name": "matter_g1_mul_85", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8c48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f", + "Expected": "000000000000000000000000000000000fb01ce0567f09dc44fd473009d2467c8c16da5ea7b39a1f1dba7b3656cadd6bdf2bf68f96a43252d92e428c1d2785490000000000000000000000000000000008b4fa645f3c56459a17c912c82ca36165e730807282cabeadd9c6c4a12c8a592cbac265021ef62c60eb60df3ff61061", + "Name": "matter_g1_mul_86", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f594228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c", + "Expected": "000000000000000000000000000000000b9c328c8a18113e1d1f783432c857015eaefa724fa2c441d5ef76b158ee6fe0cd1775b0c6db7600754cbf25fea528fe0000000000000000000000000000000019d30c3557af1da2ca169e70625732d9a4396b51f3b4988a9aba1be62538fd51c167c83e921f4876224d361afc90eaf8", + "Name": "matter_g1_mul_87", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82fa417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f1", + "Expected": "00000000000000000000000000000000041054430741e889d4cd8e7efa41547eb624bd775fd9fb64cf9e3dc2c6df27c95ffb8d76933ac4fa1952a5820ff88512000000000000000000000000000000000e8a28f5c622482b296a43ddb607e0f25635664fa849f3d6840ed7118892106a787bc07806dfd83935754d2057f2eff8", + "Name": "matter_g1_mul_88", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab446561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb", + "Expected": "000000000000000000000000000000000da2286b44e7e90e19d51c3c41bef375c54688b07afffbd7c528589dbf7f012e1fd248b9067a3faae9f1c6b626a5c90b000000000000000000000000000000000bfa0a482b0fc445f7b99c52a48116383bb70d5f2ebec5b7715796fbd0da744d0467584bfc1c8a42ace833d57c167a24", + "Name": "matter_g1_mul_89", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c2cf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf", + "Expected": "00000000000000000000000000000000148a7e9b0b4fde322f1177ced0bba34abec4a3e500afb86f9ae0a71bd75004e9c631d4cb26798bf963f7aa367f74630c00000000000000000000000000000000097f4c0893f9beadd66e4cfc6976dd277e527b1e31443e07554dacca52390066a4b37a7f0824cbaf51d3a555d696881b", + "Name": "matter_g1_mul_90", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a6f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5", + "Expected": "0000000000000000000000000000000003e1d921b5e0280f7370d55967e716bdacb7521547e22190e89862dbfcce02dfe7fa7927a70e7bc33448b9321de3d8ae000000000000000000000000000000001163f78de4af8494666c64d47d68a0feb0905c42ddfa024398401202d1fe0d6672bd1bd4222a8d106668ba4617683485", + "Name": "matter_g1_mul_91", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e40ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e", + "Expected": "000000000000000000000000000000000a94a186b96acbee87f9c1745dc301229ec750c6967262e629924227c6680b1d404e4b23d998611ad0e415610dc8edd900000000000000000000000000000000014da21c0f6930a79c8afbe42f73e048236b6d9f9ef8f270733fa1cb1012377eab37ddf2b9c742fea44020caeb95beb9", + "Name": "matter_g1_mul_92", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefbae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be5", + "Expected": "0000000000000000000000000000000015cc6c31dfa9482c6341f816786562481bc3a4db4a4a00807a9c7c676eb32b9dc7e002ed4971f26c1dddea00d78721b5000000000000000000000000000000001303660b6bcac611b2d41a4f7ac9ecf3f0b4292f83f2fdeba300a060131322ee3c2da3ca3539114114ec8a76dee6a5ac", + "Name": "matter_g1_mul_93", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c35851268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c0", + "Expected": "0000000000000000000000000000000009f1903e9a7d275487a503b9c968cd86823fe6667c09593b60ac2c88f306e20ccde32eebb5942a03fabde9195c5c500200000000000000000000000000000000179b41dbc2ede95ba7dad512329aeca9ca3bfd4da4b9620070d76d8fe8b49ad7fa92358070dd5098a2eaff490641edbb", + "Name": "matter_g1_mul_94", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728bf9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", + "Expected": "000000000000000000000000000000000f9736431073987708757d61927a45cfec471c8366776e140f62d805afd948fd132c4a5f4049de3a1474d0cb52c3c25e000000000000000000000000000000001515b057952696810a90dce1ee8464fd6370e8af5434a99333eacd1fb2884f6e8c568f887030a4957ff6d24ca02f4657", + "Name": "matter_g1_mul_95", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b767f399e4ebea34fd6b6b7f32a77f4a36841a12fc79e68910a963175d28cb634eeb8dc6e0533c662223c36b728cce2000000000000000000000000000000000cb3827fd6ac2c84f24f64789adac53439b4eba89409e12fbca0917faa6b7109aa831d16ca03191a124738228095ed65070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b4", + "Expected": "00000000000000000000000000000000195460b2d59df32f9f41eaef1139d45f0cb8f35a7982c38d356a8a8412f25e600580026d2d908b0493edba5dbea85f5c0000000000000000000000000000000004b339d62b3cd4cc966c6b4038adb302f997a16d8a6dfebd153295de08e57d1513cf0f16d82dc450e4d6f52621a42fb4", + "Name": "matter_g1_mul_96", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000150b75e9e9c03ada40b607f3d648bd6c40269aba3a1a992986dc005c9fde80bb1605266add0819641a0ca702d67bceed00000000000000000000000000000000083b43df032654f2dce90c8049ae4872a39f9cd860f08512930f43898e0f1e5625a5620818788797f3ca68134bc27d22d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e125", + "Expected": "0000000000000000000000000000000012cf2bcb79668067b7a265672ca614405868cf189ee9789b9e1e3186d231176dab5fea86cc5865392db8c75fc5d124c900000000000000000000000000000000121bf40feea00e151b718157b8c024f126762d84cff20aac08e7f2a027ab88b33e134a410c2af279a39618f7d21482a0", + "Name": "matter_g1_mul_97", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cba419694214e95a3605a9b748854d16c8e6e1ee151c907487d8189acfac1361b790a5e78f43593152027295adf8df400000000000000000000000000000000110813ff6e0ddf3427e2a514d3f0bfbadcaf9dbf039e0f93fb9643d1e62bc2469fe84cd9ff0d585bdd1037255bbe5485041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b", + "Expected": "0000000000000000000000000000000013a530f94e7600820dbd8aabefde2acb8b3c74e833457102fbd297317eb532c0622636ef9e9376fac1637dc745fe895000000000000000000000000000000000139eb14d3b69be977413c832bfda234348186d46fe177154e34fe204f62ac79f4b0f59bbef39b0676d81ea42a0946fb3", + "Name": "matter_g1_mul_98", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000106df8eba767e90cce0eabdaacc24d8e226c6865012ef8cb1460de5a319d443fdc6b4f4e58fb668943e0528b1809da10000000000000000000000000000000019789f464c95c179af18704c0b67b881991880f75ee7b03b9feafa3eafcd0f7d30a17fdd9cf439ff7fe683adca2083b57cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf", + "Expected": "000000000000000000000000000000000bf700422a382546a74376b0292f3a49ceff5597f0d2b726b1ff099bcda7ba92238a21db12eff5c314a29dd2387bec850000000000000000000000000000000005e22e3c772f3634b1ccf4e311241977eb20e7269540ef22d379de26ab80c58461dfa3b67848e0d584fb11de1917949a", + "Name": "matter_g1_mul_99", + "Gas": 12000, + "NoBenchmark": false + } +] diff --git a/core/vm/testdata/precompiles/blsG1MultiExp.json b/core/vm/testdata/precompiles/blsG1MultiExp.json new file mode 100644 index 00000000..62b91f6f --- /dev/null +++ b/core/vm/testdata/precompiles/blsG1MultiExp.json @@ -0,0 +1,723 @@ +[ + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000011", + "Expected": "000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436", + "Name": "bls_g1multiexp_single", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000e12039459c60491672b6a6282355d8765ba6272387fb91a3e9604fa2a81450cf16b870bb446fc3a3e0a187fff6f89450000000000000000000000000000000018b6c1ed9f45d3cbc0b01b9d038dcecacbd702eb26469a0eb3905bd421461712f67f782b4735849644c1772c93fe3d09000000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000147b327c8a15b39634a426af70c062b50632a744eddd41b5a4686414ef4cd9746bb11d0a53c6c2ff21bbcf331e07ac9200000000000000000000000000000000078c2e9782fa5d9ab4e728684382717aa2b8fad61b5f5e7cf3baa0bc9465f57342bb7c6d7b232e70eebcdbf70f903a450000000000000000000000000000000000000000000000000000000000000034", + "Expected": "000000000000000000000000000000001339b4f51923efe38905f590ba2031a2e7154f0adb34a498dfde8fb0f1ccf6862ae5e3070967056385055a666f1b6fc70000000000000000000000000000000009fb423f7e7850ef9c4c11a119bb7161fe1d11ac5527051b29fe8f73ad4262c84c37b0f1b9f0e163a9682c22c7f98c80", + "Name": "bls_g1multiexp_multiple", + "Gas": 27504, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000000000000000000000000000000020590000000000000000000000000000000009ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e522400000000000000000000000000000000032b80d3a6f5b09f8a84623389c5f80ca69a0cddabc3097f9d9c27310fd43be6e745256c634af45ca3473b0590ae30d100000000000000000000000000000000000000000000000000000000000b7fa3000000000000000000000000000000000c9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b6000000000000000000000000000000000143be6d078c2b79a7d4f1d1b21486a030ec93f56aa54e1de880db5a66dd833a652a95bee27c824084006cb5644cbd43f0000000000000000000000000000000000000000000000000000000004165ef10000000000000000000000000000000010e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc0000000000000000000000000000000016ba437edcc6551e30c10512367494bfb6b01cc6681e8a4c3cd2501832ab5c4abc40b4578b85cbaffbf0bcd70d67c6e20000000000000000000000000000000000000000000000000000000173f3bfab0000000000000000000000000000000006e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb9090000000000000000000000000000000017d81038f7d60bee9110d9c0d6d1102fe2d998c957f28e31ec284cc04134df8e47e8f82ff3af2e60a6d9688a4563477c0000000000000000000000000000000000000000000000000000008437a521c9000000000000000000000000000000001928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb700000000000000000000000000000000108dadbaa4b636445639d5ae3089b3c43a8a1d47818edd1839d7383959a41c10fdc66849cfa1b08c5a11ec7e28981a1c00000000000000000000000000000000000000000000000000002effc7b3027300000000000000000000000000000000085ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf0000000000000000000000000000000019e7dfab8a794b6abb9f84e57739de172a63415273f460d1607fa6a74f0acd97d9671b801dd1fd4f18232dd1259359a10000000000000000000000000000000000000000000000000010b4ebfca1dee10000000000000000000000000000000019cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a577930000000000000000000000000000000007481b1f261aabacf45c6e4fc278055441bfaf99f604d1f835c0752ac9742b4522c9f5c77db40989e7da608505d4861600000000000000000000000000000000000000000000000005f04fe2cd8a39fb000000000000000000000000000000000f81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed0000000000000000000000000000000011af629591ec86916d6ce37877b743fe209a3af61147996c1df7fd1c47b03181cd806fd31c3071b739e4deb234bd9e190000000000000000000000000000000000000000000000021c6c659f10229c390000000000000000000000000000000000fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a550000000000000000000000000000000004523f5a3915fc57ee889cdb057e3e76109112d125217546ccfe26810c99b130d1b27820595ad61c7527dc5bbb132a900000000000000000000000000000000000000000000000c01a881f8abc4d8843000000000000000000000000000000000345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c00000000000000000000000000000000083d3baf25e42f2845d8fa594dda2e0f40a4d670dda40f30da0aff0d81c87ac3d687fe84eca72f34c7c755a045668cf10000000000000000000000000000000000000000000044496e633650ef8f6fd100000000000000000000000000000000051f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e000000000000000000000000000000000b6a63ac48b7d7666ccfcf1e7de0097c5e6e1aacd03507d23fb975d8daec42857b3a471bf3fc471425b63864e045f4df00000000000000000000000000000000000000000018461a3d444ec527fcbf4b0000000000000000000000000000000019bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3000000000000000000000000000000000adb3250ba142db6a748a85e4e401fa0490dd10f27068d161bd47cb562cc189b3194ab53a998e48a48c65e071bb54117000000000000000000000000000000000000000008a0eb53c748001536d7ffa9000000000000000000000000000000000d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a414950835820000000000000000000000000000000009d0d1f706f1a85a98f3efaf5c35a41c9182afc129285cf2db3212f6ea0da586ca539bc66181f2ccb228485dd8aff0a700000000000000000000000000000000000000031133a6c7d698078a7ec7e11300000000000000000000000000000000073eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086000000000000000000000000000000001825bacd18f695351f843521ebeada20352c3c3965626f98bc4c68e6ff7c4eed38b48f328204bbb9cd461511d24ebfb300000000000000000000000000000000000001171d5c4909480aae3b110d01c1000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc75843600000000000000000000000000000000000063376fcdf64c9bcbeeff0f9f9f9b000000000000000000000000000000001252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada0000000000000000000000000000000002a1bc189e36902d1a49b9965eca3cb818ab5c26dffca63ca9af032870f7bbc615ac65f21bed27bd77dd65f2e90f535800000000000000000000000000000000002344b4be368d3b617df4aa8dbdbc19000000000000000000000000000000001271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4000000000000000000000000000000001407ffc2c1a2fe3b00d1f91e1f4febcda31004f7c301075c9031c55dd3dfa8104b156a6a3b7017fccd27f81c2af222ef000000000000000000000000000000000c896c3f9d64341ba7c5f8a06271dce3000000000000000000000000000000000272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c0000000000000000000000000000000016ab25d6a997bcac8999d481633caa41606894aae9770cdb54aac65ac0a454dd0346b3428fefd837b1e3f654f8217f4a0000000000000000000000000000000474d97a9cf29e85d4a35f6102fe7984b1000000000000000000000000000000001780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef00000000000000000000000000000000095bc13d5a05c686e20d7b904db4931272d84d051a516fbb23acf7981d39bffa3943d08a9be01fc48e5241cd8b775ddd00000000000000000000000000000195894e95ca3e59929612e77c1075322aeb000000000000000000000000000000000b48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008000000000000000000000000000000000f6fc00c0697119a34363c0294acf608eca3c680d80183a59c89b45a66dc750f818a27e3a6e136d69e7580a8afca001b00000000000000000000000000009027ceef3ee429d71b58b84919d9a8d54189000000000000000000000000000000000c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a000000000000000000000000000000000951b70c206350e1edc2aefdfaa95318368c151e01e468b9fb1cf7c3c6575e4f06c135715cc5e51e1b492d19adf9bee000000000000000000000000000333e268f0b5b1adf76b88981fc305f03ce4bb3000000000000000000000000000000001717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d0000000000000000000000000000000008531aa42aa092a91e0894d84ff0bcec0d37cede43dec85cca80ffad335d6f69da18335869ba1174f73bb37501404d6f000000000000000000000000123717b4d909628d6f3398e134a531c65a54e8a1000000000000000000000000000000000cb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269000000000000000000000000000000001678cefdd942f60480b5f69738a6a4cea5e1a9239d1bd5f701ad96c2dd1fd252f0aeea219bddcda4bc8f83983a282aff00000000000000000000000679956d49265608468757580db6b8b1821c2eb13b", + "Expected": "0000000000000000000000000000000005548dad0613ef8804a347152e8267acdbbcab98a795fc0da2d9df5c8ec37e0eb32e82950fbe5f8ec330b8bffafe13e40000000000000000000000000000000014e94dbbf60d89b3f68a5a076fcbd7cc0b683eae228f5d5036ee61012996ae2d347cec19dbd4eab547fadecdb31c078a", + "Name": "bls_g1multiexp_larger", + "Gas": 89400, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992feeb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed24d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be10000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e44c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d38964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b89000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f90787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c944000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1baaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e10000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442adac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795bb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd1080000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a190fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f81876720000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac943b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e3b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c760000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276bdd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a57876817010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f76894c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a65905400000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931db3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", + "Expected": "000000000000000000000000000000000b370fc4ca67fb0c3c270b1b4c4816ef953cd9f7cf6ad20e88099c40aace9c4bb3f4cd215e5796f65080c69c9f4d2a0f0000000000000000000000000000000007203220935ddc0190e2d7a99ec3f9231da550768373f9a5933dffd366f48146f8ea5fe5dee6539d925288083bb5a8f1", + "Name": "matter_g1_multiexp_0", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d507f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb6e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed8330000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154bd411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af6bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719292a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c52000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b10000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff327064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e90000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f2686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c23176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a600000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd1d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc9915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da05061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b2087920000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e053f396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265ef0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc8915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", + "Expected": "0000000000000000000000000000000017479d99909c144a5a5fdfd71721f4a2ee90b2b9654e069a38b460945b9291fc74e6922a7dbab9bb12b4bff9e2d0175b0000000000000000000000000000000015cfff11afe08d76944c9f810017ecf78b8ed54096078195d65a5418f660cf9b2024646a8532e349eac5d32d59c829db", + "Name": "matter_g1_multiexp_1", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff17d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3fc00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc4500000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9aff661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c3346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db39a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218082c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d48280000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcbd4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6341776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c425000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f0e7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5ec26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79bba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e820705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b81158f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa40000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", + "Expected": "0000000000000000000000000000000001c143e5d7bba56a959b94955f8eaab82a92a2e2b355baac7da0b57281645c689486059fb590ef2576a7a03a7c57e85d00000000000000000000000000000000182b1e16004c7e6f55923dd0b1dfa7346d1243996070db78f45c4c0a2cef95e93c6373903b5e0dc63f171c8164c2fb5a", + "Name": "matter_g1_multiexp_2", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe9a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac700000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193ab473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c0130000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10ca9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc80000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bff228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b29431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb51124400000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b2051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d830000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751ab96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f8520000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df9178176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c049c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da0000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e29462ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd45000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d3184fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae928a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b170d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ecdbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad9970000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", + "Expected": "000000000000000000000000000000000b2997ce4cb01abbb0ae6d28099d20e1f08c33351a6f0dce417a279789d6c581d4bc5a4a261e37e6df31a6928040d1f60000000000000000000000000000000003068e73dbbab6fddfd3c1e4fbf58bab58f15e1630c8c236faf3048be840abe316084aad7dd4ca6ee9d353ea8db536d6", + "Name": "matter_g1_multiexp_3", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e3616000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f7a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d245111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d1450000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531fc07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e787929b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd0000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a63d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf542580000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f57a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567381b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc3ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de0700000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b6000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa3ac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c796590000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c88586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb2116e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a85cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a720000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", + "Expected": "000000000000000000000000000000000ed96265e66875001ebbe888571ded16799d0bf5a6bad0abaca75b94bebf3023487a29fbe26a68f1cc90485df379845d0000000000000000000000000000000001be40cb29d8b722f91515f7e18372f7a0f77bc3ef2852c59e7533aeb67cc4cc4aab0b8e87f9a4982806124462ae94ec", + "Name": "matter_g1_multiexp_4", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d506e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a403500000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad51a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a9251bd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f6a300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886233e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b33000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8c48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f594228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82fa417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f1000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab446561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c2cf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a6f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e40ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefbae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be50000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c35851268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c0000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728bf9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", + "Expected": "0000000000000000000000000000000008644b6d6adf9d5b6b50d4759363901ea94218881fac2006ea391c41fed2a94645eeb3359df803d740710f0f7842b985000000000000000000000000000000001168ff1897eb699e475b8ca2930ae9ccff139d534c7cc606c7bafec0ed23a6e55c6ddb1efbb1b5f75044d0a7e122d204", + "Name": "matter_g1_multiexp_5", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b767f399e4ebea34fd6b6b7f32a77f4a36841a12fc79e68910a963175d28cb634eeb8dc6e0533c662223c36b728cce2000000000000000000000000000000000cb3827fd6ac2c84f24f64789adac53439b4eba89409e12fbca0917faa6b7109aa831d16ca03191a124738228095ed65070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b400000000000000000000000000000000150b75e9e9c03ada40b607f3d648bd6c40269aba3a1a992986dc005c9fde80bb1605266add0819641a0ca702d67bceed00000000000000000000000000000000083b43df032654f2dce90c8049ae4872a39f9cd860f08512930f43898e0f1e5625a5620818788797f3ca68134bc27d22d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e125000000000000000000000000000000000cba419694214e95a3605a9b748854d16c8e6e1ee151c907487d8189acfac1361b790a5e78f43593152027295adf8df400000000000000000000000000000000110813ff6e0ddf3427e2a514d3f0bfbadcaf9dbf039e0f93fb9643d1e62bc2469fe84cd9ff0d585bdd1037255bbe5485041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b000000000000000000000000000000000106df8eba767e90cce0eabdaacc24d8e226c6865012ef8cb1460de5a319d443fdc6b4f4e58fb668943e0528b1809da10000000000000000000000000000000019789f464c95c179af18704c0b67b881991880f75ee7b03b9feafa3eafcd0f7d30a17fdd9cf439ff7fe683adca2083b57cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf00000000000000000000000000000000107e1fea76b5f2be2d12e11082fe690f01bfe6cefe22ce67de968e410ef51a6192b5b28a89f222db7e5b5fd5b8bc7c4000000000000000000000000000000000014028a700cbde8bce295c564dfbd73294f9bb65db3db9d38312cdc31410ceaf7151ff5d9420de2a5bc8f0d609893c0612adc8edb64db5bf0ed6724f3b54140ed6c81ca65ef9d1b38c8bca6a62bfd3c6000000000000000000000000000000000a57058bc228914bbb3e3e8f6a73842533432e0cf226cc02990b9b99a74b0acbad498036d8fb72a163590c75b6041d060000000000000000000000000000000016d275fe8c7e37058f287e1646c28ad1b4a675c0eef9671cf95dfa25617e2f2d515b2fbc04cfdffd5d487b255dfca245d1535bfcd68e8136808edf89967fbbf76b7f58d1a8ac95ebd4944b9e440f20b20000000000000000000000000000000016b6ecca57c78d6595e6b55b9360bd946b2f0061b98d931d82b03ed747998285e093c978015f0b775867ad0d8b4a1f82000000000000000000000000000000000b584f6f00bbcb2432b6cfbd4f6c88e228658887b5278e461ede804fc8a65dc6c997de30efc65b4f43e3d96717b938644c576996d90abde581afb58903cde4b9443eeb65e21b0d68c578e04c8f28f3d3000000000000000000000000000000000d1eac060ddc0a327396051c8c4dcccb77d11da05678d0720dec020d8aa29cb8ac959184417267cd7386feb1c81146a70000000000000000000000000000000003f8b5667ee4707958ecb93a1772849d5d8a4d42a2367ca058b160dbafa8ac0b98d5ea216fd18130237a1f17ce905feb3c558cc615b1c61c9a42b8b0ab4668ffcfc9e95bbe958e72e7a5500058e6b0bd00000000000000000000000000000000180152247144900b015c3db2d8b26d45a57930a5ca988c1fbf74b63b48afa149347a343f3fc6b1f31ddd6de079391efa000000000000000000000000000000000b6f3ae16d2a580ae06634455302db85fa94d71def14c84cbacc5ef98335d6d87faacff7a9bc14dea342a6a80d9bdfd661301b4957a468e2817db5914ff102bc96460a2c5c15e78bd42884b1223fa71a000000000000000000000000000000001918c4f95a0d0931ac3f254cd61c10cadce5cb9e1ef352edc8e5944c8aa8ecd90c403ed764ef42f646c7ec5e3126a140000000000000000000000000000000000ed644cd065411c63c7d054a57344e7a909e1d0a6b414bccbd356f15d16fc1b42c681cb6b36b143e91b31866387fa94395cd2686d24a5bdda0bcb118a2c0eb5ccfe411ec452e1beb3adbda7e93ea367c00000000000000000000000000000000070dfa1dda5ba02e94b29a63f8eb571ed7e8b0d037a0203af9a8350dacec092be1bfe33f4134b2afac77b9a36f95208000000000000000000000000000000000019e11a80ce3f9b3321cc6fd1ea2b314bf0c71d0dde80cd5b4de5f0d974597f57036613829dc777a6f6ecd6f9bef2f85fb81d555d1e2df92cdb487a888fbedad976dce54b5c46a39893edeac21a12d6e000000000000000000000000000000000584b7ea99ce0398473167289d34314c60ba913338b0bb690cfbb013496d24854863237a4d716437dc6ae33326240bd800000000000000000000000000000000065964a064e4da56471c9aed383e6eb38b58b9110a2cbf991d6dee869d2f1307cf7273d203d941ead90ed67c923dfcd5bfeed84bd95fb955d1b1045c059ffd051324dc8966e504164e54f76f02eb1b860000000000000000000000000000000007d6061bdf40745ef7573917e0e19f240b6e917f7cd4c47e01969b9afdc6af4e3c93e0f1dc2d15790bc2e6f182c01f680000000000000000000000000000000014625d3f2825121a907b570e9aeececcf81137f40ca6d0c00d709ba9931e403c0c2ed262a8f4c2b24305dcd3185b81b0e3b308b95f6d496e6d5b910b6aabef8d9f868471653e8254ab4d49d593180d2500000000000000000000000000000000087b5d6595554184fee36be472a0ddb9ac7f9beb20817647fa9978b2e0c3549ece4f061b58054e9191ff3f120c12077b00000000000000000000000000000000168d8d995c1fd032ca7b0aef2ad5c37ef7c7cef8b61ab8fcb5ea2d449455bc75b1b85631fd2ff8f5ca4e5880f36905ded4ea92e0e776be341c8444d4040ec121a2847256c5c9bc918adb28618548b048000000000000000000000000000000000f44cda026dc5e30eb06f12307bd582b271ee695fa68fbff48674c0499dcc875d617471830958e31bcd2c883e97a9e590000000000000000000000000000000002977682ca8ca450df2ac3c3880b1235e0ad8436a36364d319903fe2ca2664e05a70840aaf2d62531cd8c4ba4bfae9124c07f5188e4c6270a7e9e2f551683c4f9dc943ffc7ec279d15816a7f4910b8d300000000000000000000000000000000107dd39f779801f608cceb4784134894d2d9aee37cf328bb764d8afcb6d1e0f1387b36bf5b7b335099849278eac44e8200000000000000000000000000000000045c985714b519061a9c8d8c9665b582abdc4116a48a70e0d3c4a7709568aaf011aa8ecb893ca483878404b3f8b22e41a819a0438efd7ec0c1e3eea07ba201af6a832fecec818adbb781ad0c23e81dae", + "Expected": "0000000000000000000000000000000005605f40a1116742ed53aaf7092715355ba8e41d5d49909f79ec9580955c4a9e696fa30df37e4044de4d23fa1c4121530000000000000000000000000000000015acbfdf914883d16918f980aedc2dfddc428ef8e9897776443ec3cb091f6cbeea31634ef5ed061792710d5d2c87b8b1", + "Name": "matter_g1_multiexp_6", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001696e814de192623543f822a22344258c8ef9b92c178c4bf2404b38f39151828bf518a868cde3db5cffb745f1bf0023900000000000000000000000000000000125bd1df30f4799271a9db03842f98ccb5a5c3acbe813b8324fefd06e3c8ec4e2c0be8c2d24328a2d1169bf6ea0ce46fb15af019ea2de662bf187930caea19d0aa07a74b49fa7d1819a539e06e4c69ff00000000000000000000000000000000138dc5c034135105c8899eeb61ab54a84cf02919e5650f34518f941aea5bbb6f9df3ee6bb2056d0b9e060158140f990a000000000000000000000000000000000eec8442c8656ebc4696ee13273b12f3e362862acc3b8ec6f2b53f58f74ea23b33c79fbbd2058ad205f4932db2e87ae9064a6af51c1d499c4c28556ad1255af7467bc750bf2db2842d626647bdb334610000000000000000000000000000000008f7f45310b5638221cfc9dece18010034c00b3cf170535008d60dc7ed6ff90bfe87e03d94e9a38201699f0742d8973500000000000000000000000000000000185b62a19864e21e1bef19fbbc21863c75f558bcbfa1b948bf939876188f4fbff5d5f4f756e0ec5348e194bb4f70706ca3daea5a083af43711fcb09282b66882ae5b5b8e1714e9186f33ac0dfe48b7ca0000000000000000000000000000000019269dcdf3772ae4969b68a0b4f87c5097aa8bcc9e6155638c3de94fc22b4965386be28e059bcea69f993cc388ea9a79000000000000000000000000000000000b95f44ad9f14cb5e3b9a338d0e4345153c4ad0d42aa00a4c12df117b89d9cf8bb556041d49f94b8f63108f03c56a449bd682acd154f6e16a583ca4968d28471653375ef79df078b17b2cd9634258dc10000000000000000000000000000000011c86d420b6d8820af8a3ef511d79aed7c82ee08df993a5ba479b29ef2f968919444a7c48a24ec33522e1206bb9ab784000000000000000000000000000000000f4a47f3f14a25108c2c9262466d14e3a8d1f21bd2d3d6f28f03f35bf23a4b5b494a7cafe6ed5f39195e07b1692bb6da562223d3fae1d303a01ee4642fb4cc70f21937ba7fe377260fe82262a8455a7700000000000000000000000000000000091d9fb6493f4441c6e57a5a58210a6b78e86f1a9d204094ba6fecf2c146522cf842219c900d7cb95366cf7e411ff4a00000000000000000000000000000000015254260fb67e88d0067ba7006a49814c74a5369837dc5279c0fd19c8826813c922793c96e0f708092158ac297a368ddaf1d0fdab6185e1c3f9f621ddc169ba92584db0b40b6ace7ed563eee0090629f00000000000000000000000000000000027910712cefec94f0fd4de6aa70ccc408e64d5de6b473086009c525fb6d058ea03bc99f7ab49cdbad3a42bc8ec0999d000000000000000000000000000000000c0b0bedbad83ebf6af4f5757035b8292fadae4bfbef9f3bfcadd21dd796d7e3ecdf9685ca6d4d649b2f0702a3280d40e910487c91f3839d5961f02a67f3b357206e406ba207dde969498e40d4a26e88000000000000000000000000000000000b0ae8987464ea0b77201d468db7256b135a5cebea92dddb3aff10e451568e714f1c418b6d53903b89bc71109180b8c20000000000000000000000000000000003050becb4625f8e3ab2cf13dd1eb8f7eefc7e14c16934b87661adbf0139631108d241bcb1fb24c5b989f6d424cac883396d32c2c9ef685120995d2244756bd45591618597306193422f3b5df4b075d2000000000000000000000000000000000dba43568347a96f26f2633d9fc0fb4610428a8d4992c2734b20928bf974bf642a5122995884cf11b76126ba66522c8c000000000000000000000000000000000b9bb25b0db32149736b671ceed44df71f36a33c15ed821f591098ecd873355cfb8a39fc7c7378a19d84a5b232227ab92087e21d775fbc2c20dda715e46c9c4970394e40e991c78ecc13a2a5d0b0f30f0000000000000000000000000000000018d46d1a9ec91cc7983b29ac83fe9101c0ca36276d40743d2a6010d574fe1c16ebd9d7f0c83cad5ec2b2f652d3e6cfa500000000000000000000000000000000185f6367fcfa70e7a005c1739c0d0a19b5ec8de766037ec92840e66e2e9db18ba2356676899763183222f9957f48f300f44043002a94560d725da2ac44f30cc5f14f52dff5671c6689efebd803b1df7a0000000000000000000000000000000016677511c781b2b97456c3059c19b3e12a865cc21ad71cf06979bee1a3128682a4a86f3e07cdbc9ff7b5aa7a9899653600000000000000000000000000000000006307c89ac36a88c6921c020d32530fb69338afbb33929e231fa704f0454d642c47a3b8d320b4266283a8571944d0558624c83d846ad2e53f3f8ff5ffd3fca8723e6cd431e89ca29a4d662e82004b600000000000000000000000000000000015a9b215eaed682e4704cd3b1265962ae0e24555a16612ac762040e1fb9b412eacec5130a6f6a31eb670806be7ed775f000000000000000000000000000000000f60035910c438c177a27e6141d0ddae706d3e852d61e37cf8bb2f03550feeefa7213545e3af5ea614c91b51bc2fb378b2b2a8a42887ca6dff5b5364d88962068496bee79cbe74de0e8a06209feb3832000000000000000000000000000000000077b7a4c4644b21ac3ef56db1163f7b2e07a817cfd9d4c6830a97d0ae0b620e0b235376d590162c378899ba12eadb5900000000000000000000000000000000022beafe4b4ab44434c9dabae45a395b5b8da15da2fc2e723c1b30b5efc95e880846844f27eb47dfae8657fa27ab64ef88ecb5976f63a38d7f3d8c8ec441b705563c5e3d899870ab5d2ff84467fffefb000000000000000000000000000000000324928100db98f5a1af039a8e1b63099214982f1729ba633b51166da97e861426bb91283b386ed4b465d791e63928ce00000000000000000000000000000000178823756c0facbd4b1cab22f346ea7d1dce0ab687263265350c9939d52abcb5a5000b3395f8268a38027410675e8baf951f4960d6614b098249eb9420077ea5ad11e38d1694f4df33719d1127338f440000000000000000000000000000000008828eea92c3245eea4d60ee385734d3237e4e346e52c5de8b24c82325819be6984da4f0c1ecfc6ded5d0539a6f1f1490000000000000000000000000000000017169bab8970f47a303d2487e3af707eddaf7c4453e9d2d6bbaf953e74947b5fd40663173edd55c0d6aad7884f69a0967056c7d93d8453be369831dc0575df6438db488780d518a53d19b8f5d22d506a000000000000000000000000000000000787474664b2803e78489de6c5d5f1938e784e552bca4c32196cfe121380aad591c9fe4d9230dbe976b3ed3b3044b8630000000000000000000000000000000000c026547c94cea37793fee439c359cbeb2b985a33559ab25d1b55773c24faaf4fe511fbf7df085bf5c1715c79469cc28aa982de1583c25307e9e2c8cf2469a0b1076c6be2fbf12caa8584f34988221a", + "Expected": "000000000000000000000000000000000a7153c6173dc27b6a241c046a2a9bc25b85c4621667d0a10550cf7a090a8fb914725201876a5bd2af09d4fefdede3890000000000000000000000000000000007aeec94a64ac629673f3be3cf660f471e3e928de0884300ca8271d42c92b965c86bfe76df61d0645e955f40cbe3751e", + "Name": "matter_g1_multiexp_7", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015fec2d82f5286d2067b07d83cd1c131d3fe18628101c3e45caab07f3c775c97e1533836830959cd7e434fc3fc392203000000000000000000000000000000001050e1396a5053c902441cb33003d9c54e6b631a80e3c132dfd37805bfe87cc2ddc495200268fba0376c5fa071fad230a18ca15f0d931619363f5ee56bd7657b2298f228cae8d185c9d062910193e9c4000000000000000000000000000000000fbcd07180f265688329d72ca68cde644a580cc9d698e40f69380065110ff5a61149e4aa9f67056e0e1603bfb9b5b3ce0000000000000000000000000000000006f363a9addd63a59035cad90cd52213665069f540b6c6cb41cfff5711376885e3242b596d051a59f681941bafeca53eb54274927eb29fea0cdc464271c918826d5249b2180a52a5020480d1020c9795000000000000000000000000000000001164abfa75cb4d711ad811c4df430ecbd6329968ab003fa680d235ab34a9565e5c08add76cf412f132b54812671da7a900000000000000000000000000000000141c9858dd17dbb027dde22dd65f6a7cd38a1999eb7977cde87ad762425e364e1395851b1cdb41094551e530d891b0d15849bffc842c21277be88dfae0040c54b072ff526731947cbec0cfe963f2d0dd000000000000000000000000000000000b95d221c628a77bb75ee5942c9df4b700268c90c4e6330ab5533d13d59826c81aeef7621ef6145f48bef9607d280ad2000000000000000000000000000000000b2ae1b6f916d77c31e4421f8d0241201bdab5339f95eae0e9491b4da5e226f8eb3f754d40be3b446ad6d18f28158b08aeff769da1b62fde321d46c66f8ee7f2129446d805ab7f7bd586268de8f57c4300000000000000000000000000000000128989e92641f3c3a914c13e986aea1bad2c87a8c28cf156bbc68bcbb134b25cd672832f2a988f60d2ecaaa1b83159e50000000000000000000000000000000000106dc95373dfcc85d9de6b5b609554b67e8683f90ea13156c8318aa8de0a2355a721b3bd77a6329264ae671c05af4a52c9e56cfe957b924c9c0294e1c1f12474331c662c8e86288c97e6a8b8b5b2020000000000000000000000000000000009fd9fc9ecc0d1521696bfe7624360d11111523a4ee0e30432a468dbaf1c101691fa527aac5ab531be822ae914b0afad0000000000000000000000000000000016b317ad68ec471b0ad67be2c489c9f5bb0d8bb6b5ef909ea975cb17f5964564d5f1a61d32d60c457923e4680a218b9bdecec569d223c724d162250ed1d074ed9f4080aaae3f44b77df05292be48ebd9000000000000000000000000000000000b982f33980dea4d89b577c9f849f8b8d9cb0c7efec7e17284d45c855638fe9ab2e5bdc52ba79d06a9133f66bf0ea2b5000000000000000000000000000000000c252a2e2769d3250479091050133808a1b0fd20af2b41cdeebe7cfcf7e3a92b9ab17cdf4d370f9fc391981db76de39c915ac9453b831c41becd3c1f412cdf5379e9cd5c80bc6df92ecfc5005356d2aa000000000000000000000000000000001769e8b5fda96ef205750826f34fdda3587efddc86f69d37001c62938a90efc23a3ae150d223ef4bf3766ab7d86d80df0000000000000000000000000000000009ee24ab483300764bccba33b55b8889b084288ffda23d157f650df34125fd803624d88f2bd0c3c3ca51bcb57b9f4dcb58fa60bc7cff4edde18301af2348faa69ed4f31d437decb7d4fe51142d179e6000000000000000000000000000000000146001b68cd902fbb4548c3e7cfae9cf3c8916e462f1becb9918c8de42483ef65f418d6e93200e8ec95528928916bdb10000000000000000000000000000000008bef4996b8120613292dc76dcc77b07b24d4498d6bd35f5dfb80ad241ad97bd161cb2c5c96fb250b70f8aec1aee5b56c29be0b271d4e22d39e9e06db9e50845515880f30c5bfac80bca39a2d8d61ea00000000000000000000000000000000019d02e168efb5769416132b0457ee1ca74bd5737f9364623bb270e8218c96e71dc49403584aa0a7e6c15bf6948ddb956000000000000000000000000000000000510c0917796c7ef2e100c7656591d04c3c5968d688b36b93dd690b0a8ea55694157fead964b85a5eef1815cd5932819dc8c2e971a3a4b9909dcc5cc6a0de50286294ee15f441521e0f1d2c3ad3a76e9000000000000000000000000000000000dd05e53ee40f051037c88fd28364aba276c793047007a20f893d13222c35b24e14f6c74004c3d8070405621380553af00000000000000000000000000000000191d7f1863ab7bc4ad1ebab359499f4df75b8c7a58fae8fe7cca530c7a56e5ee1617b343765960ca4bdc0245ff997a9221c9ae0132a4886820115e71e280d33378a04344f635c769fffe91e89fa7ea470000000000000000000000000000000013320367c29a4f1527e8c0f3047f776d7c892d08988c402c55e90e84b07ed7f0932c3b5fd19f8d133aa839ebd90f6428000000000000000000000000000000000f8396d819d7aabefda680c8ad51c7f907911dc4da7c5fbb7e599e7f3b758c5e7c9e9ab4de1700f72f109d7206c1be0ee1067c01d5565d0f387516d9721f7f4e5253d5af8353db4a55500e20a95f3c96000000000000000000000000000000001413f6a4ec8b21a459a4aa33ea9d92614857df629ec16990939fbb8ab11fcc919a25a10423ded219ca5b94f71377dc2c0000000000000000000000000000000014a3320275a64ede5e1221c78b421c1e4474bd499263aa21e97af103d7cb62335faf4b85b5983c5865599b709e95efc4a23bf766a1e1c068e6e8e4b60391583ac197ade53caf0f8a43c53d1bae9f13e500000000000000000000000000000000057c3c7e4cf799d716483f1e8bd4e6ec91ad9566379683c54204ce46a0e5635fd9852b0a83328386643b2017b9b551f90000000000000000000000000000000010e3d5725beabfa7e4843eeb5bcbf6e7a54b4b82fd1768a3c276bba8fb7dd25dcca7e20e74231e2f7cdf0ff50cb9cf7c2c505d4fd8287a897e01517ddbd7d7ea9d26ae4f58fbca172e5265e2b62858b60000000000000000000000000000000009d85ce8e918ddbcc47494c4b194649fdbc8de31f5f3299ea4bec7c68ff56c7f6ae916c85118553b6a6634ef9b8820f50000000000000000000000000000000000c9a680e6389d447a4884b4e134a3e025f8679edcba56bf8ea2061a00e34d38c325319a8a5efb556fc2536886e225912908006c06ceb9188651c59d434988cb5b51a5a75772ba71875444c65ddf0f4f000000000000000000000000000000000f34c8793a9ec6c34c704159d18e385dc9a127e0a9b5f95667f58e68f5ddaa272f68f5fb55e105010fb656954f25927c000000000000000000000000000000000fa1d9379fbd273b05aaa8ef5397eae24cc14f83118b2584085312986c192d2c5e3a0fd8fe5c2d82be2ee5b006413a2be8e8724c80f3527de5f0b2b98ecdf0b8d0471e63c0763a89da8a21a70dbf8399", + "Expected": "000000000000000000000000000000001223d94bca6cb3225511b4e28797ddbf1b1e2d059c6f7c5e852331f381c578016671b5390dff3898f9048e5868b253de00000000000000000000000000000000093eb1c50064251cf043e7c7af7518b883a8f760deac99f6e10c3dc941fed718f2293ec2cecaba6d58060374bce11a8f", + "Name": "matter_g1_multiexp_8", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001429e7011c17bff6df1b3237a06bae78d427720af641d2614f32cfef8c537d5ae9315c0b179af0a114a486e2eff7bc470000000000000000000000000000000003b9caa69b5495dd33139d14146919f9344efe2416b665dc262bd09ab91f3f07d1fb5eaa3c3a94606e74ee747114f347e14282bc687a00264b4e4678ff238d5205f6b6fcc10040d9b4393e93f76297a80000000000000000000000000000000012b481abfcf8ecfcaed39a4277492641c420acb65ec809a7d55892091c7f76f82c02e7baf2a648cdd5cdac45113b11e90000000000000000000000000000000015d32649850a5c99a787ceb894a66b58066c9257dafc4a6cfad2887e7a19f8af69f8d1fa69258289e417954d064e63eb5307650d6cfc681508fc7b8dcb5291837582eba6588132f46ab8fba674a1f5af0000000000000000000000000000000006038134150b97e785f33b0accd0d1991c7b97aee1acf9bf671188f61a846a9603f2d3f56d2edc0564d1ea7967e112460000000000000000000000000000000019434ad4fe571da11e2de03c891d19ea2729f4bb7b7863ae0bb8f18b53852ad4dbbbe682da2c8568fbe96c6c9a7236dc7d6a25511ba63f0b7ebd2189cfc4c551083ac92b144e30dd81d27e59dd86e2260000000000000000000000000000000013786032ab493b5026cf23fdcc468ecc486cc8179c9510d99a503031d1fe39f9caedb2d42dcdfa17173e693e2344bd05000000000000000000000000000000000f1deaaefeedfac7f708092bbe3005be7c4b56499bdeb8fc742b72be7ffe4d8ca90e605502f1863d89a41ed794e06586eac8e5cf13de6db37982390c8b6b0474795f479584960748b7ffed881285e2df000000000000000000000000000000000aff14b235c3569586e67cf5113ac0ab32d442a1c07cd9e249149d719dbd64f8ec1b07c4241af135d3869eae05ddc0a40000000000000000000000000000000013d960e93447cf6df8bb48db45532d567dd2b0756dd674625657e5364f81b4bb94bf436b54bfe9afe8eb5f4bd1be90732c134652c27da0a0272b0783551ae44db6bf592ff299b48c50c550367d470b5b000000000000000000000000000000000f85e9736fd9d3f9a839f701b6d8a6724af55ea74d28f101f97229f4b406016e50f54a0b3d2087117f352bcc28b53d5e000000000000000000000000000000000b2717e98f9fca574ad9202bd76ff6e53c74c342d1b6049fe66310040217563a4e5df460f264769418cfdc443dc31e008dca9ff432bb483ad726bd20cf96b07ab6f07170a1449f0f1b50ddc6e1a02538000000000000000000000000000000000ed8e6113d657b2d3283e50e9d054e612793fcdebfc31c53ef4f417e63c76234900c627b7e8c433addbeb6a79bcc5d380000000000000000000000000000000012f0a3095ae16b5535192a932f188c62c3cf01d2184f8e299794bcba86d4573e423a0eda4e17b4b512c5e06367e470f6146433a0738ab1b044e059f49a8af8d85546d0e34eaa0edf2b2a6ee466c0def80000000000000000000000000000000002fa5630b261e07326fb51aa2bd897ab49e0b960f769e3207906a530fd759a53db8ae17fa79c8e8c889a923fb38888770000000000000000000000000000000013d49d032b888aeba7e652b200c91042f409a6a824d1aaa04bc402f94233385254a2d1f8605d15d04013ab0de9e40a94de0399ce1ed861c0ebce1d4e811ea0a3d87e21a54ae34e6b5e1284cbb9497368000000000000000000000000000000001495234b14a93a24881f3b4425dfd82b49aa1828746b06822097c8338da57db37ddc836a9abc46f7a0cd17ec08d36fef0000000000000000000000000000000013b868cdd5ed7bf90018873ae2ec84e4bc71d002483831ab7a4a19bf18feabaa210a729ebae606ea18ce16458e997497c2b034594fa53a0951e2116db1b063345fa42dc8c870e1146f1b00f626dbcfdf000000000000000000000000000000000f223490fde3ae0d7b94412b3aa86030e5d9dca805f6ab5b025ce8e9648aa02067fd29ab9a1915c2df7b2186f35a2c74000000000000000000000000000000000aa747ff7e24cf6d1dd2c4fe9db8c031b78830e98cab27cf765fd874fe6b7731c13af69559748c81f3915f9f3a6c63bac1e6d9c5f8911014f0f540211af5184d96fdfd47c03bf2d7bbbb3bf1a330017b00000000000000000000000000000000134f8ec87b5572c062f6f3b43ee896c2e019356214ad397f703a839d39215bec954f02d3f81e3442586ba9762bb9690e000000000000000000000000000000000218735ec0b5bf9b59dee7cfc70ec4c6f21aa129d604fffe824b7ed6b6346dc242757abbe98c19c02d5235da448e331d6df5a133d3332e1f79f41201f8cb2c8c8d4d1ab0f640c4de6bd6e34884a77aa2000000000000000000000000000000001510f39616d7f576980055d0547c603d882dbe85dd0b634577fae134f210736007345d035d815306db660de4a07fc24300000000000000000000000000000000064d356ad7bd2edcd3622b1fc225fe319f86b5f7da875cd57fe5adc5bdb6443c5b09d676950e2d069bd4303b8f9206928e7219a9d431c597fe9700d43da8b545072f5a27a9f1af99053ac0494087dca10000000000000000000000000000000014d4184d69d34b8e509f3fc7e7033d76b10ba913d6109bdf842be4c49cc0c29576adae2f75e6fa054bd989e26bda58170000000000000000000000000000000019d0b70eb45a353166bfaabcb661b46eb1b7d8a59a903cbf9e43ceb6ece492e78d7f1765922e981903153072a08bde098efb8a7a5e48d5f4a011a4aa0dbab22ede62c903414d005d507ea3d77bd47a6c00000000000000000000000000000000087bc015b995ff8a840fbbf23db2cdaa8bb2dcbc38e12b588bdc4186a77409fa2a4cd74347f568c5b516879b70552df9000000000000000000000000000000000b15f04955dc27d19ad2a97a99e0890e6d3ad17d29f6b30f866f8cb3ee7789038abcc24c63d4525860e64593af02e39f47f53e2c06664e1daffd7d9b114e12d4190d5d0fa2244d61a13da915c39b8d530000000000000000000000000000000013eb2ed1d78059beb34c3fce731d42ba28c485dbc74916e373424917d60bc8c402e331e8aa2fdf70360049740e670da7000000000000000000000000000000000eaf5b5e47a2312410035d87aba7196f3f0b65abfaac28ac80accc9d87a1115b7f175e59ea2394198a2876568986fbebfb109d9a0a7b62c7c452bdf0a2853c4bf65e5439fdc83aedec8c0bf73a16b5580000000000000000000000000000000012d7a2e92adfff3d37ad21dd26299188e25b628a9e9d7b54d2eb8a886e80de812a32db9816964f2c0ad25d9f0aa6ae9e000000000000000000000000000000000c7084afff475bdc0a4ec265a3cb3f87d862270b6263a47d869786495abdd4316f6f154b997224d3a895010ce04151c34b0a931b894fbe61115fcf52be51d44afdcb96c94117c75adffcd8729b0a699a", + "Expected": "0000000000000000000000000000000019c9d9833332c6dd40c200d53b30e92f1595c22568b31882e24b8fb17be41f4d2f9692ca1e63106c59ba574f8b0764c9000000000000000000000000000000001414165b510abdf0d4a32236cdbe51fe2b5c9a31942710a07bb5664592a3f1b5c821edea44bd7fe185cb53b11d6407df", + "Name": "matter_g1_multiexp_9", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000038e60d2dae22dee4dad0d9e0658741c13d165d3718c763270292602852625ac83c5ebc1a6d86c181686cd01a1891b520000000000000000000000000000000007299913b59e2d245fa489d92873b7d2bc8921191a34a0d7f6c5774757ea4eb3d667ff8f3e9293f0d2354ef03cb6592b68ce22e379ddb8352d12eb597c179c7089c6388542909876c69ee377b14054e7000000000000000000000000000000000b07454ff91e3f9707880c1713c69f8a44d70040b44d96ac74d196853c62f264ccbe6d9c8945905092d9bef665e45bf9000000000000000000000000000000000405c965e2e8cb5e85ef9e18927c7e86e63e7aeb49f45b3428089010f34eef9ff37eb005e6b86e20236dc870661dd68c61529338195b665f1b80c4b95b7c3a26a7229884be1f4be9d49e1274a9ec3f81000000000000000000000000000000000557c7f55246759b901e4e8478aac7b80d37edd5d6be057e5aeafe3d8da008e48c96c17ab1093a6a4fb39cbe9364fdff00000000000000000000000000000000158908f112d7cdcf867f1a5b05062b92972c2947be213ede3a7fed7a477fd57e69e1de82164f7cbd53a3f4f4bad551d744d740a72e6c8b5632314408022093618321c8c0a8cf2fcd9ebacbe43505a01c0000000000000000000000000000000001701edcc472ffbbf157b1f239968924bb91825754bd4fda9f13450162e82932b8f5f39e54ec5975dbe7dc744d6d676a0000000000000000000000000000000017d13c1f6d64af2a808c3ba20792af9ee9c626235ceb9ced3c7acb4bc864ba47e55e0945a430da47da1e87f015dc024724872a78e340ccb077259aae65d6c448fe6bfb64daf4e2b6ecce2cc9525e35a700000000000000000000000000000000011231262d0fcf5a4b92cc1ed62aa66a55be739eab1316219ed2bb8d3e939e25b840b75f914cdd3f07b3f57bbc07c23e0000000000000000000000000000000001eabe4a5782244ceaa57ea0b58ed1334dcb94e449b7fb905805cefb786e83af66ded006cadc651a7b2cb07c3e3fceb401a1d84826bf78f493417a06a800d58dba688800026638316fcf9ae534436fc000000000000000000000000000000000045bb823151b691e26b0e706b8abb248ecd87107a88c728e7a627a962aca7f85d4c88df949b3c53e2d32ef18f60675350000000000000000000000000000000003342b2d1a75300ae9ffbae66326936b19c7e59fc6f597ff09f2e5d50c1942f161dcbcbba00e4a46d87ab51074320132c5a3268a8ab5a12214b266aaa4eb562aa05dd19575a7f3ba2d549a25f1900cb800000000000000000000000000000000043d72d26ee669ae8e47eaa74199feb37d51f5c99151a8f854362469e5acb2c5f6d2c208e7d674efa189fb90275b835e0000000000000000000000000000000019e6f1b3137bdb49c534902abbf42893fd576a211b93c831dee90723c7daeecdceccd3eb981537d4fe729d6e48d70d6ae62a7b00d2be967df04ef56121c95c8736efa95e1faa0196e1f4485da82b3c3c000000000000000000000000000000000837b6a981e486865dc4d6d0c123230ced707e2518277cbfd0be747a8c9c76be6aff8b06df76f7c801fa34d11141354900000000000000000000000000000000011d745300b20c5ff1e607ef3a42ac31cc55e8be979b091aac0396748e607f00f30ff579321f2e660e90e8e5f9efd4f77a883bf845d1ed04e0664d814cf0b49cf8c3e8b8594ae5d2834c753851ed7803000000000000000000000000000000000740837b02d2923815914ee9cfad663eb7246ec8c56e632cdc2dce25b6e475dbb6a75ed2ca6790f5f83fd1a274832e8d00000000000000000000000000000000188034daa9801ea182b712da519f7524cbb9f641146bc0fbf77e72ecd066bd577672c1ccf28a2c4d3cb9854cb2b9e7c80f474e8f4051c4e91124c14895fe9e2516b315d805b79013caf830524fce888000000000000000000000000000000000014ddfffbffd0317ba7e248f648cbc98fac2be9f0cc31d6476f41527c25fe8d078207965eb2382ee1e0f08a38fbff7c10000000000000000000000000000000003e492f3667da69d44b35899f425af2ba51130aa6341bcc0d4d9646cc96b090061acece81ed16c7e75fa452818748b119b3a5790750825ab75ab7422f833c671b95c6c58619189db66a6215ce907381c0000000000000000000000000000000005107fd2b5b483173992b0f2f51dc24bdba94b5174c063b52c33a8cf84ce3adefe0efe08e6bf4de3e68189e495b39c6d000000000000000000000000000000000605e8540f1c7f5790c306643a68606581a16a60d33607064dad5572947c93f3846f66afae10a66cd33621c6a2dae30c6607a48ba3fa5c033a1ef90260ada14ee50c95e5167bf801ddbd3acb77c3b3880000000000000000000000000000000012eb811b231a07e27e997900be274f73720afe3b0626104a9d5aed39a3931595f2ad57cf6e8f12d5110cf38fc8e7f244000000000000000000000000000000000abf1b8abe848b91333b4bb226b81a33aff5b8f7af70108538a3c706da182476a42e0e5c2fcdf694c8a12f62a996c86c030db724eadd2f487d31dd4354b5c0321a7983aead21759807bd893217c4d4050000000000000000000000000000000009d2b5044a8fe22a957b6d1eb20454db2cff51e7ebb6357b3c6b95387b1fd810b94eab4aef4f0a0aec4e6a693903dab60000000000000000000000000000000012ccb794eb1174735b5f7700ef95ccb67691cd3673d601dbf6b2e2469521f1b2ed283f2f98a9cd601867de4640c9517988e71d0be8fd050f6dbb8b2fb3ae2a9e593bef7a5163255aabeb07282e8793e30000000000000000000000000000000003eb6e7ab6dbf66614ff5b55ed36243e1d9baa317f01aacbd7f3a015bddfd818c6764c0802e97a42063a18edd9dd091d0000000000000000000000000000000018571d50a947e56f63b26a4377678c838de7b315e655104eeee48b7d5e6f5ee5d876b3ebdebcbde4080e022cc88c995326989184bb87a586b8752733f9ce9ea06422c6a898f0f402cbcf760a7a21c95c000000000000000000000000000000000906d5a1691dcb7dfd5d78f0688e95de2e2f06cdc70f8760e43a562365939d3fa23ddaaddfd1ddfbd3bc9777783a7ab600000000000000000000000000000000168422a6171f5ae44b645b6b6e73011494dc75e98793db2424bab311990eb7730a9a45234afb78aeff7778503cf4e5a03d1dd9cc44b30a4623a4d14861688cb678bbb8b2f8ae3ba140f60e64c05514b10000000000000000000000000000000011c20d0c6140e0e11d3ffb8c28c6bd80ec495d057775f6dc331c98b0b0aba17568e1ba773771c703068dcc6747187767000000000000000000000000000000000f88fde780460bd75f46f593cf6fd0aa25ad14cccc061d9ae2cd8c20398f24e76ef614008efc9ffe1d1884df1122111b5639d80f55e24e05e3d943340e324f6738a593a915a6bddb40f01bf12f73daef", + "Expected": "00000000000000000000000000000000018ed322f140a351069f18d039ebded8630fd019e8c6c401dc760ec5cc6536bc2f52a6cd5400dca0caae95e4b9282967000000000000000000000000000000000b9666fbbe91ec8bd670b2a64571a34d689eac44c5b63a43f60da08df51b003d85c03f0eab3e2042b1175af3501de8b5", + "Name": "matter_g1_multiexp_10", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b42381a83d4472a3a7a18d2ba5266bcca254fade1170c6f55d442aa2a7674008fb35c58d5a638280e0ff7531617a768000000000000000000000000000000000eb5de05b5cdf9f95c5a3ad30ce068d5491006640be4c7f02b7498963b5769d516efb9a117c60c1c5fb71617d42c977142fe1e5b3c0245e5cfaa1ee8dd8ccc4ea8878ce2272d152fd8b24032297ac01800000000000000000000000000000000163ee62f1ea9219b921ae7ed0f121426fe9fb8fc0056916c81ea9e713f1a16e3f2bec6ed0e3e552a7173f8dffcde82bb000000000000000000000000000000000f5fa0e4980d3d2b92e98e76e5d67815ce55858852f03ec7b8809b02d4b1e9e1a6c8b06bd481d9d153acc68378e779fa253bdc5565b6ebc219a75ab74dc5ffd304c94e67160389f87111899ac07a71b7000000000000000000000000000000000cfbefb41304008b0e7341451f13d65681f0726544f14fd1c0d02433d3c34a4769f1456960cfdb11b6bcf016b906228d0000000000000000000000000000000001adf387f4feeb3845b12449fd5294802ed30ae211d0837eff1b22c3fedf538ec7119c1fe69ed7d595f7c0fdcd54f684acbf64f93f6f85805517ddf0358ecfea1fd58a3666b8dd9d3773a28590fb8a13000000000000000000000000000000000d736d3b8b586e09d6ecb1ee2d7eb28bd68aec60234e90611da8f1e1aedebd9c74718d41a89186a4a5dcc3f7cc81e99e00000000000000000000000000000000000ec0e89da57affa4686494e8e0f5517f11532f6e294215bd060c370fc64c26e34ee1e2d77cf341226daf84791f5e3cd9d3f97893eb4f14f21f68110f612a444815fbf2f76b8399ba6045c8a44270df0000000000000000000000000000000008fef795f8bfb6de5feee020a9363adb1c26fb521439e405570b4e997f55af5783968b24d2e95144bcb6b38e4ef9497c0000000000000000000000000000000004d4e31720644e8828faeaeff38985ffa4fa2f7bdaa476b5c4d7eee81c89491eedd3f4262effe118a4c204eb555abfbd05fb554531f53b8cef8d93566df80878baa96f92bb54aec19445980b1a1f6c3400000000000000000000000000000000195f8fc4b1ca0c7041810b02bbc38b8bcd0711dccfd80de2b2f357f4a732e65492d57f455e99fc810d6f86eeab0ac101000000000000000000000000000000000e3010ed298656b91b5aa342f6be7250cf5504fc3aa26a2c7f46f90e852fd7799d96a85b25e6066b7d24794648a81331d79ba2c485f0aa0e35212fd7fecf970258903bd2427c4c8b97c2c425ee11909900000000000000000000000000000000192cc18dff89d9a94e6f0498419ceb9f21d70e42a1b9b64bea093d67075d499184d7b2106f74d31ccd1863beeb7be0a9000000000000000000000000000000000b80e940dce71be82106640d99c121dd21e99ba459f0dc8b1f11cdffaa0d8ab295b9711c23de1f4bc35120a89948b91a44c7017258bb979cc9bb8acbd3a3e62eac7aa152db46cd7398ef07edd031e4f6000000000000000000000000000000000b53f55edb182dd08e2c9d0ee43aa3d734143b54686295410f80086d3aebf6fc681d1150e808d684f47b0eb23fcaf629000000000000000000000000000000000d73442636f4d5dd1374cfc7ab29b995420995bee9808aec29ef7d1aac08c0ee51a0390330a863295af6129b7e8171d82583e821328ae90a7db16b20525228e8d915bc8d46a642cb0a06dfb64168cf1c0000000000000000000000000000000002bd8316507e6eded2034cf268b2b4660211e6bea2e82b3e3a0902bcda0f9ae9980b401f36178f681691ee7c10dc4ecf000000000000000000000000000000000e9af98fdbd02ef62ae90f1e87c4e7a8eb2089204b1c58dc6e59fa32d001c97f22740d8a13ccab23b5a8842b693504a8506f22d323a740553d6107e651c192c1dc6e0a0161a82351f125f08c77e53fdb000000000000000000000000000000000aef5a5d5b46d340fccdfad359b0499a5c62ff4e5d9b9d6f7a5fd6a97e96820b7fd226e7a2aabaea392869a40cd38e1d000000000000000000000000000000000865d32d825149d26b60969ca567ca85af5e280b835cf541b20b0a4db83309dd2b5700f802ed9106af73b912dcf9630b7f1bc0e1ebff8f935330c35573f9fc3b900606da9cca9a36b425977af47c7ca600000000000000000000000000000000153310de30b7a485753dd8443f8638c12b21083f6133a1c093648bcb566b33f73631c6fc558f32abeb0d6df8430e61a900000000000000000000000000000000005be397e9f77556ad952dba0540f46cbc7db910d5203cb976e168a7be3a3b8557c5f08d51cca9379552694a291d67fb4429b85fae16200da6eb8f62e95e027c24aa6ee2a145f6ef225139f29aaca29c000000000000000000000000000000000cc75210c78f2e7903b7c33379a6ab412e92f35de51a152cfd2f4a5d122f9e558b617d8a09670990b7f056e95eb058ab0000000000000000000000000000000000aee8eda7c1bedd39f97efc60af110e64662b9990257beff15ef5e7856e5ea388df058ed8aa6dd93cf5a81ba48cb88854a852baf21df9f4ec8d711a48e6ffb36be8c09c8c60eaa090876236b2eae37a000000000000000000000000000000000f396976e55dc0c46fc4543a8dbf690b8da7b6010a03e04c9010f01abe1b3beab8870be0b6a2c6d6afdf85c6fd38d8b70000000000000000000000000000000006c60eeaa2d94b571df8a6291c2b12b2ce9f17f414264e4af2a006d6aef2d70436ef0978139751d4ccafce200f16f06113814a3c6386b19f7b93c2c4e0eb1568e8bd3f0012a1ae1357b127c33808aa04000000000000000000000000000000000543f8d9faa2b3cac2518f1462c297595ca10d8415143c8ff3feecfa58b648d0dd0c25156287b2f29f3b6f9a60f02701000000000000000000000000000000000be673141c496cdeab5ba8604e081ed3006828c7c877d8990efd29798c1ceae3093e052f1f928fac0c5cf84174283844aba0fb0440b2461ef64af6ec5f15db381714fce1da6e03ca962cfc94bba26d74000000000000000000000000000000001342f79c96ba0a29de9a77cc2e10314bf2e15a7d192a90af9c025e2f23ff30fe49cf239b180cfb6f8c35f95c115777390000000000000000000000000000000011f0bfb11be253b3680817af2b929de9ccf06dc574d17cf6680643b87e5fadd06b54224f155c1393c870c2dd01d6bb07c01749cac36dbbdba5662687fd1ea5391ef9d0bbd24e05bb5904a20fa6a1e11e00000000000000000000000000000000183eab3c2a127818862c6cb42bfbc9d59c51043dcc28c68d3fea08331323c9dd50cc34a4ef66a97f98684a5d9a982a1d000000000000000000000000000000000228f8f774bb68f966f3ffab5d0928a59707d6fb4f6ca84fed831a8212f71085cdc27b1d52909bdc005b3250f26cff3b9680fbd6e6c7b1b14b000d3d18bf93242c74662ef108d711d85d8d442e415ffd", + "Expected": "0000000000000000000000000000000017ddd94df17d52e842abacf3467f4461e345cbb680ae624f98c6885e40b17940bc240da17ed0a1a45f13f2ce4ab8dc100000000000000000000000000000000005ea5144aa5d5393b98db4d23477011638dba465a542dc28691ee2807ffc08413938ffb74e16c7afc507f85d76acbcd1", + "Name": "matter_g1_multiexp_11", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000023977b65312306b1a746b94bebbe79ccef0342ce833684a273d8baf74e0ee71104d6c453acf02d0c4f3909144b1a3b700000000000000000000000000000000050494df74705eddbf97da56a21bd673e2b0d3a9cc157168b8b413a89359c9c48f09e756f8e6ecc67811d4bd8043bba91ddff10527bb64de6ee2e3ab4959ebef9e7a6964b7482f9fae396b2b9b0cff9e0000000000000000000000000000000015862e2e3cb73ed2ba6b0b69dd9fc4c308c0a79e5cca2d2a42fe94e9b029b22b5b6aefe0503798d78d4599dd5c201cd0000000000000000000000000000000000c49723dfa37fb1592722b14e6c75110cf2252ad5170131bb72fa35bc359470bbda292fc2a459dab89900eb251e848e12943fa2957d267019309f4fe5b6725379d893dcc270ff7f35b3811ad1d8d12b1000000000000000000000000000000000af2d03791884033b8293fb636b0c569d9b008b075c6c71ddd7b0c3f5e139a17e1fbb18144d1ecf491d2fc40b7369c0d000000000000000000000000000000000d680b707e32626219fba862cbb18e39e03a8b9ac78f7bde619049748f7f0e49cc0223f1111dfc1f5c851229e62a9cdc1551a3c2d0391fd8dedade892e8e2171e652d2a9b52f2288451c55f77fac788a000000000000000000000000000000000b442117cecac25834a442ef457061634d863875c10e1809a3b9464eef6760f074e06c046a74bfb34f4d16255cd4f62a0000000000000000000000000000000000febea79eb8102b2632b6fe3151d9d972d5dded2893a117a6cd7e2bb662f042131cf06d04ca5c88c8535155910f9e008eb2fa94a5c97c28d95008dd1fe60137b34c2e763292d1b86993c02790b8c91f000000000000000000000000000000000d355c97dcf055181b8c523bbdf7eabbf064159c15532bef1e1be56146d72c08eb5d6994a3be7d6f4a4ef204f0e6d8dd000000000000000000000000000000000cd6d4e6df1ef7cd5fcd360e8aac511a3aea1f3e29536c193f4c3a2ff0f3ca16ebec620cecddfa8f27732eacbea75500f72ae1def6c988f9242bff0e683b8d2a5c1aecfd6ebb9442131ec5b5b825d0f600000000000000000000000000000000072ff95f5cd9416eac2cd83781acf856a0bfa567a079bd3cc909eeaf5a3fb31090e3e2ccc3acd44b6b04b47b5b8609a7000000000000000000000000000000000b7a39ab3ec7de26c86eee5d8737c7ae7e5969b03457b7b7b5720e3492ce254a63e031fc477361606a24821830d27271331451748146f0564ab0d91b09db87e8a6ba8b14f8329bc041911616195f9fc0000000000000000000000000000000000886babc1acee93b5f96e4a0700805982657d15170c77468c77000f21978f0cc154a265de2f766d6f7f8600f378b219c0000000000000000000000000000000013cc47f0a1e5f7315e6ddb9003dbf901824e419854d234676e4a8593bc5ad4c15e8c59ee6985d0b729e7d095e9b7642416d298bf591bd927aee24a37c5ba508c3bc121f5150fcd1a70c1f27a79da7d73000000000000000000000000000000000567f08c96b8431a133cb284144f6ec8f7c68722f18ec257b4def0a18a754507eb477f405b8c256adb797f45ed2755050000000000000000000000000000000004945b59bc84df7b793dc759bc2a3352b3eecc5cd59bea7a9560c06ef25828ad2e9ccdc6b3beab7a71a702b829208b8556be810c3fa86e35bc935fc2b27971c9c41d03c8ab7b6c8869db90b6e0986ef4000000000000000000000000000000000584ae62e22e0c2fd733cf2093f7a1f3c763453cc34a7a7a4548d8fd43c95f13be06da4e41f257f6d38e6e6921ad0f6e000000000000000000000000000000000dc803ba6a45298075a8cf45939a61760de44d22407da6ac0d63939918daa6f78e8d0b7cd794256f992cc89b8622e737aea4445926775a6baffb4dbeb249dfe3b3e0c29f2a579927f540d8f6451553ef00000000000000000000000000000000090848e332eec39e026eac0e6416d1ecd5aee8b4d82712b6c113da1e7d38901470743af43bae951d4141592f6057caec00000000000000000000000000000000140f8aa557213d49097ef315a18ae7e62924a97c71139555baf08c70674031934b629a457f75bd801af579f9fe9395579ee0e58d08779add74b68dd75e82df172b719cb5a772b0bbb34d3401b9f212ea000000000000000000000000000000000e29d6fd73f56b4546358967d7f0080e6cad97531e3d672a91a6dd121f35cdf0f452dfee1ad98b7c832c2878b495f3c100000000000000000000000000000000050fe9818b36baa8ccef166247bc673baa8424e19a19b199ea5e9d0baf56fd68cb339fdf5d041b31545e28bb2b8fe32c773d07cb9d20744a2c3ac88082a8d6606acdc892666753793a2b8bb81116cc6d000000000000000000000000000000000c13e5062ec580886d09c87c7cc72f7f19227eca99b0092a7e9759672ed1405d21fbdc8985847fa1b57129ac40bb036b0000000000000000000000000000000007d6407d32f846088759be5369c5ab66d2f512f00c93eefaca86a86bf7b1e3ef39ab85fb6c317c28c4e331a19b927650f6bb1445e9146b117bd0c95b009fba670a5391874dd314cefc884bdb0a4eba6800000000000000000000000000000000112839aa4daa7b0d614dc6a555731cd4b595a0495f2a2f0f1a3b3fa1b603c36348e265145583e8bdfa8a2a26c1f822f1000000000000000000000000000000000383bcca42f2513ce42342f4bab5377ec276bf0f1910718c7203d450f15c5b6a3648a82e4cd1222109171030eaf05292d4158de4e23d793ba77c24a70f0ad07314927fff34361b0d74b25e8922512d7a0000000000000000000000000000000010aa255df04dde054fc069473dbbcde9c68dbd71048b195df2b23e5471e5cd39eab5658ce689ca09db80c72e099907120000000000000000000000000000000013cfb46746c9bd13aa88a24ef3097b35ee2302e76b19ed001baee8cbe5b19c2620043efeaf81697ce48af0717a1066eec629ef41d5a2ce49fd81930406f19e760a47074e159ce372dd67e7ea46ad706b000000000000000000000000000000001888735aecb7125b08f2a840957887fb5be0517788a8931fdb8d280579776c5ad70e6454303ba23908bc6fb864a4ea290000000000000000000000000000000019479631b9c711f700ff2353aac97cd0ddbf14669cc046e686ef19ff0bea0aa74b4bf771882f7226de0d4fe356301912c718651715ab786b4855092ed21be41b499b7824d0bcf68ad31b31ee4cb730d50000000000000000000000000000000003233c1edded239fd465f7f7833251b98ffed6180b56676bcbe2ed361438d26db671c03a6454a4fda34111e358eb2cb10000000000000000000000000000000003cc9768ad0576a34550b913a895e2687481c6adb3371bad5cc8f9792c61aec555a52bcb267c337649fa00293c9b4af3c685a2872c4980518fe60c61e2276ef53c007166f7eceb355b4cd533f42c00b7", + "Expected": "00000000000000000000000000000000117879988edc3cc57fe19ab04eee6f9e94a30811b809afe922d63bc3d785a3a581b69512180beb89402410a4d8abf6620000000000000000000000000000000000beda376a5f1499882c560961f8b0cfc44c712d6691677ea24db18b138af8a21a5a4fcb9cf5814473b0ef7c00719700", + "Name": "matter_g1_multiexp_12", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bc83829ec8e98081abac2fa8e0572e819b570b2499d4cd1e6748f48c350c392f5d52c672dd0bbcdf1469414d7ce929c00000000000000000000000000000000007d1574eb65b391475b49857766c808fa95ac2a78755d8d740d2df90bfa9aab3dd5c850d536c9794f6cfa2f004b4550c067ecd54e9ef59996493f846ecca63bbd7ec28da586f0b8d41bfdc6d97a35cb00000000000000000000000000000000022e4ed74f98d69a9bb1037a307eed57210d3ca92648ca9c54546c7b57102558ab12f5d2bb46502ba3c07529f64b72b30000000000000000000000000000000005ea660c44a9d36696a899ed1bbef1d951656f2eae553f4f124ac9cee3d7de13556a7884ffc07e20d5afb7bdb9c6f1638b5112baca5e0f2bfb885c5041189612918d203a117d886bcb3b27df7e64d17d000000000000000000000000000000000f6f9411caaf7bbed9b05368ed8bbc35a0439a5c1ae417215d10adaab203aa0a607642aa8b94f4846add8f5f8db755530000000000000000000000000000000012eba1de04ecff3405596452a4f5830bc6c8af2ab0e84115a8a04a2cf60400eb741e8eda78ef733338494fd4e7b16f812db7ad39ec8129e9e9206bd46cec6a8ad3362ade1beaa97befe148f6c67a9c2b0000000000000000000000000000000009898acf9cacee1f5750d54798a4c31796fc471a17c9d2ddbd00262f5a82e3ca968c3e02334c29aeae9b16d8916def1600000000000000000000000000000000017f5a3907bc14b6cf182af2778c88704fc6b02d2b47bbbd6e40a448a89ad1455f868dba330452112973ab69489534ece2400a11d9a67041824b97a96f0ea9da8848e7990373655d76e8bd4eb84df5dc000000000000000000000000000000000e782486684a6c3fd7f5977fa40038e8a9ac0a8611e79c18ea5328248be9ad4d95c63ba9ce41d3b4d85701283369063f000000000000000000000000000000000a98e9f649d2431991dbad1cc7f4ea0c89a58bd7e75e4a5bf7d9a728943363777c1cf84bdb1853a976e4e66a6d3fa8cbaa2d17c409ade92566ddb3913806723d41067540a36a9c283bdacb273c5b258a000000000000000000000000000000001171bd468b4d40e77b8264e082cf7a168d88ec3c21adb6c33f215e82f5ff3d0d2314e0fb12d7ec93aca92532debde74500000000000000000000000000000000099bc823a44c54fd379798eed2559d95275b324481c248d452a02755e1b5a48a7b0694b637dce4c21ad7d73a63cef2a3e5e3d21862b64e09a0893ece646de60cd66aa483662125ffabc46cc52f1cdefa00000000000000000000000000000000190f9d82f079757ad752b17b419c63ca09e3c8a23d0f56b1e738dc8ff4d588a4a2360687679e51bd75615c18c49103c400000000000000000000000000000000191b91de53dc0807b537540e81d9219daee48ad27de9e5ab2980dcc09062b80dad2a0a9024c5b0465e04e6ea2b225d0249510ab1b7850badf58cacad67fe47135f6524f0d160f3013e8ff1c881e469e4000000000000000000000000000000000c8f48d3dacefba0e1719f74867b539a65d640d2372ad38bcfc43548f7ad3d8a04337878529119b9175068b511efb04c0000000000000000000000000000000003c7b5c11985fd7ff7c75e2cdd8670f75de655aa81f6b99206ed8a344f86ae85d2fb14bce434a25a5ee25c903c238341713aa69664a8c721cefa7d6dd3fe9f92432b4d350621d5297805fcabb21ff8c600000000000000000000000000000000055e115a8a7edec3a443354b381f584ba13a5802520c54b51ade1bfc7c93c96c7cd66254738929aea2e88edf2895d82f0000000000000000000000000000000001bdf3f4b489cc22c6f57a1eba23d3348c5567d0dd1cc82924873813b92a0d0b2b90727589028b9844d351e13c6e3868c040d8bf0a787346560fa3b100b2dd9adb3f7ee716b8103abdd9609363345ae400000000000000000000000000000000041fd1625afa48a446454d6613c17cc6a65b3ec8b8f2125c0eb7b8e5d07968397d43969a6579226f496d9b24dbb71b820000000000000000000000000000000006131c506f243b5ac40354f826ac1838839eee9f61301aabd88e499d40e57df3122edc8b36f0a8b16b72f9ac783efd3e17b811aeac4fb7d91abc655f8a4392176f9060346073c957ef903e25d10935a000000000000000000000000000000000113a08cd0728cb3bab3886681d8cd4e5f14b3a4a7979f9929ed4d8dc77de6a65f7bbbf8a282818ea3f21e6ea59ab1f5100000000000000000000000000000000032e95b26193c9768cc9967c9710c7695f57fce8a4e089f290526842963504cc8c99981bed3cc7d827eedcf686c813c3bd1f096026159218836a46b9801a4f0c43189324d20220aca777b826eaf25752000000000000000000000000000000000ac19ea5cb7169ffa2741bbef922e0ba307e2bff5eb67fbd2c1545bcfebb79948489605f3c6c072444093e996594c95700000000000000000000000000000000111c277e16440fc3f0cfe16bb81b927cf76553fad040c1825210fa145240abb0bfc8a40a016db15844b8830d4d725da3f221dedfc21098ff9a9507e493d0fdb1efa6029fcdab23a016515078c76f7627000000000000000000000000000000000906df246466ac720b1db9445902aeba8ff5c747133b037f29b33880b3f511621a0241fcc46adb0532682feb4e8819bb00000000000000000000000000000000145b356e384183788358353a69c49332ca137e9faf30bbcd7a67434a980c27630c3f21781a36fe73e82459318b59331bba5b30d1397bf28100f108b84e05107ddd6cae2e82f1973ce187e8c3a7d02f3e0000000000000000000000000000000003f2f02b7ab2d2165836349ef8f53e42d223f4f6a892e7b72db93362de3929fcbda5edc4606766fe26ddfda9d09b283b000000000000000000000000000000000feb10a6ba91dddb0829cd6b95a78958fd55cdb120a7237a2842df1a2007530775848c3976804824698a4370fb022bdc19aadc83d1db9140af303c0492d2b9bb9e2b53ddb62cd2132bdf8ef62aaed683000000000000000000000000000000001433eeb265f1d57027a80189806d071edb1f5ccb97da0b5e00dc75eb88304ef2eed287f5d74264245684a1677a23b3f5000000000000000000000000000000000be2d2b5fd307192ef8a0b2b4dc9970c112a236a71ee899a0a5147012a206a0274d34901594f54bdaae26f2552da481b87eb6fc40b00246910626ab66bfbac96ea09242d1d70496466e4d681942050700000000000000000000000000000000011b50012e0d92c0f74e3b6e83d60bf77e710dc03baeedc949c1af218bcb87ca1528a745aa819a5b615ac355dec360eed0000000000000000000000000000000013cd46e3cbe008dcec36e64285173b7d545359c23fea32d3a1fa2918c5c5d671a87d90791b70a740564c0f731fbb32013bb5926f36808c0024ea7388998b4cc8c6c48d32917f6456b39d514143c6eded", + "Expected": "000000000000000000000000000000000cd7a2b89d286a421808305db523aca962c3f253f6defcfee9b74bd7f00b3ca8521b520376659d584b03fc5dd736d3f800000000000000000000000000000000117b8b8a8e299cb0fe3eee45651069a21988a2421b1d349529cbaf7362425349148fa043581e5fd275cc94a4fce44732", + "Name": "matter_g1_multiexp_13", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016b98dda34f703f90438f5c2624c1ccc870b18cf8eb964800ec97179f67f82c521b1cccb1b81ebd3484da1349e4c0cc3000000000000000000000000000000000c743850f15041ed9023ce296570036f96db4a510903a0e7971592348651b44afc0091c8f0d6e86bbed8bd3f6b28072af44b0204792359895b448bfe6ffaedc14d54a6d72be7a49718c0a933807a399d0000000000000000000000000000000007df1648d65d140c775f729e7739a807a7f430de0711671807a7154a8e5723a2b9137175d47bc319ca659faca10af23d00000000000000000000000000000000199ebb99b555fa438587b9badcf5d7858029e905b97229f1de4ecc1940ccac59503e0e1a99c9571d50ba39ac3619699bde25977e7426cd5652559626ff8b195ab7ec679de987a6a22a6a0e366759dea0000000000000000000000000000000000027b64caa979063b420cff77cd259e54bf86498f87e7297651f9bbad6087a8b4b704b27746db53f8869d080a22363c90000000000000000000000000000000003239455ad4ab885727a25b0cae5115d87ac9ccfd93120ffded5130ac683b3b2485fb358e3aca3b6cac4bb3da5b4210d2e7ae497b44f531fe203a599622954804c06d5348dc17eb1537e750006584b210000000000000000000000000000000002f14454852a72159581b8a931d863c65170fa9280cb811c697fd067a505910d17fcb71b27963c2a6a02264aa0e1fa04000000000000000000000000000000000303f0857d990e90e19a076d2d331f5eb7fbcf102dbf8d4cb29f159fa2277eb413c0c10c3b501cefd9ca581ca62876c5e073adfb5ab96730c53015a4ab6210a35a37b2331ff5123e00798c33e040a91300000000000000000000000000000000192b3fcf7dd2534f226ad51f40e7256064eb788e7c91b1155908fb752ed4e854fda44af13f0c681fcb818eb4202eb64100000000000000000000000000000000125b51b4cf8e9427db9baeee0417b02c2d296ec4adfd437667238ffe5137b85b40fca4fa705f81d0b4b6d788a8456f1fe6e752d40d411f1ee6e67f48109c9a059226b446601047a2189ab815a3fe13c400000000000000000000000000000000130798c851758638c03f90f9181814eba97c5f93de85a71bbcc360bc53e4491e8fea38ff8c94061cd5008b0333ff26af0000000000000000000000000000000014758dbfcbbf0e1c78fb3ad4945bd300a74f2555338a009d807e2cf0e5fe582729556bd3ecb79db131ed9a72c3362c37e657fda33cf4ed1aa89dbc19d58fbe3043acb5795dfb8c0cb97620f16f8f243500000000000000000000000000000000093318a1c189c8957c9736a56a4b3e8da13bc8a303303bbc106148a0a7f319e30f5dcd11787dcd3424255c7a02cd3e760000000000000000000000000000000015f0767a3a1e3c448ecbd4ac8c4c70db6daec95a1e4b3a69cb5dc10fb43f8ad030e360832f7726cb166e0fe5fad0c860c73458e18d6f832f362dec7c49140e6523ead045131a1b719b0c836c1ef13a79000000000000000000000000000000000c7143093aea0143c58e2c459472f44b6b759a3f036aefced481eef6fb3a1b2af72ae4cc4de06af2a8a99e27cf9cae140000000000000000000000000000000019f44d1120d82e50f7da3c1e87a47d3433152b7141e9085eb54e04f30f5931d067f9ad559cf5d092dbaece723e6a724138cb0a2b191f538b30187dc730a8c665bbfce8186883500baaa6c3242a0d14740000000000000000000000000000000012a171d46d2bbfab83d02e023f5edb18e353ea82174d1a1653952bbba234c7de4fd5ed212c81f795e8c7a0b81e37087a0000000000000000000000000000000015dd85eecde306a845917187c404cee066038a764beaca9a58b859873b06652800291506b4c995581866a3c2bd7f19618a27de64d41d13ab67c1f7b1a7390ab4dbba7d219dfeb31255f9401d5b3c62f800000000000000000000000000000000176e512a4122ef10ca1fe6626cd2c839d4c573bede92092e5ca55b0bb936de9b62297b2a598a033e9a7e49ba9aabb9190000000000000000000000000000000013bf0f4c0dee3c9298192748497803a906e4192333b1ca61deff010a63eb8e4cbd63c7bd5b5546540e71bcac6000eb5380030798960729d63db70b8bc3c0030e80d9b8ae766e3330128557e6c34442f600000000000000000000000000000000066bb65bbc3f8ed9cdd5cfcdb121274427ab7dff904551a60be48f8197c84400d54ec27ed25c2a09687f1067c10edae5000000000000000000000000000000000afe1e97e1dcee30959a6411328f0d69134bb4c3a0d5ac53b87f254593f7cecf3070eaa9e19de76ebc6e1052a41ccca00d32b6969af54dd345f42320ea96def3c6f4dfd4e22a82686b7a3c57a0df5250000000000000000000000000000000001439b3031d7272f92c7072c6b44dd3a1c328251d34e1fcafc5f864b7072086168fa6f398d6334fe7fc56d6fc0e776eb600000000000000000000000000000000090885199f56df470628357ad224e19c29dc435ac54b8c17a7df5cdd24c3fdfb136952063dcb446ffe271ab5775bbc51969848f1b8b36bd28967b762168edb451322e2f0c4b99b7f9112c9a66093fb3f0000000000000000000000000000000011a0c8f7d76a36e605f193efdb5f7899d7db5b89ab0603dd6184e69a7e51f0d7e12f466fbc917cc5b6dd6d4a0bac16c30000000000000000000000000000000015dfa17cdd22984bec570d2ca24a5ac373f6f174b66aed70a15ec892caaf92c73ad3d7ef11b2f4a0104df8ec5397f5e9957ee08a513c5e22bbec04722575a9b4f3a1343db0ae5beef4e66fbbe1ac90440000000000000000000000000000000004bfe701f6645589925b34c1117cf62752b4e242e38bf056ef36515338a5c3698f561d65b237123677d926c1616618ec0000000000000000000000000000000011892535443daffffce0867dee36b7bc711006bc0963e6a061066b889adcde877a8dd3661250b6bc48064ed9dea304168e0cf0f590f77d13819001916d2c58a654d0b9d3c47c842f2d649cb2570dc0d50000000000000000000000000000000017666cd38f1e7139fd032a79776301e4eef7fc22c144900c711f1568634d9712b2e3566bcfdd152faeef20b47cf6cf7100000000000000000000000000000000150c30df0eb5945ab96603b0f36120a4f697b6958a9929f6dd8d1b8a34a1d1d3f1a34bddf9ff7f1e105ca23ac34b6f7671a8c2a479dec43d644ec4113142e666bcefd6d729d4faccbc147effa836ddab00000000000000000000000000000000107f9378f695524614ba000d6fd1b72c5eafc4ee60c5ba36ddb72814936403fded547f8d15083186f7f5f5d94c1ce18300000000000000000000000000000000140bc17d86038d4fed0580582f55d90259b460ddaeb37a70063d09d83f5fb6c803f8b467927758cb7cc52a2a6f8a84ba2d2d59a7f138327a20263d6338d2a92fa5a2f741daefe9aa81d06f20a6fe3641", + "Expected": "00000000000000000000000000000000179ba87e1596396fb5cf88f91f56e3fd6f01dda6f95363be3365bd42960ed620b7648863524c22663bad20d128d22f4c0000000000000000000000000000000001ad84c4e62b0494bab4f2ec2931d2331d88502674a1bf58b765eeb022f3d6fbe8f8546818d965a8be79a94be86292c8", + "Name": "matter_g1_multiexp_14", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007eefedc0360b258ca2bc9add8e23b9d535f35332e7a35952fd832d7fe3d448aac08a01073876a21914a501dbca513850000000000000000000000000000000016188049abc44154b244c6af4e115caa14a977efcdd524ad78e5dce010f2f48259708d14454630eabf2318bb271315007740a826d524fdb7969776bede5ada468a0115229152907cb2b050760c18c8e20000000000000000000000000000000010a19a7cae27e432b77c77d26653c6f17507413a5037621bdb096fa4f33e68dd86d5aa3b52fa54655730fd88415c3eea00000000000000000000000000000000031925aae4540280dd6d08fc53478fbf05b0ec784d04abd04c3a8dadb04ad9adebe87101c6401ebb4a808104b3d7e88fd226f56bf3935ea95d976fde5790ba0584e5bbc78b37279aed8e50389899b9e9000000000000000000000000000000000447e249cb49d64494fb1f1b18c94a44791fd8d4957bac13df1f992480f72a14c3aec517184700d87200092e866d60ee0000000000000000000000000000000018a12284086bf2f64297a65f6c8b55b4ff3b791372b88aed9085152e24b1214655a74a182e131d7023f949c8cd9602dbc133e1989ac82e4d1c9852a6c7156a34b05784a58231d59e3cc875ac5834d5c8000000000000000000000000000000000780d3f5c10ab7932e3e3b45c942d1ee2a12f28070674d9c666016d084613f3ffbcccfb576fb7779feb2d0e614106c990000000000000000000000000000000000ea320730367c89cf162305c69ad594d8730d71a910f53143770f50024bdbc40b7d2486b1eec63b1ac7dbaeb51ef9640fdae1b53f6442c4378774a981c90d282d5f8793feb2334470c873491e41740f00000000000000000000000000000000049ff517593107482da6805fe4ab49cfe9cf71c9a95eba00091511719eb76db98f71f089a701c6c136b398a40dccfee700000000000000000000000000000000038d1566f1057bb2da7813c39374b79149e598e1651dc3541a445264693495dea35a6515dd2173f7de43964dd5e8257d70f1de7cc5e6a2cf7dd4b6e60ada67ca47e7b9417bb5f599048fb0c9b2abf33d00000000000000000000000000000000016baae36e71ce87a6dd7136f7572788c256ef88cb73e550641f14a557828e06ad64f001fe78d69465fed92b67e8dec3000000000000000000000000000000000613a6b87249bfdfd01016ce920aaf902de85c066c2d64c866ca0a93950a1a971cc561560a4122d9a766e38f9dca9239ca82cffdf59b742a736ae9a6d36f7840c46c20c126ec054f47ad52a22948d721000000000000000000000000000000001921d310700ff4e2868a28dd29ae6e0216bc27ee9463cc8dd2823a1b4670abe973859e86719142525ae5c76e2df0bae0000000000000000000000000000000000b4b4952e96be92ba6c78037e529c197c9404cfb67af04f39d24045c742b34a700057b2cedb3193dad70e64944642c01fad69492cab4ec7eb89ed37f1e7fe898ff49ffac4ef2aeb75d9c6b544109a08f0000000000000000000000000000000001dae69033cf21e6e1618efba143426df1501250c82f214ecc9ccbf957e685d9831533cf7f747fc22309227aca1d1a2200000000000000000000000000000000114abe65155656679b89a11c7961435ea9f77fe2f957833dfb61b8538695e2569e509f0ee2c0bfff75f83d9399a3d49b5af71c9baaf54967683f8553f72abf789da465041ee5a92c9ce1ad562c91c4d700000000000000000000000000000000128e019ff92e7171d3c791bd4cf75b0f47c2a9d8722b4a8279f1178db6dddf8a4c00083a935168518a1c26a56b23624f0000000000000000000000000000000008d0c5f3300e73682f4756e6ff1d6722dde576beb587301ded34427d6935e59e76cc8a8cb0ea5f659db9ad5435851e53c7effc9a7fe773a420ca430c58bb94e7baf26b9a97b618a15e7a18b31e5914f1000000000000000000000000000000001110168c2dc1c2f0df0dc645970c0feb03bd644fdbe1576d5e5a8090282bcb81ac9be738d18e72a31ceeb5ba826b40290000000000000000000000000000000013fccd2429da394be698812af6c3288e89a26f0244327cd38bc85d5c3bb934004bfe24449534b7d271add7a279bdc8512d5a3d0370f4a58c21016d208609f1d3e7cdf43abdb85199bfc67dd12f589b8a000000000000000000000000000000000199b9c9772a8c1bb0c015c467098bd38b5f73e5d0b3f627c8279b8dc853fa2952faad01e7be353a2762b8144cc1614c000000000000000000000000000000000f781597005df947eaccca59939253b936d1ae84805ec27dde0dc707a4583af408672addb2eea607a14faec9dabe61ae3549b86ed3fb880269be22b9cb8be6f24385bb5e24bba81bce9fd5b72ce2ab710000000000000000000000000000000014bd5d22e4bd2f7b8df4add90446650fd83d72d531395fb35dfcff72eca0886ded935e7a0e3fc99a7dd07efa1ed60c3f00000000000000000000000000000000122cfac9ae5c98dd162576c92e9acb4582b9eb67117bfbf4074654fc8bc473793a7139995666447a7663f3af1446dc35c8f6dd56906fa13144dc87c31b53186b0683cad220ab2de89d2fb515bb269cbc000000000000000000000000000000000f67ef1eff6875abb96378e5a7b1602b5dc553554987589b9953c4401fefdcc5cd7b196a1a65cb3daaa13f9fdd703835000000000000000000000000000000000f58ef60be74af52c23662e6b405f1d5c359b2ce9d15b5e139460e10da0e31161fb52f529c7b406e52c6f600d5670f3c9ec934eddc44729d05f193ac927fbcb022288ffb2bc7d4f46d1bfcc7efacef940000000000000000000000000000000000b7dc680fbfff55bf0cf276a864f448d5a9feef303d2416e7d87d6d669456b951a8769026bbba545685e1f92277b182000000000000000000000000000000000c36a14d5693b0d9d91d831c0581d1f4ee801f86e5c32f10cc400f66b58f247594c30f0059b4ea79995d6f9d90b0009ebd211ec887635ca841c4608fd00bdc0f5fd0f6365dcdfd7d6f4c36f4b25b5b1b0000000000000000000000000000000014dd947a01add8294f97a84850e6dd11ed4a513e7656daac5b725cff501446e95e3b966492e028ec23fe1238b53d99ea0000000000000000000000000000000003d9726342018f802df12fc867998b6016743739a2a4f47e1f6f50992e4fe23a6bacfea0e7ed5be570eb8242ec4101ec10bce61d4e35770e7737636c0f9a664eefa948662d3d22d1f1708fa48d3043de0000000000000000000000000000000014182228dbd223cb5b601521608bd7f87659f86a7a01233d4158484024730925e3d841e05e07f2a330b9495fb028db6d0000000000000000000000000000000002e0ad163d40a56215a774751434d19ea17341f41701d41e521983ff753ed76c435c6e2b543510e47060edaaa06d29f665c86930c1d142985bf85ce70bbad170947e850e5c6ac7803fc45980dd37a57d", + "Expected": "000000000000000000000000000000001364f0b671bbcf69b3a101dd758ce54434d59fd053591cb744841ba2061bbe2be91cc9f2cbe1ec058119ec8a5e909024000000000000000000000000000000000cf5be1c16fd10ff97a154826067ab7cfd7b78ca5ad0a2e2117155f1ee126286019f8a1049b86095887e79ba67216a33", + "Name": "matter_g1_multiexp_15", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010040f531866c4e6fdc255e2a7ebcea89ffc36d44e265d5129f8be44b07f00646a7810662723546ed158b2cef146c7120000000000000000000000000000000016d6a5e46b2067c29e11d00b6b6ae9f0987afb4e9357c1d223fb2962589c3527f94d4e01f2ce6a7c57f971756163e48108e559e394a9c1ff07a45bb3e022f9c212eea4ee5b77db1c5b93ce72c0512b790000000000000000000000000000000002b6e3a234119f0f06a2b049d952230da40590a84d241ff76483169428e787093ae88c4040c64f2f1e3aa5be2c37db3b000000000000000000000000000000000732aea9a2ac5612ac350b474d9d267dd1ffa822cead992d3eb411efcb6992d196d66868a0e1f89dd47da584d075d4f55e55826db8d12169a31ca27beec80554954f522b56f7994c62bdb527c2438d5d0000000000000000000000000000000014c3187e04024d719560e36b5a63228a685f085aa080c82244a3a704aa2ed68b219d1c699e49dc1fd648e904ae638e3d000000000000000000000000000000001911df5a9f709b8434856c14fe4111935156a984a5e8cc27081059840167c3daf468a290461bf6cbd2ea4fa21255d7c11362e8e39ec661cb3c5af64e0001cc94701194344a7404f1ecf7df0d5633eff9000000000000000000000000000000000216ba7fa8afa06136b054c11bbd978209017dc4d8c8a2b05fa717a97f4d88abd9efc1e9879de709b87d7de65c859b65000000000000000000000000000000001797c34bdde358ba5533d5bb531915545e3ba359ea1fd66d9dc2ce06f7cdb64684bf11e5bc02097f3b957957c986de1074d3d66cde7c4c8a4499708a0c6f7c4da458eb970b6ca87e23601c702365b6de0000000000000000000000000000000013343f0b79485528b8a5ca5e0780e8925ea7277970843ce3699046673a41c977dd0cbbc97273ed47a1a105a0017853340000000000000000000000000000000010f3232b511b8d529f91f1ab613af1e2443947fb2e29c4f98d1dbab1aeb965079f64281d0b10e58e26a4bc0577943873389e0d43f2006449fe2de506dcdba4cd0e6077e2228f7d8b6ec9d8a4129c494f0000000000000000000000000000000005aa017b9381423c9d00982fffb93a7cf9bceceaaf31895a17ce3a9bc42bc5b6f5c69679ebc91c9e5cdaf7651cf78621000000000000000000000000000000000c77e86d84377ceab757a0da9bcea401b3db29e8e577da793da0d5338eb471315315171ec4bab4e9dab36f4ec6d907a85f8dc332cb31e43bc2e551356cb8d1533c6e567d34622667e7e4e3ddef352f03000000000000000000000000000000001971e5758027516443fb373a8ba8cb98b78fd5d16b42a83becd2a9b06e8ca7d255fd687cdf10de7dfc6bee5cfd199b1f0000000000000000000000000000000013465b45ed2469c2dc6ef4b4b8ac90b9b30c793425093898203d3b13d76cf4b8e0836c6fe57e637a6eb08bffa3bb55250dc7052044251fd360538fa6d5dec9fcee53faf2f07de5d8df212d04f968a0b6000000000000000000000000000000000c14833dd82daba173eeb40c29912c0edacff741bc3ab03ae4911c334cf91d5832a8847d7e175934f61089f523b77fdc0000000000000000000000000000000013820819e27a27009ee44a5cf02e995bb317ee49b6068d2e9f4c5f072d233a6808d0feb61958e047f70b2bb1a5426319c579dd4f361fed9084d9c66a3ec4c6af5293710ba5299df3abc4cbaf5802b53600000000000000000000000000000000105a1323577a38bc9495090b4d023a9dfed8b510a9a6d755f7ad6af72eedf1c92e6a5172cf68608d8dac34242d1e0eb200000000000000000000000000000000147d889d919a58de8aad3b4735359201c47d8961a1dbd321061a81c67b1a05c6732782975445d9c1f2aed12b0b7306f469f0f3c3f516ae34fbecf45f4636c22acffbee765952b332c0f3d8cadb9c93f1000000000000000000000000000000001335049a2ed3629ca83f041e4ccedede286445e4b79f3afe225bbee6273e0cc84b32b91c54991dd072c54ecf0d6c538e00000000000000000000000000000000098220fab5661a40cf34782efcd62ede159c82dba8c6e9f032f7216b888ad85fca1031c4622547a03f14185b3eb6d0d576618f1954730111e572937cf0c9f7b3298a11d18cd890cb419f732c766bc6210000000000000000000000000000000018799254b6fe847f53e2892343dc77efa3717bccb3589b776584fcc9e934deb3b8fa4c1ac0709ce505ca4d1504ed822c0000000000000000000000000000000017b98c35564c9d67b77bfec8ce23310c93167a5f75a4680420e8d71d8851f4061d897fd86b52d4a8cdde391c5b21a63afbb9f2400ed1dec7ea63d2b26bb3e9c2acf70117e3026626f6f88a0787617788000000000000000000000000000000000499468c8da336124bb89285a81eb76fb05e4ac2bde68d2f78f1de8926109631ee3e33eeebf686c7f6b7b4d68d13d2fc0000000000000000000000000000000001ac43e7c6d46e88d88a195180df6a3a91b3aabbe54f88c8b39168ead4b9847a031561828b0076b9b94c8fc7cc0c4636a0170d7b7604b8951a95d49b6697e2d0cd2a41c3671d8f96e936cca911dd516d0000000000000000000000000000000006690b59efd7c3e7f9477cc35fc5e13a5dc7f485100ecde7771e7bbd9f79f72719cd45cc9e0e791b7b5dee6f0252c53d0000000000000000000000000000000008b6f82c8514f7804a1d75f347f08334064b81ff95765355550c53098e19a4a5fe59c6a9611f4795981047754a6304792c2afc06f19e627e9ec0edf1083823d30ac569346040965e1c92e0c15011c90b0000000000000000000000000000000000ca51cd2fbe8d015a2e80bb4a24f52abfe6b99b1fbf1b656d4398f76e8e73e7a441dcacb43a4bd0a1dd45df2ed03a4e0000000000000000000000000000000006269d0e0f77f3ac5af8f70905ddb323362ec5de91a1eb90bf3773457a2bc2d018942e58c04013b83a7764b6639ea87c141d0ff346e46a20c2498a74f910e9bb2d5d8530afc7ba47c3525861c9e8c59200000000000000000000000000000000122f6c35f7b1456952b56a5f90ef9066a191a4164d4b2f81965bf7318d485c725141576e5a1164c3c17a8bc387c9262800000000000000000000000000000000086bcc20a2f0f0afd4ce845243061e1c12eb238f2d3fd711000f259c31d826c2bb56617479139cd611d35b6548a438101d688a1aca2a837e0a353039294a9988a7111ac134a6a8a68e4f881e7486025c00000000000000000000000000000000008ee124fb457671b65c0f9f550ce1ef196c3bf13a5403a3a21a801cb1a335012b43cbdab33a1ace7f84a998a4322ae20000000000000000000000000000000005b0067f853d9dec4dee3b2834679b9145bba170f22b7e1dbbb6ca3dd98abe4f41673b283f9c43f2cc7ee2305b874a0e1b59c33ff02791031e7a9424c781ff17a209d132af06f5b825df363fbd902cd4", + "Expected": "0000000000000000000000000000000016dbe06af92533e96177581a7a349811e0a3d3826241c4ca047411d5b24c76dcb6849df7f4ca050286b2d84afd71ec9f0000000000000000000000000000000012dc4fc05526d6dd6da27b117294da4e9473a34699871b7bc9f02937a8308c57b5387a6fde0dd09e8a01702a8b97c4cd", + "Name": "matter_g1_multiexp_16", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001394f8d94cccdaf982b1c6a8080be6bbb65c9352a961cd5daf2f817a17bd8d5e3e086c6f54f6068691f3edc4378215350000000000000000000000000000000013560d0482e6ef2fc19cf274f85bc3d14236273dd8af86107839882dc26dbe897a7de90ab5457ca440498265bb59e59358fef5bc887b7caf72f2a533fe1455ae523841bd49b4adf16cfe87edc6f573eb000000000000000000000000000000000bfc36885481f9ea9aa275c1b4a774fd01476c6f956fe75b5f6e73199928b1928108658e35dad50b298307598582443a00000000000000000000000000000000161f833b58de4db4de0af0fd17ddf81ba20e4b6ca21dd80852cb992afce9857e6cf99cc580664a970e9c6928d13dffba73b243b83d44158a66eb6d31e7c4ae1f4b3ddbba81b2cf9a654ca7c4ea2147ad00000000000000000000000000000000042489a05aecc0fc139c0ef0c703860ed36f8bdf50e4c772487c0d27b46b395f6417ae34ee98290a40b3b765d5a41d430000000000000000000000000000000018fdc2c8ac7aa01ae6dbf84412de8a47c3c504f2abed060c63190265babf779384dd6e3330e91198f5bce5a103bdcd701ea87af09f6e62111c48993c408efd3db9ebe218ac68f61a461ad9ec1306873d0000000000000000000000000000000005a44b3af7b95c7869d74c7084d0e556a67b39090b7a62fe51fa833cee316044a26d4e383695ecd3bb1715d0693f2f1a00000000000000000000000000000000112fafd6d6f1da250d12817711bc999217d16d7a6a923b5e11cb91a333898fb27f7b89885567d33b39923d7a664960eca691b9635e38a46e2469811405ef6325ae7ef88a67c1d1c5b05806da329f27e000000000000000000000000000000000197317f509ddb9d536845443d7966314eca15f20cfcbf3ff2f8701d94974e35cc0957855e0085b3f85c7da512ea882910000000000000000000000000000000018b1ddc196607122be575ebc923dee96823fb4f8ed05fd8639b1af06ddff25398e67709809b642d4d9c21dd8ab6e65470d9a35f474325d0f065442805cab3beae4a186b252ebae54a567dec6695588f1000000000000000000000000000000000c7ed49a60aa90f074af9f7fb19f6e27ec4a83ce2ed77a44c70c8e0bec02318bbe44a212c505efed3550ab6a1ea2c6d50000000000000000000000000000000013c0a772ce2c97522607b1b05cd9a89e930b6371202b69eddd108237f1495eb1c6ca65549c5ab030cc4f7e3ff4492fe9c20e998acda67d406a238f16bc2b3066a6d69d2436577b8900a180e6a71b0a01000000000000000000000000000000000fd64797f2bdd429e6f5217858cb14d78b7054b178b74696b8bc8ec9f9ede70bd03c36c824a3f775ee2f8cd6be7e2ca2000000000000000000000000000000000f675a8a43da599a09ae2367240870636ed385eb280cc199fb7c4ee575f5e3c5fe0b302566cde70b956f3c2b20fdf09c6fb773cde356e2edac3afd2bf703b59161162dc1e915873ecf606dfc0e6efec500000000000000000000000000000000065856fe1dcbef934cef47b177ecb7df76cc8796624400d5c0518aa9438bcadf397234808d099bed89ab674560ffbb1800000000000000000000000000000000071b2ff64379ed3e20cda000602c3504616dd673aebbe7690e797d6428ecfbdb29f11138169f3462dffd319cad68b96ebffc1a58dd06752a2a77abab835d089599b4781ae51ab998ff3c5b68329068bf00000000000000000000000000000000094d6e0bae02b4e7541a27111092737e7b27fe742fd0400672953d8fd787482195a2cb59a91e8584be002976c3c3e9b8000000000000000000000000000000000c2146b68ef535ed9efbed7fd02ea5cf6ba8cc20ad8bce17c06e5d595282f6e7453e2cd267181e477f511cd4fd56e8b157f35cfd74f62fa39f919400f4d692855a4b4e9f91920e4306ebb2e772a484f40000000000000000000000000000000003925e9f1e24531f9f26547108671a6a0fcf58aa6ef2bcf9f4f64b659782b93187bdf2988029de9f51e5d41cbbc4744d000000000000000000000000000000001975210e2c8bbd2431288a42f9cf5d6bd6c6afa2eb05caebe740c0a1f680b9cced0f32f8f84e368563183b97aeb6e7ef2d1f3709700634653374fba5a94d69163ef616a72a63d462afd9f01c9ddba8400000000000000000000000000000000004a2ac3d53c193265889f6c3802d7c68b938ebb6298dbfa14d1a9f515647482c84ebbb3855686b544d4299554473f1d60000000000000000000000000000000003283688bec2b8ff2e34565f8e254d579f57f9c0fe0e8521129088099a5005dfa9d565d52a75a2b26148205dae83aa6a614ed9a08dfd406df00719d5eeacfb0a96413b608974fd0aa1d4c6176b968dc00000000000000000000000000000000001b82af64f984294882fef7e5ba880ed8b0a36a90a5e9680ddfc5d86e65aafc3899a7d63e2a420113ba29412a025a0970000000000000000000000000000000012b11a5bf0f7895e329c2c6bb3d1737aeb5fe9f32a96262d8268c74687a460c47a89e252e607032576e7b67f5ad655b87c1dd2e5e5f630fb1d07e8934dd3ab029917e7775e401c0bcf7e1fd83aef72840000000000000000000000000000000003ad0dbf936f79659ccab765a61633ebb648503a774e92b24967aa8f8e45c5e26f03acbc7984a45e089ce68c5566664c0000000000000000000000000000000011686f58262dca9399d95cf2828b50b216e1df251b61c77f952c21374bcdacd99d26891fe5f335afb7ec76ce7d95b43f64e9d16cb61f2bcdef30cf544d97e078fccb999b96a1da0eeaa0bf232f01995f000000000000000000000000000000000ddfea60c169079c0fb4b9c3ca539e43b7f184f31cfa2eeb942acd2a84b472597c83fb52544479f326bd1207b4e872f000000000000000000000000000000000102108e827cf4473ba1382a2fa8f3b904f20a40657784d54e3a91fcf2703dc6fbcfb7f4b0e04c3a53a24a6e14b5735f435bca9082d66c06761f702dd439faa4957caa70ce0343268787f41a2f4bc0cbf000000000000000000000000000000001286a578ce3829f289cb98aa41cb6bd7274aecbe15b5087d8c16d575fd991878b06c88f17fd4bd905c4576494ca9f8fe0000000000000000000000000000000018e3cffb0746cf70aa79053ac579c1adbb09ed5b6a8b5e7b84951460e551e9bb62f2c1968e37ba34f7633e60a5f1f2a97980eac6c8db86ef83748d10b210835e53baf8cc9f607915df272b6e28ac6b28000000000000000000000000000000000ad648d5e0a45c8208fb9b6adcb3c47cf0e20ca906c4fdb31e5c2f0678fa3ddb6e27848a39e8035cfd9eb91aeea824200000000000000000000000000000000005ea40be38d82e2b256bd5e26e71dc642e06145d94c1ca4fcfd6e63e2bbbd7b7aa153b498793e94ed1d89691195b4aa3a256ebae4b204b3888d7bd244bbff26431ab5890098870f13800bb3be3e842ca", + "Expected": "0000000000000000000000000000000013a9e1e306a5cfd461a1df4f2097f0beb079a845a959ca3a6d3e229198c75d29daeb5e7b65603397353cf800e0a10d820000000000000000000000000000000016532afaf2b6d884a5b593cb8dbc38b4e2bbe522ac69b745fe9938834d66e2393653e31b052a803f3f901abdcb352eae", + "Name": "matter_g1_multiexp_17", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a187eff5afd944ea8731afffb4aefde4046b812b47e7cd99687ce40a5af90d6a4a2c7e2c9ce515a229e6c99ce46933a000000000000000000000000000000000121183879453793d954c99cbb007ff428c721d0e0b9cef192dbb177696ab9d575d3ade2cd56964428adfbdfbafba7505805f2e8013007c4f6d8abf441728eda8d742ea2f1df545f85d092f50ca8275c00000000000000000000000000000000196b029b6a808602b09dd4597db611f19bb911b3acb5dce08bad8676cae9910865355cca0a109bb8d7b60359da6d0544000000000000000000000000000000000cf045d01c1a6d6ae397b39833243ad3cc310be9220f71a248032e9325c7186ce3ea40fbcdae5258410e1a513b69713e502d777b25f3112ba2264022e2f28dfb6e5d5239ba097e9d815928be44b6a62a0000000000000000000000000000000000c6578ed0ccdfea63fe924d0a30c4aa7d65d9f85ea832733013c0ac225f039bd6f94b4acf634a01ac67b7165a810db8000000000000000000000000000000000624981245bedf55b95217691d9dfbc16d0d83476f8c09a46f9541d77c29ff978ded7fb7fed7272701e385e016647463e7d64b471cca34ab0c91f61ff26719c7186dfcdef13895d37ead407873736a74000000000000000000000000000000000a406d8da1910d9ae8e52ac70f1fbb85954ff7590863ba9f6e00861160f83defd24e99be31ec63489a483fa77d84ffaf00000000000000000000000000000000170bac083f0f6f4ff5edbacc5cedbdfa314de364e86486cac0e656d27e6a4880ea3f76ebe0f69927299bbe4a734e0482e5723630020fdb48e44adda735943c91ad7d1e12f3c32d823833eacfcc8b02ba000000000000000000000000000000000b8a583c24eba7a27a05bcc606a10a306ec07401ddb8de8e9bf206250ab7cc720903bd81a2c17a9e075ecf0ef99ad65a0000000000000000000000000000000006d5c7e9faf830ebd0154dc1c366b84445a85f0ebfc13b5339294752f4d1dc352e0e4204d9d64abed83e8297325de2556e9e37bd811b76133c12268d325ebbd6656e7ed718cd777458867dc98b1b3bc500000000000000000000000000000000122735cbd1927c40688662c740db5cb78425942985ea69c729061a6ba749c78d4fc3d894d07c285aea9ee104f59581690000000000000000000000000000000007c18425af769864f403c39ce3df4f07d4b7319342457d0dee30ce4bab013b754e2ab7492f2dbcd5bac2ec1ca2e0220f7d46516db284a3938e672ad3c6bd40313d77c5d643ffcc59e3f55ad983cdc0ed00000000000000000000000000000000039c8c0453627d13ca0e174f5a27525f8a0054ced2b9e7d92c0ba7bcf06c78c1e1632db35abe2a81f72b986934ade66300000000000000000000000000000000134876b42096d986e6004364e176e23f81637f8ffd3dd86097f480d25aca9ce3a96c9dc73b651106b4de307c002dad95586cf63c5e52b44aaa79cdda6dd6fa92c6fce11d867b2ff5a04c9e44e0b3930000000000000000000000000000000000032e727809658a52f60a973d32bf47bff5fc45404e6652facc1801d52188dc7db79ac1bff415a6c3e49e417f205422c7000000000000000000000000000000000c83d3e5ed78c1304f42afcc0143f959ca24348510e241c3e79ed5eff8742a89b4ce131e63544b9497c2a1712999a18cefaac96bc5f686d6b952e7082236622b737fda0dd3900bec71654bdebc8ba2e4000000000000000000000000000000000c2bb8dd01510ffe473715d7714e47dc8fff0f24af49405e55a9537a617dbf425950ca3df681f1fb2a3721afdc5a4d730000000000000000000000000000000019fcf0bdc8cf0f14c4b8eff44ce2646feecb3ab0555f530f579cb2764badb6445166598824f7b0c46a857865ade1278239d6045573dafd09ab2a0d8ab6e97b0ade43bd79d820749ecf19cf7d99792ca80000000000000000000000000000000011a463b5221e4c3abd9652917379564ed2830907464235fb6f9038f1d3a4f0f8cf9f6ccbbf66c86e216975b2d372400d000000000000000000000000000000000f0e9d5050d539f9211ff7d3cf3f0e7108c5580b634b122810c78d8fe047ac709bbb06ab1501e08f0e58093ba8208e0d4c4a2ff4ce4b633ec8fe0bfea42ccc329b7d3fbce96c26989b3c7a391c9e806a0000000000000000000000000000000010b293dd411de6a5cc464e919d290d6bdb51952a7a68cc27aee3ec80808bf05a50763fd4c17f25e94e655997bc948860000000000000000000000000000000000f18c7ab95bd74d9095ea9ea66b2b14987157162b8b8a313a781ce58b05d2307db4e853733a45344923488ae9dce1a459af09ef1f27cb83189e4e13f3801c08d3a2adc8b5f88717954ee84499defc0c40000000000000000000000000000000013ca27fdf920f901634156567835601ac0b84efdc79d7d979c2156041bac04f3297c1799d3b0641df33da9647e604b87000000000000000000000000000000001527cf040f6c84496ceb57df9c9ebda89c394eef034e40f5e6b540e931775ab91a4aebbf6078922da479ff397cc5271ac72c1dc1efefb775a1bda754ff17389a6b6b6bb25e22697847d24a117eb8974b00000000000000000000000000000000197c0e4474e27fcaf203819563b86e725778409c7d6792fe41820c495e412382fefda97b7df560885082c70f9d522024000000000000000000000000000000000b14b9d40bf866d933a15e16f06ec16b502ea8e7084d68c74418414fd281a6da50bc443647fdba348b26b4a3490d0ac4b4a0c7c2e611a24c722975ae882dcb4b45e6f6b41cfc87e8c766beefd5b10bfd000000000000000000000000000000000a254b07ca0f2c9219fc0dfb49bdd7901999cc85161f741500a3ae8be566e64f8a5fb3e59985444206a2cd02ed4ee99d000000000000000000000000000000001726739e92da7bf5a6d2dfbf96fee6028fc7022cb1be2f838ec1b9bd08ef141f4b24e093fcbd99080721063f8b7c98dc986d48aa5b00fc16c36dcad061d10937b55ec4deee63cc2841b7ebab84f910d2000000000000000000000000000000001133389c12bf1d2e232cfef1a8303a733edb0dc4fa26acedbb288166fd232b79f67cbe76227ab2eb517f1c3126b929a30000000000000000000000000000000001ca6bf5c18255bb3c533ece833964320bee7c3da4af56d876058edd15f89b0ef147fba11e1d539d528e4bc452e17df8979d4df836daac0960fbbb8919d2f90c3457cc987153def711d6e8a12fb14363000000000000000000000000000000000d0caaa05d3a01c89d6efad96f5957f1f9338136119e8530853a58c0698583d834fb0f045e212e6889d8baaa49815c790000000000000000000000000000000009e7fd124160f6ba3afa752b2557f1c4b5f4010a6d4a3c8a8bfe350c6b6e198b9e3d11f2ec7dc6a02dad4c07bcd4bb1d25ae495ba75cdd0bfe200ee24d813e1aa93c100ce861c9ed7fa5537e11778990", + "Expected": "00000000000000000000000000000000138cea47ce2ea638f06c26d24ce87073f98b023b800245b6fc74fc2851d79a402b49c54e5df4e1aa98e33801d3fbb965000000000000000000000000000000001558e37121ec3710ff5e6c2a4e418c803a5b83cdeec98c8216b8dac7890ce17bff08a95ca2aacb40eccc761c8a31e8c0", + "Name": "matter_g1_multiexp_18", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001920ce210ffc78b2c053eb2106acf1e238ac5160b50187fe816010e8a95ec632a7fd29565aefa4bec90d87701c2610dd000000000000000000000000000000000322ce646a20e23a1a68361806cf072ae3d6310f4055f5289ace0036a90b5c7ada537e614780156f6a103ed726e15b4fbb2a329761a3d6a2e4d9d63d7bbf7fc6fd321ec0344cc4d7d1b6565c475ee967000000000000000000000000000000000a1ee4319282f43ab9cecccf2c7f5e08f35a6c7e7bdc8dd2f4d642e8968aff377791a5d1e2b2152c59a8f36d9bbe04ed0000000000000000000000000000000012e60ad9f99f55859f2529ce02b8b41f8565705455cdfeef3cb315903ffbf29fabffc2546359007a36ba579b6dd06c2043cbc3dd7ec63ac63618a9e5da1f9c3fb952c6fc6972dfec6caf1a415a0aa79e00000000000000000000000000000000000c2aa9516360c840b7f88ce0cfaa0ebec502bc9cb9304c1a4d895089a2344bdb6623638e730cf30c66d977e077423a000000000000000000000000000000001163f60b32213940c9cfdeb2c86d5ccf61c0a714436b3d0923ec338ce7bd35542726a87a1311c8072fd589499c26521d733a3a84eddaf3af8c5009646a899f6ae8cf233f535e360e29e2952088ebd7b600000000000000000000000000000000116aa02028755dd5195ce0b2d3234d31b07b557a52330fdb50064a18015ae630f427a4512dff06f93ae67c4fd0c1e10f00000000000000000000000000000000117d4a68064b3f11d88ce976ed43ceeb742ba6f473645995a2773121b2b8edb8fa2715f51c8be109f8d91c44e8943e7c5112b5912aa3cba657d8de3dc8138fec92b391d5f988b82e19f16fe52fafea7100000000000000000000000000000000166cbdb131fadd6c4e7a94af82ce4fc4805dc34aacb0d6cd89e69cef0b9071b112ea4a7d9d03e3dd961b5d833b84195c0000000000000000000000000000000010736a73e2283849595569db9a5b0b9cabf2182c3d8c40a39fa32abe52dd6038edfb8176f64ec12671e3411dd69397585683e0b33b5463bc71283f0625269b2b33ead69c1eb7b23a996c31c514d06937000000000000000000000000000000000ec2405173e541945011d09092cc3a71d9dd1ff54451127181bb2d5b50876a148e59f298ee30ec5473c520be0a53d61f000000000000000000000000000000001239198a5b1f6f57bce914583c3bac476a922e56d2bb30da4912acd31cbf307bc258f22fd9f6a0073ec48dfdaa4799bb5bcc597c5ed7f79173942a0250e618c93cd0917b37b5f354d63a2c02a576080c0000000000000000000000000000000000232940188006769a382a4958383aa6702b2cbfb9c2907a989938ac618f23e241767b021e8ae11c23617ab393d4f85a0000000000000000000000000000000016a672061fe76ed943e36b2d6fa4aadf579db96eba5e4c60cda2884ddcbb0f37668638a3167d8858cd296917eaeff8e0f2613a8e50fbc6683ecdd7c7fd38b4caa8e5dc9778909fc8680a58b16ebf40da00000000000000000000000000000000066fe1f7cb3d67c20a1ba29a52c0c86d6a2aca176630ff20d45632398a39404619e55b8ade69e0cb0b7a6f363c3b2d4d000000000000000000000000000000000aa25dbff2a8c1f1d0982a709fbe88563813e918c8f25f0da9c5d0dcf3abc257f7e32def4efbf74035aee1ee350cd4fa57a747bc919991ef9b7b10388bf3f301fd910f807ccd31e322be46580a71b7c60000000000000000000000000000000001e54b0e8f34cbfbc20c9feffc555036857c31f453a1bbcffe67bb71d0d6b2b278b2ec5d6ab6648b397c9255a1139993000000000000000000000000000000000bb6d6c1a41675b3394f5b9cf14ddfe73c188592916f24240edcf0940fdab1d1fc04a11bea4af90d0d9f6734a743b38086ba09829f4bbb383e2e131d554c42edf1065022975655c07df2b3445a3e6cbb00000000000000000000000000000000099f521ecae704ed5a37ac90dd4beb4fa21ac197d467185c8329ad7b87c02943a228285b109178bbc2606e89699403ce000000000000000000000000000000000a95a85f84e76ebace78bbedbd13c6b79a6339dba246596e0695aac18d2b14b370c033e62a01caf8484dced0ebe8a76a03fd5e91f590fbe171aa3f006617b20ad645626c970c2351e048b2ac377321360000000000000000000000000000000005b8ba4c7d3c83fbe9bcbcbf60b0b3ce42b52ca19a5a322fb18bc20f81c2fcac23e1f62b9fd6edde5ffa2e37f685e06a0000000000000000000000000000000008c03604012e4dff47923a2a43382edde86c76754a1073ba51fa3a2ec7011268ffcd1452d46786682ab2ee4848210cc635ee16785c004dd2a01920c52d3244e2160fec2d17a519974d4331527cc62791000000000000000000000000000000000869a2ec19afbe70ad0a15532f776f56da5d7a7dd5b75194d0c65d0304c69a6d0363c0ff3b549e8d15171fae18ea13f8000000000000000000000000000000000389d0e6c9d73bd98202191b5b213fbe77bcf527faf98f4d25c9dd3ea2cec8f3b1e8f261d9fc8baf7b1c21dfd102f99104a6d6e29336015d99e107cd312e300bd54f815c785f6008c47c99fa0084527000000000000000000000000000000000138a4f53b8fcaea11869a6208e7498238dd80be79cde96885e6e5226315deedc98a17f8d75df733ab6f15dc24efb5c5b000000000000000000000000000000000d25d69d6d5a9c597fbec8aa7fbbe579dd86c5fd3747378e984c20b34e018b83f889bef3069c693a91ff552fff1fb8a403f9cd3873dc6243748e16e4806f8eaa339edcfdbf4408a8e41a3df80c98162100000000000000000000000000000000192e8e186cc9159d2207b0af2dca495e9d0c82fb376041360ea80562e470168b52a3326553902fd6f5a43ead32eb968e000000000000000000000000000000000fcac12d18fdfb661a12d112fc3414839bd34aa244ce0cb40be79718ec37a014b43856e5e4b003f4816e04ce612e63ca34135a2e7853c74725bdaee1ceadead7b4c7d729650df6544bd525c05c942342000000000000000000000000000000000b860984aed11a63656e3390f5e94695d8cd9367ad7961c65d714637c68ad88a3602699ed3f627f0fbc5782ff18775af000000000000000000000000000000000ed00636e74e8163645c43b8b31f05228da7c42aa332ca250270e5f14b3660fbadb8e8957f52592d942b1cc1bd2eb0a50033fdcb731830951dc3c4b33f06310eca51762cb7279039b3d7d9ace93c5f2a000000000000000000000000000000000b162c0897755fa47053e45ee1b298404818ca282a7b5818364c292a6052703502656e536f2dfb470730e9bef0d7cbf6000000000000000000000000000000001924ea42eddcddda067126534e8b862f0e16dc0cc296ea892115a9ca9734fa03d019e90263be2c909528129a12a68d874c8112ebfe12bf44e84796e8b0cd03a93d2164d6edf1f06a5c520330a177da87", + "Expected": "00000000000000000000000000000000056604e75c1069b4a061ea72cae2cfcba90130f6db6d9c268649089ce4ae1cbd80120a086e3f066f2584f5b2233b468c0000000000000000000000000000000018c5e93590b89119ad7d44f80cce5ecd97d4a4d3010a19fd02a58342752b166a1b82dbbad30d6f3404b330dba6a57454", + "Name": "matter_g1_multiexp_19", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015f9de55b3b45c16d59adda55d9f5059e765ddc06d22d6e68c099358d8df0229c6fe368384a0486af1cc9e532f78817a0000000000000000000000000000000018b992d73dd4c602afd82ad0845ee2c6662c860c5b7be197c62a8a20e91764004b5293ea40602574e91c313e8103e7a1dbb32a4fd8b9dc58a382a7e436e23f49a134915372553eee8c605436221acc8000000000000000000000000000000000157a9795cf9a45d2ea5e0312783829cddce176c63eb16195e7994b0688f9f30a4f2b2113e955bc66dcf05b5441521889000000000000000000000000000000000dd9365359ce805327b8f627f02ef5458cdc806bba246dbb21065c89e7ac6093004d214145cf3dec605195f14f1a49d357df9664d3e17d9d46a886efde4e37e38859893113558843bc019699eeed8ec0000000000000000000000000000000000066d9a54dbb5fe64835523e8ae05bb70b1934e389db0ee7547da60e4af965c7eee14a148f2e3269f01e8a545480db610000000000000000000000000000000017d6a22dffc3eac4366d0d35bfdd053d73d7b3392e7f52fe04e7e481783db3232f85687d2341358d2148fb3af7e9315de2b433b7a95c26e598002cc00b7904816d59baaba79bae7c6a7c26dcc48a487e0000000000000000000000000000000008be91d2752203afba19d8f3660118f83dbf851a6d2c54af389ef979121c55426d0761812de72a79d46c66dfcd00d5cb000000000000000000000000000000000269b050e36718ef4ebbc89bd88106a4043b267d974439855b6027f7fc3441518c39af6d3fee46e87d399d3ef03c63c82897583b53567bcfdbc63ae3e864a9cda24bb732694a6b27415c5212c7f45a94000000000000000000000000000000000dc976bbec5c5791688499da28c1d120e8a68eb5511ddf54525c047378016f68e8590b95f05cfeffba56c3daeb0729dd000000000000000000000000000000000af6e02afcbb707fd4d8bdcb5e73e1db56d7a2eb02258b91ec4a5c46c4627525220c11e6e379077677e1b733e2df60e02f7ff17e54d759eb9c51e16cf6f12d645bf2d091427416b4edbe1dd21947b4d900000000000000000000000000000000119b86eced2222d203b6428907269b950bcbc1519859c013349b1c7acf486d3da5c4b35319e6b1ba8ae815e4ea14a6900000000000000000000000000000000015c342be097ba679319b83a68164f6820e2ceece3a90d1ec296514f0ccab6e454a0fc444d599a812bb4d78e656e8897fce0a097efee666c22d1dd0ae8c8e11283aae781e1deadceb3ebbcbc5e5280a610000000000000000000000000000000002da8de95ee2ee1be2f3ba8afd8f52a4fd0e352c295e92aa8fe9a08a03b6170222f5d6cabc9b9d9bf2835128c6ece3e9000000000000000000000000000000000fddd2b5faaff49cec261eaa8d093b410e024e1620863b6b9bd882088b59afdd4445a4971f31738e2afeafb36900b2d47b2baa349884b54b542e3993210ef002f70c6467c7d512801f0003da789c00580000000000000000000000000000000012060c8cab190beadf40a2e3d927d7cff21c475dad04d64c718d02ead9e351a27be81a3c5a71c6c95aa7d7e287070356000000000000000000000000000000000233ee868716db87f46d546aa1a7e4d3e70b2592efa0104d9f4fab1680c627484a33346406f61499e3971157a6dfbf972b94d087c3ea101649ed57ff308dd3ae0d25a1ad8884763cea1b0b7c56a3834e000000000000000000000000000000000cb9c4b59eb8bbbfb8aa2e9ed72eab69735a0154645d68428f0bda762d3b061b0659b31a907f531a55c0906532c539e6000000000000000000000000000000001806c7e8a8d95a34403ec78b43dbfe0bb09014fbe0e019f8c3b6ffd91a75d5e361a6794996e975309fa716b6c6a933784f8c35b920a35b71dcf8d15a8a826e5a7c2a2c4f1ac2c2e3a6d100363e7f541800000000000000000000000000000000131a492451e5c0ff787a233f72766339d7dae09f2e17c6bec9faeb08e4e48d6407b12adf2dffa3911395d5f25980c9650000000000000000000000000000000001f14d5268c422f94657a20ca02be7d007ea88e1a352753b2fdcceca5275a7ac101c0ecfc075735eec82b8fa6bd61c980ae6101fac82c10267770e74a0ee16b5be6eae2d455d742303a3c624d52aa726000000000000000000000000000000000d988d419d559b1b487297cec19386f28659fbc5f121750b6bbe941794954e82e67c15a9a00334527d85e9be706bc2960000000000000000000000000000000004c222c037fedce38f42da2b08f06614ec9b166cc6428e3c4cad8ffa440af3d8fca7b9e4aff727eb0890effbc2b88060002fb31d0372e7730499b26d617b53ea04821c6eae922326d755a0df31b559ae000000000000000000000000000000000fc9786ef5291943cfd885238090be47632c10cc46df48f6bb5250a7a85690f1c90f5f5bae03a71d7c52634cd0deff340000000000000000000000000000000019b4ec13ad67e058906a3559cc683511715b25e52f39a591b22177e2dd235e042832f740269544de112d9100c1ae49d9aa846e68337f4e9c99dde506a3af792732342e3b836376d4816557fc1fc9b916000000000000000000000000000000000570b5e7b74c04db066d0aa751c9f763f59c6121e4e2ca4eec222277049143fb2e5fa39ac0fb41cd85310e4504f662ef000000000000000000000000000000000b522af535ca2b9db0cff08bf8ba19862e8f964b6210ee19f0cfccae8972150ae41ae1b8ddce4b1d2733c7dd47bc4c87df9035283f1afc294ee68b2668870aa45e483d208483d9e967b11990cb55d860000000000000000000000000000000000892cc60eeaa0ab6584ef2731538a84c6a1e8dcc2efa9591ef1321442684ca9fd953553268ac4ed44bf50004683793550000000000000000000000000000000010234542eb7231f4356c34e11e7b4f08b4cb405a31aa87f961d4eaddbdaf5ba6227b2764e7c7c9ba76bac7da3b19f6014005df80aa522e889e7720a9f2e44e6e7e19c3160ea282ec87a4b446d7b1c45f0000000000000000000000000000000005f3ff7ed08cfc6bfc8f5b55e2b368cd7e9f4a508ab46c7a383b2123b0346b81c39ba1304d628448c65d8c86bec682760000000000000000000000000000000001cbd3457f6925d5b8db7a785587d0dc6e2ad2ff5a6683dd11c8946e953dee72bd52760cc977987cd06a2679c74f9b64893c9daec43032946a9e892dce960e07d29b304000378145148b9a24afd15157000000000000000000000000000000000aa17bed794d72f8ac77989ce1b78550da54b4920ef6ac4ee0e83bb3cac5431cc7fb5c300c021045d4d391c67963feab000000000000000000000000000000001300e87daa3c36d87138628ad9aac5ec7d62e979c83c5ee4ce9a375fdabc745fc5874578945395ae128022eb98c6d8e4f685e6bb7713f8fe202c05dfd18003eff261456026a5185ee9e68aa821fe7c5b", + "Expected": "0000000000000000000000000000000010a773006edb1a84341f2971f9226841142b26bcc4af52bc8b000f165f6c59d094aa2eab1b83b3623c6c09145b5bf6120000000000000000000000000000000000130a0242c95fb2b858256de2fe27df7f5736765f880673300e3506a5e756b3b563e52b481c51a003bac76d04f56c5a", + "Name": "matter_g1_multiexp_20", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000090ef8b0781c66698848215b3aa84f7be47f86a9d95bf5a1ebe9c3dd6615d4fb4c6425f9e0029fa3d7b94052ef8bb252000000000000000000000000000000000cd1927ed1bfac35325d69fc924f4045c5af9fa5b0a18fbf6c658a3a6d405ac1159d1c82934aa116a98cceb382dde2ee94b3c88e51af5822177b85978526036a426c9ca1077d594618ebb8fac4cdfc89000000000000000000000000000000000dfb10a6b4e5980400bc275ba5cd8211b8a6bb6cce026546b9459805ba48f46a429ba683ad3f96ace4a4ffd6cfdecafd0000000000000000000000000000000001f643a6d83f235edd9dea19f0f2ecb98a82ba295d8ad45f75be5c0d5b1a1522c5d9f5ed812d47da6e5fe8d7924648fc6e456b39f4efe6581657f5c701c696fde8acb59e856943f15cdd639c1fa68ed7000000000000000000000000000000001824ddc80e263475b6ae3b73ef5613c7334b2f71c95d64cbb84dd489851580e767be29e7c7b47d53668a0ee3e6bcb03e00000000000000000000000000000000073f6ee13c3b05c466d35ac49c33e5ffebe5e8325f8f06b893042734bcaa4a1bc76da272602664c2aff48e731cea0304e5d306f46a31c14de7b2940104d0a4424ebaff805a81f1c4a910566057c81604000000000000000000000000000000000abe490a12162aa01307e814684261566302501f589c655b3cb840876259112a1924b1ee723e0c81d6cc6b19535d52f20000000000000000000000000000000006a2205d02f58dff40715070cfd635aa5e68553eea8718090e5f6a96dfb0a2f5a23e11ba92d38a7cee16ce67aaf5de194ff6d13bb0967945ff3b6fbbc104296805e4fedc3c25bb55b75cc997834de6b700000000000000000000000000000000180b5eb4201b4f10f605b4a7f5f5e25783bbd7c9e354238dacbd29563cdf119c832b4ca5c908329d5087d5c8c6786d68000000000000000000000000000000000ac5f56013acf364ce736c455a88a4b2615ca40fc67251039eb99df3cf6423fb85695cc035b6a9b47ef15db7406880bcde4fb2dea292b76d8130e6aa8aff5edf0097de935b252d42a777d4d9b8615ef1000000000000000000000000000000001963e29f92f6f72be2afa4635221b0d2f6afe9ada4582bd7ca4b77eb77fc4503578f38fb49aa1838751db8cf1ca0b0cd0000000000000000000000000000000009856a48f12966554afbcde1971499ee3ae40c9c5c3aef13bc415fddb97545ed84d5f50d2a26b9c16c4403a487dca614bac5c50a3a8a37111114c22839c88ce4072940c06f0d8b6d53fed155d0399ed70000000000000000000000000000000006cb805ab137fc56763f73867a7ee5635448a8a66bbeaa9ff07554db3d07aa38542884006744f6719f4cfab1392039820000000000000000000000000000000005e6f6f14f7aedc757cc458ba363fb5d97ee0dc092cf6866083722d4535e1b852c1d99d0c7c57e96a644de4b431c7f9bc3f37387bad1af3a896a7e66a80dfce2df1709fa252b6fbe4334d02bdced4329000000000000000000000000000000001045bd19d4fba8380467df25a777b1ed2850b7f5c5ff5501c048339c2f71278b2c97e4815973303e9eef283378cd8f470000000000000000000000000000000003278c7c8aa02c15275cbbdfc49f6286d6e7fb208a71a4da390c0c853684d7b4d8a6ab24953075a6a45f79fe0c9b910b70fbf5da3959a49fab7e97b3df3f2a38d16d714dd798a1f04ec2cbf84fce76910000000000000000000000000000000007af4aafeee0372e88786c6025a710fad46252a8df870b56bc1d8a39497c2422bc01aebfb567b5b68273ac59b5cc8d6f000000000000000000000000000000000dfe4a8471e42dceabb609b983b59dfd9869f29fdde01a168c07247252a9be6555a823a61487778597e0ae305da4205fe538bcefab5d8d0be5fc143e632e86fc065af3f2f621f293b914980abfd6a0c70000000000000000000000000000000005f847129487acc07fffe21e2d0aa6275a586f051c06e2575f3bf8549ad9f6c2678c541d0dc7bdf909b7cff683ecc5bc00000000000000000000000000000000163451ea5122e16ee62d58d6ccaf8cd981a29aa820d77967e69478127a76092e9bd0dc9f24a27ddca5b40b1fe8ce18b130b921d8cd2ca46aa6f3e0dc6ff08d77972fb0a248bd39e90a1e9f32be9e892a000000000000000000000000000000000faa1804b1f65a6ca75d032186b5dda63799a5fff3ffcf1f53eeb04bb5ce08be40fac13295937f34666e0f0be3bdfd9c0000000000000000000000000000000016a9086134daa2a1374fd8eb74ea65858ebe8b2990bb92972121ac68bd6bd77916203a1033ac4b163d863d9120bea0a33a5ccd9436b15d4d04a8ee9894c116190062c4e7cfabb047b585f3aa1eeb4605000000000000000000000000000000000a2ad31568d9778b306525e275bc4f525d86c04dbb98f48e72adae813ce9d02dc6d826a813ffa5b9f9d014e92de42c520000000000000000000000000000000014e928d48c4ca7640a5f5c55c8ae756fb6f03bc1a8e4e907ba89865ce610fbd919a024e86969c52a4216d84b37673cb5c7a5bf2cfedd7048be7ac7d2ff19d4f8bf0a94295ebdc5e792393e0e4bc27d5600000000000000000000000000000000041fc07f8759995530350fdb8712304083da882a5e4df8188cdad48a3df91a5f1bcc1b2a25fb3c9b59e2c935d579a9d1000000000000000000000000000000001925153fa12217d98007963237a665e56570cc666651c29729445adab3963d599a4eab996b192be1d49c7429d9f0cfe43563651d5f5729a0ffca6b383d884823aa3b0215fa057bffd8142199a16e4ffe00000000000000000000000000000000006c45218eaa27435aff594c2601276950bb99fb3c1756dbec76e609d163b2593933b5ecd5fd8544d4bd2d145821831c000000000000000000000000000000000a43ab2ea73a8e1131e184fbe9004aaea198a3dab575d3516b422c275f20c7a6e5d41bca0aa3dfe7ec761dca0ba6687d833323c3a668541ceba18375531c3781dd98525b49dafce4c4b3188c90f3f4b5000000000000000000000000000000000d17ec8ed30bbca5766def9fa375219503bf2f7322d2cc36a38fcc8471fd9d11d2a30ef004e39cac4d1ed2d33a66f7d200000000000000000000000000000000108e6c9ef3a5a41662fa16488243af3419e2d8e78c0311446186c96f20d9c15a60b5470eb95e0e58143a3c71a7565b05d422e21fbffa7d55270eca9c96bbefa29dd915aca266071673e970daa0ca9c050000000000000000000000000000000017f498e192905962fdaf41120027d49267523bee9de8e412161cec69c62d2586752d1da3d15e89446b5941a2f321beb60000000000000000000000000000000015e9e4eb30296ca3355ba9c5eee343fe7edcbf5bd110ca5be12f55191d0f07b563881f52e65588a8f4b3e03dfce6566e3ba7ea9ffda87131452b24a9efcdc91d1262d0d7550e5a6b787eace3577159b0", + "Expected": "0000000000000000000000000000000008b5f4f55def15b4590e978384fa0aa87e088916de20ff0fbd688ab3a13138f32d1e89cddc72acdf69fd86aaed6cbc4200000000000000000000000000000000022a02016f38156fcff83fceed881f96fe14e5d3410b4fc50e607d8a23ca986351ce48d6af970590f68aa2ad7181c9e8", + "Name": "matter_g1_multiexp_21", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001155a7d2cf81ee4f8d65c835ef422075a9453bb85b3566ec0545c1198b93749beffffbad14ededaa5bc6443736f77bb800000000000000000000000000000000073e4df0ea06345dba9fe772710ab71153e57152c74bd05d8cd4229c5ba1301f7e654f3fbb2a45526f1bc3b09c72366f16aa2cadacb129598aa459bb2e6b7fb26d1bcb7a49617b6ef8e57018c3db1f51000000000000000000000000000000001238e5a46f24e0f00d2b45bfad87f96140ce10d774f4a17c3df224b58693afa7cd0655e5ab202998f4f8b4b5e22cb82d0000000000000000000000000000000012628d85d982086640b09f046c5bf07b1cf718b5b4b20bd99d64382bbd8bd0112230609d78ecdc742cf1ebd24f1750ef8c02014d5392d30863a12102d1c9315839b5611dccfdb489207f918662513850000000000000000000000000000000001363b85a95432193800bdf353de1a5764cc2333b0369ca7dd539f230bffe81dce11288a289e0842f2db62a89e6f6af1a0000000000000000000000000000000003dc043b958167a900cbca116b097724e64d49897f8fb6a31df99e100be837e873328f5113a28c9fb510017d28d90d30d960ff678e1b46ada4f866adf354ba8c1514df10ebe7d88d2c8de117ef5ea24900000000000000000000000000000000175aef023d9375ae90e9f562f88e0a4affdd399c3755c1b22494445d4e7d96899aa4d5f77ab9392051de4cb7e400ca830000000000000000000000000000000018e3eab56eae429c09f9eed67492181279704d947cff0f1c9a4919dff5e6fe07fedcaf5dae854dba6719194f9fccde1704753af76295f72295645243ffc87ffc2110c9d8dfd20b464760ad965d7a97940000000000000000000000000000000018d7001b1d4a67d22399c5f9b3262183a47b6fc81786f8f7b78e80fdafb3c0c175756e602c92855e8ff9d99d4116e3a40000000000000000000000000000000018451928599da4a14442910a5bf125d97f0b67af4194797b3f54ecc9ef0be840a1e0ede13e1415391f57044d71fae2efd1b8760cc40d093912fb073c5012f910ae90f0a979cfe6d81c603adbb98289030000000000000000000000000000000013ca19bea2e93c748cd2adf682a123416823a2473148e59d87da33cabba8e0ff2516e5b2bc9a8fcea9dc4240b20133ad000000000000000000000000000000000433fa5475709a7b70044f88a5949064e32014f1d64826abbf60789380db6d5ccfa750a868d9902e4646bae766e241acab79d640b042664b23667d6c60ef9a5d59de72aee57a78d75752b350ce56d8da000000000000000000000000000000001236e6ebf0b704a18f85281b09a9552e8a478c66e59c9f5d53eb6ff1f606fd667a6f0bfe239970892c9c295a378fe389000000000000000000000000000000000cc5c1039850f3333981b1cd6457a466dde93e2355c2052cc325e18604f59cb22588b6d892685fd7843938fc1b5b8d8a1d1a2965e995bd4380d4ec52fe8e65e7fd99b1ca9f4f0c656adf7051c4b9a99a00000000000000000000000000000000003f86a5cabfe7792de25b9d8c58a283c5cef56e23dbf713851b42fc0d66481ce1946d1c632e38b9de1a55ffa0bd7f5a000000000000000000000000000000000f548b05782ebe160d487c622f8378786712cb5b68545ede95b34b08698f600e02e918fa2253a8be2c1b773cc74c41042cfbf2abd851d2c1f55c56d4f8b11b196c020c2584cb03764580d410d66784d40000000000000000000000000000000015a4bfb53e57dcf53483fca1b4dad7f788e48fedf8bbd7ac40b1707c35a57011a0c7f77ce6626821221e59d8185b9ca40000000000000000000000000000000005618adc16eb9771bfe731dea180e7e2b3b0c9537806349e653a586dea4633aaff7fa7e7ff165fa16ae0013c9672a783214edaf16742762baa58a3d22d5bb2305cb03a1326adc68adcd268428f82a1e000000000000000000000000000000000039895bd3ef87c094c9cb1ec77229d615e76dbf0f3bbd399948a70714d6835b570e54f46f94197657dc94d36c4a49093000000000000000000000000000000000f1c6f8b06ea4378234e99d16fcc439a64cad45a7f8ec567755febdeeeaea4f4b133af18a4c00b3778090c5857739b66c1f38916d6bdd5d379967dcd058ebce5887ef2bccd5fb7c2bcd758e374a195e20000000000000000000000000000000003007275e93f828b96d060e775f2b92d191d6da44b1441bd0aaeccc5abcfc7d2b5e9cfaf7b8497016ec992b13455af2c0000000000000000000000000000000015c1320efcddd0709a12a75049633dd871747e51f099e40908542a3e426d7a29b6633f5e69a4c0b5c32ad0269a969bbf1cb8c8303157f23987f8a2d206f3add697b9d0a303393008429e93cd35711f7400000000000000000000000000000000068dbddbfea897bc2b20b6f967aeafb0ef759082f55a180b3eda87174d0e036761f1be1c682d1a4c33f5113a6ff4e2240000000000000000000000000000000004ad9da407bd80ef365df2eb763ee35ae06074dae0eec7e2a36e57df4b3e5ac333e373cc60c1986543c0c23f3124253561ca9ab9c3df673b7ff8be098cdadd8354c17becdf82e7e99ce264174653007a0000000000000000000000000000000007f506a54adb1f763d55278419d4c18ca581b28ee369f33b848be495dbcce72c76533b809d70e26dda71316cfc3a1c73000000000000000000000000000000000a6c574799ba920ac58d6cea6d0f8ae249ef5310609904965bf86fbf88269530badbeededfcaa03892f1ad6b76818ec4681a0861df30946911d789a5da1f5b89c38fa1a8c0407b608122a18be05955da000000000000000000000000000000001424ab1e7a30035c4ee7d5bdcd8ef87a0aac284a36259742b68a5997e7dd3f2e5065e2238f2e29a23ac5ae9bce3bedc1000000000000000000000000000000001530257b63872851431a0bf5397dff45d6c201da58d7b779318beb70a5ee2a93142e4c5c43c3d65ddc65fe2df1af18906f0798b448ea0d10c84e2a8896f153b1ac3b84c5fed6a4ba6c932260bf01d34e000000000000000000000000000000000bdc58489ffec3668363be0a3e45ca2115bd5cd1745f86f1842ab82ae31b08a1f285e88dd4e0c7b94778f42d495b1f9c0000000000000000000000000000000006f4d2a07ebc588a8f9993ec6048092b6dad82c25275c922b2842253a8fe24e191cad4fab51621198147c6d1bfabeb0ba8b7de8f34053facf1338b54cfbe38dad73121a0429663f484277af9a230abe6000000000000000000000000000000000096e94b43a1dae483b49c1a616c010c25b660ec3566fb7d9c295d3b43c60ba4967b3f0abcc0634de5cf3fba14169fea00000000000000000000000000000000026146a58d55ba4cef1cfbc1db6efd46400b78f508ecc0b2eede8834eeb741b68ade43ef2300fdfae18c02b86e3386768823cdb73dd076ad95679a9d7b11145c12a81b825477f799300d1fd761417c2b", + "Expected": "00000000000000000000000000000000143fd63e2576a606ec59d017e6582711718a542dd0a4c84566fa4312b2d2bbb2d71c1e0ab8e4e214ef2376706a20e3130000000000000000000000000000000001e97699fd2e0badc3a97f6cc55bcf729142aaa13c51f9b155e5904382ed0d94fbe1d2553d602a71ac7ff39189848a52", + "Name": "matter_g1_multiexp_22", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000023a2a3e6e1c1cc57b2295c664ac26abd0f5bbecc0ed8e9850f90b04484c0cf048a76477ddde84e90cc452429e28b78e00000000000000000000000000000000194aa1d8332fd8120ed518f27fd827e3c955c2cbb2cae8d5e677f55963565dfdd232c83a38826621e8e66565f8e200b39f2e54f21b7f2116c30d6e444ca82fe800435cbbd72a98a6d22bac92039c540700000000000000000000000000000000124adb0352af8f18a631cb0078ec7daf00c2186e04d3ee47882d557b0e9e7fda0e0d258393ded20288789085583a97dd00000000000000000000000000000000053f94d0889a5122b6dfb1da2d7f13a836b9be039f127a011991c360c941e5dab8cb3c7ff3d7e128e52dfeb776aeedafc8cecea241dd6a924c9b9cc3d390fbf40ab897208ce9d3e4a148b2c30c25e7eb0000000000000000000000000000000009dee1a168c00632903b93fcf330b28ec7dcb8d6fba65f369237ef873ecaddd60a2d1af6e5b087f07a103f096aeb5e600000000000000000000000000000000006f90048b72dc28cf4cb40585925e62275d44df95fcbf1206e2bc762a455dea5fc6b830420d49b2415d259f8d5ed3ab7e428fab2c596f23bc3c9e9855b74295f52caf73cb7371c93c65370583f7fef4c000000000000000000000000000000001750fc7241cee9d71d95f0023dbc4b1f41ce794e9e7822a29a84c93b9374ccf0f11f931795fb824bb5c9fdb4f9e7bd9c000000000000000000000000000000000a0e6e6c76088200a345531f589ed883203e35c8ad8413575bf961b1e8d6716829f632e72fe90947dfa46745c9ffdefdf7d3d755410f77a0e4b2fad0f184fa9312b559785fb04c6020432465799ebe2200000000000000000000000000000000141d878adfaa6a3982cd0de93b4d64ba840a07c026ca443d6d4c2b6c36cf882e109d80df63b1626c112f9a89809788080000000000000000000000000000000005a5888d22a2f654a58d9a03c68d59cde9ab5e5356b2288033ba58fe2dbacf533e59344bdf30eed07698261d6269fc70557b05efdd02ac9d8e1453c82a321d798f3106bd18764140faede610ae01fa80000000000000000000000000000000000afb5e198ea80997e7cace2d5b271e3907525b6383e9d45d8a7717317655a79bec3a48800149d6bbb11a838b1338079200000000000000000000000000000000060dee81112b7e0bde192c9d382b1eb695f3a1b0b9ef7ae33b1c5ef8ad9134c23b4f473103df15a97bd6de007b828fe63313884abc4d430c06ae843d263f2efc1bba35f6cc270de05551e1f86096bb75000000000000000000000000000000000a9327207fa94bdffaac0a8741955968ee2278dc0fd17e99c6f4717e8b0db2ce7915b1b028c81d48380cdef05ecd5a7e0000000000000000000000000000000006c24bd6aa5f9c41bd4551afaa6baf5bab1729b7012951fd0ddaf2c6dd03ddc2030d49dc92073540503718a44260fb028faea236e782a8fbe27ab15f051ed007a61e25247f1f259b9300974f521f30c800000000000000000000000000000000195d0a7f5a351dff02a805fa08b2a793d9e0c74ae95fbf2f42bfefae8aeb0deccadeb9a2dbad7285c015ce14724879ba000000000000000000000000000000000e177a86f6aebee8bad62d77703d1d34a1b708e84216437c02e0694fe722414f2ef2577c1d39a45b4cfe6c73f411b1b413994f5645c6ce83741e48ae472674921bb2d9b8abb7d04ddbbb85a3f2f7f090000000000000000000000000000000000bc7fbda14f76ed98e78eb84033b65f286527ef76ba56dae43a094a23067e10798065674daa14f912ee13dece4f36b17000000000000000000000000000000000f69104995530de05660aa048993c4e08576488deaa177520676c9cd53034ef101fa3911e40933975aa958efbb1b931f81eda24db328588e8c670ab70431ddeebb0749b431bc1bfbd992c91f35d59b180000000000000000000000000000000001c3bfedaa15025440c6cd32115555fbbec439a9a2fbf706ef21e06a534af3f43baf46897158e211ea8821a5e32f932e000000000000000000000000000000000fe08cc9ff0fc601e5609ca139ae0ebe58faf8d2e2f4f3d0a1231382a15ebdc8f67271b556cc24fc5408daf3c7f74f875bf25b5070829e3d5a66ad24ba9930f3ad64767c51e432b51bdbe2fab470688d00000000000000000000000000000000032c376b26551a064cace577ef53077cde48c284af5633152c89ee109e880b511c0b90db1b30d6d9700037489f6984af00000000000000000000000000000000059c013cde62f10f39175335b76adc5cf7330ffa75d770d908ac7e0fba6faa7b9453e8d0215f0589af872b2e648ec1d0a9535c082e11b366cda0000d8ed0f92ee30fd2c4364c163a718518321c5e85d20000000000000000000000000000000009cb943167f21d9399b184f0bc0c2aca58dcf8e702614ffaf5407644ffa9eda85efa12dd23e756c5ccb5bbb25abe57e9000000000000000000000000000000000d4f59115321181962452c6f3c1e086cbfbc155f2c3019e51e73fd193e9b11ec891b2dfbd95198b318e4513c62cd51bc2c4cb49adce0292e259e92b229bf7965864a945de86eda3ce0bc9f1a6dc8b7b2000000000000000000000000000000000637e1dae04d31282c2278e087eac9ba8506d3c1349c6b98485cf32805bcad002e37d55667f1cc8e5e11f35b4d228cba000000000000000000000000000000000778c3a40e79d6288d3a93580c8f8bef7591acfac2c734018d61aea5dac020360ad4c69b4422f7320b87ff22e30d9a6a5e927f57aa85b2df54b4bddaa041d43766c8929c8b9146d723806ee0cf04227500000000000000000000000000000000069a54448ac1c9ee754fc28c9b671e84a67e884492f8e84e09e49cbcbcaf07fffed42820b1de61cdd0bf6314a2f4a1e20000000000000000000000000000000008f5512a1a70d3a61ee7fd6750813a29c47410b7ddd62db0426b3caf9cd7c31029638499c2e27e5922810cb9bb130723606ee8a5fdd9890b8017f6c432a45517d65328f13f3a2bb42d7115c02929db7a00000000000000000000000000000000078356cf80bc64c0e03da2198da5971b01341024a620ef4a455291b7a694ac3d91fe6f19299d725cdf7506e0485485da0000000000000000000000000000000015af5f875422c1e3ec6bfc5e57ed793f368799c2e068669656294be0de25eb772aebbc61358b410fa9ef79c72f309c84c1a77ccb4b32a762d60b37827ad6c3448c33af6af861c131adb5920ba3c2b8510000000000000000000000000000000019699fb3c6af71eae16b8ee123870888d646ac71dd31d0bb3ca365f728a6687540851c8539dee5c34f16871ca244ac6b000000000000000000000000000000000e68a278bee81ea53d4a52e84c8f534a0fb8c065bbcad9f3727917402746b4d1f611ba5064f0c3cea6f4d7fe84948dfd47cde609c38eabf457cdbd1e0c5366bf523dd5801d66a0282bc187d80417f455", + "Expected": "0000000000000000000000000000000009057b093eae9c7ab2455b447a681857d588819c94b1cdffc0e315987b095edba1ca727043667749c56591429f9173b900000000000000000000000000000000157bac2835d2f972fd1269039a7b6159b7a81a1bf4327cfbd3be8b7c779631e8beea634ffefd9771c910c612d6925384", + "Name": "matter_g1_multiexp_23", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015b6687a34084292423eb600bacc585b4e686251892b16a52d0783b1490a82f68f4eba5eefd36d147c4ec442d2eddf8b00000000000000000000000000000000151f59108d7383351b426ba8bebcf2a04976550aa2d10d5f89d5ed7c3bbd3473ebfa29c1706560866c8596f7549085cc3c79fe6374bf8f91bf7851ff935a124b54fdb5db498d2d37939fcd43bb93d29a00000000000000000000000000000000064e3333f828b1e54d201c043bb0f327d8c9af2cb96fbf587dcfbd55547d76784de0981a0ac86b65f4b8e45b19abc66f00000000000000000000000000000000172b76a242fb2bd9070ad26497a5c190d08472d3fbffa83dafc53d2bf612bf805691bc8f850da8c230ca0b8bd4fab818a59fcd2baa47621ebd90c5cd12b89f2a533ae86d537fbb61a14b1a80982c9257000000000000000000000000000000000158e81d92b789696efcdbd6e3e7c16386d6e5259a247991118dfbb3674643fb97a82fe404832cdbcbb58156c9548e59000000000000000000000000000000000fa0d18e57d64db246ee52980218c3eda5fb7b1029e1c76c9894548df52f69725fb7ff090417ae05957a652029d0a37019ef9fdfc5f0c4ac41255eb172d485317c124211498a8b9a74c0bfda15b986c500000000000000000000000000000000027a07cd6b7cf0219b57110edf07d758ea40b1cca42270b341b2bc33c78fb9cf52acc31676811032d3f618898a0d13330000000000000000000000000000000000e1212938244e425860646cd0258b65556360e832d4f2262984f4e307023896714731a2db10004e5509a1dc25f49ab7b8ba028831f429d027319a92fc0f30def8b97a43da456ddc79443d9f8df72cc1000000000000000000000000000000000bd589682a8510471ab1be8c348ed0d242548f0a5b85ee9eaab5af164367be21684ce2329a64a6afdc6a30ecc5bbb51b0000000000000000000000000000000008c8af9dd0e06a08f2da0ab7cdfc20100b94c04c7e6773a0351bc0e0ea503a69e5f25f250f0bbc5c7685795b279ae151edf8a6d86471f58c69c1a5e7518c69c34165e72ce84fbe0b7f69d9c2717e5d4d0000000000000000000000000000000015865d51ca8131cd5d2b0cb11c2f06e39b7e167ddf504d5772d478d48463668c4f7dabed00cbaca414b6ba96224c95cc00000000000000000000000000000000042fee2fb44ab45d310ab00896170a638940edb2df9a0f06c077bd00d203966d49694c82cd59c378445ae0577471221c0dbaac3f5e25ca3d1d50ebb31258ec4450feca1e02c84672ef15c49b4de2cebd0000000000000000000000000000000017257c7d5c733cb6e9ea1bc93bda4f36b98375147a119c376996beb6f0bd030c997ac52b1556d01152991738dc640788000000000000000000000000000000001155b29f473d9abd15514a0ae1cbd0b6a4ef394aa65f4fadfd3e9551c1d8420fac28acd5337fc5d114c092bd45e9e30d109ccbb8fcd4d4651b84f4708799d84ad0a717aedaf5a76d2970a7b93bd23d370000000000000000000000000000000009802bef3feb5688df77c86c74214451e4613d0260fdc5ed6e763226d3eea8a583c7dcf29eaf4c0bf16c907ceda76db9000000000000000000000000000000001447b1f7ac05cf8dce7e81de516d7303b310316f49ed5ef3f40f03db17926ff5f6656d859367805c889e07919224a6436326fded2b8a3fbf7637bc25bd201d20e3d4d724806cfa678ee039a39c24e86a0000000000000000000000000000000000057b59f849f0237ad511a75b66a77e79ae062025e5019eb71b7b7ad94a96c2905e25afe4357506b2472f99bc71a8ca000000000000000000000000000000000f10b6ad9fdb4f346c5b4a499722e377c7649a800bb95306dd7e2ab7542e59455ea5541f2d75e7cfb1da5dd03bf037a1e005efa8ee75dec8a013029292976e107a507ec09e3c34fb4baf2979fb759f1d000000000000000000000000000000000e0725ff4149698aa757e794590ce446a1589d9a574587575ef64d6a3c935fbd78fb60c7c840d7ef42eee8d72a5ce341000000000000000000000000000000000f0478a776be354e29bf8bd2710a8529cd01da31853d04ea722225bde560f2d9da302ce4f2634c9385ffeae379324b743917f8baf17f71222166cb9b6c4beb2e57d0d054cba3f7fd3a28cd3dc4b409490000000000000000000000000000000003103b0553facf8f3cd18967a758b73111a4a9987b0ceca3a20d6657a7e365be3925f63bd09990e33e1162bbffb63278000000000000000000000000000000000998a34ba445dbefe6023e737f3e35cc6416289185a26611301721db3a24f80dd784b001a2f2a745ffc3d0da5a9e6204f0f73e1b62561f5b0fbc409e6534ad9e37d1c0724b35cdd3f94bf6489e500fbf00000000000000000000000000000000041e13fb55bc9ed069c6d625ee08122efb0212f525b319b88197450ed1a60fc7283f61083ff263e4df10499b689498670000000000000000000000000000000010d931f006adaf737afd1ed2d1a631f519e6d1e9e22166c24830e92e3571e9f138ba901f5ac2f03192c9701067e7906b3ea24fb6447f2493c78a267daa158eabb70c1b60af8175d0d4594c99122cb442000000000000000000000000000000000bc0d401197ce816b692c5ac3ea539cc9658de56e48b4c3ac78631f3c529d4fa2a656f66098a702b4307fc56e147f962000000000000000000000000000000000d89fa2bbf3ad409a9ee7b7097662113b94fab95c98bd47a70fc2707a6aff23bf39944aad5509aba34930d7343762f6e5ed307c01d9e29a0571de07c62d5fcfc80749f02b8dbaaee9f69dc9263e9918800000000000000000000000000000000103cc442deeb800c14c9b3071c13d354d8c36d187e580073d150f4936ff178817dce67ee276d1633e003e66985c038cd00000000000000000000000000000000188b34fb0a4fc2408d8c70eab6df4c6c42d92ac5e43827044db526d4208acad4561c1310115448bc00feb9ee7cfdc40a877f31ddcb55d961bf9bc09903bd927451390922d647d589302855141cf5cef500000000000000000000000000000000145220a2f8fc61b2973d219042580a0edfcbd73a6bb6feea3655dd33bde8a25e0fb841a3b038049e554315100e6724c50000000000000000000000000000000018bf41cf4ce164819a8b00e630401f0332f5caa08b03bda27c205e8fcc5ea7a3374b591a4adc581f492cb07445c8995f145c1442ab82241f56c27dec2cd4dbfa9fc3cf1ab72bc521ab32a82346f8f607000000000000000000000000000000001416a39ffccdb10f65e5f06c8d7af68fbe894a0778e7270ab167ae2a5e917fb0eef1ef1b9fd45c991a45dc92a223ceaa000000000000000000000000000000000755c58a0692f8ff860430c5f75fa35366391f7e5313936e04230a1fcf1142c81b01e68fb3c888effddc0a498f264da9de4d1470f6cbce027465b4dc2a3deaca14e34218910aa76cb45d47139b31df88", + "Expected": "000000000000000000000000000000000d73a7edcbb7163795dbb5a5b4daca733e07f6498d336a5dea1a61c9edee346f74676afe0d6d39c39caa1fa7660ab311000000000000000000000000000000000f3d573970077a17967ecc0fc5e2e7dd4b6ce910f1891f444e36761e2ee3a72fce399993405761de29f9563f74d8b1c7", + "Name": "matter_g1_multiexp_24", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008c2f928feb8b65e521b7218b029a4f54022a28a18845614b3b2de93035228c282c73ce172997e6af93a402e35158ce3000000000000000000000000000000000ca2dd2c06221058a4a7a06438f035ddbd96f6b39fe80c0029f41246a2c8a4410961555e43d9b3d5d87dceb8d0be1ef42576b42e0728db912a78eec2b7b4c96575e341e86a7592a07a660c11e00448390000000000000000000000000000000010d919a48f588429918f1b2f05ba6e897c45b12d905615e045c1969ee8a7d9ae262551f546b7de764266d3ab656c3137000000000000000000000000000000000a40d6f247315e0440b0b8195fe5f7a7dfdb2e1be9e593f7933691fd22789ae94bcb6bfebf3b84afaef7cae9fd539b5379f9205ef0e3a85199c60ad9267349fdc7b6fba4cb765ab21750eb3dcfc48d8b0000000000000000000000000000000005eaa990ca9d57885e6ee3eee10b6e2dde6e1652a743c62ebce4871ebd2d3c8e4915418aea4f4285ba375ad1923b70a200000000000000000000000000000000159919c720eefd062ba8d72fd3befd953e1272695471315ff500830c9b5b60ce5f94bd6e966828d69f7f268bb423dfd7300679b7be7c71224247e8034f5d30a63f8707d92d843a703f0fa93160f65715000000000000000000000000000000000b7244995b7819857f716288dc59eee9ba5ac7bfe010937ea0b67ee71388a3792e5b7feb6890a436db4f1b26df18b38c0000000000000000000000000000000009a0b73360bc0ca3b632c0116f21ffdaecf37e4d6c904c98d6225a08d7caadf5024ad6b457cf31b924118ea147ff10fb0454b01910548432a0f706818a98151e38ff9e854f1faa95ad41a7239b5cc4910000000000000000000000000000000005c2bd45375084cbc4bfebf41709a87c2a8d52256a5e4bc162501bc119394186fd624c5d3d6749708be2811da2c84c15000000000000000000000000000000001626cfa6e87e41c2f0960d6d2b8e303ff8de00c78d1e788f32cdf548a5ca00db1f3a3c082f051b4bca93788243d9b0973685617371b27ba8898ce7f30776d817ff09ef68a9d6721d4a923ed244ae8206000000000000000000000000000000000f736c8cab0794e3751a9e13027a8e4ded1308c23be3d75b373780eb69f130654121435c53b62a929cad39c605637ce10000000000000000000000000000000015b1edb73501789811fc09fe0156344a7a4eab1f04d1fabc24f36e2ddef7c2ccf9643699cfc654b7169d8e371c14e8c660cb5aa2a0cd1e8c3fdc06a3a1f6f9b6d52a8cc2e98c85b8e258f72d03efc2540000000000000000000000000000000018dbc414f9e1c66af803b0c228a3fe77c94c29239e529cee652099d80795c460a507538eea6c94e99b78779fc0f3f33400000000000000000000000000000000151bf39a8e3e85b9361a9472e95cafc3ae11f7d0b952714d2836b903910a8c701e0c3832b8c88592bb8507694d9109b5addb1fe778c84242953db87d2307b40eeb776f17767c3a4311b5d2ffd738f151000000000000000000000000000000001241319f49e1bcc2d3f3eaca51d2e4c395241e2c5d8f32749a168e4af17570793fe086610432db1f93fcbbb95ced8b49000000000000000000000000000000000d90602dfcefc3860a78a8f51432a7608a7c483fcd86c0ee6a70f8ac723537825c14736240cbcf903c94d04e24e8ecc928416b4b4e965a5f024723fbad6ef2f65a1381e70201e26ccb40188dc3d0fae800000000000000000000000000000000024f26ba0c3295002418f7839b774cd305cecc3c2cfe20974343dafbfa6677c2fa6be5c546a1fe81458678c3548d8d6a000000000000000000000000000000000fc8ac2bf4585e8ac8454e3e424e858e1d67cb6b9a7181e26af803d8895717796f20abdfce0dfb390bbc0c7b16c70ffb78077a51f88236dba6d16d7fd681c631510106b0eb7448df456eb9ce758e74cb0000000000000000000000000000000005f24bd878cf5832ebcf008835f12f9dfbc78b2f6e46ee384b419928aae0e754d86809d360b0afc01bd8f2f8d79a685d0000000000000000000000000000000004aafc9a20f52d1c78a17e7824062a1e7165362ff265dddd4c3458c7810a8e59104d36035c93284988eb708ba196d6a2871716e790e1a0120fd26d169b8ffe3fcc0d03683dcdba7d2f953f05444076ce000000000000000000000000000000000375313e7ab999d174735b5290bf9ea333a62387996bf4df3dc33d9a5212ac0645789ef4153223d488aa2fbbcfe808f00000000000000000000000000000000014b792fb5bc39dbfe409356bd75b195d7023bf6f715a4102cf36ef05b52fb2284cc0739fe5ad628a760049c3624a3f2876ed0a27553db6ac6d3959ff4c9bc5807fb7d4f0a56095ed2bbe31dbfa41827700000000000000000000000000000000006ae2c85b2b267c86320c4cdc56b1a09e25f0f68dd208e898ac5b1c0645aca3dd8000eb544eb666f4256806123480800000000000000000000000000000000006670390bd47829d3c31cf2da8fdbbb64b92b47c78d3ab638727ea834ea6203e45a9a023060056c69c1fb567c35b671795ce72b30d989889c8779c4056e441bbcd93629efc2877d36d27f670711e21c40000000000000000000000000000000011c78f1b6d0ecc5523dc089852d95dee641222c743dfd09ff2e56d008ce523762bbd9c7bec6c18e9885b7022131ad30b00000000000000000000000000000000066a1aa8af751eac5dbaf2d3ae285e0cc7a975c1787178f550a42e8ba89fa74a1b18f27716eb7ccc4f21b7957cffd8e806d220f64de05bdd6e1140c1e409fdc13f43bd31cd94e633be38ecf22ebd77db000000000000000000000000000000000cbc0fe6b4956c0f7b9fdd36ea14a4d8284468c280605a31536636114759ece1339f06e050260bbf936b560586e7d12c000000000000000000000000000000001213bfe642bf78554d91820c362b73b7059cf20a0aefa5855f9e61a0490d165f6f61416e135473e2de54bf97cc14b8f6257da8ac7d23c5ed965d8bfc76a642a36ea6ec4c45baf6882021372e8643f0980000000000000000000000000000000007cac206b2d123cbe9375f5c913939b25886a51c857271a59cc2fae2e9d669af0ada833c72366f78be265ff9db049d0e0000000000000000000000000000000002db3f65b6fe7c6688f8d3741e448ac6ff322b8769277572f0198dd6ee8a99397aaeb9addd0892286a9ec6028bf9678863d017ba8c7ed138b1bc70141abc5cdc3afbccd8b1db5a6b5f775efa62b8dbc3000000000000000000000000000000000a60331f8e8b26e97366c0e4cfea158e78ac72d63f219e1abbb670675bea008609f7154752438d9c7758b2a2e076da7b000000000000000000000000000000000d40d90f498a2855ba35f1c4bb3c5409b87062d7857bd97dd37d6e5fa53c94c78319c6b16bdcbf2610ba379d50d131e47a16e23e37ecffd514d47199cff249415a6d366fdfaa82450f0744520258955c", + "Expected": "000000000000000000000000000000000ddd3c7964bf51207485b0575afb6430cf801bae388ff78a69b8173c27431e0593584f9e755b99a5b2ed3113b3fc0082000000000000000000000000000000001735fb40978d364be3521ada17c3ae74b2a738b412906fdf425bdf13ec09e5acdf29013b03fbabe889fa261302a7ca42", + "Name": "matter_g1_multiexp_25", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c52993730e412fec923e33f3da42adadb5d87290ac4448d7df9b401e28b3c7fe7f49c7b7e4bad5412c815931416303e000000000000000000000000000000000db71c91975e41b3f12e303bd8ad15f7c9836b146073946129ba3815bc3217b6116a2a03137608cdab8807d5834eb12026a9bd0a71fd58edf81459152782733536e960d27e35f9f84d00da256bdc118c0000000000000000000000000000000009657686875d82eaf4f93f3e710c467ced1348b60aa47658992771195660c4b96798cfec584ace3bc64040666de71f8f000000000000000000000000000000001375f7e985d987df508321c3d0aa7e7a06cdb78117248e19c3344dc443da319f49c00ff605c057d1ecd942e8b04a5e4ef1e168ab93674bd7f2bf73318a48ef17ef4464fbefd39f77c17ebfdb24d679b6000000000000000000000000000000000da69e098b5e2c8be2ba699f20fa38cd27b9c78025e071ecb2d9fba3bc84b1e673eed79f1887fcad9bfd5b0516236a1f0000000000000000000000000000000016c4ca4d9f15716b7efe6f9e61aaad880423243b2d5ffc96804fc70f29b633dc16474f7194b5e3ca12ab5a1627da580f97fb0d947d71a1b032070a12588b85065c19affd0db53e466f194f04f58dba2e0000000000000000000000000000000005370f5c60fb3bc36ee208e8c185613390748452cf6191bfad06c9bcb52501873bff63892066e0afcb01a0204cbc951b0000000000000000000000000000000003c7a2a97cf7be433864541082bd04467bbb42b2ab708866c8520a6582cce5225af13acb887b6b6a8d627c90e43f6e7b640f850bad2f22049f2f8aaf3ee57564fb38a847e428e252f003eaac465f7d67000000000000000000000000000000001820666eb1abd6144df2f21f2d46096410274e346ba862aca0e62d293fc64a6fd213dca4ddc1a4e414796f59db4d6104000000000000000000000000000000000a2521c021f2fb7beb76a2ff4c7ce96cf1d05823ad8edd9b2021eb39c08e0c7caff505ea76bcff8f6afb6e8c2e81d2f68bf91051da5bce0a51bcba6f4e1b3c9063743646f4e75e3e5a8cbc84e8112af4000000000000000000000000000000000e756ad1ccf0404e110a778f66ade3d10464bf8902f646f7d7ff38d15ef890bbc6d61d48122ba6edb799630a62ae084a0000000000000000000000000000000005b322f44f07d3db292c43f9ddf9ac9e44e8d16c07537bf563c98e02c2705eefc1013e627567ac2a03698268707cd84e8da771e0e827a52a2f7e79e0e5d93ebae04c1ed78cab87d4353f24ffc52099b3000000000000000000000000000000000420b819a63b7ff7ce541661c5fa8cb107cf00ae678981b3fc1b568174ae3864a8241f1e9b656cadeeba232156e66feb00000000000000000000000000000000136fe878b886bc14fed061cd8ff1fa2d85f05bab922bf18a1f09b55c331e7cc9bf0f9860e9112c2f6242b6d1124851dbd6cff707bff10fd53ffeff8e9400966d8ffba6d4ad6a8e7e456df10f8f5ebed2000000000000000000000000000000000b73d3549a6b2f76741aa39ee9bc2bda8cd55759bbedaa9ecc5802310b054b01670dc803938aaea547389d7b0ceda469000000000000000000000000000000000227fc49bdf53bc4f916714ea9789b526aa53efa1eb032c4030519608c62434443847cac82a13e2dd2eb48f73473d8e1e00831cce307cb44e8dbd5edf24f1535b837277160d2cf6daa4e862e57fe73b100000000000000000000000000000000167cdb86301937bff18287eb0b00f5224e674953d70258065e5e8370016cac8194ec8c2f44330adaea44426aaefac7d70000000000000000000000000000000007e9128bb015f01aa725796d7b7851f9c2819a8a578bc7d3af02f7328c922c26335ae9f87756f52409c446852bc710ada8168d56385722f339a5b27fc25a88034d348e3d533ff4dc99d28536c1c09a770000000000000000000000000000000018bd46832b101d12f95b21332b7259719c1f94c056118d877324656d285f73a4fe2cf637cc62a45647db92ba9d6c7d18000000000000000000000000000000000fe58fe2c19ee903d82da6da8713863423f10edb954606b6c56326eb8eea6c66cab63b0c816479f8107612391072c634b929ae82ded73a4876c041d2e52fa811882fb8e22690a27cb4ad3ca05169bbf00000000000000000000000000000000012db7fda36505d19a2c6ba5072044154f444eaaf3e12cce81ea74f28e691e4b7a730095667a71308db5e8322e80fc66a000000000000000000000000000000000fd0f22b05bf82688ac72e9ede526bf806695ff430ff3c750c2946d58ef90c778e4c5693d152e39fb1837bb10cf5f3be36999c516d4acdfbcd488d39e3073db9db6cdd0c0fd1d29d58294ace6d2d199f00000000000000000000000000000000116ba7b6faedd465fd4d1e5f42ae80c133a1d158614894ba663f87137f6108ae03b8e80bf32852ccce78b776dc224c760000000000000000000000000000000004c3702ff7fd9c74169ea76c00efb7b475d45efb12e1b5b700d47a970ed9f95f46e4c0ac66cd12fe79d62898b24b54a0fd0bc405e3970dc2bbd7dfe0c54b7c64543fc241000adeef4f7aa2f1dd2506770000000000000000000000000000000016254d89b0e2a8315253434d5444000d9b56b8f43d3c20d17fd26da4c8e7432d6e463b71a5b2a1a7f559a908d73abf6a000000000000000000000000000000000170c490fe3962fbfaaea1707bd28ecdd46ba29b5d8a0a35baf7fea4eaa47694e680e47e8a9f07d25078274074e232dcc36afa3c8581df069292d53b8ce3e35ca136a0b3f95a894958105fde9c77e39d0000000000000000000000000000000007a7fd283d64efef7094fbd6162da2fd56399765b559674c18d1cf6df51036007ad6c9af62bee534388ea093d3cdc3c90000000000000000000000000000000012fcf920eeec2c1728f3e620fdab1f8a0b99c6219f44b0fd19d0f7f4a15d1636fce7b4701f9c3963cff9b030c3759fb20f0a2bd678c5858be2a49ca54de8716fdeec84e1935b8f44545c740417efa7e40000000000000000000000000000000009bcf0b2d49ce38914ea877832eaa3f1034cec429cd9fe0d06ef36691ac8ac6b69a712792e31afc700872d08c2e0fa48000000000000000000000000000000000f5fd9d2d4710d1cc6c13c88ae602f584a7b671df91cd544697070eff3342d80d750e15e09358125d15fbf8a1ae8df93c8e420db340ef2c1b5c6a71645e303eee95cd93228770b639287b14b6a5c59ba00000000000000000000000000000000053fc59a0b84028cbb3a97dc3124927d6a0eab1c58d4c6d143462bf73c0c847712bf22557a1181750146fe63e9c9668b000000000000000000000000000000000c1fa8c1539ae702bc9441085a89790a5dcac9b18925cdb1e21b95c9f7286795e8f36e7a8b4c3f4dcfa12454624911675398541eb5a03271e2ab5ec2aeb2da80e634f63a050c25de98ad13e9d63d09bc", + "Expected": "00000000000000000000000000000000085e4232f0daeddb9e1ec8731855cf855d7dbc05d4b82d10b77a53306ee7a38ebf45bdeef1981325a61ecd754944c84d00000000000000000000000000000000061e32056ac411c3917684356a6ab3c7068f55d30ebcf8cfe446c68267923e4fb98596aded9740dc7944847a2e617fea", + "Name": "matter_g1_multiexp_26", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000070bcf49d6d066afa9b008fa22fd52f63b68a648bfbb5cb3eefd6feae666f3fd0b9a8447f427d5a9db52ba49854db7cc000000000000000000000000000000000947d708a02cd0a18342bc04639e8d126fc4c97acb497aa507e1c4c3912b04bdca886b75b9b9e1c5ca745acd090433119f99387baca30b9cf63ad10c445daa142fcae1ab3c0a366a068bb5efc9abb3a9000000000000000000000000000000001023942a16150e6497289627dbb0205a7c34afc704232ef214a6609125e90260d68b7c60600cd6f4859ddcad46c015580000000000000000000000000000000002da96265b7460ea6a8d51122bbd2442c6784d4f5bcf6d8b0b6eee6ec82e4d03c9265887f88c106792795837c02ed76e4283a1773995bbc97a6df107082fed4ba40e2d30c5472a25a7643ca9e78b8b8b000000000000000000000000000000000d5be6f99bb9a2379d1e542ece048164fa5d14e0c6c459180717b3da46e8446e9def576635ac1124e1390196fe97f39e000000000000000000000000000000001482d8339b402e3bffe61aaa298c8bae4286f1fbfc877a66e21cfe239bbee383d701d95a6c2b8193d67df5a551bb7aba7f4202d670fc3b48eaa92e925f48821d2ae057d90c5f184edcce9ea900ab51a6000000000000000000000000000000001969dbab76e6a158506b9dd38c647d4a670a21458a9552d903ac686855fe021a7dcabc91e712aa252de369c9234fdb59000000000000000000000000000000000b60179a6fa6146aa6e57b097f20944c123916c6722fd7e606aa34b8da579f6c126dcbb251da7917076a83e2e4b02d32a76cd8d292a7053c449cb98f13cf768c6e37da9d702af28c16dceacfaf9cdef5000000000000000000000000000000000e5fa0feaca8dca2a6b4a42e4a291383ec867f12b85593360f8caec45d31109373dc16d985a4702e3b5684774699e6b5000000000000000000000000000000000ae96f4a4ac0d0a6fe6aabcf902eb0765aee9ac81ad09e7e097d649b0c0165de6ad7e5ffd4ae7d8a272034f28c85ad6f97b7bf8acdfbb148814afee1df79aea17261dad6f78772111a6dcb021d8c79d00000000000000000000000000000000006391a93eb14641ff145f690c626ca412af266d50b903f7465d9a9b678025a35a68bf1962bb5ffe76ea07989a7d807920000000000000000000000000000000001a90846cba7c708bf8b4bcdb3415e17e80ffc9b48820d3307362327b29eca0d1bb7fcac9c09d09fa309829679080b36efdbd5953bc33bfba09fe7b3ee22c46c3a86f557e4b5f272853e67fd95a0f9b0000000000000000000000000000000000c9cc9547fd49cb22986f7a1dc1da89b05f5e7c0d3cf2179f22002df9fa2c586bb3f1496c0c60f8ba36b631fe74c8fcf0000000000000000000000000000000014f8e4e8c5a12b61caf4325d1e4a8505409d722e4eb16d51be5f01f863e5dc1ca68df1b83f546d22fc116f1654a3b30e9a331bb218b99fd38451483a10e8add23c9641b975af3897670884efef90d45200000000000000000000000000000000123292cef01012c3723b4713a345ea7648bdd8b8edaf76f149f1afb993f196f57b3315d86a374fb78a34486ea10e0c26000000000000000000000000000000000ee2389f669431df6697d79ba16d3e4d9bb4264c9ac146a772de6a9a8ac94760cdde7f613a4ae6592509b04b1f8233cce9301dc826bfe2988cf93c29ca9f01421b75ba63c5ed2cee1599122012ada36e000000000000000000000000000000001284787a11e0164bb197f69702d0d746975bd96a3b9221841c7193676861e97e11077b74e69f744c521ddb40689f9685000000000000000000000000000000000eb6c4c25fa1322f7c829691d938f87ba6bcce850404bab57cc3be8c3d0abcf123be8922af9967b83789fe64e2cb35f40a1cb530e8b828542fa4114de6aa936bd2be5ef3a9b7a0e20e475022381d62d400000000000000000000000000000000069f8970964efa22facc786291d6ffe860929121595fa713f4a12f9e99d8508d7d20f7d19c51514538d1ce89d2adb78500000000000000000000000000000000122bc9405ccae4e409c1aa22b36db314a19ef6e67a572f7ea67c247085205302ad12ef7f83d3616279892ccd3c456980cf2f0c33bd044e8c4468b4b7e137ae294c178e7b6c9f19878331fb93220db2cb0000000000000000000000000000000017b92fbdb00429846fb30633a2c3f383d32d0bd433d5a46e27d3c7bd6880948f89bf70b3f1639a18d308ba80b7209df00000000000000000000000000000000012374e8e7c1fdaa4ad4a2d8607afb62ce939bed23ea42a51fbac995e2c3026c2daaa338be160dbec2602a0fdaa1e9897e5f460dacc592bb947ff6f1c15b8464824aa5c957a645a763138ac1581ac576800000000000000000000000000000000004850419631e3de2617bb6b51ef19bf14dcc9f4c7b24ae817cb239342081947f1799080cafaf51ed687b9dabb2f3581000000000000000000000000000000001108a0463d38d617d0a778bf9478ab44050ec290e442ac41e23b526089ab5aabd5819a8f08f903343e93177ce4042c82f26a9736f728e16d7b8ce0cc59e2ccc848c181459fff4321982c08e9cac57946000000000000000000000000000000000c9ef168fadf7a056e6cceef0430f65a57b0f2c3372a5d3c533871c91cf81c40d3459cfdb5f1f66f53b2d8d50124ed15000000000000000000000000000000000483ebcdc219c4c361735aa0ea96c00c4908b9db62ed8cb565d25a7fa664829bcacc37a5608a3c3ea3a42ecf74708ee9ccf0a9be4775d65bbfc894f8ca66fa6f69d4249ea7f6b076fe193f2805e64f94000000000000000000000000000000000f7232dfd8367af413dd078f9d5f47b8c76c38b3ccc4110fd59764265e6a368fd4609b52c21f8e6db2c73908d4ac0b3d0000000000000000000000000000000018433b00ede4de21cd6a1c78c5d280af98b814f0a60c625f0a8f355be43d8d99346282b6d9911c4d4074fe827b55d726fc6bfb37cbfb10a1ffdfcb91d9a52883cb9a606f4ffa8849a6e07386dc9bb3400000000000000000000000000000000015b0ef81908ae275b2d5c3cbc563b8424ee0be0e1f2fb77f67749a79b7730d33028a136d133825da14448b05bda1409d000000000000000000000000000000000461c575bf65c6c5754a214c2e72d6d24df2cc228ae1c9f99d75eebf9cf48f20945a6483185337aa7c0096543dc0a527d94959e16f6d780628694075ba5aa1a476d89d8fffcf4b4ab7e6343c011fee920000000000000000000000000000000006e7385d061bafef2c731ffedd01758f153e2635c7f2bc42ea2efe29931697a1c50e4a13ac420572afc523b7316190cf0000000000000000000000000000000018ad5dac1577c9cc1e9ed30ab277dd381a6babc17e86538570abac44573a8c2439d97cbc370cd2b5d2c6509a18dbc96f122f3a5e940ee7e5038421619daffb8a6f433605f37e78d863f814b51b2ec4e2", + "Expected": "00000000000000000000000000000000020da97236c2405d3f1bf4e937d8285014a190bbc59a17b7163a292a2b825f086db5d371776988d1aa2d7529a64d2a4e0000000000000000000000000000000016cf6d7b831a81d0c487bfc3380a1dc8a1bdada61426a457993f7d6c9c8fee9ee4959324bf7a2425b070aeace3cdaff6", + "Name": "matter_g1_multiexp_27", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017df783852d1f1f9c6dcf1975ed2dfacf3dc0cf942cbd7243a0cea7907ddb289f378ae59b30661d06d0702792ea9e9e2000000000000000000000000000000001717bc4192402e587400b4e7243db7e79fead2f878079c3af998b3a683a0539aad5d6c1e5da6e0a00ffbd10a2d891ff2b3908c739d505a1d6fa85a6dfb7a155202710b45861f1a8a7ac7bb3274a180cb0000000000000000000000000000000018c9cc123fd18d50a7c878b31622a3727864fa61d784285b990fd116567c69dbc7ed872866db2166c7af1812157af9040000000000000000000000000000000000f38e55466a6d1cc2512c1282f74f5c0c19777365819e48606c0a86d2c6aab8938475d15a74f24db868802fe935f6107e0e27a8a416eb38c989a66b84f037a5a24ef3358e20cd553f037a0a2461d310000000000000000000000000000000000816580c761a2f54c386cf60b1417d51a310bb7569a50b475f8d45f13ed6c1f11640079b5d6119270d616e77a489069d000000000000000000000000000000000d9af7b25803b611351f00daa88464e49b277de8d8fe22284a9001a13ed63ff931937d27ee19ba4000ebc212fe03a0390a3cbab01c34856b892aacdabe63d0a0c241ebc137a88c83ad22cf38997b211b00000000000000000000000000000000032fbde9d988ef200df573dc99b087a8ffbec95349256989774194dabea55d970ba303657837bdcdce3b59eb54669c86000000000000000000000000000000000d65e89d8df2a189761e04d35c9f4d3a5292d1dc0d083bc9a982a131b07df6250cc969a3534808959b583923bf02125cb386bebe0e49b7f07b0ac61b15306c2515a1ad6fd76a1825dd29a60e845c0e4a000000000000000000000000000000000ed3f47ea234f8fdc16e97eec7f4521941c37acccdfc422fefc6df9c1127ed293998945fb1bdce89ea18b9ec2b6e5175000000000000000000000000000000000a066fb6f1d69b88495bcb0f0eeaad2a41d5c6764e2dcac2ddb4ac340cda72d7b51b7901c758df15ea16e4e46c7053298902a82d33993a10c56b2fa3333cabf1c5d47a9c78354d58f70ce4807cf20628000000000000000000000000000000000ca7faa768ce5ddb6d668436e2e1692893d07afdf7466c00bc8c963b80cf0d44f6eb9a2070a7bd889ef692a81f9d76d8000000000000000000000000000000000f86fb53e3f061cbe777c7aeb63402616c428216a0c65d5d5a13cce1dc31567a4051420d54b4fc93c6bf263601046712426a4e2317fee033a226a91a52a5830f9ac2cf5f329feb6bdb382438b8a39f2a0000000000000000000000000000000011113946d8ed7e5e545ecd0ef30de293206f3ac50e6010fa7a1cb0371f47aab2d8775c51172c4dbacb05414e65fdae10000000000000000000000000000000000022a7b8af616e4076f625f8151d748f4f49e6dbe439ec695b854544f8a498c7e261c366a4c81be5b9cad85a4eb07c36de0390c05fb0dc9b4a3f76b51cf952a11b909ce13f9abc9fed6a349b8efa98ad000000000000000000000000000000000d863702db9f9e43ea311fdd7e0d87495ed0bbbddaedd3333108704417521b3da4b8ff0bf904710b0200453ecb2948620000000000000000000000000000000016a520d1162c7070030fea7702420de2a6e0f255c28a89bbcaf663c0d6761d201f07d86adf5ea6589e27bf844abf85a57431db9e576643f93505b5b25836218759e736c0d650a5221a652338b0073eb6000000000000000000000000000000001357cc987a4ee7c7bc063ec8cbaecbea0ace4b80e3af01f74d23801d5d37326ab5732222f60ad864cdc8c5dfd3edb37f000000000000000000000000000000000094fbbc2936e1730a1abeb42e58818ffe6dd97bed27a1e4fc090388d943763b055301852222503a2d2a9dedf69b3da26745a32591e359efa41e9ea93a016d2eedf1da112cddbf31818e8d687b36af2e000000000000000000000000000000000672e9a4eb4e8be8efab0595bcb7a6fdf269db71dcb585c12f9d7c1a8414b6e11d91373959d47a4c64a8890766f68671000000000000000000000000000000000203f3804abe330bca60b7bf9925a626eeae79d58ce7c71658b2fceb8cc93da9d455b6d59bb58bdc23b58238d4f01948ed37a5f4bfca6b77ff9e4f7e03bfed52ecf02a8f84ed3da6da2787a4ee81ad9b000000000000000000000000000000000c4e95c27fd983c31fcacb578a688c2fe055516735b5f1ea1415c5cd29592e7720eb2f548071fa3ac642b70e339757dd00000000000000000000000000000000067ab19ad1c97a773164e812771aac69fd5d199e4f60eb28c7aa5f09dd9b3adea959ab4ad47683d27394714eab4a40d281633dd6e729bc17ddc596cb1f17dc6f0e50c052a0b8c5a4c83900d918a9eb560000000000000000000000000000000003da3fcadcafc5eff08a736e4cacb1d6617c3f0850ffe33ff1648f783a4467163d1ddda082ba0b54e678b171b1f79618000000000000000000000000000000000a273fbd5fe99df4f724fb20ae0fee994823d374979ec7ff23dbe148f6977145de9a1f20eda777cbfe0fa4cf8c2a8949c6b019d29219b57404baa955f66cf1b2ee6571ad5b80d471ff6db569e32a1a5000000000000000000000000000000000015b74087be4a98f4c5cb442e4e893d4d92602b1ad36d0f038f232ce25b53e19816f44122e8f5c821b40a0cb36897fef0000000000000000000000000000000017e50b1e84c7e767171edbddc397653c35b34141bd69ca7123792d6f20532f6daa5ed18615bb364b72744f96d4a730be6a76411ce02b4dfc84ddf62ed26508a2dfa5edb5a98a6a20dd69e8b8e7ad2f5900000000000000000000000000000000131517851372c44894bf433d5162d0da394b87a9554e9d4f6174d5712dbf69f756c5da1534eed80f8596f906f36799a100000000000000000000000000000000130a4583c7529129831ad621cd1e04a8fcfeed67ea96db4932809ac140a089e6252bcd101f17d4653555b1bdd9ea3a9b5906098e4ad7e4eb2e996075c7cd660fbc399bc942f9080404b9d0758c4ae14c0000000000000000000000000000000002b8d72148ed7076656128040e7dec82ecfc2d5ed05050b27361a85d0fae6d90de6dc32dbeaebac039187e3883ab238d0000000000000000000000000000000004021fbb748bdffca854bfc5de8f69a9bec478181477d3c6e41a7da2fab3100f7e2737ce958c046d6447370d47e373ad94ef8c281a9be3766fe784ae017d93f608dc2cb97cbb7dd3e3814b5ade845d370000000000000000000000000000000015d1c5bda34c6fafa52dd3801d94a04c53a3acbe43cdd128de3a346739df5afc6dba58d63c7cc09d18589c41d9679cff0000000000000000000000000000000014367ab7f03febf90be2279a87890527935725880ae3d418ec055004f312fa0c42c8f6fbc9c319117f6ce600d86910f16feced33019b3b66d335f2118cd22b2952cdf9757fb3a0cff55b7c4f245fb438", + "Expected": "00000000000000000000000000000000130db02ba2d24a3d70439503b089e6da4cde7b5c51b1d69774b38ae0f265aeb8996e50ef077ec12199ffa3d000adbf38000000000000000000000000000000000de25ad8eb2142051fb2c97175cb4cb2984ddcab65dcfacb76cfe60f6a47083a22dac4f6e06e357a194249b7363210be", + "Name": "matter_g1_multiexp_28", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016785db77cadde48a4ed0d2f8aa9f91bed9387a4766c3566217afec80b180461c8e1017297888e9c5896e509a26137b000000000000000000000000000000000025b26ffb3fa42b1a9e974eb23ada4b9329d670e38970e7abc937463e522887d777934895be0cfbf13d213b3b737a5f6cb5e7df372d346fd13faa90b0d6961372ce2f32ec379e5e50e7ed8a13942cd9d000000000000000000000000000000000d90bd38049f2a8de869d8a748c9ff3120542f38fca6e8d5fbbff86baaabf0f19dbf449cf23c043dfea322d99837f7110000000000000000000000000000000000ede89c8bb8299726ec685765f10167c5b844e427d3c15da6ec2c1d97de174819d52caa96d5cc938e93dd09bbd1e0d813a5fa1674c20c97d08608d200f3f7611010e6a25a790853ed4ba0c5aacf111b0000000000000000000000000000000019e1e2706e878e60bf6fada47a4d4028750cb27749bcf8fff531ec75d1ff9b3a1b5e0bf19e2758899c3d8bc96a18a0540000000000000000000000000000000004b5f00109eb4832ffc9108740f0728ac059c613654a771beaaa028fef06b6cadb9dd182cc573d7ada1dcaf307a8bca4ace10870acf190b373c19ce615e20e5cb96d3c6be3ec155f2b29825f8476b77400000000000000000000000000000000013844937de287b98db2b9631d8e36bc36ded8bbb3ebb2005ea5ab39a4844fa354b62feb7433b8fd3e72aa89ac8e4ff50000000000000000000000000000000005603183a5fb09ffcf6faabcb5042328496f8b0f83e8fe9031f9dddfefef43ee4525d1afe859177d4b9f966599005bdb8d9e38d9383f09cf0f8a8077f1d1dba091ff0abdf7e77c3b65c2df48d6c6f5360000000000000000000000000000000008ad6b2bb88897a2e53d4fb9910b6244faaa045ef32a2fd223adbe6e0b1a5c1683dca69c0e9515dccf7e4589f1e69bff0000000000000000000000000000000013564245d53366d8468b51f88becc288b695879a70c3c753933092904b9fa5e64e39be30edf1f5e9de7eb29c4b3cdfebabeffecf9b404c6bb2e2d0c78fbb8609a38e3d3187587c3848e8f9781b7e9f440000000000000000000000000000000003b587bba9173011da620ff930befccb7b43093052636d6632fb6e9b59b8d127ffa0b7829b59873ae347eccf0e6c86c5000000000000000000000000000000000363be6dee6dd9a1271b24ff84c6557adc62738805b31714c9f7208c320aff220c02b222b96c62af96f1eb42b5299a63adfe53846c0038203d8b8df0cb636aec7d4ed7f78b0b0c1734be448bace08f340000000000000000000000000000000009b403c5fe094f6ec4e4b9b7d098c3ca6fcd838e46a885506ebe8cb3d8b29849a8f3d8f9550f6d33315e69f6c1a6654a000000000000000000000000000000000714a7aee8bd6d754b9bf0292be50836e13ae886f7952c61afb1b45a02a2c378d6d22eb3eb882206a3141e43658a068c06e9d4e41b628be51690b86aa8938db066c052f3adff774d35eee1e332312d3f00000000000000000000000000000000115f7928ee8b8e47af2739dd70bbccbbd8c4c4f9b92868b981e407887b448745514b67164df86126a7aa53af9ea7a0ab000000000000000000000000000000000772b21e2bdc688f0b883a2ec5accd48a13ff3917d1c5ca8896faffca7e4097021ae3c348bfc2e8174db93e079979967b3d349b1546a8c235d60c41408c969a0fd42425f8b5ddc1fa5102d2821bde2c60000000000000000000000000000000011bbf90f59d646617a6d074f5938f64232550e189c6d8105bcb67a3607e13b4668701f64933de602e5daf7b0f4f50c8300000000000000000000000000000000153ff6cb6a6dc6b6ec086e2ea8122d23e2c6abb8d59c7535fcbdfa721ba505d7e9113cfac69e1d81611c72e872071bdd29b83950e79750e9827ed92856e4d1e1b5f0b47c6bbf3611a1fef8f2fc47659c000000000000000000000000000000001897421ca9a740a1f03d67ed31b3922d7f6067287b4addef6689303571b49bae574c343e967dc0f270aa4f91381609520000000000000000000000000000000007ab14771a4e256ec4009aa03af8caedbec4b3ab21d6499041ec58afe17175a656a7600c4bdac42c92efc9d2d21b48bb6b5ac07fb4a184dfed685b93d2265cebd02a3296a3b0416cc6a115242079752e0000000000000000000000000000000005e4061b14fa76d4c02d77adc7e07881dbcb023dca9dbfd1301cb3252410d54db87816a6403d18c2ea8c18027674133600000000000000000000000000000000079d3ca06d0878a569a3984858cac6daf967bacb3fd540187e47dc2c0790d6cfffd1ae1f377c75910f0b9a17d2cde2bb3a7a25ad9f02bf51fd73550ccde12374d9b151f2f6fe535bfaa43efc391f7897000000000000000000000000000000000e2814ce8e1011c37f6f7c38ee9543c65d0d40282793dec81b195b2d4f4b55f2d2b68416eedc6aba6e31b2234c3f08b90000000000000000000000000000000006ddeccda49ae15e5574bce201589758d7ab8baaf1348c30111e997154b6ba413c03e939e288fd95d808017387f1882947944c8c814f143f746175ba0b2d75e2ae73730a265d869763f0e986c088bfcd000000000000000000000000000000000b78dc15a4f413ea9c8b347cd82c278cec530a28d239694d051812c4af08b5be888064f54d2fa2278ca4734549cdd41b000000000000000000000000000000000a8c5ecc1541fd79771037e247357599146fc46b852536529b841bf4b21978a85dd09c01baf8878bc2b6bd8e36bb93c030f33b187df3516866f259ff959d57fa9c53323d5c851fdabb96e5ea470518ac00000000000000000000000000000000172140620e46db480b2a9f1b7f9d0b374c0fa19145e3349906aba351686e0b75305db408fca3465fd263d06157ea471d000000000000000000000000000000000c20ddfb4502ad34e0934812913e222fd9aa201b9e10b4af688031d2202663e9c044cf3374ede037ef0c7aaa82428ccc4da8401050f30459e026a207ca631f0684a10813c64ee86dbdf06b7b29cd97860000000000000000000000000000000009d75caf6ffb593ff15d5635502abd9ef88675210aaf98a73bfea25888c90b63de14501459a038f07ca502b2b0eb98ea00000000000000000000000000000000091c4826870da1d2d7da43fabda1311384f24bc6d7693ab92f59cb76a06ea129911abdc22addd72181c3ecaa15dffc884d940555d48649f30026f70450b2caf2b8f7148b28bfd4349458ae89c323512e0000000000000000000000000000000011e977de99564d61c5e0d1654ceca0d0d63dc09a6dadf6baac980bbb97f38513459b391e40c09329d22be015fcdafa6700000000000000000000000000000000119164ddb3240c59428f11ef8c7e0469d219a591b926296f394048dd59a62a21ee2dbcca55f79df5cac6b784a2e06bc5e140e30424d2cccc91be1fd3a62d9ee49c9d64fa062d9350b3fa567ec21bb06b", + "Expected": "00000000000000000000000000000000073edf80ee80c7d1675d05f8bed28da759098f44730bcde3ca1a9a8e286ff1791fbf22bc36de06d88b20f7f1422dbe38000000000000000000000000000000000d52fe400f41b902f8801063c0f3e793bf643c027676e0a1ad3860e5455bdde58d988b929582823e5d7ee0af8987c551", + "Name": "matter_g1_multiexp_29", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004663e332c105837eebfb9ecaf524a8f7f4d651f3eeae6909824eaaa6250c9f7fc212f98c6b3d4c08c5198477f240a8300000000000000000000000000000000057144a8578437c9a10a7801fb179e417e9bbe1b85e9dd8e2208943978cdd77a8345d682ba83950e174c6cd39c9eb936a57b2c351a7946a20cbae1fd789ecc5f77376b09e911749831e9b5680185b1530000000000000000000000000000000017c44ab586ecd185de616da02f99ee799487b32baf2470871865baa2b2e3ca20f61e6c82d741853b71c5578199d46afb000000000000000000000000000000000c77154ab5f0ba817b30672367bf1e19f9e53a95d7fcc4565f82f604a07d5eedba2182cf1bcca2371af4d1bd09146cb98fbff9f8ac4ad10718d46a857ba28f182263bf2d13c8b6a00902af737dea56160000000000000000000000000000000002df334ee40a5aa144d3727ec6c19d8dac476c01935e7ddbfc164112e35cca9180ffdae5e56f1fb31741c327b5733d6b0000000000000000000000000000000006c1721530a765ce427eacc4e5679c42591d5d1443f0a1bca8a87dd19d6a33b731db6561c50a35511735324c5f402858b061de16f4f609c6947733b58c6444fa9549721fd9a2459652e8e4b8c69b5d6100000000000000000000000000000000016682e225b46618ff794f2da02a82e40193289c9df4ed6985b4daca3e9ce9ac6e8ce84a3fd6776119ae1a2e84f62e73000000000000000000000000000000000e383f55e44fa8528e80fdf391f2804f7b7f3367e0db07b78647e9ceeba5fb151a5b867bafb2d9c07a6a572ee71c2714355ed5b57b28451ad98fbacd5ae87551b7304e4ef5cf7b7dc443a66432406f9a00000000000000000000000000000000176de8a3ee21e803ec6fd42f7f297daeaf1541c08c5c359e286ba65b78d7c31a0a630a2c73d2e886cfcb289783f30cf20000000000000000000000000000000010645db8d7d42e004c4f76bb2fe8b99a3177624ce0c1f465e67f3767bb57ca80ebadb12fba65bd021106e17adcd8553430b6eeb01874ff4b0fb07dc9f23d8e45455c1480eba7fb3033942214e85a77200000000000000000000000000000000006c151767d1066f9567ed86f7759a6f425a9a130a4530a2dec0913e4efe2485dd4b0105f453e90bf27cbeee5d0482af40000000000000000000000000000000019a081fb1fe2893f1919628cb8a3b332ef072971fe6ea7fbaf79d327440274a589045db5d3f06d6dc32d6bc7038c528b89a697a0e8d2cf512edd2a3c3df354eb30a3eaf697779dd9270234b367c2b5ff000000000000000000000000000000000d19d55d1fa04f886078bba50e09ece3a394f3413745785c16d17c5936941345e42e4ac50cba055d79f2d813c69e0b20000000000000000000000000000000000ba513864132f44be3056d3d3d1fe8d10b8be954e785e3d07f816875a3454fb6d44c1a6da8c9644648b46dc7d8a0b67120b72463d54ac1d8f1b3f56f0f98861768b05d5174cf1883dd8eb0410420d5620000000000000000000000000000000019cb4ac7844effff88b242db9908bd8773d91cbd8e076127493c548350bb9f8230d57a3e9c4e4b212e5686bee925d80a00000000000000000000000000000000021e94fbe9881b2f5ce2e8d777a33336fa21c24818cc1b6b699f0bf5cf1f22d7b9fe85be05d09509b88391f78eadf14e3de7997113708f9d092836c2b0b59abf710d8401baea6de73ee0689436f035fe000000000000000000000000000000000c6429ad7548acf43bd9e7fd9ccbb09b5b9b4474937bcca985a2d00c62cc8b72e07e725a5d447e2a92a6bb9fff0c50c100000000000000000000000000000000135ae562ac2225bdfcbed36817c8deadf892da1f8982f4bf53271320bb4e702022128dfbf9e48fc6623648878020c1a67fc3d0560432dbb721f8a0610f0db31dfdfea8cd5ebe8da3fe3b8ac5358dd4400000000000000000000000000000000004a813c60a1988f7983f6ac644a66369153319e3bceda90fcef6fdf3e53ceb04b2c5d240cc65aaeb2530e8931f1a962b00000000000000000000000000000000141411938210cef5576dacba6d521bc46b13ce9c1f2a9aa41a0e9b56639995b69b6198f2a406ca5e471cb0a48233985ff0b271f02031a126f8632e30d8b17cc5b57de7b8b873e0971ff392d4246a40f400000000000000000000000000000000041855bc5957b8649451b7d91ef58fe8e0770b113ea3009815e60cb36c9b7ab797b4448d3747fa9b64b7fb50af906b6d00000000000000000000000000000000048f78b763a88fb7122e117ea4946a631be83b5ae456f0c77a16f3f2b546802bea7117eb27e23a5db65d616966bf2630f8b5c136aa5e2d670edcfb5bee9ff6095d85a332ad55763fe1e5e8babd145c070000000000000000000000000000000003ca70d52cbfe2c097c17bd300f4baba1d03951c6dae613bfbbd53f68598a71d80a285af1a16365b5b82991599ae8fd0000000000000000000000000000000000ff454d717d8518415f23ced167ad7ad1ec76c437e29fef81b5604e8bc628b320fa39c192f32aa6201c2b5b4035cfddc285193e7c10646a4601787edfad3d76e19d5b013a0a954873d92bd5293d3258200000000000000000000000000000000098363ac967c6800b28c28afe92c1379574ec11e0585a0319273aaa6b92322563ad56144437569f3b9cd70ba9e7f9e030000000000000000000000000000000006e4aa226ef031c07150bb231046f36b8ced6b795b3e3f25f707435abc214f14e0c420c699f9c880e8d647ba85d467ef35bb2175fff61894ccbb69d90375df627e925f1ac430a349e75580dd39546e440000000000000000000000000000000001ced5366374fd923b3196d8f6e35900b80d01eeaa6ac41bf7d05d1fb7d47810eb8cd2d1ab793126edbe863be4c1224200000000000000000000000000000000010b27a94ae8413494e0560a10ac71554ff502be7e86cd9760b0d4ea7d1df926cf7ff1661b7902fb93ebcfd1542619caa25856e5fb9547c48d41783bf2cd13493a1fd71e56b9c7e62af84a1f6cdae1c800000000000000000000000000000000120ffc413256888669dce253043ace9a8c924f2996d73ef3a64d76d88dab415c870071a22b97da222361dc02d91cb25e000000000000000000000000000000000940f2259f4fadc3bfbed20ed2b80bdd86f30a846d6167661339e15548f6e57030fcd0be99496fa406a2d025077a4a4e1155c0b9c4185025310e8020eb52abb6f2f1780da15e4ba81f3c9a88ed1b4a640000000000000000000000000000000003ea26434b5bc703c242cc5e84e17be5c7777758f0b232feccef6d200db9a03f10df46cf0eead48064f8dbbccccc3369000000000000000000000000000000000649df5d665a64565079201123e954e78f07177739d082c2bd0aabddcc13f9fec6ef082a1348a369e446b82181e52aadc5610b2707ce84ce67e82d5c0e5f5cd2c90925aefc1e39468ca86475012df045", + "Expected": "00000000000000000000000000000000110fac33d46271daf3924995a4798b3f62c79562d3b44f736b91add9f2af779a614d4b12a9c0d7c60bcb1f104b35474c000000000000000000000000000000001592121fbb147085613d1b647cb0e4a7b895bfd4e5391b45bcb287975bbf0e5218078d3e88f8383a506550ae07c9d167", + "Name": "matter_g1_multiexp_30", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000033f3c31337bc48622d27a9a3224a2acdb5c538a59b497a4a85840c81cff667ed0a0e4e3f4bb23a9ae53c1e79ea54cbb000000000000000000000000000000000cf0dc22af4530260cde26aa0eedc83a0ec3ae87d024e6907f3d22070e1054b3d4f24d5ace7218ed44763af6ec3f25ee32fac970e52778cc90396a5ba92ab98e26499eb1ff17d4bc4c1f78b64887d3f1000000000000000000000000000000000935dce5baf85335575af5a6801b36647727c3e28f224cf25227bfaa52fd646d6fdf0f24466631a93506a58b5f2df9b70000000000000000000000000000000007e032c51e2d9aa53a3120e5777a14963af8a9fc65dadf5da779c5ade6aa043ff496cf4f33e2672dc5e10c4a06dad86a6583bac9672a77f2fe62bea4364aacf62d5e10eb3a757fa0595a81f76543e86300000000000000000000000000000000178e7b4d05c4b7762b474649b38a5ce999c67ea677fee77115ce7e55207d87a82b6d05516ab41c2bac294fc382c0e12400000000000000000000000000000000126e5aef1a9729c73278b805cf102934239d1f706bb3fc3a81f3726feb4b3d2fd8de69fff2f20d5e5217edabb645e8df5a8e1d77c9e42a187054c938a8a5b4bafa834021b727036ed3941b1c1deb9d030000000000000000000000000000000014760b82d3b4949c67d38c6d9172e12bacd52ed49f442d781aeccb7c0444407629e3b7d5d5e1be996940966785940e46000000000000000000000000000000000aa2d6391e40e50ab9ece25786a42e8dc657e9112683279b143be5665bca43746244c27352d3600dc62c2c1c7776924339c02150e4e89b25563985c7802c0c43d00c721d521b54e767c1f509f584bf2b0000000000000000000000000000000003f7c65aeca3fe6e67c91e1f284be35149276a9d9c0c1907010d8ce26d5c88f2a68b632530a31e41388cfc97529485f40000000000000000000000000000000012b9322902ed50ae50e3bb3e07eddec3245df27f193fa88a7685795990a5fecfa4be4b5bf8b0702897cfa369d614eb942196ec0e9d2f572856217521fcc5e2869f16d5ec5fe76f7d350698f55ff0c5650000000000000000000000000000000013995f89bc17b99384e389c9a768fa4bc37526606966a74a370c9f964cd9d3a7dff9d6be2319d2c8c9d5ac1b6f5140b20000000000000000000000000000000017b32d8800e21a4553a1a15ddbee029788f58023164e65b25086e0dbe2ee0c16e519dcc4753c322b50c24edc305cc26d8df5017c9c35604f061a7095d976d08bb3570ef8fb518cb606cd39a3060157ab0000000000000000000000000000000017601971d5328ca817108dc9899c9c3b88aeca2ac5c03f70662c9bf6bf3e06d25fa4b7150e0838c21c9b089c7102a17700000000000000000000000000000000198db85ed42c61e1137fa50c8b2a3ad2eca4e9dfde3553b8ff7ee3aa6389d73c80d500c883e52be5cb9fe8f828bba84f7b82e7e565f8a521d1a9d0ecafc029f76b70042e1ec36c20e3789b49c7e50ef0000000000000000000000000000000000c830262d029435b1b857e7e3cd118e8a6825e3e413f5a5f67b37da686f442577c0beca3e86c13ef6924472305ab54b10000000000000000000000000000000003d35dcd36ea7352d453041e821dea655422ae01a50731698af020234e3ddd38140c24ba2af296a964f4f5896bc0af8c8260c1b7a249ba215f0dc127a41876f858b20f4422140bb7695c8f98e4c474d00000000000000000000000000000000009830bb211c58fdb25fb97a4ba226ab03516911e7b7d98f25b94c827774592b5d5c56edfe3c3040454def1429f81c4fb0000000000000000000000000000000003f34873ad16852f435cec18f977db00f786b7860c580ae0dcff8f03a8a1edbb417f01e0dbeaf035b6f60b733f38a564cd68d2b074d038ee0d9887168dc16805ed55df26329a4c0e062c2124a6e50667000000000000000000000000000000001718cef19fe02a179385ba031f23d28e20e7f57ee82db31e632cc3530d17291e54e8a01564963835c724056c53f9853b0000000000000000000000000000000016c44ed6c85628341789e80e1d95a10399b6ac126319bba3c66bdfe6a40f2b06b721a0867c30be1356656cd36e6370aa2a40c2e796148ed1c539b0584b90cb386844fdcde5d3766cbfb1d1b58626fcd10000000000000000000000000000000011267a6e9adc4b547ea0f42ff6cc9b35a40c3cdfd7ea3c4169fe1efdf533341969cc591f26fe9a48a44e544c515339310000000000000000000000000000000013d878f761efaacf28677577c93d825336698772044266d469b934332412bde9ad5deeee4c1f534a9fd89e799584d3394a1e176fb26983e549aefff9aeb220f50e071222073422dc2c44abd85528ee280000000000000000000000000000000004ca71357762ac2e9bc1f53919ee2c19d071fbd3918f5948f32ecc78be1e65672d12afb4d4a8df41a038bd5448bb0a04000000000000000000000000000000000b80b54ce782afbdad1cfbd57a852f629c0452346d5b898062a8abf12c73bf79296564d3fdb867ddd81156697a00f03ba62e07bb97ca3805ba2d30f39f44e70a7b2917889c26b84bac8f9739bdf764090000000000000000000000000000000009cc641fda19b0e33065a35e74a7ac28ca1bd3bb8a7fd350244ad0cd5dc89d91e7b2865e78ba24e112589e298e6c5cb40000000000000000000000000000000009c3ce4324dacb1e2ca82f4ce6a7ed1292f204f4f7b2c5e0086843546c5c00d16be4e7bd9c979ecd3af590b40b0d70a4a14278fe7a08174660c08323de272b2110047a1d1d8bd0e3c7d76dde030e00a60000000000000000000000000000000016ed972bad2d24d80332c4aeb1dc012ae4fc30a11597df1ca73114945c20e337d1c424e636d403141c737103a4dc02470000000000000000000000000000000009ab2d22c0161247a3c4eee341027a97009ea95bfd45fd186e15feaaabcfc09fd39dfeddb2d3631b943958620555fed81f516ab5b36a59e6300a54d17363ffebba35fa0c64cadb21e541af5078545b40000000000000000000000000000000001721e0fe2ebc0be63df10f4b9db3faa5c5fc3ada0bfea176c4fcd1cbb696779c03602cbcc1da3917dfc09af72fa3cee200000000000000000000000000000000192e3e3b5b9b087aba72b852319c200451a4976a4e7cd817eec04c007c8a2f800fe0bf7834d22a21c1989ad8c6ef73973bcdb23f9568e409271b5f907fd64b0cd81939a52a6db38fd8d95de76213f7b5000000000000000000000000000000000159c5a01e76ee666e8e22aafc77e27705a633bd3d1dbaca92117e4b80f917a3bfe80b36d3fc7721ed2fb8434558c780000000000000000000000000000000000c8c356e19c759e1eaacab45b4fd2e0b42dadf6aa2ee8c051b8ef4de0c4e583fadfd86ff6bbfca1eed42a29afa470c8c1b716b02b3e94600867e019be166f4532d264e0aa65d723dc0e117aded59245d", + "Expected": "0000000000000000000000000000000010f2b9ae629ef12f213e6408c94601482c4c3cd0ee33e3418c86f0b8092d1a1ab7d2600140f6e1231297c3bee4a48a9400000000000000000000000000000000018446e6fc72ffb3c6c25d6aee2d9a8bfafec7b4f63dd3f98fde09c088876c7f4d30cc0ee31985526712228766ad91d9", + "Name": "matter_g1_multiexp_31", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000de77471af6d857548f26f2ccea9c33f50db361c59b097fa481887b5a5deb4fcbaa25ec1008b131fedd3711d4d3ba029000000000000000000000000000000001037ee7b2005032974767d672e14be86177621db0ad5d7df5faa966b0e7db6319ead334358142feb370f60cec698f3d1bcfdf0495e49dbb8a8f9a0dc517351f39a6d823dcd42715f329dc78400bd74fc0000000000000000000000000000000000ae57db1c0d1575c49f8b049667e1c8ba0ca863fa56ee58a34ac1ae780c92418ec50294b666a0f99e0efcb2686a4d27000000000000000000000000000000000aa08900fcc4f9b551229b7a8a59aa9b337100c68703ef60597f6acaaa7c1ce910e643549dd0c328a7fa17e44b68de1cf095238bcee61ec1317c0f98ad4f8f9b39c5940cf37a8a3a676787d9dda994380000000000000000000000000000000016cf186f3a0ee77c7e990ec0784d99510320114793fd7a672d5f739e9b0f1186faaa9d5914860d66173696c603173b3000000000000000000000000000000000124f5c20e988b460c261d274251841cadf5c99a12c9ae8b4b3baa7fea8b592192dac3506860b15289df704cdba1dfdbfe45a6d64cac817cd479a501c77b6720c6777c6026dbee471b490fee9f242a67000000000000000000000000000000000166434c1551befa708de9201c02cfe18020d18ed881ac4d154f5e560995f302b57b1694740f76232307ec0ff729b2709000000000000000000000000000000000a961fa3c19068590b4c252c0429414ef393ee071b02a4ef15f6a5c722a73d145c8e058ebe1997058b38ce7961860da954868215022673de608cb43a3cb74ef2073ffff34c54fbb43f19b22a02bcc2ad000000000000000000000000000000001618c78e4962162f253729c4cbe326e7ea7dfd6d5cdac1b17353135485d434fe7c4d857df673793e9d12ee65dcad4bb50000000000000000000000000000000016921790d30423d878255c44966b316f9c29dde6695d66a97139fbc6fba9c4df9e291c308effc424e5e2134680846fc37068c3ba82e52fce0223a9f28c1d42681c7863c94797d1786c1adbc3e6d10dbb00000000000000000000000000000000128a8a8584726a4aa2cab71853f843f49efa79071a8ed0a6ed2c7913fbb85e254184d457163fe647d0ad719d04e6857100000000000000000000000000000000158d36271e87ac2879fdd3f1fe8ff306126adb340ed93406951e372a7f7f3deb1c347ccf598f2e007d92f502038bd4960042b8005283c7b91ef4b3ff7e20a91349c8c3d1301c9b54b901e8348a7d186e00000000000000000000000000000000047e63ded02c49b7126a1023f1ed4a0af20c2d5e95718f474e4171c0fa888d7fb53b6a2bfcd47893aef6657f31071167000000000000000000000000000000001404e16f51ea45098d5bfa00ece3df841a3a6630bff2b02a8063ff9af5c3f149e504f04e1fc9d9bf35324569e8b2e1730a3eb64ce8fe140d94956b0685f91a5462dba1a90093e803dc617559a66d20da000000000000000000000000000000001866eb045ddc4e29fa612a31a34355ecaaa8482cd0885bbfbc5cc0b3870a86a2b4c3f15da23638dc03619cae6b721f1800000000000000000000000000000000086aeb6a413db889a86bb3fe036486b4e26dd614aabf575f8d63614a300df8a528c9f6d47d59daad59d840f591063b22ec88ed0eac8d0f2f618530e91cdb9ea36b8d56c1001a6792a09e11ff65fc02aa0000000000000000000000000000000001765c386f85f7282251b6054f03a3941d44f9a8ea2814a49f75519f9fc985133937e2c9e06b59441a6d9a95c806d6b10000000000000000000000000000000011db74b6bd144f9a0d48185a3e9f4adbc79131764b6e82f11823f1bec92245a55d82e6d949f3378ea6605ec84f0613285f03e53ff983fe4886a3dfc03a353fb77927d7a0d1998a1c55ca7421a4bdac6f000000000000000000000000000000000bc9a01aee9eb527491f7334959b0f4275492afa38044f0e6dd222a3704f440b5ae2120e8e2798179634c65f3d674413000000000000000000000000000000000ff19f94b6802a4788c4fd84f66b9be03fb1417544d56d0e473caae0f9b9124c622e6298624fa1d53886fb5ba8b470fdcc1b04dc356bd348211ccc4c50d12cb382660a4f9526539c2a0c52b021ed2165000000000000000000000000000000000df5ceaa6ca501d1869b51f035c19c0f3f9db39c739f882a380930cbde7737790b25a2c01e65ed477755c2beb16e97f300000000000000000000000000000000148458f4ff4fcf8559b9f8a2ee4e486febff21d91fe4bc3c77988007cf700186894f1c1fa18ee3c4595a462712750d3097b584ee05c27d45390aba36772ed49d571837567e95f1fd3ba3fc1ba591672700000000000000000000000000000000029b16c9578701febf6662da833091deee23e647a15f16895fc057a37c153fa738efb1742c4bfcf27eda953a07aa01c3000000000000000000000000000000000196d74cfb1e6472b7ab67a664a7c46ad0377c2b465e12d94b035b4b79c7e358475339e09690557e4b280cc84391eb84752542cd551cafc5d50852526ba0a23d274317e1e4a6e75c0d19319e5853b8b6000000000000000000000000000000000e005ebdde060ed0233d1b1d6344b8d21f8cc1ceb6d4fcca389303e1c44c5964a4521dac8ce225e2e4909c4b2a47f622000000000000000000000000000000000fb3185aca9683a81d41a17b3a6048e75549d589354d4652756a4663cb25b9fbca1bcb9158e2ed73765d03be4e2b570f2f76a0fa585828f79553fbf3baac6a2776b782de66dedd6b734f9342e734ee300000000000000000000000000000000004df18eeff223e3a255e6652c3d14a6dad17c76e0597b43a6679a85f78d4bbaac1e2fc0ccf6a89149dc18045169345860000000000000000000000000000000019d60ee8b23308fdcfbb26ed30fda1dda5c6841b46fcd902e6c34dd268fdb1426e215d21bf650a340b284d5c7516efd3f638e6a70917c89811851109296a7225f9c7c5b3d7fe6d6ba6c7d1ee77db44580000000000000000000000000000000006b084e91066f299e44a0c37cf65c30009006ddda34d4151b0c18a5545d67f2bc76df0bf9a78fd2b771795c8d041655d000000000000000000000000000000000262ba1d9dbb009f779e2a584ed313d78e4ac69a811e071c10e21027138234a32deceab16a33767fdc4a78062cd23ec71c4ac944341dc68fee586d221db2a8167e833f18f012afa7c3844def6dfb26bc0000000000000000000000000000000009aafc73979c000236c08e089828880f54645b5ff4c1dcfea0ff41ffe8e3fce8ba0dbcebf0d4205bb6616a737b6d3542000000000000000000000000000000001399a2072604d50f92ee186924ce32c4e887803dc258b7495aa2f3d2187571045db7f360d2614b198f83bc8024b06559b0eedaee9347b10ab7b346fbc16c10cc9db486f561f88b756c269ebbba23a7f4", + "Expected": "000000000000000000000000000000000365ffdbc48aabd8f0e786634b9a853cb8312bf295543bd280c1a0a9f7d0f8ba95b3aebe31987ffab1f69a504edeac2400000000000000000000000000000000150af5ab7e9b1bc60cda3ceeada36abf9bb43f1182659d8d72281c1f1cdba73fe7d6e52abaa7506b89ef43f092f25bba", + "Name": "matter_g1_multiexp_32", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000012a651f467e9a1c1cc99c82e16cab2cef53b77268d968dcc73c5008e103d2e4d19aef4cdffa24b9474fcb393a48d6a70000000000000000000000000000000005d202cf9bc8c0124c0f817465eee7d4b1219071cfde50ce2cf8951efcc21fa19c762a1a8630eb7b8dd90cd03b8bbb0484adc8cfd2e42abc2f0e0d7e9c4b378f73731905760bfeeef01c94f8d5c3cacd00000000000000000000000000000000060650b71c97950ce5cd6b6bfdad46d66df454c5aae1ea313a70e7fc841e06f64a31edaaced17d8de56f1ee75f5263540000000000000000000000000000000018a211f44acc52e92ab5eb1ce304d80532fd4dacce60370dc62d9ffdebbf749689620798429b5ad1d8293c1967a43c12bbd5d4a15998d733326ce23cced86ec5d5b410c29ee98a4de19f2662c3933dd10000000000000000000000000000000000f51ac340d512becf5d7a515111f63123e9bc940242ba42be9f464b89847a8cca9d93360851e3d047de4ee667a6baf0000000000000000000000000000000000dd7e71b516b3752c5be5ee5f3908c17e3e019b46422f24659596a42e569ba9e8711b1e8f8329cfbb990942f258cce103717aadf16301a9c8741d65c86ad7f849101e30b7b1a344643b100a8582a6ad10000000000000000000000000000000015d542246cc0b46bbf5571c3173abfcf10ba447e5ec962b5f712ea7de3974c2873df1979c9d6432bc88d02588a3730f00000000000000000000000000000000005e1611597c12a4c7aaa25bd9ab1b6d30c58bd1fce3d87d66a03f25d6ed110c84c3e902ff5475795b5159126debf6cb522788b3597da7b9b106203dd0ea97527aa8f5149754bbb0c10bb6eca8a46d9400000000000000000000000000000000018f565b38ce775e6b40581f757935efca255311b872fea3bfafa0662620ad5a02a7e8ce48c17daf45668c95ab0487c4e0000000000000000000000000000000010686971b402783c1e7d60126cf484fd01b871944179adc4b28de5d72e5b8823b48d382a8b69f6b4681c74961ca2a3843c21276fc1371060c226424eb9886de6897b15b075fc5a51aab4710e9dddd3840000000000000000000000000000000008d42e31cb4c514e450f56488208444481db0beb5807c6f1c2d82ee09c9413cd6726dccd72e0b8ab6f6ce6492921b14f0000000000000000000000000000000012143ca6dcc3bc9edb5b10c3a47a5130e393986dc5e83d1eb61d9b193ca28193101eadf00916a3cdcf7b6c1369b17038ccbce4e92cf377f67244995badc72db0b80fe37c9b7d443595156fa41abea17a00000000000000000000000000000000101eb8b48df43c3e01c1508aa9d3dbfe168e7458cef2ff61c15d5b4e8dd11be6b9a76966c01682fb07368f22362f355a0000000000000000000000000000000000babbb820a5a8e0bbbae1e2455d54b97f6771ff914fe33a007734d5072a993df31c6a2726c8b03a8c2dcf48a73959a8ff79345f31c107841ae388f6cf116d10bc696aec4933de56bb9affe7e20c649f0000000000000000000000000000000002fe8c461de25f5e6c5a082fbc4ecab5a37dbba9255ebaa0b5d245735edd27550968c2558ed24f7bee99092228e37c8a0000000000000000000000000000000012513b2fb62725aaf948403c13f11a6d7461c70cce3e4f912c8d2cc9f2a8676d9bb37face3770e7c0121bad6af6302d121cf773387d5351aeab99971eaa3b207fa6a318ad60f1c3e16b7f68251f9c91000000000000000000000000000000000175c93838001f4c67a3e0e5dd7eded26a8818b2e492eab2e0e6f8b421e3d3611561c8b933010a3c5ff96128631f4e88700000000000000000000000000000000136292092a366a73a5609cb1e7fa403c59825e99c8c91a37b289ed779c4a3db71370a4bda2cf8509cc9d4b4731b4f52d2d69cfed6bb2d33fedcbd215dd4e9632a3cf86a4b2716406305f6a85e6090a05000000000000000000000000000000000d03e1d6dc4bf59262fe3bc3e163565110b751c534e57c621b4be59bac28d6e8bb379cd4afa3740797dadf32194fde310000000000000000000000000000000014ee46a0cf13e795c8a46399ae63e1b812f237eea725539265e13d3ad1a663374dd566df450fc1191512ba978736e5b779cabae288f8a9a8cd54523c20825b8fb07886bbf0ba0c5c807956f268af4fa10000000000000000000000000000000003cefffd8fa01842c36dd9fe1c57efef3278eebe5d1020582c3d13ced75d24177127da37eb59e9b46b4a0a19421a5aef0000000000000000000000000000000016c258ffb2edb299fcc04ad309ee5d8a8f186db5f3af8011d42b22b23687c2e814e2a8d366f3cc61d7c89bd9619523b31973977d8e8c592f9063c5a14a658990f9c3405643089eb58324cd3f05b5b5e400000000000000000000000000000000097b6535843436f879ce659b6ac9563d81ac0262b9a861bbb367bf8244a35a5de51f3060d05cb2174cb41c8c3dbd8dfb0000000000000000000000000000000012dc9607e0ebf73e3577ba1ab39437b03215e366cf1ecffeae4ad4c7919a63f62e45103db65de4c9e3281d7604b07f24a610bfd375a7b8d0b034c17c8fa27d4366b06c681131fa7daaeeeb08e25c2ca60000000000000000000000000000000004479ec5d5ba2f1c661df8e4f85320d0e754372e0c463098b0ad7477f7373f309c674dfd31c7f08cccbbf4bbd17c23d7000000000000000000000000000000000470cabd9f5c4bb8b1a370888d8f0f486387a89efb92912072fb0907a1e64f3327e9beaddeaff44c502414632243d6fb99ffe1dc2d7526338462860501d75380a5ed9d53e675125342afb6652a97437b00000000000000000000000000000000038101da3c35dff20a878300bcf69e393b77873a971838581daa9d096b00bd6fec3dceca882a02d397a90c816fb415a4000000000000000000000000000000001184246344c03be6103acd745b3ed37d8f67ebf0caecb00cb2528e0da9aa3f352a4677dd6b832c042d6e1235da7521fbfdd97465982b58e69993711a6a64134bc4e76b88ba1948af91ba3339e9b9d3e90000000000000000000000000000000000cf99121ecf9b02cbd006348b16f9d80f64ae3c946c4802ec6bc056bf6e95e01b80cf3fd10ab1d30260a402b7c46f880000000000000000000000000000000015f35fe1ec8c258095394ab2b021d63ce54ed4bfe14cc5666f5ea4d5a0461d535b8bce3263913c1b4e6db6996cdc037d786a2a3974c84752b32f29707805c71992d5d473f4b7bc1f0757d126607a1c07000000000000000000000000000000000e83f4b1d3eb8d45ec0fd9a4ef001e5bfdcfb9c99a6d1dd4b4e8043b4d11f5c6fd65296a33c7fd26a4e30dbbe1869090000000000000000000000000000000001197b11d6747280b37769946549ad9d4a1ff1006ac726d7cd322cdb4e3cf86906c7ed371e770fd95ab4fbaa1b7b514d985d33a7fbe6ac6eb42eb932dfbbca2f771ffad5e80fde686e5df9d34e9f83ad6", + "Expected": "0000000000000000000000000000000012f496f031f5c1b594256e272520ab98f3733fc9c481e7ec8de8ba70f493065eb25b681a3959994d37aec979c22c6c3b00000000000000000000000000000000015dbaf471eeef9307d8dccceaee179d8c9072b052af66fbf049ad1d346e08bb555238a763e903541fc72d9edc30ec30", + "Name": "matter_g1_multiexp_33", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b632afb8deb955e64fb4ff5aac396152e23b11a3f326df0d77b3ec078934cfd5e486244aebb44cbd1599f594991a26d000000000000000000000000000000000519f9de5a5b1623e4524be68b5ba0f997addb4da78adcc9c3d5910009a261fdf8b0efbb6e2a085e74112ac4e2106ef319582dfd9cb80d44c17c5f62360e62f6736d186194f0f8483e34d8d18d832d370000000000000000000000000000000005456d9312825dcfe5501b2c38aa610a767bd38f46cdc8acd92f0c8206a9c2f9b8f65c8baedffdec5e69f03fd3adc4c40000000000000000000000000000000009b2dab21ba4e4b4c284a623994b92ed5fff0fc198bd154fcfac9abe5f05b830066b44894ac6f92bb2f61bc88a7867a8ac0bd9b8746fd02aa70d8b8a2b5d3be46baecf9449d8cd3d620cf9efb3c615d10000000000000000000000000000000009f55a987011dcfc796df284c7bd758c3024d4f09edb3884dc087de26fc1df0f71067d44fde07fab9334971b4a0bace000000000000000000000000000000000003a4ee3e9ac2632cc81cbd4ba397d44f738ee390a4af6ecd65079f412bdd8c4a37d5413d0d9a7dbeda8a1267d6d843b069d889881d5bb87dd65a9a02a7fe239bdb55ee54a6310bc987e7c5772404d7d00000000000000000000000000000000173c7db310b54a4a720074dee01dc0e5f84b606c9c3ea0962bd4610b569f478d7a5221feaa944054cf7395e578d730d8000000000000000000000000000000001697f0e16c49b223dec9e0fa429e68dbaf96b004a561aa3e37158064ceb9232c1cd21156c053fb89ddb230deaa7f8336be658348e299bbf2438a0c013f86eeeb69a013b8004a4996189472f3372b326c000000000000000000000000000000000ab7f085b711171f999d0c4a46cc7c8cd8a429f6bd90d1b860c01066bd0d193f1c1441ae5aa97d690569807749ed69e1000000000000000000000000000000000824841eab90d56a1810c129b8f27d0068fbb7e3536d6e56cdfdd9eb553e283c5d0ab1c418869e886fafce53697520859b9d0ec92ae7df3f52a95747659f8fa3ca2cd01e8d7ef6de384111246886bafb000000000000000000000000000000000bbc8c5b5e4373e76457fa45acfd3f1151735457b0fae06e1d3e6e5dfeb35815aed44bbe6395039481ce02d2aa2c502900000000000000000000000000000000089ac22ebc582bb71a60c88638747e2243096e8d193fa1863089698fbf6805128f9e32636d6f954ff03bfb6c5bcb0060d2ffdf1237b4e03c219806f2dea745c94bf08924e1b9f11deeedf0db19da6f3f00000000000000000000000000000000001fea43c3029447965718c8e76100875acc8fb4da66f7a4f7fc5260de3844aa9e9a89ae4d9baa11c118b9f851fd63de000000000000000000000000000000000844aecf4a3ebfd8b711dfa9efaf1a57d635f46fb980903e362d4ad55d48c4289a3fb1f439e6b7d8f88cc51867d6b462cca0751c9534cee7f14d11b7c8ccbb2c537a799df59f850bb125c6362d72e9c4000000000000000000000000000000001384e33086ebe795cde3c951de9b48f3f0fa2f627524cf0c4e3691599b62d4611c6a84897298c287d162825c3f153a75000000000000000000000000000000000a04af7cc41c2d3663444c8aaabeaf70dd146dec114458b3d1dbc95cee99ba89a4c5a38f2974622292e3236fe2aede6d17f890a1120daca4a1bc1bc0fa7529f0a87b5fd6ec385f12b270bc0f1a5281b400000000000000000000000000000000158820954aaf8e6387cc0e8e528723e0875f5f719a46ae5cd9d967674815a2d9679aea9b5736f882d37e2dd26b7db17f00000000000000000000000000000000058cb933f8dbac61a22477cdb3f52c9e3de6f060dd51aada35b6f8480a53e8eec8f82800e89ccaa2d2eb1dfb4352f16561ca18257d9d989ec13d4f158b18ec17d59344f4558b6dae6c0aa0c2f37affb50000000000000000000000000000000000a7c9c1bf574503a884ecde5e921da80b299c4efe674a2d5c841e6036adaf7c1156393116c2c0b9827978d43f1e3e440000000000000000000000000000000005cf22e56bf4a46504ecedb072fe5e18096f9da550065612a1d00cf79c65384dea1bf59cb7c52de905a04f1886f36c8a0fc004ed8a135ad97cdd1bc4d0c3ccd15e65031ad7e3cc13ef2c260958bc43be0000000000000000000000000000000018e344838e2efd9363911898f27882f67454dc3b1bbc71f1d99e787bbd6a1ec9744876156ed8db2ccd826f2b4fa784050000000000000000000000000000000005528854a8568ec6491c79aae1df15d965cde683c9ea400b470105117f2bf3b41d2f958a8dea5f866a55e60fd06c1f07d8cfaa1037e2c81c6973b221dc7badf25ebe3fb4b42bbdef1124265df2c7ccc400000000000000000000000000000000047dfb6a6125ff02e12c4a9d88ebcdf8a4375367e1473f5a0d99152bf0a4055138aa9a83d98d7f74d9fb8888f643cac00000000000000000000000000000000019d0bf5162ca55d8113a97cc3255d090c6924362e6e05083fc323dafc3b12e898cd600d2730acf8cf5cdfd4420962881c25ecc5d37659ebb0c9e21ea2f8fddc518e3d8faa99627b21faf105445f69d7d000000000000000000000000000000000e132de353cb09b69ab369c616718b9cf492cdb9d3002593319a6e7b61c7d90f94808b75d8c7e3b9d7a811d01baa47a1000000000000000000000000000000000d636abffa063379e2084cfc09da5ee04d40d8e74ba0247a01be414cce820024766195520f1d2eaa90fe254e12a4d86026cbb32382902d9b1963779070d749cbc4df1e7605f840819f2c04aaf89c732f0000000000000000000000000000000013f2367ff71430cb541557f79c5ae8a0d9053d82341d83037c1f73a52585255b205706227de4e87d6ea2ca602483d2170000000000000000000000000000000011f3f4e882de30b40bc160e69fc2bf4f7c588cc83bb9dce3467accec7c47714e2b326be001a36c42ba39c7f56b72d6fc699aa549077a80ff8732b5fc9df148a90f405bccc14bf7305266836566b7a98b0000000000000000000000000000000014bcf3f26683234584d79b436cc608462f1e2c20b5ecc5019988d8e30137859a4b6d0e1135dd5bbea0781b8ed3f0653700000000000000000000000000000000090ef29bf63ca97ae8388588227e1d1a0653c43b16a35a63f2ab4f0b11fd8005d9a85d30a7406491d983f347e4dfb9f140e2de1a2901f1380a383a741d79fbb0a041da5d7bfb92edab74cd483edf9523000000000000000000000000000000001817fac61301ea6a43d7968b22616b836ecd1f20e5883e9b475c18353b066f93bd68a8274d0b6ea4480d8e314766dff7000000000000000000000000000000000c52fc676604061338bf0712fc1606dd09783a1f9a5250e3417056e3c39e59a28c7707d5225808414279ab61e49b6081062b323592118868d547e83b731d15ba2c7bdb1ee4fdf73600c2584f1db0b45d", + "Expected": "0000000000000000000000000000000018410462829b3a72024468ddcbc42d59a99a70296024654f99b591ce016304537c525513defb655417ba3c0f5e614aa8000000000000000000000000000000001416a19f73407c262f5e464021eeae1d1f10c3ae5e45f132a2f402a75cfbe409651d3795e482b15d29037e2f7105255b", + "Name": "matter_g1_multiexp_34", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018e6f25220e4b4011a0291424b4062930f5df45eaf1581d9591560fd77e630411e0abd57f9973d4542741de5cf3132e7000000000000000000000000000000000b31f903e7fc36327e404973b90efe5a5d2249770170ea1e58839e19d8aee99743be012b6e8a3fa73efc6bdc08be372f764ab6f4c43630d5e79e8c474d76d8973a7b7bd1c7f1a985333cf1a6be5ccff20000000000000000000000000000000005dc07fa620d476d8f64358c920a401f8b08abf739befe1c266fb307b959f37542140e398c33b082d09f9f53cedf6f810000000000000000000000000000000019d8e51a28c936b5037424a7ffa8cae75496131eeb2b2d5034e4e882c1c91f6bbabc9ce4fb2fe4be3da4eba46326a3603280f1b1e78d2339f64b5b2f2bd77aa24623b79fe2c9debab4212f4ff564983b0000000000000000000000000000000006f5f80dcfe8be87d057e2162788f7599e55b69ee8c6bb6a47c505aa324ddb5ffddacfcff35cef3dee6264ef73d6a353000000000000000000000000000000001056081108195d4d27af7332215c0b444c9f63c7574eefa81046e1d064825492e2dfc5bf2ab5847a37e6b253d9dda9fdd4d27ff9d03ab9120ac2adfeb36b070015f0e90782255ddc9111704c5fb111770000000000000000000000000000000008db431907692896f9e6e254a6eac1a0ba5f9cb84563da69c3601aff1370b7a5a98edf5a5fbab06abfb4496c777bd83f0000000000000000000000000000000018a3bc407fc42236c4429f241fa760c6513614653e8b02835480dbe1152763bc6a1a7fe076e8bb44ddc04322cc906e1ac66d5291311c7cdd1f33e5365ec0689608b3569427a8f6a9cd0b94b671472e66000000000000000000000000000000000cf32da94af97001664607c7840631a8df02a008fe262c6dc649a3eff34a42dcb98884212bf3e979629c98cbe5fc457f0000000000000000000000000000000019b3b4d82326ec1aaa3de3b2f8e329ac0243d3f6bf9356886be4033aadd0398a5c58c68510de29f92a7ca910d851da244b718a5129659250640e333f4567043ca749063e63d87efd86a9995adfd3b845000000000000000000000000000000001504d90c52af16b5f88357c87d4be7c329855ccad6f6633af0fcf4341fae54aa4b1ddc1aa22fe1ac12e9d850a05a9ffa0000000000000000000000000000000012ea642b96304316451dcece5a6bb324d197e31f56ef3f1a17c973742322d08f443b7cd156787f8291b52c0a6f78b4b1708891f45d7bee38fe382820260061e212c6cb9a8572b4d1854f3ab09409b05a000000000000000000000000000000000fc61e9589a2dd7f6dfd613225d80a70ceb977bdb518b5a16e415f887eb73fe9fa5c9130d5fc6deb4ad153c5de0907d6000000000000000000000000000000000a0fd7de87139581e9b1ab707e25c186640db92875a7822d61d8c476c40ea07bff000cbfe6975076434d0b703695740685ac0f94f300b004c7f20aafcfd9129d6c2590749504a3f08c4cc708fa30100300000000000000000000000000000000188901f19a776ebd2ddad60209f4545ca9b0a038b0b3c67b6f5e35d61f8cc2a297d51450663c4af182079d3ab6b01d2000000000000000000000000000000000151b9eaaa281acd803abd71ee4098b4ff6535e5081a33cc68ecca54eb9f1a8f94f3b1b21440f33b8648ec456dc1cf7f3fdbb634bc0f99c5795f3c4d6a0efcda7f71427f1eaa1c5411caa6cb05ee314780000000000000000000000000000000008ce8bd24052a8e1472bb64cc215974e20bb16d502b3a8113cd6e3e9a2bb7c3fccd45ff711518e8430221f40859374ba000000000000000000000000000000000aac2e8db9123be3e82905a0fe780daf4a841f6f961428b9b431c3ba2ac31e8c06118402bfc7fd15fbe3ada0ec8bbb2af5e4695c01849259fb969183de385ef30c2403e081067c2d9b6b5522c73fcf2000000000000000000000000000000000017c580f501a1c4823483ae718371432a8a69e16e42dc0b15bb8e01729b6707ec20b898e3835bba40d7e8802d9438281000000000000000000000000000000000bcc167264fb9d6c27272c2280d8e89f9655ac7e6408694a3a4ca6fd0b46d1d7e3cf608bc2ac343806c5de42ae7a99e80ea6fd588db5efc5fb2248634cca683d39d610886b59eb3077fa9612c368d7690000000000000000000000000000000017ae89082d6f531bb7905068a9c00017ba8ac8867c6e467fcd3e88e9229ba5b21ff4d0a5ce937b75b3d5dfbbe35f2e7000000000000000000000000000000000005bda8d641b782ed51c416d0ebb1cc7c8f623d49b741a7cb93b3514e71d5b9102ba2e6c768661686c2af2acedf466e4dc2060a3421c5a8336c80983c9a160345901a496c3a74fc5248fca081d099539000000000000000000000000000000000150ed2c2b2d1b0b87badd0dda44325000a6fe98d335e03f0d4d147b20d4738e1e0f0ae0ddb2783bef283684e631ff45000000000000000000000000000000000ec1fa174f3f42cdb0fb67a520da161d9a9d1e53a5b0735738580fa3e80550c95cc3a1cf67fed67dc2eee1597e469fe0e27e4afc3e6d59d0f5871b35eb83b46cf15da6c326e88dd8edf84031f58e23f900000000000000000000000000000000111f184636052719c6df1541c100d5a21d573370fa7afd18f5ddd1d86842169eeb02c494b33f2bb2f54278530729bfbe0000000000000000000000000000000016be03c9764aa34c898dcaacabd1493610f55efd36ca0b35eb48e89c7968e7a720d545b18fdb95954e01596856d42975cc7efff04f143e2d038de153861da5e04016a7eb17fbe6365de13069d088b1a100000000000000000000000000000000114fa84ccbe9552a2ce2368f1778a1fd3c67303d8036fe4ba171ba9f2f6039aec1a59fea1b8efae88c01bb50e53950440000000000000000000000000000000017a51bf70c41571f36d003c0715238b6c8fd64185f616cd9076b730ad16caf364a75fe68de246249a42cfe013606874709a2c3dbb4ee4f485dc60dfbd94a358a7c62204c021f2d7b140187ee9ffdc4ce000000000000000000000000000000001450fe1500a6fa9d966a0c905167a414d59a3f8a064089f09db047241e9abc31d9e41ef73558eed741541414731f838a0000000000000000000000000000000017e61d4092537ec48683f86b72123637df25a5fd926e5703f993678a798dbe635ea29303f8b4d9ac76231a71cf515a70d9b15c065497392e4b477a556ad620d44e671137cfd570d53590b7528f8ff680000000000000000000000000000000000e72f0c855fce66335533c05ae30031cbde78ef07571eb1b645fa3ac5f3a7d76a4d60cf078145617c5a7ccb16266bbee0000000000000000000000000000000005b3981900432b193985f28a88a72ca9958b4628e5ff9d2cf8b0b23184e2bd433d495636de3d56711f207719fdd3fd2f9e2a72eff2ec29a65b417767e7090b73c2fb530de6c8f4e4ba30543946423b12", + "Expected": "00000000000000000000000000000000110feb31a1c40d570d7281ed9f0c0ac8418f4a7aeb6be3221b130945becc15bb353ea63623ec7dba2844d3f527c167e6000000000000000000000000000000000d76c7aed58945a7fe52f37eec3be7cbd4438645a649a04859a487e9e2d4c82bfc76f7ba990f825302861d82a748c8f2", + "Name": "matter_g1_multiexp_35", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000030c6580a3dc73be106748d070b24d9231c382df143fb4bb8ad45e4723b40f90724b7e54510da1b2bee523a29aeb58100000000000000000000000000000000010cb3562fa1b0a3778393412994e46028367ed52dd62a1d446fa02b50acd48a784ab49141778bee5036b7d3a95c9ec217b9aa7e0bfaf135ff24720773ccd1e0a46fab6d678d91a14de137061e145fb9d000000000000000000000000000000001972db503f6d70a0b247eeac7fef277098604e54465309967b68d24ec1cece802d8c4b699eabb72e03736902d41fd5b60000000000000000000000000000000007f30233f9043927a629b11e7da48f895fce86b31911ff5c511c7b50642c296d37a3078e2e12f1adfe668731d0e6810ec6733c9bb7bd195622b96c4181e8c8837d1912fbadf77d6029f7fc44d793b4800000000000000000000000000000000011ab9fd98e42539382c85bf76b563478fae8cca90ba1beb0be56b405da8326e6f1348b94eba61fa29c78645f8eb96f8b000000000000000000000000000000000f30617240632d129ceb69de1d69a23c9bdf950819608deac0600d1d1fd730a3a6d22dcfd635b25154b5ac7e22b20c70410bb66334c677397d04f59eade9630463065cd7da3c9d50580c7d66bbaf487d0000000000000000000000000000000007556b86cbfa9f186f38fb1a8adce4c08f93f874bcb36ba61df5750c7927cec8896bf831c0150c249067ddada2e914bf0000000000000000000000000000000016ecf045f13c78de8aa18c2ddd1714bfc532ba8ff5b7851b58240cfede20f032067e943486df628995b8f3845289eb02d97a16fc5b2c70829b15f73615286eba334de1f520b5f0f6a83d2578399cc0b30000000000000000000000000000000011379452e627dbed2ef1c74eb917b95b3933b8fad8295235cdbd6a4394d9b75cd3598c930d48c2d4abbf1558c65e97490000000000000000000000000000000005e7044829ae3f9b073e4a2237de96b0a1bbec3a30dc39c839573eff77321b1e0a49d555f0e31b8aa096f83f5945026bbdbac08202bbe5df1229e99c76c1727f7789e0f8c2002f0a2c195bdfc00acb360000000000000000000000000000000015f8f0f22c1553ca663ce7e9ac00514eb53443f6c4869f985dceb118ee60a88a4826e9dc7fdbf61e77cbc93768fbfde0000000000000000000000000000000001646ecc89754ac57d7d6fe9b871692d65057f23d397a410bcb07ef3df0a3c3fad9eca515f0d0dcf0610edbdaf4cdb5d743da827b812ec6ac23b00208cbad0f2e8b3a32434aa61dde029683c34c1ab1900000000000000000000000000000000003a18dcef4939e154aa790b0ce8265f27cfff48d5fec149d91307759eaddf601c788da6ed8124764bad940f117751b0e000000000000000000000000000000001813f4650490f3839fdc9f96ef744ea93a9fd86f8a43d767259c2e0abafe308fec2bc6b9d62c1dd7b5ab1aebc19586e93c7a8f7bf434ce5e63ac9365448da8663745f66689b4b04968f9b8b1b68058930000000000000000000000000000000006490f351e78a40c0cdb827aed3869db293c7d654b43d69ad1c9b3b536b1fbac67d50a835878171974669a30ae9ad1bd00000000000000000000000000000000041816bf846528e23eb129689a87c2325f1b8edf237c530eaf578a908fa0a2604baa19d6e0b4a5801280c27285896d5a51f2e2bcfa6ebf84d3ad83c57257b9032e5d62a8663ed5d77afce00f33382bc600000000000000000000000000000000064be79c5d382c6dab72bbf28defddf14cc7cdbb23eced6bd93abed078175668d4dd66d0b3abc6384165d26bd86680f9000000000000000000000000000000000fa4c8be5d20d16bee7bd5bacc0b0086875a14a119b4888bc408850c0a099603fe3f79d334e45bdc9130132ea15a180f6d8b15ec8908bfe008414757c0c7f79b3079f9db86d91ac3ec8f38ae2c94d48b000000000000000000000000000000000182f23242108b022ecc1d156a97f1a5fea2cc2e059dcc82273212f37c312ab77886c1adc370bdcc6ee05cfec957db970000000000000000000000000000000014ceefb3ca54bfde172e0455d34f1f462208df69328782b7961ade821ab91e7b3ed5426b4065fad10cc8fc88c90d8e87f4723e85076d48389c3fb5a5df16b6bc6f7a69ca701632b1159677bd8a6f7bb10000000000000000000000000000000009339b95b043903f2a3b5926a27e57cd0c45e7955946718e7dfebb01f18e9d7a2002c670769c4674773a835311f2e58e000000000000000000000000000000000ba94f6b625c507934f633d5420654056a939c68899c41e3f337f7b927fe82191d39905b349870ba0c41c8bfc97d64a9a632938a6df169fb64daa55d2f874ef7629d5be41dfa0d50827c082333f0fca00000000000000000000000000000000007604b5eb3218140b94732a601da577da3cfebe04dc7dcd94396c1a6704a0ef5a5bbd0c31c196f2876e1a4bb7490629700000000000000000000000000000000193098ff839d38c9bbda43944d7b0a3ec9d0d6732519d4cfbec506d29801780813b2faab46658c4383b2f26c477580af283a4da7f71bde54d4b7e28b2b23e2eb05d8b025e77e15810625d71faca6d6e500000000000000000000000000000000022ca1a16df42ba543a118212a75eca13707ee01eb3ce27d3659b1fedd99b9fae859f4eaa51e9be9107704276b578a0c00000000000000000000000000000000012d60cf33701caf11be6c9e3ebbddb9c7066dec3821a2e0f9e5b94e029dfea4063bebd4b2fe18c2442311c2bddc7c08d402b71c1fc5c3f3a4ed9edc73457a27ea427f83a784796e01b7a1451b3305b00000000000000000000000000000000011d4918642919c801fff0962062a387a4dffe693ec09cd3d0286a18e3a22c84fc09e8396ca82e6054d8535cd888179230000000000000000000000000000000016a1f0c7fec5647dcce688d3e4e526749bbf23c1fcd9e9168ace47399f9198c9b3a6b8aeca68febde1b7beeea0641aa2310bc47acb3aba7eaa490ec104ed9b2985f65c7347f69fdc67b76f6f43846a990000000000000000000000000000000017203c37b21375a524bcc906843a0045229c5531ca23177dc88026e83723db21d9a8b5e52cc0be1d232818ed9abd496800000000000000000000000000000000097b4d7fdfa442dcdb64e405965439ebe70e4e71cc8e13e299fcc0b5dd88c67d6d0dfd254ab9b545e66295e2f3df14dd91b88ce9888e5dcfef70d6f960a456dbabc792571f2a98746b7d833e7fab9850000000000000000000000000000000000fc4198a87e789015a1e44935321677e84356aa9e06592f9cdbd149d13ac312980f3048dcb9bd02779a3b10fd24ec98b0000000000000000000000000000000011425345ae1139647f93fc13eea0e920c491a49998430a339cd9d4260479a427515109753e70811be4cfb3b96db5c78b3e82cc1261ac3864266379b4d518e25c05bc492a8946b38b8a64acf47aeec4b8", + "Expected": "0000000000000000000000000000000011cd4c4507778871fd7b28aaf79274178df83f3e53c256dbe7a52df884d28df6a0d87d20238a15f489546a459195ace0000000000000000000000000000000000439a672492225fc09e46bb178a5d38956ae237d9f7d187d4cee14597facf2c06d7e70be5ce20e1f1389e4da6321e455", + "Name": "matter_g1_multiexp_36", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003790fe37a3aa78cdeafa76bdbebfebb22ab5f1e09e4e488418568fa307a5db18f9d93126b0d3cdd6a28abe3a4648f6e00000000000000000000000000000000043244b9c78fa56c611bf72bd6a17148abe76fd0efbd25085d7b46c90318ed591c5975f79653b98440f5f7c04cae4d7ea2a1148f1ba719b2da92c418fd137efe21a44dd4cce013ab36e57d97dfed92990000000000000000000000000000000008e8fcaf6d2056c6e144295d437f7f1422f6af7a1b62e0b8073141b2992b6ba865822aa2d9fe439aa1d896b2a6d231c4000000000000000000000000000000000bc693fcd2021972914747e48c600c444bf69ca8e1386655bb5d987608d648965c754668ae0a72c2439ba0ed98e5e581fec5d6167d7777169348cf81ad3eab5153f8f2f18fb5935c5ee5e3a759f9b5af0000000000000000000000000000000004e877b9032e168650ec3502ba65118aa0a8013b995a647210c1c36a6e6c702a93caef674d03d82da1f7c5d7ddfa0d0200000000000000000000000000000000063dd22dcd667c8288ca5b172e34b4eb783403105523c0467139b814e048fa21245879a5e9188a1a87d26fba52a9f601da609e1c8fa42a993ff355a70d44dfeebc71a801daa36acd437daec5d7b645d10000000000000000000000000000000018cb2fffa3181bb665dedf1d60de6096e8c5ce43287cbd86c2df5a5d42d0129c73cd281c085fc562b7afdf52f0a680c80000000000000000000000000000000007f9884780460ea018351b4ccb5a120d44312056b96c5ba77cc38789627d20500d6b7e69dbf6ab49d6bee998a6aded67bc5f7f5d096247ababa51852724ce9ddcc6acc7ab6180beaa1cda97dba94b4ea000000000000000000000000000000000bccad9f23b4c1231eb07df139548b66714a064dbec4ac6ac43ce18671144f2bf7ed99f16442b9f6600e1122c58f52e50000000000000000000000000000000013646b3c310a4b3f279e17f45fc8104d2c9d00f698b869479a5a0e1c2131e3f3a9dce86115ccd539bbd4346261c5a75f3222b41a59f9551e91572ae00582e1e41989ff5f8e2cd1ee1a78f55c2b28ecb4000000000000000000000000000000000d02250115596126e858a63a7082a8c8f8ebe055653f5a60c855ddbbe3ed05792d08e5cc348094b8dfa4584037be597c000000000000000000000000000000000f68ec7da947cd0a57177fb91d12a820ef8574f4c524fe54b9420f9ba4944759c92d5919d6dc8030fc663c34519b64c37431e5c1fe5f8d38c759bc48e8207695a3cdf07d4c1fd02f1009088539085da1000000000000000000000000000000001960580ae965c37c2ec219dd0753749bd70ac2f0c4a3837418023c5142caf7b4dbf592554a6dd95872e018e912e3a20b000000000000000000000000000000001210b4093a07616543ac2034faa9c4a93b5f4cc3daffef2d8450b1a1770948de56c5bdbfdc9f1dc9af5e20778c1e8e6cd474e755f6ce9045baaed65c80f5a686547089e8cdf4ad2b7c2ce7c255cb5c73000000000000000000000000000000001955d93fc0f3ce0563ca4f4ffae0257297002001a3eb941cb9d3bf82b8d7f97657ad7168bd386636aaf45398745d5158000000000000000000000000000000000cc7a0babdf499322e060f2c83897fa7b6c3e7b4f56de3a18c823e0ffd87545a3dd68947df8cd8d3de5795ef7cb05391976c8775b0eaa1e4aa384d222efc476305c7ea2d625cf5c67ea4368d7a9fccd1000000000000000000000000000000000d451eb31b21eff2c18b52b882e1eac68a524e3db43f233a9d08139667cd0173e3c716f29085c599a09f19019fcf447f0000000000000000000000000000000015852c483c8545fbf0932c99b1944ac58b37228d15284c7be5f5259bb8002abd57b26c244846652a862d46016221eab19db274233c46caaa9c99690fd00fcbfa4eaaad7c41f8ae84313448c787165f6500000000000000000000000000000000044e70861dec38d2b5ac7fec042c6b931d4e0a072073333f03ec4382fe40919b29378cac920836b1641e5e2db053c5c2000000000000000000000000000000000c422a91c81a99caa32666511c0ae4decc67cd94e85260b49760ac9e97894b0eb434d39c3884aa4614360b79681403f94ac9f9ed46ae5aca33af9ba1c0fa5a2138d4ca02b962fd1d02b4636114ce1997000000000000000000000000000000000af002ec82c5ac0dc87e1ac27f4cd052eab67bda318557c70fcc2edbdc071ac4a3fcae90f73ee514cdf8a543ef59050d00000000000000000000000000000000109f720464ff2eb2978d66370041206abd9ef0c6ce79d51f7d233c49b72da520612e59c39f3a775e288ba2220fac1563ab300ee55e90ac046dbd772da788dacddf72c559d9378b39507987a9774301b0000000000000000000000000000000000f62e7d0aa954742a2018d42dd9cd76f041d9ac46ce659f4e192053a1d0c9b23fad78a06f61d2c90eb7b4d1bfe6d951a000000000000000000000000000000000ad5a5ce7b66928d8e6e3806a25425bbf2bc63f8ec87002a913c28ab702b83b6ba590b41a0691daa5b921a12375ef47b275b22db781d5e8fd07f36788bc1219c4b4a13554c28d92a381adae111b265730000000000000000000000000000000008b836a23836624b39e3b3388027093125749a5edd5df50ee0cadf1d485c9dac9c2569a82484269fe7af02334369a29b0000000000000000000000000000000015232caa0c064d8d1bb7fdcd23c0eba21685fc4671e9f04cd1dbaa0382aa4e9d87aea42a99cca22205367d7b2261defaec69b95dccdbf193d9ee4c51615c0b7be5ac6bed3f2559f0cb2755c634839ce7000000000000000000000000000000000875311ab0cde9a925383dc84e4ee8e1610b2f5af0e1f530aed4155cb8ef0b5050d907277f55d8dd542a89e4e0990bc30000000000000000000000000000000002c7a0d315bedb602f8ec558648ffa69831b9fdb6c14fdd44e636ff00777f2f8ae4aa23aca1b261460e6dfd87e7e501131e2bf1816a84c190eaa850ecfe1a9376123e0d0732d90ac3537668f8f18b9f7000000000000000000000000000000000f9531c4998aafabc26e1ab588a97a78c236a854c3fc92424320a37a236d5181d34f8e5533aaaab2a6ea3385acc85f6300000000000000000000000000000000130350be432fd7d68940fd5f54649820ff5b3d015448d48d1f4db3a05ab0405a73ccfc8eea1966abce35833b5d03bf79f4087feda4bd8205d96cd0bf6eee44c27a6669d7ae8e16c731849cfbb2324e1e0000000000000000000000000000000010fefde43b2cbdab52ba664e12c7a6ff29f647942e16ba5a0d41701754ec63bf199ac8e710ae8dc6a033abbcaed3e05c0000000000000000000000000000000002189172e607876a6e1664fddb990009dd5c7a8412d60f7dcb235ed1825c756598bc67f8d5d383c2570a880492d4ee1967b81583fcdc9afe5f35974dc9b6310ee8e1c92031a49c08b05555fc0d33517f", + "Expected": "000000000000000000000000000000000765877938c1a8170e2c2fda55241e3c64f7485bbca218f4a2026d00ef4708d014fe4194048da8e994cae1088694d1b4000000000000000000000000000000000b32833dc9a39e1e73578b21f75136be6c6aa2b4128b0e6ff4fe099f7b7a8ba8f2b769f68d32ab4d1f37793aca8ecfc9", + "Name": "matter_g1_multiexp_37", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab94114b3ecf9535261a0726a9bc0e0907385d56206b61b7a42f643d46296c4022bedae90d761d3c002dceaa9167fed0000000000000000000000000000000008e67942ab2b9aaf2f6f865b7e957a25dd7ab8d8a0cba02fb1648e4c7f15ce00f4f5d09199a583f38425bc62d32ddde69f3c65c2c25c6c37aa45b1104745cb8ec511a165ffdb7e304f5478aa3add4d7e000000000000000000000000000000000e53abd9ff27231fbb09155f794e5d126c490314016e31c0b12bd1d2af97a705bc267f92e20b64c91d9af1bbf5e45b92000000000000000000000000000000000ce7d0cc6656108aa7005a56d15a497009c90871f01eb38f1bdc82edcbe4945a2f2b67c9b812aee42cc9a9bf9ee84bc08fd50c46bade91a13d6dc5a06ee62e5e89e0ae7ee885e5516ca6c2dacc36f6f30000000000000000000000000000000018c2688f573d4849b6d19e711ef4d14659c2c580eb938434a3b2afb8c20c522423db4c7fffa42eee9ee907a6492b77ad0000000000000000000000000000000016a7e69d5539263fd6b7eb893d476a00efb8cf09f21a54e9ff0d1c11e9f3651eac8a5db31b40598af6c943f864ff60ba128db1a106328916ca5d63c0b5722642febed26f00a89430d52ec3eae25a019b0000000000000000000000000000000002380f3260c7289ab2005f7b1d7f572565ec938bd894bbb0047ced0b652fa2e74aef19c9fe6bc1fd469b2a4640245777000000000000000000000000000000000f32ca31e6bbb72a02f4b0da0e1627dab9cf1195fd7f48613c89b06c702e662478b24d8b3730321f803ae3a307fd498bd45665afb6a864893e389511a0f7b2df74c9e45a86fb69f6bd79854e3a88c2060000000000000000000000000000000001892b0d219ebabc3be00f45b00be55ae486eb79b1e41aa7dc8457aa0812e7276c21024c79646128fcb2b3c517aa41c3000000000000000000000000000000000793bed9530c814fa0d0ed1684614c1e6968dec931868a64372dc1b648b1f99ccce20fffec7d485a226033601b92a7f228f5fd09c2c1819adf8e6d0e0f4e4681babff46757edeff3839e9691888c132200000000000000000000000000000000173f49cbbe6304aa41513d3742b89c6b07a91be50264350d71bc03fb9efe4faac4a19e2591795ff4a7e67fef7a85ed430000000000000000000000000000000019bb5dcc59ddf055f099a1c3949bb50972c4cfd035d4d829dde4ae94ff9669983e9b1a7edccfc2436648dc942862676fe6e61390ef88f20591570ec1fe71c3ed769ee8e234c7cc7303a4cdc065717736000000000000000000000000000000000e3daf60e4929b4a237caeab203f86e6eed0ac630a8b955a03460a7e609398d076c660401f8d2bd9601e5bb5e315e1e400000000000000000000000000000000058b20160ca2232cb8b6cc63c5a8e11613afb9776e22d93f687e7ba005b099531f9693f65f153db01f20c8e9bdd7839ea83c5af2f9d10c06552ea7d1749cbfa7574b238433c1c0e4788efd0cafeffa57000000000000000000000000000000000c89f1ebd19fb920b6748b15192829d58820ee4995cab9035ad6bfd8dedadbc6352058806a7d45fecefce40133261f360000000000000000000000000000000019151260431a35d124fe44116d86ea99e3f3aa14e2eb09be8193dbaa8f26fb0ae2451ca1c70610233d3f0af9d2e33fca4bcc88d85a5a8a29dfad37ba97ab3a5defde4ec356146db8d10f33bfb36ddd3700000000000000000000000000000000162b48d56f439ff56197fad444dc460cc6432722b9b86c7abbbfa383ae1546e160716d94e442183196816084da90bf77000000000000000000000000000000001278d0796c26110f66930ea9248078c222a0590a031df30c62fe6beeefa70deb0c8287b0d204a911c147cb6344632bf329d5d818e62c9791c320e01a3164e142d9804e9caa7f96b4c3b76baff38ee2e6000000000000000000000000000000000f4fdfa45aa3b5d1838b4dc8a2dc6250c069806ec3c551ac961da5b44eb58d962d843a1c17ebf89bd653e9e44d16300200000000000000000000000000000000052ad9ce994c837596339dcfb73ee25bf8326657633fb5861039f197249d425e35c238dcebb287b77f41bfe7f4db5c9b971c8aad41e401ab6c49dccba28ef26acf4961978e94e633b72c581ac03621e400000000000000000000000000000000185c62a080df61ddc97ab56d2286ceec655172b6c863b509a1a92eeb0719060528ad3a3365ad5e7c0858167ac2c6d22100000000000000000000000000000000126b489e107dfdf4a4638069944d1b1297db734e5da1964086114f9f62081527d7d3f6032c2f29e75b4e1ccf5b3776d4659ff910eea5280dc5c24c542516053637a5dbea576a94a22acefc902e56568e000000000000000000000000000000000f884244e098975b837a58ae0218e7e2606821c95f51d114a483ed5d31a59c9b9cb3b1db029a0286eb95686e0457afd8000000000000000000000000000000000caab7f67feea4752d3822979a770a28c879f5e8f916b72dc71a3b14820ce170fd229fdb61596d9e89b4be8f515c470e12ff32d44eb442a711250875d86a401d0dccc95e5ee39bec71738fd812d487c600000000000000000000000000000000155d3e886cce6f257513529e40c21b5657ef1ff1f4e71bc32b968db3e05652b1ac780da573fe1a1b94b7fef86e7c260f000000000000000000000000000000001184cf09544ec2826d0101d2b79095da6e5f77d453203c52ea17b6476360ccf166ef092eccf86dbe3a260f7fd25a2794666b820fae2459b98f9bff20275a3c96ddcaf98a78f3f5fa4a2c0a26cea79352000000000000000000000000000000001523e919446b532593b8e70cff1206e8910444c01399c0dbad932b596cd0b9c2e40983ddb38eeff4fbd5e8d2b15bdc780000000000000000000000000000000004be8fdc3a3296e543701ce8c1184a983a2932f33913d6d733f5baa3a783382739b697fab4a3d6f9ac5b85ffbbc78a3540a9181633a146d7f307ca7606cd45b8e721c46b955a6989d421baafd8e401390000000000000000000000000000000018d20e7846239f472ef42c78454b6c335979ec563ecbbc3a93176a7be9dde603e6f21afbb68058035958ef7392dff3f20000000000000000000000000000000011ae4de8a7e1a958a1186bda4890d282773788f7d5fc5432393ac9deaba8bccb5db952547f6aae49b8a90c813c5a93a4662ac80797c633d8b9c8907acc2960ebdcb5bdad82d9fceb4411d5173b7411fd0000000000000000000000000000000010641c99a359d16dc3e3f68547288c944d44c7c3e6177fe94428ddcf3c86937a3fe1f41a31eeab551e11cffac012e1fc000000000000000000000000000000000f407b01737dca388d0793521b667757d70e626ea0ba3b051f522639e752280b5657b1b97beae3105489161ae95a470059401af15d9b83e2ad68cc8e2ad1508391516ba0b26fcc5ec6eda8b318a374b6", + "Expected": "0000000000000000000000000000000010084535f50807f287eabff2fdb83d34ca30454e4cd747cc3818a9dfd80c30fb3bf2f9f771d435b79a2d36105266f0c1000000000000000000000000000000001663a611323246a963856a92d52947e72dc123dfbeaeb9a3ede6147246814630e5304b50a6585894843790f5d4c818c3", + "Name": "matter_g1_multiexp_38", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005315310b8412d62f5d63fd996e8c6b14aaad5a6c83eb3505a28fa6bbe469f7a7cfcf10b49382aad4d6764859ef4910e0000000000000000000000000000000012fbfd9ee8bc712354fa3b73e57fcbb07231aeac980e99d5843fdabc081a159bfc6507911212adafc162dfc21a5afb739c351c585d1920b8cfb89a5bcd72fe041b17f7bd091ba505b287778b0be4e87c0000000000000000000000000000000014e14689a5ef5b9ee89369c5c0de07fbb7980f37294a0e7570191b73f4406ec4bd9bf4ca2521f8d90157e9c3c7d4211900000000000000000000000000000000040d06da8127e64a71532afc8846bd7eb6fd5e845ca0f1d96effe0b12a2f8afb121d7fbe89f632262ba0e382e8204701ec42da11e95cebbeed0ebaecd31be24801fdec8b81f4046fea52f553c4e7910b000000000000000000000000000000000c5ece364affb6af365a4c7506389694b9a10f3ad6798c326852fe85a892014b6901d097aa8910256f47ca1d4667b5a20000000000000000000000000000000003f300682da34e22416f1ca2bc3430e3b153c95773c8c76660603a0ecddc20ba570545d9307a6b0910eb406aa14d196bdfdd8996780460757702e34ad98f5f64a8c1e0bc8851d6c97f02749b8f77cd03000000000000000000000000000000000ad0508c3b4fcc1cc608d002b66bc703cc16182a6e83794e4f3739238c3e02fbb6387ceb445791d54321ea52f779a35d0000000000000000000000000000000009a442ba572cdd9e658080fdf1753670c27e88fa894c307eaeded6ead17799365d1cefd1fd13f0dc321c0e881a4965d3f256ff23b38b3b986a62074c5a3e05e86ead9431fcdeb67512f6d502fcefe3c30000000000000000000000000000000018825670284d3dcaa90a678ff37f23e8ba36307f3c1146a8f6c782f7b43ce16f281dd346962904684c22c1980a772ffc000000000000000000000000000000000d65166eaa6b4ed79b5ddcd7b44f06ca1bf8b960211bcb17d5a26a8595a1ae1aecee9945a674b92384ad05f2f0f64fb6c01b3c8bb0acb17198bde9adce3b0f7ed4cd8615f837aee928524b0984c99d0e00000000000000000000000000000000098da5d9289f26b61486e3ea52b0145a47847ff2b9f1d2756e363e5ea0bab27a98fd01d633a46ab48aa1d2f1d2886f9100000000000000000000000000000000191412a43858276e4d7e69542f9e6ba4fa9bc0a8784df590aeb1e0d65ffb56cce0031916af640dc3e57662f5e5203436458f882b63c99ada33d8215111a6df21c8f7424eb2fe9f429256201d099413c10000000000000000000000000000000013a279c27bf2234542f4ac0e4c2676b41b3cdfa1b55d5c0eca1c686589c37ac63139a7f532910fefe275a08ce2d37fe50000000000000000000000000000000002f56719390112560fda45943509729fef3eed60215190ca1f90143a4d2ae6b41aeaff7edf027f27857d56bae1900ecc804d7a35e5731b111a6904e0998d90ce86cf612914152fe3d2fca0201a41166a0000000000000000000000000000000016489ce6e2b8298e2fe0836556875156502d36aaac621e45514ef03db87631cfcd308285fdcf8ca7ae8bf65bf53a37b3000000000000000000000000000000000b6c8fe0db4492a309148c54465ca06c59c7b71e4418d8fc1874cc338df40fc1355a523387187402b04f5d01b5e5b82b6f1629a801db6bb4066588ed79f75223120728c3a57f7129d88f7f877149223300000000000000000000000000000000065358f885a974a1f64ffd526e5ced18ae5ebab2ed6c9719c9f879adc940292ad124fe5b6c8278c82a33d1ab2a1916130000000000000000000000000000000010d019536f727f8ae098dd9ccb6344417042855fc6722443218d83127cd2b07a6816698dc1a48776d2cbbc937f83163dfe80ddbcaeb784e24975b9a42801c89bdfb842cbde5fbc0c3d70c0632cfcdab80000000000000000000000000000000004248c5eb514980da698bc5146fd3743f5b1a458dbb17edd38f65c294e48bbd55e0d9afb3b39df2e82085fbc03e5655c000000000000000000000000000000001830c1d21ff8cd1ad8467ae0a8d2a34367e7c44829f7530263ef3d7d5bd9eef76b756f475448c308f4c03453f54b43cc1aeff13de7bcc4bc2ac1b37e28ce466805757dda29c9c743eaea9da33f47f4fd000000000000000000000000000000000dbb72f9afde915110f2483c09291595c369f0b4ce2c91779da9266c9f74764da4976a221c4997cb940302ce0e59ac080000000000000000000000000000000012de4b2ca14004be2c64ada45e9a0ba7989ea0e22d0407088a092cad87b4e26b33d5d8f96fe6831e085c6fd27901af61c4984739882bd2f882e12660815b96d2af7812d7ae87f5be034b88e9e04fa289000000000000000000000000000000001387a1edcc34afa05541e15e2355d3cdefbfe22ab7481e1f194e461521894b97b2e18c9fbab1eb5d8e508a0bdae08b5a0000000000000000000000000000000016c4ed675f20aaf2c825de5bc4c11ce1e85a0b91b08577080108ab7b52bb674f78943a5f619f557b96a72206cc1bd447e7f33141d383a1a927b7645656ff7a5795901a997e27003c5672ae4fbab4aecf000000000000000000000000000000000498481301a55b2d1dc95f8115534b1baade13c2cc4d5bdce1fe8cb1734004600a2359e5dd1c61c7338275e2f4fdf455000000000000000000000000000000000a3d2ee413b7e6c0e32e51dcb7d124be92990b7e4307b9b459da1db20f85f4a35964b7987933634fb62a07f797b00b27fba4674313a9727aa4b733832a0e06666d3e38184836edf786317de9dd055cbf000000000000000000000000000000000a885ed8c3ab46b60a7d2e198b6e8d069ca8f7e0692f2b8ce99df2f44979b6045fc17991bfc27867be79e2055cc8aeac000000000000000000000000000000001728864f0fda8476fda4df08fb6aa9e40a01dbf19a4d22c4fa0c319d8496d405f0a5f9c79ffbdd5a4c1b617326f3d774dc0c4d0e34d8a16b3bfb51ffc9b3c353817e8e357c608b5075c173204963606e0000000000000000000000000000000016edd94f91c43f15818752660e4737071d44edcec5d5de426141966a9880bb894f3566e98a05232b9717bf85d66a57c6000000000000000000000000000000000a789ee6ecb80e2ab9c6e7a945ae4839c620f9a7bf430ce09b57a64479d5a10a1ec0a721678b5bece737f0dce97a3a56e4e31f5b6629463311b9d3c8333c33c5b2e79761ffff9863acd9d636e1a9586a0000000000000000000000000000000008affb2247059dd4bd1498c8e229dcba313b156e2f420fa55331e7eac93d44af55a6c02bf2101d90955b95ff6fcb411d0000000000000000000000000000000004759596f12f17d7bad24723ccd6f86c646a39beb2aad35ae5a219ef57e1ce6eb310b2098130489421709bc20b4a53d703f256e58f60307ac1888a1b0b14b56c7435213e271eecc79b4a6f88d102be4c", + "Expected": "000000000000000000000000000000000f841cf3d8897108b4a57a7802a3cf8a43ae31e711a6258991b6d5b3851e9e0d759fb90899e462828ff9cf996bbe9ec70000000000000000000000000000000016fa655a67f441e967d3137f6ea8f6cf636fc1a7bb662b1e22f87397e0c77f34e015e6bc124291647727102a12561dd8", + "Name": "matter_g1_multiexp_39", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c98e02c9f7784d0dbcb4a49c97a9365cd069817d57cea3042cb4198180b95d141c5ba4d383de188f06faf8f845f78110000000000000000000000000000000014be6f602cd67fc2d147925cd6c90457dd253db766c4b8f737cfca02ae15b47d5798c621091c4be71fec75e0b8b1c00feb850f01feb55bb99e4accee0aea8fe6ed0bd29b2ca942ffe09456733aff10ea00000000000000000000000000000000077bb03ccd915742dcf3c2640ec61f05bbd70987d2dbe9641e0e34ebed3600703e8f9c382e77f99b70c47f54496bb6840000000000000000000000000000000015ad452396c23e820d1e8a8a9cd7557062ca9c627cc7439d43c528e0170e2760e7761c9cd872141543834c89c75537d72b373fd7e5806d227ca1f49ab0a7f8be2b5950906c8974de9f2cb4e13ed20a9a0000000000000000000000000000000008eeb6c2c00a9f95c5b238290b06a67c1cbe0e96da246537c29c0efa36b53230c3c5d91e3fa9d129743e5a9d87e81d0e000000000000000000000000000000000ede1011370a956f240419cdb8a0c8ae869c3d583d938ec32e29c5ece68ec8be0e69296ff0c97aacba59991d65a25563babde7f3fdf9fba868b5eac61337be0d73517ac3f06c39b4eaceeb27ab6311db00000000000000000000000000000000179776b08cf2da01a94bfe7be4b89b3308330cf797906f85889b63487115b386c68c8518158342747377fbda82a6d2240000000000000000000000000000000003e51d69bfdb73a2abb469b379e2b4825423d2a2cf2cec62e2313a76d260be1b0f2892bf82e5435e88205ecc9424275d5ba1635cf82b25b2d7e466717f5716c33f5f3e826bdedf19dbc1d95ff0c8052e000000000000000000000000000000000af478b121104742d0cd13473d1b7f647437d980999cbe7aa8d2246148d970136f6194df1785027ce944cf9ba00aa4f500000000000000000000000000000000170e9f798184188cc21b0950e0f3a570398a97405dc87a2e077af96799960a938f363d216474422d8f4762fe5893ece61a0a832e5bbdf897553c1aed35fab43aa3f4510c1782115e14e5d56229de2dff0000000000000000000000000000000005817e3812f73d3d236e45664af8a4abd2d4a44f741c3c1866588c2bdd88b11741b1c272b68e20800abf3adad7125a400000000000000000000000000000000008dc859c2323f0d2dcab76bd8454209c86685a971d531a32b00985eb822d33691c2524fe25d14ca386047a4976b9e7159b75e0582e9ad7aa4a02ed5ffa22e55570c9f20e6a24e2186e8a2a2f838fa453000000000000000000000000000000000ee06092a2ba4c33f5c9dc6062d50e3b133c7fde5c81056f74a2d869e8f92310f07629db9cc2b755f12016cb7894aac10000000000000000000000000000000011714a54e236d1e13f9b649a0aaa80cff9e093342c71a8dc9ff1e2d4e95b0f6b4219ed847ba6620d23feded7d95944183b7252f8f3cc6341d490c5c4464bb36e012f1b05057f405aa907ebb2c983f6460000000000000000000000000000000017f6061908e62edbb8fc5498eec23a51c861815bc1b437b7383dabf303e6a45d52e73f8363addac61974043afacb02ef000000000000000000000000000000000f3fc04d17d801741f3583e072110b327a3488135659fab2e8b1d2aecf4694f6d168bdd60624713a7c2c3314f8309079f10427f6e461e7b63b781e116a4d5136ddc79ff86b71fa754f00c797c035412b000000000000000000000000000000000db7d958b44ac5ff3bdb4991dbcdcbeab36bc6d21d9e0c8fbb1eb66601df227a6367ccc783a92c534a30b17be462b95d000000000000000000000000000000000424eb0d9da831c658ff048d3e9ee43a900bd1ac98bee97be073ea55be1dfd07d425e0906779f0e3459fc69d316599e56440c89f8b10ce15806938b7ad65ece194d2fa3cc8d7d5591bc1d52d010896af000000000000000000000000000000000c9cf785be01b7f4bfb0140004873d0db4c8b1387dac0fec42c6ae1a72123ea5cdd2b8c98c69b78d617b16c48ebfff2b0000000000000000000000000000000015c4856f183d26d13196739d9b9c971af111b4905b669f3e46bbc8d8c4281cad1be05e9ac28de0a98031923fcd1f5aae43f1bb26469b778edd10127e634fed4d749e25b41d8eba86eff2c068c33e714f0000000000000000000000000000000001802675ef47f9660d5969dbfce973c8bb3e6b2a2717fac9a509fb3c7ddb272db86f283992eb3167145f2e496002fb1f0000000000000000000000000000000014a5b5d966ff72e036c51686dc6a9f39a487ab8adab6fa4a906f28acc67d64576fbb3a00cefb7720f42ffcd62fc8adefa40251ec7a7e9f7cc29948b122010d9745752df3f4a9c67427a8b58122ad4e7e00000000000000000000000000000000076ed600ed860f16ec5dbae3f09471302bf85fde7702b3376b0d670f93560e77699bed969e7001570f44dc5e37aaa830000000000000000000000000000000000c993a8b08d2eb00bcee05e1c09e8a37834fac53643643402f60fbfe2cc7d795f5c68f3d6a32c8604c37211585830426e03e5eb477506c397bc1a5204b30872085a36b65b7a8df3e0e187f3022736329000000000000000000000000000000000eaeaec30bd8d8dd9ad4d38ff97e08706ffbe51388a93967cf16155b10d218e5b1213c29c8054cb778a0d3ad22d32eb200000000000000000000000000000000079e5f2bf405cf2dc79984ddb3f813a07225729d4cae8ddf7536e9240fbd0480f6b66321749a6a9286cb07758482e7f865cb04110bbfcdf00616c2826e253f61cf955756e94dffcbb6001f59ae4a93c10000000000000000000000000000000009a0933829c2a3f2c3e93f58551e7572ecf6eaa7857aa899a7ff0eeb15ccd601559b9ff844a177568632bc0ddd6e80a5000000000000000000000000000000000b69f23cc1556385897bb7457a706cdd8539a3ed3e7fa504ffbd95abba1e824dc77911efd1ad0a9c37e1a41a76ad38d13ce1bb7cf7d7a55f0624bf5c4c35327b178923d88be748a9b079720c27b500e6000000000000000000000000000000000d3c4cfdc03ef5fa066be3c26744032e5a2045746cd303b6df542a6133c671f4d25dfbd889840fd624125b63839a1aaf000000000000000000000000000000000102fd619ac946e99c765010a4ac392ab907c37b31f628d6d58c0ade093ef394a7547de36ca0630820f4b5d857dce449e2b4c64b363efef0c5525b0337bf407879755f060af451075f4345dea7e681a3000000000000000000000000000000001589cebd579c2cd31226245f1dd3e428a76c7d0012f8dfac4dd3428a716d05a0a79763f0061d3b5846dc29a8a006a37c000000000000000000000000000000000bdf3425e6cbe628f9223930cb74ace4358e12e5d367a3604edb05cf0f0cbde84346ef45597bd61592500583827524144c85e47ebe2c26e0aa25661d3353b5d88c632182aaecb35303d8d47f01308a0d", + "Expected": "000000000000000000000000000000000555fd5a7818bbaa7e786f11eaf6f8620b9686b76c6293fd91690a4d181c0b470295313294589daaac429607b0020c9d0000000000000000000000000000000009c3a53113a657a5f7e30ec28056455f700cc7c3d40cbe4219dac00980675023bfb7462e634c8a131493f12725a27d5a", + "Name": "matter_g1_multiexp_40", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002d49464783e5ff91aa0dbf6827315dd308e778b3da5833cfca3b6431ae784193d915a566142ef347b6ca024b6f1695e00000000000000000000000000000000029051d39ea4369a837d4cc8cec1eb8f9e7f9c3a247dcf99dc75eeae43378b4b9c4175aaa5eb3f7abdb1afc15bc2076d5bc589e7d89994400c511789cbcaea19b077e0b02d625e549bc6f2673ce40128000000000000000000000000000000001363b8347ef6754f61520942fa8cdd07e6dc2b72cd40ae41a23622be239ee25834482533ea7edb9cfd5a4e21e4f33f020000000000000000000000000000000004495e8d41b145ca7f5268e66c03528c8d976cd650d815257906e46c1f9a0827e0e79f5a8c2906ec96718538e1da3b1d2c3d2a0cba111642a6354c117d494be805cad5b5c486bc47906a2d37a9cd9f850000000000000000000000000000000007735147af3bbef7cf0c4a7c8f1dea302a5e4edf01d42c1e484f7fb1f4b8fa23b8a7a16fbece9270d8786016836bc979000000000000000000000000000000000053406bb3d2a4cf37924643a186a56844a4e77ea4c9e9e2c707b5f947ef956369f400e448930aef7135449f8cc51ae1530ff74626657262fb49460b2c6981155871f2eb5562581a74f968233c3cbe3d00000000000000000000000000000000133b92eb9f9a3c6cba655d5f26f396dac467b6444657eb0a811dc6a58ba1898f24b336f4fe9b11c1e0795891b00b6c150000000000000000000000000000000018952f3a7f8aa78a8c5e5bd96ecd5d2b2f237916d8e2982c40cb7498423f12c6ddd3cf1afee75a3e2cd773bad7ac3bf6d182ac912b005e90ab81d4f2a906da8309a69576a8afaa160fad2540ec04991300000000000000000000000000000000051453a8b81b0b0a1566540b3026e40676ea48e3c5aff89ec4fe3b36c61aea27ebe01fe8a811fd3ff73eae0a67027cfc00000000000000000000000000000000090b399b1e5af056b428a4c270eb204df4999e53807d34ca750f30b292cd38030491c3d1b0e08600f40a16f707b4903242a002a460b51429e25f85ec4abaa580ac1a14315b1627bd52349b7b81a641d600000000000000000000000000000000142bcc3458437416506631c4dda54572b5d66093ff23f152957350a3aaa462000ab000cb8e9c9b23a17149b5d012adb0000000000000000000000000000000000734c0fe1df24449ef498fbb60558010093cbc8a14ae068aba2f70bd7718e30450411a81499a895e3d84079a9dbb19557a650dd3765032ac139d1b54ec7a5457c9e3caefa6af45d198433e5949d149ad0000000000000000000000000000000010a7a3380a6d8b2bbf212da72eefb57d2fc2305ce222e8d908bb572600bef7ff55b1df6a9af717e1345967cc18e779ac000000000000000000000000000000000c5a3aa84b489c879eddd3c20df6d510edb5e9ac5c1a2e42b770571ceec315d560235b27468299e2e60af3ac1283be12bbedc44d54349cff199befba9531dd4120a51e2b830a3e356e68cff31bbe365b000000000000000000000000000000000035471ee35c187e24cf0d113c0ca1ab6322528153d0687b15953c39290ec295c0dd4197b72448f2a692537064ede8fb0000000000000000000000000000000002717020e3369b288314a42fd8ab6c6ddf7007480ebc4fa094ff7c4c4b750f477917caf071d2f1897a826fe870c2b7dabef3956ac71bfe97029b8e3f85923c2fdf9cf1ea6582b68d5a4eabc6b044c80d000000000000000000000000000000000b501cef8ea57ae253de63d81998768e115d58b353ac1ed6e90d24f8c39a31bac1a5be1b535a1dfe05e72d80d1db8b0a000000000000000000000000000000000a3b62c001c4b725f7cc861fa042c31fde4e77b3b0610df63dcbb7e89d3fd746919c2bd8ee4d623838a05d42b6932383392f5b4291fbb18a93248e830b08fadbaad6434040c02b45cade73b77f22c2bc0000000000000000000000000000000011cda0c937d8fb2b21174ff3a5b88aa5e1c9a8ce6eaf26cac9fb3ee7f3ad20e74ebbe2d1bd9f4faa3acc43b6e6d0d70b00000000000000000000000000000000195257a442c8e39ee6b72cedaefab0034f48bb988a3355ad07b3e3e314800b2ce30267dad6ef3fd9dccd7d2318dbce0a20a96f963375d7a294b584f2da699a6a00eb5781f46830987346cf4fe922a2f6000000000000000000000000000000001630ea3c7f910ee8574f29d652e86fe3125c306218a894df0b4688ba582ea7d597d7e62cc2e7c78dc2db289f587f10ce000000000000000000000000000000000d2ecfe74480518ad4f5ded701afa68040246a08df1b8dcfe6fdffe77e33c6bbd37192c6c41c6ab5af506ba58d8b3fe4115cb4646c8996239f4fdda8c27a335361f0a19550d6eb0225c008408c4725880000000000000000000000000000000017a910c111d7a0f7e7a3d48b1cd358e2a1213edc077034b06d1e96beedef80473ec17d1c10bc2d33d4fd2a8c052d926900000000000000000000000000000000040167897293a68c980bc34b3f79802b95186200b40b4763fee9cdce8afc681ee916042d619cd51361e6e02688b4915ac8a8d98c93c392aefb64ce0c7ea455ba14c48bfbad0e3dc38d43abbc3276caab000000000000000000000000000000000dbca3203ee6c7fe8d6504ad2041aad2681b889996bbe28ff1282cd20da563dcd5c9fea5fd03072134019f579e4ef7af0000000000000000000000000000000001317a861403866494eef2bf59519f2d324586e93a0037d07312dd8df4ab844525afdf4b70f9e21a6e0230bcde35db4d8221622734dc6ccf6c7b84b387a3dfecafe187dab70ba373b4416ce3c505bef200000000000000000000000000000000069ea1da08dce1c1239d49411861d3e8ee7e6082d9bf8ff0aad1cbebdea6dbf82fb0d6332ae436327440b71ce6535ed500000000000000000000000000000000079904ab7b16de5812ea3eae39d790aad32db02c9cbf7b8a3a8d4222d3baf710ba1cc5bcdcf4fc9e2c4567992fa911edd3d1f427a25f5df025fa71244cb92dda9391d65b04756c41de0f67ea072c375d00000000000000000000000000000000173ca2615b65e574bd77c8cf55bb116462a7ab9ad4a3879f0eefe03f1a6c0d30feed076e0fb21fc60ee9f270af180cda00000000000000000000000000000000179351092d68e7e0d428811cd4503a57bab9a4072f1bd27b5e8445ec0058eb46af58c4752601b53714b816a4bd386048b55c943fd9b11f2fb8a89f6c08a6eabe9434062354d845f1ac740e6043443f8b0000000000000000000000000000000016c9d1fc1790a15985028a38e57c87cf010c87bdeb2a288a055b4b08497abd1d616fa8b28d6da8cc23047e9f8bbe6bec00000000000000000000000000000000089601933b759bb565d849c3837570feb39d442461d764a22f993a695fe1c55283b8c7db02694aa66032512d44dc88867b0c1d54e51b8572256aeb72bb032a5011a3e8ec5ad7e8b6e0397b9f6fc64c9f", + "Expected": "0000000000000000000000000000000018bda18912ce64106fd3d54ec2024a1d3e4a807d7bb8aaff7b515d75c9934d4729c14a4a72ca7654ca811a69f09d170b0000000000000000000000000000000011478fbc5c03470d9cfbf3decf9416e1dbea8a696636b94244c5c637e43f81eaed0210b1cbcdd291094e8581dba3548e", + "Name": "matter_g1_multiexp_41", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000446af4281a01e0a20b7428d06b63b89573912955971be4a5cddca514708419640f8a7f95b50ef8714a04e1fd81bec64000000000000000000000000000000000087b94d8493239047a5cef74dc20d7708d7e3365018df80624cc5511483c3a5d9b14ac3d4aa391da60980397e4fb1e96f082a5ffb8baa38ffd684a4a70114343a1e723bfcbfeb57d0a85ad5e592d74100000000000000000000000000000000033e5eb4bae80d55f512a48b44054d0efb8af1f9870fddd99df00f31dd437025381df3f4023ca217ba924a961864223e000000000000000000000000000000000f6d7a7371eddf7283890d59bea3c61fc3bff19eb7fa333ae713fb9a73c4971354474986ef5a9a81ca8c5b38bb67f58d5160286a6d23c30595809dab6ee6523d7d235114d1b295087e024b4f6ffc80e50000000000000000000000000000000013d4e9518d398fc0add8233fe58c198d65966844fe286fe657891245fba8f37665e2bc40e4e70886667c9e2c0a1c245300000000000000000000000000000000089562c10b287d4d66b2b694d29fbac936f700de78525e9be59a83543593b42c5c577910e7ba1b67d840d88e7a3e53fdbbca29b94b6583d46753473143d13a7aadb0b18d6d35d7423b8a004991fa1ce50000000000000000000000000000000005762727639503eb63854e5fd3de33bcdd80227e16de19cd7cfaa10b7863915e490087dbb980b6dae5114df7d56716d300000000000000000000000000000000104306b38970a94b5c8839ff282883b7c88c7ef45a7ed49a02b322a16521faf2b881e2dfe22da3f4472e2bea9fc40d7e607c80069dab2a16e39370de32df20534aca46565cf573159a93c64f1f0c4a1a00000000000000000000000000000000056e61b51113719c1829d4ae4361f79c543961de801b1a62ebbc3cff04b0722be241236d4e1b2dcf7c309ab9735334a700000000000000000000000000000000031ddb45e491ba2d719b1f72f54640c63e281dbf6ff84eba2eaa2b781d87e243e7bf84d7151f27556156970dc8a2407f41c1f256e866d218b3ec20c132446945177d518573ae3f0e739ebcc8821bfbc700000000000000000000000000000000029eff96206ff45ea9bd0be2b83cdb660d6bb2d236971517b962faa54535f01097327a00154bf35dbe47841eb36417020000000000000000000000000000000013734f1218c3c34d2780920806c5ad211128352d8a41c2a1035594f470ae347e372914827775094164a5db9d0b2a1ef7c72a47e2267010c532d676ee3c3ebfb2be2b7569f6f7a22f76733d7773ed383c000000000000000000000000000000000f3aa9f069b07cc935a974ad4eeb47e8b0083397928e8102651ee54f53005625c359d82fc8b5dbe1c76f650cdccc2ee2000000000000000000000000000000000e2bf6a8c4234d118676a29f12daf244ad9aa562faa970d2d63feb074946ca70da039e2de104f1524b1a8f3897f053f4c52f48e84a68d99124e678dabaf376c956dbe9603974283a9efc7c27e830e959000000000000000000000000000000000795a2b6b27209b48c00cc8d37864f14c6be66d6a41038122a28186d7bbcc4b02f531aaabd000fc93c685ceeb67bc3c500000000000000000000000000000000143926b42a6654e439fd01883f1ceb524cd8b5b1f2e3eed3e905f6e948736790cc1325d1b04e30247e4971b75939a766e4fe662495bffd8ace4c1ddb39e612b361bf90a0f1bdf6c7fde2bcf63df1bbd200000000000000000000000000000000074096150c9e04c082a1aea20c785b3a7396568e43707c42c512575a97db8127c8c1e0548d640dff8821d7d235f268340000000000000000000000000000000012dde2f1d15c04292bb5da4c467cd674ddb43e401799257524cf3097d0dda1f3c9f2f0637cfee914a4c66d737f9e3278651e67e96f64b80f4978fdc1cac90be538774e34c2f619f8b8e60cd2aa20f269000000000000000000000000000000000109196dc59d6ec06fc4c774f665612c11bc3e826ca4ba528a15c6290f733f3aa1fc441bd896021471e1e85943fc9ec2000000000000000000000000000000000aa0d17d44bf354e48275ee3e4f06291e242402469be6f4cd4a62ad3871d878c1d27a8d06974c5c1138281802368edb01a6ecd3db89a7f07344b5728efffd35a11f7380c740669f746fdf565905a1ca000000000000000000000000000000000067458ca402c19488e2515037abf9323ab8288e0e11f7cdee18b3da50cfa377435cfde1f63dcdc451ce65a05641cae370000000000000000000000000000000010ed9c895629bdafae66ea176388be4e4ce45cb13ecbe0869ce57f0f48852b6b8c47bcc4a14fc5327f1df372ad9f5d4a7db5ef4c1c174c2e5ffe5555f54f4e845c463bb5105381fb39eddc01103b1bf7000000000000000000000000000000000f393c5fc8e5f1cbc7b59742e5b6236c9d1d262d0b736c1bc188ebf58f954bf2835cc70617062a01459c139f328c912d0000000000000000000000000000000015501635aa7565045ef59067e0ae91a5ec4871485ba411425987d540bcd7b5782aa7164dd631e4c7896b3949cb115f9a14018f14c50d40d3324952ec22ed247c13c4cf10eacd32c3671757bd12b041e600000000000000000000000000000000174b0620cb49d8b1a5798c3746046c2888c8e96664dc7bda5b4e90336517448eef534469a40086703d9a835d2a94930500000000000000000000000000000000033db9968fd6322e7bbb9de572e8c92b5e3717a9496803e3f6ef8dd796dc6487909ff318ad6d4d91297ae6f2daf07bcbed4a28dc3acaf2220ba56d026b292a7d017bcbe358dedc57556cf638517bbb14000000000000000000000000000000000449ee22d2c23ec02fdf1751bb59feafef9291d6d56f7120612948875afdea56453e081c5c5086205ea83f0b8cd541ca0000000000000000000000000000000006114d6d8ef1e4c6d79b23a2b91e5577323107d90523001cf7d6d18a0ecf3b414d4fe1a3eb831a6d907fce9d22030bcc30fb17a38b7d0888eb02394eed26406bce9e92779251bdbcb432153a550c0850000000000000000000000000000000000c2082409ec14f6121de6ebdc06656a28dfc5e439a0278593dc6aa845e8091d8caaef45ea1ad05aa12e3c1533275a663000000000000000000000000000000000a2ad9980247640d44d3b37c7b7b2c1b57592ac12cfe9aabca4f88ba90c8b3221a2b9f5e4ce19ffcdbbaf99ffc584219980b5873a5d0f78c3b8582581349498fa997fe3c6b1abe0edaed594253359d8700000000000000000000000000000000108ea3fbf78237f0e90d4addb69f25eadb0f21c89d92774b4fdcbc97632f1622ab4ab408fee95e735281ea5da5c2c8130000000000000000000000000000000012338527c7932a737daab3f8de98b9f2aab59aa1b12e84d3674a8ddbc1f86a8a9e7eb0ba854e9564407aedd489b6016c619f5719c320320a3c45dcd6207575e0d8527c458c56d3decf1d12ead8a985a1", + "Expected": "000000000000000000000000000000000aaf02063d6b5b395b75faae4039cf2eebb69053f1f161242b47854cf07786788930f3be2598520c178301ae0bd13ab80000000000000000000000000000000019574e1de9161a11e804d8077973c5ca70ff7925c847d870cd2bc985a8724d41331fec6c1cb341f7509a37371db9e4be", + "Name": "matter_g1_multiexp_42", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000048708595ff4f08cfa2b1c101ec7b3538a2e6044157bf39a63255b5540211105f680464be5b03256f9153a90a4e62d44000000000000000000000000000000000f2fad0353cd8fbcf0ba75a403209094d88d8c8d068eb0c7077b8263fd9f7bff8d6234d75ac4da232667b5c566604706119d33d32affaadbf6c2b6243bb7b344a971270b488cf887334fcb15de2818cc000000000000000000000000000000000866fb774b231d82a4508ff9b017ab836936299954b2b404affea65f315b62da34c76019192f5c9a447dba8cc1b9075d0000000000000000000000000000000004e050fb7a17bc738a55f1ceba48920c62648a27cf438b770a66166522fb0929069fa6f2b2b742ed689f554e9023ec14f1d832b355d7e0ac3653431528ad0a8f6819daaa19292a00c910ff0ff39f46d5000000000000000000000000000000001710b342a52b0781d1ea18a9f07d54fb18e9c90e44815cc7509aca3a5c9ca3cca6bc32ff6ff726cfa353faca4f097e9f0000000000000000000000000000000017fd38b122a7ac39533af597b462224b86370f6e6814ca1ea71d961b9c7cf94b952fd75502031cde0851773b2c6b0108e6dcfa50f6129544835b5a4568954264ea68d9e2e5d4370ee31026997a3fbfe90000000000000000000000000000000001fd243a3c69dd5e7ef19cfbd9b7cecd475e88d7be85dd3a8f48eb46d5dca39d05aa4b43c0c700b6632ebc0b4cb3baeb0000000000000000000000000000000008ebf24e9d2de0fd82c69e0ddd1625da0367c2e9f975118dd2ba5606d77de377be10515d9eb921be5136ed25fa6b27abf7822767391d3b2331e8e1b81c659c6e0262f7355063decedabac9797a84f0f400000000000000000000000000000000021f919adb62791296db3a0b81f03b87c01d94ca312f55cd94364eaa654bc47684d7b0336a3afe813ef1aefc7dd0ced2000000000000000000000000000000000b40dd6bc2fbfa2ed277d88f77aded330c54c1c46a781ccd039b270ee9b799a70855ddb1201dae29a1b124dde1e6acaab1ba1cd6a4a6c433624dec63547119c0d492e3f38afb04e5153d82e400631aef00000000000000000000000000000000054f284874c53bc914040e6751ddd444604d34a38314d8057fa0f77978150fce0add250a6bd8693ede79c9f6b2e025de00000000000000000000000000000000045f6579793d166198d73ccd03da2e907efdb31b54b0b0fe3e2f1e02edd7d9cc0c08af089330d53aedb60aa7cafb0e0ca41e184bcaa0721caa4114d6393ae2251fed84aef57c7927a170145308bb136700000000000000000000000000000000189aa0df86ba479009d4bfb8608c31d3d49f52f1bf758e5c05ee9e5a673bfa15e1c6c37a978c4c431ea035cb7948297500000000000000000000000000000000120c90261fe77d6f41a42a170b28df1c9e6e0cc4bae247303f399d3be7c6ce8319a43e7d551fe554783ec5ccaeba3bb363cb451d8eb3565274793925a1869ca5a25fb19639449c71a761809f785568de0000000000000000000000000000000005e990869491ce375477b586b63641ec71adf226c631a14ebfae3514718ce546987c17c9ef41f9005c10eb04909a74ee00000000000000000000000000000000141b8edf812a2918dc9a2242301a7e7f6433a83298be9312cb48f0d3f0c819a4368ca961a0b6f09f9e077cca6111657e6a2f94d55f784ebfc6b6260327372217d6a5b9637ea5f9afc1a65f99c221c29f0000000000000000000000000000000010f3f93de5573e42ced8278a7a12b58086c04f8b862e11f256f26731560e606ab81d61a1090857eada5f8eb3afc363c400000000000000000000000000000000111915ab2711479677489dad7695cb02626a0525ae9ca51b5271d5fb6ff438d99730369654240b05b5d47fe00847c6327d889a3362f551b88e63463b7f0cc334fab3fdd302b630e419e362ec1eaaeec0000000000000000000000000000000000ca6c2f2191cf86c596b439de0e0df79b441de41c7661d4b80723f14337a379bed9b97958d225700f06f8be5401399e10000000000000000000000000000000015904391fc3cb879147c2b5192641c4ddde11ca8129c3a03b82f5f824b2ae60b3a33c925112d2de94ba3eee10761da528bdd400ad873cd6ec546bff698171942d536b94e69dfef4bbf316a471d4b45cd000000000000000000000000000000000fefa6dadbcd8edf2861c6ff4f5eb501a76507b1fdc1b8cc992226a7e5ee17ea343cff89426c409bc36c2aa3a8f5793600000000000000000000000000000000166706cd1ae090a41ea211d1333d360a1e34dde717979295a0d6a870932f31158e43ca041d1978815aadbf761275953163b496a64cfd15410192aee9912f869deea5a08eebd6b160667e12fdf23c44510000000000000000000000000000000008f02061fbfe82eacd770520b46ab49bc29bf358468adcf904854e39b30ec4e363e80f18eeec8064947bd8612c37493a00000000000000000000000000000000138888a1fd168e9c94959cf026605691b4100a828c3a75ce95f3dbeba2a21d8a44dfaaad834dbafe28c12154f41f652e70de38cb4627f53509eadb0918e562c6fa68a4cbdfa9f7578a8aaa8182f531500000000000000000000000000000000002a07974c00de6936c31202e2b0c76c30ad15b6c42393d5c5d2b1e0d5eaba8b5680d3837a8029283f572d43d2944e4b10000000000000000000000000000000013fa3f905a5618b7aa3ee5ed37055f0472fa361fbe07733f9c500657338c62bd4cc3b0b89e8223894f365a58100ee35416732c583e8049a5de38642cebab774d90d5f87601e3599ffc9af692ba532e620000000000000000000000000000000000775861019fd75c201b3a23141c8e962948ce38fb0f15cf9d08d56ce0dc574300e0a6ed90a7c50b8c71a1a9c466d16200000000000000000000000000000000066ea30b3a1bd410e3c70b1173b91d3eb9fd0be55b2d583c4be627c3aa9cab1b2a5fe13ccb37d781965b1b121079916c4a037e7562adfbad6b1ac48b8e4b6f277a788ea2f4416ed2900ed2791f09bc24000000000000000000000000000000000ec3ae37e6e5b0c623534f5c02d998bad139394daa28aced4b9f781a5ca671a02f1638cddd3bfb5124f9c5c830cdd9e20000000000000000000000000000000002688ab0be331d6f8246a54749c54fc111d2f7414ddcb1f3b42724e5bf14cb8ff3546a3b9be6115d91f62af8c3eed35efa878f6a2e18b88d6badc5b42775e92c17974f3a18817b7769d44ceecac46b890000000000000000000000000000000005d5e2230d538b05b690e878c03d793fc70c391e853b0ae3609f81a7f24aa6d5a67f3138308328783888645d1d84a15c000000000000000000000000000000000d625eed47e245ee74aeb91fbd72981c4f2afd53deff7ab478f32e2a8635431d9ab9848f7912dfa4bdf8ee7201ff418bc4f1a7d2b66e6202c957a649384cb277dbba769afd60708b457613f0f3372515", + "Expected": "0000000000000000000000000000000007cff832bedad3caa9c91ac59292828e79811f91c51c4799e2752ac0c12e2c47a2a07ad0521097af7e4a939f3fd230b70000000000000000000000000000000015037ed0ec4981737fa94f276aa9a4325a2267b90f34844f14a92d677060a23e23e3ff0b3df77e7e67e85c23b28cd44e", + "Name": "matter_g1_multiexp_43", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006984b92b5b868004f39ebf04f41084d03704732363e65c823e5ad4a0a3fb4c983ff9375249bdcc2f46650921031bc1d0000000000000000000000000000000019b9d69589cd29a9909af5a303586aed5e33650331b9866a6d959b8580ca8312ad0e96c7214ad50db7502f50ecdcdafb0241da9d8505208b4d3ba2521a42f28df7d06fc212e9e84931cbd30ae3ba2e1500000000000000000000000000000000173433f7025400852ffdfec020a44b545b365158ba8f919f434fcd995c0d84509c77d8a05405c79953b8cb667047690e0000000000000000000000000000000017d73ee336ea56efa64038b31d5abb6650c4c6f7efe67add40d09faf93fdd9fae44732bb69dbfb0dc8267c4d01d8aaae6fecab1334668102e47f1e7139059c1d715a1851a026a1580f93c2daa3f08a2700000000000000000000000000000000184ef5b6e309fee5030e2cd8c6c3ec49b1cfb09cc9cfb349ed47e17409d9c478e8e54f285a3b3a4025464162b172d33f0000000000000000000000000000000009b78ea5d2fd2113a4bbcbbe6d0108bcf27b60ff435b5b587e91155eb0ac6ea35c27f276b7e11fe5fb59508454fd8bd24e2023c64a3b51cc3d82e262f83260ed4a5e9e3238b85077852fd501b52aceed000000000000000000000000000000000d0b8aca446806ab51b4a49049cede15587aae742ce7d80c2a05d255429c945d1337b4fa7ecb8f2c3b7c0b0299a41ad8000000000000000000000000000000000bce866df7061aa4319336ba1f876254a8e0faf3faf2f9ffdafd0ebd7d7d0c854c61b476583207818f484ccf7faf90fddc0a88f0aeb2b082dea6b50d591018330c2276830ed554840c10772403561ed70000000000000000000000000000000007018908a64fe5795ad178b8bb1c8540ccc5c78ddccf4e6cbae72bfb84e794d23172998d29e568b186cacfd025962a010000000000000000000000000000000004751f7d225407a8d68b4a196e32cb4c0bc6a9ed9f2093e4242b268d6c5df978b8595d8940f59be860b66310bf8a5460f68c9e76d9d8914f14007c968a31089041e67312c6a3e5d30e65efa55894ba74000000000000000000000000000000000f61d66b0539c7ce56da9308d0ccfa9245158541b2d1b14c381ba53471ae9944ef3ec9f4eaf52c95d5d0bda92d6b9a47000000000000000000000000000000000612e57aaddc6eedd9b8a08b991bebe6f5cdf7805c2cd4de5853856f11eaee94c4c2e0799254f98348cef63236cbae3980eb90c6cc25b3a48d93b94b698eff513da37210ba79d22d76a270aa97fd5107000000000000000000000000000000000b8a8cf0fa6ea9f3154eb35994cfe2f7af4252adb8f26d718163f2bbee3cf1bfca400f4d3582fd5fd407083e0bb48ccc000000000000000000000000000000000c3251d0d9e8520b3e7b43acdef58c75348786654103fc770c7ffef8593b169bba3eaa2686791f919fc70f40a171bda8067bfd893b12c79e13659ee9b5f22de71d806a85410c9a23dc43363915a606b10000000000000000000000000000000008138d173e3e8f5e63f6aef89cf2437690dd0c848435f6032f943ef6cbca87bd2a622f9aca825b7caefb497450dee4c200000000000000000000000000000000183379ed3c9a6a6904e169c68d627bb828a05a93e38ea3b7886db2fe6d1015319d3887136180ab7dbddaa26b1fb3335f34abb11f7ed6d73fb81ce2777acd6bbe8839112c527ef4ad88b094cabdb4742a00000000000000000000000000000000083f8fe152f7edcde2c81107eacee9c58ce22b5aeb10eac15e7df1657a813c98b182433655380c9e8ac18efff2188b5900000000000000000000000000000000100b06f6129bd9063d2841f4c244adf2dfead83e23f3b1586126623ec35674ecd6422efa0e86ed0502a83549551afebd8d6693acb1eb73f6ed1bb4f74f1062f720a7f2c0ecf2b5a944ff89feb2688e1900000000000000000000000000000000072c644635936a91dcaee40e3b4794e634c315a39a9cb5cb99ef6784b332fdcfaafdc80e228cd19d0104d5796f584c350000000000000000000000000000000002318bea9077484e9c1937dfa63774b5ecf6fc63ff06e5cb653553d5111a981c09c907069ffe11b5704ea60a9987328329ca1b157e6a2b5b88d7467e851282491ed30382ba217b82ea5cc9ca0c698693000000000000000000000000000000000aa7249112c7897c9b1f95a7d8299790a25d155dc9ef7b1ad6dd7b186bcddfacd4c77ee95e634b5f283c8caebc00b9c30000000000000000000000000000000012e31211b2bc88c568e08157da9c3e3220dcd563cebe44653ff4d62f8c306ee9136832704272317342f634e66e8e66a240bb53575662fa0b726469da01c39df389efde3936d2eee18d7035704130ad6d0000000000000000000000000000000003a5576b3663114b410276a8c537a93f790276754913df727ec6c0a684ab3c705ec04b8bac882bb9c5223702860885520000000000000000000000000000000002221eb21003c6512428cccf8a9c775df9b72ed8810dada5c92463e6cfa3d619f22a22e314b9b8882c9e2f609b73353a1574a30a575138c44881c1c126be214c6b68335d7338875b8a398196f27510d700000000000000000000000000000000111829f79d4ec1a80533f76f32503cae2842981e29ddf9a376d16ecd7037d3e0dd1f8cc84d512fbb39d58564c019a559000000000000000000000000000000001808e65ee7f31a1fc15d187eebd76c63a3158469099bd6acddb0cc96354072f636651137d060efd850fb599a6965044e6dd51553c4119255b31cb0aaad7391694f7dd29420420b513699747bee819a99000000000000000000000000000000001274417dae37cd33b2a3e086f327df292b6f997e5c93e71add346d6e5f6ded135c8d6047978c10c5c38752006b7f76910000000000000000000000000000000014f867c58d3be7b09891f087f47c1bcdf82c16f899ba960d8a0db4a5eb66efde12dbee75e77816cf9afd4877d9d08f32d88f049ab3ee2b01af449abce08ca14ea3b065f06a8665ae3510b4c04f423082000000000000000000000000000000000d98fa6b2371f65f6f0b62133d1a294a7faa9949c7df16818657a9757fbd8381222cbea98a72a951e4b2b69b216f705b0000000000000000000000000000000016331e8f0661228b1e5f4df59a09de5133d16e06e1628afaf8b2a1160961ed9738400078bd79cb5bada5f99748ba220b19d6e227185c538b122858ad5ae594720fa7f743f5805552152a213ebea64aeb0000000000000000000000000000000018f129d1799d9b46dcea6d239679eb64f144adbe1a9561044355cf66b4b1158513406ef4423468b5ae446c4128dc03d8000000000000000000000000000000001669ead3f97913fe5448bda1bb0be354fff223e51bda5eba9743526e964247211e9cccf75e6f99c6abb5b8912af94f5d3f53123f01c4d0d4c18dd72ea87ebb5fcb559df255773fa0165f1432c229deb6", + "Expected": "0000000000000000000000000000000013426d2d18267fa615975295d2029d2e5730fc845556d501c8c6ff8442cf0f3c7facfc329f6703043bb2d45acc1639130000000000000000000000000000000012fea8316f8eb7cd655aaf9cff8e395592360eb6d62bd42f6e1d1e27b9b54bfb7be5b56791d5ba55a798f073f9b5634d", + "Name": "matter_g1_multiexp_44", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018eef275d602fb152cee956b04313bdbc8f0079da7bd8d6841fbff1f63a9626f17ea3f7a8332023fd9793ed2eff3990f000000000000000000000000000000000c41214c40c5c65e79f561b59d7ae103cf8c60f78c2b0a16d96a2e714eb30eeb0cf748044bdca077c4be5f4ed155ec50cdf2bbbad52a3f5c0b3959d46a8c42f6f5250a93c3dcc636712a4a2baed289c90000000000000000000000000000000001e5db25f5964e3a5030005152fbe9c00252e37dba6febdb7441046f734d4b86d60334d91960b09bd32d258b7ca2662b000000000000000000000000000000000949bfe49b0256a01da76f5c2270cd0b6ae70fdbeb55f932895d0e72d94eb6db236a8ea40d419ec6d9354c611b8010a918adf5d8fbdf81f8e4bf2f622e2d481fb2dea06a1aaa289ce4f6e783eb9a98dd00000000000000000000000000000000158addae39a79638dbd1a7cc280e0a24d18a4914ce4e290f8f79c147c4e817d95a01bf6b074ef8e819a124cf4e3bf088000000000000000000000000000000000bd2f13538d08742b3bc7b1cca9cb9e059b4bcff76b49a189f506b4bde56d8a58fe0bec2f8425ba5d574dcbc5efe0e93650e995b73b63d068fd54f596cd9669fc3061f0c1da77ae7d0f5bec012f9ba69000000000000000000000000000000000f8615d47e4327d862fa64ff4b9be14df2cad729b816ac7bdcddcb32500b6523af3303fe36c0e93b638992c671958d5c0000000000000000000000000000000011aa78c5d0073fb9b34235555bb2e3f27e55a1d576ad4e3f63974cfcb2646c6ebfd6e595d46613987c0c8e86846845dc3350d4f13e25052b1162dad3ace76e5cda71680fdc89460d8fa88c0d157df426000000000000000000000000000000000fe66db078653da2fcd1490a36db9371039f3630bfa4d574cb700b19697c7194e8e44453e16ae71db6c9001e18392a76000000000000000000000000000000000cc69605c26212c6a088b9a5c2cf6024e46f035e4c64da67383f294d6186bedc18922ac891f742165e3f09fb1720d476283f0256766690c88df6cf7c968b9a96121d26d19672ce9adc84b699476a32db000000000000000000000000000000000a280b29948ccda96a2a05ceb9fca703dd63c65ebe18a0002cf1c63b8f64282cf9d3d4d73ba3a13426f253d09f83ebbe00000000000000000000000000000000146f604d1e90c4a14aa6599ff5c6389e426232a2dff39334f3390006f021f83500300b7b0f1585ad591acb1e0baadcd7145cdeae7fd3f7455dfd2ea9a064c135f0a0a36990ea34929e292e4cdfa0f4720000000000000000000000000000000000be58255d1f227af95dc9a818204d687064d62166c16f1de052aca69a37ae98c2a73a9a9cc6cf187128e5b86969e2810000000000000000000000000000000003f1155d7e91220bf0b80943a16a9f41e4def1d5f8ce44d95dc2f9099019a1d5e770158338ec248eeda7c5af412890cdd9cdaa979ab08b454dcb961e3cc4bb18f706bed93a72a9c1e105cd69c0b691af00000000000000000000000000000000077c3ebd0169da81bf07ab1bfb8770732e4182a30504cbdc8fb1abc49f31d698c17f68de1a6d8bada62e98e09bcb22130000000000000000000000000000000000d677a33c1590cb55c9c78afa455fe2b349c465e90537a73906343aef577afbfacc8e157ea6f834ff959f3dea5941bcf262f9f7a26353193939bfbbdc50ee35614a3c099776f08b21e0c4c97521eb8e000000000000000000000000000000000aa0a3898520c5bc19d7f3a8e0710585dd08419b39d9bdcfe12f7baa6b4cecb50bc0d6e877ccc2518e4d0254934669ec000000000000000000000000000000001376af22bb714adbd16d8d41ab503066fbe78f799aa8c1d8958eda9e4c8c6fbe119e592f655e0c3f93455e8acd8a2bc14f0d2915e82c9a69f9e9af64a2c5cacf61ead492bf69912a35ad6a316f9914a80000000000000000000000000000000011b1300312d0ad0352ea153746f051816693008f2d0b980974bc354996ebb664e910350e28770192f59c053f3f2bf00500000000000000000000000000000000125d87c441a1dd88f489514b1d550387aaba857d5a6bef20acfdc0afdbba3e98c2e0aee0528cb78970395a9da853ffba25ed3f13198b69604c08b414562f67a67aa8dd4a7bd3c066874182d21ed9004d0000000000000000000000000000000006a05ac512adc0dccb74c7b4c2187763a6ba8db9e290cb0efd1325b7a463e0e14a3e7463b5cedd732527dbd131246c6a0000000000000000000000000000000001c1b41b6d5c823c05a5d6db55d7068409f5fec25986db6e2689dc6ec3e0d85749db6deb737445c5feacd69925c5dfc44ae188cc115e9d492be64abefa4bd4c93b61dd42a7d213e1100b8108611a616300000000000000000000000000000000143d22823412da99f7b87a794662bded7b7ebad9742e4d6fffd471b1bdc748c6f1b5bb395cd0a79c7291b9e8081825ba000000000000000000000000000000000f2b98d54e293befed0a97667791ae35494084229b2a25494fbd7295a04f03173a52efb8ff9033c4615ad1185d4e9032eede725a693277356ce71ffd7814a77fcc30eeb3a2b8863fb91ca03da1cbe37a00000000000000000000000000000000172919c33fd97de83b30740356c2bb2a9c97c3616d9f80a8d8266e07a1de21ad974ea796d3cf56660fc4e0df263a27c80000000000000000000000000000000019afdfd10bb736e8a6596db59f4f9a8244e585fa81ae315a768c8d91716de32d42fb75a57da238dc597885f083049a769d0618f898594b23ee3754fe390d6bdfa7d47fe749d6819e306935c1eab6b046000000000000000000000000000000000a944d2667a10dc5892760cd3e13289785f0a5a461068d70960e6546a0543474f92d68ecfa96efd19619d976af2ee491000000000000000000000000000000000a88a16dba3fa6cb5ef21015b18a14956ec9ec29650929fbd0308fa59ac4aa389aa2e306a3a68fc04e062367a72b3f861e1c9420cfa91026286d7f986b538c13e8c97893995485308c69f053927f96220000000000000000000000000000000014118a990f2649838954ab911e795c453ecd0d700077a5fffd1a4f303087074d595caf1b20399578ff1e23a2cada7e5200000000000000000000000000000000145bf8164b82ca5f8f93d89ca65a894c6d15e38da2cda296a94aa1a1efddc4d2663b8f09efc3b2d78510c4dceef8558fe5095ed9a9181aee392888e3194ebf9c4a6d87b503f4668bb6cc0d290880a44f0000000000000000000000000000000012db33b91d99f44cdc785470e67a781b4a72ae2dcfe4555efe5b7527b9a76de8e492c4dc7793ad948cb46070eb1cc5be000000000000000000000000000000000ecf06e454ea574dbb9ba6209577425a58267d01f29f8706d06018a9caac994d2dbc9c6ca9fe3ec01aed9aa2ab886c60dcece8ee33d3bf3188574e94a889794077035ee92473b7266d92a3c018771b4c", + "Expected": "00000000000000000000000000000000003747597e0f9bc39306319018fd08bc936c4d37cc6f84ef296df5a36cebf0aa46ed35ed215ba89a247174fd72fc7c1c00000000000000000000000000000000150f973b61f26aca79a3f7d1705999308a96136b08673322b4729f16b471e38f27e66996e2921cfad0cf889878c2ce27", + "Name": "matter_g1_multiexp_45", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000046e955a4631d1a490f92cd40ee0a31c096210ead2b307a7aac60e84efc04898da5d4d9767f1303ad5652a0e377f0738000000000000000000000000000000000afd054be493fb26c7826c9c1f62365ebb28ed853bd3a45d266f4c690a24e179b2eea5261adb0bc50dd184c165231d2eaddc845ad867f1e2664ef0e78bced8ff6904c5836e7c63ea3a9c858fd7b710b6000000000000000000000000000000000ec3c20a24a5f9fa7c5754007407d1aaddaeccf3f7956914ed3b06dbcff7f15c6d487a3b71fa9aeb61352698a93ed14f00000000000000000000000000000000086f3cdb1e21cf60a7a57e7ea7e00b4698a837916eb1f6ac1c6cf97ef2abd48292ecfa471ba7d9b8688b6f0dcfb6af62c78cfc6a30cea34d3d3505f4f897631f67ba77913734f6c2895d871fd6d5581c000000000000000000000000000000000769b870411b65a1a86dfdbbd7dbb65feb708f9f90ee73153e42f7141cc660c50f41835ee44f58c7ffa136b944e84dcf0000000000000000000000000000000005f0480b4a35dacd304d8feca77f8580f66396a6434af09b98d57fd4f9f781012f3900407a49f4e0aca8d3ebddd2a7bea1e40df9e1f7c84633cb3dc2223296887de7281ea66c5e1f2d5816334f7b280a000000000000000000000000000000000208f1b01599c969333ddf9accadb24f1c8239f82f5beca72d0d6d823b59a3b8c450e25a2da32b5a8cf8c0f47137e04000000000000000000000000000000000054051408658f025572a45c731e81f3fb88d741a632f1e2acadc48a1f257a69481c9c11e655c226d8e0623d34fc9fc158810b9ce0020904dc1903338089c30e616ed0be03741572ce46946883874f4ea0000000000000000000000000000000001738659b582e3667cee963fbea8cf695daa6b811dd808e724ae77db2060f248accf645db52f9838802c5322d993488e000000000000000000000000000000000a36fe571929153dd774fdcbaff2b924cd3f0ab4aced47d22a2662ac6f415b89372406c4ea5a0a466d4a4c5cfb02ad7d93e7702da2ff9f3f14586a9ae80c8713743d61b915a7c379c1faa1b151406a9a000000000000000000000000000000000c70dbc5f707fb949a2e0cd57e0ba6a5d28a2d85affcb55bdc9fd24a3fe395bd78b7431175a629475c0932b769b55d6e000000000000000000000000000000000a49fcd19bde4473bb98384bd63e96508b539fb80e1e0cd9fc9aedaacba0c36d705ad16a47f345c083401c6640675823eca54e365faa35d2c9be259b53a1157b180a373813382f47c9154af18a2d83270000000000000000000000000000000011236c10b9622f4e3d468d91ba9c6c072be74aea66f5bd77411193bf2358a03fd47d029dc7b50343ef72fe9bc08c7ea3000000000000000000000000000000000b923cf7f612e800c2c52b51203e12a72d6f106c0d047d1317711954cb33d44678f509da27f03dcfa1d4482a9cc2eceeabe2079ecb3618de3accdf291d9479bec32bca1f9fe87b00b64a12d735f5b9a5000000000000000000000000000000000883a868a58809bbe3ec9df32f8b963030d71a3ae97250ee9aa8446a8b1a4428324f22fddbe77b338ca58de26b1ad73f000000000000000000000000000000000a49fcca1f052e82fef8913b64268a33ef1d2ee213ce96e60a3a1842aa304c63cce711bba8f523302d9252e3def20e3fc541a44756ebda14aea95f1a1d05e7366dc0285305116b907fc89e777ce45f79000000000000000000000000000000000d1ed017ef4702bcd3bfbbcff36000af6a1d26ab363e68ea5629027e0b90352bf1d8e03c13a7955da6c15507cc1c9f47000000000000000000000000000000000e09830e54fe9eddd416479a1740f6f1b7693f2d153d322f27779b16bb6451d7657df85a55da75a4aee0a2e33b3a46e637d521d31de52681f1d9bbf64a12f9bc8fe0ac61aaef14d7e8d048ff09e6578b0000000000000000000000000000000001f902e2947de38842c207b9029743da51ad0dffb61615b22c73d88739d80c926c07f97507ca3bb830c66661b397dc1f000000000000000000000000000000000d8a1d29f87b3335287142baf613fceebe9d4765d29e46bbc9e459af5450256295538b49081d849f3253f07357451b6e4904a876d4ac1341e88fc4808508c89c19dd74aa8fb1dd7673cbc2d28e7d920e000000000000000000000000000000001846aeb64ead3a9b6da3b6f5de234fdc98442bbdc402af2d016c9dd25de8f9ca09269a3f01a812187ab7427b2bf31603000000000000000000000000000000001775e3fa3bd35f96faaaf9c3ce1d2391f89340f8d533e41a1d637fde7a2cd7ad997e50a6e9437468a1d5940e4004bc9068911b04d8155f90c7c5c0cb519ee6ff14c0ae27ece0374f30fa148235e8cb490000000000000000000000000000000008aff7ad8d3e83ecbf5c3fa2cc9a5328531b1dd6e30b2aa618aa087281202de8f4d356586d64082fb039db4c9ce6c3e40000000000000000000000000000000014196e8ec67e5f0093da2b1233331bf1e90a8fe1db52b2629c0d25e3c181d595c03bbab3b399c87236d2353f1ea6bfe9481e894ecd52a252cc76547513e2cf0a5cc6b20c3dc9c64c7f34f29a488258ef00000000000000000000000000000000018ad28e8d8c1d9dfd8f8cf4e60214446a988285005d92e38d46ba32f619e982cf96ab10b605b1e378d7b46b54282ff300000000000000000000000000000000029807f431a2101ac341241af021ee35c47e0ffa1975c982f75c10ebf3ab9081d294578288a5c308abb074b3e3c756c672780ab3c48c8a102469799ba2f70d2fd9d324cf558a8c8b49e2ecdb71ae1c9b0000000000000000000000000000000008cf05c3d3bbcc63ee761f7cab1494299a3e2274ebaebedcbae5b35ff33bca129d79f73ea77152f19cc67fc66ff774040000000000000000000000000000000009ab576dbf0e8cead9450eea0a506c83f12d09fd2267715a76eb46602756859146e96920174dde3a361636986a3d38e084ae1de8aaf498bd2d91bd828bc64e56482b225322b86529da703f47289c6567000000000000000000000000000000000006f62bad30339a1a912280ba5d982bdf0d3c04ad9051555eabc32eef501e80d996f183a990ebd17301ede13db85f6b000000000000000000000000000000000b0c4bb1a10f8a281b83384ee05be2d65d6dfcec36253b9101cec7f1193f8fe3d29333034de96dc62d18a97153ce1d153256548db55ee9de70ebf6fa347d81bc50494b937ab1c3079977234a34cbfcfd0000000000000000000000000000000010afb2bdbea9f6eb0c75ddb0a4404116498920557a5d416c6d855978e47aa90da70f29519ab244079762fbf965edcd070000000000000000000000000000000000b8b62a1e52eb3805056576810721cfcdb5b0d94759a11862cd7b0a88e3ddadc0efaeccfb89662860e187f8af2039f8575ae146524544307ee51e58a654d7324983a87e1b37d46cea1a4ec34114b44b", + "Expected": "000000000000000000000000000000001422eeff2bf06ecd67e0b310e7201773577a899fab8ee7c5b6ef5ce1021c9371e106c49a6b607cb3d58852f0e671000e0000000000000000000000000000000017ff4ceafb7c286f2036e6bf47a15e6695beacc7b988dc35f8521459203f69975d297160dc67fb88c4ed2fd7b61ccc0f", + "Name": "matter_g1_multiexp_46", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008fae47827bf8786df7e9f8cb38a8e01354ed4417a05332e45a94f93a5ec61f11d517f5554d5444001ef2991f2e7eed60000000000000000000000000000000005cd17cc813442f45e7c2fc542a6359b16db4de7749677b1575f12ed694514b3569b722ab257f7678a230ca3ccb6e0ed1129275f3ab3125db33d43b36c7de0ad60a6e9cb4457aa03275caea9635f0b070000000000000000000000000000000005aaeaf87735d9e9895e8703177faf8b11bea34aaa045852c57e9b86f6283332ab633f3e6947b84784733f6f73b289580000000000000000000000000000000004957220d5264c0ff61dbeeb0d0d51278386227a9386756a042df89fff5ff9a4d3e3e52293cc94ed729d00ed3e70b1a32dbcfd8680258eee451db60f3f42f02f388f87440d00badb0a725964042515c900000000000000000000000000000000049bec519df011ae5f19c85afb3301f41f71119ea6cd9eaffa9a00f9cb901681eec5f3f694ef9b4fe768a25a55afec560000000000000000000000000000000011414953ff3fec28aabaf3d62236d6a972da12c42102911a3ee8e88e188970a11487df719a739201b31fcda4e52d7c515a6f194abeb6b7c1c561aa820bba658f0277870e2a32f972f9d18ca361929b010000000000000000000000000000000003e5345484f59b269fa25b659e9a43573d4191c3c02f5f94534bfcd63d9abd57b2f3ab92f9fc746a852b185a6ae2c778000000000000000000000000000000000b7d7648096606b0c3fb93627e484eca017b95b27a8098e5dd332bb45171793570c69fdc16caf5b16e65f68c817de3bb579450b7aa155a3ab61e47e337ddbcd17b197de2dbb76008cfaa09d3fc806be4000000000000000000000000000000000c6afd550c55cc41cea88e670443d97c6419a295918dfde1d5490718f18ccaf8fa0cb68c42fa2cf583284cc70bfb0a11000000000000000000000000000000000f88ec67e9ba0e169ebf93fffed1fb14dd1aa3e1a2fa614a140c1a2147fcf051457cba68043efdb1b851bace84078fd64be94f96ec4a3d4e028644c63b2577a9ef849b403acc55e42432c3063a918d1600000000000000000000000000000000143a1884ecb4121e2c1c0cf2998b690d7f01aa3deec1a2ae5542647a3721f7be47c21ca071f92d74d9c3d9027b56d9c300000000000000000000000000000000113b01f060d10d95776b35c2b294216f768a323aececb308d3de24299dc12e55fac82c3134519456660a3465abeeb5950983e6618e9e4208cfbaf647592e42b2d30de9e74e4943fb2bb49109a66302aa000000000000000000000000000000000019a5620f3241d03d63ccaffdfabf7e99e784399929cfc3218d6b828d7ce137c9c6cf3ae830630fcef3cfdff705490e000000000000000000000000000000000114347768e5c8109c1bd47623eb51764d4b3f63f333677bfc28b143fcc1142f4d9094b2355408cd8c412a37a4579e0706615e300a924ab962e0b7fd0b044cae9516d96de603ee80695718c27d7fba0c00000000000000000000000000000000043c0f4b09396d4b14deb7c5027ef6cd2d426fa4f93d4ba9c3647031d557a759e3426c113fa3949cadb8b98a64bd69880000000000000000000000000000000017efb6ab8b2eaa0768bb740cc8a4e5ecbad81087cec2a307e5f53b5f431d19e3467dee84df6c6453ad4566ffa2380c9ad77d3e9e64e00b9356cceb62209ad48fc89e69e2214aad2edeba18122727363900000000000000000000000000000000140f0efabdc88a109da948494a9fca5ff790ccd6c629a088cac62e043e00e38c4281e49173ea0e423152c5b944d80ac10000000000000000000000000000000006d3d01cd44e56a4cd62d88a22c701b42c116082e92abb629e64040f57a240d71718927aedbd8ddef910198e1bb09c6841f75c89ec973f65b11786e186f4d42ee2e85c40f29745d9f428af08a39d5681000000000000000000000000000000000f20ace44f4b981adbb3035e450a656ce3d8464fbe4c45b9f7035c00aef11e389cccef660dddc025786d4f9216ef60c1000000000000000000000000000000000d5fb0a9e9ab03893a9ec61675af29e88bb30f3b61e05d7c5a3d823159bf8e641ad894ebedba4bd681df789e0c3d2547c70cfb76a04d1a9e0d937292e5553ef371e20d5d3dd33611edc0da178e2e4a16000000000000000000000000000000000dd38f99872751b4571253940ca588424190bae80434a3126a7ab5ad1383c55ad769e09179d148d151506e5cf5007b3f00000000000000000000000000000000032b2b9a8b13acb6589fea9e8b8d2535285bb32ab0e519cf8c63ea3e25d58cea7f9fb27481adcb9475abadd6f1384f4f8db878b7f5fe817599add432ecf262f19d80ac834bb0a0f983728f6e2c189c88000000000000000000000000000000000c696064b7c9653cce986e119686b2e01216faf8098d494bdf6d302c4d176b24b05bfbd70b9ea3ecc16312f899f887180000000000000000000000000000000001b5b8d333dbf1d84feaab7737d3af13d3995d3ea976d9ea1cf1d005090a809fa6c210a6363495c2b22902442fc5080b70751fe88ad289c91dfcd3c3c61ce1e33f4146f03fc0dc77cde9b32b51c75fc000000000000000000000000000000000082bc6c7ff7924b88b4a6cda58295d050bbe8087670bc6036b5bad53247b803306ea596ee0689d805e7b4de65a634eeb0000000000000000000000000000000010a79825c716dce1572e6e8886f1c698d730327f195871db7a9b6690e9ba1dc38e8d92b34ee32b33705edc021f42349184bf139cc0b6ac94697b7dc278063a74e478d47528da3f84f55fb0adfd851d09000000000000000000000000000000000cbd4ac75eb0928f366d3b99e05799bf3d9dbf187e557f211af5ae514101961ba750e81ede07cb5a14c49884a9b55b980000000000000000000000000000000004fdb80f44f89e6cb44b950735703653152466f30a410109a24b555c4e6907b2c1d4f54c9c0d2b7954002a74f1b65e23d19d9496e7ebca44354d5c6e1f6b8211eb06ca23a6444c307f92f5bc6dcc2dbe0000000000000000000000000000000019a41f73feae98fd65e365912f5bc6c86142380b2633feaba440a6c635ce2bcf7f871f1f033f93f9f8668360da3898090000000000000000000000000000000005bd1afda6a52adb550fd9bb59826bcf492cdaae8e9600e517d77832a8f3ae8777756421fe7640aae0bf07518ff695a66940e3509e1fb090fa787fdf633a74380cd5de722678826224641e46a6e920df000000000000000000000000000000000ce2a96c1ac3e2cd01ee4a20258436b62dfc2efb96a7148cf887c25d635aded48d18d38da7347abeaf72d73d613fafcd000000000000000000000000000000001773ef3bc5044059bdb5100430d4936f328cf876a48bd30784c8d3767a119bdbd5f1f97d78d52afadc42ebc85f912f0f7b27d21c1d6e06d9fba7b61fb87d364a7a6252c70b8ace2d3679ed87ce0fcf7e", + "Expected": "0000000000000000000000000000000013fcc5da42975bad80f3447a1ba05d9c6a51383921164ea3e93e983e24055f6398fe773b0e7a50d98568d49de36e295c00000000000000000000000000000000188455bd9ca4a0d3174cc8f0794d8c35356f697e62265d9e3d8e72bb2d1450caf5bf79dc5ba78a363a23d2ad58891165", + "Name": "matter_g1_multiexp_47", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000466047055d438bbdade1bbb00a7bca3ec0ce30b042e56afb9a25de1407d5937038e01e3c07595f46bd00cc8202d2200000000000000000000000000000000016bcc696716c21293b68d4f29d9cf675d447b726d579628417cc457043186d54f27c28b47d2e430041f9417ba323109dfacfcdf87c6ca0506b070abff83ce7812181c31729cc534497aa8dabe2433513000000000000000000000000000000000e8eb8fa4c0c2c86d0e571cd4708361e606c9fe789b60e099278d35d169424721bc789a6048774d739a5ceff56adc668000000000000000000000000000000000ddb7d2e6094f1940dc0f41509bd430163b220aeed1b8c0a2b90e37f791410a35d682b75223b32febc95500c7006f6626546fa692d9cd61895526282193c90148099e2afa54f7903a5431f932bd5fa06000000000000000000000000000000001080ce47aa1c38db9c71d1834c0b5d59676b0d938ba55a62daaf50911d23e286b3b813c7261bfc19e95f3bc8ea3b91fc000000000000000000000000000000000bebf539c3c03dd260d579aa853c28ae582b9c904ba2c56bb1239aebbfae10c05d9e33c8e1c2bf90553025d3279572fba9c1460c1cbb2a552e3452d5c5535868ee9c2952ec3fdb52dd826c16ae3d00bc000000000000000000000000000000000ba078b44f92e90fca4981c66e89c5490b34f92e4026d826c2076a995269e4d4fcab419a508b530793c465531a631ead0000000000000000000000000000000007c19bb972c27c00b5b1a8731ed7dc9af8270187cd26b1b9d65cbc96688fe2f0ae86ffe753a50b4500a46c01a75a93032c36204b6a005a64819b06804eb94c311d78977b557e7acfa82e147b4d6ec62f0000000000000000000000000000000009b70de2dbfe9af8ae771ad5bf0ff962c9f906a3637f992b08946c864b3d1dc996a2ff918ecb3c9648ef9188b15b624c00000000000000000000000000000000186a9f4c06ce9d5a969b959e4b17d4428393d02d0e7259fcbfab8898481bc97582ccd0e1d87d1735e28dde10a99b683e9160c5a553479a10996704c3eda8e57be88eaaf5d1efc8371e7e10d7d106e4810000000000000000000000000000000005b7dcbe86bb6e6b328325141c1da77f8af531bf1463bf3c8c94812784314fb13e457fa461c1c51aef0721c5d6ceb5e9000000000000000000000000000000000d9d1ac39a5ecd61670c1b0d061d93a198eca1d294d2e64c3f9e0a872e7c93212ce7835ae0a7fc2a42ab5c02192d70715e5a50e5dbabb7a56897935683f80a5b16dbef3c23461e241fbdfceea38e3ee2000000000000000000000000000000000741769993f2dcf5869b8153bbbff2e6e5d429fd2d862bdd590fc50a8f186bfb105f5d57f736b07d919bf0dff0cf4094000000000000000000000000000000001917c91f954f68c6406d6dc716dacf729a8c4a0de73e04cf0ce554eac40d750fd25b289127023af299c6f63372c01b7d4a95b293daa2761cc456b9667517f499c4d9eb9eb1d82237e7a7819b5d44f7a2000000000000000000000000000000000bb29ce10d6e571e62611364143e08a60eee5ccb13dcb77f17fde5829ae5fc025b309c98f892aec1fdedb7d1920e658c000000000000000000000000000000000ab6fe2dd5eb1b90f15a3632749c351ec871038f0550dc54cf1bf2575f80ecb8a3c0d3c1a333bdd803e22fb6bd3e64bc5e22ef32d111261dfcb5a2e8d23c8d920f013bd9602bbef45e6d4e0909abdef20000000000000000000000000000000004fe17772d4205d7b1d0cce0db3404119707893e20f6b27138918d2cb0e4de49cd5df1258103c1fac903c1a443cb62530000000000000000000000000000000014d8246911dc40ecea823f02c0e17e690a5f66848223218dd1735cadca1a0ae89d7afbdc727158257d2cb248323c55316e687c0ac8fab70de2416642afa1553bb38183d2914050602874491057f78786000000000000000000000000000000000784a1b282846404f71227064ff1a97766781900136d4b7ac73bab19cf8e03b449ddd35360fdb6dcdac80e335ac5cd1600000000000000000000000000000000074fc137d93decad1cbd4b753fe9ef3b8b3445c12e358450ff494a1fbd6e192ad7a4812358d85f6e3cefedea3aadaac6428f1a27ea15135f044643dc36a3f9c2b4446a3136bb11f696b0a430a7454b3f000000000000000000000000000000001661e6d386aa6516f08decbbac9c1c3411ae9cae62b05037dd626a2e2273eece64615c54a4d73e09814d497067f9e6e30000000000000000000000000000000007543030f8995237f65cec9b69b0356a29133d8be27b5f79aea580955042242c2bc1c6a01539b6b55ec9af96db60b394ae21ad8a6c9d75b51133e81ec34d66ca70a52529c5c3a2307b0e8d6f1c5e7d9700000000000000000000000000000000148597902b3ffe4ba8a5f9012e699a3cf189f58275557d98d132b72d3c34e5faa0953ec8cb10b0228a23803b70836e200000000000000000000000000000000008741bbe372a1e5a697e7059a9e80de8a012b0cc7b12c14bea098c16cfea154204d4e27753f1a8fae0e618223da14fdd88a23b118179ee2c34ad030993a2d2d70375311b95254c44254a32508abcb612000000000000000000000000000000000cfbbd4632e8998ba59721686310ec115b98ef470c3c4bbe427495d6d95d06ec6180e64b509c4c06e32862e17939a2cf00000000000000000000000000000000060042078794f4539a9b3e3127632c3c8b46322a669605d1774e995c5d82287d3d9be51690b4b5df6de8d55b20941dc630eac099ededf0087275d1af828bbf79ef7fb0e77179a068f2ebfe4c749a98c90000000000000000000000000000000007e67da2f320e1ef0d3afbd50634aff753a2e2104ddc03244a0c79eeb117ed1beb7316f7c5e116bbde47c53d47e725b3000000000000000000000000000000000b5399ef864331db729724870b431d8dcd8d3279cd00a59de2fdc15bbdff2035794025edafa21fce97836e93b41aae067e8dcbf708682225fe3f71b7a687da23de5ed188e40585be05533580121325770000000000000000000000000000000014bd7f0effe81cb626f92422ae7900bafa7f4c2d51d4ee6926eff68b60c7f41e667a57bb0506f7c36d3549cf154f6cf300000000000000000000000000000000050aecd688a63075feacfd29d1ab6430176dbc5ba6d406636a6650427a9e0b0d51df51d8dca27665b0b6c60e08d5b087532cd42a9b698a2c2d22b1a620a7ec60daa9d1eb8ac36894603be7bb9b5e37be0000000000000000000000000000000009252c5f7f7f3b36c5dd32991641c9f8244579960fd2d07a8641b82c5cb1768a36f4e5ad623319ef3f7d0c670fee58430000000000000000000000000000000018e432d33e506ce42bf3d873e36ed6ede0c9de44203cdd453cf91c42fc2ddaadaadd2e3870c5f5c171cfe76862ce44dc3ccd5e19892765e549a63238e664c732af781fddea558a117cb927bc4a1aceb5", + "Expected": "0000000000000000000000000000000008b38b298fe2dfaed042b35ce73c76ece7537fe5181ce647de756349a8dc48d3296e243fc7613abb10e254e2b0197d7a0000000000000000000000000000000018d59a69b976b1bacdffbea68d523da3fd0d2910db0a509760bce56bcba36a55fbfe11cdc14cad50e6951ffdabf97a64", + "Name": "matter_g1_multiexp_48", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005d929298c9361736ef5f7c83b6a851c344d72b7bb92a8201d629bf9bc1e66e4db6dc9df64ffb41a11eeeba10be52ec40000000000000000000000000000000007962e1b1b823b770b44eab51b3b84fd7e0e57a2a3f7eb1ad9c3ab02677376cee08b0a2977552a0f9399584b576f17f148da17551b2369b723bf932173a9167663f8389d2461b763d6a061df78d7ff1c0000000000000000000000000000000013283d9b3cb5ca4c3a39517adf466d2b7fc90f4895a24effca7ebaee4df8735c69993c7cf2483c3480cd2df4be04366f000000000000000000000000000000000fc94dee82225161feb78f2a7c951c41f43ff3c1109a824b56c01854688feb86e240c9fa48534809354e74ca8360cda4def52379c8b9e7c24d971c3456b85b51a63ab03761ec66c8dfac1018833e05940000000000000000000000000000000000fb727cd02c5f69af676f9cfa68cc4363cbfe5343e304ff5180ed1f57e6928fb808539276feeb1e492ae2455f65de0b00000000000000000000000000000000082d09bb2e1f1585933e1b9076711803e71c2236ff78e83f5dae6ad492c1d723120ef64eb25c8e91486d102c2297c9e5b2225be6985b9c8fa59a2890da56427612a4334937761e24a33d37f0f951a794000000000000000000000000000000000882f34897651c59970934848ba13e815710b4952dc0ee1abd0e04ed82ab399ccfb16ec966d010eab51e5fe514af91ae0000000000000000000000000000000017a32754dbdae7a2541eddba29cb8ca85a0c6d189f9bbbfa24d477e9f1ec2ab8f7dd2a5aa7a596d3a2af916ecfbdb2c2a64ce8ad619276bc7a00cb49faf6cc84b917ae6b37654363f5719a727a220291000000000000000000000000000000000db9ec112ddb4a9c6e371440d0c79bf043c5a3c6c6bd613dc031ce9b81b49a32b006a165ef29a8e05f019b76b3cf520c0000000000000000000000000000000002485dbc3c3e2aeafcf18dfecd842ec48b2e79d3bf7936917df759a9ca2e25fc3f137eb88a701f5fee1ccbb06d5cb08c0b891d638d7e76e0dcb230b1f9a7c3b35b35193c43a6c86f345f5a5bc9c708f500000000000000000000000000000000100d1fb78f53423c8cd60de5d39a004ee1c99b2fdf6847a62c73c33bb3d317ec06afd6424359481f8ff2d0730cfc9095000000000000000000000000000000000211cda7659f1e848c931ba1f65ca9c6021067ca01cdc8e87f5c742006f6dae39645553b69a4ae00ab6eca16afd0bda7571175eb91888222085fc2dfe0f4401ed6a1fc5df86c0c6b8e44fba6454305bf00000000000000000000000000000000004b07c2cb575e2499e333140e48446fdaa00368a74b87e607e285781b42eec39d1578d2e34701ed28488f160e9e50680000000000000000000000000000000001c2d66d28031aa91f6aacfdd80d222b4a0bc699a9b58b7f5d68bb9ed0a297ffbec3a6ba968f225732879f2f9907ca3954c9e7f7ca14c66b8431e25e6eddb4f20507d03bf124eb607957ca2f43a0c17b000000000000000000000000000000000bfa7f8b7783780a2b0f5b9f1b10da77cb5904618b8c8a1d062fc94aedb0fce090d8c4e65515c0d05a471f2261d0063c000000000000000000000000000000000f45747e4b0bffddaa13c7e03b6930ec474735b6a0e779d3722330828ca26a07bb731a5d4884ed3eecc710356a00a897000579e1ad83015c8f02a9db5c38d0220368a80b309ee45bb952cac824817b6b000000000000000000000000000000001245cf167d097de0753d29ce6018b7777b1befe43b5709e8217b9f380d958e3e9298347673dce432e57338b313e84950000000000000000000000000000000000d697bf8ec405e252588e3ef6d979bfa60ba174da03266c3a2efdac176c1ec1341d737b16d53bda6ddf8be6e1f433ff6909a45c8b78350e3ca21697e9f56d5fc8fc2a01817b78a7f5daeda487768ed1e000000000000000000000000000000000152d7f1e704619bbac7e594be6e105120b76d9bbc711ea40beb1063c2996fad70bc8f77a915411f3601e75af2f2059b000000000000000000000000000000001622a6467c13c534ff1fabaee8b29452d689e7f9e118e050cb91328b8078ef97fc82321b80d28d0c02f2b0a7b66f04a36d4e2277da617f0ad530b6209df6264e1288122b1b4d92da04fe334be17bd8320000000000000000000000000000000001c118fddc8df59e2d4ef9865d69cc044fcf870f296b009a2a471b1f74692f99e392b455b8b03d079b1f39b09e5fb720000000000000000000000000000000000032c05dc9eef5b55857956919f7a51b5f5225a45ca12d80208231304e66c77b24707a934cb9814108b44427e658d143dcba6bed6b8c42240c01df5fa0ea81dd96168c6d98ee9d5d4653edfa5172eb280000000000000000000000000000000012da4a2c89951f85757c59a2630bde25c30af955448c972d256f1a6a259793c7b2bdc3f8734f4e312897cb6a3550800d00000000000000000000000000000000199939ffbde7b14b5f23eef23d4a660bf3f561aed38205e68d091ddef9679df9230a59e8cb03212df2e99788fa2595bc23d168e01657e5c2da89a27e513bcbc6620b8c6082bd39880619bfe2b3a7317d0000000000000000000000000000000017a61df7581a341f21da2d1768fb41bb89847c88b2a0d7b61aa3275e376a46672dcb919eebf20b242ce83493c83335680000000000000000000000000000000013edc932b7755115f530d1d044c4afe71807a6b9810f555432910b54b0fef441b4618652fc4bc2ac5b789a75d2d276aa2a76fafc5e8e33852bbeb7ab8229305be84f5474427e0c6d2ed35c7bfe99faa1000000000000000000000000000000000c73683f328a0aa252c10bc3fae9e786ccf183f1b606a4596094fbe10630d4418a527509c93d23e62dba263d86f88951000000000000000000000000000000000260c9dd70a1ddb422491a20293c18e4749427cbe9841aaa3370533b6e5d6fcf882f8bd68b7161434bcd5060716fdb97e3c7e4e95167faed1391e269785918a207490c6d186bf2537c02e52e414d564e000000000000000000000000000000000bad0e395f46f714ac9d40865d588c06adb54b12439bb408a9d546b0a8ba5b3098c242cf5c17d1e40dcf7b384e81b444000000000000000000000000000000000e595304cd73c8c2a0bd1dff70e89edfab22be69bafa16877ecf669ab1e1160c9719952bb6103f31f2ff028cae0f0ea45d335e3d96a9b25be7f3916e92fffd75abeef5b91a1ec577ced52a96f6a9b10c0000000000000000000000000000000011f0037c9bc2bf953a3eb7d8a0a3c8d991e6eaa5f13dc1978a31f0eddb550432c70aad096cc0b904ee540e5d2d1ee4730000000000000000000000000000000004f8616cc7476fd0b95f7bbb7fbcda389aab60a88ffba3c819868f7ed6cf08e7c0c7da0958bcd957e0429b9a7fe120bafa563a70780837ffcf9a84456f0b4f6eda0d60cce6a8538ba10960eaf17362fc", + "Expected": "000000000000000000000000000000000e87aa419d686c55b1ed8ebf6e48d8f218d7198edcbc7db0dc3bb9581bb8dbf891dc383f27717536dc5fb7265ce1ffd8000000000000000000000000000000000a00646bc197307a7416aa9e35db9ce7eb81d762a065cf8d2e07f6470e424d7d59021be049b36eba2e44750a902f3124", + "Name": "matter_g1_multiexp_49", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005d5e69a8876b82b1de0b2d2a0d808c739b361d1cadf3ebc9c6096afbc19169f237774be6882caeffe47e86e3b8a33710000000000000000000000000000000017bf0fa8c247af0078d486e1961577d7977d0b4258ada3e158822d995188ee374d900c4d8b1ef4887fb03d8f6a4bf1776e2ee781da12b984e7a08730a60f50c41cdd7c7c8b3f1f30f721923ddc34fb79000000000000000000000000000000000e6ee0b0c7bb7c3f62284efda6bdbaf38bb5a72b4435b76928c5640fedbf9d4144358a20629403359fef5bcb99a795eb000000000000000000000000000000000e72324fb2decb0b0c7fa18061a41bddd6e2c55f901554de9be8ac7b2263631fee8bc77773318f6b13b2db7eb1ad0f3cd51e0b65be993ddd2892ab8f47eab78352b177be4b3fb68f47c65f5c59fa866000000000000000000000000000000000102df0d54108666e7aa611fec5c09b72d269c72e6fcee7787ece5f33153a3999ba5f22adfafa461aeda64e113b795dbc000000000000000000000000000000000b77ab3de0a2d91b8c24a47a27fbc5b2281cea40d87872010b94e895d9589880385f82ff53fad55af4f4e462df1c9ef6fed4dd284df98923bfc3c41496d6e64a10815a8c474275e0cdbc9ed26e92b0ae0000000000000000000000000000000018e8fa3c5bd83b51b1af197f0dee78e5c912c742df0cae1b59ac44fb2b903ad5ee1fe9750a034d18141f09a2b8298f850000000000000000000000000000000001526a80337eb938420cf2e825e5bcf3152e90e448ae3b40ee61929117d35f694eb5ce9133b2cc664c520fa9da8ed65a7c36ec97c1eafc8a20a772fb7887d75568047ea32458b9ce74ad9ca0581299490000000000000000000000000000000007f11b03e06ca74a35cf702f19fe29facac855d7f5adac59bbb8c058b1eff7d4748c886eb08600e0484aa976269e5d0c0000000000000000000000000000000010a5b0f723371690f6ccc5fb346874e58071167947d45e54f9d5edd035f2d68b4ef9e301f26ef671634121ae6145e44e41b2c0354d2f7d92b05043f193b718d78b457ae76e19069c8e1c2b77d7999d65000000000000000000000000000000000db2e2ef96ea61075e063629eb031235543e8f39f012fd006e143eb137524976c5a81eb26996a4ec3619a7fda051df6d0000000000000000000000000000000015d39e93da2b392dec64c58e73740376552e69caf87ce9162801466e75dd1e25b7d5762099112b21411e8d8bc18806fe5615370a76bb0a5f64d61b97bdb045b9669f6a0b7644b101d21a50483d8b04dc000000000000000000000000000000000e048ef3ee3bf3c41cc10b89b7d0f8b3f27c89fa0ab25542653155dfb7f8a7e8488a737bf2f6dab558910c9ae98aea33000000000000000000000000000000001357eb0945e2c4933b358970184a21b3369dd7a43a88841e94c3a388681f338770fdc3a32862c3a52eb251721b2979e9bcc38cfd3c6bdd32ed1d583f2bd14e175d61448c627f195559b751aab1ecf7cb000000000000000000000000000000000c6321bbc74b6b3a9f0c9470461c80b1713a5092871dc54dd022d3ade73845852315b3e85b53b74ce2b31d1780939d13000000000000000000000000000000000cdef7351c2923faedb211e79a44e0e02ebceb8103cec2ed7541a54bfafe3967791edbeb6d4b0da1ee37b9a5d77ac8f194c41471a2e4edf0f688c2f032036d41ef5f8a966871dd099dcdbced8b37e1c4000000000000000000000000000000000b925015af89d42f155eb1f5104db1128faa23101fb9bc1a9757266a2717d50e908c64c502a8d19bb1e8c01dad554e41000000000000000000000000000000000fc8c5cbacca685c24188e8f936637c7c8010f6126e9b9b49e7d38191af1246c2a3cf7ca45bce6f1e11c404919da61c3dd297b192f1c907914ef949fd27a5ea5659aab659b83239c4433f7a4e24529f20000000000000000000000000000000013fa1374d37396bc60386d07a441a7d21fb808e3b2ea0c39ca78a6dd70c473a8feb972e2981e50cab6288dd80c40c06a000000000000000000000000000000000f35c2a2897b35cd7417aac29ade18f86d56ba24848aed78a31513d5115bd964ac6711c5f71736490195bd97d2d5b507d30fdb174a3f5c06b78cbaee5b6e7a4c90551083d78c5164de6bb45ee5de23c1000000000000000000000000000000000799d71ab5145a8a4726cc5567d99b344971eb8bd6248e41aae02bacc358f967475f64169e1828a66905e4373cf5c9670000000000000000000000000000000017c680c55af98789584e073c3caf32373f58bea6ef7f839f1d5c39e512058360efe80a884ef5822bd5fee34869d028d5aafc42f7fe6854866cb954367fa65c8072bd1b60173a2d45077421d6e25f2bb3000000000000000000000000000000000b4be422e3d3e96f6a6821c55bd2a37ba57de1bb59c8f4855b1f4b6906259de6be1c1be40523d5370ccc426b89478a350000000000000000000000000000000019212f598150b576c17c32a8f374db52c19431d7a60b99379f570189b3fa15edc75b807adabbed712268087cd9b89a8a106da5f98d5e7cd9f4a1c8d6e50ea2236c2abdf1e08a0eca54555a59bcadbc6a0000000000000000000000000000000009df46395e64ce38bc79acee751484ce1bac53c5e5233d3545df2ec776440e3f5b04239d6de10bdb086aa3c462fc6e820000000000000000000000000000000009a5c816b2abdcca7a916b1eb015b3d1c01f766e01264b5139e5a34a82a874c1efa8ef097d23b9e9441916a2f5bb17b4c971deeba2f757970bcd4f5548a2767bd6c43e63f4c5fc4b157ef060a1f45aae000000000000000000000000000000000023537e0238470f4d513d56d4ef8e244e3d853b3b10a893928547675c6b2d409ef6bbfaa299a726eb472067c48f056c000000000000000000000000000000000b48f21e01e72bb6ec384a1e8ab35db6ca032e4476f37a3282214efe483b672c34989e6d5c99f69473eb19e472d984bea5262a021977dd79ab96606eb24a7c5ed650300dd68bc79f4b8378f58c6eed490000000000000000000000000000000013f1ad33a2016874de5265565049722929528a1c66b84c1876f4e4396f22fb2583d025c481d4d9aa2877e0062e842d7c0000000000000000000000000000000008a11522b3e6982a4b46ab6f1f6b07d33443780c914d4bcd50ef7ebcbec6ad944ab88b82640971e890a363dd92c71531083b3720c20044fa41712039b6e9e776197391ef393c0935a0e9990fbc1b7a460000000000000000000000000000000019dfc9ca394e105c6ad51b130aab8a043ee58f26a0d8efa5beee59eb1543c2c3d33abb5cf2b23b0882a409d32f845b1400000000000000000000000000000000143e219edb6fad7dbd64e6aa82fafd05ed92bb46e526468cc3bc0d60c89319d3fa2032b5a617691ca2f136c9f7904225d6f846581848f5dbb9e8d220b881d0327c4f3f5d4b79fb2c4dcbdb9bcf44b02d", + "Expected": "00000000000000000000000000000000027cfeeac9c1606a0942a95068faed1405a5cc9b5e631c25a0010ea14cae5b7a51b406fd0b8a9d9ea7be9a8c0f76c86c00000000000000000000000000000000106c07dd0d4e6f44fb1c3451942bf10060d16980f50b63005936e35b5add71e1352c48d1048e5d77cda79a09f86ff213", + "Name": "matter_g1_multiexp_50", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000065d5c6ad252823540ff4a4639cd42443a3cccd808d40d8bd71379ef939b47c3027ba5593167b4dae93b62b2bd498f910000000000000000000000000000000012623162c0f025b16dfc1c7e5fa02f8af7b7fb0f2d42d6fa0fb01af45621f00faa4ed6da6f33c609448bc027cd6a4fd367c44f7c8513472b51f96d526422bac628aad4c40c521cd7cf9e86eaf92838fd0000000000000000000000000000000008b3c274f83f49cada0a1bbf0f56f6fe0f8a0873cf13efa42ff65dd6fda913102c2034a31a1a92cd154210d27b0120450000000000000000000000000000000001521dda1b2c9b42d7dc9822c64bec62e71c629d61e796165d9a18f8ab44056914fe5c8809f21663bfc70e310ddf5d952d6f95d4b6216e4226f78e4fa5011c9becf98fe45a17dfd740fdd0ef36d8ba9400000000000000000000000000000000109f72caac5abd41a228bd82b6649fab639e4d22cb3a9a060ff7577de61f33d32217a73014f5cc2c2a76582a6b751ae200000000000000000000000000000000059d0e9e64b10cefe03daa146c00c5040381ce6ac63886b5fcf19a0555a22a395a0cbe8b49c510c9bb7a308813fb482958c25d36216b811ee42d0ba629ab7a0f9ce7edd7234620c28e37bb3df3f042e70000000000000000000000000000000001c5e132707520c525045a08626e014a84d8da23dc27b6320d5915e328c3bb0df3618cbd7ace26834920d4a8757368050000000000000000000000000000000008f5127405631bed295596639ec6091e97f16ce5a3062831102be951aec98c9ad34721489f65e731026029ae3eb13aaa50a5c6bb6b87fbe5ebfb0d182d425ee173973c6f2085c556b0fe60219b9f3c3200000000000000000000000000000000146124bfbb9a3d253670be419f80998382895ad6237138044c55764f0d6fc07da5b70cbe17af3ad0c4b0dbe33f869e490000000000000000000000000000000011cadf640e78298347115e6110d3ed63dcbd251c48d3e21cfba4bd6859b0310041e67d212b54e63be6d68d2e7fccd83b3b4bdeaf6643ed159f4a3e23c33ac486b33e1edbc5a097a47a6c2c753e5299d20000000000000000000000000000000012ab7e51b87512007e1baf2f3c3473cebb553bc2ea3d3146358688ea3167817a449ab9a7e0b090e00f47846da7f46340000000000000000000000000000000000702c1e0df68bee2666abb90bd593a17a6f9dad02a7d66102add9f3a525a1b4f1fefa3abe262852fd5ca357d2e1f02fd1d18596bc392dd0b71e1216bbb20a0e5e2559a46789c36a146cb78c5aa8e39210000000000000000000000000000000014635c8b9cacbe976733bcb1245eea410008082f240cc8d8246200abc0eeb6b7444f38da3ad93b1e029b06cbb12d42f7000000000000000000000000000000000d9aa00397e1799a82d73040122515b98be82052b784a4b385417f6e260e555c7c0c48a32ca1fb28224f75f887fa4bf86fb3669c0789ba6a5b00f14c14fe2edd15d37a742c9e36cae9ac010e632d75a40000000000000000000000000000000009a0efefb9daaaba4b2beabf6c381c27df7c32d4021a4d722118886405414837cde5c55933de23ff6769a0a42933bdd700000000000000000000000000000000101c9941d98dc8a146a75f2fa48a8650b25ae8f6d943323b1c10360cfdcbebe220494660f4d6f7921fea006942e122ac06c2988dd6b8e9aa116eea4e1f63dacf100019844d37d163c047567e8e118862000000000000000000000000000000000e5b403702a229f36c9b83bab9335cbb4e39fe8f5e9a5aa4bace70361dd05c87ae356a40720c4a8214765d028cd161ec0000000000000000000000000000000006e447c61bce31b4843530e504fa1324657eba731a272ddae680c202a7d017ffdf0ad0656dc0984a1fa297f5e32c2740fbf8322f706b1972f73fe4e22a3dad29c4ede09163561b2810cfc3eb2ffbc7ab00000000000000000000000000000000135fb22eca115779ad1295f8c7f149a6eb4fe046df664ddaee976a15e11a7a59db5e2c44b4a82c8ca1d17c0043f41ee0000000000000000000000000000000000fd9c1dceb20e85ef80bc9ee44e483cd0e2714882734a561ebbd0982d6d08e9c41484ee99790c20e83d051dad0a1b1e04a46618381ba6b991b2edfdeafa67aef1cfea066fbffdba24db25385963326bf00000000000000000000000000000000040f65cac81c01f04db3e331659d6bbaac8fa01581b1bbfa62891c1bc95a67182d254650019dfa3171e16ce37deef29a000000000000000000000000000000000afd5e22abd5d5cf78764262a91aadcb8b807b2aafecb2aa3d3ba5a187304208e212e5df46a4dc48d6150a733075bbaacd05fce871e4ff11e7a4e834061c65a0aab7bfa8a0128d460a493337c6e63ebf00000000000000000000000000000000051046cbe6862c5e37cd2f3c14dfc2825d5c32de69b40f29140fd31405615edf6c116d384bdf1552a33fb00c6c65cd97000000000000000000000000000000000a61a19fdfc994105f03aa3e1b907f5177409664b2e50243cf7e0e6e7e74c7bfce582929e5670a351b3d7b4034f101ffaba9e37ae0dbb733af820743d8e307fc02a3ce9b40032b16d0e9466903de9caa0000000000000000000000000000000013b76183fa2e01d10a3ecea5be65ffbcb04724ed30e4655e26a7ac94d5861f0f308b7d4577789d2f4892eb89202d84100000000000000000000000000000000012c3fbed77d9c37c47c838899aaea0fb6585eec54801c3ff2b486086e33040aca6baf6192c33af59f7db1d489ddf7d086ef151662cba4952416eaadebfe5e0fa0ca1d31380e1540c2d5e0181af9e317c00000000000000000000000000000000195c1bf8dc0114a472cb4daa31be44f22a162d22f2968b7909374fbc4d0883614d2911475cc3ba242844ef1c046885e70000000000000000000000000000000000d03e5bc3acdd01d174e1d2308e3f1ff3f103db8e2804210da44c47229bd983ac127295558dc5560c0fb2ea34def196f0a3851bd52ca52919dfd21efa6efc56f6dd5060ad969360b1a731e8f38f0f5d0000000000000000000000000000000001261cc24d5e69fe8a7747fce45086499ad54f7c138fe76fa665517c58e475683c5a219df303810745dc554fa3c096f300000000000000000000000000000000122fc4c068c079827635d29e944366516c1d7cdb1ff62968d847f4882da8a4919b59e57690f6e0f6aaf083af0a04b2ca32b41960417047a2258b6e9e228f3cc1130b296cafbb75f58731a81fcfe8c83a00000000000000000000000000000000050b5493fdadda15e15b2ad6104274da831753b1cd247f1dacffb6f896b9db7190bfae2ca202907d36b979b668540ea400000000000000000000000000000000141245d4556c7f1032d0ccd606e3a2d3338ad753fd7d0a3c1b8ab38e94d8618e85c22a269428537abe003f8de89f2c1171a6f7f091a6a21dbfffcec2eecaa22d05252b60bf91b56811a833dde3fcfde6", + "Expected": "0000000000000000000000000000000008bfa9c347d937e2ff2d77ce7127b1af4e7adad5f1aa6d71c6226b64c62c955fb0dd0e36a5e87472d6979b656c8a740e00000000000000000000000000000000032de435000391e441ecb7e777741fc72f4676f64cfaca6fadf030e12ea6374a7fa988c443a38595def0b434b185c75a", + "Name": "matter_g1_multiexp_51", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d0296528c7b2516ea73cf14c5625a4296c311fc2e09722f3b381279da52ba9482e43d3fdc1694b96c3f62b7d98d6951000000000000000000000000000000000da2aaba37d0955c5fcf31152926f2fb345deba744241bf66511da5f4ad9fab8a1cffa270c4e838c39b34bc28fbc08b02e56b63fc6ba87cf021c2f92baec248756ddae0a4f070df840db281283a4c9b200000000000000000000000000000000175c976baf0205ee7326c84c49cbd2d7c3db91d1ec92d87cca896ea09a7cfe4ef8ca45873f86e28afc4b525356a68cba000000000000000000000000000000000c442d3edb8b614407e0d138417f8a6c028b29dc1beb5825c928dff3a08820c5a8ed5de643068bf4d239bbcc2dcd0b7612a50af55f47fdaf176d4885e4910c54428c8ef433ea0cb1d009ea7778355947000000000000000000000000000000000f45bf893109177d3c336915c5e28c338ea28468cbe215ee6fc6f6e3c9aa9e0b7120586e42c5c087b55fb5789a4a9eb2000000000000000000000000000000000b6ad0cffaf555f081ec7a6fb354d6b20950fb6fee059f2f571430f86a7cb9996b5f655bc7cddd14f3f8ed37c7fd278889a012158b3c18e19471fca6d5aba5fd004a337d49ddef5db177da187c8cf1c8000000000000000000000000000000001944f2fa08357307df2271f4bb57cd07a998df56425f7b8563902aaa0330070ce260b6d86fc38a5c6a284788d9cc0ed700000000000000000000000000000000165d8134931f7a4cbeb5114a10e44172aa6a0c250989dbd88282f92fc238a8e1e21221b04b239cfc597e2b74700c626d27dd109f6df1d9851dae28bcb9e552c6b1e1b2dfb331aa955d3d0b6c4862253d000000000000000000000000000000000c7a02cbcc758fa7b1ea5fd30b3b88cdda7c8661b3712ba5bf924b441e056fb9bea804bbfa1850c21cad891ee253ff7100000000000000000000000000000000012202a151fcb86875b4dd2dbeafe5ca484b63408ba01440007164fa2a2b7ebbe9d7f738f382a010508408d26a57c566ca96785c1ab66cc5c8e434f59cc1ddf76bd78b6fe660f7cf74cfb79d7f2c7f840000000000000000000000000000000017d02a3ec6d45e9b49ddc8d1bdee168f71c32ba26d4de8c1bdb328cb4c46286328387aac8785eb5a7c71d0ed59810f4e000000000000000000000000000000000d23ee9c9fc914404ff46d0f6ee86984862e97a777ab516c2b84f5b5a7c1807d64e93fe57db53c7b95257fe46a7a15495aabd1fba36142bd768339e091b15b7f5b4ea609b57947a7187c498bd9833c2900000000000000000000000000000000040ca6ea6cae1be17996106cacbc5d9f1962203fd25917dec2c053816f3200b9853b218a07db690d8261ae3cc85679bc00000000000000000000000000000000097e8f4b5a24b010382888ebd7ab7cb71f471bca00c1499486cfbf1bc5ba6af169ac27e1ed8cf31b5d9600361ad13663fbe608fefa5472c7d1611abfa402d2eddb1e54542f45d4012db8ac6d1e5016100000000000000000000000000000000016f95e3e24941c2745c009437c1b2f5ebf690c9c76e269f877bbf73ddc6b15c6132d424c26a3c7bdd9c5302dcbab171f000000000000000000000000000000000cfca2fd001c0da52f231a60288b22a134c7e16aac8745129c351dd96fa37b72a9ef3d93d5e8e45cb5fab9e73ff188e128d57066cce439d8d0385f647ed5e9b29e8fd0528c1ed8455f37dcd81f4b6224000000000000000000000000000000000e2bdbc906c10b04c5fc1e867af43bea7ca43cdbc43cc3574a47b2b0670716a92fd863d4f423f3392ec8849e74850eb9000000000000000000000000000000000ae76847a2524be3a04bf85e096a1ca4cd3674459698fe326db2d71799c8906022e15bcadfbc9ddcd43dbee3443842a81208d8d328014a6b2c8b2b9edc70589cdd63d38f4e70abb41cff1b7693bf9a2900000000000000000000000000000000035d66b8b8b64bb0d3d1ba6bc1bd34c326ce6abac3a97188f82be38d1756f14a63bfedd531d5e19813b668012f77763300000000000000000000000000000000060851234e4cfa8c168db199bea8cbc337e685b565a6faf67e07c463632a6a163a2d22acf9fc6bc6a1f7ead5d288fcccd3a2044ed4f938c17684413625bdd281f685abea2e375bece77c03d697c82cc20000000000000000000000000000000010e398f6c9ded2fef3cd95cbef681c5335a1e9d08c05dc05b6391f65941cb3a79df9e1cc4ebd3fce82d36cc628b7f65c0000000000000000000000000000000016dede30728c57650952e9425b6da1ec8ee5702e783c69936eaf6857f199bd9ffae569db3cbd61483d48188633fef7ed7fd81e27a577b5e79929614c069d6d52146a6183822d25cf1ef84d8afcc1f6b40000000000000000000000000000000005eb3a914a78b4bb3041a32397bdba3edf6943ed474ac8efbf9c84a6cdae5d65a8f55ce4ad141b846f1bcb5df1206417000000000000000000000000000000000c20828a5d8abc2c8f72809348e770649bdf4bc0991f45979501f31d9f31e028731a8ccf07f0cc51bf8b59632897c540c5d47ce35d4ede84a83c9860322f582ec00c872b4b035d5d340981fc29884f1300000000000000000000000000000000122cf863d9ddfdc627a0993dc7ca5810e84ab254ff8147a220d436043c0a695b0cceaa374842c335c14b6ebb273472d800000000000000000000000000000000150fc0b14e30ee797e3b9202533c681ca9e6b1b43347cfa11da59ceab439c9e5cbc038a50917cd9167a0fd591d8175e484ae256d47de2d49b1e755cb0e972f3b614f3e7ba779c65ce175ca3811021a7f0000000000000000000000000000000002ec5aa74588f6a7fd8076b9a846ff3542543dc7a3c798c423326eb06ef92edb8c35583785cfff21f903f08f692d6293000000000000000000000000000000000df140c1539cd3d94b5f9d0aafc38294d1738c5b3c1880d8864e83909b152de0a469742cd31e5e8f5838ad793ea32649a09d0136d4dbb3abfabcac55db48b1ce302067f413283fc1a21744f1c16ef7b5000000000000000000000000000000000a440f227be209dd1bb816a4dd8c1abbdbd03d97c243ac6e48c4efcabef4d7a4b5bf65ea7bea6f4a1da985bbb9fac626000000000000000000000000000000001431a99e1243e57054d2b43217286b35bbf37afff72b163ad40dd4ca92439f4b513284551b0fb137f968f9f59a540cac650a6fba1a5eace6b455ee780ff266c324f49801832640856a80098f0eed0b7b000000000000000000000000000000000b99ae325f1fcf4f3c83f251183871d1b6048a43d15da80650e0b5c1b671031cc9af63a478b5939210356c4c2dcc7aa1000000000000000000000000000000001382d6f0550aad61dccb47a66d004ab3801445d55dd320a6ccf03577b1c1c915022a955e7f3fccbbdd20e4175bd0ae38282cb1f8f6d6dd81e7c49176503a76837a96d7f2b084d29d11dd9c6548cf0a57", + "Expected": "000000000000000000000000000000000c62c70aac1893222d967bde4fdffc565cc65fe29387825224b8571367ae8fa857b63c32033faa564f6e12d409b5cc060000000000000000000000000000000015cb57fcbc876f5aeca01d90d55ea777aa1421547e8aff0de69fe5527c9a575f9cecd1235a37648c7509d9bebb4e6800", + "Name": "matter_g1_multiexp_52", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000123fa54665de1ad1eb74d400f93b70f8502bd9386a164ef9ac7549b3693525e3fd077b2b2d8b15ab0c6cd5da30f8317800000000000000000000000000000000185921a0fb38ec1eb6804002b3bcbd4d4bc759885e9c1fafe275d51840434382df783518ce768ae40e736ad2ca8fc8803d7f8fbaa4225f3008649eebf42315785ccda2b9ce922170e606876881825cb9000000000000000000000000000000000eb30c8da4c7eb16d797f24b5d8e210dfaa68684939cad598518298c84214ad769f6a2634fc290c2c267c8f3a2872f020000000000000000000000000000000006452f211931b8d7ccd8777b2407e5cb073097ae9b309f1e95633f39d1a5a7f5843a6e87473b4b9c1bbfc17971108e3de71e6cb3d4e19f4a70a4465df6eec6326f558ee1cb99aa540ad2a73c363a133900000000000000000000000000000000162c0325ae75a81c92a8885f14e2f7b9b8bfb249fb9a352d0007cd8bdfce2d8024f1e4674614cd0afbded99472d547000000000000000000000000000000000010d8497a5f31cda80af22bfa6695b4e2c8fb5557ee74581a33fbd0cf8cb2e0b4ca3ecc42487cf957ea81a5388d9871fcbdb2b3c3b8e91540dc2724537526fd8c0d4b85d2cc20323d71fa5a4f61b3f12a0000000000000000000000000000000013270ce7a1b4abe3026d245df9b93061a435ed00d0464d8de14675247c7f2f1cbb6e21c8282e71d2fa28eca1e3f5863c000000000000000000000000000000000b87656d14cfe98c2d3f34b03de0b9f08207b00aaf6c5a4a6b9b4989744581772a2d6d1923c3d07b784853f7b2d789b9ef0c8574167a3bd3b794f057ed01865ea69c38023dbddb0afdc55dd9523ebab700000000000000000000000000000000067296630285ec7da7cfdeedd387d52d905ec39e183b87479c8f0fba967e840f8394cb518dba4f4b7d4e2cdc00ca62c3000000000000000000000000000000000ed41fe0f04e0c63f3fd7ec7560d24974fd06a1566e8f129f580251227cb9b7e10ed6e60c2e7449721d5332709f465973ccc75501428d3be8bb469ed0f2df7dec10e1d205e11a907cc30c4a76eee3cc00000000000000000000000000000000006f7bbdc3c8fe2f7da9533a3f8a3c48c630d6cf567c75dcf89e13852f7a8691e2625ca24517ad3b59ed3513f7d3b4fb20000000000000000000000000000000000a2e63715ec49b06a78e014b98effbb03f99ce61b464c66108cf18ea49def3e1f035a8b88f37b453b31357d2a2a48f4e5e403f555fbc800f1342275f18a73dbb679bd31873ee87617090912a52d6a55000000000000000000000000000000000a9e51eaf24d2d0fcb7f1dc7ad985ecd4da3ecd19fb75591467edb0f7fc7bcef67c1c272f39c31ef36bbc73d7ea6034d000000000000000000000000000000000332dedca239f4d1272db77dc388e07005d90f44311aa889b42e931d08c2669c3f4aeecd9052d3f2585b2a4e41c8abbf97ea57a38598204c15bf65e7270a175460510848540ca4004286f3ca09eb5926000000000000000000000000000000000c6b189ddc86e2d6722ebabc445190cf94bb4c54135aae2601c957e062d351d0c9fff19cbeb45cfc5dd05eb3543a660000000000000000000000000000000000133794839bae14fa041004f173506fff511526313da5a8f4e32c895751a22ecf01cfba564006037326187b899aed596ac54dd8cbe68d5151e4428d35ec2d5b5cc7f5e455207c0788a695c2d7fff67352000000000000000000000000000000000a15343698b916965009f1894c8b74a790d59bc39b7f0de01095275ec002c97c66e7a6a970b4b9091cdc54abdff1cdb800000000000000000000000000000000045f084e0a7c0014e58c9988e72e1861bdb4f962ff9869d444d5ba4094178d52f9c2aa511feb6e8717098cc1f09d49eb47ee5651c127d7c8ef65ec68fcd97d1dc228bffb5bf1278aed3eef8115a5ae72000000000000000000000000000000001656928ad3ee67675951e2d2ddd6a7d9c629a3148face6d1269f79c3d0699f95350e83a6ec20aa3be78a2794c3f250160000000000000000000000000000000001b8c9e4c818774dbd2416193e795a429a22881abc94ebd9a8b42bc4d7069a9778e4bdf7270180784d914bc6be99b41c14ab6a1d0d3f87e7c9df0c14b6fd2f9d0cd755d5fce5f40bdc8174790901549b0000000000000000000000000000000013d779138ab03fafee1e4bfa2a290c4f20d2b57854a5133cf5ad7817bd32bbf2945a02b4fd5c8489e704e60ee937f962000000000000000000000000000000000aa058528a4f9bb583295ace843feac4dbce24a22ea6bf412be019f590c621bdfc7562e8dd49afcc337cab474d9abd0129b12cff5a72f27e15032844fae50e3cabbe31a69568bc4b5cfa884f62e7e2040000000000000000000000000000000014f30fdaf2f81f9d941af33d53e2d9e3162f62f47c60164e9b5ea3a5cf3a681a80b66ebfea391331c231abc4341cb94b000000000000000000000000000000001854addff23c2f53a21a6d39c72f91ef0e8d9a6d6468f319200466f78854c41be3e914bf7f966f00e185b44108af30f092c1b10d980826351c3d193a0f54a7dd78a3995efb02fe5b4525fca8791b1c4f00000000000000000000000000000000188a1934a28c7571ee94f1aa5c161be611939e52156bff158170d5e12a6480e3b9d1528082cc2e537ae1734b1847f8f8000000000000000000000000000000001728b57eca86cc8fcd9dfc65a8f5f055d51d300d8781839d744a1b81a0233221cd353f642b3507703880eb0a33afa05c8f715f35fc967837facb515ebff3df502223c29e7089fe6d2e9120bd3ecfcd120000000000000000000000000000000006c99e6c8b554d748a3526da79e8a867efde15ec50ff62e43f691748996dc087dbc538cf65820ca065f3adb5884e2f0c000000000000000000000000000000000c577c42243b95b4a613c485026306513685cce294333b72388d6968019d04214ed4bbbd5b64bce78fc380115a4b067ca9e49fcb12c0b1e9bcdbda52e9852ee0e98fa0d43f7476b3d65ef5370c9460a3000000000000000000000000000000000d7b48e69a9807c6fc867f59c894d5bbfeeeacff500a3ad4528ed4848f5ce501baf8959f822c259b712236529dff0b0a000000000000000000000000000000000e7d7932084a0416a4bafe237c923d1390dc6662e7842829ab6747024378f284af07ccde9cf80042bec56e7429ab3acd80b0d6316c5d62d41fb0399256c5c46ebe2a12eaad835d2c7177bb7325e21d3b000000000000000000000000000000000a1f74acb627d1814ef90b2d756bf76383075134c1b34dc126094238eadebd780c1ab8a3d1f4d9566dbef1c706d931920000000000000000000000000000000009bf8c2fc78b1f7af25941bf429059e9f86b34a36ff865b33e918c8435a766d897df83005c54871ad0d3e82308e368501b96434f34fa3e00ee0cfe548a2d2ca29a848cf1c52f940685caa9a227e32a61", + "Expected": "000000000000000000000000000000000a912d7d352bdd182a8b431672b496ecbf18276da61d6a8eb066c41783b7cf3df287796b34b165db186e815c8847b3ea0000000000000000000000000000000002881de241ed8109f544f3a6262eac1aae69de7a7e9953812eede9e63a970225646f5c441b7de80106d53cb6dbb43f10", + "Name": "matter_g1_multiexp_53", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018896a4d84c1ec1a20e1b0e33f159de4d82b55b6d27d863ec7cbefc2d9c180beed2285aadb34d29ceea681689dab06ce0000000000000000000000000000000013398b5f6f2c0c9095af94796572d603de02d41c599e09d3e254b326fa1575e0c6a2b7263a196c5150440daffb0d60e810e0acc22c43080ab9cea11a60866feedd57664bbe6c3f0366beff177f6631850000000000000000000000000000000015b31d591dedde69dcfe9c23df11782c090c443e505d2edfa217121a1d51b6883d782917b2a082a41ce698ecd95ba95b00000000000000000000000000000000164b18eaf53165842e50112c4a8490b8246376b58bb6c188fc929160f49cb0b68ad2f13dbeac8466fca75e6f72a398b8cab0c230c354cbf1a3c13c23a36ae5f2d5d084d7aaeb427c580cb6b9bfd9df600000000000000000000000000000000012876e247618c76af5221a50780803ab64970fea8bdeefcdc1ef4c9a160718fbaed9dc6691502433295d54d4030ee157000000000000000000000000000000000cfd8dbbeecfd176cce05ca1663930be8cf3b300a287ed053e36f64618a14850a3e813582da1f54ac7e96ff61ae57c86290608899cce4b3d25f57519cc881eb748e9ee7e27f7b21d69f5d8ab3650c3e800000000000000000000000000000000085c5db53c4abe188f44f084bf17084d3ae409b753089636d3c528162c2816b9b9ef3c0c8c05e88189407d7ca95d40f9000000000000000000000000000000000015d9ab325a8ae365f173821829aa395db9211015903c08491375f82853d9084d8aa2e35c2634a296ba14b50e34c1feb71debbd9f3be5d6e65e837bd78605d5653fe63025c320cf49c035ae66d8ff570000000000000000000000000000000014bc3ba096662dc560e88ea6b7b4363c427d038fe85a49ab8d9d63524940f26106447ad6e3d7495ca562c98b64d445880000000000000000000000000000000018bf745fde497914d81d1e3ab96630f24f6ed27ebf1208f7a46ad9fb893a3f183982c0acfc001984de34f617841524f9250f62ee2c2972e751b36d95a578efd2fa5e0a2c1e29475a3cee48a28080cb0b0000000000000000000000000000000019b15da994067a017c3040830b5e5f7eb77ce0cf0674e96b209b80c54f1307cb04799624647fd1fb990c61092682ef730000000000000000000000000000000002248d31211c2a37df59a0a4ddb0cc7880dea316519ab7baf1c614b26e2673f03b00e387fd537aee442cfc94f734aad8ad08c3d2c36085212542427c1760c72f22838be5286402ef87403f816f4fec950000000000000000000000000000000003a499813ed2a3878ffc11d27dba4d55837d1114049a72444b6db0c8a7d23a53af765d66b5017695efa39bcf7d1c97ba00000000000000000000000000000000011fb1a989afe2b093fa2ae3c0405483bb1a52c21226acbdf2a52e2e5fd5f7404776551c2deee87f431ff39dfb031d716ffa16b6fc4cc9509a2b8d8434fa0f4f38b4cb4eb1bf7f545f9f43b9190cad890000000000000000000000000000000014540330ba54d2f16a9bdec93a0b7ccd58ecb44361c67f209d36d2a42b5d5a4f9b9dce0701ad0677d6d6ca83a256e8460000000000000000000000000000000001a64d5b128c07848ec579df1d26755e5d2f70cf123013ac249a4d188b0eb56cd74cb12f7de2db69b3a0f9f4ece2c4201271d29abc5f972809461a1afa5eb186dff5e28f20311a1d8416f8d54fc4b2d90000000000000000000000000000000017783e019baea183ee5d9e1f671a23108e403a22580f5c203dd6ff72dc0adaf802d031a236e72463e0fa2c5f7c6e68b300000000000000000000000000000000132d32bae3b92b7212dd7db16c87360274a409f46199f66e572bdb21c4af24af62758978e6d01af60f5fb87481d9f4f23ce55b3b32ad29dca1a0c99771fc8f7179851995d5eac804458edede9b8dbcd00000000000000000000000000000000000a625f252a8185bea7f1b73d1c7c9b1fc7f4ea5cdd017afbe9e56e7c12d58d893ddc387b7c2870f4a975b613bef0129000000000000000000000000000000000aff6dcf60f78bc908fc4c2466270065766792a05d8629fc7f5d2b61ce4882644947fcc3600d63bd5f49fea5574616bcc6fa7aeb016b3e3f599846af83f426b9ab85b6857f901c49554d03d27a390f5c0000000000000000000000000000000008ee6e9521f32feaa034b533c0b7c749f60d84adb53d6943d3974fb4b92ce3cb3f67fbf52fff27802c893cb97e587b930000000000000000000000000000000012000b50d1c9628f822c41d56b29e21f3f496f00bcf05edb234ffda56767bb33dfae736aa9fb9a84ccb6a0e21131c5887275a8d16c02389795d54ebdcb70a39fa885320d00cd4e5aa15967916e46c6150000000000000000000000000000000014d9d3051d073d24701f01631408b7dd1d37f0855baa64a13c493c15f7acf36da116595fb3d69dc386cc611c998f9ea9000000000000000000000000000000000b33438dc1f84da6ae50b1aa76fc52f5ba0e547fb15e8f655db9e0e26d6aed15c5cc4e48412d089d1ca6fb7a550f8eecdbec9767ed2dbde21fd8f315ed6292b5b0b1bb6daf2b62665c34daed00a679cb0000000000000000000000000000000008935c4cfe2a1620a0c895feecd91ea7fdcca3bb06fa514bafee38ea5819b7372e75a106904b9c9e8af268c9f5e5a45700000000000000000000000000000000114e9944fbfc05ee1ed75603bb9b79301a1f90d3b5209ea14989fdd16f5deeb01e3474da2b4692a3e0b9625d3bf9b4b2ff634fd89223733f407c242e52f034691036c7ca69f30e6cd444c561de9ebdaf00000000000000000000000000000000105268fff23696890182b5ec307b38ee1cf28336e1c3fa28b9b697998567035323ccc91e974f63c55c928f64fabc2ca0000000000000000000000000000000000ac2f8c91fa31e2d950385509b86d512c80f0d1c73d223f71b26040d58822e4269a85e82ae390441853f8169177943aa461d349e9711fa701b92b62dd3e3569d1203b6a35ac8600367a4df9a9484bdb0000000000000000000000000000000000d5a5c94375029e5511a6c6ca40108377db43e4e0b03cceaf9fb77fac7906f71019c1a85591719bfa5d9349f1089ba0d00000000000000000000000000000000163bdfc6d40c96bd24a3b83f89037ec9e4191b533e36dc699a32c854291b0823b3f071464654eed00f08a691aa68636bcc110fd7a6ae46ef78c0e26183e707eb5e0a2944e3afc09e435d56e91584b93d0000000000000000000000000000000011654611997b772db3111d2d4edf92b83689451b1e7594a7a4bd40d85820df6a1ab090f6a1959acb322323eef27fbd86000000000000000000000000000000000b905fec9e379cfba09fd502197305ae39b48facdb01f52afbcdf159c5674234ac9723643830ab8e2639e7a0d6bd979267de5b9bee26b26b28f81d96e880a3f07dd04eb56c15314f1a789436e01adcda", + "Expected": "0000000000000000000000000000000004de1528d78645a4055ea348ef2618b85f8214c1dbd21ee08ad164abc02cbb2927202302dcd142c65e12934dec409e18000000000000000000000000000000000de34a6fbb73c7152f1636e5c02c75dbbc5910c763bb790d78bb56e48cbc6380bcc2ca14cc11ae139fe009135c81b243", + "Name": "matter_g1_multiexp_54", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000184094ad33f83f5b229643d9808f5b3b7f3e50306788f8485472405c79e57e489549c0901c3d1694b5f61f74d87afe9600000000000000000000000000000000007ec616b56868e00563d8e8bdd36de3b5d1e314be0d81c4ee97fabab1641c89cc21e70153a4d3d4e788b04ffaf07bad624ab43047c02e30ba2ec671511d06f869bf736a9866192c5f2eea6c065acea40000000000000000000000000000000017e7c08cfedb74bf88c1a80762be0e0754a86e5482c27b41240f4ffa9d014e9e8560e172519031eecccd897b869c365f00000000000000000000000000000000115ff96d404829597f16b9b97f8ff71a8eaca1a76bbcb72d53803d35335d8a8c1cea58559136f9b254c28262aa907414edfdf850c0d3e3903404fe3e0f523cd230cabc45946c4fcb6d0e5e05e388c235000000000000000000000000000000000b5450038d49c91e4e5a40a31f1f75923c7e1599695b829d9975ba7d845ab20ed5a62a7238d6a6479b2c6f9249068aed0000000000000000000000000000000013066cb8ef171bdfa11e70ddf83eb2447c4169fe38e008be5787c38b1b8a946fc474e07795765ca17fd5bcf64150fb04feb34852ce0f3b5730962023418ad6cb860716dcb526dc53e8ab6a74a6a3910b000000000000000000000000000000000f19fc0ba8a0ec5a2cdb9844002601f580e0eb9b2265c86f6efc4b633079d43461d6bf241ccbf422eb9d7c00ecca88570000000000000000000000000000000012e744ae937ff9e8e4f611fbd1c9896bd31bb1ca36b948d9be89960fee6c0cbab3264aacb916ae3596f110cc1b26bfedcf25e64093bd92a8fb394511215a3fa674db86d7329ac5ea70ec77d24d4ac58e0000000000000000000000000000000006ca09ce8c07e89e9e51e208b5d32b5ab61f0de60484d9185a26911b56a728a7473b70313fd18c893ed3453719b074450000000000000000000000000000000003d372a5477fe7fd84a58f6f2eda8f5c61aa0c357c7fc1708f7616b8cdff249e7d2910d753c2e531a278f5853fc065970b40db4f9e5c27a3208899f4f536880b97f4c69e7d889c0726d87c3fa27e097500000000000000000000000000000000152ea2fd1934c32c3c8e27a6ffb278741b899c5e296549380d019307875629d57ae44580a944babeecef73753e30c92600000000000000000000000000000000161a77844c90a6e83ed2c40c937de21fbd714a5cde60015a71bd4c960e894d3cb54a8d1e4bb4cb0a1985d4469814a991730bc7f68d8d371d0bc51d95f8a5899249b8db5cba0d21fd88ba6f86d8691659000000000000000000000000000000000a959b12e3af03cd4629f5f6f412b7084eec6aa55369e2dd2f355c93ea984ea6f2a7a01e6a10146849503d230fb08f7300000000000000000000000000000000161340908a38e4ff5373df643e3cfdc459d872b5cfd41ab34fd3297b10c37dbf3088fc23fb71f2a1751a121bcf51ee36ef06360717cfcab15be966cba2836b97deeedd20a52f88c73e2a583b64c8e5f00000000000000000000000000000000013e31a4f0cc29a5ff7f4df39db999c95eac789656bc9c6b91d0209b8a5ec2dbab698048fefb75a3dfa48066ed5743215000000000000000000000000000000001851e72741707cf96f887d13e01981f1e3db5834185eedaafdea99eeb11dcd3e90a9985f40886b60ee2a779b141bb62082b7d8b8b9345bf13d0e113b662141f5ebfc5888a5ef8ea06f7d5d137324ebef000000000000000000000000000000001501f155cf6f053631ebac7d2c57cbb101a750f98b6e11df79dbb24ec8804535b1b24942022aa64713fc60adb2017bff0000000000000000000000000000000012a08f9b1ab90531a26221b70751efa598b4046a5482c01d72f506ffbb3430d35016848755674d01e16bb78a44f8b6882396fe15751bca2c4a651445cef236a865269849908df53551802dd378b892cc0000000000000000000000000000000008fe1ea18cd8e1d2c620356430ca43782f844a2efa6a285a7c9c086e972b12735faf6237447759bd93d98b6dc7c42344000000000000000000000000000000001731f36e811c640f44adce6bb68fd71065f440eeada278ebcabfb9bf0291e551ed302c592aa4ba7e3a502cf58e3eede69a5897c9596223ca4d6628ca1f793a000aa21a739a37faa28637692b754148f80000000000000000000000000000000018e3a4176b543f2152bd7f72ca358af6226f77b5e10f3f9006c8bbe4283776ac31e6d10e838e89e8090215a133e2cc510000000000000000000000000000000000f88c3eab9ab32fc165083ba1650736e04b4e8740591f6e3ffbf684fb359fc8d82513c25a9ecf4d46faaa14d9f13a3ff20a2973faf886556e5329363bd9b9c96424fcf2e953df90bfd011ec07bc66eb0000000000000000000000000000000016fb47b4497cdcc75c0547f4234ce94f45d160e7bbe199902b2af5a5896e7d46cdc866d0fd730f568449032fc3a2df4b0000000000000000000000000000000016c2da30ef51e6728c09c3b29a7abdbb104f1a4fcc8960248b9773d2ea7f1bd161bf17203a271edfb235e8b0be437957f4ddb773155a27badba330ae5d26096f350e9ca2811feb227c4eee09d2baf32f000000000000000000000000000000001992edcbf32707e92506e5cd12662e730bc96b5f33bb88c5569fe6b266aecf63548be20b03fefaa078231b17424ac98d000000000000000000000000000000000f6179cb8878214222c2353a60e0ee210c86e306e335e929050543f084ce7c7ef56ca8444eee59856f4107e0d8cf997b52e4030b5a4bfa767ae20cdea7f464dd2dba51c9c698556d24b8f3d4d1afc82e000000000000000000000000000000000d3ff341e9b3821ac23ff7a87cc9dec3fba38ab8f2bc0f58e4c0135a9d66c6d6731ad8bb97468ca44538ca7f26fdfeea00000000000000000000000000000000053240b8429fb290453de18000ac58df56b5bf3c279e35d9cae8b350b932b0545b6c19ec7ff186c2123731d971146df1d32e0429e7934faa526475c5c7fb977c3030ed74e145eba21af2d2cc8461580f0000000000000000000000000000000004b424dab429bb3d22d18b52c4f9412a65eb7e8ec40b5e308f65fe6c0da1a1ab55a629ef8ed57adf108d146b46e6261e00000000000000000000000000000000057b7d5285194693a7ec1ed9ee3dfbe8598d9acb670baf03bf77c7799227ea788052de690e229b0d28c0a6cd79d22b0c1f700d651c67ca5b8d95fad1a8e412befdf691b074956bb8092938bda2ad2694000000000000000000000000000000000ffc202d826607947dd8f63b227a06d8c6b04848dd102da57723fe20e9b06b7c125f0ab2d2f53e14cbe95f1031624f99000000000000000000000000000000000880400b425ffe1b63214509f9acb0255d089e9de8e4eb643fa3b0383aed760f4c00babadd32f48af724a2c80a8223b383052a3bd7a13bb1ccc22b9519c7ab12d2dec67924fd9f15f96069de22e7b692", + "Expected": "0000000000000000000000000000000013c0b89e259f71ae41cc73ffa3c900ccea45a8a655353db6eb17a87582b00bfb971ba91d48526d934b95e9bb6a0fb5a200000000000000000000000000000000042a78ec26bc1ac4165c36d84588ca132b7366a3fb548801810da041213ee84c7e6aaf5ba02ac051cc1c5be5dfce0ea5", + "Name": "matter_g1_multiexp_55", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000083ddce067e21b219535e477f77ba100fb86744b1b82b4ccd0c72aac69025038e719ed173e70805c025b19bf7ba5908a000000000000000000000000000000000a9eb816ed60bbe55d4833c0e91ee73669aad116ff793d941223c17c86fea3ea434172c3214a4620d4090915cfb15d11c40774f67a651ad70f17393b386e9ea9e81682ffd78db7fbc17cc5084f3c705200000000000000000000000000000000050bdd7d98b9df55ec0ab87e757de009c804880f06be3ce13c5e051c3080df45bedad4f074812a698f50d6774cd5921b000000000000000000000000000000000a8dde7b81feef753cf16f0818f29256391276847cb832bc2940bddb329b249af4970684e95fc02e702f09a84e7737dfccf1e36e063a5fdd4b735dc18bf07703b80c6b72f987c05641612d7ce73562c0000000000000000000000000000000000d989e383d1c6e48d14332a72a8efd89260fed65a47c4baabeb0c0cd8322e26ade95b8be9f532b4813153cc39e7a9402000000000000000000000000000000000f6f7ba41c95beccbf59ca1ebb1dd43348c51de617a09ab8a2d67d3f7065d3f4699b1fc31197275e5b895f92dd106d667ea75dd2f54fa6413ba77f10a11e12abea3a4b947116e1e7c9334a0a37c396310000000000000000000000000000000013f3c3eec6fd2d4c830458cf58d5e18f0367675c47d38fd5ddce1e8be3d6ab04f71d09852b987d2db64652b3255e874d0000000000000000000000000000000009c0000761e1fe517eb32bc3da4f7a933e77db6f960f5405b64d9088776b6ee8e23743cb4a1779e8d0d93787ca029d7c6855c61bb7d72b022c16290c6d3ca9c1255cede8e0b827b43e40fbf018403978000000000000000000000000000000000c7a5bc0249717c1e39a4eea37de1b423960b409f5e0b3877e90d5278cabee197948383936739ee3f25b4bbf7f32e18900000000000000000000000000000000113d6fdda1f4b2a20d98e1d458920658c762303ee69fd7273a8830728f79be00358b3f3000927bc4d26352e5b9e6652b7fa8503101f392a6c6c27300b6992af3fcc48d47f73db67615a44de883770d4f00000000000000000000000000000000108fb7a97ce429fc3ba1ca54ae841309e2ccce748dca953cb7dd9dee3ad9d919e3f8ab635b294b94b939cd80d3435b5e0000000000000000000000000000000003af838ba4ec485ec2a17e6f592fd832d05133952f273d1b472800b210c96cc503caadc17b38d3d1e978606786d9ffcddd947617bcb7ca1c8fda0d49e6d950a84d60230bc2411d42ac32e3651f48524b0000000000000000000000000000000004cef28329ccf221ad7ab2b851e869bd433116753e0d8bf38d22ca46fbdc71fd9d96aeb9c0df69c47905a99c96fef0aa0000000000000000000000000000000012ef5c40d8b6469d9f3921eaa99446fe494a55994551fd1996c453a4e5cb4a2cbabe20671ff51639710a5e45a57271aab4cbbc6d537ed2b69c2c32c84f3cea3d2db180b64861859368e98aca32bceea6000000000000000000000000000000000c81313e8b5689935fc01b5f999de2fbe9852bdccf484edd0771e8427f2a194e29d0af09db1152fcd91c8f7b665f6929000000000000000000000000000000000f37dc7f87b8de48441861ce0c88b1a24f22aef2c321ddbf385cedec7810c20c7fee3d2c5a04b5390a5fc24612e4b3e9457bcb8c44a2d9d1facb39ba7ec8ede5d5962b3256d9fc2e68a1ee5a733ccbd10000000000000000000000000000000004ebf9f75e92ec4fb7168bf71215c9ea8ec17dd9ab392c9810316a30a33b4ace8d93ab75356baaeb51a7f47b4370915d000000000000000000000000000000001307c68414b73db43bcd9062580f7c814c3c34545ad5d943685ed8df26acd457823ed628e4b215875a9008a406fadb5619f254dbf75f1c42046343b0060e71302bf6c94ca2fb8aec74fe7a47a3c9c3ff000000000000000000000000000000000cb5860f081e314d4fa3bf70a5eb18d6fb7f5257a708f1b1726b539115050754724ffd6a34d3b5c95359f40f41f2390e000000000000000000000000000000000c392d8603c2ef93d2765d98c695dbda8e4b64ed90c4771a4e69fa00a77d788981132336f870a3a93765902fd8fe8763f08cf27a47d89ae6e2ffb27870d613b9ae586857e4ea00670944a2883ba325af0000000000000000000000000000000011c802516f42e267c0f9db096fdfff77d676eb301ef1ad440b6c2129c5b5722c420f6e479443cbf43d48803f7e32d8470000000000000000000000000000000004a5ef232d3582724c3eda67cf2e69b26ce44bd927555359820efc3fc67912df560edfc4d119c5595e1ab1fd7e2a262f50aa333bb6b44086fe6211e89cb70b8467eccc228c09aaa1d589cfc24771a11b000000000000000000000000000000000eef1e6400dbda287910c117ba17eee1137377e262f7f5cf13710b521bd26eca2aa9731b0a1cf182a0d57a329369125400000000000000000000000000000000188e925365fe7cb96875e85f711d8ce233cadbcdd4c892eac52d9c77f98082662410db4cb6b24889b21f162eecd10f42d9f7f74a5ccbd01afd985d3259739023cd012cd67fba3a4ab5597e94d8fad434000000000000000000000000000000001307849ed4d685815c670477ac54826e94465aed0b70df9683d09ddc62597e7a0a7a4b2839fbec735eeba08bbd3e821c0000000000000000000000000000000005dd74ee1018ff2280c3dd8faec3c97bbd00bbb7cfbcb849bb003b590a999b6bb3a973ec96bd9d825206eb353086283485c00be7e66e318bed8e66cc41e7fd0593004bbca20f0dbc28efe4441acfc9ae000000000000000000000000000000000458181a1019a65c34835eeca4898b88b0351da7422bb5982616c90740e8773b5a03272646f26c3a5801c6c16be33ec900000000000000000000000000000000101c2091a08179eb0be41e20a545f5b53b8ee39365dc9b57f12d75b2beebdad488d63e857ba5187c8f92af447f72896ebacef63d90ad11bbdf0c5fa2db2838c238ad3049a3f47b7f67361825efbc6526000000000000000000000000000000000cb8c637a9b8f053d5104b582ca03ecba768425c639fef23c4b624f31523e0ac669183639991728135474ca19e0335160000000000000000000000000000000009e0798589417cff12eef14f00e415c51c30fc26461e92c4e3fb4a5ab1a653ae791f05f4cde0cfe2132c377175cec1c2473fa3d16e6431da14b8639d4fe316692db087a167a2c4f07307e770bb9e35ae0000000000000000000000000000000008400ba7dce60413ff085c0904066b8e9e9ae290781132e739a5a8c7bcbda322fe1c8d0fdb0e9b0abe44ff99d4ca22ee0000000000000000000000000000000008b54feb64f59541ba3b7c6f86d24b69fa30ba057db890cc6d958e3a7de8bd379257c90a413050f7789ded9ee7b28bbd2774741f87af1d6942dc4ed79b70b2d706f3db6b6d083eef0475334ef1e2410a", + "Expected": "0000000000000000000000000000000017377baed9953cc7fe1868baa9e2f6c87edfab1700bd1f60e2644bb97cbe2dd1fe031a986fde6555930d4c464399f1f6000000000000000000000000000000000ff69a282658b49c270e829b326502d83a82dade820de50764a7df957e94e7c0a1f0e3d9084b45d9a875134bedc4a0bf", + "Name": "matter_g1_multiexp_56", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000d1de82c29aaa76b17079b2e1000005bf37df08de2c5ba7a0f9a14870e0ac327f46f59a116c72db57cf5110aeed6c76000000000000000000000000000000000a8ff0afd1cd7f541775567134a889d82727e893e4f57d1b5981fabd4bbff59dd3d3995a181efc9b5fc078eb3d4cd0e7d10ffdd3797ad13e65a1115cab6529d0f87b91eb41d6265e694eed8f026672140000000000000000000000000000000018120f0d0dc908dce4adbe50b24b66ce12e710fd35e5a8a8c357dd80c078d6854f20b12d40279b9d6a895460d8989cda00000000000000000000000000000000064f4e282ec5cac74e1a12f678391730663c83afcc0b415fd21475875762de2224e389d607cba84788a16d622d2ef5c13e5da5568a9427e0cbd7973a34c147ac2f3577d06f68280caecf8588ebf1591a000000000000000000000000000000000dae339b418871e2f31ed380824412acbe44e6c73ede9b4c52c054924297aaee1f7da749374d7ca44b138acb85dc182f00000000000000000000000000000000155cfb670ac94e7d5a095d2797cbbb5b8ad3e037fd246246f8e8c2278f5d4e53a773e6518ebc3ea5aeec6383d6fbb62c145b5f1f156f3c823cc129568e7602694107608c1f9545edaa897df58d27b18f000000000000000000000000000000000c1f7aeb05294c1b496de11f743c0c7aa4255211e1e36389bc93dc8d0e73fdb9af7bfbcef2c196a95d1d449b9983b2020000000000000000000000000000000011251668e9edb38ad147f22cbab7d280d436d11039d9fb823a19dffedf2c6a484f112560623cde7e5525c85b4f5d06accf6760be82cefac2843265be5fc0fd6d308c1ed06fc684c4693de25372f09ed0000000000000000000000000000000000ad488f5b9934adcdc834558c8db1d62574e1ffcd03da30eed865042abae4dc03d69010e7e591d9f0a8e421d22cab23a0000000000000000000000000000000002cb0a8e0713dd3c4833af74767ce46aca6c1efdfe75d09a50fce4df2eee3fbc031357691e23ceee810d30004d03f6b9d9fca4d166149ac9e6159ce95a06f790a96243662373637f0c6a59764b77b45e000000000000000000000000000000000465d95750a3c688f560ab9ca6fd1f77457592a0d5f54c17904a222010444d048df2be3dd402f046b1375d75de446d2500000000000000000000000000000000166289d948aa518167e72591a011b3f5ce209bd32ce091543bbdee1e8776269347ed711e1e9f1193f818e3045761a75141733039312347a0c9d760c1bb9a1209a34a02b359a9c52a57eddced157586700000000000000000000000000000000012abc4f1c56f9ac3760acec3d79b77e9ac71bbfe4d2a90cf43da3607c99035e550a4d0fda734bcfcb16ad08f773535d400000000000000000000000000000000030953a6099532f7ac352eff43569914c3f8d736b8aca89f778b4a67c754ada78e121dff664feb751532a41c8081380eb21b18d883ef62084ce4bd353d7434d7e220e9cf6bd0e8d0bed1ad0a4ad94c7e000000000000000000000000000000000138cb559d92b392e94cdd8666605cb5b05e585dccfc023bb6f1abe82fad35c108fca7a41afa49a801700dd8ef89eb3b0000000000000000000000000000000018cf89ad3e05492ac8699ba0723d5ce43e81b0166fc33653c967da921faef37f3ee2e8e3f71f983774966ca183e05f9eeafb6aa11296facbc13936bd2ba09a2cf9bbd9dab6ec8cc5f73d78c90b471a3000000000000000000000000000000000129c48a05e3d6bfab6e6f5200fbb90fbb743b045509b129e3622929712939c5d15126a09f1a650489c8afde7ace8baea000000000000000000000000000000000abff3803d605dbd63bb8453e304335a943bebd224d2d8067d76f5591cc6a2b954b9156a243b0c23d08424fb9edb52383d39a61323c07f9f4656a6c5e6ba139da8175ebfb8a641de50cfa2290884662900000000000000000000000000000000194e6f217b863339824d95c77253ddef4ab97d9744d10392d399b1f165170bb8c13ef1b7cbd995c1c1dc2a9d1b87f0da0000000000000000000000000000000019fbdffa8df167a5e891d09aa1e79049d377014e58523c0eb453f5f072a468809dca8ce0aa22b45bad4f8853d985be1df6374d0849a4471eca96c5e715b10505c4c49664f341d04705fc688c8479cda40000000000000000000000000000000006f0b72c2a934e430e4b773a61317007f1ef02c5f978b3565d623b6590b6cfec22f98b49f9d7f7efcc6913c139fb27a60000000000000000000000000000000018ea7df5f807d4c4981a9159d73d83ea84359d6aa00a5ef019b0dc307d096676c0d16c6b167fc55e14329a858c044c5c0b7cb52b99abe10d1367f8d3def38221c18657a1114ceaa1c0673ab13a6e108700000000000000000000000000000000130fae66f6b4e1a9b0b39906fac847f1285a7d37bdb0d3ddc2c2bfcc6320ccbad2ef1f119f2663e3a45dbff005a469a10000000000000000000000000000000019ba2ae0c371256e4c3dd6f9ae2568386d3a8bd90a57ff982294eae9194494add18958dd516ca9dda6a0b334391cc211f49b1fa80a321d4d100069b2c4b94cbda255d8e9f1a7f14ddf4762b76e4a386f000000000000000000000000000000001152651000a16809ec599f2fe9f330b0782685f6302254450884f0ee61ee2dc2cc9211f69d5d9dbcd7fe3345542a0159000000000000000000000000000000000b5c017e7ef71eb089188ed85331815b40c37abb6ff73d76f40fd8dcc6d2120c6a52df0da042b2b63dfd0da7db2bbca9ad3625b0839cc1ab8c9798b2e9706ba6d7aa623f3c0ce0985bccb2ee5c05a3130000000000000000000000000000000003a6f178d8c63765b2c8df834ebf7e96a4f451c6e05692f96b71c8be2a6e9af17a5cfd8b263eaa254592ea9a898488bf00000000000000000000000000000000185537df1a10c4c12fbcff08de45b349a90b0cc8cd17827df87abe160e84b661d58a1fd03c669015b991225ba08e171e150e53fb45ba8ce5ca917010f26451220be51141fe21cfc1cc06a5557e8e7afc00000000000000000000000000000000085475c2fd70cb7caaaa7c5c1fb17e2346903a962fa68536240d041f2f8cd3a7b83aa79a77f713bc31f7becd347d18d7000000000000000000000000000000000c98414bc318b350113186db9e965a238f1f181b00a2265638d914d263e4a71ff643907ed8dca814e5b8d5713baa8dc9d69ec73df67feb970f1c7a3880ee84d948eab4d8672a6c1481d61efc6cd7100200000000000000000000000000000000001064b94e868fa82c892dd244c6247063a276cc651e22d09695ac6e73d20bb801a189e8fcef8a711ed471fa3b2c7d19000000000000000000000000000000001561503962d7314fe41f7b2d34eadcc985fa748cc98479a06749692a00a46fb2fe5b5a68f7001a0f89f20f7f42f4463c38f8acba4782dfbc02a14d4b1d7b2b0a582f9bd75642169707a475b1a7d2d7e0", + "Expected": "0000000000000000000000000000000003e62892118f11065ebc66c58c86e2f0d3c79541aca8db33bd0e12f034f0e106a76f0aecd537539cf2d793cf823ebbbe000000000000000000000000000000000067e42ecf23e1b0590c30106b0720c806ca71fca0601b499025b58f137ff22aabdc6cc5eeef232fc9a20fb9c2bdee16", + "Name": "matter_g1_multiexp_57", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000184a661b34e18b637bca53ba60c891da69fe743d5336d92e811649094c15ecf2445736d0c1577bba4eb729aa7204b44f00000000000000000000000000000000129a348f7fa726585badc23f5dabf49ae095d300056b219bce0ce15f1f6a9fc5c8ebaae56362c3501af3f3de19515143cacfb05e5d10c41b06a487e9f8afa38759eeb55f0a5bc8640164bbb081c1fd2a000000000000000000000000000000000badd515b1e0959e77e0f00c7420b46bda5fcb6db59cbd431a1b0ca68c291c6dfe89ece299434f83a980613fe73ab7d3000000000000000000000000000000001266343ad330fcb2cc8242e30a8085cf6995ebd810780115ef881516d4227c6051564d7343e4a5d6bfd210e2e40b91069a0b88d946231cc484550a87a548719f0a543c0698411f230a966cf602dc4de300000000000000000000000000000000085e7c22d51db0a45d8db7d5365de9541eb87b81c237fc47cd25c297da4435b4c9b8212c76c929b7c8f32e8d9b11374c000000000000000000000000000000000a4b0f905b48145f1831e453d0372b7861f7be6e413182153cf77d737450a58f378652255cb4516a482d166233dc88c574e3b5ff944bbbbf808f1f469a3380ee7dc37ebecdd8fcdbbd2f2561e0dcd68e00000000000000000000000000000000086b97f87625356425a79db717f940debc7a7e932370ea315d1f94b1ead853e3ab6edea6302b6b5b0eb4e4bb3c7fd14e000000000000000000000000000000000fde70203ac7a82901250e9798ef1c671f8d5f878fa3bc83556437b9b98e77f7fe7d3a0f31b8cf05ff6332df0424136fc23064970a4ae4ae648a79edb193d98208418d3489e9b5b8517ebe99cc32b4d7000000000000000000000000000000000e629b2d9a57bf96cdc6871ee7dd7675257cf62dd10028201448d8e5b1c0abe777190a868fee83ff5d067252312e82dc0000000000000000000000000000000002102d461c9522542acc185349ea93810c3e2412ebb427f8556b947efe198d616fe00818bedc22765f697507d7678dad972fb60ccab83b6ce042c09ead82fea3d2cb891e21ddc5af7b5d8e334d5a32640000000000000000000000000000000015727f52d46099c0ba041be660ca312204afb0f927fdcf0f1afa4cd3448cf3e9fb76bce7ce0da8b4c0048f76f0e7b1410000000000000000000000000000000009dc4e213faf0a8216061b59dd35a135b364431e2be37e42d065a42fc8e42eb8669d32a5f5ecdfd9234487479543471bdb68c389b94c82f006fdc637696d8085b24897177d2992f504d4bcf5ff04d173000000000000000000000000000000000afb691289f877e1de6fbeb38cee0e36fabf3daf904256d5d6db6e96ce555a9304219bad41400ab6278727e5fe2faffa00000000000000000000000000000000165a54d6db7332b12224d59d8b677517190744c039d9bb401c2e3c4437dbf230b67308fa2d5ae2bf5de282c9ae38a3fa4510c100005f2306f4b474d3843b4a79d04f0171afc5c66df70f631b0481dd3300000000000000000000000000000000032dbd300fa383541e5c40c849addae3def5a4f5392c44b9e96981dbcedd02252f9bfe4100de9954ab34fae9b2ec21ce00000000000000000000000000000000185e62adc2a44462019c86028c617ddf59a6b1c16071624de5ca755f936e73c47cba00f552d2d79baf60a1796dee009edc682a2be4d67852d119795988c52230d8273648cc176ddc012a4b4da5a8636b0000000000000000000000000000000008a574ccaa24ef76112a25b990b5d3b462ff9c43589c9efbb617b45a87bc26eca6dfc6c9e58a12650c202a06d3c86fe60000000000000000000000000000000011f41e39dc0f0bdde1b9e1879741824b20d9237dd7b462272115e8ed44a1e6b7bf82e8ae481204dd8662418fadc63bbf8af6b200fc8e6a57a954226d9a0254c8bcbbc55fd6c3db5cf8532323d4c50b4b000000000000000000000000000000000efa7f183cdfcb25cc5516bdb45c409581b6f2a5bd8ce8092dbf9050a20b2ff57c6add39e96a6f1c8d2134a5a37778c7000000000000000000000000000000000a8213977e8512648b6aeafff2cefcd17a14a052791d20236a78e0b462dcac81db74f1625e787540d7dc279846983f647e2036f73e8cd5e42ad86914e192dd969465aed0c3b752986b84a0c2444c90b8000000000000000000000000000000000287e0add9dcf33f37a10a5ee89cef5240313af0bf0dc183d0c3d6b919c88b979c932c7f141ec5faf012a7f33fe56fa4000000000000000000000000000000001313f591d1da8f6baff044857d2c04f01935b493f5b951cd3538054756d33a52f71be92ef908f016c133aafeb9b9ad2470cd5c1545e76027c389645da1089fa88f675b5b6ef9217b584d7202b797f85200000000000000000000000000000000192d02ab0a323e85e9fa6f553eaafe0d8ca2de63f0fec8139e24805f0785cc85b39908756ab4eb39354ecd8d9440d5260000000000000000000000000000000013997cf706bc8d40b019c2dacf6a7d269e0ffdf8bbc1b4b39e75b48ca5e5e6eba0007b8c55b59530b34b7ebb4c657c57244041bcfc21ede8023ad80b6d4af4b2777c0204ca5f61854e6da34ff5e1145f000000000000000000000000000000000a61b3cc7913e45c132cfb06a26fdb1882bd700b32361572fc79a3d2c432644392f341cc70905b86cad2ce52c30e2ace0000000000000000000000000000000011bb3d958600993ec04d9f98ea3f29df0dacbfe6557b36bed865c564595a64132e4036b6240c97cdb38a60533d5a08baad7572da641373708bef008057aa5af1cc76ccb882bacc50a77b37d7047b1bf30000000000000000000000000000000003d2bc11fa699b284b37d1b45c8dd6b41436a7b2fa09cef316821516801afaa4e1282d717d4eb3d46e54c0208548dd9100000000000000000000000000000000123f8cdf2bcd7d6eab31975ddd610afa79c3c95fed2a6348fa6872b74a6e2816509c71f11d1f272dddb59bafc0f48fc454b51c78093cafcb57c4c1f172d08257c379a9caeb5b5478cacb4887119a08c6000000000000000000000000000000000982c1cbcc39867c7c8c4512392af1489a5e6aa01ecf56abf4cd9050a33536feeb1866421958b929096d2c3f6923891700000000000000000000000000000000104ba4defb74b35d15db80df1f4029650f00b306d702b5934c1705d226886d4bd22b6c88e71b862109f8dceacde3c6d2ae3bbf55186a89740af4da6c073d8c0e331542a2c972a49dd3bf65261dda6e490000000000000000000000000000000006e5fc17bdc786eef8cf2140bd8002ea859619d319126fcc5053be9c28526e14e0bc8eb924fa242305069226d766f71c0000000000000000000000000000000017ee60b0dc932806dfefdff2cdf00efc4d5c81a1e84ce48a25db1d49ca26232d4e4cc1f37b34c80375597587dc183b4259b43915b15c509ab8930979312dea2ec9cfa9f679b004ee526aa5dbb25759a4", + "Expected": "000000000000000000000000000000000c3dbdef90052dd5bdb70f15963091c8fccb5b8720a16140ec96dda18eb6cf003b6f5f7c244d25cf6da34f2a1703a9d800000000000000000000000000000000187456c5af42c3de3d5e08936e8a3f411fd6458d017ec508e48f2b634319155428733634e22883492d7612b2bc38158c", + "Name": "matter_g1_multiexp_58", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005a912b6b2b00c2b2c90ab1aef8c9240831ea9ff2ac3a92753054f159f5ee4eadab8ef57eb5972e3169ff9649b886daa000000000000000000000000000000000981b901734dfb3b5f63bcff802536492664ac13dc695960ad89342ea865ac67d00da7130833126a33573d55a9baf128a53d5989b63ee5f157cc44c684ccc7cb4c74338b12fbfb534ea33db341fa6b46000000000000000000000000000000000b052881b3e27d232ec980dd99bd0ece4e861cecff2496472caffd741f2954718d605de98d9c27dd3ff473ff12b238400000000000000000000000000000000004de4bb9e5a4cef93662cee72259b88f7ccf8a495b733e868d76cc25e04c53a65a83c853c98a25f7a551641d54ecd9534d840680013af06920dd06bacc0ce95cf0cf79e8ccc0b10027f2d28c1d0049980000000000000000000000000000000016e4d257db25c08a68943e6e0065b375422fc817539d2874279e2b41428da449627e6e04087fd448f651a23fb01816ba000000000000000000000000000000000e80d041b65789b3289a94848ca4b1109028c9fb314e652486e650221945ef4224ca03a693e062b06036898eb664fc211b67d661ebc9008669bb4e5cffef81a32baabd71667a72f1d202ced823f09c74000000000000000000000000000000000542fcc8d668a827daf3726bd71d7ddeabc440a6fd0c08a4730803be6e76613cc0265252c41123146a5d7aeae93f485f00000000000000000000000000000000109a61920ccf34a0a71f51f4fe7c882b3d6fe449a8c67711dda64f9eb684b4a28cce6e8bfcd6f3cb599adbd0771a132dee495199ebdebda02179432d42d5d9c76eead4d4993cd09a93d46cac997716a50000000000000000000000000000000000a65c746a1206b1250598823b9b6fe5df3dfbee21cd31000e50140893875d1ad9fcd4fe12bce0758544ad8cb4cf5ba700000000000000000000000000000000038c25d3c35fb34151428d2f6bb8a459f834902334d195da214ee9fae4bc6099d225588a001f8fddacadeff0d3d215463e038e473d6f965751ebc5f69eea6f37be88cf001de0c4e4b700823d8326f17500000000000000000000000000000000158f2288a667f475c736dce9e404ed37b18d677f984b6d9dafb051b87901e6fc60289161bfcfa46a3fdbea7b4cc3f795000000000000000000000000000000000d7faf96c636ee38347b0046d333e72d601e20b018d554d50ed63e30c62db7fa20e29b3ea57b1f31e0d7544ad711c96aab2af2590309c9b9177e4f6f0fa06339fa720cf1c9fc7c001785d7145a3c9030000000000000000000000000000000001933815ab2d8b6cef8790f87dd9750bc2b7a75a9d6c425a3e84cd109f5f5ea866e171dfc212f6f8641252e9421fe3aaa000000000000000000000000000000000f8ba799ca5dd885046a4ffce1d26688d0bc6936f3a5a943dd54f89d991500908c81ec4f9b116e73f74d46b67731421bc9551f12084ad7d4ce346f841fef785d644821b5c2d3c8db3145fc26e65666bc000000000000000000000000000000000d4ba404254175cdf5c47c08ec158ad83b6ff5b8dd32b8cb9753fa157726271f343cc0cf5231e7e31583877d2591930000000000000000000000000000000000191f45fc4b8c94519d13ab28e5f84e22dae2f82550b44be737728a695865973ff5060a639e3f03904d74717963dcd764ef5823541696ecb88d0c71e00a15282c40d4826220a202be09c47fd6891b93ba0000000000000000000000000000000014d348b7dbace24bfcb258c853b19fcc1637d7ed9b0ec00d4124cdf6d608c6849e8d2f9858afa83ff356380afa1376fe0000000000000000000000000000000008c509beae3cc22f0da64bccd2e0387c05d7613460942d25182605b3eae6ce052540142d5975733cb6554e6da9f473b6e32d695dd02323d40ac1eb9452cc53376ef941237563b1ee380c9824a565008d000000000000000000000000000000000ef9aac66681015bdd9bf287caff9aee89225e30a7976e9f503a1712fa863c8d6d46a80952a1d94d96a5e0496f64ce5b0000000000000000000000000000000016c66018f43bf585195b256ca106f47077f977701d97f42564223817ade0a520aa3d7f06d868f1e91705232b1d2440d9f5e23ff8acf88d18e53bb31476f10fef288e20e818431f9f0d2ffe1265e8ea8200000000000000000000000000000000042d1d00a946085dc6329e852342573db7dda7385e6a50a2660a924ed6202968e787559fc58a162a775bcb115bf1fcf800000000000000000000000000000000162b52027b08b7d91fe0814c7be69414121cfd452f4d0407a2300bdfe9ba81a4561af74d8067e929b71a92947eac4fce71927817449ba5f053d0ed1e567b53b1179c6b62a554c8be6764d7ce203f74e4000000000000000000000000000000001598949030cc21d76a9c69305f023bad3cc761d5f857bbccec4de6b0f7557395efb2d126382731aca994a5020039acf5000000000000000000000000000000000dbea8852edc6bef41dd317e7d70eb2a5416d5087ec5207af3f5b3fec39a416dd9ccf4cfb5400cca152f173e66df05f75ce5d6f0e44a20d0a0e2f1cc523455b001dbeef772d84b2599daec66b285027f00000000000000000000000000000000081e898b02838558c1c9d7ef9f86fefe512e2e7364ad824506c886b4cbe947657c5480353e4f72e237da013d81e5eeb10000000000000000000000000000000005353bf2dafb1b9b4f2cf58e16645aa3fb759eef6eb8f516db068d2768851e7724fda5cb85241aee62b4404de2862dfbd37f7bca1a59f65982294755ddf8af7f1c953b6e482fee854e0d89e9b269e0e900000000000000000000000000000000028453aa48ad0302804f9cac568467668b1dc0dce2cbbaf280810ead2c0a94e156420f4fd2566ee7f629e57c3741b8960000000000000000000000000000000001cfc5ed80924f7088ce6a5414372d13fd8f6eb3dd83c66d8b8e4dd1d4db2bbbbbc6ffac00e3a880d8a8fb5dc07fb23f06d0535e3728b9e358d9ea82df4f1137db7a02f79c0cd0dd672e24092bf7f6b4000000000000000000000000000000000a236833fafc3da813b95f4562804361aaabcd8166780a4646734e4b65e3a1924c075d402404b52adda4902bac7a2cbe000000000000000000000000000000000def6beaad6a180998c4c70f9a8dd0d948a79524b31fa44874908058e9e58caec2e23d5a0787f1ca05a359ca276c840ff56d6810620e8da932c202628c2fa9f0a9f3fda3aa07c262924aa51685d2c9af00000000000000000000000000000000188bb3e69bdf0a5f31ad16751a12c767c86df80f53f6688ad74cb2fb32b81bbf9d60be1182ea1b6c0d6fd12ef73e253e00000000000000000000000000000000139ce5ffa569548f1bb877c3d573136a8eb12e7c69cd21a70526f8724bc67e0b37cf7149dac3f78377ae7d5bf4882a6771e7f672ad398f5c02c989b475d12ce86e6e242d36784308e56178f2a6a1517c", + "Expected": "0000000000000000000000000000000006e5af407ada013abf1451bc9d5c08e5ba9cddebff0cb77175b152fc19bbdc48e1498673ae4698dc74d039a671ecdcd9000000000000000000000000000000000c8783b3ce25445209b9f1d8bd3ba539c01d230c07c4fdff38ec902467d5f7e9e8e660d8997939684e119fdfcc963836", + "Name": "matter_g1_multiexp_59", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001731f73d2ef1f87fe1752c9d6428de241ba71506c76f31aa9697d1c436af51de363405f60110e8e69ab268280c20f92d0000000000000000000000000000000001ec6ede05f60685e39acc7e105f60602f0fa3c4a6da7342da755eb34aeaa5adbbac4c13197a2c93314ec79f5da8b90177f9a79850b2fd5a281b22f52de085f12bd34e56808496e1c1388804f534d2da00000000000000000000000000000000158d295d41540fb1a27d8200ddf51fbb9d31a70fcb639c42b7fafae4a95b90ab1ca777125092aefe20f856e3291e528d0000000000000000000000000000000019670ff04a77cfd367c5f0c14218b5d95ea2eae8577da10f27d96e58039b7dd7e9f7f75c32f99dae0920509733ff9c96630c1fdad9338fa5236f817bada168a737dd3685b327fb59d8a37329920af4cb00000000000000000000000000000000052f8e8098f9e83eaaec1c2638aad30b043c2359f2551a02b2b95816e1c55d37bbfa6e284f280f15dc174d5f03a7698400000000000000000000000000000000034bc698f07544952274c21f416d8f1281ccdcf6bf53ad352afb15a3412879a10b37e6b8b9fc5f46ad715f9ce7b46e3d0969599bed4899c3c47e1d4081027203c73233536cc6e45aaa78a4f1150a5162000000000000000000000000000000000c2e014d5068adce3049cc326d36ef92f294700ab64bfe170260727117f098727cef2e28dc10fe473a46c98867c618400000000000000000000000000000000005b3ea9c12179a47f7e69690f3303ccae614e06878189b40264f02e9bb26284dde846d704121340723bfd1fe5696410dddd438de35651328de7183dd38820ea2983488ba31d401094e59cacfcd1d031900000000000000000000000000000000119e9fe8723883d9ae8c61efdd3ae961795d79409750dd39aa6f0f8727ca2429856f977697c4f81894061da278a0f9a9000000000000000000000000000000001438a4dca0c786062aa9cb21e26b87e92f90dcc0bfa014f654b1734cf7cdb8a2e62fd3836a802a9917539dd068c6b4b1191f2b2cc76d848e456d07c84c0826a8861981dc84bdc671bc9b5882d387a41a00000000000000000000000000000000012872f4dca3a9f3fcb07d67c76836c23eba3f7957bb77950a4b43ad9c7ee54f53187a742b13e026f8234df9e91659c400000000000000000000000000000000078b9d597bd9b5ed2f7e0d5f8e4a518012591b855c5352fa1450704a33c3cbd5695a0f8da235411aa99aada88086f643aa76094782d0c06f2080d699b81aa04a60891046e0053d2fa757c7029df8f8480000000000000000000000000000000006c414c6611e00c6e98b370bacf2ffbd7ebeae890278a0e951d6aff7dd3e5fb90f82b4e65dd007a3289f97a9600786a9000000000000000000000000000000000cae4750f99ba13f03d3e0769cccc879a4832210d6a2f25b2696099c0cb184398b7d432e801d23200166a4c53a3e70f3049a751a406657dacceb3721461417571a0104e11c1e00805becf71ee77eadf100000000000000000000000000000000122f404ddd6b34938d8e57d9d6ee78c3fdc1b771dd7392944ae88c625f81df63915a87ac63dbb69adf8fdf856a92bffd00000000000000000000000000000000197c20bf1392d4d68efc6ac3bd5d8b53b360e305a501dcfc2e350e3738503ebd44a574e478757240236762db2f23d4310502d56084d1be7179fb735e233978a5a3c2756d780cc0ea6a8aa92b1d1f7c4f0000000000000000000000000000000019195a36dfc449c19b172ec061b4825e4de85fd5b9c633c953ba7a5617973e61abd0de3d59d441f49264a0dd2e781b20000000000000000000000000000000001430f743ee98a2b2f37d9ecf2a7d4dd4963707fd4cd6ccfdff55c3eb189aba2fb295877bc2d3db9032af26eff6485e459787a6720b8db1b4f0e1d535833ed20b519a0e4d2e9fef75022aafef52371375000000000000000000000000000000000be5d90e5fa172a2034667160f635ffc190fa495aa9af51b648125c29bcf9b4b31fea7a7e4b49d91b4a8d081c9aa2d3d000000000000000000000000000000001721ebb02265f698528ae1bdc5bd4500d7612bcab9ea939f552ffd8e9dec1d267dfd25ad4d3531676e2ecde3d2170c4810b47b662e8cc8dd005bdc81dc6d98d0eb98f86b46c0c8f24481af9120e84a820000000000000000000000000000000012b7607bd9f1701ed002b6f72b2e832dad7c9b2bb6eb6368fbe78c48bdfa17b2546574d7876425cca7986fa6839b6da2000000000000000000000000000000001975f41ed7cf252a658e80634872ac495e4b518349487930610906bd396f7fe4af3c97acd0ed3b3f265917560b13e6ef072460e3c5349c8fec9944dc99762625262e84c70f10d0a92077a351335127470000000000000000000000000000000014ddf2cedfda66e12e999d0b280883c546e00dddc0bd17817d6df90b7a614c472cb2840b133eabdc7be39b63e50cd9ae000000000000000000000000000000000b86e0559e27a6061aafc091f93b744a8273032f0e8b1c8b7071baf3ac7008a8173b71f51b27efccba27cb018b25257ff3177c4d865caebf1ef6565bc85e0b0bd51365a6f321e26b97cce887bc3f44d60000000000000000000000000000000010f691744e7094b801c180810b24f6a29c21a13514bcaa6303ae49067bdd001213f13c6f980c51b050a684b525c2dabe000000000000000000000000000000000e4e4cc3769cd3e0e458ded43b5c7c481c17efd3283972919212b877c21aa7abd31cf86ee2bdfd3cf0ef6d730c0907db393654ef7ad8687c8878c55a8240ae9df04805d3e2f194e960d5e498ae3ca177000000000000000000000000000000000b5e86c2be33255bf6f2f2aa8b17109467543168c0bb92a9ce19bb64c5f84188b2e9f93ac85d948c76989d9d4dc9eafc000000000000000000000000000000000c5244fe670dcb16d7994b7db8f933ff98744e5c6dc124e057c05d2697881115a99f983be480e30ae3e0ce75081b261edb9f942124a381b150f00a59e4579d0a2b7b728f62715633288fd03d01dd12dd000000000000000000000000000000000df7f56643536b20f65cae1ce4c67c6bb6def8c9b514d6edc92673ae743a2f4e4906aaf7e3b048f88f08a4f5c9f85c8000000000000000000000000000000000176cd183f547a3f38a86d604f8e76261755f72e7222f3734a456a3bf7029590848970e8836b3570e9a4f3500e54fa3008e6eb65778a328cf899f66581ac7a4a89e0e824c15573bc68c02cdaad89cdf240000000000000000000000000000000003737e58505d0f4c6890c7e03d5f252aa682c110f5bf5dfe8bcee9393104393f4a6a22c34c773e1dcb78881a31b33a71000000000000000000000000000000001988ab3430de7a463dcc2156db572c43b68e58ac2ee26f1ee1bf8e9889f6cd3250e5d7f9464a8eabb127306af39c13140940e3620c59504062e4e98b5d4c8cbccdb017c47a094d06253743c29465731c", + "Expected": "000000000000000000000000000000000d541103aa046ef53761e929d50c88796b90b3284668a2a75ecd461ade103f086fc443a3681b6440e6b8a8b9558870f20000000000000000000000000000000014120e26b160a37f8e18faf541bb863ebb425fbd0eb072268a12657b6e5ff62d4c0e504691b3d09b710741820f747b85", + "Name": "matter_g1_multiexp_60", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015c91ab58aad72af3364a3d05e2893c756a273b2c731ef421c0552dffcb32fdc4296bb79afcae2d3c8aec6e0dcd27c17000000000000000000000000000000001901b4fec7a1324a34fe403dcc51656145fcbeb4eac94f955f4fcc5ad6a016eaa436878e85dcebd8992e1a177c5bdbf80f2f697ef6783390724e04b81d0e18dde6533eea9f72c1e10bc72c7b954659660000000000000000000000000000000016df7578f74b1ccdfd537a074d71f2dbdd581f1a2f78875a7d4e1c3cb772aad0d02bf4935f7b08aa5163e82e5a747bdb00000000000000000000000000000000053931dd0624377808705d3fc6e12c4894414c8f6a5662ffd71251bc7725e6d23b7781286b8be1e35eb615bb1efeee9c34680b934e67bd7518f0d6a3a809dc7faf845eb71d0247291d61053d5cbe0ba200000000000000000000000000000000056f0c5d78c5d4e97fcc7d6c3132dc4cd802eaa1bf18921d039274104b56e8a701c25de6ad33e57997b2e8491d7cedee000000000000000000000000000000000c87632eb73c464f53c15ec127cc5c72fe6a413e74313e80395b55e122108e2984eee6f53742ce4445f455108002398fefc024dbceb522c02b88810ada9a814bfd085fb63d570663a64bc0658e5ad02200000000000000000000000000000000040f1ed7a9f7c70a546088822088c476f8954681f3741cffb7e6614dcefe2963253599acbd263b988af3764331a273030000000000000000000000000000000007f9d150a4b34b9a6f872f9bbec4d2e0795d02c5411d6b3a844ab95ea87f9330662c8b0789e12a8f6dafa2f7cf2f13a12c136f00c97a515076f6a0b63faf7e378f2cf04f8a90ac942fd70e25e683cbe70000000000000000000000000000000002890e211b1969c72a15c0f24b21dbf672b2cd33ba9ab79790c07f0734709bf13bbef4f54bf17db9629cd7abfcf1fc2f000000000000000000000000000000000010f13eb17ab7ccaa0bf32b8d4d38760b72fa0fbbabe04017d9d8283f6dcc5500a336339400bdfca06749f7c1e08f748b033f2270ad2416d03dedd4bafb78ddc598810768fafd349a42438923ddfc93000000000000000000000000000000000f7e328026c07b116dcb8950273579e0c4af027bd3aa442a41d279b1b7d87d672154d2513669428e8f401db490404e6d0000000000000000000000000000000004208901e02756c5a2430200d562c0ddec0224446b3fca62cc98e9efcfb3508f50794301b026d47eb99aee210dd2f898202d0d506bbcd56c92bfc6fbab36bc96716de1af02aa166e7db2e2a0a4c19cd7000000000000000000000000000000001309e8c1cd6ca596ab2c9605ed0e356cfb97c4079518b0241d40a3e0e4769a8e58c0ec6a7bda173fc427aaedaa275ff7000000000000000000000000000000000143b1d1bb451cd56d800d71a747173e56b75cbd6fd28ff4abacbc1dd87653abcae715882af29c29a1631850694c5aff8329762dde1c4c91043a740a8b9639e83e809f749fc8c4853966cb2ea520620a0000000000000000000000000000000013bf8880a6c95a8791b8ec37c2188e4c0c2cf188e2fba01a9e7e4b81116b10da49415a0588385156e4bbd45b168467e3000000000000000000000000000000000be052be3f3278259b6e01d9d81afb4d4215b0b738378e56719403e2ed31bb6e15e47c9986aac19f79001a76f35e4162ea46572fdb37fe282203172c147715bf0a16e02a62bc79f33cbfe36703c95a730000000000000000000000000000000013b27128d2e8bde36f11503986c226a1613ba0779de9b25686284d12bd995c83e0db9eb0b2ea759ee81bce0ed2c0c2ad00000000000000000000000000000000128d6ea67c8cc9ce6eb93111780989b4b33afff45a5075691026ebcc607e61b7a48e2549ce8286cfe4a72b182073f373b9e49472b9b74cefe5a951febe595b0020c43fd54150445fcdc4292c5ffe65f600000000000000000000000000000000137033427de6a6d23e0a2fc17d396114f8f4ca3e56e42936c96029c5b829b3b8b7ea46fa47fa39f6e5dbcd804873d3ab000000000000000000000000000000001986563cad41be453d14ea3f166c2ef2d89ada32a345554ea7c7141f6b1306af815579d7399c73039d1696fb62edcf80b6bfa1ec877010aeab030b96e80d2e27b45a93c6a99e2aeb3ccef22527c6e472000000000000000000000000000000000f0878d6eda3d119eafa0e5cd0260cd5c9bed5fd3251f0eda5a6aab6b475ad8982b55a0c8c07b6921de77c4e23478f2f00000000000000000000000000000000181d4cc9e77cc1e21145457948923cee50db145dde59520e6ddc2da13c3380188856c220cbace98f7ac4bcd7dcbfb1812810705458845232e851b33fdbcaab01966b8ed53b455873a966c1d6b8936389000000000000000000000000000000001267b7c2a91132c46ec835a5c2ea1f1c1021449d4ab3c14355777f1b7771787ca8b72b61563dc7587db6318c2661551f000000000000000000000000000000000d9f7257977b3f207e889678b72b584b84bf736bc23081d1267145a886e2dd6b669bcfd8b58414def71c27cae868f39a175fa4954e56dabfd1808f93d2686e0b4fd285bcb78b80d15e10e63ea8c7b6460000000000000000000000000000000017c223749282ef77696136edd0b30041b7743e40c2cadf8b491c2dee0730554e39ecdce41e45d647340e73bfe77407d900000000000000000000000000000000025924e40885fe566166bd4c5de6e5bdb3ab993c154ce908afeded5614cbb0c00e6ddd648263f17ebb3d81bd6a4f79afe7dda7e5373d0e0afc3da1507416f47ea8b467a5b6c2fbde484aec8777ab7559000000000000000000000000000000000730c41758d12795c7e5540e4204e43c75a01dc6263833f8db435117429ddff6cf4fbffd6cc27f553b8524710aee9ab000000000000000000000000000000000154c3ac230c725594a3c985b7ad71d98c172de8764926e74f6932f5a5d40543b5060c5d604877e3a8df093927b0b171c6aa731f9393d2bb32adf04f19884dd1a5e7aa36e46408b847222a153da95aea50000000000000000000000000000000005c6852bd3eb4db383e9aa8c74f4c158888ada1c9ba07ab8c7b4abe9c05bca51f0065a29a814892303a42a6f2736043800000000000000000000000000000000086d733e758dd4f0f911df6cae3d678dee3500a53d8a364986d88c50576ca6bdcd10fd31f3cebc7a35f43de1d90ee4bc985f367919b0f3c667b1c1cacedeb0be1f9cb175c899992ef55f14e9b7aa6ad10000000000000000000000000000000008445e5c464c4e10fb0a10c97023c5a9b169d042971597eff4380821e44430e3790683c7c66afb89921f06199c72c87f0000000000000000000000000000000017e55467ed664833131b82a2875e22fc5b29a3808639e90741b731d4efc0420b4934fc75ebc2048e8196be55a600f9bca3041cc52c6f1bf62dee4c61b1c5e35b72ebff7e8e89b05353388b551eb10010", + "Expected": "0000000000000000000000000000000004f03dd7334a0dfbc7cd3b74a8e06ccf23fad0802e44c95712e920a2b227f09ac3d62429f40bef8241abe41575cc541c000000000000000000000000000000001092b20e8618beabaee18b4752a5b320307d22fea2125b3d23c6ad178f0cf2af7a1a1c0af3cfc669929087235e2f8960", + "Name": "matter_g1_multiexp_61", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121d2cecb2c9892d69e6a15561688edb5020dc39fba96eac835c0577ef017191572f8bba780a608c41d53544d24a306100000000000000000000000000000000080c59704a5ef9251654458bebe25d949bd5c7793c438a50019a9a7cf26036f014fa3f024edb767d233dc09710d53daa709a2e80dd96eb12edc481e3d58893bd0d789a499d5289072d58c2ea80b036cb000000000000000000000000000000000012be549d6b4efbe6e8c17393390f3cf190abe4621a16e951203747dc7faf6d6ac831582fefaff20c952502fe43e2020000000000000000000000000000000003112e26ed614405376dc1af80b9f1984439c0b67863f5cee6d3c44f74f320e66574aa1501376cf8f924efd83655a72b9ff35bc510c86a9e72c3e9c6b49d2abca546f7a62330156ec09c6fe6847a400e0000000000000000000000000000000013b6249bc071ab2f9f048531e6bd27a1b8a45d34c66623268402bb37f6be2d71bb5127461221089ffead4a9f6c708f0200000000000000000000000000000000016a321e986c6301240b1e9258423bb8f38012ad533b42cb487384d9af63713d4b84c383ebd4512145b3e518e0c935b1391dd27628d0808d4a0773509737597230d7849418540e1fe4498fd70d39d16c00000000000000000000000000000000069ae7a90e9402d4f9f1b4a8a799fd5bec30002683692a700ac3a25f8f0a8ef9fa9e6f34844a6c320877f4b4883f36e7000000000000000000000000000000001214fee37b448c79b5c3097dfb65f8b181f16f0daf54861d4e5e7297db7981f2ea20622d12acfac04c066fcd23169f0294f11b10e4c45f15d811e3db4b947ee6414e262965d7b5c23a731b019e63d5130000000000000000000000000000000006e8cf07f48627571ab5fd1a6f988723465ea3f741b71b9aa9156c50e13d5481d66f7fe4006a54cb283c6d43eecb4ff9000000000000000000000000000000000ade4e4a949e6dcb45cfedf2eeb91abe406cccbbc7b4c7804b77d04fd7cbd91fd44f0053196bb344fb8ac1ffa37c83d470f7a0ee05cfc3f63d46a3151c20da53604628bac70d7b521b3be65d7b2abedf0000000000000000000000000000000006b130d66b74b99a2048127c24899ea6ccb0a53c4404f36371f30fc1ea99d02853d4555385a9fa022a552b85422daa71000000000000000000000000000000001824d4d0eebb0178947adf316258d297698ef4575d8ebc2bd300558df914fea04f0269fe67205db1e3dbbae74c0db22bbd991eb5e8ac8ad7cbf8fe64a5889b715a2409305f2366b278adcd2144d7be8c0000000000000000000000000000000012ba5b9c8a86cb99337a7c4955b1a1b459c8a1a7eb6ea908bf27d5f7e41d5f3423c1ff44b4615c689df14709c703e9ae0000000000000000000000000000000008627851a30e33fecf67dff807bfc5430a77d0a85f1e4f8b790b2b072fb7b86d5e81b934ce197fdac6aea60414a616541a9caeccc2a2058c2f5a271c09036d73320f9bcb31b7296a796ef94ca4599757000000000000000000000000000000001051ddad286eaf9c9ae5b3757c53e324acfcb6a1a7d5b490eb9479e337c9824bf619167bf8f2aa5c7f175da534e91a10000000000000000000000000000000000754b16cc6cc813c5c4d44eb4488b04abb659d89cf0dae5fd5f59f257cb396e139443a99b71079c5aa10f8f48465fc398ed4eec02c2af286ae19ad5f05642587cb9ad93196756d269c783a11f23393bd00000000000000000000000000000000035732a9fc03435f3dc3e31af693b1d1ae79110cd46d07541a35b956b928cb4a2de2a16cb8295aa8e8d0c74556b8189a000000000000000000000000000000000d4e762f40fcf43635151631fd6238ab3e1dcf578dcc84d462dbfadcdb621be918f1f0a7015377b5ff9c182494ae149c26f20eee9bd019f9e0f5c794e22e770128737198b5f5dbaf5b7d18040443a0bc0000000000000000000000000000000018f1eb31d3d4e915cd1e0cec33b4838da1401c6667d8ea25209e4c5683dce96b1d7adb4feae7fdb80144c30145d7f35c00000000000000000000000000000000050693e8b9c90d12af4ded25e05df86a3e233425e2f77c7ca9e99b0868eb8d9337186113b078f8083a4273c9411ac1dfc470a66cd3428a44a7d095ef410126257175597a333cd36ce6c9822d1ee9bb38000000000000000000000000000000000e1ca58d3eb507f977257ed8bdff474a05dee19a00818754e3a85f1cec882b8e3e0296d5c3788b101da669a716772936000000000000000000000000000000000532526ecf42eb00da76db02ab6236dc51a346f0a1271f1e9d721a40a4569d46fdb63e0211f7986b98475d81998dbf8be53fa8fb708204e619c221b8ecee14fdbcb1f94731ac2c858787ab33906c92690000000000000000000000000000000017bcd6bf54d51fa12356f3428f02ad8ca31131a77951459d32c554e2dc2487be1bb9f10450e5d1f38af3cc7de1096a9a000000000000000000000000000000000b7b5ffa4d08175916fcc542660c85063e8420987b2e16ed2ef9464adf928a4c0b8e6d5dc870b4f00de8bbec6f0dbae3abf8de43c54ed59b936e1d55032eab5c9d9e04e83e4696d969c24167b4239f6200000000000000000000000000000000151e2e32203b03a054459fe391ff4a4e962ba5e10ff93a1592043ad968c9f968a6e50b5943e50815268a4abe055a1a4a0000000000000000000000000000000004bd116c6857c2f4efa087272df160b765dfdbb842a342f9cd3e5cff006030f32e5a8b60acd8a376378096743000b2fe95f59041329b6c3e6aef01d3410836852f79cc436fcf23199e0985c56f65c4f0000000000000000000000000000000000ab6c3210ca0b70b2b3bb916f31e17b8632513b15a99c7cc61cd21181152bfc6ba6ebaf8e96a05d0d2d42a9dd3b61a53000000000000000000000000000000001308a33fccdd6cc8990c21fe7ed03bca42e3ae24bf07aebfe6878c2c8316a7a52477c929fc7c67a3a13ed811a2adda7b740e4a207ab5dd4a0621fd65697f5d30b8ee1440a5f5c5e74a0dbc6b6391c1b00000000000000000000000000000000010db7de8485e5504211088ada8924386b36b7dee37170f73469bc77212d56c3dce9802c7599c83c5cc5b18883cca5845000000000000000000000000000000000ae8d817daba71325b57f81301c17f401a6870a13506de2a443602ed44b6b0824e6cb763ef556908f9b3f30010f86394f49a3f82d25c6e0d69207e6dff010d56f0d99b28fd986c5711878dcb6665b1f50000000000000000000000000000000000fc19f1ad220ef5bd76cdd7d3ca08539a97514bb21429af5b1774d4c58a7e4ae137505fc240dd0ec01d1a9eb06a157c0000000000000000000000000000000017ce712d74d68568a945fbe2e0b21c180c58e9297f1f4dbfb0775a133832d4d8aa0688f031385190324f1e8ed65bd5378390fa1b452f887ef3afc7129ad8ceb9a8397f7625c2b249d7442566814ae0a9", + "Expected": "0000000000000000000000000000000016cd97de498b8809f4de87bcd5a66c41c231653fdec9bc1ebae0ab3b8c56258430bb13bf400f5f971a1ec558ee66ef02000000000000000000000000000000000cf57701a5038ec26e4027c3cc5a8cc298c2d86e9425ae027dacea92d4d475130487b2743c64459990e88768d8b7a4e0", + "Name": "matter_g1_multiexp_62", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016fb67277c28b5665f1b7aaeb1bd70f679b507a6b30f956a1fdc0d522e430cb4a9c089093cfd14714f25cc9498f89b610000000000000000000000000000000018ddf06c643bd77c953a0bde77e80e77334410d76910dfb587922e6dff23e821ebbee2dd546e65591726f9743defaf9a414ca9894bc15e6bca798544138689b2471f8171a5dc48eccfa36c83af142b7d0000000000000000000000000000000011d630f01000c6e1279f330893a18b903b7246031d7d05d80d4172b08e1da182594cd42934de3d1418445a76bc9c8189000000000000000000000000000000000c3e335aba4402bd3c711569e466293c15d89f4893ba91d8690e4eaf4c7962da458471e8c7f22c417abec313c2fd223399eac8ce85a1bc70c725a2f04aea3749d75d22c0df7c0755a5e76ab4d82ef942000000000000000000000000000000000c38e3a1c95f0faa10980976f83d85954813faea27c120fc3102de51096f6c3ce89fc4155c6fc878fbd18ffb32092d7800000000000000000000000000000000178d0c64b3b7da5b6f57c69bccbf73e329b18e29e9187a7af31b9b8e480b210dd36589540d77b3041472d9612b05693a49b25140d7967b0438e49f59a6b04b75bc8745b84d7350605be548c6b4b3aeee00000000000000000000000000000000146c5b46bb4194ec04b5b63f09e8066f24e350cc62fce016b8a25ae57877614162f2733a5df8909eeed2df30374004ba000000000000000000000000000000000cbb312823ea25bdbfc4afd00cb65748401b47ab7dbd5a40905162c1ea676268745af11a2770509eb74aad45663f7f5b6e30a51d55a1ac94089d0f3217c3a2182da6b02ce70ce7dd8e2d4e938bfefa9d000000000000000000000000000000000ef489c4443175873e33111e9ebb3140ca0796f13ce8d34b30d8fcb7b9130ea0574754e800fa0ad15d71c35a3584e11e0000000000000000000000000000000018bd8ba66d5b67537a03030f5ae56c01e640021ec2524a2cb4b2005ba267e737d27916dde1e94d1f15b6d3e1d480ad82d3da3db6492ff36102747d9d663bc6e9cf8f75b1cf77044989c7af3f11d66ae700000000000000000000000000000000182acbf5e02a0b1344779f7ced01961f418fa8ce94f939025110823e5d5116d771328362498324e1067a3419062341aa00000000000000000000000000000000174d3a7754b18715722a07ecff5ee3b7f30606c3c573770c88703b6e0abd9ff4aa4bd2879c4c0512f879af95554f47316de8753f3df8be42b6d6ab578096426f852de4ff545d2e4ac12c3943b044b43800000000000000000000000000000000178c3a28f9333be85ff364329fe897660261092d9bddb36687cdbf5a7a450f27060a3aceaf45fb8acfd123116f195d8c0000000000000000000000000000000015e0a930af79ad263b115dc733560752cbc4453f111550fe3e9448b6818a75babbd0044b9b4f133bcbf16f8fb7586055a28f7ef4b12c5097a15fa6394a4dcc3ceed6cf3c6240ec2ac949bc21a9f6447f0000000000000000000000000000000007fbd9b191af6a797c68ca85df2100b898e3a4d9569c717e3d02c259eb4dff3a1ea948e56001f33a3ee1c74eb966b6260000000000000000000000000000000003b892510d5073bc3597f8f513908077814a7efda2df6051c08f7347433703496e522d70ad4093f76a3e5288044ba5dca3d0eff3368b10d00566f35391bf43c9d204a4444b7eb91017f1b2d8a762d90c0000000000000000000000000000000015d26d3ee6fc5f98584c206466d2c1a4323f597e0ad665b289e76184770e81856482c9f45ff8c891622d8de353b172e80000000000000000000000000000000017fe0582d363a30677bca1feb6d7f16be6b07d6e5d6b2a2080d07ca306d5cf733103f20403ceb486ec703277804e7971b90d76e660389e570bef756e9785e39b9748aecd7a34556bac8399aa5564d12d00000000000000000000000000000000108de390a69c6001124820072eb5d9ed9eb5b5a6199c33db1ab0239c447e009df4296f5324660e7ea1133df0c8e6a9de00000000000000000000000000000000040e7b3392a116c7289644f393bfb24d84b76d8378c042d86cb4af861af42374b709cb0ff5341e3ae9d21271c32c0a5914f18dae096e4de75de3da284a5755efe51e912e180020a20adf1f5de43cb5180000000000000000000000000000000001ed57bfdd0542efe8734b0af448c025eba4d60053b7b45baf682cd310f4c2ea07e708bccaed390c2b061c89c2855c9e000000000000000000000000000000001496190ccfc4bf428706ac344ed691fbcc7b9d6a456f2653f0da421a44653d4b1e9e967954b847a4e6014df15ef48719e32d4645ce0172000fd74f30937261de89753caa716dd03a8b3269747f2349a100000000000000000000000000000000147e5056444c7ea97a319bc71a3ee4188f68b517b92c64f556d22382389c5bab95110728cbb7d525499cc3b2d70541b1000000000000000000000000000000000f05b91c8d05b31ef6497595ecee6a6766f03a006b4c2da408f4d7b7601915cef64be69735c269007fa23e5f91fb07148c8722e3e929ba21f1ed6c51fe5ad4940fb13d63e0293893135d0da5e6e038930000000000000000000000000000000011b1b7c28754f3dc8b21dc823fe02d617374bdb9b96dbca572eaf8897f98ce9409ce8a63eafcf5308d8236bc3c18b4960000000000000000000000000000000012360ef03ee4dbf0bad68232b8454a26b666d827bebac03da314b2631a45cd365248316f72e991004d0158f89ba5811839bef6ccc893f6eed62e68f5f2a07812f2d3066b89653431e7e39e8596bc36520000000000000000000000000000000008b563f6f97fee7e2852b44d8e39ca314963b517116733924d2f57d9c4f202b47fb3fdb85fbca42ffedcee290050ef0f0000000000000000000000000000000016112f264c2b3c838b02b78822d27f6351860d10da3ccb763c1650420bf22755938cb45c7566a2df0e4aea4f0281262ac395ba8f2553e3eced8a42b221a710a5cd2a5ffe5834d3084dc260ae0f51698e000000000000000000000000000000000a8397b009cac789cfd496f4f1237e92ae570f67b4bfe7e8c80171bb9d9cb53201c2ce112473b74646a4948d7c10c338000000000000000000000000000000000092b7425031fc7c328e3be114916a06305b62ffec8e7e93a591fc5f4f9022333cc664057ff6983677cfb998defe249553ef5568a766b6c39854ba059f3130b75d7fd870bfac2b00b626e2d71c4968e1000000000000000000000000000000000df6739202d9f1f13145b697d5b78ccb84845710923a0f3bfd5a3f337e200b3ce5390aa185ddbbe8088462926a7f4b40000000000000000000000000000000000d00ec3648b2e5790ca7b05ff32c6bd3249296bd693f520f6d8385f15dbaa9f808d770f9ba28efdc4aa6bcf862c17c4abadefc3880ca8dcff10b8b763f7d15f88965c2261b72ba879e3540a90c59effa", + "Expected": "0000000000000000000000000000000002665808cfac4b9befb1f285c590d639132adf9d36a4fd460de0b3347303aa056a14780deaaa02072fbb08e1dea06b940000000000000000000000000000000001ef22acce32662085c53b2080df9354903f151089faffa43c5f6a1a306d2254fad240bb1ba3dba4927ea5640347bac4", + "Name": "matter_g1_multiexp_63", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000194b906ed067bab0e26b9ff4c0ecd909c6aa23b5cab3a90d1761840b784bd2af6e9f9ca570ba6643d4781885553f3e4b000000000000000000000000000000000e8a480cf75e20cceb6e1d9db5594d19849aee6d45bb3ca7c0311bfbff8263420e0278b7e814088abb69e73bab6368a92c1a5abbddc02f453519563d6b6e05959d8de5feb493f7c58ea5e548cfec2df60000000000000000000000000000000019ab570a48bf15ce6f007b528d7113cf423e1c04d9af9497dac47a69deaff52dc9fc4d202649fced07378b84fa1b0054000000000000000000000000000000000e3c2971aefe89a629600a243c7967ef001ee17f9ac452a8131ea44815ecb6596f4fca4f47a316f62234851dc485fc50b406eb0c097237556228f3a48b7e770c1707fd583b91b4b6b70f398b7dbb0d3c0000000000000000000000000000000001250315bb81e9ef7de73e709f18003018fc1c55f694c0e28152fdb244b07dd2d7812c3ecc4ba362fdda0707d02d697b00000000000000000000000000000000188a852c5850f471d4ed207d5782518f189cd08d63279c4cf19c76122df0e4663217f1cc8374c7a02d99bf6d59a80457ccc30cf1db4c6be6dbc5830ee37b5782c6dad215334163a9d9e4deb962186f80000000000000000000000000000000000df12b5c659c17c808d8e875a1b9c125396cdc3d8a2bd6f99def15d9fdd1fc7fcbb309333cce1b778612d6114bba63b500000000000000000000000000000000019f11577152bcb0229e168a8e97804e8e00a58fc236c8ae59c575c07d6a3c1864b7c8132f245aeec55d999d54745cab99461c0f12019b344a7f322900b64fe81e0d8a052c0ff5e977f58753b1b6edc60000000000000000000000000000000004b007a33b0ddefa5ca9379614f698dbdbbfc6bf8bedaa485dc360cc759ffa4ace304fc64071e8f228a8882d5bbdce22000000000000000000000000000000000927e9f018b8cbc2f21b72f0f19994705197d4b6ab3f03e231e51b9cb3d899fd8f8b71feadf3c9be61994936535c61e8338ef9fa825e47b46483ed8fd2df64bc7b56da8aecbae704b7eff2e7d426f27d0000000000000000000000000000000005decc41dadef7dc4ebd8911af09974686531907e41dfa16c857fc3a2451b96069d06ce1159d47e6f1c97cdd932486d4000000000000000000000000000000000151d369a147cae5d78eaf7ed99623675491f20aa2cec9700053f853551208fa21e085962342072c96d79233bacc7adc1dd6656a34f3b12e5568b9c348fbf4ecf50d65a89e63ec0936591f01e6cc7a4a000000000000000000000000000000000fd41ed8d5b7e5ca6a6feae98592217dbe676accaf6e73062d9de9eced8af59563f7f441a50ffbb591b8a987c47988f80000000000000000000000000000000001199e002504726f2ce429cdb3da304f9b54a933c1937e8dc39a3a416d068cf46f411b207d9c6862a50962516b2867ea5202f32528e795e0fbe6deb4ef6e45efc70019520b01fa1d71d5505e42faa69a0000000000000000000000000000000017cc9741662834dcee7af988d3e4de2c30d4f9e90f2b3f7ad07f756acc793c58acb2a04c2726129d0f0c959f1d3154650000000000000000000000000000000008052061afea4c307df56a72530effa73b34beea4d731b1562de1e985ef455d39b0d6c57008ec092241262dd611ec598a2b39f2b893be03ab4da77ed518ef35b2e24278d707a20b67ab4d1e5972f97220000000000000000000000000000000019adb959f4807d3bf7e0616a8a3c02e9babc94b8ee9f8898f2ddbc8fed7a5bd88e83c70c5a98afa823a0f46560e32198000000000000000000000000000000001189adca458e0ef67fc686b5a94986be37c414cffcea5b4fd44430c8d5902512d84200007a93104048160ca3f5bbb9a8892eb7c361f05e114a645caffce9437b7b43fa01dd66c1e75b30f3abd0209bcf0000000000000000000000000000000013d55a4b466ddafa04c5690628dc29deb0ae9115a4549767b2aa22b8aa02a13f1db82dc86fa3df85a6a15463fb0e7903000000000000000000000000000000001488a03340fadc9e8f7552273699870ad444ea513cc7bb91259ffa7cdd5e7377d8fb5510adc2502fb8124d7914af85d5fdafc3f57d6116163f1da9e70ea645243c5911cc4ad4a969a57c46c6b5c73acf000000000000000000000000000000000a847c98ccbccdec67192529c3da593f1d6de5d7dc0bf4452e4f09e93c2c406d6eaea30431ba95568c92938150a00a05000000000000000000000000000000001201397edaef2f9b89dba7f67b22088cb954f95b9db3d1c11bd77aa0dc94def6283af2866a64f0028fdd87b587669f31660a77b2be50eb72fd108644d913b9253209972fdec2d107213ba47357c96e9e00000000000000000000000000000000017f76412c8e679676eb464204348d591221ba17a1c90a22b2482991deee6b61edd7520ed10b0105426a15fa3282cbff000000000000000000000000000000000c65a821d170a9726e947868d861717e8cbcd2438e4d4b8ffcee38eaf033f8f3a57af68ab6314a52952a305db54ecb361ca575cca348dee9adfe68f8a78d39bb998205da2a5285c12141a77ee7af84090000000000000000000000000000000000b14fc1d34bd7d85fa96a4d12ee99a6d327347dc63608f94bd750e2096dcf11066e384ba3c68610c70dabae795e668c0000000000000000000000000000000004f3ac3e885cadfaa565b1ec15cb81e3fd4d561b2a8d92a9287bd0de893563676118d34a9ef3bb3112aa534605219feb2e1e4537f855eb478274992cba4e3f50fd9e944f6246cd52dd1517b55bd7f71f000000000000000000000000000000000979231339f20ffaa38ed21cfcef923fc9a4ff77f7d6fb4df212a530ff456a32f50a77d2e7f6d87c4a58270c006e68070000000000000000000000000000000011ff95871a91385ffeafd8a609a0c562bbeba71a110081e5db6c8035d8176067a528f4d1c6d7dad43b3bb8d090077e1357f9a729aa01c8bf0271052202a077913a9e0c87201a367845f9b271c130e95d000000000000000000000000000000000e2c7c67fd50bd2cc8ab18808a69d62bc2d3f110ef49a02259163f8fb152da6ca9cc771d1221d7719f9bc349e68594120000000000000000000000000000000008393769453eec7639d66525d6e875bbde7a4a28c434c82571468d496c4313e12414f929139c482569c003a6c0dccadf3017593cf311989ed8fedff72bb1f14f72cfe5bb7446ace5274d8ded54c1372f0000000000000000000000000000000012cfa8448935a292911ae6fc175f3049eae5e30d714b3439f55be9970ca959f218157097bf9837125bc8f772968b0d52000000000000000000000000000000001747193c5402daffffe4b1ba9034231321d01966befa174f526014d6c27fe3683eedefea8690b95c8f71fef1152929bd08bbe9e7a307e380c238ec1f8e2010a95fff8b03923ecd9b012f99e56c77a5cd", + "Expected": "000000000000000000000000000000000bedee9e836b3e046bba7fca7632d09a5a25fe1f0fd25cc6ae1d1e07d98ec52742a60bf346285488dc84b2360e0db58900000000000000000000000000000000071ef77988eea20a38fe33564689a39a7113b1715dddc1b212c6edab6bdea8de54089eb7b49b63296792bb2f4aa68733", + "Name": "matter_g1_multiexp_64", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000b7db363585b0061a4707a2ee67d6d7220e9209b4eb9a59c02aa6e177c948057826780f292dbdd824d67ca9f78864cb000000000000000000000000000000000a31f49bfddb5c48730e1cd429f128a540ff44b6a5031e7975ec0c6661f9f3f2b79ccd2d13cc1b50d50ef9c7f658d412cc5e9d01f6ea67dc3f943d57d9d8b5791d823592f7fae6719804c1ca097e651d000000000000000000000000000000000d4fb266e9fb18590037394b18971cad5840bf89047dc11e52c90284642be7e27007c62a1e331a2f90ae67313efcbc0000000000000000000000000000000000047b518cd6a7d7c4d262d1f9f5f11480e30c626d45fee2d6caa274aa1353035a3c42ba96b5875de36442aa5d4b92d6d257b8fcb85e4dbc1969805d814e75b2b80f5cd1e5562bfc1e28becf731aadfc58000000000000000000000000000000000cdc9bca5cc807710948d5189dfadca2cdfa6fca5496234f13024efd84a37070a2fd51a609c4ed6aab54f8687ac9700200000000000000000000000000000000011bc450e4222090603ccfaf7c1dee67bbd59aadafc3810d3aaa8362fe43f48952320e25bebef482c5d21a541400df5a03edc53ced9ec5d7f302216fd30a81c3554a3fd04994f62b5e3da74c8b71bb870000000000000000000000000000000000015d20abf274edf0c9d45c2675e4af7987e98005b2a0d128ba7df6b16b88784a7134d37d0da2da02557f88d26de33f00000000000000000000000000000000190adb20cb0f5902f7e92f79dd6e7d214eb892834611ef222e9a80ade4c7cf96e0b5f9382b61715e1701c7e9cc4f4ba5976568ab779e335b8dc67a64f15b947e69cd3896ff393f51fbd3c3e3a157543f0000000000000000000000000000000017dcf175327086e058e4696d689f2e8a167aca5616f2317b7673850a2272fd5742b70eb362b37874d573cfefa25ce3ce000000000000000000000000000000000e5e1af08f6174641aaf4f1584ac40d53c393314dcb1c405263e8689558445196371e2858a4f44d605550fe0f15962223aa5eeded490a17b1cfa66d409811741643b7beacf312b9d6c8e7e7e63579c830000000000000000000000000000000008456d980ecc64b04a203d61bdb78bad67b4568b2dd9a123634cefbd7f7077cd9a4c038c0aa3654915c12242dc594b37000000000000000000000000000000000adbd582b0a8ac28ab21961476e163255089c2d362bfe9daa7007a2c9d8d261593eab22a6bdaa9740da81efaa24cc3d5f9f1f9313bf966ea3b8f09bbe9dcb66a7f9e3e94e2024c49a72ccbbe03fe4662000000000000000000000000000000000b02d326ecb5c04ccea4cc3d29f82117f3d97f788b8e70cbb346d43d27e674540c7a94d242d290e55d992eebac546c9b0000000000000000000000000000000013901f8dd68285d73093c30b37419ef8e4b28371474a040a2ea293f7274ec4d6ced0f32686405205324740884306e3a693be64fc3763d06111961bb208a2b858aa1ff181781dda630ca41f0d45ef2a9000000000000000000000000000000000181bf2fe4bc67a1d10335a0ca9427f603610646de485a7cf039f0706c0a0858ea694db3b3e5ca85317c98b5cd75865420000000000000000000000000000000014b1b652e2ec7d05956705f692860b83713c5cc98c6532b3df50259f27f92d485e8df846883a4af4e46020ae54038d955d2a2b6008a3b4a4cb3a8c28864214c7fbe154fedab1f9ff8c96eab6a5f28fd3000000000000000000000000000000001084f77ef23ac990b43363db38d652f0e6dc04a4bc395c8018083fae6fa6e42f463af7748d71f65b14f94632ca0eaaae0000000000000000000000000000000004ebfd75ecc9cea5e49082e1adacf6b50e4f14600d9343f6459900605c5f36ee51e95408a3005c0c1093e41794c282a0854e742ef7c76ad438cbf30c30103741f57ebbcdca4d6c4f14e554dd1ed81b2400000000000000000000000000000000062a062d2ccf5c131e1278a63e713ebcf8a221e429b52b3a7688f7e68a12558fd0f584e03835daa3988233d6a84010310000000000000000000000000000000013e9330d29635892fbe0742d1a8c96ef527b78ae389385a366b6dcc6a04b8cd1d5b8bbb79ea649179e78fc061d23cafd6f4f00b2494a32844e01d0827ca78b06f5eb40b6769f36a04f20eea229c305f9000000000000000000000000000000000b131e0623b7f30bad70145cc4964257053f2ead992d28aa5b24c04bc316d479d077af0ff409cd395a86b808bd3e4f02000000000000000000000000000000000380fe6e79e5e0a399365d73244f2962facda8b7b381c111508819309ec5b1d3d8783067245dca26641a966969dcd0ab191e47a0b0c72bd17319063abde7df51498cf0c980c46946bf80ae4c9864e2e20000000000000000000000000000000014971f46efae601309f3d16c15ab5c46ac48d2199431fd959cbf4efb768ebcc4f410fd66de04d3280659004a6b54e64700000000000000000000000000000000113e6438dd8088e73eed84d24ec286a45ca51f0fda88c7ae3f1e6a2195f6b11877e606773bb9a8db19dc92c3b0729754b7baf8816db56c0a602cfb4caa9089136ebde05722ad4838671e45ada5c716f20000000000000000000000000000000006fceb59d8baea4a10aa9f1e825631e28bdd379189eb464a3c6d2482319a09337a78173f9207a58ce15bb1c518b39328000000000000000000000000000000001609e1ff34ad2e4bea4cfc4a993d8d52a1a8676679c91544ded432adfd7fdb5c016f8d825af1c6b8207170d05c10e04a7d9ac1699117bb9b8b90e2fb709eff4ea0f7882bdf6acc6885c9458703cbfb3500000000000000000000000000000000069e48b113b822cdfc02f2f0efa02724193a5f032dea902b189290db91c6e4550fb33e2915eaa8e56ef329d6c61a0d95000000000000000000000000000000001426fa2fe7c160e8e32c3252383a7c7967b3515c3f76eeefaa5c76f02b3308d86ab95f9a3a0dfacfa6dc12eed2f3a5e8a22b6c1a24eff71f0fc64b6aee8d3d2dd0827756f5c959f68f1216c2dea58503000000000000000000000000000000000c173c6c949a7f21df4431025ce16c18b1008c75b8b1b23d03122c7c6ef714b5741804ec7aa5ac40f6b72a1a74ca5c340000000000000000000000000000000001b32d54f8f9839dc39e08bc6a5f0efc5db9bdf487a60004ee135c30efda577d187d9b9e68bdcdad558f2028d66e935cc0431e6877166686239f014008959332d9d009a801be6a1e68c2de52ee264bfc00000000000000000000000000000000037d1cbe4534b82ee79b2c957a6eb19d18dd3f3f6faf3313b0ce12a98953190aeb55f9d494bbac4f56ca6986c65f7668000000000000000000000000000000000734f505be94516149bcd6302a2c9f2f9b952c9e614c8e90b5466073a7e734ca203fcca242cb97abe1c532d7f59a783aaf833a784d22b99537236fb07ab7b59918783e35b89fc9692d7f76a03e024c94", + "Expected": "0000000000000000000000000000000012de1cacd791ab81eb49d2e259f36abfd90e8c7ed4f9f23a4c95cb48cc7bf9df233951291342d1266d016a7fcc6b9d53000000000000000000000000000000001938d574d02b8802a45ddf8488340f2397e93125678400cfbd8e64cc3805704bd5f85f8fb2f64a96ec1089b03d9d1c24", + "Name": "matter_g1_multiexp_65", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017387ec261c6dea7bbcaf4537182de1620adaa5842cf52c8b5b6cd851ca3c27abafa584547db7366455281d82d3f83ea000000000000000000000000000000000246dc1cc9773db7151e05d131398146b28850e97f6b13694d696be374095fb153b206723afcafddd4b3b56bb15bf778b16c1bc60e1a9be9a82c93b7e0311e7516a57d687d8907599918df77b3b6caf3000000000000000000000000000000000a909dad5029834df0202c298a577f897a376b205812d79e0bb58b91ca11262a766dc396f69fd2b199dbfa52670515ea0000000000000000000000000000000003737873dec25f011b24543071a61590646e4319a2128eed87d40193a22c47b1a6c0f807ba3115a7e45823e5a4bb433dcf301dfca76a83c70552c9cbc9c80cb20f0d82a70a9d887b04b150fa0764ce2e0000000000000000000000000000000002b959df6a1badcd306209c1f3c4c496cbfe4f00995cb4403b04ffa6b9f2c8dd9875a2747354a653a74fbb605eea50b00000000000000000000000000000000004d6b15939c8e282a5995c8c0b67fcba3171b35ecc039fcf32d1e96671698d8a9fd2cbcaa7019cfd01e56d68cac64fe51cfb94c4e029a2126a9cf5561c677687f52059e4b7f8b7e7e73e5b1dd7f421290000000000000000000000000000000006be65e97560a40394d9295fac0029a0c889bf803f09926359a1ac40deb7777cea7dc5d2c4a9600328605fb994f87b5600000000000000000000000000000000128249d2137f7ab1c5622a8eb1c59ee8ed792fe6b09e4d868c9d9ba900a8d28bde5b783ca591f79e1d729c99e10d5cf6d8386fe6f4303959e58165b422e98c4813b1bad7808594473e4e66df09698cf00000000000000000000000000000000002244c1e55324a4aeaa07c414cd3f9872290e729c1cf1c05a5b1de3443e12b2335cd36f0e84f11f04b62af37005ce0ad00000000000000000000000000000000151684aed084d38aba7127434ea73e63219c4f5b4b92017142d19d0330417fb2806e31440e0bb7c9fca2bc8dec73072f02e1c432f3b55ae87ab815647f196be3e138b2f6e9fe7acb9459650246187eb90000000000000000000000000000000009f0c959d995af6cd0d45750cb35a28461d0f791e59b2975ba4edbd7db015858b41b3b7c5c2da0a4c6a5d7b4e855329d0000000000000000000000000000000012d495ae3096c2399149afd00f640f8840c3f8e5dda5835b62ef0dd8bb7303f522692efa72c37190bf6808ed3d4fe8e89b0cc0ac499dffd627f5d19b87817dcd67e87561d5244a4b5698265f8c5b767e000000000000000000000000000000000334cef31670360b5ac7550b55cb03b770660ee79816a2742c059b2ed6cd9d5c53c5ca54793a9912ddd7603d975c3f58000000000000000000000000000000000144f221db562b0daefb20238a527a10ff1ccc279eda86723668f8ada40b41a2825f82f5ee5d619fb193b9c2b4180d932f3875f81fd39c9b3ec74eb269903dba4173d8eb0e41a196d3131252207ffa0400000000000000000000000000000000037f14fb2d51b25cc04768d50fe26c1e156a3478b80e32da980f7e8d5692a4cf282f75e5d8be325ccb4223c7ec2c04af0000000000000000000000000000000004eaf2c069c96dcf18051a2c1d7ea876af67bf344070415894c07b3dd69330d8ca18e1313ff57d83b70e5cda3c9ea8582d8d4341822dba68c6fd58cfebd07b134c1d0c4e32ff63f7d59addff4df1ec3200000000000000000000000000000000104c1f5bdf874c91020d410d8fe74834cf15f341b86e66ac693003766484cffaef2c57fab5888f02f5ebfe1b9ef2fffd0000000000000000000000000000000014a2f6d185c2989ecbb766179c0b0d0713ea9714da2ac555bebf0522ff00766ea7e39c8237f8515224fd096d2b1ede34efa3dab1d7cdf949bd938ca6ac371f953b3bbef1aec7ae76bda37db4c940b3d80000000000000000000000000000000003ebae6a494d46ade2dc7d4630a420b519df7086b57a33da178616d4242fc20e4d02d38b5d00675d2cfdb51adc1921f6000000000000000000000000000000000edc56e6eb4aa8556225d928408702042d49cf3e1410e1c78d8ed5832ecae449d17c9d8f2a89ffbfaf01bfcc85ebc1669848d3c53632dc461619c8c522013b83550ef3dc7fda197ba37c9cfe4340f5a50000000000000000000000000000000000f96864832e7a9602196f0abba78f456300796d5afc18b0ff0c5c23b61865256fe5cfb960bcc8f73231c21b1084cf04000000000000000000000000000000000c59dcca2249b5b01c1b54be0e4114ae8228bc150e5ac7593bdf96136cd7cdd7562eb936ddc5c9e42bd93abe91bac5b0cbfd192e917f2e0c4d6253c4e4755f30812149d1ce1ee4ae5540faf1dbfbc13a000000000000000000000000000000000422c390e56fa27e3d7d5da1b2ef00a29d5340026becefc095d4cfe830208d3b94cbf5ae6f4506ae45d04764acc8044c000000000000000000000000000000000d1cc7c147cbedefa854fb9764352a9689fd157cb2540fe070ad7f6f3eaf761b4670ab9334de4002fa811aa7a01aaad479eaf11b3a30c7771ce63cec214416d798de20432670280d997b2f0631007d6300000000000000000000000000000000018000e31f0ca43417865a1cc128f33383106f5bea71015e9e77cc5320cc3e5704e437ae8d84d96f2c4530c41bfad29b0000000000000000000000000000000011a74c3779c8f351d39db6745210972f4f299009afff643e944f30dbc4367e17271c688e1858e6f79b6636787fa56e6b43077447b67f65e16a8aeb3564b2d13822e478dfb4a82a15a1c8fb7cc8170cc90000000000000000000000000000000002a6c7367526da989ae093350b7c1ee9013f977d6e75563f996e1f15cd4279932a3e4060a26262f27403966a7e0111f200000000000000000000000000000000038a85281b09e5e68d7e31bfc323c9c250b42248cbae47f9c018d72f3e69ec572779d7f8fc6ed3f027499741565274e5eb64479b496c17d0587f6f26c62752881b6a9228643e8c43f21c441eeb643107000000000000000000000000000000000b788a0d47da0daa1f0d802d340e68f9bdb5ddf91875732b4ae82f1a89ebb5787ec1c9f539b82e3c94c36a5df4ddb4ad0000000000000000000000000000000016f46ff55e9f1e19a332ba4ba43d66d2a11a2728a484a719ddfc9e223b54224db55af162e73a8f5c3355f0127a6b7cb652b42f75aebdad1bf433917c025800c4f4e985cc077db3ba36f7484f95764e89000000000000000000000000000000000379d868d91304b24e19694937402bb685f064ec5a89b49e243e2ab7eff5ca0a2023af9828c4ce9f768a1d6488c10e110000000000000000000000000000000011a9b9432ab253d47e8dff776c8b5810ecf7f7aae2ff36ce06b87436b4e20c22596c7713def3886549a36bb535a96fd1e83106e9ea63791eb192e7a035bee27bd049b3a37f080076146eeeea6a769384", + "Expected": "0000000000000000000000000000000001a50ddc4d4542aae264dce69f5f5e93353a9eba30b177b33c2f74ef61149a301599beecc4d0f78078dbb9638eea526200000000000000000000000000000000160a2fd67df885232b06d3dead7ffca93cf0434a3e9a5412ed3b4c342819b44aad5385bf5ab60bc2b7191722d1372183", + "Name": "matter_g1_multiexp_66", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008788a699276abcc2d8e4a35a9d0ddcbd8006a809799374ffd56ee8afa1a89461602d92fae6eba7fdd4045ba34d917e5000000000000000000000000000000000c8e03ca0da00c6829e2d7c49360e67e46ce12e0c99cb3d957119bd9c8bcac8e03cf32ec71db2a18568157f4b44cd4dca4d710d2f632e3ed0ef69fa0219e16ba30d3efee99386f1a5c921f4548ebf64b0000000000000000000000000000000001373b4a0653f48c205b36bc50541a43abfcf35974a584953bbc40f5cabdc3ac2047bb86267cdad1e8f00766682d2e6f000000000000000000000000000000000faa8c977b4db7a3c9e65d9cd5af4ffd2d7d67fb038d92c1096124312a98d94e6dc3f3b8de73eeb057cdeec4bc0e0482bd9ae4597aaf582857b40096360ced0f044ea172551c6f9fe3a15e0ce290b56b0000000000000000000000000000000012dddf5b96d0dfd2fd619b634b086ba5d5f25a53e93938559a7adef7b988749ca27d14f2ddbf5a9e7e6c1914403a45b900000000000000000000000000000000044b5c8041fa805cf2ec5a243814308369e5af534729cc9608fd17583a48132809f507cdb5b76fd6597fcababa865ddaefbcb4bad99b419820eec388f6f62ac8d87866d7beae6d431dfa48d4243b4a4b0000000000000000000000000000000017c5807458fbb875593ebfe83c49ac2493ddaa15671a59032528e0464360c64bf564f9727959108940ccbdb8d01f329e00000000000000000000000000000000121dcb798111976daed483f4efc95f968f5212cdfaaf0497eab0419a1b55c7ee4e2ea26716d0c1a8aded4804228b8ad860d89acf5b49fd1f70fc54756c4bc1972cd8818e36efc37b422ba6a9318fa134000000000000000000000000000000000717296a20594f940a05ed3ce4bf2b7779c428b33a297087e08b2283b33228a7d4d5b9c49a71ce036d6f2a078d8344540000000000000000000000000000000000fc78f64a461fb66ca081ff4d67369058e57e5ae0e284562161fc3244bae0b9c70ea6abb2d0da6cea4942530c64ea0e386af376b9b393dde994da419d1f7aab60023546647f7b069ede939386bd6ee8000000000000000000000000000000000584bbc0c537e7f37ee64604a134d5fc21d838c51a89c608ff9e3684357ed7f931fbd4fa4a5a56d20304d6f6f072316600000000000000000000000000000000191ea3bf1016b6402dca2856845017dc49c74d06bc3c5f10de379e04302c469015f205cfc97fa142727ba7e2439c15575ffca78eea65c00e1128f8dcfc96b39af1c4472b461ba5262307003bc972023d000000000000000000000000000000000f1ff007860ac58bb04d992d639a5f882c3c647e76e2d6d96888a55648f81ad8b7edb3dc2b0e56b6f2dadca73db7cbda000000000000000000000000000000000fbb952eff64505e02e0ab34875d7a79c72ab724cea7cd8f28df2578b50f78601b9a9eb4170e1b7e8d94d9db252e23c592837b4314e63ef5a153ea2ec4bd373cc3cecfa3e892c3a12aaac8ddcaf5905c00000000000000000000000000000000011dad65f38b4c24527ce87f8893c8331a32a3d058cddcdec9f8708a3bd1e31871cbdcf944ec14d5f101b8d138b2a46c0000000000000000000000000000000012a6981c5100177e643dc421c5917896455107c5995b1e969bb18b4b2752700a18281f732530af9684db180290dcb138127ef2309c699a3602b0d86a070baef0eef90f539aac3cb6ff42cb19f284bd99000000000000000000000000000000000bb4dccab7abf3f5393a338a3a07fc20d337ba2ec3b33227e8c9a832900f347d582d88cab123dab489daf471191538b20000000000000000000000000000000008589985e2952db000968a793cc0fb5bd1764ab1ecdc6f278a11dd4a1de87823016e14e9fdd682e6c489192b154cb997ba0f9a93c2fe35877ddccee5da39ce5ae60a6a19e72481319e3b3fa2eac6148900000000000000000000000000000000056fd39f2a5356870a3ebfedf35769710c16b2f2eb4a061c936f6de4f9001990769795b1c756d7c67623ce3931ea1b5a000000000000000000000000000000000b7fcba295d34fc38739c4b36689653731fa46e6029bf8e38ccb6af5ae08ffc09c86abe0de62230844a66cbde876f52663da2f227d636f10e814e360c2156e686e26ce3401dfd15f47c4ed277d05353f000000000000000000000000000000000039b08e7110b0d17c41709378f75844379c662f7f3dc480bead6bd4996de2d8889f458aabca142d50ba0e34c0c327970000000000000000000000000000000013363b0da7c7dd343ffcf6cc5e9ddb5b51480b04a472c38f90ee08cc97507f5dd665e15a160860c6df4dfec154c1504bef79e3b6ce752d140c3dfb2007a08221d989038c921efff3bc4e150a6155a33e00000000000000000000000000000000034edf693e1b201be14c496860d508d12d9180b62cf3bd2407b8ff95b93da67dc0c4c43344614dfed516d7828ffda4b20000000000000000000000000000000015246f388664b1d817fd17831f85d84cdaf31212f093820835f201c3fe6ac99d67cdcfdda3c2d74d75d5114e32c65cd7bc08091af8b8c6ea5c26f1a7d795132521350d774042d3a8c0523e86fdd23a3f000000000000000000000000000000000982b8886abbfe18cfaf4c0e16c2e7045973f5efa27e5cdb56443a22f5434e2456cad041bba3e6deafb072e5fc40f10f0000000000000000000000000000000016a45f684caf0eec143cf8f31ed5111750d8c4f1092651a471cb88cf534e81df117e3b0e8238270d3b03aeedf04d7a9f70363101b87d685aa7314f6569fca0775bc6aaffabe136e6c336e8fa43dedb8a0000000000000000000000000000000016d13da2900e2b2ef8f6ae295bf16d100d451ac4709455c55323988c71ea6aef694de0fa5a33cdd7fa2512d3548e39a70000000000000000000000000000000005795677001cab950d1a7b802bb14f9203036f15fb335daa5f0b0ece4bcfcd3b31b581b439da46452e4e688f16685e37997ff3852cd97c3a65bce9083ff66197fd5c70894641195514d556102f091e88000000000000000000000000000000000b7d422ac85798cb5ef5548805bd6d3de20ada4994fc38355e92cbf0d0c9da356a5e9e1674a50a017643f652f71226e8000000000000000000000000000000001715616f53a501acbaaec470121caac29827b6b7bfd7e689d8e48822d2c464ae50158662e69c1c232ecd09f5ec946a7a5ff95dfa306f91196849d752569b35812e1db7946708cd06df9db9ee75447bc30000000000000000000000000000000010e7530ba600fa531878ad0f798a0ede2d025f149ca980bcdbb0e4316e8d2e7d2b248619369e36d21dfd766aba5918070000000000000000000000000000000000ecfa746f1cadbed34fc1ee3483307de400ded69af4a7dbb598802b7908495519b0cd4c1fa98c9cd8e82daf8b3e836e03c4308f0467520343825a91c0421f9c9c9d06957fa2fc051970f14085339e26", + "Expected": "0000000000000000000000000000000016bbc2dfb25ff6cb9cd03b0cc91f53c6ed9be933746d59e78c7251080856cf47c12bbecda442840675b03a812aaa5d98000000000000000000000000000000000555b0683640ef1795c918f5d10e8b3e07a09030fbf26eb34bebfbeac34e13c93ecf53d54dec5c8654cdedab2fd60570", + "Name": "matter_g1_multiexp_67", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f08b9765910d97ac42bc31d4b4c8bad5f3db3fe5374f11ae1c08af41ee226bbb4b0869b039fa81a935025de11b1d1fe000000000000000000000000000000000ea29999ba91652e2e6dfdf77595b44da8e5cddf2e3ae6c782dbf1f972717833d03478bb8651bc0cc7946d813371aaba2849fab097a4f71bdfcfaf435994a0c6ac3671a4a9ed0402010be83ff95228fd000000000000000000000000000000000997b39892bfe0c67c296135573975801ddb99d06de02d96853f44336fdaa25dcfe253708583f415d882115ec68dbaed000000000000000000000000000000000a88e2f75817ce91c7dbe365d67aca52186b5e94c735e5893bef6aabc61f015f854f9bd110d3201be6f35147f9f9b8fce6558521e301eabf09e80a509b46cf8ec118ee8586f4e46a7313a96dc37ba6990000000000000000000000000000000012a730eaf214a874448e654a06604c4b9218f163b979bd3700b7a7fa3856b814c380532afce59b6253344da5bffd684600000000000000000000000000000000182fb293f9a63c705501aa0ec7ca72698d7d4d50af3a0f68ee849cd3f82ac24aca2e2ee813f68e708991a97e58f2d03d8f2f7c525fc0f353700fa823a5d32a93189699206c5ba5ed271a158ebb47674b0000000000000000000000000000000015bbe08935721cc6199f9255379589a4512c178bbedf69c82a0d9cba22b285730d4f27a3629d92574b2c24dbe09300de0000000000000000000000000000000007aba01238f2c4ef0192fea78fbccf2e669f802a2822baf067632daadbc1d07e70095c14bae959a0f706092b0be10335c7e8adc0f0a042a32c733b5c3356cf4a7d648be51c1d78534ca65dd43a0c13e40000000000000000000000000000000011727d6d6cff667f5bdec92a3b502f9d9fbcded2ef12ac058ac51ccb4064443b7a2671e9ffa2fefd9b121d89bb4ded1e000000000000000000000000000000000960f8ac1e52246529fcc6f8f7cbaf42677297c00022d312e0deb5fc45d3685bb33fd68c193758258439864ba4a073e5650081a6720845a20164ef7c06ce1e73286a32dd64efbe57fe46765008dc9dd50000000000000000000000000000000014b3a9296c87b54f8f51b935a8d9ec0af44d711e3109e75fe34f07d0705e9ebf0ba5e81dd8b7e3c4b4f862570637a7f80000000000000000000000000000000005b834857b8629cdbf514e5ac2e0e2a45e4374c287bab5e4c163d669e7b1a36c72cec1ab7d857e28f2633a6e5f298f55c067d18b95591f7f14261f95513e1990f5a4f6908f94a015a93fe379726d5120000000000000000000000000000000000ad8c626ba39823a33d17a4f06cf17d29e9e0ae3f28db0b369fa0bb4b7343115fb3ded39862381822c3b2d74ab7f70e800000000000000000000000000000000117230d8da035f40c181b50c12370f159748955f63ee1eb61e8242e476575e9aaf16bd43b7e79a35ab4e2da20f43fd92b448bb01a1963bf74e0fbf99329005af8e932074358d855ff43c213e02bf26bd00000000000000000000000000000000027764a17af5328811b305c21b0fecc54a3f225eaaedbf453ea4c0724fdbd481873d84b1a7ffbdc7f1cb07c2d1efaf5c000000000000000000000000000000001090ec8d750ceecf682de76d4794f9a8bbbf3a3f4ab591fe882613c1b6db0912696974a1f2ce349bd8c79acb4891719d441fc4cb1ea8f86af8839aa40c35c0706f3a159b4bc902347009f744b73cee350000000000000000000000000000000015e707430eae84b75946f21e1fb0b6ede203b843671911923efd9674421a92ff13cd900bee1b27d70b8e8cbeccb165930000000000000000000000000000000001263ed28f531d8197606a038d7d7c3e1d732690cd69f52533470f6fbef193be5e63d5af0dee3aa8a73a23253533f8223020a1ab853ef2018976e43cce2724105a2526b28d23b0226c49ff3d4a03d40c0000000000000000000000000000000007fe70102db7df6529f732b5cc2b1caef0fe03af9824a5097922dc0b07e5ff32bc195fbdfd7b5e4b2bbcd75b1badc6ef0000000000000000000000000000000011b40afd78bb5e835227e5a08f94f7c70b06dc010f5a710a025f589521543eaff27d789d4de10fd4020879b45bc0a9dc82702398b8c95c3a8cd163a8a3cb2a7a04030ef99404c325115e9a9312e8c1bf000000000000000000000000000000000e4df86963d375710c681c5b3910fe79446e73e00613bd554ee20f47fa9e2b0cfb6c14a29ed6dab0a56c49708fc624d80000000000000000000000000000000010029bbd62162cbca140c56354ea070ae3f1028e438c70dce31e7bc8691541e59e9168e9b689c19d177d4fd68f8b1081338468a325384a9367c90bd0450816a22849b845aadaf187c27b3f09800e791b00000000000000000000000000000000097f3f61b164193da313d88429a4f34b0ef2f864ad8fdf7183c3e1da02dcbf0ddeba9bc04a7594516e6255ed59527e110000000000000000000000000000000008133f297b8da5dac5e1ac3db3073587b92a5d821949968c125e5c9c79a19b5945ab47fb0ce5d6f4269231596b157826d29136cbc4764346e7ae1af92fe64560f453821f96f32a42a2006b6edee7502100000000000000000000000000000000028cacc78001b805c3e43e92fb8c4477778ce81fca9068240e0088e344cc8201ed5bba52e7ee09d5ea6f982f30d6ea2e0000000000000000000000000000000012c5db0995324657574a27c48313674d2ad3aa931cee78ade96408c5e04e6f5f8eae88018511ff156bcc787970ec40ab675a59418f1462247d3bddda5937553e96d854b5df64a68145a193b2b1a7eb25000000000000000000000000000000001768f68b0ec15fdd37c3ad9445e53a582ab5546f9eeec590b84e11f5a72585eada71129d1b93a72b334bec4df57ea4c40000000000000000000000000000000004d6e137e66243b56bbaaac98717061b36545c1c3e24801e6e054bdaaa6d28d641821a51233175f5e5823b7d2b7b42cc544a345719b40f973398a6fdaa2044037cacd7f6c361921c62053cd51f2e5ff70000000000000000000000000000000008caba9658e420fa17950c995efd00447bd5074af9b57122240d4e709229d382e371d7de867005745a35a2a7d68fee8200000000000000000000000000000000072e0c25435616f157284b48fc8da4a3fdaefc4f6d484e071cbe648fedf30b5da4457852d7715741615317e21110d4c2bb38b4cd72eb18c3ac87860aa58b4b439712562f742f112b5d769415e9c19d0a0000000000000000000000000000000016c418a3b3f054188d6891ddadb19c00ec629a3ae0f49cb1b6801a9db0afb1b5e473c75cc8e9f352adf7ce8ac738ae0100000000000000000000000000000000110b8099a39e40541dab01e10314a0cc10fd2277c8766c7c73d32d7d0c6edd3ed3984c8bce249de4776920dfa28ee86994a849f6fb5a53bd5957e53ade1baee05702185b4d0fbb7c1cc0f46cb75614fc", + "Expected": "0000000000000000000000000000000011104fff0cde20e65e73185321d26defcbce9c9d3c27923a2366730c1b560da80066734c61e0c42bac1da45787f39e2500000000000000000000000000000000066efa830182669715da4dbafc6434be27a2e95140cb39738fa75cfba2b5786d27fd727df4e9b0195b49be2dcb9c2c1c", + "Name": "matter_g1_multiexp_68", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000188c13fde41e3c7d84ef3b5d1fa869dff4bf02cc8448ae49c6b72cc005bd06916a5d0a74fd770bbdd3d2c58839840095000000000000000000000000000000001637ed432b4ac6b5021aac0c9d5f084e1f6c541c101a3d650861f7d860572795f04e986c4a890ea0ec049da7c6025fa3f5b9d270fe31c772e9a0bb409d9f08a07887f045f906f30e2653d293b6c2c27700000000000000000000000000000000063a1afe2f64f1d04f7a5aa727cbd0e9dd9b66234120118db1f8fc3b90ae50cf493c3c4a48949441cc1e46488972d39e00000000000000000000000000000000049261c42dea531a6e8fd82f77605ad0cc9addb23e429f03f1aaf2fb8d9dddaa89101bd5b5b169dce793de9bcafc3b5ddcbf4fe86140c50618598be9185830bc1da11429162afe0528f00eb6698ec0880000000000000000000000000000000012ecb0f3bb6fbb4802479611a25781ab09c81ff7175170805ebadbc5f25d2c40bcaca855ece57f481160d49af008d2b3000000000000000000000000000000000bc4bccd65e010b69676d3c226057528dbe08271d65f83a918b06969c1d5303cb7383645fc19548eadb83649ecc54a551d7fb7121ef0baa85046567014620e1adfb9e8b3bc95adccbf2e0b0ea8f37c67000000000000000000000000000000000e3dfb86c2eefe0b25f117484a9d693702496124fd0dda80830a4e917bc418a793519dc269fd4932236f73506ecc949300000000000000000000000000000000140faa4b38ace6e80e5d3fdd57079c215792672ce651563eb013a90e66665dccf6bfc9f9df145d34894e3972eb524f86310d3b0535e78d803b477e5dc26c71bb18acfe66bd5ba5892d924d265afd6a160000000000000000000000000000000016e70554f8580b8e9c5e421c6a6495df7df846ad67d5d4334e9aa89f7e3fae505a2d335d21624e66aa542dccf38081e0000000000000000000000000000000001090383d5f42c056c291a4c4c6127315849c647783a556aba3dc41c52545549d67560bdd697fd1f47dace750483ec9b72fc9417e65cb76aa0093a7deb3d38c111c68f461a4aac57d8f09189f94407ee8000000000000000000000000000000000e8ba15ec58e5de08935384a3674418942311beff3887d7b5b81da0d03348791e4b17a06397e33e988ac6719f4d6f5c300000000000000000000000000000000159841665c915844ed85abdec0c1e78f178df2511da4d3be989f27063a8e572fe746b20e3aff056a63f4832d82a7cc75aa0b2d714aff175a0be2ba9e675a2be8936c42f15e304a146622a95dd6b3e3ef00000000000000000000000000000000167848a43b68c8f4c205613e1440f940735d7d44eb1b046e63ce50fe8d7acc5b2c020fa936d6e07347a7858be57870e5000000000000000000000000000000000aed7f9b7108aa4e7445be41bba256667ce7587a867b9b8ca70d3c42155521ea3bebbfe01bab038969721364eb758be10227c3510ed6e4c7f84b11ddd2d6caa55e0e79ed59e1cc0cb325d55b5d145aa8000000000000000000000000000000000699a81c47bcab8342b11a207af072cededbadd374aa79f6b401e4bd5d429a0443234522a8955b3a62a21ef6697410270000000000000000000000000000000008ec25a0e0dc6a3c8906a1b3413f522440d56f67fb780545fa022026c6faae016108cb6eb23d6d6d519a4aa790327ae6ad930000a9f82e082d408999b396aca2b0e435a66faba1d95e10fa0abc0625cc0000000000000000000000000000000009c2158ea44c3b590df30e15f97ebda263670c1bba0d97ceda7ea674af0e61f0b5928fe0bdcd8f18efe5340525259b4c0000000000000000000000000000000019a5534906413fdacde78ffb03e6564d8beaa155f86e4f19be2188854a8709e82d2ade21621934c1aef8be723ea91a141a6799cab8964c7b79b80e76be237ef49c2bdef5c99a38ea873af6e9d49790ec000000000000000000000000000000000165b15830a84e786d563cc3c5117a3e7dbe9dda178bafd225503467ea4c9aa894294c4fda58734eba9864796974a016000000000000000000000000000000001285a2be50f38fa6a068b75386d468d8fc1c11405291e794d5aa5157cc81d7d66c1095f2fd9289f1306f74596e9b5c21b206dbfd70e4b24bcc09ad35ce7b3aa62d17f18347f2bc5f15730202909c93770000000000000000000000000000000019d5819c1c4f10c83ca6f1596e6cf9901611c1407d6d7abab989333b37a8c21cc3deb039722a51e2dec161c38f3ce74200000000000000000000000000000000136d05ff33253260cbbfea0390e78cf66845afb4ddd0b684b928da017fbdf6b0e840431064e6e6d5bc8e417a74c811ab3a607a7301bb7dc5b9c82d956ebb0bc54568d0654d725d4d5f13ceb6231e862e000000000000000000000000000000000593e66a323cf3efa13fe19cde7a3c254c90b23bc836e1f437f4a4b85790f325f0746147aeb1d0447022bb138178bff50000000000000000000000000000000011a4b1222d0b49a27e66cd34a12f252296ecd1aeda435035f06c059aa3e6ba69acd1ae6d7da394f32ab78538f4e50a351231e0fbbc2d98bfd1039a889acac471110d568b0a24ddf5eb3501adcbaac6fa000000000000000000000000000000000613bef17f6b6b39f9f6bde785a82d2e4c368ef231d8cb89940059ac2c16bdd707170b660c0faef9e927ff7a72f6712e000000000000000000000000000000000fc85913ebe30f0af146df556c6984ab442b286fa70ee00d39a802f4c76c3e41cee68802982ea42fb25d4bb04593c0b5393c5c10d4bc4cd1567bca6960051f818e5c53704ce44dc4582767fef1092a870000000000000000000000000000000003da5997b7b3677f6cb03fe969e328549b1c0b083a6df457a70f1276d10e01d65feaa5a36cfad19dbe41cad9eba2fe73000000000000000000000000000000000345176bf6a03a49ae0b6d89d07548ed47dd67dd620e5e29066d09a00a7e3bd4b7fcb79b114a046dcc0c705068f71b50d412195e347b680430c4528987859a1552ba8383cdc075c437ef19db6eff6e1a00000000000000000000000000000000105ed7acf8c7c116842dc159553499aac7b8beb36dfd7eb717c571ad4ee1f86b82b736b72c2936925afdc3c739e0ad56000000000000000000000000000000000618b8fbf8a2aa2d1030c6304655b1df3cf8e8260b7b2d97639bd857d58606d0eceff7ff0fc1a811396552719407daee5b6701bc11c1ef3c9389710e4dd090e3db481c5400ecb91655c20694207a71f1000000000000000000000000000000000eabffb8ece92d4b22ee47560984b3efc33913953dcdf5e22771bb8db2cd8eceea21a2b14d70b1d467d692371ff499a300000000000000000000000000000000143282a2cc502f477be295d5fb2ec847cc988e43f72be848464eb4c1dcd0b1ab66a6cc30dd4b465050f6c37e8b8e08a7ab45b07c059738ead9709bf36ab20b09fd3368f7aa12c6d9f3acf3f145c83fa5", + "Expected": "000000000000000000000000000000000378217eb65cf5ff48e40ebbfbf03c307aabb63955f755a93bfbea0c176e90dc986a8202c6ea4e9ecea176068cfc62440000000000000000000000000000000012ac5e1a0c75ac5b96af3959a65eed134dac6b35559cd923facd2062ee06cb3ae2018db7d27dad2927b3e9c2e3dada33", + "Name": "matter_g1_multiexp_69", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d6ab2022d950cd2ad2f0087a079e435634a1e24008d12a349836cb7297defe857cadf3adf061e8b55ece662dd36ca280000000000000000000000000000000007682f1ced1ac2aca6ee9de682c7a6743fd32264eb0a087eb1df7c520c5748cd598be45213b398b073dccbb6bd67b44c3ca13f8540eaf45ffdab5182883d32a1d35e7cd956092221cc40232efde6cd1e000000000000000000000000000000000927b5590892a4b897ff2d6ef6d5abe32bec8233bc5f35ea9ace2ec516037a8f3d162b0161c91d4e06d80d73528a6ba400000000000000000000000000000000064d3d8340eea43bb2d54dd6f5d9d49fc2275ca1ae7212329a11ed9a94c70c80584cb6ccc1eb653f001a1c1c4306e702b3c8b045ef559b76005875bce09a66b36f295070a73ec8dc66c86bca51fa5d4d000000000000000000000000000000000322791d0e53364128288e40b621e6c47324dafcf86e9a8590a79eddc8d3e6c9d74cf9721115550e7e33868ced39cc4700000000000000000000000000000000112a246f82756d88f30e74b3f5df21e18ffc9cccd713e6509572338ccb4f52cbc0c3a6d5b5c112e304f90ffb9179238521953ea264f74bf64378a339461bff41c5193e17913c67be7e2a249c9737b8250000000000000000000000000000000010bdece8fbaa604439e942e2c78aa5904cc1a0532d5bbf624794d3f10f4b64df30838799e374982feaa7346c039c08ad000000000000000000000000000000001085372e79e1046c870b1d49a2a8ea83bcddd6bb8718c7cb340dd3032739319c54eb947d518c7e17d6e603dd3539f269505655d72f1128ac0204539f0d823f076cb3a57a7e74e896b5019c9161d6486a000000000000000000000000000000001551cb2abe299a01cfba81bb306457b662ad57858a30d55e0ae0c0f5851483123c388ba06ead8ec4fad0b1e4f69ddd6b00000000000000000000000000000000159e5ffc459d38a6b1e49b30647939f37c0d4fc02b83f9dbac123d64535752977005e0cb1232ebaa7cf0bfdc203ccaeac4c861cde3f445e3a78d1498d98b2b947056cf578652e19be88da4a786af196f0000000000000000000000000000000004111e81afa9fd09e39df891cbb99d9b62205777bebee33b2914e24570db46f75db5dbe2e9831c50f9717dc317f05ceb000000000000000000000000000000000a999eb350750cd505ea9de43945cfb0c9c4ea412cb0f0e769e62e47d08f8d50392d3a5e821f1e9c947990e6398b5ec699762c5189cf154e24238e4b157caa1d8759002f69b289cfbf3f24f5dabf20bb000000000000000000000000000000001496d3b0062e9e7166d777d90553545ee7dfdbdacb355fa7ecfecd65bcb96321aec0fd835b32c8bce462c87a2b52a58f000000000000000000000000000000000ef77e6ddce1e0eae50a1c663374c31a0c5846d6c2d777bb2f4831ecc806ac28591c3ab0222a6cc7821a45ddde1ce23e298b5f6b43074b8f0807086b03f5028709209310474c35c7ee232eec8579147c00000000000000000000000000000000194bd82f02047bc08871e431ebde41327a60e838d3a1ce6eb5470ba21a9b863025c8663f7d509a73847ed41515fdd3ac0000000000000000000000000000000006c9303814ddedc68b0047b5b2f0333cf226908dcb14ccc0aae4e14456a0c83eb4f498d559a649bb64bc78900a788a4b177bfb0218ecd8cdbc6dd9484e74e41be6971ec2911bacc8b53b9b4b8c70e573000000000000000000000000000000000736fc761eca44cd197ec6fc680de349f96e5294e42648825ce9262fef91766a8d7a084e5b598b5b47d947548e0c61860000000000000000000000000000000018eedf050da521b9af0ce2007cd664e2760320056e14ddb162db5cae78ed7ec859bad03fc60caa06081f0c24bb130ea4cac52219796226385aebf9e85f5f179362d4149c33582a97b7d2aeb05a8e6a990000000000000000000000000000000018a8e4887f0c08dfb7a741858580a1e0ba7e7ee1959284ad0955beb186e84a5d503ffe4000d5a8641575540b6b7a3885000000000000000000000000000000001946ae0b124fb60fb4dd32181783564dfb8ed0616a220d5650fcc1f6968ff70dc74535c71b0cf1019eb038c19cef0caae03afb2efea85fcd035cb4ba09977b2e1c84a0d98edf88e9f8d2c4f116d0f5030000000000000000000000000000000003cc2093935fcacc3fbe4429868c7b31fe8c8b12c1184e2181dc8da4d56b9b3ace85ad8d6b850deccd047eb002acc8fe0000000000000000000000000000000008cebb95902576d96a3a257ccfe76bc727174e08d70492dbc2132b9d5f534de3b6a7baac2d90338278064565aa67b22c804dec43760dab29c161b8f4bddc52379a17f3168f684267cfbbc3505e32d5f10000000000000000000000000000000003a03e6c183afe6aae9bee030f46086032e9d81fe337e7e1c77ac6c903fb33154bebdc15e81422f057ba1853c1f7cf110000000000000000000000000000000011f5e4fff35ad1d6e2d2d4e30ddeac28432eaf13fc7c35f5a90f7f8a17de0f61bee21529b3db3633c178006f5c5fc403ed2d3daf616df3f0061f58c925e9dfbbf6e9cbfd4b0b3896a596919fb3d243db000000000000000000000000000000001986f950d86f35d45dfeba6c3e484a6da296ccda2314d03adc37bdaaab374aa9011e07e6c8fe056e66b9204c5e16fc990000000000000000000000000000000003220ebcac8189b30f6efe6051a2be1001b85a7f94d9ce289bf6e04edfdf2ff17b17702a1ce116445d763ed1c0dee645e16797ed90581fd8c3cef1f30abaed10997f13461374ea649b29101959fd50640000000000000000000000000000000001000e0934c04c36c621d9b308565cc75ff58f6c1c778b8e0926b4d22d58025edf8a853139667ab3d3616c33d8a98afd0000000000000000000000000000000008776b843fa3b1449a0879616b3a37bd5eff5c809c077fb0274fccd67d645439a79a410fe2c2db44f52887ea7f20c6062f9f29432638c033ca84422b12ca80ac4ae85fa30ff56c913c5737aeb2c84d04000000000000000000000000000000000e7b037fccbb3fed299960355ff2c6a51562814ac797ed6b4b770ec565bae5ac998eeba19819cf2b3d4e91591e7f051f000000000000000000000000000000000143dd07288b59a279de228ea59aecfba3275a87fd8307252e6b5d567bde87088a8a8f52da57cba4c0fa0e2aed423241e6f1e5df7ff90c4a4fb9a071c0caf3a3997569538ab9837ed41d9d0a8d730537000000000000000000000000000000000b41b673bab477cdb21ae5f1c04922f2b8216d7a1423a6f6b86d4c33f0b4def9c553faca2798cba20a31ee7d71422b21000000000000000000000000000000000b64686b90964104f8e79bf9527f452d25c3c8e9d53e715d884e795d26e391dbf510d72fb2850fe66e35d31444814e650cf3283195707c30880e50ff5ef605b561c3c3c354fbe8108f93b36f212f9ef5", + "Expected": "000000000000000000000000000000001673148063c4f68c59d371410a8ef20cc4516c579523e2d7d2ba04b03fc5a481a30fdc6b9ebaee1138b28a9463011227000000000000000000000000000000000067e9b23610ac41d41e0bfcabc455342360d4ae4c75fa0303631e97f702b9cb660b84b5d422e8e9a74890b803c944ea", + "Name": "matter_g1_multiexp_70", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014cf7c57711c1708096cd33a9efd4f907112a3d4e5bad1767ddc6fb408cb7ac3f866143000154d1270c07b4294480543000000000000000000000000000000000a20191e6786d94721067d6942731110df277047541383ef9847fed9e4b8599723fd7cd7e2ca2186d56986feb8dd24d72063b046a71c2674e35466657a85d8e02253b42517b033619e31a53665917212000000000000000000000000000000000cdb0c20ac2c22a458d2370662d665005cdd8c662e318bb8652a2123f2d65d21c8e150daf51d7874c69bc039bb6163710000000000000000000000000000000008480687d726eefe93d5484ca375557e109fc64f60666e1b8aaf440100aa15e76aab6f821fde170046d2714d8986a1fe92fa325cd07502c6576dfb93ee952fedb304022656597bf3bb03a2bbc471b32a0000000000000000000000000000000011f20086905f64c21bec021e5726c05158f892658cd69536945a3337a8075994caf4fa16fe66b85e3e0ec71ae5b4c09c0000000000000000000000000000000006d71057aeaf26fc685bfc0ca071126a81224692b3eb90e37a1941782b8f65d45b6a31567c6e3d2935d38e9e02ba08654484e688799c3f0a3bbe00cec7322fba6245570685cd7df0d744473b72f03df80000000000000000000000000000000005a186d0ceb2535037b22a6455c49b6227e54c6e6dcdd98f46d996f23301b208a87c4bcd0608972961b67c523f01c99100000000000000000000000000000000142367fb02fc6b2cf52a78e4cb1157d273e9fe13ca721e0fa725f2a6dd0b4897ffe7affa25925da47fe851362700c31bfae2ef61a024e4d8c4ae277f6b1d834193df655ffb315da67afa4ee4ddcb7fbd000000000000000000000000000000000a758981a1524501c48ffc9990b738d51ebe38a0ba07b2b049110c7aa439253bfb0491a66cc42eb241a47d5e963db75500000000000000000000000000000000082adfa66bb46b97f14dec70b970469478d73d30216201e7467a927ae4ab9d93747b07ea69c406dfef789226afc4240a3168a1007abd42bc398e317484149f2fa61174243fd1748deec6cc75e7c720a2000000000000000000000000000000000de8dddf04e0c2d9ef1887ea598030f2bf3bc7bd98b8b218d19f661ec4c9a47cb087639f72fbe97afe9617acb162bd1a00000000000000000000000000000000127e78f1f41df717e5f76692b9ecf21ec0fbaf9b1d56e51b37cea02143f3b91eb1f16a65046527339dc65d29435a2874f1525bba87baee35023d0976b4a2d87524ba74158f000e5501c6d06aed04adda0000000000000000000000000000000009c37c64ffe9bbf264c475076ccbe6638653574ea84b30f4eb2601f1990f73fb5708af6007f21e4dd52f23ef5041cb3600000000000000000000000000000000170177e891c421ac91eac0dfff8bb397d7fc531e0fbd275c17cb4d894d18278a40a6c3093b92fc537244798f24eea4e92d3d7c014416f33724acaa46412348d350f93d334588d39c77dc0b8ffcb4cb1d000000000000000000000000000000000178d45abe2415895e0a550005c76522962c0ef0193cc7475a52f4d9cec9d4789406b7afa2872485722ec034df4446d90000000000000000000000000000000005e4253dde4284944b2083e07b04940cc72cb24d9866c953564bc0e847b72da59888e7a08cde7aa7c0753cda94a6e97c53bfbb1670b7045b6df689871d5d012dc93e8be65faa4a98a51db8501a4b7677000000000000000000000000000000000e48f11dee27507acd407ce1b810cfa8d0ff4414380fe26aba6c608784ef756d605c8c3ba92592ce342baef8aa927bd90000000000000000000000000000000000e604525ab4ed10f3a9a688774c6b27e679fe456190e67689959da296b650dbfb75610dcf54b30ab891c40784a9b90ff944ee8d294d189226a6cff17456e2201d17d4dfcb78f58f8501870377a6e43100000000000000000000000000000000199b1367bc3aec710e82f98d3564debe9e01ef2beb878935df4ea98e3725391e873d2661e2a27d778bd29ce6f66a9b24000000000000000000000000000000000e77a3ca6bc4584cc1c3df35b18402b75936f68f0f70193708da21649b6def59f1baec4d6d1a2733c369cb5d9a6b39347de53613b7a31583ccb214726482b770029c0ed42f9528fa74da7d2d1dd915e10000000000000000000000000000000016ee4a1a3f99134ef55398e96b86a21708388c3ddbd86746745e24bafb062a6283c5bdd771f15eb501df6a19920162d4000000000000000000000000000000001001936f457d8241a4929aec1d3769bd1955433b340481936f9443c63a6c6ddb3be4f4e1ffbf62a5c4b154fa9f8acba3b0a9750cdfe0910c544668bc9b11ecdedf1b757ff69b61fcc838c502c2911bbc0000000000000000000000000000000019aad23ac037d496eeedaeac9248842b0dec15478f62ab61d000a402cbdcc240186248ed931fe3eaae5a1d7153d3e135000000000000000000000000000000000fc1c74c4d8488edd92b42ca7c27e22a4776761829b06efb0d1b2cfa37738efb276cc5121d926665b99497841afcbd394aadecb1111ff43894123648eea9e57685dcb7a25553233a374479c24f2f88990000000000000000000000000000000014c557c44a90fa9d958d2e701cb2aac1c0204246fae4ba7b060e74e5d4ff50630fdca918c47323f5d0eff118c7595a040000000000000000000000000000000015821312dfed1e0bc2cfb23536baceb7ceb45c6c5a5f15ce0d4d67ef261a30ab8154b873513e2c44f652b93989cb6f1badde66cf749daf69a30f41ca00d251f7f1e93b0e7f916a1ba6b994d946b12ca00000000000000000000000000000000001ce81da6511eae9d2e155efb4f999a5d75faa99eed8fe784c7a398bf4b0e135bd0e8be8d9dfa2aa8ce9c63e091cb44b000000000000000000000000000000000695ff4e598b9e469bc62dffa214418536a6f49fa5f05680e09783b2f29bbfec5d43d42c969ad3b62c25c6192e328419b2f9b44c73a1a6dfba6462e1202166b63727f45dc3b8b3b73b5d06459a1beec20000000000000000000000000000000002f155e83bcd838ee8840996a3d8b0bef77334b0e8e75c8e4278411ae1012bae06959e8394dc4d1fd4ed5f07804b41870000000000000000000000000000000004daf1423e319b18dc57753d39777bb127b651f5294fe03a15dc4974eef8cffe337704c7f867fcb4c2fbac382e444a2b0cdc89e668f7cbd53a2ef6597a48b93d7d9a78950d4f821f3935edf72649e00000000000000000000000000000000000162f530647fc6290626d74753efe315e64dca2d73571dbd4416dbb41b07e8ddba40b3dbe170922c64fabbd937c961b1400000000000000000000000000000000021ac62abe15b0f1318063428d89f22d2090050b913973de571871125a391affb1cd595f9c596c9dbeb6025fc8392e48e23b377ed80bc90a4645df09e825509eebf57f59d7a2aa1b9121ace80926ccf7", + "Expected": "00000000000000000000000000000000127c2a1365d966520de7aef12e66e55d807b1a3e2305ccd5a78547fad6e6112d60a206412bf56866ca1b0af1b422c7230000000000000000000000000000000003a613a2e2abca1f42d3ed594a3b99a6cc51207b249aee2b5829aafb1327cc7bbf99604473b4048c4b2033e1befbf14a", + "Name": "matter_g1_multiexp_71", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fd31933662cde0814cea424436ddeb6a668e20b69259424a652bab722aac70b3582cb641d53bff963ead87ef5dfe1090000000000000000000000000000000007d17925b0309fd8c92e52c1ad67937efffa7ae3c783177a82f1133c8e3aee2b8fe71095b6b88b01576c5203d7dc8c3f75888762fd1de395fa80b6d8a751f280eca568de2947e953feac343fd6bd592d000000000000000000000000000000001782f625bc3b25168b1f5b388b7963b9d158c09abbc0bc4c0bf5332e1817fc083d3d55124532fee2665c536b6923fe3b00000000000000000000000000000000118650bcb2d32f4e83257cfebbe8209c2c9062ab0eb805ae2977f79ef48af6fd78e7512b331933edd087054273eab52c18ce7941da132adec1eee8d81facdb5012a15ddfe0cd6751ebbf66ce6c4950430000000000000000000000000000000014a69e56a173ed13a9e2568a8af49d74c74dd67609ca58744f96f9213197b45de6468d69ed084ed8b1b29104322ac517000000000000000000000000000000000739671cdbdf98251ed4bf13d23c675500cb66344731ea6aa66ffe401dd6daa8157676fc46b413378b8325ed4cfe804a24a0497c642dce3937d883ee25b0ea577c729366c7d67e2e5ff1ccde3b19a5dc0000000000000000000000000000000005c95d722f8e50603951c21421e8532eae710929e976d76f28c050fb2b093618489c5f892198ca822d3f287fea6eb83200000000000000000000000000000000077a07fe1348e4b6b2a46f444137eb86bf7c58e320afda3d75769a9839fefd9142cfcb75da1d1aa0e7ce84b880ff1b3fe4e0ad0d478ccf5381470a3fc9b882639dde4a0147c7c82e50bb93431b07a135000000000000000000000000000000000efd66388da0825c846b6437b13ce5014b94b20cd3a713bdbb41a80892820ea7b12b6f6720fc7aa6e6756d496ef5ffdc0000000000000000000000000000000000adeb6281219c324d14ab4dc29841d52f3f21b512ef0a784454a01358747684afe22b34d4ff1ed29ea013d47d9059c838573db9346a3c8de41af54048cc51a0edcb86f36372859d0d794f7560c8525b0000000000000000000000000000000010367597f1deb2ca9338b59ddcd8d02440ce8cc34c71a6ff93205375077c00f3f1c22e00ebc9fb60de7475400976e1860000000000000000000000000000000017d148179e9671959bf03fa1c95ab608fe2fb8b9b1a650f524a070d7857dbb8b14a67a813ba1b22e4b71df52e46c42c002257ed12262d00e78bde574a9ebd2664484a446c03fe8cbb855bf92e56bc163000000000000000000000000000000000797e0eff7ff579b0c5161c8ee06a2b99ab44e515045e83438952226046bbb4adf3c8d0538a0bcfe27a533444e2bfc9f000000000000000000000000000000000c556867cb0238505da3b55321df66611e6a018be4e181a1ec121dd55c509d501558af880a2bcc71fcc641edcffdb13076b9d21a3da0359a377c11a6d0a18bce7ea81d4128dc1e7618e6c35b9149d5c8000000000000000000000000000000001357812e6d93272645cacde880754514ee42aea3690d9d5d67e3bb5ee4444b7a3473ea2af0fc563d246b4c3e8ab5525200000000000000000000000000000000176c413594ca45019a174848f765f69e138e70dde1e184515c6f3012df4c5fa39a28a7e202c6c563db7681b0c4f8b3a9c9cd895d5d1ae0ae704e240c10d8ed4a01b319598d7885f7c3fffcd9b491f5fd000000000000000000000000000000000c5f9145b11f6af0895eca18ba6338408ce40ae1b25f8c04b40c0410a6c69b0144541e2ca1d4303c4c55fc407ca11b1a0000000000000000000000000000000010f2a09fd8b6cffae5a06bf50597a9c0d496bf5529c8925c1141cdb25ffd3afc6b51cb5d21d97c99a8d27281c657bd842467604875028997efdf5139180a8d530a1e9f18c62ddac7753cc370bf25254b0000000000000000000000000000000000c16911df03f532313d162bae1eb57c947059fb5d776ce3bfa661bad92ebacb51154697593e2321bbf85d43ae7ea567000000000000000000000000000000000564ac0f20388ca3bd483033994bf76b1ba135e229487e0c8aa10dfdec1887c62651f4cc0c05622de6356edbfd9abfef2f47637b64d28fb4facc31d5bed34b22e7b270431f54a689cd0fabd205e001ae0000000000000000000000000000000001f6de29a7cf8a89e3cb5befc926eeef59270b929edb68e9b0cd96feb5286e130f1f7c0e0d46cf2a411e499be21d47a00000000000000000000000000000000002b4c8ff1040a843a0e1d691adead4fe3d5306f89f83724a891abffec3c742a3416fe54c27c97bd131730ad364373ed0474c3ac61d4fbece967fbd0599c9a92c3fe0e53899861f044308b0ea8df137880000000000000000000000000000000005d07fdc2e2afd92d5f0f1ab6541313b5a58868d1707ff0cc9e4ccdea0c105cf9cf1f6e52d0dfd22c70aee1f7835ee90000000000000000000000000000000001229bfa1d5c5e4aa5ed0f6753dcb40952fc5446b0c5d0d90b22a7b2abc388cc18e8ef74bb2370b6ccf036f09040f62dceaf9da65e0e1752a982601e9a070a7cc77d5007eb641fffbb78d2a1b02dcffec0000000000000000000000000000000019f4a0cb264a617986898fbfb53d1bde9cd82c092ad86e608750ffa990d6926644c717f6a63279f8061b066f0c4e86fd00000000000000000000000000000000082f1b79a9ccf56b743e14caf0cf18b94f1978d164d9a95fbf87ce15c3a9b414b098fb09654c23ed2981249233e8baae5158bfe535fbc342e31f32ab4723c0d9fe95a2c64cc4e59bd41d13a08ac811780000000000000000000000000000000011c516cfd059a1b8ff75df3b9b6b135c2a52371f1a0dad631e96d8673f1b26daff9e776e9dfb225e9881635a28dd34c5000000000000000000000000000000000bb0dfd476dab29ccc80781a92f5a998b8ba2464d76df001440240957eb1237d9d210be62c9187d7f17891e837d52635d66f5a8f37a7c6a32088897abfaf5a98bd4722c411bf4b52f0f5b5648e89df29000000000000000000000000000000000928c4d78abffa6517742e617ff8efcf59b48efe0b55eaca1d93a434b84c42f29683952dd08546dc1b88bb63a35b49c7000000000000000000000000000000000d63b1f625ca9d33aaf51f8251a088642211a474deac9931c3ff8ad45f80782f62f71f014505606cc4a96f91c79a25709acdd24190589ae7823a42e8b59598eca12bf13b97aa9a0eec17f5f79a01e8df00000000000000000000000000000000131c7e90e794b09da6c4936747e6509f94a467f38ac7f4bfd0c5da88d1733d1b6871a9df498b265c65695ab3ca889f9e00000000000000000000000000000000190e566597ec19df03c473b8ff4ec0cf24168f47c89525b31b1f3592bc7f87540caa8f91e2eb2f415c05502f72673dbd0291be87a213b0a24c92df5ce42381ca378dc4b9aeb4cb9b6918263bea827bf8", + "Expected": "0000000000000000000000000000000015610fcdfe0bc92be1f3ea82eb0b0512ed5f448e0000951fdcb0e637ecca602f715674aab1b7555c8f8bdf886d3aa62b000000000000000000000000000000000103c3ceee1b45d9d8912887c40ca16dcaabab3dabf56b8f77cb3186b267a74a5193048ce4165c419cf727d6e9925ac3", + "Name": "matter_g1_multiexp_72", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cda9f382fd65f5ab92cc560477f1e3b69d0efe355e40ad3bcaf258509b6ca5e179deed8348836b0e723d5f7ca4c43ea00000000000000000000000000000000037011fda0d188f8d17436d21b9bce522cc9f8e4f473965803b242694f403ecee29d2abccbf56ab0a1f2fe5831c14380b14c6a38cc998df3583228080ea10f215a6e6a4b02ddb6d43e8f459d494a1ec1000000000000000000000000000000000f591bf508a5076b26dd8ea3b0f7a92889131142b34cba3f35a9b861cc6deeca7378d5728c0af9503441144bfc82038b00000000000000000000000000000000156067cc00e82414150bc05ca2d0c0ce1c19e5276e00434754616c9021120bbf9d1c00df6a42b76c3ffeb6e32f8fc3eefee8614394c8109338432ec72f2d9babba06f1e7b826b0f2558c3247c923b2350000000000000000000000000000000002a8128978ebfb99e20ac99ff5b3088e8eb95a7b6b354d46e775dd1662a27d5adc9513467690f377d4a13766276bf87d0000000000000000000000000000000012ba903800e9641de498d8e286c7ee48b48f7d36255823b88a24cfb67f8d2b7b6411ba3304819f588fff0d730cf130e428728d06cd90050e44a827b44f14ea35e83c9b58ce4c3a7a45aed6f31c94fb96000000000000000000000000000000000b107e62453c7181b26a3accaa624a612b7498ccc50eaf0d47bbf350b3c8c54e940266cde786c608e42f59d793e45eb000000000000000000000000000000000194c2c3717a8284051a29586e540bd9e456c0169eab0412699865c12226521796a55d598f60280cdcf37b54a24c931040fda665c40d1da93b1f132070e0b7c8c2c0ea0e66993b5a3d7419a33d118d25f0000000000000000000000000000000013228e1a6346683320d8acad4a5cb1c23cfebdb9d9c451ab81335d27e8b82297b38e1fe2fd02651a8dce3838144cf650000000000000000000000000000000000c6d54add7bdaf9ff8158680f35be7f51dcd5c26a698750c7eab857140b6329157bb7aca8d7c68f107ed9f68b3a076aac14f014117a74f21e0b698a257ae8e3d6091ba76bff7912abb6bd94d41886d050000000000000000000000000000000006e1e7c15fd14ff3bab1e9b8f8b7d6244c707744708db629ef4146b8cefe68c505ea034c180fcff95a452f7e1e5433e1000000000000000000000000000000000735faa57e1c4349be51395bac55a331a04851b41d2ec98072c5ac38eb7bb03e00ed64bcf32c3eac8b34cc6e26769c3ad81a1239ad2c945f1c560fd1674ac7e87d49aa41a1f4a5bfffeab1147c0ef7c60000000000000000000000000000000018008132dcbd9455c3932155a0b0c58066bec4803eafb0a2cc30a93b0a335738b52e6cff60b379fb04b5aad342baf11800000000000000000000000000000000149ea542cf34141fface44046aee2f6c436218374d095bdd46638ebc804bb0c9a7e1e3b01c0470bb6efc7749b8f70eb73a02689cfd2c353fc1b4d3913f5a43745fffe6a87a7c223ec3b25b321584a75c0000000000000000000000000000000003f12b0eb97856f3ead3d46a8321481351471e558add0ac4e1f285e7ee8a1f2ca88ffedbc8ed21df31d599e80b8f0e94000000000000000000000000000000001315ca27c955f3826da43745809fb1759f0f5d5674e4d94118bf2f2ea0411c7d9cbc65f054c41ffbdf196ef24eb9afc55af95ab3fd062088ffbef6ed887fd39aa1d527fe7633b876187ae12e736fcf2f000000000000000000000000000000000cca2b061959fb70d383f7e247c131f51920e048dc136036cc301f1ae6ce13809551d0a8074cc05409d124e2df6536d0000000000000000000000000000000000a9692e0263b563cda35f8497d182fc05e78e7bf88267aaebea1f5f41bd1cadb39c61431bfcaef208adcc9118d4dfb546541c6cf8217c2a95792900e8fc39581b177a57ca00162c57131ea4fb80a4c600000000000000000000000000000000005bfb5a43e3643846f92310e9d5439deeb4fdd6b5dfd3de2ab3a40b9b8b3461136b03c5601add616dd87b9a72e81856a000000000000000000000000000000000212c6c42e24a3f11c30b7751f37c0101b8a071a3d56f2d10b6c9f4f84ae12079d8c4f2d216cdc7ee93abf8b9d6973394b7c3f3c4ed10bced85f36fd6dac2646c65d3c810e6d2d116c38aa5e10b29c2d0000000000000000000000000000000008adf951da1f0b64c17f84031985bd1f3561ab44c80c339c4c753a7c2080e0f57c41b79b6cccb75662e8642ae0a94451000000000000000000000000000000000d9082079fa53008a03f58b87fe0aceb121c6c004493f3da7ab37f3236942c8ac01fc28db26b87bd2546f93b12577ee57e33f394e96d17efa30d34f57eecc45d7b4ca150a31b8d0484578151d6e65c2b0000000000000000000000000000000000f352ce042cbbf1adcc42030ba8e0dfc76b4ca313e82a5c5105ec56266977dc83626c9a9b3b5c25ef459a6feb2722140000000000000000000000000000000009443440da963a7e64d90e4642861f3f5399835fc2fdefa7e87708c033848170eb02407a6a9edadad27cb02793055140fde92a31e571ec03e509ac8a70ed5788869854eef0bf578efe6c5e6468315553000000000000000000000000000000001699cd7355b0a0be2946f8f49648bb04a90c6bc8ee7fa258a357455864022db999793771a2e66adf3cea5a54ada82d6e000000000000000000000000000000000a3ebfef4ba72cbccab5e93155429a14fd61c106ed6d2c0db0694c4733b6f1730cc9f34a5e9598c60e189b8e4943efb56f7de01ad0f7b4dcaee1123bb80a71d3bc1e63ca577a12b14ae2a11d8c0fde46000000000000000000000000000000000be5ac701c69b81cd75fddb8da92066cfc9d0d2aa7f01495afd87e44076f9f022179b7d4b4781d0b5c6c52b498b63dd80000000000000000000000000000000006f2fd1ca9a34fb09d922a76943b43505f2aad16489a138668f08b9f388c67e46a4d5df7387a1c3aa23c76954913abfae2c69d21d40813ee40a718f0ead36b51f3a50e9e4e4b2de8acd33add62bfc1d20000000000000000000000000000000019489b41d8b1f2e8ac09cf3f0930e092afd74405e213454c458cfe44e5f393a88713b62715097a1aaf01a188e8ab07c00000000000000000000000000000000018471d616eb66f1dcfaf84b7d49f632e0a5306888e44c70710bb61d4afd440e5f692eefad842b5d37762cab649fbef34762d89025196aec4f87da2fcc5a9188b4dc7b1c014dd1d705223bf9fe1e7a7d1000000000000000000000000000000001088372334c452709f81b57f5e5c148e0f88dc29dc9a118abd6911c46ee83d0c6b58ec9b854c15f519d33d281ac9e21d000000000000000000000000000000000394a7e49f32e4f7d27f276892002ad034dccc8263591b5d941eb2a5e60097e757ea67dcdc5242b755fce30c3b3b64cdffb9f3e1d43aece3af1f59319a8228cd81e668b1e250d03350958dcac9e23843", + "Expected": "0000000000000000000000000000000009e68140307d9309c32763e4de857372a61733060ac582922e3822e46c28f67bea87a75bd98248466e8938abdc4ef54b00000000000000000000000000000000187dccf66e6d0593ac8caf6723033db545c43cb90a5f5486418325860b692ffdf8dcf23da9103dc65336d3cec2577a4d", + "Name": "matter_g1_multiexp_73", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000083dad213737f1789595316285a77c859c469b9bd0cf08c61884456e4fc5ef0947847186bd420af252d822419b1de3ef000000000000000000000000000000000795a6ced1d34d91bf5ddbe77fee452699a1b32daac270b4e8661259dcacbb9c8c3776043f2e149773427fe109818c87be285a119dc8cb32b1a0c5380af736114a32e9d1ca870abdf278dfa84444f70e0000000000000000000000000000000005db83053f9824116b9d14ce0173c2243a4a8506e161db7f97408dd6fa77b65d0e0a32e95062699f7aa85cc9be448dcb000000000000000000000000000000000f20953295dde557a078c981f0b988cd9da8c7469fb7fa3361f2386c7dd609bf80ccf91cefd797eb3a4f849b2cec4370bc0535bd504d7b9658e459c2e79b86bf4e718baa82b8d6e624fba0eb141c726000000000000000000000000000000000000bc3e40ec1b6e863f75e4adbcb8b504026d0634d1d3769f7795ed2956bd450e68aebb1a9d11a71fbe5b51bc79d97aa000000000000000000000000000000001703e1fde7f2c740ca3224c1994282e633292f86095be38dde3673b78729db84bca33ee820532aa92bfd32728d9756404f3fa09243c01748954d84f4deeb460f3ef78f9c34296c6a092952bc463d72840000000000000000000000000000000009622c13e8924441b0043770faaead6db793ab818532c7323d9ee9a8d118cfd2a578e1c13723c8bbdd049b1d8aaad9ed0000000000000000000000000000000009da68565c05aa28648c0d0a0e185335b4e58903982fd361fb57f544c1f253a55e8a233b341537d78c4f229ec5f935a85d84733ccc41f71a11d61852fa336df566109c5538c2c5f5cf2af961e93797fd0000000000000000000000000000000005818b813993d7c346cd70190e1e6410974e64e08fb0a70721a0ee430dcb0d92d302943836343e274b26c69030226c0d000000000000000000000000000000000ee84b6b251c9d4f7e7abf843c73f0456968e23e79c54d8742cd5967737b9cf9ae8c6030722134c376c7c9433b749563feeb95c32362014caedf2a9e066a775e2db0d1322edc86759faa99bd70c05b580000000000000000000000000000000006870d696789986991a222b988c3623ffb51ce96ee35140e817887ea37068ec77d8131a97579f2ea29a5b45ab55ec5d90000000000000000000000000000000016b203c189343e67e10928c2a45259593cedb1a016491e94435a0823522010469729bd69af9c3bd6f4e71e96c7d8ca72edee2ea28b93b2daf4ff927991769a9c69ba16490b5676074e64f5e91fa994a600000000000000000000000000000000191a7f7469739ef4da1fcfed877b875c4b0af45df7aa9055b7d5f0c1360e4c4b7b67958d03125fade281c663923670040000000000000000000000000000000014d5256c242839e0951390f00affb226ee6c906214d8d7dca7e4fba7eaa8b1944fe4f1f93bf6ebb21b4a8585e000a76b7a07e50c1fbf1b388e9264c762798c31fe76761508d070f06adc63130df07641000000000000000000000000000000001968eb742dc0e128c94c1f0dab2ff3b0d300966537293ea16856e5f3ce5e12164d9c52fa59e08481bce84f3f87dae8f100000000000000000000000000000000098ec0e7bc53314fc8729f4688b99c3d87e7e2770877a30898c37c68a5e0a4459851b8fa390cab18e7cf0d325d906ce4f0056903b4508cffb6334bb5f645cb553a8cc61ea6765283f933686f172f8360000000000000000000000000000000000064ef5e6fe9de3e86ccc7a8b809cbdd945eef98e8e6cfa82dc64ba94070cc107090427c13ddd3bf25d542696d5de44500000000000000000000000000000000116b4babfc4b1a7a36405f597d4afb478c024805495e1a412a3ad5e9ec5f01dc47411ee6e81a9477677b89291e91c2b68031f363c8b0062b34d48f4c2e5bdba884005e52f77ac04c2f29dc7ef10fac0c0000000000000000000000000000000014d07ad766b50a6150a50decabc56f04559d1b196b713be88b5543a673ee3f4499e42b58c532e38dca0101f639aaa9fe0000000000000000000000000000000001678e7e66f44cff05163ce249df65063c4ea2d2517a31f42dfe76f67041d7927ad4b0efa4b30c33156b14f5127af190cb146e27a9d36dc698e1982afc945af9500fc5aeba719d06d0c4e4eb245034c6000000000000000000000000000000000745f042a917dca8e35c8f0301612ce198f75144e145a3c3041f4ecf893360eb0b7fdfaeefe78733bb88010d6a7b9bb3000000000000000000000000000000000e8879142826593a2f1214eee206ba69b7962e9a10ba014af5daccc1e4a2d3c893fa47eb533cd0c0a9fc1c09d389db19d983f98fe5112a55c23591bf4e259d072f893944741d9941a00f907749e3c9990000000000000000000000000000000009da4fdf5b86facd674ffe6d91d03674ebfa3aeff5ca2a659777be20109946b1bbd759d4dc2d9e859d587ce50ec3bf01000000000000000000000000000000000924985f655b00fec0bdacfc6914eedab676a962e21ffedd83be646dc17f5cdcdd3f43a9ad7ff9d976e4828b4dd219b7a62f99ac46f986f2f29f0ad3da0310f061e691955c711850a2816ad7464614a700000000000000000000000000000000187414507425106691a2dac49fea1eaa14783b2a5b79a945fee44957619793be1a68aa110867ea405a076d30568ecf3800000000000000000000000000000000034e932247b81bda0a54568f2887824028d69767b9131c106a4d204c0b2bfb929b9ed7b3fce1e354e405aeca8a28d92e7ee01b0c9c6a6ca1fdac35d89c803bee3595f03d9d200affc5292d8a7c6720b800000000000000000000000000000000027361b6341bf8985d79b6dde029a9ee54ef441894f34d60a3324edb502bdc78ef60789e5ce342c240db0fa91bbbfd00000000000000000000000000000000000bea3c850bc9d0860241fc6de65c203d5a11e6425faa503c37641522fba6fcd31643209329e6ad75a3dc5e4a4790db4a297fc700698c56877be6764f48a836d210bb33e99b5735da9837882269af9b45000000000000000000000000000000000fc7095889f943697577c8867b411ac925ea7182e47a7cd19387dcdd48fad5e558de3d80e3036992ba5fb8dd7925774700000000000000000000000000000000160f1fbb346c48a6cab0105d343c55b3714899e931e7b4e0abe68c4fc7067189181afb9c040d41e4c1f7c4e2f1b8a63b1b7ac02db15cebb8af459290c35eb5a86cf98b86d8336764c6bdda6698b49b64000000000000000000000000000000000bf1740d01ece251c0f0ee4f798872eda7f5a4ad3152d86db12844ffa88ca52835799f0b2601ed1bae6d4850cc889940000000000000000000000000000000000557f274109f745af6cd965d6e706b9ea1fa3c295cbbdb203ebf049c1070595ab820efad6652b1f1ba4e2d331b5bc6da5d1a3f78a2c2ab7b85cee68ee670f50a176e988a341303afb7722917f442fab6", + "Expected": "000000000000000000000000000000000c57ca082c662618951201a98d88170a9aa076fd1fc48c8ababdcbb09b63c793725261acd370d03d28ea47c0ef176f1500000000000000000000000000000000110234e4c6a99c6d1ef8b43fa897990d605af9b469045dcd0ead52b03f9f90dc441f7fe5e624349788746802e4f74015", + "Name": "matter_g1_multiexp_74", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ca64fb3ced1d15f94e9b234e6f6fe59d805eb0b50ae29c9b31514ea5c6e79542688e871de6ace893868fa0eafdf46890000000000000000000000000000000019c60ebb5ca4e605e3b0eabdec53f566c9b96a143631be93250260560e47a2ff6b073e432cb1f9104ff913616e7d81c834aaf86eb77ce03f1d8eacab84d5ff98a565fd33a9a2c40f2a19d7c041a7e2a60000000000000000000000000000000010c867a070e161939458694cd4015b76bc4c76eea884d9dd309d6642436a82bc76ab57b2c0e2d3ca61f34645db65f2460000000000000000000000000000000014d9df8b34369bb23fbeac29aa8c35b346992d847fc2b9e3b96345f4a2245fa8eed505daf17edb4090726052be75662308ab2065f1d2278caece0939cbbab4bcbe3eacdc80cfae6e4500a5195883de000000000000000000000000000000000017ffdfa10cc8e1a8b3751312e5bcd09772462618b8bbdca59a60701a96dab651fee0dc755969e1c3a1d2aa4c11e48d6d0000000000000000000000000000000005c2aadea5a4b11077a2a1641eef2d3bc40c2d8001e9853e44bcead87cd968ce41ca50644ea0fe1d0ec4c2d7eda9dcd058c69b55bac97a633f3ed7816e77e2a26cccc029f7e7429c86145ca4645eb4150000000000000000000000000000000012bb9b8a1537c2856d4b2bbcc6fdec6d69eb6196d795bb0f1f49d8a886076e7fb424f63400134622941b2b88ea61b8e30000000000000000000000000000000017206fbf293f1ca1f2a0971b920e702ea39996058111ac2c041c12f58f67037a3840955e1185b413859a6f845b333b58ae7faf23e841bd53683521cb3cf215577fa51f0f751714b6aafe5c740f66208c0000000000000000000000000000000005eadaee4c48dca28f9469e882ca8ccb71f82bf1f2cb5b7f50b2e63a05e78415b3c5d0767a27f19a0b1c88400116e5310000000000000000000000000000000017e95e480a145b5e897c7a1ecc1b21c5a000248f87e74bfecc21a3cf8a06c04fd075612a62145ac089f208e567e4e12072022cdd6d942158bad47a53a9b0c3be910a41036874975724a5cdd22c0128710000000000000000000000000000000007b834503ed3e1cb74738db29c91f415beeb3ac5b75bb2cbf11f4a9cd1608ea6080dd1bd50c195dbf5ab6808fe9d6594000000000000000000000000000000000eb32afb90ecf9923ec22a483ffeca3a15d358013e64e521aa42d3db1ed0397e07a85321492e0693f8f041f4f8346c6c800ae0b956e38bc34cce55bb7e88f1370a30fc8ed0e3f1126c68c30792a2cabc0000000000000000000000000000000018f208e26fd7c03313df686e27bb6ea09d9a998764e805fe6182ee221cb9ff1552e4db5feb91b3b2fa595bc32f81898e00000000000000000000000000000000137c06c3f9eb27f1c0546b3c7ce879218a309dc37c0590fc3e151d9f7fd5963f0fda201faab489dce0043c3180abf753a57c3322133d6ffac661c888995e7cb067ca1309f3e9178a266f1a410a79c0130000000000000000000000000000000016fa49bb488a35ecbfa9e714235790cf6e7c3ea46e6a9a424f59c63d018206740e9467b0575077e86091ad6e0f9f56b6000000000000000000000000000000000197185b7c82ab9e6dc8e2a71c94dde328c923eedc6e305d8f36f4b636e7662e501917b89b33877cb2094b523c969dfeebe67f3d067b0d011abb31588d1b2fa9fdf8a56bc46b1a0196e926d4ec7304050000000000000000000000000000000006b797e2bb8c0c2a5a6ef8d9f08241d42299efc8af049245c254a2e4bfd122a01954bc596750942bf7ee467b22bcc528000000000000000000000000000000000a655491c6381e81473c23565082544d9f223042c82e241b1cb8ba48e847d98a373fc68b762a600489cbbca612defc61fa1d6d0d1876a67337d66c596fbcd7eb22ee308e4a5f66cedff584f1441be6a7000000000000000000000000000000000d7b7ba451334d1391a51142c4b7cecf0032fa6d28fa7f36d2d43ba39c6418946244da3cedeb2bdfadd453eb4d54d05b00000000000000000000000000000000127655a7acb4e3271a188cfd287cc1af890756e340eb4648bf3ea3e469644e6d21f63e64f81ccb55b9b1e0a62ddf58b5f0c4ac919efdf3d0e649126da7f8ca3daa30b6ca6f3be6854c0f447a63cf211000000000000000000000000000000000129442dedea08bee8661b558bdf8c22dd391900a501f1841c77359b20c1a1ff8838829baafd2a6ab5eff31e3f9ee884c000000000000000000000000000000000ed7c27bfcfbf9b41c833fc0d8573d7b28a6d788ea3cff4d96900559cc63969ac1d5fd366fa705357626eacf402c2ec560d8bf380bc2223efc779a747c0a36f8c2b18c3e821e96163bae14b18f3739f90000000000000000000000000000000013a11df012f8a55c263c5c55df0fb682e685a5feef160d77d26db7125ed08e6605f3d67878ec78fd064487f30228f4cf0000000000000000000000000000000019292997c874c72ce7c432f20da1a338e9dc433f9257b7353f99b5b531a9997bc3a3405b0aba89ab5a2f1cda98dd8199006c3a7b5ae971e4b0ec34a1007a02cf8c55f067115ba00c5967f70a7dcef9d600000000000000000000000000000000006a56b816898a1fc9954495b711c493ace881e3989207b2f862dc41c5fe346fc2eee18adfbb9db67e774055561af00600000000000000000000000000000000013971cff1e9a6ce35a7ae40118a007518bbdc5df5939a90fb263a9c345a70f4eef2f94ec671ac6964390d0478cfbf728f29e330b48230de23e0393bf1614cd26685cafb899db5a164497955d3e98be40000000000000000000000000000000004962ef115a4288177df2f0e4665e5d1976fd027f7f87a24ccdd0584e265e2f5cf0a7490dc7824f5eb26c9569bde9d6e000000000000000000000000000000001544f43d961320d59c65563d5f04341a8ec3e6e64fc2dba7e953652232d615c90eef2c859525fed99ae6ede2c39f510a861ffae8f62572938925593f7271a56e0f559b56bf97c454c38547a2185e2ce70000000000000000000000000000000004b250ff8bea739fd73b3c3463617eaaf3b6bb9db11c2b915f7435996bb4cff3561fc268d2cf0db1705711de522382200000000000000000000000000000000001c428a889955fbb5fcba993f2defa5906ac7b6a3fee6c07f52de8d54b0665cbea84e89a0af3523213fd19f7d37944012dd907071c2d39fe710215d174452459cc31d36007a1b5570a27ca2e42c8be5500000000000000000000000000000000106fab277085c88a7d664587f67aac8de95aae908177dc513fa24c8115fa23db44eafa7075b036242306002ee6918da80000000000000000000000000000000009e832e0d01bb5e89460e2cab772c308da07414ff8b880288c7b55d6390360924b806c71c9f9762d84d8d3cb3c2f6a6199893c06db2dab559f2c374df4298707dc1815e55034dce920ae7b1df2ec8d23", + "Expected": "0000000000000000000000000000000010224cb0e43534025f8ba7a7c426355a2091473ab16a752a9819d8e5f3eb5b1b5c0891b1c0cc0017655dd8aa7102cea80000000000000000000000000000000004313278c1bbc33ae2c3010c50be0120bb3ec794d9ff77fe97154438606e5f6f04c1dbf8dc01b827643a31899342e1ed", + "Name": "matter_g1_multiexp_75", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001812b7bdac748d2c0f05f10edaccd351e35347a4a582671762c0567f55e411839ec0a776c18cd71cc6de0c3a3b8bba820000000000000000000000000000000011afad9a48c42d8c3bf74dde15d7b744c6c141ea57e133c9dde7fd762636115e0296a647fc3fbca8144048721902973fd8555388bcc6791802ddb6c0f4cde44f45ac0b5d7ecd918bc34fb9fdedb65b94000000000000000000000000000000000f4900ffdc92661bb33e7561d08ce7757ae71a2b5ebdf6427922454044c6c6695e249069e83f3053e8a8a0adb5d3d3d2000000000000000000000000000000000be84ebce32bce4d58557422c7a8c4020d1bc643a99b00231a4d4a06d5dcb56bba61ead26fbf07079e9457dd4364ab6d33e5999498978d14c9de06f7beb2fd870f6f16dc42125fa496606e65c7466c0f0000000000000000000000000000000017399488c58e24c6e1f5e9a04291930595389536480ee6dc493cafa7f0e85410bccbe5c5841a1a0e495830be7e32c0da000000000000000000000000000000001055ca833e53172ac1d2d3d7c6fd625dcc72556e8d49bb487a83e56deabee4fb672b6cf7787d1231c760c2b7e9d4e55e7894a51dcfe5a8fa4da1745a696c870b353fb03a31238b8744840a78084bde48000000000000000000000000000000000c57fc0c785d6b81d4831ba71bf27f9af318a730a9502917a68397678c7ba22f21335ca2fff5bd495676faa418fe21a9000000000000000000000000000000001012cef9cbc88b838492b6a0074e0e5d24635d36d669288acebfe446157a202443fbaa5241b288fe418e1fa50eb3e65cfb6a294589c816e18859cec34262df6490a2af6acc7daa3de861198c5bcf4b13000000000000000000000000000000000a2a4bd7c7a79c2336b05bd5e0558736697c435477d4d0dc790033366ffcdecac3bb9cf48d1341835f7a42e17af833c9000000000000000000000000000000000ba384bfc6aaa8402ff869d78973c68ccc36c20a839da8d570b6890614f692f3a3316f0eb45e4afee0cca078cded752e83c4a3460caa35fc0e7342dd2da5c7b6aae818eeaf5a2cbf4794387180b95dfa00000000000000000000000000000000143e594b8762b4f821a6cd294251a114e248974494bd16a66f27192d3c2dc56c19d886b6305d420f8b81b22a2ce4faf10000000000000000000000000000000012fff0d7edf98633e1b10ba09b3c70fa0ea8674120160933689115275da6f95a8cae1ec665f89ef3c5454dd91d291ba4d2b65c1580bb46e3a4cd9d9c4eb7dc998168c66982448abf3a4e08cd12f612b100000000000000000000000000000000159734584d9cceceb9a27808a5bbc1be9acc15c6d2edad81759312898be4efaf85420cbd004102f7b051c83b27bc3fba000000000000000000000000000000000eaaf5b8e35ea5d52bbba19087520a96348b418159e043d3b39c451fb77d5b98aeaa43cacacadf3e6ebb503f49c5ad4c120892aded230949b83bfb2dbac054b83a9dbb852bd0ad85dd1d7f715852306f000000000000000000000000000000000c62de2a514ba6a74f66312553218cfcf49828b6f01ed05561b54d5f2a87806694ada45b80429e60fb985d9cc39e9c4600000000000000000000000000000000146b134c46ef783488e0f2d6d9b7039971e8ab7f3c29fbb2635bed84b44013159f483df0e7f0afd038b64f9e5cd105726af9777a58539e5aa8b1fce0994e0e1cdb5877d93ed4db715c5aaf74d6a8bb1a00000000000000000000000000000000189f02eda06f2d39974098d874325e4711a3f4dddf78c1b9ffb025425c8abe6dbcf5a01de0ebc802816fd67b0a9882fb000000000000000000000000000000000b378df4be4566190679691561aabd7182e68dba4ba05cc67ae19cef483fae99f4cc54540b5a5180c3854f5a82b6fdd0f37e2ed8e96921a0f9bff8b43d432b382d7b59938e269c381351ea49b8c1ba2b0000000000000000000000000000000011c0ed482c1a1f030fff7395db725633a60875028e2a7763a1ac801f00a8f4aff5e19e556516df899cf5e798197f6880000000000000000000000000000000000fa7faf03f2f636ab340a9d27d9b5a66fb8daa9c083a32904a4407d408cd3a14c17734d7a14abe3655979230e1a93e4d23f4a77a2c34a370a9b59ab1cfad77212e433464d0195f0d2fd20c69141389f500000000000000000000000000000000101f93857688bc4e4da2c5407d8bc68b9304d27c89a44daf7cebeef81ab96d89c83ac34ccd0dcd87297929551810e47f000000000000000000000000000000000457eef8e4d47638f83aa2165c0f2581e6a0886595f03fc41319d6ba71da0193a4cf9f52c39c79327a69037b11a382f696c59b0bc6dbf66f42cfee34413cc4cbdae7a61e232757c75474818591764d6f00000000000000000000000000000000110957948a78ad9c04b7abea4d1caff1de20b5615909c2f5b8ab7a1dbd02b9cf2ebfaaf3b21908aeeae55e47b9a21b7500000000000000000000000000000000168f08d45ec66fd4c9a94d82d9533aeaa251186478851a421f097d00506fe6dc0392114115e3e66d8874e0aa4b15cca281c180924f1d982bf4b6a2bb1cac590cdfe84198fdecd87364e163dd988f9b1c0000000000000000000000000000000015fe358a596150d9eabe6f18e06d562f9e6c42e9df7ad9ef57be8c47c5764e408efbedf136059d0e04f81d4838713a83000000000000000000000000000000000ff7a343274892ba23daff40f5f8c56db9a4788483c16a4a0495a1f696d3304c6276ab5a6d7b3cbdce14e9711b033582e44748b9eb1f44b5fb143cc8deaad23047bc5ecb8059705e7905c37625d5e2d30000000000000000000000000000000010d66f27b2da2ffe49b7540da57c25f0d36de0c43d04da9b123c153ba3eb63f3d26d28d4cc4cfef2c0652010be2f9eb10000000000000000000000000000000004d4cf53935c01bca14c75d1be55e7473d17de6c5a2d69813df90c7612aa4815ca6ea982222793ce66bd1c69f6e456feae04d7723b7c9cb0574ba744bfed8f8a347ab740bdab99136aa71a6d635d0d980000000000000000000000000000000008ece81bc19694eb40ac3ed089d8fb0cbed88371c7e314ece92547151165a017b0a5db4eac06bb2679a8d82b296f522b0000000000000000000000000000000017732041d736996351f132c92fa7249483612bcd79532156694314834c04d3b99579d44628c52eda270ec7c3ca7c3e576a794685a342ff25dd706e4df725e3466889d8f08a27ed2f32523b117f01a84e00000000000000000000000000000000026b3730efe162d58adc8d4845706f9bfe8ff54116b518d6c3b2bc6418997a44e98071e83566a905973a2d512878cf1d000000000000000000000000000000001449b0e28d1c43ced7cd687a550ff7669df47e80d3f2ee621b791848f1f7d6cf6272e39c66e8a69c81aeb67b06c630b2ed3f23c51953e46d400802dde46c374178ef379d5c1b04d25449891f0d5623e5", + "Expected": "000000000000000000000000000000000154edd700b8cda3a0532b2d6e81cded6a9662547b7d638f229ac44975d3b4b2f19816eb664e6208f33bf6f8d070fa58000000000000000000000000000000000a41ce7605d7ec592ec3a030307391ac64be5df9a7f8ff9b7ba15f7f6931353fb824ae8aa76b31466b7e06cb89fbc1e6", + "Name": "matter_g1_multiexp_76", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001227a5d20faf2f8d9242e1a7bea89b5d7c41c3e0d8f2629b4004269f9babd2521a97cc23075e13a53f4c66a82970ee76000000000000000000000000000000001726ad8abed312a369001f53270b5e7ad8f3f2a031804ac055ed4ddb2f40eadf9142416efbc90e84f499e07a307994db8c8e071da1ae8f615631759cf33fdb876ab289a6bcfa6fba2693a58f8601dfd1000000000000000000000000000000000a07b5276098f9b3767908192f91473c554eaed23b810d3b464a3677089c45e2263600cc8d84766c7c67d9b5e6a057cb00000000000000000000000000000000175af857d5b53d195a17ae246208b55f35f4ff193545ea5a725a70f11fdd34ad2fe22431cec7835d4fe3c401c82a93fd8371fff9230243d2e6cb6bdc4cd97260a8cf0362d18b9ba8df512d2a6f5563dc000000000000000000000000000000000039e109e0c2ccb5e6cb4c5451125047bbb854488ddd74fc4360430fd80f16db3498a8be9514099d3ad50ed4376bb5e50000000000000000000000000000000003dec8af7f6805ff9df65c39262959c3c80f271d2f0e53e7e719fbb16080d7d90a1211a6b4d0513c771ddad7d3dc009063016c9a9cfbf336ebda090d3f2a1a1b265787e1917f0148f82a9c0b66b21dc10000000000000000000000000000000015a00f549c3a050a5ffa8427bd0c8b90a788c6f9150728b037232ce1148c02bce908f60ee367b70d0c9642114d6e657d0000000000000000000000000000000016831ffba7d7d0bc239563e9e62990af4f740e57ca56d0d8826a9738338e9a1d2e8dc2b8869d62090b06f5a3f68bbcd36c9f679167d5fbb29250834c9f65d3025606e2af20aedec309718f95ba01e90c00000000000000000000000000000000165e447cc890b383b46f251531cb6d29cee835fe2a0fbe14c65f0998b2911ba86337ba79decd2701a4db1916e01ff4bb00000000000000000000000000000000007bfb52f3d4a281238eb65565af329b3e043e412588ae00342144d168d903cdc9131775ddcb5217ff692b0f922504ddaaa3300f5a2fafab132f5f4662c1d288210e7502ca2472d060aeea6f2eab2d71000000000000000000000000000000000ef8ba702c88495b63ac012fd9ce54b4a7ed67b5f7d25bcbedf951455fcfa95a8c7775c5ccc875ca5bafb9bfa1af738e000000000000000000000000000000000e53e18a3e7d294b508ec4084cf57557dd1a96ece8eac9873d35e4f1ee812a1380bf56569e5e797ef54202b1ea69291df6608f7c036c8fdc335601ac55e869215eb4e626f52bae813d45b827df2afd4900000000000000000000000000000000021ef16de941ce6394ebd484f6b9de12787aef9e7921292106e6c1b18b8de5c640e448f53abd536953b07dc41db21ec0000000000000000000000000000000000a5d482a1c20571e03501b89d2bb4c6d3251bf0b015f23ecfec87dd7cfde705f946c311483ffc84381609c394c83513a0cd68c59b1371c7063dee5732182961be90b95247511a5b564d7eee8d2c7c6470000000000000000000000000000000019c277726fc9c53de1ef3aa2ae6e15b360a98b4a2b27f9057f91eae5b2a308b2f5d618d8e458839d1d60105e4888e7920000000000000000000000000000000012ea8dedac124f05ff58ac72fc967e325e00e83aeedf956adee447720f491ba1bcee564f52e4f0e53faa106ed8088d4cea52329555d9b79eb1fd6d186df80b25245ba9225553f402cfa6037592f0b10f0000000000000000000000000000000000483da14288400f7b27d712ad849fd7c068db47709f78b297c746ab3e15f17f20130b415c9a1b024bd5b24f74428f0e0000000000000000000000000000000006746bb7d3a38fd833187a16d5500d394303e2edf7d5341d787257a9f811411a5cd586b300b7b4398f9d266bcc27d9cecaf39f2a517d432d1653c37fd9a6c4a8a811107dae428f4b2af3b12e4b6acea3000000000000000000000000000000001700795ca26c2cf7dbdb64034e45362295b7e9c60753d728bf689239b0ad7073b29fb872aff047605509ecd10cbd4fd2000000000000000000000000000000000266a09604de2ccb74c5d97dfe4e9a74cf89d3612de9b2d2d39dfa3362b500be127b83566a61df49e639d548a0ecfea7ff0bad6dae80d5f47dd8c208fef0f3046cf1040112d18c596eeb934762977cdc00000000000000000000000000000000146b2b839ff63d376db418a51890c46b0e3df6848a5a39a26a02673e93ea8dec5079e89a333c85785eb0cd1d67b1e101000000000000000000000000000000000f57e8e4cdf2670dc35a12072923d334523e7ccaca66795e3a762bdda8efe5424f88ef7e4c48b0d6760234ddaad4d7370d0c40e5d422685c5c83716380eed82392ae1dc6074a7edb5759fa34a61db2d0000000000000000000000000000000001989144efb1979a42399f93fa80bdf256316f6365bd82b89e0e2371de79ce9de2435a6cfe9704ed710bdfcbc8cc2bcb000000000000000000000000000000000084230cca1eb5defbf2f2ee29fb2c47b417919f220c25bdd2a017b514840466a45b2c00047e9628852d48a057d6335ad7e93a16a443d5f981a02f0b6866536dadd276abc0998bedd76b168ebc8e31b8200000000000000000000000000000000128df806a651c43c7e0a3b2c5833bf158ea40953fb0efb02620cc4ecfc4c32a409a8bd9e98e82812b54d027b6346afc70000000000000000000000000000000005e28760f1e574aff9664e373622147c08538ed45cdad72a546e4b5840758f5ed442f8cf24cb0ba35902e64d084406f32a1d13a64c03585715908744481c79f340b5bdcdd88d685ab8b91722ee7ab719000000000000000000000000000000000289520e710e7ce4a8a671cb00a015dcf40ee2a69309cb89b514f6fb2c6e8fc92a49905893e3e0e9567956fcc86dd89c000000000000000000000000000000000d1329a4174f802680dfe8410fb45e23f96eef4649579ca8e29b3040de33cd6bc485d1339afac9593097c70a0312f5162bc6979fa2e386abec058683c6d74de31af3cac21283cd5e4244d7edd94da96000000000000000000000000000000000175f1ed2dcd584f9c59c9c747ea1841792bfd9a64747f84dfe32e256ab5a48eb2dcaa337990089c86b3dd589d276e2ce0000000000000000000000000000000014d8bb6e278ae9bd9df2609690286be593eeb668f5e2adfe880e1d34276ec3bf4ab5514c7898a6504da63e0ecfa49d020f1937936cc3766184e47f39acfe5af4497e8edf77ab34083135a9ced61d25ed0000000000000000000000000000000018adcc61d9162790bd8c19be058afcce08104a952b15efc276af8a8807a4d2edcf8557aa03a297ca01d6a3869160148b0000000000000000000000000000000004338e5f7a12f2ffdc8158a51b14dd36934f01d7fbfe45e18276f2432b1b8210ba6bc5f246a52646bdbf99ed91f2f48f639a8b60a1849c71688a11e612b315439161717f525b5deabbce75808470166e", + "Expected": "000000000000000000000000000000000c1f9b78641053cdbdd6545691d1a5238389614524365bcddb07f9b9c6c654e58a40047084532b8473c7d541ebb187ee00000000000000000000000000000000028eb1aeec5e4672c41eccb45b356529e5331bb5fb0ca8f9e10b20a2ef1ea911f03af896ecf7575613bce5eb8a0b0837", + "Name": "matter_g1_multiexp_77", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001242be79cbeb2176ecadb07d205d532bdaaaa26bf9103371f2c4d86ed1df72ba8b6d5c76b7aef25c743ec4f43e5237fa000000000000000000000000000000000d2de7792d0655ebcbdc123ed6093ba68948b8ea156a31b9f23d1abd948f4b2ef2f27a3cbf72b9e5b3e966576e9ffbd5f3efcda934ec9d2ab05f25d618e5a483e830d0452a88e980589fcd7cfc39e5d8000000000000000000000000000000000fa50f78e45b1b7b61f8508bb5842bf59d0f41f2a8192cccec6e56125ff94b402dc47d3bc7762f3196a163fb148105820000000000000000000000000000000002933cca4d82c6f89ff8db5f9239ef8fee2efdfdfa22e0b4d0fbe223910b08060a77eb4328a05ddd31d205861db090ae4507a696cc57c0bc49fb4d1686752c71c9c816d7d09bd66910b23810d475aa02000000000000000000000000000000000c15db9d1dcf646bb4c169490256050ad5e408d1f45221a9b4bf02f7651fe93ffb892c98d19d730bdf3971281c9e2e3e00000000000000000000000000000000150a6d1978ec63013ef3dd3b258ea3a716c1e564469d2aba343f3d15c30cf287b706b9eef8363351cccb79ecdf5aa189518c1259f23de4cecd5e3a40abef5662b497ebaf16240f40ecd651d2ba50af07000000000000000000000000000000000f7e810001b9e3a11a535f6744a0dd357cffa585baabf065f1e72c9bab5484829a94159c72ff2221406c8b15de465f8c0000000000000000000000000000000009d48808fbf21370420cad4df7a269e1eeac98d2aa5ad5890ff362d91cca5ab1b57fb079caaba3a135c15515e98c6b175561616c195ccc1345421d8a6efec48f0a4dc8e89ee89599839efaf95c38655100000000000000000000000000000000191dcaf13a62fd6de0bdd16151b3c27f54b40ad82da1299164da87d0cb7b4c769f941c39fb4b68a8915fa95a5ddc0e900000000000000000000000000000000008b0ad7fa07edefa61ad026d42df18273b6628b65a4e655a98b705f588494d06c37153ecdadff83d94739bc254d6d8f837c77734125181c72454bb2d37c3725cf1f9b6d6f42b721bca469fec154b3e260000000000000000000000000000000005e3001f37e840a9edba48b3b436dce520203b0b36c3871933464be1c41178f7a8af9b14000b713ee8fc0faf5cc1a870000000000000000000000000000000001732dba0dbadbe7db31ea6af17520d791feced0a7bca298b932f51f3dbcb355699db533cfc8b61d35d1a346ea5de8032981483aa66e04351f4340fd2b461165b9a9983e91c148da78d3c8e0c69e77de400000000000000000000000000000000072e4d38aa0e168255f1d69ef129642b4b1b57289e630455b147574b03d17e3cf0f32326afb7c45da468e0d8c2276da9000000000000000000000000000000000b60685ad05be8453d5d272c73365d645dab6c50c820c1fb7fb50d82eebf9b03ad3c8f711140ddaafb2bb128b7be2e6c9913da6f756005ca8ab900ab686484483af07df768209a16d807f8b88b9334d3000000000000000000000000000000001401e023aac71de3398f89893102efa8760cedf47938a655983d73ca8d394a239f37959e629cd908b4e4f5e55955b153000000000000000000000000000000001458e304efcf48594d7094d30a804742b08ec94ae479cf5d4e0575828ad92cfe8e11847d6078f5eeea4308a8f0644172188fb33fb359f21bc5bdfc85d39676c2ca0a1e619bf8a8e8de62da8818bd6cfe000000000000000000000000000000000d446202ebd7a7995a4e8aa7fcbaf6c4c4591c4bc40b374720752a150b452b461f59b775e3088733ca967854413a9f0a000000000000000000000000000000000d5fcb5510c0f7ee77c7584631149cd494a5fc496b325ba93ac5f801e34c815fe562be4758212f32ab0978930d142adf5525ab4c4468a2ec0beecdb7fb072f28260ebb3d9da1a4c274b2c11a087e814a0000000000000000000000000000000000e034e4027e846a8608680995860b2673854d8fdf0e61e2663d7e0d904b6725ff28bb4593e7bf5e2c252d9c9710e39c0000000000000000000000000000000010bbf60b95669468e5dbdfe912dfeae9945f44454df62ec116b097b867b14c402349af692490269797a30639177151945ab5a55a5cfc49cf6c36b5718e108f8d006bf7fa1ec3dc7a7f9c02a2d1e3fc5700000000000000000000000000000000095e1315b3568e8a069dee00c3676d5d6ad94a2164795ca5f1418cff4a25052e741530c0df6d50c5cbcdd55a084227f3000000000000000000000000000000001993b036a3225289827691296b51ea4e42735af0506b317932b6719a381a59c89871a2a394f4a9de0aba3bb9a2b881f86ce7aa7dcd01c1b7059ad3cc0ebf5d19ceaae633160a968c33aac5dc6adb94280000000000000000000000000000000010aad99bc8570d83847a2a2688fa61d5d0ecc978ae842715a084d99392db343f581290478bc1bfeb8bb692e0d6fd58ec0000000000000000000000000000000004f82c0527d3e9329a6b460f1d781f881073b87711771699e9cc8c4229d5112d91d4357380c12c120313d2c9eb7bb427854bce63dcdc0cf408b43690abbbbdacda5f3ebd9d9e462f89f9f50a9f7bd44b0000000000000000000000000000000008ec7244587110fd3fa0e1888427fbb3942d0885e002e4f846fb749bfc4a82bd7edd15cf81af454354006a2ea85234f6000000000000000000000000000000000fc7a19df5adfb5a154f32b9022e54b1560237f4319160c9c945b7bf4b55e45fc86616d3ec3cecc177c9f6bc54dd2cdb7603824b834a83c1c408243b51cd2c2d31e2ee763d69e2ad6d369bb6aa2396fd00000000000000000000000000000000037ab89247516909dceeb59abb90d6968ddc3ef3abffac93c68757f3c9309d145cf9350e4d8f85db810cc5f156f8f126000000000000000000000000000000000289168c6dfdc25ea10e1839e10ddffbb25522be7ff80ef321241c6cc887fc7a42586dd9c1686c6c5c2e4caff0278155923c86e91c48582f19409b962be361da5936db02b6862eefc288f9a32d5f5476000000000000000000000000000000000523020b4c34e867e75cdc668e541cfa25f2afc35573b2db083987fc585a487f1eafbac1c4267d2fdfdc5d2f94c51a84000000000000000000000000000000001581bf2744d78d680c9bb38a3f0fee76b6f0231f011b3f7ab3fd59c1ec6c99fac518857dafd410bce2e8610c6e5efbb1e1b3071b561a80aaaadb5cc24b348a2b6012340d3aebcca7e2f56983a8a13bf9000000000000000000000000000000000615745e737980a923e87c3ef72330f55e38434b3974c1cc997a9d1136527de9bc21dfa73ea0d33d27324a53f12bf6f9000000000000000000000000000000001164b6ac376ef24ce3cba8e2ae74eb58437bbbedf68b4d0b6e8b7e213a789c8c3b7f173bbe52150faed93fa83bce0a9db6863b755d3dee61328a60f585531c436663bbeab9afaffac49b6f0b57614eaa", + "Expected": "0000000000000000000000000000000016e6cb1f899ee8f3db4b934c1facb3928b08fabdce74f569a06ae6eeab201925f6acb1a47ffef3c608fed32c949786a7000000000000000000000000000000001796fe817d2e4a69b4e8c539f6f2179a802cb02caaeedcdb316b3ec6571c13c349e115a7a05b296d6b182c8a618ed918", + "Name": "matter_g1_multiexp_78", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cd7cca90c8742e7f541981a13b177a4e639195af5f15cee2ce37b01d50fb8478a3f0d0abe4312a4d92a201b4dbb030e0000000000000000000000000000000018e2a69bd1cd9bb7ea75ceedf28ac9c9514e8d28223af69dc991e46a03d8d272d267842f30552583a1f08a07188058ce13ca0cfc742607bee58988df361d7cd5d809ba4fddb209c898cd555369fff5660000000000000000000000000000000011cbbf1ee7e9cf8deae286ba67ab0eeddabd2471d2ea15e86c77c4f2f23ce38e17ac3f3e3c2a40a1640bb3485be4e59600000000000000000000000000000000108e9f887f86f03dcbd515501f69a5983b4a6d707c26b69cb9ea7a387c5a914612ef645cbe81bf29ba91d209e839c72abcca8ab454fbc576a2b910f140b23c23b14301c19e1f47989d78eeecf279862a0000000000000000000000000000000015c1856c661396f8e3a477932e1eea7e124b2e9ae0dfb1df67c4b3928c462cfbb3220c4c2fbd755fb6435e144a2b937e0000000000000000000000000000000011b114659fa71c3ac2412d5c2cc1e184f05a45871e5ab08fbe5eff68ef9e457c4f3e2bb4f16d10e91f7ee2231bc3266359f82ceeb6160d3256228d7a41fb3caa6f305b23142ab979e728356a13309e27000000000000000000000000000000000b693c93d4f06be5bc8a84157c6f407c3db14175c56310e7d041118ec869f3992f75809b209f6dd01085991deaae2a96000000000000000000000000000000000ee21d90cc3825b401e6d452e27814672d849386eccec7be992581b1fb9f4ff4f3892d63e124bd669603e6269f099452995f7d2038ad02deddca34399e5b5653fa471d998c52bd52241840cdb9202b2c00000000000000000000000000000000013b40cfe91492dc53089325be73b5d404288e8056e30cfe4bf3feb6b854eb7d0efa3ac4afa822162ac16608555ccc92000000000000000000000000000000000576146711dfa2ee08bf08121c30fe63ef0ca4448b28076eaba9298ab925c615a56d497044be803f73e9586763aad52497b67e68bfe2d7fc256e6aa610dd91dc1b02c64186d24702ad8fa9f715b582a50000000000000000000000000000000009d66d52069b0d23faa33818a8c9bfc812ae6938dd02604e98a422f50c085a5641a46272dc9c8801a9c76cdfc2020a0c0000000000000000000000000000000004dba0f971336c813933bc6386e55044f5e3d3e5cf38ede5811b4e775fb41cd09d7f136d9de6fc36f2f435b8cdfdc26198115b9f84e3ed6947bd6f0e3c65361cf360a65bc059515da852a72ec5cd17810000000000000000000000000000000005ae8fd5c52fff0b80a2c5c4fca4bccad28f580c94edb7e28ca2ce2390cc2fe476a2b11f63c3c8759847e647d5fe5d1f000000000000000000000000000000000edbff5012f6efde3a9bcad65c805b1c4ac0899fbba5fd760513c673ce8ad18d3baf28acb3344f511fd4d9785afea33c27370e1037b709015e0bf178a41ac55774a813368e11ef7a764eb48abe75dbf50000000000000000000000000000000009d003d4213a46812ea1565bd9a6f0f3da1e69e289f026e619911354cd7444dfbfff1d842e3d9c61c305b2154851b29500000000000000000000000000000000070a1387dd16f9d8b4306ecfe0e9ba7aaa5959ec917e06da4ddf90c992fc569a56c61f6372bd26e21f5cbe7d720b68c66bf5fb297948e0ddc60ba26e49ef2892ca008e64a22ff2bb21ff70c56112f7100000000000000000000000000000000008fccb033a3e10a0015b11ffe2ed5f4c96ea2262d06ca4b0eabbc15c9b299a5220444345c65e7092501b56599980bd0d00000000000000000000000000000000127583566286e52f2f2c7809cea1170a49993f171c1c217b82c17983e02b7e69cb8c948725c7a613c41f96e80c3f1aa96b488b6b63cb8bf34efeedd9f95dff4d3d8c067c0d807bd1e20bd267748275d000000000000000000000000000000000084501b09915fa13908466d6bd50a7e0d8b39893bfcec9c6876b7ed8effd100b8f0a459d754efb6b110af2becd882cfd000000000000000000000000000000000373669b2a03d3da4e907da24c61f5e7928c5fcef4e6c9ad4303fc4cc2cb641212680f7c33605212de8914caa58732f44f661845e91de1c09f581c7612a25bfa0889f77c2add31b493b37d20bcce110700000000000000000000000000000000010608a9f87f46e528d782ef81493625f9a47134832eecca6471d2113060703750b679e64179e7a1c1c81311c38c493400000000000000000000000000000000032a0c82e42be6203415638e6cca4dc1621f87f030a9d742bc77862f4f10ceb44f1ecd377acec6587be0fdc33d8c17c98b3bf8d5e529912b1b6e445f592a6d151c6f5d01d3b021a31a2669df4ce02aa300000000000000000000000000000000126f62cc3033b7235be5778289fc568a1c474b70cba2d35a0b9fdab5cf239a2d4fb03f0bedfa84425b142c04284da058000000000000000000000000000000000dc1f91754d582f57b413fde9b837cbfe3430582b0964620b02bf854c6f666914157d44a165f16ca1d7204f35caa7b0630e1c8f222019b877e66df0b6201b5bfc5b6c10aae340c55e74410a536ffb9b20000000000000000000000000000000016d277ee7864b3af3102190cc99db1cff9fd1b1d6e7fc039040149c5944e7837895532ae41b4db50e29a5d6bad7ceb630000000000000000000000000000000016c3f6e29114782c84734cb927d1a89b7755c3a8fbc99076ce3ae17f7f1d088e5fb9757237773fd4e14c2855ec12b93723a258d66f2296fa1c71065cf23c994eb8c6c35d35120d16790fec791ad215fe000000000000000000000000000000000dc8f59e410ef7145d636d2c7d43fc4b1c903d6c8c0efc3ae162293c7c65c48182f9a25c4e5f111635881533cc558cf7000000000000000000000000000000000082dcb0872d815465131953c69e260e3a9ae44d16975f361b5effe13ab1d61c18f050108e73f50871221faf28fd79771ef4055b85f37b548dac2b64608d99ca293548bebe1e24355393520c34eda60a0000000000000000000000000000000002536653a945e03329279f382937d72bddd71ff8f19053e1fb19ef83d9751eaf101676249ac65fc61a0cbacbfca3cfac000000000000000000000000000000000806ebe4d62e62904ead05f814dfa6e8a392b887bab4aee61552c6f93ea5ffec6593e9078a33f4cefc96393a667c934c212529248c51c95b5b26961f27e6d44ef1c2b9233bb2ed32c3eee79ca6c6eb750000000000000000000000000000000018fe7f7093e0313737b8e0c6ba2fb0c93afe1e8241bc769f14cebbfdb4c73aa578fe3d37ce1221f21aca8af9ab99201c000000000000000000000000000000000ea0f2ff4c8ed0a51fc8fedaa056a369c5e97e347c6883b215d0f7e019960c0178a7962415c220766c16f4596d4b9d8ce9888dd839d9b8c236394c44d358f452a4588ae65d24ffe2bd345fc745de9d37", + "Expected": "00000000000000000000000000000000184197d1ebcdaa25c041e95424bb891fc9eb38160cb0d91e702ac283280c6df697ae85674eccbd0fb130b6f2e1c193b00000000000000000000000000000000015593ed27279ca601616dfcdc493b8c7bd68260f97f8a9f10c03cf871b17cf8f492518d2f8569d60056721723a0172dc", + "Name": "matter_g1_multiexp_79", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c31653abd67897b3bf8f046712b12d35ada1799d1c18071182fb61273b7bc506779ff2d774576a725f2f1035431c82000000000000000000000000000000000011b2fab972f183c75df3bfb7968dcdfeed0755f71ec118e56c61203e97064355200c5f016b9ed66040fc886062dc58f812322dc2a7d5faa9e4877638faf8492d84e0f4c4c65ca3aadcb7eafed2106400000000000000000000000000000000030d7e368c99113318a6657deb3c89424b9acbc5e3568e03dbf629333ed3a5cb45ce6988a3e5ef79e5ee91aa6b990b1d0000000000000000000000000000000002700af33eedebc8a4847d6772cf615413149e6d98ba3b36c96e43c8d97619cb01117570f263bb2f7579c7da67f40a25c1f6d538c5b4ae15c84581f8fd4c61160ed395816557fde197e1a013ba41ba0f0000000000000000000000000000000008cbea0d07e870d679cd20b4ad088bf3c5c23e83266b20e816f69bb918824c9bb4d0b3216f8da5a5cdc6f43359e02d06000000000000000000000000000000000d1c9949921e37e73f95b0e4c444e390bb71fef0d893d1b341b9338321bff4a23d1da4ffdd5d7148fa9fe9cc52ebbfa8f2f6a4713eb692f7667fba2a3dc35363c3ba163519d95757daddefae11a958530000000000000000000000000000000003111c080876670db10abfc439b17b32f9e96758b057d3344c7823af1b0320037906b1a9d8fc42cab9e9e0e8449aa997000000000000000000000000000000000e0c7d19a0362a173b70b6fee3d3feb541c7d2ccca71f1f01f8bd105a18024fab05e0a6d448153139f2777b189ba0fe41022e50c3fe7b2a65aab79de6d9e47c457d197e145592dd0611b1dc39941513b0000000000000000000000000000000018bcaa4869a5c6ae46e6f5fd5fcf835965d21d48871010245e722bead79d844e96e10558d71e425377f4adacb3f74074000000000000000000000000000000000414d616a4207e7cf79352dbf7f319bf554f043710cbeb48aa502235db7d30f4983b5381269f34ad6ad4fd5ff56d9586b80011c7a4aa905d4db6d4f6ae46eac9eb8bb18613d4ac5e5567990d7e8fdd96000000000000000000000000000000000c86dc8b8f38d1e4281269ca252adde9f0fe933d4cc051c7aad55f96252d1e6f9eb6f4f876e153c11b61714d985d318c0000000000000000000000000000000014113f8e2c3ac4919de334eb5c04c909b88df39998e58883a5393a4d760cb6d07c65eae053a7b2100ff3028a786782bff397789685a736375ead2312874174795586e12b230669a90d072fa636128c7d0000000000000000000000000000000009b4437230d9dae44852d88dba2655070162501702998ea5a035cd88eecb64ad7c9ccaf696545dff98d778cd7400943f000000000000000000000000000000000706b196155640680b257a537c836507d95e6d5cb7f163ca340dc0f8b80859721b7b2a2ba51dd4d72ccc4c3cb91030c928e325fea39d61269c576626984f85ea43cd683b08c3ce111aac0005adda39c50000000000000000000000000000000017bf848757da8e7ce5e5e69574a9b31d35eb628102897922d4c996443fbc970374ebd601b96b3ca9412c13f50943c7590000000000000000000000000000000014741c0b49e4f02630a6cc1a723cae1a6a9862158bdcf996b46a9614dd34527a859db0b5718788eaf2caa059671f3c683cfd9bc41303803a0b4edd121b818a126bece309dfee4133aa5314cb8a91d08d000000000000000000000000000000001269325967fc68b78cee64d0386e1fa6ecaca1f85d672f8b63831a1adfcbdbb40461a77ee0e59b1fcccb7c1d543f08a100000000000000000000000000000000053a22e8c4219e4d68a961c2127201a23443d8fddb02e3756cfdf74e616dd4abe73c4ac498ff5f6a68d730c0050b79e18e08fed30e422868f37c422d1efdcc93912d55b0a731479af863dca4705e0c500000000000000000000000000000000018248505148876ab5a5ec3be7e3a6cbac30798d52f437bea7e966921723e6a4a30a0e53518e109d1683f3a4b3432136e000000000000000000000000000000000120602fd461206973e62ec8a3f1cfedddc1e9f9e1769ac06e2a1024a9af19d402f40ffe30f9cf77b8704497d3cba4a3674ecdf795b48d62f0db0f9cce057fe570d15c78f2eb7a77b66e4895a45804880000000000000000000000000000000009cf2460e5121b15d177b8ad803c045529933d1abf62205d04726b67d64fee85e2008b5098ceddc42d5c8d95d39147600000000000000000000000000000000012749abe2d8b47bd9c899b6726ccc749bab2786e9568d32299f0e659664ba1efe764944c4087c549e2bb717c87c6b876288fc80d07393f629ef2732879332a253b49d26ca7b2bef7cc49ee40530b2b340000000000000000000000000000000008d764f80994fd37a21f6923d7fef255145ea875c892888d45efb7a37310182b04d2c16d4d91a2e7c41164706afdb617000000000000000000000000000000001156c016a289989510f1c8b39bd6a8c358a1c5611bd2286e9f15983f984e89e061e60717f1b700abaed57076e148a8a956e69f4ce8fbd8f86f546fd6d129f9760edce7c5e178dffaf987bf565e9bb7e9000000000000000000000000000000000734cd0d73ef7d79fa501b98b7211d551127abf68c473c1c72c591180b605c938ef71f66c422bf2a8bcf16c6c8946c050000000000000000000000000000000008ded96a9fce61040c1acc71d6496cf72590c63c3514c4f1f77d4582635af9eccdfab2e60749ed24fd3b6e30e3576c58ab40e86212189e6f5925df810141c132eab20c123166cd8d3c6f40f5dcf1b1cd000000000000000000000000000000000df9ecaab534bbe9c8531f813a95a7733df6a4c8785575c5ee89647941a6984cdb5a33d2eced340c683339c18f5da32b0000000000000000000000000000000003632b2377ab368bc9f735609452e0ec9fadd6f261cd5352e0a5ed6a37b25ff7a49fe57452e79e7330661b81d7d80a64b96a5b6129c58113bca713e6905c026c0bfdb6d679c203cbe2b256b0a49ecece0000000000000000000000000000000006bc4871c0271394c9d6099667ff68e1dbfa9980976075bf81fc18f1875fc91b50a0e3be622882c90b1594419da7dbcd00000000000000000000000000000000168e1dfde47d19280dc213bba9fbb61fdce41f81d4b25b2a7abae0404bbd7a413cdd89611966a7f9bc32617dca51f369d9d8147c4453cdeed971242d316e350abead3dd08e93ee54738a4a5aed23affb000000000000000000000000000000000132a2a6832653eac18e2fcb2c336292dc7990fa1a004404973029a227c9871181ffdd88a74adc3edc7a8308dee803fa000000000000000000000000000000000b230c171d5739fed98d32a3b27584bb0128434401e9e05ae09a4dcd7a017d1cefe7a46dad2db5addfb389feb9c846181ba8e52986d3bb0421eb53b18ca8c21b9f7e631f16b99ec56748baeb541b32e5", + "Expected": "000000000000000000000000000000000cc6517e655697449988bef516e60c8202fa48c3573967491ea2ff2db9fa0de3f542f656228a5b90d7fc1e5eaa8b06d7000000000000000000000000000000001191ca6ef2791726a31f77b0431ebe170d8fb595cf6e6b9b33b7fb0d4acbecf2d171884c392832d2a91832e982c5c0f4", + "Name": "matter_g1_multiexp_80", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000111de2b65f5f94851aee2861910898b74dacf013591772902239ff7f71a9cf84919bc4a84d6936f9552e97314eb52e7d000000000000000000000000000000000db96af045180bd4d88dc8c40f8cd918d2195c2f3651c176c1ee3ccb583a7363e2c2c900f2a54f26a881938cba98565f7d39b55aadd47afa3cd35cb85a89e729ca236ada965b99f64ab302a84952babd0000000000000000000000000000000000e48144181d956ebb37d72c38c062958f73de8944995c7e7568997b04ec19949b348fd80e810632462ce43c7c6571ae000000000000000000000000000000000b4a19556d8c21206c4198059adf5ac2b8a0e08c948a8a4d7465bd31c5ce5887a069df5f80b1df89ab868ca53e16c730c41ece17a6d8b4a22994227b37a9d73e17a88859683afd5d226e113246e70cb10000000000000000000000000000000010547f218e33dd9f9425c8e7be4136e65ee3dc23e0cdfd5f1caa8986162cc13b77d30259b6b9c359ab0faac9ba29bda00000000000000000000000000000000006729e532ba87a77d1e458663690110cf63eea96f8e41a5a338493ff71b68e78e78b9c929006c0410c3739b15ff2810069700dfa3b6e5fba735d1fec3b3adc90719ec301c406ac40673f4e5677da3227000000000000000000000000000000000d3630086b7e0c068c60192be8724ab4d18409fa6ddcbed02b52fa776e84e2115457c40cac7e903047fc435114150d5c000000000000000000000000000000001066ce26d2e940899e80e9c0e515ce9d5810a4048925a7ddfe0cbb24b3d8d654c6835c6872fff5a988f525c648661cbc19e8eed297661c06c92075629e163e80a08835254f7af8c0f179400be114ba7b000000000000000000000000000000000ae73f595bc9d22c8c959eedec4d1301a13c9b8c643f4335160bab4a99886694d112ed6fbfbf082629b76d1e2509ed280000000000000000000000000000000013dc07950689ba36736838714eeb28ff3be77ef8ba181718ea7b5229e01d4e036c98eb9ff7a867c017857c029f7f13e3199ca6fb7f6df8a2e72971c5738ad75d84935e922587acf3a6b6debf3c37bb5e0000000000000000000000000000000016e11b169dc405035037a10180fb368988498b6e209ad62260c7ef45e9bffedbb0587fe282d193bbf88311f3d2880cf500000000000000000000000000000000090a277517ea7a1a7cbd68598aa1e16977cc57c8d095f66a7cd3f67814c2b8f35e17e20d7a26fa67274dc5aecbe778648159c6b98bce6ed31c30957280d8f7820e9376093d1ec9ac68ce0777d02b084b0000000000000000000000000000000002ea8cba4bcbaeed7feaac63caf21645ddc97daf9250ae29994fd04e798f94dab33bac6e08eef8e6c20f122bc5f88996000000000000000000000000000000000f7a0f6ac02bc9821a883393c8265ba748f9d7c3ea763037bde3bb0178067e93aea4dc70d25e5bcda642d06f41a7f18bef1bc580e0b52b10b049f07d5115a60ba96d14a39e48ddee3c219f11c3b2a82a000000000000000000000000000000001618ee9c413dcf713699b7910989c20bffc5ba1ca03e973005f49084aba558797e7f9ec20cb86f308d737b97c08f42a6000000000000000000000000000000000db1daa5ed21250c696ca4da3e82f6623c54d643d773286811e21c09e9ef7c9ecb9d84d90b9c76ea9f65e04a29f82750d06f6ed682c56611fd060ed2b3b1dc48974769ed6dc504ca3e0b9f68b77e63c50000000000000000000000000000000012aece7d9e7384ae79e047ca4b4fe72fe541a825530d6c38b9a8fbbf8b801883ccbc3cae7c33e4d811198a7b7876c92d0000000000000000000000000000000013fb42fb1b4e7785c1b66364de150d1e38fd9fe3d8f209b7c168beacf4b26c35fe0fbb4a41f30adabe4314b20b16319561d7b314ae9d9e78f628ec5a207d12e2dcb690688d256fe46e0affdfcc9775ae00000000000000000000000000000000033fce20f9202b89411dbeea59a5b1c632435eaf29e2739163b0837ef9278ee3903ae569931e70f79a9af5a2abd29749000000000000000000000000000000000a50360c73c3f735f97d7d71b21b2831f7d7fb59c594e85b604dbb79ccc884349cba8eab9ce613ed60416994322916db03a0c47621401fc20d2c78f7e30814de9a6f838d4328a5b5be628b833c31a6fd0000000000000000000000000000000014d9a7dbc453effa7a76c774a289957b0ccd72994e568c0de345b482ed2b6db9a3a3e56e0fda159c25acb43b4a6765d5000000000000000000000000000000000b916f28e3fdc62d296e421b1684efd4e9a4b523f79dfaecc00872a1d17724e1e07e2386b4bc6d76b157ae94559d0bcde4ac6a5e740e073c5ef8af389e70c2cb8ee8c4c04c2ab4c48c579e83e181005b0000000000000000000000000000000012a4670c5c2847bb188464dafe41360f00621ceb3b5da0a3dcc16732f4baeb0491664ed8c2f95ff9b44e2b77e698eb3800000000000000000000000000000000077b561ed2fe5c91b30a12a2df71e76cc4ac882301d1975c3cb176e22874e28868655db9d0c91003442b0277eff52669c1e20d8003fec60f68c03942185fed934ebc197c2863174442d1a1c8d1424d31000000000000000000000000000000000570e1a0fe7f82c0d3cf38d90f77634f8dc2bf9b58ac473d9bcbe7242a4bb76d11f36083c90588a680004c077e957a9e00000000000000000000000000000000038ac2b58a16af0a3a0070faabe3969025440d9781e3ebc22ff873dab532d6ca1b0bbf21f32eb9728a322c158f5390fa7713ea72a2ee99442232472ab3dea9307a02fa1279129d994af5588af4fe7af40000000000000000000000000000000004a3a287fe4401c48d7dc804363941b5836cfad6490b00dcb0ee830e876fa05a42d6e2b036a4e213bbf5b6ae5a4e31ee000000000000000000000000000000001877a91254211b2af54ea910d9efdf4b4e829fda5bf6b0c2dc849903c357bfc6f55b45c7437ba538ab6cc795b71e95796f128420cf6ab4616a05b287191105f25c7212f2c39c3230fa56bc27cd06ebfd00000000000000000000000000000000159bf4b0dc89cfc9d1687d8552489b5c3e2ed059164197028bc67c51ad18b341d04e4b8be660880a76a44ef11e785ab5000000000000000000000000000000001643a41fe4104ab0bb96200472ca67064635bb728e6d909fc0026216a90083eb612f11bd5983cf4d7fe664f1c527b96a12bacb3419c34369dbfd1c968334f76bc50885028758a975cc812a04e6feabd60000000000000000000000000000000003dc904709f1da618b6a623888015a875b11e5baa5c10eb6d750354c09359b180858bf29d24bae18e7c78c81465659aa000000000000000000000000000000000c61dabb7085a1937782433ec46b0a063a34e102ae9a6b6bae7d82c94e93c3cd05afe19f0673f729761462bcd0d9ca5e5b00f26af6f59620c7130a6d12cf2091b5f52a6b638484fc1f242dc1773be256", + "Expected": "00000000000000000000000000000000109dbdd05f92274f3edb0232b827a4abbe115bd4d51f8a1e7b8ee609511125ecf35ca60991e75a0b7973c4085b7d4bca000000000000000000000000000000000e14a168decb6893e9c447b4366247d997701471a33bf8f762bde44473d516d857d1825255d8b4cee8d04736cb369758", + "Name": "matter_g1_multiexp_81", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009b85ef81b184c6383ff4e2695a8c261ab252ebd81bdb518001f110b2ba72fbf5014214f816c9453319934d8a010aa0d0000000000000000000000000000000013ce486b15a77cede98a46f66ae51d17713bef6dafbb2ff34c8f441271d52f4fa27fb88c5695f4af6d43e32333e68130acc5a8ec806f2f273120457865582b08697904a2c6510bfe9ea21eaf682fa4fd0000000000000000000000000000000006a10f5973fd2aa312ce8f30ba5caad0ae6028bca5c186e4fd55ff4e3f5ce00220b94683e440b09a9fcee238af140699000000000000000000000000000000000ae8e9db6953ce2461bac3be78bebf6c4df8bc57bc7de375aa652d793bdb0899477464097514f0fe2d0badc9027baf3898c15a259b4dbb8c300a39f0af558a9827112f6b4c5eae3d43bbfe057eb113cf000000000000000000000000000000000c0c430ee1e9112d901b82e43a25ce4e5b61c81ed7ac7220d88bd10d44d28c1bd20fc8e1ad85f9b6eb43fc232594b4f1000000000000000000000000000000001233dee860032e2f9a67d7b3d61cea99f18b91620b76f8bd178295ac4fc3b8d0db4c4ff602085c7a897435a283e2a4eda0e68bdc97fd642581f7e62ecf134df2c05570713c96fa733d3db96ace88f0f000000000000000000000000000000000061e9d3a919bdbdc42500b7daec837506bf0841caf35aaac34a3670517a59bf52343b47b46e8212208cd6fdca6b7140c000000000000000000000000000000000b87f7efb446cdba6e619d5fc04ca8dce8e57f6a76faa4a773c03ddc0666ce2d83682f24d8463d9331ae58e8afcc5641e5512cac411cd103fcd7497fdf47d1221999bcecdba30467f06ec356483484fe000000000000000000000000000000001606311f79e836a03da5cacc4e1c3930695372f8f679c8f910627f86af15d1612d653c76d88b9d33f848f94bb63fa1ce000000000000000000000000000000000075b5d9626107a486079315a85991f3d77461b45e5c8aca6876287f624694c8ef1a4f5f0a5b65eefa8d6a4746fd2e5fa32f6861298bcfd4668653544b4551d7357d64f733365a5f08ebf297a09fd4ca0000000000000000000000000000000012bc152cb7df01fd9ca35142806664fdbacb881adcf443051abac7c979d09a1c887fcfb8cad281f376ea3f6693812914000000000000000000000000000000000e32d4d6aa1f5046382c1d5e6e2f97319e8c6887b850b3cee498c482e35319a4f062be80f7f48ff3d1160ea6b18cf67824301fc5c3ab842d7f6a278fcd32249f1daf86a31dd254ab9a21941fffca98a1000000000000000000000000000000001599c2c489535375270f0d1f370c6416c83c4043dbdb4999256f187e29c198b1f6c5bd1a52c997f01ebd3622c40feb63000000000000000000000000000000000b60ea3ee221eeac4a8a364eb52ee08579cf5a907aa5642971bd5523dee5dc6d6584ab993d33d9b8ad9de4a1a4f0cbb117a920aef58100de67c482ae1fabf7ec87cf3447bde1e19d9aaff82569570674000000000000000000000000000000000b85c776ed6c9c78001ec7bf3412be495f40b0978d0582ad4f86ed54464fe562f9e699f727f36b2fc753f4328f0b2c6b0000000000000000000000000000000006e11a826fb4a8f0ac32f5c52a531508ad1363bf9b09919ccdb61ef25baa7718a4829fdd10fb6b680321cb7ef12d0c01d76d5eebc3d099448ce4a8ea6dec047b0f062c6361ddb9e95ec898442423a3180000000000000000000000000000000013539f96257faa2ae642c15f9c04e8fa7b2d6d095f7ca285e0dd90f022ec4a8fd74cf48557afdb57bace088b017b8ec20000000000000000000000000000000006cbc3e4291f373ee280eaface275e0334e46e54f65efc4e18b4ebb8ed1e61941d9c859903b56ed0d4aa3f4f3152b5b4cd4cc1453dec7ae335db989886fc0964ee73e12bab69ce1f1458d1416471176a000000000000000000000000000000000675b4dab12db428a14afd8e696a64c0bb352bbcbecdcf2b064428b489194112f1cea4a383788e0bb0e97b7f88b817700000000000000000000000000000000013273075195b02abac630211c5870727a42e11bd96a2e2c6057d0c96bb60b73db72dec3135122865cd520c525588664a6d207c08e51d64a9a47f5353faac77fbb184e1123d38e39bbada85534cbcd3150000000000000000000000000000000000cb4629e659d5c2d91c5f909bbeb3381271ebde4f8486f76c1903e86efa78da06af752404ebddb3fc5d1a09ed28b3aa0000000000000000000000000000000019202a57e95d8d2623851973c324d1ed64b48b15388e052761493b1cdd6f3b54c6f47d2b312edec23e9da4c815f02e172e1910b704d39b6a64cc7a44e44ba3e8b7e64ddfa90dfa6b5ef571f9ff7d7f0b000000000000000000000000000000000a80bc4a39d62ca891044795e2b78f4eb82a3bf38c4ccb2e6d24ced4526db7c57ebf8b1951af0707af5ae5929f727c290000000000000000000000000000000001cbe991b082e840d8bd505a2eeeadf034f8f8c2bb530c742d7953089da1447e090d82399bc332127f14f1521c95f0042eda0eb154d5f9b0e25a828c6f77541701004cd0293c61ae4d36aa3038d0f18400000000000000000000000000000000112e7894d90a5cba2a8bdd0fa750d6e57c0a9938ca30526eb5289b4a59f92bddb33f59ca22a51d1bae03b850999180fa0000000000000000000000000000000016cf6b093a188ccbf1a000aa860fc794546ab0cf261784e7b7bc5750848f685d629ba55f71f2266edcf24d27667d2720caf6dcd51a851eb200c7f5fc3e106ac5ffc432f756b942b1b9a5dde31cb2a3760000000000000000000000000000000005e2b8ac9124e8ccb6665842d77a2e9398e5b3519fa4fddfc4b10acb5eefceceb1cd6cc733e300ff95ea80d09e3bbeba000000000000000000000000000000001273d1990fa922276859d3921bbd49a452c821a9746c747734692d12c6f7d45533c0a7692d1a2d95e2d2be6dbfb3f6ad106d4a893a68b7fcb8be96faedef65181c239dc2cd752c85ae7800ca84fc2dfd000000000000000000000000000000000dd2c7410b5f5ee63ad2a9ff3a96df2bad103caabe00a9892cc9b2ed2cc3bbbb53724b2ab63cabc44da7097b619f34c3000000000000000000000000000000000f695edd4b67f81f09fa89104c81717577cdd16db30901f4f04ac97e2e0749a80d34422bdfa85b5cdb65c042d90515742b9e1cfbf140f4a3b1d06be656ad6ee5169a9cfa7cbe6efbf8173843d406acd300000000000000000000000000000000113c8f77a2409e0c7ad34186119833605f924545821895a283ec83bb6cc38c549a356b205c24f65be66fa627a378eae30000000000000000000000000000000013038ad87e3b3eb6545a0b5f7eec060895deafaf509ff6687024ada75f700d466df86ae5f95463c05f19750c0ce6cf56dbc68f77d40330ad5b8cfcda42edf57899454571c6c6465c4107e662a269aeb5", + "Expected": "0000000000000000000000000000000015a7b2803cd9b078d457d3b7c62a2418f19c0cfa006739cf3878844c9e1ea115fa982a02fa6fa0cef74404bcf145952f0000000000000000000000000000000018ea40f019b9226cb0428356483f842ad73140a8da065889d81e35a564e99aacc5d5d833d35fd15713ec76c65f9d3307", + "Name": "matter_g1_multiexp_82", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000163b380ea90b97146aa11c64b34de710e41b2ad54036a1a98659046f0e051e5961f30ea5ad78d8052f4a5d2a8388c28d0000000000000000000000000000000012afed5aa2e8c75e437fd796067e0c610a8a4c2f3368752413e6f179bbd4db25b18d5b3f8502186259a6368dd4321148ebb3c942d3a1a15cee806fdb0fc3635483743a5b0ee9c40a48700bad5da53ae70000000000000000000000000000000001bd4abe425f0418c86716516075a3ad09812650908cf383ec1396cbb6929bbc791f5cf65dbd95b51690b58ae3cab3f20000000000000000000000000000000008264362c7fa8021dec396c8355197ce4ef70e7b8894fe23d881d34b9a1b883cba1eba0e54d928b4eaa27aabde0df9b3c193d751c4f24f4808621979f07f03b2eabba75f08bb49682b9df2da7a85a77300000000000000000000000000000000032112872b64559a03629b7ec8b32344b7d5f044670f6099d8e8b1a1d47223f9a42a072975c821d03b30d0994d782d830000000000000000000000000000000016042f6baa48d7c571e1f6c7cf3c7a0887bc4e2b2de51bae133d266dcad23c579e03d3284c09c83a54eff7f2151ce5b3dee4eef524f133183b4af95e4445f3ee5084b96c32e284ebebc5b87f3d76150b00000000000000000000000000000000028ea1499ad8761d908d863849ab4bbc155edeb03a7ef4bb93e96e25ab11c6dd0c21a6f06537a688189f08a00aa33171000000000000000000000000000000000ca3ee57dbe627ae681b12e0de4ed602bc3c09558444f38b0dee27320708549491a4482f7f101e8a722ef85e3fd742a5da514f21c8eab0edb2405e673297bb595edc21027890ad680f1663fd960ce4780000000000000000000000000000000018f397d7c84b8125844e874ea31d18b8705a75027d5324390e2eb7c9962d9de07add34a436db21a34fa7fc7898ef04aa000000000000000000000000000000001591f2cbc58c0841e5eeb8d9c75d8dfa0f2dc5e479d136905abb772a6170d131c0f2c9e8e55ffa215a4bd732c2fd85556aeac9a669c962817c01069cffbd948d9d8ce764e92859f31fdaf85f5aefab7700000000000000000000000000000000135452f0f8d4559ba041dbd2ac45f15416070b1674c9d8094556a289716814d2a4efe14857aaccb82c5ada5d6f0d15ca000000000000000000000000000000000f1c47592319db60db724c9d0649d0d713320be7dcc28e7318517ef80a3fda71fd1f4b722633ed7ab7df06218ee593e940273bda92c9b1b677edd905d76d75875e5b77841befb2bcaf1fca7674dffd5a00000000000000000000000000000000003c75767678539abf7a62dcad5f90a3b4a54354fa70206e789a1f9b5daeb5fb6d9aa222476c68cf9db8a0789d7ad43d00000000000000000000000000000000139bcede61bcead99ef0d9554ee1c19db1869fe041671c199246824a923f5fd94e1da04fa17ec921bf6e82b14f126702b77e16276f9464fa2063230d6c1a4152553536c610062f18565c030e80b5cb5400000000000000000000000000000000020aadb198678aab5a71cd6dc33bd64c47be6d080d24f2f1bab7239808c10867ddcec65e27977b9eabef64455cac25e800000000000000000000000000000000141e58a9f8c9bd92d2de58bf3bbe77a48fae9290815915d7980f4835d805486d678ceee9676ab4fdca51d0fff411ab1b0be15b654ce22ae4e32987babc4863ffe2bd8a459d0f01f68fe84a75326889900000000000000000000000000000000017abf5f132e8e466d2cae445d75978645c3b24284e1b7df7773c256ffc342d1484976ea1046aeb5307f735a69e2fd20a00000000000000000000000000000000087ce2fc44b9ed797f29c352393a8ea109281514490fbc7dc489acb55753fd5c577c4af0ca6c267c83408cd95b355e26c8f1fe94bce21966427380b6d357a3599e9db03a7694159335ffba26fe29e4650000000000000000000000000000000000b106b2b94858155849ec36741c7fef4d97ac704baa6752e8230e172da7208b7e9f187ef0a6cf054d00f2cac99235b8000000000000000000000000000000000d94c6e2349941a20884b9c2d702237c5b5ca2ed277bfc79e53452f1cd6f9f49360215d20fa06df238a7ad4ea253c93ec6d34471ed00035a484f97f4e8123d40ca23b017b94df65540a5551b905e57b30000000000000000000000000000000019b33665a81d0ceecd43f003eb34e1292945da1361adf118f36aa5acb71bd821a6732758a4aa6988e29d4cb70004df45000000000000000000000000000000000f3a244e578c66a9263f020e2f6ce49dd655c7e40a992c44cee40e1c874588e464f6254ba644e46adf348a26025d6d3ef3abd467168bf5e57f71017b5779bdd400dbf416f34f105fe747ea2f8cf4a2100000000000000000000000000000000015618db18e00670281adb20c975f4774aaf169a653d5f583ff6966113fa773075db78507847586fcae82d6a468302706000000000000000000000000000000000301b18d0fe7d0db7793c62b3da072f4cc2fc3425583537110306e31cf63b228cb8c285029044c7b9439c1227d4c7ace2809801eb18d38a61ef8a80f13086d6b1f85ba751cdb8d17fbb9ad5f8d0f835c00000000000000000000000000000000053001a82260b26e34e05a203c8233095da1da58c5f804da9cd6cffce07170e39044394f379173e1340da055066d320f000000000000000000000000000000000bfa2bc7fa0476eeffae4df98bd814db751eeac1dc67205c7629c9921928b55c70c2abe242728bc078bc2685690a38503521c9cf035b094d754db994fce3161842a9509ec8288699680c0ac7761eac680000000000000000000000000000000019a7f78102671f6d84ece4a5bdc54e59cbeab60a8c6c15a708e0169f42a52e98bbc1f8ff52f34959befc859d308fea250000000000000000000000000000000016b5d76caac944612d1dc687c6dbaf10ba60a12b491b17b6c1c876a5dff933c4bd9c6f923e2ca4cd1dab38fb06dfab6a9c8c2998d141b9cd3a82507b6dd97e8d32e9e759169c575eb484e9a1559427da0000000000000000000000000000000007741d8f72a5ddeea2fe82fbce4b3d0aae61e1ab9243ae6a3200711051ac74f30a4dadb597130fd8389353c230b6b7d3000000000000000000000000000000001809f1cc2fc23be0f05b3d12e6891a6aacea121e6db77400638031065d75c7b3fd9a02ded481eb3893b2449aadcf53d6dc83c1ea9e4f4fc12a7190e6c71c4f35d1a676d39e30fe688a05820dd98966400000000000000000000000000000000013d9fdf041ecc7f2c728fefbd6e9da3169d872406b6fa77a52e342fa8852358b02bb2ae7ac77f83e2b25f0120603d0e7000000000000000000000000000000000101ae8e945d31a98c4dc3ba0e01592285c0c92721372bee6b138d9148883970708ad5e585a1b81d82ab0656a3b03a2c00be1b9098f1873ce155a66899877c7b48ddda363ae1d2353cb3816f1ab15ef0", + "Expected": "00000000000000000000000000000000193115466c33711b07826d2a021792b7c238ae67e3bcba00b24026503d818f912c5635f85e85402e3a6b2a8152027afc00000000000000000000000000000000157fcd63d3a0e48e25ca0196b7ade453fcefea33f09123434f418cd1d65bba65a789e4c7d6ddc92d4fe8aaf6bffb1ef8", + "Name": "matter_g1_multiexp_83", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019f625f232faeac09266c2c4881f92c980db551ea236dc1250189c1e71dbeb151cf74e43b4d5f465c6ad92d75457d10500000000000000000000000000000000175ceb7cef0f8144fd4dd82428bade99833023125d34fb296f198673f4848bbbee343f2f2137b55b5f8c5f74032c1ccaa9cbdaa0ddbf854861eac6621255b2102e5343666c735d0384049d5680d105d4000000000000000000000000000000001353a419548d05e568f36adf72d40ba8b30be9a78732660331a5196b0f81b52330ed70e5c635acfa9ffbf083e46c8ea40000000000000000000000000000000013ca17c0dba35a747bcd314d87d1c6558e9f569955aba3d958cc5736db78d16132c9dc8f93d5eaea749a0452c13139da92073d958260a55b70b580f3ee27c42553b5b858b66f6928fe74b4de91c34bda0000000000000000000000000000000019a1bdc1f5a43fe746df46a7559bfa0bc5292f574fc424b134fb8b2d971e191b3c5d222d39515dd145819d56d5379d12000000000000000000000000000000000a08d0b7c7f5d71222e984bf574cdb7de76a7b3c61ab5a3ec202b295c62366dd958ffd5bb5a5c6c84584342bc76199c62117f11d78dfead915a94f11fa7e904a96204ddf1835d3501639b83cd5f716f50000000000000000000000000000000000f2c85f34994643712207fc431219b925f4e701732fce95bfb387ac26ff95c9b10408d24aae5005e437bbae924816b2000000000000000000000000000000000d4377368df00dcde448d8399ceb7508a8fa1c17e9d9a5e09c4fd7c09c253529c07068e4484c7e7c6d3ed6fd3ca777fd9087caa1e89e48f05bad1d720477199410941a6105f911d589e1f94a851e0715000000000000000000000000000000000d1483ef230a2ce75a59e07f83091291d2524b5d043db8d5583914a6775ce2c80368d9441aa2dd53061a8d9121a025ac0000000000000000000000000000000019100e75a72e07391db9574b3fc4aa1c669436fa802a1a5d71146c5f4b7fe118a5ee71a9df50ff67633f161fd151b947255603b470c056b3dfb3acae0dd45bcb3d014765a5181760336deeabff3f00be0000000000000000000000000000000003a88ed50b36d92aa4411afd0a340497962c7740d629edabd505d6023ecb8f9daf0e5bd8ab9dca26ed2ae3ecdfd98b680000000000000000000000000000000013d9d64ab16ce9401988db4855b26b994da09481a339c2a2597401adb72c80718a4df242776f09ed208a8f34ef7f67e6e0eab0e2486316956291feb44de6389b20f8bafe9cc890d86d27a598bab0f3c40000000000000000000000000000000013b16751ff7f6af64c06f9ae6f59e1eb6c3ac76355e6192e6eb44bd1a9f866705eadf0d2907e2458462ad731523bd340000000000000000000000000000000000ae691a4fbf3d0fc72c0e14d4b31fc19c52ca07a81db0ba93949c56a9b75433257d784f7bf0611259dba8af77403f536fb9436456262e5149d02b33a1078e198bbb681699b3f485625784df444bfff670000000000000000000000000000000008ea61aba918d691a0d04582e1f48d671df39bc7de29a6ecc17b31a32d485fb1dbf499e01a9aae5ea21be5d6ff9808de000000000000000000000000000000000f7e8863a541be553b36b8424ba6ad057986a9f78454aea770449a23de70fea8eee6bf8aa30e96e90df9a373917452f70e2724d3501e3d79b85266fd83a2a6156eeb48e749a61676a1c92ab9bdd6b8990000000000000000000000000000000010d41968ddccbb34b3faee226750e99301ac068d8e6f13e72962b53fa2d019da108af82bdadb3cfeecfb85f53607400b000000000000000000000000000000000a90e50ac4e0c39f579a19d49e6f64de6bdd5d6a3f9a91ab654f5be01b258af8709ce1c5a994501177d1c70b25e474a9a49344fe6ea9274a103f323f3d9381e91ae48233dd579944e12afdeaf854000f000000000000000000000000000000000e85db21593e8d3d86df87ceeea7d7853758d69e15edd53fd7da52f0328805db785aa9aa5db25417d76d796200a37d1d0000000000000000000000000000000015d76c5317e1c8cc5a58a0cf0700ff73d92e7f60f4094030716bb8c657d5c75262825fc0683a88278018b4899a1c1ffeb44aeaf3ba8b03e7ef7201415de7365365b828f2c1a38d09153e51432d35b9a70000000000000000000000000000000014c9d6aa24bb34080b9a99d31e1bb431e911b2ccda3c8dae9c2c2114abca597b3849c5b3dca756d0f9ff97616c0b724600000000000000000000000000000000050224129c08fbb2f2d16596f83e2d09a09526851c4d52e8d5f0afdae7001af0006edce648efe7d94b6712d012817ff753961d33104649cbfccecc7eaf33b7a2a486c77dca363ffc9fbc9ce4e8c1adff000000000000000000000000000000000da4574f20849e04bafbc41bd361e8f4411815b9e7c2fdaa9a3ee70d4f608f89166dbe9e1cf4ff0fc9ae98f27e115c24000000000000000000000000000000001463727b23e6afc17101cca45de7d08b78358605c7b1ca089fc52f6a3c46f590210083103e51a122ed0768be2adeddefa04e97c20b42dc265271740f27f1a833bc5b324bcb843a8f9f8a68231c663d57000000000000000000000000000000001363808474ae9481f54d40fd35ed90c23d4349403d43af0dd603f1db6f5fd5ad8b77d21426977b78f1f5397df17f0bfd000000000000000000000000000000000118560d0cb0eb2fcd3b2d51fb2aa379112b3075e1d4c20757ec241a4877af271700d3412a8fd6f3f5a3dbdf4dc8cdc9b688426bbe9ae054acb6c1fdd4195f8a113727f5617642a5b3c0c65566e2252700000000000000000000000000000000040c13a6f53ca485a578c6f3f49d917b774f7b2d1b15ed3e748a47b0bc0be8a7809f0ccf509f09121fdebcf8af46023b0000000000000000000000000000000014fc7869df366473b2c4adc2c0b12acfffeffaf22b4856bed6ec6d15f0f080596b81f3aceab9360e99f35ee7c43f1e2fcf365a86a8d08db5cd95f239a2f3d22279556975ecc3baae0b774b0323dbb1b600000000000000000000000000000000177b54249c613f044b40a11047778c86f09b20ab387ecb8165c83b36a1af046936623fb00764740a90aa232b7f7ae6bc00000000000000000000000000000000040a52fc58007717d6e1dd8486cfccb1f75827c2feb2b7d59b927c4bd23e5ea80d120875f611bed4b7c12b8a5c929475528715199c9f47fd6337b6b0e807e230b1397885fded024431c70e453f55f365000000000000000000000000000000001918e41c557305934aa72aaa361d15843ca77c747ac16cb4c251a2f0d7c218b60a5588b0e5fb3573e8186a48d725e50f000000000000000000000000000000000cc4fa5302c177f9ef018445ab722e568347f4f970dd893e3227756dde9dc8cce3eb2bbbb4c3cd98af0ed4a45c022cf1c32e8643f38f8177b788b8c2bdc25b668308d914fce35c6f9023a769334a51d1", + "Expected": "0000000000000000000000000000000016da14ee1ec80ebf06c0622a500a8eb5a560dfa3439a8e53a19b51c6c4576c31a5486c4c49a8050cc1dc30287f33b5b40000000000000000000000000000000003b04355b2d78266675927706874bb7fa67d441886972a8190a45398942622f09ece67ea74d49bd97827fee82d4a7a37", + "Name": "matter_g1_multiexp_84", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e0ae8df03e4d6e36e1c156a35425a3b8189b56e8ce90045d16cfebf7fdd973d207db6391dcd007c311af34f495cfe0c00000000000000000000000000000000198e58d5278b2a82606af16a9af3f023b7182b6b5b2d685fb667714e9fb5c7a3fd5c98dbcc84ee31fcbeaa8f832d7c854f8bfa3d47ed33a05fe3da738797f18ca5d5b8658055de5a9f85bafe6078f7fe0000000000000000000000000000000007a130c85d67f97fd0dc2159d35be8984bfbe94c28d9d96bca8bab844dffd9a6eb3052c619646a4e564c0d47864b31cb000000000000000000000000000000000e2b8362ef5fa5be398a3589413ea69e98b15cdccd203119b79d96405c2c9ae9ca8eecc7533512a25421e1748ec3a1b74b0d302be94d437b8055586aa77ec1fe616e30552b4d7d3471ea219c148be069000000000000000000000000000000000acec379756a1fe9fa72f03da4dfa18de1fad19281f262ff39fec77684f0798b6d8aa895db93dab58165b67a875572cf000000000000000000000000000000000a246df19a23260961ea578a68ab4ae8811f9f391f673eab2b6fdd56dae8ff3b059e5b69052c9216529603e7eaf4ff306765d7f1079b142e513e604d577e7caf82cacae59fb98c6f8990522372dc906f00000000000000000000000000000000001bf749b61d7081f1e6141380deb6a5517d64e8c290363306fa23d6ba3b4e72ef53933f15ae77060758287a5a5c2bd4000000000000000000000000000000001661c564a5bc4dd852f35660d1e7c8193d76a48d1f0f3dff25adf312e28ebe9ce8972366ab224a95a7c1f6146b9f22412eeee02d9309af8c74c78e21836f4e6a7a6df5406617e2b4e9d300e37d8a2bfa000000000000000000000000000000000462a37cc68530a1c45001cda667e1ec10283b826b52986adec03db59a266cafc18ff76a666c9de9fc2384c5e336404b0000000000000000000000000000000010736bad21840f49466d9db82f01a922f4d6ab71f8d8ae246765300531b2f806663da2a8c16c644cf871a877b210b9e3f8449caedd55f0a08825cc1a9e985201c8a7a54d1c4dd96f0ac54214743941810000000000000000000000000000000013ee85b0c8f999c9d0682bf3f18a553b64aed8addf87e4baba55c6ad88de9c9955b82155caa83b8b6b7961d88c16c7dd0000000000000000000000000000000011bbe00b5ddab0b579375e2014021e3bfb1e11b7ccfd774b8679896c0ee34d1d19890fe5cf10e33e3332283b3a3dceaa28ec5f9dc48931da70ba0cfa7251953e24c4c95cd019e00ac6fda095c1302a01000000000000000000000000000000000fc3750c957b3eb656ad552c3997755bf28a54fe4aefafde15619133ae04a47f7c65122c86ef36fedac0c8e0d93c3836000000000000000000000000000000000f7f21014b7a9f07c2212af1b85395ef3072b84ee5e59ae675f6fdb9cac858b6213a264a202e29b45a57c69be5259470dc6046b43e6982f11f39412cbdef14f8e330d37fbe6dfa9ddf3656b86f4f60e7000000000000000000000000000000000d1fdcb6768654b6bc1b4d885039f1649066db8037f212b2d699c02606257388000b0543d25aace7cd1426462ec25c6b000000000000000000000000000000001386eb9bb7d8be5cb9e74a37759458091c44eb814dc3afbdf017a891359831ffcaad85d00d8e100886cb5624562ea0390adf4625ec80149b7810767c985c2aa0187987b3649cab8c59a892404ff2aeb2000000000000000000000000000000000f4d6551f5587cdb4d92e13e3749f977f5bd35b5b71667edd79b5006d4b0943331a0b417f669c6125edc42099bea22be00000000000000000000000000000000041b8ec8547b710bf2c15ff41ea779f996db7996911a5b4ae9f23073e02b2c252592229af738f684e9cdf48aaba0512a345fd17367ecb06b29d764b22dc1e262ba1a339b6f0e0c77384245e3d41cda970000000000000000000000000000000000c4a3756f2affd338f688ee90501f4bf4be43a4549ad8ea6aea69e5a4be015c97ef088da1a39d1103f866f1675f401900000000000000000000000000000000023e5d0bc92794536d59425c4bdf18dc5a208841953e5d45ae91f25d3c61bf66e704a8ca62a574ffefaea854fd23b8d65ce5e62dd15958e6298cdf4a4e899e53644a48494d04fa6d1f73f2dbd645817c0000000000000000000000000000000010129a00ea1c30e98c40a6c86090327d0a9b6c25b488cb0e369bc5a0e0658ec9ac9305e5d1469dd43395f72ef8a0e7e80000000000000000000000000000000006d2f5d4f3f8169f722427dbdee62f45f9791e55988910fefe188d6535fa15e2aab8de5130e81183e6ca25a8009be66f853396021d32530351deec5c266a65519471dce2087485781f33a1423755ef3800000000000000000000000000000000005364313c0d2220ed57bf22cee05b77a53c24c97addae502c7b3275a19522b8ae8167194929770191b96b957b19e5550000000000000000000000000000000016ca50cc1aef3890dd338c8a89b906812ce26e0ef9035d1a026f686b0eecab718f6b0ba401556423ddc99d96dd812d566dfc62eb59bb84b3b6599bf3ce7af229096a8fd5925d4743a5ea386a26c9a6d00000000000000000000000000000000007dc52982caf2f5efa3e1a21e22cb8fc53cd0355f2777272806710a96a22f8e896d001bec053acac6241c7637df158a30000000000000000000000000000000017e9f4fb0adb96150095ad5f0d464549d1489d04c4556576865ed3045e0c477beea3115a6ce63910f797fef29f75bad521d35ee6d29ee4816b91d1664b5957767b4b8066775b37c3b3d08729c949d6e5000000000000000000000000000000000695feaefc8fa22f81bd48a41e6c85acf38fa542e96a7562b8d65834c2f64cf5770ab6731ca85b0c5a80a73622acb83a0000000000000000000000000000000003df65226205511218c263af6fe33a09fa3db22e636da54dd967741657e9da6367fefc5e33a370947f2003dc139765083d283067bac390f556891a531dfacfc4795358229bc9a651c0aa71d601bdd56d000000000000000000000000000000001588a4aaee74856a9d41305023b7eee367648085516c8135fca8c0a6c9cbdecdb2d7b44317286f3a06f92b9eee2470170000000000000000000000000000000005aa06c47bdbcaea82e910b8a2c43c13c23bdfe1897efb2a57d622f5251f0db6293ad21d988c3ee30e33f3a40865fadf873724ba35e4e8b731db36f5067aeafd33f2e966977bd0962fd57cd5ccbfe87b00000000000000000000000000000000140d9a251d355cc6a8ff9fdf2223df59747eed11ad140297b6189a8d49a711ec748447ddcc45733a3c36a48da8cd46880000000000000000000000000000000008ce7046871c0b7f781c667958ff22da6ef5447bd319b2df36c9fae9f5597c020c12c7fbc733cb75ca8f9d9dfd942954cc5934c02b63797010cc8474e90fa5dc88d73dbe5f9be605bf335057fba47ea3", + "Expected": "000000000000000000000000000000000f1abe4dabd68ac4443ff50c0ecc5425ad60973dfbd2b29462254ad618b303dda061d80b28117803159ba503214b9ccd000000000000000000000000000000000d3da8a424576cdfc147e18fab66de0d1f93c05c0dcb08d9d5b2a9f5dcda76600b771991bf2d67061ea5b96d20a45c14", + "Name": "matter_g1_multiexp_85", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004d4ad5e9acfcabc0b93eb9ea59a778a37d7beca03e285382d10d97803ad63e11aa2e3cd1eabf72383d93528e309c28b000000000000000000000000000000000855cbcccda0476699ad3de8d58b4502f9e61bce8d7db37e9fd26ac4649a4cb831cbb74ecf044ae6014c21148382cca3864a1ee754f6b0a86923e5501d54e6f47d7ab9e1483294ce98be13b7db52937100000000000000000000000000000000156e86fc66a8b684327a4de77c31abaebbaf2ee5f0c4d5f9238c7d4683f08dc78d59fcdc25928d180a6f292bee23a523000000000000000000000000000000000f64634ec7de1fc93959639991df42e7dc621380f4433fd7efeff72ce75f6ac7738396a912f78ecfe70bfc4d0ac4239093064d187f7d21b8b0a7092943de13b96c2e1ac9b578637a6e64331e2d40f539000000000000000000000000000000000ae2c40a49f6539bb257fd759c2fcc9f7b09d00059c7a7fd41422ce39aa0792413894bc716d66dc79092223b63de6ad80000000000000000000000000000000017a82c6a853fe29f98129998708f0d4d2b09fb22b07474395050d87cfe4d3bbf94967e05861c20680dabf3f4367135a75e676b40c09f80be5d9398a9ec20cb811cf6819a130445203d792a4d34fc3e950000000000000000000000000000000013b950aa9b7675322d7b39e81b13b14f2480155f74bdc5793425a02f7de41dc1ebefe4f07accd3719feecfe366e93c440000000000000000000000000000000003378e83277e4b02c3b517d3a8cfbf2d2a6585d028c723b2a263e6ba17faf14bb9aea301cbfdfb73f84709e2af99867693f63a87972dd11f5239c35ce269e4b9239e3ae906ab117f1f045d3acfd16ca00000000000000000000000000000000004d87c87f8f05a0999c712756bcaa0572b70264166b16eea7fc4785a59cfca18d5b819f0e65e193dd7ec38d0756b84f20000000000000000000000000000000012f64e2dfa3f00ad8f7f68e08b24aae83a049390fbdbaf570a7973d8516dc90e9c5c9211130d5c6c09f5b29183e24201145e3456d5ca6aa5910430e5a19567c327b757377aef98c4f46fe9a1f52cdc5e000000000000000000000000000000000851a636dfc668d1c5d5467774deaa78283a6f56cc514420fb2b6c58ec831add57b5203e31377a57adcfd9097a1cde2e0000000000000000000000000000000008828c34d4e712bdd5133e220167f3424491b9f47dfd95406bc833b3b030037c0ac0d2c84b06b4a2891c8181359af350ce27de5d3a5ef941d058a458f3ad2a386f1d66945789e51fa330fd65da4cd5080000000000000000000000000000000011021119ccb1cedf88be6f72d3999df899efc4dc28f828831be911582b61894aa37302f84ae9269b97b03a2e30d66c93000000000000000000000000000000000c373df4c0cc1d8a75cf2b9a99b5889811d3ed42850f55480d891b2f44769a371fa4894cb5bf78b7e995b4912cf47dad87bf5c4624e86aaead712987f313e5db8f2fe6787fc33481ed6e5c4d3e96d5be0000000000000000000000000000000005bbd2831bb4eb8ace45ed719056b95dcf5bda8831bc1495f763ff5e82be9708a004a00ecd102d4fd084579d892e5da40000000000000000000000000000000004de171bf5fab4c89783ad1d0cc9fe697b827f023ea1660b0fa2cab108fbcdc80837d46f292b6062761dd865bd1f905f68cfa3fd0692c9ce56538bf70e77e2a47534d9472ac702c53f2dbe68217d53df0000000000000000000000000000000018b36452aa579eab36db9b0417c999fa334292bc7174bb88e4bb14025a20c86437d5cace5369b90640c81edbf2d60f2b0000000000000000000000000000000014278d1cc3fd07e947419a6a0d7f7bd5f9e13fbd63779ffadc150e3d5efdd1a3f6f6e5ba8516066b75e1925282d0e644a36b13ef742bfe88882a4e635b5fdbd9b079e1adf3423dd4962835c68c9617c5000000000000000000000000000000001365922301de7c81b839e970775854881955f35ef7f718643a97e54746b9d9867ced3fb7525caf5b5bd0d382de02fedd00000000000000000000000000000000000d37c4e106e51c4cb65fef8460846eab04fae7e5ae1d1dbaa1e0bfb2eab7f2e27a9cd5c3cc942e38b021ef71827a0224c54daa7de8446e5a26cdbd6741cc90bfd26c544fdf221d47d509c978723c3b0000000000000000000000000000000003b9de0464ac24606ae840185d2ca6cc78773b674688a028161341b88907213e275d7dbcb8d8bca15b483922a09297170000000000000000000000000000000012ee2a578c09b7563508d0d94ce6ed75d277ebd89a7f1d6095f8992c0794b4de12e33ee24547c271e17b7a045eb3bf5b17ff7a416011549f144a3a65238d62395f4f76afc09496902c064b27739c6d0a0000000000000000000000000000000005b7aa071b76f93c765f946b96a972c1d11a2c44244355e90cd77ff069b930b2e8171f7cb1ba29f7ca6e62d88cb83c1b0000000000000000000000000000000012cabb25e52f00f89f2758790f9a81d0e336ccd7bdff06a79552a346d1966f54a5157130e5aa8db175aa64a431e19e494615de9bd7aebf1acedd9d40fddda34e4a85bc253c5e92c20d984f6c4cec533c000000000000000000000000000000000dadebc30ac3e033f433d8d012ffc70adc146f4d9574e5431360fb4a8ff0891c8a9f38a8754984a385d704086c320ca90000000000000000000000000000000000238439bc4e8c7dabe260c7b40d317014463c4728d79f521e7e321346747e9aa65bc6b32ee5920969c34421bb99bee9d38f1a0417a5a366dd2d8f5ce229afb6f34c1b663ad6eb1d9ff12f38412f00f700000000000000000000000000000000029df69b4ad5cae9fd974da7f58e4c55e83c61eaf011b5f22e1308b56e2c31530c170b304d39eb3e8a3009b67b308c6700000000000000000000000000000000140451659b4d6eaf05db63be5a7b0341612747eea7536b958b0620bdfd7b9918e8bb76c05eb2a528bf4727e38605f99a364da9c6b07aada98107447afbb189626180c5eef31f7f2cf26d5d76ab0c745900000000000000000000000000000000062493361a1a862e63eb8f20b0610a78d30ac8595e4c6c3487cf3add7cc38613870c2ecd0cb5a869110a99b76fb9055b000000000000000000000000000000000d8918e018ac5490c91cf2574e6a6962b69c17883caf2caa473de172b14961780fb237236b56a236ce8c674dc9001547031aa8d860e3b598ad0c4e9f93f26d153f8a8d8d0dd614ba868ed055c517532f00000000000000000000000000000000016470ccd107b2afb9ca03a0efb958bbc165304871e683fd606d2e78f65e34885668c6ccb655d4fa98f5776280e63cb3000000000000000000000000000000000982eaaa34f9301fe0ba1915cc5632329715c506528860701f5e52d1d77b8fabc89706af2c4ab3b729251b9472cde96f290c467c4827c9252b82ff523633ba116c52d15df9cd4e3121ff0e9f754ced5f", + "Expected": "00000000000000000000000000000000112fdd661f948495ae2b9200d959ddc873c53c96ee4ec175f6748e62d76d61d6b15970d3a3a52ae9bda30a822ada25b8000000000000000000000000000000000f5b38208d69b5b842bc22ec9d91eb6b653acea5cb16569c61bfe0921f2d8ad613239e87d48c6a9b29ed6a5f43578987", + "Name": "matter_g1_multiexp_86", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a9494f10e6187fa12d88e350ab84ab5bbf999554924e781d6470e700c3da78e411b8627459b3359d7363b088bbeb0da0000000000000000000000000000000017edbf1108591996f28ae17beadfd6b52340236c2741bf8474dd7471c19c1f62a0f28e8d8692cf3e700ddd86a931dcab4aaa57782608de34c6334ce5039c67767f6da7b315dcfc772f03aaf3dd1e67b900000000000000000000000000000000052f9c6ecc29239c614936bf9ecdfec677afe80de019230180d0fe529a2e82b9e15d6e081b02475e2bf812cea3ba6c640000000000000000000000000000000003dd0afc91516b50d9027c0b132453fab92b165c08428fd5c2cb994646b6b1cd5b82b7c3f7924e4a5cf8b45575e8dfdc22c1cde67b0e8ec7217c6ec72f36d8a1e73794297819de9ef6f1e52acbd3ec4a000000000000000000000000000000000da6e13230b2236b2bdf671bd5f3f8bb47bfc637d6e3f1796b555a95e51b86d04fd310f3d3198dee604baf48f69ce0950000000000000000000000000000000018d209b03f61056147d6734003daa776011b70a57e1ab17d3b92e2565b31a846d8fb7c3fc6fa1fff04552800b73affab895341f4363b688c4e9660fb0cd17f6c111a5c92e732205fab0d0da0175f683200000000000000000000000000000000116c72b5bd9d30182463c592adb8f73c16d22bb4a22832b8d47b683da5f4b8179d4c80d361ce69f92a393027ab29c18900000000000000000000000000000000026dab8d729338903d46a219004fada41eb666a9a90d8ba115f53da9e89a7bc5d824d7f4071c8859df52b3ede7b7dfaf4c5718fed7503c5e2a97fd6ab0294d6c42b1d35067e9d5ec1077176a4bd3126f0000000000000000000000000000000004e0627475a0d4da458475dbbebd6c36f4ce771bc2b2a8c6adfe9d372ffed05afbea207476af26974476c0cf51a9267900000000000000000000000000000000199ebe83e44a269752d92629810d0c5402f53a1bee03ccafe0b3299a9968ec45abdb5a74a6d90cb026cd9b28cfd2b89f6d055ad484f5054e8bd0d073cd556deba05418ef1235d08ecbf8717b550933fa000000000000000000000000000000000b4918f4bfad81349edcb45439e148af7af6664094412c9a51b887271cc3c46e34147c8a306a19f08922bda9c7146c61000000000000000000000000000000000afc3d1a7c4b6d899149801cb74a7e64a126631b3e758a73feda92a2867c53fd3efd9adf025ca6f6c762029c57706b0b4cccbb062c27a67ae2783ab65a47ce166330cfced1f11b85f87483e0250b1384000000000000000000000000000000000a093eeb354ddfc5ea3090b20312788923c5db9d78905dd31d5bf15cd83521f2f186fd284de0858270eea05d21801aae0000000000000000000000000000000011d047410dbf6df20f81971327b38996484e0862a9f71879ff63462e189471c1ba391496753456f0b5379a3b36380e1296111cb1181f048f51349aa2953bba2af50f7b7b5d2328d435bd63a7df5cfe5c0000000000000000000000000000000003d8e8e3a442f911e23b353e9efe396b746360254c14216c752fad17d96d440988d5a25f044afd37f12d74c89c8cb2d700000000000000000000000000000000179ba95a3d3b5ddd3d181e2312385f4ad7232d9af0c28f375e2036157e4603c1a01aa6c9c91496bb28508e5885bc2e599d7f0c0c7e927bed3fb930fe2d0109f58678969ac8e14fabdf4ccdd0823f706d000000000000000000000000000000000f56dfaafea0ce3152458b7252fac14ea64483e1d4a00a44f95bf3932eda2f2c51f0239e6a7a503cfdbbdd88aef2f4880000000000000000000000000000000010e02e9be7c1b795ebaa84f83bd27eba4f12dd49b146db0d788e37835338d352445e82060dd595f616b4f6d2d03cf4c911ce517fad2609f2ab8d44ae6263623a7903b2cbec683570949a96fad78fc6d300000000000000000000000000000000010ccd262b0cda9ad39177d31be0725b83e935c690fa8e07bc7f24e26f8b03122173f4ba43fe8ac933a7fed79f4496c8000000000000000000000000000000000318da543dfb04005a3cf6d93d6bc4058b4b93c4cd84ef978e6a30dd85d60e5e359b4f518842e73d182567ec4fb236b8b17d28cbcb9efde6d9cdc4c9cda385ce598ac8468d4fc94cc8e98ca3bfadf4400000000000000000000000000000000003dbf6c0676cec0202e328bf408a8fcc38758db1adba3e8184cb3904ed204b7e18db2183f5a1833737ad8eb089afcafc0000000000000000000000000000000014d9add10a0c739dec7fd09c57b3e959f3b7551eab8423ec5bcab4b14e63b7a27f128758d63f8e43a22eeec7bcaddd41a9516e93416bc7b0f3c5ef5da6112abb73fc285a14093ed19d8eddf2411691190000000000000000000000000000000014d0230f7d5c51e6fff6490c61972e2564bc31fea4a6d1f293424934f75629cb96f189c80ab32a79b2e988582d0283960000000000000000000000000000000011813cbbc0cae4cf6a8d5d58859f1c3b75ac53819129f92abe0ba9123a1a277b55231e1a24745d0d2ba6242ee758113c87fed462636eb57506f870ed1c8f66e211758327f4c19bf909a6419312c5894500000000000000000000000000000000006adb1e972755f04cc57170d19414e6930d0e6d42c09f587e490593a5c01ce6e827a6dd1e21570ba11c7e4277d532e0000000000000000000000000000000000ef599058025f40c9f77ef858aaf314faaf8d72277cd319a84a9d7038d81b76aa260df0516dd38633b22f9d3996e4761c373d64034c78482d6673c6906553151887c8aa28ab2930659671b8cb98a595700000000000000000000000000000000008190fa5e3d23c0186ba502a5892b76cf8faf2c15c91ee39d51b269b6bf4bd3e7ea395787d989c1a14ad88f3702cd6d00000000000000000000000000000000118d2d1b28f9180155277b80f1a7937dc7fe6be3b00cbf6a7ddfd08cf653ed11a4ddaa44576e70b27cacb7646a100d03f29c901f9769a42610958a8cd53eaacd9e5c4656106fab536052518b49899117000000000000000000000000000000000d28e7ef8433f8d5399ce3cb847f2633392bf44ae9fb2d402ed8e7e6a22de35c39e4f09ea0fe673ae3cb652f75ec80bb000000000000000000000000000000000ebf2ed9df06e2d5688d0ea812b7f9de78fe292584476b20bd62066977f5e221dbbd8f552547f06a3e821a53aeab83c1125c12599e84b7e648aab52cd68fcca7f1a5f56c854f3c36e0445ab7e2df2b740000000000000000000000000000000000e162f9ba960f452c269bd2f9f06e8bf1ffe737788d6364b1f75ea2788fda7e265dcaa907e45bc6ef7a31c4791b470e0000000000000000000000000000000008a778bcedb58f562c7b69ef3073c81866a395d6408829816be3172e1e825ca6b88f156ed2b2ac5a8784fac62b893896bb9a1d051e33a617c25e17b7ca8ae6b02f16c759cae0df7fbd403372eb2407f6", + "Expected": "0000000000000000000000000000000003f6acb4e1f7856413fe9317bc7cffa45f2053ae62e3b5e2b82ad57b48cbeb4110f53dfcace08bbb1955c21b50fc636f00000000000000000000000000000000172cf1d257572562f9fc390f96f2c39dc5809765b0b94240a554f8bbcc44e3658f22e81d1e6c43742ef24882934cbbed", + "Name": "matter_g1_multiexp_87", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000013d3d80910d9f43a707ba389b03bda49b65081f65096bdef3942f0bde2122ea575abf810f400d47ced92c45dc73837000000000000000000000000000000000755b4f5a055c718f268cf3a74533fe8e8ebf37aff3045b58927ee6ee7a862c8c1cd61f00dfdaf6cccabf981fff16c7908c35887835bf4497d673936f40ed44145c5d5009fae16eb0f3ee9168831abf7000000000000000000000000000000001530565bb621f7cd530c0eeb4cc41c2587ef8123c552aed339f80711c157e1595baa140434385d0977e9aed2629ea76b000000000000000000000000000000001806c5a90120fe65450e84ee0a56e0176e944a3fffdd2c83bf15d7dca875790d2f842eb31f640456a1221e44035ad33ca0154f7f8d52319c9e5cd59052e91b84640efe83ac814d95370e46aff4334cf400000000000000000000000000000000143723a10965da7b47bed0d0b5bdb6bfef5b748f6e185ff2efb73c5756d41d77b8c217a6d92245ae36e0add4d743e7e9000000000000000000000000000000001274e8842cc812435a576b2ac19edb84f72d08cffa129d7f4e44be5cc88b3449ecaa719b4d76aaecf08ddd30f7b184ddc252ac28ea29b5459cd2ae5bce4bf08a102280c093b9962cafb481016a212709000000000000000000000000000000000379e08cc1f47014f7eede433abbe881818c0c3a9cb02bad8cc86242aeb9f9542aedb67313f494fd19971a0a15d4ee1a0000000000000000000000000000000004e83a0e52981faf6a787d0600ccc457ddf3bb81c76117265c1bd011e5b4f3237383e97dad3b019623521b3c94d67df36d3bb5ee3410dfad575b0fbe71ac5df2048f74b52e777fe0955d6e244d434f3b0000000000000000000000000000000009ec14585b72733f621a58f35ab30580f131c93db491d4d704c8da2a7a0a1146e144575083bd963238434e2af48d3d57000000000000000000000000000000000ebd1a1c160ba7c8e3c20745bbde05f08d7f3189ecaa831d05c6a34562d6d3ccaa92472c67bdebeac8494658abf2c0405c30684c596976bf46384e6afb2bad6f821c4a62338d7a6eb204ed75070b197300000000000000000000000000000000084b7f967b141c94df69804a723169f69e05629c97a7a8c60b140787f3361ac87458372c91e04c08da2d01fa96056ef8000000000000000000000000000000000d731a1a900551ca569b8066af85176b934b94332679aa59924eb7d9a5fd776a55b4d7e5ef2413c53c244c848694b06411009058bb8e23b0a4294b5cae63aff10265e729d3601d85dd7f1e8063ce260a0000000000000000000000000000000001847861de1064a4226435ca43c1cfbc5d4660fcac177654cf5d497ba9aa5a6322f1156adafba852633e111576698bd00000000000000000000000000000000005ba738972bf139d91f0a426c96fcbb3b77a01af0f2316f2427a20882b5f355772fd6d6016ed77c31c13f88b26c628763e5489447bb9a5b661bcff2d9a4153a5aad975abdec380301b6d4ce019bf2cdf000000000000000000000000000000000148907d2335e046c50fe213b717fedac86eb3920099526a62b4466749d435f5ce11a45032b60bd5d7b26799adc63f830000000000000000000000000000000004bdc2bab60cf6df6dfd25c16f04edd96d5021b97ef38cad02cc1fc7f12494098eb793d99d15b327185718f81ec0ea620444d520ee01d87407747a4ac37abb7bd4e4c4f1735ca7458cc2e4dcb1d6297c00000000000000000000000000000000145ea0ffc3b24a623d74c27b84a390be062542795eb93a2f71f9358b44b76b93dfc0a2ae507f07a8a07edeed2410e5c10000000000000000000000000000000000d407c6c245316b5cc6b62efcd082829354d7e9e69ad739ae0ee55e6096ea08a48c59ded4595032093c32634576aa132035cab8f8120ea8e91389707a290db4ee69875d7429c6857e74e8bd40dc736000000000000000000000000000000000123f333f3554eac47c8daa1d4b362e42de1834ba9f55e4fee138eaf1a057036aa6ff9f50cddc78dabd3d5557b05b8bd1000000000000000000000000000000000116d786097bcac320327d7d56aa734d76d48a677e9c02ecc0bce550d75082c319f568d94b41e1c57c6075ee994e33304bec711286827f0941ffbb451a8eba871239341a60e3aaef23487175c9d2e826000000000000000000000000000000001012b1790e287a6328cbbcf80eaceb2c518a70e80cfe17143a41c4045e8c6c5317aafcb34f4f56494b401a8a9f21b5fa000000000000000000000000000000000613a88e513248538c1b767ba4d3667bca7aeee7974f691b7e4f012ea9b2b32603eddab0943229f53324c51838d18fe3369d91a4d575d4c142b98a53115a792ec50a290608ad316465487762e83f3a86000000000000000000000000000000000c31aa6f315a1102ea973d13e858d079221087edf178d98fb05701ed0a159309fed05942626b29ade066f8cef465535000000000000000000000000000000000177a3468b7de9612a93b9f2bb3f07acf505f56c63f798b4dfc38a25d0fc133c862e90ec8b40dc94004cfdcc9da197ee7ee472561535a7710db521976cef0c92a4ed89861ecb397cbcfafa477756e8e12000000000000000000000000000000000092095e7a431ff3a8e51e26c24dd4a5fed6d4a4a169b5ef79e8822611da8aca5d7c27139a911d5473442db9ee1529bd000000000000000000000000000000000c59f5a649682e864a792ad50fad57b7cd14cbb19d1feadc3536515f01053fab26950f56bb78d5a51f4368e73c19062f2cfdcb8240f183abec526344e8ceca6a007c35b757928803f854225d3a6ca3610000000000000000000000000000000003930511780f28217a125f524ddef656581a4ba2d461730f0837d1846d63258a02e659b25b882a3c3d077c880a64e3cd0000000000000000000000000000000019c682245c941c76605502785b1f79d37f65cf9ec61a4558092973bb2514de4e5852fc757c2fc7eac1b01d414248acdd60659743dc1977a698371cc302b7579b6d7d13632a31b47df369365fb02aff7900000000000000000000000000000000000edf518026cbf2dcca1d46340c24fa947261bcef36e3c8d026a09068a10a5afdb0964b54b70bb3b27e27c4d2e0bf9b0000000000000000000000000000000005cf718694ca47202be8c0afd56c88742e2b467d01e7b2330de778c434a57610fe7b8bd6071836a58f5d6b2876cff05a652a5d4fdf6d6703c857fc7b10a741b95fbce91fe823d827cc7203be3b3bce0a0000000000000000000000000000000013db13bf10b6d8b1ce5dccec98745dab635b8bc81d03601785185cccddfe2dfb3f3f9f6ed16d2c1a7a6bd63264b094d60000000000000000000000000000000001080522766b6cb5c90e6e0ae11ab4ded3db3ea3c7e69d00f29155283f7b25f762eb35bfeedf00caa83dcf04f22ee72976a30abda185e7d280804952fc0c074ad907fea2aa54da4c3190895270169b20", + "Expected": "000000000000000000000000000000001975e01d64d38cb8f852b4177104388aba62c167da2a8530bc59f510a990ed57be0c6ddfc92622234a121ca407853dbb000000000000000000000000000000000de737b9097065462dda93321d5881430f50631f6f3deabca4c41cd491f1e441139bf8ceb598393ab2a3424b0acf290e", + "Name": "matter_g1_multiexp_88", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001624f6ef9638cdc5f0b16b47ac8c5465cb479333a4ee4caaf6d2b656464d8f84387f01bc1811924312e6cc1e29a590c300000000000000000000000000000000012b3bcce18f60c4b2159df93a2d536bdcadd675439371acce011ac5b542fe1bcf89161fc3b3644679a395aed31dab569f4db766964c7855daea58d1205fe8da572aef06e0ca64912cec7c87bcb2f51f0000000000000000000000000000000005d49b4ea69c41ffa7727b98db08ab3fd3ca0c0261ef04b426ef29e724bd6158b3f3242cb915cf0992f2a631fd9b4421000000000000000000000000000000000f635c26698cf5dffbe25ff496f80c5de6b181f94a907204b79b548c1fee8c7dd426b49e9eb9eb0b17e34a26628c38e71deebc727d98bdec47b5a1fc48916dca1e42345ff5474a5fd6cab0ae99e9f1080000000000000000000000000000000003a80767130cd3c3fff0610f215337bc1b4a88886778fc0dcb6bd3cf7bee48f4c23c974c8883e2cf32fb01a84f9e148f00000000000000000000000000000000173f518f3349c1f704fd200747158940ecc395b04b4c476f406cc27836df182c3f1b707aa05767ff1bc75de42dba2a824b964d74259c216c1eccd7f2b52ffa5fcf151d47bd69bd2768e6466b32eb4fe50000000000000000000000000000000011874da4371ee8bddb34bc92fee6bf51226878e4550aa33313a434b75243c1f2296c1d62d9f31f6ffe2735f4f26a8082000000000000000000000000000000000f82551ba2b803e35c7118f4294626c151c7137eb4b97aa5265ce383f7ebc5ff5fe381776eee724aebb963d2bcb3d9f6124ceb1dbc8004a4b1f8b422d394b0480bca7c0f38aafd8f06ba090a98a1d3c60000000000000000000000000000000010501308d1a05e69700111431a0ca99aa41a991555b9a53df9c38413c67fa1b1836853bda93bbd8679e7724b3141a8d0000000000000000000000000000000000b033cfca384e480f73a4f8f79ceea706d7390e5b702305b79e30890e158ede03814d1a0dffcc3608fcb9926c5c65eb65a2bf15b2ed08b33056a0733c920741f86730dcda9c06aa0e3c135a844cef916000000000000000000000000000000000c7bf31a1f30f8e0de1a4a77b8b6c115d1a5d825b51875cba3db857a9cd2c589696ce2abe5a87acf8d6604c1f1f89ab70000000000000000000000000000000019ad7a6190a69fe1df07d55f8c792fc72cf2be11bbdd83c06325682bdfb5c31efef11fcb819d39f25bb1978570a250218c3c919f31d72ab414f91938089430bbbeaa53ad7a73224fd3f204b80fa1ab870000000000000000000000000000000012befada1cdf63d34ee2334ba2e42d7e69ffed71a39714e7ed89a86fd5cc1c65a01340c986abc37e7e3ac5a22a2bcc860000000000000000000000000000000006e5b16316867dc33a9770aa2283691f379581ff2b0b7986003174d4862d8b73bcc3f325c9a90097328f881b15f877c7f749063165c6db0eb038cb9f1a573de25bf377e1fee94f31df5987f7b2450aff0000000000000000000000000000000008e763f110c9415b63baf27236f1c0975e7bebc04bdaf47ea0d3a2709a455ea48ffefb7551a73c9d599bc5c9fbbca78f000000000000000000000000000000001492e70f2831c87222f7d7a9d00842870b77aa68e87b8cdc9d8ba61f86adce6ea514bf5b8f9d66937b1b640c43b02fac22d292cbcb836843acdd5a3fb404024174cd5c1cef632d1b9b6a73f2c5f705a3000000000000000000000000000000001685898af1ad3bfd350980872e6438048f6cb37398ceab33d7bae1d621b5b2859e6a07b4e4db891af37e29881cf573ad000000000000000000000000000000001084663fadcf81b9818c999c26a84c6f9a3a1f71a0a2982b5c6d01c56c2974656c08e4ba7833d1ef8bcf9af53d2f0732e816dd1bfe025685f2eff0856f9c162d73a58fdeae0dfbeb5ce076e9f9ec1a700000000000000000000000000000000013b077eb9130821bcecfe9b366c7a14f4487121095d325e74de44ea206078a6b1ac7d29a4e80f75c7714b6053cf2995a000000000000000000000000000000000b825b95b52382195416477f0bce73f06167db02bbcb91944e9e7534f804973bb363adca8b5ad80e77b70f4f1b9654d004f117d41a011d36f55d0cb53d4f98de3b1a6cb55dc8a76b29d393bc21826ea00000000000000000000000000000000014c48b3b2fb994920957b046643bfff19533dbe533df980dc60d9c852a3d07b8cf67454820a89ec9c7ea73a209f911ef0000000000000000000000000000000019b19e64d977d40b95050e4af365541b6c815534dc4abba7ea0af4b0a7e6bff0495fbb347250f5b5a48020ac20ea61cb6b6f5ee0549b28a1bb317cb020ae0e031dbc381075772ff582718fa49db486d20000000000000000000000000000000017fe39b732e6b815bde4078cba9f926e117349e3e49fcfb6308a0a09296fa27da4580d8fd18b0ecfd0ca68312cc0e5c10000000000000000000000000000000018a4eda1862c5c296de2eea0e720ba13f8a60defc65870f0112ab394e8160d6e1a0beff5db8c450d8770792b7efcccba05edf9812adf95c9844b2da06f75d96e742c0620d1cb0d47dfd9b68d0bb76128000000000000000000000000000000000e65750f3b9690f25b5bf80de0d76da21752a0daa8ce01b2bd8d172577f6c7d46c119ed20e73617ea163575705343c4c0000000000000000000000000000000019d0f934decb53a477b37d894d6e651a8a4f25b9375bac6b6d3483ee8d85f56b8374bacf74bb8550bd26b3d326962666f64a71e4e7652860038df67c99d97b1e5a063370e65217531253419bf2e6365b000000000000000000000000000000000907fe95f32e22ed75f94d96c191bcb19f88355bb84f91a8a535441da04dc211376435ccc60ad2089835b51e79f24b5900000000000000000000000000000000071e35d64ffa38024f4ccf7c4a713e22d8fb4b8450ba7b05ec5e759c2f8ea30e7d9e71ec2c90b8c667370131de785116059bebd962501b8381b67c22055ba01667d916932713d7ca427cd80d8f76b419000000000000000000000000000000000ccc90617f386ee2a76da43a745972066955c8e346d3de214834ea79423e7d95a008a6c119d640491d515b801034452f0000000000000000000000000000000002588711ccd23b65cf2f63b2d602b1d7dbf97cdbdb159e02e3bdf84fa65685e14d4832cde3662950a7fcfd11e68ad40a47b3448b9b404e184f7ff20466aef3dbd4e08375673ca31fdb303c88243fface0000000000000000000000000000000003b5acf5f4e39fcb32a267034c5e905eb3df32f2f6f7150d94cd17bf16e3a9fff9dfdf75a966040a6af5a623787a40170000000000000000000000000000000018e4b8d163e5176bc9a45da14fabbac696ae6870717bf5f6c00b5c73dadefbe329d86a761935b18e81d65ab6c48e241567d9d30b38b252a0661c12dc69127ac380f3f756144801633e99bc2ffa2f463c", + "Expected": "000000000000000000000000000000000905fd0b04e8db7657431b5f69f1d896e79ecee300cd67ea8fbedcf51b0389506da0669c28ac8158d5357a61fbc3976a0000000000000000000000000000000003235ff6d1acbceb35cd29c5fe524a452064a6e51d1480ce1e57c538b2ab6ec4f98c3bac676817e25e2d92e701ba881b", + "Name": "matter_g1_multiexp_89", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000688d6eaa2964e33cebae16623e228256937ce9a7721c4fbc85233ffb3edad5d6349d9c8a00c16faa0efd9c54827f46a0000000000000000000000000000000019fa249ce7be07208cdac9f9927163bb1b79b40b320623fc1a08a299d5500cacdc55386ce451173f683a9ce3f006c1e4aaea75e63204e177d404898aa51555767f813c3f3ed283405ed1ee829b04c85c00000000000000000000000000000000078eef7d7951f257b17c579fec05f3efe332534b2f56a953a701a8b92664b9a0b37959f7c3dbd77ac18a5e72d174b9f20000000000000000000000000000000017cb59169aee6caa1dbc3c47c29f977a44a81d33f1cd298d5df3e9469c8543d919b985e1b588a96a9268cef03876effbdb48a90ddcd791e6a9debfabcb1c71c88e7ad98f9e739ee752b381b28d7656f200000000000000000000000000000000025bae0252e5d83a3b76f2a861ebb1312bd344e3eaaed5e7169de248137a929ab94156be11e9b16ff312180d856d93900000000000000000000000000000000013c207c57a4876f6bd6e8e87eed0021d5e6b2aa3b2a323572fc2ad521e807c366fe31ec285c8412f89328cdf09dcbc99ad1795823d3834496b0a1c2c07431f9d76071db77834005fa1228393ad4ce3f4000000000000000000000000000000000ea93e5fe055ed1ce77de5d298fafdc4201418489b64d10c447de3973c1b98c184c0cae1d95831742f3d50613c5cd8c40000000000000000000000000000000004f2f3d0a5caac826632ee95dd1aafe181976552abdcc7db737f5693f3d08d3c4a85365e05e369365a37ef1b3df5cbca36d56e38fe63e573b02203be04ef9e1a044e1754eb2db50c6f9804abc4a40f460000000000000000000000000000000004c8b69c09f67ad17e8fb9fea4b7532c7c5bf3edb7669e26eea4f9c8f0bc10b0b1895acdee731da5999318d83095ef5900000000000000000000000000000000054f950a1ae65dfcd40eca15e5fbae984e7672a23ec030eea0cbc0424cc8073186b8442e0d71d6a4a77cee37c1108f941a6b36f4674ab19202037d59fd8e14369e5d3d71acc3c76985b813d81ca6e24a000000000000000000000000000000000b69b6b7b6cb1569ccbcea029dc71560d54b8bb88bd33af1c12a09d867fbeada2e58585385f1fe508a0dcdf8d2143f71000000000000000000000000000000000277561e6ac810ddf4c46288a065e5441ae0fe2d7ee79ebd6cea8712281a36f812c0bf49c21beb63a1f5cb670dd37d03ad85286877fa7e5a9a61dba9df5ce35083beca7c2f5ecad13d226fa32b9720e9000000000000000000000000000000000c0f4206d4cd564be1efcbdf57f99ce43b97d3e170017fe352ed3ec60862f87730d4d9d9d56ea0aac4f586d2f1786df900000000000000000000000000000000073202e8c73d14469d15a392589db79f3897b72bdb2b788da9012c7aaa167a157f85f3431161d35f45bdfe0f2255b6378fa5387c5712832b52c9c72e10c6f69e9c1c5b278aa379140e75e404c4f50a2c00000000000000000000000000000000191cae6012ca07ddf511ed586ef19e9f0d913d081cd752f033c9f74c334c6f5d075b4f6ec85467caea7836f51d0159af0000000000000000000000000000000016e65314e34e1c7ad577a36eff992abe6f26fc5349d12db12394bac648cbc1452cc366aff69e8cc4e2e5bc85db237a863023298162ebe7f4ae6aee45a8a6ba602c3942a8bd6b35636fc6b85596a582e0000000000000000000000000000000000bf583ae5e3a7827610d91c0d2433c8d358fbc12c016c59be8454c039197971f90191737993bfd08aa96d7838b7ce6dc00000000000000000000000000000000046fc386c5b456bafe03fc84b4f98939f9c736ac74cac507ea036d2443066090118138547766f637537425f64be9691b8ff2430d2f82c6d5e7424836ecea15af0ba2d0bd6498e65c65b6cd281a7b8f28000000000000000000000000000000000f08b3868ea056ff8e82fb7e22a6522985e92df1df9db77f787bcb3ed701bf8c90badcfd94e9d3e3b3b68ec497b9fcc700000000000000000000000000000000002e6f5e9eb44fcc7aa96a43856a707f5a82cb4c14c99b21df09e666d4802d15fb50d535184b63ae246d4ad77b6c4851415eea22058493dbf6ac248fd2ad8b4734ebe33761f2177089a3feda396001c000000000000000000000000000000000167e13cc54e9e9866bddff0c37e942ef8393a588ed3c2e90da12d0a8360edd6c3980bde808ff16588a57100d1a8898fd0000000000000000000000000000000014b21a7a106640b55cfeb19d3c23aabcf1c0be78fa554613e68404978b78e5d34b6b6378c2e87d0b8bf1cf3444d0db31ff79e3ef5d32a751b713180be37d44ae55c59c5a8121c132c5098ff972d8a9740000000000000000000000000000000002e8053215ae6894e8df09394353fe98b38fe4b17b9f20c7b48c4baad91519587f63b863e4de79be71672e1fb00d337a000000000000000000000000000000000c2ef9251a148f1ba8cd75a60ee18ba6328e1c3a6780c790cba3bc91a2145f44cb8bda5257c03890d5c5674e4d09296d039bc7274a3ab172285d853d368da0950203a48ef61b3c7564644762279c1ff3000000000000000000000000000000000aa7fdd550eabb1b734db00400304be9663c008d322d67fc771a85991bca6413ec07ab3adc3cb40d390fd41021434b97000000000000000000000000000000001994d9be11443f0a95a2ba4f7240a9dbaaffbc70256aebc0f10c322fc5b120feb2cd8492d02c60578f8becd7a8e589c92c47d0b1fd24c1c66a3cb0deb7d51ea19f0fc492f637ed5d4d03e102cbdd05550000000000000000000000000000000012b3574c35288c63930be8024afcc91194b30d2b486edae832dcb34778886af5816f7478df166f0a7e4752d8c12423e30000000000000000000000000000000012cd382d17ea10ad3fbfb40fdf4f3814a19384e302542a0f5731920443e4498a1f8f4d89086764beff079583a672b93bab4aca860ae4bc20d33808533c9a70108b153bc4b2256003ad4bbc11dc92898500000000000000000000000000000000117294ca9961249be6570ea760bb1e562cbd587f78be482263e4228171d9ee3d970b234455912299933689096f4afbd000000000000000000000000000000000029f88a99c750a388eca5dc6939082280ddefbf7d23997cca3653aaaa03a3ee4677fa8291641ad1f46fee0f8f1268140297500a2747f9a68b2d8d9ca5b0390369d919897c53d422cb76c5a283c38669e000000000000000000000000000000001006f64c279f074bf036897ded9deaf9b4ca380a9a7542490be675355c3979b2925be09ac4613fd6b7a4a8bb9e357f70000000000000000000000000000000001537e170e8dd88a92a6bfedcef69bb370f7bc1f32c36d203f5b6859be9b60fcb4d1e3948687ac7791d867e7c200967eea87ca4cf226c212c80f3db5e4e781ad7391fb73b1124d01cf893169d1c50ca99", + "Expected": "000000000000000000000000000000000603f6b2d8b806c5e399c686878eba299131204084e2c31c38640d757e8a6e5b318da785d54ec8335398610e9e3956280000000000000000000000000000000002abafc5839180e8aff2bbac4db043e8839ea25d8fcb7f6faba2a1c0a567863f256f820e846e49b3296a754650ca9b4e", + "Name": "matter_g1_multiexp_90", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a2eba2e26da82458a494738fcc816405760f4991616d729415ee502d13951c319be796cf35d88a8e00e17fa3c58126900000000000000000000000000000000117f6b75a6e25a786e860df05505f8e107b23c6f4338b2f87ac8740554304046f7cbb43f2193da35350e5fb39077ff3f9abfe7e05e8a210604355a77f64386a01323407d9f25397769cc6dd141bc6643000000000000000000000000000000000f6e3064df312fc97c4f30d3cab398f7921453b933d428a4162a37af5ea27c79d5b21d1d305a9609c994e61e56db226a0000000000000000000000000000000011edcb47b9d5339d08f24be87e52eabbdf701ab15f7799a5ae26cfca9d49e0e9107d9d1f09c711039d096a5745b89c9164be08e7c2fd15ac0116ca941b85615c6deb38fe85e2c0fd22997e394b8a6769000000000000000000000000000000000d6bf9e905e907ed86f5d3a4cdf61c527ef43ea0befcf6bb7eb1bb790b3dbdb83e0b958836669827251da94db1d07c420000000000000000000000000000000007f85bbbc54af3eb9e1c7e4c4700b4c784b8d2e6b2ff6a981a534317766790942898b4eabbb8d6c893180a436faf88870c391dff1c0c303c77b2a1fff24f50250dc793338f7d7f8f1d54bf7d87ab37da000000000000000000000000000000000b17bd374136dc1717cff915f7c898e049e892ced4ba57a16752a6dd875cf1cf9a2005dec3e3bc6f87b7a257d5ce7ca6000000000000000000000000000000000874999db06d15bd4b2f60e9b61d195747d12f38b75b74f3089d5b47735e9dcf79ebce22505399e16492c4a6e0f83abba2d728e013e5fc3e1ca24c105a0c268cbb4f152a97e318f3aae33186ea6bc93a00000000000000000000000000000000179108aa8a7d8443f69b7c906f9a4869ff4c724aaac4fccb5f52cddec86e32180b3ab2f66ba76d57f69416b70334a0f80000000000000000000000000000000007f83a847f4c7e7b35fd091249120bc59719ede5b6db083b33f5ea6249f9e13457511db006f416e0fb9614b8d22d51e1e8da0c8da19dc441f53c54551579fec5d820ce2e3599824b24b7c5bf1847c589000000000000000000000000000000000154b40b3bcd0ef04a5e1a550215c238adf07f92757c227e4d32e42893ee8e7e4fa9d7169005220d89b11253cffbdbd10000000000000000000000000000000018daff3cf04f648e59d00df4b86d8ea5dc74adbbc6fe4f080ea7a84dc6443d8923517a11f264f700e209af9bc52f759c76e90965adfc2fe52e4341895e6b6154fd7a097e052b59e4935c8267a6f0e63800000000000000000000000000000000163cb54e83a9935be82161939360356f7f0cd0219f446fd243d05f6333c68a1aca8f5d2dfa2b54dbc07f81f756ed6bd7000000000000000000000000000000001667e7a040817e83896d62adfc4a9f3d329e87f7d598217c7d2195c5b0c3eb58047d4b9bb640e3959f7ad1242e10783f7f3f352c7b7a9e2eb6c87edfc99e2df3148966760168f6abb13ee482f223a01d000000000000000000000000000000000222ed79e925d64fb58bf0cf105a2087c538c9538070bd742f7acf5e00ab371766d286fbccb3e708bda2d227523a40cc00000000000000000000000000000000126a9569e9ba97e5c41cf11af3a601560d037f1594f2e352ac86c744542618e9d2b6def0c7d3bb6a3707b80cdcb60f15d35c4286f19a9fe8117e37132ce4ce76e28afee25ecca2f66de3cd5e1c83235f0000000000000000000000000000000003786245c244c9508ba94e994dd510a7485f4aed711c75a2f509cf01b784eb12ce2f3907156aa15675e36b4b2587e9770000000000000000000000000000000018de0e75256cfcfa2df959f1491d87dd5414a1b51b6ff02ed5034394ea636fd0bc5d3b3a3b84fa7156ca7f97aa65feea3c2b40b7968a39fe8e4f24acc25b6c727887c3c44cc89cf62eb14a78ae47e86800000000000000000000000000000000026828a6409635184cb929a5b3fbb881ef013e8342cc9b5123ac82e7ce24fe7aa6a507ec3c017bba10126ad9bab5e63800000000000000000000000000000000132cf4a23eac460fb1a3db9aa43b542ae55d19f6bb2f408c399a570c1e479c4dd0462f9573c95c953bee07a51c543c4e10325465403dbd4898beb740884cc325923ec3e1d7483540377d8bbd02c1138200000000000000000000000000000000035220c800af6a330df6b6b6cbde47abef2e5fafedbb7a0feb84a317ca3cdb79eed934847694e85e2873ef97b31b6ba10000000000000000000000000000000011edd4c17352914beccd8c062aa7b95b913f35892c7cc5dd8f736a31a33d33a98d8f9b4be97ffe608531eb7c9643f32109545b90dbe35b0d5764bc72d45717e0c3aca6aa77c73178fa8a3ee9fec9cdb30000000000000000000000000000000012148b58f805c38bb862dd9847f12aad21d1ed760a022d2f619a0a077a0bd79fbbd6c066f0f6c58517ee9e912c60a37d0000000000000000000000000000000018dd847881616f7410f29d4e68854ded4e97b31d5112fd46437739ed62e6d78fab89b078581d052266b7c2ce403d3a79eef0f8014102664a300ea9a30fdc7afeae3cc338fd45cd421a1bfea98e304c81000000000000000000000000000000000e36ce625adc496ac94b53552effd651a73ed0c69abedda36e88d408ca7bee73777fd87b4f55e2e8b567c2fddbcff3d50000000000000000000000000000000008a209510caa720f20cecdfc9b0bd71d3fd4015627d0227a027aeb9992ec8030056a5046feadaf149d2392fc98fd60bfc8f1e08cdd72ed200253211e3b9947cb2a5fa24079b6920b4a4d3f1fd78146e8000000000000000000000000000000001373edf053517ee79eccbf02cce4b4b67d6efc53917b7cd548379c3f78b447ae5dc331285a28bc2aa5863befe2d26f4b000000000000000000000000000000000fce7f982bb8e937802fef7b3fac517054e6c9b288b03ad6497734d78d4b9074e22b1acef45938a08440948dd8b88683a7e25b1a60b6c6080ccf1bfdc37aabbc2bf92079d9356844f7f12867b3e2b2800000000000000000000000000000000001ac8ab3b3918836a5ba14e3d7c44eb8a0d909dbfaa2772cb9d7f8f517963662b5d4209e9a5d44ca0ed897412792792800000000000000000000000000000000169f8127198935f06d26ad8e4ca3ae5b95ad967aac69f7958fe9fb9c5b1f0e98e596fb73a0d8bf90174ca21a02a3e2c2dcb456eaad2b7c71ca32277206c1a1dbfa7e0e84950cbf14aadd455fb58e398a000000000000000000000000000000000c1cfb4660400ad5d7ba2f394cefa878c6a8fc214823dab539c0aa6d08f36ff1bd706be273f25ec5f1abfb06bb57e8160000000000000000000000000000000012ff9bad1a1d71fc49e96950c74d388229d4e4c68f7fcfafa42329ae06d4dd3091b5b1c95f6498743393b6e3ee794e4ea6e7b19245341fdfc5927cdae57f59de5f3fc8c37f8653e5aaca87db682034ce", + "Expected": "000000000000000000000000000000000630b9d9da596e60b15251aa74de850ee74c7804414e3e4d7113cb3d5ad6b985e436aa67bed66c36f135050d66f91f75000000000000000000000000000000000ab084fa126c573ed007f983e01737453b3dcc99ead0a74cc0e8d7cdad89ce81489384b311b7ec4c34736e9520b37e1e", + "Name": "matter_g1_multiexp_91", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015fec44912af2bcd34f1ad42ed24b6ce430f6d07b311d65ffd8b6d726ca23f5bc4b7437d158a36bd1790e806fd5ab448000000000000000000000000000000000c4a4de9940c7c26999773a396a8f9a6ff4b86f0525189426529d9cca037d504385dcbf1c89eefb5ae2cbbb394be42fc92898d9cbad829a5346c0925c15b585de18869adfe796e46cbd56828540571b7000000000000000000000000000000000fa1258cb0d8a37009e8c56228bbd11aa854a4695bfe96ce205efc1c9f32bff8afb64df0fb7863512ff8db6b091f146200000000000000000000000000000000188f128e662e8d28be612c8a17cfbf28b965340487df40bd3f0312187d027cd23b50e713e21f8595bc790ab8011919cfc193fe87634fb0bdaa1700466881b557c470a62464e8521be311a95dff65eca6000000000000000000000000000000000c7b39bc2477597e37910b1888ba0afe5ed03e809618bca0e543add93519909b6cdd6281e2afa65a9b45627dc1c6334a000000000000000000000000000000001335cbe866b3139dbe22266c4ed5f9fdbc15a1b338a290a590c03811b6448244027c12d118e6f829dcd352a419bdd8283dd9c99a5aea019436e3c91030d03ebefbf6ea6ac69222f1870fadae32f55ae600000000000000000000000000000000178ea2552d03f645fc3060a61b35af6e3e12095ec65b2e9972a5e346ac1019593298925a887e59a94af2adfac7a8361d0000000000000000000000000000000013996dc427ba51c4ec1f67b30c95659f35c8e71a225bf357f636fbfb428140f9b9e5602eda78bb38e87e3ab77495e505e74ab390c3f73c62eb1435226e9b4f9b921ea1918a61a614b9bdbe9eebd1cd790000000000000000000000000000000013555f26c2e10b79f8f2a4c397dfda0d8839a35a7cc15673ee5da34578f3fc4d38bd0331a5c42665bf40fb2cf693f31e000000000000000000000000000000000bb16b5b1dacac465a751a68b99def392a69a293377a22194fa4d4d6662b912d3ad804cbe51a4ec4792229de57923ea14dee3e2bfae3820f611c30df232c1d9c6bf58d40b3530858c79f840720d78d7200000000000000000000000000000000120183e73d23355da316783eb47ca687ecd34d85e800aa65d2c95aa5f8eb730a33d3273307cc05d81fdafcee5138a080000000000000000000000000000000000171f5e63fd3c71200720cba782ab863ace945cf405a2f961baf39ffab2d3283c26347ba297d16c3f2567814c6f9914e795fc8e20dd30622876a94afce1c1a76e3b689d6848903c21103cfce6a8a956800000000000000000000000000000000095ae1795306c8a8c48730987a842a05fcb263d1f9ea49d3f3c0ae70c7ff636fa4e7fa33a35637059c0b11b1b1adc6e000000000000000000000000000000000185e08447394763607d6efd8660118429469a1f6e7edd03a7a3e12ef99c2a15670d1f7ca664a8a14f52814db9810ea2b25b49f325e76733eb3c1a2cee5467157b2ee80987abae43d2c4b93e5157f08380000000000000000000000000000000012b0afa7f55ff9131a9399cdf0fbf2da69dae7cd504a0160665f0cd74a02163b8ad7ab05cebf3195495a1637134cee450000000000000000000000000000000002a130747763c25b9b6c0436390da91f02c9d5b24178318717024390a841baadae6a9f933e7f87f7965fc96bb498ade5df49b30dd6aff459f64906eb1a9c9b2067d4f1b75057874b2fee17923bcb906e0000000000000000000000000000000018911ed6adc5f48db7221656c622c6cb981b1ac1bffd64e30662035c0daf4bc5accbd53cdb1fe8eb60628262584de15a000000000000000000000000000000000b753d21d823d1050f109683c7c153514dd06663ed0ce118e388d18d36686e94588159e5afbeaa492d021a700caf2dfa959e0a33b1fa12e0ba960761b09921b81746b8df23e808a8de09e7f5cbe2bf41000000000000000000000000000000001107292ce4d57209e9c1e2c396688ccbe005699de4e77b1a221f9004585ae6cf8f901da6811ad85a88cd85cb819d040a0000000000000000000000000000000012cbe9c273a8a9c1404abe51af4a647f6c89e7e177efc04233586d70df6dad3aacc9ce2a9fbdcf2ee5c73396fe4e498d26ca68383528f6a871c237ae5214b49c18c4f3e2f3ef5dfba39e69eb181143d7000000000000000000000000000000000297e52ddc42a7da1025d43f46df11009ee035a9ac45e09a0902ba86fcfc5a4bb4c35ae8b0e0c9b86a8ed7e5ab751947000000000000000000000000000000000319c082c39ce4e59b952941dd7d14f3fec39a9eaccdf7bb41a2b935f876ebbb6778c90e1919c1e5804df91abd3bd9d5f1f95a9d1d4e8e7d0f17a954177253709d988c3a77c77d35b8bf70294bb358c2000000000000000000000000000000000ea5a9d96509cc5675e165e3a7c9f99a8c6b7be9c33fe5fba895a2d96a68e922271c90badf3c41b3ff52f359f5c6dae300000000000000000000000000000000106614bf5ae42409881f4889a82c6a3bc8000bcdec23b093ebf29b24cad128aaa7aa17566c4293f67af010e9b5950028b481f986998d863c98e55a7661136a8f19d7d4c57f6036cd642ae16c82cdcfb300000000000000000000000000000000145447f37207ac8d58c706af0b900dfc1f2638f840a0b44fa65245b5e671ffc6c008951ee17217e010ea6cd5e8477d4900000000000000000000000000000000187c607539f8d2b6afd15efa353e2fd1580cee48c469992785f02b3ea3396db5359e0d6743ff8d41648fd8680a4a8c2bad872848d72367467094675a819f9aa6107183aa0c8685d5d84c27b3aaab33c10000000000000000000000000000000012a022fc2dd9c201e9d86a0983fed4a71abd086068b8ab8c9586cf51230acafb084d559239d86a3713aef4b87a04c09b0000000000000000000000000000000017e02d69776c705bdeb9fe06d412a67601c6763a19c840f15f96de0fecf782e3a44118def54286cd52227361f0db3bf93c2c60541fe17fa8e71d58184a055fa8b1dd0bfd16ac2baa912b4472c6056122000000000000000000000000000000000e09d94291ce5e8310871aad89e0744e6b319b4fb1089048b0181cb9e885aec881fb7577fe0e80222793068deed473560000000000000000000000000000000017c8676e4b8216a98d9e9a05891ccb74e64d72a5ae76dba1b5ab2d1c4eb8291cdefe7753abc5fa59efc4a4834f815488ff07c19ad4f10ab47e73b6698f9febf3f28087614759e082e6e717588c1caff70000000000000000000000000000000008902b3f9b3ed6f0dba21e5d6bfc13fac8f003b3e11de4b883024c3eca0d2c4614604d598d31d9e328c7ee4a9d9be6100000000000000000000000000000000017a918bcd38986300bbc7a401e09b9ae20ccd382280b4e79294b6c8ae7bb1dbe2f72a582e0125381ef2b4fe24998e72f240c881fdbfc414d3e85ead1cdf166ed6929d0b2ccbc35f0811473757b6b41af", + "Expected": "0000000000000000000000000000000015e9fb1d1a586288f07f399b87c37a085df405bcf88505a7d2b0ae6609d4baef7ec358f70edf838d3bb7291c6e5a413c000000000000000000000000000000000cc7d7e2d372183766a842f5c14c1f2a528d502f1bc5dbf5dfc9d812c56503a0b7cf1e6f052e998aaf45cfe24a261551", + "Name": "matter_g1_multiexp_92", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002cdb1466c13290ff0c55c38ca6afe33efdcd09ddbdf7461d6bdb3e36fb5d8be851458620a0bf54932c4ddc1778c97bd0000000000000000000000000000000012755c81c142c5051ec64de7c89719cb59d9003fd8785ed5b36993123418e49cd3afab18b599deb72c969936633a956114d5455ff1717bdd545f4daa37e145121e7bd9636d7a2b65633e5ca5a63f2d9800000000000000000000000000000000067b3a33aaf3fc4b885035e60ba7f3afc7ccfff469cde1a67f48fd8cdf4b15b7beb9e2fbb13daa9283598aaeaff5014d000000000000000000000000000000000bf43cb79d63db544b2db14ec18c11bb9114db93662e8e6e7858d3e4a99cc332890ce90775b6c190d5ed418571fb907d82cd8da62bd901355a60b37ca14ce65d427bcf9551203cae7c346a49b4fa86260000000000000000000000000000000019329a66132ba7ceaf5c030fb4ae9a599895aab7df2a27fd92b55e3a52b99ac51107e798175f2af83991eb63147901d30000000000000000000000000000000005c71bf6552c314dda4bf9f2b4fd8aa368c9e88c0cbf4b1c2bef9137d608738636f40579a360bcaee1a3f12274687063ea2c7fc2050e9c1ebd05d15f197b4b1be61c6820c8d27ade57d85109d7f9824900000000000000000000000000000000048a258134ed95f91070684d04b83634c2d4c16601ad259d41e7d27292897a4d4ac76eb73425583ab1718b91f151019e0000000000000000000000000000000013a0b600765fb760919bf273a7b88bba568350ef82fc382babafd40a7e006e6808a03160f3747878368d8f6b31c619b1e3bf7e661d54796c71437354d7d3182770f10ab450827512a423d3dc82d5b43d00000000000000000000000000000000069d94fe286a9d39b64756e79669add0f66db69ead7db5b5c2fa1a9e5338aaa9051457a3a744c3b08d3afec8b87d2e9b00000000000000000000000000000000105028835bbeff46cb7d9be4b21f07670dc5589603d0d695355591ef5f7ba28c04c8e6dc40f0bdda031bb54a5710b4c0d3a364e7b217dfd649d1e08f76393372d8768bb0fc85c79ef4652417ef1637fc0000000000000000000000000000000015e6aab154e33627f92560e3def26d936a8876c52490732c807749cc28e34cb98fe8f86addb30e129f8149c504d1dcaa0000000000000000000000000000000005f6040a129df2340f3c3fd0935c02cfe162fe1afb58dba7699e7e08851b3a3c3fba36745bbc769aaf01a4f9a401d038eef7b05d5c725ed31269ae9c56dc7ae35048af39ab114319680d4af69be7e7c3000000000000000000000000000000000db5640083674fc75c0b0d1b2d6eb2b03cafa2e63d7a65c894d9a76b196d92916ce85c708c6c451aad65e0b439033d9b000000000000000000000000000000000ac8d6b508ff6797668ded6ceba4680443516d601a155cff48a51297e321417bbffa6eee042255e9ec054d837bffe628acecaee3dd4dc11e341b3dd0073842d90f641d4dd467a6596f337a6147bd30a90000000000000000000000000000000011daaf23ab5fc0ad7abbe7d5f1dc26c8ce388491cc049f01f287eb9b133e52f33d40f8693921d330ae57853539ee30c20000000000000000000000000000000017594ae7ac7f6e4f02df862b6d4ff946ac1a47085b554ebaa720ad3291f576ba720dd455829600f930e3964a44e5c7f30cba585b847bec40515a257cb839c7e5d677d17b7313c258e83d630e65cfb5d200000000000000000000000000000000174b5b9d4ef01fc9d0f05a03612210690d7d57ccb772aa53175f11b9623388de8019ff2ae1d564e7b30ee06bafc37a84000000000000000000000000000000000e4c03b8dc45b0567e9ddaa0a085d169799d2a595c03f2ac679fd858cd59341393e6a0f62dfac0e53598af4758843673b8cd305c650d2e1cfa91ef0aca9dd0d785d7570d6fb67e61fb9b6817116a054400000000000000000000000000000000197f0ad6576bdddb48c58adb1c9b2115cd9b38368dacbea9220d6a86bb621dba93325b676071e38aed2338273c98c4100000000000000000000000000000000011514f08bb28c37f078a47b6a0d53b311d5975c8a3c8e2c24a25f34bfdcbea53bcfa14b7f23adeb20bf440c87a251a66825e5f9d81273f306a065fd064ae24bc2c5ce8dbff6b22128753663a218da8a3000000000000000000000000000000000aa5f3a29c47fed2e4a87bb4c2a46a5a17102535aba9426235d42f00007e35d1c902b43c1068af279cc9a1b689a0dadb00000000000000000000000000000000056d9729f8faa8e12027b993e8dc41a340d61c64e4388c3166482ddecbef8d04085d6ae3764f0d9cfe76288929749235307ff9660ad0c24cbb139486638a2556687f88fb93a290a1d174bf87d780b3fd00000000000000000000000000000000070e376dd57cc8e2146d49ff08c6c6ada6302c36c4eefc3003f0cc3d75040d73599c7e0c2fb9f7e24484c37262f0eb330000000000000000000000000000000016a272b79edcb7e7fa92400bd55fc937d6389f1f0d3d2168656815845d92ab1e7b555fd4ea311802a62cb6c94bdc5d58bfa8ee3b44c70ba2512c00a1aaecede2180b08ac3ac8c550d70407f0c12e027d000000000000000000000000000000000bba6375b28ead3d49197ec9d3662e34c70735ed0f987f05f439da164afcbe98f25d2ce7a5e1e32515eaa4cb7f5a1f98000000000000000000000000000000000b1ec74ff999ac5a7a3ff2c91e93e5f0edf5f296b063d80bca22fa64198a798fa6b6385d25cde65b789454bc2674231058aa85b50e5f4ffe375599cbb912f41d35acbb85a324880148f9b9003c4265bd0000000000000000000000000000000012fadbd9c50f2e8518dc15d95a59ccec0c9886488ed4601b3fddb2bddd77a4bc861f2862c9c4666622e42a5dda7138ad000000000000000000000000000000000b2aa31218a13b4ab0b00d1b76a9ac7bb3d7e6473a29f2f0d137ca63bf7f152954e52182d32d3de31df0e6ef0d102c9e6810c6cd59b14ef4f6a4c2702cc53c65b3dc84988372c1195980417c583fd7ff000000000000000000000000000000000076846443079520c5b1600d5faa5a6d500998ae355c84b9393c79f83f1a2485b1809058bc53cf5f8a1a46bde6cf2e300000000000000000000000000000000012027dd1a4fbf6078b70c507fc2cdc0fefc9a0166694c796eb26e9838195e68fc76297e66e2a0e9e069274d110efb095c5ebc09190ba3df49d8ea55cfd18370b9d443f9d9084cf84f2236ef4723d2d4700000000000000000000000000000000183c019c306c08401b4f2c1d852b29dc47b56bce8cddfdb66d4e3d5385e4bc75bb9806da1eab476ee02e25ca2b4d41c900000000000000000000000000000000066d56711b80dc8725e112e4e2af6c939977aa66c931c6febb21735d78f5afca4bbaddd77387e52dd5bc9c29cf26923613a56b176fc835b7e825c817d432b9ec6d51b0a66483dfbf12166ee979b664cc", + "Expected": "000000000000000000000000000000000f75ea9863e14f6151c452f7a4268b099f97d076b249d02d72caf5d52635bca3c686070d4a4bf997b753c283c82cec600000000000000000000000000000000014402b3e738bee3bda4e62c077e9d355ad8a71b0830ec0e67a4fe6dc59b1f3f7809ca7d07184f53c5afed32db327598d", + "Name": "matter_g1_multiexp_93", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000107072809eaa84dfeba5a95f94aecc2c985c9e5dbc49a741811fe4b2393ba7f6597ac99d8e80c0fbf715a164099e9d5100000000000000000000000000000000124d1694bad88200cde42f1e7721f3390df8dbe4745715a2f0b6f11cfc78996c6f342693acefe88b3d83736cac6e3e05dedf65658ec3cca48fd48e844337159af090c5d1f5e9d713ac6d0fe1e1f193d200000000000000000000000000000000188a853e19d512149800bb0aabcec450561e5ad08b5159e0879422cca1f957ee15bad2b881979d7c8551eb19693bddf3000000000000000000000000000000000dc097932535d21656842615f08e7016f55752556da3be69027d0dea621ef46cc65e335873e041a3dee6c7e5b7589dd5db65ad6bcd6f485eefebda0badfc64e9e7dfe7e911f3ccf4f4fb9528dfebdae6000000000000000000000000000000000d3a53b9865082b23226042f69ca71b99978fd6dc3c8553e33ddb12542d05b026345a23c2b24dbd934be2ba3cd585162000000000000000000000000000000000b0832950405431722c23cc78bf0b9f33c6e2dfecf10e6d503c8c96ca9732c7e7a29251fa5b5b161d14b7155a50846886e0fa09884a7ff4c801ea0722cf6bfa58a46fc3d36058e8c395ea8fe56d9fca40000000000000000000000000000000014e19a8a203bd2e9e9601cf6feeac5699a3b2d2129b6e756b9b5a7af0cd9228083de8c9a2a0ebacd636ab1b662c8c0c7000000000000000000000000000000000faf049bd6532cdad26403b269d7dbdcab6c147ce0ddd6285ad9ae0e8ddab4b6706bbf038fddd7f63e6dc9a766928ec327a3377d7b9ff3aee2ce1194a22d7115b09a9fd53fcfa5e7f76bd9fdd35559610000000000000000000000000000000007e2e69d6c96b1841340c48e8ab070c67054b574bd5778a8e38a9873241baf8b85deb73695873fdd9e3387fb1fec3b6b000000000000000000000000000000000fd151202c399636a360cc014c90caabaf3b01d5a6114e078eb2473bc2fff94f1c24597e39a3d2298a2e9210726bb48e446a62ef5760c995cb3cd0984d607c232c1eb0df5516a501ce448a189a3134d8000000000000000000000000000000000ad0e842dd19673bfb8534ee20591a9076268eb203940212f702131fc6a3e7b226a84324954eb4bcfa8a007669d2317a000000000000000000000000000000000693801615c5282a327ae034c3a1480de0e1c471a412f194178a59582509ac6fe8ea22c8ec8e98034348ac465527f4b35f0c1a7c2dd281f7d2f006497f99f65d6a1e22f1d9aacb08724b3576aa19e19f000000000000000000000000000000000ac9f4f22670b52e0e85a37bcdd729b40c45fcbd6e8aa78626752d736771ede9c570991e347134f95385bd77e404e4700000000000000000000000000000000005964a351f406083b14726ced542fc6d95dcb8bccbd41aa3ca9cf0395d8d29143b897c66c78e2fe56eedf17d4d6f6c1f94c1476ae0a62c502aa096a371e30ca885dc13fc417e3dc9bc00bcdf516764100000000000000000000000000000000018e270b6208be13c23cabf52e31a156209abcd7bab03694fcb7035b453bce8464fa1e090d59a1139fe451d8c699669c800000000000000000000000000000000158dcfe7736f4fc63071a70923d81db9f7d2a03512724dc41ca47a873132da66eb0eda58134312fdaa63ecba7ab529acb677bc9f1f7572f808e969aa50efc519192ab8653c71090e5cf8cdeb1a3544dd0000000000000000000000000000000000a614d7a53b7a06e71aea4014f9b951bc19747cd8822da50f7993c0821e05100dc5fc8d043b2cbe7cc4dcae9837679d0000000000000000000000000000000004e0495281282aeeea480fa47f53f8b521a7df4c5619d4e58f730fe346a6deb3d501ec8b55b581489f28b4d991ebd90cf5ca580a25a5c87015f57f7c23cc51a0beb5926c84d44659e45512da51aa0cf4000000000000000000000000000000000edd664ad8b77d86bda4ba772f677d34c9341ce2b4d2af4b2680383bce0fd4468e936841dd57753d06c50a3357a47eea00000000000000000000000000000000063eacafb540655984104f60569720625e4499f048ec7849577caf240634ffc42612ca7ca92c17e3e50aa627059cddf2fa1cc45c35e266a82899d8ea0c9c1f96f96140eace41a8758a87975b088f0231000000000000000000000000000000000a9d9bea7d8a058cf254d2b7e10f6d2e8244cf131c6f87c4e25b5febcac352d02b1b45ba347e0b891c8b08e7b5dec82d0000000000000000000000000000000001d256cedcde615d01e15cf526c4a8bc8b565055567aa1de1847b524fa49b4b9f654f5b66cda0a78f414848aab42b05c93d2908aa9266844eb265c2b1c17f8357a5ff039836ba83c837909f6a9d0bc03000000000000000000000000000000001519b05b59250c72c9db7f425954694b29b36af21d9293a36d7bcd1ffb53d0ec55a3ceb7980580ce6f9fb6a0faa7bf3f0000000000000000000000000000000009e7d045b69e2dccad22dac427f5938974a6394c9fef84633fb5f90a0d09d437219f1b7ef7e7bb03eed106948eeb560d3b94325aad8a2c80971a781bf6f6bebad63ee37405ab7e903fb7094beef14d060000000000000000000000000000000017cac7707469b98c6b4d24fecf6d818dce6c8b9eb44bb08d6e475e385c30fafc81551e74ee98cc854d38d77d15459e750000000000000000000000000000000019d5bea3e48fa7bd273233bd6325bbe38267e4950dca4fd9ad051f487e7933a366469107258d69f0603b2f9a8dea2e4f5143a8e734824840346078aec03d6760564870c5ee2b2dc13f8a39ac452be9f5000000000000000000000000000000000b993d9303ecc19122654d5cb10d488af5411c451b39b1e19e7a104477da50324472076c55c4557576a9e5d7755a381900000000000000000000000000000000172b34e576f0539e32c5025b3a8f25b5bf407f3f3dda863b194a9fd97d3a6facc00902c95fe076b91713bec162f61cbf0dbee37fea759c2a58cf360c654f85298e8ff44b3f900e8229c3f838345d053b00000000000000000000000000000000170d799ffc4c0abf6c582b41732308665d790900ef07a74183826e48c9f0fc500b09109b2b13b2b33cc17e6e639d2969000000000000000000000000000000001943fe62329fcb67a45b5155da7f950ee12fcfe0e8e9ee15868409ae44adaa5f03c330206d7d97fa733c9e93957755a0b92f9db82d0976f4c379622c4028002ede2ab17f647bca3bbfb159045cdb342b00000000000000000000000000000000078681739039a022499219b298799027a341be64204a34a97a8115e5e10486420c18664825b764fd7bb931343c2558a60000000000000000000000000000000003313d3482f952c6f9cd4ec2f2b61f28ecf7d8cc7e60f17e9aac8e63ab25dd6bf2da2d67805debce0dad8fe37a36625298df4ba50cd5cb5a02d5f50b3ba23e5f5b0172a46cc315a0a94fed05551a68af", + "Expected": "0000000000000000000000000000000010aaf24dce0b05179769031ab81db339cda85cf68963640b888d3aca310a6de690150166c0943d658e51524981a1f391000000000000000000000000000000000d1af37c2bdca5886d73567cb00d5a9859755267800d7239cf39c291ba83b1c67e6a3532a2d8e8590c1bf2d845001038", + "Name": "matter_g1_multiexp_94", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019401d9118a5c2b0c6ae40507cae6180083258eb6c45cb8bf2fd5d2703c95fb07c031c82d0568a395e18015fe0a48a2b000000000000000000000000000000000511b992882f75fe98131fd35276b7a1de527b94718549bb4f5c9980917b6301a86e45fb7c7e3ea99e54158e49c7e60ee49662df81f6bd455ee554704ff0c7d5a589d91e017d7ab4c500d36378c17c89000000000000000000000000000000000d886eedf2a2b33a50dae5ca6f41237c9425b0a4daf08bf4789a3ea8c7f598d53257916d9c03df0d63f12a1a804fe0990000000000000000000000000000000012cb777812e76378f04fdaf2cea12456aa9e11b4c3ab0f12e63fe7ab11c716562b07b3864cb9dabb7970c81bc1da324c79eb26c79d78ab84c4d7e48e56889a601fda17901037a74fd79355e7536f39530000000000000000000000000000000009f09107ccfc5c4ac9b7e0058d6a0c4d7dc4309134d5fb972de3156a554211d4a2fbe639bb8a93d86091137671ab8447000000000000000000000000000000000b7f9955092221c8a2f09c6a9ffe6483ec0f8a0f6c555ec1772c260fb62c4ada6dc7beb92e29620afd15466b5f025cbed2918ddc2bfb7f7cb3d7e74b43b9a972c5b51ac20ea83f41d5b51034b5714c0b0000000000000000000000000000000009a22492a1b78342b919f7b5c8fcdddac408cdd3e8af4d6de5a4b1e510fa3b7e0e6887bcbe074fa839f2d0dc892db631000000000000000000000000000000000e5eac3a77c7a3e89e9324abcc0203046948f3d62e40156a5e1b1d9a274d408d6cb49e06b8cfcd21b596923f86c02c6be9a8159fd7915c15db69355514d9dd26c66fbd14af969ee576401b1b782fc6d30000000000000000000000000000000019914b405a24e72896b3d231582f0075fa7e59b0d0bc796d790754902238943ba634dce66131260efbb5dfc3925a1d54000000000000000000000000000000000352a5a986c500e41d2fa4f65e5a917061b3f9449c1e720caac187c6bfd4ce14f1b49ad414864a1510894530cfb4a768c818ce6e33e581595e83cf8d33a62edc26ed38c22f20c6949a94e2652bb954cc0000000000000000000000000000000019567f8de70c4cbbb25335e69154ce48d4106c8c9d0027e17c67777dedf758203b0a8fa3863d4e7812311f6cde36a6640000000000000000000000000000000009947f7401d03fa8b0801b130b43f729d6a71c04edfaf7b9d3265f82b039131fa09f20f9b4565d21939ab7dc7dd3477e9ab338e94b31d22947dbeb20fce3150127249d2db6107d95bdd032eb24c496450000000000000000000000000000000003c42ae9653d1d1f00d79f8b1a0c53d0f2d7f3ca52ca1960a621fc1bead7ab31cf6e5bf30c5cf7877c83b33b6b5b54d6000000000000000000000000000000001221117f45dea3fa1f832bb8280512841ad1798b76f1dd16dc320ea7c86473f6f8c98ce007ebc3ebc39e7a860be987fe96acb797236dbd0316fdd355f07b9b45c9bc626f73105e87c376af4d7dc075d30000000000000000000000000000000004340b7dbe7c27014add4ecbdf310de758ea5dd1100508a96501ae3caf9955c877113971a61f66e3691d09f0a259d4ac0000000000000000000000000000000001d5f83065f6d178b4dbbe0f00f0a88edf0a90021601bddc2cc27fb0ccccce7e48c6283a1e641408a20de15219b5553e60bc12a8b34e717b2c410d026660c14182250d7c66f8f88dd4cc94e550421caf0000000000000000000000000000000017679efa923688425fa9cff1f8e89ae681245371017f574f4a655aa780bd11009579d7daa47249f503592bf0ab79e67b0000000000000000000000000000000018f57a1ee533981c8df24895ad174228330ea361448ed63e522637df44cc1b888e969ee94d7b44bd532b655123f8f5d8537f0f732fee8b882d254a81704d2310c05dde186232f3cffc05401fa9830215000000000000000000000000000000000bf47631b34b2694ff7fc5d1e25de2195e606daafec34fc2c8ec86c0a325214d874002422810a81cff654eda187076eb000000000000000000000000000000000931c54d05eb43195c3ff6b396e324b5878c3fd507637c316c62b3b6e2d3d84cff9f33cd1046f1939187979330d3fc431a22bc0bec2501a505cc8e00a24792bb380ed451ab6f56fde07ace8b6c9348a200000000000000000000000000000000138adb70a3dce09176914deb0be17821cd0212c6ab554f7e200804dcade06c6cb5f7b084a1d6ac0ef8eeabc7cabe7717000000000000000000000000000000000a4422c569aced58938abb7bdbdefdb27cb06677c1066d17f98a59f847928d1bf2343acf8b5d1717aa38cf81959ac1acc7b10c801fb9d929432cbbe994b404d3baa5633628f396d20d047fe2c2ac2914000000000000000000000000000000000fd9ff095adf9e3f666d3141717ac4a96deb5b4f92dcee35be1d305031d06d51ecabf863a41cfd8dcda0fc94ecf79982000000000000000000000000000000000fb55855aab9e557046ed53421cd3627b519859e26338328d7da249fdfa6a07fa533f748eb5dd564f9922ad911121b2784f2f3f31d9869799ed8bfc2cb129dbbeeb096d771730ae2863c4ddece66158d000000000000000000000000000000001054ff028d2e2875330e3d0ffc52e2a83ee2ad2adf024ee294f695113d9d645f0be2a3d3c70f758f43f2deeb542aae810000000000000000000000000000000009a5e96cd08d3ee4e740e2f7b94a4e390ab5f6f572c4a1b2d927a7ef2365557ab9be65b8e2388fb571a3765892a96445c62206fadb762c23bf77f69f69bd492674bb92edb39248ad2a432f819304e6ea000000000000000000000000000000000bb1de70113edd86e5304248fa2f857f1620dc8a6bb28680f537e04029aee158e2ead4e0eaa373b812f6ca988dc40e7f0000000000000000000000000000000012118b670c9df77af087ad01e3b766d4a2b7c2b2a319cd733ed6c02ec36d9002036964fc442db992bf730c57a7d0a407a6f950de53d07fda75ab43f73982c2684edb06317568df15b8712dff2ef782830000000000000000000000000000000001968aed17e572c0d99e4e9262f239771976dcd9d7df19c20bfa94aefe1d4f3a3117bbfa4a6e329bc6b9552731446dd10000000000000000000000000000000004e64ce59b928e8cac2f744bef119018de8395b712013b0c69855fbf2bdc6a750a947b1a81c9df959c78367ed0e1575d95a373fab5176d124f783a36eb2346dddd5c4eba9e24e4c0cdc4f925e2e24cc9000000000000000000000000000000000148cd980512e0aa153adbdef262f098b1ece801ee4024b5561e261d39b495165851781d519d75f83dc5f298d40b4e9e0000000000000000000000000000000001dd43f37950976e50071226b6aa47c229085807ce9634e6583f5a2d47eb8547d4de0669b16a2771791c9ccdb4289cd9319d855218eee020f9cf8e4c0b6004902f0b16eedba8a1c911476af34f65dd40", + "Expected": "00000000000000000000000000000000059c7ca50efe2d0a64b55a560a08976b437c350860f9599fd30370d1cbbeacae147144c216cb3e63afb2ddcf34282a5f0000000000000000000000000000000018f42ef2fb8eb6cc8c31600a3be37ece06ee567ce0c8b8c7a54c910041b8c25b2d94a94722904de079737f06e817f380", + "Name": "matter_g1_multiexp_95", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000172bbfff135f33357b0dd0e8545da99c4ee74d6414724c2aa66ffc85f3a9d0e35ac80850436745a12ca6f1c4ae5c0ecb00000000000000000000000000000000152dac882023cce1a3e1fd4d8d5aedcdf6acb2ca9628a94ce92a4a551b1b7268589b52b2c90af6e4be9631eebc2ef8a62a397c2f19a8c4e66df0e062f179be2f45a0c5e104588222a1a78447512f299b000000000000000000000000000000000c40d04b3002c21b041ea8b8ce967056435fadb479fe1fe20c373b2e2c5b568b7a38d031424bc835bdbd85af8ed1d0380000000000000000000000000000000005e7357194364947c8dc32fd74757a3f3014e914dc25f42b2dd86230ca4f86981476e6f10b1559694bc17d014cd243d7f193d5a575c80a3e7599923bf5a8ba8a48e8f98322d1d8eb1da42e446d518c1b000000000000000000000000000000001474002c92db026ff5bce69eddf1d8ff8e6d2ab9427bb82377911597fafa4d60256836c094cd513a52a3a09797afbf5300000000000000000000000000000000176a7b311a333c2d4f6eec66e8c889ecd7becca75fb35a38bcccae52f10ff69630393fb7d87c3b6d97cd648be099c56507f2013742ddf2d35448feb80b6b7aaf2925d3975ce28ed2b1ac789886ae26e40000000000000000000000000000000009ecbdc4836c6c0cb4ccd014f9e582112bce0d0ab047115f38ed5dd51c54de5a43321e85c9b3e9af5fae0caaf2493fcf00000000000000000000000000000000034425e05f0adb1577f7b1bf9b9b50a76bc894f5ff0e9a8d190412eeeaf80d0bb96f21478fe8adea327f69c9137f57094e637a80a4eb1b2caba68b6828aa18f956c62baa7c5e9e591a15156c5abb6050000000000000000000000000000000000ec3d4fe1b5e1c26de1558d7dc51eba3b6c37ec037de184e8a6f481ae20b830c92221593e1bbe4ee76a85cb10b33e18b000000000000000000000000000000000e51f811e16f00626d934e69024b55dc29fa4ea363916cd8f44f928fda6e3ca4947eb15de24ce1952c39e9ac52d2739d27671631f9afd9d2e86f263f5c17c3c11c7f6e43efb6d75cb2cb8250094f2289000000000000000000000000000000001205dfd803ff3688c2023913aecb10c138be4d03756e2f05a63627973f511c2635571469d4f630758627f7977b418729000000000000000000000000000000001186b9c0d2b2073b495ef9c233c275922bdbf4691e8be085051c09e245242526b13b7051782a80726b381a72b5ef9d5ec2decb1f482f3eb48e7f52b89f6452b659812ef79bb42fb25f03aa9969faf9bc000000000000000000000000000000000413f6ee9bb25469af4298dde67f0a4a26d2f528848ac6646764703922c78d65e046204f891ac94b0b4c425110fe986e0000000000000000000000000000000011860881aa871fa3a6693b23fd7b1da0bcaaf044058ea0700b786f12f1074c615577e572e33faf8b3562bc285632696d911eb1de54fa8ccb746336b681504fd08f995c864a8dae2aa866862f81f0e7850000000000000000000000000000000000010e8fe8fd7863c2807a4bd717fc4646a0e4f99598b9c6c2cf0547d039d58290a367e4ad851c7a67e8dd546d5e328200000000000000000000000000000000063ea10e84e4f5824ad7b9b68398c9154ab25ddc4043a4990d80e09dd94a890dbabf9c3d93b13c4f40bd7b1ff32b14b2fd0a61dbcb0c657e824cbcf4670a31a95ecbd47a9b93812cd5124f3ac9450c1b0000000000000000000000000000000011cbc725705b809ad69c5ebb55ade0039989728e7103b684feb35c8142b100175235c2b395e37a20aa40845ebe2dabcf00000000000000000000000000000000057b5b5a5cf5f5bce985295f8a50252967aa54e934e87855097eb083a59863aba19ffcec4354a5a831b747175ba10e878118e9c70cc5def8e7d258e05273937c514131f39e0cc9fd2a3620dbffc7ce3c00000000000000000000000000000000041043cea626d6ab553b95c6e09de597454a3a3d1b8a75fc9ecb3afe15bdd8b5e73b8012ead8777df8957701fc9c9022000000000000000000000000000000000185da96dd1d54bb7ca5d7dc2fbe4cbd8ac95f06fe85a7a26e5e0e6353f6a6daf73b74117ee62be4f3fb268fb4c86275c445931b79e2b826aca02d1bfbb00c2dfb6d30ac2ef97a4ded18243b1afce773000000000000000000000000000000000a06b91559964aa8e8628946bfb720047915ddf08d24fa34f7b241e16bb163ef67f1e84fd205485d17725a8386a7016a000000000000000000000000000000000ec787cf5134bbd832d2a7dc1ed87b8c824552d92fdb30a790e1c73b22c753540a9747eecaf14dbf867d9667b7b852c7982ae6de98df906922e660d461009ba6c04cc6497f3645a66385c775b21b210b00000000000000000000000000000000053bfa3bd311c1780afa1862de6ae8a475b8eb9c61fcee2b63dbb6556022d703bc7eb204fb038056c654dfb940e7039400000000000000000000000000000000074ab5797d3c39804dfd5359b69a4bdd2b738670d13662eb2c112eefbc0f90da85dd1a4b6e0613785fc66b100d129202000674ac5d09c6c599173bbe9a43726c120c3a60a96d43954727a2f33ac4320d000000000000000000000000000000000cd50ddae4f053bf5b7b3237701bdee2f5167e09d824d260e89ea498fb3b593e5053b781c159302b0433ead35f072c850000000000000000000000000000000001abe8539a4215a3b7b78c79c306dcef7334c83f571f4d6836e1c1839a65c8cfa9a0811395e3c4bea26b22ac2175757e773f8e9637886d795b75e7ecaee512005c1780e7ab17b9f20ae9232595478bb20000000000000000000000000000000001e6e0709869922c36e073fdf1404a973e0467cab3a04a806361e743d67468f0d66de28f6c0c7b8cf92954330485db0500000000000000000000000000000000084e96298cca174344b7b86052426f9316a15b4031b9e42677253fd9355b1c99ed9ca3eb3949005078ba228d4167f8b0759d0bab12ac790cc3a16e88f1a108e670681f117d4fc7d01f8c5a2d6ca7fe8e0000000000000000000000000000000002c5e399eab947a52660807752ca662212cf3a201c1127dab3586cae88f8ab6dd23deb0312387178e0e9526bc8fc7b8d000000000000000000000000000000000ad86b21dbf58098fc4f758d7ec9204bb16cbbe680b58fa42821456d4fa508e42b53c8988dc0d9a4d6f6a782a5fb90b6cce865074a8a41f8a3f40228046c5be68bdb50ced10bb73ac8472f052530293800000000000000000000000000000000181f41dfee6effe70a28e4c53bb6cec52f232caee076f680fd63d73cae24b44709fc63ee3782a36278edcceeb7b32415000000000000000000000000000000000088d9011a9db9294bb4451e9981e84efa595462e26e5dbe14e9c84a8c5ddeca94f49857cf3b8a70e6a4047ad76d234585e2f9597c9b687150864e90ab042f4f012a54d92cf9d2ece09e4a081ec9773f", + "Expected": "000000000000000000000000000000001170d9938910ce68e56f9e84be6f6ad284a244adbf26daf8d42f6411c9794b707454ec9300442fcb7a0f08eb91edf86800000000000000000000000000000000043679c7a917148d141a785e65b0a067e35a016c24bf7639ba374e21a817819ad67d317ee70852bd13a1fc3a373a38d2", + "Name": "matter_g1_multiexp_96", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d9cb39df5b28781d33d996039da8c94cd810bb85aa5868008b4267ad2a8670924d4b3ad7898b33689aab2211bb9bdc00000000000000000000000000000000007a8a6f888722e4717acbfc42ef1907206db31603c403e0a8c1ac0af9b37e63124d4645a506265487e5f9eda09c8baf85431a1df7678e49ee049b75ea968ca255ef456dd58cce57b64edffac1ac223c000000000000000000000000000000000db6af04eccb3ceedc11378406a26613aebbbc2201a9ea2089848c7af3b34e46a3421d5704242c4b333f72180f6baa0200000000000000000000000000000000105f40c8b702f0989a9e20f72ff6a4f7310d81787e87638c33a61985f02116e106218d64976d50bcc61cf5bcbbff7c9eb6ccbc0b600f11f1b89061d94c6fbdc9b1d389244fb29a5d140dab8842d44eaa000000000000000000000000000000000a77e39abdc9d64d72ea4b321e3310a145feaa5d342bc1a5b16c0143dd01caeda4f18909acccb3cb5b43ad999a94f91b0000000000000000000000000000000016fc4a4f6b488fd1f45a158d941d7aeb5d431821589ee845c64eb198ff10931d586f8a0678237be2a394f5976d895bc854dfe31190469897c30ac3736ab166220dd3702df5bc897835347713d03a8d04000000000000000000000000000000000d0ddfc05bc9f89eed488752d64698bf00633c83cc37931d95a599d6be6e4c5d611a4151839133e86f74bb91aed1703b000000000000000000000000000000000be3dbea501c822730ab0176f64903931aa46b0179c59556ee7e1ba54605ed8da2eafed7eb2254a7ddc34e553a9b6d59eff1ceff9e5184dd9fea44da4f07529823dc9b100f776cef6f6881120f7de11a0000000000000000000000000000000004d6f288744016f15b21da736283af2ed1f45df12067a3a70391f66fff3ce3953a51169eba6288cabd84ffe7f597c9fc000000000000000000000000000000000f6556a63def531a940269b073ea98be79558d832123dd681bb4446d4c11e2fed59a2f97904797abb07ba53e0d48e923b273e4c6266c1f5cf022902fe1310d2191af91c47995486342bc61cd361eab850000000000000000000000000000000013e692a13e79c734f3758780fbdabff86fe5936bf6c60f2f155ec4d1c49cdefb97dc02c1f1e4280c5ebb055914d93f9d00000000000000000000000000000000060898a9365ae49697e5ac23e320261eda04d818c5f1153f647844b1910bb3430d3c06df9a64af8ff9dd25c18cbfa79d1342b5cd4ad3179f406941ef6ea15d0aecdf9f6d96dc334c39b7dca89d256d4f000000000000000000000000000000000a2a4d92ad63dade4d666ea949dd64d5886eaa3c7ce466677356ce9f65520591c1aab590b48e9fe1eaa0f0f3e306cefc0000000000000000000000000000000002a2bfc836409b33bbe078a5f89c5142411bde621e9117ddf9f81f37bd546c3e2ba94975ab4652fa0858d5a2361592715b36620f65ed84fc0bb344b4b73f4eba4b1680a47b28b47f6d10f9ee8239812500000000000000000000000000000000075d3ebb18437feb21f94ad5e2ce96cbaea2f6d68885483ed54ee67f2dbcf8cfa39f405afb46e45d08cb804a7aee3b8e000000000000000000000000000000000d42851366ed4694730b7c58450c3f9ebd365f15fa4dfa3fd226d180aaa921a0d897278506ede76b85decddc9580a365249ca9bcf879a770b0a054422a6ea97ae795118ae45532c1523c842696de6d17000000000000000000000000000000001722e05d33728260ebf5e4b48104cb2c89b4bc3073767e56fda373bc0e29261c9a5c53e5768b453b116494c1109cba2000000000000000000000000000000000030e4da8620007236b89103b215e54751ba2f2dce19b0304997f450791880ad34f3e43cc4e6852aa599fd65ef72dd9a5c014a0aa616e809b674390b4553bf2d9bf325e73d3a935eba94488dddee4e895000000000000000000000000000000000c4e7e44e8e0387bd99311343d2ff3a080ddad557c8639aad64c4f6e47d64f48b91f9de2e33b4b9c182a87efce5d4e0e000000000000000000000000000000000e7cb49fd7aca3daef3c0329c950c832e1d007f21a4f950f367eb37b5d7433f5d6f1ab1c206232b2ee32137b56b53967ab722a1c20f068b6955a44073914c418a082345796912ca634e79983a24ec4bb0000000000000000000000000000000014026b8dae20a1913ecb45359e9ceb317137244e16a036ac760b47363f2d389ef6cb12cd5f5fb9e8e31ccd39bf114f8b000000000000000000000000000000000f07f9e76789dd937b85e02a9c346f81e87637bd03bd5f98a9b18ad6d109100b540aaadf1fec048530bcfa35dbb5b8ae8b314f83cc3ad501caa44b4c3ca8cf68c70ff6920f445d3a7ada212b6a19ba3e000000000000000000000000000000000a0249c354052094cae5a3d77313360a8956839af614184696b5b7fbd2af6555c6ae14a150220f01d624484b9096eaa700000000000000000000000000000000043098df38ab37f42175cc9f9fa9ecbde75bb344776ed078632b3d8bbfbf04103adde27ef0d361177bb3814cbb8bc54994ffab83099c69845cc87727d459ae300a5725ec53176424ab0ec8bd3f80eaff0000000000000000000000000000000011e90effb7ae193b47afffe6fcaa0a28c358222cbb087ce479b7fe88d25386c5a9c9527899d7633eaaed9d982d3ed4e100000000000000000000000000000000174877f80e5e9daf2cc219545ce67b904319f75c0284e41552662512727c1e05b364364c4c8835c1c9c6fe028ae45895b1d80be637e2abd98d0433150e14b629d98fc0918c7dfc179204669ab465e90300000000000000000000000000000000170e754e54f64090c4c7520bfed82665b44728904092fe3a4fb2fd2d3667ccd4ecb796e5ed9fc4dafd315c0b6dc22b86000000000000000000000000000000001081e62ee7c502159f7a8e28c5ee45fb7fc5b301f3a081899bce10096c74d1bf7834d12cb7fb1301b986e9c6f7501d53e670a57ce4dcfa680e60ef33ba99c437e4fdb160ea1012de36f4b59613a6af85000000000000000000000000000000001434584d8d1cb34eb29fd1c95871f218f4dc46f8b2ddabafdc7049e88f54fa4b80c88960a76411e365aa65cbf77f01ce000000000000000000000000000000000e4e2e1318c5907a07a7ff154b07e959d681a69c066585ba046b8889d417d01c503b32a924500944d43e68d7da8da35d54a999fdf391d3944318c54680e69b58ce3778683b6f2c607d64450ed32c6d89000000000000000000000000000000000945a9d0603a3bd0278fce30f0cf97274319a760291fea5aee143c364cc0bc60e59dcd1093aca1a3ef64696ec47845e1000000000000000000000000000000000a77cc690d55763a94aa48c210610833427ed3176b6dca184598755f539359bc7302f8dc2cc941d447d9b5b68fa716b70563ae7b444cca7ebaba36b8d59aaa5c0e6c1454a4a2907866247e752e640a7d", + "Expected": "000000000000000000000000000000000ac708f97c9e9fef4482af7b95c59c2ce6b8826f6b046b5a29ee2224ad66648a8d1f9959ff434c77394199fbe75780db000000000000000000000000000000000983fb55837062305d7fbcfe8c76cce1c431067a97392923720a6c4f963839d7d2661e2a8dacad1f151f505748239798", + "Name": "matter_g1_multiexp_97", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ae003001e3173dbd17f4d6598fcdaba9966f1e22a06ce747f7d2a06b2bd37579d093242a4940bd816ced07ec1917365000000000000000000000000000000000b27db470845f285c792da64e870b818a7598fb820313e075ec72e78f59f3903cb0860b749bfc67540a8bc80e844a8de5b59d128b5ac47106b4114cf225dceb621d177141ef5783943f40a54ad94e9900000000000000000000000000000000018a33b2c2f1ea187672612b51c8dfdd9e86674df58ff4f77ff3f71628e7aafbb80ad22f34ab4203c42bd39a4f73c3d6d0000000000000000000000000000000017c3a68d8782a479ba9aa829e3f261a3e1b832595fe3922d800349bdc2bf58e0c1b523eb0924bf0996e38aa83267f570a057c0405e24b7373f67197b2109b633a02589711b6a92ff49ca024f893d7ecc0000000000000000000000000000000015347adf6539116167ee71557b78d8fe13373512ca7d8d365179e25ae8ed2c6a65e1f643cb0ed677a2f44eab809d5b640000000000000000000000000000000002360dbbe0b7f8e97f6aec4b20a7e6525d83056975a4228901b4f19259c9ff2d2ee00da9bb9085232fdf843e5d305561677b05905180182427efeb848b2ba2eafbabc7519ab33db14de0746afb6071910000000000000000000000000000000005b62380515d49aa1427800077a11a8f01ff00fe7df53a13a9266910e4038167ab747bbd0705fc25ae2cb0e2451c893c0000000000000000000000000000000008de7bcad1c67d7f1fb5cfb9d20ac2134006618ce0d22f4120f5396bf8164c0effb0e3ebba7959e9dde757973080a9cc53e7f69582f4c106ee5bfccba1d5f557736c1b75b6e3777cfde47d552e6bdcac00000000000000000000000000000000185bee837e3212323dc40fd471ed9a1a58f2aebfcf7f07ab761d40bc1ed77b385a134c99385d07e75c5f8c51d6496482000000000000000000000000000000000d7d42e4e18040da671799f981d404085fed490182d397685498e80967cb9c080a766d5c8822152d78920fb388b979f534c87bfb629b817e7ab97def7400b0a83e47af8d628787ff814733fdf34ba8d50000000000000000000000000000000012961da3be1ecc774fc9df2dcd87c337ee50a99df7c4821fe08da7327276a24d754be95b6e916d5c63926b6e44b74310000000000000000000000000000000000e44d11949fe33bc3a0ddfcc74c5b0fa79cebfc0d4a00a574ad7659c7a5e72c728ae4ee031af57e9135a3eabd93686edbebb60069acf431e1671e3d00e4da0d70fa11ed4099b21d45a2b811f99dd9cca000000000000000000000000000000000f03c013d5554584c2030ea02cb451ae508fe6dcba72bf7c49cb47a25d3d65eabb2fe043b9ea90e03571aa7b64be8b11000000000000000000000000000000001479789662864eabf677d2a541e48e5ce70f35a2cd6c0a476d4179d02955a51123e75c650888e514aecc85d67781c8c18b1ee2765e762f1b8c2451270cd5a755758fd733d7922a537aa9f1fd7d0c959600000000000000000000000000000000139bf8fb623dd156a3fcc46eca51e61155cf58e2dfe8edfe717effdd4418c833db7fde2031ef27edb4a70f9d60d67440000000000000000000000000000000000c352a16159eeca4dc9a86601973c02e39f2a11c8a0955ad52236d7e46dbc405147258ea8558505bef0f09ba92527c76d5009fd559714d5692de5500ec8cae9c04ae1ab1c7c6e08c8738ef22da19ceca0000000000000000000000000000000005b8c4c2782a2a2a3abe4f99e60db6ff4179399aef4b9e305fe037e1a14a4c03ff59be1e91f55e5bf316356bbaf876af000000000000000000000000000000000eae605cef3beee4a176a0589f2676b3e212edcd7ac5834ece3066bbbb587bdb6bbe46663acfd9d8aba2251a238004106330c755ef708d8eb129475785f24be9e7836385ac918c60ad36e80e2f3281b8000000000000000000000000000000001038258f67b0097ec51adee244cc15d63c4d3bf1b3b3e64ef8ae6ac15a7c4195fe97bfe8c5a42981a2463ed1b39032de000000000000000000000000000000000a6f27fc1f2dca48f6e26456de5d9fb840e4ed3fd9ff12372e51130d7c439f4ceb4fa929da2dfa3ca271d34e9aa0985ec2431888d05cae840dde4c26911db1893659fdc345d5433556d9bf75e51fe374000000000000000000000000000000000373fbfebce5c599172ab017e8f4f9813b0e6aef3031faf61c336aa7d6b64c8986827a27605b476bfc1057a0388f864d00000000000000000000000000000000079ec2c41547d98277c60dc46a61ddda51c9df65a8ad2d0a64d483eb245986de36eea2509cf7949c5fb05a77f9cf3bacc9a72369cda74e5c86c6559cbc4f4db1b3ab24c5150c7decea862ede3c02c505000000000000000000000000000000000d50821953bbbdb494e48c59c940c5f2ac2b902f4c2ba2b2ad50960a51ed7eb1a9d592bb903a03b0b90d8817d10848ba000000000000000000000000000000000bf0898bd20e08205aa218e529db578d5118ae411159ed372eb8968cd773ebb1619f92107d2948020bb3c721ea63159dc2f50989b04fc29c4c4a0090fb11e860c15f89a66f3bb8281e4678ba63ff3f9a0000000000000000000000000000000006bab55b7648be3eaec947694311289f17258876d74a7d92f22b7807d007fe142a71210684593b1aabf74579eb1b1c17000000000000000000000000000000001016b28dadfe9b65d86a1f843f7ff4b774eab74431b68b079527c2387ee6cac69e95ca564346fc54237edd3d2d31f6ed9fc9abf1c76ff11ab538f46ce768ba597eb5f2f63073ec67e8de10aa1d666720000000000000000000000000000000000c0d5ae44a0863ef3d6d32f1d8f32f2c5b89112652e2e3d6ce620479882fafd73cd3627f9f11315020c8fc9341c7fb4800000000000000000000000000000000197067de9d61733dc0367d91f55a57ae268d5e7babe7882c1fbcf03cc38de7a2dc41acfa16bac0ae63418fc349b9471cd4167723682bc0e7476797b3be5e14b8de3e4e23b4ca33c50a2096cda8766dd7000000000000000000000000000000000c3964c79741fe8093ccf2f3d118b33897a18d920ca242ae153118bc17bf0102fd19a9e4000698b256930a2f415305180000000000000000000000000000000003ce4a6877879ee56299ed27f634571126d9f8ca8ccb1e67100064e7efb435cacb1ada74d7c7529b495957ce7a5dfe709644c3727f78dd12811092190d5d10adcd5b9fc581dd783c97d4e7b5130f309a0000000000000000000000000000000018e6260c0cd6cf806ee82a047c51a85e0d7023883cfb05993ee81220e0871b122c12e65bb99b20787322d93b82089e98000000000000000000000000000000000d5b66fc46b7fb60fe8efb6659bbe948c6776d7780633f007123c5c49f5fbe7e3defc0f3d896333d0ca01244f2b6effe0df9846c84354ab7f947caca7800e12e38d8e6651527e6831f4d8b1bd66c4f3d", + "Expected": "000000000000000000000000000000000c7aa8aaa848c068104b88d0757551612285327ba5fbe35ccb4eacb1bc96a341786e4548f5f86f6ded789b712a4be74b0000000000000000000000000000000015c9aefc358834f21ec85092cd69df37e0036ea6ddf23a3ca052a669446b183e5340ec7ce894ff6575f5e6531947c84a", + "Name": "matter_g1_multiexp_98", + "Gas": 64128, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004acd4cb6bcfed3219c3aee9368feeb58d77a7ec81d19bea11402015f4bd0ee2d7afd86fa7ae9dd320910ca28eb6d98f0000000000000000000000000000000009fe1b0094c0c2ae80a3c5accfed5d212ce39f867aa2150b781c193a0053aecb04d06e005fbfa0a24595e5968d024be18a71abe11a893fce872f6b8a020b6d84241df03eb934b50cbf3571df4800a8330000000000000000000000000000000018cf9bf39549c35e94211b4e2d0a0157d73e1ce8a17cd724eb33c38281dac07e12eec61b27b440b220c4f21915a73a52000000000000000000000000000000000fca6d956989db84dcfe58b0310fc21b5bdc82a32838c8d9cae912d683dd9c67f68e15b3fbf9d7b430ba239c8904fdd2bbf28e5bca314391550d3a0fce50b1220965860e72c8c3865a2d4c599d31d3f1000000000000000000000000000000001897956bc232fd5a9b0ed1b533bebef8ddd9e97002513eec71d67ce1086ba8473f2c013af7d8ac548290453d9f71bd5a000000000000000000000000000000000796da5c8ac165d416c8fa36d84e11bcaa80c1bbfe18efde4b4b2c71d6d00fa24f3d51eac312cad9e854f094dcb6ec7458b208a6845aeb2bf31999042c59b7b130a7ce5297e88023953b1aef63616fe4000000000000000000000000000000000302240769257e92899da03fcc4abe1ad3944b74c3046e790e4e950f2958426b5fdc691401a1c8a531f42185d382fe5b000000000000000000000000000000000053750b58b6d2fbacae94e22b397261e541eb4abf4715b3f528dbfc3388122918b1b4b506f2fef89ea936efdef0105b3b53b6cf9e0ce1661c4960283be790abf956c2d6433529b8f3a32b92b227aebe000000000000000000000000000000000168a635a14f61734372f4bdd2fd564d77afa8588e1828d88c4c90bb50f57473b2c20585dc0e93726b84e73c61f29ef1000000000000000000000000000000000e6e92355e59304ad35b1dbfbb98db803d5fadabdef4fb1b2a54080ec9a33a7147ebb4d5219acabd949337bebbffa793b049228435ade4c4c565e65f39f13a84c747c312afcdaff352560b9fb3cfebcc000000000000000000000000000000001797bf2ac9b490cd43a346fdc64bfb22301a0a0e371bb4df8ec02342b4fcc99af43b4735665c6b1386fa04a3dc5406e3000000000000000000000000000000000fcc20f4aec04b7896ddfd86f58c2e1e9dc6f863ec3b477572c073c0f4fb07ee8dc0d5a843321446445b6e7846fbc5d556197f5ad17062d2ecbdc8887bcdd32e5ed4c48cefd9e14d622a0b800d9703300000000000000000000000000000000013ddb8ff149222a5a0a997c0b89aeee36a6ff2540de3cba8bfe6a2a64fb505f13ad956a3882082ab85bfbe72f3a3a6b600000000000000000000000000000000102c1a1085f60cd5326966a2dda0872290e1658002ff3ed95c47cc0345565076bdecdeab7082bcfb439cf7f3e445faaf721d9d7fe10104cafcad71307e785321ab87b2b69593535caecbf0e166cfda5b00000000000000000000000000000000189515e637d404ce6db58d24774609cf946074aa22066d808dc022824a26b381bf09148005c61156a976154b025d71c90000000000000000000000000000000009102e313c4517cdd3d07a66e0013eeafc996c21fbf5f0f3e7d232ad5adb781cce1657bd5750193cfc0357ff55bd012a461531ecb61365908019c1e8074a4c322df2b356eea3f3eea9aa1e0e1fc5525e0000000000000000000000000000000002e166e475ff083faad64667b683e546b2358f945b8656f9c2f3f6e87a40dc3fc087dd94874bec1c4bd5929b7c96024a00000000000000000000000000000000022bb4ba4be638d8c14a16c94522c41cd3b3ad917daa454f820b8fa35e5a48c676266feece6986e8fe920b2a5e43e4b3569c1c1ae2d18bbe36ed50db1bf30957802b09a982fbed49d4968815552e010d0000000000000000000000000000000004947bd8ea8cc3b116fb7320c573fff0f107913c18cfdba2e7e9a4c8715e334a431156f384548508df8950d681163aee0000000000000000000000000000000001e9e7494c295248184503344b8ac7bfcff41a4561de03d78691ac47980f14aa47c1eaa3cca80103f0f2ba14a2842aea2061d33b2f7e786effbd2e93101a56ba1bb62c1a773a08b72ca82f5183bea35b0000000000000000000000000000000004789b01538cfc54cad0e99538e874d13eaa7f07199af29d460927c3e622c74e0bb4185afa12c53446f56033348c332f00000000000000000000000000000000154291a8bdefbc91445ef1fe123f326b8aad652c8c54502920d4dfa912c2f42d784fbc5a16d08468d2d6ee56e7e8eaa24129b150752d2d5551a622231ab067931678454aaeb23f76168219406f0d50ee00000000000000000000000000000000029048f227fe8d1b7247a82cfd3e1b4b60cdce6b52de42c4b96641bf8fc5ba9b077e33bd4c4fce9a51b63a6a2451b427000000000000000000000000000000000c83518e1b7700d68966d592cb2e3295a2db5226eb6fef972c8a84721d1e49a30e4a8ee3494ed4bbcd2a6877e1ba597d366c32d5d3c132f32a6ac3cfe1dabb649c59ae224338f747ad98b193e83467290000000000000000000000000000000003e96431aae4330d3d204093b7af21343ace4f1960de951eeaebea51e778b1fee43ecddc46667d096edbc5ff4735586400000000000000000000000000000000183a282f4b0513be661b1b38eb5f02b51aadc591745e0bd5d2d4e5545739e26470a9ec20d78ec284268d9c54c8e4f7b6d997516cac28a3968ac6946b5bffaace0856a52e38fdcca11ddfa16cf5a568f5000000000000000000000000000000000904c85edd36dfa18ddb4e1809607708142f3c0861570f2bc8fff14c462675661f2111c10a01557fb21f7f38957bdd840000000000000000000000000000000012a3a37f34ebb23d4c9268ec9e1d53aed4747aaace497695e6ea8fdbdedd58031cb479003e8bec0d14aa1d062fa30f2ce881ec65fdc2f58e46d3ee45a06d0c5ac844ee5b62872c7ba21f6b48621a337100000000000000000000000000000000148532bffbbf8bb1688f6448854214b4273b9d5adf132aa9142c1605d1882879678b6cc70638713b9438532d427f447c0000000000000000000000000000000010971ee30d83719e10e91aad3f1f201fe35ba1a057531b1905bca3a8391a3786cd077ee0f104305eafb3c94f4546da9edcd9b95e49473277a665ca0f9a8309df9ed6ee4f25d803aa967fb8f688273e65000000000000000000000000000000000f73574aa5a06ea569de88e48fcb96e822039af296684933c1b417dde95e08d2ac9c6ad4d525b0734e24807ee99ba88a000000000000000000000000000000000523deae09e75121a6d89b45161f69f0733a9e43d88d8527a03cca8cc126aeb7a680cfaf291554403723e20440b79437334582482a9038ab906880e43a4a9d39e73b6c63604eba0c8f6399eb5c288638", + "Expected": "000000000000000000000000000000000db91871e4cd84b3b58216b6c2e77a9521f3080182e78d3f66fe33f313013f06aec2dc5a6d483f35fadebde873bff9490000000000000000000000000000000003b9685de062b09b9e277ad5cd664d28af59064448af2b1b2b2357df6fc88e3ee7e0ac837100e0b7593944e8db43ab0f", + "Name": "matter_g1_multiexp_99", + "Gas": 64128, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2Add.json b/core/vm/testdata/precompiles/blsG2Add.json new file mode 100644 index 00000000..64ca2006 --- /dev/null +++ b/core/vm/testdata/precompiles/blsG2Add.json @@ -0,0 +1,730 @@ +[ + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", + "Name": "bls_g2add_(g2+g2=2*g2)", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf300000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849", + "Expected": "000000000000000000000000000000000411a5de6730ffece671a9f21d65028cc0f1102378de124562cb1ff49db6f004fcd14d683024b0548eff3d1468df26880000000000000000000000000000000000fb837804dba8213329db46608b6c121d973363c1234a86dd183baff112709cf97096c5e9a1a770ee9d7dc641a894d60000000000000000000000000000000019b5e8f5d4a72f2b75811ac084a7f814317360bac52f6aab15eed416b4ef9938e0bdc4865cc2c4d0fd947e7c6925fd1400000000000000000000000000000000093567b4228be17ee62d11a254edd041ee4b953bffb8b8c7f925bd6662b4298bac2822b446f5b5de3b893e1be5aa4986", + "Name": "bls_g2add_(2*g2+3*g2=5*g2)", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Name": "bls_g2add_(inf+g2=g2)", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2add_(inf+inf=inf)", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2df0000000000000000000000000000000017c9fcf0504e62d3553b2f089b64574150aa5117bd3d2e89a8c1ed59bb7f70fb83215975ef31976e757abf60a75a1d9f0000000000000000000000000000000008f5a53d704298fe0cfc955e020442874fe87d5c729c7126abbdcbed355eef6c8f07277bee6d49d56c4ebaf334848624000000000000000000000000000000001302dcc50c6ce4c28086f8e1b43f9f65543cf598be440123816765ab6bc93f62bceda80045fbcad8598d4f32d03ee8fa000000000000000000000000000000000bbb4eb37628d60b035a3e0c45c0ea8c4abef5a6ddc5625e0560097ef9caab208221062e81cd77ef72162923a1906a40", + "Expected": "000000000000000000000000000000000a9b880c2c13da05bdeda62ea8f61e5fc2bf0b7aa5cc31eaf512bef7c5073d9e9927084b512e818dbf05eab697ba0661000000000000000000000000000000000b963b527aa3ec36813b108f2294115f732c878ac28551b5490615b436406773b5bb6a3f002be0e54db0bcebe40cb2e2000000000000000000000000000000000bd6e9060b42e36b57d88bc95b8b993da2d9d5acd95b73bad0509c2324212bcf7a94a46901932c0750535d00008a34f7000000000000000000000000000000000a374afd32bc3bb20c22a8864ce0dafe298bda17260b9d1d598a80830400c3fd4e8a8f677630eae5d4aa0a76a434e0ba", + "Name": "matter_g2_add_0", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d938800000000000000000000000000000000192fa5d8732ff9f38e0b1cf12eadfd2608f0c7a39aced7746837833ae253bb57ef9c0d98a4b69eeb2950901917e99d1e0000000000000000000000000000000009aeb10c372b5ef1010675c6a4762fda33636489c23b581c75220589afbc0cc46249f921eea02dd1b761e036ffdbae220000000000000000000000000000000002d225447600d49f932b9dd3ca1e6959697aa603e74d8666681a2dca8160c3857668ae074440366619eb8920256c4e4a00000000000000000000000000000000174882cdd3551e0ce6178861ff83e195fecbcffd53a67b6f10b4431e423e28a480327febe70276036f60bb9c99cf7633", + "Expected": "000000000000000000000000000000001963e94d1501b6038de347037236c18a0a0c8cec677e48fc514e9fc9753a7d8dcf0acc4b3b64572cb571aebbe0b696640000000000000000000000000000000000d9739acc3a60f6dffb26f9b5f1fd114a21f2983deea192663c53e012b9f8e1cabd4942ad039badbd4745ddc0a26a91000000000000000000000000000000000b4206dcdb80d62195febb6773acab25fa2c09a2e4be9416ca019faeb72f1fad1dfdc51e8cea39b371a045b18947d40a00000000000000000000000000000000100758b888fa27e9258ddd5d83409e8aeac576874bc399b33b8bc50d77fce5358cb091d42f9a1b1ed09be3f200959989", + "Name": "matter_g2_add_1", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc000000000000000000000000000000000a69d6d9f79e19b38e6bf5a245dc820bddbdfe038d50932f76d0e4629d759f8ca6d573fcfc39256305daedf452f9fdf40000000000000000000000000000000015f5949369e58487afcecf8018775d1b0a73e913bf77e13d2e5a843bbbeba7d1978ca27ae8bfc87d30f567dd396b980e00000000000000000000000000000000182198bb38a0353b8db25389e56ab0d8679a1bda008a65dad77e4c95bc6804f6311eb16c761e1a5e2a5f87cfada49fa4000000000000000000000000000000000eb5483959e98c30e71db52615f63521378b156f142d46f3bb285b94aef39d80feacec335b797c5a68dc17ba89d43e0f", + "Expected": "00000000000000000000000000000000079e4fc2190d3441fa76c2d925d23b81e353e09e9138fdde51234195e564a32c98aa0d240f051298bf966d17adc2d6fb000000000000000000000000000000000aa327776fa7e15000dd548fcdc3a1cc6f9d0ab33046dd4240a3002962131b738ffed579945a348c795cfcb33682cf3b00000000000000000000000000000000179232ec56602d1ff79861cbfa2edece34b296541483aa65fe0cb493f520b7722cfffbe04294dd054770a38bf75d927b000000000000000000000000000000001826b88a6b411330757bb304a380487a02f7cf421115b84b3f468d11a83dbf304ce7a5661f4f01299d3c7865305a0006", + "Name": "matter_g2_add_2", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf49000000000000000000000000000000000286f09f931c07507ba4aafb7d43befe0b1d25b27ecc9199b19a9dc20bc7ec0329479ef224e00dece67ec0d61f1ca5ae0000000000000000000000000000000014e6ed154b5552be5c463b730b2134f83e0071dcdadfaa68e6c7c7f6e17dabb7daf06e409177bc4b38cfdb8248157618000000000000000000000000000000000f145e998dc6eb0c2b2be87db62949c7bfa63e8b01c8634248010fd623cfaec5d6c6c193331440957d333bf0c988b7b10000000000000000000000000000000002a1ab3eea343cfdea5779f64b3bddbf0769aded60e54a7507338f044310ba239430663394f110e560594d6042a99f1c", + "Expected": "000000000000000000000000000000000f69e3616e7122bf78230461bb1f4b194988adc6149372691d8794d0086fba0870a2255a2c79cc3426e7ba4d032fc2ab00000000000000000000000000000000174752301e05dcd62f7a3ae3357344e64d1c94835b2b742ac24449ee2728d693a0df10c3beaeb45d1b4af4ac2bdbb8b200000000000000000000000000000000051a761a3ceb275ec28a2a269b5ded1d9fd11a617c958e73c07de3a92ac480aa82c7d2a1852d291804e734526277f5740000000000000000000000000000000009bec9045ea89d5d16588e3373cc977f6d975d0e2213b171403a9b2ca460b3b2e1106b474185516d4200655b17a179a1", + "Name": "matter_g2_add_3", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e000000000000000000000000000000000d1007ca90451229d3780d66d3aed7c9d8fc82e9d45549e8586600e38eb6763f3c466e2f6ba6ba1dafd8f00cc452dda20000000000000000000000000000000001d017d920a262b6d6597bab532f83270f41526409510e80278d1c3595ceabb9ceba8ae32b1817297ff78ea7a0d252e8000000000000000000000000000000000935b7a59d2e51bbb2f9b54ccb06ebee9d189fa82f0e97d10c8020badb3de7fe15731b5895faed8cad92ae76e2e1b649000000000000000000000000000000000792dadd48a20040ad43facedc109747411895180813349d41d0e5b389176bfb15895d41665be8d1afa80835ef818eca", + "Expected": "000000000000000000000000000000000c079610e6f8770d65352f911863b6cb4fcb25cacc4a42f75e34e29e977c93244a6241cf3d5bd1040ce7d8987996f87e0000000000000000000000000000000010d08d8f6fa8ee7042c0891ea0c3b9b59a79da52cf3a91627c79d456212e3f6f39e1f69aa0053bbdb4076a3f7d05e5dc00000000000000000000000000000000069047218b0ac1e07650ac8f4a1b9235f68408f543517c4ae3c0ec47c79b468713c704ff3680edc8abd1bbed7a5fa75d00000000000000000000000000000000137737706162e02cfa75ce2154d57c9a3520818cc04626654824769ad92ff7977942f3881a28284ea47c14f353772d0b", + "Name": "matter_g2_add_4", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e200000000000000000000000000000000095353ad699b89ac82ca7ef631775b2b3a6e3ed8dd320440cdb929baa428e63cb902a83857cc0e2621470544c69e84aa000000000000000000000000000000000892559ade1060b0eef2cbc1c74de62a7ff076a3621e5f0f159672a549f1201f2ffb3ac12c8b12cb86ae3e386c33e219000000000000000000000000000000000750df4632a7126ddb08658a4001f949b9764d9cc43a9393cc55d8fdbb15d4a1186dd87a6433d111888a7804540ad9fc0000000000000000000000000000000017554bd444665df044b91b0b2614017bbfcd7acc7f8c5a16cea2861235578ce2b27dcced9fba234999fa478cd3f6e42d", + "Expected": "0000000000000000000000000000000004dd5dfe38fa70625216ecfec60ea8d38602552726f0fdfb8f392362ce845fe0fda76894d0e456796e08462bb941579f00000000000000000000000000000000195a85cd0685f4053ee539de7e04fccd2380819b291f89cbcd63d5a0015b3214500284a7c6568a71f52bbdbc38be410a00000000000000000000000000000000107c211bad49c7dd8555e30f2500c67e7175eb98a8494f3d5309c65a93cce89572b7b5489428eaf3f0a5c1be323c5352000000000000000000000000000000000c11f978150ac35722679cf79443b3706d288c968116ddedc1f1d0fca8cd746e3c92dc006330be14886c53c41feebbf9", + "Name": "matter_g2_add_5", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46e00000000000000000000000000000000175dadb6ee656ec6aebf8d0e5edaee3f119c74e0ea64e374be9e8ab9fd3d085fceeedf4ed8de676ebe9065d83b0542ad0000000000000000000000000000000005cd6a875329c23e4918976cf997e93e403957acfc999f8159a630d21ab6f1762925c063784237262bedc82402ad81bb0000000000000000000000000000000003274bcb8db35e50164d136c2a98b5a6d2fb5f9767d0ee11c1358bf7ca5ed96d9122f8c1051ba3c658cc89777d03dfa5000000000000000000000000000000000380a240443dff85b6542f75db28b87c39e278cdb8d9627efbbc63b229e6ce783f6fb0114c8e91c2fd6ea71c95bb99a4", + "Expected": "000000000000000000000000000000000fb33caed4de22cf341bb3e04d41c0198b064c1d371a24f5cf59595ab4a1edfd379916a40cc405d35f0603b2f8fb987400000000000000000000000000000000131ad6172c20b3a1cc2542db037de1324086fd9cd140ae97987980f260023d91b24504181af6fcbcfa242f48e99559320000000000000000000000000000000004a0404c00789459395f5344544041785d10f2fe74d4bf484966f5e9b6b4c4c8cb113a811a4fa82a1cdf8e3242bb418900000000000000000000000000000000086ba6a914f3f07bdc6750fcf6baf76124a17964bf9eb9a12982e8a28ca04360da3544b69436d5663e4e94bf7189529b", + "Name": "matter_g2_add_6", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12000000000000000000000000000000000834cf1b4149d100c41b1bca0495e455002eb6596bddcb94ae48d0c65957e8b313372f8e0d6e57504664b266f38293150000000000000000000000000000000000de2875fbd14760bac4c2cc7d3f239177efe9f7f61f767be420d44f24c9fb863efd60dcd732986db8c5b72470617ea60000000000000000000000000000000000bc9535ebf11c2dcc8c7d3bcd09d7d14035635fccb5fddb7df29ce8855e79f99809781d6ffbbcb33d1227314609abee00000000000000000000000000000000039bbfb4d969d702255e3be7f255a97529a19687ce38cb70637c37894d4102591feef428b0afe8c9ef50310ae3b83091", + "Expected": "0000000000000000000000000000000019c8a1a206c0006a3033377abba4c31c55710a094d8c9dcef7560818e90411861ce7d189e2763f8fe69bf75e719e4efe000000000000000000000000000000000cccc6bba8691c210aa0a67d26584a359fab94041d853160abd9669893c0d398c805cc37fa3c33bc5ee5ff915b985c45000000000000000000000000000000000e353c1993c36763acec2a75495560e743d099b565f3de195e011afcacff3d60502801f47695da7dd589af81e772eb7800000000000000000000000000000000100c6123cf08eab6c59d78b414fa504ed10c204851289b0598b40ac31971fa12cfda4ef7cd2d64f9797d4d2b193e0bd2", + "Name": "matter_g2_add_7", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5b000000000000000000000000000000000fc09c241899fa6e8cc3b31830e9c9f2777d2bc6758260c9f6af5fce56c9dc1a8daedb5bcb7d7669005ccf6bfacf71050000000000000000000000000000000018e95921a76bc37308e2f10afb36a812b622afe19c8db84465ab8b3293c7d371948ee0578dbb025eed7ed60686109aa0000000000000000000000000000000001558cdfbac6ea2c4c1f4b9a2e809b19e9f4ba47b78d2b18185ed8c97c2f9c2990beadc78b85c123b4c3c08d5c5b3bbef000000000000000000000000000000000ea4dfdd12b9a4b9a3172671a6eafed7508af296813ec5700b697d9239ae484bcf7ab630e5b6830d6d95675be5174bb2", + "Expected": "0000000000000000000000000000000009fc3870f88288c680b43d63d3bb5305b99fe461e59c07be981b8819fbee0d1fdfae0c037e830fbbabc40cedac7919720000000000000000000000000000000018bdd4903da4d14fa28af4c2cddcb708238cf68673ce77a04a3926c4aaf17d39a831c5401e84dd042d6adf595a1763710000000000000000000000000000000002c398f0e8ad9752f4aded980bc5de2d91118db06818d815c11e818ead47e7065823737db8e304bae32969cab065d1ff00000000000000000000000000000000180642a633c3aa402e5c0b18fcb6fe8c115575b863abda59b5d91997ab01014faefc975d0aee994f98cf37ce79eb95aa", + "Name": "matter_g2_add_8", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb815960000000000000000000000000000000000b36d8fb9bd156f618ab8049d41dfe0698218764c0abb10e12fae43c8810b8e2a5201364e2778f6f433b199bb8f9a6800000000000000000000000000000000000707eb15411b63722b4308c0ed4288320078d2463ae659ad4fb3f9ef8124f379df92d64e077403e50727388adb59ac00000000000000000000000000000000158e1249d5b91614924acb23899c6bae408697dec0982c10d0459746499f4e6739afb9d5129568106ed1a1caefeaa9640000000000000000000000000000000019e841562e4aa75321143f8ce1e5ec6158fa5cb8b98c839a486188260c18ee8a7600930f23aa39eac2eb520d6a0fba90", + "Expected": "00000000000000000000000000000000199600699a6108599c638df8f965d73b5de4ca74598df281ec95c539de2c7eff9767569692d8e0ad120fcbb3d9335b95000000000000000000000000000000000c42b11e2585ba93521b3c968e9dee07e4f5168c11087d8d750795555a105df70c969bfa79b1ab4e5fc8d81657235d08000000000000000000000000000000001370daa4699daa99e9940fe04f69150e6f752798cbc0e66c91c3bd46149d935c1815f32d7f14b510e16d475044eda9cc0000000000000000000000000000000016c7a00be10de5732795cc3ee2951e58cb9d42f9b05d02fbff1b83fab5d3ad830cb8178092b76172108d7a53afe8c539", + "Name": "matter_g2_add_9", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e97795505419600000000000000000000000000000000186a9661d6fb539e8687ac214301b2d7623caedd76f4055089befba6ef2c96263d810921ad7783d229f82783c9def424000000000000000000000000000000000447f3e20caa1f99fbaccab7bde2bd37fe77cea691ebf2b9499f95bbbb77afe72b7039eb0c05970b61360fcf8ade73730000000000000000000000000000000005e11f828eda86c10a1d7929def547ac06885da278afae59c5d95453caf0a2d8ed186fa7c6d0a7ab6e9142cfa4b338190000000000000000000000000000000003d954e61b6ab71042b19e804efccd4956b56662f27f70a9255cec0c464b86c0e83721ad3785dec62dd4a9dd3d6d5d53", + "Expected": "000000000000000000000000000000000669cc8a3acae17f99f805afb9012a38851a9e8d4fd9895a9946c29fc859849c24d7ab7b6278c449cfbc5f1d7ea1fdbd0000000000000000000000000000000007a9095be808d0ebc99bce94e851d2a7cd3e1977b923064ab5bbed2347cf18f3343e60120fa051d12fe27da3146cb423000000000000000000000000000000000f1e7f75887651f67457f6dc064d7c11934035d15fe4dc40bab970160ed1b1aa230a3fb84dc1da08770d847c0216347a000000000000000000000000000000000efbc62ade1678cd70eb38c644038bf19e52b0859f65747068d9f3124762d951e4a6ff05f34b6d14919774f8409adff5", + "Name": "matter_g2_add_10", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a90000000000000000000000000000000002b94534aa0ba923bda34cbe92b3cd7a3e263741b120240ff5bdb8b718f094d3867e3fcabeab4a7be39c8f8c4fdd10d900000000000000000000000000000000048711cf6a82534d64d072355cb8fe647808e7e8b2d9ac9ed52eb7fe121647a721dd1234c71ecd163d91701eb7331cac00000000000000000000000000000000141ef2e23a1ecc7ef2ed3ea915492e79cfffe60b5e0de8441e878bd0653843d79c724e3c5ebe2321361df99f8932ddc200000000000000000000000000000000085513b4009f29b3e00a91c2c4be418368560802ba4194cbd2f4fa3d72a55fcae547014434514a8b2a8fe3e0b28d2773", + "Expected": "000000000000000000000000000000000e25a38d0ce2aabd2538c95ed463f226e3f29ce7f10e1be27af2d3db741926d557178c4b125af8789b40480d8beec0890000000000000000000000000000000002a94b7c57fe2783d055a537004a3b67e41f5374da0813094f5944fbabf4d27eb576dc8b21ccc15f8339df14ff8785220000000000000000000000000000000008b9efd8abfa4fd71a8eafdba9df38360ef0b0a117c0052528d1c24df5032635eebc7b201439f5de858514666c68cd270000000000000000000000000000000012a2fde51f6f4a98435c325dc3b1ae846bc33a5ffb3b13fbe3fde2f74dec0aa815fa8e42392b3dbf798cf547fdb4db0d", + "Name": "matter_g2_add_11", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b381731734598360000000000000000000000000000000009143507a24313ee33401955fc46562c9b20c9917df3b40ccbd7ed43b1349d4551cfd98a4976d6fec5fc289460c8d89900000000000000000000000000000000060566b79df5cc975e669da8ca3a7fa91bf3f5c9fb871c3d62f4a3e79dbc341b89d38b588e5414bc385d5e3cbf3ab9310000000000000000000000000000000016bf40b8cc4c01a87aafae0c4439b623a51ba9a383756a550b69d627d6f45209f0d87e4f9be9edff35c986f7b9c49e3f000000000000000000000000000000001842d9172bce51a164fbdbdb108d0faae07e4642f21c80e40ac31e737657472ae3dfe552b65349629c210a068c4afc0e", + "Expected": "00000000000000000000000000000000067265782d58b04a2ef3dd419cee506e076e49d1119e28db1df7f0e22cba9bbdabc560084cda50bc8db3915fa9c489a30000000000000000000000000000000012448a61fb2f6fd8e355111b671f0e888304284b72d5688091f2ed00edf7ccb7e5bd8a733a910d6964dde07d393798470000000000000000000000000000000005f687356ff6c634eb46613be8e98540107e706714434faff54510234d4aff42ef7752e154aed63fa8ff905ec0af628f00000000000000000000000000000000180dca84a37c964b30f5cd11a090e54acea102f1b884319f8d1252a37bda005512ffc39dec8e33af0dde0d37993f846f", + "Name": "matter_g2_add_12", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b000000000000000000000000000000000ab19bbddd661e9db8fe4cb307ecebdc5e03efbb95c5b44716c7075bd60efcfc67de0bfd7c46ad989a613946c90a4c1000000000000000000000000000000000120800e7f344cda816299fa37f603ade06beb3b10907f5af896d6b4e42f7f865b756f14164db84411c56cb2ea81f60be000000000000000000000000000000000f688ddd257e66362af1437b6922d3397a7c3dd6dea6bca8ebd6375e75bf2de40bc287cbf3434388191e56b92949c83b0000000000000000000000000000000005252465784aff8c1c707da58b5808c69583bf852d68f96912bc53f8dae4536b09ccbbd25a49d9e744118992b92b6792", + "Expected": "0000000000000000000000000000000012a29d35c9af52f172787c90c5a3e77ed29d66feabf5d7bdd6bfc14dd9a05d402976b84d44647628c908d1816f4e7100000000000000000000000000000000000caf3c372e36de557ecd7eba02e6a79b1b4cff30343119df7a23662c8512095e051ae2dc27e577635c74a260be2b084c0000000000000000000000000000000002ceca293a58bc9beb4ee9a0679eab037f5cf7b326d65c0efeefdbf384ad8e4bc08a3a75a02e6b9cba8963e65d6e76ef0000000000000000000000000000000004631773a6590bc89b49a75bbbe2e732f9466ba259ef7a04ae69b6aa5d5a2621c1918eb213101f6f7eeee4656a7b1472", + "Name": "matter_g2_add_13", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd3000000000000000000000000000000000e3165efe00f69aee84ac56d2161f07c017abfaadeaad34f8c96799d68bae0e6f9b557bbf9137e7826f49f29c58d1ef9000000000000000000000000000000000de0dce7ea371ad60f21f2cb61cb582b5072408a7efc91edf05b36a1a3b58fd9e6cf808d75157eedccc8f1c93a8ae07d0000000000000000000000000000000016d911943d80427385ebac1d1b293914a9e4dd9db06c1d6a758192d63c8fc9368e02eae7fb0e3a7859408f215cfa76ca0000000000000000000000000000000007bfdc6afb8acec625e50ecbc08a5cdb7862b795866323679885ba5cba3fd51f181078e03fe35e96e6383c077eed1bf5", + "Expected": "0000000000000000000000000000000017f155ed9911ec56d71d63d57556de071ebe89be36e6bc9943ec068a70dd5a6f045dfb9fde5c1e29d52c9fc17579452e000000000000000000000000000000000a60d62ea549edf4b11f62f2321f39d41bf11f3c4f858dc7db85b1dab1b7644e27eeb1d022d6082f59c65155068d2c390000000000000000000000000000000009d309145fad15860e556ec4b4aecb415865954247c2034d5bc96026e4d6f7612af6e2db99f4e462acee2b303134b91b000000000000000000000000000000000114ed157e3d020c5397cba7e10cb864aabb47461f166a6724614e689274ae74c505fb6ebfe3e88da0d6c272a15a0527", + "Name": "matter_g2_add_14", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bd000000000000000000000000000000000a68dccbe3452731f075580fe6102b8ee5265007ee19c56d95bcb096a3a6ac444f4145b980f41afcb0a865853b279bc600000000000000000000000000000000164767ea55a9038ac2dd254d8c8a4970dba93dacdf5416aecaa407914719cab165e7a32784b2c41652a86358737d831f000000000000000000000000000000000da9441fbc6578c85fdeca49082c9ebbf183de894d67c65158380ee56132d3cdb44b100d72b6d3b82688defb75d2aa390000000000000000000000000000000017d570e4f6e46550679d5d12c347414da207060f594620e2f8db66df8e0b06c912290b207a268e782d4b45db19a199db", + "Expected": "00000000000000000000000000000000118e0c81f9157395578f0fb83b179721de2af3326d13189cb8f43911d8c3268a11fd9702f09f14c115bbdc43d5fbc08b0000000000000000000000000000000016a548df8c87f432c31e4e32c3e5b4d48d6f29fbe391d1181174be9dddee450e7e96bffe8c9f23692ccc080116592944000000000000000000000000000000000eef72a5c698c58f1d2ae9415da256b54d7b1ac37a1d1b88727c0afcfd854a41973c6cb10ecbc3a90050fe3d8d3ce8780000000000000000000000000000000019b16ca8f955dfd21830a3f7fafcc97d7de977bafe1983892988aaedd430d22674d97897d24c1643e99bfa6256df4bf7", + "Name": "matter_g2_add_15", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca800000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e", + "Expected": "000000000000000000000000000000000f2bf3f69276d390c9fc2c15e9f5f5d0b3cf9a6eb028c44811b481f376ab60e17d33a04b78348e46eaa94332c5f16ff8000000000000000000000000000000000bedd0437fb3f4baef87e56f33c77fcdff6a5512571cf11fd9605697abd8763315f1fe4bccf04acc6e971d6aeefd9c1500000000000000000000000000000000067c3ff69733baae2fb4ab77cddb7563047c428b40a257a375f8cf8c9d230a6619f7932b86e0836fff0c1c60d2c4dfd900000000000000000000000000000000057526faed8d62aa10e89add5a338320c748ca1f96ba5ceb579efec69d17475571fc4ce6fce3a93398ea88340f0e969d", + "Name": "matter_g2_add_16", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91be0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f9", + "Expected": "0000000000000000000000000000000004fc19f8fe47e6acd37567016704b07f906e8741fcb196f697e1fc24b0204292693ff424bf1c5e407f5bcba5a3b1ab85000000000000000000000000000000001816f992c3c461fa6d2014ced382a35b0d70e61927d72b4d661434efff3dafe2f4b6cc91bb1a5dbf809f10f3ed7f36de000000000000000000000000000000000dadf7f7223ccedbeffef31c97df7e01f99299da71b589c8828b65715012aa343d7e041dacc57b34a6b5f84523a7938100000000000000000000000000000000167f7e73e22df81bd2a7a6f14e940a401bf414e5d18b3aa610b2a82ca8f46aecb5721d0092b27f8968b2302c37957268", + "Name": "matter_g2_add_17", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae7", + "Expected": "00000000000000000000000000000000041a5783c748247f05457d30d16f93431e9046a236d5025cc07a27b9f2abaaa556e2df65cf0f0015107253fe94d8b4dd000000000000000000000000000000000193638bf69c7508c4b12808a62e89883c34f97ded6e1b5dcc3f28191e5c7fd901a72a85ae386acccc9865f8144b1bd500000000000000000000000000000000180e8184ab583da58b77b8a4d108a366dff3e3b336ebc5c9153fa815188edc95e7067ef25f7d79526c295d634bc98f5100000000000000000000000000000000125b147100f6df0cede8e22151b3423b1dd364899fdee103c71a44388ff002a367627a2342e15833644bcde61f2ef6b6", + "Name": "matter_g2_add_18", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a7915780", + "Expected": "00000000000000000000000000000000095fda8adf3981f4468fb82aa0ccf80e55138c922c6422cd8e67f53ee63e7a390bc345469e9211a1f8d810cf4ba27d0a0000000000000000000000000000000015c19b6af21f75e8e53fcefbae1c8d7f97853a8aae5fa62e606cfc92ae71890702ef9dc5609d3ca8fefd415fbd820c04000000000000000000000000000000000007b7e908766d34c5d99cb7cc76d5d5ea83c29ae1d9b83b163741bc9962e293926b1e251b546ce0c1268def728da78100000000000000000000000000000000084fbd6253211f7d66d52b7f14360729d54b2f94c52f2b76e521dc3961c40b4f19944923f64c6425a44eb158a9727a4f", + "Name": "matter_g2_add_19", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e170000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e", + "Expected": "00000000000000000000000000000000121e7f2eb906d0b31b8ce5cc46638428b6ee57a1ee70e4ec3c2bc044230b9b86875abe0862145b442c0e34308efc690f00000000000000000000000000000000139120d0a10b82737561d0b3fda01b6df69d9beb7dbabf3ddda036f9b4c317f3ac1eaf400013fe5ad664bea44a73b336000000000000000000000000000000000a923184b381027d8cb3f82708802b204566b2b8bb6a72767aa396324d8a26b4e0f0cb92fd1914d77a4e9af2f1ec31e3000000000000000000000000000000000409732f2225cb5e5c002bef17512519eb1a18bf6c3d7f834d0c7ac8a38433c88b550b3f443d259313eb1133620ebf0c", + "Name": "matter_g2_add_20", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b710000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd67", + "Expected": "0000000000000000000000000000000006a200642d5cece5eaacacb36000b4b897e8d8c661c8282f90495002aa515c7638183cf1e80a0b35e953adb92b6bb845000000000000000000000000000000000e88d4cda34e98df4d727fda79b67961b5b8efb1b125ef2a8eafc481a2cb2fa1530e59a091f31c25cc49d38f545491ff00000000000000000000000000000000082f38c1a1c35981f537547dc3b59331ab8c5e8dd261df58fe6f0c44ef1e65d0cdc1980e1a62f6248f38d0afe91e5627000000000000000000000000000000000eda1002e202e9ee4df5354cb87760d4df32eba1eafdad27cb0636879370a8f93be0bf2a30f15f2fbcd7e52c1bdf6b05", + "Name": "matter_g2_add_21", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4", + "Expected": "000000000000000000000000000000001341cf3316152ae8d57ea2194224f04756690133d2e02d077dc271aa577278e346e0ff66e8a49ff8c983fd34546e1f6f0000000000000000000000000000000016c9093da650643f4b4061e1c6e55da6ebaf9f234bef8325aeecad3863a0a2f53e1cdb2d54aa8b075ce6e6632fb4cd660000000000000000000000000000000011eaf3dee010bf2a16c5fbb1f7aa559cd4d831f087d9dfad4e157a6d2b6495e370d9791cbaaae19339a65726ebfc3b910000000000000000000000000000000008476d793305204be414819fce2ca70754a532682876277bc0586514f2096ba9998ae848c722ead6722d5af9395ff77f", + "Name": "matter_g2_add_22", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa097000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa", + "Expected": "0000000000000000000000000000000009792d98ab9b90c2467ad0d070ea44f382ec7ad5290a59d889313c5a55d7b8e837333ad7ecfd97221d405cd6c549dc8e0000000000000000000000000000000002b92dd07b61faec23f48b8a7893dae29509fefd688a978bc2e870d4cd6f963d708a0611b4aa65f5644fbc6ba4c5e66b0000000000000000000000000000000011e46a283946a8e033afbf7c14ce3162a05867809d7de94a090c8cc2cdca8bb79add21f6e2fa8d7f39ea6d26cd37ea850000000000000000000000000000000000fddb7cdf1f1126e7a6780e4892601121b289a386ebce0caf96cd392ddc57c47e3f9284889fd8a18fb330d6c40bdf67", + "Name": "matter_g2_add_23", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e", + "Expected": "00000000000000000000000000000000054dedc002c5f2da8c6e0a0146bfe5c83200b276b074e6d6f2c397e1208f152d3ea3e8f0da7da62cfd2a028d4c94fe5b0000000000000000000000000000000012ff307f86e266e7a212484a169d3e81df98217c6f715176913b0d383cbe4e790212da7feca0cea66df09d92544fae010000000000000000000000000000000009c211438dcf8ccb664b535e73eff304b92aa2f568aeaeb8e10ec142f92b211bb8147b250dad77d508cfe353667b6f150000000000000000000000000000000009d1734f4ecc88fd56f412f9243c387b9da659faa3fe7295580a6b7519b1980bd074339fa9b0bef44dcdd0cf0c4a629b", + "Name": "matter_g2_add_24", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac900000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f", + "Expected": "000000000000000000000000000000000896a38ce734c550c178786092292e737d44fa5f503d6d3b66c75e6bb70b59d1db9e8baa1ea3e256e2dfd8a942311e75000000000000000000000000000000001231db96a35229a4c7507b0ec193491446a0b43115c27d18b3715fcd4aea14d4e5c99db5934e73bb0b86f1bb91ee96fa0000000000000000000000000000000000d6f95d5637b29ea889c028dacdcb484d8ccdb243da4d5ff49e5ad82f234d414dc1484e9ed6cba1b5940eaabd3066860000000000000000000000000000000007de052fbb76902e06e1783fa8afcbb54a5069b4c5e9cee78d43da2cf76f24843a740a9eec6fe9b8f9bc4ac9baea77a5", + "Name": "matter_g2_add_25", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b8592390800000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f", + "Expected": "00000000000000000000000000000000156914a9137e52abd4579599dea4c0f857eed0457ee1d80635d3a6ccf0c766ba8ab1b6f989711fbdf125c4ff06b597ea000000000000000000000000000000000c60184e8ab32019ce20d2d137130f657c8964406fe4abb26da232c9c5dbfab243837d700c88d6b9ea4b8f0a2f514281000000000000000000000000000000000dc3e6e3acb898552791431859943d0a83fb4ccd62e4ab2a971370a93a99a9dfcdbe4c42535aa063354e0f2cd48308c300000000000000000000000000000000025be02da875d4990d1f0be626ce634c4856ea91f88f636bc27e313e73897c9c13a1e3ae70c1227dfd4fba97f521d6af", + "Name": "matter_g2_add_26", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a300000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352", + "Expected": "0000000000000000000000000000000010124c1c1c10868b570d2969ebc3bf5cd6bfab13ddc93f0fd2b8a1742eb8e04d31063bb81c52b92e253128d4cb4413a60000000000000000000000000000000013f89997cd2ddae00cbf24cb66a92146c553c6fae41cdfaef14d49078729f239ad2661937dd0d4d6ffd7076b03e0aa84000000000000000000000000000000000ba2ecf990cd846c95b35ab60d4f97f5814c8189190df9d521b3dae462f2d44db006a0daecf6b82c1459006bf82ef7c90000000000000000000000000000000016dc129b83cca5b3c699628d081306c5fa61faf9dda5e92894931714037628fb829c595bf64d4a7fa295f136ae244601", + "Name": "matter_g2_add_27", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e055086016000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a6", + "Expected": "000000000000000000000000000000000a66f36f2437db57473bd8b7670994f1cfeb8b43c0ceae358e63a5e4e52b737fce6b3d24cc4de593bcd44c63f2c5935900000000000000000000000000000000070b7ad970f03a38c8a31452cf11422159cd3331d746031781a5861e26f54efbaba63dcb1db8bab997eada9c3dac39cc000000000000000000000000000000000ba4a9d7350adca1ae64e722df11baeea77c5fb75c5b52c8c46b9d863a70bfed1ec47888e907213f4ed4dcaedd37f20f0000000000000000000000000000000008a64244f1870a1dbcc4bd4d5c9eb5cd5225713dc73aa22bc46b1cea36c88a66f85251a8a9ba7279c88bd5dd37a06f7b", + "Name": "matter_g2_add_28", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3ff000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b59294703", + "Expected": "00000000000000000000000000000000079f89f2defd1f97efe0ba1db28523abc88cdf66efd39918a600a07c5ed5b72ab9d3354a172735e7749b5f6814a48f4f0000000000000000000000000000000009e361b8609be8057e5b3c99eaa1727fdac17edc59239af17f55d72c8b8daa89726f4ae240c742ec4b02fbd89d45c46400000000000000000000000000000000121b475a2ab50357ce80fe01fc461195029de20f61474b0773d80434253adfc268a775e1a0e3b7df5e85d1ff8c5008960000000000000000000000000000000019a76aef4e04136b1ad0d03586a3d8608ac4573715f18d5fd6907d03e5fec7c5659e15c19fd87f242da972b651dff5fa", + "Name": "matter_g2_add_29", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b200000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb", + "Expected": "000000000000000000000000000000000383ab7a17cc57e239e874af3f1aaabba0e64625b848676712f05f56132dbbd1cadfabeb3fe1f461daba3f1720057ddd00000000000000000000000000000000096967e9b3747f1b8e344535eaa0c51e70bc77412bfaa2a7ce76f11f570c9febb8f4227316866a416a50436d098e6f9a000000000000000000000000000000001079452b7519a7b090d668d54c266335b1cdd1080ed867dd17a2476b11c2617da829bf740e51cb7dfd60d73ed02c0c6700000000000000000000000000000000015fc3a972e05cbd9014882cfe6f2f16d0291c403bf28b05056ac625e4f71dfb1295c85d73145ef554614e6eb2d5bf02", + "Name": "matter_g2_add_30", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c053345501324233", + "Expected": "0000000000000000000000000000000013f8cdab447ef9be450b87f941c96d4e93d5efd811d80c6a910965728f7dc496dec132f3fbeee5d1e84ed7c24ca9c2a8000000000000000000000000000000001537d5caa13ddfac93f0f86729c743d9a68175a78c730528b581fb54b1f4d020473b3b766e3882a485ce5d02ab381c33000000000000000000000000000000000b370903684ede24f3df80e3834ed414a765cdbad98f20c49bef8663a82a468d3911d6bbcdc021e22c252e83a857e55800000000000000000000000000000000100cc8d05f071904753776c6092a38db84c5de751bf93216131a0f9a50bf78a722344a14b3be2a9207568d1f669d208d", + "Name": "matter_g2_add_31", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f860000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce", + "Expected": "0000000000000000000000000000000003c5498b8c2d4765a270254dc927c6edf02acf0759540ddad951ea8c097bddb949ea0bf19942accd615bef21e8572dff0000000000000000000000000000000004c17bb648909bdddab4dd86560cb6b341e96f58c515ce471281f226181bded16b358b56d72e363f9ec491b8a9dcd92c000000000000000000000000000000001828973958204f8ab8cd13f5af5f3529f368a149bfe931a8002b61a61895457fbcb0cc6874631bb55799c884b998d8b9000000000000000000000000000000000f61460bf61bbf3ce38917850bfd3cece1e3955ce29d200c6f8aa89076c70919c02668678edc0bcf94efc9e9ff6a650e", + "Name": "matter_g2_add_32", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac5", + "Expected": "0000000000000000000000000000000002c6104b3494fdef86d53f87bea68d313188c0908b935fb3b9f636ccd401c6e9cbd33bfcdd437e1a0150d0e4b9c3a881000000000000000000000000000000000bdc88396f807d1ba8d4d6e284d008b5e40445ce32c23a0178824fdbb6db3c5aede7687eaa2f12249125cded57052ad2000000000000000000000000000000000c7004365c1d3027997b55bd258dfc61ae07a762666fba2a14aa2ca116673fc03a6f694c069f53cd915fef6d37513101000000000000000000000000000000000ec17688d8f53e2c92502091c859cef4fe9a57ae984cb1e72686bf1f0656b10246293cae4b96214a38dc76cf2709bd59", + "Name": "matter_g2_add_33", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c99739", + "Expected": "000000000000000000000000000000000a44e6a48ea0a95667f607ee66290cb0094c964baed779bd6656941db28e30a7e9effe49a617be9ab376af4f535cc28f000000000000000000000000000000001933b87310bf5fa60b1abcd13bb7ac3f2ec0a278f6a0a70c953a2905ac1d3bc5a70cf1da885af45d1c7680bb4f7ff74c000000000000000000000000000000000597ce9f1bf7efacdcb0250427d0341e142226aaea060983175ea149912c5c4f3019fe87be6d87d186a8f562fc3059eb00000000000000000000000000000000198b5a891722a237a5e23e3004798c8d3f069af3267152508e283b4549fc5e8388330343f80e606eba30af51c99c7020", + "Name": "matter_g2_add_34", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe20000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0", + "Expected": "00000000000000000000000000000000047c2ccda315b9c013e87bc9168b3b8dd6d463403f1cefd824fa9f93a99f4c4f98fac5f97e4237f76b1ec91042f99bd600000000000000000000000000000000036861fd0a69cbc851741475905441b51af12c5b2aaee6ce9a27a01a43db810be9c7d6fa401406e98e327703404b83a5000000000000000000000000000000000310cbdf53f6cf8d87e2d178869bee4359a8dd666986d869761a79963680a33ea3ecefd40a1e558acae5ded2ca04447300000000000000000000000000000000108bbb28c73ed7e76a51a78e4d15a2c88c25e05c7127ae89d4347cda00be231b5e70e0b0562caddd4a7083efa4516722", + "Name": "matter_g2_add_35", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a84486000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c", + "Expected": "00000000000000000000000000000000137d23ed3fa0d7e5928af8d1f4bdfdef08e0b4c0f3bf6f51ed28960ce9805eb8fb254233bb18cbfecbadba95e112fdb80000000000000000000000000000000018615147d7a8cce1dfed6de25cf2fb52f54a243bed4913e20e66673f47ecddad9c5e4ff9653f522180de4b90ddb3ad17000000000000000000000000000000001521f12116b13f785b5211aaf438aa6668bbfa318cf0ed6d91aae963f6f00d32cc5f25d3a02bd902ccc25f847ee2db830000000000000000000000000000000014263b23396f4facdacf13c79864157823db724350bc640abf8fb6d62663cec1069eef9db56817660510e2417b51c616", + "Name": "matter_g2_add_36", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e370000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d05712", + "Expected": "000000000000000000000000000000000038f9df6c14f84b8ef8045010c8973e5c2f8d2e37268f6a674298de7b15cae82361ebbfaa00ea1cb2653c5d00886b45000000000000000000000000000000001376f7e2d5621aa9d6f7ce45ed11de7e0e1095ebeea976f78eb83189c6852ee199840c14059c233bc3d40efbeeb5eb36000000000000000000000000000000000c7b0e53adf4f0fc5172f903e3fc479539348241edc3e277f30ae6b4fc419aadcfb73a8f8a09a1ae1dd885a6250de0040000000000000000000000000000000007a00b57ecc8b056436ecacd7e0fd346b906b15042e9a700f54f8c3b1d251c566e0c55bd34f7a9e30f1566b7f2ab16dd", + "Name": "matter_g2_add_37", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4", + "Expected": "0000000000000000000000000000000012662e19e41bfacc0c792f5183596bc7f1986f9bea72c626e187d72111b6ef3f36f5afeeb640cfda99b7044c0d0b846900000000000000000000000000000000050ba08e1b9fe95dc67e6ee1ce60664b291c80fdb59729cdea75dfd18f22fb88f837b439fd119c46c996787d3008194b0000000000000000000000000000000004ea0f488fece967675abdd3c42f8fec25b547cfc45d42fba14bbc55ad7e1a75296a679113d0671cef0aec0c2165f4a0000000000000000000000000000000000f617f51800b09150a7560505079c785ab45cea4705992fc0325edaf4ceb30e1f0bec35a31898db5f810685e55634076", + "Name": "matter_g2_add_38", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb300000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc", + "Expected": "0000000000000000000000000000000019c774e968049bde2188e844c3413203bfe2c4355edc8cbc2cf6f977c34c0a42a206194e6eecba3c97b24558048f3aa700000000000000000000000000000000081ccf6f111575a946341759b9faa13f3608998fbf4ea3b547804737e30fc7e33495caaf2aa328b19bd48315c5c7f9e2000000000000000000000000000000000a4098536041cfb808176c7cd8e980eda613a2b390e8d63d607caaac26db02fccad6d87412b90cb4b3e186bf9ccd31be000000000000000000000000000000000d3c784c6587b9f786c06099a62aa639f40535b512ac2440912f04dfcd1cb5851b7378f381fcdf02d4e58312eb7e442f", + "Name": "matter_g2_add_39", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05500000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6", + "Expected": "0000000000000000000000000000000016fc7c743c5ba747640a6494fb3c30caad5a1e9719a1994d0ca73bd1645fec118a2887acc8876d105102241c10274cd300000000000000000000000000000000058a42a0095a7388fba7ce71dbef4ecfd2018c3fcdde14afd2be26588de4689d8de757e1e3ff22645fb8c17aa60265850000000000000000000000000000000010bb622f649e346834b95e82f93ae83c71c0a65df7842c4ba88df7f6eccb0217ca9377167a6d14777e0474c24821f8d70000000000000000000000000000000010c180c685ea3d0146eb82c007fec3efd129880f18f838f1cd2f80181f5a4884d6b5cc8247430fb0c1701a57f9d1d485", + "Name": "matter_g2_add_40", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d03", + "Expected": "0000000000000000000000000000000019419b635c3742cecffee02ee7e2b1f18ee9ff15e647ca0abc4398ddc421ae7e0444e3c1ec377def9e832d8e64fd40e2000000000000000000000000000000000d9b4abfdaf3b4c7bf00fa07579befa10a3418d8fa0f3a9c31e59ae48b0de50fc8e6d583aaa4d0fe6048bdd1a9c60eb60000000000000000000000000000000003c96d57034ec97c4abef1c2c81f4d4b0f4b6eb1e9dc5464bcab28572555b9b874df80325941501c3766fd7e06bfe7360000000000000000000000000000000002dbb3d72385b562ddcb9a80400ab3770f00d22b880cce2fce1641042b9da669b22b2fbc97617648c25ab644e661e2fe", + "Name": "matter_g2_add_41", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbc00000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d", + "Expected": "000000000000000000000000000000000d32b00154a5fe75c576c098419744ac36b911ee800f94bd598ff9b6adcaa39c836bc158c5d6af72c9e715a242d0fe710000000000000000000000000000000006e057c13885d6c05f5d92061fdc4d532f10d31d472c371e71367fef7c5fdd3741e665321d1119b895660fba3770431b000000000000000000000000000000000bfe695c3364e15479741e974f838649e789a76d073e552aaa60981fbc6d185eb7b297fd59e51535965214a02f5cd67e0000000000000000000000000000000014f0a27412248e3163e5f82fed02a25d953b336b0201692f08a3e8e9a9d223b736c70c1a39826a0888fb02a314e223fd", + "Name": "matter_g2_add_42", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6ea0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47", + "Expected": "000000000000000000000000000000001566022247ce012b7de92c8495876b4de91c36448f4f7e00f6e154185d38a735e701dda989ae9e37d332a5e60af5d06b00000000000000000000000000000000065aa42560df7990df2098827a55ceaabf3ec592c53d2f20e5dddc1481ee64381accbc8e58601428d33589b3af78a4b70000000000000000000000000000000002d9b0cf8bfd1adf76bca80ca351a4340f02434090518807e07ed76440497042f13a0cd7a9c30086872d6f145808fb290000000000000000000000000000000015daaa131431e3e78a6221091640811fcf88c835ac975a041a7ab50bc1d06b80e6a3c9ae77d2390fd14cc9bb009b47cc", + "Name": "matter_g2_add_43", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710be000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf", + "Expected": "000000000000000000000000000000001290bff629c93d992ad2cc709317c48980b0e56a32fe239258c7aec75e4523e0bc0b81319e100d10568a44847869a8d000000000000000000000000000000000055d9098e08eabdf2b883df35efebec9f6afb16d651ebaca1067e2129146268664ec51c8a4f28f13a250f3e9883053780000000000000000000000000000000002424dab6f0d18ea8bdded2a72bcf87c13307d27d53e8ec35e91eeab97fcf3398135fd436c530c609fd47a3508472bad000000000000000000000000000000000b25d0db1e28b98d4f9d3c77c0b71489c51186105d93be7fc2cf8c72b8abd8959340114635e705e698b0f257855ea4bc", + "Name": "matter_g2_add_44", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be100000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2", + "Expected": "000000000000000000000000000000000cb2998b4e634bc83b5585b0683b7b561f260eefb826719bdc3c95e8ae51f8f7b442d75d69e0f9228dacde2ce80ef4e60000000000000000000000000000000014d30d1c02122143868ea01b454a4f33432d875f8ba66e6bb1e02fc161bb5f9298e673339a9183a15759f8b94b519cad000000000000000000000000000000001068bf3c768e8c9e9058805050394ea820b5f60bea6d271f8e1fb665d3b7931ab0cc03dff4cbd24577b2c254a956e8200000000000000000000000000000000008b7f4148bd1f4926d2a84497b60a48701057ea08855bb9a2f838d2464e66360a59d058d9072f1416023cc72045af558", + "Name": "matter_g2_add_45", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da900000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb", + "Expected": "000000000000000000000000000000000a7843a1d67360b8a6976aeda2e4e98f1ea229a4d84b947dcf5ed8215173d5cf783920a7714f5b048778df30f01a0bed00000000000000000000000000000000035663ceafda9e5bfe934cff725b36b258f12afe749f907a560a06da4abf8380853f8de31adf14d62cdb310d8740e29b000000000000000000000000000000000f210d576aa5d4cdf5aefd8e55be099c422debc217ddf0151b8801f7d16456c97d1e134b40e6d71d296ee2518e50af9d000000000000000000000000000000000219efb35c68540c6bb0ef224e68dae6f7d48425c2908440072f5f63eec3c8e750b559c73e33464d0b5cdabb50fc4d3d", + "Name": "matter_g2_add_46", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee", + "Expected": "000000000000000000000000000000000ce704e650605f747cbc0bc76e82de8569ba7b3d897eac2bf5f79aba17ef4c989731e959c0bc0b7988000a9b0aef39430000000000000000000000000000000003cd3f3d978d6c85d98812ea0e3d21149bf4151ad1bef966ced124ad62dc7cde55f16e8d08bb1ad54d3a23bb73795d8f0000000000000000000000000000000019d37a20fcf6244c2898b271535e3b8f279eaac5d8fb1ba142096da383488eba28a21d038d7a9d3f9e8a008d6d3ee1d20000000000000000000000000000000001ba9c1720a4ef07ec752efa1ddb629505b3586af415c916fb0ed2953cd8943d9343268f438db860f0bced3e690a66b0", + "Name": "matter_g2_add_47", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c70000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb9", + "Expected": "00000000000000000000000000000000160d8b4bef36fc3d09af09dcc8357067c22e421f3811deea66faec42a2f00fa4aceca8725cf99062613126a9fd7bf7210000000000000000000000000000000004e8691a42c8f3ce0e7c0470446689e9d2b3cf57d55fad7387d624857f977cb9c6864c87bb4b6a2c17538478ac5fb5960000000000000000000000000000000015e20f6baef033efbd38081d5a10eeb3c67d89ebe5cd652110b778313c9e86cffb45231616d5b67e9ec8b7be15980aa9000000000000000000000000000000000af75dc221050256015fecc2bd8113b42afc9c624e5d28d7ff8312af499e34a603d66a4304f263729b440b6266538316", + "Name": "matter_g2_add_48", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c6", + "Expected": "0000000000000000000000000000000013edd8f016f6af49e9bc461ca14c438a32eaa3d1270a5acec99a666aba3f0a7e7eccea81720971cf4432bfa94cd18392000000000000000000000000000000000dbea5617e44c82da828844a5a4a1426d43422fd0158204a99f53cf9821f82f0bb0130a2123297a6941f695e172d9c5e0000000000000000000000000000000005f65a445e9f2d57dff2b210209f9faeb1c8b446454de4724d990aab20bd68362dd7ceb5b95de361c129855abba83f7e000000000000000000000000000000001219ecae79d62d3039e642369353993b1ece049331f06be256f06b01a1c3b0c617221c8d8f0bf4b6a0abe1191a3ee8e2", + "Name": "matter_g2_add_49", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307", + "Expected": "00000000000000000000000000000000158da32df45fe3e9102010bfd7faf3fde936bb8e52f68262ef479ee825a0d7169ff753aa042883a5403103a9bdafd2be000000000000000000000000000000001800a5776a47f52d2af08144364a6cd7442a0e2fc214a2d8d285a29bb7bd3a0293e89f0a1856223a527100d0abf12899000000000000000000000000000000000a6079d18ff3367c47fa61a57a967b782f3529bee93f452ecebd4f5c404b3e1769c100da9b8aee4258b5191ae1dad9a90000000000000000000000000000000011d3188a927e8f13aecf7f8637be6ddbbce309393a94fef77923c286244f8531d3e137e031d8c1af829891425afd53a3", + "Name": "matter_g2_add_50", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52d000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc26", + "Expected": "0000000000000000000000000000000019294d87be784f0f8fa29de80d45a697bcb694b32f3f6d7641d4b08d8a7ebdad0ef78ba5ccafd6b7f240e1cbde019c51000000000000000000000000000000000645f7851644e1e7e255d0b3dca769b987ec3ff2c9eda42cab65dc39be2f9858c31f307d59f6a2caf9dd932d873d2b08000000000000000000000000000000000e8e93f39ce05a11d40f3b52262980c79ecc52939dd02b94df3e5034a57061d040b0c8894189f4626f37bee485712dd00000000000000000000000000000000001e0b7c9c3d7456b2c0ad842083e9ce2a00da91cb1aaba371ff4b9370f0f2c08f4b53b8e5a3030c99b2957cbe5f9e967", + "Name": "matter_g2_add_51", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d761800000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb34150", + "Expected": "00000000000000000000000000000000040f355021ba50c9a3b2b4267668ac8d76dd88991be984ab5bab9c96faed6dcc6e8eac78ed29cd6f7d687dd55cc5d5b70000000000000000000000000000000017853cf0a39332e3c7d75b08b2940d693ac7cfdac46719787c22b55a2ab1036d6f95b68075f1c585942843aa486f17bf0000000000000000000000000000000008696feb333417a7262e8976d1546b6d0a9d5970095485b18efcdee8993b16f42e6dbfdd08d30c45fe4af6a5e203de07000000000000000000000000000000000ec26926720243124ca505c0e04923f3cf5eeca2abfdaf4388960b87c6c1713fc54cdd1c825e2ea359cc67b3bebfa2f9", + "Name": "matter_g2_add_52", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e69000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b1", + "Expected": "000000000000000000000000000000000f3dd56c416db1c06fd27e18fb852c9e1662fed42005e253230a7a8f7c3e0b8ce637666e1d20952c219cd2068d6865f1000000000000000000000000000000000aff045afcbefcdcb5255805a86e8af3de881e5482188c487d15ad1b799cf551c1d48c7665028b05ceb2e82e15ea4ae5000000000000000000000000000000000e0e6ed04926aed1f8c6a4e13227bf2a99d9d6d349a9c86214373be693db702a0011b4423defdb7d842bcb6f722c70b100000000000000000000000000000000148b1af285c65b12eef498f1c9e57a673e7a3803088c56e32aaae13dad3977dda8d3e27809094f8d8ed607239610a1a6", + "Name": "matter_g2_add_53", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df10000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e", + "Expected": "000000000000000000000000000000001220b3da7e7d03823458bcdcee82db56957e5aec335e9b543ebb0f3cf4fe3cf6ecacb6198c886b9abbdaa42f528b4963000000000000000000000000000000000138233b166547e9e9ee9d11048e2d2579b2b111af5cab372d36159c4c45e28d836d733a1265e8833da64f461c0a32cd00000000000000000000000000000000005f860a0c72034f1a928501d9f549e5c2a9dc72670272fbf35a0b301025c0fc751d55ef6fc2c5bf7ff42df7693f3dca0000000000000000000000000000000012c73105adf97bc0dfec1f56153c57c6fdb9d68341f4397b72f5b6c667873ff7ed5cc841451b391e33290cec256395c7", + "Name": "matter_g2_add_54", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0f0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e6", + "Expected": "00000000000000000000000000000000014933a0923416428b5fe5be7120bf399ab62ca091b07d03da3fd2ff080b9c411c3cda3bfef40c8450ae31c412dc5feb000000000000000000000000000000000214229a73780d4f260364649e9eb2ed751ad3f687a832a3738ca2cc81a3acf12757651e88c4bcd79239bc0b0c40e5a6000000000000000000000000000000000548f20fa375e578084e085ee71df5f8ddaec1db03a1415938d9521b5d9c914b5295835fc07263cdbf49d7802551156a00000000000000000000000000000000063ecd9efe55229a76fc848728e940183c23bf47363cb34c5a49837e6df8a5f0dc29d7108cd10ea08e82ccf017d246d1", + "Name": "matter_g2_add_55", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a330000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c32", + "Expected": "0000000000000000000000000000000008a71a08d2c4e2ba3d8774dcb42d3e96c7f72d36fb3b880a4049b078d8257a7a9a51b0b34c093568baf4aa6de70e709d000000000000000000000000000000000daf83b5ad4b91b557982fc4b9b7dbed2998aa39fc4658ba671f5f27b3888dfec7602949cf626c9e6ef21171acb185600000000000000000000000000000000013a7ffca291d9ba8790ca0462c54c147aa22e03a2413b756f27583155932aee65060924e46db321b3fd6f22ff7f54041000000000000000000000000000000000289d7de10285285279aee024e52476fa6fca85550f7af183a161e395d72e1339b629c64127f96bc85858d80e73dcbe1", + "Name": "matter_g2_add_56", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a6000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95", + "Expected": "000000000000000000000000000000000a4ed8d613cfe4f5dbda1d0c6812d0edee45ffc2667323c3828f8ce4ab55c119e92a82f2c3d06afe3adaa4aaccc18f8d000000000000000000000000000000000fe10c5e185f3f8ba81c93754132d76e05eb3543d8aaa8a2d0c98833ce5fa9e2b84420d6e3412e005cf89d11f5400a510000000000000000000000000000000004ac5f8cc614e3833b3b6dd9eee9ac29501002ba9054554314a4c516bfc8cec870995e811f7892811346574f3c58b2ec000000000000000000000000000000000a6bed54d8ed4ccb09211ae7773c604edc6ce51a05c9acc94e8167026906d387af681fb33a40e72e85cb076e072db7d9", + "Name": "matter_g2_add_57", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f254000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150", + "Expected": "0000000000000000000000000000000004d145ad2575313a922667b897052063139eef8c61dd375eb055c4a5c52cfbed35391a85df915e1eea50d000b9b6bb5700000000000000000000000000000000071cc73c16a234e99faba9b04fafaca1a943f2bdbb68dcae0a1742acfca1f90c5f69464aba42be6c18be31f79ce30791000000000000000000000000000000000bf725a2f4d7d33c66fefeefce13fb5649a68a93fb7086c943a7bd5663b5788a5ceaad7fd2a219ade832dfb3c0022a5a000000000000000000000000000000000fef4a2610610afef43da2161b86b25a8f6e30ed90053d57f5ee0a10effcdd2af769d32ef6843804b2b6590f95eccb4c", + "Name": "matter_g2_add_58", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c5600000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b", + "Expected": "00000000000000000000000000000000151ec7c35a67b878420e198ee7bf359d0668ab61ba1a0bc2e5e57b1b7b18838a015464f9910b659fb7d1e10af2801d86000000000000000000000000000000000511536f34067fe931c6e829e22443eb838f0c938eeef6f839eb322d72e2011dd1c33c504dd044e3cd721065d7075b520000000000000000000000000000000010c486f846242024f9bf40d805c8e33ecf1b44cfaa04455d5584db7ebc32c0d29e8742c61886d4ebae93f22c518ea87300000000000000000000000000000000072e184c836a853fd1153eabb1b645bd35ef72eefde4a52db169acdf2d8d68499398599cb4002994c6f4936de1da75ef", + "Name": "matter_g2_add_59", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87310000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421", + "Expected": "000000000000000000000000000000000642f215b772d17a3aa45ee3aee607321c02b4f7a7df3884259a25ce78c73e9536d46333fa388e506fdc79c708bfd9de00000000000000000000000000000000145864ce36521fdb641761be541a27bbd3f4797b923a870148bef1d5b4b0d463c0a7c8ef07954dad464510d836105e05000000000000000000000000000000000ca038e667fe68111b583dfaa95f88d3b9e46c0798abccd1476071435067e6c0e2fa81d25db6e1175e60efa1705538b9000000000000000000000000000000000cf1cb1b155e4ea47077c42a1a99c3f11f8b27516a808b5e73498ee12363652bb46eab7e55de93513cc2d6272f26a537", + "Name": "matter_g2_add_60", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab71960000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d400629", + "Expected": "00000000000000000000000000000000128c909854a20ccf9e8e396b617b36f233909a5f6c3524c93cc659d22afe0e7058a438a5ee4345bed914288c64802e29000000000000000000000000000000000239fc43718cd27855ee5450cc9be5be5d9bca8188c22601242a1bb4269ca0fe62ad5e12b2c65558cd3dfc89ea31205f000000000000000000000000000000000a0aec9527febbd35bf041a901b0b35e5e0d48a2d6d733bb557d0767798369a7ccf2f1c278710eb764f721821f9aeea300000000000000000000000000000000194931bad52daa16a648ccf1ba9a4768e5e2900fee4f9bf46ae07d1aa605aabbfe96684f5d2233c0b254cb4ad5517775", + "Name": "matter_g2_add_61", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f20000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d", + "Expected": "00000000000000000000000000000000189ee5ac642bfd0b612058f96e63acb1feb6b4dce125bf0ea1e56e846775af1a8b0864d4ece6bd96c3b5dbb04e2f6c33000000000000000000000000000000000073d57ab79314e38267ee8015de3156f2c1d5dfcb6655a150b9ab4a3bc9eeddf7b37b3681c49611e02abb012770b3f5000000000000000000000000000000000cfa1363275c7bc5bbb9bb7c03e7bb7f6d6d365e39fccbe62cfe0bb93280527c9ea99079fdf9871abed035b62079856b0000000000000000000000000000000010048e4e96f26710d254110650de36460be2a8302badfc2da8b26147da498e4620e79b4329033fc3f3a9c99b1e12aad4", + "Name": "matter_g2_add_62", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e", + "Expected": "0000000000000000000000000000000005889133be5f447013d779f2b9b0033667c5af87e1c8a16d239ca3ed238920004d87e00119ded46658026c26988ee63a000000000000000000000000000000000d4ed8fd88f7e1394f2b5a65588bf1c461a292acafdb77703c2790ef249f2de695524293c826252c94967a3ea4a3a28500000000000000000000000000000000001b5ff0aa278c7e87a89d4748aef13b516c49b7dc9f7cd5e0448dc6fd860a7a8af7183a198eebe6c7dd549fef806db00000000000000000000000000000000003c9e40ed44427cc3cf886ca2db341ae31f015c542b857f6702d25cb5036e3e6abeb8d4bf9a0e203281ab85ad89ce0da", + "Name": "matter_g2_add_63", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f", + "Expected": "00000000000000000000000000000000093b692a68536b16913ef38c3bba7b19ba94a6af1c36a2e54b8ac1754a29c29882107cde142deb95365af00f2d1f537e000000000000000000000000000000001035e70852f38f860a1a04f33081e84f3ed17d83ad894a6800e7b8b9259067b755fe7e08d4c1b297c6d53064ab8209590000000000000000000000000000000013d38db0d8575131865bd7acb6cbe994812bdd8bc7f51b810bc382a6eb379d442c47be20a2c8e751fb08ccce8fea68690000000000000000000000000000000000bd114951193e3bd58cd0025e0b0c807ea073b1c1f7bb04a2a00771b6442e70ea20e1124572ef5b74d2bd87c93c82f5", + "Name": "matter_g2_add_64", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d", + "Expected": "0000000000000000000000000000000006db1eef1f614613ada8383e63d631484015224902ca38f58ee384a70af0a0575b0e7063675d2dd997ed8a140e2598470000000000000000000000000000000010d7b833f050f18ff4e3a8d0df227a9494dad9cbde88f68802b23e87387622a5333dfb7bcdcbfe2d4d137cb532ef4a150000000000000000000000000000000000c9c40ba972ee0be2823625a23345fe352d701cc8bf9a153d5a55c205ef1b7e5544d0a7f65aaa24bde8d77cb4c31ab3000000000000000000000000000000000402f170c4c3ebb9b1e7d64765b66ba9b8d45b2ea9fe9517626f38e00a11d180e1f8872bf80f6322bdf3a8dd90732ae9", + "Name": "matter_g2_add_65", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad300000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0", + "Expected": "0000000000000000000000000000000002dccab673b26be02d2c645c82a2c73290f0eb053e07d4f81d4d315d9483e57c58b65cfabeb0172934b9fbb52ad519210000000000000000000000000000000011c34a27c850fe319fe89399e7680064caf6dcbad171c3a23c45b9883ee06ccc3482b2b81e5777759ff81b16bcc1b0f500000000000000000000000000000000119adca3e2b052c045124f021fceb03c979e6eec0a270c7f4ab13674e461839a4d3a10fd48da4e9ae750a238a2649ace000000000000000000000000000000000fb5210677e1096cb5448bcda16646d6dd29ff8a0765c5aa51d83fc952a5ab8063aa96e97f33abf701cb8688c989c363", + "Name": "matter_g2_add_66", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0800000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec27508", + "Expected": "00000000000000000000000000000000056489b2248ba672501069ab6742016cc8ab2af50a119239bbd3c0a4b9b56e014402b78bf62b2b37bf4645c3bd3d95b800000000000000000000000000000000046956432001feaba6d230da27a72e8db5c8eb3d52f00616f87b55c951217095f337a302562cda789e5714c4391ac27000000000000000000000000000000000172c2a583c9563fe02d43b2b767c4ee4e3990fbabe4ac536d64cfcf059f0e38672876289bc86915b6344eb398fbc4ddb0000000000000000000000000000000008915b0edade80caee9b386e4a560ff4b9dce33946ee992649466315786e139e3ce241ebbdfa7ee28fad7e6214e65666", + "Name": "matter_g2_add_67", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e1090000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f", + "Expected": "0000000000000000000000000000000005b81843ef3f98c6a6686f1fbd26f77248497ec3d41aff4be5968d13ba86f86309b0ec4792d74220ad8ef147bdee9aa90000000000000000000000000000000019825376b243f3e374b6e9e7e51e0c969bc72b39cde1dfa09187a3c7c5c2c752ee16fa5a4c8fcf94464287419b3a3845000000000000000000000000000000001308cc0c77219034a9fc3018f1d668a41e6959476aaaa5461ec73d7155c6a68fb08e1fdf8140e18270cd338c266a83f4000000000000000000000000000000000fee2a6e245e3bb570c3b605f7ad805bcd68e9a1f2bb2282f92e2a2e83b69e275b21b923f33a65defa8c4224934aa588", + "Name": "matter_g2_add_68", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b", + "Expected": "00000000000000000000000000000000166414455bcd0e8e40397f4cafa9628d1a092beaef62d35211cf49779ba98df5c1d692f650c1fcf0893a9d4ae1926b1c0000000000000000000000000000000003dd898d0725ee899b913042da8566a1379aeb4dd5f0222ac784205b4e74f32858ae490f981801b166a01fb96266dbeb0000000000000000000000000000000019f0fe4f12b113b337361b977aff7cc7dce50bf37c2609b9f311ce340d30225de178999b73345ef49625518e52aa4d7800000000000000000000000000000000090bc07c6270901d706a8d28d512b07fd0e03013d94d4e43eafbee59677998bfb7c2a58aa93571fb49c35518b6331bca", + "Name": "matter_g2_add_69", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b22000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d", + "Expected": "0000000000000000000000000000000019ce0f31d9ebaed0ea1d12d4e232bd3ad48373fa465af44f1c8015102b624d2f8330d1323fb2fec524e83de0f6699ad7000000000000000000000000000000000915d65fef96562ea3b76f3152aa1b8e445ef50fa66dc487ad0c04cfd7a33b5ee48aed919eb81fe83b1f4dca59b4990d000000000000000000000000000000000e4731ec887261f29475523f7dfc5d21cbbc1b883439701a33cd58bd24f5d447267707c2b60ea38b04510be7dd10d72b00000000000000000000000000000000146a679d7a81aac5952645b2635f24b96393529ab9571ecc1078c4c20a77e59acc4591b9f45df00428250c5e31b1a8e9", + "Name": "matter_g2_add_70", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f", + "Expected": "0000000000000000000000000000000016790155e57f7103d9e325a1f3a64c0b8a1875365eaa0c01c515538b64bd8265e8392e755a2f7314c37ec09026f13d290000000000000000000000000000000007bfe690fc4ab166b29de35e341e8faec4bc3c2d4ea2d42c9f4166c0d748b92b743ba646c86ff9e570612c75bcd522a9000000000000000000000000000000000c11b9ccf990162b772099fdb4266716b11dcf46c5abd12d03caf222c571e2a9e28cfb47e11db05162967ad4b430930e0000000000000000000000000000000000bafe02785607bae144d9ef5391fef02b9f2fd5dcd436e2506bd40866d8726eb83c223e09c00f3b8895181c6710912f", + "Name": "matter_g2_add_71", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a00000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd", + "Expected": "000000000000000000000000000000000965966a8a463de1f3bc49d9873668e87f54d95612231458dc8b885681cee8e2835482b4bfc476153c41b206f427cbb400000000000000000000000000000000183639fa14dd74c33e8696496a3ee269160f88e5daca4fdc468724d9b6af8e7d0706867cdb1bcc608029b89b94c531a800000000000000000000000000000000026257fc32efaf241c7712b0a7e9f881763d8fa0711a452d9b71ea25e973bffd88433cba768f1e5b3ea15bdae9cb9428000000000000000000000000000000001527afbb6594dc0f472673606fb8f4797fc855bde4d308ac1acdaa26f19a70f80f2d2bbf3498b53b887b79fd6273231d", + "Name": "matter_g2_add_72", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db100000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3", + "Expected": "000000000000000000000000000000000018123e82a5572e6b6c62d5db07448838df9db7f7d15dac1adba1fd924892c8bb3c417354e838f706564a9ac282c2ac0000000000000000000000000000000016613fc38997d39b2761aed3485de4d7c273e8392e434185605e968ed942b9d4712cd0d538ed5ed1317870d0cafcae27000000000000000000000000000000000354365566b6e43f8b7f4b94a6343146f35ba3abf61a204e9c976b1ad1a90d4d493494c957def69ff270371c1c8d953100000000000000000000000000000000066adbadf1b69dd16cf19349c82e362be4a3768551599b81a4853ca524a24326e6c9dcc38b5a60ed6fdeb3cc4e7973bc", + "Name": "matter_g2_add_73", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d", + "Expected": "0000000000000000000000000000000018ba8af47c5cfa552374cb1b25ada1ac785381f2da0501f86c9e7b11cd4417e64095a5c4bdc2480ee10d215ae2296063000000000000000000000000000000000a2e09eff98280f6a9863d8b8faf8871b44650496eac1aaf90fc2b256f88e937101407d722c95fa76846776d4e6bf0dd0000000000000000000000000000000003824f5bf25fa4aec5a9e044703e5564122bec11da155c01ba8ab8344265516c1063983235863d826f68bac455327c65000000000000000000000000000000000ea72f8c6768736800b141b477610e37477d926acaffaa1951a5bfebb042c94c065e984a8812430153d529dbf07ce2bc", + "Name": "matter_g2_add_74", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296fe00000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6", + "Expected": "0000000000000000000000000000000009f1339cff0b58b00a871add058929ffebdc58cd1bd8a9c2c965c63e1843945b28138008cca8bf7b7cc9afb69a11767100000000000000000000000000000000011f65b337710a4043e1fa58bb41d80d505e2aee434b6978129c80fa1b124db89e61617e89bc0e596507566f4a484e9f0000000000000000000000000000000017560f768496ed583b3522c4a013f8b96073197e5b53e9041db6dc935a266111e21d8c54fa33b7bda944a573f6e1f07d000000000000000000000000000000000168a0742af91f42058e6501e122b6fc50dc966c2f5981372704694544aaa68fba2b6483752fa2464526d5072f84d8dd", + "Name": "matter_g2_add_75", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb519000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be", + "Expected": "0000000000000000000000000000000005daf8338637bddeba63c788d78faa622e014efb84d3ac1d655d15af06317fe31d1782b2990354bd507632844cc87f2700000000000000000000000000000000185550250e2d9eec798e8b8c483dc37e2a917b304a6036e8ee518a0738d6bf946d99f6b7ee352b1a259aa894d53a8e1300000000000000000000000000000000105a4865d66ed4bc4f51dc52ffcf284615593d573b6beac490c3ee8e08ab83a529c8dd062d762d1d70b9b3290b6e8bd50000000000000000000000000000000014f598e5d0e40090f29aec1ecaccbebbf2a2d6889bbb9439798924db41b70c0cacdcf1e8ff6906f61943e9a8a1ae4fb5", + "Name": "matter_g2_add_76", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c", + "Expected": "0000000000000000000000000000000006b63929ce97554659ae731d60d11abe858383e39a67007877f68233cba8179777c0dfe511fc730448da3f1c4347f85c0000000000000000000000000000000016d4df414c287b0871c69f9745a9ae68ea3a1ff41ecd17d87623338bb8750bf12be52caa81537bacee06cebb86f894890000000000000000000000000000000007ad72c98e2428b90bead3616f1b31b26e978cd3f9b6b759ad53056098c18932c48ba78d3da112d7a738d7a9ba21d84e0000000000000000000000000000000010dfcfc53d0458296686fd7e0555593e0378d2cb176d456abebfd8322012bc9b408bb180d4237679985457e689131705", + "Name": "matter_g2_add_77", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94600000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3", + "Expected": "0000000000000000000000000000000009b166f124b5b85875834b5b0c088ab79a2dcf262240b284f57722e78b6eb56a192cd32544c1bb93ef492fe6d7a6216b00000000000000000000000000000000189b9792982b51b13cc3fc1691e0569b6c8d998168d3a3376e63ca60de4b30a84ce8d04fb265bdcf73f158d8e316bdda0000000000000000000000000000000005b99948b635750040b5b59568f0e8bacbfd512db2ae52c5032cd23eac18ad58d83b8f78cd26ae979ce2abeae8e1f3c3000000000000000000000000000000000d0b6561a49c358101b30f714563bfefc72e0febea857b1ce78cfeb9508b0108c2089c9b35cd694bc8c0ea8afc8d047e", + "Name": "matter_g2_add_78", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a88", + "Expected": "000000000000000000000000000000000bbb59d3e6b0b4d86ffc89bbfcf543a5b8ff922f1999a1e06c501a734b19dabd54632132c865c53e5287f69f06942a58000000000000000000000000000000000a3bb94431530879a7fb46b317d4f3d65b5a790739b396c78521a20e1cfad9c44248c9576be11c70970a49a1914ceffd00000000000000000000000000000000198df068ac5d3cfb9bd6896ab64495f4b9933a72872679ac3a46764478f043e9fddf17a7ef85fb72a8dc1a722804198400000000000000000000000000000000155c1a9db0c90634a6d214e996b13252bd4db3a4ab84ca7456ac3e7899e6fa096904a90f1150026307a1cac8de00c6df", + "Name": "matter_g2_add_79", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d70000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff148", + "Expected": "0000000000000000000000000000000010684ea0303f0e76b60eb96c470e1f0466f1f2b073bbedc1a0c0df1d2f6c66d77cb90ef9bfa4fef6a6a9eff8f5c66f9b0000000000000000000000000000000010e7ced79bbf01ae9f65d26894c73a905514296f19561ab4d00c0cde31737d01e7b4e8b8e6050054a7a17e8acb74d49d00000000000000000000000000000000174f771a98e262825ff2db7571f5f5475007d2f73a2c265f24e2929671bd173596b8b163abd46b868a644dd464dcc7cc0000000000000000000000000000000001cbffc9bb3195672ea2d998b169f853d3d4b4e147379329b1bbe69ce76d08ad78f87fdd876af227a050c31884fda084", + "Name": "matter_g2_add_80", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d527500000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f", + "Expected": "000000000000000000000000000000000fa306f630d06c801e0203525c75fd6065bd12bcb3c4d45c7e02b597f85a53fae1e65a969feedca75068433547e4632d0000000000000000000000000000000004b1bdbc29f19f6484ea4648c70eaa47cf5bb07bbc255bb72dcf68a7b661de433dafb682d51321369cd3372288b2b9c400000000000000000000000000000000136671654b24e1ff2e8223ba747ded51f5c826b6e2c0f02e2865fc35d15045f41952835800406f60f966d1f241914726000000000000000000000000000000001007b5e8ed7f0d25091dd959d89732e9df02561a829ce013f5ad1adb8d6d828a8ce87b52d39fda1b5dc2b581ca420e22", + "Name": "matter_g2_add_81", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae452300000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf", + "Expected": "000000000000000000000000000000000fb74d9ad4de11df81c48d10b9a14fde8353ac47dc902b4420be4c086332be480552e26fc42b7c0f30e34f740bf9a4e6000000000000000000000000000000000612a7e23bbb525f91084b122dd4cfce4074c9e6eedaa7cddb58a14e0b1eccc2f08296baea3eb3e003e576fab7c557ea0000000000000000000000000000000016dea145df47a2c5262893c273c6158ee14d44c3740981c161624a6e9ebb982a52c1eab6160c3849f2bf3821d953f4c3000000000000000000000000000000000e920661772b8b737f1a663badead0e89aec4cbb86e6dece5d4db8a673e75b844bfe81662dff671658cb8386c16a7f3c", + "Name": "matter_g2_add_82", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627c0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77", + "Expected": "0000000000000000000000000000000015930559743b21acaf390b557fb960d3021f3cde80630d8867a063d445f860c8a01037057de1929be16d879416b12a6c000000000000000000000000000000000c6074c54c83f717700f61c5b6bfc641502121b59b196a1f8c5f2945e5db1bca0d7a94fdae96bfeeb6204c8c3f4d048a000000000000000000000000000000000b3a78454479c0990e4c65e4f831606c7eeeaef0faa86596350c9e43e84ae959a0f32c8d03d1f631d9b2ecd046efcda6000000000000000000000000000000000aff797d7572f20b06bac75bcf8cef879df11599ba7f8b86eaa28692d1239cff22841b66e28662309e81a6a599e79ddb", + "Name": "matter_g2_add_83", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ad0000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee41", + "Expected": "000000000000000000000000000000000351bad2f1fd9adc84280515c2d9e538b69dd63ac93514987ecace75d6bc4585199b742eae0d357d587924333721a1d90000000000000000000000000000000003e495b544aaf19a6415d5558170b8686968dc922367c5c8c212fa1f2785535fe0e71498b98b9a39c8b1f2384956170a000000000000000000000000000000000c7040f34872eea5f98ddc78737dd01fdafe75081cf66ad5c7c900674fa90257105b4f4fc59103dd5b92727a072ae462000000000000000000000000000000001312bdd27ef038d4a89b12c86281975bb34b435d42642fe0732709baf55e9a0ecc0ede8a4775a33e880aa2e1fa7b7ed3", + "Name": "matter_g2_add_84", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa800000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f", + "Expected": "000000000000000000000000000000000d521781f60198341d116fa5cd9e2b5c2fe51f91f6c8318f351df007c96086f6c3baa5cd2b9b4f442305695dd9b01ac70000000000000000000000000000000013454fc15b1d182bc98d75947547b3bbebef6d5e2d38ed7c67d76eee8da89ea2be19280af4760282fa7576412d5f2107000000000000000000000000000000000d866015c84de74c24dde252542d0d3823f435203c71cda140af235d88f3f4b736e9d75ec32c09ab73bf74083e76866e00000000000000000000000000000000147dfb5f53a9cc61b6788c911dd8649c09cfffbbba368c1872a31cfe3bd6d6427d7b00163d39f8e0b81fc4c40dc60b87", + "Name": "matter_g2_add_85", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bf000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c", + "Expected": "00000000000000000000000000000000059fffdf2d79b4a297f6912e3035cf0b07db9372f3485150e00d60bbe2e7d86f45b5c2ef062dd92c7e8b1e2be5e9bd140000000000000000000000000000000016acdc57e7231b020268373ddc8b8a7318ead02a8c7181165ab045208409373eaf57ace9a6db1fdedcaa477c7a0ff6f40000000000000000000000000000000012fe630f7de8ef5a129b99faff2de080849bf3b59aae1af042c29b1cc49c8825a4f28c4ccffedc6d568f306416b5bb90000000000000000000000000000000000d86ab3e49ffdc7c2485ecbd00256af83e7f3f064d212ea91245d86ca75e3c7f28b42fa9496a5ccc0514cffc60c9fb83", + "Name": "matter_g2_add_86", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e84000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb1", + "Expected": "0000000000000000000000000000000012ba9a8fcb69d15eff147f663a5d7927b6f3f79330eb9ee625e0100b146597554debfcf97a3afb51387a73554522ed0e000000000000000000000000000000000a63a990d6454d4db6d58642eb3489f79e517fbbcabc06f2eaa00c4b6f9a07aae97991f169d90af3461b7a62db276e00000000000000000000000000000000000a95203a1628a6ae2551df832f7ab94ffcdbf985e4c9744e244214c8e8b8079af05a9321d1e49b7240c2bdeeb7b783280000000000000000000000000000000001ec747203be73526d3f943e0af814dbede34020144bf247eef9a6ac2cfc83ef63f18a73d3baae18bfd8d5e83d0519de", + "Name": "matter_g2_add_87", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbe0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc", + "Expected": "000000000000000000000000000000000eefda9046a950c232c6244a79c33e7135d0896bc57839a4f971030220e3ca8196cd0ad75269f3cb5586a384dcd17f9f00000000000000000000000000000000195ce623693996f5ce9e45b4e285adb969e6771e6b0701fb5c95715523c8cb93aa641583821a3b360ad6f4ea1aedcc9f000000000000000000000000000000001553a4d0f965d26fbaba56294591935bed63c84abfedbb9d5c61f3d43484ea71600935fe3c8b6b137d7a9074d907e86c000000000000000000000000000000001673c42c88e4acf8ca38680694b80458f988403a4bd667468506452303000d13649c4f610b738a94ff88b65053731c08", + "Name": "matter_g2_add_88", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba800000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed", + "Expected": "0000000000000000000000000000000007145ce58cbe48405392edda6022ba8942df055ab582ac402e7c9a0a951cc6a38cd147903f042273e736f30849996cd10000000000000000000000000000000011b457ba464ce818a34a11afc3c0007908091fb528836691e6eccaa9a23ea90cdc746769c4b7ec73efb1f2878413c3b70000000000000000000000000000000019ca519fa6a91cb7e83704daa9b92da9bb70b003f9e9bfe9f323430bfec9b19b01005aa9fcd19d5b1ac59dbdab0c0d84000000000000000000000000000000000ae356f5e5de0d7662bab8d947662bf87d792a3438ed477cf6ed4b27c935b1dd76a5aac446d4dc36db544d4aea40b505", + "Name": "matter_g2_add_89", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591c0000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c5", + "Expected": "00000000000000000000000000000000135c42c10ef97279e3d152b18cbb8dac11ca8c805dd1d80818851424f592e7522589ec7df6748b5c72d0808399e629cc00000000000000000000000000000000083ddf3843434937e05ba9e101096371fd8fb34f226bcd517716200003ab9855f7aea94980c57a6b933494cc57afc562000000000000000000000000000000000be9215d936a49538442189c9a0bd3be07d4b0b1d14aa45afcdebc1fde17d33b66f7dc36da1ea5411549577f5a1967ff00000000000000000000000000000000176a4a4962c4af75a712e5093ec2cd5cb5c0433aa0657809dffbc0bc02b1ce303ac084f39a5721d482d41412d391317c", + "Name": "matter_g2_add_90", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff200000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de", + "Expected": "000000000000000000000000000000000bcd916c5888735aa593466e6ab908a05af528f34a7901fb60feb1f51737c73612436c192dfdecf927019724ab2a9b7900000000000000000000000000000000187d4ccf6c22381d0c40c9d7820ff8efe6298c6dad0caa25402412661737cb482dba2719c3a50ec08cd022230952dfc600000000000000000000000000000000164510d4f2cf1e14e039561f1baf82bea678d0065e378d5bb7443fa782e6ab2a3bf7e4ea125d6415a8277c60f5346468000000000000000000000000000000000281f2e28b73eca4db9966456b75de9ae3830c74ac928fc4c36b4aeaaffd47ee587d948f68056df2826ca2775415a53a", + "Name": "matter_g2_add_91", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5400000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157", + "Expected": "000000000000000000000000000000000cceccfefe04f94e0b67b29b5df8007930665006cb5a59504c3656b8c0bfb52324cdf50fa2722ce15b0ded0efa7fc85f000000000000000000000000000000000cdf34c330c0125f524f0711197639f8aca3e7c435f8c5ea30b78e9622c4bb72a7e584980cb4c3c6ecdd0689daf36b6a0000000000000000000000000000000004b1505d7fb65f6c06ef23aef85b16f3d991218187c5782fb635ba805da463cec9cfdd670c53d680c603adb827a4460a000000000000000000000000000000001104af6bef6482ae64b3b6b39664ec06c39bc18fa91b7b4e5bfcd444c827bab30ef548b28ef5487582d88fbc6d7983cd", + "Name": "matter_g2_add_92", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a70000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc0", + "Expected": "000000000000000000000000000000000e1ef3003fe3181f690224cbc7008856e1251430ce3cff56a1965c89a892604398f5101d1bec7ff1590b0cc3d23b854600000000000000000000000000000000185b4d4b5fd8313c31542bd1bac034046ddc705b41a034a00570181503a6ea4c2d808bba0478900064270fadf3d655920000000000000000000000000000000005bed63ab9898b89f92027c04ba256569e6285c851753e12760129c98899bcbab34b62172906a1ea4cb056d4d0a5717c000000000000000000000000000000000961129a3e212c7412018d7407d7ad16412feba8c138f4f6ba69daa1a25c6b23f3466bfde6f5f0d09ab67248a2abdc68", + "Name": "matter_g2_add_93", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa2000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc01204", + "Expected": "0000000000000000000000000000000001504c47ab0c410b32d5f1fe3d3996dbf1b21c5ef5aa3a2862a9d561b419f818f0b32b8e931c65fffc393ce7beec70ee000000000000000000000000000000000217e9fddd2551a171a13183ae3aba6bc5ce99e8f3587b92a7cffc738b478d8293b8c71989cabf9a55c5f5077249345d0000000000000000000000000000000003874de865d93650a95af4e153fe557c45bfdc4837bd6e209b8f05ad12b8fdee6432675cd92fd739b7e98e56e7ef16b60000000000000000000000000000000011303c0c7ec1f434cdf07c110da5f0bcd85935c3a0ce9fdf5546ca61edbc2d478562dbd9aa45a5f8d96e033feac2fdd6", + "Name": "matter_g2_add_94", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99d000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6", + "Expected": "00000000000000000000000000000000101ed22b16502de0d83303134a97db17ce956faedf47256a9ac86004bcd3ed112a71328a58f98a85977a7f22eb1352c3000000000000000000000000000000000e841a88d10493f301af54c5fe07a31ef90de106a6c87d5631b6967fd017f561a56176a5f3544dbb34b9f94040ebd2770000000000000000000000000000000001bde3c0076f26973651cedd3da97c7eda24451bda856026d1e22d3b65c66a3fcbfbf506b4b664b5fc06fca2d712d8a8000000000000000000000000000000000ce553ee3b7d5389798cdc5af8569aaf477b5b74ca1138454dc61badcf3ecf5e0ee8457e374b5735d0b8408b04fdbcdd", + "Name": "matter_g2_add_95", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d00000000000000000000000000000000030dfbb89bbe5c14a7a55e68edc4fc38eaee9fb539a6b2f941264c7dc295da5712b0af0f2bbcdb74f785dc9ba038b0aa00000000000000000000000000000000132b4e02fda605a69251a4a6289c47536f9735dd90908ed1fb619b3ab808b3a1f1ca3fcc8f4b35c9864ae311c15747f80000000000000000000000000000000005858ece0bb09e55e012450551025ad2a6d93a15d29619433742851a62d987e7f8bfa6c6faed76493a27060ef5f51805000000000000000000000000000000000dd6b393e6d1b8d546e3f5ce69bc1737399e6ababc628f25734030e10d82b5e9370edfb5da15566d80e23d2fbf8aad5f", + "Expected": "00000000000000000000000000000000182f90f5d3ce3f5ff2d91430376144583247def83b3e83524094d57c0f1be98b1c4946964deccc25fc303d6450edfbac000000000000000000000000000000001844806f711735c5ca18ca48e559a9e327b87b91d22a5ef161da7874668130e21a9499728fbc2c88366bdb59f8ced0cf000000000000000000000000000000000815e7cff14b4ceaf26d1cda5c267f432fad294b6baa239b65d886ffb039321f9e24330ae738a35298c6d1ec1ce1c95f000000000000000000000000000000001188a4a2f0920ddeccde1a47a0636aa7c404fd77fb9c828e4fdb5406df80ee6c258c2d4a89dae5e2a2b05210df9100d7", + "Name": "matter_g2_add_96", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e740000000000000000000000000000000017032b16be8656cf23bfe0abc8c9e6aade223fa9bea6fe25f95a025da79cea6adf38536eae3859b25ad1af1756b639cd0000000000000000000000000000000010975ed27cefbb43bafad0fd14c87ada8e84525e1d199fdf1e77caa0b718214b33e547a42a040ee3bfd51621a20d22fd00000000000000000000000000000000133d29aa41f92de37523d281eebfe91103f017e5fb390f6bad9a2a4419fa4702bfa04847edbca1da96eb1ad563a92c8a00000000000000000000000000000000014af850de7e800ebee4be1a33c7e3b30aa94106db7defa148568ca3c8d82edc97ab5769ac40162d3728687cdac201a5", + "Expected": "000000000000000000000000000000000cf42f2ccff2e0cdda7e5f1d7652680650b4afa523c8f9a554ec18b905c837a189fff73982cbccf903ea492ea902b87f000000000000000000000000000000000d38219770f669557cdb623f2476b5f3f7478422b016123bf86a17bf75848548d1a1ce96a292637b8d52481321d80fbe00000000000000000000000000000000170d8722b824e3291b570ba8e4f9279c1dccdefb95cb5b7a94d27ad8a93513737f12d18ef3153c4e12b530bc457af34100000000000000000000000000000000021aee9e5f578328caee3177a4e08303c3b5533e288dcb75f94992db3520a6da16f4201e60367240b29c48d175942cef", + "Name": "matter_g2_add_97", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d55300000000000000000000000000000000185aefe71f24281e5b03dd41e6d6d45fbc8975beb175118de7568bff0a9ccf917e9df97dc26bca16e8da06b0e9a8e7bb000000000000000000000000000000000015b326d401b827fdf556e4a24a3dd6c8036b1c849751b5ae3c3728cad88f931b06e3a345523a723481193f7afeb67800000000000000000000000000000000054ca16b4c87293002c31e64ad303e8f040e11de8b45c5fb9aca9dbec59b29dfda8532a8ef5ae6a92ac8ea90ee4303e0000000000000000000000000000000000b65a233a7731366cf24c801724265215a8626b1290d86c60bf1e74b021b0b44d7d6552f936fac7b5e60cf1feaa1d82f", + "Expected": "0000000000000000000000000000000010d1b2f595166929347e06c1debefead06334f554dc31f320cb844abdb1810b5f7c4b933ff8072dc03d303f4a6d0d09b0000000000000000000000000000000013ab41dfca0a7cb0c58c2c19e02f675a94d9e73312cfe2999dbac34e6a80bff9472506b48690f24ad3171ad495f445420000000000000000000000000000000015bfd0db53fd4da538caa3aee7a90a669cb84460365696ee79b190d09a6d4c3f08965de7fff4efeae435db52b97d213b000000000000000000000000000000000182ffc4304b911b47b092ab678edd63ed5f5e8a9069daf9247f3bf9c0dd149cc9992728a13b0a236fc9b37714b35882", + "Name": "matter_g2_add_98", + "Gas": 4500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db400000000000000000000000000000000085dd8bfc00ba517dc8d7ddb49d711d35bd36f9fe3843689019e779624a032d2f023533b8184b73042d1a1953d2885e50000000000000000000000000000000009ba8d5d36e6efe02097a3206bbed68529f0cb9875ab81deafd886d9243bfec8b403d2abe713a2ec929b93305dd2da220000000000000000000000000000000007f8f90ebb2771136a92023901ca85e87fb7c8b1a40f88ae564a124bdd0ff0bc27ea98612a817e2c871fb4bcea3bb06600000000000000000000000000000000152de417d02f1d14e5899201db8fd5db8ecb40ea8d415dcdedce8ac70c28d851db68e9aef94506a50ec28145547a2d68", + "Expected": "0000000000000000000000000000000017555399f979745302f08210de5311a6401b6b181100b3bc6b6d450f0f62079d2f02d7badcb164f50dfc46a975cbd6720000000000000000000000000000000014aea86c06e4c1fbf0711a8cfced2544c7624abc7ae7906cd992bdf575a702540c45c2117e221446ba09960cbc9048ac0000000000000000000000000000000002fac56960c4989a84e02ce36e8970c2e847ee45579d31ca77f042bf96505af574af822da084ae64b22ff876610ba9a5000000000000000000000000000000000a481cfea2aef8975c80a297ce5a185dacd25649d41f8466d3c63d786e3c264a8e4ccab5ef6b80ab1260e86ab6d5b3f3", + "Name": "matter_g2_add_99", + "Gas": 4500, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2Mul.json b/core/vm/testdata/precompiles/blsG2Mul.json new file mode 100644 index 00000000..886b0c6a --- /dev/null +++ b/core/vm/testdata/precompiles/blsG2Mul.json @@ -0,0 +1,730 @@ +[ + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2mul_(0*g2=inf)", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2mul_(x*inf=inf)", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2mul_(1*g2=g2)", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000011", + "Expected": "000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d536944", + "Name": "bls_g2mul_(17*g2)", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2dfb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e", + "Expected": "0000000000000000000000000000000006334ba1e361fd94bbd98f44b75ae9ec00ecb4d3467b5528870b1a1fa9a7d04449f12af90bd4c7a1e3f29e717d6d19d3000000000000000000000000000000000bf4cc1626393956915845ea7ca43d30a59c7196fbe309f2d5ee6de7e40c191d29821dd6aae46abecf634b904de8f7490000000000000000000000000000000014aeb09e252cc74610ab956057d4ac5af95cbea8a6baba9e5062643dc037d6841044cb38b22d7dfb978fe0b58f94cc3a0000000000000000000000000000000000fdcd73452fc1ced1c06e6271410a48dea05afbe889a692905e1baab8d72418c62531aab8b74842b51016f0a9cbb93d", + "Name": "matter_g2_mul_0", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d93884d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d", + "Expected": "0000000000000000000000000000000010e70bef8eb893377e7ff92168d7acef11c9efab990fbded728b173b94e1d99e471a8357f16625d353287086543551850000000000000000000000000000000014043c1f00221c439e5febd12724a9224bccf0389914461644daf329208e869b1bf149880dccebccd440b1748d15e944000000000000000000000000000000000f7dee1e7d122e410b29a9eb011ee700c2f230cf8f611e196ec66e153c1fc331175532a8f9b060b573bddaa705430c2e000000000000000000000000000000000e1f659470eab7c0741bc8777ac9fc8dcd11a6f1b30ffb4265e96b879e795a4dbf851d1149429dcab95464e89f334627", + "Name": "matter_g2_mul_1", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be1", + "Expected": "00000000000000000000000000000000119a5147fe9ddca7123f721b5662c1a44b0964c37a214cdf3a4fd34166e3b25210344e65220c38ec84d0e3b5ccc7e46d000000000000000000000000000000001642dad5dacf4295b871fe9b2787f0861f158807b2b6c01c2dce12ab053c9472bd3cb98de5dc33f40053ff45ce5c9af40000000000000000000000000000000005bb5761602b6639f2ecaf79f2d1f853fbdf75f4b3852b90808b858993a83f8a0da8a2ce7072aa91e3b6b3ffd0b3d1e20000000000000000000000000000000000a75143b9551d4ae41fb8bd71fdba7826b994c65904d9189a5ac5130a59cbb9d8dee0e016735565148fc49823d3969e", + "Name": "matter_g2_mul_2", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf494c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a", + "Expected": "0000000000000000000000000000000017ebc9446f8c8e17dfeddab9188d0c808565da29c0bdbbc4138a44ca3196c4564853be28286b66660cda36832d6940010000000000000000000000000000000007f29a9583b4ae83d3913dcd72590a3f20f39eb5a6d36663c1ef433058e76550085b9c01bf797d98d0eef45cc22ff8c50000000000000000000000000000000016eeaeb123b12d1913ff1e50f974228c79f2b995609d2e3835c8e1d68773b0cd484df57b86111cdb75de1e19eaf062e500000000000000000000000000000000002f5688c1286aed42309896bd65d1826dc64dda615238fa9043669806968b8e0e1e3e77ef192b7df540aaf0ed282a9a", + "Name": "matter_g2_mul_3", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e8964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b89", + "Expected": "00000000000000000000000000000000042d0c1941ae0ed5e8787437ad5e2753bba02185317848e8ec2e425ac954e0efb1bca534725adfe87e8507851ee337af0000000000000000000000000000000002db55ae8126cbe86327aab880381a81205e33a351d172c883b9cc184799866a8db5a6b4321496e05d3ef62d00416d9a0000000000000000000000000000000012c45444403dd62d7be3e7658dd85909204751dd7d085f6edd38c0aa9185d3c32407d8c95bba371b380f788d0dc48e0900000000000000000000000000000000111421c6dd0db595ab731adfb4bc76c84a61197cb023b6f17e7176c443f20a4b6f8cd0a00cfa61e831ed20b3c6a84d98", + "Name": "matter_g2_mul_4", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e2787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c944", + "Expected": "000000000000000000000000000000000ccdb2a0b670f199a9b61198e6a2ce2117075733e6a1568c53ca493dc3674c6ae85be2491d2ed983f52e2c7040824afc0000000000000000000000000000000004f52450d7e041c561c00200d5b142b32f2df2e2156e4f6c15d6c00e185e135037a1ed6be15e2ed920daa00e2f9bc8da000000000000000000000000000000000f39c38c18f03ce6baf1d016cf32d7387269940280f2e8d21db4da33dbd2d24ebb93ae3dff9f79b015eee25813d677c700000000000000000000000000000000189df61f7f1025fa6fdd0a4708ff1d53db7d414019c4828de2520af3d36776062350061c2261e46e746a6475fdeccb2b", + "Name": "matter_g2_mul_5", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46eaaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e1", + "Expected": "000000000000000000000000000000001388a59c57ec8ca5e68b99631abdafca1b71352ac35003a55bbc415b48b8171857adda31123ec86a6ed9e1060d56aa67000000000000000000000000000000001471913b1ab5bcf9336665d3d44232b4e58da70285b7b8eb1dfd7c54442afb28c339f56e6389f89b84db0879e1ee058300000000000000000000000000000000022101b4de40b7180ea17bb36bad0a668a8def3e7361a96fbfabcfc4cdbe6f607ee4ee80d0eb2418b848ad056520092900000000000000000000000000000000103cda694792af5a51e04b6422600a0ea6f50808ca54423cd4f59dfba633daa5afea49c85b900f52e182610efb62fe7d", + "Name": "matter_g2_mul_6", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12dac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c", + "Expected": "000000000000000000000000000000000cf5cb957a752ce9187940f63b13080790348814debf84b91e74fd6e822c2735941d61d50d492439475bb3ea7aa849ec00000000000000000000000000000000012e546ff33dee9875510a68301f46d89e6175f5cd9a6e179fb8599a580e9478fb8d92038982551dd29041d8185c7474000000000000000000000000000000000d52fb57bf2996dbbacdbcb4088df38e77e25598b91bcd5e41eaa27b1398eac150586b142f068d5b498e0ce458d3e8950000000000000000000000000000000012295e1d1039abe7a5fea51a04a34e9e8d44a0f24b8c032680703c119d54274d3bc2e548854021ab027b693e43964314", + "Name": "matter_g2_mul_7", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5bbb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd108", + "Expected": "0000000000000000000000000000000008e4c57309339400ac9b6b5df16972c272d47cf69ba7baf89afa4f4e72703999c5885253cc35686f6c8d277399da2a390000000000000000000000000000000018ad4e1f105f16b0dbb4eb089c51e709c25e407e54b64346224b1abbe15d62fabb231e36a69eb05a9ba7860f772634200000000000000000000000000000000019994d20a7ecc0f234ccb6b1793fa7d1ece64b3e157c579fb05a8c6cfcdd6f5456ac1f4c1beadb69206988ab543bb8bb000000000000000000000000000000000d435e74bed382442ab83ec90dffb91336137932524bfcf9753fa5ddfe038d0b98a045c8ec9deb53172e5662d3fd67e6", + "Name": "matter_g2_mul_8", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb81596fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f8187672", + "Expected": "000000000000000000000000000000001425890b6c46c5a07a79127de4ddbb751227dca4481ab7c2f601bf22b8f6a149767c73bfbf57ee399c0f2d0b12852a0a0000000000000000000000000000000012cce15f53fdfffb5f71de3567b0c0adea65b9321c85677c574787f7048c1bb5e2dc985b65fbc48115aa129e6000fe4100000000000000000000000000000000041398497f975289fb9fc6ffe671a19fdcd3753c82ffd3b2084574107bf7fadc8de462507f4484c32df39967c3751a480000000000000000000000000000000007514a7f246006e714d4a8cbb4e89d81b951b5c41a05bcf35f61283e888074fb3686fb6ecc1a66e491ea1e1ce0738102", + "Name": "matter_g2_mul_9", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e977955054196b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea", + "Expected": "000000000000000000000000000000000b24adeb2ca184c9646cb39f45e0cf8711e10bf308ddae06519562b0af3b43be44c2fcb90622726f7446ed690551d30e00000000000000000000000000000000069467c3edc19416067f572c51740ba8e0e7380121ade98e38ce26d907a2bf3a4e82af2bd195b6c3b7c9b29218880531000000000000000000000000000000000eb8c90d0727511be53ffcb6f3b144c07983ed4b76d31ab003e45b37c7bc1066910f5e29f5adad5757af979dd0d8351d0000000000000000000000000000000004760f8d814189dcd893949797a3c4f56f2b60964bba3a4fc741e7ead05eb886787b2502fc64b20363eeba44e65d0ca0", + "Name": "matter_g2_mul_10", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a93b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c76", + "Expected": "00000000000000000000000000000000048ea2c854a0df7b10a2147db6eabcb16eba340644f737fc99663d1ef26d8ed688c2baaa7d7699c5f540d7605eb48485000000000000000000000000000000000c959efb835d48d3e7a8ce643764f27c365f6248a88e39092e3a6498f04ed851c55b796dacd62ae73d7edf23aa45fefc00000000000000000000000000000000114337b8caa68cea6f22a25c0ce3b247cadae24c63fb02c6a98a728b54f97b12b1473c8e23f55338326b9575a637bb2e00000000000000000000000000000000033167b0668ec650581815cefab61d13661f4cbc6e01711af0aefb699e1979b551d0031c603ee5f6dd4f716ea7aa4a6e", + "Name": "matter_g2_mul_11", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b38173173459836dd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c", + "Expected": "00000000000000000000000000000000142f6b71471f3665ee6269cf598fc3587a62523f9753eec48a2461a2e313e376828cf6d1a9ffc9e64353c8a668718736000000000000000000000000000000000153647cc4a5aeb8ea52f845c415651e167ace9f331c1d73eccbbe20a4014f9e1158c281495206de4b841839438a595500000000000000000000000000000000151d07c3f83217e63b332a6c47e91ef2418e9c658353f8b644f23266f5fbc727562f0935b4d892db947cfbd0757ed61500000000000000000000000000000000035bce4bd2d8261e21476c325cb68e581f20513eb5e0e6a0ddbfd4ac4674bc323590b6f52d0cd50010c13642e7e03daa", + "Name": "matter_g2_mul_12", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b7010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a", + "Expected": "0000000000000000000000000000000014e83f87e7f66d8ed880ca46a76a5d3bbbacf2dafe1ee055f04af568738f4c6ddf2a93e1810b616da6f64f25c35a7b5a0000000000000000000000000000000003d14447254b61168d36f92710f95f7100cc8f278b0bc9528da763a18a5386b3f5b83b96f4dc426e4b0fbe755bc986790000000000000000000000000000000017f1a79ed64abfe5e960fda02cf3330e6ef5612c1b8639386959f86c970adb797bf077a468273d37996a65685f75ac30000000000000000000000000000000000d973499a7bf7132541c0976bf2e9bb26a2b6cfa5bda720352fa7a180a6b8fe95befcc13de5a2efe58be934cf7d8e664", + "Name": "matter_g2_mul_13", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd394c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a659054", + "Expected": "0000000000000000000000000000000018bb69dd6db0beb468242265c382de5ac342d465b5f72d4e5a24c67a48272d9a1f3af28e0bd3712e16a854c5d91c616b00000000000000000000000000000000072fbcc86b7dee9c2dc177dbabdbbbddb630c98ac3bf3737fd22f99e2b2b690175d9c5aa4b577f78c545dc6a5d2d03c900000000000000000000000000000000161c4218143ab1f0387f19bccdcd08f9caeb2d1331ca890741799ff1b40533076b6a96a910714176c770b25d2c17715300000000000000000000000000000000063098cd9d1eeb899724b40a2d10ac951ba0277db09aad639957f58541dd391fffadc5d97833bb9666b054e12debfa92", + "Name": "matter_g2_mul_14", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bdb3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", + "Expected": "000000000000000000000000000000000e43672f1bc25e7e0e64a3fd26cb246bdbd6fb5c9084afdc87c888634916e6a6cc9a351cc67a6ac77ab8e132ed6cbee3000000000000000000000000000000000dee9612527c8ee9c574a4c51f5d3504ccf1d5781b59c78ea15294332c6acfdcc7bc68853e70f1f72524c930e4c3d2eb0000000000000000000000000000000017eba629eb14a0636926275f1c2109318ce8818d8171c69fd371751b6de47bda5b00a0b0e3765d05bab7b8dea9add90900000000000000000000000000000000052f0a4cd9b91695e1e58ead1da1480fef08cecef63896aa51ab16da373b99b3b91767a374645ac5932d9c7fd21d4636", + "Name": "matter_g2_mul_15", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca807f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf", + "Expected": "0000000000000000000000000000000019b7ea673dad96c8352870136ea262c9ed105550cb403eb1e64ad598b2145fe1b95e5d61f1b5a6ebec47568c67b68086000000000000000000000000000000000f06ff9bcf2ba284e705b12ef2311f1a9b867ed742ee0737567b5c878547b18394b82c2bb97e16586515728245692cef0000000000000000000000000000000019dfd2d8fc4f2c989c7e1016e147f336174c84d380bab992bf1adbffe96d93d4d2d1d1dacdba3adfaf283b184478229800000000000000000000000000000000068d230422006004cd88ab0dd46a84af3905c7a1d329446cc23c1c5adb401a86a9fa76aaf577f77c2678cd8de8685ed4", + "Name": "matter_g2_mul_16", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91bebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da", + "Expected": "0000000000000000000000000000000015ffdd83355978ebfc386e13987effac0137ec628fff1667ede29cfcbd05e31cf8323959dd0247c20cf28978dc242c790000000000000000000000000000000016b1f810da2ae3c2ffbb6b83c47ef03eb0f298ff4c304ab0dd7b97207949d62858458d789c86c0cd474c34fa720ad3b70000000000000000000000000000000002a2e1463d5e795e6a25998a848b079363efc7d0337c3803385f4f17f11726b04108adfd87a811d709cbb6750c969526000000000000000000000000000000000289a3f472799c06a84bb1f377a36bad910220e1017884545159fe1b2505e8e7473882fcf324ba0d9125495bcbbc7226", + "Name": "matter_g2_mul_17", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed833", + "Expected": "000000000000000000000000000000000b02ddcfbf391a2d6953261c786945093b09377352473a86cfac6456a811233809434b566b9301eea3105eb86922efcc0000000000000000000000000000000015430deba91113b841303120f0738012d77207e9408474998df5e68d0d61f1a64afb947ff93116ae766ca5325046e263000000000000000000000000000000000ab7094055919f6f707b458cda552f25104d95e4ec8d020ea4c17ac1d7efef5c4c3a769120718f1d5171eb8630a3018200000000000000000000000000000000161e7209f8c98e511a698fbf01735798cb632ae1afe00870654ffa0ba93a549edf4b97d60f03974ab0964cd39298401f", + "Name": "matter_g2_mul_18", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31d411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f", + "Expected": "0000000000000000000000000000000006cb218607a1f66ce361c89fd20edc3f00421611adc9aa52ec35d45e023174962c863f740ac36c984c2b466cfc4827a900000000000000000000000000000000152b22d46e9660da8b1be4c5b14da613731e750ff7eebaf879f7074bf3c33e1528a2c8479e0178707e3855b49f85f045000000000000000000000000000000000c928cf78cee2c8b9da8215d33d189c5636df1e8e9bdaf143aba7ed40f29490ca2328b4a20cfc56f62e4ce49d9e77f14000000000000000000000000000000001574b7a9c3931933160ad4eb17400b6297210db47bca034bc1b5d17a0cb8c41834636b9123e625e5eb0b01738cd6b9af", + "Name": "matter_g2_mul_19", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e176bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc", + "Expected": "0000000000000000000000000000000003e17452a80996203fdc4037db072c452f9eb2dae689c77c88b299d7ba266d111ab2b9c4b24149968d72cd143a34fc4e0000000000000000000000000000000014a057d7a50c9b0f34712ff8008770080bfa671650fef43c82726257da180dfb9672b266d4c54d65fdc677d917e6c5b80000000000000000000000000000000013b452c980bfc4a484637b578be100753aee9dda9487d5ee5c017c689dda838fc673804369328192d780d60a9a3de0f700000000000000000000000000000000103aa86d1807de242a6d4fa4a49be6c91cd757df5808501acfca44940733c6a524b851ac962b99a9be41bfc8d6254478", + "Name": "matter_g2_mul_20", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b712a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c52", + "Expected": "0000000000000000000000000000000007c616472f9ac60f749979c6f870b587425d514395ed07558ed287fccabc77f0c90872f3885d0780bcdfffedd124eb3d0000000000000000000000000000000019531e9c25e84a2a968a85d9f1ab61a372ebc59ba5bb7a2bbb3c0d6e4c9d04061b28fdc719735e97ccd5f7243a58cdc70000000000000000000000000000000007772d3cff12bbee916a6569edce0c6dbc2bd8a794919a4dd7bc37024c8273245210511b8f6da551fe626b7b840833f300000000000000000000000000000000186a3e858a83a7ea1bfdaac65c2df1076059aaa193961559792373886c68acd2f9fca61b166a0ee55084a6ea122ec3e8", + "Name": "matter_g2_mul_21", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b1", + "Expected": "0000000000000000000000000000000008adebaa95d10b9fc0f1a1f0d52dd6741517d2ba23e3f9e7a9221039684ae226ea602dbb50df0efd44b2b5bf7495c0b50000000000000000000000000000000008e276e78ead2473602d37cb9f2f589f9c60514a1fc5c215acf487bf57c935467d29945d3d671b41a8e47c9495dbf5c9000000000000000000000000000000000fab06240cb8cbe9afcc4ebebde50c2881e4bc4d4f2ed09a1065e3620e6344fb3c5f3019250ca4edaeae4902abb7400d0000000000000000000000000000000003fa6c48ead374be1dd45c8417ca8234c15ddefc5039151e6cd7fb27f866e134cef2f59ac9b2ec1b26896eaec9213549", + "Name": "matter_g2_mul_22", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa0977064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e9", + "Expected": "000000000000000000000000000000001412bdb48546014adf3c4eac4dbe79ba700f90c8030b063828fb01be5977bd73107533a4e8030c8d9cbdde9bcf10649a00000000000000000000000000000000126d3e1006abfeddd810cb1e12c898cf5f543e414438e600ce4c94cd8dbd1e17c0f3b9831add397feda74362eeace6fb0000000000000000000000000000000005b3159638afa34f219513cbcbc51567b16fd5598b85e6ae0d232021133cec25a6269250df2ab7b5ace726e9e2fbf0b0000000000000000000000000000000000c35bfdd1c10e903da6d41e9afbe65b0cd66addd7893fde41dfda8e543a93938cdeab52cc9bbdbe61f93d651bd1c923d", + "Name": "matter_g2_mul_23", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b", + "Expected": "000000000000000000000000000000000bcc781f144bc148687875789fd8c54dd820170984b6f8ae75855f7e45619c1d2ff85c330b7743e447b5fc831dce9277000000000000000000000000000000001409aaf3c94c9a6b5123c82a7f311af7c2f60e9b197d49fb5b010f84faff972151b383a83c106de43454f8097005f6c800000000000000000000000000000000064a91226da8b9cb587030f1f4afb0d422a51e4d55212f26c621abc06fc0c57a473a9be75518a5f4f9a7f8d4aaba69830000000000000000000000000000000002cf239343bb77865ceabfcc1fe34cc9be4a1ebc3a70f16f8b7cb84eed5843524f95673b01466d6cbb0d8d9dc00793e6", + "Name": "matter_g2_mul_24", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac93176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a6", + "Expected": "0000000000000000000000000000000006bbdabfe104b62d22e78bc8f3446a86cd5f10c4c5a54501140768b55a7e6940b9952c9a90a14d8fdc7c04600195cd6500000000000000000000000000000000172e718c926cd393bf303984518432693c304a2758174dabba303ff4c0289b5bf5376b61e8821abab322d53e88f71d480000000000000000000000000000000000a2f84fbdb5b05107a0a340e81b56ddf6d03c23848448f841dc44f07cbf8a575289cf6d53986f581fddb0f2d07e38d70000000000000000000000000000000005cbc10f143a9a1fe23f670a4c47d385f5c7069d8c46580322d6939122b2d39d185d6a8c2e51e88a1d40fd2e82d08b8f", + "Name": "matter_g2_mul_25", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b859239080d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36", + "Expected": "0000000000000000000000000000000011769e191fe258ffd1922295a9fe877ad5a52fde6e343730f8f5ec6cdcd584f8ed1dbe0f55b5dd81f5f78b7437f02abd000000000000000000000000000000001253689089e9192d10a45342214425de36740c120e49f596d24658941ce2b2ecfb50e879be0125e3d159088f88e234f10000000000000000000000000000000017b642d1b5a953f47fff8f0649263f16f41a0ec0397d5a81571174aeb85431c352e2bf6bafa6894d2e6cdb5eafff16d40000000000000000000000000000000017b3438d0ddbd2ace1e63802013b5bac00d31889dcb2d9653a6f6412d157aad2fc45267322a62129087380bec65ec169", + "Name": "matter_g2_mul_26", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a39915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc", + "Expected": "00000000000000000000000000000000089a07bf63b8029e0506393828d8593b94b73c750815552f9a3c74ef7470b5810bc27212ba02ca6fdcd97e1e28a52a1e00000000000000000000000000000000051a93291d4b912f0a594d45c0264a9073663a9ec75e6ee81e13e79383d96e9330bab845fd1e5163e5b28c41c4a854c40000000000000000000000000000000016610bf2b2006207046e489294a132937edbdf95caf508f0df3bf8502e641aab9c44903cde75cff3c1f86873e06cc58c0000000000000000000000000000000005d33669fd8a6256dc55f513bb93cce8bae62a593eb8903cb7d7902a7727efb8fb4bb2e5058441c30b99f146ff5394c3", + "Name": "matter_g2_mul_27", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e0550860165061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b208792", + "Expected": "0000000000000000000000000000000005aa23543088a9a833d773a71275e73fc3081e13c907b8a04a330df7d6c06618fe69e644e0ee55869e364d3561e40f300000000000000000000000000000000010eef9238d2c520f32243f07161f3e35b15fc949b9401baa1a9c5df7d50b2cb3bdd237747735b235862bb57322fd9d090000000000000000000000000000000012dcc16496c95e39ecfd8f0514b5ab2569d89826d957478cdecd4e827095034e974039b37e767a0f25bf057ed715aeb00000000000000000000000000000000000d0593865fd2172ebf1b94c7511ab7d433a276bf833515146adb6d79b6e09d7c18f4c7f4d3241c14d01a4ad0f31580f", + "Name": "matter_g2_mul_28", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3fff396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c", + "Expected": "0000000000000000000000000000000015785bae0c27680cca2097ab52306207a61ba9903723f574091ef5e57c2e871e076d7f46e6e39f65a01e183e7bd822f000000000000000000000000000000000071110a384248664db46f21d87b455a3ad3c43782c68304ce17f52cc8579fb2e3378995d6eb3b8c97665e5fb7de665fd0000000000000000000000000000000019153a01c2b3c5d481474a71e5c67f27fae3232a0c8f1655ddd4da6b4c79870bfb0b6beb4af8c54aaf7e9251ad41d639000000000000000000000000000000000c58375439a93e0763467c6a11dada3e579ec53a968c9b9c1a446cf3224ea0c89c9ec218a8b78de91fc12f087e722f94", + "Name": "matter_g2_mul_29", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b2f0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa", + "Expected": "0000000000000000000000000000000004c7495c03fc3fb4d0fd4e0e660d6424de9e060eac72eee3608ba95bac294a3a62d246f42dcf3b575ee1cf8e20a9106100000000000000000000000000000000091140aee42a9dc875f87f3ba29beff95138790140f8bb522c6c15281b3545995f9c13b0b73ae691317e674295db6526000000000000000000000000000000000a945a215b2861427e0fbbfc6fea04e79edeaa1eb87df5db8e5e017cf98fde7b8d5a04a1b2129a4aadd2e3924ecc0bb2000000000000000000000000000000000a43f8d3d92a03b7bd4c8a34ce31729ea0b8e6b051c30241dca2db31a02b6e537071a914d8f0876f944dfdb613540c6d", + "Name": "matter_g2_mul_30", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", + "Expected": "000000000000000000000000000000001821e14e70e12c7caf2a1ab651eb81dd61c4e1eec9a02fe4124abb865a7029e066f03b62e6ecfcf0fbae5151272b524f00000000000000000000000000000000044ac4a7399d6a67e7ee8cde3f5fe20b0a745462c870926f0ce8554061eba5bd62a8a08c798d8bfe30fba5567d47c7ec00000000000000000000000000000000178b8f061ad9282b3b2057f20c115c91df994ac40aacd05b7669e934bc7d650a0cd88f9fe17d7b766e34bed587ead58200000000000000000000000000000000188311eea279ddcf75f8dd82643ca3efd560ddbe6c8f2696cf7da03e65cc90d97b9f9ce99e29269644d8b881e624cca6", + "Name": "matter_g2_mul_31", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f86d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd", + "Expected": "0000000000000000000000000000000012496dd3c1278b55bde81f6944c4bdb71869f5e5e21db7b1425ea32fa1dbc8c301e7f5e68cd7629c91650265d1361e690000000000000000000000000000000004a1251591efdbdbeda21eb89165ca61a2e090a73426451b6933d939161364c4064a67a90f859a7713fb6a9c5321d5a200000000000000000000000000000000163bcd07d030fd6ab8a8e0bf39b136dcb34f03925c3fdadf55e94a90bfde0ecde5c51d2f4d06954aa6a96c913f2ab4610000000000000000000000000000000016dc065a852ef9e038d93cc583b4a71db9b96a7e7a819dc530598f1ae256368438f52e4b709f15f56279b9c7f9db8785", + "Name": "matter_g2_mul_32", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045c00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc45", + "Expected": "000000000000000000000000000000000a2397fb3a3891d1703eb2112357c5fb8acb070ba9f3a39050be6f05b49b8d2488e94adfbf849c8b4a42e287077e9fff000000000000000000000000000000000cf2c02a97addbc1584091e411f9a07135f1fcf989dfc8ae29155ac90b214ce20dc11a1fc75dfb697694891d934abf0f0000000000000000000000000000000018fd4af647bf0456aff9ef80969613829f8eb837205df552aadca46bc3bf9838e0ff2515d3fe869f80d78e2357091d8b0000000000000000000000000000000003c5671ea4723498359f29d49ebe974099da3dd59d21065a721f7a4f14dc7fb1de3a67a707bfa4bad7058312632c6113", + "Name": "matter_g2_mul_33", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820f661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b", + "Expected": "0000000000000000000000000000000000676bd7ce63d8b58cc1e5399ced9b495baba4cef9503c44760f92d6d9e092d6d5308fa88144491eda6c571a8c308786000000000000000000000000000000000605cebb4c20bc9dff0258f75a825f55f23a32cd0804dce56bf3cf2f19a3504f0345e0f1b839d4d5920aab19b363ae19000000000000000000000000000000001512f95f60a6dc79dd9261c321328ab8e22ff314e7582d8de83aa3bf280805cba8ba6d359a620fa6f0564396a45ca9760000000000000000000000000000000005837474ba78e0700c77141d70af1d8fb95a97cbadc95996faa93c2e81b7c8877d08d5287f83219a24bc0080e630e39a", + "Name": "matter_g2_mul_34", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe2346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca", + "Expected": "0000000000000000000000000000000010b2a9b32e431c11ceb474942bbbd6915a3cff64a74d67570fadeb7447c5abcf1bb35c822d4441565322ebf75e61f64c000000000000000000000000000000000b75a0212232af0a59440482a1f953cc29bcd35272ef407925eccd70c1dc4705dc1e97d2da604996d3c52155d05d77500000000000000000000000000000000018751bc59f5907cbd7f1d503bc5aa266f4109fd3133a1c4c2e58e4a17250a40053b4489da4825b4c368b0f4947baa6240000000000000000000000000000000019b41fa1af9488596b09c587fc33e044d51674eb6087c647d5a762d85e38a587eb5482687d9346a1a701bd3a8bd36a61", + "Name": "matter_g2_mul_35", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a8448639a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc", + "Expected": "00000000000000000000000000000000054836eb7ef9edbe914bc16d1498e0bc3c978bbed2518802c2f8e1c0b59fee482cce0ae8e805c33861d4cd595f6b8bf40000000000000000000000000000000007dda36d55aa7a890aeaecf2528a390c98d9ecfc8a5c78c2a6def30de55b90ae408ab770cf9a9a4663ba601c4f5765a00000000000000000000000000000000007ff7b24c8ed9fca572069e72b1e93978cea87a0fac7ba60f54aa573d881f21b73012b010e9c0fc9324aa7697bae0c4a0000000000000000000000000000000002d9773bf294efe64021e755e4dd2936a5060bbea5688b6369ffa3b94eadcc58cc3986c74ff365301be1e6c785939b69", + "Name": "matter_g2_mul_36", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e372c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447", + "Expected": "000000000000000000000000000000000902c1082ff09bf93b91c9ef5e447bd6832fec9297cdb065f11fc5ee626e6e8834cb5d74775c586609a0394e6114e8820000000000000000000000000000000018e414a40c27430b98246fef556e74dd3dd7adc601e3c05b79f8c29169780a173be9a725df3318d71b6e82abf97930bd000000000000000000000000000000000f924fa88f43c86ec98b34379b9a649c7564ef0dc596c95df19522fd50fb3a37cae031e891a7a7aa6a5e6a9062c3726a0000000000000000000000000000000006bd3340412f64d02d0cb3ac44d1f31cdb1906e56dbfb66d86b60a74cd26c1e241963fcd8bba4109c428db0bb083e81f", + "Name": "matter_g2_mul_37", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d4828", + "Expected": "0000000000000000000000000000000001415fbd8afeeb5796460a9095f14a8f3f6fe0374d4cc4160f030710a6d4d3a92febcf4dad770de3a3ba1a2efbd858210000000000000000000000000000000015792220c7e53262b56224d230a8a4b32019c77548704ec16da5ce167854305e6cdb9924c248f222d6fe95a8383af7890000000000000000000000000000000001694329d8e0f41256b703a8bb6548f1d9e0749a55c124c9b60361b4cb1daee24fcf272327ba598022a92815764fc8570000000000000000000000000000000003350658842c5b6fc5561a14df27d950a00c5bcc13d6d9d014bfd6dc95ec1a030594625f41d439b90b05275a0ffefdb1", + "Name": "matter_g2_mul_38", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb3d4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a", + "Expected": "00000000000000000000000000000000054c6cb26c8b0a9a4700e0b95348e6fb1190c577eba03a44e84fe7744c543321d02c4d8f55c03f984b44ffbd899ac53a000000000000000000000000000000000e7ab8da5d573cb88a78f6a6ad2b307bf867777f79a643b6ec89d9cb208711c85d7d2cf8f8ac69a8b322000fc7866024000000000000000000000000000000000fbc5926b9dcd9e4d1ca1a2b43dab5c98aa20b37aff0868c54441de44eb014e5283010642717fafaa95000f4313e14840000000000000000000000000000000003671ee05bc20bead72f2306203dad55cf20b13d3bb2cca079bf4391411b85ed4df55e1426645d73b6935889d4450c58", + "Name": "matter_g2_mul_39", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05541776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb", + "Expected": "0000000000000000000000000000000013fdd394635f42a926a2324b8cb870b5995772ef4e25ebc1da41dc5bf724f747da8d95a28dd703b5ed65ada5555c8b5b00000000000000000000000000000000118fd550962d1de8f1e60c312643ec7cd306f0bbcc932739270595537c8d290ca7e20b962fcde570bd2ed7ea43009fe70000000000000000000000000000000018b25fef4b75fc7649a489d078311dfb6da9909f472de7bd9bee9c3ee353f345c83119269ab797fabdbede41e0fe6169000000000000000000000000000000000b7c2a73741f6944ef4ce8fa20b2900612645c224818b7faccf6597827fa07f7262295f42be5f34a751a6400495f7eaf", + "Name": "matter_g2_mul_40", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c425", + "Expected": "00000000000000000000000000000000177d29de8a81db2e515d4241e5f7e3d35de22bbcf9aaa616b057cbf2dab57ab8d98213cdec82a2034964f3e1def8a4e3000000000000000000000000000000000a0cce8113eecb064a60ee2c470dfae8b3921f8da2c7ad8dc918b355ff44542b007add28a44848fa8d8f8671617431ff0000000000000000000000000000000010470fcc723286327e951e758fd0474de394778d0c1ec5fe6f263dea1957c60f05dc8f9d82b3c6a7d73b3e783f35ade500000000000000000000000000000000098a6ed331f03da7ccc9148f07b19b132152e15d9fdaee5cc092524b33795edf2b458b4e8383c5e29affd3f025094033", + "Name": "matter_g2_mul_41", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbce7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96", + "Expected": "0000000000000000000000000000000018a1f1a60172a65abc8f2d855ee7510c1e0af9bada084325027bd493ae86ea2c62c15ace7f63562a82cb80ee7095661b000000000000000000000000000000001736b977fb52eb1b466cec3d42df7e89047784f0e8362eb6425e37adb1e84d0438f5a6e82c7b31d59b0959a5f4aaf9310000000000000000000000000000000013ea0f849830f8e48161e840295637d8596b32eb576560289620b797b14bd395d835e8140b69039c904ef1d07a82127b000000000000000000000000000000000d7f58873701c138cb7e18ffc36cd0e47b07d70448ddd9fdc4b947003fb29cba0775916c752d531e527ab744c277e5da", + "Name": "matter_g2_mul_42", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6eac26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc", + "Expected": "000000000000000000000000000000000290fb3f38937ce4439ceaa21cf3b31db8a22f9f5ad9db0fd7d38ca978192bc05d41152f8f86ca7b2ee0bb58e125f57f000000000000000000000000000000001775913fc24699bf08f25fb946fc6527178ebb821c654b7bc69f6f86b5168fc42057a5d3bfdc53b3d57fa1ac05f7a0930000000000000000000000000000000017b9043cde8dbf500ad90463250a49f56b35713f2fd9a35d8391fc36c78c083e39674592a98cb857194ef9e73a62a397000000000000000000000000000000000e5e62e39433d443e7d2d32754d2ca2556cf6deea45e5076ac040e3d6de14e9965c53f8c65bd98ae7d17ad3a26f3accb", + "Name": "matter_g2_mul_43", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710bebba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca", + "Expected": "000000000000000000000000000000000d9927347a9ac9b0290e68143fbc6a5f4476604c3fa5ae87e729a03ca055e4c6543f9245a4592e195180d88781e46ac900000000000000000000000000000000175e0ee8de4002b18f32f70f1bfa9e0be87288cddf1c436428c2969884112bef5db19e041cbaeb23596e25cabea3777300000000000000000000000000000000074ed9e981818102b9ba818d478ba27033eb38e3fa19cdeb9f5820e59a64dc451342a160359c54bc8ec7d866b62080ef000000000000000000000000000000000a853930020bf01e20816d3aed242e00792b0d0e78fb15403fc3cc255f0dbd99ea6ae1d59d5978e562be4862b3317324", + "Name": "matter_g2_mul_44", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be1705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a", + "Expected": "000000000000000000000000000000000e9c290ba8a22f7bb3f7dfdcc9f5a221a5ce838d4fa85a00473a4dd830bacf583dd91a6a6f78d2ebb54a4c1bb217f793000000000000000000000000000000000dc51b0ae8bda6d28c51016764fc028258171d7c7646393228692aef7f1dda4a83e53553f63d6ba996d4c0a802bc967f0000000000000000000000000000000014ab155029dd35206811be9ca4efbf762a1673367e6b57528f79eb50008ce7c3b49a2d25da0ae68ac4030ab4bcc0daba0000000000000000000000000000000008cd743bb52e7908aa973c8518eaded75fc2858f4edb25fb7f2e09900f0abd3ac87e93cf1068bbe0c7d99619aa7a6b76", + "Name": "matter_g2_mul_45", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da90f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa4", + "Expected": "000000000000000000000000000000001746a449993b0684740630f3f0e46eddfa135371e33e8de4dfe553c78845399e63bb3da48798b35df48d27e1f991954400000000000000000000000000000000057e0fb1113968858981c9803166d8b3eacc91bfad320ea0e610fbc5b276da1b46d74fcc54183ba61d1b2fe6743097c90000000000000000000000000000000000b3a178ae3b739cae3e80f3f44db42d8c465a5cfe4943b449d4c3b7f4ad153916c6cf4fdfece14a00b271222c72764300000000000000000000000000000000041c8b293ded0c647f2e4d6f9b35304179b723c3e6e421a5cb103e561d1655b92e74877ce22c99f22a3700c3aba9ebb9", + "Name": "matter_g2_mul_46", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", + "Expected": "000000000000000000000000000000001103cc395acf81772955bda38f951a81c5a6a476c0b5e1543616a5a7a7be22dd487ab2a8586524891300adec5225b4020000000000000000000000000000000003479a08e2811ae9aab0301d66ada470935984d7466201f3fb28c610c0b5f67e7305f5ad3514cec5f30b51d0aae775d40000000000000000000000000000000005ea37a6d20c1ad0978da68ded3a5bfcc5ad8fe81e39b525fe7d1f2b2b1ab0be7ada80173b1d0b7fe1e06ab6354e64b10000000000000000000000000000000008f2093151a285dac511df1755e99a652a1cad0af3a019650fbdead1421ba8e84afc9eb0a4fea651f365d72f031a0ca6", + "Name": "matter_g2_mul_47", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c7a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac7", + "Expected": "0000000000000000000000000000000019f79677ea0e011e5c9a892a407646798b05be05337c73135cb771abf101f450bbffd08e125f077f5ea989decc009b9f000000000000000000000000000000000ed15f35966024cf1de2926108151e976dcb0d51b2736b0877d79de81f6fccb9dd299d14855f4e257cae33ab7455b95100000000000000000000000000000000125e2fabb5cc95c0a7890e9ff2b70102a97a03f2d11d915cf4332dd049a467333e12ebb27955c0310ebdfe2afb3173ee0000000000000000000000000000000011718167000f9b749f1615610a30023db4b986364da5bbdc4506c726624a073548a94307b282590cd8a43b4900a1afb2", + "Name": "matter_g2_mul_48", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28b473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602", + "Expected": "0000000000000000000000000000000005af8fd9e79568b46fc42b2c1bac62d115365834e509dab032f66425b7a571a4bd3bf702299d3c5f36c372750b3281f30000000000000000000000000000000018499089f306b3c9f7a645ca2f9aabc4e57c046992fff87e832e21e21875c6adaca050ea8bd7043afec3a36ecf8eafae0000000000000000000000000000000000827fa0f46134e2dff80088129841f0469ec7360fd8b9864e9ed99c5fd3458e6360661ab4c671846681d491b8b823d200000000000000000000000000000000120f829e8d0ffc360a14eabaf52bc653b1e90a36c0a8af806ca745fa306a9739e31435039a377e0748caf5e80c2b0b09", + "Name": "matter_g2_mul_49", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c013", + "Expected": "000000000000000000000000000000001745500b00e5ebc6f71c779ba0b0f8d6601a065c550ca19de9562455423d2ccb507e659b0dce982faa841267fb1a27d90000000000000000000000000000000009c36b54f12d130868ff9b9b61b714fb1067dc91637c09614c51b5aafa2cbe3ca7dce0f3e366d4200cbf603ad4fd630000000000000000000000000000000000172e543708bb853712d81c000c9f9f2378e628b4d13b074317e95deeae98e11e7f917f91e02a0b18cfe9b25f1b83f16700000000000000000000000000000000189fc572ff6a8c6606ba0cea7da7040898d9ee85a58f12fade8c5a22031ff26c2f9cc612bc6e1b82a0999fa93c6fdfca", + "Name": "matter_g2_mul_50", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52da9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc8", + "Expected": "00000000000000000000000000000000013c6f777df97ad3ddab9b7486d54d1bacb3b40ad3035b47a25a66c02e8866955e27a8ee52872c8222ff7466c1310bad0000000000000000000000000000000014a5eb510d7c743e824f4daab21c43db4d6de8ab2e825d13ae0e186aaba828d7b4a2343a11011a8ec4ea82f456e394a70000000000000000000000000000000017a55d3827b78a9c5ea792b705eba7777df74951930791b17ff5b861e98a4488f83007c073c3e904ed4ee328b6f6171c0000000000000000000000000000000019bae02f8d6f1e31dfa09f4feedd5217ade66f6e8248aa98b273574f72aef83d5048534ed38acab9e0eb4c64f4389af4", + "Name": "matter_g2_mul_51", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d7618f228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b", + "Expected": "0000000000000000000000000000000006490c327790b4c451f93197d7db24211a3b4b5f573a6df409206b4bbfc36bd10d2d0c989889efffd8f4daa4a68b211c00000000000000000000000000000000168f224738db3f07af77494f52ea5e957812a1acd62615f0eaa95c1d363cfceff29be9cf3be5329bb41175a0231ced4f000000000000000000000000000000000321f06b55f7dbfd4900b329c914f9ab9be2794e51e54498e18f83ece5bfd205131fbc254bfbf624d57ec2954b05f6f00000000000000000000000000000000018ec54f3e09bb2a6b112b575f9481bf1c85666133051e9c0ab53369d14eb90e27d2ed02dcda1250d5d539df0d0cda37c", + "Name": "matter_g2_mul_52", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e699431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb511244", + "Expected": "0000000000000000000000000000000001641b4ad10da5089164809d82ae47f74e27eaebffc2a2ca3c1b924fc69c1ea80ba3da78c78e86957f6a24e7f75dcada0000000000000000000000000000000014e781e4fe79ea1654460f4b0daddaffb29b287efd8168cb20d7ac6c729f684c5f2a7cfa87885accee3a797febc904c200000000000000000000000000000000001c9a44547f0c5b1f4df190285644c5a31df61e3de7da085835ebda917d5e4163f2deea9a83d641a4759fa3108567ad0000000000000000000000000000000014c3d2a79d80687fd6e6aa423257644fa5d0cf641aaf6a7c5675a810767904166fabd9a2ced0727e3badb932e46fd181", + "Name": "matter_g2_mul_53", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df12051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d83", + "Expected": "00000000000000000000000000000000129554de7de9a2b73340d94d96f0356a2d1c0524cfb007d76a75f462872e831f45553de05f5b6a1f9eeae37af7f6b4c9000000000000000000000000000000000b1ea2a649ca13a3dc7882f2423036670f68aa05792a8fcd72524420e37381a9ca80dfea701fa5e6da57afa534059617000000000000000000000000000000000b7ff27aba408f9759b5109600cff66c03cdb4bfb3dff64a4838d0516fa46bfcf429fcf9d5cbf74a27f70fdccdb1238c0000000000000000000000000000000005a99aec88967fe775c691d443e2dbd45080eec97e686ee6d7b32e801efe6563315bfafd5c7622d0543519cae4417029", + "Name": "matter_g2_mul_54", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0fb96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f852", + "Expected": "0000000000000000000000000000000007997a499b2194cab634750a189cca6783ff17d866d66f5998603f8639d2242e8039222c65b0d14001167a9b09afb58a0000000000000000000000000000000015050fe6b335884a225efcfea4acd025cfc05e8f5fe9a0e22a0c91b55664c118d79887de91f1ae6cbc081f6f55f0067000000000000000000000000000000000195b23c4c2c087082c30600ff00485d169dbd360643d163f1db363f270cd7d4f177c36b4c291d50da4101e67b229d0de000000000000000000000000000000000df596ba2350ff7d3e75b4cbe5f8d6b2cc0e14b3bd6dc021936e3371ba64031f6266fb1d2951801309f22bfb1c4b27e4", + "Name": "matter_g2_mul_55", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a3378176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c", + "Expected": "0000000000000000000000000000000001fa243b548f8f5c2e5d7736ca6fa95b74dbfd31f95fd532b94f81a255c73e7c0e000e20f9ca6750cb0dfdcd2c1aea8a00000000000000000000000000000000132a893a2326bf61962e1855331a53667e6279ed7358bc84c4a7c218b6cff1d3f449954f56daea72bc2779c60f1113400000000000000000000000000000000000091dd23c75dd8266f556bf27ba54c95c3ccab06168e4e6d0747239722afb20f3db27454c6db3a88daab0ef10659a66000000000000000000000000000000000d3b2e3fd358aa3dae983e87b5d1fce6d5688e66ced6e3a2c96b8d48041557295d5932af6532c13965d4b383fb252518", + "Name": "matter_g2_mul_56", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a69c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da0", + "Expected": "0000000000000000000000000000000005095d1becff61df906815842112c6508d6cade4ef5f4b7418f5f01e8c5a383addc1c572237613dfbbb88bcff80e4a44000000000000000000000000000000000bd2561e7bfbda8a48ee038855e37b03fee805689452e9afaf0da4185e0c194e407ce7149b713c689d25f953da36dd1f0000000000000000000000000000000015ba3ae4d4238175425ac5dcbd9e6e9e055b8c1b7752931b524fb546f7bee8723ef2e69351450c6d1ba3c366a22355e20000000000000000000000000000000008c17d77dcfda00a1d75ea0087c58e74263ce5ce4066e979c66397de8e236708831c3a9ca6b35ade8038a28930655eb6", + "Name": "matter_g2_mul_57", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f2542ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd45", + "Expected": "0000000000000000000000000000000005cabaf39b93d7fe15ef6a7a3031df58219bce702a5a77162551a3d916c22e8ec9af2aa20659e7c4ce5f6382a5f82726000000000000000000000000000000000dcefe1a48d8c239164b54771118f7520ac11a7a6b72d8e17be1cd788cad2f26d3a0d9113e6536426800a744be9f0d4000000000000000000000000000000000199d95a44a4334c87aed273a0184be9602ba443d5b8d34f3495b04e927f4687fb88487f586395c7babb4f218fdbecf8c0000000000000000000000000000000010972032f9cb3e8f45447bdd06df82656fbd3ce38a9f7564c6e5d62ea3596c9b7e0a94046f1c65bf0452ca25b15a885c", + "Name": "matter_g2_mul_58", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c56fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f", + "Expected": "000000000000000000000000000000000f250b5e47ef616be106a3334e2f516061eec8f7ac69f08f6dfaedecd76fb1c9685ecdac2c3ddd534e3947d007ab177000000000000000000000000000000000073819a6de38303725aa3a9e5a7a9122b4d1e60ee8deb3554b5e06ef5e60d71517c2279c5066af003b32cdf83b7fcdf200000000000000000000000000000000070721107ac6dac198f7ed1a7f84697cbbc3199a220d1aaf82e6f015963bad863f99190f18a482f730254cef753ba22d00000000000000000000000000000000169910eb30b8fe1ad8f84c4a132c6c74a6ff06ed6e792af3baa6619e3c8aa6cc3e6f687299467ec9554f9e91bee77aa8", + "Name": "matter_g2_mul_59", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87318a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d", + "Expected": "00000000000000000000000000000000106e892e336b2155909946ab73b980ea761cfe8c48b13ae8a5302eacea08b9cef3e60d5b33c6ec4033218ae5761433dd0000000000000000000000000000000015daeaee59f3b4cc26d3da745661e74db8fe1ea115d50ba49ef5e6151a9ac2f3135f0232235cac7a53e1e8a70eaf0476000000000000000000000000000000000ff494d17c735b934c2c7fb8f413103188fdb116fa8f4d4e43262968ab0fa1bdec23b0d4d8b1c2defe624092de36610d0000000000000000000000000000000008f70b7e9f2d7083774fbce3bff58a1c73fbcbcd9cb049cba71c0c3f0c363517c8956240bcacdfb7934d4c67b1bfdd2b", + "Name": "matter_g2_mul_60", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab7196d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a", + "Expected": "00000000000000000000000000000000098f32b35e3b7dc1862ca1ca3c76d009f016c6b91c227f2cebe8f1fe87567d936bf1c54103bec31b3552c077c0242fb40000000000000000000000000000000005380a66d48d348487624a15b63d2ecf6976b5b599901101ea8b1f57736649b4397f6679ecab0ae29573695a921ac475000000000000000000000000000000001710c368f70a2b9cc92ec65c4c2ca35fd63440eb350f488e7c6646f9c42bf680eb62a887d533a91e47988221b46c868200000000000000000000000000000000033c3327da938dbe4630dbe16838229d7d427f3adf18dee6fa26b1c8067838922c1bce78cce08d590ee1acf2baebc7df", + "Name": "matter_g2_mul_61", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f2dbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad997", + "Expected": "000000000000000000000000000000000404587c60a4bbd8b5b929ca2ec2a9ff2ba4733f4f2877478a669b238d65ca130cba398899f2910d6de04615f8ffc99f000000000000000000000000000000000940659b3e6de7c3d8de9169a28e68dad433bda78de0991fe4a1d404e5f4babcba9d57c7f3d638aef264642f87c61fc8000000000000000000000000000000001676ce240e1ff70ab03f94f3ba3acd31725ec306ce1fd707e29ec22cf91746216dd998d03ba13a79dedf878fae38d68e00000000000000000000000000000000098a81422511f77191ee15d402614c86f9447ab78a89cc348414108f36857a1929f2b92ced78752ab3604f276861803e", + "Name": "matter_g2_mul_62", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", + "Expected": "0000000000000000000000000000000010a4ba6952d22a51dbb6762a3f9bd09712c2be5a98bf0ef298d7a7e3a9735ab0d3bf39e40b334895c73a36c218ad24b50000000000000000000000000000000002860f38ef61b497bdaf4faeee7b406007981c17246cfa36cee906452ae85e1c1c6385898ebadc3b4ef8887fff25b8240000000000000000000000000000000002dbbca9034fb17c3f37727d44c027cdf47c36f3f628ea9385fc9fc371d23f22d983656caafbf1cd1f8bdeff4ad7669d000000000000000000000000000000000b7e71b65765c4113a7884771952268a9fe10576f745038912e6877c78372cd261220793b888c43accba1646e902fe14", + "Name": "matter_g2_mul_63", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d", + "Expected": "000000000000000000000000000000000e9c1a6d591be4da37fd6dc283b8d899b625ccc96371dd3d7731aca66cd2a978810497171f2aeded64fa2b10e480de2100000000000000000000000000000000006d2ad7287847255002480627782d513eaf1f68a3d583d4762fc156b8eb40deae6969fa8a7d8f8aae923800091386a00000000000000000000000000000000003c7eae0eda08df9b9eee2605a44fbb486e3bf2e409aaa1c8f38c06f969ff1f74338004b01288dce99be26a837e45d3a00000000000000000000000000000000178174d2f569a9392eddd2715ceba8762c5bcc6325217db5e5f970d6fde069d0e48a824e5b6ca017891de175c92f6b29", + "Name": "matter_g2_mul_64", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e3616", + "Expected": "000000000000000000000000000000000ce12c9010b4c4afbddb459c1b46063a8488277948188b4ec0b739e1cebb5653681d0e43a0d2c6b3f842bfc609bbdee3000000000000000000000000000000001123f60cedddaf4385e63758d64d4facdc443854176ec199ca0df0a9c258517f2512594f2441a4b9a68aa9a2b4a1f4bb0000000000000000000000000000000007cc6f77d181d13bd9736ee23a33b25b0bd969760642ee19004e095ebb8e2b3c0e09321eb15a2f7961803c0fb10b6ffd00000000000000000000000000000000004d8dbf2f0c14b07ebed2b9cb4bc87df78ac8a34ef0b05cbc2c6fb8e8156415399fa52dfb968ef0e6ec697030fb003c", + "Name": "matter_g2_mul_65", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad3a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af", + "Expected": "00000000000000000000000000000000172805bc715a8cfb2e25c384214f4005aa6d3b809a0ad95322209851ef92151526a9d01a914c4d7f0c120b9bf3837010000000000000000000000000000000000473ceaa092a5ac12f38b4065477672deacc08e553d8e9e6391bac0d9ca50015934cdbc340deb05aca916cf50c7915b30000000000000000000000000000000012e85461fbd26c2d0235acf5c8665750656819bb939e8fae77a8d526ca23443aee395a985cdd4b1eb700311fb87e91a7000000000000000000000000000000000246d45fdd88448c93bedf4799becfc7c80e67abd483f2a0aa41e8bbb3f38cbc900314436364f1db6e1d88595544517a", + "Name": "matter_g2_mul_66", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0845111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d145", + "Expected": "00000000000000000000000000000000122e1f2081cbde0055fc34d2fe61307bc333b35a1e0772a0cd6fb25338c89824bcf2f066bc7b571b2fb314ca7f45106c00000000000000000000000000000000027ed81b54372d858a6ba2faa65fdc132efbca6ddcd56c3625bd9267cf0ae04f6d342209b995060f584be8d40020669500000000000000000000000000000000002a03427a093a3000a1bed9eba91a82dc2f2fcea1a16a1fb8af29c4988b589abe6a505ec87a82864b3c683beaa6420f00000000000000000000000000000000134bf64871d69a72e42766c2903fb4589b84d7772a62f7d2f8f8d02a914f4d3a278c680c626ef4d69de8aa88b57589a7", + "Name": "matter_g2_mul_67", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e109c07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a", + "Expected": "0000000000000000000000000000000018fa44efeabbd1cc47dd9b1a1195ca921c99c77ed43a44502aad27b6c663f5ce2623382c3ddf208f42e3eea741281f4300000000000000000000000000000000138d11e497e3c5656bc8fc0ae4322a0bfb6fc20e249a47a103b164aa3d9fdbf7df4b1e3b0842b4b12568a31992a151f000000000000000000000000000000000182490d6ae35c1208c0d608984df4988d057f3ce5a25073c77cd5b224a5892768badb1ad5cef8f41d1d2022573098c320000000000000000000000000000000002a6e0523781ccdebb75063dc7ad1a9526f9ff8ea1364bae487914f254c0eebcbb2cfc3715fecb9599bfc2f5feaa62d2", + "Name": "matter_g2_mul_68", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c29b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd0", + "Expected": "000000000000000000000000000000000dc7488491433d5b3924105c01ffed4f30b755d7253d867fda595e7d80197823e56e4d182d5ecc72d8ef1ba9bca15a310000000000000000000000000000000007bfeeadd6fc468ef6340a2b394c155bf50808cb11e89adb0de5499fbdde91760e9531c1deb23050286a15e5910f1d5a000000000000000000000000000000000f096db706b08485fd577f37b7bd232b5a10c3f80c25bcf82f7a3b666c6efaac8e856bfe5f7dafb7457e33eadcb4133d0000000000000000000000000000000004460d1f25159ce6df59efbd7c693355af4634dadeaee2ced68124b2a887698c10e9c4b40c4f4f9c8444acb881ceff65", + "Name": "matter_g2_mul_69", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b2263d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf54258", + "Expected": "000000000000000000000000000000000f1aa4a7a22c568c41270d24824138bf9ffc763a5356b7c0bc1d051a0a0db12616700d9214972b63eeb2a398d27dc83f00000000000000000000000000000000020d0c2ff8f93db6b415c2a01712034e46bdeb6e665a5177a3877db9f5401d3dccb99907ef843062e394c1428983725a00000000000000000000000000000000088abeb6fc3ead45d5b261b7d684f168ca8f5f163cf338863e6b102dc40e2cd0ede97c47460ad6f560c27e95c8b71ca8000000000000000000000000000000000ca2e5cec212d581c737928512118e2f51a0d74070f40a998b7b06d22b9fc754bb2fa5499308058be9ab81521d057414", + "Name": "matter_g2_mul_70", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c67a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e", + "Expected": "000000000000000000000000000000000cfa23c46881893f6c50d238a83669deb520a7fffab4f912f77df7cca43f6827a1a0ae0b3f36c8f116ecefa33b8bf37a0000000000000000000000000000000014b7e5c18d2f9bfe15b0c1af3bc6e230039a341e135837d123e91cde9cbcda298c66b93f692232c912e5d7d3d6331c430000000000000000000000000000000009c8984999ecd3a4144ccb925d3e5cae5c1662dfbf8871013b1cb2946482fcb075c489c61b8d6261f2574b44da3fc1ce00000000000000000000000000000000196e7feab383211e4825cf98219c63bf9f45a72d66030219cb585d5d25237a01a97f00e122db6a51325022e69e7d8cdb", + "Name": "matter_g2_mul_71", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a81b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83", + "Expected": "00000000000000000000000000000000005c0282830934ea09c9f51b52cb6dee75b874b155c63076dbac2cbbf220863d55557ff1b7d681fa185435df1522f49d000000000000000000000000000000000a1680ebbb185c8e7d8a197a523a7a5e618f97c46670622034d312b3eeef140150e03b00ae3dff8d9f1d872f3d3dca380000000000000000000000000000000019bd2eb4bc25f5aa6bce206f0683dbbbbb002098a118fcfb060c1353a310c2baa1063a782bafcf6ff6bb8edaf6f1597a00000000000000000000000000000000082edf49a0435e0b9f3dc7f207711d66004ae688b18f5b62fd1596899ee8edfaac7da38973d81f12200018fbe8151572", + "Name": "matter_g2_mul_72", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db1ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de07", + "Expected": "000000000000000000000000000000000b8a715c1c2792a30f7ad752a808b621c34af1fb7f1e3392a36ca9481a019108a21e3ef338a1d05f2f23ac3e2cc42ed500000000000000000000000000000000101375c9de592031c55a7a62189fd3fa3c565abf7c64724796dca3b1c7a6e6834a16ef1c4e2afd6ce2e69487260f0028000000000000000000000000000000000cd385ec8245431d3b1aff88453db7f66a5d7888a5c1e0dd0abe9ac7db752933a343b8be53b7bfffb704768ef0a3dc5c0000000000000000000000000000000015d55c8cddb8715e25fa260d1e1fa672ff76eca7c80d19d00678fb9d08759b810cf266ef0a7e9dd749a576ce07240fa7", + "Name": "matter_g2_mul_73", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b6", + "Expected": "000000000000000000000000000000001311de31229f1825d0bd2c9d726fd71e05828a20406a4705ea65f441537486338022bac4e552bf3c25e15717bee00ba400000000000000000000000000000000052e082cbe36c854a028a041981fed87d39fb218a88208aa1096e260a3932a1155db7f306c32d133070b0a5bb6d161760000000000000000000000000000000003269d4afd20002873f4305018a4432c1925eea28486d657cb458198ff2df9d304bdfc7455233243b1712d8663591d460000000000000000000000000000000013376fb98929cbe7f7d090d1c9d5c4f6332bbf25470aa03c35a70481931e4bc91c937029a5e11d2a3418eab698361227", + "Name": "matter_g2_mul_74", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296feac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c79659", + "Expected": "00000000000000000000000000000000021166263d1a443d5b2eee9aeca3678ae4c2b44d556a7cb9631d47e4fa3bb05ecb94d6582f4ca0cd787027fb5f2efab60000000000000000000000000000000015335d034d1a0ce78e1246a16e35e0075f73d4a392da1e05c11388084cf80bf31d499e57c48f4be6e72d3abc7b387ec6000000000000000000000000000000000deac4ae1900a4e1814624fb4b8c7a3149fa9cff2ca97f02e7d6765e034a1532a7b8475ef7aef5ebb851063cf4b9e79500000000000000000000000000000000161e3af03f226278a07ff3b08e5788f6c5029b2c8293e7a7e3ae11c4d78676b60dc0208cec6b82e1714d976007fbb389", + "Name": "matter_g2_mul_75", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb5198586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d", + "Expected": "00000000000000000000000000000000120b4434babedbd8ff295a6e2ed5fc7af0548d7e60663110050be797584c0cb638988201ae7707cbedf0c8b3dc5ced85000000000000000000000000000000000d2de0a260bdd241a145e3f68a6de48da4c65107a500e02bfeae6ae7dc428026c7c3e9bdda9a3069d2744705df2eda9b0000000000000000000000000000000018a237906c0e277541c4f00c4c2feba7cb2c9b87709c18b62b7c36d78fc118cfd65c127765e01dc0ae5875b9552bb45300000000000000000000000000000000197485daf54e98e097b6bca24b0738682969256decbf3ebc05f6982e4608829f37e2877937b3f26b88efc3deeb4bfacb", + "Name": "matter_g2_mul_76", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d6e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712", + "Expected": "0000000000000000000000000000000005de82540aa67c69b962d292133b09e6593961da8944ce02557141abd19ac471f766b4083db85c67a44b65dad2202488000000000000000000000000000000000cd999bf3cb004074fe9f355cd8dfaa7b9d3439d902fddd2fd0688419b5b7f8c4300ab26b658936a90c0b8e1488249d1000000000000000000000000000000000f97ae779429a5afaf7a3343586eea84a4e76f00a1852ce42a4940babd565bc8d61bf72fca9b123922f1ccfb1db8c06b000000000000000000000000000000000935960fa941c27e74234a07857ee680f53c31047235c6152d1669724bdef37ba642cf4e0dd355443ea470e6430def8d", + "Name": "matter_g2_mul_77", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94685cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a72", + "Expected": "0000000000000000000000000000000001b0aba02b0e907c03d2f4003083c824ce60f2f55f70dc6ec7c7f81f3d0ef4bf533b4c94833e36e8aa7aeec18b7255de0000000000000000000000000000000004fc227a6ae303f3006f75193cef7c653e6bddd28fdb843b41c7d39966a701ba8fcf611efa71abf059d7d98833480e69000000000000000000000000000000001077fddd0bf3d5c80eec653916f9095e900cf165315d74a872219285f62b5412536e43c4cdbc120ec5c7753318852dfe000000000000000000000000000000000ccd90e01c1d4a00f0d9e29a88e8134f2cf68162da66bd343645a998730190114a6921c9b048dda58b60b42a133287f2", + "Name": "matter_g2_mul_78", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", + "Expected": "00000000000000000000000000000000185520023714580a3f235e24316478b8260565ffabd39670811519066844e131e337bd62ed2069bc6d2305e6638e539700000000000000000000000000000000055fc74cc7cd3fc393d5b5ab2419414effb783ff4da2516e5465a4acc195339c7b5238be4e0744b3d7fdbce46ca7f5dd0000000000000000000000000000000005f584a0311c02d611c15163529130a2fb3dc853083e7225b791ce5ff32d5ef7039c80edfff317ce9ddeef84443b5a51000000000000000000000000000000000f9d5acb355f767cc6286cc09f6df232532f9a0e9e4ed1fe28788abecb200e22066c23f3ac6c49c47071cbb023e70183", + "Name": "matter_g2_mul_79", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d7535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b", + "Expected": "000000000000000000000000000000000ceb56d75f3aa1548c50d7780ea1e33c3d069b2f37e7f96be6a8ec03266fa8d0868822afb3b2e54750722266f6032a8000000000000000000000000000000000080f15b7f9f2c22f1afacf558267b5b84f3a6d199fd3349eefa2e46c4f332849c0955d19d4513151dc0f3b566c0058440000000000000000000000000000000013305f8ff6080f7da05c28155c0c2bc1c78d855cdcff0bb2c6b82cd5107d7a070d0830e6705f6832ed5baf75a659c8870000000000000000000000000000000018f4e136859b4ceb230450f9abde0325a4d59db98279d7fbab710305ff53250dae1c8789cccc27586c9b9df5c0c4722e", + "Name": "matter_g2_mul_80", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d52756e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a4035", + "Expected": "0000000000000000000000000000000002a0214be95f020c70221fb4fb6856af7ce3845a4b607340f85127b52f8a204efcd94a152835860a4ddeef84946671b1000000000000000000000000000000001767777740a9922a91c39a36e2cdfcd544df902b31812ffc88418dab7321f73406ab142055b5bb264c187f2d4f2d6f9d00000000000000000000000000000000026e6941364c74997506df0f9fbe6b2769839e8b7c7293f4e63d13bd7bee90ff779cf82adc2f23c569d1e13826cdb0e4000000000000000000000000000000001618ab2ffd4b823b9c9776baf849641240109b7a4c4e9269f3df69a06f85a777cb4463b456023b7001adac93243c26f5", + "Name": "matter_g2_mul_81", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae4523a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff", + "Expected": "00000000000000000000000000000000054ce66b9b0b3cff6637d6cfdd788719d4e33516b98402d8fba54725309307711fb576299ba99104d4e7df0deac9ea2500000000000000000000000000000000055e06ff52cda9116a98ad3709f788d39db53844b7db58a57af52848ce1c59ec2a1f083efe79c5994b9291a2d1020fb900000000000000000000000000000000040c9ad63698ec78d06b41bdd6f5eed089b67f106348f9300f822a2d61ea1e5d2ddda0efd1025825c99cb0e243573f7700000000000000000000000000000000195dd00c48186f8d1337ca857aea02c4d199d638133e9cbd2dfc5f633502f656343746ec2a416465c3c0d4e9d53fd097", + "Name": "matter_g2_mul_82", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627cbd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b", + "Expected": "000000000000000000000000000000001141b59af8fe6cafdf2e247fcb0ee4642a9b4022b6d71163ec9b6ac2f7d10ee3c5c0173ac686b03cd6a7086b039ec786000000000000000000000000000000000f05ba6973c5d865ac5c037583b65eb4eac826b5a04a7ebed1e10bec6ec7dca93b1c2eba70ee0189fd552d5023f2a87c0000000000000000000000000000000002e54475940985ad2115223c5ea3a4c95890f3e9992e3e1a6df2170ab77143bcc5d29b9dcd1ed3bf16e545e9be21a8640000000000000000000000000000000019acc4705955761518cea482b83e3726dea8d1f66a5f19b06cd7ff95828e15d1b139077e0d274b0e6fb86c027844d97f", + "Name": "matter_g2_mul_83", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ada300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d", + "Expected": "0000000000000000000000000000000016fb5839fde95111742255b33f040c41dbd0f142d1daa8abc7c63008ba9f63f07381d9d6128240ae9b6cac5befad84e5000000000000000000000000000000000389a11727c356b8f3bdb6a73bc2f6d2d73d33d287365283359521dcac64f17810bd58c0ec5bef4db253bf630bdd9599000000000000000000000000000000000629a8af1bd0c1b1b6d7e447bb779663d7bae8e895e09418bc350e644d7022fa877496f30e2018f5dd1c9683b2715adf000000000000000000000000000000001950185d2574fe0c8277e3f93f59dc5628ec3487911ba9c3194a2f716116ff0bb9a39dde802dcfaa61633ad7657a578f", + "Name": "matter_g2_mul_84", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa833e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b33", + "Expected": "000000000000000000000000000000000024c03edb9b54034eacca4b321d51397348c57f406b074b16a9d6215e03f842380f5358f5c095fcf5bf3cabcbabdc260000000000000000000000000000000014e62dc442135d729f65090475fb408ebae132cdf2c2932582af887ed54696f3cd15b163f11285b99e8d8f809aa2e65d000000000000000000000000000000000438a2c99df216c67d92b99d9ee8cbd0e9751e538074d146767bde9675ae3a05bdae051efcdc6bbddeb1b7a8288370ed0000000000000000000000000000000007c462a8f5720e442e1917bf75fc3c3dafab6c39c80d0b93d81d1db4080f6e199be092b4b025e7b02efce4f30d00299a", + "Name": "matter_g2_mul_85", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bfc48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f", + "Expected": "000000000000000000000000000000000e8137c15436264b5960c27d0c22be7fc5d56a12f43b3832ad0d7f5abddbaaccefd140e2f7c476b99e6fd9b3a52743600000000000000000000000000000000019ee3caa56f0329a2e2acb8907b3edb21f4eee73e312352796b51282e097f9b10af61805d5c222332888737c7f8e227d0000000000000000000000000000000012cb9c610391940fed7882a5cba08eba4226c36eca8a2ed22fb5e752e0a1a5ec556673e47013258b499268f1de77bdf100000000000000000000000000000000031b769f606fa25b81a982db86a1cd442ed738019e7e64728ecf485cddcc17d9dc271146196178740b9f05f56627b061", + "Name": "matter_g2_mul_86", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e844228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c", + "Expected": "00000000000000000000000000000000080807a0570b628549629d2eeee39de773badaccefb76e01efaecb0ef0356f535d32c3947f0613bc7d847ef8c8778f02000000000000000000000000000000000e8c091ea30465d204ace72015cbef29645206390fd92ba7c4aa0fecae4ecee53c0b06e1fece99511efd8c7e9cff1a8c000000000000000000000000000000000c881c678c94d80164bb3295acf4341fe6c726ca64a1a015c890450e719b85720f41f80369f99ad3e7e3169ede0113e00000000000000000000000000000000008a2fe01a7100afda40091eb0b2b14cd00b7a4d8bb5cf9d9a3847970a94f2035fec7f292c04c38d7e49890e612830aeb", + "Name": "matter_g2_mul_87", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbea417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f1", + "Expected": "000000000000000000000000000000000d17f6d9460566d0543df2666d6ade685565e668521a87fabc58148343085415fee92c32907311c9d04713c34bf7690d00000000000000000000000000000000185da28f07b86885031ff5cda913a85b0e4d07673f456ecf2a9f0fd1b21d99e22442f9b705039252d57380b6a42912050000000000000000000000000000000014a4bde5973ef43691b61b3c0f6c2fdb4bcd6ea88e53e2787a7d93ad6e05ee2e69f2799712520f72b3c577ee278008ec000000000000000000000000000000000d92a565b3d8d0fded054a75198b31c521e3223650cdf762fbf7b851f7ac0fc66b8c86c20b905117585704c23b27e7db", + "Name": "matter_g2_mul_88", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba846561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb", + "Expected": "0000000000000000000000000000000008b1ebd753364a5a0a6296ab48b348f91668525c0d5f7edc4f2d29844592f34a209f9e77f94ebb38ba76bdb3f96063ec000000000000000000000000000000001062e0ff0a67372207052e2520d8b2823764a5075c94011afd6c60288e187ec77e08db01c95dfa195f2409b58c9dc4e5000000000000000000000000000000000cc2b87b613d97a716586f371c457fa869c2b8d1fa1cf4b9e8c34bae23e0544752b997df4711d0712ec11d3a9d96ac2600000000000000000000000000000000140eae891c87c2026f0b1293df2bd8ae2dcb0ab3f8de74676f37c905334ac1f53fe4b75511691dcf108fca51abcd524c", + "Name": "matter_g2_mul_89", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591ccf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf", + "Expected": "000000000000000000000000000000000276a138edecfc9378be4e241d64cbb48bfa6fd4fb1788f8bda870d5ec8b2132fc9ec888ef84c43a50b7de0527def36800000000000000000000000000000000153e90d52c747859f88223555bc8bc4e8b6fc846fe7028de728a4dfa085c6e350f9f1d12b9dca4ca8e07377648544400000000000000000000000000000000000cef00e7217da6df0a6d85f40be69f154300c423e86e54e513b2491e65002e308445238082da69aa9e5e83b5f4fc17dd0000000000000000000000000000000008da1da2a0d1da9d2158b9408dd9b0eaf414d237b8219fa7661e40c1a88eac2f9735d0dd6ad67b85aab85952369e8287", + "Name": "matter_g2_mul_90", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff2f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5", + "Expected": "000000000000000000000000000000001484993096c210c7bebbc4c0bda24b44a70e982b2528215c0e8578ea55f1181472758caf935aa0a3d6820cdad753e2f90000000000000000000000000000000011802324a6e03c3174bbe7261ecf3812c1a97e1be27269214f232274a3bf82775d47c5fdd70fe1c57155068b296d394200000000000000000000000000000000050f43c874c1cfb5fda81059cb7b4808492632fa20369dcfb611e503ded81a49dacff253e31d7e27ee84bab79e3c5d53000000000000000000000000000000000ef945b6f210fb09bf0ad5bbd4b5a6630f43304ddcb396807c967eb5146741f7432bfdcbd7e5f3d29917781efb62e6ff", + "Name": "matter_g2_mul_91", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5440ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e", + "Expected": "00000000000000000000000000000000028233bf12e8dbd8510f119be30ea1fc13b755c6ee3ca2a3637a3bf8f73776c9d1fe231b713396ffc579ef9320a05b150000000000000000000000000000000018e7c00b8047d64ca0c5df54486439c5fb3d1414c2f71cf8a3ed591b7c45bf18b37473daeeadcb625eda638885ddb9870000000000000000000000000000000018b89c9b6bf9ece36f1eac08fc35ffc9f7f964a0a9b19d495ae1361fb4bc98aef8770efb47d9961aff694b878d659818000000000000000000000000000000000eb2fda2c29c6761e35ca4c9772bb232ea0d297582af4f50ef76c0b74fefd414b535e356c069f54ef5224225e95be6e7", + "Name": "matter_g2_mul_92", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a7ae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be5", + "Expected": "000000000000000000000000000000001239935827fb2a269ab064a3ae2bff2555f89bb3a71a47ae815ef755fc1363a89d20326855cfdd0e13f6c85f727bbe120000000000000000000000000000000012fbba047478b5f5b07a582200271a0c331d6f76864f9b6c6ef8ae6b0965eda481eddaf72c7a887b21719164c633d39600000000000000000000000000000000017eb4353b413437244983554a639a9253d105395ff9652504df7700d879cd9a32d5f0824b1eaa532bcf2fea34f8f08800000000000000000000000000000000054ea45475c01ea0557fd143b21c7bdcab6d287bf6bf4f88b6fb06e02ac6fc5ba96f323bb1fda3a1c4d8f42d01d267b2", + "Name": "matter_g2_mul_93", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa21268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c0", + "Expected": "0000000000000000000000000000000015a145e379b7ecf4566a039b753f91e8ad75d9e9c9a20725ce34a900eb9a1bdf66cabee2100208d7792a963d1fb8c02f0000000000000000000000000000000007f0ca14fc4e34bbdf5008d632dd112c7368e037ce019b7c4ec412000ac02302c85ae64f9ab495361fa5b620e46420aa0000000000000000000000000000000017c00a08bba18426dda40e773d79733030b5b3b199a62436ed06b773fd1f10688e8af00e8a223cdf242bd1ebbedbf634000000000000000000000000000000000a17365cd9f7655793682b72e342227048da0cff88f6ace33ddab548ba126017e4b7f7439373a893e3b5803e662814b8", + "Name": "matter_g2_mul_94", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99df9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", + "Expected": "000000000000000000000000000000000081b4dc78b74250a82da9d803876add659411cfb467860b2ac6f0f68929d6377deb71d6acc9ea8fc8c1286b8f92056e0000000000000000000000000000000002c5fde71346a255ee9dc896f654eb2e0c66f4cb4c51541d2bbccf2463ecf0085a22b9d2bdc5bef39d80c4477824f116000000000000000000000000000000000ebda0cd8bf6ac7e86a1bdbe44ed1e15f8ffa1fff92afd67fb564306882f35037b61cf0d93f278f15149c04a2e83041f000000000000000000000000000000000fc38aa811f5ec015f10a99bf175f1479d4983c9d2180a5e3da88b4e9b62ef50560ff0a6c2fb7bda4c46c54551f8390e", + "Name": "matter_g2_mul_95", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b4", + "Expected": "0000000000000000000000000000000007b46fcfb2cd8efe32754306ff2f503d7434168c1c3cbd7c80470cc5a5c8bda10a80bfc0129da349724d2d6431c5ac90000000000000000000000000000000000e1078f4f4ca993d90accbfc036219507bd22d00930ffcfe1227780c00914fcff845698b2541510daf59cc83d8b947e7000000000000000000000000000000000b7c6d9951570e685d3a71b19a38f5485f974f85fe8cd4b4c196d33a18750b278b6d374483d81dc3e15c9b8b9b5dfdd6000000000000000000000000000000001003a239ea4a2f213f0f646bdb62cbe4f98cfaf7298d8b2e0eaa07bf3f939e779caab5ffa0033467c5b297166df657d7", + "Name": "matter_g2_mul_96", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e74d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e125", + "Expected": "0000000000000000000000000000000000ea29b1e059560fec21c3692d4e632a45c88a807c953fa23dbedb271b049d7fc717333b498ed12573a896f872e795dc000000000000000000000000000000000de0d10c47df92010a6635e3403dd6e91a1bf35bfcae82c1008998e86aa2d18a6cfd3f2f1207fde3bb39b723ec4d3ca60000000000000000000000000000000005e2aef9cd37430b15e5e76b2c7870630d255f630c12e865caefe308a39833e00319406746dbb2af3ed32135e91eed49000000000000000000000000000000000c229fad41b0d27ad7b5db33188fa70b97f22e323e429ef65fcf98f5339e908c31df8859b863356e0fc90538c5c49cf2", + "Name": "matter_g2_mul_97", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d553041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b", + "Expected": "000000000000000000000000000000000444a00cfd258bd46f659b09eef17be9929008d3d1c65e46cdc762eeaa2f0b52abfd636e6094e21983fad8171194c71a00000000000000000000000000000000090833e68614be5bf298e04e44527480cb35128bbdecae15eb95d6931a718f66869ddb68352130b4dd8a921ab3f26d080000000000000000000000000000000000994015b1b55340c3839d48320d178b2ffaa0bbff038f7aa63d4dff41a217582fae9613bc537fdeac8d0670c0cf479a000000000000000000000000000000000fc486e2a1680c10ca28d4c3bb22dbccc9572036512645bf868e7693ae4591569c973f9ea26342a573e23a06c2fb4b70", + "Name": "matter_g2_mul_98", + "Gas": 55000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db47cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf", + "Expected": "000000000000000000000000000000001375bd5ee66c330796bd8381a26cefa3f40f8cc8de42d4d59a7adbcd3852e6d632422e6ad9a06a6e497b23b17b1df87500000000000000000000000000000000165d8e7be17ecae9bf51a773da705aea42536d0fa3a2206267da50451f5104ee241811dd0e6710a80c38df77b126c009000000000000000000000000000000001559572407aff34969f83c394d2b095a7ae9f53a8e6c923910f256bb87b6ec076fa6acb85465102fd24d34031f88f7510000000000000000000000000000000015ff9ba89b55ef75f63732dec1e64106d7a912a6657fcc970dd011a03b5364117cca46d6cbafbc0c5049db10fa83fe6d", + "Name": "matter_g2_mul_99", + "Gas": 55000, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2MultiExp.json b/core/vm/testdata/precompiles/blsG2MultiExp.json new file mode 100644 index 00000000..b5b63625 --- /dev/null +++ b/core/vm/testdata/precompiles/blsG2MultiExp.json @@ -0,0 +1,723 @@ +[ + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000011", + "Expected": "000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d536944", + "Name": "bls_g2multiexp_single", + "Gas": 66000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000019d5f05b4f134bb37d89a03e87c8b729e6bdc062f3ae0ddc5265b270e40a6a5691f51ff60b764ea760651caf395101840000000000000000000000000000000015532df6a12b7c160a0831ef8321b18feb6ce7997c0718b205873608085be3afeec5b5d5251a0f85f7f5b7271271e0660000000000000000000000000000000004623ac0df1e019d337dc9488c17ef9e214dc33c63f96a90fea288e836dbd85079cb3cec42ae693e9c16af3c3204d86e0000000000000000000000000000000011ba77f71923c1b6a711a48fa4085c4885290079448a4b597030cc84aa14647136513cec6d11c4453ca74e906bbca1e1000000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000176a7158b310c9ff1bfc21b81903de99c90440792ebe6d9637652ee34acf53b43c2f31738bbc96d71dcadbbf0e3190af000000000000000000000000000000000a592641967934a97e012f7d6412c4f6ff0f177a1b466b9b49c9deb7498decc80d0c809448aa9fa6fbbb6f537515703000000000000000000000000000000000031d84356ef619e688a10247f122e1aa0d3def3e35f94043f64c634198421487ca96af5f0160384bba92bd5494506c4d000000000000000000000000000000000db8fefe735779489c957785fa8e45d24e086ef0c2aba2e3adba888f0aeee51385a82898524c443f017ee40be635048c0000000000000000000000000000000000000000000000000000000000000034", + "Expected": "00000000000000000000000000000000158d8ef3d5cdc8a1b5ce170f6eeadec450ca05952ea7457a638b8ff8b687c047799eb3dd89c2e3c6ca6c29290b64f5ab000000000000000000000000000000000807d135b6b007a101e97f5875e233b41f12bd2ffd77fe1195418a73a4c061248118ea1049aeea44750cd5ec83bcc1ae000000000000000000000000000000000f04136354f45a85a53fb68527bc8fbc7e8c1a0056878012b548a97bfdabcbd3fb8eb3ff187fbe65e1ce233afd2825050000000000000000000000000000000007b15428114e2ea094ba1e64df4c244f80aa2f75bbbf21a407bc84e80bf2a5ad787d02ae8a90cc1c137f0d898edb1684", + "Name": "bls_g2multiexp_multiple", + "Gas": 126060, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3000000000000000000000000000000000000000000000000000000000000205900000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e84900000000000000000000000000000000000000000000000000000000000b7fa3000000000000000000000000000000000e7a30979a8853a077454eb63b8dcee75f106221b262886bb8e01b0abb043368da82f60899cc1412e33e4120195fc55700000000000000000000000000000000070227d3f13684fdb7ce31b8065ba3acb35f7bde6fe2ddfefa359f8b35d08a9ab9537b43e24f4ffb720b5a0bda2a82f2000000000000000000000000000000000701377cb7da22789d032737eabcea2b2eee6bb4634c4365864511a43c2caad50422993ccd3e99636eb8a5f189454b18000000000000000000000000000000000782c14e2c4ee61cbe7be6e462a66b2e3509f42d53ff333efc9bfe9a00307cd2f68b007606446d98a75fb808a405d8b90000000000000000000000000000000000000000000000000000000004165ef1000000000000000000000000000000000411a5de6730ffece671a9f21d65028cc0f1102378de124562cb1ff49db6f004fcd14d683024b0548eff3d1468df26880000000000000000000000000000000000fb837804dba8213329db46608b6c121d973363c1234a86dd183baff112709cf97096c5e9a1a770ee9d7dc641a894d60000000000000000000000000000000019b5e8f5d4a72f2b75811ac084a7f814317360bac52f6aab15eed416b4ef9938e0bdc4865cc2c4d0fd947e7c6925fd1400000000000000000000000000000000093567b4228be17ee62d11a254edd041ee4b953bffb8b8c7f925bd6662b4298bac2822b446f5b5de3b893e1be5aa49860000000000000000000000000000000000000000000000000000000173f3bfab0000000000000000000000000000000019e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f0000000000000000000000000000000003f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db4510000000000000000000000000000000017a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc00000000000000000000000000000000088bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b34010000000000000000000000000000000000000000000000000000008437a521c900000000000000000000000000000000049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c000000000000000000000000000000000d0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c80000000000000000000000000000000008b7ae4dbf802c17a6648842922c9467e460a71c88d393ee7af356da123a2f3619e80c3bdcc8e2b1da52f8cd9913ccdd0000000000000000000000000000000005ecf93654b7a1885695aaeeb7caf41b0239dc45e1022be55d37111af2aecef87799638bec572de86a7437898efa702000000000000000000000000000000000000000000000000000002effc7b302730000000000000000000000000000000002142a58bae275564a6d63cb6bd6266ca66bef07a6ab8ca37b9d0ba2d4effbccfd89c169649f7d0e8a3eb006846579ad0000000000000000000000000000000012be651a5fa620340d418834526d37a8c932652345400b4cd9d43c8f41c080f41a6d9558118ebeab9d4268bb73e850e10000000000000000000000000000000015f4b235c209d89ce833f8f296e4cfb748e8abce6990ce1a5a914b9416c08e0d3a26db89625915c821a5f152b7fa592e0000000000000000000000000000000006fcacb3ee6650a1044852d61c9c20bedc8ee90aad97de8e24670a9ef57483e678db11dd95428915088d76e30cb01a370000000000000000000000000000000000000000000000000010b4ebfca1dee100000000000000000000000000000000018405e4b67f957b6465ead9f5afc47832d45643dc3aa03af7314c6cf980fa23dd3bb8db3358693ad06011f6a6b1a5ff000000000000000000000000000000000c48e0d4f9404ae0a7f10774c55a9e838bb09d3bae85b5eaa6b16b0f4dc2354368117f3799c37f3f7126d8b54d3f83930000000000000000000000000000000007e61f4ec5bc9e2cc8ca471ce4ed40e729b1790cd2c0d9c1cb50e615ec7f346636e77e1cf632c881c07c5385898607620000000000000000000000000000000011dfaf9281901dd356fc5dfece21898a93d9ad9e4e246dd6e18d3ee46d58ab7e77401a3e8d04057e5638ed74fb95688100000000000000000000000000000000000000000000000005f04fe2cd8a39fb000000000000000000000000000000001796abe0d9e4a703962be528e6a5cb65c60725886f925db0e2a89107ec248bb39fa332bc63bd91d28ae66e0dfce8f754000000000000000000000000000000000fb665f5a7559cb0fa1300048a0e6f1ab5547226e86f8e752dd13c28eda4168492e3d3bf2f8a6b230dd57f79b1afa9910000000000000000000000000000000003422dbbe4a06a4c6c9fdf35e54f74b4ab1528abb7249e99898e6fd7affebc7aef95bf82d328dc01d63c25f6a735c35d0000000000000000000000000000000010aa5504b469427eb3584a286191149f5c3c5a745f338278dd95337cd2336d3c4e7532d98eb189fa543824953e7c1c170000000000000000000000000000000000000000000000021c6c659f10229c390000000000000000000000000000000009303f04d568e289a35102b6df883d5ed620355c0eb5d02236718cdaf99fba6e19ef5cee2996268eb9a53ae1ee09bce3000000000000000000000000000000000190be857d602284393305bfe0a29e29a6982ed3f04ccaabafb7e59cdc7eda85c22bc3e8690355c7a0fb7590ae40f1b00000000000000000000000000000000016efd497a0c5c6b59a1fdf2b590eb67a7da8cbe72f49084e7050783ff12a783cad1859e1a0b0ec8ff784c703617670330000000000000000000000000000000017a957ea4d53f4fc8412cb015ae91b38445cdb3e7078d875c465c941e0d9a852c78d90b31b6b6010efe8bd5117e831630000000000000000000000000000000000000000000000c01a881f8abc4d8843000000000000000000000000000000000173ed58056bec9874464d3f23c3e7d3d429d6c8a167fc7f39368830eca839d0eb8260d64ca823f6c785c71f85893d8400000000000000000000000000000000123372d7d4c91a249df8f3e4f8e669087b252ab5d8cf2529a87e4ed3622e4158cf17dc44b473d5debd273261383e8a0f0000000000000000000000000000000000c500eb55ab86381a1725f339f686c7e38ce9113493736f57e999badc661b5b8494d220ded0711e841228a389abdb820000000000000000000000000000000010a4025d823c4262367c53f50e67cffa046e4a1e7c69ff30373772e49ecb310de3b313d83cc41f40a00205722f233e270000000000000000000000000000000000000000000044496e633650ef8f6fd100000000000000000000000000000000152110e866f1a6e8c5348f6e005dbd93de671b7d0fbfa04d6614bcdd27a3cb2a70f0deacb3608ba95226268481a0be7c000000000000000000000000000000000bf78a97086750eb166986ed8e428ca1d23ae3bbf8b2ee67451d7dd84445311e8bc8ab558b0bc008199f577195fc39b7000000000000000000000000000000000845be51ad0d708657bfb0da8eec64cd7779c50d90b59a3ac6a2045cad0561d654af9a84dd105cea5409d2adf286b561000000000000000000000000000000000a298f69fd652551e12219252baacab101768fc6651309450e49c7d3bb52b7547f218d12de64961aa7f059025b8e0cb500000000000000000000000000000000000000000018461a3d444ec527fcbf4b000000000000000000000000000000000027513925b419f6c581788578379995290ab9478e08ecd1999d5e1a05c58144d2f9f06fb8c7fd1586f3ef6a973a3ed7000000000000000000000000000000001292b2ce751f6f859ec7882e14083eac9841b035f9d5ed938a81579dbce07dec2c0202b7f6b25226831cd9c578e893d00000000000000000000000000000000017f36da49414d7706209d52840250eea6f33970fd7eac448ee122f24c62f6a6e09757aa29761160be0f65ba3ce7a153a00000000000000000000000000000000086d471f958f3ff679805751b183fb6310e871ba72bbdefd59c58e95ea62de0820d5affe601757e318abaa5a0c2715bd000000000000000000000000000000000000000008a0eb53c748001536d7ffa900000000000000000000000000000000090721a089bbbb130c21a529be0ede9271a91a2dde9cb2a8e091a19fd2c0a40c390ac2bda8304085c2d6e38e520eae44000000000000000000000000000000000cc64109c67b342b6dbcf86cb60fca7ad378ed6398d89076ed108685c57a07d26e40ed3d5c4b3560b21e519db5875d49000000000000000000000000000000000b0ddd488f5a6f61f087cdbf011b50209a4460c8aa8c5f48c0b30d9cf6cf24259f4e7badc42e1b7a33352949ae566fc100000000000000000000000000000000038430e8db04d205d81aa1632d23919c06f89260c7ac5850bd8b780f8388e53db3a3ddfe98cc55d1c686e582f85b0c8900000000000000000000000000000000000000031133a6c7d698078a7ec7e113000000000000000000000000000000001800ecc167bb714100f31e7610cd3fd010ca299b394c01b1a89afd11b051e92989f6336db5e6d3212f6b04673526d83900000000000000000000000000000000070401d9bba01c0445e0a682406b099f21d16d9c348cc97156769084055ca328a145c134b8c8b58f019d62882b2965de000000000000000000000000000000000287f071bda99b0318e386b27a492a6823a9664084b12acddeda34cb53f827a362ba97c0e652c37bd9d6023041d8c8d8000000000000000000000000000000000fa708ca7dd917541cd02281e525d3367b5ebf5e9353103e1f83f3b894d03d8be7e4d819c123492788855d1fdb63f2e000000000000000000000000000000000000001171d5c4909480aae3b110d01c1000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d53694400000000000000000000000000000000000063376fcdf64c9bcbeeff0f9f9f9b0000000000000000000000000000000004b6570b4a6affe97649b0dd7a0ad0df160b37c332a8a7348dd3994cc6b1eb65623b4a9f0a3f320e7278844e261546530000000000000000000000000000000005f8fb4cf5e5313f403f15c59c79b9cebaec78291f2053c49d6427f40f2db2aa659d3a8fed7c7b07b7a5680c7b95ab5800000000000000000000000000000000045cba5ec3fa9acd1b11e1f28a01ebc028f89f96f814513453c553f58785baca8abd4150f334b405fabb925b71f4f4dd0000000000000000000000000000000013daf00b8f53af776c2e8c08d55d164aa15027611188e294230477dc1c926102088f0451222fd2eff9802db8b884ab9c00000000000000000000000000000000002344b4be368d3b617df4aa8dbdbc190000000000000000000000000000000002b29192945df0a74eed138e431962f1d39978202d247335ffbf29d8a02e982c69e96b58d7d92528baf5c422ed633f1f000000000000000000000000000000000d52c7a82fece99279de7a49439c0ff8463a637cc6003320275d69549442c95184fd75ee5e7122e5575af7432e5159290000000000000000000000000000000006ddbaad6cc16c9e62b0da9ab0196dffe92253fcfb2df9aa2076d3f16b3284997d6558cc4432d2aa1705452c4e951e6e00000000000000000000000000000000175f906a99c9d65c4647807879e5eb781532db184d28a326ef9691f8738af067b6a80147bd69327d219fad7c850a7545000000000000000000000000000000000c896c3f9d64341ba7c5f8a06271dce3000000000000000000000000000000000c86c92c9598dde7e6fc5e05d70a34c7a14cff5f400f33cf6cc26e6bf6d9a0bbc421c00f3360721f51974d76be43bd38000000000000000000000000000000001137d93502ef32471f47890a181d7823b3a86dbfcadcc930ae53952f528d617e742a52e4f243c615cc28163dc31bd80600000000000000000000000000000000088f7f8bcbc6dfcc8005b8308cd4780d574d8530e95e7831e52eb2c9a88b846852e111a8389e3d3a67accf78b08326d200000000000000000000000000000000149e43fc675dd3bde8b89cfeb29456f130bbf674cea0266bd1b2e7de23f9a7294096327b452728411ca58acc949777fa0000000000000000000000000000000474d97a9cf29e85d4a35f6102fe7984b100000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f00000000000000000000000000000195894e95ca3e59929612e77c1075322aeb00000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000009027ceef3ee429d71b58b84919d9a8d5418900000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab1600000000000000000000000000333e268f0b5b1adf76b88981fc305f03ce4bb30000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000123717b4d909628d6f3398e134a531c65a54e8a10000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000679956d49265608468757580db6b8b1821c2eb13b", + "Expected": "000000000000000000000000000000000728c5e6e69b9103d82358cb6ba3a45a677df1c3eb3cdccf694fd71cee94f1e591b8021b0eef638cd9a1d878937b5b2d000000000000000000000000000000000ba9bcf9ccef956f2af8dc4c3fbf1cc8f3f284b04ae8710af6ef4fb36301254c777d4461858fb38fdeeb72c0d8589af5000000000000000000000000000000000224b80a57d30bce4c752664f3b5b5e3443aefa6d4e95dc334821f754b8b8d8fda4e73d03cbd4070d43b18324a686b500000000000000000000000000000000016909a02214c6c0f6682895aa99cf6cf0a22eab6f0b574437ef9c36e9df32ac3b8c5adb9f6b8827df0ccf51b16f824df", + "Name": "bls_g2multiexp_larger", + "Gas": 409750, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2dfb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d93884d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be1000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf494c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e8964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b890000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e2787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c94400000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46eaaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e1000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12dac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5bbb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd108000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb81596fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f818767200000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e977955054196b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a93b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c76000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b38173173459836dd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b7010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd394c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a65905400000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bdb3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", + "Expected": "00000000000000000000000000000000083ad744b34f6393bc983222b004657494232c5d9fbc978d76e2377a28a34c4528da5d91cbc0977dc953397a6d21eca20000000000000000000000000000000015aec6526e151cf5b8403353517dfb9a162087a698b71f32b266d3c5c936a83975d5567c25b3a5994042ec1379c8e526000000000000000000000000000000000e3647185d1a20efad19f975729908840dc33909a583600f7915025f906aef9c022fd34e618170b11178aaa824ae36b300000000000000000000000000000000159576d1d53f6cd12c39d651697e11798321f17cd287118d7ebeabf68281bc03109ee103ee8ef2ef93c71dd1dcbaf1e0", + "Name": "matter_g2_multiexp_0", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca807f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91bebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed8330000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31d411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e176bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b712a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c520000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b1000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa0977064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e900000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac93176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a60000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b859239080d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a39915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e0550860165061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b208792000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3fff396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b2f0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", + "Expected": "000000000000000000000000000000000153da66acafe91b6f13cd739ed3342197310e4824e7aef2e3414654c2678b8d09b296c3f928f3cc489893420031ab800000000000000000000000000000000010f501a96b86343a7c8d8c1250577cc9be6ffec81b5175ed07bd14988c5bbf7f2f3e7111df7d941d0cd267ea191d6ac70000000000000000000000000000000015e0d88894f7f83aacb6710f6c03ae60db8844dd3beec160fdb1df746b1f38a5e23def0893a0b39bee47c97af6535fcb000000000000000000000000000000000bcc275115e87f2f88c4afe8bf4faed46e6ad0c0357884356a26120591ba283f06b464c4853217865b1d2301965f2bd4", + "Name": "matter_g2_multiexp_1", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f86d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045c00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc4500000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820f661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe2346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a8448639a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e372c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d48280000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb3d4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05541776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c4250000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbce7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6eac26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710bebba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be1705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da90f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa4000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", + "Expected": "0000000000000000000000000000000013b49054c3957d1e77ba2dc3ef75775bab9f0e9f76b33ff22e244e897b8ab80ee0749c81eceea259e99b5d2a72251e5f0000000000000000000000000000000012e017e4354ef86f73ec51921cbfdd01e3113cff044a049bdd34e36401712420790cf718bd28afa280ad12104c1851ed00000000000000000000000000000000097f28bee5d903e3c6de14e834d5beea5c847c3106742978e586ba7e913f8b631a69c473aa10e19df9795ebfa3ea6a98000000000000000000000000000000001953493daf65b974b549bb98e735da44b543d6fcfd97176fdc7f6f03617d90e6bb952a607fa8e5791df5dc1c9bba2286", + "Name": "matter_g2_multiexp_2", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c7a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac7000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28b473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c013000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52da9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc80000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d7618f228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e699431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb51124400000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df12051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d830000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0fb96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f85200000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a3378176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a69c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da000000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f2542ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd450000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c56fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87318a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab7196d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f2dbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad997000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", + "Expected": "0000000000000000000000000000000000fada9f43b29abe15693d047adc277814cb94694cab3be56b92312ab7666649b8e9d92aad81f8e487be0f74b9ce8c250000000000000000000000000000000007f6891775811a325cd7f548011ad4c705ca0327ea0484d938ce061c913a7ee6978293c3258c4b865d5c2325816c39990000000000000000000000000000000016761f859beb90ea03aa35e954d112da02daa8e76de80297afde9c29cbfe8ef4d42dad535917685a99b2a91b1f952ae50000000000000000000000000000000012a4f24ab88341dfb8a60c19993b8abea96dbd7033d3686c40903728b4fd4da7d07961f2584b51e9e6c05976d555757e", + "Name": "matter_g2_multiexp_3", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e36160000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad3a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0845111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d145000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e109c07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c29b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd00000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b2263d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf54258000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c67a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a81b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db1ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de070000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b60000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296feac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c796590000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb5198586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d6e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94685cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a720000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", + "Expected": "000000000000000000000000000000000b219032a2461a5fd1e43361c46beeae92e30247acadcdd241692abe81691c295ba38a1f0a2a45ae76b1b95d7d0fdc460000000000000000000000000000000016905f64e581aafe928520adc27c24703e7adeb36dfbb416a159cdb9b9a26c9cef0821ccf52f5ea5253b7c9d78769e9d0000000000000000000000000000000015cfff195b2123aa140f963628c41deaf19dfff44d26a38de4547c3d15edef10fe9f65b1802dc374d7ba8fb62117c8880000000000000000000000000000000018dc725cc8d8919a7414b7866fdc54c4467b0f87cf99fc9b36cd65c0ec526e32649f9c57495657a93487f1f2f5769168", + "Name": "matter_g2_multiexp_4", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d7535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d52756e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a403500000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae4523a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627cbd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ada300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa833e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b3300000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bfc48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e844228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbea417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f10000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba846561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591ccf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff2f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5440ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a7ae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be500000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa21268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c00000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99df9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", + "Expected": "0000000000000000000000000000000007638fa4e8823dacb40ece440f8f1e57cc5c3851f94357a5325207db92380dd57a7c8709e4d00b670e8af1b77368285a0000000000000000000000000000000005b66a6e6b13ea0eb367a61ffe7c620d9edf5563cb4cc0cdfa68b99d9691cf9a40efd967c1e880238eec313eaf4c92ad0000000000000000000000000000000004f7156c69ea88a71a0af2922d1caca24055d40df058eef02bbf95d864156f62fb0e17d9fccd193840c36ad8449bb4f7000000000000000000000000000000000b8f46fd695c5d96d939d42c65c3b709d32f134710a67909dc4bb43d752521a8d4f0465d0590f30f06ce42bf5f8cac28", + "Name": "matter_g2_multiexp_5", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b400000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e74d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e12500000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d553041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db47cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf00000000000000000000000000000000196f78b64fcc342ba4f4edf34a3080ec950532a5de21a875dd061f09351def5ba3b85745a561e38117a14c20d33a14610000000000000000000000000000000003929c2bc55f323d57dc3529bcf6644e61c941b72b424d69969c1cde7a804d157045bbf6d5b79a3e6686509e11ecdac0000000000000000000000000000000000f6b659818510cde463c52cf00bd99da045c80af4d5cd0e55f9bdd81f34169fe869c519f37a98ff20c56db554469087600000000000000000000000000000000129709e97757724e765f6600c2b1928286efab55ec8d16876a2a3210bf9d31cc5425265d0576a2d5469cbd9a6c8c27c012adc8edb64db5bf0ed6724f3b54140ed6c81ca65ef9d1b38c8bca6a62bfd3c60000000000000000000000000000000009f5f167c9b61a0ef76415fcceff04f3fa57071c2d79f443ef8a7e6049cb1352f650ebd8f358904bb432d42772c29afd000000000000000000000000000000001524a875d73e03c53b92465bafca582479110611bac6a98fc7d76966e9781308a10cb202289c0776cf5c36515733ccf900000000000000000000000000000000002b1acace94a6fe196b217a9aff413fe0bcb55122ce9e344942843e5afba0d5f2cd0bba14c9c8cb9dd1c3e9024918fc0000000000000000000000000000000018e4f85c7663e596182603862adb559635fdf16ba35fbce7278680ea289f871bcf6755d85654b2a37ae77a37e77ba06ed1535bfcd68e8136808edf89967fbbf76b7f58d1a8ac95ebd4944b9e440f20b20000000000000000000000000000000018ee4b4855f866781f38a618c2fe4214c63034620ea5b72361079b0a5c2b2d6fb9ea73fa202db3a2678cf07219cde81100000000000000000000000000000000180870513afef93870ca64e2363fa1aa43a599db97f3b807ada1c25ae331c80b8ead5cd69b6f5a65a083606591de90ff0000000000000000000000000000000010afd546703baa35a9eabaeb45d301bd5be115557bbb4ff2a0e493668ee790e947eeafcaa923f62ca00b8e635994e39b000000000000000000000000000000001089996b218aacde4ccfca4d2f66d79fe161d962baaf2d6696e1a76ea40af4ae7195e8cf9f6417ffd054f20b65ddfb104c576996d90abde581afb58903cde4b9443eeb65e21b0d68c578e04c8f28f3d30000000000000000000000000000000011757ad74a3fb341c8eb6862978ab3fb5e8cfc8fdbda7d82756532a890d61919cce931872ff339843805e00d8c62ec4200000000000000000000000000000000060783a06e93e82cb08e5dc1aa31202ba11676511300e186ae8e45248b7fdec3b7d5b6849f8b79b8f78ad84f36218544000000000000000000000000000000000ecfd8ab18066fe3408fd20f2a4478156e9a19a09b58da76486c9f6a013d861960b6b99bf49cbecfa8c9d01d5615c1bc000000000000000000000000000000000b45709845d35d7b560745375df79fb95df15e85b96cc1b98cc832c74621339c609018d153bff93f2f5493a52b7326073c558cc615b1c61c9a42b8b0ab4668ffcfc9e95bbe958e72e7a5500058e6b0bd0000000000000000000000000000000003f9de90222619216852356052e9819d7c6e8ff91e0c6f1d8cec832770ed9001db4569fbf579ab16964d76ae7d1b89e900000000000000000000000000000000010b7cf8f0d283cc22942ed73c599115763dcfc1ddc98d87979fc3dce2f33ca3531cc2909d94f86736dda2a4e94a4f0c000000000000000000000000000000000b0aa4d947644cbc7df8d1927cdec66a68862e5a806e25554f27cc1a3701f429fc7097497ad0419e21cc403b472c8ea900000000000000000000000000000000146270ecb66e1763437b824f2ae122f72f20eb93fb30474691a0a192ceb932b1dee111fa44954075335ab360d31ee68d61301b4957a468e2817db5914ff102bc96460a2c5c15e78bd42884b1223fa71a000000000000000000000000000000000c977cb8de4b6e2e33d916f74eb4e42f089d22b54b59fac9aab0e4cafc8aa2b0f8c55d7251662b3499ea140e322dbbff00000000000000000000000000000000106944a9c2d2ecd08e109de29095f3460128bb751051a1f079acb58b6a60b0bb5f52e63d47b688f4a382a77c3b039eb5000000000000000000000000000000000d2f8be1c78995d54fbccab61f816b6ec52dd19aee6aeedc0e4bde2898b2d07c2925da0440a38c4c965a823fff10389f00000000000000000000000000000000183b5d15b243cc5d9584842ab1a0a1e01ad87268728d72aa8c0d7ec6e7069063a11fdd1525d2b30b35e4568da7c44c5495cd2686d24a5bdda0bcb118a2c0eb5ccfe411ec452e1beb3adbda7e93ea367c000000000000000000000000000000000f65ad4c21fddadcc49a8f7bc281d2b7901707f51a67122179fe97da46ea5e1bc6e70d68eb4eb6776307510a67e972620000000000000000000000000000000009003dc68cb0cdec4a502436718f066348f1957ae65ecca8d32c5fd776215cb9a098c0ffe56c92d79dd68d251f49f13e00000000000000000000000000000000038ecf0bb98ff2e84b388c58059ba0de0cff3d5881ecf01d668495ce81b76b00323c665ba88309af5552b7950cc8c08f000000000000000000000000000000001924aa0f460659f552458fb469467a2925fcb2420d4fa6249310456853be3d08bd5c37a3f0a9d6e94e434391d20cccedfb81d555d1e2df92cdb487a888fbedad976dce54b5c46a39893edeac21a12d6e00000000000000000000000000000000189c3ee691387fbbcffdb147c880218c3e5c0bf78c44461ac1bd3ecd5d4b85225e46cdb068049607fedfcca14882e289000000000000000000000000000000000260efc08531083db2839d1413c90968e87d79bc1a2c730f0020e40beb92e84b73ef43e80f7c61e1a30c0cee11b3cb370000000000000000000000000000000005c852ca0aae2c575c65ef18b624f50a32c007d299f24a3ec6cacbcef1d6e3bdba9650fd7d639bdc60a3e107ee9c013c000000000000000000000000000000000321c01a9de69d6b89db4ed88dd48261ee28facc5e26511fb2833fa45edfb58051c8c3ce9501e8b4c3cab9c456705889bfeed84bd95fb955d1b1045c059ffd051324dc8966e504164e54f76f02eb1b8600000000000000000000000000000000183d50635b22e4d620130e0d4008e3bfffae5dadd7e34f4496899ca54eb4d9e3e95c54ae1d9664609c58d02ee5eff65500000000000000000000000000000000029e3b4496a379464302b1476a4549db371f5d6721704b1d6bd35e2344d7679f8a61a0c3b12f287fd86fd247f9652cea0000000000000000000000000000000012c6a3793fd23e955708f5aeb4d6efb670d25a38a67813ecc72f899cd5f926ab7ef198bf6d591328383aaf54f756c66b000000000000000000000000000000001914d3e4b6ea96bb91333468fe8f3bb74636e9a4f2ed198e9ff01b49ba02791d5bd63224f6a38538aceb777168bef688e3b308b95f6d496e6d5b910b6aabef8d9f868471653e8254ab4d49d593180d250000000000000000000000000000000007457f2601621a99050d8993244f026b9a62ff7055b325e6f1edd1cf54065785f003cf7c8a4bb1f7bdf14e220e490ada000000000000000000000000000000000928eb76b428dde37546a27f3d77605c293738f448fbdd6d618747b0de04004aa4419cc5601600419c6e1d470c15982e0000000000000000000000000000000008074e9f5473492dd2e536f7b305be4e5c564cfc9218934d03dde6dc5118064ebaa5c26fdd1123a9c31336c37c1234900000000000000000000000000000000002bba1f9b7da6abd2b322c8f11c749b2a284552eab25a77d21b38b028da477a3ffec1901a015e81fe2893576a41e4c0bd4ea92e0e776be341c8444d4040ec121a2847256c5c9bc918adb28618548b0480000000000000000000000000000000003760958eac45397eca1a1d951a80265a728dc3c584f7dae111e7ce04248885321b69b334b00cdb0334a362676c2d32f000000000000000000000000000000001031e4a63129ec40da5fe9dacfe148a67662eaa00e1fd5c30336462371c167348a10e50f4dc18469a1a6b76485f77e12000000000000000000000000000000001412dbf993c557323426b486f18a91d16b4baa2c497b30fb332a710ac901c96d46a577d04ea87afb08258aa6d204a1c9000000000000000000000000000000000da015ca09ac0c3245c090f39852218f46fea62198fba35ebc4a7f14887943c3bd1bbbfbfa300611e45f419b33988e404c07f5188e4c6270a7e9e2f551683c4f9dc943ffc7ec279d15816a7f4910b8d30000000000000000000000000000000015c9121f72e2425cc8aa4c878907628dfe75a903b7f756b9e13728372cba598859d20a92a8297d95e1fbe25fd1cd968300000000000000000000000000000000025a3faebfa53918efa733949f914be08b791794bd4963f0c3fd78df48b14ad214374b08299327575c0731b54eafed76000000000000000000000000000000000771782ecd9980da521618af2f9eb55d91d67b20ba615c7b3cb1a48d483ca405fe99a1cdd17e4dc7aeffce586987d41900000000000000000000000000000000136000da90a76d538f336608ce877be943025b4c8bf15880ea9c1c001c20c954292d362dac9783b7bf66b8d51ddaf0f2a819a0438efd7ec0c1e3eea07ba201af6a832fecec818adbb781ad0c23e81dae", + "Expected": "0000000000000000000000000000000014cb24001bd933b1d5866cc3de9f4b8479fe23e4fc26dd210f9d06e7a05449b9f5ac4e2f48fb847599f625824336bf1e00000000000000000000000000000000033fdb2e899427f1cb9757022c5b614f08c64b53583486148b7431311a6f15aea3b968913fd5f3e9b624705351074be600000000000000000000000000000000035420be9c7ae3203d0dec61ecea70e22e62f50368be870e74f9a7349453647a7f61d2a42cec6522164cca0c7081d4de000000000000000000000000000000000fea43388e9f6e31d419c7f9fbb9839b4cec04163a7b401d8f7de73a4560fbfef4e272f1db9c9d5b37693378f139452a", + "Name": "matter_g2_multiexp_6", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000039dc2b60389f6c893c44072f4db23e7df4c2f299d6b70b70784d9370d9ff8e5413872c227074d429db999d30dc9499a000000000000000000000000000000001702273db356abe7a3f91a9fe4bf56584f13de4069a91daa6c0b552089bef60da98d32c615aa5610842dd8a507f9477c00000000000000000000000000000000095285e8c508ff12da79e16e0391dadbe9a823c586a049e729596864c3cae117305c05f009f9e8ac032abaec8a63f8de00000000000000000000000000000000078fc70e926decf7aa4c2e4b395e88f367757dc47a4cedcd5e632c456a4c160393837196af474948ce6ad53f830ce8aeb15af019ea2de662bf187930caea19d0aa07a74b49fa7d1819a539e06e4c69ff000000000000000000000000000000000cc3cb5e7b033cff3e5cb01ba29ce8e9f4a93e836ddea7d417f7b07ba8aa71a0efae2e1d7a8ec70bdff12d84d229245200000000000000000000000000000000019ce3c830505324b9bc7cda1fbb328150d71310f06a8424dba861d67a7bc0428beaaf697646d22cae9e00477cc8066f000000000000000000000000000000000f6ff67efefa5636b104a0351c90fd3e89a32b8a9beb0d123d3d6ae42eb5e8bbc19c7a972e27762daf852259c65fce6f0000000000000000000000000000000018d98c43fe5b13b701749f4a5dc25f0e713d241d573639fcc73429226bb131d448283338a909670066045c65789bf9e7064a6af51c1d499c4c28556ad1255af7467bc750bf2db2842d626647bdb3346100000000000000000000000000000000003cf82958d68429503265dcc7d88a3763cca32baefe3c8d32564cf30e8e6b8255d4a9f6a76bce1da473b50287deda74000000000000000000000000000000000bfa9cde6c06b2a2ff8f877ca90b3827d0aa0408c4ccbed23ad461433dad71017d4dd387f49c5febdeafa17d06ba784e000000000000000000000000000000001770fe70513533d91c83449ea52964cd8b449aa81f71e71995db5b19ceddef18e2919439c80e10086e670be669696e4f00000000000000000000000000000000194c20491c9d5ed827cd9d370b9bbec55e4a7b1c34ddd1d80201e7019d9487a747b4fa57b480dbdd09af73aa4f5fa0e9a3daea5a083af43711fcb09282b66882ae5b5b8e1714e9186f33ac0dfe48b7ca000000000000000000000000000000000a79d9e0ff43249ff54526c5e1cd55a9bce93adf272508871326c933d526602dc9dae5b6f129a0f1c38139ed1c39be5c000000000000000000000000000000001458b554e0387c1ddb9dee9f4e9fba9c81c15807f496442f4b7210267912b9439a19f95dc80a1e09a0e5cfe750f43c8800000000000000000000000000000000012c06b19ed4e8d5d1b9fed56bc5bdaa3bf0112db997e33aa14899d53e1bddd6aa91dce7e9d25473b66b8578d398981f0000000000000000000000000000000015369b2228e728894f2fd7c2d8c41ac3550da4f297de445cc0f0ef7134c478f526987643cb5408a0bbb79f5f983c085ebd682acd154f6e16a583ca4968d28471653375ef79df078b17b2cd9634258dc10000000000000000000000000000000016649a8231407074af5ffa93f9db5a2ddce8785be8ee77149602d6afa24ab30b26d2f74bdb5f7464333924a817e242e50000000000000000000000000000000001b990f5ed0b23e113042ff004236646c6eacacd99d1d73fe0c3d9351ce8d622327e827b2c0556802c5657f8f06062a4000000000000000000000000000000000f002a2a5ca90285f9b2fd429721c2daffcae5fe48c571ebacaf475606f96cc8350ce88a850ed75e5aae59d445249bf00000000000000000000000000000000015157fe1a767dabc185a8dc8fea3cb208fd995ecd9acab762638faa987f8367ff7c1a60b657be6e9461acc9df16381e5562223d3fae1d303a01ee4642fb4cc70f21937ba7fe377260fe82262a8455a7700000000000000000000000000000000073884ffbe6deff99cb4b0ae1c0e91e2f4a8c2c7296339b1d7e117d5d47ab055743d643155680740befb379a1dcab666000000000000000000000000000000001995bdc23991dd4cbd973e915a16691fb860490bb54011384c553dd14afc37fe673d13950c1e7eaa29c324fd9304624c0000000000000000000000000000000012197a19a498cd94ecbb3a409337b04e76e1a52715c40203add20eb80f7eac66f3386242d51bea34ea016d778248836f00000000000000000000000000000000101069ff0af2ac4dc7a5bf7bf7b56d82a310d67cebc41a9abf1e1af489e1acef3e726fe9571b4382777573712663e26caf1d0fdab6185e1c3f9f621ddc169ba92584db0b40b6ace7ed563eee0090629f000000000000000000000000000000000849b88e7ff52d8136a120f924b20b45ea9ae654a0fa037b62f3c275f0661091038a4c1d6ce7d50512e628b6b397c9f6000000000000000000000000000000000e50e82e9b368f2e316d41febab6b0f626d6588b7217b4e28eedbdf50a4abc9039be9e66c97790d12cdedc90873993e2000000000000000000000000000000000bc5d2bdf06fda1e1d1f5c5eaa7988dfdd790bf4d952f5d3a532bb59edf619dafcbc29274fd3661a35a3f15933b1849300000000000000000000000000000000162e5ce45499e620d0977fa26a291a8e75943c4b5a2a80be395ac9b89767ea5a06606d6b75ee4c8a286d2ea5a197baa5e910487c91f3839d5961f02a67f3b357206e406ba207dde969498e40d4a26e880000000000000000000000000000000005c11afc970544b96fc1a4cbb27259e19b5fd588d1be1c8f19eb4f111882292a463c951521388cb8cb743e5a4a1b57cb00000000000000000000000000000000013dc433dadc122376b75fedc923386a7ba5a363678fcf9edf165a50e160dadcc151b6f402648193d9ef960f5e401030000000000000000000000000000000001893af155aca343bc29989ec2b5a583d020a7558c7663accf6f3e40d0a8eb98ac548e933eb8e2d5fe3550927acc2ed4900000000000000000000000000000000043a79bcbaf07bffe6c6890d95c7e74d127446bdea51a0ba3adb164ea39684bb3ac552020ca28b86e34692c9b36f4384396d32c2c9ef685120995d2244756bd45591618597306193422f3b5df4b075d2000000000000000000000000000000000e6946ddc8a9d73e5b140af80cc91b31b9a226a945a9574f0629566f7ee7650730c5ed758cc30442770ed1602b84175c000000000000000000000000000000000da0abb9f5bfcad73b3f24903e9ef887c660447332e5457e4a5764f6628c04d6fe903679b8dc8bb3aaacde410812286a000000000000000000000000000000000656016c01d3405dce9f7d40e47976bc8a84abc370e7e42849dd0bd93ef1da0bc88e428efea43dfea37dd834cf246d69000000000000000000000000000000001939b2c92c8299d7ec1dbeb9f291c5e1c9481e10df10e6ba18ae695a780aec5a185ed4c7e82dc2bb5af87a74552c2ea32087e21d775fbc2c20dda715e46c9c4970394e40e991c78ecc13a2a5d0b0f30f0000000000000000000000000000000000942901572722e5005a9ef5f948c8cd6f557be8d114d2810d3cca29933a94de3c7658e7e28675c2a49f138d9c98c524000000000000000000000000000000001908e8b815e95ec07a90861ce53f545f0cd44aacc47df40c24d6cbc61e7b28fb91cfb1cb3c67b6c5b38c34fcb2ca35710000000000000000000000000000000017bad3616d8e510e325d9166790239c8c817c68ba7fb937fd5fb70a4219265edf6625b52ff26f0a34c0bf481c482b2c600000000000000000000000000000000023ff8a50a9c0e9ee829ec81972386ea012df5e8476d8c342df6b98fa1faa1382ae921c2f1018a918868672450355c44f44043002a94560d725da2ac44f30cc5f14f52dff5671c6689efebd803b1df7a0000000000000000000000000000000014675ab3efd44bffae321791e6fb35a24b9c07405d9985c685795df2db183ee9dadf18c76cf4095e1e0695dc2c08c4c4000000000000000000000000000000000835f2cf09647061ced2bdf4211bdaea408148100f864f47ff76c0c63a43e44e8ddd9e01709b6ad129bd574d71a1a63c000000000000000000000000000000001017eaeaa6eba76923ff27e5848e5f3b09e7b2b9d55b2cb7068f39defa8628d1c8cedcbb0e1cb5810febc4ccea712b7100000000000000000000000000000000054c873449c738383e9fc2f0f74a6334904171fdb704f5ac35a483ba19a8f661187d36fb35014af9ecf88225466c86e48624c83d846ad2e53f3f8ff5ffd3fca8723e6cd431e89ca29a4d662e82004b60000000000000000000000000000000000439ae88636244d5e09607960fb033e4217343899d044b21e61335425b94a5067c941e83e5a77f4b0690e1de037325090000000000000000000000000000000003a67653818cece3ff0390d097f1bfbea9ba954a85710f5c24d1de1893f25f2863991fb9f330e60cad725708e70384b4000000000000000000000000000000000243394c3459a3af236189ec6155418c1916b854a20b980ca1044b48e23b725dab7c60a48e89f642423c805c117e64870000000000000000000000000000000004c8c9fd9f278dfe9f5e24e0f5b42699bb9751b56520827afc2fae8393c690a63f10e92f77c4a10b0c161408da9bf505b2b2a8a42887ca6dff5b5364d88962068496bee79cbe74de0e8a06209feb38320000000000000000000000000000000011ba67024503301ec72bfad101a48708e3521c8a23c6bf2994078690041cf7eb75675cf5f20c8e82d11145e31751a2300000000000000000000000000000000008ace953ed2eaef19595cc7c9fb1806d26cbf1e888075e3985b28f8d93b9c0b4c820c8e8b50fd4e0b23923d428da3efa00000000000000000000000000000000054ee6f7247296e0748d0b52148a97b930e69991a242767d80bd6434d42b0865a64d3ce60953fd2631aef873d8b2acf3000000000000000000000000000000000077748b724301a8bc48efd1cd66086e727e9872e4efdaf55ba90ad1bed7e229a9cfb79013333b50efb46090ac0bdab488ecb5976f63a38d7f3d8c8ec441b705563c5e3d899870ab5d2ff84467fffefb0000000000000000000000000000000005008a1d62dad51132ad38a226e8abd7421392414acda61111c728713a2ece284b04d75c2bc58d355bb1d3061415010200000000000000000000000000000000189725b7fc48b8a648237021e9a2334247f1cf18ca50008b813978db01667ba08f00b23b3aa0e015f549ff2d5e5c535f0000000000000000000000000000000010483cf2310f64cf0baf556cb2f2828a1c15922547bec03cdb182a316aa86b5473f03373cf7e59a9a78f73193c1caf520000000000000000000000000000000007f635394301441bdc57dd1f4f97656f4218ebb139c13a17e12839091e2e81327f3353c56880c608de824a07a17b2bdd951f4960d6614b098249eb9420077ea5ad11e38d1694f4df33719d1127338f44000000000000000000000000000000000daf4090a229a1ce946064cda1c4b19c88100c8785c69f2eeec3aed12065787ab0abd797ceed07617d55a9c70ac3020c0000000000000000000000000000000011d77fc28355f61037cae3a8342bdf8d11e963495ba3b5d67055f790b1fd632b23565cad77a3d9968d364e4e2a553c9d000000000000000000000000000000001038d7e8fedea873c864b79d1cf8045485299a2bd4d26c5ab5c8d4a073e2c3fcb38cb230dc6ab7e8e228cabc6ed97da50000000000000000000000000000000009de9209ed14d62625ffbf770e8c528594aeddcaf1aaeedb4f3ca973e7b9f9f1a40370cc74b154f3bc641665d8e4d96b7056c7d93d8453be369831dc0575df6438db488780d518a53d19b8f5d22d506a000000000000000000000000000000000a6b0dc04591cbbb1b82a059e08b488fd66edca0f2d264c352f81cb6ec45e50f0af16917fa4727ee9888f84b6c888c60000000000000000000000000000000001369ae16bb0743f65cdfc8082dbe0d588cf8aa5406a095c3deefc27eb3ed462dda9dd4921cde6a1d878a805cd144515800000000000000000000000000000000124e08d4de6e831229005663df4e4bd5bb7af56dfb13244c50410e6d0aea420ba19208bf1a774207e0e0170ad3a9b4f60000000000000000000000000000000011b2973743034a2c362281b11a1ac1c89f59ace09f0a53afb0c2ceb061726c7aaefe274f6dc04e5d0dea2b687a00609a8aa982de1583c25307e9e2c8cf2469a0b1076c6be2fbf12caa8584f34988221a", + "Expected": "00000000000000000000000000000000136ff52e440da609b6b73aa838f2eb9791221291b7b14d902458aa7aa9e37114c573edbe8cef7a98dd07275a8c3fd650000000000000000000000000000000000ba625eb47be09ac8cd1e2ec9015640f416af0e3e0e79d39ccac600ea08bdae7a2bc9144f13168a8cec03ce66b9daadb00000000000000000000000000000000095c51e81b5881b009b28006286c704ce3b002e4ca50ac8ea8e574d1e9665a5b1efdd60568d4a4a656ca6a2d1750a39900000000000000000000000000000000143c0c4b3b720fcd0b044a6f420961e2b7eb5f9f1b0d200de56ca8b02709d819f47f0a6ea7d6b49c4f30520586a45616", + "Name": "matter_g2_multiexp_7", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000da4cf56fdbaa9004bf8ffa12d5cfb3f296ba5262dab079c91bdbadd6e41ee5f89912bffd5df1643146bce1f0e021b3d00000000000000000000000000000000150227356e48f29443a0ab4536e7a2f86f9e63840e23bbf1b091a59f52c27978bd6a15b29b105132298de45e51134da50000000000000000000000000000000017f5271c97d84f55f8b7ee0d73267bb69cdc7565c470a4b531f9dcd29596eaedf46e61bd79e71e5ade7d000c1c1d81bc000000000000000000000000000000001322812590e6c22bd90511ed72553c1cdb0ba83487b00e3adcb01a9abb438f365ca23fae9ee4a953544253696ddb0bf1a18ca15f0d931619363f5ee56bd7657b2298f228cae8d185c9d062910193e9c40000000000000000000000000000000007c59f94693320b01b56b36f8d1c39fc9e01bad289577738e648771d8940778276cdbfd59f07926e516fcebb70592de0000000000000000000000000000000000aa71d6dcb0b225526eb92b79891ef920634a007b87986fc0f776f85195ad7ec2d84b9bc684add947df8ff42c33b034d000000000000000000000000000000001362cbd6cca3d5c1ec68928be38aca5de1f224e7cd4f5c3ab1c2cd589bbd7c31022d4adc51720bedf2580d2acfa0f06400000000000000000000000000000000162bf0f38e19ddca9aaa370f988be9b35461d2a0f46143e8663f1fa549d0afa1596f029cf2f800b027b90d1eda6ae8a2b54274927eb29fea0cdc464271c918826d5249b2180a52a5020480d1020c9795000000000000000000000000000000000eb12a92fe65f79c646ba508fa615d09d86e582c3337ae16f66cd3bd74a9caa9dc17defb4b4e67ad62f0665c9ad1b6cf00000000000000000000000000000000058b6ce2582c46c0fc108a37e1d2713ff21ec8b1d8c18da0e69f0dfec7f2f327043e174e16d9d64f9ed4d3818a302bea00000000000000000000000000000000068192bd2ebc0a23092bb98c23f5792e179913c4ff1f23eb27296a77e83729803764b8db3b7ba4fe154ca467475eefb2000000000000000000000000000000000482b16e876aa90da6da35e0d7495a04d5b0a1d084c61821f23e1ad63cb1e66ef5975a3cef9ecdf2e696e9d9b50bf9b65849bffc842c21277be88dfae0040c54b072ff526731947cbec0cfe963f2d0dd000000000000000000000000000000000b712fffce3e63362bcc246da566a14139a3d12807ba83ab3520b0aa3aa20cecd5718e2b7e00f24e6fa705315bc2175800000000000000000000000000000000057a66fb12f27e4a5268e56805fe2b61b5ef019b31fcdd861e2b0beecdffe1a3a69e8d193815f97740324aaa40ce34a8000000000000000000000000000000001080a9e1133f37288dbc3835e45b6611fe84ec4790e23e5ff84a2f72bfa2837f55cae9177e5a3a918adde777b7298a9200000000000000000000000000000000142dcaefd73d7f6342e87fff8c6cd161389b6049fa077f35076eadd2b4aa66f3a1819bf8272cac1c28cc02bb6440dc42aeff769da1b62fde321d46c66f8ee7f2129446d805ab7f7bd586268de8f57c4300000000000000000000000000000000034c0f8249d6aefe4cdbf84d151ea9f84add42ade087048bbbf9de4a412cc805dd9b608fdcfa34fa224066b5f06d18630000000000000000000000000000000009e235ce5eb936bae00d3fecead8859e6d909da3d57bbe0a8aefaa5efdc94969a1cb2e12642c0099bca4e7bbf9833469000000000000000000000000000000000b6fbab498c2706f0efdb4effaf79218cf4b652a5205eabeb84f05a060da8cd18c8154a3d37594485ba50a8228f27f6800000000000000000000000000000000130ab70e17dc73f773df99cbe3f978bcd3fcb92a8226a1450239d209cc6969e2cecdc0bf3cbbe9a9c1de072bffbccaa952c9e56cfe957b924c9c0294e1c1f12474331c662c8e86288c97e6a8b8b5b20200000000000000000000000000000000031a2c10e95b841ecfcbddee4b458385e5650dec9a2d1e50216d9fc261a9829eb5fe894e47f171c8fd2f4d5d89771341000000000000000000000000000000001378471c7f770672ee82b70fc87af5ccacdf8995df9ce48aa9fc2f638105a2fdfa48b615970665ae4869f1e2dc7988e8000000000000000000000000000000001969517c503df5560628555a8780138e4c340d9d49d8fac4a8a11c894d283d49fd06aa81e9f0db8f015d9372762dad75000000000000000000000000000000000f5c2d9b7fc33167a6e9b5a5fb8c5d16ca009282edc05cbc8a048b835b16ba33515c226174d6ce5f9836581611ab403bdecec569d223c724d162250ed1d074ed9f4080aaae3f44b77df05292be48ebd90000000000000000000000000000000000a6a32f2006c4b7804e99011d934ac91b1b3fa6f5d02c574cecd6570bde1e998f135449dfc148aaa8fb8757d0a7299b00000000000000000000000000000000198beb461b59f57b85d858b730fcf853d967a1592e5e5787fd81c6a3d9d9b40c1cd7912cae21a47aaf78df5540604cb4000000000000000000000000000000000955701e84721866683b4eaba82c2df8a89bc906fb0a3cde565d314cd7278b0c56936205cc8ada10b03e69b93c48067b0000000000000000000000000000000004740253653a0d6cb15c76e145dc0b1f811bdc964f7d595b6027bb012b42409deaa8da83e6ddc3f0f7b4b237eb62b537915ac9453b831c41becd3c1f412cdf5379e9cd5c80bc6df92ecfc5005356d2aa000000000000000000000000000000000f88e1e30674934bf1062ac619f1834f35f804a958e82121255f8087ae08f10525e740ee53d7514e0ee7c49e324513c700000000000000000000000000000000019d554645696b7beae881ef62297283c5b68ad3fa9a84a47c29cb53449d33d6ee7a5a3cb83b6acb75cd41ac3f52fec40000000000000000000000000000000004b32776966e52e8a72c88a689d6c56833296d384e2059d8f615ccd3616972074987f839b4689d5610a88addcd836d930000000000000000000000000000000000fd4d21b00d81ec993d2350f1fe360576fa983754a7159c2e81024a00931d84e419e8b5231ba8cf8f05a0ee6ccea7e558fa60bc7cff4edde18301af2348faa69ed4f31d437decb7d4fe51142d179e6000000000000000000000000000000000177830cf34186191fa295b7f279bc819d8a53452e2114dbfe709971584ec7a2da7453aae3e64f4b14c261e22314027c3000000000000000000000000000000000ebf2aac35fe070403a4b7a5c2f102c67300bfd68af7863b45185b37ade1bc53d46772062189f348647e74c77caca4a600000000000000000000000000000000128dc7846b2dc5c453ba5fe4675d0c22f4d7089624ede05b0910c34ae623d4671979fd73455b35b61a57c51fe2895adf0000000000000000000000000000000008e33a3c3735be035b550613c712b220595a83c1953b24b3efd38c5913fc23df823e00ae5a1c2ea8a8eebbb93c5c721dc29be0b271d4e22d39e9e06db9e50845515880f30c5bfac80bca39a2d8d61ea0000000000000000000000000000000000a060a957a8da4384e3436110657110653685bb621c32810b6516c690a00c13e37f70185958beb0ed886aae5cdd611a7000000000000000000000000000000000b5afbc85e274049985eac230b2aede7b2df1485c9539a4a4eb6aea406d0f6515ad8bbece7155fb0dfb2123919fb8af9000000000000000000000000000000000afa722987390440a33d5103445dcef42cc4a3c461daa076d56fd38e0b220016ed2bb8e99b9a8da4af96b7da64ba90950000000000000000000000000000000013ea6b8d327191e53bc71fe43fda305a4a0584cad04048afc0480f179955cb27f2ac8791d847036470ffeb47aae36877dc8c2e971a3a4b9909dcc5cc6a0de50286294ee15f441521e0f1d2c3ad3a76e900000000000000000000000000000000032b490f795ac3242b8c7185c9e19f0440ecee3a65263dd4e4c9a431571deb7339bc6e2d73ec43750f6f027bcfd674c400000000000000000000000000000000076ab4ab3e8ed6ea3b882fde5cacb3bd094567288699e11f368c3f60f4283c5bcee7b4c5debeac541ead983f5936d9f80000000000000000000000000000000012aa2060e421f4f4249e83ca0ae1752dfa2b7ca958821841a18f05071a35fb9c1448619bd96f8a7adb2202d3ffda8eb30000000000000000000000000000000008b24f29ee7571f31ff86574e654a5d849acbe92653ae1a1d2baf4c9ca6e67da4937bfda51a70931a6e60d90162efb4f21c9ae0132a4886820115e71e280d33378a04344f635c769fffe91e89fa7ea47000000000000000000000000000000000c8b41e5c47babd6ea113c0ad9f45a75d1ef6bd313b768ac01e6f581ef6630ada623c1a27d4aadf543af4055de7f6b73000000000000000000000000000000000a0f73af06f8f0115bf17f7c5db0a6bdea77a8e3d8fd0b52b0d4e2c558f1331f655dc272c86d98bf166b532ec8e45285000000000000000000000000000000000499b55964186bcc6986e7744c52babf47e274e47a202abf6f816bc748baf846df2b5ced2a5f61fbb0aa2047bbaf82db000000000000000000000000000000000d6c2a9a3fa5d0524f772cca2c7e72a5f2da1a6a1b9550997e7a6cac5b6b6c37693a01d30bebe4b9c742b63bd31487a1e1067c01d5565d0f387516d9721f7f4e5253d5af8353db4a55500e20a95f3c9600000000000000000000000000000000143220e1cd08ffaa6db4795ed4aa35f3b12cce724fcad005367328972f2364f34096e32f1f1cb7a4287ab636d0030322000000000000000000000000000000000f2de47a37a55edbb75ff0bcc446611d690d7f9efdd09ca1ebb6f1d64a330bed420bcc85aed8b95316fcac3aa7d1f2230000000000000000000000000000000016afb044b8b8c64547e000f80b25576aa329a4319dcd4f1bbe15d12e6f3bbdddbb52140e6297c637311ef0c7a31cafab0000000000000000000000000000000019e6803c07fbaa075093f6a69f9dde05ba3d3f58e67389d7f096e56df49f8270008ed422b64fcdadf7cbbc8334037682a23bf766a1e1c068e6e8e4b60391583ac197ade53caf0f8a43c53d1bae9f13e500000000000000000000000000000000134125416c7908cb4454ce6aadb30df46042ef2a6b4b69b19fafcb9ebafe8b5579046725590266cfd10fa26e1b5ff3dc00000000000000000000000000000000073f4147cce24e13b9eefad7c69b457acf126bf278a58a26a7c7c6b482edea6dca9725d7e5e4138b4ec81bc2505ce2e60000000000000000000000000000000006125caac1061cd6c556f4cfc122df8e949622a46ca707b48ef088ee5623df058bada1bc0cce1399f0be1ee86225f13000000000000000000000000000000000146e398c161e29c90c8a4fc44bfd5b3dba6f9e80ead561fa3d91ca5f416e06318dddcfe5147ab5def858fb025a1562352c505d4fd8287a897e01517ddbd7d7ea9d26ae4f58fbca172e5265e2b62858b6000000000000000000000000000000000944942effc77ad02c5ddb052acf86f3a9dc4127dd032181450295464b49ac1dc0047790acb378221fbeebd4c92886820000000000000000000000000000000018e1d201b38d88665696ee6cef11fb19f7daa7f11c5a5ccc73e6b66ac7b89df8437c9f07132ec8b69e13f63424ad694c000000000000000000000000000000001463117fdcf17f28956a42677b3ff431cc17ccbde067b91ecd6fae51e1e24ba8d594ea368d041656022611ad3ed44a6e0000000000000000000000000000000009715cc5add17395b7ddbcb961269fc5d4739d799fe9554b3c9e9f59c895ca5df8ec75bda05cbef3e6a165f7987e78662908006c06ceb9188651c59d434988cb5b51a5a75772ba71875444c65ddf0f4f00000000000000000000000000000000007c07cf1ac9b8b28e3d2f1f4ce22b8ee46e99914ba20c7362c679559a1618a906c6ea65c475ebbeca4947019cb6fbec0000000000000000000000000000000008b29f72cda71e0bc2246ead57b2f758b741b9232d87be75331275a5cd63afc9aa98b0e42c1b82cc258e93c97e596a81000000000000000000000000000000001512548a4bbd537a4d5baf673fb76ea7e35b2977216e7b29a6375e1f92049d7b7d5fd5d8b4ae6191f5592b738e149a5f000000000000000000000000000000000cc9d646428135296919808c6ac10c142e769bf71bc1490196dfdd4e1fc7b84e58155bfdbe77a9e684622ffd83e97ad3e8e8724c80f3527de5f0b2b98ecdf0b8d0471e63c0763a89da8a21a70dbf8399", + "Expected": "000000000000000000000000000000000ae9da7d12d0a03cca3b41ad869f762784cacb988eac7ce904ec9ff47824e058e2e211e2285f9fe2aed0b4385949b4540000000000000000000000000000000005b0c873d20f7be1410d39885ce4f79884eb6ae2b2f27510d6f6874dacf2a66c64e56b7aacac61ec88261624936e695700000000000000000000000000000000076c6076175ad748dd68fee64431e5e4ad013797de4528287e7226c3df90233799ed5c8b36848c1a2e1c02591a013d270000000000000000000000000000000001f7f6972121d38ee2d10c621a38448ed12271f7e0e9e4567fe1b5fcb469c7906196fe92c66c37f8c5abc91160fea8ae", + "Name": "matter_g2_multiexp_8", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000139cbf360b10e59c20dd4155af2023d5dfe0681c62351dd541cbed41b6a328aa44b862d1985b132a4d4ca61c95b61ebf0000000000000000000000000000000004af6b5a0f7a02d5c93304be0d31959bb4b1a7a5838dc3f9cf50180c4eaf3d32e68c006263d75f9735c8f0b5f811d3cb000000000000000000000000000000001644937e5ff3b8d2005a2f3b0984917837d44412362a121be481526173a4c61e20d61076aa10b4072b79743c5f7f4c4f0000000000000000000000000000000009bd399b55a59550dd876f35e54a5803058228bd6ab6c9a66e438cae473c63816c96bdf378ad426a236b58b90e737831e14282bc687a00264b4e4678ff238d5205f6b6fcc10040d9b4393e93f76297a8000000000000000000000000000000000f343e5118d7dc3a38e9975a5f40084ee5f2305e45a8aed28ef105f76345d9f5646b4f3924b92978846b4e605b78fdf400000000000000000000000000000000017e61a2ecf9b3403b43f5a10a97cf5088b4f98e5a4513b0912ea7ecef44e6809f10dee60367cf2fe3e903dd68c2a97c00000000000000000000000000000000039f37f414338cab0e12f99b2aa1e3c02cbdee3406d1bd17c359ba899b7cdcff605f894530895aecb469f41628c3da120000000000000000000000000000000001b78bf69f1b7168d735fb4b7b135fe70db79f50e792eedea23f83cee9b48e092536c2ed146c7499cf047c5b4f0a08735307650d6cfc681508fc7b8dcb5291837582eba6588132f46ab8fba674a1f5af000000000000000000000000000000001342346f1b553e29e661c9f6c0a24d8f788db98262d6af86af55d313a37eeabed1183e367ee3d83faa3f284b260e786c000000000000000000000000000000000960c8af3f7e6587cf83baae447491e73cf41e637e1efd730e3acd9793717e57b85530584942e7a030bad3b91a76996300000000000000000000000000000000166daca4ee2cb9516b5178cefef0553115dec8157f6194d24d191cfe6340406071883c89246c0cd5f89bbd5d0f1ee15b00000000000000000000000000000000187f668086b9b6307899d301bdbfec915cf24ac0be10d6897b0677e4f1de6a241f3dfb19225644858be0941530e67d0f7d6a25511ba63f0b7ebd2189cfc4c551083ac92b144e30dd81d27e59dd86e22600000000000000000000000000000000032c3783e701bcb651aef40c91682eda03f9d90f252740612c85a5727f8bcc41a886b328d5ce787031c08ace235ff465000000000000000000000000000000000b0eca06f9fb69ebb46d0af56d3d934b333514d7f31208b4ee2fb92009e6041749028a78246a0adc324034a94503e80d0000000000000000000000000000000019eb24ed35f6c7ae53047814cab14d51ae6cf336d140a17e794d5cf18450b7fac3e6f990e12d340291459197bd353861000000000000000000000000000000001983a596485e657deaedf01614dcd5f4ec515c0050e8068ea02c9833d0b165c0f467107a50da0d8cd43bfcb59db6e710eac8e5cf13de6db37982390c8b6b0474795f479584960748b7ffed881285e2df0000000000000000000000000000000002f1c29ffdf7bf20fb8a13363393d5f1cca5dd9af82888f0102030fdda641abd5532ffaa2669c0c4159a989cef1c5bdb000000000000000000000000000000000bd548079899d49cd368bf5c246aa168fc8c777bb84a7930258502c8424a4b68e1ab20dc9ef39c307e52bcafadb0c8e100000000000000000000000000000000070c18918f037d5fa1aa005e2c80ce6a80b4b24d33ce72a2bd824f9a061af1db236f04d6041314310b31b805b8a674800000000000000000000000000000000014422b173840da655aac6ea4b7a04313d5d0675bcd565258c73039f879176e51ec0c8a9deba9c78c33179a5ba54492012c134652c27da0a0272b0783551ae44db6bf592ff299b48c50c550367d470b5b000000000000000000000000000000000a1be8e39a47dbe0bd19b8108a5bdac582e1d11ef7fe28df1f12da52924e734e1d591e8e33ec20c6d5af5bc8c1161fca000000000000000000000000000000000eaa7a7cec93b8d5eb933103b52a35b3d58214feb8e2de0bba3a0e57e7993a9df0dcf8089142f57f8e0d1d303588ce9d000000000000000000000000000000000089fbfb389ba448eb77722994178ee3cfd15a27be4ed6f4d4ab6ea1a4c10d6ee8424beb17d08190fb18ab8498d4a4fb000000000000000000000000000000000ab02df2eb474735e28c45b915299230ce159816419fe9c99a7da397b7210590705262ee14c2a244f4922c35bcb119338dca9ff432bb483ad726bd20cf96b07ab6f07170a1449f0f1b50ddc6e1a0253800000000000000000000000000000000006508fbef44d36cdc6fb37b6324810ab2a1d94e39abdf09d530df34714168105e23a7d6f7fd9caf31f263b658f16b76000000000000000000000000000000000b5bb1802813f9f8a16991d41275ae6d18532e3dcd2eae091da7256aaddd501855e775b779959fcef2822685725cd43b00000000000000000000000000000000052146ee63ae277911fe491420651a96994a30c7d1b19bab32eded008a125369baed2ec5a963bfd863a83c29bc1afb23000000000000000000000000000000000a180d79335347a8be350a92491760c6bf1fd56604d4d99a1c49bcbe50b2d04b7cdde55b4aea8ddda4bfeb8e79ab6ce4146433a0738ab1b044e059f49a8af8d85546d0e34eaa0edf2b2a6ee466c0def80000000000000000000000000000000015dcdc17a9afbf88b54af22ed2168329bc43ba50d374c0507c790f37f9669d0af167328d50d322a827d45f39724d2b2600000000000000000000000000000000169b83f2567e921a4319fc03b2a7eeefd2aed79914bf608d9e0a54aa71b9cb3e09f1cbfbadaa520c0f77f547fd407ea50000000000000000000000000000000009b7a8ff8388c85a0fe3860f26b09b81b5dc51e00a8961fdba96eb462e1334e9e28a2cdc4be49dd8b96c548c64921718000000000000000000000000000000000243782436fe7cb20a3242a3a21402a43a2c4fcbe77cc7182ee3cc04f4795c269d8a64ddd25e89ba4fc796747b608092de0399ce1ed861c0ebce1d4e811ea0a3d87e21a54ae34e6b5e1284cbb94973680000000000000000000000000000000013ce6856b6df48e4c9e3fc0be0aca5b139e1b874de6ddc148c1c23a846d61e7a531cc889bab99706668a3b69d32b9160000000000000000000000000000000000a459676071c7f3065a6dd7632edd5842db34aeda8fa0e7d7a8ea29f842ebcf2c5fdfa74ee7685caa51481c4f46952240000000000000000000000000000000010c1d9ebf7bed9195cf0bfefad6ba45f1bd19a9a7d340b7c630b9953923efe4907bd75a3da066fe3d49d656f3ed91d2800000000000000000000000000000000039189de73332d5b5a160c296a195cb9d8a736cca23a92948d513da7e4fc46e1ed9c207e86751b3cf1310d8a7284877ec2b034594fa53a0951e2116db1b063345fa42dc8c870e1146f1b00f626dbcfdf00000000000000000000000000000000129821e97c65ad3801c011792f4c099e19919d7d03bf9fcba30b3735586bb7ead7d4f9bd10bc5f0e5cf1dae82d5651ef00000000000000000000000000000000038cfbe45bbdc494988a2dc72dea6a7e36652f5e5a2ecad41b4aeceec05dc4a389e54cd3aab349adbe32e65206eb481b000000000000000000000000000000000bbab53f2be2c471d6e9cbad719a73c00b582d0983e25e1969c0be1faa56b1dfa5b7b55797b3340cf8c7eabc560fac71000000000000000000000000000000000b0db19410e552a2f7889c2204a93c5cfc71c360329e3be3171e88fc7aa1e993a5d089c28b1a8f8fc80d93ba194c63ccc1e6d9c5f8911014f0f540211af5184d96fdfd47c03bf2d7bbbb3bf1a330017b0000000000000000000000000000000019320bb8d29b7b5a7130b87a39e87e271b96656b5a2749f13208520634009c26f9829401d3e21cee5a757782c6bbf9ca0000000000000000000000000000000009b37068d72463e72f3a89b9093c1b09f01770e647b5ff7daa50e0679bb76404cf7729d5575a39f5b9b3b371893967df0000000000000000000000000000000019ff29e41db50c736e12f62d76a28f4ca4f6b0f4f61aee00cc0e9dd4e5a75c0ca965b82698f704c604bb309aa5b457f100000000000000000000000000000000062c352a554dc4bb96b459378c21ec6446e15b868221b2fb745d31dece854bc281bc22827d84ea3b0fecfe5d156712ce6df5a133d3332e1f79f41201f8cb2c8c8d4d1ab0f640c4de6bd6e34884a77aa200000000000000000000000000000000021c52e82b0012537b57fd92fc276e8de842a59355cc15d69a52effcfaa7cc43dbda0c34e1b9af44c2db8e9356b9c71e000000000000000000000000000000000371a6da5dd39092b6108f631a0f4c4401464a109ea1e5d14e262c8a9577e1421d41734d2c3ed73645cc13ef3988e9e90000000000000000000000000000000004054159263ee60f6b1882ad7c376c738c7ed87e6b34dfb4be2fd7aa29ede414c2c6c3ff098c53f22a1c1cd836a6b0600000000000000000000000000000000012d7af6b57c688e1ce90e9f2796b0e525e775fcb6be65f5d2fbe3d1ce1e5d948dcb098c98d495a6e3dd813527b4635258e7219a9d431c597fe9700d43da8b545072f5a27a9f1af99053ac0494087dca1000000000000000000000000000000000e53128fa5392dbae9e40ab1ff0149d5b577d9d30dcb85eb5e4fcdc17c7daf2ff1d6fafd4a1aba88d2e7aeb45a01afc60000000000000000000000000000000012972781f214511e9b78d276767b1b64bfe5b43215c7680c0063b6974f703b209b2929470dbae16f9767a7cba5311fec000000000000000000000000000000000cf6b37c5a60851d03752f68eaeaf37ac67c661f644cf507c5458cb5404d0ce903c92ef66a657b25ce07e5cf5d956929000000000000000000000000000000001835f202705c8b984a4c7a6cd219c718ab27a96671574cf7cb618235d19e9046a15212e0da6233f15f18bbe192df29c38efb8a7a5e48d5f4a011a4aa0dbab22ede62c903414d005d507ea3d77bd47a6c000000000000000000000000000000000d01c6e8e34e646911391b012680f0dd8f4b8d77c10192ac09ce57b6524f0eb8c7f83ff8f26d856e0945d7a909eb790000000000000000000000000000000000070fca42e34dacce0051f9e26c7c0dc328fe652110976df6df77af04202831dd095715af1714b60a99f2177e86a3443d000000000000000000000000000000000063ba43df0155373df59b009a8083b9f62004327b16ad455037487c5b8325e7eaf57a4d05c533e284004be6de79ad1e000000000000000000000000000000000870c2e5a7d26ba54bf0d45ddf0a4c3011152dd12a5e01a80e42bc4dcc784c7ffdb66f9d6d69ac445c1d9aa29586245147f53e2c06664e1daffd7d9b114e12d4190d5d0fa2244d61a13da915c39b8d53000000000000000000000000000000000d84ca02ffb6d3cf6eb27a143ece73d5bf006ff61569f0eab00c5a512c5b46e1fc21e8031d1a578010c9582d75e1faa8000000000000000000000000000000000a41249cf01ecd23d06f6a3bb8573186fe47e5165ec0d447df62bfc236f4c203b4feb8e2a4785648af86646cfb0c4e32000000000000000000000000000000000244fa6caa86fd27e044145557697ea89baf718746711c8dde334a2c5ae3c73d7a0e04fed6289ddfaf26e47a9d26b09e0000000000000000000000000000000017db897060c0a8e3e5d8eca9970407b46dc2c2ca0c004d50a171450852f585268bfa8a379acd01b6d4685e04c0b8c106fb109d9a0a7b62c7c452bdf0a2853c4bf65e5439fdc83aedec8c0bf73a16b55800000000000000000000000000000000071e13963e20eb1dfb671aa4a090973e4a4b7ad3578f8630db8a865847be46c796e6f9e095a9ce558b93d702f8f8572a000000000000000000000000000000000dfc4c89ceaad07e3b4c35d96e8534122ae48421cd4443de478ddf9a8867ffdab279ad745e55c87b731afa7700bbdb110000000000000000000000000000000015dd6b0c26f6821177d0cfebb7f1481a971e7601fb24ea365a0c3127a5b1042eab69446de05b61cb6ac0576752f87aa900000000000000000000000000000000156326c52bc78c82f5cb4aec5de35e3c128c5561dc80da2cb24d68a7e912b1f2dac2078508fdd4ec38769102c082f0f74b0a931b894fbe61115fcf52be51d44afdcb96c94117c75adffcd8729b0a699a", + "Expected": "000000000000000000000000000000000b537dc10a6f518122665f7d78326a4728a2889325e5be7da7e25e4752c680fd786cdaadfcc426343a9844efbbce8f2300000000000000000000000000000000085ba3a04aa8cea82b95dd994f5b3bdf0dcf63f13909aca2c2d61e4275a7ea22445c953b927ebc6b0987e98b553469d40000000000000000000000000000000019cec2e9fab640cc88073bd39e46cd571324904b1950fa8f626e2725936d80daacce2487f46ad23fa8af9c6ca0367fdb0000000000000000000000000000000007039a0e11cbb8bd940eaf4a192bb94ff8c6d6c79f775fa67821b5ba411641c09dfe9fac4cf45eb5fae52d2fc4beb6bf", + "Name": "matter_g2_multiexp_9", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f73a297cd6444809aa11b0756167e71986ab31b52b57d3c0aac5637129b8702ff21ec649541e79644c27f0017c8ae3f0000000000000000000000000000000016f96d6ba02aab604dd918cc799cee61cda4c0164ed9f07d4932fc4ac3eeb92b1e6b40dd7b18cd8d26056b486e57ed290000000000000000000000000000000012156f3ca3aa1e79014dfd92fbb6c785cf0ee449a8920b89ad04355e0fb7c8ea804bbad082b4edc9abd3b24ab0df2b61000000000000000000000000000000000d51b5f62a6e70816d7671bcfc52f11bdac6221a23287286af78605b99ae8bd0c722e485bd0381b958a85f61e05de68368ce22e379ddb8352d12eb597c179c7089c6388542909876c69ee377b14054e7000000000000000000000000000000000acc52d0fca02c3228cd2e5202c4eda297b8227bf4e64308226bc487e5b64738efa4c07a3738397f90251ea9a1a9da29000000000000000000000000000000000b85b853826a28777a5767d5b1966ce12fa8999ceff5d6deab5c947fd19d19de9c103bb920bad615186d132ec22187320000000000000000000000000000000006b5a83827dc7b3580579ab7976a70ee160b712580919b6f5d4e180165e50f5a1698fa7cc63846eb1f5e6df955c3eefe0000000000000000000000000000000006c2957d8adc55931900145388583e5c2d5f6bd784e022702801c38534d2c92c6df9f95d022aa6d800e1e458eb7f313061529338195b665f1b80c4b95b7c3a26a7229884be1f4be9d49e1274a9ec3f810000000000000000000000000000000014e4c5991f9f2ee262019c1344a0843756157dc85aecb15718217a2fbe23fe0843992dcd3953ebe79acd85517acece0e00000000000000000000000000000000076a18fe710aca2875bc102f21782c9649f107684a4edcb0c4538f1a2890a2ae5b46a182d5470e620375327965b6d37700000000000000000000000000000000142a0fb19b28a034d326121458628356561e50cd3a471ee78bade0733597b8b90f647f5199d4b5b1ee6be4e1870bcd310000000000000000000000000000000018f8b5933848813cc2c1a0f079b095d565e7875ba6693eaa10967d496fb47257c9c674f301349dd8f2d22f8857f9d5ca44d740a72e6c8b5632314408022093618321c8c0a8cf2fcd9ebacbe43505a01c000000000000000000000000000000000db331d2b965dbc053b01a61e671d2ee6b04b072b6494e482f48f12221f23e3b1ccebf48046d92b4be2e4283c77f51380000000000000000000000000000000016704f3e1ce14f49df400592ce29627833ed1dbb91ae5f00779eef94fe9ab313c3e7c8da940085034e1a49158043599d000000000000000000000000000000001956d492f5764c6de0b8e9a716766c762620ebd3265a95b47a8ad2c0614c337692108800e22abbe321d77a6cc17f4b880000000000000000000000000000000017149865739d6aed0f2a4c3c71c2d02f8080d9339025b03f89a37a165fe6e5a4cbd489b5fc90bb2cc432e5baab213c8424872a78e340ccb077259aae65d6c448fe6bfb64daf4e2b6ecce2cc9525e35a700000000000000000000000000000000036804da102cce975f980ed5a69e0464241b5de87238f9892c77fc2b6e5ceb00d7a37a45b5520fce5f094f8b9510f49b00000000000000000000000000000000049da8b6c974f2d680a80d2007333f15702f1517d3dc11395662ca1db945c795bf64167840c4df0fda68a69e127b2d590000000000000000000000000000000000e94cc66f1ffb2112e37cbd5b4feb7d65032c2e57260504a42816aeac85648558f6997ef12028655103a8cb9de1297d000000000000000000000000000000000abf7703ddf6995d5c29124ba9a3f890854fe0622d547a4f24d6a60b036ec9e58f7ec2deca5a71e1fce2210cf810e2f901a1d84826bf78f493417a06a800d58dba688800026638316fcf9ae534436fc00000000000000000000000000000000008d22e456c643ce680f5ea14553a9c249a43d4f92d94135dfec85bc58967ec01135507bd8ac3954b5876c5bebcc1179800000000000000000000000000000000022029d4abec7fc9ab3bfddf2f462660bef7449c4093144d9b7d6f9e84f4f1c947855ca6e09bbb3bee4db096978ae0dd0000000000000000000000000000000014beddf6a3fbcd621e2a592e1c87952ed277163ebf390896f7c668944d6e0a026d3df74b0fc877ed560527a80b981d1e000000000000000000000000000000001414af918645ce0d4d1f670333fedf286b01213408019e327d3cb9321f06fae311b598c2f78bb578e85692e6cb787a52c5a3268a8ab5a12214b266aaa4eb562aa05dd19575a7f3ba2d549a25f1900cb800000000000000000000000000000000129f1e25d96b8c879710a81b727b31d27ce9887c245bf908a3768f3606870ca6bfa70dbf5135819d36582d55f230e94c000000000000000000000000000000000e91eaa33e7cacce4e1d6d0fe905c72221b534a72cd51e1de79a25ef0c06ab454a849a241c023b0f82aa07de28e35869000000000000000000000000000000001379e390f2f0f3636312465469b532d876529d58dda8b024b6b81d242af47b5720af4360d5a3172ad80fd9fd8a14ba2d000000000000000000000000000000000775992d5a8ae0640af845fae03dd0b2197699f413f90f6130d21db0dab042324094b36acda26ed86c65821d2d8a29d9e62a7b00d2be967df04ef56121c95c8736efa95e1faa0196e1f4485da82b3c3c000000000000000000000000000000000f5420156358ddbabf31fcc94678866f899e38747e79dba8ae280704c4b199a03eb423ceed18b5cba7e7ce84583c84a0000000000000000000000000000000001127669ef3ba3785a859aa4e942e8fc3181f2703b0ece6ddbee8830d7ffbfe498794f1ca2e67c3ad39ebd33e838dbc5300000000000000000000000000000000138113386846310db8e21fb8bfe40035cd89e51736b491d5f2d3cf5672e6836c25f62eab80f25ab49d16dbb83796aa5d000000000000000000000000000000001711d74ef4995b473239a574fb8ea6edc6eb7a88793a093df4652da240d069c5bf9249b58e9b1e11f7d6619cdc28a5787a883bf845d1ed04e0664d814cf0b49cf8c3e8b8594ae5d2834c753851ed7803000000000000000000000000000000000d32ccc6598af8156f1c5b35e69e7c7f57f9fe18748510605a2a81b4ee09882bf3fb26abf50206cd57c77924ebeda8010000000000000000000000000000000009043d364e0637c60223f9a5db8c50e983746fdf4c9f7986d27f5f4f3a6df487592ea42078f14efcb3eb1b7e81d058eb000000000000000000000000000000000233495c4961e71cffc2abcde4007c0d587687aea905f3ac5758d0f8d9020197adb6f9d7b86a542b8efffb05dce997130000000000000000000000000000000015b084e773e66ab1459825b6e6dba055a96e4dc1d94ac0b640e906e0a9f12d2124a58537c458e6e1b571311b93acc26c0f474e8f4051c4e91124c14895fe9e2516b315d805b79013caf830524fce8880000000000000000000000000000000000e4b859c679a90c03ea4d4b0b3d38211f685db053aede0f7f359f712e1ae808185758546877502d57200da2c2137f37100000000000000000000000000000000173b24ca19436b51aae22838674c41c752536eada3197de6efc98303eceb3e6e8e47ee6679e61e3cb5c8c734c96c98720000000000000000000000000000000005232b8c97a4860a23999d6ed6d173d300ed50b77c7b3ceb4e8407d9d6877a6004e2f76c553bf458b7cfd8d1e6fd364e0000000000000000000000000000000018a115201e3f4eb308c16656b3ca0635e6284169cee3f28101903ce1cab0659c3d83a449918df6e58e8af2e001036b8d9b3a5790750825ab75ab7422f833c671b95c6c58619189db66a6215ce907381c000000000000000000000000000000000131232788aa3038a6b8a055a896af4f8129e3dd3397dfd90ce86b3e09a775e5b5e19f4387f4c02200a36bc2a1e09d98000000000000000000000000000000000eb8cc0455cbaae97dfd05c1246d3d5ee58c286d263184ae342f5c0ef432355a574bb9fb8ec67634f999b6d1419f2b6900000000000000000000000000000000188b8a85a6b255408f074b3cab66b95e0e1a1b5b8965034246dcc196f2bb84aca3a78907409826370bd65cd4c4d0bcf30000000000000000000000000000000009603984f6d9876e9c235621fa817efe45727fd8c4f76abb7b0796ae721701161b39ff7cab4c57850014e7f1750954ab6607a48ba3fa5c033a1ef90260ada14ee50c95e5167bf801ddbd3acb77c3b3880000000000000000000000000000000009003b42c08b5c7d3ee9f6abb96e08e6f537da25cd0cf7eb85a49067746c03566e133b54153380286ef5725db5b41058000000000000000000000000000000000f09b7b754c255e0e3b8435ade64d6960285759495659dfdb9b117806397baf8d3c87e30bee02c9e1b22fa3efcc58f300000000000000000000000000000000003582c08a8de4bbd20ebfa833517a75682618fba2702b6c71a4785f70dbdede4e86ad8e04aae1f50a6bb75842ab74aea000000000000000000000000000000000ec013f22e64a4d4fb6f964e8319feb1ddbcfb71329186545d9b9d7f97d1f6a56c8aad03d20e9c30966ca932e1f2bc67030db724eadd2f487d31dd4354b5c0321a7983aead21759807bd893217c4d40500000000000000000000000000000000025809fb06c8a31f31ca5b4a5c795bc93355c78d9a2a4c1d707e32ff2a71d94cc1bf7b709cd5d6a183cb05fb6b5f360c00000000000000000000000000000000127bd8c9ee6388905ffe59bb0fec0e42b4aa44be74e5961dc2353e474baabfea86c41c6173db413ee28681a6bfd3ccbc00000000000000000000000000000000181f40dd8581b9adb2981dbcae27c7e906138569ff41a833ed3e6ee4fb0baccf2ccbe5b28ae2ff8e08c4f534116b58c40000000000000000000000000000000005cdd822cb47f35f31e0cbc26f6c957d51c6880369af94fd84daa1f1ca95e41e240b910f031585842fd2dfb170d618aa88e71d0be8fd050f6dbb8b2fb3ae2a9e593bef7a5163255aabeb07282e8793e30000000000000000000000000000000004a06984a3916820368076ab8cad6ffffded2cf1e67ac33f539ea8fc7a79580c1969e55b2a2fe3b31de912d6606c20780000000000000000000000000000000008a1152a581b6fad2a23aa8b0b51cbe523e701193207c896d08b99a672dc047498e565a568b79f8f9188767ba95212be0000000000000000000000000000000003539e82e5b88ef660b6593fdfd9591ec23e7109642f4aea0570f1f8f8e00822d2af277632ba74910459535b35ad47120000000000000000000000000000000015d3441f621c7e6922c489e474f80ebeefbef66cc59e4350b6f803e409034b7f498be2dedc97d902590fc1e296fe983c26989184bb87a586b8752733f9ce9ea06422c6a898f0f402cbcf760a7a21c95c000000000000000000000000000000000f775e13276c2e32dfde955009422557f332fb42dd9ccc3246d2b080e3ec44d910aa734478899698a9b04f6fb1a8f922000000000000000000000000000000000460ee4df6dd0184bcdae6d53cb66967c2213fa878a829c3196664f8d594ca6d60bb2a56f93bda3b0d2e6aac0a1a222d000000000000000000000000000000000fc9bf81d4cc80ba4e4df7307f976c2ec1ea2415df3c263cc970583824cd83703aa994daaa6e5c20450da2ba90a242830000000000000000000000000000000011f08ecbda9a192b232e8330ccbccb16a26bcf4791707f2cf52c2e11a8b3993221666563a772d82f4665804275b03b613d1dd9cc44b30a4623a4d14861688cb678bbb8b2f8ae3ba140f60e64c05514b100000000000000000000000000000000027fe7ca0fdf1cab9a52e304e55350195492abecce4289b0f1c02235412bb012803e7eb59e23c665ea86dd4f74c35c440000000000000000000000000000000011301ecfc78ada92885bcba8af75da6cbcb448e0c49511f3ea306f4ab944f5bc114e72f473cdadee2d0e84021905c5300000000000000000000000000000000010eea529fd3162ad7b49638a70f6f2c26a6844251b2c2f9f8ba54cd334914e84e5a1ba9c7b4e7a8b9cff1a909db78bc8000000000000000000000000000000000b8a6235a7310d52fc8050bcc484e6ecf299099e193f91bea9db31fae71fbd14978984a9e6de10939d0fbba96314b0a55639d80f55e24e05e3d943340e324f6738a593a915a6bddb40f01bf12f73daef", + "Expected": "000000000000000000000000000000000de312093622aabdc7523cd72f568060f4236c7287d61c3372bf81d9bfebfda2795c3182d508f0268d8f445f6ea0a5f3000000000000000000000000000000000b027f117583406916a8f139d47227bbea28502ed0df91cf0841345435376c944a587c3b4bd60f8ae0be7c7bad1c8199000000000000000000000000000000000e9a7b96136b26b0044b11288d35969c17146241aa529e581a8fcf000c33fcfff2dfe1e55c0fb63f6032d0b6b0cf81180000000000000000000000000000000002a442e740ee390d87ec657fc218b76adad7f6a766cbe8f34f4824ecd1587deb3706af77a95c1d5f8e79eab1dc482c45", + "Name": "matter_g2_multiexp_10", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f54bcf1637d03854cc2b785e52bde25de7e45308048ed8ec0169069c2124871782bd9d26471014d039c9aa022e1a99d00000000000000000000000000000000106698139b096a5a79d43321ea64adb783011f04e5779625c9f77e5c390b46ef0d249387e978e64529bba2db8d7aef2f000000000000000000000000000000001668d5261a4ba37d79c76f44eae9ce2aa3e216c5fbf6cd2e90c6a73cebd8b59600303afce70de3e83a08c20de4609b100000000000000000000000000000000004b1b122cb55e688f8297913b84d466c6f3d99c09f4b039660238c8bcd0b7f6977851a6ea4b1deb01346db06d75180c142fe1e5b3c0245e5cfaa1ee8dd8ccc4ea8878ce2272d152fd8b24032297ac01800000000000000000000000000000000192a28dbc40d5ceee4d33b5c2778cacf8c3ed7d3227e7ea0d6fbaa7cd4a81134b63415f4f1960656b1fed15023ce3a4400000000000000000000000000000000138f296c45594a930b949756d0ae14dc9a720bb2bd9e93c7895268121a086a9d55c10135962a172c02da1eabfcb8caa20000000000000000000000000000000001605ef8182fa13a09a6b7661472296af2b0fdcfd7b051e7cf1d9e6d7c7f4ad9521d7732733399bfd5d09a088f25d215000000000000000000000000000000001928f2e5d47d7273e035114cbdeabaca724409a56056b4e95a4ca3b2222716b3a5368da3ed406d73f43e9571d1e04902253bdc5565b6ebc219a75ab74dc5ffd304c94e67160389f87111899ac07a71b70000000000000000000000000000000009b35f132a903579d82cae6a321c1ec7fb0281c3e82e9af05c3b2830ecb4a941da5b1637c1bf0fe9a39fcc9ceb0d09d8000000000000000000000000000000000eef9c0846064c866ae07b3709091b8bd48bb6b20f995b44fb49e030b5cb6d78b7f8201704b53697190a5e36e9a4541c000000000000000000000000000000000a98a5d0d5640d6399a3580036f0e5cd693a7cfaa26438a00767d5ffc0777b83c516316d9cd4597cf8601544038f4d9a000000000000000000000000000000000e59541068a62f105a0d26a5f79fa5fa8b41b2211f1fe674d84dd853663962d64a7f70e785b51ac3cc07267c73400fe6acbf64f93f6f85805517ddf0358ecfea1fd58a3666b8dd9d3773a28590fb8a13000000000000000000000000000000000157f58b1c7152a7f931bccd9a79073967ec28855a6d74fb8727f59c5e3728fbf07a5032dccb28eb8d8b24229f2dc1880000000000000000000000000000000019f41bbbb853edc1fe3ee82f901e613107dd4ba1d880284ee95a2c4cfb2220ec1408f8bff14defe59775136bc75b4a1f0000000000000000000000000000000015538789157505a0798aa36fdd171e0bb14bdac75339b35805807c18bf9175d877360748f97a8570754af0e28e89df660000000000000000000000000000000010500aaa99216aa979acd66c5b0cea2a6a973f1cd10c412e823c61cb897bce54d783a6c0acee22cf9052166a4bb5adb8d9d3f97893eb4f14f21f68110f612a444815fbf2f76b8399ba6045c8a44270df000000000000000000000000000000000439729e13e6a9b5baafdaac65783ce79a5972791610a333224e61104d15c746d7cf8350e619f0f72cb73635f6795c5f00000000000000000000000000000000092e3c976a4a5424b09e50e6513a9e1f427356ce161e742be31f0e589e9ff862460d41281f0bb2d27b1837a70a5938fc000000000000000000000000000000000e0e51e92ac3cabfd999cd72b67cfc488e150b11b18f9a31b1c2338fd4f2c58937521b5a107752c342e67666b99fc42500000000000000000000000000000000023d8884aa3f556e98e006960293230ac966ad18f3f715e6ab31a6bf0872c04e6f115fb1608cd87ffb369ff31012a11705fb554531f53b8cef8d93566df80878baa96f92bb54aec19445980b1a1f6c34000000000000000000000000000000000be33bc145611afdbadc636e9d7cb7e3a9c92c32f6944a2b7b5f44c248a0754c174e3286ad307fcdb2ea02a3578aa588000000000000000000000000000000000457de1fa8642d302065319b1d32009c64e7d941fb43d1b3cf455248664b1db516379df87aee05a651c132eab8aaccb5000000000000000000000000000000000a711f3bf1bda60ca49271e8a3143330cf924328d3ac6f7a802c15be1d7413e300f398274f338e6bfd0225cd8ba25fff000000000000000000000000000000000a786c5c7b4f1701e292aaad9b2e47bb883409aae0c44ae813ba48f401f4e2146ea0b1d85f2ce862b6ac9ad3015d4b14d79ba2c485f0aa0e35212fd7fecf970258903bd2427c4c8b97c2c425ee1190990000000000000000000000000000000007d03697e195a6b714fc9785b49e54e219694250cf5fe77553434eeced15422de3985f8c736996c1763d4b9248a7a7e00000000000000000000000000000000015841a70a168d2f356a8ad929e2d1433b782351f4833c51b50f3a1af48a85468c2ec02699550d21bd919203df73abeeb00000000000000000000000000000000170902520080c46faae2bf35de396d56921bd0279fc889f0187adbabb9ae52b849269d8097d5b3f331dd5a817f9b2ff40000000000000000000000000000000016846a000f037eaf5953b7c4b477e441ca4fa738895aa24dfb0ef01a4c8fc21a318d40a9424e151380084578ca413b3344c7017258bb979cc9bb8acbd3a3e62eac7aa152db46cd7398ef07edd031e4f60000000000000000000000000000000001a50509bfb12040c0271b231c566d13510e6ba84448e59685f5bfbf5b008fdc64cd5e9456beabd23ac011b071e3a5fc0000000000000000000000000000000014a964c9faf1752170ca40cff1b9b4fa17f8d2b56a4c4bd7ffabb65798771cd624ba61ee43160e70731fb9b07af8ecc2000000000000000000000000000000001822ceaae7bd0a734f57b67e4834cfb00a6b415459d81c7d380a2e5b5c795eb1b6d63ddffb1131cdfdf0d76852c75a70000000000000000000000000000000000c5a1575b30e5470151ba055f577a0ea49cff869614c50194829e53a3e1a95847fa387a0f45d537cabef3a5925e61c432583e821328ae90a7db16b20525228e8d915bc8d46a642cb0a06dfb64168cf1c0000000000000000000000000000000018cab86a0d70fa30b4df3e05a91eef57f6505cbe4bb7284de56d420ef3bf315be9249eedfae92561c643bac2c92301ee00000000000000000000000000000000098ca598ccdffa9bc9d464d51b46ed8a8f22a87ef408cfa45fa7f78ae2dcb9f861d9d6a571f6fa702a71e783ee3395cb000000000000000000000000000000000c073c0a323c3051c302c0558463a5c030539d74b440fdcb16b42ad5ec097e10c16bd9a651d149dd719fb1fb865420a9000000000000000000000000000000000164e622bfb8ecd5eaf691abad9db38ccc64ff0fa1784d26db8c8fbebc929bc6d4dd471321e01233d55fb4a9661780b5506f22d323a740553d6107e651c192c1dc6e0a0161a82351f125f08c77e53fdb000000000000000000000000000000000fa48147388181e8d0033004118848c50c6425f2e5f91945a17abcff4d11928d298c092d60184e75e67c7ddb9eaa8255000000000000000000000000000000000c535bc54df050c1ba8d858a346d3a644e03fe24873b7dc3e23518d44b06fcb3f52b4be6f11d3b66f0180a0a95dddf680000000000000000000000000000000015e279a2893c205dadc8e1cdebd9c85454cd4b5d7537f984c8f9d451f8316620279357e218fef87339f1728fa317fad5000000000000000000000000000000000316e343ba68c8a762f4c8f2a5c20f16abc4a7a8365556c1625df832219670619b6dc70727e9bd9a64ed491dc22cb9d57f1bc0e1ebff8f935330c35573f9fc3b900606da9cca9a36b425977af47c7ca60000000000000000000000000000000011dc72100cdf676e41f21015fa7c57897da8260609467ffd38c17868a4dcd2bd5d4d72e89cd0db2de83618222ea3b5cd0000000000000000000000000000000007e074f73287faf304f618478566b91c8e191b229ab40743081342e676be09c2523681cf7ca6f7a396f8589a4ae18a6d000000000000000000000000000000000ff753a16c16bf0dd1de9fa9316694214aea6f99b81f66b6bffd58837c00d7f5632ed5f8f4cdf32ec59c29241ed5e28b000000000000000000000000000000000851e26675814612bcfa639fe567633e1960578a0c8d2e6568418f633eebc109e6c8af97e77bb28ddd47c6bba8a7ba724429b85fae16200da6eb8f62e95e027c24aa6ee2a145f6ef225139f29aaca29c0000000000000000000000000000000009eb2f172db0fe9ac0332381d929fa200a97047f6e732570d23fe27f5ea3013fdc52fd0b5ee74a4387af44647b75f956000000000000000000000000000000001355f8e1cf45443855f2d62dba0fe45b2bfc4e0d06aa7aec7e4f7f9c4e25b33d9c46a01c224517bac9a1390a9806ed4f00000000000000000000000000000000179d47a62a5c847f47341b1ba58f2c3b073c5282f925f57efed1fc43db04185955075255e4e4f6c209757ddae59101dd000000000000000000000000000000000ef5f74d4b13754ceb3b468879f1a8befb8bbbdbb143eceabf2dc8e68fe6cc8e1ea4f3eca1b23a1175c9f5f5c4c20d3454a852baf21df9f4ec8d711a48e6ffb36be8c09c8c60eaa090876236b2eae37a0000000000000000000000000000000005b70a4d5b91b85971aef26b1521e12904b7ad224f25e31ec6ef59856cc702043a3eb975bf21dc8e4fc55171a3865bbd0000000000000000000000000000000007cf7c3e75a837545b53ca3e175a275dc6fe42fb88678aad45910d150ea9c6c94eba615429540348bb2ba8efacbb20e60000000000000000000000000000000002eacb469f5f8ee6c9f557a6ddcc854e955c5b9203b4ca5dd2e097d3e021479e13629863eb5ff17db46a17d3b0227f58000000000000000000000000000000000905e66f3a051b304b110a8682169fa749ba0de7763d3af7edc3e40f2d22ce7b6aa00cd06d2c82d74f3a9709d955f44e13814a3c6386b19f7b93c2c4e0eb1568e8bd3f0012a1ae1357b127c33808aa0400000000000000000000000000000000060ac9ce51426d360eff0d911d9f97a86494340bc5c5ba31ef146b55ad3633ec57a700f04b0cb9d4e91e13c2cc5e68a8000000000000000000000000000000000df205ed85e27c25ce27270384d7c3e58c4e0a9f214d74cddfbc7904eb3115e7bf204375df7558c3e65f7a81a942c5160000000000000000000000000000000007a220d42ca8906013479442d7204457b3ff37c9ee70d64f9f6858ba788b7fc13b71d33ad527c6fc673ad8940b0f01cc000000000000000000000000000000000ad481ef549de13b174d82fe88fa57b7e31ecd8999bcdb0c7a8735ab619a13b1e684b9473f0c59c734567cc08c76ecd6aba0fb0440b2461ef64af6ec5f15db381714fce1da6e03ca962cfc94bba26d74000000000000000000000000000000000366f604228e2dff2348a462c56e0043037d1b415ffaf155e72c559d185c6b0a0d125585d060f159a8cdad959af631f5000000000000000000000000000000000f69e829a0995914ac122299d4424b4e2e120fa4913939d2f18f9d1496e7255d00ff0829c20521ef47bb0dee06c28dab000000000000000000000000000000000a3efb4a376281a60f5246d8fc10bc23cbb9cb71037f8f57271a9b01f5e0340a562f9acf0e9a95b8c65ab7a5cd95520a0000000000000000000000000000000004a4ec86e2b04bcb35c7840d85cd1dfaa88e17ffb557ac591640ed8e563cac891793b92e349a7903c6c1f88d26a01c88c01749cac36dbbdba5662687fd1ea5391ef9d0bbd24e05bb5904a20fa6a1e11e000000000000000000000000000000000f5bcc27c243ef65dfbfc0de6d431706ab20d6cf6408ca989a2bc1c52b78ab63de6f58b70bfcaf6878a2746f249b6b160000000000000000000000000000000016a4c9e8ad0634e8afa8606a1a7bd1d8cc0815dfc6906b6e6446e0ceddba4a4a2df979d27cd07b8982a12550bc700fce00000000000000000000000000000000051f8d972362caf0a8a39045bb468112f2e73afa392079f8a4dc4c3a3cbb8dc224c21b6633a5ffbad08796ba2f8df44b000000000000000000000000000000001825aeffda04705ded9c702ba30d24b9fe8eb7cb106ee5d4e4ba029dcb57bc42c74e74e92ef8360cf130590b838645429680fbd6e6c7b1b14b000d3d18bf93242c74662ef108d711d85d8d442e415ffd", + "Expected": "000000000000000000000000000000000d0ab61b29ddea1aee0ca4e81b5369f37cf45be383f64ba0b1a5a74b790d7264016ee671959444c94b8e6291c5158ea90000000000000000000000000000000000152bf3709c56b3add8e3396d17abcfebbcfeb230529ea8144d6a120a0a6aa83cb284e40ffb9fd9a96f8a2f7244212400000000000000000000000000000000041f516a7cb2a7137746d028b0739c79ffd8f7535f20ba3728ede32504fe058baaf684cc7677967aa46777818b1fb6630000000000000000000000000000000009f1035729c55cf6ee090983a54d8c0574bf96342901f471a2e5380f11f235a075b0e157c38c456b6eeeaa10b87d3afe", + "Name": "matter_g2_multiexp_11", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011ada4731ae7df493e405383603a8d79ef77f3fd14fe7b8bd9d2afe068998cb712e84927d5e6ea6e94d7f10270fd193b0000000000000000000000000000000008a14eddf88826dc3be792a0c1f7395efdf91454cec7e26c89f6beda37b194b706dbdde8745129e821b6f4b4ea6118490000000000000000000000000000000011c29513e8a826e6b3eefaa20ad841605d04b813cca282fe02dca0f588b9a579b2195b0b080cb6d12c1a7881008117f8000000000000000000000000000000000689c67d05ca379367fec99439e3806f827218ffaae995bf38dd8e2919fb2e751f426525cc2c6ead3b9aff2e377fc99e1ddff10527bb64de6ee2e3ab4959ebef9e7a6964b7482f9fae396b2b9b0cff9e000000000000000000000000000000000dd683a8e4ad54b1a95826a3000750c6e3cb250ab5d6add63c21b182d736b220d917d4e70044ec7101c3bf8ac620e1dd000000000000000000000000000000000f3e411cc6800b304fda1373ffa60c7718e20bf3e2e5f9784a81b47e398888b366e1f04f48f5aa070a661b5e2148d4fa000000000000000000000000000000000b0f8d0b695e000158ba80881a9256ed9dda5a7f53b550bf3b5c67ab160060fcbf5ce07fe38253ce037abedf4c6f08d1000000000000000000000000000000000bb92d407c457e9ea7b9851770d2743758e162dc9cdff2dd54b8271c046f642729cd2f10576013adac84a46d38623b932943fa2957d267019309f4fe5b6725379d893dcc270ff7f35b3811ad1d8d12b100000000000000000000000000000000023e880685aa69b3480bf2b7f2aed1181e094322da9e79c9263d50a49ba4fca713740bdb55886fc81c81a51045b35139000000000000000000000000000000001707049fb8b7ad278be2949b9eae2e28bde9de1d9eb964eae582541c2d7a8afc4c1489624a0919047a167028b8c77e3c00000000000000000000000000000000062dbb2bfce2f67c32b87ec2fa01ebf7deddfcbeda2fcf0ef094b1be77b7411f657e745350b6d2da16fc83a96f6f20e500000000000000000000000000000000062daeba038c7bc379f56ac371745b91fdfd5b4cbbe50d9619bf1d077f3cde966f81f9b851ebd206f2609a780b6dbd681551a3c2d0391fd8dedade892e8e2171e652d2a9b52f2288451c55f77fac788a000000000000000000000000000000000b553826dd9e2252c9da74c2bf1bf850df3f9c37439859f93df3fbceb7cca4fd949dcaa7fff31c9e06f41e51ae0b30bc00000000000000000000000000000000187810711ea5911a437a62e2ca483983bf2535ff9301a1cfe1b4d41902ef689f8d86f817a2a7c77128e4ce1ef6b037d60000000000000000000000000000000010170cf5f2ce08211cfc41bf54cfaa16584f833f7b97b2f6bc436eecc56ef44463690ea1f5c8c2a8f69d93a25206282b0000000000000000000000000000000001e627a68dbab6b0d05c85e49b966a769461ec38c38fd94992839bd0d46e06410fa7a48d418d65a8285f7852e8af4b318eb2fa94a5c97c28d95008dd1fe60137b34c2e763292d1b86993c02790b8c91f0000000000000000000000000000000011ebe2edc3de58a57aa9ab4d6626d7b93235ed24efc3d75c1ecae376c00beffc5e89ec509d243f693d327f7a4551921f00000000000000000000000000000000088ca2fe0651e4d8f3958454640a58ea1cdd804bfd2700bb1bb8e26ac50f2d7fc8c292f94b0bccef5735c4548025735400000000000000000000000000000000154936de8932279cd39ae803a5d814864953f647a5334bad958222de765250e4bc847e02979689dc9cfe1993486b5750000000000000000000000000000000000c7ce07c9746c6d72dae11e243acbe12dc23423f870f3130b244eef34524d547fe0b2c4b704ecb6b2e6c32f5675ce67ff72ae1def6c988f9242bff0e683b8d2a5c1aecfd6ebb9442131ec5b5b825d0f600000000000000000000000000000000031ea855125d75321a2a86a93e72fb3869dede7531dbcc1cb07ea2a352f3c6cd913275d0d43ccc370f4539f668f205f50000000000000000000000000000000006c4cadb11361f164f5899c6b57c0c6d8af365d902f4575c9d2d14dfd880501ce9ce218544b44bf07f0f04ed68e8f315000000000000000000000000000000000131332638026fd25b1a849c984f9dedd71e64fb52a61968666ba80238673077ac00b9e09817426ceac8c308f475303c000000000000000000000000000000000c7634af796e7aea4d4d83c9972fc822dad951d2473210ad82706ae0aa023ea85c1c467bdda68881094ad2a4f54cb33f331451748146f0564ab0d91b09db87e8a6ba8b14f8329bc041911616195f9fc0000000000000000000000000000000000fcdbf0083065e13deee2020bb6e47cb9e482df3768ce569f1f7c0e1c6083c97d9f08444e67857c2dce40e4a7b8d50cf00000000000000000000000000000000010f246e8ffccc2e752049f638617e122773a6f10220cdcc0603d24f1a94ca7c100f8ee2d9bc7c0a931fa0385eee456f000000000000000000000000000000000f8b68941df75cac3d4b6b3bee43fb357c8f4e56309d8509fdc62620a085d7ee58f52c7dff28525a449cabfd3b7ab3dc00000000000000000000000000000000019f934ef0c7c40786b073d38cb3e4623544cad59cb63440d4a6e76944d491f6b982e3a5e84124996634687d4618418316d298bf591bd927aee24a37c5ba508c3bc121f5150fcd1a70c1f27a79da7d73000000000000000000000000000000000c0208c1f3653fb3a5e2acbbb42f2598b22db1a714d616ee6bb501c3338e80db34d517c7086d43ddc77e0134dc5a4f290000000000000000000000000000000000a528245342e44e36f8e02e7259749e63ecfb38cb0609075e871701f2b3bb0765277b78d28cc3ecb7aa8c9e3b27eaf10000000000000000000000000000000010446583a905864064400f9ef168a122d179d46a058525c9be8a65a5d2ac5e967d51185d4964f81a5571123717210d050000000000000000000000000000000017da91a1d0358271b11a0aa524341ba1ee8c31bed15efc4c9183d60c6e1842ec4383070a09914fda991a63d55efa8f2156be810c3fa86e35bc935fc2b27971c9c41d03c8ab7b6c8869db90b6e0986ef400000000000000000000000000000000176c64efbfc9958b9c8e71b55e9fdf525d4e5a0265ff01ba95bcd5c6093bd063726f8e277d00b138fa4d8c8f80afc4e200000000000000000000000000000000183eaa6c3c605828852ab5e8a9432bcb87411dd18d574cc2491f1a280e7a267ff9ccc80b06c22e95107a72f22ba2fafc0000000000000000000000000000000013319d3a8564ffcd6fc7accdded740127ef205e8299b390d21e96b2609cbb463569c878f36191d43927868b06dcb912b0000000000000000000000000000000000fbde0ad8e89f5458007ef6ba0f01d0aba04217e06745a5571eedaf544443150f59117b56937f533b4974e5d57c41cbaea4445926775a6baffb4dbeb249dfe3b3e0c29f2a579927f540d8f6451553ef000000000000000000000000000000000c044a5116e175ca1d1ae59d400de24e4f47132251b4b3dccdf458623c36b4d3d83abc644a2247ac4d0e3f195d12e7b000000000000000000000000000000000048dff6bf65f158b19b992167ff8adb5c858a154bd68bf0c84e41351bf47a8f870cc735d1be5d9afc62bbcda2fcdb1c20000000000000000000000000000000008c5539746d2610eea22e79b3fe5b33a47fd3bf9991d34c6f9d824a46458480b735c0051d7b4e4909fdb1f2a1a4e4b3a000000000000000000000000000000001936558ac97acd903a29d07c4aea399227ea13fd6dea820813c5519412c157e1a477fcfbab60a787c6b3834eac4522889ee0e58d08779add74b68dd75e82df172b719cb5a772b0bbb34d3401b9f212ea0000000000000000000000000000000017d978d60fc89b0429c1a6424231fe9274cedad5d78d9c4ac5aa2dd5e70e8238a0bb1904bb4b6ee5de5cd1ac514c62a8000000000000000000000000000000000d4ce85a95dbc40f405f4e7ebf9121cdcd22766737c39618ad0fb3e10a6e53be1faceaa96073b2a877ab808483ec9b6f0000000000000000000000000000000016c61599ae4da787fa6db233fc28f5c56f7133d403901800ab5fa19d058fb27ecb34ca2e56ffa7628ed004c9e62092700000000000000000000000000000000001e64e4adfdafbb423b1b9f8973738c690713911f68f658d234e57dc35b9554e0f7ba345dd7920b429a12b9c74775222773d07cb9d20744a2c3ac88082a8d6606acdc892666753793a2b8bb81116cc6d000000000000000000000000000000000908ebe27a1bdf0b9e56325c00ea3814527005793ea97eafec541c01cf2d7c909d2521a5fd475589a31e297cecfd5e7000000000000000000000000000000000017e3c40c60cd369ce5a90f6c4aff14896cf73fe06432e71940bd8086e36c2353d6bf9dd414bcf92889887e2d49fbbf5000000000000000000000000000000000ded856e5b2b139487b3816351584f06582a933af2bd4573a89aab0a41af01ec1cb928a7d8035228302032d399bc7caa000000000000000000000000000000000833b77c5d5c98ad95a144c0f167fd3bd62b03f4ad721561ed1d84c7137dcb19521f781bdd3ddc22afdd52c75146e101f6bb1445e9146b117bd0c95b009fba670a5391874dd314cefc884bdb0a4eba680000000000000000000000000000000005c6f28c5ebd981fff3aacd70eb18f134bffdc8507d1a3aa153e5787b68fba7f4a94c43045d2676aaa992754783ae87800000000000000000000000000000000148ff39e8062bd488accfead42a684f781c4ee579af6204b5b8dabad9022b029139b1f3670fc270710ced9a53253850c000000000000000000000000000000000ff50eca1a92f123e2534b3289f37ffd5d4e05f7678017ac20e35c2deca054dbe376c5529cddb5e58973f5c60914f251000000000000000000000000000000000b58298ba9496fe32891f4c1cff25395ac5a447205cedaadda4dcb929260ee55781916ef5e4e39793fa2831142111226d4158de4e23d793ba77c24a70f0ad07314927fff34361b0d74b25e8922512d7a00000000000000000000000000000000184d156f881f7d10d2f196b7599db85ee826c9c95383978ed68918756f642a2ed1c951503251b0778dcc39598d79fc8a000000000000000000000000000000000952168761380e8fc90a4966e94b8d2b88a784f6e607c99d9af1aa902506f59d6879153339fdb7b8acda178b9bce4ef90000000000000000000000000000000009997621d4e17c76b7798ef2f99d3c0a7519cce278cf718789cd8227b2b1459af7fbbc93078aa0aa361167b1d1c9363600000000000000000000000000000000005369eb3a77d2e26f9907a2d930f39dbb87634346cf10525733aac8ea10eb918d4043d2a05ff8e80b9c69a670e17f15c629ef41d5a2ce49fd81930406f19e760a47074e159ce372dd67e7ea46ad706b0000000000000000000000000000000019bdb390c66f7d28cfaa91bcb34c5c55bf93a9f2345ea396f18ed33ff2221a39cf68c5514fe091f7882e82470efb1fee0000000000000000000000000000000002d0b48d2c0377b0dffca247b7625f9901f86e2161626b4154bc25d6c643a48e9addd260298bedaa80e42caa5b9fc5b10000000000000000000000000000000018a2b0a760652e546eeb42e857ca48f59741eed91822c17692e9c41358b213c82537c9c6898713a13a241cca627a7dc400000000000000000000000000000000079c02f41fca45a56d9d8e305141b4fe8f98d102197e7864065d342e6b07f65b62632e0c12660f37de4d698c0df3d0f3c718651715ab786b4855092ed21be41b499b7824d0bcf68ad31b31ee4cb730d5000000000000000000000000000000000c0448fd4ebe9b5615653336fe0a618fa281b0fd7d72a8f956a5fde84f7d356b6be853bf823436bc0b61a603636db9ef000000000000000000000000000000000dc4f2b4d810c4290e263098576cac393fce137cc901b3be23507cecbda7d86d18022cf8e1a7df4b1298520ae5c9314c000000000000000000000000000000000a39413967b558dd8a6b2bed972687d984fb9abd0662a266680f8c90f1897e2aca1ba37b41d7d3fd47406bc5fa3c5b7f0000000000000000000000000000000000550fcbe5bb75afdd8d5f387798a8e83a8dbb6da4918c24eb2e5d2d8acd3512f6649a4ac9c8d3e6794e6f4f8a87687bc685a2872c4980518fe60c61e2276ef53c007166f7eceb355b4cd533f42c00b7", + "Expected": "000000000000000000000000000000001654e242002aafa89c6fdb9e8fe2c197ad2f8aad11868568dd39d68ca35919f94308a80303655bc83fd130de6f9723a900000000000000000000000000000000062b5a064840a5a28b4991ae949f9508586447ad5e8c463593503c0e5857c5233b7ce7ac03e555c2675f2e320e8cee6a0000000000000000000000000000000017d65fbd7caa69629f66be8b201f53baee5ef2957a3c04fe384ae82959105342b52483eba6bcc1442763c677f515f6cf0000000000000000000000000000000002ef8f8ed1114cc9d299e59003c61d62edf8971d65b1b621779bd7b270c4123eb629f56dfa2e2723501588a0caf1847c", + "Name": "matter_g2_multiexp_12", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001392409b92282bccbdaa0268e1173e60911754eb3cdc28a52e93f4d82ec99026f314dfdc59b39a4f988100f9c30cbd1e0000000000000000000000000000000016b3c555d5c196551ba715c6c334a668bcae80f5a17f038038d35dce34843f79968a90e2102f0faa22a93d3240b58d490000000000000000000000000000000002daf83727fdf45dcc1a15adf47de3f8a1724cf4d34116f52106a9e6b22dc24a288e89b940cc57e5a6bb87ee70f680a5000000000000000000000000000000000446009fa3555e4a056a820efa7da52117c15eb105af57985d8e9b33b0b22fde6aef9bad30480c2b8c1246519795f61fc067ecd54e9ef59996493f846ecca63bbd7ec28da586f0b8d41bfdc6d97a35cb00000000000000000000000000000000000372ead514d53007690843484c966361661816e0d3949b868176d7a9bea42064f49113a74f2572a6dca7afa0642fa5000000000000000000000000000000001199d3ea66fad87074e62a0b77d3fb962db17dd948f30c38f5beb0e44e1cd11d9172b878128e9a64a08394f13cd786f60000000000000000000000000000000018b7db157bb326ee2f72d4df2b1e0ddf0a90401ccfca1d4ffd6379c62acf5d6e4176a23ded2f81653038d56d848b4fbb000000000000000000000000000000000a932cc9740812c8bde33b68d94220690e0f55618b7e51d3e3fc29d0cb9a8d42b8f8e1efbba5984c3c1007c9a80fae408b5112baca5e0f2bfb885c5041189612918d203a117d886bcb3b27df7e64d17d0000000000000000000000000000000015798d10386f6d24caed3859875be5fb1a43ac753f725f28da6b3583bd9c0e404d36265c2305d7d194e2ad84bfd2bafe000000000000000000000000000000000ef2ea5f3b6e03e3c9693d6db60019f2efa4ea586bdb7623f03bd035c603e8996ef2ea7cf745aa31f60679ca04f93875000000000000000000000000000000001792a66785a3087a80c4b8652c1e4db8f602cf75c1a6955f480a977f92ea262965dad84061f6045177c831dc4a3bf8400000000000000000000000000000000006ea3862318974d6347639ec0d70afe748f4edf32b9e437fd98f38eaf72168a153cac180c2d67bac8a358e3a4d57a2b32db7ad39ec8129e9e9206bd46cec6a8ad3362ade1beaa97befe148f6c67a9c2b00000000000000000000000000000000000974da7500df70d888d5876e7c61bfffcdf830b49bdd40edf65a2ff476e9add35eaf9451a2166e9781805192ffd7ac000000000000000000000000000000000cb2e7152b5b40758b18caea356dd8e095f400282881207c4b79d10d741756e526be261b98b726d5cefb668dcf73a0a00000000000000000000000000000000014aeebb995d464f4d77bbb72f15d9078936b5ab68eb8022bdd97d050576dbe46e6010eb72250c8ccf2a59138efb38f9d000000000000000000000000000000000cf7162768e8eb50e21d3c0a076c7bac4920c70f334336037fb40e57e0efa91eb025356ac3f0988a6b127408a02eb53fe2400a11d9a67041824b97a96f0ea9da8848e7990373655d76e8bd4eb84df5dc000000000000000000000000000000000b1d6214796b4775c2b50e634a549ed104e6ebc0e032967b17eece6cf88c93aac23059f263faf3c3f38463270320135c0000000000000000000000000000000013ffa3894a36226664ff53ba9256d39c6312303f5cbda6847b4f68c56134b7d731e74bd711014fe374f909a081a7d02a000000000000000000000000000000000ae4590cdcb1367392635d0f8dc6b9557abd16290fd1abca6da354646d8585a7c9432978dc616e5fc38cd71d55f139c200000000000000000000000000000000124a7b5574ef52359b4beabcc56d3286db8c8fe4ca4718f75da28d89a8a95efb878c18b48360dbcb6fb50a9f18f0d559aa2d17c409ade92566ddb3913806723d41067540a36a9c283bdacb273c5b258a00000000000000000000000000000000148ab0e847ecac963f0156da025dbc52e765cd8827fd55ba2969da6775649529226ab13ab8537ad0b89e8f1ebc8648ea000000000000000000000000000000001395b1adb6a56b91c3621a4ac5886a7b13ec00f1c74d5317eb74a766eae655e09e269ec48cdf740abc38f4d6fe52dd0f000000000000000000000000000000000f70f77f07ef2909033665bc05cfeea7df6ed55f2f0b1b87d9f247b6c07c7e22f516840efe68005c3953a2702573a9b400000000000000000000000000000000166a334a711416cab180cc498308487b281711f2d1b832c410ebb4c591af54b154fc8c8d7ac9a49a241f7a3840acbc75e5e3d21862b64e09a0893ece646de60cd66aa483662125ffabc46cc52f1cdefa0000000000000000000000000000000008c19bcbdc2ef26a30dd88f3e35dc7fbb3c81c0224cbcd6b12c90883f3973bd7089636f997e5f213fbdcb79514c551c600000000000000000000000000000000058620cba8ed5b738167e809cf71392aadfe8f384a4cf397d10f674cfa914e9e02bb1518e42f16806214fec52d880f6100000000000000000000000000000000048ac1120d26e4173bb33a58c0ce86329cdbe9df6a6f268c8d5ee4f1d6110f9d81cd50c46256198a2462d50be3e781270000000000000000000000000000000010af13ba791d554720f5075d46d03b55c0c1dccd679cef5a7d439ae868d3ff2780cc3ab151feb72b8b92905a205e630449510ab1b7850badf58cacad67fe47135f6524f0d160f3013e8ff1c881e469e40000000000000000000000000000000005c30a126c94b87c54270d0f23a486c3b36a8b491bbd805ae0d5f2bea818a87ff5aaed2d5e6317b786ab5a23f1cb48da000000000000000000000000000000000eb2d4663eca7f8433f10e84984781a57fffcb8f9535518721521ddfc7a4958778915ea3c57bef399a453b8ebc10befb00000000000000000000000000000000161947f57d97a858e5b3e918dbb22dbf28629e51e81335a9bf105d0fd660ef80087c8d69d8db9841cc69fbb5e7f81487000000000000000000000000000000000c52b6a559928fe4ad984a0569c081f3f71eed3d5b0d3c14d1a23afa45594e0fbd94143348390bee178720fc603145ab713aa69664a8c721cefa7d6dd3fe9f92432b4d350621d5297805fcabb21ff8c600000000000000000000000000000000071aa47d392e1a7787b37c52acedbb4632d5549fc11b79919bab7d22f1bbf1c3a239df622b8824b07f6e35e627283b8500000000000000000000000000000000198e72e05388021919dfc1b2a58ca72bf7655cc6c9b62abe3b45cc782ccfd4a2334780e451b8a6b7c311887036813fe4000000000000000000000000000000000e20cbedbafd96c42612e146debae48c7fab4846b20ad0848c4c42c6aa0603e72f94dfc938ed9e3a9886d221ccbdef70000000000000000000000000000000000c861d1878e63e313e672bebdadd3fdbb691cff5fecbc24da895febce2eef0a3c774a8a9d751498e4fc8e2b71daeb40dc040d8bf0a787346560fa3b100b2dd9adb3f7ee716b8103abdd9609363345ae40000000000000000000000000000000005f7cd2205fa2e17fb9896efe3fbe110e1fa59db1ae5f8d6b5f4510abb4da867933d4fe3caaadc4457dcbb35f1b9c62b00000000000000000000000000000000126f2ef6022a7211fa865c1dbdd5b84d96cddff424b06647acc462408f2d31f34ce898d76e1e124db7c39e08dab0bff6000000000000000000000000000000000987f916ad6f718695f3c40703c59ca93eba38931b45d7c33c64c9f75556f075b744dfff8a5f21489b3db6c3846ba09e0000000000000000000000000000000013011b8c72f3853738e22957f742b05ec428ab0da28901800f787b7c3678449acd0359fee93c40c69623aa4acfc0a81017b811aeac4fb7d91abc655f8a4392176f9060346073c957ef903e25d10935a00000000000000000000000000000000014b88c0586fa18333ab11a79acab8e12c6257f82a4ed16d929768a60a3a5d780a22101c32ea9b0099aa2816f18a0351a000000000000000000000000000000000de0fde69efd2cea7ae08d6d2443883002e0b4e11da253222429f6ecc67ba8d282eee84d7f46e0ad00b039a2c2ad226f000000000000000000000000000000000aedfa0a5a8b7577dcc1094469233f8b07e6fc32af26841894d498d70c6a9a046ad636086def948d21e39833c5b6c5a70000000000000000000000000000000010ec6aa0efba4995582585bb67f997f60741648156324696312d17656baf6aeb3e2db0d1a272912fab2fe81d139e971cbd1f096026159218836a46b9801a4f0c43189324d20220aca777b826eaf2575200000000000000000000000000000000004a847c06abc8ae7ce6e6ff0ab856889dd3e9697a75e3cd4d2af9e06d4c2fc48c0562289348ff52f4d9855ad03d83aa00000000000000000000000000000000075673bc79bafa9a64de6bb0e9dd9fa29cdc9c82e90a7348593eec673cbbf22b1eca436ecf767d45852ed888a3f23949000000000000000000000000000000000f3f8543d1e667404b4564dddba4d7c11d13881fcd8ad774c8eab8fc599f55147c353cd6e163cd7b9d5da55ebc13c2e800000000000000000000000000000000069edec7e7d26962d88a89dfad213daa36046bb2851e5d67adbaa227220f29f83ea67cd3747e6724f148dac28308604cf221dedfc21098ff9a9507e493d0fdb1efa6029fcdab23a016515078c76f7627000000000000000000000000000000000c945e83822896974116663d3e2769f3df5a70d55b8392c1f6966e330951f3cc5688742d4588648a6988b928b9fe00100000000000000000000000000000000003e94b7ff7c71d633ce69bb44d0ba1bfc7c27a5ee618e703aef81a45ad61771a2fa8e3dadddf7c8038f1f65ad7513801000000000000000000000000000000001727d768c1b51066d2af87a9da3e24ea2a75b0f75b8ece70727f9f54ab77d841e7ae01c9c0760f4186d02a28d6f8ddfb0000000000000000000000000000000000a273f9395cd49b646e90fd2526d5c93fd46c7366b715546529c9edf5cb3d274c9947c21a03add3e7b20612636a6745ba5b30d1397bf28100f108b84e05107ddd6cae2e82f1973ce187e8c3a7d02f3e000000000000000000000000000000000c996c16a16879bd3194ac366bbd11b5863123ce6fdabeafe56407600e5d49c92ba68ac1256e1515dc9256de14ac26de0000000000000000000000000000000018c584d8a4f14900b2fee70b50b700199ec2372b731dd1380f42ec7fd3d01f0c9a007554059b85946c1c4f4e2fc504ad00000000000000000000000000000000073d6c7d671762e5398e4c9d57f6b68c3d97dfe0d01783f124256fac236f03b774db58b79cb4d5558e1ebf18bb9e19680000000000000000000000000000000008eb2b95e17fdda916b08ff2819cecd2eb031f41c8299b308339b7d9836382ced75e8eb1514a70356882d3a43227a9bc19aadc83d1db9140af303c0492d2b9bb9e2b53ddb62cd2132bdf8ef62aaed683000000000000000000000000000000001029fc28cd502caf3ea3619f6fd04bf457e6a452b5cad680ec2d4f8222a5ac2daa92b880bda76016973494e605ab28c60000000000000000000000000000000002c672c7571b5d8e99de6e47e0a2eb71c6d9bd12baf2b083e6f88598b32c4644d1486aef582c5936e622058bb141db1700000000000000000000000000000000033cda383a77d5b3adbb0809e834993c56717f81f8c66ad2d97f2b298d5a46f7b29a74d35da09271b7053a05af096393000000000000000000000000000000000132da041c6e3e1d68bbd2223f8531eabde8e180b36b2cd0ed4fca248f255cf3eeccdc5f61e1c581ce54edcfb2b73e0787eb6fc40b00246910626ab66bfbac96ea09242d1d70496466e4d681942050700000000000000000000000000000000009721f22bc49f68d703a4dfccc3bae791caaf0d73892bafa6e9da465ddaf0fb1a069ffdd55306acff2407da64c1c5a0200000000000000000000000000000000056c0a4804a19aeaf1b4fe52064e43de8e5d41a8d77de054e2cfdff078eaf468d123d7317818d1bad1bf3469c0070b680000000000000000000000000000000007f1f318aed043d9ad7bdd53eb6a8c3167240fca75925b04795210700463c93a66ed64851195df1bafbbe4227d7db5ff0000000000000000000000000000000007b8945e258311e7672e842b91b540fec9ef4a79296956a5cba3749c0ad95ed83d7b0b48384ffb3188459e997b86695d3bb5926f36808c0024ea7388998b4cc8c6c48d32917f6456b39d514143c6eded", + "Expected": "00000000000000000000000000000000086a1ab4c19c27f70aa422e8292752c50b365d6fe3eba21e8f2ed51f283df0446020834ad27c18b5c7285d1156049bef0000000000000000000000000000000007288f40fde69bd350ce1f4d0f68e645f42de319cc032250b76fe4fa305341e244e5b2366751d5311105e3ccd30e701c0000000000000000000000000000000011d0c487c4eceaeac009b694931f8eafaf8eecd6028f14a4de33d2940bbb747025eecd509564721b50b7186910f81949000000000000000000000000000000000366f0c901fb859b4bae006fbcc9ec7e456eedc7366c899f68090fbd457c37b03ab99ae982872c7888b65c1a056c134c", + "Name": "matter_g2_multiexp_13", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000072f3f03bb09ca30239dd8302b05e0d9dc4e43ea33e865864a82578c35eafcf6868bf0cd9431b92b76f00990b780ffa400000000000000000000000000000000170b76cfb7944ea5ea055aeedaface3e8f0fa4d0ff657fb9d5311f3af6e736da84a5e2bef5188e20f76fb42591267fd9000000000000000000000000000000000d85300009165a8da9cb8e590f7f8d372e4264df150b1551185c80e49dbedaaf872ef69c5763fc3713d0c087c89f21050000000000000000000000000000000003ba59b682174ee61630df95c8e2b1c48ffc8f7f8508c21f3bbe8f7bb3266521fcc06c8f90fe5126d872707872db6d59f44b0204792359895b448bfe6ffaedc14d54a6d72be7a49718c0a933807a399d0000000000000000000000000000000004e8f16480c2f080a13b9f2b66e6480132d76c4ef76e8bac995a8e33280073ed5610865260e154b32f75f527d89620b3000000000000000000000000000000000f9ca48d732a8055d22fbebf3d2bc1e1c9c815c184f594ad2337731709317ea6a205478ba05ee9271d35a19dcad4db5b00000000000000000000000000000000078013b9290284e7ad528a1bb9a2a64b3ef43964c7226ddff8ca16ab17b4a2e8a2a7d921ba924a718587954f586a954800000000000000000000000000000000004aa76bb1122116cc0c04d65265d8652f08b411632a732a9e66d7932801b77c4ad398d582e446968f7f4966e9167894de25977e7426cd5652559626ff8b195ab7ec679de987a6a22a6a0e366759dea000000000000000000000000000000000145de5d101498bfc7c57830eea2931663ca1165ec85b77654c866b04ba6a28bfe710c1aac9876a68cc6ca119708eaf0500000000000000000000000000000000096f9df9d5723e8379f2d09c76a3fd059be47d2c2ed8905d333b2464f72153c5f50b6345980626358839ac691c26c967000000000000000000000000000000001788ffa765c19758da6eb6c38e793190c64d4a7b116576f6827fc090b0f65304988f6a95cf4397f82b7691fc43960ee8000000000000000000000000000000000746e040d7aafdb06a31ba3d7b590dd28f0678badc261a93dc7bd9a605047ec67ba86b2b6dd72637a449872674d6b5982e7ae497b44f531fe203a599622954804c06d5348dc17eb1537e750006584b21000000000000000000000000000000000d8f3cfe1cbd2629f3899313cff16ca3d8f964ec1cc0508341936a7b3b49240db1116b2c3de28f9bc45cdfacdb5fd98c000000000000000000000000000000000fa642ed31293e44211b34bb28bd5b389ae6d0510cdab46c89756f31795506fccbdacafdff21b0127e80557e5ba9afdd000000000000000000000000000000000715a8951cb358b0d8cc63377799a9a61ecc85dac795d726fe60e429d492c9ca843be2a2633c17f830f199335e5d7741000000000000000000000000000000000b88a23fdac7d35fc135b45d7565854bf010a75f072b32c57ca4d0979c111aadd84c71df6792dbdc8e975ecd46a15df2e073adfb5ab96730c53015a4ab6210a35a37b2331ff5123e00798c33e040a913000000000000000000000000000000001171be5820b5a19c045abea399f2b8ab9905d2aa367c6c8c0f84eac132d26150b759a9c029414f1c8f7e4880214446c200000000000000000000000000000000147f0877321f2709183f0b617a7c5ce898db508a3ced4148cc9f7af011fe8040e90885ce817aa956d9f5d19dd968f6220000000000000000000000000000000000acb005c11481b214a17e3cca02c2af266e4c8cd928e3c4e221d866e9f296a2e913bf34c4e051c7503a5e4e7cd7449900000000000000000000000000000000125f45d0af1c010cdf8438bff0f406007853e566fa646df40a581f65496197755eeebaf4f0f77e1e936f399dc4c6c020e6e752d40d411f1ee6e67f48109c9a059226b446601047a2189ab815a3fe13c40000000000000000000000000000000019cce3f872af5cc515ac4cd7825a5318ead5b464d50349909a70b415a8950206974ee0d4203f208d8e6d14690158f5720000000000000000000000000000000002e08e8accede11afe3e2d085f35c08d7d414c26a9caa992d5a090a43c9b0c0cc1471f3693f9d342a973da65189c888b0000000000000000000000000000000008a984ad2ca60c492cff2e95d541d71e33b269b10d3df107c0513dad5af511c51806068da6cc7226df1cf5e5a2fbe707000000000000000000000000000000000fcd3ad75bb0a5c046cf83be3d973bb3685bc717d7b8262fb8205935db6e632472496907f7c965fc6b52042ce69999f9e657fda33cf4ed1aa89dbc19d58fbe3043acb5795dfb8c0cb97620f16f8f24350000000000000000000000000000000014ccaf7594d8ff6157f9439ba63480d3d07f44e62a86caaea510d0ec456cd8c6c4b42cf9e38713213eb4942ed45df2ca0000000000000000000000000000000015c2061c532cda006addd2fd6ebbae458197d55fb336f75ca7decc05dc6d421a65495b71ed11874aaf24a0ec13a7c65000000000000000000000000000000000101f953aed7f23b5b6208032f05b818e0147079b7764aa3134dd9e4a316bbef0309ac378ca3cff3bdeab9ca56cb78e60000000000000000000000000000000000c76a2bc721a4d3ead95af79ec24be9b7624bc80d7debc07e388e52ec621082b9a69f48d157b168af4aa73629697f784c73458e18d6f832f362dec7c49140e6523ead045131a1b719b0c836c1ef13a79000000000000000000000000000000000761832bb5b530b80c668234ab5996bdc225c0c696ea07dcc61c330320404827ada9d58d658e230fcb39a96b339b830e0000000000000000000000000000000001198b85418421d96ebfbf436193b411a3a89c206d006291bd23254ed5fe12ccdad15725a34d962005c0ae60e202bb86000000000000000000000000000000000c1d7ab83b1d2ad57a407e248492773a357c06b83c16c6ce1490e84bc4a3cbae395f160181d2bcca3edc34b764754ab0000000000000000000000000000000000f1e9f0cf96d7671763739b6c37fd442f0e816c49d9c8e001d322397e9d6741dbf8769ef9eb83d08ab024294e279a02838cb0a2b191f538b30187dc730a8c665bbfce8186883500baaa6c3242a0d147400000000000000000000000000000000063049bc3282934e29f3bb3dee432bdad6193a5d2247270e88887cac565f4b986e1b3b2af5387cfca64f0d50bc0ee1640000000000000000000000000000000019f0f05fc7f8bf2f0b8ed375690b53b6dafd0a07c49fa55d36e040798334700a3aafc4995bb90de9c4dc0e077ee18b58000000000000000000000000000000000fbe702d148609dc8feb3ac11c5eac8e32a2f7221aa135cc33a585e9f4c97afa1658d8962fd96e26e0c4c1d5108229ef00000000000000000000000000000000061fe418d3b440e84728091a4996119b515118900f54a6f2da2ad5592f48ebc17bba50b59ecf435de3cb892a123ae9d18a27de64d41d13ab67c1f7b1a7390ab4dbba7d219dfeb31255f9401d5b3c62f80000000000000000000000000000000011e8ecf1e341f0146c59a79a8428bb01d2399d3f87d90d057f63e6cb9837432154d17975f70df175a016735caf85120a0000000000000000000000000000000002a5bd53e4f4c5b9682e1af1f7e09dd305e7342d1688f62885b5e59f173a9fc731cec481559ad693030004a5fbd90a9d000000000000000000000000000000000f9601f95e12bf05c35deb204558d44a60fd630c05f4060b7bd9ff943946e8eab507422afe00a3e7706b8ed013f712c20000000000000000000000000000000003bf6fecc0c7414a69c2b48e2c16e88d988ea8ae9d8b59017ecb89394732a20e4321cb5e4fb071aec7d2736220a4553780030798960729d63db70b8bc3c0030e80d9b8ae766e3330128557e6c34442f6000000000000000000000000000000000549f6464b657eac28f838c6a8bcfcb7a189d6b3b9712e19c1a23503ac209da5f2ad4df83acd505b0231f00eb88515c70000000000000000000000000000000001bf4a46dfdd70542e9d8cd6d6215174cba28f9adbff31c02482ca38205cb4afa2f7fd65ecf57b39e4ee5cee320e33800000000000000000000000000000000012d04a693d565f96566b7c313c47d272fef0ecc828493b0841d58f6bf690a77cb72824a656442e288460ecca7cf05504000000000000000000000000000000000b33eefd5df8b098e6505cbe655a483ab5c6e417a4ed55420beab95e8614c8538dca9296a7848d6aa0495a173df6d0b80d32b6969af54dd345f42320ea96def3c6f4dfd4e22a82686b7a3c57a0df5250000000000000000000000000000000000fdd9702ed88aa857254c3ba50b484bfc324e583659c57055e4b09eb1662af2f70b547a1eec139193a0d3c75b565d3b200000000000000000000000000000000193df0fbc5f24065008b5e98c4c4bf9f1e743a6ee60c3700ae4a9108639e540384eaf1f9d7a60b8b6a5d79e1f34949f50000000000000000000000000000000001022f8a254d17e448cadfad35b7a54dd2fb319c8f9ba219874bd8280a5077301ff4332d731a75646cd93bbf31331154000000000000000000000000000000000ca1eb350844ddd0a65a4ad56e1a96821de2c6633a4a45be976577c223e367853e2b1ecf2cc40b8595ba5591ae8e40f3969848f1b8b36bd28967b762168edb451322e2f0c4b99b7f9112c9a66093fb3f0000000000000000000000000000000001f9cda056a0f8803be581634562e975223b5311f4752b189cb6bd6df1ca5e3824bbd2889b9b93da59e4f08d482734240000000000000000000000000000000009f43c25de25c5d76ee1a03691aa434de6a063bb3a1133b045797a279346fc938dd2636abf0c4bbcb528c9c28d3105c40000000000000000000000000000000012afc29245da8bcd3c0d96c4ee61617cd9ecf42a47c2ee822003af26aeb4e4de8e432ffb6b2d8241090b814401a8676100000000000000000000000000000000053edfd98742dc70d510f1836fcffa6a3ba9ffd4904c7f5559b48e49dd21071401362d0b39bc0d786b7ee2e84a76af0d957ee08a513c5e22bbec04722575a9b4f3a1343db0ae5beef4e66fbbe1ac90440000000000000000000000000000000001dc3f016ea1a74ae50c21c1955ca1eb4a911026a1e72b316c7bbdc708caef63f0c1efecbecce8901d65bbfcaae429da0000000000000000000000000000000016ce9301888808323c9baf6402d7073fb85ebcd389334cc69d7947e345748ee44b2d6aab3ef818beb21b54a19ae4f5b5000000000000000000000000000000000c49817753eb6459cdb4bc737d3710b5f044bc544c8d92c8ef138ec9d83889664267e1a5691f4bc3fa235ecca2a973a500000000000000000000000000000000074a8450e35f1da18e6de05960e21b7059ece8972c36f000bba9e24488730a44ce3ce200c437e06703addb3b442a790a8e0cf0f590f77d13819001916d2c58a654d0b9d3c47c842f2d649cb2570dc0d5000000000000000000000000000000000bc1f2e9af093ae8235c93af098e692e697ea0ab4c8f53019a6e950f7072b56d5eef6b3237710f1dd1cd1970668d06d0000000000000000000000000000000000d9a63f7a13ff9755c6a3832e3c4c852919514523092367fab7886cac317e564d57fb4042ef40e696edce868e697c45700000000000000000000000000000000129a30657466460db13575dca367105c27d631eead330319b084adfac591f5b3b94988925d778e6d4645d1d2816baad00000000000000000000000000000000005ad64d6e761a9a301589547929f4952ccbfead278cbf6658255a075966340f185d5f356679fb02ff2197468ed7de19a71a8c2a479dec43d644ec4113142e666bcefd6d729d4faccbc147effa836ddab00000000000000000000000000000000077d1e5b35c224e2cdc849c02e800c0b80d1c19f3d74d9eec34c40f56bbdb9e2b5d2ef274991dca843755f91a50826fd0000000000000000000000000000000014f3b653e0df0c608b75dee3496a7af04a828e6fc5604f16ed49c39686ec757e96adb0a667853006a8331c3d63ae4ec2000000000000000000000000000000000aae011375b337940f2a53d9091d3581e8197e79251b19c7fba01de987721a9d6fa694b7978f0abf877f46ec26147c98000000000000000000000000000000000aaffbd468a2eb86a3cff59e2e9b7ab88286d2bdd19c2e789b1a68810f0cdc76171a2661ab54e81b17643ff0275eafd72d2d59a7f138327a20263d6338d2a92fa5a2f741daefe9aa81d06f20a6fe3641", + "Expected": "0000000000000000000000000000000010a2434fd3150f6b9b491d3a51226bdd457504077ef2ed5a11ceaa8284900d1b84039a34d5239a863809369bf20a704c0000000000000000000000000000000007934f34fd50a98225fe6578d3f34ae5e5ef5e104bb9cb398b2ca4f09048ec39cf52e7fdbac48d45212e9e4c1dcc6e120000000000000000000000000000000013ee70f1b52cb8b07ad957a7565b3e3c56306392cf7b5aa29047b23e5b41fb3239ac3611bcb16ba7c7ffc4213e3d9cc800000000000000000000000000000000035840f8ecf56359dc3239945720ad08702b4ea8d0fa9bea3bfb234431df4618e960a1eea87da72ba4d9443f14bb87a3", + "Name": "matter_g2_multiexp_14", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d04bb9b75bc8078ccfa85e27d32e137ff5f05f9241b19ea835bba2fffc9255a4a3028c0caf9c32d3d27666e1394fe820000000000000000000000000000000013f59c3d8aaee34230cd7715a32e4a45487b9b16ce68d178f95461229a4d0fbe7d31edc7208a7338eed08e65847f8f29000000000000000000000000000000000d63ca2bafaa54e93ea54846b26f88b4c6749953f9cd00c670914cca279b794c1fb5e2664fce44b8c04f01c68698a8b9000000000000000000000000000000000b5188b4b7ef78d3662baa01b1813b4a0b0f855e11397584a460d56f594f11ff2e5d708a23a8e64d0ab337c7076872527740a826d524fdb7969776bede5ada468a0115229152907cb2b050760c18c8e20000000000000000000000000000000019bae57568c879cd743f7def43b6b994f29782c6a0c74734f35b97042a916da00daaea34f321481e6cc4749e23297c1c000000000000000000000000000000001853fd11d4688b027146a07edea647502e80750de4e5e2d105faad3f71ccc90badcc750f76f1b02db3bc0a1a635b2bbb000000000000000000000000000000000b1e45b90e6a7032179236f13f01ab664c32ee5728414ac0d6b9d79510e8c5bd0f5b62e6c59c1a3c88998bf45636cbab000000000000000000000000000000000ed16c2f88b5b8d29d7e01633e2876322caeb740251b034e5e898919f836ae73f0296c62253a0329ee8f71fdb5cac3a1d226f56bf3935ea95d976fde5790ba0584e5bbc78b37279aed8e50389899b9e9000000000000000000000000000000001455764f99e5eb0e0371e89f88bfee1c43224b9b5202746bd151f72336285556acc5ff36bd8ff87378249e82214cc5e500000000000000000000000000000000007fcee74e5335d96714e4d1a7c6f5c211b1a460efa283e0d0578c6c1f56dbd252198eebf0625362973c40d95fd890d3000000000000000000000000000000000ede26cf87e604507230ad996788e85799cc07245cf7191a6c3cecf0bfd5747b3a277cfbe41252808df6da19f005de9a000000000000000000000000000000001855991a4dd78dfc6088e6a43a64b56c8d86a0278b899bc8a1979a40a287979dee567217b006ca71374156a96b79c176c133e1989ac82e4d1c9852a6c7156a34b05784a58231d59e3cc875ac5834d5c8000000000000000000000000000000000cd032a7dfed029af020bfa249e6adccaaf5bcd2ccf33736281c4fce9c6e2b2e87fa828cc20301269d8e0579ffb866a1000000000000000000000000000000000765c4d6c4062cfbf7e24f9772dcd812f7e707f2b0ccf9043faf10018326834934df121924abb74d736b0da47554794a000000000000000000000000000000001540fa51e4580ff73e58def90a6f19557dec3c8306e2317ba0c25ece3eb4f8c39beb57741b3c4b9b8554fd2597743ce6000000000000000000000000000000000d875c822d0ce50dd638254cd4aad5dea1443813689a940d72cfa5db9309b171299ca3d69b137dfd37f0b7538a0852750fdae1b53f6442c4378774a981c90d282d5f8793feb2334470c873491e41740f0000000000000000000000000000000011c230689175cc672c25f3c56ef4eaf2bc5766ce424f6c596b40ab24fdbfa56a955205419c149058dffa4d86a48ad35d00000000000000000000000000000000078d493ce3a8038134541ae5f2a82b5e0590218a499dfd78c7a9c06b92307003fb62d6414d6c04b22f2877c3de0b65ca0000000000000000000000000000000001d53c22a622c5d91df934783f8c0cb7e370043ecaf99a0554987e6c5120a0e5f4ede023a9ad988d30d945a2132ba5770000000000000000000000000000000015b1f36a00fee95e13443c9f6e67935a840cedc7c3fb7833ece8e180991909922f59d4f4ecbbf23f16bf5ee7f0b5851b70f1de7cc5e6a2cf7dd4b6e60ada67ca47e7b9417bb5f599048fb0c9b2abf33d0000000000000000000000000000000014adff1607236910597a951ae169a7f56d6a3b4e0f44ac63a247716bbbf61feff7865d075f79e4108cda6c0731fdcfef000000000000000000000000000000000d740b13885c268da876898b77914bf4a002beef5bd2a3edefbf366e45ebcdf593ec6d9ab21e983fcae9a0832986182d0000000000000000000000000000000002a0827e812e983898351d9f03f660317d41669b0fa378e5c7667b73df299ddc4a32a529ca887a53245d7e1f946623b3000000000000000000000000000000000bf09a2de1a8ccf24a8a65dda72adcb96535ea7235de87f05d27341738b0b4ab16afbc5b37c97e255118dea9bf180ec2ca82cffdf59b742a736ae9a6d36f7840c46c20c126ec054f47ad52a22948d7210000000000000000000000000000000015fbbf7e8c26e2f41be32daee2c81390b9bc4413aabb053e3a88bc6117377bc16011e81ed167370b72f84f0e77c2b8680000000000000000000000000000000013d48a27d06ff00048b19879493a5f8ca52b7154be2fcb468b9de9edd1395750434b0e95ae6dd941e84fd6d8918455bc0000000000000000000000000000000012fd2bc91286dd46d68d87a3f8793db997ee684dec6b2de1c4202e5e7eb0e4a8a21222e3dcf80e1ae4a3a92474107d330000000000000000000000000000000004d8b71978c9025dabb3d1b1b3c7f4f13f166514b8b356fd064842269a36c6f1c07f150c03510af7d0913103afda4a68fad69492cab4ec7eb89ed37f1e7fe898ff49ffac4ef2aeb75d9c6b544109a08f0000000000000000000000000000000007d679ac21bd4634b415ef8e0e3670a8a1d673f6a4f7f3786b92d55458af980b035e4dab165a3b773ff3469fdd9d5135000000000000000000000000000000000fdb82db6e1096e73322050f828ba41b3012496a4fc4cb481f11fee338243aae20b205ee06887e28f6ba6dad00445f9d0000000000000000000000000000000017e6894b48f60b3d9b4184d58ab9554851e285a1d445b4d97cb1a7ed5a984ade8b0f62ab11ca75fdb280cc0e526108ca000000000000000000000000000000000c03b61690cdd9a4c6c83d03749db72c8946c21a944fb292866cf3a2dd1bf3dcd95743227709740ce8124319d0a540555af71c9baaf54967683f8553f72abf789da465041ee5a92c9ce1ad562c91c4d7000000000000000000000000000000000289f850c4834153f36bfc4855f89e9437a172c35a856117f8b841e5ad4ef973d3aa33fa73d8dbba4b9b2101708006bd000000000000000000000000000000000700025f22c0460613c05f8941f8a79a4319325c37c2b8f099cd910df5c0c27121a9de0e40adc7ba0fda61ea637b47d600000000000000000000000000000000069e17e00d4d726e8eaca8235c88967a7c093c70e5a46b1863ad097acbe233554048838a0a486a72cbed7001c83a27db00000000000000000000000000000000016ce4afb84c1a9e0216f23bcd2dda0bbada6a4acca78e1e0d765a5290f6f4929f6d0eeaf1306fed3c9766ca7c7268acc7effc9a7fe773a420ca430c58bb94e7baf26b9a97b618a15e7a18b31e5914f10000000000000000000000000000000018ca46a89dadcd3b54f60fdf9a7b97c95b9e0668ed9329bbe4121e588a1ba773c9d086dc35b699d65487f428c00ad8c30000000000000000000000000000000003ada6835a93310d0ada01bd7fd6778bd07e718d1ce05aee2b4990bf32322fa94ca898a531ec6e3b8cd7ae3bdc77e0b70000000000000000000000000000000004a8abd2b9f7449213e63ecdb435e5e13fe2aaa31a2c38673a6adb5e96f4dd383dacab391787f6c17579c78a1cefa5450000000000000000000000000000000002a8768d98ccda80149a767e9b5a3b0bbbc0ab4b5f696522c8f1c664f1d27f2f0a6690531672ba2070355c0e77095dc02d5a3d0370f4a58c21016d208609f1d3e7cdf43abdb85199bfc67dd12f589b8a00000000000000000000000000000000048fb58924bd5952d3bd7b1cd57a1dae6c1034df3a420c1151737f88760e4b0e78fa3f891a0dc32fcb50f89e67b0f08300000000000000000000000000000000073e9723c80eae7685db774d3e2bced53a52f24504fc3aff98e2becf8d59c6e83373ed024ec1ca50101d2d613abd286e0000000000000000000000000000000003b64c8e9a1341bc6a444a871843b3add7dbf04bd1810e1d6da7d31c7c2b7a264c362ac9a366dc8d93bcd9392c6056f000000000000000000000000000000000064462d424e54f50e9849a2bba1b0caae966a8618fda0f8965b1a841dd2173872a44a18ace1e2aecc8e3546a9558d7013549b86ed3fb880269be22b9cb8be6f24385bb5e24bba81bce9fd5b72ce2ab71000000000000000000000000000000000c40c8da9281a8b43478c28b2fe59a3cbad0a818e2077d40cfe44624dc2e46f72d4489cccf63eb8460d02f895e78edf5000000000000000000000000000000000735d768f6ac999a47c88bc2f3375f01052259dc69011480e468d8963ea8eda74726c4ef32c8feba52878eaf5c0147730000000000000000000000000000000010adb3ad214b17b963586a10701934727edf05fcbdc94d98255632647d73536decd0c91363840e1b55f29f7d32f650410000000000000000000000000000000019349045e6fd25960c03336888679cb53409027f35a1f211b40d24ebf724866c085a978ffa3a91d989da1a7902bca018c8f6dd56906fa13144dc87c31b53186b0683cad220ab2de89d2fb515bb269cbc000000000000000000000000000000000a5d2dcc05e218b0633e0a965b6d69a3c6c1c7837e1fff7ff75cc9ee93a112f8e34cbc95bd9dd8fe6ed22f2e9221aa110000000000000000000000000000000017d2e5d2c0578b1ec26b57c3305b209c979bba6925756892f031a7462ec44e8a4a2527e6aa2fc13bae91dcacb8c7a30f000000000000000000000000000000000d437edb45ace50700db548db68b9e8376b3039fa00cb98dd00cd197c14d0f92c8a3945127c43b10b34bef7894fa43410000000000000000000000000000000010d5a2e442a2eb35aa85fdaecf094c1e1f307dc9bcc540693d7206cc4e0d050ab900f17fbdd0754b59bd2aae705c60149ec934eddc44729d05f193ac927fbcb022288ffb2bc7d4f46d1bfcc7efacef940000000000000000000000000000000016c36464b426c3066aead1aaaf65ca637e93279e8ccc9d838b9b3ff1aa7b896f36de506efc2b0864763cb6ecca4926f30000000000000000000000000000000006d88d5764fc854ed7d7cf1c0e210496ce347bd887da2a149a09679469e98c453d85115afdd2fc4987b64a88c4a6f0a200000000000000000000000000000000053edcc0ca4c205423ee6a7031939379e552bd2d2657f8f25370c9f0ea0a947e77f18b5f218f98d12d720667844f3795000000000000000000000000000000001292909190854cee4499faa602af99dc49d1354a71278b439e983bd89e6c504fa5fcaaafb6ea26dbeba9850bcdfc1f69bd211ec887635ca841c4608fd00bdc0f5fd0f6365dcdfd7d6f4c36f4b25b5b1b000000000000000000000000000000000997e79a7549ada9ee0233b3bf9289df3ff797595f4b5eb2e7dda6977ca981c1c4a2b91b924812b95418f1b1d9d0cb830000000000000000000000000000000000256b830e80f238e8494387429d727a91cf5d323ea87f7dc143058c05e11858796adcdc677429d1db4dc2415cf23808000000000000000000000000000000000cab529c6b86beacc57c874f07108d1df7d98fbd59fce44c48afe9eb2dff823f4869b620bbafc121b4ead2cf244974de0000000000000000000000000000000002774906c1a0acd87de224a9450617db37f8f36a0a192f5daa2774eff0b73aa79b4804342999df761f8572974c697c6010bce61d4e35770e7737636c0f9a664eefa948662d3d22d1f1708fa48d3043de0000000000000000000000000000000012abd02540073017011e186586023adfca36fae454350b2015a796b7991eece65b63964fcdf581b4b51dbd7ddd506ec3000000000000000000000000000000000ccd3f2d9280908d4b30e924e4a862810a92e1a880cb56e842a94a2a5120956e8713f548ca279d66d06ab23e4976e54e0000000000000000000000000000000000c052ed00fde2cab515694d8c004de910e62d07c462345ffcfbd3904a0171b970bc58d99c5833059315283004f3390e00000000000000000000000000000000008fc4860366074ec0c7aed2c6ffae7c93ae0a81067edd8911b4c53393ebc0f23243823aa7aa2b2e987cb510f6e0a55a65c86930c1d142985bf85ce70bbad170947e850e5c6ac7803fc45980dd37a57d", + "Expected": "0000000000000000000000000000000006ced307065868b6d082bd205bfbaea3b0a8cfdccf831bf154563b5a942154622b0d7689819b337479480d19aedd85e4000000000000000000000000000000000c0f04fbb26cf85c2c22763f3e78fe255d8d1f45ea47232ab58f5b785ad9f2458b0b28f3cdc25c4dfcb47d59957ae10700000000000000000000000000000000120e38740eebbc3eeea9beea483e70d6a9c30a5abd61b86e5f94bf65ffb40fb92c8d246edbeca425ace175f79c9c8afd000000000000000000000000000000000d5a503a26e50f9be34c2e64e4a80402ca6e17f09db1b334a9c1f6318f3e7e63b3847a7ca38ae6aa7c96ff94bf5de842", + "Name": "matter_g2_multiexp_15", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000036480931a5a585ea54b6dbb01759eb1d86804e3f03326188c71f859613722e662c453096431171a49eecf8653f14d470000000000000000000000000000000015fcd6a30b9d59a90d8595ca1758eed7d6810d2916638dc2cb637aa09b16b5ba4920df7d21fc0b923453a6c7d32f056b0000000000000000000000000000000019aa4d8e98808c2fc1273d383e836876b087ad5a7d01743bded01314bc62ced94052d75d312a18839c1b33faa9e2e5160000000000000000000000000000000015747ce0f1171c0d0ff1fee9dbb2e5673b9db0b0c3618cc8bda474f378db58ea42184f907593f3d6fc2fa215cabb7b2308e559e394a9c1ff07a45bb3e022f9c212eea4ee5b77db1c5b93ce72c0512b79000000000000000000000000000000000222640c1d64948daac3ff93e86ecc96bcf9c93559266529a37ef1372a81952431673d69f1220e07b8aa0a4f3164c83b000000000000000000000000000000000db593156078821cd0ce0270e8a444d0d204dce0583774496620bd4752839f3451e505aeb3db568048739c7e71d279b40000000000000000000000000000000019932ad2c7e857c2dd51f7846534050b9243e388260cd47a91444fa050a9154eca88ab4d29a37def16d4a11d35683f2f0000000000000000000000000000000004d15ec653a72256ac6b616e9870b0acc7d46286893c0eec523dc27bbcf5fe596204cbf83ce71c2690af67b3616794225e55826db8d12169a31ca27beec80554954f522b56f7994c62bdb527c2438d5d00000000000000000000000000000000180622bfa9a1c452f343ed21a3e9c6fdf76589cebfb9a3f0a53782a3e7c9d066294e10699c386b5d0525003289f0ec580000000000000000000000000000000006615ff63c856302dba6d4e25d1070fe873e0c4950ee5ba8bbbd4b94ceeb181f1ee450acfd22f21010b88f0b88375777000000000000000000000000000000000cfd3940b5eeefa92d775792affa34371d13f3098ede3007e06510344ac8483debadd5a2baebafb5ddcb45a9449768b200000000000000000000000000000000145be0107a1e3acecc89a116668f9887579ed7a72abed3f4236930edd3f18974465c99ada86c4980c88768824216170f1362e8e39ec661cb3c5af64e0001cc94701194344a7404f1ecf7df0d5633eff9000000000000000000000000000000000820e74e6d0333b6b36590ebae78960d019065f1681ce68a2a01a2522496c840c668575a57f9fd0f50b87f928a41b0de000000000000000000000000000000000dee60d90e96019cf2bb552d016419e92dd358ff97039a61838b0a89ccbbd537f2b435cd11f7b6e75a4ec6675964e7fd0000000000000000000000000000000002ca767de9fbf8af7c73d41a07e1c0e38e3fc971472e11928b65393a27354b2d732012dc57f498f94c0b933565a7493200000000000000000000000000000000134fe97b24e153f0e9a27d3fe7b89999c6a19e353325e0746ead013198b8e00ca6472fcbd2a112aecb9ddf671aaedd9174d3d66cde7c4c8a4499708a0c6f7c4da458eb970b6ca87e23601c702365b6de00000000000000000000000000000000031a9c29323196ef31030ba73827d228e56fd5209eeef0803a189e0c0e5b186ca1f342483eeac99e1e1b12cf490856460000000000000000000000000000000010deea45a01370602bf57a1f81413e8d3b337d7a1a33f9525e4ff7003454d1da2cfb1a9b42c4a654320f91fe7d04b6200000000000000000000000000000000002bafb7b7452a173a3971c2ba1768061a043307d2c32767056f18c1bf8b066176937876a87055e54675876bc1b2d2fc3000000000000000000000000000000000b5c77dba3b4136a7efaa8c2e28f39e88afbf26a7313b52ad6e390da4d948209d96e39aa08eb52200dfb890d7e88b46a389e0d43f2006449fe2de506dcdba4cd0e6077e2228f7d8b6ec9d8a4129c494f0000000000000000000000000000000018bd1ea5ee8e39c43d442e9c6fd22706e582cd80051f18334c4db2ea91ab019f54bc0074c8f0e52e50367197a797e7520000000000000000000000000000000005c0bcd1b047fdbdff25b138248bf4da4c013beff7dd3030c348d6b2b8724a147cbc44d570db5c4b273c94d0b99bc2290000000000000000000000000000000018e033935c20be5940863f7e9e39fcbdc29ba031e58c10beea90cc48e9da9988fdbf108bcbd87948058f386928f81fa800000000000000000000000000000000107d179204db7b288315e8aed7b92ebfe53b7ad2366d5d7944b3df68d9d9faad023e477213f85214047645bc05fd4cde5f8dc332cb31e43bc2e551356cb8d1533c6e567d34622667e7e4e3ddef352f03000000000000000000000000000000000a7b364fbd3bac7e2f2e7ee501db2d248bd73a76c2a12a3e51718b56ca9a8ded14b83b8cf0b5bd46f0c26896a65fdb15000000000000000000000000000000000eafea7128fe20ddf740a6396bf18ff5f2652a0317ea9b6e934927c3ee95b59c7dcd51f7c895b3989d40ae5f78ca508f000000000000000000000000000000000bdce57be904236a8df532c2c0072165b5cbd4103e9061fcfc0a45a67e4b25d11b9f816f63fc0eac4d6d3e10d2764c4a0000000000000000000000000000000012419f94ddbd8275054f8f89fdc27a74afca2eef314393236fca65705354e5cc0a470818999c96b5087997813823e9be0dc7052044251fd360538fa6d5dec9fcee53faf2f07de5d8df212d04f968a0b60000000000000000000000000000000011e4010d0cd7855a92cd5d4954ad735363c0c2ab00053db5e078f34e772969d8c492892329cb95ea8893b4b7ff7aaa5e0000000000000000000000000000000013badc54d90a19b84d76b30fef8e3ad2cb268204fdaa50ae951b63e48aec9cc6d585751dd48e4a8d4659b835f38f8da8000000000000000000000000000000000460728f686b9b15cc19ef135af71312e174860284c3f0e7a84cf85a5c934e2bb6cadee8e482d88afe788a796605f79d0000000000000000000000000000000019a50c06ba307d83452a30fbd862270652cf5c7a09b150fcea858a8102ce3b1e9ec13b6abfb323d63d2c4edf209c7cafc579dd4f361fed9084d9c66a3ec4c6af5293710ba5299df3abc4cbaf5802b5360000000000000000000000000000000009faa74f66ec0384f0458893c0026f73688c764e8df9ce056a88a2ed0b84ed8f88d1b683443a3269a3db838f8aeb808a000000000000000000000000000000000949c4be2708c1aac86aff39290ab6a8e0f332e7a098bbd64227a175473d9dfe136e07548b282f69a94a15e2c32dada10000000000000000000000000000000014f2c7c7da781e2f50803e3a948381c3c439b127949f79824df1e5722c206efccd6c0ec5dd75ef63d8b1fa301c83356900000000000000000000000000000000176753460d241f38aff41bafdad51688ab0dc9a5fb3643977c7b9d282ad4532fcca1e725715227780ec28bf1c32bbc1d69f0f3c3f516ae34fbecf45f4636c22acffbee765952b332c0f3d8cadb9c93f10000000000000000000000000000000011982264c8c078518cd0adb05034761224e9063654904e06fb5e5a6eeb1f45e4ff3da661f1232693b79336215dcc0cc40000000000000000000000000000000010c96c872160d2de03a16e85f2828d0cf2dd16a3389effacce46b5b5eecfea1042a77de653da5a1c0380a84c435723fd000000000000000000000000000000000a4ad2d9956bd407c555b26c192c6bf59bf89e40d9c6f9c90780bba313a39db71a73e7633397d47a3f58f61c81edee77000000000000000000000000000000000a7f912530d27a7bf74e01d8e48890cc66f72d14950554991ed1edfc504062ff6bd3cb6941bb398df9fde3cefd33fc0676618f1954730111e572937cf0c9f7b3298a11d18cd890cb419f732c766bc6210000000000000000000000000000000015bc12aa9ecf417fa5bace8d9e5dc4a418555eeddde1da8b624bf7d6e1873ec4a257d5f6dfc058a8d9b02528e699abb70000000000000000000000000000000015b41567f8c780f83342449f27094bc20a839602ae482de14b92e40017e7acac8857db48a2d27f1f1a625883b6e5255e000000000000000000000000000000000cbe79ac0718555fd8fdc38b68eec8be83b32499d2654be44888e45a2d610b0e81ae12fd56550524ad85b5a632db32ce00000000000000000000000000000000069f46b5baf4357d8010869685b3828c0dbf6e2338598c9b42dfecf0b22d803f95fca716115f74c77778d414cbcbd881fbb9f2400ed1dec7ea63d2b26bb3e9c2acf70117e3026626f6f88a07876177880000000000000000000000000000000017ada4038189c544902167be958e43ee133730e5cd329e572dae2d853b694f5ff8032bd9ab41cddd11c51e8284970f810000000000000000000000000000000013eef75e6d28deec945ddff33128c199fa52565288d63677c824b8d56a6c29eb98d34c5834e84865be35d40c1c59a40c000000000000000000000000000000000e2fb4f9c7ba6bdac1d4ff5055be609abef7fecd7923a753a704da537c0ff41951552420bd78d14cf972dc84fa3f5dd9000000000000000000000000000000000805376b814b8a59435310d49a43081dd7ea36dc7dcb40d38068ae9085b3ea9a3b2249234234cacc76724d8ef84a2eaca0170d7b7604b8951a95d49b6697e2d0cd2a41c3671d8f96e936cca911dd516d0000000000000000000000000000000002288860f2d671c84c5239313b7f6b82e31c3976e6d310e15d3bfe1c566e2ab5d86ae6ed0df02530f9f7893ba419f1870000000000000000000000000000000017365bc096e260f8dd7b189fabe10eb66923783b41fff70a149251576b3b465c13230dd0af13cde562751dacd8298335000000000000000000000000000000000fa8eb9c818df27181b45a74b333ab481dc7212e417c4e12634816f9e177064f9e1101deff26156d26bc6574db9617080000000000000000000000000000000009379598bf02222e1ec37a721b9ea31a3adc33524c6a41bc58da06caa3da3bd730659f0a80f793a0fcb9c07b43ca929c2c2afc06f19e627e9ec0edf1083823d30ac569346040965e1c92e0c15011c90b00000000000000000000000000000000136870e08ff5fabf36410629ce5c23470eafbe73a7dceb633df5c1492e39445b86ce15c22bf4c421cfd0adc6518e78c30000000000000000000000000000000010aefa3cdf1225da09b796430d096807a83eb2fd5a58db3a4bfc5e500dcfcd472fea3077f0c059620f4ff708f37c95a90000000000000000000000000000000019ee2c62ff860338af623c535979ed31c42c0d0b2f82cd56c153e80e6d92bec9ce39bc8e8f285d1efd1c1e969521dbb50000000000000000000000000000000008ed69eb0a16c8a35d507bc3a50bfc97e18143fef611263715aacf5400cb1aa285b6d2ebf2ec219d2fec477360875a03141d0ff346e46a20c2498a74f910e9bb2d5d8530afc7ba47c3525861c9e8c5920000000000000000000000000000000014abc4eec64f2611197d0c1322c3248eadb725049379e64682f2b3d7f83f7bcea11358d88f52711b3020924b6ddd84790000000000000000000000000000000009fd78c5d1d2043d83be30a88f046f5b633c6dbb11bab25fa3037bd250b6b9d9394327aae25d1939f777fea9f3df46960000000000000000000000000000000010f413640aaa16a95afba98660f9e1b03a8f3e0a7a3d7f2b971f71b5e3d09016ac2b410f97d20471f48621d5a363e9e6000000000000000000000000000000000154b5df93298a5a14a6157819e38db33ae7f2d11dfd13f7f2a92b2fd9b053fbd25f10a8c45db3026f6f583bd56eee0f1d688a1aca2a837e0a353039294a9988a7111ac134a6a8a68e4f881e7486025c000000000000000000000000000000000f1893df99adeff5e4042c4c5e8557e53f7c34efcb2a7953d5347f81d2f4a75ca0273a3845f54e795ac1c1f8ae7240dc0000000000000000000000000000000004856b05d58898be6aba07fcffe487dd895144c7ac8fa8bb1a37c61e73bcd062ff541d510e24c5bf005c8351d3ddf61c00000000000000000000000000000000178b22c2c698dbc4929b119474a741ef44d6275fff5ba058d9debe9475e71398e464aa14a6712c5deeb5010d1c7758ba0000000000000000000000000000000005ad09389c35c45f349e6dcaf1cdb3b63648b3df427ea0c2a371f45634635f9253957ba6987df4aca6cba4cd472308a31b59c33ff02791031e7a9424c781ff17a209d132af06f5b825df363fbd902cd4", + "Expected": "000000000000000000000000000000001090d83d501373cf07c75effb1c85852019b39eb0d77226823aa3c1054d4e408e82fbf0f4420a30144c611fbb856748c00000000000000000000000000000000120a1e3795f6d5c4ed5b886256c611bdd209677f8324b7091cdd7cab11788b1c0f780e8b4c38b84d7c2ea528123d4783000000000000000000000000000000000d250df34d906ed421eec2a78c2ff4ed4eedb717358d7ca879d58ff5b4d2d72521082dba6ac5d10859125e32c2c8b490000000000000000000000000000000000476adaed9d80cb1545be505496222dba1f0ea85d38d5bece0663461e0e9d47abbefe95303c926db008d08b8aa162e27", + "Name": "matter_g2_multiexp_16", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e1a9066289392b0b0b8f0986366c2975463c9cbe7a74f2eafcb3b8b6d4ee3226ea5886aaae374341bc76b53b165e22a000000000000000000000000000000001557cd01b61b5f2361f6b558a87c67f2778e11c21734b7ed25f72a88cc62cbed396d583de4c2190ae6bbfd096c33bf73000000000000000000000000000000000eab68305118d7e7076043719ac1e13ecda4497df2cf392d6aae4b7753f114d30aae3e8535742947636901feac4b620a0000000000000000000000000000000002cfe5014446556b82d60adf874cef25e58eabd035deb4717c93bf0361f37a4a67aab70b95627326bd97f111efeed57f58fef5bc887b7caf72f2a533fe1455ae523841bd49b4adf16cfe87edc6f573eb000000000000000000000000000000000c8fa30f6055357f6b697f2115203428b8005ad03286d2b3c805bf3d4dbb461c30e6ee8b0973ef41f884b91e857c53500000000000000000000000000000000005e1c785feb4c4fb7e960233d431d51a4fe471f10321251d018a950374d2a686d52ee8cdd855a29e770bdc1bc565f471000000000000000000000000000000001158d31faab483832d39f5431a5d8aeb952d6a63b82ec019f235b5b2e5580df8cd91b46cd53d4a90b9db354b38c5a1710000000000000000000000000000000004a389b09be6fb7ffd14d7f3359b17991e93d92a1c0b9a89faceaf71f5ce77a1875aaeb7a0ec3b2dfb363c47dfc9875273b243b83d44158a66eb6d31e7c4ae1f4b3ddbba81b2cf9a654ca7c4ea2147ad0000000000000000000000000000000010587118c5f90b545ee707466ea2c5f378e6795c260235cdf9876aed8bd753aac592ee05e23882ee77f4a13bff97f5940000000000000000000000000000000000a0344aed244b90c4fb9ac337edb01429e09f951062b06025a5212300f5471a95f28e09bbc715417a6d98423b518c3a00000000000000000000000000000000128457cf374e5b8864b8241f476da093f48553d609a5f30c0f0f235ecf7127231237b6c8802f2904a8304c7c237842620000000000000000000000000000000004d55ff04eb09b33ebfe90f2a0966a1b59cc224215c0359a4ff0c09e60f9fe7ad8342868184d8cfcaa1d8c28328864241ea87af09f6e62111c48993c408efd3db9ebe218ac68f61a461ad9ec1306873d0000000000000000000000000000000019e6992c3da47715bf379a668a15668508e7ad27bac647490be8e82759b9b79c996735aa1bfdc3cef217750e4ed36fce000000000000000000000000000000000828f782c5bd4f2de3570a4930db2c020f75f93adc98aa0e48449d29c7a3b0d5c349963d956bab7f985ba6ffe59c90ec00000000000000000000000000000000062c7a730d286e895c57b75907713ebf1d20650b5e621f270f1d22a2ca480d022346def4102a62eebe867210e4b6122e000000000000000000000000000000000d6c29462ad449ee6cd122e3dc00d56dd5caf17a2510e5305aecfe85626cf73adb401ec2192eb693158650893fa67412a691b9635e38a46e2469811405ef6325ae7ef88a67c1d1c5b05806da329f27e000000000000000000000000000000000098de9ab41c289a05ba5a774eafe27d91aa8272fe9f81fadefba9a0cc0e31de20f808ff454a8647c44f5aa632742af9e000000000000000000000000000000000c96019bd5cdd62df1642656f0832ac8ff6aab86f671e18c1c7023dc16b8ff54a8e3e446b19682a23b73ccb90da2fdf0000000000000000000000000000000000178e3b4366b2517d4c19fb40551be6979d46319d7040682241b046f10ab88d269dfc097ae02952d46e69cb1cf159da50000000000000000000000000000000008341bfe1e2fb999f0c3f4e79523c720edd332401f9dfdb8dddba8d1342c2c1fb20ae2fd9dda92c7bde5a0c95ad971f80d9a35f474325d0f065442805cab3beae4a186b252ebae54a567dec6695588f1000000000000000000000000000000001004d60af8c21f7c62fcba1c5c41b94fc77f64b89abcd23a218f0da8f47d2ae6879ddcde52f3e6feeae2dc7b2720577d000000000000000000000000000000000b8e8a7da87aa62ca852e2984b0f12b85052fdd03883f01f4496df0835d1cafa48818b5ff1e3cb0e9ecd66054540a0d40000000000000000000000000000000009c16854580ad8191e3e80a0afa8da759a8b2bfa7e0d556418b5c96d97e88a12fb75a91cd68c2f4336c3ed7ac99199fe00000000000000000000000000000000195ce9c562c460c7e715908991ea8b017b81561b45133427f63cdfbe8f65202bdc8e8958ab0977b3a244cfa32fb35f37c20e998acda67d406a238f16bc2b3066a6d69d2436577b8900a180e6a71b0a01000000000000000000000000000000000107292f77666064b7d80d73ea8f3b623170ef79ccc7c228b8366675a422a0cb8491586a2e4ab1a067c31396cd670a8900000000000000000000000000000000126f8136dd61d61b2a9c0f4af3ed44a3cec3ccdedc74821f341d200601a7bf0a17079c824de6cfe28467e843d0c74d2a000000000000000000000000000000000bcec8afcc7ee56b36d6d08b51f61454c8fb15ec5baee1117ed55af8fc85f68674250334f79b0fce632e75623dd173210000000000000000000000000000000016624d64660b63b70ed197f6a675911b02b0bc6f880348faa6ce4727af74127c509ce8535d8dc8db5ae2d71aa497e0756fb773cde356e2edac3afd2bf703b59161162dc1e915873ecf606dfc0e6efec5000000000000000000000000000000000f57747c20e1b3923c7e1d8bd7d877736cccc0e0829837a086d62d48cb54f323d90b57ca3339fe4b256df529bff11363000000000000000000000000000000001940327a1b319dc4212e7a553d3f49904660722c89636f6a38604d96771fa0fc71f57674b7aa710db4275822c2b89903000000000000000000000000000000001956b81bcf961d16e50c053ca07ae67cb8597138f34a9dad4d82e0e8d23a7e08b751682d588f229311bc63f9598ef448000000000000000000000000000000000208981064443e8c72987945e399b45b74e529a0bb75e99b7d6744728e5c182a6b0a10e449147bcb0b0cbe70edcdd845bffc1a58dd06752a2a77abab835d089599b4781ae51ab998ff3c5b68329068bf0000000000000000000000000000000018c35ca3a63053fec853e8fda5920b560f1be28431f2f4b08789c7a202336c8905a5ffffbf69ae4427f267b1e13288d60000000000000000000000000000000019de96be76bd93886cc486c2671b5b0d731b568638b1b830a52dd4c481b9a1fbe2b3cef14b46e25f1188ddb3c158da6e000000000000000000000000000000001813ab16a11c79eb3d3d47ae7d9a7c05401ee91eb1183266d23077ec4c0c8f3ac7188eece06876025dc3fe271d65d4ba0000000000000000000000000000000004d2a416dc874e956fd6d29a3fb96195019f4136561b4c127541ac171b5a6b229746af6d6e535a8017e64ce06709e52e57f35cfd74f62fa39f919400f4d692855a4b4e9f91920e4306ebb2e772a484f4000000000000000000000000000000000623b7a8a1c24dcc603f01589e6679c74c4ed3452894e536a4cea69e99047092acc877dd0bb395b0cb693cb1702a64a00000000000000000000000000000000013de9dc75e42f12e905d729a52f25bb1a4125f5edb435734649281bdfd41083716d0797b0a80d842c2503d09cc61162a0000000000000000000000000000000006453c06f56dbaabd4530160bcd5312b8a148dbe19fdf9f1e44b7b047a73ee9ef9d981116d00269942ef73537885eb7a00000000000000000000000000000000075376135ff3acaecc0eeea32f8dc15add57e8f0297d053ffaa0fb0a8fc4418c5b142f96b6b9ce9eee2f949c960aed682d1f3709700634653374fba5a94d69163ef616a72a63d462afd9f01c9ddba84000000000000000000000000000000000120d088fc12210c1f5f6cc3d1091563f9a37d4d0e0d2c305b479f4d7e893c4d5c8170eb164e34e4843a21c9eb193d11d00000000000000000000000000000000159de80db3b1f0ffc5fa8c93e1bd54cf8ae19cbc9018a5dfed86179cdbc976c1c312212080ab221806bbe142d496e7a7000000000000000000000000000000001103abb75a78220218cde4bc4c59ddb5fb647ff808754dda200bdf586ee9c47a09e03762bb726b085928ddcc998af3ee000000000000000000000000000000000bff4bea17eae0f2ff3e7f99bfa91e6ae8aea28f6f3fb6080eb644861defdefc26befbb7874f612edac0cecf70dfb275614ed9a08dfd406df00719d5eeacfb0a96413b608974fd0aa1d4c6176b968dc00000000000000000000000000000000012dde607a2d4452c6c060054c8adb6307743edea3ccb6ac34c275717f177f0e454d9e33d4391208198cae39d7eb6f6c00000000000000000000000000000000014cb4d8bc98060ee68a8ddbc44b83db5cb6d09f09b0d608357629251c35e44383e97058d0d68fe2df3bc47424a5dda03000000000000000000000000000000000c14fbb6c844fbf896fbd3cb3464a83aa4c6e9a7f0450ad96a07527df6f1eeeaf587f60a990bd6abe7aeaf5eb46f362d0000000000000000000000000000000001d9468774318ea711b79f16303ce86288cee312af296f1c9f607ef5f97c7d1cb48a7218775c8aef00c227ccb586286e7c1dd2e5e5f630fb1d07e8934dd3ab029917e7775e401c0bcf7e1fd83aef728400000000000000000000000000000000181e7f8d0ec7a4a7858bc96b61484c24dbb9dfeb3746fd3a231a8e442369e3e83516ee6043b1c06e7e2043dc86f6c75e00000000000000000000000000000000184c1d667c0ece59f18fd2eeafc66f1ed530b7d5f4560a6c886429caa13255c63dea01c3e357e3408af58a39420a8b28000000000000000000000000000000000a8475ea694cf607246a1c50064cf90cbe50ad5cf8006934a1fdf1621ba38d20e70860a2b5aecc05acc60943224cadb60000000000000000000000000000000008afa03c2df8e83fb64523c57d0daa7cfbb7af6a4bf2960ebc64515a61a659b2c37ee661050cd538fa00cb34746a371b64e9d16cb61f2bcdef30cf544d97e078fccb999b96a1da0eeaa0bf232f01995f0000000000000000000000000000000008b33a297c8f86f1e9d7166f9e905283c8e1581e582b879caf48585d0bca3608fe46d8d9f6e7c90855aee9d92283d7a40000000000000000000000000000000016962410d6b4b6f91437617e84bfaaba49de0369b8748d2e2dacb63b421e0d7de4514e7fd3e0dcbcfba8baa4915610d0000000000000000000000000000000000efdab72953b870d0e113efa7c183d99aefc100ce59791aabc72423aff70a5b74c577c06ca94bfd6a7722199b4bc22660000000000000000000000000000000013b18e31700987dfa4344384f9b41e72afe92c39bc961333cad3e7d0a5efd3842a5e849cff5655c4673f720fd0127dca35bca9082d66c06761f702dd439faa4957caa70ce0343268787f41a2f4bc0cbf0000000000000000000000000000000008b86f70c8d8b03b0e9a8975776d7fb0d08f95eded0a0124551d363c2df57124e0e89bd45ddd1cc75c258a4ae2f87916000000000000000000000000000000001120eef9eaff7c308b629deafb060d2c12b20b57562007fa810a2191d99fabe9c7d3c364caec1724665ef556de66b57e0000000000000000000000000000000007698bbef6dcea67a2c643342ab2a0f830c329fb6244d4a98512daa8a3c9d808cd2acc0cebbe3da920053ad73eb7cdc7000000000000000000000000000000001155b6beb28fd88d252c6b407bb9f55d22103257287ce77353bea580c90173b5c3d49080b319ea28817d67c52bead96f7980eac6c8db86ef83748d10b210835e53baf8cc9f607915df272b6e28ac6b2800000000000000000000000000000000142b28509d72f9e3be9ee916827fc1a8dfc4ef7ae2b72eebad5db605fdb2dfa4492b50cc3e472df1b52baa6e2b0eff5500000000000000000000000000000000134d6821088ce4a8b42383d5a43a32bb0cdc96c85f304a2601292670633d5e231b9dc479d199829a9ba9f39c162318d5000000000000000000000000000000000636da344fcb0fe50ff3e22f8591418f64cfc722b2860b4a5047f973f42e4cefb93c2f8eb8a14b4d150758ecbf3cf712000000000000000000000000000000000e6fd06d5dca702cc9f199f7583add86c82f7b530d4dfb9faec36dbb669cf7c1cd1260c7e4f3026824eeb5b979e9fdaea256ebae4b204b3888d7bd244bbff26431ab5890098870f13800bb3be3e842ca", + "Expected": "000000000000000000000000000000001684f447f8929ec0187811f66e985f0014eba46eaa87de2d4ac2347d10c0550e4044ec7792d9f315c50081dc2097ebdb000000000000000000000000000000000ee0c46efe930bc98f39dee8cc6a792744e84de4fadec035d25ee8ba82e1c53264d0885a1fb05b2b8dc9c6a1846c28320000000000000000000000000000000003a5ef98843099235a2ad9522c9cfce1908bef77b45794e7df9eb38a4854460031829e947a118e8160365fbec3725b85000000000000000000000000000000000dd205e195abef6a4cfa7da66f022a418235e1a1b2fefa6bd3ddf8a3851d8ca8c27652bf87ac644cd189ae55e3cc7808", + "Name": "matter_g2_multiexp_17", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000064698182f90c20ed6f6da7248cea32a291f901876a900d344ce4dc1b07822b480519cb8d891b5ee4f33b4efd90742cb000000000000000000000000000000000e7e9d2e79ec4b07015baf69a283f6a4abc8d7c1699f3356fdad6ea9b1c70e41e73bc14e500634d73749f9900eeb65f5000000000000000000000000000000000002ddbf40619ea5123c100e2d6553213e37883fb34f0f0f2124795dd971892d5c9051cd4aa78b9d20f196301ca9bb4d0000000000000000000000000000000017a07b32fbffdbf7a80f0437eac1ec5fff5a68f3b053482f034064992158b604bc34489dfd41a24ffba806ccb871fff15805f2e8013007c4f6d8abf441728eda8d742ea2f1df545f85d092f50ca8275c0000000000000000000000000000000018b4de9c04fde8b708408efb3aa7f24b5f7bcec14e7d06fd5a5b36bab528e5adc0bbb1e378a5ff6fcbc95aea530ffc6a0000000000000000000000000000000010da98267770a47e5ed14ffb3dbcf537dd14ae5eb79522c772a7a2833be214690db0b4e86621de1842d88018fc0f348400000000000000000000000000000000135548e2eec9ae7c3d23618d8286db13a5a628fee04fb6ec9da980f3a46838899cf965c1cc6f562e71d5b5c7428cabc8000000000000000000000000000000001669fcee7804df9b7bef32e2ffeaf285e8501842efe87c9e827fce872dffbf92255d3c3a2fb5c382ab7aec0bba1ae0e5502d777b25f3112ba2264022e2f28dfb6e5d5239ba097e9d815928be44b6a62a0000000000000000000000000000000010ed20c069bb300a27571adabd239e70b767af90b91c4d0e93d88278a6da47b7c12fcfaf62ac0a7b9966968cc9f3770b0000000000000000000000000000000017273eddc25cf41f2d7734a3866711e83d4f2823ee6a036942799f837d5ceff10dd6022ea25e3c1e28c7b14ed8f4e7c5000000000000000000000000000000000f201f314f66f6b2c6e1365c0fac7b187d31bc45b5edaef5243b5488e26581dee24de4a5fe493bee44165cc31d8d72ef0000000000000000000000000000000009dfbdd86633edfacad6b78d292141a1e653a1bfd8c48a96b2f6bf8271ed6033c0511628caf2ef258eb64cc8b63d8e5be7d64b471cca34ab0c91f61ff26719c7186dfcdef13895d37ead407873736a740000000000000000000000000000000005c4a4a5ffcb4a39c8809821ff275360ff937070cb97a791cc9ec45f429256a6d2d6127248b6ab0b6c71c30c4fe84ff20000000000000000000000000000000019fa60f481c5be953c9c7dc86903a89af0ca2b4205be3a00d793d6de7103852e147ebc7d983c6d6e8cd99e681241ad440000000000000000000000000000000015b3b2eeb0f81ff8a2624e2ff2396bc69feffeef62b1b6a1e73ca4b9e60506c2950fdd23a37cf56387b8794449d3237f0000000000000000000000000000000017021a69ceba3446dad9fcfd8cbe5b89b61372f57d43a8d2e2c8f4534bef6b91408409dfda9438f24526f7e6bf1f4240e5723630020fdb48e44adda735943c91ad7d1e12f3c32d823833eacfcc8b02ba0000000000000000000000000000000007c8f07f22a3412fb4638cb704751959cda4e42e4612edaf5b1f22c8f9ea314508353445114bab6c07ccbb4b0d0bfa6b00000000000000000000000000000000062d087155c8722d0102c8e5084f95f5f58ed626d48197297d21d2108ee05f70f16d595ef73e8e1207a3c0b013fe16710000000000000000000000000000000003b6652934f3acd4c91c6c521c2476bcd2594a939ff2e7ebcbb0f451fcf0a656a518dbd4f36f165f9b2f58054e9f778f000000000000000000000000000000000bbf21158227e0ad5461de9ad8bd580f9e65327dd4e23f1ad55618f6b0aec45aa6076fa88557953ad15d385a074bc7d96e9e37bd811b76133c12268d325ebbd6656e7ed718cd777458867dc98b1b3bc50000000000000000000000000000000019e336d4d342f110eeeba9773b8e351f26bb56361c77fbf12fd9fc218fd075ae38b95f4a8a5ef830fc2cd92558b1711e000000000000000000000000000000000a112725046ca3b6cc43207e6b36f38d96ff98dfe3444d67ee3f4b0208f3b8543768dc9989f936637d7819e7dc5740fd000000000000000000000000000000000527682076572d8cca15e47a2faf62b129baad29afed22d32ea47983a8d0b138653c1353bfc6fbf9fdbec2efe36700f90000000000000000000000000000000007e3c5aff373b5154ae66f978fcd66d09cbebc7e0c96b4a4cf23c4fa5f2fa655410c7f1ce597a3f5f155017720f7c50f7d46516db284a3938e672ad3c6bd40313d77c5d643ffcc59e3f55ad983cdc0ed000000000000000000000000000000001865c265ed4606ed16056c0b28f953119751d7272bb33b9865eed312ba23b32d01733ad5446cea5873c2bbe37fdfce7e0000000000000000000000000000000007018aca1e7ac211921cab1cc6bb18874d2f39f00d916b8f3d46a088a378f3c9b49ab8a296d0aa21608f11b144a0c687000000000000000000000000000000000210561c0bbe5a9f4b2237e5bdf88bcd73326d395277deb2a883526978df90792993e6ee520c9d5ec0a6f7ef5c6b3542000000000000000000000000000000000cdd344124b7b5da556f64ac5d651a6f9b74427fd712007310d720f3236724e2284aab812d739a87f3a1bfe8737dcee7586cf63c5e52b44aaa79cdda6dd6fa92c6fce11d867b2ff5a04c9e44e0b3930000000000000000000000000000000000024494aab30849df790185a4f939954b724c387c9a366fbe833b628577654174f705d05e7d7dbcd29b8873aecd55df0b000000000000000000000000000000000863054fe3e4838d2caec7103e3d0453e86a17fff0dfdb84dd819f31756032e9e97b7be89b636e5e0b642718f6da217b0000000000000000000000000000000015c8bb4fcb6d9cf941b722136d8d76d847fd6d5c643f4c0049c9746e76e49726fd463ce7899f4df66d04e5d48e523e6a000000000000000000000000000000000f101bea4e1bf610d2782ede91da95eb2b0be9ce60485465b9e94cbb9530b416c4394862f0ba7ee8067bb48e94c07c53efaac96bc5f686d6b952e7082236622b737fda0dd3900bec71654bdebc8ba2e40000000000000000000000000000000002dd11f4dacf3d9c46579182df1c1c45a364a8dc1eb7aa7d54d0141306f1c23bed85235783a22b8e6dc4adc35f9193ab0000000000000000000000000000000010d1c642fce533039e98712bdfcda86eaa62d2d69b861ec4fd835488732fcea414cfb6f3f8414152f9d5398c73a74fd2000000000000000000000000000000000c6759b75b1e3fe86c00fa124d09c5b7438ad61fd1bb71695743ed7793f39b7a0fc99b055201ac1e3aa07ccec61b24a80000000000000000000000000000000017580c9341789484fb31386eccc9c344539a09f1c4421dd124b1a0ce61f2d0528942f7fe8df67c6b2bbf782996def47b39d6045573dafd09ab2a0d8ab6e97b0ade43bd79d820749ecf19cf7d99792ca8000000000000000000000000000000000d9c48a111c8c74bce8cd78d127999531e46a411b2f0be3507226766bc8abd088638a237674ac62e0fb7dd4a86d09b79000000000000000000000000000000000073675bb81e2bfe6adb5cd929e0b7280f5d60b3dee7f797d65ffbefc2c2944a9c7207648bb096f13292ff4440c3f03f00000000000000000000000000000000024d2e0d5ba1a804520c72331fa23a2a326d461177fa527473240dda130f4ef893870e893e1dbf7c5dbb0178dcd29b3b0000000000000000000000000000000002a4c9487485ec33f8fb347d246ab0d41b883bec30d2a5e88cccafa676569f25ffd8341cdf6c09f68afae442a574f3334c4a2ff4ce4b633ec8fe0bfea42ccc329b7d3fbce96c26989b3c7a391c9e806a000000000000000000000000000000000c1965a745e42853b4d54739b2dc507d68d80b330360a4020e4412ba5422daaae313fb9597c98575c66ccf351e62a527000000000000000000000000000000000844439e6f08a411e61d37b5b2b07921049432e1833e839b00d6cc11227dfc8770ad9ca06037043668fe7ce3bf3ce84200000000000000000000000000000000152ad6fabde2e0310c978404a5244209a9363cab1f3ac9f71339cdad6d40c84f8e5a8a196283b581d0209ce90e1e3c6c0000000000000000000000000000000010eb6af62c7dba122b0e24e8326dc906370bcb4ba791c47630f05f657a228c20e010c065b93537ec84fa14a756b199789af09ef1f27cb83189e4e13f3801c08d3a2adc8b5f88717954ee84499defc0c40000000000000000000000000000000001febb2cf2d664e4a277cbf08fc1fbacd05db415a12329f7be551ed56d67f0b5dcc917d1b02951657bff3a26bd8c178d000000000000000000000000000000000018af160555292b2f7ce27112c1d60038b564f5427d62604387de97dcf48e4473107f91936b5e8008065a1537f7ca340000000000000000000000000000000016bbad2a7f5451098294a7cab2fe10d206741a99b128dde5eade581d02ca849bab3662fc3400fbe055dd93a418aecf0b000000000000000000000000000000000b1e9586cc1b357da6e58621ce09288e62a79517144f6c6b867359251baad6d40217578d49c1501f23206b125282bdf4c72c1dc1efefb775a1bda754ff17389a6b6b6bb25e22697847d24a117eb8974b000000000000000000000000000000000b88892250c848e7bc7bb7e42cfe1048a1f61dc546929211846f49501ad8c7c8817f5b5b99ed092d5a2236d59d9c8eaf0000000000000000000000000000000011680c6549f6b7d9d187a6409d40cc26554df654083f1e8a47dde826149d68da756adfb1b65bbd219f79a10d8454e881000000000000000000000000000000000f9596121dad98bf7acb3fd65fe7e0bdc8924e2390341c11d9cc9cbb0517f988ff79a5e1d60bd89449b5f042f0d0b0c30000000000000000000000000000000008982832ef53bafc23ea817be378532b95b5872217093e7c7c2f4512d03a9c9a6dbb7950563a520781c7ae213fc82897b4a0c7c2e611a24c722975ae882dcb4b45e6f6b41cfc87e8c766beefd5b10bfd000000000000000000000000000000000ea5bc2f8bc2b4088d1fed7090ba389577b11a3ee0775cb3f0657ab5b07a6709d3a18fa5fc33554dea235c60baae4bb100000000000000000000000000000000196b6259b06a4c91a0bb0adecea134c8609cf983c2c87158a69c9de3b6768510fc56543a84d1266dda78d90c3b0516ac000000000000000000000000000000000d0222d8ef278cd0d85dc8765fa7c4256394a5ef61f91301af6c7422b4cb17889224c75ccecd2df3ddc9bac98b493863000000000000000000000000000000000548809ce26cd498816ef1222d062b1ebb7313a07e99e3aad1431f984e9b8ecfd43357ea57da7e0c6c011c5d5400f7ba986d48aa5b00fc16c36dcad061d10937b55ec4deee63cc2841b7ebab84f910d2000000000000000000000000000000000b95455351fbce6f73de0345a195f91bf96abee361908cea6c4dcde72048a13a9a23991a75b9c988ba0afd9491d15696000000000000000000000000000000000305f29b05fed06ffab484cb065d4852eb323fda8c9b7c0a78843bd7143effa95cbe5e50c1a0c3a9675bb5381709b6550000000000000000000000000000000016ebcb25f1b8e8d7a8f7131455ed2be084bdcce40034e7ef24a47fc29e447f912c20c7c9910e025aab975cd2c8cf1a96000000000000000000000000000000000d84a5de7a5fd8592f6cc2bc7c3d93c06e26185787856c922d95eeee345ddfb7cbbb60b6d992c5ea4dfb33101f2ef1dc979d4df836daac0960fbbb8919d2f90c3457cc987153def711d6e8a12fb14363000000000000000000000000000000001377d654f80e933c4598aba1f637d1e37d66a96680c3a89a762f412e187817ec08f0ae897b08206a73f1a423b742261900000000000000000000000000000000014b71954b9bc22ac22cb2d7d7f373c3238c923205b223cce6c219175df2bb6d7258ae46d6cdb019311bd386275499fb000000000000000000000000000000000a08ef83b67bc972a67b9174d0e5b1536af882d505d03464c9a97f68061aa319d612de9db84e1e7b12fc3015fc2973b20000000000000000000000000000000005f716d0ffc30005e4a744092704a9e29f58fb06bf7d8d6fdbb95a4c0eeb5c39452cf662721ea3e0bcc67f25931a109425ae495ba75cdd0bfe200ee24d813e1aa93c100ce861c9ed7fa5537e11778990", + "Expected": "000000000000000000000000000000000c53f0ca8901f4751be4a478088b30dce70b9ecc382455049df9ce108eb0a8d2696bb325fe9ebfd7d967ab5b9b2c2bd800000000000000000000000000000000033460babd2984a5d8b7002409349972f518364e92648927e223d7a3b648e952482c06cc713bdc29ab83f2646e9398510000000000000000000000000000000007cb9dfe603dc070151cc477ec5bb5a2a949062e8442399597c5eff8f1decff538cd0aef1384256dec73746e63a6c66c0000000000000000000000000000000016b56ee9b21c533b9c464178d14ba5c92a90e6a54c3ed319f487c2082b1ce1d0ff81131a5fb3dd7d13e0fc1d9ad9e4a1", + "Name": "matter_g2_multiexp_18", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000104e0b91821c59290be48b97936458af89078b176b5585ca9a79070c7050309b01df4b0bcd84f137f58304d90599212f0000000000000000000000000000000013b00ece925fd17a8effc43e21d982553ab2764b13defaae5e5419cb9a23ca7436cfc44088c2aded63785e4f07b6e186000000000000000000000000000000000267cdd42febf0706675b60af8c0953582ced84dd5ae870815654cffa46eb14b747fb8fbb3b014e59c929da49c6908050000000000000000000000000000000011c5384d7c3e0f4fd66ba4b4c2ab60f6f78f9930e1fed233263dad25294814d9e2aaba6388ee9f924e2a323693b6e43bbb2a329761a3d6a2e4d9d63d7bbf7fc6fd321ec0344cc4d7d1b6565c475ee9670000000000000000000000000000000018158ad70994584e6f2443b8b96c1e4772a00fa0bf74865c76000eae470eb02cff627579126cc465046d4e088782557b000000000000000000000000000000000d72979d455733756a0849baa8afd79e18960f3f6dc9676c33d1663961617831f3266015cb998fff28b78300c87c2a73000000000000000000000000000000000056192c20cbcbde6099256a8f40c78a32d3fd212fe9c511951c7523a3559f60662e070f5b5e5f87b1686be0bf6cc890000000000000000000000000000000000c7b7e8ab7486012d95af5b2474ce15db612bfe1508852b8d99f4402d0e4f075ba056c19df3caa3a93bb4db89443096143cbc3dd7ec63ac63618a9e5da1f9c3fb952c6fc6972dfec6caf1a415a0aa79e00000000000000000000000000000000005a2741902dab47e8d38992180a9670faf56d1849dbeaa75b2b4ded93ee5494184c8658232e9131a8b08ac9b5460bd400000000000000000000000000000000189077d5130b3a4d7d4c3074633fb12739f95b8b6ccb082dfa61d845a389e6ca7aff835fa0f194dc349e1584b3141507000000000000000000000000000000000f226324f242cbc5f616c4a897f82bc5503ab1963ca38f30070c7c9916ef6bef5caa7e2e26b3f9fe68a1d59f19a9831d000000000000000000000000000000000a999bdfa10e4838ca69694272b0187f7d0198d6db0fd85eae688424fb09baa165c623dc6da567fe034d7cf9f9a0087e733a3a84eddaf3af8c5009646a899f6ae8cf233f535e360e29e2952088ebd7b6000000000000000000000000000000000fe85d976befdae8fd0ad33a4404415304afad1c5698b91bdc15abb4f268807c906410a6ca827320f5271c8fd4c8d6fe000000000000000000000000000000000cbff7963daa20c1d20717bcd47b872b3ecd5f38de1a467ef50936f13d6aebd978116a736cb6c5d676c6a9525bb0b7fc000000000000000000000000000000000c3d20ba17a21bbfe873d88e9221571f1bae7f02f35b8e677c9c42907673d765150c737f0011fdbaf4faa883b0dbf0280000000000000000000000000000000013482c68a5e1084faf12e8aec92cd9f0692b173556ac8ac3c7519beb4bd75f847f41ab9432421c631b14c885c001dce25112b5912aa3cba657d8de3dc8138fec92b391d5f988b82e19f16fe52fafea71000000000000000000000000000000000f9091a0df2c989e12a844c447287b704803d1532a3ecbcc890e6f6a885a54b969c53323c105b3d14d12f2cf766b8ac8000000000000000000000000000000000e54f3a9def8b3a9f972726e606195849584b7197ab70a28cf5644cde15e70bb6e3044042b649825adaf5e37c2d5e614000000000000000000000000000000000cae412d8a3ee3c5af38d7a65bdf2440d9cc2d6348dce0791f4a7e71ac483d7487b6c789be0a401777de3f57ec65de820000000000000000000000000000000014df09fd2ff406707004f6afa366d06bcf8bf18f5fc4b444b07c98b3f358247c6056a6337f5b53c35db45904797fb4455683e0b33b5463bc71283f0625269b2b33ead69c1eb7b23a996c31c514d06937000000000000000000000000000000000a8aa422e1d58fccc84615f9ca4a4743cf5efe3a1066c9819f05042100bb8784fcceffc8b3a739f549b42f34d62629e7000000000000000000000000000000000c737cf78b10e82fc0cc9823891f1a5f1e9229d61e8f369c589512d01e5180246db46e4f09e811464c6e1ad930226d390000000000000000000000000000000016017354434899e2285da6ff4b27fbaab633d962197d2ff4fa5f688c4a85e1817434cbef13a6b018df4e359d7b9ab7cf0000000000000000000000000000000001433c364428ac69ce4f5678aadfed4e6d076241519310686de01572da5cf78af4a98b3502519beb0dcf04b748d08cac5bcc597c5ed7f79173942a0250e618c93cd0917b37b5f354d63a2c02a576080c0000000000000000000000000000000001f8b803f3f76aee9825a9a960cd2f9e8aa931568b32be6169036683b4e6d8c4abba6bb73b137c7c6d6b6ea92f2023ab000000000000000000000000000000000fe9edeab60bb55990ad2c85c8fc9341e81de54324652c08c615a745813f08153bab3849dbeffcf4073f087f7c0cf0f6000000000000000000000000000000001955289b1210fa31542bd89f95188d60751b32e8d54f1d4d280975850e57db7b151b872bd431c528c22fb89c9b8784af00000000000000000000000000000000079c8a56c72adb9fc9baa503db394635abb10264dd43c60f2c82d041d43240321ac1028688d92c4696395d8840d52f15f2613a8e50fbc6683ecdd7c7fd38b4caa8e5dc9778909fc8680a58b16ebf40da0000000000000000000000000000000000b0fd79e62c6129fa115d821b8f2a58a4564f5ccbb14088f59d5e6a17a64e803f32bf8e5a415aac4d6491612d95ee8f00000000000000000000000000000000008d837b6c70468e1e10f6b979b7c0694d65942aac48b5baa829c191579186314ea35fe440e6d843fded02b95f9816890000000000000000000000000000000015a05bbc4607b113b37dc0b4b8add23736e0f1bb1e48aabc15500fa6941b17153918d256b6442687a432dd9ca9a198c70000000000000000000000000000000003546953d97306266bdd359d4daa939e05c0466691de59d2dbe3584e2ebfd9a9e1516cdc9cb643c5d31731835dfb07c657a747bc919991ef9b7b10388bf3f301fd910f807ccd31e322be46580a71b7c60000000000000000000000000000000009a4366299290c3c6651b22865fb22cc972a05ca5981f5682574851e41096d531e375e981c4e1b1cbfebbc70a41bb6ad00000000000000000000000000000000001e6fe2097fca2afb8385a3100dbd5ee1b7ae972e06ef9f5e34eb9fbdc65455e1c822299e06a9dd5a3f71a0c1efd44a0000000000000000000000000000000005ad2ffa8861848c46722a7924ece68580fe44e03157c982b7133361e974b59dab7b75358fe498fcde9f68b5b99f23e0000000000000000000000000000000000adac33e0b7e6740c980a4f297917fc4fc13f53a71909f2eecd0067656c6f82c3b371cc638509151bf937f8257aa415d86ba09829f4bbb383e2e131d554c42edf1065022975655c07df2b3445a3e6cbb000000000000000000000000000000001462d509503d2c33829c3fb5380199b79b970c2ae7f944e54a6d0f0deab3571976916cfc311ea6ce6128c467665fbbd10000000000000000000000000000000017f6fe356cb0dd5bddd489c26669f0f365260bb48a5f862e9bfb778a7ff5392938b905759718d050f7d93f107236cc75000000000000000000000000000000000d9b3ca93c5133cabf3d3daa565bc6b51e63b7e37f68f3bcc43b9b3ee7db15f8bb33052eb7e332ae3e9ffafb17cb77d60000000000000000000000000000000017d6b898d9799385990c9dcc3f72ed93333486b98349ef106a230a71d768b75cf56cd946f5952075bc41f26dca9c83c003fd5e91f590fbe171aa3f006617b20ad645626c970c2351e048b2ac3773213600000000000000000000000000000000158e5e008796c10f6050826c29523864d06e68977cdc95d281a8606924aeed0b475ab152bec5bfca8e0ec53691b307f50000000000000000000000000000000006fe8e75328c067546eaba93f4be2b15513bae4a3458112c3ffa457d15c23636816fb469f071889380f31870d713e949000000000000000000000000000000000b9b21cd58f8742ed094e9b770182f6f3f855204d869e53c02d0c242a133e957c53c9fabc827d6379b39541170be313000000000000000000000000000000000014eaae1f0789f0b1e8ad3b452b4ed3ff87bed49ffedd13c8c35c35668c33537b63050c06a5bf3d88d516cddac13b4c935ee16785c004dd2a01920c52d3244e2160fec2d17a519974d4331527cc627910000000000000000000000000000000019f976b3584ffc188424614fd287eb79f060c55e9b3dd2f3eb99760a7cb5b70e2b62a0895b05e7cce2e390853fed61b3000000000000000000000000000000001117181241fead3865eba4804ec2c14f571aef5351d5bce29399113d007cd4e9c262af1c77daf9183346153e562864b2000000000000000000000000000000000f823f71035a4870be2ef20bc94e97d74d18c0a1be9895fb27c54df1f663df6f9e6e45ea5fe4502143a84c05e517b02b00000000000000000000000000000000141250f392fabd4566e0cd3a472a4b2971a432a3a5e1d9c924866c7a9516322bfa691e9dccdd5ef14c561bca6dd70ba204a6d6e29336015d99e107cd312e300bd54f815c785f6008c47c99fa008452700000000000000000000000000000000014d6827b9bc782863491bc7c544263f58dc04c18e08a87ca2fbb5799c4aa70bc039416a85dbba67dd83bcc27b70748670000000000000000000000000000000016c2816e93ea9d4bd6e42a9720cb89d637d88e00074da3300c6409be98a03403e9ac15f83167cdeb13800ad174ac47f10000000000000000000000000000000002aebc0116a62f93a6e86c7fce86745618e08f4aa9cebca7b520e9176bcdf1521cb2bf7eca7f7af9487fdc82dce76bb50000000000000000000000000000000010684e3254207c4ccdd49e4775198df981afcf7d9f89b894e204c5dd84ef42b89fe3e2f6b9278470e6cde4d3f4abb3b003f9cd3873dc6243748e16e4806f8eaa339edcfdbf4408a8e41a3df80c9816210000000000000000000000000000000010ab1d5494509060c9784b4744a0572a9466d6c374524a6d338ea12ac5ad89519217c462c3487e398325439311bea86400000000000000000000000000000000197568cb53ce03f00aeb04278f355da862be757366dad14ca6d30b3a537df9855a1196010773768a91cb4bb664a34f0f0000000000000000000000000000000001fee249315794d30eaf929f44b99e07927194c6015ff34a4530698d7d68239240c9cc48530d52ea06218a826a655cce000000000000000000000000000000000645b5d701bf3422228576467120935f014c754dd68bb3555b50aff5ca04001a26298982c97a64469aeac3432784efca34135a2e7853c74725bdaee1ceadead7b4c7d729650df6544bd525c05c94234200000000000000000000000000000000113e17730f8dd7258157085c30cd9d1950a26c848b55e3a8a55865eb567edecfb09f32ba27fb3e2096ea00c30f31ced8000000000000000000000000000000000076db9ccf8df9530b64cd43ef7b496d1f432885062406028901bbfc5882fd12533f84eb12aa2ce8b7adf9dd980db0870000000000000000000000000000000015e487de49f1e494ce9907cf0ed31fb0a159c5290538ad969b2c8a504986dc9cccf7c74a61f622154e928aa2dd689c0800000000000000000000000000000000195e887083a98fe3f50a9ff4b342e004398cdfee55c4b02a4db0f65a77d3c0b142a45201674726c96d5f79f8604d61860033fdcb731830951dc3c4b33f06310eca51762cb7279039b3d7d9ace93c5f2a000000000000000000000000000000000d80c7e50973205585b20a068c64957cf4572eea40e32ffa8b759c38c6ad6f4468421f2fd6a6f5da1b0d008f625b3e6600000000000000000000000000000000009242dc1de055aea82b3b917f88b6232c550c3aff41241a7e54caab4c234d29b5d8138968846f7c754d73ab3b4e7913000000000000000000000000000000001188c31a9d8359d737576f4ce7a7900314aca0eb3b51baeccfdc9245bffec49143a11b3331f9126b01de0c307aa4e44400000000000000000000000000000000104ef4835124fa6b30dd551653aca25db5a544af6782cd0b1e7d26178253e0e33cda77428fc1dbcfe6114a758cab5c814c8112ebfe12bf44e84796e8b0cd03a93d2164d6edf1f06a5c520330a177da87", + "Expected": "000000000000000000000000000000000e79d18633c18ac818786bba87d09c9bb1571e179d8769f8fb82e2e2b7a6a8695c1f4f06deebcb84524e8facdcb49d0500000000000000000000000000000000149d0231fb030a1bec170decd307c10e72cf1cca55c8a1b67aa94ce61e4c7d2ddfd0b8e71598e1abb054355dbcac1528000000000000000000000000000000000090f5be784dbafb0a8aab1516c773720341de6176017e0fb43a275d60de54c1189144956d4876d989232b362b90851c0000000000000000000000000000000019dba28eaa6706361f285b3abebef68f764204c74ee93ea011db01c19591ddc6f98799fb3026c3c223effe4489a7c676", + "Name": "matter_g2_multiexp_19", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018a6a982acce5693e632901f3136eded40071e8c7caa7887f302c32621c5bcf9478991ca519978b52f8f69415c0d070b0000000000000000000000000000000013420ab920c8ecad5b2f9aaf9b0074c2386b0b08c81923558770d4c4a6b206a865af8322e9755706cd5e595bf0ffe564000000000000000000000000000000000c0e5bf5465d564e3ce86d6b742ca687448e6952439b1ff44b86ee6461464e07f8039e8ae7a301c6caee7eb99e38fab10000000000000000000000000000000015eb8751b750af62f57971e88b436658758bd5712f98861fa07328d2b11e8725fb55a2a00252e0be06b0c73aac0f7b8cdbb32a4fd8b9dc58a382a7e436e23f49a134915372553eee8c605436221acc80000000000000000000000000000000001328927910ab502e573188271108706152f562b1d5f6ec074f8f9ec5eaecc6cd5e8284a060b65d26463d22c8290ea4ca0000000000000000000000000000000005a1fcc348122350981dd5090c865a2aeb851ba8b6e0443c32f48b157ba673ae5652a70390888b3458afe6fe975321700000000000000000000000000000000019edc749a9799c8d3df75d4024791943a8fa02ba0cac90b6819f0bc42687b044457bc7cc6073506e8fc19af37f224624000000000000000000000000000000000fff20fb2b554b63758963c1583b996ad450cfbd5ca9952e38f38a8994809096086ed86311f7d73a0a5898ac261ce09e57df9664d3e17d9d46a886efde4e37e38859893113558843bc019699eeed8ec00000000000000000000000000000000002a7005dd32bddf1031f27c2ab999604c048a37c39734db48a30baa86c61ef626cf82084651ae9ba8a265333060a408d000000000000000000000000000000000421bf913a25108b8f520b2becc6f8064029dc046d0d5effbef31f0af59eee71cfce83fec8dda7983d50c6d5cbc8329a0000000000000000000000000000000016c75708f1dbfbeae3b06e5e9a7fb676c27100b99deece14d979b32a9c3cde6e9e96c8560a00aafbe6e7decc84e7e2780000000000000000000000000000000000ce23c27b5128bcffa424fd1d181d21b06b77bd6549ca5eba9a28cf18bb9a979270f6a5807c640dde57a0cd4f3af8cbe2b433b7a95c26e598002cc00b7904816d59baaba79bae7c6a7c26dcc48a487e000000000000000000000000000000000690c7ab321c0c93b5ae4ed77843ff4030e4ffb504c685d28573e98836e8e56dc19d662ae9f496a346bf2a8be5396741000000000000000000000000000000000fbbe3861a8d202b10801cdd606b50db0ad6ec7b923b90ae81ff5443676c3399e249e9efeb47b72d2b0a54cb0594686500000000000000000000000000000000148a27016968f0258e5eafe0a8182c22091873a5a58b27aa2160674584e06d5b2f46fc57a00617af18d0688df75294cb000000000000000000000000000000000148449d00b3d1b5b43b08a0c6e909a2d9c66920b60224a2c6a2521f0bad35b99e3bff8be0effb2f7f34438662d7a4882897583b53567bcfdbc63ae3e864a9cda24bb732694a6b27415c5212c7f45a9400000000000000000000000000000000026b55509b81befaf6baa682a3e92a0ab423fdaa84d2897613fd31acd9e1590f81581ba0ba87d68af76b01c36093e183000000000000000000000000000000000c675e190570bc5173b8f508d5bd2768c83e7f56a08cddbc636792dd75386939942827617c4aff8628a74b74195adea20000000000000000000000000000000014f59f38ae9e77f3a76478ecd47f32200567bad11f191d303cf15d7801ae7b5a3286095fc8726acc9818914b27a776bb000000000000000000000000000000000da89fe9493b2d9d46596d80162f5831d4fd8cbb83b46e84e95d5d684eb927022ee62ebc3519442007fdc543701f97bd2f7ff17e54d759eb9c51e16cf6f12d645bf2d091427416b4edbe1dd21947b4d900000000000000000000000000000000170e52a240a7ccf2d57ae92ea8dabe62ca4b458a5da42319ae89cad22ebf13541b0daccafa1b1d3cfcffe81b500c4cf400000000000000000000000000000000174879425f3bfd40fb74a88e3dc578e45b0e0eaad94da009e4076dc42d234d78248ec3a035666dd6de235f87e1a47bcb0000000000000000000000000000000005aee47acc3260d11fe0ca16050a29f92763b3cf8ac78da52b3b2b3e26d8ce7b6ccc187fcd81695aa456e9b94a84269b0000000000000000000000000000000005eb297abf35b51d57474b4989dd8f793005bf8e82e49859c41b786ae39217b2321299829198bda4aaa261a2723d43d6ce0a097efee666c22d1dd0ae8c8e11283aae781e1deadceb3ebbcbc5e5280a61000000000000000000000000000000000e49e94cfa35d8ade2b76865cc8be04737d00b48b195078c8085cbe782232a544cdb548373bd8ad0282674ba5c96fe0700000000000000000000000000000000047d59661f095c41bcc27da5f260f13a3fce334bba216b45df548894bdebc691fe779ccd63d99a9872973ab165a90c01000000000000000000000000000000000772e9a9c22bc7352fdf74915bc464de99ecd96420ef1af6e8bd5a05d73fff89c78e28eb340d4967e906f28afe1320490000000000000000000000000000000018bccff27bf9d7cb2159b9f2d1faabbf8591b53ca8e67e661d9f44f6dba6296e3e46ac32c50128bb5fb076cb8f214e277b2baa349884b54b542e3993210ef002f70c6467c7d512801f0003da789c00580000000000000000000000000000000002d947e728a3b376de520bf78e56452930de42544241180906719a24d72df65f8250402ccaf14d69935b1ecbb0b4d34c000000000000000000000000000000000d5614ec77a9f31915dddb3e4bb533db001702891a45f0bbac49e73d9c19a235a00442b52d452d77018f883706a616f1000000000000000000000000000000000dfc6a73a8e36b7b2d0614b1c6f7bf1ae284ed740c768f08416c0c09a601fadf3e4d7b17a93601b1803d19a04ccd570b0000000000000000000000000000000010d6a8e4eca2e818d6dff13faf0fae44a7fb90be436a9ef3aab05515a35cebfbd53e9af866cde1745f0e2c3b045486dd2b94d087c3ea101649ed57ff308dd3ae0d25a1ad8884763cea1b0b7c56a3834e000000000000000000000000000000000d6c5a6fe9b4d4580f8e1d89f0510bf5dd04e113d6ae5db04af2553bc0eb3a32fb881300f638fb33f7c4bfaa10b063660000000000000000000000000000000013e001b08191707ad98e21b3e0830286c6f3bf587b971dd4ce39e55f06db427676626a5c31c4a67a996a5725ec8f402c0000000000000000000000000000000012f86ed85113ed1abe9dd3826423911e63df0dfb51ad3d1e0e0318ae95991a6a11150176cec77f9c83268a322cb7e934000000000000000000000000000000000dda719cd2cf1aa769f94c21af20ab076b8f024e0a4903e38ddaca21b6bcd6f00baf7e1ed23259f135eb8bcf9c3f97c44f8c35b920a35b71dcf8d15a8a826e5a7c2a2c4f1ac2c2e3a6d100363e7f541800000000000000000000000000000000195ccfb9038bf9e637b88c83c552ffbd562357792513b15f703bffbd373ebaed715a6772fa7e6e5678c2e6422811dae1000000000000000000000000000000000c5a110f31d71b12cc42974003ba39d99dfd91769c2e93393449083a9b84d31473e3a7dff7ca40164e6e7215b03f44ef0000000000000000000000000000000006233b2dcfed96559b565928a494f2a50c2c375b3d7c60ee6b286c538f4fd5ca6f8b2a61654fd04d679bb3e05b9bcb03000000000000000000000000000000000d42233b7b5ad809c735c89c455ba1e8fbd623e1602bc729c01d362368666e4f90e7b076e32468041f3f5665c6fddb0d0ae6101fac82c10267770e74a0ee16b5be6eae2d455d742303a3c624d52aa726000000000000000000000000000000000f6d53de4f8b20de19b2fcbe8a6b8b8ec4bb801bce7363f89b133532ca7ce4925312e23c618a0182d158037c0d0bf07e0000000000000000000000000000000006ce094e24eb14b9bb1b4a1838d8b6da5f53b5c5799ab8dc8934b488cbabf698b99abeb016259a4e1b0f626d27f2c950000000000000000000000000000000000874aec7c8ac360e3980a6e2cbf3f7468f1df7a8d9158f8bdbb0f387d19f3b05326a081129576251ec41a926f670e58f000000000000000000000000000000001711c9b2ed7e2f789b29073f180e46d0c373d6e75c587ece67b8aaca1e9d9b43a96d04dfdcd42f943eca48e240b72ba8002fb31d0372e7730499b26d617b53ea04821c6eae922326d755a0df31b559ae000000000000000000000000000000000e8ddf88269aebf190bf9bd7a8276de92ff6039e479e42a490fe4ef00f646b049eb8ec4b8e073caa000bfcd86ee8724a000000000000000000000000000000000a9623655c0121ea0575de714e53c9e304fa3309f00828ba0e786112781a38bd458cd67864ab17929448171b5937c1d900000000000000000000000000000000198fccc4a333322599697e904e9096240b9c54f89ee6db97475beead62ebf730da1a179409133698ef13abe1310689270000000000000000000000000000000017b059ac08a3fcebde5888bec4d7cc2c70b147b3b1483fd001330637ff1c036faebf292801204bf2ba49350795708dedaa846e68337f4e9c99dde506a3af792732342e3b836376d4816557fc1fc9b916000000000000000000000000000000000a36274f33b4dc09e03a5ad648af0913e5ee95af83df8b4f2a158456aedf0a0528f9b4832b11162dd67e4d22b26e9f940000000000000000000000000000000008ce96d8bc0aaf2dea732dea188870d398b1f3c266b9bf019e1046cca05002416c910e02e998a1604a17c333c65c99a0000000000000000000000000000000000c1a0e4a80bb0331a94ed14570053f941a0438794e6f19d976cc62b3806a565697720ea03c2531004f13453991bd99bf00000000000000000000000000000000184bdae93abbe4d931a6a51ec85bc330d6181da2d34f2cc530e56b6803515ba87f5719fd6fce6a1a8bf1ee5a968bbfbedf9035283f1afc294ee68b2668870aa45e483d208483d9e967b11990cb55d8600000000000000000000000000000000016c3782daa55312a7cfa02c3be73ed75f4b726df5592351fffae19121b5cba73f427d35d5a2df7c63e2a5c68bf57f3800000000000000000000000000000000018b608343616eff759d512c97257f2103cb0909afb4c24a1cc9d8204274b7c9ed51bc762a6280e223a6116a9b23d1f1e000000000000000000000000000000000c687c11a879ec285180cbae3d2e4219df4614e238d4cbdff148ce5a8d21647c489ade3bf6f738052f149fdbc76c8bf6000000000000000000000000000000000936b34fea3a2633b9aa32244329891e332745876d05f95e4efdef859b23ceab4869db562555e5c8edce87a6fd075ae54005df80aa522e889e7720a9f2e44e6e7e19c3160ea282ec87a4b446d7b1c45f0000000000000000000000000000000000d4636a5e13bb59878319af6bb7c98e5d247c2c9cc970b9cec98027de2d4a8ad12d50906fe302c3d055c499a3742ee30000000000000000000000000000000002b0214bb1ee887a7ff10d458fe35208573456f685ee2fb93bb470762c9e27595cb00f2eae7574c8467e417c63c2a960000000000000000000000000000000001710d130f91861230562cd7ab87984ef45916af8e1168fb17b9765183d9d3f9b2c81c649687842de495a757471e28067000000000000000000000000000000000dd15fe505b1364f134ee77e5e3c1a497a20849b6ec7e201813677a1569a9f5a9edbe3df4c36bdcf9ada139b20e048ec893c9daec43032946a9e892dce960e07d29b304000378145148b9a24afd151570000000000000000000000000000000009a48d7c55d24ba49f890791d0f6a8a5ae08a19177575dc0d734fa37b52c3adc45b31b5e485a5d4a5533470c3549f5f900000000000000000000000000000000090f680c6fc1f0588add04ee03bf821868b1ce588e3ebe384dae657ba7885ef74da0bdc98d9d9594a9b979d5b50b93df000000000000000000000000000000000314f6aae1e99dbe3ea9ef85db7e1693a30869f48e05cdb073bf8e14865a671e75abb875d1b41f13d4eb74fc802299c70000000000000000000000000000000013c698b76dd68d1b9ab41672c2b07cb9a63168497d1144b51509b602c5acd71ca6cd049616d949214d95ab7a906a8f8bf685e6bb7713f8fe202c05dfd18003eff261456026a5185ee9e68aa821fe7c5b", + "Expected": "000000000000000000000000000000001747f6d3154e0717435fa023754f115ce2a2b3241b62525cb2833473d84a8ccf4c95e3ea030f2b8b0ccc61124095ac86000000000000000000000000000000001827ed7d84a61c21268857036e91c732b304f609f285cdc4736c951fd8954b10267a8505f25d8be666792358632058b400000000000000000000000000000000121ac61f59051e6e89a7c1e2fb4df4b3a5b7773f46495a99e55348454e1d9d42254e5e11b841a1654ff9c80b157389c70000000000000000000000000000000001bc60cd06879980bc6ef2ca109d31f12cac28ebe4d2a934076d720b12f430e1bc4d4260f40045cc7a862726521a69dc", + "Name": "matter_g2_multiexp_20", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000012a6984f0f8967c5ae6b13569a62095b5fe61ec607daff1845961bdd827c00fd56ef864802673dd21d90560fef6cbea00000000000000000000000000000000085ececa080d0f4c996d46c80a1fbad2ac9cff8b3e324aabb67182d79f941927050f025b633fd5119f30bb29b8e4b6f2000000000000000000000000000000000987518a5edfd5ae2616fc60000e117a4f1dd1db68195c3fb68d8cc639e4200945b2864d41ad86fb3e11c504fc1f9766000000000000000000000000000000000310939c7e11b93e5773cfd36fa70020c85396e525840742f994110e20019769abcd339db6881291639c193b987b68ae94b3c88e51af5822177b85978526036a426c9ca1077d594618ebb8fac4cdfc89000000000000000000000000000000000ec6922dfc74009c3750ce2540558c7c1e05cb45a5d651b96427c615d8fc563219215a0ee431c0a4827e40b26c4f8d3900000000000000000000000000000000040a4189d002a0e1ec600e71303575e82414e6400f06b9abf57151a28835d454f56421a6dc4049902bfb94dc0e9967ee000000000000000000000000000000000dfefc7c163c34cc004e9d97d812b2717d4736d0d1c722b6bf1a29676a32c8b46878d05a2d137cb7fff5fed8c0f02474000000000000000000000000000000000e3f0c9cbc778693c8ba88af8306d45477493ed6be1bdd9c81c65341239eb510fc948142cc30b73f570819b38f13e20f6e456b39f4efe6581657f5c701c696fde8acb59e856943f15cdd639c1fa68ed70000000000000000000000000000000013705ca4ecca16559713df65b376c7c5825b4f63d001ebbfce9cd1b592af5f2ddb38ac7c5ce3c5f7af4f39f909887e8b00000000000000000000000000000000179efff38ea1044e91ccad467cd2b49438079ccb4d0fc692e79e0bc374abe064fb9979c4a1f4b92c15cd1b042b501d5f000000000000000000000000000000000b6fda2dbf6339af225515681184843f1a9bcd72f7b1389f186f8d0e048ac16e20967c28e087cf09d7bcac597a85398d000000000000000000000000000000001946fca8c816e1e11187aabc40dd2436533d537ce4639eb2d08630ed2ce402c1806b6c2b3e04a960408fd4d2049849bae5d306f46a31c14de7b2940104d0a4424ebaff805a81f1c4a910566057c81604000000000000000000000000000000001802064095d029d3897725eeb93ed6e3b090390769026120aab6977d0de264a262aa312c5777ba322c9eac29e5396fc6000000000000000000000000000000001410f17820941e6a67b1b4993496cdcf0d4fa2d4fda3d43ee985f2606b1408aa9c9ce412c80c90a0c876cb5ecb76878c000000000000000000000000000000001514e9b2c65ca86713447f2d5bb8395fe8552e059829afc68bc43ba9267ef41ec6d69d06e7407a731bcca77ed5d9716f00000000000000000000000000000000025b5bb18cad46179fab15b2ccef17858f9259a90ea4548852b8c6fca69f0ecdf0b175669bacff1625a7143e762514194ff6d13bb0967945ff3b6fbbc104296805e4fedc3c25bb55b75cc997834de6b700000000000000000000000000000000146eaf5da57b6ac788f8caeb4b2ebf7c8999e03dd839977046ca834fffa7e57cd949e3fd44999a007b5dcf3c8621ba2f000000000000000000000000000000000d859632d3424ffe4227ae14856e05c4e750545cf276c97aa9ec03ebde334144eea670dc68e92b61fc775e477a2154040000000000000000000000000000000010b44279c0c80886e52fde5e71726422da2f9457ff86b21426d80356fad95d5ff3a7491002364d9de5ca99c2500f344d000000000000000000000000000000000851b769a691f0ebb53ee3693833881fed8dc6d9e5f1dfeaf4ab1aa7ad54e2fcac246b70d81110451ed78044a98d1547de4fb2dea292b76d8130e6aa8aff5edf0097de935b252d42a777d4d9b8615ef100000000000000000000000000000000131c9a76109929fc977a0a6eda0a7c71cfc744f5f3654e2221ce84c70787598e24c5d8049f92a7c4d78fdb869cbdd1ed00000000000000000000000000000000049872d2c7d472e090d2975daa64fd96f33e7f934e739633b1d7fcd5e771673ed8820752a0d5c8b0c6933318293a4f27000000000000000000000000000000000dd68fbb592a3957ef893180dd758f75978042add36c91b7bf87c4493b0baa875e1854fbc09e6856688cc241b76ab5a20000000000000000000000000000000006143699816cad8ab7583a72b6064fadb6caeb51c8625ddbf7b2911426cf438534da1bdd13e22cd545495c486c9733f7bac5c50a3a8a37111114c22839c88ce4072940c06f0d8b6d53fed155d0399ed70000000000000000000000000000000006c14301984607d569ad1bd774135e7c9e328be1fe54c3b543276bd06bc0bfff11f299a5eb43b5218c3605011d0ea6d80000000000000000000000000000000012f0a848022f95f4884380a5b8e3637a41e3c399a8d2765aada85dcf4b7c2b559122f792850430681a58ca153be2768a0000000000000000000000000000000016b4cb233e1bd59b7b362c64620eaaa5029c173a05e2278774ad6ed746c70a2f6e76c237182f5d9d790966ae69da5d44000000000000000000000000000000000c277d54a7a72c8528188f6cf29d934cc66471607e5e30d493cd11be6b203bdf734aaf37b686cd7101e8599b69446991c3f37387bad1af3a896a7e66a80dfce2df1709fa252b6fbe4334d02bdced432900000000000000000000000000000000169a3928266375dd5793b7504727f939ef0ed52d69e569b1b75a0e094698b37bc70472578beaeebfd0c3df4bce6177810000000000000000000000000000000008936d470dbb86db1567bb2fe7c09971c6d12b07208d9b1b403c20fbdc05ef8984dd576457fc6989470e40ebfe4ceed30000000000000000000000000000000009cdec9d80f2bf3ebfa9a3316e4250741d0d089245df2fd3c9bba4bac1c2dadfe212682166a0962f78c4bf25b618da900000000000000000000000000000000016521411286cabf3fa2c8f72ca62ca311738fbe63717fd12916a4c9e6af9b05d1f5d65cf60e84d9fc5f7b7645fe9bad570fbf5da3959a49fab7e97b3df3f2a38d16d714dd798a1f04ec2cbf84fce76910000000000000000000000000000000006a827f6149a320a74d9d8c1ae8861c1cb963b3eff899710eda642dae6ed4dbc247a22131758d9f843c62710ce083208000000000000000000000000000000000c83a9fd96bcfd4adcfc6d5a47e84108bd763366e91bf06a7431c6c3a107cbe5647da99ee6c1e57c376d366b21a923df000000000000000000000000000000001604d5c0364afb5503b0e1d52226988d7f7f043ce95e7c0a09d7f96e24a58f089156f0e6d19022138170c1b4b7dd33560000000000000000000000000000000019a11c86f78ce462f46e0462052cc3d342596b329fb62a282a59bbd64c345bd266922b1540e40aac147681754643c2e3e538bcefab5d8d0be5fc143e632e86fc065af3f2f621f293b914980abfd6a0c70000000000000000000000000000000015635de295c16841bf44c73639f047f735175e8906301746837838d124bf0d2a1ebaee142393ce9a0d58107c7cb036e90000000000000000000000000000000004fbbd4252fb901d0737d1bf4da62010c06d690a9584c7631ef5d36f1d8c37486a83f2a1e2db21f05c993fd117c662e8000000000000000000000000000000000f4cfcec1545a08e0e0298753ebcef5f61bfdb7c1b9af71cb4c2f783e4fa3948945d357e8302d99aca96df0cb0fc01a3000000000000000000000000000000000f543dad6d4b797f6fe0b00215a5f70f6340ac6bf7cb0bdfc5bc7698dbf0647e4098413dd19ca7af01685edaaa190c6e30b921d8cd2ca46aa6f3e0dc6ff08d77972fb0a248bd39e90a1e9f32be9e892a000000000000000000000000000000000ed552e94021d0912a0e7563462570cb572b189569eb847bd12ebf976d22343b9ad04d400ae98fa184b10ff36720f12700000000000000000000000000000000178727c3e6ff33be9894ef26347b104023ea0bcf79c1a33afc26ac0ee9879344964fada757118829214cfcdbbc0c5a30000000000000000000000000000000000b0a6a575afe5b0c1e287815612fdd3838ab39e8ee7795855837588614715f6687910c42217ad52c1b8721a9e1c908dd0000000000000000000000000000000018cdbf244c78cae1993400ae164b42c09dab4d8e3707a69e25ffa8d0b96b8270c022c0375f933f16f45c9274132a0a633a5ccd9436b15d4d04a8ee9894c116190062c4e7cfabb047b585f3aa1eeb460500000000000000000000000000000000070636611f903f55cc9499481bc3415a6de62d5e6bf8bfa82a8ce665f85bcf01690118441961ff46ff701e361db208500000000000000000000000000000000013d22dff8f6f86f659ad17ef91d90a70c180538f03e10de20c445d22e637015d51a311a3daaed90712d04c9a3d992d12000000000000000000000000000000000db3535057db95fc262f8adfd7f08f3237fde5f0e2aab589d4ddcd9c23aadc437e13644dd3b3534dcb17936a7c610cf200000000000000000000000000000000044c177d4484c07fb04d1dd477b188a2c157973cf26075001d14d2b07ebb9dbf8e495dc23b32a2419621e1c129b08c5ac7a5bf2cfedd7048be7ac7d2ff19d4f8bf0a94295ebdc5e792393e0e4bc27d56000000000000000000000000000000000e10fd069f2f5fddaa0112e70ae89d1ecf034defb24e2923731a7c0068780177c186fde92a3c254a1cbdd255111a4b7c0000000000000000000000000000000018363e01e86e2e922ba435651ad892bf9288be14b54dda821c397ae6167f9478c8132e92b1c2cb0c4037a4e020f08291000000000000000000000000000000000301b5ad2d5c35ebdcc7e7cd1ebf0405cf204d6f5e30ae6f46d20534eb6d7013682c5ae1bba76d2811124ebded0d2a590000000000000000000000000000000015fb3a8afad778031d04e094cbde5f02dcc89ad7b7d452c6c8f41be336a4c8b26e75cfc685b8776cbe5a487f09c304083563651d5f5729a0ffca6b383d884823aa3b0215fa057bffd8142199a16e4ffe000000000000000000000000000000000a7880b00f6a3e959ff1bd207fa503eff6e7279e701e37b40735e2bc8bf49e355e92edcaf23aa3654bb26fbfb07b5fb100000000000000000000000000000000113d9b792f4e3dcd958664a8778dc4b177c430d8db9da7805595e40293ef2c0a40f7a843bfa70ec134ed89a453f9da50000000000000000000000000000000000d7f92148dca4a9c96c47a0eb284f1834cf3d141be7c0d9a7a060af6e28e45620d8255e465e9a0d8f78b2ffe17d6b04e0000000000000000000000000000000004e7917a8f3070c656d324c9a816236842fbd6147d326652667e7bca0666d214233ed136dd9464c4ac619d46c28e2393833323c3a668541ceba18375531c3781dd98525b49dafce4c4b3188c90f3f4b500000000000000000000000000000000160cb05390b54151f6b154b396bb400a91fa83d77fabdf31fba349d1bf3b5dfb6476ad4d714af2a2963e41b077bffcb90000000000000000000000000000000012885f7ec8e780cbaa90a465b5706cf07d45bda7755ae3477c79adbd7956b926e0ef5303fc13f0b97349ff8b754dab500000000000000000000000000000000009ad7509e9e7f5018ae3d1280e881ec12129cbf825cb6606459211ed7b358a97cbe430e94dd9f5e4f6b74fb7287f862e0000000000000000000000000000000014d5d2ac2dbc3d5a061f4e52dbfa68e1eb1d3c818ba26686a3171e310c63cfeb188030b83407070019dc5c42dd079413d422e21fbffa7d55270eca9c96bbefa29dd915aca266071673e970daa0ca9c050000000000000000000000000000000008ee93fc610712411634079be0bd96c3969b48955fe5478b7a31c3ba7639c18291034167eb62e6b15c16b0dd5145edf500000000000000000000000000000000158cb1731b71905d7b958c5407f090a2c8a9319017719da143a3f4f3fb3982abb83b8dfe14facb014321b4f5edb5e41d000000000000000000000000000000000a9f98f775f06055ac1f137cbc1f95f4afa0d1c4935f536ba2e0569d874d9d76b7b86f71afcea07e2e785c7a6ee1c84400000000000000000000000000000000072f8988dd1ab0fa8037d3620068b34848c65e20dfc90612d123b6f9dbcf9d9d699d5ea73739d31ad54c22116365ab983ba7ea9ffda87131452b24a9efcdc91d1262d0d7550e5a6b787eace3577159b0", + "Expected": "00000000000000000000000000000000161203d8db1381722644f87b04f47e4be2ea2bb105ea0e67678bc8d29f8a8a3247f8c05e057af8f98032faa93d896aaa000000000000000000000000000000000d3af4842627a095a2dca99b52d802b2ef8c8f3d09873ffe39d224333fceae84bf74780956904df6c1dcf5ba31be218d0000000000000000000000000000000001c79fae014e55e5d0239645d618593bfd5aef665b3e636dac5d191a8b88949d207cf0ae9822ce8e1997de302b386b8800000000000000000000000000000000136314cc68b372b06e7771d82b7ce7bfd0e9fd306787e07629f831c7aee853bed80172121949a940bc59c4a0b76f0819", + "Name": "matter_g2_multiexp_21", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000099434adf799099f2e6e2fda4c905e1543893462133ba216aace25836db37b3dd5bd80af1a8c31c7fee56b5ecf9a0acb0000000000000000000000000000000008a6890e5bcacc13e116e3fe2d772ff49839803e4f81d6b088ecb7835b1ed44f2bfa04de1d46dd352346cdee71774e37000000000000000000000000000000000e94fe40225e863b7bdfab4cdc0c1c8d1399554ebbfa3f2c95ddeda74b3dff03d5cc78e295accdc9f02f3f89b4953de3000000000000000000000000000000000b23f2912fdc7a5fd1de69c1f479228f8ffc9f97c40845808cf17a6fd8131ea60285640d32bcd64c9be71d419aae82fb16aa2cadacb129598aa459bb2e6b7fb26d1bcb7a49617b6ef8e57018c3db1f510000000000000000000000000000000004c6f5aaac90132b2d0c6a4e70354ed2e724df7c3e6298eb9ae4ea92e3c7981944c89140c52e893ef2edb2773ab36bcc00000000000000000000000000000000021e813378be9ec30395b917ded5a0424fc7eab0abfdcd2328f725bbd6a1dace0a5aadebe40e10470df0c09b3f4b68440000000000000000000000000000000014e3fee16a833f8c543860ca438d763f764f488463601741a2331fa90efce9f6d54ee0fb7978460a1ab838039d398918000000000000000000000000000000000dec8bb882fe6028a4155e6e2bf48ffd314b5519dc4560f8f7410209214c4a8e37b2b36facc53f4db11ee63ff11f9f228c02014d5392d30863a12102d1c9315839b5611dccfdb489207f9186625138500000000000000000000000000000000002d107029bea087a2d53b6b371aae06c695fa85631450f4ad92c8948b09ed568b28948f80f1455cd22e2ad44697290b00000000000000000000000000000000002fab10cdd8bf17a633c8b3ee8ed2ce783f64bf978c384fb7dbd7e4f0da50b65eb9530365d982bcc17ab91a29eabc065000000000000000000000000000000001369237fb3241ac291a868e6f4610a5103d93aa915e954f18bcf348ece1560a12451723b96ad5fe162a6107dabe1c986000000000000000000000000000000000cb70b7064a2f94efc86060431ba4dea38bc64822efa73c76f3a4500ad23c452c8f2e72713b066a45bfa49559d14a719d960ff678e1b46ada4f866adf354ba8c1514df10ebe7d88d2c8de117ef5ea2490000000000000000000000000000000005ebb9c8202cba234851cf5e060a4114c6fee0632f37e0c52aeb852637f362ce64403347d336c32617cc59f23cc7c93e000000000000000000000000000000001126827b6a0a8adb698854c0089276861e3cccfee420512f0966df78ea0d9c55e85a0536f14ad40e649b8fe4384c836c000000000000000000000000000000000998549680649b294d506c529ade746aeb087f75d62a246b7abfb69397ed67f0f2ccb4811219b35aa894b2f87e3fcddb000000000000000000000000000000001027b604f877ade32df8de6162251acf2751a9bd770c21f22dc819a4f5515bb276a246ad667fe7881965f0b083d1f76304753af76295f72295645243ffc87ffc2110c9d8dfd20b464760ad965d7a97940000000000000000000000000000000005d1484bad44069b16d1ef4e9ca1db70ec6cd82eca645c2fbd4029ab4ca33d79780ebc144d8774d82518c1fefaab38530000000000000000000000000000000019abc7063361ed64a5750b70bd59283e6a61d55d49d8c2ea2f1be8ea425f040d3865c399a66c253bf38355360f06cdd40000000000000000000000000000000010a97b13b3b579ab5f7fd9801d9e4fc40f3b2b2acb9f21bfcdc6b6a3168720fd0abc2f77ccad01be6a6e268fddf3759c0000000000000000000000000000000004126b5454050d761047e5da23c0b2f9370996589c04f255a1ce8ef37a3a7c8078788a0125e4aa86aafce8df33f322d3d1b8760cc40d093912fb073c5012f910ae90f0a979cfe6d81c603adbb98289030000000000000000000000000000000017aa7a3f1ebbdec6abe12abea12ef50a3daabbf96a5f2ebfb517885f0b7aba1e927c682b15521529cb9e1f87c59be99e0000000000000000000000000000000016e23f7effbb9dd34ec1f6974115e7f0d23cc4553d86e6d61a0c98f47d09510e06b3f987c5bcf4bc30e20ae9684da74e000000000000000000000000000000000f3905dd4f99cfcfa6152db53106b4d1f6e24518a822da9388d8ca1dd654a4b8315697328571691f105d1abe9aad3dae0000000000000000000000000000000006bfd10d33df9326a55b35aa6d2bc3e831d4c3b5959aaa35613156e5e19343b74e34ed2670c43ba1a45cd3d91f055c9aab79d640b042664b23667d6c60ef9a5d59de72aee57a78d75752b350ce56d8da0000000000000000000000000000000016ca071d741363e7c3297355e49cfbdcf03d419813ed7b329cb2b2a26fc6a46cc52149ca3e9ca3ccd7284cfed97b985d0000000000000000000000000000000018da360fdee88e806ea1a61c01e86687f8e5359730c36c876ad2acb0297bbc1ae13d790d1edaafdaed65db9dac02a74d0000000000000000000000000000000005a46e4572f667b46aee36b8d377c249de25e797b31b822474aa647ee68cc7d40b083fd0a1d938e2b8d85508004c73f40000000000000000000000000000000011701bf88d4287c98996ea561c1ab2f29a5da9138338c7c7539a5fc8355efab6f58e240df4b0e0cb7f01df74bc8010501d1a2965e995bd4380d4ec52fe8e65e7fd99b1ca9f4f0c656adf7051c4b9a99a000000000000000000000000000000000576e79e507d250eb4040197064b8898b0142b3a2551875935f91f22705bfec6da156c7858fbf77028d4a00957553bea0000000000000000000000000000000015d39a325181d6d1a809b1236f4a1ba66a9bfa6c448470425aa5c8ef9fd00b5481c51e8752088dad62e928b3180408df000000000000000000000000000000000aafabc2f68a4933c7d734660e422ba154e37dd90114272e948f79db4ca51d5ca75d504cf74f2dd0479871d69a08386f000000000000000000000000000000000b017c731f63bbaa8fd0b0d9c17140060429f515d2e85a938d10f6529deeae4818c29b9a628802d0ffbbff720339b7bf2cfbf2abd851d2c1f55c56d4f8b11b196c020c2584cb03764580d410d66784d400000000000000000000000000000000028c4dacba5f33ba66368c19491f4baa6aea4f309afafcc8f464f2886b1d05b6397142d02f0295fd50825819621673a1000000000000000000000000000000000849e1b630e8db8ef039f280f8d401957f807ca90479745b68c3db1b5ce3a02fe2c099ddf9c387d7ed76ba75d6a9be9700000000000000000000000000000000013b43fabc3d4df82058db215a69776ed5dfd4c773d7a013dba3b4ef5cf65e25f79d7f76a06ca99132d6fd1fdadb59d400000000000000000000000000000000072cde8eb3d3e1a7f7e4a9eedb8e56f5e103db6de6ccf833f818f02a0706b2043d4ba0d5473bbb6472e8aeb28364e1d8214edaf16742762baa58a3d22d5bb2305cb03a1326adc68adcd268428f82a1e00000000000000000000000000000000007a33b95f42cb1d1ddeff3a199ccfd9a5d47c9fcb89dc09b5b3f59dde2b47d24ff29931920b76ecf6deacd70e83576970000000000000000000000000000000014c0a63e0152f06cfc32e6034b7829f9d9d09aca0a6ef821dc61ae8d99b77d76c1b2fafb2a14938a82ec72c4041ebd9f000000000000000000000000000000001433135cd913b05b3f58b2e9c1a3bbb951d2cf6c92fddb21bd5e1d9c44e464d5fe98f0791044d56e50b81a83ef6cb271000000000000000000000000000000000be12ce3bc47bf69a13762343b5e39c2a2f285896e5d1b73c55203cae2f32cccbb4f7b8230b2026a0c8b2f63db5e5bedc1f38916d6bdd5d379967dcd058ebce5887ef2bccd5fb7c2bcd758e374a195e2000000000000000000000000000000001494984d478784b2ab3ba27464109f99172033fcd5780a48fbd5a2144354157f6fca2d70b15b0081dfd306ab4239cecc00000000000000000000000000000000078aebc22025af53c6542abe56cf72ce5eb11d3f19212a0f7442d0a0df907c8aabe0ec01d1245ca237a691e685011bb8000000000000000000000000000000000415a1804a46f4595014ef29b12d99b89600aab1d98352437ab8342abf479bb2215bc687532e75f140918b3d030ad4520000000000000000000000000000000015e7b0dae7e3e80eee3c7a9ed4c739288ac2192f7d80b2c8cf9934cea5719081803b207623c771051d7694e705744dbf1cb8c8303157f23987f8a2d206f3add697b9d0a303393008429e93cd35711f74000000000000000000000000000000001470f82372e197a21aaf46cb2bd3c0b77c3428bf2ba073311e75eb65471a8164753ff1d989560f1ce477952bb6555200000000000000000000000000000000001645b5e5b4bcb5f6d34ac841e3a80f09a86a5edcb7f2a7e7bf549b022c0073e01be82e4c9e5c8e8de76ba367595639af000000000000000000000000000000000b43f6572553154e2530fb448d5bf20c3a182cc190149d3b1d75b60e45baa048f44884500fd02c434f9f7eac01dbe4170000000000000000000000000000000014adef5a52d76a267f87d9a8b5e9f570e7775ca4f6a55a5afbf80baea311b1866fa0689271799a654eddcfe36a6bb64c61ca9ab9c3df673b7ff8be098cdadd8354c17becdf82e7e99ce264174653007a000000000000000000000000000000000345a2ffa21eb06fa1d76fd81b1239147688093c6a44a40cae37f2af26add812884bed3e8b4643675b1a45320c64f7a8000000000000000000000000000000000c58eeb5ffdf886d6319ead9e6e190300ceb91d58abfb79c0a322de3987eee73ab82092eea8e1249e83ab67e33b303e1000000000000000000000000000000000763a3fba513b6731fb501aab39a4697f3e4de89125c6884f9782bfb73e6e062f17d34555a04a8e2959ee4e1a2ee284100000000000000000000000000000000024180dde2d23cd88cd29c8142d32435d0db57b8ce8e309701fdb963533c1cdc2595e3bfc01d8c0d08d594e096afb34a681a0861df30946911d789a5da1f5b89c38fa1a8c0407b608122a18be05955da00000000000000000000000000000000022d2e7502c4d9587df7ecdbafcbb813b1812d76655cb7f9f57418d5ac83d4f60b84a0ab5b53a5eee3c3954aa9fc70cb00000000000000000000000000000000083212aa1316561a079cb8d027bc8f89161fc828d050c8837a24fca6f7f94b6dbf10d6032fed895a427f07827deaf3cb00000000000000000000000000000000021552b99dc02a051ea3af1b1bbd0a7ef64088c3aef4a58b18a29ca05e1f442f8ea2c8fdb3642ee94c5df501ff6898f40000000000000000000000000000000001015a7987d329cd1eb5f991c270643a05b8e1bc35467130e9f53c5d96fc3c8336a00c060dfa2d3165358b51b6a521e56f0798b448ea0d10c84e2a8896f153b1ac3b84c5fed6a4ba6c932260bf01d34e000000000000000000000000000000000c19c3b9d7c7f520968d8531966cccbe6f0c3fa0938480ca3591b7489febdabd56a70ae55cc309e04d7acb3de6f41a3d0000000000000000000000000000000002ddc64023f0de2730d3affb695927eaba50ecb91cdf1f369a511a8cc8dae8913ada2d8f27a65e75deb9b8b648e4e2e00000000000000000000000000000000000311ef260debf2310fc31fb8ecc802200e11400909eba24b14d9500ff47c1c36ec540eb970c9262dac947b0c2053d6200000000000000000000000000000000199c19645375dea7602b74301adcfd9af259e1c7c20f377fd10d56b719f7a6e0e57d780c976124e0675c2a54aae3e0f5a8b7de8f34053facf1338b54cfbe38dad73121a0429663f484277af9a230abe600000000000000000000000000000000123fce6b793de0ce2d31f2c7c4218fb20f9db68946a7d57914174ea773d6e6fe1fbb1de141c742e0a8154fa1d81a91f70000000000000000000000000000000019f75536e004a61c6d7f466bfa06ad0c9375a1028eb7746406e7c71e551dba249b5c6284f635fe26989aeea69075b3fa0000000000000000000000000000000013088eab16ec77c7ce7e84236337e395690169a4ed7e44e23d233d36d5d25e6afde794cca2bee88fe749851a71aabe24000000000000000000000000000000000e627130da43a6ede3bd6f2fcdf008c8f5c7b7b1fa56cd3b367d3096317948bda115d732346e73b731d1921a1da6aaa18823cdb73dd076ad95679a9d7b11145c12a81b825477f799300d1fd761417c2b", + "Expected": "000000000000000000000000000000000e3b85a3d6628e097a3d962f3c9aa37e3c5be43faf2a12cd9830ab33c4a904eda23027735bba563d38ae5ae8b302864b000000000000000000000000000000000c92be62cb091056d981ab8872292017cc22ae4eeb0cee03a60cb5d57d37b264fbed2d752ae9dfd76c0bdde1f1dd10500000000000000000000000000000000019e172b23249a17924b890cda6a65287039d0c32b2c0833409816cb21ceb73ac95928234ccf566287400a2ed7d9de771000000000000000000000000000000001276e206235392fdf65e4ea6210d22eb7afd7783caa0777ff0af719cc1822579d5b82fb4c30f07dffe7d68c649b9e2fd", + "Name": "matter_g2_multiexp_22", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000a3d974770eda8c742e5d380482d36fabe18901b0217485141c3841003aeac4459ee28b280550e4643d0f50862bf2e2000000000000000000000000000000000369c2bf3beae4e8761f6c06d9bf5261bbedb177e609c81c9bd81ed0a17573b6e10e7f0512e06109cacc3d483918ed9400000000000000000000000000000000030253d0a050986f49c77ee20ea8e3e07de3ba72c39ffda877bcfe569eeb29598588f5a7cedd9e2e34491a059ac4e707000000000000000000000000000000000ce201f07353bf82ec894ec66c7012d17f3c7968b28b45e88f091510e1646380f902c1c5b036084f9497e9a91476dc2c9f2e54f21b7f2116c30d6e444ca82fe800435cbbd72a98a6d22bac92039c54070000000000000000000000000000000018f493dadbcd93df2c614af310e5aec4fac9e502843b8ca8c3de739315d9e9a380f826e2470c96bffa8789133f458d0a000000000000000000000000000000001768f8c3da107b9ac30a12b99f2f3a0f21483c0be334377733cee6024d85af91b03c7ea1c548b42e7a7869141816917a00000000000000000000000000000000076cfc99c16c270d2f6e34aff84832f9ee6493ab757b6361cc921823fe9c30f1c9b1664b650548dba767616bec0fd5d80000000000000000000000000000000006c5f580c9556ed31847b1a3527ac0b5b5f15b9c9197d3cff061c1cf72dc5c96cb5fe98535a4dca8c4e20c8c02158466c8cecea241dd6a924c9b9cc3d390fbf40ab897208ce9d3e4a148b2c30c25e7eb0000000000000000000000000000000010e2d7eb4e874a9c72a98e4c36701a9fa11051b683ac8ab9ac20d14929d72ff7b92a9048a11bde92dc2696467fcb48e6000000000000000000000000000000000eb29e621e9d0af8f661eb1ba90b307eb542dd84a486568f85e19055bf7b8f0a76d34acf276897a01349eff2c36e4b43000000000000000000000000000000000b5f890f22658b207dea2d721d90a8f5991ea2c5ca06b8d1b293f60959ed424dbd7052e010e594a5ee0feda1e93bcef4000000000000000000000000000000000082cdd4d8452078e8b853f196dd76505ece5e98df3e6a8bbb21f422755af23c5ab261accea48d8e4193d6c884773cf6e428fab2c596f23bc3c9e9855b74295f52caf73cb7371c93c65370583f7fef4c00000000000000000000000000000000077501a457d5f0946d25a4c5eede1b7fd80d90d502bca47d8cc40ab2f9a6d827d7323e7d4035f3d32b02401141f0a89d000000000000000000000000000000000985410246c1db01b42728ea46758906883586cba5618b66c21a3cf58cb98e7c6e0dfbabc5505d1d11ca9d047fb6d25f000000000000000000000000000000001775f4008f688882d02355b6eaa1ab108f239890f71238b36c76228cf2f575cd15f15293a62a72f6ad0ff17d7e8ae79f0000000000000000000000000000000004b6967a5ee180d8b92e95c5ef26baa56d8509e1acc710237083d19269c1c5a1f2d1680e85f0bf040747be1d301300b0f7d3d755410f77a0e4b2fad0f184fa9312b559785fb04c6020432465799ebe22000000000000000000000000000000000fee170589e8a3d3fdd93b536347af5002e59e8ef2ac8327a7e9f382560ee9bc36b3f636a3f99fba8be7b5ea3dfbcfc600000000000000000000000000000000032380cb6c043e3f9ef7169da12df1c6529d776b049c7061df660df841840933e514eb7ea3152ddac38daa2c52d66191000000000000000000000000000000000620ebccfd931eb70ec688110975ea24b7ee0f9937841aa1b7bf4f45af88b732b76a26299f0fe48259fdf08abefb4314000000000000000000000000000000000dee6bb8c198363fa4107996331aac07216b82208242c73736be31e14e4e04d97a56a1c22479dd94997acb0d32abd3b0557b05efdd02ac9d8e1453c82a321d798f3106bd18764140faede610ae01fa80000000000000000000000000000000000eb60e98d6cb4e4b3e58271d47261d05be892eebb9a37f6831ff19d0bf2fc235e655f0eb9b01494868bc082c58ed82d40000000000000000000000000000000007254a64a0d94340bcc2b0142faab2d73e8189dbaf52ad0c3a9206e802193168b8eb03cb18b0e4f1cc95b98b943910db0000000000000000000000000000000001e0051fafaf454072051d2aa9512ba2367778aa1617cecf6a7f989d69c7627c9070c349d363f56711f172d43f5730cf000000000000000000000000000000000f4141c8a45448fecce09908ddb42f7b5f6b5bb53b9e1ede0417bee327644af5c98470e8b5364642fc7435f84be1ab443313884abc4d430c06ae843d263f2efc1bba35f6cc270de05551e1f86096bb7500000000000000000000000000000000049c28e0bc677ccf54f4cb46e953a057ffad624752332fb9ee5295438fd5bd61abd2199a0bb729bb7678cf3077e32ec10000000000000000000000000000000007138a996356ca3f5d63bb5a36dfe901254459ed515e18ec8d91fa747a691b40a19878d9a6f1dc74e4f18374a399d38f000000000000000000000000000000000a621b36a3cf04e6a5cb699fe4ff7fb8b3361207186848e81972fdaecf667ceb35f413bd68772f7c1f77c1d3f43a3d610000000000000000000000000000000010becda5a06f3f077218d4387158e4a1ca5e0ef24d4ed304723ed5dd96da7cc9325f7e4ae16d9d6c348577697aa6017b8faea236e782a8fbe27ab15f051ed007a61e25247f1f259b9300974f521f30c800000000000000000000000000000000163ee307e0d0c3b61ade05a022ce2bf315d820ee8ece60f93d63a150e02be843a2eb2240a4882c29be2c7403932c348e0000000000000000000000000000000001fc8e9ca23e8dc8457df8f255db3b434f52cddaf05819dba7df1c5bfed438f756c8b57442197af18bf83fe9ee2b765200000000000000000000000000000000109cbe5279ccb592bd0b33b1a482df53459c48cd0913549739b784ba7ad32872377c2e3924c4d45064b0cc4764220513000000000000000000000000000000000d789795d556a37a375d83120a022f57e26da6e6f9aa3e40e1f32ed04b50fafc4d40d0b9b20a26e4d230dd789e20823013994f5645c6ce83741e48ae472674921bb2d9b8abb7d04ddbbb85a3f2f7f090000000000000000000000000000000000960654bd6e6a6b2f7d87c3c4d6e3fe6c684a50b62f7acf82a67075139a614c056a41cd49769960e229cf07468fc2dcb000000000000000000000000000000001727f2dbcc8d889127060de0079207eed1e094259b59a20fa42ab2783bfd176da00e61a65709dcd60402398fadf30710000000000000000000000000000000000c17805a01e64c320601e0ef521b6573e9c2eb354157cf0412e5c2b13f826759310907c4b77164f5899958cd30f78c030000000000000000000000000000000010fb286ce797c0429ad3385c709259b55cc962ae02c814e537e5261e897b7ee1b7c660273ec908110f997b166c14f5c181eda24db328588e8c670ab70431ddeebb0749b431bc1bfbd992c91f35d59b180000000000000000000000000000000015d96a0f988f4951206aeda63af85910db49ab817c83e218ec74cbbf5f34f81279d8a3f2fd1f3000f73b8c5550af3fd600000000000000000000000000000000186d2eca1cac226227d8981324859126864b84e8dac563b4d92357591c2416c93989cfd9e1ab6ad257dfeb168d829a09000000000000000000000000000000000a8a7247a3b09583cd2d4949721160573f1f88221e6eae833128914555a594f21a3fb2bfe3b1f01f3dee90f7772dc97d00000000000000000000000000000000132361ac1950756549c957c174cab9ef586eb2057a4eb22f49252cae032975f56eb0cb7ea70810afaf5716afde5b88015bf25b5070829e3d5a66ad24ba9930f3ad64767c51e432b51bdbe2fab470688d000000000000000000000000000000001328e22bb83331adb09dbed0a8c58040a3564fcae0ec85794f26c077de69cc0a7555f011e028879cb3aafac4dbecab33000000000000000000000000000000000a93db348adb3886802bab1e993f5d7275360a5b0466845055d5274e44716f3e1d03a6e1796ed4de4c157dc8a2d92c39000000000000000000000000000000000dc0879a8e9556b7d9b6d5dffce5e648f835f10acad3afca7a73b0fdd5d5babaa74a1ca80aa4f6880d9b015501e218a20000000000000000000000000000000003f7ae8207de4a179ae48cffc8c6e926455e46ef9e109c08be3ae7401bd36e0876642ae9ac4fd75a74c67ffb7790e265a9535c082e11b366cda0000d8ed0f92ee30fd2c4364c163a718518321c5e85d2000000000000000000000000000000001078f43093602a2dacf9b5dd7ec41d47bff02e0dd27a996b58c73febca06e3d977c2fbd73f63508243696ab5d8b97b980000000000000000000000000000000001841869086e850ad97b3122fa51c437113d2bca14deaef5715c354d3845f6829f6aebe668844352d5af3509c0d8da7800000000000000000000000000000000047c42e83194143b9e977fa1babf80d455fc86cf6cb491ef8306a1c32bbf8c868e11bb3308dd5f65fc2942b3e49ff5c50000000000000000000000000000000000872ce87ecd22b39b14c9036e971a562d51c5122bb10939cdfd1945dd1445ac9f5de06b70931aa5c86cd0fda51b89952c4cb49adce0292e259e92b229bf7965864a945de86eda3ce0bc9f1a6dc8b7b200000000000000000000000000000000157820de2a134081eb47b1800ec72630348583d77d512b4c6a8c8e581810471a2f57a8eb6b0af87a91960424009ff124000000000000000000000000000000000378cf11b0a2848b06412aa754ddbee5660730001db073724caf902d4b4894959f035a8838e28554b0efc2388f2b4f27000000000000000000000000000000001301d15f290dd11c3f8e53407195e02dbf8f13e4fe25fe38e84740753b5a0032f8dd07df3ce46ba424f6772b3aa66f4f000000000000000000000000000000000d166040d457187232f8f38f2beb1e0e0864105595764022c282867346166e46eb789786a7ec7c00b0446207e9ac1ec05e927f57aa85b2df54b4bddaa041d43766c8929c8b9146d723806ee0cf042275000000000000000000000000000000000793797c5bce4b1cc3bcd751c5ae1d293477af96a0e7c6bd392ab4410f806a53088cafeed51754ee7e60e61dc200ccb00000000000000000000000000000000019d595730af1f3039e37494b86a638a528d8bd24c429e3f8bc97076c7463e7f2618e23bd3f300bc7e7a4674f14f8295d0000000000000000000000000000000008e245c7590888fd8dd58f93332b81f48b6e3acd3cfcf5f3b28df654eae1172f52ef5a121707aa9cb111b0b402d1bfa6000000000000000000000000000000000a7c6403659e1a0c2dc7cc2e9b57a452bf553e96388676f4bf4a6e26b3ca2d3cb82006850d8340dacd65aaa0d20e6fba606ee8a5fdd9890b8017f6c432a45517d65328f13f3a2bb42d7115c02929db7a00000000000000000000000000000000054c37e8acadcec8a795619647d4cf1081a0592de02bef916f847936a1736e74cc3b7ee018717495def8b4ef1d098fc9000000000000000000000000000000000291d89d152b414fb5e7139d6d0bdc7b5b9de1fc44b49f895ae08718b631f7652bb4a895fa11149b9a9db30c344108ed00000000000000000000000000000000107b30992ced35e4ba874e436bed5d88aadf0a0c944ca3eb8319539017bdd652feb7483ab6c705aa17e845723b2cb46a000000000000000000000000000000000895dd8e04114fde4a4cf19925004a72f617f2ff146dd650a2cdbeb12977dd2b34ea7d655dee16ad9560b144b81212f5c1a77ccb4b32a762d60b37827ad6c3448c33af6af861c131adb5920ba3c2b85100000000000000000000000000000000005cea2e036a8ce057e4dbe2d9d786eb759c2a75934580480f78d2e228c3150a0a1d8c95ac5013aae3ab6e35f524d37b0000000000000000000000000000000000e18c18884209f9e4fb17431248a5f8d29c616a58af16e949f4317c2e117b80d531a39800dc70f6b161b98ba040a8af0000000000000000000000000000000007c42ce885d1bae906128589b72f2e6c18e4eeacb78c853e923e6eb785c073b6490b2f6b3dff2276916d96770ad5019800000000000000000000000000000000132d809c37c341eb0304ec933a6b11bf9ac0d2a13ead818ab6ee03ccc94160b405066381dcdb13b6ee3f5dca48ee10ef47cde609c38eabf457cdbd1e0c5366bf523dd5801d66a0282bc187d80417f455", + "Expected": "0000000000000000000000000000000009406918e2dd6f06f4782ed110e29516a911f47133ad8adc58f5780de916a8973ad60e05ba931d66de7545a92f388c20000000000000000000000000000000000041cbd52cad2a5f4c8353c7153b5711ec23fa8bfa2f34f5e1a16d8a14cfd47c237766880debb992a05ba9ed0353beea0000000000000000000000000000000017d4211c827379b310956371129011a92d62d11f0ee5b0cbad9eea2d3f2a95d364717713fd0c544747338725adf27248000000000000000000000000000000000a61903fb81064614c9c6894c7f3954aace7611cedf6bab8e751f0c203bcab827d296016947c071d7b6ccc742e28ee9f", + "Name": "matter_g2_multiexp_23", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007f90813f8c3eabcef04dc1bc9bbafe1dafe220e2db24e4b714aab2b164d7ec9df3e6a3f903e8b7b96df2ad8297381d2000000000000000000000000000000000e34371e51c4c952a0f38c4aaa5fc2324971ade310af2f36ed511fc5fd7a602a551ef77775fcd0f1fccc718710239561000000000000000000000000000000000787edf7a6ed6b50afcd7c0d3876d8919273428bc49833e3503f650e48e788b15cd82eab2672f612025d796bb62d72bb0000000000000000000000000000000006b49e631ace4f72c959919df5d64c537537ccaa3d1890ea9a1d70f9eacbaaa2ec361edf2d4880c9810976c6073028bc3c79fe6374bf8f91bf7851ff935a124b54fdb5db498d2d37939fcd43bb93d29a000000000000000000000000000000000cb63d7eef2d6614d1f629756b3a619a221033207d1621e4ce4791db4248500649b91ff07cd2f1f06eae3a9be5b6af080000000000000000000000000000000019aafbe56da1569959019033e8cc785c9b98bba6b069603969e7ff1150f023706b461913ea7949306a44c3b7d199e86e0000000000000000000000000000000005cdc3a7004f7a7f79ffbf4c4ba7c5dc30ecc62f270a5c231406fa63d82fc64f45e94779cac851ff8443040fd3b2ea6200000000000000000000000000000000040f30dc98e8668194c9278b189e0c0f7b76a4c686ce26a4a96b93190938f07c5b813670e206eb6b5da29624a1b6314ba59fcd2baa47621ebd90c5cd12b89f2a533ae86d537fbb61a14b1a80982c9257000000000000000000000000000000000a5a1bc231f803ae272e497f812ebb663c2ce8b43a366717fc6349264823ca93e29e30762c1a366d8680f81838907f59000000000000000000000000000000000a88fd59ee380449d632d7e1b926210d984d5298fa807570a63a63828cfa55c6e2f01b7745848281795dae36e562181b00000000000000000000000000000000025ad34537909e07beaaff09f22e91e76d93c668d1b45cf6845ab8ba0129e417b758e85a7100a31a9037e307f454bd370000000000000000000000000000000013590106126231b1c616a5dd7aa7ed6946aacdacec963b507907950d6ea11cf1f5b59f819a43eeebaf51a1faa7daa8e719ef9fdfc5f0c4ac41255eb172d485317c124211498a8b9a74c0bfda15b986c5000000000000000000000000000000000938d43b9747c926c3e2dfaca2d6f1e6d61d5a621ae08c66a5baf33d9241771509689f9ea7d75af607d76b66faa8fbc2000000000000000000000000000000001889a48a74966b9748f4a6128dc3d75a69499db1ba1bc9aa3a9428f0efa898b5f78a9e2dae942d3794ab3d1157a1d305000000000000000000000000000000001129c9bf343f476541980b85229c5c25289ca62173e29b75de431b572c8f01f64ec1aa4625dff9e7df535194c7f4e6e7000000000000000000000000000000000fe95c71f703dcc71cf409b332f66fd69c330758d41832236a510ec4bd9a28c4732434d4c3f97445e6301e3070153dbbb8ba028831f429d027319a92fc0f30def8b97a43da456ddc79443d9f8df72cc10000000000000000000000000000000007649efeb3e0bee49b9adb13f8e5d7db1c06d7fde08a3f3082194153bf4b3615aff1450e47fae88ac93f55a389a319da0000000000000000000000000000000008334731582fb1b6125d7ee1da0124fe88f0c70a0a3f6188636976c31ba6a72beed927fe598386f328e4ae534729a57c0000000000000000000000000000000010b57d80fce5cdc90bc93b3bc7a1affadd19fb00aeec2ca9a6287bf4e40fb74616986a44f2f7d945f58501a965f37f3000000000000000000000000000000000180dcae46ee41bccd422b3cc2b34cad26f6816dd08ba51b2f12835e7439ae2d46933de28ac04bbcad68a188e7e90ee8dedf8a6d86471f58c69c1a5e7518c69c34165e72ce84fbe0b7f69d9c2717e5d4d000000000000000000000000000000000b419b675ccee2509daf66e5da4031b08792e1181140b30489ae21f7925305d8cdd8a104580ae5938586d6b8e74f750f0000000000000000000000000000000012e070ab7118991a20b27f1a87fba1f5815665d76269f0d3d460a6b701e57ffdb4fed2c53fa63a3121c74f67e770f31100000000000000000000000000000000124218ca85f235eac3471e0acdabf73f79afdd4bbc159c1e34c641b97f03735e4c3430264f2d94f640486488dd1067380000000000000000000000000000000011c24f4fa1862779f22a628edf9d3cebe0f7593964b642f889201ae85e8fa01e00e48355053f5a7c6d920dcf6a7ee1d60dbaac3f5e25ca3d1d50ebb31258ec4450feca1e02c84672ef15c49b4de2cebd000000000000000000000000000000000266bf0d9d5a4fc713dc0fcc6ea6edae0b326e22cd97bc49c48a7ba398fc87d7a0c7141ba24d80df454de66c2b5a55fb000000000000000000000000000000000aa8f95c7cd61733b0a260149d6608a73d6c1f989afa8cb2aa4098e1fb5a66b4ad5a5c1c4d901aa79812385fd507f02e000000000000000000000000000000000a6b4929df13e1fe7f0a0cf699a7fbfaa97d7527cc3ea1f728ba59def2e75fcf3490199bd42e93b7d47985a307add07c000000000000000000000000000000001719321981d2085ba31c9fb131d6b79c7df5d10d6ad0b5015454329697860121e781093fdde1f19e897dd6f2c272f87a109ccbb8fcd4d4651b84f4708799d84ad0a717aedaf5a76d2970a7b93bd23d37000000000000000000000000000000000431002c9926aa7d2b06412f544a868a7d48fb5f077dfd098febeeafc28b876c434daec809e5cbf50ff2395ae7e456560000000000000000000000000000000005a15f713b6eafb09495cfb1c89e9421515a07a99ca0f208883f11c430ffe6f2592dbc41bcee5db36385a26f67cd26bb0000000000000000000000000000000008dd30fdd7767486844967c5da0803b52282178287b8ef28e14f07b487132fea3a82d86d414b4d0a25b3dc538be11b500000000000000000000000000000000002dcee67e2d17b3106dcb9f4117456a037ae1996e8f7a09b179baab1ee8345c6d01eae554d3f40da86bd79a04702fbf76326fded2b8a3fbf7637bc25bd201d20e3d4d724806cfa678ee039a39c24e86a000000000000000000000000000000001629fcc374e99fa8303a715fb5077f266b13367bbc0098b5463d3298c0892f83127d6b7f751446575b88858bc742586c000000000000000000000000000000001100783c10618752d25c235e1e76dc64db94adce05651fb8df0a5ee7c299d35b1319f7009b857892ddf9e90c91f7d23b0000000000000000000000000000000000ab6996e4935131becd5df288dacfad1e69b41e200ca7dc841ecc180a81b9d2ca14fc8a76a4e7bd6f924bb9f473de62000000000000000000000000000000000ae9b22f8dff29e5e0a2ec5b5641f53fb5e1ca03130b49d0c26696ca4b439a9d998d9a364ac9cc5ec52df699318cffeae005efa8ee75dec8a013029292976e107a507ec09e3c34fb4baf2979fb759f1d0000000000000000000000000000000019c557ae1c12ff8a7c00b7c9e4bc3d65c92753549c193311a38a84bccfc090052a2219461a9691affe2d67ea4357cdeb000000000000000000000000000000000cd35c5dd126bd4b90dd671f29953c5a49a14b6b3fe946991416edf235c3eb3d574613d27b05cd879518fa7dda3ed39a000000000000000000000000000000000224392063b0825fd332bbede23588c1912e7670a013a99da5507f650dc4284431698a5b4e8c180269af8bb30e4fc8450000000000000000000000000000000002ab8d3250d4bb8ceecc8ca2003f91420d0ef8a7dbc2361e5e7fbfcb59471a4c525856bf796a2c2608d219d215cf83fe3917f8baf17f71222166cb9b6c4beb2e57d0d054cba3f7fd3a28cd3dc4b409490000000000000000000000000000000000911417908c2bfe4f63a388f699b31b47df1ea0ec289ee3f96ffd0c71f3deade00d1841aa56b4bebc2adcd3068adf920000000000000000000000000000000005467c7e58e82089fa285c28ea22c759c7806d86fbdcdcc8e09e847d6330922a61bc331ae3b5acce777b7809ca98213f0000000000000000000000000000000010f376fb47933b1f701dd81cebaebb2d8d8f5510a26fb3e9e156ac5ecf2b943c5fa2812d52da542e6c335abad8ecce3c000000000000000000000000000000000dcbf467432acfa4eb9ba11a7cdf02f9110f44ac371128ff8f1f98fc70e4554f057a4608180bfa54d99fd2da010594f6f0f73e1b62561f5b0fbc409e6534ad9e37d1c0724b35cdd3f94bf6489e500fbf00000000000000000000000000000000179aaa7119f6fb986714c03b6db16f25eca7172d24cbdd318bebb633bf08920f9e2a8136c94e3ec7c19e57ab51531b3f0000000000000000000000000000000005937c484213ab5b2ca8ed1c5c90e8d2a2f1bac044b88c04b301ff2fdbe67dc4ea42779d919ad510cabfa2ccd178cd9f00000000000000000000000000000000183cc23fd64514ead63f55d375a07af7cf2a56aca64a887dcc542f8a396468a6abc776170a5d4b4bbcd4dbac285e7ffe000000000000000000000000000000000ce12228dec2f84219904d9ac7923f122a99803a9b34749ca68ba385c178811685c19a492aca2e1123ee82a8a9cb90fc3ea24fb6447f2493c78a267daa158eabb70c1b60af8175d0d4594c99122cb4420000000000000000000000000000000009612bf9130e17110f8b15aa6f3317071daf3433bf6d008c383bd5c2fdc7ca03f25ff4cdb483de3c84c0ef9e579f38c6000000000000000000000000000000000c40172540a7e20eeedfe02c37aabac07165cbf04830f20fa76fe8b05c826e7762c9f7567a0fb972212bf736e627948a000000000000000000000000000000000f49e5b1929ad3ed5c07670c471710baa24e8478a50f72a5b7bbc23a66cff91d30a3d68961fbc2e6e8003d08196f325c0000000000000000000000000000000004ba098f915ba9e934384682648ed8d4e1cbaae60d596655fcd9c05f4b049ba0d278730dba5ce3fd4892531a3153bb955ed307c01d9e29a0571de07c62d5fcfc80749f02b8dbaaee9f69dc9263e99188000000000000000000000000000000000449b15ecec6d6fe5cd32437b54218f62527157aa6344c635fcec8f8305c8b6e44c93105984e0832536237606f07792e0000000000000000000000000000000011e40e8aaf75f5ff8e4040f725ac27693d7b24805a2539ff54b3a6e90c048875ea9609fb8fb3d8de63ca1118876c172400000000000000000000000000000000006ef2a24445f728b53cbf01e5b076acfa7761a84d8261cf1a1b99cc32f330f32fa5ded83d5cd51cc284207adb2451ee000000000000000000000000000000000977966380e772670447b15ad9917035273eb71a21c37607a761aaec808909fcfed50679769aee1573d73cd241de6624877f31ddcb55d961bf9bc09903bd927451390922d647d589302855141cf5cef500000000000000000000000000000000074e475c0ff1a51a24be3c964c45c41f767f890dec82712d92a965be504fee43fcc6c0684b2b17c5b294a3eb7ceff1cb000000000000000000000000000000000597b7dd287f3fb27e35a9e4e1718b6b1a4addf9e95e93aeaa25aa34023669368b794a08fdb178d9bcda2738534d1962000000000000000000000000000000000a492d648393bfa317165ccb552e045fefce5b3444d5ff770f43a08a68efefe7fce1216114ed1495cd00f832538198180000000000000000000000000000000003d85cea8063828ff025ba599bdf1efe0412ed5ce06ad5faa841c6400e4eeb6aea1470d48f4e66fc768d7e7bfebedb37145c1442ab82241f56c27dec2cd4dbfa9fc3cf1ab72bc521ab32a82346f8f6070000000000000000000000000000000008ecc3dd40da2a7a348b4817d9c84242f2f07c5d0ef810dc08311e9d4090d6d96d68b6c725ee6c24de076c71754bc4b50000000000000000000000000000000018fb3a1dc4e0dd9227fba310236a6db7953f0b716fa995b928a2a8de38edb97eca09fe2ab385037dfdcda2ee577e677900000000000000000000000000000000062fce7fe7810273a80760d9f4b3be9e7c821f38ed3e075210d3aac6aa7a763e3cda56465f88b34540b408ac850742080000000000000000000000000000000006fa94466cc47990a80ae6a310ea765590a0e646b5988925f03cc7e30f04fc0a8044b403212290b2fc46c77e84a9028dde4d1470f6cbce027465b4dc2a3deaca14e34218910aa76cb45d47139b31df88", + "Expected": "000000000000000000000000000000000f41bad0a932e28096e51482c646dbdf294aa7b91e0ec258670e7674864765c76989a936fb440bfbf4268a49f450d3230000000000000000000000000000000018282b76521db98f589b1c14e603b6f5d27af357553bca761189a38a944a11c66480f7ddd89d17e4aeddc8d78a2b3a0d00000000000000000000000000000000007efc4a90dd97f1312047ac78a3163dc014c42a44c7054daeefd5b72cd0488832cb6396e02ccff09e4171d790954fcd000000000000000000000000000000000e790fe8323fffc96705a42ca071532d5359641ff7cf8714789c9c578717a054c811cdb581df8b6a43729c6c3e3255ab", + "Name": "matter_g2_multiexp_24", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001304e0ce6a4baa6e0545fdb314523fc91f73eee157249b94f284ba7390b12b23b1c849c45a563ac82b62a2c48aec24e1000000000000000000000000000000000a2d0e9e222db70d49d1e85f587d35bdf5e8328aad14343d296f95b152a79c83a4858cafc350a5df1ad0194c49bb929400000000000000000000000000000000199efb09b34d0699eb4bc1c57fef9cc5d98453bf522c504fe7897e22bd0596a3a6c310eb351e15e3f6609b074b240f7d0000000000000000000000000000000016b69f12ce30ad1a65150094e29d4cd82fbce5dc343517ba9e5d89245ec083c44af9a3dad2169f713d3b01fdf70d20642576b42e0728db912a78eec2b7b4c96575e341e86a7592a07a660c11e0044839000000000000000000000000000000000b3ce4ac12861052c602e71906a7c9f3e2186bd2b6eaaf222d8e80b48baee537065ce78372ed936e6728b9642ba1fdb9000000000000000000000000000000000e8186561d23515bc58c77769c93db76dc9c62bb715b283cbfb71462451120a6ded736cd8a292a6799fbad7617d9aa84000000000000000000000000000000000368a6dbc7daaab0a786257c813b1a25c97468732c27cc759fb921cbc3c9a37a46d7dd0298771c447d36ef0a10579ff5000000000000000000000000000000001348d5e34cbe54e3a6b357c4e651acb82d2dc40ef9ed8bb89f0cdf0882ec6a737998f4e4dd61e296d101cbaabccdc3e779f9205ef0e3a85199c60ad9267349fdc7b6fba4cb765ab21750eb3dcfc48d8b0000000000000000000000000000000004ebb53c462239a78bf13f29856ddc4d78645c457a656f3cccec9d3c032ec19c26488f39e0f5bf0d38424f9e3a9bcc870000000000000000000000000000000002fe1949365831f7c38b1cd6cf2e22345c4ce40cd73def77889c214d1077d70e39578e8be4fe5998f59d47cca7917280000000000000000000000000000000001152f2df1512013a42ac056b75802bc35c1883efb345cefda8276c594b061a0b0f4a49d8bafa6fe251658ee76b2493cc00000000000000000000000000000000094f90cb386f7933b2ffcdba5e46e09cbd7d537c12bc223e76d3a88ce9063a7b3574d3306365d65dd4c6505f1dceea53300679b7be7c71224247e8034f5d30a63f8707d92d843a703f0fa93160f6571500000000000000000000000000000000169d9469c53e55768c9312680ee82ee581727e28cdb1d6fcdca25d0c03f3da2ad6572039f12c90b09cdb843bc506e07200000000000000000000000000000000174528257f6d3542f754ecbe97eeeea7d196ee4dd01852f6cbad87fbeb4dd7d3799588f17aad129a15549bb787468772000000000000000000000000000000000c9ab635bdaca1c488538c0830453ec6ab3b2b62447c03ff6ffd2712bf62e02a63c76c79d41644ea412e733128685c45000000000000000000000000000000000172ef0fda359bab149c8c04f583f4ace4d1b148426e993996d278f79ed2c6d3933d6cc5fb62ec4869aadc773d3084ca0454b01910548432a0f706818a98151e38ff9e854f1faa95ad41a7239b5cc4910000000000000000000000000000000017060fa73b58957d12b3996d67b7baa8b7f0943ad52e80e5c4f8830d33dc74c0a39e08594b647945b402299ca861f7b10000000000000000000000000000000001efdc7f783f9977392e2797a3e0bed222d5b661d056aa0c7e04a493bb9b18048bf72aded134941ece78d63df0a0868d0000000000000000000000000000000011355198320af05f2121939e6489f31e9e13b3cbb2cb30c9e675854cb8ec038f80aa2f4b6f995774b36f5f1b6a84298f00000000000000000000000000000000172e18c490d0cd5ba2449362c0ab296212dbe69ac25515d0f91941d300051320f067f946dcaf999554f55f1f616adc0f3685617371b27ba8898ce7f30776d817ff09ef68a9d6721d4a923ed244ae82060000000000000000000000000000000005854f4dba62d1dbbf3ae16f70792f1bb39f111309b454a6400d2916e619d4f70764ecfda7eae5c28cf1d178ad53fe6d000000000000000000000000000000000ed0bad1f5d69a0e621d137746a9ecc764931ab89f24ca827e0340ddc03571ed697f63e79cc58b946e8462099ce4b1d70000000000000000000000000000000011de76edd1cc2f9ba06b98593a24a7a011f2701b451ea3ccd04361ddb678e06d91a676e3f11b62c68cfc05242cb8a859000000000000000000000000000000000599726b5f5b93d414f9310383ed9414e4675d644f83ebaa63dceb2bddc7dcfcbc17c7aaaccd0ee32b0875952554b4e660cb5aa2a0cd1e8c3fdc06a3a1f6f9b6d52a8cc2e98c85b8e258f72d03efc25400000000000000000000000000000000031110347cbea2756b5fdd549d6c0b8f4036f5718d41dcd6c854a91c9df29bd464774be479d0efcb8a3f82cc7441a6c8000000000000000000000000000000000e24a52dccfdda3689c87395e45dbd46156676d9eb2cc09dab22ef7ff0acf5ea243ff117c82b147994d65aee8605b2fb000000000000000000000000000000000e0cd6ea0bffc591c13c48bca0782fecf8e128b0b842aecb06f803a223d32cc350db869b7a77f8e31b05f36bddd587ea00000000000000000000000000000000042ff4ab4596d610638ad23eea904a82701cdf61f9e2dc5832a70e11e717711a2d0e72f32f74706d385a9567426b4713addb1fe778c84242953db87d2307b40eeb776f17767c3a4311b5d2ffd738f151000000000000000000000000000000001517efd853800946aa37868b525e58fb488bb69755ccec806afca2d21bd3a30ba46c39cdf694ad0ca92841760437c3c1000000000000000000000000000000000e5591c339e88544660380d6362f4119c5596f910d4ceb96ccd4c4d9672efc50805b6fedffa0a48d126aae69b241d3640000000000000000000000000000000010ea5babb0de734641f63eed2eba6124377b5c55e429987917c0bd109d7904766a10b0d2dd123413816d0fbabe25050b0000000000000000000000000000000000efc89ee2ffa56193129062ca55a3350bf50e8fc7d586fae3636a70e3577987fb0f8674d383def4b41225e490d3d81528416b4b4e965a5f024723fbad6ef2f65a1381e70201e26ccb40188dc3d0fae8000000000000000000000000000000000dae4277d62e3f3dfffb80818a5ba5c371a48d73b92d69a168ebab897ae8be206fdf776e9f955136d7f7f7b2903040270000000000000000000000000000000010ca635ee2e49cd6c951d75ffddd11557432726d26564239c611b139329a28812afe21f094c0585675f4f233233743050000000000000000000000000000000012378b2ec31119e508fd9ae0ccc4c2603b6820283284a278fe16864e5a18cf7992d850c1d6ebd1253103c219bd95ca4c0000000000000000000000000000000018cac4f0660240045214034cfd8a7e40bf0aa12f97a23c4e27db0e05bb25f4d755276a91a4e882a0be63437a522943ab78077a51f88236dba6d16d7fd681c631510106b0eb7448df456eb9ce758e74cb0000000000000000000000000000000002fd5571c818322d207d58fe0a898a045a26c95c2490765dc9ac663a0de78ef5fbd05b20ea96dc5388d5b2ccf13a5e320000000000000000000000000000000006ff29ccb768da45061ba4e01c90459ededa5e79513917401e7e37151095ccd4656aeb9cb7c083cf27b69377295934cc000000000000000000000000000000000414d34eac47430495be735eb5c4b1a68372abeb43658f27613a9c8b78f17d9074174a8deeeebb1f9cda5d6198bdf89d0000000000000000000000000000000010b11bf63b8c39c1370e8fdbfdcd149fea88eaf1c0a94a51bdd061e4c41abc626a448030bf9ba880032e9f1642caabae871716e790e1a0120fd26d169b8ffe3fcc0d03683dcdba7d2f953f05444076ce00000000000000000000000000000000023eaa08a44eebae674434b013ae9992c75690a3d0de53e4b05d1c0dff249feb24a12432bcb5defe25ee4e44a56b27eb000000000000000000000000000000000f146ac27e685cca04afe8fc58fe853825f5b0009e8831eb0d0121decec23b25bf8521da2fab1508a3ad8254865fbee70000000000000000000000000000000004af1a525d3c33e0b1629cbdb90c56a88d70a28037c87db81c59bcbc811c8f0b98aa9dd574436c9f600c0e8e2d194c0400000000000000000000000000000000170efb5e0e69e46a21ec3b972265bc04b9d5ee926254f61c0e18fed013922e00f1897cf69889576bb5d54810486e7f2776ed0a27553db6ac6d3959ff4c9bc5807fb7d4f0a56095ed2bbe31dbfa41827700000000000000000000000000000000111c832a96329d6db203fc8b6bb5b7db01521529c91c74d9cd71dc78d067b36cb7eabf1af80129a7a3f44b719235927400000000000000000000000000000000097339c17816795238629d4ca6c243a14e9e227e9bfc30370dbb9e1475f6d03020dc35559675121792436bacdf9eac4a000000000000000000000000000000000805870a1efd1fc34c9b576b77418ee8c0d36aa9caf9994a051e1d55b49275f34cdb55edc74ffc267c5776c8d0e113ed0000000000000000000000000000000001513afdfc2f000e3b725fcd0428fe72ab2413ff2aa91b44458a5249c9a160ee27bca01d2fc2e230f4a80454769961af95ce72b30d989889c8779c4056e441bbcd93629efc2877d36d27f670711e21c4000000000000000000000000000000000485b3b1f812b4a28ac87d16f86d8d634e85d49d6dc460646e1224de662e906002c44a1a269c3bc011fd22afeb2d58df0000000000000000000000000000000013ba0752444a794cd00c99eceae51e61c382d0abb26e5e0e595d59321447400e8a8f7d97390bd217fb50bc22cef34b2300000000000000000000000000000000184515a36024d0bf71d9fa4cc5165363ff94ee9f8579bca653ebc0620a9d3146fba70a2f4a9f6bd3777101de0d32e327000000000000000000000000000000000e041422088c0343f7704e726d65ccc4216c4a1bde3668108983643663cf0249e992f9acde2dd8ff478dd26cd8d9434d06d220f64de05bdd6e1140c1e409fdc13f43bd31cd94e633be38ecf22ebd77db0000000000000000000000000000000005bbb0c55fdbc59992c83fc0ff03f677e58b6de6f8649141d88963ebfead9383d692015a7b765b727eacb6de250351ad00000000000000000000000000000000183057eca610b8e07fffb60d21bf2eb87981e6e881bba04ceff420ca38228fce2f94d40a993e2aef09e209f3990dd14a000000000000000000000000000000001231bc55242bea6b589cedd1d82621fb71c606ca9306b268379dbf83ddb1420dea228ffc05cd8b67c38206f3f006ef18000000000000000000000000000000000f2c943e7a8b0ee00fc4e4ba912b94f68f504d2783babb90a3781b666b31bd161af2f97a77813eab9ebba76040b04155257da8ac7d23c5ed965d8bfc76a642a36ea6ec4c45baf6882021372e8643f09800000000000000000000000000000000054bd97b9cc979006f734ec433e215a4e8afe468e69173384bc895e10ead3749d991ff8ff203abff30bf5cc0d2fc8c6c00000000000000000000000000000000066b73a98d5f5ae140a5784c5594892c849aa7f2db3b5798643f755743d401ca745d810fad5f4a33e5b3cf0fd7d96f7b00000000000000000000000000000000007caea93ff5cc6ffc033717220a215ac4ed7283945ae77e62320a0bde13f2153dc8dd401297cd124b4c67a4f3839dfc00000000000000000000000000000000094568035ffff439e3d3201466f3a1d43414e3f6455627c5479c8b7c55130ccaa5007ace7ef6a2b3e2e5a4c9543dad9163d017ba8c7ed138b1bc70141abc5cdc3afbccd8b1db5a6b5f775efa62b8dbc30000000000000000000000000000000015eeef8bcbfac04112931e186f6fd48b7a8ea891ab364ce8266c5fd15f072f08fb3655e324795df182a5ed1c917a5db000000000000000000000000000000000028916fcb3b30a7f95321a0998e544f9f4f578be7a9f866cf72d6b8baccd93f8935f105ed26aceebb3f9c96073a8be180000000000000000000000000000000012b11f356a7e32f3d9281a8999363aca0ae5c1a058724cefb51583e5f217257d47ca76d21e54ab62260796b95f9d3ad0000000000000000000000000000000000d83c75c36cc8dea4aab47823edd26b4492da39b93a15fa454aed4175f28a025ad2c576ef2d76a66e666bedae95cef1a7a16e23e37ecffd514d47199cff249415a6d366fdfaa82450f0744520258955c", + "Expected": "00000000000000000000000000000000059443f363ef0c65973d36469ac651eec6e52485a07a6d28112f4d0711802d182b7e6fc56d4f1aae51fe1c549247d885000000000000000000000000000000000d22118a6f1cd06ee14c63f0e005076bfb061bb85ed184b5444c08ed9dc35f77217b6daafeac89a973f2c73f00e0d3c800000000000000000000000000000000180430caa9917cbb40e3ada2de8d685b4daa99639669a643b8f5cf9a4a55d6162e9fd7f5d4989a1a6588feb0273669b90000000000000000000000000000000015d01fba1192f0f1acf8fb32fe790f0448c6563cf8ef5505d9378fa2fdd38bd99ba938077f71bb8eaa91a99e787e840b", + "Name": "matter_g2_multiexp_25", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012d948b5268524659e29cd407dbbe8f529e608193ab9452f936b2f6fc0b81d3a63a0e929329e2d89b5475dc2d73ebd8a000000000000000000000000000000001219e20a081837f4d4e33bdffda08a946bb9cd876e42e2f561ebfd18ec439e0104b43de61f47b8b7a0c346c33e632be60000000000000000000000000000000000a135c72c45f254cc1c260af803e14cd0f89c2ac3029629a86b05acd3440465aafa4cf84e69551ae772bb55802a90ef00000000000000000000000000000000052750c3a99974f9044531dee9129110b99572cf283b61e6606f1137a87de7344bf01d2ac2f8a1db8d815b6d9e7511fa26a9bd0a71fd58edf81459152782733536e960d27e35f9f84d00da256bdc118c00000000000000000000000000000000136b2f21aba94bbc8e5235951b1b186fd4ad221e6ecbea5c7279cc8ee8b01edecedddf48cca47624ee9b155a4c167f140000000000000000000000000000000019852d2bc9c8abc92503f3e7eec9fb20df108c23643ba8a2fe16c2cf085bb4ac079d3f065a1241067daaf401b662288b00000000000000000000000000000000018bf1a4e74ac9507b97a990f3a41cbae3f32e263e9937a8a62679bee93296ee5cd25110833eb5d136425bae0e9dcb8100000000000000000000000000000000096ae4bfaaf4f18d3e987d9f287fdd3dc9b497cc84867e757da52bd5f58688403e1c9cb432a2eb87e239879d52990ab5f1e168ab93674bd7f2bf73318a48ef17ef4464fbefd39f77c17ebfdb24d679b60000000000000000000000000000000016ebc2ee18515354b7af5d924c895ffd5556ad088560f89c59a4ceec229279d4075f732b884a6ef2bb2eddc11d27572500000000000000000000000000000000110282084ab6f3e76eeb9e5e8c56749992913c2404b003df9c2d01d72751f879538d23f612c8faabbccff45185f4c6a40000000000000000000000000000000017476677ebf052d13f60ac0ec5e572c398f1a478d60ce92a3de88a74a28688d786d30b1ea8008409e45697db0adc628c000000000000000000000000000000000a5e4239d938bfc7c05f3b3a850ebd5f7784eee7aca48c861eb4bdb1ce6321fc9c6bba997e143aba13a42f69ea14937397fb0d947d71a1b032070a12588b85065c19affd0db53e466f194f04f58dba2e000000000000000000000000000000000b6e16f2a6cb821abc43c447da207cc3013f2f750c844f42f0fdf47160a38501bf502073bbeb565122bb3de61b3a5ab800000000000000000000000000000000040f5f3aab5d416e9a084fa298814f894ba599315fe10af20f836e624680582413b4a54623cda8ae2663ee094e4db775000000000000000000000000000000000d32ac715a094813c7b46ce2e932365bfd62ec5e584e047b0c56ed6eca3c58268ae01be31b833be7ba5c2588ebb9859d000000000000000000000000000000000850b9044f129e51658a02cfa49d40a2b09239823cba4d8fe423fa1b4815750811daf745e7e02b317a7318aad0734ddc640f850bad2f22049f2f8aaf3ee57564fb38a847e428e252f003eaac465f7d670000000000000000000000000000000010c703e31f2d488812a387596c797d8d414e406bd82f238cea50a459d842502e11220ad82fce5dd36635792ff5770bc50000000000000000000000000000000010c11caa640708850e1dddd48bae22961a45029971d823b53030979b7d8ef2eaf2ed055436105697c5b0b31b1a9d0a7a0000000000000000000000000000000006b98568b2b7f0aada97310f7e14084a14bffe580ec65bc8fe5d19c6213c45dc1b8e1da5c6c1b8555729f6c781575278000000000000000000000000000000000f2c506f3e41c28a748656d1dfd87e812b3ba21815637e497a30eca4fc5de18257846f12b67919dd2d739477cf5ed0ae8bf91051da5bce0a51bcba6f4e1b3c9063743646f4e75e3e5a8cbc84e8112af400000000000000000000000000000000102b6d561172adc9316b3ec11f05e66e7affb1bdc70a364faffa57aa5938c2ac08863be8fe79ce3f627558fcb2ab1230000000000000000000000000000000000c5e72c271a1ee186d443a96d53f0ba0ce226c76aff2a7c3215c2110f96cb3301bd586f509edc45cd20e662756897b78000000000000000000000000000000000d546fbf485bb283a04fa05aa962ae8d77ec4d26f749d83b208f77247778e32a9a2f1483bd84488806e27b13eabf41d30000000000000000000000000000000005a42c6ce8d43d122bbf984e9777f5d1c15057f27e70fef44b97c2c6e7e2e303fcbad643027b7ff3167916f21a723ea98da771e0e827a52a2f7e79e0e5d93ebae04c1ed78cab87d4353f24ffc52099b3000000000000000000000000000000001788323aafb95f8761f87f771fa05a8e49be71e397849daef5877a7f486af13fa651be7a93bdd9465df7be4ff65825fd0000000000000000000000000000000014b7a56f3f7c12e39be76b3872c1ee648f62f9cb6a1842d869e00a5dc2ac8cb4ecd96ec2483d5eade5b0f9113133bb050000000000000000000000000000000009a30623632b757ae8d03ced0c1fdd1877718f8d84f34ebb42426284f73bb7e8abc31a5e5ded57a02d08adaa90abfb2600000000000000000000000000000000020b47acafefce7f617081e22b2bfc566acec6d2cad5063a79cf33e02cc8931bb698b72184a11fab73e0bb0aaec76c61d6cff707bff10fd53ffeff8e9400966d8ffba6d4ad6a8e7e456df10f8f5ebed2000000000000000000000000000000000d1190466f0e8f03d2cac4a5e63a13d7c6d0cac9f2065295e2de818773199d731f8cb7b2be5f6ef0a246401b345a2d560000000000000000000000000000000007d9c5d187494df79c25b6292527b0d6d8c50b6467bf76a1a1316556e48159a3b5dbdbd9fb0bb901d857f61f423d15db0000000000000000000000000000000013e4401fe76e3f1ef73bd244189cdc81fcc152f71449c11aab24c4fa1d123c5aa8c68a2d10fe88c1c6631778dc0bcd420000000000000000000000000000000004ccffb4296883b8690b2f3fe17e4e9ab24390084ac917ed28fa1e04b9758373abd348290d24c915dfcaf0649ddf5a87e00831cce307cb44e8dbd5edf24f1535b837277160d2cf6daa4e862e57fe73b10000000000000000000000000000000000f4baa5e531ae462b95362292d5366daa89f2fb2707c58568c094c58578e84a8d253fe1de26b917b84635c0aac3a63300000000000000000000000000000000109057e5c5451eb9f85b95aa5ed2615d2faccd0539b1e4481923e04cbdbd2ea9290969022cfa508d3fd050549c74940d0000000000000000000000000000000001c3e147ad9c31927207f2344fedd541316f4010e3de194f924c4a1450a221285b76ff1894f8b1670731007f44965100000000000000000000000000000000000909cdf5c56dc177daa1f3fd7cc31d79a4f6dfcd462c07812cdf629426b75bdaa297b9d7e67aefdbb58175a21e29edada8168d56385722f339a5b27fc25a88034d348e3d533ff4dc99d28536c1c09a770000000000000000000000000000000009b4c6bd1c460d2e93febfe523c1d54d6bf6af50838e7a10b732c1be8748a0752a517e7103d0ffa4507b086626fbfa8a0000000000000000000000000000000015bf2c13891dfa8dba35b5da1235563d4ee1dac33e89006f5c9fcf06f2fef7b31ca845bcaa8ac608046e8b01c8a61fd2000000000000000000000000000000001898dfd6a0618df821474b90542f261c1febbf2e566978b0fafca44f6dadc57202f88366b19d2c955e4291ac21beab520000000000000000000000000000000019287e1ac6b3eaf412e58511b40d87558e7cbf90dc8af2f5d33825b40fd2f2425d0be3a05d0a49076f4114350dcc601eb929ae82ded73a4876c041d2e52fa811882fb8e22690a27cb4ad3ca05169bbf0000000000000000000000000000000000c0993401c024d32cecc0d86d4cc52c200e59acb34fee2ae052837f467905e736a1118260ee12a963ca2df6e1a6c9d0a000000000000000000000000000000000103f78f0e7c9a5628a66efa91f150a87e67623ded2560aef278a8caab017fdcf181981952b450c67e3b4d3f362822a80000000000000000000000000000000000df01ff335f23652f1c34480d23c62d705572321c0e7fe92556e033dd3cf5b78a3d554585403a7f3c71744c20d17579000000000000000000000000000000000a0e2c9e2e34e5cb36e96b29231f702abb127a011c7ea3e21d59e5c55f745a02039a68d59ce8e29afac0752d1939106936999c516d4acdfbcd488d39e3073db9db6cdd0c0fd1d29d58294ace6d2d199f000000000000000000000000000000000eabff0e6ed9dc358881796441c48e722ea171f26011ab898c5a06758f61a629ae21d5a2595a22dc9855fd2e516b30fe0000000000000000000000000000000002732155a7a2791078dedfedfd3381281554c389bf9b5baa47593153a2acfd22a08557d7a1d49be298e416051b9137dd00000000000000000000000000000000116faa2e2a261e6a3e4de6ad80d75ee05aebae47872e2eed9cd91aafb94a706de673a05f1b86c0b0131cf148a90b2b7900000000000000000000000000000000009a04c09c2a4fce22d237bbe930392dfbbe5c82d480abefbb3be876015e2f5889a0922df6d00d4e94be0e9fb8d2f4a1fd0bc405e3970dc2bbd7dfe0c54b7c64543fc241000adeef4f7aa2f1dd2506770000000000000000000000000000000002a6402848507062e5c5d63b1207a1a41d3b941d21792391f2feff95035f1b4625541770fa5e0f87585cfca670976533000000000000000000000000000000000904095ce640605c957715e378ed733ddf1f94d3beb63543a50c8922ab9f8092755fcc65e2a1ed9232c8cddcb5816371000000000000000000000000000000000ec62b911b08d3e8618880c3784685b2c6cbb07a4aa4e348ab72e4f918152622ddd7748bfcd79f35675cb956d11fcd650000000000000000000000000000000013f651e9104d48a081cef2ae0648816b2b4b5f644a791514e94a8e3dd3001099c27d1f9860337ced1b177b4ad7cd5866c36afa3c8581df069292d53b8ce3e35ca136a0b3f95a894958105fde9c77e39d0000000000000000000000000000000016334abef2a21b9c1926b2086075471bc2d2d2f66b963a41623af91fd2fd50f254c008fa3bad6b53658c2486edcc94aa000000000000000000000000000000001063002a5d17aab2bbb5da49e8bde63a1f3c4dcbc8800f9487f47c6d707109c86d3cf7f9171643418b195e50d7483af4000000000000000000000000000000001213004f31fdd0b0df5d8e3677c4f48624691e2534c02881c6cc6875b9abaee56ed5739c2acd66cb1b10553ba066ef1a000000000000000000000000000000000fb7659081cfcf8beaed9c1daf9e92702977c37a54376597d897082a25f9882f1ae14e7724c0aeb9e002dee708c6b4eb0f0a2bd678c5858be2a49ca54de8716fdeec84e1935b8f44545c740417efa7e400000000000000000000000000000000078f06bdfcbc7c0cc491fdc8069314c8a395983f9a2e5c2d1bec360f36e365da377885f897d8d711e33270e3ef9dc4d80000000000000000000000000000000007d43394d5175e020b3a5d768b60ec763d60cb1bb37c0343930fa82e92fb1becde0a178c4565df320824bdadd54ecabb0000000000000000000000000000000012f9fc96355721c35a6f5439065d89cfca5345622b3f38041b41c036b9bc6bcc980498ddc7bcf807e1b97831c099505300000000000000000000000000000000105307b482467b881a59eda1434e31dffdea531603fd3c460aa8d4f58d32668228bfa585bbba2dae7346141af59190e2c8e420db340ef2c1b5c6a71645e303eee95cd93228770b639287b14b6a5c59ba000000000000000000000000000000001576521fb3be8c3178549969e54bb17b0a3546ac4aacb470e935359e36bea4f43dacc06c151a527f441ab9616e07f7b90000000000000000000000000000000018dff940a21768ee9b9450fee7259663bb29af645bda2acb4d43f4e9d631e0127073f2db04293266e6fd6fd3d005e3f0000000000000000000000000000000000ca6a977016c1ebf52827a5ad52e5efcf7517ccc3ff40df8141f6335fb6c77c3fb8f6b0dcdba2596ded7c3838577e28000000000000000000000000000000000150cc33b55586fac30d316cad6580cee0a070900fe7d540167560b79f4cf9690a5e02cfce9946cf67a95dedc9a7d9aa35398541eb5a03271e2ab5ec2aeb2da80e634f63a050c25de98ad13e9d63d09bc", + "Expected": "000000000000000000000000000000000adf84ea7681c442731be8db9508a050d4689c42af8f7472491655356a86fd9a0afd91435bdbaee98db3b1d8f26203fe00000000000000000000000000000000090a7dadc0a14df481e44e2005c9ddc6e026ce2afaba7badd18492bd3a338dffc349b4a339f56221eb795314252d53640000000000000000000000000000000007390fbc06077cd167f53a16f347eaf50ce8c9d111afeabf3a672687441b80e66a66ba3fdb28e2ca8282f3ae3dc81be80000000000000000000000000000000001998f98e85285a428a2860c22a00d0b317854da4190dcb4dcd182ac249e13c51f5d5df5db6a0fd61d01232cbcacd5a1", + "Name": "matter_g2_multiexp_26", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c868a2cce65692f83eedbfeef6f9823ae9382fa5ed23395ff2444807e72403d4f6ac861ecd3a51db841889fe22a033700000000000000000000000000000000111c9aa53da85a63ce1870b963415f0d5f812e061aa6bff57425038d1b65fff57a78bdb963bf2450001525a93011a28e0000000000000000000000000000000011770810c16367d075c695981dfa69b072b82b034f8ac371f26bb157f9f9d667aa555a5c6baca69d08f421cd569faec2000000000000000000000000000000000df6146b29bc8226dccfc95a325d791b30cba8ff2495434d75622b170a634ec7995c5b4c689c73582ca861dd21d8e1e49f99387baca30b9cf63ad10c445daa142fcae1ab3c0a366a068bb5efc9abb3a9000000000000000000000000000000000fb30aac6502ecdd3544f1879bf1b3f4c19fb897de6c3a7cbf08f36244aa8e9dea8aaf781f7509d3ece16ca144a601e40000000000000000000000000000000012304be931a1d7440d67740f50b1a281468b412e8b6c54c62b993ec609012c7056fc7e62405c7530e8f5136cacb5926f00000000000000000000000000000000182320f5d9211c08f3ba5d40ccca45cb0060a6d362b4422084617b9d8212e94a9b878294ac176b8f0e959bc124a753310000000000000000000000000000000010be6678910072ed9f932ab01a2d72f7374a2cc82bbd86a6006a495272aa89fd655e6719ab8b3a0643d002021f7b7ebb4283a1773995bbc97a6df107082fed4ba40e2d30c5472a25a7643ca9e78b8b8b000000000000000000000000000000000f1ffed9514ee81e9b3fef4162c8f4980fe0429e57bbc224a9c9976cef7d26ab61ea7b0cd42eda30da97e3f8f5ab5f0600000000000000000000000000000000035b9b349b531d85361a4618a172b510dbc924df671b3fa707b474d0d8b17d30dc8ed208d66be91dcb7632d2f05ce31d00000000000000000000000000000000010030dcf6695d44ad3236032e47f7aa25b9f55869f5207e7ac8641db8c01f5b59627dd3442a1834b8b1fc595e47cdcb000000000000000000000000000000000f91ad5c923572a75d32962567e7b1b0eb84a91d485c968b5aebf8b3a772c2f94e47bc1d5b333fe43574308a78e768ac7f4202d670fc3b48eaa92e925f48821d2ae057d90c5f184edcce9ea900ab51a6000000000000000000000000000000000ae11c60537bbcfa46a08cbc219122ed66fd0d42f90e68243c32010eb99942554c349c021f0e3635bb50f7ca3d106a3f0000000000000000000000000000000019a61254aaa5b51b4d354f444706ebb0bc3edb87ec2d83e830ffe0282bcaa3278e947d053d6678549a098129bace43da000000000000000000000000000000001100f48a07456f01e16bcc833ae0a2835c964e9b0aa850574dfd8b4a7f06d03059e9b4df8931740ce0621ec7eb31218400000000000000000000000000000000003072392a824c386859735e2d203c9d52c19796ccf8538bda3b1436b2f6815bc86d05287f29fd0bb0569a81a57f0c22a76cd8d292a7053c449cb98f13cf768c6e37da9d702af28c16dceacfaf9cdef5000000000000000000000000000000000392760f98883f9cf6c0f0a324b9a645cbae12b780896f6a3eee918c44a815daed156248d6afb25901521b323f6baa240000000000000000000000000000000006375c6629f30b7a36785269d691772afe1b95d6e1bfaaba9459c31086c2697e4ce77d148fe2ea166cc330373583f4730000000000000000000000000000000000aa8e338df7eac5a7b070a69d3ed1553a0c52fcd894c2bc8d1b8cf6ed38983c6c392a9a045ffe8ff40b39d18e7c87c9000000000000000000000000000000000cbc73b589cba1bd47161282642fe6f51f2b3edcdcad6020bdaef369d3f2c11ea9cafb9a7fdccfb89bbbe13560d42d1d97b7bf8acdfbb148814afee1df79aea17261dad6f78772111a6dcb021d8c79d0000000000000000000000000000000000e71692cc2342d1e93e0ce72be69013023d012dd2294249dfd69e1d610e2236ee2cdef22446f1996bd3309825989930700000000000000000000000000000000013a1bbd3237dcbe44e05234f7e41982f4fd951d3741a3e90345418af1c922d35edf776a27bfbeaf7a15658db67164bc000000000000000000000000000000001197a2ee5c2541e19b5368c97abf51fde3dd0b922c3d701d7d84552c9f47b38ca09a8aef8240abfdcb03292ade1ff04c0000000000000000000000000000000010ca3c22ff8a47b1c683a58086ed9d831a5c25b6ce5a1971989974b4760cc9e83a1bc8d819825989751405b242eba379efdbd5953bc33bfba09fe7b3ee22c46c3a86f557e4b5f272853e67fd95a0f9b0000000000000000000000000000000001306f8047ba1a3417e7993bba0dfee9077eabfc275af91d0b882a53199874e0777d8dfd29767186d922d49087fff38b20000000000000000000000000000000005371b760380a6d287e129b329e735413447969eb9048def44f5c5987a64323d2a5c81484c40b20206832b86a4af9c4d000000000000000000000000000000001552eeae620c42d0bc4593d7c8e2c8fb4d6dbfcdde68d57158a7dfe837a1870a73b45a97b02abdea174a475a7061331400000000000000000000000000000000033a6dec61540a5cd5773b76847dc5016b309c5a027639598f51ae5b1067b3f7a02f5ea11b0e1be77a3ac236cba15c929a331bb218b99fd38451483a10e8add23c9641b975af3897670884efef90d4520000000000000000000000000000000012ad5ff49459fd3a7940a69e2a78919876e9b3a4f0c142499e7b5dbcadb5c2b5d79c5dea972f0f0acdfd10ac53bcdd92000000000000000000000000000000000ec1be9cb379bf1e24bd5429a4a91857bc3ad45095d15bc5537c2ba39407e9f2edc5fbf711ef4287a73ea466d4f53c3800000000000000000000000000000000173605df66aaf51810793db1cf2021de6a7645ae84a5d439ee035b917d037d9f9ff072b5dfe8b9ac69feab60fe2d70bb000000000000000000000000000000000d0bd336825381ae1e18ca37bf6160ae32b653ec9f9dad159006e92c24b661f22b5629ba323e9e06ccc5887a962ec23fe9301dc826bfe2988cf93c29ca9f01421b75ba63c5ed2cee1599122012ada36e000000000000000000000000000000000f5e593c6588add92cac2c9467247fc6d900f20b4d3216c258f88f3334eecaccbf3eacda227e2da46cf520e5102a9cdd000000000000000000000000000000000458177ad6c190222e53e054546413c13216286d414e3509b7dc794dc0704afd26bae93ff630c6157d05d46d805a04470000000000000000000000000000000015df8a7720d389e6112707e37694afac2f97282676a89964deabefddbb3a0f1cbc885d4c875b945b8303c1ed2c0f46b8000000000000000000000000000000000e3c7f1af7cf5923dccfc1d25bd86088706a3a44f5fa7f97171228e8f2a2b18e9631b2a63bd5a75ee0bb83fcc91a45c30a1cb530e8b828542fa4114de6aa936bd2be5ef3a9b7a0e20e475022381d62d40000000000000000000000000000000017823fc8a56e6e5cb9924037ad6ad1b43237894a877572dfe3d3cdc1120fe83e01de112b55f7f334dcb5c6247c210613000000000000000000000000000000000daa01f90cd14d82d4fc40b60b463089fc6c0e567fa46bae69184d0e3cc5acdb1d759e3291e2781fe0b65c734ddde28700000000000000000000000000000000164e742b123c19e52e2d7a6727689181f323990a3f3238072f7cfd7fc0f55b7be4274c0df194d85060a81f3744d3978b0000000000000000000000000000000007c03a1678b6e91c1bfc66ce8fd419cea13c7cda3213856ad21823b06db94538153a15d43a9d4270edf77b9a5ed490e6cf2f0c33bd044e8c4468b4b7e137ae294c178e7b6c9f19878331fb93220db2cb000000000000000000000000000000001865bc91e645e2e24c3efa3afab8b0e278dcf16b29831f75b3eef0b342479e997b9c5f8ccf67c789c830609b3cc425400000000000000000000000000000000018dda7857f919a6a49f6bb465c27342c8fab6afe6350c43b98e91a3105276f3ac27268454e9a9c6dafeb2218ddc7d3cc000000000000000000000000000000000b098258ff8b185a5c59b46150954d52db5a5f68bc7975234491406131e4f1286ce79156dd1290aafe688f936ad34e31000000000000000000000000000000000b294e9ce904fb9e243d0790147b6070b10ff611a06e3f639aacb744154d02016ac08f6769732d4f6944ce9257680d49e5f460dacc592bb947ff6f1c15b8464824aa5c957a645a763138ac1581ac5768000000000000000000000000000000000e541a22a7a36adc06e445f42497596e1017a1d99de85bb945a195cb3cf0c14d39eb7a2aa994cf234eed77f6307cf6410000000000000000000000000000000002de753e41a16565e5ab1b61debdad54950e9930e04badc6e356f10711d7688befc6827040356c0f0a8ce4f8d7121b3a000000000000000000000000000000000f2202e34ca164f1a6c0afbe179b714b303d87ef14534fe3f4230180f709dc63af17f04487264b3dee6b24ec4d0a423f00000000000000000000000000000000004044d9e3b3a77d6a309780c870a65e05e1ac531c5420f6ed0056f5e728e2b83a968ca90d579db50c2dd395f7e40beaf26a9736f728e16d7b8ce0cc59e2ccc848c181459fff4321982c08e9cac5794600000000000000000000000000000000166d7692fd30dcd06b9f01ba2101870ed347840509b3242f7cecf91fbed91abc24b08b08cc39c508e6499a2f8bc3637700000000000000000000000000000000076ce6dcbc77812b4d5b44a50edba5a082cc36dc24a5cc348283a4ce1518198b56134c9807ef850edc9e36e9a282b9ff000000000000000000000000000000001261d9412245abd7ba3fc1597f34179e54766c49306725d42588545e14f4e450ee1c7af913ad7225275c57680c23aa6300000000000000000000000000000000096602b4eee053998555ce522c060d5e04c7961eeaab0145d38c9b13362624f54fcc8d0b77f2bbaf8c312a3279f06e4eccf0a9be4775d65bbfc894f8ca66fa6f69d4249ea7f6b076fe193f2805e64f940000000000000000000000000000000012be34c18145aac51a1494f4052edbeff14c2812ff494cb78198cd7d9db9e951aea80490c55c4ed926f6a96a2c337c880000000000000000000000000000000000536e46a63ec5ac0f2f4eaaad6df98322c6a981cf2fc8ef253269cef20a76ba1ad089c24cba4ad4680dc4192d66595d0000000000000000000000000000000005363b9acb66ee95713b63dad076529805c0dd8921c738e205e7b1d0410a3ecca0870aeb2e64cf45270d49b473371ddd0000000000000000000000000000000016749b2b09d889b883b6fdaf518345d4cf097a728b833e92c4d21b5c41c8d5cfc0758e895b60ad101a74bbb6be6ca0c5fc6bfb37cbfb10a1ffdfcb91d9a52883cb9a606f4ffa8849a6e07386dc9bb34000000000000000000000000000000000067a684b55fdeea39a29252b355700a4810f083909cf2c07a80b362ac1b4d58f5900c68d266f7ad81ea278c0931bc1ec0000000000000000000000000000000001b1f78d194d77cfb4a2116ce9e29438dbf38c52733b0295198159d7cadb2584d86a75c24aedeb36234a0becf9d38a870000000000000000000000000000000011fced2244cd959872a25c0c7bb4af6151d99e1aac079c606db4987b9ba111261d4a16e7d82362b865324824445a946f0000000000000000000000000000000002659e7016ad615ed80ea1ae020903431b470bc0341f8e0918de9b8d2e933dd9f2d9123e9e9d20bfb05d49f71c3c454cd94959e16f6d780628694075ba5aa1a476d89d8fffcf4b4ab7e6343c011fee920000000000000000000000000000000008f3c5de8c94a98dc5ad7846c53980384f997d1657f7349ad9b51376d41f4b21861d212fb6428bcf2347d8774f44156d00000000000000000000000000000000110b245b1e788da41dcbf60a3ac4987c1925696dfca85d450107f654fa1230adb9436d60c9e742dfb4e453ec4944c56c0000000000000000000000000000000011043b975e01df36a36307ba9234a18b97aadb9da509513b13e4f3c80432b0cc5e69a3bbb3cbab8df41bbcc92cdbf60200000000000000000000000000000000120aebda10c52a67d23842e2bd9a897cf38c58fcd11e4e8c5614db5e409a7c03111feebfe2f1212ae753497dc59d6ae9122f3a5e940ee7e5038421619daffb8a6f433605f37e78d863f814b51b2ec4e2", + "Expected": "00000000000000000000000000000000021067690e6e001e3d0d01449a7257348c4ef68e66dd47b9014d7687d44749be1f33e6be95df6a204169ab7103dc2d3c00000000000000000000000000000000062efa0c36462ab0734128dab5da8635705bd1e1b540817c5805ed9417f176723eea92425db539e8763b1c79b9923e9700000000000000000000000000000000176c9af1970f026bcfa87e6f85a20ed498c28c6982e21bc050cdc29c0f0af832ed4424082e4862d985b78519cfa75b820000000000000000000000000000000018718b0d0fbdf4783cd0b01524ab153b891fbf08cad60241a3f3163d2c3496c36afdc6de62ab3c9a037f88ee408ce5f6", + "Name": "matter_g2_multiexp_27", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018adf92d8da050c76118a3a3b2ee43955ae8b14ddc8ed64f5672f40de475f7e0ba6ff60c4b6ca3e863d7914e6de2cc330000000000000000000000000000000013d1e19011a1ea90389480d14fa608985d895e05edd9c28fb34646f70fd7bdb7857fa785b1e3c8a2997da6c3b5337ccf0000000000000000000000000000000015764827d9838c2b011660230ef9805af388fd997cc229c939bc5f4213d517dd837328c45b0b8ee1d6508cb70629b7bb000000000000000000000000000000000d58fa30a2d095ee8d946e50a027ac4cfdd557b3fd9c82dbf1536ddc0f42491a176ecbdb026306e6ebf1bb182a4e8199b3908c739d505a1d6fa85a6dfb7a155202710b45861f1a8a7ac7bb3274a180cb000000000000000000000000000000000cacfc8d0bc6f9db737c8a316043a6b52fd5946937467afc09ddd14e509a89f2445065ac8a8c56454d529d67793edb0400000000000000000000000000000000148b1b941f159d93170fed949d5f53bdd2603d78a49443ac0e2353130ff914376e018c3db3d12b807d105f2d50eded8c000000000000000000000000000000001382a3e98cfd072807214479900a8602bd666cac7f19be0443ba1354bfc05666f40384e9ccac314b5d0a2bec1c90ef0c000000000000000000000000000000000c12c2222f67a5adba78f2c0be5be95ed743e835857f4204cf47b67fa2eac45cd5985fd82c7a3904944e7b84737374b17e0e27a8a416eb38c989a66b84f037a5a24ef3358e20cd553f037a0a2461d31000000000000000000000000000000000197ff997d6c5efa3d7de8e16f26082bf13a2401d6df5f5c33c6614c36105f347e40216c907bdad9c1df6ebbd44f41c3f000000000000000000000000000000000f27a0bf92329730d776a83583177993b2b354a212a9c004f9f8892a750c477b8d1e68c13127f03b1629bc8392d06f5b0000000000000000000000000000000011b239cc6914a321385d907527b85713a0d842f5be80752f4c5758586dc1de944b6e4578bbe324f16838115e9c866bca0000000000000000000000000000000000cf93c5b48cd9de51ccaa45124217cabf466d07d6fdf4a7bb810443339ec4af5b74931bd07eb9fd31c284c05f3f539e0a3cbab01c34856b892aacdabe63d0a0c241ebc137a88c83ad22cf38997b211b00000000000000000000000000000000137b12f731ec925dc51e20a9c90323d14e1497e16b3a4b5651135054ef0e58e9b18167da15220b9a4f7d81e9a7648fc20000000000000000000000000000000000b2d3ac534e1e5b2c9ff4092c2d8dc5efd99121de7df953e5426eb33934ef07e41b196eca50f5a04a936881a05f2b2a0000000000000000000000000000000004feae2377d950717695606844a4873ed7b5f6703d7a63dc8b960b99b68efbba710c2db0f1371acbee314875b97ca054000000000000000000000000000000000f49ce3061e7254dc1bc8af3636a05e098cb96d81fb31e25da97c6266adf3c41a74d46ff32f4fbdb4cb7e4a3f69e827bb386bebe0e49b7f07b0ac61b15306c2515a1ad6fd76a1825dd29a60e845c0e4a00000000000000000000000000000000064ae3fd67250f2c6332e1e149ec09946147e12e0d871403e559b49aab68190a1454b3ae924727b6dcf6e1ab327c9d7c000000000000000000000000000000001131f91c7a0e1854bba3958b36083c27904cfbdb8b8cb3fe68cf578bd1cb6f7c6eff91d98e4b99086926c5d4272cc1f200000000000000000000000000000000071c6a92a8d460ff72d172c204c8a69d6b6752b8c1f731ec63f7f394c0c3a2a1bc15e865172f693f523c11cd4ab1f88e000000000000000000000000000000001193876df7f4a1cc9b337a41c9faebac2f209b9070bd75294c2a88d3091a1e55b51fad482fd2aee8f90458eeb7e981fb8902a82d33993a10c56b2fa3333cabf1c5d47a9c78354d58f70ce4807cf2062800000000000000000000000000000000025c20ed5572dd1c9a098f241d2965d8739878ddc57c017632afcf6e54964894adbd6d30f62f316c9c3ec7a08268afc70000000000000000000000000000000013bc3e930f4fd5766db8f04e1ebfaab2b67f620119c39d687c68619b3564f3e8b74666c9f8bed6c1f080a9e23e9c0f22000000000000000000000000000000000973a3cf19312f90843f1f013b05484064032557807ca67b2ded4a27fdac12d6cd0e1416c8998cc8635ce10046adfbb900000000000000000000000000000000108903617c78fc608eaf007aa13861c970557f2693b24e8a278920897be9694570ae6e6c7749c3eab84d5fa3af5164b1426a4e2317fee033a226a91a52a5830f9ac2cf5f329feb6bdb382438b8a39f2a0000000000000000000000000000000005695975c140fa14998e5916268bde2135cda80a45414fa85193fd6e13c6b5a6486898f590d76175d8ec2629c923e33600000000000000000000000000000000033f58b1cf67e51e9ad817b31919530cfdb5db5ca4a537d9b006b63399da49b2a5077bf5c3b3b4fb10b2478f466542540000000000000000000000000000000015c532e40ec04d9143e308895b2e7e3d3daee093a5840e1e76ab528fcfa5be57d9796ffd58ad5ab7df6f88aaf34706f2000000000000000000000000000000000b55747d1e8b66e2b2fea67229f2b7b17d58ef547ca841bea8db5b53fafaa18390f11b8170c41a5dd29331917fa2e348de0390c05fb0dc9b4a3f76b51cf952a11b909ce13f9abc9fed6a349b8efa98ad00000000000000000000000000000000001ee5ebf73bb40a5c0822350853bb5aeead3262380dc274faba6b04e58e7fb9d5a4ace109ffa5011e73e3d89ee6fd77000000000000000000000000000000001427659e5ab1f8b47edddd27c613b578890d4c66c835c0cf8e8daf19d0ae842f0bba5bc83ed7248adcd75cea5d222a270000000000000000000000000000000001d4560185690ac05e56c2d629d599bceee3ed2919c29e3d1ac54e80ae99b5eb2f93bab865e8c1eef7206f96b2bf4eb20000000000000000000000000000000016ecd3589e3703e5b0ef53790130d5074d2bc0fd5839d9c6ff905746a77e393f73edf53b98b99d9c87a1fee1086aa8657431db9e576643f93505b5b25836218759e736c0d650a5221a652338b0073eb600000000000000000000000000000000163850016261f34de2b831a0a8dd3f224adaa3cc279cdb40e0ae976bbf736dec26c55a6c79cb1c623870b62ea216274b000000000000000000000000000000000a79af5c054cd08608d4be1705058ef7b4ec38a8727560d960f0325d0ef915c049a89e76956d0296bcb6c96333c3470c000000000000000000000000000000000ca89379e558c7308edd25bf06dc05db857204e9351299ab66bf050c8f051341a6c15a02864c679f07373038de3fe87c000000000000000000000000000000001929f42ee5d9dbfd1f6656f61e6243ebf0eb491762b7f3608db3f3e9abf565ab1524f770cd2ade334885d7479342c92c6745a32591e359efa41e9ea93a016d2eedf1da112cddbf31818e8d687b36af2e00000000000000000000000000000000193b6cf7300e47ecd21a05a71b13a8de45418d3f67931789ce6111b8633b9f44063ca13ba8c8a598ee0725caaa3f277a0000000000000000000000000000000016884d982e2ec0fa7e59fb34ae8708d0bf4abfc260837ef4432e8e04474e504b85450db8af8e6809413c90268801fb3b000000000000000000000000000000000fb48a8331f278845979beb8cd21060355566af215ba44029455a03d0c016daf0f6b7c5773d1a99e893e76b4411a53c70000000000000000000000000000000007056e30143058eaea89a3065e1de768d49860b170d4c364a28d38475f90711fba62c1787adda90dd2d347da72680f4eed37a5f4bfca6b77ff9e4f7e03bfed52ecf02a8f84ed3da6da2787a4ee81ad9b000000000000000000000000000000000501fa9af88e28d4f0c0590a2624239bf1724ac7174b0f1d5fd7527cff1de9971d6aaf28ba4005e88e181daffee6b20f0000000000000000000000000000000007af5e30b5aa9ad206645ace12cb2b36cc1c6068e604184ca8bfaac5a4ca327f7c43a74d43417918da7df84e3bffd282000000000000000000000000000000000bfc0538d52f277d54749ed0b69697b4c60ef0c5483d21dda76533e15efedc9e2b2ef07618457d64bae8ef922c0b41f600000000000000000000000000000000048935cd352e999bffa613e3be0a9f9a063d5b5eb46cb5056e41ba214e87f871f216ff41ee297aaaf2994a7b6433f58d81633dd6e729bc17ddc596cb1f17dc6f0e50c052a0b8c5a4c83900d918a9eb560000000000000000000000000000000016ab1e8b6f41891e0b65f14397c0887b27ff27e7463333e0938a7a1a181dec603056afbefdb23b41bbfb2c05807289b8000000000000000000000000000000000980d0ea9ad5c87bbe1aefb708061f85faae1e1e3b01c55bd577631e5bea2b5ffaf5e2478f5a8df89447fb8a73559729000000000000000000000000000000000784d0c5fa243bf0125cb2c83a4040715197e99d507d71a3bd9ca396074cfda652c1ad0dd95c3cfae369e68d3431ee7c000000000000000000000000000000000e533bb33e6d269dfdeedf7d17c3e0c19f694d151e8eef801c326cbcbc463a42558f58cbc330bdff0d8d91e2974eb4cfc6b019d29219b57404baa955f66cf1b2ee6571ad5b80d471ff6db569e32a1a5000000000000000000000000000000000050f005b00f371a7308b5d7d7f67f7c00bf15acc518942607f32686feab5eb503391f964eb7ca711aa6c7b4e494d7eba000000000000000000000000000000000e2ee5092170ea3da0b1397023b2386c65ec8b090484353f2e5d64694aaeb8d5410ae22c92662fcfa21566d70173ef36000000000000000000000000000000001549723160fc7b8f5ef9a84bd1803f18b76698aa7a663d9c107c9ff6c6d02894edc80fd00d436f3a942c05593c5464ad000000000000000000000000000000001032f49e3527cc1f1355c65edb21220c6afc88919ff67ba99c65645cd3b8ca6662dd0146f6a90d92558b3f54815a361d6a76411ce02b4dfc84ddf62ed26508a2dfa5edb5a98a6a20dd69e8b8e7ad2f5900000000000000000000000000000000170b317e49f1304570a3a3e6bef78fcf8537a451ebcfef5afe3eac4aa1aa87dbf95d0f870fd3372d37efc9e663621cf7000000000000000000000000000000000269ae0677d71b2537078e96d2593482e4d41b6d1d2cbec755f307735faaf79c01fa27f1103cdfae1a9bdcb665f592c9000000000000000000000000000000000b115d5a9fb9fd9361d0573a8d68c5193f02edc1cf3fecf004c6603f118f28ff394220f6a9e1051a5d9d4b417290b7f800000000000000000000000000000000107b45614b18c2513f8c42a0032cf0f3f300157b39d2969ef7b126f17a9b5e8e9ecc5a61a2ed4db92134b0797f6a0ea35906098e4ad7e4eb2e996075c7cd660fbc399bc942f9080404b9d0758c4ae14c0000000000000000000000000000000003de39b056f8f0248b138437db1536b7bfee29af00c37fcd14c25c88f0f051eaa07c763d94c8ce497696311736c0b7140000000000000000000000000000000002b52981e828f8dc1cd371e6821d001e1f96d57a865a3c0a255298c43d52741b18fc60903d1a5ef6227061dcb243096c0000000000000000000000000000000016b5335f0f9516f52f2ed45fe723ded427206ba96af0879958f1f22795485b2867e953de3d9b3a9eed2c37f26838e1540000000000000000000000000000000004c860058c7ea2e6e4eb2a65c1dfc20b3070f89ff58ab99bb51a4eb9e7f0642f7b32d1d9f27c668a36a9e053a8d585f394ef8c281a9be3766fe784ae017d93f608dc2cb97cbb7dd3e3814b5ade845d370000000000000000000000000000000019cbbc125ca1b89330c21ef5b42fe0dc1e795271ce4a9ecabff04eec9029f756f180520f0e7b84be2e9fa4af395536ab000000000000000000000000000000001630cf0c4f3282689a3e01b5c8f9be3803f60238bbe9fecbb0d9e8e49f4ec9f6123c44840acb8cf55f8f6bd15579e6830000000000000000000000000000000012afb848bc0ade8f0c25c6c342bb651a7481be065a48944bbedbc14c095af8a4a048fd1e776126e2128f904afbcb17ff000000000000000000000000000000000dbc984f9ff907ce5553bb11a458deaaee0efea49d6816ed7abf1dee7b70cb18cc669d4808e75678bb898359c7ebedbe6feced33019b3b66d335f2118cd22b2952cdf9757fb3a0cff55b7c4f245fb438", + "Expected": "000000000000000000000000000000000be6dee62b8c85e36a216d16c5477a7c58f03b992277af83d9b53b3b2169414b72bcb4a97e3667482e888738ff17c94900000000000000000000000000000000067337c69c37ef6f0ae59fddb84c46a2afe7fe047ddb57b3b80437609f1a21fa5a73420fa5b44704ca1cac6c7a99d9320000000000000000000000000000000017fe6f37d2410159e533374ff3812714dcd07610d75a53a5d502cf2f51e750c48858db1e109f6aaf724292c1402382f1000000000000000000000000000000000b8ecfe1f5f5d95777b0fe5d94fe81b82656e6e5a62b7591788baccd251d93e4bbc6857cc87cfe6b4ed470c33631ae22", + "Name": "matter_g2_multiexp_28", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000126d4a9ae3550e31185aac9011e3f086517cf79a279326c264f51bee6615dbcc730d78055489b5602e91b08f96d23882000000000000000000000000000000000aeff5fc04fd06c26af8b048fb2d0d493525ba5c2bde30664e7371812d529ec7dbd584c056b05fe02179b7eefbbc45fe0000000000000000000000000000000017c6538d2801947cbb646d4ec8b70b1e24453f7a984db7ba73e3a5dcf595bdbad9703f2d846ab02491e5e3a5bcee0762000000000000000000000000000000000badf551dbedcefbe7c303a5c8a52151b5460caa22004028893af4d8a3fac30cb1da1e986f9124acd5db7a634657dbd0cb5e7df372d346fd13faa90b0d6961372ce2f32ec379e5e50e7ed8a13942cd9d000000000000000000000000000000000bed71c7d878e7ecccd8233e3e604e564cba0b1ce75f726f846f3a6e2f3b4f5b12a28b8638be647f5c33226edc2bc7fe000000000000000000000000000000001914c20aabaf1f6f82063223053809622ad82a3a54668bd600db1aafba22aeee5c8a07584e263c91cb0fc5fb809da63d00000000000000000000000000000000056d9cd8f79a90d16b36bde77e546f8b3064ba7dd0fde78d6bc538bd6ce12a4f32860205d5d396bab3d70deaaaccf9450000000000000000000000000000000012f7e420708b66132157a80753678de292998cb6c4f00244d3c47a6077b3401132b73c7f52369aa2a6a90892f7be4ed913a5fa1674c20c97d08608d200f3f7611010e6a25a790853ed4ba0c5aacf111b000000000000000000000000000000000339aa1471eddee8cc0a4e4db5a29c3e4e92cfbabe023995a79624614aca522cd459dfacc0cab346b1cedac347e1df100000000000000000000000000000000016cc4ee8cb72fe09e65616fbe9bea1a0077114ca841ae335f1f9eb5a0b129a4bdc77cc6dae8727d74fe21f0d870a43f2000000000000000000000000000000000098a21da6e983228ebbed0ec3704c9d2521e935506c0567e3bbf9b9c379ce6d33c3d0dd8f5e013b431f740964db634b000000000000000000000000000000000a7a38abe8e282544ec6c8740dce8559fd264393d0a5c9af9813b2430bdb92b3150eacb6732b9cc278d0d0e622b263ecace10870acf190b373c19ce615e20e5cb96d3c6be3ec155f2b29825f8476b7740000000000000000000000000000000019ed305bfe8d8bfcc20794832b3c117715b6a658c0bfeb629e5989f265cbb456e857e53d168932589e4ed2806db7c4b4000000000000000000000000000000000e2ffda25fc316a38f556b35a7a3acb1a2bfbc1f9469a1b6427ed1f216e113a379932b0547f5370be1017a1fa0266cfa000000000000000000000000000000000ebc493c9a79b8ba58f48b90b9d287c74f505dcb484eabda79ada987d63a4df04d671d4c4ae4b32f8ad5db6a1b80f37f0000000000000000000000000000000019fc715d26c0c7a0c291ad8319e2e8f2920c63b4d4ed3f0e2f376aeddd4f7bd9269175ac8d0f421b001e2e48634f3f238d9e38d9383f09cf0f8a8077f1d1dba091ff0abdf7e77c3b65c2df48d6c6f536000000000000000000000000000000001285ff533da833a3daae7d815b1b86feb6f20b7592af8b0eb76240f390ea48b69a75547b040e7282b71779f450d3510c000000000000000000000000000000000813d38fa21c1f3c87b9c97ac03e6aeb8fa23e0340a0dff4e3892c774595648743d0b8980a7bd21648ce9b16a245ac3400000000000000000000000000000000020a69dbfb736c64e4cbc800aa415729b24ec05e901f2c7ba38e49a21c3851dc03bd4f7ec829d4326fe6c13867069a07000000000000000000000000000000000d518f3944053c8f74c0aea1d054d89106312880de4479b3dfb45b00945ff8bb58b12f9a489fa9fcd87194a71475d0a1abeffecf9b404c6bb2e2d0c78fbb8609a38e3d3187587c3848e8f9781b7e9f440000000000000000000000000000000018c82052cd483eee7aaa421c2b998ab0b4b32326dadba03c1d923726697d3940b40d5109ba34de09439e833ebc19daca000000000000000000000000000000000e4feddc3eeb3fd1eff8316d5b0cba554714713e8a605a55909889970ea2c8c58bb6c568024709def73b29a5a76563c100000000000000000000000000000000098da4cd0281a16e2e3e542ebb92269c8208a3d373394b0af92dc8a2676f9f0b6e85fda9161e32558e0569cfc7b1f3df000000000000000000000000000000000b7b54b51821fc037f02167d2e640f8dbfd1472407278b4bdf47b958da39f28c64569c3199846c293bf60e86aa45f205adfe53846c0038203d8b8df0cb636aec7d4ed7f78b0b0c1734be448bace08f340000000000000000000000000000000003058abd4e3d49c86ffac9c95b1f07b66a22c42654dc4a2e3b07b87c22024a8bb0ee084a558ac22cc9fa286861fd77ff000000000000000000000000000000000fc9a89ee26c323df22add487a6bb278ca3f4c9a91eba4e067d5abc9dd3afededb4f98263e10083cc7ea224f28d3bbe100000000000000000000000000000000058eb015f1e14da860215d59165e12feb8d1317f652eeb76b3f08b38ed943c94e632dbf8145233dc93755e44e027553e0000000000000000000000000000000010897d5c2b481f9937d830b333e7649931e801a6bbffb7d9a3ee28ab1e27889691a9f0b9616a8437c3cda942bf07282206e9d4e41b628be51690b86aa8938db066c052f3adff774d35eee1e332312d3f0000000000000000000000000000000013b88963296d8c8197cafe160846ee11365b7a991b35cf5613dc57714aa48307f4dd9c6ff9704b29905c18a41a48010e0000000000000000000000000000000016a97fff65fca5ff282a818deb8100104308b8d9dfacddcae32fc2b6082331b44fa70580018930fe1ab9d9c1b13a59a20000000000000000000000000000000019cd2038acd84c2db1f0fa1b7eccc5f7ae3da803cb72c4a1e8390d49e0adff1d88a85696d9daaebce9c6b8a2f861fb36000000000000000000000000000000001271338587f06847770c72dfb3d9a657d05f8c7a012bec77a7d40a98cb1637ae99281c82668486119608b01feb25e6dab3d349b1546a8c235d60c41408c969a0fd42425f8b5ddc1fa5102d2821bde2c600000000000000000000000000000000173ed7c70f4683102cc6a276d192a8f3b189197d5ea5dc813c7d0162a1649e906f76a1c9a1cb1ace6e4d937934b72338000000000000000000000000000000000936d260b789b1a2a9d04388caab364049395be61d320aef66ce50f052eb462faaa2017731518675bb0e4a2f050e4f7900000000000000000000000000000000070bd1254cf4b209ecb40afe248f2e53c390636625460439952ca2977be021d93fbec264c31ced2a810e8a5e54d750230000000000000000000000000000000016ddc3312f8ed359792bd213d086a0ff1540e3e5a2dedf6c450fb96a9b6d1edff9bde31fbc04de382cf44694a631178229b83950e79750e9827ed92856e4d1e1b5f0b47c6bbf3611a1fef8f2fc47659c000000000000000000000000000000000aa4bc6e1a3e6c3c45a29db74b27af27b61856e2cf385ce0e5094ad53db4d31c4af45b5b234c66a21bf15018c13ece8000000000000000000000000000000000188affc993bf6c99103029c1e406bb1a693e4f1dc650907809ba3de1471d41095dc1866578962c72538ca85d09fcd22d000000000000000000000000000000000e487a7151916694b980e62b64ba49ffc54aaccfa0b0fbc5c14fa4a50d1bfda55698df5cd8570c07030f145c49a4ba9000000000000000000000000000000000084a05dced107d29a0fd4cf817ab67017ca33018d5c7302167d08c64c45c5c455fb5c907f21c39b8a86d037a126df4e76b5ac07fb4a184dfed685b93d2265cebd02a3296a3b0416cc6a115242079752e000000000000000000000000000000000ea7060a07dacd84287007a05b494bf19a03e5a759b0ba67624c54cac3562c0ca3fa6e444206614d00d6d6684b86bcb5000000000000000000000000000000000eb2f332f4481276f931d2192c1a9f6d7585e85f248a8ac95aed398cb61bda05230bf8b9c041c6f78be3b34668a9c1a0000000000000000000000000000000000faa038219f844e379d8cce55cb8f0fe2b55548a0a0e1e37e25ba4f432e6b1a6451b8f081c171490bf055f81cbfe5f8600000000000000000000000000000000037c70d4e8befff257c4bc98a4726a961f3e2e68e7e02f9f2c94aa8f5fc67a1da44d41394dfe376a6c04240e4cd5825f3a7a25ad9f02bf51fd73550ccde12374d9b151f2f6fe535bfaa43efc391f789700000000000000000000000000000000100a24d21c0ddb20d76b6d9fe642da5ac1de28afd642ab5c08574206b8b64d1fd822d295476bbdf2ca7e9267138034dd0000000000000000000000000000000000aa7e4f2f77acfe8b4c8f3fabd56b17415ee9bb182bca1db15c399479ec60382f980067b9d4c4ef7556d621259ae9110000000000000000000000000000000012f7a7f91a988fa661c661013736f0ec92b40f571ac15a47067bb847b09ba128d1dcaf8049b941a51cacece5db4e1eb40000000000000000000000000000000007528b0ea66b6ab8d5d318f5e4d1c0e9a4f504057dbb0397b614a1adb160032127f2ac35a1a98da70f023cd343a35ffd47944c8c814f143f746175ba0b2d75e2ae73730a265d869763f0e986c088bfcd0000000000000000000000000000000015d72b8d4e71cc092c2875de80f3d12e003804d980a4b1dd13cff34e9336397c4533b6ae3a03beb2f09312a605947a270000000000000000000000000000000005976027a98f7b0caf4cc7d0d71440d3e4fffb1ff65fbf32dc890b275b646f2a32600a6215d6b2f999eaec8e58cb6d5c00000000000000000000000000000000111583b7734be53a7d4d090486070cd3d9622156c52871ec79c83ca024880684eada56a36b58cfc3490e65de41e10579000000000000000000000000000000000fb670b553c2ed4c81962b149efd4b0c77edf6ee70eba88300cf264dda98190e550540fb9fb95748599bca3abadd752030f33b187df3516866f259ff959d57fa9c53323d5c851fdabb96e5ea470518ac0000000000000000000000000000000003900e7cc0a8e891dc4dfc45f08d97e73ccbe2021a560a92c493aacd9c0614ad100294b5d7ebd634ffe4e5ea301a26170000000000000000000000000000000011ccc136127189728a7036e85d233fd150d5483963c48074f9d8ff83a0791c950da380e717f2bd0bff8fc115e9e886290000000000000000000000000000000007d3e76bd1f22679d228b4ee50a60cf1bd1fdaa171372cfa34bf4136a091abf7e5ef3c6b3446fd41d5de68b563fc7ff3000000000000000000000000000000001107f636d9187155357bea75c943dafcfba2394a9300054026b46d6f9db31eacc06d1f64c2b139af297dc4783026d98f4da8401050f30459e026a207ca631f0684a10813c64ee86dbdf06b7b29cd9786000000000000000000000000000000000e3a4101f6af3cf0d5d5aa5a0ebc26852dc69f91c06e96c5f1c7f8e4528c3dd92cb6f629620136ec356f0657fd9ebc6a0000000000000000000000000000000008d34dc3e1fa8bc22258e23b504d442a11938370325c101f1cfa52f313724e0894be722646195fd078c1a49720cde8c900000000000000000000000000000000163730996c79787e7ab89030de2c26e26188187762fa128ba4378a398ebd906dc56d99cf228591f394396248665c196600000000000000000000000000000000008f0a8b3d003b6727834228798950fb7a3cb6b931bced4540693445a007b474f7459ede17f87158e932e4c9c094ab904d940555d48649f30026f70450b2caf2b8f7148b28bfd4349458ae89c323512e000000000000000000000000000000000cc2d30f7d3869abfc34719f40b0ddaf00f52bcee7ec09a16de51785d55531fa7fe3ca1544d7103b9caf7105d60d9e930000000000000000000000000000000002ebd8af0bd3f82dc9dca585feaa83071534b2bc2b3d2aadbe0d01d759ade77ecec3b3f7b72f82087365a14dc205add80000000000000000000000000000000011aa3734a4b9168d3c46944cd726bcb203b94b25a97437a6aaace9c84da708bb073ee10585f28bc41e0601567863c193000000000000000000000000000000000ceb4ae5a8b506d31e77e2a43f3af8ba9459b887a927ca5287edbc2ba7c7cbba85a6e4d35c099b7ec7bf7eb2814cc38ae140e30424d2cccc91be1fd3a62d9ee49c9d64fa062d9350b3fa567ec21bb06b", + "Expected": "00000000000000000000000000000000192eb406b52075513584ae3c6093fb534270d716c79961d0a3c4bbc44096a2e8d28228363e2c8da54857945f1b983569000000000000000000000000000000000ee0d95748b13b531821ddd71a15fc529a2ce2c99a66f14e28f97478c3c2d524cb7c4cd7e71a1027030765554b8f50f7000000000000000000000000000000000610ab3e064532ce261aa2ba4f78721ac4f78661cc13fa09ccc279267e6f703f1bda17265a5eccb0061ce24d31e000ec000000000000000000000000000000001966a334b16e64e4dbd66119af97bd2b8d6afec0eb1b8207f437c00ab134ff369b3b3c1bf51b871a7fe8ad1ce93dca4e", + "Name": "matter_g2_multiexp_29", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004c22bd94b82ed3b106532a58a0253daf51f579b9d746c624bbc6b58603942eb139c1b576241ca8fab5bf1c457112bd80000000000000000000000000000000010c6f7551d758d1128add57b110227296e060074e4cb934132368f079a794770ff406fc7717867df0f461f5c9fe56960000000000000000000000000000000000048f88afaf6eee5039b76c0c5b4b49671f6fd04f38bdee1b1c8f347a9dd4e6aef387b742c8f9a8aa387ab4d01fe4267000000000000000000000000000000000e7be987d0411dd7138e47ac00f9f07c4737d93aac501edd16362ea5a633c9071a6bf542d4db540d75edecdedc3a8f0ca57b2c351a7946a20cbae1fd789ecc5f77376b09e911749831e9b5680185b15300000000000000000000000000000000056a29b523b0cf85ab04b0a496e078dba5529cb9699e567ca42f9ee3e3f07b61ae29b0ce17cad23131375f624a366157000000000000000000000000000000000acb91d1f057c7aec1f7561614a95f8db2252cc879bbc2595a5f607d8b0ecd6e6e3ec19849eacfca62d870b049ce84910000000000000000000000000000000010d9459e07178af8e125c2f66de699cfafb5f87a63454e24d0ed88b6c804a9ff204f146ecf4d6db62234ace0a944acb20000000000000000000000000000000007256a68e23b43a3b6475b3cf209ec108bac13631ca448cc860672c65c1760a8299fe941ed5bcbbbcf63a683e86806ae8fbff9f8ac4ad10718d46a857ba28f182263bf2d13c8b6a00902af737dea56160000000000000000000000000000000003e33b840426a6bbe15b23fceba829bda9a5ab89d37e60133874f61bf1b10e05d460bb5d228cb178cfae2a5f41035d32000000000000000000000000000000000a9c5460c6443364d9f9440d101d92a0037343789ca0aab6dffcc2bf81e1aed312299a21556d16e55b1398334d9061f00000000000000000000000000000000015db251708253f7de13a5eeae5aa76fec415ecee1ffd88d882580da5da8d9f96c6ff90d920b329096a103dd71e7cfa580000000000000000000000000000000014c3a004cb6ab8465e05d965dc720b37084d98de424b160062f225dd0b67a8e62ae11a3c7bacaa129a568f3a243357ebb061de16f4f609c6947733b58c6444fa9549721fd9a2459652e8e4b8c69b5d61000000000000000000000000000000000c8fecac8bee21d916cc47b96a66b7a522ef4fea76fcc86ec490ff44b46fc01ac0446e3885e36ae7ab62a409ccffcca60000000000000000000000000000000011676ccef54bb27ab7db0b5ec025a9d1f29217030f3686e71564fa011d9fb598f44a8bed3da8fa7fcd10d01e3f66d86500000000000000000000000000000000093aecb91956215980854c6f19120777983a160e16026560c8076bdc4372f53065f9fee0f5830ea192aa5637590a745100000000000000000000000000000000035d773ef15d8d99b600a6a575eefd661aacb49d6540639223a454594570d0f00ba37340b63a2c8a0d4e53ee7dc2dd91355ed5b57b28451ad98fbacd5ae87551b7304e4ef5cf7b7dc443a66432406f9a0000000000000000000000000000000007b2891e9cea2a464742c7f962deb1566c9d4f9e4e7cbee1912a72c5b064211c39801bf42bd888bc239e6b4ba71d700300000000000000000000000000000000169cf5e706dff2945145d5ac14bd5fc8f7e7c3e5f7ce733c865e1882d236926c71853efbea26e13efe4eb0d0e7ed5db6000000000000000000000000000000000de9ee19c4bc2fac36debd4c91317e54f57e761866b134ba9a0e84a8d268b11674110ee8f91aa8a6b80eabee2e5e75ae0000000000000000000000000000000016d91408a670e4ee43ab8e21cc341596709113950d22bdf5073cd90f520667699e94f64f76290f1bebfecfd80a9e051430b6eeb01874ff4b0fb07dc9f23d8e45455c1480eba7fb3033942214e85a7720000000000000000000000000000000001982744a15e8163a6f2ee681bf27a68996682216037d67d91993fbbe040e16ea21a9cb600fc6a40e7289185393544c3f000000000000000000000000000000001131d7dd5a5b96ac1f4c4aa210afe7af8d371cc16d32289aad38c93afcc1d3be53716f82e9d14ce6b1c833f7f5871ad00000000000000000000000000000000009adedaf19fb8823ec55b803c9509ad98217730bfc6424c8b69a071e99d026492e7c8c4a06509491a3bbe5893988c357000000000000000000000000000000000cc60733a783c7df76541daddef2245e6d2b694b94649b13c21aaffdce124c1cec3fd8ed5a5d4d4eff3115ac933e5df989a697a0e8d2cf512edd2a3c3df354eb30a3eaf697779dd9270234b367c2b5ff000000000000000000000000000000000b366a80247a8e3797f1c711aebd60c99ec7caffda34514a3716154e900f2387c46f87f81af036a383e3f9234bd1b50e0000000000000000000000000000000004608b7cea13d08724a2cac691e61255ea7472537f7ff59894d511af7fd99ad72f0a7406271576300a7d1d56aea17bdb00000000000000000000000000000000141abedc914d3d1ed587162acbfddde60f7dbc1ee5e07fdb5f3515b87d1a29024c9e19f24e4c0e3979bd938aa4e798270000000000000000000000000000000010e72c6c0510495dd2c4ecaf13c1c6404654e1be369d1ca485c76d8c2304d60d69b90c2e171f18bf55668232e747825820b72463d54ac1d8f1b3f56f0f98861768b05d5174cf1883dd8eb0410420d56200000000000000000000000000000000081d5a229481fd297363e8e217bf1f94a00f54eb6e8a3f95f4de30081bb2b9edd82d53cf287e37b459afabcb73fea1d1000000000000000000000000000000000ab55f52ff7dc578ae8267fe3fa09bdb8174dc30bb835cab9851dbee7a1aeba82e83e07d5e79aafb34643d9fc9a0d1c100000000000000000000000000000000195245c7a762776bc1e81d7111e3b814088f1e0e7d686c3ee3e500cd0a7ad4015851563a1b8b592e491e00078187c66e000000000000000000000000000000001850c1e8edb0d6dab973a9975833cffee8b5243654bc4ebe64972e423799283707f9ad343bfa86548cd2acbe04ede5da3de7997113708f9d092836c2b0b59abf710d8401baea6de73ee0689436f035fe00000000000000000000000000000000000007e9191fa9057cd7df8fb83d497ad774735c242bce9bd34cfd21d3f8f2a8e37d1f38b592a61ac8a8d22a4287fc5b0000000000000000000000000000000010e36db1460fa65ea229402f558397c6fc57e9c8a4b0b9e85d9ba938196bfeffc951587353cb7c7d84479f60c087e3660000000000000000000000000000000004d86938bebb850fea82acd336c3900b241757dd937f831dd909ce548325955f103dd57611c0b75bf71412a6ac3d6ed30000000000000000000000000000000013990c82583007b693c1d6271c1e5820d7274c4a729da21a76eccbf7abab1f2bdd6c5d26e78d51476ecf154e4fecd1b87fc3d0560432dbb721f8a0610f0db31dfdfea8cd5ebe8da3fe3b8ac5358dd4400000000000000000000000000000000009104610d5887fb7cf6a866584cae30cfeb00e1241083b017ccb82ddc9d72fdc0d2b1d227c22ff6d8497495f44828efc0000000000000000000000000000000002235f959b071f21fd63282fdbb46b1dec27cc193f3e9988def691c73dddd789b6a1adb977a68e2661fb41d62280f229000000000000000000000000000000000ccd46984208f183f0b70c9152c01fdb8ac078ad1d85f41e3a24819da321d9dd9321a8d70103282abe6d8b981447f202000000000000000000000000000000001711057042a54ca76b0c3e7f36f2fd49e339b76cbd2e053d93ec2838848d359865fdbbeb9e75e408b4b316d60ce2741ef0b271f02031a126f8632e30d8b17cc5b57de7b8b873e0971ff392d4246a40f400000000000000000000000000000000001481684941fea0f66c78faa40aeb4b5254bf78c44df7e37b191c095ff12fc94248acf01d2aac5637e9536e73a82c9f0000000000000000000000000000000016b72eff2830f49b24b1e1317c95143cda8bc11b9dc4a91ff22a24e0bc1a244c7215ab1040fcfbc292ab236ac73cbd3d0000000000000000000000000000000013535421771fdad616171f7348cdf32bea7486bf4d836b8b95c69b71ea9915c099e256287aa119af53cf6320ad86664f0000000000000000000000000000000019ba0f36dc556fcf09f0a4a6cee53de485d03d846af7afb792d16220551fb5a42a4261f936b008babc096e6f8f68b63af8b5c136aa5e2d670edcfb5bee9ff6095d85a332ad55763fe1e5e8babd145c070000000000000000000000000000000014b2da0add872d6e61253d6022559f668bf192b4aafe0acfbbf341ada55b404d42b2b31182c1ad50c73673494ea5b7d40000000000000000000000000000000018b76b74e9e6cda8466a354ff66baeb935b5645cf9eca81f4b7342f7914c9bf35c57be402458c09781e66a89cba6e67e0000000000000000000000000000000019bc8c1f32ce934b7ccae6d8ca39a263939585d8f94414c3880fc7bb5a0a27d728708e7ebc42c5a935f769adcfc083f6000000000000000000000000000000001636b62bbbe34bec06253887b78ad5b3ccda1bc5d8baafe450f2d1a8e07334ca79a40c5c4a50b58aaed96408749e6f68285193e7c10646a4601787edfad3d76e19d5b013a0a954873d92bd5293d325820000000000000000000000000000000013c0fd7a8441b6eb2dabfe8c152aa480015f81139c46440741f3da1c50d18c17526c47e8b8c2fbcfaefabbad5f8a0b000000000000000000000000000000000009da839802e7c6759a87eeae5a05146e1d226dd828d4ef6d908b4a0431008f352539f3abcd3e4c532a3d8204e350a8510000000000000000000000000000000014709634973e4554d2379e439d099e9be8bc7ef031b6ea36a7a85d2ff5090b0e0de7cc1c6b6a004465edcf868ef5fd5b00000000000000000000000000000000146779393d82bde1eaa6205e69907a0536c782fa7fc6e11e5e62ad5468f4422b3688f2ff4da2af396741ca5e0f97de3835bb2175fff61894ccbb69d90375df627e925f1ac430a349e75580dd39546e44000000000000000000000000000000000ddb7d0380370830803a7eda2e9b694af71381990f182b5d1223992abb5afe9531bbef8b9dba239f411fc422210fdc930000000000000000000000000000000018b685009d012d72193043d09f8968f9a41ce2fed598a20536fe54cb26db1733214add38f73148e754e632f6d78f524d000000000000000000000000000000000b967a7b4ed1bcd9f3da16584b08e0c28d967cebe7a07069abfb3bbce94d26b6d95d8a807879b24fb1f5ea00091d6dc300000000000000000000000000000000039349785fdb7d38707d8136e9a8f650c4491c50d7425388b75fe30da56147992c3d662f22131ba7173b2550e613477fa25856e5fb9547c48d41783bf2cd13493a1fd71e56b9c7e62af84a1f6cdae1c8000000000000000000000000000000000455d7799cc1c2af1e219b23e8683113fec126bad1dd7a441c5d113b064b552ccb1e7314dfed1b11f42a18acace706e50000000000000000000000000000000014d2400aa3e2270714b656bd755c4bba55866d6e313f619e10f94de6d82b5343ae9a9483dc10c1a72a5a21e619a20a8b000000000000000000000000000000000a6caa6cf8609d23b7873c908e5321d064a9c107b5492d296d04f92c308ee705229dfecb1f908bca0024ca56bc125126000000000000000000000000000000000b31c384423c84316f65e03ba9e01a8f626236f76e4df4b8ce2fa053c1c1e6a9b8f0afbc253db8c9c5e2ce9f9dcf05c71155c0b9c4185025310e8020eb52abb6f2f1780da15e4ba81f3c9a88ed1b4a6400000000000000000000000000000000097938bb53db8d0aeca3f2bc180039a5dc5269748e9cf065cd88e59b30733d527e54cdfa224e9690581e8c7f0881241b0000000000000000000000000000000002d52d97d4dd415fb18348f4de78c65e2933fc45d5e5e1d8f0f0ca1cd52885704ab12609b91d6d2d1ce13eecc7fa0c2d0000000000000000000000000000000018b926a37a8e0ad836846d06c03a9b84db795fdfe5f15d1fd3e0f8fef1b2825b29ee3a503ffb2f75765cca49c2b3d4cd00000000000000000000000000000000073bac093e958a3a09543e060c81b35b6598521a8685629f77200cdc73b372588e66c247097e7c03492c0943bfac4d6bc5610b2707ce84ce67e82d5c0e5f5cd2c90925aefc1e39468ca86475012df045", + "Expected": "000000000000000000000000000000000f79110c74f0e983f3d3618869af1d9b96dadba61f1d596294ef8a9412f946fa26cf63483528a57299dae48f85ada81e000000000000000000000000000000000e1a9cea3af1debcf7d6ef6f7b8566b5bb52d5548d4caf85925109228d7c9b50d65a1b24f089631e75a694f8e8dcaf040000000000000000000000000000000010efc1081f079e841eaa5a65cd7c945d4f37acc92c4ace9ae6c69a9a95d8cf569d604376b1c7e63558d022da90d269fd0000000000000000000000000000000010b7f55ffac8d57c89b664c36c20b2988a493de32f5a956c91b16ff67cb806298a59adcde12ead42d598b6ca3e1b94da", + "Name": "matter_g2_multiexp_30", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b139e5dddd53433362c49403838b3e2ecdd850a8df12d4dfacc0bb98f79d40966d62dfd0da1e721e7c0f298457d590000000000000000000000000000000000fa35e9c2e37bee1020ed99516174408ba2cf443fed115fe3a964ed86b5e5369e40291dbfbab477e339003ac85eb7405000000000000000000000000000000000e8fb87794860237066ed1b7ae7c2a783c48c52c2267f3e7295d1f17598b96232954e1eb6d6e80e716628f1db8afe48600000000000000000000000000000000083521e3a6d6e3f99570b747498520db5c89092b0077519c8421f9f41772c7a6e177c9cdca52f89a26c6036cadfafa8b32fac970e52778cc90396a5ba92ab98e26499eb1ff17d4bc4c1f78b64887d3f1000000000000000000000000000000000b1415e1dc2d4c1f5619b40e616d258867493d8624857e41d007f82ba8dc53f7ebb36d06f8348b94eedb794899e97df80000000000000000000000000000000001c01656fa47d62b4372361b80ea61501cfda47da5534e3e2aaa27b1e3c4de0bee0aa322e60c476fd4345340e5c00e130000000000000000000000000000000010caa407d9d265721d55f01dcfca52bde851ebd918e8fc4c752a41875940709c64599f36fae5e3ac7f211e1f67890d1c000000000000000000000000000000000b54a86474dd5f410290e4b4ac738fbba5e88c6debec17e38a52090b17ef371dc8feb0573e76c4b61d7688547a89f6a36583bac9672a77f2fe62bea4364aacf62d5e10eb3a757fa0595a81f76543e8630000000000000000000000000000000001649c78147fefa91100738e50034424244d22d8e1bb6a2bf471e4c9b29694a5c9476f4b129912bb09fece53aa87deeb00000000000000000000000000000000117a3e040c1f54b96c2435891a45fb9dd95774b5a55cfb306c22517e4ea72172332d893047f7eaa665fcc58dd21781f400000000000000000000000000000000105e8d80d46e6bab2bb9ce0525cbfc82e8b3320ee4a8b9c0086e21cf2b5895cb35abffedd1b5a9eef21f62a0a1dc48e8000000000000000000000000000000001437ee33abadc8ef6bfeca16c3edcf05480c3dd97db06e396e10d5180472f50074f43f9a031a04dcd11d803462fefadc5a8e1d77c9e42a187054c938a8a5b4bafa834021b727036ed3941b1c1deb9d030000000000000000000000000000000003b51b10efb54dbc2973e001f0bb634e36f689264484eb128de2882d6600a43ad548bc7d1def4541f0ed88a1fb37f3270000000000000000000000000000000009dd80dbfe6663ab04656856f192002593df9ef7f792dfa81f6a51c658c4c9ce5586a5edaffefd507f51ccb7e8c8101500000000000000000000000000000000144160d5ca6b2ad626e6a3424ff5139adadd3319940afa9bff7dc409ac1fc3775d5413ef4612b27fd22c02c1fe57bb86000000000000000000000000000000000e375ff490a626dd1d933a5c751c88cbd61803986fa8dc089ccbdeaa0a922758afbcdc30d29268fe0a34b7b79d0f76c139c02150e4e89b25563985c7802c0c43d00c721d521b54e767c1f509f584bf2b000000000000000000000000000000000997ade20fe9c0d3eb79e61a66a5c272d02af668b0f3c8201a1ea071737f3d2ee3b0764f859480e95be75ab8845b407f0000000000000000000000000000000003215194b6a363d31ece09b18700479e6093fa3472a23ef0133e3dce60a3d56b6fa984b900162c4ad56a6899aacf35c3000000000000000000000000000000001647647bbc399f40124c43510469cf613732d0919e22b478b2603d7553927584cd4b3a407e3ec6387c4a93e9e5373178000000000000000000000000000000000bacc8afdd70e927e21521b3f62264ad4f22adbc872439ff851d3d169a1c79a0d02bca2aabaa0b9941ab1c71d092fac12196ec0e9d2f572856217521fcc5e2869f16d5ec5fe76f7d350698f55ff0c565000000000000000000000000000000000b0c5981bf6ef5b85bbc504fb0196ba442fe87302346688165aa7df8cf2642548760e11daf5b3fe2e37b43379afbfd4a000000000000000000000000000000001086828b9560aaee5e28bcb50db8153c40e632b18c61ed4105bb7f472b6a69ddd8a2836f6605102931ee66b2f07e441f000000000000000000000000000000000f4d7aa3d1a281af6f8afb3d886774f4e4a64490232f63dbe16e3b8c4f626e9d07f7c668d09cadab3c92d6fe852427af000000000000000000000000000000000d92ea3318779b532cd81c9be44b1abb179a8411319a6f8fbd7e3f158bc970917d3e0b25f3f3f6c8e0764011f9bab0398df5017c9c35604f061a7095d976d08bb3570ef8fb518cb606cd39a3060157ab0000000000000000000000000000000000dbd83910f304d0fb2b6d8619c3a308c719f6454a357d9ced03b2882a50692c06cda7f4331f54eb293ed5aa079121fb00000000000000000000000000000000019c33ec829367dfd2610ccef9842ffaa5e4f35809657c22134fb09b024e07949d8370ba8ba1e9149060e9bd3babc19c000000000000000000000000000000000ac468b42925d2daacb8574d40064d393caa643f08767d20e72ac0fad1447a64d8743523312f3a91a118d3e51e1f52d7000000000000000000000000000000000202d1971fef2938cfd10bef5900b91cc4811939f66f1f5578a8ae0eacb2538d2a51c1e025449e1637b5173ab7fa3b6f7b82e7e565f8a521d1a9d0ecafc029f76b70042e1ec36c20e3789b49c7e50ef00000000000000000000000000000000008b6709123b9bd501360fa463dd08076c59177dc0e8035c49fa2f541eef3831e4c584c5a9410c68999dddda6c86fd9d5000000000000000000000000000000000fb94eb34355c636dca909cfa71f52471217b9bc241cd3e98907d4a5c7eb67d5bc9cdb0c73c1369d7950a014fe6069fc0000000000000000000000000000000002e2ee515a5dc96a664bb1f862f21a8d3b7f903fb87f6dac41c3541f3d83633f351ba8dc4661607d24b912dd1ab097da0000000000000000000000000000000008bee545e00e3fc283185a85511e09fd0253e191f52d5c0b440b10228041800c013db3c9322a835e4927c0ae0b21bc1e8260c1b7a249ba215f0dc127a41876f858b20f4422140bb7695c8f98e4c474d00000000000000000000000000000000006ba635e74538748c29aa7c5690a0530f2b1970554598a432d4ea6d2713a4d26786b6e80f67b2f39e218b19323654ea200000000000000000000000000000000133ca9e5e0d4a8200d3522d8e87dec3c72edc1cf16b7305af4abd466aa7a0e30159388d34c36ea030450ef45b7940ec20000000000000000000000000000000004724239afc773688ea92296bae8845f20793c05807a18d6f35f03bef295da06f8ac9dff438b720dbea7ea93f3ea9c4500000000000000000000000000000000149c12922fd69e1960274a8b91384e929fb354936c020911495e6e3c49faf16899ec0c6e87713ee2f0149bf808ac8abfcd68d2b074d038ee0d9887168dc16805ed55df26329a4c0e062c2124a6e5066700000000000000000000000000000000148a4fe6ca67b6c785d5d8a784d5e68fcd2bd08294ca37f296b6426433b805507b554eb9f0fadfa9d293e8cdb8547d4c0000000000000000000000000000000003700600c2b7bfea54801ac95ff7a2c069bace31ceadab2947a0641462089fb43f0b9697acc005a23007a923ffe97360000000000000000000000000000000001705a769ce3c9a7a91283e4068c602d85808980d6fb457345a5f9b2499ff8fb3ec8383049b9b7cae96bd2ac6106a07fd00000000000000000000000000000000052b1f4e8a48a5eb2b2580614c656393819b4f0ffea874be899e4964c7e32d54757f2d48ca7b50e47e8bf6d6ab8ee7572a40c2e796148ed1c539b0584b90cb386844fdcde5d3766cbfb1d1b58626fcd10000000000000000000000000000000012ff8ba50d587765e68f95d276e364c8c40c00b55abc929f9ec240985269eb096dd3cef5826cf6269ecf54bc67773510000000000000000000000000000000000959492d74cb34c8c9ca4a21ddee97df99c8a6e627db3ef72200f39e0402d56f0a9709596189c80aa3aa50793e0f1a68000000000000000000000000000000000f7e5dbe884597054d6dc5e80bf4d0d333025bddebc1fdb1d61482cf15bcb4c8a95ea29cdd0925b5b816cc0bb307387200000000000000000000000000000000194e940c041d71f43ffaa51fbb31eb63c23559069b42dbf8777f35eddf14edbc3f7762c7b354174a584507ad714948234a1e176fb26983e549aefff9aeb220f50e071222073422dc2c44abd85528ee2800000000000000000000000000000000101a8e54d1fc2357df60b0ef8872b729295218f29ff63f7a7b6a70b3ecdbfc6809eaa8dc1f62a664b9987e8e86154c6c0000000000000000000000000000000015b5ddd012b42e1a600d738e05b551d91e7fcf3cb36018ceda9b689b92022224990c11a6fa0b421d5610b7e59b7463c30000000000000000000000000000000016130be17fceab55387d43179cd943c85ce1ff1881c07c937b2cc0645ec9ebaf0e10718ec7fe0d720f49bed2b8caf15b0000000000000000000000000000000017d73650680856bc11619e6acc139e137f0a06476f5f8979b5ba7fb8123d85916915da60d1f2e8c84197eef518b350c2a62e07bb97ca3805ba2d30f39f44e70a7b2917889c26b84bac8f9739bdf764090000000000000000000000000000000007d26bf37a97d532ec93a3eac00d9d39b064ecd172ebd5e18228b1601eb7a2c272aff9d88d63781b4a587c2c8582eec4000000000000000000000000000000000108000e850bfbfb02d7acef97592e15ca721334eb51197511b0eb2bd3bb647fc8f07713487b0a0bedbafb106992de4b000000000000000000000000000000001868c0b2ba732731f7536851f8005e8bae7b16545b39190251eb2bf93dedbf0803a42ec24cebd151998b690c38c0346c0000000000000000000000000000000016faafe909a1f926333b12f5463231a71058aec31d73893687d3169c4c3588436f6178447eed307b642490199c507d63a14278fe7a08174660c08323de272b2110047a1d1d8bd0e3c7d76dde030e00a6000000000000000000000000000000000331338cbaeb8e304fbb9257bb80aff5d3e043d07dbc476dec2795347e4c25248caad06ad14f56183d2b6276c49ff98700000000000000000000000000000000167e9578304a1162de73914b02791468e14faa2e0f161aa57818b8a169b5933dfcab787ec0f4b23737011163dcaa02750000000000000000000000000000000010aadfd5cc781e73c31f2fb64e7981b2e28614aa18dc7b2d96d2bb4ed8c2ee9089d6ebe0cf85479b272cb049e934739900000000000000000000000000000000128d7ea54f338064cd2f041f42a1a1e77d8b9be4ee55f568786a36f87f965d8142207e518798061eb3e32fe3b0f1541d1f516ab5b36a59e6300a54d17363ffebba35fa0c64cadb21e541af5078545b400000000000000000000000000000000004539f22654b3182d4fda5ab8d4bce6f1268d4e402b6c29a4cdff3b5abe0618d33db55ccd1ff12b27b2cb0196ac53e0600000000000000000000000000000000177e80ab6aa8512cc9e4d65b06b2bd76e33bef9038cdc1ab97fbb9d896ae2ad884ea16407490653dbe972b14e9c30c0b000000000000000000000000000000000c280a4431e41df6515979a694ce292f220278178f7f36e23c8a4cb2b8a7ebc520901ebe34c72a26b2c8a60aa1a155100000000000000000000000000000000006a0b80538a6c8093f3655905af1c59c235567d22192758c28dad1b715045189a412e4c1edc26e1d8ac95a584277709b3bcdb23f9568e409271b5f907fd64b0cd81939a52a6db38fd8d95de76213f7b5000000000000000000000000000000000eb091007672a212dc4937b314576963d7561657cf1103820ce9bc34e4d46c24f4891a4a4ada648f8cdd2c30f670b86200000000000000000000000000000000166389a37e6e3c02317d68d54f29cc98d1d1df5853940555161d71df791cd92c483eaad87dc0e765b12408d6ac344f31000000000000000000000000000000000affd0d5734cbc27b192c0c0e464db48d3d76799d2c6a493b172127ef2df6ea18a33898828effeeaceb7a203e35ca41800000000000000000000000000000000155708b9756752c9b44048c91d71970fd2cf2a4cae6b0baec00629c81387c8261150e78f856093d81e816be6403f1ee91b716b02b3e94600867e019be166f4532d264e0aa65d723dc0e117aded59245d", + "Expected": "0000000000000000000000000000000007ceeb14945414d96088a7900c1120ff182b2a93b09943c2fd1dc2b0b223f684b0d4c0b1b5803502582f2daf16d81d2d0000000000000000000000000000000008df450fb25534fdc456a8f41cc143a84729ccb082aaa2243c8f37e34a6670f5195750f8547444c49f7a898aa8567d980000000000000000000000000000000008c12d360078d5645b0e095c90d4fd37eb20f0ebbc6fa93fa5beda7e7c78eecc06e0d839268e2c303422ab1769402e0b0000000000000000000000000000000002bd594a21153d7c458b9f804050d05caf2d90bbf9d18def79eb8148b7f89e3a3ac21f84b87fd13c39df5b91cf73460d", + "Name": "matter_g2_multiexp_31", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003e06e2dcfbd695e9bda0baee1276ceab637fd1fbe2d2d6458c923c35b00edc7edf4f9e797aea59ff8cfceada0615a02000000000000000000000000000000000a04a2ed5e42fac7f064b43d64151a6c517ecf22dbc7563a3e9f35f555a9992fe45cf6a728ba94607df7c96f7e0a334b00000000000000000000000000000000090fac97f9f524168bc930d26ea1627ceaf187398d6bfc5a019c8467d75cd31a41c7eb9fda35fc85bd92b4cfca92dbff000000000000000000000000000000000f37b91dc935c28668c27d38328a511148c1739b65f2816dc53e42a8f059c9b2be7417a6f97c9a2597b1a0f06b7afc65bcfdf0495e49dbb8a8f9a0dc517351f39a6d823dcd42715f329dc78400bd74fc00000000000000000000000000000000090b834a587521729426d5b134c6058bf7999f4d4bcc0812e8d8b3ebb050961321b5e93356e87171a6f12160749394ee000000000000000000000000000000000cd5148c7eeac4aaea4288b38a02b5a901a6e2805e2b1695ed98ed86cfa0d259d87b65bf3cc9d00b8548100a60a371d200000000000000000000000000000000026db1079b85411dea0b9fca383956af50b938a465f35347605c01f3b72b297630ee2fb5252da20ee0d8ba5071974ed70000000000000000000000000000000012ae26c193e02d7ae4a7a01181551085dec9fbcac811c45d5cef19abf736ca2514e1259811970af5913891abe22a75ecf095238bcee61ec1317c0f98ad4f8f9b39c5940cf37a8a3a676787d9dda99438000000000000000000000000000000000ed5d8a609aa4f3c65a89b8dbc9334bd3cec6c7763bff298acd6c260e4d3bec0088e15c5d82618571d13b74a2031eff1000000000000000000000000000000000c28f92f018e6f822912b6eccfab37432ab0ab9acab751f848401791bd2f16e32ac6d97948bd8a0bed2ddc1917f0db3b0000000000000000000000000000000014083be2539d914883172cdc70950512dfe7be8893b1ecf085d837c2e9ba7f03656c5a0e15373e04d300869620eb66d00000000000000000000000000000000002561b77cc2658c54d29f8d1988dd7448f59c80c02ee9256404d8ef5536ee50104cbc11b6ee1ab9ccbf0ca55e53c52aae45a6d64cac817cd479a501c77b6720c6777c6026dbee471b490fee9f242a6700000000000000000000000000000000000fff05aea33a9d1e8f7b227c80ae87c9e7589ba2804904b7d8386b24b0e5324e718f29531251969a972870a30c310630000000000000000000000000000000016ecb8f27a369df13e122c981e7ae37882b36d5492fccbc86d606aa1198f3e4ee7bb7ad0555e11949e6c1783d8f4cda100000000000000000000000000000000187f425b675cb12719a01ee3b78ea73d88f70805f72d6cabef6372ccb9d99008bdd7da54f155454c4c59f041deec86f800000000000000000000000000000000151c272d5cb67b3f801e103ee901deb4b3d3bef76ee4e1b2ce1b5e663ed292845ba012c732d38f9209f82e77f1f73cf354868215022673de608cb43a3cb74ef2073ffff34c54fbb43f19b22a02bcc2ad000000000000000000000000000000001791bd59815309f2aeb7b07df8afd89a288eb6f19c7e613f394353ac5398267e1388c97b17d83104446e57f94581a79c00000000000000000000000000000000154cc72ada5a9c99dea06ebec143a14271cf332b57c631725ab30e2d308d6b688ca08a79efb6fce632cb1216ac3d077e0000000000000000000000000000000012b4c6fe8c17274ef57539563a736c2f83c4cb473e9d075a976e18e193255057340f45de373c7d6e3fe5e08ad0dd97d20000000000000000000000000000000005aef16e11bd4e7787bd5ab4427276ecdf9c6c134b9fdb2ec39e87ae4a5b3b674b5ceee29bcdf804ebd7e83960d8d7ef7068c3ba82e52fce0223a9f28c1d42681c7863c94797d1786c1adbc3e6d10dbb0000000000000000000000000000000008e57f905fa202c7640500746b590791cf9d0f160a77e5eaa5a30280e513e8e801c4b6b04cc3f80d9403388571d180ba000000000000000000000000000000000da3c128ae234bc27824062832ac10aa9cd4978f37855a8b4cde3822f5b485fddb9a475a9805e795519d7f138a8199cf0000000000000000000000000000000000ec11b7e07710161fc557a56e04337f71aaa1a0f070cd84525965e53a1fe445c91ac07c618ec349997890ae893c165d000000000000000000000000000000000406b0eafbb8782d11f5dae2f6214282252af9ae9ebc5c17a81d4ddded40f05d0b534d14019bcb6cf4e49c4c182b90f00042b8005283c7b91ef4b3ff7e20a91349c8c3d1301c9b54b901e8348a7d186e000000000000000000000000000000000b1d456e66671dfa72ef3a56523eb939146226111fdbbeb697983928aebd5f50b0518db841a3d48912a7a780785c1f180000000000000000000000000000000007a15b2253496b78d270dd55b80bff90583a95283a89d40f6df71fadce56d103f0d365fe79256fa4f93b2d2bf4c06a2e0000000000000000000000000000000010829223166d38fd2c3041dd5643c9784da366a2ea8cbb3abdffb5fe43e975318c86de0ac9ec77c0126ee75bd209f7300000000000000000000000000000000004b124018e83e1e5e77bad42eb831798d450f8ff4a79c9b14f67f080047c491fbba45db79b2cf6015188f9fa6329e8be0a3eb64ce8fe140d94956b0685f91a5462dba1a90093e803dc617559a66d20da0000000000000000000000000000000011119be42b90c7857079a51695dd5be08e59374b0d1c7e12d0ffe870202e1f0c62bff84c9691679a82e610e788b7b5e1000000000000000000000000000000000c7a64524c5dd1bf10d16da7f15b39d05c9ee1620d4dcae79c60316a1f522b238e7934d1be897a441d0c8e621b67d44c0000000000000000000000000000000013045613a090d05d07310865d977c8e0bb1caa713b2249d6676e7cfd6f4e3ba8e667deabf9fdf7fd527685f7d251b178000000000000000000000000000000000dfee7f8259701b5726b6439a7ce77b92245499906502c7dfb384e29cafea61f3b1f21fcd7888231569ebf29d3035a61ec88ed0eac8d0f2f618530e91cdb9ea36b8d56c1001a6792a09e11ff65fc02aa0000000000000000000000000000000006d77669207bb2d064824cb56fc786c631936d30db630be3c08e18d7e95b1c26e2d4e7b2eddc2f946fba6e99acb2198a00000000000000000000000000000000168bd8f291f8bcdf8b5e9fa915f7f24856a62803bbbeb9bc38384149008d4e3129338035061631f1fbaceeccfaeef4a700000000000000000000000000000000146bf2dedc262557dec2b4545c94a37434e20e4900b1693e8fa9bda9a94dbd07e0a3bee5f3bedfa42148791f4951db7500000000000000000000000000000000138467700fd5088c76af2f77fea4b746f98701fc0578571997b0ac2fc343354ddc8b2dc57d5298dd4daf767573d8bd3d5f03e53ff983fe4886a3dfc03a353fb77927d7a0d1998a1c55ca7421a4bdac6f000000000000000000000000000000001536da0df7c91687339fc93608eb404c5f46adf4b9122b99b1e5cee0012e27ddf30934d8f669bd39091f8673aa3b3c490000000000000000000000000000000002deaa8f9349e7c551e39751b1454a00f8f7896d63110e8e42607e8023ae3070c4abc9885ed54ee37a82f6e5c68451e900000000000000000000000000000000079a62eb17f7b07d4117956d3dab5d16a7f90e98948d5c3caa124fcf755c73f060a90d002cf880f5246a87342717b4dd0000000000000000000000000000000001246f0f3ec2af7c0250ae14cc67b5a1d42309f06c6f47b89178ff7534c47e8413a26a43f27454c0f946c66634563d41cc1b04dc356bd348211ccc4c50d12cb382660a4f9526539c2a0c52b021ed216500000000000000000000000000000000046e4a08785de985c66c7417f9262d363b9acee07e250999a4a7124f101ec4d82e3e4b2b0d9736471329fd61d0cff13b0000000000000000000000000000000017bf1e20ac181780ced62a18c78b378fc0dad157cf30d6026680560b681f5755183bd30b4e454764c08edb93297590b5000000000000000000000000000000000a57cbe93254bb0796eafc0a57330e38bfca37f8b94c4d21ba656e5616239e1e18ba6d632c0129d30291736fe37a4ac90000000000000000000000000000000007f31df7dbe9abe15f4024d8f6bed93c92ff5bfbd7835e08e870eb1bc4a6f62b3809b922c6d5a7350e2e5a978c80a67397b584ee05c27d45390aba36772ed49d571837567e95f1fd3ba3fc1ba5916727000000000000000000000000000000001577abdf6e915c9c3b3fa50a4601709cd629397f2f91784528e4cdbb140065fc2a6ee3830983dcfd49a928e78cf530aa000000000000000000000000000000000d6f98df9e41009837cbb05bc3e3340d38e56a448fe396bd48acf03f061e7489d1402b36a84b3c56eb859437e9c406f1000000000000000000000000000000001912afae5361c3d8c6141755deeef26d1fadf6b0036b9d05b2e0c4d50f42328741f0423ac772fc66dbc922bd4a837ac40000000000000000000000000000000000616661f049b5c784ba05334b2931509e1e033bd203fe17f04cfe12e80e73eb7075beac9d379fc1c457bea1b6adf365752542cd551cafc5d50852526ba0a23d274317e1e4a6e75c0d19319e5853b8b6000000000000000000000000000000000f98fed7e4d67a513c746d2fb188597a605165d5d299072aad6d621e077845f93804d575a5796bfa726f529dbd90e014000000000000000000000000000000000adb2d0b6c02e4e8fcab11c7c8819e87f73aab673ff9dbc5c50fee751bc7a6a8d386c8f9fa830b5545f94a73ce6e1f1f000000000000000000000000000000000f08e05ac40655cf59ee3ea9f10fc900315c6f06ffd3b80853560559f580ecdd65aba5ba660c729e0bb9576eee3703710000000000000000000000000000000009da46469f4b8fcd8d2b016e96f6e6582fb01c75407c36c7f87b4a1cd8f08ad06e962a0ec2138ed6fabaa1cb0115f97e2f76a0fa585828f79553fbf3baac6a2776b782de66dedd6b734f9342e734ee3000000000000000000000000000000000047b45ad2ad4f7b5b72194f98b98b2150b5d73a9df2aeb2377beed9a1275a882fa2d849037ddb56af632489f892a48a7000000000000000000000000000000000e1b0d9b52c0c5324067857ba4701f5f20eec165be418871fc0f0adbc3a0bbdce5a33277a33b79013109b81e006c621400000000000000000000000000000000179c471e01e340d8e6fc0f737ec09f0180bd2dd2a86d0817f753d1e9a9f8cb18178e9de68c596dc6a824e6c3c151d8b80000000000000000000000000000000019405c1e571a9b200ff2949aa74647dae59d92a8669d4876ba23f1b4a12a1f9412412503c68acbd619cae3ff056bd346f638e6a70917c89811851109296a7225f9c7c5b3d7fe6d6ba6c7d1ee77db4458000000000000000000000000000000000ca8566b9bd088c471fd33fb7b1bf760ee12cc8b0cfa9ad92b45012cafef5c0772d9bd3bd9b266d6c3e3890c8f00057300000000000000000000000000000000055789839e786ecee7fb7d10f3876359fcc1bd6f2c5cf25c8337aff7fdeec9b43ffbe932cc4936bb708571a59e4339990000000000000000000000000000000013cf827bd57d8179d105f34c147665a072714ccbc114aa4e878d04ce66ca78bdabdc4867b3968c75dead147257197c6a0000000000000000000000000000000014a8dc5ac1858442ca627eaa194e1ba64091b5f9ace551338d770c92fb49ee12449dc200c8c35d70f9e0652b4d9b90da1c4ac944341dc68fee586d221db2a8167e833f18f012afa7c3844def6dfb26bc000000000000000000000000000000001124ea2b97a6d73c81387a51e814b9bdc951a773db2a32d50691be60f1d397cd4aadd9b06e4f49c32b12254e9f824fe80000000000000000000000000000000014cb365e9780feeeff3548f34a56548302ae0dc73402c40317fc819969ee9c4ea2a181381b94f82dd97a236671b456a000000000000000000000000000000000064b769c4b785d45472038aeeebd3ba9b28b3132d72023640ab2d7512cc6e31296c5330be5653ad6902e4e15e57e2c3e0000000000000000000000000000000014c7bfb1f142d69c17f73e23011aee0063a97a99d982d25ff72791a65c7a68941a80fc216cea8a49f3df2d0748b1f95db0eedaee9347b10ab7b346fbc16c10cc9db486f561f88b756c269ebbba23a7f4", + "Expected": "000000000000000000000000000000000fb1227806c750e0eec0b865daaaf51afb74a88589d1c035c60dc1913f05c8ab18de24903ea876fda27b97a5eaa2fd7c0000000000000000000000000000000019903e1341f0285658164f9273b5c958060bf836264502b9dc298f75d4104d7a43b8d5dc0bb934a506ce1273ba839d830000000000000000000000000000000006e791347b54057195189e8b9f10fd42d170f37d455c0af5e92cc6a12e2c23990253be6855f4be6c84a708852c19a6f90000000000000000000000000000000005b72c361dca430fb2414b9d5a326cef8b77cfe5310153d6994dc1f8b9e74e8fbb43079e21956f428ed8aa48d6897e32", + "Name": "matter_g2_multiexp_32", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000052acff88605f33a0cf1201e8101c95ca0befd443c087265821a7d954917a026d41ab24d29bdfd972bb52ff4ad6de14c000000000000000000000000000000000e134b2aac3f6270e43afd994302426796b1e362031638fe0263c0ec212b828a30d8321af34ef7bf260652150cf2293b000000000000000000000000000000000d6628f675008099e9a75e1294803e86417ab22670d36316798680289ae61a26821693f2f9efc8468721a1097c3bceb20000000000000000000000000000000006d66ffad1a2e0f39488fd3f6e0214c9407528c8bfb8d1ebe6d75596a3e3cc844d00fdf46ce7ff6cd6d67732874a24a484adc8cfd2e42abc2f0e0d7e9c4b378f73731905760bfeeef01c94f8d5c3cacd000000000000000000000000000000001160bf0f7f2915cfc64e12a5a91b7e2aac78d4c2ce362e7677dd0e9c0172b37fd1b52222a13c65819b87593ee32a9ba6000000000000000000000000000000000c8be2cbbd302b31b1ab6dcbeb57b4ad428447bca9159fdfd007f5375218d121673a010f2c7fdf83fb45883458fb068e000000000000000000000000000000000363d3d492e6e6901756bac13b5c32d55aabbedde878115aa41b57d27b49a0f017a61fc90b13a20e009989374b82f5dd0000000000000000000000000000000009302fc26e6d750ff9441d7471903cc296b320128de71f86c4eacc80ce0725e8eea6acd2af056abde2f61e0a349f9bb5bbd5d4a15998d733326ce23cced86ec5d5b410c29ee98a4de19f2662c3933dd1000000000000000000000000000000000b12aca17efc103cad500b3d773e43cb24df6be651963c0f30bca489f1dd7911ffc7204fcaa4511e161c6f75da4a5ff600000000000000000000000000000000179a36e9292d3f78a5fecbec1175f001bd4ac0ff3610f596aacdba29a12ea4844885a7c465e66d3883c7fc99d4a7e06a0000000000000000000000000000000016bfd0758b31f54f90eb8562bb693c45a92a297a3d302279c9e3cb8263efc0f31579a3af8e8f5a091d9a6a36776f445d00000000000000000000000000000000020f6c66fa554a5cb610ab05d194e7583e6798a113b8fff336c986f7358bb9fa6a7aab0b04be9b5c44a6fcfdd21999e83717aadf16301a9c8741d65c86ad7f849101e30b7b1a344643b100a8582a6ad10000000000000000000000000000000004bf40c1d2d3574ad7fe128ee376364591b6f647f939b0b556ac3fdb5a92873f17c007e926b8a39a97c814728f355bfa000000000000000000000000000000000b8669e10e0a538a421b717287455620b82574b96ed09f64db444ec73a67a3227503e1b4fd6869314214071399eeae0b0000000000000000000000000000000006ddea4adb703d7205b6d2af436b41b4bde3a8c5dbed9dd161c9b3b466ebf06beced64fca25c3bbb97f232315daa5565000000000000000000000000000000000d97248a25ddf0ebd0200c6abbcac9ecd9775cfc5ec8da91634e77488bb592e5ff277a9607fe721990f403dd73f746e622788b3597da7b9b106203dd0ea97527aa8f5149754bbb0c10bb6eca8a46d94000000000000000000000000000000000135bc4f28663a6d7d995f6b876ffb8e6ef1d2d0f232388aa5f390c57e8c48cb84d370ebc4bc267eae4466a019c9ed56e0000000000000000000000000000000008b6a9d13dd9d7014df6acb59f80b335a751fa2ba4dce63467aed18f68358f5cb743718112b3cb2d0b5add34bb6989000000000000000000000000000000000013a5389dba4da195f34fbe798b254403f0bc5632ed98bd6017ef24fff33640ae493c1bb7a77a0d3c97649230e455eb51000000000000000000000000000000000a69803a4cc237ddfebc51df2d90fa1ad03359f9635ac1646bc942546575d1558f5f2c3010f6e2207849ee697be41d093c21276fc1371060c226424eb9886de6897b15b075fc5a51aab4710e9dddd384000000000000000000000000000000001939c2431f8ac4ab19d2735f122c0424af2ef18c0028e155611237e86648bf1d74fcba3008f5c6aa30feb5d4a14a3f3f00000000000000000000000000000000174473eedb54aafc522973244ec2feb3f7e95e50a1e996d1100c8da4fa59428c280f76e9e7364906662c4d2802235aa5000000000000000000000000000000001021d15f8ae2f62dfd3862944bf3be88d86d8113f4be22544ae5e925d450044279c5bfa1bfca44cd5934b42a27096b510000000000000000000000000000000015e0f20efae92e1fe8dea2222ce808a7de9e9e861c333db139f8ac11d7c4fa9ae6e49f51095f6e16bc738dc6d094b4cfccbce4e92cf377f67244995badc72db0b80fe37c9b7d443595156fa41abea17a0000000000000000000000000000000012d70691721f5787ea2e2a652f9c65edaf763637f95c285a62d32dded18579b7257493e01eda19631d00ecdd4e27a9ff0000000000000000000000000000000014da9ef6076e646e7d5b52d1803d3a6d897664851c6de2a9b330e48695737e05f0369224c3eb357bf557625bb94e6ea2000000000000000000000000000000001554f68124a91be5b9f325394db23ed5db8f6c46eb46cb50e57947bae00819b151afbf4ab4949290ad41625499f42dc00000000000000000000000000000000009fc0d459e28cd1239d227e1d2f7d530b9d14ce5638cd308569300a791c997a51dd5a98aad703239a23cfe7cef7f47f6ff79345f31c107841ae388f6cf116d10bc696aec4933de56bb9affe7e20c649f000000000000000000000000000000000452580d6a37a07038ce3564a12c1c7391fdb002cf27a6df7e194b38f3c12a3026f2a8acfe5e634cf89140da256d0a420000000000000000000000000000000004b73c9a4f9d41b8b84e53de538e4b15198f50247e75c274c14f136d7d91dce4a62c5346bf11a105f035e29ccac3dbb70000000000000000000000000000000008a8a3b2705a82b551f8913853f682253e7f1f68c8e42f349337f4f1eaa5103f59430af0c4a124b6a739bf88298c5f6f0000000000000000000000000000000012f4220609899e8610809bb3a4da46e0688c285ba2e8750b4bf44a849cf15fbf5c016e8e8f9372239bb562e7f38916e921cf773387d5351aeab99971eaa3b207fa6a318ad60f1c3e16b7f68251f9c910000000000000000000000000000000001884558e709635c046bd6ea8872bda936ba4d5ebcf7a0208cd0a4ee08b69f36dd2e136ce655ddfd89a5b1cf8e48f5ef7000000000000000000000000000000001357e2dd9fb603e5190d7b7ee105668bca2ed23ec6a248aa71aa430c2b2755747b8dfa3b147eb51ea644bf0354a61ba000000000000000000000000000000000009b0b0a76c6980e62e4893157b85f59345e1ac81e1aad1e48acec44c4803e2a9080f0d193fb799e0277ae6f1058839e0000000000000000000000000000000014c984ae4ef5d9d319fc89895f34a7db02747f57b206b0b30e8c9757d4b47419e6c0c8378fdec5aba364936a3b1922ca2d69cfed6bb2d33fedcbd215dd4e9632a3cf86a4b2716406305f6a85e6090a050000000000000000000000000000000003e1bbb872db172a1fa615155f81aa75ee9760f8602e4135ef9f1640b7f9d54bda911a220d211dc4bb767bc2b5e6e23e0000000000000000000000000000000008464f23cf693b1d4545b6ce4aecdc8fd182cfb288c5ddb1f78ca578e9b16342c8178d886cbb6b8086c0fd1318c4ae09000000000000000000000000000000000af574c4d0fd86087e23daf6d9ce98765e1e445ef9152dbd68152fa4833ada0be440de4abfe7c07dbd4ee67f1a4aec9a000000000000000000000000000000000a8227b982f9286b03c4d49766687622206213d88cde007360df9b4ca5916c44ce44dbe6443577998b4b0d527d22593379cabae288f8a9a8cd54523c20825b8fb07886bbf0ba0c5c807956f268af4fa10000000000000000000000000000000012e31070a501a7df7be43dc23e23dafa32ebfbc10ffb4c53f5d36bab2af69db5a05ad64b9ed116560e40b71f9217189b0000000000000000000000000000000011cbcd38ec3c6a6d49df6a8d6e1029a0412b42bd3fe8b42ed625adeb5a2f631e97bfad302de82ae34f715962b5ba0289000000000000000000000000000000001019b1b619fde9fb885d3c5f03a4373358107af7509754ce1ab2deb67df536d05e07ca7d60d927c15b549502750054f90000000000000000000000000000000018f1768b7140484105cf3ad2daa7c565e18eaba834db3f6bdfc9ee37445f2d6f7dc2b4c986b7efd5373224d2c92aa5a81973977d8e8c592f9063c5a14a658990f9c3405643089eb58324cd3f05b5b5e4000000000000000000000000000000001847b14146cfa2e1700f368f414b6a66ccaa02ca2a90b40a8e2be2ee4eb66af77ba563d7507de63362fb18426b6149610000000000000000000000000000000005c028d2b344ccb6400b53134bd179028b8774000ace89369bc655bb9dcd1643aaeec830407ee941df5432ba27987e8f000000000000000000000000000000000c4a680e2157dbdb53ae761209d505b4cf6b18fef5aff1c5009ab41295e0ce2ca23bd7a4f983fb9d085e1d0dbc75ffe40000000000000000000000000000000013c0cc77a5d771f1df99d1530e65ba782604c1ecf67d08572609de9f18405b9b817c2643226cdc7c9ad35beebf87dab0a610bfd375a7b8d0b034c17c8fa27d4366b06c681131fa7daaeeeb08e25c2ca60000000000000000000000000000000009f32f2f83c21875963818872d243cc8c70b75234f53490eccffbf060cb3b9c53545c1c32025b271514f500b20b00ec10000000000000000000000000000000002491b571087a9e89dbdd039ccd2c37d5d8d25587495b2d7b0066e9dcca02d44b2c134b0128a9a1527396729f069df83000000000000000000000000000000000264e9c47f72b639597de8f26a42ca7d77324f8c0db705986fc3b40dfb46f47764b69c70037a68d76a5de49a278779a100000000000000000000000000000000090614b3bb302ed9fb78b8756524fb78d54a4390b27136087181342571f994b1a93faee28256d765a8ff4f448cc357c199ffe1dc2d7526338462860501d75380a5ed9d53e675125342afb6652a97437b0000000000000000000000000000000012c716ddf17fca0d974e8d6003d99aa90f06b201fd141c74d8fdf1167030d14dc732917d3c6f736c68fbde9df50c098a0000000000000000000000000000000000261ef2b47de8e1576aecc6e19ececf80ddc1f4e28b2ff27953a65199f65a6211db7326632cfe04d543895c727ef8b600000000000000000000000000000000044fd6b9b4a1bacb8b7d4c53c106b025ae78f17c3baebbccca4e18cfbdbcbf8b3ef88ed5bd9bb36d9aea9e24f4117e760000000000000000000000000000000007721612515fd075811ee804314acec9d389900c7ef883e866f71fba00c49d5c4dcc7a2b8e2366f5a93f4577926ed171fdd97465982b58e69993711a6a64134bc4e76b88ba1948af91ba3339e9b9d3e900000000000000000000000000000000122581659ab1712afc23c23c2986394de8e155bcf722e944ec05e7e42e05acc366d9a7abf2136b5dc68a8dcfd4a640bf000000000000000000000000000000000188842cf4ef54cf77c145acb685d3187cd9c842ba6705bfed846ace83dc4400c45120fc1d6a633ea879840d3d0c902f0000000000000000000000000000000005c8966862ed4458a753155ffe2c64655779860149641ee5511a46ec576798fdb5cd9521528df77bfebcdaae2f94b865000000000000000000000000000000000cc10d888d2b7a97666de99ac14a501b7e2171f074d30d947efd67d85226c312a7977cf923ddbc88c533f08a99f2045f786a2a3974c84752b32f29707805c71992d5d473f4b7bc1f0757d126607a1c07000000000000000000000000000000000e5af1420546c1a5a0e0c2bd9241bb7c7a26dd52f4f358fc868bea457a60bd4f6bc5b60b27069fb4f6760813a91ada740000000000000000000000000000000017426a65d239b1d9505bef2b476799c394fcc7bfdca36a1ee5a600351334dadc238b64cf8a667a25d4880a31b73c53a9000000000000000000000000000000000f151587944aad17429b51b1c16193c1e1c93cb412538d1475473666c997e012ce618eb841c4e9e064a08ab83d7fa60e0000000000000000000000000000000015c2e049c532db585807319c23ec077a51f288fcffb2cb6528d3697221e8542e3fc85d18b079ea1b217fae30858a36f285d33a7fbe6ac6eb42eb932dfbbca2f771ffad5e80fde686e5df9d34e9f83ad6", + "Expected": "000000000000000000000000000000000c9be91da9bd8774f18efa3ae9248e4b03d11c49b377c372613b7e745882b2b23c49d518672e58eabd4d9b510a25d8fa0000000000000000000000000000000019687b9eaf5d68b0e795cd57055a74e44efb3e997cb038b7f1cbf08ca70e80a1655cdb04402c542a92ae4e435c22d0b90000000000000000000000000000000010aa1514402ce348d1d61b8d38b53017cd3977a84dc14445db64799cfe822b56a0adbfc5332093ce7ea1f0f438bf15590000000000000000000000000000000019ade30ba0faffcaede95aa272be042aef090f89d9ca25cb825846c4bf9e4c1dc575f8968c88ada51fac71f26fb01517", + "Name": "matter_g2_multiexp_33", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a1346771f8ba25fc44323d5290068e46b3f756de6d97aa934d511979a1486bc32173575639a7e54aea8eeb60f32a8c3000000000000000000000000000000001958ae7fce87db47a65a03402313b99f659ae02e8b62db3525d48dc9075aacc5e5abb50156e704701f3ceb18747e0431000000000000000000000000000000000f98778311e28b4081aa76a3f9546b94c29d86fe8e66b905265d74ee21928dc3ac463049f70d355d8caee5b59d65e07300000000000000000000000000000000185cc233ce72770ae26406476c1779858523e7c940d69adf2750695cb12440440686b6b918f4adb3b14aee9aceb6422119582dfd9cb80d44c17c5f62360e62f6736d186194f0f8483e34d8d18d832d37000000000000000000000000000000000ae2f565a44c8e07f2a136368798a44926cffd3c3a6d4c2fbf91763c20d2bd959271343b80eccec4d59a84394c7a3ce70000000000000000000000000000000009481a5fb276c938801133adf10dde3e7da2087d0bcecd3c9435b7de544271eb3b07a69efe7e168869e727868f24b0d90000000000000000000000000000000011774e0197866b1c8b3428d353d2c9f6326a77ab30d5595e2402a0486f03ca6ebb1e8dd335a60a772dfdd9a3dbdd3eeb0000000000000000000000000000000011ed2480d79f73a67a2adaa6da3ae4f1e1c28feaf0e4cb9aafac658901960129e40f6415ec80a31d72004899326f714bac0bd9b8746fd02aa70d8b8a2b5d3be46baecf9449d8cd3d620cf9efb3c615d1000000000000000000000000000000000a73b0d8c31af2deed481faec54095875639233bb09f31b1c7c745cb54778d1c8bd0a230e963ddd2ec8d178d31fc14740000000000000000000000000000000015a889b16be93d0b6dced01f5e2278ffde1cef0576d0b04b49996cc5252854f879e04b1ffeb90e222f4b9d5fa350767c000000000000000000000000000000000b53dc4d72e90330ffad17012bc7dd2e497cf8aa6ec73bf25c10427e23fd28137631249eabe9d0308c956dc7a9e92047000000000000000000000000000000000930cdc5d04ed2d1eb62937d9f72fdd733c07a5a0e392fd5216100216b1a2e3cde7053bf766f046cc470d92bebaf6290069d889881d5bb87dd65a9a02a7fe239bdb55ee54a6310bc987e7c5772404d7d00000000000000000000000000000000131c4e590400b69b3657f7c67272b1e3491983997993ee87c94043001d78e605965abf3c1a8c8c39cc08d5a5ef05520000000000000000000000000000000000124f71c136dbb032504da910958e8a7949f1dc5c061f21d50e439e01e67919891633b3bb84fa8a54c69b632f78560ca70000000000000000000000000000000014a4b1a05f1060853f4294e669a20b91f939793a6eada6dbc84fda8ab11509b256d8b785b252a3795f1d2b99a51df05d000000000000000000000000000000000be2489f1f91d7adff356236859679c46b6bf8c1b375e8bc8bd1e97830b5ac223ffbbda60ecda168bacc2c0b90ed25d3be658348e299bbf2438a0c013f86eeeb69a013b8004a4996189472f3372b326c00000000000000000000000000000000111ebb796e8770d5a69e724a8d3ca62ef1f13778baf4ba12bf462211d35e325ff8e455c85237a73a3046e531f2e2255e0000000000000000000000000000000004308b76b06067e0a07bda143341220809b481b40b78edb2e24e83aa0f003d209198825b5fa9bfd92597e27a4054d3ee000000000000000000000000000000000de74485713f5c95653e98b96aeefb79b59911a610c2a848a807653c19d50394fdb52178947c779134d24b6d396ca36800000000000000000000000000000000069f47a71ad765591f6335b962e7c2d87b556801e1e6c25b449edc83432612fefd405c952397a704e9aa5a924769ad4e9b9d0ec92ae7df3f52a95747659f8fa3ca2cd01e8d7ef6de384111246886bafb000000000000000000000000000000000a3f89408ee43c0ba6a7c9c479327ebab426d430e3ff212c65da6364b16195619d27eee83d701a2ec50bd4b7acfaa06300000000000000000000000000000000092715831af983f740ca2c673e7c9c47727d64165c59fce19dc3fbbdd0b6a7be66288ea1f033ebb5ae2b38b3762edaee00000000000000000000000000000000071ca6fa9e546d4bce965b2bd0f0fb97e6833f05cedcf66d43ec88aba411dc4d6db9f1591de22f493f49a1dab1a2701e0000000000000000000000000000000018f89932ec032fc28775d34d588169a1435bf4ad7e2ee11c9d6934dae31324ddb96b3ef88f95d1bb2e52c3c8d9c01516d2ffdf1237b4e03c219806f2dea745c94bf08924e1b9f11deeedf0db19da6f3f0000000000000000000000000000000011b5cc382164fc21c9a72cd85acf61c2a78d00a16a2dff938f0b36bfb3bb7075845a1616001ab53271a9a257a38312cc00000000000000000000000000000000139ba2f27e545d45027a0b11253532e28fa691170e08608472ce3b3f9a3e9398c5ee76953b1a1d01a5e79f194c32d1f5000000000000000000000000000000000d875f44829555cec695f3f4a28078b0a6f168bb0985793d003443b75a141936f3c7c633518890e0f7238416d46573cf000000000000000000000000000000000675420ed817ecd24bc5172d3e7df60ac4281b24ba91e8b5ca8bd6a8321f5c7312a6ba043fbcdc467c8a5c957590a692cca0751c9534cee7f14d11b7c8ccbb2c537a799df59f850bb125c6362d72e9c400000000000000000000000000000000107bde844286cd3958cc7a1314127322251699b51d8af8e6b57495497f21a84e05612b1569b54fc5639a75e9f9deef750000000000000000000000000000000002355b1a60e24e4879448437d2c1b12e58f02d7eba88583e96e9634f7e2c8c6886132ef0488918f665ae3f7b6977c7c4000000000000000000000000000000000fed531e437b70bc4a19ad63c61ccaab49afc50fad1f156b1c8ecba0e1b703f8aea61882c6327d4d8fdd072df9c4e73500000000000000000000000000000000182177409579ad53786539514753c696c8757b8c4d9b8360392f24b591e43ec20e84c0abe468061a9e5e879c5c81314217f890a1120daca4a1bc1bc0fa7529f0a87b5fd6ec385f12b270bc0f1a5281b40000000000000000000000000000000001fb25395089228772d6000025cb0356eb510c964bf7d0c12d47a6608fc18cc448e44880eb5ba8475cbe6418fc9d8fee000000000000000000000000000000000f3b9de9980e5afaebc59c56e02fd75fdad13013842ac035f8d5569a46cc67f0cee461a939aa5a3d8fec2966294207930000000000000000000000000000000009a223ac0edb164845eb8397e0cae4363fb2c8c996c3c5d722cb50be56cc3789c732763cfd4b61470886dc991be39f57000000000000000000000000000000001909f17b229eb351dfe8317a8273d846edf14ad5ee0ebe8cc2b595ebfed19b73983035e19ebaee3d05b1dea35968586961ca18257d9d989ec13d4f158b18ec17d59344f4558b6dae6c0aa0c2f37affb500000000000000000000000000000000081fa9eb8ca7d9db52380e4c408e6d5d668471bafbafd62ba9023fa08f6d300a45295b583677824c29ddc3254439cadc000000000000000000000000000000000e2e613043b1566674f791dca9d860a49a75dfa24dce3fe18f544a9b24ec5266a64e77386b672c93fc4d079eb8e76a01000000000000000000000000000000000f471b86ac5783d720e7d73e8871474c8665e8a109aba27c1172ca24217eefb0f66c53232df1672dc0af6ddf9640e10d0000000000000000000000000000000010667cb22a6a818fa7c729e40a7e70e1f31b0ecd568b54a4d352d5c9df8cf1072ebf2ef1e612efd96bddcbeedd8566430fc004ed8a135ad97cdd1bc4d0c3ccd15e65031ad7e3cc13ef2c260958bc43be000000000000000000000000000000000a0ed87b01f27f26380c6285e82bf2f12ef3016c7e7f3a13041d465825664573db47be6cf099cea615e21f6a5d759b6a0000000000000000000000000000000007afb2a1bd50fa0fd3174d70f1c8d5c229627a496bc9bb89d4f52d47b1862e14d704dddd80045e58d00336e898a996eb000000000000000000000000000000001698f30f824ee5cb71b3f2451953c371987433d2eda570f2a13262ff9e5e529e316b06ef6aadffc152803b076f22db9f0000000000000000000000000000000009eb1d5f3da7cfe9b40a70e1b3c3dae36436e8d068a79dcaa283905614676645c99a5a165630ad46b70bd6be8b1f21a8d8cfaa1037e2c81c6973b221dc7badf25ebe3fb4b42bbdef1124265df2c7ccc40000000000000000000000000000000005c4390b8f37cc3fb9f248470b505a5d9502d44e4a4459d1f56452cd9aec89d114f1402fa45935930fa00888a4860a9900000000000000000000000000000000163b0ca84b5cca4f124bfb5a13a4a3efa677a84dc89b6a61e69d0aad34fade528614e549a7b2326d1f6016bd0d35465a000000000000000000000000000000000bf450dc8af483a9f993a29cb47d5362c9f5ef38afc2fba8040e14514eb834fec6520a413fce5868aa9a2c7c3ff6617a000000000000000000000000000000001063619f384102949fa1f8353f0aaa5031234d736c54103df6ef6fcd0df02a19c3aef471f0413a1e19febed6395459a0c25ecc5d37659ebb0c9e21ea2f8fddc518e3d8faa99627b21faf105445f69d7d000000000000000000000000000000000e35db3017963d3a9d62b7e7fbfa13ce4f5fb46a90c1285ddc0fa481d9379b95a77e8cdd4aab5c33059bfcdcd82473fb0000000000000000000000000000000004fa27c663c8d21f041d15cb199d31cfcb96a56cd673b730dd111bf03cd954cc33799456674ed4d58e8e0dfa826a6b26000000000000000000000000000000000e0df4e7f943db5b5c27bafc7e1ce099b2caa64642bcd6336ef926352682fbe81a1945b266cba7eab52b16f4aa63eb8500000000000000000000000000000000020167756b8c68f535c4691b1249ca1ccf0a539f7274623ada824d0ba789ef44ebb20ec1ba51d46c0a42da78653d287e26cbb32382902d9b1963779070d749cbc4df1e7605f840819f2c04aaf89c732f00000000000000000000000000000000178037c6b5fd1c6c396d8aaadb712863557feb744d2cb9165ae5c36376d2c066f7b1648e083f81c2c96da6562e0b3c20000000000000000000000000000000000b805b4e1cd5d45d8b6ed9d4f604ac0b40f336b8123f7281df43a6e803f8688bd8087fc4d5fbae695d06efb0fa35e18400000000000000000000000000000000000a947562dde45f613ee1d15614940a2edfc770d733a60374f8e9188675d4cf973a5c1081c11fe5a1d93bbe85e6f47800000000000000000000000000000000059473d80c82c6ca06b4aa71d072f4751b3b053b53ffcfb4a84906ddfc36ec5918668a62f07054af1b241bdd4485edba699aa549077a80ff8732b5fc9df148a90f405bccc14bf7305266836566b7a98b0000000000000000000000000000000008b9d0916a9f5689b8fdac84bec3a49d0224dbadca6329ecc156da633e1332bcc6735ca3ecb228c22032dcb7b2f372d3000000000000000000000000000000000cac0c264add10bdc1217384a7379f65b93cf822418f7e4e2b48eeac45f068a61f805cedfb1665dda06e04cb726d245c000000000000000000000000000000001578e98a40a64da59154b1c3d757d8f1f8cdc500482c7b7d65b9997576f745442fbac654c19331977bd210df440372970000000000000000000000000000000015ef69f82e85c81d28893d94927068f14c6516eb7d09898d5d055cbb7a9b55c6d7f686f067ab164160e6d6a8f91ea19d40e2de1a2901f1380a383a741d79fbb0a041da5d7bfb92edab74cd483edf95230000000000000000000000000000000000a6a27b498285085139b8dd0c37b700997134337e696c84b5e0cf70ea3991cfb40ca3a3098a3b3a2fa31e91aac78eb2000000000000000000000000000000000bbd7ebf4301c5eabd4f448b89f1b227415cede3247a1c8dc56a02247efaa99dc78cf370f644ffc06cd2158fa25197dc0000000000000000000000000000000004535a402540474d53c084d4fb6d9e12dba6716ee13286ed758aedc1ef911b55c572640180a54cbc084ff57ceae8a4b4000000000000000000000000000000000759de2a9e0f3c04b4f629a682dbcadb2140e5b935845cb55bd267e230e08c6e8cc5426057473aa03ea2196203bbf6dc062b323592118868d547e83b731d15ba2c7bdb1ee4fdf73600c2584f1db0b45d", + "Expected": "00000000000000000000000000000000134c29cc5c33c10f04b6c09b5db71b10304028d06ad6acd4f4b39b16823288085a84a0380a1549f04b3dc692cb8216d3000000000000000000000000000000000a0a9379d63527ab9b5f9c00be4acd54e5fd683a0a2f37c85ba570171c705eaadfb0f4e4be1a8836c9de86dff46138300000000000000000000000000000000006ce78f135dda5af34a0e069d7ef13fd589cec5a6128512bdae7f45f28b09c6e4b3cf638628c9f4783097cc00082aeea00000000000000000000000000000000141e710ce7a979dd1772150d0cb2d5b269d5cda50d1bf7bd0cd827b24f9cd8c1e2775f495cfec0428519627b7fede464", + "Name": "matter_g2_multiexp_34", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018aba8353cc470b287a163fdb9b8b4cc46071543ee8261f928a7b856287946637d9b36b728a54e1df5f185a47f1556060000000000000000000000000000000001129541b2e3b2e1a553995b603dc3eee44a5ea440e687739ee9e1339dd79bd96c67231ac753d483e0ca96b27054997b000000000000000000000000000000000e1cdf3591aadeb56dbd80890ff7d5639a64847cec771a19c769df7da732a6d3179d3a89ce0052bd7c982af0304408120000000000000000000000000000000000f5f5f0ebfd2b632e15381ccbabfa88eb774f2c61801381ca73e6970965ecd54f5f3a9af7c152186af8fb75ffb5bc25764ab6f4c43630d5e79e8c474d76d8973a7b7bd1c7f1a985333cf1a6be5ccff2000000000000000000000000000000000e527e40c311edc5dcdbb4d0b70497eaee14533aa8ec57dc7cbd7d839fe6c6ae62b1fd0be2346a038de687d5cf5394d60000000000000000000000000000000005f9fc63027dbee5e0d55cd6c57daf5df7af0d138393a2dcdc71ef9aeeb204ea347f7d574e71f2ffdd37d8f05dc7979f000000000000000000000000000000000f8788034c9f1c9c2018a52326c046cdba8997199732152963819b663c6e58e9d6a0065289e2e25a97ce5627505900f20000000000000000000000000000000002a747bb3bcccdc6ea0af1bf1d0ce55de3f41b93060361b30c76063346b606322a76ed7eb260219c83aea0806ac7d8583280f1b1e78d2339f64b5b2f2bd77aa24623b79fe2c9debab4212f4ff564983b0000000000000000000000000000000002148c043e065132e978e89f018a5b728d278c95c9cd1a6f276bd13f0cb708422a62fa22f7b377adf33055fcb09a6a8100000000000000000000000000000000024c4c721a0574e53118bdcc3fd41f73176bc8264d2ff39673210525166bb3513016b5c9af67a47a7032b74a62effcef000000000000000000000000000000000797dfa8cad94896916b7d55fbbb3eb0eeb74f70231205388d0dda69dd8abb436c22addd22c1e3689093739af957b65200000000000000000000000000000000010dd2ea2d45528de8bf1b5c5dc3267fe8951e48ff5987e67ec52d58635521cf1905f1688894e3e23a659764880b2301d4d27ff9d03ab9120ac2adfeb36b070015f0e90782255ddc9111704c5fb11177000000000000000000000000000000000eecc0a4edd3cc3f70d3e0e43ba56b04cfb3f1ac23c657048a94318e622217572b0f929c73f545d6f5f5613920c0580200000000000000000000000000000000137a098ea8d3aed32c197a2d244a2e18753045b55cfe16874f79c728c664b7f23b10476f20dfffb2f80417c26dff4f860000000000000000000000000000000004a7789b02d7d95a2ce0c7bac39d5b057509200393450a47fd9d087a353f866921aa11185550537b98f3073650d9a1370000000000000000000000000000000006ed63730bae06403baf705da0e30c6c00739799eea4a312d06b8d7dc35cb43a4f1e941a69e55ddd7ab8ce42d8629fdcc66d5291311c7cdd1f33e5365ec0689608b3569427a8f6a9cd0b94b671472e66000000000000000000000000000000000ee7ddbf43f17f722dae84d34d26add8c1d732918b8c75c6b295f2f584075cea0c655911410b32c06868c1acf36aeaaf0000000000000000000000000000000018775682555d9f5a576cf9462170910bcdd083671ae2e4c8c6fa99a702548f1ce9afe90e681b00d194322b1a2a3be7ef000000000000000000000000000000000f3935bbbf58b91fe8176f3e25ad3fdeffdd6b369ae70b704d4e54d4fe32fe5987e73aa5aa975e958497340274577cf3000000000000000000000000000000000c088bc439d638d86aba6bb1e6e9f7540ac2da3b96080aed455edd1fbabfc141e26f125cc3a9cf72070a24f298dcc3ef4b718a5129659250640e333f4567043ca749063e63d87efd86a9995adfd3b8450000000000000000000000000000000018d8a47d1a13b9b8fb5a1625f9616ba120d5c677bcc996f694b7e15d251fc4bc938b0a7cb5b70f22b8e9f5b416c513210000000000000000000000000000000003d0646458bbee7ccab27f858b8ab0af0cf583da12a40ca5a954d7eaf97c897d379129a63d8131036f29c30c6e644149000000000000000000000000000000000d5466b50975c5a2dad96e4e24339eafc8c85c2497a6f19e12d96603596498654cabea6995a92c91b8319ce06f18d56d00000000000000000000000000000000191a96d62139f8219b9e4369a783400d045d72ab2dd83fd229e08a4ca73de59a11a5add86c739cb3bab4adc5e9f79685708891f45d7bee38fe382820260061e212c6cb9a8572b4d1854f3ab09409b05a00000000000000000000000000000000032eb1f7846b563e98fca0cd44ede4909b6e16a893f5ef01eaccbd7d8aa11710606bbbd0ee6480f7cdbdc9ffe66c3a9c000000000000000000000000000000000c31bb6fb537cfcbffe815d86ebfae1f5053ceb756818ede8a58cd84cb34d0eacc70ab9095f9db1691e4fb4bb816d570000000000000000000000000000000000a8fa1dc2f28277a4bf8fd9665d4b5c3baf1352d89890d4af94a3657cdac7fd72558da1e65cbc5bfac142f0e817be74f0000000000000000000000000000000005ff65c22ff0abfb33518791823c5f2202ea5f7258c0a507ab84460335ffc2cc8d7c7f670752a7647d6a6487ca0c9adb85ac0f94f300b004c7f20aafcfd9129d6c2590749504a3f08c4cc708fa30100300000000000000000000000000000000190379b7629f74bfb88096dc9ffcdecebae0d653410f032a35a811a09022679c9be19f3790af95c3205a396819e068e1000000000000000000000000000000000b6f114fc277ae8f0b5374dd349985bf955dff7fcb0095e0e1e137fb539814be78c924074bbab54f29dfb42f3e7df24a0000000000000000000000000000000002d86b0507c147142d03d3461bfea4c3af7e57a6edbb372387de24a27cfe27c44ee4b9571325a1b3f5e83eef450f2fc6000000000000000000000000000000000ac3b226d5e13c36c3a8ef0c8896d9af55bcc0cb67ac1cee57a5c6519617ec77af9af60ed44e0a8284a2d59816ebf848fdbb634bc0f99c5795f3c4d6a0efcda7f71427f1eaa1c5411caa6cb05ee3147800000000000000000000000000000000079cd4511e953e4d1b3f4f3bbbc66a62772018e809779fa39aaeeffac737cda9a6116293848f967577f03017f33231d2000000000000000000000000000000000ce3cf48be423a2fc0188b94f2a22579872e9ba140798e560ad107f63ab2b8c601831f89d06a4bb8e7a758cf836ddfb3000000000000000000000000000000000a6a90f735f215a79216fc4e7daffbf74775f38824952af72ac38c38a77a277483e34bc95031679494d76f109c0aecc4000000000000000000000000000000000d55fbce780d885cf817cd2126e7acf115ae9c72843af23c376f3a5d4307d1eefaa0f4691e7c09b5da1707aeaa5b675af5e4695c01849259fb969183de385ef30c2403e081067c2d9b6b5522c73fcf200000000000000000000000000000000008924efbdb46b9324bfb79b922ba8b7d83f5e5e4b3b736105e5339805838171801bcf17208f3dfe5c7475d4e45b6ad970000000000000000000000000000000007bc0096fd23f0c93f0dde8a3974ea3105574e031202f6316d5940c85164c6d6bb5b86078a0c68dc822c0fd1b3dc8cc10000000000000000000000000000000017276b3208b347388a5657b10e3c8e4a187b376e42352f76ee3ee88873217b6b8185022c93097cc116abdecf3cc64467000000000000000000000000000000001915ff932acbdeb52f07b664bcc47c3a5b096c6cec32da4d7044326dfe84358e49539fe50782538a901b99428446b0f50ea6fd588db5efc5fb2248634cca683d39d610886b59eb3077fa9612c368d7690000000000000000000000000000000009e295d229b543a17db1cc85c846111b7097bd169d19b410de78f8da9684e664922eae77c64b0db430aeb422016cfe7d000000000000000000000000000000000e29aab30a1da56b8590e9df67171cc1b9c847696b51147cc57ed6c3b55819cfa0992c67e15e4ca6de2573c9e16231c10000000000000000000000000000000007cc9990c6722645e320dd16a4be8adaab41f958f769ba0d22e235549a7457778cb9b14aa6ea5caa9e0bd43f8d04cacc000000000000000000000000000000000b2dab5cf37ae8e76b71dd8748c86e8823142792445fa0b140de31957d35bb7267e3d94e0dc92f4342d9f8560c5d9d86dc2060a3421c5a8336c80983c9a160345901a496c3a74fc5248fca081d09953900000000000000000000000000000000128e2aa795f8479da3ea2a4efd12aa90a6fb019d4da89fd372e6848ff7ee17da689d766c9e49c88c962eb4f682c56fff0000000000000000000000000000000000fd68bb80d6b2200297aacae1174275f864669e962d85c9105032d7a352fea548e9fa0629a6749c789fa0827a40190700000000000000000000000000000000175bc3918dcc972fb728f1d8cc30ce9887efc6e0b254d8d22af87f95cd4182129d494c43d11b028c4b9849f5520a4fc00000000000000000000000000000000007c5363f507a01c0b6935fee0413345bceaf1336cdd20f69060bdba2e411521a61a549e6159b2e006ffa16e3bd77e998e27e4afc3e6d59d0f5871b35eb83b46cf15da6c326e88dd8edf84031f58e23f90000000000000000000000000000000000efcd782b89fee74ebc037160c6653ccc104260b5f8989545b40d51ead6ad6ce6252e1232281c813e3c883af86e68ca000000000000000000000000000000000b68ed21f76ce131c089dc454dc48ef948cc7c6d5fd87d647db954c9eeab2f7f76ccc51a1cff8612e89bceed16ca03ba000000000000000000000000000000000cd776670d5171610046fa294fecefb42f9bb4d71baed4af65a09018b09ad9341789abc23c9feb85adf96b4203b0c0a0000000000000000000000000000000000ec4ca0091a28b73c9adbe7120f2bf1a84a62ebba1e86b1948389b1a1966c1de4c632a5e245ba634b53cb932f5847f6ecc7efff04f143e2d038de153861da5e04016a7eb17fbe6365de13069d088b1a100000000000000000000000000000000022f319bb5167c2b945a69a438f712df8975a0e262438ea687e2b0d824e2d1d14bff1065f50fd6ae92494f6f3aa9472b00000000000000000000000000000000198ce9e4ddb6b423788dbea82d75513f43cb43ecf1b27c8788f041248f01808644f60fd823e5862cd7afb4f7e8b6b6a100000000000000000000000000000000119dc1be1bbb7e678319db73055ccb88ef7efcf6119f8a9c43c69247ff264879a627f653a10a950e0dbe69155ebca4f1000000000000000000000000000000000692a0ef5a75d42524e3fd52ae073b0f2ddf6378f18a5dcef05af4868a899b93c7f1d2691883e5c85f97052ef1f4177d09a2c3dbb4ee4f485dc60dfbd94a358a7c62204c021f2d7b140187ee9ffdc4ce00000000000000000000000000000000102c92272571b73a7df754728d7293fd8050d9dd2b8605c3f7722e6de541b7fc6a81b01c1cf15e5241ee4ee1f81ab39d000000000000000000000000000000000af1cd6f23bbd3e9ef75eed6d6d99a7cdd24574881b3609e45c4adbf82e08259d14701fcc5b6338ecf52166aecca003700000000000000000000000000000000026a1a4c3eb54de2ba4509dc806db9efc7e26247d501cb59c525b8dd15d03b91abafa9ba5816c22e1f8ca159cda34bd500000000000000000000000000000000170b510ec227fe8534a2cbb0f405756491c4f6832df552bd23980ab0946725371b3c24fa8b93a38bdcd47e1026e1d2a0d9b15c065497392e4b477a556ad620d44e671137cfd570d53590b7528f8ff680000000000000000000000000000000001423d1707e49d2215f639df75ee0e13bc724efc7d099259179260ba0f17157c4efc4276844bfdc46c61ac2185f64beca0000000000000000000000000000000019ad06d215d3c819311938f89609ea7cc63fadaa11bcc86cf5f26370a966eaed1aca312c18176674b5aaca3ed8ca876e0000000000000000000000000000000013bf3f13e87f3ce29f0524094e2ab8e39679566add32e779256006dc92ce09f60d5bb9cf0452b90ece71a5f6981d77f300000000000000000000000000000000112e4901efca14686c30a883ecdafdc389303f4cf46345e229885c76d900b0aa084a957076009ce22ee36d4e285d410c9e2a72eff2ec29a65b417767e7090b73c2fb530de6c8f4e4ba30543946423b12", + "Expected": "0000000000000000000000000000000016d1fce53fc4cf40acb0347c0983dda46383e4828c16985459ac89a2ce8d3c2a26cd9acfaa2ec899cc63b4c6bc351f560000000000000000000000000000000019c9626363b511a79f297dc79c5a3b7a2e5127fe49a2fac5bc43a4376f170404f044f9f84b82cd09a306012fc81e3bdb00000000000000000000000000000000062e324f3d7c5bd39808b762a5b009cb30bec14a9591477959339bf2de9ef27eb42a0eddb95aa5fdca9bb9d89b278cc20000000000000000000000000000000000f05225a4d3bf910b0ac0103594a90684ffc0c09e2c21744032e30470d5727be3c27621dc2377e9845ad78be67b856a", + "Name": "matter_g2_multiexp_35", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c64577b78ff306186dc44131cf8bd946a68e65502c4af9613154a7e3ffea4fe4e59cac4a500894b470a74e66db1834e000000000000000000000000000000000b4311c295bd30174f17b9ab3544f1496b9655302a4b6026a113b1aca31b555ce7b2d812bf8fafb6b075f67cdc59b77f0000000000000000000000000000000012d7dc3db10ae6b4e3e99c655aadb71124a0bdcfa6e30ec13c7c977d39f83aba4979a1f45881813a3a68e149a40120a90000000000000000000000000000000001b958c47cfecd619c05a2c54315585d15fe377beff889602ecba6ea3b29d51f6480f09a0a8490e4c754045f0bfdc3eb7b9aa7e0bfaf135ff24720773ccd1e0a46fab6d678d91a14de137061e145fb9d00000000000000000000000000000000010db66653f2ca73e55d85254f62e8b558584d546913e4b8f530968088d90cd5c4bc164fdb77325fe0bb2fb1a5683896000000000000000000000000000000000a1af9bf84f0b351c8e8c082a79c7ccae768bd2ed40eede38666aab1901a6eab0cff258f440c8c8eb4854a824b9aab4b000000000000000000000000000000000444fa654afb57f1b01d10be08a330f23667af58e3a40c630a2e01c1809125b3ff8f76e8a39418688a023293ff1a45e90000000000000000000000000000000002ebb117ea107a3598b888dcbd5918dd0ca307b21d65843c6c28b3efab89d0e276e5d92283bbb345b674d4a300595425c6733c9bb7bd195622b96c4181e8c8837d1912fbadf77d6029f7fc44d793b48000000000000000000000000000000000105818a11efaeab4801d4fa7558b09bd56294be7f58e3e54fab1f4f7c243ceaf08c99a14c3128ccfd866b6f93caf989800000000000000000000000000000000091ca092e5f83a04e872e621e71d54dd6886d088718f60ed5b62d3e4c165d3ff2cea1e50fcb94fff251df0f5ee453cfc000000000000000000000000000000000b42051a1ef52f87536b9bca459fa7070ca17bf825950b13b3bbe9db183ef722f62af6c05c174c65d59b722e1d2f5b0e0000000000000000000000000000000002fdb4a5480418e43aea28e5041af6ad55a6c226e1eea1a0449a99b5a937375285feecabea95c2652da5113dc17d8ef4410bb66334c677397d04f59eade9630463065cd7da3c9d50580c7d66bbaf487d000000000000000000000000000000000d8f93b589678d4e93bdf8da7834bc8edab648ead731b7f5f0cc299488f07262877ee9bb1174ccc106204dcd3f1f416800000000000000000000000000000000160f740ffca48d3a10c43e591cf46c129507f10e65d76a031fded2930d6c2dca4c79d7813f63e4ff71aee09d672173680000000000000000000000000000000013c768a4889315faa3976c8e43b4d466ea594bd94773f270a198f2571ba9662d10435d1e541a492055c333eece9bb29a0000000000000000000000000000000003dcbcc9e6a0cd5741d77da88fbbc269202e8f944a5df5dc4f9145758654934d5e1eedd596325080382458961ed3d21ed97a16fc5b2c70829b15f73615286eba334de1f520b5f0f6a83d2578399cc0b3000000000000000000000000000000001344fb37c1d7dcab01a4bf6fa50c6bb7606f7db22b85a3888ffcc2e9f229f196881cd7c82160730727e49b9e6fea04320000000000000000000000000000000010c7b15a6355d3152eaada7a606031f28809f278a1d0e04d264b563185ac7d9e351295191a6a90ffc9c6dd33995265db0000000000000000000000000000000014438086226a061a1bd557dac24d9333e14cdfa3a7bb00ded4a450e8889a3028b174bf38ae1347e6aad19ebc1cf5ff7800000000000000000000000000000000105165703c4592cc4f1f489d78426a56434dc77327c13221b582dc25306f4c5bfe596f3e47abcb741ab553fa14cad374bdbac08202bbe5df1229e99c76c1727f7789e0f8c2002f0a2c195bdfc00acb36000000000000000000000000000000000ad8b55a198a5e788bb54c32112761ccba9863cba16d95ec9e30181376e7eccaa2741660f2c5f708300be058e566ae27000000000000000000000000000000000b9bbca7db413964d2ec113cdee2d7a7bcdb712d285655f6b2897dcac61456ba4d08e25e8c28627231824829bd7d13800000000000000000000000000000000001ae49c10675256651e3e038a2150d85993fa6f2a97b9bc02c693ed97ad52af34015176258b3b2546b81010a4381d85c000000000000000000000000000000000c8f9668a0a497420acff5207a07cf780e0b2ba78083eb0ed8eef76beea996210541bae2e64d825000f307d54cbe3b2b43da827b812ec6ac23b00208cbad0f2e8b3a32434aa61dde029683c34c1ab1900000000000000000000000000000000012990a66c132a31d60d182f729b52d9b57d9d1eb1988b6f0b4d9fa2847f26983078ef9bbfd0e888e14bf7d1f92d09e54000000000000000000000000000000000585215ffc2673a197bf9cc6c6424547886abc6ef5c6edfeab2ef0c42034a4a458fc7155c35c84a8e9e9d89fbd4aa25c00000000000000000000000000000000118fb4fe0d3498dd2b55e62272e95a1203f9fd22314921d3e044f1b162376aaa7e8154a4e2184b66451aba98729330c0000000000000000000000000000000000364b9032ab9cd9f599979c8a93acbdb831707f1f84fdc92844b58bc7e4d72472ca5b09c51b1b04271ed9f0e391552463c7a8f7bf434ce5e63ac9365448da8663745f66689b4b04968f9b8b1b6805893000000000000000000000000000000000ddf9e4e302169e195f4f88fed06e0c93fd1b542abbfeea5da5d47c662ad9a16b8f4aed7874354fb9008d073920e1e7e000000000000000000000000000000000043fd1a4b781f25e8747ecb3eec45ce90760e0d5dd701e8193a7e726684ccb8ff21f0219ba15e9e777d339a3d87a1ee000000000000000000000000000000001117d2ca429048056084e4847c7169b4c8ddaefe1d48079949f9f14e4d74f0e0b38a95d0f17389f61da7b2a6d8cabd1c0000000000000000000000000000000007adfc7d87b1c533b4439f6b30d38c694b65b3b321f3eec13cd7d923f1d5f117005be6c3ea901a9479d79fc553e34e6c51f2e2bcfa6ebf84d3ad83c57257b9032e5d62a8663ed5d77afce00f33382bc600000000000000000000000000000000115a81aebee0329b174c01458f8714b13ea3fb2dbfb051b27b29b940652f27e01a84e522626d12be80da7e1039e2baf6000000000000000000000000000000000d9e37d2e5e7160db30acf5593d1c282541a0d4ac0482f0759fef8704b9ec3ab1e3ed248e37c6be285e890ef1a520d0b000000000000000000000000000000000c198a22c2f590df2902c8dc2bb1ee427b33e9687767666140f9d3b51d73fef18a259d43d86fb3559b1ab0abacf547a70000000000000000000000000000000017e705af54ab76145a79e747167a4fec6ec3a16f3ceef86b1ddd1be144e616ea7d686bbccbd1c5c258e4546405be023d6d8b15ec8908bfe008414757c0c7f79b3079f9db86d91ac3ec8f38ae2c94d48b0000000000000000000000000000000007c4c31287ae0b3bb90475f84abdda36610f887aae311d8e97bf97bbdbdfb11d38c7de331cc9dd022926678e5180c0770000000000000000000000000000000017f4afe28adc4b24d16b9cd97aacd171c2104b13b079c643d664a7c924151a401c352832c4967c0e5cecec5f1d1dae290000000000000000000000000000000005a8aa8a3a91461e0ba256e44af56875f8d07e24628e738ffc057249d8380417884f40c84e76dc6ce5816ffc05c0d686000000000000000000000000000000000f84bb7385a6936b519e881a708541570a31a9d7897ab8b348a350adb0d30522567fb917c9b6db661b6f53f98b5e68aaf4723e85076d48389c3fb5a5df16b6bc6f7a69ca701632b1159677bd8a6f7bb1000000000000000000000000000000000a8726ea352582ed52ab4e440102963891f059cf5a3f4901615733ad560a99930efd8692f3c30256d58e5cfc4f0803bf0000000000000000000000000000000016a623dfeae872639d99e3b8209748642f20af796325630596b6ab6146783bd4f2247c7ae38d53ba9a3fc0cdd6f29087000000000000000000000000000000000e40709656e569e4fe90eb85d8761c6ce44a4272793ccb7635ce75d67d97464e8dcd8c32bd4ac9a36fcce706006915b20000000000000000000000000000000019e64802756896206a9600f2d888f3d307ebf958492b1b5153c06a11231e2d7d2f1786368447f380093a29117cc25da9a632938a6df169fb64daa55d2f874ef7629d5be41dfa0d50827c082333f0fca00000000000000000000000000000000019c7409cda6084edc6e559da9b361c96cf207f1e2cd63cabc9b86c5bcb07a59b43e9c6ae3e90a61c872f168ab89cb2c9000000000000000000000000000000001101bb63a452b766a085fb788937f6b751417dd8d905ee50ab5bf96cdbb9d7b68c1735460a71eaf9e9bf662734f495c20000000000000000000000000000000014a103871fe523cd01053a992eb9884ce83c6023bd6a8c2cd9ca60b8780118c88502c6980904f2d2bf9ccc9fb597d535000000000000000000000000000000001929f25d52ee6b9a44333237c732a63ce2abc80c5510bd67faad1d7adac96eac5449823f3a52ed18bb90b93d9640d0d1283a4da7f71bde54d4b7e28b2b23e2eb05d8b025e77e15810625d71faca6d6e50000000000000000000000000000000015b0a46692f57ccd2b7f53040dd75f30af0196aa3c5499049eb172b4d927f96a59c42a129117d6162a1bb31d2e8734a4000000000000000000000000000000001366dde2d9070a2c057744fffe78effdc328b122e356a6aadb10c3fd2e8badc0ff70bc6d18293b3c52428e2ba78766600000000000000000000000000000000016fd48b067b949ed75bae3e4db29b5785bf672bd01032a925d653f8a605998e1eff6c77ec39dcfccd417f1e0a9defa820000000000000000000000000000000004cf22bd706dbb1cf8b97187ed97636380871402b3ba9de58f174bf50a7a0b528749762c3f55f5f835a276e43b46e669d402b71c1fc5c3f3a4ed9edc73457a27ea427f83a784796e01b7a1451b3305b0000000000000000000000000000000000ff424ae9372af46de34210bb0bd670eb173bd49076df5caca4bc4293e742121267a20506f931a4ae77cc36fcbc8df4d0000000000000000000000000000000015a6815b47966fb84aad5de62e6d4280f9135e129f33fd01e667f4d6e1bf7204317fa7741f3cff3682e251437927131c000000000000000000000000000000000639dca43483b79ba8043130e508e91fe3f43bc362fd1dbb135a2eb8f3b94d5cc4af70f1101c790545a0eaf2408706e1000000000000000000000000000000000045f0a04a642bb6e4db34fbffc8adb19a24648554f36ca371fb1a851384a4516a57f1850f7d6be59ff67029ec4002de310bc47acb3aba7eaa490ec104ed9b2985f65c7347f69fdc67b76f6f43846a99000000000000000000000000000000000e796fd500cb1a25b834baf7335641f34ccf04ccf60f82367f0e5c8c7fce8e3030e7b916752bac8e3adc01cbf4b319ac00000000000000000000000000000000142e8bbac9cae69ba3dca48aec045e0c4d7028f73c254433f921b7240761c661cf8e774a21da249f7758234cf7607fbe00000000000000000000000000000000045a3d80767d116e89bab0e9de812ffe7ffdbc41b61f5f17ad16be5bdc9968e34f46b937c5f94f8197e21b358f44b5240000000000000000000000000000000006978b93018bfdbaef0d40f1278e831a1fc50b44fff39b7c93820a284d90b699981b1f422f751a33094ae7b5cedbbb2691b88ce9888e5dcfef70d6f960a456dbabc792571f2a98746b7d833e7fab98500000000000000000000000000000000003c3561f5d255cf1f83cb5f4df8e3b8d5655d965826d56867ae66da631f8e7d489f733f5824c36652ab00586d9c593be0000000000000000000000000000000010b3adb0017e2cea1b71680ca33aee368429880759660dce2d3cdf57b6cd7339bd8853e5efafb9a5aec3f7e22da676c2000000000000000000000000000000000cdf976e4c65edb79ff15178f6ec5bf0a77a30d97b799e433f216a2fe3eedb10bc6ecbee2974167128773cff43f1922c000000000000000000000000000000001599b60ee70d927849764880830b2e7355daf95eefef39ef61569a2b83b2bcced4dfb28047a1e5350cc87ef3cd5cf1d93e82cc1261ac3864266379b4d518e25c05bc492a8946b38b8a64acf47aeec4b8", + "Expected": "00000000000000000000000000000000123af49ac2981e14a490a4a6792f21343497b562266a47487cf6c650769c810852e357445bc68f3460e7822e8cd1e3f000000000000000000000000000000000143e79853e4bf6d031e1116dac2c6eca4991b8a1f822fac1d352d2cf1b88df239d82df886f0b24b3e7f305286cc1257e000000000000000000000000000000000b621056a9de2d83c946b1e2c7a07f9beb8e053202407323e412c0d8f60123cfd5818067f57034fe1b1b5a3d1bb285a50000000000000000000000000000000001642fdff2c52d58d38201cf44c31e00df47ea1439e9896b5ac5e9372482f4ffcc698be46c2d375d57a72fc677a9fc8f", + "Name": "matter_g2_multiexp_36", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011f78204afa05c3717d3908dc7e4356ef96c426ef380b6abba3a5616d9ee01addeec3369967ed42e030c4b8ff9939c4e00000000000000000000000000000000175a19c86e7eff0f4e809a5105503ed223fe327ee4617f7f51257426fe408373899f39014821292a75e4cc4eb9f7f31e00000000000000000000000000000000052130dd3cd17840385db424802d869d7eac781365be25ba401b7b0e4025353c8dbf59e5997b5aac74c252192061299d000000000000000000000000000000000457f4fc7ac5d7d4fa07e8ed125df4c4e950e6ea926be9c04b6df3c3699a10e99af7ea8546b8ac70c3003468a75c821ca2a1148f1ba719b2da92c418fd137efe21a44dd4cce013ab36e57d97dfed92990000000000000000000000000000000005182a3af2b52102e09214d048a1a29d1e10b7ace6afbc4e6b1ebf16790be372dfb6d65cb8fe08c3dbbed8c5435a59a3000000000000000000000000000000000f2a1261463c09a88edac443ec3cea8aaa19659e8b7ec2e8a403dcffb1e50ebb3d07217a9ab057d8d097c075609c13900000000000000000000000000000000007d6525fea8fbb685fcf89bd772d48c406aff7377429fb199f27c3c3337f11f8e24c4d81c9026b469600d11e8cce51be0000000000000000000000000000000004b6d6102debaec16c34fecfeb444e7ba573b13b83ec375f14d2c541a0d1fa528ed6599a0eff4f8ca527c5baa579f762fec5d6167d7777169348cf81ad3eab5153f8f2f18fb5935c5ee5e3a759f9b5af000000000000000000000000000000000ba1f2b2c3f1c57afa0ab647d32af5d036ef18069a4abc9795dd9927ea274a718b67373230e337cb9374ef73b5e2303900000000000000000000000000000000016458ff2f5d600af9d2983f535c965a2a8aee48c0d95095bee642bb7bbab8bc87e3e7c3b52a787c53f0d1e00cb4ff32000000000000000000000000000000000d11324e812cd4fa65d20cf58f88a9bc9407657834d7a92f80bfd32c7085ffa2f9f78d7e18c1405a03de939bd0dbb06b00000000000000000000000000000000144a0f4d50bcb16942d22a12d28bf34d2b4c51512a3f11c130f1566aacbdb63ec3984df5569f41ef621f50d138883d0dda609e1c8fa42a993ff355a70d44dfeebc71a801daa36acd437daec5d7b645d10000000000000000000000000000000000d7b138fe445d7b7e130134db653022ebb389075ffb62ff9faa544cd0fdb9e78e313d0b1cb19bd812421d38d1e9996d00000000000000000000000000000000084411aa2719b729a1e299fe8a710f767009060f1b2becf2aaa92efdeea8c91239aa5d2504c6e7ad2e3f39d89ef00c1e00000000000000000000000000000000017e86dc0146c9bbfa5ea1e48f49918167dda13b31ba73311fd5cfdc12845b95b9e90972a9a4d36203be8c5920f8de5600000000000000000000000000000000150e4b6fa9cd9a609241d1de8a637c6ab25207bccf8e5eff4a97ed633b67826135172880b118037649407a3e1b1a0661bc5f7f5d096247ababa51852724ce9ddcc6acc7ab6180beaa1cda97dba94b4ea000000000000000000000000000000000ad7430b7778248d63a06e26119e5600ae97071fe8827b24440587e8bf6887b646f342741af69d20e243c9b45d7dcf24000000000000000000000000000000001230cba1a5a66197875240fe00c59b796ba1db5ea5653cc76bf43d6adce0db3a109168593beb39bb45688c1d124b9eb300000000000000000000000000000000144652474c58413cadf9b31715152052b7618e7093e931367a7ed0340e66d84c0471b6ec178e1730cf10e749e01815780000000000000000000000000000000009abdd0210f25d12146f2911a60035867f59cc341b35c73bbdf8f7a5a90d0bb6566c6ba0e868a3d62d3557436190f3f63222b41a59f9551e91572ae00582e1e41989ff5f8e2cd1ee1a78f55c2b28ecb40000000000000000000000000000000018ced3cd0c169693368fcf9c3dfc49fe248f0b9b5511e9407b8634d8ed7b54ae2dc4ac6ffde8b3dea70ca86ddc89449c0000000000000000000000000000000002f6b227e699dccf7ab1e0b1cba4cf9f05c4dcaf9fee6cd94bbb79f42bc9598fa23eb2c653a7654db73feb511b24829f0000000000000000000000000000000019785959766eb8b00ac2600d87240f2876e049725680f4504f59db6642ff8f82d4e1b856929643906c3be7807a2443180000000000000000000000000000000018285acdf25a475b37ee4da872debba4297fc8731eede6b22be3b0dff12117634de44b84a18042852ef419c3ae18a46b7431e5c1fe5f8d38c759bc48e8207695a3cdf07d4c1fd02f1009088539085da10000000000000000000000000000000019c7950b01e15669cc1f96fd94957535f32132ff6a5ae788f6f660024c332593942bd3e9603f862756edd4f3ab17b20b000000000000000000000000000000000bf3a6bbe10ad91d687a135f4863ba0332e9b04271d437a6a4770056e6b1ca34319dc895f9186482bbbc815aead03392000000000000000000000000000000000a3ef4d4f7a15da04a91ff079cc40040993a90e9ea21f53e31f7dede52dd513a97ece780374c5f3aa8c8b2e525ee31d10000000000000000000000000000000017749fc7761b06432632ac686d93484f08407504e58b04b3890cc2101f15d21f46ec0dc1e9028c8ef8df10f9ae929887d474e755f6ce9045baaed65c80f5a686547089e8cdf4ad2b7c2ce7c255cb5c730000000000000000000000000000000005a36af876edfdf26175c185c3ef005530e02474232ea659f5cf251c5de5721f1b44a25714967d283525632789331d2900000000000000000000000000000000130a6f5edf94736477143b1efc316f131b36d9658c484821be08e7f5b9c93f60cf34042858664db0ff0240addad8782f0000000000000000000000000000000004fedf49e6d49c074dcca96c01607da2105d8053861b4c677a69cff0f82e66a2a63f32f3d9fac8e6c844a1f77055bf31000000000000000000000000000000001528541de3a9d4a216c0e60c31d2b7c7cb91b839fc31307cc70f18e9b87b92bf5b9a9dc4eaacdec6e6bf7791e547d8a2976c8775b0eaa1e4aa384d222efc476305c7ea2d625cf5c67ea4368d7a9fccd10000000000000000000000000000000013faf7b2b8514f77021d8927a3b63bb7c57785e581f40ca82882341c13a9daf062a26b668844e58291366ea6ae2f179f0000000000000000000000000000000009060f9e1047f15f175fe95cb0914f4941bcaf071f24e856eae6f36263c812689a9217da277613c10c8e254a0933c80800000000000000000000000000000000154619e4ae3901789ed3ecdfc76069d8026a3e2cf142a144e8b58482233380690e378de6b81af0ed9b6536da1cc2a30b00000000000000000000000000000000040c1bce922503699e1fd5ac67725f11d7f9bb6903ff9204412f65355be69d73cd7330a3f7bfcacaa9b078ba6b9a9f839db274233c46caaa9c99690fd00fcbfa4eaaad7c41f8ae84313448c787165f6500000000000000000000000000000000103d91916d537379d6d8717b17ac5b7e9fedd98c24890b51c027cc086458259767d989b3ff9d6adad72bf977e4d378f400000000000000000000000000000000159c01ee371622378339518217dfc0570178aecc938b4a008dee1a6661ffa605c0f1472c107558ea791e0959d7dc1c70000000000000000000000000000000000ea3e10cbc3a55ef2dc7bde7a2e80666557e9e8fd9ce77e2e92c2c70777afe43c23072e263e1def56cae4b6d3772db96000000000000000000000000000000000cf1db638331c47f9080c04117ddab4ba79950563810d50e04af819f14ae0981f6e1e94a635fc90226c8d7beef0844354ac9f9ed46ae5aca33af9ba1c0fa5a2138d4ca02b962fd1d02b4636114ce19970000000000000000000000000000000000095c82c58182ae9a1ba14421c2966d687f7225ccd192b24097f997b471d13b46a048202712cb2d8b1be0ff40755dcc0000000000000000000000000000000017410aca05935a06942f673d1937a593423cbbd226f6707c5922306d28a60396baa08a941122dd4c583331c9481a734f0000000000000000000000000000000002c1d3a1262ce8aae42a6ed10d8020c31a468127e1a59d57d2d409ca9d14143d9fd21353b260edd8b387840580698846000000000000000000000000000000001512e29256b6b9f5a7ba4f79dde2c915b162e4881856258ac2050f02868842381518da4ed824243692b131710d7201f8ab300ee55e90ac046dbd772da788dacddf72c559d9378b39507987a9774301b0000000000000000000000000000000000ff83bf1d50fe35bb3d1bcb07b02d78a1b44d2e0c6bf82c600feec3897fae8b93c0ef05006c1322af0a732392dad86e8000000000000000000000000000000000d70c4957cb3615027cb950e4224d41849b9ff1b435ce936384fe17c4d7bc2883fdbba5123ca0c0c010651500557e1be0000000000000000000000000000000008b16fe9af45fa913aa7e5d01b5b58f946004eaaeeeb493759a5bc2b192d2dd71af24ecc5c6838b5e267ec2dfcf5c17d00000000000000000000000000000000038ca027c985af3cf60cda13e770fbe4919d3a5b413763c8ad155cb4903312822366eb986f2ec9e0804594ad4894e468275b22db781d5e8fd07f36788bc1219c4b4a13554c28d92a381adae111b265730000000000000000000000000000000003a313d6d41f1ebd6b98b2061a2d85943e52d89e4b8680611d41ea182385e154da24248faa1563e6ad79172f91a8763f00000000000000000000000000000000038d9388fe9169710e1a205ecfd03f674b47ba2275794469dbd5f193a55e00765c8eed026363b41afda417bdd8910ea60000000000000000000000000000000007a75f53d9b8e5eef19ef6f5fe8ce5d5308a1a7d02e0bf46f91a1e0cb22555752d82d8471c123269050fd8f35a272f600000000000000000000000000000000011f313127a036403652fb2f83c5122fd12c362ecba2251bd6c357a964dd758eb2a2c3053dc668b9a4bc071898d45cd46ec69b95dccdbf193d9ee4c51615c0b7be5ac6bed3f2559f0cb2755c634839ce7000000000000000000000000000000000a43335eb6ff3bf2daeeb1eaf44c2782eeb517e82e55203a247b7a396e26fdf85f93695753c52c68819b58c95f361820000000000000000000000000000000000c240b7896b3dd0c318dc9ffcaa001d20bff288def3ce42752d660fd705e1544e292a5a0aa3a9a80ae91cb47cb938989000000000000000000000000000000000e5195bcc4ee8b149a769322165b6a3157ee7d04546643390adc812b6296675dbd31168b268df869a6722a7c8f51c79d00000000000000000000000000000000004af7dc8a5c552f00d55b996d193a9571173ea829eba8fadfa7becc2f4149ee7c6c4d2c8c7b1970df33cc56e450657331e2bf1816a84c190eaa850ecfe1a9376123e0d0732d90ac3537668f8f18b9f70000000000000000000000000000000007860c3403607d4e13f738357e18bbcc4df10fad4aa25776f84d3c2758624a83aee0996146ba17a812384e1d67a7c54f0000000000000000000000000000000002169148d86b1f7a0ef75d9bd19b6d7cd66da4293fcf33fed9241544dc2564d980161a6bd959f3b43569312bff7a23cb0000000000000000000000000000000001897c121cbf5e82424cc50078ca7143a0c670f1217a9180cd2a4700e06aa895cf84c0af94b7c04bfce047a7d1f8443100000000000000000000000000000000040c1a0c4257f90bd83fece3c9372842a148132d2dffa956729e741ce996d229aacb04387d51a72630329230020b2235f4087feda4bd8205d96cd0bf6eee44c27a6669d7ae8e16c731849cfbb2324e1e00000000000000000000000000000000058c001ee1343c6cde55bbdc4c538f5d14b0e8c199fb822f080ad96ee764bd1908f92260ce60cd521919f223301ba1220000000000000000000000000000000000f8943c35e7fb8b58963719f1b9820153e0831cf81dd208176af7527781ceabcf6ed2e2276cbf374e0525952bace0c80000000000000000000000000000000003b43ea8c32a13c014b05326f7b4ad5b5fc1bb2367866a69373ba91402f4b45409c6d034898e8b0ec3b93c2878d59b72000000000000000000000000000000000101c371ab4d57ed2cf17dcb731117b1986bffc586529fc1edc630de1c6f4fdff1e10b0895907bb81d2ccd3eaa96c04a67b81583fcdc9afe5f35974dc9b6310ee8e1c92031a49c08b05555fc0d33517f", + "Expected": "0000000000000000000000000000000007152d538d0f750901466c1ea34a16e7b0e1296a2a3740568812587affa5c0c76ca2055804e24f3415a403f06a717c0e00000000000000000000000000000000119c0c282d22a01524d87eb850789c4816e7dafdb2782b57c32409b1016615beeee2067443835466283543773cc8b427000000000000000000000000000000000d68137c3df081a519747c044950c3231ef82295eea5b7040843668195d4549c8ece4a91447e0ec89530bc51277535fb0000000000000000000000000000000000d81a4fa2d32ada3e08a7bd4471d45a6afd2cfad5bbfa3d378b1df2e0749f9b05b465be61cc9d1a0f4abd56dce03dbc", + "Name": "matter_g2_multiexp_37", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004b153d6554c9879359052717457179d8318f8127eb73edc1d6ac2efb1ea9643c4357cc813d1df49730b77f995d6d449000000000000000000000000000000001533a450737b4bf8edada15446cf21ebf82aa7bec7943025dccc4784e1070fbce430699cf3a37a36a3ece692ce87639c0000000000000000000000000000000017b8afc300bd70a3221120f6fbc37a8e6158c48b476f00992c6f41808036765071bd0a76f7c641443b97ba523153947e0000000000000000000000000000000012f686b4759a3d5db2325508f148bfd6217e027fe261d3ed7b8fd0526036044dfb563e1c4399ec266e140ca372120e289f3c65c2c25c6c37aa45b1104745cb8ec511a165ffdb7e304f5478aa3add4d7e00000000000000000000000000000000061c8288b7bf2856c075a176d1086fc49f0359ca3e7c1aaf5f151e6462916a4e1b69b6decb18823759b620f7593079c0000000000000000000000000000000000877af18cfa0d029e7c9a5833b346c7fdec06e54d9641d3953d3cae0e8912bac7c990f8864c2adb6e576442c634865b6000000000000000000000000000000000331490f42993de3ce7cdd53afb4b310f25881710a23f601ed95961bad4e9cbf57d3077803908a91b65fc32d1a84130c0000000000000000000000000000000005aec079da804fc572bb8eb867acb93a24ffb6611eba920d2ce799c4c80cd8e73b3cefe989885167ab685365529b4f2a8fd50c46bade91a13d6dc5a06ee62e5e89e0ae7ee885e5516ca6c2dacc36f6f3000000000000000000000000000000000ecc7abf4f6f9692cf3a118cd01abaab4754c90d1a59468d402bd699992800c2994f47b2094878604bf7825f125133e4000000000000000000000000000000000662396427cc596458e880bb8a43dbe046deb85601e3c64556990de36e8637e8ea3b142a8195762910a83609ca311c3a00000000000000000000000000000000198b9c52be68d073910f5b26bdeada9e9b308e4541561a8ffb21fd8e69ec9d93b01ec966fba65be27ee53d4857a43e120000000000000000000000000000000005201975985cac810248e333ca714cbcac0ede46bb915d8c857837c80c805898d0f9ca0940819878a26d269faa02cb86128db1a106328916ca5d63c0b5722642febed26f00a89430d52ec3eae25a019b0000000000000000000000000000000004e61ad4818ea3c98ed3c0d247798a1a6ca6bcb35a1cb60bda9394272ec092c385661ab93a42af439f1b55ee8b9c0cd4000000000000000000000000000000000ee0b71ebf39e4009bdb310fe3b555cdc860abd47a67bf481ab36b5ed0c00bdca8082abfb75691d45e10c2f2d777be19000000000000000000000000000000000e9582e3b5bd580f3ca7ca1f58e39379918f2d04b82b418a91e133117a9703f7df4aad30d48a47e29aeaccf5b8e33559000000000000000000000000000000000113b4c068fd040cd3300a2d1ef658955b014e571e7c77594edd31968037c1fff241da88e7a88669a569462564e28cd7d45665afb6a864893e389511a0f7b2df74c9e45a86fb69f6bd79854e3a88c206000000000000000000000000000000000d8b0bf633072f19db61ea263a1dbeddb326738396caf1196e31e2cbe99a68e8c70f8db13cfdfa4fc4494e54c1ef28210000000000000000000000000000000009ceaf2a0c63604afb8a903195933fd1ada0e5314255be3d74a95679c7a7845785e22d2c0c206f3afd62110ac9810c2e0000000000000000000000000000000003a135b405f46ae3f5cbdd63f4964cdc5014c9f3405c2062ba17423dcd22b8f2011638d520ce0ec7bb0cb5b03e8ec01700000000000000000000000000000000066eafafe1cea67aa6de267c767f49d4a3fd44c28d45a920fe9b3cebdeded883d8960f5e9fa4cc179246918942b1428d28f5fd09c2c1819adf8e6d0e0f4e4681babff46757edeff3839e9691888c13220000000000000000000000000000000017e37a2f1c892fdc58ac3f72cc5a5e2b7c0c87333afb06de89f7a84b1267695bcd452925fb2f15f8b7b20aaa85a6b5650000000000000000000000000000000015b2919343962337a41b54076d6735a093190e1965faa33eee800f5eaa43c35f349aaf93f19977b6fcd19360b27edd6d00000000000000000000000000000000161afb1494482f953007038557c847e2cbf84c57c5f5b806e3b0178e71e3238305f733943bea7ad6f2bc290778638e6a000000000000000000000000000000000c27a2170fa584863697292e626e2539aa15f3c8eee65cbf1f1b7ced6297248d059fdaeb9c955437a51cb016d1ee97c3e6e61390ef88f20591570ec1fe71c3ed769ee8e234c7cc7303a4cdc065717736000000000000000000000000000000000313a30edffaf864d0f1c6bdafd7d1e563cef434d45e71489e9f9e4cc6700e44991a99220f53f0cf5e7de5f6e4098bf20000000000000000000000000000000010429081ebd2ed6fa07de6ab0b7bd559a26a43df99fca0a2252411b4554dc69821ccf3df1b05114da84a616ccee0a9c800000000000000000000000000000000131a31442f80da4621f7691664e9f8b467988fa039bd086a2d64f9810878b557614c27745b2e821016f648ec36ee797d000000000000000000000000000000001160cef9f5e4d022baeacdf10b3bf9d7ed5e50627a99e29df1be3667cb872b2af333f803bf426314369b490c2eca642aa83c5af2f9d10c06552ea7d1749cbfa7574b238433c1c0e4788efd0cafeffa57000000000000000000000000000000000b20ec53bc643bdfda1e3947b3773d748cce1992e2ae27c6b7460d90d48e08eb9240879a5a7d3dc3189f486706438dbe000000000000000000000000000000001024bae4a7f71d3d2fb8246e82d95664c4ee8bca4a380c293ea084f749911f984aa4c6f266ecfff69c4f57e20c0660ca000000000000000000000000000000000b58472d81a9f16d2fe7af87170ca0c8c51dada62a4b2a713cae053a0066fd268283a785ccf269e05d8873cd686d2f4a0000000000000000000000000000000016b68177bce92fedfbd90cdb752bc332f46fde6673911c016fb9cff4912d79d3267bf629c33097cf8979f2b913c0936d4bcc88d85a5a8a29dfad37ba97ab3a5defde4ec356146db8d10f33bfb36ddd37000000000000000000000000000000001030d5791bd2a27469d242c62403883ca167303d907839e608acd827b4118b752840a4eca0acbe5df0b447d6651e517800000000000000000000000000000000106d65f922581237f779ba3e66608729dfddb2c487bc927f34e5e39707f2c8a82e8c96af68e3257c7a9876a05a1b01d800000000000000000000000000000000115bec40b8fa914305b1d5a85b65f0811517d36839494ba69c929fc2422f7e8b85d78df4e1687ab0087287eff29c65430000000000000000000000000000000018d78a75ec057cfcf179fa2ffa7dba79cabf6525dabd69ab95b23dc8f293aa077e46e562caf447dd0913ac9dd60ec76b29d5d818e62c9791c320e01a3164e142d9804e9caa7f96b4c3b76baff38ee2e600000000000000000000000000000000023f7736d6de94b08d9e9efb6f32f8c17cafb1e1b9b1f3db6e58df72a451c3225d11f4304eb0d702b07a7966f95a11fb0000000000000000000000000000000007b3204f258c873a6fcb48d0b36c98ed5f99b424cf4f92a028174e0e93db2af549648ea95fa8c7bbb42b2a10eeceaf8500000000000000000000000000000000165d6e769b7df91374dfb44e18d43e03ae12ee10d8a618a20f67332cf96492ff514eb7de06ea53096e823770c686c32700000000000000000000000000000000012e69ca1e106411165c06ca15988362de583c4a05425e2f4aba4c14cef6d8d04c52c87b4fb26b1557801f55b02ee8ba971c8aad41e401ab6c49dccba28ef26acf4961978e94e633b72c581ac03621e4000000000000000000000000000000000e8e6bf1c8837c31446959242285e9b85978a5349e1f0b3447e380a7bcd6bce758bc6192cb880f9c09d6ad4a0ee36eea00000000000000000000000000000000199b361ad0b435d7a66b46a43d06e5898376a6c260b68c965f7b186fc75d2f321bf883646e7551eaba03181907d3aad1000000000000000000000000000000000a76e3f399f31cddc4dd4bc22187a68fba31fe2371291ab515d22730d320ae4240911c755750f687c7d26aed09da4210000000000000000000000000000000000cbc8dbc004b9253ba91b2238c92bbf7883360c7ce39f6e15592a8668654950a3fc5a94cfa97f5ddc60add40c32a3630659ff910eea5280dc5c24c542516053637a5dbea576a94a22acefc902e56568e0000000000000000000000000000000005448b623604262a9cf1a9a292c36738960e132bcf0ec8e61a510008c2ae0b51b31da25f2bcf0d7c0d4ce15b1d7179fc000000000000000000000000000000000b61df56ef891bac07a873571f68fe43f79438a31038cf8ff97393ba44cc47408e5a6d64e9ebddf0195bf914f141e668000000000000000000000000000000000d196ced22ddf11132bbebf6c85bb3006a194cebca975d74992ecfcbac546f0f25a39ed5d6100768c1f1a791f3604d12000000000000000000000000000000000f727cb947849d2d7b046218f084283e5513e8582229085f9f98fca522879543429cb8ab435aa3dbf01b68ed258d82c112ff32d44eb442a711250875d86a401d0dccc95e5ee39bec71738fd812d487c6000000000000000000000000000000001044bcb16b3384a1f350cbd62bae568c96932a364c16b34d91ab9b1035ddee93a02920ab4dbde2c6f254031909dc3a450000000000000000000000000000000004a29aae48210289e5f588aede0756ddf60724b8ac54de5d9159ea834d5da98b7a9d09a6f37bcaeaabc559dbdde58b6800000000000000000000000000000000112ca953b5ba652c715fd20e3b85c5bdfeaa7d577aa49aa4656d142c9c2afa3d8aee151338f59a199f3c0c3f6a430d6a0000000000000000000000000000000001ebc7a17da7809f9e744cf7f13fc437de34d3472f022493f58bb979e2282368f989ca0982098a7c377498f1d8d32583666b820fae2459b98f9bff20275a3c96ddcaf98a78f3f5fa4a2c0a26cea79352000000000000000000000000000000000e7c3d6bef4b1723479ab6724cf7858c221993357b194e5055db96b8168f8d78f72aaa4a2046be17ae9a7eb00695ec510000000000000000000000000000000015e85e85cec08133b86738e1f7a738de455930ffd5073997a1f1692c28044ac00b634b90eb24938cab56e286ca0dfaa400000000000000000000000000000000164646a4767ed69f9280f96be9a7f988d17c187162554239797436a0bf4c4ffa7e4f8387c3d2406a7528c021f56081df00000000000000000000000000000000197b1080bf3ac3ef7bd6123a55f20f1002f366d4efea9e14ed92fd2ef147e2b5d9251a302a85172235438bb2d35943a740a9181633a146d7f307ca7606cd45b8e721c46b955a6989d421baafd8e40139000000000000000000000000000000000db7cfdfd58a6ce9dbbcd5d65cbf22b5e1a81acc70f1c85651ba962d61fbd7ad83e5524fb9aa019c6bd75dade96f7d4e0000000000000000000000000000000011e269a390fd15ab1d52d38de78ec97eb6202604fab02c4598ecebc7635ac91ee564e751275a485fb43b933678f11fd8000000000000000000000000000000000b8597a00d2401664405dd1fc7d69786353c86cd4699af981fe869f266f9087b00df22a46ac34883173bead870798f650000000000000000000000000000000009117a49b3f2a8a850a0179b558319bdd19a5f1f4a45af0ccad0890e63b222d028536e9bb612093cb3f1068d262af90d662ac80797c633d8b9c8907acc2960ebdcb5bdad82d9fceb4411d5173b7411fd0000000000000000000000000000000002e1311abb9df5e4d76959276b6f725f13728844f8c7dfe5e25469cb95c6937a822282b3baa38817e24a6219601132bb0000000000000000000000000000000012820e6ddc50e19a8f98c15013ecc38901a4ef8ec2b79b85c7f7913da24404afa1c79045f1318cdf271028126f9420a5000000000000000000000000000000001794e653c5673e51a3ace631c1a1265dba07fb74235506b2149d42b90eb16afc26ec0ddc54d03f7ba2dd6a2503971fee00000000000000000000000000000000112479bdabb9dd057b325563c666910c01ef66adf47aa32f5a41bc9cb8234750985c266fcc329ea3704e2b8d9b15bfeb59401af15d9b83e2ad68cc8e2ad1508391516ba0b26fcc5ec6eda8b318a374b6", + "Expected": "00000000000000000000000000000000168c90045dcccef35cfe8eb642924ec2629db886366fd9ebc082019690d103627865f0dc39ffdd2167111f68d8d03c89000000000000000000000000000000000b6f0928a32672983664ad15252b3f145afaa04f11d5f43a6169a2fbdc0b0a04902a183b25e38987c45579ac6d11011f00000000000000000000000000000000195c4d796989630f85df4594eb8353d44bcee76d82b73ff7a57069466337b49b875b3c1418d22d79716ffded7e704a6c00000000000000000000000000000000032db644ff8ca6a3b1ac7bc51ff783ce0cdb7bee8b2c21dcfd3adb56a3e210390756211f22feb3dd4f706e13e5cc163a", + "Name": "matter_g2_multiexp_38", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c675cb5e90e45300619be91c752a5831ec47b4143c28330422cb57139882e776c1c5f000d6032cd87c16ab3b1c08ee0000000000000000000000000000000000aeb4e78724d46a55e5f101564bc05e0a1be1d80a781ce8a19607322e82c7ee59db9f53ec34c70bef0766a5b965f54b1000000000000000000000000000000000933e8d7c2420cc553afb1c88b5f64c7a39f78272b34b5611972dd5ced3f639ae2ed2aaba470abe829be6ca6d666ddaf000000000000000000000000000000000ac0a9b46323ccabf4b2024e3a5b4717cd8de9ed7de8a78e33a38037f802651a4b43380a746890d93289d547d94b61bb9c351c585d1920b8cfb89a5bcd72fe041b17f7bd091ba505b287778b0be4e87c000000000000000000000000000000000196597114fbaefb8108c185a85d0fff0f6bffecf056902b22d61cc70b49a747bb35638f5b663830a8d2ee15df9fd5a1000000000000000000000000000000000616ed44a5fe69da994e2ada03a1e09065964223333229f5f30ba7a452830848f599ee21810a95e3659cca495897bb710000000000000000000000000000000012d0631e524ee9d3c776c79137499f8c9fb752ca93e92497d89973033d60971da23f672f140c1a753b4d00d08a00babc00000000000000000000000000000000111159e95d131c8cbe8df75853fe9b3f24013daa083e57c5b716e77f6fd3872dcfe0156382c9d2778fe886621be19973ec42da11e95cebbeed0ebaecd31be24801fdec8b81f4046fea52f553c4e7910b000000000000000000000000000000000a7d253487591fbed97381b3a430404b87aac04073e5931ee0bfd9ea6e0d38a41090c6dc7f6a591336fc58a97a3bea8d000000000000000000000000000000000647c67f1816ae6fec39033c3169eb1ea89e5e20e755cfdea33572d6397e7e87635c7439eda4912361a32de313893206000000000000000000000000000000000e0cbd54634d070aa3c7a503df1171a5cc435d050def17395707bdf7a61cfd539348ee5a4c29c7845cbf0e5df0531f530000000000000000000000000000000007d006601dc1e092a616eb470be35b5d32742dc6a2a4d71cda8865f071dbba9d8a3a8cb10b486253b1633e4590e716dddfdd8996780460757702e34ad98f5f64a8c1e0bc8851d6c97f02749b8f77cd03000000000000000000000000000000000c502a19770a892b2fa1ba59900a36c0ed054a8bfa0c4e32bf471b90d0da9edca6c06b133c8f12e233b104262a81dbe00000000000000000000000000000000011801f159086d07833a691182595a42645513d316c084b2841445c4a63c6bbb402664a9a9a100e8d6436337ecbf398bb000000000000000000000000000000000f2b9bfd8ef6286bc41e9f47ffdd3efe437aad553c9da02b3c22ca04b5578d634c0543a07bea966bedf345562218c2190000000000000000000000000000000010be5ffe0cc9f580c74e027aad09c213189fa4b7aa92160ce813b8d398b2e2803294e1a730cf5c891cf1546c6bc91414f256ff23b38b3b986a62074c5a3e05e86ead9431fcdeb67512f6d502fcefe3c300000000000000000000000000000000132cd5220c125759a18c31313592eda774247f97b5134111b01ef28dad5c3ba4d3f13d1af9076d663f7e217258a6fdaf000000000000000000000000000000000f06a5b03daaf8f92f9a302f06413044ca0dcf2be81d9cf016120312fbd41b273650fbb542d419595fd2815a809c4b960000000000000000000000000000000001b11acf12cf46e40554a1d6a833566cec1b2750f3f72ef77496477831d5933f477d59463ba19c03dfbbbd02fcbb680b000000000000000000000000000000000b2aaf91827ba923c8a1c2fa1d6fb92384c9f48f8f77273056b94245114d1f3cf66fdcab330673ceb2e9dad6c1aed0d4c01b3c8bb0acb17198bde9adce3b0f7ed4cd8615f837aee928524b0984c99d0e00000000000000000000000000000000051858339be99d1271152bb390e9a2ec0c0760b7686804ba072c46db3cfc4472404a9f87d868a28f2aef16c9e989d6e90000000000000000000000000000000019a33f21d0bb8303f540bf26816f145360bd1e9a8229dbbe7981f1cb5b099e814f2691fadbeeed8e4c4b772bbd27e60600000000000000000000000000000000073eeb49aa7e601732dc0888ae6b0f5e8dde3d97b818155221f5ab8c599eda75b25c86f15ceecafdfb9ee4abe3419e10000000000000000000000000000000001507073b97d494de26e70f18bd1723d931cd2a88903ab6da2aac3b80fea78ce75caaa9b99375780d759fc4a1683950bd458f882b63c99ada33d8215111a6df21c8f7424eb2fe9f429256201d099413c10000000000000000000000000000000013b5422deb0e80bec71309d03fdba007eed33c3ce0fc6d4f9a0d063136b3b85a6fce90ee59956a9b91e1caa519f813e8000000000000000000000000000000000829a11eb50f3bb1a47b72cfeec9d1f63e02b9f7b2592174c481ea7b72a121645ecb36b3d1964b082bc6c7efb4483a180000000000000000000000000000000003d3aab53814f55fa97285af2dc6d32cfcf5a08032d2c15ac83ea036603e08a53e0d2b8d93a25dd969937c113e78064a000000000000000000000000000000000c938a68688138149cda64f168ac1466c401196eaaa44a464d9e345c422948767ad1e25d1ce4cc5996ac5d5dab61516b804d7a35e5731b111a6904e0998d90ce86cf612914152fe3d2fca0201a41166a0000000000000000000000000000000001ab96f0b60213855fe221fdbe2fb22da6bd6cad8bab8ecb747c9528d3511976236ffefb34afc462abfde13a99503cb900000000000000000000000000000000182fb121778cb002be3f90e2d6837a406edbb609bfae8fe59837aea6f5f6131a10791f92188958b57059b7b9a9d3a24500000000000000000000000000000000159cac269098d223ee6d145a4489f05875b6a546767c023dbea62b3cfba9f8518c9f4d2594d00ceac325f3d8ef551369000000000000000000000000000000000c0d2e4e7aaedec7e53bfebe8f7fe5115720e58768469b6673cee3473b08fb8cd1ebd0514689ef65d78d008889e3ed296f1629a801db6bb4066588ed79f75223120728c3a57f7129d88f7f877149223300000000000000000000000000000000079c40bd7fd2ce0f48806dd2e88850ba988e5adb0cc5120977da8110b07da264318fa034c0c213590a2616f0ebe40f21000000000000000000000000000000000905f41389be39361fbfe7641394d30870a079f230dacef89149fdcf81a4d1e0e10b9fa1c0c3ecadced9aaa19fa9dcc800000000000000000000000000000000192f50e08e497f902403df40a504a1b4b82f1957572a9ab7ef97f5ab93c6fb876d8b08f318244cba95ad5200fc2a6e34000000000000000000000000000000000be7ef45a14871dbb344a69c4036af4f994a22ef14540377d1144a92978a23c2d678cca47cbc18e8c036714112d11f7cfe80ddbcaeb784e24975b9a42801c89bdfb842cbde5fbc0c3d70c0632cfcdab80000000000000000000000000000000018d7410f0105ff03cc4ddd87a6e0b65ede4abd4609db5ae53720851c90255757e63c6482de4651eb1d3669b1e1a2f8d9000000000000000000000000000000000d4223be106693a672da890b64d2653135119983639f7052eb32051c34113022080ce2355a93a2f64a75d8e0578b2f95000000000000000000000000000000000764780391249d0c987270bd181a44f6260ef82eb00c06585db7ef09e8b069e46c4e0e659a081ab0fda491534b71b0ba000000000000000000000000000000000a8546031e6466ae43643462b7617703a63841d6d4cb0c09ce63b2fbe2c2ba7cc35367191d0313717b1daa665bcb54551aeff13de7bcc4bc2ac1b37e28ce466805757dda29c9c743eaea9da33f47f4fd000000000000000000000000000000001922491dee4e0f29a1dc090c9b48fe8e6d70c3441e532021985932005b22cedaeea7d9ce1796808d756b740ec63f8ca80000000000000000000000000000000005b34dae0e630be6a59ccae17b44eab4e7f10be2ee700bea15f9771a724f0979798617e129540901a8aa023630a446f800000000000000000000000000000000095bdf612289258b31cc79188566ceeef6fd66858b4dc060864d378cbbb69f951e9c6bfb3d1384014507ff29f9446f410000000000000000000000000000000019f06f11a833c06c1c9227255e3a1d74172e73b06675c547844065dbb909ad66bbc150ba396fa1ba22b7183c0fe80e96c4984739882bd2f882e12660815b96d2af7812d7ae87f5be034b88e9e04fa2890000000000000000000000000000000003de8082f828ec51e23c864a16147546ff60b5fa71897ff4c120556af5c6616bde96b6e53fa673cd1f8af503070bfacd00000000000000000000000000000000093013f75b6a19b5433b3b5ff044384ddfa258420c80fe81e0424e3102cbf9e550a946e56ba9746423ef745e33da51e7000000000000000000000000000000001227cfc3e9a8d6a71738c514c05766ed4f1f4605198f5a3ad8309c0a49499e4ecd34ba1ba7677d6d90203e54d7611807000000000000000000000000000000000a635221d514e58170ef299eb7f5b679050ee24c589cc7e348b2905a3cd1b7bcf2010cfe168f5aa60f4bfe15e59b4436e7f33141d383a1a927b7645656ff7a5795901a997e27003c5672ae4fbab4aecf0000000000000000000000000000000012ff0494d308d3e7321ad4c4000e9dcd19552d5e4bce8504760f066e2fb2509279b01f1568e3c3f6216bd5328cbf72db000000000000000000000000000000000038c6e8f0fab30b5c8e4323c1fd29527845c29e1a26c70b8e5284f7ca55fb55ad4ad5389b5280927b98907132f26b76000000000000000000000000000000000aef946b9b9e9fcabb36507c1cf441df2f5ccd71ef9281dafa5e25bf07d69556e4143ab402dfb38aa756bb6ee009a6890000000000000000000000000000000015f69bc7b0a6f2cb64fd0897b421e339fcc8637efced8bf33f5aed809a38b49a2e6376d18b1bff0ef70df1b7187ad048fba4674313a9727aa4b733832a0e06666d3e38184836edf786317de9dd055cbf0000000000000000000000000000000009e8450887137cf45b04184b3c6fedac6676cad416a7646e9980dc99a6d6b62164dbdfae7cc20edaacb84432627e6e550000000000000000000000000000000002acbd87ddca9dc775da01ae026f1c60f1cb5974ce40caef80cb0d2eb7839777c1f61eae0472c7568ec9d0ebb2ec7dd20000000000000000000000000000000017c295c458a9dd995d848e3ba585f8dcdec4185a953e4b8e3ca760eb3e815e39a8ff60416e1e6f974cf7e7b086ee4baf0000000000000000000000000000000003cd8725e1cadfbd80585bf5a19e086abd631d6787403edb4bbc785d1a81f6108f451ff642f4df17dfcf94dd6107352bdc0c4d0e34d8a16b3bfb51ffc9b3c353817e8e357c608b5075c173204963606e000000000000000000000000000000000b3cc99db523b3647937b694fc23281a74010079351b2c7d1ae4cc9167917f06c06e627c4ec44af6b09f2886ddf309b800000000000000000000000000000000001e2681dd123994627adc92e6ddd3ffb006521d8bb03040fe1989e4f709e4797d143cd0bb749de33c8109933c709e970000000000000000000000000000000017df13f532bc9894be932e72c609c0386d32390dee95dda45821bedbc1067043d46007b39b6ade871bd36d39a17dd04d00000000000000000000000000000000162db4d1e956fa5b5f9ef244dbc0c6d27718eca7dcc512d1d7b97bbfd2bd00cce7941d1b9a170da6341891773a729e9ae4e31f5b6629463311b9d3c8333c33c5b2e79761ffff9863acd9d636e1a9586a000000000000000000000000000000000f0e4b606ba0a175bf57d4478aa286640ce4b5507f9f9e354fd96c45443333f6889a93012d663d78956bbfa7c645bb9d000000000000000000000000000000000d85dc4d733f0498fcb10e1e814eb61245203d6c1a46181e5a388fda2680640a1271a68d645f8fb179c0dc3107fb788500000000000000000000000000000000185b02140f6314cb62bd7977042ffaaec41ba8788d356047488004d609ae680c2f0cdc94e59a3cf90b6651298b6a81d000000000000000000000000000000000038ce717d08d367a9f882f2241ae4cc0e8a31418498bf68d05805db2e162d053a10dcff85403dc473598089a78dec27e03f256e58f60307ac1888a1b0b14b56c7435213e271eecc79b4a6f88d102be4c", + "Expected": "0000000000000000000000000000000004cb919a72e67c31b3409c28dca1d57833a5066c240d2889f5bbdd5540ab2a49484c2462b25da197ec8d93dc8f26ea83000000000000000000000000000000000e1ac1dfcfe22ed7ac52c701a7221b542ce72bf59d62cc49f95f8ba64c05060671098d40c83947dd1952494833a19b55000000000000000000000000000000001331f6ed8ea5ec9b9e1a14997c2c9bc9af2ca305b313e2bc5c5bd35308b7b451a362f8ad61d636dbf77d1b2388702d8f00000000000000000000000000000000186b85e656e45cb5ac9a2a2009353e45749b53dcdcdad4f378431a0e4a317652301f834617e14dfac9836c3c11512aca", + "Name": "matter_g2_multiexp_39", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e6292b4d3031fcdeabe62921f0c562606b1ec6139b9c43938971d7851da4945cf69f39652425396ed1b2e70e65b9f55000000000000000000000000000000000e94bc63f3b8944ea6bd7bab811c013fd61303aa7713619faab85a271308bb220e2a94b26f5c7e4136a3d2761dffea610000000000000000000000000000000012313ef65ba41f8e0a57e9b810c13d23241e8430c6ab967a1a9bf5bd6308e89c135e00e789a5610694d146840fbd877300000000000000000000000000000000165ce83af7edc9e701eb57b332597305fedf4b939f3a13a95a0bb3d119c2a9204a4991388f7fb344ec8f15d32cab0eb5eb850f01feb55bb99e4accee0aea8fe6ed0bd29b2ca942ffe09456733aff10ea0000000000000000000000000000000005a88477765bbc8290b7eb137e6de78e62bbd929ca511cf0aa701f926440f21d33bcc6ac8f2ca5de57ee8116c685ba38000000000000000000000000000000000738074a9365c707190f882780b27dbe96179224103392b86c628b601e33b092a03e24a89bb6d1d1024862a9df6fce8d00000000000000000000000000000000188c713945046771bf852155ba412b4222173b6dec8320ffd1c59e9b36943c2c18b0dd3bd551b7b1367dde3e8031201a0000000000000000000000000000000017222294bacd664ec37e9b214407e5325eebe9753b430589de2eea13360783be52a479e2b0e9c5dc4907dd5f06a7fa822b373fd7e5806d227ca1f49ab0a7f8be2b5950906c8974de9f2cb4e13ed20a9a000000000000000000000000000000000c97299d7e18f41e538b91b75e962c3ce4e068202271b40469c58cfc477d7820e90a0e91d647e8ef5fc0cb822daefd29000000000000000000000000000000000bd1e11a3646c499a240bad708f97a49acaeb653aa5bafdcaba41c1c9d32d32c516c94a3db8816e0a43d1b1eceac7243000000000000000000000000000000001223ecf82c4622653ce84460c39afe8a967cbd87a2d75cbee1609161837c15b522480c4731c9e6de9c5c392ef1db18e10000000000000000000000000000000016c5e98d3d17c723548427868e3e6d7ef4bca339e41acef19e0710459bd4732de4a556b22cbb49b823c4ee656fa354f1babde7f3fdf9fba868b5eac61337be0d73517ac3f06c39b4eaceeb27ab6311db000000000000000000000000000000001125735092842142cb5387f1ef8fb69a3535e1f0ccce59661183d3104ec1ef79dd87a7fb36159bc67bd73ad403b46c1500000000000000000000000000000000162caf579539574199d56f4e756f1532c66278a55b4f67f4f4090368260f46023543a8a18d49e8c5783cb65f93d750480000000000000000000000000000000003accbc87996a220a625e36d5cdf05d8c16fb353068ad819f94ba8223cdf6436f8d822719153bdba620a07c5dd955fe5000000000000000000000000000000000b53c8a4b62466c998327e0c5ad65818ea383650bf0977d98a8a94fa9653fba276f7781af9f5a4e99052ee3ae65c283d5ba1635cf82b25b2d7e466717f5716c33f5f3e826bdedf19dbc1d95ff0c8052e000000000000000000000000000000001264608a59c0ee9a26568cdcea8801cc8cf6616773bcb0971234b2d987563270c7b2291fa035c8f2069ac99e16c68fc0000000000000000000000000000000000e839d8d982d6663ca4552527f4fcab6ad5e0a444e7b5921055c774871601d342a151133ae15bc76c023b7ea643182ba0000000000000000000000000000000012ffd0696b7e29b305412fb840c596b66b77ac2eed936fdbe0562541e4de6b3166a9991dbdfa0f79b78b4b86f11291de000000000000000000000000000000001777ece357f82d7303aa816237a0dbd3a1398574f4061dd2fbf6b32af38a65abf5ec9bc53bb8ede932db9cfa0842d53a1a0a832e5bbdf897553c1aed35fab43aa3f4510c1782115e14e5d56229de2dff0000000000000000000000000000000002b41743325db9550c3a84af80bc20c54b8b0b685d7f84d05d14dcabed2f450b91675aa8c5c650eb81151bcfbf1603b4000000000000000000000000000000000f3d3e69d475fe1d4259f18f193cd84a90b91589a6502588106f0a577d1c1dc4b2feeec20a4fc30b3e403d6ca9e03894000000000000000000000000000000000c10e2bd1335363fe958eb50981b99bfbadfd1c414830857b5257bc8fa6e26b50989d9adb5b3a2fa610b3151f8754309000000000000000000000000000000000008c825371319f4ebd684f76b567c4e9a389dce96068c101568dc8cafcc10896e3c20202b591a344d9a1c1be02310be9b75e0582e9ad7aa4a02ed5ffa22e55570c9f20e6a24e2186e8a2a2f838fa45300000000000000000000000000000000101d3f92fe64af93468229608007f50e3406719572acf265fb8b2a7051525a9cb67cf2e46fc8e098cf081e73f3b20c770000000000000000000000000000000017b1422f8208c2521e3896820b22a65bb2a9b47d7fdcd2ce57196123c1ce43c1db6d00f236d7582795d00ef33ad6d585000000000000000000000000000000000e261500a9c64f5ae107d6ccb57fa9151f5321ef4e80f0e271515f1eaaa5e3714c59bf97b39acca41b15d90c0505ba9a000000000000000000000000000000000c08c955b6df18444ce3726711d29c2088721fa0aa6e317c52a05f73ec7171ef8bd61047174c74afa1dea804c68a28e33b7252f8f3cc6341d490c5c4464bb36e012f1b05057f405aa907ebb2c983f646000000000000000000000000000000000985cdfb3934e0484805a1965984028d6c459654a3eea6ef66e867dfc737e1bbcd92e31020d5a4ddb7f8091cae2371f8000000000000000000000000000000001998c5682209153a261bf981e16bf1f7a6f8e5e566c1b0f975253ea62439e5b36c5e5060751f21941edf0d348bafd18a000000000000000000000000000000000c8822c1d6412bc45fea05faef33c65d5a6dd13aacf1279b9cfda2a2ee34df3146d45e3434ce8e5f242e9cf7d3ac27180000000000000000000000000000000019191b51d6664a3047aeb5590df2939b2cbb115ded70fafc2de4c2e8c2a955a957375314081a8838bf89d5a140b7b915f10427f6e461e7b63b781e116a4d5136ddc79ff86b71fa754f00c797c035412b00000000000000000000000000000000156fcfffbf01ff3c8a97e7bd99e59327d38c6f7f1083d068ae158d1901808b3c9ac96f95c2bcbdf5f74b36dd8ce58d7d0000000000000000000000000000000014c64256d1cce124c01fa727482caf8ccf007e4ae00e5277d984f31a11ce584e7633565c61d47bc8accdf7c28bb266b200000000000000000000000000000000052dc9f7fce4859c852d3d9e1e77bb7887ffd35d4d550726632acab3d4303ecf8b3ec7f4114dbd590ac20d748570899f0000000000000000000000000000000017abd1e5dad7ee06116a8131c05c9b48defaa92efc636ee34a2970d701c02b6be0345a58cd8749e582ebd105c02f10a06440c89f8b10ce15806938b7ad65ece194d2fa3cc8d7d5591bc1d52d010896af0000000000000000000000000000000018ce0fb077dfefd57f7943d432e12dc9bf92dfaa30f8341397ff8906b1abdf0c02b599edf85ba1e5bb6287aadc72d7a50000000000000000000000000000000019e5e9e3b0632ec10a26b7c1ec40248a9a8b230806c38aa24e47489a8aee5abb5450f6e5679e3f13c6ec7a79560689050000000000000000000000000000000006e257a74f45142817ea8044f403e98c99db8355d626c59e1d11c6859eb0dd1dc8af389f07562259c1f85411be6cbfe2000000000000000000000000000000000f463e345b004b1364894c6e8ab5d35bfbdf6b7544a576ed6b5c5398ca2074f67e2d80af1ff5b721fc126d3afadff1ef43f1bb26469b778edd10127e634fed4d749e25b41d8eba86eff2c068c33e714f00000000000000000000000000000000174231581338fc8c461c981d4949d18f5b753d27184ffb41568f11e178a271bfc69f8c73f2daed0fdbe5bdc7fdf8ef56000000000000000000000000000000001532474399d6a73501801e5f3fbfc6f13bdaff7a3ea7634568fe82745752ee15af23b16809be18788d295e044e29c05a000000000000000000000000000000000912eaef94ab1f3b3257b26c5e8bbe3f99eaceb8c7ae8da577ef98e24f3308abe6e6005ff674a2af01b4242f8ff87108000000000000000000000000000000001925cd635d0ce770f4925a3117721e96c316dd96708b096901ee04ce02e7b357428e4364cd488eeedf76352a26cc1d10a40251ec7a7e9f7cc29948b122010d9745752df3f4a9c67427a8b58122ad4e7e0000000000000000000000000000000005c4a7f26ef0416f34750badcbbb3bce075606435ee7f69b3589e21e37491f0b4a7a98c825ec222848f5e29618828258000000000000000000000000000000000381c5f6511c9f06ea1a76ca84adab4a26a3cde13e0825b3d81899d6ad3191628894d0f57787f854aeb9e4c57fd15d32000000000000000000000000000000000bd706a5b5ef0d4ee1b679a0af90c217ddf9242b7c39523c39657962952dc14e5e07d02154e05693bad08bfb24a2b19a0000000000000000000000000000000009f28a84aa5bd39eeb09f13fc8770fa7e2e053b6f5d7e6021da77f48b9c3807ad917ac671de88b28dd343c2847c5e8eee03e5eb477506c397bc1a5204b30872085a36b65b7a8df3e0e187f3022736329000000000000000000000000000000000a8ff1b15ddcc3684b4d4ecfb53473497feb8a04660350ab84e5719fdb0618d61acbb555174b0900b32341154eb7bec9000000000000000000000000000000001464d21df798c0242ac6aaaf3c579eb66eb8cd53eb1e5ab2727298ca61ea8ca4c7cf815bf5c9f94c2b76bf659a4e2da50000000000000000000000000000000003a25752a4360c84e9353b7f1ce74d5106cbd637ec5ecb03dd0752660fe5c7622fe2d0475a4db98f785307c6961f14b000000000000000000000000000000000163601a86f02900d214ff8fbd041934189503438c557138b6ebaca8ce3c109af50ac28074223fc81d6476a3a99559ac565cb04110bbfcdf00616c2826e253f61cf955756e94dffcbb6001f59ae4a93c100000000000000000000000000000000189597e6d618a20ecf9a87cc70b3e0eee69ffa4dba75056ebae93cfc3c2ebb368532b17d9f6c06f09e44d9f101397b2d00000000000000000000000000000000086ba610e490588e9385c8b6944c2bad1eb03058e927fb2f9740dbefb779bdf669a51af88b45985e8345b8cb168c13ec000000000000000000000000000000000db8b9cdd4a9bcfc9f7de144da0b33981e4dd53744cd260c4bf045d643a4ef5f25aa19edab7be0c7f8f5ab74a4b7f1820000000000000000000000000000000010198384a646807b16e2ed9186aed99ca3197b05964dd0348086f446d3ebb847907624f4e02f71a1e866d17a125e07e93ce1bb7cf7d7a55f0624bf5c4c35327b178923d88be748a9b079720c27b500e6000000000000000000000000000000000a293f07dc3f0da0da4bee671951175a4480a719d44cad3d627878ad2f17596f0dfbd6f43acc7a1f9857c5d1f453e5d5000000000000000000000000000000000be6382cc7a00d590f2aada3b4b75f01f8538caad2ade90227ec71e5661ae353e68789807a13f28b23b17dc0dafc19b70000000000000000000000000000000015a9ad5a6f1a511ffe1891ce260ce442996fe4d8515ca593e3e869cab9b18af57956b1daa43aec98a0281143b0c319fb000000000000000000000000000000001807a4ddb73a9aee58b54bab2b878bea8429cdc91384c8fa533a8c9d15c966350e892bdfce16d37a4048a763cbf25d71e2b4c64b363efef0c5525b0337bf407879755f060af451075f4345dea7e681a30000000000000000000000000000000015aa6b865796f88ffe770bf25612ad27942213131c566a446dc149fcc70a018230f1cc8b20461ba2c55300fd27930bb0000000000000000000000000000000000c39c4f229b23c0f65ed720d655121eab50f695864959a2aa49771b848730494d14597eb85ba35743f64eda897f95917000000000000000000000000000000000ad44cafa754f06e45dfab801998c40e5a9f56e4add5c8add1d7ed9e05d12459f2efe3f3367cbcd161f524c714f7782b000000000000000000000000000000001437b1f1a1399ce2a860f7c6517b14a2db264b2602c1c57b8eb04e165205842b483497e98e6b6f8a62e25ab8b0e722f04c85e47ebe2c26e0aa25661d3353b5d88c632182aaecb35303d8d47f01308a0d", + "Expected": "00000000000000000000000000000000077b81fa5997de07738e1b34d8e17ef4a9bde516577a4290253cc759ceaae745e10a457204b9ed0069942e0b487d106e0000000000000000000000000000000015e79be67a752a46dd0605e9d07d738c5732b2b605457ce056deaa1f7093b0bdc91b4c81c4c5462a51bc713a7fbb86c3000000000000000000000000000000000cfd2e6043263bda2b97798e1a7dcb24c63aa7197f2749f92524329e97f93dcb56429d82c1d63c067d7ceb38e6c65b5a00000000000000000000000000000000026f352d2f93e6407c59d58742dbd91ced464a3746dc1ad9059e6bb9c146dc1e74235bd54b1d90bb3399865cd3102f3a", + "Name": "matter_g2_multiexp_40", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001387fb972f997ed0cb97a5ccdaa759dcc3c2c7f4f15e5cc4fe74685e42cba75e778772d795847b45f274d32cd4960de600000000000000000000000000000000150b1ad31a3d434c1cbef877fde2e105d4a047dc34e3889d21544c2143e7b41b8e0024443a774bd1e09438293860a43f00000000000000000000000000000000065033cee91f5c4d429a074be3d2a8b001892455a11dc708ea73c0082bedb1cb8e8b567a6ea68a1296ad2b80e4b5b08f0000000000000000000000000000000001991ff6fb57e8cbf9d228f1a99697f785261ebce9d3c1f592389fc860b8d7a069896dd48debb8cbe0c43175cd2ecfff5bc589e7d89994400c511789cbcaea19b077e0b02d625e549bc6f2673ce40128000000000000000000000000000000000a0fa2d39d868737b9a0526296335256ab4894cc58ffd80bc6334e80d1314bdf017c8226b41ea135f6adefd07650ca1c0000000000000000000000000000000004334f7985211061dedc794ee8931ded12acd39d7e6a6ef44a749118d19ce8204d07935fe62fb2a8ea4f68f99d7c5f5d0000000000000000000000000000000018850a3fc8c851a06781511faaded1ce0752e7ef66da82c2464eccdf78c32fae306da3cfedaf76dad371cfbe012f2bee000000000000000000000000000000001296ca0b0e368429b122537b096fac77d6367988956a7f6cf70c7193b7033ce42fa0cccb8b84b9c78b16a68fd5f4c14c2c3d2a0cba111642a6354c117d494be805cad5b5c486bc47906a2d37a9cd9f850000000000000000000000000000000019deb7de7fa5254fdf5ef34fa616651ec70548187fb0bfae9f512e0bfe1f662783f06a9a99e434ced84229deddab9d240000000000000000000000000000000009c199ef916e6f6fe0677ab07beeff221a5687fa8da3ed3ad99a950b7f27159f857d1b561006bfffab551d240b764fb300000000000000000000000000000000148a211fb58b38072cf7c417c70d3ef92e9cbe22b31b2b626198add01dbe1ccfec32d333abf42140b9316312ac48aaa2000000000000000000000000000000000b551b57045365d842133e46814d5d0084248904960f8d2fb28e9623660bcee658582928703f86261cd70e95cd20cf3a530ff74626657262fb49460b2c6981155871f2eb5562581a74f968233c3cbe3d00000000000000000000000000000000185959a297a8f434cb9529a1f7bf9009fc1af3d09efb0a9dce1b9e7d30699da64e4b1d32cdb05b068621db092c1eb59c00000000000000000000000000000000106ef21e9031d108364e93ae4b5d21b0d6d78c2e86e0f8a7af27ed3d38dba0192954e8c716665333e5dcf21387d3f2b1000000000000000000000000000000000185d21efd7d613c409b6ddaa66eed70c235440974b2a9154f3711e3969061461f8824b4547c65e9db09ce875512ca2b0000000000000000000000000000000001aa46b22451afb12962bec5c6309feeb4acefdf3c98c1ea14275409b7111aacf7c92a8e024d01d4dcbfb1c91fc445a1d182ac912b005e90ab81d4f2a906da8309a69576a8afaa160fad2540ec049913000000000000000000000000000000000557370d81bc3da4c50980106b8e65ca2edc757a475194cef201c9edc0f50363cbebcf2750acab0b67e1020daf5660e7000000000000000000000000000000000462f1c1379be9bfed97a1a83a00428de63eadb6360393ba162af3762a99d7eae8549d0cee218e469e4997ada7b35cc00000000000000000000000000000000008aa5ead309fc703f6de980dd43c294530cc2b38b94d5281e9cd9b0d09f82f747a7107b700f1437f3abe36c01bcfed1b0000000000000000000000000000000014110a19d574f26e11e2163a981c3388c04854c5693e9033a474f1020d5f980666d84c60370950734c46663e194bf0ec42a002a460b51429e25f85ec4abaa580ac1a14315b1627bd52349b7b81a641d60000000000000000000000000000000015beff8cb3c79098bc73dc1ea4b240a4e0d094b3dbbd51592df6adc9c9847beb436ec83df6c55666e296fa843298446a000000000000000000000000000000000943aca2a6e57e9897ec764ee2911d9ff0a59d9e903c70a8494340cef2143895e79d3e6c03af2d6461ca199dfbd0ca0d000000000000000000000000000000000b812ba87c4989af07af44f3dfa87de119fea28ad598cb8e52247cf41bb8bd384c0d8913fc82e4cc2878065e797cc581000000000000000000000000000000000410ed148d1e354653f9d9d17c50026957fb03fec64964f2bee5eeea966b430e77f7b3538d9f4700a673fa07d0daac6b7a650dd3765032ac139d1b54ec7a5457c9e3caefa6af45d198433e5949d149ad000000000000000000000000000000000de0a9bbd63c59767938b555c7f9284d0885ca23019818c213a7d4f1594b028965da871cc5818240d155c05c69e4e25400000000000000000000000000000000079dee5649cc67700e9338799a9810d352a5c68098d0676e42e00bac31f37513944dcf47408288cb7f1cba121506a10500000000000000000000000000000000101a650e84352aaf3817b400da0aff40907aae3d2fcf16739f8ee8d5bfc62c2a0dd518201701932728a41134ea3f6278000000000000000000000000000000000f1f9dcc0b55d0ed327f667cebc052c4b6116fde5e3076dd6e447c3214d4c8847885be9547f95f341c42e7c7fa7e2c71bbedc44d54349cff199befba9531dd4120a51e2b830a3e356e68cff31bbe365b00000000000000000000000000000000148f706b4c93e739324e5db40d42025535cd33a32bb3f211add618c0e2022068384a5612da67150746896a2813a664e80000000000000000000000000000000007204ebcef495ca8232078fbf1539a4b46e89506a09dc008da457dee2792acafb6baac4f6cef2de15cbeb48bfd12bfd6000000000000000000000000000000000bf8900e48a4a56b653b1e02c3b9a7d81c2045dbf6297f1ac2acd69d1bf9e06480ea917e3a616243c3a30235abbc426f0000000000000000000000000000000005ebe0ddf4cd1aee76d0b3d03eab754664c8b36fb20ab1060900909e0e0a4abdb45bf74a0b1d40fece9bf73360f580bcbef3956ac71bfe97029b8e3f85923c2fdf9cf1ea6582b68d5a4eabc6b044c80d0000000000000000000000000000000007824d1c48bb2cc0f406e356f6e52b66392f6203f49dca7ce03ae6302ce3e8055d071cd812f97481acc654b318d6cae2000000000000000000000000000000000ae89f9eb1abe452efb7ca48f8f939d835f9a79e05211ed9f4abee06b93e34b17d920ddbca3d8bf18b96c3705c1a064500000000000000000000000000000000119ac787a7f3e9b7ee34070aac1a769430eaa8cc838f1752b573ac7f3c02a9f490de9600c856a55448598b149f5392e300000000000000000000000000000000193a3655a80e6e0b1278730600fd4f645d54947d193484131176b890ac197702333ea847317568230ad8af1280864096392f5b4291fbb18a93248e830b08fadbaad6434040c02b45cade73b77f22c2bc0000000000000000000000000000000012f66629836f0f57bdfd9bdeb2c9b7d6d5dc55c586e15d76aaa04aef06722bc8ca156fd1295b3063d738a85b3e8746d900000000000000000000000000000000097825c5db7289b1b9e640d19ecaaa81ee59e5b9884713f6d312604d8ac367634a264c316d73a9cf63358c8fb15f8c5700000000000000000000000000000000181133d027b97d8e2bef308a93b7ea2a35824dc7d01a3ed2f404fbe12ba3b3e51d94ec86cadf3da7dc9ecbaa23b411cc000000000000000000000000000000000a28a609d0bb015e375e74c087ce426dd3c20fbd8b374d3817c626faa81469cfd11a2a4e418a44f4d7ca621d0564bc4920a96f963375d7a294b584f2da699a6a00eb5781f46830987346cf4fe922a2f6000000000000000000000000000000000feca6f7e3cb286090fa3df9c5ebd10c06192fe14af58d46b827acf48fbd462f3f76d9d20670803946028437410ea52800000000000000000000000000000000183dc7085483bd05c27691c25588e33296fb610bddaac253af5b2262db38091650c1c3185d71a69d1a63770f95f381d7000000000000000000000000000000000189f9b9ea528bc2377ca3354fccf440fee059f5732dfdac320fb58541e74e444dbdcdc008c7b47681c05502f0b302f5000000000000000000000000000000000906162085e0e299a07e41b9d62668d4810b97d4be317bf376da537de7adb06de011f5f40af834593761b774771a80e4115cb4646c8996239f4fdda8c27a335361f0a19550d6eb0225c008408c47258800000000000000000000000000000000030cc52d7901d0360d10f344cecc8325412788cc30a912d5de3fa9bdab18db44efea235c5d34bab526f3b8ecee2cbb8d000000000000000000000000000000000cda35f561c19ebd85a445ce8bb1618b446c7013c07606ce58e0b5627a5c9e7cb200e2b8ee12a0564730279e75b469b500000000000000000000000000000000055ad0655a96f6dab5a432e7d2fef57a6a11113070444089df23b4b911e0994b90aaaaa2c62d06756f4704fa218f7c350000000000000000000000000000000011d22438d7c162d34802a664c254abaae07659902e1f1bfc2bdffa6c17eb11bff5276474cc3cec9507e28685f1c21bb0c8a8d98c93c392aefb64ce0c7ea455ba14c48bfbad0e3dc38d43abbc3276caab0000000000000000000000000000000001d04065373ce5d1ce47e00476f07708bb028040edb9ae7e8e00e2c6c460e1ab8b730ff510a25a3c8114c1753b7bf1ca00000000000000000000000000000000001c87217f150694a84a4e5aba8d188ebf7224e76b078dcaba4a91de6b4ab317966ce1a9267a5a27ce556c3386b086620000000000000000000000000000000003c8422590826e0999e7ae3ecba84edaed20fd7f1eba02b9daf1c46c2aec74d5fe63319047d37f5115f243ae0ddd4ffb00000000000000000000000000000000136ae093c3bd55ddaffc2494f3ba8176947cdf2f1ae408e7e786b23b6a65ba8c4131c83cd890386ba531b8637b3b042c8221622734dc6ccf6c7b84b387a3dfecafe187dab70ba373b4416ce3c505bef2000000000000000000000000000000000d09b92a559b8efe5224184fb4f43779d0b8c8f23587f4f74e2fc6fb1f94e8d2e0d591eb0702cf51a9eb402e79b46a0a0000000000000000000000000000000014ec2e4702f1ee1074cd1ad29791cf4903357e62570d16ac80c5e8ff73b255ee03a5ba070091cb2f984b2139de06a97d000000000000000000000000000000000d22fceaa48193756ce7331952a2d9a8057b67bede729e07cf8422bfc79f9ed2aeb99a9227af256deee9f8a6f227faba0000000000000000000000000000000015d9322c3a5a7ca404259c4cc7cb93dc3d46dd8dd9475756d2ce6fea527642f9230c7e94a804ecb0b4adec7963fa9cdcd3d1f427a25f5df025fa71244cb92dda9391d65b04756c41de0f67ea072c375d000000000000000000000000000000000e16fee11affc6714c7fc8fc5e7cce44d8afe645861dd2f0b8e58aa93d4f0de9b7e73020a1537bfbb0e2c8327c4aae03000000000000000000000000000000000b7745a4aaa8ab4593daa61e375d55f9043fbc7385ff229889fca514562168a4e769c5eeef4d564b41cff28b4efdb7bf0000000000000000000000000000000017f6c5b1fb00746b50ee4c7c743ae57fae2742617e5565241d012a0ef6067d9ce59be749a99886ce9836b648525d2e92000000000000000000000000000000000a3be81720e80f6aa0570c89613c78efe95d87ccb374e7f77065800590bc71d23ae097516ae1e97b498cd233221cf717b55c943fd9b11f2fb8a89f6c08a6eabe9434062354d845f1ac740e6043443f8b0000000000000000000000000000000008080a7d91caaf2470f9632575b43990a9523219d75994f1944979ed5b650be1e3c93eceeafb0875f66a40651f4c6dfc0000000000000000000000000000000007a19c4a6340e39230a33b12fe63e47bb0d1378420ec9e439f216699e512e4d70571a1670eaa6b60a5c899ac63360a250000000000000000000000000000000016898d22b2c123003480e3a01965a72de94cdfa39b20898c49e451dcf6a4727a1ebd629172aa1a1aa6897916cea192b4000000000000000000000000000000001217a373c78de9d3005690023b9e56bbed3073f13ca2408a27a3480578d8013fb9d3ee5cda95c3cdd091a5cc68d928da7b0c1d54e51b8572256aeb72bb032a5011a3e8ec5ad7e8b6e0397b9f6fc64c9f", + "Expected": "0000000000000000000000000000000005829c932c80baa420602bf841ad9bb24fa25c61f33f5d88693207b81271c94eef54bb524aa830fdad8caf8c082bd4990000000000000000000000000000000000b8d184316c2471ec6875641ea83de4f9b7227041922415b38b07a0704d01f2585ec2701bb4ae0bf6a0c0522efc0c630000000000000000000000000000000001dd81e075620914254b38ca5a7287eb56f2f31f6f8fe02fa51488d45c7f4609bcf49972d0ae5ded76eed5a4c096939d0000000000000000000000000000000008067feba36999b58342ac54e48b0fe28245f8ac2498b60093082822d19854df5c3168dcd55ccb6b2cb397b77e712333", + "Name": "matter_g2_multiexp_41", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016ed84856b9f41be9bc6c025a9b79e2968e2ee6bbc27608093256c541096e2c9eda1159e6dcdaefe783aa59d52f28ee90000000000000000000000000000000014aabafdfe8c7369f93d5472a9c6c4d426e4b02c943488be993d04ed24aef5477f6d455f82b4af78381b8bd16f42b56f000000000000000000000000000000000af34789c6c923103633e5b1b9fb447b671ab05265c16488ca7224e49db21973487a5d3de4de40b9d8a97ac9b1966619000000000000000000000000000000001123a6601c5351a586f27f8264d4227f5e1df868a03e0c3df5c148cb523cdd178f96fbe52464fdab210564dfc22b29536f082a5ffb8baa38ffd684a4a70114343a1e723bfcbfeb57d0a85ad5e592d7410000000000000000000000000000000011b82d78cd9b53b8e7e5c14a7371f34f08546896bd59d1e7d8be15d21742180aacdd01b0d08da2cb24873ce75e166bd500000000000000000000000000000000161ae0d724085a6e801edf73443cca87995c2d6b37e962db5719f4c480cb830e379fa778fd2f29e75173e1c31daccaee000000000000000000000000000000000a2c2b89d00b7d19f2b0530889905c30cecbd4ed0b56ca82208d666e7576c32a6e90cf867ad87f19e4fd367a10c449a2000000000000000000000000000000000b65c0226743b573dad7ff25bf1885e3dec686cfd5da2862ab300fde4fc8fa9b587d0f2d11ebe1f6a6770bcaf2588f8f5160286a6d23c30595809dab6ee6523d7d235114d1b295087e024b4f6ffc80e50000000000000000000000000000000012d4f299998aa897db9e3194244fdd1dfb95225e3271383b5cc296bbc51c4e1af52e849d8244f82421cd198158918d8900000000000000000000000000000000110638a2f7cdb7104de8fffe29be32610063bc656e13168921501e1614f282bdc9fccff4eb3c479a42b240a2c8014864000000000000000000000000000000000b0adbcbaedbedd376efd20a417bcce562b87b7449cac1e90d44eb05930e6f558b35ef755457305da012a231b5675bc2000000000000000000000000000000000db6fa926c7e02f633730569732fd9239bbacf2042599e79a4bee76619872901c6f4ec4d4fbf3f84143a0d17b167130ebbca29b94b6583d46753473143d13a7aadb0b18d6d35d7423b8a004991fa1ce500000000000000000000000000000000166578f3087772545c0f47fe0b3efe32874d26463e4f262be65a3bb6b0fad7d0f779808f69362f3fe63c72f24ed03d70000000000000000000000000000000000a8e61e8193228fa1825cf14e94f68a5eecece9afb48b44871c5ad62510ee1fc4e9c60d5f2529b8685e6aa13ec91979b0000000000000000000000000000000008d25d81bc4bc92508c8cade33c305c11d71a06bd46f184b05dc406f0939f0e0967b02f15b4f7f6984c9fba0644ca8e800000000000000000000000000000000113660a7d2152346500a1578641aad4dac2919ce63d01d8ffa6dad72f524c888fc2e9d2876859859e47d8e884f170f86607c80069dab2a16e39370de32df20534aca46565cf573159a93c64f1f0c4a1a00000000000000000000000000000000160529ff217934c85cbaa8b347151539e252dbb502c015e8e45c128df2b8a737866737d5cf0eca6f76e4a16790cd02a200000000000000000000000000000000127f7b0e4f9351836db9c204386a199293955471dbcd7b4ee9186f0434b46dcacd1edc02fb46b4c377c4e62cec10cd6700000000000000000000000000000000094abac17b11600d7447f7ad0f21d98c14e439c4a4a6572b00c90e14d9fc54e85045d0576f74b054d384179afc0a70c80000000000000000000000000000000017165c32410a498add8e1dd55ae43f94be234ba3859fc6b4816d7436746add313f42b1fb49e0cb6c4b7341f0acd09db841c1f256e866d218b3ec20c132446945177d518573ae3f0e739ebcc8821bfbc700000000000000000000000000000000060e503ee1c5d3eae4bc0eb30fd86303a5c48c10cc7b4736d17b8774c78a8c97ee05b40d366b2cc9bc7781b1e4a192f200000000000000000000000000000000034e7012414edfc6a8f7b2c6049236b6fb77eb94b05d55b218851fc1e553514e6ad388fac08a24c33bea63ddabdfd8720000000000000000000000000000000004c832477a90683d417a00a698b69c643d6dbf82f5afbb83eb3946f8098d80de6f2d457c0a06d0051315f06e93b5e13b00000000000000000000000000000000048c3339996948974f2bac14d8a6b8430897644ec8e9cff9eb369557003aa2827a4f3fc3444c4df73663ebc9325ff317c72a47e2267010c532d676ee3c3ebfb2be2b7569f6f7a22f76733d7773ed383c00000000000000000000000000000000082466944ee7c62788b6fa77816094ea623d03c7aa2af249cfbfbf78eed26a76cff8c23c2295aac7ee1ef8dc84630003000000000000000000000000000000000a8f88adecc3f50d8eb329492f2c031e722f36627cb3b21415781156ef44954c5b8529ceed5978a37ae1248909d38b5d000000000000000000000000000000000e08f628aa014152b50a85bb6eb947d53c596d82c0d03594ed3b64c486b8630c880adf43fb1575b02e4eb8174a04034c000000000000000000000000000000000776844f28958d3e12a5c163dbd039e50df44b1c6215429381790175a609a339621475a5b9a06c3276c9177d2dd2b576c52f48e84a68d99124e678dabaf376c956dbe9603974283a9efc7c27e830e9590000000000000000000000000000000004477f153c0510d8e50bfdc2db69182c05d5ae9b94bb1880de239733e380e03d50001378432312b24b5bf0952c38396c0000000000000000000000000000000016663990dbe529a5658f2b3044bbd390ad430adaeffbd5306f758d86bd5422391bfa1d21e88c63300faad55e6a2d1d3200000000000000000000000000000000188f701658558033ce2c41101a611f74ad6d3cd075c195476bd2cd59a1a9dcfe937020737250fe418b4de435f8b3a0380000000000000000000000000000000013f8d3625309767841603329f56686a99e196d697802cfcf31f8b48f9c76f77a321276a0158a22b94e91d6907f6ff451e4fe662495bffd8ace4c1ddb39e612b361bf90a0f1bdf6c7fde2bcf63df1bbd2000000000000000000000000000000000f184d22f3c0431b031ee0ee7ae9598ffb511a2a56f5c9f15c9a4b0c53af2a10d22a311805786e303e234239326dd74b000000000000000000000000000000001062725b8c576e79e314f6a56ef9c41f05a65d7d0d57d8414e2ae9cb1a520b16ede7e418d3a9413c9c1660dd7508d5860000000000000000000000000000000012ef02fbe96f9a191804b6c4a0b65b6024e3e2b1f8cff986f5a950cde9a32ad50d4f7a72804b2d18b93250a63a7ae97800000000000000000000000000000000000b3b0333d61fc46653a7172f5a813d13ff5a48056f9689c78c4b18b8aa3afaeb7cec305d98dd600786351338a2185a651e67e96f64b80f4978fdc1cac90be538774e34c2f619f8b8e60cd2aa20f2690000000000000000000000000000000010c91e1dda48dc528f618f01abbe01db1a7b6dcb0d47b83c7b7db3331f7156f7b2d0f081458241467b0078935a7b4a4c0000000000000000000000000000000006f87f782979d2adc02e65b56a4906e50430cb4e0913636e9aa0364535c9d7ecd3b9433358e00caa8e90e84b7705bdfe0000000000000000000000000000000004635089c7706cfdb5a22ef643d1a9a5021847646ef01ea559d1b655299b65cd76a73b04149adbac612e7aa756cf30060000000000000000000000000000000002d83d82bc9fd66c558e00547a8c25633899584c9b855195c00eb3c8742d22c601982f244a03f8e0c5c21caee24405481a6ecd3db89a7f07344b5728efffd35a11f7380c740669f746fdf565905a1ca0000000000000000000000000000000000848f10eeba8ef9c7fd0e679767f6b6a2392922092916da8f13573661f84ec97c65717e55c65526cedd59dc1e096f0840000000000000000000000000000000013781974518487de12661bedfca5fe72205c51cab461b5757ff14f319d081e7845cf8e099892ea85470039713e8e48cd0000000000000000000000000000000004cc1a27d1aa88484fed40ceef72e6bd201e5ee276b5ec27624286dee112ece767b37c6f1f7846d71cc0f4042f04dc170000000000000000000000000000000004f7335d6a1463976d9fd86e2baa45d08ec65059b14449ebe4aae99971c5666cdc6e40cf0510ae99dbce97ae8b4598067db5ef4c1c174c2e5ffe5555f54f4e845c463bb5105381fb39eddc01103b1bf70000000000000000000000000000000003c1b1e0848bbe37e62f1ebacef1a574400d5048f1e09d935af2052da29140dc4074175e4d6ceb7c2c071331b2f3d1d3000000000000000000000000000000000e1c84d6b20553ddc5ab09049ec488ea2839c5818e31455a7b231cd0455e2945aefcbdc6c1979821a80bb4f77d46e91e00000000000000000000000000000000199ebb31e8800395a9c2e103c9340444c97004186929b52de33cb8d9396e7ab8d5af3fe6035d4463701ea41e341f577300000000000000000000000000000000081b3882bfdf83e67d2dc42b211069a4e93c0f173263f9f20579128391e7f2de70335df949b9c0e9b834b6e574f2f8cc14018f14c50d40d3324952ec22ed247c13c4cf10eacd32c3671757bd12b041e60000000000000000000000000000000018aa45c6b3898a5fa618f87f9a08a7234c1b94fbe38e2297a1f9c7a2e9de0ed83023deebd56560b1928c012c14dd7a860000000000000000000000000000000009ab80da6c519aee8aa1fa68c35bd0fac78b55f88d861e8fcd445f629054325d63cc4241f61e5596dad0d54c94511e4c00000000000000000000000000000000105f8253f37f5538a2c25587fd33ea61fdc744a7cdf4ff23a55e2c66a39040d4de5eeacb7e11c0d2a483d59e7c3186aa000000000000000000000000000000000f6b10cd6522a1e34c87c702f58a07858cb753d67da9625155bd433020775351a9ec4ff879f91a43f63be1c969afe675ed4a28dc3acaf2220ba56d026b292a7d017bcbe358dedc57556cf638517bbb14000000000000000000000000000000001618dd5de43a6bcde91a6a03fcd88fe59d1c8c51d3d85cd44a1920dabd2608a0b17a987b76eb8f5b20c7f1dc0abb383e00000000000000000000000000000000198034b7ab8fb8ff267a52a9423da95bc587eef8684f18639df5db44e50bae7fdea5c5e5ef37ff14937f86cc948a34e500000000000000000000000000000000106d1f017da463176bdf55e3ada78ce70da4486be42dd0095e3a8a0f6e59ed503324565b717b45ee38d90dd3ad13c10600000000000000000000000000000000112d425765fa2fc28486b95e49db63346188fc5a6bd0b7dffa4430dc82703eb44d98d726edfa4a275aa5db5028d01ef530fb17a38b7d0888eb02394eed26406bce9e92779251bdbcb432153a550c0850000000000000000000000000000000001326581ac1a1a960db1ff2e8b89b1debaae46d1e2d0aa6ffc6c7398f207abb699ac59186ae7222b5cae3abe64cb61c93000000000000000000000000000000000218753594c63ebe5fe503aab4dbe1e944b24138948542c7c43d92ccfeba5854b7bf1bbcf8078d85fb0b8701b8b092fa000000000000000000000000000000000c3ce8c17f75e78a8c9980e9fe125290d377a32ac46411876ef011e169e86e1458ac5e71cb4a446f6c640cceb8d5617300000000000000000000000000000000176966eac1e20586ad2a03b4a1598b4db1d7c66be70b1b22833e4afe0e0b3783572f791ddcd4eb70a88f4acc28b6fc7a980b5873a5d0f78c3b8582581349498fa997fe3c6b1abe0edaed594253359d8700000000000000000000000000000000099ac8430fa411e74082cf3282f9a456d3826a7df4f91ecf621e645a1abc057e1bcfaf9ee73f149bc447cf4230f2f6c90000000000000000000000000000000004e93d7fedc9e2d7423c9e111b4674a2bd83de28dcbbcc54ce4b324c96318a11603fc9ea385f1c02364ab1f6b5458481000000000000000000000000000000000bbb29d70fba5b12fadb02a24bfe3f6a5362c71fe5f964dcd0e01442781d0462a873501029192858027d612a8572e9d30000000000000000000000000000000010daa9960005562ca2d18eaf4b4bf081f194fa824cc77515c81b2c836627f21b732448f367e2cc1830ad0fa4ceb928e1619f5719c320320a3c45dcd6207575e0d8527c458c56d3decf1d12ead8a985a1", + "Expected": "0000000000000000000000000000000002a61fead6801f41f2f27603cf34cfb4b917f2f85cba1f9c684995227653c9dde559e1e8497234fba9b2e4c119cbd9ec000000000000000000000000000000000085f73b8e835a10bcb9312931eb08d916d2b93a1da843fa2f4530cdb26e93b5dc95a555dbe8e50ca465b162661ce1d3000000000000000000000000000000001442fff9019b5476c217ff725ad95c92c17b42471ed7bcc121e8a0506755ec279d4e56d770a322d56f56bc6a6b0a41160000000000000000000000000000000017e7710c4639d51c4a79c5a2791101b52742df202b1827192872f168bd21020bd068160a587fc501782c1301c231a0d3", + "Name": "matter_g2_multiexp_42", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001213b5d5704c454845824994769c8b300676e75bafdeb95202001161aede276ab7967ea7362d38e97ca1484cf9c342fd0000000000000000000000000000000008c7c1fa04bebe5a1fb8678370563db63e7a10b30747c2ddeb4aabd4fc0ec93220d578b8110c6bfe8a3a6ea2820f0db8000000000000000000000000000000000c4061a295120a00de52300ee625ac46566464e6702489467316e8c182ca2168052c50b5962ff47285866c17d213fc8400000000000000000000000000000000086c153169a9ed1aba10a6cbebff4911b37907d6398c441ad47da17988d512d822ee36f5217355b93c9d6dd8dcbc8e0b119d33d32affaadbf6c2b6243bb7b344a971270b488cf887334fcb15de2818cc0000000000000000000000000000000017929edde8f9940826ed739bc9f59099ce76e85950698ab0140784647023f96afa064aa4a49b9728f496515a0a807e5900000000000000000000000000000000198d98f430384c1e7fa9e2403d9c3d2f81873fb7b204378cec95b97e674e10a1a43af97db0488209904469989ce80a0a000000000000000000000000000000000afc9b5138999bcef35613e38bff4f81cf532e00346f5205405470b2424622826c746ddf0369c7bdf77467dcea5cff290000000000000000000000000000000019ccc05724b3e9966bf918f01312c80e8422b697be89365b6ca00eb31b0bd08fae942e90a75bf9da1b3d264e416060f1f1d832b355d7e0ac3653431528ad0a8f6819daaa19292a00c910ff0ff39f46d5000000000000000000000000000000001568e52c2760d895874527d1ac8597730578176bdcfc67aaf69ccda253f6616230811dac59bc27cc1e57b94b5743cb3f000000000000000000000000000000000a4ddeb8b56f105ed5f47a538052f3d38a23c0ceaa2dea241554e6508f82f47d32415ffeeafe5ae5664c936b78e07648000000000000000000000000000000000b3b335a390aa0090bfd6467d6cd02eea1ced347cdce3c9ed85dd46e38e9f2ae9642392c2875a27618ba8f2c555d5b190000000000000000000000000000000012baa4b29d116eec749353b7658af70d4d216189133db707e56068c8483af43ba86583862e6b39df13b88058536861b9e6dcfa50f6129544835b5a4568954264ea68d9e2e5d4370ee31026997a3fbfe90000000000000000000000000000000001888b83ca28c244a6178377b4ee6844dc916e28c3f56312ecc0e29d08e6254dcda39a36ccdc317d1908303db3c028dd000000000000000000000000000000000f4b73d9316fee42d60f8de402a7d07765508b84d8f2c1be1f3f9e802ed7b0c6c5fece3db95d5287225026e73de98ea4000000000000000000000000000000000f1b48122191e1bc421881de831293a80566b9a7f2c9836f7718afb69592d59d2a714cfddf88945b94fac7a50b743eee000000000000000000000000000000000f1c6b052dbd03795433d7ad122473f109484d50245021c8727d252145e7db7dadc015265d1547f9c748409d74f5aa33f7822767391d3b2331e8e1b81c659c6e0262f7355063decedabac9797a84f0f400000000000000000000000000000000011e8613c3a771a177b4b85f0c6f97a53fd7900cc23566aecbf115058d2863189c21be36dd5dd736f6d0ffbe88182b400000000000000000000000000000000017b2c4e8d8aad0a12fd7130789188bb63a08f2b243c8f7700599dd33d7e176f70f2b1818e56540ab3fa507878d96a46e000000000000000000000000000000000e2b5ad5ed3578dfdffa414a4a2142846b1232cd2de468725283e3f92b536d8ede74bacc236993f6f68a16fc6a7828d3000000000000000000000000000000000fdbf06ae4cfedc462f5913bba9bba2b5c86ecd0e298bf27a21317fe74af6ab15014c62cbfb617356548cf808599caf4b1ba1cd6a4a6c433624dec63547119c0d492e3f38afb04e5153d82e400631aef000000000000000000000000000000000b48aebc6525620b99cd83979658a35afa233d17849bd0dcabffcf3b550f875a386b6c0b4ddacf18a23843629072c0150000000000000000000000000000000010432e5abf862d3be10ac5677b9f296ccdcedf1480e45de631b6bfec42f20edf62034f7205f659f11fe5a6aa9d882c7a00000000000000000000000000000000011702a3590e7aedd6948bb94bcc874e0b8d77a18126ed4ba3753dc98953ff941495486c14c6d801c71fca3564ded9910000000000000000000000000000000009faa427c0a7da26c92b451c61f5b5e8804fe032a4cfa014397e430882cbfcff81bb22f9c15a8747ef455773c1ef65b0a41e184bcaa0721caa4114d6393ae2251fed84aef57c7927a170145308bb136700000000000000000000000000000000061a1ee841251bad461f89c52196bebb1cb4463298e88abd62cccd21bbd325ddb33d1306ffedb2734be76c18d80c8dfe000000000000000000000000000000000d05a5ce6372ce34b0bf4b19d8e05aab74abc1cedcc35a2d1d4db38813d1e5c1375d63ca0e8bbf29c510a4319d2aec27000000000000000000000000000000000dfc57aa8de28745b8d28db3769ab5ea26b5115d3e59e51ff19af8ba37efacdccf763ce682cfdc77685705781c3924870000000000000000000000000000000018c17d87411c4f8e0ca51b3eb4c3765d3846e0d1b75574f8e511b2f3e8c5ff53bf7618959ce18dfd9e4c6285e88f094f63cb451d8eb3565274793925a1869ca5a25fb19639449c71a761809f785568de000000000000000000000000000000000a0642094b89dc9c6c7c11c1e57ed542982bd246112884969d424a3e091ec4fd73dd40a5ac116f6c68216fd1e733cdc7000000000000000000000000000000000788c7a63eecd1cbc26ee6b14b09d0a3b7a17a848fc0551d50cb7497bc98287da2d9b898260eb678a8a0f446eef5c6670000000000000000000000000000000017a1298f90022ddff3fbbcca180e3f4da8760218dba595a067287a2473a6e10b93dcd54154cb64b6c078b083b42cd09000000000000000000000000000000000116e999b808dcaea0566c0fbef1807e160612dce91756b2cbcf4883b04a90320a0759bba21b41e6f4d8449b52e52f9a96a2f94d55f784ebfc6b6260327372217d6a5b9637ea5f9afc1a65f99c221c29f00000000000000000000000000000000064c95bc9c0e2be48849a349f16713791c37310f71b5d0613cf0706febeea3a56a0f0f1ac6b504524eba801e8b759f2900000000000000000000000000000000007088d2f41fc7e1147b92a2ee7062b9bec194d3a47eb9985ac1ceeef57e1a006571e7247a13dc95afcf9905be57e2a7000000000000000000000000000000000e6a0770f4315acd9e410fe58395ab8b20a08240a6948b762dfbbad3414bfca0ced4ec9da982bc9b8798b60dde78a96c000000000000000000000000000000000a70b53a6d71c83971167afe329ffacdd417bd7b228766851c3b43701a439f253a8659312db7e83a398142fe19332b527d889a3362f551b88e63463b7f0cc334fab3fdd302b630e419e362ec1eaaeec000000000000000000000000000000000002486eaf9b743d3aa6a1f3e1174c5f213bbf3e3cc0558d63ce40e3c03e1c2f6e8508248bb649aae1bc92f3eb8118a2000000000000000000000000000000000042b03959b40eb0641d39117f7af50dc7ff048697a57b80723aaca164e2dbc647ffe78fea0a6a4c07671f7db6d5b2dfa000000000000000000000000000000000e141eab29f52b9bd0ee44861f154ec1bd30abd715935a7958a19007e789a41cdb0f4b9cf7b3fac0b0d4d77637b510d00000000000000000000000000000000002cc2eaf89cb7a04d425d878a30b5e2e9858ae0b2a2ab28fb28a6db0c7283ad861bb6a92067e969e5721b43466e857db8bdd400ad873cd6ec546bff698171942d536b94e69dfef4bbf316a471d4b45cd000000000000000000000000000000000e0f7595e4c136b4d8bbd1eeb021df7dd2bcf1d9f98e4fa293f7edab635e019af87c138275fefacd806213177af40eca0000000000000000000000000000000005dc209d6c86f1871637998c10490a70371f9e00a68d1363dfaeb62046473dfb4bbd3b18b943439f75c45a1ee7f264a90000000000000000000000000000000003d215567d1e8f504a72658d48fa51374ac77234552c17db4033af780133d8516bb0769678ecb50b8b9eb950c2dd73e80000000000000000000000000000000004d780849b731012e1e5732d5f6d32c659a95c3e1c8f5ef4841fe82afc6f0aa309b1e02dc2554a4a4ee781be2be2149f63b496a64cfd15410192aee9912f869deea5a08eebd6b160667e12fdf23c44510000000000000000000000000000000007ecfb753be501d9f9b7ae7ceaabaa4fcb7b690ee04fa1a711a15dcf67e4422adef64a0f8118f93e67f24a2d1a2bcb36000000000000000000000000000000000a459e403d85972f7132641c05bb842416a7135009ff46b617bf0918e65cbbf33f76b98c10d901936e589bdf5de31ea4000000000000000000000000000000000bc6ec31a3ff92b4fae07cb73ad7bfa8423044048337b0ab9add09bf10fdf190a5f7996d157483d29fb29a681ed585520000000000000000000000000000000004c622e2bc606fefc8bd83c4a32f7353123205a6d3716b581c2c71360e5200ab069f60c256dfcb04b466c53cd61fc94470de38cb4627f53509eadb0918e562c6fa68a4cbdfa9f7578a8aaa8182f5315000000000000000000000000000000000125688e44f593c5f585765f30e9fee5e4f15247cf33ac78ed1744453385f49ac61128e23b1569ea33d74b207a5e72e930000000000000000000000000000000009d77360ea37298fe971569230159967012c4991255fb5337ca6d58cecc3cd44a024a9a044ac98a894cc97dea161844e00000000000000000000000000000000056b2dd9569f0698c732367cfb217af90a3d6dc15e2555ce0aa845616e4067a7fefb304f6525b539555a0a685f0ec5f20000000000000000000000000000000009acb138abacac351e03f7589d4bf29cbd331e93bf538578ca9466b759ea070931c786d35f74fad42261e2df431fd00316732c583e8049a5de38642cebab774d90d5f87601e3599ffc9af692ba532e620000000000000000000000000000000013515b0022ea946a8e679b9c0eac6cd67dbc4efc820f0b3d8984f12b7d154c0632a8d7207747284d49c498c79b6bb5c60000000000000000000000000000000004d6765ec6aa8744225c1e652ccddccc91fff7fa8182931c8648b3d8bd33b2177a9af03b2906da02bf117bea59aed3040000000000000000000000000000000006f1d858c4b223552f0aee466cff35d14b3ac6da35b8f482417e8f597514b065be315aec6662ea5c7784d3a9e2184090000000000000000000000000000000000345eaf0d72b9c11fe72261a2fddea318a8dab92a67ccb9438c11e61fd298a333cc42084d4ca127e09792e346cfe0f004a037e7562adfbad6b1ac48b8e4b6f277a788ea2f4416ed2900ed2791f09bc2400000000000000000000000000000000029ad10ed6d6d5bb591771cbd597a3a0b841c2347c89027126bfd1efee2ac403933beb99d08721232ab9b7354fcf9aa800000000000000000000000000000000198400d4e026c2463a07ba5a3974c869ed8ceb1f029bfc7f41b23dd7076cf4a83b17c27ad6506c852cd2cf7c4987f93100000000000000000000000000000000152bbf74cefb77fae8e825443e4ce09b4e223242187f563a236695294d0a5f540f0b29d6f93a54cf0a77900e936e61e000000000000000000000000000000000079f4759eaf044a80417345a1b4029f8d4cfc7e00fc625e815cb7daba2243a97d21e42b42ec968dc8647158fbe467088fa878f6a2e18b88d6badc5b42775e92c17974f3a18817b7769d44ceecac46b89000000000000000000000000000000000cf3148d0c30774104a097562cc83456d5d18643d5f7ad58aedd9327bf8e9450feee50ee893442b1cde87acb02b62045000000000000000000000000000000000011d4037dcc15d0c50337d71816a2b77428b8ddd530bc3b3c8550606229f88286ae94ba03578cbb5bbaf118916dddc90000000000000000000000000000000016160c8ec4e2fb780748aac279bc248b2e2f1092262f86d368d2f06a78ebcd27e929930c8f2be124e9d92dff5c6c6f42000000000000000000000000000000001980375281735390f48ddac9d00d4c6ee7312ed0797333a26a1684e09c9575e57bcecfc4a31b8d9597a8ecc703835e22c4f1a7d2b66e6202c957a649384cb277dbba769afd60708b457613f0f3372515", + "Expected": "0000000000000000000000000000000019ff32d2901b7732df1a924eb3c099a9d36bf36cb32ab322f46a72d99d81c7942d0f2193a4aeb55cf079a2cc1707c7aa000000000000000000000000000000000193561d0433e1031fc51829504ca70e92e19bead2e0bad655aaffb6b41f5f75d18f04a162db7714f3f23da891ea91af000000000000000000000000000000000d010c36acbfb38d9dc2df6e6e21bd75deba5708fb1012eab23d06d78b1244d4daae38aa4f803d12441d91adfbaece7a000000000000000000000000000000001459ebfe65c3b2c9b2684042bd71201869db1a0248c740a54fbdafcf18fcdbcc7b677af43abe803362b462369237690c", + "Name": "matter_g2_multiexp_43", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005b9860b565fc64146020647d1902e2a2d2fb2002b54bf5e21b6601124edf14d6e8836f938843fbd8c02ed8530953dac00000000000000000000000000000000104938181f16f16318d223febec3be3877bc57067fc23729d1f5552099125558cb21ee0eddc32ae0b0cc3555219eedba000000000000000000000000000000000211f809b624c4992a43e78a978ea32accf9e61fccef6bcd05155e52adbf4853340dfacebec9fa87e5417c045da25f9a0000000000000000000000000000000019bfe94a18da9ab4ea744389c17870ac96218d02178bf2ad502f166a3a1da8c14e3fc52038021503cd24042cde8f306d0241da9d8505208b4d3ba2521a42f28df7d06fc212e9e84931cbd30ae3ba2e150000000000000000000000000000000004fbb396eac2a1de9953febed9fb6e158a3b5a366f783d2105b562e8143031d7a1ef039e3fdcdb675b3d3aa4f4dcbe4f00000000000000000000000000000000155e23b5b70f1ce34fc229ad5c8bdfde7fb5dc0eca19596c658c1f8c38716a0a7b5ff59ff19a7a67e12760fa90eeafcd0000000000000000000000000000000002cc82cf87e7ac05be236104c1e668b5573674d9bd741f2d91d05c8a11af1f72aaa1dc20c73953fea38e6e069d2a43de000000000000000000000000000000000a7d1dcab00db0e7c0a239511d630526fb120defcd9453fbb57ee328f974a98721274144e48d22558edf25595b8ff4cc6fecab1334668102e47f1e7139059c1d715a1851a026a1580f93c2daa3f08a270000000000000000000000000000000010c9293b3c58d646a95c620a0e0a7a0a55cf43b4abaa0de1d5570fabca8d97c91afd67bd45aa234273715457da5a2894000000000000000000000000000000001454f8682f3736847cdb3f784a098f7c9e488629efc3820d49b36a2e928bbf736dcb3e1b30187c2c0090fff290dbf97f000000000000000000000000000000000a0fe3c635a81f20258db4f1031589afc8c7fd07f2fe1e5cfc8f3c40d08a958a3dbec537c51be2de99b849e006870b6c000000000000000000000000000000000728876e3fdc42273e8d71953de61dd5c03e7c31ab6ec56fc03cdf55c8f0aa4b4e5c8ed88c23c28568be0d864df026af4e2023c64a3b51cc3d82e262f83260ed4a5e9e3238b85077852fd501b52aceed000000000000000000000000000000000c9ba542189ec1828c397ace9639cf2ebbd1613356d8fb26d3c40dd00af1f43f5bbb25032561aeebba7b874bf39cb0d500000000000000000000000000000000175aa6e94a9e42cf809f48f51c48d60e74d61388dd217b55f3f63612c4565357581e5c39751a65afc3b7488caf5151720000000000000000000000000000000014c880d35d1d31793145803182584a8da003b0ee3c29c978b64bbfe4e1da82910a4539587ba350d393e1bf3169c5e4c70000000000000000000000000000000002a063b3fcd77180de632deca1ba89ec4ceeefefe9883ed9e7e06301a268bdf377c3a6e30859e5a39419e449dd27ebf5dc0a88f0aeb2b082dea6b50d591018330c2276830ed554840c10772403561ed700000000000000000000000000000000069edfb8a83760e09726f6d1c117d4bb3e499084b65e1e830ab30daf1625c37f851ac122f9f5c795912b5b6f7907ffe1000000000000000000000000000000000eb6e9b55869f65ecdf3ac46d0ee596d07c573f88724bcd802b4429392b9a56730a217a03286deb5103f70aba7a9bc46000000000000000000000000000000000e2803e1a646bd70c51806b676591b328cb20359aadc8e79d59e7c31e1ce2f1473b0b19f7a34f23aae09678b11b37432000000000000000000000000000000000b3c9fb5a39a6c40343259e12ff4fe5058f25619d145922e1d80c3f5d105a7495dd9a4da329a2e78afc31a87b2c5d5e2f68c9e76d9d8914f14007c968a31089041e67312c6a3e5d30e65efa55894ba740000000000000000000000000000000019da372143e30307a71c7b96ae0703301ed723814a35e270ef6a6b0c57144f494df1d3fa0ac369f59f3daf534070c9120000000000000000000000000000000006521d89d810c7542108de26bbc888482a3bcec8cb9b542db42d5d4af30d6c339a5b4e959da4f98dd6ef8075554f4017000000000000000000000000000000001387d9c684a0fbf615e7023c0f3ff47f4d2c5a9f748f0261656a09b23066c745420df0eb180c9716d6d0743aae7689a10000000000000000000000000000000014271b9d0b21cc69072333a6c03493321b9d9028149d24964a3773bcbe5045875c457aee11ab0682c2bdd44f098f363d80eb90c6cc25b3a48d93b94b698eff513da37210ba79d22d76a270aa97fd51070000000000000000000000000000000001dd881f3d2063adcc5638b4b3813a30e75fd308de3c9f42e5382fdbf097d5796ee9e03cb44752515b2459f131f58bb90000000000000000000000000000000010f491f4594dab938115343edb47b0087d1cd1bc12ef908e150ecbdb3a54d8dd51ab24a0e10c585f235ed99fbd3172270000000000000000000000000000000019d1665d452ce7fb6bb6da9782a55dcf12a1d9abdfd50435b8f2a1bc5b323c004fad35ff7e9aedfd414a9b68fb1eb1860000000000000000000000000000000013828087beeeb85e43e8540fbdf97af189878f5ddc1eb35c95aa06a26923330f3b8a2b43f835186865d6f5f6afdb2b9b067bfd893b12c79e13659ee9b5f22de71d806a85410c9a23dc43363915a606b100000000000000000000000000000000014964f3576b97c00a8c5f4372e2501944a1e4374a3c30e11376ea62e09d52d40d428887833bc2f06279b859c00c98a60000000000000000000000000000000019ed533a3bf469ce5b3e4e9035af177efe9e4f8b0a0e5dc9721dde49a7fc66fa31c8b1c8d5bcda1bf75a532bd2be356d00000000000000000000000000000000064ec4ed48d63ab62373adb7898bc904d246bf2b3790c3cd850524e50ec38e7fb4a364344a6a1dbd26f2ad2d0fccaa1600000000000000000000000000000000134aa3c6b72d39bedd8f9c619d206a295cbc05c611147d38aa7304e995089ce34ab1fa13c2d6c6807a88797dea20214b34abb11f7ed6d73fb81ce2777acd6bbe8839112c527ef4ad88b094cabdb4742a000000000000000000000000000000000a2a4c8b457d0d2554a2d439fd3b74b18843386aaa00d1b89a1c2d8ff7192cdd1d3a888994376bb7ddda4d16bfcaae3200000000000000000000000000000000155a7dc763caf6f0fe1ba9537c0f75d3e455c2d1c749dbb4aa7242b40a9740fe9e8e88af6017e8f743a9e4c5dc6ebc23000000000000000000000000000000000a693da3aee178e2f0489af77f671c734423032f30c0b7b48debd3b71e65dab7db12ab1e0e72d3ef686d6c1922aebbf700000000000000000000000000000000109c3476016884386d6206c94073c628375a02c8fcd3041e06b8b413508188a1d26ec5ddf84a77d059e9a039dc5470d08d6693acb1eb73f6ed1bb4f74f1062f720a7f2c0ecf2b5a944ff89feb2688e19000000000000000000000000000000000a07f457f5dee69e9ee746dd67f982914a2182b5cb2609d273d4122d57a32c195270c956361d78eb65449cf5e13907ba0000000000000000000000000000000011f149ce84c2a11ff818be3ff0f86c1b38a9555e169a8cf791c79828207b7aa89c84e8012a0c5d8cce4e89d758b90e22000000000000000000000000000000000d636e5b027e41809d7ec8bbbfd4bf641a56599a63a7678569404ec8d45c3b88c1d2969e6101528d4edf1ee9d8e793320000000000000000000000000000000011878eefa5ee49be83ea1f7a9cdcd4997ccc59a9669778b3f006429e1a22d3b2a051924f371a228856523e3a09bab59b29ca1b157e6a2b5b88d7467e851282491ed30382ba217b82ea5cc9ca0c6986930000000000000000000000000000000019e9a1950f663b258474b24c334bd256d3aedcd26dc971a745857bf1fe007da0aa00777db5c3e5d21294e99862bf8ea1000000000000000000000000000000000329a12fa0add36f259e401442bbe6e5f9139e4a46d5d091a2110d2561b5629211a1c1996f20d19327d1782340e7ce4200000000000000000000000000000000032782c94c6e45a88425438324f3a24ebf37f0be213424b1be52c878985633950a022f57f8d64af1470486aa3744f3f7000000000000000000000000000000000631556d52fdcee3529023cf20d46ea09ab3c642a7f4eca2878e4af88801d21b80b829c9aec9e73317252639c148676c40bb53575662fa0b726469da01c39df389efde3936d2eee18d7035704130ad6d0000000000000000000000000000000009eb122c61ec44afb56b64929040058a804311e0e97d3fa513a162748091304233480bbc883f6fb66080b563b308a24a0000000000000000000000000000000007d1d810fb8788b9f0cd04235771d7adbbdf8c6e67e8538b2c6f0f278755cc5e57ad720515ca558412ae1fe2cd40b74d000000000000000000000000000000000955496bdcbca8716245a130fe6eef44d13280b2d56f15bfc772f8ca66a52ca0a742e6bc273c28cfc858a3269f59beab0000000000000000000000000000000000b27aaa0d94633912c96f00ecc021773e5cf5e164e20c7a7222a58b0465e7baec4e67fb56ffe564c7a2904f36c265e61574a30a575138c44881c1c126be214c6b68335d7338875b8a398196f27510d70000000000000000000000000000000012e0572f5c84f6082dd05705a3fae738920ffff840c21e444f0ed002df16394afdc21c249b6f1837389c48719539f4c5000000000000000000000000000000000c26bb3ab52e3bddc219dc223daf472247547544e3a9ccc31123b82000b17ef325148935621edd36ced4e702ade1ee3e000000000000000000000000000000000c13a8f02dc3f209e9abf3d316fa843be9c4dd98ce1ca2edecf757bf2bb498750f6d96c28abd45d9c6cf5b8b6334b63600000000000000000000000000000000157a50d9034024dfc7b0f0db4ea0f45323d76c81bc844844ff9bdd0c13f2059066ec3060210aaba61bc074afd7ccaa286dd51553c4119255b31cb0aaad7391694f7dd29420420b513699747bee819a99000000000000000000000000000000001054edb092a7053eebc542f690e03139f2e25a0098c665741e8711c8a6b9582af47e467f74fff9aeea098b7732be72d400000000000000000000000000000000084f919e219de15e7f9ee122383c772415741e5b86be6ee7d2193a4f6be5c9cc9b2fe5e8beba26cd768bf2ea1b6ebffb0000000000000000000000000000000001822b4e8fae5bddbb36f5c226216471862af238be770d33c4fc1ec2777350db2f42e33a7ba468c317a128e8446ceff300000000000000000000000000000000130f704596ddb28ec6e335d9527707a75c97298407ff3fe17d3cba0cde4c21bfcfd1ae46272018c1db768c036f215182d88f049ab3ee2b01af449abce08ca14ea3b065f06a8665ae3510b4c04f42308200000000000000000000000000000000194dde06f8c54de9ab0ad72ba0de2241fef32fba30fd6f5e83fb7750bc120d51c461d75e495cee0d1e85f0f39aa9d3620000000000000000000000000000000010646496be02c658c82dc68eab86a4f784cf64494bd8441f884e8ff384cbb6ff3a4bf5126bbacaa556aafd652397a8a800000000000000000000000000000000109807bd4b6613acb3eb7d386e84166219e52e841c41185a269cc7cfc5f34e9ef5cd1fea29877749e0cef93a3b44eb1600000000000000000000000000000000020a388c668c9339e7aab15d03108317dea97720dd27a94cd3bb59b372b268d1a7d7d7409780bc4912c3f95acd42a57619d6e227185c538b122858ad5ae594720fa7f743f5805552152a213ebea64aeb00000000000000000000000000000000161506c4a2d57c852fe8c3dce63ec6673f05f99c1e032c8e591239616ef4469c4240482ce5985fdfd4a80f54dfa7024f000000000000000000000000000000000486c5b106393e544852c143c5ac4a882c79870363858b2c910ef4041d8803876cc55ef59cd6a41869bf5247f0db2c0a0000000000000000000000000000000000fe765ebf3c4edd3035c7bedd4aec918426898339d7aa004fd74bbf0e3236deeb7d2bbba56c31fd447816e301100a66000000000000000000000000000000001917c9cf16032e22cdd3f87f098a532a33c9fec560a88f9d4232f96cbe0fe945fbae6bcfdd2095cafe6e0b21071d6ec53f53123f01c4d0d4c18dd72ea87ebb5fcb559df255773fa0165f1432c229deb6", + "Expected": "0000000000000000000000000000000015a88bcfa39f444cd66d0d7e15c4040561154c59b832c5ca895f8f8077659487581681cc8f13be136a35b4a573551ad00000000000000000000000000000000009fb6b87eba1edb3d1d23e566977eac68e8f1a28386fdca9d484c7e341c1b210390787418e2f2dff7a228e1cf10962d6000000000000000000000000000000000978de870dcd8d094072897707313b9f1a18d525e60a7cba2b2a395ffcc9d0f97f84e0784df36247d6c98824aaf3ec82000000000000000000000000000000000fbc6832c324d40f104bf82c8cda941212105131c26f630af1d3f7040ef43c6eb4486766b75a81433e46966f79953647", + "Name": "matter_g2_multiexp_44", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007517a941bec38d0e84d21508d8bdd6778a853d9fb4c5e953bcfe3c8fba3732ca0b7f6cb5c363f33d7718b1b1a68f8e800000000000000000000000000000000150c0d975481422ddec2a58a55b3d917b6b7c0510e75442c81ee856e267d7efa09641c6b79fb9e699c6b473cccde7f4d0000000000000000000000000000000009d37bf938ac30fae1cb3ffaa971ff3746ee4090d4bf8b11dff7710b3f2e4cc686813890e03643fd56fc99e847ae5e940000000000000000000000000000000010fabc4048e0fadad73d0481e290c81884f4578cfb66e0a83324739652ccf273b62204f126696a2fc6469ede39e00a9fcdf2bbbad52a3f5c0b3959d46a8c42f6f5250a93c3dcc636712a4a2baed289c900000000000000000000000000000000089b167ce7fa997ca0ad3f8bbbb358824cb41f525bf60352d5df99402af62cc6d768113d2c1ebc7fe8190c5f732fbfff0000000000000000000000000000000013dcd35865e27bf98f1f6508b32c7e9a989d528df0626228087bda0d8b456af3ea2f4be6732edf1bd8cfd0ab9576197a000000000000000000000000000000000333b0612d7068986d21e1cb67a1c7af423e98cb14aace2ce02f84d32a38f97bcdac465f2b22e5fafa6aaf0d40380e4a0000000000000000000000000000000010de7ba4f50b6654fdecc4fc6c41289bec50cff1be18be9d5c9d1f906ae843189bb43f144aad4d2a2cdebbc2697c974918adf5d8fbdf81f8e4bf2f622e2d481fb2dea06a1aaa289ce4f6e783eb9a98dd000000000000000000000000000000000fdddfceb29fd79c31b138ae8e41507f324abd5e3750da14f4f86176126a06380d53dd5f7efd00e7f94bc1370ac9816a000000000000000000000000000000000d8371c602e393a4be250583c299d069270a344953f7f07a5fe27f8617cbd3ebc91f423dc176b272339bb3bd8a9a348200000000000000000000000000000000193a260a417c9c46da0aaf139e3bbfbaa9f248943048396d95716b3be0b8a148a3f0ebcf7d6f9a318b16d2d850ec2f5c000000000000000000000000000000000be4d0f2bf6d746b930034eea8a19d73377617645c29153b6ae6d3ca6fb35a704b6a0bb658282cf93555c998f6fd054a650e995b73b63d068fd54f596cd9669fc3061f0c1da77ae7d0f5bec012f9ba69000000000000000000000000000000000731c0a5d076d6addb15c1e5d3143d41371f4835d77756418bee452d2f03b1e603230c59f87905fb67d5eccce65a45d20000000000000000000000000000000013bd198c023009190c65686468523eccb57c5fe7b159a1c5ba30c662a275fb24d69338ec9c023ee6a10a8ec9dc7968210000000000000000000000000000000018fb369923ee655839c7d996e264133c49f102978f18261faf2f8eef376eb0bdcb5af375ada2bc783e50df16737f78dc0000000000000000000000000000000009ab8e16e1d0b406adbb37e950bc3820ec13c882ec4483528ebac836726ba202bcf796e84abb3c16dbf6d1131b3854cc3350d4f13e25052b1162dad3ace76e5cda71680fdc89460d8fa88c0d157df426000000000000000000000000000000001401029d7cf8e7d2690a27c01b32008e273b5a33842dcf52d84f77dfa4b2a1fb290f56eb4ccddbb420b27e06a7a3a3b4000000000000000000000000000000000c464c6fdba702f2fbf4232b34d615e66dbb5bdf80233f695e9103272111a06a79f8972d1034176859d0e29400f5a9c10000000000000000000000000000000006cc97a29f4e694f0cdbb099278fa94140b40147f4f911de96a762f2bd28233598a892899a6329cc3cb854b56076787a000000000000000000000000000000000625811cad7c740758388f330c4a56ef30429ea4cdb9a00e2cd1b7f310184a2e6ba36ebdca57c87cebd5232f52c34d92283f0256766690c88df6cf7c968b9a96121d26d19672ce9adc84b699476a32db000000000000000000000000000000000d0a16b5d48eb062c71b91d74a0d25eca0d4bd7082de25199f33a9d3d598d137fbee2ac36e8f877c157be7438ebabd74000000000000000000000000000000000bf93533bf677050d9a77a5dbdbf7cf084b5d934d55318256712ec361693738d48ef27536476fdc93dd8e81f13d67a8e000000000000000000000000000000000696fbd8841e60300602aa5528391aa8b196d8c186d6124c842a0124a8d8dcbba637502f330c980b2f5a900be8e04d020000000000000000000000000000000017b0c51e699d2252f35619520af71775f9dd8c57c2ef146adeb72640bec2ca02a59680153e5c9f66bd513bd8559b9d66145cdeae7fd3f7455dfd2ea9a064c135f0a0a36990ea34929e292e4cdfa0f472000000000000000000000000000000000eee94b5148ccbb3642e582cf0a517b72e6ea019676a13b1484982de7f4be0346b7ed22979ba7303f6367294a3eb2716000000000000000000000000000000001502bb3964f6b3e862279e15fb105073e876c4e48c55c42f3737dc9efed82b10fe8e39438ccd39c933f5ac3c6768497e0000000000000000000000000000000016cd8c4b3be55474aef7081cb969b75ef5e7cca9bd0f9627928fe9931c6f869a9a49d0ae2cfb8346116eb3ced25d4a8e0000000000000000000000000000000012456eceaf32cbb6514e6211136475a750889caea18ff4f9d5ed7b378e6d1d265721a646715aee6b9f2098e954a88289d9cdaa979ab08b454dcb961e3cc4bb18f706bed93a72a9c1e105cd69c0b691af0000000000000000000000000000000007b5633f4a7dfe62f11065d44581f5060210f8e572d960eb85ffd0a903d8b989ce10449fc90b7e5646784a9f6df28699000000000000000000000000000000001710f252cb35d88f6bd151ed596f2d6455f050c5e25add394dbaf60fc036016ae07a5a8ed494b95875c02df3c523186a000000000000000000000000000000000bee19779dc6430ebee993f82a054fbd42e5b7265090017e5b2d2f1469bc96a5a188adf471d576a416f6a841081043df00000000000000000000000000000000038f9fb4159e4e6f596a17ddf45a00a9e4aede63b062af5eda045efacd3977e8dfd61c307834c08bb4c284638696e92ef262f9f7a26353193939bfbbdc50ee35614a3c099776f08b21e0c4c97521eb8e00000000000000000000000000000000197687895f22c4a639bcf2f494dd9e5a034610b0297528235f1d806cf032f5a86c5248a83ed6b12f0de27f5c6e6f49420000000000000000000000000000000011ccd5dd6d6ce553ade9b31503a9e6a6119ae329178706f051581e3cf0ee9d6fb527b340bab8c79fad1cd451c7edb4330000000000000000000000000000000011e9f051aacd69c8bfd2f0ecb566e6d38eabc43f276ba7a1b8e8ab093917dd1c672c61d6dac4651026823b9938d3601f000000000000000000000000000000001362c3b2e6fd9b3618df26ed28f96530c1915f0a4ecb647658d1ae4ccf4c000f3bd1797696c9ac5c5000dbe58dba8de44f0d2915e82c9a69f9e9af64a2c5cacf61ead492bf69912a35ad6a316f9914a8000000000000000000000000000000001819d13cf4522a9362bbeb0bbbb0a498c3f34da1c9e3b2c54d08f7c8acd9ee756983fe80405579effb79d673407390ef000000000000000000000000000000000f870e5978f4a6e3b655fb2a05541ac0673e7b10136adaf28be4dfc9022d4cc8a60e17d125dfe53fbe10c644ff37e02a0000000000000000000000000000000010207ef774cddd10db2bca0a051ceb12900c407ee265dea4615553c193d7475b5ba3198b7e0160740e4fd015dca33e1d0000000000000000000000000000000017937be546e06fd2eab4c969a029534c02fb770646d43edeb5e6c8bc0c2b5f35576c375bf860fd1087ce099d4377d24e25ed3f13198b69604c08b414562f67a67aa8dd4a7bd3c066874182d21ed9004d000000000000000000000000000000000db02fcda340fb27a3fd7da468c5cbed9c8dce8471843a8ddadae43dbec9957a0479aa52855d7a6dca99e7922432365c00000000000000000000000000000000163503d24f9af34058cb5afd8e9d5aaf29e141c8521eaac282f138466e834f0daa9ce14e0590b501680d5b47f866aa8c000000000000000000000000000000000fc9175e6d20afd9d194907f2eb311bf8134aeb96da72f6423610612f2ed20a074c113fe8bb632d9ad74b2f6e7e2417d000000000000000000000000000000000b4621f5e4465629648b62b7f2b77afe6470f9706f9bee5b3ccfa66c596842cbae26badc689f7f623360cb7fc1d416b84ae188cc115e9d492be64abefa4bd4c93b61dd42a7d213e1100b8108611a61630000000000000000000000000000000003c77c7efdab9a9e71283b034ef581a31faee417febfa99be3c18e8ab724c140be684ce719bc5a9ac5d3855ddbf3651a0000000000000000000000000000000011889b02b4a1150fc2b7191a95c5ee767f3c9b82a3a53591018242fa8685ee3b3542526dfdc00695a6cf046033b8eb760000000000000000000000000000000016d7463159c4e3cb635f24bfb944bc518369e894218bc49d7b7f0ea99240259f7ee2b4c26c6083dbc4559ffcfbd392bd0000000000000000000000000000000010a85df6294fd6406ca651f15494153e9802f0068bfa149e87fe4b1cc3071ba74940a21dfd55a8a77e7e2a193468a3d2eede725a693277356ce71ffd7814a77fcc30eeb3a2b8863fb91ca03da1cbe37a0000000000000000000000000000000016beec57d3049c382fc039ac96b890412c5e8075afcab599fb877f8639747a587e82241d9a8059a0bb45ad49959777d0000000000000000000000000000000000a70fba1b061dcf587f133035a3aaafcdace3b1e771d71887ae914919e5f52a99d9933307ec15b5f0a1623b9592824500000000000000000000000000000000005064161136c04f9f50e42a5cee5dce3fa0ce1dc0655b3785a852cb9741927f6c9b357ac1010d7212533d1593c83dba70000000000000000000000000000000000d50b992bc0eee37a15cfd32eda2c591fc4c4203ef84232d1a1e7a9888005bc00755d76b9d0345bb01ffa7525f2aa1e9d0618f898594b23ee3754fe390d6bdfa7d47fe749d6819e306935c1eab6b0460000000000000000000000000000000007617e60d8f67344ce6d2fb65cfd5b423a1fd091626da837dc8a51d6ffdeda9712864e8f30e45ae8df917e0e4625e59a00000000000000000000000000000000077c4aad14f870ba24703397ff0b33af2e50b026f3e0f13f3ec1aebc9ea3af98cc65ab56cce4045538ae6e5f410196f10000000000000000000000000000000004a31d0eff18afa87f9a53098cfd5d21e913c7519cb171f83d0b73abbf3e893a3ccd5aebb9f2bbdd3b0eb0326d37fd1b000000000000000000000000000000000393052e6dff65e01e79254af757f12eb1931e0b386f8cf0fa0782269f962ebc5d9bde46f5a4ad3806e88330aca59ff01e1c9420cfa91026286d7f986b538c13e8c97893995485308c69f053927f962200000000000000000000000000000000033aa108d252e9107f29cc7da79585d4525ff2a35d31479a099c7c011a9c4414d7bc5f8498f8a204134b2d14c5fcde5100000000000000000000000000000000121214465992bdefb970d420face6db75d531e67314a021d2877643ddf738fbe57625d286bde7f40efc1d329a2e85b6e0000000000000000000000000000000017e14f6cdd916b1fc949be8ba3ef9ae6cc16d64da4dd498b5458ea0c14eb7aab8f970f030aab26397110331da11a232d000000000000000000000000000000000c56ccda2a5cca61025253407e72967c767f0e7f2aa0b97d4e4a09420dcb882ff35039ae504a9c62b3f9e7bb0c2e7bbbe5095ed9a9181aee392888e3194ebf9c4a6d87b503f4668bb6cc0d290880a44f0000000000000000000000000000000010fb3396b0674b9285cc5d5a4e7a41ac002f2b43332c20a56f428d1e19e1d1bb6f886d3bf03f7b0fc509e52d75965e15000000000000000000000000000000001196b7c253c50da10815bdfd7930a69608187fc3ac5fbcfeb35b95754d3017a094afcdaea867c2f08346717dfce7bce8000000000000000000000000000000001021f178c53b7d7d2041a6419203d12ee162f27999dd8f79baa15c37a7401e7a6df6aa4192a310cc1a23bdb0b427d63c000000000000000000000000000000000953c75910165f11112583476574f3987495d33e5b1a5c650a2b30692592a442d9de36da49255b0c01a7bacaecc9b81adcece8ee33d3bf3188574e94a889794077035ee92473b7266d92a3c018771b4c", + "Expected": "0000000000000000000000000000000014da1d424c936453600a4acbd3666c6188493d4da8b34d6bc508aab07e59e3680a9e3488e69d42a724c9486d70ed4fd000000000000000000000000000000000048c637348fb9a4c631a82ded1fa08d693cfa2cdd6cdffb8bffee63d1bb2ee8676512a1a8d375e7ab942b6d6bdda45c80000000000000000000000000000000000443264e7dfca91f17251c33cf72c56b045902b4db2eb10d1fd856f79b4130afa6f29f3283af7d3b8b2a9d8dd63718a000000000000000000000000000000000fb386f875190ac7a49d4742edb387f72c1ae0366ca5c71d5b7e385c11442941ce0fb9fe2014fc624fe93ab86ebc7aff", + "Name": "matter_g2_multiexp_45", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016a539a21320574fc25ffbc0ff10c821d6ad20674413eaeda6f4a31f9a028e21cbb3b224c225a2e3bc3dc221cec084cf00000000000000000000000000000000104e44989e2fba9ddce8e309f5d3fa3129f679d6456ed11137149b50adf8b22c1a148d47154450853e6797aba2b006850000000000000000000000000000000008b33b8cfc992efdf7d733803a6d08a4102e27fc4960ebe6ebdb7949c4ff5af76e55002d93a4f7204eff5f2dc4e37ef10000000000000000000000000000000017c35411c571c302c746a9b79cae892e988d50b4660564660de960ee09b3937b6f5b61fe37d09f1c02528f554210744aaddc845ad867f1e2664ef0e78bced8ff6904c5836e7c63ea3a9c858fd7b710b60000000000000000000000000000000009cd32594094d4744f59690cf8d7fd260b5ffb2a22945d938c035151861507ecaac9ea553e7b44fc4b3beb03b33783540000000000000000000000000000000006f4de33731b9b13b9cb395798769e54a0679d272c2d5175455e10c790debabae4ee02b6df08975efe806da9c4a208b20000000000000000000000000000000011859798a8383b7f994a1535bc0a96a114b90644d19921f0eec774ed58dbaa899dd3736cd1f4a4ff9bfacbc7370091d7000000000000000000000000000000000376c25b0f70427d4974c4fd1539d40996b6847fbb67822fa01cfd541cd3a3f8a9f3fe9f7ddcc3ce920a6ecb27dafca0c78cfc6a30cea34d3d3505f4f897631f67ba77913734f6c2895d871fd6d5581c0000000000000000000000000000000003a178f91a135d59dbd65eacebab293a3817d30e734c247f56a08812aa540a5c80e3f9908d86ad787bab27fbddd21517000000000000000000000000000000000672b3544dd2b91a626f37dbb389aff073777164e3e20dc572b18a2e5223bd323094e41bdbe2dec9bada227efb37dd22000000000000000000000000000000000f40f2d279c66f22bf0fedd129e02c96d8906f9f1ec19f5a5c1cbd5beb10942a066dd391b69920a0a697138f627a1b180000000000000000000000000000000016ef3caad858d323b752e5c437ee2043c8f691ca0f1862e80857f7cc478a689df97bde5b1d1350892c1adb03c5d2373ba1e40df9e1f7c84633cb3dc2223296887de7281ea66c5e1f2d5816334f7b280a000000000000000000000000000000001276e133fc5e708a3265646ef0a0122048ef95d7fb46f78b8dca57dabae0164ca986bdc74e581604ff31165f9f28dca50000000000000000000000000000000008a77611be0502d2ea7fbcf73774fbaec68eba36038e2f34f79caf07f2e4b7444efc49a4e85f88af585fd28a041f26c800000000000000000000000000000000181ab176e391190b1cae2e9b4105ca14cc82d15890b0ec127d8cdb46f30b704a089ac69e76f5b50575ed66176950e1120000000000000000000000000000000004031ce77fe9ee319b8db8f220ef4480c81568b3f6e4043c8710b559d25ad69dd38dda48b2e11d5aead18db0d1cc09b98810b9ce0020904dc1903338089c30e616ed0be03741572ce46946883874f4ea000000000000000000000000000000000f26e6d71e206c88dc81b8b8a5c05ee84a9f185e7b7f155253aa39104b5de5be7bb6cb6662df4f8e63b37fd1682721f20000000000000000000000000000000010058d13637c8da2e91c8cda7dc2cf1734a2f14b12b798e5c563ef9ef3624255a6e1c7550c37b547c35c55dc736a17ce0000000000000000000000000000000019ed470bd514f8bda8fdcd9c64f7626efdde0102907bd31551b1d1972aa14e1d361e1d58b17948909a669fa4d99cf3200000000000000000000000000000000013277afe1891807e269c22c9aa1598c12081809d888e0eb2513ca3f81308700893f74f176858ceed9c7955dcc0d8fc6893e7702da2ff9f3f14586a9ae80c8713743d61b915a7c379c1faa1b151406a9a00000000000000000000000000000000083664daa965c4173d6028e047794703a16e52ae459d3db0534d13c72d749d603edd668b9ce500677715e45216367c63000000000000000000000000000000000f4e87a65f4720cbfde7868eaadb34ec1916925ffd84e5407defbda0c39e1c7afcbc90855b275d528e7b63fd3707bd4a0000000000000000000000000000000004c9f689abe0d2dd3d927bad4b39ab44f6704014ef9a1dcd1966777129e1c72515b43c1b92ee60e9611245454683588b000000000000000000000000000000000ecc57b08b45037e62498135643cf077f01d216b5106551daab391446ce7bb37d40f41378c830081bb6a326f0105c2c4eca54e365faa35d2c9be259b53a1157b180a373813382f47c9154af18a2d83270000000000000000000000000000000012b84341bbad1eaf7fc8ebe56f67598821017365b6f3b4cc1f2355f868e8d55f9c0bed2943ada202a7d85cc884d8e6a20000000000000000000000000000000017693721988f73d77f7a41db108e428b0ba781ea88eab463693ec352cc13d394101b9a2792e0f30c77bebaa395a4776700000000000000000000000000000000093245e2919523cd57a0abd2e8a9c5cbe774bee957f26d3cb502b9c8c06483b850b031461dc2cb033d399651724f4fe4000000000000000000000000000000001530f7dbf6a0fbdc8b4f7a4d298b7824c15035428cb8df834907e25c64b8985186bb13f397b7b99ea7014ae65c428b12abe2079ecb3618de3accdf291d9479bec32bca1f9fe87b00b64a12d735f5b9a5000000000000000000000000000000000f323f01f2a63bc6eb1b565594ded14043c4ea5d1f0fbf20f39299052617c334e6126afd4273738aeb153c3561348b8a000000000000000000000000000000001525d1e1fa65f1b674feef74f6c81c82c3eeb709e597aedabbfc2b3262271b31d93818613ecdeb49c5d3a6a64f17a5d90000000000000000000000000000000010458c15bf46947a237dd1c61882b1561121f64890681bae5db6fbd24ef6c34b7fcb826eeee1fa328d9ef4d859faf238000000000000000000000000000000000e1f29275fe1805d02e069082d5e9a7acf69be17013e6c4c351277408d49383fe06f00137e777ba4aa49c29c25c6c0ddc541a44756ebda14aea95f1a1d05e7366dc0285305116b907fc89e777ce45f79000000000000000000000000000000000efb7373e11694b966d0182a9b01d1e52ec1e89cb18275921294e2d36333460b1e49fd420f1ab781b000d1491ccb0b11000000000000000000000000000000000cafcdc2c58fb3fad713ce1a38deadba8636c384243f9971e3930b961efaf303cac4eef1e8e4662636ff91eff1bf52a80000000000000000000000000000000007ea7441e1b2b0f1e42bd511c060b646c2d00bb3e6507beb5d17ab93ff68515b02f82c2dd43ce035ff660ddb0c104a77000000000000000000000000000000000bd04b88caf9dbd0ef5f89d12e72aa47d64212332b0ed871b7eb96b16295cf4810f6f20cc85fd4d1ce72119f80697c1b37d521d31de52681f1d9bbf64a12f9bc8fe0ac61aaef14d7e8d048ff09e6578b000000000000000000000000000000000c3d2d978e23a690e8422fd54f36fbee1f642611b6c3b2c2413844066159bdcd3703d1a392b030446af04b654f8f73b7000000000000000000000000000000000ae652fcdbd8e467ee9b447e61fcb811f8b6aa48840476c92daec3285785a06a81c1705fc2896c0843ab48eb92555b9300000000000000000000000000000000007088e6441cb85aeffcb4a9a0c81ebfc54a61f35c542be3870c2bb94d7081353322d4745747b0dfc3e5db07f9e48c560000000000000000000000000000000006c11f3e0941ea3bde0dd3a562dbbdad433f0b1e99ba34879e86f7951ddfb29b9e04ca62d54d7552a74e8cf1c3da3e704904a876d4ac1341e88fc4808508c89c19dd74aa8fb1dd7673cbc2d28e7d920e000000000000000000000000000000000c665f4417d0163820ac96c83cc2f09b1b3c000023d827e2690aad7357ff59e278832b992703f5f0016051ce0a4510cb0000000000000000000000000000000012f4b6688300b253fe868b3790f6d2f4fc16d81a49ff7a2edf821de16dc992d79482d66e443e0abb5da43df69f8d648d0000000000000000000000000000000009e033750a118d998b136cd671d0e760e3a617f1d6a994db8f6dfc391619f408720cc57fe550785306184b0c824705620000000000000000000000000000000018cbacd471e528535e22f714a841f110fb0484826e30f97842d65072b2790dadf0bd7b28df96bec531fbed1f3f93486b68911b04d8155f90c7c5c0cb519ee6ff14c0ae27ece0374f30fa148235e8cb49000000000000000000000000000000000c42b6fd52cc52034b04078a6565af2b43948695851393596e05f37f297dfaaea931a33f5b4c25980c093f8a742c0020000000000000000000000000000000000fdc7aa20e63743dd6ab32c82d2d6992b29779ec06eebd452c17d844159e90a7f3221f3e0e6b5805dc0f42dc3836d90f0000000000000000000000000000000003a2342a1bd528d701c2a6c72708a16df632f4e4b6cdb3ccc224b58b57af30b44556cc968ba3c0396a5e3f11568a73710000000000000000000000000000000019ccf76462668905c5687b7612a0bdfd4aac70f291d8b772e84fd5d4bcb591556317426471242fb5f44fd695c7d49279481e894ecd52a252cc76547513e2cf0a5cc6b20c3dc9c64c7f34f29a488258ef000000000000000000000000000000000c8fd4a171c5fbf584f567a1c10b20628e7e0d5d796eac4a9dd2376f8d488da25b9219c7c70709999b5553f8bba915ae0000000000000000000000000000000005d791c907984f2aaebf903a0ace52147745295f0c5e85964999a8fc74b64c8871dce358f26ed1b4af6c6f7f18e8f4c500000000000000000000000000000000110a453bbba72ac171876e0f6b4acd5b178816301e02586a143c2bcbfffcdbf593655408b9aaa4141b2a210599f452ed000000000000000000000000000000001025d5065f9801fcc1c1ebebdf67923b967ce985b5ca27ab5db8af7057fda23561a46b84fac5e793dd9af692c4d56cde72780ab3c48c8a102469799ba2f70d2fd9d324cf558a8c8b49e2ecdb71ae1c9b00000000000000000000000000000000023e5ea1909032676cdb79111a33da7ed788d2affbf4029b932eed843268f355dc92905db283d6617fbb530da3d704dd000000000000000000000000000000000b46f07de520aa17d597586cb0a6894a356757941ff9bdc2976f620e1bf1eec1dd9801d6baa2d7efbb3cc7073412ce8e0000000000000000000000000000000010022940611f418de9f9210b1be919d7506aca468fe5853675fe159d3e58685bcff6cbc2c1cb9e7d45a7bf305fca0eaf000000000000000000000000000000001888b5b0dd1648d9a27345f570a1278238957de1bd30c195d554750ea4b119e98b3989b912c4fad531de416c1533467f84ae1de8aaf498bd2d91bd828bc64e56482b225322b86529da703f47289c65670000000000000000000000000000000011dcc334a5037719256e514b2c3b0f36396d8cedcd77f33545842c686fa0f35558c397562a7e245f8cc412c776a2b3930000000000000000000000000000000006efd32c6afc56a07c813fe19e71f0248666c87e1df7e79b7afbd70178929e5660e85cea35d1c6f42b4c627a94ae0d150000000000000000000000000000000005a5fc2010798c793c1b407a577da0bf0e04b0478f19b7d0cfeff8e4e4fe2d581461831db165cfd17146c49a732c41460000000000000000000000000000000011dfe3b62eb87b039113152af74ae74137cba1762d4ae62d3cb0746272d1c42d3cb4a8fccd845a519fd0650a23a897a13256548db55ee9de70ebf6fa347d81bc50494b937ab1c3079977234a34cbfcfd00000000000000000000000000000000110e73e44734b7ab63f021727b75e735702f1acfa6669e0dc27111794ebee371734764bb165132af3a7e02f3605456480000000000000000000000000000000005fbcac7c7334cd0e6468feedebe077b80390833eaa4c28af80d29e75d692a10cf13058526fa5e5ab0fb635335ac8f220000000000000000000000000000000013f537ecc28685aba2cd60d0e3e787bc8104a3373177cb93107b63d39919c583ad3ad7a42e322249d7605ef035fe1af40000000000000000000000000000000014791f94aff42bfca13ab328a3e47b06f7da52e13436ad477cf55e53b54108d3aa531f0a5d73ae5ed7108d5cca1ecf7a575ae146524544307ee51e58a654d7324983a87e1b37d46cea1a4ec34114b44b", + "Expected": "000000000000000000000000000000000bab02defb32b7938372d656feaebfb5431de1484361542c02519d20c6a500f0b0b112c331fe6f4eac3ec7f6ae4167e50000000000000000000000000000000000796b38c67df1361115bbf3a4afad2651664ef55b1ed02d3172f024f90a003fc3631753d7142aafffc64c6f6f57bf7800000000000000000000000000000000080d91637a93a9025e8691a400254af37cfde67eff7d3037d428596a808a01d9bda8025b7246fb00785cd1068b2752d400000000000000000000000000000000182a97624249f0c6d24672f04e2c93eff63fbe76cc11ace0f7193facd0655cc1e1ccb2d89d9547bc352a395efeb95afb", + "Name": "matter_g2_multiexp_46", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000115b14c4eb9cc78eafedd2072be4555a3db9e61b5fe0139bf3e40a92cc37b4936c68576fee5692a80e4a9aef05a9b7a80000000000000000000000000000000019c828ea555a3c8d28cf0981e98609361b5bafa8b62e860d121c0f6d0f0dcef544784e8a5fa6a9f1d1a68b30e8e8a6f8000000000000000000000000000000000a2ef5146d2658609fd4eb98fcb5d42f6c6aac4fe53597128bbba3ba3539042ee5824f381c41dc76e2c6e4dbe0665657000000000000000000000000000000001807a12ae5f289ecde8ca0a913647d44209b13fae9dd6aa8fb4365a3beeb81652ec17cf92f6784c9ca5a077824ff6dc31129275f3ab3125db33d43b36c7de0ad60a6e9cb4457aa03275caea9635f0b0700000000000000000000000000000000186bfd109ea2369818ae2f466953eddfa763960caeee9d6f1ecbf6a3f854163342c26b56d3844bfedd8f227070f75546000000000000000000000000000000001877077daa2ea074b2868e86faf14efc6ed35a64161a77aec54624d9cb916c45de81b40acc3797c6e3338fcd7a42bb0d00000000000000000000000000000000054be1650d9bb6cae6a1ed08879668e4aa4cd139c8b07ce21d40fb1cf37f11de730ff13814a02d2d6d6df5eec4afe8470000000000000000000000000000000001612b5b7c613cb66d4134aa867d985682f6a544147e7865732887d4fbb191a9f5bdc27bfbefd397f38cb101a2d68b192dbcfd8680258eee451db60f3f42f02f388f87440d00badb0a725964042515c90000000000000000000000000000000015e2b23aa42f1e6a07b0a31dd4acc27e35ce1fb3333c3f330f2d88f112375cf24e6dd5afc4d245531e4e84f1f82230ea00000000000000000000000000000000193649f3b7efb346e0c1f7bc05b0910311270cd44b5803fa16e06655d6239f609363344bb7c16c2105e20709fb5ff0400000000000000000000000000000000002a6ee30841f471dd2ef13888ba03c9cb93c85cfd0f1d0a3927205e3f57fe291bba7eccbd2352f25cc4047097fbb63860000000000000000000000000000000005482d4a47d6e381f755c4756a761f0310d0d981523afcf288e47a1a643d6be62ac6410521e0f25828f469af6150f41e5a6f194abeb6b7c1c561aa820bba658f0277870e2a32f972f9d18ca361929b01000000000000000000000000000000000178ca460993d503e496633fe5230d895bfcdd0696d817a23ae94e529bb145a0861e4448d3bd48c55907be762192a8c4000000000000000000000000000000000015d2db77105a8ed6eadc05d3d1f26a54b3d1b812a58ab49a889f5b7fcf5ec08c2eea6ad09484fda29cc007037a1f6c000000000000000000000000000000000fd5628d61cd0835fe49fcbd2f17058f23d0ffaca4474923a2c0706d9333d9881125efa2fda56234a82158da3eddb5b70000000000000000000000000000000010ce4a0bcada5f92cc8898dbf5c108c0897322eb6a467662be569d9ed0f6e2c808e214b83969ebb86c84d38f67d20754579450b7aa155a3ab61e47e337ddbcd17b197de2dbb76008cfaa09d3fc806be4000000000000000000000000000000000fc4ed0ca43d5cb172deef02704579187a480cc977737070b8ed2dce48d3f3141619f37e985c220a2840ac01dc5667f900000000000000000000000000000000047a15e96760affa4e537a45aefaaab1e0e18052f63514a9f6544136c87b7cb4a5c8dfc0d9544518adc7932ce9cff5f1000000000000000000000000000000000c9be55c06f81e87de58a5c1df8d16174cf4115f81091937d98dad6c4780a9b8dae1081f8961fadc4f994ef62927664700000000000000000000000000000000165f9b1a8f23831a91be8077b18563c7648e54caf30895983cc26580241ca7c86b9b30408a9b27776286ed9f07bd8ecd4be94f96ec4a3d4e028644c63b2577a9ef849b403acc55e42432c3063a918d160000000000000000000000000000000006edc0d62ec31b14e87b2ccff3a21a7c8d38c3ba0ec48bbb8df27fb1acf58e1a87c4458dc2b770172460adfb9a9bd50b000000000000000000000000000000000ae80063df8d41d45fc43f3aa0881364ab5fcb9ac526ee22d3870f2edb0aa379e9d81780b0ab08a4cf308d819338deee000000000000000000000000000000000e0898453feebb51d9a1cd2bda36a307ff2eebf44dc8f4c694831218c42b51f723ffe521b356ad4e5f0dbbca9af9ab47000000000000000000000000000000000fd186dbc046dd02217cec3c7894972f71e5f00e00a40fb1521659a33e079b7a1f60b026d9055a50ae18aae5757ab8490983e6618e9e4208cfbaf647592e42b2d30de9e74e4943fb2bb49109a66302aa0000000000000000000000000000000012134b433877e0a7858e6c3b95b2a1dcfb0548b290b68c209642dadf550db1c636598ac43d101b13c2d8d5ed9602a73800000000000000000000000000000000102b5de123c449a078f6f06935c9537efc791ed8e5475ffc2d9e1d098c814abe56d4b7fc6501c315edf7e64a431c5183000000000000000000000000000000000bce703ba78f45a1c59c69429d3dda18243ba2413c5eab46d469f504da975c434eda451c85357738d6c7054755d5cec1000000000000000000000000000000000387724937bfd817a65c0e0411678cdc78df26ebd4a814d92b023710558701163349b56b80e6bb68a4401f2662a0525506615e300a924ab962e0b7fd0b044cae9516d96de603ee80695718c27d7fba0c0000000000000000000000000000000005abed9305bb79a0ef1cc70e7fc2eae35a8580cd3d1ffad73d3bdae541ad546b8f74b4ca76f8f374e31dbdaf1bd14be9000000000000000000000000000000000199b29da8d161ab3061a18debc8b7400415caf029ced47131e27d81a0f7f79b6ae5e570f34a4c74fb85fea1411bd6ea000000000000000000000000000000000b8a7c42f5289d20b1a55a42d53d49510d3871b6efbe560bb4d87029b85b930f787c3a42e225006ad62c68d5f96c2f8a000000000000000000000000000000000e74aad2b29a210cc316181863e71a1dce8866a088a072ad5972af57b813a2e968a5b16b294273acd6e81e9a5be2961dd77d3e9e64e00b9356cceb62209ad48fc89e69e2214aad2edeba1812272736390000000000000000000000000000000001587e32753adc85c98cf1322115772b0e282ef4e6a75944fc86091e81aad076508e3d727f4df0e30924fff6b67c312e000000000000000000000000000000000ae96d3a1b79985e56f80df8ac4d9792229ca580b156dbbe71a9db470447fa4dfa19fc8a8a2e2f0fae28a24b7d6153d100000000000000000000000000000000114101ad0d29ddfd2fc436d2a270711c444c8c257785f4b4c549e9c795f6dd9834d3744995d2188c0c968752a7f68892000000000000000000000000000000000d30d9cc1e2273af745dd47a596a2202ca4fb655f9f9beeb0a87631e2461f29206163fd921761fde69654cb02e23505c41f75c89ec973f65b11786e186f4d42ee2e85c40f29745d9f428af08a39d5681000000000000000000000000000000001611787ba658b64467b4a28e55ea24a3b230836af6c2a7072231045ee4ee38e02302a62688d6f988f76cb5e50eba40080000000000000000000000000000000008badcd59d6d30f26ca674753ae9257a853dbcf49a5641999634a9a35a97096b6096b7b058360bec2f9476a51eb0d781000000000000000000000000000000000d30154440d8bb5fa6538953a96ba404658817be8047fa7a3a86493f02399543220758e649948b804f2daf84fb86f7580000000000000000000000000000000014fbdd62f761fa675e4cbcb61083a910bcfbd1f8e37f1fb1915f60929b047c970b87be0730ddc20f9716ed8c9bea7f19c70cfb76a04d1a9e0d937292e5553ef371e20d5d3dd33611edc0da178e2e4a1600000000000000000000000000000000143d1f811644e3a51c735b708cb2f8a2a90311f9971c90b9ec8e45bdd6488638b6851dbc882205263887b4dd5dfb4e120000000000000000000000000000000015692a6b06e3bd3100e149c6be3cbf1566fb24531eb29036fc48f85d5da83316a38af4e714a17552024c1ca4a5e39d9d00000000000000000000000000000000172b9c88ed9a1fc2d5a7f147d034fa243d420b129343ff92b79bc4d836e380e5a7e388069e9af9026485e9d3f41a7aa300000000000000000000000000000000012e8453dc64f72653c4e9b3f6f43fdd01b896c642d21604f992dc5591f2cadf71de4099e1075a4ca4b7539f84dd5a908db878b7f5fe817599add432ecf262f19d80ac834bb0a0f983728f6e2c189c880000000000000000000000000000000003e9b6d23809781f50c0033e53d245dfebbba9e0c4d9f676ae61b80fb6e774509f62fad854fd9ea841d9905d48d943a30000000000000000000000000000000016a1ba62bc684bb1848b0ccba59597b19973b56fd9b1d9d06352de44aa79c6bf65409dafb54f859d4a7c32e188bbe19d000000000000000000000000000000000e782741a4b16c5838a8f6e542135221ab3c6ad180c85c08742992ddf0239388e273735eae76c656e61614da386ce2640000000000000000000000000000000001cf6752e88990c221af94e18744790c30aa6a158b10a1f6a56c2ee3c3f0fdb2fa7213f16764ac9e9f4f65e99e715ca170751fe88ad289c91dfcd3c3c61ce1e33f4146f03fc0dc77cde9b32b51c75fc0000000000000000000000000000000000810b0175d781256053c3c9188cee4f55620a6624bfbd2f4d2e70ee68a105bc7b60bafdb76794a048e9f25da976390d4000000000000000000000000000000000716095f8fd72d9350ca62ca3ec34d2228cb563d4e89b19b152787d42fbb750435aa6233d0a97196a9324319837be14f00000000000000000000000000000000178e939d87c37d4a2f49e1e5596945879f2f0f64419e3dfe2afa06bd58098e1ba57a9b60c32cd6527481ab3b325ca827000000000000000000000000000000000aed480a1da482e40ae610a9522f0a18399b0130202f9ca79e3573987f5f7ae30724feddb52fdd05817a96f7937aaf7984bf139cc0b6ac94697b7dc278063a74e478d47528da3f84f55fb0adfd851d09000000000000000000000000000000000133adb236d9eec3544fc91852278abe37a1da0f32a84477c0d93927d64af613b7452a5f64ddec7447779f42873cb157000000000000000000000000000000000f6bd940b51b7ec5a0d92ac77a55c296215e970e9a499793864dd69c3a8d583403e95c08b719b5d8eb0c37a8476d3b960000000000000000000000000000000007d4444062ae06e65b45c6105af53c487f6b275ecdb36f87ec7b71d5861a1bdd6d735e9a1fc5dfb476ab8c13a98b570a000000000000000000000000000000000e043cdc87c67157b5ea3e5ab1b243aef479b23861f8cd823bced140ee03dd1f8bc6cebb4bde4683ac3340823f4d55b8d19d9496e7ebca44354d5c6e1f6b8211eb06ca23a6444c307f92f5bc6dcc2dbe0000000000000000000000000000000018c35112c27caa6bfe9cf8ae55f51755ed349ee7e7141c99069dea07c21a6d8634778a91f4dc3d17da04966a9eaccab5000000000000000000000000000000001800c8a9b146dba27050ce63e78895bee2016255c59acc34fd5e6cb926c16a8fcd2e8a579fa02559b3c571cb08011bea0000000000000000000000000000000014afab23fd4ea54b1ef576a12a2a62d42b493612ef466483ee8c4e62908486c038598e72dbd9256166960db73259def8000000000000000000000000000000000899a99ae8b10da4bbffb6590d79aa33bb2adb2444a11627f05622c732b70f90cbd2779362349aede5b591e84b53a8a06940e3509e1fb090fa787fdf633a74380cd5de722678826224641e46a6e920df000000000000000000000000000000000567d6458d1a3e012c63adc8b9dcf32254c98c0b7021ec6a8d579dad47d501715d2e42a0837def225515d663e663c4f000000000000000000000000000000000178daae121366ce025c1dc2d3e72068fd40ba9d54b2b3724f7a2071a59d4f17d4766a82364540bc31a46398c66d0e7da00000000000000000000000000000000147b2851311913ea53662082acfba785d21915cf00cd154b1b495246e109ac37c3fb6c63aabc4fe71a0d37c81a40148d0000000000000000000000000000000000122b7b1a81888aee37fdd6c23d31c38e79f28945cd1798cee3f4d674e923fc68311eda8ce45a561abf9c5f0bfeb4297b27d21c1d6e06d9fba7b61fb87d364a7a6252c70b8ace2d3679ed87ce0fcf7e", + "Expected": "000000000000000000000000000000000f5b941cda417cce69a30c1ba4a82cca71cb4b953d06d8e545c1b792ae22738dc006627da02b4344bb8be93a5a0dcf07000000000000000000000000000000000eebf4ac30fe0ffb905f81577466889666f801d4d6efe0fb8a663fbf1cbe76b2167243edfc6cde3f49d97d3040a9507400000000000000000000000000000000007ae6a99b86dc7ea95801776589472547ffc7a623009a592403a9710ca365510d85bbf20fa4519ca0e0ca208bf86a670000000000000000000000000000000004b5abf778c72bcc5b887855c582c042a4cfff489b0548785e4c1b735b19159be8a3f4cecf34c769a34cdefa722ba783", + "Name": "matter_g2_multiexp_47", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017b47384e6302b140118d0a9247aeae2091607ebb413ffa232223bb42d16753b2ae48e5ad0265e33616b25f0c4234be600000000000000000000000000000000167be566292b835a42ac7c099d80e8a0b5d4ff91d842d4ff6026876aa1570ef9641e9c0cbd44d8578f6a758717bad6f10000000000000000000000000000000014f692d195979abd9c55ac132d0def925d4e158fe946fa7b0a010c475d60171a0951d4b68ae3c463bf1136600a1ddaed000000000000000000000000000000000ddba1f4236c5200aa52f8cb7e15fac1f20cc66dc65ed180745a3eb8308f2c851ed6c1e27e1507d3f902ce672d6f8d24facfcdf87c6ca0506b070abff83ce7812181c31729cc534497aa8dabe243351300000000000000000000000000000000023d08e255b244cffe911e43b9b48408f9fb3562edc2c27f405bb657731c885a58392ebbde9fc80cccee2404cc8547ec00000000000000000000000000000000088ef289adaf206afd2b72c93049fca2cf9292bf6471133c64ac4f42015b97bb9a23f6c34653e0218fd0abdefa56bcc60000000000000000000000000000000015cb78c1440f74b17125c547fe7a37611f01b83b91a351664c696e0f647bd2db3ffead880b96a327780026d74c9abca30000000000000000000000000000000004d1a63607b9a5c9ec31168d85fbbee77cea0ae93e98c8c1dde14d0baa72f91042b2b7ca489958344916ce79bcf286456546fa692d9cd61895526282193c90148099e2afa54f7903a5431f932bd5fa06000000000000000000000000000000000ea6cb7ff6a7f4ec38ba11e9945eb406dbb8517585fef6cdd64edc970efba244b071fa162f7c8e184acbf71c5d1e12160000000000000000000000000000000001ab80c0dced33cac8a6a085efce71dcd7021f6255684bb631cf5c1716021bece57b900b819e6eb6f5b755b74c677b6c0000000000000000000000000000000005465fdd51352cbcd8b804cd509526c3b6232976b8278cec3b7db7da14b77f78898c6240c30943d1418462cb7a5abf8f0000000000000000000000000000000006b6caa6a0d5f2d671b10217c0ce5b3962b0c3edb4f2918497c316ebbdbe1a15c803d7fc3413907346f0e7d03920005aa9c1460c1cbb2a552e3452d5c5535868ee9c2952ec3fdb52dd826c16ae3d00bc00000000000000000000000000000000170db23154805a04013052a388e14b5da00e65b35b8ce2dd967213a74735dcbfd28782cef1ffe9d384be3ecadd101e9300000000000000000000000000000000082dea309092976408a379f1dbed9d8cf91f768e2921e49ece458859c80a1d9efd4d5e588470bd669c777d16f9d2e7de000000000000000000000000000000000adba8ef34e197689228e6c4e13be75b3d4732872c99b865ce7733b7a42034d6d4d7520ef7ab712f60f1ff87bc4d9d8d0000000000000000000000000000000005df0788ec39430fcd0625f8e030d917d8e7c251ee6e3b0e79fc6fa5f6fac2ad736c818bd833e58ec61cfdff52c9c6ee2c36204b6a005a64819b06804eb94c311d78977b557e7acfa82e147b4d6ec62f0000000000000000000000000000000000922d8b5db6e415aa3acbd0d6065db1b492c92313260019ef1bda0fa091c4bf091de95846af1edb34516b1abf7d278e0000000000000000000000000000000019af4ecc4f278315ed90d67cf4d22ed6fc9af5c0d0ca654f6a74a3c4bc98588bf5347b4536f36ca8b4750c18464f9b7b00000000000000000000000000000000021eaceb11638bda8b4293991983f11cc60c1daa2287f4b4a6066374bac82d117ac3ea4ec73afc4372d254bfc433b8c3000000000000000000000000000000001037fe26a10305cc5dc11a65edc705be5a0082656cad53e63038ee57a79e16075df54331233229a129483c34d6dd92ec9160c5a553479a10996704c3eda8e57be88eaaf5d1efc8371e7e10d7d106e4810000000000000000000000000000000011e63dc251a5a1e2ec83741682d90588b6b185365b33dba45458b1f56324a4900b04d61af155a0edb0bdc2971b7aaa210000000000000000000000000000000002dc1bd5448a2ebb9a02509af8777616ba9657bd3be65519233f0187df77c49fc931bbd3ec0ad5856b2ec0dfde476a870000000000000000000000000000000019f0cf8baf100451313711bbb0a0fa318c14224933897e74fb727b585cc8620b7d741c9ca2f0d3cbe14a8749aa48ef3e0000000000000000000000000000000018448fa9e05f87d4991ae1c248413edc9a8c3ee789c9c005e691bfc9003191ff469e26db9e42e5758fac79309a62942c5e5a50e5dbabb7a56897935683f80a5b16dbef3c23461e241fbdfceea38e3ee200000000000000000000000000000000109b71c19cd36ef3078bbae25ce6d0e8f7b58e129407fe68ab09aa747bfb3e90c04ab804fa6b7a223c172146fdb14683000000000000000000000000000000000d297750ba112da88beb84b8bbf74ed134b59fc9496da3045aa6dbcd97c68425fd68b75508de113733602a5565f4c8a600000000000000000000000000000000149b8ba6e05b66d07b353f46ace4e583bb61ed18fdbcea0e941b8d9805d3168040186d1c961add494f98e4e7fe68824d0000000000000000000000000000000013a6877bd46557d23b9aaf371ee5a101227d7938c64503b04b39cc6cb4e8ddedcf5cb6865439c9f8b1bfebb807ce52e24a95b293daa2761cc456b9667517f499c4d9eb9eb1d82237e7a7819b5d44f7a200000000000000000000000000000000073f440c2704fae6c86aca3cee34591ec03c362c2c5153a5e82c7bcdece2af0c58a3484b448c8bf4da851800ead959df00000000000000000000000000000000075a2c26372b482a2420bd3c9952fdbf9e5fea906dc8a4deb9691f8745372805bacd68a4838a3fefc381a2ce946ed1780000000000000000000000000000000017575b016435782cd09901afd2ea6773b11f5a983bdd19d14668d75362f95d055b76e5bf6966b1bd7bfdfbe9a939e4b60000000000000000000000000000000001569d74258298fac89d0d91a9945780f4c08d7af7b942d06255ae590db6e8509c908c16bd2c2bb634279debb72f489b5e22ef32d111261dfcb5a2e8d23c8d920f013bd9602bbef45e6d4e0909abdef20000000000000000000000000000000017180e36b925e2ce23c46813d96b919ca181481efb5d1666c4a4e9c8031abdd9521eb8228c4e3f16de0b33da4c73588e00000000000000000000000000000000138965bff7c573546d80ef7efb3d45e87ed20f59adb0cd7ae148d09a97da7feaf1b0ef2455ca19381762768a7d82f486000000000000000000000000000000000360bd29c3f07c5b560e2ac226112a628839da9db18b052991eb2d9c54541c1b5ade9b3c2d7f446ad50050531228120f0000000000000000000000000000000007105978bcf13bbe2bf5c8f7d165998c3ad99b6a2794c90f5b61fb7bf2472d307df8fc9f4afe7ae1e40e7f0eee8ef9466e687c0ac8fab70de2416642afa1553bb38183d2914050602874491057f78786000000000000000000000000000000000f4434c5180ad10cd45dca62b8da790cdb912c255c0f33950f7039e3885b38fa9e9297c7b0a875380545839d8c4d4ada000000000000000000000000000000000d0dd1429e512884ac209f788b5832d31649a78a8966d3348a93f841be23c8e4e42d6ff0d6c27e8f43daf495c9582935000000000000000000000000000000001307377f55dfed30ac1a406671af1895218a01d063b025d25bdbc53f5f9d535e4cd8053c09b2cebb25d3a08365ab8ccb0000000000000000000000000000000004f5c06f505ed15aa7661249b7edd71855bbf47237e049aa951e1ea3ff88f98591518bac975ac628e417892f8e9e5523428f1a27ea15135f044643dc36a3f9c2b4446a3136bb11f696b0a430a7454b3f00000000000000000000000000000000083336fa0b79691b4875ed27b2bbd2d2586992940356f6ae5ddd2021c5ddd87f07f0a5c1e8d8a2654b99182cc2233e84000000000000000000000000000000001880f3824f7cef95ae5743de2e17191848d8d30f0469f455461c6559ebc75a7afbc86dfa3ee17f5470f74018ec335edd0000000000000000000000000000000007c2b26353e86223e5dbd4ed6d59f1170b9cc9dc600fdfbc6c73b96f2c667a82128b1ae5af0542b11a7d1efae87c75610000000000000000000000000000000002427b7eeb497a20cf15c10513cadc9ea612f3ae94e2ae833d281734e7b5d1d50e240659ac01da7864a95b4cdcf88744ae21ad8a6c9d75b51133e81ec34d66ca70a52529c5c3a2307b0e8d6f1c5e7d97000000000000000000000000000000000e72845430ebfb84f8e3cd3dd418f6dc528bf521aca4f9dbd798ed903ef0ea3cf21dd1409aa3759351be32b21d8e8cbd000000000000000000000000000000001457ad87f0957006192dff7d99815c35adb3635815e5d157542b9f52f1e9f8c0143a21a3be4dc1aea3a895689f4a316f0000000000000000000000000000000007e8544b1037ece2e5a9ea387e0f43b72e895e9c2ca4d205f12bf6df0b35ae62a4d62756221d6fff65b928b7358f48b00000000000000000000000000000000012c5c3167f6ef118c4044c0aafc85a337d305437d694a7bd6fb406dabb7364d9e90d74a8b327aba971421a5b3dd5d06988a23b118179ee2c34ad030993a2d2d70375311b95254c44254a32508abcb612000000000000000000000000000000001995d7cb79da7b6c5a0c8ccc5ba075d8d6d8ed3cfca85e8ecdd2b589986fa58c4cd4f045983e9184d79173678d618f310000000000000000000000000000000000f9f7f6bcff0f6fd621f3f8fcfebac132b3f0d52a34af33bb9830bd714d2982f3cc6674ad6ca668131a5062e5589df90000000000000000000000000000000017699b298a46829020e0299ab89ab6411af0a602dffb0e149053ff40ccaec71a908da02c8e611723cd06c16a8e5c0f2d000000000000000000000000000000000523b287383c1e47a6f31d397359941fe0bb8167aa11604ff8569969eb5ccddf4c4f432d2b6fe6f39204020e850d4f2b30eac099ededf0087275d1af828bbf79ef7fb0e77179a068f2ebfe4c749a98c90000000000000000000000000000000004760120239593cae5bdec813735ccc99a88129c707686cf43efbd48fb08d8da3086879a6042bf118879fcccce0736bc00000000000000000000000000000000105b8191431f701b365c66680cb4eb267681ee4da17ba55d47cf26d21ba1c0c3eeeabcafcc79dd87b6457bcc91e9fec600000000000000000000000000000000126ab502f66e732aabe02fdb2f7a665a9a43f6b4ff21c22fa976e7e434b08b606e9cf0f02459fd85f5a80a332fb3a62e000000000000000000000000000000000b2ef01adea6c00250f2f14c98ec6d6083c45019f3d166419e3a137667324f80c34b6b72e991daf72e2eaf9985d0f9287e8dcbf708682225fe3f71b7a687da23de5ed188e40585be0553358012132577000000000000000000000000000000000ff22a0db4f1b1679bde5853a7c2932501f191f4a9f25eed968a796219cef028e26070851a9036a05a04abd73bd6bd4e00000000000000000000000000000000097e9310749f52a4b645190069f4d52315f0eb2ff9cbbcd31f1781a68b2664bbbf27166e6e74fc2be2e5b1eb3f3d77a00000000000000000000000000000000015ca218d7d128095bd4f4b4f7bcf7666e92b905e551dd22745bc743ad0783b6ac44b841f87d3deac44617a7c9a341c55000000000000000000000000000000000a1cb723a4c378e5db2775f4dde9a6887ee3313401a64130a78b90d65dda3a5d9c8bcbc1a0d78c310c869a7fc4889954532cd42a9b698a2c2d22b1a620a7ec60daa9d1eb8ac36894603be7bb9b5e37be0000000000000000000000000000000018b30cc461a4e1fbefe209a709a21ae201bc6094b2d15f0d6dee5a55dd84ef56b62ab1b6bd513b27c84c638291f4205a0000000000000000000000000000000008a6f2082d6d510b280a270c09044ad31fb18b851ad2b38859138c9c2e4870fba6b607f682a798bf21a13bff116014d200000000000000000000000000000000150ef352d494a97d0a7ffe44903aba1611c8d81fa2788c0f42a6db48a71101e12f07318da5ceb1f0af3aa10cd4c26341000000000000000000000000000000000ffdf3b133cc926684e4624531569bfa09b1658e29ad9c3efbd5e9d18353ffbbfbf23a2ad80ccee88f8fa597416d47173ccd5e19892765e549a63238e664c732af781fddea558a117cb927bc4a1aceb5", + "Expected": "00000000000000000000000000000000134f45e5409998e657923ca76ce92b7d2acc932308e0694bb22f121f8324d16bfce86f96c67111c8080289eada4b4fb40000000000000000000000000000000008d9063b7845ffc8400c0b7585e819043884f92e28f7e3ffa47a39e808cdbb034ef4230b6e19bebf083e939b6b686b0b000000000000000000000000000000000e95f8fcd6b5bcc9e00a580a99627d92fa7486ff5ea587df5dded24d1b0bb76d339f6765a5a2058a8e227f633ce36e91000000000000000000000000000000000393041eb33f2c63df3f40d8ea1e1a9eaa9eb0a46151294845e542054d503ef69b40b0b676b0e4f3e08f4d26c36a5d4b", + "Name": "matter_g2_multiexp_48", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000042a220276f12fb4e81c40ecef3a0d86634b4d1c0acfdc463df4e7501289f0be385e03808d44be053e6ac98f403a8a930000000000000000000000000000000004e3dc92e155aeebdfccaaa1d24f49efc8b02e4d9ba8500a5b953a96e0fdd58519bbf1c279750eb8b98616e6bb9a3f6d00000000000000000000000000000000086bc212a83b09c7361540349767896058d5567d4342c607ae9c07fe5f123d9aaac95ded6cdff0825edb5acbce3e2b6d00000000000000000000000000000000062598cd6d5680a155b6349cd51d636c1350746d17fe0fff5195f164ba2fa51cf52f8662f43d555f7be6bb8bcacca39448da17551b2369b723bf932173a9167663f8389d2461b763d6a061df78d7ff1c00000000000000000000000000000000193e2c749e5bbe87dd5c306d822740969cd69ad6e156c323d217c08b18bb3f97c85aad63aed1e3a455ffa1b6d2a670340000000000000000000000000000000012a3dce63a88ae32a746e3812833569959021e1dd9518621793308f8f11d04829b2c3d0e0ec39fc48dfb8285b6852746000000000000000000000000000000001235488d01c380e91872fc57cbf618c3531a6bbf6cba9dddb9f07168cd459c9e866e44e9e5336369cffd8cc3a36cddc00000000000000000000000000000000010d85f85d6242b63f8421e92f1c37f64d33fed67e0cd3dc4b2b2cb4a7fc7637f9e049fc959720eae6d1f452159d48b78def52379c8b9e7c24d971c3456b85b51a63ab03761ec66c8dfac1018833e05940000000000000000000000000000000010889825c752d0ae8445a1d0f3510135b9672c30a781788698f637c2f535e35788d76492edce8ea091223d016b5cc141000000000000000000000000000000000577175035c86c022e634ccc9a5beb96a36aa068cdc36e5a4fc2028d5dd099c5296d30a916d3b720f2e051e7d72e4d490000000000000000000000000000000017b46e49ba08a0abb9394479d693d8097a140094d0ef1d1ba7761fb601a686b0b2b4d49abc2e393a99c5cb760299992b000000000000000000000000000000000820f8e52c1b09986a70bff04909b044f671c3933de43a6bdfcbe3712310274ed880d7adc4947490c7de095ea651e578b2225be6985b9c8fa59a2890da56427612a4334937761e24a33d37f0f951a794000000000000000000000000000000001776b92f683069fdc006904fef8e91f716d9f6bc46306b042228088545f0e11a41b40b60722d4f0483250391febc0ed90000000000000000000000000000000010d5052ef2504115e9d9d4ca81c7080c0868cbed605dc7673f7f94f5959c793c96aa5334175e58499102ff76f974ced80000000000000000000000000000000011d1e719bb69d842df4fc23e8dc4393067d00f6fa8ee42d89b462a546414b91f68dda5378fa093b3ffa764b5fc63b1aa00000000000000000000000000000000099d0784a200e5d2d38773912cf1a49e813c871ede8c50da03abff58ec1943d2adefe66bd2feed1c57f5a80253e091d0a64ce8ad619276bc7a00cb49faf6cc84b917ae6b37654363f5719a727a220291000000000000000000000000000000000d7287adbe0bc3cbb35ab8bfe69064faa83e3e64d73a0c64d960949e10070081a99c35d1dacea5a3b9bf312745acd6e600000000000000000000000000000000034f1995eb8631e080378b22a51ace902ebc9da4589c89ab557b6aaf685fcc74ec1fcf95f6b9a31b7a45cfc5a1610c640000000000000000000000000000000009f56712a46c0fbc199c12d5eb7abd60e660e2c6d437007c34954c6234a0496ad0adf68cf759f8ea30980c9a78175e1a00000000000000000000000000000000073fae1cb78c776188190a4d7223f7cdce9a36488193dc06898919ef4d5136099c3185d352028760c753e9eebb52ac240b891d638d7e76e0dcb230b1f9a7c3b35b35193c43a6c86f345f5a5bc9c708f500000000000000000000000000000000019944fc459fb601bddf10a3a7eb55f34713d396c3208a10089b8f21f4bf0a5e87e95ccf73e0bd90474d3e043f37a72300000000000000000000000000000000158445bd2b6d396a390a0bd5e26256587f980eae84d7a592b2b4d788c452d312b854427185a770084e1b4c7898962e50000000000000000000000000000000000ba44a1b912645354da7d8d9c694b1d5a9ff2d642fad31975171deef3adb0f8d92b2d3a8bef6ecbe0b8e90470b3938d00000000000000000000000000000000012a040a72ab035684bfdf57bf473ff59cd1ee01ec949dcc6066e5c8afad775ed55123859cdd74c7016a092bade7f991b571175eb91888222085fc2dfe0f4401ed6a1fc5df86c0c6b8e44fba6454305bf000000000000000000000000000000000317ca8fdec8c7c56fa3812157f9ca8e9bbf91013dfc7052c0795a04a1b4649b2147d9cb1a61f2c114a705e5133729920000000000000000000000000000000012b893d50fe5ea2eb528d1a04bc8596b10d4714a0dc38bdd5f0a275c07c846970106c3f7b5686685f5c809e93c57e2ff0000000000000000000000000000000014f018a0d13c4c494f4a6b7e836f0f2f46c4b7975d91adb93616a0555910f53574add03b905000f8492465c9b5488c1300000000000000000000000000000000146eb4ef1103b525dfb5c31bcb98e550245732fa252a814824258093a2397d1489df8ca0228d4f5df0a00d473d1566c454c9e7f7ca14c66b8431e25e6eddb4f20507d03bf124eb607957ca2f43a0c17b0000000000000000000000000000000010e9962dc19aae8e92abf32fb9c8eac44d77f587159af4e3b3a080748322715a958d953d3c057999839a47dcc840076a000000000000000000000000000000000ccafa9761e654ba54a46afff51384f1c6331264082e23f94fffd6c31a1b1b568a391eac79417657f40ce2fc9a154a670000000000000000000000000000000007276b111c94130b2608827156021815faf2be29ae42c454f3e2f95de98d2f5b98cea3eb18335a8fa00e5464f8089cf300000000000000000000000000000000053550896e867e237086098f4493caa2520e8c97a05e14d0ab7012d37b7fbbd42a90accbf0fe2ac99e78ccf0be5c9c58000579e1ad83015c8f02a9db5c38d0220368a80b309ee45bb952cac824817b6b0000000000000000000000000000000016b5bca8537059362147911da9e69ad3ecd3b4a7c43ee7d6d809f46c74c16bc7d69bfb5d7c727b4d5d8a356a0458b59e0000000000000000000000000000000010f3a7eefeb3033a733af7d20c3c5caff4c409305de8d71e08cb9cefbdfacda41bb975c92c5e5f2952c3c1e2bc6ca8cc00000000000000000000000000000000148f5b2bd65b71184ba6974678f709c5f9e3f1a020e3d4bedfa5f5f66478adac47f06ca2626c4a759b5eae09756cfe49000000000000000000000000000000001301306d1259059b5567154ef6e4779fedf98c29ea967ce34b78147c5730f202e1c12d5b5094219bf85fa62834329b45909a45c8b78350e3ca21697e9f56d5fc8fc2a01817b78a7f5daeda487768ed1e000000000000000000000000000000001741f739459f5d462fc9ab55c68101a5a3f2741c05b4c3eec6959b2aa5e12493a19d1b33a9aa89337add642458089eb6000000000000000000000000000000000300d8b7988522706c0690da52d0a67ae41344e43cfa05d22feb91eb8635bdb970810e993e0ebf8fd63ab8fe3e048d660000000000000000000000000000000007c003cfba125692b88feba85e7288bf61bb25e04b1462f7a39b4198737010224ce4b73a320c81b1f70119af34d381d1000000000000000000000000000000000a4870c9de67517f4353de23af21fcfadcfce55365ced33a61a19e5de52f98721b17c6eb382970e7c4acd81b80a7bd2f6d4e2277da617f0ad530b6209df6264e1288122b1b4d92da04fe334be17bd8320000000000000000000000000000000002eef52fc72d5aa0456c13808ba548cb765e11cd0bfd0599544793f57c8a27ee90880e6577af1b76b3fe32c4e71f4104000000000000000000000000000000000ea99a4f6772f8114cfb3ae9dc20f11a34880a86088511e5b7fe521d50470148b43f866eb5bf4f67c523266bb55117050000000000000000000000000000000004bd802b889e6d18df7dbd65f39a908cf5889e14be51b5ebd423ccb63e4e5b35e429eb0d4f384b811b47975143ea2ef60000000000000000000000000000000018dded357c546d709beffff2da0c08e8059c720023234c7b53d0ae85750b3e166cde7faf340697b546b8dd7c13b1ce7bdcba6bed6b8c42240c01df5fa0ea81dd96168c6d98ee9d5d4653edfa5172eb28000000000000000000000000000000001405ef521bcc60c55f8551fb2e2aa7b10117b2f96c03e8535e5bff48ae197b7e5fe69a40eecd25a67f430ca02edcc9d2000000000000000000000000000000000477d85a7dfffcc5a2a1048205362ec42b268e5fbd27ee7c8d4ca77b5c9db84dba482bc4b164f92db2c15cc518b3d32800000000000000000000000000000000060988548ede00aad3682fe827d1e993ed1cf118bec7cbe6f69bc160f030bf87c299d40047a4fb5ee27dc2814649a4580000000000000000000000000000000006b9e0579f82fcb8bc149e40b1199f5897ea48ae5eb58abd2002c923efd0f5275d24a579bd904e49b7447c4a03e3fbe423d168e01657e5c2da89a27e513bcbc6620b8c6082bd39880619bfe2b3a7317d0000000000000000000000000000000003cde2bfc5a865cac624d9018c37c1b5746b5394597d79c171b25f84d5fdbc76bb90ba5cf9db14b3b8e62ff91cfd79520000000000000000000000000000000017596885262075e45db62ca68ee5b99d12223bd476e36ed4ddbf5cd56a0c6e9db5d79e7f95b96b1bc323d7c9fc5447d800000000000000000000000000000000018333858871dd41cddb7ad2f179f1f341b2ef20bfc7a1d3cb235e3a1a181e0da7251911886f0788e0f868e16520c5a200000000000000000000000000000000098ce44092980cb14e89faa7efc2906051c9a51cf7b2757dbffa49fafa3a9ba145f809f1212c27aa620bf062e839f83c2a76fafc5e8e33852bbeb7ab8229305be84f5474427e0c6d2ed35c7bfe99faa1000000000000000000000000000000001180d554fd523a51e0decb92e0134c6064a17dd3aa7b11d590b9b6022f76763b1e20562da21e836e65374efafd78b77e000000000000000000000000000000000488686f793dde899a3f4936f07f9eda7918450966ca85b4715d6fee978d9d091bae1b5d2d04943365c076a849b3359c0000000000000000000000000000000014661fb2d305ec9e63d63e9951d0f081aeba99972b094c922d2797a1100759cfe150812821411205f563e22f01ef29c50000000000000000000000000000000013dd681200608466853cd3bfd20f146a6383151931079654962684d6c6fc3bd6900bb049483c1ca6d2819da456f67e3be3c7e4e95167faed1391e269785918a207490c6d186bf2537c02e52e414d564e0000000000000000000000000000000016c8c7a2a1a76ec05770f2d6c8df35003104c034c76323fedd49663daa759caf2f4fefbe8d44b3abf1dadfec2a06cb45000000000000000000000000000000000837305004aba2e322ae29e8f0109f1c756a44b21c72733019e63ff9886a639464090770d12d35553f0002ad028332370000000000000000000000000000000005c8f82ca2d4f6785e2d76ca3a3d1ac67aedf78e9ac833c52cfda6289e6f5d7a83befbeaf753abce12376889caec312f0000000000000000000000000000000013595cdc9181ca70845c613663367ff774f073774688dc58edfd0c58de5ae12df5acd04a673b645371940d7f7e1601045d335e3d96a9b25be7f3916e92fffd75abeef5b91a1ec577ced52a96f6a9b10c0000000000000000000000000000000010f1b8b39ea8ffcb6a96bacd1c00b413c93d3f8da64dcf9257a7cf0264831be23ca63ab8d3d1cea21ed8d83ecaa3a0c70000000000000000000000000000000017a9030fbee573cb71330007900723f85e9e82530283f713f72e68c1d9a5ff9552d0da469a4f38b66e30df1514f922a40000000000000000000000000000000018b9020986a49213d4f3b4b052cf2fb65f82b9bc2051f20b399f2784b984ccfa2752ca576d352c7d65ab218bb8d5df870000000000000000000000000000000015a375a3711f5e9f85ad7266b2d307cac09ace9ea36e149dde5e0d5acdbac3f62e1cecba8be51d88f2143c3070eddaf0fa563a70780837ffcf9a84456f0b4f6eda0d60cce6a8538ba10960eaf17362fc", + "Expected": "000000000000000000000000000000000b668f602b9f56182b74be413d36b03d2266d7165386a7f1f0d25d336d06d2bc5659e80e54dc71f153883292df1cd8940000000000000000000000000000000013151d305bba39734538fe9a2717392bcd134ef1f8c1879740c8cce981a2d70c94b23f1a71a0596e7ead55a55eb186c80000000000000000000000000000000000e5e7c268f93d8a9d3ce45db2a95be906483aefa3831ed2ab2aa357eca0ca231927c0e5031daa200784cba33b96e51d0000000000000000000000000000000011d57d9a9123123f9fb56e990626346e5c76bbd1a4b3349c3f7bc44f05a899f9c4dddd67ce5a788f85b4fb172385faef", + "Name": "matter_g2_multiexp_49", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006a7946b50749147573991c91f13cdef4e9558be37736e3d990c5750d31ba9711721b88eec529ea4b1dec1c935fafa9a00000000000000000000000000000000078d8a565b7f58b915c220882a73b6aaf100f2d54cce2524cc3a80d9b526c3058903668d17427a617ea045c3322ec502000000000000000000000000000000000733c6562cdcb28d740c64f50ee9d204af4ecc8de2c1719fb73c20f2580fcf01e1e494faf4386764e03920a4162049fb000000000000000000000000000000000421365fa828affe963d145d318065933d4d865f2a3d24469ab0db66dd09a574945f8a8b622d079a7ce1c6fb6c795a8f6e2ee781da12b984e7a08730a60f50c41cdd7c7c8b3f1f30f721923ddc34fb79000000000000000000000000000000000a4fdc68bda287bd819ebb0a296212ddd19cc76b042e134f1637c894ad64bcd8431392c9791f2eaaf94f6c8d189846760000000000000000000000000000000009d974fcb46fe81d81d62b24b805ab5108c9450e162454c3260ecd0d5356b7c263be5f78f6214cc7254e461166910d23000000000000000000000000000000001081fe3579cb4d8a7e7d43ca8cdda28e1f9ea8df83c6069f4162a2a0e68e0d5876b283193649018e754c5c8fef101f53000000000000000000000000000000000ca4faaddc4d14a6648e3515a8b9028190c17f771c7de086fe4624a3008d7e6e374c967f303d9511b9da1a95409e3cb3d51e0b65be993ddd2892ab8f47eab78352b177be4b3fb68f47c65f5c59fa866000000000000000000000000000000000117318e376f2c130e5bca89b3d700fe76e9603adb22a5ef353bb3b5a8f641c85deb4640fbaccf94e025a59fbf2a41370000000000000000000000000000000000433428497ed89a43ba07d816df224809a827194ca899924c3844650a3800952cda8db82f2f8e513994ed9893fac747400000000000000000000000000000000064889f1cb7d6ab216fcceef7c4abf89be14ef93be2d39bbba2b74d06999dec5ae1941b507709d093b28e030700cf866000000000000000000000000000000000957fcb8658497802e78b8250373f77acc4ec47fa2c87e78adbb2daef70240da640a7945895940f76bbb80bd36b4ba24fed4dd284df98923bfc3c41496d6e64a10815a8c474275e0cdbc9ed26e92b0ae0000000000000000000000000000000013f9771c105462fb6b975b0b2fd20d0accdd2d95d879c8019b08db394cd785ed9f151d0eb1adeaa63bbc2686d1172b0f0000000000000000000000000000000002062a5f2db0a01114a1c6e8c739f80f598f4e905952101a244853078298eb443be6839b59d4f0c7745b739cc89ad8220000000000000000000000000000000015b5485439f1b94fbb3a8f5ac6197f0dc0577863f39c44b34d4c5437b6a82a704dec17529654b3037a9ee1ebf14c8d8300000000000000000000000000000000154d750e2a660205812d428cfe79aef4e1059f4e231024a665889d112af37e6e17e04cd7c926b6240bf2f616a1f572dd7c36ec97c1eafc8a20a772fb7887d75568047ea32458b9ce74ad9ca058129949000000000000000000000000000000000231223930956bd2d36a89a0a0a47aa46b4763919455ad3a3581439d25a82c176569698fd5ca2b9429793ebb16c98e50000000000000000000000000000000000b5dd675af51c18d2dc76e3103da4409f6e8c1cc719a622d4a33aaae3f23e529c78b63c55b67fa999bdcc7095a4ece300000000000000000000000000000000010c971be55cd02e4c97031d3b25acfbf722e47e5179beb26eafaa72d4bd5f47cf280a99e0c3c4cdac05bf1572d01fcfc0000000000000000000000000000000002c1370919e6445994df1e25ff4a79c8cd8805f12e5d8c781e58f04dff68a97424b35d162d875ca2b3f805b4cd6d1fa641b2c0354d2f7d92b05043f193b718d78b457ae76e19069c8e1c2b77d7999d6500000000000000000000000000000000169938b4d3c859f97a0627bd1a83fde725eafb7ab77b22cae06d2a776569236d834702081e78d61386999c938c0259b900000000000000000000000000000000091e922f00828488e324f9fea652ce1edff83d9f479e843ed4bffee27805a5025e7a150719b354b5e61f381ebd24d4ea000000000000000000000000000000000334ba8044d7d47795b59eb089502808a7ab8f18e3d5e1cc49acdb5020b3973fd21d6d82557afd748dad88e45a7623730000000000000000000000000000000002299bf949ef249b5057c103ecd149444635b4f636a2fd0d073484404c1ff4ef71820260ea6529bee6f5b07f2ba94de35615370a76bb0a5f64d61b97bdb045b9669f6a0b7644b101d21a50483d8b04dc00000000000000000000000000000000076ab7838db87727fd653a3b561a2a5594518f296284bc24a7d215b1fbc0a6492d425078fd98f92a414dfcb3c92cc1d000000000000000000000000000000000022b71fb467dbd6d9b130763350bd06f52d20ff2cbd46cdea5e8b1525fd73bfd08f5ff171f9fa28050e9a3b296d3e9e00000000000000000000000000000000007e917cef0195fc589317d4a71c14022867dbc0db26c653052e2e382d0dbebe67a0f582bc0a27dd1dfb4703c545d0da30000000000000000000000000000000005b1d8651b86a403ad993c5cea4b6b82a0f8a9f8a59d4b94f10e68e9538a559efdde2007736aa9d04f585851a89af88fbcc38cfd3c6bdd32ed1d583f2bd14e175d61448c627f195559b751aab1ecf7cb000000000000000000000000000000000653c5f5b2d97239821d173036929dc716e78d835a80af55868dcc3e218bcebdc2a052d31f6a573572d13f3bbb14f241000000000000000000000000000000000cdbdc3cf52239a6d4bdadc273b00924de8730c03ea82bd20ec1f04375daa4497fff3a1726269a736706355e72be83870000000000000000000000000000000008e0285b177fcd768d3519062177fa1314c4370f872eaf10f3e0dc94e716dc6a67894d887f40104552336cbb5ed614f20000000000000000000000000000000000638db8269ea4c2fecd5b45955609ef6a1c2c6faf6ee5a8d777e0b38f16d1acab2da7fe7b6f6ebb315ccb345835a21d94c41471a2e4edf0f688c2f032036d41ef5f8a966871dd099dcdbced8b37e1c40000000000000000000000000000000005b4f74cd099eafa6ae59e7105873d4a46e8e5985faf2d26ca564125dca93b1c48187ed7afa02cde8b52df878e1aa618000000000000000000000000000000000cda7f9eeadda16ef757ee8a98be147d374d3a1d40790d20a1ae42c9ed38e4fe22be76ec4f807cf93fff5c6efdb50d1c00000000000000000000000000000000121219b0b0d236a89a857c02249cc04c22299d041d95296dd235b3639416337f5be4a2ebe92a50d192fb748d5d4dca0300000000000000000000000000000000112545a4677ca7d60645cb8bd98689c4aa85a68bb62dc68c0affca5a17ecf0a08fb9b91589d08712b5af4aadf31caad2dd297b192f1c907914ef949fd27a5ea5659aab659b83239c4433f7a4e24529f2000000000000000000000000000000001342460712b73ca0ef07d953c32d280a3441e108abdc2d133265160608986481df3563c5dca20f209ce078b13b49707e0000000000000000000000000000000003580a5b4a7f6d6e066ad9073f7105f6cc1ff35ef5e79a0aba7f48ff2b732c7aec72cc9c5f9233fc9c267d8aa37ac17c000000000000000000000000000000000bb7f32db8a4e341cd9f8dd3b5677dc650cef675f0923bf2e5c8b84c33d447daacbf68631c2388eac5698495e1ad5a3a0000000000000000000000000000000015bf9cd1aa585eda2910128f2b452569abc1c94bc8bd308ee92b6c7315a56fc92d6cba03334bc36c137c14eb1f198b07d30fdb174a3f5c06b78cbaee5b6e7a4c90551083d78c5164de6bb45ee5de23c100000000000000000000000000000000091bca266255d692cdfd10929802d79b474706d160033495decd11cb0758136ec3ae7fd4bb99081e44dd7f25224e009c0000000000000000000000000000000001fbba1ba796416ac22c92f3741e3b268d89fbf0307edf0f25c7c12b5cd230c41582ba69465686ffead9f8363dc0c297000000000000000000000000000000001139590315fc4d81e3e747a53e63ad856635050367ffc143c1422e324d5fe9e4fb90631ff8bba764a87b8077b571aa0a000000000000000000000000000000000dcbba28afd445a57db762d08338a26980b4efbd11668e4050d18234ce35a909d6b563a5d3e8e72892514431fabf0147aafc42f7fe6854866cb954367fa65c8072bd1b60173a2d45077421d6e25f2bb3000000000000000000000000000000001322b1f1388a9dd2853829bda1a5120250ed08f07c84fa398e59fa2577454f38f0a76a1e8db897bf15b4b50ff52a847c0000000000000000000000000000000017020d7de1dd424de53992c168d924c42f26231d184ea3cd9cfe64ad9c82ad067540b2d9ab18b0fd28477ac792a80c4a0000000000000000000000000000000000fabc0769b95e6feedc2165bd6d324b7d16247b79eebc1f09d849792255136538e628bd6ad9b86af7bcdfdd991fc31000000000000000000000000000000000144f39f792bf5585f4b49dcd3fcdbb61cc7ef471e08af4c15cfebb855f0ac8d5fd057c9486e53e8e1ee4f66bd5e943ad106da5f98d5e7cd9f4a1c8d6e50ea2236c2abdf1e08a0eca54555a59bcadbc6a000000000000000000000000000000000c27ac29db98fe3038fe5f537d5ca6faa240602abe11c6f530d9b18d763d6dda3fb25f9538d316e6527c114405ae54f00000000000000000000000000000000017ecc872183413d8065a99a2d1a73b70150e2c1fca2c13a731a39b52aebc6db79772e91f115a63f7b23e5fa231df697a0000000000000000000000000000000016b9715ce820b619274202b52d7e7bee9a17aaeb06c2ecab8bc77c670bd4c714789e4478178d94d2aad57e7bb0b7a4040000000000000000000000000000000002d0723a3386248d8597d2b63289300de6a16011a38985170a1652ff81ea70a78459b3ef252cc5ed26ff1ef1ecaf6a42c971deeba2f757970bcd4f5548a2767bd6c43e63f4c5fc4b157ef060a1f45aae000000000000000000000000000000000eb1ddb7306d8d2858fb57dac71f67473b813f37f02d73b17f375be86028176cc1dd84347f183cb7d427b861be34c3d70000000000000000000000000000000009a8811ec77eb21f2b33a591f2fe6d7b74b40c5045ceeee275912aeec664838f332bb49bedcd958ede0af0d0232e76ed00000000000000000000000000000000156e28ee3c40c6f18c6059e06ac8f7b39fa23e5962f640ef3afce13c169346a4c8e5c2bcdac8fa15921a4740cc5a0f2300000000000000000000000000000000084371522a6ebb1925c8fad3f20277c34e657aa71abf8ed7d323a10c14cbbb1a9e0e54bace32eb845e6709c1c58afc34a5262a021977dd79ab96606eb24a7c5ed650300dd68bc79f4b8378f58c6eed49000000000000000000000000000000000be2ef9ef38a5dcb42ad31b1415c8eceae625850db4306a26a0598d4a567936d75b701c81793fa7b42d158df2dcb0d5d000000000000000000000000000000000851b82b59fc15b89e33fb618c56d11a07116ea35850583a07066ed97b8a864f3766c0cf921d007a6cb43931ad4fcf8e000000000000000000000000000000000ea8bdfa3c5f000d7cb1b5cd69537e4104daa15ffcec06f40a91b972d8011e5fccfa911c55a07383cce6760c145c39e4000000000000000000000000000000000652a4165602978004ef702103ef18e8fe7decab1522a76486c742d29103e3bdf6dda2d3cd64ff1b5d5a76f4823bd363083b3720c20044fa41712039b6e9e776197391ef393c0935a0e9990fbc1b7a4600000000000000000000000000000000015ce5b43e1fd950b77e2baccae8c99b82f38bce09989fdc5d402420e7931a38b7fdac5a254b0cb9bd8fbb488d02493b00000000000000000000000000000000018c5b3ff46a04ed114bbf56399738e5d594ef8dd1d5e2e8dc23a0097893be3da4fa4662686a6dac04418fd2d344e36c000000000000000000000000000000000efa3e970a5cd0c7bdef6a2df3be9be18cce63c10c331a18d628bbeef30488ef73d866f3c8804acb3bd375542e99eae6000000000000000000000000000000000e966d9e2f2d47df5d661a89fafb6d4518fa1544ab7a56716df511cbcca99098f944a981c9da569cf95debb455842006d6f846581848f5dbb9e8d220b881d0327c4f3f5d4b79fb2c4dcbdb9bcf44b02d", + "Expected": "000000000000000000000000000000000ef06b515addb951b24e5d61f6e6eededf5f93f9f17455e1b563f187f73394457b3b7c1b90ed454218f8782d2bc848be00000000000000000000000000000000167398608a87490fd17506166bf54636aa4dd6d3e8c4d42995bcb0262268eaf2a6d828b295434f45e3e53703aa67cdcf000000000000000000000000000000001602ec6519e4987a052f97eb222f505e241d99602c08ea9c41bc95796675ebf6a819aa0bf87319f29dfe47f45f3c8c7a0000000000000000000000000000000002ad4291ece7ea0fcc9f4440e88eef693b8dd53060ec847bd27d74cf71218eb6210a71895ff1f1f4537a901090f14de5", + "Name": "matter_g2_multiexp_50", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000129cc9cf82aa30671e969148f058a0b8d275bcbb1c8da66e52998d9555dfaa075e2fcf39fc18f305940fbc972cc5c0c0000000000000000000000000000000001252482c1419ad72229a00d90f1c09d464e896f47db91e9680efe36822e99e1ca7a2b5ba8b17b5929fdbeff8993bb18e000000000000000000000000000000001287d5054bf5db038ec2f7b7a3b79848fcc8ca42f9e19d5e21d36d2256f97e0edc2608d19c17d3714024e1e9e86ae264000000000000000000000000000000000f6262669e30a5db67550cdce8a4611b9501d02cd4e950aeedd1c87c4f0f63c74f35c802dafcf91c988a154dd690103c67c44f7c8513472b51f96d526422bac628aad4c40c521cd7cf9e86eaf92838fd0000000000000000000000000000000019cccd010df3e668b1c3ec053e76c46e45d01a4fe02eb074e296df2a48e0e4eb647b06c40cf64a0048a8fcc2b0cfa6100000000000000000000000000000000018e07bc50657f3bbf736c38518933e91af29e3bafd776243296cca3a1d975116e8b428b050045a61069adb23baa22d3800000000000000000000000000000000154f51badda1b828346986264b01fb1be4c7e9b570ab63a5eb15cabe9412a2f9bbc6d5111c638ff5118a4f6d08ed055200000000000000000000000000000000064d4e607a8994c0bb65770a14a14ed1b68c766ac2aed45a44c0f7c7cd4c3ecdfa077206812cf9b24e35021060a3668d2d6f95d4b6216e4226f78e4fa5011c9becf98fe45a17dfd740fdd0ef36d8ba94000000000000000000000000000000000b9bae5f720d9bd3271a71d751e4c35c39ad30fa8a67846107ff769c455e42465b2a39dfa32861634d5e323878f56f4f000000000000000000000000000000000a1077046cf5c7a66452cec2193ee21c1ace50dfd79f707c9297737f13806dc05e9e1cc5d1fb4c87b250ebea5a4ca6c40000000000000000000000000000000013e1fbe1a9b5f2ccff51120590ac0cb00cab502726b43a6fc12459e27bad4aa41537d6f3cc94a81a170998768f6a0fc6000000000000000000000000000000000a02c551ecec1c7a415256caaec1b5485a42f9ca8d897cf26546ace1f2bc8c2d10a353b8b84495b8dab5e3c60881185a58c25d36216b811ee42d0ba629ab7a0f9ce7edd7234620c28e37bb3df3f042e700000000000000000000000000000000021b9ab3ad614816d7006efe688e1ae8cd99b0c4437d4363e557642a7cfda2000db6503b32db36b6d1ffe40d967c5efd000000000000000000000000000000000b7fb0ddd9eb2be9cdffaf8f8c593a9296c4c7deeb1c714c11863d71dab1e6fd309b75c41e25de3cb6089726b43427f0000000000000000000000000000000001277065ea9d208777d0fb7a6726e11c8330f0b3ed3c6716acd559aab19b2fdafceca8126c9facc43b9d80534c07035a20000000000000000000000000000000015e8c12065d601dd5ede75bcfceb7300bf6f9fbcdf68d2f093b7654d80d3e565135d64137dc401d691a45fe052f58a6850a5c6bb6b87fbe5ebfb0d182d425ee173973c6f2085c556b0fe60219b9f3c32000000000000000000000000000000000484c4f9652427d0649c33e93d666dcb15bc56669c00980c53357ecee874bcdbaa016236df65a4339dfbd44e4eb0823c0000000000000000000000000000000013836a7275c29c989891c94e756cee9d6c54a8f634fa570655ee44b7c1e34137edc33323dc0d1f3a0218039fd6f7013d0000000000000000000000000000000002e88c7d5fd87e97a0de1be95021821942a8004115fb4fdd9ad26b7e0fd171f9c7e6f962eb179bdb95ef960cf9396372000000000000000000000000000000001636e351a0ed1a260ffe0d1355e6da288792fc97a7310b040cb9fcd5c550d85d90572154d58a9847dd5a8a06456bb2e43b4bdeaf6643ed159f4a3e23c33ac486b33e1edbc5a097a47a6c2c753e5299d20000000000000000000000000000000007579785c14fa012cb5d6c116d34dcc15dfc908a29e90de3bbfb8c9b44e0b4258644440d7c78d751a007c10f98053bd10000000000000000000000000000000009f023538822ceba0883a0e3454121dafe8e5e61d4754b54e6417c989efa998334641d458591b3076b615937de065cfd00000000000000000000000000000000130fe7f2d5e0ffefa67ad3378690c53a6e68de5504f3691de0df3a24c309619bd3a345bc2bec4dcfb4b77255cbfe09980000000000000000000000000000000015bf85ed997eef4d97a81f1d75825bb4409cf86b8c8e5f4368cf1e4c803f9e1e23a2a96f7b0a08e5cff55a78761ebce21d18596bc392dd0b71e1216bbb20a0e5e2559a46789c36a146cb78c5aa8e3921000000000000000000000000000000000a95597e4402bbd17c20dda088f0134d42f14443bd519b3511b28fd8d395a0e50758386498388ea6ad0e7634587336c1000000000000000000000000000000000079f348d3de505875c5192f795cd77e2f7385ed447b06f2dbee18e85c832386b201cb3eeb21aac3f258d2c4b0434d48000000000000000000000000000000001895b1891a08ea42eb1f68698abc20394ffd66bf0c32979668950bfec5cfc8425314eec2ac17ba25f29133a8becc9f5e00000000000000000000000000000000146160336d881b24c6258a3a86c08d346900680324632b6d5d4582ee0865a7e5f2d01677e5e49c5a4179f8382e49d1566fb3669c0789ba6a5b00f14c14fe2edd15d37a742c9e36cae9ac010e632d75a40000000000000000000000000000000013cadc6c394efb2f93e00f3976dde34efe75adff34bfb6f5e1a150b79bb5baf6bf29fa149581fda48faa68653cb61e300000000000000000000000000000000005fd25362d87f9581a202b186d2786d2859faa9966a1ceae747dd7a48749abd424eb9813e44caada0e456ee8bd12e99c0000000000000000000000000000000018e6b279e2b545acf1da29dc0504caa5982522546f83d4d3389e1fd6cb5328d4a167926a00ccaca402b3a3cdc67d757400000000000000000000000000000000089a9992a36b476fee21abd50977dfee01d7c91b24b3e26d7c15b2301352069dad920f0ea93a3e477a48029eef35605f06c2988dd6b8e9aa116eea4e1f63dacf100019844d37d163c047567e8e1188620000000000000000000000000000000005200b78dba7e423bc23e87c5937b464e97405f6461d05bd9d1d0fbf8f3c8e64a39081f9e43b4ec416198dc44db897e7000000000000000000000000000000000bdba1ed07c4a570359863a1098a73830818b3fa5b222316a3e0692a4ec65e59ca6b4bf5f72f8c1384e73e807d272d6e00000000000000000000000000000000073fa3eef473707b6aff37fb6f829f0fdb7ae808e85ebba4d4924a185c3656eb2856896307b671080347cebc32e958bf00000000000000000000000000000000076b56330f07cfc0ab34e98e2fa0ce4702b296a00f6ffee07c3ab523fadc048a047ccea7a9003c090951e4ef698d14e5fbf8322f706b1972f73fe4e22a3dad29c4ede09163561b2810cfc3eb2ffbc7ab0000000000000000000000000000000007252747c8275f87b21bbac4071c1826d166d14e6205095e5299315d6b6a85aed995f9ba59a2163ce2c51a8e60eaaeeb000000000000000000000000000000000460a000fe29cca24dec469ba5fb729edf3e443bb032d488cc99102a614a5251915267db003dbf395132d815ba78f262000000000000000000000000000000000161c01cb4d0942faf2303c108604babbd4cabf5d3d30c13d7db9428a445c7f72d96a7405e22e4e451058a94e20068720000000000000000000000000000000010ccf8a8ec4e6515b20e07057fb8cbecc5defb87480f3e32a1bcd0cfe239e00daf6a390c4815ef6b85be1f07a4c4bfbc4a46618381ba6b991b2edfdeafa67aef1cfea066fbffdba24db25385963326bf000000000000000000000000000000000e6cf781162502d2a758d0f96946bab887591b7c9ec9f67a1b0b962e74ee514e84c14bf67ae3c0a9ea2a3e472b7ef59c0000000000000000000000000000000001542b4e97f1e8a64ffd51ca43137b0660f897f6b3d5c6fee598fc4dd03932c3658ea55e1e9e73376e51df278ddd3a3f0000000000000000000000000000000016dae882ba240343e752eac68122424320d1acb1fbc4bd26c3983dd91325f25e1b1f06213e0e06c142997a13fbeca597000000000000000000000000000000001138b71c95d4de320f02e68dae9bb0de3e5b317cb596532c5cc18ca588cc8566c21551d7d55d685591126b9d9e466455cd05fce871e4ff11e7a4e834061c65a0aab7bfa8a0128d460a493337c6e63ebf000000000000000000000000000000000904f6a09f3a5f5baac902c702b059835737c06f62c2ffe9101bac32f854e4d72f74031f5410a5941612b1aaacbb50920000000000000000000000000000000012f39e7022150b2be12cdd621ae23525581405021b21cb9e55972724a22b1aeb2e15b135ceade132d3310e050e607f65000000000000000000000000000000000a92b1daaf23524904d74c3f149fcd2c98e3a4c257113533e7cc59c4656b785aacbf0ba6b9df0dc17cf7c25f1ca698c5000000000000000000000000000000000a20a5d7c0aeb16ff498f46bf05e512784d120b9c3c8b2877411852d7da3abde9e83a6d00213bf69ed88bcbb051a486daba9e37ae0dbb733af820743d8e307fc02a3ce9b40032b16d0e9466903de9caa00000000000000000000000000000000153918807d7da07ec7014154f00a558ebe0d5fb48fba4c16488d61a826a1eec28e3828d6744300c04207e8ff1cb61211000000000000000000000000000000000a755480457896c5a3fde35658e73fae821151c43fb92e9ffedcb05fabad37cb68aa24e029fc33a2518398d723c4859100000000000000000000000000000000148798bdc5b14b90aefc38946db93be1754f15d78762f38971b1e64a53fda92b96b0a70ca2548baec882887ae7f636910000000000000000000000000000000012299fc413dbaa77cf8867e331bc0602c4fb32fe44a150217de9e6391374a9ed83781034e5775c4933e13cdfffd25a9e6ef151662cba4952416eaadebfe5e0fa0ca1d31380e1540c2d5e0181af9e317c000000000000000000000000000000000fdfcbcce1603198fa344487d2d4838b3ff23fc0a73a76222707d9f8623f0b87dfc816be8717b0b12667bee460ef40f70000000000000000000000000000000015036dff68139419db619912e2d19b7d2a2d637fbb8bffcd941aefe2eb4d24c1f7dc32f4f53d4cfce67785e7c328d6c4000000000000000000000000000000000fd575be9bf54128a9a1cbd366339c993ced315a840d60f8b77e035352bf705c01a9def713e8cae3001dc1062cc0723b0000000000000000000000000000000004015ed456125cf0f46fe0093b81ff9315d955d470ad756a9303f548819f339e137305c58e6f4d8db3c8bbfab90718d4f0a3851bd52ca52919dfd21efa6efc56f6dd5060ad969360b1a731e8f38f0f5d0000000000000000000000000000000016d31e68cfdc5823970c8c2ebc53c3d4517792c44e90c10f920a819e72e4a6966c59a691b905c8b0b612065c56d86ca40000000000000000000000000000000005096d516e416fdc0df552c2688c74f1c067a3e5e7fd782479bfa468096e6ee3e601bc23d2e38ae7500325765483250600000000000000000000000000000000092c994e9dae287bb6450607a4263bcf6267f0f66ba3e63436292af7f6bc8e4ba794a12792b6af49ef59b5fe50ff6d3400000000000000000000000000000000175a645988f33612e969e1d91b2c30e47ec655ad655d89cd8dac151c3bd194cd5a8c28b498b1cc2f2966b7fc37cfc8c532b41960417047a2258b6e9e228f3cc1130b296cafbb75f58731a81fcfe8c83a0000000000000000000000000000000008d09ee15c80facf7e32b15418fefbf7e80400acf37f2a1bc6ced88b1591bcb8f86b45b544646c5fafa71b5b103b927400000000000000000000000000000000060865ba68ed8fb3d0a05779c278352b22d4244edb7add23d985a2836d2772dbffc3c82c3134916e9b0900c9db6ead8f000000000000000000000000000000000dce53bf8aca1ed44bee47096dd988689c1e32e1e65a5f8dbabab7c4edba866132ee2c036aba5648d0dafa9a26405fe30000000000000000000000000000000003319995785be720860bbf48692d1507185d898187993865648ded74d3aaca45df939c6dd986db42a51bd13579a55b8f71a6f7f091a6a21dbfffcec2eecaa22d05252b60bf91b56811a833dde3fcfde6", + "Expected": "0000000000000000000000000000000010643af30c3cdefc30144c5d7cab17c9c54adccb3294ae79fe5c69376011c159be1e43940640bf5d9012ccdbc997e2090000000000000000000000000000000002a22b08904ea9ca99103a01caad745dc2afb7b6d23e666770e81a97031de921f9d4d1c04fa941c433b8cd9cafced3a10000000000000000000000000000000010808e5518eb6cd61eec8820b9f279dba2423b1a3677e21fe3a0ca2ad49fbab2995de1c5adc9ac867de79e3b40ffddf30000000000000000000000000000000003ce1270644d71e0055345c7463d72dc119495bfa04a818dd398d944ca46deb0aee8c7936557754fa18225522fb79564", + "Name": "matter_g2_multiexp_51", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000059234bb6d1b66985b79e6a2c6cd158d37fc50ccd6e50ad2fe3b6a02ae2ad35b8b2be92139265957ea698441e780532100000000000000000000000000000000066adc7083a7f3dd75a8e431a36632dfcecc2527f261e961335bbe8fc8329d992880736bb41fffe41484f68c38fda61a0000000000000000000000000000000006aa0794c27d3f60debbee292c28b430c159cb2874b9467312cb857a8777058580f8a2d3b9bf4b8b732edb185cca6ac10000000000000000000000000000000000d81f222ed6acdf29437adf26d2b785535cd6d61b329df98be04114c3ae68bc6854e275792fd48de3eedf6ba7f3849a2e56b63fc6ba87cf021c2f92baec248756ddae0a4f070df840db281283a4c9b20000000000000000000000000000000013dab8066757b8bcce2c9965e600c31b792463623cd5561f7f6d55c5a52c22efcbe48b8684fc2dca87e2945765bf565600000000000000000000000000000000198a0594b5e606b18201fe2706bddffe7bee6c583147513333230715d18295714055b984cd3ff8d1127f9420863e3a67000000000000000000000000000000000ef77ae1e991daea1fe8338cf236ba959b22df4b24f00c6c01483b6956c609b805ab89712f80892bc0160fa3775907890000000000000000000000000000000004d30f5a866a100dfe469d4d0c47872245c4cdcfb18d3ffa0de422691044b52d2b9335682dcbf67aafa9275712ae3f5512a50af55f47fdaf176d4885e4910c54428c8ef433ea0cb1d009ea77783559470000000000000000000000000000000008010bd5fb5e222618bf4f919c203dadf9a7b7597bf90e16772020614481a0963a8e8b1bd244661bd33e0d147be7663c0000000000000000000000000000000007e21f548efb869a28d6fe39b999ab7fedae9cd6cfa531fe608476ef30c8703951839476811838608dac1aaf9cd87eed0000000000000000000000000000000006cc674c464f80cacb2156fc1eb680938cb38cc166a99f72daa50f9d2c40f10ff07e447d7bd5e59b6b22f0dc407dd8df0000000000000000000000000000000010b160c58ea82bc3904302b1b4fe83d1883efe3c8f52c4e05a3d8681e604eabb1b7f533e61c51e9a172987383506e7b189a012158b3c18e19471fca6d5aba5fd004a337d49ddef5db177da187c8cf1c8000000000000000000000000000000000d4f8372d1138489913654a7567735be1eacf8c7fd497c2216bf77a94f483bd4a7daa2c8232581d6815af9898a7569b80000000000000000000000000000000013676a1f72cc2ed80fa24f70fe1c52aad9ac13ad6cad1f519649fda6ea3787d86ea164d9ac86de96436e9db4fb4aa44f0000000000000000000000000000000003f7644f7ddc9276ac36aea5c36451f3d5d6e4c508932b16d5677977108f04deace5e8cf0b3b3dee88c328b6030f3567000000000000000000000000000000001953cf03effb7de9e62937572850e9fdeecb74fb4aa655de1abdc6e065920e6d2e51ff28880f33341443b5e6652eff4827dd109f6df1d9851dae28bcb9e552c6b1e1b2dfb331aa955d3d0b6c4862253d000000000000000000000000000000000c76a5bcbd2a61172fdd53b351d143bd30d460e398c9d4b7094a604ab2c0d46d6112bd8a5483c9935f0bf6d84df04b9500000000000000000000000000000000116b15825b780c49fb24617dca620e939e2528e10c49f34971736c82cd35fd3965088595deb86eaca3d3239c6c78a84f000000000000000000000000000000000a0cdaa541dd96fefd46b303b88f1dd4d24257b910a596817f1d946873cfd60ae58a88aa687ba573832331e8fc158db50000000000000000000000000000000016259f7285de159a2c6d6d8687ed348ab97e8cf329ea5de49b6d708b6da5b806bd012ca3641c50f479d85921e20fbaefca96785c1ab66cc5c8e434f59cc1ddf76bd78b6fe660f7cf74cfb79d7f2c7f84000000000000000000000000000000000797e815a98d362e1d7e2ac1fdcb477ccdec8ecdf340d7bded36856ce30e92b661669b38ecbcfb0896b2fd75df9b734a0000000000000000000000000000000017916c559db6b4b28b798c2027e2c70ba1b940212df8a1649b9f6087120660d698bea81258e2007edd4aa7d0d535bccb00000000000000000000000000000000167170a76db0783a8c3228f8246502b15d342b019fb44a46b514f4ba2de3ac66e435941adc3d91874371561870ba87150000000000000000000000000000000010097a585eb9264ea96904d8534820be185d8d9e4b1616439a926c0ff8ceb6f2bc082e5712454690c9c05b8018a996235aabd1fba36142bd768339e091b15b7f5b4ea609b57947a7187c498bd9833c2900000000000000000000000000000000025eff57e1f37903056835d1b4133ce064c86947f35859817b2cccf1a5c3923ccca766b3e0affd20a4a6df62a45c31000000000000000000000000000000000011158fce4ade070629162b2b6cf1924696f1f7776f3d623cfa3d54c66fc17fa0299c6650b709a1472262fc0abe8d9557000000000000000000000000000000001828a65fb90dcebe25413566deacf0677a3993b39d68854b264fe7807097fbd3106ac618545d3a6a42e197c65f0d2a7100000000000000000000000000000000045eb8164b6ec874467286dc3626fad3c01be61f6a8a88e5f88797978463db648a9b8a1e1a2589364ef2879cb5f75423fbe608fefa5472c7d1611abfa402d2eddb1e54542f45d4012db8ac6d1e5016100000000000000000000000000000000011847bdf2f67b40aac3426716391da488a8f0462b68bd35a8c1c762591e2f426f48f979a646a094bce16bc99cef7fcfc00000000000000000000000000000000092d61e408120b1549fc8d2174572eb7ed3f679327cb89754f326fa72fbff79e98cf5ad9c94c14dd86135e9aacc98b98000000000000000000000000000000001440e2f4ee2ba254a780a31b02babca093a38e5a1ac09ff388080b6c60918ae5b26e1c0888ea0976527ba103b257d02d0000000000000000000000000000000019797e49808b756128866fae0d6aa7e755a1d6f07f7e6a877bee150fe9adf0cfe612350c5a0e31d68cbeed226fa56f2a28d57066cce439d8d0385f647ed5e9b29e8fd0528c1ed8455f37dcd81f4b62240000000000000000000000000000000016d723a64ee06a7a631509c6e64b1c8bbe199952da532dd92194147bce9942cb4a76f2358e6c7d263916fa36e2c0c09d0000000000000000000000000000000003d04ce655cad1d63748f6eaa9912d6474a34820986835f60c812aee9980d3ebc18d6fd856a6de9546be024b2e95126a000000000000000000000000000000000ea840bd7f76f8e944f95146cdc9692d97e6a2d7d16d4a7f054f81888472da4d60ae5faccb72d3a05781b399536ccb1e00000000000000000000000000000000155a1c43c39e9dfc6d96e01c981662900fadf1a46aa1c2fdb70bb34e94dcbe86c4f255e259c771ea8ede50b388ceb2f61208d8d328014a6b2c8b2b9edc70589cdd63d38f4e70abb41cff1b7693bf9a290000000000000000000000000000000008f189d97f7d82aad87fb71d090a5c99d94079c0b74beb3dc860d440c0f46727fc49104d671bdcbe5b9551552e18afc60000000000000000000000000000000010c4edfb64b8932a617c316820cd27d3f6ffa89b471949362762af8e10d25265b84ca2aafd3b14f33c39a4b533da60d60000000000000000000000000000000017ef3bb919b087fb6745bbf115e2929394fbc9c89f65e7d591f15da93ab785aa6828ebb6ced99d3506810647d28ed814000000000000000000000000000000001591d8213ab349017cc93f1fbe6aca6765dd33ac1f468621e2c79e30aa73bd7606a0e5ba1d97ff03e0029dbc8ab1c5f4d3a2044ed4f938c17684413625bdd281f685abea2e375bece77c03d697c82cc20000000000000000000000000000000019b3a2df3a9571b066eb451e34d8a38c0d90b6e365862bcd92ae76195956c21c59441f0cd03cc69abdf4ba069759b87f00000000000000000000000000000000082537ef7f4bba5f32db4443abc8eabceef643b0878ef83860d75ba508369a3b459cad96f1cfd872df99548f656b0f9b000000000000000000000000000000000b2fda5ba0c405c9481edd598181ed8a59a8a18462508af8c5d66988a7a58a5c9635d93b5e0ee310bd35e0091fcd4986000000000000000000000000000000000af7e15e0052576f82e36e7e2b614dd835a290e05f2ed9dad7f508b4c04e8d437e7e937a7f4c88b5e66b06e0beffc4df7fd81e27a577b5e79929614c069d6d52146a6183822d25cf1ef84d8afcc1f6b40000000000000000000000000000000017a1d5add5601010d138263b4793149a02e8f4f7cfaafb69fde7b843a51cf5f0634e26b6e5e3315420d44b0fd205230d0000000000000000000000000000000013ea863ebe1b1cfcf4164d78dbe8fc809d2b82ef3e5a2589ca1357e48dddf2696e910a90301ed910fae77a1e462a5b1000000000000000000000000000000000012b40d9f25dc5a61454ddf1fa9c38e87eee60e55938b411bff9cf2161ebd7d3fc930131a198e7e97dc90cc245164e7000000000000000000000000000000000054f19ed8e2682caeda10c252f11706e7f3b65c81e7ae0a617469babc5f3268fe5c0ce2e85d44fb6731e8ac132b97c3ac5d47ce35d4ede84a83c9860322f582ec00c872b4b035d5d340981fc29884f13000000000000000000000000000000000ef0378945ae4683666099be36de3e60b5bae9c3137b702e5e4e35afd5c1e81d033c3d6b1debf5bf36bdfc4e3af37759000000000000000000000000000000000c37074af84ff596ff2c7ff963d96968464d6c8d88b69af64ae883457d02ee9ec80720661f39019230a6531a0f2952bb000000000000000000000000000000000454e8aaa2830f07d86eac7aca1d7589fb06aed646146a1b90f4959b5caed73131ab231313b50c15213f89566ed87a3600000000000000000000000000000000143516cd7a1b8da41226cb828887a0b3314cf4f87c207d1d84e9c49f0f7e548ab99e635bd126d49fd2e4dcea98f3adf784ae256d47de2d49b1e755cb0e972f3b614f3e7ba779c65ce175ca3811021a7f0000000000000000000000000000000019384e15a8754c6d85bd298ed550a26b51b714745bf2980b4920d6e73f59e657d85d3e86baa9bcf7e971233daff99d02000000000000000000000000000000000229d233d605a1a9f060605ae366a263594d8fa2b7797358ffe4c62431b9718d155d24d80bf5af1c806f447b92fcfbab000000000000000000000000000000000bbfb66cc0c7bcf251141c540f712fe9a359d1ed36d228379a1f3791991cccb7dfe1a10d40667ca062cccd55c9e6b08d00000000000000000000000000000000150a4d7a003cb81423604c13d0c5175183ab5f459b96842939f5c4cfbb9196db4667bb4382d2d5c92b70800adf384569a09d0136d4dbb3abfabcac55db48b1ce302067f413283fc1a21744f1c16ef7b50000000000000000000000000000000016352fb8e2751f126fd0f889f2a62a85b95c50d6bda7704112e4487dc94417218b0daa1dd6b998662af2582c44b011c90000000000000000000000000000000016bf4c60eeaca103c90643fe0969c2c261e9697ddbc02279f0d5afb5c905a984ab2396db93555cc2dd5682a1525446d00000000000000000000000000000000014be742feb1215cbdcde21e974c74e23c7bbc2cbfaaace28cf1d4f2b5a77dde2f3910aea74bc200277e6fe0475208057000000000000000000000000000000000bf98dd3e3a8b13e487d8b1a35615b0c6b0f514f9b8da7d6402586f113974c8dc9561db797a96f4f8040c1765518d175650a6fba1a5eace6b455ee780ff266c324f49801832640856a80098f0eed0b7b000000000000000000000000000000000362935e552dd01b5fc5a15a76faae937d7ad086b0a67e9cd3558287274106623deb85b6410bb4e64c424d44335f3b1e00000000000000000000000000000000096f23a54cf57aa3306df0a0a4f45aecb9b09bfe83878d551a59c53e18efc5a9f177cb7fdaec1648f66cdfaebb15c61d00000000000000000000000000000000135271fbe0cc0987e82f3430eefa8e3cdcc1be4a441393bb3fac0b8e8f78dc47ba2b833d9dca4277bd60befdf33275cf000000000000000000000000000000000dc1b7512fa5f9d4ea3f4229d947f43d7dc46b7770aadbd7351b6d48d525d0144183f2c84293c63c68d5262851401ae0282cb1f8f6d6dd81e7c49176503a76837a96d7f2b084d29d11dd9c6548cf0a57", + "Expected": "0000000000000000000000000000000001c11610b63eeaf9e00552a230bfee290ea49bf9c93cfea1b6f684c9b5a07f341b718a0070534e0da9e6ab1239d800830000000000000000000000000000000017e8107113714ebb1743c34d83be3acde096bfb6cf140e943ecd0831ecfcd097f58d25a45005db61551a01d9da46de10000000000000000000000000000000000c2eff6c7c25885c514aadecb8f0465a0fb4385eadffa082e8d4f497b10df2395be5e7760a87bc26772dd78701146b730000000000000000000000000000000011ad4e20f5c1518c72f75d67a897f30100dbb83365ef7729c3501c6f266d6002edcab8c8bc1f449c30ec3624cda13809", + "Name": "matter_g2_multiexp_52", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010a26eda028649789d9e01232884e4e5a6b8e0b17169b9d64393e2568b09ac4d3e61a5996108655c24e76abe9e3fb7380000000000000000000000000000000015e4e36bcad524f8aac7f909fbb884e879caa735f80fe9890d7874be919ee727beb2a074984c047dac1d02b8712afa3a0000000000000000000000000000000012458946f1e853a7a45861a92d4ce707e5aebbf69edfe69190c0bb130141a10869e2a73e06785b568248d5b1f647e63e0000000000000000000000000000000004d8061f25edb5a510a2db9e1df850518156138c78ace50f4c9ce47734a0b14352f5283083a232602a070c3ce94c7bd93d7f8fbaa4225f3008649eebf42315785ccda2b9ce922170e606876881825cb90000000000000000000000000000000000baa40ea518227b007b9714ae6eb5a4e92883dc75e6328caa780bb2ffee7573dcd7e9ac47821ac449187569986bd2980000000000000000000000000000000009d43d61f070ae308c5c285915600dd9c17b7de63cfeee6fe33c9ba857b3c72e057bcb4d4ac2b492797e7d785997c18800000000000000000000000000000000185215a7fefb96b3ff9229cc3239c3ce5202a97e275ea9b1541d7bc0a2931d7e3b01942febb45c6e96e66e3605744afa00000000000000000000000000000000103ae58b8066dd62c46c14c593c768fda91b90e4840b5560c974ce69b86bd6d2c13f689b72cf9619e57c9dc8e3d3fb15e71e6cb3d4e19f4a70a4465df6eec6326f558ee1cb99aa540ad2a73c363a133900000000000000000000000000000000075585f862c0e0e031efe12f31e159f2a8b89825ce80fdf65906474f0155f397fdc666292f6a7384cab790f071335c49000000000000000000000000000000000eba3d37a5cae738ab99ed9475c2c7fbb88ff54edb8490017162dbb16c8225102158a266fd4ba7570ee6d5ff6cf3f5d400000000000000000000000000000000135a0b0a38c036919f8389eb7bdc505a375fd75d513eecf0cac134645d60fb6030a437ac6a0fbbd167b7a77a927b3b0e000000000000000000000000000000001688fabd4ad751598ca036ec5ef6d7b314980dce7d8652163e89fad01b233af64defbcf352743ec478af42587f58177dbdb2b3c3b8e91540dc2724537526fd8c0d4b85d2cc20323d71fa5a4f61b3f12a00000000000000000000000000000000062a74a9ba0e2e8d95fca478be8d18fc716243b1faf7365a55387fd7188021f53bbe780e973e7d16c9db236faff176cc000000000000000000000000000000000f949be3fcf9b38995624570fcc9e7df9964d038eca189336ec39d9e0bd05148ff7df0b48436a2cf6e249e52248ee8a40000000000000000000000000000000007472e7c366419a0cab844522c46356acdf6a12cffae941fae3d3b78e7a83f0446c945bdf7b247abccaeeaafec49026c0000000000000000000000000000000006a564e6860b97feff368fc9a349282112e591a7a6987fd10a2d4de8ae4384ce229b9db9a93445f727eeec55a6fe5a9def0c8574167a3bd3b794f057ed01865ea69c38023dbddb0afdc55dd9523ebab7000000000000000000000000000000000c073d2885eb125d3e7db48127178bea2c5bb0f09eec7081f15bc6fe6cba156914fe1b1fea6cf14a21a328d831523ec300000000000000000000000000000000010d93564b2facde13d29dac198c5f5fa314a0398f30c6fb7fc9575bc83d4e97edcc1c1d34f78728729442777718f54600000000000000000000000000000000136a4ffaacf0b4a607c677ed343c1ad41a1eca49c7c48fe73ab2f74084a07cff18f07f54a7f8ea1bfb7fa3667863bdc8000000000000000000000000000000000fb0c007a907ecdff7bfe2242097caf0c5001124d112689a74544fe4fd85be9771632e7267a1cc7e9f66d7e4bb4c954c3ccc75501428d3be8bb469ed0f2df7dec10e1d205e11a907cc30c4a76eee3cc000000000000000000000000000000000032bb9f20fdb19f578fac3008396f5dd0a70860f77f8ae7771fc6253569d47b72751cd56bd373dbc5eadf55b99578861000000000000000000000000000000000c4a4bfb5ca6f9c1bd69d7377c6da405afc3128338dfddd9aea19aec5e1e0f547e3febd28445af5e27469c87c4ac15280000000000000000000000000000000003b551547af253d07625028db4b9a8da2a857bc925620c5d561bbcd3e063eb460d9407cd4d4813800551e5d0d23a2ea40000000000000000000000000000000006d5c69a251e9a042c66bd4ee92d4f3cd4e79704b1b215c15b319e09cae0d798eb201be24f407340dbcefcf2cb87da5ae5e403f555fbc800f1342275f18a73dbb679bd31873ee87617090912a52d6a55000000000000000000000000000000000a5802e388f7605bbacd0bb65ba96689e223379214fd7a92de9a313f55d66cc71ffc9ab3f9979b75edf55647ad3b6c94000000000000000000000000000000000f86f968b5c20a81f18074803e1ec55ebd73bc87451c48d5bb61604ebae46538dcc9d21cce062abc07b4b9e89c85bf60000000000000000000000000000000000f9fceddfa8fb5bd76fb7c8986372c32ab9fae3c26e9fedae892bb55178fa2f3432e6eab5043496dcebef46b20bf5824000000000000000000000000000000000dcf7a118881aea4e6a0e4e305910d4e4a5f3d0a8800f52659ac26f122bd63c8aa2c5583f1121275adc9af1800a007fc97ea57a38598204c15bf65e7270a175460510848540ca4004286f3ca09eb59260000000000000000000000000000000003ee0ba2b1de438abe66769124b97a951ce18aedc8d9ed005628aeebd90efd316e7a3c60cb5a103d6f72e7a40ed8f44000000000000000000000000000000000119597c99a7a16d8d35937ea15539089741363153ef898d6bb177d9a9b6c5bb4b79728155eacc5d82571f398ac6c32a200000000000000000000000000000000116184ac845a28c4f96641ec19a07e1f8326bd45e2106148f40277ae6fcf200d64e326915cf5c927222def8deccd4ff8000000000000000000000000000000000f890258e70b973c0d69492b2e7d10ccb3997798503c0943af4255c13b3856ca4007b18cb9d638d5d9cca71c368cdfccc54dd8cbe68d5151e4428d35ec2d5b5cc7f5e455207c0788a695c2d7fff6735200000000000000000000000000000000171035755bd519af04efdd477d407267c5a8108bd32dd6d3f1b9555f15f37ce7598c096fb5301873809f0c000457a4a2000000000000000000000000000000000bd35595246a8337a426c50c02299f297036f710b0979c7f981c6909e835c0d9556cf64e2676baf952a787e10d604f210000000000000000000000000000000006600ff240aaa026941290f49ae8968e72293ae7c2af0df1b4ebb9373199b95fc91feedd2782ce819440286aeb2388c50000000000000000000000000000000015b2bbffac097c27944143cfb22e38ff8e50e79f2336e64c8496b0b25892834efb18a765e26f1408df1d64f4b9b78fb947ee5651c127d7c8ef65ec68fcd97d1dc228bffb5bf1278aed3eef8115a5ae72000000000000000000000000000000001064bd04edf96a3c76d2ace669ff72ee5edd87d32592213cb5a6a4a482154c1723bc19c7c530d164c31626dbf758d43f00000000000000000000000000000000176ac06390e3629bdfa282bf825c0bca9bc4e0b8fd90fcf2d4ee456d5bcb3ac2882d8406d2fd59faf10c8327b1962124000000000000000000000000000000000b58fbe4e14ee0af03d9aac4131abfaaba43c7cd92d530802516cb67343b382a6d2af9399d93b43d6e05f7ec827d5ae20000000000000000000000000000000000bfd241e3180cd5ce9de831b24ca50db23685bea7e008be0c6ead11abee338618728968c25a8e5a916cef8aa516667214ab6a1d0d3f87e7c9df0c14b6fd2f9d0cd755d5fce5f40bdc8174790901549b00000000000000000000000000000000183ccf0ddeb8573923694decc02b8f02162037156a8f6523ed178c13113d094521c3d9257febcfbd8f15acfe3d5d5c27000000000000000000000000000000000cf716097aabb07979ee435cf57ae36a3034283eeec0771bea24c9a1a15ea106201af8606d3fc28ad8ffbea2cf274458000000000000000000000000000000000b962565763c4cc155b2d9ea104e754e5fb4745303240688fee7e2256fbda82dfb515a51096be5ba0b111637b1a25438000000000000000000000000000000000df04aea745b9df2df0e34153269958d3640c1596fdff3fba696801c96371420a3619c5ace9210af7e0de4f408b09a7729b12cff5a72f27e15032844fae50e3cabbe31a69568bc4b5cfa884f62e7e204000000000000000000000000000000000e6be3275371e533a676f8d075bb2ab8b0216642ecde13425bce4ffa8ac51cb1b4c5c789d82387f5355c27f18da556400000000000000000000000000000000009fa3a3df5195203f967322cee54a15d1e0096922b6b881bb3bce54587fdb82931c0b87de7a9dd1a21b4389a34d161ba0000000000000000000000000000000014dd5455deaa5ea4f9b5a6241c2e8b2230fabff9e1ac08b359f029f4c7838201cb88a92a5b696ed47819e4866512fff300000000000000000000000000000000181085d630d1e24ebf79bfafa134c08c0e75626dd400ce500392adf4462028bc714ca07b28b8b8f15c9cf2934a299c3092c1b10d980826351c3d193a0f54a7dd78a3995efb02fe5b4525fca8791b1c4f0000000000000000000000000000000013b60e3be9d7d43eb42f7cc2c0a7efc81c175b696e82b034c87d1238db2798d9ad6534b86992653d86755b4f00cf989d0000000000000000000000000000000009dbb325624e698c76b9d697e4f7f03e502ae1cd43b49a0957fc067858e20e8c7ede3577f336eeccee58cad53eb727560000000000000000000000000000000007f2f50be2c6fbc500ea347cd14ca195af08b835814ca515d14dd2f6078eb6def2b9475c2ce370780acf394065032d0400000000000000000000000000000000109803d612b9e27be5725f162d061b9428f363493c17eb39c097032039387d96d0939a06466470ab62ff507ff762fba78f715f35fc967837facb515ebff3df502223c29e7089fe6d2e9120bd3ecfcd120000000000000000000000000000000008a9fcb462412c1065dc7c3623ba5a980e6f86cc813b5d8eca6b1b8a302ee4176cebc233411f2c9ff171332c66a0d46e00000000000000000000000000000000058d2e7ee02bbd4896b5bcaac0f2b09c16d1664209710945c1f7f1a53e24496d7eace99488debb32afe10d7fea442cb800000000000000000000000000000000084d7600bcb68d5e375457078672fa07ba2c87c8ec5f9eb7b61a0232988b197aff052e7125b33c6657729ce8a1c668e2000000000000000000000000000000000a07c42468c7c65fcc984bbfc2f05bf452daf17d57e669ee5992ce67517e1c93b5f7f4c9434d40f3b9bbdb3446ddb982a9e49fcb12c0b1e9bcdbda52e9852ee0e98fa0d43f7476b3d65ef5370c9460a3000000000000000000000000000000000ec380d15e0efd71958978b1f9298ced4cc3322e472d03830ebbaf2a4601c8371e6bc1cad047b0e1e429ecf6fc628208000000000000000000000000000000000b278fcc53b7527545ae1340c24158ff662683919717c220e7d2838a853fcc84ce3915f105a932872ca7f64b7cf096ba000000000000000000000000000000001520798dcd146c0b39ee727e8276fd998de0157a68587c2fde56cd82a9779b6ffbf745ec151210d1e9143856f24f01d600000000000000000000000000000000175d53b992d750b34f9daa39aec918a0ebb2f539db8057eff1409492c90f79a00f14a4c53445c028bef5d6372c9f80c680b0d6316c5d62d41fb0399256c5c46ebe2a12eaad835d2c7177bb7325e21d3b000000000000000000000000000000000fb3863bc7b468f1a0ab0e4701ea392bd820ec5cc2d7d86b58949002f24c972f51f0f82400fadebef13b750884b35f9e0000000000000000000000000000000008fca1b30d4e01991811679f261d11723086753e816239c8c7ebb60ce9ac0ea207011a69cdc29e3336e8f589b71bdfde0000000000000000000000000000000010696ff9d78b48743abdc6c1f4b44b4c960aa516623a24da515206d95e65286e453a8f275d98aaa09fefea29e71b5643000000000000000000000000000000000fb4b5eb18b6f6f8ee7dc734e8bdb625a403dcac6d0cae363e5a7f3a834c8eed5f01fbc4dc752e228c41f3f9d992bbe01b96434f34fa3e00ee0cfe548a2d2ca29a848cf1c52f940685caa9a227e32a61", + "Expected": "00000000000000000000000000000000165baa8b143e3734169986e68a848739ca05330786012de260148cfd0810ffd5659210855f19ca92566ea0d6c48086ec000000000000000000000000000000001225672112e0476418288f381165292a9aabd009b0d9e44d9f8f00469b2c56698f5f985ab6292c9dbcf73bcf610080a20000000000000000000000000000000005418cba24a43fc7edaf2fe77422a0b2e8b38a45415e13654c6176c8f7cf6bb2b80401534154cd3b23e977af589eda9e00000000000000000000000000000000067126ad59105621cb0931ab8f386570b54977563ffd69c2231c56e7961f6df2c5d7b114e0b1ea176cbfc1d657127286", + "Name": "matter_g2_multiexp_53", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000139cfd67c3365c5b4422063d7901108c9f33e233bf6413ba2e5b2ad62d188cb50dbd3dac0f298aef7c1d621249d4b0c50000000000000000000000000000000012fcc0d5d09cb3d86895f76ac3d3e9fa9b2495110b0276e7a039d7d2fc2e48fee646fe331c1d8e6f019898ddb43dd09b00000000000000000000000000000000159356eb3ed0d4f146dc929aa6c77057be5ffbb064432d3fc35d346f19f6c1f8552c7079e27f3188bcf29941375e62c9000000000000000000000000000000000fbd4e9a57aaaec40ef9bce8b76b529bd2261d373f05fd69af58d1f23c089497473e44e937b2617a92942af1a99d031f10e0acc22c43080ab9cea11a60866feedd57664bbe6c3f0366beff177f66318500000000000000000000000000000000022ce2d2bee57f7567e9b52ae8e913c79e3b2dad381802ccad317b525be0b503bdfa92722eb0c21fdaa31fce2421ae300000000000000000000000000000000001177074350288dff9dd85dbee758fee1400cebc173793198a96c0be3bb810d352720e94b9bdcc6f5a8951b3a86b2a0e000000000000000000000000000000000179e21de58ff76427f5ed7c8ca3058d0e5e81e436280aecc75a3d989d1cf11d41734de22bda74cf0dff175ac789532b0000000000000000000000000000000016abe94a49f071fcd5e24b5f3a837fe3fe7c7dc53416f59d0469d71f144f71ade4569bac3aaa202a8479c794bd251645cab0c230c354cbf1a3c13c23a36ae5f2d5d084d7aaeb427c580cb6b9bfd9df600000000000000000000000000000000018dee638031a3c9b1198cd4a4f267cdd66849e2b80e3d670897d9e058bbe772936d827eaa4e78283d42ecd25eb4b22e200000000000000000000000000000000009c04ef31cfda7c086a31341434a1698c1132fb5916d359a523b98d05d57bb38a1e2e2bb779d4762f9d4ec24fbf2564000000000000000000000000000000000a788450652e0bfae66889c66b0dab8d1972a626facb690f8e4ebfefc7e1a7b2b58f6eed02c1f10a74b140a49b6c5de50000000000000000000000000000000009e48b52f2b0548dab1c0d260144ad2e66a22e0f1781f94071b5a3a08311d11dcad6963b4339fa63bd82b4ff0dabe685290608899cce4b3d25f57519cc881eb748e9ee7e27f7b21d69f5d8ab3650c3e8000000000000000000000000000000001319607058637d4b796020cca79d62af5862b1c186f32d99c0ff53a830888f297ac4389582f9fd010534d824522e6fe3000000000000000000000000000000000608ca0b4806f17b59a805a3f9f75e7a33ac0791e05050d4eb19f2d4c845fa4e4c738c3309e24a4524b6bfe716949ab5000000000000000000000000000000000a6a6201ec077e113995acb81d4d07d0c4a085d367ed740d26c4a0c04ddf28697c1cf5e648b25148888617ba77ced5e50000000000000000000000000000000003eaff54800dfc8eb3ce647ec4ae8c1aab6a87d4853a1ea061a5e6367d8ebc94243837d4752a1933f7eee0ec1ffe68c8b71debbd9f3be5d6e65e837bd78605d5653fe63025c320cf49c035ae66d8ff5700000000000000000000000000000000122822c91bfc4f761b65f4066a94c0eb1f53133a1355c019f04003e84edc5095523b2ce87ff24bb42425ce979743ce31000000000000000000000000000000001928bc315800ae9936e5b763bf29b19a9aeb71268cb47706494598e0ea057f9dbdda6733d9ea165acade87bd89b3ec12000000000000000000000000000000000a87c1ee17bcd7d348ed1a5022bbc7438bfad06172584dd8e3b51db4b3b09645290382ba991df37db0ce562c950c0e6600000000000000000000000000000000127c80da591c3ff8d300bbdbe27e0aa21b5edc1c1fd8a5da27f58a4dec3971b3c4f9631bde244a7072d9c19f1c0a46be250f62ee2c2972e751b36d95a578efd2fa5e0a2c1e29475a3cee48a28080cb0b0000000000000000000000000000000004bcd0a0321c3c7e6161cd53254353905c27d965f57c9783c3fa7cd5c55a5820116415ce45491d5d1ccef6017ea4608c0000000000000000000000000000000013a30e19c43a1f466c0c3ebb5cf1b57c44434892b18a7fde18a2a29b09a5b4d13d26cef871d689d9855a73a43d22119a00000000000000000000000000000000066d6b3c9a949049413300ec0398d605277911d7be327b1d816cf25543d1b2d7c31d912f426021e612b56ca288b462450000000000000000000000000000000008549f4dfdf018073cc4e32ac930397659ae7a59ef42ca4f864b26e4635c2b7669186a107e9e91c35f04674d2be46051ad08c3d2c36085212542427c1760c72f22838be5286402ef87403f816f4fec950000000000000000000000000000000015900fb486bd2c066cea98e51d30424681fc3347a1cfaeeab65989d1adba104a362837bee51b8b953ebb520feb49aa6c00000000000000000000000000000000198ccab1f94fa910f755936e357a92d358e00cf406894b46adcfc301918c4fd7cf7200a1ea515343d577d920680c83640000000000000000000000000000000018d9380a8568adb92f8f9f67c315f2a837d542b32aa82d9bbf5db6dfea27260738bd0a03683a9988c6c3370563e7bb8f000000000000000000000000000000000528ad42f23c4e21a687f2303f495e962b0a90713d6ef3abbdce38ed166ffea9c132e50c5b002b2ddbbd4933e9a1aedf6ffa16b6fc4cc9509a2b8d8434fa0f4f38b4cb4eb1bf7f545f9f43b9190cad890000000000000000000000000000000017eb2587aef34b03943a170d91d99aa16ceb2a36df3068663382ff4c135083c998743f9145a2fd5dd4ce3bb8b64cf3fe000000000000000000000000000000001256fb29c7482e5469d64183e3e848e5bf32f9c495cc495c3f8cd8e46f71c3f9880f875cfe429677615a6803f849952500000000000000000000000000000000146e2f329f86ddf5b0b17c37aa2905122f457c2c812782bdc15e132468af48c49b715e3080da504d59414ceb367596f100000000000000000000000000000000022a8e385972592430e76bd952a700df8d35b32deaf06c60173d0048d6ea22dad95cc62300bc1a60c6452c41b32b504a1271d29abc5f972809461a1afa5eb186dff5e28f20311a1d8416f8d54fc4b2d90000000000000000000000000000000009c80b3191783d235814fc86653bf2f9a32cb7938111408087b6ab5bafc480583e7a2a32c6bee0ee4aa867ad5dbbf77a000000000000000000000000000000000a09af60eed6c47a6c2615cbfe62025530b35727b42fd812032671ca1eece6694aaae259b05906faf7fbb54362ea890900000000000000000000000000000000055c5f0818f41e5d73e8cd5f70fa77cf477cad8dca2a88b8970a3a25c8f38382268e439642518f1974c5b470cbf29699000000000000000000000000000000000834e44669043aed8ad47cccaaa7476ad830e38fc1def66aa7e8207e889ac0fa1a931eb1e90aa6e1cd694bb95056c3e63ce55b3b32ad29dca1a0c99771fc8f7179851995d5eac804458edede9b8dbcd000000000000000000000000000000000190f8da34caaf472ea9b0f41851f808bba402b9be4baa5d02d1bcb2f66acc3172abe78a49a653cd24dea402dfb972f670000000000000000000000000000000019931343d0e59f0f0a060bcbbeea92fc4670db510c017fd94e0650ace68c2925c627f373d8e755813c199b79c70369f20000000000000000000000000000000013ee811cbc036d2786d8ec0339627d6134b10517c8858f6c6db19a9319636459ebaa217649825ffba32a224175267de90000000000000000000000000000000011039d587f3323ea9d3c50027c427fbcbbf7e097533d8a5f7a61520f3eb548c399e401df0f51884395ad6a338c0a3500c6fa7aeb016b3e3f599846af83f426b9ab85b6857f901c49554d03d27a390f5c0000000000000000000000000000000011d5791e9bc632eb63bff86aa433e6df463a84570b779c913f67e77fcfefb6af48f3df2174096a511ac35eff64e0e5f3000000000000000000000000000000000282716505907931bc93748ba1729777b959d65aec5a78c9f829ae6f2a94a022116715a8c2a653a832a62625473a0cd1000000000000000000000000000000000f694a16ce7a69f0261a0ae19478003dcb61bf93a2ff39f940fc4718a38b9f4b6ab13527c5b438d22499ba29c0b5461700000000000000000000000000000000031eab53440757e4065804896e9e811d459665598546796d67472054fa60e5da8685d8e847eae342e44730056757c6287275a8d16c02389795d54ebdcb70a39fa885320d00cd4e5aa15967916e46c61500000000000000000000000000000000138862ee422bc0f38ce3e27ed3c1b71f71a03d61cc474d989b0cc824efc512ef173ef17bbfb2090997eb9435f4d23e0d000000000000000000000000000000000fabf1fac2ffa25d9c8cbd49b3db5dfdbee52adb947ebc1a3423c9fa2f9d3d29329b60ce0c1c739c7fc6d5a5d3b9e96400000000000000000000000000000000090d92e8763d4df49b8121a50affcecfcd632923b5fede480a3ee79128781f3f49b592d8f65d30adfc75d8a1922c41b0000000000000000000000000000000000074456b341565b13ee3862bd87b72f9d01754c7715751738c5b33ee85e3d8a6f731d7292bb485b5fb59bbf3ddf9b0d0dbec9767ed2dbde21fd8f315ed6292b5b0b1bb6daf2b62665c34daed00a679cb0000000000000000000000000000000007b85110889fed72b3654a8632625835cc041ff0a827f3e1b86c090d816d98cb3b4be66b6e573b3dc05b1998f2772f0e00000000000000000000000000000000160524507679ee021f4307e5a9fdaf01459cbb9a3fb9dc8be5599431e2a8bef38bf8a05d601580085da503dfcf57aab7000000000000000000000000000000000f98e2e7ae9cef2b1d954b7f26fa1755258112c496605c3c77408786d4b210e51c76f10870f558296993e0ddcec3d76e00000000000000000000000000000000068841825f5f5d8f622c1d43bfe090d11c6996688589c3d644ff5da47b94c0638128878d51dcf6d43637781f0ab21a68ff634fd89223733f407c242e52f034691036c7ca69f30e6cd444c561de9ebdaf0000000000000000000000000000000013ec97016dc3d6a3cf41edcc18f88f58b1b88cb2616bc2a8f96af3e7774ec1aaefe86a86135a20ab7592c874a33a8e1b000000000000000000000000000000000021dc7e4be6462d64ba6c09c2d326ca0164305dbf5ca1981f265a1e50f1a646748ce66ae07297230325937faf60709e00000000000000000000000000000000121bda2855503ef11b043301cf331a0fda6e5914e5ca657890ffba2542d908f8fb02c2c93cb4ac4fe5bb92eea757ca7b000000000000000000000000000000000386fdda56c778a7552dce451a6ade55cd24bf9eaeb837ebef898e2e868d05eb5edfe97bfa8eff8ab7cbfaca3c918910461d349e9711fa701b92b62dd3e3569d1203b6a35ac8600367a4df9a9484bdb0000000000000000000000000000000000763746ba87e8bb547180b0bf18699ff74f11154a06cd77a76cc9c264db7c48286fc52e3ef2d30ca914cdcc5c4ed46ad0000000000000000000000000000000018037afcabd273413eb4a712f5d1888249dc987a6fdb8befb92c02660604bd11deb33f283b37f88880cf1be2b2e71f1c0000000000000000000000000000000008ecca3d1652be4764720ef13a6ed6164a3ae89d160cc8c2c8c37bcbaa52db0fc0de84fbe2a19b93b8100556fce0fc80000000000000000000000000000000000c5727babfbc5c36c1d57b9f69c5b41823882e0196e9e0a89d5f4380c4257818d90b1fa6d782e774f2424209bf2e6b5fcc110fd7a6ae46ef78c0e26183e707eb5e0a2944e3afc09e435d56e91584b93d00000000000000000000000000000000142d41630fb9db2f9630e4d5f9c13069242fbcaf1dd02f93224174567c3f944fa02b9791a409d9236d89df6ad785e8ed0000000000000000000000000000000002fb5fa0b3a7cef16e5638f217bb946085fba870836c618a7db9b4394da9144850572daccbff8208f14c8082aaf1ef6f000000000000000000000000000000000a6be9b4a6a9b96d2096eb3a95780f11be1e13bcb6e625517191822403935c52cd40481bce2e782c42b11321cff2cb7f0000000000000000000000000000000019e2d94e35d608a50b5c8b371044f6410dd6c1988ec7a677016d4b52cc3f21b82fbaa7db897f7107d81a177c31f8e52467de5b9bee26b26b28f81d96e880a3f07dd04eb56c15314f1a789436e01adcda", + "Expected": "000000000000000000000000000000000a6f3fcd812e3878cccc6967d49b104599fdaa80cb5dee7298c3fdc80477d277f2c68f1c941f6e03441eb176c222a448000000000000000000000000000000000a4007cc5586d677e7945dc8a5872b4839d5b256999166e7fe8efe4d56895f93be4659f43aaf68c6070babb6d3328168000000000000000000000000000000000cef5304a1077c8f31d72e6f1f91ef5a021d8ba64719b4527225b34e615af388d9b1391f65511eac209ff5e86244039f000000000000000000000000000000000c856e7847ea0b4a8334d124417b45a8689d5d9f113b99ebbe3af3f9aae1cefb236d751c40488a861a8f0e0326b42c4c", + "Name": "matter_g2_multiexp_54", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001805009a7fc3d1705936696191c163a07ea992cbb4bec66884a2d58ac3fc0e16b6e0d2292caccb3541f39b7fd6098100000000000000000000000000000000000f3bcfcb0c400d3d06184563204bdee465de167c7d17bea2e2150fe12eb9bc3285f5693b222fcd224181f8d193b7d95f00000000000000000000000000000000028d60b7fc3790aac7f6b3ec32c4be626a2c64c6348fb8a1f39e58ee56b81469e04886ed9be1388958550c02ca9a75b9000000000000000000000000000000000b60ed8052e43e99d3c10a4b97ac3197ee3cc04ad857c5cf4d8ea1df2671084d02fb683f28f5d499910351354d5e6288624ab43047c02e30ba2ec671511d06f869bf736a9866192c5f2eea6c065acea40000000000000000000000000000000002ddb1a9a88e3a0697540cb008bceb075e87e2331f6e9b68f8ffec48752d93cfda5fee121155ad2a142c0ec42808fbc200000000000000000000000000000000144b694018840835fa9c50fdf62c2e32261a8350d2ef074dcf7d016af982316a0c6f9e5d15d29d3a54d8d25aac5534940000000000000000000000000000000010a3765089ada75e9eb61328756ab9ca7b8362cf86cc82af3cf43f390a0745954f28da72a6ea4eb904a040596795639100000000000000000000000000000000056b51dbefab453012b35fb6e06af06ee92e4e84e92a9967b379af760fdca4a3f10f938684a646fd70a2188721c92e98edfdf850c0d3e3903404fe3e0f523cd230cabc45946c4fcb6d0e5e05e388c23500000000000000000000000000000000169effb324d60b71dc7ba975e3d5f18700b34cb9017f482f64be37c4df01fb66ee9eb5870e43649225c9a88a0d499b890000000000000000000000000000000016c7ad9c5f7b65a9423f642d87621a5192d7548e1099d774a99a34dd4ec9623aa1168b9adab092b3cf450f369bcb627600000000000000000000000000000000123b35bbcd791ce0d00148cdb3d35ba39054a7126ca5ad3351fef1437461379ef639896b271276a9561b46e270f7501400000000000000000000000000000000161fca2deb729fc55f1102fb75ff466319f18510fc66d6cf95a8256118fca618682f00318b0a5297be873a2f7af1915afeb34852ce0f3b5730962023418ad6cb860716dcb526dc53e8ab6a74a6a3910b00000000000000000000000000000000073ad8c2f713288313185c3b2455ade93d58e70d5df6b8dfaac8eccd990fca6843778fe42cc8aa6f34ee44aefb49397100000000000000000000000000000000012eb9cf288a366adc58d40c9ea5f2cb5dcc5b04108e3822266ff20eed71f56bd74f1a2727f20d55917adf20b6c4d6a1000000000000000000000000000000001463db177fe5c0dcb899797f89da963731dd4e9e8b2eb77b465b98415dc95f6d5569df51bd2b08a13838f4cca4b62fcc0000000000000000000000000000000009c0bbadad98361209f36eb23a9eeff98f6eafc7d5327fddb6bf43898a2be704520a005b84c5b45c6a68bb7c98d65d6dcf25e64093bd92a8fb394511215a3fa674db86d7329ac5ea70ec77d24d4ac58e0000000000000000000000000000000013c63973ce6549ca3dfe8ea8e3bcd6b0bd88f7c73730834d9ffe2076cd4345090d0364d161ae8998af1048d102f22e5d00000000000000000000000000000000060cd24eea4177c9a5c37038d4cb62aeb709218fa8e64b9084e002f53a0c4c411825812c20df282345bc4a6aabfff6a100000000000000000000000000000000106ea864dd52933be02c1a79cbaf6dc81ae9a2d619bb368c4abc36226104f3b74fadfab906e36d4852a6412315223bdd00000000000000000000000000000000192e45153e4942c88bcce76098fa51782a81b53abddb4c07bd79a2391be68858e2d278969b9fe75bc652d02fe4db1a130b40db4f9e5c27a3208899f4f536880b97f4c69e7d889c0726d87c3fa27e097500000000000000000000000000000000101ca1625e9d4a51e08f5eb81387b361f6445eb307d9bc92acd29d62735d4e5078b1a9b36b94e4ea0a314703a85ac4cd000000000000000000000000000000000f134c460c6d931396a0aa397558975ee973e642f1c4a32a3d397051fe250daf4215ff5ac4b2863d570c87f0e32c8cb800000000000000000000000000000000008eeb127a38104351298ad77481c32bf51bc5d3910b03da0cc34062dd2a8766adba6891cb9fc579672276666e1242730000000000000000000000000000000010c896ecd4bdc1ce010da81a51dac96409079853635e57e5c3a5733956a5f5a9c3ea6838849e286ce0405dd54d7e32d6730bc7f68d8d371d0bc51d95f8a5899249b8db5cba0d21fd88ba6f86d8691659000000000000000000000000000000000be489a1c71246adaa1c1dd6d2ddfae9523fd1d58d00d4f189f56d08632dccc694e63b371db6922a7f3faa05afbf487500000000000000000000000000000000174212b6840a797f0fe9e209b41f55aa5dbf169a2e2ecf05de48c44e608f6cd6d98ff5269e5412defb431caadc8a09c3000000000000000000000000000000000f4501715c0c511703f6236caa82479b3368de430f2c2d95b39193537be0b990fec1ed8e4d94634ee6233cfa359b043d000000000000000000000000000000000f3b4712f95005004d99fd739affc532d2c4c45970316c1a43f76fa9b57f6676c709e8791c276237b92750f5bdc94492ef06360717cfcab15be966cba2836b97deeedd20a52f88c73e2a583b64c8e5f00000000000000000000000000000000003abd36736fec3e8b89863670666365b169d8510090a89007c7ff3a82fc62ed371544013a1444fedc4358e92ceec62470000000000000000000000000000000008229855468fc63f4024938cd6f41c6e6a5653319cb83f38ab7efb9e9d281166261e7c854bfc08f55a0a9ca47e54dd42000000000000000000000000000000000463ccacb341fc5874f6ba2d44efb5cd24e9409b2ce7f43e9d39466288dc833a45988261f45d34332f416a68c5d10ce80000000000000000000000000000000002baa086177394203a04ce1b46415983399e60986531967b690b1a13cf8ae039b56f0a00bf9aff357d51ac57f8fac8b282b7d8b8b9345bf13d0e113b662141f5ebfc5888a5ef8ea06f7d5d137324ebef000000000000000000000000000000000b25a203268100df0510e4155c594a144dbdefbb0ac95e02bb4b3799aee4e738ef4c52f03c6937cdfa7275c28f130778000000000000000000000000000000000c432347a2534e86e90ca346a7b8b40f45075727847fa3ae2f2e297baa14aca88ac6e08342f0d248a92e2c272841fddf00000000000000000000000000000000057ec8099e1e30329762ccf0641b45e1a226f7b66b80644fd551d6fb1f2136afb8e8ab5c6905ffc7c24e67d7f21863e4000000000000000000000000000000000a9e472aa993bea05961affd6782efe8f50d746928efb8fbd328fb50a254db861c90db8df7faa7da8266ceb47fa1a13a2396fe15751bca2c4a651445cef236a865269849908df53551802dd378b892cc00000000000000000000000000000000025484652f18e2b32e2bbe79916c8bad42902db5528fc45993e04daeca008f3c2ff38fe4b48c292f70a7dc57654233400000000000000000000000000000000008e403f472b60a6046fd190544a1d6b249dc97cbd8641c62613f4de0e0fa9f5456d843ece4ac2b9f4ffa2c0278e61829000000000000000000000000000000000824e0b9b03198597fa54252b3df9690df678e9c6d82301848939dc55ab25a7751bcc2b99786cd31960ee7030bf68ac80000000000000000000000000000000018d1d8c7f2b20f0ba66db616322e48ac8f1d6f4205f228ee8ee6cd13d1f64be9af338c11f511859baabea3e15d165fc09a5897c9596223ca4d6628ca1f793a000aa21a739a37faa28637692b754148f80000000000000000000000000000000002845c4255819ec6e97abddf4c9db7d91658dd1d55328ab0565144b377e20ca0743d93fddf68acc985ceb7f7431e30b0000000000000000000000000000000001577a5691f2425e65ffd59071c2bb167ad05a8fe23c11c7f7464764442ebb2f7a75a8d02594d4426c1ff022f7a6e19360000000000000000000000000000000012c6ffefcd3964362f1373348404d04d1849e98ffbef7b5ed5704d74b9550869e30a4df26e74b5304b85c7503f7487f1000000000000000000000000000000000faf3dc42113f27ac27aae36725221d04fb1ab46b59e16277be0758b8fad706fa237c0c7627771d8e8d3ad610f63619bf20a2973faf886556e5329363bd9b9c96424fcf2e953df90bfd011ec07bc66eb00000000000000000000000000000000044de166200ec06bcb88720e57b84cd8f9534d1fe303a26aca08cc35104ffd7e81a6473c08b28037118dd8a61d090e910000000000000000000000000000000000f4325ebaafc67945de2418c81f5da92da4e67866ab5965eff0f392cc527fc34ba4e7e16b91c26aa370b27eb6a07f6b000000000000000000000000000000000e1d77ccc1c196cf1cdf0dabbee4829d56e937372e9f5613e261ca07e19b3fcf10f7a45c490b98b5a64b955eab5c4f2a0000000000000000000000000000000004ba2e81f901b0da1ead004c76d43278d372456c0c0a8c6752597823d44994177734ed3f355aaa22f325ea36b7c9eba1f4ddb773155a27badba330ae5d26096f350e9ca2811feb227c4eee09d2baf32f000000000000000000000000000000000c115e270ffd6f2cb9bbb2a62e04c3bf7be9d7db783d292bed272c297773b39e9e51c75e5c79a6606ff7d0bb9ddd040a000000000000000000000000000000000a57b637126b16b23bdaa6a7cf2346f33778cebdc0c9943eb2985ba5c4114674cd596ecdb6959791139c36c22148ab8300000000000000000000000000000000177c7ed16c29d99d3d98c6facca9cb5ffe72e6aa63959dbb51d9382f0fa49b02a1652a398eb223e093516ebf134448c4000000000000000000000000000000000d6bd518678828f582fbb3b1bef725e66f442c4d3e6325fa571e13db492300d03c0188399a2ef9d5687a76e647873c0f52e4030b5a4bfa767ae20cdea7f464dd2dba51c9c698556d24b8f3d4d1afc82e00000000000000000000000000000000085d4f90336987f99d250067c2331e7de8f09a80d71fef0570ecfd99e409c1f405058bd3461c9f8ac5ccda406db89bca0000000000000000000000000000000015f310660ca6a0c06b458d0b840a5c1c476d5175d9ff6dce6334466d363d319939572a2b00662247be1ed0f4e6676f8b0000000000000000000000000000000011e9352c0f81bd3857806db678bceb2150848f2224ddfc43fb0c733f0689ab4fffde50d5ce04d54055d27d7702e5d2d40000000000000000000000000000000005d835d04dcf4199130d6a16e86cb97f4ccff58c496594b83524dcd88f5570212f06b744379288f2a737c7a82e897cedd32e0429e7934faa526475c5c7fb977c3030ed74e145eba21af2d2cc8461580f000000000000000000000000000000000f7c4e621c37bd3068a972b9d4211abf9026e438ac7f8cb341516f7e6aa4d8bfb3536389e9155029ce9e8d5d376eec1c0000000000000000000000000000000012a46cab2624797513f2acaefa26fb22c4bf29188881690c350593fd1949cbc243c9d1d7d27d9d76aaccd347359a45660000000000000000000000000000000002dc383d4f9b75907f74bace1769bb5bb1b27a597c9548310f2b5f90098596fcce6b5fe0c72bc8be9037fbf31050d74e000000000000000000000000000000001900deff7ddc62ac302c941e1d2a28a4bd2351edd7700042ea4c4a48145ef91688666d8d7de503913ea259f0b58809f21f700d651c67ca5b8d95fad1a8e412befdf691b074956bb8092938bda2ad26940000000000000000000000000000000018ac8048d58f7b1a9407d3101824e3640eb20633f8ffdcc97d43d1b25329a2a1e91added42801c03635ec904e627eb690000000000000000000000000000000000b499fbdbe2ed41dfd6c454796e1ba57021f355a4de8f60964c78dc685e2ffe9c90f5a1f6c9677514ae4a9c95c8d6450000000000000000000000000000000009d10e5e2bb69ea6fd820778f75a2a60627802a49128c3f999d8c1cc2ba56ed18acef354a2e06fbbdfa7e7a4ade7529a00000000000000000000000000000000082839d66a18763656c2ef7196a1d83bd162e1f109b54c5a6095cc7c436e8a4888c4001696958270f54f61b81b00b32d83052a3bd7a13bb1ccc22b9519c7ab12d2dec67924fd9f15f96069de22e7b692", + "Expected": "000000000000000000000000000000001463ac5e269d286961036db48ae33fb868a28b0dd828c3a66592ff9dc115303bdf3ab78a8e1f5df68ed1f3b4c6c3f2440000000000000000000000000000000012c64ca0ac10ab616fc733f75fe6181814e9c204f9e4eb79487ba49e3a9746b9b7916a1d768f2ec573a4c4e226365f48000000000000000000000000000000000a06b5b745dd92adbe1f4cf30c79ce0c48428b3e3b05af1585c4ca12eb2e763ffff46b55a060913e1f77fc9b0b085c9f0000000000000000000000000000000006271931ce9c8b9cabdc932297f3c87128a5af25a9f77e71ea4e588f1e88686638e89a8e212c92f6472692be2e05fa5e", + "Name": "matter_g2_multiexp_55", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000001bf5b74c1ac89d4bab4663943e19128619731e315d2d7b39675f7c43493b338020190a72cc7a6edf0b8838886a7fe6000000000000000000000000000000000713f413bab7919cd57c2de3349394121d6bace3c10df0e41a0ab895433d225b05cdb1587deb93ae6e56ec26a29c39f4000000000000000000000000000000000dfb11c9c0bab7e4d1ee39941d5f6b932ab473567be2329c94bb0b146c46fc1c2cda25dbef8ff9b0066bd4ca3b6da67a0000000000000000000000000000000014e399169243bd619be7f2120b2cae5d19b2f04185aebc7d948007c4d3345a9f45249273b6290c2e86448648868ac552c40774f67a651ad70f17393b386e9ea9e81682ffd78db7fbc17cc5084f3c7052000000000000000000000000000000000a67bca1f8a0b386b2a67158e80262f025b225535a294394584118f9a701e31e91b2c7eb8fc7e28538966b967c139dc400000000000000000000000000000000185e8aaeec9b9abb9f0d6f34e2480e9abc30208eb1c6e023d4986d544b356a387c323c9edb5c52f5a2f0bd59cca7df98000000000000000000000000000000001877ce1ca6e8b30df86de688d950755f2708fd6f933c07ae45fad1b3e43337f1a8454ca5d2a80940e8fee98fffe953a700000000000000000000000000000000117a0ac9d27292f967ff5bff2ebed5d2ddd9f453d6aeadd9106eb52b53447974561b621fdc1d973c055f1cdf824c367bccf1e36e063a5fdd4b735dc18bf07703b80c6b72f987c05641612d7ce73562c00000000000000000000000000000000009fc4e9e816ff495dbfd4f745106fc90c023d95bc64b809801d02dc7cead905177ede5016f537243660e4b7f54a02ea200000000000000000000000000000000180aceb6e9851a11a1e34502897299e7db3e09f4970337612634fd9848d1de2bb3de8ede690ca051a75add5810ff777600000000000000000000000000000000199f3c43d429fe8f73e20f81ea00c4e78294eaaa29fd67563664381db3cee2186b387b880089cf96fb99c2e22c95449d00000000000000000000000000000000040b20ec4e685f104be188d0f15a79f27cf34dd01f813275f6019a9ffac56e234b6c967c80745294d9fa46e0083cdd907ea75dd2f54fa6413ba77f10a11e12abea3a4b947116e1e7c9334a0a37c3963100000000000000000000000000000000189fba635109ca215bf3a09c3e44ad65f7eaf653e0929aed39042e3b9c8b1132c5fe7cfafddfdd0646514aa1f9e7e1c0000000000000000000000000000000000c28f598c80ac262ec7a0e0d1c867e01ef26f182c5df9ea7f88fdf8bcf3a5d2f06128526b1ce72cead8ab4286a0b8d030000000000000000000000000000000008051be3328df43b79dc9040ef0a0263d474acc0edc023f300cdf7c13088d1bb21b5f37ed81b38dcf8718bf6441605f8000000000000000000000000000000000d2d474723c6c246dc59e683be147b1a6bd6e7d3cf12aff7b636802a99954e7a13c9ea429b19833a985ca5649b1a998f6855c61bb7d72b022c16290c6d3ca9c1255cede8e0b827b43e40fbf01840397800000000000000000000000000000000058bf424fd68aac77c42a046f78a55729e6b5b3fcaf436d0d98354b426a95904b55cdffdd9a8892c9f56f170ca8811a600000000000000000000000000000000142c1ded08928fd155b89bcfaf9c8194f4569b4cdeb3bc7286f4dd79e822f5db497768220533b71be8c71d121e557020000000000000000000000000000000000a9c753686534bfcc295eba0a617f86d7f9e78d3fe6d52f26cede97a5b1f107210a757a2d89361645856b7b20e89185a000000000000000000000000000000000f745541841cc4b5352f659c2b7cfa8d51b07f91b0cb8c787b4492bb4b94ea27117695416e2806e57c38d7e565b9eac67fa8503101f392a6c6c27300b6992af3fcc48d47f73db67615a44de883770d4f0000000000000000000000000000000004445d4464b51d6b12f164a49ee3b610f11738d60cfa6e02f8c33b168d9d5db90e6cc558cd12c56069571567d91183a30000000000000000000000000000000009e4b96c2b533a16803a36f8d1f179313b7adbe6c4b90716855474ffb2fbe087df3fc0b4ef14cda7d958efc5c92574ac00000000000000000000000000000000104dff7c859eec61a0ff8e0d831bf9667226d5bdbe298400b4f9e3159a64b1bbc7cb9f4ff9604e3ced40bb0de0455ce300000000000000000000000000000000134bc2461459ed6f0d96aca02b62e3110c2009e1ba7d3258656e9cf97c2a1685faf1f61733ce6ac3af7ef4d73d0b43b1dd947617bcb7ca1c8fda0d49e6d950a84d60230bc2411d42ac32e3651f48524b00000000000000000000000000000000104e5709f8edd71f50eac1770ff1c2b21f5ee8cf5a310fd1201109d1b73cab69913bcfa2d27a8ba16d974e9841586ebd0000000000000000000000000000000003a4bedc6277c61825f6ea1f438c058a1afd494c384689a8479195646888eecc7953b8b8aec849fb5f19a20071261336000000000000000000000000000000000856ee8eafb9b3d25fde7e38da4acec624d1444337b87b0b1a660bf497ff37929b1ef9aed8e1fb0ffc6cacd8f0d1a1a00000000000000000000000000000000011b52192c88264df56de3d7b14372443e25183bb816ea1c0346f15a1f324527ef8531e27aac3112e2a497a0eff0d5485b4cbbc6d537ed2b69c2c32c84f3cea3d2db180b64861859368e98aca32bceea6000000000000000000000000000000000a696c83010719161b6624aa7756e6e84980518416554ac045a93b63c2561a68ca2ff2fd5b6d2d667822ae4e3b3a2ba2000000000000000000000000000000000fb8fdab4f177b0dee52bb5ba615b1d548130deb87b14d05d427984ec148a7a94efc4674804b3660d0f7aae2b49f7b1e0000000000000000000000000000000004914c0359c8e23a7e431e517cb83e5735cb2876e8b53ad45abf1e9eda06e736378ce03ff75002374d47f1bd45b08e8900000000000000000000000000000000139abe340c2d773cc45cfc75c47ff31b2dcdce27ada3e6d6c0823f37e4e693ca30342fe41eb96dde464d14668eb72c5e457bcb8c44a2d9d1facb39ba7ec8ede5d5962b3256d9fc2e68a1ee5a733ccbd100000000000000000000000000000000180345fc01e3fa349c45b1a7fdccde5f9ee70d7d65510e8b4bce654f2541fae7641ad86f9bbc1f02e93e94422433f8b40000000000000000000000000000000006cfe7026cd423be189c5ade8de197aecbc9aefd4cdbbd2aeacda816247ad59ae06a5c49b0e29bf1140f400d46845191000000000000000000000000000000000cc4f240a317ae9ce75b44fae87c92fe9b6de10e1191cdebdcc37ac200957683849d8a957216676db1af51fa0a2a1136000000000000000000000000000000000ba84d595661e5d9bdf9d268a3cc575fbb6b0d469b58b3e43f80694c78f4e9e501c4a4f9c42ee4518ed7189a1c36ca0c19f254dbf75f1c42046343b0060e71302bf6c94ca2fb8aec74fe7a47a3c9c3ff000000000000000000000000000000000fdf7e2372b01b5d926a18ddd06b4573248c02d7debf944312dc06f76ba08a7be460c451d296b71e9e81cf0956b974b80000000000000000000000000000000018326d0e1bfb4a62ab6f772b47ed7188035a62141e6b2eccf53a299028902a172771e8e46c0b1ac4833ab12045922b3600000000000000000000000000000000072107574145c6afdfc7d618f2dba2b8bb01d92007dafd476e4ca62e6053e5e9f2e34243ec2dd16ffdbe3488b925a0f000000000000000000000000000000000070e8491a835ae96087013b0f8da267a7ca5b0a600d71b8c76fee35f41d8b5c1ad82c5170b0e8d1cacfc7b7b13938e96f08cf27a47d89ae6e2ffb27870d613b9ae586857e4ea00670944a2883ba325af0000000000000000000000000000000018f4da37ff63f66d68c875def8c758d9a5adcdc408f0c12b3a60ee4a285e6702b1d5b9326c61f443dc71ae83c7bd21e80000000000000000000000000000000013a665e430141cff62c25577798473a645d20321490bae7689de6ea223a434c7d3b16ad004b24a82e2c62879b2408cf90000000000000000000000000000000011b0108562f53bd47d9f8ada54166854bf758ef3769ca1c3b7b006fec8707107fef0b6c7e59feb727646b74c27ec699600000000000000000000000000000000028799b52107d8965066e2f629b30c0edb490a0f4d0b6cdfff89a9f7763afbe6217bd42c2059042397b6c0443465fdc050aa333bb6b44086fe6211e89cb70b8467eccc228c09aaa1d589cfc24771a11b000000000000000000000000000000000c42cb42e389f32926ef09584516249ae332641b573ed29bc0884feda08d35c1bdc6c3d4a69fa15105de95010c6cc24600000000000000000000000000000000006c57fbf93c7959c562e0f3ef59966c1640c706fd18a6b539dfd711b0ad79643642038954bc866d42d1c04be375b95a00000000000000000000000000000000039ca3ad23b71693e02af36a4abe6ccd0dd4f4aa709f74d900b9fd015a2eaed55bdc2bc0749c995783a7615971e8a1f50000000000000000000000000000000009a08596b29da34466c8a7f46b805f1b6f2e48bbba614d728562981d3d4884de9a3c1980d398eadcf69e90c851d48526d9f7f74a5ccbd01afd985d3259739023cd012cd67fba3a4ab5597e94d8fad43400000000000000000000000000000000123dde5bb9b7ca11da9e08a9489cf07d147492be8041a5ad0b70715147e21d6017a58af23c47d77885a7830cfbbe5e0d0000000000000000000000000000000001527cec3c393d03e74ee8a7b1d6a8b6398945cd284b59a93fade9839863f0af591c287e89b3b45e6048f2f9b518208e0000000000000000000000000000000017ac3a2d9458bbd5f38d584b0fe4b35f3a452e22161564a7582465d2068b3ba4dc5e1e24a996596b1fb553d641996a4e000000000000000000000000000000000ee5ed5610a78dee181750e35a8ab91c001446f04124930c2ed85de74c6167009af45a6cbc3c59c4915334d7853ee12f85c00be7e66e318bed8e66cc41e7fd0593004bbca20f0dbc28efe4441acfc9ae0000000000000000000000000000000014d60c1d436e4486f35ec85bf2655ba6b752a36c86fd9088c0ce46363e75abd636052f876986fa0f4a59152998c0e4a800000000000000000000000000000000083328e38373f1de1049deaba78f568db818b1dc38d981ae92b968134d369ccc399bc3bd55c841755beb484cbbd60f4b000000000000000000000000000000001788850a5508d81df9af1f087356bf8e63b3c8a4e209403c4de7b3adda07684a08f9de6f1f8fd8dd4b2bb9b75be329cf000000000000000000000000000000001506a37d222173f0098f56b7c443e04ffe08b376e1563344e7bf22b1c9df0a1292f70ba51cbe554843fb93a7f535a4aabacef63d90ad11bbdf0c5fa2db2838c238ad3049a3f47b7f67361825efbc6526000000000000000000000000000000000d5f153952defdea9309269bc996a7714deab12e7644f8f8344140fe53034de538aae6c3af7b06687684edcd2c5dd19e0000000000000000000000000000000002da67345153c87ca65012b8703acbe777900953abaedca4770fd893275948d150ca3d6694d58bbbc9e62904448a8d2c0000000000000000000000000000000006e8c95d22f01fd9d56178d754f0892f46166282a27e6b02826478cd39119636e811c03fd835c714a59bd2f7da5ce5e1000000000000000000000000000000000b5ab6233d8dff50648d89cd65793640c06ea784d00aff329e882ae04fb466506cce3fb6c381b4eacef8b5305953f7b6473fa3d16e6431da14b8639d4fe316692db087a167a2c4f07307e770bb9e35ae000000000000000000000000000000000595edc440a5c94506a79f3b3fee818256d7c4185be40c1953b46765b2f925ed16a476b07a267570c727592dfc4a0d8d00000000000000000000000000000000079ad05473fca57f26fd068ed659e4aa4919847dd96e683e7d4b3a731cc9ae0562a693abeea4fd550e644b43b553118500000000000000000000000000000000176a9751dbfe727a442797551254cf904862c4d590892e019a54b72f6a5a124d268777b82e19d557690ccfb81cbe949d00000000000000000000000000000000164ab74c150cd151b70fdd7d63d0404214fc9cdafba3bc642aa798b1c301c287ff6d05ee7b3a3ce997072b8189d54aa62774741f87af1d6942dc4ed79b70b2d706f3db6b6d083eef0475334ef1e2410a", + "Expected": "0000000000000000000000000000000017d73e29f1d555a10272043ac0900e80883c185ff7d087ee7f5a3b762213e658a42d1b4fdd435d1acb9d5587fa7e8243000000000000000000000000000000000ddc440795d0e4308577fe8439d43418641538711972c9744dfc8a4c206c193aa17958404bc387c7c2fa30bc678937f7000000000000000000000000000000000d7e43c0f99adcb02db99974e7615b4ca0de72117792ea515bb04c4bc8680a3fdb0afcf6a3bdfe16bf54c1d7336aa185000000000000000000000000000000000bcec1d7fc9f2210be80e90631810987801fdf60890ce197db041b6a62682fd7e181c6110956c5f5e9c196049e39100f", + "Name": "matter_g2_multiexp_56", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015425cbb7075a97dfa9409d7b014127396056dee6d4bb63ea285309fd91280fb691f9cb9572b544b332324f6cb3b1276000000000000000000000000000000000c5b9634e6748d5819396051322d9b7e0377554613a7fd8dc0c71cfb7886dc0ac29add7265af84087a9df5ae3799ae30000000000000000000000000000000000534226ad7324ed5600b5438b659c7b1e96f27ee1d77163f2d3073418f7ded5c613ca4b1a686764ecc43ce3388e0c32600000000000000000000000000000000198267e2bd474dc0415f47f5c87a11fe0945a91cc0bfc37d504ac53f9b9b0d087cd5dbc9b03972be03d4b3f9d2123945d10ffdd3797ad13e65a1115cab6529d0f87b91eb41d6265e694eed8f02667214000000000000000000000000000000000389a084d95445af6e0afaef21d3676794e45986b9520035111ccdbac4ddc1b23974a686a900616f878f3a06eec90db500000000000000000000000000000000064c75d1129753b5f399c1a5166a0f6a8f427d65ec2fd84d0c7339218e0a396681797bab68b33653ffb9820a6005fa7500000000000000000000000000000000147e199e8c08b9af38cb457b623d0fff32242b11e695f2adc0f136c5596db313b03c2466fb58e37c94704152e5c8f9dd000000000000000000000000000000000e8fe5436baf3470a19891b85d15486d1269e1b13098d837b0a510e71b0e6260700ea85f0bc6476217cc73615370cf003e5da5568a9427e0cbd7973a34c147ac2f3577d06f68280caecf8588ebf1591a000000000000000000000000000000000a39a2032858a57ccbfb940741f4ae21b318a56d5567cc0088ed52dddf1e0d5de60bd2da9b675212a9a28ec17fca7c0600000000000000000000000000000000039e2a4bb1b417f8a94b02cad60a3e1c4c4bc5a86a23def7cfaecbfd97d89a5104e0cd13870c9fbd010dfec3ad9b1df9000000000000000000000000000000000bc29c5623f9f18ec2af5bc651a65d89554705a349923ee15a9bfb82c114246b404a1dc1c24d65c8749e7c9cf62d963a0000000000000000000000000000000001496d76f7b8583a64c1627151589af876a2f5e7677611ea15f14606538f6052c56e9fc3ed145c313acea69a51547fb6145b5f1f156f3c823cc129568e7602694107608c1f9545edaa897df58d27b18f0000000000000000000000000000000015f83b2f998691e504aa740b4db38f5b0236ece3bc1ca933b79999d55b737bfec51e590c2127d57625a9b7c2960c06280000000000000000000000000000000001b7b117f5d722e320b7e90307ac1423aec5e30c29602d314bac9e5272ad3990d31999bf3f516ac78b2be0e16c0375d8000000000000000000000000000000000fa7992cd7fb679eb5f9f9a9febe9c3cf41a717c8f6fffbab5748572098407174f09457e13468165f1c7275d52f6c84b000000000000000000000000000000000737e95f62aacd12f8aebc288c5cfe052f34c4d16e7b44df4497d9a713b77485fb0efc09aef11c7b86eec4d0cfd9b03ecf6760be82cefac2843265be5fc0fd6d308c1ed06fc684c4693de25372f09ed000000000000000000000000000000000004d48d72ad4e77954ec6a5a62299f0472bc52b556cf3857019f8efdd694758f13029f9d6832ed672cc210f32033da8d0000000000000000000000000000000009b2394755d0319741d131b012ba0ece7e2044def20ae73fe73bcc276af9d807ad75be79202963f9a5c512a6ca53197800000000000000000000000000000000128f856fc4790d9fa68cd2a3c152d675453dd81dd64f0ab084c6dabce456f78c2bab0e7f315439b34f86e8fa61a33ffd00000000000000000000000000000000173dbb908ed617ffffb6aeb212cfe6c03f7ee51c84134fde67de2ad9561a897e28a0efa66257ae0c21ebcee3fe4fa68cd9fca4d166149ac9e6159ce95a06f790a96243662373637f0c6a59764b77b45e000000000000000000000000000000000bb7b84476d4b17f4ada0b6f50d34dfaecd611356862895c8d2fee6707c4aedbf565560d4207e43c179c5cd33cbb739000000000000000000000000000000000112d8b10c775218d318090dfcef55a903953f7466c50417125ec0b2c20a24fb50bd172331c0377d4f47aec99bd87a3fc000000000000000000000000000000000cf4e4b3c600053f45f350c8860e47621f50f3849872a91ab115f71a2b04657991217e2f0844b296d3a6bc33ee66e6a80000000000000000000000000000000008f625da164bc9d96be3e78df63bd1633a2951dbea0b98e359c6317abe6ac5799c4bb00bbc2c5d02048539e753019a6241733039312347a0c9d760c1bb9a1209a34a02b359a9c52a57eddced1575867000000000000000000000000000000000028db057ab9421eefd1fd481c91153b5c1ceb0f2dacb0097298cac986f036572c6ab0c8709325b3bc25bd494bb46c55400000000000000000000000000000000024be09301c9be4f726fbf7796e8336c50897e8534614c25f65c37bcfc6e724d530c2782bf483668fd08e91ad09484af00000000000000000000000000000000037bfdaa11660111ce0a9c3e18b5da74c004cb44882b1aea4173e18d3a17f04fefa3b319afaf4af9dbf3d4b9ddb2c3a00000000000000000000000000000000008f2138bf621237a286229fe762968a224358b030f6c20db58043c13727b516097b42d47781bd0f0df2b155197ca3946b21b18d883ef62084ce4bd353d7434d7e220e9cf6bd0e8d0bed1ad0a4ad94c7e000000000000000000000000000000000b4e2b058d6e77cf95be093375233e5c9c8ee0cb2a3aa93172c08faea111df81b9721a506180b7b45bdde4b58b0b7368000000000000000000000000000000000f7025cc33424a7c11eef47baef888535d938d50c0f40eb83ae86791834770e5dd95b30aebdd2c13eda3447d5730ce3b00000000000000000000000000000000088270ef05480ef8aac5c284358d8e06c3482c26279734b8513000019924cefeb396ae79f5d9bd863bdd9b22e3ac3c54000000000000000000000000000000000df75afafb138fb06bfd905c87035bc5d18c45a29267c3965131083d7e0112e10556d7693d424172a53e8d3120f0cf2aeafb6aa11296facbc13936bd2ba09a2cf9bbd9dab6ec8cc5f73d78c90b471a3000000000000000000000000000000000122fdd3c83c01c7cbe71f54d783181860e7dcf8406e3966e910f4d0ccddae3a245d6b1f94b1182d1917fd63960cd75d400000000000000000000000000000000043592e5797cc1409d6d42dacad628448799b24320acbda83f6ea9d232968efd021058f540e3bd73a7f95761efbb5fc400000000000000000000000000000000025b5a8577ec1064b5c557415a50e84c2302df97eb65860f979e5b1e261f47c0f305461681beb07e521cf03f0e21fd030000000000000000000000000000000017e86f3ffe72bcb71d46661a1537918d52e886e362d78ed756140a6b5083a4eebb5280b9eeb8a25251dec43a5cf509b13d39a61323c07f9f4656a6c5e6ba139da8175ebfb8a641de50cfa2290884662900000000000000000000000000000000122f26b4561d1f79a70bd0e401f25d50891c0fa0320579ef21aeed7c191fe1c75403a09260c3872cf74b798eb1587ebe00000000000000000000000000000000039a261d9f48b9eab6e89046f333ac328cea287993166057e9b99fa8a7d7eb3e7c34ecbb353b7427b235084f47f45d1100000000000000000000000000000000015d5e297317684bd0169c795d9dcd209452d024ef9a450c41beb0f6c7e6dc5fa0f3ae24c7cf2d7eef97bdc51788188d000000000000000000000000000000001487564f0e9d3e0d2d30ec9930a00f10093e29f2f195344f567960be323ca21231efd8528108dbee4d5ae4de3930ddedf6374d0849a4471eca96c5e715b10505c4c49664f341d04705fc688c8479cda4000000000000000000000000000000001965ac3a520c1ac39b86832ecbe226ae0474b76659076ccbb550a0daf41c40d424ceda084dd991f22cc53779085828430000000000000000000000000000000002e970a4248823049bb4339d21583fdce9540ec103d6e9530b89e39ea875b1c333f7f5f859be39baad34b374055baa770000000000000000000000000000000003460eafb3e54ec03fd5cc1d460e1359b97f5543e6231d61614c1225ab7545fae079ac8e65668b83d022031a7a54746b000000000000000000000000000000000321394863e7c70df3934d874613b7c9d6c331e59a599be593c82edb7a26eff9bee8e4befbf122240d2deb2d527bd38c0b7cb52b99abe10d1367f8d3def38221c18657a1114ceaa1c0673ab13a6e10870000000000000000000000000000000001a5eebe200ec041476457f8585cb4ccdda936cca4977d7701c44e0d4fc5d9c206682a23348013a055117028c16914400000000000000000000000000000000003519bd1dea70245e521988336eb41870599a877380c0a9eb19301f9b2caf963eb559070e23eaeefa4de0173bb1fbd8a00000000000000000000000000000000125707f5a8e26b28968dab97ef4654c315b0a118c20935e38a5a526d9ac0a0e18355d8c9f3f58c082de98691957e2d5e0000000000000000000000000000000010b58dd683f73a16d8bd5557b35b7003a761bdf7d90ef576de8acd420bc74f5219fe7f9d35667feeb3ddf1d568b56bf1f49b1fa80a321d4d100069b2c4b94cbda255d8e9f1a7f14ddf4762b76e4a386f00000000000000000000000000000000018267d8b83ca59d4efce7ee3d73f7b984f09556ea4fa5cff5997a1eeeaeb8bdc9185176d77ad0f4d86f2e429f4015350000000000000000000000000000000014114344d6b7c976cdaf2418d7f72c120c2fddcc65c3ead067482e7073e2a3a239af19f862ad247e3181b13f5236d1040000000000000000000000000000000015db961a093b248e83deea0ceeebfc3dd57c7cf8b48cd627c5c566a4f9bea30ff0ef9cab9287a0f520a72b02d9092a0c0000000000000000000000000000000015159439fbfb91d1e24af611563aee3eb498fde666a1014a9f645037995d72dca0ed5569da7ecd084208b7c228e8a2b2ad3625b0839cc1ab8c9798b2e9706ba6d7aa623f3c0ce0985bccb2ee5c05a313000000000000000000000000000000000e1780b32a7b17464cf514efc4bdb02283af396ffcf6d1ae023e07fae02becdcc3c467f89f8edc9173a71aad27b200da000000000000000000000000000000000c3e7fd95dd823338bdf3d82fd46c265a3f794d4065d83873b1aca66da5f80c5962c9dcf537fc315d024d8cab7bed89d000000000000000000000000000000000e4eb722080e24f54fac7eed4b94e7b1eedb081c3edd7aaf5433d00829929d8bdef940aedbdd7dfb0376b3ad5544d9cf00000000000000000000000000000000158c1ff057f7ffe6492097e339cc4ce56bbefd39658ad55e08d5407619d1cbea7c83b977a1583ee48897a5e9c0d9ce3e150e53fb45ba8ce5ca917010f26451220be51141fe21cfc1cc06a5557e8e7afc00000000000000000000000000000000138e8bc8cfaecba9fd1322a3c1682c9fc1286d78e5b6718da00acc69f811fe9f94c9f0dc9d80e9002c0022c6dfcf156a00000000000000000000000000000000021da679a068b2f5f473ceed588f07adc7f485003f7d2286a18c07b09b835881f4ab94c7d4ec742c33a7cf01801116fe0000000000000000000000000000000018a62c2f4a02b73f5a91f503b53332304afc9cd8769f236259789277599a203b8b304b38993835a87d7cc970ad514d2400000000000000000000000000000000179396865f859386df7c1b8fa84c4ee71c14daf695fc0841c293618e6f8c87fb56b924f3f91a273b969e8635d7f90985d69ec73df67feb970f1c7a3880ee84d948eab4d8672a6c1481d61efc6cd710020000000000000000000000000000000004a8cb437297722c0c1a9471ff083ce60ec40c908af4ebb570c87133df705e725e3209152bcff26a0d6e4602030610d3000000000000000000000000000000001832e55a9e703d727156e4677ef4f82b86c6764123c3ed1dd94ae3b46d7eed459114993968eaf8e21cf24c59d042f41d000000000000000000000000000000000f606d5ee57b188636334ad60057cec4008ace88f14ea06324edaecb26da627670b44b6ac57b9fa2717d03096010785300000000000000000000000000000000145bf70f90a9d98f56ed38b3506556a48a1340ca6161806d055d7a1382eed54e294564de7fdbf525b0012de3d25ab5c838f8acba4782dfbc02a14d4b1d7b2b0a582f9bd75642169707a475b1a7d2d7e0", + "Expected": "0000000000000000000000000000000018ca453b9d832f029ac8c7c70df846be97b530e6e42de3ba6943a7d0dc00296942f88eba6a9cc3352900ff124efaf7d90000000000000000000000000000000002e4514102aa3f772f2659ae9f1e2a91c7fb749ea590a3cea2c1a2e0f7236f71e182374cf7ebd2fa086dd921c29013910000000000000000000000000000000007c025696cdbf403494c5fc7f9a10ad0c549f84d1e06c5c4bb22f7a039486909c540776224bcdaaeb3880ae9d745dbe5000000000000000000000000000000000b5b5b70fae8b3953ee6661a0f4a1be25596839482d78710e584d3bcd93dff2b0bf4c8b20974744667e25fd8353cec0a", + "Name": "matter_g2_multiexp_57", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001265e90c564693db716f17d1a8815a8449e43b5a2d5446ca65160d864718cdfd413d5aa024e7581421c7222c29eb452b00000000000000000000000000000000133a6558baa53a2b8d239198e1dcd81af1ee46d55137177be467a99edf282edcd47b7861a3c822f9bd0df2e86aeb5dc2000000000000000000000000000000000d8287564bcedb1e57c3d74b0d484a9b475ce3f5b0322bda0e980de8891e2e8663abda99744b58032b8d7d3adddbac9500000000000000000000000000000000013cc35410d7fe07eac96abd2b35ff656e17b6b1eba2bd1d75ce5c87c5e76755ef9c2cce70f05cdec15d1bc44bf902d4cacfb05e5d10c41b06a487e9f8afa38759eeb55f0a5bc8640164bbb081c1fd2a00000000000000000000000000000000193f0cd6b4051cfd89f358cf6643528f0f042ae30ba3627d297b4fa2c2936426a9c1b65145b8192f65dfaad1f2fbc358000000000000000000000000000000000a92ca8943e64a391aa39126f093f2b530f556c1e3ea1b55bef1c264909dc93d260eec6420fb7a4e4a45f932d57951500000000000000000000000000000000005c7dc5832f744089d5fe034bc93e0bcca042ddd1b221cdd5958be86214831906ddbf82508dd91dccee467fd1625dd740000000000000000000000000000000011b11b3d24f44bcafbcb9baf62cef3f18b56ded696b73577375dae8108dcfb663d437e4cd9e44b7e6bf49741e058f8cb9a0b88d946231cc484550a87a548719f0a543c0698411f230a966cf602dc4de300000000000000000000000000000000073872ce0d74ea368df132897617aa8f941b67cf3fb395ca6c2f5bb2c551f17d68b0c6ef11e742206d6559796f06426c00000000000000000000000000000000156cc28eece7bed943c8410a44af112edd8576807e25701093eac0c9726f93da68a19c1d7b294f3ae6c84e32e7c2d5ba00000000000000000000000000000000050fe5987d5fa678be3d34c50fa6c5296f883e65ac3201c333b97ec0de00dee6187d2790c357a3f8822a174a534539a900000000000000000000000000000000177fee6e2d3909c0536acdbbdfc716f6ca19b6bfee7920a78ac9725c85114c69cd13152467e72270e35006b3c6caee8c74e3b5ff944bbbbf808f1f469a3380ee7dc37ebecdd8fcdbbd2f2561e0dcd68e000000000000000000000000000000000dd147bec9e0d1727c9d7597dea4a5b6b15c0a603dd1b586835580468148a502289fcc38194b2fccdcd8fdf0d8ec1904000000000000000000000000000000000186501fa4f3a20e80bf297e8ef1885b7d157617701839a3b524d61f35b2eb843ff0af13e253bbdef653a83e07a5871e000000000000000000000000000000000023eda2ed9d34aa253c8bf2f3b66b3c0c2551cc0e74f43dde2e429d9dea113a62572d245b44708bed79d662d9cba487000000000000000000000000000000001041cdaeb244803556e9b20db95f2a66830cbe47a68aea262865da50ab15ba658116657625318fe46fef393eeb6f3e2ec23064970a4ae4ae648a79edb193d98208418d3489e9b5b8517ebe99cc32b4d7000000000000000000000000000000000c27b1feeeb38068ee52b0fa440af2e3bcfd16601c8af983d259f2d15316b513ac3e89069bc141f02b934f2e474253ba00000000000000000000000000000000183f966cdb28f344ccae4cfda63ba6a6f29d00ab942ae7db7572cc09305e4f80c11305527b8ba38c40aae5f23165cf9400000000000000000000000000000000049cf59bbd6c26ab3e25b3cb94878271c73c0b4436573d612311feceed0f1668f4d79aad92360c1c97d60b540239ae630000000000000000000000000000000015f35eb8e4c40cb1297f7128d99b109ca75944c1943abe9158813432145a4a2a5663b55dbabfa48bfd9dd01907e1e8d3972fb60ccab83b6ce042c09ead82fea3d2cb891e21ddc5af7b5d8e334d5a3264000000000000000000000000000000000e5d9a671862733804f517dc9cae2190ef0005f26394e3161fbe771b9a486368871f4b1f10f405e45048362f437238260000000000000000000000000000000008100c6f96ae7af5fc86d9d91fbbefcc1bf5873dacaba9c3adf1b2833dd529d87f303a55e5d4098153377effd0f8114500000000000000000000000000000000010e4863a9b037d4ae6dff827a34be04c7f1627670b40e5cafb1fbca2fbf56af9ea6b24548db58e3119db64553d18cf200000000000000000000000000000000036a298ad5e8b32041a18e3f6c5847eaef20a5b63ddece41bd7dc4c4a54deb9c6d7002e6621aa01d78d64ec9991f68fbdb68c389b94c82f006fdc637696d8085b24897177d2992f504d4bcf5ff04d173000000000000000000000000000000000f62c0bad83c41887bf1ebd2644cef0577d793c2f3d67cbe43974f460a4afaf2e412fbf9ec97404e5e882ca0b23bd1a400000000000000000000000000000000191562ec9ace63ad2aae1f7fa977b9e0606e1da9775a978b2caafada4f6b3d9104562f2055fe037cd06df6093123a08e00000000000000000000000000000000156702c3feef1baf5ba202a25b9dfd5c1fc620e837501b0c5bcb85ec8b6e3e92bad1fc842bd1a0dac363e4bdf0fac87c0000000000000000000000000000000013a4b7e869ed9bdbf9671a5d8ca9145a2e97b6885d2a93b33f378e649e0e576be65bfe849119381057337315363bab2f4510c100005f2306f4b474d3843b4a79d04f0171afc5c66df70f631b0481dd330000000000000000000000000000000000a4b273438168494f0db235f535bf31893bb70f4119dc4741aa3c5e63e93b9a8bc001faaca10e37f36e130ef53853900000000000000000000000000000000010936551b148e16249dd934fcc83dee55279495c2a70d46dfc45945a69549657c3dd7cce00d8136e28d64b0c800344cd00000000000000000000000000000000115c053ac0b68573c3abd5f047b8fcd897e3d514945c5fe6efebf1921563d0079eadf32f7428ecb703d9163bc7811ebf00000000000000000000000000000000162e86af01daf552589b62be849e6176d74fa5da9b214a5cf2285802dbc44f346eaee5cc3d93a085740f74cf7e1b17e1dc682a2be4d67852d119795988c52230d8273648cc176ddc012a4b4da5a8636b000000000000000000000000000000000d77cb5045f7d4578621c76bf5b3db076661c72174508279280de3e92f0aa57057ab50180f0f908561a87d412636d964000000000000000000000000000000001853f9cdccf5e6e4b87231b153ea5257f52ff10dcb24cbaaaa95426d0231dbb355f9c47475d125ec1079b9bf26b23b560000000000000000000000000000000000fab825e06c2329a19de853a05c4bc65f16fa047eadba8e79607bb31b84ed6541b00f7f14b15687d67cb4cae0ef9c600000000000000000000000000000000005deaebb5f31a62fc0bc1af13da63d0af3c716df8c9bf00f1e831af5882b88974c49e8d35db2545747c85ac35156bb668af6b200fc8e6a57a954226d9a0254c8bcbbc55fd6c3db5cf8532323d4c50b4b0000000000000000000000000000000016faa5e91048badedcb33e83684d2670051c82b7a1d0ead0e28f4dddccb141a8ed1fa7606e4b6a3a893c55344263eb4400000000000000000000000000000000019b2c8758abe5d339afade4ad0c1d44d651f185f8a0030b81b136d5972510b353d43cef616ce04827d56255419831a400000000000000000000000000000000124b1e87f343a890fd690e384cd156da57f4f0fc5b1ca99c73bb0571332ec4c12d3ebe955e3ae792efadc1d5c0c67a410000000000000000000000000000000014cef10e4a9a41bf117aacd2fca5f1364a46b0c4aa0723a369fc6ede09dc76dcd8cb67fdf87ac49bd4bd9981a2e589647e2036f73e8cd5e42ad86914e192dd969465aed0c3b752986b84a0c2444c90b80000000000000000000000000000000002862fd5f38154dd452f65de0d3c1d54403cdd2a397ef416fb92e570913c543d3368a95fa114fcf48c3bb4b68895ba33000000000000000000000000000000000e7185443e5dbb656fcb9ed100949f8f7052ee2cdcba4f5c687a65a1b45bf66ede5c60b0c04845b9a870e004f8af8450000000000000000000000000000000001817be6d13cf2a67225b2eaf073e9f1614f3bd32cf5572766ace4a91f6b6be56f498b989f1c3dd3dbc9a819c029431dc0000000000000000000000000000000001cf41fe428b088a17b8ea93a653677705d5c024db530b8300752c6b100f2abe4c46dfc24afdaa2b3d53cd8ce0df1b6a70cd5c1545e76027c389645da1089fa88f675b5b6ef9217b584d7202b797f8520000000000000000000000000000000002eed272430ca3176988272e6157a18df7151bbfed5b90979752a02619ef467af8083208dcc9c7d926490b1283baa21f000000000000000000000000000000000a644f6137bde232c3a909b742d30bba096ef88b711ef100144276d0944487f9ebe8331483978a47c07d3a42c441310900000000000000000000000000000000042c67cdc10efa8301ae95d6d4f21cf152f04b235bad2dc5a61724cba64083f690b3158676ee6ef10f52dcc7061f7c7d0000000000000000000000000000000007018d0aed5abb744cb998f84140331fb2cef8d9e09c76176def48a85370c6247c2ac6fc726eea891b2041ad5edca7f0244041bcfc21ede8023ad80b6d4af4b2777c0204ca5f61854e6da34ff5e1145f00000000000000000000000000000000141c0edc966b7c845d4e68272c6a71f8ffb7fd8d56b7cabcd556a98422f830d7a81d123d701ce1479e84047328ac1f3100000000000000000000000000000000105c1164d721b6dfb05b6b69955b2f25db0e9fdb58600a3229dd516076087aaec05b837ade68bd2a19917eee7b9a22bb000000000000000000000000000000000da3dd97e693948fd6955ae52d493b3a2d2896dd4ad00a0b549d4d392e81593472e4f9435a8b7977f3d58e324c5b9af800000000000000000000000000000000068c531ddb26a2299cc584b5bbfb0235fd774a2447134c06e7de8b94993804958bbf1ee80728cc6db647e8a244462372ad7572da641373708bef008057aa5af1cc76ccb882bacc50a77b37d7047b1bf3000000000000000000000000000000001881432f4742dbe41bf774930413c98d49a781a48d6c64ee1a18f3076bc6c0e1214f92d5bc84ac65ee1c586c437d697300000000000000000000000000000000067e0a95f3eb826f3efeedc1882ecfa30b8b96c92f626aa324f4044ee74531fbfd50a221b1b0e0182d759d149d51427d00000000000000000000000000000000173f5be7098b756ea84f030e374973feb4f8811118ea6673db1db75ec6909303e571ec5a1d55a6bddf32fc80480cf103000000000000000000000000000000000f28540976a6ddb277df5951fe58e7310861af837cf31fe31c24f7b979f72ef1549372e7ea1ced15b655d24293dade7854b51c78093cafcb57c4c1f172d08257c379a9caeb5b5478cacb4887119a08c600000000000000000000000000000000188f296e218719bb9cabefd4f33d5728a1d280bc59c3d826a0f3b5338f92e6544a4cf36f1a493458e0adb246c01a415a0000000000000000000000000000000007dc8e4222c7ba78190a8e72ec7e6980e2581f51a8d6c41669b6fc9e16d50a2bf4d422af73398e76b2f39705eaf8a6da000000000000000000000000000000000b25a44523323301cc01b50d58726768c2cf61e691203dd34a0ce8d58fe4f72c1c33abfb2a56e0425fa9b7e2fe48e870000000000000000000000000000000000c6f11ea269d9061d2f462ac37401def1b2b28c47b84344d04d1f026add3237d99a586e3fcbae347a4ecb5646c8c569fae3bbf55186a89740af4da6c073d8c0e331542a2c972a49dd3bf65261dda6e49000000000000000000000000000000000c41a02e937f8cacc0be5d9f2d9fff0d6d4302fd252f32145974206463854b3a7d09b3b147cdf2d7536e970dc13613ab0000000000000000000000000000000005f9367f4e31f7e4d6e21664ac13d55f501f5368c1ca77fc439db60e1846861e6c4c3c44909469f88e02cd973499992300000000000000000000000000000000131fe6df7fff97f132bfcba1d2599a862c1feb514a05b4b7b0bccf49e00aaad043edae9346bf726e2eee498dbadf2067000000000000000000000000000000000e59044f0950a741da3881282697f4a1a522b026e493f6009227da4c0a963de622d5e421c30e0023f4118c9a036274f859b43915b15c509ab8930979312dea2ec9cfa9f679b004ee526aa5dbb25759a4", + "Expected": "00000000000000000000000000000000144433ad3afca0a9581e7e87220a4944e26ef2eef6b887ce77d2a2559ced058e7349b36efa66c492cc75b014b3448ef9000000000000000000000000000000000267b90e45d7001edae01fb198d16dd37c43cadcd2ca87bd7cd1f0f65a95148144f5ddfe75d344eb4573c1376aa2728600000000000000000000000000000000050ade28b09b0394b08d128c089808021e4c65dac49d9fb45efb93792a4faf210230b650fc3ce810fb8d11947e9af5060000000000000000000000000000000003b1d7dd7c6d944d16724fd1bbfe0f53b6b50a70e133dc5998c82b51f817f489bfe1e0c361be36fa41f5af7c1577f2ea", + "Name": "matter_g2_multiexp_58", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a081f037738b0d812da43a907e7c624e331108ffb72104d82725b9c14dec8449f5ba0e8c1a3f1379cad2c3e7aa99f70000000000000000000000000000000000937fb5d8b3c258b7b28555fb59620f114816f0fad46818a5f100bf7dc3332a03d285eda18e31e4047cb2606bc53b20c000000000000000000000000000000001574e355b7570043bf36ecd52f9c4d9ff556146d81a1e9d088444805db9b3b678fb55774865ad34d21022afea2c154590000000000000000000000000000000009f70a5cc658cdab280ed65e13aaa319049b9534a222217a08168047ee2491f25a9d2620c7343a6426bc54a0700bdb4fa53d5989b63ee5f157cc44c684ccc7cb4c74338b12fbfb534ea33db341fa6b460000000000000000000000000000000015a76e89c8938b8a27e4857aaae8c942371b6979605adf774827e9438ef739428fc53b65d32e4e152cbc6a4de42b8bf30000000000000000000000000000000019494030ae0507eeff20b69b4913596c1b9ea6927157945c8295e273707013ef1f2cd08c058f6b469a6c99ad73acc28700000000000000000000000000000000122ea7ac21a27ca7c4b00207538bf561f688429999332c45de7545046acbd6d9e96d31f5f6a00595eeb212918a28d2920000000000000000000000000000000018b023e7da67cb8d9159746bf700f9e151fa60ba8f5a28b3739de005822929cd28c49b9dbb4ca8a10729dd24771730ff4d840680013af06920dd06bacc0ce95cf0cf79e8ccc0b10027f2d28c1d0049980000000000000000000000000000000007811c759634904765029e955c3deca648fba6a9da6433b50a6d2086a59e65811d52d41ed8ff2e9bd63a4c0828bc702c00000000000000000000000000000000182c86cddf5e20697462c829f41c7b49e7976880311b01ed4d12d7174340799f19db0f295263a2617182bfd1b49e0d1b0000000000000000000000000000000011824bc20bd1b27876b4f48aa8fe3063f826b6b2c3dd777fb8999a25d9139f218f6f288955274884ce96ef2dc6d34d120000000000000000000000000000000000dd310d5e141e4eb13380db828caf74f62878959b6b2df998bebf9306965f723fcd4dae7c25bf2f79ece3e8e9b92de61b67d661ebc9008669bb4e5cffef81a32baabd71667a72f1d202ced823f09c740000000000000000000000000000000005667d8c4f8dc3f4aa0021d1026a1d0dd0bc3576c49339262e84d20198fffe33a389d28ab1d782e9d19af761a2f097b40000000000000000000000000000000002803d5ad6393d7072e149f1f2ebf70cd8961ba3bbefd648916a8ac5a5eb893b71bb6015e201dc241537ad5890024239000000000000000000000000000000000122e1d0e0859b04143f23c4d2d2ffec09ca2ce5eaa9429dd0c047032d180bcdb10c106071d9f9701c006e5eb8ef88130000000000000000000000000000000008347a7bdb3b4f381b58ed3a128134c09563b345380ec948943e738347de5b5737540b57c28d00b9d060c60942446617ee495199ebdebda02179432d42d5d9c76eead4d4993cd09a93d46cac997716a5000000000000000000000000000000000b26aaa46a279c482fb395ddb84d5b4c9c70102c336cd565ca9eecf62cb96f59f634adf46af748826590fe65beea752b0000000000000000000000000000000012cc63256a9f73f450e86ee38c54ea78baa5bf87d3bc01320f7fbd85bf11e19f75d787b9b12b8f2c7634368a9023de880000000000000000000000000000000006392fe611835f6fd50229725d71d435f704f78cabd1b5569e1c5a89d4b11f911f0e34ec034369f972a80eb407938b97000000000000000000000000000000000f4ff2d6a991fde9093000d7bd9cecb289383d259346d83bc9bf5389d4c39c82a0e1d7deb84b90ef370e0a19fce28d2b3e038e473d6f965751ebc5f69eea6f37be88cf001de0c4e4b700823d8326f17500000000000000000000000000000000193752c40fa0f466f7c8bd26658f133d0283d2ac3b02eadd27b3e9681329307f91a1512fbc53e537f9e1025a3d68a7ca000000000000000000000000000000001106d751c9e1637f00e51e0be856405e6b69421d81bb30b9b8718cbc9cfdc36c80d2848bab0d5246da84f10b478fe48e000000000000000000000000000000000827a83f28678c4e39c4963e95c2404a70691885788e5457e149c0c45d4e8c74eef55223ed15cd75fad9f7209a6ecaee00000000000000000000000000000000072667f02b781c8e0a75d0ed8f3d55e668ddcc8c61937c80653e240c3a744c961055c782ca41b15211c0f1e1ba800bf5ab2af2590309c9b9177e4f6f0fa06339fa720cf1c9fc7c001785d7145a3c9030000000000000000000000000000000001419629aaf0baf779feca264d0d9846b987506125b0049ebc8b307c4e3ffe00da1284a94a012bfd60456a4a937b2e0e000000000000000000000000000000000119a801bd0a5a1c1b25cebbbcccc7d2bed9baa4995483f4ae94121a8c6cd0c3f90a26234f51590d66cc38b8bef9020d3000000000000000000000000000000001125bd15fd9814ddd15be0997a6961b6f1c05ce7944514371f10c8e5bde271c4b936d6537d91ebed740fbefe6b281a0d000000000000000000000000000000000982a2904a524b1fafc50d540506b8fb07c3b4978310bf3cf53ce570b1b05e746981bcfc06d59a78d170573b09347f3fc9551f12084ad7d4ce346f841fef785d644821b5c2d3c8db3145fc26e65666bc000000000000000000000000000000000b1da333e508ec6b0329747fef35cb926d922091d4a45eab7cb5358f20496c66e17e46874ed9600cf4252432c29aeb07000000000000000000000000000000000c757daad8f3ed7dfd64782548eedfe904f7ef3bcc11eefc4781fb37159d07825a4c9f3fdf9cb3d8f3944277bf25f88c0000000000000000000000000000000011160e21503d6fd61a2ca0212a7d48317186f259a987a17cc3eb04a6d9251736e4a66b739a8f3095684b7d91ce6f79730000000000000000000000000000000007440ec0f9197352a3148f9bb3d3dba9b1d5add903e48b50ef3f6879859b22ea0e31b46ea4ce566930d8853520abdd14ef5823541696ecb88d0c71e00a15282c40d4826220a202be09c47fd6891b93ba00000000000000000000000000000000070ffa4d522df8b9f62aaf36132bb1b857e177280a7b6d3af6bfc79b73ad3848241df18ca7f8993ae3d67005ead9264d000000000000000000000000000000000e32b65bf035bcb11f86c60a334622d2367797d0226761b58a7db8c7324fc4bb498a558eec509c2326fbd0e7bb8d3d19000000000000000000000000000000000dd291a760393c6e962818986727e5ca5d46544dc47eb49dd828c6f74caf0599e88c4293881714c425b0697944faa861000000000000000000000000000000000f7ead0be081467f3371ab92c249cea73dedfefcb6aa16a162c06e30605e104844c3dd194b4a89ad5230f596bef64f19e32d695dd02323d40ac1eb9452cc53376ef941237563b1ee380c9824a565008d000000000000000000000000000000000ca545b53836899e507880329799e4c1a1acc17275f5d71d87b9e41ccd7a090da854f9936254448c988ec772a813bb6e0000000000000000000000000000000016c9b03fd01394560497d6a03add63c034f96744d96a13a4ec92d28719018d1eba1465e4332e53f37f2aec4d93d4ab7f0000000000000000000000000000000007019f5201dce326d5a6a1ebecf3fe50e22335593bc9d3e62256351c591f0a1a577d916055d79c0b4abe191b6b8011fe0000000000000000000000000000000017acbe72fe30c386e463f3e9b35a474b902f6712b30af88ef340e6fc6ec0fe2e606c7e26432c2a4de33a12e35ce41868f5e23ff8acf88d18e53bb31476f10fef288e20e818431f9f0d2ffe1265e8ea8200000000000000000000000000000000057f856ae648279f2b6dd17584e1388e4dfdc9e870db48ee6ef5f58389ccd4ba17e074b79ae12b728c59e2f91bac5709000000000000000000000000000000000e0f39f4beddbf05fd700458448067b52c11e963b22603f10d697d6b6286b1449b1663e032bf7bea48f2051d8ded923f000000000000000000000000000000000022cfadc1dc399ef5f12afe1349d9274cd595a9ab6ef7ffdd68f8bd2d170a4a783ce0a7303878d809a16bb8073d79860000000000000000000000000000000007e301565124eb66d59a70897f2ac356e7b0c1bfd4e3b57e508ba0cb5c9c881f9de86b91fd5133aa2977c8e81138d66971927817449ba5f053d0ed1e567b53b1179c6b62a554c8be6764d7ce203f74e4000000000000000000000000000000000edf3fdbfb03bc07871079aa4aade538a97e1619b54d0692a7f5f73d7fbc8abbf680ea3a99325e03c0501ef174deedd1000000000000000000000000000000000b8c1b5d3c926d7da6e0583f67d981af5286a04429e857b0aa4b1120604f9c8c93f04e763da169137416dc9ec4839a910000000000000000000000000000000006ca2aa4c7109f043da9cd90bc801404685db802eb8bc925d9d098e7af3d9f95ca490790b2b1c77995c050aaebb935db0000000000000000000000000000000001f40a2090b63f94f93e8b61b5ba1ac62a37548342ad81a9bd99ce8339435a7d7477c3b9cee9b531a1ecdc85a72041555ce5d6f0e44a20d0a0e2f1cc523455b001dbeef772d84b2599daec66b285027f00000000000000000000000000000000021464dded318cfa86db1e4329f302bbeca7095d910c4260799cd2a60ebb20e60152868e67a48b86f44000f267d11c33000000000000000000000000000000000ae45fa46fc8e043c3df99bc0d87ffc5867208fde0eaeda782230341a8624b101346f35fa24e1dd67ab200f5d6fbc8a7000000000000000000000000000000000795b9afedbb128a46c1eb25c52a71375903adf7d3520535372d9af5023dadb1dfefdcc0cb546e9d218890123252946d000000000000000000000000000000001852511855bb368cec51c54d95b430259f05dba6bae53b5c42d69f31371c30cb611037fbd81393a896cbdb6240114549d37f7bca1a59f65982294755ddf8af7f1c953b6e482fee854e0d89e9b269e0e900000000000000000000000000000000113b883c6bc41b0673145bfeccda414af45efe5710f436977712e7227f38911cbae851dbe03928f38e310033458eed72000000000000000000000000000000000853e32773ef1f95a3936aacbca50cdd5eed3d08dc467d7ee834487e445fbdaeddb0df394bd0c91fdb06d2883c4dadd60000000000000000000000000000000013a7f9cdebb2ec37fad172d31a717f4b538a8ee74432c5a5e6410460eaaa3b5f24d223b76bde4277097e93087b7136330000000000000000000000000000000003d6f141b56e1e2e400fe821524017cd972678a7d64f660c313e6a8910b72b5ac04328d45945077aa2946931c8dbd11706d0535e3728b9e358d9ea82df4f1137db7a02f79c0cd0dd672e24092bf7f6b40000000000000000000000000000000016adbeb3530f6b451d870b2d8292a01143986cd9890c79a64764383575771b8608ea61beb2de87bc034d3b8a085958be000000000000000000000000000000001125d7cf83239e4341c286fe0c8739e7013b234814b26a079ffbffa329ee4705da81fd12f34f49d821690a11b8f83c5e0000000000000000000000000000000005873dc5c0baf0f3297d884ac7b652c749abd0405b96ba60fe396efa179a79fa55be76924b0690c9a528c605ad4f9e120000000000000000000000000000000000fceec23f479c72e0fea0d10d3394d7121bf1673250cf1ebe72eca60af82f232fbee342e2c8705434394d4e519fbb40f56d6810620e8da932c202628c2fa9f0a9f3fda3aa07c262924aa51685d2c9af0000000000000000000000000000000005ec966cfa28e105f3496f977a2f046fb206a190fce1a6062df0fa1946f274cde9f6fa8a71089af8cc2fbc2b60746cf40000000000000000000000000000000013c77ab66fa92a2411391d366a331a40accd120db1c6a656bdd92858826fcbded296293c13ee189ea3f34635de56732c00000000000000000000000000000000162795b6feaf6a63e6ea2d34f2bff2a4985ad26463b8fac69f8525eb0a005bd377fe7ff4aae820d361592d2d88f98f5c00000000000000000000000000000000044c9d5d3bc0d99693f5a0605ed467cca8b5dc7c7093294d14015b59bfd8ac6bd479b73ed52fd30d8bd891ed971912c571e7f672ad398f5c02c989b475d12ce86e6e242d36784308e56178f2a6a1517c", + "Expected": "000000000000000000000000000000000c3bed2f51a60f9afa6655853ec2f0e9d46bdc1277bfedffc468d9f36cfc7ad9e70365fecc84a5a40d863dcaadabf22a0000000000000000000000000000000008c5894a4f93b02fa1deda8b556798fb7d71f53046ccc305588bfc00b68bdfc34b3f0bf154ce7cb50c9536ad45e65f300000000000000000000000000000000003699501ebb9698e98dc998fcdac54dff895457d2e4e0a0e2d65d275b5798dc016e921bf1f65fec0f284a563aee66ca70000000000000000000000000000000010389c73de7f6d860c972c1f09dd24137c898e92935c45c10565ef3da3406cf521647ef80688f6e799eef4879ca9a6e8", + "Name": "matter_g2_multiexp_59", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000114b9c33bd09899c684e81a5a4e620eefa4e620c01c391a4df5caa75be462ec7ab027a9ae2c31d6643c48e3d75b6ced6000000000000000000000000000000001925084d2a1f537329e23c77b8a820c385ec5e12e4a145888882ec611e99b05b789d79bcab48326db4424309c24d1688000000000000000000000000000000000a1dc78c25cd16211a38bd0c70d24c84da1b83adb219e1b9c06fe6a6669d6e0281a155b4cec32d32751fff653aeef1990000000000000000000000000000000001daa74f19cce1086a87232464ba903938465da5e3e1f9ddc05a4b4dc13f1026e1b07af7254d515d2ad6960ea62dca1f77f9a79850b2fd5a281b22f52de085f12bd34e56808496e1c1388804f534d2da0000000000000000000000000000000018810adf0cc793c21726e9a27b7c558aa16b81af73f22629c478d293208a107fbfed4511d9cbcc25fbc2826bf004e7dc000000000000000000000000000000000356b25cbc7cf65107438125c930dff24b7786cbd7eb744d7f27967619d5cc02799451ac8814782eaf9aa331e6f8dbe7000000000000000000000000000000001164ab32ddbeb11c2c8baf7f311ffb01bcc367395bc7ecbe5642d344a8e879c74a554b3f9e4b6ed7db4ea0f872cf96740000000000000000000000000000000017704b1dfb111807d1f5d90c370a5b2968008a5ee9fd72262b6543c93fa168285c04931198f5195f1abca648722ebdc5630c1fdad9338fa5236f817bada168a737dd3685b327fb59d8a37329920af4cb0000000000000000000000000000000000a336a04a8fd8e18dd9a582da897016983d9beb0fdbcea6c88b7c0640620be52bff32afbe700599e3c08669c457b760000000000000000000000000000000001765fe4faeeb13fc2c007682c031ea7ff2899090e16a9a11959c5c3ae7881a1dd2c6d2b7f5f708a92349a2b0de4b92d5000000000000000000000000000000000e7c57db660133ebeadc2cb2054ab4ed16355466932685d4d11038e1e1f47b0349b68bc4e918dd48ef8e1c5d7cc53f7800000000000000000000000000000000169b629ddd7add588b91d9866a750570dec58662e43409031a5e25f1b2913c5c5a7a7cf666953c99835431f091ab1b140969599bed4899c3c47e1d4081027203c73233536cc6e45aaa78a4f1150a51620000000000000000000000000000000017d03e9855f3bbee719a15208ae24324ebf1879972ac134b027c9e03444a5736863bc55604158e81b38c7fd78ba4bee7000000000000000000000000000000000468f7c5478cc0faab7098dbcc455bf18525b56272c2d02cc1febc1825579a613edc6b455764ffc71c903a0704224a4c00000000000000000000000000000000067104ba5366e7e11bd4d516565d9cdd93d4390f2af3c1ef2ea3b1e84ee8e5c0e0fd8ac11ec9d2553e4cc13b277d473e0000000000000000000000000000000012e10495ba15b29c669cb9683b2fc7a45fe7ddba743b4a39677fbf85aa738480eb9da967eee69b02ef14137e102e240eddd438de35651328de7183dd38820ea2983488ba31d401094e59cacfcd1d031900000000000000000000000000000000078f8c17427847ddaa1665d206866231a5f36d3a7b4e8fa13910161566163006b5aa5d9696f423d0c44195de65326f21000000000000000000000000000000001613c465b65940f43c61b5e3c93313ae49d92728518d9cdfc57b49d6924479b70e281e724e04fa5f165b5999f1c1ed3100000000000000000000000000000000031741b6830c16d730619457d42767a51037fb4118e00bfd6cfcd8baea35ae76a5159bf1f4639fc2951f0b57446110e70000000000000000000000000000000011a618ffbafe4bad0a435d04084233495e5f7fbeaeb66d0d49a8177f562329b52a5ed4fdc680b791f273a7b0d3d4b349191f2b2cc76d848e456d07c84c0826a8861981dc84bdc671bc9b5882d387a41a00000000000000000000000000000000043c09eea638e524661c60ae3704fd1c18c46443ae134a0ab7b9a98cd398377febd9026c28b3e1e50de98766aaf0083600000000000000000000000000000000105918aa1476cf52f91b9ddb7c23ac18af3bd5269dbafc369713687010720affed6b12af9414cecd521cf0c7f5416c350000000000000000000000000000000019ab4a3eca904a15782f560bbbc8819dc09275f1f6d7c3b8e98aa0a96ec33dcb528284636b0f42ad0d503489d17161ff000000000000000000000000000000000a2abada18e79c548d5829991a65491ebcfe0e1a2c89a1e05f06a0ecd197797c5ffea0ae90b61f54c6b3fc844e0eb3ddaa76094782d0c06f2080d699b81aa04a60891046e0053d2fa757c7029df8f848000000000000000000000000000000000d457cb2c77acc8ba4b19ade0c724a2b6b0966ecfbbec8cbea745439b9bb7f3dde2febf9fcd6c5e6139fd7175e57b1720000000000000000000000000000000003154466283addb0d0b5d86a9633f8300960cbe8bf6a1405a3a040472542e9da63fd4f79a43d641a47c2b69a31298d3c0000000000000000000000000000000006599794823797f8ccea9daf0459b9d26e0d207f5fb95383c6b61eba38516b272e8ae6ddff2a9fa791e69c0eb25f3e470000000000000000000000000000000018be316bbe0416ad7deced1486d4e31490f5dc7e379c17542b7d3e9dc77bbae9c992e657c884db320cd51c2141a4abd2049a751a406657dacceb3721461417571a0104e11c1e00805becf71ee77eadf10000000000000000000000000000000007ba1ec5293d169b88ca4d2d92eacd51f0b8cffdb403632ea8ffdebc37f3997baf736771231335d12717cb45b51be31a0000000000000000000000000000000013505cc24222fb2ba9e25f5f3497653462f5b10bdd0dc88f9b16d5643a99ddd4a7749dfa6b566f41cd2da7c2b1ae93d2000000000000000000000000000000001465fdced698ca76d5faaa7e4faf1260cd5c4fd2939b16d3593e3588c92de3d003540ec989be9632fdba4ecae889ef180000000000000000000000000000000013a20cecd5e8f161ac70e40b8e9ca4c23e2b267690a3abea941c293b03acbbe4fc68a1e7b6d35b79ac46f65edde73a3e0502d56084d1be7179fb735e233978a5a3c2756d780cc0ea6a8aa92b1d1f7c4f000000000000000000000000000000001936436783f02f3a5307bfc0bd8c0a00ed8013508a440d040ed4f45b37a4e89986102964a328e93fabde6d9dc7ca424900000000000000000000000000000000000f16408b869303181b4b4877b554353b26a7b4750b711f3c41cc4b6682b2113cc772cf9bfcd0cf60e59ef29a5d0814000000000000000000000000000000000d5880e2ef94663ead736687ee725f7ce98fdc594230c1ac9e8345d39754bd616e261076aa5362776a6026129bff105c0000000000000000000000000000000006865ce3cdb5081e86535beb990d95ec3d75f67c7e881306607e4876c42714d627f8d548849aece4382d1c8f2b693bdc9787a6720b8db1b4f0e1d535833ed20b519a0e4d2e9fef75022aafef523713750000000000000000000000000000000016d941b6a0dc023fa2699c836b74e16c31b4cd51538f73fbb271d163519d4de1cb0f6ec2f8efde22c74ffb532c576b16000000000000000000000000000000000d10a7bfe9541a7b22d455f1b68cfe2422a83a070d93476aa0844670f02aecb36e9f41b9d66e8e9d0d67c0ba85c99f44000000000000000000000000000000000d7873f96d45fa8c9ba9cb4913a7b01c8e38876b6bb2a05506d23df0491bcffb42983ef663db85bc3cf755f476291a79000000000000000000000000000000000c22fdb83f9991c85b3577d1ed5a171f28460d79dbc6167b0c30b200235c512f999066eb1fa449115aab55128f8f2dde10b47b662e8cc8dd005bdc81dc6d98d0eb98f86b46c0c8f24481af9120e84a820000000000000000000000000000000010faf9cb9d0fcb487c9e86a2d2123105baa8691d82ebae8f5bb7d5ae7b7d8154837120eea86dfcd35ea5482a7ebf7f8a0000000000000000000000000000000014e40640eb6e8e38651a2eac05165f6cf5e0178b3711f34828766ff9db951e1348f0cdc652a78840dc24ada8b1c835c600000000000000000000000000000000129db7482ec62873591018a8399a8c5e4bf00e8bd9dd78dfa3d0b4cd1d93ce5ec7531e56d58b7a1cb3e58f062f6895ee000000000000000000000000000000000d8db3b54b6e71497faed107b31f5e44f328780cf01c62cb5ca00f99f10385ebb22a367cc89505640d1106a9ceec98c4072460e3c5349c8fec9944dc99762625262e84c70f10d0a92077a351335127470000000000000000000000000000000011ae9bc3ce04df2add17e57f260a72f88f19a1e44b0b074cccb7fd547035038d19e5f2228db46843343a69823decda370000000000000000000000000000000015ea64b6147ef76212bb5223d6d5ab9ca866799365683720866d8ce1117f60bd552a8e9981c095894258ca3c1bb5150500000000000000000000000000000000173bd5cb455b80b78951b15180fa7f8fb4725c1a12e5c53df1b9b31b45a29083e66c7116741d9aa93448c81b5e6014610000000000000000000000000000000007eba059855ab058c2066c643ef5268c864d09ec9962537d65a1686322c374eb5ab8eba4c4260ad0919dc18b4289a694f3177c4d865caebf1ef6565bc85e0b0bd51365a6f321e26b97cce887bc3f44d6000000000000000000000000000000001598471460ae082c2e2568602c99923193c913b9e803cbb7a4503ceff369e8c4bb3a19ad245c08192e12a2e9b3e75c4e0000000000000000000000000000000013b289bec9d97c529382388f7037749c10a64f915746d23d8f37e15db9dcb173b3a6d00bf45e67b8c70959472148321d00000000000000000000000000000000094a99f9b031a51b7d54f7b8865621b204c85d23fd66fe8ce007f0b852f8b5b895010745b2fc469abb670e38fbc41e50000000000000000000000000000000000e36daddab2134f65696ede36c50f90f9a1c56165e09243cd56fd3d9902d3c78cd85e7028f6dd466f6a8655da62ecefd393654ef7ad8687c8878c55a8240ae9df04805d3e2f194e960d5e498ae3ca17700000000000000000000000000000000050a818ce247367e8b57673d205d6bff8c650bcab7bf794dd32494669eff865fd4e05d7b4d35eb579eb475a3a0320ff80000000000000000000000000000000017ae5d612bdd46e1351dd1367c08c16ceb002a29832eba75e48d4c82e364f17c58525ee653a0940955b874da6a5bcfcf000000000000000000000000000000000eb2075367b42a0b3dfa30799ce1ab327eb583316d15b8cae21b716e6c7fd8cab96c67bc39e353f5e842e74995356c070000000000000000000000000000000018ca4b533da1baab37f05afc3ae0afe976e4f4530401d2f97176f5c73de3eaa75b8a34e8c6c0543ca0a08aeed28e478bdb9f942124a381b150f00a59e4579d0a2b7b728f62715633288fd03d01dd12dd000000000000000000000000000000000b3f4bfec920018663bb39c5520491da5c538f82138f03390c768e088bbb2880287196af937f1f70e215edd49d1872ea000000000000000000000000000000000037e7607a60cf235d8e4ecbe69d378dc02f0a8e40b7f23745e15a73fdcfc971cc8707d55a8c5b91d9a5f42c2f49c455000000000000000000000000000000000467df75c2703ccff1a01fa5bdebde210b61b5f3fa33e76e55be5dc953f4758c3a2c499cbd42b256ff5a2005949d9bbf00000000000000000000000000000000010d574c69050ce9e909dc23a76e9a2106870e8d8ce2a0e30d42cbfeea56ce3167535a9af1d453d4d8e6a450eff870638e6eb65778a328cf899f66581ac7a4a89e0e824c15573bc68c02cdaad89cdf24000000000000000000000000000000000907fb825f247c85d93fca36dcede9c22a409fa82fcf540593e8247c17875a1385fe009f0ff43853c404f6c96e2809ce0000000000000000000000000000000012bff10bd4162207870f6363342f2541804adc6a4e3f7b8be51d361be34def7a85fb39357c85a4e8df670fe39233bed00000000000000000000000000000000014f7e61ccd52bbf6d050c9d506751e03c8771b320872179a9f0161ac5736edc13bc133bda6239abba1ae09bd6c16f0c3000000000000000000000000000000000ca78624563584f8929d72668da70218a2da12b42c4b894108e6b103201372554fdd6b3bbbf2d94a9d0cf4053eb07d460940e3620c59504062e4e98b5d4c8cbccdb017c47a094d06253743c29465731c", + "Expected": "000000000000000000000000000000000de8e87899b294575392d523ff6e153a7c2038302ac74574bfae7fb222558f2b4c9556be1bc2757b83ebc180ae710187000000000000000000000000000000001881c7688debe3ff795788c90397c3fe3d6d9f56da9221778d7b12f5a54d8c0a00e1a8d4bb9c0b1d578dff862516b5dc0000000000000000000000000000000014cdfdffbb956a20d8521ccdb214adab14975d22ffbac107b2c15f42e97bb823c6a3945a5b299d3226e2044e64f8d1ed000000000000000000000000000000000eb769b301cb7c0c976623badda4db8ccb18dc7322472b5fdb969393d5d82b3ce94bfa59dae06ece424bfcb88e24207a", + "Name": "matter_g2_multiexp_60", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000164227fbb787b2d47ceea93faf1cf7890f48107ffae3628192235aa57658d9a2861db13fec0e58c347571c2ab0cd11ea0000000000000000000000000000000015478417b6758826b1d6fe0c562d43451e289dd50de31ef365ec70faf961ebb65b510c4788b6c7da2dda9cf56d3c8a74000000000000000000000000000000000f9e50d802ca8cbf80caec6489fbb24a2761db1245d9f7e820e6747bdd0855902ff211c427c00157ed9b1bffdf39eea900000000000000000000000000000000128f69ef5dbea5f80dbb9558a25f133b9ad77492250e0654f8fa5b55266f2fd26826a5c373afcd74990ebf768d6d8fd20f2f697ef6783390724e04b81d0e18dde6533eea9f72c1e10bc72c7b954659660000000000000000000000000000000005f7cfb31492dacae51caf4036d99d917fa13b0d2353bbce4e6547ea744b3a49b162deac2f107149ebc2f79e74828f720000000000000000000000000000000015ed4627efa9b318cbb52f518b734327f5d1cfbb097adc6184c5034620504181a298ac7e52759586dae2e107f121a9b600000000000000000000000000000000023e832638849599d9d7854d3ae18648e67e8938ebf606a7c86c3a7ea21cab8d4dd5d9cda5c482e05d351ea3ccd854710000000000000000000000000000000001849665396bc36d0301f4c9adbce81fd2f2d0c7f89925487d91a25c6bd0730ce31678694a319666cf42162608ef15a834680b934e67bd7518f0d6a3a809dc7faf845eb71d0247291d61053d5cbe0ba20000000000000000000000000000000012c9b607e29e35f260f3c4617b4217d5dbc6953eaeffaaa903710195e080d593972e7794897eb176aae3539401a483b10000000000000000000000000000000019cdae8d1d9035d1fc4b4db09e7da3c20d3b8777523155d407cc6565a71a6c951eca609d328ddbb165c2b5a3e6b081da0000000000000000000000000000000009c4629b67c1c50e5fcf316136bc645e9e62ffadac8495c084f97e32b0a3990b3b1019261f78de576ff7ffc89e36e2af00000000000000000000000000000000070a49e8892c5b523f5914e2341dde63127b694eef556de6dcff603da109a53b342363d9a854dda3d2833e25afd5b57eefc024dbceb522c02b88810ada9a814bfd085fb63d570663a64bc0658e5ad0220000000000000000000000000000000018d3c9259f70312c803dd6bac6488541f92482f7eb61ead71fa42bd5e2cca9338218d62835051bd308799beeed3b422b0000000000000000000000000000000005e0da6859601b6ada82b1826a455a846f8b4e54d9f22c3c639835a8a89e17ea2d76e2f49fb151f519de3e9adb78f0590000000000000000000000000000000010113d2fdc1e8ce0027b651cee6f9f6832b531d843db3ef7bf209aa00018715c1c42c68a82c53247a267929ea3c9363f000000000000000000000000000000000e7d1152af6448aca78aa7983013395f0dfc298848d86def6f017780e9cb144bbb21540a14a4d47b61d7a9b8c62376fc2c136f00c97a515076f6a0b63faf7e378f2cf04f8a90ac942fd70e25e683cbe70000000000000000000000000000000014125c81d4d7a8ea18004d798311f0d80c41c8e3a08366f686145e867192bbb13244f9f77217559cae72a150faba12a6000000000000000000000000000000000fdcaaf79c0607ebe9c8ca309d29d32284f3567a18dbbd23da9d96bad7269395ec2445d153711df4c883e8e7f7b02ab2000000000000000000000000000000000d34dd6636ef18b14f011fbeb62d33ec4358166f96f38a54c36b8797b51c1bedafa43d9f51fa4afcc2acc0cdd991997f00000000000000000000000000000000017337fab49d545caba55b763c23ce9bb3d3cc475f5ca37a15322e94c37825fc800cc7ee67bdcac66f9b5c22b03bf6558b033f2270ad2416d03dedd4bafb78ddc598810768fafd349a42438923ddfc930000000000000000000000000000000013434d32deb96edafc9a0e855281970b7c748c92b3472b34cc758dc3c17c4e6fdcf3190c910fa54a0259ef8bec75a3b300000000000000000000000000000000137df92ec14dd2fc02c0ec15a4e63547492154b4d4809e25f3ebbf24fe84255babfd6949770ba61637cc67e8ff299a2b0000000000000000000000000000000012fb20ef106e8cf3c79173e15dcdddb216c25a4de6797e411fd11d5632aef1304b36f8135c915c8c38caa2d778788f060000000000000000000000000000000014ef5cbe5711a815b9ff845e9201745f4117149b54ea3c6d1606060a192d513aa8ffe73425e37a42537773796b6fac8f202d0d506bbcd56c92bfc6fbab36bc96716de1af02aa166e7db2e2a0a4c19cd7000000000000000000000000000000000b1581a5def94e95e565bfd402cb84f2f21c181639c047d8f91044da84bb7854f5cb4eb3a6cdeb66569d99410ca3ec6c000000000000000000000000000000000d8029828f4ca245cafa7f396c25592ef08f6768e1a5b806450be6ca5b548cfb212d8c4787c3f15fe922f466dbe518c0000000000000000000000000000000000f51e01a044b6da437e3850349476437e4ff8b94fa190387099b17e6462040918cb2eba3b10d6044ff2123242005bd6f000000000000000000000000000000000991201229a856f88348381e1f2e282f0487e7daf1e5a4ac3854e66fa3d1303e3c20eb9eca605859e7d46dcfdd7615cc8329762dde1c4c91043a740a8b9639e83e809f749fc8c4853966cb2ea520620a00000000000000000000000000000000011f1bff5df413ade311b0bc3b46c4ecb11e386b886b71226987f14bc1a3a4b986412c2bfe8a4618ad5d70afacf4a3b4000000000000000000000000000000001972f49fa8b36d11d9c9d4ed6197261506b892ce6dfa932b87e686cb197560dfb8718aa413c38ee1bb771a5618c17224000000000000000000000000000000000e563bd240f5e18b518a792750c00aa5dfbea1f79b80a71369238ef15df9885d341d6901fb9168a2e74249f036e9a688000000000000000000000000000000000670e59ebf6e30b458ea505075840ed5348563efd536c31003d8d0bafdacfec7ba1ed401c616a3bab431a0fa71bb6188ea46572fdb37fe282203172c147715bf0a16e02a62bc79f33cbfe36703c95a7300000000000000000000000000000000071319574a93739586eda876ffd3be5d982e6fa04f5667873dfabfab83ddf603513394e0dbb9f418e725b02d2dc7b876000000000000000000000000000000000c6a8e0261da2ab499bf9a639a6e261e8c479f3f2b2d12992b41a3267e034c25373d4da4645626e6343e867466bf3626000000000000000000000000000000000045a0312dd5fccdd19edb65e24d5ba50e44689a9748ed9ec208320bd9eddf8d606b9340cd34ebf983e69a65c242fed900000000000000000000000000000000090b3dbebc7dd49e9f764e99c43b5915b67bdebd00d22c80e36e08873e5c5186bcd082dbce94f4f230b237d60cab7107b9e49472b9b74cefe5a951febe595b0020c43fd54150445fcdc4292c5ffe65f60000000000000000000000000000000007b04063dc315025b8545cef11be6b601fb4ae02597d75979b4946f3872764ffdbfd309f5ab3b36fe47b810f8320c1b40000000000000000000000000000000009361927d02192433a8d3c3d7871d76c6d88361774913067d16b68625aaa60f5a4ca19b6fd4140a5a11f92dec57d783e0000000000000000000000000000000012501f19b73fc6ddb4d194895e5cc2b89ca84defb7ae94f3170f25417965102fc195f38dfb7a2d88aa4b24e4a2fcaa4300000000000000000000000000000000141d0a0be60c32247f6cb0e0114251ac68c90fd43651d58c3108c728601ad6efc27c27a331a2f086d55aed54b3585fd1b6bfa1ec877010aeab030b96e80d2e27b45a93c6a99e2aeb3ccef22527c6e47200000000000000000000000000000000043f74a82ebfbbcf4abf3fd02eaa4483108a3446c9cf041bc67f5078d1774308ddcb3f918d7999d1e2c0876177cab6790000000000000000000000000000000000da7d4fa72dabb314ad8f68b61fcfa38627d1d7719bc07767f596671c58cca16e005d36e42413d03da3c643eb46b1eb0000000000000000000000000000000019f3f8f1a4008f9db1b604373d3566ae7c14a9147f80597a31839b83f0f8dcdfd829f7fa933fef3499b671867c3121fc0000000000000000000000000000000018bba4bfcf7629fcfa47935e36462cef4fa3751c7affa2ee2cb2fe3e3532d46ca1d247393ea190fb3f48077270d6a8b22810705458845232e851b33fdbcaab01966b8ed53b455873a966c1d6b89363890000000000000000000000000000000005a1e0e3a023f67aa7ab0109814f130a05c8c739036b98c70c8a8ddc1828d2cc4e2fcd16de4ef038a7373d15c78e81f10000000000000000000000000000000019e2bb467409b3dfae0b06244b4140de7f75cb105ab897d1ffb999c6b53bf3b60a3d11354815621c5d9f07962a237ffe0000000000000000000000000000000012e745499d5ed626b4762b57923bbfae7f1209408e7ecb8813a545c4ece0ec7c48a4015e0e264b47fa08fa82c39d3a110000000000000000000000000000000008acfd3c2a2e17be41a70ebbd1ca2cff2eda8a359e0969a389ab0a6fa51db5601b386dd035b26232be08d704a02033a7175fa4954e56dabfd1808f93d2686e0b4fd285bcb78b80d15e10e63ea8c7b646000000000000000000000000000000000fb464af51161f9c2758acc09d16754d4d8ac52a37baf2fb6ccd3bca3058bd3cd204de6c8a0bfcce8822f16ecfcd0601000000000000000000000000000000001819075eaa6d9e3f0568ecc2e507370f938a65169cea1ecc40c9cb4d02c83d7964254602e3d041ba0f93c24369fdf3940000000000000000000000000000000016c179832739a8129d2ef184f4d1231d24bc8d4093670a63d73771983152ec322b6a8c954565d61c2af76c4f6ef5e8a2000000000000000000000000000000000f6623578a4fa45614f4b74768adf65a753a35dacc84af005fa4d7328d733a09f12f709a7bb7f89060f60d4fac85780ae7dda7e5373d0e0afc3da1507416f47ea8b467a5b6c2fbde484aec8777ab7559000000000000000000000000000000000189724a2a0723e7727d224ced126e4288f4743f6855b035722f2aa36cf2f0a6fc23f6835c25222b670c15248884451b0000000000000000000000000000000009a57d85140f31ca58e38b4a99c4ef103f0a4af0d5546d416134fa8adce6ecca6588c3c56ba06b2f59015acc1a081099000000000000000000000000000000000dfc67b7644851c3e928ea33aaa0f745a18983edb7488b148736e81ec0c62345c11e3f0dfce729d893dce27ea249860e000000000000000000000000000000001712009a81e06a85a225a46fac056b139c8da05e6b72074ee4079316e490a06f51c62241e380909b86239d867d631be16aa731f9393d2bb32adf04f19884dd1a5e7aa36e46408b847222a153da95aea5000000000000000000000000000000000976746ae4d9325d5e8300b57ce99650f28055b5e020700ee5f124fa76ef3bdb9923101c3a1f46b6985b8203b4e8c60600000000000000000000000000000000057310c3b6cff6c849938f533b401b0cbe10b6ff3736c79a968009b2c0b90708b6b9a98b8e594cce09c579a64ead846d000000000000000000000000000000000d39511e47f33e310332178b8a0210e76e4d4c7408ff5c2374f5e7bde8335525e03897cb3e2bdfe59bb76b21cc6411df0000000000000000000000000000000010c46a621b7fb2e7ceab8943b3371475d3d6f132fb658b8c6bf299888711f1b344ebd4a5793ffe6a7a7eec8c66c80303985f367919b0f3c667b1c1cacedeb0be1f9cb175c899992ef55f14e9b7aa6ad10000000000000000000000000000000011ffff38891ee56cb1fc062d02f6c9993100f991a556445b5ee1b1b0d56d8e64bc6eea4d7f69a6b6dc55ce7d8b4ba300000000000000000000000000000000000d6cdd95d1ab2a11ab424d7aa596cc7e5de025c57217da0da143887d7dccd6fda0addae7c2fd9e0996bdd0d23128e807000000000000000000000000000000000499b3e69214fdb4db7dbecd619ef9c6b5c8343c808e4953f593cc89adba02b5cbc56a5e7a3046c6023c5cf305e54e85000000000000000000000000000000000d267e21606c16479065e47da8e3c058cb59f55a1316a87117a73dbb067ec26f406eba6a40b30ecb00f506bfd3c32f4da3041cc52c6f1bf62dee4c61b1c5e35b72ebff7e8e89b05353388b551eb10010", + "Expected": "000000000000000000000000000000000650fe9f3cb3620e0bf1654a7f1dee503b79fe2218739bad608dba9f1e5330f325b4fb7c340f118eb10dd0776fbfe63c000000000000000000000000000000000bcbf1c6a684dea5ad6c1a540b3525cbc64c7c431f37213bc8b08c8d8915a331c07bc899d3a2ea72a9a4bb2c539cf56b0000000000000000000000000000000008fca1c364333f558c7284afa1be486e84bb035b049a2108b0df99395149de83549de153a784e4df2b0134317c85292b0000000000000000000000000000000002784cc1d11667bbd0759bca35a16a1baf49a21765c6c2c3bcdd4fc9697ef20f1274be5caa0f820d37e843bc38c68957", + "Name": "matter_g2_multiexp_61", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000051646993c3aba532988d7baa07eaabeb8366853436b8b19c0fe3e14ed45fdc65448d749adf745291ab5ee62d4e824880000000000000000000000000000000002cec01290d8e51ccf751183dcad20bac20b8231804a2b6f87f886aacb61d31b14f2335629e97af0ae0546a17a4cca49000000000000000000000000000000000762afa7b94ed580fd07d5141a8e1299c6ec439bbfc6c1a4d695d9aba4ab5d6dec93dc4de47096d72e5ad87d879eea190000000000000000000000000000000014769208ce8a9682c8e0340f68a0290a7782c2b04e3c13027f0b23966eada2ffb2156f6e20539738535fa0ef097f78d6709a2e80dd96eb12edc481e3d58893bd0d789a499d5289072d58c2ea80b036cb000000000000000000000000000000000acc4e3ccc3574285c19d2545839d1da9db6770b078aa399262b7c91a7c41fb4c83fe7dd0aad19f4e3eb2b56273f664f0000000000000000000000000000000017851c99881677b89956fcdf1b8c5ca5dd0997d810f3fb89f7378dbf7964926cfde315f8722531d6d715b4932179eeb40000000000000000000000000000000005e374a4c7118a76e59cdaadebb1c4e635b4dd18665010249f3bc78d559455d27d547856573e264c98ba39f6f3abea69000000000000000000000000000000000a532979cfd5263c774f629027f7624799dd0f9d6a77f675d790a85fccccad6e93c00ff2e5536b8e9a92443af14611e69ff35bc510c86a9e72c3e9c6b49d2abca546f7a62330156ec09c6fe6847a400e00000000000000000000000000000000056f109801b7a4a36fcadbee7219c06ac74e4a3f7b81616076c33ba2a71d7ca0776b596fb25d29992fa26d416272a4b4000000000000000000000000000000000c02d7e6ec50b778a7ff36fbe5751ba32beb1c2024b17bd99b46239e6dd5a708d2fc689e8e8924902e0d80287cdbd6e90000000000000000000000000000000016f18df97f48aba4d1b64e71eb894904d02ee7f6ba425e58f38a08542319e2498cb0dada8dbbb81bb398c9c924ae44270000000000000000000000000000000017dce98b335f536909ce01647aaabb918942ba2468d9a07c5516cfd347e1baa02029d39de1b2602932630e4819f2f00f391dd27628d0808d4a0773509737597230d7849418540e1fe4498fd70d39d16c00000000000000000000000000000000005b23d6f76b8bd4f334e91771383856794d1dc65b365fbc0c94f21fff049761d7379f0d512c42ce13f878e0661712d100000000000000000000000000000000009dcf70c16f524ff540f132b35074cec6ed7dcc1f319432a0dd09b3ded0778ec9ad0f05d67ecf3ebb7947951fc4b25d000000000000000000000000000000001075fb15240d532a9543dc59cb0098cbd03da77c3bf85a0ef8be1560958f8ab57d3777fab5836ba98d67c721a4a8cd460000000000000000000000000000000003511525fcf6fe224eb87b13999d2548b6b8bb8069fd354f298a025b04a33f48be72d8e82a99b9aa34ce5ccdc1f1a59c94f11b10e4c45f15d811e3db4b947ee6414e262965d7b5c23a731b019e63d5130000000000000000000000000000000019039c69d52a66330d2d8572a1308bd88159f0383c041ee7605d0aa86f1d0fe3e884d0a2ad9c72405149b5fd204ec3db000000000000000000000000000000000942163eca08672af3827dbd876b9c1adeefcd5ae74a2768fb55f1e8b342aefbf76bc6546853a2b33e26fa866e60a4e9000000000000000000000000000000000c60c6bd103ba5bb5323b5107373cd8d706038bf5ec2b367a43bab72411523bea35985b974c756184c346626ab2622d30000000000000000000000000000000016c4a2fc8a9b3c54f65cd150c80a3bf70ae8dbacdcd37128514b4a881239023e427f0b0c8984ce219207c458bb380da970f7a0ee05cfc3f63d46a3151c20da53604628bac70d7b521b3be65d7b2abedf0000000000000000000000000000000003e3df9a8ce220be05f15904a3321a6805ab68bbd539479be56b2a870c3d61234e9cda8190bdc89f48e7f0dd9374e1d800000000000000000000000000000000040446db3ec43e3e67dce62efd741a4157e8ea2597a143f7d6273b66c7045daf31f72397b4b9d374328520893157c1f1000000000000000000000000000000000c3a7dde5b02df5f7c1e750a9ee5314a580cc6ed53d326a9157b507ebd6c2da314c37a7f1837f7fcff7e8754ab603b7b0000000000000000000000000000000005e617ca4eced853f8f2e9fdefef810c97eb27d5c8bd06c5b4ea50c03761c01e8adddfe27d2d72eed8cb25ea7514a4aabd991eb5e8ac8ad7cbf8fe64a5889b715a2409305f2366b278adcd2144d7be8c00000000000000000000000000000000104ccaee210aa8196010a6478702a54cb7ba49c80a98ecbf5c0920408ff8b4a7568212bfbf3561b6a7790520bb73bd42000000000000000000000000000000000870ddd51dcc76c8a97ac4b4f23819df48dc8a8798df0450d7a45d273f830c908541dcaab7b066bcd668b289c846ea000000000000000000000000000000000012fdae32b020a346ad5edc3bab360fb5ba55004ef3dfe5f437e841b5dd7284ddb3880051956c8068e49a3fd165143ac50000000000000000000000000000000019081bf768dae314fbecec408d687df5b6ecb32ec24b41f9febd583c05693f80345e6b9d81322ddc72616c1cc39a86811a9caeccc2a2058c2f5a271c09036d73320f9bcb31b7296a796ef94ca4599757000000000000000000000000000000001316b5ce5bcc168d76d2c862230ce604d02cd3d242c51c250bc6b6fe5c380c9e83fe7041049f2272481ab38f44648f4700000000000000000000000000000000079acfc2b9629da9c9f3394874e64aa00527de21e726f02db180f86cc0b9a97138c2c567832e287635721ca40469e00c000000000000000000000000000000000e11807dcd4ac69fdcea71e3e6a93dafc27afedf12c2998dbbb2e4f33e37ea736df73af791eae69bff84f3bb212bab47000000000000000000000000000000000e834a34fb63d9df68d683a26d79ecf8ff67066586e5f760d4468ad196c66d4ebf8605ebfbb7bde201f47b35cfde3a5d8ed4eec02c2af286ae19ad5f05642587cb9ad93196756d269c783a11f23393bd000000000000000000000000000000000990f115519d2125d47b925b613edc3303110e9040fa705211e0d772edb2e0f7f88ce521d1738a5f65c9d158e9d360c2000000000000000000000000000000000bb951a16decf9be8381d0c88726b53d90bb32cd8aeff962d48e43863e4eab1839bd80d7434c7eb808bbc0e32e92a4290000000000000000000000000000000013dbd5bdb7caaecc42ffd81f14be0ff3d8fa228ff121ed4f2f3ad5961fbce617d7cbc8133fd49e03caa62f7d1567541b00000000000000000000000000000000195fd9b85e19d0e3e1c93bab0380cad6f6f3bdbdcbf5c6ec32b7de7972421d0065cf0b265f6250c02eada67e95284bce26f20eee9bd019f9e0f5c794e22e770128737198b5f5dbaf5b7d18040443a0bc0000000000000000000000000000000009ca977266277bdeb985750df47353a6b81c5f0c473eb3369d25a01df67610bebf66a6de5727a465131404025e90441a00000000000000000000000000000000054410a13287ecf4aa18f543916fcd65b15cd5d54617433217b0a2b91a79fea764b511b3b270de3e8985e8f6a2fd8c380000000000000000000000000000000009a9802a03a7c9fb63c1eb13972cd42ea2df614a0972b914c4015c2e8630af319d12fc8108b4c88db9508a9a77d9e57d00000000000000000000000000000000094d83483bca296b20b7bee124f538ae9c659a84541f5c9d9fd22e98251d2b48051ac55ebe07bcc9d2e9109f526d60a6c470a66cd3428a44a7d095ef410126257175597a333cd36ce6c9822d1ee9bb380000000000000000000000000000000003f2d93ddb6d5983fd5521c1d1726addf662af0945aee54788855037f47a013d2fe595231792a05e1259c5e5a8c553a900000000000000000000000000000000004f4f4e7df5dee975fb440b5a217c27d9d1eb83a5ae280a2b147896f6bb864abe04459c17ef56d784d3c4a0b7ad3f3900000000000000000000000000000000069da36057aaa89cda458af4ee27fd9ec969c8f7612cbb153da0e010d67bfdddadb2941cfbdba8c43019a9f1aaf9c296000000000000000000000000000000001545b8325a80176ea148a3d9301debd7046f33a1b419b4ed01916a3d0a072037fd617d96e0bad32b208983ac3be7dda4e53fa8fb708204e619c221b8ecee14fdbcb1f94731ac2c858787ab33906c9269000000000000000000000000000000001536a81b203df2640bbe7e695b5fde186021d21685f24c25966cf11dde554d49bcefca64f16697509a9ca86e58b75eff0000000000000000000000000000000014348a2bd4907cf081f2f7bc944a98d3fac671abde029995377df190f7f60319b8de1698b99be39c821328e32a449c760000000000000000000000000000000000e18d4da3823addb2a6cef8336c83f99f390e23d7129365d57035d4363aac7e9c4da9f8000f086f7d2206666f990dac000000000000000000000000000000000d6ba54e2af9afa57ff4536a35e9b61c8d8fb3d431b653a0c66a2a4b8f11d9b5c45389f894d64485233d4183895921f3abf8de43c54ed59b936e1d55032eab5c9d9e04e83e4696d969c24167b4239f62000000000000000000000000000000000d88d5719e07e2332c54ba41f330c7763d2b2b7c4140d19b8b0972fae6ef902415de5f2abcc2342fce24d3ed8ffe156300000000000000000000000000000000163aa2c768eca58194fb76822deffc37cefe04ceb70aba38a51f507be7cd64c0755abdc2e49e7db234cd5d68575c2d7a000000000000000000000000000000000e443d9953468b8cea4eca4f5968e214888e2b95bc20ece39483ac551d4e180c0b0a41c4668c8ddaf761a0ac03fbcad3000000000000000000000000000000000691930530ce86a1354d73cb21ee32d968e6d89b12e5a09a7991c7d27dec302348af7f49c3e0de91e1a1838aa11651e795f59041329b6c3e6aef01d3410836852f79cc436fcf23199e0985c56f65c4f0000000000000000000000000000000000d7c6f9d4aa794f34596bb9af4d62363462d9804898ebd7c7db7544be1f46b4bde488ec59004adaa0cbe40aef525ce3f000000000000000000000000000000001094629b1428c4c284b7a64d0623e10ca0c4d395bccbfaad89d1a737a3887c10b714541f2681c33e674c3b99a36b7a450000000000000000000000000000000000d6812fad9c5ea365a64ebd3150238349d88b76d041ccaa7e637fdfa6c715d9d6dc3d3315cb95fd6919fe419d028783000000000000000000000000000000000eee5cb772ce02fe2a4883008f17570aebb902ad7c40b4024a5b24ff75b3aaa2b54ace6fb4601b1c62837a20204194dd740e4a207ab5dd4a0621fd65697f5d30b8ee1440a5f5c5e74a0dbc6b6391c1b0000000000000000000000000000000001026d21e075fb8921dd849c98252a565d39ca9f5a62a825e7e3e77ab5be6620e76e45047e51350c48d9a4cf98a1222a9000000000000000000000000000000000f6459a8287bb2da77404a515dd7a35f46a4aa49ef72cd2cdefbc5e5242872df5f7b7aeae6848d59afa1dd142ae7caca0000000000000000000000000000000011e3545151d4e0b034b950cd2f1a3fc2d29e9d53250ade2482b7ea6075dacf7e8e777afa1e8e612b45028205235265970000000000000000000000000000000017a869d75144ece603c04d39cb56a487895cc882fec613f40f6a66601bdbbbb7748ec755553257d654d1558b1104a981f49a3f82d25c6e0d69207e6dff010d56f0d99b28fd986c5711878dcb6665b1f50000000000000000000000000000000011602a23c9b5cc091a700114e5d3557bd4857c4fc44cb8628ef327ddeeb728927347438f123e2011f9cfda9b6dfc42e4000000000000000000000000000000000c4fad264ca95827e9cbb9783e36cb0b683fcc33038d47bc7ab6b65998770325588e5b910e811cf7d61fce13c3378d6700000000000000000000000000000000009b4711aa67e84434cabc289a78fae48ea86641a162d48b79bbcbfd56237705dd2d1e9ba3a18d737eec29eb8e940e58000000000000000000000000000000001160fc9e2a488ad9385140bb62ab48ee613c2284208cf2f92912e1b973ff81a5d3de338d9aa6881cbe437907890258fc8390fa1b452f887ef3afc7129ad8ceb9a8397f7625c2b249d7442566814ae0a9", + "Expected": "000000000000000000000000000000000cd0d8c746ecc8d92fcf2232793282d7e0e17e0ec27ee851487eb7788f590db3487296061075f36c24f67cd4c4bbf36f0000000000000000000000000000000010c5e1d05070c27f19c228813051c6a830254542eb71469664c842695b219670dba8ddff858e2d147019847866f01084000000000000000000000000000000001799ca7d8f2637da761622b793a3ed3317d50b902a1cabefdfc776b0d0ef88b707b8a5c36786d5ede3d8a381de4e069d00000000000000000000000000000000129881a3b56e0014bf1dac4775f509f309c33406f2cf22df9a0ccd15c87ea48a868d4437303923127bf580b8d6ed0a8f", + "Name": "matter_g2_multiexp_62", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000d087c1b98f8c67c1bbc4389f21d9dab02faf46ee4223c609e7b9eb399132ae168bc12847c580f58edbb9255dca3b000000000000000000000000000000000065ded24bda39d2b830639fa511bce8dc770eb95e349d6874ce63b3355d23c1da3ee9771ad44e57c6c661b7453076fe7000000000000000000000000000000000fa3b2ef40a7c3d41f0c3a5f86afec252c6ce89bd1bf1f2192026e22fa256365360589c788753033658b1ba151797feb00000000000000000000000000000000105040ff4dc2bc435c2a82e1174e2ee0b94043d69074f01e8ed013da8c431f33c94a438a93b06774411780cdb72abbc8414ca9894bc15e6bca798544138689b2471f8171a5dc48eccfa36c83af142b7d00000000000000000000000000000000129c8c1db08ccd0dadd59b04df67a91fb6547d97ce23e59aa57cd3d38458e6baaa67285800809856e7e264d812e584390000000000000000000000000000000004a0be934248b4e142fc51745233b6d0ab2c46f53a8f9d4c84981e5eacff146ee6227de289c713e4ce24a4341572c9d70000000000000000000000000000000005916d14a8592af57a40418b10376e8e20f70929d2ba568c1fb70e343a1dfcf3e63c791cb639bec49c50aebd2f816fdf0000000000000000000000000000000018682c66a461a69b11d7c32f7aca07749e05a23fc46547bac121752aef64e9bb98a274d15a14faa93af8f284790acb9b99eac8ce85a1bc70c725a2f04aea3749d75d22c0df7c0755a5e76ab4d82ef9420000000000000000000000000000000001552053742eb89ae3d0b95be919c84e53919c898ada92d3eaf05605a19ac910091fc08a65e9764f3108877c837d478c00000000000000000000000000000000118e5d22f6df0e6bc7447177ce06659f94315478385372046b649fa6d39fefeeb492e6623e0160bc47233f4d3143e326000000000000000000000000000000000dd02c30cfdea5abd3550a9f28b546d82d5b3043f012de622d892062945847748ba820555fb811fb3382791ec43ce1f700000000000000000000000000000000050373898b396d9a641e2f2ed832c7619515fd9070852b891b4ce0b5bb5ea8b5e24248297d53e9db7cb946e76c4433fa49b25140d7967b0438e49f59a6b04b75bc8745b84d7350605be548c6b4b3aeee0000000000000000000000000000000006b465f4b9d60a3a14e119c54a7c35172bd648c86a7cf331e80ba849fc87b9dcd48410e3c9a07b634e83fc7dd71e5b9f000000000000000000000000000000000283ad9c77f549042f79c47b8a69e72164f0ee77aee50c20519d2b89029c63ea86dde2744cd21eb5d37e896c3abbdf56000000000000000000000000000000001668b08a87787928afe92d941240e503da07b646a34cf82ed09d4c2f4d479aa24358c8475eebd9bcfaa6bae17c430cfd00000000000000000000000000000000150e5b28bd901f7a2a9af44bfd6b78cc84900dc05e334de306f9a45f1e67708adddf4dcede8150a39670054f97a643436e30a51d55a1ac94089d0f3217c3a2182da6b02ce70ce7dd8e2d4e938bfefa9d00000000000000000000000000000000060d75764a92e30e80e7c1a6df1482585f4de901bbc36dd9d8978a76c12c739f85a9ba16741d0b19ed480fe2dc331e5b000000000000000000000000000000000024fd15c9e5b8872d2e9dae9ae96102bfb0e31d15e92a24316818862dd8ca7a6fef271d499fed5e0db6dfebc4c72e0200000000000000000000000000000000058cda551e1fcd701c6a3880b276a2f7536a26aa366a6425a1c42cf31eec678551f489a27f23ed5dbc76f19b0fbfae43000000000000000000000000000000001152e2cfdb584295563af8120c523a9f4c01cf72da64fcbe0a90a284d693a3089f299bc760166be062cf9f8efb6a951ad3da3db6492ff36102747d9d663bc6e9cf8f75b1cf77044989c7af3f11d66ae700000000000000000000000000000000116fc24e980b2e7ad6bf17bcd7c4f06e654bbf766ea0238a66d738bf3c2d41c8c63bd52f81553cca5fea91f5f9b74a2c0000000000000000000000000000000001078f19ecf785a5e0d3e764b7d6ea47b2d077b5eb222f4e6a9451f134ff0d77a0b9a3b53caf599705d131e3b17b6ca9000000000000000000000000000000000e44c07f00a1f198583a8ffca43da45d8e54e1f2a85bee7afff6c1c733b5d0b5712961c4b6d344869a8e4de3b34218e000000000000000000000000000000000083c78b3568cdf808b75d9ee2b03b98cd516bb16ca8cc35757f53f12119747bf6b5b0605bdffb2f079cbc69e99ee0bad6de8753f3df8be42b6d6ab578096426f852de4ff545d2e4ac12c3943b044b43800000000000000000000000000000000087ded6945bd6fae7a0aebb1ea68d3cd34588035531a6cb00fcf1b83e06f7ec21cd3486580165c1364027b43e238e34d00000000000000000000000000000000005a2fe8a9871273bb60cc7ebef44a361300a1033f3f0230a731f5723fca124ec9d305cfde45802482a45942154398cd00000000000000000000000000000000121eb94a41f9e133adf082ef651272c178d780a1c31ba8797f60a208ad36b4c703c9b6c08be845f8844dd14d6406734d000000000000000000000000000000000e5e3da7c91ab4cca1c9286020aab9795e64e667d55a5a700241f9589aa3519639f168d040a0027ac057f334a9f740aba28f7ef4b12c5097a15fa6394a4dcc3ceed6cf3c6240ec2ac949bc21a9f6447f00000000000000000000000000000000041f9117b426938acb40c905bbcba443c043bb55cf9b876edfa2ca051b6354124f0fa54d6a88ea172c3f5c10c6d921b3000000000000000000000000000000001828dc0b9533274db6afc802b2fadaacf57f28126094b6b9038ed5f6bbae0112c873fe5eed15bc49b970461abc2f5c3200000000000000000000000000000000107df6da02f106ae47718959aeba7b4fb4a8f0e2651560e2f2266a62566e13a5af86430b8800543f5eb6b1e96be79c69000000000000000000000000000000001628fd4a598813133de75cd7c96ff3711b6bc826806b96d07e5a89cd549592f0f51c84aa9ee0642cffae5630ca1ebae1a3d0eff3368b10d00566f35391bf43c9d204a4444b7eb91017f1b2d8a762d90c000000000000000000000000000000000e8fff44163cd9c2a4e148eef3cbbee19ab8f648da1a8d438be27d2b0bcab393fb7d49e096d9a7abed3d8f82c11c4e03000000000000000000000000000000001274335d8bde3d14924f8d7ba18fea82bbc85427892f18fb741c8ecc5f2d6d7bee74c68058164c55db3cb8da8597bfe40000000000000000000000000000000010c7fc728c094e47569f0e75446c399d20a1239b511e34d8d6193dd32df607dfaa4377a1825b3892a9f74ff4efa0d9df00000000000000000000000000000000067d904122a6581b5d5a60acfe8156dcb6c10ed083840e506487b5dd9117927663e0ad883fb91b4914778ae082de0a7eb90d76e660389e570bef756e9785e39b9748aecd7a34556bac8399aa5564d12d000000000000000000000000000000000a909706e3ce45c86f2c30de5e820c8c9eefef207e530fd504511827f5e6422714d3f4224afa6bbba22ffca533d647390000000000000000000000000000000013ff61472ddc0d70207692648087c283763ede668ae380b0b9d6ae6593498b0adc9d4e4fcc73b5cce250e7563f7577de000000000000000000000000000000000a81db69eca785373c4dcbafd8635b23a9f41265e91152f309fb2945622937e65b5c17656abf8aff042a1fd1e5e50341000000000000000000000000000000000c66269c3ccd9e91766d1a640789bde6de752d08ffe3b2955df8dad3d2a0b6cea9013af235cbfbccee8271a7242e310614f18dae096e4de75de3da284a5755efe51e912e180020a20adf1f5de43cb51800000000000000000000000000000000181f3f4a16696980bd0eb9bd10ff1084ffe90bcb65f12f505b25f0a26dc1d4e16987d486b2c0b117fd6f2e356b83a5250000000000000000000000000000000010d7be6788da3ec56c87acee68ea8a03e7d467f816060207bb163dfcf8a4e7721651bf2bb23d5bc390d50fb1ee6625a900000000000000000000000000000000196c1ac817493f51d9ca891b55fa65ad5192df83cdb63eb1a634ad54e2d627f7feaa68780418f5354e6cc09cdf2f6c5800000000000000000000000000000000190f36690b8d36f2e295b9625f23afef9d9babe87c1ba0303f60c6d44ec952ba6bf8356469cff9d952f8e26bdb86ca06e32d4645ce0172000fd74f30937261de89753caa716dd03a8b3269747f2349a1000000000000000000000000000000000f77df606f0611856c449c58393f4ee7a6225a5bee667382a48f59dfc747736a895d598f90ab26002dd0ed3a5a8f5a200000000000000000000000000000000012aa50d0ec440884fc6c2f7a0e8db8a5e79160f0c482209ae1a1aca2b9dfedfec6d6ea09252a373ea57905130220a4820000000000000000000000000000000004773f46165cdb19cae49cc42663316df39586c62be5b827535f138e1fca8dcf62ba42ab60ac6dcec85e8496f32b9eda0000000000000000000000000000000010c91923c2c7b3eb2cd9aaf0455c0eb035e38e5352d218b07ea23f50040ea58fd548b373c1bee9113d3d44fcb25f6ba08c8722e3e929ba21f1ed6c51fe5ad4940fb13d63e0293893135d0da5e6e0389300000000000000000000000000000000044b95fd5f0e049abfdc2adc699646afa5b0f64464779efacce85a5279477697090615933069992bf30036c6ac70dfe50000000000000000000000000000000002778e7dacc5566354c24ea1144613a5ce8a38eb56d53d230ca145ce83d5ed88596afe243df22cba10f423e64a7c103a0000000000000000000000000000000017e87cd2752d8674c373c557ab2b922e02620a070aacf6f5b3d3d07ca35d89ed2666da7246b800717c0e4763dc35f5f6000000000000000000000000000000000a3ed312e5f309eafaed486629d953970cb73f839bf30f506c2f393df4c283f299d6c643ae6c229430d919e8aeae8bd839bef6ccc893f6eed62e68f5f2a07812f2d3066b89653431e7e39e8596bc3652000000000000000000000000000000001082a0edac6267151c8ef11fac7614b74cf58b39b72fb71e4d66467ed4fb3264b177c691e569230f2a13a64b4a48c6fc000000000000000000000000000000000073a8d5f96ee580741bee1f82cacb6139d962fec34c44c648c8fcd0322796429bbaef083a11b4c8fa376d4c00cd79c00000000000000000000000000000000008d41e51dc2822e0f14b992511de799fe4db3783a05ddc1026a53faa89af000075ba5aa830ceb7551e51f0fff144c1360000000000000000000000000000000006bc4bf0bdf350af417160d06e8aebf2dde02c9b50be39b0c4dcb3a045f9e04f1f041f6de10328e287df6121247dd4e9c395ba8f2553e3eced8a42b221a710a5cd2a5ffe5834d3084dc260ae0f51698e000000000000000000000000000000000802e7b71127a15a279a629e89f194b51d19c4f329efd8ecf9fe69d340dd06068c8467da6ab39be25c194077d3ce2428000000000000000000000000000000000250172c787afe866b428748be8359d8e0bad161832abc108c850362c5839237483fb38678d77c94696260508907726a000000000000000000000000000000000d46223c1666f314f9a1e32a94f83d8150755d71252e19af91a3b460ab0ade2db2364d8c6217cb422095f0d9a1ed648a0000000000000000000000000000000002fc2849014717d1c07935efe601325e1842ed333897222f6de322dac8b50bf4d9859eed8880a34676af0d0e3277639053ef5568a766b6c39854ba059f3130b75d7fd870bfac2b00b626e2d71c4968e10000000000000000000000000000000004151d78d65b0c9eb26822e20d90ace8fac209a1f08f62ce722ae3effd7fcc476f4c0179e71b09fc181db96fb2ea4eec0000000000000000000000000000000013d17ef429483be98411947ca0771ce671fc38e27bd0aa4abcfd5ddf1af9e138404d86f4c2ed74702f80a573638d92f500000000000000000000000000000000178f2a7eb43b9f88acfa892b5868d7f7c5787a399c1c566de39ecedbfe88357fd5256ec57e1ba12e9784382c14331756000000000000000000000000000000000253a391373974beef746c4397654a30a68992fe9163f9518ff0ed9b7be37b858ac60c95259ab894bb6acfd123333b7fbadefc3880ca8dcff10b8b763f7d15f88965c2261b72ba879e3540a90c59effa", + "Expected": "000000000000000000000000000000000710bfc39e92b0b9d15ee9bdb4959daa3a78f66aeae29eaeb50a0aa0460f3ff703c86eec8903011b4b61a0dea725ab08000000000000000000000000000000000856fe7a074d37786237cc14ff1bc53c735ee8133b231dd3fc63dfa0dbd1979304bcc7b55cd1bb66fd7529e15d15db5800000000000000000000000000000000014757f1fbfd4fa7935ebfe65e150519d6eb4f4831890df4b236dda98804b79862fb6699b587c3e568fd6de1e582409900000000000000000000000000000000000f7b54e4961dab9e94b1c4b897177dfa74be9937694a38207ddc9d6290dae1d5e122cfe4c8c31d853db3783999a7f0", + "Name": "matter_g2_multiexp_63", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003bfd2535c6d8ffb44670bd02b5aa6f050f5cfae7266fc3225865bc3f34320820eaeaa952f80da51671f6d97b3df9d4f00000000000000000000000000000000026c1adc0ffc3fef9ccf018ff9a647ef5c69c5133fb4a6566cdcbd3180d9ee784f34d667edb1dd54ae292253b45576b4000000000000000000000000000000000ee90fb541becf96b4728f1859aee5ae74e30ba9193b90569b66b0e1d087eb81f30c21774298cb06e7dbee8f8aafb1930000000000000000000000000000000000a4361867bca952446f64c273735764e141eef43d156d6cbb6e68dbf3bc940e935f7bf3a77b57fca4bbc74bda2f26532c1a5abbddc02f453519563d6b6e05959d8de5feb493f7c58ea5e548cfec2df60000000000000000000000000000000004bdef85b0da28e0531734016e5953256c75c3620937736cf65de5f05b8beff294677668047a3b74f0f135b846a95bd6000000000000000000000000000000000b754df2aef855b4a0eb6f6aa03115ee8f38a31fc852381deef2b59bf23e2c885ae166030ccadd5673bacc35482f81e9000000000000000000000000000000000f1d760ac6dfb65b39c999211d4e4c3623c3fb8ea59cdcf926249a07285a8e4da1890327fed20ff07f12359f6d9035980000000000000000000000000000000009f2698239c8b452748126ffd83abec768edffb83dfa3dc7943fd499c8980e2d9aad76dc38b336a4a63eccf5c4150ce0b406eb0c097237556228f3a48b7e770c1707fd583b91b4b6b70f398b7dbb0d3c000000000000000000000000000000000cd724c51fd56528dfa688df46f71bbfc9144ff98958b559fca8fd05eda01c38c28630ee19579012b9913a393264cd90000000000000000000000000000000000aa1e55f2b6d9385ec6a9cbafcdbad157f7ebc06b2e30e2380ac54e71db5259cb919e17042d6ba6e045f1358aef276ea0000000000000000000000000000000010181ce9ffe235b6b271d570b3c2d6e1be60c53b4a98ef5e8d7d00b463e5bbc9d8d96dda881e58746090983d6f8edd35000000000000000000000000000000000333deb8b14f499319ad675f482fecd80f9a69ba369425decd441cd2ff5c3c77f11075f61bb1d90d0be850ff657d6b7cccc30cf1db4c6be6dbc5830ee37b5782c6dad215334163a9d9e4deb962186f80000000000000000000000000000000001581a5440fe892ee6eece5fc2227fe072dfbc440e0620a1e5fb505ff0b16d9e6033d83c83576b4b6ff87a807dc81b88400000000000000000000000000000000099b070a0d7497f33c1c478ac424d5564fa645d836a3d572d98782f08713d8e425b571433fee928475688db2b3a9a04c0000000000000000000000000000000011e1cbaa09a6361aff9e199e21bc52e98dfacc49ed83e732d4b4f2503b3bfdf85d029dead4412b6f3d7ea447e20d669b0000000000000000000000000000000005503e151d620e9a5a142e4f7940ed88375e7efc1109214141c191e9f38a32a40d3a92d6094584e763e0cf13cbb54bcc99461c0f12019b344a7f322900b64fe81e0d8a052c0ff5e977f58753b1b6edc60000000000000000000000000000000007c780f119bbccfd658f3f1b69ce9c56b1f5269bded713b6827d97d32b2a6deadcc02c410138d984d977527f3609cc2c00000000000000000000000000000000095aebacfa33928a916ca7b0ceac699c71620781b35cb2f3b254bdbd1544b728a2ec1fb35416ed7a8a3a630bc07ff8720000000000000000000000000000000012194abf7e411f4961b6f8a1e2ad052c27624ded863d7a9132d9c7ecd3b4074ef0060cd86adb73056323f4227ba5fa9e0000000000000000000000000000000002fde2be9ac1e8265f258a09eec85a70112ef1eadc3a91429c9206555933e2b89aaf7493fb833e33e5d61be28a12a1c2338ef9fa825e47b46483ed8fd2df64bc7b56da8aecbae704b7eff2e7d426f27d000000000000000000000000000000001586c65405e810e1d5b59304bb4555ca43c04a593671ec64d5ed2d2e626b1f8a89f48a4b21d38fb49909b8c614209a460000000000000000000000000000000014528cdf994e774b8fd54090cb45b68098c1ad9a351bc1f36a9393f3b4364f5beaf58fff6e5f8b21a85b67bc427c0e920000000000000000000000000000000000b48d8713aee51d80c79109fb8b4e0c6e32e25a7ca24dd3e7700f8f3195730375208b241b2c722af3c2295a1704cbb3000000000000000000000000000000001913cf6328429cf2966a48117dc74db0d45be7800f93cfbebf597fb48a8bdcae4fae2df7835f9536481f67261755da2a1dd6656a34f3b12e5568b9c348fbf4ecf50d65a89e63ec0936591f01e6cc7a4a0000000000000000000000000000000017e45a481449f167fd579accc896ac65aff6f1f7392df47d006b404de3cb7ebf6cb59d0913438f3a51e55a0ae3d446c9000000000000000000000000000000000cf4b7db343bea29af6e244a71880538b41b826bfd1d06a21512d00ce58f5d7500ab1ed77b446b1e3782df736bf3dbb6000000000000000000000000000000000525d08e134779ca7614784818876514e14b65e799b7832f61a63601fc491c8b9cb25430547f961cc1c22100170a2065000000000000000000000000000000000450cc2156c4716d0343f32aca82fd2d0712389b1aa984b31d51edc2aa0545c88ff52e470b15eb6b2c22e30f79864dc85202f32528e795e0fbe6deb4ef6e45efc70019520b01fa1d71d5505e42faa69a0000000000000000000000000000000004147c105ee8b4db68482b9d7f6a716ea1474b6c62efc41b9444ed1ef9e92e2b7010a1c1ecc59038ac37b385074a6bce0000000000000000000000000000000018a600a85c5c38be835d2e91a35cce4b59e5f5ac3b735fc007bf5498062beca9befc9c8ead58f9f21f6e08266b149d800000000000000000000000000000000012a476fcb81ab66e3101de2364cb609b17e06eabdff5246bf736eb9d5c87fddd404e8867578262f07a05731b04069164000000000000000000000000000000000c54a888678c28766ad17a18507e4bf5dc57dd394eb6e9b69abaf15e645cf4779bf6ccf4314d2756584647cf27af089ba2b39f2b893be03ab4da77ed518ef35b2e24278d707a20b67ab4d1e5972f9722000000000000000000000000000000000e809152c44cebdd8b40f0d22d57c3b31f29700e0cbc3e69f660bf7270e59093d84bf7ac358be7e45e799a75cf9c13df000000000000000000000000000000000c6c61f98bd4e3b7095fc7f1196baa98139087df00fae2a795e76544ca47e453f75929cab07c11cd3595de6ecbbbaff000000000000000000000000000000000171c70446c19fec3c152741925c8db28ab0d140720cb6a6c45e9bc66c012a421d12271889ea43fe1524944ff572fe6850000000000000000000000000000000006e4baa09b4660c69cace151e60320b771e56e7460b01442bfcf26823c17779034ac241b9365dbbfade770d2056eeecd892eb7c361f05e114a645caffce9437b7b43fa01dd66c1e75b30f3abd0209bcf000000000000000000000000000000001917a23350e94963e3a7488ac1dafefe9ab11856d405eff39d655e31ba808f02954b63e822613d3c6e5f358be04be4a4000000000000000000000000000000001620211b06288c16aa02f4404192e9f57a048e900f0ec5db9b478475f13b142f924c6de720031b3fc12cf869b422af470000000000000000000000000000000011e8ded9ad57e46713e7ac0044ee4edec12689cdfb98838a74adf1a35244e3d9a4a34c81323b089c10422abf26b044e70000000000000000000000000000000006f85c7478cec590fe3355a8d6e9557c5be084c161e090c72f1281be4ee56f36aa1e3c9c844eb45d9e295c15c4cd903efdafc3f57d6116163f1da9e70ea645243c5911cc4ad4a969a57c46c6b5c73acf000000000000000000000000000000000d555d9f23de97318dafb257cf444952bdd3e844e9ed5ce193c10b76f5179f0c6851f93af1553b128f34d3a7e75339f3000000000000000000000000000000000132704571a12a58f629dab48f1a3956392b40f801c2b3757c15f7be46ef1d9115d89920c460c0e2bb062b3cc1aaed7400000000000000000000000000000000152829eaef900fd2f19d6fdbb8f7eb3b02df35d218b494d075219b69016256e572eb7f555f6fbdbe17c59a666d190055000000000000000000000000000000000fe5c67c949b7c89a867301528f0ab24b04d31d6f18f575c475ab5a6098f7187eef20a9ed6e810684da9afd8de96ded6660a77b2be50eb72fd108644d913b9253209972fdec2d107213ba47357c96e9e00000000000000000000000000000000128bf3cbb5208d84dff719ced229921a889c9a4d02f5a508187662f03852531fb8be1f4c2aa9ef01de7720c352dbd19d00000000000000000000000000000000158d89a44b8fcf9ca8c96a8e516e130ae8af19ed71c2b8487ae300c3cdb546e248728bc58fd9cfef21107e0dabf44fc20000000000000000000000000000000012b70b42c8af4551267a94a795fe18e8d054291225438adaa33fe2edafa87742fc3709abcc7bada5d26e3a14649cb47f0000000000000000000000000000000015a853160b7666ea7d64aacd931314497ac7068a4b8bfe3a7deed85df2bb8dba277716a9d1ee50c56b2970016ada509d1ca575cca348dee9adfe68f8a78d39bb998205da2a5285c12141a77ee7af840900000000000000000000000000000000087c7bf08e085e19f0cb301d2e36478357e835620b1cde6e132c237ff6fc63e6fc16a8753550d50fb93a0a1741302cf9000000000000000000000000000000000615299ccefe4da879e5f4b01d6b6ef8358bb59ed8a2b365ec72003c16486d3266243db81f48855d81b6a25440bb861a0000000000000000000000000000000001498fd20640f39dbc03a474f4514e5e283256ac19468077af1c9ddaa40759dcf93afe256de1e49be6469fa106394193000000000000000000000000000000000cba50fc4919a29be2f4e74c261487dbf855db1856e8d5d008cc3f4ee5eb3babfdfaff878adae49b96db99d424bc4dab2e1e4537f855eb478274992cba4e3f50fd9e944f6246cd52dd1517b55bd7f71f000000000000000000000000000000001369dd82ed013474581ca1ab2d2133341d7c1d52065060d72b8317e899e79e9077bcefe6c76c3c7f67e54f76dd3c246c000000000000000000000000000000000405aa84d3ceb02bf8eae989a9cd65afa15451443af6f3cf5e70f5cd7bb8d413c57ac3893a7e8b888ae93a92dcfa2b20000000000000000000000000000000000378d003988f3c6c16d3b12ef47a4a49e2d3d2c7c67e384bcd510939581770aed92e06291ed3b7c742769f0d1ef740c100000000000000000000000000000000048bfa6550711a17d52f48377821baae6f3de6ad99ccfeb8302466047dfddee8005240cdc65b3ab11ed85b11f128624957f9a729aa01c8bf0271052202a077913a9e0c87201a367845f9b271c130e95d0000000000000000000000000000000013370ab697da0ff0a0efa8ebc7589b465374c983c13daee7b5451e8b299933eb5a4d255ffe4aa46782ae0916fd3990230000000000000000000000000000000002ee77be6e0b6fd260ad660a96100bf3259329faf2ff9796102928e70cd52c2bda8d0d1da1d484d7b023d3d59725d12b0000000000000000000000000000000014482fee88e02e61b847c08e61d7ae6fca2d993bbb69bf1653138150d5d7fed09cd5cd4097cb4b6368ea8023383477cf0000000000000000000000000000000009d0380d0d6fa39c9e242b9a67336d86445551658bc29fbd594239a76d7741ba388450caa244fb186afc36d35c8740e93017593cf311989ed8fedff72bb1f14f72cfe5bb7446ace5274d8ded54c1372f000000000000000000000000000000001537d4a47247af8f60f77d309666056c412ce089f3f011457e894f74fa4ad5168baafd36ed3294f5f61cc9cd8f87554500000000000000000000000000000000119e43382a846c8945e58dc7723a0f24b24d9cd487d436a156156a6da97795cf3f4ce382d21435695949b5137a2bf1d3000000000000000000000000000000000be5fd015998bd6043f124048c82e4d848e1b8c87442d0021390cba41c294de17648a47dacc06268606ba73cc95ae6e70000000000000000000000000000000000e05a3dbbf3da8320c40d51ac44c6380d56ecb460b0e7094819aa6af4d7c70d1541d4bc1fc5afd453b165f3d48d09a708bbe9e7a307e380c238ec1f8e2010a95fff8b03923ecd9b012f99e56c77a5cd", + "Expected": "000000000000000000000000000000000b00b5c14685ddd17ee99c74598e6bfae5bb1c103f8ebfaec3a620ba57312f3093f9ad5eac820d81096dfece90e72ef8000000000000000000000000000000000dd81552160d449cd787ac27c76685ea0dc993a9fcf8ab182f1ff5d8a484a47c14c1c1a785285b44336c7f6fc0732a0c0000000000000000000000000000000003008b6d97a12868554d294faa26e2ebe2920add650f841adfbf0ee89af72fc4da5dc23b45b7ff191a58c17971b50ae50000000000000000000000000000000013f438d927f35b04bee8fc55693d5c97229c8548ff9de39fae6e26c26f89623d3b0c810b9be8dcf0445910e8eac5c58b", + "Name": "matter_g2_multiexp_64", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e1f825b71cd9edcb231c178e160e37bea70108b369afb248edc7c6a59114c22e843fb5541e0f26c77a2b589ea88fb3d000000000000000000000000000000000d65d777e91920b17400955a4afecf82f67cd13f3e7c5d9c2076c4a4d8f7f26383d22d9977dfd0987f219a625c8a621200000000000000000000000000000000045716092850318c343f0dc5337df1a72f8c74dd729831d12103b46127c9180fb50cece34986a94fee6119e72d16a55e00000000000000000000000000000000083fac698ce800786719d1f6063c87d9f728da03cea2545b4ad8831f6c24bfff73e80f2c2fff1532f6d1fea60e7d438ccc5e9d01f6ea67dc3f943d57d9d8b5791d823592f7fae6719804c1ca097e651d00000000000000000000000000000000171d60b76698d4d3f14b4eacbdce9fa66b8c3cc7ecfb989439330fbf0d051d95f3007c389113346e614f5ec8cd170a2100000000000000000000000000000000151a96beb250bdeca3cdad1b07322040bf1cf2105dfa854bb24fa76c8abc25ef4fb924ff995da641244f9daccff2ff970000000000000000000000000000000007e5818778a8331cdcd1432b46abf1efcdf7e4aa8907fd42d5e7d14b57dbfc48125246b57587755ee1571be8b52d2c57000000000000000000000000000000000693eb562e22fa8ca4a655b76e43b50fe487ca1d65cc3867eaf793e50496f0b4658bd92199104c2ab92e4ac53c44db6f57b8fcb85e4dbc1969805d814e75b2b80f5cd1e5562bfc1e28becf731aadfc58000000000000000000000000000000001059d23ec6e472937d80829256db506d2d2deb37d4b750a980568cd5b0db085358a4d610d59009b64db1a9225f9f6f5300000000000000000000000000000000053d9ffc47672f1058856aa08e51aebd469111dcd129ed542454d6401e7893323f8a9c63641f499cd8617c7389518f8e0000000000000000000000000000000002b9b30a5e37b18af4bb02ae8cdd56f6a87820716ea1522a174a0d99c3716295ad0ff2daf663697cb56bc6053c9dba610000000000000000000000000000000019d3230c0bdc228fa0cfd5e0d8bb88be959e70e59d931d9f9e3683d5e65d8ba0d121fcea329b23c5905b80dac34de33b03edc53ced9ec5d7f302216fd30a81c3554a3fd04994f62b5e3da74c8b71bb870000000000000000000000000000000015a619addc75f425596f9a51c6cf2259087cf32afe9b1f07e346a2f4e1f8caa001dc10098d1287b89837f426d073982d000000000000000000000000000000001660598fcd3ab6a55423138ee72a4ca7b57277f6ce140f9f992dd9934bcda78513516df0d309a0e8ea151b2742dceddd0000000000000000000000000000000004cce7d84e0763fbbb54376833ddd7408afe3f741bc2b7e42fef3789a005134cc5540981a15a9f256e0e541ac58ff3b10000000000000000000000000000000019c20a0064f89d37548e06d63d8ff4fbf3584d5bcc2fc2757339b7c89db6d5da76d43b31da7364259187ed602e79bf4f976568ab779e335b8dc67a64f15b947e69cd3896ff393f51fbd3c3e3a157543f000000000000000000000000000000000d7ec5a27ac44daeebab7658011624c441e45924cce97d5bda354f1daf9362f5bce2ddf57151fa07f78740a7db170e8300000000000000000000000000000000121ee325f4252ae5cdd3e3495f36492d68d9dbe13249039d1185760e6e48a789744b2a9946a3d6478a64b378f76b0de300000000000000000000000000000000014c6c5b98c1e214f78b82f1b3be4c32c5013934b1231fec942b5591d3f0440bf63b1505cfbb7a8fa78a85ba58fd4aa90000000000000000000000000000000016aaea3bd0ae91b9d18ff89a40ae27b68d74f3a227383138ed737d59c19ac578da03df83f04c8d962cb9d6f84a15302f3aa5eeded490a17b1cfa66d409811741643b7beacf312b9d6c8e7e7e63579c8300000000000000000000000000000000188e5aed425a768f89f5ce09b2cc909b28c6a0165787c8e3750fca8e8162128ecf62ef0ff853d206d23bc076335008e70000000000000000000000000000000001cfd330da0d1b5b92b6533cf5a8b6b70bd93daec4373f28d669f5e970a947fd813ab1d1272b61afbd2748922b87c8c300000000000000000000000000000000002aec750fd085c99c3b9c3af62b6deddd85e49eba0293e6e8160b26a3945af546a760b8f8f85120d6a51d22313cd33800000000000000000000000000000000162a109abce2edef753ca6351aaa9cecdeac20919681c672dbb183b5b26649e885ff081b9d3687f802dbe20fda43462af9f1f9313bf966ea3b8f09bbe9dcb66a7f9e3e94e2024c49a72ccbbe03fe4662000000000000000000000000000000000f7ad6a1dd9f8cf52bef02ae1e82b0d20dcacfaa5c169a485bf8becec8b51373fae851ca29e64385f0b7024eb0bcf9270000000000000000000000000000000010412a7a710f842fe836414e2729d0ff2e145709d8f7b5e3964af3e0ae267ac53dac3db1e6d2b7f7671ec34b18c844a10000000000000000000000000000000002d3b96fab0e3b8fe44e316fcc5e35f06dab83f2c531a777e162f7521cdd5767ad0b6f877f876f73d2ff663d9b71f462000000000000000000000000000000000c09a98bf623e82a4d2d4b63fb867fab5d3bb1f85a0669c4c11cebaeb357c0717a0f246a9ce4064b7351dcf1e77cdbd393be64fc3763d06111961bb208a2b858aa1ff181781dda630ca41f0d45ef2a9000000000000000000000000000000000114270d35ebff55c0341776086d893513595aca3b200ab98c8b586029b19a360a04f2e77e90d382174296443ab8531d10000000000000000000000000000000008b88849c3cda9a23d37ec9f4700904edb24be95fbbe6d9e20ced0d52208b597d44bb9269830a1ac5cda35d0c0a03c9e000000000000000000000000000000001144466b13427c10ad7679567067dc47c671107064fbb9bad287924c9bdee653c395dc2654caa5b3013ade932fddd5e50000000000000000000000000000000008e14e3cff3bb57f0d87680a0c09d745c7272bd3c216ff9fde7c03df2caffc27e0bfd9f99912855c156a787200752c125d2a2b6008a3b4a4cb3a8c28864214c7fbe154fedab1f9ff8c96eab6a5f28fd30000000000000000000000000000000015cda76d42de9fa86f900a5180ff016155f31b9276c617ef664202848d2efd2876d412402516c0c3d26d49f71d894acf000000000000000000000000000000001307fa2b963fc19583b7e4ef2e9dddbe93e2505e8f4f00ec52db26ab411002136c1f646b1cda71e19480c767906a6d03000000000000000000000000000000000ba87b08173c841a2bfbe424584d4685c39bdd0f83f278f9fbafa8111102aa3acfad5aabbe032c7123631fb8b454255b0000000000000000000000000000000016c525c1dc247fdf34344168b7cc245579585fdbdd6fd783cbe60b727cd11ee97b87a86647f78dda207c98e65c2ee7e6854e742ef7c76ad438cbf30c30103741f57ebbcdca4d6c4f14e554dd1ed81b24000000000000000000000000000000000403887fd4429f44f8da7f17ca072f867e88ac046922ebe3e1e6c4f9d8e174399e7648aca924a557dbf7b29c540db33f000000000000000000000000000000000522324700fb6b2c43eb5b39e0da94cb60e234369543f530ea47f4aa510ec0fd79cdf4dd3ae046e21d78b9c0e35107900000000000000000000000000000000015e946b90984257ffe3814dcc3ef065fed1504f0790f3564c8bfad4e97cffdb61c0d73bb0b1dbe78c4266c773abd56b500000000000000000000000000000000078f604630074ebedbd836c463f3879cd5d4a2c947da0e47740ec369112f4fedd787ae59bea69aab61b91f05d92061036f4f00b2494a32844e01d0827ca78b06f5eb40b6769f36a04f20eea229c305f9000000000000000000000000000000000f722bfebd55f75f3bbd0a55492499c3a3f637ead0e54270042fcc88853df5bc5f11a3677efa26d31c28368e00c8713700000000000000000000000000000000182618bc8a4b3f6556d79848f90efd6883df90806a8358cb6852bde465a27a70644ac5d5040d4f64ec355763f1a384990000000000000000000000000000000015f717739a1cbb2eab30e7b1bd9b25f57ad56f36016b59128ea1f2089f2d1dd0128b455b1b0e9e3b320f68a38a1bdfac000000000000000000000000000000000b855788d6b6a7748aa923dea3163fe525a7b43f4619c1eff3f9219ec3d98ceaf34b97bfd19aa6f91f7fcff728728978191e47a0b0c72bd17319063abde7df51498cf0c980c46946bf80ae4c9864e2e200000000000000000000000000000000120048ace47bc1ab3fdc07713b91a9223fe0fffdcbeaabc8a61351d756f936e18177f672c5a4db7b9dc29bad16bb7c4c00000000000000000000000000000000101275492a6e843306f2927b6ab540d7a5ee925bdab40103b4ddd885e444e6a6ec2d6e99c061284a1967797d8a2e9e700000000000000000000000000000000002c12f17a5dd2c56aed0d308367f37510f83c94a4482e5f632161dd0517dc2d4f46a90bbc13034c63dbd04fe4c616e320000000000000000000000000000000000e4b9089155ce2178f26b058f4bfef57b73aafb83b0b78138a01890a167709f79100a1e4d797c5849473eb3486cffa4b7baf8816db56c0a602cfb4caa9089136ebde05722ad4838671e45ada5c716f20000000000000000000000000000000018180eee7e72b6a4bc2e60555236da335fe05fcbe2b3cca4937e73a550aeae6274122ba84ace78eff84d323b4196f58400000000000000000000000000000000147659347e0fac7a16c92950ea5fd115416072f339d7de3cc0f00ef369f5122ff050d8515effacc825c807f7e19650e10000000000000000000000000000000017bdbcae7f63052af9a7d8bd71dc98b6eca7ecf5eee7632959fe56ed51278099690c534ec33be4ace4612b0f516794aa000000000000000000000000000000000d6fa233be4d6d783bf973cca3740cbaf0f719827d7f9310f38d1dd9d1c1f125cdfca6d12fbf6a8e8104f79bf30b00647d9ac1699117bb9b8b90e2fb709eff4ea0f7882bdf6acc6885c9458703cbfb3500000000000000000000000000000000082f3beaafa575e86be53b4fe7b93835b00759f921933402282e5bb0e643a812e0e4b676ad51ff2c6f5332d777641cc3000000000000000000000000000000001760b87bc4d2c13122fd7acc6d629c9f9db9bc9a2c49634aaf33e258ceb3106bc2755b227c6660a1df1d92c60067cf5a0000000000000000000000000000000016a819d7109c9a12199eb98537a730908a693767cdb35a69b4c7329761939afea766f0b91ae405e273227330761a53dc0000000000000000000000000000000009d14d7138440349e83f5ded46d18b886ef3cd63e0e5bfa0a8b50985142b21a4733813ec347e40cabe28e6ec1e068c24a22b6c1a24eff71f0fc64b6aee8d3d2dd0827756f5c959f68f1216c2dea58503000000000000000000000000000000001676d7f489219b56c198f8494e156fc0672ae28dab20021b7a6018436c7c0f107efd2493ddc2a1cfb3ad490ef146348300000000000000000000000000000000001106e89fc098ce7bd8bead5d7f6432bc54501370ae6544f34cfd996b3b610f9cfc7ad366751ae1211b848aad7d93d30000000000000000000000000000000011f8f0bd037365b5427e76d57b018c1c644034b28d06c8f68c59bff45eb4a2c4d761d066d96c13f7e73dfd80c81704a0000000000000000000000000000000000fc826b5957613f35bfa36d3ce088dfbbd06c8f2e88056a22a9f35db561e06fa0378ccff29ba8b81cc12c7a504f8c704c0431e6877166686239f014008959332d9d009a801be6a1e68c2de52ee264bfc0000000000000000000000000000000014f0f64acb0d9638a68278099abf5b5da3aa087792bef15192cfe3689b69b7ec1aefbfa14e659358b5410d98d2eedac50000000000000000000000000000000015ca79c92e98cf8314a2f6319520e1eb7d4656ca6e51278710cefd9c768a25691fc58e983aaf858d3c8d0ed73e2beec300000000000000000000000000000000007a5192f1dc906693568291f163e9632c53e1f418a87cd25656064adffbf31863680468f3ea451fbd22ac990dc870b3000000000000000000000000000000000131d2e3f6956da8941e8340259b8a15aee9fc6f23573f9a348ee9a51bbca1308dc54e7b4675357e3a9c5971be3a5c16af833a784d22b99537236fb07ab7b59918783e35b89fc9692d7f76a03e024c94", + "Expected": "00000000000000000000000000000000163da4bf7e159e05eec90318a8ddad4a59fb02d7ae2fe18795d38c3ccaf797188fa16577e6a421ccfb12ba1ed573c4e6000000000000000000000000000000001256654eef3352b09e0027277aec042519d99eb2567fce2cfa50a0c251c12d3593604739128171bfc13b3bfd1ce8f9e8000000000000000000000000000000000b8a46123bc863bed525f97166bcb77504eeeb66d2db207eb8342a3d18f7f5a99910fae3e6423c6e84e437a2c4b24363000000000000000000000000000000000b73cf08023c8572f48c132add67dda7a15def638a01b198361b9d21a4634ba76ceed9819b37c12e24f148d255483856", + "Name": "matter_g2_multiexp_65", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003113ba8b216d933fe0c81f23f75942c0065d21d8f009d73b1f698281408874e33dd2750fd4298367b81827cf6fdad34000000000000000000000000000000000b8a921e840fc665a786d826f83ca5a9c8f00e7c802bce5473a7d1ebf63e8bb6cf5c4b426153508d874064d1f1dade09000000000000000000000000000000001492ab584088d23d3b0d1283904f9a8f29f9efe47950c6e9ffb9db2123f3f9820b906d672fc7f97f0bd38b8fc0ef44520000000000000000000000000000000010d321c2538f92aad4631af44ae39e63dc06becd2460f0cee0e526328d167fd6cfbcf4edfaafe32d13b5fe66c009533bb16c1bc60e1a9be9a82c93b7e0311e7516a57d687d8907599918df77b3b6caf3000000000000000000000000000000000ae75d01481a51294003041afc4802326ab878a3a75eafcda43cf873cc65e300d28aa986fb82a2d1d649e5be00f956820000000000000000000000000000000017640eeef8982250f88a4d187dcabfcc9adc3ee9194dbc3c04c741690fce5bc7cb07cd0b7c3497191d9ed8558fd0d24c0000000000000000000000000000000007527fd8dacb81b8d1abc746688db6a47211fa71556155d38361921c4bdb2a9e9921a3a540bcf55c6dd751b84c04a1040000000000000000000000000000000008de9109ba354d7426a5313d66cd747a54df347f0f86a3c0f99e9e4b68fc79641fcf98ab39fa23ef6f1a781c48f53f76cf301dfca76a83c70552c9cbc9c80cb20f0d82a70a9d887b04b150fa0764ce2e0000000000000000000000000000000017331b8367f07756e789f7edce4d22f6886656fed78ddacef6987a2751dd3d5d49011a050e7b2a3e11fc8d90266c9d710000000000000000000000000000000016959c303e11f23392f95c1402d1d1ad7f38343c711e96f18d03f832f76e3e81de789a6eaff797ae51079b13571334d40000000000000000000000000000000004266fd13db1ca80196a91263c79d1583b717fb61fd9ce5113e4cd94c59e605152b244e10e364b468c5a561c6fa9715800000000000000000000000000000000026f67cb263be83f3163856f091e9346651c29d4634e242da53b22eb6e66018d235b0f30f8833310dff9f3020e5bd3811cfb94c4e029a2126a9cf5561c677687f52059e4b7f8b7e7e73e5b1dd7f42129000000000000000000000000000000000114d8babd11c81ca2b8a7e193afbe0a8fce426b83996bae6f77201870e51c9355c319dd86b985272f73e0804c0f53700000000000000000000000000000000016f5ea7610891d0e72975816c08e6e25a75c7c42500655f26efdfb384241bbc825358a21caff347d00c8b2391501d15400000000000000000000000000000000199c8c74a79ee90c3606906bbb8cc163c214259e4d0127cee3283bcd9c1ebe4090ca7d7b180201910d3f6f51566d3bdc00000000000000000000000000000000032c785165ad4c1a2846e15318bd7cf5b42ce8b675cb18fcc4232e28701f225f1ea384b276e7a38b2c9e2e8b112f1911d8386fe6f4303959e58165b422e98c4813b1bad7808594473e4e66df09698cf0000000000000000000000000000000000842c65006caed9b53add048a2eea89e1b4584e1deb4365e3dcf8b9ecb02f337bccbe5d6929ef8c20461847f171fd4d600000000000000000000000000000000100dc23e6c1c6f6756419a9bad3133bba052f408a424c5239b8528ad4429a2bce64b72f1463625f7599ce43865581e9600000000000000000000000000000000125b4d71333274a16e52829ad5eaaecdda5c206063473dedec5a8ff4424def70e6f650926948dd2158b403f985a3421b0000000000000000000000000000000006a031e3c002702837e4ad28250b85cd94d42cf7b0d765b980fab95edded7636d13bdef1be63e66682c4e297d0cb2b0302e1c432f3b55ae87ab815647f196be3e138b2f6e9fe7acb9459650246187eb90000000000000000000000000000000003f7091a25da7d5afe6fa6b254604a1abe7a0c6ea11cc1a4167f5f648aa973d888383bc7e987b620d23e688868d318360000000000000000000000000000000016637f888efc3e057227cbefecb3037aebf8e330c3a794e51d691e3bc064237b98351beb746868aef977a83d1fe163ac00000000000000000000000000000000126d2884487984f851d1bd7d61bdb803321f263918e88e0677831563bacc9f5207358d1e9c76a5a25a66f0294f459e3900000000000000000000000000000000125c61b387a4462fa3bb2f06a4cfbd7df082d20cb23ee974aece2ec9a3b0c084d13a7ea83725a05d9f31b8033d2888ef9b0cc0ac499dffd627f5d19b87817dcd67e87561d5244a4b5698265f8c5b767e0000000000000000000000000000000006cf2bc7c691c4f8a64d0aa1ca3760d715b3188a2dd299ab09c723315acba8b0b4bbee819ba06cc564f0c875a63a415b000000000000000000000000000000000bded3d695e471f30f9d723f55826eda112eb0e3fbfb9a377cfa07d6233ed84108b92a79bb491a2971e9afdf83db8e9a0000000000000000000000000000000009b0e9928cb267508d4f9444c6ac3dc6f64f49a70c82c0bcaf4022e97854e5d9ec2612a2cd4d67642dc0451583bcb24d00000000000000000000000000000000009347dcfebe93a2f7674ad02ac48794e7cbffb04dd85b0c8c192fc85cfb9cef40fd11def6f63ae9a923960424eac6a02f3875f81fd39c9b3ec74eb269903dba4173d8eb0e41a196d3131252207ffa040000000000000000000000000000000013e8215c7bbdca445555c9fa0ae44e1905703334bade3294fc047ec262b9e4903880d52851967339eeadd666200b25ae0000000000000000000000000000000003b0bf4498103ac03601a8594b154b59a2a93d663f98ff8dbd2c85a1902e572a9456c629a12651aa87a1262102e1c770000000000000000000000000000000000e8bfd7d3fa0f773e6bcfd0d43a5c436862d1cb6a4ed715093c6782cd94699090c4bde597f65768e963fd0f8644e09b300000000000000000000000000000000064dab4d0d0c6b94c58b067337f2fac7d0d922cc822562b6bc941a794d96aac5ddb83d1d5844440d21d0a72a69303b8b2d8d4341822dba68c6fd58cfebd07b134c1d0c4e32ff63f7d59addff4df1ec3200000000000000000000000000000000098dd9a20f84fc26e78993a9de4d519aa2f8d343fbee501af945e5943e88425d29beb7ae54481b04175a07bf69b260a30000000000000000000000000000000007ef43e7a56e4e7d532420e152ce566d9055eadb4ef13d5698c49da905a4977fa8a7d3f51c8f5275582e1647984be61e0000000000000000000000000000000003755ee4432ea90f2197c7cc2e191dbbf7950c52a2c1b723f26d2aaf7a38c1b97efa29a312fed599f1199cf186400adc00000000000000000000000000000000150edc463f0a55fc70c2ffdd1f73a3abbdae459eb16adf79e96d18849ca638e6f41c6805b73755968be5cb110d81faa4efa3dab1d7cdf949bd938ca6ac371f953b3bbef1aec7ae76bda37db4c940b3d8000000000000000000000000000000000f7149602cbb3e5f2c5f8edfe59fc0fb8e1f03f89ea192bfe3990d87ccd28d4a80d7cd3003a8cfd669e1b6ff7e3cc5890000000000000000000000000000000006ffbc965bd06de07d8c0a9db8db5ab82d5f11afa1ad8eb92ed4453489f5899cc8c46ff02743956bed81229f64cf6efc00000000000000000000000000000000164cd3271ace4809eadeb1c0f769094272f3b66968690339bdb5da92e920cdc80c9d577ae4fa5b6426a5a6f46fba80bd00000000000000000000000000000000098f0a14a511ff424847d2b4d1b80a049b1f05ecd40af96b7a81def54486e4969011c122ca7dca3444029daeae2ecfc79848d3c53632dc461619c8c522013b83550ef3dc7fda197ba37c9cfe4340f5a50000000000000000000000000000000018409c0d0f37f4932cca87e24eb4d55e75dc98f938420ce036d43689fbdbbd839dc608b21d12a8af1d0a780aeac6617400000000000000000000000000000000109f2294669422a4946f926b1f106c2887893a042e3bf900559429c7fa484da4909216c8dcf826871534981021256741000000000000000000000000000000000a1ded19846e603b958d0bdcc9b554beca784b017d2a35ba117890fd0dbf729428bcd9823c7a378706220377c82a215c0000000000000000000000000000000000eafc89e30e4fc0544497e27674ec5b37ec0849fb382e608e09d0c1c94cb78bcb96ef4ea48e374aad1038881706fbcfcbfd192e917f2e0c4d6253c4e4755f30812149d1ce1ee4ae5540faf1dbfbc13a000000000000000000000000000000000e02cb3e099792ae7508321ce7afa323fd499de90c4006621ef5ce1054d0c934ae058a97ff8aeae0c88709c4d8ed0adf000000000000000000000000000000000e19318f5890320f17d5243adb4683a97e3e9763102c4fc93e3c3e3d24f4f61e0500be916c249dab00094b4ab048fe99000000000000000000000000000000000989faafcf6156472368b282313e076613cfe7ff135eb131b49e58932cbfafecf6585009d1f17ff8941d7f871be23e9e000000000000000000000000000000001167419d097ae8b96993b2e67da79b658adde1e12e43c71f27835845c7077f385612158d3e59fe2cb32b9418463e672679eaf11b3a30c7771ce63cec214416d798de20432670280d997b2f0631007d63000000000000000000000000000000001579b7d03d3d2c8a280e8ca113bcc98afa6a2705a5d228d92807a85cd5a1ee97510f632293a478c3fe0bd383f4b69cdd00000000000000000000000000000000107cc2e6bd02251bfd565b4b848adaa84babe9d4f083e827ceae6bacd9c9c221f0dbbef53278175bf27ebfe5949fcf8c00000000000000000000000000000000018d187c566690e4edd8d8abe5e0a448e352f622c96680378051228b6d081a4914aa51383326aedf45e351612ad6c5d000000000000000000000000000000000197427117a52f82aa6e931ecb0c5ffeec7f73ee8f44c5816935d26c06cc8285200ff9240d98cc244708e00669460f98b43077447b67f65e16a8aeb3564b2d13822e478dfb4a82a15a1c8fb7cc8170cc90000000000000000000000000000000019bd947df5a437a7f1ca2340bec628f2783cc1760dbc4a97ae10093aedd9f64e25ba79d9f4ce678f4fec91a3b1eef2d7000000000000000000000000000000000770e0c39988c9d8eca076464a3e10e274b06b1d2f6230e6dbd8dd59dd9c062f8958c6870c44ff196341bb9f65b8db38000000000000000000000000000000000a1833ef19e2b8e31577e5cd26e0a7fa46a5d25355d8b3dc0605f53714a60423556f3bcf17649745695f68f26570de0b000000000000000000000000000000000f449aed4120f3bef05506f2463f4546c7ea67b9e9110d3942dc256400d063dcc571305b1d4cd2bc3f18cf25319286e8eb64479b496c17d0587f6f26c62752881b6a9228643e8c43f21c441eeb643107000000000000000000000000000000000c1f9688ea64165f894e85b21761a9b2bfce891070103119ae71ff7acd164a57b0e054319631180c22f19eab8607f5b40000000000000000000000000000000005ba18dafcd3552af464acd469b133896e90c9ccd7e3bfc6e05db883f3c6aa1cc4610ec47f6354f6a7cff4385c56d2b3000000000000000000000000000000000fefbd9d78f48683b378d2d6311bf7ffaccaf7aa73a0bb4ce019a0c1d2e1673e52c724bf3a782729ec23d258043efff5000000000000000000000000000000000ea47ebbe3e858c5fcbf5b0cc9017d6ea23bda36e235d2aecbec827fdd2e4b042d1108d5f645b6dcdd786304e6bbf81b52b42f75aebdad1bf433917c025800c4f4e985cc077db3ba36f7484f95764e89000000000000000000000000000000000a313e1bf72d9a176bbad609631192c779e94c293463507edcd1c38bee8f33cfe6104d7169457ad5ffd9f045fce1cadf000000000000000000000000000000000af8db18938c51742b351fffddd74bf1137092ecb50a7e749391bacc9c1a19c7b9cf235b52ed577e7855d4ec1fadd940000000000000000000000000000000000febaa128de79274ef11d3e6378809d5b319796c653604723693c335eda175014b645604271429e3d449e756c85bcf6f0000000000000000000000000000000006adb29cc4ba053fea56d07225d2f7735651c0046f5cbe4a350dcc20431ed9457651d46a5d23d946959cadfc5500b7eae83106e9ea63791eb192e7a035bee27bd049b3a37f080076146eeeea6a769384", + "Expected": "0000000000000000000000000000000019a5b588aff8853adcfa959afc5135807d00196a75acb3536ad4fc9a9df3803d919a2de7cbe9ff762913225577ebdbf6000000000000000000000000000000000ac8bde939ba2f164795804d96dfa8d3a1c4d9e4eafb000cfccd956c24f4d594b30bbf961917f625c86270cbe164cc5b0000000000000000000000000000000002de09fdf52aec0b91bbe99fe2eb9043b19975c6fd503815264ce030dd5e5444f0f4275ac9a07a49de775335d52ea3c40000000000000000000000000000000012457bb55876c482e5b907c765b476dfe6ebfe8e588cb7f630e58f78942bfca57e6c0d5d7b0ce80e48960e297863d212", + "Name": "matter_g2_multiexp_66", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008f3f1f04fb80a23d348e3e25dac1d732265fd4a71ab8dad3718d268e49c79578e8e1ad1720e70357439e57df0791d64000000000000000000000000000000000fa4c15c76e395fa706a55d1909ede2163274a68b3e7afb8d2e0bb176f60c06f5a921c9ace35bd311bd79ae86340ba5000000000000000000000000000000000173633369e00c8c5528bd5ccf95c6af8b012e5a31941c134ad4541099c7c33c5ffd29a5a31e18be720f7ae85132cd6cf000000000000000000000000000000000800f5eaf7c8b1dd2787305ecc637a0bba8eac807a7b449410e48aed3dae2b4645b8459fcdd477fd92fa5ac6291b800ea4d710d2f632e3ed0ef69fa0219e16ba30d3efee99386f1a5c921f4548ebf64b000000000000000000000000000000000ea8057b2d609ac2130b21e0b4a41f0aca20ee7751f55d816ea42cfa4612b67c3c556b01b0bb1c5912a74c50a420407f0000000000000000000000000000000007fbccf8ce8d1a92756fe80b15c7d9342af4e166d3c1c7e35ea2fac34851cfd983633270c877224749365720fbcea54a0000000000000000000000000000000000885e173b73118721d28fd26f3a9c562bfbb878ce71091d7ae4b37c1f2625777d67955a2b7458af71077db7557171f2000000000000000000000000000000001754edbfc3f2af94c92e6754d6bb096bbc4b39bb1128dc6bba8b4d4d9fac6649598be90b06b9d5db44c4e77c0cd1537cbd9ae4597aaf582857b40096360ced0f044ea172551c6f9fe3a15e0ce290b56b0000000000000000000000000000000008a1a751b5f9a08e2bf5b2a58f62f0af6b8773f88e50f658ed220c0134e83c7031a288eb50a8a35016d2362b431d809d000000000000000000000000000000000d7f04d4a6c36cb3d105dc3915cd5d57f56692132681b3abca4b00e078c700931848e34ea1b7ec663f3886ff766fef41000000000000000000000000000000000a06c3ac81d6d0466e1ef21115150d04c8bd6dc3e4078e46eab213203c3226bb0c6500ae4fda591d6b8a791de598edb90000000000000000000000000000000014d849ddba2fa79b6a7107efeb46e9b6231d65384c69ed183acfb922d55b790d4fc7546afadc190b76f7da00103ef565efbcb4bad99b419820eec388f6f62ac8d87866d7beae6d431dfa48d4243b4a4b0000000000000000000000000000000014dfcb5fdb38cf09c1ecb284dd4f2de0c3d70f90d7c167a442d84e9a29bf43be62cd319b2dafdb6ead2c6596443a00090000000000000000000000000000000006220fc05c53f48e7e4104422b0660ab67fd88a695a201366de570f0ac0ad30421d5e37a1575e6b5ba35f45b441b297200000000000000000000000000000000077cb8ec1cb83c4974f6452ce0de630afc82e283eeb55d3b7e9969bb44bcf0404deae617393f82ac228b836c3cb6f95a000000000000000000000000000000000e2bdf539eb45a125112836008effd104e881aca397457004fbda4a40d152817801bd259434481f0509ab1838cdd1fd060d89acf5b49fd1f70fc54756c4bc1972cd8818e36efc37b422ba6a9318fa134000000000000000000000000000000000a09843630131cc6feeeee8aa8214408235655e4733badd6fe20c5cf1e45f6a61a5216e0cde937799437962706d3bfe2000000000000000000000000000000000ff518501614ed4a199ca9e9aad4e8efb8e9cffa9b4fa683093a49cef4669198a7893db998d5777f2cc8f4bb130c84360000000000000000000000000000000010ea66fb5224f4508ec100cdb611be133c4895a8de1b4c475b097494ff0f1ecdc1bf8fe467c630233cac2ddc07935fcf0000000000000000000000000000000009d22c0a45c82b0a19beb94eda0b93cbbe1f2e5f2d61279e1e1c93ba073cb766f5637195e6964a4814e588e44bb03f03386af376b9b393dde994da419d1f7aab60023546647f7b069ede939386bd6ee80000000000000000000000000000000015ca795fc7f0d169ba8abdafb1dee80b67e7dc616e824959f84c61284d6b2e0e8b9f99b414f5bd96d0e59b66ee706fd800000000000000000000000000000000042f473d1fa228961aad526efd003461935954abaae347dd6c9bc7fcd68b5f5138e57ab2a160cb19d1983089b58b51ab00000000000000000000000000000000188eb160cb968b4b048ce14bb72be27c228df1a6c014fa7dbec09a30aed8c71e8da59d3d5f8073b6a7d70d94c0e59dda000000000000000000000000000000000d467e6b05f033f3923667a82d5b489a5c90c99c5f68078aec700fc67a83d9bb4c09f3f00b9fc2cfd62bb098f885fe295ffca78eea65c00e1128f8dcfc96b39af1c4472b461ba5262307003bc972023d0000000000000000000000000000000003bec45d94f3073b2ca54d6332d36fdb8f5c801d9f70ccf6e3666b66ee06c0fdfd741f74cde1997aa205fb0318c9c4760000000000000000000000000000000014009b777b660264eedb35ec2e13ea586aa9438c47b3fbfd095ea3d8688a89c85bb4052bbd3edd450c19acea6372d0070000000000000000000000000000000017f26d3cfcb40fd6b4f3f1acb6d47a9b54c232aee484c7a8992a3d1accea794dc384fccefb0418d43e1fa7b399bdacaa00000000000000000000000000000000153c6cafbff3c53114c96d8caeee2880dc063d7db5edf5f14157117387f368c76b739553542bf6a9bc4ace3694de885a92837b4314e63ef5a153ea2ec4bd373cc3cecfa3e892c3a12aaac8ddcaf5905c0000000000000000000000000000000005d2481438c03493efc9f1e8e9ae6ab05b7430f7fb82e108aada0e886b14d769969d54b17b31e5bbb63d40836748f541000000000000000000000000000000000971deac599b2161a4baf1178feb81fd4798ad5cb063b1a0cbee7cc33b8fcec6c3f43d1d46d9ed45555187db636af99e000000000000000000000000000000000222acaf8df647744859e04104a5fcd546949feff6244e192a9031fc838f368aa465a3799779c637ef0087183f30731d000000000000000000000000000000000b8e8f1889816f89401b070db687aae47f7264c9be192a8d6e485ee71a5a688070d57ad8928d09d9a4925f1050e2c69e127ef2309c699a3602b0d86a070baef0eef90f539aac3cb6ff42cb19f284bd99000000000000000000000000000000000b8a5b0dd422469a8d6d7603e9f3179f443ef3fab0016afd94e93e2ea9e84b332da4b59f23a5257b99460efdf7d2aca7000000000000000000000000000000000c28e7068769c3a79bb8d92c3b89eca5d6eb42e3e18c2a7154f43a671f8670f878c4b110990c2e2b163ba4d1155319fe0000000000000000000000000000000001804302246fd07d86f4bb23f610af38deba8e324cdedbe5e61cf0941281cda8fb5dc211fbc0ce6fddf30aefa9563a0500000000000000000000000000000000015813fe0d6bbcfdc8e7e40b6141db21e1b490d846ffe82eeb3edcd9a024315193259612155b0179a4971e205738af74ba0f9a93c2fe35877ddccee5da39ce5ae60a6a19e72481319e3b3fa2eac614890000000000000000000000000000000011ac1ea4dad0f650fe0844ac3ab9434ebac6eb70a5f77c8f9c892cb4cb06639a15c63a9b820ef8f7a720040ae5b9e49500000000000000000000000000000000117da7999552e7886a25a939ada0944cdb15b5c468e9d1c3bf5b6af920e470bd648d24f3cb7f91e670f57a52cd65f7b3000000000000000000000000000000000a24147ef5f2b8ad888899c1db8df0a601eca9d76f1b934b1627e7eef3efe542f51205b96b5c00916688579ece81336900000000000000000000000000000000151863d964b12287ae4278c905341124985410f1ad6a72bd5c62230b7d8b0cddbea0c62cb2a7147afb5bfb03348be53363da2f227d636f10e814e360c2156e686e26ce3401dfd15f47c4ed277d05353f0000000000000000000000000000000001d32ea5faa6303c530790146df7cd5cdee93c0933b4cbc1c2b8030bf0a8d2600dba1907df1756152625cfccf8cc7fa90000000000000000000000000000000017b05f549751d090f42ce8a3ac5d959cf988ecdc485f51734d52c40a3e22a097917345978209fa74a0a05be0a66e5c6d000000000000000000000000000000001481fab7750380626b174602d9fcbc97555c516f4410193d2849443cf25ec22840e4fd00b225f98d81b38619e8844ce90000000000000000000000000000000001d56434066551c5bfbaf8c9007874abe57a6f78de9355a297bc117f2bc5e6e3f44b248037f400f7caf83fece0c00ba0ef79e3b6ce752d140c3dfb2007a08221d989038c921efff3bc4e150a6155a33e000000000000000000000000000000001667f1400973598ad3f56c2e49dcb5b556cc38ee3e5801ac4943f3c4554205d8fa69831e582a084aae1ef584feb0a1880000000000000000000000000000000003f0bb26ea548e498f05a5bbda8b8e536613f10e7165607ab77565b193f794664c8ab0a5ae2368d7483b77bc1173d14500000000000000000000000000000000176d8d294b4d975629c6a89bd6d45f9c3924a621259ab43d33a3d5aa1f423b68e3cef96dc103494bbb9036436c170f5600000000000000000000000000000000002f8ed87c584e69de59cdde02b6de9816c31a6efbebafb6ad9cecaf266f5bb9c8880f062dbc9235c91c668bae5051f4bc08091af8b8c6ea5c26f1a7d795132521350d774042d3a8c0523e86fdd23a3f00000000000000000000000000000000085fee95b859c52e44fcb2900a9aa590b1a5c2f981a388d6ad7b81ffbfe033f648c4a84e2119cb0484e178ebd3e220d100000000000000000000000000000000171e6ca074aa97981d2c2ab000a8bd12cbd5f5d574cb83158a6ed734e8f9b7aa4b74aaa43b7aae31b3f4fd3d82fd30ea00000000000000000000000000000000004fe6099a52fb491a0624a8d787d95617f6c64d16d20d1b3769f60d4721f7af66d7e3e905b3e08b2946ef7bff4806ed0000000000000000000000000000000004d3d1a56af91377ae6b00e192ad64fce6dd43a37592fa8706c9344b3d96b1f930e03be85a5ead3007f9016255d2df7570363101b87d685aa7314f6569fca0775bc6aaffabe136e6c336e8fa43dedb8a00000000000000000000000000000000155830eff04ec2f4dfca4f73403e408a68830bc031555433fd38ab3ce1035b5f882bcd6032aba69ecc43625546b4a3a8000000000000000000000000000000000ed5b698b1ae23769cf5b6dc2e39f8500fd8a881eb43452d67c6b84ef9f0b3c7d81db1909b646e92412acc7365923a940000000000000000000000000000000009f28ec2f949cddee9bbe2fac12c2c029f4e472afa1ea56d0edfeacdeb9f43a4a43b79ccdfbe8957b4cc16bbcac1857d000000000000000000000000000000001474b435131301db9e232ddf54569ba99bc476200ceefc15e4aaaf1a574c1de8bd2d63c8280e23127a7a036acae223b1997ff3852cd97c3a65bce9083ff66197fd5c70894641195514d556102f091e8800000000000000000000000000000000168475854829d47356d9a8dc13a94e8d169771ea0070d9ef45e666d5378dd676d603c2eb57a3cda072c11e0926b02d650000000000000000000000000000000008b493a9f4c19831341782fe6285db2f7e8250d72952351ddcfcae6f22a2ec0935e29d396ba32f72dfa4067d0e7ce7cb000000000000000000000000000000000d9e72e22f2a1522babc5f2e8dc7857ee690f60f7843ffe15a080d56bf63db86f124cac039cbfa16fc8ace4d6268a1180000000000000000000000000000000008f3db1f6c0e5e7b3bb27abd34bd877cc3c373c681a3abc88eaa91636924ee477ba5032801dda091dbc51936a90c84685ff95dfa306f91196849d752569b35812e1db7946708cd06df9db9ee75447bc30000000000000000000000000000000004e34bff7e9e3ede02df950aa0e8c5f4c5f85cd3be89d211e957a7de95b8e321cc11400c3dd5b2ba0d1a3008462cebe7000000000000000000000000000000000fc1047097f01fd2079e6357ed379ba39107ec41ed6c6dc17fa6248d52be2b1cc2593c9735a6cb48e6d6e0434028f755000000000000000000000000000000001896fc5e990aeb416cf21ccc73f02c41d019d0a2679bd533d0811b7c16ad3ad3a6988170fb2db030b5fa7c3e4df5acf4000000000000000000000000000000000b70e14ce1b54d7913b9f3782b2b8ff249967a6b871dfac7f54f959954febb2783cf20e20d1710e5526ef8aeafecb3d603c4308f0467520343825a91c0421f9c9c9d06957fa2fc051970f14085339e26", + "Expected": "0000000000000000000000000000000008056d4dfcb593c10a877cc8a4accbf58f360256b76876ed2b33a07be3110f8e295ef459dd6fb10d12bd02a8276351f50000000000000000000000000000000005686da1a0da89074c6b13fe9913f5cd49e0ecfea46e06493510625f1393ba4cc2e13f023fbc7ec2e130bf9a4f7483ef0000000000000000000000000000000010cd660001f65876db5b2cb1a56d85171d4cbf037f3bfb0e01bf4430c479237cde5b6cce5839a4fb22b406846e757868000000000000000000000000000000000809d7711211d37df76cd1cf71001cbf02c76df67c83e4eccea3e05b11d196b5d52ad7c3d0a00d9f0ef5b018717fc3eb", + "Name": "matter_g2_multiexp_67", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005d6cf50e3add0e5ac3016b394ec363d6145ed66ef56b07bcd33c90600e83b4277558695222062e02d1e2b0693858e73000000000000000000000000000000000de8caaa810d4ac39258e3d1656bf7f2fb7853a5963ecb989346abe90d5d35d3662f6e283cec7bc386a6a8638ac395ed000000000000000000000000000000001849ef86eec16b0612f214c5ed52c0d50a90bd65b623402879f2654fc578ab680d49af9afdeff546702304597a20f1fc00000000000000000000000000000000168707730c4e74eaa4e85e48e7239b9ba3e8cb74c24b7126a685da0fcc963b9f9180e252adf7d8c521deb1a2ce0099582849fab097a4f71bdfcfaf435994a0c6ac3671a4a9ed0402010be83ff95228fd0000000000000000000000000000000007d4fed2fbd9e9dd19e0af5c52637b2cd337e0bfbcef0384f182a56189a7e7304b9d2144266ffa79044be90cb7ede1b6000000000000000000000000000000000baabe8c23a10cfe85494c693d1b09fc8e43ef5f233052d5b6294dae14b4ff9e5ec240a1c00a16a9ddc27cf7b53bcc7c0000000000000000000000000000000001c595f193229da9acff04ef67ca444b0cec75db5b2c1921502e37eebdd2bb43ef47290fc6f1980abc75ef4c50034df00000000000000000000000000000000010fe7f3110ed3a240366ad7ba31d56ab993468dae2dc1b667a46c7759baa37b865d02834e14280a2ccc062af5bb2b7d6e6558521e301eabf09e80a509b46cf8ec118ee8586f4e46a7313a96dc37ba69900000000000000000000000000000000150350d8a771c79268606d6a5e1c147dc9d92e63fdc60b20be688bd52eac697aa5d90fe1b7b91321b2af87c47ac0d5060000000000000000000000000000000000fba8f4da448b8f2bbd99014bee2f9c581f2a974bb0b54f41a84a7fb359e9dbf88ba59a705504140284d486241e94e80000000000000000000000000000000003bb92d6a603bd93f8e987071a7385de68d10cfbde389eaf01ba6480caf1ad8aea03c84d1889b7d5b5c5f72e62a2d75a00000000000000000000000000000000193342a9f15109367030724946342e564507b26971caf75190e0b209e429a948d8b21ca16041a01010b68222db66a16b8f2f7c525fc0f353700fa823a5d32a93189699206c5ba5ed271a158ebb47674b000000000000000000000000000000000bc4a46eea57231cc64758560e3032a8ad8f1907b3cebd7a8faeb98c4216cb8a0c8fee09929ecefc4bee7955f4e799ba0000000000000000000000000000000009f9486257ae3f94a2ca48eb203e2ef44ecf866ddec7824e1a4bb3b89b320c38b3c46de8202480628c53c415433383a3000000000000000000000000000000000d8e2b5d0825b11344d16dbb2cc614c6b84eb1cb43f70d70e272123867b731775b429aacde611318b2700aa567a84c7a0000000000000000000000000000000007f720929287a70873e9f2f2031b66693eaa6e604668219aa5aff3f50e720b34c5fa3f5c66eced5c3e86e8b34a81b984c7e8adc0f0a042a32c733b5c3356cf4a7d648be51c1d78534ca65dd43a0c13e4000000000000000000000000000000001537ed68e203e56f31498efa314322694ebd74cd1dcc3145d534299fbdadd4256f20b9f74b895931a60753bde6ff9030000000000000000000000000000000000935c6ae847aa7f47bf427988665e5e18a32aa869e196cf9d5bac1349c650219a8d20e01bd8d49bc7e4bb8d464aee84300000000000000000000000000000000013e0661d7254428861cc3ed47c3fc9daae8b86db35d1c64f8ced3bc18a89202825f13163ff94ac0ebf046a0a99727e200000000000000000000000000000000039a6b0b2cb91e460d50eaf9600c29fd4f82a81c283ba4fbd9a7d103efdaeb1e82947f5cc1a7a1112ae6344c51119201650081a6720845a20164ef7c06ce1e73286a32dd64efbe57fe46765008dc9dd500000000000000000000000000000000071a6b0267806f2b9e0ba493960fe0e43f135c739a54c8daf5ef9ee348a281f19876f80c0dcea59dfe9457b49809c12a0000000000000000000000000000000009ac83690c30a4afd78f94b2493674668da4efc84007d2a08fc78bba271ed1f43e2a9e5909149bf0811c44dbe07c52f9000000000000000000000000000000000f5d523612fdb2e7dcf5da56720057dff6b0b80707cf5924d146c0c072edc0635c73fb04256e06c7c9355cfe77a7af0700000000000000000000000000000000168431fc569869ebba9b4a72371e3df232545b5fb95778baf3d9105930d9a89b4cb7eba430e9162a5589c7465e54ca3ac067d18b95591f7f14261f95513e1990f5a4f6908f94a015a93fe379726d5120000000000000000000000000000000000ce836522b983fe3ef6a502a0de4c599fad8a36a60d914218d5d2cc4d56d69eed8d27b2d50899639d1a0ea9dc7597f900000000000000000000000000000000014110ac048ac4c20e53f2214df8c06d77f0b3150077d027691cacd3715d4630a387d5819ef58eb1bce2e8669be330a3100000000000000000000000000000000178e5cb42f56df2f1b255a028a00df96c02eab0a79aa0ff3e9772fbe3eb62174728259b3a15e356e6d9666eb65fd6b7e00000000000000000000000000000000045197f136649b61d6e0e7b9a56674e769e2d26716ee7a63fd2b83b767a9ae96694e9cf81375d0377a1b27ea6dffaebbb448bb01a1963bf74e0fbf99329005af8e932074358d855ff43c213e02bf26bd0000000000000000000000000000000016a6a58301c243b0c59d6934bd926d6440b87b49f004f411ab0fdd924480175052f63f594c18007359055dc776e7f2d300000000000000000000000000000000176db4845cad46a13d9dd0f4077cd22b3458f64084c7325e9885f8ca341ce3ccd4f634f41efd6a70f16e1f0c9ae103a900000000000000000000000000000000068ba68f652c4f072a64d56618f93a1e148274b1b835433be878c06e11f65ff45b7cba0f67fbe80327abace68396da7e00000000000000000000000000000000047a699487964c98453207c98cc91c980c1ed37dc26e17748e6ee88e5f4c0ce424d87c82ca6db2264dc8aa9e437a5f25441fc4cb1ea8f86af8839aa40c35c0706f3a159b4bc902347009f744b73cee35000000000000000000000000000000000bf7e4a9751d4e3baa7ce9906f4378764e5384136944f6d3f3074dce66ed017759783c64fc381f0dd7512d6f6e55b4aa00000000000000000000000000000000006ae2a4fda156818cb5ea6120edf7ea39370eeecc3f306890f47a6dcfaffccbb69fd21f33fe491b7065838b277ad2b2000000000000000000000000000000000d3ce00c2f5febfeb232dbbb74fb0405bab86474d1d9c545c93b65c7892bdd58aa56225641074ec9b428efd9063085d00000000000000000000000000000000002552a8c1848fbefd6b039d6c4bd47c34dc34ab307163c4f6d337946f1d1b41aff2f7e37f5fd94012f0ebd21f97d18a83020a1ab853ef2018976e43cce2724105a2526b28d23b0226c49ff3d4a03d40c00000000000000000000000000000000105320cccd67b6ea78e96e66425a10a6911d2d348fac3231af583146273609fcd7fd27a19d4614fbdf05bcca0f92b927000000000000000000000000000000001204229ee1f66fb5a5dcc4ee978327e35d703ea310901be9c100af824e39d24a028ef8fce42370e5d734df02a26c145e000000000000000000000000000000000dd21f31f116681c1810bc36141cc18096cc113faee7db2c189abb7a746e398e272fa0cc61286aea0a5ec4008c8d03b60000000000000000000000000000000007911297718e98588844b9022c825bc4b37f2af30e1fc2d9cfb58b4500dffc8e9949afddd051e971fe78d4e1e7ad1b4a82702398b8c95c3a8cd163a8a3cb2a7a04030ef99404c325115e9a9312e8c1bf000000000000000000000000000000000760787190048e6ec8bc3bfc368f010e2f8aadd53164693a62b0d7207575bb2597bcec4bb382c57fe9053e90fe2f7159000000000000000000000000000000000ec525abbf13da64a8093c5d3fb800440f4c1fe798bcc71eb97bf2e0aa9e8be4b08afd2313f9143260058132d2607141000000000000000000000000000000000aa12c902084eb843daf7b351989bbab7a86acb62eb54eff0c7599bacaf44653c9fbf53f47f6ca72d22ea1671842eca800000000000000000000000000000000082f330d9a693f2bb9386fe5274aa79ac73a17688821f3c705120fb2aa76903627786a8614053f21a93e0aeb555de64e338468a325384a9367c90bd0450816a22849b845aadaf187c27b3f09800e791b0000000000000000000000000000000002ce7f08b8d5052d8bd07090744ca067700eaa1db61dad3e5086661850337bcab485c15fdd36c309a9e5169fd2a2b55e00000000000000000000000000000000073fa834cb4dc4ae120e738059749bfbd86b9e64fd71b1d372dcec8474f3341137ce8cb97a38955e9081f9bd5e07ab830000000000000000000000000000000001568df6806d8c3cfc9231802ebe5edc5d505198747a0adc24d0ac59f28d32b7b379d1f2c6b8352389057c7465692ded0000000000000000000000000000000004fb4b08a4fbfe197e924be3f7213a769a2bcd24109ae69a32a197b6212c5f50dbe8f46f5ab6044a4c779cd3e09d13bdd29136cbc4764346e7ae1af92fe64560f453821f96f32a42a2006b6edee75021000000000000000000000000000000000c07ff656904a47b0c7bf77540abc47cc6eee3e76b6ff0983151de9468ce3a860c427f3d5d489d096264159ab0567cd20000000000000000000000000000000008cce094ae1d9fff246a0e76cd67dbf9808c94554372fc4aed4879487ef240e45047dc201dd8bbccb613feb9c4623a0b0000000000000000000000000000000008a25297940a1bca1267fdce450b0cf43105eb4a21ab14562116039bc8379b1a3f58a7c117e9ba735bdec40f772465300000000000000000000000000000000000ae17a9b1fc3b0b7803ef48cb26643e8e78ef133f94bff5f87739182e662e2641e72383efab1f3ec58fa20fc816d56c675a59418f1462247d3bddda5937553e96d854b5df64a68145a193b2b1a7eb250000000000000000000000000000000002357e5a04b0dbd7f9a1709bce9b7afa12b10c7274b440b4dc3bf51a801d483804b1b4b9a096c3205a0e2aa7c0100c6e0000000000000000000000000000000002ff20af67f126c80293e44bb3c9ac74a94586a2de4146588c7ee8503530398eabc30f7e89322727739618087fa55de50000000000000000000000000000000013c6d06ce509fd557946479f2768f62474e6db04b2c92c5cfa86c023f79d05a387bd4c9aa618888476d4ecc93ba0995e00000000000000000000000000000000000fa477870c952f7506b879b17fb0a1c31771ee832ce0ab21a513fdd91b7a2a78a03d297c55558b834e255462b15520544a345719b40f973398a6fdaa2044037cacd7f6c361921c62053cd51f2e5ff700000000000000000000000000000000181336b8fdc03c02e23cd06ac975855caa2bbc1fe78a2fc7a9d0963c90a1f1f9330d50b88bf2526db6132d336ea5b8e6000000000000000000000000000000000f2d94d3fde2c0f67dae5a6ac12f713ccce2621303762e01961843eb9924d1d3c732b4c977d8cd0e5668adcd7dbf7dcc0000000000000000000000000000000005ac9ecab11c3368c75b0d396889dc34bd43ccf550d817c1dcdc7143c15d5c0e241add37328a7bd8556fde87d75d67fb000000000000000000000000000000000184704eeebead43f85b32d7f3efb9b9469f3ae10b73a2f034bd33e6e66da0bc36597d8e29ef5585443a655e24ffb68fbb38b4cd72eb18c3ac87860aa58b4b439712562f742f112b5d769415e9c19d0a00000000000000000000000000000000046751743f8f747e378738c265c1df3a368cd9570a2bd7636991045974c34039161fb0eddc6b813003e0908915b402170000000000000000000000000000000003341bea6cb81fc5e7baefd386a518d17a6f752c0e1ace5a9580a1b1649f5501c7b4639ba0cdbc33808d78b025a31f190000000000000000000000000000000016e3b9e8e189df73574a00a721440379589a7a6df09eca9a790e04c729400323b2110f63d547d83664c35227bd15b5760000000000000000000000000000000005ebd94e4640344e99e7e0f1619c6288665c985b90d99921ee61bbfce921265c4881a7e1034bcd840a665bae44467f5a94a849f6fb5a53bd5957e53ade1baee05702185b4d0fbb7c1cc0f46cb75614fc", + "Expected": "000000000000000000000000000000000d993522760839abc960e99d62dca1021b52ddc8147929c4a064ec72570ffb3793205598cefab8490446453fb6da231600000000000000000000000000000000105db1e83fdff735d06d34574f962e70d84e2c1ceef4d8a8f14c2673633d7dbc7b97ba6dce9013f06fcfb134ffa2ef98000000000000000000000000000000000363be663cb0d36b8eb076df283b075ab9e568e460be804f197c51cf7ef611d8783ced304407d4c2540f1a4a04c18467000000000000000000000000000000000ab2c00473a2267682ecb356422aeafc893fab96a3bd27ae58d9b0786624c8fde446cf68bf8a003d9449702e345b1ace", + "Name": "matter_g2_multiexp_68", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000a575d896b06c5ebd7459a70b9321cd0de082dce7dc0ce7e39581751d01b7db810bca80f39f521df0bf70ef642bd66a000000000000000000000000000000000ab497a9590deef40f6fdc0d4db2ae7b6ad9ab59f112a5a0671b48581f1f2b6a71602c73784ca6c0effce66a0a9c6500000000000000000000000000000000000af3812439e44981c91633f73d1a92298ca1ed426c98cfbdb50643cee36affd5fd02886349aa608f4b8a27452a51a96500000000000000000000000000000000013126db8b642d33dd988b745b07084ef86a228767f7e8bd45aac830dbce4136ca5febca5fda9644d3292203e27439d9f5b9d270fe31c772e9a0bb409d9f08a07887f045f906f30e2653d293b6c2c277000000000000000000000000000000000cc12f75fe5e6d6f082f9977dcce64c7858f3b6378112e7e083caf0c4b33b5811d62a1130c595937983905fbde8db1fe000000000000000000000000000000000308b803bcaf4f63affaea0206aa9f4770c21b4d191890602bb4151b80fdb42af0cd9f8dd2b1a3adfe28d0e49712d2290000000000000000000000000000000019f83af5cbee858fcbc9bca0f499222849b9e80dde7ac79b7c46785a484fecf274e0d4326469eca647cb223068a183d8000000000000000000000000000000000d0a8334171571bc63054c032299824523bd2476b1150a67eb17b84bba01d8a65295624202c3874e0302159951734702dcbf4fe86140c50618598be9185830bc1da11429162afe0528f00eb6698ec088000000000000000000000000000000000141cc01094391887f46391bd49fdedbaaf524cfc94d741cc7c8cf081dd7c425d81ea3e407be48127550012e39d2b0580000000000000000000000000000000014db31972eb242d6c2912b418ddf416fd7911f13aede9194559b05d1c9e12056deaa1e56c155cdbc231b39f4f9aa91ea0000000000000000000000000000000007b361beb6c156b5c8b92b489e6d6c05e32a4376d20ac3e1a54c94e678c88480779bb789c3e1ff7a021aa6d872c98551000000000000000000000000000000000215d270f2d3c5c5b9fa99a873fdc337f4edad6889f7a55556d8ccb5ee86b592453b74a720ef6a907bc342710cfd9cf91d7fb7121ef0baa85046567014620e1adfb9e8b3bc95adccbf2e0b0ea8f37c670000000000000000000000000000000017f5d31987655f8eaf046d6ea4025444924befa51c319b2bcb02dcdfde4d80a1c48049514e0b580e4bb59dd2fe40bb22000000000000000000000000000000000141ab771c08ad7c592725630aca0b2564de1ed8759eb3afb10a4bf451eb21d25e8d917f49bd5f7a06894baafdebbe790000000000000000000000000000000012dd82703c939cc5e7dd5bc3b924d744f0ef1a95fd0b9e57617e822e3fdda05b2e5a9959ec48cba0da40079da2253cc7000000000000000000000000000000000c53ff34d875fec4c7095af324d15921cd775873a3ba67740b2c123d6d482263b1cf93585dc810d19c68965cdbd9e102310d3b0535e78d803b477e5dc26c71bb18acfe66bd5ba5892d924d265afd6a16000000000000000000000000000000000a6514331035d42f58abf98b805f159921d8c4c935f88bb5493c580a6ce14a65e243424b41b3a9188e26a7f0c912a378000000000000000000000000000000001351e48b2d3f619887f4e83823dcd9dc15afb2800169ab78a2cd5ebdf25dcb6310f1051894bd2b549e509c55f5286f600000000000000000000000000000000007900972b84b6a76b2e686fa5757e98b8395bfc99da86eca122ce209afb39e8f3b07603cad92623774ed54d637e350d30000000000000000000000000000000002c68c42b3924b89a67764990478e48fc17aad4b5543bd38bcfee34fa1cae7535671f3b885852aecac53a30f28b0d4aa2fc9417e65cb76aa0093a7deb3d38c111c68f461a4aac57d8f09189f94407ee8000000000000000000000000000000000152d2c0e798d85e4dbf35dab808dd29d724e9b6c7ca7f53ffddfe1aef5976f2d3079eb1d3099e91b37d9fad7f1af5750000000000000000000000000000000015059423ee4e7201aa65e39116a2a49ba715b15e4b9547d18a0efd355de6f5a0159bc9047508bd3649407758d62887f0000000000000000000000000000000000e5a823fdc69f3928b22c542388f982f8131a978b08dde80d44e51d9eaed2ac4a1d5fa7392be6c7edfa33e833da4832c00000000000000000000000000000000044285f4e4ce526f96f9f512c5be754e0b0953744dcc04807ec6f041ba5c6fb9d5d395e93317064d50e61aae26810df0aa0b2d714aff175a0be2ba9e675a2be8936c42f15e304a146622a95dd6b3e3ef0000000000000000000000000000000019c457e369dbfaa130ee79bd33ca70d00a3797b6cf62126baec0c5d7c3fdcf5ba7f41195276dc412b6862b71560aeb77000000000000000000000000000000001206f67dee6521ede85573bbd5784d675fea42da16010544857d4e2d81b720b6f85f646fa23540880b44a6cde9a39f5d00000000000000000000000000000000142018ecd7c7acd4f4ae288e1c6a66594f1c7f31bdb9bade2b4dc4c6455cdc685b716382c54d67373831a19100185e850000000000000000000000000000000013b0b57463a3e4cbe063c0d4f4e998cbeb132a41c2877106ee60e83d4ef7d339a5432d30a3c149a42dfb1da9d61f34030227c3510ed6e4c7f84b11ddd2d6caa55e0e79ed59e1cc0cb325d55b5d145aa80000000000000000000000000000000008a463003900194e45fc2610fb461fde538b17c4fd516919000d423f5a1b582342ab9ec20d8eb6fda8fffc6a898e46420000000000000000000000000000000010eef0f7bf73e35dd75fb924bd9759c09aded9cce46b05e5d3c5eb3e93e5d5032ecc459e2220aa529d2f773c4b8b8c180000000000000000000000000000000002a0247f82a25468ee74da555218cdbb6405871f7097c24e89db3f3eab59b91ce48ac06e8eab2c049346436c846226a3000000000000000000000000000000001895b58a50c025e46a2cd0c59d5437f6eee75fac949adb7ee12d455c96206a33ec9ac17d5088fb773618fec131981ab6ad930000a9f82e082d408999b396aca2b0e435a66faba1d95e10fa0abc0625cc000000000000000000000000000000000cb0f13b0680c2f7de522a59f4e46fe1d4af3a64cd3ab97a2523ad3c3dc42f5e6760e06cf48e4db22ee64c5ed8273dd90000000000000000000000000000000016517038ecd2799d787c5b6ee93079c93f78de4a96449bc82699ddd6eebcedaa1d02981ab47c529652cc21663f1a665100000000000000000000000000000000067ae1dc093d4aa2ddd8b7127dc60745ce9c462a066106b099a7a07525597c72e4920bf64c2ea8a3fef3de51c703de8b0000000000000000000000000000000016374f51023e2448eee7c64115d85794996fadf4f76fd4266c45093c266f35be09e861d07ff194f3d15e310385705f0e1a6799cab8964c7b79b80e76be237ef49c2bdef5c99a38ea873af6e9d49790ec0000000000000000000000000000000017479396aeac06bd624a47e75b066d6daf5a37dbe515650cdf3e16be21e7d3a1f52a695c1c06382589eb7fc869c7d9250000000000000000000000000000000015c31ff36ed4eaec4d3927e62c111d062236e19fe6514236e6e3f7ff05ee96e3e4c084fcafcd21049a81faa1f84b7e7c000000000000000000000000000000000341b440e6c6273515fa7940d2f77018169bf6362b70a7b0cd6d66cd332ccc30e3ac48f7581edf47ebd137253a9c1369000000000000000000000000000000000cf424de046252efea9320b32b79bdab58e0e04f2916b4e8ef475da7b8ab85d8d5fc793a45ec6e6c035b6331a895d3efb206dbfd70e4b24bcc09ad35ce7b3aa62d17f18347f2bc5f15730202909c93770000000000000000000000000000000007c9111a85a6acb851e9cbdadf182096b720913ba3fb357dc2cbf2b8e796e9a8044b6df3ccadb740c73a16c3780c640b00000000000000000000000000000000059543a955c84a197d23cac22e15d82363c881026e41c57ee924da2a8c044f3021b29918d1db7926ddc2fc7a662ee7ab000000000000000000000000000000001355d8bcbea65a50c9b6ab59881e48e8e5f5592cee6aa69d5d01b033a84057cb6e74d911769bd2ab5f9722328aa204640000000000000000000000000000000011232571c95d0cbadf8e70454c851974efa4b326370249238db159a1224cc6d34eaad690e1840ad887a875b667ac1f193a607a7301bb7dc5b9c82d956ebb0bc54568d0654d725d4d5f13ceb6231e862e00000000000000000000000000000000088b7cbecf91721e01e5e4a08ea3b261febb58cdae3056d9316c3840b3e5720a289739568bec7b899f4b1f4f5372013b00000000000000000000000000000000001f8835d4b0e3b957e46b718b6bcd81acdb50ab85f10bb70c6343a23970efbe72bef89dbcb24d66e6a6be3eb55665a200000000000000000000000000000000046500afd292a31bb5a4a9bd7b5bd0fe608bb1265351edea69162e61f1623cf58e34e8e1a8ec58ca166e8203c86f84c00000000000000000000000000000000005d6cc367ff9c88fc8b6c35383f147b4f9e3eb21268a5a7405794441d449b3e1b44c8f66e30783e5f6c3567adf0d80171231e0fbbc2d98bfd1039a889acac471110d568b0a24ddf5eb3501adcbaac6fa0000000000000000000000000000000015bab57412cc5c7ee0147b0d2511b7836a14a82df06b4eb2b1baab102840ed04cad81da6e920ee000751e0727091c1460000000000000000000000000000000002f725e61e82980e6164cae7a2e30a36dd7245402f4933697607640d53fab2d5db57698be33a0c9b5dda14aa846db7c90000000000000000000000000000000007fdc589448887f6986efd817c63954d350511401333cb0df89214317dec0a82b06259ae9263f260fc7f21f98ad2630f000000000000000000000000000000001324e3bb46a1c69fc550fa8f2ae2d0ea74bc2d7159bed03c13a9d232233449e271ad1c3922dac5d84aae52606f77dcc0393c5c10d4bc4cd1567bca6960051f818e5c53704ce44dc4582767fef1092a870000000000000000000000000000000010adc26d73007e3b1cc58684fbdd7d197550658b4c66c702e9cd0f4e481f23a26c94c6798cdd9763110eefdca3d802050000000000000000000000000000000009138258ad1bdf6f9cdfb943fa32b42c4f1d834be536ed365d00126227c78b0df2776610fe5cf66a937cca3e0b088861000000000000000000000000000000001991db3a35bd2cd72377cd459502a84315422bed92890af906fefcc0acc4515fe7cacee1e4f360ba24efb23292482b8f000000000000000000000000000000000d10dfb682ae7a78b23b37b081efba32ff2011fcdae7b0f8a794a6ec33d71f5d6055f93e3b68a37086ab190d7d9bd7aed412195e347b680430c4528987859a1552ba8383cdc075c437ef19db6eff6e1a00000000000000000000000000000000182795b905320ee69281de833f37e040a3295e23be05ea7ae4563bd49d8b1fb02e95782c5c19645244633951cc29c5c900000000000000000000000000000000053368ee1412723b5c6465ee5ebddcfc00812e0e12e940f8485f44bce475c8897b324eaf7e66c0351ce9a6c92758c337000000000000000000000000000000000279f26c1e76e5f5d0fe1240c0956cd6025f6520ec303feb383b69525ebb6b2f199808a578a91368c3881a4044f37be50000000000000000000000000000000000ba4012c24dfe1038ec4b4565e1b321bbfc174cb197f0b0914bf1c126bdac9f423845f6742129670b7f3dfeaaa62df45b6701bc11c1ef3c9389710e4dd090e3db481c5400ecb91655c20694207a71f10000000000000000000000000000000016c27a3a950fc4857fc775441947f7ac02af9b3df6422874507b11f7b005c61d7d6a4a115d3759fcbd64633a8ad95611000000000000000000000000000000000e92954034df4f15450c32be31d4e146c4b0014a2b81e2afe755df79aa962afb05ca4d03577f15980fc6d8a34f2cc50200000000000000000000000000000000032db3e3c3617c16ceb1c8fae83e806744ca40cffb56bf9b79997cf48c55e5fea89db43b368cd922cd7ce30dd3984d82000000000000000000000000000000000d153fadc3854be49b2376ffcf4e5a46b9dfb4f54e580986767db13127e2d4d10e465f1ca932d79ca90f1971ddc0993dab45b07c059738ead9709bf36ab20b09fd3368f7aa12c6d9f3acf3f145c83fa5", + "Expected": "000000000000000000000000000000000e1968e131e25d3f911284c369eb63aaf264ee82f4d9bd978b7d02470feab68ae82aed8509ffba875798a292f012c9180000000000000000000000000000000011488365570d9bff018ce6aa15e3d7e078368f09873ed5e0b827d1c25ef369d6571899c8df38a3df3135d0db814c87a700000000000000000000000000000000161973f4949bd72b9f010f017398778e0d7f0c8f77e12a87db1851af516b4540e3f4df314381f295c4d167fd9ac091a6000000000000000000000000000000000ae16f0a4a597159195aa47862585839485615095e538b745c1081ca73f202115a438d279dfa45bd3aef8d4043ec67c6", + "Name": "matter_g2_multiexp_69", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000046eea8e5af344dc8600ba7e506e923f6c356f7ecb3b78bb3805c4561e808c1f570e122c4fc5a1fbe433b48ce0c15d510000000000000000000000000000000006f1ab405a46c825e104bc963d2b2f573f0d345bd2b08a952d8793c0297dce267a754b802ded4db478399cfa88e7e255000000000000000000000000000000000a5fc4a09019ac9649c07b623d2cbcd9f0cbb89d28c01b170b62544d8da8ba3f236ca3172ac754175a3db85d9b846cfd000000000000000000000000000000000f7580110db2549742f69bbc2850e4ab35a6e415bcd1b06220b9b009c1f4c99152289eedbcba2aa653f38f6b8460386b3ca13f8540eaf45ffdab5182883d32a1d35e7cd956092221cc40232efde6cd1e00000000000000000000000000000000026907ccf4d501265cfe67bc1c0b06840e9dd94a614c873d676b5416457d98a1dd744322887f1f1f86176b11a27d2830000000000000000000000000000000000cb08e541a5b32fdf51acb28ec64d3ea542c7bd75179fa3f74e9588156815bda9d027dcf5597d714aa001b2dd8a9553c00000000000000000000000000000000103ac1c03c16706d5936f216a6445577c96acd3a00a3d8a9c2c66e6ce568dd84a4c4db187a5fbde24e6ce60e037f53a90000000000000000000000000000000001da5cedccc02d0f8d1dd7e4d81c3ec47d432e81e941ea1452b112eaf40748a6634957c90f32fb0385dc5d642bf65acdb3c8b045ef559b76005875bce09a66b36f295070a73ec8dc66c86bca51fa5d4d000000000000000000000000000000000a0b8dd68918b58ca6b113e938f8a00b2595351777aaf32dfbf703ef3884f02c798f1b5bb78cfac32f196c1fe88aecaa00000000000000000000000000000000121a4104e374566f8d582f75a3c9b70f09628f116b7ab22679ee13a1691b0b0bdb0d737833fb606c746fafee5859f1ee0000000000000000000000000000000000b8bc89d718572ebdd6e3100769f2571cabdd79ef5ca9a4b9bbaa432b1a4dd752f9af9d2a9b1f1f32d76d4ec2d1636500000000000000000000000000000000129f1d760a12eb1a75fec1d2ca438189c933e87095b9fbf9a0371d64eb205d8f0932fde9ee2ab9f36f8b6e5d4b5dd31021953ea264f74bf64378a339461bff41c5193e17913c67be7e2a249c9737b825000000000000000000000000000000001499e5481ceeefcd2ff672df24e8987fb60872ed106c496178d71c68e9078409a80016e1f9727ed0d5922c93e821dcc80000000000000000000000000000000007bfb606c005c7da6b4ce2d974f9fdb2e3710c8f51f18257ced7663cc341ff81fe2e46308a2b62b13408965949a6f08800000000000000000000000000000000003fbd951e860e3a4724b667427fd9916ca4ba511a0dcac7b1125b14d8a4f4da82ddc0b0edab8ea50e911b0fcb5c200a000000000000000000000000000000000b43195a5f0263307e85408ae4eb046e06ddb1295a490ac4e0e654324de53d0dd023b8cc159d86b861dfcfdf7ebeee4a505655d72f1128ac0204539f0d823f076cb3a57a7e74e896b5019c9161d6486a000000000000000000000000000000000743bed2c17bea1ebddf750da504fe120f457cd3b1754c9413757cc48f7aef07eb4fa0572cb853cb72d68427e875456000000000000000000000000000000000102ddfe3dee27186a9484f74b3cb3aa366a79f0d2e36063af6e484f6a459e9168d7a4a6969bb720ec694a52db7ab34b40000000000000000000000000000000009bdf5b86aba4845adf9187ccf9c74b1fcabaa05764e41fcce4b38356b4a0ace8e7b16abfc7f7b96b785ad47fbf8e90f000000000000000000000000000000001934fa903b71d234c4341b2f49f8177334142e7c401553dad38e66a2c157fcdf7637165058955b7798a59051846dfb8cc4c861cde3f445e3a78d1498d98b2b947056cf578652e19be88da4a786af196f000000000000000000000000000000000ddde953f59b8591a83b0cdfce780ec23d052037c26d60cef36522d0f984f907315d7b41c8be9a9632f2b88e0ce950ce000000000000000000000000000000000b8d7bdd94a994901a434e6ea5d03ea45dcdb859e560833d8ea0bd9d20c7db9c16b2427eac27d8f1eb640b7d28a530fe0000000000000000000000000000000017b5b3a3097a74d9c1f1b23783723235b6148023b6b060234dd9e2f6fd05e38668167136c999d91249963e224f9bbcbd00000000000000000000000000000000133da0c217c31ca052800315aa8a3b934fc1f179e6247801904bcea1e28dec0b65632ab2690bcca3606bb1461aeb147b99762c5189cf154e24238e4b157caa1d8759002f69b289cfbf3f24f5dabf20bb0000000000000000000000000000000012778a6fe79b1f2b768432df036543cade95504bb7735ff547969faaa8db84e3588046a074838c9a551a4fb48f4a66140000000000000000000000000000000013288a3413d7e7edebd118463d5eea9f9ae2e10f51965480f9b5c244b05775d04079a1dc75ba0885aaa9e2e4bae1ac750000000000000000000000000000000005b766ad112b8d69f1a28079688942ea146f8f31616611909f539a57c58ec5e857da9fce415d683c1c6dcb5e74da9d17000000000000000000000000000000000907e5c3c83d3f12a68d6bf812e310f5a04f1417094301fab7d4f41007b9d01fc1bfbf739dceddef756417367ed5b1d0298b5f6b43074b8f0807086b03f5028709209310474c35c7ee232eec8579147c00000000000000000000000000000000090be6ce5ed09e45a6fd9ea3a9223fe43a835141c1c29d6b386e085846869f9c5798b80c3bddec8bc15171906dd417dc0000000000000000000000000000000019bdf67eb16f2708ca55fd20af8deca66e2ae270b2f2f9736fcf49dbdf7cee034cc956f6fb799f0e87c12f283a11448e00000000000000000000000000000000124a69c723cbd366d52919a72dfceb7e4cd9ca5b5cef1784bfad3f125b11d810328ea1c849602536af500261aa684f5b000000000000000000000000000000000bbf05318ffd81495efa4f4c271c8b1c669041a6446501788f49b8739a934f09de9d976fe7300b0ae861be567d35c992177bfb0218ecd8cdbc6dd9484e74e41be6971ec2911bacc8b53b9b4b8c70e5730000000000000000000000000000000010833a3e7329ad40c1a8cef296b015f6ac6542c612038ce00f13a99f673783cb7eeb14796485c168d21cc169065d051c000000000000000000000000000000000d3b1416b23453b893c92a6c7850cdc0e4a395459140391b1dce11055da10fb68f318c5561e1c12d991a28f3f544a5230000000000000000000000000000000014721dc58eada80f2d0574fb4e2c1c94c45fbd90c2d2fd666fd618a96f4736a5ecf34cab34fcbdcb19b6cf7b44098922000000000000000000000000000000001905d34029bf84617a956d1edae090853dc1b622f560c5289251447ab6bcea5700bdd80d6ffb2dc12fdf3b0267e74543cac52219796226385aebf9e85f5f179362d4149c33582a97b7d2aeb05a8e6a99000000000000000000000000000000000b4d380f4f4eb976e6121b933be8418c536f85994491b0b93695d50473615e41547ead326bab795d4d59524a61d607cb00000000000000000000000000000000104b7f4058c9b355d38908d715c311a53169b42d2434de0876f1c4ffce1c39603c4876b33fe3076528be15fe42849d3e0000000000000000000000000000000017e2fd647e7739366ebb606e8a326daa5c03cd2b726cc4cec7747cb3468419f1907126d7cba98bbbc659478ce3afee7700000000000000000000000000000000183be0a976dbb3b5385b544c194e111729c7a8d5aa98eba3fe1c0a5b69b5fe6e5d0164e96398cbc61eba5b86d91b3c94e03afb2efea85fcd035cb4ba09977b2e1c84a0d98edf88e9f8d2c4f116d0f50300000000000000000000000000000000023bc7eab817fcb9982cdac242cb6cc0ee1779bcefaecf144dbe57d5ae2b2ebfe9088f39f416a56de4b4dc04d4bbce7a000000000000000000000000000000001318e728c271746905788dd8f5ab22a3a10edce3fa063438e54ebadba22c29e461b2ed78a95a8f26a65b47022291b8df0000000000000000000000000000000010aab000b9c5de56623f18861b343ffa80da5ed4ae0d7767b7ed791bf3dd507fe7286447b6a07ea0fa12c19f2e4d8e8d000000000000000000000000000000000770e2909b5795a08d98dc66389655b1718e70b93c5bc6d805c3945cb5fc0092a5b390e6497b550988c28c58b6e016a3804dec43760dab29c161b8f4bddc52379a17f3168f684267cfbbc3505e32d5f1000000000000000000000000000000001259a4e36f5bce7d5f97184948d57fccd458cf7f2ae0c9e174f537bece01d744fef544447959cb73a678fe2c378ce3c900000000000000000000000000000000131aa575b2b94232e06879fa1f6f145a0bf5dd12456b698f731a72bc587e6def5054b3b2afb6dbbfc34fa5249dc673860000000000000000000000000000000011d64b923596c316b097a0752043efad8b61fbe068c58bec7a6766d9bc90ed965b3419dde3b96679426f72184adb8931000000000000000000000000000000001653af784cbad5a804e3f72716bb51e0c733014d587952c47395f953828566cbd7da811a3da1d48681998d569db00a7bed2d3daf616df3f0061f58c925e9dfbbf6e9cbfd4b0b3896a596919fb3d243db00000000000000000000000000000000077a9ab830f7683b7fb46676df09f72d773b65286c5f5ea86623306e5de51e63851c18d192c4c3b20af582bb7f017ff70000000000000000000000000000000016dc185f4158e249939541d35ae8230fd749988b9174c40c40b8c932aec625a7e94beaef9a07f492445d4675a01b7453000000000000000000000000000000000c107a895bfb45d33136db6251c76dc0461a235fa5d1ba7a5d216bfebe15691261b46c9816315c146becc328acb6b8c7000000000000000000000000000000001151cba240678efe61e3a36e169e314b3610e9d4df6650507f53ccf635d8f1277a80d86baa85a2d4c7e2af73934a7299e16797ed90581fd8c3cef1f30abaed10997f13461374ea649b29101959fd506400000000000000000000000000000000090a1ee6c611980e0421b72a122cb39257dc38d1e74ee41b809ad76e440fe307cf45e79afddd8d40b94382d48cdd4c450000000000000000000000000000000010f2e6e610eec7b7c2b95c1510af1af342ac19fd3b01dddf81b8961ead2cc57a8eca36c2f5747238eded5914e484c52e000000000000000000000000000000000acce0789cfff975b09d687ef79535c536f3b799157d3ff731915ea5b323ddd9f6f4750dc8e00a879d4e516bce8cb3e40000000000000000000000000000000008d8203dd13aee7363f6b10a9e1ae9b713bbc8b8fb2c56f05fa71e8d69ea571384d150e8fd01e855b1b0054fe7967a052f9f29432638c033ca84422b12ca80ac4ae85fa30ff56c913c5737aeb2c84d04000000000000000000000000000000000b332430c518d7dcd120b346440e5b6b48900b5c3656d84840823a96e5bf002816d583a989898cad9e09ba978ebc58a40000000000000000000000000000000004197b43877b833de7f69cc1a43ad8d6d3544cd10d42336d4b19a187f31337a37b10cbf48e72b77e4d8e1a1da68e5e4c0000000000000000000000000000000008887d5dd08f45034584f40a2a68254baf2104f9d6a4c2637ef79c5ff2503c246f7adc36559758a0c07533b66c3637d40000000000000000000000000000000009343819dec1d4569683de4596621c19785d5ed14ba13e57d94b1b1a108aa62cc8c55c58dfa18c06883ce50cc1364b95e6f1e5df7ff90c4a4fb9a071c0caf3a3997569538ab9837ed41d9d0a8d7305370000000000000000000000000000000003fc7f9a0804e7f1664f8cd3ca67b70ba128529a611c24214fd09674072a6b8d652ccd37bf5d4611424688213a41cb3100000000000000000000000000000000137a869cd7bde696035bd9353662e0d37d2aa0731ae55357df3bc43536b9210f360324cbb3670362cf9ef607b1919bca00000000000000000000000000000000045d9d39c04e257fcd912c54e57c86d2d4304e6a7cb95a83d2bff07964d0a5dd8b4e42bdb91a8b245e512395e6749f1f00000000000000000000000000000000120e5e4b04b8a744757812fc331e7c98b35624faa1cbabfc1470e4c0804248bfb0c53a484107a677a7d3f0d2b533e7530cf3283195707c30880e50ff5ef605b561c3c3c354fbe8108f93b36f212f9ef5", + "Expected": "0000000000000000000000000000000002bed414afe9c7a630441e7b163280be10e502cf877e94b6521d14baca0087c5dcdfa39ff4a51c8376d99855e1e6f36a000000000000000000000000000000000dcd54727a7729408e682c6e213005687ed51fa7935c522312793fc58cdb273eec9c61cd8b056a26619fc8dc006b066800000000000000000000000000000000137286f4086763e6ccd5ee82d3bda712b26814a17c6a71006a3e6dbdd919e469bd0e744bcdb2074679e78a1e7d56ee7d0000000000000000000000000000000012d75de1310199c0e556d61d6c0395b406afba0f13bfb37486c05d66b446809e8b1a024e8fd2c55f1b82cf2aed99a5e1", + "Name": "matter_g2_multiexp_70", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008b83142b22f6d6496cad0dea23c71355e7c5d98659580b5ee6e97eaccb9fbe523f7e3b925abbca3a38f67426f3fb35f00000000000000000000000000000000035f655a1b2d22ea21cf0081e78d7140bad08c4e66dd45230a113ff3b7a77e39f0f1a72991f85e2b00ff58b27d5cb54900000000000000000000000000000000105d04e38243ef1ad2f734a3c97e91506c5a7c5d95e9b8771b7fded8908f1be933a81a5769044b633d501c0df7b5d7fd000000000000000000000000000000000e670ae4af94d0df34a7f2d7cfbfcefa6eebcf2a6b2dc5b82068b023fe02ce8a279e1bb96d905ad4f2ffbd8214e47d702063b046a71c2674e35466657a85d8e02253b42517b033619e31a536659172120000000000000000000000000000000009051f1e636309016c5433cc7eb019c7dbb75b3a4a5b27f6927de08fdd9577e8eb9e12919157ed35bfd6607be7fc4de5000000000000000000000000000000001953b7a33695ede6d0792eba85567aa5052b8a58c1bdc94ee82b5001893c6b996d3e8f7af8b8effd6cf50656d8b85554000000000000000000000000000000000a2f769f00679b610bbe212c2f8045e7579a96dc6bff80899eb7715aabb1afe79421ad5000f2c7b85d4e0904e335ddfa000000000000000000000000000000000ec962a3d00fac14d05774adc49bbabaf46ae78325083c0020587fb85eb234387aaf6506f503fa988df8e9ecafb4a59992fa325cd07502c6576dfb93ee952fedb304022656597bf3bb03a2bbc471b32a0000000000000000000000000000000006823056a4da801cae430fb9e3a8663fc8f46bb6c180b743b7f9c7c7e3287f3feb1aad4be0e98409c74ff58004f8732e0000000000000000000000000000000015f7a3f692d55252fa5af5ec952f581b796d54089f13971fce2ef9062173664816dd9f37174294ed78681d8c8c5a9cd800000000000000000000000000000000154743c76f7de590a31cb96d46a0ec0fa88008b7d6684bd8f6fdaec70722afff7b6e88c1f0fb048714fb1072d30780e60000000000000000000000000000000006f3191946d0e7c1307a1a0d1ea9a26db195ec98ad88f9b8f08a03a3d48bbff1fa53ffc920f7db5ebd4c65911392bb834484e688799c3f0a3bbe00cec7322fba6245570685cd7df0d744473b72f03df8000000000000000000000000000000000355018079cd02dfcca15fbd2934a8e47c5ee89e679663488499ddd4abdaba7679fb1c9d2102317cf2798c47aff1ceec000000000000000000000000000000000c417d489a224fbba9999300eb65a23749194bf5302fdfaa33ff7daeb8d896e387e56600233038d5c5eb59f644a99b6a000000000000000000000000000000000f5a62e9d711293d4373bec1bc2637802938eb789c828939e6c42f10062ec171ac6110261165bd179206d649713f6fe3000000000000000000000000000000000b11f9fd0ef8dcac2e21ef09846ffe9f5a624ec246e31393b39082a47354fc9523dbd247f0059b6cc740d7a387b137f0fae2ef61a024e4d8c4ae277f6b1d834193df655ffb315da67afa4ee4ddcb7fbd000000000000000000000000000000000fbb5521cdb9c3a69d58e5c9cd7e4a50bf5469bda2603f5119f3209669eb3e374d700f851b0c7ac5ee3cc9de79e6a7ec00000000000000000000000000000000131ccc37581e64f6f9fdf675b9b63ceb67d9d5844bf512166f39b5bb09d8e031437c06b0ca01caae7ad6d8c9bbb9fd67000000000000000000000000000000000531cb0557fa18ef054dbff2e7e994f1af08aaea7557602a26fd6ff539ab3c0a73f1fe841177012dabed4a1223ffb5a7000000000000000000000000000000000a180e7a345d2b635be92888934608e8b6c17384c48c560f4cb9809ff995f8e70d83cd4cf0e96c458fc414e1275d2a993168a1007abd42bc398e317484149f2fa61174243fd1748deec6cc75e7c720a200000000000000000000000000000000125c83184f63dee35ffd2c0c7dad9010cd6a9735675099f24b465554ab3db727ee76b5b7ea603ead78795d33e37689a400000000000000000000000000000000141bdf7e270dcd356993327cdb5dabe38a5c5a9b53470d9a4aafc041c46fe8bc841089e337469bddab5d4f7fd3d6ccbd000000000000000000000000000000000f9613f6d05f38e3073f14d0c2557101a4864a7d6d0b5a2b931d0613f020adb99a1ab2037a39fea6e99fcfb47929827a00000000000000000000000000000000192d812e05a17d22c60b78c53fabcc55a0eef3656f8e84132faf16686ee18ab4d35767db9a384d42f392c40c7b0fe1c0f1525bba87baee35023d0976b4a2d87524ba74158f000e5501c6d06aed04adda000000000000000000000000000000000b6e1960e82586de19ffcf29a8c5f16cf2fcf5286bf42febef832767919abddc655a0d1bfa240cac8fdfaed5a1e8f389000000000000000000000000000000000fc1598454caf04414f1930f711d762f0d72f5cdc7a4053c92b916c742b00dd0f107aee111976c1b1218c4577deeb006000000000000000000000000000000000455d6e9e9bb848e0868c9d725edca1f50b279d0acef8c597927eda72763e3702f46b216919ac36b080b4865249fd961000000000000000000000000000000000174463cc7804796b4a6d8ff28d2e8cfd8361b2e38f368de30166cf3c20c474ea0a1e8d94749fc3e6468924a7d1369e62d3d7c014416f33724acaa46412348d350f93d334588d39c77dc0b8ffcb4cb1d00000000000000000000000000000000144e4b615ddb871bae85484c308423adceb5de387d0c7ffffdd2211b4ea28788eba9bfae96ffc46781e6d6343e2f501b000000000000000000000000000000000046e39cf43fd707ddc4b7ce9a8a22a2aa1e55aa63cae1eb23082f7b4b5dce49f32d2ff887b5108b40f98062c02d5613000000000000000000000000000000000b75b5460db2baca86528569b47209b5ac24930e2545cc6aa08c401a87ef2c4e233de537e5a857e533d0ba0981b24d7c000000000000000000000000000000000018f53b83072fe7daab226c831a89da63a0930ea86e301c97e639d0ee1609e298e2789d1a347bdb4afcd355fffd16d053bfbb1670b7045b6df689871d5d012dc93e8be65faa4a98a51db8501a4b7677000000000000000000000000000000000185b296e9c7209a9abcc3194b46be9a545666527ec9b0634a3e3be579447cb52330174c19e40e1667124552392a7a0c00000000000000000000000000000000158a053c788e5b914fcdcf1aebb4e21cc8bbfbcc20c4d692256b2ae48149f6644e1578f98d58b3e73d9768d0e7df643b000000000000000000000000000000001318ff4150bebd8fa612f4e84f89151d5c56c272969bc1f31a3c1fcbd8ded0e298914e98e1ca48248e9023cd12db0fd300000000000000000000000000000000076555254f382707fdb7419772a4978808a7409f59d1dbb8c9e648372e19c44573f5ce1888a2b570a83afc20e698ee44f944ee8d294d189226a6cff17456e2201d17d4dfcb78f58f8501870377a6e431000000000000000000000000000000000f4395e3f2e301ee3e18df3c23cdd142716c7fcfc23caed924f0561795948b0bfbed948a6f7c415ca615ee0ba4d5145c00000000000000000000000000000000176ad308c7fe8c3a1aa350fa82b8f8ec638f77bc703afe1042a6da22e5385cd8473ad789247f205214c9980532b12c7100000000000000000000000000000000092b0ec86c511992c66f320ad46c9d6d7c82df118a9ab2ce1f2c5611ff4e5cdc9193a39c3fc95f18ddf96e139688b00f000000000000000000000000000000000b4f671e334b7f22bd8d89d8c4eb8a52b04bbd4dd1259cc9caa1872093736680618930f3a469b3af4a00cb6e44b573f27de53613b7a31583ccb214726482b770029c0ed42f9528fa74da7d2d1dd915e100000000000000000000000000000000123b64561ebfe085238220eb1428b3a203acb01846d1e4428f3759db6cff4ed3c1b9d436706f28b77e3b92e2e39ecb41000000000000000000000000000000000ccdf1973693e4b43b6133563986f6c96e2b924895c813f8acdd0f39585e4ee95ef26c0d9d51d6ef88bb62305e51594d000000000000000000000000000000000f51693bd44b12188131ca84801bfee0ca853640c0a8d5b20123c97b369c98299ac04beeb27d75946cc6f45f8a07b5fd000000000000000000000000000000000804c6597810d2c75de94484873a67eae258fcc9577bafa778e13d4814ce099a5684b1cc94e0df5a59acc7b19328fb8bb0a9750cdfe0910c544668bc9b11ecdedf1b757ff69b61fcc838c502c2911bbc0000000000000000000000000000000009b02eea05c78a24adfb0187defb6810116e21894d8782605c1d590f8bdc10723bf71a1e5e5004b181504ac2deb142cb0000000000000000000000000000000015882389195128e20e50ec4f8d278e8b8791e362341be93c475064d640e1f8bb1c92a6c777d666f8644d471409bb9aa90000000000000000000000000000000000d89295f845f989e0fbc6e86e97400b08e39b2968fe6c9a141d1e92ec9c838a3d8e1ada5e44bb08189a5d514ebfc2f5000000000000000000000000000000000dea05d8e6ab50b8f8dd9632337948a60568724d5a03c7914e4a03e2af572dd8153effef1a7d5c2cb27765ef2c17bc5b4aadecb1111ff43894123648eea9e57685dcb7a25553233a374479c24f2f8899000000000000000000000000000000000bacd14447ede6af0e92e19b54c4f5b6ebfb94207efec3e9f385a4c84a7d670514ecbc28ab686b383e239ae7f9bd673d000000000000000000000000000000001698bc92d146049174b843dac8c5dadcee12d1d503b2d0e46ee68139dd43d3aa797fd5bd06e2b214cc9ae3647c98394a0000000000000000000000000000000018d20cf6c84446cadfa1a26192a04e16d2b2a053705a89abc51bfbfa35c2b03cd58021ad95a35364ae1e2da5d233208300000000000000000000000000000000113268e360006294fa0203ce58cbfd05d05fb625e1f9474c96c89c0ec1ea80fe834030592c2f1c182ef8a3d5c32caf71adde66cf749daf69a30f41ca00d251f7f1e93b0e7f916a1ba6b994d946b12ca0000000000000000000000000000000001727b6bfa9c601fe84a65c54f556887c4538cb5383a288156fec87420ae7f15da395886e1ac0e10b8fbbae8bf040f4ba0000000000000000000000000000000012127cdf02ada71f28ed036a417971b87fe443b8c65b7739795dc7067082cbc9f06f7bf10c709969281cd072490c06fb00000000000000000000000000000000134f1fa1d277d01e2811c118cf10e2de6324e2ba14efcf717a03c1a10dca0862ebde0f6328839da63d7d85f573e8501f000000000000000000000000000000000d20a036b715d18ac9e2dbe009dd0063a4b13b3ec6fd060a64c4ad2b98e05e069060179530410d154caa575d504c63b7b2f9b44c73a1a6dfba6462e1202166b63727f45dc3b8b3b73b5d06459a1beec20000000000000000000000000000000000bd5375e7f98d3972b93420a39fd6c31da86d0d9349ac3774bbef15c2240437cc0761b2f1245e805d2538cbca6f778600000000000000000000000000000000100232139641c8cd5bdaa75b77e1e1c8e33b3f9554e2ae00ec6315b82cc00a6a70d576d744e68938a299ee2b451558250000000000000000000000000000000004224691faacb007bde3e37db6c7486aa5d3b4259a24c8b7653238e7522604ef4ffc1eb3cecf719a1b7f52ff00c34399000000000000000000000000000000001156ceaccfe0396374c6dec5adb39f14b6f08a32b88ef7499756f5cc324a9f1553bf5dc106a97469f2c49be5d563e1100cdc89e668f7cbd53a2ef6597a48b93d7d9a78950d4f821f3935edf72649e0000000000000000000000000000000000010a549108e77f0ddeacdc795517ccdcb357f909264457cab22fac2b982d10064756d66d0e48af02a59f58eeb1e8ba14b000000000000000000000000000000000c68703ef1c1e93c78faebc5f7ccc69e39046fe8af92e12469e9fd6baee62a2e8cc06fbbb3def81ae5cc57f488fd9c9100000000000000000000000000000000064ffb6aeeed432629242c3843f8cbea5bf7fe78585763926c5c45dc3cb4d1c79b3715506d7cda18c531ef890b22a1f7000000000000000000000000000000000e0eeb69f28a552cc6563f5fdc9919423c4358a2b70ccd56b048c22111454f67107513cda2a5aa0efd2af25dc74a1c47e23b377ed80bc90a4645df09e825509eebf57f59d7a2aa1b9121ace80926ccf7", + "Expected": "000000000000000000000000000000000b1913c672760f98fc6d4e96ad1ef200f99add6f233b17291036e187ac6692ab0a29a4083dcf86a532dd06efb3d9b8c6000000000000000000000000000000000323b703abed59a9824f34d97851546a5e78441accea4e3a933b9270f92a9dd1aa056858ebd1739659018a0ca13b96e0000000000000000000000000000000001603cb3ed75c09ae5da6b94eea6017dac0c40b17d9aa8b65b78f2ba17de051bf3f21109d9afb214d260a09391f5526c10000000000000000000000000000000019f3bcdb8f16d9a2bd11e3f9491266780aa9110f447e19f12f7a2d62dc4f2c7b5fa18e13792007f5f361e20656c8ffdb", + "Name": "matter_g2_multiexp_71", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b7d06c16c77a57b5ed74d829ad6acd665e73d20f1d9285ebba67b60c0d1571e1b02cabe5dea44499ce6d40a83288aac0000000000000000000000000000000007e6ae768ee3d149c7130022f9883ed51e4fcf68c91327ac1fe85aec8083aa61a37e9afc25d3352e144aaf888f264ab20000000000000000000000000000000016f2423478e0388e8495a898c23d63a0929a2ee7cf848034e4c1adad3460c7070caf47631eb930678d3c85aaba044dae000000000000000000000000000000001587e63cdf50d6e0b6b3d7652ad0a0a2497e70259d73432831781641d3a76db4ac7cff1bef165fd8ba29200d7320e43475888762fd1de395fa80b6d8a751f280eca568de2947e953feac343fd6bd592d000000000000000000000000000000001181bebe3256dd6ed754b8a1d77ac07e9a341789b3f4a4988599c7c60a36f1e95d3e3cec52c54c0f0abe312ac358c28700000000000000000000000000000000189d224b2904bd45cd1e8fa72570a1e35c94680d03d30292892462664f9d7aca3cc45ecc0773e66a10248df28ba9a9a1000000000000000000000000000000000f654f4c8b02a891e14fccbd5a96228afaaf79ed8306c7c1267715bc934e5f2568ea06de2bcdc2a55ef708689d90108c000000000000000000000000000000000c0a413f16e1aab8b91a87e7027f067ffe7de65097da37d67f604a184c7e7a7af6fe59ced8c03fa32ab036862868b35018ce7941da132adec1eee8d81facdb5012a15ddfe0cd6751ebbf66ce6c495043000000000000000000000000000000000dc972d55b7e68f97191d988ae7be5f5301bce5c654b323d4c17bf6e070f7227c0789ee38af3ccc07b04f0793090c6130000000000000000000000000000000016288c405bb42b4e71d12fd0a798cfccc7d33aba0500f939f5fedbd0e071166169d3072befcc5549cc6963b6dacbef4100000000000000000000000000000000171ea4f6607d6efc875cd9cff203bc62eb83bdc05c07f702143c23ab2770f50f42738f748e6bb3bb5d6f51f40fea1d910000000000000000000000000000000000fb729cc9716bf2e9e30a598ee7c4281163b287422ab66b414da85b0b960102991c24cd023791e4241bda5b0f6ddd3424a0497c642dce3937d883ee25b0ea577c729366c7d67e2e5ff1ccde3b19a5dc0000000000000000000000000000000005720bcbc598c4eda697406dbb390c2aaf4bc22c794b4b664e9b85b7c2079b90f7678e69496a4a5cd3b46580b90a7a30000000000000000000000000000000001159788c3edf619cc5e6f77c4aeb4860764d46afac4cdce54cade63155040c631eed65c2fa11b9cdff14847950cddc2e000000000000000000000000000000000d61bf02587e2c61544ae8a98b4c742c26a3d6ca49c6ae1b19a9d69c7f8eca43cefd555c973145566f8332902217cec3000000000000000000000000000000000cc0da96623432a2c170f07a3aad2844c1c2aab9d1bb5d2183928c818e681c66cb3767be372be4ae65fa40bf5483258ce4e0ad0d478ccf5381470a3fc9b882639dde4a0147c7c82e50bb93431b07a1350000000000000000000000000000000016efffb5d4ecbd01567c1e6099c0f06644d4312c599579b4cb780fccc8a425f3d1263a5f0c957dda4508202a354162f600000000000000000000000000000000115686a37624ffa8272ec7dedb7a632ac568245918ed91be6c9116e0fde290c26b5291e5f57ba6a779750685b0f126ba000000000000000000000000000000001852662b92fb49b2f0359255db8a7a2d20bd37705b7994cef1eb8e318aed70fc37bb7af9fc0c32ab3efa8c0afad640570000000000000000000000000000000017a691c08724ccf0e668f2f4eeda692e9ac21385fea243dc62c37ca73421eaf51c3a60771da3fb3e3cb578de37d2d45d38573db9346a3c8de41af54048cc51a0edcb86f36372859d0d794f7560c8525b0000000000000000000000000000000006fe4276e8f2e23127853eb929ee4e0c6ec4a190d46ac222dceb995c2e1d8fc9f822806a877e6cf87cf579cb2862c25c00000000000000000000000000000000044dc671bcd516cf03ad98ccc55266688856a4e4e5a59d6a6bb93e9ca77c596b5ecd2db6f3cc6377a0086c53ceed5487000000000000000000000000000000000c3ca83688d20519423b2b5547afcccbfaaa088a90523272c7cdc9a9b0397340350f2a5ced2a8153d69c81cd79732bce00000000000000000000000000000000069916c468f22bad174522d7fb94b4b7d2a664743b4689daa5423f470014152387a29425642b50f9e50fb679ddafdafa02257ed12262d00e78bde574a9ebd2664484a446c03fe8cbb855bf92e56bc1630000000000000000000000000000000001fd452b8685b0806545e09783947551bc5f6446c9d15d079a8968a448a6fd6f8b7e91974b71a4b2c50954be299c4885000000000000000000000000000000000f28bdab0b0fd3e05d08ee2c51f1bc0d30380e3a7aa18d6e04b47018d6a8d2b35a8f06df3866ccb95ffbd9c5333ca94c00000000000000000000000000000000035f3aa1cff72df0bb10f1a6f8414aa2ad0289cd15f56d84061a7cc70562f1f12304c402c388e48dd3f34082aaf79eef00000000000000000000000000000000034730e3ad7a3373b97279a00dc7a053aadd088557e0da61b9aa132c5b402fd9aef73cc45dc1cb7f2076cb2ff27ae2fc76b9d21a3da0359a377c11a6d0a18bce7ea81d4128dc1e7618e6c35b9149d5c80000000000000000000000000000000009c91d800cb1d52501520b3625dd4c20173684bad8742c7ac4b35c0ce028556b6529de5cb7541e3c146b13f58ccae57800000000000000000000000000000000124259d345bf2f8c16215be4b6b7922f4e2d6b32f91c4b1c4f1d4974918fa9e6fcf10e46f0c0b55e2a7210d1a5336eed00000000000000000000000000000000072e6231244ed14aa0f5de06e2f953371995a567684b00e459113380c1434a8faaab8b28a0280336ae35bf1f90f1d4d10000000000000000000000000000000010289a63e0e5f1f35b7af22137e117a85df27874ba15df39b7c26801c169667a3afe9a14663d7ac0c2956f4eb70cf11fc9cd895d5d1ae0ae704e240c10d8ed4a01b319598d7885f7c3fffcd9b491f5fd000000000000000000000000000000000d0f22a9bcda47ffcd034618c15daebad8160f9ab6b3148f1cacb32e713df2ef19f706f14131f8ab1181b7ef7598e3e4000000000000000000000000000000001680314cd79fec583c8bc0842e1750b1318f94aa7700c6662aabd4c592ca61ad51a6876b686ac3fe3f508cb40192c31c000000000000000000000000000000000a172bd8e49637fd9eb611b590c68bda707931e403db35cde1c10bb74c389ed725aab54dcd7048285352c56c8bc5fd920000000000000000000000000000000012589683ff3f85ecb006c5c435ca7bfd9d5a6fd06eb625bcbcb18577cdef610d912e783f3986c965710269b1ff79ba972467604875028997efdf5139180a8d530a1e9f18c62ddac7753cc370bf25254b0000000000000000000000000000000009720c2b3a0658a4aba8e76e196a558bd155ff550b3e41bb5b43e7c5946bad803b1de64e342956a11627e7f24f69fef7000000000000000000000000000000000decf2262e8369d6a2b1ce07fdd257abe1c7610084ae2f347640c0cdb98c7cfa732dc609c18b7b6a51b47ebe4b07a586000000000000000000000000000000000e8a0158702ff6d6c3a7ed9fbc774bc329681130840d86ca3f26cf6642cb49e5f14ad95fff1c94151457b1d5a142bb5900000000000000000000000000000000035ae66137629e95539e09ee99b001d5b9a6ede79727d7deedcbeb5acf081cd05ad469ab06c265a5224fd5236db160b62f47637b64d28fb4facc31d5bed34b22e7b270431f54a689cd0fabd205e001ae000000000000000000000000000000000413d82d0b02ca706f0266051445c04f3ac594ad82e2f1fb4e8e0cf23a6c1087c29383238ad3677f170e99259e2fe93e00000000000000000000000000000000070af21f84895c0193f0b8174cb20b11f45c845a8d782b1f58182b149362e1368ba076ba702185fc54b5da94c3172f5500000000000000000000000000000000182e124ca29d66f9f6c370f6065f60928b6a8f445a74800d59209219add6cab0d1b79702c31d60e61cf56874a4eb6717000000000000000000000000000000000b94b733f76067a102cce9659292f31f3df2cf2770e3a83c1524536e29d0a84ea5c4883cb4e849830384dc7e157d8715474c3ac61d4fbece967fbd0599c9a92c3fe0e53899861f044308b0ea8df137880000000000000000000000000000000004b2feedd5badbbdff6fd0f33a4bee17b38cc8967fc72206246c349e1017ed0407fe08e0cd9208fa9e4e21eca4cfbc2a000000000000000000000000000000000df0d74d5cc17ea94457c0ee26ef24071700a0fd6bfc762e3ec69b8f1c096887f679e312f07cce8340686eb2716c9a96000000000000000000000000000000001878edbfff2efc5af64aa9a23589a52d63749b7ab2970f256874fe0cc15091c4511050b0a243d421dc6536f19b5977cb0000000000000000000000000000000015951da3b20494a266e4d014d0ec70fef4586c8656baf536a0ea9a48dfa041624e8154989a2fb106189217ca979ddbe8eaf9da65e0e1752a982601e9a070a7cc77d5007eb641fffbb78d2a1b02dcffec000000000000000000000000000000000657fdf40c829719db134acd6c2a9ff904681b1869f28512cbe2a64d93e5b62114a73bdc5260ad9a1f24a3ff191b7a3e0000000000000000000000000000000004e77bf63eb9c4741028dffd0591b4f525d533b455d35e51cd86c7884d63419a162b145752bde188d2a622251c087f870000000000000000000000000000000016cf02af01fa6750b4d862f0cdd5a87a79da7c3fbedb0fa356ef2e7419e25b3a2bc8cbfa97463d463d0ab349efaa3f2b000000000000000000000000000000000ea4468fe6a85d36ae990d0ba959ae050756805c4c769c829de475a2990ef1c46de20d5b466543978faae0f6045023e85158bfe535fbc342e31f32ab4723c0d9fe95a2c64cc4e59bd41d13a08ac811780000000000000000000000000000000018d42a2df8ca475be6bdc468a82c313599239b974ec3d27e8b8c534aa4d6b85d4ee9aceb15c38b3bade2bb1706a2c2cc000000000000000000000000000000000124d5dc60527faf48f5e9574308f8a328b410de1cb49f2cc6f76b8a1f2707f2d1a94bcbca0a97bc38f24545a8013b250000000000000000000000000000000018b690b3d1e3b22946a91ace004e1d8f92eb5beb284eb05b52ac5ba003d7bc387540d33d088a02711522e3aef7f74f4300000000000000000000000000000000103080d8bb379d961da06bc4c148cb5b056ae115b3a0e33f0a8c99a7fb7b7ceda35d3902e0733156d354dd0240e4bcabd66f5a8f37a7c6a32088897abfaf5a98bd4722c411bf4b52f0f5b5648e89df29000000000000000000000000000000000f4d068354cb5b51e5a86163978386533f8f9b6e388c5e75f7d9ff5e1ab6d1637717d251f2b723b7d683e26a274d610c00000000000000000000000000000000001ec5a0d408c55f247d62ffef172ef26e45c41029f1d04e36f0dbb4fe8af414b0f7fe7ec0cfda66a2855b58592486fc0000000000000000000000000000000000cb1b68045076f457746621cd415d743701bf3ecae8d52dd5582c3e0bfb38e6cf2651a5ebdf521afb1ec5b8066444210000000000000000000000000000000010f5672f813470378fa806abdff90edeb0239b00d85ff23a3fc6798779f46d6b43071d66f7742897a4e53ebf6c7dae719acdd24190589ae7823a42e8b59598eca12bf13b97aa9a0eec17f5f79a01e8df000000000000000000000000000000001422fbaf1bc2908be5900968af61ffa7b3af46e7250e4663ff321f42e2db057bcfb2106c433a9eef8fe20f7138b71d280000000000000000000000000000000002176e68cdb0ada2d7baea437bec8754ea293d14afb85a811f7a5d740d645a53e511b5605445b110174ceb5e6720e736000000000000000000000000000000000a69e992b6f4f7eaad2682cf9ac2e58faee9b3341e852543c2aafbff390ae067a641b2b5693319618fde413fdc64d6c10000000000000000000000000000000009440317af8f5c753b5de4648b06212256a39b7fb03678f1913b0a3d402a50e74e2da5d29c211cdf0b292c132759c36d0291be87a213b0a24c92df5ce42381ca378dc4b9aeb4cb9b6918263bea827bf8", + "Expected": "000000000000000000000000000000000fa31d16d9625200c13a415fd61b7552646c62fb8db307e92c1ac3d2acc92336765a1db42407ab0f774ccf01291b9ee800000000000000000000000000000000156a77678873dcbe4832b9fc7f516eabc1a10f4a6576cfb15765cdf999a771a6a6d41021897dd783e9beb2db722a6fa2000000000000000000000000000000000ee4599a6ca9642cb4cf38f5f2af23271cc8c5bc6e2cf6bad572b618bff9f8677837104b93ca8942843fd5db5c30dcdf00000000000000000000000000000000138986714a4053618e66a85835d105f4aa2ef38ad18e34b2ee7ae30a4282f7e543c80c94bd12c244506e7fcba25f4c1b", + "Name": "matter_g2_multiexp_72", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000083c515ef8509b12ab85ad7d0a816d986bcdefc14778efcb3bf7c2ab61991849f279ae6a9f5342880837c0d0f4a4eba700000000000000000000000000000000020cf5196b5d567fc429cb9ced7b55e4925e18c914caae216a736886a8d886c4bdf6d704bbd0ceebdc1975ef530c665a000000000000000000000000000000000f3d0a217c224434604d63cef559eed3864d2da62ac00d49fab8c2c6e22c688496adc30c8d591e21bc0be404b62083c20000000000000000000000000000000003d0bf7f25bab0bf2c768b44e10a6022650f7d5b7d568d502b9d0b28209ee69b1d952ed848572d3e966e8771c20becc4b14c6a38cc998df3583228080ea10f215a6e6a4b02ddb6d43e8f459d494a1ec1000000000000000000000000000000000cc4c4b7eb7e358d4133b65e635fc13b8a92229706a6dc5867171a60a99a8e343045a794c368f1133ae6cd2788c3a7db0000000000000000000000000000000019508aa39fda9c3efced287d2571db97045f8b7b0c7a9c9d51796aa8017fc0e5abb8fc994700dd5c9f755edb518e096600000000000000000000000000000000049f68b0ac142715cfb385161ee70e453f0e24e2e93f3f96c3d69447f3a28b180fe76989427b2e392c7ff939011e04ab0000000000000000000000000000000004903c0f8e0757dfd3f5edb4f54a0e292df15ff70757df7b0b04c99f590a3dd13c6ce7bbabf3e14daf9f3ec60e2379aafee8614394c8109338432ec72f2d9babba06f1e7b826b0f2558c3247c923b23500000000000000000000000000000000041128064ac768664f076116247e0f8a00adaaa824cd6fff33bf524d0c76e61203408ac13b294aa41f5c462cd42d3cec0000000000000000000000000000000005e150c27979ff1cbe307511816be900648957624caed1f08d88347061cd783179c615258fcf3619bc4bfa53d2513c610000000000000000000000000000000009d2b3d97d29386b93d7af014ea8f1cfe2c1db5a9aa0c17e8430b0fcde974a4e7b8b42ef041e9a7b1a8aecb97cefb52e000000000000000000000000000000000d86096ebd88b2cdaf5cda1e9ca6b7f12ed5def629354b0570eb084bc7139cf20bb8ebe4438f87937b8b554e2201344c28728d06cd90050e44a827b44f14ea35e83c9b58ce4c3a7a45aed6f31c94fb960000000000000000000000000000000018d677cd67e96b10b671d2ed9234d7708042ddfe6fb804d2e9371a80ad167004f9d6b92d26b3d3af34ab7caa0e03964e000000000000000000000000000000000e34a6c85187d328eb33c2d5b2ca96b5210d47a779ab810dcc380dcb7e6b3c334ac8fccd7354aa9108136e4f6dd4ea0a0000000000000000000000000000000000ab8f7274ee3fce1511c58661625c766ffb0ac68bdb835a948b09b7510bb573d49000000e3d3cea772bd71d79681e1800000000000000000000000000000000135ca42f2103905748a1c416d82170f7d24b49ff3f859d6cb7493cf89bbae0217529a9edc835be1f9890ce105877af630fda665c40d1da93b1f132070e0b7c8c2c0ea0e66993b5a3d7419a33d118d25f0000000000000000000000000000000007884edaacca499491580c8c7194c0d60ac6eba95f7a81f63742451c8ed21a223ca545d5cc1e648b9d2dd05016b4fea20000000000000000000000000000000014c78d5d1a93760096bf6da73bb41631e94d6a1b251ed0be7bda93e4c50568420bd4d49e4a46e5be4bb204cdb6b0ad5000000000000000000000000000000000128a860c23a183c5bdd18b4a1853cb53475f1a893420bdf3271cc4a65a827eba6b92e1f9e8ac0d10c73edec5160c640b000000000000000000000000000000000ac14b2170042ee6561c34f77fca40e1bd2d40d01798417dd954905135ed9b7772e5689e6d4e543d44a4563da8c3ca40c14f014117a74f21e0b698a257ae8e3d6091ba76bff7912abb6bd94d41886d0500000000000000000000000000000000144df2e76821c19167f60630f50c939b66867a82c2a5f807e943676c876aeaa2aef2126bef7fc431f0c7b39e648542fe0000000000000000000000000000000005e463627bb2d22c25520c27c05cdc75e1f2ee3b91e8088399ee42ad13ca217284596e5404b4370995f71fdbf1c1c7860000000000000000000000000000000012323010d6aba1bc6b1d6e7f7e8c7bbc0838564b279d5ae6279f7f7d3cb5d96273e27e7096e9a8540463ad16deb3780e0000000000000000000000000000000019102ac6bb33bd1c5a158a584ce32308b6ee5679dd6d2acdcfa4b9c54674fecad7489d1e39c05b1ded88e4ea93620724d81a1239ad2c945f1c560fd1674ac7e87d49aa41a1f4a5bfffeab1147c0ef7c6000000000000000000000000000000000faf210330693663c8a1d1fef78e211ed2542f7ffeddca3e19be3ba77ef211da1b8bb5abcfc96b692d74f8c7df40b0ce00000000000000000000000000000000134153a252fd8ec5d9aec08ba09a94c4416f95ff6f4ccce59bd400474c836af5bfd941f03384ca4bd5c56fbe81d96ea2000000000000000000000000000000000b4532ff1ceab2a3a177cb83a75c16a833a2ff28df447def351134ec4fcd608b2b75b1f8035ba7d40a737087f3e8c1c100000000000000000000000000000000127e3ed13384b69819b34ef8705fe9a66dd01b275f1f74c2c724420546b39c70cb7a8295a6c1ec4075ead4e3312b8b603a02689cfd2c353fc1b4d3913f5a43745fffe6a87a7c223ec3b25b321584a75c000000000000000000000000000000001351d0d5d531a63a5f56aaf1d7906b7ad2bfb4e9d823e2659bed4e05e7edc9179a7bbf13405ab5cf410b25c7d476c342000000000000000000000000000000000f0ec96128e058e8bfb6e0df1331887245dee87c4f9721fc7f1d20c20a2feea7a7078a4946803ac093477707598d59b70000000000000000000000000000000009399034e4aed13cbf197d8c4753285effa72fc53493ca316db11b39d5527b009aec6350d579f9dee22cd6d4cabd88ad000000000000000000000000000000000002f41ed0dcfa2437cad7b12a94501266d670ed6956196c438241aeb90474d17214eec5d5217090d28892d95f4e40055af95ab3fd062088ffbef6ed887fd39aa1d527fe7633b876187ae12e736fcf2f000000000000000000000000000000000ae208978a751f8921c6067ebab4190ac8d3608dbdf50222eec59460095b8ab2abadd97616c240edd0a9c53dd006e38c000000000000000000000000000000000905224b317a1e64d8af075b6db9de46ca4481458ad6bceaf726ba0f63e81e2a0322e79e70a5a82034abf00d47fccc300000000000000000000000000000000007173c3359f0c2e315d11d646a76e6f500c0922401e4bf9f4ccf2f0801a567fa653f287fdbfb878ba0d9ee12e25396ef000000000000000000000000000000000161d4cc71621e5df13d121c77105af195c2adff5fc6b656b0fc1dd6eb2518f474444d8bc526ae16387f23a4ab3f342f6541c6cf8217c2a95792900e8fc39581b177a57ca00162c57131ea4fb80a4c60000000000000000000000000000000000266af9991c393d3b55f9e0f22b0967d47dbc5b0c97947125e220c4bf9f4bc58d32ebc7bfb02b2e329c933ce41d0d8c00000000000000000000000000000000004cf5748aae8dbc1e4778dc85da575de2b6d9d346f5dc5ccbfd82513166384111f5e5f2f1c2f7ae367a22146d1fac027000000000000000000000000000000000095dbe68521b2cf51283a8cfea1f20eb7ae37e6e945c5f879ba4834d20918b74981f9e0eff4543a79ff4eb36d84a9c60000000000000000000000000000000007953cad14379ffd4309cef1ed6a2dbb73a93db0bd3a256753402e525bb62b10aaf22b662bb2c704865690af995e7d284b7c3f3c4ed10bced85f36fd6dac2646c65d3c810e6d2d116c38aa5e10b29c2d0000000000000000000000000000000010e99f318111baeb1b4611847fdaea7cbd5e3ae532af667ad2498fb2e97b1eee0297e2811c7ae854b882f616da7733fd000000000000000000000000000000000e56cea75b4c4e4c669a492a6723fd60e351a66dc5c34c46469dc36cb04d2c23cfd4aeaa23d0e9e83d5b78a1b77696ed0000000000000000000000000000000018f838d6a582a52a508cbd6bbbb9cf515e091deb7a640e141dea4018af6593c001dc43a8fe4819a7877d9ecf53d5752000000000000000000000000000000000119aaa2ebcdb6379f7ae972cb709990a3e8254f1025cef308281bf7057295e3099d1f3127f76bd2f9ce0a03ae0de8e8d7e33f394e96d17efa30d34f57eecc45d7b4ca150a31b8d0484578151d6e65c2b0000000000000000000000000000000008f837c478e874b857f1c939a26a02e13061d50728c10939ffcf5e862cb177993e204590699a28cabc7593056617d433000000000000000000000000000000000432d9e66dc78bb58ab98771e7e8b5fe51835f286b488e2df6c1991fd36c3c537f2ce30abf24f9d4fb13941189972e39000000000000000000000000000000000b202de3708984f44f7d05ccd9e574a2a93a285d5ca262017346580be273c58f13165437dc90d1d4103d3b9eaac536ce000000000000000000000000000000001873e1251d9ae9448de8e7ccb7ca59a21bcc0d07a2819d140c06ec33cbba559ba90647494a7ecdec8b609b58cf7995cbfde92a31e571ec03e509ac8a70ed5788869854eef0bf578efe6c5e6468315553000000000000000000000000000000000084e07b6576c73aaf43c0ef9c5666dc988ed93d1a106b71e4882fc0cfb5e710b91e5d5eff57327f5678f662f4a451d50000000000000000000000000000000008a29751f1653236a48adb5fbc59059c7137d36139574c6af97314bfbcc22f77a4c5162092762a26b5da7887b94f2da6000000000000000000000000000000000a4fd84c4d58cb9e18aeee180fb05f07c3e1d7ed8d09940182e9b4738744fa6faf600b6f720441e0ad6391a4d502ac040000000000000000000000000000000018b356be2aebca82c54988ab2a2ec58751ce7a815f3dd58a2218a638753d4734d38b74ca0e00bbc8681768f5d1a02b646f7de01ad0f7b4dcaee1123bb80a71d3bc1e63ca577a12b14ae2a11d8c0fde46000000000000000000000000000000000de0f22cf05620a5d4bdcf50ae179f23a9c089fd6eaeb14eca937d9e2480f1782a1c67df76e06191a9b87514daa8bbce000000000000000000000000000000001981cd1f260e7d96e55533b8e29867f37af507b4a58abd69e0ad6af2a55228ab1c82fc2de52deb7b7b7deae2fe621e10000000000000000000000000000000000d22a7a567ec8826391ee711768e612c403e3c16e20947ca5861185c24728b6c7e7756debb333e7acb53d86032d5748900000000000000000000000000000000016fad52e1e86b9e092955cefdf93a10f30db896fb519fd2ca12571d8dc8aa352cf4f8092e0e973d0b0c66df78433251e2c69d21d40813ee40a718f0ead36b51f3a50e9e4e4b2de8acd33add62bfc1d20000000000000000000000000000000000484bb2452158bca93dfeeedb40745bc5d9a9ad49afa20e6c29fc9ed1a8fde33ce508cc252ddd05fc486f8ef78738ac0000000000000000000000000000000003c2d6ff6f292b0f0e505fdfdd2940e72bf8c2837da4ec9c74fb593fe3318a9b9a8592524bb5d40f6c38ad871ab7b6150000000000000000000000000000000015f888ae2722713e1b5b02803a5b48d53116c1a4bb1191c9da77ded8c6ab49f1620b0f7c7867957d84503cfd3dca1be7000000000000000000000000000000000fd96baa382cceadc252eaf000d47d8c1e2085e9f274dd9dbb571bf85bba612836e1da2453fd914135842e2750796b54762d89025196aec4f87da2fcc5a9188b4dc7b1c014dd1d705223bf9fe1e7a7d1000000000000000000000000000000001820de289f62058920ac3d4bc60da023ac29c431ee429a10066f305d2b1a333ffaa906404af977cfd3212b53e66726b500000000000000000000000000000000094e448db84421e25cd03be3867125cedc7f77f286f404524757f3c1a9cfa28ab6771293da490a4d75852f515dfe1a6700000000000000000000000000000000097dec124970bc63d8f62f9133157d412f5ad3fd5eebb444568cf0fe2825d6ef6577ad302842f35570c9977638c6a827000000000000000000000000000000000490bdaabf4db27dce906cfacf3160c0fe25959df4af89301cbe6eeb29f72e4c55bb467841ba7d0750a59a32fc8b03d0ffb9f3e1d43aece3af1f59319a8228cd81e668b1e250d03350958dcac9e23843", + "Expected": "00000000000000000000000000000000193358b283147ed5848559d4d1533734822b0248dd17b2effa80920a853b70e7fb683b08aad6ad4dbb91f964ad1b3bb6000000000000000000000000000000000649be60ba72734db4cc307a2fd8be57857f60660d0c496c0dad73794296552e17cb2eabb3537ce677edaac1c6997341000000000000000000000000000000000f91ce27345e86003c99d133eca50710c0722cb35af2ce442ebd74b46d659e0118be9bebf32111c258e4cb4ab795a2cf000000000000000000000000000000000d76ad65233522b1e079fcfef4dfa80f163682d7984d5062680a5dd4cbccd5044de4705013c6bce2140f7950032f90ec", + "Name": "matter_g2_multiexp_73", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013fe4afb94d08ae311b7442de7291a11e733d8e555f2da6f72bf99da780a8f8d357cbf3d8959f6aeaca7bf3f5b5bd10500000000000000000000000000000000025af713b18cbdb5a960371c2dd0317f4bfd0182f4bfd6b88d588b56fadc1a0398412e7e0a786c326aca8779ae384243000000000000000000000000000000000581c277053c15df8eec05c34267f62e63faeefa2d124c2b4b84d2a739ce5484641ce955fbecb901d1e8ca816690189b0000000000000000000000000000000005355dd304b9b60498a3fb1f08e1ba0c98db327365ca9a0365a7f1e5cb56aec43b7fd2b4aa104eac7b1c30b6f53cd422be285a119dc8cb32b1a0c5380af736114a32e9d1ca870abdf278dfa84444f70e0000000000000000000000000000000016b5b3a6fdeffe5b9a0244a333ada4444a2e03771f94433832a4617be696e467b4e88ed80b174809dde4242bbb51248b0000000000000000000000000000000003dee846c5b84f89734016e547c63c02e4be07dbbecc86f811e2d8d3245f91205bfc055882565371db532240da1a845900000000000000000000000000000000194d53bbfa962def4da2a9bc7129fb6242a3922fe26cc4e603528ff31393a31d03dfc3463704250ea2ffa973ad175153000000000000000000000000000000000333768faee332d7468119b9e0469bbc7bc98a482562ff2fd9aeb6d9c67daac9c3da1db41c9e12224a2eff2feee51778bc0535bd504d7b9658e459c2e79b86bf4e718baa82b8d6e624fba0eb141c7260000000000000000000000000000000001910ded86d79f9b043bb79cc4049e0652c13d0fb8db2f070d695124d7a42cc3a2238282fc8a424fcd8d9ecdab4bb6fad000000000000000000000000000000000dc8d6caf97416928d2d58466219f054c6f28f49b2bc04d8a80cd46a308bc95aaca3a8df1914ab0c7da341862fdf47400000000000000000000000000000000004380ca7b1f7ef96295589f78a1683a51bce4b2afe50bd6076ccf5d07d35e6cb2ec7f74fa35097b2c0b9fff3f4797c1100000000000000000000000000000000054f492d7442b1c0d1293277d95efe822faa7d8881b9afde20db58d6267e049b90d0c8828a6c12540f4ba1e7c9ace6d84f3fa09243c01748954d84f4deeb460f3ef78f9c34296c6a092952bc463d7284000000000000000000000000000000000bba4761eda87a304a80180c2447a1d5a52f743015ea7c728e70d6a5defe3139c80696f842da3f06586be8d506ca4bc90000000000000000000000000000000019ea930d5733f4a1ace9fa0139d412d65b2886b659770e388894592de0694d38876fcd86d14580f9b92518d5496fd44c0000000000000000000000000000000002bf5d9a36d641d1259c1b30397aeb071b88844c4cf17e3de0984129d7b4d67865157ee2f682e7cf9d968fc07ce43618000000000000000000000000000000000f9a4f29868654abafc7ba935aa22d3d010023ef5112683a037a6c69b9e89374b256b8e1329eb5ad306d9f2063c22c335d84733ccc41f71a11d61852fa336df566109c5538c2c5f5cf2af961e93797fd00000000000000000000000000000000004f194f21373f09f8cb4984169890ad3855e814a4768c84e9fc97dfc181c60114aae534a27d3eb225b2125131c754ee000000000000000000000000000000000e6f88880e9645e35806d193f5d16799d63e2f9edd8ae28df54d19875c61857b0a34819a70ba3e9c31f00b5826b0cdc200000000000000000000000000000000193293c6cfae9ae4b24519fb23469e2f8dc4eda8524ee0b00c7141587b07c8a26a29841d41cafbd24bfbea2034a9c18e0000000000000000000000000000000017433efadfe9873dea9a68177af3d5dec4a13dcf4a710422d52020d4d145e2523ec0b48acc533a1ac7068c08ae6aa28bfeeb95c32362014caedf2a9e066a775e2db0d1322edc86759faa99bd70c05b580000000000000000000000000000000011dc003f7542f6822cb872117fa658638dee2a15429aaa9dd576a7e895bc0a2160bc120558a32aab9e646354233a1afd000000000000000000000000000000000fe9ed8ba572ef7d1176176a31fa92a5ff3dc38b0183ea1e22618e3b3214ee78c53074d4c60b5056901c6f046f8210070000000000000000000000000000000006ef1c20c3bd88bd6787598dcfca52da4e5e0e7c7643af983c709b916e71fd15475da30d763ddba0899b182cbc070ca20000000000000000000000000000000001a38a2e54a44ade572ecde076038f5244f266cd99532024a377829a64c20fb2cfe1633367c74b5990febb08e776bc34edee2ea28b93b2daf4ff927991769a9c69ba16490b5676074e64f5e91fa994a60000000000000000000000000000000011ce7b2cba037e5f3ff19b36371d34e287eec807178dad4118c6d43aba68623e182aedbf911a2ae5cf3d0e690ec3ba790000000000000000000000000000000017a617453f391e6e2437d56ee831ba895084f60d1a5f342e19a242b9661c703219d90a157e1b55f005f5059c15c179dd000000000000000000000000000000000746ab134c7f4bc19583a4ea4991c7cec3f651a60582b40c17b2d18cf6e252d93d2f3c2a1a3399be70512ec9eab251de000000000000000000000000000000000698daf214f2de44ebfaa36379862bd9ffb40987dfc8e632f14738c93c8e5c3fc7be9fa9100fb5f7440311cab34fe1897a07e50c1fbf1b388e9264c762798c31fe76761508d070f06adc63130df07641000000000000000000000000000000000e4ac65ce62180ac602ad68098ee31cb747886e95a183e4f819d54af99850d70496e6952076084dc7bc2d3f7a273383100000000000000000000000000000000182c718fc9e5cc961426258e82594a5cafc36270af0eb50646d161fcc192c30d40d06647e14a282421638b31f378de940000000000000000000000000000000002bf448ebd27cb6270e1b87087796ca6534ff51ba0962f3290ee1d06dc18ed39fb736ec95632b483f44d3a9d0e45d1d50000000000000000000000000000000018b956acc1300e60b22bb936b2b52e2ae82e256f15f1415263157965179855137715c321d3765c5227dacb63ba2d6225f0056903b4508cffb6334bb5f645cb553a8cc61ea6765283f933686f172f8360000000000000000000000000000000000f5372651ffb40bf853f6f8396a7c7483c401b89b67e098ea888fde8d19e7552a006a127af1f3311203434126ffad85800000000000000000000000000000000050d7e89b21c7484cc5831885422fe7aa8e898df85cf7a3a275370623eb9660611610cdb829d3935f0d0955e0ac97506000000000000000000000000000000000f83a3f79f1dd110bdb8521e18a64490d567210801d77fa3c0c6e5cbc7285840da325cab7ab08494c8d516511eb189dd000000000000000000000000000000000f72904131be66380c5a18af4857ada7c15e88572197e100de1cfcc9fdb4306e446f2f330fefcccb41b676f24e3e0bf88031f363c8b0062b34d48f4c2e5bdba884005e52f77ac04c2f29dc7ef10fac0c0000000000000000000000000000000009ba6bbf102d390638ceb9259205a1856def2b3a4b5209eb3e4e54074347f71b6c06b70764fe85c8dfc9074067b8d00d000000000000000000000000000000000339c30631229eabc1230240942bdbcfa6e18f23bfbf88b7b8a8fa92f18e35d2f7336f0b819e875ac643b43e6d931e68000000000000000000000000000000000600cfeda6033ff51c3bf9182d22abbfbeb6db46c0fbe15ba82e72fee483744ba5a57ab2eab6f35927b4ba6d2b150063000000000000000000000000000000001530bba4db8a60bb6b7a05f72dbcd23044011d75221d114b839aaa9535400874472f94c849597174322291b5cfec4974cb146e27a9d36dc698e1982afc945af9500fc5aeba719d06d0c4e4eb245034c6000000000000000000000000000000000c636ac98557e22897fd101dc6c54d87060f460b4cf2c5a88ea14641e2a8a9395492fc5a946eebbba36dbe38f6f5c0c60000000000000000000000000000000007fe3a557aa93f2e9aef4ffc55d39a9172475e6595fd57409df3a7fe3d11558c4d3dea3396ee62f61190add83b85813d0000000000000000000000000000000015b04e0daf4a10541623e7523ac5fbe57dfff9ac17afaf4293c493c1982f3395980ec63046cb1d424c6dec91899202c10000000000000000000000000000000019617b191e9e493751b0a02511a18757330bde56722a72a29a399ace983db7114f84795e2b70bc9d670cc0095220454ed983f98fe5112a55c23591bf4e259d072f893944741d9941a00f907749e3c9990000000000000000000000000000000017472b8c1cb3ec528400649fe7c39e3908b16ed69b42d967e4d225b694544e8bc7ce5bec87019db5539f1de39dc6807a0000000000000000000000000000000012b1c4884c37037a94f84c15061df5ca6c05c5a35ad9b37e3ab8e8297c9000e715fd2bdc3f2b485e86c415bf656392a10000000000000000000000000000000002c21af2933029f04b344be76e18ce499def4a0671a97dd9b6a108d0fb23852fcdc56f882be0319978952ef04a207a6a0000000000000000000000000000000015eb31e80fb162d5fa392fada8d43648ef54d4f9ebcb0e9652dd501f55a8875a16a148d42e283ea8bb2c5a38bfcc8843a62f99ac46f986f2f29f0ad3da0310f061e691955c711850a2816ad7464614a70000000000000000000000000000000015e68e011ed063a9fd9cc8a806d8e3561e4f449526ccb6e5ce983ebc4fc49d61d26dad7db64f56ad5ab0b54fbdb76e61000000000000000000000000000000001617d7387fedcdd772a34b267a44315212d21b798c0fe1e7a9ed3caafb678910d9c9c3bd1fff4a3c8e339d0c90a865b8000000000000000000000000000000000e2b3c9b9cc10f41c4c0129d34c62d526aea47c77ded91a5ca3afa0da1801bba81def3ca66a978ebb2d1f3227ea82a9700000000000000000000000000000000096b6caf7b6f29e91bea370f91c2576c188b08b95f9df6c7df995fc9879c11cdbe2af86809468d472fcac8a89716d1d87ee01b0c9c6a6ca1fdac35d89c803bee3595f03d9d200affc5292d8a7c6720b80000000000000000000000000000000016daa86ec04f57c72395d96b6ea5d6ba7cf2d9d4a50eb90f7121545f17c1ee16216f4086481d91e59fc5ed8542baeb7e0000000000000000000000000000000017a783d60be67206241e0bcad20e371d86d47d88ba1293b73f32999b0a1646967e5d031a5b28517f035168d7c7d7927800000000000000000000000000000000058f24fbe4e9befd8abe364c961f0ca4d9083260234a939bf6103a3e8f10a8381a9e3d74af7c13f159e5c7dcf456df00000000000000000000000000000000000485c9448fe3a069eb024ec43aaf563a98da09c02c294da2a94a98a95430e25b062e8ff886fb5fca240fba1abf7cee60297fc700698c56877be6764f48a836d210bb33e99b5735da9837882269af9b45000000000000000000000000000000001230577527a0fde2e8e66b8c4d17594bdab8be1339866819c8890c600b35889d1e3a749fe15fd8182001e30e6420ca6d000000000000000000000000000000000ce03cccfa87229fa8d560884d8c7963276d79ae9873a23d550b4555cc4bda35a242dd2e70cc730b70cdf898609b3d8400000000000000000000000000000000174aab1f142fbb7a45bcdffd64c2d38b99c8919baf9651aa430bcd39613d7565196c18f0f4ee6fe05f5c40ddbcd4a67a0000000000000000000000000000000011dd23f59ca2a033ee5dfa50afb0c7ddeaec6d4f50e1866cca3f061fa03594216f005bc65b2c97ed1109c305e16222671b7ac02db15cebb8af459290c35eb5a86cf98b86d8336764c6bdda6698b49b640000000000000000000000000000000014e1cdf4f10b11f47c15d0b6b7dfccb6081d05d116c8149989cce4f1c53dfcd2d0b7443677b03d037710eba813f6f597000000000000000000000000000000000c8415c7d5508010e0db1878ca663d359525b290b2f02c61436e945145a7a4e1b3ff4e27ea1b2c8d3adbe737d8291b14000000000000000000000000000000000e424ece68003cbfaf65a54dba51e7b0942cc53b2fa9794b4deb6aef1dc1ba1719cba285f9a1a59e71a881eebffe2eb9000000000000000000000000000000001404f9a3146b7201b09c5fd678fdbf2111c48130e82cc95012e5aec1df7e64a3b3c727afee4f603e620925686e126c0f5d1a3f78a2c2ab7b85cee68ee670f50a176e988a341303afb7722917f442fab6", + "Expected": "000000000000000000000000000000000e9f6bedba1f6e2a3ff33e0e4b18fbf8e77558bf42e89023df6338b03a648c591486c63c2ecc8ecbbce23b3ff9a7ae6e0000000000000000000000000000000013d2526d83b4495b5af645d5a1af7bd40bd0ebff125e0fa14f10d1c08511dc29643dcfbd25ca0bee5705a56b26c558730000000000000000000000000000000003fa442ab532094d47f1a9111c87deacb15d80ca6e76bfb5f9b9a209bfe196643351d778b0c6d6b274b4799f733abacf000000000000000000000000000000001278d51523d5d9aefc0d3783e745da54f74a88620f2161090a398defdebf82d13d5b5a21a5cd466352ab8685b034fa89", + "Name": "matter_g2_multiexp_74", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a497e74635fde8caaa5c9dfe666b1b40732e58b93a72d39c8a60c1f4b262e1f18f62229a30fb8257bf895352ac4d249000000000000000000000000000000000c1b2fcbd7f78d85c73ae55f67110b575750bec353e55761de0ff09a9f8a2d916c336655d8f6a78dfbae13fded5a9c36000000000000000000000000000000000173893333d998dd32cc3e82fd7ad8ce77003192ad2bfa1b1d2b43f9466898313276b922f9fbd8e83e86b67acfd9ad780000000000000000000000000000000004ed01b702bbafc73dc1e6846bc944be297ff08d1dfef397603294c7fe11668cd0670d386a8fa0f0f02c52d47f54a11b34aaf86eb77ce03f1d8eacab84d5ff98a565fd33a9a2c40f2a19d7c041a7e2a6000000000000000000000000000000000b5ec74a2150dcf5ebe09f39234c4dfec623318889d92b0bc1f197a69650bc48d28a1112306be763176b691c6915dc7c00000000000000000000000000000000028db19af73ffdd0111dabf9c7d6879cc7389320a249f108b41be8b1d4c259d5889dbcbb48b30a288e26cd9926682d1900000000000000000000000000000000172fe526c62f9cae49e6d3284170e6339d5af256441590cae9507c61f987eb495d340500cb761896163cb8ec631434690000000000000000000000000000000013bbfcf9cd3167b47b48af5f5ed7e6d45a5fa38192756c9e140eb89a85c75602814f767c57108cfa2f726e71f31548f808ab2065f1d2278caece0939cbbab4bcbe3eacdc80cfae6e4500a5195883de0000000000000000000000000000000000052d7a0f93142b36489cfa21d76c0eb96904a3ddd946a53b8a6730036d88d30336fd8aae3ab29ebf62a48c6e849ca66200000000000000000000000000000000198350abe8cc91bd675f26516d771422c128d5dc0af844c6c1af07bf04a1d3ad9654cbddf2de5b7828d1446c45e7828b00000000000000000000000000000000198f35692d5face8dda4b464ff48d650145242852fe189748783b1a2e48806294368ae0a99481bfe739fb4962f3b86a4000000000000000000000000000000000e3cf2e018a7e0acfee25bc3a82cb282cb377bbd72ce3044dd20e109d948f68720c27aea3d4663ee45b2de6f178a00ac58c69b55bac97a633f3ed7816e77e2a26cccc029f7e7429c86145ca4645eb41500000000000000000000000000000000150e6b03a3052d043da6514bf4ee09baf1a35b2a909473db33ea0bd4c6af7d7aee9a8366c1d08d2adc5998635eb0dfb0000000000000000000000000000000001370c2976b0d36fcb955e797087e6ccffc851d2450cd63833d6cbf52e1fccbbbbf9dc695ee45c7df01c2828051bcd79700000000000000000000000000000000048b5fad2fe0af7ccdf675328d8ff5e63b564d8436d04c55b23b6ab7d2aedbd25d614d1780963fcd03d569bed2085bae00000000000000000000000000000000141f94b4e7ba542707d0c3cb69f8dd79e499602952be2374cead840dc669c5ac57089c5fd60c44291703b872098fa2daae7faf23e841bd53683521cb3cf215577fa51f0f751714b6aafe5c740f66208c000000000000000000000000000000000eec51e0ddb8cf9914304e7766a7418e2854ca71367c1d2b3875c12b7dc5c7cc2fbc136037bb7ff72458027104ed3f270000000000000000000000000000000009fe5e8d1918f9b5865a8b97c2c2cfc8bd750a0ccbe2942070827a09d8e41ca795a86b2262b10462795f833c73e788ec000000000000000000000000000000000b95c9146f3f560ad880ca905b5f297e48905680b4613e91f393f72ddb042f6a6201628fb5f75fc23f2298cde66a6df5000000000000000000000000000000000a29a8fba7644ac96d77ee73a93dae23b03d81a57f6cd8cb4594b23571cc1f658f163081ae50d72e09c6513d1cd2c8bf72022cdd6d942158bad47a53a9b0c3be910a41036874975724a5cdd22c012871000000000000000000000000000000001807dd8d2bb40a642fef693739b1df12fc787db0f031306f31970d0f59f0c97c0894afc34b9a9913726a20dcb7d5191200000000000000000000000000000000096fe8bb5e911c1ed9985ac08d864c7020367f4259a0d074973a26cc421a44e8034a7007f6d1639285cf8acb8b2d64a60000000000000000000000000000000014026d43eceb26b9ab5bdd4139d4f94349b273e43f27737f9ad26d23454cdb1d35ea793d21f057359d28328a82d5290b0000000000000000000000000000000003dda2a84bd1f92524a8ede9f5e81f0f64b41b24510f4e0b8146496a776d5b509968f188c12c2d66cf755e5000cddb3b800ae0b956e38bc34cce55bb7e88f1370a30fc8ed0e3f1126c68c30792a2cabc00000000000000000000000000000000011246ad07713d1916c662679ab757c053e33def437d7a976533f0ce80ff6ffc259489c26524ea96898c3747c4127539000000000000000000000000000000000acf66265811a57e47a4c98b40b12a37c6f439550b18215fcf856c167b7218397d7d559f852fb45077945a5074f460be0000000000000000000000000000000009badf2799f1c43a2e3859123aca91e894f86d6298a06a9127249100ba270f2bdc79cf511691bf2d7faa45ffa17490eb00000000000000000000000000000000069438b1d53efcc4277ea7b41cbd28a19f80b5380136f62121e766bd2845e13d5cb40b2f15d508414876ddde491a3830a57c3322133d6ffac661c888995e7cb067ca1309f3e9178a266f1a410a79c01300000000000000000000000000000000112c4cc34da9e83207b5ea8a9251ac5f004546596f2294b3fd51b77ad8d8e98239d53ec4f527c7280801233175500b1b0000000000000000000000000000000011dd8627748c9a2b08524f88e560cd3944bfd1fa17e1d6e2e9cd025b04f2e3ed35125197136afa2848d24fb5fd19508900000000000000000000000000000000093219f9ffbfdaa60c5965b45a5d5bd923eb5d3971542ac147de3f591a5fbe31b30704a0061a524e2ddd05a45dfcb6a10000000000000000000000000000000006407dffb5580790e250a72dfe68a488431f61f45ec9df279217b8800f0ac1ab585d84e486487d5688735fe5aae75bacebe67f3d067b0d011abb31588d1b2fa9fdf8a56bc46b1a0196e926d4ec73040500000000000000000000000000000000107ede23f8e4f273ac2647fc251008905966dde32339c023f1da3c4d35d483a55b54f4157a303e68e1dd7fa3f3b14c8d000000000000000000000000000000001739327f282812fbcbeccb12e40df049284562d8986b8d4559787e1d5247eb6c83d6b838d099f36d8d0e32da2a7999a10000000000000000000000000000000005e5b6b2baede3ceae776da5adf075c1d774e83d6129ccfe7e835862686bb4064b187cc0be0cbfed37e5cc039f3a3fb6000000000000000000000000000000000249554dcfa53f73ef8f08daabf20c55301f75c8ce095cd794061c55e195221602a54ba54260980bcdb35685e41d0f4ffa1d6d0d1876a67337d66c596fbcd7eb22ee308e4a5f66cedff584f1441be6a700000000000000000000000000000000048b7fc5a71787231f1c7ed2134be528fc8d8f77102bda806ccbadf4f9bed79ee94b43c0fd3e5b1d776fe73d786872d1000000000000000000000000000000000152a1f005a64e16949d7249c3b391d5c1e0ded4893d0ce926cc666f0f88b64e8dd6ec4f92ddda18127ec24cad7e40b40000000000000000000000000000000013a2e1e7958a53307adf3beb32a88b7c493df0e37e074c9105da3c09bbaa01fed092fce2b1800790c6e8af3d30ec5a81000000000000000000000000000000000e2d405806764c75122c1b5e410673b28759f26af7489cfa6f35c6c0dd16c508af045009853f3329cda4a67948232bcef0c4ac919efdf3d0e649126da7f8ca3daa30b6ca6f3be6854c0f447a63cf2110000000000000000000000000000000000a71d61dbb3ae37230a2dceb54061d5f8c1ce645e20ec39785c229cf79aefe238959b2745e3b50e4b3c20c7a8e2ae27f0000000000000000000000000000000010e82b8dd5faed6bbd5755c4e5a88edbb3511d3f4442d1e44b82cf72a6414bf6558d29e8907b07f71c00f537637605bb000000000000000000000000000000000d8c93f1984b742b5a02777b706970215c7d8eeeb7377cc26c3af9005648c2eaea7f7a3177b6e049b132ef6bb4b188da0000000000000000000000000000000000ff082a252082499d70eaeba6d5514fc8d641404b48b2ecb256eeb40d9c6b68ad5af58556c9dcfc5667621c549b8ee760d8bf380bc2223efc779a747c0a36f8c2b18c3e821e96163bae14b18f3739f9000000000000000000000000000000000f4cf354b8de6dd2231448bb235af3c84daac2db49abed345da6ded50eae93982a4f2c27b07ce725a062b07fdd9058fe00000000000000000000000000000000076cf19408f0f0379c7e65a6675b9856782990986f5c6d7002e9c9c74b95ab875924bd7ad5e4812844f6d1f530e58deb0000000000000000000000000000000007acffe32f96f5e56557965e3db8dce87eb7140d93608cc003bf4a43fb261bb7360c576da0b7c4dccdbdd9cc53b5c5f8000000000000000000000000000000000eba1c668fd9323d42d6a82d9f075cec2d278cc57122e25ccd72cf8b5a569552cc6b0e9f88d23b9b7af18f3bfa0cc820006c3a7b5ae971e4b0ec34a1007a02cf8c55f067115ba00c5967f70a7dcef9d60000000000000000000000000000000006157cb6e2dfa2733d4c489ec0334f0303ff1ad410f329cb59f99a5fa3ed2cf84eb7d2f231078ba5db0954badb58425f0000000000000000000000000000000003dfee394f4c140e2cad61e8675b26f91244880d9a0b6798d6111090dc9d080563db5c89b7293dcaadc74ea5849a08aa0000000000000000000000000000000001aa1e0683014d5b6f99f469a0b7beefaf05a7ac0298bd1a3e2da409f6cf856f70bc067610fd705a851cd70054df9562000000000000000000000000000000001571b129f69f3a6717272ff75351fa053f46294f68ba3f859208d6c91ba5eb9a0f2133a5e139d04e38c7f7aa303451768f29e330b48230de23e0393bf1614cd26685cafb899db5a164497955d3e98be4000000000000000000000000000000000c4e84b7c8e46daea67c8090b27dc28b7867b89b92f56232bfd8ecd9968b865a057957292e79c6dc08162f9e91e6a4b2000000000000000000000000000000000b8d1eadcf3f1de6ee608a4a0ebb7defeeaf4e251bf07717a6a8e50c07223ca32a2ef290f26d0de14b1942e02acba39a000000000000000000000000000000000e901b546a4d3c68e4432f376c97f42ecf0724777956c4ffb1e6ca4fda562e57be788ecfa45ba3afadb439c2ea546ff30000000000000000000000000000000007ffe01da4fbda9fe5d47c3bedb4b92fdd71ad73fa272b071a7a7d1cdce7743a535da7dfe05a43d03368eb97fff54b2d861ffae8f62572938925593f7271a56e0f559b56bf97c454c38547a2185e2ce70000000000000000000000000000000008da0fe413e31ca68f84032f23bdd5399e01eb3b5ae47033c6834a39645d7b5cc2ec937067b91ac6d83035a86fa841f9000000000000000000000000000000000b950b982323f747782d9065dddca5332940058a604829e31560a6bf9b03ec72b09cfb87a1cd244ec694c7cf192c37ac000000000000000000000000000000000f4afddd25eac15d2248c71d76c9aa27323f75141820efeef1ab4f5003141053f138d9a7d1a901961d0f2c210ade27ed000000000000000000000000000000000217b1800c53d53459b00b8e463df1882b2cbafe85043f08093a5414e58ea7fd4dd933c601acfd7c154d0e4ce187468a2dd907071c2d39fe710215d174452459cc31d36007a1b5570a27ca2e42c8be55000000000000000000000000000000000046aed1acd19201553bb6a88fd6a6c0525ed44822d2a4ed3bca48a0a2b75e76cfcdced8f342b81ce03ffa72e667b3bf0000000000000000000000000000000009a5adbac43cca3402db016a2138342fae89285ab1fa16d7acaa9c3ee2b4e3df2641f7392355996bef7b1578ce1ef119000000000000000000000000000000000c8ebbcbdf2ac3fbb553a2e589f4b7c259a1621b83b14fd1927f92d9f6cb27e82507d7943ff5930f0c14b9fc38c9857900000000000000000000000000000000105b729f678db31d04ceae0aa37f9cb0b0319c4da9a1a4702a11bfe3a5f2f1f2af09b9cbd5ded5a930e2e65f4279a31699893c06db2dab559f2c374df4298707dc1815e55034dce920ae7b1df2ec8d23", + "Expected": "000000000000000000000000000000000708e9b926f2536731b02b6b75305c549da58e312d9c53701a993624697af2f3469af34dd4634467f8c98a0f721cd9c00000000000000000000000000000000019185b84fc0511a048e3c39bc10334c91dc1052d323a31c8bf325479a2fa3e4228f8260c0e725c2b89d5a0319e6fbed70000000000000000000000000000000013c7c441d5cca81b48d43e908d6a3bf8b5057cf19e4884227cefa9b235103b46edbe01bada06bb9b620ebbd016d537630000000000000000000000000000000000431182c8a1eed66073956fe5798a894be396403c072e766cdc262b719d1779f960f4aebf61c1bcd4d005d3c7413e52", + "Name": "matter_g2_multiexp_75", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000199f555aa5c651183f52470e36cde438422f41c9b2d1947510665254b74ba0bb9cdc6e6a1283b0c8f58d8f009eec46900000000000000000000000000000000018f1d8f22f43b4649300aa23ac92a2e8f17e7e3853b912bbc8e90588125c371084cb224c2d54dcecb4946ff6db53cd02000000000000000000000000000000000efed0bcc83a52f0faf9e260815da8d4e5286396081268485aab052a96af8eea0112be6cce1486b10b60551ad6c810780000000000000000000000000000000013a3b1ca3b9b7d50083c10d36997f5f521d4426af8d2905aa5d074ff37e218a0c96c74387485c2dae24c0842b7a74cf0d8555388bcc6791802ddb6c0f4cde44f45ac0b5d7ecd918bc34fb9fdedb65b94000000000000000000000000000000000efc5a5c506e94ad2754e235e2da866d9c46342f14d518f12510c93f13a619f6bfefec50c146d6d6170f190497eff229000000000000000000000000000000000fb91f34356005f38c9804250549554cfe67ce195d5e218e4e1b1a4fb904257bdb68d6dfb013e8e85fb5a4cbdbf0f21a000000000000000000000000000000000f09903db4c41fe3f11c6f0cdb7c31a131033e30f52cb66ba10c2e7da1ed8a225ef280d313630121701f9a490e8a0f5c0000000000000000000000000000000003484f7e8f7d67ce40b4cccef110bc255d91f61a4e1968a9ad37e25058eeaf39e9f1ff89c9b2e515388a7c1b49a84a2c33e5999498978d14c9de06f7beb2fd870f6f16dc42125fa496606e65c7466c0f000000000000000000000000000000000444215c3d4a7d62201ea1b69890e2ab90b5f5c6ff56fdc9908634c7489e785521b8dcd7ed409cf09c585cae8414a3250000000000000000000000000000000002d70674251a0c9ba76b8bf3b70547da77cde5592da9204954abd6d8aec82799cc0fa4fcd42139357043fc867b3d0e0d0000000000000000000000000000000018c57fafbad2351a3da695f8b523443e8c763dd7ab875caaa6a494a498cc40b1c0d44488e2dc80d1f0bce00a2c90c67000000000000000000000000000000000125d5a87ee3f558b5e1e7664b0cb95c195bcebd5e43b930fb47d15eee4fd50b3fdd0a401c9bb011c326acc77645440137894a51dcfe5a8fa4da1745a696c870b353fb03a31238b8744840a78084bde480000000000000000000000000000000018790123ce8b3b72d626493a16936c47770a9b06ca45b17c6fa5c7759f088cf98de8ce7b3b5d6082e9e42b39acf76f79000000000000000000000000000000000fea86cad8b40f315d8378550f6d3d831149339a8e8dafa77295859ddd2417e8f5c0ae2baad25fcfe00de14f45a537170000000000000000000000000000000014ad78bb2bce966d52b1fe1a273bc07f2f24b354465edef6dbb1e0123c7c3d7550983b3793ff1c7db846e88eddbf33c4000000000000000000000000000000000c0daa6fba40ec59f6b34d413130df5d9137297d1b7b71b83114a6570fef8e7f83d6f5689527164782f92da4b1ea12e8fb6a294589c816e18859cec34262df6490a2af6acc7daa3de861198c5bcf4b13000000000000000000000000000000001186b7c78952e5c32a9393eab07ad4532471595bc2c5d8137c61dd7fe6b6ca3aaba82dc205a559bdc15421a001b7270d0000000000000000000000000000000012d56b6fcec3d6511d2d723601cb8c9faabdcdd12efdd0e2bfd7c9292f2c3bd7f39c6e9aa53e6955727f88ad69c5b4f10000000000000000000000000000000006a5e56e4a42b04c03619c78232104f1f1f39e755058a19354eb230f2f09bf486b2586817aa6b88f27b884957ea0226600000000000000000000000000000000118c8521dd4866df907ecb252d9ce7a489f17d0f240d054a5dbff6c35895ef20b205236aa6e5be6f0825f9df87878ab783c4a3460caa35fc0e7342dd2da5c7b6aae818eeaf5a2cbf4794387180b95dfa00000000000000000000000000000000092809d18926c20456857826491f55cec17803e9e7d43f22faf4da18ede3bda15e3319539017ab20ed1de2bff490a33f0000000000000000000000000000000018d736b967eca64234f4e0018e5d6c902608e265037d9b8ba42dcc923b84ac62599e153e1c7d00e552ecc5aac57d1a5d000000000000000000000000000000001804aee99219354d4a5c46328f0658a417c85c6bc89af6db29a4911c4b0cad5638fac5ca61cc997fef3450cfb4a6c666000000000000000000000000000000000bf99dc4a400adda5bc89762e9011dae8ada23b284e52e2d49f75f1c75247f6282c95a36f7a72f896ea308131215404bd2b65c1580bb46e3a4cd9d9c4eb7dc998168c66982448abf3a4e08cd12f612b1000000000000000000000000000000000604f8bde85c0b26894e0de155cf896c911bca47533362a0b59ccdad0dd64108d33af8262d3ca2ca399306723f2482a8000000000000000000000000000000000ec10d3777aa54cd0cfd84b4062092ca3ac840a24e8e8aaad5f4c275e4d45091f838ae522efb1b2a0fa42229157297d300000000000000000000000000000000132cc70638d02186116773b31ec0e571a55c1cd78ec055fc647ab09cf4d3c543e0552d559b3daa4e99cef031e583e61500000000000000000000000000000000194a6a32a269692906b64feef9e4e8cd204e560b98db8c66380758d2123babae871273b4c571a1570a317c13a51d0fe9120892aded230949b83bfb2dbac054b83a9dbb852bd0ad85dd1d7f715852306f0000000000000000000000000000000016d05912dfff44912bf34f242ac85eb55bbb8a21625d45496c76d057f518352528c6632d6e8adbbccdd5983d13c26953000000000000000000000000000000000b10aa1402c15fd601ce605ade8f25531ea8f95cf592bf4ed86c4a3aa847dc8aa2369655ce5348da30a897fa8d71ffd800000000000000000000000000000000183f5a2f40da0a0f4598c6b9ea7b99f8cda1d85cec0e6da5365d7eaad1e9a3167bd647e5e654985f395ea72257f61e5d0000000000000000000000000000000014e615e2d5072c1b536ffa607f3a826ce297800b0da329fff397b6327800ecdc879e91f1e3ebc26c18e188e1ca66bfd66af9777a58539e5aa8b1fce0994e0e1cdb5877d93ed4db715c5aaf74d6a8bb1a000000000000000000000000000000000f3cd275d72a637bcce855e2e20727c6e5a1f15bc8d799231d3a7f61311d4cd2f58cf38448675aee9910c1a3d0b576210000000000000000000000000000000019efca445312f568727948c803d06b8d4e2c5289015740f2626fedbc0047d344aead06ef521ff7e139312fa41d1c107200000000000000000000000000000000141384e1c9f79e38bbb0bc1025c079741b93f56e150df58cf9a61ec27c2877c4188866fa197242965e3feb47a78c68380000000000000000000000000000000010638286faa6c45cf028e8e3d200edcb348560e2e35902927391401b3155240b62a40784db88e02b874e128e3a2132b5f37e2ed8e96921a0f9bff8b43d432b382d7b59938e269c381351ea49b8c1ba2b000000000000000000000000000000000c7fc4216767ed298206bc142862c138d78726e2d39afa18fe5732616c73a965d95cd2032d4b2f5a4d562be48ba6885a000000000000000000000000000000000928bbbd76b87f58ecc850e1aa4a2be11b15a81786aa7ca8cf0f6cc342db87b66c435f009f88ad97b747400fbcc651e10000000000000000000000000000000019f5ae9f06f2bc27a39bafacc7f3745fcdf8c78c9ae8a3c066ffd704aa4117eba773691ae43387b93e86d2e2de3688700000000000000000000000000000000014360a7ed73c05ef5fe651321f7e839c920bbc1896636143b88357cbf76e15da839bc7e1f1e629768d447c9d313cec8e23f4a77a2c34a370a9b59ab1cfad77212e433464d0195f0d2fd20c69141389f50000000000000000000000000000000000b9d955f9d28f9485d0bc4a961f0acbf09ee5fef38ccd81a2c73cf87a461ff1bf28d4dd1e0db3ea522299af67bff93b000000000000000000000000000000000889061e71866001b0760f68e20c7c0c033d782e6e6752f11502a0e8b6b70277a985dd13dd83424d1e5cdb9eb96a01c0000000000000000000000000000000000e05a26686667f44de2bef53c36c82f1fdda13dd3f7f8fe1fb026273dc4dfad18241d732ccb757e2b46ed8317dc69fad00000000000000000000000000000000038b55685b02231905dd9a62a709c0f015cf5650b3fa469462b3e9d06e3af8092d998c8e08ee61db1fd5583b0809a38996c59b0bc6dbf66f42cfee34413cc4cbdae7a61e232757c75474818591764d6f0000000000000000000000000000000006649a8eabb25fb7793344a0b29325a88294343f6c69612ee9d9002154a49791f6cd7b37b2bec69fa8ce11722e9f8a03000000000000000000000000000000000e10f2f3de16fce9b9817085f0130e1839d9aae949170ec16834732a9b12f589a2b00f17d2fd3416ddd020b7421ca20500000000000000000000000000000000016b51112b3c7c42a8c2a0fa7f286ec05cd07b6cea5675bf1132de99cf42b450b3c2a8f02ec821529a14a2a0fac3a751000000000000000000000000000000000f471ec8b65bde22e003500d1d422dd0d163abb424dd261fac588333755cc5124acde328085d8df852c61e024155564781c180924f1d982bf4b6a2bb1cac590cdfe84198fdecd87364e163dd988f9b1c000000000000000000000000000000000ec162d22b6516c309efb6a4577c5631a5807bebddc5fd1be5446e4a64785d49eed80eba2e89cfefe484ecb8d50440a600000000000000000000000000000000070c252caf6c56018af6b281b829a4fb8dbab850ba0446d233dcd4d87bebac00e3e5070bd41898dd561526498b153199000000000000000000000000000000000a0d76d1205c1f520d82c85bac4473ea7cf5f68022d95b1f04d06062197973001234d86921e70a94e478eea85264f14a0000000000000000000000000000000014c6a07f0d568f2103ccf8f61278e916458820bcb61fd91479b0dee874fe36c063a34bcb14ee434b68681d297637b5bfe44748b9eb1f44b5fb143cc8deaad23047bc5ecb8059705e7905c37625d5e2d3000000000000000000000000000000000aabac129385d145243c3a1f357ccc963ff14867ad039827488128ac639dc62fba82ace66f889b47d8eac39802bc1af900000000000000000000000000000000062bbbe8c72cd6f8626484bac159b7e28c6c8c3261edc6a05a30c308cc9e56db17eb58f62ab755f04a5c87e58c04c7550000000000000000000000000000000011a4a439d18501142350229778f67bbe0c9b948229dcecf70a8b09d1df6c54801a111c603301da2377d4198d09dd51e70000000000000000000000000000000017de3d9bc6fc5f415d04ecec013a635fa200699c496f4d0bdb5cea7d446274dddd0a7f6b06058fde43fc4f1457361558ae04d7723b7c9cb0574ba744bfed8f8a347ab740bdab99136aa71a6d635d0d98000000000000000000000000000000000c86590a02fb5c9568af4e69611f09980cb5a7e040c94ecdbe64e40005783fd3305a5657a5c6bebca7d20ee123a872b4000000000000000000000000000000000bc873a9bc694171d2606f4efa409897e03198a61b1bb16ae90f0d12345d2650d93c46e0c22b717e2f0504b8983515990000000000000000000000000000000001df9160ac3bc54c0121a9c69e9065f4266202f755c961bcb8641d13720b82ebd73eb3804ba44769fb2d75144442f1c400000000000000000000000000000000045e9c8ed2fe1e5c9a2a5bda75dd60f6bb5dcd0a805f68c1f662a5960b025ff29c8e21857d2a61bcd65c747d2a2da8ef6a794685a342ff25dd706e4df725e3466889d8f08a27ed2f32523b117f01a84e000000000000000000000000000000000f94df8d267339bb4f51b21014ca6d685f7657d0f0bca189e53cf19e0e5e05bfad773c0553daafd80c86f302b1907ba5000000000000000000000000000000000d92905addc028a1dfdad50e909c77662e10e4689e7c8a4a0174a3e1c746b361665b65e17fce02b6c067a5b8d7a6a6f500000000000000000000000000000000183444f0665790c48bd3c07545115a11f82463a092774234e7b33aac1094761f213235895e5e61ac1b0a15603bffe2140000000000000000000000000000000003cc2cbbf181fb023a5f6088d8a9793b17984b3dddc8c3ef1a9f82f8f436002610df60b2d35be212da9945bc8108c0bced3f23c51953e46d400802dde46c374178ef379d5c1b04d25449891f0d5623e5", + "Expected": "0000000000000000000000000000000011f85691799cb76213068ef4f997af66c349bf707295b969d85fe637d4eabf54f3f29e739152aba5027c1b55317a27210000000000000000000000000000000019627f9570f07f44f326b5b3ee19bc477e92d813be2865e00da93135645e02e6fe5507ac4d50085b02149667794609fd0000000000000000000000000000000018fdc97bf0f88b2348b436d70ac4e28b5ee5ba21e21e94808b8b9e401c0c7d688974fe203ebda0b23abe38018876f4930000000000000000000000000000000019e28c9c936ea5a0b3b41871c3afaaabd53a93902e44a96dcb7651bce7e6143d81cb695fea8b94aa32c09ec030dd9ac4", + "Name": "matter_g2_multiexp_76", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000703481cf48efe78fe8dad34184edd1765a1d01846de74a45b43d4721bf1af116c229f969868b0e6e851f22bdfb0451300000000000000000000000000000000063d316d495b1e82380c5b73bd61ce7f2159e7714c50e374e8a91dd56731dbe03a3378bf8afeccaba5fda73b4c2dd166000000000000000000000000000000001012cb2f6578065c93aeb673f447ce95fb42927ef9d12e07968ec04b6a604d785944620043dee5de4de33d59e67d64f20000000000000000000000000000000018cc7cfc360801ecc420d77ee171fb3eac3be0cf26b3f36a6cfb7c6adae7bb74c18071daed8fc56b8fa639ea138267928c8e071da1ae8f615631759cf33fdb876ab289a6bcfa6fba2693a58f8601dfd10000000000000000000000000000000011e0dfc437a65c6fe37bb9e554b5138f68a3c52816807bdf7d98f13cfaf86b37e9669f4e0db1b7865d910a309f16cc200000000000000000000000000000000006f2323e01591a7db1d3c7fa1a2ce4540cbe0396cc55baa3a3e13650a6f6b926a7cde0eebb45d359edd52137152fe360000000000000000000000000000000000066bfec8df4ab5f5f5eb369b34e8e22fe32abfc00ac58b68f2d3841248fe5843d6d29ad012249fb9ee851e40b940dc2000000000000000000000000000000000f4ea977d9249bc05dafb682a863ed17f7fba0a06c4a13cdf5a836748664183272eed96bc4109bc5beff61c5469e221f8371fff9230243d2e6cb6bdc4cd97260a8cf0362d18b9ba8df512d2a6f5563dc000000000000000000000000000000000fa3e3e77112774fd6d6b560ff88cc92ef8d009675d0ed65705398ce727cfe786684da50bcdfaffae97d19bdaddd81c00000000000000000000000000000000019e98284b8b9f53faf3b73902cc322dd80fc330dcaff2a7fceb55db6a4b0f7f667297f5e4650c797ee337985dc6b54310000000000000000000000000000000004e30acf2ba66d842575c8679caec607fd090f0aa2350464f3b6eef22e2b9a1d9d5fabb0f3909f1c19f6b8f27c53b040000000000000000000000000000000000ad76b86e32f84ad74bac68909da0c271571606e071b13bd92e387a8a16a1c4002c5a5e94ecaa1e8d2d6e051e19a45c763016c9a9cfbf336ebda090d3f2a1a1b265787e1917f0148f82a9c0b66b21dc100000000000000000000000000000000019bd07479b234bba974ca2f39b317d5f4be33afef66c1d69e53c44cb5e44c679775ba141f82486424110d186561777f00000000000000000000000000000000130002de0d453abe9052a5f70a9d55de74939d1c8e6ad5871a669a867861b1359322eb98539f4a21597d806aeca62d18000000000000000000000000000000000b2f0c649fdb37216c10762f510c3bb4c789dbd29c4f9a8ff39f74ed1a96609c60473a50f5ce3f6535e4af0f2f0a150c000000000000000000000000000000000893b9af710787361a32fbd19c380161c9a214a1bcf3761563424b8546f6068ba650d9caff3e42be63ebf4b6afa2de516c9f679167d5fbb29250834c9f65d3025606e2af20aedec309718f95ba01e90c00000000000000000000000000000000019805c0de5e232632228e2772dc79712e3d863bd6fe56932b29ee99870d2ce5eaf90c73632d1dcddc093e9b6b5b0f1d000000000000000000000000000000000405d77f4b3c44f99a956ef375879e62df033aa408127e0fee013b74675a8c7d999c6abd30f459693086bfdb326d67af00000000000000000000000000000000110f2c231998aca3d76e40055a05feb37eba76cdd10106719f2300f57906424d7eb6d9f85115b78b7371ee60e26d02b5000000000000000000000000000000000593a4721a67caa7cbbe1566611a1d48532c68adcdbb67f362c9ec21e08aaddf6b5e09a9a96df9a89bc25f11665f3a36aaa3300f5a2fafab132f5f4662c1d288210e7502ca2472d060aeea6f2eab2d7100000000000000000000000000000000151758f1921743d116f1c4adfc09cb68b3ff911329e2f6d6bcd04beb9c109568c796f328e1f04381a995fe89aebbc49c000000000000000000000000000000001388c73b1db46bdbe70540c99db46b730e157a23afea97648d73f9d5f7e8b073ed665eed9e9e2500152c87715f1c4d4c000000000000000000000000000000000284ad228867ed14ade5a327ed951ca50c87f0a669e59b7a75d17feb54bc5d685245448a912590179db1e84f1eed1e5b0000000000000000000000000000000017d3da7c167733dd88f1c39315e47cc80c3310cc431989d4cc50ddb22e9fa481c5dc02d94dbf806c4c8da16ba5b24905f6608f7c036c8fdc335601ac55e869215eb4e626f52bae813d45b827df2afd490000000000000000000000000000000016064871cb68f748939a839800afbb018fd5836914a2b76c51818e764628a76817c7ea329e6b2f9de653c8162a2a2e0c00000000000000000000000000000000082fa03cda4c617a780caaecd7c859c5251b56b61f70fb3ea8c05b4c11c030adb8a96d715c1325ef3dce9b20e8065b6700000000000000000000000000000000174a245baedb7e1bf1368212620b850151be41ebb00c977d85da499223c207ab6f1a1d94a51aa9e90d07764ec3615b3a000000000000000000000000000000000df5b81cf4b008480775ff3d7644f546a60382e92a98b03deaa4a20f831e69e14a893ffa731c4ae9ee237d747149a9080cd68c59b1371c7063dee5732182961be90b95247511a5b564d7eee8d2c7c64700000000000000000000000000000000019d36b8dae5e1083e687743f7494b7f9dd0923024df81e2f83c78743e227ffce588a16630201b9909daa6c9207b5f430000000000000000000000000000000015659059cfee7850e1cf0e49abeef2fe5837cd128742e62de20dc734f1bba343aee1c9f1a59d920a0519995561891fdc00000000000000000000000000000000102b7221257c40d9adabd0db3ec9f6348487187ea1110773fcb2ac5ce210dfed167a4d15e605e9d9e666fd092147a1c7000000000000000000000000000000001402ff9770d27d2d82efa6abe4a181e3c1d944e97a06f670d9e46b24f9900fb4a838b32e17482f25be9b6f3240870c02ea52329555d9b79eb1fd6d186df80b25245ba9225553f402cfa6037592f0b10f0000000000000000000000000000000001745ea52686f87a39fa42ddb5b0f69368db3757394fa7a1a93eb20c398c26415c8a7edeec7334df5b15345d6174126b0000000000000000000000000000000012b580e6fd228f087c7584cd95826e56d1c074cf16c35286c45d2067a362529d241c1e24fd22cc9727d423551de1a1f700000000000000000000000000000000104b46c42a706c61610f8c0434894c7cb9ef878cd0234f8aec0825cbb8297bed3de349e7f6037dd19a159103ca7753390000000000000000000000000000000010b781b3cbe6f415af15e37be7c60dc6703e6e79618cb3d8d9a5ea3b17c00822aef1eddacad66a646c009dac887bb070caf39f2a517d432d1653c37fd9a6c4a8a811107dae428f4b2af3b12e4b6acea30000000000000000000000000000000004b172c360fca555e65860c7a294960f506b562e012ddebad5803bc3f4b93159c16cedb73f339def9cd1beaa0912c93c000000000000000000000000000000000242e37775a042ccf59e99da667c67fc49e80e54a1b438a74fe306d668059ab4dc7d9e457adb45e1f91b3e6bef0a130f00000000000000000000000000000000186eb83ce3abe66b8760dcc0d375eb783d175b0b2f36cc08793d8a86cf76b7618b826f50c6b02ed586394abe4efec2f1000000000000000000000000000000000bf780324df1cc5de325a796f1fde367eb52dac76c0632915dfcaf01f5acd6ae890dbfc2e505bafeba7fed8fd63018c2ff0bad6dae80d5f47dd8c208fef0f3046cf1040112d18c596eeb934762977cdc000000000000000000000000000000001231b52c8a081add6e5c250caeb9467335933c2ed66826e4ab44561eda9259acf926f22ad0df8e8756aa51279d12bc9600000000000000000000000000000000051c46bb04d3e035d324de681c772e4561cecc6a5bc4ef0a0cea56618e09b3f39f5085e208229e50164bcdcd4abdefd2000000000000000000000000000000000ad7ee610398935a02c3a7139185409d7fd4681ebb74a239e15d1c092ea913016d3f585d8224cb1d109ac111660a94aa000000000000000000000000000000000903bb16efb052b99e9c46f3478b4acf800a173b35b0079d7728fc25c9415c8b05ad520f31e6a3c867245f64355cbc080d0c40e5d422685c5c83716380eed82392ae1dc6074a7edb5759fa34a61db2d0000000000000000000000000000000001788efb21597aaac29b7bcb9ad6cecb89267c757cfcd8893c32fb13c0f3e1af7fcccb9573dcffe8d9220292b7861cac90000000000000000000000000000000015f85d3686148ad62d7fecb71920981117cb8759ab249d0ceb45f9e4687914536a1eb16ccd0e185d1352a8d2b4a8ee7a0000000000000000000000000000000015d8ed94c0415ee0f7c9854841bac5821253bb2ed4d86a61f494cbfbd61614983e4279fb17802ca68aba4a0302ec1d8a000000000000000000000000000000000f950a4c8aa18f4605e1252c367dba1e170ad00376a8560c2fccfa7d5487b0d1d5885cec16a0a17d81b5a584d473853f7e93a16a443d5f981a02f0b6866536dadd276abc0998bedd76b168ebc8e31b82000000000000000000000000000000000da25ed9154121205ab6843f603a38a6892887d2725f16ff87a5218586c6139188f46da5a42b5e05982468e8115713ce0000000000000000000000000000000013c13ffbed4a60bcb8659013b022012ef3a4400f506d65aff7ffb1bd5a9a5e030a298e417cc1ec8ee7ebc06455dbe61b00000000000000000000000000000000132d83bd141c434326d4772de7f8772c30a6456de7adee7de66a04bece4c0d20bae5526c8eca5af5ef2eebd72c90d54d00000000000000000000000000000000131355c5e359081dc86e0b15c8aedb4f2016b41e8428051f5132258eaf4392fdb63a91452dc56aca20b7ad3263ebc8c92a1d13a64c03585715908744481c79f340b5bdcdd88d685ab8b91722ee7ab7190000000000000000000000000000000012dbe1327162e4176b4988cec23df0c1b0075d0dc51ea8afbbf98f00891511d9023cf7538c5705d59b6d6ddcc90b101d00000000000000000000000000000000036c12c7f7627b6d6fcba9a303248c38d784a3d1d0ff02e550565efbab68c5116e9a88faaaf09bc72bcc3358e9dad0ee000000000000000000000000000000001578ffb68cf12dc9a5ae6fb5d822324cec9e3f576ce08d45e24fec9203d36a6461c5b8ea6ac50233e8893b07ea6e71e00000000000000000000000000000000015cdb43c82b20b8ab270b942b9e625ada9283962a7ce95eae156aa4355e1123ff87ddb1cc85b2a94bf36102ccbec33fb2bc6979fa2e386abec058683c6d74de31af3cac21283cd5e4244d7edd94da9600000000000000000000000000000000017041e16975850e6445c7b4896955eb5eab383ad3c3031aef04e8fdfb65a6d52c9e647330bfbb0f0eab630c9f9ef7a12000000000000000000000000000000000b62757ccfb913ac4264692053f766e142697f598a3fe26e998119b63a3abc7fee03db32a8af36aa21181fe9ea89d12c0000000000000000000000000000000006bbb842a889d7ff3c1eb5e0b16e3a921a11d28a251c488a8a17a29edd93672fd15974a7e972a34c47283c583cf2d29b000000000000000000000000000000000e94e685fb1751f8720b8af79aec7b245ae8daa195f11f485f2c0c5dd68cf39eef848a402ce2342a6b3398cc7879c6010f1937936cc3766184e47f39acfe5af4497e8edf77ab34083135a9ced61d25ed00000000000000000000000000000000100d3fee47ae6c8c7981c8cc615870924fbcb34c2ed817d6862e2e6d0b4612222a4c8332c7d51b58ec59df6832139e1d0000000000000000000000000000000017270fa71c34ec84043ef64c5dfd61614b5b3bd99204f9f70994d71498219818a5f16843c67c668b06aa5ad3a6ba8a0a00000000000000000000000000000000057948c0ebd14664bf33fb282e200fa0e641764a353e8347586465dab0c79ca2caffbdc2c6d60b2d7c8cb6b088bd16fc0000000000000000000000000000000012747eb070f2de18f517648395109bc08b4af3f04d98e23eb6b516199b4eefc5df7d57baec736987139c7b03b573941f639a8b60a1849c71688a11e612b315439161717f525b5deabbce75808470166e", + "Expected": "00000000000000000000000000000000128c6c0283ea35c10330502d6aa849a909df6b8dd927a24f08072135b8e21e40c495c42e742160363772569189d73ef40000000000000000000000000000000016d78dba1e0feeab46f8cd38681a9c2f6490ecc3a6e79b31caead256611d133090a4eaed9691a87b66dd1c2ee50d5f470000000000000000000000000000000016de93e176c950975abcbc692384996315a98065db6d6a6214472e5a338e291b36abbcdea1b8be6162fe578acd669abf000000000000000000000000000000000d7155e239e9b15ab64a538b0a0bd53936df4ebdc3ec9b0b1d494e4df780bd014425759e9743c9b262cf48cda01e945a", + "Name": "matter_g2_multiexp_77", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a653e0c24eee1cdf8e3652809de0cd159f2c541981a4f43936e7d41c0f97ffe2f1e1e0d1032f0970023f1d27241a16a0000000000000000000000000000000012d1d8d2f96db0e5f97be096c961e3b90ef3d88492fb756894979d2e8104791a5b9a43888043ce9e543691f15d2fdb650000000000000000000000000000000006ffb94dc3c2d07830498260ebe4641b2cb64df61cebfffaf2d4ab5b6ba92cd75de209e8d7915ee744c4db5352ff239d0000000000000000000000000000000011f25722cf9db77ef8adb9caa250175e12412e6350b494395a86c31e1f5dee6c89cc6603f1dfd08a70344cdc44aa0c2df3efcda934ec9d2ab05f25d618e5a483e830d0452a88e980589fcd7cfc39e5d80000000000000000000000000000000006177a74e3551770e7d906222590108bae7b97a5dd3bdd2344fc12e7005f2c1a188ab9dffe68f5ffb0cc36294106f15800000000000000000000000000000000041b140c46868767119a6ebb58562570732198854c92bcc070f2a8d9be91282a70c5ab99e75cc9e5064ed628aa5c59de000000000000000000000000000000000f318ee33fccf455e46add44922bb6e99afd4354bbc79d7550f8d12d3de4f75e5ddf4e62624b116f91aaa80a148adaf9000000000000000000000000000000000fe012bf88e152eb62c0c906dccba469abe591687573a59d3debe747b7d895e4b0755f16e67fa9193a2fd338c04d243a4507a696cc57c0bc49fb4d1686752c71c9c816d7d09bd66910b23810d475aa02000000000000000000000000000000000b26c6e0106d4efbacf2dd0d15df17209b1306f388f493c096429c031bc4a6a535b64cb02b400433f948fd6004df2fa200000000000000000000000000000000061853cf1a32fdf4c370cd413754ea584d3722a08d58575075a7371e57a7bdef95386ed72f91c4893377f6b551dd6b1d000000000000000000000000000000000ebf17e60718c8563a1029ba035dbbba75e7191b4339d5d33f64bb35f34866081f26f4815e01b02e8330e7b7e9c428cd0000000000000000000000000000000008ce40f92efb5c5be48c814018fbbe45f1be45f5b607a6600cecd50d8f791de7d91939ab61204c2a1337c3f21b2c9d26518c1259f23de4cecd5e3a40abef5662b497ebaf16240f40ecd651d2ba50af0700000000000000000000000000000000123ef52cc44f36326b33234ab3348893bc722bac3674e43385b201f372fe4ea3569d69d4d561e26f8ea903e017d7376a0000000000000000000000000000000005b1707ef61ff9acb9e8b4dd6922daaaa2d8a7558cb55b1b9b96eb6d57c23f50a7955763c9b5ef04f52b09be8d55f4b50000000000000000000000000000000015b6e35d14da61e7a7fcbcb0dddaf0071d8d2d89f7179f44851947a2b9b0535d6fa86b5cae9713a73bbed909a4c6deaa0000000000000000000000000000000013463e135b1fd460cf042dcd0226e229d60cc2beccd8a1832df241e65a644159722a14297c0033eb499e5890f0caff1e5561616c195ccc1345421d8a6efec48f0a4dc8e89ee89599839efaf95c386551000000000000000000000000000000000fbdf4a533d355e232723fbc97352fc5d7d3d199934883a61a9ea116830bdf9e40d423256225d9a3458134332ef6e817000000000000000000000000000000001195f0ad227941c5e383c48f546be34762d158e6cee585650b6ee987f7b98e802f678abac6646832b30b6e12e90948cb000000000000000000000000000000001820d5fbb5a62140c6e8cd105a70fc2f1ed84e254c839deadae5eadbb75e1c33a07ad12ee92900f55478e91958a3147a0000000000000000000000000000000013849bdcae33fad27f16e91c6d46b9678a00491e3d70a8db905db4b1d2c6f02a29392b5b77c1472052d6f4d49f14a16737c77734125181c72454bb2d37c3725cf1f9b6d6f42b721bca469fec154b3e2600000000000000000000000000000000188fe1e394b567d71099fa13b5c8a5891636d83b6b8a08f410b080658a0663deaae4dca1afe8b9023b5e8e573c752c92000000000000000000000000000000000f66c65dab8e1b2912fd5285a4c87821888532f5107075cdfedacc4d7f75c6a74b4828d0b4c3a2c0ed94576654a7047d0000000000000000000000000000000016af44a6df79c8c9b6f1d8aeca24e024c454d7b94c9ed386858dd35c4158cddcad1207f9fc3ac9e3b748c2314f875dac000000000000000000000000000000000315e5e4f78e9fcb93aac78025e95b8bf82ce4c840cf565e0a868b0aac22950d62f7becbf8039a16ca3ea66a7498327d981483aa66e04351f4340fd2b461165b9a9983e91c148da78d3c8e0c69e77de4000000000000000000000000000000000f9a61dd1b3034b8cd7408b0a44c8d02f4fe0e87778d5d34f5e884ccc9e2d51eca6b6060b46b66843e8247b3c794e19d0000000000000000000000000000000005c47fa7799a0fffcafbbe4694dfe8d0f47b60f712d6319e9a56ac459a636460e700e2af80f9c688208978aec7c413af000000000000000000000000000000000ab1c55fe2207865ecf12e372a341c776d24c08dba10702fce1cd2c01eda314852d81d0ccf1c3423c2a12e8960677f060000000000000000000000000000000014f8a1964aa3240d788ea40bb51abc50fae2736a34120ca9585fb2d5bba4e5cfa201c83be1e00ecd1c46fcb2ebb4eb809913da6f756005ca8ab900ab686484483af07df768209a16d807f8b88b9334d30000000000000000000000000000000006441fcaf5e68b10e7e511a95e56b9613453ec6468bb126c5eb12f204c9681c69b5c296320f92a6fbb0b848f8ab5fcd1000000000000000000000000000000000141de16aeca0a2f991e9fca4b6ce8fbab3d66ee3ee4dffb0124384a7d4ba51864a53e005fd34516c92ecab33165944a0000000000000000000000000000000008543656b5495bdb726109cd98fa18e405648fa88cbe2e5fea5380b7d0ecb207f0343dc7888b9945e55156977336226b000000000000000000000000000000000b53d4e392f304225b1ef363a3528daca1d3a6ad64ee99d58491863ea432a29cde5edd4f390de45a567cf32112ca5929188fb33fb359f21bc5bdfc85d39676c2ca0a1e619bf8a8e8de62da8818bd6cfe0000000000000000000000000000000002e0c55a43078df575efb2c99b27c5632dd1c08bf28b6c0558081a78de58e4258d1b57d94ec6fa157add04aee06e7b6e0000000000000000000000000000000006d3f4f0791431a56fb386f4bb8e6744cd19b10bd0f2e65e927371ab488d3735e3b83400ddb25ef9d740a8620821b0ab0000000000000000000000000000000011e9cdfec8a8f8eba0de6809485911711149ca0ebd0cecc033e2e5ddfc195fa7de671a686edd2f56e5f7da7328dfbec000000000000000000000000000000000171f188afd5d9568cc5648aefb65cd715c0293344b9aceac1031f10b4a1e4b9fa2ab11114bd58f28aaa58c10ee0eeac65525ab4c4468a2ec0beecdb7fb072f28260ebb3d9da1a4c274b2c11a087e814a000000000000000000000000000000001651d9bddf61e5e54f86609c2479513ae84b000ad7defd840d9619a8361922dde81c999d0e95d8a3044c46fe0360c2030000000000000000000000000000000014a68c248808e826a3bb50f3c1c1438483cbb9da8dd67a0c9633a47f733e6aa7deb4a13aaebcd50de6e8e8f00000424a0000000000000000000000000000000010c8a94b9e0ec9965f6c8bd0c4279102ab682a14fc3c22e9640d68f240ccecfead9a2c6e69f7c8ed369cce7e2da50d5000000000000000000000000000000000181493e8137fcfae203e1b45189fb828dc9eb56887c89aaf9aad0380fffada423f0ab48ed068ba4e67a2b01a16abbfe55ab5a55a5cfc49cf6c36b5718e108f8d006bf7fa1ec3dc7a7f9c02a2d1e3fc57000000000000000000000000000000000e3e33fa4d85a35e8707419ca6d4fb6a61ee6b07ce152adfbaf6b5f1d7ccc253b59f91e4545848b3570bfaa804ad9767000000000000000000000000000000000c923a4de074dce3ccc94698bf6445af5847c0e6f22f225c589f744ec83ed0810913af2a6d04bd55200ffc738b31b01200000000000000000000000000000000186961ed1c6039476eb6f13bf1b5f6627b3b017ece57a4a5f33db8ef12347fd507398a421932d3d2a1d009f65d06e42c0000000000000000000000000000000011e10ae0139f95a2f1144810894fb98f6e5e86ce67877b949a2a7134c446dfe53c23dfbfd12919b24975f26eafa249216ce7aa7dcd01c1b7059ad3cc0ebf5d19ceaae633160a968c33aac5dc6adb942800000000000000000000000000000000029265ecf3c81aab289c98d9cdb917749ceef56e2e4d59de2d6c83907f394ddd1cce9d093a20206c2c1c215493c41c49000000000000000000000000000000000986ad139381e4dbabd6beba179600e1c782f436f84a7bd58cdd96a22269f1d937f88f25059214fe2a781ac519aa621d0000000000000000000000000000000019e296d5b17f78b3ffbdaa2ef5228fa9dd65abdf6b2c5b0f99a708c4721797b3b156b8df98a5a879f17f095548555da7000000000000000000000000000000000349677d4719445d5525cd65e2338463d232eb75721ca51c48fe52d0fbd299ddbd6cbc12546f056bf212d5700c3c4100854bce63dcdc0cf408b43690abbbbdacda5f3ebd9d9e462f89f9f50a9f7bd44b0000000000000000000000000000000016f5d5eb3fc3ff178843a7d21d3dd628bda120321ae44206d88f07ac001651428e0da95d3f0676e1bbb969a300406ce000000000000000000000000000000000029121c539ef1d7b9888497a362fda2f8402adf10a1bee11b53cf3dfcc6f99d5026bc386f86a2eecd0c276494878104f000000000000000000000000000000001320a402922f2a0bb287464854be6782046dd9dae4c0cd94efcb8ad8e0f37b7889bc97a3c8b4d3b3670a6924c8ee23ec00000000000000000000000000000000101fa8bb2c90b755bfba9cd7a98790b7bea2ede4c806fbd9f2006d10cf87c44172d4ba46ea40fb75afbbaa2abc3b6e9d7603824b834a83c1c408243b51cd2c2d31e2ee763d69e2ad6d369bb6aa2396fd0000000000000000000000000000000003285cb099b04b6acd333c7ac76c839b6c09388792d5fa1f2af0821e49dfbf40a06803c4cca92512bb76d073129a48a00000000000000000000000000000000005b2fdbb25381b3b67814bf6cc0a4cc17271416d16ee369b723b1711d968c355b755183f0bce519709723250515ba32a0000000000000000000000000000000002c7062ba4f642b95e028a364b0698b801f48af3c336fa09d13d83ec6cff10d210b55b23cad1d999889c83df7d1ab7e10000000000000000000000000000000012cdfdc10bf46097083294259754453e084010f7ee928cf540d44c80aa4f601247223a318700bc24114e7603922d15ae923c86e91c48582f19409b962be361da5936db02b6862eefc288f9a32d5f54760000000000000000000000000000000000669d760352e34a407aef8e141fcaa9468257b12ec08ec218f49f0769f3acd5068c6dc9d251a1b2af02a2d091f8ad0000000000000000000000000000000000064a7b4026ee3115cb730e56c4b9bf3e1527dd0f0ac6015f43d30a2f3d8d8c2659cf50247e70ca3c93d7e0a404d9faaa000000000000000000000000000000000979ca2e81663ed61486c1f841c19d83549388d798da72feda82283406d4964bc9991f876a6032382c35b605441ee7da0000000000000000000000000000000008d92cf77b44c516c243f3e6a8a8d3f9d3d7405820ab972338f700de1dd9a66d33b4a70540a30f630aa81fe1cb5bf057e1b3071b561a80aaaadb5cc24b348a2b6012340d3aebcca7e2f56983a8a13bf900000000000000000000000000000000198831a40fec54a210a63f5e00b132bb1eca6408335b85a75e28be6a111beea3b99d9f2fe5091ab0eba0f082c201c14d000000000000000000000000000000000fe457f8d215f390000efbb7fe7193ba02a2ef78e9bff6539995f01604fdca9fa3c010276afb90215890f5a5df3ae21500000000000000000000000000000000076771823180422495d89c301443a9d1fa141716e5e27205b8cb6b461a3ded7e6f196c3976cd6ad56b2e6ebb6b3a70860000000000000000000000000000000007f666efc677f6f767828e1291bde0ba0ca445ddb2d69d5d2fa090ca49e697ce4e00f55d2b706454be6d68f012d76efbb6863b755d3dee61328a60f585531c436663bbeab9afaffac49b6f0b57614eaa", + "Expected": "000000000000000000000000000000000e1268a5e2f654c4038647a910e6cb4bab1d6ca3562ad4a9ac18444c8b8a3fdfbd35acf37f9203041fd587a5175ce86d0000000000000000000000000000000005e701a8ddd15ecb0231b7625f7868c81467c140b2617e60440a9b348a192e5248b1b3c087545cfb6d173fafe48d32f600000000000000000000000000000000071327f52b1325bb664d32c513fb12afb96dd8da23dd91bc4c3e8ae5f97d6bf673a5d03bb8bdeb6da3144dedac200dbd000000000000000000000000000000001852b86d3ef45aaeb691f454a345ed61104cecf0f444e4d841f2bc0402ea1291ef056eddb3fc3929ef4623f31016c3b5", + "Name": "matter_g2_multiexp_78", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fcd3f253d018ef09a7c6e8f36662ab4190867a197e0c42a0b425dfb5fe61d57596ada28dde0b093676ce15d03406d20000000000000000000000000000000000df00598337060d603607f3b8dd16f277ce1882a2e9ced48e1944662323efc29b33c807653f31583a5d2198426019ba70000000000000000000000000000000009876c81a76986435d34c6d44d51cf1016c19ceed2432ef1e68decd64da2e31e42372c1a41a514b0eac0ac103ab6f43800000000000000000000000000000000121cf298ff8f610c64ca4a887c52cbe940333506ef2afecffe266b5b585ff737395e2c64adc23b5bd232250e67c7a62613ca0cfc742607bee58988df361d7cd5d809ba4fddb209c898cd555369fff566000000000000000000000000000000001885d5cdc3e0e0c8cffa7519e6914e5d85962d07633970c4174ae4587853f13970a1f5d7ccba97458b9b5046847ad29800000000000000000000000000000000105b7c0ba96d5ce32d7447351ded3e3f491a0e741e921447b91f22a23b64c2d749055a0593e5b47f0ff7815e1a4c9943000000000000000000000000000000000cb88fc10c94642ae7e1d7275bbfd51a2d40e9b29f3d51a1ceda577beeb131eae4b17418f9f358d47b4b9c9ca4960a3b00000000000000000000000000000000131a3e080b1d4e936d97d255b07b09a6210b5fe6900da87b5cc595a72de2b6ddb01809e2dc63ad460a2926dd8d3b3b2ebcca8ab454fbc576a2b910f140b23c23b14301c19e1f47989d78eeecf279862a00000000000000000000000000000000066b31c0bc4b3b9fe420dc095d551903a2859556d86e210c96480f1d31d449d85ea292e2432babdb71c151c7b215cd6b0000000000000000000000000000000019d79a60793957745077f9233aee7a4f096515eefa7c49473f09bbc73fa0ee13a2a30a08bd7f3bc1d5c412d671fc37ff00000000000000000000000000000000006882160e4fa8ae2c2d48ae389d8f023e2775adb7a815edeba13728b8f6b343c45788c8e9116445e9989e01eb43e1500000000000000000000000000000000000ce53ab2d81ebaf4a85b3e12a6175ad7fb6cfbae207a69a0fe2195ab916fcb582b097f09d9fc565b837925f68855c4b59f82ceeb6160d3256228d7a41fb3caa6f305b23142ab979e728356a13309e27000000000000000000000000000000000a30d335c035afe459dc262fb1bd24dc0bafbc08fae0bed47e4e204280eb96595fada9c4332df1218748921bfb1274c7000000000000000000000000000000000e37eb189560211d6fe56faa3b6e710878a21907fdc1a9f8becabca290c24b8831e28ebb48d06bd822300fd09b4d103100000000000000000000000000000000104842b88b9df6a7b8243494eb11eb62c89d1ccbde9f55fe221c2366d6bc9149178f177628c6fe7c7661318640295e570000000000000000000000000000000011df8599d72b85ade11261076e02c036be5dfa3b6fab4ff72ed7413a879c0a0742be6c36a32d0829a4e3171b0341c6a3995f7d2038ad02deddca34399e5b5653fa471d998c52bd52241840cdb9202b2c0000000000000000000000000000000019f6634435be45b099cc739fe5c2dfa01f61fd2d466d5ea464053e2d5acf2e0e9448b1bb7770b5ad426f8a872c5764400000000000000000000000000000000002bbd52efecb10b3bb6f8bd04a5751042d8598cc34e2837184cea2b5953ec125dee871d1f2f57ebc84849e3a7ee5abe2000000000000000000000000000000001962b716342df9c13c21d89ab5b8c4c0ca191440fa709627e0f240a7ba518f4c95adfc5973b6ed0af591bb54bd00937f00000000000000000000000000000000089eec676276c52bfbb2593ef0362c12a5f3c1a0566d5aa862f5f5ba1580f4dadb36c15fdcf0c3910ee14487ff146c8997b67e68bfe2d7fc256e6aa610dd91dc1b02c64186d24702ad8fa9f715b582a5000000000000000000000000000000001556d081a489eba4fbb0c20e22b8cab432a9f6ff459ab9b0e7ceacbbd46c8e24a2ee70151b019a1b4bfe47d934afede30000000000000000000000000000000008fdd7391113e8d9865ef48b60acf921b17c50744e6ad62fa24abaae54836b3d59a7441371bdfdcdb251d252a43aed7b000000000000000000000000000000000cc66cdb1fe32beb91b05922f3920060e7a95467381d62f2f036e6268af4128c9516780ea53e873993744ce932b901f100000000000000000000000000000000151f94dec958859ecaeb810c4b1cc7a707d0e1671cd4a1e3c811910bc8b95c6c944167dd280c7fed22f92ce7650beef998115b9f84e3ed6947bd6f0e3c65361cf360a65bc059515da852a72ec5cd178100000000000000000000000000000000004f88568c7ede48d7476175f1d2e7ded4312c24934f0d47794705621f8aa8a5072b86cc41e187f4aeeb49bff17a4c9d000000000000000000000000000000000ca6c579e86a68b4041150fbbc36da744d359028993681c34e66c537eb8a0a0d55aeb9b8da7fecb844104dabeb507805000000000000000000000000000000000fec63c57d3d3ca98cd1735b2f59217e163ca53b07b4fabc4415b98377d87e75f0fcc9b51c99a57ff61ca8d0016a206d000000000000000000000000000000000940e9f93f3ccbe74c7be93236a2c440b213a014ed51cb57fa053495c3d6f6c8edc08ba8e10be26e5faa898162d67fe327370e1037b709015e0bf178a41ac55774a813368e11ef7a764eb48abe75dbf500000000000000000000000000000000055e4dd9da22201b5eb64e3b9eff2eab614c48450424491a85c18e05f50659b88e862490edd11ff980b06696b60c35b00000000000000000000000000000000018fab38f58d3d541666bc29b9e94cb3940f1794b2aa851d079b9aaa1cf742b07cd6dc7c985c7e4d7d3fe683bb15d618e000000000000000000000000000000000534de5e1c1181e951b437fd17993e995fd4aa2f6b28fc3612cd4db615de742e12d66c03b9ced538c1c7cde27752c190000000000000000000000000000000000aa8580f1da71f2ae9ec26f3b6466813a40ba5bd3f89ed0d42695d420032540194617fcc2f13e36219fc0cc3886a69c36bf5fb297948e0ddc60ba26e49ef2892ca008e64a22ff2bb21ff70c56112f710000000000000000000000000000000001804ed7677fa3842bdc3eba708bf4fb7f7d4eaf2f1a46193c861595f64196398622df4358b9526f33663138b24fef1310000000000000000000000000000000011fdd7e1d0c5adfbbbaa69ce63c7c54525091289e4dfdfb3de772a8d5a958581cc23933deadcb8856540e2d0dc564dbc0000000000000000000000000000000013fcf17235506fb194e3adaab881c7aba4b87e5aef739e0547b858410e3cdbff0dab1980b1b30a7d03d617179ae545c900000000000000000000000000000000004eed0ca479cc458231ff969ebdd4e33732953e9f5610d78d4753b99c5f8cf73c742387b8e71b9be074fcc67acd71cf6b488b6b63cb8bf34efeedd9f95dff4d3d8c067c0d807bd1e20bd267748275d0000000000000000000000000000000001082b7796d35e387df689bcdda6e0316d343dc907822d1a873adea050374962b164ed27cea0e1b834997f8274e4c5438000000000000000000000000000000000b1905979a90c7a61f4ee2cf3a9f4d6ed4c724c9e216981b8ec34fb9b528018d237771ad620020efc2c3cb104df667cd000000000000000000000000000000000752663e72390108288ef4de3c3ea409c74e7051505b12083c41a2e8937eaadbd8cd61f96f7991722226fdd02dd8d252000000000000000000000000000000000f8e4eb7a3c78b8040a115c42b5d2fc69405f8334e948b8553f444dfef29bf3920892da431cd8394cf61f24e356e95694f661845e91de1c09f581c7612a25bfa0889f77c2add31b493b37d20bcce11070000000000000000000000000000000010884516bb9916084709351ed8768c6105fa451e08d5acb233511254ddbf4e72baf9c43b56b4d7dd129a38f5b34ee5f0000000000000000000000000000000000228fc5fffef746419cc69abb17cdc63ded44892b8c5d02f0c72bc8506a61d15a74ec4ea0e1d78f555ddec07f418539500000000000000000000000000000000048a4192c204b7441e871076d91d4f610c347c2d71cf495ffcb2e2ab808a8c1a549eae96e657d756d9a3b94db2892a2f0000000000000000000000000000000017a94d2472df89104ed96e24d166f922bb852b5ad80f80188fce65b08d39cc3ecf94991c6bec5dc12f9337e7c087db2f8b3bf8d5e529912b1b6e445f592a6d151c6f5d01d3b021a31a2669df4ce02aa3000000000000000000000000000000000f6293fb0e19ec85f43a1a02df9f59ad4fb0e49b16a216ce097b8ec59e781fdf176360d8492e8b77674ae2c0ddb1da70000000000000000000000000000000000e354d09aad68fce6cde40c787ba1e4488999d5b9f3fec25c9994b56bcccaaa746c958bd16ba271485f461b0d4e983200000000000000000000000000000000014fca0851b0bfdf2c69fb346f23b46135d2b7914bb49e297a0c1304d8c2851ff6bd0a0bb364938dd44680fe86cfe12e300000000000000000000000000000000164e23a53103dfa332e5ae09c7c898b95773c20f019d8b794a6b49594040e2e090db6a8047c943885dca95188e89a63b30e1c8f222019b877e66df0b6201b5bfc5b6c10aae340c55e74410a536ffb9b200000000000000000000000000000000146d37241ce4f71017e4423dd0bf907a12c1364ae9fc6dfe535c25e5e99e03ce157cbba2675829b396a69f92668107280000000000000000000000000000000000d5a992f5357615f436d95fa516212812f6811dd1f1921ba4129e84e3d487b6c97520995d8a65f6771dbba9d150c7ab0000000000000000000000000000000007b01f86574a9cb7eb3b9a19b6040055a5c11b13e7071078d16b9ad71f714ed28ad25db9511964b156ee34db22385cdf00000000000000000000000000000000154c29c6e2b21a75b14159b183e625c98a04be1850b22d314225e94b313619f641ead73130c1d6feb85abd8c9e172f6323a258d66f2296fa1c71065cf23c994eb8c6c35d35120d16790fec791ad215fe00000000000000000000000000000000075be2703b8416fa07a7cb6ae8841dcab1e36b0ea24231dba617a2fed3bebf8d952d31f68c149dd17eed136fe37b01880000000000000000000000000000000001156563f1401b731cc23c4be59e69b0e6a0827df4889cd9ef9e11310f679c1603a0d9c9679c29b8dab75ae51f49bfe3000000000000000000000000000000000663faacfaa92fbc095a5dd6b1f2dd141e248f84eff1716ee71bdffd4d28ef1f4c88828e3457e8ebf0daba1416d2d6070000000000000000000000000000000018f2871f5897aad9ff6ac45a9c0e78be8f312f07af5f1dab2bc4705558070abf367f1782af896288a7754da82bf1a5141ef4055b85f37b548dac2b64608d99ca293548bebe1e24355393520c34eda60a0000000000000000000000000000000001618a284286899f501f46c4761c93b68bc8ab3157144e4013e242e1678cba20a2d978ab53b4b43145dd6062748df541000000000000000000000000000000000c25da737368775e41ddcd9c64cf99a824afacb1d404f1ef46ec7fe4ffd89673648c5207551914e6e0d12c57e7d7682c00000000000000000000000000000000097ff49c4872e2da1f6c24fd6dd4667f0bef4eb30fc197d13e8b66adc425e39841dea011d79e4d775106a19ea1978f4c00000000000000000000000000000000147426b7d9b0bdc2be051d8f6cc4249014e1bbc2369bc32eca94684483f50ced2c07be6a320effddcc1ed5cae455fc92212529248c51c95b5b26961f27e6d44ef1c2b9233bb2ed32c3eee79ca6c6eb750000000000000000000000000000000000cf68f7ab056c4689af95b361ee3e3b1c1c48f18b5aa655cce1a2be217010814b3f07dedf6f9a7b835cb13e2afd7136000000000000000000000000000000000dd6d0fb94048dab34410dba4e682f020ed54a655099fbb6f6e94a31511960f0447d7e94143eea88195291b225d11246000000000000000000000000000000001864c6ad3f2f794239a179647d68734e23b3520b79952bda20acf2f5afe1b76bc18e35b852d35a5cf3b02a3ce86f640700000000000000000000000000000000015ea24562d7bc59d813b77b2a4943f9e98842b5a41c0c7026077a02ddfd3d5fecf352d4399f507fb12ada4ac495ddece9888dd839d9b8c236394c44d358f452a4588ae65d24ffe2bd345fc745de9d37", + "Expected": "00000000000000000000000000000000080f0e50f90e001a442965ba7900997fcc89246742590b99add6d90428d3b61516664654bc8fb423f701e85a342a668100000000000000000000000000000000003fa9e84ddd754047649b7cfcf5bd78852abb298b3bbe6575c4c7dbc2e7595499a9f42f379a2463aa74f29e5c73a9040000000000000000000000000000000009e72d3c418726f6400b8cd8b9b649005f3b25ade40cd6f77a0c3cbdbef461e917d4453c9e07ded45301d21df4ec44db0000000000000000000000000000000015a06cac223217602ccfba4f4586cb184994bf08b324bf977dbb3884c394aed0622da7dcf5712970554d73b18e2733c5", + "Name": "matter_g2_multiexp_79", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007340f432a5cd5aff1a1d98c6ea1c94be24de2d15a4e112925586c30979e23a5db93643308d3299e370b1f26bdd09eac00000000000000000000000000000000155027caae88381a60af71b2fa770e58efccfbb7642f5ef6b1591bf77e415eb117ab564aff8d9ebcd576f813b793ad2c000000000000000000000000000000000f604238d1b28f010ce8e45f2fe61d3ea20b902a4debbabcd54ce0ecd44a9540fe2bfe847178656fef0a5fd7e6d012b3000000000000000000000000000000000d7f503ede395dfa5682aadedc98bfe28d3fbfb52f42ecabc9eebc0e0a6616d3671604709f28255f50b62bee641d2711f812322dc2a7d5faa9e4877638faf8492d84e0f4c4c65ca3aadcb7eafed2106400000000000000000000000000000000176e1f9eac4dab0d253c0ff41b7600437b53a5ac5278d544a9620648e0bc4dc56aff0bda973fd1338f77fa174d8b13b90000000000000000000000000000000012919a18343cc166e2dfb92ff07bbf838779ef0479985bb85b3b82f9d0632b3f7a19d387f725a21729a77c58dd4d1d1d0000000000000000000000000000000017eb269ed75fe0403021ce70505bb60a711c91c551931605bb2a0773fafa07aeb47cdda382c0aa64f40f5e6e0e6bc77d000000000000000000000000000000000bed8ca999a4691646124a140fcc17dec02b74bd28b599c807abcaaff13bff65aff3892897652cd33b4ba5e4cc0198a9c1f6d538c5b4ae15c84581f8fd4c61160ed395816557fde197e1a013ba41ba0f000000000000000000000000000000001344d6902f5fdbb59a4c975847db0191beac284eb17cd92360e59f42cd7796cf2aa282bbd4cb074c4ee10b489ee3f2f60000000000000000000000000000000002158eb3429d0532792532fcceecc404e95a879be68b3685ae94016ca3762438b3320553ab6d5fbda3a0b615a04d996f00000000000000000000000000000000118f6fd8f60edf7088a0b4b49338bfcfc9c38be230460d7516f317b27c07600f504c8cc87acb0c95515c3acdc1b125ce0000000000000000000000000000000014eb422d44ec6931ac9860a6a017a907e8ed76de91bb7557e818dbacb19fb51457a1f45cca91f1d1d75a3567a3375b5cf2f6a4713eb692f7667fba2a3dc35363c3ba163519d95757daddefae11a95853000000000000000000000000000000000f2c72c53fdb1b0cd13a1f20407c64c46e4a0e461778b0e2d48c4f20be7c655c639b38f758fa9199b8395f706df10e7a0000000000000000000000000000000016e6c75cdfbc20c5dbc2dbd1caa66be92911264d407ce3c689ef3ae1dca44dffacb4c0d8a78ac959e47ac5c454f607bc0000000000000000000000000000000011c5d80d52e864b0a46fb48488f497fb85f51ac040c77b1d01336860b972858c0a6e59914112f6cd6c1612c604d26f56000000000000000000000000000000001136aa7eb63d6f85d665d0539975a9a51a9a3f5bd8731910c32130b1ec8b07c39eb42e4f61e7d22bed933d9fce1810581022e50c3fe7b2a65aab79de6d9e47c457d197e145592dd0611b1dc39941513b000000000000000000000000000000001306612f5119d33f177b8804443d14d04c8e059e28f63aa10ac6a1b25975327f378d5d24f0236e05849f07e99af93ae20000000000000000000000000000000017340f8887292264d498f84fce4af83573aa6cf1d57d99d364f2b84e1734fa4f9a1e07ddc81a2135ad5f5e0ed2989585000000000000000000000000000000000f65073250019ea69339379aacbeae7520c1ae10c8912ff827b702bdab2e15404cfc939389587364d811054b7d9f2b350000000000000000000000000000000019742f83ba0c9d36aa1d595fcedc3cdfa6c6f08579e66b8956fb32ac03530114ed4266738c57175e7a10313c8dd42deab80011c7a4aa905d4db6d4f6ae46eac9eb8bb18613d4ac5e5567990d7e8fdd96000000000000000000000000000000000b2513f906db531d052e8e6f1cb8d7d3c41c7ec3158b370268d1de204ed8fe7618b64ae35029d1718153b5bdb8439dd90000000000000000000000000000000001664c367a2d4170f463c90351cb321608e2a49fca6f3258bf10d32c39747084cf9d2c38d5241888aaad97985cb09a450000000000000000000000000000000014de15b86461cda9f1be69f43a9ceadfe7b7d1548a206f3237d93c7c01ee554c4245fb73827ed0ab72b99a62215faeae000000000000000000000000000000000b25e458522be9fbdde4554b1a0d9af157aeb7d3ec1f89185b193c0429125dafa554d7a531ef9502d443a26112b940b8f397789685a736375ead2312874174795586e12b230669a90d072fa636128c7d0000000000000000000000000000000006862c0b0e3d7bc4507bea1df82080745aff21b7549b372085776be2f88aedd4cff00ab8258aa21e63340963bd0d937b0000000000000000000000000000000017199c5ec3a2dbc1f1e8d74648cf8da247e35cb07df22629b3845274d29e473819a31bc344f2a2bd6c790530cfcc0126000000000000000000000000000000000e7fd1ff41d86a02014229c5085c886988dfaddcb60f5c7c81063e8289aba846337d61bdde57e276fe6c65bdfb48751f0000000000000000000000000000000010efa6aaf7650edb0c74d30125e36cb67cffd1c7f57932d92ab4aaf36f8d9245d7c75dc2b3bc8f3f328589b16e26230e28e325fea39d61269c576626984f85ea43cd683b08c3ce111aac0005adda39c5000000000000000000000000000000000935de4b16f5f9c0accee77b5820cf36c24aad9953d40a2409b7e6040f09f85da7d2252843f9f8005316146caae539800000000000000000000000000000000008a8c542111951b32bb0b50f7631f8938d22e298193edffefa3e0f5c861ac8205ea9b865f9420ad74cd22b37c5cb56200000000000000000000000000000000012ddd660879a1f52ae6284e14f2ae6ea381ff3f321458cb76bfa566b04ae19f3793468d0aab652a82671be74332a3b7a0000000000000000000000000000000005eb148c35732f7ababc73861b71fe4ea5e25bcdd675e975fadd0a9e0fc54e175b2e39dcf0323f4a9802a68baecd25df3cfd9bc41303803a0b4edd121b818a126bece309dfee4133aa5314cb8a91d08d000000000000000000000000000000000bc351eebfd3f3c332268055af1655c8729cea44eaae803607198cf747280adc0d3dedba137828834af3e7179ccff4c3000000000000000000000000000000000d8a6cca17e1c6ceace7c0ab1333ba76ed6c3b114bf99ff80127c6a17eb0585bf6fcce871deb7385e9a8896a21c065ba0000000000000000000000000000000013222db97e31e28946adecda10c9ccc9aa9fce33e0aca51d6483d2f0c5bc3f33994ad516215f8333e22167164ef5459500000000000000000000000000000000144d3707b1898d35c65ae2c89b1570971a9494e8bd23df835f565059554eb7b5cb66a6eec890058316aef43d6c6ff55c8e08fed30e422868f37c422d1efdcc93912d55b0a731479af863dca4705e0c5000000000000000000000000000000000138da93a9a4948d41a6fc6d057a217faf5efad863b45ae8eab311360c033362213edb0ff90bad6c95f60b8e1131336e6000000000000000000000000000000000f41766d9b57b3210d315a2b8f90aabe591c1de6037ec79c0d72a283f0ac3094436bb97b82b7ad12ff4f471a41227bb50000000000000000000000000000000009aa4f5b674782b7adce6bf75ad676480f96a58d68dd7ef8d1fa488cfab794f06e7754e9315430189eed265913db8b300000000000000000000000000000000004e2a4a48f02079c0ed50c1daa91b1216af481a982c7aa64d8ba90449ed886cdeddd0cc08f1f8764f7f8c5988fe677f5674ecdf795b48d62f0db0f9cce057fe570d15c78f2eb7a77b66e4895a45804880000000000000000000000000000000019c927bbffd96aeb9342666e1974d30f9dc215e8eca41c24244c63c106331ddad20d64c79faf8c5baa45cd30b561e167000000000000000000000000000000000523f063de96c9b77bfe5c5045a007e155b45dbe68c5f1162884f1d942bb385bd34c2a37e5e67e6dae4a23d600d75d1f000000000000000000000000000000000c221006f5bfc8baf43826258d0588d7c0fc345d68de1add1693bb897959c2cfdbb9c165e82c0c787529cd7be85afbc50000000000000000000000000000000004218e3d52b42a4504611929f94024326f38e78bba2aba105db3ffb4a51f8906b060ce2302e22ded60714d652a234c1f288fc80d07393f629ef2732879332a253b49d26ca7b2bef7cc49ee40530b2b3400000000000000000000000000000000189e5063a36b0edd736bcd9f997f4b08c62d33b27560e2e2b7b40039e7c63b75757f23746e70a330110d975ca683941300000000000000000000000000000000013393485ae494b1f1467cac9a8840c695d619aa1a78c40674038c053f264c1e20481f2005abc7f0545346f5a982d05e0000000000000000000000000000000003f2be501504f4d37e12acdc54b3280671ca0762a063fd3bc04473ed5a051cae3767044c002b7ed1abe88b2143af08750000000000000000000000000000000009d5952af88514996336e1ff19409e3e4eb3079f6dea22f9738f4a331ce842b151e0b842b68cddc10a711afa6d3242b256e69f4ce8fbd8f86f546fd6d129f9760edce7c5e178dffaf987bf565e9bb7e9000000000000000000000000000000000a79444c673e630f46bbc5a9e06e8c023978a78e3c58d72910a04c3733ad873c0d0de61448076b2fd3764cc17d86d94f00000000000000000000000000000000110cfd215d67d4a091578203855fa0e85feb4dfd0076fbfad20bd092fb91b528a4117850955f5fb6568fc5844e17bbfc0000000000000000000000000000000012ece0577512182c50dbb4a485256e705410108d9ba9c8d57780d49e2e25a0f89ed1fe917797b902aafcb8f7d98fe931000000000000000000000000000000000217cf1dffac7ae162181d43ef12e3e88da4840f1573d7ffa271f64d8d54861099be37b644e96e650dc613975d8a00a4ab40e86212189e6f5925df810141c132eab20c123166cd8d3c6f40f5dcf1b1cd0000000000000000000000000000000010bec428b2865aa7c077c168dc28dc549481c6f8367a5b84cbbad661b0225cf0fda3e840d96c4e4efc36c20d48f23d5d000000000000000000000000000000000ded3a1e9e2eded0a11211a217f9355070361f0a5887a7e19c74edc8768000311cb9dd8513977ecfb45416cda0908cca000000000000000000000000000000000b99ffddc79e825f0b73f2d0229d66e51624d854d00bdee5aa7a884dcafa1888963e2a2149db0f6e40ce3c67941a391000000000000000000000000000000000147618970c71965684bdf0d6cbe1de189bd23bddb2b861c9636efdcb7a96dff27bb1ac70485b562e78485a1e8e56531cb96a5b6129c58113bca713e6905c026c0bfdb6d679c203cbe2b256b0a49ecece0000000000000000000000000000000001a402aba8fb28dd37f1be11fca037baa99a6b57188ccab66208a50bb6967dcacd1943cca73e34f6b2e2f72407103a73000000000000000000000000000000000c0bd64d043fa4e3ea566cb84f9139091891231ff500b67e5fd451805f79003f6303352a4f0c236063d60d9088fae88c0000000000000000000000000000000002861fa7d0222711ffcadac86e7b9e7b494f5561c22544bd0876fb6e1b2e680d0f7074c2800312cb233de2412ccbbc8600000000000000000000000000000000015945f0c83e738a17cb1283d08d63ecf12a7272bc62812006ed78254bfc45ca7c42306cb79bb16ed17bea600a4d62b5d9d8147c4453cdeed971242d316e350abead3dd08e93ee54738a4a5aed23affb0000000000000000000000000000000002268793f6872f7715d802c0d96f3b3d850249d8e70aaa97f19793d2c92e7cef384aaac603eb51525c7ceccdd0211fc40000000000000000000000000000000002507d680a2db16746810e966d1ba5547ac98d08c8402aed0859203e6dae0cbd87a9ddcc05119c1ca08fca2fd733882200000000000000000000000000000000192426b6438b2abc7386599afbe09081ed4908fbeb807a65bcb7c6676aa76e5e0c2c87612cd109cb124c73b9c8e0591a0000000000000000000000000000000017f125a2ef5246e7a19e1b2741b31b9224511ffefe63ccfffaef1b7949e88af573e267d6c7617ea97bbaee6d50eef67e1ba8e52986d3bb0421eb53b18ca8c21b9f7e631f16b99ec56748baeb541b32e5", + "Expected": "0000000000000000000000000000000018c2f533f464f9768308a56209711cf9b6653e8d38591d782ae2374905f99f75c0d42c63af4b534056c28599a9da874400000000000000000000000000000000071d4d708f00875545f381e164f77183e14faab599e472b2857c15091254ddaf5c2e9df809875336f92ebcf5b7628da500000000000000000000000000000000099b207cf6ed022289c27393c32d0b83aed6c7b57323e746374c1a8e2ade071a5293168e72f7aab82f6c2e39b97b03830000000000000000000000000000000005dada01b4dfb6a52d998210a67ccedc11d6aca2405e0836280e2f7c8fd7c8dd271c815a2e9ea1dba6f1ab0d6e89d756", + "Name": "matter_g2_multiexp_80", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000195d3f440857011bf9b764ff270b8ba1d9d13daf48933e49c12ea20d335b58bcbef1353d9698a7e795b4370ee385f12b000000000000000000000000000000000716c151efc6e611b5b15c749eaf02816a86e267428750741b167404a21116f2025d0d07c447b9c7bee8edcc2c7b76d30000000000000000000000000000000012ba0bf62b35327111d09b402db2b75b2e835cbe581638af2fdd6d06034774533e6501be3de84e7075e4184e11fd81a8000000000000000000000000000000000329b14859d004c146047b03870371f53936e078ddc69294ff1fd6f42cf2a354a921e5f2e5c125c454e20af97dcf769e7d39b55aadd47afa3cd35cb85a89e729ca236ada965b99f64ab302a84952babd00000000000000000000000000000000042286dd205ac86fdec3fee779059e2ad59adb62505f7b78606c128244b031c53dc40ebc2f5afdba348892d5ef4c10e7000000000000000000000000000000000f960010d4818846b3a0291c6fe1aa53bf0eafbc0e0968e3ee82324452a7c1a8041c06b4db9cd36a07c119c9fd2f9038000000000000000000000000000000001876da0dca72869708b8ff9ea0b74ad6be25ba82ccc76660246413a04344f2b72e5a7f6fddb58e9dc0bfaa6b33a5fadf000000000000000000000000000000001538ad1673f117493d998941d9356fb9907f70c279bde8ae8813b9c7b371344456f8e67cf02bf3401ee06d55604cadf9c41ece17a6d8b4a22994227b37a9d73e17a88859683afd5d226e113246e70cb1000000000000000000000000000000000d91319b4a5e047ffc8a68e10c34b2b90e7f3f08f9e3ec53ed12bba5f66c168c20c6583ba2016f0137caed834845f7470000000000000000000000000000000018d5542919674d2fc32430175405d806ae4abe3e1236df2188bf4c9ddf66c0974036e28414890212ff8dad244d11e3c700000000000000000000000000000000160b128f1ffeb97edf0e62dff85e3f90fa48567ab777a7937a2c0e4659df180fae4565107c2236a5f2808e42a03a4ab40000000000000000000000000000000003ee74d214ec491331fb9db8243e75570daba9feb587671496cea4b480d80ee162c6294c082203534bee450c384f645e69700dfa3b6e5fba735d1fec3b3adc90719ec301c406ac40673f4e5677da3227000000000000000000000000000000001951afa33800a366944c43bb42b8c5c8beb9ea2e1cead8b84e0f94af51e4a156d9454c0f08d1b13c692c41cc480fdefb00000000000000000000000000000000077f4543fadad6f2f8ae8d5d98f64965bf9626971e7efef5221cb4d95d51b8764324cf4a11d0ff5330d58df70cb79d92000000000000000000000000000000000417251cd0c1b32505377e51bb30ac8a8a3c059644b9ddb5a058b3c6e1110e1c71ee19f549b15090144dcf4668d0d50100000000000000000000000000000000052133be345adc562238c4ecbaf76ca4159fc11ff563ab393317b03065ab668e7df401831baf7027f0577f5791b1ca3019e8eed297661c06c92075629e163e80a08835254f7af8c0f179400be114ba7b00000000000000000000000000000000067bd52b7a3193d31a4f1ffb76432c8d4108442616f17056d310fbfee2ffaade9437e2bdb8425cf83233f0c632efc1170000000000000000000000000000000011b045d6eebe1bc8218b696b5e81e78db78eadf1b5d987060c1bdd73aa65666f77e1d6bb6f3d939d64cb3e6bda08994c0000000000000000000000000000000016eb5ea5067413b72632f5300efbe0d01a284b2a59b68d0333c269da9302bf0f0cdc923acb27e51bbbbc1d4086e6b06a000000000000000000000000000000000ff37b8812963d9efaa1e6deb5cfd34eec70620fdb65808739295a819e03ebcc8f501b8194d0b3c72717fc922b785194199ca6fb7f6df8a2e72971c5738ad75d84935e922587acf3a6b6debf3c37bb5e00000000000000000000000000000000149b5e0df255281c1b518427094cc0903fe89eac9a6dcdc379b8ca30f3696d89824c201601fc4b0795a3c859a82893170000000000000000000000000000000016ee9e7d957f439d078f3c5da98d114a1b5bc4da9c17e117e1f540dcbf83a349bba94def4b87b63247f190e3b5813cb00000000000000000000000000000000005d4f56bea105be4bf1fcaf4f25df30f85968d59e60b1c438c28ea0f480851f5ab9c05a7ca6677e6f12c7dd3ed67c2e0000000000000000000000000000000000dc0e87ca5a8b339b485ff3da2b9854a07e9663c43344dfb5ecf3ea055eadf67405c43013e15367fbaa55f1bd8e222f98159c6b98bce6ed31c30957280d8f7820e9376093d1ec9ac68ce0777d02b084b000000000000000000000000000000000b0575fe2adc9ad66209cb2191efc2946672e4e81b96d50493d2125d9c83165f0c4d3f714539eecef9de0706cc20da9b000000000000000000000000000000001511649f0cb6b86111d2830812231ad37df5500d7ce1086241591dc3cf40b30f1c53dda3133b2f7fff253c94d5eb98720000000000000000000000000000000005b15e4e32f4f4e46c1560792a9973f6ad63f5176694734f379375f16a08c162a4a820385d3ea6c191bd87fea4f5c8cb00000000000000000000000000000000089218403fef08dcc6e679b49a74557dafed3278d41ff36a9801db091b91de0d46d779a40574fa4a3f2baaa1a14be098ef1bc580e0b52b10b049f07d5115a60ba96d14a39e48ddee3c219f11c3b2a82a0000000000000000000000000000000001c35a3fdea92b28c9ab4bd9ea592b998853a73be844b9dcb500ed6704bbf3ca4ed4216dc24b50254b6ca75c4ca3e7fc000000000000000000000000000000001815292d2a365dd7f41ecf3f9a89e040bab717241cefb3155a097eb9885d64fa55f5de7023f2ecfd33f483ff304666520000000000000000000000000000000013df522c72805b890aef97864ec6769f569504fca2d6a6beae97f80dc92643f8014daf3dafc0040dd7b985c0d9b2c462000000000000000000000000000000001155ad4373a8304fa6301cf48b4ace135d6a0c08cb06d624f42f88073e43612ced3cc37235422171b43af2b4ebbd5662d06f6ed682c56611fd060ed2b3b1dc48974769ed6dc504ca3e0b9f68b77e63c5000000000000000000000000000000000bb9afedf7417ca31beb96486b024af13c06007585d785efd1e78444daa9bc3c03e1d64b560e8d6a18ccf77a8c3c8d05000000000000000000000000000000001652d3adcf1612e487a9ca198801afb9ec30267148502684c2b91c05ebf6c48e2ce33f9c0a986daab81d5359ec1b503c000000000000000000000000000000000baf3d34bf4a78e3b9dfa637c6392c7f4d7ad0ec315d10748784b5b60221bd9da0f4b75c57c139ac2db329e270d559de0000000000000000000000000000000000c30e553fa2324d552bdbc7d2dc86531340c4894495ee9a38b64f5bb6f92314021a2a00c4bcd8837e55a0ae2676a9b761d7b314ae9d9e78f628ec5a207d12e2dcb690688d256fe46e0affdfcc9775ae00000000000000000000000000000000159a1e4e87c35aaaeacdf21efbf8ed99fd6a2ddd7e990c12407b1417edaf185b8f1df9bafbddfaf3d581b5d97d7718300000000000000000000000000000000012239ef7b1e1009c81098aa4aaad8ee9e003530db5afd49867aec47f46d5e29d44b5e62d80d9e832937a299633e863c80000000000000000000000000000000016af6f74392461a9294d9f848508651ca5c0cb50494ee7c6a334bd770580b924a17beb7824b489e7e101ccd50aa0d5cf000000000000000000000000000000001912a0f54ba4fbecaa55c150ae93455e1db6b238c032fa7992bc8456f183c09b6005dd6398a77ab91cf547919ce7485b03a0c47621401fc20d2c78f7e30814de9a6f838d4328a5b5be628b833c31a6fd000000000000000000000000000000000cf1cf7a09a12f51d10059425042ef8e140718ff11d2f17897a0156034f73ed29496d93b8695cdf609280d319c9bb742000000000000000000000000000000000b2c4d26fa1eb72eed1a24f27229d2675e0c6f91e3a4eba7d34b0fc1bf5a9b4eb49c3492d9586669abaf25a656e1f95d0000000000000000000000000000000012c5c83a03087b2449b71e9037591fa265d710ff6d869bfa18ac37cbdcc93024f673128db3dbad9e3517501af12f2540000000000000000000000000000000000ffe5824245e43953e3d0adcd5fdc1a97ffc87f8c5473fdb0fed57000fd126a9925ba7415c698248c51c1f3e12b270d5e4ac6a5e740e073c5ef8af389e70c2cb8ee8c4c04c2ab4c48c579e83e181005b00000000000000000000000000000000036aa888e40882b2d6ac71d66c88543e32b4a0a7c959eec560e3d26114d8aeca63fd87dcbb3171622c989a6c7a204ac60000000000000000000000000000000006a5e552e6d2dc95ab8636a8be16bc79572b47860bb88934bf04c195ec01fd71eb91e45f24c58bc2812ed5fa10c8dd7d0000000000000000000000000000000015fa3ffcbd4e562a4bc29975cf8c1eedf442e37374fc87128e6f68bcdf6e996f6f054e0b8c608e651753de96655b2c100000000000000000000000000000000019bba7c0b170dfc1f8fdbf7a2e09ca0c4027a6aa6930d15dc2772a0f20e5e56f0d11644094dc866595f801ba5552e6c4c1e20d8003fec60f68c03942185fed934ebc197c2863174442d1a1c8d1424d31000000000000000000000000000000000341f46ec06a8def4f044328bcdaa308798469c767d10e5db34b0ffb6f550421c67c6fab7b63cbc7504e55847cee419e0000000000000000000000000000000006952e5f791c37dfebcfe69cdef196dff66563b29e94927e3ab34365773b93e72251a63af4ff294af88d45fe0899a2c3000000000000000000000000000000000874dfe75b31450e99dea063c090e32d24fbff9b681b64a9dca5f967f82003005b003d17eb869bd3b37d4a412bcb28fb0000000000000000000000000000000014203b69e8af4e25232777f503d5e82d6121256fafdff1b037f65d5aaad0f09ce882151d6bb4705328400f00089dcc7a7713ea72a2ee99442232472ab3dea9307a02fa1279129d994af5588af4fe7af4000000000000000000000000000000001403fa3f418107e0bf7f3f4bfcf621812d32b1b744ab5a4c37b5cf946a5e5dabd675c2b70bd355590a9883436c5e32dd00000000000000000000000000000000069e006f168bed4439fb46db9ba4f279f72ed608c12a05eed172608693f42cb1f04aaa54191f4b0b35f967bf03d0e63b0000000000000000000000000000000003f9ce029f6fe605802de64701ccdf52bf4aa299400a6e1c36f5a1f9173bc11a38e7628f123fdcae01d2b260f77c577c0000000000000000000000000000000009c9732809f60635115cb479c80457c6cd8dad092111d663c0cda0da1fa71c9bd6795ad013d2efaa4599c8ac5c88e5f26f128420cf6ab4616a05b287191105f25c7212f2c39c3230fa56bc27cd06ebfd00000000000000000000000000000000115e08d8e4dff7adcfe46a416625be0ac26ea2d7900f5fed497809a6d46e7faa5b47c52ab3bbeb9fb16d82b549707ed6000000000000000000000000000000000dd1b31446e44f64ea5046dca5174ae854f6bb5d95886fb95aa136d432f1a8c03ef1a5f9320f89c82f764049a7f678a40000000000000000000000000000000014879783c07e6986cd393fa1e0ca8a7e23b2c9efa595229fc0b6a11b9c232ba33e92962a1087fe2ba0532d7b541827900000000000000000000000000000000013dc6e2bdb2801333e7f914b99f30b40125fa1ebd49b141d88a8c090b15ec3250a13812a19c3c0751a4e5ed100a6f0ba12bacb3419c34369dbfd1c968334f76bc50885028758a975cc812a04e6feabd6000000000000000000000000000000000a2cceef36ec78dc702b6731dbaf8cea1dc2b41fee1b235673c6941729bc5631e69ff37900479391a4d10b300fbf3eb40000000000000000000000000000000002f4881fd626f4ac434bc1e59716e5e5ee14dcb9adca4d639ebc9d86e323d274ad8ec0a4b1e6ff92e1fe7928d48924b000000000000000000000000000000000174cac80e7bc63989f58759e123513b611e9849b44d43a362f2eb84421ad008f3ae9e9f0f233e49fc8e10c1824ba948200000000000000000000000000000000143641099c8a6c8153dc8ce74debe795dd6c4487e8234f164f9f8dcdea6a53619c04a8fac215421f985557b5b956c20a5b00f26af6f59620c7130a6d12cf2091b5f52a6b638484fc1f242dc1773be256", + "Expected": "0000000000000000000000000000000009807ffe8fa881b235b1181d2d3f147dbe21042524fb0c0b4c90fb122d160c7b895034ab32e20324dfca564ca6e3183c0000000000000000000000000000000010f6da88525da3e86ee56cd5514a436e3ce4128e437a876be130a70c42444a05ac269326c84dca532ca2e546860027c00000000000000000000000000000000011396a7317918841ba171ea46bbddc9bb5a08db7c82b90008c6982b4b79a4dafc151081bbdb7b9fb79784e603e15eb9e00000000000000000000000000000000070b8580f303b83c643a484dd031b780ff4ca2ec805d8c538a0b0c791cc7f8163654f5e5a41776a8681500a6690e24a4", + "Name": "matter_g2_multiexp_81", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f38906bd058e4d32403fc3d39fa57bf49c0da65ef42fb129332b91c184185de4f9f0bfe8908a44833ff4ac4d65b88180000000000000000000000000000000014ea6fffa6dc462463c15feace841697698bc521f608ed0d16be5097bf42aefcd1f73182f37b6279f989e9668a8076d1000000000000000000000000000000000f56d296323177ce53c6977fb60e445278e59ed1cf92e3f68c570eb7a9e5f8afbec5e2ef64674bbb54d7016c829f72750000000000000000000000000000000001b29012ff3460cbe4a07bdc65885718f217cf177866823a7cbeae18bda67f65913ea20bb69e0ffb31bd82f19862113dacc5a8ec806f2f273120457865582b08697904a2c6510bfe9ea21eaf682fa4fd000000000000000000000000000000000a4126bff91ada057ceb9a75d577120c7ac8c9ba62151602414364cf88a3e12dfac90b5590db3e40c16163177ad4e7520000000000000000000000000000000004a3768d326c4ebcd5ffed89341e8d04f89e674f3f2aded3205a7193e11c20115b3c4d595b959d6e39a03d76f6b5925b0000000000000000000000000000000006e0ae4a9c45bb69c3a1c65e26e4869f2eb18fefe584e4598ba99c0044e8d911145a5db3f57194ceb6201e7eab9a81b20000000000000000000000000000000005be2ba6b147f3f2052c4877c90ca364427c6721ab64dd35e89f14f3179564d8812b9013e3e3db22f69afd739229682b98c15a259b4dbb8c300a39f0af558a9827112f6b4c5eae3d43bbfe057eb113cf0000000000000000000000000000000004c36cf955fc81bdba4ea8d2ecf934adaa57fa4073199f77bd0428d3ef80a7d7102179d4a44ef0de887bcb3ae915408900000000000000000000000000000000138bd3ec7a1b6fb65d1df6bc1d2ada35aa52b06729c10b5d45b9bb7cbbdf41677942b99eb9c2d32e3e73da7d5f9cfed40000000000000000000000000000000000b0291ca10245e2f7a963fa07ec62b15f6bf9e7a5a7839840ebcbe538dfecaf2114c7864a16564a5b3c85c15d97fb7a000000000000000000000000000000000b436e912b8a71cf8050d10d59017eca6e494e5440f02d2816924ac9cc2034bedb1cce6eff5c42f3dc57a74cf1b51cc0a0e68bdc97fd642581f7e62ecf134df2c05570713c96fa733d3db96ace88f0f0000000000000000000000000000000000c105ac7475ed9517a0b07f25a030a5616952d817f3893181e352907c7cf4ec9f5f3006e37b1da97e9cae4a1213584e20000000000000000000000000000000002c112c18268934823d5946d2322d0faec497d8e18736da91d2af744d90f74136c49370a4b43952152c62820d25e52ee000000000000000000000000000000000fe2818a397d70543e752e7022f12bab10f1b1289cee61a0230d545296ec872e34d8df6edf7ce9980f3c153e6e51d96d000000000000000000000000000000000f479e6a52bfaab3a31aa9a461adbec8a390daa8eb6273f9e425eeed764a6dbad44d12778bb888aa5808df272edde401e5512cac411cd103fcd7497fdf47d1221999bcecdba30467f06ec356483484fe00000000000000000000000000000000016106cb42ffc41d5b23bc5b06001473bdfe556d375fac6a0cb0a12494e9c02ca2dd6133356846e1759a2c485faf5e890000000000000000000000000000000003cec25b0f5d1db0ead5319d6dd15517657d1fec442facda4335ae0bbeff606fa9caa6a4c00445001180aaeef895d7fd0000000000000000000000000000000016ce3573fbe27a8d23b3ebd22aec989d61fbd0e41a519c5e2f1d650f2ad73adcfc8c840fb12bce83b722a0cc69164e21000000000000000000000000000000001434d13d44fd8dcf776c2a045734dff7c09ded31c9e3a4b5e765cf26fbfea4cbb4ac15c06599012a7f2cd572bfafd78ba32f6861298bcfd4668653544b4551d7357d64f733365a5f08ebf297a09fd4ca0000000000000000000000000000000019923ffba0d08ebf1bd43393142d61022430356081c18e37804172082c7ace987ece2594f4852e84604a77235c7795e000000000000000000000000000000000123acf9e1a86846ae27d5fc0358afa34fe9d6b68232c9ebf2d47cc169779c4bd24f225ad30886fdf68166adfd9898abf000000000000000000000000000000000a6061d4cef29d1e3535d54a2e36373e2c16f91543f53e1aca94c4abdabc663049673f2327ea8bb574244d7f5c99e981000000000000000000000000000000000b1f3e1d43575a74584ec7a3280f8b7196f9b99b5e911ed33ba6bde1188c82d906f0f8e6fc2b285fefa0ce59116e449524301fc5c3ab842d7f6a278fcd32249f1daf86a31dd254ab9a21941fffca98a1000000000000000000000000000000000373d36dd0fac76a0fc46ba5da279ca3be5a1f8d799570004e429256787110d4fb746f65a8527d0ba681a81b9980bd5c00000000000000000000000000000000057933c2b3e482ae026159211c4742264f7e890efbaeb6e14f3bf66c80923289af095dc97b751a117e181ef917d049b000000000000000000000000000000000068816ad2369bb57b3430c657284858d3736c327284e7410b61ed444786bcb34a66db9c16aca583aa9722aa8d7975b440000000000000000000000000000000007fcd7dbc062d28f6ef906f6a455337e517e1d6e6c02c7c0b2b2685b79f56ca3436c1bfa0ab96e4a5eb0c2e2c321c0dc17a920aef58100de67c482ae1fabf7ec87cf3447bde1e19d9aaff825695706740000000000000000000000000000000007bb0ab060cc12002e043724c0fd0c8bad30e08b65ba9f2fe5d09d18cac4bb2d50e29ee14590ca7bfc505f3ee3d4f93d000000000000000000000000000000000e680653d29eb5d90f21802f543eac3102a1de6d2a5bc943a53dd9b80bdcaa6951ced2eae5e2a25448b40468f1923ebc000000000000000000000000000000000b7494b494019e3ef36d5c620ac56483fc6b1c8fe5c6f67537b19f56ef01db327812095fdf805d3dfe678a3ed8bb6226000000000000000000000000000000000291e5b98ecaf7aef0374647d28fb9f8785a64d9165de407d062403047da14d4ecd19fad8575070b278608e16b71d387d76d5eebc3d099448ce4a8ea6dec047b0f062c6361ddb9e95ec898442423a31800000000000000000000000000000000186536e3ae3edd9cc6bc24fda6589ed26e72e06121e97e1ead65b200fa0578c6e53d1154dc7b14e7eccc3a53237685060000000000000000000000000000000012fefaf6c76ae7197b99571e41a19b14846fc4499e8e964ff750e7c3ffef6ab3dc19eeb42c5f6ba44a573bca7a15166b000000000000000000000000000000000a135db813a44a21174cea3a0b34fb49f273877203ccb66bce44b2b58794818d8bc1df27544ecbf780823467e2e4ee6b0000000000000000000000000000000009b08f70cdf4e349e1a73935de9fb2ad9f4feb8cf5f835be78383fda2af94d81af253ebce08cef825764151d5713ae60cd4cc1453dec7ae335db989886fc0964ee73e12bab69ce1f1458d1416471176a0000000000000000000000000000000007976df2d47c14374e554401c4d3330bbf6f1e6b8fafcea1e1974af61e8ebf493dc0473d34b30b0b1cbee082550d85c200000000000000000000000000000000177cd64db8334dccb17fb207e467e5b09e891b05df7658d9b439e3cb72bf3e0a70e84f96fb5e448f33c003c279cb38d800000000000000000000000000000000094d739a02b8ea6ff8113019597f41df4728b270770edc5e68b1f5c32775f0c706e3f31c0a82059c1ee150b89097376a0000000000000000000000000000000006ed888aa4bdbee94ec67500e30d654071774fe22464dd5b900fdc17b445754293504b10d044aac8fa0c289f0b2d9dce6d207c08e51d64a9a47f5353faac77fbb184e1123d38e39bbada85534cbcd3150000000000000000000000000000000014a16b856b04ac4b687c79f2b4e1dd6d45db25b382e0ba6687afac648c9b6384cdcfa89812f1a726bb4d1c22ebaa6668000000000000000000000000000000000764088e337df6db30ce8aa23aefd91d9e35be911c9e89ac62a1e06c3d06e28efac256490400fac4490f595cd03c127e000000000000000000000000000000000894856fa1c8488fce182a9c7749f7953e6a73879b6e743fdb8c780275447122f512806fa83d5ad528f8f61598ed01d20000000000000000000000000000000002b33bfd09e0ff452c3336bde08df0102162488bc83c27052447a1e5d16c9c68bc529f96ee3787a26d2009f22a1246342e1910b704d39b6a64cc7a44e44ba3e8b7e64ddfa90dfa6b5ef571f9ff7d7f0b00000000000000000000000000000000133e2d092352d3ecef5b67a09c2be268fcd4fe1f7360a8ce3ef5f33bf689242961a140d9c8afcc1e2fab3ad4e3dba49d00000000000000000000000000000000101eb285f0c462a22406846d82ca6a278520b65132d2008b124f6647a642c221b0c3bbd4a0abe8af7417e7aefb81b5b20000000000000000000000000000000010958cbc317f1186aab69ac24be87647b8013b678b0eabc6270167bdc9c0cefbaf4d9a34dc41524b709f1b881e6bfa34000000000000000000000000000000000d92c47257fd0c4d6baa4c81efe65852840479b9bfda5cc06b253f167069ca7367924c0c67d6497a1e9abcce7d0ce9502eda0eb154d5f9b0e25a828c6f77541701004cd0293c61ae4d36aa3038d0f1840000000000000000000000000000000014ad0f935ba129b47ecaad63b9dda44e7ef7933f182a0f5226141c8f0ede026ca2f11db7f4924b5c582461688dad6359000000000000000000000000000000001453716381f13bf6ebf8fff2ed7bcb90f7beb44269008af5880a355dd03de5c84c14f5aaf69fda043b422aab0c694784000000000000000000000000000000000e983c9e9b799eccfdb56444d31948067d46adf275d7f39a70aaa8bfd0fe1b83632c23d87f4e993c8191901e9a607217000000000000000000000000000000000267c8b8c5e09b59277736caad12ec6986f206d1c1f48023356d8bc877a594c8bbd98981cec6382bf9bdb9a5fa38275ecaf6dcd51a851eb200c7f5fc3e106ac5ffc432f756b942b1b9a5dde31cb2a3760000000000000000000000000000000002e28c245e71a7f6206427ee512f3250612785ce29b369682fbf767d06ac08f91de8ac9f82951574cce46cee1aa757720000000000000000000000000000000019b0dc35eacd961e0ca7d54a0e37c4ace37eb0200d5489316f3371412717c57c8f17c1379721f4dd67b3fde24f50d4cd0000000000000000000000000000000013b9741f7a32e5e5b1ae5400e32dd6fcc1fd43b68df54ade57c934720b1289a51deae77b1726e1955b6430f37928e2bf000000000000000000000000000000000693980b347ed7ee6cd93f565c87efb36fb304d7e9ae24e2b9f902bfc962b6c7fbab93287147f5ac892db2a709c9ab42106d4a893a68b7fcb8be96faedef65181c239dc2cd752c85ae7800ca84fc2dfd000000000000000000000000000000000ad6b7cfc6cefa5783093b7d700360b354d0698d27ecefb7d5928ac5bd6c299e4001474d205cf3b85a32c600ddaf1a360000000000000000000000000000000017172c3d5acf59b70b340fc703e9b7801aeb4857ffbe7a9d5daa0f32ad80d1c0ef2f0b3b7d1fd83a757c076872425fc7000000000000000000000000000000001291f55fa7d14b14c578d57178cc707cabcdc4bfb444cecabda271cbfba2ab361947d045ed46d9edbd215fa4c8164e56000000000000000000000000000000000f64ed6c989eec5222239d888d08dfd638a0e35eff2266410dab0498941fcd1683654064107fb7e53b8c02fbe98a25622b9e1cfbf140f4a3b1d06be656ad6ee5169a9cfa7cbe6efbf8173843d406acd30000000000000000000000000000000001d25b5bfcedc6d7ff7e9fcf729f858759936235d23ad45b14dfd0229bf3e50fc68799d19ef019b36728285bf7ecd0b4000000000000000000000000000000000326e300ba07935e0233a03ac891f18dc7b5a9ad9a28264136228e9e23e8f2aa31b7f5e5f3cb3354984f57a868a5d00c000000000000000000000000000000000dc92060e3403df3a92b15ba3e437ef0c403fcfc9c3545e544a78874e5d9b5e63b9ba6060c29022fe2594c2e6fbb6a840000000000000000000000000000000006a01e85f59dc45b1501309a350137d71147c30fb70da6b7637a9b1dd884aeb7e554215474784ecd3bef18d15d2c0524dbc68f77d40330ad5b8cfcda42edf57899454571c6c6465c4107e662a269aeb5", + "Expected": "000000000000000000000000000000000b7fc0b44723ff0d1cb7c43e470d4d432fc4bbc7f9d98ddb3d91434a5574956fdf15f898e579236426ea44677998665d00000000000000000000000000000000176586b6f157e408138391e3767d0c1c8457857f4cfae571267ed64ac86ff8a4b61a28b406e1caecffaae6a399f4ec9c000000000000000000000000000000000a420992f850db20d4f7d2ddff33e4dc79bc0c39caee533920c5d03d1c2619d8ced769ac09f664c0921829bd7edb446b0000000000000000000000000000000017e4000f4d03a6707174c3adb74966896bcc0eaabf4ff83cce92a666fbd13b59efa2c767442062b6c8b1a3abd604f0ac", + "Name": "matter_g2_multiexp_82", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016ac5146ffc26d1f0c33645931bddfb84756e1c7b03f4838467d1b6701ee9478ae03c910b6b4f5c14135487bd2c14bf8000000000000000000000000000000000e1d082f16e4d5c5f0b6fbe5178aef6f781a6fb165f775cf0cd4dd55f2b498a79edf373007113dcdf6b977a87e1fded2000000000000000000000000000000000bb94be280df1aed761651c0292f88037d172b675bae1933ec12323b947023b437d080aac9e196fe5e06e5c4137284d200000000000000000000000000000000064190f9725bfd5d56c31aef7fd1590c975e2ce549fa6d5c71b254851149e0a0dab0b9de3acfc2d64231c79bc0ebaa37ebb3c942d3a1a15cee806fdb0fc3635483743a5b0ee9c40a48700bad5da53ae70000000000000000000000000000000012199d02d3f1bd8c4005878c3302e6a731ea69d69accdd690b4667e847b079563d32e18eb7a440b8005ca936da5e73cf00000000000000000000000000000000125b0dbdb0058639513b007a84d3a3e6302f5d846f22f99a55181f097e200981d9013c00d688a11eb976120f1a5da64200000000000000000000000000000000081e723506635433528fe4a40fe4ecb8a9c3d8cd701c043c0418d149951651e21632cd85f03db33b89efadd69e009ebe000000000000000000000000000000000956af2e67f8ae676abc783c4ec9f85c50ea130410cee8216fe036cd0521b8ea38966288afe7d35c28b30f7ca5c6edc0c193d751c4f24f4808621979f07f03b2eabba75f08bb49682b9df2da7a85a7730000000000000000000000000000000003e11a4e9dfe82cb495e9e698b16c257ea3f4ecb24749751e7334e0f31fbd6677545e4bf9ff78a82853560f7e7ba2ae2000000000000000000000000000000000caea2c527cb3aeae427e92fc364365b1f55e7128a544009be2ff7a5236d1cf8ffd5a5cefc87820bff5bdf1c6bfa165d00000000000000000000000000000000064a3186774da8bb5d013debf46ccb0d894592c414f32de6f77da47f4d42b0c8a13a2ba4f14b9883d564fd8ff6a4c90200000000000000000000000000000000072f6c48b6a05039e3a4dfc6b73501d6d4ca7e840b119da9c074bd4cd2adf4f2c6e9e6325ebf6f97c3f0b00e6b9bfac6dee4eef524f133183b4af95e4445f3ee5084b96c32e284ebebc5b87f3d76150b0000000000000000000000000000000019ddf708ab31f6f6f725f0e4f65d11248d3a79af30927a6f2673901fef9819b189502cb952bd4742d2b8e84acebb5196000000000000000000000000000000000d928535c47eafa5da4ce4f91467fc31aff8b86b850e4582a597b334491b14da71763f9aedb15ed32856382069c094ce0000000000000000000000000000000004d6b3545d067aa0768cda9dc3cca0f58eb546345b96f7d6b9355d47770e00286d962a6b3a64ca2ce22fdb4834a4bb6e000000000000000000000000000000000f4ef9366d342b309076299816c1ed9b424b68886a5c69e21e785f97cb0f99ae3a99ff6b5244dab817094449048a7552da514f21c8eab0edb2405e673297bb595edc21027890ad680f1663fd960ce478000000000000000000000000000000000236c5b4c57ee4facec5d4ff37a478c505217af66e029c3382613442c58875c75cb423789f6703ff3c1c0d80991c9e3a0000000000000000000000000000000016c052de3336002f362d9b0cb386b800860527e0fe81a1a6df0ccde31f3265e6246191b3febd1ea48e9391c44593ab0700000000000000000000000000000000078dcb04ca93c676a9a924e59f924d9d3af872849bc30ca633d4025aecd981ba12e626337635ea77886a45f4da84104f00000000000000000000000000000000027df6394b195222bb8357bd684088e3e2a398f0fb0cb812ca5dcdcd1fa1279cfd03db62e0f8b2800d4b8b48238931656aeac9a669c962817c01069cffbd948d9d8ce764e92859f31fdaf85f5aefab77000000000000000000000000000000000485ce58b387083172102145fdb3e26c6ffca8b35af0e1d84ce9cbd89055be083bddd3da56443924049a056fdb2ef092000000000000000000000000000000000d998b234a69d584c78ed054b1322ceb33f73cafb5b23c1703a9fd609edcabd44f1a642802b9c0b6fde6a6828b50c1200000000000000000000000000000000019235ff13567bd007d77e4dfab139cd57dbb309a3cf6a6198a548c4e6915778094ddf2b05a91f5478169757bf5a56cb300000000000000000000000000000000110f6ea19a7f62bc3e78f4c5c1c6d3efdf1a7f563576e758218b2c363fff8ad8fab0e72431619e4ebc93d2d739fc786c40273bda92c9b1b677edd905d76d75875e5b77841befb2bcaf1fca7674dffd5a0000000000000000000000000000000001d45da76e3016c00fe65bb50f7067e4f06364ad8348184831c4932ea0e0f3a170ab5147e4670ee1b16924105b6fdb6f000000000000000000000000000000000b3468206db0613369b2b0750c98da65b660fc07c30cab4e459c311dab683b6b313b99ec0fbe92ba07f8aab43a12a2c9000000000000000000000000000000000f58a57c449a41105837d5e2419a34201cc921ec77408d6c0c7a2eb227be98ec1f6f6eb9fc088daa0d4c78928a1eacda000000000000000000000000000000000ba53b872dcb9fcabf35e673b467523ea77accfc1b38a5f92d7b9d269c28aa00d00b08d70eae6ed4d2e82bdb06008f9ab77e16276f9464fa2063230d6c1a4152553536c610062f18565c030e80b5cb540000000000000000000000000000000002b82e2b582b247271543117b939fd17ba8bdd617a223873296f7bd75de4790f0d5d8fe523792bc7fb4764d3739669d80000000000000000000000000000000006eb554347efc5f2ee79949bafc012e6d9964ce19459b3867865709d903fe3d11bc617f30f6279a9e62ea104565953600000000000000000000000000000000006a543fe5cfbae629fd3256575e3eb4e0b65864aad6c7f359e169038bf090ed9bd92fef32fe1ac20b2a8c90fbb6081690000000000000000000000000000000013ee42b0693b2f3b9b977fbae5c856e9e4c5e70120b5c29e0a9f898f6d04b7fe351e17b02716a44febcf0a00a9cdd9220be15b654ce22ae4e32987babc4863ffe2bd8a459d0f01f68fe84a75326889900000000000000000000000000000000001ae7368f84e354e5758554aa9c72ab4b00a644cfb9a4ecba38dc72227d297749bbc98c8f5d6149143b31442359d8013000000000000000000000000000000000abf087f77c79cb8c69e4289fae87b2ed483442daec3851a5ba32c43e342be29433b2deac6dbfa7a787547a7361ed0a00000000000000000000000000000000000fa01cff7aea64b649951a8d85fef0bd475f31e47c706b96ee2753df9987508b5e5456cc49e88ec3aad720a2535f6940000000000000000000000000000000018874d020e2eec0e286dce324b91f15b2a4f293d32956b27524f478983f0e0c5b43df802b60f4f001753f12d449cd821c8f1fe94bce21966427380b6d357a3599e9db03a7694159335ffba26fe29e4650000000000000000000000000000000018f7d19362e2cba91023455e115cd90f02aeafcb026349393ca4105e270ab1cf589621b40965fdc9795f66ea0f6a053100000000000000000000000000000000170ce0eb304e0e1047617b709c834b67a8989212e5bf1cbd5a33242be94bb141d5366e636c01a229943bead9a7baf43900000000000000000000000000000000077a17356b3b31faf90f709042938b9e901817f7379b7bd486d18e47d22b0430ba70fb3006e9afa67d7dac71ffaf152400000000000000000000000000000000064aca92c41561e195fa8239800c97d5242ff0f8ce76b0d119063e2ffa09c26e01d23d5728765a59bb9587e885450ad1c6d34471ed00035a484f97f4e8123d40ca23b017b94df65540a5551b905e57b3000000000000000000000000000000000876a57dc24ad58416f910ee3ce220630a1297e6bc691c908e6cc16f975b146872d71661bbb869361623c61670627eb0000000000000000000000000000000000760fc65097d215ab9aeb3d5a5153977e1e399e2cc0b0cb9befb0266d98ac13512a0eadaba4e051bf56794621c551ec60000000000000000000000000000000003c8e205e53075a96c14ec26345c75881a0d67c7ce0d62d73c83dc353cd7b555cde52ffc5659ab0db2179a899f0fd694000000000000000000000000000000000d7e8a7fe6b751f7f478698f4f0d30cd0a435a2295a958cabedf4668769819b4cbd4e8b7721eeb5ced3f913156abcaaff3abd467168bf5e57f71017b5779bdd400dbf416f34f105fe747ea2f8cf4a21000000000000000000000000000000000180546f697349adb2918129f4d0a979bb114d1b58e5baa6cc221a09d7083469bfaa61f80f1e3a6ccde0da54b24d59db70000000000000000000000000000000004074338380e3d7c0facbbc71d83e78b53191af9ba13ba0cba6015bf4f28e4b0b52ffb34c7867a335848f57b5ce5ef5200000000000000000000000000000000148a800ec38cfc2386497d9aacb4327d5953a6612cd4067ac13fb977046688e80032125d4b0e7cb49913e489796a50ea00000000000000000000000000000000132438d18d942e6dd3f69d117abf83c2fa18418e5145cc43b3cb8d18c873935e41279a9e13596f2863be7aeae9b73d172809801eb18d38a61ef8a80f13086d6b1f85ba751cdb8d17fbb9ad5f8d0f835c0000000000000000000000000000000018b3102ce91af86cd10162d3a43e488a0d7b7807dfb9624c3cae76f342e86f8ef1200444a57e2ed7f819828357a6dfe80000000000000000000000000000000017137b470f3c8d1a03e7252e18f4466c9ff809408cbb2043d6b226ae2746d890b267ce3255114b2e073eb66e93c55eb200000000000000000000000000000000054dc1c981c9166d0bd3a54064c33f15ab856b240770ed44adaf9f32d4429babcd0baf2c5b8a1ff80728e9c63e806cd3000000000000000000000000000000001897595f836342ab54bc2e1b72f433bfe3b5bc989727de48575abe89386aaad9b1549af3ca55f39feec14355b29dc9e33521c9cf035b094d754db994fce3161842a9509ec8288699680c0ac7761eac68000000000000000000000000000000000467f1a3093c72aba4c2d9e8171057cf88146eb32f38db0761a5ab2027f2213c89e12c67a338b4b342a73384109988d2000000000000000000000000000000000ab26c871d140c9c4e0512afe9fb576409ffdcb95417f8c6cdc0d964011dfb1e745045766bbbc08ff7dbd6935934bba300000000000000000000000000000000183488902b886200e63465098be87a905810b2e8ebe0364316da798e423dbb267743a0d2e3d93303623fb17df0e74ce30000000000000000000000000000000012c7e79f9ba36cc47762139d191e6625c850a03d5b6e0648032d1669575704c91e48a9ae432bb3553ec66e86e082de689c8c2998d141b9cd3a82507b6dd97e8d32e9e759169c575eb484e9a1559427da0000000000000000000000000000000012ef4988956e026a79e5e904ad3d7ca56793321d62cad46de3cbde8570be5f0ac86d386216152b37053741fe342de7c60000000000000000000000000000000014ff7804312754d23b251a42aea65207695d4df65cac4f87fc96cb920843c022f24cd27731224db751cfb621886249540000000000000000000000000000000006ea693105a1b2afc79dbf75504c256c519f927ea0d79ddd1997a49638a67151dc81b84473208e8078cf71d456f2de0c00000000000000000000000000000000122d367c147c91517679432d3c7b56f2d529d70040109f803b89a04fd8540a6c565354ae420e1bd4ad4ff61427332629dc83c1ea9e4f4fc12a7190e6c71c4f35d1a676d39e30fe688a05820dd989664000000000000000000000000000000000156e7f8f1412cec315eb76f10c92143157313b8eda0677a6c0236de5fd27e5660ec3eb7369f1604082c59e1aa5f94dd900000000000000000000000000000000018ca9f505a88ed2bf595fa9b55d2356748770af16b35bd5db448990b7d41c3aac53aa490791f7ac09d2f5a087f938f70000000000000000000000000000000017c76ca9ddfcc26b028928364ee35829c6e57fda40773a6bc0c259a1b3cdea715c664d7bd0340192aaf7dec7ad20a2ed00000000000000000000000000000000082a255966c4f9d0ad6bd3d88b136cb2cfca09ed6ae378c914c28ff3338a2cd466cafd839f3fff4a30b33ee56e684f4e00be1b9098f1873ce155a66899877c7b48ddda363ae1d2353cb3816f1ab15ef0", + "Expected": "00000000000000000000000000000000075c71e21ce327a97024c8ab5fcbef4fff76260a4f8c8489167166c4a85d25096c617cceef73097a4bb956be3eae8b780000000000000000000000000000000016270f3ac86c0ec43b9472499c4d845eab488a34ad9e2148c72cbb1db13623c5dbbc8327c47ce596521bd1f54f119a660000000000000000000000000000000007ad4914ceda9fbc161121c818bd05953836a581dcdc78bebcd82ef548671c899581681c908a337618a445f77c6b7cf400000000000000000000000000000000173f401cb78024e844adcc88fcf0e52d32de134f6300216ea0da7747752ae3ddf4d181b8d266b53d1b699921f9871425", + "Name": "matter_g2_multiexp_83", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f40eea638a3d4fec417701c936d61c5b233c9d6b3e94ba9addd0fa0b20adf9f8e07c6b629977445c7750acfd18001c0000000000000000000000000000000005f1ca1ca9cf67c33e3ff174a65adfde2db62e74edf30b5b0156d6b9dc86dd619ad8863c055096685d611ac015ba884f0000000000000000000000000000000001683dc67710880b8af76b464291c17fb0ee4eff3f648ac0772f4a777025c8cda0342d8f5aae3123da7fac57b965685900000000000000000000000000000000143d919ce2cf00838b10fc65374e770bec3db8ecb17d2db08b6a10ac38657bb109f54c1b3040b661c3914ded6f7eb80fa9cbdaa0ddbf854861eac6621255b2102e5343666c735d0384049d5680d105d4000000000000000000000000000000000616299341f2921adf083d1190c212a7941bc0d9fee50b05b265f2e8c339fc3dd9f94607631f485e394f5a7d71ae73d00000000000000000000000000000000006b2f12e22369e8aff45b6c05a2bb72a706dc46a5d1393aaa9e5a7931ccff33a5df2967189114c3fc5dbf69d080e39dc000000000000000000000000000000000981e1b119d04343e075a80dfc189000b4cfb4e321575817aece6009e6b3a6233d1409e8e584f0ac9caaed1f43e40d7d0000000000000000000000000000000001ce4693e8c14032c35497e0f9a586a4541d8a1a68ad014b0850753a04215be2bb60cd7c2fa9be4f4f09a562d7b29f3892073d958260a55b70b580f3ee27c42553b5b858b66f6928fe74b4de91c34bda0000000000000000000000000000000012d634764207dd7a0201703f855365f7750291c810ff292b3e8dee682d7d8eebd6d6f3b3dc8b0c9e25bd2860e031311b0000000000000000000000000000000000eb0859d79fcdef546026fcd380f5c936e64a5665d73f56d92c03dfb50c534a00c857c86ec43275ce69cccc0b53137f000000000000000000000000000000000131bf000fd117ef722b33a1cebd28899fb012e1113f767d0ed46fdad82a32e4327b883fbe29abba1bb7ba3ecc1cbab2000000000000000000000000000000000e24ef1e44029366ae1daf06524d8beacb2b99f60f419cc2ec1a49013b79fb7a4781dbd37785f32ec67c0a28d61a3cea2117f11d78dfead915a94f11fa7e904a96204ddf1835d3501639b83cd5f716f500000000000000000000000000000000067b6eda41cb8da47a424a02a142e2b98b9c69e7023cf616040993f41507798882194229cb6572806e82e9e5eb837b37000000000000000000000000000000000e38693cddf130d3645fd60ade780db84fa700e5bfb74ebea49cc95ab001bde442f363b4e4c61f683b3e67f1ec8c2af80000000000000000000000000000000006d593005cbccc55c5e336e19aded70da65a7fe42b6a85070e491a4ae54e18ac213556a91d5d62786b6d4d1305525a76000000000000000000000000000000000ff86216f5388114dc06deffa7b52a273b22fe0bc8d50804b491fac83e13915c2dd1b8c2779a46b5c313c4e1c05eb2979087caa1e89e48f05bad1d720477199410941a6105f911d589e1f94a851e0715000000000000000000000000000000000262cf4727703fb227bd7fce6cd3f25c1897011ab892e79fa47446711d6867ca82b9b95f129f7ca24dcb60ac75173d4700000000000000000000000000000000136b5a304807e029d0a77b2ed505ee5c920248242f0f95aa07e9bc2e13d35f6f67451d028dc19d26095b55cdc2fae4fc000000000000000000000000000000000b511b2e19da7bfeb183f0aec91bc7db3e7c913f1c282e12d5d2f422a49e7fa78a5f35656dc9c980324717a5ad386dc30000000000000000000000000000000012eae443aae59fdf907bcfe3ee4366e252bb57e268fd569d742456f348429f009f67bf92f9dadd401104ccd2549cecc8255603b470c056b3dfb3acae0dd45bcb3d014765a5181760336deeabff3f00be0000000000000000000000000000000016a827938d8b98e3446445ce23f48a7ba0d634de826dd1ee3c71467eb57bd4c24e0d1b4190f47bd841183baceaa2593e0000000000000000000000000000000011d360e0c18b45ace82eaee902475127d8f18aa4a2ec2081a453f1c85ffe3c59c0f7016f966574a7c51bc14f1935568400000000000000000000000000000000186b5d452c6dcc1ddb4f47b07e01b6d64644f6d01cba8498c3059cc494a68bd25eef35cae05885b9f2689683e65161410000000000000000000000000000000000ff826e5a62affbfd6d2062bd329fcb561f287046870b8be461767759cb0d5f1ac904ecd1f136c5ccd784bc11088233e0eab0e2486316956291feb44de6389b20f8bafe9cc890d86d27a598bab0f3c4000000000000000000000000000000001010e75c52ed0acebe30fc588961c849b7b6298bb8d859f9a9401737c467921c5e3cda101cd4e38e4318233d12b6c7b9000000000000000000000000000000001884db518fbe4d621403ce00521878c0d419d8cf476a1dfda59b7d3c7af2bd91058bbbf54ac0c5cf9a217beb78e3f98e0000000000000000000000000000000001272cf0ad917738bba052e88baf88347d60f63f5b875d604cf0531c1ba7d43e868bc70a682b7274067106f611f08ae60000000000000000000000000000000006e3236f6a66bd37af4be230d4edda6eaaed661f206ca4852d3004b5f358f184d80be6af81c62e5bc8c88e7a1072fe21fb9436456262e5149d02b33a1078e198bbb681699b3f485625784df444bfff670000000000000000000000000000000004fd1e2fd0d28db08224fa7e880abb8c48dfd0e488df4d2ae5f6649f448193acbe943baf22af4b12fd763e3e4ddaa08d0000000000000000000000000000000008df68f276f356ade28500eeae3b755c9af9b5acac5f5f60827b5b2044b2405129b00e5271baf9a80847d3b720026b3a0000000000000000000000000000000005e683d1556f513e6d093704405f312687c3b9e2de3b2840fff32e88186c89b18d1ac558d960b1196594730a9bc107480000000000000000000000000000000018161f8d23c394d10ba576fb0ceee530ebb95a670f2589d84c0646f693086ecb7ed80e556f3ed9434d7fa488430ccf430e2724d3501e3d79b85266fd83a2a6156eeb48e749a61676a1c92ab9bdd6b8990000000000000000000000000000000017860708943449c2227c0f50cf1274652dd32e999d5f9b1a8d672feedde15e9f1af484a7b9462a62dd745bb6d3c7295a00000000000000000000000000000000064f8cb707494f82ffb6374641817a466af65f5c7d83cc2964e6cb8efd021e0c40934a3ffbb0d91bf8a7a616dbe8d220000000000000000000000000000000000eb37cc9d56fa0dbf050b557aaeec76f9f6d0a6c448ea298af78004e41ecd8a1df8fe8640e77cb76b593ee17658326ff00000000000000000000000000000000092ab597967544fda640b145edcb3ae6c3f027c2111dbc282ebdd48eb93287ae4729cb30e45c1c8999b3a45b099dbf0ca49344fe6ea9274a103f323f3d9381e91ae48233dd579944e12afdeaf854000f00000000000000000000000000000000124fa4d48ffc5732fb21d465b559e995891fef98370a1eb73c9264988f75caa93fc134fde7f93c794582ba5cbf6bc685000000000000000000000000000000000b71d012abc1558e49831f053757518643ae04f79234fa92023db9c5483bbd872d24eb87a78960f12930094c4f8fb70e000000000000000000000000000000000651cf0016efea086d98e5bda8e1959e20e4947e302eeb021d196897cffde3e2c28f783521b2a28b8de1ad1a131f5e67000000000000000000000000000000000555ff8a930cc11d320afc3e0635a6f93da1487a5764d56636be4e5803d740a73d84666f6141ed5ee6b778a463823fbeb44aeaf3ba8b03e7ef7201415de7365365b828f2c1a38d09153e51432d35b9a7000000000000000000000000000000000974e769869719f0ee30895df837cff50d47382461c557abc4b8806b04776f401b76a5e630a6ccbd3484980d03ff58d300000000000000000000000000000000098157f0190e6bacbf34c20310f6471166750ea1b235e46a5fae313f90dddc799f21548088322910bb0fd7e41beb23450000000000000000000000000000000007f00d7d18719db9d91e2c32f51083b42c4fcb43c38087f86879ad6bc99600d4c395586187d26d041ff49dbbe517fca2000000000000000000000000000000000510cea4a7463bc5882d0cc25fa967a0b02072627bd57f9a5863fe5255953732846d4907fa301789bf02af9c1b25211c53961d33104649cbfccecc7eaf33b7a2a486c77dca363ffc9fbc9ce4e8c1adff000000000000000000000000000000000bf264c0b7bf68c595b89453ebbd7fe2e64f4ae2c7268ad51f4578c35d48040277f3dac9021997af02e492039348efaa00000000000000000000000000000000083a4fea41cb1e02e5002259f5f7b335c81e15cca93cbc884dc1b08ee981c55f2dd3c0db1a35ac9907435edd7f0ba625000000000000000000000000000000001468e508a02ed7b61f752ac38313345338d2b2d018f719f391c0f3fa1dd1602d9476f3d8829720d17021a459a2732e96000000000000000000000000000000000629edb2530c38ead8717b289c08036c12630cd8c9ae875111749ed893b8cbce40bcaeaf13df4044147bb665ecc2319ea04e97c20b42dc265271740f27f1a833bc5b324bcb843a8f9f8a68231c663d57000000000000000000000000000000001635830ebf227be126e13c634a84f3649d498e0999ad2dc73b9c7360db120dc2216addfe18c00676ed185efa1e789d8c000000000000000000000000000000000471e3cfca449bde0ba2b1e2a5b63d53badcb34da3251313190a35daf694d70ba385976d1f875242386fc74ae0173d18000000000000000000000000000000000986cf3f1eef587bcc70f66f25c60f353e6b15bd105fde9254487e9b522159658d0fc6b6a8a3ea38c27865f1ea4d76490000000000000000000000000000000015a2eccb9c10bc273cb712ee04bef01a11e486bc6a4d220a0f653582af6ba1bac0b5108250626ddf126f16f4015c9d2cb688426bbe9ae054acb6c1fdd4195f8a113727f5617642a5b3c0c65566e22527000000000000000000000000000000001213cbd035615f09189171b3e22630d72df2df93fa8c14427bb00c34f5b55bc8d1b1a59404bed6549b582537a397eaab00000000000000000000000000000000161072d8ebec2841f0f34cb38a3e1b2094a597640a34178ee951e5c993646ecfc3a4c0dd753e7e76f3a6da5a091f9f7100000000000000000000000000000000077e9c95b6c6f726902392c3a16b5cc71cd9d4cec58c00eadca6091e45bc095e53006ce8ac8827565e867531013821950000000000000000000000000000000018cdf909bd9f38e57ee24c0f51a5f9f703eb3d190dfbf75be00969e9e8f8fee331cf32d93c3a956d12f374f8752c2c79cf365a86a8d08db5cd95f239a2f3d22279556975ecc3baae0b774b0323dbb1b6000000000000000000000000000000000cbc27995eaeef2bef14919d48a008a0b0467856f8a6659d6e68e47a2d9d41d217c5913aa1d67911325dbd4fc38e36eb0000000000000000000000000000000010639740654bad5c4ec93f2496f4dc54a7642bc92ed03372ad4edc5fedcdfcf37158d3f02279d4e15078e9d5a7f8b5df000000000000000000000000000000000155ff4d6dfa031b0cc2f57df41c1e1b1c81bf5a5cc1e3aa93920e93c2e2e7a71b56ac410a87855400025badf6dae8e60000000000000000000000000000000018e637da048e7e84b9d1654113978fb148a54d86e1d011d7f5a86cd4f1e5bc15abc5b67d00129f53c0c021cf933f399c528715199c9f47fd6337b6b0e807e230b1397885fded024431c70e453f55f3650000000000000000000000000000000015d8f6e47b8f07b3e07ae0952a7c8f79519ce2828e3e26b284b8f2fae7432b337de17089b5c32f0081ec6c6916f2f53f0000000000000000000000000000000010ecfcdb02cff772db667266cb3f99f1dc28004ffcadca7a9c64b3b5853c09b7793ca0aadb155257bd64fa7bccb390450000000000000000000000000000000011096a52f3272955947304ba037e8b3fce6b2f07f2352c08d5932f4d2306ca511a74dc044d0f0e1e260ff40b0fac5e0e00000000000000000000000000000000130facbe0c1c6d077e9dcab647a44b049a1aba3df500bf27d1c268f71a59635e702c9ee1bdd68fbfcff7ae5b3e6bd83bc32e8643f38f8177b788b8c2bdc25b668308d914fce35c6f9023a769334a51d1", + "Expected": "000000000000000000000000000000000b47d58802579e662f34908a4060becd40434e4934ff58790df2a69a759223ca29f42e658ab475cb92bd9c46566811c7000000000000000000000000000000000091d3a4c58a669d3bf0377abfe28d1817168b2a86375928d95df3459c83334669a59aba95ab2b9957d5ded0bd8925910000000000000000000000000000000005aa9c3fe0067338675099ee32f93bc8a5e9ead94b120dfa391651da40cf1ef5ff79d193b0b14b5926f10660aca6c11500000000000000000000000000000000058200992b111461f4d737533301734a5c3731c9f2e7b55e18887ebff4d5b74dbbfd23773606f54cd6a930b85b89aabd", + "Name": "matter_g2_multiexp_84", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bc3eba5594666cec699a47fa13ee74722a80b4e5a1b28553de37c3163f2fdb8b801e35a19f6d99cd207d1642c0d4ad400000000000000000000000000000000104b334afeab36961824611f0fb58bcac55c9d36604ba73e9c8809085c019bd967cae7147c766df6565ddfcc0cd5fc9700000000000000000000000000000000026c3a6a4ace8638bf8ba7434b59c3aebd4bb274cbdcb898ec6a547b215f32d10395f3bb85a9eaecff5ef6d5ef2b50e000000000000000000000000000000000065bc419f9496b5e81ce72a13fc1bdce4738c2e3faacd80676be31db65ba3e7941ea75e370b6d6c0e7b2cdcce80a2fa14f8bfa3d47ed33a05fe3da738797f18ca5d5b8658055de5a9f85bafe6078f7fe000000000000000000000000000000000e7f1f5ead0f212439b4c47599581982712d2e6ba056f36cb04033ff5eebd81b5b41b874a78aeaa98562899418ab04c900000000000000000000000000000000095e45da9a4b2578cedd13af71e289d0067ecca1f09c014a294e0b250d1e8243ff98a9761030ac855a9d897cfe9fafdd00000000000000000000000000000000030b44b150d1337a3ed6a77f7b6332d7c8103da1aef0d445ff7467b4863e4c830fb782a81d01a6bf97e8d52bf333e78d0000000000000000000000000000000013bb76800375a45b847a96ef6edff3fc3c30e3d45bb4afe04230107f6a1802794e1dc23431797bc5e79e0d5ac6357eee4b0d302be94d437b8055586aa77ec1fe616e30552b4d7d3471ea219c148be069000000000000000000000000000000000602e0bd3d34415ddd517a73acaed5750dcfd68b633d51003edf79a169ad7a3ca2541d7a131c317c957a9597a753b5080000000000000000000000000000000007a964539081fff51e0ec24bb71257f6a1c513fb0047aad84b80180b22133246a1f62958ead75e4b2a68f973d17f1230000000000000000000000000000000000f48fe0f5b5a95e48bde4d8be1b2f352d748c1201b064bc88309a709b285f81260d4535d3e1dc7f1d6ee23ead35abd9f00000000000000000000000000000000135b480fc8a72248f7a4898fffc6c18b7f2f5b1af5cc3846610c299c8da252fb71190d9f761e037c6b47595bab6a03e56765d7f1079b142e513e604d577e7caf82cacae59fb98c6f8990522372dc906f0000000000000000000000000000000004773cd2884e52c2551c1ea0abb78fa17caacfffe13f18b75588484b8bfe781e623075bdf827fc82c6ed7e1d4d62081d0000000000000000000000000000000007e6023fc0e409bfc7d0b7ca65fa0e8d88bf1b4c202a8d1f0e1c3479b0963a646d16795fc5a128a54e624357050fed4000000000000000000000000000000000039f6eaaf99bcc9f4d8fb994a040af0d29c37960e9015d4e48466a9e554da30975c5534e76a1f08a55ed8ce7375b70100000000000000000000000000000000003d2b097d4afdde83a01cf2b4f9d12f77c8e92a8cadc225d40f974ccf385ae65bed1972a365d55e24231d58abed4395a2eeee02d9309af8c74c78e21836f4e6a7a6df5406617e2b4e9d300e37d8a2bfa00000000000000000000000000000000047b8c550310ae246e43b513d39e507f1dace7bcb543a49ae0854a397f62c408ae3632c94d172669ef3e013781796ecf000000000000000000000000000000001592914e260afaca80c0a240426c2828239ad5e256a707530f49cd65e9da2e4bb14a7d6d5978f52c04130a0d434cf4ca0000000000000000000000000000000006c0b8448ad87350db130373778d414deb738d3be97fba25c816826f59e3e926f44956c2e2056b7d769278cf56cf6fe0000000000000000000000000000000000a42d716fd83071bfa014a9b7af6c164d494f0347aed953bd2c1c97ade087a8bbea9f53c507fc0b22d520f28cc5d480cf8449caedd55f0a08825cc1a9e985201c8a7a54d1c4dd96f0ac54214743941810000000000000000000000000000000018026c9f6c86219d0be88955ce0afc3cb637b1c3a531aa2722c56816d368688181ef2fedf1525daec6d9b1651b71f27c000000000000000000000000000000000b40b15bb0621209bf9e33ebc27a7502d90fd3af62a1bb8f54a874a14c105df34ae34a43fc3805c1e4817ba30c048ac7000000000000000000000000000000000465262367e30ccc24632d39bf3af9cb160e97049d855176f665a185c138d5c529d11e53e56c65506e3e30be7b48c6730000000000000000000000000000000009485991319a311052d883b45911be12cf7648b5ca104ffe77594472f7047c803b8e9fb753b98645e630b9913bbc947e28ec5f9dc48931da70ba0cfa7251953e24c4c95cd019e00ac6fda095c1302a01000000000000000000000000000000000fcc0aca0d873cb8733ff7e2ea02b3736b737821af2db06ee6508e161f6159f9d944372c513a03cc4c9e30a707dca0930000000000000000000000000000000015c3774f4e0b30c9532beaa2f7f9b777f8d46bfd3888d6835f4a5a046153a98062efb17f78807fa17b3a995ce720c0b900000000000000000000000000000000083d48e01d2fb58244861a74a1261063f7d20b412c8a44f9945fbe373cb4b9a7ffd4c4ba4054ece0abddb6c14c013ceb00000000000000000000000000000000133c4976454b7be427c4c2ed437bc2e882854d2ddce42d2f97cd3fab1fcf60c3272aaa123a0cbecce1a774946bb7a8a0dc6046b43e6982f11f39412cbdef14f8e330d37fbe6dfa9ddf3656b86f4f60e7000000000000000000000000000000000f6ae7de1dba3b3030b208f61d182013231c4666f134b007b52d36bceb6f3cd77577be7b11abc097cf9618d351d61e270000000000000000000000000000000005803904e3e640e51900805f930638ddd8b86cc1bd50cbd32a142e10d85044cc52ff769bf1b40dcfb7269c913d00b01e000000000000000000000000000000000e6997b1f8bb649c56de5c4bf9968d19712abd22fb7dabee19e0aebd1b13adcd3e8b202975b4edc917d93adf087fb539000000000000000000000000000000000a32384fe03280962c5f575b47192e5ef3111fbbb0a01bda2db1e9733471f11eac0a37df8ae1a891de311770c482c06b0adf4625ec80149b7810767c985c2aa0187987b3649cab8c59a892404ff2aeb2000000000000000000000000000000000531fad86551ac6dee15fbd62cb13f38d8d5c89d23a031b9977f110efcf16501534757bc5b93f0250ff02d6cfdf2009a000000000000000000000000000000000e6d78343049a68514271fc785de053ed7f50a7774b87f264c42e03e6f8f86285477f8cc57ae066ef0fde237c8d1ddb30000000000000000000000000000000013e313484da4d6b85634c5306444bdbe45d7db823616d72821eb64a2bb5f352a4f7e4273fb6557039fa563ce1b091bea0000000000000000000000000000000009a40a984be66c3442fc8946cc42eca722187dd819be9ab34a9c3b4b0de7de3d5f126c175fe84c51a6f09e18623214f9345fd17367ecb06b29d764b22dc1e262ba1a339b6f0e0c77384245e3d41cda970000000000000000000000000000000008a76db551280cd43d4608e9fc629a021675bfdf9bc5a021546b92f3734acff1e97928850716b94d15b7dbcc4a1e0aee0000000000000000000000000000000000b2262872c268782e8f27ee8fefe0827d45131555e755c0a65a7c8b4185269bd621412b653348d7c1111d681f38d946000000000000000000000000000000000dabcf0f847045e01ef70ceaa32455f4c962e4657b840f97a1cff7cf5073cbf4ca8ea75a4887076f155e27e8d7406c95000000000000000000000000000000000a9c0ed94170eddfc485d9f1a770a8b493d4a59bd7156d6cd4b95b55bffa1b597ae9d6fbe529dc0833634d75906a4aba5ce5e62dd15958e6298cdf4a4e899e53644a48494d04fa6d1f73f2dbd645817c00000000000000000000000000000000170ac69c2bf9b48715f445524cab902b18ce6dea7b258481cc59986ae61c8fcb6708b1457be299a6e2f6f34dfd936fdb00000000000000000000000000000000107e855593b6f3bd2982a65167ecead47039065c9ae6e1bf963f81d441f0ebb411eec4b3ed1cff73044f68a4c114806a00000000000000000000000000000000063b470d158ebb4828e875c3dd0ca29a4fd2cd2af356233885a871cb5b77402090f29709c6d6a78f612c8ca4df2f4119000000000000000000000000000000000db75a60fa0b425b8cd2c955e21846ce3c407cb3f96c472cb412498143cc60212de0dfd0bf4de53ae3b345232180b4ad853396021d32530351deec5c266a65519471dce2087485781f33a1423755ef38000000000000000000000000000000000389e79154f627463a7966252deab10b5e809b0c2a9e90989c56d4076b834e2081ddae1c02a9e01b71d96b772766fc680000000000000000000000000000000009109473c7aa614334fde410951a69ac45967f7550890e01b05279b6dff394775dac51d583ae0aa82edda18ecc5e66240000000000000000000000000000000019dd51ec6783c1618a7f12298e38cc75d4fa32fc31438f67eb15419a2f0e9d4b5f70ea59b69e531c868475cada519569000000000000000000000000000000001121c7a6cbbb54d5e30a11a73c158237dedac46385aa15d93592a30fb64fcd94a674cc77afd21a611f704734337905596dfc62eb59bb84b3b6599bf3ce7af229096a8fd5925d4743a5ea386a26c9a6d000000000000000000000000000000000178670fb06f5eb8a4f182913f46f66147deb3f9f634d620ed55da2ccc88895e75f76f55b979e1ba3c3db29710050c7bd0000000000000000000000000000000011adec68ef139716ee081db7122e911ec5a6e1fd7f681a96a713dddc2b742b6e7cf7485b8f45e7ebdec8b1174c02eaf100000000000000000000000000000000089dac9a47cbdfead8536d6cfe8b94d316123bd92ddf30091e16711ff4651c4e2d8dcaf6c72bc159d7de9fd832c6f5be000000000000000000000000000000000c40b871930f0c6826a943a229112f8bf9a3b7d7e07139e1a7d99f97601b6ca8cf3638e0265743dd732cee17fadf996721d35ee6d29ee4816b91d1664b5957767b4b8066775b37c3b3d08729c949d6e5000000000000000000000000000000001040c4cd3c28a752295b115fd80c8ef0e538e1a3906e0d326e46585d633140bd6b8231f50d50c8e7a9018a625c4bdc530000000000000000000000000000000008b966d9433bfc3bede4ddb005cd0c256a168437c31b8ecc83e6fefa6f4b1f2bfd057c78f82bb76279b74a2f7de493b5000000000000000000000000000000000c0f75db7a17e4b712666b16c31b10bb935e7127eb9a0e59e35ec54814a9de9012210ff1862aef5f765d4f7f673c4962000000000000000000000000000000001015e63589a8b56aa643a79c5a433dcd8f4933a10edc9921bcaa7098af435f7879a40868e25d1ca6f7852800df29c2eb3d283067bac390f556891a531dfacfc4795358229bc9a651c0aa71d601bdd56d000000000000000000000000000000000fab22ab380043b01d312004057488ffc958168f8fe4d9c86af622030121e14a46c4308d711d5fa9a414b9ef75d51ba300000000000000000000000000000000047c738fe5272e695f421ed463ce0d6308e05c23b6bd0973df9b55ca96d89c0771a45d53b4d17f30d8cf08edbf94490c0000000000000000000000000000000017bcb3ed735e5a302f76002ae82f4ac74889fa0e966f0fb611fa6a6a09440bc923f447eb6aebe47eef917753b7427efe000000000000000000000000000000000b189d5b64578eb53ad850c826082265e506ab620a9ab9684cc2a53718f26befc35e9431af012306a6190f144a9632bf873724ba35e4e8b731db36f5067aeafd33f2e966977bd0962fd57cd5ccbfe87b00000000000000000000000000000000049fff545ac239696c995eacc560580a0328af07376f5ec819902e30d5e7e40d5fe07295c4ccf54d5c06134370373c1b000000000000000000000000000000000bff448d5ab544a8cae0cacd216a6b6d48f0abe1b4bc946d95c1a8c4ae44bf049c3b572675a5e20c1b4188fa27a867a70000000000000000000000000000000011dbc52baa00712f66def2fa8fc77bcb07431d3285774e2517dcca65e611f07aac265856cdef0c1637def44c382230fe00000000000000000000000000000000090af0898dd578123c65d1f818c3f33866e4acea19aeafbb31bd8da029ed1daa2d7ab3b22147eb32a09021f7a78fdf2acc5934c02b63797010cc8474e90fa5dc88d73dbe5f9be605bf335057fba47ea3", + "Expected": "000000000000000000000000000000000d52fcbe9f1776477a9d2149ca55e0651fe9d098a67209ce2e7d772d4901ff2c70be432b53dc94886651865a81ba8c620000000000000000000000000000000006b54871379e2be969f86c72cda9acab9bc99f73de987f17ab8b25c63c55ffa2cff61b87e8c30d9f712afb62a2b9cfcb0000000000000000000000000000000005652612b19c38650d1babd4772722ae2c560e2914f2e246725cea86dbe1275a981a592eb55077ee4b7c6090e84d2ed3000000000000000000000000000000000ee37a6d42ce69aa67cdcacb19efc230c6c34969a2e081ac77e8f9d45128a6e8fff923c7647a0f168fee18342bc6d845", + "Name": "matter_g2_multiexp_85", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f114e56d10dba7945d125fe1ab7871d9510771548d8388a2aec8a481de92572645b73631f9a60285c3eebcacb3bc0f5000000000000000000000000000000000667d3f31955df11e4e7896a1856fbd4e573f1cfc906b3953b5806a5d01dcdb96009d9f148156a3828e822435f722c5e000000000000000000000000000000000d7740ae776eb4766999f5671315c8965ccc84ff71757e361fbbb55babeefb96265c97df8892acdd6a9166641f656e62000000000000000000000000000000000166529d1a76ad784557384cb971728dba298baacc2f2a39ee36516bc7a761e9a7c29e385cf5784efb9f6e60e998b01e864a1ee754f6b0a86923e5501d54e6f47d7ab9e1483294ce98be13b7db52937100000000000000000000000000000000133e0b08430d9318d98bcf58b3d8f51c7b717fab56fe25f434bf521f830c7d4247d87d3df910490be2ad38adaa8eec26000000000000000000000000000000000e15afaee4f1ce6290ddfbc13cb887e540efc3fd8150dfbf3a5e7c759ccb8f334ba26953c7bbc43b5234b857159f6722000000000000000000000000000000000e4cc685524d42ea5e435afec7b3d7d025e93ea06407a28c246a39dee8ae77514a0bb2d5031f7367d658027299762bea0000000000000000000000000000000001b231237f7b0538d51adfa4ff92bf313507996cf5255f191875970ed4d946cffa8620b44045f4bcfd8f89baadd331fd93064d187f7d21b8b0a7092943de13b96c2e1ac9b578637a6e64331e2d40f53900000000000000000000000000000000084128f1848b2b244e4812eccba01287b9d07e85450459c8c42b01180bdd843058d9926f39e2fb5f610651a00233e31f000000000000000000000000000000000055ee70765f2cccac966dc08abd4bba0d004b379a2c6bf188f300f5d413f84e77ca1d462219bfb820d7f585b914a52f0000000000000000000000000000000002dd8f1d1cd85a5e6ac793f7e1e3cff887204aa4a5fed92f2088c06eae95842ab2c04d30d56f4b0fcfe61379e8e7c6940000000000000000000000000000000013e318f8b6f4165a8096c76ada440154901de42d69c38e66d9df4ffe5476666ecf7068e7163f29f04972682c43f3b0fd5e676b40c09f80be5d9398a9ec20cb811cf6819a130445203d792a4d34fc3e950000000000000000000000000000000003415c8bab713aa18d3f0d54e0101ba36793e6e9dd3471f8eed9a15e00d8312732a9ce88b5f0c30207aed92eb173ac680000000000000000000000000000000008a7e145e9576be8ba2fd980fb1735a2b73d1bf5f3e108878b721b6ed8378b5e0f03ecac179a6d148541096ba483b40200000000000000000000000000000000029e5554752db8bb87d58275268f24ccfcf3e0923744d57473d54a72e2cccb847eaa8f3bf638833a934c43930fbf30990000000000000000000000000000000000e0f2ead2697110a132c4ce1643b97fc652dd0660deadaa4e0c45e7ebfa64cb6a6fbbaac7c4e2b725beeadf6881ae5893f63a87972dd11f5239c35ce269e4b9239e3ae906ab117f1f045d3acfd16ca00000000000000000000000000000000014325fcc087aa108f152b42759cbc02cfa24e7e7cb995c78ccaa9a283ec2029c08cd747d599e0685d365ee99eeafca880000000000000000000000000000000011da603d3a1128329af19e596ebeaa4bad034c59581e9fa2e42a0260032f84654bf5ce22ee32c34eed7515d7fb0fade0000000000000000000000000000000000189cdb5b934cc1ec7ea0cf4b8158a1416712bb59c1650e6d244de33bebfffd3691b499b3ff8255b1b513deba709f7d3000000000000000000000000000000000e7ab2b279d0d5933df25d8fc4faeb8ca907e7bb8588e618b92737fcb6959380abc205118d2e3fc128b89a2ead5ca906145e3456d5ca6aa5910430e5a19567c327b757377aef98c4f46fe9a1f52cdc5e000000000000000000000000000000000895b6777e677732c74cfa82d5348c4c8ddd63ce10347836f5140b9a64dfe631804ea3be8e20bd4438f5e7fa14a121d80000000000000000000000000000000002422cc4781f007f732239ff9eedc126777d6ca0f0365dd90bab6b68c9e3d02ce726726a6d30d7d51a1f0b45aec1854100000000000000000000000000000000048af8a79663aefaff77a934f0af3a09ba02077c13a794ddb88e5c679ce348b3ab0fa217954ce1422f4e212d1383ebdc000000000000000000000000000000001190fec6c510b0b16e1505f737b25dc2401e9fc2c95bca92aa5d6e93b284b766bfed93a80b137e5fcb339983a86acd41ce27de5d3a5ef941d058a458f3ad2a386f1d66945789e51fa330fd65da4cd5080000000000000000000000000000000014fbf4d005f43563fb7408d1f20f672c8983120c66462ba9156b64a287e66960fecb41ca129b6b14466a5a0de91b81c50000000000000000000000000000000004fb283724950174d60f64af7bc8a7d059431332c8f17769df33f6607d72633aae3a8d595cb8d5af3f8909297844b3a0000000000000000000000000000000000e187476a19280ad9f33a55c50f37f765e343f92938e247ec9fe099c7f3df65e24af14885539bfcf3efe3bde9f2700ce000000000000000000000000000000000f086e6b9e845fe3b0c5100f82bc8aeaed166bed9fa4d34bc03ed86342a997101c508a4c096c4f67cb5791cc1a1fdb8187bf5c4624e86aaead712987f313e5db8f2fe6787fc33481ed6e5c4d3e96d5be0000000000000000000000000000000018dbe48c54347635d4b6bc17ff5ba390a73925f1b180d2c516eafc0936aa9bddaf7317cc0c211fb2a7f7bb096369a45d0000000000000000000000000000000015544c177a4b8018ed60c2639b43236957c2d995fb0f32523654584b0bf052e0930366a93406e1ec5c6d2edb955e811d000000000000000000000000000000000802d2cdbc5e15b25c77ded4bdba087f1d5760e6ebf9549a37f3314b1e88d3d6f58da9d8c6e9ef85028a271b83dd6242000000000000000000000000000000001577bfeaf213ca8b0983cb178e9634dd18f74baf02f6ca31b2e3b287d80a32d4cf11afc71df09ca5bb0bc8e60fc7ffa968cfa3fd0692c9ce56538bf70e77e2a47534d9472ac702c53f2dbe68217d53df0000000000000000000000000000000007c059044ce0c15bc527b19ce85cade8b1d5a9cc6dd304ce9a3c461e631e17c4feec52a0ab5cfab6a2270c75f73df86e00000000000000000000000000000000076344286cedc8c180e3bd762f12ac08f0ecc51293b9f9b8e7c0056ceba1bbb6fab4ee39cf559fdbd601db6c3d201199000000000000000000000000000000000bf6e708d0a4fd85c7566804e19f21f7a00bcc3bd7135f6639ad30aafef2ed1e72c84c8995b0e59738c2bf1e4040621b0000000000000000000000000000000018ff3d0ade15b690b6e306adaa5c10796b78ed7f8a984f637271cccfd39fd17c1e8288a11b051ca94de2a9bd04fa96d7a36b13ef742bfe88882a4e635b5fdbd9b079e1adf3423dd4962835c68c9617c500000000000000000000000000000000025cb808922f6deb0bed979b80a675d9324cf25c53de373534d771afd919a182af9aa1dc26a2d0284887121bf4d6b6470000000000000000000000000000000018970aa4f456c1b203817322df2e222516bce67ff9ace069599061c6229596e506c0286171f3551302e45b7d3b69a39f000000000000000000000000000000000a57d0da60f03fd4a5664546f9809c771ab6188aca5102c31f26b09950cadc26b0275417ddd9c4f4cf29794b739733cf0000000000000000000000000000000004ebf2bd93d7921d8bd97ee71cadf91145e064a33651da2604ed6fc8e08b1b8305005f12fd4e6b68b7b6a3b5cf123b1324c54daa7de8446e5a26cdbd6741cc90bfd26c544fdf221d47d509c978723c3b000000000000000000000000000000000c8ff29d0333e3f38fd8af91ecdca49e54ea5dced71b60d693b1bbade99ae668e4f994f7a5417a08a8ddafa410d437f300000000000000000000000000000000078ac1d0898a9e6cae29fe6b50e435e5f543d0ee233346728c46d659c4338295f27b42fc4b2851ad5035feab2bea8871000000000000000000000000000000000b3a566d2ef4467f21c27e4a3dec99a26c304b32ba1fcce8276a8518383a7de44de5b4011ba738dbb8761e67e36115560000000000000000000000000000000015a0aab8c3d51fc3fc8aa35dcd07f8a08188976883f9d3ccc87ee148525f2115ca46726a2e3c550167c169977b216d6217ff7a416011549f144a3a65238d62395f4f76afc09496902c064b27739c6d0a00000000000000000000000000000000115589e8e1440edcfe72c008f6e9cdf13fb7baaf70aee16166e7f32f4651db784f4c5cac15d91ee13001169fa777f0d00000000000000000000000000000000000f86710678b01c8f648bab2289e8f90648d9470cb13d5145ade526696d22508a4a59164290586c2c000dfc55b4a20350000000000000000000000000000000019b300961b40b0d9fe6e292e9357d04f0483ab3a8cc6f8f522153c51d22de8e96a812adf720d13ff7d05d1e68264638a000000000000000000000000000000000a80b61ab051ce413ec838167fce393f88c8a25f403bdf07cb60391fb15306a5271a7042d36f7c46b5978106a7b5293c4615de9bd7aebf1acedd9d40fddda34e4a85bc253c5e92c20d984f6c4cec533c000000000000000000000000000000000567c33d22805319418cb1ea7eca6205a6c44f1f881c03e37bf3c66a1baa5153473cc73b8c25d497b0b0057ceb0395960000000000000000000000000000000014d7a2bfeea6a746e709f6108eb32581ba38a617e4450b3567c77a992988d91f4da31b209286f8e9fd0d7b8628aa6c4e000000000000000000000000000000000ae6c9fbf0e06f2e38e91699cd21596ba90f92f6022a4f3c7c8a6557b7e1331283bd4d7a7d31d77d9d7cf70a2945ea1600000000000000000000000000000000066b8132c73e1da8ae7fec9169770a188b686f223fd0306441356040bc9070f34a47fe1bb8c94de9fd7606c18b1d2b1dd38f1a0417a5a366dd2d8f5ce229afb6f34c1b663ad6eb1d9ff12f38412f00f7000000000000000000000000000000001460040d0a19c37fb0736ebdac0324d8a38c94a73fc5f602b7ea5b7255be9d4b6ffc22fea5043d948420e9ae3476f56a000000000000000000000000000000000b37c0078ab8babcefa8874c6cd1c5184d713b976852d087ed84337073fab3054899859d0fac2f4351bb75ee0e534fa70000000000000000000000000000000004150f3b98e6166d9d6b0388342042dd8eff9b8e1239f479330b64c5b316f98fc7bb401b737efb87e1f6663ca4efa26700000000000000000000000000000000043e6131c1ff621fd6f8caf0939487a927550343e24425ada33cf622de757e6e75c9affff9f04373a954557181641617364da9c6b07aada98107447afbb189626180c5eef31f7f2cf26d5d76ab0c74590000000000000000000000000000000009fa1754bbc957d2a8317a2eed859457073571379cc7c6d65bc6a0b5829f8142db77654eb98a2bb0cfa5223a27d756cd000000000000000000000000000000000cfe8b8fbbff7507d3d74f4f550b4c85e19b8929d3728a462e12b4008c79014103153c69ed8dc6b743e1b6fb4720bad00000000000000000000000000000000017ca0c08c320c12502a1dbc841425694bde68b7806eddbb40702e58ed26c7e112f9a821a6c67afed174f51896ec2287300000000000000000000000000000000014d08df9cf825b07a387642ac9959e8cd15ea8e752231a3047fa30816acb1ecb79f1755484af9a98b993f50128c2bf5031aa8d860e3b598ad0c4e9f93f26d153f8a8d8d0dd614ba868ed055c517532f000000000000000000000000000000000273b64e867a9111e257c9b32484655e4d7e676ec50f174d9ebc9fc4262c037b176ada941dd8c1abf645e275dde04f4a0000000000000000000000000000000008a63b9604e96a5034d92e3790411f3112c2c7cdaa056f9f1bdfc0b164c37fc9f58dbb566337132cd1626f9ca2618f800000000000000000000000000000000006a661167c9fb6c26bfe0a3902f309fa683fd22729bfcb433756182e7e1a406bf44ae1d13ef0228534881daa339394e400000000000000000000000000000000193c6c5ec200d225c43c6e37cfd15e16e49b7d87e5515bb7b4c918903966f4f6ae0d42af6b98f6efdedc9b0301fa1c0f290c467c4827c9252b82ff523633ba116c52d15df9cd4e3121ff0e9f754ced5f", + "Expected": "000000000000000000000000000000001403c7e3059135ebcf5e752011fdfaf66e348135314f3f4239b066e1c6192ffcaf89bad4228fcc2be19a64f4f5386f5e000000000000000000000000000000000aadbd8d0e53d5b409f7fa508089337bcf36212a3f613b37a95757793dd6b0ca99d1b3578ad8020d46e29c9c4197ea070000000000000000000000000000000019e43bb32f92ed187fc32d9dbe24a486e38316a3cec0fd7f7c19b313af43a10fd63738b78e609e04a083de6761d53a90000000000000000000000000000000001490da7d36ff16304b27f6e57412975497e9f3a6d35cb162464bcf69fe141d34ae27a33afc75a2802eb120e90d4897bb", + "Name": "matter_g2_multiexp_86", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000038ee0c2c409d8832437ea450ed705589c82791b8319fd0ba6fb4d302d3c5b73ea0521a0253716e5810f03fca2e9dc720000000000000000000000000000000018c9d748aa685bf6e11e6e4b6ad2290ceff59c8837a088b41a08983fb2c5ef077adb0730b298c5df9aa02a820a19a4bd00000000000000000000000000000000015d248426e362ad2489c0c6a567d80b22d54d6a79e198198a771fae4c4e97eb317da9feba8eaafc9460ef45b1a5e5690000000000000000000000000000000005a2342412801cb37911a04d7ee3b1e5d3dce2a06e0658d59f2ddcaa9ba32804a1ddbe8f4d00f4436aad1346ed1ea5344aaa57782608de34c6334ce5039c67767f6da7b315dcfc772f03aaf3dd1e67b90000000000000000000000000000000019d49748f05458cb9b316e433b0d341e23bb5aaa724b824bd147596761c11efe8f4940eae09e302e563e14e96b814f4a0000000000000000000000000000000018011e7ee4988da168adbcf81cd14a9232edacc06bbfef0fc78dc0f96b5ac86ea67be8661442b5ef60e3889f3137182200000000000000000000000000000000175a2ae3bdade6551b23656c16884ba0fd4247df4ba7471cf81022d7e224b23490db153c8289f95467ddf9671f8b6cf90000000000000000000000000000000013c58c0f55c46bced98faf3865e3b6a836252f252e97b6d2a799b574dc569f09ce33082880a4d0c3b8a2c7c0d4c30eae22c1cde67b0e8ec7217c6ec72f36d8a1e73794297819de9ef6f1e52acbd3ec4a000000000000000000000000000000000ee45d5689a8ea6132d5ace000699a157c1cea3c0c98b38d504153d64fcaf1702ac7a1cb0889539d6b15489fef415aef000000000000000000000000000000000b320e0cdedbdc1fc5733488e6d2aece6386a030adc36b0a69dc3809827319947049f3861c2edc859797d30a3689322b00000000000000000000000000000000194096079b3a1d6ab1080dc71bf6d5734bc7b5e7f30bbb0f9b95c9495a6bc4adf76e198fc66accbbbaac215a8932d8c5000000000000000000000000000000000ec07be0cfa9b3d3a64c016471d9e6d25228b46dcaca6e197be00b9ca5087162c35f1d6326a3cf83f568cb06da8c5220895341f4363b688c4e9660fb0cd17f6c111a5c92e732205fab0d0da0175f6832000000000000000000000000000000000a7f3a3fcf2e7b0ada6d4fce179bdf229454002f1271a39d5e99daae72da549c6ccfc7c574f35bb9784100675c30b1120000000000000000000000000000000000fad14ab095fa09bea919ada313727e7aa5aa06a1cc7746d006e3eaf70f79c5e4001a8a8de03540b45e0598b22710e00000000000000000000000000000000015345ade62c5691690c181da09d8f39c1ead42046987b8c7c975d40690a286a816f8cca519731d0ca23349c54b30d8570000000000000000000000000000000019f0a32361bb6ecd8b1d87c2e15d31c0e0cf995eac9facd5eca123c0799c465f156b0142d98e0f315e9b3595974a7b824c5718fed7503c5e2a97fd6ab0294d6c42b1d35067e9d5ec1077176a4bd3126f0000000000000000000000000000000017af46e78904915e348734d2450fc6e1938bcf002989f855082e3b4ff3366d81ee8d28293609c3c3b11568668b1305f80000000000000000000000000000000018b0b3859763c2654fc00792a5193b7317fa5051bcfd15ea42be2fda0f43adf322219f34e54b2446ef73a4562151f9a70000000000000000000000000000000015c23509a1b324c649ff878d004ab5f253d041670ef172ec4dabec7a525d5ddb8f9f62f383e3f71b0e9c98532e247d560000000000000000000000000000000003a38564a55fdbe05b047281fa153f736edbf48c901749005473255333590f967171a6fc88751eaf57a5335bbfb6ebe86d055ad484f5054e8bd0d073cd556deba05418ef1235d08ecbf8717b550933fa00000000000000000000000000000000100322c4a92c136437714a6586c82a6842027ee218bf1fdfffaf95ce47c9c8b6c8f61115b092dff81ff2e645d0a7a4340000000000000000000000000000000013a91ed8629acb5e770683015c3c248255d673d4b2e6c96334d1c80326d1a8b4b655c81175e4a914a45fb37c1f178bd10000000000000000000000000000000019075c2eea3f64f42be82fdb8f83f2c68c08e858702a0225d869143c0b017b76a7a40d809116ffbdff6700b288f5ca3b000000000000000000000000000000000598ee9ba9d56400b59c7f5977aef1e179855a37179fbfe97b95f19137b6034568e5c7f616943b4aca804272955d42334cccbb062c27a67ae2783ab65a47ce166330cfced1f11b85f87483e0250b138400000000000000000000000000000000025a526b137aaab5ac1b5f8179a18b06feb7c905b4a843cd55e31b7464c2b6d432b569e9bfc3222511c18255102aba5b00000000000000000000000000000000090c20c9f78a242e52daa339d5cc1c3f35aff7ab802a3e4366597db8b6ca43d30fa0fe8d9484e49fa4fd0bf5509f19e6000000000000000000000000000000000e928b2173e32e5fc9c373a2a6f126e1a3a472c01a5e87677be0d29907022b9a7dbec3340cfc89e67377ce472c2d5d4c00000000000000000000000000000000147b4eaa2dcee39b918b7cdf24483b29466120677e5d42b51353a9b2fa207bd911d9b391142a13a212d0ab38adcbe10796111cb1181f048f51349aa2953bba2af50f7b7b5d2328d435bd63a7df5cfe5c00000000000000000000000000000000007790cde9ff8af2d7597d33909f00963eafa228817de1ebf4233ef0831202700b99641318186aec80ac913a1b1143eb0000000000000000000000000000000009d42ea1386d8b019dcd26068ab156f399c35b7d492722a20da0c915f7abe44ba688d9486f4bbb44268542c5a49168930000000000000000000000000000000010611f233bc1c4af0a14e1d1b945c91c077ec3dda592e2f852e2de41e09331664e1a92f9a0b7416c50327bc943a17b9e00000000000000000000000000000000048614243262dd070a754f40652b96a03326fc51273dddabed85df0654890ff38e0da7abb8190e4ebefdd6f78a5fec509d7f0c0c7e927bed3fb930fe2d0109f58678969ac8e14fabdf4ccdd0823f706d0000000000000000000000000000000008451d24fdc873c61db44e57372d43c35a2a8098255f9aad3a6b244913b86bff6444042e391685b1244f009c5ccde935000000000000000000000000000000001177c2da9972a2b96afaf866f97dc149482fbaaa93e194803c09c8334c2c7025e08cad4f7898959a57b07a545ecf76ad0000000000000000000000000000000016f40426cbd1f0f4ca5ae1dfa4c3960a6fbd51a1b5b24ff5d03fb9911e908406a0ecf4f20a78a280d24dc9bdd1c0799b00000000000000000000000000000000194a8c55f549da1842cc3173f3eb7bfd70df26b43a3059a3590992e34fb19b2caac4149f64d442965e166225b9013e2b11ce517fad2609f2ab8d44ae6263623a7903b2cbec683570949a96fad78fc6d3000000000000000000000000000000000a97664c1d7624cae0e969c728a84130fe260581305435ff8ec701cdc51a73977f58c891ecee637eb6b7c972069ebbb80000000000000000000000000000000003f4ed6a9e9f4229f0fb35394bbc10da9adbf4985d4453da64eb312ec88cb15bdc189a3b5df1af3107a36fc001ec92ad000000000000000000000000000000000ac552c5f6170a70563fcdca8e0c6a7c6135af2f9d5ae6f60a2c459d1be4cf76ebcdf9bcd891db8a1e2fc905a23a97b4000000000000000000000000000000001734a46c99e776d1ed4b807f5b313562e0989ad5c67dbcb961c134f8b7b7601c23308839569dc224bdf7c370c4498303b17d28cbcb9efde6d9cdc4c9cda385ce598ac8468d4fc94cc8e98ca3bfadf440000000000000000000000000000000000a523182c886671435ccc75cbc78293274802c6142465acb31a1809e43b1d656ed9c808068de167b1ab126ed0f73a4490000000000000000000000000000000007c4616080b5a002fea3589d54c7510884a3ece705d27dee315851746b1ee748e8a08d3516d8c6afe1c0482b960a9c62000000000000000000000000000000000dd1bd9b4b9c140aeb97887a0266bfb5696813fea034b78bb7d0cf1cca15b5bb0ed92a97841c8d8cc614f7721b8b7e040000000000000000000000000000000012a41a8941b6f0e4c87f8188718f9bc75305d41d6f4441eb9682473340fce0bbb463e1b922d3af8daea32b8a8ac9c3b4a9516e93416bc7b0f3c5ef5da6112abb73fc285a14093ed19d8eddf241169119000000000000000000000000000000001763ab2b361681955735ae00b69f26e06469391af993c8dc6f2e1dffb52ca01e49d58d6e2249e7433ccfb5ddaf8fead40000000000000000000000000000000003858f3bb01b2393aa4d4d7889bdeb0bb9bcde0dcb9b39c4ffe0fcd0b865baaff75b676c715be275929ff4303c416e0800000000000000000000000000000000086d64bd1302b0b3a620b87ac29cac3d9e606513ec8b47898cd852bf552c1364291aaa842616b92c8936e076e59451bd000000000000000000000000000000000967c9f59c15ed02c9b2da6e76fb0bf3d445ba849010afb7f9c994b1ef6a05ad577570d4adad043796eb90e51537ce5187fed462636eb57506f870ed1c8f66e211758327f4c19bf909a6419312c58945000000000000000000000000000000000e6b0da7b406bcac2dbb90fbf430fda6442cc2860ce633ab84404dfbb426949d55ecd72992da1a2e8e1ce229b599232c000000000000000000000000000000000fbe3a345ffc8fb85cedc4b8dedf9d952c41b4ff6f1c7ff4cf91b2276621969d905aa9aae5fc89bc516f96b9bd1bb3c10000000000000000000000000000000018c2a7fcc35099c41bb851ff66abb047e2af9cf4fa9fc45f030124ea2c7efd26e594abbfc7a7f258c8081a3a80d15105000000000000000000000000000000000a27cd33c2121c9c542e27b52a13275ef7e81dc0c6ece883b65e71d2bc3e7246f95aef7c6b41eace382a1400568cf298c373d64034c78482d6673c6906553151887c8aa28ab2930659671b8cb98a595700000000000000000000000000000000158bd8e6198d22b52efb7f3b945668666e1190a4a8e70307ba5c1b737316a8f8568092f219f683c0f53f56f25745d4e600000000000000000000000000000000097e64e4553371c81a9bf553ddd9719f59b329284eca0d76f023d603c29a034d123ab777cf173c5f2bbc66412d69d4ce000000000000000000000000000000001298cd5501e136a06ad4fcf87a75c0c7b96c73e844863b74bf6aa581a0ea98c2b1f608c668743a3e37ad5ca2074af9340000000000000000000000000000000017ff9f1336d7f2152f17daddde9d3e1679cab8120ed2c0288b0908d4e2099a08c9bc6f79425f004ea3ac4d684abff6dcf29c901f9769a42610958a8cd53eaacd9e5c4656106fab536052518b4989911700000000000000000000000000000000115baaab8f0331894da531ab557bb454e2003010ba1dc1d96e3d983d49b1312585c6d4c43d85dc074b23b2fb28c8a1d6000000000000000000000000000000000db1621b721c8a54ece26a355b190af5f3e1dc1b43e0827a1912ace651cbad4b980e77a4c3566aa809157229b234c808000000000000000000000000000000000c594e0ed3f7ee55886e251deef9732aea3de11f094ec53907a843b755add8fa5d00779a66621e615ba7772ee821c4030000000000000000000000000000000004e80aeff6c4b85188903b4d2dcac4f94f7cb4285a38f94b0becb556d83dce8735d1db5810b409d45a8dd1b9a6dde29c125c12599e84b7e648aab52cd68fcca7f1a5f56c854f3c36e0445ab7e2df2b740000000000000000000000000000000000371a74468ce2ad90e19b7fe3f57159dffb1b0422b32ad693b2fe6c45c5d371b97a90054095da887019d25c1ee8197800000000000000000000000000000000010575e1ec9a3e609ca086ef8bca679c4548482d9e0da2e51878158ac8e5b29d824c31ad7ff642041e748efc50c2514e000000000000000000000000000000000ef36130380f1e84b2f462b5f970abb8535431b79813015261015c6d7e74f038b47504de01794840d93fbbb4b386e17500000000000000000000000000000000018419e85fc2d75f007d1e0e02c1975332e03d42c3b41c50c3538c3625e702161cdcf8913babd2995aea7566ff15abf2bb9a1d051e33a617c25e17b7ca8ae6b02f16c759cae0df7fbd403372eb2407f6", + "Expected": "00000000000000000000000000000000125406a942ae0119575453beb4c093d2696d3bea7bc031d7a586439197f848e1d5a82b925b4e96138a3460eecf198ffa000000000000000000000000000000000befcee6bd1412c54674a3d519dd2813b87b18f2ab3375a731197e9f539f8f8fff634f15647e7fea3c65b93594343c2000000000000000000000000000000000011e4d432ee6babd502a9cbbb5cf4839dc6da6176b6bb0ba51d99a3587465f5f3f83f4d4cf2c7e6187de93b859ca61d800000000000000000000000000000000168509010b867aa198fc294a5879ce14a51503c1d0e8fbc02ec08cf62afbd357ceac24b633bd0fa99f83dda92e10724b", + "Name": "matter_g2_multiexp_87", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000070a0d060c6e9bad0d1bb15417578daaa8b7a5c984c4947dba10fd874d93fd1e3994337c87799d78a674087678d9168f00000000000000000000000000000000128985b69d5d6ea0ad0b19eba7c2b430f5242a7e89626c66fb83b58ca7cb65a479de4b2fca6886cf55b8cfb52394102a000000000000000000000000000000000bb0bced708571662af042d18956b5b7d797b61aba70823618682287deebe69bf1f9a94ca4059e0570e25a39e60b9a8b00000000000000000000000000000000193f0793324dc78c40f356dde030b632feeb1609a1bd75ce88f0d313a0864dbf1f5e92826870866ab9b3c98cd1c12aa508c35887835bf4497d673936f40ed44145c5d5009fae16eb0f3ee9168831abf7000000000000000000000000000000000a61a310f90a5ffde617b78f784b2e699cd77e7c3e7c483a2ccb768f94d68e59a2a4521410c22ef6f21ba589ec3abdcc000000000000000000000000000000000e6568c83e0f7e459b27a28e5bf954983c5dee478a009c244da16041e710ddc67479cdb3da6f47e7203fedb8f765b2490000000000000000000000000000000001c5cf6b948b85a1c426fe932cd87605f1fbf6c932756eb1bfb43beaf012bec4612d8dd0840efd4cba3f5394beb65112000000000000000000000000000000000e02d5bc20c40d7cc2165a21ab37c6e4eb71322c01a43f2085f93b5b02bcabcd668dab90323db0f9288737d757997631a0154f7f8d52319c9e5cd59052e91b84640efe83ac814d95370e46aff4334cf400000000000000000000000000000000165287d72eca1ecda5fe16a555245b0a34a04beaf9177466bfd88bbc675442d206e70f7a2063b6ed0e15e9406232f5ea0000000000000000000000000000000004c0608bd7e01e65a15716b0c505111a3abb0abac3efb846e05e8db59c063950dcee052f04d1c4e9e492bc6740fafe6d000000000000000000000000000000000de897f7ebaf9089f7e198ee41e1efd7d84fbec7327799b9293a489965cd36159442eb0dc1f79f6b1f122f592b013bb30000000000000000000000000000000009774586dc359e5d20486f00dcea6ff93948c5a8b74058645d1048fe46ae3330dd56d85204d328f43f15e674020f353ec252ac28ea29b5459cd2ae5bce4bf08a102280c093b9962cafb481016a212709000000000000000000000000000000000438ee51a560aa419ad6ae45e1014c38b7c43f1f6a512bccc2d4f10a35838369b71799fab4b6a754fd938c1a1b874fc0000000000000000000000000000000000c1491c85965c0b74d08f5866ca727fd30bf641a6ada0ab8363ff01916c37d10b1b7eccff79b396c587d9beca2c826c0000000000000000000000000000000001452f254ceae9626443265ba31a1a750a425f2a7789e69cde16b70eb319c744a6221e74a9e2881c6bafea161d29638df0000000000000000000000000000000011bd6a1bbded174e9cb95d74492f7b07a755339a6c40f2a1a76debccc0f3a32c7017ca4e6679fb2c038c751f19986f526d3bb5ee3410dfad575b0fbe71ac5df2048f74b52e777fe0955d6e244d434f3b00000000000000000000000000000000139157c34aaf70cbfaa82be655281b085e37d6406df4cf8e291b221394e91d9e3cf04d431f15436064d0bfc8cbe13701000000000000000000000000000000000353fcf6e587e71e59d8f05d4085961d37b1f62694dd5c7f40efb5875b90459dd66c4d2d6c01a40834307ae9e82c2e08000000000000000000000000000000000a4975c9872fd167d0ff4cc80a6ce179b1e6e1eb21c8de80321451b1deffe68d8a13db26218f14935b64af25d63644c10000000000000000000000000000000001e8a2824f21cda745a24844ac0336994fb18e30608ac61201a932c0a5a58f1acd56cbd9353bfab4944efcf2859ad5915c30684c596976bf46384e6afb2bad6f821c4a62338d7a6eb204ed75070b1973000000000000000000000000000000000537d7a9d7d9dc451cba4d50630caed32e182cbbd95212577b8c2855c327530e447a4f3d73c7d63fa3ad5111254c9ed90000000000000000000000000000000006984b32955fac4ad3c0d181c81b98534ebaddc316d51a40baa1028bacd6a93a20d4bd6cad6a0f8cf7ade96bcd4d68dd000000000000000000000000000000000720c392a663884ad4d8daeb7279ac41717ea602108c76519da13a45a77d2acafee842828f5ccfcd786bf7ea88afd01600000000000000000000000000000000081f1d3e37ebaacc11671bfe1670ed65ece2aee0e3b5d746a8d618b44bd4b7dea905eb8e958bc026a092b2bd5a7b87cb11009058bb8e23b0a4294b5cae63aff10265e729d3601d85dd7f1e8063ce260a00000000000000000000000000000000005af33731879a574f39dca99c5c1b9517eda13121221be77a0c1bac82fbf29b37889c15a9d32531a3f6bf9137ce82dc000000000000000000000000000000000c62939f00d70a07a85804cd97fd34b9764565bdba225cdd7549729ceb9735bf4d09a80ec3055c483e1e24b66c41e403000000000000000000000000000000000e415677988c9d4656e59f77c608926c83028f91bf4c0634120b5f774ba07180b98141ffdf727cf9d0fc7a4cb52f4393000000000000000000000000000000000c9c37eaca857151a0c4a49b079f2f061e6a8ebb77e11eb32b29227529562f8dc8e2646e25469491eec5a07b11943f203e5489447bb9a5b661bcff2d9a4153a5aad975abdec380301b6d4ce019bf2cdf00000000000000000000000000000000015113f8f9100cd18427ff48038e1070fd835fce6c0812b7bafa679ac733c80bef56492ec3ca08c1117bd0edf19cb26f000000000000000000000000000000000789cd90c0be1de5d0b359c030d4b9d8aef93951e26870e37c375b9e7879cf277971a05babd319a3a6ac53f00f3254e40000000000000000000000000000000019b1cb91c9a1b1ee49c3837339778806bf0c093f171c92c9931ad43e35fc61cc08dafaf55b7b9e0f49dac28a12bcf92d00000000000000000000000000000000066c7864631333226f191e313436453e59f48f91d42e68874fa4da45eeda1f6f7f6342204e64e124d5ecd861f02ef4f00444d520ee01d87407747a4ac37abb7bd4e4c4f1735ca7458cc2e4dcb1d6297c00000000000000000000000000000000129d887d694be0ef2f84c343a9aebd0a2aaf19a4e78586470351ffaf0b1309593363bd9c6e7fe39a6e59445d935414ef000000000000000000000000000000000596d7061c2399b6a9be7d4d495e58c0377b18db1e45cf3eb431d10cb8b15ae42548a86a26086d57b1a71cb5857d7917000000000000000000000000000000000cce7181fc87dfe1bb493043279a5d93cb2d980eed38dab2ace8c9fb335c2890447434d80df6e7c95729933ada7b9d8f000000000000000000000000000000000f0e1274ff70bc6d3f1d0d5b251ae528ed94aa3a1b9bbdb260892bfaa6213892071b8a6407abe26105b2f81df90569492035cab8f8120ea8e91389707a290db4ee69875d7429c6857e74e8bd40dc7360000000000000000000000000000000001192050735b114c19eb2bb9aa01f04d1fd9bed4df877113a14f7fbc9c31acc10db3ed0e0d15d8433e7408bc237c985b9000000000000000000000000000000000a8a66cda780790311b56836fe69479c7b94dbc6c82ed5886887dbb539a40390ebb2683c04078ed105e639a2ed8732a1000000000000000000000000000000001678ddff677b99011c73e0c9875b5b2ba063170f4d565d261b4c6d3263ccce0334b5bbb7ee08692568037fa96782e48b000000000000000000000000000000000ae15f79ad7f790f8ceaf7709f4b5da71642da0c1f7c442eeaeb165c7dacd8a4892fdfc8447a03a7c56e12513499e43c4bec711286827f0941ffbb451a8eba871239341a60e3aaef23487175c9d2e8260000000000000000000000000000000007fcb5ea5358074d06b64c5f46454e682dd9ac2127374c83f3ac5ad46bc5fd2fff7c5a80ffc669a1c159ee8c9a01bd37000000000000000000000000000000001010ada1bd493d6282ac2d3582480f50074a02fdf412c63e93c5857974626ff464150c20bdf23a87692bfe69a075eeb300000000000000000000000000000000086bb5664a8738f02af5517aec4c6db47653a6d76bd4b5e37ba4d8b27a7819e82e6a4c7ba4f8377e06a5878e7c0bffbc000000000000000000000000000000000be1463ab76e468e47e1711c158dc9bb10d1278f5cc676cff937f60ba457061bacdad7b8d3286f40219963b147cce4bd369d91a4d575d4c142b98a53115a792ec50a290608ad316465487762e83f3a86000000000000000000000000000000000c3329d1e1c76b0bcc7ca3766b2cc5ec8169690f45e0ea3e37b7173bfd6c884921c7523ff25391a85b47d5de395ca63b00000000000000000000000000000000081ff066c008d5a4c893a636d24e9752c6a06666dcbf80082167610e73a32d70aae3e58c88ffaa27f05260b86b11f72a000000000000000000000000000000001178e88c652d257888cda1c0b65ee2c0636184194fef9e6ae3791a85417c43a31fe75893773ff3e7b4d4cda9eafa8de40000000000000000000000000000000019657ec4604ab5e8812237a28e5ff320a0d728c60c541142ffd87fec2c703665638e5eebc33e308d5582cd043d08d788ee472561535a7710db521976cef0c92a4ed89861ecb397cbcfafa477756e8e120000000000000000000000000000000010789200f69d8acc70f108145804b62b521a30a04176c449f52bedff5975ad7b273aaf4a32f8461ced8e92b2229e2cef000000000000000000000000000000001178c36174cdb783b5b09d419ae4a154512bf9ce07368521d1576b2f1bf39f98be29bf533bad16ba9d96aae621612aa70000000000000000000000000000000002580f2115d1814667b6178b6bffca6a4d992eb66e9601c0d21e32a5f3b69e3f85e1205c877b2dc2696a0e872c5bbc6c0000000000000000000000000000000002c94d7ff016d57bd5f589971344c6499577bc2234e18e6c8dfd7d27a205442a4236ac54fe279d1bbca76467530140b42cfdcb8240f183abec526344e8ceca6a007c35b757928803f854225d3a6ca36100000000000000000000000000000000108b6fef7396ef71b46339d421726f83b08320599d66da18234011720d2b524d24075a255d2771f1ae904958c50a9046000000000000000000000000000000000723d5045b65c0887da1bb01d874714ac86d21441119a93a1d5758957215f399f5ef1cbc00558db01b295bf0cc988cab000000000000000000000000000000000994914a3df9d3094dab0c0c41a45315dce5968a99e6171fc609ac9e50bee5ccac771efaa04067467e95709bd924973f000000000000000000000000000000000ac746602f804f52e9a485c30412adf92eb9af3f6daa8f23b974339a0ffa6f5aa1b70a80a9f19cde2a69a4b7251ecf5d60659743dc1977a698371cc302b7579b6d7d13632a31b47df369365fb02aff790000000000000000000000000000000000a2ffeaff148dc5f70fcf53e7e8d7b6100cd6e7df5b3fa4aa33bced243f15b4f77f48d25f74366a693404b6ed7d3075000000000000000000000000000000000f3e1b34ac8fde4caedf3d8c3e24db02de3f91487db300f09c779e7e4e96ae55229288abd946abcc3a8adaf18a0c89e000000000000000000000000000000000166a68c5191dd7f9d44eade2ef1a9b522dc062bba9c55e2ff03aef400e5d2765a12816b4ba51e10bc21e06113c8ddc5100000000000000000000000000000000109c00de20f7e827375c1841348e684fdb248fad116e9643dbda8be2bd06b71db264e9f2c40dec2092e7d518540a6d82652a5d4fdf6d6703c857fc7b10a741b95fbce91fe823d827cc7203be3b3bce0a0000000000000000000000000000000014ddb61173359514226c150a3343576b04fb1b06fabd8fe2f921fb3b90baf5513447c107f6d2f96c8b03274bfe451dca0000000000000000000000000000000001d1064860f6c4d62a282147308e80ceb0c5dd62f39b3232a231b1b287e497df31cbc5a3905a7687eb2f24447e50a395000000000000000000000000000000000859611bb3962955f92bff861e03d07bab7fe1f69e90c6bc7928be8d1758c9194ff7a52b16472d04564607b742543eaf0000000000000000000000000000000008a3e8396901a205a071aad06ba9812207171f33775eb358de4232826a5f0ff50ec3e137b1344b583849e8a5b424b46676a30abda185e7d280804952fc0c074ad907fea2aa54da4c3190895270169b20", + "Expected": "0000000000000000000000000000000008c9db83241e7f3ae6c2eac8fdcff5f2d35318e24c3b4130e9bb7048a3b84a52fa3f222a8190121d2a5b8835bf911bb200000000000000000000000000000000002db79cbcbabf41bd8c715e024f4687bc0d058d76b8dbe58ffdb80918212ab6e9b35256fde583c0fe903c34a4c41ba70000000000000000000000000000000019f37d05f5c9e65c6f004e1aef03ff0e1899f0739c9cc4e9038e18f9d45678388454d144495b2cd993eb3691bf3e96f5000000000000000000000000000000000d8e0d7715ed71291729bf480f5fee7ae04264015732677488472bedc0dbacf8b35eef7adcce196e3bba9cac0991be81", + "Name": "matter_g2_multiexp_88", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000064a134260b753af73df3764ab662e3b1bd624c8f3248e9bcf7676d8fb0825ab85ea33387d4641c81fb8ba3757e0870a000000000000000000000000000000000d67eff1936a395cd3f808ed7fc89f8b6a227c4849a6941d4bf762af6e41ae41c8114aeccc2565ba01fd902df530df1e000000000000000000000000000000000110ca2339832e7a9468844b94b3ced0c9216654bef1c8a5cf66385a99d5d452f978bbb7fe15fb477f56753488fc909b00000000000000000000000000000000173210b548d1b98b926539049996713f53108cd2911105235c1d5258360d5620d330951db67219ffaa304a67fd6219f39f4db766964c7855daea58d1205fe8da572aef06e0ca64912cec7c87bcb2f51f000000000000000000000000000000000f7c3795ac3d511f93a3d85e65261e4c09cd316787f74ced6e472a3993b7b5b0ce5a7c91d99559a8e0791f712cb4e1700000000000000000000000000000000018eacb2c5fa9221881c6311256a69c7616748deb3235c61cc11412860450151a25e3d6a220bb23e0b3e3325044fba68300000000000000000000000000000000121827286873ad31f58cb3889fd01cb7d0f91ff1c241295f6ef2dd0e8aa8638b63a7e6061efc2e7ca1d3579b4868f0460000000000000000000000000000000003a57315175d70880b2b53c67d61831ab066b08d7ac68637364ab1c1f3efad96d42a3cf5189c45012c1f73a1b97bdb4c1deebc727d98bdec47b5a1fc48916dca1e42345ff5474a5fd6cab0ae99e9f10800000000000000000000000000000000180648e5d0bf727101417f515cb9578bdde3e9f6c4176d516454ea7c32c1712610cc8bbed303bd1afd48f580ec11b77c000000000000000000000000000000000d6ffa9b85d69b67abb77f5c8bd776eae82d1cb055d2dcdea31ac66b1825014ec7f7a2aea320ef9f6897c9aac8c0706900000000000000000000000000000000073214fedbade28cc60ecfa4e1fe2fbc05f3d71528aca315312d50214f680956bb9e0fc12783843b00b3f4f0f52efe2700000000000000000000000000000000128f87e7da7b53f28944aeb26ef0f6c99d84038af51a1d242501ec84b5a6a8593ef1a0f6b523478d9fa12e36c2fdbe694b964d74259c216c1eccd7f2b52ffa5fcf151d47bd69bd2768e6466b32eb4fe50000000000000000000000000000000001443980d7450af1e19949fb328776cb7238a9b26240cddc565aa9d52c5592083b1533e8103dc07eac80e4bd830f209f000000000000000000000000000000000afdbea7f1cec534c03d3269d50017372f7ccbcba9f096fdb2754af4d6b4956decbab2b0afb69f97a03beeb20b4ccc31000000000000000000000000000000000a83dfa3197dc65097601457a97d0df7710e001e90657b150e289515609f13997b454167a7589ef218893309460139f300000000000000000000000000000000029c362244510c342358130f877de947acad5a379295f3149d5c713274316e06a169501f889e4b9cbf86f10b9521c1bb124ceb1dbc8004a4b1f8b422d394b0480bca7c0f38aafd8f06ba090a98a1d3c60000000000000000000000000000000010a83f13a185c70ca3f724dd84efcfa3ec463d7c05360056f8b5304864b20025b0a82c9d542ba08b645e2334f176472d000000000000000000000000000000000848a6a18bcf64d083e118190805d68f7ffea8b5a66e0807b9cd3733d31ffa5cc25dbfa6ada604646dcd8dfa622e08a30000000000000000000000000000000009962205c0ba43e5101fc3d5353f429a57a97bcb84baa0942a7e7facdfb0d032b9307aed8bd2ac9094a2e5b1460db7140000000000000000000000000000000019b1012661a10d31a4a73d0cb31f7eec0e7be729a42baf560c1e90a9124fe8d5fe31ecbb6d4954dba7d943a7af773eaa5a2bf15b2ed08b33056a0733c920741f86730dcda9c06aa0e3c135a844cef916000000000000000000000000000000000e7f02c1d2ceae60f314f51374b338c329f2eaa82553c3fc1643c7f1910ca24e277f3d658f552a47f780d4d9e0ac5e030000000000000000000000000000000014b6b56afc4afed5199191ec13dbeedd797f14ed493c25658a9658f031ac8d43de12e6a8c4b1671c9e5ef78da1a55e2600000000000000000000000000000000194d8a50618ff55ba3fa5602d41cbbeadc01a348ad1484c5e9aee5fb7241fcd9018f436e3c6c6dc64beaa241513a6c8300000000000000000000000000000000052681eac4bd59e160b67ebb27582a6d3ad5286d652787a0e160026607acfbfc5b9f38b9b171375079d052cb242b87fe8c3c919f31d72ab414f91938089430bbbeaa53ad7a73224fd3f204b80fa1ab87000000000000000000000000000000000d96ce83d917204e674ad9f5e5728651f5f23df25236b0fe769be48adf482ed8c36ad9c9abb6efa3719bd35324bd700800000000000000000000000000000000107f55ab0e5b60dbcc0632c345a9e93818014d7657b264031709275744e1c6722ec63aa209e655878a57704ca6cb3bc10000000000000000000000000000000018d97fba324431fa28b8845d94f62fc9eacc0253134b923908f06889d375405b51610ac21a75bdfb27e3533dd4debc22000000000000000000000000000000001667856804a5471238ffd64bf3bf266ce3a2351ebc68265674bc86ce6faa8dd50a3dfa00c647fb4265951b3a9607ab99f749063165c6db0eb038cb9f1a573de25bf377e1fee94f31df5987f7b2450aff000000000000000000000000000000000fde2fd0349e7a47a9b6858014d551aea569ef9802629bd9520e303ef0487c9d2d399682ac16ce6fa03adb6f4b478fa5000000000000000000000000000000001858ae58920dd0abd8ad94d2f9f946c53e050fe89c61f62fccad37e17f8723a4fbecb6b1be1e3cb853f045d0dca8e53e00000000000000000000000000000000093615a7f9d12e92c90706a47abe9620c4db41e95e42e478949745d6b73e021422e40b969e9e34263778c8a4d4907445000000000000000000000000000000001006ae7963b1e1c4d8c2c85175aca958758fb380019825b09ca3f728b5356254ae4fc670aa29812320b921b48a069df622d292cbcb836843acdd5a3fb404024174cd5c1cef632d1b9b6a73f2c5f705a3000000000000000000000000000000000ac407b75ea77789748e7607b5d6edb1d891875aeef2802715ddc393818fc8cbe82cde9f96377e3ac60107ddcda7e6610000000000000000000000000000000006e63e49356c38b816736d1d7c360ceaaba875c53c98ec68cb825962531855dc6410a125b914b0ad99f6f4327f5450890000000000000000000000000000000018ffb4ac95b8ffde112c8bdbf07a1c97b1d30a42dd4a97c82617698617ceb169e8702437ff6082a2ae387b462cd86256000000000000000000000000000000000497c4b3788c4d6c9b4cd8b3d3569ac4b4332b2f76c5f03f112e089bb79d33152b2469f7ad3eadb8b954775aab73f47de816dd1bfe025685f2eff0856f9c162d73a58fdeae0dfbeb5ce076e9f9ec1a700000000000000000000000000000000003e16f2f5a2fe15fa02b6217aed7dc688dd2670c09c02791cafeccfceb7d99ce826bccf213f6a7c6064687519f9283de00000000000000000000000000000000095e6638ac74815dc451b3ec85a6a8cc18643b541e8be99052ff6dad39c971f2e8bee976ab2ed5e1cdacf92816249ded000000000000000000000000000000000f2703c08b1d707fb6de215de80b53ffbf2ac48f3dd059d2a952b1031189248fad27beec5c8591ac93625a08e3420f0200000000000000000000000000000000024ae36412ba6f2fdeb0777b892f1ed7bab0527879d93f7b71b62f437f5c1ad1f04a5a7380ae5990a455f11870c7208304f117d41a011d36f55d0cb53d4f98de3b1a6cb55dc8a76b29d393bc21826ea0000000000000000000000000000000000f7ab1908c6d4b152835f950b604b55fdda7eb55c6b90c05e98626ba7cd014683bd3e219fd0d5983e9dcfaaa5d389e560000000000000000000000000000000010b285c2884dbdd540d6dfeca704e00839337f12d2267f6a3fc731fa0f724cde19e268782b4b9c2e11ec3aef9a72a6ed0000000000000000000000000000000014a40cc55570e8f45369bd9dc622e05f03989bce6a98a0d87f4fa7add67eee3e2ad9a297615dde05e64203e86153ec230000000000000000000000000000000007f2b6a092adc595e4857e821579801301396321d4a20bccb3296a031d74a62bd79ea4ea094d2e545943138d2fc930fb6b6f5ee0549b28a1bb317cb020ae0e031dbc381075772ff582718fa49db486d200000000000000000000000000000000108834a685455dc0be10aaf54607a06100673140b012ef23a16d3df204a81dd8505d62ca3e0278a2581abc59e0fbc421000000000000000000000000000000000bca7130de9896e8d6858022f24308af7ca66fb4c91f38b30f717c5491996ef4cdb01f4d38a730f9ba9ca5af5ad1de7700000000000000000000000000000000007d60ded107a06114afaf741dc8826f9e14bac6014eba26089c4e31a73b0f30c4b6e22533ac0db7e73621cecf753590000000000000000000000000000000000b538213a703f7a0bbcffb4aa8ce25ba2a538bf599d3c0251f5e8acddfd596c9912d4cf9a1bd8d3ec070713328ca992205edf9812adf95c9844b2da06f75d96e742c0620d1cb0d47dfd9b68d0bb76128000000000000000000000000000000000cdf0b9bc829cd8537918d665e5bf344d309678d01ee80c71a6d6efb45ee8a7beca35bb5ee046e0a3fac76e1771520ff00000000000000000000000000000000014e5be9dca2f8ee4da18e5ec9c4caa891dd78acc47f553af584308c72988435b85ad21b14abf8421bdb9e25164d568f000000000000000000000000000000000accdde22a1c479e47a17b8da6f1d2b7f780ac278c68a68090e5402977d897bd734f5af8164118d613f480c1f65e5d8e00000000000000000000000000000000029614458afdf6b572bea02a0af987d178c43650ca1c80a297b1d31e259aabd3e2a2c8e4b2c044466924dd6e5e3483e6f64a71e4e7652860038df67c99d97b1e5a063370e65217531253419bf2e6365b0000000000000000000000000000000004e45cc43d4d10ed878e18df156062c799a687b8e6beedad9fa6f66ad855cd053af6918e234ff9a43561da7e67f3dee10000000000000000000000000000000009c9ae47a76c199c93c38e7213c8d6c030cfca709714c703839b9ae9b65207e83486f9c8c16373e2b37756f3fd4355fd0000000000000000000000000000000001594ce9c2e229491b22317452938115747515ce62a0d49f4dd12667f5b3e7b541b3775c9b1363cc185a539b9f7596330000000000000000000000000000000016bf68e05e32168c69ad67331d7bc88a6d130fe8aed3e42eddfeb1d92add266eb69487b246a3ca961ea6ac0a35f8da78059bebd962501b8381b67c22055ba01667d916932713d7ca427cd80d8f76b41900000000000000000000000000000000080d165c57354f87008eb97610d4a596f180e48ed3190779591a0f7e07278f8d2fa6cd21d1b10e6347f11bd9731fdfed0000000000000000000000000000000008d5a1e66ec76743ca366be80fd1cbd5efc9112dbcfa84ce6c44e8df03140ca5f07d4bafc6c6ce5f2f190ede55fe8718000000000000000000000000000000000d0e1d2e5ef384a4fb314fdce54ab7895f895b3bc669acffd48e92c6320024d4f371f42071fceea550c8cf68615b00960000000000000000000000000000000010beae4ffbb68cf6e5d0683dc0629411ee14563f84788d50b1c8755b0b06092cc0f0ef7b55a39d51945b5178e374f8e047b3448b9b404e184f7ff20466aef3dbd4e08375673ca31fdb303c88243fface00000000000000000000000000000000161486d422462460923bd98834f0cc270982087697747fe40eb9153a7923d48eda191e4e7a75964f18f1df9365901a360000000000000000000000000000000017ab168a4ec81c8db4a74d529670fe6332b3870004f696f3a143cd1a62abd747d94afac9485e5dc19b0f4262dd379c990000000000000000000000000000000001e9cc85f03039ea53253f0fa2420012171fe39ed8696ddfbed57b80b73476171e59631388d75fe43aafde52aa14a64100000000000000000000000000000000109a5d5449002f4bdca44c0bd141175d5ca1cee449302f0314fcb5f282f022a7a3cef77f4e9fb515107e797726ff51d767d9d30b38b252a0661c12dc69127ac380f3f756144801633e99bc2ffa2f463c", + "Expected": "000000000000000000000000000000000aaa5de171664fcb45439b17a024806ff7e07d02294e0592ca74752a5b66f3365d1b49d6893b3bac3b8b0d10d026e48d000000000000000000000000000000000418354ce1820ecf848321a07ce22117303e5a15169a9cbfd141fb4797de8871d84d577e86270a9cbfe31c088ceed0250000000000000000000000000000000016884caa03ea641e0660a790975d77c5bb03568f873800d0559b69e3e0afcc10ddf031bb5c25c46f136f0791bbd3cc8f0000000000000000000000000000000002bdf659df76cbaaec030448e8f4bbd6b424037a8dfd7c4b8ccaa2224b0852c168f49c6f45c04f23abc85b8df21953ce", + "Name": "matter_g2_multiexp_89", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000062bad6816308f1c8c6941980caf71929a4006083dd29827902ffc92ebd9b14f1ef662f3a0125b1e74dabd039f9106400000000000000000000000000000000118e4ae76e2c321a5b89eb19b58f58f44e80dcbc7bd6d619579da40e1156aab32fe81df8eeb1bd047f96d65aed8b3b6a000000000000000000000000000000000c8c93e1beeb4efe52a96e5d5612338721e3e487c13c18b02475f9ccd8fafc2c95101aed291951f2031bee5216dba26f0000000000000000000000000000000016fba44e9aa39a12ae27e3c36de1f14e3f37ffb0ceaf5fed2a0d9815eab02c5aae91b254812a8f3a2e3654cec01a341caaea75e63204e177d404898aa51555767f813c3f3ed283405ed1ee829b04c85c0000000000000000000000000000000013716488daf8586719c52fcec80d35f17d4c595b66c7f2138244f3c8cea69b819778bfb50e49ca1d092e57c51674fca00000000000000000000000000000000019cee25c4731bf48602ceab23b5fc4f764993443e3622107b4c33b29c23d1b5916380431b7ecd94a0ce99811fe6dadba000000000000000000000000000000000562b28b245b7c1ee531a320fa0f4e12d7c171c7e3932ffda6cfebb123fa7f5993e5ed5e7b7d295405e5031b339994bf00000000000000000000000000000000180c4a8158a26d34123c870bc694382352a8e4de712b650d3e45e6baa16d6950ec15d3a4e032c1d1ae8fea18faa6f3d8db48a90ddcd791e6a9debfabcb1c71c88e7ad98f9e739ee752b381b28d7656f20000000000000000000000000000000008472d40e0505d6b8b92500e8e9711112048611fcdcca2377481ae86a7f6da1571f179183301e2194a42dac3873a3ba5000000000000000000000000000000000e2c5b61c050a8a12298f76b5f15383e72b90b001fa26889b67a24bb374b63c1e00979b05450e44ed63e72042af6d46e000000000000000000000000000000000e8723eace9c7a72b3e6097afc9bcadde61462e2ee03fcd5ad1b1c0dcf39f437f80530c2a1c5e6ecdaac14e8715f02e30000000000000000000000000000000002e21e0f451d035a5257fb09e9ed17b27f0994e6d85ddaf8d33153628adb194c97db17656351c029be4d3125bd29dc22ad1795823d3834496b0a1c2c07431f9d76071db77834005fa1228393ad4ce3f40000000000000000000000000000000000dce49634595869d7858e95a301bcff8112eb73dca8a22042137456d6d4887998a541489ff09f8e006176e6beee4e300000000000000000000000000000000010835f7336dc49e62706da4ef21d8e3173629b16742c317c1b397d4f17ced40a56520ea63557d7ac7f251568f4eb3a220000000000000000000000000000000017446ebe659a4510a362ee3b406b636bea8f381503e51ac21031c7cc92acd23046d62c2f32cda01b680c0f107142ae7d0000000000000000000000000000000006ef82deabd8983ebe4255d8e06f4a1b3585c057b2a1ca3c3e1cf04b582b65792e9980e3a1735a8ad58b053b16ca03d036d56e38fe63e573b02203be04ef9e1a044e1754eb2db50c6f9804abc4a40f46000000000000000000000000000000000cd8e7422ee179a0499178c3848cc4fbc87fc25c8c882f036a03cd9d3f273f7f2bf71bd3c9cf5e30c42b1ee6e90b36fb0000000000000000000000000000000005005a471d77a35e922b6d6a45b13a90947c2b31d8e7a2e4b6388265b039ce23ed958495dbf904186bef60fd547b941c0000000000000000000000000000000006c337380065eb8a5f63cb20fc61a9eec4ccf0e23c4e0f231a5bc4d765271b9c5697bbde692b4828ae22ea12423ad932000000000000000000000000000000000f7a0080cbe72a6e6473f66ed729f58683a80815a1748e52f7b67a6bf2846b7df8e7dd8599f87fe63706e9823bfe00d21a6b36f4674ab19202037d59fd8e14369e5d3d71acc3c76985b813d81ca6e24a000000000000000000000000000000000c94834474ac91547546d7d179b2091e33c8812c1b582ff186e69b63011177283a74b549aa342a7f3882ee82ad8ecc03000000000000000000000000000000000d72c4308e9ae695acedb9413445bf6a40d59ca78bd4f74ddbc1bcd8508cfb521bfcca99c98dad8022d3d1ccdd98bca9000000000000000000000000000000001487d006830d00d84a567c5d031019035443fae4791a05253f91249b32a4b3e7b3ce7eae885b8caeaea411a90b3445e0000000000000000000000000000000000d94f17aa100503f605732a48e4f55c394a8df1421a3d7c78bc85f4cb7a53744eadcf76e1620fc54204b123d6071cd3bad85286877fa7e5a9a61dba9df5ce35083beca7c2f5ecad13d226fa32b9720e900000000000000000000000000000000101cfa8d9c7522277f2bb4bae6c09e8b93a876c749c91c61784feeb105be61c2479375abdaa81deafc2fe754ed6cd9da00000000000000000000000000000000089ebbdd489ff670a70218f5aaca78d4e7ade483c7f20de4a84d39217be8f560fbf7bbe36f3f8b8361ba16d17ce609d200000000000000000000000000000000094f094372b2315fabc219099200e7b9e2f3a2f6fef2ede6f83c82f44792da03aaad06b8cd06dc3f140746bee2a45706000000000000000000000000000000000cde6cf9a3a7018b2b1c0c26b5850820080c7e4b56e615d577a78565431c93de78348d2851d5ad9f120ddaa9ff3da31b8fa5387c5712832b52c9c72e10c6f69e9c1c5b278aa379140e75e404c4f50a2c00000000000000000000000000000000059bb8e5dc5f0cd31cf674ea78b80b67b8a8a753e51284a2ab37d3f29459250d904e70ed00481b73556970a7f5424e5900000000000000000000000000000000043c6a53c413bfa2f4bb14ef296afd97ce801a37fe63d11a842f8d66160794c1a651d70f4c836af2c73cb1bc58c706460000000000000000000000000000000003e7b67da1513656f7b08fc5a77682477349ac57e53687c82b6d98772b5f929a2b06b0c7e14481d522aa94fa3a6e1cde00000000000000000000000000000000109e07928216eaea36fbb20a38711e73fdc26e18a6967b54f308b10116a5c8af0c8411406ef6ab1050b61c23bb746b0a3023298162ebe7f4ae6aee45a8a6ba602c3942a8bd6b35636fc6b85596a582e000000000000000000000000000000000166f26d3d26cd48e498578900a8c830ce9b80f162c4b430749651b945d9f60ae6a26306ad7711a1f9d3428946074912d00000000000000000000000000000000165f1bc59c9c36d12754097ea83e9a63fb4ae5d1b93a1b9239a6f338cddf4a9b30415d58076852288c6a467ce9b6b9eb00000000000000000000000000000000198e73619cb93fa6a2bc700cd400519d11a7d3d6d945ffac9754a6faf37da8596b49b7a3a4f2cd899ec9c84f1e79b7ed000000000000000000000000000000000a4740820d60034d37bb85e3e622783852779d36d6e61f81a7eabcd094993dd7d81900277550bb4299d550d2805466aa8ff2430d2f82c6d5e7424836ecea15af0ba2d0bd6498e65c65b6cd281a7b8f28000000000000000000000000000000001714857b0ee07b94ea928ff57aae9fe003c0c85d8564456955d14fc8d4ae14a7c9bc303983af3e2999c6db2d000ea51d0000000000000000000000000000000016512cb60aa372cf5098ad514291d8168ed31bd755861dbd9ef020252c01379d343a9c058839cdec8d14f2fb9da0db80000000000000000000000000000000000af74d8ac711b6590e7041e80ca40dd4db659e42b950bdd68c56d676de654c1a47867bfe6483dfe1971eb7c1d1a70bd10000000000000000000000000000000019e56ca1ef3fffa9e131fc5bc93100577b062cf9b2acd234c79e5e54aa799a389f30002b4bd683edec5fb100f1800d66415eea22058493dbf6ac248fd2ad8b4734ebe33761f2177089a3feda396001c00000000000000000000000000000000019d1d1e1e2dd4ab86df81a8246c902a573d1fd1598050663342e411a1d1b3c8849473c689afcc8e0ce5e51a9dc9c3b6200000000000000000000000000000000190d7c923bdd6336fe3e0509563b2eb6067354d8807f66e6052e97d5997464b9f07f29f3022f78779a5c4ac155a703ce00000000000000000000000000000000128591bb699c18a7b9e6e4e894654853f6a68233dfe8c744b42e057711b8d0efb3a98bab6aaa40ae7675d9200a8427d600000000000000000000000000000000045e0560e0936b16d1e055d3d3f4e0fb42d129546abddebeb78e871d1442f4796d939929d354b0326b95e50fd5208fa9ff79e3ef5d32a751b713180be37d44ae55c59c5a8121c132c5098ff972d8a97400000000000000000000000000000000092373dfd7d4375d6bcffa415e5b36a31499e881a80be32400105a6d56b34d64f4fed09f12640a43289a710f034b71e6000000000000000000000000000000000fa75d6510b3b58a32635a7a6cb4b9255aa7af46905cafc893f29b7866e12565765bcde498dbe87df3d1dd53ab5628320000000000000000000000000000000010dfd3456cb6a8bc853b390380a13f045ab43abd289fd05e7f98839477dea1fb1fbe38ca4f5bdd6691446ac0219e453000000000000000000000000000000000112567397f3fda84db6042817a99aeccd0c46a11fd3ba44e2600deafaaab7014dba98cdcadf81b97272fb7f275ee8a4e039bc7274a3ab172285d853d368da0950203a48ef61b3c7564644762279c1ff30000000000000000000000000000000007b397f093e69874d2bd3592489d93c80d0191b157e71d08a6ebe73063f77e7c5e084a24b34da2aa6354b1815a694185000000000000000000000000000000000fcede3a39dd5f905d072dafdb6f56d85726f6f362f91f079fcd47a8c1d3bdcf199d64edf17e3db1dfc96a3e59f69bfe0000000000000000000000000000000010cfa13c84e750d8af8bbb88bd6d16adf3bc7b532447c2e6accb359a5576be08c1b25f336047fb8e01a4d7f9080d0392000000000000000000000000000000000ca0e88b5c2035bcd3a65e8bf1aa219cf428b6f80617040ae02a0ed41559804844df373ac61a85899bec83e5a6243ed42c47d0b1fd24c1c66a3cb0deb7d51ea19f0fc492f637ed5d4d03e102cbdd055500000000000000000000000000000000021f3b793680e0e3127fa53034e9fcf286f5279cd167ac1e8ba051c440aa265ec6d28fcc2f6d3bad126180efd4503fe900000000000000000000000000000000182b429f27996ee070ed27e7015bd70191b814bd02ca6558a9be81d6898161aa525197c1672ae75da92729f2fae9fa3c000000000000000000000000000000000a20b3922e07da4ef6696de85754eabf1f58f7f5d37accb6cde4f62066e789bc64bc8ad6ac827b8c955acc858b03d053000000000000000000000000000000000814faebd3b60fa1a8fb86b3cb57d36b9c85d4b28e97a2251e6bc1fed1ccb18f17664321f38f3723cf8b09a2161c6aeaab4aca860ae4bc20d33808533c9a70108b153bc4b2256003ad4bbc11dc92898500000000000000000000000000000000159f9d329f929a65e41c7a0d4c05e11db61ca7d6d82f8b92a780bac66568694656f4c845a730861fde9a313fa49bdf0e000000000000000000000000000000000d556bdc8dc959b00f74209dff27023c5521d387a40bf20ae2a98f3f55318eddd347bf1e9d856f43a4b5fcd26c3567ad0000000000000000000000000000000009b4b0cedf477ef1e0f99627bdd7a7afeb9e29afbac553a516fab479913b23a9be5e0b38994215a9e23849bb664201ee0000000000000000000000000000000010899f4dc55ac5d1f56a7b8d55ce7f6a5e0a8647bf1ef6e9050f00c5fcac9f679f138018b9aa611be73d3bdc0af2056e297500a2747f9a68b2d8d9ca5b0390369d919897c53d422cb76c5a283c38669e000000000000000000000000000000000226c8a6b27437972ce29c2ed7e5cca4b6691e3a5dbbe713b5d309ff2f4cbb95e8f1571314444d65ff5fbc3281f9354f000000000000000000000000000000000282a49d0c560d873676967700c1062013a2d4beee96a09af7e14436fda4e3d2a32ab8ee4e591decec39a811ddff130400000000000000000000000000000000167bfe499f1f4609e67134e12ad91aadc37bdabd0055ecf7f96162c39a02a86e62a7b3d39f514f63edd82d04beb1958a00000000000000000000000000000000191673ea5470e4704e361f5ead1c56371d6aee3035d92d9e1b96fd119c4f877cde6451411e441fb45aa9fcb90fe4c66ba87ca4cf226c212c80f3db5e4e781ad7391fb73b1124d01cf893169d1c50ca99", + "Expected": "000000000000000000000000000000001488532d83fddf0bfd69b32f965790b3fe4cd9f64e8d17e78189c346518c91e69db2f0b742cdd5804b3db3777dd931230000000000000000000000000000000016205c470c6371d73b012a14d519bf214ff10de458605097da1b798977bd938727c5be19a10f4f492f301d2ab6c38ed000000000000000000000000000000000142cc08f61d3c9bd4c7bfd0b7a0b8693af6120898fcaff49a7fb5abdaf1d15bf70eb033d6ff09a75995547e6856c595f00000000000000000000000000000000164b2807e19135ca3b66bac9aceb371165c930ae063f3cb5a06efb8985a1e0c39023d8f01df517713796083e8c2cceb7", + "Name": "matter_g2_multiexp_90", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000023bec14deefcc20a90e439bc16912e90191dc7142234b1870e4e8d70c56f695d5cd30a68930ff9b007bdcae8ca90d870000000000000000000000000000000000053a6e226f3bd82150e08ec3690f36616d5ab745b36a9990baac7ad3429a41bc60c7f7000ceda4cc9298b10043639e000000000000000000000000000000000b81b331589ac332093928faa60d6819d3b5559d32d37d2cc13c78aafa1cc34e32d317695c1c4b4979baa1865ced90150000000000000000000000000000000010dbac5e52f9a046ab88aa36b3c5f6952720e174bf8f1732e886e66e5803aab63642185aa24ea08c991edaf8375bcadd9abfe7e05e8a210604355a77f64386a01323407d9f25397769cc6dd141bc6643000000000000000000000000000000001875ef3f90df03d49ce6cede2c791b4d8503b75acff2dcb1c7c88026394dfe11481da72de4ff58ee9a98e75577b6398c000000000000000000000000000000000c8ee603d1404e64ea3ff08c70b3dbffd318736ae95f9a96ca07ddaa449818e6c5a17b2970f572f53c90be893e5c323b000000000000000000000000000000000f31af63c68481f527092b261d29d5c2daa95873b68899c28ac7753d95a64f455ebabedfe6e72246e494cc5fa2a9bd040000000000000000000000000000000009fd06bc51d4dc51de9fad6d1eb763809cdb5ccdba8e0427859d878904bdf295983b318f311856728078e7cbbecb0c5b64be08e7c2fd15ac0116ca941b85615c6deb38fe85e2c0fd22997e394b8a67690000000000000000000000000000000003ce75ecf6b605ce73f4e215b1aad4799f91e624daf0deae3a273968490bdbdbd0250686ee91a1c24c2e2f2b6024fa49000000000000000000000000000000000e4d9b65d71b7593310fb5145677d170663c0ca29636f7b7c50ec1988bd2d2f1c41d542d4cd8fa23fad94bd6a84aef5b000000000000000000000000000000000fa4accea53a6362651f6c6ad2a68d20b5f549f8eb961718e0c14cd05249a121e442a6a588eafc83d6a43d8baa66882400000000000000000000000000000000121e325406767852620ddc45677495fe3e0851fd3c70922896a3e92033347d2fe8d07f4db8f26b8127ec39d619d596030c391dff1c0c303c77b2a1fff24f50250dc793338f7d7f8f1d54bf7d87ab37da0000000000000000000000000000000003a0ac3ac37932b71672b9c48bdbd368d64c11f57ccb952f633bcd10ec19134c65fb2cbad655d773a90cbec2d9232b3b0000000000000000000000000000000007553c470bd8f38a48490dadea29df81ad901ecaaf1eab35b1f497bb58acce77b883e03e78702930dda72e2277139a2b00000000000000000000000000000000044973913824b3326b72e62ccbabd8c9f1b5dc81b423d0dca37b6f33972d993a681c326730717036bc6f0286da9177430000000000000000000000000000000017b0407d2864cfb39dbb0a5fa8deb4ed4a690a4042153e829f51c56bd0f2953a440d8305a318e6d6f67970d473753021a2d728e013e5fc3e1ca24c105a0c268cbb4f152a97e318f3aae33186ea6bc93a000000000000000000000000000000000b7478dda7053590ed013b7c23431a21626e748c3843e2332bde0bd3890ecea95b6104bac420a8be5f3dd9b075203616000000000000000000000000000000000e6dea641181cf796f62b196652f952ee2a26ba998cce1cfe9d65ae49198d10badffa561e2bd818eb2a7f350c122fa820000000000000000000000000000000003c79917ad5a9c7f046b34e5491ed015695aecb00760f3009dde4cfbf88ad1c03e44117fcb6cdbd5ecaa8df8760a3da100000000000000000000000000000000034e22ddbdeb9dea46c71ca2144ffcc8356c1a525c5ada69a6d5e5c1786aaaf0cf532e31a2f78371e04a72e8222ed4c7e8da0c8da19dc441f53c54551579fec5d820ce2e3599824b24b7c5bf1847c5890000000000000000000000000000000017964112272360a38d3bddf89da922ab50be076bf71a094fc8afde109d3817cc2db633e6408f5716b76d70e30ae00c0d0000000000000000000000000000000009bed28bbf43846ab97b92aab9ce094b077bbc59db648dbb469f21842058ef20318a1a8c18045b3de555bd8c76132ff0000000000000000000000000000000001297110789c7aecb0fec577f6f4a4de14608d9aa26a8de68289adea7f6b53b766b840d315152ea346f8c10b2d2729e730000000000000000000000000000000002b551c6a7846b96c6895e55ec435397af70eb435dc1c562ac71a44c36936c2c6d3e6a1e3545513516513391aedaf9ca76e90965adfc2fe52e4341895e6b6154fd7a097e052b59e4935c8267a6f0e63800000000000000000000000000000000003d463ee4d177d78849fdecba52b7e83ca90d54177ed39e82b4e80c17994a6a2bfd9c46edc0ddb256f8955428f30eca0000000000000000000000000000000011dd976dfeb8ecb7d7f5cd10c235131709fb16d8a827e83d7084266c2504cd1f5276ae3333bc7fbb4ebab48c0d97a9930000000000000000000000000000000005fd19477fffc246f5991603b48085d95256b273631bcfc16f19c6980a3ba01ac098061faa149b475bfce37d586464b800000000000000000000000000000000103ac3dd682aee109dd7fbf60b50c28cf7e37642f05b424773a06f6cfaf7e9fb01d5074ade97ef6cb0ace2e1fe07d54c7f3f352c7b7a9e2eb6c87edfc99e2df3148966760168f6abb13ee482f223a01d0000000000000000000000000000000003208ce7f51a96dee053cbaa66fbdb921c2c3b42ead78b39b4f1df7ab49f05cb88d0f4ac18de5839749416eba5535d4b0000000000000000000000000000000001ff7f9db52aaa0fddc8e96a67b99353b92d7032f59d200bf69da3b446d08435d2ddaeb93584d3b68a1934566187922b0000000000000000000000000000000005f05ccfa5704652cecfb42979c538823fb9d11a00222a963d00f1a4b9a040a0222dcf45baad40c6574d85e5617dbbea0000000000000000000000000000000018637b8c3ef111f6ad4538464c250d780e7f081802bdf720f4c925154f4667c5d50cdbc4dbb7d0b2747b97d2ba2280bfd35c4286f19a9fe8117e37132ce4ce76e28afee25ecca2f66de3cd5e1c83235f000000000000000000000000000000000eb400becfa5521b824a4288885fe46642c31576238e94f95e9b4bcbf62845ee9d9ee122f87d36fbe668f0e605fa2ce00000000000000000000000000000000003c8cbdeea0d09590e1719ddffa0a116723f0fe85585583f3f271ead66fbc2107873181915cc41eed3ec6e2c5669e9d3000000000000000000000000000000000e61c0768561517405952c6462f1c5df95be272251d8a7060624b62f9be310cef64436eb2c4c04e8352d7b75fea1756200000000000000000000000000000000036cd74a8efa8a1fce7587f07d5c2a6c4b7ef161b0faae037c9bbe63bd0c92b83e514c8c1bae4a5d9866c0889b1b914f3c2b40b7968a39fe8e4f24acc25b6c727887c3c44cc89cf62eb14a78ae47e8680000000000000000000000000000000013019d0fc8b93da2c79e473d713d94af33eaffda65a7a49d0cbae9f5259b8323e6f29b83da9608ba7d6ec004fb0710eb000000000000000000000000000000001505d30bf8f7c51994d896d91e8e2259782e2b49bda834015477f18c29e64da4d31f8b96edd080267b77a9539afca06a000000000000000000000000000000000eba929531615d9c0f59c4b33c1fc34b81e9c77cd8c6887099d850b3e39326d7caee1feeb101222f22bea1e9853d06ea0000000000000000000000000000000019d88f62cae047ddf2cefe497495f890d9ab8499e56f72488af65095e992427bf821f63555a67b0afb00d6fb441080a010325465403dbd4898beb740884cc325923ec3e1d7483540377d8bbd02c11382000000000000000000000000000000000b7c8f3d0c56b3b7d96c0a24fea3394551a186f87acbbbbce41d1313b23762945bae2e911725da4211614b456b508c0500000000000000000000000000000000125316f64bdd0c5bcd26a0e5bcfc3139045b3a44c8a8dd1cebbfaeb83b963c5a5abd4a5961465cff261c0e49189278d800000000000000000000000000000000095a327f488b901fe7dcc9f9ce6f4f25876bb09b053b64e9f4de9506a0fb95fc0cd443473c2cc5436750581d39b8e51f0000000000000000000000000000000015d406b31c791ae2d25ce462304c0bcf341686d7967c9dbb6734bc28b02123b1730d0a673fa8071dd90950d9411a2b3909545b90dbe35b0d5764bc72d45717e0c3aca6aa77c73178fa8a3ee9fec9cdb3000000000000000000000000000000000c7029af9422246d0a30784431d6bf9eca09481589438fe9a6d2fe1d5e526ec3d176a3d550204aadb85353d99bfe3ce50000000000000000000000000000000014a0dcb26c40693ad19a1edccda05055a27ca24544e933d01dfb964571071f94c94233f81e1ead0925d24e6d3df2c21500000000000000000000000000000000147a55ebd83c746128ba9c7ac57be125ca5c95f80f891e2c5893caa779484bdc1f9c3b3ccc4223b2343ba939251f7fdc00000000000000000000000000000000125622a040d8b157432ad81b8a83a9b1f0920b92680bbb65050b4862b89017b3bfaf81a3402ccb383265ba7200ce677feef0f8014102664a300ea9a30fdc7afeae3cc338fd45cd421a1bfea98e304c810000000000000000000000000000000013b394fd7a0f3d94e5fe4cf5cce3627d425ec848912395565b3e61ffe89e56be799c4779d3b9a0222ecc6538ca3346e40000000000000000000000000000000014ac1a87b333caed0f557fa5692d1138a8c1e92d1f9acdc9f357e2a46f27513dea42f367b046d389dc831610be4fbcf40000000000000000000000000000000011fa243a0aa8b0c01c7636387d60021afe6efc223b7deb69d030651c369643188b9dd5e08d6d031d71dd11eca1e825ac0000000000000000000000000000000015bf8fd7fe438407db7f1b0b586b2c285777c5b6dbef9e45b46cc0a50dc831f32a70e7d4316d4869bc769ff6de58ac30c8f1e08cdd72ed200253211e3b9947cb2a5fa24079b6920b4a4d3f1fd78146e80000000000000000000000000000000005ea57c269c9d43d3f17a83df04c95ea7e7bd85aad1dc2dd285ccdbd52bfe707a1d2476417e848ab119e62fea30520af000000000000000000000000000000000b99768ffbe95e315b244bf996cf34f8ac356664adda5aa7f4ff8d513b2eb5934b8ffe0fd9af94bc9b934e0a8bbd51ba0000000000000000000000000000000003b02c259df189370dd2700c5cccfc8b212a4b332a083adf9771503f5bd0c9ef040590320fe4a86c555a4ea87531268100000000000000000000000000000000003ebb1e610bd055d037a410cce3ae06aa654950aee0210ed0ee79f7a332be7342e308347d7b17a146a8b4c623029e08a7e25b1a60b6c6080ccf1bfdc37aabbc2bf92079d9356844f7f12867b3e2b2800000000000000000000000000000000015c4da691b5e6242af870e06b29bcde467b4644f01080eca60a28c7f941590192be30e6a4270a36dc8959b80235600aa00000000000000000000000000000000080f3d3d5c35ee24179f51ad854a37ac4ff867a2736a0e3e8f3312ac98c7016beea6ffe2bad1dd4842d6ec77995ff97600000000000000000000000000000000130c29dc633aaefc831b0bccb13fde1212fdce8cdd17beaaf1d06e74ef5b1b69bcc219c8d63f054690af1b6dc7c0d647000000000000000000000000000000000767290aaa1ed4c1dfa5603d976df0715b417599445ca577ded7d99e685118bbec71443fe1d9a65e0f23436353df152cdcb456eaad2b7c71ca32277206c1a1dbfa7e0e84950cbf14aadd455fb58e398a00000000000000000000000000000000133e997857f47f8d6278b8ad86f4692ba0dec9da336f2726704db593af368dda7aefc0b218ce1674f415e0d9e2dee5c60000000000000000000000000000000018db87da1272bd386f7d8b5245dc2de30e82739723b680dedd36f4ac4cf5042bcbada1e1bb307ba444431d73a4248f9c0000000000000000000000000000000006580be3e67c7a615408aaf9c95c0956678af0e2b1f536f1e69588193387f8a05b03d5e1060ca60c4fec9eaf3e72d39900000000000000000000000000000000050bd9879ef9eea147678f552cedacaee84562e6561b3b7338fa8f9d514099291c3f2a3723fdb22c88f1c9243d411ccba6e7b19245341fdfc5927cdae57f59de5f3fc8c37f8653e5aaca87db682034ce", + "Expected": "000000000000000000000000000000000d8f69d90c871c08ae09e7b3e62e36514fd056c41fb596fec2fc9ce8509ab4f6675d7e85aa6b4b3197f5ab781f6f2e490000000000000000000000000000000011c4bd3cd156c34065e408efcaa5e13ad23d114458b71c2a6345f4aaf82af76cd4362db7ba9ee7e1e92ce72e242f570a000000000000000000000000000000000712dbbf20e9b24d20511d01717a3783608386408a258c2261fcdad5fbcab36c6bd21473c3d93ef8518975256c65a945000000000000000000000000000000000d13747be82153aea8076fd7813ecd7f60a214c31e88e25b14dee5cdb9336599e40b136d9ae6deb85606d35406b2675d", + "Name": "matter_g2_multiexp_91", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017da08f2faa32570d95b9efd2d2fe358faec1ffe304750dca1dc3a273be3427c70904d58864f76afa19b0fe33ab1535f0000000000000000000000000000000017de677b713202f23baecef2b0618da140af624e56b876f2d7a20cd437c3868ea00ff6cd9c8908c1ef323ad294edd9670000000000000000000000000000000011d50aad957c54868aed6d848b2e67094b129282cc2df56c41d6ffe976d02ee83a592c33370d3715588a074db503b3e8000000000000000000000000000000000b8aeb019d120959b21627c1dcfdfb67ade22a948fe433172994d4a34084ac9e1c11333a9c663c87acf50962e21c728e92898d9cbad829a5346c0925c15b585de18869adfe796e46cbd56828540571b70000000000000000000000000000000001312ebeee36fff8152324a3ed24c37eee50b3099619a33c7a6316470ae722548b4b9e0f0640453caf53f374dba504830000000000000000000000000000000005ea81d2e5d9edeb3ed6c200b75beb731c31ad666e6e37db72ffd0265378bffc2724047c7c0c6e3f1598345fd390e9270000000000000000000000000000000017617a836beb12e637c5bbadd4fbf1ca2f5cc3280814ff5cbb5890b31cf2d2faee9e3ea8134af97ad4feace50aa194140000000000000000000000000000000002606deb5d57dce5b3d2e5f7ccec3ad036992beae238673641ad6042479ec3cf83bcc0fd03b7dacb9b4bb6c181ea9cc8c193fe87634fb0bdaa1700466881b557c470a62464e8521be311a95dff65eca6000000000000000000000000000000001203ef36896bfad2a2841689a964328fe4ce3d83798671630d0c8876e67ceda03d99555aac46d984f1d3bc38ffc134c50000000000000000000000000000000013e7461c256c8ff9144b17f8cc2e270aa94b64be62588280baca2ae6b6efc4d32b3800eb84da62561e0e96d5f0387a3f0000000000000000000000000000000009454b6a810647350cf0b364eb1c2b719670af45bdba9d7d1a534e23d4e810c3ef4d9318532e46fd104a83bb10159a30000000000000000000000000000000001034546c4288f642daeccf5b56beed2ca2d946bb4391d056df9c6fd6771048903fa330ec16d59d05540cd715333c4bc73dd9c99a5aea019436e3c91030d03ebefbf6ea6ac69222f1870fadae32f55ae6000000000000000000000000000000000d7782404dc6721f52648fc6969db33a9aa209f8baf5faa9678437c76c9e1635fa6d22d94aedefc90112223bb81ce33f0000000000000000000000000000000001e442e548d3045d1589817d0b57dfcd66fc64ff978186f784bd576faf57607170d49364a72189328c9837c9a2d8b0a0000000000000000000000000000000000da2b207bb7720aeca2e6ea02b65076770b960d4b7a96ed941a7f409757b952031a472384298acc3948bdc485088501c00000000000000000000000000000000048f85bc05ed78c692138f27c3541ced11b6b0ec158b43d133c3450a905416682fbb8c83dea06a06d294c48289ddb829e74ab390c3f73c62eb1435226e9b4f9b921ea1918a61a614b9bdbe9eebd1cd790000000000000000000000000000000017134f787c920bc15cf2228a186dfa1d10194087f28b6dd8f03e1c86226928f0eb1c27020a5cc74d94b50c4b4e36b8020000000000000000000000000000000012fa1fdcbaa81c4cc1e37447cae51beb29e55bb19b91e2b575afa3754589ee0151cd9e83573edaaefd341f381d34f4f8000000000000000000000000000000000ecafd00cc87a773a13909512466ed11288c842716e1ca5c37a4d9a4cd7585136c86f32140fdf02e2997a6e19e3d76a200000000000000000000000000000000104cf007ea863dbd473d7dbab6f55e74062b18986e9bc09bcfdc9c23e4bff8683f73aa998a5cce59ded10499d18a0ecc4dee3e2bfae3820f611c30df232c1d9c6bf58d40b3530858c79f840720d78d72000000000000000000000000000000000ffffc98e55f4ba9a642c40678d625690464bea39d085dbc9c99b4c36ea8bff5154eae3c315e1dec29aa669840accf290000000000000000000000000000000000a3df9595167048c52b8170596d4127968194aef7fbaea4594a27c6af05c54bb772928a7749d74311038d1c115e91b2000000000000000000000000000000000b317a3abd808e94a7197e0d3b2515a147774f78d0cd7d36e1156da28a26e33bfa76d75c6e3ae346f9ace050c9911cc6000000000000000000000000000000000fb5fbcc2f74fc30ae7e32143f219db7dfe5db6ecb09cedad8f087b6df56bf9693c8b7d78aace064e7c31785f6869541795fc8e20dd30622876a94afce1c1a76e3b689d6848903c21103cfce6a8a95680000000000000000000000000000000011e4b907a72f34af899a6c4de211af5fbe0265e5bf24d406798de53ecea273d5df4f4953d13fd7c9dc3bb0f0c143e3e4000000000000000000000000000000001623de5e87b6e1ee920e1b7d979fb9c431c12abb47b93876f9ddfaf28a7b673c18be634f96b813f7e0574c55b628a8790000000000000000000000000000000018ba994b02dad759ee79301b42ea20d7545844c0ea4bff2f95dc9420194cc4196fff12cc09bc0cef03cb7ba868c273700000000000000000000000000000000004b3527c8d148bd9e6006bd298ff8d7fe320748dd3f6d23449e874fc0c2f58d933c1e038a74f60fb6032cce41a3dbf5725b49f325e76733eb3c1a2cee5467157b2ee80987abae43d2c4b93e5157f083800000000000000000000000000000000129641af11fa92056236ef135843b2189d46d870381261d5781a5fd6f2c5cc1861ebb2e801f19f3adf2216609a9e196f0000000000000000000000000000000007b4007c55e47f6bf3aa420ad75fd191ffe0fe824fd30c3f1961a8168922476fdb3869822704999b044feead470e3b8f00000000000000000000000000000000174209113e2d8c363b04f49487176dc6d9eb4ecc0b22daa7ecaa5548d038b3b7c23ebda4f1b6845425cee13493385302000000000000000000000000000000000a58c80a02b7f93db01d2f8e0005839625e6c4f121f3d69115f435526a7f7cb53177caab4db86273bc2d2f0474235f31df49b30dd6aff459f64906eb1a9c9b2067d4f1b75057874b2fee17923bcb906e000000000000000000000000000000001738a03b46a8ca3f3d1f4f4447497c59f114005400f06813b24ff462ebc6f27c1c3c788b5f83f65958cadb34fddd08f40000000000000000000000000000000004dcfff2bc9ca0282016f38df484655cce7b872b1ff047351ae6b903e05f457d7fefae93104f9dfb549980394dfad2760000000000000000000000000000000017cd89434225dba07be137a73892faf0258b3fb19e6c8cec412fcda912c0613f2a925ad50ae485187020a371ff2dbc59000000000000000000000000000000000f1f9f87d3401e7b3b59331a89d9535adc973f869b81bfd8892a37117d8597ebab2800c966e623469792f4ae2a8eb232959e0a33b1fa12e0ba960761b09921b81746b8df23e808a8de09e7f5cbe2bf41000000000000000000000000000000000bdcb1d2a782541ff7884dde4167ba060fbd4b117944ae69aa2ff685b9bd7d475f45adce0c9f92695b4f4ecdd48cb9b50000000000000000000000000000000012a55432678043888bb9e7e47efb17700b3e702e389d0f58dd454224a02da3f190b2fef4c9d3e2074c7bef813fb56fb0000000000000000000000000000000000efa51ba64f1e7a1a269dc083179a222afac916778a967098582f55a41394bff3747f8d024261959f6d399f44a40d0fe000000000000000000000000000000000845dd0974c5789a85c3cb09ea441f2c433f0606928ee1b177eb851530d6e6b620b4fdcaffb8f75623435dff99b3ad9526ca68383528f6a871c237ae5214b49c18c4f3e2f3ef5dfba39e69eb181143d700000000000000000000000000000000180beba92bdb95c7803fca0407e29929ee64e03d61cad96ea0e6c469c5a888cc5ca5eb20983b3418a8da6596a5f1b2ba000000000000000000000000000000001322f7356eb3069fe20063f4be22c44426162dc8fc117e4e382bc4e33bdf3d971ef662fffc1d58ce187c33a43a4c853e000000000000000000000000000000001601a0aadaba846f11ba5c9f48e13bda1007ffdc1b8bbc9e85e83e569e9ee17a1e9e780a50ce617e6c780b8155675f2100000000000000000000000000000000105b2c213aa43ead42d9cfdf1d6c0559c25b4b86af43d4493bd75b76986d0d4f1d9b3bf9e3922b5c08a37a1629cab7d8f1f95a9d1d4e8e7d0f17a954177253709d988c3a77c77d35b8bf70294bb358c20000000000000000000000000000000017bc70346765b7160a0a5e556805c7944304acbecde06cadba474c51f05f22445c3d943674cc8215f973cdf11b9ea2e9000000000000000000000000000000000bfdbe202619a1d95359941c249b25462d3ecf09fabb878943a8a37cb9eb94abd7e6399f8d82f90ffcf904f4466cc5b1000000000000000000000000000000000f048db8530a288fef10a5ef9bb3cdd9f3d3b0ef4824609efad96bdf52d7c3b10ef628fa04f8b6513485e55f653f4b990000000000000000000000000000000004ec35f59287eadb1738bb50b0e2ad9d280bedfdb0a201e72594bfc4322ade0b7ffd6b532ebc7796cfc71f88a194bef4b481f986998d863c98e55a7661136a8f19d7d4c57f6036cd642ae16c82cdcfb30000000000000000000000000000000014424c77af7ace8ebf66f556cf219919712d96d24438466ad620221ce1ae9b2cd75b9c526e25df7fbf3c9250583757f500000000000000000000000000000000198aa00723781714152b3494b76ea3ee043b363b3fa81806cdf7e440b4cea907f226a3c038fb95c932710dc9aad4c9dd000000000000000000000000000000001360e4c775f6fa5e987231dce25ec67f61429ca9fd8160c3074383c30a8c0d7ff068b1d1215b2c0cc87129d9c9aecbc9000000000000000000000000000000001280ee6160800c4b0f82d5c2775238b4b223d8a0ac9a8f8013f138d554ba31c9fedb30e0eb5c330da17f5785b2717422ad872848d72367467094675a819f9aa6107183aa0c8685d5d84c27b3aaab33c1000000000000000000000000000000000f1f84251204d9f9328f79a45d15b311984df0715579633a82b5a9f680f6645cbe748b0fa64b9ce1e696e20a5645d6d300000000000000000000000000000000156901506e502a09917f76d825614824dfbc34d019ed53c2ec5395b51512da512b27541bc53331444eac2f618ffd5357000000000000000000000000000000000ea8736a97a33112bea9d07b729e973e3a942422f1d2b24c30e96637b535ccfc10cb5930bb59ed90bef604453df8772100000000000000000000000000000000187378477f60e3eaa225e89d8532bd95babd4a5c51729cca800d364b61575704992639dc5035138664e8e074ed0820033c2c60541fe17fa8e71d58184a055fa8b1dd0bfd16ac2baa912b4472c6056122000000000000000000000000000000000e5281c1c9210269a7f5ccd02cd5a7d3648b56d9ca6a4ee50beadf151c2601e0291fe7f1b89b694500e6c636d4e445c4000000000000000000000000000000000d5d5399f49697e46013558dfff544383b25f3b60681ba5fa2c5e6edfd3924267d0992abe65cbd5109ba8a1c6eadc7e30000000000000000000000000000000012a2104aa92871dd8e41ae1ae6dc18ceb7d0f361a5a4fc67936454b8866b8aec1602dd596459cccf6d9e1319ec3299d4000000000000000000000000000000000268795f6f9892f5b476c3a534673538647300203a51a8ff60b530094608b5fdf16297f02ab7ba41d6fe556885f064a4ff07c19ad4f10ab47e73b6698f9febf3f28087614759e082e6e717588c1caff7000000000000000000000000000000000a5585961328c52e0fefff16e66e3367e34339dac1a20cbc5e89b78804b8bc265e6e3fec1da6a62cd8a46be2f08a6d960000000000000000000000000000000016fbbd698784beec5a636332c0b20fdcb68fd3015cc6d18b541346a5e6af76613e6fcb14c888a2b8133c0f4132fc079300000000000000000000000000000000041805e0adf2a32153b89d1131226cf0ebd77cde3116a168e792ae8b88ba2edcb1fe7275658a384251b805d282ee039c00000000000000000000000000000000024213e4a8504cbae4875617b9b78473e7842ff72415ceacfaaf2e8b415f9f7e411989bada8101be72f9295dfbddfa3f240c881fdbfc414d3e85ead1cdf166ed6929d0b2ccbc35f0811473757b6b41af", + "Expected": "0000000000000000000000000000000003c4f051d528166f256d9356aa9cb885db5680c51990d9474a948848888fb82a9b86daa7a2273725ac8ec564ebbf15db00000000000000000000000000000000010a6c4c7067f511ca8f1b66bf9ffcbb275c7575540909262f7c4332c3d75b2f6d2f3ad2848c0d455410afb1cd60c835000000000000000000000000000000000ee5e582554b3930c5670d4e3542bf32e8b871849d7859eafc077bb2b533e936d462f614057f9fc09c4010afab501c1f0000000000000000000000000000000017fdbcaa065d301adb94a60dd20dbae71512d369fc82c556ea0dff66843be768be942e060752591c6eb0718985d8e313", + "Name": "matter_g2_multiexp_92", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001353960aff58d45691c5378a0676a8e837260f5819cbbac9cd75c8cc4c6f1e17b9dc9843eabc0b1dfb27ff7631e4e52d000000000000000000000000000000000d6279a43d3526c035e88b0b640b04d42ea573ed07323aaac1d9d5570a8be64782682892415ba2be5cbb13f56e3a44db000000000000000000000000000000001250fd14fd003f88eb6e0e80e9f2ebe204475fc6c06cd10fa45608a17b7039afe0326474ff80c357f86c2825cdf7a16d00000000000000000000000000000000186cd91cfc8ae625e302946f2b393ea67e1107c0bfe938f5f36d28879fa0c0780c847aac77d0310d43211152c1d5f5d314d5455ff1717bdd545f4daa37e145121e7bd9636d7a2b65633e5ca5a63f2d98000000000000000000000000000000000e55a98e8b1e59600e86cabb5e8db8ee622009b1618ff0df3e93fb55b80985bf2a8ed060aeaba53773274d4186934f75000000000000000000000000000000000bb7215fc43f465f51fc8265477fc8c79493966f040e02f0eacc4ebcb3414b84fd94ded822bd24dd5ad5720f12bb8313000000000000000000000000000000000b23328e15cda8a576ea352b5dd7ce382ec781deca6c23f646e42f0cf63e28669539579ea51e3c0afebbb58e1e8e3243000000000000000000000000000000001716019236169bdb4af7bf7d7ce0aeee7900b74023acbb16f6965c2abcf28917bf88d0f9d5bc26a81710496f7821fd4682cd8da62bd901355a60b37ca14ce65d427bcf9551203cae7c346a49b4fa8626000000000000000000000000000000001718a4d6f5e78524d8df23d2c589abf04e3567d2176539a30b9f73c6251de573caa60c2881f3da99c48d48e9aacd7402000000000000000000000000000000000ce0e35721379077e6eb3b572f7f7718bbf775b116521c14acbd3ff19549c75d50bf70ce84326cbc3f9e5e53605d8ecd0000000000000000000000000000000007cb3305ef0d2cd7de4dceaf25d2eff44d4f437e065f6b244bf1b0611c891626eafc4b759d55b45d76e94b85852df1de0000000000000000000000000000000011cb56d2ed32a46bd951836f8e0f92d3824a4cddf011eecf1e2d92d81bff407a04abdfcffd60ccecda6e9443b328d51eea2c7fc2050e9c1ebd05d15f197b4b1be61c6820c8d27ade57d85109d7f982490000000000000000000000000000000011ba705da23100f853882dd166d81ee1d7621550d156b14f7c2123e2681887ec3724626061db68b2c63987325b27d6230000000000000000000000000000000014271414fe078a80587269398afd127ce34c8dc2a4851f76613b81dc99d766d75c703949c1093b04d66a301a79d89bc30000000000000000000000000000000011b7935ff284b0f812b5da5b28ed338dc4c21ebbc7fee04db834732b11fd76092db0e8d80368255b0f1205129081e9af00000000000000000000000000000000104ff0ad2e3db08d3b4890b2e54f29e456e627cefc3a4f07c1109b764dae4142480e3e5312ada43fec9ba96ce587e8a4e3bf7e661d54796c71437354d7d3182770f10ab450827512a423d3dc82d5b43d000000000000000000000000000000000c60749ef36d63960022f3127d0ab4e12acf05ba1e1a136dec89be388b9d7144c1d78c04df658727763dbaa9725bd8b90000000000000000000000000000000019932b1c205a765bc9de0cc136999deb153222a9dd9e9ec3660fb6daef56242d08791d440888e69ca0da2bbe0fcb7d79000000000000000000000000000000001764790d12f5ff79ee4f2c9fadd5dfb1cf47db70b9e86018bbdbffd1be18df193c7dfa71533afa381053a77e02719c6400000000000000000000000000000000044b2b0211cbb407281ab2abc4725c2cd791b313bab8779954a2461ce445cdae60d4a9efad9f90f80e66b1438514e0f0d3a364e7b217dfd649d1e08f76393372d8768bb0fc85c79ef4652417ef1637fc00000000000000000000000000000000175cf9e7eead650e7ae4fd657bc288b6b6392773bf1bbea48e17172a5019637fbb2bc0a3d0d1e3b8054564935c908db200000000000000000000000000000000136da2a625cf72403d0861b9cd947cdad12b1f1e6cdefc4aab6756536425285a7953a1b892df40ec12ac3430fec889cd000000000000000000000000000000000c2d10c6d71cff4e1deba1984bfd17166571e64659ac91b64c343cdf587c29d52a2266c00a57c01feddb1df6439d21d1000000000000000000000000000000000384a782fb31278f49c840bb8f0552ac2734ef36bb3d115be7df20333aa747c92db990f7e879399235d122fdba0eed76eef7b05d5c725ed31269ae9c56dc7ae35048af39ab114319680d4af69be7e7c3000000000000000000000000000000000a9a821cc63e7c9857b0f39f7444a1e00a422f7cd5d0575c26bc5c6b98313abfde51e3f6d5f4c817193bdf391344e5ba0000000000000000000000000000000010daa8c7194a75cea757b6ae4eee85006eda459ff2cf155b1b5f19c3ad341972f72e28b781c4878e8919c7e5abe9a1d5000000000000000000000000000000001154d5d5764aa2b8818a9dc5dce30ba2197a86d0bdc7dee3e600462e295cc3a69dfbf8db34acf138e7a1f16b62a45717000000000000000000000000000000000b4243a09b05a958d78ba8ae25fd3fa85d520b95e56f1dff44e556b221a075f8dd3370313886d9dbfc56a75697454d72acecaee3dd4dc11e341b3dd0073842d90f641d4dd467a6596f337a6147bd30a9000000000000000000000000000000001820f953fd22b71ce00bbe9e9b78fcf5fb28bcb925f6b5dbf5711e00470ed7fd2f38d7291d40514ab4258807f29150270000000000000000000000000000000007b737b56a2ba33f76bcf66c0b26fb44d5f79879273f6ab21ecbfe6a5744da289464ca2b46c55edaadfe3210b907f3f7000000000000000000000000000000001735d1b39c5369bbf886c5063a96dd12b85e56fd9d8ff9d84520918e1dfeccb62bbbe1c2ab440ccecd0fe66f6ec55853000000000000000000000000000000000e591b7709bf00bb2a87e9edb95720de19adc41a42378cf9ebb930c6d3f5993a1d7b6320040d5c69908685d978be8f980cba585b847bec40515a257cb839c7e5d677d17b7313c258e83d630e65cfb5d2000000000000000000000000000000001732ac410b2a7d10110bbf7709dc6fdc91ce742f8cb9b2c3ba37ba5f0934f8622c675753a26d04a176e24a630d090d81000000000000000000000000000000001111a52da6aca10cf40127fa8ab7683505305e0d474eed28a5e1735ee6877aa00c1bd598420876f2154b814660f3fe7600000000000000000000000000000000098c6d19c2ff42c2c57a4924693325de1a91135e3474ec699b70439d034469e72e844a5511e23dff3948a66cc2a2165300000000000000000000000000000000175fb79e5e54963cdbb133f38dccea2d1abc3cdf005c17e8f2de6dba9b9dbdeff7719983aa9ddb602f0cf966fdd430e0b8cd305c650d2e1cfa91ef0aca9dd0d785d7570d6fb67e61fb9b6817116a05440000000000000000000000000000000004e88468d35d72dba6b3e4b9ca216b75b5d20c447064a48bee6a6ddf994b1e22fd6ee8abd60c627622daffcda219645a0000000000000000000000000000000015eb2ae16e3310b4c4ff557f0615519c13f29109d9863418fdfbe6309b5bac4463456df8ebb0b6d9022e294cc16265ea000000000000000000000000000000001288ffe0ffdb96708558d914bc412758770d048c4d50523e2b134f8468d11a57da97e42bea303ab7137e2d26c0b3b8f30000000000000000000000000000000003ce563b63c50b09a80b71a1a82995238a9de31aaf189c6d29307924b6f0990854507b7dc1644f689c5abcf931dd5a3c825e5f9d81273f306a065fd064ae24bc2c5ce8dbff6b22128753663a218da8a30000000000000000000000000000000009e39ce653485caf699ae1d1d9cf2b8c5ea85b80ea042279e57f0beb81056159e49f73d67e7b1f9ece9f9ece7dcd2cf50000000000000000000000000000000008d6492cc335660c54e4a34b29b337b5800f1ef992d124524c799c04c852ccd3cfc01bf39515cb8b96151753147e8c49000000000000000000000000000000000ca779d87aaa3a6552f9f1a10b0d2e635be90022326db04e6072f326b919ee55d4124b9268f55751dc0f18172bd327ae00000000000000000000000000000000112eea543d6609d0acfaeb7be98be609f03304f50c3814ee8a010283146e6b5dbf170c7314598cac06efb9ced1ac2930307ff9660ad0c24cbb139486638a2556687f88fb93a290a1d174bf87d780b3fd0000000000000000000000000000000006624dd7f6eb043da41a36a15752f370eeb3cb2e6bd88b337b370fe0660c5ba8fe64f62e112f91d2524e9324f3a049fb000000000000000000000000000000000415b964484c9246385cf95461ab955ed0390e20209ed405d84fa8c8af9fa7ab39ce89049691a63c61b12bbf6aa2a4e80000000000000000000000000000000014411d7b2db7c9ee78ea14c6a315df3d90827b511db2e2423d660176384d8f8afd284879b22f5aeed73afb2eca4be52200000000000000000000000000000000105bfb471340e76f28901edbdbfe2ba246a8824b501ae2d4a73cffd2690181347c1e6530804614e88e2bb13a8edef8f4bfa8ee3b44c70ba2512c00a1aaecede2180b08ac3ac8c550d70407f0c12e027d0000000000000000000000000000000002b17f4b0b0231be229d87f075998435560ce9046a8b0e8f15e3a9f07cd52f3316f6d8c00d6a872362e7066715cf990e0000000000000000000000000000000003110eb232154f8a06834e2ddd33c0207ea552f439a6127b652bc261158209a00654e50341d333cd1b206a915fe0691d0000000000000000000000000000000007940e209c8934c185e4392f12fc0afe3d234dd1ef3f92df18d76be8fc42bdcdd6d1ea8d5bb6f07b3f3caecbeb5ef27f00000000000000000000000000000000012ec903a8442f68c03300ab02ddd08ec935d97bec9050d26a5e276584592df3ab87d596f90768d2c0918099b28963be58aa85b50e5f4ffe375599cbb912f41d35acbb85a324880148f9b9003c4265bd0000000000000000000000000000000010fdc16bff0fea02b325c672fe06297e0669094e2710d0baf3838f3e234c3f776bb3fd41b967c9ebbc72a6bc6eca70850000000000000000000000000000000009d64ce322e39d5b2d0872760a61a831877c450b1cfac6cacec52d4070b0f179dce90afbdefdaa8466f6a6e2e83ee8da000000000000000000000000000000000cddca46f3b24e05b76e61b4584bc716ca7036afdd914731a61347e453a26d07549e9808e553ee056bd47e53c75eac8f000000000000000000000000000000000451cccaebe1a188d3eaadd40090ca594f071c8b6d0e0d82f5b2d43fa784f8437e4226104c4cfdb24ece1ed75375aa616810c6cd59b14ef4f6a4c2702cc53c65b3dc84988372c1195980417c583fd7ff0000000000000000000000000000000005832ad778dca8dfcfbe741dcf311024d76341d5920b6830cb75893a112c9d86719583d1dfa7287281fb73fe21650c3500000000000000000000000000000000044feb86b4816e45ffb98e9a670fcb039fd9d8844a2c7ff9b7752f20e619195fe6ab1148f30afa393936d3605fa4c8da0000000000000000000000000000000018db9365370a8c703364ba6d9c48b3512da46cc603a43c3fb91c0a8ee59777d7cf9ac646c3e4274bd950d7de92ebce840000000000000000000000000000000017bd82310e251701cafbf8c4dc5b9e6c88085b0df287b6dde7887e1f64f2d9487a25b31abe07aec7d99a75baa5983195c5ebc09190ba3df49d8ea55cfd18370b9d443f9d9084cf84f2236ef4723d2d470000000000000000000000000000000002c1df194f01dcb503dcc8a283f059b82d141274c8f37cdb6441aa33f84f16dd288d566752a93ca23d26ef5834c0658c000000000000000000000000000000001700fa4459dd4e609453284f4f7dab479342675a87c1cb42b601908296557f39256f1597ed3b9ec38ad0a40a2c728f0d00000000000000000000000000000000135ed4f475eb99397cf204f971215a0303316a3ed8b62b303b4bf756ff753410b7fe263c4e97fd4c4b399c319ff3ad98000000000000000000000000000000000a487e179bf1b73627af9d7d2b43bc0e43127a8fbfeaea7ce958ddd53ecb27741eda187745e3917f1cbb60adf0286f5413a56b176fc835b7e825c817d432b9ec6d51b0a66483dfbf12166ee979b664cc", + "Expected": "000000000000000000000000000000001327c57e16f03fbf652bbacd16cf574113860eb87b8f2f6e498dc5dcc4f2fa63859d922d88ccd6683d503d0962db5336000000000000000000000000000000000cb06948c539cbf686f6936b6a1ebef2e148d98c531da36272e0334afca5c2b16a52da542a0fdbc3bf764eb877f5778a0000000000000000000000000000000003acddfb5bc4fd5579d3f592977365840be4d3cff96434e5ff4f01ea798e4401930a1f5d91f8de3ff98504dce398c2ef000000000000000000000000000000000a5a332805f704613eb085d6639f99667d0d9247cae34eabcfa399eed551f24c5d5cb05d6458530ae270b1be682e71f4", + "Name": "matter_g2_multiexp_93", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b1b06a76e5bdcb6c1c2f1952b49e1820a9d8557229fbff8740269a0b819b91cfd0de20db0afd76a2cb0fbc5fac12ec5000000000000000000000000000000000347654df2084082efd32cba2b270f66b0ed30fa8713b27949fc9d270ee8eaa9b9a7896d7a52dfd8faa3e0cd112a24e0000000000000000000000000000000000bf5b7a2c0c8bc223ab334bd1df5d9fd4bc0c635379ed2b32da13f6178e07217bb88a4bc2eae0b975f2e566f657d23aa0000000000000000000000000000000017042f8585a07304995853270b1b03bb08484104f7498a12bc865f2a0e37e662fc4b0331b94ee5690efe74056567000bdedf65658ec3cca48fd48e844337159af090c5d1f5e9d713ac6d0fe1e1f193d2000000000000000000000000000000000fcbc73d0628537eae417f8efc67af0a4c9c375d82406086bdff669911fe1307576333c389f189f49677cbbfe2ee98730000000000000000000000000000000019d552b85b1445660ca49518d202afdc67b0eb5be02c8d3482dc1b12e5d40a4ff95a49ce47809e4d6644d04aeb67b3c2000000000000000000000000000000000ed536c0f19f592180291bbce59a72ce5e516199dcbd4fbba736cae2edbe3cfb860ead0325dcc8f8d9be1ac126dc6cda000000000000000000000000000000000f5d4f0c0ae3e76b1c41edbbebcf1ff17c7cefd41e7ef8f75dfc10170834d05820149d5f721a8c6460cd0181571fca97db65ad6bcd6f485eefebda0badfc64e9e7dfe7e911f3ccf4f4fb9528dfebdae6000000000000000000000000000000000d6207f6684f8d2f083c963551bbf0a674ba40e691a34ebe6164ff80ba9bab2cc23024a896d7b906fb74c95016a9adfb00000000000000000000000000000000145855e7d610b50cde39db8995b127145d68fc9bea3f075f65b7793acbb14bbb313a1a39bd96fbea6641baae02612b000000000000000000000000000000000005b533ee83cf72f0e4d9c9ddcc6b91f4364e50a106becf766987c490d559d0f733839ecc706bbc9c2c75b243814068a3000000000000000000000000000000000cd8fba13b9ba7557c7577da183bf50810fb14eec7380e3b3d4f2fed62bb36f2b5ff288736bed0578fb6f47fb6d22ac86e0fa09884a7ff4c801ea0722cf6bfa58a46fc3d36058e8c395ea8fe56d9fca4000000000000000000000000000000000fd6a466f2eb12f6337ae9f9b847ac1481820013142af1a474229c5f5f5e1c0bb2d9678c19c7a3a1aa22cfc7b5052e0e0000000000000000000000000000000002a0340f5a0caf5c66719f7d546972bb4b89147989280542787d281901ff036b7c69d41418c21c43127c0158593aa5cb000000000000000000000000000000000deeee37ef96f26a4907e1a8a8f3f030dc09102799bd0c6dbeb1d208a0c86a423d0da6313e0be03c026da5614a6a576b0000000000000000000000000000000007220475449add59b3cc6570701528dcbdedacb9a3d39674ad4aef4d94114f24d2bff32f40b25af97ba883905ea6838a27a3377d7b9ff3aee2ce1194a22d7115b09a9fd53fcfa5e7f76bd9fdd35559610000000000000000000000000000000009d7023ebb73df81455f74cb2708c14ccecacd49521a0cf67ecb6edc8756e286ede59eed54d89eee5f77f178ea8fdee900000000000000000000000000000000002ad48fc3192634e7b01604678473e286afb0efe67a4377bb885d38b59ea00202241fb28c93232ce7c9a3dabb136a53000000000000000000000000000000001934664f2bfffb254f0415d6769f4e2ac710ee88cd822bf5da5df3a2541f887e4155dbb7e8056efb2a0370d6f9173e3b0000000000000000000000000000000019df518e1ebafe95adf683279729a3298fc8d7eb39c9a3dfe4b6665153f970e243e50dfb16fb87b3be54192f69766659446a62ef5760c995cb3cd0984d607c232c1eb0df5516a501ce448a189a3134d8000000000000000000000000000000001870048d360f397877321904563d35bfd0817ce464e0078e9605a4744e2723f49f9cb21dd3d6f37f1f9aff5a6a99bc530000000000000000000000000000000000e29dd0da13ac451d013d4a38408827cb0e739772e1f250d31e4192ddc13d651ab576ed6b8f4ee44e928fa663244999000000000000000000000000000000001646183099579322e0115ab0b3bd6c814e216ae6b2b80206354925565b7bcd97bc12668b7f3530a95409456ac99bf01200000000000000000000000000000000092f6f594ad0d92c9c64f78c819c44320e6bb5dc1dc8fbe58acc7ce3c101e49a74ae6d50b1a668a3b7436dc445e3da345f0c1a7c2dd281f7d2f006497f99f65d6a1e22f1d9aacb08724b3576aa19e19f0000000000000000000000000000000000428ff447de18dcc11b2c5c679bc2efd125464f589013c6964ea6cab33d9b7cbcce3a5d6177bf43114ee256f23fefa10000000000000000000000000000000000d1ded695e88dae6dfa702375959831f4bda688fc0faa289dcfb90a07f3a7963f2c9070958561909a2051a852cc15e1000000000000000000000000000000000c39bf1d11fc5693167890246c81133faee93a8639f459429757965e0b62e372153ce53c61f2c539247dbe7747b27d1c000000000000000000000000000000000e84ecb6dd9cbd4133c22350f07a976ae13dcbe4c6ae09ccb023f2118fa2dec68c20ba2266f9b571bbe30dde97480e0a94c1476ae0a62c502aa096a371e30ca885dc13fc417e3dc9bc00bcdf516764100000000000000000000000000000000015e040fc8753f06ed1112cc06e2cb7142a4fc984834f01faae718c17cde782d5953547857ca9aeee1c4a7d91df060d330000000000000000000000000000000006789ac15d719a7159b650b757f7d3cf58fca02d3b8f3685478ad5e5b1dca0508dea7a8203ece97c7c6d32b2f194458d000000000000000000000000000000001824d75634043cac3fd17ff0bb141daf7010f70b5941d8f75f1ae076713afaa7e0a0a25fc71038baf1b1255d64c914c6000000000000000000000000000000000a2f71bf85af6392a8a070596e30225bec9e3dc12c70e8df7c545bd6bbcee56799db2c9a8d2504c4f90ecf6a5e18abc9b677bc9f1f7572f808e969aa50efc519192ab8653c71090e5cf8cdeb1a3544dd0000000000000000000000000000000008bd859ff1f22d682f86e1a0e3bdf3a332ae78d64814720687a3de44c9bdd7506d2696b4daf81a94d33f64983967fdc2000000000000000000000000000000000d7b4b958e0087f8edf18a4370ff98700764c126808d5c52afd3e71ee326c766c1e5712dfa351cf5b3c518e52133ce780000000000000000000000000000000013a145331bdd9c93e63edbabb9f6c541a7c4dccb1705f07eb353a0407074a76022a8e5f5f2535b41ecf6474649e257bf000000000000000000000000000000000a12e461b7439bff0dddb560dba21ec53ce88f71fd3dc10723f3d8742ed63a1ab725f7e9619ca1ccb729564dfbdb1be7f5ca580a25a5c87015f57f7c23cc51a0beb5926c84d44659e45512da51aa0cf4000000000000000000000000000000001430a8184c5055008a06ea22ca9c997d1a24ddce7e374937c32ed1e487c80537b238a589b5e50b86fa194666bd3410e80000000000000000000000000000000005c78c94f457bdda242deab79524bd2beac82bb1cb427dcb2872b56d1f46d11fc9d69ba132004958fabc5da7d6d103fc000000000000000000000000000000000e985e8ca038b5dadc9fcaf22699e75cad9d2effa47fe7d4c579ee056b1e34ccc540372111a665041062fc6c39e05d170000000000000000000000000000000018c865243534fbde740de0ffbdeab0d38ee878c20f5d84c0226d1f2b14ed3359f5b5b909808b6b3789bfcab3be75c4cdfa1cc45c35e266a82899d8ea0c9c1f96f96140eace41a8758a87975b088f0231000000000000000000000000000000000c5b10541ec34dc0a8b8e42d9d6fd6f4f71e1fe56b5afa323f4ade35c0170b5e224a66771326d9edbddf2bd38c6c68ce0000000000000000000000000000000019cf33c19936f7489a1bbc095d0f5c6ddc1f43bccf7e8d1b30fb8e8cd1ef747b483b9a8e9faf21cba7cb17fbee887ad70000000000000000000000000000000010e83916faa7bc9de9feb8a7f34ac6f2aced06a771b662cbce846107245edb9c07632782300e838957788a8d88c8253c00000000000000000000000000000000066127bed5ac9f2871500fdd68a03ade57c35449d4b4186b9fac7c89e91b4ebf2f2a02e94d0b578aaf60b32017f147a493d2908aa9266844eb265c2b1c17f8357a5ff039836ba83c837909f6a9d0bc03000000000000000000000000000000000cb5a734a28b44f04d39ffae049fe8b63b138411661ca6dba00c72cadd47b50ad4b71e858e817561682d6ca378ebbe870000000000000000000000000000000000baf4d689baa09aaf763ae7e142b801223c8ff58f2b541ee4c44ab2460fb8f6dfc1e9f61a8d73aeb92d7d08c281cf410000000000000000000000000000000008a0c736f19bd0005c9d25f88565b1355e53fa3403021577de536712ec986567184f4dd626127ee80dd03cdf9044b2ba00000000000000000000000000000000063ffb7a3b4e057a9ffe233296c11fb462136fc4b187be6f9e36f9e6d335a3d673ef8b9ae6f60c146a075a1789f389cf3b94325aad8a2c80971a781bf6f6bebad63ee37405ab7e903fb7094beef14d06000000000000000000000000000000000c33d89595d039722222b9b9ee7ff1a0dae896a8de97f202d3aca00bd81d0169f14676efc4b051bbd339dce862d8b60b000000000000000000000000000000001109a24dc6f70bea47e040b24df395bf561cf5f1ee79e90c9b0480fff0795677483a85e6f2e9ded4f36ca849ff39d6f60000000000000000000000000000000009c7878f3a4e4e3149b72149a7da91bf527c4d7c94b15ba80b02e0e50b02a2c482ecae9f458a881c87e669986514f6d70000000000000000000000000000000004284448e42187c128578b801f76d421fc508cfee9360a7203a91d6f9cc7ccb6ed3211fc5df9e15f14aea98bc298b2f95143a8e734824840346078aec03d6760564870c5ee2b2dc13f8a39ac452be9f5000000000000000000000000000000000271ec1a3f8e3364ba8e101b49c0bb17e2b7c7f27a4aa4d4db5c07203195050f30c1a05d33c524a84b1a2f0ce31a587200000000000000000000000000000000082ce9d1da5d7f192c537b2bd617b36b65f88b308fe1ff85e47c64b62dc62324458493d1cd1da9f5fe308d27545fb6510000000000000000000000000000000000b30356b59eb04258096d0c3f357fb04471583cfe6a060de5279bf2cff4413678c1716ba87d0b6de6b6e79a96ec26030000000000000000000000000000000003c02470a14211fef14d754f6f71efb33a06a76e099093a5b9512f907ff819e1e0e15f14995febe48852007bb5c380bd0dbee37fea759c2a58cf360c654f85298e8ff44b3f900e8229c3f838345d053b00000000000000000000000000000000172df3290c3c5044d590eea59980d02e02d4fc6fe7948168492362de8f0a85df0c3d09d8cd8b206cc4d1608311ef4c130000000000000000000000000000000010e4d14065315a0d9e48204e47955ee9652b08318251a7836f32e6fc015d4856444172de44b3b88efa1b54dad346e9b1000000000000000000000000000000001549b9c85cb2fc2c7495d7ef6aa1452e58937baf58717037069e6bc6d72ced3a163f800991cd26510e71aa64c44f66170000000000000000000000000000000007814c2f1734fcc8cbf9fcba06b936c86d0452a2370f8c9480b97105e42f9babfe0869cecda7e15500e9d8d868290201b92f9db82d0976f4c379622c4028002ede2ab17f647bca3bbfb159045cdb342b0000000000000000000000000000000014f849e9749a5ff6b7b10daac7f5934be5f783d49c8593367c4243664e01b1d3552e878802d7dfee823e0122e9fd46f90000000000000000000000000000000000d0b32d7904dbf08269ca3c6ae3fe582501f55e32337ae361fe4a58dada560db54205e56a399aed33bce8758a05ebcb000000000000000000000000000000000cb21440baba44c3cc6943c8cfa2fe544a652f06423d3de06c2ff734ebbb544da07ba8982b3009b6c4857b73ceca570100000000000000000000000000000000174ef591975fdaa0e3cb05bbb4140abcb38f685ce4de77c95e2cec1911985557b77d9229940b8c9157ccf9fb553e8e0d98df4ba50cd5cb5a02d5f50b3ba23e5f5b0172a46cc315a0a94fed05551a68af", + "Expected": "0000000000000000000000000000000006da1222c7ae02843ff289931fcfcb315f621972f45e4fb4160b8bf48cd8102d50fb53d2c699afd36892d91f5e608784000000000000000000000000000000000523048c5de2d0139965c976d8c3328666e99c249104712719e992334442245e955cd6b14a1e3d666220617d78edcc630000000000000000000000000000000009f669d4e7d89fa8d999d8d5a6323da9445583344276bd6a29494a91174aeeb29132926a893d5a0eeee9c3048ebc0dd200000000000000000000000000000000099ee1c33d6f09a8d063393d2a8debeaba93027e31f7b23c5170b6747f56bd6e6494de966dc280dd67a38d39ae35a336", + "Name": "matter_g2_multiexp_94", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b46cd281a09b85d977e88cb2251cc61cf13181522cf1c344b114783c4fa22d08f2d008faea3dfee8ea7c56aa35ee39a0000000000000000000000000000000012b530bd34f5b31161355436c7dc444d41d634b0ac3292c0096558618005fe82d189e4b208a48240dfdb4d50ad44dc620000000000000000000000000000000014d334e7835d4bcee2698ca4f643f9692f28d8090ebb8ed8f67c60639c64eb116067e5e8a6d04a0c88c765c608d57ef1000000000000000000000000000000000578cb4e243b4b20c99afefcdc0e0a9e308ab4bec6d655a8c4981a711515c807067472a6fca30060d776213b8ed98d74e49662df81f6bd455ee554704ff0c7d5a589d91e017d7ab4c500d36378c17c8900000000000000000000000000000000046ad1212696acdbb686543d284d7cf2e1e8e8c10af76c6ba51d55f060c006dbab25d3a789c71c428f5bdde9aafbf6d5000000000000000000000000000000000a6a880d52fed6a45bdc61d9ee78d8fe472e76ccbe155bddd0e2a967f4d116bb9f2dd4c62cc6f7224b835c8060213ecd000000000000000000000000000000000786544589eda15edc433edcbaa46d4953da72473f04169ea64dc114b99f0a58181d41dce1fcaf7f3109f66aef02e53900000000000000000000000000000000030759c3bdeafc94fc8fc0b03ddcd96869459bf54ace74582aa06c179323ef076aef89c09ce8e7bf9109ab2e8c8fb0be79eb26c79d78ab84c4d7e48e56889a601fda17901037a74fd79355e7536f3953000000000000000000000000000000000e6addfe0db96a7377fcab1fb92183fd7d7f13ec003fdfe0740bcc8cf03d8cc602d5d808b4bc874f34944a65b249997a0000000000000000000000000000000014a4337107e716113d8ba0fc7f75e85edd1c132e2b3dadb3f9cdec1440f261513646525314b5c0de6fd372472aafe877000000000000000000000000000000000d472ee0484ed831f8ddf7ad86faef5443df8b943c6fd4c3f94c8d52d9eed6fbb53107170a60f25be52219ca4816788f00000000000000000000000000000000035d06ffc452c65a31f80c3f8a0c1e2d15e32d993ec06c50499bc0fb8f669acd3d2182ba23d942489ea922baf61dd49cd2918ddc2bfb7f7cb3d7e74b43b9a972c5b51ac20ea83f41d5b51034b5714c0b000000000000000000000000000000000ef1f5f6b3041939557368d613279043d1aceaf5fee3ed90b3b756ad409d700fb41e62b3758c8c2d325db7a37f339c610000000000000000000000000000000004d66040a8e055399bacb6a1e762b698afbfabf789caeb957fb7a3dccb01d7dff5414e90f5a14961c4e980b298f834ec0000000000000000000000000000000006efe9e66078000c26d375e87ffaca643aae9cd3f8337f5718e0e268b74f4b7838f7661dc0ce60f557e162a21ff467160000000000000000000000000000000014ab782a3b2c06af7e9c2f28f1604cbfa8a676a874853bf38195780751d306936cefd1cc38c2192cb756e28793d2abb3e9a8159fd7915c15db69355514d9dd26c66fbd14af969ee576401b1b782fc6d300000000000000000000000000000000057270788a199a894b37a526a26bc4d293780d365a6b66247e7417884d543dd752ef7c89f2f4b38f4b51e6f9d86b45ad0000000000000000000000000000000000b59fedd6798487ec09d226a7406b27f04f7983075b4659ca6a78c6bb8aa83828fafdc6488518e2cba6fa4193de938c000000000000000000000000000000001105c18d92b4192833302814ee9b176831e57fb64b703ab3c2d3f440ab302c8fdf7ddc81933d3b1adaad16038dd6dc1f00000000000000000000000000000000020509b08e6ed980df29da649051c7095edcd4eed4ce95cd797da430cd09062a110bae21b6f73daff2053fc0289041fac818ce6e33e581595e83cf8d33a62edc26ed38c22f20c6949a94e2652bb954cc0000000000000000000000000000000007be348ccf6a76827d3b9b33e7a89378c133c9b226e47dcb205ee061423ee6e1b838bc262a7befae7c15aa385ced00bf000000000000000000000000000000000689787c19192ad55b9c6c260a5ec3aa203ef71f0b746eebf10f82526c4fadaa8570936d7049c1a46e7f3cdc455a63a6000000000000000000000000000000000306965b09678d481aa4c754d56a0bb4565f16f7523cd0b404fbd39dfc3b6ed483f5239fa30f13aa3e87918ca039d5ee0000000000000000000000000000000000a2586143f9610a96eb0ef86593988770db5ed49663eab72f8c368b9388bdfbcd02fc6bee09f4fe055813d140ca0fa89ab338e94b31d22947dbeb20fce3150127249d2db6107d95bdd032eb24c49645000000000000000000000000000000000018f46dfdde786a88e582ff6addbecb4f58e12c2625e3d6440f2e5b5781beaa95cad6f63b7d132e84700e7bd344fe3200000000000000000000000000000000185a4fc339a95a50551d53c18bb0dc3b74e9c164729c2b0d919392f7aad2be3ebae3b8f676ab81ea05233b3039918ab50000000000000000000000000000000015395b020a9d0bb336066c1347dd91c557b6ae7b8817cd8a2cba9e5bb149ca3401d661227c26d52a9be234faea894c8a00000000000000000000000000000000103d9d7e33a0767554e13b57dc756981488a3c7dfcc026ea84b35b0af21193e301226cb5a4760962707d19a95841be9296acb797236dbd0316fdd355f07b9b45c9bc626f73105e87c376af4d7dc075d30000000000000000000000000000000018359aad8af59cdda484232b885d1b14956ec04b5584684b13a64d97b8310c283e5d66637dd75de405f5f4bc65a6879a000000000000000000000000000000000849fd55e4f3d4dfc643dfede6356826eef21290b84f7e8e226deabbc84273d95f7be5479e9656dc907ec367a7ebf8f60000000000000000000000000000000006ee01b54eb7834b4de53f821ad46f467cadffce6df09751b728d0952bfe615253d7ad173892a52c6181810a815bd90600000000000000000000000000000000161472d45b56dd9fd276fc607f2eef84c5c843ea05799e732d7eb6dce96c632335949e1b3a06815e410e919f4cdc3fb360bc12a8b34e717b2c410d026660c14182250d7c66f8f88dd4cc94e550421caf00000000000000000000000000000000107ef91cf3a3068c4e5644676f7bc7c5f9ecc361524bf3fe2ebfc606f22f8f83b38c0d4bae89f3cdff6119cc27fedf820000000000000000000000000000000006a7f7cad2fa9db8824e4e30da7158f7737d2536554b904ed835c37add0341c07c5220db0f9801da2587a456300c7b75000000000000000000000000000000000f6dc3adda42dbccb1d1e3fea8918f5572e8b26ba3011429e754edd28559b731853761d33777f4e767094f80e63d417700000000000000000000000000000000107d93537a79173ba9367732fa3a28113ec37e053cdf31ce6970dedfa8a9b4cd55238289be9a6f40319e3dfedd132f95537f0f732fee8b882d254a81704d2310c05dde186232f3cffc05401fa98302150000000000000000000000000000000019dc19a1663bb05ebfc0b7cc23ea9e07376de413f77e15a685a3f11fc19bf0ddf38d5671e2a5e6e31624cbcd47a19cf60000000000000000000000000000000019e78aae57f327fbe8ce794afc22bddde08ff9bc9ad3527601cb1fd5dc0b8ed8fdf3b210f86760954b48bf61d74162220000000000000000000000000000000013954a533bf871e99f4a7d81a8b9931c480ce7fc47260c3708c590ade42e6b7bb887d4d24aa18642d010a8170cf85d34000000000000000000000000000000000a561d3f64ba31a6d45ffcf1bcac95f8f665133a1e962e31351ec78e369042bd3afb0c43d12b3087168c1142107241f31a22bc0bec2501a505cc8e00a24792bb380ed451ab6f56fde07ace8b6c9348a20000000000000000000000000000000007149094366e29537b0ad7239ce04bf49f253e4b746b9fe440dbf9b425bfff21064fce66e286e08c87dd83e22a3b499b00000000000000000000000000000000045ead132e0d03c842656cfc82a45c8b4a3b0cee7a5d071c5f235791ff7b5ead071b2c529b446a15aa8837aafc11222d00000000000000000000000000000000013159458f2123698ad4e7d41da47ad7d5083b928839e346a32f2307ee69f643ca11335d50e47d328b0079f1873cc7e800000000000000000000000000000000167edcf807ee723ba70e352367705448047c6b5223fe703381af6bb103cbb24da739ed005b14fab5699fbae6574505a7c7b10c801fb9d929432cbbe994b404d3baa5633628f396d20d047fe2c2ac2914000000000000000000000000000000000feb6f6f85903b3c8e4d6ec2ff234775f12727fdf7c35eade09c9773b004270f659b00248338f0b749d6715778f1f4d90000000000000000000000000000000003300794df19b9e472e8b869a2762c07a9251cdb96b508dfecdbd62fc3c3843b37118d216a64519bc3bdb71e40f9bd700000000000000000000000000000000005fa144135a5d6cf1c73055750ab6582b4c6d368566172b75902b1fc7a6f5de2a251ca7efc7ac6cc6c0bded14df02b700000000000000000000000000000000004239a7bfdefbe78116a588810328024b1bcebaf8f28f09387dcab66dcf2b02c94002df09d12db369fef9dd960783c0b84f2f3f31d9869799ed8bfc2cb129dbbeeb096d771730ae2863c4ddece66158d00000000000000000000000000000000007c8a24005575a3098c12ffa65095bfe227ee59e5e978a7ccab7a9a72391fea61690648c102ce24af723945bbcafece0000000000000000000000000000000000323d57bec7dfbb4614c8c3b286860fbadbf71901fa006149053ea614dafd56b1f3d6a86fa55bf1cbdfe8af4ff08dec000000000000000000000000000000001180b2b0b9c4c12f6d06eec07bbf6f5a220722015fe5365d1c4ca9e58ac9c8f67964d8230152d7a2220575c756bdf8b0000000000000000000000000000000001969a364c447f07d0820586bade587ccc816e50696aa0c5ea4f1daf6cd577769a890b44caa013d93e7f21f5ea269aa85c62206fadb762c23bf77f69f69bd492674bb92edb39248ad2a432f819304e6ea0000000000000000000000000000000008a51c01c3bbed13d42a4da626a8b89e2811db1d83d7de3332b36881ad14a5c8668ece4f5ed2b71204810457aa3d75cb000000000000000000000000000000000658a56aaf627e3f776d3f03caa2c00425bf197c6fa20c92f563f48260109a8f935d0d1638f5039486ce0c0100834fcd00000000000000000000000000000000126d1964f2d964c290cd7364e175ca4a855149e5c4ba488829a436b09ee5e21f6c964e439739f15317873088726bd51f000000000000000000000000000000001803186f88833393bd853970ca4fe414a43b7a619ded1f9c830444b4d43a94e9146146e2284d690436b395bf1e3fad15a6f950de53d07fda75ab43f73982c2684edb06317568df15b8712dff2ef782830000000000000000000000000000000002dc3756c7f4bb47559cd720a3acf4159290d7413e0498877d1fe321cbcb7cdda90b6c8b4ef8e27b2642b82ab9b3174d000000000000000000000000000000000c7490f1ccfdd91aa37a3044d265cb0612bfd9c065c370adb813b2d96f02d44041e79921d1b8935dcdb8c83ea4460ef30000000000000000000000000000000007beb34bfb9ba9b6fb590c7e830400888095d1958b252d187c184de91f165e12599d66345341292fdcb662deadcded030000000000000000000000000000000001ce203d58bebe1eb5b7cbc6038f75b2f7534bce9f50e7e4c91d6cc5ac1bb68d9fd8ce99206c5ec92bcabb71672c6ac195a373fab5176d124f783a36eb2346dddd5c4eba9e24e4c0cdc4f925e2e24cc9000000000000000000000000000000000765acace3e238e51bdaa08c0f6d737c9de55b5ce9ac3523335f0d35bfab6f4e7e2944b8aa4ee031ae9d39d4db96e9ac000000000000000000000000000000000b0fd488a6f9e92c4bdb5e82b52a0035f9a0aed7f69ec65303632017669f34d11552f849326e4dd204d58f50f3ad124800000000000000000000000000000000033991f66588b5e39eb78c7cbf62a74bbde2fa1b7c96164cb58040f0887c485b372e0ef4def9d38da9c6f5c4df2d59a700000000000000000000000000000000187d41fa7905739078d2c2f8775394f830d20352a9d91e97568c6929412f356009239bc9e1da3a8c766e89d09893b5b5319d855218eee020f9cf8e4c0b6004902f0b16eedba8a1c911476af34f65dd40", + "Expected": "000000000000000000000000000000000dedf92894c567ee656051a7f02384edc7206152af6d3c5f662ca02559a3cc349c6b034c6fadceeccf652a396dbec6c900000000000000000000000000000000089deb173bda620678247a7218408594efff7ab0cebbf627b93ed37e553cf944e09232b92afe2f5f31d29bb9ae442c26000000000000000000000000000000000178bc39b2ca8b032d3cde53d2da3f8797026d78c76c51381b377c79992f027cf55ba4e182773c99c99ea6293a948e5c00000000000000000000000000000000195d9cb91537e77e7a4be4370b982b6d36190342ef6ebc2250a9cc8ef6ef45211736ce1f41da899178c1adcc4927a9ba", + "Name": "matter_g2_multiexp_95", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004638ececd7f626a069b1bc3ad9d0f7cc71e5f0c1b11711fbfee1f81466b574f7a11de8161e55eb574ab367f56b9d6480000000000000000000000000000000013ef4f403f139771afe7e97815d3b3777818a3054d02125d3a25138e504c8c2c6696061572322aa19ace9ffd8e3ff308000000000000000000000000000000001910f776582f5acbaea626d2378e9da133b63afa087f25c2cfbcd1e7b34f6a237f2e9adccc303f9d5efe22496ee2ab75000000000000000000000000000000001963bd62098614c4ca2fc2a9e2d679c2b74bf9d322d34377cc63c3b8e7f8a4eb7d6d440d081e044606402fb3f51b0cee2a397c2f19a8c4e66df0e062f179be2f45a0c5e104588222a1a78447512f299b000000000000000000000000000000001935ecdf4f21cc6b510321b4ed2663e339954cd7399b9d67f1d9e2ea7fb9bfff8531f83ab59d3f0546393dc289ab2dd7000000000000000000000000000000000f390b86fb4cd4c1a072a83e1d1198a57a650fa6e94b69d983b693c592bc0c8fcd9a46c6883adacc4c7e2546dcd079fe00000000000000000000000000000000136beae11ea54ae26a8d69015ea7793675625b2013dbeb081a5ed877832849d67ac709b81fcc4fb322b262ec3776c0c00000000000000000000000000000000011f1df574f63f679b6464df463b58948fd337a4b3f159229ba0313cc040303345e75a3a2b0ed0dedfbefa89d8331d074f193d5a575c80a3e7599923bf5a8ba8a48e8f98322d1d8eb1da42e446d518c1b0000000000000000000000000000000001510378fdcde4027999edc99d49bfb46423ceb0d740829e310f8a381a7632fd0d6b6aa3533c2702a5ca76d386ac0145000000000000000000000000000000000bae237bfcc061552ca07eb14300cf557c974611885aa6894f7933f7dc7a0a1cc3b5587bbe1ea5fa604e3cee1db5f7c9000000000000000000000000000000001743207a1814990c798dc3de272a02b1b194a485bf09faea382dedd957861dc15cbf981f9906cda50cce2899785b9a6300000000000000000000000000000000106f902004c66c80437392e92cad73bed6b73010bdc7b6a75de4c01f0b6fbe5b8d1f47378279bfa42b3af05120854ced07f2013742ddf2d35448feb80b6b7aaf2925d3975ce28ed2b1ac789886ae26e400000000000000000000000000000000123362e41268f7821fcd2294b032c6a51c6d80506eb052ab6132267fa248a1a60c3e4eb2e75a1674bee1c9d46d82b9180000000000000000000000000000000006296670461ca67081cd76528446867e1a4905f88742d0ed8d1f7baf86e0a5e5ee86c8b0eeef07c14dd821dee0143bea00000000000000000000000000000000058bff9544e4e02c063158a52a68c93c7544e8157d37159dbb99b51b09e3d8f5b307bfe63a10fa409e20a35219ac244a000000000000000000000000000000000b135edfbf53187004d0977db94eeabf426ad7bea84ad76c6ac771fa186a073d430af76d717070e3c4057a7a2da095984e637a80a4eb1b2caba68b6828aa18f956c62baa7c5e9e591a15156c5abb605000000000000000000000000000000000133d3a223112dc5665e78fba8fc8d040d133858d984e66d2382d5e629f9369dd127e93c7a4da77fad98a0520ebedfeba000000000000000000000000000000000e88515db391bcdeeed2a9f64d27387af0391bf832164fba79100b560d8150debbd703c140dae3ba9b1ec35c1f45670600000000000000000000000000000000042583722c69a19f413392c6a2b75c8ca969be85eb951056d7e1d94e046dba49c346d5774009b8463a40b0576ccc1a6e000000000000000000000000000000000ee61a9eb6ad497c57405a44d798868e22b4fd5b8c480e9938cfdd3f1817eaaf331a9988368680158c59c2801add0a7a27671631f9afd9d2e86f263f5c17c3c11c7f6e43efb6d75cb2cb8250094f228900000000000000000000000000000000020352de9b4e8ea1acc8589bb22e23dfd0ae3a80de9e21bdb3f6391dd05a012e635de9e1f5f450bf4aab05728c054f8a000000000000000000000000000000001733593b94ec800bb59ed97dacbefda5ad882a8023346bdff8f471c5613c67247e27d72cb4ed8cdaa0f236018dd2128a0000000000000000000000000000000011f272a3b25bc519fc3e229211b846042031e22fbed22ecd0d1a4ef1d05feacf105772d71157e3d7293575aca257cd5f00000000000000000000000000000000153b4b4d7d65f7bd13d20fee4812f04706c96cd1a0d27b7e139c47299805e0ac86e8941aa38d90331c78a61c2dd56aa3c2decb1f482f3eb48e7f52b89f6452b659812ef79bb42fb25f03aa9969faf9bc00000000000000000000000000000000143e1f6dd9397f0e89a46c6ec995bf6c87ec8a72b309f050dc5b3134e00e2a16327767cb0573ca5ea9776215a5815df500000000000000000000000000000000186cb3af2cdb4562bf2d0c180079547cfb345cc3943fd7f9203fabbdc1547079cb9ed854f9b1a47f513e318cd409df83000000000000000000000000000000000c8c9197fa5a1e66b371a653c5d18c01fed8d17a8aa92d89b2cbd954b9fd2931fa61abb6676e4851dc9481732c6195610000000000000000000000000000000009026b259e840cb5264f6aad6ebbb09661f5b6d980389817309aef99e4e0cb228d3a7a06e6c25bdb1aeafe5acdc44441911eb1de54fa8ccb746336b681504fd08f995c864a8dae2aa866862f81f0e7850000000000000000000000000000000007bceb74ba86c07d0fca20e4febd3b12b1fe9f786c9a5da0531550244f40261d7ce728498fbfcfe16cc235db6ed42e11000000000000000000000000000000000883104ffcc0d040d70bda04dcf67c1197c39e200d4d9daf5f3c185638a13dffe3dcac94fce4175187dad867e8d2b78c000000000000000000000000000000001404e48e86f199486db7d40076cc8dc4e2aa2c1b6d4bed8f027512e2c71817905b26ff4f0551f9c08a2a7a27b2075b6c000000000000000000000000000000000b789a6addb98ea43c0f9e85831a75b8ee1977936c17929fb45d4c06b4f1ec33b9b41e32b52cde542c9e4b64d27c686cfd0a61dbcb0c657e824cbcf4670a31a95ecbd47a9b93812cd5124f3ac9450c1b000000000000000000000000000000000654e7f3985bf90dd1e3169382690fdc0f804eb6384ce407a060f539804fe6e0451094abaa0dad611c15d3ee52f31a92000000000000000000000000000000000deeec957d58a2246ff8f7b7448f5198647576c16c1717369ad155ae36d5a6bdb42c8d6a1f0a095891fb0890b6203f950000000000000000000000000000000013a01a6ca4c296f59cfa4a5f5399d28af76ffcb8b218c861d5e6dc603e140f730f632028c8da46c823d87bff5ca703280000000000000000000000000000000003698f659e86b96613ca74a480c81e749bce4b74324976c1d241a0911d078926fb2adfcc3f901a7a015a02f525ddbb808118e9c70cc5def8e7d258e05273937c514131f39e0cc9fd2a3620dbffc7ce3c0000000000000000000000000000000016ce72e1798ffd84b52ac664a184c6cf5ce1ca2aa263c9d056355cf610517e9c7bf7f057c342f6e3ae801b84c2082c0f0000000000000000000000000000000010992af1438eec10881b5e2e3fa3b1e91b6b5313ea58dcc0cd2159f8ba6ce5912d81b38956929620e04b3596f6835a6f0000000000000000000000000000000014315dbebd532d0c835e8e85a02c0814574cf040a20c18d06573718223c8ea15b7ea69f0cf342dd09037258398ba4bef00000000000000000000000000000000136d13a83e72525b2d4af54d14d5e21d8bd9bed18543836b02ae0a7e51d433c93aa1943e85f978a8a9ff4454d8c5d120c445931b79e2b826aca02d1bfbb00c2dfb6d30ac2ef97a4ded18243b1afce7730000000000000000000000000000000002c1bf7dc75006c2941b89a2de52fdcdd1b4fbda5b14fe3fc165915b90fd9d93cdb8105898ef59d5b374707f0afaccd600000000000000000000000000000000049a16efcf81de84e443666bf990f6aad2145f9c9c2c61a752e256e8f447dfb27b462e4553544971807f909a666af12f0000000000000000000000000000000000aa4702fb69d791ef958826753d3f74f61c7a591ab94bb6c1bd5d82d94c5877121ecfc1e769d0d16ebe491b775ad96e0000000000000000000000000000000008cd7f2562eca6c53a37382fcdb04be53998f45c2241bfebac3d1fb08d8e1d4df3182f2bd63861d0de72d58072356ccc982ae6de98df906922e660d461009ba6c04cc6497f3645a66385c775b21b210b000000000000000000000000000000000a6b30c4ddb692ae33c903693cdba00ba48efa48e90b9cec9dc747004e57a8d5a05b5522634fc0de306d38c28390dbf4000000000000000000000000000000000601341b3c4057767a910bf30dd16324ad7abcb55b7e98e73584f26d7f87d8a8d24ff2113c12ceb3077bf65e0912b2360000000000000000000000000000000019dc9c50f613470abdb5c763c0272e88e34ed38e617d6757f4e70d05b8ec9f67a023b4ec1363e7e60e38cff64e18f0510000000000000000000000000000000013fb1858f7efeec5fd03d9f7f4513e3e9103c340eee7bfe48ed3cd3dd073b96add9450a17f12e161f1d44669b1b2f813000674ac5d09c6c599173bbe9a43726c120c3a60a96d43954727a2f33ac4320d000000000000000000000000000000000d6c135bfe0fc7af93571a69b7c37ba691f051d69582cf159cbeb0bd59b48342172a82a3eec2e3d440805934e1574f2a0000000000000000000000000000000001b04e56cb3bb221caedd3582943f89a33b955f624f9e473941f1dd987f2898339142a654d11d87bf8bd2fd0fe0d4c1a000000000000000000000000000000000f185fd420b761a1e38d542558b0beffba916f369b37296fdd8878a7c3d2ac9d3ab1d8e45ad799f0d81bb439b5e5058100000000000000000000000000000000002d10ce460c414fa1094ef2b7de8f1ce024b6d086d10067be0fed4e45dc25c8e50bef361d39a2743be1e1ea4fb7e2ef773f8e9637886d795b75e7ecaee512005c1780e7ab17b9f20ae9232595478bb2000000000000000000000000000000001972ea36bae504d7047639ce6e0e6c3b16afe89fa3d6c6b33c910c8d4b70782d8165912e5bfbe8bd84f78f9f23f7f956000000000000000000000000000000000ae55c4fc1c01f1bbdb060191e8551a7ba5ebd3dbadd138202090d7dc6765fd1ef5fe8204ae76a8bcfa03ee5985a35280000000000000000000000000000000018ebed295805e0fc14f1c7b0e6ee12ca48cb7177c1d367a613e0d6cfaaac5128fefce0e8f38d4e2f11ae0d327be466a400000000000000000000000000000000157068d89fe48e77e0f62e3b5b0293423f35c5f4ffb9e0577f5aa49e91cea6bd312a0e65ec08af9c1f53de6499409c8d759d0bab12ac790cc3a16e88f1a108e670681f117d4fc7d01f8c5a2d6ca7fe8e00000000000000000000000000000000120e4a8935c08032dbfc19a43e2a770b12b05cf1dc229e12f683f0d7f604bc13666bf318fcc38038b618ef83c9448b870000000000000000000000000000000004e3f851be46bd85f37c8b1d84507f4ed63ea76bc305cc26a6f4cfa2135d5affcd3b319d9f57619e21c964c6246fc3f600000000000000000000000000000000138733f352029373b19e1c40d5958a04257e2b344770e1bbb8f377bcfb1c7225ae7a8b0b0e57795ec06a08e13c90d7de00000000000000000000000000000000093e85783c556a017829e28bc42b607b1035890fb9743bf0e279df4dd8a695c1dd07a76a213087c3a8a7e614b29b7a1ecce865074a8a41f8a3f40228046c5be68bdb50ced10bb73ac8472f0525302938000000000000000000000000000000000be1ae00f9ba0a2e57f94728508e0029b1bafd52c91ce718ba41790a3541117d1a9f846d68440978cdef016c3b9ae422000000000000000000000000000000001947683154204c9fc93e3aeac17b417453a24d01804e8acbf6f67947f5962dce875f49d05e6ae65384602828784f852c000000000000000000000000000000000859dc1c00b49cd1292cdc65c6aa4b11e27637b949c7db508930c557ee3ce00f98f9cd3dd0f6d73a646d176a91d75c070000000000000000000000000000000015a7a6984b5f42aadebba1e1f4682aaf1a2d01c9ce2afab7fed2269373467787bb1361b493dcdd862180e9159ec2ad5785e2f9597c9b687150864e90ab042f4f012a54d92cf9d2ece09e4a081ec9773f", + "Expected": "00000000000000000000000000000000047cc33d9decfd059724bbb014fb9cd95de187e2dd29cf4a9bf9ad06d415e2cacb5a4e49266c13e0c38f2563d1a21d6a0000000000000000000000000000000011c79d93fa870d541e79ad4037c20b85d3cec053587f9df60dc11e7dc2727d79059f75bef76474c09fe61ed10b317cad0000000000000000000000000000000003df3f0db20c5ffea4dc9f4d9333d76141447bba50da18e521e89aae1e63750c71b392570d79e597967dfc9952e903c60000000000000000000000000000000014e83ea645b1019ac2dfafe370f616af0c5baeabe217ac1f9ecf78877717475b25911b339557422526a8163434439923", + "Name": "matter_g2_multiexp_96", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cd1d25f285c2073175ecad5bba4987cc52012eadc7b19dbaa20fa82d7a6cfb8a52f33469b6308d921eb4b3b23f7022d000000000000000000000000000000001707b67a23d9212d30c06f26f0040c38389b185057e80236d2c828a8d9ade4f72eee1d6eccd78e4f4d71e2c28ee9539e0000000000000000000000000000000008e5c04effd14d915b9afc2083afa2b6d4008cfa0e47144a41982d8b5a8e77922a2609384e2c5d18c871ae24a7d505b7000000000000000000000000000000000f414acb056fff2cd6d9b408adb6eb7f34c8f66a66ee93945a3381d46c2d181613047ca6d4067614c190da444223cab685431a1df7678e49ee049b75ea968ca255ef456dd58cce57b64edffac1ac223c0000000000000000000000000000000008ea841aced2d0b8dd688947648a8ff18d0f6f03f63ee1c331f126dd4fc0da3d386535156b80902bdc1f65add7769cd70000000000000000000000000000000017a32ad2763d99c38c954f62466e78c0332e48875e15afbbe9c78376f1bab12346c73a573738353e2162d3928091dede0000000000000000000000000000000010ea738884dbfe5bc35d031bde9aa4109b1fca529502e236aebb5ad0bf71dd2f3db250d924415b0bfca56519f8ca5d290000000000000000000000000000000013699e29cc1871f51a469898be8b3c732b5cf7860286e655e65bd8176832804d17b48d0ff85eb023360db78162581297b6ccbc0b600f11f1b89061d94c6fbdc9b1d389244fb29a5d140dab8842d44eaa00000000000000000000000000000000004d504e62b2825651381ae862fd33407309851d5291591cd0f541fd092800d709ede00a9134e65ee752eaceb0a344b50000000000000000000000000000000016481efba290c37aa4ecbf940c76ee5df199b0c1f90fddebd2db28120bb5a14dd9f4a067b6d4889aeb683cca0f6ab337000000000000000000000000000000001400c89942cc63417ca4cb05c9d81dda3251e5611c27fc7727c3e803170672f103bff26f7216a0b646533aac3171488d0000000000000000000000000000000019889641be9db08880543ff476b9d4c72167092548ba49a3f3ace4518d3874f4f7993ae7b8cec90f092f144ec9d66c1a54dfe31190469897c30ac3736ab166220dd3702df5bc897835347713d03a8d04000000000000000000000000000000001927fe80adc6dbb581349c603103ad8831e645d9275af8669939b83829182cc6e2a30df2fdeda6d3aa2e2a6126e00ba3000000000000000000000000000000000b6d7934d5ca1098a85a0c60acca075220105e221b802b1be97c2967820bffc2937fc3278ed0f26905c60d44d5fd8dc000000000000000000000000000000000057acc1379f23c0d1d37427d400eb1b0a89f3736c83d3ffd797ae279e01e2acddd84082f13f3c8b8f1bf7c275702a9c700000000000000000000000000000000038dbcd7e08d34c553850a52336991a7d48968e98057e930790d78b5c6368eb2fe01571b60c4aefb653ec04122953d56eff1ceff9e5184dd9fea44da4f07529823dc9b100f776cef6f6881120f7de11a00000000000000000000000000000000014052031b88af979b7edb06c99c2e46bd9df2c862c7e1b71321754841fad67fc3242b51141e49ad86b61344aec913f40000000000000000000000000000000014806a86d078ee9bdde99257b67f50dc2ddf9bbf01dde931742ee6f739aa986cfdca06cd32d23d86f2c14c3b09033d29000000000000000000000000000000000e0561e795d35ceb8bd9e3b276406ec1f697a38ada25d1dbe08715a28bdd3d6ce6e0aac01f7dfc7c2b403850ab213b4700000000000000000000000000000000146a65209b09487e00e356e3b29952280ebc6a06343c4ce14efa0c6281bc2482698bd02295bc35125275ff5f5bb867dfb273e4c6266c1f5cf022902fe1310d2191af91c47995486342bc61cd361eab8500000000000000000000000000000000021592cd7f4cf9cab3be53561c889c9ee865961aad51339f6393dd6a0b7dcc8a7c48b753c947b15cd3add01abd3d76d8000000000000000000000000000000000f9e1a80bad58055a8577700c177889c4d702de04343c1202eaed9485a76493158547b20bcb552b66c42a0c86df809ed0000000000000000000000000000000013908dcff1945cf06f038e3caac9a7fbb3a6466ca18627e93468a875759a2b5599a96834ff21fcd6bfbba82b79536b9a0000000000000000000000000000000001b6354665109c5a64613c3bd7d805b3a34098708f3d41c7b77db031ac6fa0b2d4e2f2f70c84ac78687b0c0f9bf334771342b5cd4ad3179f406941ef6ea15d0aecdf9f6d96dc334c39b7dca89d256d4f0000000000000000000000000000000019394063202186e141dcebce7b8f0f267ba6057a0f993bb1cbe22a5bc528323823bfd1597a87017d478186a18f09a47800000000000000000000000000000000148437bcc43d432d70b47dadac8e738616c97d38d0f84dc132599626612f7bba74988bb23ae47ac15e6f70c059d607ed00000000000000000000000000000000180851594710f4bb5be7ae0104a383081c50f59e4e048614660ab5a4e2661e171510f5b112d8cf97a6af27d56d137c860000000000000000000000000000000000599f3f82f29b493ffe9ee3a8363b9a599a5ef3c9c5c680d4e003f4ac5a7de0562cba8e2a4c6da7d07cbe86c3f7bfb85b36620f65ed84fc0bb344b4b73f4eba4b1680a47b28b47f6d10f9ee82398125000000000000000000000000000000000cfdce7997601afbe484901893a1b5fc0b83e8d238d41d2f889a58fd4d884df1c667a000b53b587df2c42ad46aa2c3e0000000000000000000000000000000000c50bf3e06400cb10494cd09bd89f3c96ff49c9f74dd5325f9489ed6be13b59bd7b0b2351411ac854d430405b8a2a3de0000000000000000000000000000000001db313a34ca4073e4fa2287e234ac32bc579742de22e5218f7873b922f5804894826e6054925a394f125fce850f33ef000000000000000000000000000000000e0627a66d286e8d4d3654b32fc5f552a7ca12f0bd47eb6dee0dde22ee48165247c067a0f4c3d422bf3562d38a3c0cf1249ca9bcf879a770b0a054422a6ea97ae795118ae45532c1523c842696de6d170000000000000000000000000000000005285ba39f5bd981fce2fdf853706d70992acab2dc6d4c4198144fab397392a60d631056b580d0d98f3f350414ce554e0000000000000000000000000000000013bddbc1180f155872376fcdfaff2fb12d3d9645b81bd1475a5323ea855cea820ed7eb693791caa9bd3fa5c66036439700000000000000000000000000000000125644d32df397def58dff875d7e3f14166e765ed49a3991f45b38d74db3985fc7f5052058d85594c8b97afcf850e11b000000000000000000000000000000000fca4662eb1b39f576ee820385fba88ddd2fc01fcfb9d9f874453ad725cd5defb357be028fae97ce71bc5ac26d11c1bac014a0aa616e809b674390b4553bf2d9bf325e73d3a935eba94488dddee4e8950000000000000000000000000000000015b97d7c74c8ec102083b41d7ce5490466e1c0e261b5ea5c756d3f9ae79dd2d8ec6eb5075cfb76dfcf7bfdd80442f7d10000000000000000000000000000000016812f845faf96b8b69ac7a6af3c8947aa25877199e3c12552527706a17b768bbea259ea61ea82c4624a96cbcdf4040d00000000000000000000000000000000123ad55e5cb5ac5bdd3ca0a5afa7c3f8e4b98ad91a205f073fb546fe799ffc57b3c1c3a6209547ffc6ef05fd24be6f5d00000000000000000000000000000000017719f31946aedabe0e9d88ef3f90eb6ceda884f5e3d2ece368373785b2d8bf0f9677731803b25accfcb6cb716e0aa4ab722a1c20f068b6955a44073914c418a082345796912ca634e79983a24ec4bb0000000000000000000000000000000000497e3480d58027c780f47cc35a121ee0cd76c4e84d9a2f9002c04a1c286be990167a0138049ad70467132818f48ec9000000000000000000000000000000000ec0ddf938553105400f70989140ca322d996f48ffb1b35641ca36a6ba9ac1daac1603c100822f80cf62ec3bfb442158000000000000000000000000000000000a0b6ebee28a792df46d2f727af812c15fc91a471e0d8e34b25b26048f3b9606d8375b5b268c40fb04ef8f098e1d03340000000000000000000000000000000017843dd19bfabbd0cfa41fb58e70a8900397d17ccea783087ece90962560f5cf090e8d9eaa873a6a6ebac45219ea97a68b314f83cc3ad501caa44b4c3ca8cf68c70ff6920f445d3a7ada212b6a19ba3e000000000000000000000000000000000b27c82d71f7e4aab9a68596669596df3f62071e921e131ba4d9e59d8d81d370e077e93a4a6a43e059661227f40b38c800000000000000000000000000000000093004917ceb2fb4a1b33960ff74943d520f86e83aa02b9a6c85e4b9a489e9331863cd30cb6ad6f099d03289b4ada5520000000000000000000000000000000016f04e35186c7deaf730708e1678089bf3e73c1164bca24bf8f70c4f6cccd5bbb34bbb5dc313ee428aec4ac9c638a01a00000000000000000000000000000000011052348cec9dc3e85e01abcca5a652461f08a9f5d72b3fc27140a6a571137f0065ed7ccf9ec8cebe314ad9a214d5ed94ffab83099c69845cc87727d459ae300a5725ec53176424ab0ec8bd3f80eaff0000000000000000000000000000000007083dfb0738d58ba8933a1f60283e5da8bf90af5aae4053ca573ee7223d3b80e4bdc30b4a831ce6af9f52f393e9742600000000000000000000000000000000130c627b7d3a527c94cfeba9f514e75eac047e1b6088c082229a8c95d0765a0898ce1e45694ca2c7935bb8e41e44e8b10000000000000000000000000000000009610645b074e652a08f2b89dbe594afa3009d795ef211f7c036a56274b1e1bd69a035c4f356b6b21f69b9cec2bf7c32000000000000000000000000000000001020f3cdef468af700269aa1e9d928e71b8c521f23586c9b0155314f0073da7de04ca41ececd5edcc052af72c05f0e4bb1d80be637e2abd98d0433150e14b629d98fc0918c7dfc179204669ab465e90300000000000000000000000000000000123540047f0768b0af841aa4aeceaf3dac31ea832daed86c8cbd1d33ed0282c6f697d5881f9022af032e90ff82efb6bc000000000000000000000000000000000113daffbe413075f5f4f6fb42f37b6e9d5e5822aa24d6f865792f63e6078584246bcf8b17117385db1d6233974f6ed9000000000000000000000000000000001067b46fd221b6995d25d4bf0adb088e0554d858d4e5d9d6b59e1ae2a7d57188d559b0208918a8944aedd62b1ebd4f4700000000000000000000000000000000087dae77e483d5c0baa37b9b96dad5ca92b5869fa253bffad24dd8747446f7ce60858b52438e58233210d86f470f765fe670a57ce4dcfa680e60ef33ba99c437e4fdb160ea1012de36f4b59613a6af8500000000000000000000000000000000039d09a094d655c139cb9714aa258d9548473162548048b0f07c9317a41a7e5dbaa5aca156992c8a509d4071d9ae4394000000000000000000000000000000000f0273a38b1b9d006efa43c15a53f026587a676912d0275968608519e97994ea9c6a147e377f68b1738ebeaa178f9c1000000000000000000000000000000000132cd92417578d2e46884f1c1a1080b1916c8c8404d2533a4de02bf8575c80ce7e8097c2ddd1f95737355521c0ec21ce0000000000000000000000000000000019adbf09a268a3ed8eff936d25fbe8af2874e44d2580c7941dc14fb89c5da963b468a7088c4a763eac89f4d15deaaf5e54a999fdf391d3944318c54680e69b58ce3778683b6f2c607d64450ed32c6d89000000000000000000000000000000000756dced467ea32c3c425590b7690a45e250e464ac6927ad3f5d2d8d2826961b8dd7572db609375c8d06cc3b9bc3a157000000000000000000000000000000000b79b4eecbaf1d0f8a89f9ef8fc144b3aff38148ae260da7c20e9dd3866d946585df7ed12c8b7005e7b0e1387c9db41d000000000000000000000000000000000afc403b008b70e19f17b1ef37c9c396577a585b6c34b23d09621b891efc00ef9460c3f4b5f3e851ef63620dc06c824300000000000000000000000000000000024e06f3f3b18c026a166c41f75d7bcf699480f5b6811463c27606c9ec1232fd249a46235b7f5b5a2ed3b53231b333150563ae7b444cca7ebaba36b8d59aaa5c0e6c1454a4a2907866247e752e640a7d", + "Expected": "0000000000000000000000000000000004f2480d0b7e84a996965b76055f6879aab5bab26656e4e5ca7220adc17f14b5946047484327bbc5952d9f2ffa5f92af0000000000000000000000000000000002f7260c55c500b54df4391a55eb4adefa7d19bcbec82a107fc0d222c898b97360a679a02ab3023ce2ebdcffd125ddf30000000000000000000000000000000002cddfa94c8f6b3f29c2fe018b1f8679d0e98c8c2656f86f327b9cbcba574cc52643ab423b458994a03347460deef6570000000000000000000000000000000014eb4c84f71ef5935e707a11a92ba34780677ac7eb198e160585ad92aa5c1ea21e3a77be940fe344e7e170680e2a8d53", + "Name": "matter_g2_multiexp_97", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c2c4c039047d297049afd0e8f0375bd4294d628d3a22078d93b684b737e8c4b6ad3ee544ecbeaad6b3c75d8d217f3a20000000000000000000000000000000004c77a2c0943c6f997ce2e785461f8ec253c47273ded4e1af43ae882766ef8c168e66d831abc2b3b3a0849bbc210cbd40000000000000000000000000000000004456a6c267a5cc6b7d9a9f573270855186a1b621cfdc465fe71ddb4d614565d9d36b13985b31396587919226843c6230000000000000000000000000000000009487cdd8a0cf7f40e9087fd3121cb480730f4302339d25fa12128033239662ed65579a59b837bf1bc5fa87db15b15335b59d128b5ac47106b4114cf225dceb621d177141ef5783943f40a54ad94e990000000000000000000000000000000000ba43205e8392168824f77bac344d60c1a9a0b14ab55538c3bfea4a64984cf381a2f61c64f1ba1bcfd8a7973e43f6e80000000000000000000000000000000000e95e5ac415c3e3e7c9feb6e7a2af3e8189afca06ae1fe54bbeb31783810860921ab3c76a475fb227b3c8299e3f1caf00000000000000000000000000000000001e3cb2106a23e77a126013087751c4d2a419a51beedc3a33faa6c933bedb3d34ee9c6450c583642426edb352e04da98000000000000000000000000000000000ab5af4c98aca1fc3fa55355351d12f3bc639662bf8b5b772152988d676b00ef39f767237a2fa3be936e83d1dd77da86a057c0405e24b7373f67197b2109b633a02589711b6a92ff49ca024f893d7ecc0000000000000000000000000000000012f3d927316ba638bd6294f7dd2f3f166d20285ee1662ae4dc145835704a17127078343d26042a5c397bfef31754186200000000000000000000000000000000162893d6252361c340057bcac31986458b8b55a8a4283f5a06ce1730098f9838dad1bca264374e7261bb9d08c177c1820000000000000000000000000000000017264aead0ec41a079827296f3d32c12adfca7cb6c674070d54087438d57b6ccca4822b2337263e60075d469b4ce0ccc000000000000000000000000000000000480cae035bd3bf1b4a4a766bcd5f188833e9587e1aff0e1f10e36ebbf2f3ae76bc0946e7c336efc3ee00bf42e7efbb9677b05905180182427efeb848b2ba2eafbabc7519ab33db14de0746afb607191000000000000000000000000000000000d13375356b1518e37a13b43b7d192eb74bd69636f91c570c41a741a8763c03caf8d13c7364f57c867a4a3983e88060f000000000000000000000000000000000f6f78dffb404faab88ac7373e0c765209c0af80514d438e18393bfcfeb60d9a5e13158d399f43162033571ee4a75dbc0000000000000000000000000000000010c379860638ccf3b6cb8479aa38881b0004197e3e367a1d5ef7c7fcf075689d283b87022e2825b5c789ac6a448467320000000000000000000000000000000002dc392872cf2fcd8e196f10c1ded175300070e4e38aa58c89c81e1aa5faa08d770a5ad90a8295a890551f9329a13cee53e7f69582f4c106ee5bfccba1d5f557736c1b75b6e3777cfde47d552e6bdcac0000000000000000000000000000000010383a21acda7c8f3f3be980bff2d57fa0a5b2dc424164dd2ce53c0b20ca399d6227913b7b550462180b01c231e4813200000000000000000000000000000000078aec90354721f0a31e1377b3652bcb1f388ab36f1866c955f3ea8dfe6ac2c25bc4cea14f54aee71595c2c1bd2dc4910000000000000000000000000000000007dfeec77213d952c183452b98ad936e8854608d950c0c1451262cdc7d6de5aed0db07a8d74b3e8f674967cb4839c4d00000000000000000000000000000000015c09e4ed2ea76d10d196f7a733ccc272b94dc436d6bb5fafad2fae4a96372c2c6f1325d1554746814ae292d8e6b1e3634c87bfb629b817e7ab97def7400b0a83e47af8d628787ff814733fdf34ba8d500000000000000000000000000000000138656fa091cc6613b1fcff04a3efb4f9c393985b2c78fa838eecbbbb8b6dafd88d9c72441f9bc735649480b5187acac000000000000000000000000000000000a35cec4819ca3321917cea5aa589db8cf61882fd1135031dc41a8207a8e71d326312799291b160a646148c382ed086b0000000000000000000000000000000005b6e4c02c9c54630c96271073513cac3a42d47a7272f62a21c7ad4c85c19b60b70d04719626cf4273f6c5691719931700000000000000000000000000000000166a20da734a47d7e28cce8f0c2d679fa6c738a7a1ca9089dc67ba2b1c92a83b024b8991f131e7e8802a617153de4554bebb60069acf431e1671e3d00e4da0d70fa11ed4099b21d45a2b811f99dd9cca000000000000000000000000000000000a4432a544deda931b1f62759320ada2963062e722bc1b748c9bd0d026ffae10f228be36ea0ab076358924f4c06b6feb0000000000000000000000000000000000e955b1b1b28d2044b6be371c58bc85097c77145b239e913bb0729757518c465d9e69338066f7496aa6a2038ea604f900000000000000000000000000000000017ca2a7d52c3a82ab8abf9fc1bc187389b6e4904e161541008e5b3ba0981870e01060d1272a6d59bfcfb294c942403f000000000000000000000000000000001870649a50e0978185551f213eefd9305d33e92b3f8c39752b6ebe18ae86ad97f92acef05971dceee3b3729becea18168b1ee2765e762f1b8c2451270cd5a755758fd733d7922a537aa9f1fd7d0c95960000000000000000000000000000000013713effa20d5039ced751ebafe1516f062f11ee05ffad37281cfee9d7a49ab14c065709832f6674bfbf2c9f379bc9c9000000000000000000000000000000000295f7ef148430209b48c292b024474f05036edfdee082c56aea05a62f1fba3ee7a540955423f78614c8385da8ef60040000000000000000000000000000000007408c97321b6d7c27e5e442a9e35b054e743c34d845874aeb1ccf4e903ca7803ed7fb1288327865f9e0ff0a388e92b400000000000000000000000000000000081808d03722a2d48846a693059c2662dee614f181dc406825544d30a6adc0f9d84a712eff80bddd4a27a036e4bf7359d5009fd559714d5692de5500ec8cae9c04ae1ab1c7c6e08c8738ef22da19ceca000000000000000000000000000000000880b646a674723c15b240ff56d2031e5db724251b1402a68df8b26261ffc9fb60a81abf165c6832137dc7a7293142d200000000000000000000000000000000172354b62bfb8d388b5a984411414738302725a508e8abeacdcb46454371d5e9cf762028fb65921d5c3dd8c67d42a981000000000000000000000000000000000a1af459bc3122dcef78359e468f4094d609ae3da09ca5aa6efb71a7494dafa2373a3906bac1f324d98b3eaa982a27d500000000000000000000000000000000092ac3b47253c7f090df076914cdc08a715faf153e8e365392b4859fca1db14d3f7fb998c97de9ad99b7d0b357252f086330c755ef708d8eb129475785f24be9e7836385ac918c60ad36e80e2f3281b80000000000000000000000000000000003b23eff722c078a781771d8b75d519e7a062ca3e4252ecca877845920158fb20d79a9ce449d9087426b113da0091826000000000000000000000000000000000c9026e8d3fee6282492393db504a2c41db19d8fbb83260624b05ba4107d6cb2c90d645a3c16862b27cc3fcce9bf89840000000000000000000000000000000018b8648d0a42285d474f809519696df9e1ad5c35d8e848ad74fbee37425aee8844a8be8cb4d3331670ee294ddb9a290200000000000000000000000000000000068cad37ee8578f4b502ac2ef4371a10e5432e57fe20d0cb074dc427831872113d3514a0b199d813b796b8357fa2a3dbc2431888d05cae840dde4c26911db1893659fdc345d5433556d9bf75e51fe3740000000000000000000000000000000013200f0aea4c60937be47213b6149b0ae76767f3559e0519f774af4a5d9431e2dd7ea74b42cc3ceb28ccf0d2f01116f30000000000000000000000000000000001c5bff08fd16ecb68f21289a3e7b9a2ec5da1357d604710a18e78ab780f8ef0343d5d9ee7f7988a009329b17e498beb00000000000000000000000000000000125453772eb9d1335ce4dbcc8f2ab8426fe89a0e49fec51d4e96718a38570aa82dbef452368141be2df260fb131c50b2000000000000000000000000000000000432cdd445519775b9914a986a0941cc829b4a15cd361df9ae7129547b24f7a6a15cd8fe9393fa1551db2d761a208b8ec9a72369cda74e5c86c6559cbc4f4db1b3ab24c5150c7decea862ede3c02c505000000000000000000000000000000000396cb6d7b44f92b716ed02985d351b4e8cd1bbb95f239e4f29d7379428470be395e2faeb8e3a910007aaa490d3c336d0000000000000000000000000000000000ad0c0623fdf50c2b504777554dbab3cde1b9705e976561873d7c22b81f49c7654a7c76e558fad1518ed73a0d3c3570000000000000000000000000000000001241d5bed68e02a2ddeb3ccbe109a161abe81edd7affb72182c5163851211c4763e6aecf766053b61ce575de893985f800000000000000000000000000000000183696d2a48feef6088f4e9f75a5055e8c54b3813658b593958490ddd4245ac495a8ff966861b20f26047f07fa8609a0c2f50989b04fc29c4c4a0090fb11e860c15f89a66f3bb8281e4678ba63ff3f9a000000000000000000000000000000000fe0ce41aa9e7cb2bcb4e01721b7b1d99fca4e9b7c4df09bec00bd346fc57c25118ba70d5333b7f3eef2659c64520a470000000000000000000000000000000005c932e09c62b7ddaf3f5c420c60740befa7cdff5bb812e0f089c45098d71b57004b7a207f0cdd34daaa3282cf6e9f7e000000000000000000000000000000001874200ead9776c1ecd6a54a57e5d0f9577910a4b3afb9b051622f658fe3ef6cc5070af60e7ef910562720e9716158d6000000000000000000000000000000000c2c657e58e400a67e59deee8c28234ff4688e781a2f6f2f0d0b186a5e4012695a522dfa0770cfd543f55939a05e20b09fc9abf1c76ff11ab538f46ce768ba597eb5f2f63073ec67e8de10aa1d666720000000000000000000000000000000000f0b561e5860321249b9ff434c604d26c3275824fc4ab9c1ce5c5858605ddaafae83ae27e523bf6006932f6c7f33d0a7000000000000000000000000000000000b47aab85bbd909599aa85c5eda363b67790ac6729fd8b1f4f53f66dd796cf2fa3496407b1bfaea4dc8eae53519054e70000000000000000000000000000000000cab1ebd23bc05c53bc9e8481c469eac3ee1b140af545bebed10a8fe50698d2ed883219881929207c0addf2f687198d0000000000000000000000000000000007742de55b799950e6f786f4eef45d0fb67e0475272ad68a183135b70047abab6c2ed51ede16c39be7b986df334e9e75d4167723682bc0e7476797b3be5e14b8de3e4e23b4ca33c50a2096cda8766dd7000000000000000000000000000000000923861332988bc843a65ec5dd4637f9dca8a15e71b82c780fe60d768213d118d8948ab554e30bb9253e900a9b7d87f200000000000000000000000000000000132b1faef49e7966a05783ba526e71134bfb577b13116548352da37e91e617d7c72ed2645e672ebbc517e079247dfb0e00000000000000000000000000000000000a46a8893a194ebfe077afd05fb25d4680f1e4991a3ec29475fa5651d086d20b38136155a65a4c70af31de5a78af59000000000000000000000000000000001344eb957594028b4228cbdb8efb03cc7cf49ec43b2ca5481eae1df6f2df3d5be9a7c4e4e78f8c39be546e29a83c92f49644c3727f78dd12811092190d5d10adcd5b9fc581dd783c97d4e7b5130f309a0000000000000000000000000000000012d7111303563a6358e5ce9155d7a153b5781062c2f6b919efc67ddfb4c61ef03be8828ca6339397b84763a5f8a7e8330000000000000000000000000000000010a2a0ea9973728d3fb1b5906ee84b2635c687c11398ebf605cad30216df3b7b4e3ee1653d4b323a690e6ba614ebec30000000000000000000000000000000000b93d5de37b892d4de9407a820c73ecfd6cd9fa565db82e7e8c14c8406823f705ff0adf6bd6add5ddc5f72c91e52e840000000000000000000000000000000000dcb320ceba5436df8f099c5a77f34376c96d830f5e8ab80667d156d89f6bf8998c148ef9a53847ed395871ab86f6d280df9846c84354ab7f947caca7800e12e38d8e6651527e6831f4d8b1bd66c4f3d", + "Expected": "000000000000000000000000000000000ff3e299e6b9fc488d6db991cf9d226d330846e87c4a5cd3e5d4ac955bc2c3c2d1ee5ff230098b48f594d256495f489800000000000000000000000000000000097fdb8fc95d64c7070d8c71e0fd2a933d1e1ad3fefa230f079bc5743828317cd1b0c6d4253ba9c3c6ec6b12d53afa700000000000000000000000000000000002448bbb179d82eaa453cd5452752b9a083b52694cc65c5d9b47f72eff118d7aa06b0fba18eafe93d2937d7399c001af0000000000000000000000000000000009dec4c0aff2a46b07855c87e08832811633709ddfbbc30dbb7e78b3de43bd95e383baa6ff4c58188f0c7643e0ea5a40", + "Name": "matter_g2_multiexp_98", + "Gas": 293920, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008afabec8a9985cbbc6246825785654c1d2eb7da5a01f76c4af4d0096b9baed3c33dbe492d14a6f9e762f06eb3d198f800000000000000000000000000000000027c592315dee4bcc892acc6f41a6eff5219c308253f7cd715d0e4a32c03c6d0d0e8568e146e9e799ac3025486c77fc30000000000000000000000000000000015b4ee27a3aa518a1ec1b447bb8f9128301c85b7176296d68dad3339b1dee78715b2f031a7fb6ba376145c97ceafeef60000000000000000000000000000000004b7e30ec7cc024ced863ce511cef3cabe954a4e5843dd636d776645a44225a36ed7e153ab5bf5d18f23c6444751875c8a71abe11a893fce872f6b8a020b6d84241df03eb934b50cbf3571df4800a83300000000000000000000000000000000119949d36d8d8e2bc1c26ded5f5fb01225a980a28b934ed3862480dc9297a3758e0f08ccaab3a09b5e5c0e4215e3246c0000000000000000000000000000000004a82dc22316ee6af39d937b662d1f1f2dc855c2ca8f33ec3274d833e87d594633fc7fab247911e0f46564397910d6ce00000000000000000000000000000000196900a09d8504ed960d41f4a8a2cde2e5dac61b008d3f6eb47e86d7b2ce6fcdc0f85157e3ab1571094d9fdaa75d0d500000000000000000000000000000000010c52ef9407eb4ec57844aebbcc3ea5000b1940d035dcc2a873327affaaabdd79e3560cbd29c63ce04f6279056d6eed1bbf28e5bca314391550d3a0fce50b1220965860e72c8c3865a2d4c599d31d3f1000000000000000000000000000000000e43655ae05dc6cfa93113dc26cea895d1c5bc73f20454c7b441dbc5ac80035b290514b13b31b41931ea5336d8d9a6a7000000000000000000000000000000001199a873958c63147e6b82625dfea15ce90dd41ceb4e315f67221eb874ef32c6a2953412e7e981659c72239a7a72bfe6000000000000000000000000000000001845af5936b4d7487ffe59137ba2f86daea3770cf37fd560969ee48243389941a1072205e049ddaa06c0ac56b7edc8930000000000000000000000000000000003cc831177f24614f93a118b896434105f05a277051a852fb9973a775fc54f779c2a1f3d64c457e5231dc22d6aef606b58b208a6845aeb2bf31999042c59b7b130a7ce5297e88023953b1aef63616fe400000000000000000000000000000000005e63584bc85ba58615985f6a466afe05268e545e0062cd7214e0b6fc8b87537c745b754cd9a1144948bc88b3c43acd000000000000000000000000000000000635b6a49090ccede3ed2ef203f0ed164783e3df4d9a7d93319515cb9230bd841b61a097f39e30175793b3e934d8e426000000000000000000000000000000001861e65f47a9da1584c45bc79a66045d86bc1709c2d1cf6cd2930a9fcc8c4efaa6536b5015be8d54789e8f574f93f9f70000000000000000000000000000000009290ce63d55eb436794acf11be9d896f03e7608a1bc8528f61ec9473f054bc9fbbda1072440e58e2f6ba080a01180173b53b6cf9e0ce1661c4960283be790abf956c2d6433529b8f3a32b92b227aebe0000000000000000000000000000000018feed9500bff884d2bb58554da2180c68267b6d3a45c2c7cee4c3f8524252d3faaa5eff971bf40123587e669fe66bbb000000000000000000000000000000001441bd3b58b4a4a87c2459f873c0692f5977b775af984bab46dd76cb9f775d2faebcb77b2854c9f1faa33f6c5de61c6a00000000000000000000000000000000123a890c3362c77e5b5cf9846d9c9e43fb3242d5a831e640ad080993fa0547854c8d11cc22f7f7b426528bf1154d2300000000000000000000000000000000000ff4a59ea98d13cfd353ae61e18d3c7018688f755561e6a1da5f09acc4277e8d49645087115acc64f992ea778a11f39bb049228435ade4c4c565e65f39f13a84c747c312afcdaff352560b9fb3cfebcc0000000000000000000000000000000006b019d005141e82393a2ca04469d1f6fd7b9456001ffef4c34eff6b2e91df58e99fd07944f52b108bd41ab6c4d6bbf200000000000000000000000000000000109ae87042029856befff0c916db5437e1e058a96f2970d8816b3becc93a1a50d6d336d5451303715f3e272147a36caa0000000000000000000000000000000000fc381b8dc9dc02d34db13e34732a10d0dfcf676c224a05a3bffd888b0af7c415b38af0b6afe6b464ffca42947c6ee5000000000000000000000000000000000087040d09c39ccd06c9ecc360fa02147a32e8036ad6e4b6bdf5b3883722a4e5a887dd022d53706d2585fe558696be6656197f5ad17062d2ecbdc8887bcdd32e5ed4c48cefd9e14d622a0b800d970330000000000000000000000000000000000e35c27b29df0fa9298bb9ab6a38b3450782223e2115d79152f9baa924d762d583b3ebe88e42f33028814ec78e5b319d00000000000000000000000000000000190c65667627a16f0af0ac7f23af0803bca810f3986b906b7b4f126d98473d52badf45e90e2e45bb390242fa8c40135100000000000000000000000000000000103f0283a5673c16bcc0f74f259c2eb077061947da04e467dfebf62aa005491e32b85cb73418b624a30dbaa01672921e000000000000000000000000000000000465466955c908607191faf15f0768dce42488c488eb4a065977f21ac7484766bc0abf23961ea2ba46dcc04956abf6c7721d9d7fe10104cafcad71307e785321ab87b2b69593535caecbf0e166cfda5b00000000000000000000000000000000082346e352e845a54cd4267f93b85b2c8623d4650e00c1c56082b73ee31f63588d2c117d3cdecc0378fbbf8956b082040000000000000000000000000000000001a7f43c2bb19cb32345c43c950536f8e85815b86364f278f6ec8169eca80917c2b8fc08d59b20cf55f25dc468e7bd7f00000000000000000000000000000000085a5cb020df10f9b4c7afc01b1d11700579dec1e85e766507def2e6cf5b714174f7be9cce3b18533a5ebfeec2b4e481000000000000000000000000000000001836d7506d1cc984fb777b8ee935d6f5b110644f59e96ff44d8329336d59a3e1d2b53a05d35e97f634baa4fdc11a6cd8461531ecb61365908019c1e8074a4c322df2b356eea3f3eea9aa1e0e1fc5525e000000000000000000000000000000000c1c59828ec6257a02679cff0bee0d665d449d2a158bc6d877e84cc0fe2161c297dde09b778d5e1249c515833e483004000000000000000000000000000000000f5e82589bfb7781e4110f1486752b00cbdf96cdf4191d75053c6d6d646e1c989add011361031a11559e156d64139fbf0000000000000000000000000000000015053afa7fb2b4e4b70f3c8a570fef8288fdc22dd951b6ba8a40b6087b9ab04ede21f0ddfa84d6d18914041bcf244c110000000000000000000000000000000003f399800cba51ab35624d866831ab6506392cb3acf549787153ffaf08cc451acea46c7a612821dd96c45f8b75133d88569c1c1ae2d18bbe36ed50db1bf30957802b09a982fbed49d4968815552e010d000000000000000000000000000000000e26242c8f73116079369ef4265f624abd4377e4e3485c28197663de9de9f5618c3b6ee602ff6bebd1c242aef7295b2200000000000000000000000000000000066ceb3ea6067220bd28fa1164237782859d27c1d3087a42b4d09bcc343611e4ed2be014a27f5b394c67643dc00f57cf00000000000000000000000000000000157f9d30de52110ea7a2a35ddfe67d9fad7223c5e3307e797dd0df3621520a421958a2835205e3c4777923f47d47e5310000000000000000000000000000000016ebb41beb85b9489a6d5482f8a3330a5c5c5e5718e8efb8b67362f9d8e9c313e9e563275ba38c207c5bf3d89c406ea62061d33b2f7e786effbd2e93101a56ba1bb62c1a773a08b72ca82f5183bea35b0000000000000000000000000000000005d1c9109b5b7409f94ae3f7dd9e8ae4908a9b378fea4ea284cbd33d1e59b605577b63892aaa8ec14d415f34e22fec520000000000000000000000000000000005afed05e62599f20f7eca019f41d770c630cf6359cb5601464be821691fba5205c16e7b580e6881047214f938e5104b00000000000000000000000000000000105637a2aa4725d8e080dec3b731a111ea4c94b79f898dfd51f645501ef0c8d68ea8e80fde28ff96e927e44306ebbb1d00000000000000000000000000000000080cfeea754474ceb37973234d5dc3269f8ca99bd862d4d2d1a602321fc709945a3209e5ff2cc962cfa6d03017c9a1354129b150752d2d5551a622231ab067931678454aaeb23f76168219406f0d50ee00000000000000000000000000000000137762ea5c80033aaf17570451b15a062feedde810f11ebdbe9a79a3275dc12613e0505835c122bd5f9afea7dba84203000000000000000000000000000000000d89c04e45e60769a63fcd73df2a138c457bb549195f2c4eebb3be1ea46149f286756795be8328b5b886f497d8167b34000000000000000000000000000000000be43d515083c8c10f467618685a43d4d5f6457204bacd278445943a9f44f7189b561a0e1bc59d2757fcfab2e3f93a4a0000000000000000000000000000000011a52583227c6dcdc1784d3633fd584612a9f3bbc1922477396dcd5af84413e5e9382a34a71b3a72491ea09fab2fc6bf366c32d5d3c132f32a6ac3cfe1dabb649c59ae224338f747ad98b193e8346729000000000000000000000000000000000073acefe33525dd2d5204cce72371ed82c7e4b58d1b4e7f4b4994f9c58b02d9d6206fefb3552446b6b355e860ace43c0000000000000000000000000000000007344eaeaae71e17930e769e02bcb4f44ddf3d040ffa0b081f25901cc125a37a58a6a5d13e7b0ba493802ccdaa054e29000000000000000000000000000000000a65fec6ad29ec3eee9ddc7ded2297f49d03ff18a255f1e6d29d2a67c20713f319d79d513af0c58ae3cddfd1f6240ff50000000000000000000000000000000019d5f00d9e2b271f4e9ac779a096386f08ae124f77fb8183405d48ea7f16e685805442dc67a392aefc643ea95b4f1fcfd997516cac28a3968ac6946b5bffaace0856a52e38fdcca11ddfa16cf5a568f50000000000000000000000000000000018230bf1a873aa04855af1426da30f1b3ef4b64eec613b9f660222e3827b325c318baea031b463c7e9f775165d22ec8f00000000000000000000000000000000017faafa1294fac53e1de8cae9601acc62d76a5f01a39ce49d65f3f5d2cd5cca33eb90bb4116b3ea36f912ae2b81b6cf000000000000000000000000000000000fc3ef5ea59849a87fcd45500989f1744cb5570ee88e34a952cec32cea2eb5900b64d8d0d04ef5c51e8fdcccd46412490000000000000000000000000000000001c53aa8aaae8422fa4fddc86cacdefa89c37592c8e67e472a23627514623a90901a619af79e93561a0dc65215837274e881ec65fdc2f58e46d3ee45a06d0c5ac844ee5b62872c7ba21f6b48621a3371000000000000000000000000000000000e3db6885c2db9244548e11b8c49b73f85e4104b413f54308497262fdff1957495859830114528a22c45d39a554ba82700000000000000000000000000000000181b1bfe2d9a1c563e73356d73f4ed3e7061a79c610bc97c911ab1a0213d123c9f83ed6706e862087a796ce14c5cf53d0000000000000000000000000000000013f5fdceddce771588869b945bd6025e5ce485fe78a362356720b474b83998f27e535cfd8d33ee51cfc68e5d514f915c0000000000000000000000000000000007e8fd7ba457a3cefd50c641847425cf2262deb1d6945a0bd740eadf38dcaa616edc48c3912508d663349f089b8b56fadcd9b95e49473277a665ca0f9a8309df9ed6ee4f25d803aa967fb8f688273e650000000000000000000000000000000004b20b0408da7b704694b47607928a655077015f2174fe01bac9a0b3a61dae087b0b593f58d2947d8d84f75bbfb327c900000000000000000000000000000000106d623b2007c5d7128e03e540325ba763e992a651e2e5c78936f82ee2ff72d89a1a914345486cd0a04440c75beb190b000000000000000000000000000000001847348e5ef429cfdf1ba4d265d8c5ebcbec3d5dd4611ba36e2754fbd3d327273bf2eb7b7ba4b3888d059dc87f034739000000000000000000000000000000000bcb0a9dfe5189bc965e9721407b4cb3ed4171510aa4d4e5d5f0823a1c2827643e1278f9c0ee960c54ef8f6c208eee7b334582482a9038ab906880e43a4a9d39e73b6c63604eba0c8f6399eb5c288638", + "Expected": "000000000000000000000000000000001205b70b29ee04212589f8a70a71e004f517d3354e714c1b4fe42cf93faf1a8ed40dbc1b5089ddb53bb052c9cb74c0e8000000000000000000000000000000000f619082734dd9de653b61cf2fb927199f228637db70797bd2a21fdd48b6ecd4c4f712097037534024880a436fdd63680000000000000000000000000000000000592eca560be6ae256abe1796f7ec394a8085c127437f6590c8d41501a482c61456392cb320b9e801044dcba7802df9000000000000000000000000000000000a6d20b8009708ca01a274aed6dece732c5eed5aae5e4c2f3793b5fa1f8cb8c95037ce387bda2e7476e9c493507c7fbc", + "Name": "matter_g2_multiexp_99", + "Gas": 293920, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsMapG1.json b/core/vm/testdata/precompiles/blsMapG1.json new file mode 100644 index 00000000..07903a31 --- /dev/null +++ b/core/vm/testdata/precompiles/blsMapG1.json @@ -0,0 +1,702 @@ +[ + { + "Input": "0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350", + "Expected": "000000000000000000000000000000000d7721bcdb7ce1047557776eb2659a444166dc6dd55c7ca6e240e21ae9aa18f529f04ac31d861b54faf3307692545db700000000000000000000000000000000108286acbdf4384f67659a8abe89e712a504cb3ce1cba07a716869025d60d499a00d1da8cdc92958918c222ea93d87f0", + "Name": "matter_fp_to_g1_0", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e885bb33996e12f07da69073e2c0cc880bc8eff26d2a724299eb12d54f4bcf26f4748bb020e80a7e3794a7b0e47a641", + "Expected": "00000000000000000000000000000000191ba6e4c4dafa22c03d41b050fe8782629337641be21e0397dc2553eb8588318a21d30647182782dee7f62a22fd020c000000000000000000000000000000000a721510a67277eabed3f153bd91df0074e1cbd37ef65b85226b1ce4fb5346d943cf21c388f0c5edbc753888254c760a", + "Name": "matter_fp_to_g1_1", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ba1b6d79150bdc368a14157ebfe8b5f691cf657a6bbe30e79b6654691136577d2ef1b36bfb232e3336e7e4c9352a8ed", + "Expected": "000000000000000000000000000000001658c31c0db44b5f029dba56786776358f184341458577b94d3a53c877af84ffbb1a13cc47d228a76abb4b67912991850000000000000000000000000000000018cf1f27eab0a1a66f28a227bd624b7d1286af8f85562c3f03950879dd3b8b4b72e74b034223c6fd93de7cd1ade367cb", + "Name": "matter_fp_to_g1_2", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f12847f7787f439575031bcdb1f03cfb79f942f3a9709306e4bd5afc73d3f78fd1c1fef913f503c8cbab58453fb7df2", + "Expected": "000000000000000000000000000000001672a8831d3e8bf9441972969e56b338594c5c0ede7bdba5b4113ac31ccb848dc2a2c4e23c0b9ec88bfe7165f472b427000000000000000000000000000000000a86e65037cccb5281389512673068d6f91606923629905e895f630059cf87fb37e716494db288958316c6a50de65ca1", + "Name": "matter_fp_to_g1_3", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001632336631a3c666159b6e5e1fb62ffa21488e571cffb7bc3d75d55a837f242e789a75f0f583ce2b3a969c64c2b46de2", + "Expected": "0000000000000000000000000000000019adfbc918cb74abc6fa0664dfe60697b233f0663665d2cc133478db4d6c9a41309ff09f9af9240037a7332bc42ffe3a000000000000000000000000000000000d31ffd63837cdf1cf2a7b3fe23a9d86c08f3a7c44ac4fa52d21b8c235f0d45f85c036d80bab332034635845deb31467", + "Name": "matter_fp_to_g1_4", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000184f1db9ac0fdd6b5ac0307e203d0b4237a50554eb7af37bb1894d9769609c96c8437e9d6d3679ebd5f979eb04035799", + "Expected": "00000000000000000000000000000000192a005eb944f391251402ac3d31c30f0b2d77987ed9928d244f492f96c1a0a06a7cd0be4bb3dfe3c484ab8ac5279a09000000000000000000000000000000000b99b9e7f0b51a2e0d12272fd0d9ae65294dfd34d45f30fe446a25b225316ef467b02acc3b6a578e054e612434096d7c", + "Name": "matter_fp_to_g1_5", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000732f171d8f6e283dd40a0324dae42ef0209c4caa0bd8ce2b12b206b6a9704f2c6015c918c79f0625fa791051b05c55c", + "Expected": "0000000000000000000000000000000019dbf865a67157efe65fa7171279049864bf6c280d3c3462e93425bbf25f9cbad6c27885d7927b5cdca642df48ceccd2000000000000000000000000000000001606be1ef7aaf56349e5179b01b89e172e463bb3446792d5210452905fcde42522f9719b9e7ddeb8cc3f227eacd55947", + "Name": "matter_fp_to_g1_6", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001139e8d932fc0ab10d6d4f6874c757c545b15be27cdb88056ed7c690aa6d924226d83e66b3e2484b2fc3dcd14418ee60", + "Expected": "0000000000000000000000000000000017d476fdf0be6b09206dc83cce64c603a6b911f051e9191a2473a1bc6b1dd2c6e9bc4d262edc936f62911460f0b648a70000000000000000000000000000000016f824bb325ff7f485a8e9d116f4a56ea71ecd2c11b2a4d119c208cf323bc62bf1e9fc609230c571e7830a956e140e47", + "Name": "matter_fp_to_g1_7", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019a9630cce5181fd0ad80677ed5ad8cd8bce3f284cd529175902b78ad4915f0df56f0d8b37c87c9ddb23d0342005f157", + "Expected": "00000000000000000000000000000000145726f8479d7390e7a21cd31dfee0e6203115e72d04c5a735feb2cb688ff74944bff2b1af1b6368b4d095143662a1300000000000000000000000000000000002fd68d51753faa242bee10148c0e473f4110fc7b67848dfbab7d7105090648534854ba75890e099cb738d1dce604ea4", + "Name": "matter_fp_to_g1_8", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002cdd00b7662569c9f74553a7d0585312a776c8638e54ad016f8d9d25df98651789470b12ce2626fb3ad1373744387ac", + "Expected": "000000000000000000000000000000000671b0f33b0f1ea3386e6876452989416c7171e283c4b0c375e840ea05e7fda22aa03899b50e59e9ca5a87039b2e732800000000000000000000000000000000031bf8caad5ce6a0d94f14693da0d551dd4bfd2c2163c8e8d5a448956153f63ce2ab72f03b97b560d67933887e83be1b", + "Name": "matter_fp_to_g1_9", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e63c4d12a38837354bbcdf4f844e5dfe727ebe292016748007d162e74c1f849787767f7e77fc57a42783fe0b06c24c8", + "Expected": "0000000000000000000000000000000007d67999ac2fe6ab93591646905f23aead0d37ca43573ab02dc16c2b199086f788a8a1de6b10aef4f4d772b2e12e72ad0000000000000000000000000000000003700b150ebf60cacbb2b7bcf969b70edb57b34b5c772cdf68d42dc9f1513631799b9b9041c5e94595ea848e195aa730", + "Name": "matter_fp_to_g1_10", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d879e4891a891f2e7d27eb95aef70d5b785b796620ec43dfbb6ae550b4effb9f24210dc20f401d54420445e21cfdd3", + "Expected": "0000000000000000000000000000000006cf4af50766ec08696c9bc0d9617c1f0fcb0ea1bcb576179cd4537d9d31b373bf8e3c5f5fde2c21e44917cf1f51ff0a00000000000000000000000000000000050a9f7d8490ba2b6e49762cf2bfce557e39edb51ef03128b64267fd3c6b996e95d73b26cf1965d427e3445b1ee4d133", + "Name": "matter_fp_to_g1_11", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000028d6de947a3958af5b53578b0ceacc7ef89d36526d8f3b6fbe787af69fed2c85cad3001643b81c575a741c4566e617e", + "Expected": "0000000000000000000000000000000009fbbc6ba7ec2315dc18aadda7b2e53180b904c5f1cbdca1b2f42ed9c6675da7beb4007ab6639520c4736bbf2ee3f04500000000000000000000000000000000113f0bc737b2f3a141121ef236cbaff2f34502aa13e121b857baf327f7be66be97867fc6f752555835fdd01610e30c77", + "Name": "matter_fp_to_g1_12", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000182b56202f0494bd8baf5c03969288a1288b8ed8e6c7f49ec9f7493ee3369eeb42fa8f5fb7b243fb2bcee6be244f02be", + "Expected": "00000000000000000000000000000000047dd479fe99840150e73e4a8fa6be74a9b7d743e21cf33e9d7a9fd8700feeccd5111fb037eb3b15b79d5737ec4c7f0c00000000000000000000000000000000000ba7f57ce062eb9c67d84eee64d64d250a18454bd63dc5a136f5341214079eb9269eea7c4e0d836dd8be63a8a45c04", + "Name": "matter_fp_to_g1_13", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016adb5935f32bafcccb81cf4d177dd8826013d85e11a4aad66e3aa596e1183aeb9d68eb8cf5b716a8a9445ea81b40d7a", + "Expected": "000000000000000000000000000000000e8cf94e68b03d1f6a3d4eac7898f143324d08f7544aa9f952947e9008d2c14e46236667173266d82f5e41887c6f614200000000000000000000000000000000089a1ada37f30b1f6e3a6613705992e9708d0437611f1de72a9f696ea5efea6793f285bd5badbdc20af64df8ba95c79e", + "Name": "matter_fp_to_g1_14", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018bee24b0c97af8aec210f15bbb6acbb76168dabe16e669d5558d8d32f00fdf5146471922fa98a28f238974d327996a3", + "Expected": "0000000000000000000000000000000011e4919deb9eefd13dd0ba5184003ce34ff6c2bd8920dc49b936917a7b6aaf1c7541780b5d0e380e6c808f093a877eaa000000000000000000000000000000000152dbb758aa5f60b8d0703eb30680857abee717114b8cc5f6466e70856f19c76a88ec6c536e7a679c177986bf636e6a", + "Name": "matter_fp_to_g1_15", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000114285411713eafd395ee43bf1728f52d17ac512b9d0cddd38c904a9a3a1b30283a3918cd2cc3da6a7d6b4ff923cbb6e", + "Expected": "000000000000000000000000000000000750f69c43c56df2c8524b4ead9f6cb3ec16d3a6ec913254e585b0d8518e53c18e0e93dd4594adb926c51820de6001c10000000000000000000000000000000011f5c985ed12f72b6ec7e222dc8d93da520ac65476c716e231e7142cd3aca49b25dbd716a8f587006e4a2af31c37956e", + "Name": "matter_fp_to_g1_16", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018a067f91f94b2904c5bb6900f427ec4e93374b5079c84707feabeabde20b5e49801f1f3c7504dd27da94d5e754df4ad", + "Expected": "0000000000000000000000000000000012652effba341826ee7bc3108404f5fcac84776c6f5fef5d440454b59f04afc2cc87f243265248445c7c2bfc14493ece000000000000000000000000000000000c0fd215b7c012da4532c882d7d7f83ebf133d58acaf8b5123c1211aae5929c6726410631c7f9347456448df643c9ed8", + "Name": "matter_fp_to_g1_17", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000dafa9fa843879038fd1566c319c24119989090c5fd34f6514e57f633d3709f0aa9954dfb289843a6990588e337b63e6", + "Expected": "000000000000000000000000000000000c444b07e9ee5dc366c63ba30f1b17087bc4c548963caafacf223f4bf5b5bad1f9b51433bd1942978f3f5e5696d5056f000000000000000000000000000000000453941626954845d89821df34efc6f81660684b08f03fc42da54119d10f1f95357ba75a0962961f1487df45b0c534ac", + "Name": "matter_fp_to_g1_18", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001742a98dd7d3671c2c64aa71023a0040e936fd726c062d520626113bed471e53ff3e85737e5abf9ee8821bae53135f20", + "Expected": "0000000000000000000000000000000013d5fcd7e4a0b1d7d8c7b242b46968519521ff8bc4b990a56ece26053d4bf884afd24a00670911f943522e06fe4f87d1000000000000000000000000000000000aab46534de37b5c6d206959a1023ad4f20ed5966bc3fd1750c1758ed806f077444ac70e9943b4e8debaecf208817a5d", + "Name": "matter_fp_to_g1_19", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019cda532e5d94f3b193b3f286a038637a736c2b87b804efd4779359db5bd95320e06d6d28da3c229ae48ffc02303fab1", + "Expected": "000000000000000000000000000000001440f44e3964de59be03a6c69affbb3b44ffcf4ec4976361ac49c31a23f9f154f91750533ff2425d5e8fcde0974a91d50000000000000000000000000000000002031eb89620736dea022880e5188145f080537b1aec183db70bf307029be21a167fb6456bd1a47a75626280f78442a2", + "Name": "matter_fp_to_g1_20", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018df89e4a545bfb825bcce2f4c25f2416a72e32633b3dead5205c8b7d69c78f119d0e940e5bde9ae1cf91574e5d6c175", + "Expected": "000000000000000000000000000000000a2d7297376216582c3938c2aab0a26494da7d9df45e1af7b4f826f064467a939ad99134be4c9b804b5bf273e082c4c2000000000000000000000000000000000b0a4da7cc585be1be6c091006fe831edb6f6eadbe3ef611041efa3d14f442c9768feb2958efa161e0adf5c321d7d522", + "Name": "matter_fp_to_g1_21", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008ad60829ff001404da40923806e496640a90c5c258a41ef5912f8a1a20eab84ce43b2b5aa4aa7dc4d8b281591d23502", + "Expected": "000000000000000000000000000000001314d7faac7b4d5003baa10cc432108d6bb7f80bb13991f6ac45fd7a772f31cd43345ea100b05f2ad73e3bf583e7e7b2000000000000000000000000000000000eefa97eaf2143a991343a8823d8b362f77d8370421bd13a9a6cc4988544feb0cafd3a797a28d27f4f8d361cb7f49ed4", + "Name": "matter_fp_to_g1_22", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000f13dfef4b3b83aa7f9525eae9913e10502e77c03c55a7aa2de083dc5102c098b6f8e36cb5247b827e30fbcded9e2d3", + "Expected": "0000000000000000000000000000000003ee4f3d29cd9f29a2e559a86d8204a1d65598e7788d585b145022de2c19022b122c1f10423d3bec769545d656726f5e000000000000000000000000000000001803f26af468740849a2737a42e53098b48c0709415247023aedb111c96043e3b13de300213e5196cc3b678f8be0696f", + "Name": "matter_fp_to_g1_23", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010468e5421a72ec85b63f7f3070a949223105763868111424fd151c8365eb0307dbc9cbc92e5dfb296d06ddfb58d9900", + "Expected": "000000000000000000000000000000001800b9766f3e621ad7a8d1870ce16c8cd054c87d7fb100120a38c3368cf1879859645874b23297957fef6cd8f9112bf800000000000000000000000000000000091a8b69a1f4eb883a25af2a3a0d1e384ef7a9ba4e8ff8811ad356781c79f631ea20fcd0590e94b9c1841e6add2b848b", + "Name": "matter_fp_to_g1_24", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008149ce856d489050ea834452bc66f7f3478c2056969354dca8652f3d0a349e40fae0c4c57ff0f5e022aa93c61f8c844", + "Expected": "0000000000000000000000000000000005fe170feabac3805c3eaace41fdaab2c9ae7fe609ba609f4ebce2d24c0d704d847efd510acd8abe5aeff2eb24e781b80000000000000000000000000000000003262879ff5c9831ebdd0de9df478923fee72a8829378f40cfec310a41110ad22faa759276e3b9e015c86c94c3594e0a", + "Name": "matter_fp_to_g1_25", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006295de7bfec61f06a56fe09afbb74be968329e88ba2e87afffe9ea9bf646ff5b4a03d6088e87644958ced95eceeea08", + "Expected": "000000000000000000000000000000000e4110b2efc984c4d7affcbcf5cbbf919c55f948ac7412dc120d30774924d6020a2292f27b8e716c2b5045a561f2b14300000000000000000000000000000000194649f6906daa0394fbc1d45355e17d62f6c22a9e772bd7fa5149e29ab2ac6060d83dc5d70fad75bf3f2c7917b641e1", + "Name": "matter_fp_to_g1_26", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001443e61dbf14b6c6ed99e1917ecfbe5a4a23ab9bdd3bb089fbba76d795d715d9d2e3c7d8db0b7a9434ad691b68bad3b2", + "Expected": "0000000000000000000000000000000013af2a5f26d1f51da0d80fe7c62369ebbec235faf4565e62ba475e6f58418183efc8b9906196ffda72539506243e0482000000000000000000000000000000000774f3096c99bb826792cfd9243d8cbb1bab54fccc3a6347daea74ff1c8aebafdd971b7bfbea5b9a0bce243372caad6a", + "Name": "matter_fp_to_g1_27", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b14b12ecaa94f9656be54772be9b22a2495d4ff873b0bb971c27ab1d8b940c84cabcf921f6f75e93942c38cddeb8750", + "Expected": "00000000000000000000000000000000107c66e91d518789be416606058cfa8e9df478fa097241fc109d065005ae927d83563b72410e5b207d1556c2ee4dd67b00000000000000000000000000000000148c208e55e834c4e4fe20c02f517c21030f60c74b1a3bcf70bb2311cfb9b7548837b9187910bb7e8d1faa40ca8d6d92", + "Name": "matter_fp_to_g1_28", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019eca0daafbfdcd3b56be863dceb21e624b22c0d376fb92ba606456ce3825981713b88e40b7fd801e915f97d5c29ba75", + "Expected": "000000000000000000000000000000000fa72de55fc2229c0176120fac3e0a64c4498bcc7b67ca40b92d47a76a9db87ba498b72f06345c61d59a3d37c51153a300000000000000000000000000000000001f0e176d0987b8ceb7ca0e5ebb491bab0be17282cace8e03d52c986483026180082f86196fe512ac6bac58ec4cd024", + "Name": "matter_fp_to_g1_29", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000104a452343a4098e9bf07380a8e52050259da95f5fc88f31511a08090bda85f0a08d49cef95bd26c7181aa3eb0be1222", + "Expected": "000000000000000000000000000000001655eedb905670d10d2f979962e864d68e9491aea41d073a6119e5bc0ae74216383501a48343d7099b93601f8b67c00c000000000000000000000000000000000842846147959f0f81efc6e8f515a9c59456637740bc15b2d335e0de45890cdd814ca7057c5d3e49e48e5a250c5dad25", + "Name": "matter_fp_to_g1_30", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000012400aaec3d2f4a1a8cf3f28fd396133c3999c074a565c110354472ae29479b9b62ab67128521c2c6ec4869811ba760", + "Expected": "000000000000000000000000000000001098de70e8748daba7bbad52ce344619d3b5374821c1f932a18666ea0a591b24ece05004546cd519ba4d78c9747c57cb0000000000000000000000000000000005f537b6a394458ad51c2e677b2d52974a714bcf6a7474e748ad7f1b28738b6b874b6f49bdf19479bce4ff6c6a47de1a", + "Name": "matter_fp_to_g1_31", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000093e04bfcbd77bc6bafeb77f02d0f794a20b155435ee3af1d667c025e7645d9387abe0ef281386339f461352da93fbe2", + "Expected": "000000000000000000000000000000000a27f7fde0c79210f4b6cf59c97ac773c9766fdab289225c97f6cf42179385cf18f47f14b7e481df7c19418c79dfaaba000000000000000000000000000000000874f21294205152df3a4fab2ced482d325274886d8105b61668074dc8fc90240a715c62b2a2864901ca7a30f12e76a3", + "Name": "matter_fp_to_g1_32", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000481ffec570d4e155ec10e0cc58effe7a5651795d604cfda6cdbf011676772fdce2c25227e7d5a1a26748d15b1668091", + "Expected": "000000000000000000000000000000000a6fd7355965c9514dc7237efd262fb9dfd8025ca2c56165e22675e615095887760ecfed4a2080cd5a2b8041ff26578e0000000000000000000000000000000019b1e02c9258fe62160d92eba8640ffd79b3bffb8ca4d602ca6c059239047c5563049758911d0e6034a25ec5094b1f33", + "Name": "matter_fp_to_g1_33", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013a3c5dd40f7d7fbba7563331917fe19a093d5d25ae7993200c39460e0c46d839e3958b672b4ed195300f398137faa18", + "Expected": "00000000000000000000000000000000013e4cd06b8ba7b5efb70feaa03550bfa45c7c2c79033c92b819257b2ddce28d501cc836a5ec81bf210bed671bfa66f100000000000000000000000000000000165d806d235d41f21e961795ec3da4f1b0334ba6e71ce384445bfda9e5d89e448d00253ec9f8d49825a230b25ffb2848", + "Name": "matter_fp_to_g1_34", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000255bc4d313fbd61a270dce8c851f1fa09e6ac5dff9b9e8dfc8a236a1d44548cb079023ee9b8f0f5756b39e44489c3f1", + "Expected": "00000000000000000000000000000000067c19b7c3dcf8b43d6e83dbda7406f5f88b06cfa0d7d145201164a1f06cb5549545ab28fd1ea8c1d5a662cced00822a00000000000000000000000000000000013aab7ac4ebce4686ad8a05e4eb2f60ebdf03c4f4ca0111bb1cd3dd5fa7558f1cf0dec394d0b616cf557f3811bc2104", + "Name": "matter_fp_to_g1_35", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab7b4dec955de92224b234c2d8bb2e3881806c2d36a9a21036e9412f0a8d3946027cbb65b5dd9c975e01b3f235b883f", + "Expected": "000000000000000000000000000000001673e66a7e558d533be5b855df7c3bdc58f1fb0a3b268b84b4fc25a3a8a211c4c9c8d884fc62f00eccbadbc96dadd7230000000000000000000000000000000016265b691fd43045567ab4fc7e7efa63c8430c8130761b128f0ba7bf381a7cb81bf05aea2526b50ff6e48a87c8ee9cf6", + "Name": "matter_fp_to_g1_36", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ffbb55002d9e926b3d8e7d963ece82c14afaca8b4d8415df8f964a39db606ac99f9e442ff69f7ddbbc4ae563b836192", + "Expected": "000000000000000000000000000000000b36ad42aeacfa47d77f045de527d5bd4fa5fcf25ca3caca99e3e7980e283278e013611d1bc7694bb0b1b86d8589730700000000000000000000000000000000136290ed913b8669f522e16103ff42733a57c1026f966facf4a2d385b0bd52668925d748760975ca5a132d00deddf675", + "Name": "matter_fp_to_g1_37", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103469c08562f6f72152db58b48811b0098b68af8de00e652bd5a67246459664cc8c54e15705d702d51e3f1d8ff76a77", + "Expected": "00000000000000000000000000000000076fef7b61f4c687246991d6f735d6f89c953476ffc193bacc1f3cf9573ed47bfbf6dcfbb3da1ec1bb764a9cc9b1c26b0000000000000000000000000000000012b6bb88e8acd6cd0ef1929a79bf4d8b10ec3fd575fe460686921fe94aa3a472cbc7aea543ee6284c368f5ef2c33ebc0", + "Name": "matter_fp_to_g1_38", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000059b326dd567fb2f8a6ae87f41fb22b3edc25122138a5f6732edb48ed7fa1949eda6144297f54faf406d873a016a1510", + "Expected": "000000000000000000000000000000000bbc25f7788b0031f1487ef154e877c5ae277a80d56b3a24a39c3ee94eb7df81a47bbff233c1baaf700829919e5254690000000000000000000000000000000019fd9d1237b508d06d7b2ff807c15c3ab36e6eab7e5b9f145bb2c0f2ce8ec96ca3a24932076abfb74eca85744eee4044", + "Name": "matter_fp_to_g1_39", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bd594d2f5e1472f85bfd550df3eb948085781459eb3037fab34186ad9a0204a0767c8fba571af858a054dc231931b80", + "Expected": "0000000000000000000000000000000015eca2e3d36d619601b0f40b01add7a708bbe59d04d5dfbf12d6e473e252505cec0cf7ea1c420000d49221d5e1ba6b91000000000000000000000000000000000cc6045184317aaf2bb8a904755bf48df9e6754e3a864037ebe0218eb3cd1c0a54e50b95f9e6d318799a72fac8d4e262", + "Name": "matter_fp_to_g1_40", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000087b8398406c1e707fe87a16118e2448d6a5f4fd1d6c9d7174c4d8a4314fc7b2c21f04178533480976dd20e28b278ad5", + "Expected": "000000000000000000000000000000000ef0a6307d4a3e92570cad673ca5212780902de416e81d15638ba654951f442e852b53255d7bc4d4e71098924d69f5a600000000000000000000000000000000156abf6f096326c75710300578f0cd946536e16bbf80034c6dbfe454565a501c268135118745989e5274ca2431ca5155", + "Name": "matter_fp_to_g1_41", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000673dface7041c3d7503ce4a50af946d344ad48327b515740b45276403d91bf1ef9deba79c8ffa0126be990b62bf3072", + "Expected": "000000000000000000000000000000000dc94ea6018ffc5838cb7cb00df9625c0c09701bbf19edddb735a3659b385bdd09e9a7d6e869720b727ec59ff3956d9b0000000000000000000000000000000000a20ea6360179bb6608bcbe4879df186916ee71b3ff7a1dd0fd137a0e9dfb135bfda2c66d1cf8d358d69934012a1a1e", + "Name": "matter_fp_to_g1_42", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000adb42b7eb0f6759a04da7b933bbc2b6aedde47da8571d6fa32268c606dbafcbc810844017eb6377493a12d76ca56c03", + "Expected": "000000000000000000000000000000000b4e11f70679333c064d06180df6b54dd1df20ea216415ecb9b704bf4b206141fd841770ab77de4ab2400a076cf9dd04000000000000000000000000000000000ad8c02345e141396401221bb36a2ca21096e89aa76fca4121066da74f2f54b3e2c4049483d9855b7f3159ef448c120c", + "Name": "matter_fp_to_g1_43", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f554e52c4a6c5a94fd09c617f57e8f87af57e73ceaee8997fc62c8ddcb2f875ee805e6594a0fb72738abd3cd4748ddb", + "Expected": "00000000000000000000000000000000136cd8012cebf1639a396f331f73f0da6c114927559cc595f01bad1a18046ae8364858fa262ae04ae3f3b7d13db55a86000000000000000000000000000000000393a915629ccaa9ea06be749f3053dfd07061cfa24bc0aead12622c7d14c085e2994178bfec98b3f8867ac5b4b7a05e", + "Name": "matter_fp_to_g1_44", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001876dd03316ff007a2efb4c5f452d8418edacc2881b20e8340895f6fc768d14fd89bd9db3dcfb53fa98a1e96055fa83e", + "Expected": "0000000000000000000000000000000019008e485a0a9c2f73a79bfe31782a17952edebca308bbc9f90e2ae15525bd501268a1c38c669de0b4e4fcaf1194591b0000000000000000000000000000000009c35254702eb7e3213fcbab62946ba79b7375cc320ee1733d8bf5729d378d1a98fb27d870e27c13626c35cb00a6bcbc", + "Name": "matter_fp_to_g1_45", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e8b2369fc2c584d78d52037b109aecc87dea0eefc2da46948b5535ad19c9abdb31aee66739f4852a2d3c51f2e7f74e9", + "Expected": "000000000000000000000000000000000059a3315f8b6e75c45e32843b4ff2401c41e1f6716a5909894cfdc71a49253d2cb04ec416d204bf0bdda051ace606260000000000000000000000000000000019cee852aa9fe28e1da49dfbfa7901220616f464ba447480c2421fd6d3a5a818c778510a04cb6557d27f7ef9a78f2fb8", + "Name": "matter_fp_to_g1_46", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000168b2d3e4b67390cb8ba5e48a7a823db08edee7d8eff41b88cd653cec1fc0df7a55303d3c91e92a2dc8ebdb327b225fe", + "Expected": "0000000000000000000000000000000001d157c963811725ad533539f17acd16ac3aa22917ecb2198d83a3ba396955f2c9654c02fd42e3d4ee6156cd148e9c270000000000000000000000000000000008fd299ddabfe525075f548a31ffc990a3626aba0369bd0accd0e1968204c8e1085c6b287b370808609178ec8ace2d0a", + "Name": "matter_fp_to_g1_47", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016cf7b1a9ebafbd20c078948fc974bcca9b8069edc1ca5e8f364f8ca2a52e56e1a424ea6bcc4240f46dc7f262760bf48", + "Expected": "000000000000000000000000000000000ee6b51c5eb4dd9c27a61bc2f3480d799cc4fb88414630adb3961508c7067bb186682194af406f811296228c068e6415000000000000000000000000000000000b878c207bc4b61e827ee09a7825fb216a63ddbc4ef0522b8a944bcb673ca368996c31e6513504c5deb5325ef4df0459", + "Name": "matter_fp_to_g1_48", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011a6a67d4501a8d9b3ab985be59ffc41e79c453bb5548299abff3b83ba9ff951025a68fe6a8ad3eef3c02d39fca8f909", + "Expected": "000000000000000000000000000000000658d61bbb2273e8969269dc16e16be93ef82be0668c3a164097a1c0816bb4aa94e5f70ed8d96bd15d9acb602d70f8ee0000000000000000000000000000000008f696d49a5c6f3dc971699a5837f7b3a20e222d9559d899eade367ce684b60153dfb75a9a8b81d7359a93069e2d7d7d", + "Name": "matter_fp_to_g1_49", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010e53fe9fa94ca622cfa370129c1619b2426bd9d50f4b5eb8a3f681479128dbe92adde15477ad8a4463b08f1a02a62d5", + "Expected": "000000000000000000000000000000001313f4cc65865c367cb5c1c96cf30c7e993207e9ef4b2fce9db01181b1192520f01a0428668bb9d33eb857d9435939df0000000000000000000000000000000006b5e883fc24585de3b0a0b83cc1742050e578cb57e89b385e245da0dd2832852c3fa5f31ccf55e6744e9cae6c2f705f", + "Name": "matter_fp_to_g1_50", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014d10a90709789b25369f0376f39b16860aee1ddc3a4340542abff0077a4af8da946cc29fb6afd9930b872ea98749be5", + "Expected": "000000000000000000000000000000000f3fdb57966f9ffd0e20b9ad3bfb4fcade56468aa598cacfe388cd3b647d5966350586daa4493de23703a1debc82e48900000000000000000000000000000000044ff5ce3b9bed637709f9105bec0d86b4f0ea2dd86c9c3b1324637cd4c0fe5a4a965021c51279fc03592414e7968d23", + "Name": "matter_fp_to_g1_51", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000194612afb777e39d0308a290bf823fe706487c3473412d1410dcb2c0016a70706e70e3a009c0bd61e755b1e4c65bcad0", + "Expected": "000000000000000000000000000000001288807e8f49323b39c5d592b97f19cf76f2f642dc4fa704004789d28452ce7a02a45f3f83a8d9875480d380e76df09400000000000000000000000000000000123b15dc7f166cb7c2c106cfd2f7c321a9bea9e3bdd118058c4745b6666a0df2a7c7fea16887a4c85faf860fe48a3787", + "Name": "matter_fp_to_g1_52", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ade016d06179faa8d44a9ee2542058bb81724d6af2954c0c09a897703d364ec25e62a3a917c5cecce5c96a7cfba924a", + "Expected": "000000000000000000000000000000000adadcf2f074679ef3523c10674260b0e40106cca8d94b05f83e2b27d8da8c00dea4215a30275ea5e1a8fd0beb45dfb30000000000000000000000000000000003c2d436e545163abbb18ff7c8e6db1e55c733c75f9594c695c66656690e88995f9f266c2620e99075d3b78805e3ad41", + "Name": "matter_fp_to_g1_53", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005aaeba19cb0baff9a8e46b901f15735a0c1f45116fe1f41c22fbe1aba22c0a7678bd4799db5cd9141f3112877e2c5f8", + "Expected": "0000000000000000000000000000000016cf855c1ea449c47236065ffe53a4c6afdadc08f1eaa26a8f79ea92a7a119b26dea1dfdab4db9b02b3dcad2c077338600000000000000000000000000000000071924c7d4e6aa5234dc921d288dcad3e49b44d2f455d207f3641f4b5b5c809b84c04945df08e785b3d99eda1807611c", + "Name": "matter_fp_to_g1_54", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f54664746a5bc6f64021e2f18d8c175d96b1c8ce895809c0e6fcfbe896b3e8c1ac7f7556b9ef953371bb143bfbdafa", + "Expected": "0000000000000000000000000000000016d80d4689e959233f05a3266628e233b747705bf6d6236771d5e697da03a0daa2dfa88aa5a3a5b97bc4517c467e94510000000000000000000000000000000003bc451286fec0e7a01d29ffae4986a2a3371d4aab875547cac05f759f5a52b8cbf84798b5b3d664a8692b212d4e974d", + "Name": "matter_fp_to_g1_55", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010ca243fcabbdb219c5b30092d9d4595a4b8ad1cbed267229eb79a99aef9c5df03d8f24b71db77a5a76917c2fd960ffe", + "Expected": "0000000000000000000000000000000017297cdec2f6a54cb11c1fdac799f252c72dad52ead6c29de61d64e56ea0e0a1d3a60284029323e35d38a4a25f82fcd60000000000000000000000000000000009beaeaf3ce2c9bfbfe5e04ceaee87460d760c4c16caa7b37767e16b8e97cf08bdb6d30472b3027f66803dec1ce40eee", + "Name": "matter_fp_to_g1_56", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000135d8d92f075c219f8012ce6aebc8e48443b2f33382479a4ca8db0a4f92041d5b6b1e5818b7a3de77a5d30be0e461d13", + "Expected": "0000000000000000000000000000000015a163067e8039be1c365804887dfbb78a7a699f0308c8e26519bf1c86fbe6acffaa26f0e5a2a380d1c704fe84d3bba60000000000000000000000000000000013f94e107625aca9c4346102dd5f09d51e445fd44ea67f171048e8f9965ce3496e759610c078404d41add90a358af482", + "Name": "matter_fp_to_g1_57", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013e042ccfe0cbb7fa3b045a1fa1a86f199ae91721aaed488b96cc4f6de1899402f81842da2ab55c5bfa63f5b19ddce73", + "Expected": "000000000000000000000000000000000b0667e2b7c0fa318c5c0e66425f8cbb8217bec845bfe56997cdb9d0d915131b81e82419a4533eb573ffe103077f35c90000000000000000000000000000000018074b6e0cf144fff9da02a4b5785d21762952d4ed23b1430d6165974f49521b73eaf98973f7967ffb35cee92a2b5269", + "Name": "matter_fp_to_g1_58", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000063cee89d1981f27a4f4d4f23c4d1229fd3333fc8f371ebd85c588e751307ccc75d71d151f7481ecba1ef0cffbfdea5b", + "Expected": "000000000000000000000000000000000b5e953227f4f5e2070482cde7fded231bb0d4649a626d356cab2bfcba6c1588ef38c62cb2c550719091206727715dec00000000000000000000000000000000095f29eab98321d334f22b4db0c30a0604c5c385fd222a71399763f5c815e04226d9d06b460b9e3b44d1ec127d20315d", + "Name": "matter_fp_to_g1_59", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e07265d2762e8e398c83efe1c43452d91b90b7a4271c09ff693c83745a6c01b73561ffe3da9300c8e7e1602dbaab0bc", + "Expected": "0000000000000000000000000000000017946ce626cd11556f85d15b85044fdab0456e24b5e331886be860bf55411a03886738aed9b19d52e91a94ea5cc5f040000000000000000000000000000000000cbe613ecf3c8ca8a5f0617c64647a609ce6e8fd40ae42f69a928f4ba78f7038254689bac2dcde7a464a03d5e26e34ce", + "Name": "matter_fp_to_g1_60", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000375579c16a167fd9f9f61d5177705f157aa0df3451971029a9444432db119fb33b8c07de33fc822eab46ed4ae47cf82", + "Expected": "0000000000000000000000000000000003b425300fc1885f2e932a469a8137bbf9df9560279a5ba87a13e7d4a461489bd8005054f14fad881e06aa46e4333d920000000000000000000000000000000011dcec636ef785d348fcbf9c59a82080b8f2c02d7ab954bc17af1c163a5383a36dd3948ac9110c6afb363ccfde2b6682", + "Name": "matter_fp_to_g1_61", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aaa37576af2101d090139f562edc2a6e7169b0150af831d053a3a87a3a5518889a51871e02deb3ec154ccbe9dda46df", + "Expected": "000000000000000000000000000000000e545a87fb19f7943e18c75f7a173d18ef8129b200222bf6a2ba5a93a92c47ba7accecc4f089c42d6c6bb2425bd1786e0000000000000000000000000000000008c005ef6e5b25e84a8251add6112db49637c2b955af8cd65d029f8e17abfc660794b474689a00b5d2784163a9a0c241", + "Name": "matter_fp_to_g1_62", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000158edaeb58b99d9442d608bc8e6024365e9a81e0aa23bbbd466c9ccc8d29415352a153e1f852666505ef097122592ecb", + "Expected": "0000000000000000000000000000000004cedd2deb72d9168ab5704e21d9a5d85b65ae1510a628515753e85425286d9825dac99922be4a19870700956a65ece9000000000000000000000000000000000f5b0efbb2b327e294246fe862ac01dcedc7e728b938edb9c4a6128740b7d192cf8ad877b869207fb6d1453d85db895a", + "Name": "matter_fp_to_g1_63", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012bfaf34a8111a01d213f9a9fc90846335cda978b3df23de99cb7b764cf5db1a816f66adad1319aa7e25c0ab89e7de74", + "Expected": "00000000000000000000000000000000031841f58b82f7e44aa03f474f18360128aa5699e748e4e2fda1c29d3cf165dc3542b90f09e415e92d73a162af38ad52000000000000000000000000000000000028cbb3ff58cf28f6dc876c2c1cb147bd6af85f3baabe253e9a1dd69687b3a46d4604d2d92d08310ecd7c90723bc7c2", + "Name": "matter_fp_to_g1_64", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000fed118654a128735fd39ffd3b381ad2d71479054b6bccc04dd58fbeed9b255ce2b925e2141a96a12edc3a19188d1f5", + "Expected": "000000000000000000000000000000000e378bf9d1d65cf3a39dc2b3cd2dca8954270006abe048cc29183c5e7c1cf464b21a548679fdf5af8a31e198b69ded53000000000000000000000000000000000865c90b45eba1979e433f71c93c7b3b8e90d3d12a3c2153ab7c420f507bbf91edb593d3beb3899e76d41674b5ca33d6", + "Name": "matter_fp_to_g1_65", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b693fe53cbcd6f8d8c98900be1f9c85966cc644f0a900c70826c6573ee801ce7863a0b170ce0ef168fb1f0ea484b276", + "Expected": "000000000000000000000000000000000844679db6a74e2a1f7c342771616c446c5e240e40e1f994fcba49f8ab22a7fe06b6909f50ea3c49a8fbebaf2b22b0a000000000000000000000000000000000090afa19255f7b71630c466d6b180b2100f8ea6b7ee2085973e409af8027859b61e0c46b639120ef6f3ee1555aed2f94", + "Name": "matter_fp_to_g1_66", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c6bd688fb883f3097f8b6fd6fd0bc5acef9341f21d62a0706fb3625a70459c45a5200ee36a3802d4bb4912030bfcfc7", + "Expected": "0000000000000000000000000000000009ffb2b0054536d714944c6c96f8c1ea902e7109d4917a54ec551d811ab15042f843e158a9e4decab9761cb10e7c3e24000000000000000000000000000000000a6c7a862b951aa9f8c2d1e8ba30af8b7909e9721a06479d186e46ffae3ba09f5f52561c7c4c34d121be1304650cfc6a", + "Name": "matter_fp_to_g1_67", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ba7f82549ebfdc7f4959dc67cebde4720d76d5d4742af730d45d614133f0a7b0ae7b61ba5b914a997d9dde83b77b031", + "Expected": "0000000000000000000000000000000001f9035574fac4ddc3f114a79938105d95ad4947588028b60e2926a8e0fd78710434edb2ab6b761fec43e458e19f0e200000000000000000000000000000000001e86d391172978aadc652b1c5d28dbb26a5357d1deb522bc280a270cc63cc18284e5b05033cd7ce1a6eb962a5b7e268", + "Name": "matter_fp_to_g1_68", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b4acd8c203ebd8e3ce12b10cc791b9a4183440309f24bbd60cb2991712c792ecac64d3f878cbe407fa8ca0d09548acb", + "Expected": "0000000000000000000000000000000002583631492e3e0bf080a5f67334f7a2907c707a678bf63d53badb3ed90305a6eae895f7842a5d44a2110585d412ed860000000000000000000000000000000018719d22fc604567689870d5a5b043ee7234927b1e878dce88be212a8b0981e64f3cf9e03dea94439f504c846c6e42f9", + "Name": "matter_fp_to_g1_69", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000145f6f774d943a1bb753d5d4876b1a88a4021cb6a6607c0efb07eef2f90ba2a90a6e9dc94586de35f6047332553ce7b5", + "Expected": "000000000000000000000000000000000fc1acd8490dee632c51e67356601295291b107087efc2483c1e1a41fedcff244114608c49f6911a4249a59a891264140000000000000000000000000000000019c402eaa9ddd6ff3c72a7d3bbc736cc867b437dbf56c9941ffdb2e0cd60bdb7ccbecef3d62aad22e97c1d96a328e8db", + "Name": "matter_fp_to_g1_70", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b892f1c8d001c8aeddf845c3845c51f2e06c3c77e543e9721d797951b6211a869da97325b569e0de35cf3beda853ac2", + "Expected": "000000000000000000000000000000001785abb82ace5d8024c97b3480fa69a65f5ed48fd3f5416f068690f8f79295d13929d01922c562277f65293abf5d739a000000000000000000000000000000001076dbc521375a1431b24f7d03902491b80b1856cbfd3e759b520927fc559e705801460afaba6991b032d59739c25059", + "Name": "matter_fp_to_g1_71", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001878e791993186ab76f785b2c6b0fe08588b048007c66fc00c695b55bd17b37bdba71f34ddf75ac441a0c2687711b299", + "Expected": "000000000000000000000000000000000bf99b7aa1dd96f57974fd79d5823d1f379bc0e32ce416e6f89a499b82727081aa78529dcc76257d1d699b9979ee23f900000000000000000000000000000000067044e8b0cf455974850859bf76bca780f1908beb06a64a7ee8db2ed54703431c354cc3d7576fde0b45611a2f49f862", + "Name": "matter_fp_to_g1_72", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016598f630f72a0e1f39678e1d0ec6530c4795d7565c5d026fea2389ec0ceb51b434b532466fbb1c92c1c958041283baf", + "Expected": "000000000000000000000000000000000d102c354adf7380053c8b0c11a5c15b046516a87b3e98d1f909bdaff06eebfd9b0c457ec3741833da262f77d411cc500000000000000000000000000000000012cfcd6910ac046ab8c0b448edca5847d0f8cc2a4633fe42edd223ea1b73ec451de8d75cc3d37dfb741ee35259b34449", + "Name": "matter_fp_to_g1_73", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000134725b4d43cb87d2e4d3c43ca98b8df257acfa612ccd61dc0aa1ca749f20bd42c38d933d39f8c3c1a14dd8fec433292", + "Expected": "0000000000000000000000000000000013c11f82052df6294da64b16551e689c439d2d27922bef2a067bc49eb4718a392693570f3b3e58158dc0f5bc3a5b8f73000000000000000000000000000000001517ee24f199913c184181561823d7c3506caa09d93d506c7773f9f615169df444c9f09b518e840735c259ec02488670", + "Name": "matter_fp_to_g1_74", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000070ad61a7f5ff9f0b4e7483f5d56b0f315b5f6545b194565ebcf8f0b8d78519ec113af6d70550888be4d661a8403a036", + "Expected": "000000000000000000000000000000000a546a1f4d65a37d7d60468c18f72152473feeed100119b4518f4c778a7a37a23e8c60ee04cc0b39d5a1eb8c908856870000000000000000000000000000000009c5766d9c88dca87768c0aff4160ff0fdc3aa67dde3eafcca030eb295a6736e95e415f3f5a443f2545c7fbd01f97964", + "Name": "matter_fp_to_g1_75", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000179bc843fecfe713f6e3ccdc8ca0f48759459b675c8b96f5403e1f6da92c2d60449638f564ce179373bce473669965d7", + "Expected": "000000000000000000000000000000000a197b81c0950b1b802128a01e3b620fb2134115a0d1aa2946a82fd22e91f172785d19017fca385863ee1643bcd332b80000000000000000000000000000000011fba5b82b0b2726bbe7a6157ec9103d0b5a480066ce5ab7120294930b81c04cf6d0fb8b979d17c3e262bd1268bdf1aa", + "Name": "matter_fp_to_g1_76", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000082bd89b49aa62c94ecd4244b3077421569c71efccc62aed3d4bd492bdfe57c0d2cced568df5992a196a7b71bcbe5e3e", + "Expected": "000000000000000000000000000000001644dd543ee92960effec90347ffe5f06d6b087f13c6bd73dca93c9e16818d25ffafe3610260cd43ce9909e2ac2e2884000000000000000000000000000000001893436c9dc44500be831076b375d0feccfad2a126110fbcfb77acfb95d6dd6c6615b4b795c007ece6ea0c31915b8e32", + "Name": "matter_fp_to_g1_77", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fb118c86e974734fc434c3bcb783e4a7f9251d9fcfb9f4419529354c8a7a3d9f2215de2d1b9f0927b185c5b4db838b6", + "Expected": "0000000000000000000000000000000001aded655b8ba2739b820b894eefd7e60d11889d7321fdae5ddff5dce11551af24acea3f501044562237fe5df53305df0000000000000000000000000000000010f4f3f415891ba4dfb21307798329aac5baea98cdb44354d4263e1ee6436f613a3accf06802ce2c2782e8a15738bc63", + "Name": "matter_fp_to_g1_78", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004da0ce78f3068bebd0a59bc2e41e7ade737375f07d6c9ce962be022856c569a33e8bd6ae60c4bb1b53b3ffc2dcc2aee", + "Expected": "000000000000000000000000000000000be0b580d0f12faa809d589ba59c5810c18f74b025e6dd4dc49c83b6a39423c5cf82b0dbb1d750e1801e37a5291692fa0000000000000000000000000000000010891c5bfece55dabcd223518167c5b0663f65c001ed051735635b417cbcf2484a057522e1c3417e43c82095b0cbb855", + "Name": "matter_fp_to_g1_79", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001f43b86ec24ad40552dc4874a632b4ff4663eeefe1a8c613a19a798a0ebe321a3d543e2df28277944a941b4586ac770", + "Expected": "00000000000000000000000000000000152454ae7fed9c971cfd72ed054f44124d71542f9ada5a90f1601114289c93fb490a1c5d99b3e8c70fc44fd10322173f0000000000000000000000000000000017bf9499bdc15ae5091daf41812c74535ca31b56520e420edf9e5aa90795ce5db5fa42a06dfcbc7438e954db83f09b75", + "Name": "matter_fp_to_g1_80", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000baaca6bc34feac790807b5eb5fd173c86c12803b76b50be59b2707df765bd10eb467effe34f8dc3e1e79df8a54fde38", + "Expected": "000000000000000000000000000000001633516081b91621b786a09389e89b274c2d9ec616db5028b009ed5c0a1ab47695a0b95c53a45112144613a4af08e6ea0000000000000000000000000000000014b09586f75c939fd62c3d667ab6263367f8961ad4597f1b92d792e8ef79a469137dfba5ec0a6354d5bfe3a84130bc65", + "Name": "matter_fp_to_g1_81", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005e4751707f3ea7bc7a74d80eff27a0d65cea0c3d2e793425e79cdb0c41e6ad0cfcdbb4de604637c41dbaf30a1e816e6", + "Expected": "0000000000000000000000000000000000f0474d596ed86a0d664885f9c981228fdc352755d52dd7e979a85fdb1b6dad106d8bc0a1eac04b510829b7da496686000000000000000000000000000000000a72f532897f912eeea707bfd6d183a73786c7b2e2c80a01f3abe7b959467d6ea63093c16d6465382a7808d5f0edd92f", + "Name": "matter_fp_to_g1_82", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008f69021794d93826f8207b96d49214b46dfb1778603634a9f5194e92481465702a8be1bc49a7bb57527fe6f963ae04d", + "Expected": "00000000000000000000000000000000139ae959f9b0cc2d900e748220c4bfa7dbe22926d8ecb9a10e7d713fa0a6e147fa3463e06b791a5e604c66110b77f7530000000000000000000000000000000013f8d09915f77f4a18854dc2451cf39d7ff502a8184d3b4c59ad3317d62940e903d68836751172ec0b4a796db003b373", + "Name": "matter_fp_to_g1_83", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000116988a869cf552b2440e16569d8b6e30c6b15430855c4d6bbf80683c5497291bac7999c1f8f08f494fcb4a989451c3b", + "Expected": "0000000000000000000000000000000015d065191ab63df2175f821cf62a4b948a6b2389512c7e94e1fa3c99506af624810ee17de2c183ebd69b4dc485ae264b000000000000000000000000000000000fa8cfd94bbfa6d504497866c1e0d9e84717fbf0468a164e3b8ca46348789e2b7f08ac5e8aa2e7205062f3d5083dc5fa", + "Name": "matter_fp_to_g1_84", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e26058d72875fd3d852aa4139f71d35e1edb58242a4939da7986645117d027d20baf85770fc909d537524244da59ce7", + "Expected": "0000000000000000000000000000000012978a0da7162aa1e8b32cb6ec0eebf2c2e62350cab4534358c6bf80299dda9281e16ee40313e7c52c804b2f4de7f1870000000000000000000000000000000009dfbafc8e40d71a789a52d5f8b80e7c8510c58bc0774cfa84211a9c1417d75d5c7b06d7aa9fe052ad9c1f30c922705e", + "Name": "matter_fp_to_g1_85", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000078c6cf89561533810b583a88149586b29da5228ced10a75257b2587904217f63499d8b9ad2d536617247e12f8d1657d", + "Expected": "000000000000000000000000000000000de98869442b759a382d0f6ca45eb60424eb9aee2efdac83086cb6dd374120941343eb314756113e084f943cb60d91470000000000000000000000000000000019dacc8180e6dd09ac4bb97114d2ecadb04bd2aef6e5f0993742c5270267e42d052d436c99ba61f6c0fd1fd2cd51d172", + "Name": "matter_fp_to_g1_86", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005b016ede9d892fbd7aea4e8ed0f1eab70713557311481735a91308fabf76fe71e44a06dc23ea66ac5d831e982f401b1", + "Expected": "00000000000000000000000000000000123313e3cc006c4b95938f5eca903604ac9272c7a0c79cd932407b70635d7ca5de9297496c27406f180d5edebbb54c7e0000000000000000000000000000000002164460e59cc8788c96e235a6faa7fadb7e6ee9f6b0b95292992973ff54a92147dc7ae8e8f217515b6185875bd0bd7d", + "Name": "matter_fp_to_g1_87", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007160f36f0e5c4ccbcc7900c6504cd86fd6fd700bfa79af69841e4a6127eaad467ccc93c66baf7d767c3fdb1f31c527a", + "Expected": "000000000000000000000000000000000393a1b2395447b2e2838c2f49493c185424c4848f888616f16a95552671ff28b5ef223bf34299005f22a8df6efd68290000000000000000000000000000000012b1fe46279922e92d356355752ae0c2f28fc55de39ebfbd317a6c1c507d973f88c6282468571a1efc20c10314ac72f3", + "Name": "matter_fp_to_g1_88", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000043fe62b0b9be76a375f3be0d6ec891d5bf5f2982cb2390125ff8d5db57b6b18c5616c526102e4f615963d601d13f122", + "Expected": "000000000000000000000000000000000739f563b42648cde5befaf44317468982eb9d2fceee7d2efff1755be973cfc2beda829268246d09cd29fc3aa91f0b8a0000000000000000000000000000000014fe0b03ac5e0e03acd7811270d65742a3345bed7a4790d5f40097dd34050d0043104b65fd4691c251f03e67525d41b5", + "Name": "matter_fp_to_g1_89", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b9590b1d0d292d9967d759060a551f4e8e4c1c0066a9a3c0be515085847fa26b77462e3bae9e2621f28e01f897df0be", + "Expected": "00000000000000000000000000000000128e92c9c10fb9b065fe2c2dcfe365e98aa54eaeb3fae987306c7f0a227171ae0b3464d01a54a8d6b144ff60c45088a00000000000000000000000000000000001beaace4e23c9a31e1e9eb8596b3b05b9d72553f44c61627654757080171b05c900fe1b638193a69058e8d66cff1aa6", + "Name": "matter_fp_to_g1_90", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006ee7c459bb4da96e87eb1d39bd7368de5f60104f85b7b4bcdd7761ce08d48babe1bf5e765282779803bfa972d0e668f", + "Expected": "000000000000000000000000000000000a6099ebb3a1101206bbd21149cf22af2371106bd34671c1cbd4f2e19311fd100bcb56a6d9d77bd834f972e55e0fb75e0000000000000000000000000000000001db77a2045e54b0ac4b3d61190684b4eec9c4ea415e5c820992b70d6ee2e086c02892228c4465c8494f939cc0b7b5ee", + "Name": "matter_fp_to_g1_91", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000044612b42a2baa9d3e1d187b2a4e048773b4851bbd7d4025e0f7f61abee703b5a563397da4515c7379397dcde698228a", + "Expected": "000000000000000000000000000000001101cd37b61247a9859bb09ccf9eb416643f86b7109bb45d6827fbf424956c9a16b2a19c5e198551c43aa1934ad8ed0e000000000000000000000000000000000da562fcb2e3cba853de6d245a1ea0cfc3ac120b316a5f4f7072cc35a6634027409ad08c5d591a6688b24cdc4562cddb", + "Name": "matter_fp_to_g1_92", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000014cbff1000bc0f9b394b18e81124dc81f80e291e841dae6e96e0c86a6f618b9f6aa6103e0e7582e5136319a4dac92fb", + "Expected": "000000000000000000000000000000000323c3aa4b20691af32696c449668fb6da6a0c2e8eb176fb8fcd8aeebc9b5a3bffc57b28dd35e374811d420419fb0fd30000000000000000000000000000000019516a092385d8c917b46a742f086c51e2648c7e9a709ebeb5a0f8bc29c9aabf99972aa3a218582f37d91f9758a5ddb2", + "Name": "matter_fp_to_g1_93", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013da827dd718d3736cfcec53f034d34bce253bc91f7cfd6cd2666819bdebbfc43a9363f82bf4b580a7739b5dda9c9436", + "Expected": "000000000000000000000000000000000d0351d8557d21c2dd3b1be77bb01df804ebb9e2d7e80910264ff94861cdc0a4deedc1231c61b7503c5d653e31fe10850000000000000000000000000000000005858ee487860d1ba04cfdcedebda235616c2d271ed50f89d6cf2852ea7e10ac825dacd8b00071684858a12459d1705c", + "Name": "matter_fp_to_g1_94", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010e94039f37d218ad393e88a226dd324a37e8d5352dedf6d84fa2ed2cab2f874ccc5ce94599950f91b8dd6d6c8b84aba", + "Expected": "00000000000000000000000000000000176c50c2fcf1bcbe03a1a1ed2eb120f94ad4fcea34a59607ea595bc2b37cb92f87641191b65d4b5d57f5491ce6576a670000000000000000000000000000000000e177361e09975c98849faf8e24086f75a48df0f257ea47b659cc2a142a57ad1f64416f6dee5cbc4e57f780dadd1cf2", + "Name": "matter_fp_to_g1_95", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000010416da7cfbed2768c77b80957053030d49d535b21a8a3297ab257dee0463c91b87a9e571b86bd874522149d9af0c29", + "Expected": "000000000000000000000000000000000dcce000aae744f8b3b6754af57a36786d887d7f9857654f93edbcb6c4416ccfea5e859acc82860b5f706087e87cdc07000000000000000000000000000000001847c32c839668a38669fdbabb512df15cde2b28ca336b0e158d1fd57f74638d86ba40ff68f0a50cead7021e86c5271d", + "Name": "matter_fp_to_g1_96", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000197ef97f6d02a51b80e6f5629e88a3c60399bcc4a358ab103dac3a55a5877482558abed922585a1ce3228ffb507679b4", + "Expected": "00000000000000000000000000000000062a58846d39dd1fdbd34a7117797f2200d814b2a8eac9479885762565a979e93b5313575bff5ada3211eeed0a3f4ddc000000000000000000000000000000000548a24e7af2b38c4d16d8dfc8fb2d7e7669051e2643c44aee113f20d31f4853cef84e2dec20095c273680cca278331c", + "Name": "matter_fp_to_g1_97", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000025f1ac90f5b0748d57d8f7a928be875c5712801f70af0d057546228c1bf83d3a207884c0d66d0b5dbcaa736bfe0aa1", + "Expected": "00000000000000000000000000000000107f01e4fb6430e34128e3335872cf40df2b498a63e048d46158190cb627e37833d2238dd72681037ce376384736b43e0000000000000000000000000000000000e1812299403efe0f8d111d97a4b7e7b8aa1f4ec58f9935b1367d81a847fb42cf756154448f9172118123679a41a280", + "Name": "matter_fp_to_g1_98", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f66b472b36717ee0902d685c808bb5f190bbcb2c51d067f1cbec64669f10199a5868d7181dcec0498fcc71f5acaf79", + "Expected": "00000000000000000000000000000000188dc9e5ddf48977f33aeb6e505518269bf67fb624fa86b79741d842e75a6fa1be0911c2caa9e55571b6e55a3c0c0b9e00000000000000000000000000000000193e8b7c7e78daf104a59d7b39401a65355fa874bd34e91688580941e99a863367efc68fe871e38e07423090e93919c9", + "Name": "matter_fp_to_g1_99", + "Gas": 5500, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsMapG2.json b/core/vm/testdata/precompiles/blsMapG2.json new file mode 100644 index 00000000..f30eef65 --- /dev/null +++ b/core/vm/testdata/precompiles/blsMapG2.json @@ -0,0 +1,702 @@ +[ + { + "Input": "0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350000000000000000000000000000000000e885bb33996e12f07da69073e2c0cc880bc8eff26d2a724299eb12d54f4bcf26f4748bb020e80a7e3794a7b0e47a641", + "Expected": "000000000000000000000000000000000d029393d3a13ff5b26fe52bd8953768946c5510f9441f1136f1e938957882db6adbd7504177ee49281ecccba596f2bf000000000000000000000000000000001993f668fb1ae603aefbb1323000033fcb3b65d8ed3bf09c84c61e27704b745f540299a1872cd697ae45a5afd780f1d600000000000000000000000000000000079cb41060ef7a128d286c9ef8638689a49ca19da8672ea5c47b6ba6dbde193ee835d3b87a76a689966037c07159c10d0000000000000000000000000000000017c688ae9a8b59a7069c27f2d58dd2196cb414f4fb89da8510518a1142ab19d158badd1c3bad03408fafb1669903cd6c", + "Name": "matter_fp2_to_g2_0", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ba1b6d79150bdc368a14157ebfe8b5f691cf657a6bbe30e79b6654691136577d2ef1b36bfb232e3336e7e4c9352a8ed000000000000000000000000000000000f12847f7787f439575031bcdb1f03cfb79f942f3a9709306e4bd5afc73d3f78fd1c1fef913f503c8cbab58453fb7df2", + "Expected": "000000000000000000000000000000000a2bca68ca23f3f03c678140d87465b5b336dbd50926d1219fcc0def162280765fe1093c117d52483d3d8cdc7ab76529000000000000000000000000000000000fe83e3a958d6038569da6132bfa19f0e3dae3bee0d8a60e7cc33e4d7084a9e8c32fe31ec6e617277e2e450699eba1f80000000000000000000000000000000005602683f0ef231cc0b7c8c695765d7933f4efa7503ed9f2aa3c774284eabcdd32fd287b6a3539c9749f2e15b58f5cd50000000000000000000000000000000000b4f17de0db6e9d081723b613b23864c1eeae91b7cbda40ecd24823022aee7fc4068adc41947b97e17009fad9d0d4de", + "Name": "matter_fp2_to_g2_1", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001632336631a3c666159b6e5e1fb62ffa21488e571cffb7bc3d75d55a837f242e789a75f0f583ce2b3a969c64c2b46de200000000000000000000000000000000184f1db9ac0fdd6b5ac0307e203d0b4237a50554eb7af37bb1894d9769609c96c8437e9d6d3679ebd5f979eb04035799", + "Expected": "00000000000000000000000000000000184af3f8a359dd35dddd3dfcc6f5b55ed327907ed573378289209569244e3c9c02bdf278eb567186f8b64de380c115360000000000000000000000000000000012f5ba8e520c4730ac1fb75dabbfdc0181855e5ba2968a8c0ba36a47ab86ac45d19aa3d55f15a601e120be1f75eefe240000000000000000000000000000000004e313db704b103c2c1e3a58f8e95a470e7199081eb086e9524583131714c4a3db551fd51a3f2314a19a658e7b1765380000000000000000000000000000000004040eab7416a1703b0d103120506f1de2b26b0f48c7a0ea63dca4d9ad1c478ae03b5d7bfd51f4cd6f8cea26212c4edf", + "Name": "matter_fp2_to_g2_2", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000732f171d8f6e283dd40a0324dae42ef0209c4caa0bd8ce2b12b206b6a9704f2c6015c918c79f0625fa791051b05c55c000000000000000000000000000000001139e8d932fc0ab10d6d4f6874c757c545b15be27cdb88056ed7c690aa6d924226d83e66b3e2484b2fc3dcd14418ee60", + "Expected": "0000000000000000000000000000000017fc341e495bf4ef5da4c159a28320aca97ca28fe3a0441242cf506b0f89bb52f5b5d8c6e038d229ffe67d00151912f00000000000000000000000000000000007666300b7be3d904ae3d19019f7be5cf5ba6161b969c1a78aff639a24387d8fdcc4d0e3cd81ba6f063ebf2d859370f20000000000000000000000000000000007cc705dbfb5c0418beb1cfbd864fa0631bd60eccfdb16b5d55b6ef3558e2ec87dac3b45294dcf04a064d6d1eba5a6eb00000000000000000000000000000000052cb9c982e6b05c1d2ab4eed1d8082f96426b55615ebc6a53bdc320ccad0aad044395ed641b3176b554f19e62d46b73", + "Name": "matter_fp2_to_g2_3", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019a9630cce5181fd0ad80677ed5ad8cd8bce3f284cd529175902b78ad4915f0df56f0d8b37c87c9ddb23d0342005f1570000000000000000000000000000000002cdd00b7662569c9f74553a7d0585312a776c8638e54ad016f8d9d25df98651789470b12ce2626fb3ad1373744387ac", + "Expected": "0000000000000000000000000000000015ad9155037e03898cb3b706f7105e39d413ff3a5abb65812b8d21d003cab8fbb607d3938ccd6a774bc8debfa30f42760000000000000000000000000000000019d6382bb2d78180a8998a0536d67412d00ec0ef65f4cbce01340b8d6e781c0ff790296f8cada28966b147c69e02f366000000000000000000000000000000001290c2c205b748069d0875a89ca74a3b05ad8218ed46a1570696932302983c090d96e17e0b828a666fdfc3b72cd348bc000000000000000000000000000000000114f2f7ffaa9f90b547e86c863a5d3585819a78b095848dfa39576a10874a905488687b73e613f3d426510f5d1d1ce1", + "Name": "matter_fp2_to_g2_4", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e63c4d12a38837354bbcdf4f844e5dfe727ebe292016748007d162e74c1f849787767f7e77fc57a42783fe0b06c24c80000000000000000000000000000000008d879e4891a891f2e7d27eb95aef70d5b785b796620ec43dfbb6ae550b4effb9f24210dc20f401d54420445e21cfdd3", + "Expected": "0000000000000000000000000000000012084a53cde353a46af17cd2fb02c477e47b874d8ff58025b5015837759032ff98013dc5bf01253bb964f035183c9071000000000000000000000000000000001659272ab7e3a070a5c7b25a5d3402f7371ed67e58cac8438df41c39c1acd95ac5886b030384bf537d7c4bb8ddb2c538000000000000000000000000000000000852ddcc37a09a0a8f62dfbd1ba5064c1f6afacc9a279a4d998bed643eec5a0d96d6bad95701a04f52c83e8f87f48d5d00000000000000000000000000000000097a399370875398028d42bde8cf4e9641730af7a2971e2f59c95938120603a239c65030ded4323c955f7fd24bebf31b", + "Name": "matter_fp2_to_g2_5", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000028d6de947a3958af5b53578b0ceacc7ef89d36526d8f3b6fbe787af69fed2c85cad3001643b81c575a741c4566e617e00000000000000000000000000000000182b56202f0494bd8baf5c03969288a1288b8ed8e6c7f49ec9f7493ee3369eeb42fa8f5fb7b243fb2bcee6be244f02be", + "Expected": "0000000000000000000000000000000006f8191123f1e8f6a05e4e663fa763c8a0ade5de3c7cd38ec1c82e1c85f123ab51fffcebd677afec8e9adecd8d11263d0000000000000000000000000000000004fcd825bc55d044eb70e0bdd5ea2ac58ec1487e903b431c57a640c756265a382581b8450fb15dc649cf22a8539088220000000000000000000000000000000015259f83d76490bb868bb88c2a2c3e07a326bd3e97fc2f552adf85722a360a443d720c328076e35224328e09494746e0000000000000000000000000000000000f76b0b960a1343b4267f5aff44901fd6796a778b1a87666b95b773edd0e7ffb6656d4f0cc3b9b38bc6c0ed20cfce153", + "Name": "matter_fp2_to_g2_6", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016adb5935f32bafcccb81cf4d177dd8826013d85e11a4aad66e3aa596e1183aeb9d68eb8cf5b716a8a9445ea81b40d7a0000000000000000000000000000000018bee24b0c97af8aec210f15bbb6acbb76168dabe16e669d5558d8d32f00fdf5146471922fa98a28f238974d327996a3", + "Expected": "0000000000000000000000000000000018bf5f93dbc2c37479b819f8edccd687c4d3c4dd04f8c73762fd89d0c003674e3b2ed749d23e775f925279b3112689f80000000000000000000000000000000008a033b197aa8ea2213dbd7ed478d98c25dc6e9f91b9924f3c14124da26a67bb196926e02da89b746f2a67b14ad226070000000000000000000000000000000006f7824bdc9c53212609512858278f79d9b094165ff178e3da8776e24311bebbd9deb29f366d4c7693a15c34df118403000000000000000000000000000000000edde25fc24b9ec58b3c317aa3ae48dd5fecdf6397ed9636ea042722d264db0b1a89a15a1e16e892755730ef52796527", + "Name": "matter_fp2_to_g2_7", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000114285411713eafd395ee43bf1728f52d17ac512b9d0cddd38c904a9a3a1b30283a3918cd2cc3da6a7d6b4ff923cbb6e0000000000000000000000000000000018a067f91f94b2904c5bb6900f427ec4e93374b5079c84707feabeabde20b5e49801f1f3c7504dd27da94d5e754df4ad", + "Expected": "0000000000000000000000000000000002d28025f4b798083aec3ca9a91a051ce27a374b115c944932026b4fe0dcf68b335d5e47212f800c241c2d42fd219635000000000000000000000000000000001742fb6ef8e9a5a7572b0d3fa4ae8ae56c9c6f4daa20d0b88212c40511c6f6b5ee98314a2d1cbe4bbbec907495a1ade8000000000000000000000000000000000d700a511a58c1b8f11153669cb21d88512dfdacbabe38e402431b4f7ba374b5f9a88614da2d56799d39324e9d19e27a000000000000000000000000000000000c6068bc7a43d614b8f1132b13e04f66d2fb5ac0c5bc8501b754a0bcf4f382db92b0994c4999e104c9d1111ef91d5edc", + "Name": "matter_fp2_to_g2_8", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000dafa9fa843879038fd1566c319c24119989090c5fd34f6514e57f633d3709f0aa9954dfb289843a6990588e337b63e6000000000000000000000000000000001742a98dd7d3671c2c64aa71023a0040e936fd726c062d520626113bed471e53ff3e85737e5abf9ee8821bae53135f20", + "Expected": "000000000000000000000000000000001350c68434a9b02392e60540a3985bae8daf9a170b30336ac73afae6f892c7ae8f5f1cadfb2780d6e5961ebf91cd69ee0000000000000000000000000000000000c20bd286fc1886b9b28dfa40d1a27395cf76a8b73946849ea0a7b5e12530de13c16acef8fe2a2c247ea65ca023eed70000000000000000000000000000000002d8ffd0235fb60fa573662034d46260e0c96396537b2a9d486dd03bdd13c5a1efd2d3cb9849ed11c4376b665f378226000000000000000000000000000000000d90ca1b73a6a9566832f9f19d8530a3b12f22bef853fc44088559b923ca108cebf4291e0d7de8f25c7429d455f5ae46", + "Name": "matter_fp2_to_g2_9", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019cda532e5d94f3b193b3f286a038637a736c2b87b804efd4779359db5bd95320e06d6d28da3c229ae48ffc02303fab10000000000000000000000000000000018df89e4a545bfb825bcce2f4c25f2416a72e32633b3dead5205c8b7d69c78f119d0e940e5bde9ae1cf91574e5d6c175", + "Expected": "0000000000000000000000000000000013f223602e8d12c3bb51cd393f6f59beb5c55fe80c3fc8fb0bc90eca533d9b7981563a30ebd727ab6cf0111fa2d3099d000000000000000000000000000000000962b0585c681894cb701f17ec06c0c240899db574c02d82d85ed4dabd4b8654c29b84c71d2921986fc2abc542a3ed9f0000000000000000000000000000000000f0e79245e645a6e3fb88b9103ede3e6ecdd7e45d61b5755d7a8d100d80719746af58bb23d3068cee7389b2acf17f8b0000000000000000000000000000000017fa0aac84c58283f34b9bf713cde98c175b38e92503c08205350822d778f3dd5bed8051e185c495831a628aa89335c7", + "Name": "matter_fp2_to_g2_10", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008ad60829ff001404da40923806e496640a90c5c258a41ef5912f8a1a20eab84ce43b2b5aa4aa7dc4d8b281591d235020000000000000000000000000000000000f13dfef4b3b83aa7f9525eae9913e10502e77c03c55a7aa2de083dc5102c098b6f8e36cb5247b827e30fbcded9e2d3", + "Expected": "000000000000000000000000000000001062c97c214b86518660c5e1c33a4e48923ae89ab7d8bc5c798e631de16fc1f104aa957d3e7915aee8551e24aaafc8e6000000000000000000000000000000000e42b785f17f25b87a0dc558a8d57b19d8f41767c3b4fd70c147e95443aff2d9a743003da41d578a2b56d7dc748cf59500000000000000000000000000000000111fd38cd2f5f681bb37f6239a5eea820ce3f01023c685f8e7e244fe9aa9dcbd18f0e50705faa5d8d66b28af9f371c630000000000000000000000000000000004726d3e452f6fcb180ce1d50bbee3a23f7949b635a058f12de1cf5abda19c042168feea53211dbed0bfca489a020930", + "Name": "matter_fp2_to_g2_11", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010468e5421a72ec85b63f7f3070a949223105763868111424fd151c8365eb0307dbc9cbc92e5dfb296d06ddfb58d99000000000000000000000000000000000008149ce856d489050ea834452bc66f7f3478c2056969354dca8652f3d0a349e40fae0c4c57ff0f5e022aa93c61f8c844", + "Expected": "000000000000000000000000000000001211bb8d3bf65b60efc7237ffecddb4e7e2f0dd36e2a704dfc9f4972897addff1a57182f8e0a0ac08c9af2c98eaa4c560000000000000000000000000000000007e9877280aad45a3b1453b6771ab509e4f53937cc6da73d3add50aff94869b27f49218fb479fe19a6176b9aadd36e35000000000000000000000000000000000ff915801695a281f6642751be77155a813847ae0237d77d2edf836aebac02b659b98d49842d4d10e82d9d146e63a3da000000000000000000000000000000000fae1c8c01a2dd94f17c660353d158ff6f3eed4e6375f1e414ade9d6fd040a48e3ff0d558c882e92e74bd6ef4ab06168", + "Name": "matter_fp2_to_g2_12", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006295de7bfec61f06a56fe09afbb74be968329e88ba2e87afffe9ea9bf646ff5b4a03d6088e87644958ced95eceeea08000000000000000000000000000000001443e61dbf14b6c6ed99e1917ecfbe5a4a23ab9bdd3bb089fbba76d795d715d9d2e3c7d8db0b7a9434ad691b68bad3b2", + "Expected": "000000000000000000000000000000000dd00d9f31cb5148048125668286c1790cb7294e740df978ac0bdaa6e1c4ba139a04f5770b194c9bcfb123d9b40b6acb00000000000000000000000000000000085d5f4cb831720fa13cef25464a1ba7af33abcc4079d2c5736a219ad9649ebb5dbb8687a2d3952390866587d7088f72000000000000000000000000000000000de377d773e40e1c76e218b969297d15f7819c525ce39aee5114e8405bd7361116682cf9d673574d415a7016b23b567d0000000000000000000000000000000018db26c2097f72b8788ef5aad2d7aa400627e224924afea1ac7c7a6b5cff4a55255e218572614519a536eaaf0f65533c", + "Name": "matter_fp2_to_g2_13", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b14b12ecaa94f9656be54772be9b22a2495d4ff873b0bb971c27ab1d8b940c84cabcf921f6f75e93942c38cddeb87500000000000000000000000000000000019eca0daafbfdcd3b56be863dceb21e624b22c0d376fb92ba606456ce3825981713b88e40b7fd801e915f97d5c29ba75", + "Expected": "000000000000000000000000000000001853b4c4e6fcdbed29c5d3aa4a9f6d447adc512f66a32fdef06c6ad316c42eb3ca47ffe6f21318ad610d0a68673d7bc300000000000000000000000000000000123d15c37fa8b1a95229e28500c9a767e6286b780138dcff2714bf1f8242f39bebb7d86e2811551914719ca90fb5615f000000000000000000000000000000000537498c2ec64b2ba58aa0a858b69990cac544d5cac29abdf6a42ae9c04061f83580b79c2a6104ebc55939d9a2bc5ae2000000000000000000000000000000000b348c19aad3b67c690512f372d995555ee38bffcdaf33bb827160d6929d2ce598523880f6136f11e1d6482a654cb016", + "Name": "matter_fp2_to_g2_14", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000104a452343a4098e9bf07380a8e52050259da95f5fc88f31511a08090bda85f0a08d49cef95bd26c7181aa3eb0be122200000000000000000000000000000000012400aaec3d2f4a1a8cf3f28fd396133c3999c074a565c110354472ae29479b9b62ab67128521c2c6ec4869811ba760", + "Expected": "000000000000000000000000000000000994e7b6ccafc996f672c42ab491105ffe1482e65aeb456de2213b531889773ad4d5e6ea1687d6a1f13e74878766f11e000000000000000000000000000000000b89030486a1d622c97970ee7da6189ac341b9cafbb4081463f579ab8b4b049c6e6c8b63157455770a79108424a14f24000000000000000000000000000000000ded43800a991f8c37282d803a39941d3bfbfbdc56dbf7500ef3d16750b27dcb1ad93f89714395fd3dffe318c1771375000000000000000000000000000000001994144b032e1f8c4d688754eef82cdba0018ac47030fcb77e8fd920e0b0336255d2cc8376c03e1074f91269cd2519d1", + "Name": "matter_fp2_to_g2_15", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000093e04bfcbd77bc6bafeb77f02d0f794a20b155435ee3af1d667c025e7645d9387abe0ef281386339f461352da93fbe2000000000000000000000000000000000481ffec570d4e155ec10e0cc58effe7a5651795d604cfda6cdbf011676772fdce2c25227e7d5a1a26748d15b1668091", + "Expected": "00000000000000000000000000000000195d99406baadc7d8740962cbbf4bc1f22b08eafb52f3cb3c588b6cb3cd89d16cb7b8d388563289f5b5ea466128525c80000000000000000000000000000000004809f70463633595dd763d658354df4f9b409911e1a0328fdaf486d76ffb410d7c6cfcc2d48fd6757d5c2a4834f81fd000000000000000000000000000000000654f8475562098a2cb27ce224674a383283cde35173e1c16b141998b641ac9ee663d766f045451a7f6d600973f0ec520000000000000000000000000000000013bac451a44982c7b1aaac7522dab598cb79b9a3dab77f4d5a4c1c97c154451499979af1f86ced8ce2099bccd400420d", + "Name": "matter_fp2_to_g2_16", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013a3c5dd40f7d7fbba7563331917fe19a093d5d25ae7993200c39460e0c46d839e3958b672b4ed195300f398137faa18000000000000000000000000000000000255bc4d313fbd61a270dce8c851f1fa09e6ac5dff9b9e8dfc8a236a1d44548cb079023ee9b8f0f5756b39e44489c3f1", + "Expected": "0000000000000000000000000000000016ea88d0bce32981f489438df1bc14e7ade7a45d449ee1ac1a041c1204460cf53ae5c0e111914d8af9e6b3b7fa394484000000000000000000000000000000000db571ca6a55bc8285421553a373048f7877ecb9683d52acf07d48e1026795993e4e7177490921bc6fe1e63d69c2de3c0000000000000000000000000000000011602919de1df6cc0dd36a59c84ebb8e209056534e336f5074c9ae5323f8a03b123dc6354cf85301d838b16518ab64390000000000000000000000000000000004407d30fbd632fd493055bd4d8cbed337767a2ac534411a3eabec570ba41d2ad28ef37512a7da3611ad60b6536b3f07", + "Name": "matter_fp2_to_g2_17", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab7b4dec955de92224b234c2d8bb2e3881806c2d36a9a21036e9412f0a8d3946027cbb65b5dd9c975e01b3f235b883f000000000000000000000000000000000ffbb55002d9e926b3d8e7d963ece82c14afaca8b4d8415df8f964a39db606ac99f9e442ff69f7ddbbc4ae563b836192", + "Expected": "000000000000000000000000000000000c1e7b188697aa9a053f14e2d907f2c61a59e0b0c72f9cce30faf81dc714a50113500ca9bc3af6657a5d214f52c90616000000000000000000000000000000001544c35d712eaf79d8dd5a22fbab72f8a6843728898412a7f305b205f8a50e03c6c462b87b3ac165e9e6428e0a44a74a00000000000000000000000000000000029ebafd90a1a887669fd0ace762a66bca2bf0a216333b0ac97dedb6bff3dda2bca1e3d0ed5fa9081c2887fe6a8e24cf000000000000000000000000000000000e1a01ca93ed268e0291a937483f7f8e252c91f9bd8bde55271b0c97fcbbb9219009514217dd8bd7e0267f44e9927a93", + "Name": "matter_fp2_to_g2_18", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103469c08562f6f72152db58b48811b0098b68af8de00e652bd5a67246459664cc8c54e15705d702d51e3f1d8ff76a7700000000000000000000000000000000059b326dd567fb2f8a6ae87f41fb22b3edc25122138a5f6732edb48ed7fa1949eda6144297f54faf406d873a016a1510", + "Expected": "0000000000000000000000000000000004e8ad9838e7e269cddf0ae5c8f0f57e7467e0b6f2b9e37e7c4bcae965e9582dc46c9c50aa01f5dc761bf2f1ad311eec0000000000000000000000000000000011b1438ccc668900914578c3ec6e1334d0823861c892608817498fe2e538deec73e0034a6e8ba9790f63fdd95af3714a0000000000000000000000000000000005b4c88196425d3ecd22bfc0cb1a95488493f85bb74f50315f0ffcdd57ad2de23c137cd6d2f6f6dca8af2e3f7bb0539c0000000000000000000000000000000017066344a0f345ecf6a2ba66c37ccbce26a3f551524f74636d4c4812bf5adfabffb0645b898b10c332e94e5f2ae2d1c2", + "Name": "matter_fp2_to_g2_19", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bd594d2f5e1472f85bfd550df3eb948085781459eb3037fab34186ad9a0204a0767c8fba571af858a054dc231931b8000000000000000000000000000000000087b8398406c1e707fe87a16118e2448d6a5f4fd1d6c9d7174c4d8a4314fc7b2c21f04178533480976dd20e28b278ad5", + "Expected": "0000000000000000000000000000000010d393bf893d589c578df58f4d0098ad3cd10d3a1d0f112f51b132a369e68c0284a6b70a5673383ae24a27a9043b16cf0000000000000000000000000000000003402afb77b187b45906d9cce348976ed88c758d75b9962a53352a6c3ee37751a9928097c0d68c6f8a315def4ca875200000000000000000000000000000000019b98631e53a3ffda3fb9165ef7236dad5c0c8d57c3315617cbd3ce77430bd89b9e1d88a019042cae0075594514a5e67000000000000000000000000000000001783bf1c9b0ec44c9191dab01ef5bda0cb2f533dbcd3aeac2b7c6720dbc8e3f770a215ec8ea2035129711ce4b448ba87", + "Name": "matter_fp2_to_g2_20", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000673dface7041c3d7503ce4a50af946d344ad48327b515740b45276403d91bf1ef9deba79c8ffa0126be990b62bf3072000000000000000000000000000000000adb42b7eb0f6759a04da7b933bbc2b6aedde47da8571d6fa32268c606dbafcbc810844017eb6377493a12d76ca56c03", + "Expected": "00000000000000000000000000000000086ac901098212acd091d9c4d42a1318c3b343480f1130d6e52128d61df9e19fb61ef1ff35de0ef60062cd99202910ff0000000000000000000000000000000019109b7292f1a420f09a56dce9694cb4944808a2ce9f1964cbb6ffd14a710c35abe81300090ffcd9e95f33e0de9f879a0000000000000000000000000000000012660c4e114a215390c6f6eabc4bd6e3d062ee28d0c87e24351c7d43195253cb7b5bcfed2b4abb2fdeb3ac04ee228997000000000000000000000000000000000e56d35a7e40a86ffd2088c81488265ecc4468d6cf02d563c91611cdf8b4333cf66ef50b993fe651b1792d2b242cff94", + "Name": "matter_fp2_to_g2_21", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f554e52c4a6c5a94fd09c617f57e8f87af57e73ceaee8997fc62c8ddcb2f875ee805e6594a0fb72738abd3cd4748ddb000000000000000000000000000000001876dd03316ff007a2efb4c5f452d8418edacc2881b20e8340895f6fc768d14fd89bd9db3dcfb53fa98a1e96055fa83e", + "Expected": "00000000000000000000000000000000071d3e796fb15d63c2d5cf68f59f11792b0b580b85c8839a02fad96664f14735ede2edfd5ba5b64045b366904f54ab600000000000000000000000000000000013fd1ea38d32772458622731b9e2d9d749f2b747443f7e47ef5e041531b56f86d1775d42a548b2bb201228f49ec9f46800000000000000000000000000000000099c2bd996c8c5ee37de971e8b75a0bdd4f69299778ee3d216973c9dbba97c7a93e40b209d390024bc4b5e82560a1a83000000000000000000000000000000000c4922ed9af845467440b78efa3a53ba904f29adf66e8ac437c8bb6624b5e5ba0772a5639b45fe167b1fb9283747c50f", + "Name": "matter_fp2_to_g2_22", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e8b2369fc2c584d78d52037b109aecc87dea0eefc2da46948b5535ad19c9abdb31aee66739f4852a2d3c51f2e7f74e900000000000000000000000000000000168b2d3e4b67390cb8ba5e48a7a823db08edee7d8eff41b88cd653cec1fc0df7a55303d3c91e92a2dc8ebdb327b225fe", + "Expected": "000000000000000000000000000000000e413d72fdc3db6fc79ef26ae8b37fe5c4356a80b3598513b5173b3406ffb54708b8794dae158060a1accbe956a39ff30000000000000000000000000000000019ba9dfa74fd241a55a3b47c9f37c6ebd1e8b51f46197881abb64b7f57c0e2d8f18edee35bb9da03702c0dc5cc8749f700000000000000000000000000000000183525156fbc80cc67d6cd15fd2ddf7fb0528656ec1d31b4c275ef101dbb635424abbff1154a3ee04346ac53148fb1f70000000000000000000000000000000011da0dcd666d01180902d8a7fd7d2fbb39f9c7587540451045956108a8579d7c116385a81627dad9d4cb8cfe68927b6d", + "Name": "matter_fp2_to_g2_23", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000016cf7b1a9ebafbd20c078948fc974bcca9b8069edc1ca5e8f364f8ca2a52e56e1a424ea6bcc4240f46dc7f262760bf480000000000000000000000000000000011a6a67d4501a8d9b3ab985be59ffc41e79c453bb5548299abff3b83ba9ff951025a68fe6a8ad3eef3c02d39fca8f909", + "Expected": "000000000000000000000000000000001932acb1fd0708edf13c293007a035991bdfbfe0089b61c261258e8c5c10d82a5318b2af221b372f0f3f43c391421582000000000000000000000000000000000973650743f0ec8e2acca33f2ef230ee7a05635d14099cdce913ad8678458ec0dde5c5a941097af2ee0c8ffb937d09fd000000000000000000000000000000000bdaf319044101ee9aa27b3accd36a5ecaf8b80deda4548377ddeb97283537be3f7199ad3c190ed23cdb44abb8786a080000000000000000000000000000000006c448827e3fe4f274bfa55a66bc76c5b01e29ac6a8dbebd801855ba4e93bcbd03292ccf804f07f21481260c135b827b", + "Name": "matter_fp2_to_g2_24", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010e53fe9fa94ca622cfa370129c1619b2426bd9d50f4b5eb8a3f681479128dbe92adde15477ad8a4463b08f1a02a62d50000000000000000000000000000000014d10a90709789b25369f0376f39b16860aee1ddc3a4340542abff0077a4af8da946cc29fb6afd9930b872ea98749be5", + "Expected": "0000000000000000000000000000000004aee050b0ea07118d76f835218b77b39854f5ababc4e2a29d7c8cc7c18a69c30bb22437049a051d049c8a84f7868ad40000000000000000000000000000000003b1b809d5046054924c3814d26fd5fbdc59e03e5505813bab73bc212b0f5bc0d3fc34478311c5e1ac70fd16a01c52800000000000000000000000000000000002249a026af0b49f4659eca2c23dc790fb36a7b2996188828a17d5852003f1420f11699062932835cfe6543d454521e30000000000000000000000000000000008217aea2221f8748cd81cd37777605a95a63aba36a6ddad72c1e1ac57b24d79ff9d9c4ed71a6e3ac8a378129d5475ad", + "Name": "matter_fp2_to_g2_25", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000194612afb777e39d0308a290bf823fe706487c3473412d1410dcb2c0016a70706e70e3a009c0bd61e755b1e4c65bcad0000000000000000000000000000000000ade016d06179faa8d44a9ee2542058bb81724d6af2954c0c09a897703d364ec25e62a3a917c5cecce5c96a7cfba924a", + "Expected": "000000000000000000000000000000001274f676bcc05e54fa4b0cce234870ba97a0b1626543d6a9f09afebd5a752769000df404e4d434ebfd561f8335f36d0d0000000000000000000000000000000002877c9438fa319dd1a00f381834e8f3d3cdebf4e1f7690cb82559a2e978bedfd2455be020d0353aa56d435c0174b5b10000000000000000000000000000000009487cc9c7a09be901673cb1bd9a51f45e5d2ed30c90cbdd3e2b294c8f866f68da55533b78152e9ef6de30c345fde5b7000000000000000000000000000000000a3a8d4aabdb260203898655745cb695e6dc90c6e7bf0248784f8aa2340390fd5d8f1c6a98eb1990eb97c2a7f103e3fe", + "Name": "matter_fp2_to_g2_26", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005aaeba19cb0baff9a8e46b901f15735a0c1f45116fe1f41c22fbe1aba22c0a7678bd4799db5cd9141f3112877e2c5f80000000000000000000000000000000003f54664746a5bc6f64021e2f18d8c175d96b1c8ce895809c0e6fcfbe896b3e8c1ac7f7556b9ef953371bb143bfbdafa", + "Expected": "000000000000000000000000000000000ef415dfc1e47f39e9632ed21c9c2bfcc1959299710dcd7935a757e3756a42c8f6c627c720fd62f9c486a8e88a64c76d00000000000000000000000000000000088079108fe7d9ac93590c045be0d41396f3204d83793c4e862c5360ddb3268a63f704a9d14323943fc85874cdadaff1000000000000000000000000000000000cce908e8dbb7ec35820f2db5ae1174e0f675b21ae416fc89a7f242df3ee98764022744842999f65132229156d2627370000000000000000000000000000000011e0e2f8513d0a71b48599139a9a29c8eca090c5b02292baba58e07b1d3898fe158cdeb3bbe8edb4a805e695e896984a", + "Name": "matter_fp2_to_g2_27", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010ca243fcabbdb219c5b30092d9d4595a4b8ad1cbed267229eb79a99aef9c5df03d8f24b71db77a5a76917c2fd960ffe00000000000000000000000000000000135d8d92f075c219f8012ce6aebc8e48443b2f33382479a4ca8db0a4f92041d5b6b1e5818b7a3de77a5d30be0e461d13", + "Expected": "0000000000000000000000000000000007c6f133647745c312695439f1d8c251e941bad6e988cfe324ec7c959a9e0fb50618984429ff1841d4286922a26873170000000000000000000000000000000008edb220f77ed17fa1f4757a42ec66ad808c1acc25c4b9311be4c09703d547f648d9dd7c8109ffa89d01a35c69ec2685000000000000000000000000000000001595cc05b04f557ed569b19d64c09f4d82e6617437571fddd72a672d07ad94bfbaaed906b3a7e3db519159ec8d0a8c4400000000000000000000000000000000041157d4f40bfcef680af0143ccdd0c4bdd25e598a470dae844d887c398bc498edad715fd7383421fc78758cc9b00326", + "Name": "matter_fp2_to_g2_28", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013e042ccfe0cbb7fa3b045a1fa1a86f199ae91721aaed488b96cc4f6de1899402f81842da2ab55c5bfa63f5b19ddce7300000000000000000000000000000000063cee89d1981f27a4f4d4f23c4d1229fd3333fc8f371ebd85c588e751307ccc75d71d151f7481ecba1ef0cffbfdea5b", + "Expected": "000000000000000000000000000000000f983607a6d8a5c3b8a577cbd5d81ad2ae936e714199e3f4095cf280b8fd6d3699acf4d2ef251a571dd1ef4ba6d838bc00000000000000000000000000000000048c12f8b95f9537e56479b1bc43a121e4edfb6477fcb090a5ea60c5f4d01071776dd0264b0250902448f62800f4d2ea000000000000000000000000000000001644ba272d7003d0077991ccb4569638de0dcc48fd2e8e9a41cee1d2200aee1a849f2d620f60beeb06b08c31cd4eeacc0000000000000000000000000000000018892d773f7e48247215484ca0c8d996833c43a5291b0380c97607c86f4ab2784e692673a1da012ac4fec2713d156a49", + "Name": "matter_fp2_to_g2_29", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e07265d2762e8e398c83efe1c43452d91b90b7a4271c09ff693c83745a6c01b73561ffe3da9300c8e7e1602dbaab0bc000000000000000000000000000000000375579c16a167fd9f9f61d5177705f157aa0df3451971029a9444432db119fb33b8c07de33fc822eab46ed4ae47cf82", + "Expected": "000000000000000000000000000000000a06ea8e644d2d762520ad956d41ac2086a588450bc34f6d070b86fdfd73cd0734341a751d823935a009b7517770f86e00000000000000000000000000000000140ef0d6a0482537da7db8d775ac3c4a93b16c15fbe4602b5b1843ce757aada5f7776a74151d0bcf760f7284d4ffe56c000000000000000000000000000000000873c90f56a2b99da2f0a1528b8e376a5912f9cd81a159379ad70b7c10e6ebb7fea0a90d65543d968a34ebd539372e89000000000000000000000000000000000b05ff57079386e4e18e73cbff5f7b0efa329ef7355f083e8be258922203240dbb8926f7d11c22ab4c16d1df4bcbb600", + "Name": "matter_fp2_to_g2_30", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aaa37576af2101d090139f562edc2a6e7169b0150af831d053a3a87a3a5518889a51871e02deb3ec154ccbe9dda46df00000000000000000000000000000000158edaeb58b99d9442d608bc8e6024365e9a81e0aa23bbbd466c9ccc8d29415352a153e1f852666505ef097122592ecb", + "Expected": "000000000000000000000000000000000e9d6f9e83a2584f2cdacc4711085bd251e060f8c87ff7538ce474d663c6f23361c88971c9da589586e754ed69699c820000000000000000000000000000000003fa90cc1dd81b815704e15c0448bd0e8e8d0cd7ad51237a25d4b8a0f78f532b18ec30a108930b7407b7486aad9824de0000000000000000000000000000000000cb97bce1f75b1df5a4b52745014eb632d2d2230e52a9767e3dfd76754e98252ca81ce274b92a2947f6a65fedbaa3e400000000000000000000000000000000090edabb37f411fae1764792083c8c7412fb470833a9f7399fb312c58687d4afbdc622ecf9d74cdfa3ea87382adcdd5f", + "Name": "matter_fp2_to_g2_31", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012bfaf34a8111a01d213f9a9fc90846335cda978b3df23de99cb7b764cf5db1a816f66adad1319aa7e25c0ab89e7de740000000000000000000000000000000000fed118654a128735fd39ffd3b381ad2d71479054b6bccc04dd58fbeed9b255ce2b925e2141a96a12edc3a19188d1f5", + "Expected": "000000000000000000000000000000000cd234fcc729a4206233e46875a557027cb52c96322386b56d6e50d95dd9d23b6f8936ddc6f8475b1076a855c1ae23510000000000000000000000000000000010a774120f607bf9ad2d7bc498536cc9d35cefe384f88a2439a75f1a4f6a9e4b4253daff0d2c91b5915ee0e9a99b4582000000000000000000000000000000001496e7181495114abc0314f580c16038a04a8dab43b5564d518dba5f5e48112ce9daca4b16b6ad51c3af54ec9ce915d20000000000000000000000000000000002c61691a96a2120663c726d7fba3ed37524b58c92a024c15fccc659d1d2cdce077ba233a0d4419a6f237ee4e09abf52", + "Name": "matter_fp2_to_g2_32", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b693fe53cbcd6f8d8c98900be1f9c85966cc644f0a900c70826c6573ee801ce7863a0b170ce0ef168fb1f0ea484b276000000000000000000000000000000000c6bd688fb883f3097f8b6fd6fd0bc5acef9341f21d62a0706fb3625a70459c45a5200ee36a3802d4bb4912030bfcfc7", + "Expected": "00000000000000000000000000000000011cd454f16209b0b7040c744291f2df465ebc786946ce3cde77fe4d4bcc4b60a51573c45b8bb2d209da69107613764b0000000000000000000000000000000018a026f29fc2f81e82015ef8610b4396f2e3514ab1a213356953804d585c5cd6a3c5cffbf70d63d9dfca50129021f0e60000000000000000000000000000000015bdcc8c139e636b05ba7376c1ced4a183eb465df53b1996f4ddc8cbf42cdff4ae2bbc2d24831a8ec8b1134cff4444ee0000000000000000000000000000000017671fc3995babcd2c0a1d2a71c417fea84e29df67fa1096fe6d3ec77c45b64fb8da6ed08a57726ab314fb860899961d", + "Name": "matter_fp2_to_g2_33", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ba7f82549ebfdc7f4959dc67cebde4720d76d5d4742af730d45d614133f0a7b0ae7b61ba5b914a997d9dde83b77b031000000000000000000000000000000000b4acd8c203ebd8e3ce12b10cc791b9a4183440309f24bbd60cb2991712c792ecac64d3f878cbe407fa8ca0d09548acb", + "Expected": "00000000000000000000000000000000156d8823c37c81d8f03c0b2e61a2342aab6e6c9db36cadc9eb741e085de711e9fda08ca78f21753c4fdd8cec059b6c2800000000000000000000000000000000064d4fc2584c78f1e92f808d4457070b0470eb8de9d558885bba8b03efd8d8e195e4923d8e3382481a0ecee905371ae10000000000000000000000000000000008f1dc4d2ba12e7e3e1b0ef3855df4dbf29468bc99d5cb29fa3058a535af2ba038396bccaa238bba6d538498565c2809000000000000000000000000000000000fc9839b6ee876f7846b5086d487360b8faf133b6f5bd2dbc92a7fe2261b91b15aef8d90c227cd5f8ec05e32d807e022", + "Name": "matter_fp2_to_g2_34", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000145f6f774d943a1bb753d5d4876b1a88a4021cb6a6607c0efb07eef2f90ba2a90a6e9dc94586de35f6047332553ce7b5000000000000000000000000000000000b892f1c8d001c8aeddf845c3845c51f2e06c3c77e543e9721d797951b6211a869da97325b569e0de35cf3beda853ac2", + "Expected": "000000000000000000000000000000000d40f1c25dd57e36ed305276d4505cb250d2d9da0d5b954fe5e396b2c17a5399613243216586cedb19340e80f898873800000000000000000000000000000000063367c4a622fc925319fc6d119d8592f40f126ae05eed86ee5e4f6707b1d234c747e698c40f292dcb82ac5fe74ea80c00000000000000000000000000000000199ddbb5d4b6cd0fb9225a72c53f4596cf2597de63da56f4a9a18be8321a982de17367b0f3d794fa799657dd8ca10c5f000000000000000000000000000000000f1ed84e4fd958547d40cd2dbf16e2da4cb6d0d02763441067221890ae27ea1f689c26c900b695464ededf083667146d", + "Name": "matter_fp2_to_g2_35", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001878e791993186ab76f785b2c6b0fe08588b048007c66fc00c695b55bd17b37bdba71f34ddf75ac441a0c2687711b2990000000000000000000000000000000016598f630f72a0e1f39678e1d0ec6530c4795d7565c5d026fea2389ec0ceb51b434b532466fbb1c92c1c958041283baf", + "Expected": "000000000000000000000000000000000ee446310185ce76e31c13e4ca6c43166d971d9b9c539c7d0e8dd8ebbbdd9249922cb674bf6ad6840c203a5e208911fc00000000000000000000000000000000037344752896cff03bc39a9d09757a83c15fbd90f8bc1d8d58dca9b23bc00fa2b0f3f0bd7c9ed857d285825d40afde450000000000000000000000000000000003ef77f0220d1caa7538ecaef1ae2924ac1a180f11004034fc118aeac464fe1ce684b5fc90dae3370e3f79619889f3d7000000000000000000000000000000000fdfa434e7bedec071a1a333088d06299f55735f085a1e907a1c71c312bbb8d27ffa7de7ac69d421ebd675c4afd37594", + "Name": "matter_fp2_to_g2_36", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000134725b4d43cb87d2e4d3c43ca98b8df257acfa612ccd61dc0aa1ca749f20bd42c38d933d39f8c3c1a14dd8fec43329200000000000000000000000000000000070ad61a7f5ff9f0b4e7483f5d56b0f315b5f6545b194565ebcf8f0b8d78519ec113af6d70550888be4d661a8403a036", + "Expected": "0000000000000000000000000000000000ac465de3832452edcead434729be73be90785158617b5ec3ad53b12653e43721eda7de6742dc51d4d4bb58a291999f00000000000000000000000000000000147c39a5c162afa1f8eef400cfa1bdbe5436bc59d93973f50384022962f828ac934a4f88ab7c3d505b0bc3bb002f5efe00000000000000000000000000000000141bcdad53845a7eb2ec08189a55445059dad24ae5d39fedce869791aa28459f05a6cdf9575676cc6f3dd7d6faf077240000000000000000000000000000000010e9f539a9ced860661472f53147d0347927f065ec09bc32e00c5bc157b07f8b41b05aa4e0eedd1f73c7a287b2d0e5ab", + "Name": "matter_fp2_to_g2_37", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000179bc843fecfe713f6e3ccdc8ca0f48759459b675c8b96f5403e1f6da92c2d60449638f564ce179373bce473669965d700000000000000000000000000000000082bd89b49aa62c94ecd4244b3077421569c71efccc62aed3d4bd492bdfe57c0d2cced568df5992a196a7b71bcbe5e3e", + "Expected": "0000000000000000000000000000000016479eca30f48bfdaba4c8afca63ddbf59fe3367b2d3c17d15a5869dd2956fc67ebde964530926598cdcb62cfc993d32000000000000000000000000000000000650b4fd24ffbb953ccdb1b112799149d29e2377ee233b9ac97f4db432da63c98b8aad751f6060d04fe1f9262b75fca50000000000000000000000000000000004568dc0b9b430596f2fa59291ea6f923d552683ab9ab93000788145cd7c468c5576efd981c9ecee2ee0c16eca1ecdbe00000000000000000000000000000000154af1490463930d6b8261aa1d066eeda6d65b742cb53c65348e5cd766d86982a1489ad191d1b126233f193d24823b9c", + "Name": "matter_fp2_to_g2_38", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fb118c86e974734fc434c3bcb783e4a7f9251d9fcfb9f4419529354c8a7a3d9f2215de2d1b9f0927b185c5b4db838b60000000000000000000000000000000004da0ce78f3068bebd0a59bc2e41e7ade737375f07d6c9ce962be022856c569a33e8bd6ae60c4bb1b53b3ffc2dcc2aee", + "Expected": "0000000000000000000000000000000000df692ca763a74877352af3609c8cdbc184eb71bd35fd86334cb88543637b40b3adbb5802dcd7b88f4d722b566aba7700000000000000000000000000000000181495e709d1617f2d912f43487ad3920ac5f8e47395ec4b58bcf0b2d986c674a0c7838830a039bfb5bb59cd2fee2f5c000000000000000000000000000000000d20b482dd8aad583bd5d08ba9c61b3e954f022d48f9f4f62ddc9f5015ac71dab7d206b1d8b885d5e605519bd33d93a20000000000000000000000000000000010d3deccb9364ee386eb35c7117bab373a76d024627b8a031f96465d5f75b029fa992e29ad4a170c4473cd1df585429b", + "Name": "matter_fp2_to_g2_39", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001f43b86ec24ad40552dc4874a632b4ff4663eeefe1a8c613a19a798a0ebe321a3d543e2df28277944a941b4586ac770000000000000000000000000000000000baaca6bc34feac790807b5eb5fd173c86c12803b76b50be59b2707df765bd10eb467effe34f8dc3e1e79df8a54fde38", + "Expected": "000000000000000000000000000000000a007c914ed40c7f2719fc70def0d4752cbaa775cedae9365c5afb61a5e1a2854f9e1ce19af9fc85bfbfd2c33f5bf095000000000000000000000000000000000d85b0d173c25c2915fee429d2468a9eae01ba43c0f1a661f2ef83c1acd726865c00c40ccbc3aae306f93074e5e7858e000000000000000000000000000000000b3df302ec532c8100c121c9a3455392c713ec60de1f9572b040b0966f8ffb888e8cd768dcf6d63d4835a52d13a730c0000000000000000000000000000000001123c43dda8717d03fbc02fa53c4b1c9a931db6b274162cfb02ef5eec602bd8161dedc37c7f6217c8e82236f06e49e2e", + "Name": "matter_fp2_to_g2_40", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005e4751707f3ea7bc7a74d80eff27a0d65cea0c3d2e793425e79cdb0c41e6ad0cfcdbb4de604637c41dbaf30a1e816e60000000000000000000000000000000008f69021794d93826f8207b96d49214b46dfb1778603634a9f5194e92481465702a8be1bc49a7bb57527fe6f963ae04d", + "Expected": "0000000000000000000000000000000016d8d9b1b59a22fd830f88b9850576488f75672a87ccb766e52da77f187a8e66071130c7e71f86675f8379b2a8802c4b000000000000000000000000000000000aa4ca84aa23f01ec536ffa25c4b7a6c822f588bc75a4a72ed9237c0588ab892c8474a0f23afc7ff0dbc3b08f8e35b60000000000000000000000000000000001425e759e2537d9e5f0f356ff1d38128eff3a771fa661a839f7a8d0f548347438574ef7d592cd4273ef9b7269c9c5d7f0000000000000000000000000000000012cf1c67d1ce244ae22eec0bf4a400a0f356b9dd075d87a6e61941933872d7c0e42c1d238b2c1704d2cdb2df75169f39", + "Name": "matter_fp2_to_g2_41", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000116988a869cf552b2440e16569d8b6e30c6b15430855c4d6bbf80683c5497291bac7999c1f8f08f494fcb4a989451c3b000000000000000000000000000000000e26058d72875fd3d852aa4139f71d35e1edb58242a4939da7986645117d027d20baf85770fc909d537524244da59ce7", + "Expected": "0000000000000000000000000000000017f6e2743cb30fb93816d0dc802c24509315363c3652b0244e1395cb9200efb4d7b9fa7642e8d165d28a00740f1a83be000000000000000000000000000000001483644fffd3989ac98cea71843e87b8e446a3d497630419afe99b3f1729a831fa6a49bf763b0c410cfc5390ac4ac1db0000000000000000000000000000000018ad20ae5012266d771b2c86f891f498c2e90a7df19561be240319edc1fbfb316948fb3f8a6b0e3720676b076eb372e10000000000000000000000000000000012f404211899d8fc1221ab5b82db9042ad37e63348871e5ac6cdbddacda0a564888f89d22712069b6096b58c5935edd2", + "Name": "matter_fp2_to_g2_42", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000078c6cf89561533810b583a88149586b29da5228ced10a75257b2587904217f63499d8b9ad2d536617247e12f8d1657d0000000000000000000000000000000005b016ede9d892fbd7aea4e8ed0f1eab70713557311481735a91308fabf76fe71e44a06dc23ea66ac5d831e982f401b1", + "Expected": "000000000000000000000000000000000d4d78f992f12aefb0e3a6b18fbe2411108327a9befe4a822618fecca4def3169972b4f1fb254cc4656a676529d554ad00000000000000000000000000000000145ef33250240a5c9434d4b2cf2404d9e7cc51b55e482ebc6a8aed85caa21ed00623b3cb2d76ce2d96b2f346d395dfc40000000000000000000000000000000011af2ee2514c58078da335c0273cd18b98d1ac6f0e67890677403f71b0e06863fc72611c0cfba39ac894ae500edbdbae00000000000000000000000000000000186863e7c24cbeb45f7a66b5dddc9b57c7e22c5139aa6bdb82e77cd8182bb8d2fb7bddd7d3516b5422f92e08d02606b5", + "Name": "matter_fp2_to_g2_43", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007160f36f0e5c4ccbcc7900c6504cd86fd6fd700bfa79af69841e4a6127eaad467ccc93c66baf7d767c3fdb1f31c527a00000000000000000000000000000000043fe62b0b9be76a375f3be0d6ec891d5bf5f2982cb2390125ff8d5db57b6b18c5616c526102e4f615963d601d13f122", + "Expected": "0000000000000000000000000000000002af4a301e90c71eb375110e7fe23f8f05e2ede86b1a9b240e8d1d4d70e96f1dc3640fca7ebbcde9918deb91f3592de600000000000000000000000000000000058b5f36cfb6b0adb14b397dee4c3769c7446426eb5719aef4965cde2dcb70e6f2fa60101a5f03517c0040093453d092000000000000000000000000000000000f77b560469cd42c5cf3458ae13020c6678af3cddf9bc559372d12bc5d6b930795e1eb09f27cfdb8215f39fb2a11b30c0000000000000000000000000000000003308985946c742af7bd7d29abc2517ff1d225607b5f11fc66695cefabd8f25e294ebdb7339949d6bc4d98db19533966", + "Name": "matter_fp2_to_g2_44", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b9590b1d0d292d9967d759060a551f4e8e4c1c0066a9a3c0be515085847fa26b77462e3bae9e2621f28e01f897df0be0000000000000000000000000000000006ee7c459bb4da96e87eb1d39bd7368de5f60104f85b7b4bcdd7761ce08d48babe1bf5e765282779803bfa972d0e668f", + "Expected": "00000000000000000000000000000000093c936d57135b25900bd5dd55cd579aa8b85b9c1b5e8dac6196c4450b624734d9bfc3fda499cedf2e877d79f2da650b000000000000000000000000000000001832306d3ac1c1c61bdaa73c9b6e9c2ccb484c3baa1de6a217a2884c72b72618e864f75fcc2dfaca358181ecbd3347980000000000000000000000000000000002b2e5ff1ee02657fa88c7d6f23cd4c0465152a9daad8479b4b68c97930acb22e4e2eb0011ec4062b8ec46991a7cc630000000000000000000000000000000000712543547e9d24cc78d1c2e3fbe0b51222185f4c6e513256d1ee066ba50beee20321bfd60462e2587c375a0e9395715", + "Name": "matter_fp2_to_g2_45", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000044612b42a2baa9d3e1d187b2a4e048773b4851bbd7d4025e0f7f61abee703b5a563397da4515c7379397dcde698228a00000000000000000000000000000000014cbff1000bc0f9b394b18e81124dc81f80e291e841dae6e96e0c86a6f618b9f6aa6103e0e7582e5136319a4dac92fb", + "Expected": "000000000000000000000000000000000f52e2f8dff9a93b2985d5c2b8b980e4869af53ce55aa48bc1c9295e557e3b5ff78896e5e6342c2d535d18b11950bf390000000000000000000000000000000013d36cf2805d350c5b748e639d20e592deb4c5bcde99a94fb539dc56d48a862151b925314f21dce4c9130b32e44f54060000000000000000000000000000000017728f485d881b861f626c9de8b3df7d807b266de6cf8dfcba262f40a6248fb5e6506d11e88f460f0b5f1a1907ae5f3e000000000000000000000000000000000c0ab998f63f861c82106dc3ed5ea11a16e98139e8686f8442047a1cf9ac48c3d34b5129263767830144e9a13d4a1f44", + "Name": "matter_fp2_to_g2_46", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013da827dd718d3736cfcec53f034d34bce253bc91f7cfd6cd2666819bdebbfc43a9363f82bf4b580a7739b5dda9c94360000000000000000000000000000000010e94039f37d218ad393e88a226dd324a37e8d5352dedf6d84fa2ed2cab2f874ccc5ce94599950f91b8dd6d6c8b84aba", + "Expected": "0000000000000000000000000000000003463d887c4d0aaa21acaa308d77f2c7e13d10157efa9ec3fb1586a8db5ff1a9e807c91c86afc4df34c9fcf06e8561d700000000000000000000000000000000128a81efb9f30ed811ea3163c71b6a46ba2cbdbd3a9f93cb8d0f518747cc860431c6e93bdcdf36d00f83838965da4b50000000000000000000000000000000001777802b7c41111b38da3fd8092c280b4925827b2c1592f779a4ddca71f8268858855c413fd5c0057a652155261d75ba000000000000000000000000000000000c88b522d6dc2000cfbb7052e141ddfe15c6cd7fddc970edc4afc36fc59e7f8e31415706a8121e8e84348be0b50d0d88", + "Name": "matter_fp2_to_g2_47", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000010416da7cfbed2768c77b80957053030d49d535b21a8a3297ab257dee0463c91b87a9e571b86bd874522149d9af0c2900000000000000000000000000000000197ef97f6d02a51b80e6f5629e88a3c60399bcc4a358ab103dac3a55a5877482558abed922585a1ce3228ffb507679b4", + "Expected": "0000000000000000000000000000000014be96cfc0dbe09155ac8d8233b71ed584153e279b2b2be88471eb653aa4913fd2c33947547c61f7fd8bedbb552a8b1b00000000000000000000000000000000146b9a0011260e2646920894cf405bdebb101db12da7849b30868655fb5f972113cdf2fc322cc246d3dbd9f20b98fe2f00000000000000000000000000000000104bc20e104da5173dcff3e195f80960819a0d64e922bb484c2739c4b7c22535f7faeb1c85188aa853277740b389eac90000000000000000000000000000000019f5aec599f9ec286aefe48eedca3f929ac6c758c231182b92dc965d6ac1f3db53d93f57d733ca8425a5dde070b0dfa8", + "Name": "matter_fp2_to_g2_48", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000025f1ac90f5b0748d57d8f7a928be875c5712801f70af0d057546228c1bf83d3a207884c0d66d0b5dbcaa736bfe0aa10000000000000000000000000000000017f66b472b36717ee0902d685c808bb5f190bbcb2c51d067f1cbec64669f10199a5868d7181dcec0498fcc71f5acaf79", + "Expected": "0000000000000000000000000000000004ca0149527817b4df0f08acabd4e8c6329c0d1bd9f2e8211cbea25d69b84009ef158c770f948fd67e4609ccadc938680000000000000000000000000000000004101b351e2a9d34042291f38a289d8575872104bcf76f60bf888c60cca5101c34c247da30f7a8db4f0cf2f32abd302c00000000000000000000000000000000167e668de3207ddc60b8a5d5d246bf2f63ceae3bcbc4309e73eebf4d4234c2785bb13e4d5d8fff9c5f205e4fb942a2f6000000000000000000000000000000000491b965ed005065abdac53e3065781f2fd23f6159debc64f01c9f62073c651da33c05ed84617efcb5ffe08ce05e3b2c", + "Name": "matter_fp2_to_g2_49", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f2dd27e3f0ab503a8752c0802ee14c655271e8cfbc734905b4331fb4e70cdfe291ff71053fbaf91680b1dd108f458f000000000000000000000000000000000c62014b7694a3e81370761e0adcc32430547a1bbe33746637e7762dc24f8d04b4bb955f17ca901659482c622d777642", + "Expected": "000000000000000000000000000000001541320fb6f8a8c3c67278a7ad05ae7927d3555ad562bc8addb54c6693c51fb1c7355d2e74ff10f6bc3eb182d8f5b88b00000000000000000000000000000000172b65b110935b116ee683c8680ef0a660afdee43b9b8fce08ef3a70b352f8710c06b820348c338fb903a165cc5376da000000000000000000000000000000000df529b0e274e2e8993dd89ffef487aff23d31f502a19dd7d383de08fc77f1308a59ac5bf7cc899e81d377b2422187850000000000000000000000000000000010b40c9063d174b358637ab710d15c80d9230a1b3a056cfac4d583ad8c5b79c3d9bf22a1b0a4e0f629cd09ff7586f886", + "Name": "matter_fp2_to_g2_50", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014d1491a45b4b0914a6cb2e4dc7de9d0962f5c175cd571057cae1e17d2c943954d119690ea14f5815f858d277a9ad828000000000000000000000000000000001650771e0f7b33d235f229b7d49a7a5a0f00f78e5f4abaa70f39ec452370198a8532b5873e41f17c449f9c565e6adea5", + "Expected": "000000000000000000000000000000000978ff68d94d33703488298658cf2c1b6034d3d8d21c175d71a0545bc2f99eaaf131f061f3e4f55622668e686e691f53000000000000000000000000000000001124804b252f8187178435761897d00c43cf67b588ca69f97c20b0ffad3ed94acc2c0f85f900713dd6ee9f38e5ca94490000000000000000000000000000000010ca2a8ce71b9a096c132c4a060a17365475b6556d4fc6284266ae787e217b3ceaa3a32bdf751375eaf6ab49800132fd000000000000000000000000000000000a43b435b116d9480497f6b2e1bb377550cb1a7ad59e4214bffacd517afc6b7bf91112fe57b17a02a86876ea07361bca", + "Name": "matter_fp2_to_g2_51", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aeb244909654b3e1df7cbeccf297223be57c2f514474edf0740dff48dcd5898b6e49eb65c787aa56ef79778249f4e07000000000000000000000000000000001007c89a66dab07f54313db8682f9e829baea229b030b4514d9c93686747207939c50a198e83ac2cf50315e02642a24f", + "Expected": "000000000000000000000000000000000c3d87b1b78fab65cfc853304c682b39b6ec2b4ed005e9108f69daee5aecbd586c9818c37cdee865ba53eab9302320ce00000000000000000000000000000000062a7203cd2fd04a957cac8b6b6bb51e635ed7165c547ace10f93a32b7f37747a2e63d5767d966684409a6c748d4ee6c000000000000000000000000000000000526b44af8157dd68725aa8743684e020c1e385af7413c9dcebb320568663d18b6f29edea26f2628358852b794ffcc8e00000000000000000000000000000000098126f486ff55c21f64421e85b09a1b54f42d3499dc0e198db6f3bf7dd8476cad97c02b5b366e5ea20d8f83cc223f7c", + "Name": "matter_fp2_to_g2_52", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000398d86b5206bae4ceef0bcc6335b1f6bf5d17863ef3a5e8463aaa69d9f73f8227263964659d4b770d6d9813f9399b9d00000000000000000000000000000000096bd18be1176e16a0d80e60f7d7ec9d3b6162f683440e3cde70082a73605da3783c8a058bf76d7e25056f5cd95c31ed", + "Expected": "000000000000000000000000000000000f3e76e7d1cadfaad08d16457b02d89c40c157225eec7916d306faca8dbda008f41792888c647dff1acb4d4ba3b43c4900000000000000000000000000000000132bf730456e2afe745a58cdee689e37223292bf682d5b7dafa7df99e40d385559d0b3161bdda0bf5173c43ee46412dd00000000000000000000000000000000141b36ff6890e35db0054358bc0731b3aa0efac1a247a51daeff3515746456216975f44769174a4be41c109d35e4be33000000000000000000000000000000000ca401ee1addff8fe87b600e057ae34ba297886f92c5be8a8c00b360ada71831e31bc4ea1c309c7da31cb28d1011ecad", + "Name": "matter_fp2_to_g2_53", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004ca5cb60c32edfa385baa911ccb7fd1f383824c22b945944b0f3f7011db8c123efd8fa70e4fe699d40c6716021f0151000000000000000000000000000000001339adb0dd8d83574c2008f0a7ed001b0808d2fb639b5e57e1d293884247d5c66c948ecc60caeea7bf440a3a44ed296d", + "Expected": "0000000000000000000000000000000009d0af77517b654ad97de3ee1dbf69ec1eee901facd0f8c39b4af393d0e63957292a7529b461f7fa58909acad32ba3a2000000000000000000000000000000000fda17cd878ec0f8c294daec1bd1d56c63e875b002a81c9c41146dbb564bab6e4eae2717c9fd718af1ba816a1526e8fa0000000000000000000000000000000017563b7ff22b50b6d9e24b1e0d89ca5c72e68d4d3cc24cce36856191111d087c3dfb392070462dc7850ef5a1422931c600000000000000000000000000000000020001fcff638504055ba35230b360e6d3cb5777b959c194d6f9b038b58d3ead0b82b28bb215378abd85d357b85ea260", + "Name": "matter_fp2_to_g2_54", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000089211892a61202b1ad3a85aab9f08f8d028f3e3deb16c1de4d62c1a403fa63c6dbbdf8cec37f0a9d6f346b1c7ee179d0000000000000000000000000000000012a9fc2070b326f4d7e64804b3a2e977f4bb36b6a4afcf27252af757d8535e8172a99dc909fad5a3ff8df23d6d6c5948", + "Expected": "0000000000000000000000000000000000d51c77c2443f00d965c0d7ec9b5a8a8003c2a77b0ffce3e47bcb55420e8690a9c2ba9235b62a4b351d79d216a3aad40000000000000000000000000000000013cd46e3ee6cbb3bfb771ee30b5f5faf0a64a9efa1f8fc57024c83ad07a9b25e513f211ea604cfdf319dc42bf4c067d300000000000000000000000000000000009fbe1fffc67220067c948e0c80de23795e045fbe8031c9010eaa69356ffd8e5741cfe12731ec13aa236630f1b1dab4000000000000000000000000000000000e5ecdf808d10d47f041e4b078e79b32520ce9623b50059a3bd8b59daebf9103c31425659ecbaebfb2384d1c2f1b400d", + "Name": "matter_fp2_to_g2_55", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b37365748fdb21fcb46f94edf86c586f17d0e042c4683e68c6cb83e7c0ed2c30ed260c15af2c9dce77bb705debfa7590000000000000000000000000000000010d7c02c6c1ba3cf6ac09a05dfe043905e1a7eb32b67f2e8a5dfe82eaca66ef46cce43aaadeff58ca85345dd0d3bf3cb", + "Expected": "000000000000000000000000000000000f3e4d2559261829c0f4816f8b571170de1f74d75d74997cba56fdad42932db73504691f9e001f5b4604705a8c1a38e40000000000000000000000000000000018c72136bc7d3050ee693270668e706ebf70f990e447ecc6153a10625cccc9deaf5ae82d2a656b1376bf33b1c1fdc2c9000000000000000000000000000000001754f2725bfa76e92a74ad5b520ec2aa82a1f86e8623a054ebba489adfc9e71d1f14d4692ff9fdd8acc3d768b67e1b7000000000000000000000000000000000096f1373434a8822569cba0679dbd2abf619bd9a8c73e54e078688d4e2615d45431ac8cf3da5e15a83fe77d14b339e49", + "Name": "matter_fp2_to_g2_56", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000aeee59421c8ee65f8070b9d036e6bacb39dd2537d02960a3a57da4f0985cc7b27784d60fc1613f5a83c34d2250395c1000000000000000000000000000000001715ddcbaed0a05b38b1c820724405a713cc0215a4c497892f00746c0f9af28b440a3686178d9bfcd41944a224311306", + "Expected": "0000000000000000000000000000000018d515b8c99f541c7dd448c3564c1909b84517b662d6a2d1176d3bf5e70abc0a2995c73ae3f1614bfed2f64229e173e80000000000000000000000000000000012126ab671420933cc4fa9206311200cc5241ca3eec54f5d97a426a72642bdde32a65c79735446779cd1744d112d544100000000000000000000000000000000190d836312ffb0d6bf493f4c942263922659abec46ac4de639efc311753148b445509f808c2fd813729b1bd96e0e663f0000000000000000000000000000000006494f9a451460ac658ec17710bef79d59b6e0fca049804c0954c5fc472bbef520f75d34408ccc62cf2da3deeb79acc2", + "Name": "matter_fp2_to_g2_57", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ca4b3e1a8351057ba4a2ffaf0cdf1c3c0717ccfe26433f6c40e2cc29e32ed884f63d25979580fb555a5a86c9147bcb00000000000000000000000000000000010c1db593af38aa14ca9dd588f54b219ff1fc9edd25b3d16c595662ffa7939879244326b14d978e0dfdd25e37776964c", + "Expected": "00000000000000000000000000000000173fa567aa952bfaa9a60b8232a185475cbb36761ebef49ea5fce900a06043d0e2c1b6024e40eadc9f4bf04b077201450000000000000000000000000000000010fdc32ff84f79fe39351cee1ed6b67dbcf2956020e2518d5bb5b367b61f86f1bce36f75516d9551d74cc3a567e6c2be0000000000000000000000000000000007abdff8a8967eccc4de6b4ce142173841c0e8399f5a67dcf0f7b5e5b4133391b44bf4d41d3ae3426839b19aa4c5d40c000000000000000000000000000000000c99f160062566418c09f10eb80f005f2c8c12825435f354f1d65bec0322e9b8ee968c009a84ba792a7ee7334b32bb3d", + "Name": "matter_fp2_to_g2_58", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017cd94e7e672f0dba9a3c1db742d87cb18b9401e8311c4badc24f811a8f40c27942da6485807701c1a12da58076c756b0000000000000000000000000000000012f6de4ac9883e78f9d658cede4c70b44bac6b4c9734cbf24298ddf0df0cf54164aca245d8e313be4aca66ba3cab5d70", + "Expected": "0000000000000000000000000000000019dc92f1da66d0855ebc8e7a2ddec623a2f843a97c7385364a631671be7ee3387a0f98940b5a51c8d9e23eb27e3133b00000000000000000000000000000000008493903c5c68b2847869b8c3b0fa9b8ba15bf1f11a40a29e6e82942e2910901044254cc8e8c3c3bf56e1f1b6dab7e86000000000000000000000000000000000bd3c1e302a191094059a6493e59a11ab05a49faf333f36f7680ec9b1043e59dfd7f0fabe9f334b97cd638dbb8bb664b00000000000000000000000000000000141c9b07ff33b6ab55b320dda6be54320082f0057c446236cf3d3a51e674c26a5241f2c702d9989adbae9045942eeab6", + "Name": "matter_fp2_to_g2_59", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001b2843d9852feae3145b242cd0999877c07785bc72cc2626f388dca32edfb112bb90f9aefd6953eb15a0babe748573d000000000000000000000000000000000a69bfe809a67ee853cb96b5a7a72798748cda56936e5664d509001544539730f57a7541ecd2396c9225818b9dbfa3c6", + "Expected": "000000000000000000000000000000000d0922466c358cfd756727e134b5e64d211244587e4eea036f0959e78570dce3ee264c703cc356cde20637c7560369340000000000000000000000000000000011a66d618f79fb662ac2b2d3b50750a5567e36d7092dfcc72d8f340c04df75ecc0ce4a01b410ea775dc548b8dc66c3d8000000000000000000000000000000000cc49cf4be5e2df6b43054092afa2d6acd66f5a43ef0667f6a2d660beb7fec70558ce02d7acbcd090df91fe833326718000000000000000000000000000000001270b0519db083f903a3dbe0b1b1bd5ce0b0059ea2c2c50335dd80b4bf154fc23a3de1ea753b0e279145254d8e5bd045", + "Name": "matter_fp2_to_g2_60", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002479a989dbf27141bd9f467447218dfa6ef60781a7231f089d5f1f1d8dca2ce9606a75c09f63f37f9cc1ee61dceb32500000000000000000000000000000000037c2f1b96170f6847138232bac663e4940bca602717c877f58ff7f5259778246085d499ec6bbeaade18f738df333cc7", + "Expected": "0000000000000000000000000000000007826398b4ec35ab58ba9fda5c15ada2a41d3854677172ef6a4a54087b64d0f73fc875ad62236eb7fdcbd94f14c8895b0000000000000000000000000000000016b14fa92de5f6e43988829ea2f851746efd6680b0ea1283264f803c8ffbe85a343bdd42225caefd1b94b8b311d2f4950000000000000000000000000000000018797093ff82bc10e6db60b1da50b9a60da01d67673e9bee8c7af2bfa2d57f409f7b06f53944938e5c73b049c2d3c6500000000000000000000000000000000000c66dcc3d30f35c21b8a9369c8f6de28af404e8b30d3c9a7f09c461b0272ba6d5a29e716012536dbeac1d9672af8427", + "Name": "matter_fp2_to_g2_61", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e6fcc48312831b910e52aebbf19869b3b32f05db8310b68905bb244ab784df5732db2e72183de5d231d803d92aacff9000000000000000000000000000000000f61f9e52fe3afc2a6bf12e420cebf83bc55a449d6a167779e5b6ba3281c51d790a045643aa75f2516eaf6ae2a816ac4", + "Expected": "00000000000000000000000000000000191aacce60a1a83f2c453fe196bbe5839a3a1178b147580435f7de8a2b0b4f65b3e280ac7a67570aba0fdbce6c11ad9700000000000000000000000000000000075ddd6b256f53a6ae6758a5158508540aa99b78ca069378f0ae3f5621ec24b9acff1f9b61d378334a63682a33fb0561000000000000000000000000000000000b06e11c9f858446fcc90c69d05cc26c33bafed0feda19adbd838c9c24bbf567b673110a1b248d0ee97fc682e561298e0000000000000000000000000000000018c75dc203493e12e1523af50f85ed648130ce5d3e9757f713850c867cc95c7acbb66c9733dc4f53d6a0e64bfaad5832", + "Name": "matter_fp2_to_g2_62", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018efc6d366d79a09b7d56c81c17c2eec2ef7395fdb5991f41273329cdcf4537d342bddd83c3994a40d5c18f6afa054c600000000000000000000000000000000127021ce28627a9d6a492720f728acef3b38c12b951f70a932c7fc0ce3f5b6c80783351cec55d7d1bc4ab964bb4913b2", + "Expected": "0000000000000000000000000000000012931f51430bea6e96f8ec456ce6b3c9e058b0bd3bbfbfe8b6e84fd6110c3bbbe0001018064e8981797f9c93713a0e4400000000000000000000000000000000196b6093dd2276098853ef2bfac84f0cad06b67a12484e98915dcc756310b818d8136954de1b602eb825ab29a143cf4b0000000000000000000000000000000008284beaa877b25374571dccb218c401cd905b351dd96700853f01920e409d11c4e440e90dc175cdf0fa807cb9d1e93a00000000000000000000000000000000063c6c238485c291fbb60bd2824154a9e23dea374292966d271ae94875391b7ceeee813e3fb9504223bb86f0ea3b6cb4", + "Name": "matter_fp2_to_g2_63", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a0277228ab4e880c12f957a6fcdfe49e2155083f3f93d3f00c68622415cd1f5bae183b7df9e08328a8139392772cdc6000000000000000000000000000000000de0ab426e56029790a5ff72f34da97e11c028dc5d31e448c49ede004102804d2bcc36d509640247a4c8bfdf5104a781", + "Expected": "0000000000000000000000000000000000f7bd0705cc4ea96ca38314cb85963044164b83a506ffeaea6e5eb8f7c4967cab1f1658f33b5435191427aaf9605bbb0000000000000000000000000000000007a93e2a5c118aff6ceaf2370ddad52a82854946ae595d384ee0b2b4935a574ba758736d84b0ae792f998ec6a707dfbe00000000000000000000000000000000090936add00fe5c7556610b28ecb4466ffc37b95b5cab43e072a585920b3cbe70faad01ef75d1dcb4f7d00d900bd99600000000000000000000000000000000006ae82539c68b7af3143e23229fe320924472c2b3e15a2e27e94cba674d30f083dce94706da094435c53285a43f89e56", + "Name": "matter_fp2_to_g2_64", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000170b243c5aa49a0134bf3d6494cc1e55a1c6ebefc6117eca3b343a48ef0a2b077c443ec5b9201b198df015a38e66b7910000000000000000000000000000000019a8ac8a3be1d45318801bb0a654963b312540d24aafec46bb7661cebeec27b0b345275fd53c041d02b1ebfa27fc3854", + "Expected": "00000000000000000000000000000000024c1b869fc13191b71d7159a07e869f1b13c11c73231b82e9bd0a7b4c32d7b376fb73d54f7231dd4974713179f235140000000000000000000000000000000012b9f95af661e8452aa5026302a7c28695307f75e9e4e32365caf378ed394fcecc831a3c47b443172188f4d18338fa75000000000000000000000000000000000f52675fb4d112d1d39ff953a253b22dfa0b73d972e756ea7fb673bf87aa992883c5baf32be6f50f880b03dcb740f06c0000000000000000000000000000000008b57726e17c873e12834dc291cff6bd95307f50e7b1d0caebd8c1eeb6eff4acc0520b135bc8e35a257133b7dc640db2", + "Name": "matter_fp2_to_g2_65", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000fbbd5a10eeb2f358f2b167f1985d4084c4b12accb1520d780ef1c52f6fa80e97aaf190e7a7b241ef96fe8289fc0a9600000000000000000000000000000000155687114e7aa786ba27aeada830fc705aed069c4e3a07e88d7f33923319f416ff3caf6533cbb36e5bbb1b93a191bfd0", + "Expected": "00000000000000000000000000000000061938df3365bf910884ccbd74d3cea7c30416bddc1a9b65e7723c15d89aa657da36a45fe10ed50bfa0c2769bb98aa2b0000000000000000000000000000000007b3981054255715826cf8f247210521ac681305aad3928b69804117fc143c5101383eab7017127c8452a79003a857d60000000000000000000000000000000004c745113480fd87212ed3ff30ba43c8716b32e62c1f0091bde53bd4a8fa8fe6bbcf0904144f4791ed1bf12dffa1f17a000000000000000000000000000000001237ba297c7f69e5e240846a12d86c8276a9a6ceb4af977edadc7ebfba3ad3f4ecc0b875da0ea578c83fc3b91f9f31a5", + "Name": "matter_fp2_to_g2_66", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000115edef357ccc3432226d9bad796a42b1a278d9c8adfdddc5a0f8a36d32ea1787183877f8b7dfab71424cdd10b63441a0000000000000000000000000000000014b369ce61abe60d942346e049644b95a0fda96316446b2fe7ee427641af52fdd2a654bf125ff6c8c7f3dec98f6cbfb9", + "Expected": "000000000000000000000000000000000a0cc3e328b4cfd01afe53dbf971ad78fc74d951050d76210e4c84438109622f0531747e762e185e3d7ecb9faa7c3255000000000000000000000000000000000622ad6092caa727d069b8921f4124d5996f3019705a908ef95d23092c5bb148873a22c227aa25ebee361d4184cc38a10000000000000000000000000000000002938d2ff50cffaab8c056c2844c50013f5bcdbb4f91b3f823836edabb39ba17ed1b8b5862301efad04bd2f5d5bf599b00000000000000000000000000000000072e96136afebbf8c06a37cf9b20c85ef8cb3f7f99d5c71b05a187c193711e5b76f52863c7ef080a1b64b2120ab2ed84", + "Name": "matter_fp2_to_g2_67", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d22b7b36ac66b10adb4570f8e7521ed76de2df2a7b94b2d0b9ee4514cdff6fa7c74854d16e7e70f054a91df93c7ebaf0000000000000000000000000000000016867c9cba66dd9f1d0332d31c4e46f8e393eeeeb19af7e6e01effb29ad999b3086b599ee4b371de557d4fafd5da3794", + "Expected": "00000000000000000000000000000000142ceeefa9fceb903b25d4dc68f6755833d7529752db0f125f7f65f2b7aeea8c90e599ac409576e82f7b9d6f83c43aa0000000000000000000000000000000001664acd89b482aed04ef40bd4d1ff9f39c80d7738771e2b3ca731af01aa230d865869cb05d83992e94ad99549fd0b8550000000000000000000000000000000013d6ace9b492c014d9a7504b5abe442e3bba13b1ada454aa53177990ec44f616e091f1382d36db87b7e794c11570a9bf00000000000000000000000000000000081b7a8a2906435f8a9242f573225ea62c5429e903bebda9fe9973a18ed2682185d72aaa6584b9848d1cc45ac907dd27", + "Name": "matter_fp2_to_g2_68", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000db9258e1257e659e60bf8569ea90c8247a53a1d1eb958481623447a38d0f1f1686c3e40c8f15bd06cf5be9c02485452000000000000000000000000000000000517c87f3df032ff08d960f524939e66f7fa69b4168b0f2507baf7d7231a70dc5690a02d317b26f219365ac3255bee78", + "Expected": "000000000000000000000000000000001182e4230f0c360c07913349f89f8436c01841c9615348a0d7057336c7483342024b0369ae52f39d4582f9885f552b5d000000000000000000000000000000000d15433ed130163a85f8ba87468c906aba88ef8610fcc1a8d6b3308cda29907acca351fd7fb19799184f1ad91c751b5e00000000000000000000000000000000111089005c4c5370863b0ea6b629197a865f978f71becb741f50f9b4e49b13162ca63c29aa26287faa9c923f57f4ad4c000000000000000000000000000000000dce405ed2a79ad433123105ad01a26ee85d1ba4e5f3b4e0339fea787058c06e9a6b10f5ec8f6eeb85b211e18b6ea076", + "Name": "matter_fp2_to_g2_69", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000b6573c743989fc8613d4ea09c2e500ce965b50cf0c8975ff703116464082efff4b42828c8337809f6938d7cdd3f66e000000000000000000000000000000000896d316629c80ce6e5f240535863b9e064728665c0815f39b21675c236f6995e7dfff1e4aec9ad05861e2122469ea56", + "Expected": "000000000000000000000000000000001694cb615d2994a903a13645ad44a63395320f286503902b6009e7c795dc8f024260e0c45bedd864edc9fcb9d1ca6bc1000000000000000000000000000000000f20538af015bd6d213f90fb1a1ebde4d9e2ab2defaf80d791a1f70af2ca7ea1598d43e9eef1cc982f468cf15d223c9d00000000000000000000000000000000046c62bec4c6876a67f5fe68107d677db8fa4d59ac0cb7afe6e706864c6e94744bedac6b34a68e8ebf89c231307b86d3000000000000000000000000000000001839f3b8a6dd8fe8028247670fe5b491bb43ea8fda53116dca87f97da96573a5e701a703fb5fa7bca457ef88a827e061", + "Name": "matter_fp2_to_g2_70", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011fd2ccf6883b78fe19cfe7beded503cdbe1cd5dc9ee452aa6b329d2237c2529df6774334b132cfeaa616f20335f88680000000000000000000000000000000009eacceef036ec500e7676f54af703016fac93d69ed19c8943b64ffed2db498b19cd255a0a3437b568eade0f497c7b17", + "Expected": "0000000000000000000000000000000009d8725eb8757828a94969ebf40545a62835686897d4504a66484a3078b2f15e39fe918d8dc01bc7560dcb005a7a0dbb000000000000000000000000000000000954a6cc9b2dedca1cf280f72fd0625184b8f83b78ee1ffcaf0f9178ce97900d759e4a74b914c3ddc32f84c3f4c3a8d60000000000000000000000000000000014121b83d2a06390ce7359e570e1593d5ff097cb0e44c38bc74171fbd8a8da0dfffcc2bcb95fb2d80a55933f696a86cb0000000000000000000000000000000016f71d24256de70618a02b0f016c6f31a21d2cc42855886ba30176584a028c2e12367be19b834bf41356cdab21223314", + "Name": "matter_fp2_to_g2_71", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004a851380536054f6b69ef7581b57dfd753d1e6201069bd1218ae5766aada087b4b08f65d43b3ce0215640e8d34633310000000000000000000000000000000013579671b64f2d9a2c3ac2737cf95c2148acce3dcecb3db6d019730010c50d1c0504ba4ed42d93771ba296b0b07487d7", + "Expected": "000000000000000000000000000000000cd47f0982904ccaf4f3cdaa37091a08e67a5f04af09033b864631300bb6c2aacbad105eca6ddf68a643976fb555d3d80000000000000000000000000000000012332ddb0e91f0ef9e085f21634c6d69576e60d3d24732a0c91a560906791f60f79d09ac0ebf448bd39f047b1dd428450000000000000000000000000000000000a756a869b3cbc5624f0e08019170beda35fd2642a79108b284a503942f8267b75868636302e5a12b4f1505331b15f9000000000000000000000000000000000f60724f6c8200edff41f3299ca003e9ea03b97b01a3e8c63763bdf67b9f7677331a7144915312458c40d041be97b3c8", + "Name": "matter_fp2_to_g2_72", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000021dc1dedded9b0dd90afa9ab7fa8f9c33930fe4ae68185ea4cce9ed97ce4cc9ff93f96377b11f8d42b02e759a10b06200000000000000000000000000000000034c963fda3bb80043d6d7887661ad59b3c31c88c958b451a8e11684770c132205db6655ad7cbd604ecc3225b0c128b0", + "Expected": "00000000000000000000000000000000095cd509e53f10b1ee18b2120e2d18f0905a202a992a9c62480beb6588275fc8b5b151e6abf17a12b6d9cd03a8b37a59000000000000000000000000000000001723bf1a3d79935eb4b39f7feaa1e05cd8f3e7a32e2c406625053d8d8fde33eefec231ee00adb00b0acac16a83dc77fb0000000000000000000000000000000004af528e886dad3f9fa7232605936bc22a6a22622828367791920ec9d31cdb2f290e37f5fc79efaeaf96c86b3f6e39220000000000000000000000000000000015bada14a84fdb09b77397cd2e27836f9f88854924af0cafc6f9125d32be848c8325a3eee1a26de8be8eb80b601f1ad5", + "Name": "matter_fp2_to_g2_73", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003e8d1be04f8dbe5c7e1c7553cde8355ae16d26c819dea92fb543cbd9fe9e726359e1e4be0483a7720343f34c6a3fb9200000000000000000000000000000000062bc5fdae812802bdea09e4130c3d9bf80c7518138b116a4b6a302c155b97226a6ccc8a3ace18744e7adece08781f72", + "Expected": "000000000000000000000000000000000d8f14042f36bb377655b63dbc37c50e0eb5775d4e4399972a6758cdfa9751cb4b733745ed1a47fe5f2cc434efc5af81000000000000000000000000000000001384016829d028f823e6d062898c042a461bca13ae4627c983d9b5c9e8b4ffff7eb25daa1c52b39e309b9c1e7e4f2e920000000000000000000000000000000004f7904d491a0c2018b1361a9cfec4fc829e607402859fd9b9ded60adcee51e9b522d302f9064130a4eed1327f49bb4f000000000000000000000000000000000ef4fe949fca569b31fc57ae7d0166ea53318c5712311076e052c2967144116f5490fdf56f26adf64aa01beb4f6cd214", + "Name": "matter_fp2_to_g2_74", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000014b922157b19ed9debd9ae95cd9435f7980b8d4ea33fd29f99d5e7fb1a96f6d99ae13f7f86239c4bc286c3927d3522a000000000000000000000000000000000f6d4badf78d9115d93783a59ec9576fcfd87a2c29e1c506b6f7e313e71723811a36d64b37650fb6f7b460105a7e13f1", + "Expected": "000000000000000000000000000000000f20b3a6505784681331208b573d3a241706692db71b5daf4e9c80adb1fa9bb87023d7ba7f9c65158653c735dee9dfdd000000000000000000000000000000000f7f357407ca6cc5c5fae4b84509d71b2f4de9af226cb4038b4820c0541d4999b7396608efd2f322a00a768129f9800400000000000000000000000000000000138dcc1b9d978adb5eee6356980cec5d18cfbfbf18cf6fd14f4119a563f473f5027af06342e84ea858223ed63d1a16af00000000000000000000000000000000012b63f0d2e8ea361d55aa617a99e066b5feef3af1930b83d2a48b527e0ef304ceadf7cba1415db80c54fdcbbcf66d14", + "Name": "matter_fp2_to_g2_75", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000005a54ee5e3dc05c38ade7a42c71baf5a1467938f97c0cdf0742441cd339f22542b1ca6cd215d385b3fd6ba74ec996a4d00000000000000000000000000000000051c6f0ce621e8e27e5017628690fb68f0fea27d67726a0a77b0caf9f524936e123ff096168ff2079b9990c07fa80354", + "Expected": "0000000000000000000000000000000015ff2aa94f802d8f9c60ddcb43aee598239cf3ab7f90f8289a487b673f6065f8d9bc92bd4cd28df4a7b0d3bb78fad243000000000000000000000000000000000884b5d4ca3c8abea737cfca05878528890b6cee9bbac0bf027df5d4e0add431829caddf4c1e001818581ce08686eeed0000000000000000000000000000000019b91a7738fde9760240b335457955e963030848e85717858f22dc33ba5a4721156cfdd7341aa86d10d268e2fc9a1d26000000000000000000000000000000000af85e60161795906f3cf705f5e8cb8c15083a90836eac78445c6bc27ffbfc8c2df3009b436989b46b271dd8d1dbc282", + "Name": "matter_fp2_to_g2_76", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000094e958d9b7dac39fa4f0143a333b2ccee09046cd23e6a1c0712470a3c2e61d2f8b85aeca37350f71d7ec75aea2b3b6b00000000000000000000000000000000080743cdb5e359e8b8ad3485d53ea286669ad66d841945296edf80dde77b20a158e2c1529dfc33a1fbecf177d75a0c69", + "Expected": "0000000000000000000000000000000001bd1fe6a6c373cfdc2bfd488b0c942492b77d55b2560824edef3a91c711ee336bc1366690be40949d04edd39ad48a7500000000000000000000000000000000161476946a5687113c74a34284f49b0658e323fae57aba88b039eae584d6ef28adca669fb083a2fe8f0ef664eb5b957d0000000000000000000000000000000007aead870ae09a04cf9c9fa49d0888f7010782cdc5a0ade4c1340ff15d99cb39b7412d66d4147b95601fcf5a39c39bca00000000000000000000000000000000095cce83dbfec12973e27627bfb2d93fa9a027a2c2af4259a0879d6bda055d74559fc93fb3b4f6b0088f702af29a7643", + "Name": "matter_fp2_to_g2_77", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000dec04526dbf7666d2c29db5de1ef0b3da85380a171d871a57ae3df364d2754fceabf9d4d2a3da1ecd94e377abc78430000000000000000000000000000000000d19875fe988ffbd0cf1e9bfefc7019579962ffa3a585ee232615e4a5fce0a07bce0537b203ea00010a90ec05d5b8de7", + "Expected": "00000000000000000000000000000000133cdf684c3ff1cdaf07ff787b57a66c215eef06acc2aec4d726a086480e7b2a5dead2cb357d99e298df32d4c6f5029b0000000000000000000000000000000019cd65b830fb17880f40e104ed63a7d49b0fbad8eead7502f18f1b9f85f3f6ba6c275b8a242effc61a7a5d770a4fdaa700000000000000000000000000000000039aeacd163862e476b17a22c76042d7896a04f158489ae71afdd35d27106a3ec276baf5c08e3eed4b3f0a79c3c458d200000000000000000000000000000000125a9bd770c1fea2155a581211bd71d55eb1966645cc892a05d32cf1e4e5b23278ea2fb1336bba7f2c887debe4a93b52", + "Name": "matter_fp2_to_g2_78", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000016dd03f0df71b183e42cc29c665f18d57637b65f05df85aed9a0f7b8aa37f7913f6606c10f24a7a8c570f485905583a00000000000000000000000000000000161e62d8be678a114fd4a99a6caeb9481f5eaef145571152fe8a6ed77a34c06a1b6ff66044102d19a94abcaaeb254e73", + "Expected": "0000000000000000000000000000000007843268081f61ad2b3f6653336a99086381bb4da4c23b7d59b9c7827f2d4c196d136508c8a1f3d2f939e8c9799b95e10000000000000000000000000000000000e2c57ad95f762115d8230320810a4ea9978e26ca17decd6af4c112789608967a92fafe3fb3e79539d75d1c0bae97740000000000000000000000000000000010951c9839db9dd6ca5ef95bd1b1b9cf60bfd97cf88129fca23b24f19c9d5c71486dffb762e92f23d2a9e9d462556f620000000000000000000000000000000013d35c17b3763fc5db46ac8c44aef996f3f876c49f5278b7c97e844f23ac49f2d50b3af080322d30ead873af7b4257e1", + "Name": "matter_fp2_to_g2_79", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000036efffcb0c6f42109bf9b8b7421e32fa3f855373345341e6000eccaca135ef3b2e1c0151bddbd46ae92185acb847d74000000000000000000000000000000000edbd7a40f3e688eaff5e29800159b8d799df07e81f65d59011e84329b4689a28a15ce11537fb560df705be26bf14b1e", + "Expected": "0000000000000000000000000000000001aa1919a50b5bad62b839d672d5a11ad345fcc61f75eccc42990e113deb8a486423d1b27e7c81536d8a5799986b9408000000000000000000000000000000001879295d2f7bb3923ec61c063ee4f96d7d7cf7786259e2f4cbc3ccffe7e114af264b3527a5e06dcfad50ec1e2a9c1ae0000000000000000000000000000000001042632662e406c95f3fd44a6d956e526907147e7e6d4219c1c4b28a31e479974d00d4ad6e683f6a834d3d4a20830f4b000000000000000000000000000000000a29ea98ec25e7827bcb349ccdb2a57926809f3cce44d5ff6cd636460278c8103b0db78fa580e9edd4ecd0bdb21018ff", + "Name": "matter_fp2_to_g2_80", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000974c7d17cbf91947ad435b30ad2b639671a43d67da6a4edc7f8bdc11fe817d4d42f687dd642a2be89c81bc36e8df592000000000000000000000000000000000efeeb85860877abdabae35672a77ca9d2cf0ed18ed209fb905b591a841c900ed06d2c32c56bed5f7efd469d369b05b8", + "Expected": "000000000000000000000000000000000c67498c6751cc27d871b8711c4739398c501a5bfb688d7e1a73dc7db5c47c3e28b633078cb83745bf5b0d5d2dde3ce2000000000000000000000000000000000c205c03305422bd44082715b90e0a0ec178003d6f5e14a0d13bb0f2c38f2270816b884b4870b75db44ab080f88a35e2000000000000000000000000000000000257f378935772d326710ec6efeb22f8c9b6b549c8a4c0205b75740047d750d73da4e71aaa8ff33b9bd8ab7621b08e62000000000000000000000000000000000c386a15f09c849be9f449a59e1332a1e7f16a9394c8de198c01399a05b0f963921c4c57d49916407ae0d202af8da32a", + "Name": "matter_fp2_to_g2_81", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015333364f4d0d173ef35e447fc189b9d65ef71b9fc4ecba25fb6c8c1bfe8467f26bb9c55ef10bb34125d714b94aa1df1000000000000000000000000000000000cbba9d8ac191032f03c0746f13108962130c9e2c01d47f01174a4c4d3daa7631268f7dcc08dfda317bd249fb6e73e8a", + "Expected": "000000000000000000000000000000000864da537fd94a9ff1bdae733f01e145dc97a894733d0811cd67c2648ba61d0b187241f9ec69d8c011f514894a05a608000000000000000000000000000000000a53ea4ff9c0ff71541ee21127a33daff2b39e74301946a86e51dc7834717e7d8784cf92fa5845bc0613b6b869003f58000000000000000000000000000000000582f5a1fcef3067dfcdfabc6af33871114538abcb02fcad761cb496020c7b423fc52f0075916f160fbe03574df97ea4000000000000000000000000000000001244ede8ba0dc09aacdc5d9f886e59bf963a25885dbbe2c3d1f611bfae82debc556ec4c94f0606492c7b8c7bf976ec34", + "Name": "matter_fp2_to_g2_82", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000781e980c167c982c2fc8d0baa3907bc5499eafca675ae20a10b25063c9088fd06f6769df505e5900bcaf99e266c052c00000000000000000000000000000000183c12798438ea92db75d5bf76cf29d320fab3653e4131989205f2817aebcb1b13f161864c084fd13a11459d7d5ccd92", + "Expected": "0000000000000000000000000000000016c334aec0e19934665596f0ae37eb398f1d6f0d0c9f08189f1ccc219230395124a9da03858bdba13ec5366da54228af000000000000000000000000000000000b156ea34ae7b5c252dd90997f1c693773a463c26935a69bcc0599b95bde9e6aa31649c48b6ee4ec1f0a56b19273a5170000000000000000000000000000000014b2d69e02418844effcbc0d564b2721deae2872cd1f27f61d544fc0ebd5cadc77c6777ec944ef0500db181a5443618e0000000000000000000000000000000004f0d48a25c1eb81233f385af17ab6abf554e1285b669eeb5e884c64d5815fd5fa1350bb361997cf2e317f7c5e9cd19a", + "Name": "matter_fp2_to_g2_83", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000879133a3c0e50c90abf1a6ac75bbeca1121c865ef39e9224ddb160eb725e0850a34aaf9014e42174966773e40e4c99a0000000000000000000000000000000004c66f8f5bd462cb27e9f5e1d93e322bd97582b9e81d07b2877103420262e4cfe6d0e3bc07f9f160701fd754793eae33", + "Expected": "0000000000000000000000000000000003c0d6b721cee4e5fdc6a02095674a58075f81b1d28163f81d5b258c82634297009e6bfc8193969e23e196cf7a99ad6c0000000000000000000000000000000013229818411c8e55e50a63df6983150c1d5ead828711131d9c81841850ed76e4712954d3225eb6d7fffd3cb9924f7497000000000000000000000000000000000f42d6e4d5a28dbfda87c806cb0b1bbabb745e63e655c3c6be50411da4dcdc745ae50f71d56e88db8454d40375e325810000000000000000000000000000000000f663ab791b48f76d358e66e8cd8fa40848dff2bbec758ce1d7b3fe02d1f6b3f123cef644d4fd86d6a77b8155feae58", + "Name": "matter_fp2_to_g2_84", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a7e855324ef471b8fefb31967cec84d57953407ba555b672fa59364b303030cb02b6c77933cc63fcd1b8c107b263554000000000000000000000000000000000b50c3f7cebdcf538820113acdb017fcd5d41a4fd679af8dfde7b0c330e3576ca79d09eedc724a93a3f5c90d141e7524", + "Expected": "00000000000000000000000000000000197865f685e78a8842fa79ddc728d507e9f31b31666d1952a46f6422c97c83fba3087be70e3bb588260556014523f74000000000000000000000000000000000131f5d85ad3beaabd129d5a5675d90ea911ebd02cddb5ddc7a8be28c33061430d684d123d5c516785d21ebf756c99195000000000000000000000000000000000c7a14948f3aa29f845e5ca9877db9f0477af376eaeb45324c21e6f99e738aeec96b89af4df942bffbabbf50172d8e5b000000000000000000000000000000000ed4aea3cb585b0d36972f9ad6943172ca7375b44d1d6e80e0bf97a0b25d74deca4d35ce865c8747f1c7a2771a37c667", + "Name": "matter_fp2_to_g2_85", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001706830efca18d3e75ea0f1ca8af23a816017ceeb045694cdbad6d3d9aa5a9ddb123f5097a226a217166de3a82038393000000000000000000000000000000000402132ac383a2fcb17fe73398273ef0c2f2d0d6edabc78f31080d3ecbf7c249ffeef28bb8b37a6ef2a7d726c070dc41", + "Expected": "000000000000000000000000000000000a795c2affaaecab6cd2cfd6c8fab6e35cdd646e9cfa7b5e02400ef4abf839a69924ea80152eca7810a5041d1bf58ee800000000000000000000000000000000121426bb945d6f6b385c98a5247b7dadaebd3375dd8b2bff7aa77fddfbe603de89e77baf0e8f36a924c707c53d29a1450000000000000000000000000000000007a6fcb486634186f001c8b99874f0a07a37f1ff4b30599d2f570f1bb4ff290b816547f6ce8b3c1ed33e57630a1d57ab000000000000000000000000000000000fa65924a8f17414eb7dcc54f2a4134568484e91533dd21fd33cbcc37a920f2804516a64f1986e9d887ca189179d07c8", + "Name": "matter_fp2_to_g2_86", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024beda2b950efcee233435f0c748e33aa928f54ff29d3db217d7e32b1aac5f4ed11705da4fb8fd38481382486e4aef7000000000000000000000000000000000c85283ad6e35a72d07b74775df1a4660113d50b51426451f454a575adf9cbf9d7be3f521649f6c367c4f4c74b67ff6b", + "Expected": "00000000000000000000000000000000049d9ac43e31faa3d02f8255d207b82e4b27e8a9a61ba45fc4f9ad8048e5f89b58d25d98253aabe29334e0dc09d1cd6b000000000000000000000000000000001544f90a0baea38b48d89bcb337cf5a80faaa79334733b7e6126f55358a7e498aeb61419065b9434cab9d10fe8e7fd9f00000000000000000000000000000000139bdd668462a1b5d3ef1299d47aa91ed141ccbeba5b08a8ee31b023aa78c16514a97ba08abf5c8bb1abbd85b3fe87350000000000000000000000000000000005c7dbb8a22403a96aee634cfc67ee6f1069cd61a1e1831e8faa9d7e1aa5e4f7623f51f2e5b739f7fcf3b4ba77c82ff1", + "Name": "matter_fp2_to_g2_87", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000cb18f477abe58af92116101c3f52ad4f6074ed92a08c3adcc6660b555df9cff09dd8b34e032ed81e868a62bda50378d0000000000000000000000000000000013c4ab1558dc250c3b5d0f0fae3db62b8df969bb41e9ecc24c10e1e51cb399f1368bed7375a9b9ad9c7653c868eecfe3", + "Expected": "000000000000000000000000000000000b8b8bf2b25c2386e5f3be4bdb387d8005cf055e68ab9a5606f17dbedc4fbd7a11314fd646d08bbd6e394485d4f56f5f00000000000000000000000000000000173a45d766682f82ec2d69aed1d80ede2477c276ddaa8fb97f5f4d0515b2c2e370c615cd81c1e361f95db855c9b1b6e200000000000000000000000000000000115868a9187a0465a9309054e865ef224ec3c88a5eafbcc25f9a912ee3b19084757a90b72a4038ba71b10f59fe2f93100000000000000000000000000000000006c5476eb8aa1a471d289af52c7d1df55f6bb1ad53d7eaba6bdc2a97fcb24ec480f9d8e12079d366f2213194c861f016", + "Name": "matter_fp2_to_g2_88", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000188f650fdc51b970d16c0637ad5e97aade93c7f1398751439484ec6cc56613814908e51cfa7f68da9d980bb9dac47a400000000000000000000000000000000081834f86f1310135a2cb03265f37d9b7c9459bb149bc54b5a61319a7cde36c6a2a0fb49f8f1fb9d80f07b84f799119f", + "Expected": "0000000000000000000000000000000016e8fea4d09831146fc35bcad28e441f2c02e4d17838e04dc7cf909b2133297a13f07ee927722f3d78e36721d6848e3400000000000000000000000000000000114dee8b3a47269e9ada05ee015a874d1cbdfff4acdf5310642f829efd08f78dd6110e1c7a514e7d76aff52046f4ed140000000000000000000000000000000017b9d23f7a865a3ca61197d841fd9195805a9e883d79dc7d36e82f504e6689ade0e84c70a5c5c516fac3e3c643942e160000000000000000000000000000000001ab82b2a0986dec3211507b8adca351829b0a13f25e281f98f54d9e0e32280ea4c638dcb74280eb747a0d9af43b6b74", + "Name": "matter_fp2_to_g2_89", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006f66eb49f95f51ec90df86254580f0ae57862bdd8b5f2759ace63c5f14f8c5a762207f744bb82a8962f8c4fa410dfdb0000000000000000000000000000000004e02a80628c30ce336eab890fa37a227f77357a60be72cb87cc2b7442d2163d395fdc59350624ca1322bfe8619a2efd", + "Expected": "0000000000000000000000000000000006bc2ae646a603a1f4524b445cdeb99914e4ed19cd0676d511764b828bfe126e81cad2cb566655f04de1a302c14d70bc00000000000000000000000000000000023bd509aabfa41385e90cd4b1cbbfa45d066c4defab56993aaa386dc5b7707b1a3a7d444b8bd295a30d0b8f4bdc572e0000000000000000000000000000000006f82e60e18cc958375cce6f465db461ff46ed9d15cfcc01a3aff455d54c77ebba5a654c2ec788b6ed8ac53c39defdd3000000000000000000000000000000000896fbe6492c4c297f8b6d60295a7f2565734d69eea67b2675211a203fec043f0d181b1348bea425a068b7bc12676ed0", + "Name": "matter_fp2_to_g2_90", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001451bcd19495cea3a19393b77760f688fbf17b107dc131c88cbb503eee2a804e2978d6e8a4720d144083d28be73371d70000000000000000000000000000000017db715e8680a0e82e18b513f2c9c7ea136cefe8add71aac6baba146e3e33a498d025c7e0808ced306c915eb02900c61", + "Expected": "0000000000000000000000000000000008604a06a198c3e11458de920176842221667d024f9c155892485a37ff56252be1dc629a6fd580fa41f5e598a23f3651000000000000000000000000000000000e008eed25eafeaa67f27e89e1f81b469724a4b00f08dc4ae672aa1587b19dc615330e3fce0fbd98d7526bc2c4afe69e0000000000000000000000000000000015bc1e4ea5ae2a7fde6d5e5c3e58f6ff5df5bcb125ab402f10edd09087bde39fa27dfcdce7d04fd18ce399729e155fae0000000000000000000000000000000006684e9be8bf9fa4badda842a1d8840f0820d9a797e482c64f4004a18cd63986f19abfc93f6bf068d38eb1e491cabbe6", + "Name": "matter_fp2_to_g2_91", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013a6e129d4dd4aa93cff5489ee879763e2a2231939e609d2d72f07e630b37d09f3057a36fd5cdfc9c81675c996f8ba0f000000000000000000000000000000000e8d7ad082e8f9a718fc2ea712853ed9ab4e8b1a8ca9988f77c70fc759f1fe2d4bd73696e539f130be13b2862efbdf77", + "Expected": "000000000000000000000000000000000f15c3d0b40735babb2e38a2471773faa16b2fa307c3a573ef4cfa5a5559574b2d26cf88b19dee204b77f6e11a1b927c000000000000000000000000000000000d224445f3d31d381bb29c4fdc8130174f5bcb957f451c92f4a652cc3d2b5df985017133a944849b5228a88f99bec771000000000000000000000000000000001338b48bc1fa229f251bcd4828654baec9d149f090b19596ad3b444eacc7bc583f97d9cfc40d5611fdcf89cc9a88e33b000000000000000000000000000000000c30dd2aa51f6577d57175edb3ccc1b324717bc195eb0073c1dff4e5b0d77cf5e41ec233527b3936994e86303f91b172", + "Name": "matter_fp2_to_g2_92", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003379bc10acda5ed1014e2bba1e30cf83b72fe69259eb35476a031b8a898e0183bc32ee853a85fb3d738424208fc880900000000000000000000000000000000175a2e5a44ed62744fbbab9581ea7283470bff12436dfc414ad80b4070f895de3786022cbaed55bdbbc4f68db7460548", + "Expected": "000000000000000000000000000000001735e1f2fe905839fd6534c95b95322f8cc86a4c482f1ad7691b9b9bb8f55015b4faaa1f243786aa33b5874817cd09c80000000000000000000000000000000013f1a27931ac513145f2601e009cf637ba4bdb18a7604f89534fa3ec8488f5b6eab9963c5d753fdd34cbe7d2f8eb8a5900000000000000000000000000000000092d8f800e7a4bf6f9a25ddd7f64fc403db53b1695ae59c15f229458f347a8e7c2ebc415af2d3849282b670c5cf6f8600000000000000000000000000000000019d22d694e559c55db63521e7b60a1a2342c3cce868d70951e5ed32ec0f5efaeab0e78b21359110f6e769776b745938a", + "Name": "matter_fp2_to_g2_93", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b384a9db472c38a5d246da56059b7630f002b5f4663abce7c5f6e896222a1ca1ac02883a1ec95a4ef09bcfab7d0652a000000000000000000000000000000000de09ef45aafa56936e446e18ef9ff97ca8b81c295d35cf7b72416ebd80586d0fc479d86c23295ac54a23489af045ebc", + "Expected": "000000000000000000000000000000000d7dc499e5213120b3ccc173c83d3c15dde9e13ef57238cad84889243b35c8e69eea2ac7ef7560051dcd7402b46b733e00000000000000000000000000000000063ad31c17eb17d39cb4b33e45a0b0e951becc11b685b10cb45cff268b6dca40b780f7e1532be91903372c413a11b5be00000000000000000000000000000000140da959456cbd34e041409350d6106ff65ce6dd2ac3149f04959b16eb83dd0456ca11e5990daf4a1e5c23d3f30a6c4b00000000000000000000000000000000195d07ab127d49baf89fcf5eea1f5e4cffea1a577a5c864c0e637fbdfa10182adc1d5d4ebb871949300193e45ae0fbdd", + "Name": "matter_fp2_to_g2_94", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014df33e7d3ef2c339b958fee667097ccf146556261f7db4b0b0a3c29897b73a0ca249866cff1461488012bc16df43b0d00000000000000000000000000000000099dda253a43b8cfac580306267d9dfeb2c129ac1818fee43c6df5e582f5fa726ba73e1a2ef6a9e011a387c393529678", + "Expected": "0000000000000000000000000000000013ec1ef25b303fe2f10a0bbe9bd77a4b2a055e176c2870c99e63b4baf2b313a835459263351dfbc25c22ea32946d8956000000000000000000000000000000000cb1c3292a2e0c9b1c1ff43cbf7595f39c00fd413b54782681fe75a6f5f231d13912f8d598dd8aaae8159de083dccd8e0000000000000000000000000000000005385f2d4bb6d94d67b2a3bacd3aae31da282707672252c0ab1a12fc85d8e9b9eb75454eb145937542099b860f9d6dce000000000000000000000000000000000e59506f7733a38a7e1da4ea5958de4755b52a9307ba2e5813131b33b86f0e401f97594d9674ff1667068a1ec3c9b145", + "Name": "matter_fp2_to_g2_95", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000011c89c8d7e83155a308b2e517a23f05a4a55353332292b44b0a891b6f730fd126bd0b97eb87f0fbdb6c82779791d022f000000000000000000000000000000000da6f02450955bf26e236ec63aaf80a018ac34fd8784bb24a22a1fc5e8bd686244a923009a10cb38b1422534d0997afd", + "Expected": "000000000000000000000000000000000f4392a41fb3e58dea97b97fd22e2fe6436c3f9bbcd944585a76a5f1a8f98ea4ee21639208d765b6c3a7d08f8cd3f3f00000000000000000000000000000000002c3d62794996dbb881b665eece98926f41a42c21539125fda6070d9f69e29e0557c886b42e4bcd97b14134d6e9d1d710000000000000000000000000000000004b93f315822aa1be8250c2e736727d390ae3a862c4c7dda452817f70f01c73e6f344df1b0f05f03bd574edecc70902e000000000000000000000000000000000731403981fd6243d00c23d0a42a759016f7907548847743f18421f51b1e72cea92f0c5580328babd4ae3e15bc9c56de", + "Name": "matter_fp2_to_g2_96", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015bb227b5c9ccfb8390edcd158b04a69a88a3b99a10ae90e548182751a16448df25493061afde2c9790a0e75e6f409a20000000000000000000000000000000001d7b609155bf3939192eee9642032e6fb10f57d53916674c60211a37b4a7662759899a9569e2dc730febd23f747a7a3", + "Expected": "000000000000000000000000000000000b35c6294b70336217eb9334ff1f1bde9d892d109e947de7f4f5681b3830ed00ad1b89ccd7cbad88ce1586449140697d00000000000000000000000000000000032691e5f4597c06496e9e37907041ddcadd18ca8ce64a8b400b1e2e8d63acce5533231edb66b69807fa2dc026c1d2be000000000000000000000000000000000773ccd132cb215cd98aa17d7fc432e0577b08d8faaa35199000d46fdeeb954e8652566384fa0cc5bcd1724942f7075b00000000000000000000000000000000112e951db3694944fc82fb980547cd8b7f2e5ec6fd2051b6aff2573797bd6a28437848ea0627054af1960ad1de0981e5", + "Name": "matter_fp2_to_g2_97", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000017599d71686e817cf58b78dd7586d5b359999b32b0dec2d67e33fb6388411418ecfaa2670a2cc9dce3dadaed0fb3364000000000000000000000000000000001773995b540be9ffbfd276a92c0494e4eae296d094f9f7eca975cf4f73ae05e92bd64ea71ac47bba534044f4072a6591", + "Expected": "0000000000000000000000000000000018f2eace212eacabd44ff01d886543410ef72b4d27f8d25cb080dbe4b1d4b2b4e57e4dd40723d15789d9b5104b088d9b00000000000000000000000000000000098e9e9b302876ce85ba486609fd028f357314149ce8b530778e6de586ab057fe59648d8c8ae80fe619c4c605b90784a0000000000000000000000000000000016d20a8ca43d37518c8a0f47566ba61a7aade9ea2cdd4a0907ff0ed862c6b7c64815d50397eebec262a05c6010cfaa790000000000000000000000000000000005a70c2fce25acdc4a95fc2bdedb007d71f24b0b5714fa14910ef590215d25442e91a66b6bfea5f7777f0c6d202eff32", + "Name": "matter_fp2_to_g2_98", + "Gas": 110000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f470603a402bc134db1b389fd187460f9eb2dd001a2e99f730af386508c62f0e911d831a2562da84bce11d39f2ff13f000000000000000000000000000000000d8c45f4ab20642d0cba9764126e0818b7d731a6ba29ed234d9d6309a5e8ddfbd85193f1fa8b7cfeed3d31b23b904ee9", + "Expected": "0000000000000000000000000000000012e74d5a0c005a86ca148e9eff8e34a00bfa8b6e6aadf633d65cd09bb29917e0ceb0d5c9d9650c162d7fe4aa274526850000000000000000000000000000000005f09101a2088712619f9c096403b66855a12f9016c55aef6047372fba933f02d9d59db1a86df7be57978021e245782100000000000000000000000000000000136975b37fe400d1d217a2b496c1552b39be4e9e71dd7ad482f5f0836d271d02959fdb698dda3d0530587fb86e0db1dd0000000000000000000000000000000000bad0aabd9309e92e2dd752f4dd73be07c0de2c5ddd57916b9ffa065d7440d03d44e7c042075cda694414a9fb639bb7", + "Name": "matter_fp2_to_g2_99", + "Gas": 110000, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsPairing.json b/core/vm/testdata/precompiles/blsPairing.json new file mode 100644 index 00000000..138b1394 --- /dev/null +++ b/core/vm/testdata/precompiles/blsPairing.json @@ -0,0 +1,702 @@ +[ + { + "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000006e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb9090000000000000000000000000000000017d81038f7d60bee9110d9c0d6d1102fe2d998c957f28e31ec284cc04134df8e47e8f82ff3af2e60a6d9688a4563477c00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_pairing_e(2*G1,3*G2)=e(6*G1,G2)", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000010e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc0000000000000000000000000000000016ba437edcc6551e30c10512367494bfb6b01cc6681e8a4c3cd2501832ab5c4abc40b4578b85cbaffbf0bcd70d67c6e200000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_pairing_e(2*G1,3*G2)=e(5*G1,G2)", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a550000000000000000000000000000000004523f5a3915fc57ee889cdb057e3e76109112d125217546ccfe26810c99b130d1b27820595ad61c7527dc5bbb132a9000000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f000000000000000000000000000000000345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c00000000000000000000000000000000083d3baf25e42f2845d8fa594dda2e0f40a4d670dda40f30da0aff0d81c87ac3d687fe84eca72f34c7c755a045668cf100000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000000000051f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e000000000000000000000000000000000b6a63ac48b7d7666ccfcf1e7de0097c5e6e1aacd03507d23fb975d8daec42857b3a471bf3fc471425b63864e045f4df00000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab160000000000000000000000000000000019bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3000000000000000000000000000000000adb3250ba142db6a748a85e4e401fa0490dd10f27068d161bd47cb562cc189b3194ab53a998e48a48c65e071bb541170000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000000000000d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a414950835820000000000000000000000000000000009d0d1f706f1a85a98f3efaf5c35a41c9182afc129285cf2db3212f6ea0da586ca539bc66181f2ccb228485dd8aff0a70000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000000000000073eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086000000000000000000000000000000001825bacd18f695351f843521ebeada20352c3c3965626f98bc4c68e6ff7c4eed38b48f328204bbb9cd461511d24ebfb3000000000000000000000000000000000029ea93c2f1eb48b195815571ea0148198ff1b19462618cab08d037646b592ecab5a66b4bc660ffd02d1b996ca377da000000000000000000000000000000000bb319a4550c981ee89e3c7e6dcc434283454847792807940f72fd2dbf3625b092e0a0c03e581fd9bd9cf74f95ccef15000000000000000000000000000000000abb072b8d9011e81c9f5b23ba86fdb6399c878aa4eadee45fb2486afe594dffc53be643598a23e5428894a36f5ac3ce0000000000000000000000000000000005d04aa0b644faae17d4c76a14aa680c69fdfc6b59fee3ef45641f566165fced60cbbda4ca096e132bb6f58ab4516686000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436000000000000000000000000000000001065f2a2d29a997343765f239c99a018490eced40ac42fc93217dfe20d8b43ee2215f65166aff483b3dc042c5a43b196000000000000000000000000000000000766e4c66f4a442ff1f61a7a4d197d2b47dd226d0e7822a9b065108cfc643cd3f3d5ae59ed2ce4cde13fd9260bb5b7cc0000000000000000000000000000000012251cc6abbabeb7bbe1fdd63eaee10832a748fff24f7e3fdccaea87facb6e99f2e0407a38f27f90450a471b873104620000000000000000000000000000000011181e08c8fba91271adfee9d31681f8412ab7a3f754f7ba4709024c0ad2287e32dd455d71a296b4838072a8ab9d96f2000000000000000000000000000000001252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada0000000000000000000000000000000002a1bc189e36902d1a49b9965eca3cb818ab5c26dffca63ca9af032870f7bbc615ac65f21bed27bd77dd65f2e90f53580000000000000000000000000000000005a7445f55add1ed5c143424ceef3d594280e316c9441a8e68c3ad97377141d015bf878bdfcf0df9fbcd0529f4e8100800000000000000000000000000000000192b52ba08ed509fc84d5775a7182498fd1ff80941d673c53470c9c9f1192f9c0057d68a1dfee0c68fe5df3625cc43bf000000000000000000000000000000000d3fcaf2f727e0eb32c65da9b910dc681b948dda874d0db6f6ed3f063430fbf073385a9a14c2dd78568726124e2b3ea8000000000000000000000000000000001943ce22cdb2387bd5796950dc95d1ace4012ab9bb4afb46223760230c1709e075f1ae76d6b3f2e947ba6b16d458ccd1000000000000000000000000000000001271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4000000000000000000000000000000001407ffc2c1a2fe3b00d1f91e1f4febcda31004f7c301075c9031c55dd3dfa8104b156a6a3b7017fccd27f81c2af222ef000000000000000000000000000000000a29e38da2d42fd4712052800c7c8dd6e94fd9f506e946068aaac799d60b94c2d7515769ffdd32ea95d3910330ec47de000000000000000000000000000000000c60dae92451206390e30b5daa7151d63624dee496753c87dd54eadc92dc9602081fae02a1a53bac97e984a571923a5d00000000000000000000000000000000085f4fda4c72328895f20c683cb49603a37ff2c43d62f66602506dad5b8d1daebfbac7a7db3f50ccf4dfff277deb105c0000000000000000000000000000000005674d005457e0fe1f0fd978d63996c5f3d29f9149ee4eb04c464742dd329ccaef5e5f6b896d986ddfc9f1b2a3aec13100000000000000000000000000000000071bc66d6e2d244afc4a5ce4da1dce3d0c22c303ba61310fdf57843bbd97763ef496833dfa99d14be084bb1a039bb2da0000000000000000000000000000000012c22e047b0af8e2f4bf3bd3633ef0f8264004ca8ea5677a468857a1762f815235a479e53f4ad4741ffda3fb855021c900000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_pairing_10paircheckstrue", + "Gas": 345000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a550000000000000000000000000000000004523f5a3915fc57ee889cdb057e3e76109112d125217546ccfe26810c99b130d1b27820595ad61c7527dc5bbb132a9000000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f000000000000000000000000000000000345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c00000000000000000000000000000000083d3baf25e42f2845d8fa594dda2e0f40a4d670dda40f30da0aff0d81c87ac3d687fe84eca72f34c7c755a045668cf100000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000000000051f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e000000000000000000000000000000000b6a63ac48b7d7666ccfcf1e7de0097c5e6e1aacd03507d23fb975d8daec42857b3a471bf3fc471425b63864e045f4df00000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab160000000000000000000000000000000019bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3000000000000000000000000000000000adb3250ba142db6a748a85e4e401fa0490dd10f27068d161bd47cb562cc189b3194ab53a998e48a48c65e071bb541170000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000000000000d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a414950835820000000000000000000000000000000009d0d1f706f1a85a98f3efaf5c35a41c9182afc129285cf2db3212f6ea0da586ca539bc66181f2ccb228485dd8aff0a70000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000000000000073eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086000000000000000000000000000000001825bacd18f695351f843521ebeada20352c3c3965626f98bc4c68e6ff7c4eed38b48f328204bbb9cd461511d24ebfb3000000000000000000000000000000000029ea93c2f1eb48b195815571ea0148198ff1b19462618cab08d037646b592ecab5a66b4bc660ffd02d1b996ca377da000000000000000000000000000000000bb319a4550c981ee89e3c7e6dcc434283454847792807940f72fd2dbf3625b092e0a0c03e581fd9bd9cf74f95ccef15000000000000000000000000000000000abb072b8d9011e81c9f5b23ba86fdb6399c878aa4eadee45fb2486afe594dffc53be643598a23e5428894a36f5ac3ce0000000000000000000000000000000005d04aa0b644faae17d4c76a14aa680c69fdfc6b59fee3ef45641f566165fced60cbbda4ca096e132bb6f58ab4516686000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436000000000000000000000000000000001065f2a2d29a997343765f239c99a018490eced40ac42fc93217dfe20d8b43ee2215f65166aff483b3dc042c5a43b196000000000000000000000000000000000766e4c66f4a442ff1f61a7a4d197d2b47dd226d0e7822a9b065108cfc643cd3f3d5ae59ed2ce4cde13fd9260bb5b7cc0000000000000000000000000000000012251cc6abbabeb7bbe1fdd63eaee10832a748fff24f7e3fdccaea87facb6e99f2e0407a38f27f90450a471b873104620000000000000000000000000000000011181e08c8fba91271adfee9d31681f8412ab7a3f754f7ba4709024c0ad2287e32dd455d71a296b4838072a8ab9d96f2000000000000000000000000000000001252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada0000000000000000000000000000000002a1bc189e36902d1a49b9965eca3cb818ab5c26dffca63ca9af032870f7bbc615ac65f21bed27bd77dd65f2e90f53580000000000000000000000000000000005a7445f55add1ed5c143424ceef3d594280e316c9441a8e68c3ad97377141d015bf878bdfcf0df9fbcd0529f4e8100800000000000000000000000000000000192b52ba08ed509fc84d5775a7182498fd1ff80941d673c53470c9c9f1192f9c0057d68a1dfee0c68fe5df3625cc43bf000000000000000000000000000000000d3fcaf2f727e0eb32c65da9b910dc681b948dda874d0db6f6ed3f063430fbf073385a9a14c2dd78568726124e2b3ea8000000000000000000000000000000001943ce22cdb2387bd5796950dc95d1ace4012ab9bb4afb46223760230c1709e075f1ae76d6b3f2e947ba6b16d458ccd1000000000000000000000000000000001271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4000000000000000000000000000000001407ffc2c1a2fe3b00d1f91e1f4febcda31004f7c301075c9031c55dd3dfa8104b156a6a3b7017fccd27f81c2af222ef000000000000000000000000000000000a29e38da2d42fd4712052800c7c8dd6e94fd9f506e946068aaac799d60b94c2d7515769ffdd32ea95d3910330ec47de000000000000000000000000000000000c60dae92451206390e30b5daa7151d63624dee496753c87dd54eadc92dc9602081fae02a1a53bac97e984a571923a5d00000000000000000000000000000000085f4fda4c72328895f20c683cb49603a37ff2c43d62f66602506dad5b8d1daebfbac7a7db3f50ccf4dfff277deb105c0000000000000000000000000000000005674d005457e0fe1f0fd978d63996c5f3d29f9149ee4eb04c464742dd329ccaef5e5f6b896d986ddfc9f1b2a3aec13100000000000000000000000000000000071bc66d6e2d244afc4a5ce4da1dce3d0c22c303ba61310fdf57843bbd97763ef496833dfa99d14be084bb1a039bb2da0000000000000000000000000000000012c22e047b0af8e2f4bf3bd3633ef0f8264004ca8ea5677a468857a1762f815235a479e53f4ad4741ffda3fb855021c900000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_pairing_10pairchecksfalse", + "Gas": 345000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992fee0000000000000000000000000000000017c9fcf0504e62d3553b2f089b64574150aa5117bd3d2e89a8c1ed59bb7f70fb83215975ef31976e757abf60a75a1d9f0000000000000000000000000000000008f5a53d704298fe0cfc955e020442874fe87d5c729c7126abbdcbed355eef6c8f07277bee6d49d56c4ebaf334848624000000000000000000000000000000001302dcc50c6ce4c28086f8e1b43f9f65543cf598be440123816765ab6bc93f62bceda80045fbcad8598d4f32d03ee8fa000000000000000000000000000000000bbb4eb37628d60b035a3e0c45c0ea8c4abef5a6ddc5625e0560097ef9caab208221062e81cd77ef72162923a1906a40", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_0", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed200000000000000000000000000000000192fa5d8732ff9f38e0b1cf12eadfd2608f0c7a39aced7746837833ae253bb57ef9c0d98a4b69eeb2950901917e99d1e0000000000000000000000000000000009aeb10c372b5ef1010675c6a4762fda33636489c23b581c75220589afbc0cc46249f921eea02dd1b761e036ffdbae220000000000000000000000000000000002d225447600d49f932b9dd3ca1e6959697aa603e74d8666681a2dca8160c3857668ae074440366619eb8920256c4e4a00000000000000000000000000000000174882cdd3551e0ce6178861ff83e195fecbcffd53a67b6f10b4431e423e28a480327febe70276036f60bb9c99cf7633", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_1", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f000000000000000000000000000000000a69d6d9f79e19b38e6bf5a245dc820bddbdfe038d50932f76d0e4629d759f8ca6d573fcfc39256305daedf452f9fdf40000000000000000000000000000000015f5949369e58487afcecf8018775d1b0a73e913bf77e13d2e5a843bbbeba7d1978ca27ae8bfc87d30f567dd396b980e00000000000000000000000000000000182198bb38a0353b8db25389e56ab0d8679a1bda008a65dad77e4c95bc6804f6311eb16c761e1a5e2a5f87cfada49fa4000000000000000000000000000000000eb5483959e98c30e71db52615f63521378b156f142d46f3bb285b94aef39d80feacec335b797c5a68dc17ba89d43e0f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_2", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e4000000000000000000000000000000000286f09f931c07507ba4aafb7d43befe0b1d25b27ecc9199b19a9dc20bc7ec0329479ef224e00dece67ec0d61f1ca5ae0000000000000000000000000000000014e6ed154b5552be5c463b730b2134f83e0071dcdadfaa68e6c7c7f6e17dabb7daf06e409177bc4b38cfdb8248157618000000000000000000000000000000000f145e998dc6eb0c2b2be87db62949c7bfa63e8b01c8634248010fd623cfaec5d6c6c193331440957d333bf0c988b7b10000000000000000000000000000000002a1ab3eea343cfdea5779f64b3bddbf0769aded60e54a7507338f044310ba239430663394f110e560594d6042a99f1c", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_3", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d3000000000000000000000000000000000d1007ca90451229d3780d66d3aed7c9d8fc82e9d45549e8586600e38eb6763f3c466e2f6ba6ba1dafd8f00cc452dda20000000000000000000000000000000001d017d920a262b6d6597bab532f83270f41526409510e80278d1c3595ceabb9ceba8ae32b1817297ff78ea7a0d252e8000000000000000000000000000000000935b7a59d2e51bbb2f9b54ccb06ebee9d189fa82f0e97d10c8020badb3de7fe15731b5895faed8cad92ae76e2e1b649000000000000000000000000000000000792dadd48a20040ad43facedc109747411895180813349d41d0e5b389176bfb15895d41665be8d1afa80835ef818eca", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_4", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f9000000000000000000000000000000000095353ad699b89ac82ca7ef631775b2b3a6e3ed8dd320440cdb929baa428e63cb902a83857cc0e2621470544c69e84aa000000000000000000000000000000000892559ade1060b0eef2cbc1c74de62a7ff076a3621e5f0f159672a549f1201f2ffb3ac12c8b12cb86ae3e386c33e219000000000000000000000000000000000750df4632a7126ddb08658a4001f949b9764d9cc43a9393cc55d8fdbb15d4a1186dd87a6433d111888a7804540ad9fc0000000000000000000000000000000017554bd444665df044b91b0b2614017bbfcd7acc7f8c5a16cea2861235578ce2b27dcced9fba234999fa478cd3f6e42d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_5", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1b00000000000000000000000000000000175dadb6ee656ec6aebf8d0e5edaee3f119c74e0ea64e374be9e8ab9fd3d085fceeedf4ed8de676ebe9065d83b0542ad0000000000000000000000000000000005cd6a875329c23e4918976cf997e93e403957acfc999f8159a630d21ab6f1762925c063784237262bedc82402ad81bb0000000000000000000000000000000003274bcb8db35e50164d136c2a98b5a6d2fb5f9767d0ee11c1358bf7ca5ed96d9122f8c1051ba3c658cc89777d03dfa5000000000000000000000000000000000380a240443dff85b6542f75db28b87c39e278cdb8d9627efbbc63b229e6ce783f6fb0114c8e91c2fd6ea71c95bb99a4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_6", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442a000000000000000000000000000000000834cf1b4149d100c41b1bca0495e455002eb6596bddcb94ae48d0c65957e8b313372f8e0d6e57504664b266f38293150000000000000000000000000000000000de2875fbd14760bac4c2cc7d3f239177efe9f7f61f767be420d44f24c9fb863efd60dcd732986db8c5b72470617ea60000000000000000000000000000000000bc9535ebf11c2dcc8c7d3bcd09d7d14035635fccb5fddb7df29ce8855e79f99809781d6ffbbcb33d1227314609abee00000000000000000000000000000000039bbfb4d969d702255e3be7f255a97529a19687ce38cb70637c37894d4102591feef428b0afe8c9ef50310ae3b83091", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_7", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795000000000000000000000000000000000fc09c241899fa6e8cc3b31830e9c9f2777d2bc6758260c9f6af5fce56c9dc1a8daedb5bcb7d7669005ccf6bfacf71050000000000000000000000000000000018e95921a76bc37308e2f10afb36a812b622afe19c8db84465ab8b3293c7d371948ee0578dbb025eed7ed60686109aa0000000000000000000000000000000001558cdfbac6ea2c4c1f4b9a2e809b19e9f4ba47b78d2b18185ed8c97c2f9c2990beadc78b85c123b4c3c08d5c5b3bbef000000000000000000000000000000000ea4dfdd12b9a4b9a3172671a6eafed7508af296813ec5700b697d9239ae484bcf7ab630e5b6830d6d95675be5174bb2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_8", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a1900000000000000000000000000000000000b36d8fb9bd156f618ab8049d41dfe0698218764c0abb10e12fae43c8810b8e2a5201364e2778f6f433b199bb8f9a6800000000000000000000000000000000000707eb15411b63722b4308c0ed4288320078d2463ae659ad4fb3f9ef8124f379df92d64e077403e50727388adb59ac00000000000000000000000000000000158e1249d5b91614924acb23899c6bae408697dec0982c10d0459746499f4e6739afb9d5129568106ed1a1caefeaa9640000000000000000000000000000000019e841562e4aa75321143f8ce1e5ec6158fa5cb8b98c839a486188260c18ee8a7600930f23aa39eac2eb520d6a0fba90", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_9", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac94300000000000000000000000000000000186a9661d6fb539e8687ac214301b2d7623caedd76f4055089befba6ef2c96263d810921ad7783d229f82783c9def424000000000000000000000000000000000447f3e20caa1f99fbaccab7bde2bd37fe77cea691ebf2b9499f95bbbb77afe72b7039eb0c05970b61360fcf8ade73730000000000000000000000000000000005e11f828eda86c10a1d7929def547ac06885da278afae59c5d95453caf0a2d8ed186fa7c6d0a7ab6e9142cfa4b338190000000000000000000000000000000003d954e61b6ab71042b19e804efccd4956b56662f27f70a9255cec0c464b86c0e83721ad3785dec62dd4a9dd3d6d5d53", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_10", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e0000000000000000000000000000000002b94534aa0ba923bda34cbe92b3cd7a3e263741b120240ff5bdb8b718f094d3867e3fcabeab4a7be39c8f8c4fdd10d900000000000000000000000000000000048711cf6a82534d64d072355cb8fe647808e7e8b2d9ac9ed52eb7fe121647a721dd1234c71ecd163d91701eb7331cac00000000000000000000000000000000141ef2e23a1ecc7ef2ed3ea915492e79cfffe60b5e0de8441e878bd0653843d79c724e3c5ebe2321361df99f8932ddc200000000000000000000000000000000085513b4009f29b3e00a91c2c4be418368560802ba4194cbd2f4fa3d72a55fcae547014434514a8b2a8fe3e0b28d2773", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_11", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276b0000000000000000000000000000000009143507a24313ee33401955fc46562c9b20c9917df3b40ccbd7ed43b1349d4551cfd98a4976d6fec5fc289460c8d89900000000000000000000000000000000060566b79df5cc975e669da8ca3a7fa91bf3f5c9fb871c3d62f4a3e79dbc341b89d38b588e5414bc385d5e3cbf3ab9310000000000000000000000000000000016bf40b8cc4c01a87aafae0c4439b623a51ba9a383756a550b69d627d6f45209f0d87e4f9be9edff35c986f7b9c49e3f000000000000000000000000000000001842d9172bce51a164fbdbdb108d0faae07e4642f21c80e40ac31e737657472ae3dfe552b65349629c210a068c4afc0e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_12", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a5787681000000000000000000000000000000000ab19bbddd661e9db8fe4cb307ecebdc5e03efbb95c5b44716c7075bd60efcfc67de0bfd7c46ad989a613946c90a4c1000000000000000000000000000000000120800e7f344cda816299fa37f603ade06beb3b10907f5af896d6b4e42f7f865b756f14164db84411c56cb2ea81f60be000000000000000000000000000000000f688ddd257e66362af1437b6922d3397a7c3dd6dea6bca8ebd6375e75bf2de40bc287cbf3434388191e56b92949c83b0000000000000000000000000000000005252465784aff8c1c707da58b5808c69583bf852d68f96912bc53f8dae4536b09ccbbd25a49d9e744118992b92b6792", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_13", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f768000000000000000000000000000000000e3165efe00f69aee84ac56d2161f07c017abfaadeaad34f8c96799d68bae0e6f9b557bbf9137e7826f49f29c58d1ef9000000000000000000000000000000000de0dce7ea371ad60f21f2cb61cb582b5072408a7efc91edf05b36a1a3b58fd9e6cf808d75157eedccc8f1c93a8ae07d0000000000000000000000000000000016d911943d80427385ebac1d1b293914a9e4dd9db06c1d6a758192d63c8fc9368e02eae7fb0e3a7859408f215cfa76ca0000000000000000000000000000000007bfdc6afb8acec625e50ecbc08a5cdb7862b795866323679885ba5cba3fd51f181078e03fe35e96e6383c077eed1bf5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_14", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931d000000000000000000000000000000000a68dccbe3452731f075580fe6102b8ee5265007ee19c56d95bcb096a3a6ac444f4145b980f41afcb0a865853b279bc600000000000000000000000000000000164767ea55a9038ac2dd254d8c8a4970dba93dacdf5416aecaa407914719cab165e7a32784b2c41652a86358737d831f000000000000000000000000000000000da9441fbc6578c85fdeca49082c9ebbf183de894d67c65158380ee56132d3cdb44b100d72b6d3b82688defb75d2aa390000000000000000000000000000000017d570e4f6e46550679d5d12c347414da207060f594620e2f8db66df8e0b06c912290b207a268e782d4b45db19a199db", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_15", + "Gas": 138000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d500000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd8000000000000000000000000000000000118cd94e36ab177de95f52f180fdbdc584b8d30436eb882980306fa0625f07a1f7ad3b4c38a921c53d14aa9a6ba5b8d600000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_16", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debe0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f900000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a6700000000000000000000000000000000018c690fc5571f69793ec3c82915ac9513726ec891312f4f11dd3ba0ee95cc98b50d925099b0642e58a106e8456bbcbed0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_17", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb6000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae70000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e88000000000000000000000000000000001129c94e0c06f51f1f808a62e42a5449dd159289c14a09c4cc382c91bcfe878b6f3555767c310de1b1c275eb3d17bcf5000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_18", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154b000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a79157800000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000f46a7dee0cb471ddef3a50670a5bfc443b8455877f1ff602b21faff1eff07fc6bf27930ca2159f01479359548339560000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a7915780", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_19", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af0000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b090000000000000000000000000000000011dbce34af6cb14d3e4d49f2482e1b058609f25dca79e2ca48e289ace9d1c8db177b7bc35daad79aa5fdac77728bd5fc0000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_20", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719290000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd6700000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000108248cdc6f503c7bad30eac875d92a75feccbdbe7b5394f8557a92bb12a796430a2c60ca23c6ecd259e5b01e53891820000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd67", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_21", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed30250000000000000000000000000000000006f1fe4d98675ffc62d4d5dd0af9968faca4d0ef425d56fa31b80aea892820e270f6da17aec9eb83c6cc9f84289ecbff000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_22", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff32000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e705800000000000000000000000000000000091ce9e6c4bab3ad3d275cf5888387646c3d9bb53ace7bd0c118fce3e44fcd96241b58e5af53978272f56d04b7d7ab79000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_23", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f2000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000b4322c2fb5d5dd2c65b45f74ca75002c97444d8d4e5680d0369d32d180c93b294e30ef42f21ac274f77ad89633ab1b9000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_24", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c200000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b100000000000000000000000000000000081162fe2e65a642993ba283df9bc8d60bfe495b2dc5623f0467c87bc7570980be2654c8cc8838fb362c677f3a3cb1e900000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_25", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd10000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e272839000000000000000000000000000000001324e51f295ea95adedc9730dac2e1ab6d85838840e3955103d76677ce9a7359215f8d954286950bed1be3bbfebabeda0000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_26", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc00000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b00000000000000000000000000000000132d85236d655190323279a01acc8cbc6fb736d951e3999589f0559cb61ea93e2e1c526ed08ef08046c3d7a40d7cfdaf00000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_27", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da0000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a60000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000a4ec4acf91be994fe45f08dbeb2bbd053275861d11a486693fd6e5bfa3736134396f6b1c3ad146642f2e972ba609d0b000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_28", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e053000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b592947030000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe9760000000000000000000000000000000011dc30871a7a9b33e2882f6b24ccd192aad215edfc6c6bd9acd064dff4a43f41b4c212068875e896daf127547bbeca58000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b59294703", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_29", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265e00000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000dd1137e592119c134103b9e29e4f14b48387a767d4effae44f807e5b579e7f9c2f60105495f070d0a6ab2410f62844d00000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_30", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc8000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c0533455013242330000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad62420000000000000000000000000000000016ad3b981f689f51f46e3e5e166986e4e71655dcc1e928327751ffdcfff8934caec5cc37327b3320202c4efbcfda6ae3000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c053345501324233", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_31", + "Gas": 161000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff170000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000cbcd06a1c576af16d0d77ff8bcc3669a486d044cc7b85db03661a92f4c5c44a28d028521dfcfc292d8ecd05aed6ab940000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff170000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f00000000000000000000000000000000153ba4ab4fecc724c843b8f78db2db1943e91051b8cb9be2eb7e610a570f1f5925b7981334951b505cce1a3992ff05c9000000000000000000000000000000000c1e79925e9ebfd99e5d11489c56a994e0f855a759f0652cc9bb5151877cfea5c37896f56b949167b9cd2226f14333dd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_32", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac50000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c81292925400000000000000000000000000000000065d3d4be1589a6f00c85c208c44916a35349a096b09219704b4c31861ef58e6b4ea5be57a175b429e482b1038718d6c000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac50000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000b8bf51e6509e81b70ff44d6e0df8f9f7bc8e33126e9f1b5a8419414878a2209c05df56cf590c8e33f484587f4a1f6950000000000000000000000000000000001c07a85ece4a1c5072fe722fb264bd1d3aaabf9db9809d5a6cb3fe17157d8fd1bfa730a26e34c87279ea81abe141fe6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_33", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c9973900000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda00000000000000000000000000000000055caff20f9f3f2ea27c64caeb6bb1880f326c64eb6ed6ee7d15da7bfeb16518f76a75f061cd347f7322e0cec634f0fc000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c9973900000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000000197b17c5b695db49c7c8b6fd6f314da7cfdfc4dbe61c76475839c89064870fad5104234c09aee7bafc1660263b6959e0000000000000000000000000000000019e514b65a358640ea90cd3cf547d591f5ff1a13ad99c568ef70c558cbec26dd1e582cc92d849fcfce9749068d361372", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_34", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c30000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000003c0c619be1382199bee84862a0ac6bf4c891d22f722b6af5bfef0edd1ed8c7e9af5efb5d3fc546801f3e019329ae4e80000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c30000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa5200000000000000000000000000000000173bdb0d0a79f1f2607867ddbf2581b4c1cc20fc0bced60ed8756aa4e79cb87c47fa722b1c8fdbe99a8208fc532327b600000000000000000000000000000000172f37eac49dd7f09adf602ebe562e5d0bd52ee2419fc08dc7fda241c0319b3f43b3ec79ab5aac246a783f13e268d4bb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_35", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a030000000000000000000000000000000014c22dcacf2e21ff447c94d81067c626b1217e58b7dc98aacab2ea3fc00b1c5e66f660d19f1c69b16571e49d13c8e1d0000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec35000000000000000000000000000000000125ffac343f97afc413ae80d40a309dfe461fe6b20eb84f8eec3a2718ec2c9f1273bcba2fa1ca59fdc924e471173d68000000000000000000000000000000000ebfaf78e267fd93f0e35e0d19feae9db125660a3dde99b028be77c6fac0116a4808aab02a29063c3c0bc4476924d04f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_36", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218080000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d0571200000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000010338047b7c67c122ffb13466935623ef2338b32bbf5452f78f7abe9a13a16824c11f5520c9dac256b9d257da88d92a30000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d0571200000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218080000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000a96371995c5333949b5e9869599fcb67222c2e44447d133e9b3e18a9e9e14a92ee03dcba86832cde7d35b35a88bcd240000000000000000000000000000000003a912710b425cc477c43ff93684249649732b1e99270bba725e990559169b505e8411fba174b6a15f90d5b3962f5399", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_37", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000008418a39124b40643dddcd6afe1dbdf930303bca65226c2fee1b95de6e080e25451f8b4f2b2b7c4633e1de6a5a7d47cb000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c000000000000000000000000000000001535bce9acb48b6ebc4d3dbb7c236d7cc57d656210e42e9379d4f528fc0ba59bf868503d3bb8e5cd3dafdd881ec56d5c00000000000000000000000000000000037033062d13644c88c317f1c58c18e0d9b4facbbe0701ac8bbdf3c7f0c37b14034c7882d5112a94bea39dfdbfc518e7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_38", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb00000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000ada13f88a645bc6082c6321e0cf2b7ac45c633fe2f0cb36aeb187fe2e50e7510df2a86b98979e8551636e94488c8ce000000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb00000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000002f98cb2305518737e92ee72e2c48d0dbdbbb1f2dc63b9d02d1a8c27dd1ba5a071dc72a8dcc7813b5757bc244357f6630000000000000000000000000000000017775ae72405e39e2db32d5b9db6637b7bbb9799e614bd783f0b785c3f2ee815367e67b15cc037fec8252735f36c28cf", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_39", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a3700000000000000000000000000000000162e49ebd1b50c7837336509e48ace0e7856f00ec45a76b96d1dd88eea300a8118357cafabf32ee2d06b601def523e4800000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b6000000000000000000000000000000001575d39e959d14b96f261265417ca949a248c3d46e2abb093541c103dadf58cd5b21e28c79f17b376070799492457358000000000000000000000000000000001240585d5f4c28467bccb5193e4aad78ea3b1d8dfb4716a3310fb5215a478aac3f05a8ed478486c9e703a59b9c32bfe5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_40", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d0300000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000efe47bf2b11dd10608a309c8aaefdbcbc2bb5e6adceef375371cface8f79668e2b7c2ce9990063a3b53e419e80e2a79000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d0300000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba00000000000000000000000000000000088ea99f17bb06ba20c5c67aeb8fbbd19b2270986ee7c6517209679e6f84f5d43fa22daf6264c993f1d048d016e3b39e0000000000000000000000000000000008af6330f5638c0a9f339f4e8d841b955e322766457112039b2a852b37d3bc45efb67aeb216a09a8940f5e4e1a771da8", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_41", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f000000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c1872290000000000000000000000000000000001099fe889d8f5ddcad09328997c7c3098ef4b4d74ab1d9f6fcbc33a03cafb59c7b28931da67950d1389fbcedca3fb5bb00000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f000000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e00000000000000000000000000000000006b5813a1c1f934e8e564a7cad93dc7f57de7a9592aedeb116fa4ed6bc6452bbc0da23be10adfea4ad4fa82969e7a150000000000000000000000000000000008e760ad89fd250a9d5041ec81e51b8b66f5265037e7237f7c4a08bb83e7799f352c54c37cf70a6c61bb95bfbf8a616e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_42", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a9000000000000000000000000000000001750d2e78525453f113b76f18abf2334de9755c03786fbc9233cda2364d57ed493f4fe6c2b565f4d82ff8113e9b63c4d0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000018446c6ba126e030ed071f87189cbd618627419c82065d26044759f6e4c7257f45021dfad1dcb34dd06b4e391329a61f00000000000000000000000000000000136b60cd7658a5d135d4bc38edff042570c7824245ed9f7a6414e9e7ab3840a99700fb620e809891b66003340db29e64", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_43", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb0000000000000000000000000000000001a28b7856a22db6e79ac4165e60addbb7dfe1f19d815032bc68fea905bd0d7709c2dafc65fe51493c964de678a30d32000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb877660000000000000000000000000000000006a5d436046e0ac1975e4d24bb3e3f35c1ba3801f37705505cdeb6a86c58bf8068b43462a55155799fe2d2cc60c398b900000000000000000000000000000000191fde77c7c2b397a950f0542d2edd183a5e9404e516146697a755561ab2a9705f970b491e4c0003657d864258f391ec", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_44", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e82000000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e270000000000000000000000000000000007c17aaf82c2aa6bf01695157bcd0c2b34734dfbd572b0abe79c8dd3eef7ce6eb9c5e7de55b36ddf87f05e55ba9ac28b00000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e82000000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df700000000000000000000000000000000073b61e6c2de0969138ce3671582c9b58305c5abefb54cfe13eb3284c2be04d26c906c717fd29aaf60b485e18de8e4fb0000000000000000000000000000000006297267dd3b6f3de2329e837302427ab6235b3ad4a9f8c6bb45795852d3c3c61fe75747bbc78043102fc3f646f5d1f9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_45", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000017147eda83f35d0b6c8894317da5b2e991818479674d7dd1aef6bfaebacbb61ad4b2a17ce7e799939f8c2004af4799530000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c74390000000000000000000000000000000009e2fdaeb5f35c5aeb9aaca231439c45ac022875d55575cbf25c15cb6177c6b67416ad22fa7e7cb1924d4c2501f98bd80000000000000000000000000000000012dcaeaa2e415f46b579d9e325d7d7c3cd94083d25fe38c872f1907bbb741aff660d28bb663edd502444e11d2d60d8f0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_46", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f10000000000000000000000000000000016c1c9ca735535f801c58a9e35a80ce122d20abb327b44db4dea31b899982c4e136a2430c51cf3a31adc5611621f9dde000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000b49e02d9fb238a258f3a4307b6a2f64912b7fa91712b5639de24e90c09f9797654e0f7e2d31e968c040b867de03cd370000000000000000000000000000000005c56a16431ba175ad81260faeac87d8238f86b2828b0e74dbb0b296b34745ac17e6b684a25a16240183619c96b986bd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_47", + "Gas": 184000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe90000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb90000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be100000000000000000000000000000000084486ebc81878331aab7d6f53ca3c773fda7b181b56a93e5ee0bfa189afbb7fd7a05c5bea35ec1054c0e1ddc2e2dac20000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb90000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe90000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000137232f722e38e084611ba67d2e28a3b8c73c13f20b6bb4c22141115bd43cdeb555861335f2a75d7cb418eb505341a2f00000000000000000000000000000000153bdd82d3d9b76d1cab9d087654652ab1451f5fef4f449273d81211d88891fc53f131f98e2c3b4cb8c937b7d3a39bf20000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be100000000000000000000000000000000084486ebc81878331aab7d6f53ca3c773fda7b181b56a93e5ee0bfa189afbb7fd7a05c5bea35ec1054c0e1ddc2e2dac20000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000137232f722e38e084611ba67d2e28a3b8c73c13f20b6bb4c22141115bd43cdeb555861335f2a75d7cb418eb505341a2f00000000000000000000000000000000153bdd82d3d9b76d1cab9d087654652ab1451f5fef4f449273d81211d88891fc53f131f98e2c3b4cb8c937b7d3a39bf2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_48", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c600000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000a5b95d6031e92578f6b5de5b8873e87486fd818214be93814753dcf6665229758248a6529892265fcc2b2ba45f89171000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c600000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000a91359bdbb1314481305b25135ded23995bc761ad8dd4d264612313bd34b2ab9e14def566af5bee7fc871f8780fabf60000000000000000000000000000000005c65187e0ba6cd92f16511fd9a90bcbb8b10cb86c8cb62dee1343fc6bb9f582182fa0eadee3f4725d0964335703b2e500000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000a5b95d6031e92578f6b5de5b8873e87486fd818214be93814753dcf6665229758248a6529892265fcc2b2ba45f89171000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000a91359bdbb1314481305b25135ded23995bc761ad8dd4d264612313bd34b2ab9e14def566af5bee7fc871f8780fabf60000000000000000000000000000000005c65187e0ba6cd92f16511fd9a90bcbb8b10cb86c8cb62dee1343fc6bb9f582182fa0eadee3f4725d0964335703b2e5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_49", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b60000000000000000000000000000000002a534a7e1432aa317f782a581f974d23ec75420611165d0486ecd377660fa7c2e8235f829c64501d1b9bf3131e87289000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc50000000000000000000000000000000000d1d35f57275708273d2fc05ad99b78459882178975d2851fa93e90345ac7aa996f658e4311c47bbe0beabdcb11f3b30000000000000000000000000000000004f8cf9163f014f9cf5df4cd3556076c831cd314bb951dc1113a71bc97ac7417aee367dbad9e17df452ff323421997a4000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b60000000000000000000000000000000002a534a7e1432aa317f782a581f974d23ec75420611165d0486ecd377660fa7c2e8235f829c64501d1b9bf3131e87289000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc50000000000000000000000000000000000d1d35f57275708273d2fc05ad99b78459882178975d2851fa93e90345ac7aa996f658e4311c47bbe0beabdcb11f3b30000000000000000000000000000000004f8cf9163f014f9cf5df4cd3556076c831cd314bb951dc1113a71bc97ac7417aee367dbad9e17df452ff323421997a4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_50", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc260000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000d4197b85280f1a5e4cfdd6a7acce516b34a5e12cf55081a858a2ad517d12733aa294a2ca1adf81bc9bf22922fbfd99f000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc260000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f0000000000000000000000000000000015895c8e617ff54c3e039ff6812cd142e2b949c3c8c9fe5e8fa5b7f11287a2b11d441cd04807d220092abd17315a2d650000000000000000000000000000000015488d234f48f5106f57e6cc73c2bc4bb519c4ff79eb835bafddec8129cd26f78e90464997fa2ca63db00ac300bdae850000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000d4197b85280f1a5e4cfdd6a7acce516b34a5e12cf55081a858a2ad517d12733aa294a2ca1adf81bc9bf22922fbfd99f000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f0000000000000000000000000000000015895c8e617ff54c3e039ff6812cd142e2b949c3c8c9fe5e8fa5b7f11287a2b11d441cd04807d220092abd17315a2d650000000000000000000000000000000015488d234f48f5106f57e6cc73c2bc4bb519c4ff79eb835bafddec8129cd26f78e90464997fa2ca63db00ac300bdae85", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_51", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb341500000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa00000000000000000000000000000000145688bf2f7a76a4341564a725a16dd5009b4a5174d766e6bf337a8bcbb11c797b82173d92aa796da6b168e734be90ec00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb341500000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac80000000000000000000000000000000001c59658bed53d4b3c721223cf5e65d6545404c6c8e7a06c4b5f42b166222b1ea50553edc41156e0a8b703c5fa4cc2920000000000000000000000000000000012f78e38e1554ec0d1a424d149eb0a3eb9ce5f345c64c9649971bb3367e5575a3e6a3d48c3e8820473011551c04c695b0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa00000000000000000000000000000000145688bf2f7a76a4341564a725a16dd5009b4a5174d766e6bf337a8bcbb11c797b82173d92aa796da6b168e734be90ec00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac80000000000000000000000000000000001c59658bed53d4b3c721223cf5e65d6545404c6c8e7a06c4b5f42b166222b1ea50553edc41156e0a8b703c5fa4cc2920000000000000000000000000000000012f78e38e1554ec0d1a424d149eb0a3eb9ce5f345c64c9649971bb3367e5575a3e6a3d48c3e8820473011551c04c695b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_52", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b10000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a030000000000000000000000000000000003942eae34fd3104cead334a2cbb2131eaa10b59d07949479331a8f4cc66761cd5d23eb8a861ae618f3a2e01b25080f9000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b10000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b000000000000000000000000000000000909524ad26e2c280f648db5f8bb9c38824b6520b62e3eae8d18c2620266dae6cdbaf3b31d31d380b401c3d75341e1bd0000000000000000000000000000000019861dcb2f9915ec800271df9a0d0ae14f07ab6f79212059c38903a10e818fee665ae1802232170bfb848caec00a12fa0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a030000000000000000000000000000000003942eae34fd3104cead334a2cbb2131eaa10b59d07949479331a8f4cc66761cd5d23eb8a861ae618f3a2e01b25080f9000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b000000000000000000000000000000000909524ad26e2c280f648db5f8bb9c38824b6520b62e3eae8d18c2620266dae6cdbaf3b31d31d380b401c3d75341e1bd0000000000000000000000000000000019861dcb2f9915ec800271df9a0d0ae14f07ab6f79212059c38903a10e818fee665ae1802232170bfb848caec00a12fa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_53", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f60463000000000000000000000000000000000575bd953fc6600f5b48faea1032cf2b6615bf34cc9c526fdcc5042a292812d35fef2884bf51e017eb24c174b2bc20a00000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a00000000000000000000000000000000165a45756d46576175e5f38223a1750dfb9c598457460d12853799edbaf2b621468ee72ba5277a94984f185dd47be7310000000000000000000000000000000015ae40375f1c53a06bffaa805ef450811143db49c4011d515ca831d8dd578d5eec99694e31ecafa76bdba68cfb5a637d00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f60463000000000000000000000000000000000575bd953fc6600f5b48faea1032cf2b6615bf34cc9c526fdcc5042a292812d35fef2884bf51e017eb24c174b2bc20a00000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a00000000000000000000000000000000165a45756d46576175e5f38223a1750dfb9c598457460d12853799edbaf2b621468ee72ba5277a94984f185dd47be7310000000000000000000000000000000015ae40375f1c53a06bffaa805ef450811143db49c4011d515ca831d8dd578d5eec99694e31ecafa76bdba68cfb5a637d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_54", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e60000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a000000000000000000000000000000000032e4fbb8dab462ff0352c2d3925b0e97ca662189129928ccc1714364e4f01d8b026887d808342091ad442b6e11635910000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e60000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf7800000000000000000000000000000000125742a15d9fe0d485807b4326579b5904c981b9c6ac1e38754379ee662063358f75277321e2624672e99be4be74f687000000000000000000000000000000001546d115c31454dabd79db911c558545c2c15488ce854d741502ff941883cc7d77b3e17a877ee78eb1bb2bc8fa0bf5c50000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a000000000000000000000000000000000032e4fbb8dab462ff0352c2d3925b0e97ca662189129928ccc1714364e4f01d8b026887d808342091ad442b6e11635910000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf7800000000000000000000000000000000125742a15d9fe0d485807b4326579b5904c981b9c6ac1e38754379ee662063358f75277321e2624672e99be4be74f687000000000000000000000000000000001546d115c31454dabd79db911c558545c2c15488ce854d741502ff941883cc7d77b3e17a877ee78eb1bb2bc8fa0bf5c5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_55", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df910000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c320000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000ae6134f1fec83a52e5358db260eb9dc6b918f7a803aae5715854ebee2b9bbecea9ab0d955f2e13e2c47a96b234ecb1a0000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c320000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df910000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c79528200000000000000000000000000000000113259a798069342cb07d8c7f1b183e8493f5446e02ec4d00732c9faa8ebbb7d9e33b1d89dd289372795b8811ffbd944000000000000000000000000000000000469803346bd77c4395166f6862b5316077881b47fdcd06ab9958201ff2a1ff706ae398400236d30ae83cb7d79905e790000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000ae6134f1fec83a52e5358db260eb9dc6b918f7a803aae5715854ebee2b9bbecea9ab0d955f2e13e2c47a96b234ecb1a0000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c79528200000000000000000000000000000000113259a798069342cb07d8c7f1b183e8493f5446e02ec4d00732c9faa8ebbb7d9e33b1d89dd289372795b8811ffbd944000000000000000000000000000000000469803346bd77c4395166f6862b5316077881b47fdcd06ab9958201ff2a1ff706ae398400236d30ae83cb7d79905e79", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_56", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000000d9bd58946a4d26e3f97e5fe96e574d6f93562c0fb0c187c0c586208fe9a4d9383d3ca22b272ff3eb7e624ad7fb9ea7000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf00000000000000000000000000000000078e4bb3a5f8a87c9f38e542b03ab6af909d95c84923bebca3ac32a368b283700ec1b5f830ef9aa08d6fb90f8b19591e0000000000000000000000000000000019eaf75bdb6205911235ead4019d390003044963cc02e54b1c0cec4aed54cd3125dabd2ffcc88d5dde3b949ebc06fb16000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000000d9bd58946a4d26e3f97e5fe96e574d6f93562c0fb0c187c0c586208fe9a4d9383d3ca22b272ff3eb7e624ad7fb9ea7000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf00000000000000000000000000000000078e4bb3a5f8a87c9f38e542b03ab6af909d95c84923bebca3ac32a368b283700ec1b5f830ef9aa08d6fb90f8b19591e0000000000000000000000000000000019eaf75bdb6205911235ead4019d390003044963cc02e54b1c0cec4aed54cd3125dabd2ffcc88d5dde3b949ebc06fb16", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_57", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e2946000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000f77a58fb4b4165bf86d30b6349b84780d72b24e8eddce16c73a1f5a06de0638045a64978eb9c477d806f1955e818165000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e2946000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a2200000000000000000000000000000000015edb0036ce4f7cdd026d478a1d9a3ecf10d1ac8b210e8fb0900f331d94e7ebc5672884d276feb5bf74e4c295f8160e000000000000000000000000000000001572656d28148c21445ec74560968def9fb2b793b22a55086a039d39967a226cdcdab48d7c1269ba136e9fe7162bb95b000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000f77a58fb4b4165bf86d30b6349b84780d72b24e8eddce16c73a1f5a06de0638045a64978eb9c477d806f1955e818165000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a2200000000000000000000000000000000015edb0036ce4f7cdd026d478a1d9a3ecf10d1ac8b210e8fb0900f331d94e7ebc5672884d276feb5bf74e4c295f8160e000000000000000000000000000000001572656d28148c21445ec74560968def9fb2b793b22a55086a039d39967a226cdcdab48d7c1269ba136e9fe7162bb95b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_58", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000018bc060c3f6be35b724dee72bcda5cc376dc1f35561f7e70c9fe11eda256edd30aca8c19018433483186beb5b9b2792700000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c9538400000000000000000000000000000000019c47b2347726bd72c33dd3e722d1fb179fe7d93b525c58defdea092f112dd0aaf973ea3573b358e8ac483390f63c3d7000000000000000000000000000000000b439ff419b20783f8b4485ec790be14f8ee1dab9eeeb7b9e7358f83887929cff9095bd4b0fab7d38e27a524d5ed9fa0000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000018bc060c3f6be35b724dee72bcda5cc376dc1f35561f7e70c9fe11eda256edd30aca8c19018433483186beb5b9b2792700000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c9538400000000000000000000000000000000019c47b2347726bd72c33dd3e722d1fb179fe7d93b525c58defdea092f112dd0aaf973ea3573b358e8ac483390f63c3d7000000000000000000000000000000000b439ff419b20783f8b4485ec790be14f8ee1dab9eeeb7b9e7358f83887929cff9095bd4b0fab7d38e27a524d5ed9fa0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_59", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f3555650000000000000000000000000000000007f7dc55c90fa181c55c9b83b7736ee84b3f19d960318e75661dd22c0546d62f4c9e07b915f9295a3c9fe6a62c84fc190000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e400000000000000000000000000000000188c12319c08d113e5b8ce2e18802b092401c540294704d291ea09ab336743d45023deb55a6cabf00dc84303efa2b761000000000000000000000000000000001620a58ad903177c218a25360e4ecd465414b59ddc39c4f5459e7137b1921095ab2eaca3bd038c1d827cf91fc37de68a000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f3555650000000000000000000000000000000007f7dc55c90fa181c55c9b83b7736ee84b3f19d960318e75661dd22c0546d62f4c9e07b915f9295a3c9fe6a62c84fc190000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e400000000000000000000000000000000188c12319c08d113e5b8ce2e18802b092401c540294704d291ea09ab336743d45023deb55a6cabf00dc84303efa2b761000000000000000000000000000000001620a58ad903177c218a25360e4ecd465414b59ddc39c4f5459e7137b1921095ab2eaca3bd038c1d827cf91fc37de68a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_60", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d4006290000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce0000000000000000000000000000000005b1ce5cb2ae0e9175f2bd557d7869233d65008e0f47c52914fa44c4a6234b70eed236bc5499bb0412d0cbb61c98f93b0000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d4006290000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000eeb38bb167edf3f9a38865b9c1eb32633babd6925e56f5bf16c18c91c6deb403bf9b0bd3e1d278d1abaabd1180a48d800000000000000000000000000000000008381e1347dfdcc60f2bc3ce0288dbce917da182fe48c12b049703af5daa1e2ebe136bac87e31045c4ff5d072bfa4820000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce0000000000000000000000000000000005b1ce5cb2ae0e9175f2bd557d7869233d65008e0f47c52914fa44c4a6234b70eed236bc5499bb0412d0cbb61c98f93b0000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000eeb38bb167edf3f9a38865b9c1eb32633babd6925e56f5bf16c18c91c6deb403bf9b0bd3e1d278d1abaabd1180a48d800000000000000000000000000000000008381e1347dfdcc60f2bc3ce0288dbce917da182fe48c12b049703af5daa1e2ebe136bac87e31045c4ff5d072bfa482", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_61", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d0000000000000000000000000000000007efcb9da7b7ff0f4a1d92489ad76c59158bcc42c5c7a93067772a6d9ef1d3b6df9360d0fc1214e7dec02aaaf7b118bf0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf23000000000000000000000000000000000143db2b6c68dfa02055ea2cbd11bee04a663c2d8fde6b0919355d755bbbc5a5e23021dfc7b6c1a76460020b4748da41a0000000000000000000000000000000008ef405cd76f7649b315d4afa02f9c40634ebbaf96390c7b3292e798ea4b646d36594b06d14a47ffa0adc2180d02c92e00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d0000000000000000000000000000000007efcb9da7b7ff0f4a1d92489ad76c59158bcc42c5c7a93067772a6d9ef1d3b6df9360d0fc1214e7dec02aaaf7b118bf0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf23000000000000000000000000000000000143db2b6c68dfa02055ea2cbd11bee04a663c2d8fde6b0919355d755bbbc5a5e23021dfc7b6c1a76460020b4748da41a0000000000000000000000000000000008ef405cd76f7649b315d4afa02f9c40634ebbaf96390c7b3292e798ea4b646d36594b06d14a47ffa0adc2180d02c92e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_62", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000eb29e948adc9e1816c67a7865517fbc91610b2eb30da1d8a1e15c5f62e71a1fd1f40d4d59b23bea7edeba79829010e6000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000019192cb74b345d6f577c1d788bab500fea089ad11a0d514ef0760dfbc95556207dffe06e8711a8869fb9c8f1477b840400000000000000000000000000000000035bbbe52b36e09fd666a1980ad6bc7a9cd085d4a9c7d707a3e5f3ab4f34bcf1e505ffaa870ffe3bd3e587119aea079d0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000eb29e948adc9e1816c67a7865517fbc91610b2eb30da1d8a1e15c5f62e71a1fd1f40d4d59b23bea7edeba79829010e6000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000019192cb74b345d6f577c1d788bab500fea089ad11a0d514ef0760dfbc95556207dffe06e8711a8869fb9c8f1477b840400000000000000000000000000000000035bbbe52b36e09fd666a1980ad6bc7a9cd085d4a9c7d707a3e5f3ab4f34bcf1e505ffaa870ffe3bd3e587119aea079d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_63", + "Gas": 207000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d0000000000000000000000000000000002f2e4467cdc15f1e57d75d6f5c172637df589590863bb437cc5166314e6362b7cd0d7499176b94529979849624cb432000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d29000000000000000000000000000000000264dd2fa407109abaf47d89c3d64542fd6d470579dfe0a98cc73f2fa3f6252bb9356ba39f3c92c1a6343c72d9cc4e5a000000000000000000000000000000000c34a091319b052226395b96f20fa37deb11b766b4b46811fa24799e5b5bfb20813a956524b7be7ea941b63a1c9a5a2c000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d0000000000000000000000000000000002f2e4467cdc15f1e57d75d6f5c172637df589590863bb437cc5166314e6362b7cd0d7499176b94529979849624cb432000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d29000000000000000000000000000000000264dd2fa407109abaf47d89c3d64542fd6d470579dfe0a98cc73f2fa3f6252bb9356ba39f3c92c1a6343c72d9cc4e5a000000000000000000000000000000000c34a091319b052226395b96f20fa37deb11b766b4b46811fa24799e5b5bfb20813a956524b7be7ea941b63a1c9a5a2c000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_64", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000cab5ed8dc53e9c891df449bd199776adbfc193fc8d6bebf9716610fd4db6def608df059bf29fe43dbf1bf0aa52c1b7f0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c8530000000000000000000000000000000003bdbb702a5d2d8a5b2d10ed605627c1413eff588ac82966ca516dd7c2dc617b46a612308182759201efb7e6c6e1d8b2000000000000000000000000000000000bb2d13f201626fb4a2d6c1dfa03fe41a4fbb60b35d623d640cd430b8fb84afd3ff0b371714aaca303bcd4d3d548827e000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000cab5ed8dc53e9c891df449bd199776adbfc193fc8d6bebf9716610fd4db6def608df059bf29fe43dbf1bf0aa52c1b7f0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c8530000000000000000000000000000000003bdbb702a5d2d8a5b2d10ed605627c1413eff588ac82966ca516dd7c2dc617b46a612308182759201efb7e6c6e1d8b2000000000000000000000000000000000bb2d13f201626fb4a2d6c1dfa03fe41a4fbb60b35d623d640cd430b8fb84afd3ff0b371714aaca303bcd4d3d548827e000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_65", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf1000000000000000000000000000000001528dcaae381eb764333992e28ed557034ba5413c5b64df40ef3150d2771e5d1cd8c211ca22075c7436e2582960ab3b400000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000fd913e00fb884cc217475cb69e1fafc298d5c38ee3bd5fbf68fa9c777b79f5ec111aff51fa0184023fec7c9cc881bf0000000000000000000000000000000000c45786b44e8dc531f1eb777adb0e146a963e46ab65d49a8ce9978607e5aa5c58b2880b8018a9ac97add3ca5c2e65beb000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf1000000000000000000000000000000001528dcaae381eb764333992e28ed557034ba5413c5b64df40ef3150d2771e5d1cd8c211ca22075c7436e2582960ab3b400000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000fd913e00fb884cc217475cb69e1fafc298d5c38ee3bd5fbf68fa9c777b79f5ec111aff51fa0184023fec7c9cc881bf0000000000000000000000000000000000c45786b44e8dc531f1eb777adb0e146a963e46ab65d49a8ce9978607e5aa5c58b2880b8018a9ac97add3ca5c2e65beb000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_66", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec275080000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c5100000000000000000000000000000000010ee94e9470765ac32b5648f1cd7d745a793dbd46dc95fa32db86929eec385e50cb35755120480be0956a2a342a46d900000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec275080000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000b4d1c17ec6597484ae95466d3ca0656f8226c5127b4068f46fcaef6a77d9418d75f25cc92c1b7fd03c825514cbbaa640000000000000000000000000000000003110cf859c0d28c6ad8c2c0d0481a4d0d09bb2000aab784939e9f819a6dc3a7a18190293cfd2a106149b5c1a13d35a30000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c5100000000000000000000000000000000010ee94e9470765ac32b5648f1cd7d745a793dbd46dc95fa32db86929eec385e50cb35755120480be0956a2a342a46d900000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000b4d1c17ec6597484ae95466d3ca0656f8226c5127b4068f46fcaef6a77d9418d75f25cc92c1b7fd03c825514cbbaa640000000000000000000000000000000003110cf859c0d28c6ad8c2c0d0481a4d0d09bb2000aab784939e9f819a6dc3a7a18190293cfd2a106149b5c1a13d35a30000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec27508", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_67", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab0000000000000000000000000000000004acd0ba7577ffe37bdeeaf5810b5a8a4a6b51c3c02bec4e0c6f0cfb4f12283120d283c12ecb7e4be7063fefb37a578c0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d00000000000000000000000000000000175da48b3c4c64d6eb26b45475ca7240a0923333b1bf7a6ef37c758ddceb0291da8085580f004814972d4afad7ececab000000000000000000000000000000000a8cb418c0192fdb509c33a79feb88c60226ee228a62a2c1be2b8c1ab9a0f711d11c15eae9f030491dcf70ed47e2678c0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab0000000000000000000000000000000004acd0ba7577ffe37bdeeaf5810b5a8a4a6b51c3c02bec4e0c6f0cfb4f12283120d283c12ecb7e4be7063fefb37a578c0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d00000000000000000000000000000000175da48b3c4c64d6eb26b45475ca7240a0923333b1bf7a6ef37c758ddceb0291da8085580f004814972d4afad7ececab000000000000000000000000000000000a8cb418c0192fdb509c33a79feb88c60226ee228a62a2c1be2b8c1ab9a0f711d11c15eae9f030491dcf70ed47e2678c0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_68", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e20000000000000000000000000000000012ee6884c9d68bdabe8f4aa92aa613129993aad6a7aafffef1922c910cbd3f8b4ae8a810c59a0b9de0a79d4e5db13232000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000001669360d7591ed2362569fc05c4912fcd7ffe60dd26f533087b3099eb6603336863793d2b976bbff0edf4765066dc66c0000000000000000000000000000000006653bf1218a486d94578b5d40ff9a09b4e22325ba3d5abcff3d64652440d68ed5f69e3a215003a1db10c01843704f5000000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e20000000000000000000000000000000012ee6884c9d68bdabe8f4aa92aa613129993aad6a7aafffef1922c910cbd3f8b4ae8a810c59a0b9de0a79d4e5db13232000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000001669360d7591ed2362569fc05c4912fcd7ffe60dd26f533087b3099eb6603336863793d2b976bbff0edf4765066dc66c0000000000000000000000000000000006653bf1218a486d94578b5d40ff9a09b4e22325ba3d5abcff3d64652440d68ed5f69e3a215003a1db10c01843704f5000000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_69", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e5590000000000000000000000000000000006abf7ef1d5e3484992225b5a59791a68cc7e1e0f8aaf2415a9f759f2dff53f62aecf23e0443fdf37bb3775be9f5c981000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b000000000000000000000000000000000082385363502637bd8d030855032ee447fdfd7f0bc1eb14c5f00be2f5a7f30867483a066590a5fa22229e16c2dc00ec0000000000000000000000000000000009aa4ff672d1afdc24d89aa21616fbef5d0eef0b60307c7e193085e89db01dca0666b4201544d9aec8614ca14c22641e000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e5590000000000000000000000000000000006abf7ef1d5e3484992225b5a59791a68cc7e1e0f8aaf2415a9f759f2dff53f62aecf23e0443fdf37bb3775be9f5c981000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b000000000000000000000000000000000082385363502637bd8d030855032ee447fdfd7f0bc1eb14c5f00be2f5a7f30867483a066590a5fa22229e16c2dc00ec0000000000000000000000000000000009aa4ff672d1afdc24d89aa21616fbef5d0eef0b60307c7e193085e89db01dca0666b4201544d9aec8614ca14c22641e000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_70", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf9250000000000000000000000000000000001b7a86c4142843a854dd0937bdbfd833a34fb15303d753e3f41eaf19f4fd9a6af785804d5ae2c3b99044cc13e6ca4b60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f00000000000000000000000000000000118871ec2ef96fd3a5b465133902c6f108eea08781ff754f1776dc029889a958b56943ad041d3a98a5f8fad5530e0cb2000000000000000000000000000000000d8b09f53d16443f4c1b0272d95999130c034720b02c3874a80a014f170c65c87538e22f0025d5c08da9e3532f0ac62c0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf9250000000000000000000000000000000001b7a86c4142843a854dd0937bdbfd833a34fb15303d753e3f41eaf19f4fd9a6af785804d5ae2c3b99044cc13e6ca4b60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f00000000000000000000000000000000118871ec2ef96fd3a5b465133902c6f108eea08781ff754f1776dc029889a958b56943ad041d3a98a5f8fad5530e0cb2000000000000000000000000000000000d8b09f53d16443f4c1b0272d95999130c034720b02c3874a80a014f170c65c87538e22f0025d5c08da9e3532f0ac62c0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_71", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000008151a15a13daeee49a82737118d488005fa7ed1869bc458f8af88e7341e0a48b5d8f129f6eb071fb07c11887f4d543800000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000efb08850063e94f4ce935ef65928deaabafa580a1c0a8e92b7f59efc09adf240f5363caedf8a212170e8d39120cbf74000000000000000000000000000000000838486201e313e21e62bbde270d9804a45b41a70e1c072804f4ca2a2f5ba6d151f15cc19958f0f2c6cd337a8b6c69de000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000008151a15a13daeee49a82737118d488005fa7ed1869bc458f8af88e7341e0a48b5d8f129f6eb071fb07c11887f4d543800000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000efb08850063e94f4ce935ef65928deaabafa580a1c0a8e92b7f59efc09adf240f5363caedf8a212170e8d39120cbf74000000000000000000000000000000000838486201e313e21e62bbde270d9804a45b41a70e1c072804f4ca2a2f5ba6d151f15cc19958f0f2c6cd337a8b6c69de000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_72", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a07060000000000000000000000000000000000876cf6553b21053e0d7a4449cd137fd946f2de0f7032f535f54914a8ae7da5afbe765bdfa3a0cdea0a50e1ed43bce800000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000afb70d8856591b980a2e4144357f4cb75fb367f5319786fb7fa2b656f9ed8facbdfb0b26346349986342ed4f34fae4900000000000000000000000000000000012670f096c4b225332cc181df91d6317c27071668f04226f807b0e17506fed0001c11613598926e38fce506ba02c6c8000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a07060000000000000000000000000000000000876cf6553b21053e0d7a4449cd137fd946f2de0f7032f535f54914a8ae7da5afbe765bdfa3a0cdea0a50e1ed43bce800000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000afb70d8856591b980a2e4144357f4cb75fb367f5319786fb7fa2b656f9ed8facbdfb0b26346349986342ed4f34fae4900000000000000000000000000000000012670f096c4b225332cc181df91d6317c27071668f04226f807b0e17506fed0001c11613598926e38fce506ba02c6c8000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_73", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c2000000000000000000000000000000001093356407cff41779ce8f3d53dfe7a04edc8ce7192ddfeeb4329c38152cf1875d0df9ffeced95f1c7fae7d124649f21000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a903505000000000000000000000000000000000227280838fae5023ab2dcb23f6470b056dd6c87acf848e339d5164981a6abcbfb3c7084235f0749b2f5a4957f17cc62000000000000000000000000000000000b43329a7230c0dc0ee61c43a13e90ce24df40a52a415a2740cb3faa64cfe21058aaae5ea8f69364cd72d2cd6543fe9e00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c2000000000000000000000000000000001093356407cff41779ce8f3d53dfe7a04edc8ce7192ddfeeb4329c38152cf1875d0df9ffeced95f1c7fae7d124649f21000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a903505000000000000000000000000000000000227280838fae5023ab2dcb23f6470b056dd6c87acf848e339d5164981a6abcbfb3c7084235f0749b2f5a4957f17cc62000000000000000000000000000000000b43329a7230c0dc0ee61c43a13e90ce24df40a52a415a2740cb3faa64cfe21058aaae5ea8f69364cd72d2cd6543fe9e00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_74", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e0000000000000000000000000000000007007c89288b69f16870dc857a02cd071db8178e578fd2b78fcd5edb5050dcded107a1c1c0071d45e4c4af364bc9400800000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000018034dc4ccb64f0700b5e12b89d531cd9ccc7a399c1f36d08bbe277ccd8dd970eb00606d6e12bca68291897a817637d200000000000000000000000000000000069e1dd2b22d8ce5ce1e0969e35e07abcfd97f8f3b6d8fa724a0feb9ea78b603391caea3172f50aa222f5fc82bdb18e5000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e0000000000000000000000000000000007007c89288b69f16870dc857a02cd071db8178e578fd2b78fcd5edb5050dcded107a1c1c0071d45e4c4af364bc9400800000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000018034dc4ccb64f0700b5e12b89d531cd9ccc7a399c1f36d08bbe277ccd8dd970eb00606d6e12bca68291897a817637d200000000000000000000000000000000069e1dd2b22d8ce5ce1e0969e35e07abcfd97f8f3b6d8fa724a0feb9ea78b603391caea3172f50aa222f5fc82bdb18e5000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_75", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000a76ccda2ca736ce935b4b88e08bbf183f69e2b3f5a471662a5de571976e7d4264021db88b919c896bbbb8128732c3e3000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000009060f4c03cbefb8f46332a22d5a2be92b167e493cca773121c9bcb485ff3c100df3404737bb08bae60a9dacc4a5c83f00000000000000000000000000000000058eac9c9eddd5f62da6c450254602ebf94e246b3f1a6c5fd27a26cbe1f1f02da4d1176190537db9e264c7e4f28058ed0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000a76ccda2ca736ce935b4b88e08bbf183f69e2b3f5a471662a5de571976e7d4264021db88b919c896bbbb8128732c3e3000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000009060f4c03cbefb8f46332a22d5a2be92b167e493cca773121c9bcb485ff3c100df3404737bb08bae60a9dacc4a5c83f00000000000000000000000000000000058eac9c9eddd5f62da6c450254602ebf94e246b3f1a6c5fd27a26cbe1f1f02da4d1176190537db9e264c7e4f28058ed0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_76", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c00000000000000000000000000000000124a601a06d5094945ec8528c5457ea3f8ca710137b6ad48ee7ad93db53c056059dbc8b02d9edf5e2786c575a0bff89a00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d70000000000000000000000000000000014e04221744944c56495e2cb7789acc9f3cb7456d78c44872d593343fcaa575103fc4ea96e61c4729f0887454fa57d6a000000000000000000000000000000000231121026adca019380e499e795165f297bce1b30c633afb6c00329e21b5872d5545b887bef49a43b2ceb284b72710f000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c00000000000000000000000000000000124a601a06d5094945ec8528c5457ea3f8ca710137b6ad48ee7ad93db53c056059dbc8b02d9edf5e2786c575a0bff89a00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d70000000000000000000000000000000014e04221744944c56495e2cb7789acc9f3cb7456d78c44872d593343fcaa575103fc4ea96e61c4729f0887454fa57d6a000000000000000000000000000000000231121026adca019380e499e795165f297bce1b30c633afb6c00329e21b5872d5545b887bef49a43b2ceb284b72710f000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_77", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c04200000000000000000000000000000000001b8c085fd1f34fb273da7d651602b326fef7c357c2fb7845f4c17ce95152042af9e51e7d7699b50f3605bacab563a100000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000012098b001cb819309d0b45df8a37854967f88cfa823a69f262fe9a40c564bad8e8a6be94d3f7939ed38305c6fd2d93b6000000000000000000000000000000000099b6e094a1b1eb0ead2e7117f3f9bbf72db98409ef1234c8b3b60fea1048f9e97e3c61fd568ccca1da89f6a484bbe8000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c04200000000000000000000000000000000001b8c085fd1f34fb273da7d651602b326fef7c357c2fb7845f4c17ce95152042af9e51e7d7699b50f3605bacab563a100000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000012098b001cb819309d0b45df8a37854967f88cfa823a69f262fe9a40c564bad8e8a6be94d3f7939ed38305c6fd2d93b6000000000000000000000000000000000099b6e094a1b1eb0ead2e7117f3f9bbf72db98409ef1234c8b3b60fea1048f9e97e3c61fd568ccca1da89f6a484bbe8000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_78", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a880000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000c8bd020743550a6d27f0052d0037547db204e3fd752abf6758d899a3793fd3cd50c3073df6258c20a2f8e4797cbab700000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a880000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000a42cfd1e09bd5fdf93d4ffec5a6b312a27dfb7b5e5238dc590158156b613c2d15de1e5a1a4ef2f6751e766874ea788d00000000000000000000000000000000000c87de488d68a3ef74410fe4c892cf62d25fb7d9ef6cbf3cb093184803e12066e86020225e3b9899decf8dbe6a20230000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000c8bd020743550a6d27f0052d0037547db204e3fd752abf6758d899a3793fd3cd50c3073df6258c20a2f8e4797cbab700000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000a42cfd1e09bd5fdf93d4ffec5a6b312a27dfb7b5e5238dc590158156b613c2d15de1e5a1a4ef2f6751e766874ea788d00000000000000000000000000000000000c87de488d68a3ef74410fe4c892cf62d25fb7d9ef6cbf3cb093184803e12066e86020225e3b9899decf8dbe6a20230000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a88", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "matter_pairing_79", + "Gas": 230000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb963", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_80", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_81", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_82", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_83", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_84", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_85", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_86", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_87", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_88", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_89", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_90", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_91", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_92", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_93", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_94", + "Gas": 299000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "matter_pairing_95", + "Gas": 299000, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/bn256Add.json b/core/vm/testdata/precompiles/bn256Add.json new file mode 100644 index 00000000..b6fcd550 --- /dev/null +++ b/core/vm/testdata/precompiles/bn256Add.json @@ -0,0 +1,114 @@ +[ + { + "Input": "18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726607c2b7f58a84bd6145f00c9c2bc0bb1a187f20ff2c92963a88019e7c6a014eed06614e20c147e940f2d70da3f74c9a17df361706a4485c742bd6788478fa17d7", + "Expected": "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915", + "Name": "chfast1", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91518b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266", + "Expected": "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204", + "Name": "chfast2", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio1", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio2", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio3", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio4", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio5", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Expected": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Name": "cdetrio6", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Name": "cdetrio7", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Expected": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Name": "cdetrio8", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Gas": 150, + "Name": "cdetrio9", + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Gas": 150, + "Name": "cdetrio10", + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", + "Expected": "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", + "Name": "cdetrio11", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", + "Name": "cdetrio12", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98", + "Expected": "15bf2bb17880144b5d1cd2b1f46eff9d617bffd1ca57c37fb5a49bd84e53cf66049c797f9ce0d17083deb32b5e36f2ea2a212ee036598dd7624c168993d1355f", + "Name": "cdetrio13", + "Gas": 150, + "NoBenchmark": false + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "cdetrio14", + "Gas": 150, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/bn256Pairing.json b/core/vm/testdata/precompiles/bn256Pairing.json new file mode 100644 index 00000000..3fbed6b8 --- /dev/null +++ b/core/vm/testdata/precompiles/bn256Pairing.json @@ -0,0 +1,100 @@ +[ + { + "Input": "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "jeff1", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db841213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "jeff2", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53c9bbdfec6c36c7d515536431b3a865468acbba2e89718ad33c8bed92e210e81d1853435399a271913a6520736a4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fcc22079f9abd10c3baee245901b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b811d7511c78158de484232fc68daf8a45cf217d1c2fae693ff5871e8752d73b21198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "jeff3", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "2f2ea0b3da1e8ef11914acf8b2e1b32d99df51f5f4f206fc6b947eae860eddb6068134ddb33dc888ef446b648d72338684d678d2eb2371c61a50734d78da4b7225f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37fe3a5dcb7cb122acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d065bbad92e7c4e31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf6806d302580dc0661002994e7cd3a7f224e7ddc27802777486bf80f40e4ca3cfdb186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b008122ae2b09e539e152ec5364e7e2204b03d11d3caa038bfc7cd499f8176aacbee1f39e4e4afc4bc74790a4a028aff2c3d2538731fb755edefd8cb48d6ea589b5e283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b59db1c5d39140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e0764bb98575bd466d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd415794ab061441e51d01e94640b7e3084a07e02c78cf3103c542bc5b298669f211b88da1679b0b64a63b7e0e7bfe52aae524f73a55be7fe70c7e9bfc94b4cf0da1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "jeff4", + "Gas": 147000, + "NoBenchmark": false + }, + { + "Input": "20a754d2071d4d53903e3b31a7e98ad6882d58aec240ef981fdf0a9d22c5926a29c853fcea789887315916bbeb89ca37edb355b4f980c9a12a94f30deeed30211213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c11073b3ff2cdbb38755f8691ea59e9606696b3ff278acfc098fa8226470d03869217cee0a9ad79a4493b5253e2e4e3a39fc2df38419f230d341f60cb064a0ac290a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64cba057b53c26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a98552fd72bd9edb657346127da132e5b82ab908f5816c826acb499e22f2412d1a2d70f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd2198a1f162a73261f112401aa2db79c7dab1533c9935c77290a6ce3b191f2318d198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "jeff5", + "Gas": 147000, + "NoBenchmark": false + }, + { + "Input": "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c103188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "jeff6", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "empty_data", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "one_point", + "Gas": 79000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "two_point_match_2", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "two_point_match_3", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "two_point_match_4", + "Gas": 113000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "ten_point_match_1", + "Gas": 385000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "ten_point_match_2", + "Gas": 385000, + "NoBenchmark": false + }, + { + "Input": "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c51bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e60071f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b4a106054688728c9972c8512e9789e9567aae23e302ccd75", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "ten_point_match_3", + "Gas": 113000, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/bn256ScalarMul.json b/core/vm/testdata/precompiles/bn256ScalarMul.json new file mode 100644 index 00000000..2a28f630 --- /dev/null +++ b/core/vm/testdata/precompiles/bn256ScalarMul.json @@ -0,0 +1,128 @@ +[ + { + "Input": "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb20400000000000000000000000000000000000000000000000011138ce750fa15c2", + "Expected": "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc", + "Name": "chfast1", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46", + "Expected": "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a133a996eb6300b44da664d64251d05381bb8a02e", + "Name": "chfast2", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a133a996eb6300b44da664d64251d05381bb8a02e183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3", + "Expected": "14789d0d4a730b354403b5fac948113739e276c23e0258d8596ee72f9cd9d3230af18a63153e0ec25ff9f2951dd3fa90ed0197bfef6e2a1a62b5095b9d2b4a27", + "Name": "chfast3", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "Expected": "2cde5879ba6f13c0b5aa4ef627f159a3347df9722efce88a9afbb20b763b4c411aa7e43076f6aee272755a7f9b84832e71559ba0d2e0b17d5f9f01755e5b0d11", + "Name": "cdetrio1", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", + "Expected": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451", + "Name": "cdetrio2", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000000000000000", + "Expected": "1051acb0700ec6d42a88215852d582efbaef31529b6fcbc3277b5c1b300f5cf0135b2394bb45ab04b8bd7611bd2dfe1de6a4e6e2ccea1ea1955f577cd66af85b", + "Name": "cdetrio3", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000009", + "Expected": "1dbad7d39dbc56379f78fac1bca147dc8e66de1b9d183c7b167351bfe0aeab742cd757d51289cd8dbd0acf9e673ad67d0f0a89f912af47ed1be53664f5692575", + "Name": "cdetrio4", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000000000000001", + "Expected": "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6", + "Name": "cdetrio5", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "Expected": "29e587aadd7c06722aabba753017c093f70ba7eb1f1c0104ec0564e7e3e21f6022b1143f6a41008e7755c71c3d00b6b915d386de21783ef590486d8afa8453b1", + "Name": "cdetrio6", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", + "Expected": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb", + "Name": "cdetrio7", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000100000000000000000000000000000000", + "Expected": "221a3577763877920d0d14a91cd59b9479f83b87a653bb41f82a3f6f120cea7c2752c7f64cdd7f0e494bff7b60419f242210f2026ed2ec70f89f78a4c56a1f15", + "Name": "cdetrio8", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000000000000009", + "Expected": "228e687a379ba154554040f8821f4e41ee2be287c201aa9c3bc02c9dd12f1e691e0fd6ee672d04cfd924ed8fdc7ba5f2d06c53c1edc30f65f2af5a5b97f0a76a", + "Name": "cdetrio9", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000000000000001", + "Expected": "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c", + "Name": "cdetrio10", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "Expected": "00a1a234d08efaa2616607e31eca1980128b00b415c845ff25bba3afcb81dc00242077290ed33906aeb8e42fd98c41bcb9057ba03421af3f2d08cfc441186024", + "Name": "cdetrio11", + "Gas": 6000, + "NoBenchmark": false + }, + { + "Input": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d9830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000", + "Expected": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b8692929ee761a352600f54921df9bf472e66217e7bb0cee9032e00acc86b3c8bfaf", + "Name": "cdetrio12", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000100000000000000000000000000000000", + "Expected": "1071b63011e8c222c5a771dfa03c2e11aac9666dd097f2c620852c3951a4376a2f46fe2f73e1cf310a168d56baa5575a8319389d7bfa6b29ee2d908305791434", + "Name": "cdetrio13", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000000000000009", + "Expected": "19f75b9dd68c080a688774a6213f131e3052bd353a304a189d7a2ee367e3c2582612f545fb9fc89fde80fd81c68fc7dcb27fea5fc124eeda69433cf5c46d2d7f", + "Name": "cdetrio14", + "Gas": 6000, + "NoBenchmark": true + }, + { + "Input": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000000000000001", + "Expected": "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98", + "Name": "cdetrio15", + "Gas": 6000, + "NoBenchmark": true + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/ecRecover.json b/core/vm/testdata/precompiles/ecRecover.json new file mode 100644 index 00000000..4911d615 --- /dev/null +++ b/core/vm/testdata/precompiles/ecRecover.json @@ -0,0 +1,37 @@ +[ + { + "Input": "a8b53bdf3306a35a7103ab5504a0c9b492295564b6202b1942a84ef300107281000000000000000000000000000000000000000000000000000000000000001b307835653165303366353363653138623737326363623030393366663731663366353366356337356237346463623331613835616138623838393262346538621122334455667788991011121314151617181920212223242526272829303132", + "Expected": "", + "Gas": 3000, + "Name": "CallEcrecoverUnrecoverableKey", + "NoBenchmark": false + }, + { + "Input": "18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c000000000000000000000000000000000000000000000000000000000000001c73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", + "Expected": "000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "Gas": 3000, + "Name": "ValidKey", + "NoBenchmark": false + }, + { + "Input": "18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c100000000000000000000000000000000000000000000000000000000000001c73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", + "Expected": "", + "Gas": 3000, + "Name": "InvalidHighV-bits-1", + "NoBenchmark": false + }, + { + "Input": "18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c000000000000000000000000000000000000001000000000000000000000001c73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", + "Expected": "", + "Gas": 3000, + "Name": "InvalidHighV-bits-2", + "NoBenchmark": false + }, + { + "Input": "18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c000000000000000000000000000000000000001000000000000000000000011c73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", + "Expected": "", + "Gas": 3000, + "Name": "InvalidHighV-bits-3", + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blake2f.json b/core/vm/testdata/precompiles/fail-blake2f.json new file mode 100644 index 00000000..70835aa5 --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blake2f.json @@ -0,0 +1,22 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "vector 0: empty input" + }, + { + "Input": "00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "ExpectedError": "invalid input length", + "Name": "vector 1: less than 213 bytes input" + }, + { + "Input": "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + "ExpectedError": "invalid input length", + "Name": "vector 2: more than 213 bytes input" + }, + { + "Input": "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000002", + "ExpectedError": "invalid final flag", + "Name": "vector 3: malformed final block indicator flag" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1Add.json b/core/vm/testdata/precompiles/fail-blsG1Add.json new file mode 100644 index 00000000..e58ec0e9 --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG1Add.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g1add_empty_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "ExpectedError": "invalid input length", + "Name": "bls_g1add_short_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "ExpectedError": "invalid input length", + "Name": "bls_g1add_large_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000108b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g1add_violate_top_bytes" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "ExpectedError": "must be less than modulus", + "Name": "bls_g1add_invalid_field_element" + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "ExpectedError": "point is not on curve", + "Name": "bls_g1add_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1Mul.json b/core/vm/testdata/precompiles/fail-blsG1Mul.json new file mode 100644 index 00000000..acb8228a --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG1Mul.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g1mul_empty_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g1mul_short_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g1mul_large_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000108b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g1mul_violate_top_bytes" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "must be less than modulus", + "Name": "bls_g1mul_invalid_field_element" + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "ExpectedError": "point is not on curve", + "Name": "bls_g1mul_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1MultiExp.json b/core/vm/testdata/precompiles/fail-blsG1MultiExp.json new file mode 100644 index 00000000..2cd28bd3 --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG1MultiExp.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g1multiexp_empty_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g1multiexp_short_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g1multiexp_large_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "must be less than modulus", + "Name": "bls_g1multiexp_invalid_field_element" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000108b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g1multiexp_violate_top_bytes" + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "ExpectedError": "point is not on curve", + "Name": "bls_g1multiexp_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2Add.json b/core/vm/testdata/precompiles/fail-blsG2Add.json new file mode 100644 index 00000000..b1fe9d5b --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG2Add.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g2add_empty_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828010000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "invalid input length", + "Name": "bls_g2add_short_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b8280100000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "invalid input length", + "Name": "bls_g2add_large_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000010606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g2add_violate_top_bytes" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "must be less than modulus", + "Name": "bls_g2add_invalid_field_element" + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "point is not on curve", + "Name": "bls_g2add_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2Mul.json b/core/vm/testdata/precompiles/fail-blsG2Mul.json new file mode 100644 index 00000000..c2f0b89c --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG2Mul.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g2mul_empty_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828010000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g2mul_short_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b8280100000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g2mul_large_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000010606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g2mul_violate_top_bytes" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "must be less than modulus", + "Name": "bls_g2mul_invalid_field_element" + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "ExpectedError": "point is not on curve", + "Name": "bls_g2mul_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2MultiExp.json b/core/vm/testdata/precompiles/fail-blsG2MultiExp.json new file mode 100644 index 00000000..437f8dfc --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsG2MultiExp.json @@ -0,0 +1,32 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_g2multiexp_empty_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828010000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g2multiexp_short_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b8280100000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid input length", + "Name": "bls_g2multiexp_large_input" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000010606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_g2multiexp_violate_top_bytes" + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", + "ExpectedError": "must be less than modulus", + "Name": "bls_g2multiexp_invalid_field_element" + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "ExpectedError": "point is not on curve", + "Name": "bls_g2multiexp_point_not_on_curve" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsMapG1.json b/core/vm/testdata/precompiles/fail-blsMapG1.json new file mode 100644 index 00000000..8550269f --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsMapG1.json @@ -0,0 +1,22 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_mapg1_empty_input" + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ExpectedError": "invalid input length", + "Name": "bls_mapg1_short_input" + }, + { + "Input": "00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_mapg1_top_bytes" + }, + { + "Input": "000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", + "ExpectedError": "must be less than modulus", + "Name": "bls_mapg1_invalid_fq_element" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsMapG2.json b/core/vm/testdata/precompiles/fail-blsMapG2.json new file mode 100644 index 00000000..397a608b --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsMapG2.json @@ -0,0 +1,22 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_mapg2_empty_input" + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ExpectedError": "invalid input length", + "Name": "bls_mapg2_short_input" + }, + { + "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_mapg2_top_bytes" + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", + "ExpectedError": "must be less than modulus", + "Name": "bls_mapg2_invalid_fq_element" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsPairing.json b/core/vm/testdata/precompiles/fail-blsPairing.json new file mode 100644 index 00000000..084e5563 --- /dev/null +++ b/core/vm/testdata/precompiles/fail-blsPairing.json @@ -0,0 +1,42 @@ +[ + { + "Input": "", + "ExpectedError": "invalid input length", + "Name": "bls_pairing_empty_input" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b8280100000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "invalid input length", + "Name": "bls_pairing_extra_data" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", + "ExpectedError": "must be less than modulus", + "Name": "bls_pairing_invalid_field_element" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000010606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "invalid field element top bytes", + "Name": "bls_pairing_top_bytes" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "point is not on curve", + "Name": "bls_pairing_g1_not_on_curve" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "ExpectedError": "point is not on curve", + "Name": "bls_pairing_g2_not_on_curve" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000a989badd40d6212b33cffc3f3763e9bc760f988c9926b26da9dd85e928483446346b8ed00e1de5d5ea93e354abe706c00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "ExpectedError": "g1 point is not on correct subgroup", + "Name": "bls_pairing_g1_not_in_correct_subgroup" + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013a59858b6809fca4d9a3b6539246a70051a3c88899964a42bc9a69cf9acdd9dd387cfa9086b894185b9a46a402be730000000000000000000000000000000002d27e0ec3356299a346a09ad7dc4ef68a483c3aed53f9139d2f929a3eecebf72082e5e58c6da24ee32e03040c406d4f", + "ExpectedError": "g2 point is not on correct subgroup", + "Name": "bls_pairing_g2_not_in_correct_subgroup" + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/modexp.json b/core/vm/testdata/precompiles/modexp.json new file mode 100644 index 00000000..4550eb91 --- /dev/null +++ b/core/vm/testdata/precompiles/modexp.json @@ -0,0 +1,121 @@ +[ + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "eip_example1", + "Gas": 13056, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "eip_example2", + "Gas": 13056, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb502fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb13cfb3d8f7f2a3c014122ebb3ed41b02783adc", + "Name": "nagydani-1-square", + "Gas": 204, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb503fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "4834a46ba565db27903b1c720c9d593e84e4cbd6ad2e64b31885d944f68cd801f92225a8961c952ddf2797fa4701b330c85c4b363798100b921a1a22a46a7fec", + "Name": "nagydani-1-qube", + "Gas": 204, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5010001fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "c36d804180c35d4426b57b50c5bfcca5c01856d104564cd513b461d3c8b8409128a5573e416d0ebe38f5f736766d9dc27143e4da981dfa4d67f7dc474cbee6d2", + "Name": "nagydani-1-pow0x10001", + "Gas": 3276, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5102e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576da4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70", + "Name": "nagydani-2-square", + "Gas": 665, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5103e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "d89ceb68c32da4f6364978d62aaa40d7b09b59ec61eb3c0159c87ec3a91037f7dc6967594e530a69d049b64adfa39c8fa208ea970cfe4b7bcd359d345744405afe1cbf761647e32b3184c7fbe87cee8c6c7ff3b378faba6c68b83b6889cb40f1603ee68c56b4c03d48c595c826c041112dc941878f8c5be828154afd4a16311f", + "Name": "nagydani-2-qube", + "Gas": 665, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51010001e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "ad85e8ef13fd1dd46eae44af8b91ad1ccae5b7a1c92944f92a19f21b0b658139e0cabe9c1f679507c2de354bf2c91ebd965d1e633978a830d517d2f6f8dd5fd58065d58559de7e2334a878f8ec6992d9b9e77430d4764e863d77c0f87beede8f2f7f2ab2e7222f85cc9d98b8467f4bb72e87ef2882423ebdb6daf02dddac6db2", + "Name": "nagydani-2-pow0x10001", + "Gas": 10649, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb02d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "affc7507ea6d84751ec6b3f0d7b99dbcc263f33330e450d1b3ff0bc3d0874320bf4edd57debd587306988157958cb3cfd369cc0c9c198706f635c9e0f15d047df5cb44d03e2727f26b083c4ad8485080e1293f171c1ed52aef5993a5815c35108e848c951cf1e334490b4a539a139e57b68f44fee583306f5b85ffa57206b3ee5660458858534e5386b9584af3c7f67806e84c189d695e5eb96e1272d06ec2df5dc5fabc6e94b793718c60c36be0a4d031fc84cd658aa72294b2e16fc240aef70cb9e591248e38bd49c5a554d1afa01f38dab72733092f7555334bbef6c8c430119840492380aa95fa025dcf699f0a39669d812b0c6946b6091e6e235337b6f8", + "Name": "nagydani-3-square", + "Gas": 1894, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb03d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "1b280ecd6a6bf906b806d527c2a831e23b238f89da48449003a88ac3ac7150d6a5e9e6b3be4054c7da11dd1e470ec29a606f5115801b5bf53bc1900271d7c3ff3cd5ed790d1c219a9800437a689f2388ba1a11d68f6a8e5b74e9a3b1fac6ee85fc6afbac599f93c391f5dc82a759e3c6c0ab45ce3f5d25d9b0c1bf94cf701ea6466fc9a478dacc5754e593172b5111eeba88557048bceae401337cd4c1182ad9f700852bc8c99933a193f0b94cf1aedbefc48be3bc93ef5cb276d7c2d5462ac8bb0c8fe8923a1db2afe1c6b90d59c534994a6a633f0ead1d638fdc293486bb634ff2c8ec9e7297c04241a61c37e3ae95b11d53343d4ba2b4cc33d2cfa7eb705e", + "Name": "nagydani-3-qube", + "Gas": 1894, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb010001d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "37843d7c67920b5f177372fa56e2a09117df585f81df8b300fba245b1175f488c99476019857198ed459ed8d9799c377330e49f4180c4bf8e8f66240c64f65ede93d601f957b95b83efdee1e1bfde74169ff77002eaf078c71815a9220c80b2e3b3ff22c2f358111d816ebf83c2999026b6de50bfc711ff68705d2f40b753424aefc9f70f08d908b5a20276ad613b4ab4309a3ea72f0c17ea9df6b3367d44fb3acab11c333909e02e81ea2ed404a712d3ea96bba87461720e2d98723e7acd0520ac1a5212dbedcd8dc0c1abf61d4719e319ff4758a774790b8d463cdfe131d1b2dcfee52d002694e98e720cb6ae7ccea353bc503269ba35f0f63bf8d7b672a76", + "Name": "nagydani-3-pow0x10001", + "Gas": 30310, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8102df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "8a5aea5f50dcc03dc7a7a272b5aeebc040554dbc1ffe36753c4fc75f7ed5f6c2cc0de3a922bf96c78bf0643a73025ad21f45a4a5cadd717612c511ab2bff1190fe5f1ae05ba9f8fe3624de1de2a817da6072ddcdb933b50216811dbe6a9ca79d3a3c6b3a476b079fd0d05f04fb154e2dd3e5cb83b148a006f2bcbf0042efb2ae7b916ea81b27aac25c3bf9a8b6d35440062ad8eae34a83f3ffa2cc7b40346b62174a4422584f72f95316f6b2bee9ff232ba9739301c97c99a9ded26c45d72676eb856ad6ecc81d36a6de36d7f9dafafee11baa43a4b0d5e4ecffa7b9b7dcefd58c397dd373e6db4acd2b2c02717712e6289bed7c813b670c4a0c6735aa7f3b0f1ce556eae9fcc94b501b2c8781ba50a8c6220e8246371c3c7359fe4ef9da786ca7d98256754ca4e496be0a9174bedbecb384bdf470779186d6a833f068d2838a88d90ef3ad48ff963b67c39cc5a3ee123baf7bf3125f64e77af7f30e105d72c4b9b5b237ed251e4c122c6d8c1405e736299c3afd6db16a28c6a9cfa68241e53de4cd388271fe534a6a9b0dbea6171d170db1b89858468885d08fecbd54c8e471c3e25d48e97ba450b96d0d87e00ac732aaa0d3ce4309c1064bd8a4c0808a97e0143e43a24cfa847635125cd41c13e0574487963e9d725c01375db99c31da67b4cf65eff555f0c0ac416c727ff8d438ad7c42030551d68c2e7adda0abb1ca7c10", + "Name": "nagydani-4-square", + "Gas": 5580, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8103df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "5a2664252aba2d6e19d9600da582cdd1f09d7a890ac48e6b8da15ae7c6ff1856fc67a841ac2314d283ffa3ca81a0ecf7c27d89ef91a5a893297928f5da0245c99645676b481b7e20a566ee6a4f2481942bee191deec5544600bb2441fd0fb19e2ee7d801ad8911c6b7750affec367a4b29a22942c0f5f4744a4e77a8b654da2a82571037099e9c6d930794efe5cdca73c7b6c0844e386bdca8ea01b3d7807146bb81365e2cdc6475f8c23e0ff84463126189dc9789f72bbce2e3d2d114d728a272f1345122de23df54c922ec7a16e5c2a8f84da8871482bd258c20a7c09bbcd64c7a96a51029bbfe848736a6ba7bf9d931a9b7de0bcaf3635034d4958b20ae9ab3a95a147b0421dd5f7ebff46c971010ebfc4adbbe0ad94d5498c853e7142c450d8c71de4b2f84edbf8acd2e16d00c8115b150b1c30e553dbb82635e781379fe2a56360420ff7e9f70cc64c00aba7e26ed13c7c19622865ae07248daced36416080f35f8cc157a857ed70ea4f347f17d1bee80fa038abd6e39b1ba06b97264388b21364f7c56e192d4b62d9b161405f32ab1e2594e86243e56fcf2cb30d21adef15b9940f91af681da24328c883d892670c6aa47940867a81830a82b82716895db810df1b834640abefb7db2092dd92912cb9a735175bc447be40a503cf22dfe565b4ed7a3293ca0dfd63a507430b323ee248ec82e843b673c97ad730728cebc", + "Name": "nagydani-4-qube", + "Gas": 5580, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81010001df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "bed8b970c4a34849fc6926b08e40e20b21c15ed68d18f228904878d4370b56322d0da5789da0318768a374758e6375bfe4641fca5285ec7171828922160f48f5ca7efbfee4d5148612c38ad683ae4e3c3a053d2b7c098cf2b34f2cb19146eadd53c86b2d7ccf3d83b2c370bfb840913ee3879b1057a6b4e07e110b6bcd5e958bc71a14798c91d518cc70abee264b0d25a4110962a764b364ac0b0dd1ee8abc8426d775ec0f22b7e47b32576afaf1b5a48f64573ed1c5c29f50ab412188d9685307323d990802b81dacc06c6e05a1e901830ba9fcc67688dc29c5e27bde0a6e845ca925f5454b6fb3747edfaa2a5820838fb759eadf57f7cb5cec57fc213ddd8a4298fa079c3c0f472b07fb15aa6a7f0a3780bd296ff6a62e58ef443870b02260bd4fd2bbc98255674b8e1f1f9f8d33c7170b0ebbea4523b695911abbf26e41885344823bd0587115fdd83b721a4e8457a31c9a84b3d3520a07e0e35df7f48e5a9d534d0ec7feef1ff74de6a11e7f93eab95175b6ce22c68d78a642ad642837897ec11349205d8593ac19300207572c38d29ca5dfa03bc14cdbc32153c80e5cc3e739403d34c75915e49beb43094cc6dcafb3665b305ddec9286934ae66ec6b777ca528728c851318eb0f207b39f1caaf96db6eeead6b55ed08f451939314577d42bcc9f97c0b52d0234f88fd07e4c1d7780fdebc025cfffcb572cb27a8c33963", + "Name": "nagydani-4-pow0x10001", + "Gas": 89292, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf02e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "d61fe4e3f32ac260915b5b03b78a86d11bfc41d973fce5b0cc59035cf8289a8a2e3878ea15fa46565b0d806e2f85b53873ea20ed653869b688adf83f3ef444535bf91598ff7e80f334fb782539b92f39f55310cc4b35349ab7b278346eda9bc37c0d8acd3557fae38197f412f8d9e57ce6a76b7205c23564cab06e5615be7c6f05c3d05ec690cba91da5e89d55b152ff8dd2157dc5458190025cf94b1ad98f7cbe64e9482faba95e6b33844afc640892872b44a9932096508f4a782a4805323808f23e54b6ff9b841dbfa87db3505ae4f687972c18ea0f0d0af89d36c1c2a5b14560c153c3fee406f5cf15cfd1c0bb45d767426d465f2f14c158495069d0c5955a00150707862ecaae30624ebacdd8ac33e4e6aab3ff90b6ba445a84689386b9e945d01823a65874444316e83767290fcff630d2477f49d5d8ffdd200e08ee1274270f86ed14c687895f6caf5ce528bd970c20d2408a9ba66216324c6a011ac4999098362dbd98a038129a2d40c8da6ab88318aa3046cb660327cc44236d9e5d2163bd0959062195c51ed93d0088b6f92051fc99050ece2538749165976233697ab4b610385366e5ce0b02ad6b61c168ecfbedcdf74278a38de340fd7a5fead8e588e294795f9b011e2e60377a89e25c90e145397cdeabc60fd32444a6b7642a611a83c464d8b8976666351b4865c37b02e6dc21dbcdf5f930341707b618cc0f03c3122646b3385c9df9f2ec730eec9d49e7dfc9153b6e6289da8c4f0ebea9ccc1b751948e3bb7171c9e4d57423b0eeeb79095c030cb52677b3f7e0b45c30f645391f3f9c957afa549c4e0b2465b03c67993cd200b1af01035962edbc4c9e89b31c82ac121987d6529dafdeef67a132dc04b6dc68e77f22862040b75e2ceb9ff16da0fca534e6db7bd12fa7b7f51b6c08c1e23dfcdb7acbd2da0b51c87ffbced065a612e9b1c8bba9b7e2d8d7a2f04fcc4aaf355b60d764879a76b5e16762d5f2f55d585d0c8e82df6940960cddfb72c91dfa71f6b4e1c6ca25dfc39a878e998a663c04fe29d5e83b9586d047b4d7ff70a9f0d44f127e7d741685ca75f11629128d916a0ffef4be586a30c4b70389cc746e84ebf177c01ee8a4511cfbb9d1ecf7f7b33c7dd8177896e10bbc82f838dcd6db7ac67de62bf46b6a640fb580c5d1d2708f3862e3d2b645d0d18e49ef088053e3a220adc0e033c2afcfe61c90e32151152eb3caaf746c5e377d541cafc6cbb0cc0fa48b5caf1728f2e1957f5addfc234f1a9d89e40d49356c9172d0561a695fce6dab1d412321bbf407f63766ffd7b6b3d79bcfa07991c5a9709849c1008689e3b47c50d613980bec239fb64185249d055b30375ccb4354d71fe4d05648fbf6c80634dfc3575f2f24abb714c1e4c95e8896763bf4316e954c7ad19e5780ab7a040ca6fb9271f90a8b22ae738daf6cb", + "Name": "nagydani-5-square", + "Gas": 17868, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf03e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "5f9c70ec884926a89461056ad20ac4c30155e817f807e4d3f5bb743d789c83386762435c3627773fa77da5144451f2a8aad8adba88e0b669f5377c5e9bad70e45c86fe952b613f015a9953b8a5de5eaee4566acf98d41e327d93a35bd5cef4607d025e58951167957df4ff9b1627649d3943805472e5e293d3efb687cfd1e503faafeb2840a3e3b3f85d016051a58e1c9498aab72e63b748d834b31eb05d85dcde65e27834e266b85c75cc4ec0135135e0601cb93eeeb6e0010c8ceb65c4c319623c5e573a2c8c9fbbf7df68a930beb412d3f4dfd146175484f45d7afaa0d2e60684af9b34730f7c8438465ad3e1d0c3237336722f2aa51095bd5759f4b8ab4dda111b684aa3dac62a761722e7ae43495b7709933512c81c4e3c9133a51f7ce9f2b51fcec064f65779666960b4e45df3900f54311f5613e8012dd1b8efd359eda31a778264c72aa8bb419d862734d769076bce2810011989a45374e5c5d8729fec21427f0bf397eacbb4220f603cf463a4b0c94efd858ffd9768cd60d6ce68d755e0fbad007ce5c2223d70c7018345a102e4ab3c60a13a9e7794303156d4c2063e919f2153c13961fb324c80b240742f47773a7a8e25b3e3fb19b00ce839346c6eb3c732fbc6b888df0b1fe0a3d07b053a2e9402c267b2d62f794d8a2840526e3ade15ce2264496ccd7519571dfde47f7a4bb16292241c20b2be59f3f8fb4f6383f232d838c5a22d8c95b6834d9d2ca493f5a505ebe8899503b0e8f9b19e6e2dd81c1628b80016d02097e0134de51054c4e7674824d4d758760fc52377d2cad145e259aa2ffaf54139e1a66b1e0c1c191e32ac59474c6b526f5b3ba07d3e5ec286eddf531fcd5292869be58c9f22ef91026159f7cf9d05ef66b4299f4da48cc1635bf2243051d342d378a22c83390553e873713c0454ce5f3234397111ac3fe3207b86f0ed9fc025c81903e1748103692074f83824fda6341be4f95ff00b0a9a208c267e12fa01825054cc0513629bf3dbb56dc5b90d4316f87654a8be18227978ea0a8a522760cad620d0d14fd38920fb7321314062914275a5f99f677145a6979b156bd82ecd36f23f8e1273cc2759ecc0b2c69d94dad5211d1bed939dd87ed9e07b91d49713a6e16ade0a98aea789f04994e318e4ff2c8a188cd8d43aeb52c6daa3bc29b4af50ea82a247c5cd67b573b34cbadcc0a376d3bbd530d50367b42705d870f2e27a8197ef46070528bfe408360faa2ebb8bf76e9f388572842bcb119f4d84ee34ae31f5cc594f23705a49197b181fb78ed1ec99499c690f843a4d0cf2e226d118e9372271054fbabdcc5c92ae9fefaef0589cd0e722eaf30c1703ec4289c7fd81beaa8a455ccee5298e31e2080c10c366a6fcf56f7d13582ad0bcad037c612b710fc595b70fbefaaca23623b60c6c39b11beb8e5843b6b3dac60f", + "Name": "nagydani-5-qube", + "Gas": 17868, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf010001e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f86780428982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c144a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b601fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c680844dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500", + "Name": "nagydani-5-pow0x10001", + "Gas": 285900, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/modexp_eip2565.json b/core/vm/testdata/precompiles/modexp_eip2565.json new file mode 100644 index 00000000..c5544143 --- /dev/null +++ b/core/vm/testdata/precompiles/modexp_eip2565.json @@ -0,0 +1,121 @@ +[ + { + "Input": "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Name": "eip_example1", + "Gas": 1360, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000", + "Name": "eip_example2", + "Gas": 1360, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb502fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb13cfb3d8f7f2a3c014122ebb3ed41b02783adc", + "Name": "nagydani-1-square", + "Gas": 200, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb503fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "4834a46ba565db27903b1c720c9d593e84e4cbd6ad2e64b31885d944f68cd801f92225a8961c952ddf2797fa4701b330c85c4b363798100b921a1a22a46a7fec", + "Name": "nagydani-1-qube", + "Gas": 200, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5010001fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b", + "Expected": "c36d804180c35d4426b57b50c5bfcca5c01856d104564cd513b461d3c8b8409128a5573e416d0ebe38f5f736766d9dc27143e4da981dfa4d67f7dc474cbee6d2", + "Name": "nagydani-1-pow0x10001", + "Gas": 341, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5102e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576da4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70", + "Name": "nagydani-2-square", + "Gas": 200, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5103e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "d89ceb68c32da4f6364978d62aaa40d7b09b59ec61eb3c0159c87ec3a91037f7dc6967594e530a69d049b64adfa39c8fa208ea970cfe4b7bcd359d345744405afe1cbf761647e32b3184c7fbe87cee8c6c7ff3b378faba6c68b83b6889cb40f1603ee68c56b4c03d48c595c826c041112dc941878f8c5be828154afd4a16311f", + "Name": "nagydani-2-qube", + "Gas": 200, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51010001e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "Expected": "ad85e8ef13fd1dd46eae44af8b91ad1ccae5b7a1c92944f92a19f21b0b658139e0cabe9c1f679507c2de354bf2c91ebd965d1e633978a830d517d2f6f8dd5fd58065d58559de7e2334a878f8ec6992d9b9e77430d4764e863d77c0f87beede8f2f7f2ab2e7222f85cc9d98b8467f4bb72e87ef2882423ebdb6daf02dddac6db2", + "Name": "nagydani-2-pow0x10001", + "Gas": 1365, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb02d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "affc7507ea6d84751ec6b3f0d7b99dbcc263f33330e450d1b3ff0bc3d0874320bf4edd57debd587306988157958cb3cfd369cc0c9c198706f635c9e0f15d047df5cb44d03e2727f26b083c4ad8485080e1293f171c1ed52aef5993a5815c35108e848c951cf1e334490b4a539a139e57b68f44fee583306f5b85ffa57206b3ee5660458858534e5386b9584af3c7f67806e84c189d695e5eb96e1272d06ec2df5dc5fabc6e94b793718c60c36be0a4d031fc84cd658aa72294b2e16fc240aef70cb9e591248e38bd49c5a554d1afa01f38dab72733092f7555334bbef6c8c430119840492380aa95fa025dcf699f0a39669d812b0c6946b6091e6e235337b6f8", + "Name": "nagydani-3-square", + "Gas": 341, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb03d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "1b280ecd6a6bf906b806d527c2a831e23b238f89da48449003a88ac3ac7150d6a5e9e6b3be4054c7da11dd1e470ec29a606f5115801b5bf53bc1900271d7c3ff3cd5ed790d1c219a9800437a689f2388ba1a11d68f6a8e5b74e9a3b1fac6ee85fc6afbac599f93c391f5dc82a759e3c6c0ab45ce3f5d25d9b0c1bf94cf701ea6466fc9a478dacc5754e593172b5111eeba88557048bceae401337cd4c1182ad9f700852bc8c99933a193f0b94cf1aedbefc48be3bc93ef5cb276d7c2d5462ac8bb0c8fe8923a1db2afe1c6b90d59c534994a6a633f0ead1d638fdc293486bb634ff2c8ec9e7297c04241a61c37e3ae95b11d53343d4ba2b4cc33d2cfa7eb705e", + "Name": "nagydani-3-qube", + "Gas": 341, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb010001d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "Expected": "37843d7c67920b5f177372fa56e2a09117df585f81df8b300fba245b1175f488c99476019857198ed459ed8d9799c377330e49f4180c4bf8e8f66240c64f65ede93d601f957b95b83efdee1e1bfde74169ff77002eaf078c71815a9220c80b2e3b3ff22c2f358111d816ebf83c2999026b6de50bfc711ff68705d2f40b753424aefc9f70f08d908b5a20276ad613b4ab4309a3ea72f0c17ea9df6b3367d44fb3acab11c333909e02e81ea2ed404a712d3ea96bba87461720e2d98723e7acd0520ac1a5212dbedcd8dc0c1abf61d4719e319ff4758a774790b8d463cdfe131d1b2dcfee52d002694e98e720cb6ae7ccea353bc503269ba35f0f63bf8d7b672a76", + "Name": "nagydani-3-pow0x10001", + "Gas": 5461, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8102df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "8a5aea5f50dcc03dc7a7a272b5aeebc040554dbc1ffe36753c4fc75f7ed5f6c2cc0de3a922bf96c78bf0643a73025ad21f45a4a5cadd717612c511ab2bff1190fe5f1ae05ba9f8fe3624de1de2a817da6072ddcdb933b50216811dbe6a9ca79d3a3c6b3a476b079fd0d05f04fb154e2dd3e5cb83b148a006f2bcbf0042efb2ae7b916ea81b27aac25c3bf9a8b6d35440062ad8eae34a83f3ffa2cc7b40346b62174a4422584f72f95316f6b2bee9ff232ba9739301c97c99a9ded26c45d72676eb856ad6ecc81d36a6de36d7f9dafafee11baa43a4b0d5e4ecffa7b9b7dcefd58c397dd373e6db4acd2b2c02717712e6289bed7c813b670c4a0c6735aa7f3b0f1ce556eae9fcc94b501b2c8781ba50a8c6220e8246371c3c7359fe4ef9da786ca7d98256754ca4e496be0a9174bedbecb384bdf470779186d6a833f068d2838a88d90ef3ad48ff963b67c39cc5a3ee123baf7bf3125f64e77af7f30e105d72c4b9b5b237ed251e4c122c6d8c1405e736299c3afd6db16a28c6a9cfa68241e53de4cd388271fe534a6a9b0dbea6171d170db1b89858468885d08fecbd54c8e471c3e25d48e97ba450b96d0d87e00ac732aaa0d3ce4309c1064bd8a4c0808a97e0143e43a24cfa847635125cd41c13e0574487963e9d725c01375db99c31da67b4cf65eff555f0c0ac416c727ff8d438ad7c42030551d68c2e7adda0abb1ca7c10", + "Name": "nagydani-4-square", + "Gas": 1365, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8103df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "5a2664252aba2d6e19d9600da582cdd1f09d7a890ac48e6b8da15ae7c6ff1856fc67a841ac2314d283ffa3ca81a0ecf7c27d89ef91a5a893297928f5da0245c99645676b481b7e20a566ee6a4f2481942bee191deec5544600bb2441fd0fb19e2ee7d801ad8911c6b7750affec367a4b29a22942c0f5f4744a4e77a8b654da2a82571037099e9c6d930794efe5cdca73c7b6c0844e386bdca8ea01b3d7807146bb81365e2cdc6475f8c23e0ff84463126189dc9789f72bbce2e3d2d114d728a272f1345122de23df54c922ec7a16e5c2a8f84da8871482bd258c20a7c09bbcd64c7a96a51029bbfe848736a6ba7bf9d931a9b7de0bcaf3635034d4958b20ae9ab3a95a147b0421dd5f7ebff46c971010ebfc4adbbe0ad94d5498c853e7142c450d8c71de4b2f84edbf8acd2e16d00c8115b150b1c30e553dbb82635e781379fe2a56360420ff7e9f70cc64c00aba7e26ed13c7c19622865ae07248daced36416080f35f8cc157a857ed70ea4f347f17d1bee80fa038abd6e39b1ba06b97264388b21364f7c56e192d4b62d9b161405f32ab1e2594e86243e56fcf2cb30d21adef15b9940f91af681da24328c883d892670c6aa47940867a81830a82b82716895db810df1b834640abefb7db2092dd92912cb9a735175bc447be40a503cf22dfe565b4ed7a3293ca0dfd63a507430b323ee248ec82e843b673c97ad730728cebc", + "Name": "nagydani-4-qube", + "Gas": 1365, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81010001df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "Expected": "bed8b970c4a34849fc6926b08e40e20b21c15ed68d18f228904878d4370b56322d0da5789da0318768a374758e6375bfe4641fca5285ec7171828922160f48f5ca7efbfee4d5148612c38ad683ae4e3c3a053d2b7c098cf2b34f2cb19146eadd53c86b2d7ccf3d83b2c370bfb840913ee3879b1057a6b4e07e110b6bcd5e958bc71a14798c91d518cc70abee264b0d25a4110962a764b364ac0b0dd1ee8abc8426d775ec0f22b7e47b32576afaf1b5a48f64573ed1c5c29f50ab412188d9685307323d990802b81dacc06c6e05a1e901830ba9fcc67688dc29c5e27bde0a6e845ca925f5454b6fb3747edfaa2a5820838fb759eadf57f7cb5cec57fc213ddd8a4298fa079c3c0f472b07fb15aa6a7f0a3780bd296ff6a62e58ef443870b02260bd4fd2bbc98255674b8e1f1f9f8d33c7170b0ebbea4523b695911abbf26e41885344823bd0587115fdd83b721a4e8457a31c9a84b3d3520a07e0e35df7f48e5a9d534d0ec7feef1ff74de6a11e7f93eab95175b6ce22c68d78a642ad642837897ec11349205d8593ac19300207572c38d29ca5dfa03bc14cdbc32153c80e5cc3e739403d34c75915e49beb43094cc6dcafb3665b305ddec9286934ae66ec6b777ca528728c851318eb0f207b39f1caaf96db6eeead6b55ed08f451939314577d42bcc9f97c0b52d0234f88fd07e4c1d7780fdebc025cfffcb572cb27a8c33963", + "Name": "nagydani-4-pow0x10001", + "Gas": 21845, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf02e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "d61fe4e3f32ac260915b5b03b78a86d11bfc41d973fce5b0cc59035cf8289a8a2e3878ea15fa46565b0d806e2f85b53873ea20ed653869b688adf83f3ef444535bf91598ff7e80f334fb782539b92f39f55310cc4b35349ab7b278346eda9bc37c0d8acd3557fae38197f412f8d9e57ce6a76b7205c23564cab06e5615be7c6f05c3d05ec690cba91da5e89d55b152ff8dd2157dc5458190025cf94b1ad98f7cbe64e9482faba95e6b33844afc640892872b44a9932096508f4a782a4805323808f23e54b6ff9b841dbfa87db3505ae4f687972c18ea0f0d0af89d36c1c2a5b14560c153c3fee406f5cf15cfd1c0bb45d767426d465f2f14c158495069d0c5955a00150707862ecaae30624ebacdd8ac33e4e6aab3ff90b6ba445a84689386b9e945d01823a65874444316e83767290fcff630d2477f49d5d8ffdd200e08ee1274270f86ed14c687895f6caf5ce528bd970c20d2408a9ba66216324c6a011ac4999098362dbd98a038129a2d40c8da6ab88318aa3046cb660327cc44236d9e5d2163bd0959062195c51ed93d0088b6f92051fc99050ece2538749165976233697ab4b610385366e5ce0b02ad6b61c168ecfbedcdf74278a38de340fd7a5fead8e588e294795f9b011e2e60377a89e25c90e145397cdeabc60fd32444a6b7642a611a83c464d8b8976666351b4865c37b02e6dc21dbcdf5f930341707b618cc0f03c3122646b3385c9df9f2ec730eec9d49e7dfc9153b6e6289da8c4f0ebea9ccc1b751948e3bb7171c9e4d57423b0eeeb79095c030cb52677b3f7e0b45c30f645391f3f9c957afa549c4e0b2465b03c67993cd200b1af01035962edbc4c9e89b31c82ac121987d6529dafdeef67a132dc04b6dc68e77f22862040b75e2ceb9ff16da0fca534e6db7bd12fa7b7f51b6c08c1e23dfcdb7acbd2da0b51c87ffbced065a612e9b1c8bba9b7e2d8d7a2f04fcc4aaf355b60d764879a76b5e16762d5f2f55d585d0c8e82df6940960cddfb72c91dfa71f6b4e1c6ca25dfc39a878e998a663c04fe29d5e83b9586d047b4d7ff70a9f0d44f127e7d741685ca75f11629128d916a0ffef4be586a30c4b70389cc746e84ebf177c01ee8a4511cfbb9d1ecf7f7b33c7dd8177896e10bbc82f838dcd6db7ac67de62bf46b6a640fb580c5d1d2708f3862e3d2b645d0d18e49ef088053e3a220adc0e033c2afcfe61c90e32151152eb3caaf746c5e377d541cafc6cbb0cc0fa48b5caf1728f2e1957f5addfc234f1a9d89e40d49356c9172d0561a695fce6dab1d412321bbf407f63766ffd7b6b3d79bcfa07991c5a9709849c1008689e3b47c50d613980bec239fb64185249d055b30375ccb4354d71fe4d05648fbf6c80634dfc3575f2f24abb714c1e4c95e8896763bf4316e954c7ad19e5780ab7a040ca6fb9271f90a8b22ae738daf6cb", + "Name": "nagydani-5-square", + "Gas": 5461, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf03e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "5f9c70ec884926a89461056ad20ac4c30155e817f807e4d3f5bb743d789c83386762435c3627773fa77da5144451f2a8aad8adba88e0b669f5377c5e9bad70e45c86fe952b613f015a9953b8a5de5eaee4566acf98d41e327d93a35bd5cef4607d025e58951167957df4ff9b1627649d3943805472e5e293d3efb687cfd1e503faafeb2840a3e3b3f85d016051a58e1c9498aab72e63b748d834b31eb05d85dcde65e27834e266b85c75cc4ec0135135e0601cb93eeeb6e0010c8ceb65c4c319623c5e573a2c8c9fbbf7df68a930beb412d3f4dfd146175484f45d7afaa0d2e60684af9b34730f7c8438465ad3e1d0c3237336722f2aa51095bd5759f4b8ab4dda111b684aa3dac62a761722e7ae43495b7709933512c81c4e3c9133a51f7ce9f2b51fcec064f65779666960b4e45df3900f54311f5613e8012dd1b8efd359eda31a778264c72aa8bb419d862734d769076bce2810011989a45374e5c5d8729fec21427f0bf397eacbb4220f603cf463a4b0c94efd858ffd9768cd60d6ce68d755e0fbad007ce5c2223d70c7018345a102e4ab3c60a13a9e7794303156d4c2063e919f2153c13961fb324c80b240742f47773a7a8e25b3e3fb19b00ce839346c6eb3c732fbc6b888df0b1fe0a3d07b053a2e9402c267b2d62f794d8a2840526e3ade15ce2264496ccd7519571dfde47f7a4bb16292241c20b2be59f3f8fb4f6383f232d838c5a22d8c95b6834d9d2ca493f5a505ebe8899503b0e8f9b19e6e2dd81c1628b80016d02097e0134de51054c4e7674824d4d758760fc52377d2cad145e259aa2ffaf54139e1a66b1e0c1c191e32ac59474c6b526f5b3ba07d3e5ec286eddf531fcd5292869be58c9f22ef91026159f7cf9d05ef66b4299f4da48cc1635bf2243051d342d378a22c83390553e873713c0454ce5f3234397111ac3fe3207b86f0ed9fc025c81903e1748103692074f83824fda6341be4f95ff00b0a9a208c267e12fa01825054cc0513629bf3dbb56dc5b90d4316f87654a8be18227978ea0a8a522760cad620d0d14fd38920fb7321314062914275a5f99f677145a6979b156bd82ecd36f23f8e1273cc2759ecc0b2c69d94dad5211d1bed939dd87ed9e07b91d49713a6e16ade0a98aea789f04994e318e4ff2c8a188cd8d43aeb52c6daa3bc29b4af50ea82a247c5cd67b573b34cbadcc0a376d3bbd530d50367b42705d870f2e27a8197ef46070528bfe408360faa2ebb8bf76e9f388572842bcb119f4d84ee34ae31f5cc594f23705a49197b181fb78ed1ec99499c690f843a4d0cf2e226d118e9372271054fbabdcc5c92ae9fefaef0589cd0e722eaf30c1703ec4289c7fd81beaa8a455ccee5298e31e2080c10c366a6fcf56f7d13582ad0bcad037c612b710fc595b70fbefaaca23623b60c6c39b11beb8e5843b6b3dac60f", + "Name": "nagydani-5-qube", + "Gas": 5461, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf010001e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "Expected": "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f86780428982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c144a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b601fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c680844dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500", + "Name": "nagydani-5-pow0x10001", + "Gas": 87381, + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/crypto/blake2b/blake2b.go b/crypto/blake2b/blake2b.go index 5da50cab..7ecaab81 100644 --- a/crypto/blake2b/blake2b.go +++ b/crypto/blake2b/blake2b.go @@ -302,6 +302,7 @@ func appendUint64(b []byte, x uint64) []byte { return append(b, a[:]...) } +//nolint:unused,deadcode func appendUint32(b []byte, x uint32) []byte { var a [4]byte binary.BigEndian.PutUint32(a[:], x) @@ -313,6 +314,7 @@ func consumeUint64(b []byte) ([]byte, uint64) { return b[8:], x } +//nolint:unused,deadcode 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 index 0d52b186..3a85d0e7 100644 --- a/crypto/blake2b/blake2bAVX2_amd64.go +++ b/crypto/blake2b/blake2bAVX2_amd64.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.7 && amd64 && !gccgo && !appengine // +build go1.7,amd64,!gccgo,!appengine package blake2b diff --git a/crypto/blake2b/blake2b_amd64.go b/crypto/blake2b/blake2b_amd64.go index 4dbe90da..a318b2b6 100644 --- a/crypto/blake2b/blake2b_amd64.go +++ b/crypto/blake2b/blake2b_amd64.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.7 && amd64 && !gccgo && !appengine // +build !go1.7,amd64,!gccgo,!appengine package blake2b diff --git a/crypto/blake2b/blake2b_f_fuzz.go b/crypto/blake2b/blake2b_f_fuzz.go index ab733428..b2f40570 100644 --- a/crypto/blake2b/blake2b_f_fuzz.go +++ b/crypto/blake2b/blake2b_f_fuzz.go @@ -1,3 +1,4 @@ +//go:build gofuzz // +build gofuzz package blake2b diff --git a/crypto/blake2b/blake2b_generic.go b/crypto/blake2b/blake2b_generic.go index 35c40cc9..61e678fd 100644 --- a/crypto/blake2b/blake2b_generic.go +++ b/crypto/blake2b/blake2b_generic.go @@ -25,6 +25,7 @@ var precomputed = [10][16]byte{ {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, } +// nolint:unused,deadcode func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { var m [16]uint64 c0, c1 := c[0], c[1] diff --git a/crypto/blake2b/blake2b_ref.go b/crypto/blake2b/blake2b_ref.go index 9d0ade47..095c71a6 100644 --- a/crypto/blake2b/blake2b_ref.go +++ b/crypto/blake2b/blake2b_ref.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !amd64 || appengine || gccgo // +build !amd64 appengine gccgo package blake2b diff --git a/crypto/blake2b/blake2b_test.go b/crypto/blake2b/blake2b_test.go index 9e7297da..9d24444a 100644 --- a/crypto/blake2b/blake2b_test.go +++ b/crypto/blake2b/blake2b_test.go @@ -14,14 +14,6 @@ import ( "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 diff --git a/crypto/blake2b/register.go b/crypto/blake2b/register.go index efd689af..9d863396 100644 --- a/crypto/blake2b/register.go +++ b/crypto/blake2b/register.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.9 // +build go1.9 package blake2b diff --git a/crypto/bls12381/arithmetic_decl.go b/crypto/bls12381/arithmetic_decl.go new file mode 100644 index 00000000..f6d232d6 --- /dev/null +++ b/crypto/bls12381/arithmetic_decl.go @@ -0,0 +1,84 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build (amd64 && blsasm) || (amd64 && blsadx) +// +build amd64,blsasm amd64,blsadx + +package bls12381 + +import ( + "golang.org/x/sys/cpu" +) + +func init() { + if !enableADX || !cpu.X86.HasADX || !cpu.X86.HasBMI2 { + mul = mulNoADX + } +} + +// Use ADX backend for default +var mul func(c, a, b *fe) = mulADX + +func square(c, a *fe) { + mul(c, a, a) +} + +func neg(c, a *fe) { + if a.isZero() { + c.set(a) + } else { + _neg(c, a) + } +} + +//go:noescape +func add(c, a, b *fe) + +//go:noescape +func addAssign(a, b *fe) + +//go:noescape +func ladd(c, a, b *fe) + +//go:noescape +func laddAssign(a, b *fe) + +//go:noescape +func double(c, a *fe) + +//go:noescape +func doubleAssign(a *fe) + +//go:noescape +func ldouble(c, a *fe) + +//go:noescape +func sub(c, a, b *fe) + +//go:noescape +func subAssign(a, b *fe) + +//go:noescape +func lsubAssign(a, b *fe) + +//go:noescape +func _neg(c, a *fe) + +//go:noescape +func mulNoADX(c, a, b *fe) + +//go:noescape +func mulADX(c, a, b *fe) diff --git a/crypto/bls12381/arithmetic_fallback.go b/crypto/bls12381/arithmetic_fallback.go new file mode 100644 index 00000000..c09ae0d9 --- /dev/null +++ b/crypto/bls12381/arithmetic_fallback.go @@ -0,0 +1,567 @@ +// Native go field arithmetic code is generated with 'goff' +// https://github.com/ConsenSys/goff +// Many function signature of field operations are renamed. + +// Copyright 2020 ConsenSys AG +// +// 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. + +// field modulus q = +// +// 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 +// Code generated by goff DO NOT EDIT +// goff version: v0.1.0 - build: 790f1f56eac432441e043abff8819eacddd1d668 +// fe are assumed to be in Montgomery form in all methods + +// /!\ WARNING /!\ +// this code has not been audited and is provided as-is. In particular, +// there is no security guarantees such as constant time implementation +// or side-channel attack resistance +// /!\ WARNING /!\ + +// Package bls (generated by goff) contains field arithmetics operations + +//go:build !amd64 || (!blsasm && !blsadx) +// +build !amd64 !blsasm,!blsadx + +package bls12381 + +import ( + "math/bits" +) + +func add(z, x, y *fe) { + var carry uint64 + + z[0], carry = bits.Add64(x[0], y[0], 0) + z[1], carry = bits.Add64(x[1], y[1], carry) + z[2], carry = bits.Add64(x[2], y[2], carry) + z[3], carry = bits.Add64(x[3], y[3], carry) + z[4], carry = bits.Add64(x[4], y[4], carry) + z[5], _ = bits.Add64(x[5], y[5], carry) + + // if z > q --> z -= q + // note: this is NOT constant time + if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { + var b uint64 + z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) + z[1], b = bits.Sub64(z[1], 2210141511517208575, b) + z[2], b = bits.Sub64(z[2], 7435674573564081700, b) + z[3], b = bits.Sub64(z[3], 7239337960414712511, b) + z[4], b = bits.Sub64(z[4], 5412103778470702295, b) + z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) + } +} + +func addAssign(x, y *fe) { + var carry uint64 + + x[0], carry = bits.Add64(x[0], y[0], 0) + x[1], carry = bits.Add64(x[1], y[1], carry) + x[2], carry = bits.Add64(x[2], y[2], carry) + x[3], carry = bits.Add64(x[3], y[3], carry) + x[4], carry = bits.Add64(x[4], y[4], carry) + x[5], _ = bits.Add64(x[5], y[5], carry) + + // if z > q --> z -= q + // note: this is NOT constant time + if !(x[5] < 1873798617647539866 || (x[5] == 1873798617647539866 && (x[4] < 5412103778470702295 || (x[4] == 5412103778470702295 && (x[3] < 7239337960414712511 || (x[3] == 7239337960414712511 && (x[2] < 7435674573564081700 || (x[2] == 7435674573564081700 && (x[1] < 2210141511517208575 || (x[1] == 2210141511517208575 && (x[0] < 13402431016077863595))))))))))) { + var b uint64 + x[0], b = bits.Sub64(x[0], 13402431016077863595, 0) + x[1], b = bits.Sub64(x[1], 2210141511517208575, b) + x[2], b = bits.Sub64(x[2], 7435674573564081700, b) + x[3], b = bits.Sub64(x[3], 7239337960414712511, b) + x[4], b = bits.Sub64(x[4], 5412103778470702295, b) + x[5], _ = bits.Sub64(x[5], 1873798617647539866, b) + } +} + +func ladd(z, x, y *fe) { + var carry uint64 + z[0], carry = bits.Add64(x[0], y[0], 0) + z[1], carry = bits.Add64(x[1], y[1], carry) + z[2], carry = bits.Add64(x[2], y[2], carry) + z[3], carry = bits.Add64(x[3], y[3], carry) + z[4], carry = bits.Add64(x[4], y[4], carry) + z[5], _ = bits.Add64(x[5], y[5], carry) +} + +func laddAssign(x, y *fe) { + var carry uint64 + x[0], carry = bits.Add64(x[0], y[0], 0) + x[1], carry = bits.Add64(x[1], y[1], carry) + x[2], carry = bits.Add64(x[2], y[2], carry) + x[3], carry = bits.Add64(x[3], y[3], carry) + x[4], carry = bits.Add64(x[4], y[4], carry) + x[5], _ = bits.Add64(x[5], y[5], carry) +} + +func double(z, x *fe) { + var carry uint64 + + z[0], carry = bits.Add64(x[0], x[0], 0) + z[1], carry = bits.Add64(x[1], x[1], carry) + z[2], carry = bits.Add64(x[2], x[2], carry) + z[3], carry = bits.Add64(x[3], x[3], carry) + z[4], carry = bits.Add64(x[4], x[4], carry) + z[5], _ = bits.Add64(x[5], x[5], carry) + + // if z > q --> z -= q + // note: this is NOT constant time + if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { + var b uint64 + z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) + z[1], b = bits.Sub64(z[1], 2210141511517208575, b) + z[2], b = bits.Sub64(z[2], 7435674573564081700, b) + z[3], b = bits.Sub64(z[3], 7239337960414712511, b) + z[4], b = bits.Sub64(z[4], 5412103778470702295, b) + z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) + } +} + +func doubleAssign(z *fe) { + var carry uint64 + + z[0], carry = bits.Add64(z[0], z[0], 0) + z[1], carry = bits.Add64(z[1], z[1], carry) + z[2], carry = bits.Add64(z[2], z[2], carry) + z[3], carry = bits.Add64(z[3], z[3], carry) + z[4], carry = bits.Add64(z[4], z[4], carry) + z[5], _ = bits.Add64(z[5], z[5], carry) + + // if z > q --> z -= q + // note: this is NOT constant time + if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { + var b uint64 + z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) + z[1], b = bits.Sub64(z[1], 2210141511517208575, b) + z[2], b = bits.Sub64(z[2], 7435674573564081700, b) + z[3], b = bits.Sub64(z[3], 7239337960414712511, b) + z[4], b = bits.Sub64(z[4], 5412103778470702295, b) + z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) + } +} + +func ldouble(z, x *fe) { + var carry uint64 + + z[0], carry = bits.Add64(x[0], x[0], 0) + z[1], carry = bits.Add64(x[1], x[1], carry) + z[2], carry = bits.Add64(x[2], x[2], carry) + z[3], carry = bits.Add64(x[3], x[3], carry) + z[4], carry = bits.Add64(x[4], x[4], carry) + z[5], _ = bits.Add64(x[5], x[5], carry) +} + +func sub(z, x, y *fe) { + var b uint64 + z[0], b = bits.Sub64(x[0], y[0], 0) + z[1], b = bits.Sub64(x[1], y[1], b) + z[2], b = bits.Sub64(x[2], y[2], b) + z[3], b = bits.Sub64(x[3], y[3], b) + z[4], b = bits.Sub64(x[4], y[4], b) + z[5], b = bits.Sub64(x[5], y[5], b) + if b != 0 { + var c uint64 + z[0], c = bits.Add64(z[0], 13402431016077863595, 0) + z[1], c = bits.Add64(z[1], 2210141511517208575, c) + z[2], c = bits.Add64(z[2], 7435674573564081700, c) + z[3], c = bits.Add64(z[3], 7239337960414712511, c) + z[4], c = bits.Add64(z[4], 5412103778470702295, c) + z[5], _ = bits.Add64(z[5], 1873798617647539866, c) + } +} + +func subAssign(z, x *fe) { + var b uint64 + z[0], b = bits.Sub64(z[0], x[0], 0) + z[1], b = bits.Sub64(z[1], x[1], b) + z[2], b = bits.Sub64(z[2], x[2], b) + z[3], b = bits.Sub64(z[3], x[3], b) + z[4], b = bits.Sub64(z[4], x[4], b) + z[5], b = bits.Sub64(z[5], x[5], b) + if b != 0 { + var c uint64 + z[0], c = bits.Add64(z[0], 13402431016077863595, 0) + z[1], c = bits.Add64(z[1], 2210141511517208575, c) + z[2], c = bits.Add64(z[2], 7435674573564081700, c) + z[3], c = bits.Add64(z[3], 7239337960414712511, c) + z[4], c = bits.Add64(z[4], 5412103778470702295, c) + z[5], _ = bits.Add64(z[5], 1873798617647539866, c) + } +} + +func lsubAssign(z, x *fe) { + var b uint64 + z[0], b = bits.Sub64(z[0], x[0], 0) + z[1], b = bits.Sub64(z[1], x[1], b) + z[2], b = bits.Sub64(z[2], x[2], b) + z[3], b = bits.Sub64(z[3], x[3], b) + z[4], b = bits.Sub64(z[4], x[4], b) + z[5], _ = bits.Sub64(z[5], x[5], b) +} + +func neg(z *fe, x *fe) { + if x.isZero() { + z.zero() + return + } + var borrow uint64 + z[0], borrow = bits.Sub64(13402431016077863595, x[0], 0) + z[1], borrow = bits.Sub64(2210141511517208575, x[1], borrow) + z[2], borrow = bits.Sub64(7435674573564081700, x[2], borrow) + z[3], borrow = bits.Sub64(7239337960414712511, x[3], borrow) + z[4], borrow = bits.Sub64(5412103778470702295, x[4], borrow) + z[5], _ = bits.Sub64(1873798617647539866, x[5], borrow) +} + +func mul(z, x, y *fe) { + var t [6]uint64 + var c [3]uint64 + { + // round 0 + v := x[0] + c[1], c[0] = bits.Mul64(v, y[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd1(v, y[1], c[1]) + c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd1(v, y[2], c[1]) + c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd1(v, y[3], c[1]) + c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd1(v, y[4], c[1]) + c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd1(v, y[5], c[1]) + t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + { + // round 1 + v := x[1] + c[1], c[0] = madd1(v, y[0], t[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd2(v, y[1], c[1], t[1]) + c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd2(v, y[2], c[1], t[2]) + c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd2(v, y[3], c[1], t[3]) + c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd2(v, y[4], c[1], t[4]) + c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd2(v, y[5], c[1], t[5]) + t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + { + // round 2 + v := x[2] + c[1], c[0] = madd1(v, y[0], t[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd2(v, y[1], c[1], t[1]) + c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd2(v, y[2], c[1], t[2]) + c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd2(v, y[3], c[1], t[3]) + c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd2(v, y[4], c[1], t[4]) + c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd2(v, y[5], c[1], t[5]) + t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + { + // round 3 + v := x[3] + c[1], c[0] = madd1(v, y[0], t[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd2(v, y[1], c[1], t[1]) + c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd2(v, y[2], c[1], t[2]) + c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd2(v, y[3], c[1], t[3]) + c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd2(v, y[4], c[1], t[4]) + c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd2(v, y[5], c[1], t[5]) + t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + { + // round 4 + v := x[4] + c[1], c[0] = madd1(v, y[0], t[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd2(v, y[1], c[1], t[1]) + c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd2(v, y[2], c[1], t[2]) + c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd2(v, y[3], c[1], t[3]) + c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd2(v, y[4], c[1], t[4]) + c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd2(v, y[5], c[1], t[5]) + t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + { + // round 5 + v := x[5] + c[1], c[0] = madd1(v, y[0], t[0]) + m := c[0] * 9940570264628428797 + c[2] = madd0(m, 13402431016077863595, c[0]) + c[1], c[0] = madd2(v, y[1], c[1], t[1]) + c[2], z[0] = madd2(m, 2210141511517208575, c[2], c[0]) + c[1], c[0] = madd2(v, y[2], c[1], t[2]) + c[2], z[1] = madd2(m, 7435674573564081700, c[2], c[0]) + c[1], c[0] = madd2(v, y[3], c[1], t[3]) + c[2], z[2] = madd2(m, 7239337960414712511, c[2], c[0]) + c[1], c[0] = madd2(v, y[4], c[1], t[4]) + c[2], z[3] = madd2(m, 5412103778470702295, c[2], c[0]) + c[1], c[0] = madd2(v, y[5], c[1], t[5]) + z[5], z[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) + } + + // if z > q --> z -= q + // note: this is NOT constant time + if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { + var b uint64 + z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) + z[1], b = bits.Sub64(z[1], 2210141511517208575, b) + z[2], b = bits.Sub64(z[2], 7435674573564081700, b) + z[3], b = bits.Sub64(z[3], 7239337960414712511, b) + z[4], b = bits.Sub64(z[4], 5412103778470702295, b) + z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) + } +} + +func square(z, x *fe) { + + var p [6]uint64 + + var u, v uint64 + { + // round 0 + u, p[0] = bits.Mul64(x[0], x[0]) + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + var t uint64 + t, u, v = madd1sb(x[0], x[1], u) + C, p[0] = madd2(m, 2210141511517208575, v, C) + t, u, v = madd1s(x[0], x[2], t, u) + C, p[1] = madd2(m, 7435674573564081700, v, C) + t, u, v = madd1s(x[0], x[3], t, u) + C, p[2] = madd2(m, 7239337960414712511, v, C) + t, u, v = madd1s(x[0], x[4], t, u) + C, p[3] = madd2(m, 5412103778470702295, v, C) + _, u, v = madd1s(x[0], x[5], t, u) + p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) + } + { + // round 1 + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + u, v = madd1(x[1], x[1], p[1]) + C, p[0] = madd2(m, 2210141511517208575, v, C) + var t uint64 + t, u, v = madd2sb(x[1], x[2], p[2], u) + C, p[1] = madd2(m, 7435674573564081700, v, C) + t, u, v = madd2s(x[1], x[3], p[3], t, u) + C, p[2] = madd2(m, 7239337960414712511, v, C) + t, u, v = madd2s(x[1], x[4], p[4], t, u) + C, p[3] = madd2(m, 5412103778470702295, v, C) + _, u, v = madd2s(x[1], x[5], p[5], t, u) + p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) + } + { + // round 2 + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + C, p[0] = madd2(m, 2210141511517208575, p[1], C) + u, v = madd1(x[2], x[2], p[2]) + C, p[1] = madd2(m, 7435674573564081700, v, C) + var t uint64 + t, u, v = madd2sb(x[2], x[3], p[3], u) + C, p[2] = madd2(m, 7239337960414712511, v, C) + t, u, v = madd2s(x[2], x[4], p[4], t, u) + C, p[3] = madd2(m, 5412103778470702295, v, C) + _, u, v = madd2s(x[2], x[5], p[5], t, u) + p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) + } + { + // round 3 + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + C, p[0] = madd2(m, 2210141511517208575, p[1], C) + C, p[1] = madd2(m, 7435674573564081700, p[2], C) + u, v = madd1(x[3], x[3], p[3]) + C, p[2] = madd2(m, 7239337960414712511, v, C) + var t uint64 + t, u, v = madd2sb(x[3], x[4], p[4], u) + C, p[3] = madd2(m, 5412103778470702295, v, C) + _, u, v = madd2s(x[3], x[5], p[5], t, u) + p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) + } + { + // round 4 + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + C, p[0] = madd2(m, 2210141511517208575, p[1], C) + C, p[1] = madd2(m, 7435674573564081700, p[2], C) + C, p[2] = madd2(m, 7239337960414712511, p[3], C) + u, v = madd1(x[4], x[4], p[4]) + C, p[3] = madd2(m, 5412103778470702295, v, C) + _, u, v = madd2sb(x[4], x[5], p[5], u) + p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) + } + { + // round 5 + m := p[0] * 9940570264628428797 + C := madd0(m, 13402431016077863595, p[0]) + C, z[0] = madd2(m, 2210141511517208575, p[1], C) + C, z[1] = madd2(m, 7435674573564081700, p[2], C) + C, z[2] = madd2(m, 7239337960414712511, p[3], C) + C, z[3] = madd2(m, 5412103778470702295, p[4], C) + u, v = madd1(x[5], x[5], p[5]) + z[5], z[4] = madd3(m, 1873798617647539866, v, C, u) + } + + // if z > q --> z -= q + // note: this is NOT constant time + if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { + var b uint64 + z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) + z[1], b = bits.Sub64(z[1], 2210141511517208575, b) + z[2], b = bits.Sub64(z[2], 7435674573564081700, b) + z[3], b = bits.Sub64(z[3], 7239337960414712511, b) + z[4], b = bits.Sub64(z[4], 5412103778470702295, b) + z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) + } +} + +// arith.go +// Copyright 2020 ConsenSys AG +// +// 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. + +// Code generated by goff DO NOT EDIT + +func madd(a, b, t, u, v uint64) (uint64, uint64, uint64) { + var carry uint64 + hi, lo := bits.Mul64(a, b) + v, carry = bits.Add64(lo, v, 0) + u, carry = bits.Add64(hi, u, carry) + t, _ = bits.Add64(t, 0, carry) + return t, u, v +} + +// madd0 hi = a*b + c (discards lo bits) +func madd0(a, b, c uint64) (hi uint64) { + var carry, lo uint64 + hi, lo = bits.Mul64(a, b) + _, carry = bits.Add64(lo, c, 0) + hi, _ = bits.Add64(hi, 0, carry) + return +} + +// madd1 hi, lo = a*b + c +func madd1(a, b, c uint64) (hi uint64, lo uint64) { + var carry uint64 + hi, lo = bits.Mul64(a, b) + lo, carry = bits.Add64(lo, c, 0) + hi, _ = bits.Add64(hi, 0, carry) + return +} + +// madd2 hi, lo = a*b + c + d +func madd2(a, b, c, d uint64) (hi uint64, lo uint64) { + var carry uint64 + hi, lo = bits.Mul64(a, b) + c, carry = bits.Add64(c, d, 0) + hi, _ = bits.Add64(hi, 0, carry) + lo, carry = bits.Add64(lo, c, 0) + hi, _ = bits.Add64(hi, 0, carry) + return +} + +// madd2s superhi, hi, lo = 2*a*b + c + d + e +func madd2s(a, b, c, d, e uint64) (superhi, hi, lo uint64) { + var carry, sum uint64 + + hi, lo = bits.Mul64(a, b) + lo, carry = bits.Add64(lo, lo, 0) + hi, superhi = bits.Add64(hi, hi, carry) + + sum, carry = bits.Add64(c, e, 0) + hi, _ = bits.Add64(hi, 0, carry) + lo, carry = bits.Add64(lo, sum, 0) + hi, _ = bits.Add64(hi, 0, carry) + hi, _ = bits.Add64(hi, 0, d) + return +} + +func madd1s(a, b, d, e uint64) (superhi, hi, lo uint64) { + var carry uint64 + + hi, lo = bits.Mul64(a, b) + lo, carry = bits.Add64(lo, lo, 0) + hi, superhi = bits.Add64(hi, hi, carry) + lo, carry = bits.Add64(lo, e, 0) + hi, _ = bits.Add64(hi, 0, carry) + hi, _ = bits.Add64(hi, 0, d) + return +} + +func madd2sb(a, b, c, e uint64) (superhi, hi, lo uint64) { + var carry, sum uint64 + + hi, lo = bits.Mul64(a, b) + lo, carry = bits.Add64(lo, lo, 0) + hi, superhi = bits.Add64(hi, hi, carry) + + sum, carry = bits.Add64(c, e, 0) + hi, _ = bits.Add64(hi, 0, carry) + lo, carry = bits.Add64(lo, sum, 0) + hi, _ = bits.Add64(hi, 0, carry) + return +} + +func madd1sb(a, b, e uint64) (superhi, hi, lo uint64) { + var carry uint64 + + hi, lo = bits.Mul64(a, b) + lo, carry = bits.Add64(lo, lo, 0) + hi, superhi = bits.Add64(hi, hi, carry) + lo, carry = bits.Add64(lo, e, 0) + hi, _ = bits.Add64(hi, 0, carry) + return +} + +func madd3(a, b, c, d, e uint64) (hi uint64, lo uint64) { + var carry uint64 + hi, lo = bits.Mul64(a, b) + c, carry = bits.Add64(c, d, 0) + hi, _ = bits.Add64(hi, 0, carry) + lo, carry = bits.Add64(lo, c, 0) + hi, _ = bits.Add64(hi, e, carry) + return +} diff --git a/crypto/bls12381/arithmetic_x86.s b/crypto/bls12381/arithmetic_x86.s new file mode 100644 index 00000000..2cebbc46 --- /dev/null +++ b/crypto/bls12381/arithmetic_x86.s @@ -0,0 +1,2150 @@ +// +build amd64,blsasm amd64,blsadx + +#include "textflag.h" + +// addition w/ modular reduction +// a = (a + b) % p +TEXT ·addAssign(SB), NOSPLIT, $0-16 + // | + MOVQ a+0(FP), DI + MOVQ b+8(FP), SI + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + + // | + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ 32(SI), R12 + ADCQ 40(SI), R13 + + // | + MOVQ R8, R14 + MOVQ R9, R15 + MOVQ R10, CX + MOVQ R11, DX + MOVQ R12, SI + MOVQ R13, BX + MOVQ $0xb9feffffffffaaab, AX + SUBQ AX, R14 + MOVQ $0x1eabfffeb153ffff, AX + SBBQ AX, R15 + MOVQ $0x6730d2a0f6b0f624, AX + SBBQ AX, CX + MOVQ $0x64774b84f38512bf, AX + SBBQ AX, DX + MOVQ $0x4b1ba7b6434bacd7, AX + SBBQ AX, SI + MOVQ $0x1a0111ea397fe69a, AX + SBBQ AX, BX + CMOVQCC R14, R8 + CMOVQCC R15, R9 + CMOVQCC CX, R10 + CMOVQCC DX, R11 + CMOVQCC SI, R12 + CMOVQCC BX, R13 + + // | + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET + +/* | end */ + + +// addition w/ modular reduction +// c = (a + b) % p +TEXT ·add(SB), NOSPLIT, $0-24 + // | + MOVQ a+8(FP), DI + MOVQ b+16(FP), SI + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + + // | + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ 32(SI), R12 + ADCQ 40(SI), R13 + + // | + MOVQ R8, R14 + MOVQ R9, R15 + MOVQ R10, CX + MOVQ R11, DX + MOVQ R12, SI + MOVQ R13, BX + MOVQ $0xb9feffffffffaaab, DI + SUBQ DI, R14 + MOVQ $0x1eabfffeb153ffff, DI + SBBQ DI, R15 + MOVQ $0x6730d2a0f6b0f624, DI + SBBQ DI, CX + MOVQ $0x64774b84f38512bf, DI + SBBQ DI, DX + MOVQ $0x4b1ba7b6434bacd7, DI + SBBQ DI, SI + MOVQ $0x1a0111ea397fe69a, DI + SBBQ DI, BX + CMOVQCC R14, R8 + CMOVQCC R15, R9 + CMOVQCC CX, R10 + CMOVQCC DX, R11 + CMOVQCC SI, R12 + CMOVQCC BX, R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// addition w/o reduction check +// c = (a + b) +TEXT ·ladd(SB), NOSPLIT, $0-24 + // | + MOVQ a+8(FP), DI + MOVQ b+16(FP), SI + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + + // | + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ 32(SI), R12 + ADCQ 40(SI), R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// addition w/o reduction check +// a = a + b +TEXT ·laddAssign(SB), NOSPLIT, $0-16 + // | + MOVQ a+0(FP), DI + MOVQ b+8(FP), SI + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + + // | + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ 16(SI), R10 + ADCQ 24(SI), R11 + ADCQ 32(SI), R12 + ADCQ 40(SI), R13 + + // | + MOVQ a+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// subtraction w/ modular reduction +// c = (a - b) % p +TEXT ·sub(SB), NOSPLIT, $0-24 + // | + MOVQ a+8(FP), DI + MOVQ b+16(FP), SI + XORQ AX, AX + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + SUBQ (SI), R8 + SBBQ 8(SI), R9 + SBBQ 16(SI), R10 + SBBQ 24(SI), R11 + SBBQ 32(SI), R12 + SBBQ 40(SI), R13 + + // | + MOVQ $0xb9feffffffffaaab, R14 + MOVQ $0x1eabfffeb153ffff, R15 + MOVQ $0x6730d2a0f6b0f624, CX + MOVQ $0x64774b84f38512bf, DX + MOVQ $0x4b1ba7b6434bacd7, SI + MOVQ $0x1a0111ea397fe69a, BX + CMOVQCC AX, R14 + CMOVQCC AX, R15 + CMOVQCC AX, CX + CMOVQCC AX, DX + CMOVQCC AX, SI + CMOVQCC AX, BX + ADDQ R14, R8 + ADCQ R15, R9 + ADCQ CX, R10 + ADCQ DX, R11 + ADCQ SI, R12 + ADCQ BX, R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// subtraction w/ modular reduction +// a = (a - b) % p +TEXT ·subAssign(SB), NOSPLIT, $0-16 + // | + MOVQ a+0(FP), DI + MOVQ b+8(FP), SI + XORQ AX, AX + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + SUBQ (SI), R8 + SBBQ 8(SI), R9 + SBBQ 16(SI), R10 + SBBQ 24(SI), R11 + SBBQ 32(SI), R12 + SBBQ 40(SI), R13 + + // | + MOVQ $0xb9feffffffffaaab, R14 + MOVQ $0x1eabfffeb153ffff, R15 + MOVQ $0x6730d2a0f6b0f624, CX + MOVQ $0x64774b84f38512bf, DX + MOVQ $0x4b1ba7b6434bacd7, SI + MOVQ $0x1a0111ea397fe69a, BX + CMOVQCC AX, R14 + CMOVQCC AX, R15 + CMOVQCC AX, CX + CMOVQCC AX, DX + CMOVQCC AX, SI + CMOVQCC AX, BX + ADDQ R14, R8 + ADCQ R15, R9 + ADCQ CX, R10 + ADCQ DX, R11 + ADCQ SI, R12 + ADCQ BX, R13 + + // | + MOVQ a+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// subtraction w/o reduction check +// a = (a - b) +TEXT ·lsubAssign(SB), NOSPLIT, $0-16 + // | + MOVQ a+0(FP), DI + MOVQ b+8(FP), SI + + // | + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + SUBQ (SI), R8 + SBBQ 8(SI), R9 + SBBQ 16(SI), R10 + SBBQ 24(SI), R11 + SBBQ 32(SI), R12 + SBBQ 40(SI), R13 + + // | + MOVQ a+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + +// doubling w/ reduction +// c = (2 * a) % p +TEXT ·double(SB), NOSPLIT, $0-16 + // | + MOVQ a+8(FP), DI + + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + ADDQ R8, R8 + ADCQ R9, R9 + ADCQ R10, R10 + ADCQ R11, R11 + ADCQ R12, R12 + ADCQ R13, R13 + + // | + MOVQ R8, R14 + MOVQ R9, R15 + MOVQ R10, CX + MOVQ R11, DX + MOVQ R12, SI + MOVQ R13, BX + MOVQ $0xb9feffffffffaaab, DI + SUBQ DI, R14 + MOVQ $0x1eabfffeb153ffff, DI + SBBQ DI, R15 + MOVQ $0x6730d2a0f6b0f624, DI + SBBQ DI, CX + MOVQ $0x64774b84f38512bf, DI + SBBQ DI, DX + MOVQ $0x4b1ba7b6434bacd7, DI + SBBQ DI, SI + MOVQ $0x1a0111ea397fe69a, DI + SBBQ DI, BX + CMOVQCC R14, R8 + CMOVQCC R15, R9 + CMOVQCC CX, R10 + CMOVQCC DX, R11 + CMOVQCC SI, R12 + CMOVQCC BX, R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// doubling w/ reduction +// a = (2 * a) % p +TEXT ·doubleAssign(SB), NOSPLIT, $0-8 + // | + MOVQ a+0(FP), DI + + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + ADDQ R8, R8 + ADCQ R9, R9 + ADCQ R10, R10 + ADCQ R11, R11 + ADCQ R12, R12 + ADCQ R13, R13 + + // | + MOVQ R8, R14 + MOVQ R9, R15 + MOVQ R10, CX + MOVQ R11, DX + MOVQ R12, SI + MOVQ R13, BX + MOVQ $0xb9feffffffffaaab, AX + SUBQ AX, R14 + MOVQ $0x1eabfffeb153ffff, AX + SBBQ AX, R15 + MOVQ $0x6730d2a0f6b0f624, AX + SBBQ AX, CX + MOVQ $0x64774b84f38512bf, AX + SBBQ AX, DX + MOVQ $0x4b1ba7b6434bacd7, AX + SBBQ AX, SI + MOVQ $0x1a0111ea397fe69a, AX + SBBQ AX, BX + CMOVQCC R14, R8 + CMOVQCC R15, R9 + CMOVQCC CX, R10 + CMOVQCC DX, R11 + CMOVQCC SI, R12 + CMOVQCC BX, R13 + + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// doubling w/o reduction +// c = 2 * a +TEXT ·ldouble(SB), NOSPLIT, $0-16 + // | + MOVQ a+8(FP), DI + + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + MOVQ 40(DI), R13 + + // | + ADDQ R8, R8 + ADCQ R9, R9 + ADCQ R10, R10 + ADCQ R11, R11 + ADCQ R12, R12 + ADCQ R13, R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + + RET +/* | end */ + + +TEXT ·_neg(SB), NOSPLIT, $0-16 + // | + MOVQ a+8(FP), DI + + // | + MOVQ $0xb9feffffffffaaab, R8 + MOVQ $0x1eabfffeb153ffff, R9 + MOVQ $0x6730d2a0f6b0f624, R10 + MOVQ $0x64774b84f38512bf, R11 + MOVQ $0x4b1ba7b6434bacd7, R12 + MOVQ $0x1a0111ea397fe69a, R13 + SUBQ (DI), R8 + SBBQ 8(DI), R9 + SBBQ 16(DI), R10 + SBBQ 24(DI), R11 + SBBQ 32(DI), R12 + SBBQ 40(DI), R13 + + // | + MOVQ c+0(FP), DI + MOVQ R8, (DI) + MOVQ R9, 8(DI) + MOVQ R10, 16(DI) + MOVQ R11, 24(DI) + MOVQ R12, 32(DI) + MOVQ R13, 40(DI) + RET +/* | end */ + + +// multiplication without using MULX/ADX +// c = a * b % p +TEXT ·mulNoADX(SB), NOSPLIT, $24-24 + // | + +/* inputs */ + + MOVQ a+8(FP), DI + MOVQ b+16(FP), SI + MOVQ $0x00, R9 + MOVQ $0x00, R10 + MOVQ $0x00, R11 + MOVQ $0x00, R12 + MOVQ $0x00, R13 + MOVQ $0x00, R14 + MOVQ $0x00, R15 + + // | + +/* i0 */ + + // | a0 @ CX + MOVQ (DI), CX + + // | a0 * b0 + MOVQ (SI), AX + MULQ CX + MOVQ AX, (SP) + MOVQ DX, R8 + + // | a0 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R8 + ADCQ DX, R9 + + // | a0 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R9 + ADCQ DX, R10 + + // | a0 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R10 + ADCQ DX, R11 + + // | a0 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R11 + ADCQ DX, R12 + + // | a0 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + + // | + +/* i1 */ + + // | a1 @ CX + MOVQ 8(DI), CX + MOVQ $0x00, BX + + // | a1 * b0 + MOVQ (SI), AX + MULQ CX + ADDQ AX, R8 + ADCQ DX, R9 + ADCQ $0x00, R10 + ADCQ $0x00, BX + MOVQ R8, 8(SP) + MOVQ $0x00, R8 + + // | a1 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R9 + ADCQ DX, R10 + ADCQ BX, R11 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a1 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R10 + ADCQ DX, R11 + ADCQ BX, R12 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a1 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R11 + ADCQ DX, R12 + ADCQ BX, R13 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a1 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + ADCQ BX, R14 + + // | a1 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R13 + ADCQ DX, R14 + + // | + +/* i2 */ + + // | a2 @ CX + MOVQ 16(DI), CX + MOVQ $0x00, BX + + // | a2 * b0 + MOVQ (SI), AX + MULQ CX + ADDQ AX, R9 + ADCQ DX, R10 + ADCQ $0x00, R11 + ADCQ $0x00, BX + MOVQ R9, 16(SP) + MOVQ $0x00, R9 + + // | a2 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R10 + ADCQ DX, R11 + ADCQ BX, R12 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a2 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R11 + ADCQ DX, R12 + ADCQ BX, R13 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a2 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + ADCQ BX, R14 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a2 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R13 + ADCQ DX, R14 + ADCQ BX, R15 + + // | a2 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R14 + ADCQ DX, R15 + + // | + +/* i3 */ + + // | a3 @ CX + MOVQ 24(DI), CX + MOVQ $0x00, BX + + // | a3 * b0 + MOVQ (SI), AX + MULQ CX + ADDQ AX, R10 + ADCQ DX, R11 + ADCQ $0x00, R12 + ADCQ $0x00, BX + + // | a3 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R11 + ADCQ DX, R12 + ADCQ BX, R13 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a3 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + ADCQ BX, R14 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a3 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R13 + ADCQ DX, R14 + ADCQ BX, R15 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a3 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R14 + ADCQ DX, R15 + ADCQ BX, R8 + + // | a3 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R15 + ADCQ DX, R8 + + // | + +/* i4 */ + + // | a4 @ CX + MOVQ 32(DI), CX + MOVQ $0x00, BX + + // | a4 * b0 + MOVQ (SI), AX + MULQ CX + ADDQ AX, R11 + ADCQ DX, R12 + ADCQ $0x00, R13 + ADCQ $0x00, BX + + // | a4 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + ADCQ BX, R14 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a4 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R13 + ADCQ DX, R14 + ADCQ BX, R15 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a4 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R14 + ADCQ DX, R15 + ADCQ BX, R8 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a4 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R15 + ADCQ DX, R8 + ADCQ BX, R9 + + // | a4 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R8 + ADCQ DX, R9 + + // | + +/* i5 */ + + // | a5 @ CX + MOVQ 40(DI), CX + MOVQ $0x00, BX + + // | a5 * b0 + MOVQ (SI), AX + MULQ CX + ADDQ AX, R12 + ADCQ DX, R13 + ADCQ $0x00, R14 + ADCQ $0x00, BX + + // | a5 * b1 + MOVQ 8(SI), AX + MULQ CX + ADDQ AX, R13 + ADCQ DX, R14 + ADCQ BX, R15 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a5 * b2 + MOVQ 16(SI), AX + MULQ CX + ADDQ AX, R14 + ADCQ DX, R15 + ADCQ BX, R8 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a5 * b3 + MOVQ 24(SI), AX + MULQ CX + ADDQ AX, R15 + ADCQ DX, R8 + ADCQ BX, R9 + MOVQ $0x00, BX + ADCQ $0x00, BX + + // | a5 * b4 + MOVQ 32(SI), AX + MULQ CX + ADDQ AX, R8 + ADCQ DX, R9 + ADCQ $0x00, BX + + // | a5 * b5 + MOVQ 40(SI), AX + MULQ CX + ADDQ AX, R9 + ADCQ DX, BX + + // | + +/* */ + + // | + // | W + // | 0 (SP) | 1 8(SP) | 2 16(SP) | 3 R10 | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 R9 | 11 BX + + + MOVQ (SP), CX + MOVQ 8(SP), DI + MOVQ 16(SP), SI + MOVQ BX, (SP) + MOVQ R9, 8(SP) + + // | + +/* montgomery reduction */ + + // | + +/* i0 */ + + // | + // | W + // | 0 CX | 1 DI | 2 SI | 3 R10 | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) + + + // | | u0 = w0 * inp + MOVQ CX, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w0 @ CX + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, CX + ADCQ DX, BX + + // | j1 + + // | w1 @ DI + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, DI + ADCQ $0x00, DX + ADDQ BX, DI + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w2 @ SI + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, SI + ADCQ $0x00, DX + ADDQ BX, SI + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w3 @ R10 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R10 + ADCQ $0x00, DX + ADDQ BX, R10 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w4 @ R11 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R11 + ADCQ $0x00, DX + ADDQ BX, R11 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w5 @ R12 + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ $0x00, DX + ADDQ BX, R12 + + // | w6 @ R13 + ADCQ DX, R13 + ADCQ $0x00, CX + + // | + +/* i1 */ + + // | + // | W + // | 0 - | 1 DI | 2 SI | 3 R10 | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) + + + // | | u1 = w1 * inp + MOVQ DI, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w1 @ DI + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, DI + ADCQ DX, BX + + // | j1 + + // | w2 @ SI + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, SI + ADCQ $0x00, DX + ADDQ BX, SI + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w3 @ R10 + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, R10 + ADCQ $0x00, DX + ADDQ BX, R10 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w4 @ R11 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R11 + ADCQ $0x00, DX + ADDQ BX, R11 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w5 @ R12 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ $0x00, DX + ADDQ BX, R12 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w6 @ R13 + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, R13 + ADCQ DX, CX + ADDQ BX, R13 + + // | w7 @ R14 + ADCQ CX, R14 + MOVQ $0x00, CX + ADCQ $0x00, CX + + // | + +/* i2 */ + + // | + // | W + // | 0 - | 1 - | 2 SI | 3 R10 | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) + + + // | | u2 = w2 * inp + MOVQ SI, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w2 @ SI + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, SI + ADCQ DX, BX + + // | j1 + + // | w3 @ R10 + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, R10 + ADCQ $0x00, DX + ADDQ BX, R10 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w4 @ R11 + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, R11 + ADCQ $0x00, DX + ADDQ BX, R11 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w5 @ R12 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ $0x00, DX + ADDQ BX, R12 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w6 @ R13 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R13 + ADCQ $0x00, DX + ADDQ BX, R13 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w7 @ R14 + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, R14 + ADCQ DX, CX + ADDQ BX, R14 + + // | w8 @ R15 + ADCQ CX, R15 + MOVQ $0x00, CX + ADCQ $0x00, CX + + // | + +/* i3 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 R10 | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) + + + // | | u3 = w3 * inp + MOVQ R10, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w3 @ R10 + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, R10 + ADCQ DX, BX + + // | j1 + + // | w4 @ R11 + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, R11 + ADCQ $0x00, DX + ADDQ BX, R11 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w5 @ R12 + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ $0x00, DX + ADDQ BX, R12 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w6 @ R13 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R13 + ADCQ $0x00, DX + ADDQ BX, R13 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w7 @ R14 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R14 + ADCQ $0x00, DX + ADDQ BX, R14 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w8 @ R15 + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, R15 + ADCQ DX, CX + ADDQ BX, R15 + + // | w9 @ R8 + ADCQ CX, R8 + MOVQ $0x00, CX + ADCQ $0x00, CX + + // | + +/* i4 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 - | 4 R11 | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) + + + // | | u4 = w4 * inp + MOVQ R11, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w4 @ R11 + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, R11 + ADCQ DX, BX + + // | j1 + + // | w5 @ R12 + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ $0x00, DX + ADDQ BX, R12 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w6 @ R13 + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, R13 + ADCQ $0x00, DX + ADDQ BX, R13 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w7 @ R14 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R14 + ADCQ $0x00, DX + ADDQ BX, R14 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w8 @ R15 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R15 + ADCQ $0x00, DX + ADDQ BX, R15 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w9 @ R8 + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, R8 + ADCQ DX, CX + ADDQ BX, R8 + + // | move to idle register + MOVQ 8(SP), DI + + // | w10 @ DI + ADCQ CX, DI + MOVQ $0x00, CX + ADCQ $0x00, CX + + // | + +/* i5 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 R12 + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 DI | 11 (SP) + + + // | | u5 = w5 * inp + MOVQ R12, AX + MULQ ·inp+0(SB) + MOVQ AX, R9 + MOVQ $0x00, BX + + // | + +/* */ + + // | j0 + + // | w5 @ R12 + MOVQ ·modulus+0(SB), AX + MULQ R9 + ADDQ AX, R12 + ADCQ DX, BX + + // | j1 + + // | w6 @ R13 + MOVQ ·modulus+8(SB), AX + MULQ R9 + ADDQ AX, R13 + ADCQ $0x00, DX + ADDQ BX, R13 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j2 + + // | w7 @ R14 + MOVQ ·modulus+16(SB), AX + MULQ R9 + ADDQ AX, R14 + ADCQ $0x00, DX + ADDQ BX, R14 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j3 + + // | w8 @ R15 + MOVQ ·modulus+24(SB), AX + MULQ R9 + ADDQ AX, R15 + ADCQ $0x00, DX + ADDQ BX, R15 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j4 + + // | w9 @ R8 + MOVQ ·modulus+32(SB), AX + MULQ R9 + ADDQ AX, R8 + ADCQ $0x00, DX + ADDQ BX, R8 + MOVQ $0x00, BX + ADCQ DX, BX + + // | j5 + + // | w10 @ DI + MOVQ ·modulus+40(SB), AX + MULQ R9 + ADDQ AX, DI + ADCQ DX, CX + ADDQ BX, DI + + // | w11 @ CX + ADCQ (SP), CX + + // | + // | W montgomerry reduction ends + // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - + // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 DI | 11 CX + + + // | + + +/* modular reduction */ + + MOVQ R13, R10 + SUBQ ·modulus+0(SB), R10 + MOVQ R14, R11 + SBBQ ·modulus+8(SB), R11 + MOVQ R15, R12 + SBBQ ·modulus+16(SB), R12 + MOVQ R8, AX + SBBQ ·modulus+24(SB), AX + MOVQ DI, BX + SBBQ ·modulus+32(SB), BX + MOVQ CX, R9 + SBBQ ·modulus+40(SB), R9 + // | + +/* out */ + + MOVQ c+0(FP), SI + CMOVQCC R10, R13 + MOVQ R13, (SI) + CMOVQCC R11, R14 + MOVQ R14, 8(SI) + CMOVQCC R12, R15 + MOVQ R15, 16(SI) + CMOVQCC AX, R8 + MOVQ R8, 24(SI) + CMOVQCC BX, DI + MOVQ DI, 32(SI) + CMOVQCC R9, CX + MOVQ CX, 40(SI) + RET + + // | + +/* end */ + + +// multiplication +// c = a * b % p +TEXT ·mulADX(SB), NOSPLIT, $16-24 + // | + +/* inputs */ + + MOVQ a+8(FP), DI + MOVQ b+16(FP), SI + XORQ AX, AX + + // | + +/* i0 */ + + // | a0 @ DX + MOVQ (DI), DX + + // | a0 * b0 + MULXQ (SI), AX, CX + MOVQ AX, (SP) + + // | a0 * b1 + MULXQ 8(SI), AX, R8 + ADCXQ AX, CX + + // | a0 * b2 + MULXQ 16(SI), AX, R9 + ADCXQ AX, R8 + + // | a0 * b3 + MULXQ 24(SI), AX, R10 + ADCXQ AX, R9 + + // | a0 * b4 + MULXQ 32(SI), AX, R11 + ADCXQ AX, R10 + + // | a0 * b5 + MULXQ 40(SI), AX, R12 + ADCXQ AX, R11 + ADCQ $0x00, R12 + + // | + +/* i1 */ + + // | a1 @ DX + MOVQ 8(DI), DX + XORQ R13, R13 + + // | a1 * b0 + MULXQ (SI), AX, BX + ADOXQ AX, CX + ADCXQ BX, R8 + MOVQ CX, 8(SP) + + // | a1 * b1 + MULXQ 8(SI), AX, BX + ADOXQ AX, R8 + ADCXQ BX, R9 + + // | a1 * b2 + MULXQ 16(SI), AX, BX + ADOXQ AX, R9 + ADCXQ BX, R10 + + // | a1 * b3 + MULXQ 24(SI), AX, BX + ADOXQ AX, R10 + ADCXQ BX, R11 + + // | a1 * b4 + MULXQ 32(SI), AX, BX + ADOXQ AX, R11 + ADCXQ BX, R12 + + // | a1 * b5 + MULXQ 40(SI), AX, BX + ADOXQ AX, R12 + ADOXQ R13, R13 + ADCXQ BX, R13 + + // | + +/* i2 */ + + // | a2 @ DX + MOVQ 16(DI), DX + XORQ R14, R14 + + // | a2 * b0 + MULXQ (SI), AX, BX + ADOXQ AX, R8 + ADCXQ BX, R9 + + // | a2 * b1 + MULXQ 8(SI), AX, BX + ADOXQ AX, R9 + ADCXQ BX, R10 + + // | a2 * b2 + MULXQ 16(SI), AX, BX + ADOXQ AX, R10 + ADCXQ BX, R11 + + // | a2 * b3 + MULXQ 24(SI), AX, BX + ADOXQ AX, R11 + ADCXQ BX, R12 + + // | a2 * b4 + MULXQ 32(SI), AX, BX + ADOXQ AX, R12 + ADCXQ BX, R13 + + // | a2 * b5 + MULXQ 40(SI), AX, BX + ADOXQ AX, R13 + ADOXQ R14, R14 + ADCXQ BX, R14 + + // | + +/* i3 */ + + // | a3 @ DX + MOVQ 24(DI), DX + XORQ R15, R15 + + // | a3 * b0 + MULXQ (SI), AX, BX + ADOXQ AX, R9 + ADCXQ BX, R10 + + // | a3 * b1 + MULXQ 8(SI), AX, BX + ADOXQ AX, R10 + ADCXQ BX, R11 + + // | a3 * b2 + MULXQ 16(SI), AX, BX + ADOXQ AX, R11 + ADCXQ BX, R12 + + // | a3 * b3 + MULXQ 24(SI), AX, BX + ADOXQ AX, R12 + ADCXQ BX, R13 + + // | a3 * b4 + MULXQ 32(SI), AX, BX + ADOXQ AX, R13 + ADCXQ BX, R14 + + // | a3 * b5 + MULXQ 40(SI), AX, BX + ADOXQ AX, R14 + ADOXQ R15, R15 + ADCXQ BX, R15 + + // | + +/* i4 */ + + // | a4 @ DX + MOVQ 32(DI), DX + XORQ CX, CX + + // | a4 * b0 + MULXQ (SI), AX, BX + ADOXQ AX, R10 + ADCXQ BX, R11 + + // | a4 * b1 + MULXQ 8(SI), AX, BX + ADOXQ AX, R11 + ADCXQ BX, R12 + + // | a4 * b2 + MULXQ 16(SI), AX, BX + ADOXQ AX, R12 + ADCXQ BX, R13 + + // | a4 * b3 + MULXQ 24(SI), AX, BX + ADOXQ AX, R13 + ADCXQ BX, R14 + + // | a4 * b4 + MULXQ 32(SI), AX, BX + ADOXQ AX, R14 + ADCXQ BX, R15 + + // | a4 * b5 + MULXQ 40(SI), AX, BX + ADOXQ AX, R15 + ADOXQ CX, CX + ADCXQ BX, CX + + // | + +/* i5 */ + + // | a5 @ DX + MOVQ 40(DI), DX + XORQ DI, DI + + // | a5 * b0 + MULXQ (SI), AX, BX + ADOXQ AX, R11 + ADCXQ BX, R12 + + // | a5 * b1 + MULXQ 8(SI), AX, BX + ADOXQ AX, R12 + ADCXQ BX, R13 + + // | a5 * b2 + MULXQ 16(SI), AX, BX + ADOXQ AX, R13 + ADCXQ BX, R14 + + // | a5 * b3 + MULXQ 24(SI), AX, BX + ADOXQ AX, R14 + ADCXQ BX, R15 + + // | a5 * b4 + MULXQ 32(SI), AX, BX + ADOXQ AX, R15 + ADCXQ BX, CX + + // | a5 * b5 + MULXQ 40(SI), AX, BX + ADOXQ AX, CX + ADOXQ BX, DI + ADCQ $0x00, DI + + // | + +/* */ + + // | + // | W + // | 0 (SP) | 1 8(SP) | 2 R8 | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 DI + + + MOVQ (SP), BX + MOVQ 8(SP), SI + MOVQ DI, (SP) + + // | + // | W ready to mont + // | 0 BX | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | + +/* montgomery reduction */ + + // | clear flags + XORQ AX, AX + + // | + +/* i0 */ + + // | + // | W + // | 0 BX | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u0 = w0 * inp + MOVQ BX, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w0 @ BX + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, BX + ADCXQ DI, SI + + // | j1 + + // | w1 @ SI + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, SI + ADCXQ DI, R8 + + // | j2 + + // | w2 @ R8 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R8 + ADCXQ DI, R9 + + // | j3 + + // | w3 @ R9 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R9 + ADCXQ DI, R10 + + // | j4 + + // | w4 @ R10 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R10 + ADCXQ DI, R11 + + // | j5 + + // | w5 @ R11 + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + ADOXQ BX, R12 + ADCXQ BX, BX + MOVQ $0x00, AX + ADOXQ AX, BX + + // | clear flags + XORQ AX, AX + + // | + +/* i1 */ + + // | + // | W + // | 0 - | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u1 = w1 * inp + MOVQ SI, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w1 @ SI + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, SI + ADCXQ DI, R8 + + // | j1 + + // | w2 @ R8 + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, R8 + ADCXQ DI, R9 + + // | j2 + + // | w3 @ R9 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R9 + ADCXQ DI, R10 + + // | j3 + + // | w4 @ R10 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R10 + ADCXQ DI, R11 + + // | j4 + + // | w5 @ R11 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + + // | j5 + + // | w6 @ R12 + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, R12 + ADCXQ DI, R13 + ADOXQ BX, R13 + ADCXQ SI, SI + MOVQ $0x00, AX + ADOXQ AX, SI + + // | clear flags + XORQ AX, AX + + // | + +/* i2 */ + + // | + // | W + // | 0 - | 1 - | 2 R8 | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u2 = w2 * inp + MOVQ R8, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w2 @ R8 + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, R8 + ADCXQ DI, R9 + + // | j1 + + // | w3 @ R9 + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, R9 + ADCXQ DI, R10 + + // | j2 + + // | w4 @ R10 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R10 + ADCXQ DI, R11 + + // | j3 + + // | w5 @ R11 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + + // | j4 + + // | w6 @ R12 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R12 + ADCXQ DI, R13 + + // | j5 + + // | w7 @ R13 + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, R13 + ADCXQ DI, R14 + ADOXQ SI, R14 + ADCXQ R8, R8 + MOVQ $0x00, AX + ADOXQ AX, R8 + + // | clear flags + XORQ AX, AX + + // | + +/* i3 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 R9 | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u3 = w3 * inp + MOVQ R9, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w3 @ R9 + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, R9 + ADCXQ DI, R10 + + // | j1 + + // | w4 @ R10 + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, R10 + ADCXQ DI, R11 + + // | j2 + + // | w5 @ R11 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + + // | j3 + + // | w6 @ R12 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R12 + ADCXQ DI, R13 + + // | j4 + + // | w7 @ R13 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R13 + ADCXQ DI, R14 + + // | j5 + + // | w8 @ R14 + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, R14 + ADCXQ DI, R15 + ADOXQ R8, R15 + ADCXQ R9, R9 + MOVQ $0x00, AX + ADOXQ AX, R9 + + // | clear flags + XORQ AX, AX + + // | + +/* i4 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 - | 4 R10 | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u4 = w4 * inp + MOVQ R10, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w4 @ R10 + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, R10 + ADCXQ DI, R11 + + // | j1 + + // | w5 @ R11 + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + + // | j2 + + // | w6 @ R12 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R12 + ADCXQ DI, R13 + + // | j3 + + // | w7 @ R13 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R13 + ADCXQ DI, R14 + + // | j4 + + // | w8 @ R14 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R14 + ADCXQ DI, R15 + + // | j5 + + // | w9 @ R15 + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, R15 + ADCXQ DI, CX + ADOXQ R9, CX + ADCXQ R10, R10 + MOVQ $0x00, AX + ADOXQ AX, R10 + + // | clear flags + XORQ AX, AX + + // | + +/* i5 */ + + // | + // | W + // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 R11 + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) + + + // | | u5 = w5 * inp + MOVQ R11, DX + MULXQ ·inp+0(SB), DX, DI + + // | + +/* */ + + // | j0 + + // | w5 @ R11 + MULXQ ·modulus+0(SB), AX, DI + ADOXQ AX, R11 + ADCXQ DI, R12 + + // | j1 + + // | w6 @ R12 + MULXQ ·modulus+8(SB), AX, DI + ADOXQ AX, R12 + ADCXQ DI, R13 + + // | j2 + + // | w7 @ R13 + MULXQ ·modulus+16(SB), AX, DI + ADOXQ AX, R13 + ADCXQ DI, R14 + + // | j3 + + // | w8 @ R14 + MULXQ ·modulus+24(SB), AX, DI + ADOXQ AX, R14 + ADCXQ DI, R15 + + // | j4 + + // | w9 @ R15 + MULXQ ·modulus+32(SB), AX, DI + ADOXQ AX, R15 + ADCXQ DI, CX + + // | j5 + + // | w10 @ CX + MULXQ ·modulus+40(SB), AX, DI + ADOXQ AX, CX + + // | w11 @ (SP) + // | move to an idle register + MOVQ (SP), BX + ADCXQ DI, BX + ADOXQ R10, BX + + // | + // | W montgomery reduction ends + // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - + // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 BX + + + // | + +/* modular reduction */ + + MOVQ R12, AX + SUBQ ·modulus+0(SB), AX + MOVQ R13, DI + SBBQ ·modulus+8(SB), DI + MOVQ R14, SI + SBBQ ·modulus+16(SB), SI + MOVQ R15, R8 + SBBQ ·modulus+24(SB), R8 + MOVQ CX, R9 + SBBQ ·modulus+32(SB), R9 + MOVQ BX, R10 + SBBQ ·modulus+40(SB), R10 + + // | + +/* out */ + + MOVQ c+0(FP), R11 + CMOVQCC AX, R12 + MOVQ R12, (R11) + CMOVQCC DI, R13 + MOVQ R13, 8(R11) + CMOVQCC SI, R14 + MOVQ R14, 16(R11) + CMOVQCC R8, R15 + MOVQ R15, 24(R11) + CMOVQCC R9, CX + MOVQ CX, 32(R11) + CMOVQCC R10, BX + MOVQ BX, 40(R11) + RET + + // | + +/* end */ diff --git a/core/vm/int_pool_verifier.go b/crypto/bls12381/arithmetic_x86_adx.go similarity index 69% rename from core/vm/int_pool_verifier.go rename to crypto/bls12381/arithmetic_x86_adx.go index 82fbfed6..a40c7384 100644 --- a/core/vm/int_pool_verifier.go +++ b/crypto/bls12381/arithmetic_x86_adx.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,18 +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 VERIFY_EVM_INTEGER_POOL +//go:build amd64 && blsadx +// +build amd64,blsadx -package vm +package bls12381 -import "fmt" - -const verifyPool = true - -func verifyIntegerPool(ip *intPool) { - for i, item := range ip.pool.data { - if item.Cmp(checkVal) != 0 { - panic(fmt.Sprintf("%d'th item failed aggressive pool check. Value was modified", i)) - } - } -} +// enableADX is true if the ADX/BMI2 instruction set was requested for the BLS +// implementation. The system may still fall back to plain ASM if the necessary +// instructions are unavailable on the CPU. +const enableADX = true diff --git a/accounts/abi/numbers_test.go b/crypto/bls12381/arithmetic_x86_noadx.go similarity index 69% rename from accounts/abi/numbers_test.go rename to crypto/bls12381/arithmetic_x86_noadx.go index d25a5abc..679b30ec 100644 --- a/accounts/abi/numbers_test.go +++ b/crypto/bls12381/arithmetic_x86_noadx.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package abi +//go:build amd64 && blsasm +// +build amd64,blsasm -import ( - "bytes" - "math/big" - "testing" -) +package bls12381 -func TestNumberTypes(t *testing.T) { - ubytes := make([]byte, 32) - ubytes[31] = 1 - - unsigned := U256(big.NewInt(1)) - if !bytes.Equal(unsigned, ubytes) { - t.Errorf("expected %x got %x", ubytes, unsigned) - } -} +// enableADX is true if the ADX/BMI2 instruction set was requested for the BLS +// implementation. The system may still fall back to plain ASM if the necessary +// instructions are unavailable on the CPU. +const enableADX = false diff --git a/crypto/bls12381/bls12_381.go b/crypto/bls12381/bls12_381.go new file mode 100644 index 00000000..1c1c9776 --- /dev/null +++ b/crypto/bls12381/bls12_381.go @@ -0,0 +1,230 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +/* + Field Constants +*/ + +// Base field modulus +// p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab + +// Size of six words +// r = 2 ^ 384 + +// modulus = p +var modulus = fe{0xb9feffffffffaaab, 0x1eabfffeb153ffff, 0x6730d2a0f6b0f624, 0x64774b84f38512bf, 0x4b1ba7b6434bacd7, 0x1a0111ea397fe69a} + +var ( + // -p^(-1) mod 2^64 + inp uint64 = 0x89f3fffcfffcfffd + // This value is used in assembly code + _ = inp +) + +// r mod p +var r1 = &fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493} + +// r^2 mod p +var r2 = &fe{ + 0xf4df1f341c341746, 0x0a76e6a609d104f1, 0x8de5476c4c95b6d5, 0x67eb88a9939d83c0, 0x9a793e85b519952d, 0x11988fe592cae3aa, +} + +// -1 + 0 * u +var negativeOne2 = &fe2{ + fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, +} + +// 2 ^ (-1) +var twoInv = &fe{0x1804000000015554, 0x855000053ab00001, 0x633cb57c253c276f, 0x6e22d1ec31ebb502, 0xd3916126f2d14ca2, 0x17fbb8571a006596} + +// (p - 3) / 4 +var pMinus3Over4 = bigFromHex("0x680447a8e5ff9a692c6e9ed90d2eb35d91dd2e13ce144afd9cc34a83dac3d8907aaffffac54ffffee7fbfffffffeaaa") + +// (p + 1) / 4 +var pPlus1Over4 = bigFromHex("0x680447a8e5ff9a692c6e9ed90d2eb35d91dd2e13ce144afd9cc34a83dac3d8907aaffffac54ffffee7fbfffffffeaab") + +// (p - 1) / 2 +var pMinus1Over2 = bigFromHex("0xd0088f51cbff34d258dd3db21a5d66bb23ba5c279c2895fb39869507b587b120f55ffff58a9ffffdcff7fffffffd555") + +// -1 +var nonResidue1 = &fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206} + +// (1 + 1 * u) +var nonResidue2 = &fe2{ + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, +} + +/* + Curve Constants +*/ + +// b coefficient for G1 +var b = &fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e} + +// b coefficient for G2 +var b2 = &fe2{ + fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e}, + fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e}, +} + +// Curve order +var q = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") + +// Efficient cofactor of G1 +var cofactorEFFG1 = bigFromHex("0xd201000000010001") + +// Efficient cofactor of G2 +var cofactorEFFG2 = bigFromHex("0x0bc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551") + +var g1One = PointG1{ + fe{0x5cb38790fd530c16, 0x7817fc679976fff5, 0x154f95c7143ba1c1, 0xf0ae6acdf3d0e747, 0xedce6ecc21dbf440, 0x120177419e0bfb75}, + fe{0xbaac93d50ce72271, 0x8c22631a7918fd8e, 0xdd595f13570725ce, 0x51ac582950405194, 0x0e1c8c3fad0059c0, 0x0bbc3efc5008a26a}, + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, +} + +var g2One = PointG2{ + fe2{ + fe{0xf5f28fa202940a10, 0xb3f5fb2687b4961a, 0xa1a893b53e2ae580, 0x9894999d1a3caee9, 0x6f67b7631863366b, 0x058191924350bcd7}, + fe{0xa5a9c0759e23f606, 0xaaa0c59dbccd60c3, 0x3bb17e18e2867806, 0x1b1ab6cc8541b367, 0xc2b6ed0ef2158547, 0x11922a097360edf3}, + }, + fe2{ + fe{0x4c730af860494c4a, 0x597cfa1f5e369c5a, 0xe7e6856caa0a635a, 0xbbefb5e96e0d495f, 0x07d3a975f0ef25a2, 0x083fd8e7e80dae5}, + fe{0xadc0fc92df64b05d, 0x18aa270a2b1461dc, 0x86adac6a3be4eba0, 0x79495c4ec93da33a, 0xe7175850a43ccaed, 0xb2bc2a163de1bf2}, + }, + fe2{ + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, +} + +/* + Frobenious Coeffs +*/ + +var frobeniusCoeffs61 = [6]fe2{ + { + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, + }, + { + fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + }, + { + fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, + }, +} + +var frobeniusCoeffs62 = [6]fe2{ + { + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x890dc9e4867545c3, 0x2af322533285a5d5, 0x50880866309b7e2c, 0xa20d1b8c7e881024, 0x14e4f04fe2db9068, 0x14e56d3f1564853a}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0xecfb361b798dba3a, 0xc100ddb891865a2c, 0x0ec08ff1232bda8e, 0xd5c13cc6f1ca4721, 0x47222a47bf7b5c04, 0x0110f184e51c5f59}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, +} + +var frobeniusCoeffs12 = [12]fe2{ + { + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x07089552b319d465, 0xc6695f92b50a8313, 0x97e83cccd117228f, 0xa35baecab2dc29ee, 0x1ce393ea5daace4d, 0x08f2220fb0fb66eb}, + fe{0xb2f66aad4ce5d646, 0x5842a06bfc497cec, 0xcf4895d42599d394, 0xc11b9cba40a8e8d0, 0x2e3813cbe5a0de89, 0x110eefda88847faf}, + }, + { + fe{0xecfb361b798dba3a, 0xc100ddb891865a2c, 0x0ec08ff1232bda8e, 0xd5c13cc6f1ca4721, 0x47222a47bf7b5c04, 0x0110f184e51c5f59}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x3e2f585da55c9ad1, 0x4294213d86c18183, 0x382844c88b623732, 0x92ad2afd19103e18, 0x1d794e4fac7cf0b9, 0x0bd592fc7d825ec8}, + fe{0x7bcfa7a25aa30fda, 0xdc17dec12a927e7c, 0x2f088dd86b4ebef1, 0xd1ca2087da74d4a7, 0x2da2596696cebc1d, 0x0e2b7eedbbfd87d2}, + }, + { + fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x3726c30af242c66c, 0x7c2ac1aad1b6fe70, 0xa04007fbba4b14a2, 0xef517c3266341429, 0x0095ba654ed2226b, 0x02e370eccc86f7dd}, + fe{0x82d83cf50dbce43f, 0xa2813e53df9d018f, 0xc6f0caa53c65e181, 0x7525cf528d50fe95, 0x4a85ed50f4798a6b, 0x171da0fd6cf8eebd}, + }, + { + fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0xb2f66aad4ce5d646, 0x5842a06bfc497cec, 0xcf4895d42599d394, 0xc11b9cba40a8e8d0, 0x2e3813cbe5a0de89, 0x110eefda88847faf}, + fe{0x07089552b319d465, 0xc6695f92b50a8313, 0x97e83cccd117228f, 0xa35baecab2dc29ee, 0x1ce393ea5daace4d, 0x08f2220fb0fb66eb}, + }, + { + fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x7bcfa7a25aa30fda, 0xdc17dec12a927e7c, 0x2f088dd86b4ebef1, 0xd1ca2087da74d4a7, 0x2da2596696cebc1d, 0x0e2b7eedbbfd87d2}, + fe{0x3e2f585da55c9ad1, 0x4294213d86c18183, 0x382844c88b623732, 0x92ad2afd19103e18, 0x1d794e4fac7cf0b9, 0x0bd592fc7d825ec8}, + }, + { + fe{0x890dc9e4867545c3, 0x2af322533285a5d5, 0x50880866309b7e2c, 0xa20d1b8c7e881024, 0x14e4f04fe2db9068, 0x14e56d3f1564853a}, + fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, + }, + { + fe{0x82d83cf50dbce43f, 0xa2813e53df9d018f, 0xc6f0caa53c65e181, 0x7525cf528d50fe95, 0x4a85ed50f4798a6b, 0x171da0fd6cf8eebd}, + fe{0x3726c30af242c66c, 0x7c2ac1aad1b6fe70, 0xa04007fbba4b14a2, 0xef517c3266341429, 0x0095ba654ed2226b, 0x02e370eccc86f7dd}, + }, +} + +/* + x +*/ + +var x = bigFromHex("0xd201000000010000") diff --git a/crypto/bls12381/bls12_381_test.go b/crypto/bls12381/bls12_381_test.go new file mode 100644 index 00000000..6bf58341 --- /dev/null +++ b/crypto/bls12381/bls12_381_test.go @@ -0,0 +1,13 @@ +package bls12381 + +import ( + "crypto/rand" + "math/big" +) + +var fuz = 10 + +func randScalar(max *big.Int) *big.Int { + a, _ := rand.Int(rand.Reader, max) + return a +} diff --git a/crypto/bls12381/field_element.go b/crypto/bls12381/field_element.go new file mode 100644 index 00000000..9fdddc61 --- /dev/null +++ b/crypto/bls12381/field_element.go @@ -0,0 +1,340 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "io" + "math/big" +) + +// fe is base field element representation +type fe [6]uint64 + +// fe2 is element representation of 'fp2' which is quadratic extension of base field 'fp' +// Representation follows c[0] + c[1] * u encoding order. +type fe2 [2]fe + +// fe6 is element representation of 'fp6' field which is cubic extension of 'fp2' +// Representation follows c[0] + c[1] * v + c[2] * v^2 encoding order. +type fe6 [3]fe2 + +// fe12 is element representation of 'fp12' field which is quadratic extension of 'fp6' +// Representation follows c[0] + c[1] * w encoding order. +type fe12 [2]fe6 + +func (fe *fe) setBytes(in []byte) *fe { + size := 48 + l := len(in) + if l >= size { + l = size + } + padded := make([]byte, size) + copy(padded[size-l:], in[:]) + var a int + for i := 0; i < 6; i++ { + a = size - i*8 + fe[i] = uint64(padded[a-1]) | uint64(padded[a-2])<<8 | + uint64(padded[a-3])<<16 | uint64(padded[a-4])<<24 | + uint64(padded[a-5])<<32 | uint64(padded[a-6])<<40 | + uint64(padded[a-7])<<48 | uint64(padded[a-8])<<56 + } + return fe +} + +func (fe *fe) setBig(a *big.Int) *fe { + return fe.setBytes(a.Bytes()) +} + +func (fe *fe) setString(s string) (*fe, error) { + if s[:2] == "0x" { + s = s[2:] + } + bytes, err := hex.DecodeString(s) + if err != nil { + return nil, err + } + return fe.setBytes(bytes), nil +} + +func (fe *fe) set(fe2 *fe) *fe { + fe[0] = fe2[0] + fe[1] = fe2[1] + fe[2] = fe2[2] + fe[3] = fe2[3] + fe[4] = fe2[4] + fe[5] = fe2[5] + return fe +} + +func (fe *fe) bytes() []byte { + out := make([]byte, 48) + var a int + for i := 0; i < 6; i++ { + a = 48 - i*8 + out[a-1] = byte(fe[i]) + out[a-2] = byte(fe[i] >> 8) + out[a-3] = byte(fe[i] >> 16) + out[a-4] = byte(fe[i] >> 24) + out[a-5] = byte(fe[i] >> 32) + out[a-6] = byte(fe[i] >> 40) + out[a-7] = byte(fe[i] >> 48) + out[a-8] = byte(fe[i] >> 56) + } + return out +} + +func (fe *fe) big() *big.Int { + return new(big.Int).SetBytes(fe.bytes()) +} + +func (fe *fe) string() (s string) { + for i := 5; i >= 0; i-- { + s = fmt.Sprintf("%s%16.16x", s, fe[i]) + } + return "0x" + s +} + +func (fe *fe) zero() *fe { + fe[0] = 0 + fe[1] = 0 + fe[2] = 0 + fe[3] = 0 + fe[4] = 0 + fe[5] = 0 + return fe +} + +func (fe *fe) one() *fe { + return fe.set(r1) +} + +func (fe *fe) rand(r io.Reader) (*fe, error) { + bi, err := rand.Int(r, modulus.big()) + if err != nil { + return nil, err + } + return fe.setBig(bi), nil +} + +func (fe *fe) isValid() bool { + return fe.cmp(&modulus) < 0 +} + +func (fe *fe) isOdd() bool { + var mask uint64 = 1 + return fe[0]&mask != 0 +} + +func (fe *fe) isEven() bool { + var mask uint64 = 1 + return fe[0]&mask == 0 +} + +func (fe *fe) isZero() bool { + return (fe[5] | fe[4] | fe[3] | fe[2] | fe[1] | fe[0]) == 0 +} + +func (fe *fe) isOne() bool { + return fe.equal(r1) +} + +func (fe *fe) cmp(fe2 *fe) int { + for i := 5; i >= 0; i-- { + if fe[i] > fe2[i] { + return 1 + } else if fe[i] < fe2[i] { + return -1 + } + } + return 0 +} + +func (fe *fe) equal(fe2 *fe) bool { + return fe2[0] == fe[0] && fe2[1] == fe[1] && fe2[2] == fe[2] && fe2[3] == fe[3] && fe2[4] == fe[4] && fe2[5] == fe[5] +} + +func (e *fe) sign() bool { + r := new(fe) + fromMont(r, e) + return r[0]&1 == 0 +} + +func (fe *fe) div2(e uint64) { + fe[0] = fe[0]>>1 | fe[1]<<63 + fe[1] = fe[1]>>1 | fe[2]<<63 + fe[2] = fe[2]>>1 | fe[3]<<63 + fe[3] = fe[3]>>1 | fe[4]<<63 + fe[4] = fe[4]>>1 | fe[5]<<63 + fe[5] = fe[5]>>1 | e<<63 +} + +func (fe *fe) mul2() uint64 { + e := fe[5] >> 63 + fe[5] = fe[5]<<1 | fe[4]>>63 + fe[4] = fe[4]<<1 | fe[3]>>63 + fe[3] = fe[3]<<1 | fe[2]>>63 + fe[2] = fe[2]<<1 | fe[1]>>63 + fe[1] = fe[1]<<1 | fe[0]>>63 + fe[0] = fe[0] << 1 + return e +} + +func (e *fe2) zero() *fe2 { + e[0].zero() + e[1].zero() + return e +} + +func (e *fe2) one() *fe2 { + e[0].one() + e[1].zero() + return e +} + +func (e *fe2) set(e2 *fe2) *fe2 { + e[0].set(&e2[0]) + e[1].set(&e2[1]) + return e +} + +func (e *fe2) rand(r io.Reader) (*fe2, error) { + a0, err := new(fe).rand(r) + if err != nil { + return nil, err + } + a1, err := new(fe).rand(r) + if err != nil { + return nil, err + } + return &fe2{*a0, *a1}, nil +} + +func (e *fe2) isOne() bool { + return e[0].isOne() && e[1].isZero() +} + +func (e *fe2) isZero() bool { + return e[0].isZero() && e[1].isZero() +} + +func (e *fe2) equal(e2 *fe2) bool { + return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) +} + +func (e *fe2) sign() bool { + r := new(fe) + if !e[0].isZero() { + fromMont(r, &e[0]) + return r[0]&1 == 0 + } + fromMont(r, &e[1]) + return r[0]&1 == 0 +} + +func (e *fe6) zero() *fe6 { + e[0].zero() + e[1].zero() + e[2].zero() + return e +} + +func (e *fe6) one() *fe6 { + e[0].one() + e[1].zero() + e[2].zero() + return e +} + +func (e *fe6) set(e2 *fe6) *fe6 { + e[0].set(&e2[0]) + e[1].set(&e2[1]) + e[2].set(&e2[2]) + return e +} + +func (e *fe6) rand(r io.Reader) (*fe6, error) { + a0, err := new(fe2).rand(r) + if err != nil { + return nil, err + } + a1, err := new(fe2).rand(r) + if err != nil { + return nil, err + } + a2, err := new(fe2).rand(r) + if err != nil { + return nil, err + } + return &fe6{*a0, *a1, *a2}, nil +} + +func (e *fe6) isOne() bool { + return e[0].isOne() && e[1].isZero() && e[2].isZero() +} + +func (e *fe6) isZero() bool { + return e[0].isZero() && e[1].isZero() && e[2].isZero() +} + +func (e *fe6) equal(e2 *fe6) bool { + return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) && e[2].equal(&e2[2]) +} + +func (e *fe12) zero() *fe12 { + e[0].zero() + e[1].zero() + return e +} + +func (e *fe12) one() *fe12 { + e[0].one() + e[1].zero() + return e +} + +func (e *fe12) set(e2 *fe12) *fe12 { + e[0].set(&e2[0]) + e[1].set(&e2[1]) + return e +} + +func (e *fe12) rand(r io.Reader) (*fe12, error) { + a0, err := new(fe6).rand(r) + if err != nil { + return nil, err + } + a1, err := new(fe6).rand(r) + if err != nil { + return nil, err + } + return &fe12{*a0, *a1}, nil +} + +func (e *fe12) isOne() bool { + return e[0].isOne() && e[1].isZero() +} + +func (e *fe12) isZero() bool { + return e[0].isZero() && e[1].isZero() +} + +func (e *fe12) equal(e2 *fe12) bool { + return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) +} diff --git a/crypto/bls12381/field_element_test.go b/crypto/bls12381/field_element_test.go new file mode 100644 index 00000000..70bbe5cf --- /dev/null +++ b/crypto/bls12381/field_element_test.go @@ -0,0 +1,250 @@ +package bls12381 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +func TestFieldElementValidation(t *testing.T) { + zero := new(fe).zero() + if !zero.isValid() { + t.Fatal("zero must be valid") + } + one := new(fe).one() + if !one.isValid() { + t.Fatal("one must be valid") + } + if modulus.isValid() { + t.Fatal("modulus must be invalid") + } + n := modulus.big() + n.Add(n, big.NewInt(1)) + if new(fe).setBig(n).isValid() { + t.Fatal("number greater than modulus must be invalid") + } +} + +func TestFieldElementEquality(t *testing.T) { + // fe + zero := new(fe).zero() + if !zero.equal(zero) { + t.Fatal("0 == 0") + } + one := new(fe).one() + if !one.equal(one) { + t.Fatal("1 == 1") + } + a, _ := new(fe).rand(rand.Reader) + if !a.equal(a) { + t.Fatal("a == a") + } + b := new(fe) + add(b, a, one) + if a.equal(b) { + t.Fatal("a != a + 1") + } + // fe2 + zero2 := new(fe2).zero() + if !zero2.equal(zero2) { + t.Fatal("0 == 0") + } + one2 := new(fe2).one() + if !one2.equal(one2) { + t.Fatal("1 == 1") + } + a2, _ := new(fe2).rand(rand.Reader) + if !a2.equal(a2) { + t.Fatal("a == a") + } + b2 := new(fe2) + fp2 := newFp2() + fp2.add(b2, a2, one2) + if a2.equal(b2) { + t.Fatal("a != a + 1") + } + // fe6 + zero6 := new(fe6).zero() + if !zero6.equal(zero6) { + t.Fatal("0 == 0") + } + one6 := new(fe6).one() + if !one6.equal(one6) { + t.Fatal("1 == 1") + } + a6, _ := new(fe6).rand(rand.Reader) + if !a6.equal(a6) { + t.Fatal("a == a") + } + b6 := new(fe6) + fp6 := newFp6(fp2) + fp6.add(b6, a6, one6) + if a6.equal(b6) { + t.Fatal("a != a + 1") + } + // fe12 + zero12 := new(fe12).zero() + if !zero12.equal(zero12) { + t.Fatal("0 == 0") + } + one12 := new(fe12).one() + if !one12.equal(one12) { + t.Fatal("1 == 1") + } + a12, _ := new(fe12).rand(rand.Reader) + if !a12.equal(a12) { + t.Fatal("a == a") + } + b12 := new(fe12) + fp12 := newFp12(fp6) + fp12.add(b12, a12, one12) + if a12.equal(b12) { + t.Fatal("a != a + 1") + } +} + +func TestFieldElementHelpers(t *testing.T) { + // fe + zero := new(fe).zero() + if !zero.isZero() { + t.Fatal("'zero' is not zero") + } + one := new(fe).one() + if !one.isOne() { + t.Fatal("'one' is not one") + } + odd := new(fe).setBig(big.NewInt(1)) + if !odd.isOdd() { + t.Fatal("1 must be odd") + } + if odd.isEven() { + t.Fatal("1 must not be even") + } + even := new(fe).setBig(big.NewInt(2)) + if !even.isEven() { + t.Fatal("2 must be even") + } + if even.isOdd() { + t.Fatal("2 must not be odd") + } + // fe2 + zero2 := new(fe2).zero() + if !zero2.isZero() { + t.Fatal("'zero' is not zero, 2") + } + one2 := new(fe2).one() + if !one2.isOne() { + t.Fatal("'one' is not one, 2") + } + // fe6 + zero6 := new(fe6).zero() + if !zero6.isZero() { + t.Fatal("'zero' is not zero, 6") + } + one6 := new(fe6).one() + if !one6.isOne() { + t.Fatal("'one' is not one, 6") + } + // fe12 + zero12 := new(fe12).zero() + if !zero12.isZero() { + t.Fatal("'zero' is not zero, 12") + } + one12 := new(fe12).one() + if !one12.isOne() { + t.Fatal("'one' is not one, 12") + } +} + +func TestFieldElementSerialization(t *testing.T) { + t.Run("zero", func(t *testing.T) { + in := make([]byte, 48) + fe := new(fe).setBytes(in) + if !fe.isZero() { + t.Fatal("bad serialization") + } + if !bytes.Equal(in, fe.bytes()) { + t.Fatal("bad serialization") + } + }) + t.Run("bytes", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b := new(fe).setBytes(a.bytes()) + if !a.equal(b) { + t.Fatal("bad serialization") + } + } + }) + t.Run("big", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b := new(fe).setBig(a.big()) + if !a.equal(b) { + t.Fatal("bad encoding or decoding") + } + } + }) + t.Run("string", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, err := new(fe).setString(a.string()) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad encoding or decoding") + } + } + }) +} + +func TestFieldElementByteInputs(t *testing.T) { + zero := new(fe).zero() + in := make([]byte, 0) + a := new(fe).setBytes(in) + if !a.equal(zero) { + t.Fatal("bad serialization") + } + in = make([]byte, 48) + a = new(fe).setBytes(in) + if !a.equal(zero) { + t.Fatal("bad serialization") + } + in = make([]byte, 64) + a = new(fe).setBytes(in) + if !a.equal(zero) { + t.Fatal("bad serialization") + } + in = make([]byte, 49) + in[47] = 1 + normalOne := &fe{1, 0, 0, 0, 0, 0} + a = new(fe).setBytes(in) + if !a.equal(normalOne) { + t.Fatal("bad serialization") + } +} + +func TestFieldElementCopy(t *testing.T) { + a, _ := new(fe).rand(rand.Reader) + b := new(fe).set(a) + if !a.equal(b) { + t.Fatal("bad copy, 1") + } + a2, _ := new(fe2).rand(rand.Reader) + b2 := new(fe2).set(a2) + if !a2.equal(b2) { + t.Fatal("bad copy, 2") + } + a6, _ := new(fe6).rand(rand.Reader) + b6 := new(fe6).set(a6) + if !a6.equal(b6) { + t.Fatal("bad copy, 6") + } + a12, _ := new(fe12).rand(rand.Reader) + b12 := new(fe12).set(a12) + if !a12.equal(b12) { + t.Fatal("bad copy, 12") + } +} diff --git a/crypto/bls12381/fp.go b/crypto/bls12381/fp.go new file mode 100644 index 00000000..09f6f49b --- /dev/null +++ b/crypto/bls12381/fp.go @@ -0,0 +1,167 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" +) + +func fromBytes(in []byte) (*fe, error) { + fe := &fe{} + if len(in) != 48 { + return nil, errors.New("input string should be equal 48 bytes") + } + fe.setBytes(in) + if !fe.isValid() { + return nil, errors.New("must be less than modulus") + } + toMont(fe, fe) + return fe, nil +} + +func fromBig(in *big.Int) (*fe, error) { + fe := new(fe).setBig(in) + if !fe.isValid() { + return nil, errors.New("invalid input string") + } + toMont(fe, fe) + return fe, nil +} + +func fromString(in string) (*fe, error) { + fe, err := new(fe).setString(in) + if err != nil { + return nil, err + } + if !fe.isValid() { + return nil, errors.New("invalid input string") + } + toMont(fe, fe) + return fe, nil +} + +func toBytes(e *fe) []byte { + e2 := new(fe) + fromMont(e2, e) + return e2.bytes() +} + +func toBig(e *fe) *big.Int { + e2 := new(fe) + fromMont(e2, e) + return e2.big() +} + +func toString(e *fe) (s string) { + e2 := new(fe) + fromMont(e2, e) + return e2.string() +} + +func toMont(c, a *fe) { + mul(c, a, r2) +} + +func fromMont(c, a *fe) { + mul(c, a, &fe{1}) +} + +func exp(c, a *fe, e *big.Int) { + z := new(fe).set(r1) + for i := e.BitLen(); i >= 0; i-- { + mul(z, z, z) + if e.Bit(i) == 1 { + mul(z, z, a) + } + } + c.set(z) +} + +func inverse(inv, e *fe) { + if e.isZero() { + inv.zero() + return + } + u := new(fe).set(&modulus) + v := new(fe).set(e) + s := &fe{1} + r := &fe{0} + var k int + var z uint64 + var found = false + // Phase 1 + for i := 0; i < 768; i++ { + if v.isZero() { + found = true + break + } + if u.isEven() { + u.div2(0) + s.mul2() + } else if v.isEven() { + v.div2(0) + z += r.mul2() + } else if u.cmp(v) == 1 { + lsubAssign(u, v) + u.div2(0) + laddAssign(r, s) + s.mul2() + } else { + lsubAssign(v, u) + v.div2(0) + laddAssign(s, r) + z += r.mul2() + } + k += 1 + } + + if !found { + inv.zero() + return + } + + if k < 381 || k > 381+384 { + inv.zero() + return + } + + if r.cmp(&modulus) != -1 || z > 0 { + lsubAssign(r, &modulus) + } + u.set(&modulus) + lsubAssign(u, r) + + // Phase 2 + for i := k; i < 384*2; i++ { + double(u, u) + } + inv.set(u) +} + +func sqrt(c, a *fe) bool { + u, v := new(fe).set(a), new(fe) + exp(c, a, pPlus1Over4) + square(v, c) + return u.equal(v) +} + +func isQuadraticNonResidue(elem *fe) bool { + result := new(fe) + exp(result, elem, pMinus1Over2) + return !result.isOne() +} diff --git a/crypto/bls12381/fp12.go b/crypto/bls12381/fp12.go new file mode 100644 index 00000000..51e949fe --- /dev/null +++ b/crypto/bls12381/fp12.go @@ -0,0 +1,277 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" +) + +type fp12 struct { + fp12temp + fp6 *fp6 +} + +type fp12temp struct { + t2 [9]*fe2 + t6 [5]*fe6 + t12 *fe12 +} + +func newFp12Temp() fp12temp { + t2 := [9]*fe2{} + t6 := [5]*fe6{} + for i := 0; i < len(t2); i++ { + t2[i] = &fe2{} + } + for i := 0; i < len(t6); i++ { + t6[i] = &fe6{} + } + return fp12temp{t2, t6, &fe12{}} +} + +func newFp12(fp6 *fp6) *fp12 { + t := newFp12Temp() + if fp6 == nil { + return &fp12{t, newFp6(nil)} + } + return &fp12{t, fp6} +} + +func (e *fp12) fp2() *fp2 { + return e.fp6.fp2 +} + +func (e *fp12) fromBytes(in []byte) (*fe12, error) { + if len(in) != 576 { + return nil, errors.New("input string should be larger than 96 bytes") + } + fp6 := e.fp6 + c1, err := fp6.fromBytes(in[:288]) + if err != nil { + return nil, err + } + c0, err := fp6.fromBytes(in[288:]) + if err != nil { + return nil, err + } + return &fe12{*c0, *c1}, nil +} + +func (e *fp12) toBytes(a *fe12) []byte { + fp6 := e.fp6 + out := make([]byte, 576) + copy(out[:288], fp6.toBytes(&a[1])) + copy(out[288:], fp6.toBytes(&a[0])) + return out +} + +func (e *fp12) new() *fe12 { + return new(fe12) +} + +func (e *fp12) zero() *fe12 { + return new(fe12) +} + +func (e *fp12) one() *fe12 { + return new(fe12).one() +} + +func (e *fp12) add(c, a, b *fe12) { + fp6 := e.fp6 + fp6.add(&c[0], &a[0], &b[0]) + fp6.add(&c[1], &a[1], &b[1]) +} + +func (e *fp12) double(c, a *fe12) { + fp6 := e.fp6 + fp6.double(&c[0], &a[0]) + fp6.double(&c[1], &a[1]) +} + +func (e *fp12) sub(c, a, b *fe12) { + fp6 := e.fp6 + fp6.sub(&c[0], &a[0], &b[0]) + fp6.sub(&c[1], &a[1], &b[1]) +} + +func (e *fp12) neg(c, a *fe12) { + fp6 := e.fp6 + fp6.neg(&c[0], &a[0]) + fp6.neg(&c[1], &a[1]) +} + +func (e *fp12) conjugate(c, a *fe12) { + fp6 := e.fp6 + c[0].set(&a[0]) + fp6.neg(&c[1], &a[1]) +} + +func (e *fp12) square(c, a *fe12) { + fp6, t := e.fp6, e.t6 + fp6.add(t[0], &a[0], &a[1]) + fp6.mul(t[2], &a[0], &a[1]) + fp6.mulByNonResidue(t[1], &a[1]) + fp6.addAssign(t[1], &a[0]) + fp6.mulByNonResidue(t[3], t[2]) + fp6.mulAssign(t[0], t[1]) + fp6.subAssign(t[0], t[2]) + fp6.sub(&c[0], t[0], t[3]) + fp6.double(&c[1], t[2]) +} + +func (e *fp12) cyclotomicSquare(c, a *fe12) { + t, fp2 := e.t2, e.fp2() + e.fp4Square(t[3], t[4], &a[0][0], &a[1][1]) + fp2.sub(t[2], t[3], &a[0][0]) + fp2.doubleAssign(t[2]) + fp2.add(&c[0][0], t[2], t[3]) + fp2.add(t[2], t[4], &a[1][1]) + fp2.doubleAssign(t[2]) + fp2.add(&c[1][1], t[2], t[4]) + e.fp4Square(t[3], t[4], &a[1][0], &a[0][2]) + e.fp4Square(t[5], t[6], &a[0][1], &a[1][2]) + fp2.sub(t[2], t[3], &a[0][1]) + fp2.doubleAssign(t[2]) + fp2.add(&c[0][1], t[2], t[3]) + fp2.add(t[2], t[4], &a[1][2]) + fp2.doubleAssign(t[2]) + fp2.add(&c[1][2], t[2], t[4]) + fp2.mulByNonResidue(t[3], t[6]) + fp2.add(t[2], t[3], &a[1][0]) + fp2.doubleAssign(t[2]) + fp2.add(&c[1][0], t[2], t[3]) + fp2.sub(t[2], t[5], &a[0][2]) + fp2.doubleAssign(t[2]) + fp2.add(&c[0][2], t[2], t[5]) +} + +func (e *fp12) mul(c, a, b *fe12) { + t, fp6 := e.t6, e.fp6 + fp6.mul(t[1], &a[0], &b[0]) + fp6.mul(t[2], &a[1], &b[1]) + fp6.add(t[0], t[1], t[2]) + fp6.mulByNonResidue(t[2], t[2]) + fp6.add(t[3], t[1], t[2]) + fp6.add(t[1], &a[0], &a[1]) + fp6.add(t[2], &b[0], &b[1]) + fp6.mulAssign(t[1], t[2]) + c[0].set(t[3]) + fp6.sub(&c[1], t[1], t[0]) +} + +func (e *fp12) mulAssign(a, b *fe12) { + t, fp6 := e.t6, e.fp6 + fp6.mul(t[1], &a[0], &b[0]) + fp6.mul(t[2], &a[1], &b[1]) + fp6.add(t[0], t[1], t[2]) + fp6.mulByNonResidue(t[2], t[2]) + fp6.add(t[3], t[1], t[2]) + fp6.add(t[1], &a[0], &a[1]) + fp6.add(t[2], &b[0], &b[1]) + fp6.mulAssign(t[1], t[2]) + a[0].set(t[3]) + fp6.sub(&a[1], t[1], t[0]) +} + +func (e *fp12) fp4Square(c0, c1, a0, a1 *fe2) { + t, fp2 := e.t2, e.fp2() + fp2.square(t[0], a0) + fp2.square(t[1], a1) + fp2.mulByNonResidue(t[2], t[1]) + fp2.add(c0, t[2], t[0]) + fp2.add(t[2], a0, a1) + fp2.squareAssign(t[2]) + fp2.subAssign(t[2], t[0]) + fp2.sub(c1, t[2], t[1]) +} + +func (e *fp12) inverse(c, a *fe12) { + fp6, t := e.fp6, e.t6 + fp6.square(t[0], &a[0]) + fp6.square(t[1], &a[1]) + fp6.mulByNonResidue(t[1], t[1]) + fp6.sub(t[1], t[0], t[1]) + fp6.inverse(t[0], t[1]) + fp6.mul(&c[0], &a[0], t[0]) + fp6.mulAssign(t[0], &a[1]) + fp6.neg(&c[1], t[0]) +} + +func (e *fp12) mulBy014Assign(a *fe12, c0, c1, c4 *fe2) { + fp2, fp6, t, t2 := e.fp2(), e.fp6, e.t6, e.t2[0] + fp6.mulBy01(t[0], &a[0], c0, c1) + fp6.mulBy1(t[1], &a[1], c4) + fp2.add(t2, c1, c4) + fp6.add(t[2], &a[1], &a[0]) + fp6.mulBy01Assign(t[2], c0, t2) + fp6.subAssign(t[2], t[0]) + fp6.sub(&a[1], t[2], t[1]) + fp6.mulByNonResidue(t[1], t[1]) + fp6.add(&a[0], t[1], t[0]) +} + +func (e *fp12) exp(c, a *fe12, s *big.Int) { + z := e.one() + for i := s.BitLen() - 1; i >= 0; i-- { + e.square(z, z) + if s.Bit(i) == 1 { + e.mul(z, z, a) + } + } + c.set(z) +} + +func (e *fp12) cyclotomicExp(c, a *fe12, s *big.Int) { + z := e.one() + for i := s.BitLen() - 1; i >= 0; i-- { + e.cyclotomicSquare(z, z) + if s.Bit(i) == 1 { + e.mul(z, z, a) + } + } + c.set(z) +} + +func (e *fp12) frobeniusMap(c, a *fe12, power uint) { + fp6 := e.fp6 + fp6.frobeniusMap(&c[0], &a[0], power) + fp6.frobeniusMap(&c[1], &a[1], power) + switch power { + case 0: + return + case 6: + fp6.neg(&c[1], &c[1]) + default: + fp6.mulByBaseField(&c[1], &c[1], &frobeniusCoeffs12[power]) + } +} + +func (e *fp12) frobeniusMapAssign(a *fe12, power uint) { + fp6 := e.fp6 + fp6.frobeniusMapAssign(&a[0], power) + fp6.frobeniusMapAssign(&a[1], power) + switch power { + case 0: + return + case 6: + fp6.neg(&a[1], &a[1]) + default: + fp6.mulByBaseField(&a[1], &a[1], &frobeniusCoeffs12[power]) + } +} diff --git a/crypto/bls12381/fp2.go b/crypto/bls12381/fp2.go new file mode 100644 index 00000000..0f1c5a23 --- /dev/null +++ b/crypto/bls12381/fp2.go @@ -0,0 +1,252 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" +) + +type fp2Temp struct { + t [4]*fe +} + +type fp2 struct { + fp2Temp +} + +func newFp2Temp() fp2Temp { + t := [4]*fe{} + for i := 0; i < len(t); i++ { + t[i] = &fe{} + } + return fp2Temp{t} +} + +func newFp2() *fp2 { + t := newFp2Temp() + return &fp2{t} +} + +func (e *fp2) fromBytes(in []byte) (*fe2, error) { + if len(in) != 96 { + return nil, errors.New("length of input string should be 96 bytes") + } + c1, err := fromBytes(in[:48]) + if err != nil { + return nil, err + } + c0, err := fromBytes(in[48:]) + if err != nil { + return nil, err + } + return &fe2{*c0, *c1}, nil +} + +func (e *fp2) toBytes(a *fe2) []byte { + out := make([]byte, 96) + copy(out[:48], toBytes(&a[1])) + copy(out[48:], toBytes(&a[0])) + return out +} + +func (e *fp2) new() *fe2 { + return new(fe2).zero() +} + +func (e *fp2) zero() *fe2 { + return new(fe2).zero() +} + +func (e *fp2) one() *fe2 { + return new(fe2).one() +} + +func (e *fp2) add(c, a, b *fe2) { + add(&c[0], &a[0], &b[0]) + add(&c[1], &a[1], &b[1]) +} + +func (e *fp2) addAssign(a, b *fe2) { + addAssign(&a[0], &b[0]) + addAssign(&a[1], &b[1]) +} + +func (e *fp2) ladd(c, a, b *fe2) { + ladd(&c[0], &a[0], &b[0]) + ladd(&c[1], &a[1], &b[1]) +} + +func (e *fp2) double(c, a *fe2) { + double(&c[0], &a[0]) + double(&c[1], &a[1]) +} + +func (e *fp2) doubleAssign(a *fe2) { + doubleAssign(&a[0]) + doubleAssign(&a[1]) +} + +func (e *fp2) ldouble(c, a *fe2) { + ldouble(&c[0], &a[0]) + ldouble(&c[1], &a[1]) +} + +func (e *fp2) sub(c, a, b *fe2) { + sub(&c[0], &a[0], &b[0]) + sub(&c[1], &a[1], &b[1]) +} + +func (e *fp2) subAssign(c, a *fe2) { + subAssign(&c[0], &a[0]) + subAssign(&c[1], &a[1]) +} + +func (e *fp2) neg(c, a *fe2) { + neg(&c[0], &a[0]) + neg(&c[1], &a[1]) +} + +func (e *fp2) mul(c, a, b *fe2) { + t := e.t + mul(t[1], &a[0], &b[0]) + mul(t[2], &a[1], &b[1]) + add(t[0], &a[0], &a[1]) + add(t[3], &b[0], &b[1]) + sub(&c[0], t[1], t[2]) + addAssign(t[1], t[2]) + mul(t[0], t[0], t[3]) + sub(&c[1], t[0], t[1]) +} + +func (e *fp2) mulAssign(a, b *fe2) { + t := e.t + mul(t[1], &a[0], &b[0]) + mul(t[2], &a[1], &b[1]) + add(t[0], &a[0], &a[1]) + add(t[3], &b[0], &b[1]) + sub(&a[0], t[1], t[2]) + addAssign(t[1], t[2]) + mul(t[0], t[0], t[3]) + sub(&a[1], t[0], t[1]) +} + +func (e *fp2) square(c, a *fe2) { + t := e.t + ladd(t[0], &a[0], &a[1]) + sub(t[1], &a[0], &a[1]) + ldouble(t[2], &a[0]) + mul(&c[0], t[0], t[1]) + mul(&c[1], t[2], &a[1]) +} + +func (e *fp2) squareAssign(a *fe2) { + t := e.t + ladd(t[0], &a[0], &a[1]) + sub(t[1], &a[0], &a[1]) + ldouble(t[2], &a[0]) + mul(&a[0], t[0], t[1]) + mul(&a[1], t[2], &a[1]) +} + +func (e *fp2) mulByNonResidue(c, a *fe2) { + t := e.t + sub(t[0], &a[0], &a[1]) + add(&c[1], &a[0], &a[1]) + c[0].set(t[0]) +} + +func (e *fp2) mulByB(c, a *fe2) { + t := e.t + double(t[0], &a[0]) + double(t[1], &a[1]) + doubleAssign(t[0]) + doubleAssign(t[1]) + sub(&c[0], t[0], t[1]) + add(&c[1], t[0], t[1]) +} + +func (e *fp2) inverse(c, a *fe2) { + t := e.t + square(t[0], &a[0]) + square(t[1], &a[1]) + addAssign(t[0], t[1]) + inverse(t[0], t[0]) + mul(&c[0], &a[0], t[0]) + mul(t[0], t[0], &a[1]) + neg(&c[1], t[0]) +} + +func (e *fp2) mulByFq(c, a *fe2, b *fe) { + mul(&c[0], &a[0], b) + mul(&c[1], &a[1], b) +} + +func (e *fp2) exp(c, a *fe2, s *big.Int) { + z := e.one() + for i := s.BitLen() - 1; i >= 0; i-- { + e.square(z, z) + if s.Bit(i) == 1 { + e.mul(z, z, a) + } + } + c.set(z) +} + +func (e *fp2) frobeniusMap(c, a *fe2, power uint) { + c[0].set(&a[0]) + if power%2 == 1 { + neg(&c[1], &a[1]) + return + } + c[1].set(&a[1]) +} + +func (e *fp2) frobeniusMapAssign(a *fe2, power uint) { + if power%2 == 1 { + neg(&a[1], &a[1]) + return + } +} + +func (e *fp2) sqrt(c, a *fe2) bool { + u, x0, a1, alpha := &fe2{}, &fe2{}, &fe2{}, &fe2{} + u.set(a) + e.exp(a1, a, pMinus3Over4) + e.square(alpha, a1) + e.mul(alpha, alpha, a) + e.mul(x0, a1, a) + if alpha.equal(negativeOne2) { + neg(&c[0], &x0[1]) + c[1].set(&x0[0]) + return true + } + e.add(alpha, alpha, e.one()) + e.exp(alpha, alpha, pMinus1Over2) + e.mul(c, alpha, x0) + e.square(alpha, c) + return alpha.equal(u) +} + +func (e *fp2) isQuadraticNonResidue(a *fe2) bool { + // https://github.com/leovt/constructible/wiki/Taking-Square-Roots-in-quadratic-extension-Fields + c0, c1 := new(fe), new(fe) + square(c0, &a[0]) + square(c1, &a[1]) + add(c1, c1, c0) + return isQuadraticNonResidue(c1) +} diff --git a/crypto/bls12381/fp6.go b/crypto/bls12381/fp6.go new file mode 100644 index 00000000..304173ba --- /dev/null +++ b/crypto/bls12381/fp6.go @@ -0,0 +1,351 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" +) + +type fp6Temp struct { + t [6]*fe2 +} + +type fp6 struct { + fp2 *fp2 + fp6Temp +} + +func newFp6Temp() fp6Temp { + t := [6]*fe2{} + for i := 0; i < len(t); i++ { + t[i] = &fe2{} + } + return fp6Temp{t} +} + +func newFp6(f *fp2) *fp6 { + t := newFp6Temp() + if f == nil { + return &fp6{newFp2(), t} + } + return &fp6{f, t} +} + +func (e *fp6) fromBytes(b []byte) (*fe6, error) { + if len(b) < 288 { + return nil, errors.New("input string should be larger than 288 bytes") + } + fp2 := e.fp2 + u2, err := fp2.fromBytes(b[:96]) + if err != nil { + return nil, err + } + u1, err := fp2.fromBytes(b[96:192]) + if err != nil { + return nil, err + } + u0, err := fp2.fromBytes(b[192:]) + if err != nil { + return nil, err + } + return &fe6{*u0, *u1, *u2}, nil +} + +func (e *fp6) toBytes(a *fe6) []byte { + fp2 := e.fp2 + out := make([]byte, 288) + copy(out[:96], fp2.toBytes(&a[2])) + copy(out[96:192], fp2.toBytes(&a[1])) + copy(out[192:], fp2.toBytes(&a[0])) + return out +} + +func (e *fp6) new() *fe6 { + return new(fe6) +} + +func (e *fp6) zero() *fe6 { + return new(fe6) +} + +func (e *fp6) one() *fe6 { + return new(fe6).one() +} + +func (e *fp6) add(c, a, b *fe6) { + fp2 := e.fp2 + fp2.add(&c[0], &a[0], &b[0]) + fp2.add(&c[1], &a[1], &b[1]) + fp2.add(&c[2], &a[2], &b[2]) +} + +func (e *fp6) addAssign(a, b *fe6) { + fp2 := e.fp2 + fp2.addAssign(&a[0], &b[0]) + fp2.addAssign(&a[1], &b[1]) + fp2.addAssign(&a[2], &b[2]) +} + +func (e *fp6) double(c, a *fe6) { + fp2 := e.fp2 + fp2.double(&c[0], &a[0]) + fp2.double(&c[1], &a[1]) + fp2.double(&c[2], &a[2]) +} + +func (e *fp6) doubleAssign(a *fe6) { + fp2 := e.fp2 + fp2.doubleAssign(&a[0]) + fp2.doubleAssign(&a[1]) + fp2.doubleAssign(&a[2]) +} + +func (e *fp6) sub(c, a, b *fe6) { + fp2 := e.fp2 + fp2.sub(&c[0], &a[0], &b[0]) + fp2.sub(&c[1], &a[1], &b[1]) + fp2.sub(&c[2], &a[2], &b[2]) +} + +func (e *fp6) subAssign(a, b *fe6) { + fp2 := e.fp2 + fp2.subAssign(&a[0], &b[0]) + fp2.subAssign(&a[1], &b[1]) + fp2.subAssign(&a[2], &b[2]) +} + +func (e *fp6) neg(c, a *fe6) { + fp2 := e.fp2 + fp2.neg(&c[0], &a[0]) + fp2.neg(&c[1], &a[1]) + fp2.neg(&c[2], &a[2]) +} + +func (e *fp6) mul(c, a, b *fe6) { + fp2, t := e.fp2, e.t + fp2.mul(t[0], &a[0], &b[0]) + fp2.mul(t[1], &a[1], &b[1]) + fp2.mul(t[2], &a[2], &b[2]) + fp2.add(t[3], &a[1], &a[2]) + fp2.add(t[4], &b[1], &b[2]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[1], t[2]) + fp2.subAssign(t[3], t[4]) + fp2.mulByNonResidue(t[3], t[3]) + fp2.add(t[5], t[0], t[3]) + fp2.add(t[3], &a[0], &a[1]) + fp2.add(t[4], &b[0], &b[1]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[0], t[1]) + fp2.subAssign(t[3], t[4]) + fp2.mulByNonResidue(t[4], t[2]) + fp2.add(&c[1], t[3], t[4]) + fp2.add(t[3], &a[0], &a[2]) + fp2.add(t[4], &b[0], &b[2]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[0], t[2]) + fp2.subAssign(t[3], t[4]) + fp2.add(&c[2], t[1], t[3]) + c[0].set(t[5]) +} + +func (e *fp6) mulAssign(a, b *fe6) { + fp2, t := e.fp2, e.t + fp2.mul(t[0], &a[0], &b[0]) + fp2.mul(t[1], &a[1], &b[1]) + fp2.mul(t[2], &a[2], &b[2]) + fp2.add(t[3], &a[1], &a[2]) + fp2.add(t[4], &b[1], &b[2]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[1], t[2]) + fp2.subAssign(t[3], t[4]) + fp2.mulByNonResidue(t[3], t[3]) + fp2.add(t[5], t[0], t[3]) + fp2.add(t[3], &a[0], &a[1]) + fp2.add(t[4], &b[0], &b[1]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[0], t[1]) + fp2.subAssign(t[3], t[4]) + fp2.mulByNonResidue(t[4], t[2]) + fp2.add(&a[1], t[3], t[4]) + fp2.add(t[3], &a[0], &a[2]) + fp2.add(t[4], &b[0], &b[2]) + fp2.mulAssign(t[3], t[4]) + fp2.add(t[4], t[0], t[2]) + fp2.subAssign(t[3], t[4]) + fp2.add(&a[2], t[1], t[3]) + a[0].set(t[5]) +} + +func (e *fp6) square(c, a *fe6) { + fp2, t := e.fp2, e.t + fp2.square(t[0], &a[0]) + fp2.mul(t[1], &a[0], &a[1]) + fp2.doubleAssign(t[1]) + fp2.sub(t[2], &a[0], &a[1]) + fp2.addAssign(t[2], &a[2]) + fp2.squareAssign(t[2]) + fp2.mul(t[3], &a[1], &a[2]) + fp2.doubleAssign(t[3]) + fp2.square(t[4], &a[2]) + fp2.mulByNonResidue(t[5], t[3]) + fp2.add(&c[0], t[0], t[5]) + fp2.mulByNonResidue(t[5], t[4]) + fp2.add(&c[1], t[1], t[5]) + fp2.addAssign(t[1], t[2]) + fp2.addAssign(t[1], t[3]) + fp2.addAssign(t[0], t[4]) + fp2.sub(&c[2], t[1], t[0]) +} + +func (e *fp6) mulBy01Assign(a *fe6, b0, b1 *fe2) { + fp2, t := e.fp2, e.t + fp2.mul(t[0], &a[0], b0) + fp2.mul(t[1], &a[1], b1) + fp2.add(t[5], &a[1], &a[2]) + fp2.mul(t[2], b1, t[5]) + fp2.subAssign(t[2], t[1]) + fp2.mulByNonResidue(t[2], t[2]) + fp2.add(t[5], &a[0], &a[2]) + fp2.mul(t[3], b0, t[5]) + fp2.subAssign(t[3], t[0]) + fp2.add(&a[2], t[3], t[1]) + fp2.add(t[4], b0, b1) + fp2.add(t[5], &a[0], &a[1]) + fp2.mulAssign(t[4], t[5]) + fp2.subAssign(t[4], t[0]) + fp2.sub(&a[1], t[4], t[1]) + fp2.add(&a[0], t[2], t[0]) +} + +func (e *fp6) mulBy01(c, a *fe6, b0, b1 *fe2) { + fp2, t := e.fp2, e.t + fp2.mul(t[0], &a[0], b0) + fp2.mul(t[1], &a[1], b1) + fp2.add(t[2], &a[1], &a[2]) + fp2.mulAssign(t[2], b1) + fp2.subAssign(t[2], t[1]) + fp2.mulByNonResidue(t[2], t[2]) + fp2.add(t[3], &a[0], &a[2]) + fp2.mulAssign(t[3], b0) + fp2.subAssign(t[3], t[0]) + fp2.add(&c[2], t[3], t[1]) + fp2.add(t[4], b0, b1) + fp2.add(t[3], &a[0], &a[1]) + fp2.mulAssign(t[4], t[3]) + fp2.subAssign(t[4], t[0]) + fp2.sub(&c[1], t[4], t[1]) + fp2.add(&c[0], t[2], t[0]) +} + +func (e *fp6) mulBy1(c, a *fe6, b1 *fe2) { + fp2, t := e.fp2, e.t + fp2.mul(t[0], &a[2], b1) + fp2.mul(&c[2], &a[1], b1) + fp2.mul(&c[1], &a[0], b1) + fp2.mulByNonResidue(&c[0], t[0]) +} + +func (e *fp6) mulByNonResidue(c, a *fe6) { + fp2, t := e.fp2, e.t + t[0].set(&a[0]) + fp2.mulByNonResidue(&c[0], &a[2]) + c[2].set(&a[1]) + c[1].set(t[0]) +} + +func (e *fp6) mulByBaseField(c, a *fe6, b *fe2) { + fp2 := e.fp2 + fp2.mul(&c[0], &a[0], b) + fp2.mul(&c[1], &a[1], b) + fp2.mul(&c[2], &a[2], b) +} + +func (e *fp6) exp(c, a *fe6, s *big.Int) { + z := e.one() + for i := s.BitLen() - 1; i >= 0; i-- { + e.square(z, z) + if s.Bit(i) == 1 { + e.mul(z, z, a) + } + } + c.set(z) +} + +func (e *fp6) inverse(c, a *fe6) { + fp2, t := e.fp2, e.t + fp2.square(t[0], &a[0]) + fp2.mul(t[1], &a[1], &a[2]) + fp2.mulByNonResidue(t[1], t[1]) + fp2.subAssign(t[0], t[1]) + fp2.square(t[1], &a[1]) + fp2.mul(t[2], &a[0], &a[2]) + fp2.subAssign(t[1], t[2]) + fp2.square(t[2], &a[2]) + fp2.mulByNonResidue(t[2], t[2]) + fp2.mul(t[3], &a[0], &a[1]) + fp2.subAssign(t[2], t[3]) + fp2.mul(t[3], &a[2], t[2]) + fp2.mul(t[4], &a[1], t[1]) + fp2.addAssign(t[3], t[4]) + fp2.mulByNonResidue(t[3], t[3]) + fp2.mul(t[4], &a[0], t[0]) + fp2.addAssign(t[3], t[4]) + fp2.inverse(t[3], t[3]) + fp2.mul(&c[0], t[0], t[3]) + fp2.mul(&c[1], t[2], t[3]) + fp2.mul(&c[2], t[1], t[3]) +} + +func (e *fp6) frobeniusMap(c, a *fe6, power uint) { + fp2 := e.fp2 + fp2.frobeniusMap(&c[0], &a[0], power) + fp2.frobeniusMap(&c[1], &a[1], power) + fp2.frobeniusMap(&c[2], &a[2], power) + switch power % 6 { + case 0: + return + case 3: + neg(&c[0][0], &a[1][1]) + c[1][1].set(&a[1][0]) + fp2.neg(&a[2], &a[2]) + default: + fp2.mul(&c[1], &c[1], &frobeniusCoeffs61[power%6]) + fp2.mul(&c[2], &c[2], &frobeniusCoeffs62[power%6]) + } +} + +func (e *fp6) frobeniusMapAssign(a *fe6, power uint) { + fp2 := e.fp2 + fp2.frobeniusMapAssign(&a[0], power) + fp2.frobeniusMapAssign(&a[1], power) + fp2.frobeniusMapAssign(&a[2], power) + t := e.t + switch power % 6 { + case 0: + return + case 3: + neg(&t[0][0], &a[1][1]) + a[1][1].set(&a[1][0]) + a[1][0].set(&t[0][0]) + fp2.neg(&a[2], &a[2]) + default: + fp2.mulAssign(&a[1], &frobeniusCoeffs61[power%6]) + fp2.mulAssign(&a[2], &frobeniusCoeffs62[power%6]) + } +} diff --git a/crypto/bls12381/fp_test.go b/crypto/bls12381/fp_test.go new file mode 100644 index 00000000..0bad35de --- /dev/null +++ b/crypto/bls12381/fp_test.go @@ -0,0 +1,1411 @@ +package bls12381 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +func TestFpSerialization(t *testing.T) { + t.Run("zero", func(t *testing.T) { + in := make([]byte, 48) + fe, err := fromBytes(in) + if err != nil { + t.Fatal(err) + } + if !fe.isZero() { + t.Fatal("bad serialization") + } + if !bytes.Equal(in, toBytes(fe)) { + t.Fatal("bad serialization") + } + }) + t.Run("bytes", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, err := fromBytes(toBytes(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad serialization") + } + } + }) + t.Run("string", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, err := fromString(toString(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad encoding or decoding") + } + } + }) + t.Run("big", func(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, err := fromBig(toBig(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad encoding or decoding") + } + } + }) +} + +func TestFpAdditionCrossAgainstBigInt(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + c := new(fe) + big_a := toBig(a) + big_b := toBig(b) + big_c := new(big.Int) + add(c, a, b) + out_1 := toBytes(c) + out_2 := padBytes(big_c.Add(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied A") + } + double(c, a) + out_1 = toBytes(c) + out_2 = padBytes(big_c.Add(big_a, big_a).Mod(big_c, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied B") + } + sub(c, a, b) + out_1 = toBytes(c) + out_2 = padBytes(big_c.Sub(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied C") + } + neg(c, a) + out_1 = toBytes(c) + out_2 = padBytes(big_c.Neg(big_a).Mod(big_c, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied D") + } + } +} + +func TestFpAdditionCrossAgainstBigIntAssigned(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + big_a, big_b := toBig(a), toBig(b) + addAssign(a, b) + out_1 := toBytes(a) + out_2 := padBytes(big_a.Add(big_a, big_b).Mod(big_a, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied A") + } + a, _ = new(fe).rand(rand.Reader) + big_a = toBig(a) + doubleAssign(a) + out_1 = toBytes(a) + out_2 = padBytes(big_a.Add(big_a, big_a).Mod(big_a, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied B") + } + a, _ = new(fe).rand(rand.Reader) + b, _ = new(fe).rand(rand.Reader) + big_a, big_b = toBig(a), toBig(b) + subAssign(a, b) + out_1 = toBytes(a) + out_2 = padBytes(big_a.Sub(big_a, big_b).Mod(big_a, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied A") + } + } +} + +func TestFpAdditionProperties(t *testing.T) { + for i := 0; i < fuz; i++ { + zero := new(fe).zero() + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + c_1, c_2 := new(fe), new(fe) + add(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a + 0 == a") + } + sub(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a - 0 == a") + } + double(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("2 * 0 == 0") + } + neg(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("-0 == 0") + } + sub(c_1, zero, a) + neg(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("0-a == -a") + } + double(c_1, a) + add(c_2, a, a) + if !c_1.equal(c_2) { + t.Fatal("2 * a == a + a") + } + add(c_1, a, b) + add(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + sub(c_1, a, b) + sub(c_2, b, a) + neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + c_x, _ := new(fe).rand(rand.Reader) + add(c_1, a, b) + add(c_1, c_1, c_x) + add(c_2, a, c_x) + add(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + sub(c_1, a, b) + sub(c_1, c_1, c_x) + sub(c_2, a, c_x) + sub(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a - b) - c == (a - c ) -b") + } + } +} + +func TestFpAdditionPropertiesAssigned(t *testing.T) { + for i := 0; i < fuz; i++ { + zero := new(fe).zero() + a, b := new(fe), new(fe) + _, _ = a.rand(rand.Reader) + b.set(a) + addAssign(a, zero) + if !a.equal(b) { + t.Fatal("a + 0 == a") + } + subAssign(a, zero) + if !a.equal(b) { + t.Fatal("a - 0 == a") + } + a.set(zero) + doubleAssign(a) + if !a.equal(zero) { + t.Fatal("2 * 0 == 0") + } + a.set(zero) + subAssign(a, b) + neg(b, b) + if !a.equal(b) { + t.Fatal("0-a == -a") + } + _, _ = a.rand(rand.Reader) + b.set(a) + doubleAssign(a) + addAssign(b, b) + if !a.equal(b) { + t.Fatal("2 * a == a + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1, c_2 := new(fe).set(a), new(fe).set(b) + addAssign(c_1, b) + addAssign(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1.set(a) + c_2.set(b) + subAssign(c_1, b) + subAssign(c_2, a) + neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c, _ := new(fe).rand(rand.Reader) + a0 := new(fe).set(a) + addAssign(a, b) + addAssign(a, c) + addAssign(b, c) + addAssign(b, a0) + if !a.equal(b) { + t.Fatal("(a + b) + c == (b + c) + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + _, _ = c.rand(rand.Reader) + a0.set(a) + subAssign(a, b) + subAssign(a, c) + subAssign(a0, c) + subAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a - b) - c == (a - c) -b") + } + } +} + +func TestFpLazyOperations(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + c, _ := new(fe).rand(rand.Reader) + c0 := new(fe) + c1 := new(fe) + ladd(c0, a, b) + add(c1, a, b) + mul(c0, c0, c) + mul(c1, c1, c) + if !c0.equal(c1) { + // l+ operator stands for lazy addition + t.Fatal("(a + b) * c == (a l+ b) * c") + } + _, _ = a.rand(rand.Reader) + b.set(a) + ldouble(a, a) + ladd(b, b, b) + if !a.equal(b) { + t.Fatal("2 l* a = a l+ a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + _, _ = c.rand(rand.Reader) + a0 := new(fe).set(a) + lsubAssign(a, b) + laddAssign(a, &modulus) + mul(a, a, c) + subAssign(a0, b) + mul(a0, a0, c) + if !a.equal(a0) { + t.Fatal("((a l- b) + p) * c = (a-b) * c") + } + } +} + +func TestFpMultiplicationCrossAgainstBigInt(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + c := new(fe) + big_a := toBig(a) + big_b := toBig(b) + big_c := new(big.Int) + mul(c, a, b) + out_1 := toBytes(c) + out_2 := padBytes(big_c.Mul(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) + if !bytes.Equal(out_1, out_2) { + t.Fatal("cross test against big.Int is not satisfied") + } + } +} + +func TestFpMultiplicationProperties(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + zero, one := new(fe).zero(), new(fe).one() + c_1, c_2 := new(fe), new(fe) + mul(c_1, a, zero) + if !c_1.equal(zero) { + t.Fatal("a * 0 == 0") + } + mul(c_1, a, one) + if !c_1.equal(a) { + t.Fatal("a * 1 == a") + } + mul(c_1, a, b) + mul(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a * b == b * a") + } + c_x, _ := new(fe).rand(rand.Reader) + mul(c_1, a, b) + mul(c_1, c_1, c_x) + mul(c_2, c_x, b) + mul(c_2, c_2, a) + if !c_1.equal(c_2) { + t.Fatal("(a * b) * c == (a * c) * b") + } + square(a, zero) + if !a.equal(zero) { + t.Fatal("0^2 == 0") + } + square(a, one) + if !a.equal(one) { + t.Fatal("1^2 == 1") + } + _, _ = a.rand(rand.Reader) + square(c_1, a) + mul(c_2, a, a) + if !c_1.equal(c_1) { + t.Fatal("a^2 == a*a") + } + } +} + +func TestFpExponentiation(t *testing.T) { + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + u := new(fe) + exp(u, a, big.NewInt(0)) + if !u.isOne() { + t.Fatal("a^0 == 1") + } + exp(u, a, big.NewInt(1)) + if !u.equal(a) { + t.Fatal("a^1 == a") + } + v := new(fe) + mul(u, a, a) + mul(u, u, u) + mul(u, u, u) + exp(v, a, big.NewInt(8)) + if !u.equal(v) { + t.Fatal("((a^2)^2)^2 == a^8") + } + p := modulus.big() + exp(u, a, p) + if !u.equal(a) { + t.Fatal("a^p == a") + } + exp(u, a, p.Sub(p, big.NewInt(1))) + if !u.isOne() { + t.Fatal("a^(p-1) == 1") + } + } +} + +func TestFpInversion(t *testing.T) { + for i := 0; i < fuz; i++ { + u := new(fe) + zero, one := new(fe).zero(), new(fe).one() + inverse(u, zero) + if !u.equal(zero) { + t.Fatal("(0^-1) == 0)") + } + inverse(u, one) + if !u.equal(one) { + t.Fatal("(1^-1) == 1)") + } + a, _ := new(fe).rand(rand.Reader) + inverse(u, a) + mul(u, u, a) + if !u.equal(one) { + t.Fatal("(r*a) * r*(a^-1) == r)") + } + v := new(fe) + p := modulus.big() + exp(u, a, p.Sub(p, big.NewInt(2))) + inverse(v, a) + if !v.equal(u) { + t.Fatal("a^(p-2) == a^-1") + } + } +} + +func TestFpSquareRoot(t *testing.T) { + r := new(fe) + if sqrt(r, nonResidue1) { + t.Fatal("non residue cannot have a sqrt") + } + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + aa, rr, r := &fe{}, &fe{}, &fe{} + square(aa, a) + if !sqrt(r, aa) { + t.Fatal("bad sqrt 1") + } + square(rr, r) + if !rr.equal(aa) { + t.Fatal("bad sqrt 2") + } + } +} + +func TestFpNonResidue(t *testing.T) { + if !isQuadraticNonResidue(nonResidue1) { + t.Fatal("element is quadratic non residue, 1") + } + if isQuadraticNonResidue(new(fe).one()) { + t.Fatal("one is not quadratic non residue") + } + if !isQuadraticNonResidue(new(fe).zero()) { + t.Fatal("should accept zero as quadratic non residue") + } + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + square(a, a) + if isQuadraticNonResidue(new(fe).one()) { + t.Fatal("element is not quadratic non residue") + } + } + for i := 0; i < fuz; i++ { + a, _ := new(fe).rand(rand.Reader) + if !sqrt(new(fe), a) { + if !isQuadraticNonResidue(a) { + t.Fatal("element is quadratic non residue, 2", i) + } + } else { + i -= 1 + } + } +} + +func TestFp2Serialization(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + b, err := field.fromBytes(field.toBytes(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad serialization") + } + } +} + +func TestFp2AdditionProperties(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + zero := field.zero() + a, _ := new(fe2).rand(rand.Reader) + b, _ := new(fe2).rand(rand.Reader) + c_1 := field.new() + c_2 := field.new() + field.add(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a + 0 == a") + } + field.sub(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a - 0 == a") + } + field.double(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("2 * 0 == 0") + } + field.neg(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("-0 == 0") + } + field.sub(c_1, zero, a) + field.neg(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("0-a == -a") + } + field.double(c_1, a) + field.add(c_2, a, a) + if !c_1.equal(c_2) { + t.Fatal("2 * a == a + a") + } + field.add(c_1, a, b) + field.add(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + field.sub(c_1, a, b) + field.sub(c_2, b, a) + field.neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + c_x, _ := new(fe2).rand(rand.Reader) + field.add(c_1, a, b) + field.add(c_1, c_1, c_x) + field.add(c_2, a, c_x) + field.add(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + field.sub(c_1, a, b) + field.sub(c_1, c_1, c_x) + field.sub(c_2, a, c_x) + field.sub(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a - b) - c == (a - c ) -b") + } + } +} + +func TestFp2AdditionPropertiesAssigned(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + zero := new(fe2).zero() + a, b := new(fe2), new(fe2) + _, _ = a.rand(rand.Reader) + b.set(a) + field.addAssign(a, zero) + if !a.equal(b) { + t.Fatal("a + 0 == a") + } + field.subAssign(a, zero) + if !a.equal(b) { + t.Fatal("a - 0 == a") + } + a.set(zero) + field.doubleAssign(a) + if !a.equal(zero) { + t.Fatal("2 * 0 == 0") + } + a.set(zero) + field.subAssign(a, b) + field.neg(b, b) + if !a.equal(b) { + t.Fatal("0-a == -a") + } + _, _ = a.rand(rand.Reader) + b.set(a) + field.doubleAssign(a) + field.addAssign(b, b) + if !a.equal(b) { + t.Fatal("2 * a == a + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1, c_2 := new(fe2).set(a), new(fe2).set(b) + field.addAssign(c_1, b) + field.addAssign(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1.set(a) + c_2.set(b) + field.subAssign(c_1, b) + field.subAssign(c_2, a) + field.neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c, _ := new(fe2).rand(rand.Reader) + a0 := new(fe2).set(a) + field.addAssign(a, b) + field.addAssign(a, c) + field.addAssign(b, c) + field.addAssign(b, a0) + if !a.equal(b) { + t.Fatal("(a + b) + c == (b + c) + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + _, _ = c.rand(rand.Reader) + a0.set(a) + field.subAssign(a, b) + field.subAssign(a, c) + field.subAssign(a0, c) + field.subAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a - b) - c == (a - c) -b") + } + } +} + +func TestFp2LazyOperations(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + b, _ := new(fe2).rand(rand.Reader) + c, _ := new(fe2).rand(rand.Reader) + c0 := new(fe2) + c1 := new(fe2) + field.ladd(c0, a, b) + field.add(c1, a, b) + field.mulAssign(c0, c) + field.mulAssign(c1, c) + if !c0.equal(c1) { + // l+ operator stands for lazy addition + t.Fatal("(a + b) * c == (a l+ b) * c") + } + _, _ = a.rand(rand.Reader) + b.set(a) + field.ldouble(a, a) + field.ladd(b, b, b) + if !a.equal(b) { + t.Fatal("2 l* a = a l+ a") + } + } +} + +func TestFp2MultiplicationProperties(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + b, _ := new(fe2).rand(rand.Reader) + zero := field.zero() + one := field.one() + c_1, c_2 := field.new(), field.new() + field.mul(c_1, a, zero) + if !c_1.equal(zero) { + t.Fatal("a * 0 == 0") + } + field.mul(c_1, a, one) + if !c_1.equal(a) { + t.Fatal("a * 1 == a") + } + field.mul(c_1, a, b) + field.mul(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a * b == b * a") + } + c_x, _ := new(fe2).rand(rand.Reader) + field.mul(c_1, a, b) + field.mul(c_1, c_1, c_x) + field.mul(c_2, c_x, b) + field.mul(c_2, c_2, a) + if !c_1.equal(c_2) { + t.Fatal("(a * b) * c == (a * c) * b") + } + field.square(a, zero) + if !a.equal(zero) { + t.Fatal("0^2 == 0") + } + field.square(a, one) + if !a.equal(one) { + t.Fatal("1^2 == 1") + } + _, _ = a.rand(rand.Reader) + field.square(c_1, a) + field.mul(c_2, a, a) + if !c_2.equal(c_1) { + t.Fatal("a^2 == a*a") + } + } +} + +func TestFp2MultiplicationPropertiesAssigned(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + zero, one := new(fe2).zero(), new(fe2).one() + field.mulAssign(a, zero) + if !a.equal(zero) { + t.Fatal("a * 0 == 0") + } + _, _ = a.rand(rand.Reader) + a0 := new(fe2).set(a) + field.mulAssign(a, one) + if !a.equal(a0) { + t.Fatal("a * 1 == a") + } + _, _ = a.rand(rand.Reader) + b, _ := new(fe2).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(b, a0) + if !a.equal(b) { + t.Fatal("a * b == b * a") + } + c, _ := new(fe2).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(a, c) + field.mulAssign(a0, c) + field.mulAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a * b) * c == (a * c) * b") + } + a0.set(a) + field.squareAssign(a) + field.mulAssign(a0, a0) + if !a.equal(a0) { + t.Fatal("a^2 == a*a") + } + } +} + +func TestFp2Exponentiation(t *testing.T) { + field := newFp2() + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + u := field.new() + field.exp(u, a, big.NewInt(0)) + if !u.equal(field.one()) { + t.Fatal("a^0 == 1") + } + field.exp(u, a, big.NewInt(1)) + if !u.equal(a) { + t.Fatal("a^1 == a") + } + v := field.new() + field.mul(u, a, a) + field.mul(u, u, u) + field.mul(u, u, u) + field.exp(v, a, big.NewInt(8)) + if !u.equal(v) { + t.Fatal("((a^2)^2)^2 == a^8") + } + } +} + +func TestFp2Inversion(t *testing.T) { + field := newFp2() + u := field.new() + zero := field.zero() + one := field.one() + field.inverse(u, zero) + if !u.equal(zero) { + t.Fatal("(0 ^ -1) == 0)") + } + field.inverse(u, one) + if !u.equal(one) { + t.Fatal("(1 ^ -1) == 1)") + } + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + field.inverse(u, a) + field.mul(u, u, a) + if !u.equal(one) { + t.Fatal("(r * a) * r * (a ^ -1) == r)") + } + } +} + +func TestFp2SquareRoot(t *testing.T) { + field := newFp2() + for z := 0; z < 1000; z++ { + zi := new(fe) + sub(zi, &modulus, &fe{uint64(z * z)}) + // r = (-z*z, 0) + r := &fe2{*zi, fe{0}} + toMont(&r[0], &r[0]) + toMont(&r[1], &r[1]) + c := field.new() + // sqrt((-z*z, 0)) = (0, z) + if !field.sqrt(c, r) { + t.Fatal("z*z does have a square root") + } + e := &fe2{fe{uint64(0)}, fe{uint64(z)}} + toMont(&e[0], &e[0]) + toMont(&e[1], &e[1]) + field.square(e, e) + field.square(c, c) + if !e.equal(c) { + t.Fatal("square root failed") + } + } + if field.sqrt(field.new(), nonResidue2) { + t.Fatal("non residue cannot have a sqrt") + } + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + aa, rr, r := field.new(), field.new(), field.new() + field.square(aa, a) + if !field.sqrt(r, aa) { + t.Fatal("bad sqrt 1") + } + field.square(rr, r) + if !rr.equal(aa) { + t.Fatal("bad sqrt 2") + } + } +} + +func TestFp2NonResidue(t *testing.T) { + field := newFp2() + if !field.isQuadraticNonResidue(nonResidue2) { + t.Fatal("element is quadratic non residue, 1") + } + if field.isQuadraticNonResidue(new(fe2).one()) { + t.Fatal("one is not quadratic non residue") + } + if !field.isQuadraticNonResidue(new(fe2).zero()) { + t.Fatal("should accept zero as quadratic non residue") + } + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + field.squareAssign(a) + if field.isQuadraticNonResidue(new(fe2).one()) { + t.Fatal("element is not quadratic non residue") + } + } + for i := 0; i < fuz; i++ { + a, _ := new(fe2).rand(rand.Reader) + if !field.sqrt(new(fe2), a) { + if !field.isQuadraticNonResidue(a) { + t.Fatal("element is quadratic non residue, 2", i) + } + } else { + i -= 1 + } + } +} + +func TestFp6Serialization(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe6).rand(rand.Reader) + b, err := field.fromBytes(field.toBytes(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad serialization") + } + } +} + +func TestFp6AdditionProperties(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + zero := field.zero() + a, _ := new(fe6).rand(rand.Reader) + b, _ := new(fe6).rand(rand.Reader) + c_1 := field.new() + c_2 := field.new() + field.add(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a + 0 == a") + } + field.sub(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a - 0 == a") + } + field.double(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("2 * 0 == 0") + } + field.neg(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("-0 == 0") + } + field.sub(c_1, zero, a) + field.neg(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("0-a == -a") + } + field.double(c_1, a) + field.add(c_2, a, a) + if !c_1.equal(c_2) { + t.Fatal("2 * a == a + a") + } + field.add(c_1, a, b) + field.add(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + field.sub(c_1, a, b) + field.sub(c_2, b, a) + field.neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + c_x, _ := new(fe6).rand(rand.Reader) + field.add(c_1, a, b) + field.add(c_1, c_1, c_x) + field.add(c_2, a, c_x) + field.add(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + field.sub(c_1, a, b) + field.sub(c_1, c_1, c_x) + field.sub(c_2, a, c_x) + field.sub(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a - b) - c == (a - c ) -b") + } + } +} + +func TestFp6AdditionPropertiesAssigned(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + zero := new(fe6).zero() + a, b := new(fe6), new(fe6) + _, _ = a.rand(rand.Reader) + b.set(a) + field.addAssign(a, zero) + if !a.equal(b) { + t.Fatal("a + 0 == a") + } + field.subAssign(a, zero) + if !a.equal(b) { + t.Fatal("a - 0 == a") + } + a.set(zero) + field.doubleAssign(a) + if !a.equal(zero) { + t.Fatal("2 * 0 == 0") + } + a.set(zero) + field.subAssign(a, b) + field.neg(b, b) + if !a.equal(b) { + t.Fatal("0-a == -a") + } + _, _ = a.rand(rand.Reader) + b.set(a) + field.doubleAssign(a) + field.addAssign(b, b) + if !a.equal(b) { + t.Fatal("2 * a == a + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1, c_2 := new(fe6).set(a), new(fe6).set(b) + field.addAssign(c_1, b) + field.addAssign(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c_1.set(a) + c_2.set(b) + field.subAssign(c_1, b) + field.subAssign(c_2, a) + field.neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + c, _ := new(fe6).rand(rand.Reader) + a0 := new(fe6).set(a) + field.addAssign(a, b) + field.addAssign(a, c) + field.addAssign(b, c) + field.addAssign(b, a0) + if !a.equal(b) { + t.Fatal("(a + b) + c == (b + c) + a") + } + _, _ = a.rand(rand.Reader) + _, _ = b.rand(rand.Reader) + _, _ = c.rand(rand.Reader) + a0.set(a) + field.subAssign(a, b) + field.subAssign(a, c) + field.subAssign(a0, c) + field.subAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a - b) - c == (a - c) -b") + } + } +} + +func TestFp6SparseMultiplication(t *testing.T) { + fp6 := newFp6(nil) + var a, b, u *fe6 + for j := 0; j < fuz; j++ { + a, _ = new(fe6).rand(rand.Reader) + b, _ = new(fe6).rand(rand.Reader) + u, _ = new(fe6).rand(rand.Reader) + b[2].zero() + fp6.mul(u, a, b) + fp6.mulBy01(a, a, &b[0], &b[1]) + if !a.equal(u) { + t.Fatal("bad mul by 01") + } + } + for j := 0; j < fuz; j++ { + a, _ = new(fe6).rand(rand.Reader) + b, _ = new(fe6).rand(rand.Reader) + u, _ = new(fe6).rand(rand.Reader) + b[2].zero() + b[0].zero() + fp6.mul(u, a, b) + fp6.mulBy1(a, a, &b[1]) + if !a.equal(u) { + t.Fatal("bad mul by 1") + } + } +} + +func TestFp6MultiplicationProperties(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe6).rand(rand.Reader) + b, _ := new(fe6).rand(rand.Reader) + zero := field.zero() + one := field.one() + c_1, c_2 := field.new(), field.new() + field.mul(c_1, a, zero) + if !c_1.equal(zero) { + t.Fatal("a * 0 == 0") + } + field.mul(c_1, a, one) + if !c_1.equal(a) { + t.Fatal("a * 1 == a") + } + field.mul(c_1, a, b) + field.mul(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a * b == b * a") + } + c_x, _ := new(fe6).rand(rand.Reader) + field.mul(c_1, a, b) + field.mul(c_1, c_1, c_x) + field.mul(c_2, c_x, b) + field.mul(c_2, c_2, a) + if !c_1.equal(c_2) { + t.Fatal("(a * b) * c == (a * c) * b") + } + field.square(a, zero) + if !a.equal(zero) { + t.Fatal("0^2 == 0") + } + field.square(a, one) + if !a.equal(one) { + t.Fatal("1^2 == 1") + } + _, _ = a.rand(rand.Reader) + field.square(c_1, a) + field.mul(c_2, a, a) + if !c_2.equal(c_1) { + t.Fatal("a^2 == a*a") + } + } +} + +func TestFp6MultiplicationPropertiesAssigned(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe6).rand(rand.Reader) + zero, one := new(fe6).zero(), new(fe6).one() + field.mulAssign(a, zero) + if !a.equal(zero) { + t.Fatal("a * 0 == 0") + } + _, _ = a.rand(rand.Reader) + a0 := new(fe6).set(a) + field.mulAssign(a, one) + if !a.equal(a0) { + t.Fatal("a * 1 == a") + } + _, _ = a.rand(rand.Reader) + b, _ := new(fe6).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(b, a0) + if !a.equal(b) { + t.Fatal("a * b == b * a") + } + c, _ := new(fe6).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(a, c) + field.mulAssign(a0, c) + field.mulAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a * b) * c == (a * c) * b") + } + } +} + +func TestFp6Exponentiation(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe6).rand(rand.Reader) + u := field.new() + field.exp(u, a, big.NewInt(0)) + if !u.equal(field.one()) { + t.Fatal("a^0 == 1") + } + field.exp(u, a, big.NewInt(1)) + if !u.equal(a) { + t.Fatal("a^1 == a") + } + v := field.new() + field.mul(u, a, a) + field.mul(u, u, u) + field.mul(u, u, u) + field.exp(v, a, big.NewInt(8)) + if !u.equal(v) { + t.Fatal("((a^2)^2)^2 == a^8") + } + } +} + +func TestFp6Inversion(t *testing.T) { + field := newFp6(nil) + for i := 0; i < fuz; i++ { + u := field.new() + zero := field.zero() + one := field.one() + field.inverse(u, zero) + if !u.equal(zero) { + t.Fatal("(0^-1) == 0)") + } + field.inverse(u, one) + if !u.equal(one) { + t.Fatal("(1^-1) == 1)") + } + a, _ := new(fe6).rand(rand.Reader) + field.inverse(u, a) + field.mul(u, u, a) + if !u.equal(one) { + t.Fatal("(r*a) * r*(a^-1) == r)") + } + } +} + +func TestFp12Serialization(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe12).rand(rand.Reader) + b, err := field.fromBytes(field.toBytes(a)) + if err != nil { + t.Fatal(err) + } + if !a.equal(b) { + t.Fatal("bad serialization") + } + } +} + +func TestFp12AdditionProperties(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + zero := field.zero() + a, _ := new(fe12).rand(rand.Reader) + b, _ := new(fe12).rand(rand.Reader) + c_1 := field.new() + c_2 := field.new() + field.add(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a + 0 == a") + } + field.sub(c_1, a, zero) + if !c_1.equal(a) { + t.Fatal("a - 0 == a") + } + field.double(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("2 * 0 == 0") + } + field.neg(c_1, zero) + if !c_1.equal(zero) { + t.Fatal("-0 == 0") + } + field.sub(c_1, zero, a) + field.neg(c_2, a) + if !c_1.equal(c_2) { + t.Fatal("0-a == -a") + } + field.double(c_1, a) + field.add(c_2, a, a) + if !c_1.equal(c_2) { + t.Fatal("2 * a == a + a") + } + field.add(c_1, a, b) + field.add(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a + b = b + a") + } + field.sub(c_1, a, b) + field.sub(c_2, b, a) + field.neg(c_2, c_2) + if !c_1.equal(c_2) { + t.Fatal("a - b = - ( b - a )") + } + c_x, _ := new(fe12).rand(rand.Reader) + field.add(c_1, a, b) + field.add(c_1, c_1, c_x) + field.add(c_2, a, c_x) + field.add(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + field.sub(c_1, a, b) + field.sub(c_1, c_1, c_x) + field.sub(c_2, a, c_x) + field.sub(c_2, c_2, b) + if !c_1.equal(c_2) { + t.Fatal("(a - b) - c == (a - c ) -b") + } + } +} + +func TestFp12MultiplicationProperties(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe12).rand(rand.Reader) + b, _ := new(fe12).rand(rand.Reader) + zero := field.zero() + one := field.one() + c_1, c_2 := field.new(), field.new() + field.mul(c_1, a, zero) + if !c_1.equal(zero) { + t.Fatal("a * 0 == 0") + } + field.mul(c_1, a, one) + if !c_1.equal(a) { + t.Fatal("a * 1 == a") + } + field.mul(c_1, a, b) + field.mul(c_2, b, a) + if !c_1.equal(c_2) { + t.Fatal("a * b == b * a") + } + c_x, _ := new(fe12).rand(rand.Reader) + field.mul(c_1, a, b) + field.mul(c_1, c_1, c_x) + field.mul(c_2, c_x, b) + field.mul(c_2, c_2, a) + if !c_1.equal(c_2) { + t.Fatal("(a * b) * c == (a * c) * b") + } + field.square(a, zero) + if !a.equal(zero) { + t.Fatal("0^2 == 0") + } + field.square(a, one) + if !a.equal(one) { + t.Fatal("1^2 == 1") + } + _, _ = a.rand(rand.Reader) + field.square(c_1, a) + field.mul(c_2, a, a) + if !c_2.equal(c_1) { + t.Fatal("a^2 == a*a") + } + } +} + +func TestFp12MultiplicationPropertiesAssigned(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe12).rand(rand.Reader) + zero, one := new(fe12).zero(), new(fe12).one() + field.mulAssign(a, zero) + if !a.equal(zero) { + t.Fatal("a * 0 == 0") + } + _, _ = a.rand(rand.Reader) + a0 := new(fe12).set(a) + field.mulAssign(a, one) + if !a.equal(a0) { + t.Fatal("a * 1 == a") + } + _, _ = a.rand(rand.Reader) + b, _ := new(fe12).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(b, a0) + if !a.equal(b) { + t.Fatal("a * b == b * a") + } + c, _ := new(fe12).rand(rand.Reader) + a0.set(a) + field.mulAssign(a, b) + field.mulAssign(a, c) + field.mulAssign(a0, c) + field.mulAssign(a0, b) + if !a.equal(a0) { + t.Fatal("(a * b) * c == (a * c) * b") + } + } +} + +func TestFp12SparseMultiplication(t *testing.T) { + fp12 := newFp12(nil) + var a, b, u *fe12 + for j := 0; j < fuz; j++ { + a, _ = new(fe12).rand(rand.Reader) + b, _ = new(fe12).rand(rand.Reader) + u, _ = new(fe12).rand(rand.Reader) + b[0][2].zero() + b[1][0].zero() + b[1][2].zero() + fp12.mul(u, a, b) + fp12.mulBy014Assign(a, &b[0][0], &b[0][1], &b[1][1]) + if !a.equal(u) { + t.Fatal("bad mul by 01") + } + } +} + +func TestFp12Exponentiation(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + a, _ := new(fe12).rand(rand.Reader) + u := field.new() + field.exp(u, a, big.NewInt(0)) + if !u.equal(field.one()) { + t.Fatal("a^0 == 1") + } + field.exp(u, a, big.NewInt(1)) + if !u.equal(a) { + t.Fatal("a^1 == a") + } + v := field.new() + field.mul(u, a, a) + field.mul(u, u, u) + field.mul(u, u, u) + field.exp(v, a, big.NewInt(8)) + if !u.equal(v) { + t.Fatal("((a^2)^2)^2 == a^8") + } + } +} + +func TestFp12Inversion(t *testing.T) { + field := newFp12(nil) + for i := 0; i < fuz; i++ { + u := field.new() + zero := field.zero() + one := field.one() + field.inverse(u, zero) + if !u.equal(zero) { + t.Fatal("(0^-1) == 0)") + } + field.inverse(u, one) + if !u.equal(one) { + t.Fatal("(1^-1) == 1)") + } + a, _ := new(fe12).rand(rand.Reader) + field.inverse(u, a) + field.mul(u, u, a) + if !u.equal(one) { + t.Fatal("(r*a) * r*(a^-1) == r)") + } + } +} + +func BenchmarkMultiplication(t *testing.B) { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + c, _ := new(fe).rand(rand.Reader) + t.ResetTimer() + for i := 0; i < t.N; i++ { + mul(c, a, b) + } +} + +func BenchmarkInverse(t *testing.B) { + a, _ := new(fe).rand(rand.Reader) + b, _ := new(fe).rand(rand.Reader) + t.ResetTimer() + for i := 0; i < t.N; i++ { + inverse(a, b) + } +} + +func padBytes(in []byte, size int) []byte { + out := make([]byte, size) + if len(in) > size { + panic("bad input for padding") + } + copy(out[size-len(in):], in) + return out +} diff --git a/crypto/bls12381/g1.go b/crypto/bls12381/g1.go new file mode 100644 index 00000000..d853823c --- /dev/null +++ b/crypto/bls12381/g1.go @@ -0,0 +1,434 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math" + "math/big" +) + +// PointG1 is type for point in G1. +// PointG1 is both used for Affine and Jacobian point representation. +// If z is equal to one the point is considered as in affine form. +type PointG1 [3]fe + +func (p *PointG1) Set(p2 *PointG1) *PointG1 { + p[0].set(&p2[0]) + p[1].set(&p2[1]) + p[2].set(&p2[2]) + return p +} + +// Zero returns G1 point in point at infinity representation +func (p *PointG1) Zero() *PointG1 { + p[0].zero() + p[1].one() + p[2].zero() + return p +} + +type tempG1 struct { + t [9]*fe +} + +// G1 is struct for G1 group. +type G1 struct { + tempG1 +} + +// NewG1 constructs a new G1 instance. +func NewG1() *G1 { + t := newTempG1() + return &G1{t} +} + +func newTempG1() tempG1 { + t := [9]*fe{} + for i := 0; i < 9; i++ { + t[i] = &fe{} + } + return tempG1{t} +} + +// Q returns group order in big.Int. +func (g *G1) Q() *big.Int { + return new(big.Int).Set(q) +} + +func (g *G1) fromBytesUnchecked(in []byte) (*PointG1, error) { + p0, err := fromBytes(in[:48]) + if err != nil { + return nil, err + } + p1, err := fromBytes(in[48:]) + if err != nil { + return nil, err + } + p2 := new(fe).one() + return &PointG1{*p0, *p1, *p2}, nil +} + +// FromBytes constructs a new point given uncompressed byte input. +// FromBytes does not take zcash flags into account. +// Byte input expected to be larger than 96 bytes. +// First 96 bytes should be concatenation of x and y values. +// Point (0, 0) is considered as infinity. +func (g *G1) FromBytes(in []byte) (*PointG1, error) { + if len(in) != 96 { + return nil, errors.New("input string should be equal or larger than 96") + } + p0, err := fromBytes(in[:48]) + if err != nil { + return nil, err + } + p1, err := fromBytes(in[48:]) + if err != nil { + return nil, err + } + // check if given input points to infinity + if p0.isZero() && p1.isZero() { + return g.Zero(), nil + } + p2 := new(fe).one() + p := &PointG1{*p0, *p1, *p2} + if !g.IsOnCurve(p) { + return nil, errors.New("point is not on curve") + } + return p, nil +} + +// DecodePoint given encoded (x, y) coordinates in 128 bytes returns a valid G1 Point. +func (g *G1) DecodePoint(in []byte) (*PointG1, error) { + if len(in) != 128 { + return nil, errors.New("invalid g1 point length") + } + pointBytes := make([]byte, 96) + // decode x + xBytes, err := decodeFieldElement(in[:64]) + if err != nil { + return nil, err + } + // decode y + yBytes, err := decodeFieldElement(in[64:]) + if err != nil { + return nil, err + } + copy(pointBytes[:48], xBytes) + copy(pointBytes[48:], yBytes) + return g.FromBytes(pointBytes) +} + +// ToBytes serializes a point into bytes in uncompressed form. +// ToBytes does not take zcash flags into account. +// ToBytes returns (0, 0) if point is infinity. +func (g *G1) ToBytes(p *PointG1) []byte { + out := make([]byte, 96) + if g.IsZero(p) { + return out + } + g.Affine(p) + copy(out[:48], toBytes(&p[0])) + copy(out[48:], toBytes(&p[1])) + return out +} + +// EncodePoint encodes a point into 128 bytes. +func (g *G1) EncodePoint(p *PointG1) []byte { + outRaw := g.ToBytes(p) + out := make([]byte, 128) + // encode x + copy(out[16:], outRaw[:48]) + // encode y + copy(out[64+16:], outRaw[48:]) + return out +} + +// New creates a new G1 Point which is equal to zero in other words point at infinity. +func (g *G1) New() *PointG1 { + return g.Zero() +} + +// Zero returns a new G1 Point which is equal to point at infinity. +func (g *G1) Zero() *PointG1 { + return new(PointG1).Zero() +} + +// One returns a new G1 Point which is equal to generator point. +func (g *G1) One() *PointG1 { + p := &PointG1{} + return p.Set(&g1One) +} + +// IsZero returns true if given point is equal to zero. +func (g *G1) IsZero(p *PointG1) bool { + return p[2].isZero() +} + +// Equal checks if given two G1 point is equal in their affine form. +func (g *G1) Equal(p1, p2 *PointG1) bool { + if g.IsZero(p1) { + return g.IsZero(p2) + } + if g.IsZero(p2) { + return g.IsZero(p1) + } + t := g.t + square(t[0], &p1[2]) + square(t[1], &p2[2]) + mul(t[2], t[0], &p2[0]) + mul(t[3], t[1], &p1[0]) + mul(t[0], t[0], &p1[2]) + mul(t[1], t[1], &p2[2]) + mul(t[1], t[1], &p1[1]) + mul(t[0], t[0], &p2[1]) + return t[0].equal(t[1]) && t[2].equal(t[3]) +} + +// InCorrectSubgroup checks whether given point is in correct subgroup. +func (g *G1) InCorrectSubgroup(p *PointG1) bool { + tmp := &PointG1{} + g.MulScalar(tmp, p, q) + return g.IsZero(tmp) +} + +// IsOnCurve checks a G1 point is on curve. +func (g *G1) IsOnCurve(p *PointG1) bool { + if g.IsZero(p) { + return true + } + t := g.t + square(t[0], &p[1]) + square(t[1], &p[0]) + mul(t[1], t[1], &p[0]) + square(t[2], &p[2]) + square(t[3], t[2]) + mul(t[2], t[2], t[3]) + mul(t[2], b, t[2]) + add(t[1], t[1], t[2]) + return t[0].equal(t[1]) +} + +// IsAffine checks a G1 point whether it is in affine form. +func (g *G1) IsAffine(p *PointG1) bool { + return p[2].isOne() +} + +// Add adds two G1 points p1, p2 and assigns the result to point at first argument. +func (g *G1) Affine(p *PointG1) *PointG1 { + if g.IsZero(p) { + return p + } + if !g.IsAffine(p) { + t := g.t + inverse(t[0], &p[2]) + square(t[1], t[0]) + mul(&p[0], &p[0], t[1]) + mul(t[0], t[0], t[1]) + mul(&p[1], &p[1], t[0]) + p[2].one() + } + return p +} + +// Add adds two G1 points p1, p2 and assigns the result to point at first argument. +func (g *G1) Add(r, p1, p2 *PointG1) *PointG1 { + // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#addition-add-2007-bl + if g.IsZero(p1) { + return r.Set(p2) + } + if g.IsZero(p2) { + return r.Set(p1) + } + t := g.t + square(t[7], &p1[2]) + mul(t[1], &p2[0], t[7]) + mul(t[2], &p1[2], t[7]) + mul(t[0], &p2[1], t[2]) + square(t[8], &p2[2]) + mul(t[3], &p1[0], t[8]) + mul(t[4], &p2[2], t[8]) + mul(t[2], &p1[1], t[4]) + if t[1].equal(t[3]) { + if t[0].equal(t[2]) { + return g.Double(r, p1) + } + return r.Zero() + } + sub(t[1], t[1], t[3]) + double(t[4], t[1]) + square(t[4], t[4]) + mul(t[5], t[1], t[4]) + sub(t[0], t[0], t[2]) + double(t[0], t[0]) + square(t[6], t[0]) + sub(t[6], t[6], t[5]) + mul(t[3], t[3], t[4]) + double(t[4], t[3]) + sub(&r[0], t[6], t[4]) + sub(t[4], t[3], &r[0]) + mul(t[6], t[2], t[5]) + double(t[6], t[6]) + mul(t[0], t[0], t[4]) + sub(&r[1], t[0], t[6]) + add(t[0], &p1[2], &p2[2]) + square(t[0], t[0]) + sub(t[0], t[0], t[7]) + sub(t[0], t[0], t[8]) + mul(&r[2], t[0], t[1]) + return r +} + +// Double doubles a G1 point p and assigns the result to the point at first argument. +func (g *G1) Double(r, p *PointG1) *PointG1 { + // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + if g.IsZero(p) { + return r.Set(p) + } + t := g.t + square(t[0], &p[0]) + square(t[1], &p[1]) + square(t[2], t[1]) + add(t[1], &p[0], t[1]) + square(t[1], t[1]) + sub(t[1], t[1], t[0]) + sub(t[1], t[1], t[2]) + double(t[1], t[1]) + double(t[3], t[0]) + add(t[0], t[3], t[0]) + square(t[4], t[0]) + double(t[3], t[1]) + sub(&r[0], t[4], t[3]) + sub(t[1], t[1], &r[0]) + double(t[2], t[2]) + double(t[2], t[2]) + double(t[2], t[2]) + mul(t[0], t[0], t[1]) + sub(t[1], t[0], t[2]) + mul(t[0], &p[1], &p[2]) + r[1].set(t[1]) + double(&r[2], t[0]) + return r +} + +// Neg negates a G1 point p and assigns the result to the point at first argument. +func (g *G1) Neg(r, p *PointG1) *PointG1 { + r[0].set(&p[0]) + r[2].set(&p[2]) + neg(&r[1], &p[1]) + return r +} + +// Sub subtracts two G1 points p1, p2 and assigns the result to point at first argument. +func (g *G1) Sub(c, a, b *PointG1) *PointG1 { + d := &PointG1{} + g.Neg(d, b) + g.Add(c, a, d) + return c +} + +// MulScalar multiplies a point by given scalar value in big.Int and assigns the result to point at first argument. +func (g *G1) MulScalar(c, p *PointG1, e *big.Int) *PointG1 { + q, n := &PointG1{}, &PointG1{} + n.Set(p) + l := e.BitLen() + for i := 0; i < l; i++ { + if e.Bit(i) == 1 { + g.Add(q, q, n) + } + g.Double(n, n) + } + return c.Set(q) +} + +// ClearCofactor maps given a G1 point to correct subgroup +func (g *G1) ClearCofactor(p *PointG1) { + g.MulScalar(p, p, cofactorEFFG1) +} + +// MultiExp calculates multi exponentiation. Given pairs of G1 point and scalar values +// (P_0, e_0), (P_1, e_1), ... (P_n, e_n) calculates r = e_0 * P_0 + e_1 * P_1 + ... + e_n * P_n +// Length of points and scalars are expected to be equal, otherwise an error is returned. +// Result is assigned to point at first argument. +func (g *G1) MultiExp(r *PointG1, points []*PointG1, powers []*big.Int) (*PointG1, error) { + if len(points) != len(powers) { + return nil, errors.New("point and scalar vectors should be in same length") + } + var c uint32 = 3 + if len(powers) >= 32 { + c = uint32(math.Ceil(math.Log10(float64(len(powers))))) + } + bucketSize, numBits := (1<= 0; i-- { + g.Add(sum, sum, bucket[i]) + g.Add(acc, acc, sum) + } + windows[j] = g.New() + windows[j].Set(acc) + j++ + cur += c + } + acc.Zero() + for i := len(windows) - 1; i >= 0; i-- { + for j := uint32(0); j < c; j++ { + g.Double(acc, acc) + } + g.Add(acc, acc, windows[i]) + } + return r.Set(acc), nil +} + +// MapToCurve given a byte slice returns a valid G1 point. +// This mapping function implements the Simplified Shallue-van de Woestijne-Ulas method. +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06 +// Input byte slice should be a valid field element, otherwise an error is returned. +func (g *G1) MapToCurve(in []byte) (*PointG1, error) { + u, err := fromBytes(in) + if err != nil { + return nil, err + } + x, y := swuMapG1(u) + isogenyMapG1(x, y) + one := new(fe).one() + p := &PointG1{*x, *y, *one} + g.ClearCofactor(p) + return g.Affine(p), nil +} diff --git a/crypto/bls12381/g1_test.go b/crypto/bls12381/g1_test.go new file mode 100644 index 00000000..eef9f450 --- /dev/null +++ b/crypto/bls12381/g1_test.go @@ -0,0 +1,283 @@ +package bls12381 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func (g *G1) one() *PointG1 { + one, _ := g.fromBytesUnchecked( + common.FromHex("" + + "17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" + + "08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + ), + ) + return one +} + +func (g *G1) rand() *PointG1 { + k, err := rand.Int(rand.Reader, q) + if err != nil { + panic(err) + } + return g.MulScalar(&PointG1{}, g.one(), k) +} + +func TestG1Serialization(t *testing.T) { + g1 := NewG1() + for i := 0; i < fuz; i++ { + a := g1.rand() + buf := g1.ToBytes(a) + b, err := g1.FromBytes(buf) + if err != nil { + t.Fatal(err) + } + if !g1.Equal(a, b) { + t.Fatal("bad serialization from/to") + } + } + for i := 0; i < fuz; i++ { + a := g1.rand() + encoded := g1.EncodePoint(a) + b, err := g1.DecodePoint(encoded) + if err != nil { + t.Fatal(err) + } + if !g1.Equal(a, b) { + t.Fatal("bad serialization encode/decode") + } + } +} + +func TestG1IsOnCurve(t *testing.T) { + g := NewG1() + zero := g.Zero() + if !g.IsOnCurve(zero) { + t.Fatal("zero must be on curve") + } + one := new(fe).one() + p := &PointG1{*one, *one, *one} + if g.IsOnCurve(p) { + t.Fatal("(1, 1) is not on curve") + } +} + +func TestG1AdditiveProperties(t *testing.T) { + g := NewG1() + t0, t1 := g.New(), g.New() + zero := g.Zero() + for i := 0; i < fuz; i++ { + a, b := g.rand(), g.rand() + g.Add(t0, a, zero) + if !g.Equal(t0, a) { + t.Fatal("a + 0 == a") + } + g.Add(t0, zero, zero) + if !g.Equal(t0, zero) { + t.Fatal("0 + 0 == 0") + } + g.Sub(t0, a, zero) + if !g.Equal(t0, a) { + t.Fatal("a - 0 == a") + } + g.Sub(t0, zero, zero) + if !g.Equal(t0, zero) { + t.Fatal("0 - 0 == 0") + } + g.Neg(t0, zero) + if !g.Equal(t0, zero) { + t.Fatal("- 0 == 0") + } + g.Sub(t0, zero, a) + g.Neg(t0, t0) + if !g.Equal(t0, a) { + t.Fatal(" - (0 - a) == a") + } + g.Double(t0, zero) + if !g.Equal(t0, zero) { + t.Fatal("2 * 0 == 0") + } + g.Double(t0, a) + g.Sub(t0, t0, a) + if !g.Equal(t0, a) || !g.IsOnCurve(t0) { + t.Fatal(" (2 * a) - a == a") + } + g.Add(t0, a, b) + g.Add(t1, b, a) + if !g.Equal(t0, t1) { + t.Fatal("a + b == b + a") + } + g.Sub(t0, a, b) + g.Sub(t1, b, a) + g.Neg(t1, t1) + if !g.Equal(t0, t1) { + t.Fatal("a - b == - ( b - a )") + } + c := g.rand() + g.Add(t0, a, b) + g.Add(t0, t0, c) + g.Add(t1, a, c) + g.Add(t1, t1, b) + if !g.Equal(t0, t1) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + g.Sub(t0, a, b) + g.Sub(t0, t0, c) + g.Sub(t1, a, c) + g.Sub(t1, t1, b) + if !g.Equal(t0, t1) { + t.Fatal("(a - b) - c == (a - c) -b") + } + } +} + +func TestG1MultiplicativeProperties(t *testing.T) { + g := NewG1() + t0, t1 := g.New(), g.New() + zero := g.Zero() + for i := 0; i < fuz; i++ { + a := g.rand() + s1, s2, s3 := randScalar(q), randScalar(q), randScalar(q) + sone := big.NewInt(1) + g.MulScalar(t0, zero, s1) + if !g.Equal(t0, zero) { + t.Fatal(" 0 ^ s == 0") + } + g.MulScalar(t0, a, sone) + if !g.Equal(t0, a) { + t.Fatal(" a ^ 1 == a") + } + g.MulScalar(t0, zero, s1) + if !g.Equal(t0, zero) { + t.Fatal(" 0 ^ s == a") + } + g.MulScalar(t0, a, s1) + g.MulScalar(t0, t0, s2) + s3.Mul(s1, s2) + g.MulScalar(t1, a, s3) + if !g.Equal(t0, t1) { + t.Errorf(" (a ^ s1) ^ s2 == a ^ (s1 * s2)") + } + g.MulScalar(t0, a, s1) + g.MulScalar(t1, a, s2) + g.Add(t0, t0, t1) + s3.Add(s1, s2) + g.MulScalar(t1, a, s3) + if !g.Equal(t0, t1) { + t.Errorf(" (a ^ s1) + (a ^ s2) == a ^ (s1 + s2)") + } + } +} + +func TestG1MultiExpExpected(t *testing.T) { + g := NewG1() + one := g.one() + var scalars [2]*big.Int + var bases [2]*PointG1 + scalars[0] = big.NewInt(2) + scalars[1] = big.NewInt(3) + bases[0], bases[1] = new(PointG1).Set(one), new(PointG1).Set(one) + expected, result := g.New(), g.New() + g.MulScalar(expected, one, big.NewInt(5)) + _, _ = g.MultiExp(result, bases[:], scalars[:]) + if !g.Equal(expected, result) { + t.Fatal("bad multi-exponentiation") + } +} + +func TestG1MultiExpBatch(t *testing.T) { + g := NewG1() + one := g.one() + n := 1000 + bases := make([]*PointG1, n) + scalars := make([]*big.Int, n) + // scalars: [s0,s1 ... s(n-1)] + // bases: [P0,P1,..P(n-1)] = [s(n-1)*G, s(n-2)*G ... s0*G] + for i, j := 0, n-1; i < n; i, j = i+1, j-1 { + scalars[j], _ = rand.Int(rand.Reader, big.NewInt(100000)) + bases[i] = g.New() + g.MulScalar(bases[i], one, scalars[j]) + } + // expected: s(n-1)*P0 + s(n-2)*P1 + s0*P(n-1) + expected, tmp := g.New(), g.New() + for i := 0; i < n; i++ { + g.MulScalar(tmp, bases[i], scalars[i]) + g.Add(expected, expected, tmp) + } + result := g.New() + _, _ = g.MultiExp(result, bases, scalars) + if !g.Equal(expected, result) { + t.Fatal("bad multi-exponentiation") + } +} + +func TestG1MapToCurve(t *testing.T) { + for i, v := range []struct { + u []byte + expected []byte + }{ + { + u: make([]byte, 48), + expected: common.FromHex("11a9a0372b8f332d5c30de9ad14e50372a73fa4c45d5f2fa5097f2d6fb93bcac592f2e1711ac43db0519870c7d0ea415" + "092c0f994164a0719f51c24ba3788de240ff926b55f58c445116e8bc6a47cd63392fd4e8e22bdf9feaa96ee773222133"), + }, + { + u: common.FromHex("07fdf49ea58e96015d61f6b5c9d1c8f277146a533ae7fbca2a8ef4c41055cd961fbc6e26979b5554e4b4f22330c0e16d"), + expected: common.FromHex("1223effdbb2d38152495a864d78eee14cb0992d89a241707abb03819a91a6d2fd65854ab9a69e9aacb0cbebfd490732c" + "0f925d61e0b235ecd945cbf0309291878df0d06e5d80d6b84aa4ff3e00633b26f9a7cb3523ef737d90e6d71e8b98b2d5"), + }, + { + u: common.FromHex("1275ab3adbf824a169ed4b1fd669b49cf406d822f7fe90d6b2f8c601b5348436f89761bb1ad89a6fb1137cd91810e5d2"), + expected: common.FromHex("179d3fd0b4fb1da43aad06cea1fb3f828806ddb1b1fa9424b1e3944dfdbab6e763c42636404017da03099af0dcca0fd6" + "0d037cb1c6d495c0f5f22b061d23f1be3d7fe64d3c6820cfcd99b6b36fa69f7b4c1f4addba2ae7aa46fb25901ab483e4"), + }, + { + u: common.FromHex("0e93d11d30de6d84b8578827856f5c05feef36083eef0b7b263e35ecb9b56e86299614a042e57d467fa20948e8564909"), + expected: common.FromHex("15aa66c77eded1209db694e8b1ba49daf8b686733afaa7b68c683d0b01788dfb0617a2e2d04c0856db4981921d3004af" + "0952bb2f61739dd1d201dd0a79d74cda3285403d47655ee886afe860593a8a4e51c5b77a22d2133e3a4280eaaaa8b788"), + }, + { + u: common.FromHex("015a41481155d17074d20be6d8ec4d46632a51521cd9c916e265bd9b47343b3689979b50708c8546cbc2916b86cb1a3a"), + expected: common.FromHex("06328ce5106e837935e8da84bd9af473422e62492930aa5f460369baad9545defa468d9399854c23a75495d2a80487ee" + "094bfdfe3e552447433b5a00967498a3f1314b86ce7a7164c8a8f4131f99333b30a574607e301d5f774172c627fd0bca"), + }, + } { + g := NewG1() + p0, err := g.MapToCurve(v.u) + if err != nil { + t.Fatal("map to curve fails", i, err) + } + if !bytes.Equal(g.ToBytes(p0), v.expected) { + t.Fatal("map to curve fails", i) + } + } +} + +func BenchmarkG1Add(t *testing.B) { + g1 := NewG1() + a, b, c := g1.rand(), g1.rand(), PointG1{} + t.ResetTimer() + for i := 0; i < t.N; i++ { + g1.Add(&c, a, b) + } +} + +func BenchmarkG1Mul(t *testing.B) { + g1 := NewG1() + a, e, c := g1.rand(), q, PointG1{} + t.ResetTimer() + for i := 0; i < t.N; i++ { + g1.MulScalar(&c, a, e) + } +} + +func BenchmarkG1MapToCurve(t *testing.B) { + a := make([]byte, 48) + g1 := NewG1() + t.ResetTimer() + for i := 0; i < t.N; i++ { + _, err := g1.MapToCurve(a) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/crypto/bls12381/g2.go b/crypto/bls12381/g2.go new file mode 100644 index 00000000..c2ca959b --- /dev/null +++ b/crypto/bls12381/g2.go @@ -0,0 +1,455 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math" + "math/big" +) + +// PointG2 is type for point in G2. +// PointG2 is both used for Affine and Jacobian point representation. +// If z is equal to one the point is considered as in affine form. +type PointG2 [3]fe2 + +// Set copies valeus of one point to another. +func (p *PointG2) Set(p2 *PointG2) *PointG2 { + p[0].set(&p2[0]) + p[1].set(&p2[1]) + p[2].set(&p2[2]) + return p +} + +// Zero returns G2 point in point at infinity representation +func (p *PointG2) Zero() *PointG2 { + p[0].zero() + p[1].one() + p[2].zero() + return p +} + +type tempG2 struct { + t [9]*fe2 +} + +// G2 is struct for G2 group. +type G2 struct { + f *fp2 + tempG2 +} + +// NewG2 constructs a new G2 instance. +func NewG2() *G2 { + return newG2(nil) +} + +func newG2(f *fp2) *G2 { + if f == nil { + f = newFp2() + } + t := newTempG2() + return &G2{f, t} +} + +func newTempG2() tempG2 { + t := [9]*fe2{} + for i := 0; i < 9; i++ { + t[i] = &fe2{} + } + return tempG2{t} +} + +// Q returns group order in big.Int. +func (g *G2) Q() *big.Int { + return new(big.Int).Set(q) +} + +func (g *G2) fromBytesUnchecked(in []byte) (*PointG2, error) { + p0, err := g.f.fromBytes(in[:96]) + if err != nil { + return nil, err + } + p1, err := g.f.fromBytes(in[96:]) + if err != nil { + return nil, err + } + p2 := new(fe2).one() + return &PointG2{*p0, *p1, *p2}, nil +} + +// FromBytes constructs a new point given uncompressed byte input. +// FromBytes does not take zcash flags into account. +// Byte input expected to be larger than 96 bytes. +// First 192 bytes should be concatenation of x and y values +// Point (0, 0) is considered as infinity. +func (g *G2) FromBytes(in []byte) (*PointG2, error) { + if len(in) != 192 { + return nil, errors.New("input string should be equal or larger than 192") + } + p0, err := g.f.fromBytes(in[:96]) + if err != nil { + return nil, err + } + p1, err := g.f.fromBytes(in[96:]) + if err != nil { + return nil, err + } + // check if given input points to infinity + if p0.isZero() && p1.isZero() { + return g.Zero(), nil + } + p2 := new(fe2).one() + p := &PointG2{*p0, *p1, *p2} + if !g.IsOnCurve(p) { + return nil, errors.New("point is not on curve") + } + return p, nil +} + +// DecodePoint given encoded (x, y) coordinates in 256 bytes returns a valid G1 Point. +func (g *G2) DecodePoint(in []byte) (*PointG2, error) { + if len(in) != 256 { + return nil, errors.New("invalid g2 point length") + } + pointBytes := make([]byte, 192) + x0Bytes, err := decodeFieldElement(in[:64]) + if err != nil { + return nil, err + } + x1Bytes, err := decodeFieldElement(in[64:128]) + if err != nil { + return nil, err + } + y0Bytes, err := decodeFieldElement(in[128:192]) + if err != nil { + return nil, err + } + y1Bytes, err := decodeFieldElement(in[192:]) + if err != nil { + return nil, err + } + copy(pointBytes[:48], x1Bytes) + copy(pointBytes[48:96], x0Bytes) + copy(pointBytes[96:144], y1Bytes) + copy(pointBytes[144:192], y0Bytes) + return g.FromBytes(pointBytes) +} + +// ToBytes serializes a point into bytes in uncompressed form, +// does not take zcash flags into account, +// returns (0, 0) if point is infinity. +func (g *G2) ToBytes(p *PointG2) []byte { + out := make([]byte, 192) + if g.IsZero(p) { + return out + } + g.Affine(p) + copy(out[:96], g.f.toBytes(&p[0])) + copy(out[96:], g.f.toBytes(&p[1])) + return out +} + +// EncodePoint encodes a point into 256 bytes. +func (g *G2) EncodePoint(p *PointG2) []byte { + // outRaw is 96 bytes + outRaw := g.ToBytes(p) + out := make([]byte, 256) + // encode x + copy(out[16:16+48], outRaw[48:96]) + copy(out[80:80+48], outRaw[:48]) + // encode y + copy(out[144:144+48], outRaw[144:]) + copy(out[208:208+48], outRaw[96:144]) + return out +} + +// New creates a new G2 Point which is equal to zero in other words point at infinity. +func (g *G2) New() *PointG2 { + return new(PointG2).Zero() +} + +// Zero returns a new G2 Point which is equal to point at infinity. +func (g *G2) Zero() *PointG2 { + return new(PointG2).Zero() +} + +// One returns a new G2 Point which is equal to generator point. +func (g *G2) One() *PointG2 { + p := &PointG2{} + return p.Set(&g2One) +} + +// IsZero returns true if given point is equal to zero. +func (g *G2) IsZero(p *PointG2) bool { + return p[2].isZero() +} + +// Equal checks if given two G2 point is equal in their affine form. +func (g *G2) Equal(p1, p2 *PointG2) bool { + if g.IsZero(p1) { + return g.IsZero(p2) + } + if g.IsZero(p2) { + return g.IsZero(p1) + } + t := g.t + g.f.square(t[0], &p1[2]) + g.f.square(t[1], &p2[2]) + g.f.mul(t[2], t[0], &p2[0]) + g.f.mul(t[3], t[1], &p1[0]) + g.f.mul(t[0], t[0], &p1[2]) + g.f.mul(t[1], t[1], &p2[2]) + g.f.mul(t[1], t[1], &p1[1]) + g.f.mul(t[0], t[0], &p2[1]) + return t[0].equal(t[1]) && t[2].equal(t[3]) +} + +// InCorrectSubgroup checks whether given point is in correct subgroup. +func (g *G2) InCorrectSubgroup(p *PointG2) bool { + tmp := &PointG2{} + g.MulScalar(tmp, p, q) + return g.IsZero(tmp) +} + +// IsOnCurve checks a G2 point is on curve. +func (g *G2) IsOnCurve(p *PointG2) bool { + if g.IsZero(p) { + return true + } + t := g.t + g.f.square(t[0], &p[1]) + g.f.square(t[1], &p[0]) + g.f.mul(t[1], t[1], &p[0]) + g.f.square(t[2], &p[2]) + g.f.square(t[3], t[2]) + g.f.mul(t[2], t[2], t[3]) + g.f.mul(t[2], b2, t[2]) + g.f.add(t[1], t[1], t[2]) + return t[0].equal(t[1]) +} + +// IsAffine checks a G2 point whether it is in affine form. +func (g *G2) IsAffine(p *PointG2) bool { + return p[2].isOne() +} + +// Affine calculates affine form of given G2 point. +func (g *G2) Affine(p *PointG2) *PointG2 { + if g.IsZero(p) { + return p + } + if !g.IsAffine(p) { + t := g.t + g.f.inverse(t[0], &p[2]) + g.f.square(t[1], t[0]) + g.f.mul(&p[0], &p[0], t[1]) + g.f.mul(t[0], t[0], t[1]) + g.f.mul(&p[1], &p[1], t[0]) + p[2].one() + } + return p +} + +// Add adds two G2 points p1, p2 and assigns the result to point at first argument. +func (g *G2) Add(r, p1, p2 *PointG2) *PointG2 { + // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#addition-add-2007-bl + if g.IsZero(p1) { + return r.Set(p2) + } + if g.IsZero(p2) { + return r.Set(p1) + } + t := g.t + g.f.square(t[7], &p1[2]) + g.f.mul(t[1], &p2[0], t[7]) + g.f.mul(t[2], &p1[2], t[7]) + g.f.mul(t[0], &p2[1], t[2]) + g.f.square(t[8], &p2[2]) + g.f.mul(t[3], &p1[0], t[8]) + g.f.mul(t[4], &p2[2], t[8]) + g.f.mul(t[2], &p1[1], t[4]) + if t[1].equal(t[3]) { + if t[0].equal(t[2]) { + return g.Double(r, p1) + } + return r.Zero() + } + g.f.sub(t[1], t[1], t[3]) + g.f.double(t[4], t[1]) + g.f.square(t[4], t[4]) + g.f.mul(t[5], t[1], t[4]) + g.f.sub(t[0], t[0], t[2]) + g.f.double(t[0], t[0]) + g.f.square(t[6], t[0]) + g.f.sub(t[6], t[6], t[5]) + g.f.mul(t[3], t[3], t[4]) + g.f.double(t[4], t[3]) + g.f.sub(&r[0], t[6], t[4]) + g.f.sub(t[4], t[3], &r[0]) + g.f.mul(t[6], t[2], t[5]) + g.f.double(t[6], t[6]) + g.f.mul(t[0], t[0], t[4]) + g.f.sub(&r[1], t[0], t[6]) + g.f.add(t[0], &p1[2], &p2[2]) + g.f.square(t[0], t[0]) + g.f.sub(t[0], t[0], t[7]) + g.f.sub(t[0], t[0], t[8]) + g.f.mul(&r[2], t[0], t[1]) + return r +} + +// Double doubles a G2 point p and assigns the result to the point at first argument. +func (g *G2) Double(r, p *PointG2) *PointG2 { + // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + if g.IsZero(p) { + return r.Set(p) + } + t := g.t + g.f.square(t[0], &p[0]) + g.f.square(t[1], &p[1]) + g.f.square(t[2], t[1]) + g.f.add(t[1], &p[0], t[1]) + g.f.square(t[1], t[1]) + g.f.sub(t[1], t[1], t[0]) + g.f.sub(t[1], t[1], t[2]) + g.f.double(t[1], t[1]) + g.f.double(t[3], t[0]) + g.f.add(t[0], t[3], t[0]) + g.f.square(t[4], t[0]) + g.f.double(t[3], t[1]) + g.f.sub(&r[0], t[4], t[3]) + g.f.sub(t[1], t[1], &r[0]) + g.f.double(t[2], t[2]) + g.f.double(t[2], t[2]) + g.f.double(t[2], t[2]) + g.f.mul(t[0], t[0], t[1]) + g.f.sub(t[1], t[0], t[2]) + g.f.mul(t[0], &p[1], &p[2]) + r[1].set(t[1]) + g.f.double(&r[2], t[0]) + return r +} + +// Neg negates a G2 point p and assigns the result to the point at first argument. +func (g *G2) Neg(r, p *PointG2) *PointG2 { + r[0].set(&p[0]) + g.f.neg(&r[1], &p[1]) + r[2].set(&p[2]) + return r +} + +// Sub subtracts two G2 points p1, p2 and assigns the result to point at first argument. +func (g *G2) Sub(c, a, b *PointG2) *PointG2 { + d := &PointG2{} + g.Neg(d, b) + g.Add(c, a, d) + return c +} + +// MulScalar multiplies a point by given scalar value in big.Int and assigns the result to point at first argument. +func (g *G2) MulScalar(c, p *PointG2, e *big.Int) *PointG2 { + q, n := &PointG2{}, &PointG2{} + n.Set(p) + l := e.BitLen() + for i := 0; i < l; i++ { + if e.Bit(i) == 1 { + g.Add(q, q, n) + } + g.Double(n, n) + } + return c.Set(q) +} + +// ClearCofactor maps given a G2 point to correct subgroup +func (g *G2) ClearCofactor(p *PointG2) { + g.MulScalar(p, p, cofactorEFFG2) +} + +// MultiExp calculates multi exponentiation. Given pairs of G2 point and scalar values +// (P_0, e_0), (P_1, e_1), ... (P_n, e_n) calculates r = e_0 * P_0 + e_1 * P_1 + ... + e_n * P_n +// Length of points and scalars are expected to be equal, otherwise an error is returned. +// Result is assigned to point at first argument. +func (g *G2) MultiExp(r *PointG2, points []*PointG2, powers []*big.Int) (*PointG2, error) { + if len(points) != len(powers) { + return nil, errors.New("point and scalar vectors should be in same length") + } + var c uint32 = 3 + if len(powers) >= 32 { + c = uint32(math.Ceil(math.Log10(float64(len(powers))))) + } + bucketSize, numBits := (1<= 0; i-- { + g.Add(sum, sum, bucket[i]) + g.Add(acc, acc, sum) + } + windows[j] = g.New() + windows[j].Set(acc) + j++ + cur += c + } + acc.Zero() + for i := len(windows) - 1; i >= 0; i-- { + for j := uint32(0); j < c; j++ { + g.Double(acc, acc) + } + g.Add(acc, acc, windows[i]) + } + return r.Set(acc), nil +} + +// MapToCurve given a byte slice returns a valid G2 point. +// This mapping function implements the Simplified Shallue-van de Woestijne-Ulas method. +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-05#section-6.6.2 +// Input byte slice should be a valid field element, otherwise an error is returned. +func (g *G2) MapToCurve(in []byte) (*PointG2, error) { + fp2 := g.f + u, err := fp2.fromBytes(in) + if err != nil { + return nil, err + } + x, y := swuMapG2(fp2, u) + isogenyMapG2(fp2, x, y) + z := new(fe2).one() + q := &PointG2{*x, *y, *z} + g.ClearCofactor(q) + return g.Affine(q), nil +} diff --git a/crypto/bls12381/g2_test.go b/crypto/bls12381/g2_test.go new file mode 100644 index 00000000..f16f0e5e --- /dev/null +++ b/crypto/bls12381/g2_test.go @@ -0,0 +1,286 @@ +package bls12381 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func (g *G2) one() *PointG2 { + one, _ := g.fromBytesUnchecked( + common.FromHex("" + + "13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e" + + "024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8" + + "0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be" + + "0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801", + ), + ) + return one +} + +func (g *G2) rand() *PointG2 { + k, err := rand.Int(rand.Reader, q) + if err != nil { + panic(err) + } + return g.MulScalar(&PointG2{}, g.one(), k) +} + +func TestG2Serialization(t *testing.T) { + g2 := NewG2() + for i := 0; i < fuz; i++ { + a := g2.rand() + buf := g2.ToBytes(a) + b, err := g2.FromBytes(buf) + if err != nil { + t.Fatal(err) + } + if !g2.Equal(a, b) { + t.Fatal("bad serialization from/to") + } + } + for i := 0; i < fuz; i++ { + a := g2.rand() + encoded := g2.EncodePoint(a) + b, err := g2.DecodePoint(encoded) + if err != nil { + t.Fatal(err) + } + if !g2.Equal(a, b) { + t.Fatal("bad serialization encode/decode") + } + } +} + +func TestG2IsOnCurve(t *testing.T) { + g := NewG2() + zero := g.Zero() + if !g.IsOnCurve(zero) { + t.Fatal("zero must be on curve") + } + one := new(fe2).one() + p := &PointG2{*one, *one, *one} + if g.IsOnCurve(p) { + t.Fatal("(1, 1) is not on curve") + } +} + +func TestG2AdditiveProperties(t *testing.T) { + g := NewG2() + t0, t1 := g.New(), g.New() + zero := g.Zero() + for i := 0; i < fuz; i++ { + a, b := g.rand(), g.rand() + _, _, _ = b, t1, zero + g.Add(t0, a, zero) + if !g.Equal(t0, a) { + t.Fatal("a + 0 == a") + } + g.Add(t0, zero, zero) + if !g.Equal(t0, zero) { + t.Fatal("0 + 0 == 0") + } + g.Sub(t0, a, zero) + if !g.Equal(t0, a) { + t.Fatal("a - 0 == a") + } + g.Sub(t0, zero, zero) + if !g.Equal(t0, zero) { + t.Fatal("0 - 0 == 0") + } + g.Neg(t0, zero) + if !g.Equal(t0, zero) { + t.Fatal("- 0 == 0") + } + g.Sub(t0, zero, a) + g.Neg(t0, t0) + if !g.Equal(t0, a) { + t.Fatal(" - (0 - a) == a") + } + g.Double(t0, zero) + if !g.Equal(t0, zero) { + t.Fatal("2 * 0 == 0") + } + g.Double(t0, a) + g.Sub(t0, t0, a) + if !g.Equal(t0, a) || !g.IsOnCurve(t0) { + t.Fatal(" (2 * a) - a == a") + } + g.Add(t0, a, b) + g.Add(t1, b, a) + if !g.Equal(t0, t1) { + t.Fatal("a + b == b + a") + } + g.Sub(t0, a, b) + g.Sub(t1, b, a) + g.Neg(t1, t1) + if !g.Equal(t0, t1) { + t.Fatal("a - b == - ( b - a )") + } + c := g.rand() + g.Add(t0, a, b) + g.Add(t0, t0, c) + g.Add(t1, a, c) + g.Add(t1, t1, b) + if !g.Equal(t0, t1) { + t.Fatal("(a + b) + c == (a + c ) + b") + } + g.Sub(t0, a, b) + g.Sub(t0, t0, c) + g.Sub(t1, a, c) + g.Sub(t1, t1, b) + if !g.Equal(t0, t1) { + t.Fatal("(a - b) - c == (a - c) -b") + } + } +} + +func TestG2MultiplicativeProperties(t *testing.T) { + g := NewG2() + t0, t1 := g.New(), g.New() + zero := g.Zero() + for i := 0; i < fuz; i++ { + a := g.rand() + s1, s2, s3 := randScalar(q), randScalar(q), randScalar(q) + sone := big.NewInt(1) + g.MulScalar(t0, zero, s1) + if !g.Equal(t0, zero) { + t.Fatal(" 0 ^ s == 0") + } + g.MulScalar(t0, a, sone) + if !g.Equal(t0, a) { + t.Fatal(" a ^ 1 == a") + } + g.MulScalar(t0, zero, s1) + if !g.Equal(t0, zero) { + t.Fatal(" 0 ^ s == a") + } + g.MulScalar(t0, a, s1) + g.MulScalar(t0, t0, s2) + s3.Mul(s1, s2) + g.MulScalar(t1, a, s3) + if !g.Equal(t0, t1) { + t.Errorf(" (a ^ s1) ^ s2 == a ^ (s1 * s2)") + } + g.MulScalar(t0, a, s1) + g.MulScalar(t1, a, s2) + g.Add(t0, t0, t1) + s3.Add(s1, s2) + g.MulScalar(t1, a, s3) + if !g.Equal(t0, t1) { + t.Errorf(" (a ^ s1) + (a ^ s2) == a ^ (s1 + s2)") + } + } +} + +func TestG2MultiExpExpected(t *testing.T) { + g := NewG2() + one := g.one() + var scalars [2]*big.Int + var bases [2]*PointG2 + scalars[0] = big.NewInt(2) + scalars[1] = big.NewInt(3) + bases[0], bases[1] = new(PointG2).Set(one), new(PointG2).Set(one) + expected, result := g.New(), g.New() + g.MulScalar(expected, one, big.NewInt(5)) + _, _ = g.MultiExp(result, bases[:], scalars[:]) + if !g.Equal(expected, result) { + t.Fatal("bad multi-exponentiation") + } +} + +func TestG2MultiExpBatch(t *testing.T) { + g := NewG2() + one := g.one() + n := 1000 + bases := make([]*PointG2, n) + scalars := make([]*big.Int, n) + // scalars: [s0,s1 ... s(n-1)] + // bases: [P0,P1,..P(n-1)] = [s(n-1)*G, s(n-2)*G ... s0*G] + for i, j := 0, n-1; i < n; i, j = i+1, j-1 { + scalars[j], _ = rand.Int(rand.Reader, big.NewInt(100000)) + bases[i] = g.New() + g.MulScalar(bases[i], one, scalars[j]) + } + // expected: s(n-1)*P0 + s(n-2)*P1 + s0*P(n-1) + expected, tmp := g.New(), g.New() + for i := 0; i < n; i++ { + g.MulScalar(tmp, bases[i], scalars[i]) + g.Add(expected, expected, tmp) + } + result := g.New() + _, _ = g.MultiExp(result, bases, scalars) + if !g.Equal(expected, result) { + t.Fatal("bad multi-exponentiation") + } +} + +func TestG2MapToCurve(t *testing.T) { + for i, v := range []struct { + u []byte + expected []byte + }{ + { + u: make([]byte, 96), + expected: common.FromHex("0a67d12118b5a35bb02d2e86b3ebfa7e23410db93de39fb06d7025fa95e96ffa428a7a27c3ae4dd4b40bd251ac658892" + "018320896ec9eef9d5e619848dc29ce266f413d02dd31d9b9d44ec0c79cd61f18b075ddba6d7bd20b7ff27a4b324bfce" + "04c69777a43f0bda07679d5805e63f18cf4e0e7c6112ac7f70266d199b4f76ae27c6269a3ceebdae30806e9a76aadf5c" + "0260e03644d1a2c321256b3246bad2b895cad13890cbe6f85df55106a0d334604fb143c7a042d878006271865bc35941"), + }, + { + u: common.FromHex("025fbc07711ba267b7e70c82caa70a16fbb1d470ae24ceef307f5e2000751677820b7013ad4e25492dcf30052d3e5eca" + "0e775d7827adf385b83e20e4445bd3fab21d7b4498426daf3c1d608b9d41e9edb5eda0df022e753b8bb4bc3bb7db4914"), + expected: common.FromHex("0d4333b77becbf9f9dfa3ca928002233d1ecc854b1447e5a71f751c9042d000f42db91c1d6649a5e0ad22bd7bf7398b8" + "027e4bfada0b47f9f07e04aec463c7371e68f2fd0c738cd517932ea3801a35acf09db018deda57387b0f270f7a219e4d" + "0cc76dc777ea0d447e02a41004f37a0a7b1fafb6746884e8d9fc276716ccf47e4e0899548a2ec71c2bdf1a2a50e876db" + "053674cba9ef516ddc218fedb37324e6c47de27f88ab7ef123b006127d738293c0277187f7e2f80a299a24d84ed03da7"), + }, + { + u: common.FromHex("1870a7dbfd2a1deb74015a3546b20f598041bf5d5202997956a94a368d30d3f70f18cdaa1d33ce970a4e16af961cbdcb" + "045ab31ce4b5a8ba7c4b2851b64f063a66cd1223d3c85005b78e1beee65e33c90ceef0244e45fc45a5e1d6eab6644fdb"), + expected: common.FromHex("18f0f87b40af67c056915dbaf48534c592524e82c1c2b50c3734d02c0172c80df780a60b5683759298a3303c5d942778" + "09349f1cb5b2e55489dcd45a38545343451cc30a1681c57acd4fb0a6db125f8352c09f4a67eb7d1d8242cb7d3405f97b" + "10a2ba341bc689ab947b7941ce6ef39be17acaab067bd32bd652b471ab0792c53a2bd03bdac47f96aaafe96e441f63c0" + "02f2d9deb2c7742512f5b8230bf0fd83ea42279d7d39779543c1a43b61c885982b611f6a7a24b514995e8a098496b811"), + }, + { + u: common.FromHex("088fe329b054db8a6474f21a7fbfdf17b4c18044db299d9007af582c3d5f17d00e56d99921d4b5640fce44b05219b5de" + "0b6e6135a4cd31ba980ddbd115ac48abef7ec60e226f264d7befe002c165f3a496f36f76dd524efd75d17422558d10b4"), + expected: common.FromHex("19808ec5930a53c7cf5912ccce1cc33f1b3dcff24a53ce1cc4cba41fd6996dbed4843ccdd2eaf6a0cd801e562718d163" + "149fe43777d34f0d25430dea463889bd9393bdfb4932946db23671727081c629ebb98a89604f3433fba1c67d356a4af7" + "04783e391c30c83f805ca271e353582fdf19d159f6a4c39b73acbb637a9b8ac820cfbe2738d683368a7c07ad020e3e33" + "04c0d6793a766233b2982087b5f4a254f261003ccb3262ea7c50903eecef3e871d1502c293f9e063d7d293f6384f4551"), + }, + { + u: common.FromHex("03df16a66a05e4c1188c234788f43896e0565bfb64ac49b9639e6b284cc47dad73c47bb4ea7e677db8d496beb907fbb6" + "0f45b50647d67485295aa9eb2d91a877b44813677c67c8d35b2173ff3ba95f7bd0806f9ca8a1436b8b9d14ee81da4d7e"), + expected: common.FromHex("0b8e0094c886487870372eb6264613a6a087c7eb9804fab789be4e47a57b29eb19b1983a51165a1b5eb025865e9fc63a" + "0804152cbf8474669ad7d1796ab92d7ca21f32d8bed70898a748ed4e4e0ec557069003732fc86866d938538a2ae95552" + "14c80f068ece15a3936bb00c3c883966f75b4e8d9ddde809c11f781ab92d23a2d1d103ad48f6f3bb158bf3e3a4063449" + "09e5c8242dd7281ad32c03fe4af3f19167770016255fb25ad9b67ec51d62fade31a1af101e8f6172ec2ee8857662be3a"), + }, + } { + g := NewG2() + p0, err := g.MapToCurve(v.u) + if err != nil { + t.Fatal("map to curve fails", i, err) + } + if !bytes.Equal(g.ToBytes(p0), v.expected) { + t.Fatal("map to curve fails", i) + } + } +} + +func BenchmarkG2Add(t *testing.B) { + g2 := NewG2() + a, b, c := g2.rand(), g2.rand(), PointG2{} + t.ResetTimer() + for i := 0; i < t.N; i++ { + g2.Add(&c, a, b) + } +} + +func BenchmarkG2Mul(t *testing.B) { + g2 := NewG2() + a, e, c := g2.rand(), q, PointG2{} + t.ResetTimer() + for i := 0; i < t.N; i++ { + g2.MulScalar(&c, a, e) + } +} + +func BenchmarkG2SWUMap(t *testing.B) { + a := make([]byte, 96) + g2 := NewG2() + t.ResetTimer() + for i := 0; i < t.N; i++ { + _, err := g2.MapToCurve(a) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/crypto/bls12381/gt.go b/crypto/bls12381/gt.go new file mode 100644 index 00000000..2ac265e9 --- /dev/null +++ b/crypto/bls12381/gt.go @@ -0,0 +1,121 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" +) + +// E is type for target group element +type E = fe12 + +// GT is type for target multiplicative group GT. +type GT struct { + fp12 *fp12 +} + +func (e *E) Set(e2 *E) *E { + return e.set(e2) +} + +// One sets a new target group element to one +func (e *E) One() *E { + e = new(fe12).one() + return e +} + +// IsOne returns true if given element equals to one +func (e *E) IsOne() bool { + return e.isOne() +} + +// Equal returns true if given two element is equal, otherwise returns false +func (g *E) Equal(g2 *E) bool { + return g.equal(g2) +} + +// NewGT constructs new target group instance. +func NewGT() *GT { + fp12 := newFp12(nil) + return >{fp12} +} + +// Q returns group order in big.Int. +func (g *GT) Q() *big.Int { + return new(big.Int).Set(q) +} + +// FromBytes expects 576 byte input and returns target group element +// FromBytes returns error if given element is not on correct subgroup. +func (g *GT) FromBytes(in []byte) (*E, error) { + e, err := g.fp12.fromBytes(in) + if err != nil { + return nil, err + } + if !g.IsValid(e) { + return e, errors.New("invalid element") + } + return e, nil +} + +// ToBytes serializes target group element. +func (g *GT) ToBytes(e *E) []byte { + return g.fp12.toBytes(e) +} + +// IsValid checks whether given target group element is in correct subgroup. +func (g *GT) IsValid(e *E) bool { + r := g.New() + g.fp12.exp(r, e, q) + return r.isOne() +} + +// New initializes a new target group element which is equal to one +func (g *GT) New() *E { + return new(E).One() +} + +// Add adds two field element `a` and `b` and assigns the result to the element in first argument. +func (g *GT) Add(c, a, b *E) { + g.fp12.add(c, a, b) +} + +// Sub subtracts two field element `a` and `b`, and assigns the result to the element in first argument. +func (g *GT) Sub(c, a, b *E) { + g.fp12.sub(c, a, b) +} + +// Mul multiplies two field element `a` and `b` and assigns the result to the element in first argument. +func (g *GT) Mul(c, a, b *E) { + g.fp12.mul(c, a, b) +} + +// Square squares an element `a` and assigns the result to the element in first argument. +func (g *GT) Square(c, a *E) { + g.fp12.cyclotomicSquare(c, a) +} + +// Exp exponents an element `a` by a scalar `s` and assigns the result to the element in first argument. +func (g *GT) Exp(c, a *E, s *big.Int) { + g.fp12.cyclotomicExp(c, a, s) +} + +// Inverse inverses an element `a` and assigns the result to the element in first argument. +func (g *GT) Inverse(c, a *E) { + g.fp12.inverse(c, a) +} diff --git a/crypto/bls12381/isogeny.go b/crypto/bls12381/isogeny.go new file mode 100644 index 00000000..a63f585d --- /dev/null +++ b/crypto/bls12381/isogeny.go @@ -0,0 +1,227 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +// isogenyMapG1 applies 11-isogeny map for BLS12-381 G1 defined at draft-irtf-cfrg-hash-to-curve-06. +func isogenyMapG1(x, y *fe) { + // https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#appendix-C.2 + params := isogenyConstantsG1 + degree := 15 + xNum, xDen, yNum, yDen := new(fe), new(fe), new(fe), new(fe) + xNum.set(params[0][degree]) + xDen.set(params[1][degree]) + yNum.set(params[2][degree]) + yDen.set(params[3][degree]) + for i := degree - 1; i >= 0; i-- { + mul(xNum, xNum, x) + mul(xDen, xDen, x) + mul(yNum, yNum, x) + mul(yDen, yDen, x) + add(xNum, xNum, params[0][i]) + add(xDen, xDen, params[1][i]) + add(yNum, yNum, params[2][i]) + add(yDen, yDen, params[3][i]) + } + inverse(xDen, xDen) + inverse(yDen, yDen) + mul(xNum, xNum, xDen) + mul(yNum, yNum, yDen) + mul(yNum, yNum, y) + x.set(xNum) + y.set(yNum) +} + +// isogenyMapG2 applies 11-isogeny map for BLS12-381 G1 defined at draft-irtf-cfrg-hash-to-curve-06. +func isogenyMapG2(e *fp2, x, y *fe2) { + if e == nil { + e = newFp2() + } + // https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#appendix-C.2 + params := isogenyConstantsG2 + degree := 3 + xNum := new(fe2).set(params[0][degree]) + xDen := new(fe2).set(params[1][degree]) + yNum := new(fe2).set(params[2][degree]) + yDen := new(fe2).set(params[3][degree]) + for i := degree - 1; i >= 0; i-- { + e.mul(xNum, xNum, x) + e.mul(xDen, xDen, x) + e.mul(yNum, yNum, x) + e.mul(yDen, yDen, x) + e.add(xNum, xNum, params[0][i]) + e.add(xDen, xDen, params[1][i]) + e.add(yNum, yNum, params[2][i]) + e.add(yDen, yDen, params[3][i]) + } + e.inverse(xDen, xDen) + e.inverse(yDen, yDen) + e.mul(xNum, xNum, xDen) + e.mul(yNum, yNum, yDen) + e.mul(yNum, yNum, y) + x.set(xNum) + y.set(yNum) +} + +var isogenyConstantsG1 = [4][16]*fe{ + { + {0x4d18b6f3af00131c, 0x19fa219793fee28c, 0x3f2885f1467f19ae, 0x23dcea34f2ffb304, 0xd15b58d2ffc00054, 0x0913be200a20bef4}, + {0x898985385cdbbd8b, 0x3c79e43cc7d966aa, 0x1597e193f4cd233a, 0x8637ef1e4d6623ad, 0x11b22deed20d827b, 0x07097bc5998784ad}, + {0xa542583a480b664b, 0xfc7169c026e568c6, 0x5ba2ef314ed8b5a6, 0x5b5491c05102f0e7, 0xdf6e99707d2a0079, 0x0784151ed7605524}, + {0x494e212870f72741, 0xab9be52fbda43021, 0x26f5577994e34c3d, 0x049dfee82aefbd60, 0x65dadd7828505289, 0x0e93d431ea011aeb}, + {0x90ee774bd6a74d45, 0x7ada1c8a41bfb185, 0x0f1a8953b325f464, 0x104c24211be4805c, 0x169139d319ea7a8f, 0x09f20ead8e532bf6}, + {0x6ddd93e2f43626b7, 0xa5482c9aa1ccd7bd, 0x143245631883f4bd, 0x2e0a94ccf77ec0db, 0xb0282d480e56489f, 0x18f4bfcbb4368929}, + {0x23c5f0c953402dfd, 0x7a43ff6958ce4fe9, 0x2c390d3d2da5df63, 0xd0df5c98e1f9d70f, 0xffd89869a572b297, 0x1277ffc72f25e8fe}, + {0x79f4f0490f06a8a6, 0x85f894a88030fd81, 0x12da3054b18b6410, 0xe2a57f6505880d65, 0xbba074f260e400f1, 0x08b76279f621d028}, + {0xe67245ba78d5b00b, 0x8456ba9a1f186475, 0x7888bff6e6b33bb4, 0xe21585b9a30f86cb, 0x05a69cdcef55feee, 0x09e699dd9adfa5ac}, + {0x0de5c357bff57107, 0x0a0db4ae6b1a10b2, 0xe256bb67b3b3cd8d, 0x8ad456574e9db24f, 0x0443915f50fd4179, 0x098c4bf7de8b6375}, + {0xe6b0617e7dd929c7, 0xfe6e37d442537375, 0x1dafdeda137a489e, 0xe4efd1ad3f767ceb, 0x4a51d8667f0fe1cf, 0x054fdf4bbf1d821c}, + {0x72db2a50658d767b, 0x8abf91faa257b3d5, 0xe969d6833764ab47, 0x464170142a1009eb, 0xb14f01aadb30be2f, 0x18ae6a856f40715d}, + {0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0}, + }, + { + {0xb962a077fdb0f945, 0xa6a9740fefda13a0, 0xc14d568c3ed6c544, 0xb43fc37b908b133e, 0x9c0b3ac929599016, 0x0165aa6c93ad115f}, + {0x23279a3ba506c1d9, 0x92cfca0a9465176a, 0x3b294ab13755f0ff, 0x116dda1c5070ae93, 0xed4530924cec2045, 0x083383d6ed81f1ce}, + {0x9885c2a6449fecfc, 0x4a2b54ccd37733f0, 0x17da9ffd8738c142, 0xa0fba72732b3fafd, 0xff364f36e54b6812, 0x0f29c13c660523e2}, + {0xe349cc118278f041, 0xd487228f2f3204fb, 0xc9d325849ade5150, 0x43a92bd69c15c2df, 0x1c2c7844bc417be4, 0x12025184f407440c}, + {0x587f65ae6acb057b, 0x1444ef325140201f, 0xfbf995e71270da49, 0xccda066072436a42, 0x7408904f0f186bb2, 0x13b93c63edf6c015}, + {0xfb918622cd141920, 0x4a4c64423ecaddb4, 0x0beb232927f7fb26, 0x30f94df6f83a3dc2, 0xaeedd424d780f388, 0x06cc402dd594bbeb}, + {0xd41f761151b23f8f, 0x32a92465435719b3, 0x64f436e888c62cb9, 0xdf70a9a1f757c6e4, 0x6933a38d5b594c81, 0x0c6f7f7237b46606}, + {0x693c08747876c8f7, 0x22c9850bf9cf80f0, 0x8e9071dab950c124, 0x89bc62d61c7baf23, 0xbc6be2d8dad57c23, 0x17916987aa14a122}, + {0x1be3ff439c1316fd, 0x9965243a7571dfa7, 0xc7f7f62962f5cd81, 0x32c6aa9af394361c, 0xbbc2ee18e1c227f4, 0x0c102cbac531bb34}, + {0x997614c97bacbf07, 0x61f86372b99192c0, 0x5b8c95fc14353fc3, 0xca2b066c2a87492f, 0x16178f5bbf698711, 0x12a6dcd7f0f4e0e8}, + {0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + {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}, + }, + { + {0x2b567ff3e2837267, 0x1d4d9e57b958a767, 0xce028fea04bd7373, 0xcc31a30a0b6cd3df, 0x7d7b18a682692693, 0x0d300744d42a0310}, + {0x99c2555fa542493f, 0xfe7f53cc4874f878, 0x5df0608b8f97608a, 0x14e03832052b49c8, 0x706326a6957dd5a4, 0x0a8dadd9c2414555}, + {0x13d942922a5cf63a, 0x357e33e36e261e7d, 0xcf05a27c8456088d, 0x0000bd1de7ba50f0, 0x83d0c7532f8c1fde, 0x13f70bf38bbf2905}, + {0x5c57fd95bfafbdbb, 0x28a359a65e541707, 0x3983ceb4f6360b6d, 0xafe19ff6f97e6d53, 0xb3468f4550192bf7, 0x0bb6cde49d8ba257}, + {0x590b62c7ff8a513f, 0x314b4ce372cacefd, 0x6bef32ce94b8a800, 0x6ddf84a095713d5f, 0x64eace4cb0982191, 0x0386213c651b888d}, + {0xa5310a31111bbcdd, 0xa14ac0f5da148982, 0xf9ad9cc95423d2e9, 0xaa6ec095283ee4a7, 0xcf5b1f022e1c9107, 0x01fddf5aed881793}, + {0x65a572b0d7a7d950, 0xe25c2d8183473a19, 0xc2fcebe7cb877dbd, 0x05b2d36c769a89b0, 0xba12961be86e9efb, 0x07eb1b29c1dfde1f}, + {0x93e09572f7c4cd24, 0x364e929076795091, 0x8569467e68af51b5, 0xa47da89439f5340f, 0xf4fa918082e44d64, 0x0ad52ba3e6695a79}, + {0x911429844e0d5f54, 0xd03f51a3516bb233, 0x3d587e5640536e66, 0xfa86d2a3a9a73482, 0xa90ed5adf1ed5537, 0x149c9c326a5e7393}, + {0x462bbeb03c12921a, 0xdc9af5fa0a274a17, 0x9a558ebde836ebed, 0x649ef8f11a4fae46, 0x8100e1652b3cdc62, 0x1862bd62c291dacb}, + {0x05c9b8ca89f12c26, 0x0194160fa9b9ac4f, 0x6a643d5a6879fa2c, 0x14665bdd8846e19d, 0xbb1d0d53af3ff6bf, 0x12c7e1c3b28962e5}, + {0xb55ebf900b8a3e17, 0xfedc77ec1a9201c4, 0x1f07db10ea1a4df4, 0x0dfbd15dc41a594d, 0x389547f2334a5391, 0x02419f98165871a4}, + {0xb416af000745fc20, 0x8e563e9d1ea6d0f5, 0x7c763e17763a0652, 0x01458ef0159ebbef, 0x8346fe421f96bb13, 0x0d2d7b829ce324d2}, + {0x93096bb538d64615, 0x6f2a2619951d823a, 0x8f66b3ea59514fa4, 0xf563e63704f7092f, 0x724b136c4cf2d9fa, 0x046959cfcfd0bf49}, + {0xea748d4b6e405346, 0x91e9079c2c02d58f, 0x41064965946d9b59, 0xa06731f1d2bbe1ee, 0x07f897e267a33f1b, 0x1017290919210e5f}, + {0x872aa6c17d985097, 0xeecc53161264562a, 0x07afe37afff55002, 0x54759078e5be6838, 0xc4b92d15db8acca8, 0x106d87d1b51d13b9}, + }, + { + {0xeb6c359d47e52b1c, 0x18ef5f8a10634d60, 0xddfa71a0889d5b7e, 0x723e71dcc5fc1323, 0x52f45700b70d5c69, 0x0a8b981ee47691f1}, + {0x616a3c4f5535b9fb, 0x6f5f037395dbd911, 0xf25f4cc5e35c65da, 0x3e50dffea3c62658, 0x6a33dca523560776, 0x0fadeff77b6bfe3e}, + {0x2be9b66df470059c, 0x24a2c159a3d36742, 0x115dbe7ad10c2a37, 0xb6634a652ee5884d, 0x04fe8bb2b8d81af4, 0x01c2a7a256fe9c41}, + {0xf27bf8ef3b75a386, 0x898b367476c9073f, 0x24482e6b8c2f4e5f, 0xc8e0bbd6fe110806, 0x59b0c17f7631448a, 0x11037cd58b3dbfbd}, + {0x31c7912ea267eec6, 0x1dbf6f1c5fcdb700, 0xd30d4fe3ba86fdb1, 0x3cae528fbee9a2a4, 0xb1cce69b6aa9ad9a, 0x044393bb632d94fb}, + {0xc66ef6efeeb5c7e8, 0x9824c289dd72bb55, 0x71b1a4d2f119981d, 0x104fc1aafb0919cc, 0x0e49df01d942a628, 0x096c3a09773272d4}, + {0x9abc11eb5fadeff4, 0x32dca50a885728f0, 0xfb1fa3721569734c, 0xc4b76271ea6506b3, 0xd466a75599ce728e, 0x0c81d4645f4cb6ed}, + {0x4199f10e5b8be45b, 0xda64e495b1e87930, 0xcb353efe9b33e4ff, 0x9e9efb24aa6424c6, 0xf08d33680a237465, 0x0d3378023e4c7406}, + {0x7eb4ae92ec74d3a5, 0xc341b4aa9fac3497, 0x5be603899e907687, 0x03bfd9cca75cbdeb, 0x564c2935a96bfa93, 0x0ef3c33371e2fdb5}, + {0x7ee91fd449f6ac2e, 0xe5d5bd5cb9357a30, 0x773a8ca5196b1380, 0xd0fda172174ed023, 0x6cb95e0fa776aead, 0x0d22d5a40cec7cff}, + {0xf727e09285fd8519, 0xdc9d55a83017897b, 0x7549d8bd057894ae, 0x178419613d90d8f8, 0xfce95ebdeb5b490a, 0x0467ffaef23fc49e}, + {0xc1769e6a7c385f1b, 0x79bc930deac01c03, 0x5461c75a23ede3b5, 0x6e20829e5c230c45, 0x828e0f1e772a53cd, 0x116aefa749127bff}, + {0x101c10bf2744c10a, 0xbbf18d053a6a3154, 0xa0ecf39ef026f602, 0xfc009d4996dc5153, 0xb9000209d5bd08d3, 0x189e5fe4470cd73c}, + {0x7ebd546ca1575ed2, 0xe47d5a981d081b55, 0x57b2b625b6d4ca21, 0xb0a1ba04228520cc, 0x98738983c2107ff3, 0x13dddbc4799d81d6}, + {0x09319f2e39834935, 0x039e952cbdb05c21, 0x55ba77a9a2f76493, 0xfd04e3dfc6086467, 0xfb95832e7d78742e, 0x0ef9c24eccaf5e0e}, + {0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + }, +} + +var isogenyConstantsG2 = [4][4]*fe2{ + { + { + fe{0x47f671c71ce05e62, 0x06dd57071206393e, 0x7c80cd2af3fd71a2, 0x048103ea9e6cd062, 0xc54516acc8d037f6, 0x13808f550920ea41}, + fe{0x47f671c71ce05e62, 0x06dd57071206393e, 0x7c80cd2af3fd71a2, 0x048103ea9e6cd062, 0xc54516acc8d037f6, 0x13808f550920ea41}, + }, + { + fe{0, 0, 0, 0, 0, 0}, + fe{0x5fe55555554c71d0, 0x873fffdd236aaaa3, 0x6a6b4619b26ef918, 0x21c2888408874945, 0x2836cda7028cabc5, 0x0ac73310a7fd5abd}, + }, + { + fe{0x0a0c5555555971c3, 0xdb0c00101f9eaaae, 0xb1fb2f941d797997, 0xd3960742ef416e1c, 0xb70040e2c20556f4, 0x149d7861e581393b}, + fe{0xaff2aaaaaaa638e8, 0x439fffee91b55551, 0xb535a30cd9377c8c, 0x90e144420443a4a2, 0x941b66d3814655e2, 0x0563998853fead5e}, + }, + { + fe{0x40aac71c71c725ed, 0x190955557a84e38e, 0xd817050a8f41abc3, 0xd86485d4c87f6fb1, 0x696eb479f885d059, 0x198e1a74328002d2}, + fe{0, 0, 0, 0, 0, 0}, + }, + }, + { + { + fe{0, 0, 0, 0, 0, 0}, + fe{0x1f3affffff13ab97, 0xf25bfc611da3ff3e, 0xca3757cb3819b208, 0x3e6427366f8cec18, 0x03977bc86095b089, 0x04f69db13f39a952}, + }, + { + fe{0x447600000027552e, 0xdcb8009a43480020, 0x6f7ee9ce4a6e8b59, 0xb10330b7c0a95bc6, 0x6140b1fcfb1e54b7, 0x0381be097f0bb4e1}, + fe{0x7588ffffffd8557d, 0x41f3ff646e0bffdf, 0xf7b1e8d2ac426aca, 0xb3741acd32dbb6f8, 0xe9daf5b9482d581f, 0x167f53e0ba7431b8}, + }, + { + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0, 0, 0, 0, 0, 0}, + }, + { + fe{0, 0, 0, 0, 0, 0}, + fe{0, 0, 0, 0, 0, 0}, + }, + }, + { + { + fe{0x96d8f684bdfc77be, 0xb530e4f43b66d0e2, 0x184a88ff379652fd, 0x57cb23ecfae804e1, 0x0fd2e39eada3eba9, 0x08c8055e31c5d5c3}, + fe{0x96d8f684bdfc77be, 0xb530e4f43b66d0e2, 0x184a88ff379652fd, 0x57cb23ecfae804e1, 0x0fd2e39eada3eba9, 0x08c8055e31c5d5c3}, + }, + { + fe{0, 0, 0, 0, 0, 0}, + fe{0xbf0a71c71c91b406, 0x4d6d55d28b7638fd, 0x9d82f98e5f205aee, 0xa27aa27b1d1a18d5, 0x02c3b2b2d2938e86, 0x0c7d13420b09807f}, + }, + { + fe{0xd7f9555555531c74, 0x21cffff748daaaa8, 0x5a9ad1866c9bbe46, 0x4870a2210221d251, 0x4a0db369c0a32af1, 0x02b1ccc429ff56af}, + fe{0xe205aaaaaaac8e37, 0xfcdc000768795556, 0x0c96011a8a1537dd, 0x1c06a963f163406e, 0x010df44c82a881e6, 0x174f45260f808feb}, + }, + { + fe{0xa470bda12f67f35c, 0xc0fe38e23327b425, 0xc9d3d0f2c6f0678d, 0x1c55c9935b5a982e, 0x27f6c0e2f0746764, 0x117c5e6e28aa9054}, + fe{0, 0, 0, 0, 0, 0}, + }, + }, + { + { + fe{0x0162fffffa765adf, 0x8f7bea480083fb75, 0x561b3c2259e93611, 0x11e19fc1a9c875d5, 0xca713efc00367660, 0x03c6a03d41da1151}, + fe{0x0162fffffa765adf, 0x8f7bea480083fb75, 0x561b3c2259e93611, 0x11e19fc1a9c875d5, 0xca713efc00367660, 0x03c6a03d41da1151}, + }, + { + fe{0, 0, 0, 0, 0, 0}, + fe{0x5db0fffffd3b02c5, 0xd713f52358ebfdba, 0x5ea60761a84d161a, 0xbb2c75a34ea6c44a, 0x0ac6735921c1119b, 0x0ee3d913bdacfbf6}, + }, + { + fe{0x66b10000003affc5, 0xcb1400e764ec0030, 0xa73e5eb56fa5d106, 0x8984c913a0fe09a9, 0x11e10afb78ad7f13, 0x05429d0e3e918f52}, + fe{0x534dffffffc4aae6, 0x5397ff174c67ffcf, 0xbff273eb870b251d, 0xdaf2827152870915, 0x393a9cbaca9e2dc3, 0x14be74dbfaee5748}, + }, + { + fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, + fe{0, 0, 0, 0, 0, 0}, + }, + }, +} diff --git a/crypto/bls12381/pairing.go b/crypto/bls12381/pairing.go new file mode 100644 index 00000000..d292d7c3 --- /dev/null +++ b/crypto/bls12381/pairing.go @@ -0,0 +1,282 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +type pair struct { + g1 *PointG1 + g2 *PointG2 +} + +func newPair(g1 *PointG1, g2 *PointG2) pair { + return pair{g1, g2} +} + +// Engine is BLS12-381 elliptic curve pairing engine +type Engine struct { + G1 *G1 + G2 *G2 + fp12 *fp12 + fp2 *fp2 + pairingEngineTemp + pairs []pair +} + +// NewPairingEngine creates new pairing engine instance. +func NewPairingEngine() *Engine { + fp2 := newFp2() + fp6 := newFp6(fp2) + fp12 := newFp12(fp6) + g1 := NewG1() + g2 := newG2(fp2) + return &Engine{ + fp2: fp2, + fp12: fp12, + G1: g1, + G2: g2, + pairingEngineTemp: newEngineTemp(), + } +} + +type pairingEngineTemp struct { + t2 [10]*fe2 + t12 [9]fe12 +} + +func newEngineTemp() pairingEngineTemp { + t2 := [10]*fe2{} + for i := 0; i < 10; i++ { + t2[i] = &fe2{} + } + t12 := [9]fe12{} + return pairingEngineTemp{t2, t12} +} + +// AddPair adds a g1, g2 point pair to pairing engine +func (e *Engine) AddPair(g1 *PointG1, g2 *PointG2) *Engine { + p := newPair(g1, g2) + if !e.isZero(p) { + e.affine(p) + e.pairs = append(e.pairs, p) + } + return e +} + +// AddPairInv adds a G1, G2 point pair to pairing engine. G1 point is negated. +func (e *Engine) AddPairInv(g1 *PointG1, g2 *PointG2) *Engine { + e.G1.Neg(g1, g1) + e.AddPair(g1, g2) + return e +} + +// Reset deletes added pairs. +func (e *Engine) Reset() *Engine { + e.pairs = []pair{} + return e +} + +func (e *Engine) isZero(p pair) bool { + return e.G1.IsZero(p.g1) || e.G2.IsZero(p.g2) +} + +func (e *Engine) affine(p pair) { + e.G1.Affine(p.g1) + e.G2.Affine(p.g2) +} + +func (e *Engine) doublingStep(coeff *[3]fe2, r *PointG2) { + // Adaptation of Formula 3 in https://eprint.iacr.org/2010/526.pdf + fp2 := e.fp2 + t := e.t2 + fp2.mul(t[0], &r[0], &r[1]) + fp2.mulByFq(t[0], t[0], twoInv) + fp2.square(t[1], &r[1]) + fp2.square(t[2], &r[2]) + fp2.double(t[7], t[2]) + fp2.add(t[7], t[7], t[2]) + fp2.mulByB(t[3], t[7]) + fp2.double(t[4], t[3]) + fp2.add(t[4], t[4], t[3]) + fp2.add(t[5], t[1], t[4]) + fp2.mulByFq(t[5], t[5], twoInv) + fp2.add(t[6], &r[1], &r[2]) + fp2.square(t[6], t[6]) + fp2.add(t[7], t[2], t[1]) + fp2.sub(t[6], t[6], t[7]) + fp2.sub(&coeff[0], t[3], t[1]) + fp2.square(t[7], &r[0]) + fp2.sub(t[4], t[1], t[4]) + fp2.mul(&r[0], t[4], t[0]) + fp2.square(t[2], t[3]) + fp2.double(t[3], t[2]) + fp2.add(t[3], t[3], t[2]) + fp2.square(t[5], t[5]) + fp2.sub(&r[1], t[5], t[3]) + fp2.mul(&r[2], t[1], t[6]) + fp2.double(t[0], t[7]) + fp2.add(&coeff[1], t[0], t[7]) + fp2.neg(&coeff[2], t[6]) +} + +func (e *Engine) additionStep(coeff *[3]fe2, r, q *PointG2) { + // Algorithm 12 in https://eprint.iacr.org/2010/526.pdf + fp2 := e.fp2 + t := e.t2 + fp2.mul(t[0], &q[1], &r[2]) + fp2.neg(t[0], t[0]) + fp2.add(t[0], t[0], &r[1]) + fp2.mul(t[1], &q[0], &r[2]) + fp2.neg(t[1], t[1]) + fp2.add(t[1], t[1], &r[0]) + fp2.square(t[2], t[0]) + fp2.square(t[3], t[1]) + fp2.mul(t[4], t[1], t[3]) + fp2.mul(t[2], &r[2], t[2]) + fp2.mul(t[3], &r[0], t[3]) + fp2.double(t[5], t[3]) + fp2.sub(t[5], t[4], t[5]) + fp2.add(t[5], t[5], t[2]) + fp2.mul(&r[0], t[1], t[5]) + fp2.sub(t[2], t[3], t[5]) + fp2.mul(t[2], t[2], t[0]) + fp2.mul(t[3], &r[1], t[4]) + fp2.sub(&r[1], t[2], t[3]) + fp2.mul(&r[2], &r[2], t[4]) + fp2.mul(t[2], t[1], &q[1]) + fp2.mul(t[3], t[0], &q[0]) + fp2.sub(&coeff[0], t[3], t[2]) + fp2.neg(&coeff[1], t[0]) + coeff[2].set(t[1]) +} + +func (e *Engine) preCompute(ellCoeffs *[68][3]fe2, twistPoint *PointG2) { + // Algorithm 5 in https://eprint.iacr.org/2019/077.pdf + if e.G2.IsZero(twistPoint) { + return + } + r := new(PointG2).Set(twistPoint) + j := 0 + for i := x.BitLen() - 2; i >= 0; i-- { + e.doublingStep(&ellCoeffs[j], r) + if x.Bit(i) != 0 { + j++ + ellCoeffs[j] = fe6{} + e.additionStep(&ellCoeffs[j], r, twistPoint) + } + j++ + } +} + +func (e *Engine) millerLoop(f *fe12) { + pairs := e.pairs + ellCoeffs := make([][68][3]fe2, len(pairs)) + for i := 0; i < len(pairs); i++ { + e.preCompute(&ellCoeffs[i], pairs[i].g2) + } + fp12, fp2 := e.fp12, e.fp2 + t := e.t2 + f.one() + j := 0 + for i := 62; /* x.BitLen() - 2 */ i >= 0; i-- { + if i != 62 { + fp12.square(f, f) + } + for i := 0; i <= len(pairs)-1; i++ { + fp2.mulByFq(t[0], &ellCoeffs[i][j][2], &pairs[i].g1[1]) + fp2.mulByFq(t[1], &ellCoeffs[i][j][1], &pairs[i].g1[0]) + fp12.mulBy014Assign(f, &ellCoeffs[i][j][0], t[1], t[0]) + } + if x.Bit(i) != 0 { + j++ + for i := 0; i <= len(pairs)-1; i++ { + fp2.mulByFq(t[0], &ellCoeffs[i][j][2], &pairs[i].g1[1]) + fp2.mulByFq(t[1], &ellCoeffs[i][j][1], &pairs[i].g1[0]) + fp12.mulBy014Assign(f, &ellCoeffs[i][j][0], t[1], t[0]) + } + } + j++ + } + fp12.conjugate(f, f) +} + +func (e *Engine) exp(c, a *fe12) { + fp12 := e.fp12 + fp12.cyclotomicExp(c, a, x) + fp12.conjugate(c, c) +} + +func (e *Engine) finalExp(f *fe12) { + fp12 := e.fp12 + t := e.t12 + // easy part + fp12.frobeniusMap(&t[0], f, 6) + fp12.inverse(&t[1], f) + fp12.mul(&t[2], &t[0], &t[1]) + t[1].set(&t[2]) + fp12.frobeniusMapAssign(&t[2], 2) + fp12.mulAssign(&t[2], &t[1]) + fp12.cyclotomicSquare(&t[1], &t[2]) + fp12.conjugate(&t[1], &t[1]) + // hard part + e.exp(&t[3], &t[2]) + fp12.cyclotomicSquare(&t[4], &t[3]) + fp12.mul(&t[5], &t[1], &t[3]) + e.exp(&t[1], &t[5]) + e.exp(&t[0], &t[1]) + e.exp(&t[6], &t[0]) + fp12.mulAssign(&t[6], &t[4]) + e.exp(&t[4], &t[6]) + fp12.conjugate(&t[5], &t[5]) + fp12.mulAssign(&t[4], &t[5]) + fp12.mulAssign(&t[4], &t[2]) + fp12.conjugate(&t[5], &t[2]) + fp12.mulAssign(&t[1], &t[2]) + fp12.frobeniusMapAssign(&t[1], 3) + fp12.mulAssign(&t[6], &t[5]) + fp12.frobeniusMapAssign(&t[6], 1) + fp12.mulAssign(&t[3], &t[0]) + fp12.frobeniusMapAssign(&t[3], 2) + fp12.mulAssign(&t[3], &t[1]) + fp12.mulAssign(&t[3], &t[6]) + fp12.mul(f, &t[3], &t[4]) +} + +func (e *Engine) calculate() *fe12 { + f := e.fp12.one() + if len(e.pairs) == 0 { + return f + } + e.millerLoop(f) + e.finalExp(f) + return f +} + +// Check computes pairing and checks if result is equal to one +func (e *Engine) Check() bool { + return e.calculate().isOne() +} + +// Result computes pairing and returns target group element as result. +func (e *Engine) Result() *E { + r := e.calculate() + e.Reset() + return r +} + +// GT returns target group instance. +func (e *Engine) GT() *GT { + return NewGT() +} diff --git a/crypto/bls12381/pairing_test.go b/crypto/bls12381/pairing_test.go new file mode 100644 index 00000000..77676fe9 --- /dev/null +++ b/crypto/bls12381/pairing_test.go @@ -0,0 +1,230 @@ +package bls12381 + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func TestPairingExpected(t *testing.T) { + bls := NewPairingEngine() + G1, G2 := bls.G1, bls.G2 + GT := bls.GT() + expected, err := GT.FromBytes( + common.FromHex("" + + "0f41e58663bf08cf068672cbd01a7ec73baca4d72ca93544deff686bfd6df543d48eaa24afe47e1efde449383b676631" + + "04c581234d086a9902249b64728ffd21a189e87935a954051c7cdba7b3872629a4fafc05066245cb9108f0242d0fe3ef" + + "03350f55a7aefcd3c31b4fcb6ce5771cc6a0e9786ab5973320c806ad360829107ba810c5a09ffdd9be2291a0c25a99a2" + + "11b8b424cd48bf38fcef68083b0b0ec5c81a93b330ee1a677d0d15ff7b984e8978ef48881e32fac91b93b47333e2ba57" + + "06fba23eb7c5af0d9f80940ca771b6ffd5857baaf222eb95a7d2809d61bfe02e1bfd1b68ff02f0b8102ae1c2d5d5ab1a" + + "19f26337d205fb469cd6bd15c3d5a04dc88784fbb3d0b2dbdea54d43b2b73f2cbb12d58386a8703e0f948226e47ee89d" + + "018107154f25a764bd3c79937a45b84546da634b8f6be14a8061e55cceba478b23f7dacaa35c8ca78beae9624045b4b6" + + "01b2f522473d171391125ba84dc4007cfbf2f8da752f7c74185203fcca589ac719c34dffbbaad8431dad1c1fb597aaa5" + + "193502b86edb8857c273fa075a50512937e0794e1e65a7617c90d8bd66065b1fffe51d7a579973b1315021ec3c19934f" + + "1368bb445c7c2d209703f239689ce34c0378a68e72a6b3b216da0e22a5031b54ddff57309396b38c881c4c849ec23e87" + + "089a1c5b46e5110b86750ec6a532348868a84045483c92b7af5af689452eafabf1a8943e50439f1d59882a98eaa0170f" + + "1250ebd871fc0a92a7b2d83168d0d727272d441befa15c503dd8e90ce98db3e7b6d194f60839c508a84305aaca1789b6", + ), + ) + if err != nil { + t.Fatal(err) + } + r := bls.AddPair(G1.One(), G2.One()).Result() + if !r.Equal(expected) { + t.Fatal("bad pairing") + } + if !GT.IsValid(r) { + t.Fatal("element is not in correct subgroup") + } +} + +func TestPairingNonDegeneracy(t *testing.T) { + bls := NewPairingEngine() + G1, G2 := bls.G1, bls.G2 + g1Zero, g2Zero, g1One, g2One := G1.Zero(), G2.Zero(), G1.One(), G2.One() + GT := bls.GT() + // e(g1^a, g2^b) != 1 + bls.Reset() + { + bls.AddPair(g1One, g2One) + e := bls.Result() + if e.IsOne() { + t.Fatal("pairing result is not expected to be one") + } + if !GT.IsValid(e) { + t.Fatal("pairing result is not valid") + } + } + // e(g1^a, 0) == 1 + bls.Reset() + { + bls.AddPair(g1One, g2Zero) + e := bls.Result() + if !e.IsOne() { + t.Fatal("pairing result is expected to be one") + } + } + // e(0, g2^b) == 1 + bls.Reset() + { + bls.AddPair(g1Zero, g2One) + e := bls.Result() + if !e.IsOne() { + t.Fatal("pairing result is expected to be one") + } + } + // + bls.Reset() + { + bls.AddPair(g1Zero, g2One) + bls.AddPair(g1One, g2Zero) + bls.AddPair(g1Zero, g2Zero) + e := bls.Result() + if !e.IsOne() { + t.Fatal("pairing result is expected to be one") + } + } + // + bls.Reset() + { + expected, err := GT.FromBytes( + common.FromHex("" + + "0f41e58663bf08cf068672cbd01a7ec73baca4d72ca93544deff686bfd6df543d48eaa24afe47e1efde449383b676631" + + "04c581234d086a9902249b64728ffd21a189e87935a954051c7cdba7b3872629a4fafc05066245cb9108f0242d0fe3ef" + + "03350f55a7aefcd3c31b4fcb6ce5771cc6a0e9786ab5973320c806ad360829107ba810c5a09ffdd9be2291a0c25a99a2" + + "11b8b424cd48bf38fcef68083b0b0ec5c81a93b330ee1a677d0d15ff7b984e8978ef48881e32fac91b93b47333e2ba57" + + "06fba23eb7c5af0d9f80940ca771b6ffd5857baaf222eb95a7d2809d61bfe02e1bfd1b68ff02f0b8102ae1c2d5d5ab1a" + + "19f26337d205fb469cd6bd15c3d5a04dc88784fbb3d0b2dbdea54d43b2b73f2cbb12d58386a8703e0f948226e47ee89d" + + "018107154f25a764bd3c79937a45b84546da634b8f6be14a8061e55cceba478b23f7dacaa35c8ca78beae9624045b4b6" + + "01b2f522473d171391125ba84dc4007cfbf2f8da752f7c74185203fcca589ac719c34dffbbaad8431dad1c1fb597aaa5" + + "193502b86edb8857c273fa075a50512937e0794e1e65a7617c90d8bd66065b1fffe51d7a579973b1315021ec3c19934f" + + "1368bb445c7c2d209703f239689ce34c0378a68e72a6b3b216da0e22a5031b54ddff57309396b38c881c4c849ec23e87" + + "089a1c5b46e5110b86750ec6a532348868a84045483c92b7af5af689452eafabf1a8943e50439f1d59882a98eaa0170f" + + "1250ebd871fc0a92a7b2d83168d0d727272d441befa15c503dd8e90ce98db3e7b6d194f60839c508a84305aaca1789b6", + ), + ) + if err != nil { + t.Fatal(err) + } + bls.AddPair(g1Zero, g2One) + bls.AddPair(g1One, g2Zero) + bls.AddPair(g1Zero, g2Zero) + bls.AddPair(g1One, g2One) + e := bls.Result() + if !e.Equal(expected) { + t.Fatal("bad pairing") + } + } +} + +func TestPairingBilinearity(t *testing.T) { + bls := NewPairingEngine() + g1, g2 := bls.G1, bls.G2 + gt := bls.GT() + // e(a*G1, b*G2) = e(G1, G2)^c + { + a, b := big.NewInt(17), big.NewInt(117) + c := new(big.Int).Mul(a, b) + G1, G2 := g1.One(), g2.One() + e0 := bls.AddPair(G1, G2).Result() + P1, P2 := g1.New(), g2.New() + g1.MulScalar(P1, G1, a) + g2.MulScalar(P2, G2, b) + e1 := bls.AddPair(P1, P2).Result() + gt.Exp(e0, e0, c) + if !e0.Equal(e1) { + t.Fatal("bad pairing, 1") + } + } + // e(a * G1, b * G2) = e((a + b) * G1, G2) + { + // scalars + a, b := big.NewInt(17), big.NewInt(117) + c := new(big.Int).Mul(a, b) + // LHS + G1, G2 := g1.One(), g2.One() + g1.MulScalar(G1, G1, c) + bls.AddPair(G1, G2) + // RHS + P1, P2 := g1.One(), g2.One() + g1.MulScalar(P1, P1, a) + g2.MulScalar(P2, P2, b) + bls.AddPairInv(P1, P2) + // should be one + if !bls.Check() { + t.Fatal("bad pairing, 2") + } + } + // e(a * G1, b * G2) = e((a + b) * G1, G2) + { + // scalars + a, b := big.NewInt(17), big.NewInt(117) + c := new(big.Int).Mul(a, b) + // LHS + G1, G2 := g1.One(), g2.One() + g2.MulScalar(G2, G2, c) + bls.AddPair(G1, G2) + // RHS + H1, H2 := g1.One(), g2.One() + g1.MulScalar(H1, H1, a) + g2.MulScalar(H2, H2, b) + bls.AddPairInv(H1, H2) + // should be one + if !bls.Check() { + t.Fatal("bad pairing, 3") + } + } +} + +func TestPairingMulti(t *testing.T) { + // e(G1, G2) ^ t == e(a01 * G1, a02 * G2) * e(a11 * G1, a12 * G2) * ... * e(an1 * G1, an2 * G2) + // where t = sum(ai1 * ai2) + bls := NewPairingEngine() + g1, g2 := bls.G1, bls.G2 + numOfPair := 100 + targetExp := new(big.Int) + // RHS + for i := 0; i < numOfPair; i++ { + // (ai1 * G1, ai2 * G2) + a1, a2 := randScalar(q), randScalar(q) + P1, P2 := g1.One(), g2.One() + g1.MulScalar(P1, P1, a1) + g2.MulScalar(P2, P2, a2) + bls.AddPair(P1, P2) + // accumulate targetExp + // t += (ai1 * ai2) + a1.Mul(a1, a2) + targetExp.Add(targetExp, a1) + } + // LHS + // e(t * G1, G2) + T1, T2 := g1.One(), g2.One() + g1.MulScalar(T1, T1, targetExp) + bls.AddPairInv(T1, T2) + if !bls.Check() { + t.Fatal("fail multi pairing") + } +} + +func TestPairingEmpty(t *testing.T) { + bls := NewPairingEngine() + if !bls.Check() { + t.Fatal("empty check should be accepted") + } + if !bls.Result().IsOne() { + t.Fatal("empty pairing result should be one") + } +} + +func BenchmarkPairing(t *testing.B) { + bls := NewPairingEngine() + g1, g2, gt := bls.G1, bls.G2, bls.GT() + bls.AddPair(g1.One(), g2.One()) + e := gt.New() + t.ResetTimer() + for i := 0; i < t.N; i++ { + e = bls.calculate() + } + _ = e +} diff --git a/crypto/bls12381/swu.go b/crypto/bls12381/swu.go new file mode 100644 index 00000000..e78753b2 --- /dev/null +++ b/crypto/bls12381/swu.go @@ -0,0 +1,158 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +// swuMapG1 is implementation of Simplified Shallue-van de Woestijne-Ulas Method +// follows the implementation at draft-irtf-cfrg-hash-to-curve-06. +func swuMapG1(u *fe) (*fe, *fe) { + var params = swuParamsForG1 + var tv [4]*fe + for i := 0; i < 4; i++ { + tv[i] = new(fe) + } + square(tv[0], u) + mul(tv[0], tv[0], params.z) + square(tv[1], tv[0]) + x1 := new(fe) + add(x1, tv[0], tv[1]) + inverse(x1, x1) + e1 := x1.isZero() + one := new(fe).one() + add(x1, x1, one) + if e1 { + x1.set(params.zInv) + } + mul(x1, x1, params.minusBOverA) + gx1 := new(fe) + square(gx1, x1) + add(gx1, gx1, params.a) + mul(gx1, gx1, x1) + add(gx1, gx1, params.b) + x2 := new(fe) + mul(x2, tv[0], x1) + mul(tv[1], tv[0], tv[1]) + gx2 := new(fe) + mul(gx2, gx1, tv[1]) + e2 := !isQuadraticNonResidue(gx1) + x, y2 := new(fe), new(fe) + if e2 { + x.set(x1) + y2.set(gx1) + } else { + x.set(x2) + y2.set(gx2) + } + y := new(fe) + sqrt(y, y2) + if y.sign() != u.sign() { + neg(y, y) + } + return x, y +} + +// swuMapG2 is implementation of Simplified Shallue-van de Woestijne-Ulas Method +// defined at draft-irtf-cfrg-hash-to-curve-06. +func swuMapG2(e *fp2, u *fe2) (*fe2, *fe2) { + if e == nil { + e = newFp2() + } + params := swuParamsForG2 + var tv [4]*fe2 + for i := 0; i < 4; i++ { + tv[i] = e.new() + } + e.square(tv[0], u) + e.mul(tv[0], tv[0], params.z) + e.square(tv[1], tv[0]) + x1 := e.new() + e.add(x1, tv[0], tv[1]) + e.inverse(x1, x1) + e1 := x1.isZero() + e.add(x1, x1, e.one()) + if e1 { + x1.set(params.zInv) + } + e.mul(x1, x1, params.minusBOverA) + gx1 := e.new() + e.square(gx1, x1) + e.add(gx1, gx1, params.a) + e.mul(gx1, gx1, x1) + e.add(gx1, gx1, params.b) + x2 := e.new() + e.mul(x2, tv[0], x1) + e.mul(tv[1], tv[0], tv[1]) + gx2 := e.new() + e.mul(gx2, gx1, tv[1]) + e2 := !e.isQuadraticNonResidue(gx1) + x, y2 := e.new(), e.new() + if e2 { + x.set(x1) + y2.set(gx1) + } else { + x.set(x2) + y2.set(gx2) + } + y := e.new() + e.sqrt(y, y2) + if y.sign() != u.sign() { + e.neg(y, y) + } + return x, y +} + +var swuParamsForG1 = struct { + z *fe + zInv *fe + a *fe + b *fe + minusBOverA *fe +}{ + a: &fe{0x2f65aa0e9af5aa51, 0x86464c2d1e8416c3, 0xb85ce591b7bd31e2, 0x27e11c91b5f24e7c, 0x28376eda6bfc1835, 0x155455c3e5071d85}, + b: &fe{0xfb996971fe22a1e0, 0x9aa93eb35b742d6f, 0x8c476013de99c5c4, 0x873e27c3a221e571, 0xca72b5e45a52d888, 0x06824061418a386b}, + z: &fe{0x886c00000023ffdc, 0x0f70008d3090001d, 0x77672417ed5828c3, 0x9dac23e943dc1740, 0x50553f1b9c131521, 0x078c712fbe0ab6e8}, + zInv: &fe{0x0e8a2e8ba2e83e10, 0x5b28ba2ca4d745d1, 0x678cd5473847377a, 0x4c506dd8a8076116, 0x9bcb227d79284139, 0x0e8d3154b0ba099a}, + minusBOverA: &fe{0x052583c93555a7fe, 0x3b40d72430f93c82, 0x1b75faa0105ec983, 0x2527e7dc63851767, 0x99fffd1f34fc181d, 0x097cab54770ca0d3}, +} + +var swuParamsForG2 = struct { + z *fe2 + zInv *fe2 + a *fe2 + b *fe2 + minusBOverA *fe2 +}{ + a: &fe2{ + fe{0, 0, 0, 0, 0, 0}, + fe{0xe53a000003135242, 0x01080c0fdef80285, 0xe7889edbe340f6bd, 0x0b51375126310601, 0x02d6985717c744ab, 0x1220b4e979ea5467}, + }, + b: &fe2{ + fe{0x22ea00000cf89db2, 0x6ec832df71380aa4, 0x6e1b94403db5a66e, 0x75bf3c53a79473ba, 0x3dd3a569412c0a34, 0x125cdb5e74dc4fd1}, + fe{0x22ea00000cf89db2, 0x6ec832df71380aa4, 0x6e1b94403db5a66e, 0x75bf3c53a79473ba, 0x3dd3a569412c0a34, 0x125cdb5e74dc4fd1}, + }, + z: &fe2{ + fe{0x87ebfffffff9555c, 0x656fffe5da8ffffa, 0x0fd0749345d33ad2, 0xd951e663066576f4, 0xde291a3d41e980d3, 0x0815664c7dfe040d}, + fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, + }, + zInv: &fe2{ + fe{0xacd0000000011110, 0x9dd9999dc88ccccd, 0xb5ca2ac9b76352bf, 0xf1b574bcf4bc90ce, 0x42dab41f28a77081, 0x132fc6ac14cd1e12}, + fe{0xe396ffffffff2223, 0x4fbf332fcd0d9998, 0x0c4bbd3c1aff4cc4, 0x6b9c91267926ca58, 0x29ae4da6aef7f496, 0x10692e942f195791}, + }, + minusBOverA: &fe2{ + fe{0x903c555555474fb3, 0x5f98cc95ce451105, 0x9f8e582eefe0fade, 0xc68946b6aebbd062, 0x467a4ad10ee6de53, 0x0e7146f483e23a05}, + fe{0x29c2aaaaaab85af8, 0xbf133368e30eeefa, 0xc7a27a7206cffb45, 0x9dee04ce44c9425c, 0x04a15ce53464ce83, 0x0b8fcaf5b59dac95}, + }, +} diff --git a/crypto/bls12381/utils.go b/crypto/bls12381/utils.go new file mode 100644 index 00000000..de8bf495 --- /dev/null +++ b/crypto/bls12381/utils.go @@ -0,0 +1,45 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls12381 + +import ( + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +func bigFromHex(hex string) *big.Int { + return new(big.Int).SetBytes(common.FromHex(hex)) +} + +// decodeFieldElement expects 64 byte input with zero top 16 bytes, +// returns lower 48 bytes. +func decodeFieldElement(in []byte) ([]byte, error) { + if len(in) != 64 { + return nil, errors.New("invalid field element length") + } + // check top bytes + for i := 0; i < 16; i++ { + if in[i] != byte(0x00) { + return nil, errors.New("invalid field element top bytes") + } + } + out := make([]byte, 48) + copy(out[:], in[16:]) + return out, nil +} diff --git a/crypto/bn256/bn256_fast.go b/crypto/bn256/bn256_fast.go index 44954f3b..e3c9b605 100644 --- a/crypto/bn256/bn256_fast.go +++ b/crypto/bn256/bn256_fast.go @@ -2,22 +2,25 @@ // Use of this source code is governed by a BSD-style license that can be found // in the LICENSE file. +//go:build amd64 || arm64 // +build amd64 arm64 // Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve. package bn256 -import "github.com/cryptoecc/ETH-ECC/crypto/bn256/cloudflare" +import ( + bn256cf "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" +) // G1 is an abstract cyclic group. The zero value is suitable for use as the // output of an operation, but cannot be used as an input. -type G1 = bn256.G1 +type G1 = bn256cf.G1 // G2 is an abstract cyclic group. The zero value is suitable for use as the // output of an operation, but cannot be used as an input. -type G2 = bn256.G2 +type G2 = bn256cf.G2 // PairingCheck calculates the Optimal Ate pairing for a set of points. func PairingCheck(a []*G1, b []*G2) bool { - return bn256.PairingCheck(a, b) + return bn256cf.PairingCheck(a, b) } diff --git a/crypto/bn256/bn256_fuzz.go b/crypto/bn256/bn256_fuzz.go deleted file mode 100644 index dda16492..00000000 --- a/crypto/bn256/bn256_fuzz.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2018 Péter Szilágyi. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be found -// in the LICENSE file. - -// +build gofuzz - -package bn256 - -import ( - "bytes" - "math/big" - - cloudflare "github.com/cryptoecc/ETH-ECC/crypto/bn256/cloudflare" - google "github.com/cryptoecc/ETH-ECC/crypto/bn256/google" -) - -// FuzzAdd fuzzez bn256 addition between the Google and Cloudflare libraries. -func FuzzAdd(data []byte) int { - // Ensure we have enough data in the first place - if len(data) != 128 { - return 0 - } - // Ensure both libs can parse the first curve point - xc := new(cloudflare.G1) - _, errc := xc.Unmarshal(data[:64]) - - xg := new(google.G1) - _, errg := xg.Unmarshal(data[:64]) - - if (errc == nil) != (errg == nil) { - panic("parse mismatch") - } else if errc != nil { - return 0 - } - // Ensure both libs can parse the second curve point - yc := new(cloudflare.G1) - _, errc = yc.Unmarshal(data[64:]) - - yg := new(google.G1) - _, errg = yg.Unmarshal(data[64:]) - - if (errc == nil) != (errg == nil) { - panic("parse mismatch") - } else if errc != nil { - return 0 - } - // Add the two points and ensure they result in the same output - rc := new(cloudflare.G1) - rc.Add(xc, yc) - - rg := new(google.G1) - rg.Add(xg, yg) - - if !bytes.Equal(rc.Marshal(), rg.Marshal()) { - panic("add mismatch") - } - return 0 -} - -// FuzzMul fuzzez bn256 scalar multiplication between the Google and Cloudflare -// libraries. -func FuzzMul(data []byte) int { - // Ensure we have enough data in the first place - if len(data) != 96 { - return 0 - } - // Ensure both libs can parse the curve point - pc := new(cloudflare.G1) - _, errc := pc.Unmarshal(data[:64]) - - pg := new(google.G1) - _, errg := pg.Unmarshal(data[:64]) - - if (errc == nil) != (errg == nil) { - panic("parse mismatch") - } else if errc != nil { - return 0 - } - // Add the two points and ensure they result in the same output - rc := new(cloudflare.G1) - rc.ScalarMult(pc, new(big.Int).SetBytes(data[64:])) - - rg := new(google.G1) - rg.ScalarMult(pg, new(big.Int).SetBytes(data[64:])) - - if !bytes.Equal(rc.Marshal(), rg.Marshal()) { - panic("scalar mul mismatch") - } - return 0 -} - -func FuzzPair(data []byte) int { - // Ensure we have enough data in the first place - if len(data) != 192 { - return 0 - } - // Ensure both libs can parse the curve point - pc := new(cloudflare.G1) - _, errc := pc.Unmarshal(data[:64]) - - pg := new(google.G1) - _, errg := pg.Unmarshal(data[:64]) - - if (errc == nil) != (errg == nil) { - panic("parse mismatch") - } else if errc != nil { - return 0 - } - // Ensure both libs can parse the twist point - tc := new(cloudflare.G2) - _, errc = tc.Unmarshal(data[64:]) - - tg := new(google.G2) - _, errg = tg.Unmarshal(data[64:]) - - if (errc == nil) != (errg == nil) { - panic("parse mismatch") - } else if errc != nil { - return 0 - } - // Pair the two points and ensure thet result in the same output - if cloudflare.PairingCheck([]*cloudflare.G1{pc}, []*cloudflare.G2{tc}) != google.PairingCheck([]*google.G1{pg}, []*google.G2{tg}) { - panic("pair mismatch") - } - return 0 -} diff --git a/crypto/bn256/bn256_slow.go b/crypto/bn256/bn256_slow.go index 8df4d71a..4c0c351e 100644 --- a/crypto/bn256/bn256_slow.go +++ b/crypto/bn256/bn256_slow.go @@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be found // in the LICENSE file. +//go:build !amd64 && !arm64 // +build !amd64,!arm64 // Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve. package bn256 -import "github.com/cryptoecc/ETH-ECC/crypto/bn256/google" +import bn256 "github.com/ethereum/go-ethereum/crypto/bn256/google" // G1 is an abstract cyclic group. The zero value is suitable for use as the // output of an operation, but cannot be used as an input. diff --git a/crypto/bn256/cloudflare/bn256.go b/crypto/bn256/cloudflare/bn256.go index 38822a76..4f607af2 100644 --- a/crypto/bn256/cloudflare/bn256.go +++ b/crypto/bn256/cloudflare/bn256.go @@ -9,8 +9,13 @@ // // This package specifically implements the Optimal Ate pairing over a 256-bit // Barreto-Naehrig curve as described in -// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible -// with the implementation described in that paper. +// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is not +// compatible with the implementation described in that paper, as different +// parameters are chosen. +// +// (This package previously claimed to operate at a 128-bit security level. +// However, recent improvements in attacks mean that is no longer true. See +// https://moderncrypto.org/mail-archive/curves/2016/000740.html.) package bn256 import ( @@ -23,7 +28,7 @@ import ( func randomK(r io.Reader) (k *big.Int, err error) { for { k, err = rand.Int(r, Order) - if k.Sign() > 0 || err != nil { + if err != nil || k.Sign() > 0 { return } } diff --git a/crypto/bn256/cloudflare/bn256_test.go b/crypto/bn256/cloudflare/bn256_test.go index 0c8016d8..481e2f78 100644 --- a/crypto/bn256/cloudflare/bn256_test.go +++ b/crypto/bn256/cloudflare/bn256_test.go @@ -92,6 +92,19 @@ func TestTripartiteDiffieHellman(t *testing.T) { } } +func TestG2SelfAddition(t *testing.T) { + s, _ := rand.Int(rand.Reader, Order) + p := new(G2).ScalarBaseMult(s) + + if !p.p.IsOnCurve() { + t.Fatal("p isn't on curve") + } + m := p.Add(p, p).Marshal() + if _, err := p.Unmarshal(m); err != nil { + t.Fatalf("p.Add(p, p) ∉ G₂: %v", err) + } +} + func BenchmarkG1(b *testing.B) { x, _ := rand.Int(rand.Reader, Order) b.ResetTimer() diff --git a/crypto/bn256/cloudflare/curve.go b/crypto/bn256/cloudflare/curve.go index 18e9b38f..16f0489e 100644 --- a/crypto/bn256/cloudflare/curve.go +++ b/crypto/bn256/cloudflare/curve.go @@ -171,15 +171,15 @@ func (c *curvePoint) Double(a *curvePoint) { gfpAdd(t, d, d) gfpSub(&c.x, f, t) + gfpMul(&c.z, &a.y, &a.z) + gfpAdd(&c.z, &c.z, &c.z) + gfpAdd(t, C, C) gfpAdd(t2, t, t) gfpAdd(t, t2, t2) gfpSub(&c.y, d, &c.x) gfpMul(t2, e, &c.y) gfpSub(&c.y, t2, t) - - gfpMul(t, &a.y, &a.z) - gfpAdd(&c.z, t, t) } func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int) { diff --git a/crypto/bn256/cloudflare/gfp.go b/crypto/bn256/cloudflare/gfp.go index e8e84e7b..b15e1697 100644 --- a/crypto/bn256/cloudflare/gfp.go +++ b/crypto/bn256/cloudflare/gfp.go @@ -61,6 +61,7 @@ func (e *gfP) Marshal(out []byte) { func (e *gfP) Unmarshal(in []byte) error { // Unmarshal the bytes into little endian form for w := uint(0); w < 4; w++ { + e[3-w] = 0 for b := uint(0); b < 8; b++ { e[3-w] += uint64(in[8*w+b]) << (56 - 8*b) } diff --git a/crypto/bn256/cloudflare/gfp_amd64.s b/crypto/bn256/cloudflare/gfp_amd64.s index bdb4ffb7..64c97eae 100644 --- a/crypto/bn256/cloudflare/gfp_amd64.s +++ b/crypto/bn256/cloudflare/gfp_amd64.s @@ -49,7 +49,7 @@ TEXT ·gfpNeg(SB),0,$0-16 SBBQ 24(DI), R11 MOVQ $0, AX - gfpCarry(R8,R9,R10,R11,AX, R12,R13,R14,R15,BX) + gfpCarry(R8,R9,R10,R11,AX, R12,R13,R14,CX,BX) MOVQ c+0(FP), DI storeBlock(R8,R9,R10,R11, 0(DI)) @@ -68,7 +68,7 @@ TEXT ·gfpAdd(SB),0,$0-24 ADCQ 24(SI), R11 ADCQ $0, R12 - gfpCarry(R8,R9,R10,R11,R12, R13,R14,R15,AX,BX) + gfpCarry(R8,R9,R10,R11,R12, R13,R14,CX,AX,BX) MOVQ c+0(FP), DI storeBlock(R8,R9,R10,R11, 0(DI)) @@ -83,7 +83,7 @@ TEXT ·gfpSub(SB),0,$0-24 MOVQ ·p2+0(SB), R12 MOVQ ·p2+8(SB), R13 MOVQ ·p2+16(SB), R14 - MOVQ ·p2+24(SB), R15 + MOVQ ·p2+24(SB), CX MOVQ $0, AX SUBQ 0(SI), R8 @@ -94,12 +94,12 @@ TEXT ·gfpSub(SB),0,$0-24 CMOVQCC AX, R12 CMOVQCC AX, R13 CMOVQCC AX, R14 - CMOVQCC AX, R15 + CMOVQCC AX, CX ADDQ R12, R8 ADCQ R13, R9 ADCQ R14, R10 - ADCQ R15, R11 + ADCQ CX, R11 MOVQ c+0(FP), DI storeBlock(R8,R9,R10,R11, 0(DI)) @@ -115,7 +115,7 @@ TEXT ·gfpMul(SB),0,$160-24 mulBMI2(0(DI),8(DI),16(DI),24(DI), 0(SI)) storeBlock( R8, R9,R10,R11, 0(SP)) - storeBlock(R12,R13,R14,R15, 32(SP)) + storeBlock(R12,R13,R14,CX, 32(SP)) gfpReduceBMI2() JMP end @@ -125,5 +125,5 @@ nobmi2Mul: end: MOVQ c+0(FP), DI - storeBlock(R12,R13,R14,R15, 0(DI)) + storeBlock(R12,R13,R14,CX, 0(DI)) RET diff --git a/crypto/bn256/cloudflare/gfp_decl.go b/crypto/bn256/cloudflare/gfp_decl.go index fdea5c11..cf7f5654 100644 --- a/crypto/bn256/cloudflare/gfp_decl.go +++ b/crypto/bn256/cloudflare/gfp_decl.go @@ -1,3 +1,4 @@ +//go:build (amd64 && !generic) || (arm64 && !generic) // +build amd64,!generic arm64,!generic package bn256 @@ -9,7 +10,7 @@ import ( "golang.org/x/sys/cpu" ) -//nolint:varcheck +//nolint:varcheck,unused,deadcode var hasBMI2 = cpu.X86.HasBMI2 // go:noescape diff --git a/crypto/bn256/cloudflare/gfp_generic.go b/crypto/bn256/cloudflare/gfp_generic.go index 8e6be959..7742dda4 100644 --- a/crypto/bn256/cloudflare/gfp_generic.go +++ b/crypto/bn256/cloudflare/gfp_generic.go @@ -1,3 +1,4 @@ +//go:build (!amd64 && !arm64) || generic // +build !amd64,!arm64 generic package bn256 diff --git a/crypto/bn256/cloudflare/mul_amd64.h b/crypto/bn256/cloudflare/mul_amd64.h index bab5da83..9d8e4b37 100644 --- a/crypto/bn256/cloudflare/mul_amd64.h +++ b/crypto/bn256/cloudflare/mul_amd64.h @@ -165,7 +165,7 @@ \ \ // Add the 512-bit intermediate to m*N loadBlock(96+stack, R8,R9,R10,R11) \ - loadBlock(128+stack, R12,R13,R14,R15) \ + loadBlock(128+stack, R12,R13,R14,CX) \ \ MOVQ $0, AX \ ADDQ 0+stack, R8 \ @@ -175,7 +175,7 @@ ADCQ 32+stack, R12 \ ADCQ 40+stack, R13 \ ADCQ 48+stack, R14 \ - ADCQ 56+stack, R15 \ + ADCQ 56+stack, CX \ ADCQ $0, AX \ \ - gfpCarry(R12,R13,R14,R15,AX, R8,R9,R10,R11,BX) + gfpCarry(R12,R13,R14,CX,AX, R8,R9,R10,R11,BX) diff --git a/crypto/bn256/cloudflare/mul_bmi2_amd64.h b/crypto/bn256/cloudflare/mul_bmi2_amd64.h index 71ad0499..403566c6 100644 --- a/crypto/bn256/cloudflare/mul_bmi2_amd64.h +++ b/crypto/bn256/cloudflare/mul_bmi2_amd64.h @@ -29,7 +29,7 @@ ADCQ $0, R14 \ \ MOVQ a2, DX \ - MOVQ $0, R15 \ + MOVQ $0, CX \ MULXQ 0+rb, AX, BX \ ADDQ AX, R10 \ ADCQ BX, R11 \ @@ -43,7 +43,7 @@ MULXQ 24+rb, AX, BX \ ADCQ AX, R13 \ ADCQ BX, R14 \ - ADCQ $0, R15 \ + ADCQ $0, CX \ \ MOVQ a3, DX \ MULXQ 0+rb, AX, BX \ @@ -52,13 +52,13 @@ MULXQ 16+rb, AX, BX \ ADCQ AX, R13 \ ADCQ BX, R14 \ - ADCQ $0, R15 \ + ADCQ $0, CX \ MULXQ 8+rb, AX, BX \ ADDQ AX, R12 \ ADCQ BX, R13 \ MULXQ 24+rb, AX, BX \ ADCQ AX, R14 \ - ADCQ BX, R15 + ADCQ BX, CX #define gfpReduceBMI2() \ \ // m = (T * N') mod R, store m in R8:R9:R10:R11 @@ -106,7 +106,7 @@ ADCQ 32(SP), R12 \ ADCQ 40(SP), R13 \ ADCQ 48(SP), R14 \ - ADCQ 56(SP), R15 \ + ADCQ 56(SP), CX \ ADCQ $0, AX \ \ - gfpCarry(R12,R13,R14,R15,AX, R8,R9,R10,R11,BX) + gfpCarry(R12,R13,R14,CX,AX, R8,R9,R10,R11,BX) diff --git a/crypto/bn256/cloudflare/twist.go b/crypto/bn256/cloudflare/twist.go index 0c2f80d4..2c7a69a4 100644 --- a/crypto/bn256/cloudflare/twist.go +++ b/crypto/bn256/cloudflare/twist.go @@ -150,15 +150,15 @@ func (c *twistPoint) Double(a *twistPoint) { t.Add(d, d) c.x.Sub(f, t) + c.z.Mul(&a.y, &a.z) + c.z.Add(&c.z, &c.z) + t.Add(C, C) t2.Add(t, t) t.Add(t2, t2) c.y.Sub(d, &c.x) t2.Mul(e, &c.y) c.y.Sub(t2, t) - - t.Mul(&a.y, &a.z) - c.z.Add(t, t) } func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int) { diff --git a/crypto/bn256/google/bn256.go b/crypto/bn256/google/bn256.go index e0402e51..0a9d5cd3 100644 --- a/crypto/bn256/google/bn256.go +++ b/crypto/bn256/google/bn256.go @@ -12,8 +12,9 @@ // // This package specifically implements the Optimal Ate pairing over a 256-bit // Barreto-Naehrig curve as described in -// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible -// with the implementation described in that paper. +// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is not +// compatible with the implementation described in that paper, as different +// parameters are chosen. // // (This package previously claimed to operate at a 128-bit security level. // However, recent improvements in attacks mean that is no longer true. See diff --git a/crypto/bn256/google/constants.go b/crypto/bn256/google/constants.go index ab649d7f..2990bd95 100644 --- a/crypto/bn256/google/constants.go +++ b/crypto/bn256/google/constants.go @@ -13,13 +13,16 @@ func bigFromBase10(s string) *big.Int { return n } -// u is the BN parameter that determines the prime: 1868033³. +// u is the BN parameter that determines the prime. var u = bigFromBase10("4965661367192848881") -// p is a prime over which we form a basic field: 36u⁴+36u³+24u²+6u+1. +// P is a prime over which we form a basic field: 36u⁴+36u³+24u²+6u+1. var P = bigFromBase10("21888242871839275222246405745257275088696311157297823662689037894645226208583") // 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") // xiToPMinus1Over6 is ξ^((p-1)/6) where ξ = i+9. diff --git a/crypto/crypto.go b/crypto/crypto.go index 1e172556..45ea7274 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -17,20 +17,21 @@ package crypto import ( + "bufio" "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "encoding/hex" "errors" "fmt" + "hash" "io" - "io/ioutil" "math/big" "os" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) @@ -50,23 +51,46 @@ var ( var errInvalidPubkey = errors.New("invalid secp256k1 public key") +// KeccakState wraps sha3.state. In addition to the usual hash methods, it also supports +// Read to get a variable amount of data from the hash state. Read is faster than Sum +// because it doesn't copy the internal state, but also modifies the internal state. +type KeccakState interface { + hash.Hash + Read([]byte) (int, error) +} + +// NewKeccakState creates a new KeccakState +func NewKeccakState() KeccakState { + return sha3.NewLegacyKeccak256().(KeccakState) +} + +// HashData hashes the provided data using the KeccakState and returns a 32 byte hash +func HashData(kh KeccakState, data []byte) (h common.Hash) { + kh.Reset() + kh.Write(data) + kh.Read(h[:]) + return h +} + // Keccak256 calculates and returns the Keccak256 hash of the input data. func Keccak256(data ...[]byte) []byte { - d := sha3.NewLegacyKeccak256() + b := make([]byte, 32) + d := NewKeccakState() for _, b := range data { d.Write(b) } - return d.Sum(nil) + d.Read(b) + return b } // Keccak256Hash calculates and returns the Keccak256 hash of the input data, // converting it to an internal Hash data structure. func Keccak256Hash(data ...[]byte) (h common.Hash) { - d := sha3.NewLegacyKeccak256() + d := NewKeccakState() for _, b := range data { d.Write(b) } - d.Sum(h[:0]) + d.Read(h[:]) return h } @@ -158,38 +182,77 @@ func FromECDSAPub(pub *ecdsa.PublicKey) []byte { // HexToECDSA parses a secp256k1 private key. func HexToECDSA(hexkey string) (*ecdsa.PrivateKey, error) { b, err := hex.DecodeString(hexkey) - if err != nil { - return nil, errors.New("invalid hex string") + if byteErr, ok := err.(hex.InvalidByteError); ok { + return nil, fmt.Errorf("invalid hex character %q in private key", byte(byteErr)) + } else if err != nil { + return nil, errors.New("invalid hex data for private key") } return ToECDSA(b) } // LoadECDSA loads a secp256k1 private key from the given file. func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { - buf := make([]byte, 64) fd, err := os.Open(file) if err != nil { return nil, err } defer fd.Close() - if _, err := io.ReadFull(fd, buf); err != nil { - return nil, err - } - key, err := hex.DecodeString(string(buf)) + r := bufio.NewReader(fd) + buf := make([]byte, 64) + n, err := readASCII(buf, r) if err != nil { return nil, err + } else if n != len(buf) { + return nil, fmt.Errorf("key file too short, want 64 hex characters") + } + if err := checkKeyFileEnd(r); err != nil { + return nil, err + } + + return HexToECDSA(string(buf)) +} + +// readASCII reads into 'buf', stopping when the buffer is full or +// when a non-printable control character is encountered. +func readASCII(buf []byte, r *bufio.Reader) (n int, err error) { + for ; n < len(buf); n++ { + buf[n], err = r.ReadByte() + switch { + case err == io.EOF || buf[n] < '!': + return n, nil + case err != nil: + return n, err + } + } + return n, nil +} + +// checkKeyFileEnd skips over additional newlines at the end of a key file. +func checkKeyFileEnd(r *bufio.Reader) error { + for i := 0; ; i++ { + b, err := r.ReadByte() + switch { + case err == io.EOF: + return nil + case err != nil: + return err + case b != '\n' && b != '\r': + return fmt.Errorf("invalid character %q at end of key file", b) + case i >= 2: + return errors.New("key file too long, want 64 hex characters") + } } - return ToECDSA(key) } // SaveECDSA saves a secp256k1 private key to the given file with // restrictive permissions. The key data is saved hex-encoded. func SaveECDSA(file string, key *ecdsa.PrivateKey) error { k := hex.EncodeToString(FromECDSA(key)) - return ioutil.WriteFile(file, []byte(k), 0600) + return os.WriteFile(file, []byte(k), 0600) } +// GenerateKey generates a new private key. func GenerateKey() (*ecdsa.PrivateKey, error) { return ecdsa.GenerateKey(S256(), rand.Reader) } diff --git a/crypto/crypto_test.go b/crypto/crypto_test.go index ca8913d1..da123cf9 100644 --- a/crypto/crypto_test.go +++ b/crypto/crypto_test.go @@ -20,14 +20,13 @@ import ( "bytes" "crypto/ecdsa" "encoding/hex" - "io/ioutil" "math/big" "os" "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) var testAddrHex = "970e8128ab834e8eac17ab8e3812f010678cf791" @@ -42,6 +41,13 @@ func TestKeccak256Hash(t *testing.T) { checkhash(t, "Sha3-256-array", func(in []byte) []byte { h := Keccak256Hash(in); return h[:] }, msg, exp) } +func TestKeccak256Hasher(t *testing.T) { + msg := []byte("abc") + exp, _ := hex.DecodeString("4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45") + hasher := NewKeccakState() + checkhash(t, "Sha3-256-array", func(in []byte) []byte { h := HashData(hasher, in); return h[:] }, msg, exp) +} + func TestToECDSAErrors(t *testing.T) { if _, err := HexToECDSA("0000000000000000000000000000000000000000000000000000000000000000"); err == nil { t.Fatal("HexToECDSA should've returned error") @@ -139,39 +145,82 @@ func TestNewContractAddress(t *testing.T) { checkAddr(t, common.HexToAddress("c9ddedf451bc62ce88bf9292afb13df35b670699"), caddr2) } -func TestLoadECDSAFile(t *testing.T) { - keyBytes := common.FromHex(testPrivHex) - fileName0 := "test_key0" - fileName1 := "test_key1" - checkKey := func(k *ecdsa.PrivateKey) { - checkAddr(t, PubkeyToAddress(k.PublicKey), common.HexToAddress(testAddrHex)) - loadedKeyBytes := FromECDSA(k) - if !bytes.Equal(loadedKeyBytes, keyBytes) { - t.Fatalf("private key mismatch: want: %x have: %x", keyBytes, loadedKeyBytes) - } +func TestLoadECDSA(t *testing.T) { + tests := []struct { + input string + err string + }{ + // good + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"}, + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n"}, + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n\r"}, + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n"}, + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n\n"}, + {input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n\r"}, + // bad + { + input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde", + err: "key file too short, want 64 hex characters", + }, + { + input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde\n", + err: "key file too short, want 64 hex characters", + }, + { + input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdeX", + err: "invalid hex character 'X' in private key", + }, + { + input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefX", + err: "invalid character 'X' at end of key file", + }, + { + input: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\n\n\n", + err: "key file too long, want 64 hex characters", + }, } - ioutil.WriteFile(fileName0, []byte(testPrivHex), 0600) - defer os.Remove(fileName0) + for _, test := range tests { + f, err := os.CreateTemp("", "loadecdsa_test.*.txt") + if err != nil { + t.Fatal(err) + } + filename := f.Name() + f.WriteString(test.input) + f.Close() + + _, err = LoadECDSA(filename) + switch { + case err != nil && test.err == "": + t.Fatalf("unexpected error for input %q:\n %v", test.input, err) + case err != nil && err.Error() != test.err: + t.Fatalf("wrong error for input %q:\n %v", test.input, err) + case err == nil && test.err != "": + t.Fatalf("LoadECDSA did not return error for input %q", test.input) + } + } +} - key0, err := LoadECDSA(fileName0) +func TestSaveECDSA(t *testing.T) { + f, err := os.CreateTemp("", "saveecdsa_test.*.txt") if err != nil { t.Fatal(err) } - checkKey(key0) + file := f.Name() + f.Close() + defer os.Remove(file) - // again, this time with SaveECDSA instead of manual save: - err = SaveECDSA(fileName1, key0) - if err != nil { + key, _ := HexToECDSA(testPrivHex) + if err := SaveECDSA(file, key); err != nil { t.Fatal(err) } - defer os.Remove(fileName1) - - key1, err := LoadECDSA(fileName1) + loaded, err := LoadECDSA(file) if err != nil { t.Fatal(err) } - checkKey(key1) + if !reflect.DeepEqual(key, loaded) { + t.Fatal("loaded key not equal to saved key") + } } func TestValidateSignatureValues(t *testing.T) { diff --git a/crypto/ecies/ecies.go b/crypto/ecies/ecies.go index 14741814..64b5a99d 100644 --- a/crypto/ecies/ecies.go +++ b/crypto/ecies/ecies.go @@ -35,6 +35,7 @@ import ( "crypto/elliptic" "crypto/hmac" "crypto/subtle" + "encoding/binary" "fmt" "hash" "io" @@ -44,7 +45,6 @@ import ( var ( ErrImport = fmt.Errorf("ecies: failed to import key") ErrInvalidCurve = fmt.Errorf("ecies: invalid elliptic curve") - ErrInvalidParams = fmt.Errorf("ecies: invalid ECIES parameters") ErrInvalidPublicKey = fmt.Errorf("ecies: invalid public key") ErrSharedKeyIsPointAtInfinity = fmt.Errorf("ecies: shared key is point at infinity") ErrSharedKeyTooBig = fmt.Errorf("ecies: shared key params are too big") @@ -138,57 +138,39 @@ func (prv *PrivateKey) GenerateShared(pub *PublicKey, skLen, macLen int) (sk []b } var ( - ErrKeyDataTooLong = fmt.Errorf("ecies: can't supply requested key data") ErrSharedTooLong = fmt.Errorf("ecies: shared secret is too long") ErrInvalidMessage = fmt.Errorf("ecies: invalid message") ) -var ( - big2To32 = new(big.Int).Exp(big.NewInt(2), big.NewInt(32), nil) - big2To32M1 = new(big.Int).Sub(big2To32, big.NewInt(1)) -) - -func incCounter(ctr []byte) { - if ctr[3]++; ctr[3] != 0 { - return - } - if ctr[2]++; ctr[2] != 0 { - return - } - if ctr[1]++; ctr[1] != 0 { - return - } - if ctr[0]++; ctr[0] != 0 { - return - } -} - // NIST SP 800-56 Concatenation Key Derivation Function (see section 5.8.1). -func concatKDF(hash hash.Hash, z, s1 []byte, kdLen int) (k []byte, err error) { - if s1 == nil { - s1 = make([]byte, 0) - } - - reps := ((kdLen + 7) * 8) / (hash.BlockSize() * 8) - if big.NewInt(int64(reps)).Cmp(big2To32M1) > 0 { - fmt.Println(big2To32M1) - return nil, ErrKeyDataTooLong - } - - counter := []byte{0, 0, 0, 1} - k = make([]byte, 0) - - for i := 0; i <= reps; i++ { - hash.Write(counter) +func concatKDF(hash hash.Hash, z, s1 []byte, kdLen int) []byte { + counterBytes := make([]byte, 4) + k := make([]byte, 0, roundup(kdLen, hash.Size())) + for counter := uint32(1); len(k) < kdLen; counter++ { + binary.BigEndian.PutUint32(counterBytes, counter) + hash.Reset() + hash.Write(counterBytes) hash.Write(z) hash.Write(s1) - k = append(k, hash.Sum(nil)...) - hash.Reset() - incCounter(counter) + k = hash.Sum(k) } + return k[:kdLen] +} - k = k[:kdLen] - return +// roundup rounds size up to the next multiple of blocksize. +func roundup(size, blocksize int) int { + return size + blocksize - (size % blocksize) +} + +// deriveKeys creates the encryption and MAC keys using concatKDF. +func deriveKeys(hash hash.Hash, z, s1 []byte, keyLen int) (Ke, Km []byte) { + K := concatKDF(hash, z, s1, 2*keyLen) + Ke = K[:keyLen] + Km = K[keyLen:] + hash.Reset() + hash.Write(Km) + Km = hash.Sum(Km[:0]) + return Ke, Km } // messageTag computes the MAC of a message (called the tag) as per @@ -209,7 +191,6 @@ func generateIV(params *ECIESParams, rand io.Reader) (iv []byte, err error) { } // symEncrypt carries out CTR encryption using the block cipher specified in the -// parameters. func symEncrypt(rand io.Reader, params *ECIESParams, key, m []byte) (ct []byte, err error) { c, err := params.Cipher(key) if err != nil { @@ -249,36 +230,27 @@ func symDecrypt(params *ECIESParams, key, ct []byte) (m []byte, err error) { // ciphertext. s1 is fed into key derivation, s2 is fed into the MAC. If the // shared information parameters aren't being used, they should be nil. func Encrypt(rand io.Reader, pub *PublicKey, m, s1, s2 []byte) (ct []byte, err error) { - params := pub.Params - if params == nil { - if params = ParamsFromCurve(pub.Curve); params == nil { - err = ErrUnsupportedECIESParameters - return - } + params, err := pubkeyParams(pub) + if err != nil { + return nil, err } + R, err := GenerateKey(rand, pub.Curve, params) if err != nil { - return + return nil, err } - hash := params.Hash() z, err := R.GenerateShared(pub, params.KeyLen, params.KeyLen) if err != nil { - return - } - K, err := concatKDF(hash, z, s1, params.KeyLen+params.KeyLen) - if err != nil { - return + return nil, err } - Ke := K[:params.KeyLen] - Km := K[params.KeyLen:] - hash.Write(Km) - Km = hash.Sum(nil) - hash.Reset() + + hash := params.Hash() + Ke, Km := deriveKeys(hash, z, s1, params.KeyLen) em, err := symEncrypt(rand, params, Ke, m) if err != nil || len(em) <= params.BlockSize { - return + return nil, err } d := messageTag(params.Hash, Km, em, s2) @@ -288,7 +260,7 @@ func Encrypt(rand io.Reader, pub *PublicKey, m, s1, s2 []byte) (ct []byte, err e copy(ct, Rb) copy(ct[len(Rb):], em) copy(ct[len(Rb)+len(em):], d) - return + return ct, nil } // Decrypt decrypts an ECIES ciphertext. @@ -296,13 +268,11 @@ func (prv *PrivateKey) Decrypt(c, s1, s2 []byte) (m []byte, err error) { if len(c) == 0 { return nil, ErrInvalidMessage } - params := prv.PublicKey.Params - if params == nil { - if params = ParamsFromCurve(prv.PublicKey.Curve); params == nil { - err = ErrUnsupportedECIESParameters - return - } + params, err := pubkeyParams(&prv.PublicKey) + if err != nil { + return nil, err } + hash := params.Hash() var ( @@ -316,12 +286,10 @@ func (prv *PrivateKey) Decrypt(c, s1, s2 []byte) (m []byte, err error) { case 2, 3, 4: rLen = (prv.PublicKey.Curve.Params().BitSize + 7) / 4 if len(c) < (rLen + hLen + 1) { - err = ErrInvalidMessage - return + return nil, ErrInvalidMessage } default: - err = ErrInvalidPublicKey - return + return nil, ErrInvalidPublicKey } mStart = rLen @@ -331,36 +299,19 @@ func (prv *PrivateKey) Decrypt(c, s1, s2 []byte) (m []byte, err error) { R.Curve = prv.PublicKey.Curve R.X, R.Y = elliptic.Unmarshal(R.Curve, c[:rLen]) if R.X == nil { - err = ErrInvalidPublicKey - return - } - if !R.Curve.IsOnCurve(R.X, R.Y) { - err = ErrInvalidCurve - return + return nil, ErrInvalidPublicKey } z, err := prv.GenerateShared(R, params.KeyLen, params.KeyLen) if err != nil { - return + return nil, err } - - K, err := concatKDF(hash, z, s1, params.KeyLen+params.KeyLen) - if err != nil { - return - } - - Ke := K[:params.KeyLen] - Km := K[params.KeyLen:] - hash.Write(Km) - Km = hash.Sum(nil) - hash.Reset() + Ke, Km := deriveKeys(hash, z, s1, params.KeyLen) d := messageTag(params.Hash, Km, c[mStart:mEnd], s2) if subtle.ConstantTimeCompare(c[mEnd:], d) != 1 { - err = ErrInvalidMessage - return + return nil, ErrInvalidMessage } - m, err = symDecrypt(params, Ke, c[mStart:mEnd]) - return + return symDecrypt(params, Ke, c[mStart:mEnd]) } diff --git a/crypto/ecies/ecies_test.go b/crypto/ecies/ecies_test.go index 0f6985c5..8ca42c9c 100644 --- a/crypto/ecies/ecies_test.go +++ b/crypto/ecies/ecies_test.go @@ -35,33 +35,30 @@ import ( "crypto/rand" "crypto/sha256" "encoding/hex" - "flag" "fmt" "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" + "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") - h := sha256.New() - - k, err := concatKDF(h, msg, nil, 64) - if err != nil { - t.Fatal(err) - } - if len(k) != 64 { - t.Fatalf("KDF: generated key is the wrong size (%d instead of 64\n", len(k)) + tests := []struct { + length int + output []byte + }{ + {6, decode("858b192fa2ed")}, + {32, decode("858b192fa2ed4395e2bf88dd8d5770d67dc284ee539f12da8bceaa45d06ebae0")}, + {48, decode("858b192fa2ed4395e2bf88dd8d5770d67dc284ee539f12da8bceaa45d06ebae0700f1ab918a5f0413b8140f9940d6955")}, + {64, decode("858b192fa2ed4395e2bf88dd8d5770d67dc284ee539f12da8bceaa45d06ebae0700f1ab918a5f0413b8140f9940d6955f3467fd6672cce1024c5b1effccc0f61")}, + } + + for _, test := range tests { + h := sha256.New() + k := concatKDF(h, []byte("input"), nil, test.length) + if !bytes.Equal(k, test.output) { + t.Fatalf("KDF: generated key %x does not match expected output %x", k, test.output) + } } } @@ -75,22 +72,6 @@ func cmpParams(p1, p2 *ECIESParams) bool { p1.BlockSize == p2.BlockSize } -// cmpPublic returns true if the two public keys represent the same pojnt. -func cmpPublic(pub1, pub2 PublicKey) bool { - if pub1.X == nil || pub1.Y == nil { - fmt.Println(ErrInvalidPublicKey.Error()) - return false - } - if pub2.X == nil || pub2.Y == nil { - fmt.Println(ErrInvalidPublicKey.Error()) - return false - } - pub1Out := elliptic.Marshal(pub1.Curve, pub1.X, pub1.Y) - pub2Out := elliptic.Marshal(pub2.Curve, pub2.X, pub2.Y) - - return bytes.Equal(pub1Out, pub2Out) -} - // Validate the ECDH component. func TestSharedKey(t *testing.T) { prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) @@ -298,7 +279,7 @@ var testCases = []testCase{ { Curve: elliptic.P384(), Name: "P384", - Expected: ECIES_AES256_SHA384, + Expected: ECIES_AES192_SHA384, }, { Curve: elliptic.P521(), @@ -318,8 +299,8 @@ func TestParamSelection(t *testing.T) { func testParamSelection(t *testing.T, c testCase) { params := ParamsFromCurve(c.Curve) - if params == nil && c.Expected != nil { - t.Fatalf("%s (%s)\n", ErrInvalidParams.Error(), c.Name) + if params == nil { + t.Fatal("ParamsFromCurve returned nil") } else if params != nil && !cmpParams(params, c.Expected) { t.Fatalf("ecies: parameters should be invalid (%s)\n", c.Name) } @@ -353,7 +334,6 @@ func testParamSelection(t *testing.T, c testCase) { if err == nil { t.Fatalf("ecies: encryption should not have succeeded (%s)\n", c.Name) } - } // Ensure that the basic public key validation in the decryption operation @@ -426,7 +406,7 @@ func TestSharedKeyStatic(t *testing.T) { t.Fatal(ErrBadSharedKeys) } - sk, _ := hex.DecodeString("167ccc13ac5e8a26b131c3446030c60fbfac6aa8e31149d0869f93626a4cdf62") + sk := decode("167ccc13ac5e8a26b131c3446030c60fbfac6aa8e31149d0869f93626a4cdf62") if !bytes.Equal(sk1, sk) { t.Fatalf("shared secret mismatch: want: %x have: %x", sk, sk1) } @@ -439,3 +419,11 @@ func hexKey(prv string) *PrivateKey { } return ImportECDSA(key) } + +func decode(s string) []byte { + bytes, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return bytes +} diff --git a/crypto/ecies/params.go b/crypto/ecies/params.go index a97a3740..39e7c894 100644 --- a/crypto/ecies/params.go +++ b/crypto/ecies/params.go @@ -42,15 +42,21 @@ import ( "fmt" "hash" - ethcrypto "github.com/cryptoecc/ETH-ECC/crypto" + ethcrypto "github.com/ethereum/go-ethereum/crypto" ) var ( DefaultCurve = ethcrypto.S256() ErrUnsupportedECDHAlgorithm = fmt.Errorf("ecies: unsupported ECDH algorithm") ErrUnsupportedECIESParameters = fmt.Errorf("ecies: unsupported ECIES parameters") + ErrInvalidKeyLen = fmt.Errorf("ecies: invalid key size (> %d) in ECIESParams", maxKeyLen) ) +// KeyLen is limited to prevent overflow of the counter +// in concatKDF. While the theoretical limit is much higher, +// no known cipher uses keys larger than 512 bytes. +const maxKeyLen = 512 + type ECIESParams struct { Hash func() hash.Hash // hash function hashAlgo crypto.Hash @@ -74,6 +80,14 @@ var ( KeyLen: 16, } + ECIES_AES192_SHA384 = &ECIESParams{ + Hash: sha512.New384, + hashAlgo: crypto.SHA384, + Cipher: aes.NewCipher, + BlockSize: aes.BlockSize, + KeyLen: 24, + } + ECIES_AES256_SHA256 = &ECIESParams{ Hash: sha256.New, hashAlgo: crypto.SHA256, @@ -102,7 +116,7 @@ var ( var paramsFromCurve = map[elliptic.Curve]*ECIESParams{ ethcrypto.S256(): ECIES_AES128_SHA256, elliptic.P256(): ECIES_AES128_SHA256, - elliptic.P384(): ECIES_AES256_SHA384, + elliptic.P384(): ECIES_AES192_SHA384, elliptic.P521(): ECIES_AES256_SHA512, } @@ -115,3 +129,16 @@ func AddParamsForCurve(curve elliptic.Curve, params *ECIESParams) { func ParamsFromCurve(curve elliptic.Curve) (params *ECIESParams) { return paramsFromCurve[curve] } + +func pubkeyParams(key *PublicKey) (*ECIESParams, error) { + params := key.Params + if params == nil { + if params = ParamsFromCurve(key.Curve); params == nil { + return nil, ErrUnsupportedECIESParameters + } + } + if params.KeyLen > maxKeyLen { + return nil, ErrInvalidKeyLen + } + return params, nil +} diff --git a/crypto/secp256k1/curve.go b/crypto/secp256k1/curve.go index 5409ee1d..fa1b199a 100644 --- a/crypto/secp256k1/curve.go +++ b/crypto/secp256k1/curve.go @@ -35,15 +35,8 @@ package secp256k1 import ( "crypto/elliptic" "math/big" - "unsafe" ) -/* -#include "libsecp256k1/include/secp256k1.h" -extern int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, const unsigned char *point, const unsigned char *scalar); -*/ -import "C" - const ( // number of bits in a big.Word wordBits = 32 << (uint64(^big.Word(0)) >> 63) @@ -116,6 +109,10 @@ func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool { // affineFromJacobian reverses the Jacobian transform. See the comment at the // top of the file. func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) { + if z.Sign() == 0 { + return new(big.Int), new(big.Int) + } + zinv := new(big.Int).ModInverse(z, BitCurve.P) zinvsq := new(big.Int).Mul(zinv, zinv) @@ -129,7 +126,18 @@ func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big. // Add returns the sum of (x1,y1) and (x2,y2) func (BitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { + // If one point is at infinity, return the other point. + // Adding the point at infinity to any point will preserve the other point. + if x1.Sign() == 0 && y1.Sign() == 0 { + return x2, y2 + } + if x2.Sign() == 0 && y2.Sign() == 0 { + return x1, y1 + } z := new(big.Int).SetInt64(1) + if x1.Cmp(x2) == 0 && y1.Cmp(y2) == 0 { + return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z)) + } return BitCurve.affineFromJacobian(BitCurve.addJacobian(x1, y1, z, x2, y2, z)) } @@ -238,41 +246,6 @@ func (BitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, return x3, y3, z3 } -func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) { - // Ensure scalar is exactly 32 bytes. We pad always, even if - // scalar is 32 bytes long, to avoid a timing side channel. - if len(scalar) > 32 { - panic("can't handle scalars > 256 bits") - } - // NOTE: potential timing issue - padded := make([]byte, 32) - copy(padded[32-len(scalar):], scalar) - scalar = padded - - // Do the multiplication in C, updating point. - point := make([]byte, 64) - readBits(Bx, point[:32]) - readBits(By, point[32:]) - - pointPtr := (*C.uchar)(unsafe.Pointer(&point[0])) - scalarPtr := (*C.uchar)(unsafe.Pointer(&scalar[0])) - res := C.secp256k1_ext_scalar_mul(context, pointPtr, scalarPtr) - - // Unpack the result and clear temporaries. - x := new(big.Int).SetBytes(point[:32]) - y := new(big.Int).SetBytes(point[32:]) - for i := range point { - point[i] = 0 - } - for i := range padded { - scalar[i] = 0 - } - if res != 1 { - return nil, nil - } - return x, y -} - // ScalarBaseMult returns k*G, where G is the base point of the group and k is // an integer in big-endian form. func (BitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) { diff --git a/crypto/secp256k1/dummy.go b/crypto/secp256k1/dummy.go new file mode 100644 index 00000000..65a75080 --- /dev/null +++ b/crypto/secp256k1/dummy.go @@ -0,0 +1,21 @@ +//go:build dummy +// +build dummy + +// This file is part of a workaround for `go mod vendor` which won't vendor +// C files if there's no Go file in the same directory. +// This would prevent the crypto/secp256k1/libsecp256k1/include/secp256k1.h file to be vendored. +// +// This Go file imports the c directory where there is another dummy.go file which +// is the second part of this workaround. +// +// These two files combined make it so `go mod vendor` behaves correctly. +// +// See this issue for reference: https://github.com/golang/go/issues/26366 + +package secp256k1 + +import ( + _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/include" + _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src" + _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery" +) diff --git a/crypto/secp256k1/libsecp256k1/autogen.sh b/crypto/secp256k1/libsecp256k1/autogen.sh old mode 100755 new mode 100644 diff --git a/crypto/secp256k1/libsecp256k1/contrib/dummy.go b/crypto/secp256k1/libsecp256k1/contrib/dummy.go new file mode 100644 index 00000000..fda594be --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/contrib/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package contrib diff --git a/crypto/secp256k1/libsecp256k1/dummy.go b/crypto/secp256k1/libsecp256k1/dummy.go new file mode 100644 index 00000000..379b1699 --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package libsecp256k1 diff --git a/crypto/secp256k1/libsecp256k1/include/dummy.go b/crypto/secp256k1/libsecp256k1/include/dummy.go new file mode 100644 index 00000000..5af540c7 --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/include/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package include diff --git a/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s index 1e2d7ff9..5a9cc3ff 100644 --- a/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s +++ b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s @@ -11,7 +11,7 @@ Note: - To avoid unnecessary loads and make use of available registers, two 'passes' have every time been interleaved, with the odd passes accumulating c' and d' - which will be added to c and d respectively in the the even passes + which will be added to c and d respectively in the even passes */ diff --git a/crypto/secp256k1/libsecp256k1/src/dummy.go b/crypto/secp256k1/libsecp256k1/src/dummy.go new file mode 100644 index 00000000..65868f38 --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/src/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package src diff --git a/crypto/secp256k1/libsecp256k1/src/modules/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go new file mode 100644 index 00000000..3c7a6964 --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/src/modules/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package module diff --git a/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go new file mode 100644 index 00000000..b6fc3832 --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package ecdh diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go new file mode 100644 index 00000000..b9491f0c --- /dev/null +++ b/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go @@ -0,0 +1,7 @@ +// +build dummy + +// Package c contains only a C file. +// +// This Go file is part of a workaround for `go mod vendor`. +// Please see the file crypto/secp256k1/dummy.go for more information. +package recovery diff --git a/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h b/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h old mode 100755 new mode 100644 diff --git a/crypto/secp256k1/libsecp256k1/src/secp256k1.c b/crypto/secp256k1/libsecp256k1/src/secp256k1.c old mode 100755 new mode 100644 diff --git a/crypto/secp256k1/panic_cb.go b/crypto/secp256k1/panic_cb.go index 6d59a1d2..a30b04f5 100644 --- a/crypto/secp256k1/panic_cb.go +++ b/crypto/secp256k1/panic_cb.go @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be found in // the LICENSE file. +//go:build !gofuzz && cgo +// +build !gofuzz,cgo + package secp256k1 import "C" diff --git a/crypto/secp256k1/scalar_mult_cgo.go b/crypto/secp256k1/scalar_mult_cgo.go new file mode 100644 index 00000000..8afa9d02 --- /dev/null +++ b/crypto/secp256k1/scalar_mult_cgo.go @@ -0,0 +1,57 @@ +// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be found in +// the LICENSE file. + +//go:build !gofuzz && cgo +// +build !gofuzz,cgo + +package secp256k1 + +import ( + "math/big" + "unsafe" +) + +/* + +#include "libsecp256k1/include/secp256k1.h" + +extern int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, const unsigned char *point, const unsigned char *scalar); + +*/ +import "C" + +func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) { + // Ensure scalar is exactly 32 bytes. We pad always, even if + // scalar is 32 bytes long, to avoid a timing side channel. + if len(scalar) > 32 { + panic("can't handle scalars > 256 bits") + } + // NOTE: potential timing issue + padded := make([]byte, 32) + copy(padded[32-len(scalar):], scalar) + scalar = padded + + // Do the multiplication in C, updating point. + point := make([]byte, 64) + readBits(Bx, point[:32]) + readBits(By, point[32:]) + + pointPtr := (*C.uchar)(unsafe.Pointer(&point[0])) + scalarPtr := (*C.uchar)(unsafe.Pointer(&scalar[0])) + res := C.secp256k1_ext_scalar_mul(context, pointPtr, scalarPtr) + + // Unpack the result and clear temporaries. + x := new(big.Int).SetBytes(point[:32]) + y := new(big.Int).SetBytes(point[32:]) + for i := range point { + point[i] = 0 + } + for i := range padded { + scalar[i] = 0 + } + if res != 1 { + return nil, nil + } + return x, y +} diff --git a/crypto/secp256k1/scalar_mult_nocgo.go b/crypto/secp256k1/scalar_mult_nocgo.go new file mode 100644 index 00000000..22f53ac6 --- /dev/null +++ b/crypto/secp256k1/scalar_mult_nocgo.go @@ -0,0 +1,14 @@ +// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be found in +// the LICENSE file. + +//go:build gofuzz || !cgo +// +build gofuzz !cgo + +package secp256k1 + +import "math/big" + +func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) { + panic("ScalarMult is not available when secp256k1 is built without cgo") +} diff --git a/crypto/secp256k1/secp256.go b/crypto/secp256k1/secp256.go index 35d0eef3..c9c01b32 100644 --- a/crypto/secp256k1/secp256.go +++ b/crypto/secp256k1/secp256.go @@ -2,16 +2,28 @@ // Use of this source code is governed by a BSD-style license that can be found in // the LICENSE file. +//go:build !gofuzz && cgo +// +build !gofuzz,cgo + // Package secp256k1 wraps the bitcoin secp256k1 C library. package secp256k1 /* #cgo CFLAGS: -I./libsecp256k1 #cgo CFLAGS: -I./libsecp256k1/src/ + +#ifdef __SIZEOF_INT128__ +# define HAVE___INT128 +# define USE_FIELD_5X52 +# define USE_SCALAR_4X64 +#else +# define USE_FIELD_10X26 +# define USE_SCALAR_8X32 +#endif + +#define USE_ENDOMORPHISM #define USE_NUM_NONE -#define USE_FIELD_10X26 #define USE_FIELD_INV_BUILTIN -#define USE_SCALAR_8X32 #define USE_SCALAR_INV_BUILTIN #define NDEBUG #include "./libsecp256k1/src/secp256k1.c" diff --git a/crypto/signature_cgo.go b/crypto/signature_cgo.go index 962d3af6..bd72d97d 100644 --- a/crypto/signature_cgo.go +++ b/crypto/signature_cgo.go @@ -14,7 +14,8 @@ // 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,cgo +//go:build !nacl && !js && cgo && !gofuzz +// +build !nacl,!js,cgo,!gofuzz package crypto @@ -23,8 +24,8 @@ import ( "crypto/elliptic" "fmt" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto/secp256k1" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto/secp256k1" ) // Ecrecover returns the uncompressed public key that created the given signature. diff --git a/crypto/signature_nocgo.go b/crypto/signature_nocgo.go index 067d32e1..3e48e51e 100644 --- a/crypto/signature_nocgo.go +++ b/crypto/signature_nocgo.go @@ -14,7 +14,8 @@ // 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 !cgo +//go:build nacl || js || !cgo || gofuzz +// +build nacl js !cgo gofuzz package crypto @@ -23,37 +24,48 @@ import ( "crypto/elliptic" "errors" "fmt" - "math/big" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + btc_ecdsa "github.com/btcsuite/btcd/btcec/v2/ecdsa" ) // Ecrecover returns the uncompressed public key that created the given signature. func Ecrecover(hash, sig []byte) ([]byte, error) { - pub, err := SigToPub(hash, sig) + pub, err := sigToPub(hash, sig) if err != nil { return nil, err } - bytes := (*btcec.PublicKey)(pub).SerializeUncompressed() + bytes := pub.SerializeUncompressed() return bytes, err } -// SigToPub returns the public key that created the given signature. -func SigToPub(hash, sig []byte) (*ecdsa.PublicKey, error) { +func sigToPub(hash, sig []byte) (*btcec.PublicKey, error) { + if len(sig) != SignatureLength { + return nil, errors.New("invalid signature") + } // Convert to btcec input format with 'recovery id' v at the beginning. btcsig := make([]byte, SignatureLength) - btcsig[0] = sig[64] + 27 + btcsig[0] = sig[RecoveryIDOffset] + 27 copy(btcsig[1:], sig) - pub, _, err := btcec.RecoverCompact(btcec.S256(), btcsig, hash) - return (*ecdsa.PublicKey)(pub), err + pub, _, err := btc_ecdsa.RecoverCompact(btcsig, hash) + return pub, err +} + +// SigToPub returns the public key that created the given signature. +func SigToPub(hash, sig []byte) (*ecdsa.PublicKey, error) { + pub, err := sigToPub(hash, sig) + if err != nil { + return nil, err + } + return pub.ToECDSA(), nil } // Sign calculates an ECDSA signature. // // 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 hash cannot be chosen by an adversary. 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. @@ -64,14 +76,20 @@ func Sign(hash []byte, prv *ecdsa.PrivateKey) ([]byte, error) { if prv.Curve != btcec.S256() { return nil, fmt.Errorf("private key curve is not secp256k1") } - sig, err := btcec.SignCompact(btcec.S256(), (*btcec.PrivateKey)(prv), hash, false) + // ecdsa.PrivateKey -> btcec.PrivateKey + var priv btcec.PrivateKey + if overflow := priv.Key.SetByteSlice(prv.D.Bytes()); overflow || priv.Key.IsZero() { + return nil, fmt.Errorf("invalid private key") + } + defer priv.Zero() + sig, err := btc_ecdsa.SignCompact(&priv, hash, false) // ref uncompressed pubkey if err != nil { return nil, err } // Convert to Ethereum signature format with 'recovery id' v at the end. v := sig[0] - 27 copy(sig, sig[1:]) - sig[64] = v + sig[RecoveryIDOffset] = v return sig, nil } @@ -82,13 +100,20 @@ func VerifySignature(pubkey, hash, signature []byte) bool { if len(signature) != 64 { return false } - sig := &btcec.Signature{R: new(big.Int).SetBytes(signature[:32]), S: new(big.Int).SetBytes(signature[32:])} - key, err := btcec.ParsePubKey(pubkey, btcec.S256()) + var r, s btcec.ModNScalar + if r.SetByteSlice(signature[:32]) { + return false // overflow + } + if s.SetByteSlice(signature[32:]) { + return false + } + sig := btc_ecdsa.NewSignature(&r, &s) + key, err := btcec.ParsePubKey(pubkey) if err != nil { return false } // Reject malleable signatures. libsecp256k1 does this check but btcec doesn't. - if sig.S.Cmp(secp256k1halfN) > 0 { + if s.IsOverHalfOrder() { return false } return sig.Verify(hash, key) @@ -99,16 +124,26 @@ func DecompressPubkey(pubkey []byte) (*ecdsa.PublicKey, error) { if len(pubkey) != 33 { return nil, errors.New("invalid compressed public key length") } - key, err := btcec.ParsePubKey(pubkey, btcec.S256()) + key, err := btcec.ParsePubKey(pubkey) if err != nil { return nil, err } return key.ToECDSA(), nil } -// CompressPubkey encodes a public key to the 33-byte compressed format. +// CompressPubkey encodes a public key to the 33-byte compressed format. The +// provided PublicKey must be valid. Namely, the coordinates must not be larger +// than 32 bytes each, they must be less than the field prime, and it must be a +// point on the secp256k1 curve. This is the case for a PublicKey constructed by +// elliptic.Unmarshal (see UnmarshalPubkey), or by ToECDSA and ecdsa.GenerateKey +// when constructing a PrivateKey. func CompressPubkey(pubkey *ecdsa.PublicKey) []byte { - return (*btcec.PublicKey)(pubkey).SerializeCompressed() + // NOTE: the coordinates may be validated with + // btcec.ParsePubKey(FromECDSAPub(pubkey)) + var x, y btcec.FieldVal + x.SetByteSlice(pubkey.X.Bytes()) + y.SetByteSlice(pubkey.Y.Bytes()) + return btcec.NewPublicKey(&x, &y).SerializeCompressed() } // S256 returns an instance of the secp256k1 curve. diff --git a/crypto/signature_test.go b/crypto/signature_test.go index cb154b81..aecff76b 100644 --- a/crypto/signature_test.go +++ b/crypto/signature_test.go @@ -22,9 +22,9 @@ import ( "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" ) var ( diff --git a/crypto/signify/signify.go b/crypto/signify/signify.go new file mode 100644 index 00000000..eb029e50 --- /dev/null +++ b/crypto/signify/signify.go @@ -0,0 +1,100 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// signFile reads the contents of an input file and signs it (in armored format) +// with the key provided, placing the signature into the output file. + +package signify + +import ( + "bytes" + "crypto/ed25519" + "encoding/base64" + "errors" + "fmt" + "os" + "strings" + "time" +) + +var ( + errInvalidKeyHeader = errors.New("incorrect key header") + errInvalidKeyLength = errors.New("invalid, key length != 104") +) + +func parsePrivateKey(key string) (k ed25519.PrivateKey, header []byte, keyNum []byte, err error) { + keydata, err := base64.StdEncoding.DecodeString(key) + if err != nil { + return nil, nil, nil, err + } + if len(keydata) != 104 { + return nil, nil, nil, errInvalidKeyLength + } + if string(keydata[:2]) != "Ed" { + return nil, nil, nil, errInvalidKeyHeader + } + return keydata[40:], keydata[:2], keydata[32:40], nil +} + +// SignFile creates a signature of the input file. +// +// This accepts base64 keys in the format created by the 'signify' tool. +// The signature is written to the 'output' file. +func SignFile(input string, output string, key string, untrustedComment string, trustedComment string) error { + // Pre-check comments and ensure they're set to something. + if strings.IndexByte(untrustedComment, '\n') >= 0 { + return errors.New("untrusted comment must not contain newline") + } + if strings.IndexByte(trustedComment, '\n') >= 0 { + return errors.New("trusted comment must not contain newline") + } + if untrustedComment == "" { + untrustedComment = "verify with " + input + ".pub" + } + if trustedComment == "" { + trustedComment = fmt.Sprintf("timestamp:%d", time.Now().Unix()) + } + + filedata, err := os.ReadFile(input) + if err != nil { + return err + } + skey, header, keyNum, err := parsePrivateKey(key) + if err != nil { + return err + } + + // Create the main data signature. + rawSig := ed25519.Sign(skey, filedata) + var dataSig []byte + dataSig = append(dataSig, header...) + dataSig = append(dataSig, keyNum...) + dataSig = append(dataSig, rawSig...) + + // Create the comment signature. + var commentSigInput []byte + commentSigInput = append(commentSigInput, rawSig...) + commentSigInput = append(commentSigInput, []byte(trustedComment)...) + commentSig := ed25519.Sign(skey, commentSigInput) + + // Create the output file. + var out = new(bytes.Buffer) + fmt.Fprintln(out, "untrusted comment:", untrustedComment) + fmt.Fprintln(out, base64.StdEncoding.EncodeToString(dataSig)) + fmt.Fprintln(out, "trusted comment:", trustedComment) + fmt.Fprintln(out, base64.StdEncoding.EncodeToString(commentSig)) + return os.WriteFile(output, out.Bytes(), 0644) +} diff --git a/crypto/signify/signify_fuzz.go b/crypto/signify/signify_fuzz.go new file mode 100644 index 00000000..457af044 --- /dev/null +++ b/crypto/signify/signify_fuzz.go @@ -0,0 +1,150 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build gofuzz +// +build gofuzz + +package signify + +import ( + "bufio" + "fmt" + "log" + "os" + "os/exec" + + fuzz "github.com/google/gofuzz" + "github.com/jedisct1/go-minisign" +) + +func Fuzz(data []byte) int { + if len(data) < 32 { + return -1 + } + tmpFile, err := os.CreateTemp("", "") + if err != nil { + panic(err) + } + defer os.Remove(tmpFile.Name()) + defer tmpFile.Close() + + testSecKey, testPubKey := createKeyPair() + // Create message + tmpFile.Write(data) + if err = tmpFile.Close(); err != nil { + panic(err) + } + // Fuzz comments + var untrustedComment string + var trustedComment string + f := fuzz.NewFromGoFuzz(data) + f.Fuzz(&untrustedComment) + f.Fuzz(&trustedComment) + fmt.Printf("untrusted: %v\n", untrustedComment) + fmt.Printf("trusted: %v\n", trustedComment) + + err = SignifySignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, untrustedComment, trustedComment) + if err != nil { + panic(err) + } + defer os.Remove(tmpFile.Name() + ".sig") + + signify := "signify" + path := os.Getenv("SIGNIFY") + if path != "" { + signify = path + } + + _, err := exec.LookPath(signify) + if err != nil { + panic(err) + } + + // Write the public key into the file to pass it as + // an argument to signify-openbsd + pubKeyFile, err := os.CreateTemp("", "") + if err != nil { + panic(err) + } + defer os.Remove(pubKeyFile.Name()) + defer pubKeyFile.Close() + pubKeyFile.WriteString("untrusted comment: signify public key\n") + pubKeyFile.WriteString(testPubKey) + pubKeyFile.WriteString("\n") + + cmd := exec.Command(signify, "-V", "-p", pubKeyFile.Name(), "-x", tmpFile.Name()+".sig", "-m", tmpFile.Name()) + if output, err := cmd.CombinedOutput(); err != nil { + panic(fmt.Sprintf("could not verify the file: %v, output: \n%s", err, output)) + } + + // Verify the signature using a golang library + sig, err := minisign.NewSignatureFromFile(tmpFile.Name() + ".sig") + if err != nil { + panic(err) + } + + pKey, err := minisign.NewPublicKey(testPubKey) + if err != nil { + panic(err) + } + + valid, err := pKey.VerifyFromFile(tmpFile.Name(), sig) + if err != nil { + panic(err) + } + if !valid { + panic("invalid signature") + } + return 1 +} + +func getKey(fileS string) (string, error) { + file, err := os.Open(fileS) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + // Discard the first line + scanner.Scan() + scanner.Scan() + return scanner.Text(), scanner.Err() +} + +func createKeyPair() (string, string) { + // Create key and put it in correct format + tmpKey, err := os.CreateTemp("", "") + if err != nil { + panic(err) + } + defer os.Remove(tmpKey.Name()) + defer os.Remove(tmpKey.Name() + ".pub") + defer os.Remove(tmpKey.Name() + ".sec") + cmd := exec.Command("signify", "-G", "-n", "-p", tmpKey.Name()+".pub", "-s", tmpKey.Name()+".sec") + if output, err := cmd.CombinedOutput(); err != nil { + panic(fmt.Sprintf("could not verify the file: %v, output: \n%s", err, output)) + } + secKey, err := getKey(tmpKey.Name() + ".sec") + if err != nil { + panic(err) + } + pubKey, err := getKey(tmpKey.Name() + ".pub") + if err != nil { + panic(err) + } + return secKey, pubKey +} diff --git a/crypto/signify/signify_test.go b/crypto/signify/signify_test.go new file mode 100644 index 00000000..ba85d2fc --- /dev/null +++ b/crypto/signify/signify_test.go @@ -0,0 +1,153 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// signFile reads the contents of an input file and signs it (in armored format) +// with the key provided, placing the signature into the output file. + +package signify + +import ( + "math/rand" + "os" + "testing" + "time" + + "github.com/jedisct1/go-minisign" +) + +var ( + testSecKey = "RWRCSwAAAABVN5lr2JViGBN8DhX3/Qb/0g0wBdsNAR/APRW2qy9Fjsfr12sK2cd3URUFis1jgzQzaoayK8x4syT4G3Gvlt9RwGIwUYIQW/0mTeI+ECHu1lv5U4Wa2YHEPIesVPyRm5M=" + testPubKey = "RWTAPRW2qy9FjsBiMFGCEFv9Jk3iPhAh7tZb+VOFmtmBxDyHrFT8kZuT" +) + +func TestSignify(t *testing.T) { + tmpFile, err := os.CreateTemp("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name()) + defer tmpFile.Close() + + rand.Seed(time.Now().UnixNano()) + + data := make([]byte, 1024) + rand.Read(data) + tmpFile.Write(data) + + if err = tmpFile.Close(); err != nil { + t.Fatal(err) + } + + err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "clé", "croissants") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name() + ".sig") + + // Verify the signature using a golang library + sig, err := minisign.NewSignatureFromFile(tmpFile.Name() + ".sig") + if err != nil { + t.Fatal(err) + } + + pKey, err := minisign.NewPublicKey(testPubKey) + if err != nil { + t.Fatal(err) + } + + valid, err := pKey.VerifyFromFile(tmpFile.Name(), sig) + if err != nil { + t.Fatal(err) + } + if !valid { + t.Fatal("invalid signature") + } +} + +func TestSignifyTrustedCommentTooManyLines(t *testing.T) { + tmpFile, err := os.CreateTemp("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name()) + defer tmpFile.Close() + + rand.Seed(time.Now().UnixNano()) + + data := make([]byte, 1024) + rand.Read(data) + tmpFile.Write(data) + + if err = tmpFile.Close(); err != nil { + t.Fatal(err) + } + + err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "", "crois\nsants") + if err == nil || err.Error() == "" { + t.Fatalf("should have errored on a multi-line trusted comment, got %v", err) + } + defer os.Remove(tmpFile.Name() + ".sig") +} + +func TestSignifyTrustedCommentTooManyLinesLF(t *testing.T) { + tmpFile, err := os.CreateTemp("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name()) + defer tmpFile.Close() + + rand.Seed(time.Now().UnixNano()) + + data := make([]byte, 1024) + rand.Read(data) + tmpFile.Write(data) + + if err = tmpFile.Close(); err != nil { + t.Fatal(err) + } + + err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "crois\rsants", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name() + ".sig") +} + +func TestSignifyTrustedCommentEmpty(t *testing.T) { + tmpFile, err := os.CreateTemp("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name()) + defer tmpFile.Close() + + rand.Seed(time.Now().UnixNano()) + + data := make([]byte, 1024) + rand.Read(data) + tmpFile.Write(data) + + if err = tmpFile.Close(); err != nil { + t.Fatal(err) + } + + err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name() + ".sig") +} diff --git a/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf b/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf new file mode 100644 index 00000000..5d834e82 Binary files /dev/null and b/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf differ diff --git a/docs/audits/2020-01-24_DiscV5_audit_Cure53.pdf b/docs/audits/2020-01-24_DiscV5_audit_Cure53.pdf new file mode 100644 index 00000000..f490e1d0 Binary files /dev/null and b/docs/audits/2020-01-24_DiscV5_audit_Cure53.pdf differ diff --git a/docs/connect_to_ECCPoW_Ethereum/Connect-to-ECCPoW-Etherem-test-network.md b/docs/connect_to_ECCPoW_Ethereum/Connect-to-ECCPoW-Etherem-test-network.md deleted file mode 100644 index 5caa5991..00000000 --- a/docs/connect_to_ECCPoW_Ethereum/Connect-to-ECCPoW-Etherem-test-network.md +++ /dev/null @@ -1,114 +0,0 @@ -# Connect to ECCPoW Etherem test network - -Contents - -1. Set up your own node -2. Connect your node to ECCPoW Ethereum test network - -Environment - -- Linux (Ubuntu, Mint or Manjaro) -- Golang - -To install environments, please follow below link - -- For Linux: [Link](https://github.com/cryptoecc/ETH-ECC/blob/master/docs/eccpow%20windows%20instuction/Windows%20install%20instruction.md#4-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%83%81%EC%97%90%EC%84%9C-%EC%8B%A4%ED%96%89-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95) -- For windows: [Link](https://github.com/cryptoecc/ETH-ECC/blob/master/docs/eccpow%20windows%20instuction/Windows%20install%20instruction.md) - -## Set up your node - -Before connecting to ECCPoW network, you must set up your own node. - -- For connection, you must use same genesis file and network id with ECCPoW Ethereum bootnode. -- Thus, in this chapter, we present how to set up your node with ECCPoW genesis file and network id - -1. Clone ECCPoW Ethereum to your directory - -``` -git clone https://github.com/cryptoecc/ETH-ECC.git -``` - -If it is done, you can see `ETH-ECC` folder in your directory - -2. Make a storage directory - -- In storage directory, blocks and transactions information will be stored - -In my case, - -``` -/document |---- /ETH-ECC - |---- /storage -``` - -Namely, there exists two directory in document directory - -3. Initialize geth - -- geth is the name of ECCPoW Ethereum client. - -Move to `ETH-ECC` directory, open terminal and type below command to build ECCPoW Ethereum - -``` -make all -``` - -After finishing build, move to bin folder. bin folder is located in build directory - -``` -cd /build/bin -``` - -For initialize geth, open terminal in bin directory and type below command with replacement - -``` -./geth --datadir {your_storage_directory} init ../../testnet_genesis/eccpow_test_flight.json -``` - -In my case, - -``` -./geth --datadir ../../../storage init ../../testnet_genesis/eccpow_test_flight.json -``` - -It is end of initialization. In next chapter, we will present how to connect to ECCPoW Ethereum - -## Connect your node to ECCPoW Ethereum test network - -Open your terminal in bin directory and type below command - -``` -./geth --datadir {your_storage_directory} --networkid 4478 --bootnodes "enr:-J-4QBi1ddekLufbQDZR_zuEF85CTqG2zruZNjsUvET1-NdsVdgEvWP-LF2shXhwY6MjIoE91MKBrrKYbYflNx7weJsCg2V0aMfGhEF4tbCAgmlkgnY0gmlwhNJruhGJc2VjcDI1NmsxoQO_0KClP6S15b9O8NUOPs5bIdjCEFnWUH6afD9qjV3I4oN0Y3CCdmGDdWRwgn46hHVkcDaCdmE" - - - console -``` - -- 4478 is network id of ECCPoW Ethereum - -In my case - -``` -./geth --datadir ../../../storage --networkid 4478 --bootnodes "enr:-J-4QBi1ddekLufbQDZR_zuEF85CTqG2zruZNjsUvET1-NdsVdgEvWP-LF2shXhwY6MjIoE91MKBrrKYbYflNx7weJsCg2V0aMfGhEF4tbCAgmlkgnY0gmlwhNJruhGJc2VjcDI1NmsxoQO_0KClP6S15b9O8NUOPs5bIdjCEFnWUH6afD9qjV3I4oN0Y3CCdmGDdWRwgn46hHVkcDaCdmE" - - - console -``` - -> Bootnode 2 :"enr:-J-4QJl4bBe48b4gpctJj10kso6U9czjol6Uhvuw4H6fFUW2GUXLDpO_mMyBmPLrsT1mD42xE3ycU2sUBHcqXbviF7gCg2V0aMfGhHHGzwGAgmlkgnY0gmlwhNJruhGJc2VjcDI1NmsxoQPXzBOTV2LiZiOCahHv8nrIrT_cKv8fMY8QOTaKkXR-lIN0Y3CCdl-DdWRwgrWjhHVkcDaCdl8" - - -After few seconds, type below command in geth to watch a connected node - -``` -admin.peers -``` - -Then, you can see a node such as below figure - -![connecntion](./img/connecntion.png) - ---- - -If you have any question about this instruction, please make a issue in our [Github](https://github.com/cryptoecc/ETH-ECC) - diff --git a/docs/connect_to_ECCPoW_Ethereum/img/connecntion.png b/docs/connect_to_ECCPoW_Ethereum/img/connecntion.png deleted file mode 100644 index 18b0da10..00000000 Binary files a/docs/connect_to_ECCPoW_Ethereum/img/connecntion.png and /dev/null differ diff --git a/docs/eccpow windows instuction/Windows install instruction.docx b/docs/eccpow windows instuction/Windows install instruction.docx deleted file mode 100644 index 54fcd0b5..00000000 Binary files a/docs/eccpow windows instuction/Windows install instruction.docx and /dev/null differ diff --git a/docs/eccpow windows instuction/Windows install instruction.md b/docs/eccpow windows instuction/Windows install instruction.md deleted file mode 100644 index 47a189fe..00000000 --- a/docs/eccpow windows instuction/Windows install instruction.md +++ /dev/null @@ -1,117 +0,0 @@ -# Linux install instruction - -이 글은 윈도우의 가상머신에 우분투 리눅스를 설치하여, ETH-ECC를 실행하기 위한 환경을 구성하는데 목적을 둠. - -목차 - -1. VMware 다운로드 및 설치 -2. 우분투 다운로드 -3. VMware 에서 우분투 설치 -4. 리눅스 상에서 실행 환경 설정 -5. ETH-ECC 다운로드 및 인스톨 - -## 1. VMware 다운로드 및 설치 - -https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html - -위 링크로 들어가 윈도우용 vmware 다운로드 및 설치 - -![vmware-download](./img/vmware-download.PNG) - -## 2. 우분투 다운로드 - -https://ubuntu.com/download/desktop - -위 링크로 들어가 LTS버전 우분투 다운로드 - -![ubuntu-download](./img/ubuntu-download.PNG) - -## 3. VMware에서 우분투 설치 - -1. VMware 실행 후 Create a New Virtual Machine 클릭 - -![step01](./img/step01.PNG) - -2. 설치한 우분투 선택 후 next 클릭하고 설치 진행 - -![step02](./img/step02.PNG) - - - -## 4. 리눅스 상에서 실행 환경 설정 - -1. 설치가 끝나면 리눅스에서 오른쪽 마우스를 클릭하여 터미널 실행 후 패키지 업데이트 및 설치 - - ![step03-0](./img/step03-0.PNG) - -- 패키지 업데이트 - - ![step03](./img/step03.PNG) - -- 고 언어 설치 - - ![step04](./img/step04.PNG) - -- git 설치 - - ![step4-1](./img/step4-1.PNG) - -1. 고 언어 설치 후 설치 확인 - - - 터미널에서 go env 입력 하여 설치 확인 - -![step05](./img/step05.PNG) - -## 5. ETH-ECC 다운로드 및 인스톨 - -1. ETH-ECC를 설치하기 원하는 위치에서 터미널 실행 - - ![step04-2](./img/step04-2.PNG) - -2. 터미널에 명령어 입력하여 ETH-ECC 다운로드 - -``` -git clone https://github.com/cryptoecc/ETH-ECC.git -``` - -위 커맨드를 터미널에 입력함 - -![step06](./img/step06.PNG) - -3. 다운로드가 끝나면 다운로드 된 ETH-ECC 폴더로 이동 - - ![step07](./img/step07.PNG) - -4. ETH-ECC 폴더 안에서 터미널 실행 - - ![step08](./img/step08.PNG) - -5. 터미널에서 컴파일 실행 - - ``` - make all - ``` - - ![step09](./img/step09.PNG) - -6. 바이너리 파일이 위치해 있는 build/bin 경로로 이동 - - ``` - cd build/bin - ``` - - ![step10](./img/step10.PNG) - - - - ---- - -이후 터미널에서 `./puppeth`를 실행하여 [Build private network and test](https://github.com/cryptoecc/ETH-ECC/blob/master/tutorial.md#21-configuration-of-eth-ecc-environment) 의 2.1단계부터 수행하면 private network 실습이 가능함. - -``` -./puppeth -``` - -![step11](./img/step11.PNG) - diff --git a/docs/eccpow windows instuction/Windows install instruction.pdf b/docs/eccpow windows instuction/Windows install instruction.pdf deleted file mode 100644 index 53a16bac..00000000 Binary files a/docs/eccpow windows instuction/Windows install instruction.pdf and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step01.PNG b/docs/eccpow windows instuction/img/step01.PNG deleted file mode 100644 index 0fdf7312..00000000 Binary files a/docs/eccpow windows instuction/img/step01.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step02.PNG b/docs/eccpow windows instuction/img/step02.PNG deleted file mode 100644 index b43a6f88..00000000 Binary files a/docs/eccpow windows instuction/img/step02.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step03-0.PNG b/docs/eccpow windows instuction/img/step03-0.PNG deleted file mode 100644 index ca46038c..00000000 Binary files a/docs/eccpow windows instuction/img/step03-0.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step03.PNG b/docs/eccpow windows instuction/img/step03.PNG deleted file mode 100644 index 2a0fc484..00000000 Binary files a/docs/eccpow windows instuction/img/step03.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step04-2.PNG b/docs/eccpow windows instuction/img/step04-2.PNG deleted file mode 100644 index 74c89dd7..00000000 Binary files a/docs/eccpow windows instuction/img/step04-2.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step04.PNG b/docs/eccpow windows instuction/img/step04.PNG deleted file mode 100644 index 26b85de0..00000000 Binary files a/docs/eccpow windows instuction/img/step04.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step05.PNG b/docs/eccpow windows instuction/img/step05.PNG deleted file mode 100644 index 1958a986..00000000 Binary files a/docs/eccpow windows instuction/img/step05.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step06.PNG b/docs/eccpow windows instuction/img/step06.PNG deleted file mode 100644 index 79f228c4..00000000 Binary files a/docs/eccpow windows instuction/img/step06.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step07.PNG b/docs/eccpow windows instuction/img/step07.PNG deleted file mode 100644 index ed761011..00000000 Binary files a/docs/eccpow windows instuction/img/step07.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step08.PNG b/docs/eccpow windows instuction/img/step08.PNG deleted file mode 100644 index 7531aa6d..00000000 Binary files a/docs/eccpow windows instuction/img/step08.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step09.PNG b/docs/eccpow windows instuction/img/step09.PNG deleted file mode 100644 index 3ccf5b87..00000000 Binary files a/docs/eccpow windows instuction/img/step09.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step10.PNG b/docs/eccpow windows instuction/img/step10.PNG deleted file mode 100644 index afada390..00000000 Binary files a/docs/eccpow windows instuction/img/step10.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step11.PNG b/docs/eccpow windows instuction/img/step11.PNG deleted file mode 100644 index bb69afb4..00000000 Binary files a/docs/eccpow windows instuction/img/step11.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/step4-1.PNG b/docs/eccpow windows instuction/img/step4-1.PNG deleted file mode 100644 index e7c6dcf4..00000000 Binary files a/docs/eccpow windows instuction/img/step4-1.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/ubuntu-download.PNG b/docs/eccpow windows instuction/img/ubuntu-download.PNG deleted file mode 100644 index a5711b80..00000000 Binary files a/docs/eccpow windows instuction/img/ubuntu-download.PNG and /dev/null differ diff --git a/docs/eccpow windows instuction/img/vmware-download.PNG b/docs/eccpow windows instuction/img/vmware-download.PNG deleted file mode 100644 index 828f40b6..00000000 Binary files a/docs/eccpow windows instuction/img/vmware-download.PNG and /dev/null differ diff --git a/docs/postmortems/2021-08-22-split-postmortem.md b/docs/postmortems/2021-08-22-split-postmortem.md new file mode 100644 index 00000000..2004f0f2 --- /dev/null +++ b/docs/postmortems/2021-08-22-split-postmortem.md @@ -0,0 +1,266 @@ +# Minority split 2021-08-27 post mortem + +This is a post-mortem concerning the minority split that occurred on Ethereum mainnet on block [13107518](https://etherscan.io/block/13107518), at which a minority chain split occurred. + +## Timeline + + +- 2021-08-17: Guido Vranken submitted a bounty report. Investigation started, root cause identified, patch variations discussed. +- 2021-08-18: Made public announcement over twitter about upcoming security release upcoming Tuesday. Downstream projects were also notified about the upcoming patch-release. +- 2021-08-24: Released [v1.10.8](https://github.com/ethereum/go-ethereum/releases/tag/v1.10.8) containing the fix on Tuesday morning (CET). Erigon released [v2021.08.04](https://github.com/ledgerwatch/erigon/releases/tag/v2021.08.04). +- 2021-08-27: At 12:50:07 UTC, issue exploited. Analysis started roughly 30m later, + + + +## Bounty report + +### 2021-08-17 RETURNDATA corruption via datacopy + +On 2021-08-17, Guido Vranken submitted a report to bounty@ethereum.org. This coincided with a geth-meetup in Berlin, so the geth team could fairly quickly analyse the issue. + +He submitted a proof of concept which called the `dataCopy` precompile, where the input slice and output slice were overlapping but shifted. Doing a `copy` where the `src` and `dest` overlaps is not a problem in itself, however, the `returnData`slice was _also_ using the same memory as a backing-array. + +#### Technical details + +During CALL-variants, `geth` does not copy the input. This was changed at one point, to avoid a DoS attack reported by Hubert Ritzdorf, to avoid copying data a lot on repeated `CALL`s -- essentially combating a DoS via `malloc`. Further, the datacopy precompile also does not copy the data, but just returns the same slice. This is fine so far. + +After the execution of `dataCopy`, we copy the `ret` into the designated memory area, and this is what causes a problem. Because we're copying a slice of memory over a slice of memory, and this operation modifies (shifts) the data in the source -- the `ret`. So this means we wind up with corrupted returndata. + + +``` +1. Calling datacopy + + memory: [0, 1, 2, 3, 4] + in (mem[0:4]) : [0,1,2,3] + out (mem[1:5]): [1,2,3,4] + +2. dataCopy returns + + returndata (==in, mem[0:4]): [0,1,2,3] + +3. Copy in -> out + + => memory: [0,0,1,2,3] + => returndata: [0,0,1,2] +``` + + +#### Summary + +A memory-corruption bug within the EVM can cause a consensus error, where vulnerable nodes obtain a different `stateRoot` when processing a maliciously crafted transaction. This, in turn, would lead to the chain being split: mainnet splitting in two forks. + +#### Handling + +On the evening of 17th, we discussed options on how to handle it. We made a state test to reproduce the issue, and verified that neither `openethereum`, `nethermind` nor `besu` were affected by the same vulnerability, and started a full-sync with a patched version of `geth`. + +It was decided that in this specific instance, it would be possible to make a public announcement and a patch release: + +- The fix can be made pretty 'generically', e.g. always copying data on input to precompiles. +- The flaw is pretty difficult to find, given a generic fix in the call. The attacker needs to figure out that it concerns the precompiles, specifically the datcopy, and that it concerns the `RETURNDATA` buffer rather than the regular memory, and lastly the special circumstances to trigger it (overlapping but shifted input/output). + +Since we had merged the removal of `ETH65`, if the entire network were to upgrade, then nodes which have not yet implemented `ETH66` would be cut off from the network. After further discussions, we decided to: + +- Announce an upcoming security release on Tuesday (August 24th), via Twitter and official channels, plus reach out to downstream projects. +- Temporarily revert the `ETH65`-removal. +- Place the fix into the PR optimizing the jumpdest analysis [233381](https://github.com/ethereum/go-ethereum/pull/23381). +- After 4-8 weeks, release details about the vulnerability. + + +## Exploit + +At block [13107518](https://etherscan.io/block/13107518), mined at (Aug-27-2021 12:50:07 PM +UTC), a minority chain split occurred. The discord user @AlexSSD7 notified the allcoredevs-channel on the Eth R&D discord, on Aug 27 13:09 UTC. + + +At 14:09 UTC, it was confirmed that the transaction `0x1cb6fb36633d270edefc04d048145b4298e67b8aa82a9e5ec4aa1435dd770ce4` had triggered the bug, leading to a minority-split of the chain. The term 'minority split' means that the majority of miners continued to mine on the correct chain. + +At 14:17 UTC, @mhswende tweeted out about the issue [2]. + +The attack was sent from an account funded from Tornado cash. + +It was also found that the same attack had been carried out on the BSC chain at roughly the same time -- at a block mined [12 minutes earlier](https://bscscan.com/tx/0xf667f820631f6adbd04a4c92274374034a3e41fa9057dc42cb4e787535136dce), at Aug-27-2021 12:38:30 PM +UTC. + +The blocks on the 'bad' chain were investigated, and Tim Beiko reached out to those mining operators on the minority chain who could be identified via block extradata. + + +## Lessons learned + + +### Disclosure decision + +The geth-team have an official policy regarding [vulnerability disclosure](https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities). + +> The primary goal for the Geth team is the health of the Ethereum network as a whole, and the decision whether or not to publish details about a serious vulnerability boils down to minimizing the risk and/or impact of discovery and exploitation. + +In this case, it was decided that public pre-announce + patch would likely lead to sufficient update-window for a critical mass of nodes/miners to upgrade in time before it could be exploited. In hindsight, this was a dangerous decision, and it's unlikely that the same decision would be reached were a similar incident to happen again. + + +### Disclosure path + +Several subprojects were informed about the upcoming security patch: + +- Polygon/Matic +- MEV +- Avalanche +- Erigon +- BSC +- EWF +- Quorum +- ETC +- xDAI + +However, some were 'lost', and only notified later + +- Optimism +- Summa +- Harmony + +Action point: create a low-volume geth-announce@ethereum.org email list where dependent projects/operators can receive public announcements. +- This has been done. If you wish to receive release- and security announcements, sign up [here](https://groups.google.com/a/ethereum.org/g/geth-announce/about) + +### Fork monitoring + +The fork monitor behaved 'ok' during the incident, but had to be restarted during the evening. + +Action point: improve the resiliency of the forkmon, which is currently not performing great when many nodes are connected. + +Action point: enable push-based alerts to be sent from the forkmon, to speed up the fork detection. + + +## Links + +- [1] https://twitter.com/go_ethereum/status/1428051458763763721 +- [2] https://twitter.com/mhswende/status/1431259601530458112 + + +## Appendix + +### Subprojects + + +The projects were sent variations of the following text: +``` +We have identified a security issue with go-ethereum, and will issue a +new release (v1.10.8) on Tuesday next week. + +At this point, we will not disclose details about the issue, but +recommend downstream/dependent projects to be ready to take actions to +upgrade to the latest go-ethereum codebase. More information about the +issue will be disclosed at a later date. + +https://twitter.com/go_ethereum/status/1428051458763763721 + +``` +### Patch + +```diff +diff --git a/core/vm/instructions.go b/core/vm/instructions.go +index f7ef2f900e..6c8c6e6e6f 100644 +--- a/core/vm/instructions.go ++++ b/core/vm/instructions.go +@@ -669,6 +669,7 @@ func opCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt + } + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { ++ ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + } + scope.Contract.Gas += returnGas +@@ -703,6 +704,7 @@ func opCallCode(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([ + } + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { ++ ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + } + scope.Contract.Gas += returnGas +@@ -730,6 +732,7 @@ func opDelegateCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext + } + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { ++ ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + } + scope.Contract.Gas += returnGas +@@ -757,6 +760,7 @@ func opStaticCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) + } + stack.push(&temp) + if err == nil || err == ErrExecutionReverted { ++ ret = common.CopyBytes(ret) + scope.Memory.Set(retOffset.Uint64(), retSize.Uint64(), ret) + } + scope.Contract.Gas += returnGas +diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go +index 9cf0c4e2c1..9fb83799c9 100644 +--- a/core/vm/interpreter.go ++++ b/core/vm/interpreter.go +@@ -262,7 +262,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( + // if the operation clears the return data (e.g. it has returning data) + // set the last return to the result of the operation. + if operation.returns { +- in.returnData = common.CopyBytes(res) ++ in.returnData = res + } + + switch { +``` + +### Statetest to test for the issue + +```json +{ + "trigger-issue": { + "env": { + "currentCoinbase": "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty": "0x20000", + "currentGasLimit": "0x26e1f476fe1e22", + "currentNumber": "0x1", + "currentTimestamp": "0x3e8", + "previousHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "pre": { + "0x00000000000000000000000000000000000000bb": { + "code": "0x6001600053600260015360036002536004600353600560045360066005536006600260066000600060047f7ef0367e633852132a0ebbf70eb714015dd44bc82e1e55a96ef1389c999c1bcaf13d600060003e596000208055", + "storage": {}, + "balance": "0x5", + "nonce": "0x0" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "code": "0x", + "storage": {}, + "balance": "0xffffffff", + "nonce": "0x0" + } + }, + "transaction": { + "gasPrice": "0x1", + "nonce": "0x0", + "to": "0x00000000000000000000000000000000000000bb", + "data": [ + "0x" + ], + "gasLimit": [ + "0x7a1200" + ], + "value": [ + "0x01" + ], + "secretKey": "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8" + }, + "out": "0x", + "post": { + "Berlin": [ + { + "hash": "2a38a040bab1e1fa499253d98b2fd363e5756ecc52db47dd59af7116c068368c", + "logs": "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "indexes": { + "data": 0, + "gas": 0, + "value": 0 + } + } + ] + } + } +} +``` + diff --git a/eth/api.go b/eth/api.go index 1ad2e895..5642ef4c 100644 --- a/eth/api.go +++ b/eth/api.go @@ -28,78 +28,57 @@ import ( "strings" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "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/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/trie" ) -// PublicEthereumAPI provides an API to access Ethereum full node-related -// information. -type PublicEthereumAPI struct { +// EthereumAPI provides an API to access Ethereum full node-related information. +type EthereumAPI struct { e *Ethereum } -// NewPublicEthereumAPI creates a new Ethereum protocol API for full nodes. -func NewPublicEthereumAPI(e *Ethereum) *PublicEthereumAPI { - return &PublicEthereumAPI{e} +// NewEthereumAPI creates a new Ethereum protocol API for full nodes. +func NewEthereumAPI(e *Ethereum) *EthereumAPI { + return &EthereumAPI{e} } -// Etherbase is the address that mining rewards will be send to -func (api *PublicEthereumAPI) Etherbase() (common.Address, error) { +// Etherbase is the address that mining rewards will be send to. +func (api *EthereumAPI) Etherbase() (common.Address, error) { return api.e.Etherbase() } -// Coinbase is the address that mining rewards will be send to (alias for Etherbase) -func (api *PublicEthereumAPI) Coinbase() (common.Address, error) { +// Coinbase is the address that mining rewards will be send to (alias for Etherbase). +func (api *EthereumAPI) Coinbase() (common.Address, error) { return api.Etherbase() } -// Hashrate returns the POW hashrate -func (api *PublicEthereumAPI) Hashrate() hexutil.Uint64 { - return hexutil.Uint64(api.e.Miner().HashRate()) -} - -// ChainId is the EIP-155 replay-protection chain id for the current ethereum chain config. -func (api *PublicEthereumAPI) ChainId() hexutil.Uint64 { - chainID := new(big.Int) - if config := api.e.blockchain.Config(); config.IsEIP155(api.e.blockchain.CurrentBlock().Number()) { - chainID = config.ChainID - } - return (hexutil.Uint64)(chainID.Uint64()) -} - -// PublicMinerAPI provides an API to control the miner. -// It offers only methods that operate on data that pose no security risk when it is publicly accessible. -type PublicMinerAPI struct { - e *Ethereum -} - -// NewPublicMinerAPI create a new PublicMinerAPI instance. -func NewPublicMinerAPI(e *Ethereum) *PublicMinerAPI { - return &PublicMinerAPI{e} +// Hashrate returns the POW hashrate. +func (api *EthereumAPI) Hashrate() hexutil.Uint64 { + return hexutil.Uint64(api.e.Miner().Hashrate()) } // Mining returns an indication if this node is currently mining. -func (api *PublicMinerAPI) Mining() bool { +func (api *EthereumAPI) Mining() bool { return api.e.IsMining() } -// PrivateMinerAPI provides private RPC methods to control the miner. -// These methods can be abused by external users and must be considered insecure for use by untrusted users. -type PrivateMinerAPI struct { +// MinerAPI provides an API to control the miner. +type MinerAPI struct { e *Ethereum } -// NewPrivateMinerAPI create a new RPC service which controls the miner of this node. -func NewPrivateMinerAPI(e *Ethereum) *PrivateMinerAPI { - return &PrivateMinerAPI{e: e} +// NewMinerAPI create a new MinerAPI instance. +func NewMinerAPI(e *Ethereum) *MinerAPI { + return &MinerAPI{e} } // Start starts the miner with the given number of threads. If threads is nil, @@ -107,7 +86,7 @@ func NewPrivateMinerAPI(e *Ethereum) *PrivateMinerAPI { // usable by this process. If mining is already running, this method adjust the // number of threads allowed to use and updates the minimum price required by the // transaction pool. -func (api *PrivateMinerAPI) Start(threads *int) error { +func (api *MinerAPI) Start(threads *int) error { if threads == nil { return api.e.StartMining(runtime.NumCPU()) } @@ -116,12 +95,12 @@ func (api *PrivateMinerAPI) Start(threads *int) error { // Stop terminates the miner, both at the consensus engine level as well as at // the block creation level. -func (api *PrivateMinerAPI) Stop() { +func (api *MinerAPI) Stop() { api.e.StopMining() } // SetExtra sets the extra data string that is included when this miner mines a block. -func (api *PrivateMinerAPI) SetExtra(extra string) (bool, error) { +func (api *MinerAPI) SetExtra(extra string) (bool, error) { if err := api.e.Miner().SetExtra([]byte(extra)); err != nil { return false, err } @@ -129,7 +108,7 @@ func (api *PrivateMinerAPI) SetExtra(extra string) (bool, error) { } // SetGasPrice sets the minimum accepted gas price for the miner. -func (api *PrivateMinerAPI) SetGasPrice(gasPrice hexutil.Big) bool { +func (api *MinerAPI) SetGasPrice(gasPrice hexutil.Big) bool { api.e.lock.Lock() api.e.gasPrice = (*big.Int)(&gasPrice) api.e.lock.Unlock() @@ -138,36 +117,49 @@ func (api *PrivateMinerAPI) SetGasPrice(gasPrice hexutil.Big) bool { return true } -// SetEtherbase sets the etherbase of the miner -func (api *PrivateMinerAPI) SetEtherbase(etherbase common.Address) bool { +// SetGasLimit sets the gaslimit to target towards during mining. +func (api *MinerAPI) SetGasLimit(gasLimit hexutil.Uint64) bool { + api.e.Miner().SetGasCeil(uint64(gasLimit)) + return true +} + +// SetEtherbase sets the etherbase of the miner. +func (api *MinerAPI) SetEtherbase(etherbase common.Address) bool { api.e.SetEtherbase(etherbase) return true } // SetRecommitInterval updates the interval for miner sealing work recommitting. -func (api *PrivateMinerAPI) SetRecommitInterval(interval int) { +func (api *MinerAPI) SetRecommitInterval(interval int) { api.e.Miner().SetRecommitInterval(time.Duration(interval) * time.Millisecond) } -// GetHashrate returns the current hashrate of the miner. -func (api *PrivateMinerAPI) GetHashrate() uint64 { - return api.e.miner.HashRate() -} - -// PrivateAdminAPI is the collection of Ethereum full node-related APIs -// exposed over the private admin endpoint. -type PrivateAdminAPI struct { +// AdminAPI is the collection of Ethereum full node related APIs for node +// administration. +type AdminAPI struct { eth *Ethereum } -// NewPrivateAdminAPI creates a new API definition for the full node private -// admin methods of the Ethereum service. -func NewPrivateAdminAPI(eth *Ethereum) *PrivateAdminAPI { - return &PrivateAdminAPI{eth: eth} +// NewAdminAPI creates a new instance of AdminAPI. +func NewAdminAPI(eth *Ethereum) *AdminAPI { + return &AdminAPI{eth: eth} } -// ExportChain exports the current blockchain into a local file. -func (api *PrivateAdminAPI) ExportChain(file string) (bool, error) { +// ExportChain exports the current blockchain into a local file, +// or a range of blocks if first and last are non-nil. +func (api *AdminAPI) ExportChain(file string, first *uint64, last *uint64) (bool, error) { + if first == nil && last != nil { + return false, errors.New("last cannot be specified without first") + } + if first != nil && last == nil { + head := api.eth.BlockChain().CurrentHeader().Number.Uint64() + last = &head + } + if _, err := os.Stat(file); err == nil { + // File already exists. Allowing overwrite could be a DoS vector, + // since the 'file' may point to arbitrary paths on the drive. + return false, errors.New("location would overwrite an existing file") + } // Make sure we can create the file to export into out, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) if err != nil { @@ -182,7 +174,11 @@ func (api *PrivateAdminAPI) ExportChain(file string) (bool, error) { } // Export the blockchain - if err := api.eth.BlockChain().Export(writer); err != nil { + if first != nil { + if err := api.eth.BlockChain().ExportN(writer, *first, *last); err != nil { + return false, err + } + } else if err := api.eth.BlockChain().Export(writer); err != nil { return false, err } return true, nil @@ -199,7 +195,7 @@ func hasAllBlocks(chain *core.BlockChain, bs []*types.Block) bool { } // ImportChain imports a blockchain from a local file. -func (api *PrivateAdminAPI) ImportChain(file string) (bool, error) { +func (api *AdminAPI) ImportChain(file string) (bool, error) { // Make sure the can access the file to import in, err := os.Open(file) if err != nil { @@ -247,30 +243,37 @@ func (api *PrivateAdminAPI) ImportChain(file string) (bool, error) { return true, nil } -// PublicDebugAPI is the collection of Ethereum full node APIs exposed -// over the public debugging endpoint. -type PublicDebugAPI struct { +// DebugAPI is the collection of Ethereum full node APIs for debugging the +// protocol. +type DebugAPI struct { eth *Ethereum } -// NewPublicDebugAPI creates a new API definition for the full node- -// related public debug methods of the Ethereum service. -func NewPublicDebugAPI(eth *Ethereum) *PublicDebugAPI { - return &PublicDebugAPI{eth: eth} +// NewDebugAPI creates a new DebugAPI instance. +func NewDebugAPI(eth *Ethereum) *DebugAPI { + return &DebugAPI{eth: eth} } // DumpBlock retrieves the entire state of the database at a given block. -func (api *PublicDebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error) { +func (api *DebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error) { + opts := &state.DumpConfig{ + OnlyWithAddresses: true, + Max: AccountRangeMaxResults, // Sanity limit over RPC + } if blockNr == rpc.PendingBlockNumber { // If we're dumping the pending state, we need to request // both the pending block as well as the pending state from // the miner and operate on those _, stateDb := api.eth.miner.Pending() - return stateDb.RawDump(false, false, true), nil + return stateDb.RawDump(opts), nil } var block *types.Block if blockNr == rpc.LatestBlockNumber { block = api.eth.blockchain.CurrentBlock() + } else if blockNr == rpc.FinalizedBlockNumber { + block = api.eth.blockchain.CurrentFinalizedBlock() + } else if blockNr == rpc.SafeBlockNumber { + block = api.eth.blockchain.CurrentSafeBlock() } else { block = api.eth.blockchain.GetBlockByNumber(uint64(blockNr)) } @@ -281,23 +284,11 @@ func (api *PublicDebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error if err != nil { return state.Dump{}, err } - return stateDb.RawDump(false, false, true), nil -} - -// PrivateDebugAPI is the collection of Ethereum full node APIs exposed over -// the private debugging endpoint. -type PrivateDebugAPI struct { - eth *Ethereum -} - -// NewPrivateDebugAPI creates a new API definition for the full node-related -// private debug methods of the Ethereum service. -func NewPrivateDebugAPI(eth *Ethereum) *PrivateDebugAPI { - return &PrivateDebugAPI{eth: eth} + return stateDb.RawDump(opts), nil } // Preimage is a debug API function that returns the preimage for a sha3 hash, if known. -func (api *PrivateDebugAPI) Preimage(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { +func (api *DebugAPI) Preimage(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { if preimage := rawdb.ReadPreimage(api.eth.ChainDb(), hash); preimage != nil { return preimage, nil } @@ -312,92 +303,92 @@ type BadBlockArgs struct { } // GetBadBlocks returns a list of the last 'bad blocks' that the client has seen on the network -// and returns them as a JSON list of block-hashes -func (api *PrivateDebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, error) { - blocks := api.eth.BlockChain().BadBlocks() - results := make([]*BadBlockArgs, len(blocks)) - - var err error - for i, block := range blocks { - results[i] = &BadBlockArgs{ - Hash: block.Hash(), - } +// and returns them as a JSON list of block hashes. +func (api *DebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, error) { + var ( + err error + blocks = rawdb.ReadAllBadBlocks(api.eth.chainDb) + results = make([]*BadBlockArgs, 0, len(blocks)) + ) + for _, block := range blocks { + var ( + blockRlp string + blockJSON map[string]interface{} + ) if rlpBytes, err := rlp.EncodeToBytes(block); err != nil { - results[i].RLP = err.Error() // Hacky, but hey, it works + blockRlp = err.Error() // Hacky, but hey, it works } else { - results[i].RLP = fmt.Sprintf("0x%x", rlpBytes) + blockRlp = fmt.Sprintf("%#x", rlpBytes) } - if results[i].Block, err = ethapi.RPCMarshalBlock(block, true, true); err != nil { - results[i].Block = map[string]interface{}{"error": err.Error()} + if blockJSON, err = ethapi.RPCMarshalBlock(block, true, true, api.eth.APIBackend.ChainConfig()); err != nil { + blockJSON = map[string]interface{}{"error": err.Error()} } + results = append(results, &BadBlockArgs{ + Hash: block.Hash(), + RLP: blockRlp, + Block: blockJSON, + }) } return results, nil } -// AccountRangeResult returns a mapping from the hash of an account addresses -// to its preimage. It will return the JSON null if no preimage is found. -// Since a query can return a limited amount of results, a "next" field is -// also present for paging. -type AccountRangeResult struct { - Accounts map[common.Hash]*common.Address `json:"accounts"` - Next common.Hash `json:"next"` -} - -func accountRange(st state.Trie, start *common.Hash, maxResults int) (AccountRangeResult, error) { - if start == nil { - start = &common.Hash{0} - } - it := trie.NewIterator(st.NodeIterator(start.Bytes())) - result := AccountRangeResult{Accounts: make(map[common.Hash]*common.Address), Next: common.Hash{}} - - if maxResults > 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 +// AccountRange enumerates all accounts in the given block and start point in paging request +func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hexutil.Bytes, maxResults int, nocode, nostorage, incompletes bool) (state.IteratorDump, 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 + if number, ok := blockNrOrHash.Number(); ok { + if number == rpc.PendingBlockNumber { + // If we're dumping the pending state, we need to request + // both the pending block as well as the pending state from + // the miner and operate on those + _, stateDb = api.eth.miner.Pending() + } else { + var block *types.Block + if number == rpc.LatestBlockNumber { + block = api.eth.blockchain.CurrentBlock() + } else if number == rpc.FinalizedBlockNumber { + block = api.eth.blockchain.CurrentFinalizedBlock() + } else if number == rpc.SafeBlockNumber { + block = api.eth.blockchain.CurrentSafeBlock() + } else { + block = api.eth.blockchain.GetBlockByNumber(uint64(number)) + } + if block == nil { + return state.IteratorDump{}, fmt.Errorf("block #%d not found", number) + } + stateDb, err = api.eth.BlockChain().StateAt(block.Root()) + if err != nil { + return state.IteratorDump{}, err + } } - } else { - _, _, statedb, err = api.computeTxEnv(block.Hash(), len(block.Transactions())-1, 0) + } else if hash, ok := blockNrOrHash.Hash(); ok { + block := api.eth.blockchain.GetBlockByHash(hash) + if block == nil { + return state.IteratorDump{}, fmt.Errorf("block %s not found", hash.Hex()) + } + stateDb, err = api.eth.BlockChain().StateAt(block.Root()) if err != nil { - return AccountRangeResult{}, err + return state.IteratorDump{}, err } + } else { + return state.IteratorDump{}, errors.New("either block number or block hash must be specified") } - trie, err := statedb.Database().OpenTrie(block.Header().Root) - if err != nil { - return AccountRangeResult{}, err + opts := &state.DumpConfig{ + SkipCode: nocode, + SkipStorage: nostorage, + OnlyWithAddresses: !incompletes, + Start: start, + Max: uint64(maxResults), } - - return accountRange(trie, start, maxResults) + if maxResults > AccountRangeMaxResults || maxResults <= 0 { + opts.Max = AccountRangeMaxResults + } + return stateDb.IteratorDump(opts), nil } // StorageRangeResult is the result of a debug_storageRangeAt API call. @@ -414,8 +405,13 @@ type storageEntry struct { } // StorageRangeAt returns the storage at the given block height and transaction index. -func (api *PrivateDebugAPI) StorageRangeAt(ctx context.Context, blockHash common.Hash, txIndex int, contractAddress common.Address, keyStart hexutil.Bytes, maxResult int) (StorageRangeResult, error) { - _, _, statedb, err := api.computeTxEnv(blockHash, txIndex, 0) +func (api *DebugAPI) StorageRangeAt(blockHash common.Hash, txIndex int, contractAddress common.Address, keyStart hexutil.Bytes, maxResult int) (StorageRangeResult, error) { + // Retrieve the block + block := api.eth.blockchain.GetBlockByHash(blockHash) + if block == nil { + return StorageRangeResult{}, fmt.Errorf("block %#x not found", blockHash) + } + _, _, statedb, err := api.eth.stateAtTransaction(block, txIndex, 0) if err != nil { return StorageRangeResult{}, err } @@ -454,7 +450,7 @@ func storageRangeAt(st state.Trie, start []byte, maxResult int) (StorageRangeRes // code hash, or storage hash. // // With one parameter, returns the list of accounts modified in the specified block. -func (api *PrivateDebugAPI) GetModifiedAccountsByNumber(startNum uint64, endNum *uint64) ([]common.Address, error) { +func (api *DebugAPI) GetModifiedAccountsByNumber(startNum uint64, endNum *uint64) ([]common.Address, error) { var startBlock, endBlock *types.Block startBlock = api.eth.blockchain.GetBlockByNumber(startNum) @@ -482,7 +478,7 @@ func (api *PrivateDebugAPI) GetModifiedAccountsByNumber(startNum uint64, endNum // code hash, or storage hash. // // With one parameter, returns the list of accounts modified in the specified block. -func (api *PrivateDebugAPI) GetModifiedAccountsByHash(startHash common.Hash, endHash *common.Hash) ([]common.Address, error) { +func (api *DebugAPI) GetModifiedAccountsByHash(startHash common.Hash, endHash *common.Hash) ([]common.Address, error) { var startBlock, endBlock *types.Block startBlock = api.eth.blockchain.GetBlockByHash(startHash) if startBlock == nil { @@ -504,17 +500,17 @@ func (api *PrivateDebugAPI) GetModifiedAccountsByHash(startHash common.Hash, end return api.getModifiedAccounts(startBlock, endBlock) } -func (api *PrivateDebugAPI) getModifiedAccounts(startBlock, endBlock *types.Block) ([]common.Address, error) { +func (api *DebugAPI) getModifiedAccounts(startBlock, endBlock *types.Block) ([]common.Address, error) { if startBlock.Number().Uint64() >= endBlock.Number().Uint64() { return nil, fmt.Errorf("start block height (%d) must be less than end block height (%d)", startBlock.Number().Uint64(), endBlock.Number().Uint64()) } triedb := api.eth.BlockChain().StateCache().TrieDB() - oldTrie, err := trie.NewSecure(startBlock.Root(), triedb) + oldTrie, err := trie.NewStateTrie(common.Hash{}, startBlock.Root(), triedb) if err != nil { return nil, err } - newTrie, err := trie.NewSecure(endBlock.Root(), triedb) + newTrie, err := trie.NewStateTrie(common.Hash{}, endBlock.Root(), triedb) if err != nil { return nil, err } @@ -531,3 +527,64 @@ func (api *PrivateDebugAPI) getModifiedAccounts(startBlock, endBlock *types.Bloc } return dirty, nil } + +// GetAccessibleState returns the first number where the node has accessible +// state on disk. Note this being the post-state of that block and the pre-state +// of the next block. +// The (from, to) parameters are the sequence of blocks to search, which can go +// either forwards or backwards +func (api *DebugAPI) GetAccessibleState(from, to rpc.BlockNumber) (uint64, error) { + db := api.eth.ChainDb() + var pivot uint64 + if p := rawdb.ReadLastPivotNumber(db); p != nil { + pivot = *p + log.Info("Found fast-sync pivot marker", "number", pivot) + } + var resolveNum = func(num rpc.BlockNumber) (uint64, error) { + // We don't have state for pending (-2), so treat it as latest + if num.Int64() < 0 { + block := api.eth.blockchain.CurrentBlock() + if block == nil { + return 0, fmt.Errorf("current block missing") + } + return block.NumberU64(), nil + } + return uint64(num.Int64()), nil + } + var ( + start uint64 + end uint64 + delta = int64(1) + lastLog time.Time + err error + ) + if start, err = resolveNum(from); err != nil { + return 0, err + } + if end, err = resolveNum(to); err != nil { + return 0, err + } + if start == end { + return 0, fmt.Errorf("from and to needs to be different") + } + if start > end { + delta = -1 + } + for i := int64(start); i != int64(end); i += delta { + if time.Since(lastLog) > 8*time.Second { + log.Info("Finding roots", "from", start, "to", end, "at", i) + lastLog = time.Now() + } + if i < int64(pivot) { + continue + } + h := api.eth.BlockChain().GetHeaderByNumber(uint64(i)) + if h == nil { + return 0, fmt.Errorf("missing header %d", i) + } + if ok, _ := api.eth.ChainDb().Has(h.Root[:]); ok { + return uint64(i), nil + } + } + return 0, errors.New("no state found") +} diff --git a/eth/api_backend.go b/eth/api_backend.go index 1db24fcf..00ecacc3 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -20,29 +20,32 @@ import ( "context" "errors" "math/big" - - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "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" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) // EthAPIBackend implements ethapi.Backend for full nodes type EthAPIBackend struct { - extRPCEnabled bool - eth *Ethereum - gpo *gasprice.Oracle + extRPCEnabled bool + allowUnprotectedTxs bool + eth *Ethereum + gpo *gasprice.Oracle } // ChainConfig returns the active chain configuration. @@ -55,7 +58,7 @@ func (b *EthAPIBackend) CurrentBlock() *types.Block { } func (b *EthAPIBackend) SetHead(number uint64) { - b.eth.protocolManager.downloader.Cancel() + b.eth.handler.downloader.Cancel() b.eth.blockchain.SetHead(number) } @@ -69,9 +72,40 @@ func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumb if number == rpc.LatestBlockNumber { return b.eth.blockchain.CurrentBlock().Header(), nil } + if number == rpc.FinalizedBlockNumber { + block := b.eth.blockchain.CurrentFinalizedBlock() + if block != nil { + return block.Header(), nil + } + return nil, errors.New("finalized block not found") + } + if number == rpc.SafeBlockNumber { + block := b.eth.blockchain.CurrentSafeBlock() + if block != nil { + return block.Header(), nil + } + return nil, errors.New("safe block not found") + } 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 } @@ -86,6 +120,12 @@ func (b *EthAPIBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumbe if number == rpc.LatestBlockNumber { return b.eth.blockchain.CurrentBlock(), nil } + if number == rpc.FinalizedBlockNumber { + return b.eth.blockchain.CurrentFinalizedBlock(), nil + } + if number == rpc.SafeBlockNumber { + return b.eth.blockchain.CurrentSafeBlock(), nil + } return b.eth.blockchain.GetBlockByNumber(uint64(number)), nil } @@ -93,6 +133,31 @@ func (b *EthAPIBackend) BlockByHash(ctx context.Context, hash common.Hash) (*typ return b.eth.blockchain.GetBlockByHash(hash), nil } +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) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + return b.eth.miner.PendingBlockAndReceipts() +} + func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { // Pending state is only known by the miner if number == rpc.PendingBlockNumber { @@ -111,38 +176,60 @@ func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.B return stateDb, header, err } +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) { return b.eth.blockchain.GetReceiptsByHash(hash), nil } -func (b *EthAPIBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) { - receipts := b.eth.blockchain.GetReceiptsByHash(hash) - if receipts == nil { - return nil, nil - } - logs := make([][]*types.Log, len(receipts)) - for i, receipt := range receipts { - logs[i] = receipt.Logs - } - return logs, nil +func (b *EthAPIBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, error) { + return rawdb.ReadLogs(b.eth.chainDb, hash, number, b.ChainConfig()), nil } -func (b *EthAPIBackend) GetTd(blockHash common.Hash) *big.Int { - return b.eth.blockchain.GetTdByHash(blockHash) +func (b *EthAPIBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { + if header := b.eth.blockchain.GetHeaderByHash(hash); header != nil { + return b.eth.blockchain.GetTd(hash, header.Number.Uint64()) + } + return nil } -func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) { - state.SetBalance(msg.From(), math.MaxBig256) +func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config) (*vm.EVM, func() error, error) { vmError := func() error { return nil } - - context := core.NewEVMContext(msg, header, b.eth.BlockChain(), nil) - return vm.NewEVM(context, state, b.eth.blockchain.Config(), *b.eth.blockchain.GetVMConfig()), vmError, nil + if vmConfig == nil { + vmConfig = b.eth.blockchain.GetVMConfig() + } + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(header, b.eth.BlockChain(), nil) + return vm.NewEVM(context, txContext, state, b.eth.blockchain.Config(), *vmConfig), vmError, nil } func (b *EthAPIBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { return b.eth.BlockChain().SubscribeRemovedLogsEvent(ch) } +func (b *EthAPIBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { + return b.eth.miner.SubscribePendingLogs(ch) +} + func (b *EthAPIBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { return b.eth.BlockChain().SubscribeChainEvent(ch) } @@ -164,10 +251,7 @@ func (b *EthAPIBackend) SendTx(ctx context.Context, signedTx *types.Transaction) } func (b *EthAPIBackend) GetPoolTransactions() (types.Transactions, error) { - pending, err := b.eth.txPool.Pending() - if err != nil { - return nil, err - } + pending := b.eth.txPool.Pending(false) var txs types.Transactions for _, batch := range pending { txs = append(txs, batch...) @@ -196,20 +280,28 @@ func (b *EthAPIBackend) TxPoolContent() (map[common.Address]types.Transactions, return b.eth.TxPool().Content() } +func (b *EthAPIBackend) TxPoolContentFrom(addr common.Address) (types.Transactions, types.Transactions) { + return b.eth.TxPool().ContentFrom(addr) +} + +func (b *EthAPIBackend) TxPool() *core.TxPool { + return b.eth.TxPool() +} + func (b *EthAPIBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { return b.eth.TxPool().SubscribeNewTxsEvent(ch) } -func (b *EthAPIBackend) Downloader() *downloader.Downloader { - return b.eth.Downloader() +func (b *EthAPIBackend) SyncProgress() ethereum.SyncProgress { + return b.eth.Downloader().Progress() } -func (b *EthAPIBackend) ProtocolVersion() int { - return b.eth.EthVersion() +func (b *EthAPIBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + return b.gpo.SuggestTipCap(ctx) } -func (b *EthAPIBackend) SuggestPrice(ctx context.Context) (*big.Int, error) { - return b.gpo.SuggestPrice(ctx) +func (b *EthAPIBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) { + return b.gpo.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles) } func (b *EthAPIBackend) ChainDb() ethdb.Database { @@ -228,10 +320,22 @@ func (b *EthAPIBackend) ExtRPCEnabled() bool { return b.extRPCEnabled } -func (b *EthAPIBackend) RPCGasCap() *big.Int { +func (b *EthAPIBackend) UnprotectedAllowed() bool { + return b.allowUnprotectedTxs +} + +func (b *EthAPIBackend) RPCGasCap() uint64 { return b.eth.config.RPCGasCap } +func (b *EthAPIBackend) RPCEVMTimeout() time.Duration { + return b.eth.config.RPCEVMTimeout +} + +func (b *EthAPIBackend) RPCTxFeeCap() float64 { + return b.eth.config.RPCTxFeeCap +} + func (b *EthAPIBackend) BloomStatus() (uint64, uint64) { sections, _, _ := b.eth.bloomIndexer.Sections() return params.BloomBitsBlocks, sections @@ -242,3 +346,27 @@ func (b *EthAPIBackend) ServiceFilter(ctx context.Context, session *bloombits.Ma go session.Multiplex(bloomRetrievalBatch, bloomRetrievalWait, b.eth.bloomRequests) } } + +func (b *EthAPIBackend) Engine() consensus.Engine { + return b.eth.engine +} + +func (b *EthAPIBackend) CurrentHeader() *types.Header { + return b.eth.blockchain.CurrentHeader() +} + +func (b *EthAPIBackend) Miner() *miner.Miner { + return b.eth.Miner() +} + +func (b *EthAPIBackend) StartMining(threads int) error { + return b.eth.StartMining(threads) +} + +func (b *EthAPIBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive, preferDisk bool) (*state.StateDB, error) { + return b.eth.StateAtBlock(block, reexec, base, checkLive, preferDisk) +} + +func (b *EthAPIBackend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) { + return b.eth.stateAtTransaction(block, txIndex, reexec) +} diff --git a/eth/api_test.go b/eth/api_test.go index ef0296dc..250591c1 100644 --- a/eth/api_test.go +++ b/eth/api_test.go @@ -24,47 +24,51 @@ import ( "sort" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/crypto" "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/crypto" + "github.com/ethereum/go-ethereum/trie" ) 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) - } +func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, start common.Hash, requestedNum int, expectedNum int) state.IteratorDump { + result := statedb.IteratorDump(&state.DumpConfig{ + SkipCode: true, + SkipStorage: true, + OnlyWithAddresses: false, + Start: start.Bytes(), + Max: uint64(requestedNum), + }) if len(result.Accounts) != expectedNum { - t.Fatalf("expected %d results. Got %d", expectedNum, len(result.Accounts)) + t.Fatalf("expected %d results, got %d", expectedNum, len(result.Accounts)) } - - for _, address := range result.Accounts { - if address == nil { - t.Fatalf("null address returned") + for address := range result.Accounts { + if address == (common.Address{}) { + t.Fatalf("empty address returned") } - if !statedb.Exist(*address) { + if !statedb.Exist(address) { t.Fatalf("account not found in state %s", address.Hex()) } } - return result } -type resultHash []*common.Hash +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) { + t.Parallel() + var ( - statedb = state.NewDatabase(rawdb.NewMemoryDatabase()) - state, _ = state.New(common.Hash{}, statedb) + statedb = state.NewDatabaseWithConfig(rawdb.NewMemoryDatabase(), &trie.Config{Preimages: true}) + state, _ = state.New(common.Hash{}, statedb, nil) addrs = [AccountRangeMaxResults * 2]common.Address{} m = map[common.Address]bool{} ) @@ -80,7 +84,6 @@ func TestAccountRange(t *testing.T) { m[addr] = true } } - state.Commit(true) root := state.IntermediateRoot(true) @@ -88,68 +91,40 @@ func TestAccountRange(t *testing.T) { 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") - + accountRangeTest(t, &trie, state, common.Hash{}, AccountRangeMaxResults/2, AccountRangeMaxResults/2) // 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) + firstResult := accountRangeTest(t, &trie, state, common.Hash{}, AccountRangeMaxResults, AccountRangeMaxResults) + secondResult := accountRangeTest(t, &trie, state, common.BytesToHash(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") - } + for addr1 := range firstResult.Accounts { + // If address is empty, then it makes no sense to compare + // them as they might be two different accounts. + if addr1 == (common.Address{}) { + continue + } + if _, duplicate := secondResult.Accounts[addr1]; duplicate { + t.Fatalf("pagination test failed: results should not overlap") } + hList = append(hList, crypto.Keccak256Hash(addr1.Bytes())) } - // 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 + missing, 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++ + missing++ } } - if innone != 0 { - t.Fatalf("%d hashes in the 'middle' set were neither in the first not the second set", innone) + if missing != 0 { + t.Fatalf("%d hashes in the 'middle' set were neither in the first not the second set", missing) } if infirst != AccountRangeMaxResults/2 { t.Fatalf("Imbalance in the number of first-test results: %d != %d", infirst, AccountRangeMaxResults/2) @@ -160,24 +135,21 @@ func TestAccountRange(t *testing.T) { } func TestEmptyAccountRange(t *testing.T) { + t.Parallel() + var ( - statedb = state.NewDatabase(rawdb.NewMemoryDatabase()) - state, _ = state.New(common.Hash{}, statedb) + statedb = state.NewDatabase(rawdb.NewMemoryDatabase()) + st, _ = state.New(common.Hash{}, statedb, nil) ) - - 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") { + st.Commit(true) + st.IntermediateRoot(true) + results := st.IteratorDump(&state.DumpConfig{ + SkipCode: true, + SkipStorage: true, + OnlyWithAddresses: true, + Max: uint64(AccountRangeMaxResults), + }) + if bytes.Equal(results.Next, (common.Hash{}).Bytes()) { t.Fatalf("Empty results should not return a second page") } if len(results.Accounts) != 0 { @@ -186,9 +158,11 @@ func TestEmptyAccountRange(t *testing.T) { } func TestStorageRangeAt(t *testing.T) { + t.Parallel() + // Create a state where account 0x010000... has a few storage entries. var ( - state, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + state, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) addr = common.Address{0x01} keys = []common.Hash{ // hashes of Keys of storage common.HexToHash("340dd630ad21bf010b4e676dbfa9ba9a02175262d1fa356232cfde6cb5b47ef2"), @@ -240,7 +214,7 @@ func TestStorageRangeAt(t *testing.T) { t.Error(err) } if !reflect.DeepEqual(result, test.want) { - t.Fatalf("wrong result for range 0x%x.., limit %d:\ngot %s\nwant %s", + t.Fatalf("wrong result for range %#x.., limit %d:\ngot %s\nwant %s", test.start, test.limit, dumper.Sdump(result), dumper.Sdump(&test.want)) } } diff --git a/eth/api_tracer.go b/eth/api_tracer.go deleted file mode 100644 index a88b685b..00000000 --- a/eth/api_tracer.go +++ /dev/null @@ -1,823 +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 eth - -import ( - "bufio" - "bytes" - "context" - "errors" - "fmt" - "io/ioutil" - "os" - "runtime" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/tracers" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" - "github.com/cryptoecc/ETH-ECC/trie" -) - -const ( - // defaultTraceTimeout is the amount of time a single transaction can execute - // by default before being forcefully aborted. - defaultTraceTimeout = 5 * time.Second - - // defaultTraceReexec is the number of blocks the tracer is willing to go back - // and reexecute to produce missing historical state necessary to run a specific - // trace. - defaultTraceReexec = uint64(128) -) - -// TraceConfig holds extra parameters to trace functions. -type TraceConfig struct { - *vm.LogConfig - Tracer *string - Timeout *string - Reexec *uint64 -} - -// StdTraceConfig holds extra parameters to standard-json trace functions. -type StdTraceConfig struct { - *vm.LogConfig - Reexec *uint64 - TxHash common.Hash -} - -// txTraceResult is the result of a single transaction trace. -type txTraceResult struct { - Result interface{} `json:"result,omitempty"` // Trace results produced by the tracer - Error string `json:"error,omitempty"` // Trace failure produced by the tracer -} - -// blockTraceTask represents a single block trace task when an entire chain is -// being traced. -type blockTraceTask struct { - statedb *state.StateDB // Intermediate state prepped for tracing - block *types.Block // Block to trace the transactions from - rootref common.Hash // Trie root reference held for this task - results []*txTraceResult // Trace results procudes by the task -} - -// blockTraceResult represets the results of tracing a single block when an entire -// chain is being traced. -type blockTraceResult struct { - Block hexutil.Uint64 `json:"block"` // Block number corresponding to this trace - Hash common.Hash `json:"hash"` // Block hash corresponding to this trace - Traces []*txTraceResult `json:"traces"` // Trace results produced by the task -} - -// txTraceTask represents a single transaction trace task when an entire block -// is being traced. -type txTraceTask struct { - statedb *state.StateDB // Intermediate state prepped for tracing - index int // Transaction offset in the block -} - -// TraceChain returns the structured logs created during the execution of EVM -// between two blocks (excluding start) and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceChain(ctx context.Context, start, end rpc.BlockNumber, config *TraceConfig) (*rpc.Subscription, error) { - // Fetch the block interval that we want to trace - var from, to *types.Block - - switch start { - case rpc.PendingBlockNumber: - from = api.eth.miner.PendingBlock() - case rpc.LatestBlockNumber: - from = api.eth.blockchain.CurrentBlock() - default: - from = api.eth.blockchain.GetBlockByNumber(uint64(start)) - } - switch end { - case rpc.PendingBlockNumber: - to = api.eth.miner.PendingBlock() - case rpc.LatestBlockNumber: - to = api.eth.blockchain.CurrentBlock() - default: - to = api.eth.blockchain.GetBlockByNumber(uint64(end)) - } - // Trace the chain if we've found all our blocks - if from == nil { - return nil, fmt.Errorf("starting block #%d not found", start) - } - if to == nil { - return nil, fmt.Errorf("end block #%d not found", end) - } - if from.Number().Cmp(to.Number()) >= 0 { - return nil, fmt.Errorf("end block (#%d) needs to come after start block (#%d)", end, start) - } - return api.traceChain(ctx, from, to, config) -} - -// traceChain configures a new tracer according to the provided configuration, and -// executes all the transactions contained within. The return value will be one item -// per transaction, dependent on the requested tracer. -func (api *PrivateDebugAPI) traceChain(ctx context.Context, start, end *types.Block, config *TraceConfig) (*rpc.Subscription, error) { - // Tracing a chain is a **long** operation, only do with subscriptions - notifier, supported := rpc.NotifierFromContext(ctx) - if !supported { - return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported - } - sub := notifier.CreateSubscription() - - // Ensure we have a valid starting state before doing any work - origin := start.NumberU64() - database := state.NewDatabaseWithCache(api.eth.ChainDb(), 16) // Chain tracing will probably start at genesis - - if number := start.NumberU64(); number > 0 { - start = api.eth.blockchain.GetBlock(start.ParentHash(), start.NumberU64()-1) - if start == nil { - return nil, fmt.Errorf("parent block #%d not found", number-1) - } - } - statedb, err := state.New(start.Root(), database) - if err != nil { - // If the starting state is missing, allow some number of blocks to be reexecuted - reexec := defaultTraceReexec - if config != nil && config.Reexec != nil { - reexec = *config.Reexec - } - // Find the most recent block that has the state available - for i := uint64(0); i < reexec; i++ { - start = api.eth.blockchain.GetBlock(start.ParentHash(), start.NumberU64()-1) - if start == nil { - break - } - if statedb, err = state.New(start.Root(), database); err == nil { - break - } - } - // If we still don't have the state available, bail out - if err != nil { - switch err.(type) { - case *trie.MissingNodeError: - return nil, errors.New("required historical state unavailable") - default: - return nil, err - } - } - } - // Execute all the transaction contained within the chain concurrently for each block - blocks := int(end.NumberU64() - origin) - - threads := runtime.NumCPU() - if threads > blocks { - threads = blocks - } - var ( - pend = new(sync.WaitGroup) - tasks = make(chan *blockTraceTask, threads) - results = make(chan *blockTraceTask, threads) - ) - for th := 0; th < threads; th++ { - pend.Add(1) - go func() { - defer pend.Done() - - // Fetch and execute the next block trace tasks - for task := range tasks { - signer := types.MakeSigner(api.eth.blockchain.Config(), task.block.Number()) - - // Trace all the transactions contained within - for i, tx := range task.block.Transactions() { - msg, _ := tx.AsMessage(signer) - vmctx := core.NewEVMContext(msg, task.block.Header(), api.eth.blockchain, nil) - - res, err := api.traceTx(ctx, msg, vmctx, task.statedb, config) - if err != nil { - task.results[i] = &txTraceResult{Error: err.Error()} - log.Warn("Tracing failed", "hash", tx.Hash(), "block", task.block.NumberU64(), "err", err) - break - } - // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect - task.statedb.Finalise(api.eth.blockchain.Config().IsEIP158(task.block.Number())) - task.results[i] = &txTraceResult{Result: res} - } - // Stream the result back to the user or abort on teardown - select { - case results <- task: - case <-notifier.Closed(): - return - } - } - }() - } - // Start a goroutine to feed all the blocks into the tracers - begin := time.Now() - - go func() { - var ( - logged time.Time - number uint64 - traced uint64 - failed error - proot common.Hash - ) - // Ensure everything is properly cleaned up on any exit path - defer func() { - close(tasks) - pend.Wait() - - switch { - case failed != nil: - log.Warn("Chain tracing failed", "start", start.NumberU64(), "end", end.NumberU64(), "transactions", traced, "elapsed", time.Since(begin), "err", failed) - case number < end.NumberU64(): - log.Warn("Chain tracing aborted", "start", start.NumberU64(), "end", end.NumberU64(), "abort", number, "transactions", traced, "elapsed", time.Since(begin)) - default: - log.Info("Chain tracing finished", "start", start.NumberU64(), "end", end.NumberU64(), "transactions", traced, "elapsed", time.Since(begin)) - } - close(results) - }() - // Feed all the blocks both into the tracer, as well as fast process concurrently - for number = start.NumberU64() + 1; number <= end.NumberU64(); number++ { - // Stop tracing if interruption was requested - select { - case <-notifier.Closed(): - return - default: - } - // Print progress logs if long enough time elapsed - if time.Since(logged) > 8*time.Second { - if number > origin { - nodes, imgs := database.TrieDB().Size() - log.Info("Tracing chain segment", "start", origin, "end", end.NumberU64(), "current", number, "transactions", traced, "elapsed", time.Since(begin), "memory", nodes+imgs) - } else { - log.Info("Preparing state for chain trace", "block", number, "start", origin, "elapsed", time.Since(begin)) - } - logged = time.Now() - } - // Retrieve the next block to trace - block := api.eth.blockchain.GetBlockByNumber(number) - if block == nil { - failed = fmt.Errorf("block #%d not found", number) - break - } - // Send the block over to the concurrent tracers (if not in the fast-forward phase) - if number > origin { - txs := block.Transactions() - - select { - case tasks <- &blockTraceTask{statedb: statedb.Copy(), block: block, rootref: proot, results: make([]*txTraceResult, len(txs))}: - case <-notifier.Closed(): - return - } - traced += uint64(len(txs)) - } - // Generate the next state snapshot fast without tracing - _, _, _, err := api.eth.blockchain.Processor().Process(block, statedb, vm.Config{}) - if err != nil { - failed = err - break - } - // Finalize the state so any modifications are written to the trie - root, err := statedb.Commit(api.eth.blockchain.Config().IsEIP158(block.Number())) - if err != nil { - failed = err - break - } - if err := statedb.Reset(root); err != nil { - failed = err - break - } - // Reference the trie twice, once for us, once for the tracer - database.TrieDB().Reference(root, common.Hash{}) - if number >= origin { - database.TrieDB().Reference(root, common.Hash{}) - } - // Dereference all past tries we ourselves are done working with - if proot != (common.Hash{}) { - database.TrieDB().Dereference(proot) - } - proot = root - - // TODO(karalabe): Do we need the preimages? Won't they accumulate too much? - } - }() - - // Keep reading the trace results and stream the to the user - go func() { - var ( - done = make(map[uint64]*blockTraceResult) - next = origin + 1 - ) - for res := range results { - // Queue up next received result - result := &blockTraceResult{ - Block: hexutil.Uint64(res.block.NumberU64()), - Hash: res.block.Hash(), - Traces: res.results, - } - done[uint64(result.Block)] = result - - // Dereference any paret tries held in memory by this task - database.TrieDB().Dereference(res.rootref) - - // Stream completed traces to the user, aborting on the first error - for result, ok := done[next]; ok; result, ok = done[next] { - if len(result.Traces) > 0 || next == end.NumberU64() { - notifier.Notify(sub.ID, result) - } - delete(done, next) - next++ - } - } - }() - return sub, nil -} - -// TraceBlockByNumber returns the structured logs created during the execution of -// EVM and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceBlockByNumber(ctx context.Context, number rpc.BlockNumber, config *TraceConfig) ([]*txTraceResult, error) { - // Fetch the block that we want to trace - var block *types.Block - - switch number { - case rpc.PendingBlockNumber: - block = api.eth.miner.PendingBlock() - case rpc.LatestBlockNumber: - block = api.eth.blockchain.CurrentBlock() - default: - block = api.eth.blockchain.GetBlockByNumber(uint64(number)) - } - // Trace the block if it was found - if block == nil { - return nil, fmt.Errorf("block #%d not found", number) - } - return api.traceBlock(ctx, block, config) -} - -// TraceBlockByHash returns the structured logs created during the execution of -// EVM and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceBlockByHash(ctx context.Context, hash common.Hash, config *TraceConfig) ([]*txTraceResult, error) { - block := api.eth.blockchain.GetBlockByHash(hash) - if block == nil { - return nil, fmt.Errorf("block %#x not found", hash) - } - return api.traceBlock(ctx, block, config) -} - -// TraceBlock returns the structured logs created during the execution of EVM -// and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceBlock(ctx context.Context, blob []byte, config *TraceConfig) ([]*txTraceResult, error) { - block := new(types.Block) - if err := rlp.Decode(bytes.NewReader(blob), block); err != nil { - return nil, fmt.Errorf("could not decode block: %v", err) - } - return api.traceBlock(ctx, block, config) -} - -// TraceBlockFromFile returns the structured logs created during the execution of -// EVM and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceBlockFromFile(ctx context.Context, file string, config *TraceConfig) ([]*txTraceResult, error) { - blob, err := ioutil.ReadFile(file) - if err != nil { - return nil, fmt.Errorf("could not read file: %v", err) - } - return api.TraceBlock(ctx, blob, config) -} - -// TraceBadBlockByHash returns the structured logs created during the execution of -// EVM against a block pulled from the pool of bad ones and returns them as a JSON -// object. -func (api *PrivateDebugAPI) TraceBadBlock(ctx context.Context, hash common.Hash, config *TraceConfig) ([]*txTraceResult, error) { - blocks := api.eth.blockchain.BadBlocks() - for _, block := range blocks { - if block.Hash() == hash { - return api.traceBlock(ctx, block, config) - } - } - return nil, fmt.Errorf("bad block %#x not found", hash) -} - -// StandardTraceBlockToFile dumps the structured logs created during the -// execution of EVM to the local file system and returns a list of files -// to the caller. -func (api *PrivateDebugAPI) StandardTraceBlockToFile(ctx context.Context, hash common.Hash, config *StdTraceConfig) ([]string, error) { - block := api.eth.blockchain.GetBlockByHash(hash) - if block == nil { - return nil, fmt.Errorf("block %#x not found", hash) - } - return api.standardTraceBlockToFile(ctx, block, config) -} - -// StandardTraceBadBlockToFile dumps the structured logs created during the -// execution of EVM against a block pulled from the pool of bad ones to the -// local file system and returns a list of files to the caller. -func (api *PrivateDebugAPI) StandardTraceBadBlockToFile(ctx context.Context, hash common.Hash, config *StdTraceConfig) ([]string, error) { - blocks := api.eth.blockchain.BadBlocks() - for _, block := range blocks { - if block.Hash() == hash { - return api.standardTraceBlockToFile(ctx, block, config) - } - } - return nil, fmt.Errorf("bad block %#x not found", hash) -} - -// traceBlock configures a new tracer according to the provided configuration, and -// executes all the transactions contained within. The return value will be one item -// per transaction, dependent on the requestd tracer. -func (api *PrivateDebugAPI) traceBlock(ctx context.Context, block *types.Block, config *TraceConfig) ([]*txTraceResult, error) { - // Create the parent state database - if err := api.eth.engine.VerifyHeader(api.eth.blockchain, block.Header(), true); err != nil { - return nil, err - } - parent := api.eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) - if parent == nil { - return nil, fmt.Errorf("parent %#x not found", block.ParentHash()) - } - reexec := defaultTraceReexec - if config != nil && config.Reexec != nil { - reexec = *config.Reexec - } - statedb, err := api.computeStateDB(parent, reexec) - if err != nil { - return nil, err - } - // Execute all the transaction contained within the block concurrently - var ( - signer = types.MakeSigner(api.eth.blockchain.Config(), block.Number()) - - txs = block.Transactions() - results = make([]*txTraceResult, len(txs)) - - pend = new(sync.WaitGroup) - jobs = make(chan *txTraceTask, len(txs)) - ) - threads := runtime.NumCPU() - if threads > len(txs) { - threads = len(txs) - } - for th := 0; th < threads; th++ { - pend.Add(1) - go func() { - defer pend.Done() - - // Fetch and execute the next transaction trace tasks - for task := range jobs { - msg, _ := txs[task.index].AsMessage(signer) - vmctx := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - - res, err := api.traceTx(ctx, msg, vmctx, task.statedb, config) - if err != nil { - results[task.index] = &txTraceResult{Error: err.Error()} - continue - } - results[task.index] = &txTraceResult{Result: res} - } - }() - } - // Feed the transactions into the tracers and return - var failed error - for i, tx := range txs { - // Send the trace task over for execution - jobs <- &txTraceTask{statedb: statedb.Copy(), index: i} - - // Generate the next state snapshot fast without tracing - msg, _ := tx.AsMessage(signer) - vmctx := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - - 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 - } - // Finalize the state so any modifications are written to the trie - // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect - statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) - } - close(jobs) - pend.Wait() - - // If execution failed in between, abort - if failed != nil { - return nil, failed - } - return results, nil -} - -// standardTraceBlockToFile configures a new tracer which uses standard JSON output, -// and traces either a full block or an individual transaction. The return value will -// be one filename per transaction traced. -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{}) { - if !containsTx(block, config.TxHash) { - return nil, fmt.Errorf("transaction %#x not found in block", config.TxHash) - } - } - // Create the parent state database - if err := api.eth.engine.VerifyHeader(api.eth.blockchain, block.Header(), true); err != nil { - return nil, err - } - parent := api.eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) - if parent == nil { - return nil, fmt.Errorf("parent %#x not found", block.ParentHash()) - } - reexec := defaultTraceReexec - if config != nil && config.Reexec != nil { - reexec = *config.Reexec - } - statedb, err := api.computeStateDB(parent, reexec) - if err != nil { - return nil, err - } - // Retrieve the tracing configurations, or use default values - var ( - logConfig vm.LogConfig - txHash common.Hash - ) - if config != nil { - if config.LogConfig != nil { - logConfig = *config.LogConfig - } - txHash = config.TxHash - } - logConfig.Debug = true - - // Execute transaction, either tracing all or just the requested one - var ( - signer = types.MakeSigner(api.eth.blockchain.Config(), block.Number()) - dumps []string - ) - for i, tx := range block.Transactions() { - // Prepare the trasaction for un-traced execution - var ( - msg, _ = tx.AsMessage(signer) - vmctx = core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - - vmConf vm.Config - dump *os.File - writer *bufio.Writer - err error - ) - // If the transaction needs tracing, swap out the configs - if tx.Hash() == txHash || txHash == (common.Hash{}) { - // Generate a unique temporary file to dump it into - prefix := fmt.Sprintf("block_%#x-%d-%#x-", block.Hash().Bytes()[:4], i, tx.Hash().Bytes()[:4]) - - dump, err = ioutil.TempFile(os.TempDir(), prefix) - if err != nil { - return nil, err - } - 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, writer), - EnablePreimageRecording: true, - } - } - // Execute the transaction and flush any traces to disk - 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()) - } - if err != nil { - return dumps, err - } - // Finalize the state so any modifications are written to the trie - // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect - statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) - - // If we've traced the transaction we were looking for, abort - if tx.Hash() == txHash { - break - } - } - 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. -func (api *PrivateDebugAPI) computeStateDB(block *types.Block, reexec uint64) (*state.StateDB, error) { - // If we have the state fully available, use that - statedb, err := api.eth.blockchain.StateAt(block.Root()) - if err == nil { - return statedb, nil - } - // Otherwise try to reexec blocks until we find a state or reach our limit - origin := block.NumberU64() - database := state.NewDatabaseWithCache(api.eth.ChainDb(), 16) - - for i := uint64(0); i < reexec; i++ { - block = api.eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) - if block == nil { - break - } - if statedb, err = state.New(block.Root(), database); err == nil { - break - } - } - if err != nil { - switch err.(type) { - case *trie.MissingNodeError: - return nil, fmt.Errorf("required historical state unavailable (reexec=%d)", reexec) - default: - return nil, err - } - } - // State was available at historical point, regenerate - var ( - start = time.Now() - logged time.Time - proot common.Hash - ) - for block.NumberU64() < origin { - // Print progress logs if long enough time elapsed - if time.Since(logged) > 8*time.Second { - log.Info("Regenerating historical state", "block", block.NumberU64()+1, "target", origin, "remaining", origin-block.NumberU64()-1, "elapsed", time.Since(start)) - logged = time.Now() - } - // Retrieve the next block to regenerate and process it - if block = api.eth.blockchain.GetBlockByNumber(block.NumberU64() + 1); block == nil { - return nil, fmt.Errorf("block #%d not found", block.NumberU64()+1) - } - _, _, _, err := api.eth.blockchain.Processor().Process(block, statedb, vm.Config{}) - if err != nil { - return nil, fmt.Errorf("processing block %d failed: %v", block.NumberU64(), err) - } - // Finalize the state so any modifications are written to the trie - root, err := statedb.Commit(api.eth.blockchain.Config().IsEIP158(block.Number())) - if err != nil { - return nil, err - } - if err := statedb.Reset(root); err != nil { - return nil, fmt.Errorf("state reset after block %d failed: %v", block.NumberU64(), err) - } - database.TrieDB().Reference(root, common.Hash{}) - if proot != (common.Hash{}) { - database.TrieDB().Dereference(proot) - } - proot = root - } - nodes, imgs := database.TrieDB().Size() - log.Info("Historical state regenerated", "block", block.NumberU64(), "elapsed", time.Since(start), "nodes", nodes, "preimages", imgs) - return statedb, nil -} - -// TraceTransaction returns the structured logs created during the execution of EVM -// and returns them as a JSON object. -func (api *PrivateDebugAPI) TraceTransaction(ctx context.Context, hash common.Hash, config *TraceConfig) (interface{}, error) { - // Retrieve the transaction and assemble its EVM context - tx, blockHash, _, index := rawdb.ReadTransaction(api.eth.ChainDb(), hash) - if tx == nil { - return nil, fmt.Errorf("transaction %#x not found", hash) - } - reexec := defaultTraceReexec - if config != nil && config.Reexec != nil { - reexec = *config.Reexec - } - msg, vmctx, statedb, err := api.computeTxEnv(blockHash, int(index), reexec) - if err != nil { - return nil, err - } - // Trace the transaction and return - return api.traceTx(ctx, msg, vmctx, statedb, config) -} - -// traceTx configures a new tracer according to the provided configuration, and -// executes the given message in the provided environment. The return value will -// be tracer dependent. -func (api *PrivateDebugAPI) traceTx(ctx context.Context, message core.Message, vmctx vm.Context, statedb *state.StateDB, config *TraceConfig) (interface{}, error) { - // Assemble the structured logger or the JavaScript tracer - var ( - tracer vm.Tracer - err error - ) - switch { - case config != nil && config.Tracer != nil: - // Define a meaningful timeout of a single transaction trace - timeout := defaultTraceTimeout - if config.Timeout != nil { - if timeout, err = time.ParseDuration(*config.Timeout); err != nil { - return nil, err - } - } - // Constuct the JavaScript tracer to execute with - if tracer, err = tracers.New(*config.Tracer); err != nil { - return nil, err - } - // Handle timeouts and RPC cancellations - deadlineCtx, cancel := context.WithTimeout(ctx, timeout) - go func() { - <-deadlineCtx.Done() - tracer.(*tracers.Tracer).Stop(errors.New("execution timeout")) - }() - defer cancel() - - case config == nil: - tracer = vm.NewStructLogger(nil) - - default: - tracer = vm.NewStructLogger(config.LogConfig) - } - // Run the transaction with tracing enabled. - 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 { - return nil, fmt.Errorf("tracing failed: %v", err) - } - // Depending on the tracer type, format and return the output - switch tracer := tracer.(type) { - case *vm.StructLogger: - return ðapi.ExecutionResult{ - Gas: gas, - Failed: failed, - ReturnValue: fmt.Sprintf("%x", ret), - StructLogs: ethapi.FormatLogs(tracer.StructLogs()), - }, nil - - case *tracers.Tracer: - return tracer.GetResult() - - default: - panic(fmt.Sprintf("bad tracer type %T", tracer)) - } -} - -// computeTxEnv returns the execution environment of a certain transaction. -func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, reexec uint64) (core.Message, vm.Context, *state.StateDB, error) { - // Create the parent state database - block := api.eth.blockchain.GetBlockByHash(blockHash) - if block == nil { - return nil, vm.Context{}, nil, fmt.Errorf("block %#x not found", blockHash) - } - parent := api.eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) - if parent == nil { - return nil, vm.Context{}, nil, fmt.Errorf("parent %#x not found", block.ParentHash()) - } - statedb, err := api.computeStateDB(parent, reexec) - 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.eth.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.eth.blockchain, nil) - if idx == txIndex { - return msg, context, statedb, nil - } - // Not yet the searched for transaction, execute on top of the current state - 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) - } - // Ensure any modifications are committed to the state - // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect - statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) - } - return nil, vm.Context{}, nil, fmt.Errorf("transaction index %d out of range for block %#x", txIndex, blockHash) -} diff --git a/eth/backend.go b/eth/backend.go index 1464e86d..dca96e4f 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -20,63 +20,58 @@ package eth import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/consensus/eccpow" "math/big" "runtime" "sync" "sync/atomic" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/clique" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/filters" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/miner" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" + "github.com/ethereum/go-ethereum/consensus/clique" + "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/pruner" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/internal/shutdowncheck" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) -type LesServer interface { - Start(srvr *p2p.Server) - Stop() - APIs() []rpc.API - Protocols() []p2p.Protocol - SetBloomBitsIndexer(bbIndexer *core.ChainIndexer) - SetContractBackend(bind.ContractBackend) -} +// Config contains the configuration options of the ETH protocol. +// Deprecated: use ethconfig.Config instead. +type Config = ethconfig.Config // Ethereum implements the Ethereum full node service. type Ethereum struct { - config *Config - - // Channel for shutting down the service - shutdownChan chan bool - - server *p2p.Server + config *ethconfig.Config // Handlers - txPool *core.TxPool - blockchain *core.BlockChain - protocolManager *ProtocolManager - lesServer LesServer + txPool *core.TxPool + blockchain *core.BlockChain + handler *handler + ethDialCandidates enode.Iterator + snapDialCandidates enode.Iterator + merger *consensus.Merger // DB interfaces chainDb ethdb.Database // Block chain database @@ -85,8 +80,9 @@ type Ethereum struct { engine consensus.Engine accountManager *accounts.Manager - bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests - bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports + bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests + bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports + closeBloomHandler chan struct{} APIBackend *EthAPIBackend @@ -95,27 +91,18 @@ type Ethereum struct { etherbase common.Address networkID uint64 - netRPCService *ethapi.PublicNetAPI + netRPCService *ethapi.NetAPI - lock sync.RWMutex // Protects the variadic fields (e.g. gas price and etherbase) -} + p2pServer *p2p.Server -func (s *Ethereum) AddLesServer(ls LesServer) { - s.lesServer = ls - ls.SetBloomBitsIndexer(s.bloomIndexer) -} + lock sync.RWMutex // Protects the variadic fields (e.g. gas price and etherbase) -// 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) - } + shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully } // New creates a new Ethereum object (including the // initialisation of the common Ethereum object) -func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { +func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { // Ensure configuration values are compatible and sane if config.SyncMode == downloader.LightSync { return nil, errors.New("can't run eth.Ethereum in light sync mode, use les.LightEthereum") @@ -124,38 +111,52 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { return nil, fmt.Errorf("invalid sync mode %d", config.SyncMode) } 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) + log.Warn("Sanitizing invalid miner gas price", "provided", config.Miner.GasPrice, "updated", ethconfig.Defaults.Miner.GasPrice) + config.Miner.GasPrice = new(big.Int).Set(ethconfig.Defaults.Miner.GasPrice) } if config.NoPruning && config.TrieDirtyCache > 0 { - config.TrieCleanCache += config.TrieDirtyCache + if config.SnapshotCache > 0 { + config.TrieCleanCache += config.TrieDirtyCache * 3 / 5 + config.SnapshotCache += config.TrieDirtyCache * 2 / 5 + } else { + 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 := ctx.OpenDatabaseWithFreezer("chaindata", config.DatabaseCache, config.DatabaseHandles, config.DatabaseFreezer, "eth/db/chaindata/") + chainDb, err := stack.OpenDatabaseWithFreezer("chaindata", config.DatabaseCache, config.DatabaseHandles, config.DatabaseFreezer, "eth/db/chaindata/", false) if err != nil { return nil, err } - chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul) - if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok { - return nil, genesisErr + if err := pruner.RecoverPruning(stack.ResolvePath(""), chainDb, stack.ResolvePath(config.TrieCleanCacheJournal)); err != nil { + log.Error("Failed to recover state", "error", err) + } + // Transfer mining-related config to the ethash config. + ethashConfig := config.Ethash + ethashConfig.NotifyFull = config.Miner.NotifyFull + cliqueConfig, err := core.LoadCliqueConfig(chainDb, config.Genesis) + if err != nil { + return nil, err } - log.Info("Initialised chain configuration", "config", chainConfig) + engine := ethconfig.CreateConsensusEngine(stack, ðashConfig, cliqueConfig, config.Miner.Notify, config.Miner.Noverify, chainDb) eth := &Ethereum{ - config: config, - chainDb: chainDb, - eventMux: ctx.EventMux, - accountManager: ctx.AccountManager, - engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.Miner.Notify, config.Miner.Noverify, chainDb), - shutdownChan: make(chan bool), - networkID: config.NetworkId, - gasPrice: config.Miner.GasPrice, - etherbase: config.Miner.Etherbase, - bloomRequests: make(chan chan *bloombits.Retrieval), - bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms), + config: config, + merger: consensus.NewMerger(chainDb), + chainDb: chainDb, + eventMux: stack.EventMux(), + accountManager: stack.AccountManager(), + engine: engine, + closeBloomHandler: make(chan struct{}), + networkID: config.NetworkId, + gasPrice: config.Miner.GasPrice, + etherbase: config.Miner.Etherbase, + bloomRequests: make(chan chan *bloombits.Retrieval), + bloomIndexer: core.NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms), + p2pServer: stack.Server(), + shutdownTracker: shutdowncheck.NewShutdownTracker(chainDb), } bcVersion := rawdb.ReadDatabaseVersion(chainDb) @@ -163,66 +164,109 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if bcVersion != nil { dbVer = fmt.Sprintf("%d", *bcVersion) } - log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId, "dbversion", dbVer) + log.Info("Initialising Ethereum protocol", "network", config.NetworkId, "dbversion", dbVer) if !config.SkipBcVersionCheck { 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", dbVer, "to", core.BlockChainVersion) + if bcVersion != nil { // only print warning on upgrade, not on init + log.Warn("Upgrade blockchain database version", "from", dbVer, "to", core.BlockChainVersion) + } rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } } var ( vmConfig = vm.Config{ EnablePreimageRecording: config.EnablePreimageRecording, - EWASMInterpreter: config.EWASMInterpreter, - EVMInterpreter: config.EVMInterpreter, } cacheConfig = &core.CacheConfig{ TrieCleanLimit: config.TrieCleanCache, + TrieCleanJournal: stack.ResolvePath(config.TrieCleanCacheJournal), + TrieCleanRejournal: config.TrieCleanCacheRejournal, TrieCleanNoPrefetch: config.NoPrefetch, TrieDirtyLimit: config.TrieDirtyCache, TrieDirtyDisabled: config.NoPruning, TrieTimeLimit: config.TrieTimeout, + SnapshotLimit: config.SnapshotCache, + Preimages: config.Preimages, } ) - eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, chainConfig, eth.engine, vmConfig, eth.shouldPreserve) + // Override the chain config with provided settings. + var overrides core.ChainOverrides + if config.OverrideTerminalTotalDifficulty != nil { + overrides.OverrideTerminalTotalDifficulty = config.OverrideTerminalTotalDifficulty + } + if config.OverrideTerminalTotalDifficultyPassed != nil { + overrides.OverrideTerminalTotalDifficultyPassed = config.OverrideTerminalTotalDifficultyPassed + } + eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, config.Genesis, &overrides, eth.engine, vmConfig, eth.shouldPreserve, &config.TxLookupLimit) if err != nil { return nil, err } - // 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) - eth.blockchain.SetHead(compat.RewindTo) - rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig) - } eth.bloomIndexer.Start(eth.blockchain) if config.TxPool.Journal != "" { - config.TxPool.Journal = ctx.ResolvePath(config.TxPool.Journal) + config.TxPool.Journal = stack.ResolvePath(config.TxPool.Journal) } - eth.txPool = core.NewTxPool(config.TxPool, chainConfig, eth.blockchain) + eth.txPool = core.NewTxPool(config.TxPool, eth.blockchain.Config(), eth.blockchain) // Permit the downloader to use the trie cache allowance during fast sync - cacheLimit := cacheConfig.TrieCleanLimit + cacheConfig.TrieDirtyLimit + cacheLimit := cacheConfig.TrieCleanLimit + cacheConfig.TrieDirtyLimit + cacheConfig.SnapshotLimit 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 { + checkpoint = params.TrustedCheckpoints[eth.blockchain.Genesis().Hash()] + } + if eth.handler, err = newHandler(&handlerConfig{ + Database: chainDb, + Chain: eth.blockchain, + TxPool: eth.txPool, + Merger: eth.merger, + Network: config.NetworkId, + Sync: config.SyncMode, + BloomCache: uint64(cacheLimit), + EventMux: eth.eventMux, + Checkpoint: checkpoint, + RequiredBlocks: config.RequiredBlocks, + }); err != nil { return nil, err } - eth.miner = miner.New(eth, &config.Miner, chainConfig, eth.EventMux(), eth.engine, eth.isLocalBlock) + + eth.miner = miner.New(eth, &config.Miner, eth.blockchain.Config(), eth.EventMux(), eth.engine, eth.isLocalBlock) eth.miner.SetExtra(makeExtraData(config.Miner.ExtraData)) - eth.APIBackend = &EthAPIBackend{ctx.ExtRPCEnabled(), eth, nil} + eth.APIBackend = &EthAPIBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, eth, nil} + if eth.APIBackend.allowUnprotectedTxs { + log.Info("Unprotected transactions allowed") + } gpoParams := config.GPO if gpoParams.Default == nil { gpoParams.Default = config.Miner.GasPrice } eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams) + // Setup DNS discovery iterators. + dnsclient := dnsdisc.NewClient(dnsdisc.Config{}) + eth.ethDialCandidates, err = dnsclient.NewIterator(eth.config.EthDiscoveryURLs...) + if err != nil { + return nil, err + } + eth.snapDialCandidates, err = dnsclient.NewIterator(eth.config.SnapDiscoveryURLs...) + if err != nil { + return nil, err + } + + // Start the RPC service + eth.netRPCService = ethapi.NewNetAPI(eth.p2pServer, config.NetworkId) + + // Register the backend on the node + stack.RegisterAPIs(eth.APIs()) + stack.RegisterProtocols(eth.Protocols()) + stack.RegisterLifecycle(eth) + + // Successful startup; push a marker and check previous unclean shutdowns. + eth.shutdownTracker.MarkStartup() + return eth, nil } @@ -243,103 +287,34 @@ func makeExtraData(extra []byte) []byte { return extra } -// 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 - if chainConfig.Clique != nil { - return clique.New(chainConfig.Clique, db) - } else if chainConfig.EccPoW != nil { - engine := eccpow.New(eccpow.Config{}, notify, noverify) - engine.SetThreads(-1) - return engine - } - // Otherwise assume proof-of-work - switch config.PowMode { - case ethash.ModeFake: - log.Warn("Ethash used in fake mode") - return ethash.NewFaker() - case ethash.ModeTest: - log.Warn("Ethash used in test mode") - return ethash.NewTester(nil, noverify) - case ethash.ModeShared: - log.Warn("Ethash used in shared mode") - return ethash.NewShared() - default: - engine := ethash.New(ethash.Config{ - CacheDir: ctx.ResolvePath(config.CacheDir), - CachesInMem: config.CachesInMem, - CachesOnDisk: config.CachesOnDisk, - DatasetDir: config.DatasetDir, - DatasetsInMem: config.DatasetsInMem, - DatasetsOnDisk: config.DatasetsOnDisk, - }, notify, noverify) - engine.SetThreads(-1) // Disable CPU mining - return engine - } -} - // APIs return the collection of RPC services the ethereum package offers. // NOTE, some of these services probably need to be moved to somewhere else. 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{ { Namespace: "eth", - Version: "1.0", - Service: NewPublicEthereumAPI(s), - Public: true, - }, { - Namespace: "eth", - Version: "1.0", - Service: NewPublicMinerAPI(s), - Public: true, - }, { - Namespace: "eth", - Version: "1.0", - Service: downloader.NewPublicDownloaderAPI(s.protocolManager.downloader, s.eventMux), - Public: true, + Service: NewEthereumAPI(s), }, { Namespace: "miner", - Version: "1.0", - Service: NewPrivateMinerAPI(s), - Public: false, + Service: NewMinerAPI(s), }, { Namespace: "eth", - Version: "1.0", - Service: filters.NewPublicFilterAPI(s.APIBackend, false), - Public: true, + Service: downloader.NewDownloaderAPI(s.handler.downloader, s.eventMux), }, { Namespace: "admin", - Version: "1.0", - Service: NewPrivateAdminAPI(s), + Service: NewAdminAPI(s), }, { Namespace: "debug", - Version: "1.0", - Service: NewPublicDebugAPI(s), - Public: true, - }, { - Namespace: "debug", - Version: "1.0", - Service: NewPrivateDebugAPI(s), + Service: NewDebugAPI(s), }, { Namespace: "net", - Version: "1.0", Service: s.netRPCService, - Public: true, }, }...) } @@ -376,10 +351,10 @@ func (s *Ethereum) Etherbase() (eb common.Address, err error) { // // We regard two types of accounts as local miner account: etherbase // and accounts specified via `txpool.locals` flag. -func (s *Ethereum) isLocalBlock(block *types.Block) bool { - author, err := s.engine.Author(block.Header()) +func (s *Ethereum) isLocalBlock(header *types.Header) bool { + author, err := s.engine.Author(header) if err != nil { - log.Warn("Failed to retrieve block author", "number", block.NumberU64(), "hash", block.Hash(), "err", err) + log.Warn("Failed to retrieve block author", "number", header.Number.Uint64(), "hash", header.Hash(), "err", err) return false } // Check whether the given address is etherbase. @@ -402,7 +377,7 @@ func (s *Ethereum) isLocalBlock(block *types.Block) bool { // shouldPreserve checks whether we should preserve the given block // during the chain reorg depending on whether the author of block // is a local account. -func (s *Ethereum) shouldPreserve(block *types.Block) bool { +func (s *Ethereum) shouldPreserve(header *types.Header) bool { // The reason we need to disable the self-reorg preserving for clique // is it can be probable to introduce a deadlock. // @@ -422,7 +397,7 @@ func (s *Ethereum) shouldPreserve(block *types.Block) bool { if _, ok := s.engine.(*clique.Clique); ok { return false } - return s.isLocalBlock(block) + return s.isLocalBlock(header) } // SetEtherbase sets the mining reward address. @@ -463,17 +438,25 @@ func (s *Ethereum) StartMining(threads int) error { log.Error("Cannot start mining without etherbase", "err", err) return fmt.Errorf("etherbase missing: %v", err) } - if clique, ok := s.engine.(*clique.Clique); ok { + var cli *clique.Clique + if c, ok := s.engine.(*clique.Clique); ok { + cli = c + } else if cl, ok := s.engine.(*beacon.Beacon); ok { + if c, ok := cl.InnerEngine().(*clique.Clique); ok { + cli = c + } + } + if cli != nil { wallet, err := s.accountManager.Find(accounts.Account{Address: eb}) if wallet == nil || err != nil { log.Error("Etherbase account unavailable locally", "err", err) return fmt.Errorf("signer missing: %v", err) } - clique.Authorize(eb, wallet.SignData) + cli.Authorize(eb, wallet.SignData) } // If mining is started, we can disable the transaction rejection mechanism // introduced to speed sync times. - atomic.StoreUint32(&s.protocolManager.acceptTxs, 1) + atomic.StoreUint32(&s.handler.acceptTxs, 1) go s.miner.Start(eb) } @@ -504,68 +487,72 @@ 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(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) Downloader() *downloader.Downloader { return s.handler.downloader } +func (s *Ethereum) Synced() bool { return atomic.LoadUint32(&s.handler.acceptTxs) == 1 } +func (s *Ethereum) SetSynced() { atomic.StoreUint32(&s.handler.acceptTxs, 1) } func (s *Ethereum) ArchiveMode() bool { return s.config.NoPruning } +func (s *Ethereum) BloomIndexer() *core.ChainIndexer { return s.bloomIndexer } +func (s *Ethereum) Merger() *consensus.Merger { return s.merger } +func (s *Ethereum) SyncMode() downloader.SyncMode { + mode, _ := s.handler.chainSync.modeAndLocalHead() + return mode +} -// Protocols implements node.Service, returning all the currently configured +// Protocols returns all the currently configured // network protocols to start. func (s *Ethereum) Protocols() []p2p.Protocol { - protos := make([]p2p.Protocol, len(ProtocolVersions)) - for i, vsn := range ProtocolVersions { - protos[i] = s.protocolManager.makeProtocol(vsn) - protos[i].Attributes = []enr.Entry{s.currentEthEntry()} - } - if s.lesServer != nil { - protos = append(protos, s.lesServer.Protocols()...) + protos := eth.MakeProtocols((*ethHandler)(s.handler), s.networkID, s.ethDialCandidates) + if s.config.SnapshotCache > 0 { + protos = append(protos, snap.MakeProtocols((*snapHandler)(s.handler), s.snapDialCandidates)...) } return protos } -// Start implements node.Service, starting all internal goroutines needed by the +// Start implements node.Lifecycle, starting all internal goroutines needed by the // Ethereum protocol implementation. -func (s *Ethereum) Start(srvr *p2p.Server) error { - s.startEthEntryUpdate(srvr.LocalNode()) +func (s *Ethereum) Start() error { + eth.StartENRUpdater(s.blockchain, s.p2pServer.LocalNode()) // Start the bloom bits servicing goroutines s.startBloomHandlers(params.BloomBitsBlocks) - // Start the RPC service - s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.NetVersion()) + // Regularly update shutdown marker + s.shutdownTracker.Start() // Figure out a max peers count based on the server limits - maxPeers := srvr.MaxPeers + maxPeers := s.p2pServer.MaxPeers if s.config.LightServ > 0 { - if s.config.LightPeers >= srvr.MaxPeers { - return fmt.Errorf("invalid peer config: light peer count (%d) >= total peer count (%d)", s.config.LightPeers, srvr.MaxPeers) + if s.config.LightPeers >= s.p2pServer.MaxPeers { + return fmt.Errorf("invalid peer config: light peer count (%d) >= total peer count (%d)", s.config.LightPeers, s.p2pServer.MaxPeers) } maxPeers -= s.config.LightPeers } // Start the networking layer and the light server if requested - s.protocolManager.Start(maxPeers) - if s.lesServer != nil { - s.lesServer.Start(srvr) - } + s.handler.Start(maxPeers) return nil } -// Stop implements node.Service, terminating all internal goroutines used by the +// Stop implements node.Lifecycle, terminating all internal goroutines used by the // Ethereum protocol. func (s *Ethereum) Stop() error { + // Stop all the peer-related stuff first. + s.ethDialCandidates.Close() + s.snapDialCandidates.Close() + s.handler.Stop() + + // Then stop everything else. s.bloomIndexer.Close() + close(s.closeBloomHandler) + s.txPool.Stop() + s.miner.Close() s.blockchain.Stop() s.engine.Close() - s.protocolManager.Stop() - if s.lesServer != nil { - s.lesServer.Stop() - } - s.txPool.Stop() - s.miner.Stop() - s.eventMux.Stop() + + // Clean shutdown marker as the last thing before closing db + s.shutdownTracker.Stop() s.chainDb.Close() - close(s.shutdownChan) + s.eventMux.Stop() + return nil } diff --git a/eth/bloombits.go b/eth/bloombits.go index cc865dc4..0cb7050d 100644 --- a/eth/bloombits.go +++ b/eth/bloombits.go @@ -17,16 +17,10 @@ package eth import ( - "context" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/core/rawdb" ) const ( @@ -54,7 +48,7 @@ func (eth *Ethereum) startBloomHandlers(sectionSize uint64) { go func() { for { select { - case <-eth.shutdownChan: + case <-eth.closeBloomHandler: return case request := <-eth.bloomRequests: @@ -78,61 +72,3 @@ func (eth *Ethereum) startBloomHandlers(sectionSize uint64) { }() } } - -const ( - // bloomThrottling is the time to wait between processing two consecutive index - // sections. It's useful during chain upgrades to prevent disk overload. - bloomThrottling = 100 * time.Millisecond -) - -// BloomIndexer implements a core.ChainIndexer, building up a rotated bloom bits index -// for the Ethereum header bloom filters, permitting blazing fast filtering. -type BloomIndexer struct { - size uint64 // section size to generate bloombits for - db ethdb.Database // database instance to write index data and metadata into - gen *bloombits.Generator // generator to rotate the bloom bits crating the bloom index - section uint64 // Section is the section number being processed currently - head common.Hash // Head is the hash of the last header processed -} - -// NewBloomIndexer returns a chain indexer that generates bloom bits data for the -// canonical chain for fast logs filtering. -func NewBloomIndexer(db ethdb.Database, size, confirms uint64) *core.ChainIndexer { - backend := &BloomIndexer{ - db: db, - size: size, - } - table := rawdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) - - return core.NewChainIndexer(db, table, backend, size, confirms, bloomThrottling, "bloombits") -} - -// Reset implements core.ChainIndexerBackend, starting a new bloombits index -// section. -func (b *BloomIndexer) Reset(ctx context.Context, section uint64, lastSectionHead common.Hash) error { - gen, err := bloombits.NewGenerator(uint(b.size)) - b.gen, b.section, b.head = gen, section, common.Hash{} - return err -} - -// Process implements core.ChainIndexerBackend, adding a new header's bloom into -// the index. -func (b *BloomIndexer) Process(ctx context.Context, header *types.Header) error { - b.gen.AddBloom(uint(header.Number.Uint64()-b.section*b.size), header.Bloom) - b.head = header.Hash() - return nil -} - -// Commit implements core.ChainIndexerBackend, finalizing the bloom section and -// writing it out into the database. -func (b *BloomIndexer) Commit() error { - batch := b.db.NewBatch() - for i := 0; i < types.BloomBitLength; i++ { - bits, err := b.gen.Bitset(uint(i)) - if err != nil { - return err - } - rawdb.WriteBloomBits(batch, uint(i), b.section, b.head, bitutil.CompressBytes(bits)) - } - return batch.Write() -} diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go new file mode 100644 index 00000000..5ab61524 --- /dev/null +++ b/eth/catalyst/api.go @@ -0,0 +1,674 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package catalyst implements the temporary eth1/eth2 RPC integration. +package catalyst + +import ( + "crypto/sha256" + "encoding/binary" + "errors" + "fmt" + "math/big" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/beacon" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/rpc" +) + +// Register adds the engine API to the full node. +func Register(stack *node.Node, backend *eth.Ethereum) error { + log.Warn("Engine API enabled", "protocol", "eth") + stack.RegisterAPIs([]rpc.API{ + { + Namespace: "engine", + Service: NewConsensusAPI(backend), + Authenticated: true, + }, + }) + return nil +} + +const ( + // invalidBlockHitEviction is the number of times an invalid block can be + // referenced in forkchoice update or new payload before it is attempted + // to be reprocessed again. + invalidBlockHitEviction = 128 + + // invalidTipsetsCap is the max number of recent block hashes tracked that + // have lead to some bad ancestor block. It's just an OOM protection. + invalidTipsetsCap = 512 + + // beaconUpdateStartupTimeout is the time to wait for a beacon client to get + // attached before starting to issue warnings. + beaconUpdateStartupTimeout = 30 * time.Second + + // beaconUpdateExchangeTimeout is the max time allowed for a beacon client to + // do a transition config exchange before it's considered offline and the user + // is warned. + beaconUpdateExchangeTimeout = 2 * time.Minute + + // beaconUpdateConsensusTimeout is the max time allowed for a beacon client + // to send a consensus update before it's considered offline and the user is + // warned. + beaconUpdateConsensusTimeout = 30 * time.Second + + // beaconUpdateWarnFrequency is the frequency at which to warn the user that + // the beacon client is offline. + beaconUpdateWarnFrequency = 5 * time.Minute +) + +type ConsensusAPI struct { + eth *eth.Ethereum + + remoteBlocks *headerQueue // Cache of remote payloads received + localBlocks *payloadQueue // Cache of local payloads generated + + // The forkchoice update and new payload method require us to return the + // latest valid hash in an invalid chain. To support that return, we need + // to track historical bad blocks as well as bad tipsets in case a chain + // is constantly built on it. + // + // There are a few important caveats in this mechanism: + // - The bad block tracking is ephemeral, in-memory only. We must never + // persist any bad block information to disk as a bug in Geth could end + // up blocking a valid chain, even if a later Geth update would accept + // it. + // - Bad blocks will get forgotten after a certain threshold of import + // attempts and will be retried. The rationale is that if the network + // really-really-really tries to feed us a block, we should give it a + // new chance, perhaps us being racey instead of the block being legit + // bad (this happened in Geth at a point with import vs. pending race). + // - Tracking all the blocks built on top of the bad one could be a bit + // problematic, so we will only track the head chain segment of a bad + // chain to allow discarding progressing bad chains and side chains, + // without tracking too much bad data. + invalidBlocksHits map[common.Hash]int // Emhemeral cache to track invalid blocks and their hit count + invalidTipsets map[common.Hash]*types.Header // Ephemeral cache to track invalid tipsets and their bad ancestor + invalidLock sync.Mutex // Protects the invalid maps from concurrent access + + // Geth can appear to be stuck or do strange things if the beacon client is + // offline or is sending us strange data. Stash some update stats away so + // that we can warn the user and not have them open issues on our tracker. + lastTransitionUpdate time.Time + lastTransitionLock sync.Mutex + lastForkchoiceUpdate time.Time + lastForkchoiceLock sync.Mutex + lastNewPayloadUpdate time.Time + lastNewPayloadLock sync.Mutex + + forkchoiceLock sync.Mutex // Lock for the forkChoiceUpdated method +} + +// NewConsensusAPI creates a new consensus api for the given backend. +// The underlying blockchain needs to have a valid terminal total difficulty set. +func NewConsensusAPI(eth *eth.Ethereum) *ConsensusAPI { + if eth.BlockChain().Config().TerminalTotalDifficulty == nil { + log.Warn("Engine API started but chain not configured for merge yet") + } + api := &ConsensusAPI{ + eth: eth, + remoteBlocks: newHeaderQueue(), + localBlocks: newPayloadQueue(), + invalidBlocksHits: make(map[common.Hash]int), + invalidTipsets: make(map[common.Hash]*types.Header), + } + eth.Downloader().SetBadBlockCallback(api.setInvalidAncestor) + go api.heartbeat() + + return api +} + +// ForkchoiceUpdatedV1 has several responsibilities: +// If the method is called with an empty head block: +// we return success, which can be used to check if the engine API is enabled +// If the total difficulty was not reached: +// we return INVALID +// If the finalizedBlockHash is set: +// we check if we have the finalizedBlockHash in our db, if not we start a sync +// We try to set our blockchain to the headBlock +// If there are payloadAttributes: +// we try to assemble a block with the payloadAttributes and return its payloadID +func (api *ConsensusAPI) ForkchoiceUpdatedV1(update beacon.ForkchoiceStateV1, payloadAttributes *beacon.PayloadAttributesV1) (beacon.ForkChoiceResponse, error) { + api.forkchoiceLock.Lock() + defer api.forkchoiceLock.Unlock() + + log.Trace("Engine API request received", "method", "ForkchoiceUpdated", "head", update.HeadBlockHash, "finalized", update.FinalizedBlockHash, "safe", update.SafeBlockHash) + if update.HeadBlockHash == (common.Hash{}) { + log.Warn("Forkchoice requested update to zero hash") + return beacon.STATUS_INVALID, nil // TODO(karalabe): Why does someone send us this? + } + // Stash away the last update to warn the user if the beacon client goes offline + api.lastForkchoiceLock.Lock() + api.lastForkchoiceUpdate = time.Now() + api.lastForkchoiceLock.Unlock() + + // Check whether we have the block yet in our database or not. If not, we'll + // need to either trigger a sync, or to reject this forkchoice update for a + // reason. + block := api.eth.BlockChain().GetBlockByHash(update.HeadBlockHash) + if block == nil { + // If this block was previously invalidated, keep rejecting it here too + if res := api.checkInvalidAncestor(update.HeadBlockHash, update.HeadBlockHash); res != nil { + return beacon.ForkChoiceResponse{PayloadStatus: *res, PayloadID: nil}, nil + } + // If the head hash is unknown (was not given to us in a newPayload request), + // we cannot resolve the header, so not much to do. This could be extended in + // the future to resolve from the `eth` network, but it's an unexpected case + // that should be fixed, not papered over. + header := api.remoteBlocks.get(update.HeadBlockHash) + if header == nil { + log.Warn("Forkchoice requested unknown head", "hash", update.HeadBlockHash) + return beacon.STATUS_SYNCING, nil + } + // Header advertised via a past newPayload request. Start syncing to it. + // Before we do however, make sure any legacy sync in switched off so we + // don't accidentally have 2 cycles running. + if merger := api.eth.Merger(); !merger.TDDReached() { + merger.ReachTTD() + api.eth.Downloader().Cancel() + } + log.Info("Forkchoice requested sync to new head", "number", header.Number, "hash", header.Hash()) + if err := api.eth.Downloader().BeaconSync(api.eth.SyncMode(), header); err != nil { + return beacon.STATUS_SYNCING, err + } + return beacon.STATUS_SYNCING, nil + } + // Block is known locally, just sanity check that the beacon client does not + // attempt to push us back to before the merge. + if block.Difficulty().BitLen() > 0 || block.NumberU64() == 0 { + var ( + td = api.eth.BlockChain().GetTd(update.HeadBlockHash, block.NumberU64()) + ptd = api.eth.BlockChain().GetTd(block.ParentHash(), block.NumberU64()-1) + ttd = api.eth.BlockChain().Config().TerminalTotalDifficulty + ) + if td == nil || (block.NumberU64() > 0 && ptd == nil) { + log.Error("TDs unavailable for TTD check", "number", block.NumberU64(), "hash", update.HeadBlockHash, "td", td, "parent", block.ParentHash(), "ptd", ptd) + return beacon.STATUS_INVALID, errors.New("TDs unavailable for TDD check") + } + if td.Cmp(ttd) < 0 { + log.Error("Refusing beacon update to pre-merge", "number", block.NumberU64(), "hash", update.HeadBlockHash, "diff", block.Difficulty(), "age", common.PrettyAge(time.Unix(int64(block.Time()), 0))) + return beacon.ForkChoiceResponse{PayloadStatus: beacon.INVALID_TERMINAL_BLOCK, PayloadID: nil}, nil + } + if block.NumberU64() > 0 && ptd.Cmp(ttd) >= 0 { + log.Error("Parent block is already post-ttd", "number", block.NumberU64(), "hash", update.HeadBlockHash, "diff", block.Difficulty(), "age", common.PrettyAge(time.Unix(int64(block.Time()), 0))) + return beacon.ForkChoiceResponse{PayloadStatus: beacon.INVALID_TERMINAL_BLOCK, PayloadID: nil}, nil + } + } + valid := func(id *beacon.PayloadID) beacon.ForkChoiceResponse { + return beacon.ForkChoiceResponse{ + PayloadStatus: beacon.PayloadStatusV1{Status: beacon.VALID, LatestValidHash: &update.HeadBlockHash}, + PayloadID: id, + } + } + if rawdb.ReadCanonicalHash(api.eth.ChainDb(), block.NumberU64()) != update.HeadBlockHash { + // Block is not canonical, set head. + if latestValid, err := api.eth.BlockChain().SetCanonical(block); err != nil { + return beacon.ForkChoiceResponse{PayloadStatus: beacon.PayloadStatusV1{Status: beacon.INVALID, LatestValidHash: &latestValid}}, err + } + } else if api.eth.BlockChain().CurrentBlock().Hash() == update.HeadBlockHash { + // If the specified head matches with our local head, do nothing and keep + // generating the payload. It's a special corner case that a few slots are + // missing and we are requested to generate the payload in slot. + } else { + // If the head block is already in our canonical chain, the beacon client is + // probably resyncing. Ignore the update. + log.Info("Ignoring beacon update to old head", "number", block.NumberU64(), "hash", update.HeadBlockHash, "age", common.PrettyAge(time.Unix(int64(block.Time()), 0)), "have", api.eth.BlockChain().CurrentBlock().NumberU64()) + return valid(nil), nil + } + api.eth.SetSynced() + + // If the beacon client also advertised a finalized block, mark the local + // chain final and completely in PoS mode. + if update.FinalizedBlockHash != (common.Hash{}) { + if merger := api.eth.Merger(); !merger.PoSFinalized() { + merger.FinalizePoS() + } + // If the finalized block is not in our canonical tree, somethings wrong + finalBlock := api.eth.BlockChain().GetBlockByHash(update.FinalizedBlockHash) + if finalBlock == nil { + log.Warn("Final block not available in database", "hash", update.FinalizedBlockHash) + return beacon.STATUS_INVALID, beacon.InvalidForkChoiceState.With(errors.New("final block not available in database")) + } else if rawdb.ReadCanonicalHash(api.eth.ChainDb(), finalBlock.NumberU64()) != update.FinalizedBlockHash { + log.Warn("Final block not in canonical chain", "number", block.NumberU64(), "hash", update.HeadBlockHash) + return beacon.STATUS_INVALID, beacon.InvalidForkChoiceState.With(errors.New("final block not in canonical chain")) + } + // Set the finalized block + api.eth.BlockChain().SetFinalized(finalBlock) + } + // Check if the safe block hash is in our canonical tree, if not somethings wrong + if update.SafeBlockHash != (common.Hash{}) { + safeBlock := api.eth.BlockChain().GetBlockByHash(update.SafeBlockHash) + if safeBlock == nil { + log.Warn("Safe block not available in database") + return beacon.STATUS_INVALID, beacon.InvalidForkChoiceState.With(errors.New("safe block not available in database")) + } + if rawdb.ReadCanonicalHash(api.eth.ChainDb(), safeBlock.NumberU64()) != update.SafeBlockHash { + log.Warn("Safe block not in canonical chain") + return beacon.STATUS_INVALID, beacon.InvalidForkChoiceState.With(errors.New("safe block not in canonical chain")) + } + // Set the safe block + api.eth.BlockChain().SetSafe(safeBlock) + } + // If payload generation was requested, create a new block to be potentially + // sealed by the beacon client. The payload will be requested later, and we + // might replace it arbitrarily many times in between. + if payloadAttributes != nil { + // Create an empty block first which can be used as a fallback + empty, err := api.eth.Miner().GetSealingBlockSync(update.HeadBlockHash, payloadAttributes.Timestamp, payloadAttributes.SuggestedFeeRecipient, payloadAttributes.Random, true) + if err != nil { + log.Error("Failed to create empty sealing payload", "err", err) + return valid(nil), beacon.InvalidPayloadAttributes.With(err) + } + // Send a request to generate a full block in the background. + // The result can be obtained via the returned channel. + resCh, err := api.eth.Miner().GetSealingBlockAsync(update.HeadBlockHash, payloadAttributes.Timestamp, payloadAttributes.SuggestedFeeRecipient, payloadAttributes.Random, false) + if err != nil { + log.Error("Failed to create async sealing payload", "err", err) + return valid(nil), beacon.InvalidPayloadAttributes.With(err) + } + id := computePayloadId(update.HeadBlockHash, payloadAttributes) + api.localBlocks.put(id, &payload{empty: empty, result: resCh}) + return valid(&id), nil + } + return valid(nil), nil +} + +// ExchangeTransitionConfigurationV1 checks the given configuration against +// the configuration of the node. +func (api *ConsensusAPI) ExchangeTransitionConfigurationV1(config beacon.TransitionConfigurationV1) (*beacon.TransitionConfigurationV1, error) { + log.Trace("Engine API request received", "method", "ExchangeTransitionConfiguration", "ttd", config.TerminalTotalDifficulty) + if config.TerminalTotalDifficulty == nil { + return nil, errors.New("invalid terminal total difficulty") + } + // Stash away the last update to warn the user if the beacon client goes offline + api.lastTransitionLock.Lock() + api.lastTransitionUpdate = time.Now() + api.lastTransitionLock.Unlock() + + ttd := api.eth.BlockChain().Config().TerminalTotalDifficulty + if ttd == nil || ttd.Cmp(config.TerminalTotalDifficulty.ToInt()) != 0 { + log.Warn("Invalid TTD configured", "geth", ttd, "beacon", config.TerminalTotalDifficulty) + return nil, fmt.Errorf("invalid ttd: execution %v consensus %v", ttd, config.TerminalTotalDifficulty) + } + if config.TerminalBlockHash != (common.Hash{}) { + if hash := api.eth.BlockChain().GetCanonicalHash(uint64(config.TerminalBlockNumber)); hash == config.TerminalBlockHash { + return &beacon.TransitionConfigurationV1{ + TerminalTotalDifficulty: (*hexutil.Big)(ttd), + TerminalBlockHash: config.TerminalBlockHash, + TerminalBlockNumber: config.TerminalBlockNumber, + }, nil + } + return nil, fmt.Errorf("invalid terminal block hash") + } + return &beacon.TransitionConfigurationV1{TerminalTotalDifficulty: (*hexutil.Big)(ttd)}, nil +} + +// GetPayloadV1 returns a cached payload by id. +func (api *ConsensusAPI) GetPayloadV1(payloadID beacon.PayloadID) (*beacon.ExecutableDataV1, error) { + log.Trace("Engine API request received", "method", "GetPayload", "id", payloadID) + data := api.localBlocks.get(payloadID) + if data == nil { + return nil, beacon.UnknownPayload + } + return data, nil +} + +// NewPayloadV1 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. +func (api *ConsensusAPI) NewPayloadV1(params beacon.ExecutableDataV1) (beacon.PayloadStatusV1, error) { + log.Trace("Engine API request received", "method", "ExecutePayload", "number", params.Number, "hash", params.BlockHash) + block, err := beacon.ExecutableDataToBlock(params) + if err != nil { + log.Debug("Invalid NewPayload params", "params", params, "error", err) + return beacon.PayloadStatusV1{Status: beacon.INVALIDBLOCKHASH}, nil + } + // Stash away the last update to warn the user if the beacon client goes offline + api.lastNewPayloadLock.Lock() + api.lastNewPayloadUpdate = time.Now() + api.lastNewPayloadLock.Unlock() + + // If we already have the block locally, ignore the entire execution and just + // return a fake success. + if block := api.eth.BlockChain().GetBlockByHash(params.BlockHash); block != nil { + log.Warn("Ignoring already known beacon payload", "number", params.Number, "hash", params.BlockHash, "age", common.PrettyAge(time.Unix(int64(block.Time()), 0))) + hash := block.Hash() + return beacon.PayloadStatusV1{Status: beacon.VALID, LatestValidHash: &hash}, nil + } + // If this block was rejected previously, keep rejecting it + if res := api.checkInvalidAncestor(block.Hash(), block.Hash()); res != nil { + return *res, nil + } + // If the parent is missing, we - in theory - could trigger a sync, but that + // would also entail a reorg. That is problematic if multiple sibling blocks + // are being fed to us, and even more so, if some semi-distant uncle shortens + // our live chain. As such, payload execution will not permit reorgs and thus + // will not trigger a sync cycle. That is fine though, if we get a fork choice + // update after legit payload executions. + parent := api.eth.BlockChain().GetBlock(block.ParentHash(), block.NumberU64()-1) + if parent == nil { + return api.delayPayloadImport(block) + } + // We have an existing parent, do some sanity checks to avoid the beacon client + // triggering too early + var ( + ptd = api.eth.BlockChain().GetTd(parent.Hash(), parent.NumberU64()) + ttd = api.eth.BlockChain().Config().TerminalTotalDifficulty + gptd = api.eth.BlockChain().GetTd(parent.ParentHash(), parent.NumberU64()-1) + ) + if ptd.Cmp(ttd) < 0 { + log.Warn("Ignoring pre-merge payload", "number", params.Number, "hash", params.BlockHash, "td", ptd, "ttd", ttd) + return beacon.INVALID_TERMINAL_BLOCK, nil + } + if parent.Difficulty().BitLen() > 0 && gptd != nil && gptd.Cmp(ttd) >= 0 { + log.Error("Ignoring pre-merge parent block", "number", params.Number, "hash", params.BlockHash, "td", ptd, "ttd", ttd) + return beacon.INVALID_TERMINAL_BLOCK, nil + } + if block.Time() <= parent.Time() { + log.Warn("Invalid timestamp", "parent", block.Time(), "block", block.Time()) + return api.invalid(errors.New("invalid timestamp"), parent.Header()), nil + } + // Another cornercase: if the node is in snap sync mode, but the CL client + // tries to make it import a block. That should be denied as pushing something + // into the database directly will conflict with the assumptions of snap sync + // that it has an empty db that it can fill itself. + if api.eth.SyncMode() != downloader.FullSync { + return api.delayPayloadImport(block) + } + if !api.eth.BlockChain().HasBlockAndState(block.ParentHash(), block.NumberU64()-1) { + api.remoteBlocks.put(block.Hash(), block.Header()) + log.Warn("State not available, ignoring new payload") + return beacon.PayloadStatusV1{Status: beacon.ACCEPTED}, nil + } + log.Trace("Inserting block without sethead", "hash", block.Hash(), "number", block.Number) + if err := api.eth.BlockChain().InsertBlockWithoutSetHead(block); err != nil { + log.Warn("NewPayloadV1: inserting block failed", "error", err) + + api.invalidLock.Lock() + api.invalidBlocksHits[block.Hash()] = 1 + api.invalidTipsets[block.Hash()] = block.Header() + api.invalidLock.Unlock() + + return api.invalid(err, parent.Header()), nil + } + // We've accepted a valid payload from the beacon client. Mark the local + // chain transitions to notify other subsystems (e.g. downloader) of the + // behavioral change. + if merger := api.eth.Merger(); !merger.TDDReached() { + merger.ReachTTD() + api.eth.Downloader().Cancel() + } + hash := block.Hash() + return beacon.PayloadStatusV1{Status: beacon.VALID, LatestValidHash: &hash}, nil +} + +// computePayloadId computes a pseudo-random payloadid, based on the parameters. +func computePayloadId(headBlockHash common.Hash, params *beacon.PayloadAttributesV1) beacon.PayloadID { + // Hash + hasher := sha256.New() + hasher.Write(headBlockHash[:]) + binary.Write(hasher, binary.BigEndian, params.Timestamp) + hasher.Write(params.Random[:]) + hasher.Write(params.SuggestedFeeRecipient[:]) + var out beacon.PayloadID + copy(out[:], hasher.Sum(nil)[:8]) + return out +} + +// delayPayloadImport stashes the given block away for import at a later time, +// either via a forkchoice update or a sync extension. This method is meant to +// be called by the newpayload command when the block seems to be ok, but some +// prerequisite prevents it from being processed (e.g. no parent, or snap sync). +func (api *ConsensusAPI) delayPayloadImport(block *types.Block) (beacon.PayloadStatusV1, error) { + // Sanity check that this block's parent is not on a previously invalidated + // chain. If it is, mark the block as invalid too. + if res := api.checkInvalidAncestor(block.ParentHash(), block.Hash()); res != nil { + return *res, nil + } + // Stash the block away for a potential forced forkchoice update to it + // at a later time. + api.remoteBlocks.put(block.Hash(), block.Header()) + + // Although we don't want to trigger a sync, if there is one already in + // progress, try to extend if with the current payload request to relieve + // some strain from the forkchoice update. + if err := api.eth.Downloader().BeaconExtend(api.eth.SyncMode(), block.Header()); err == nil { + log.Debug("Payload accepted for sync extension", "number", block.NumberU64(), "hash", block.Hash()) + return beacon.PayloadStatusV1{Status: beacon.SYNCING}, nil + } + // Either no beacon sync was started yet, or it rejected the delivered + // payload as non-integratable on top of the existing sync. We'll just + // have to rely on the beacon client to forcefully update the head with + // a forkchoice update request. + if api.eth.SyncMode() == downloader.FullSync { + // In full sync mode, failure to import a well-formed block can only mean + // that the parent state is missing and the syncer rejected extending the + // current cycle with the new payload. + log.Warn("Ignoring payload with missing parent", "number", block.NumberU64(), "hash", block.Hash(), "parent", block.ParentHash()) + } else { + // In non-full sync mode (i.e. snap sync) all payloads are rejected until + // snap sync terminates as snap sync relies on direct database injections + // and cannot afford concurrent out-if-band modifications via imports. + log.Warn("Ignoring payload while snap syncing", "number", block.NumberU64(), "hash", block.Hash()) + } + return beacon.PayloadStatusV1{Status: beacon.SYNCING}, nil +} + +// setInvalidAncestor is a callback for the downloader to notify us if a bad block +// is encountered during the async sync. +func (api *ConsensusAPI) setInvalidAncestor(invalid *types.Header, origin *types.Header) { + api.invalidLock.Lock() + defer api.invalidLock.Unlock() + + api.invalidTipsets[origin.Hash()] = invalid + api.invalidBlocksHits[invalid.Hash()]++ +} + +// checkInvalidAncestor checks whether the specified chain end links to a known +// bad ancestor. If yes, it constructs the payload failure response to return. +func (api *ConsensusAPI) checkInvalidAncestor(check common.Hash, head common.Hash) *beacon.PayloadStatusV1 { + api.invalidLock.Lock() + defer api.invalidLock.Unlock() + + // If the hash to check is unknown, return valid + invalid, ok := api.invalidTipsets[check] + if !ok { + return nil + } + // If the bad hash was hit too many times, evict it and try to reprocess in + // the hopes that we have a data race that we can exit out of. + badHash := invalid.Hash() + + api.invalidBlocksHits[badHash]++ + if api.invalidBlocksHits[badHash] >= invalidBlockHitEviction { + log.Warn("Too many bad block import attempt, trying", "number", invalid.Number, "hash", badHash) + delete(api.invalidBlocksHits, badHash) + + for descendant, badHeader := range api.invalidTipsets { + if badHeader.Hash() == badHash { + delete(api.invalidTipsets, descendant) + } + } + return nil + } + // Not too many failures yet, mark the head of the invalid chain as invalid + if check != head { + log.Warn("Marked new chain head as invalid", "hash", head, "badnumber", invalid.Number, "badhash", badHash) + for len(api.invalidTipsets) >= invalidTipsetsCap { + for key := range api.invalidTipsets { + delete(api.invalidTipsets, key) + break + } + } + api.invalidTipsets[head] = invalid + } + // If the last valid hash is the terminal pow block, return 0x0 for latest valid hash + lastValid := &invalid.ParentHash + if header := api.eth.BlockChain().GetHeader(invalid.ParentHash, invalid.Number.Uint64()-1); header != nil && header.Difficulty.Sign() != 0 { + lastValid = &common.Hash{} + } + failure := "links to previously rejected block" + return &beacon.PayloadStatusV1{ + Status: beacon.INVALID, + LatestValidHash: lastValid, + ValidationError: &failure, + } +} + +// invalid returns a response "INVALID" with the latest valid hash supplied by latest or to the current head +// if no latestValid block was provided. +func (api *ConsensusAPI) invalid(err error, latestValid *types.Header) beacon.PayloadStatusV1 { + currentHash := api.eth.BlockChain().CurrentBlock().Hash() + if latestValid != nil { + // Set latest valid hash to 0x0 if parent is PoW block + currentHash = common.Hash{} + if latestValid.Difficulty.BitLen() == 0 { + // Otherwise set latest valid hash to parent hash + currentHash = latestValid.Hash() + } + } + errorMsg := err.Error() + return beacon.PayloadStatusV1{Status: beacon.INVALID, LatestValidHash: ¤tHash, ValidationError: &errorMsg} +} + +// heartbeat loops indefinitely, and checks if there have been beacon client updates +// received in the last while. If not - or if they but strange ones - it warns the +// user that something might be off with their consensus node. +// +// TODO(karalabe): Spin this goroutine down somehow +func (api *ConsensusAPI) heartbeat() { + // Sleep a bit on startup since there's obviously no beacon client yet + // attached, so no need to print scary warnings to the user. + time.Sleep(beaconUpdateStartupTimeout) + + var ( + offlineLogged time.Time + ttd = api.eth.BlockChain().Config().TerminalTotalDifficulty + ) + // If the network is not yet merged/merging, don't bother continuing. + if ttd == nil { + return + } + for { + // Sleep a bit and retrieve the last known consensus updates + time.Sleep(5 * time.Second) + + api.lastTransitionLock.Lock() + lastTransitionUpdate := api.lastTransitionUpdate + api.lastTransitionLock.Unlock() + + api.lastForkchoiceLock.Lock() + lastForkchoiceUpdate := api.lastForkchoiceUpdate + api.lastForkchoiceLock.Unlock() + + api.lastNewPayloadLock.Lock() + lastNewPayloadUpdate := api.lastNewPayloadUpdate + api.lastNewPayloadLock.Unlock() + + // If there have been no updates for the past while, warn the user + // that the beacon client is probably offline + if api.eth.BlockChain().Config().TerminalTotalDifficultyPassed || api.eth.Merger().TDDReached() { + if time.Since(lastForkchoiceUpdate) <= beaconUpdateConsensusTimeout || time.Since(lastNewPayloadUpdate) <= beaconUpdateConsensusTimeout { + offlineLogged = time.Time{} + continue + } + if time.Since(lastTransitionUpdate) > beaconUpdateExchangeTimeout { + if time.Since(offlineLogged) > beaconUpdateWarnFrequency { + if lastTransitionUpdate.IsZero() { + log.Warn("Post-merge network, but no beacon client seen. Please launch one to follow the chain!") + } else { + log.Warn("Previously seen beacon client is offline. Please ensure it is operational to follow the chain!") + } + offlineLogged = time.Now() + } + continue + } + if time.Since(offlineLogged) > beaconUpdateWarnFrequency { + if lastForkchoiceUpdate.IsZero() && lastNewPayloadUpdate.IsZero() { + log.Warn("Beacon client online, but never received consensus updates. Please ensure your beacon client is operational to follow the chain!") + } else { + log.Warn("Beacon client online, but no consensus updates received in a while. Please fix your beacon client to follow the chain!") + } + offlineLogged = time.Now() + } + continue + } + if time.Since(lastTransitionUpdate) <= beaconUpdateExchangeTimeout { + offlineLogged = time.Time{} + continue + } + if time.Since(offlineLogged) > beaconUpdateWarnFrequency { + // Retrieve the last few blocks and make a rough estimate as + // to when the merge transition should happen + var ( + chain = api.eth.BlockChain() + head = chain.CurrentHeader() + htd = chain.GetTd(head.Hash(), head.Number.Uint64()) + ) + if htd.Cmp(ttd) >= 0 { + if lastTransitionUpdate.IsZero() { + log.Warn("Merge already reached, but no beacon client seen. Please launch one to follow the chain!") + } else { + log.Warn("Merge already reached, but previously seen beacon client is offline. Please ensure it is operational to follow the chain!") + } + offlineLogged = time.Now() + continue + } + var eta time.Duration + if head.Number.Uint64() > 0 { + // Accumulate the last 64 difficulties to estimate the growth + var ( + deltaDiff uint64 + deltaTime uint64 + current = head + ) + for i := 0; i < 64; i++ { + parent := chain.GetHeader(current.ParentHash, current.Number.Uint64()-1) + if parent == nil { + break + } + deltaDiff += current.Difficulty.Uint64() + deltaTime += current.Time - parent.Time + current = parent + } + // Estimate an ETA based on the block times and the difficulty growth + if deltaTime > 0 { + growth := deltaDiff / deltaTime + left := new(big.Int).Sub(ttd, htd) + eta = time.Duration(new(big.Int).Div(left, new(big.Int).SetUint64(growth+1)).Uint64()) * time.Second + } + } + message := "Merge is configured, but previously seen beacon client is offline. Please ensure it is operational before the transition arrives!" + if lastTransitionUpdate.IsZero() { + message = "Merge is configured, but no beacon client seen. Please ensure you have one available before the transition arrives!" + } + if eta < time.Second { + log.Warn(message) + } else { + log.Warn(message, "eta", common.PrettyAge(time.Now().Add(-eta))) // weird hack, but duration formatted doesn't handle days + } + offlineLogged = time.Now() + } + } +} diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go new file mode 100644 index 00000000..0d945993 --- /dev/null +++ b/eth/catalyst/api_test.go @@ -0,0 +1,861 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package catalyst + +import ( + "bytes" + "fmt" + "math/big" + "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/core" + "github.com/ethereum/go-ethereum/core/beacon" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + // testKey is a private key to use for funding a tester account. + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + + // testAddr is the Ethereum address of the tester account. + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) + + testBalance = big.NewInt(2e18) +) + +func generatePreMergeChain(n int) (*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, + BaseFee: big.NewInt(params.InitialBaseFee), + Difficulty: big.NewInt(0), + } + testNonce := uint64(0) + generate := func(i int, g *core.BlockGen) { + g.OffsetTime(5) + g.SetExtra([]byte("test")) + tx, _ := types.SignTx(types.NewTransaction(testNonce, common.HexToAddress("0x9a9070028361F7AAbeB3f2F2Dc07F82C4a98A02a"), big.NewInt(1), params.TxGas, big.NewInt(params.InitialBaseFee*2), nil), types.LatestSigner(config), testKey) + g.AddTx(tx) + testNonce++ + } + gblock := genesis.MustCommit(db) + engine := ethash.NewFaker() + blocks, _ := core.GenerateChain(config, gblock, engine, db, n, generate) + totalDifficulty := big.NewInt(0) + for _, b := range blocks { + totalDifficulty.Add(totalDifficulty, b.Difficulty()) + } + config.TerminalTotalDifficulty = totalDifficulty + return genesis, blocks +} + +func TestEth2AssembleBlock(t *testing.T) { + genesis, blocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, blocks) + defer n.Close() + + api := NewConsensusAPI(ethservice) + signer := types.NewEIP155Signer(ethservice.BlockChain().Config().ChainID) + tx, err := types.SignTx(types.NewTransaction(uint64(10), blocks[9].Coinbase(), big.NewInt(1000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, testKey) + if err != nil { + t.Fatalf("error signing transaction, err=%v", err) + } + ethservice.TxPool().AddLocal(tx) + blockParams := beacon.PayloadAttributesV1{ + Timestamp: blocks[9].Time() + 5, + } + execData, err := assembleBlock(api, blocks[9].Hash(), &blockParams) + if err != nil { + t.Fatalf("error producing block, err=%v", err) + } + if len(execData.Transactions) != 1 { + t.Fatalf("invalid number of transactions %d != 1", len(execData.Transactions)) + } +} + +func TestEth2AssembleBlockWithAnotherBlocksTxs(t *testing.T) { + genesis, blocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, blocks[:9]) + defer n.Close() + + api := NewConsensusAPI(ethservice) + + // Put the 10th block's tx in the pool and produce a new block + api.eth.TxPool().AddRemotesSync(blocks[9].Transactions()) + blockParams := beacon.PayloadAttributesV1{ + Timestamp: blocks[8].Time() + 5, + } + execData, err := assembleBlock(api, blocks[8].Hash(), &blockParams) + if err != nil { + t.Fatalf("error producing block, err=%v", err) + } + if len(execData.Transactions) != blocks[9].Transactions().Len() { + t.Fatalf("invalid number of transactions %d != 1", len(execData.Transactions)) + } +} + +func TestSetHeadBeforeTotalDifficulty(t *testing.T) { + genesis, blocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, blocks) + defer n.Close() + + api := NewConsensusAPI(ethservice) + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: blocks[5].Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + if resp, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Errorf("fork choice updated should not error: %v", err) + } else if resp.PayloadStatus.Status != beacon.INVALID_TERMINAL_BLOCK.Status { + t.Errorf("fork choice updated before total terminal difficulty should be INVALID") + } +} + +func TestEth2PrepareAndGetPayload(t *testing.T) { + genesis, blocks := generatePreMergeChain(10) + // We need to properly set the terminal total difficulty + genesis.Config.TerminalTotalDifficulty.Sub(genesis.Config.TerminalTotalDifficulty, blocks[9].Difficulty()) + n, ethservice := startEthService(t, genesis, blocks[:9]) + defer n.Close() + + api := NewConsensusAPI(ethservice) + + // Put the 10th block's tx in the pool and produce a new block + ethservice.TxPool().AddLocals(blocks[9].Transactions()) + blockParams := beacon.PayloadAttributesV1{ + Timestamp: blocks[8].Time() + 5, + } + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: blocks[8].Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + _, err := api.ForkchoiceUpdatedV1(fcState, &blockParams) + if err != nil { + t.Fatalf("error preparing payload, err=%v", err) + } + payloadID := computePayloadId(fcState.HeadBlockHash, &blockParams) + execData, err := api.GetPayloadV1(payloadID) + if err != nil { + t.Fatalf("error getting payload, err=%v", err) + } + if len(execData.Transactions) != blocks[9].Transactions().Len() { + t.Fatalf("invalid number of transactions %d != 1", len(execData.Transactions)) + } + // Test invalid payloadID + var invPayload beacon.PayloadID + copy(invPayload[:], payloadID[:]) + invPayload[0] = ^invPayload[0] + _, err = api.GetPayloadV1(invPayload) + if err == nil { + t.Fatal("expected error retrieving invalid payload") + } +} + +func checkLogEvents(t *testing.T, logsCh <-chan []*types.Log, rmLogsCh <-chan core.RemovedLogsEvent, wantNew, wantRemoved int) { + t.Helper() + + if len(logsCh) != wantNew { + t.Fatalf("wrong number of log events: got %d, want %d", len(logsCh), wantNew) + } + if len(rmLogsCh) != wantRemoved { + t.Fatalf("wrong number of removed log events: got %d, want %d", len(rmLogsCh), wantRemoved) + } + // Drain events. + for i := 0; i < len(logsCh); i++ { + <-logsCh + } + for i := 0; i < len(rmLogsCh); i++ { + <-rmLogsCh + } +} + +func TestInvalidPayloadTimestamp(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + var ( + api = NewConsensusAPI(ethservice) + parent = ethservice.BlockChain().CurrentBlock() + ) + tests := []struct { + time uint64 + shouldErr bool + }{ + {0, true}, + {parent.Time(), true}, + {parent.Time() - 1, true}, + + // TODO (MariusVanDerWijden) following tests are currently broken, + // fixed in upcoming merge-kiln-v2 pr + //{parent.Time() + 1, false}, + //{uint64(time.Now().Unix()) + uint64(time.Minute), false}, + } + + for i, test := range tests { + t.Run(fmt.Sprintf("Timestamp test: %v", i), func(t *testing.T) { + params := beacon.PayloadAttributesV1{ + Timestamp: test.time, + Random: crypto.Keccak256Hash([]byte{byte(123)}), + SuggestedFeeRecipient: parent.Coinbase(), + } + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: parent.Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + _, err := api.ForkchoiceUpdatedV1(fcState, ¶ms) + if test.shouldErr && err == nil { + t.Fatalf("expected error preparing payload with invalid timestamp, err=%v", err) + } else if !test.shouldErr && err != nil { + t.Fatalf("error preparing payload with valid timestamp, err=%v", err) + } + }) + } +} + +func TestEth2NewBlock(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + var ( + api = NewConsensusAPI(ethservice) + parent = preMergeBlocks[len(preMergeBlocks)-1] + + // This EVM code generates a log when the contract is created. + logCode = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + ) + // The event channels. + newLogCh := make(chan []*types.Log, 10) + rmLogsCh := make(chan core.RemovedLogsEvent, 10) + ethservice.BlockChain().SubscribeLogsEvent(newLogCh) + ethservice.BlockChain().SubscribeRemovedLogsEvent(rmLogsCh) + + for i := 0; i < 10; i++ { + statedb, _ := ethservice.BlockChain().StateAt(parent.Root()) + nonce := statedb.GetNonce(testAddr) + tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) + ethservice.TxPool().AddLocal(tx) + + execData, err := assembleBlock(api, parent.Hash(), &beacon.PayloadAttributesV1{ + Timestamp: parent.Time() + 5, + }) + if err != nil { + t.Fatalf("Failed to create the executable data %v", err) + } + block, err := beacon.ExecutableDataToBlock(*execData) + if err != nil { + t.Fatalf("Failed to convert executable data to block %v", err) + } + newResp, err := api.NewPayloadV1(*execData) + if err != nil || newResp.Status != "VALID" { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != block.NumberU64()-1 { + t.Fatalf("Chain head shouldn't be updated") + } + checkLogEvents(t, newLogCh, rmLogsCh, 0, 0) + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: block.Hash(), + SafeBlockHash: block.Hash(), + FinalizedBlockHash: block.Hash(), + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != block.NumberU64() { + t.Fatalf("Chain head should be updated") + } + checkLogEvents(t, newLogCh, rmLogsCh, 1, 0) + + parent = block + } + + // Introduce fork chain + var ( + head = ethservice.BlockChain().CurrentBlock().NumberU64() + ) + parent = preMergeBlocks[len(preMergeBlocks)-1] + for i := 0; i < 10; i++ { + execData, err := assembleBlock(api, parent.Hash(), &beacon.PayloadAttributesV1{ + Timestamp: parent.Time() + 6, + }) + if err != nil { + t.Fatalf("Failed to create the executable data %v", err) + } + block, err := beacon.ExecutableDataToBlock(*execData) + if err != nil { + t.Fatalf("Failed to convert executable data to block %v", err) + } + newResp, err := api.NewPayloadV1(*execData) + if err != nil || newResp.Status != "VALID" { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != head { + t.Fatalf("Chain head shouldn't be updated") + } + + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: block.Hash(), + SafeBlockHash: block.Hash(), + FinalizedBlockHash: block.Hash(), + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != block.NumberU64() { + t.Fatalf("Chain head should be updated") + } + parent, head = block, block.NumberU64() + } +} + +func TestEth2DeepReorg(t *testing.T) { + // TODO (MariusVanDerWijden) TestEth2DeepReorg is currently broken, because it tries to reorg + // before the totalTerminalDifficulty threshold + /* + genesis, preMergeBlocks := generatePreMergeChain(core.TriesInMemory * 2) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + var ( + api = NewConsensusAPI(ethservice, nil) + parent = preMergeBlocks[len(preMergeBlocks)-core.TriesInMemory-1] + head = ethservice.BlockChain().CurrentBlock().NumberU64() + ) + if ethservice.BlockChain().HasBlockAndState(parent.Hash(), parent.NumberU64()) { + t.Errorf("Block %d not pruned", parent.NumberU64()) + } + for i := 0; i < 10; i++ { + execData, err := api.assembleBlock(AssembleBlockParams{ + ParentHash: parent.Hash(), + Timestamp: parent.Time() + 5, + }) + if err != nil { + t.Fatalf("Failed to create the executable data %v", err) + } + block, err := ExecutableDataToBlock(ethservice.BlockChain().Config(), parent.Header(), *execData) + if err != nil { + t.Fatalf("Failed to convert executable data to block %v", err) + } + newResp, err := api.ExecutePayload(*execData) + if err != nil || newResp.Status != "VALID" { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != head { + t.Fatalf("Chain head shouldn't be updated") + } + if err := api.setHead(block.Hash()); err != nil { + t.Fatalf("Failed to set head: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != block.NumberU64() { + t.Fatalf("Chain head should be updated") + } + parent, head = block, block.NumberU64() + } + */ +} + +// startEthService creates a full node instance for testing. +func startEthService(t *testing.T, genesis *core.Genesis, blocks []*types.Block) (*node.Node, *eth.Ethereum) { + t.Helper() + + n, err := node.New(&node.Config{ + P2P: p2p.Config{ + ListenAddr: "0.0.0.0:0", + NoDiscovery: true, + MaxPeers: 25, + }}) + if err != nil { + t.Fatal("can't create node:", err) + } + + ethcfg := ðconfig.Config{Genesis: genesis, Ethash: ethash.Config{PowMode: ethash.ModeFake}, SyncMode: downloader.FullSync, TrieTimeout: time.Minute, TrieDirtyCache: 256, TrieCleanCache: 256} + ethservice, err := eth.New(n, ethcfg) + if err != nil { + t.Fatal("can't create eth service:", err) + } + if err := n.Start(); err != nil { + t.Fatal("can't start node:", err) + } + if _, err := ethservice.BlockChain().InsertChain(blocks); err != nil { + n.Close() + t.Fatal("can't import test blocks:", err) + } + time.Sleep(500 * time.Millisecond) // give txpool enough time to consume head event + + ethservice.SetEtherbase(testAddr) + ethservice.SetSynced() + return n, ethservice +} + +func TestFullAPI(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + var ( + parent = ethservice.BlockChain().CurrentBlock() + // This EVM code generates a log when the contract is created. + logCode = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + ) + + callback := func(parent *types.Block) { + statedb, _ := ethservice.BlockChain().StateAt(parent.Root()) + nonce := statedb.GetNonce(testAddr) + tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) + ethservice.TxPool().AddLocal(tx) + } + + setupBlocks(t, ethservice, 10, parent, callback) +} + +func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.Block, callback func(parent *types.Block)) { + api := NewConsensusAPI(ethservice) + for i := 0; i < n; i++ { + callback(parent) + + payload := getNewPayload(t, api, parent) + + execResp, err := api.NewPayloadV1(*payload) + if err != nil { + t.Fatalf("can't execute payload: %v", err) + } + if execResp.Status != beacon.VALID { + t.Fatalf("invalid status: %v", execResp.Status) + } + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: payload.BlockHash, + SafeBlockHash: payload.ParentHash, + FinalizedBlockHash: payload.ParentHash, + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != payload.Number { + t.Fatal("Chain head should be updated") + } + if ethservice.BlockChain().CurrentFinalizedBlock().NumberU64() != payload.Number-1 { + t.Fatal("Finalized block should be updated") + } + parent = ethservice.BlockChain().CurrentBlock() + } +} + +func TestExchangeTransitionConfig(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + var ( + api = NewConsensusAPI(ethservice) + ) + // invalid ttd + config := beacon.TransitionConfigurationV1{ + TerminalTotalDifficulty: (*hexutil.Big)(big.NewInt(0)), + TerminalBlockHash: common.Hash{}, + TerminalBlockNumber: 0, + } + if _, err := api.ExchangeTransitionConfigurationV1(config); err == nil { + t.Fatal("expected error on invalid config, invalid ttd") + } + // invalid terminal block hash + config = beacon.TransitionConfigurationV1{ + TerminalTotalDifficulty: (*hexutil.Big)(genesis.Config.TerminalTotalDifficulty), + TerminalBlockHash: common.Hash{1}, + TerminalBlockNumber: 0, + } + if _, err := api.ExchangeTransitionConfigurationV1(config); err == nil { + t.Fatal("expected error on invalid config, invalid hash") + } + // valid config + config = beacon.TransitionConfigurationV1{ + TerminalTotalDifficulty: (*hexutil.Big)(genesis.Config.TerminalTotalDifficulty), + TerminalBlockHash: common.Hash{}, + TerminalBlockNumber: 0, + } + if _, err := api.ExchangeTransitionConfigurationV1(config); err != nil { + t.Fatalf("expected no error on valid config, got %v", err) + } + // valid config + config = beacon.TransitionConfigurationV1{ + TerminalTotalDifficulty: (*hexutil.Big)(genesis.Config.TerminalTotalDifficulty), + TerminalBlockHash: preMergeBlocks[5].Hash(), + TerminalBlockNumber: 6, + } + if _, err := api.ExchangeTransitionConfigurationV1(config); err != nil { + t.Fatalf("expected no error on valid config, got %v", err) + } +} + +/* +TestNewPayloadOnInvalidChain sets up a valid chain and tries to feed blocks +from an invalid chain to test if latestValidHash (LVH) works correctly. + +We set up the following chain where P1 ... Pn and P1'' are valid while +P1' is invalid. +We expect +(1) The LVH to point to the current inserted payload if it was valid. +(2) The LVH to point to the valid parent on an invalid payload (if the parent is available). +(3) If the parent is unavailable, the LVH should not be set. + +CommonAncestor◄─▲── P1 ◄── P2 ◄─ P3 ◄─ ... ◄─ Pn + │ + └── P1' ◄─ P2' ◄─ P3' ◄─ ... ◄─ Pn' + │ + └── P1'' +*/ +func TestNewPayloadOnInvalidChain(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + var ( + api = NewConsensusAPI(ethservice) + parent = ethservice.BlockChain().CurrentBlock() + // This EVM code generates a log when the contract is created. + logCode = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + ) + for i := 0; i < 10; i++ { + statedb, _ := ethservice.BlockChain().StateAt(parent.Root()) + nonce := statedb.GetNonce(testAddr) + tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) + ethservice.TxPool().AddLocal(tx) + + params := beacon.PayloadAttributesV1{ + Timestamp: parent.Time() + 1, + Random: crypto.Keccak256Hash([]byte{byte(i)}), + SuggestedFeeRecipient: parent.Coinbase(), + } + + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: parent.Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + resp, err := api.ForkchoiceUpdatedV1(fcState, ¶ms) + if err != nil { + t.Fatalf("error preparing payload, err=%v", err) + } + if resp.PayloadStatus.Status != beacon.VALID { + t.Fatalf("error preparing payload, invalid status: %v", resp.PayloadStatus.Status) + } + payload, err := api.GetPayloadV1(*resp.PayloadID) + if err != nil { + t.Fatalf("can't get payload: %v", err) + } + // TODO(493456442, marius) this test can be flaky since we rely on a 100ms + // allowance for block generation internally. + if len(payload.Transactions) == 0 { + t.Fatalf("payload should not be empty") + } + execResp, err := api.NewPayloadV1(*payload) + if err != nil { + t.Fatalf("can't execute payload: %v", err) + } + if execResp.Status != beacon.VALID { + t.Fatalf("invalid status: %v", execResp.Status) + } + fcState = beacon.ForkchoiceStateV1{ + HeadBlockHash: payload.BlockHash, + SafeBlockHash: payload.ParentHash, + FinalizedBlockHash: payload.ParentHash, + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != payload.Number { + t.Fatalf("Chain head should be updated") + } + parent = ethservice.BlockChain().CurrentBlock() + } +} + +func assembleBlock(api *ConsensusAPI, parentHash common.Hash, params *beacon.PayloadAttributesV1) (*beacon.ExecutableDataV1, error) { + block, err := api.eth.Miner().GetSealingBlockSync(parentHash, params.Timestamp, params.SuggestedFeeRecipient, params.Random, false) + if err != nil { + return nil, err + } + return beacon.BlockToExecutableData(block), nil +} + +func TestEmptyBlocks(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + commonAncestor := ethservice.BlockChain().CurrentBlock() + api := NewConsensusAPI(ethservice) + + // Setup 10 blocks on the canonical chain + setupBlocks(t, ethservice, 10, commonAncestor, func(parent *types.Block) {}) + + // (1) check LatestValidHash by sending a normal payload (P1'') + payload := getNewPayload(t, api, commonAncestor) + + status, err := api.NewPayloadV1(*payload) + if err != nil { + t.Fatal(err) + } + if status.Status != beacon.VALID { + t.Errorf("invalid status: expected VALID got: %v", status.Status) + } + if !bytes.Equal(status.LatestValidHash[:], payload.BlockHash[:]) { + t.Fatalf("invalid LVH: got %v want %v", status.LatestValidHash, payload.BlockHash) + } + + // (2) Now send P1' which is invalid + payload = getNewPayload(t, api, commonAncestor) + payload.GasUsed += 1 + payload = setBlockhash(payload) + // Now latestValidHash should be the common ancestor + status, err = api.NewPayloadV1(*payload) + if err != nil { + t.Fatal(err) + } + if status.Status != beacon.INVALID { + t.Errorf("invalid status: expected INVALID got: %v", status.Status) + } + // Expect 0x0 on INVALID block on top of PoW block + expected := common.Hash{} + if !bytes.Equal(status.LatestValidHash[:], expected[:]) { + t.Fatalf("invalid LVH: got %v want %v", status.LatestValidHash, expected) + } + + // (3) Now send a payload with unknown parent + payload = getNewPayload(t, api, commonAncestor) + payload.ParentHash = common.Hash{1} + payload = setBlockhash(payload) + // Now latestValidHash should be the common ancestor + status, err = api.NewPayloadV1(*payload) + if err != nil { + t.Fatal(err) + } + if status.Status != beacon.SYNCING { + t.Errorf("invalid status: expected SYNCING got: %v", status.Status) + } + if status.LatestValidHash != nil { + t.Fatalf("invalid LVH: got %v wanted nil", status.LatestValidHash) + } +} + +func getNewPayload(t *testing.T, api *ConsensusAPI, parent *types.Block) *beacon.ExecutableDataV1 { + params := beacon.PayloadAttributesV1{ + Timestamp: parent.Time() + 1, + Random: crypto.Keccak256Hash([]byte{byte(1)}), + SuggestedFeeRecipient: parent.Coinbase(), + } + + payload, err := assembleBlock(api, parent.Hash(), ¶ms) + if err != nil { + t.Fatal(err) + } + return payload +} + +// setBlockhash sets the blockhash of a modified ExecutableData. +// Can be used to make modified payloads look valid. +func setBlockhash(data *beacon.ExecutableDataV1) *beacon.ExecutableDataV1 { + txs, _ := decodeTransactions(data.Transactions) + number := big.NewInt(0) + number.SetUint64(data.Number) + header := &types.Header{ + ParentHash: data.ParentHash, + UncleHash: types.EmptyUncleHash, + Coinbase: data.FeeRecipient, + Root: data.StateRoot, + TxHash: types.DeriveSha(types.Transactions(txs), trie.NewStackTrie(nil)), + ReceiptHash: data.ReceiptsRoot, + Bloom: types.BytesToBloom(data.LogsBloom), + Difficulty: common.Big0, + Number: number, + GasLimit: data.GasLimit, + GasUsed: data.GasUsed, + Time: data.Timestamp, + BaseFee: data.BaseFeePerGas, + Extra: data.ExtraData, + MixDigest: data.Random, + } + block := types.NewBlockWithHeader(header).WithBody(txs, nil /* uncles */) + data.BlockHash = block.Hash() + return data +} + +func decodeTransactions(enc [][]byte) ([]*types.Transaction, error) { + var txs = make([]*types.Transaction, len(enc)) + for i, encTx := range enc { + var tx types.Transaction + if err := tx.UnmarshalBinary(encTx); err != nil { + return nil, fmt.Errorf("invalid transaction %d: %v", i, err) + } + txs[i] = &tx + } + return txs, nil +} + +func TestTrickRemoteBlockCache(t *testing.T) { + // Setup two nodes + genesis, preMergeBlocks := generatePreMergeChain(10) + nodeA, ethserviceA := startEthService(t, genesis, preMergeBlocks) + nodeB, ethserviceB := startEthService(t, genesis, preMergeBlocks) + defer nodeA.Close() + defer nodeB.Close() + for nodeB.Server().NodeInfo().Ports.Listener == 0 { + time.Sleep(250 * time.Millisecond) + } + nodeA.Server().AddPeer(nodeB.Server().Self()) + nodeB.Server().AddPeer(nodeA.Server().Self()) + apiA := NewConsensusAPI(ethserviceA) + apiB := NewConsensusAPI(ethserviceB) + + commonAncestor := ethserviceA.BlockChain().CurrentBlock() + + // Setup 10 blocks on the canonical chain + setupBlocks(t, ethserviceA, 10, commonAncestor, func(parent *types.Block) {}) + commonAncestor = ethserviceA.BlockChain().CurrentBlock() + + var invalidChain []*beacon.ExecutableDataV1 + // create a valid payload (P1) + //payload1 := getNewPayload(t, apiA, commonAncestor) + //invalidChain = append(invalidChain, payload1) + + // create an invalid payload2 (P2) + payload2 := getNewPayload(t, apiA, commonAncestor) + //payload2.ParentHash = payload1.BlockHash + payload2.GasUsed += 1 + payload2 = setBlockhash(payload2) + invalidChain = append(invalidChain, payload2) + + head := payload2 + // create some valid payloads on top + for i := 0; i < 10; i++ { + payload := getNewPayload(t, apiA, commonAncestor) + payload.ParentHash = head.BlockHash + payload = setBlockhash(payload) + invalidChain = append(invalidChain, payload) + head = payload + } + + // feed the payloads to node B + for _, payload := range invalidChain { + status, err := apiB.NewPayloadV1(*payload) + if err != nil { + panic(err) + } + if status.Status == beacon.VALID { + t.Error("invalid status: VALID on an invalid chain") + } + // Now reorg to the head of the invalid chain + resp, err := apiB.ForkchoiceUpdatedV1(beacon.ForkchoiceStateV1{HeadBlockHash: payload.BlockHash, SafeBlockHash: payload.BlockHash, FinalizedBlockHash: payload.ParentHash}, nil) + if err != nil { + t.Fatal(err) + } + if resp.PayloadStatus.Status == beacon.VALID { + t.Error("invalid status: VALID on an invalid chain") + } + time.Sleep(100 * time.Millisecond) + } +} + +func TestInvalidBloom(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(10) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + ethservice.Merger().ReachTTD() + defer n.Close() + + commonAncestor := ethservice.BlockChain().CurrentBlock() + api := NewConsensusAPI(ethservice) + + // Setup 10 blocks on the canonical chain + setupBlocks(t, ethservice, 10, commonAncestor, func(parent *types.Block) {}) + + // (1) check LatestValidHash by sending a normal payload (P1'') + payload := getNewPayload(t, api, commonAncestor) + payload.LogsBloom = append(payload.LogsBloom, byte(1)) + status, err := api.NewPayloadV1(*payload) + if err != nil { + t.Fatal(err) + } + if status.Status != beacon.INVALIDBLOCKHASH { + t.Errorf("invalid status: expected VALID got: %v", status.Status) + } +} + +func TestNewPayloadOnInvalidTerminalBlock(t *testing.T) { + genesis, preMergeBlocks := generatePreMergeChain(100) + fmt.Println(genesis.Config.TerminalTotalDifficulty) + genesis.Config.TerminalTotalDifficulty = preMergeBlocks[0].Difficulty() //.Sub(genesis.Config.TerminalTotalDifficulty, preMergeBlocks[len(preMergeBlocks)-1].Difficulty()) + + fmt.Println(genesis.Config.TerminalTotalDifficulty) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + var ( + api = NewConsensusAPI(ethservice) + parent = preMergeBlocks[len(preMergeBlocks)-1] + ) + + // Test parent already post TTD in FCU + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: parent.Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + resp, err := api.ForkchoiceUpdatedV1(fcState, nil) + if err != nil { + t.Fatalf("error sending forkchoice, err=%v", err) + } + if resp.PayloadStatus != beacon.INVALID_TERMINAL_BLOCK { + t.Fatalf("error sending invalid forkchoice, invalid status: %v", resp.PayloadStatus.Status) + } + + // Test parent already post TTD in NewPayload + params := beacon.PayloadAttributesV1{ + Timestamp: parent.Time() + 1, + Random: crypto.Keccak256Hash([]byte{byte(1)}), + SuggestedFeeRecipient: parent.Coinbase(), + } + empty, err := api.eth.Miner().GetSealingBlockSync(parent.Hash(), params.Timestamp, params.SuggestedFeeRecipient, params.Random, true) + if err != nil { + t.Fatalf("error preparing payload, err=%v", err) + } + data := *beacon.BlockToExecutableData(empty) + resp2, err := api.NewPayloadV1(data) + if err != nil { + t.Fatalf("error sending NewPayload, err=%v", err) + } + if resp2 != beacon.INVALID_TERMINAL_BLOCK { + t.Fatalf("error sending invalid forkchoice, invalid status: %v", resp.PayloadStatus.Status) + } +} diff --git a/eth/catalyst/queue.go b/eth/catalyst/queue.go new file mode 100644 index 00000000..ff8edc12 --- /dev/null +++ b/eth/catalyst/queue.go @@ -0,0 +1,177 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package catalyst + +import ( + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/beacon" + "github.com/ethereum/go-ethereum/core/types" +) + +// maxTrackedPayloads is the maximum number of prepared payloads the execution +// engine tracks before evicting old ones. Ideally we should only ever track the +// latest one; but have a slight wiggle room for non-ideal conditions. +const maxTrackedPayloads = 10 + +// maxTrackedHeaders is the maximum number of executed payloads the execution +// engine tracks before evicting old ones. Ideally we should only ever track the +// latest one; but have a slight wiggle room for non-ideal conditions. +const maxTrackedHeaders = 10 + +// payload wraps the miner's block production channel, allowing the mined block +// to be retrieved later upon the GetPayload engine API call. +type payload struct { + lock sync.Mutex + done bool + empty *types.Block + block *types.Block + result chan *types.Block +} + +// resolve extracts the generated full block from the given channel if possible +// or fallback to empty block as an alternative. +func (req *payload) resolve() *beacon.ExecutableDataV1 { + // this function can be called concurrently, prevent any + // concurrency issue in the first place. + req.lock.Lock() + defer req.lock.Unlock() + + // Try to resolve the full block first if it's not obtained + // yet. The returned block can be nil if the generation fails. + + if !req.done { + timeout := time.NewTimer(500 * time.Millisecond) + defer timeout.Stop() + + select { + case req.block = <-req.result: + req.done = true + case <-timeout.C: + // TODO(rjl49345642, Marius), should we keep this + // 100ms timeout allowance? Why not just use the + // default and then fallback to empty directly? + } + } + + if req.block != nil { + return beacon.BlockToExecutableData(req.block) + } + return beacon.BlockToExecutableData(req.empty) +} + +// payloadQueueItem represents an id->payload tuple to store until it's retrieved +// or evicted. +type payloadQueueItem struct { + id beacon.PayloadID + data *payload +} + +// payloadQueue tracks the latest handful of constructed payloads to be retrieved +// by the beacon chain if block production is requested. +type payloadQueue struct { + payloads []*payloadQueueItem + lock sync.RWMutex +} + +// newPayloadQueue creates a pre-initialized queue with a fixed number of slots +// all containing empty items. +func newPayloadQueue() *payloadQueue { + return &payloadQueue{ + payloads: make([]*payloadQueueItem, maxTrackedPayloads), + } +} + +// put inserts a new payload into the queue at the given id. +func (q *payloadQueue) put(id beacon.PayloadID, data *payload) { + q.lock.Lock() + defer q.lock.Unlock() + + copy(q.payloads[1:], q.payloads) + q.payloads[0] = &payloadQueueItem{ + id: id, + data: data, + } +} + +// get retrieves a previously stored payload item or nil if it does not exist. +func (q *payloadQueue) get(id beacon.PayloadID) *beacon.ExecutableDataV1 { + q.lock.RLock() + defer q.lock.RUnlock() + + for _, item := range q.payloads { + if item == nil { + return nil // no more items + } + if item.id == id { + return item.data.resolve() + } + } + return nil +} + +// headerQueueItem represents an hash->header tuple to store until it's retrieved +// or evicted. +type headerQueueItem struct { + hash common.Hash + header *types.Header +} + +// headerQueue tracks the latest handful of constructed headers to be retrieved +// by the beacon chain if block production is requested. +type headerQueue struct { + headers []*headerQueueItem + lock sync.RWMutex +} + +// newHeaderQueue creates a pre-initialized queue with a fixed number of slots +// all containing empty items. +func newHeaderQueue() *headerQueue { + return &headerQueue{ + headers: make([]*headerQueueItem, maxTrackedHeaders), + } +} + +// put inserts a new header into the queue at the given hash. +func (q *headerQueue) put(hash common.Hash, data *types.Header) { + q.lock.Lock() + defer q.lock.Unlock() + + copy(q.headers[1:], q.headers) + q.headers[0] = &headerQueueItem{ + hash: hash, + header: data, + } +} + +// get retrieves a previously stored header item or nil if it does not exist. +func (q *headerQueue) get(hash common.Hash) *types.Header { + q.lock.RLock() + defer q.lock.RUnlock() + + for _, item := range q.headers { + if item == nil { + return nil // no more items + } + if item.hash == hash { + return item.header + } + } + return nil +} diff --git a/eth/config.go b/eth/config.go deleted file mode 100644 index 49151dd5..00000000 --- a/eth/config.go +++ /dev/null @@ -1,160 +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 eth - -import ( - "math/big" - "os" - "os/user" - "path/filepath" - "runtime" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/miner" - "github.com/cryptoecc/ETH-ECC/params" -) - -// DefaultConfig contains default settings for use on the Ethereum main net. -var DefaultConfig = Config{ - SyncMode: downloader.FastSync, - Ethash: ethash.Config{ - CacheDir: "ethash", - CachesInMem: 2, - CachesOnDisk: 3, - DatasetsInMem: 1, - DatasetsOnDisk: 2, - }, - NetworkId: 1, - LightPeers: 100, - UltraLightFraction: 75, - DatabaseCache: 512, - TrieCleanCache: 256, - TrieDirtyCache: 256, - TrieTimeout: 60 * time.Minute, - Miner: miner.Config{ - GasFloor: 8000000, - GasCeil: 8000000, - GasPrice: big.NewInt(params.GWei), - Recommit: 3 * time.Second, - }, - TxPool: core.DefaultTxPoolConfig, - GPO: gasprice.Config{ - Blocks: 20, - Percentile: 60, - }, -} - -func init() { - home := os.Getenv("HOME") - if home == "" { - if user, err := user.Current(); err == nil { - home = user.HomeDir - } - } - 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 -formats toml -out gen_config.go - -type Config struct { - // The genesis block, which is inserted if the database is empty. - // If nil, the Ethereum main net block is used. - Genesis *core.Genesis `toml:",omitempty"` - - // Protocol options - NetworkId uint64 // Network ID to use for selecting peers to connect to - SyncMode downloader.SyncMode - - 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 - 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 - DatabaseFreezer string - - TrieCleanCache int - TrieDirtyCache int - TrieTimeout time.Duration - - // Mining options - Miner miner.Config - - // Ethash options - Ethash ethash.Config - - // Transaction pool options - TxPool core.TxPoolConfig - - // Gas Price Oracle options - GPO gasprice.Config - - // Enables tracking of SHA3 preimages in the VM - EnablePreimageRecording bool - - // Miscellaneous options - DocRoot string `toml:"-"` - - // Type of the EWASM interpreter ("" for default) - EWASMInterpreter string - - // Type of the EVM interpreter ("" for default) - EVMInterpreter string - - // 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"` - - // Istanbul block override (TODO: remove after the fork) - OverrideIstanbul *big.Int -} diff --git a/eth/downloader/api.go b/eth/downloader/api.go index 8330278e..b3f7113b 100644 --- a/eth/downloader/api.go +++ b/eth/downloader/api.go @@ -20,26 +20,26 @@ import ( "context" "sync" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/rpc" ) -// PublicDownloaderAPI provides an API which gives information about the current synchronisation status. +// DownloaderAPI provides an API which gives information about the current synchronisation status. // It offers only methods that operates on data that can be available to anyone without security risks. -type PublicDownloaderAPI struct { +type DownloaderAPI struct { d *Downloader mux *event.TypeMux installSyncSubscription chan chan interface{} uninstallSyncSubscription chan *uninstallSyncSubscriptionRequest } -// NewPublicDownloaderAPI create a new PublicDownloaderAPI. The API has an internal event loop that +// NewDownloaderAPI create a new DownloaderAPI. The API has an internal event loop that // listens for events from the downloader through the global event mux. In case it receives one of // these events it broadcasts it to all syncing subscriptions that are installed through the // installSyncSubscription channel. -func NewPublicDownloaderAPI(d *Downloader, m *event.TypeMux) *PublicDownloaderAPI { - api := &PublicDownloaderAPI{ +func NewDownloaderAPI(d *Downloader, m *event.TypeMux) *DownloaderAPI { + api := &DownloaderAPI{ d: d, mux: m, installSyncSubscription: make(chan chan interface{}), @@ -53,7 +53,7 @@ func NewPublicDownloaderAPI(d *Downloader, m *event.TypeMux) *PublicDownloaderAP // eventLoop runs a loop until the event mux closes. It will install and uninstall new // sync subscriptions and broadcasts sync status updates to the installed sync subscriptions. -func (api *PublicDownloaderAPI) eventLoop() { +func (api *DownloaderAPI) eventLoop() { var ( sub = api.mux.Subscribe(StartEvent{}, DoneEvent{}, FailedEvent{}) syncSubscriptions = make(map[chan interface{}]struct{}) @@ -90,7 +90,7 @@ func (api *PublicDownloaderAPI) eventLoop() { } // Syncing provides information when this nodes starts synchronising with the Ethereum network and when it's finished. -func (api *PublicDownloaderAPI) Syncing(ctx context.Context) (*rpc.Subscription, error) { +func (api *DownloaderAPI) Syncing(ctx context.Context) (*rpc.Subscription, error) { notifier, supported := rpc.NotifierFromContext(ctx) if !supported { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported @@ -125,7 +125,7 @@ type SyncingResult struct { Status ethereum.SyncProgress `json:"status"` } -// uninstallSyncSubscriptionRequest uninstalles a syncing subscription in the API event loop. +// uninstallSyncSubscriptionRequest uninstalls a syncing subscription in the API event loop. type uninstallSyncSubscriptionRequest struct { c chan interface{} uninstalled chan interface{} @@ -133,9 +133,9 @@ type uninstallSyncSubscriptionRequest struct { // SyncStatusSubscription represents a syncing subscription. type SyncStatusSubscription struct { - api *PublicDownloaderAPI // register subscription in event loop of this api instance - c chan interface{} // channel where events are broadcasted to - unsubOnce sync.Once // make sure unsubscribe logic is executed once + api *DownloaderAPI // register subscription in event loop of this api instance + c chan interface{} // channel where events are broadcasted to + unsubOnce sync.Once // make sure unsubscribe logic is executed once } // Unsubscribe uninstalls the subscription from the DownloadAPI event loop. @@ -159,8 +159,8 @@ func (s *SyncStatusSubscription) Unsubscribe() { } // SubscribeSyncStatus creates a subscription that will broadcast new synchronisation updates. -// The given channel must receive interface values, the result can either -func (api *PublicDownloaderAPI) SubscribeSyncStatus(status chan interface{}) *SyncStatusSubscription { +// The given channel must receive interface values, the result can either. +func (api *DownloaderAPI) SubscribeSyncStatus(status chan interface{}) *SyncStatusSubscription { api.installSyncSubscription <- status return &SyncStatusSubscription{api: api, c: status} } diff --git a/eth/downloader/beaconsync.go b/eth/downloader/beaconsync.go new file mode 100644 index 00000000..484a4e20 --- /dev/null +++ b/eth/downloader/beaconsync.go @@ -0,0 +1,351 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "fmt" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" +) + +// beaconBackfiller is the chain and state backfilling that can be commenced once +// the skeleton syncer has successfully reverse downloaded all the headers up to +// the genesis block or an existing header in the database. Its operation is fully +// directed by the skeleton sync's head/tail events. +type beaconBackfiller struct { + downloader *Downloader // Downloader to direct via this callback implementation + syncMode SyncMode // Sync mode to use for backfilling the skeleton chains + success func() // Callback to run on successful sync cycle completion + filling bool // Flag whether the downloader is backfilling or not + filled *types.Header // Last header filled by the last terminated sync loop + started chan struct{} // Notification channel whether the downloader inited + lock sync.Mutex // Mutex protecting the sync lock +} + +// newBeaconBackfiller is a helper method to create the backfiller. +func newBeaconBackfiller(dl *Downloader, success func()) backfiller { + return &beaconBackfiller{ + downloader: dl, + success: success, + } +} + +// suspend cancels any background downloader threads and returns the last header +// that has been successfully backfilled. +func (b *beaconBackfiller) suspend() *types.Header { + // If no filling is running, don't waste cycles + b.lock.Lock() + filling := b.filling + filled := b.filled + started := b.started + b.lock.Unlock() + + if !filling { + return filled // Return the filled header on the previous sync completion + } + // A previous filling should be running, though it may happen that it hasn't + // yet started (being done on a new goroutine). Many concurrent beacon head + // announcements can lead to sync start/stop thrashing. In that case we need + // to wait for initialization before we can safely cancel it. It is safe to + // read this channel multiple times, it gets closed on startup. + <-started + + // Now that we're sure the downloader successfully started up, we can cancel + // it safely without running the risk of data races. + b.downloader.Cancel() + + // Sync cycle was just terminated, retrieve and return the last filled header. + // Can't use `filled` as that contains a stale value from before cancellation. + return b.downloader.blockchain.CurrentFastBlock().Header() +} + +// resume starts the downloader threads for backfilling state and chain data. +func (b *beaconBackfiller) resume() { + b.lock.Lock() + if b.filling { + // If a previous filling cycle is still running, just ignore this start + // request. // TODO(karalabe): We should make this channel driven + b.lock.Unlock() + return + } + b.filling = true + b.filled = nil + b.started = make(chan struct{}) + mode := b.syncMode + b.lock.Unlock() + + // Start the backfilling on its own thread since the downloader does not have + // its own lifecycle runloop. + go func() { + // Set the backfiller to non-filling when download completes + defer func() { + b.lock.Lock() + b.filling = false + b.filled = b.downloader.blockchain.CurrentFastBlock().Header() + b.lock.Unlock() + }() + // If the downloader fails, report an error as in beacon chain mode there + // should be no errors as long as the chain we're syncing to is valid. + if err := b.downloader.synchronise("", common.Hash{}, nil, nil, mode, true, b.started); err != nil { + log.Error("Beacon backfilling failed", "err", err) + return + } + // Synchronization succeeded. Since this happens async, notify the outer + // context to disable snap syncing and enable transaction propagation. + if b.success != nil { + b.success() + } + }() +} + +// setMode updates the sync mode from the current one to the requested one. If +// there's an active sync in progress, it will be cancelled and restarted. +func (b *beaconBackfiller) setMode(mode SyncMode) { + // Update the old sync mode and track if it was changed + b.lock.Lock() + updated := b.syncMode != mode + filling := b.filling + b.syncMode = mode + b.lock.Unlock() + + // If the sync mode was changed mid-sync, restart. This should never ever + // really happen, we just handle it to detect programming errors. + if !updated || !filling { + return + } + log.Error("Downloader sync mode changed mid-run", "old", mode.String(), "new", mode.String()) + b.suspend() + b.resume() +} + +// SetBadBlockCallback sets the callback to run when a bad block is hit by the +// block processor. This method is not thread safe and should be set only once +// on startup before system events are fired. +func (d *Downloader) SetBadBlockCallback(onBadBlock badBlockFn) { + d.badBlock = onBadBlock +} + +// BeaconSync is the post-merge version of the chain synchronization, where the +// chain is not downloaded from genesis onward, rather from trusted head announces +// backwards. +// +// Internally backfilling and state sync is done the same way, but the header +// retrieval and scheduling is replaced. +func (d *Downloader) BeaconSync(mode SyncMode, head *types.Header) error { + return d.beaconSync(mode, head, true) +} + +// BeaconExtend is an optimistic version of BeaconSync, where an attempt is made +// to extend the current beacon chain with a new header, but in case of a mismatch, +// the old sync will not be terminated and reorged, rather the new head is dropped. +// +// This is useful if a beacon client is feeding us large chunks of payloads to run, +// but is not setting the head after each. +func (d *Downloader) BeaconExtend(mode SyncMode, head *types.Header) error { + return d.beaconSync(mode, head, false) +} + +// beaconSync is the post-merge version of the chain synchronization, where the +// chain is not downloaded from genesis onward, rather from trusted head announces +// backwards. +// +// Internally backfilling and state sync is done the same way, but the header +// retrieval and scheduling is replaced. +func (d *Downloader) beaconSync(mode SyncMode, head *types.Header, force bool) error { + // When the downloader starts a sync cycle, it needs to be aware of the sync + // mode to use (full, snap). To keep the skeleton chain oblivious, inject the + // mode into the backfiller directly. + // + // Super crazy dangerous type cast. Should be fine (TM), we're only using a + // different backfiller implementation for skeleton tests. + d.skeleton.filler.(*beaconBackfiller).setMode(mode) + + // Signal the skeleton sync to switch to a new head, however it wants + if err := d.skeleton.Sync(head, force); err != nil { + return err + } + return nil +} + +// findBeaconAncestor tries to locate the common ancestor link of the local chain +// and the beacon chain just requested. In the general case when our node was in +// sync and on the correct chain, checking the top N links should already get us +// a match. In the rare scenario when we ended up on a long reorganisation (i.e. +// none of the head links match), we do a binary search to find the ancestor. +func (d *Downloader) findBeaconAncestor() (uint64, error) { + // Figure out the current local head position + var chainHead *types.Header + + switch d.getMode() { + case FullSync: + chainHead = d.blockchain.CurrentBlock().Header() + case SnapSync: + chainHead = d.blockchain.CurrentFastBlock().Header() + default: + chainHead = d.lightchain.CurrentHeader() + } + number := chainHead.Number.Uint64() + + // Retrieve the skeleton bounds and ensure they are linked to the local chain + beaconHead, beaconTail, err := d.skeleton.Bounds() + if err != nil { + // This is a programming error. The chain backfiller was called with an + // invalid beacon sync state. Ideally we would panic here, but erroring + // gives us at least a remote chance to recover. It's still a big fault! + log.Error("Failed to retrieve beacon bounds", "err", err) + return 0, err + } + var linked bool + switch d.getMode() { + case FullSync: + linked = d.blockchain.HasBlock(beaconTail.ParentHash, beaconTail.Number.Uint64()-1) + case SnapSync: + linked = d.blockchain.HasFastBlock(beaconTail.ParentHash, beaconTail.Number.Uint64()-1) + default: + linked = d.blockchain.HasHeader(beaconTail.ParentHash, beaconTail.Number.Uint64()-1) + } + if !linked { + // This is a programming error. The chain backfiller was called with a + // tail that's not linked to the local chain. Whilst this should never + // happen, there might be some weirdnesses if beacon sync backfilling + // races with the user (or beacon client) calling setHead. Whilst panic + // would be the ideal thing to do, it is safer long term to attempt a + // recovery and fix any noticed issue after the fact. + log.Error("Beacon sync linkup unavailable", "number", beaconTail.Number.Uint64()-1, "hash", beaconTail.ParentHash) + return 0, fmt.Errorf("beacon linkup unavailable locally: %d [%x]", beaconTail.Number.Uint64()-1, beaconTail.ParentHash) + } + // Binary search to find the ancestor + start, end := beaconTail.Number.Uint64()-1, number + if number := beaconHead.Number.Uint64(); end > number { + // This shouldn't really happen in a healthy network, but if the consensus + // clients feeds us a shorter chain as the canonical, we should not attempt + // to access non-existent skeleton items. + log.Warn("Beacon head lower than local chain", "beacon", number, "local", end) + end = number + } + for start+1 < end { + // Split our chain interval in two, and request the hash to cross check + check := (start + end) / 2 + + h := d.skeleton.Header(check) + n := h.Number.Uint64() + + var known bool + switch d.getMode() { + case FullSync: + known = d.blockchain.HasBlock(h.Hash(), n) + case SnapSync: + known = d.blockchain.HasFastBlock(h.Hash(), n) + default: + known = d.lightchain.HasHeader(h.Hash(), n) + } + if !known { + end = check + continue + } + start = check + } + return start, nil +} + +// fetchBeaconHeaders feeds skeleton headers to the downloader queue for scheduling +// until sync errors or is finished. +func (d *Downloader) fetchBeaconHeaders(from uint64) error { + head, tail, err := d.skeleton.Bounds() + if err != nil { + return err + } + // A part of headers are not in the skeleton space, try to resolve + // them from the local chain. Note the range should be very short + // and it should only happen when there are less than 64 post-merge + // blocks in the network. + var localHeaders []*types.Header + if from < tail.Number.Uint64() { + count := tail.Number.Uint64() - from + if count > uint64(fsMinFullBlocks) { + return fmt.Errorf("invalid origin (%d) of beacon sync (%d)", from, tail.Number) + } + localHeaders = d.readHeaderRange(tail, int(count)) + log.Warn("Retrieved beacon headers from local", "from", from, "count", count) + } + for { + // Retrieve a batch of headers and feed it to the header processor + var ( + headers = make([]*types.Header, 0, maxHeadersProcess) + hashes = make([]common.Hash, 0, maxHeadersProcess) + ) + for i := 0; i < maxHeadersProcess && from <= head.Number.Uint64(); i++ { + header := d.skeleton.Header(from) + + // The header is not found in skeleton space, try to find it in local chain. + if header == nil && from < tail.Number.Uint64() { + dist := tail.Number.Uint64() - from + if len(localHeaders) >= int(dist) { + header = localHeaders[dist-1] + } + } + // The header is still missing, the beacon sync is corrupted and bail out + // the error here. + if header == nil { + return fmt.Errorf("missing beacon header %d", from) + } + headers = append(headers, header) + hashes = append(hashes, headers[i].Hash()) + from++ + } + if len(headers) > 0 { + log.Trace("Scheduling new beacon headers", "count", len(headers), "from", from-uint64(len(headers))) + select { + case d.headerProcCh <- &headerTask{ + headers: headers, + hashes: hashes, + }: + case <-d.cancelCh: + return errCanceled + } + } + // If we still have headers to import, loop and keep pushing them + if from <= head.Number.Uint64() { + continue + } + // If the pivot block is committed, signal header sync termination + if atomic.LoadInt32(&d.committed) == 1 { + select { + case d.headerProcCh <- nil: + return nil + case <-d.cancelCh: + return errCanceled + } + } + // State sync still going, wait a bit for new headers and retry + log.Trace("Pivot not yet committed, waiting...") + select { + case <-time.After(fsHeaderContCheck): + case <-d.cancelCh: + return errCanceled + } + head, _, err = d.skeleton.Bounds() + if err != nil { + return err + } + } +} diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index a7688c2e..c04352f0 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -25,50 +25,38 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) var ( - MaxHashFetch = 512 // Amount of hashes to be fetched per retrieval request MaxBlockFetch = 128 // Amount of blocks to be fetched per retrieval request MaxHeaderFetch = 192 // Amount of block headers to be fetched per retrieval request MaxSkeletonSize = 128 // Number of header fetches to need for a skeleton assembly - MaxBodyFetch = 128 // Amount of block bodies to be fetched per retrieval request MaxReceiptFetch = 256 // Amount of transaction receipts to allow fetching per request - MaxStateFetch = 384 // Amount of node state values to allow fetching per request - rttMinEstimate = 2 * time.Second // Minimum round-trip time to target for download requests - rttMaxEstimate = 20 * 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 = 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 - maxForkAncestry uint64 = params.ImmutabilityThreshold // Maximum chain reorganisation (locally redeclared so tests can reduce it) + 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 + fullMaxForkAncestry uint64 = params.FullImmutabilityThreshold // Maximum chain reorganisation (locally redeclared so tests can reduce it) + lightMaxForkAncestry uint64 = params.LightImmutabilityThreshold // 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 - fsHeaderCheckFrequency = 100 // Verification frequency of the downloaded headers during fast sync + fsHeaderCheckFrequency = 100 // Verification frequency of the downloaded headers during snap sync fsHeaderSafetyNet = 2048 // Number of headers to discard in case a chain violation is detected fsHeaderForceVerify = 24 // Number of headers to verify before and after the pivot to accept it fsHeaderContCheck = 3 * time.Second // Time interval to check for header continuations during state download - fsMinFullBlocks = 64 // Number of blocks to retrieve fully even in fast sync + fsMinFullBlocks = 64 // Number of blocks to retrieve fully even in snap sync ) var ( @@ -88,33 +76,40 @@ var ( errCancelStateFetch = errors.New("state data download 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)") + errTooOld = errors.New("peer's protocol version too old") + errNoAncestorFound = errors.New("no common ancestor found") + errNoPivotHeader = errors.New("pivot header is not found") + ErrMergeTransition = errors.New("legacy sync reached the merge") ) +// peerDropFn is a callback type for dropping a peer detected as malicious. +type peerDropFn func(id string) + +// badBlockFn is a callback for the async beacon sync to notify the caller that +// the origin header requested to sync to, produced a chain with a bad block. +type badBlockFn func(invalid *types.Header, origin *types.Header) + +// headerTask is a set of downloaded headers to queue along with their precomputed +// hashes to avoid constant rehashing. +type headerTask struct { + headers []*types.Header + hashes []common.Hash +} + 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) + mode uint32 // Synchronisation mode defining the strategy used (per sync cycle), use d.getMode() to get the SyncMode mux *event.TypeMux // Event multiplexer to announce sync operation events - checkpoint uint64 // Checkpoint block number to enforce head against (e.g. fast sync) + checkpoint uint64 // Checkpoint block number to enforce head against (e.g. snap 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 - stateDB ethdb.Database // Database to state sync into (and deduplicate via) - stateBloom *trie.SyncBloom // Bloom filter for fast trie node existence checks + stateDB ethdb.Database // Database to state sync into (and deduplicate via) // Statistics - syncStatsChainOrigin uint64 // Origin block number where syncing started at - syncStatsChainHeight uint64 // Highest block number known when syncing started - syncStatsState stateSyncStats + syncStatsChainOrigin uint64 // Origin block number where syncing started at + syncStatsChainHeight uint64 // Highest block number known when syncing started syncStatsLock sync.RWMutex // Lock protecting the sync stats fields lightchain LightChain @@ -122,6 +117,7 @@ type Downloader struct { // Callbacks dropPeer peerDropFn // Drops a peer for misbehaving + badBlock badBlockFn // Reports a block as rejected by the chain // Status synchroniseMock func(id string, hash common.Hash) error // Replacement for synchronise during testing @@ -131,17 +127,17 @@ type Downloader struct { ancientLimit uint64 // The maximum block number which can be regarded as ancient data. // Channels - headerCh chan dataPack // [eth/62] Channel receiving inbound block headers - bodyCh chan dataPack // [eth/62] Channel receiving inbound block bodies - receiptCh chan dataPack // [eth/63] Channel receiving inbound receipts - bodyWakeCh chan bool // [eth/62] Channel to signal the block body fetcher of new tasks - receiptWakeCh chan bool // [eth/63] Channel to signal the receipt fetcher of new tasks - headerProcCh chan []*types.Header // [eth/62] Channel to feed the header processor new tasks - - // for stateFetcher + headerProcCh chan *headerTask // Channel to feed the header processor new tasks + + // Skeleton sync + skeleton *skeleton // Header skeleton to backfill the chain with (eth2 mode) + + // State sync + pivotHeader *types.Header // Pivot block header to dynamically push the syncing state root + pivotLock sync.RWMutex // Lock protecting pivot header reads from updates + + SnapSyncer *snap.Syncer // TODO(karalabe): make private! hack for now stateSyncStart chan *stateSync - trackStateReq chan *stateReq - stateCh chan dataPack // [eth/63] Channel receiving inbound node state data // Cancellation and termination cancelPeer string // Identifier of the peer currently being used as the master (cancel on drop) @@ -150,7 +146,7 @@ type Downloader struct { cancelWg sync.WaitGroup // Make sure all fetcher goroutines have exited. quitCh chan struct{} // Quit channel to signal termination - quitLock sync.RWMutex // Lock to prevent double closes + quitLock sync.Mutex // Lock to prevent double closes // Testing hooks syncInitHook func(uint64, uint64) // Method to call upon initiating a new sync run @@ -176,18 +172,18 @@ type LightChain interface { // InsertHeaderChain inserts a batch of headers into the local chain. InsertHeaderChain([]*types.Header, int) (int, error) - // Rollback removes a few recently added elements from the local chain. - Rollback([]common.Hash) + // SetHead rewinds the local chain to a new head. + SetHead(uint64) error } -// BlockChain encapsulates functions required to sync a (full or fast) blockchain. +// BlockChain encapsulates functions required to sync a (full or snap) blockchain. type BlockChain interface { LightChain // HasBlock verifies a block's presence in the local chain. HasBlock(common.Hash, uint64) bool - // HasFastBlock verifies a fast block's presence in the local chain. + // HasFastBlock verifies a snap block's presence in the local chain. HasFastBlock(common.Hash, uint64) bool // GetBlockByHash retrieves a block from the local chain. @@ -196,51 +192,43 @@ type BlockChain interface { // CurrentBlock retrieves the head block from the local chain. CurrentBlock() *types.Block - // CurrentFastBlock retrieves the head fast block from the local chain. + // CurrentFastBlock retrieves the head snap block from the local chain. CurrentFastBlock() *types.Block - // FastSyncCommitHead directly commits the head block to a certain entity. - FastSyncCommitHead(common.Hash) error + // SnapSyncCommitHead directly commits the head block to a certain entity. + SnapSyncCommitHead(common.Hash) error // InsertChain inserts a batch of blocks into the local chain. InsertChain(types.Blocks) (int, error) // InsertReceiptChain inserts a batch of receipts into the local chain. InsertReceiptChain(types.Blocks, []types.Receipts, uint64) (int, error) + + // Snapshots returns the blockchain snapshot tree to paused it during sync. + Snapshots() *snapshot.Tree } // New creates a new downloader to fetch hashes and blocks from remote peers. -func New(checkpoint uint64, stateDb ethdb.Database, stateBloom *trie.SyncBloom, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn) *Downloader { +func New(checkpoint uint64, stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn, success func()) *Downloader { if lightchain == nil { lightchain = chain } dl := &Downloader{ stateDB: stateDb, - stateBloom: stateBloom, mux: mux, checkpoint: checkpoint, - queue: newQueue(), + queue: newQueue(blockCacheMaxItems, blockCacheInitialItems), peers: newPeerSet(), - rttEstimate: uint64(rttMaxEstimate), - rttConfidence: uint64(1000000), blockchain: chain, lightchain: lightchain, dropPeer: dropPeer, - headerCh: make(chan dataPack, 1), - bodyCh: make(chan dataPack, 1), - receiptCh: make(chan dataPack, 1), - bodyWakeCh: make(chan bool, 1), - receiptWakeCh: make(chan bool, 1), - headerProcCh: make(chan []*types.Header, 1), + headerProcCh: make(chan *headerTask, 1), quitCh: make(chan struct{}), - stateCh: make(chan dataPack), + SnapSyncer: snap.NewSyncer(stateDb), stateSyncStart: make(chan *stateSync), - syncStatsState: stateSyncStats{ - processed: rawdb.ReadFastTrieProgress(stateDb), - }, - trackStateReq: make(chan *stateReq), } - go dl.qosTuner() + dl.skeleton = newSkeleton(stateDb, dl.peers, dropPeer, newBeaconBackfiller(dl, success)) + go dl.stateFetcher() return dl } @@ -249,7 +237,7 @@ func New(checkpoint uint64, stateDb ethdb.Database, stateBloom *trie.SyncBloom, // block where synchronisation started at (may have failed/suspended); the block // or header sync is currently at; and the latest known block which the sync targets. // -// In addition, during the state download phase of fast synchronisation the number +// In addition, during the state download phase of snap synchronisation the number // of processed and the total number of known states are also returned. Otherwise // these are zero. func (d *Downloader) Progress() ethereum.SyncProgress { @@ -258,22 +246,35 @@ func (d *Downloader) Progress() ethereum.SyncProgress { defer d.syncStatsLock.RUnlock() current := uint64(0) + mode := d.getMode() switch { - case d.blockchain != nil && d.mode == FullSync: + case d.blockchain != nil && mode == FullSync: current = d.blockchain.CurrentBlock().NumberU64() - case d.blockchain != nil && d.mode == FastSync: + case d.blockchain != nil && mode == SnapSync: current = d.blockchain.CurrentFastBlock().NumberU64() 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) + log.Error("Unknown downloader chain/mode combo", "light", d.lightchain != nil, "full", d.blockchain != nil, "mode", mode) } + progress, pending := d.SnapSyncer.Progress() + return ethereum.SyncProgress{ - StartingBlock: d.syncStatsChainOrigin, - CurrentBlock: current, - HighestBlock: d.syncStatsChainHeight, - PulledStates: d.syncStatsState.processed, - KnownStates: d.syncStatsState.processed + d.syncStatsState.pending, + StartingBlock: d.syncStatsChainOrigin, + CurrentBlock: current, + HighestBlock: d.syncStatsChainHeight, + SyncedAccounts: progress.AccountSynced, + SyncedAccountBytes: uint64(progress.AccountBytes), + SyncedBytecodes: progress.BytecodeSynced, + SyncedBytecodeBytes: uint64(progress.BytecodeBytes), + SyncedStorage: progress.StorageSynced, + SyncedStorageBytes: uint64(progress.StorageBytes), + HealedTrienodes: progress.TrienodeHealSynced, + HealedTrienodeBytes: uint64(progress.TrienodeHealBytes), + HealedBytecodes: progress.BytecodeHealSynced, + HealedBytecodeBytes: uint64(progress.BytecodeHealBytes), + HealingTrienodes: pending.TrienodeHeal, + HealingBytecode: pending.BytecodeHeal, } } @@ -284,20 +285,24 @@ func (d *Downloader) Synchronising() bool { // RegisterPeer injects a new download peer into the set of block source to be // used for fetching hashes and blocks from. -func (d *Downloader) RegisterPeer(id string, version int, peer Peer) error { - logger := log.New("peer", id) +func (d *Downloader) RegisterPeer(id string, version uint, peer Peer) error { + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:8]) + } logger.Trace("Registering sync peer") if err := d.peers.Register(newPeerConnection(id, version, peer, logger)); err != nil { logger.Error("Failed to register sync peer", "err", err) return err } - d.qosReduceConfidence() - return nil } // RegisterLightPeer injects a light client peer, wrapping it so it appears as a regular peer. -func (d *Downloader) RegisterLightPeer(id string, version int, peer LightPeer) error { +func (d *Downloader) RegisterLightPeer(id string, version uint, peer LightPeer) error { return d.RegisterPeer(id, version, &lightPeerWrapper{peer}) } @@ -306,7 +311,13 @@ func (d *Downloader) RegisterLightPeer(id string, version int, peer LightPeer) e // the queue. func (d *Downloader) UnregisterPeer(id string) error { // Unregister the peer from the active peer set and revoke any fetch tasks - logger := log.New("peer", id) + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:8]) + } logger.Trace("Unregistering sync peer") if err := d.peers.Unregister(id); err != nil { logger.Error("Failed to unregister sync peer", "err", err) @@ -317,17 +328,18 @@ func (d *Downloader) UnregisterPeer(id string) error { return nil } -// Synchronise tries to sync up our local block chain with a remote peer, both +// LegacySync tries to sync up our local block chain with a remote peer, both // adding various sanity checks as well as wrapping it with various log entries. -func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode SyncMode) error { - err := d.synchronise(id, head, td, mode) - switch err { - case nil: - case errBusy, errCanceled: +func (d *Downloader) LegacySync(id string, head common.Hash, td, ttd *big.Int, mode SyncMode) error { + err := d.synchronise(id, head, td, ttd, mode, false, nil) - case errTimeout, errBadPeer, errStallingPeer, errUnsyncedPeer, - errEmptyHeaderSet, errPeersUnavailable, errTooOld, - errInvalidAncestor, errInvalidChain: + switch err { + case nil, errBusy, errCanceled: + return err + } + if errors.Is(err, errInvalidChain) || errors.Is(err, errBadPeer) || errors.Is(err, errTimeout) || + errors.Is(err, errStallingPeer) || errors.Is(err, errUnsyncedPeer) || errors.Is(err, errEmptyHeaderSet) || + errors.Is(err, errPeersUnavailable) || errors.Is(err, errTooOld) || errors.Is(err, errInvalidAncestor) { log.Warn("Synchronisation failed, dropping peer", "peer", id, "err", err) if d.dropPeer == nil { // The dropPeer method is nil when `--copydb` is used for a local copy. @@ -336,16 +348,33 @@ func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode } else { d.dropPeer(id) } - default: - log.Warn("Synchronisation failed, retrying", "err", err) + return err + } + if errors.Is(err, ErrMergeTransition) { + return err // This is an expected fault, don't keep printing it in a spin-loop } + log.Warn("Synchronisation failed, retrying", "err", err) return err } // synchronise will select the peer and use it for synchronising. If an empty string is given // it will use the best peer possible and synchronize if its TD is higher than our own. If any of the // checks fail an error will be returned. This method is synchronous -func (d *Downloader) synchronise(id string, hash common.Hash, td *big.Int, mode SyncMode) error { +func (d *Downloader) synchronise(id string, hash common.Hash, td, ttd *big.Int, mode SyncMode, beaconMode bool, beaconPing chan struct{}) error { + // The beacon header syncer is async. It will start this synchronization and + // will continue doing other tasks. However, if synchronization needs to be + // cancelled, the syncer needs to know if we reached the startup point (and + // inited the cancel channel) or not yet. Make sure that we'll signal even in + // case of a failure. + if beaconPing != nil { + defer func() { + select { + case <-beaconPing: // already notified + default: + close(beaconPing) // weird exit condition, notify that it's safe to cancel (the nothing) + } + }() + } // Mock out the synchronisation if testing if d.synchroniseMock != nil { return d.synchroniseMock(id, hash) @@ -360,31 +389,24 @@ 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() + if mode == SnapSync { + // Snap sync uses the snapshot namespace to store potentially flakey data until + // sync completely heals and finishes. Pause snapshot maintenance in the mean- + // time to prevent access. + if snapshots := d.blockchain.Snapshots(); snapshots != nil { // Only nil in tests + snapshots.Disable() + } } // Reset the queue, peer set and wake channels to clean any internal leftover state - d.queue.Reset() + d.queue.Reset(blockCacheMaxItems, blockCacheInitialItems) d.peers.Reset() - for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + for _, ch := range []chan bool{d.queue.blockWakeCh, d.queue.receiptWakeCh} { select { case <-ch: default: } } - for _, ch := range []chan dataPack{d.headerCh, d.bodyCh, d.receiptCh} { - for empty := false; !empty; { - select { - case <-ch: - default: - empty = true - } - } - } for empty := false; !empty; { select { case <-d.headerProcCh: @@ -400,20 +422,30 @@ func (d *Downloader) synchronise(id string, hash common.Hash, td *big.Int, mode defer d.Cancel() // No matter what, we can't leave the cancel channel open - // Set the requested sync mode, unless it's forbidden - d.mode = mode + // Atomically set the requested sync mode + atomic.StoreUint32(&d.mode, uint32(mode)) // Retrieve the origin peer and initiate the downloading process - p := d.peers.Peer(id) - if p == nil { - return errUnknownPeer + var p *peerConnection + if !beaconMode { // Beacon mode doesn't need a peer to sync from + p = d.peers.Peer(id) + if p == nil { + return errUnknownPeer + } + } + if beaconPing != nil { + close(beaconPing) } - return d.syncWithPeer(p, hash, td) + return d.syncWithPeer(p, hash, td, ttd, beaconMode) +} + +func (d *Downloader) getMode() SyncMode { + return SyncMode(atomic.LoadUint32(&d.mode)) } // syncWithPeer starts a block synchronization based on the hash chain from the // specified peer and head hash. -func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.Int) (err error) { +func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td, ttd *big.Int, beaconMode bool) (err error) { d.mux.Post(StartEvent{}) defer func() { // reset on error @@ -424,25 +456,78 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I d.mux.Post(DoneEvent{latest}) } }() - if p.version < 62 { - return errTooOld - } + mode := d.getMode() - log.Debug("Synchronising with the network", "peer", p.id, "eth", p.version, "head", hash, "td", td, "mode", d.mode) + if !beaconMode { + log.Debug("Synchronising with the network", "peer", p.id, "eth", p.version, "head", hash, "td", td, "mode", mode) + } else { + log.Debug("Backfilling with the network", "mode", mode) + } defer func(start time.Time) { log.Debug("Synchronisation terminated", "elapsed", common.PrettyDuration(time.Since(start))) }(time.Now()) // Look up the sync boundaries: the common ancestor and the target block - latest, err := d.fetchHeight(p) - if err != nil { - return err + var latest, pivot *types.Header + if !beaconMode { + // In legacy mode, use the master peer to retrieve the headers from + latest, pivot, err = d.fetchHead(p) + if err != nil { + return err + } + } else { + // In beacon mode, user the skeleton chain to retrieve the headers from + latest, _, err = d.skeleton.Bounds() + if err != nil { + return err + } + if latest.Number.Uint64() > uint64(fsMinFullBlocks) { + number := latest.Number.Uint64() - uint64(fsMinFullBlocks) + + // Retrieve the pivot header from the skeleton chain segment but + // fallback to local chain if it's not found in skeleton space. + if pivot = d.skeleton.Header(number); pivot == nil { + _, oldest, _ := d.skeleton.Bounds() // error is already checked + if number < oldest.Number.Uint64() { + count := int(oldest.Number.Uint64() - number) // it's capped by fsMinFullBlocks + headers := d.readHeaderRange(oldest, count) + if len(headers) == count { + pivot = headers[len(headers)-1] + log.Warn("Retrieved pivot header from local", "number", pivot.Number, "hash", pivot.Hash(), "latest", latest.Number, "oldest", oldest.Number) + } + } + } + // Print an error log and return directly in case the pivot header + // is still not found. It means the skeleton chain is not linked + // correctly with local chain. + if pivot == nil { + log.Error("Pivot header is not found", "number", number) + return errNoPivotHeader + } + } + } + // If no pivot block was returned, the head is below the min full block + // threshold (i.e. new chain). In that case we won't really snap sync + // anyway, but still need a valid pivot block to avoid some code hitting + // nil panics on access. + if mode == SnapSync && pivot == nil { + pivot = d.blockchain.CurrentBlock().Header() } height := latest.Number.Uint64() - origin, err := d.findAncestor(p, latest) - if err != nil { - return err + var origin uint64 + if !beaconMode { + // In legacy mode, reach out to the network and find the ancestor + origin, err = d.findAncestor(p, latest) + if err != nil { + return err + } + } else { + // In beacon mode, use the skeleton chain for the ancestor lookup + origin, err = d.findBeaconAncestor() + if err != nil { + return err + } } d.syncStatsLock.Lock() if d.syncStatsChainHeight <= origin || d.syncStatsChainOrigin > origin { @@ -451,25 +536,27 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I d.syncStatsChainHeight = height d.syncStatsLock.Unlock() - // Ensure our origin point is below any fast sync pivot point - pivot := uint64(0) - if d.mode == FastSync { + // Ensure our origin point is below any snap sync pivot point + if mode == SnapSync { if height <= uint64(fsMinFullBlocks) { origin = 0 } else { - pivot = height - uint64(fsMinFullBlocks) - if pivot <= origin { - origin = pivot - 1 + pivotNumber := pivot.Number.Uint64() + if pivotNumber <= origin { + origin = pivotNumber - 1 } + // Write out the pivot into the database so a rollback beyond it will + // reenable snap sync + rawdb.WriteLastPivotNumber(d.stateDB, pivotNumber) } } d.committed = 1 - if d.mode == FastSync && pivot != 0 { + if mode == SnapSync && pivot.Number.Uint64() != 0 { d.committed = 0 } - if d.mode == FastSync { + if mode == SnapSync { // Set the ancient data limitation. - // If we are running fast sync, all block data older than ancientLimit will be + // If we are running snap 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. // @@ -482,12 +569,15 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I // 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 { + if d.checkpoint != 0 && d.checkpoint > fullMaxForkAncestry+1 { d.ancientLimit = d.checkpoint - } else if height > maxForkAncestry+1 { - d.ancientLimit = height - maxForkAncestry - 1 + } else if height > fullMaxForkAncestry+1 { + d.ancientLimit = height - fullMaxForkAncestry - 1 + } else { + d.ancientLimit = 0 } 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 { @@ -498,28 +588,38 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I } // 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)) + if err := d.lightchain.SetHead(origin); err != nil { + return err } - d.lightchain.Rollback(hashes) } } // Initiate the sync using a concurrent header and content retrieval algorithm - d.queue.Prepare(origin+1, d.mode) + d.queue.Prepare(origin+1, mode) if d.syncInitHook != nil { d.syncInitHook(origin, height) } + var headerFetcher func() error + if !beaconMode { + // In legacy mode, headers are retrieved from the network + headerFetcher = func() error { return d.fetchHeaders(p, origin+1, latest.Number.Uint64()) } + } else { + // In beacon mode, headers are served by the skeleton syncer + headerFetcher = func() error { return d.fetchBeaconHeaders(origin + 1) } + } 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 - func() error { return d.fetchReceipts(origin + 1) }, // Receipts are retrieved during fast sync - func() error { return d.processHeaders(origin+1, pivot, td) }, + headerFetcher, // Headers are always retrieved + func() error { return d.fetchBodies(origin+1, beaconMode) }, // Bodies are retrieved during normal and snap sync + func() error { return d.fetchReceipts(origin+1, beaconMode) }, // Receipts are retrieved during snap sync + func() error { return d.processHeaders(origin+1, td, ttd, beaconMode) }, } - if d.mode == FastSync { - fetchers = append(fetchers, func() error { return d.processFastSyncContent(latest) }) - } else if d.mode == FullSync { - fetchers = append(fetchers, d.processFullSyncContent) + if mode == SnapSync { + d.pivotLock.Lock() + d.pivotHeader = pivot + d.pivotLock.Unlock() + + fetchers = append(fetchers, func() error { return d.processSnapSyncContent() }) + } else if mode == FullSync { + fetchers = append(fetchers, func() error { return d.processFullSyncContent(ttd, beaconMode) }) } return d.spawnSync(fetchers) } @@ -557,6 +657,8 @@ func (d *Downloader) spawnSync(fetchers []func() error) error { func (d *Downloader) cancel() { // Close the current cancel channel d.cancelLock.Lock() + defer d.cancelLock.Unlock() + if d.cancelCh != nil { select { case <-d.cancelCh: @@ -565,7 +667,6 @@ func (d *Downloader) cancel() { close(d.cancelCh) } } - d.cancelLock.Unlock() } // Cancel aborts all of the operations and waits for all download goroutines to @@ -573,9 +674,6 @@ 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. @@ -587,6 +685,9 @@ func (d *Downloader) Terminate() { case <-d.quitCh: default: close(d.quitCh) + + // Terminate the internal beacon syncer + d.skeleton.Terminate() } d.quitLock.Unlock() @@ -594,51 +695,47 @@ func (d *Downloader) Terminate() { d.Cancel() } -// fetchHeight retrieves the head header of the remote peer to aid in estimating -// the total time a pending synchronisation would take. -func (d *Downloader) fetchHeight(p *peerConnection) (*types.Header, error) { - p.log.Debug("Retrieving remote chain height") +// fetchHead retrieves the head header and prior pivot block (if available) from +// a remote peer. +func (d *Downloader) fetchHead(p *peerConnection) (head *types.Header, pivot *types.Header, err error) { + p.log.Debug("Retrieving remote chain head") + mode := d.getMode() // Request the advertised remote head block and wait for the response - head, _ := p.peer.Head() - go p.peer.RequestHeadersByHash(head, 1, 0, false) - - ttl := d.requestTTL() - timeout := time.After(ttl) - for { - select { - case <-d.cancelCh: - return nil, errCanceled - - case packet := <-d.headerCh: - // Discard anything not from the origin peer - if packet.PeerId() != p.id { - log.Debug("Received headers from incorrect peer", "peer", packet.PeerId()) - break - } - // Make sure the peer actually gave something valid - headers := packet.(*headerPack).headers - if len(headers) != 1 { - p.log.Debug("Multiple headers for single request", "headers", len(headers)) - 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 - - case <-timeout: - p.log.Debug("Waiting for head header timed out", "elapsed", ttl) - return nil, errTimeout - - case <-d.bodyCh: - case <-d.receiptCh: - // Out of bounds delivery, ignore + latest, _ := p.peer.Head() + fetch := 1 + if mode == SnapSync { + fetch = 2 // head + pivot headers + } + headers, hashes, err := d.fetchHeadersByHash(p, latest, fetch, fsMinFullBlocks-1, true) + if err != nil { + return nil, nil, err + } + // Make sure the peer gave us at least one and at most the requested headers + if len(headers) == 0 || len(headers) > fetch { + return nil, nil, fmt.Errorf("%w: returned headers %d != requested %d", errBadPeer, len(headers), fetch) + } + // The first header needs to be the head, validate against the checkpoint + // and request. If only 1 header was returned, make sure there's no pivot + // or there was not one requested. + head = headers[0] + if (mode == SnapSync || mode == LightSync) && head.Number.Uint64() < d.checkpoint { + return nil, nil, fmt.Errorf("%w: remote head %d below checkpoint %d", errUnsyncedPeer, head.Number, d.checkpoint) + } + if len(headers) == 1 { + if mode == SnapSync && head.Number.Uint64() > uint64(fsMinFullBlocks) { + return nil, nil, fmt.Errorf("%w: no pivot included along head header", errBadPeer) } + p.log.Debug("Remote head identified, no pivot", "number", head.Number, "hash", hashes[0]) + return head, nil, nil + } + // At this point we have 2 headers in total and the first is the + // validated head of the chain. Check the pivot number and return, + pivot = headers[1] + if pivot.Number.Uint64() != head.Number.Uint64()-uint64(fsMinFullBlocks) { + return nil, nil, fmt.Errorf("%w: remote pivot %d != requested %d", errInvalidChain, pivot.Number, head.Number.Uint64()-uint64(fsMinFullBlocks)) } + return head, pivot, nil } // calculateRequestSpan calculates what headers to request from a peer when trying to determine the @@ -664,7 +761,7 @@ func calculateRequestSpan(remoteHeight, localHeight uint64) (int64, int, int, ui requestHead = 0 } // requestBottom is the lowest block we want included in the query - // Ideally, we want to include just below own head + // Ideally, we want to include the one just below our own head requestBottom := int(localHeight - 1) if requestBottom < 0 { requestBottom = 0 @@ -705,10 +802,11 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) localHeight uint64 remoteHeight = remoteHeader.Number.Uint64() ) - switch d.mode { + mode := d.getMode() + switch mode { case FullSync: localHeight = d.blockchain.CurrentBlock().NumberU64() - case FastSync: + case SnapSync: localHeight = d.blockchain.CurrentFastBlock().NumberU64() default: localHeight = d.lightchain.CurrentHeader().Number.Uint64() @@ -716,14 +814,18 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight) // Recap floor value for binary search + maxForkAncestry := fullMaxForkAncestry + if d.getMode() == LightSync { + maxForkAncestry = lightMaxForkAncestry + } 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 mode == LightSync { + // If we don't know the current CHT position, find it if d.genesis == 0 { header := d.lightchain.CurrentHeader() for header != nil { @@ -740,75 +842,71 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) } } + ancestor, err := d.findAncestorSpanSearch(p, mode, remoteHeight, localHeight, floor) + if err == nil { + return ancestor, nil + } + // The returned error was not nil. + // If the error returned does not reflect that a common ancestor was not found, return it. + // If the error reflects that a common ancestor was not found, continue to binary search, + // where the error value will be reassigned. + if !errors.Is(err, errNoAncestorFound) { + return 0, err + } + + ancestor, err = d.findAncestorBinarySearch(p, mode, remoteHeight, floor) + if err != nil { + return 0, err + } + return ancestor, nil +} + +func (d *Downloader) findAncestorSpanSearch(p *peerConnection, mode SyncMode, remoteHeight, localHeight uint64, floor int64) (uint64, error) { from, count, skip, max := calculateRequestSpan(remoteHeight, localHeight) p.log.Trace("Span searching for common ancestor", "count", count, "from", from, "skip", skip) - go p.peer.RequestHeadersByNumber(uint64(from), count, skip, false) - + headers, hashes, err := d.fetchHeadersByNumber(p, uint64(from), count, skip, false) + if err != nil { + return 0, err + } // Wait for the remote response to the head fetch number, hash := uint64(0), common.Hash{} - ttl := d.requestTTL() - timeout := time.After(ttl) - - for finished := false; !finished; { - select { - case <-d.cancelCh: - return 0, errCanceled - - case packet := <-d.headerCh: - // Discard anything not from the origin peer - if packet.PeerId() != p.id { - log.Debug("Received headers from incorrect peer", "peer", packet.PeerId()) - break - } - // Make sure the peer actually gave something valid - headers := packet.(*headerPack).headers - if len(headers) == 0 { - p.log.Warn("Empty head header set") - return 0, errEmptyHeaderSet - } - // Make sure the peer's reply conforms to the request - for i, header := range headers { - 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) - return 0, errInvalidChain - } - } - // Check if a common ancestor was found - finished = true - for i := len(headers) - 1; i >= 0; i-- { - // Skip any headers that underflow/overflow our requested set - if headers[i].Number.Int64() < from || headers[i].Number.Uint64() > max { - continue - } - // Otherwise check if we already know the header or not - h := headers[i].Hash() - n := headers[i].Number.Uint64() - - var known bool - switch d.mode { - case FullSync: - known = d.blockchain.HasBlock(h, n) - case FastSync: - known = d.blockchain.HasFastBlock(h, n) - default: - known = d.lightchain.HasHeader(h, n) - } - if known { - number, hash = n, h - break - } - } - - case <-timeout: - p.log.Debug("Waiting for head header timed out", "elapsed", ttl) - return 0, errTimeout - - case <-d.bodyCh: - case <-d.receiptCh: - // Out of bounds delivery, ignore + // Make sure the peer actually gave something valid + if len(headers) == 0 { + p.log.Warn("Empty head header set") + return 0, errEmptyHeaderSet + } + // Make sure the peer's reply conforms to the request + for i, header := range headers { + 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) + return 0, fmt.Errorf("%w: %v", errInvalidChain, errors.New("head headers broke chain ordering")) + } + } + // Check if a common ancestor was found + for i := len(headers) - 1; i >= 0; i-- { + // Skip any headers that underflow/overflow our requested set + if headers[i].Number.Int64() < from || headers[i].Number.Uint64() > max { + continue + } + // Otherwise check if we already know the header or not + h := hashes[i] + n := headers[i].Number.Uint64() + + var known bool + switch mode { + case FullSync: + known = d.blockchain.HasBlock(h, n) + case SnapSync: + known = d.blockchain.HasFastBlock(h, n) + default: + known = d.lightchain.HasHeader(h, n) + } + if known { + number, hash = n, h + break } } // If the head fetch already found an ancestor, return @@ -820,6 +918,12 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) p.log.Debug("Found common ancestor", "number", number, "hash", hash) return number, nil } + return 0, errNoAncestorFound +} + +func (d *Downloader) findAncestorBinarySearch(p *peerConnection, mode SyncMode, remoteHeight uint64, floor int64) (uint64, error) { + hash := common.Hash{} + // Ancestor not found, we need to binary search over our chain start, end := uint64(0), remoteHeight if floor > 0 { @@ -831,65 +935,39 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) // Split our chain interval in two, and request the hash to cross check check := (start + end) / 2 - ttl := d.requestTTL() - timeout := time.After(ttl) - - go p.peer.RequestHeadersByNumber(check, 1, 0, false) - - // Wait until a reply arrives to this request - for arrived := false; !arrived; { - select { - case <-d.cancelCh: - return 0, errCanceled - - case packer := <-d.headerCh: - // Discard anything not from the origin peer - if packer.PeerId() != p.id { - log.Debug("Received headers from incorrect peer", "peer", packer.PeerId()) - break - } - // Make sure the peer actually gave something valid - headers := packer.(*headerPack).headers - if len(headers) != 1 { - p.log.Debug("Multiple headers for single request", "headers", len(headers)) - return 0, errBadPeer - } - arrived = true - - // Modify the search interval based on the response - h := headers[0].Hash() - n := headers[0].Number.Uint64() - - var known bool - switch d.mode { - case FullSync: - known = d.blockchain.HasBlock(h, n) - case FastSync: - known = d.blockchain.HasFastBlock(h, n) - default: - known = d.lightchain.HasHeader(h, n) - } - if !known { - end = check - break - } - header := d.lightchain.GetHeaderByHash(h) // Independent of sync mode, header surely exists - if header.Number.Uint64() != check { - p.log.Debug("Received non requested header", "number", header.Number, "hash", header.Hash(), "request", check) - return 0, errBadPeer - } - start = check - hash = h - - case <-timeout: - p.log.Debug("Waiting for search header timed out", "elapsed", ttl) - return 0, errTimeout - - case <-d.bodyCh: - case <-d.receiptCh: - // Out of bounds delivery, ignore - } + headers, hashes, err := d.fetchHeadersByNumber(p, check, 1, 0, false) + if err != nil { + return 0, err + } + // Make sure the peer actually gave something valid + if len(headers) != 1 { + p.log.Warn("Multiple headers for single request", "headers", len(headers)) + return 0, fmt.Errorf("%w: multiple headers (%d) for single request", errBadPeer, len(headers)) + } + // Modify the search interval based on the response + h := hashes[0] + n := headers[0].Number.Uint64() + + var known bool + switch mode { + case FullSync: + known = d.blockchain.HasBlock(h, n) + case SnapSync: + known = d.blockchain.HasFastBlock(h, n) + default: + known = d.lightchain.HasHeader(h, n) } + if !known { + end = check + continue + } + header := d.lightchain.GetHeaderByHash(h) // Independent of sync mode, header surely exists + if header.Number.Uint64() != check { + p.log.Warn("Received non requested header", "number", header.Number, "hash", header.Hash(), "request", check) + return 0, fmt.Errorf("%w: non-requested header (%d)", errBadPeer, header.Number) + } + start = check + hash = h } // Ensure valid ancestry and return if int64(start) <= floor { @@ -908,166 +986,216 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) // other peers are only accepted if they map cleanly to the skeleton. If no one // can fill in the skeleton - not even the origin peer - it's assumed invalid and // the origin is dropped. -func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) error { +func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, head uint64) error { p.log.Debug("Directing header downloads", "origin", from) defer p.log.Debug("Header download terminated") - // Create a timeout timer, and the associated header fetcher - skeleton := true // Skeleton assembly phase or finishing up - request := time.Now() // time of the last skeleton fetch request - timeout := time.NewTimer(0) // timer to dump a non-responsive active peer - <-timeout.C // timeout channel should be initially empty - defer timeout.Stop() - - var ttl time.Duration - getHeaders := func(from uint64) { - request = time.Now() + // Start pulling the header chain skeleton until all is done + var ( + skeleton = true // Skeleton assembly phase or finishing up + pivoting = false // Whether the next request is pivot verification + ancestor = from + mode = d.getMode() + ) + for { + // Pull the next batch of headers, it either: + // - Pivot check to see if the chain moved too far + // - Skeleton retrieval to permit concurrent header fetches + // - Full header retrieval if we're near the chain head + var ( + headers []*types.Header + hashes []common.Hash + err error + ) + switch { + case pivoting: + d.pivotLock.RLock() + pivot := d.pivotHeader.Number.Uint64() + d.pivotLock.RUnlock() - ttl = d.requestTTL() - timeout.Reset(ttl) + p.log.Trace("Fetching next pivot header", "number", pivot+uint64(fsMinFullBlocks)) + headers, hashes, err = d.fetchHeadersByNumber(p, pivot+uint64(fsMinFullBlocks), 2, fsMinFullBlocks-9, false) // move +64 when it's 2x64-8 deep - if skeleton { + case skeleton: p.log.Trace("Fetching skeleton headers", "count", MaxHeaderFetch, "from", from) - go p.peer.RequestHeadersByNumber(from+uint64(MaxHeaderFetch)-1, MaxSkeletonSize, MaxHeaderFetch-1, false) - } else { + headers, hashes, err = d.fetchHeadersByNumber(p, from+uint64(MaxHeaderFetch)-1, MaxSkeletonSize, MaxHeaderFetch-1, false) + + default: p.log.Trace("Fetching full headers", "count", MaxHeaderFetch, "from", from) - go p.peer.RequestHeadersByNumber(from, MaxHeaderFetch, 0, false) + headers, hashes, err = d.fetchHeadersByNumber(p, from, MaxHeaderFetch, 0, false) } - } - // Start pulling the header chain skeleton until all is done - ancestor := from - getHeaders(from) + switch err { + case nil: + // Headers retrieved, continue with processing - for { - select { - case <-d.cancelCh: - return errCanceled + case errCanceled: + // Sync cancelled, no issue, propagate up + return err - case packet := <-d.headerCh: - // Make sure the active peer is giving us the skeleton headers - if packet.PeerId() != p.id { - log.Debug("Received skeleton from incorrect peer", "peer", packet.PeerId()) - break - } - headerReqTimer.UpdateSince(request) - timeout.Stop() + default: + // Header retrieval either timed out, or the peer failed in some strange way + // (e.g. disconnect). Consider the master peer bad and drop + d.dropPeer(p.id) - // If the skeleton's finished, pull any remaining head headers directly from the origin - if packet.Items() == 0 && skeleton { - skeleton = false - getHeaders(from) - continue - } - // If no more headers are inbound, notify the content fetchers and return - if packet.Items() == 0 { - // Don't abort header fetches while the pivot is downloading - if atomic.LoadInt32(&d.committed) == 0 && pivot <= from { - p.log.Debug("No headers, waiting for pivot commit") - select { - case <-time.After(fsHeaderContCheck): - getHeaders(from) - continue - case <-d.cancelCh: - return errCanceled - } - } - // Pivot done (or not in fast sync) and no more headers, terminate the process - p.log.Debug("No more headers available") + // Finish the sync gracefully instead of dumping the gathered data though + for _, ch := range []chan bool{d.queue.blockWakeCh, d.queue.receiptWakeCh} { select { - case d.headerProcCh <- nil: - return nil + case ch <- false: case <-d.cancelCh: - return errCanceled } } - headers := packet.(*headerPack).headers + select { + case d.headerProcCh <- nil: + case <-d.cancelCh: + } + return fmt.Errorf("%w: header request failed: %v", errBadPeer, err) + } + // If the pivot is being checked, move if it became stale and run the real retrieval + var pivot uint64 - // If we received a skeleton batch, resolve internals concurrently - if skeleton { - filled, proced, err := d.fillHeaderSkeleton(from, headers) - if err != nil { - p.log.Debug("Skeleton chain invalid", "err", err) - return errInvalidChain + d.pivotLock.RLock() + if d.pivotHeader != nil { + pivot = d.pivotHeader.Number.Uint64() + } + d.pivotLock.RUnlock() + + if pivoting { + if len(headers) == 2 { + if have, want := headers[0].Number.Uint64(), pivot+uint64(fsMinFullBlocks); have != want { + log.Warn("Peer sent invalid next pivot", "have", have, "want", want) + return fmt.Errorf("%w: next pivot number %d != requested %d", errInvalidChain, have, want) } - headers = filled[proced:] - from += uint64(proced) - } else { - // If we're closing in on the chain head, but haven't yet reached it, delay - // the last few headers so mini reorgs on the head don't cause invalid hash - // chain errors. - if n := len(headers); n > 0 { - // Retrieve the current head we're at - var head uint64 - if d.mode == LightSync { - head = d.lightchain.CurrentHeader().Number.Uint64() - } else { - head = d.blockchain.CurrentFastBlock().NumberU64() - if full := d.blockchain.CurrentBlock().NumberU64(); head < full { - 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 - if delay > n { - delay = n - } - headers = headers[:n-delay] - } + if have, want := headers[1].Number.Uint64(), pivot+2*uint64(fsMinFullBlocks)-8; have != want { + log.Warn("Peer sent invalid pivot confirmer", "have", have, "want", want) + return fmt.Errorf("%w: next pivot confirmer number %d != requested %d", errInvalidChain, have, want) } + log.Warn("Pivot seemingly stale, moving", "old", pivot, "new", headers[0].Number) + pivot = headers[0].Number.Uint64() + + d.pivotLock.Lock() + d.pivotHeader = headers[0] + d.pivotLock.Unlock() + + // Write out the pivot into the database so a rollback beyond + // it will reenable snap sync and update the state root that + // the state syncer will be downloading. + rawdb.WriteLastPivotNumber(d.stateDB, pivot) } - // Insert all the new headers and fetch the next batch - if len(headers) > 0 { - p.log.Trace("Scheduling new headers", "count", len(headers), "from", from) - select { - case d.headerProcCh <- headers: - case <-d.cancelCh: - return errCanceled - } - from += uint64(len(headers)) - getHeaders(from) - } else { - // No headers delivered, or all of them being delayed, sleep a bit and retry - p.log.Trace("All headers delayed, waiting") + // Disable the pivot check and fetch the next batch of headers + pivoting = false + continue + } + // If the skeleton's finished, pull any remaining head headers directly from the origin + if skeleton && len(headers) == 0 { + // A malicious node might withhold advertised headers indefinitely + if from+uint64(MaxHeaderFetch)-1 <= head { + p.log.Warn("Peer withheld skeleton headers", "advertised", head, "withheld", from+uint64(MaxHeaderFetch)-1) + return fmt.Errorf("%w: withheld skeleton headers: advertised %d, withheld #%d", errStallingPeer, head, from+uint64(MaxHeaderFetch)-1) + } + p.log.Debug("No skeleton, fetching headers directly") + skeleton = false + continue + } + // If no more headers are inbound, notify the content fetchers and return + if len(headers) == 0 { + // Don't abort header fetches while the pivot is downloading + if atomic.LoadInt32(&d.committed) == 0 && pivot <= from { + p.log.Debug("No headers, waiting for pivot commit") select { case <-time.After(fsHeaderContCheck): - getHeaders(from) continue case <-d.cancelCh: return errCanceled } } - - case <-timeout.C: - 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 - p.log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", p.id) - break + // Pivot done (or not in snap sync) and no more headers, terminate the process + p.log.Debug("No more headers available") + select { + case d.headerProcCh <- nil: + return nil + case <-d.cancelCh: + return errCanceled } - // Header retrieval timed out, consider the peer bad and drop - p.log.Debug("Header request timed out", "elapsed", ttl) - headerTimeoutMeter.Mark(1) - d.dropPeer(p.id) + } + // If we received a skeleton batch, resolve internals concurrently + var progressed bool + if skeleton { + filled, hashset, proced, err := d.fillHeaderSkeleton(from, headers) + if err != nil { + p.log.Debug("Skeleton chain invalid", "err", err) + return fmt.Errorf("%w: %v", errInvalidChain, err) + } + headers = filled[proced:] + hashes = hashset[proced:] - // Finish the sync gracefully instead of dumping the gathered data though - for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { - select { - case ch <- false: - case <-d.cancelCh: + progressed = proced > 0 + from += uint64(proced) + } else { + // A malicious node might withhold advertised headers indefinitely + if n := len(headers); n < MaxHeaderFetch && headers[n-1].Number.Uint64() < head { + p.log.Warn("Peer withheld headers", "advertised", head, "delivered", headers[n-1].Number.Uint64()) + return fmt.Errorf("%w: withheld headers: advertised %d, delivered %d", errStallingPeer, head, headers[n-1].Number.Uint64()) + } + // If we're closing in on the chain head, but haven't yet reached it, delay + // the last few headers so mini reorgs on the head don't cause invalid hash + // chain errors. + if n := len(headers); n > 0 { + // Retrieve the current head we're at + var head uint64 + if mode == LightSync { + head = d.lightchain.CurrentHeader().Number.Uint64() + } else { + head = d.blockchain.CurrentFastBlock().NumberU64() + if full := d.blockchain.CurrentBlock().NumberU64(); head < full { + 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 + if delay > n { + delay = n + } + headers = headers[:n-delay] + hashes = hashes[:n-delay] } } + } + // If no headers have bene delivered, or all of them have been delayed, + // sleep a bit and retry. Take care with headers already consumed during + // skeleton filling + if len(headers) == 0 && !progressed { + p.log.Trace("All headers delayed, waiting") select { - case d.headerProcCh <- nil: + case <-time.After(fsHeaderContCheck): + continue case <-d.cancelCh: + return errCanceled + } + } + // Insert any remaining new headers and fetch the next batch + if len(headers) > 0 { + p.log.Trace("Scheduling new headers", "count", len(headers), "from", from) + select { + case d.headerProcCh <- &headerTask{ + headers: headers, + hashes: hashes, + }: + case <-d.cancelCh: + return errCanceled } - return errBadPeer + from += uint64(len(headers)) + } + // If we're still skeleton filling snap sync, check pivot staleness + // before continuing to the next skeleton filling + if skeleton && pivot > 0 { + pivoting = true } } } @@ -1081,53 +1209,27 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) // // The method returns the entire filled skeleton and also the number of headers // already forwarded for processing. -func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header) ([]*types.Header, int, error) { +func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header) ([]*types.Header, []common.Hash, int, error) { log.Debug("Filling up skeleton", "from", from) d.queue.ScheduleSkeleton(from, skeleton) - var ( - deliver = func(packet dataPack) (int, error) { - pack := packet.(*headerPack) - return d.queue.DeliverHeaders(pack.peerID, pack.headers, d.headerProcCh) - } - expire = func() map[string]int { return d.queue.ExpireHeaders(d.requestTTL()) } - throttle = func() bool { return false } - reserve = func(p *peerConnection, count int) (*fetchRequest, bool, error) { - return d.queue.ReserveHeaders(p, count), false, nil - } - fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchHeaders(req.From, MaxHeaderFetch) } - capacity = func(p *peerConnection) int { return p.HeaderCapacity(d.requestRTT()) } - setIdle = func(p *peerConnection, accepted int) { p.SetHeadersIdle(accepted) } - ) - 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") - - log.Debug("Skeleton fill terminated", "err", err) - - filled, proced := d.queue.RetrieveHeaders() - return filled, proced, err + err := d.concurrentFetch((*headerQueue)(d), false) + if err != nil { + log.Debug("Skeleton fill failed", "err", err) + } + filled, hashes, proced := d.queue.RetrieveHeaders() + if err == nil { + log.Debug("Skeleton fill succeeded", "filled", len(filled), "processed", proced) + } + return filled, hashes, proced, err } // fetchBodies iteratively downloads the scheduled block bodies, taking any // available peers, reserving a chunk of blocks for each, waiting for delivery // and also periodically checking for timeouts. -func (d *Downloader) fetchBodies(from uint64) error { +func (d *Downloader) fetchBodies(from uint64, beaconMode bool) error { log.Debug("Downloading block bodies", "origin", from) - - var ( - deliver = func(packet dataPack) (int, error) { - pack := packet.(*bodyPack) - return d.queue.DeliverBodies(pack.peerID, pack.transactions, pack.uncles) - } - expire = func() map[string]int { return d.queue.ExpireBodies(d.requestTTL()) } - fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchBodies(req) } - capacity = func(p *peerConnection) int { return p.BlockCapacity(d.requestRTT()) } - setIdle = func(p *peerConnection, accepted int) { p.SetBodiesIdle(accepted) } - ) - 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") + err := d.concurrentFetch((*bodyQueue)(d), beaconMode) log.Debug("Block body download terminated", "err", err) return err @@ -1136,313 +1238,114 @@ func (d *Downloader) fetchBodies(from uint64) error { // fetchReceipts iteratively downloads the scheduled block receipts, taking any // available peers, reserving a chunk of receipts for each, waiting for delivery // and also periodically checking for timeouts. -func (d *Downloader) fetchReceipts(from uint64) error { - log.Debug("Downloading transaction receipts", "origin", from) - - var ( - deliver = func(packet dataPack) (int, error) { - pack := packet.(*receiptPack) - return d.queue.DeliverReceipts(pack.peerID, pack.receipts) - } - expire = func() map[string]int { return d.queue.ExpireReceipts(d.requestTTL()) } - fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchReceipts(req) } - capacity = func(p *peerConnection) int { return p.ReceiptCapacity(d.requestRTT()) } - setIdle = func(p *peerConnection, accepted int) { p.SetReceiptsIdle(accepted) } - ) - 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") +func (d *Downloader) fetchReceipts(from uint64, beaconMode bool) error { + log.Debug("Downloading receipts", "origin", from) + err := d.concurrentFetch((*receiptQueue)(d), beaconMode) - log.Debug("Transaction receipt download terminated", "err", err) + log.Debug("Receipt download terminated", "err", err) return err } -// fetchParts iteratively downloads scheduled block parts, taking any available -// peers, reserving a chunk of fetch requests for each, waiting for delivery and -// also periodically checking for timeouts. -// -// As the scheduling/timeout logic mostly is the same for all downloaded data -// types, this method is used by each for data gathering and is instrumented with -// various callbacks to handle the slight differences between processing them. -// -// The instrumentation parameters: -// - errCancel: error type to return if the fetch operation is cancelled (mostly makes logging nicer) -// - deliveryCh: channel from which to retrieve downloaded data packets (merged from all concurrent peers) -// - deliver: processing callback to deliver data packets into type specific download queues (usually within `queue`) -// - wakeCh: notification channel for waking the fetcher when new tasks are available (or sync completed) -// - expire: task callback method to abort requests that took too long and return the faulty peers (traffic shaping) -// - pending: task callback for the number of requests still needing download (detect completion/non-completability) -// - inFlight: task callback for the number of in-progress requests (wait for all active downloads to finish) -// - throttle: task callback to check if the processing queue is full and activate throttling (bound memory use) -// - reserve: task callback to reserve new download tasks to a particular peer (also signals partial completions) -// - fetchHook: tester callback to notify of new tasks being initiated (allows testing the scheduling logic) -// - fetch: network callback to actually send a particular download request to a physical remote peer -// - cancel: task callback to abort an in-flight download request and allow rescheduling it (in case of lost peer) -// - capacity: network callback to retrieve the estimated type-specific bandwidth capacity of a peer (traffic shaping) -// - 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(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 { - - // Create a ticker to detect expired retrieval tasks - ticker := time.NewTicker(100 * time.Millisecond) - defer ticker.Stop() - - update := make(chan struct{}, 1) - - // Prepare the queue and fetch block parts until the block header fetcher's done - finished := false - for { - select { - case <-d.cancelCh: - return errCanceled - - case packet := <-deliveryCh: - // If the peer was previously banned and failed to deliver its pack - // in a reasonable time frame, ignore its message. - if peer := d.peers.Peer(packet.PeerId()); peer != nil { - // Deliver the received chunk of data and check chain validity - accepted, err := deliver(packet) - if err == errInvalidChain { - return err - } - // Unless a peer delivered something completely else than requested (usually - // caused by a timed out request which came through in the end), set it to - // idle. If the delivery's stale, the peer should have already been idled. - if err != errStaleDelivery { - setIdle(peer, accepted) - } - // Issue a log to the user to see what's going on - switch { - case err == nil && packet.Items() == 0: - peer.log.Trace("Requested data not delivered", "type", kind) - case err == nil: - peer.log.Trace("Delivered new batch of data", "type", kind, "count", packet.Stats()) - default: - peer.log.Trace("Failed to deliver retrieved data", "type", kind, "err", err) - } - } - // Blocks assembled, try to update the progress - select { - case update <- struct{}{}: - default: - } - - case cont := <-wakeCh: - // The header fetcher sent a continuation flag, check if it's done - if !cont { - finished = true - } - // Headers arrive, try to update the progress - select { - case update <- struct{}{}: - default: - } - - case <-ticker.C: - // Sanity check update the progress - select { - case update <- struct{}{}: - default: - } - - case <-update: - // Short circuit if we lost all our peers - if d.peers.Len() == 0 { - return errNoPeers - } - // Check for fetch request timeouts and demote the responsible peers - for pid, fails := range expire() { - if peer := d.peers.Peer(pid); peer != nil { - // If a lot of retrieval elements expired, we might have overestimated the remote peer or perhaps - // ourselves. Only reset to minimal throughput but don't drop just yet. If even the minimal times - // out that sync wise we need to get rid of the peer. - // - // The reason the minimum threshold is 2 is because the downloader tries to estimate the bandwidth - // and latency of a peer separately, which requires pushing the measures capacity a bit and seeing - // how response times reacts, to it always requests one more than the minimum (i.e. min 2). - if fails > 2 { - peer.log.Trace("Data delivery timed out", "type", kind) - 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 - } - } - } - } - } - // If there's nothing more to fetch, wait or terminate - if pending() == 0 { - if !inFlight() && finished { - log.Debug("Data fetching completed", "type", kind) - return nil - } - break - } - // Send a download request to all idle peers, until throttled - progressed, throttled, running := false, false, inFlight() - idles, total := idle() - - for _, peer := range idles { - // Short circuit if throttling activated - if throttle() { - throttled = true - break - } - // Short circuit if there is no more available task. - if pending() == 0 { - break - } - // Reserve a chunk of fetches for a peer. A nil can mean either that - // no more headers are available, or that the peer is known not to - // have them. - request, progress, err := reserve(peer, capacity(peer)) - if err != nil { - return err - } - if progress { - progressed = true - } - if request == nil { - continue - } - if request.From > 0 { - peer.log.Trace("Requesting new batch of data", "type", kind, "from", request.From) - } else { - peer.log.Trace("Requesting new batch of data", "type", kind, "count", len(request.Headers), "from", request.Headers[0].Number) - } - // Fetch the chunk and make sure any errors return the hashes to the queue - if fetchHook != nil { - fetchHook(request.Headers) - } - if err := fetch(peer, request); err != nil { - // Although we could try and make an attempt to fix this, this error really - // means that we've double allocated a fetch task to a peer. If that is the - // case, the internal state of the downloader and the queue is very wrong so - // better hard crash and note the error instead of silently accumulating into - // a much bigger issue. - panic(fmt.Sprintf("%v: %s fetch assignment failed", peer, kind)) - } - running = true - } - // Make sure that we have peers available for fetching. If all peers have been tried - // and all failed throw an error - if !progressed && !throttled && !running && len(idles) == total && pending() > 0 { - return errPeersUnavailable - } - } - } -} - // processHeaders takes batches of retrieved headers from an input channel and // keeps processing and scheduling them into the header chain and downloader's // queue until the stream ends or a failure occurs. -func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) error { +func (d *Downloader) processHeaders(origin uint64, td, ttd *big.Int, beaconMode bool) error { // Keep a count of uncertain headers to roll back - var rollback []*types.Header + var ( + rollback uint64 // Zero means no rollback (fine as you can't unroll the genesis) + rollbackErr error + mode = d.getMode() + ) defer func() { - if len(rollback) > 0 { - // Flatten the headers and roll them back - hashes := make([]common.Hash, len(rollback)) - for i, header := range rollback { - hashes[i] = header.Hash() - } + if rollback > 0 { lastHeader, lastFastBlock, lastBlock := d.lightchain.CurrentHeader().Number, common.Big0, common.Big0 - if d.mode != LightSync { + if mode != LightSync { lastFastBlock = d.blockchain.CurrentFastBlock().Number() lastBlock = d.blockchain.CurrentBlock().Number() } - d.lightchain.Rollback(hashes) + if err := d.lightchain.SetHead(rollback - 1); err != nil { // -1 to target the parent of the first uncertain block + // We're already unwinding the stack, only print the error to make it more visible + log.Error("Failed to roll back chain segment", "head", rollback-1, "err", err) + } curFastBlock, curBlock := common.Big0, common.Big0 - if d.mode != LightSync { + if mode != LightSync { curFastBlock = d.blockchain.CurrentFastBlock().Number() curBlock = d.blockchain.CurrentBlock().Number() } - log.Warn("Rolled back headers", "count", len(hashes), + log.Warn("Rolled back chain segment", "header", fmt.Sprintf("%d->%d", lastHeader, d.lightchain.CurrentHeader().Number), - "fast", fmt.Sprintf("%d->%d", lastFastBlock, curFastBlock), - "block", fmt.Sprintf("%d->%d", lastBlock, curBlock)) + "snap", fmt.Sprintf("%d->%d", lastFastBlock, curFastBlock), + "block", fmt.Sprintf("%d->%d", lastBlock, curBlock), "reason", rollbackErr) } }() - // Wait for batches of headers to process gotHeaders := false for { select { case <-d.cancelCh: + rollbackErr = errCanceled return errCanceled - case headers := <-d.headerProcCh: + case task := <-d.headerProcCh: // Terminate header processing if we synced up - if len(headers) == 0 { + if task == nil || len(task.headers) == 0 { // Notify everyone that headers are fully processed - for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + for _, ch := range []chan bool{d.queue.blockWakeCh, d.queue.receiptWakeCh} { select { case ch <- false: case <-d.cancelCh: } } - // If no headers were retrieved at all, the peer violated its TD promise that it had a - // better chain compared to ours. The only exception is if its promised blocks were - // already imported by other means (e.g. fetcher): - // - // R , L : Both at block 10 - // R: Mine block 11, and propagate it to L - // L: Queue block 11 for import - // L: Notice that R's head and TD increased compared to ours, start sync - // L: Import of block 11 finishes - // L: Sync begins, and finds common ancestor at 11 - // L: Request new headers up from 11 (R's TD was higher, it must have something) - // R: Nothing to give - if d.mode != LightSync { - head := d.blockchain.CurrentBlock() - if !gotHeaders && td.Cmp(d.blockchain.GetTd(head.Hash(), head.NumberU64())) > 0 { - return errStallingPeer + // If we're in legacy sync mode, we need to check total difficulty + // violations from malicious peers. That is not needed in beacon + // mode and we can skip to terminating sync. + if !beaconMode { + // If no headers were retrieved at all, the peer violated its TD promise that it had a + // better chain compared to ours. The only exception is if its promised blocks were + // already imported by other means (e.g. fetcher): + // + // R , L : Both at block 10 + // R: Mine block 11, and propagate it to L + // L: Queue block 11 for import + // L: Notice that R's head and TD increased compared to ours, start sync + // L: Import of block 11 finishes + // L: Sync begins, and finds common ancestor at 11 + // L: Request new headers up from 11 (R's TD was higher, it must have something) + // R: Nothing to give + if mode != LightSync { + head := d.blockchain.CurrentBlock() + if !gotHeaders && td.Cmp(d.blockchain.GetTd(head.Hash(), head.NumberU64())) > 0 { + return errStallingPeer + } } - } - // If fast or light syncing, ensure promised headers are indeed delivered. This is - // needed to detect scenarios where an attacker feeds a bad pivot and then bails out - // of delivering the post-pivot blocks that would flag the invalid content. - // - // This check cannot be executed "as is" for full imports, since blocks may still be - // queued for processing when the header download completes. However, as long as the - // peer gave us something useful, we're already happy/progressed (above check). - if d.mode == FastSync || d.mode == LightSync { - head := d.lightchain.CurrentHeader() - if td.Cmp(d.lightchain.GetTd(head.Hash(), head.Number.Uint64())) > 0 { - return errStallingPeer + // If snap or light syncing, ensure promised headers are indeed delivered. This is + // needed to detect scenarios where an attacker feeds a bad pivot and then bails out + // of delivering the post-pivot blocks that would flag the invalid content. + // + // This check cannot be executed "as is" for full imports, since blocks may still be + // queued for processing when the header download completes. However, as long as the + // peer gave us something useful, we're already happy/progressed (above check). + if mode == SnapSync || mode == LightSync { + head := d.lightchain.CurrentHeader() + if td.Cmp(d.lightchain.GetTd(head.Hash(), head.Number.Uint64())) > 0 { + return errStallingPeer + } } } // Disable any rollback and return - rollback = nil + rollback = 0 return nil } // Otherwise split the chunk of headers into batches and process them + headers, hashes := task.headers, task.hashes + gotHeaders = true for len(headers) > 0 { // Terminate if something failed in between processing chunks select { case <-d.cancelCh: + rollbackErr = errCanceled return errCanceled default: } @@ -1451,53 +1354,104 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er if limit > len(headers) { limit = len(headers) } - chunk := headers[:limit] + chunkHeaders := headers[:limit] + chunkHashes := hashes[: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(chunk)) - for _, header := range chunk { - if !d.lightchain.HasHeader(header.Hash(), header.Number.Uint64()) { - unknown = append(unknown, header) - } - } + if mode == SnapSync || mode == LightSync { // If we're importing pure headers, verify based on their recentness + var pivot uint64 + + d.pivotLock.RLock() + if d.pivotHeader != nil { + pivot = d.pivotHeader.Number.Uint64() + } + d.pivotLock.RUnlock() + frequency := fsHeaderCheckFrequency - if chunk[len(chunk)-1].Number.Uint64()+uint64(fsHeaderForceVerify) > pivot { + if chunkHeaders[len(chunkHeaders)-1].Number.Uint64()+uint64(fsHeaderForceVerify) > pivot { frequency = 1 } - if n, err := d.lightchain.InsertHeaderChain(chunk, frequency); err != nil { - // If some headers were inserted, add them too to the rollback list - if n > 0 { - rollback = append(rollback, chunk[:n]...) + // Although the received headers might be all valid, a legacy + // PoW/PoA sync must not accept post-merge headers. Make sure + // that any transition is rejected at this point. + var ( + rejected []*types.Header + td *big.Int + ) + if !beaconMode && ttd != nil { + td = d.blockchain.GetTd(chunkHeaders[0].ParentHash, chunkHeaders[0].Number.Uint64()-1) + if td == nil { + // This should never really happen, but handle gracefully for now + log.Error("Failed to retrieve parent header TD", "number", chunkHeaders[0].Number.Uint64()-1, "hash", chunkHeaders[0].ParentHash) + return fmt.Errorf("%w: parent TD missing", errInvalidChain) + } + for i, header := range chunkHeaders { + td = new(big.Int).Add(td, header.Difficulty) + if td.Cmp(ttd) >= 0 { + // Terminal total difficulty reached, allow the last header in + if new(big.Int).Sub(td, header.Difficulty).Cmp(ttd) < 0 { + chunkHeaders, rejected = chunkHeaders[:i+1], chunkHeaders[i+1:] + if len(rejected) > 0 { + // Make a nicer user log as to the first TD truly rejected + td = new(big.Int).Add(td, rejected[0].Difficulty) + } + } else { + chunkHeaders, rejected = chunkHeaders[:i], chunkHeaders[i:] + } + break + } + } + } + if len(chunkHeaders) > 0 { + if n, err := d.lightchain.InsertHeaderChain(chunkHeaders, frequency); err != nil { + rollbackErr = err + + // If some headers were inserted, track them as uncertain + if (mode == SnapSync || frequency > 1) && n > 0 && rollback == 0 { + rollback = chunkHeaders[0].Number.Uint64() + } + log.Warn("Invalid header encountered", "number", chunkHeaders[n].Number, "hash", chunkHashes[n], "parent", chunkHeaders[n].ParentHash, "err", err) + return fmt.Errorf("%w: %v", errInvalidChain, err) + } + // All verifications passed, track all headers within the allowed limits + if mode == SnapSync { + head := chunkHeaders[len(chunkHeaders)-1].Number.Uint64() + if head-rollback > uint64(fsHeaderSafetyNet) { + rollback = head - uint64(fsHeaderSafetyNet) + } else { + rollback = 1 + } } - log.Debug("Invalid header encountered", "number", chunk[n].Number, "hash", chunk[n].Hash(), "err", err) - return errInvalidChain } - // All verifications passed, store newly found uncertain headers - rollback = append(rollback, unknown...) - if len(rollback) > fsHeaderSafetyNet { - rollback = append(rollback[:0], rollback[len(rollback)-fsHeaderSafetyNet:]...) + if len(rejected) != 0 { + // Merge threshold reached, stop importing, but don't roll back + rollback = 0 + + log.Info("Legacy sync reached merge threshold", "number", rejected[0].Number, "hash", rejected[0].Hash(), "td", td, "ttd", ttd) + return ErrMergeTransition } } // Unless we're doing light chains, schedule the headers for associated content retrieval - if d.mode == FullSync || d.mode == FastSync { + if mode == FullSync || mode == SnapSync { // If we've reached the allowed number of pending headers, stall a bit - for d.queue.PendingBlocks() >= maxQueuedHeaders || d.queue.PendingReceipts() >= maxQueuedHeaders { + for d.queue.PendingBodies() >= maxQueuedHeaders || d.queue.PendingReceipts() >= maxQueuedHeaders { select { case <-d.cancelCh: + rollbackErr = errCanceled return errCanceled case <-time.After(time.Second): } } // Otherwise insert the headers for content retrieval - inserts := d.queue.Schedule(chunk, origin) - if len(inserts) != len(chunk) { - log.Debug("Stale headers") - return errBadPeer + inserts := d.queue.Schedule(chunkHeaders, chunkHashes, origin) + if len(inserts) != len(chunkHeaders) { + rollbackErr = fmt.Errorf("stale headers: len inserts %v len(chunk) %v", len(inserts), len(chunkHeaders)) + return fmt.Errorf("%w: stale headers", errBadPeer) } } headers = headers[limit:] + hashes = hashes[limit:] origin += uint64(limit) } // Update the highest block number we know if a higher one is found. @@ -1507,8 +1461,8 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er } d.syncStatsLock.Unlock() - // Signal the content downloaders of the availablility of new tasks - for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + // Signal the content downloaders of the availability of new tasks + for _, ch := range []chan bool{d.queue.blockWakeCh, d.queue.receiptWakeCh} { select { case ch <- true: default: @@ -1519,7 +1473,7 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er } // processFullSyncContent takes fetch results from the queue and imports them into the chain. -func (d *Downloader) processFullSyncContent() error { +func (d *Downloader) processFullSyncContent(ttd *big.Int, beaconMode bool) error { for { results := d.queue.Results(true) if len(results) == 0 { @@ -1528,9 +1482,44 @@ func (d *Downloader) processFullSyncContent() error { if d.chainInsertHook != nil { d.chainInsertHook(results) } + // Although the received blocks might be all valid, a legacy PoW/PoA sync + // must not accept post-merge blocks. Make sure that pre-merge blocks are + // imported, but post-merge ones are rejected. + var ( + rejected []*fetchResult + td *big.Int + ) + if !beaconMode && ttd != nil { + td = d.blockchain.GetTd(results[0].Header.ParentHash, results[0].Header.Number.Uint64()-1) + if td == nil { + // This should never really happen, but handle gracefully for now + log.Error("Failed to retrieve parent block TD", "number", results[0].Header.Number.Uint64()-1, "hash", results[0].Header.ParentHash) + return fmt.Errorf("%w: parent TD missing", errInvalidChain) + } + for i, result := range results { + td = new(big.Int).Add(td, result.Header.Difficulty) + if td.Cmp(ttd) >= 0 { + // Terminal total difficulty reached, allow the last block in + if new(big.Int).Sub(td, result.Header.Difficulty).Cmp(ttd) < 0 { + results, rejected = results[:i+1], results[i+1:] + if len(rejected) > 0 { + // Make a nicer user log as to the first TD truly rejected + td = new(big.Int).Add(td, rejected[0].Header.Difficulty) + } + } else { + results, rejected = results[:i], results[i:] + } + break + } + } + } if err := d.importBlockResults(results); err != nil { return err } + if len(rejected) != 0 { + log.Info("Legacy sync reached merge threshold", "number", rejected[0].Header.Number, "hash", rejected[0].Header.Hash(), "td", td, "ttd", ttd) + return ErrMergeTransition + } } } @@ -1544,7 +1533,7 @@ func (d *Downloader) importBlockResults(results []*fetchResult) error { return errCancelContentProcessing default: } - // Retrieve the a batch of results to import + // Retrieve a batch of results to import first, last := results[0].Header, results[len(results)-1].Header log.Debug("Inserting downloaded chain", "items", len(results), "firstnum", first.Number, "firsthash", first.Hash(), @@ -1554,9 +1543,22 @@ func (d *Downloader) importBlockResults(results []*fetchResult) error { for i, result := range results { blocks[i] = types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles) } + // Downloaded blocks are always regarded as trusted after the + // transition. Because the downloaded chain is guided by the + // consensus-layer. if index, err := d.blockchain.InsertChain(blocks); err != nil { if index < len(results) { log.Debug("Downloaded item processing failed", "number", results[index].Header.Number, "hash", results[index].Header.Hash(), "err", err) + + // In post-merge, notify the engine API of encountered bad chains + if d.badBlock != nil { + head, _, err := d.skeleton.Bounds() + if err != nil { + log.Error("Failed to retrieve beacon bounds for bad block reporting", "err", err) + } else { + d.badBlock(blocks[index].Header(), head) + } + } } else { // The InsertChain method in blockchain.go will sometimes return an out-of-bounds index, // when it needs to preprocess blocks to import a sidechain. @@ -1564,29 +1566,34 @@ func (d *Downloader) importBlockResults(results []*fetchResult) error { // of the blocks delivered from the downloader, and the indexing will be off. log.Debug("Downloaded item processing failed on sidechain import", "index", index, "err", err) } - return errInvalidChain + return fmt.Errorf("%w: %v", errInvalidChain, err) } return nil } -// processFastSyncContent takes fetch results from the queue and writes them to the +// processSnapSyncContent takes fetch results from the queue and writes them to the // database. It also controls the synchronisation of state nodes of the pivot block. -func (d *Downloader) processFastSyncContent(latest *types.Header) error { +func (d *Downloader) processSnapSyncContent() error { // Start syncing state of the reported head block. This should get us most of // the state of the pivot block. - stateSync := d.syncState(latest.Root) - defer stateSync.Cancel() - go func() { - if err := stateSync.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled { + d.pivotLock.RLock() + sync := d.syncState(d.pivotHeader.Root) + d.pivotLock.RUnlock() + + defer func() { + // The `sync` object is replaced every time the pivot moves. We need to + // defer close the very last active one, hence the lazy evaluation vs. + // calling defer sync.Cancel() !!! + sync.Cancel() + }() + + closeOnErr := func(s *stateSync) { + if err := s.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled && err != snap.ErrCancelled { d.queue.Close() // wake up Results } - }() - // Figure out the ideal pivot block. Note, that this goalpost may move if the - // sync takes long enough for the chain head to move significantly. - pivot := uint64(0) - if height := latest.Number.Uint64(); height > uint64(fsMinFullBlocks) { - pivot = height - uint64(fsMinFullBlocks) } + go closeOnErr(sync) + // To cater for moving pivot points, track the pivot block and subsequently // accumulated download results separately. var ( @@ -1600,12 +1607,12 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { if len(results) == 0 { // If pivot sync is done, stop if oldPivot == nil { - return stateSync.Cancel() + return sync.Cancel() } // If sync failed, stop select { case <-d.cancelCh: - stateSync.Cancel() + sync.Cancel() return errCanceled default: } @@ -1613,40 +1620,63 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { if d.chainInsertHook != nil { d.chainInsertHook(results) } - if oldPivot != nil { + // If we haven't downloaded the pivot block yet, check pivot staleness + // notifications from the header downloader + d.pivotLock.RLock() + pivot := d.pivotHeader + d.pivotLock.RUnlock() + + if oldPivot == nil { + if pivot.Root != sync.root { + sync.Cancel() + sync = d.syncState(pivot.Root) + + go closeOnErr(sync) + } + } else { results = append(append([]*fetchResult{oldPivot}, oldTail...), results...) } - // Split around the pivot block and process the two sides via fast/full sync + // Split around the pivot block and process the two sides via snap/full sync if atomic.LoadInt32(&d.committed) == 0 { - latest = results[len(results)-1].Header - if height := latest.Number.Uint64(); height > pivot+2*uint64(fsMinFullBlocks) { - log.Warn("Pivot became stale, moving", "old", pivot, "new", height-uint64(fsMinFullBlocks)) - pivot = height - uint64(fsMinFullBlocks) + latest := results[len(results)-1].Header + // If the height is above the pivot block by 2 sets, it means the pivot + // become stale in the network and it was garbage collected, move to a + // new pivot. + // + // Note, we have `reorgProtHeaderDelay` number of blocks withheld, Those + // need to be taken into account, otherwise we're detecting the pivot move + // late and will drop peers due to unavailable state!!! + if height := latest.Number.Uint64(); height >= pivot.Number.Uint64()+2*uint64(fsMinFullBlocks)-uint64(reorgProtHeaderDelay) { + log.Warn("Pivot became stale, moving", "old", pivot.Number.Uint64(), "new", height-uint64(fsMinFullBlocks)+uint64(reorgProtHeaderDelay)) + pivot = results[len(results)-1-fsMinFullBlocks+reorgProtHeaderDelay].Header // must exist as lower old pivot is uncommitted + + d.pivotLock.Lock() + d.pivotHeader = pivot + d.pivotLock.Unlock() + + // Write out the pivot into the database so a rollback beyond it will + // reenable snap sync + rawdb.WriteLastPivotNumber(d.stateDB, pivot.Number.Uint64()) } } - P, beforeP, afterP := splitAroundPivot(pivot, results) - if err := d.commitFastSyncData(beforeP, stateSync); err != nil { + P, beforeP, afterP := splitAroundPivot(pivot.Number.Uint64(), results) + if err := d.commitSnapSyncData(beforeP, sync); err != nil { return err } if P != nil { // If new pivot block found, cancel old state retrieval and restart if oldPivot != P { - stateSync.Cancel() + sync.Cancel() + sync = d.syncState(P.Header.Root) - stateSync = d.syncState(P.Header.Root) - defer stateSync.Cancel() - go func() { - if err := stateSync.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled { - d.queue.Close() // wake up Results - } - }() + go closeOnErr(sync) oldPivot = P } // Wait for completion, occasionally checking for pivot staleness select { - case <-stateSync.done: - if stateSync.err != nil { - return stateSync.err + case <-sync.done: + if sync.err != nil { + return sync.err } if err := d.commitPivotBlock(P); err != nil { return err @@ -1666,6 +1696,14 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { } func splitAroundPivot(pivot uint64, results []*fetchResult) (p *fetchResult, before, after []*fetchResult) { + if len(results) == 0 { + return nil, nil, nil + } + if lastNum := results[len(results)-1].Header.Number.Uint64(); lastNum < pivot { + // the pivot is somewhere in the future + return nil, results, nil + } + // This can also be optimized, but only happens very seldom for _, result := range results { num := result.Header.Number.Uint64() switch { @@ -1680,7 +1718,7 @@ func splitAroundPivot(pivot uint64, results []*fetchResult) (p *fetchResult, bef return p, before, after } -func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *stateSync) error { +func (d *Downloader) commitSnapSyncData(results []*fetchResult, stateSync *stateSync) error { // Check for any early termination requests if len(results) == 0 { return nil @@ -1696,7 +1734,7 @@ func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *state } // Retrieve the a batch of results to import first, last := results[0].Header, results[len(results)-1].Header - log.Debug("Inserting fast-sync blocks", "items", len(results), + log.Debug("Inserting snap-sync blocks", "items", len(results), "firstnum", first.Number, "firsthash", first.Hash(), "lastnumn", last.Number, "lasthash", last.Hash(), ) @@ -1708,151 +1746,70 @@ func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *state } 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 + return fmt.Errorf("%w: %v", errInvalidChain, err) } return nil } 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()) + log.Debug("Committing snap sync pivot as new head", "number", block.Number(), "hash", block.Hash()) // 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 { + if err := d.blockchain.SnapSyncCommitHead(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 } -// DeliverHeaders injects a new batch of block headers received from a remote -// node into the download schedule. -func (d *Downloader) DeliverHeaders(id string, headers []*types.Header) (err error) { - return d.deliver(id, d.headerCh, &headerPack{id, headers}, headerInMeter, headerDropMeter) -} - -// DeliverBodies injects a new batch of block bodies received from a remote node. -func (d *Downloader) DeliverBodies(id string, transactions [][]*types.Transaction, uncles [][]*types.Header) (err error) { - return d.deliver(id, d.bodyCh, &bodyPack{id, transactions, uncles}, bodyInMeter, bodyDropMeter) -} - -// DeliverReceipts injects a new batch of receipts received from a remote node. -func (d *Downloader) DeliverReceipts(id string, receipts [][]*types.Receipt) (err error) { - return d.deliver(id, d.receiptCh, &receiptPack{id, receipts}, receiptInMeter, receiptDropMeter) -} - -// DeliverNodeData injects a new batch of node state data received from a remote node. -func (d *Downloader) DeliverNodeData(id string, data [][]byte) (err error) { - return d.deliver(id, d.stateCh, &statePack{id, data}, stateInMeter, stateDropMeter) -} - -// deliver injects a new batch of data received from a remote node. -func (d *Downloader) deliver(id string, destCh chan dataPack, packet dataPack, inMeter, dropMeter metrics.Meter) (err error) { - // Update the delivery metrics for both good and failed deliveries - inMeter.Mark(int64(packet.Items())) - defer func() { +// DeliverSnapPacket is invoked from a peer's message handler when it transmits a +// data packet for the local node to consume. +func (d *Downloader) DeliverSnapPacket(peer *snap.Peer, packet snap.Packet) error { + switch packet := packet.(type) { + case *snap.AccountRangePacket: + hashes, accounts, err := packet.Unpack() if err != nil { - dropMeter.Mark(int64(packet.Items())) + return err } - }() - // Deliver or abort if the sync is canceled while queuing - d.cancelLock.RLock() - cancel := d.cancelCh - d.cancelLock.RUnlock() - if cancel == nil { - return errNoSyncActive - } - select { - case destCh <- packet: - return nil - case <-cancel: - return errNoSyncActive - } -} + return d.SnapSyncer.OnAccounts(peer, packet.ID, hashes, accounts, packet.Proof) -// qosTuner is the quality of service tuning loop that occasionally gathers the -// peer latency statistics and updates the estimated request round trip time. -func (d *Downloader) qosTuner() { - for { - // Retrieve the current median RTT and integrate into the previoust target RTT - rtt := time.Duration((1-qosTuningImpact)*float64(atomic.LoadUint64(&d.rttEstimate)) + qosTuningImpact*float64(d.peers.medianRTT())) - atomic.StoreUint64(&d.rttEstimate, uint64(rtt)) + case *snap.StorageRangesPacket: + hashset, slotset := packet.Unpack() + return d.SnapSyncer.OnStorage(peer, packet.ID, hashset, slotset, packet.Proof) - // A new RTT cycle passed, increase our confidence in the estimated RTT - conf := atomic.LoadUint64(&d.rttConfidence) - conf = conf + (1000000-conf)/2 - atomic.StoreUint64(&d.rttConfidence, conf) + case *snap.ByteCodesPacket: + return d.SnapSyncer.OnByteCodes(peer, packet.ID, packet.Codes) - // Log the new QoS values and sleep until the next RTT - log.Debug("Recalculated downloader QoS values", "rtt", rtt, "confidence", float64(conf)/1000000.0, "ttl", d.requestTTL()) - select { - case <-d.quitCh: - return - case <-time.After(rtt): - } - } -} + case *snap.TrieNodesPacket: + return d.SnapSyncer.OnTrieNodes(peer, packet.ID, packet.Nodes) -// qosReduceConfidence is meant to be called when a new peer joins the downloader's -// peer set, needing to reduce the confidence we have in out QoS estimates. -func (d *Downloader) qosReduceConfidence() { - // If we have a single peer, confidence is always 1 - peers := uint64(d.peers.Len()) - if peers == 0 { - // Ensure peer connectivity races don't catch us off guard - return - } - if peers == 1 { - atomic.StoreUint64(&d.rttConfidence, 1000000) - return - } - // If we have a ton of peers, don't drop confidence) - if peers >= uint64(qosConfidenceCap) { - return - } - // Otherwise drop the confidence factor - conf := atomic.LoadUint64(&d.rttConfidence) * (peers - 1) / peers - if float64(conf)/1000000 < rttMinConfidence { - conf = uint64(rttMinConfidence * 1000000) + default: + return fmt.Errorf("unexpected snap packet type: %T", packet) } - atomic.StoreUint64(&d.rttConfidence, conf) - - rtt := time.Duration(atomic.LoadUint64(&d.rttEstimate)) - log.Debug("Relaxed downloader QoS values", "rtt", rtt, "confidence", float64(conf)/1000000.0, "ttl", d.requestTTL()) -} - -// requestRTT returns the current target round trip time for a download request -// to complete in. -// -// Note, the returned RTT is .9 of the actually estimated RTT. The reason is that -// the downloader tries to adapt queries to the RTT, so multiple RTT values can -// be adapted to, but smaller ones are preferred (stabler download stream). -func (d *Downloader) requestRTT() time.Duration { - return time.Duration(atomic.LoadUint64(&d.rttEstimate)) * 9 / 10 } -// requestTTL returns the current timeout allowance for a single download request -// to finish under. -func (d *Downloader) requestTTL() time.Duration { +// readHeaderRange returns a list of headers, using the given last header as the base, +// and going backwards towards genesis. This method assumes that the caller already has +// placed a reasonable cap on count. +func (d *Downloader) readHeaderRange(last *types.Header, count int) []*types.Header { var ( - rtt = time.Duration(atomic.LoadUint64(&d.rttEstimate)) - conf = float64(atomic.LoadUint64(&d.rttConfidence)) / 1000000.0 + current = last + headers []*types.Header ) - ttl := time.Duration(ttlScaling) * time.Duration(float64(rtt)/conf) - if ttl > ttlLimit { - ttl = ttlLimit + for { + parent := d.lightchain.GetHeaderByHash(current.ParentHash) + if parent == nil { + break // The chain is not continuous, or the chain is exhausted + } + headers = append(headers, parent) + if len(headers) >= count { + break + } + current = parent } - return ttl + return headers } diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 431bd624..eb72f0fc 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -20,73 +20,71 @@ import ( "errors" "fmt" "math/big" + "os" "strings" "sync" "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/trie" + "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/core/vm" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) -// Reduce some of the parameters to make the tester faster. -func init() { - maxForkAncestry = 10000 - blockCacheItems = 1024 - fsHeaderContCheck = 500 * time.Millisecond -} - // downloadTester is a test simulator for mocking out local block chain. type downloadTester struct { + freezer string + chain *core.BlockChain downloader *Downloader - genesis *types.Block // Genesis blocks used by the tester and peers - stateDb ethdb.Database // Database used by the tester for syncing from peers - peerDb ethdb.Database // Database of the peers containing all data - peers map[string]*downloadTesterPeer - - ownHashes []common.Hash // Hash chain belonging to the tester - ownHeaders map[common.Hash]*types.Header // Headers belonging to the tester - ownBlocks map[common.Hash]*types.Block // Blocks belonging to the tester - 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 + peers map[string]*downloadTesterPeer + lock sync.RWMutex +} - lock sync.RWMutex +// newTester creates a new downloader test mocker. +func newTester(t *testing.T) *downloadTester { + return newTesterWithNotification(t, nil) } // newTester creates a new downloader test mocker. -func newTester() *downloadTester { +func newTesterWithNotification(t *testing.T, success func()) *downloadTester { + freezer := t.TempDir() + db, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), freezer, "", false) + if err != nil { + panic(err) + } + t.Cleanup(func() { + db.Close() + }) + gspec := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testAddress: {Balance: big.NewInt(1000000000000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + gspec.MustCommit(db) + + chain, err := core.NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + if err != nil { + panic(err) + } tester := &downloadTester{ - genesis: testGenesis, - peerDb: testDB, - peers: make(map[string]*downloadTesterPeer), - ownHashes: []common.Hash{testGenesis.Hash()}, - ownHeaders: map[common.Hash]*types.Header{testGenesis.Hash(): testGenesis.Header()}, - 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 = rawdb.NewMemoryDatabase() - tester.stateDb.Put(testGenesis.Root().Bytes(), []byte{0x00}) - - tester.downloader = New(0, tester.stateDb, trie.NewSyncBloom(1, tester.stateDb), new(event.TypeMux), tester, nil, tester.dropPeer) + freezer: freezer, + chain: chain, + peers: make(map[string]*downloadTesterPeer), + } + tester.downloader = New(0, db, new(event.TypeMux), tester.chain, nil, tester.dropPeer, success) return tester } @@ -94,20 +92,20 @@ func newTester() *downloadTester { // held resources. func (dl *downloadTester) terminate() { dl.downloader.Terminate() + dl.chain.Stop() + + os.RemoveAll(dl.freezer) } // sync starts synchronizing with a remote peer, blocking until it completes. func (dl *downloadTester) sync(id string, td *big.Int, mode SyncMode) error { - dl.lock.RLock() - hash := dl.peers[id].chain.headBlock().Hash() - // If no particular TD was requested, load from the peer's blockchain + head := dl.peers[id].chain.CurrentBlock() if td == nil { - td = dl.peers[id].chain.td(hash) + // If no particular TD was requested, load from the peer's blockchain + td = dl.peers[id].chain.GetTd(head.Hash(), head.NumberU64()) } - dl.lock.RUnlock() - // Synchronise with the chosen peer and ensure proper cleanup afterwards - err := dl.downloader.synchronise(id, hash, td, mode) + err := dl.downloader.synchronise(id, head.Hash(), td, nil, mode, false, nil) select { case <-dl.downloader.cancelCh: // Ok, downloader fully cancelled after sync cycle @@ -118,326 +116,306 @@ func (dl *downloadTester) sync(id string, td *big.Int, mode SyncMode) error { return err } -// HasHeader checks if a header is present in the testers canonical chain. -func (dl *downloadTester) HasHeader(hash common.Hash, number uint64) bool { - return dl.GetHeaderByHash(hash) != nil -} - -// HasBlock checks if a block is present in the testers canonical chain. -func (dl *downloadTester) HasBlock(hash common.Hash, number uint64) bool { - return dl.GetBlockByHash(hash) != nil -} +// newPeer registers a new block download source into the downloader. +func (dl *downloadTester) newPeer(id string, version uint, blocks []*types.Block) *downloadTesterPeer { + dl.lock.Lock() + defer dl.lock.Unlock() -// HasFastBlock checks if a block is present in the testers canonical chain. -func (dl *downloadTester) HasFastBlock(hash common.Hash, number uint64) bool { - dl.lock.RLock() - defer dl.lock.RUnlock() + peer := &downloadTesterPeer{ + dl: dl, + id: id, + chain: newTestBlockchain(blocks), + withholdHeaders: make(map[common.Hash]struct{}), + } + dl.peers[id] = peer - if _, ok := dl.ancientReceipts[hash]; ok { - return true + if err := dl.downloader.RegisterPeer(id, version, peer); err != nil { + panic(err) } - _, ok := dl.ownReceipts[hash] - return ok + if err := dl.downloader.SnapSyncer.Register(peer); err != nil { + panic(err) + } + return peer } -// GetHeader retrieves a header from the testers canonical chain. -func (dl *downloadTester) GetHeaderByHash(hash common.Hash) *types.Header { - dl.lock.RLock() - defer dl.lock.RUnlock() +// dropPeer simulates a hard peer removal from the connection pool. +func (dl *downloadTester) dropPeer(id string) { + dl.lock.Lock() + defer dl.lock.Unlock() - header := dl.ancientHeaders[hash] - if header != nil { - return header - } - return dl.ownHeaders[hash] + delete(dl.peers, id) + dl.downloader.SnapSyncer.Unregister(id) + dl.downloader.UnregisterPeer(id) } -// GetBlock retrieves a block from the testers canonical chain. -func (dl *downloadTester) GetBlockByHash(hash common.Hash) *types.Block { - dl.lock.RLock() - defer dl.lock.RUnlock() +type downloadTesterPeer struct { + dl *downloadTester + id string + chain *core.BlockChain - block := dl.ancientBlocks[hash] - if block != nil { - return block - } - return dl.ownBlocks[hash] + withholdHeaders map[common.Hash]struct{} } -// CurrentHeader retrieves the current head header from the canonical chain. -func (dl *downloadTester) CurrentHeader() *types.Header { - dl.lock.RLock() - defer dl.lock.RUnlock() +// Head constructs a function to retrieve a peer's current head hash +// and total difficulty. +func (dlp *downloadTesterPeer) Head() (common.Hash, *big.Int) { + head := dlp.chain.CurrentBlock() + return head.Hash(), dlp.chain.GetTd(head.Hash(), head.NumberU64()) +} - 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 +func unmarshalRlpHeaders(rlpdata []rlp.RawValue) []*types.Header { + var headers = make([]*types.Header, len(rlpdata)) + for i, data := range rlpdata { + var h types.Header + if err := rlp.DecodeBytes(data, &h); err != nil { + panic(err) } + headers[i] = &h } - return dl.genesis.Header() + return headers } -// CurrentBlock retrieves the current head block from the canonical chain. -func (dl *downloadTester) CurrentBlock() *types.Block { - dl.lock.RLock() - 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 +// RequestHeadersByHash constructs a GetBlockHeaders function based on a hashed +// origin; associated with a particular peer in the download tester. The returned +// function can be used to retrieve batches of headers from the particular peer. +func (dlp *downloadTesterPeer) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool, sink chan *eth.Response) (*eth.Request, error) { + // Service the header query via the live handler code + rlpHeaders := eth.ServiceGetBlockHeadersQuery(dlp.chain, ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Hash: origin, + }, + Amount: uint64(amount), + Skip: uint64(skip), + Reverse: reverse, + }, nil) + headers := unmarshalRlpHeaders(rlpHeaders) + // If a malicious peer is simulated withholding headers, delete them + for hash := range dlp.withholdHeaders { + for i, header := range headers { + if header.Hash() == hash { + headers = append(headers[:i], headers[i+1:]...) + break } } } - return dl.genesis -} - -// CurrentFastBlock retrieves the current head fast-sync block from the canonical chain. -func (dl *downloadTester) CurrentFastBlock() *types.Block { - dl.lock.RLock() - 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 - } + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() } - return dl.genesis -} - -// FastSyncCommitHead manually sets the head block to a given hash. -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)) - return err + // Deliver the headers to the downloader + req := ð.Request{ + Peer: dlp.id, } - return fmt.Errorf("non existent block: %x", hash[:4]) -} - -// GetTd retrieves the block's total difficulty from the canonical chain. -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 + res := ð.Response{ + Req: req, + Res: (*eth.BlockHeadersPacket)(&headers), + Meta: hashes, + Time: 1, + Done: make(chan error, 1), // Ignore the returned status } - return dl.ownChainTd[hash] + go func() { + sink <- res + }() + return req, nil } -// InsertHeaderChain injects a new batch of headers into the simulated chain. -func (dl *downloadTester) InsertHeaderChain(headers []*types.Header, checkFreq int) (i int, err error) { - dl.lock.Lock() - defer dl.lock.Unlock() - - // Do a quick check, as the blockchain.InsertHeaderChain doesn't insert anything in case of errors - if _, ok := dl.ownHeaders[headers[0].ParentHash]; !ok { - return 0, errors.New("unknown parent") - } - for i := 1; i < len(headers); i++ { - if headers[i].ParentHash != headers[i-1].Hash() { - return i, errors.New("unknown parent") +// RequestHeadersByNumber constructs a GetBlockHeaders function based on a numbered +// origin; associated with a particular peer in the download tester. The returned +// function can be used to retrieve batches of headers from the particular peer. +func (dlp *downloadTesterPeer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool, sink chan *eth.Response) (*eth.Request, error) { + // Service the header query via the live handler code + rlpHeaders := eth.ServiceGetBlockHeadersQuery(dlp.chain, ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: origin, + }, + Amount: uint64(amount), + Skip: uint64(skip), + Reverse: reverse, + }, nil) + headers := unmarshalRlpHeaders(rlpHeaders) + // If a malicious peer is simulated withholding headers, delete them + for hash := range dlp.withholdHeaders { + for i, header := range headers { + if header.Hash() == hash { + headers = append(headers[:i], headers[i+1:]...) + break + } } } - // Do a full insert if pre-checks passed + hashes := make([]common.Hash, len(headers)) for i, header := range headers { - if _, ok := dl.ownHeaders[header.Hash()]; ok { - continue - } - if _, ok := dl.ownHeaders[header.ParentHash]; !ok { - return i, errors.New("unknown parent") - } - dl.ownHashes = append(dl.ownHashes, header.Hash()) - dl.ownHeaders[header.Hash()] = header - dl.ownChainTd[header.Hash()] = new(big.Int).Add(dl.ownChainTd[header.ParentHash], header.Difficulty) + hashes[i] = header.Hash() } - return len(headers), nil -} - -// InsertChain injects a new batch of blocks into the simulated chain. -func (dl *downloadTester) InsertChain(blocks types.Blocks) (i int, err error) { - dl.lock.Lock() - defer dl.lock.Unlock() - - for i, block := range blocks { - if parent, ok := dl.ownBlocks[block.ParentHash()]; !ok { - return i, errors.New("unknown parent") - } else if _, err := dl.stateDb.Get(parent.Root().Bytes()); err != nil { - return i, fmt.Errorf("unknown parent state %x: %v", parent.Root(), err) - } - if _, ok := dl.ownHeaders[block.Hash()]; !ok { - dl.ownHashes = append(dl.ownHashes, block.Hash()) - dl.ownHeaders[block.Hash()] = block.Header() - } - dl.ownBlocks[block.Hash()] = block - dl.ownReceipts[block.Hash()] = make(types.Receipts, 0) - dl.stateDb.Put(block.Root().Bytes(), []byte{0x00}) - dl.ownChainTd[block.Hash()] = new(big.Int).Add(dl.ownChainTd[block.ParentHash()], block.Difficulty()) + // Deliver the headers to the downloader + req := ð.Request{ + Peer: dlp.id, } - return len(blocks), nil -} - -// InsertReceiptChain injects a new batch of receipts into the simulated chain. -func (dl *downloadTester) InsertReceiptChain(blocks types.Blocks, receipts []types.Receipts, ancientLimit uint64) (i int, err error) { - dl.lock.Lock() - defer dl.lock.Unlock() - - for i := 0; i < len(blocks) && i < len(receipts); i++ { - if _, ok := dl.ownHeaders[blocks[i].Hash()]; !ok { - return i, errors.New("unknown owner") - } - 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] - } + res := ð.Response{ + Req: req, + Res: (*eth.BlockHeadersPacket)(&headers), + Meta: hashes, + Time: 1, + Done: make(chan error, 1), // Ignore the returned status } - return len(blocks), nil + go func() { + sink <- res + }() + return req, nil } -// Rollback removes some recently added elements from the chain. -func (dl *downloadTester) Rollback(hashes []common.Hash) { - dl.lock.Lock() - defer dl.lock.Unlock() - - for i := len(hashes) - 1; i >= 0; i-- { - if dl.ownHashes[len(dl.ownHashes)-1] == hashes[i] { - dl.ownHashes = dl.ownHashes[:len(dl.ownHashes)-1] - } - delete(dl.ownChainTd, hashes[i]) - 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]) +// RequestBodies constructs a getBlockBodies method associated with a particular +// peer in the download tester. The returned function can be used to retrieve +// batches of block bodies from the particularly requested peer. +func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { + blobs := eth.ServiceGetBlockBodiesQuery(dlp.chain, hashes) + + bodies := make([]*eth.BlockBody, len(blobs)) + for i, blob := range blobs { + bodies[i] = new(eth.BlockBody) + rlp.DecodeBytes(blob, bodies[i]) + } + var ( + txsHashes = make([]common.Hash, len(bodies)) + uncleHashes = make([]common.Hash, len(bodies)) + ) + hasher := trie.NewStackTrie(nil) + for i, body := range bodies { + txsHashes[i] = types.DeriveSha(types.Transactions(body.Transactions), hasher) + uncleHashes[i] = types.CalcUncleHash(body.Uncles) + } + req := ð.Request{ + Peer: dlp.id, + } + res := ð.Response{ + Req: req, + Res: (*eth.BlockBodiesPacket)(&bodies), + Meta: [][]common.Hash{txsHashes, uncleHashes}, + Time: 1, + Done: make(chan error, 1), // Ignore the returned status } + go func() { + sink <- res + }() + return req, nil } -// newPeer registers a new block download source into the downloader. -func (dl *downloadTester) newPeer(id string, version int, chain *testChain) error { - dl.lock.Lock() - defer dl.lock.Unlock() - - peer := &downloadTesterPeer{dl: dl, id: id, chain: chain} - dl.peers[id] = peer - return dl.downloader.RegisterPeer(id, version, peer) -} - -// dropPeer simulates a hard peer removal from the connection pool. -func (dl *downloadTester) dropPeer(id string) { - dl.lock.Lock() - defer dl.lock.Unlock() +// RequestReceipts constructs a getReceipts method associated with a particular +// peer in the download tester. The returned function can be used to retrieve +// batches of block receipts from the particularly requested peer. +func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { + blobs := eth.ServiceGetReceiptsQuery(dlp.chain, hashes) - delete(dl.peers, id) - dl.downloader.UnregisterPeer(id) + receipts := make([][]*types.Receipt, len(blobs)) + for i, blob := range blobs { + rlp.DecodeBytes(blob, &receipts[i]) + } + hasher := trie.NewStackTrie(nil) + hashes = make([]common.Hash, len(receipts)) + for i, receipt := range receipts { + hashes[i] = types.DeriveSha(types.Receipts(receipt), hasher) + } + req := ð.Request{ + Peer: dlp.id, + } + res := ð.Response{ + Req: req, + Res: (*eth.ReceiptsPacket)(&receipts), + Meta: hashes, + Time: 1, + Done: make(chan error, 1), // Ignore the returned status + } + go func() { + sink <- res + }() + return req, nil } -type downloadTesterPeer struct { - dl *downloadTester - id string - lock sync.RWMutex - chain *testChain - missingStates map[common.Hash]bool // State entries that fast sync should not return +// ID retrieves the peer's unique identifier. +func (dlp *downloadTesterPeer) ID() string { + return dlp.id } -// Head constructs a function to retrieve a peer's current head hash -// and total difficulty. -func (dlp *downloadTesterPeer) Head() (common.Hash, *big.Int) { - b := dlp.chain.headBlock() - return b.Hash(), dlp.chain.td(b.Hash()) -} +// RequestAccountRange fetches a batch of accounts rooted in a specific account +// trie, starting with the origin. +func (dlp *downloadTesterPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error { + // Create the request and service it + req := &snap.GetAccountRangePacket{ + ID: id, + Root: root, + Origin: origin, + Limit: limit, + Bytes: bytes, + } + slimaccs, proofs := snap.ServiceGetAccountRangeQuery(dlp.chain, req) -// RequestHeadersByHash constructs a GetBlockHeaders function based on a hashed -// origin; associated with a particular peer in the download tester. The returned -// function can be used to retrieve batches of headers from the particular peer. -func (dlp *downloadTesterPeer) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool) error { - if reverse { - panic("reverse header requests not supported") + // We need to convert to non-slim format, delegate to the packet code + res := &snap.AccountRangePacket{ + ID: id, + Accounts: slimaccs, + Proof: proofs, } + hashes, accounts, _ := res.Unpack() - result := dlp.chain.headersByHash(origin, amount, skip) - go dlp.dl.downloader.DeliverHeaders(dlp.id, result) + go dlp.dl.downloader.SnapSyncer.OnAccounts(dlp, id, hashes, accounts, proofs) return nil } -// RequestHeadersByNumber constructs a GetBlockHeaders function based on a numbered -// origin; associated with a particular peer in the download tester. The returned -// function can be used to retrieve batches of headers from the particular peer. -func (dlp *downloadTesterPeer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool) error { - if reverse { - panic("reverse header requests not supported") - } - - result := dlp.chain.headersByNumber(origin, amount, skip) - go dlp.dl.downloader.DeliverHeaders(dlp.id, result) +// RequestStorageRanges fetches a batch of storage slots belonging to one or +// more accounts. If slots from only one account is requested, an origin marker +// may also be used to retrieve from there. +func (dlp *downloadTesterPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { + // Create the request and service it + req := &snap.GetStorageRangesPacket{ + ID: id, + Accounts: accounts, + Root: root, + Origin: origin, + Limit: limit, + Bytes: bytes, + } + storage, proofs := snap.ServiceGetStorageRangesQuery(dlp.chain, req) + + // We need to convert to demultiplex, delegate to the packet code + res := &snap.StorageRangesPacket{ + ID: id, + Slots: storage, + Proof: proofs, + } + hashes, slots := res.Unpack() + + go dlp.dl.downloader.SnapSyncer.OnStorage(dlp, id, hashes, slots, proofs) return nil } -// RequestBodies constructs a getBlockBodies method associated with a particular -// peer in the download tester. The returned function can be used to retrieve -// batches of block bodies from the particularly requested peer. -func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash) error { - txs, uncles := dlp.chain.bodies(hashes) - go dlp.dl.downloader.DeliverBodies(dlp.id, txs, uncles) +// RequestByteCodes fetches a batch of bytecodes by hash. +func (dlp *downloadTesterPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { + req := &snap.GetByteCodesPacket{ + ID: id, + Hashes: hashes, + Bytes: bytes, + } + codes := snap.ServiceGetByteCodesQuery(dlp.chain, req) + go dlp.dl.downloader.SnapSyncer.OnByteCodes(dlp, id, codes) return nil } -// RequestReceipts constructs a getReceipts method associated with a particular -// peer in the download tester. The returned function can be used to retrieve -// batches of block receipts from the particularly requested peer. -func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash) error { - receipts := dlp.chain.receipts(hashes) - go dlp.dl.downloader.DeliverReceipts(dlp.id, receipts) +// RequestTrieNodes fetches a batch of account or storage trie nodes rooted in +// a specific state trie. +func (dlp *downloadTesterPeer) RequestTrieNodes(id uint64, root common.Hash, paths []snap.TrieNodePathSet, bytes uint64) error { + req := &snap.GetTrieNodesPacket{ + ID: id, + Root: root, + Paths: paths, + Bytes: bytes, + } + nodes, _ := snap.ServiceGetTrieNodesQuery(dlp.chain, req, time.Now()) + go dlp.dl.downloader.SnapSyncer.OnTrieNodes(dlp, id, nodes) return nil } -// RequestNodeData constructs a getNodeData method associated with a particular -// peer in the download tester. The returned function can be used to retrieve -// batches of node state data from the particularly requested peer. -func (dlp *downloadTesterPeer) RequestNodeData(hashes []common.Hash) error { - dlp.dl.lock.RLock() - defer dlp.dl.lock.RUnlock() - - results := make([][]byte, 0, len(hashes)) - for _, hash := range hashes { - if data, err := dlp.dl.peerDb.Get(hash.Bytes()); err == nil { - if !dlp.missingStates[hash] { - results = append(results, data) - } - } - } - go dlp.dl.downloader.DeliverNodeData(dlp.id, results) - return nil +// Log retrieves the peer's own contextual logger. +func (dlp *downloadTesterPeer) Log() log.Logger { + return log.New("peer", dlp.id) } // assertOwnChain checks if the local chain contains the correct number of items @@ -446,81 +424,57 @@ func assertOwnChain(t *testing.T, tester *downloadTester, length int) { // Mark this method as a helper to report errors at callsite, not in here t.Helper() - assertOwnForkedChain(t, tester, 1, []int{length}) -} - -// assertOwnForkedChain checks if the local forked chain contains the correct -// number of items of the various chain components. -func assertOwnForkedChain(t *testing.T, tester *downloadTester, common int, lengths []int) { - // Mark this method as a helper to report errors at callsite, not in here - t.Helper() - - // Initialize the counters for the first fork - headers, blocks, receipts := lengths[0], lengths[0], lengths[0] - - // Update the counters for each subsequent fork - for _, length := range lengths[1:] { - headers += length - common - blocks += length - common - receipts += length - common - } - if tester.downloader.mode == LightSync { + headers, blocks, receipts := length, length, length + if tester.downloader.getMode() == LightSync { blocks, receipts = 1, 1 } - if hs := len(tester.ownHeaders) + len(tester.ancientHeaders) - 1; hs != headers { + if hs := int(tester.chain.CurrentHeader().Number.Uint64()) + 1; hs != headers { t.Fatalf("synchronised headers mismatch: have %v, want %v", hs, headers) } - if bs := len(tester.ownBlocks) + len(tester.ancientBlocks) - 1; bs != blocks { + if bs := int(tester.chain.CurrentBlock().NumberU64()) + 1; bs != blocks { t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, blocks) } - if rs := len(tester.ownReceipts) + len(tester.ancientReceipts) - 1; rs != receipts { + if rs := int(tester.chain.CurrentFastBlock().NumberU64()) + 1; rs != receipts { t.Fatalf("synchronised receipts mismatch: have %v, want %v", rs, receipts) } } -// Tests that simple synchronization against a canonical chain works correctly. -// In this test common ancestor lookup should be short circuited and not require -// binary searching. -func TestCanonicalSynchronisation62(t *testing.T) { testCanonicalSynchronisation(t, 62, FullSync) } -func TestCanonicalSynchronisation63Full(t *testing.T) { testCanonicalSynchronisation(t, 63, FullSync) } -func TestCanonicalSynchronisation63Fast(t *testing.T) { testCanonicalSynchronisation(t, 63, FastSync) } -func TestCanonicalSynchronisation64Full(t *testing.T) { testCanonicalSynchronisation(t, 64, FullSync) } -func TestCanonicalSynchronisation64Fast(t *testing.T) { testCanonicalSynchronisation(t, 64, FastSync) } -func TestCanonicalSynchronisation64Light(t *testing.T) { testCanonicalSynchronisation(t, 64, LightSync) } +func TestCanonicalSynchronisation66Full(t *testing.T) { testCanonSync(t, eth.ETH66, FullSync) } +func TestCanonicalSynchronisation66Snap(t *testing.T) { testCanonSync(t, eth.ETH66, SnapSync) } +func TestCanonicalSynchronisation66Light(t *testing.T) { testCanonSync(t, eth.ETH66, LightSync) } +func TestCanonicalSynchronisation67Full(t *testing.T) { testCanonSync(t, eth.ETH67, FullSync) } +func TestCanonicalSynchronisation67Snap(t *testing.T) { testCanonSync(t, eth.ETH67, SnapSync) } +func TestCanonicalSynchronisation67Light(t *testing.T) { testCanonSync(t, eth.ETH67, LightSync) } -func testCanonicalSynchronisation(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func testCanonSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a small enough block chain to download - chain := testChainBase.shorten(blockCacheItems - 15) - tester.newPeer("peer", protocol, chain) + chain := testChainBase.shorten(blockCacheMaxItems - 15) + tester.newPeer("peer", protocol, chain.blocks[1:]) // Synchronise with the peer and make sure all relevant data was retrieved if err := tester.sync("peer", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) } // Tests that if a large batch of blocks are being downloaded, it is throttled // until the cached blocks are retrieved. -func TestThrottling62(t *testing.T) { testThrottling(t, 62, FullSync) } -func TestThrottling63Full(t *testing.T) { testThrottling(t, 63, FullSync) } -func TestThrottling63Fast(t *testing.T) { testThrottling(t, 63, FastSync) } -func TestThrottling64Full(t *testing.T) { testThrottling(t, 64, FullSync) } -func TestThrottling64Fast(t *testing.T) { testThrottling(t, 64, FastSync) } - -func testThrottling(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - tester := newTester() +func TestThrottling66Full(t *testing.T) { testThrottling(t, eth.ETH66, FullSync) } +func TestThrottling66Snap(t *testing.T) { testThrottling(t, eth.ETH66, SnapSync) } +func TestThrottling67Full(t *testing.T) { testThrottling(t, eth.ETH67, FullSync) } +func TestThrottling67Snap(t *testing.T) { testThrottling(t, eth.ETH67, SnapSync) } + +func testThrottling(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a long block chain to download and the tester - targetBlocks := testChainBase.len() - 1 - tester.newPeer("peer", protocol, testChainBase) + targetBlocks := len(testChainBase.blocks) - 1 + tester.newPeer("peer", protocol, testChainBase.blocks[1:]) // Wrap the importer to allow stepping blocked, proceed := uint32(0), make(chan struct{}) @@ -529,7 +483,7 @@ func testThrottling(t *testing.T, protocol int, mode SyncMode) { <-proceed } // Start a synchronisation concurrently - errc := make(chan error) + errc := make(chan error, 1) go func() { errc <- tester.sync("peer", nil, mode) }() @@ -537,7 +491,7 @@ func testThrottling(t *testing.T, protocol int, mode SyncMode) { for { // Check the retrieval count synchronously (! reason for this ugly block) tester.lock.RLock() - retrieved := len(tester.ownBlocks) + retrieved := int(tester.chain.CurrentFastBlock().Number().Uint64()) + 1 tester.lock.RUnlock() if retrieved >= targetBlocks+1 { break @@ -549,29 +503,30 @@ func testThrottling(t *testing.T, protocol int, mode SyncMode) { tester.lock.Lock() tester.downloader.queue.lock.Lock() - cached = len(tester.downloader.queue.blockDonePool) - if mode == FastSync { - if receipts := len(tester.downloader.queue.receiptDonePool); receipts < cached { - cached = receipts - } + tester.downloader.queue.resultCache.lock.Lock() + { + cached = tester.downloader.queue.resultCache.countCompleted() + frozen = int(atomic.LoadUint32(&blocked)) + retrieved = int(tester.chain.CurrentFastBlock().Number().Uint64()) + 1 } - frozen = int(atomic.LoadUint32(&blocked)) - retrieved = len(tester.ownBlocks) + tester.downloader.queue.resultCache.lock.Unlock() tester.downloader.queue.lock.Unlock() tester.lock.Unlock() - if cached == blockCacheItems || cached == blockCacheItems-reorgProtHeaderDelay || retrieved+cached+frozen == targetBlocks+1 || retrieved+cached+frozen == targetBlocks+1-reorgProtHeaderDelay { + if cached == blockCacheMaxItems || + cached == blockCacheMaxItems-reorgProtHeaderDelay || + retrieved+cached+frozen == targetBlocks+1 || + retrieved+cached+frozen == targetBlocks+1-reorgProtHeaderDelay { break } } // Make sure we filled up the cache, then exhaust it time.Sleep(25 * time.Millisecond) // give it a chance to screw up - tester.lock.RLock() - retrieved = len(tester.ownBlocks) + retrieved = int(tester.chain.CurrentFastBlock().Number().Uint64()) + 1 tester.lock.RUnlock() - if cached != blockCacheItems && cached != blockCacheItems-reorgProtHeaderDelay && retrieved+cached+frozen != targetBlocks+1 && retrieved+cached+frozen != targetBlocks+1-reorgProtHeaderDelay { - t.Fatalf("block count mismatch: have %v, want %v (owned %v, blocked %v, target %v)", cached, blockCacheItems, retrieved, frozen, targetBlocks+1) + if cached != blockCacheMaxItems && cached != blockCacheMaxItems-reorgProtHeaderDelay && retrieved+cached+frozen != targetBlocks+1 && retrieved+cached+frozen != targetBlocks+1-reorgProtHeaderDelay { + t.Fatalf("block count mismatch: have %v, want %v (owned %v, blocked %v, target %v)", cached, blockCacheMaxItems, retrieved, frozen, targetBlocks+1) } // Permit the blocked blocks to import if atomic.LoadUint32(&blocked) > 0 { @@ -589,96 +544,89 @@ func testThrottling(t *testing.T, protocol int, mode SyncMode) { // Tests that simple synchronization against a forked chain works correctly. In // this test common ancestor lookup should *not* be short circuited, and a full // binary search should be executed. -func TestForkedSync62(t *testing.T) { testForkedSync(t, 62, FullSync) } -func TestForkedSync63Full(t *testing.T) { testForkedSync(t, 63, FullSync) } -func TestForkedSync63Fast(t *testing.T) { testForkedSync(t, 63, FastSync) } -func TestForkedSync64Full(t *testing.T) { testForkedSync(t, 64, FullSync) } -func TestForkedSync64Fast(t *testing.T) { testForkedSync(t, 64, FastSync) } -func TestForkedSync64Light(t *testing.T) { testForkedSync(t, 64, LightSync) } - -func testForkedSync(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestForkedSync66Full(t *testing.T) { testForkedSync(t, eth.ETH66, FullSync) } +func TestForkedSync66Snap(t *testing.T) { testForkedSync(t, eth.ETH66, SnapSync) } +func TestForkedSync66Light(t *testing.T) { testForkedSync(t, eth.ETH66, LightSync) } +func TestForkedSync67Full(t *testing.T) { testForkedSync(t, eth.ETH67, FullSync) } +func TestForkedSync67Snap(t *testing.T) { testForkedSync(t, eth.ETH67, SnapSync) } +func TestForkedSync67Light(t *testing.T) { testForkedSync(t, eth.ETH67, LightSync) } + +func testForkedSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chainA := testChainForkLightA.shorten(testChainBase.len() + 80) - chainB := testChainForkLightB.shorten(testChainBase.len() + 80) - tester.newPeer("fork A", protocol, chainA) - tester.newPeer("fork B", protocol, chainB) - + chainA := testChainForkLightA.shorten(len(testChainBase.blocks) + 80) + chainB := testChainForkLightB.shorten(len(testChainBase.blocks) + 81) + tester.newPeer("fork A", protocol, chainA.blocks[1:]) + tester.newPeer("fork B", protocol, chainB.blocks[1:]) // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("fork A", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chainA.len()) + assertOwnChain(t, tester, len(chainA.blocks)) // Synchronise with the second peer and make sure that fork is pulled too if err := tester.sync("fork B", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnForkedChain(t, tester, testChainBase.len(), []int{chainA.len(), chainB.len()}) + assertOwnChain(t, tester, len(chainB.blocks)) } -// Tests that synchronising against a much shorter but much heavyer fork works -// corrently and is not dropped. -func TestHeavyForkedSync62(t *testing.T) { testHeavyForkedSync(t, 62, FullSync) } -func TestHeavyForkedSync63Full(t *testing.T) { testHeavyForkedSync(t, 63, FullSync) } -func TestHeavyForkedSync63Fast(t *testing.T) { testHeavyForkedSync(t, 63, FastSync) } -func TestHeavyForkedSync64Full(t *testing.T) { testHeavyForkedSync(t, 64, FullSync) } -func TestHeavyForkedSync64Fast(t *testing.T) { testHeavyForkedSync(t, 64, FastSync) } -func TestHeavyForkedSync64Light(t *testing.T) { testHeavyForkedSync(t, 64, LightSync) } - -func testHeavyForkedSync(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +// Tests that synchronising against a much shorter but much heavier fork works +// currently and is not dropped. +func TestHeavyForkedSync66Full(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, FullSync) } +func TestHeavyForkedSync66Snap(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, SnapSync) } +func TestHeavyForkedSync66Light(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, LightSync) } +func TestHeavyForkedSync67Full(t *testing.T) { testHeavyForkedSync(t, eth.ETH67, FullSync) } +func TestHeavyForkedSync67Snap(t *testing.T) { testHeavyForkedSync(t, eth.ETH67, SnapSync) } +func TestHeavyForkedSync67Light(t *testing.T) { testHeavyForkedSync(t, eth.ETH67, LightSync) } + +func testHeavyForkedSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chainA := testChainForkLightA.shorten(testChainBase.len() + 80) - chainB := testChainForkHeavy.shorten(testChainBase.len() + 80) - tester.newPeer("light", protocol, chainA) - tester.newPeer("heavy", protocol, chainB) + chainA := testChainForkLightA.shorten(len(testChainBase.blocks) + 80) + chainB := testChainForkHeavy.shorten(len(testChainBase.blocks) + 79) + tester.newPeer("light", protocol, chainA.blocks[1:]) + tester.newPeer("heavy", protocol, chainB.blocks[1:]) // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("light", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chainA.len()) + assertOwnChain(t, tester, len(chainA.blocks)) // Synchronise with the second peer and make sure that fork is pulled too if err := tester.sync("heavy", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnForkedChain(t, tester, testChainBase.len(), []int{chainA.len(), chainB.len()}) + assertOwnChain(t, tester, len(chainB.blocks)) } // Tests that chain forks are contained within a certain interval of the current // chain head, ensuring that malicious peers cannot waste resources by feeding // long dead chains. -func TestBoundedForkedSync62(t *testing.T) { testBoundedForkedSync(t, 62, FullSync) } -func TestBoundedForkedSync63Full(t *testing.T) { testBoundedForkedSync(t, 63, FullSync) } -func TestBoundedForkedSync63Fast(t *testing.T) { testBoundedForkedSync(t, 63, FastSync) } -func TestBoundedForkedSync64Full(t *testing.T) { testBoundedForkedSync(t, 64, FullSync) } -func TestBoundedForkedSync64Fast(t *testing.T) { testBoundedForkedSync(t, 64, FastSync) } -func TestBoundedForkedSync64Light(t *testing.T) { testBoundedForkedSync(t, 64, LightSync) } - -func testBoundedForkedSync(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestBoundedForkedSync66Full(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, FullSync) } +func TestBoundedForkedSync66Snap(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, SnapSync) } +func TestBoundedForkedSync66Light(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, LightSync) } +func TestBoundedForkedSync67Full(t *testing.T) { testBoundedForkedSync(t, eth.ETH67, FullSync) } +func TestBoundedForkedSync67Snap(t *testing.T) { testBoundedForkedSync(t, eth.ETH67, SnapSync) } +func TestBoundedForkedSync67Light(t *testing.T) { testBoundedForkedSync(t, eth.ETH67, LightSync) } + +func testBoundedForkedSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() chainA := testChainForkLightA chainB := testChainForkLightB - tester.newPeer("original", protocol, chainA) - tester.newPeer("rewriter", protocol, chainB) + tester.newPeer("original", protocol, chainA.blocks[1:]) + tester.newPeer("rewriter", protocol, chainB.blocks[1:]) // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("original", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chainA.len()) + assertOwnChain(t, tester, len(chainA.blocks)) // Synchronise with the second peer and ensure that the fork is rejected to being too old if err := tester.sync("rewriter", nil, mode); err != errInvalidAncestor { @@ -689,90 +637,61 @@ func testBoundedForkedSync(t *testing.T, protocol int, mode SyncMode) { // Tests that chain forks are contained within a certain interval of the current // chain head for short but heavy forks too. These are a bit special because they // take different ancestor lookup paths. -func TestBoundedHeavyForkedSync62(t *testing.T) { testBoundedHeavyForkedSync(t, 62, FullSync) } -func TestBoundedHeavyForkedSync63Full(t *testing.T) { testBoundedHeavyForkedSync(t, 63, FullSync) } -func TestBoundedHeavyForkedSync63Fast(t *testing.T) { testBoundedHeavyForkedSync(t, 63, FastSync) } -func TestBoundedHeavyForkedSync64Full(t *testing.T) { testBoundedHeavyForkedSync(t, 64, FullSync) } -func TestBoundedHeavyForkedSync64Fast(t *testing.T) { testBoundedHeavyForkedSync(t, 64, FastSync) } -func TestBoundedHeavyForkedSync64Light(t *testing.T) { testBoundedHeavyForkedSync(t, 64, LightSync) } - -func testBoundedHeavyForkedSync(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() +func TestBoundedHeavyForkedSync66Full(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, FullSync) +} +func TestBoundedHeavyForkedSync66Snap(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, SnapSync) +} +func TestBoundedHeavyForkedSync66Light(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, LightSync) +} +func TestBoundedHeavyForkedSync67Full(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH67, FullSync) +} +func TestBoundedHeavyForkedSync67Snap(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH67, SnapSync) +} +func TestBoundedHeavyForkedSync67Light(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH67, LightSync) +} - tester := newTester() +func testBoundedHeavyForkedSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a long enough forked chain chainA := testChainForkLightA chainB := testChainForkHeavy - tester.newPeer("original", protocol, chainA) - tester.newPeer("heavy-rewriter", protocol, chainB) + tester.newPeer("original", protocol, chainA.blocks[1:]) // Synchronise with the peer and make sure all blocks were retrieved if err := tester.sync("original", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chainA.len()) + assertOwnChain(t, tester, len(chainA.blocks)) + tester.newPeer("heavy-rewriter", protocol, chainB.blocks[1:]) // Synchronise with the second peer and ensure that the fork is rejected to being too old if err := tester.sync("heavy-rewriter", nil, mode); err != errInvalidAncestor { t.Fatalf("sync failure mismatch: have %v, want %v", err, errInvalidAncestor) } } -// Tests that an inactive downloader will not accept incoming block headers and -// bodies. -func TestInactiveDownloader62(t *testing.T) { - t.Parallel() - - tester := newTester() - defer tester.terminate() - - // Check that neither block headers nor bodies are accepted - if err := tester.downloader.DeliverHeaders("bad peer", []*types.Header{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } - if err := tester.downloader.DeliverBodies("bad peer", [][]*types.Transaction{}, [][]*types.Header{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } -} - -// Tests that an inactive downloader will not accept incoming block headers, -// bodies and receipts. -func TestInactiveDownloader63(t *testing.T) { - t.Parallel() - - tester := newTester() - defer tester.terminate() - - // Check that neither block headers nor bodies are accepted - if err := tester.downloader.DeliverHeaders("bad peer", []*types.Header{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } - if err := tester.downloader.DeliverBodies("bad peer", [][]*types.Transaction{}, [][]*types.Header{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } - if err := tester.downloader.DeliverReceipts("bad peer", [][]*types.Receipt{}); err != errNoSyncActive { - t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) - } -} - // Tests that a canceled download wipes all previously accumulated state. -func TestCancel62(t *testing.T) { testCancel(t, 62, FullSync) } -func TestCancel63Full(t *testing.T) { testCancel(t, 63, FullSync) } -func TestCancel63Fast(t *testing.T) { testCancel(t, 63, FastSync) } -func TestCancel64Full(t *testing.T) { testCancel(t, 64, FullSync) } -func TestCancel64Fast(t *testing.T) { testCancel(t, 64, FastSync) } -func TestCancel64Light(t *testing.T) { testCancel(t, 64, LightSync) } - -func testCancel(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestCancel66Full(t *testing.T) { testCancel(t, eth.ETH66, FullSync) } +func TestCancel66Snap(t *testing.T) { testCancel(t, eth.ETH66, SnapSync) } +func TestCancel66Light(t *testing.T) { testCancel(t, eth.ETH66, LightSync) } +func TestCancel67Full(t *testing.T) { testCancel(t, eth.ETH67, FullSync) } +func TestCancel67Snap(t *testing.T) { testCancel(t, eth.ETH67, SnapSync) } +func TestCancel67Light(t *testing.T) { testCancel(t, eth.ETH67, LightSync) } + +func testCancel(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() chain := testChainBase.shorten(MaxHeaderFetch) - tester.newPeer("peer", protocol, chain) + tester.newPeer("peer", protocol, chain.blocks[1:]) // Make sure canceling works with a pristine downloader tester.downloader.Cancel() @@ -790,17 +709,15 @@ func testCancel(t *testing.T, protocol int, mode SyncMode) { } // Tests that synchronisation from multiple peers works as intended (multi thread sanity test). -func TestMultiSynchronisation62(t *testing.T) { testMultiSynchronisation(t, 62, FullSync) } -func TestMultiSynchronisation63Full(t *testing.T) { testMultiSynchronisation(t, 63, FullSync) } -func TestMultiSynchronisation63Fast(t *testing.T) { testMultiSynchronisation(t, 63, FastSync) } -func TestMultiSynchronisation64Full(t *testing.T) { testMultiSynchronisation(t, 64, FullSync) } -func TestMultiSynchronisation64Fast(t *testing.T) { testMultiSynchronisation(t, 64, FastSync) } -func TestMultiSynchronisation64Light(t *testing.T) { testMultiSynchronisation(t, 64, LightSync) } - -func testMultiSynchronisation(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestMultiSynchronisation66Full(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, FullSync) } +func TestMultiSynchronisation66Snap(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, SnapSync) } +func TestMultiSynchronisation66Light(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, LightSync) } +func TestMultiSynchronisation67Full(t *testing.T) { testMultiSynchronisation(t, eth.ETH67, FullSync) } +func TestMultiSynchronisation67Snap(t *testing.T) { testMultiSynchronisation(t, eth.ETH67, SnapSync) } +func TestMultiSynchronisation67Light(t *testing.T) { testMultiSynchronisation(t, eth.ETH67, LightSync) } + +func testMultiSynchronisation(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create various peers with various parts of the chain @@ -809,45 +726,42 @@ func testMultiSynchronisation(t *testing.T, protocol int, mode SyncMode) { for i := 0; i < targetPeers; i++ { id := fmt.Sprintf("peer #%d", i) - tester.newPeer(id, protocol, chain.shorten(chain.len()/(i+1))) + tester.newPeer(id, protocol, chain.shorten(len(chain.blocks) / (i + 1)).blocks[1:]) } if err := tester.sync("peer #0", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) } // Tests that synchronisations behave well in multi-version protocol environments // and not wreak havoc on other nodes in the network. -func TestMultiProtoSynchronisation62(t *testing.T) { testMultiProtoSync(t, 62, FullSync) } -func TestMultiProtoSynchronisation63Full(t *testing.T) { testMultiProtoSync(t, 63, FullSync) } -func TestMultiProtoSynchronisation63Fast(t *testing.T) { testMultiProtoSync(t, 63, FastSync) } -func TestMultiProtoSynchronisation64Full(t *testing.T) { testMultiProtoSync(t, 64, FullSync) } -func TestMultiProtoSynchronisation64Fast(t *testing.T) { testMultiProtoSync(t, 64, FastSync) } -func TestMultiProtoSynchronisation64Light(t *testing.T) { testMultiProtoSync(t, 64, LightSync) } - -func testMultiProtoSync(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestMultiProtoSynchronisation66Full(t *testing.T) { testMultiProtoSync(t, eth.ETH66, FullSync) } +func TestMultiProtoSynchronisation66Snap(t *testing.T) { testMultiProtoSync(t, eth.ETH66, SnapSync) } +func TestMultiProtoSynchronisation66Light(t *testing.T) { testMultiProtoSync(t, eth.ETH66, LightSync) } +func TestMultiProtoSynchronisation67Full(t *testing.T) { testMultiProtoSync(t, eth.ETH67, FullSync) } +func TestMultiProtoSynchronisation67Snap(t *testing.T) { testMultiProtoSync(t, eth.ETH67, SnapSync) } +func TestMultiProtoSynchronisation67Light(t *testing.T) { testMultiProtoSync(t, eth.ETH67, LightSync) } + +func testMultiProtoSync(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a small enough block chain to download - chain := testChainBase.shorten(blockCacheItems - 15) + chain := testChainBase.shorten(blockCacheMaxItems - 15) // Create peers of every type - tester.newPeer("peer 62", 62, chain) - tester.newPeer("peer 63", 63, chain) - tester.newPeer("peer 64", 64, chain) + tester.newPeer("peer 66", eth.ETH66, chain.blocks[1:]) + tester.newPeer("peer 67", eth.ETH67, chain.blocks[1:]) // Synchronise with the requested peer and make sure all blocks were retrieved if err := tester.sync(fmt.Sprintf("peer %d", protocol), nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) // Check that no peers have been dropped off - for _, version := range []int{62, 63, 64} { + for _, version := range []int{66, 67} { peer := fmt.Sprintf("peer %d", version) if _, ok := tester.peers[peer]; !ok { t.Errorf("%s dropped", peer) @@ -857,22 +771,20 @@ func testMultiProtoSync(t *testing.T, protocol int, mode SyncMode) { // Tests that if a block is empty (e.g. header only), no body request should be // made, and instead the header should be assembled into a whole block in itself. -func TestEmptyShortCircuit62(t *testing.T) { testEmptyShortCircuit(t, 62, FullSync) } -func TestEmptyShortCircuit63Full(t *testing.T) { testEmptyShortCircuit(t, 63, FullSync) } -func TestEmptyShortCircuit63Fast(t *testing.T) { testEmptyShortCircuit(t, 63, FastSync) } -func TestEmptyShortCircuit64Full(t *testing.T) { testEmptyShortCircuit(t, 64, FullSync) } -func TestEmptyShortCircuit64Fast(t *testing.T) { testEmptyShortCircuit(t, 64, FastSync) } -func TestEmptyShortCircuit64Light(t *testing.T) { testEmptyShortCircuit(t, 64, LightSync) } - -func testEmptyShortCircuit(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestEmptyShortCircuit66Full(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, FullSync) } +func TestEmptyShortCircuit66Snap(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, SnapSync) } +func TestEmptyShortCircuit66Light(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, LightSync) } +func TestEmptyShortCircuit67Full(t *testing.T) { testEmptyShortCircuit(t, eth.ETH67, FullSync) } +func TestEmptyShortCircuit67Snap(t *testing.T) { testEmptyShortCircuit(t, eth.ETH67, SnapSync) } +func TestEmptyShortCircuit67Light(t *testing.T) { testEmptyShortCircuit(t, eth.ETH67, LightSync) } + +func testEmptyShortCircuit(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a block chain to download chain := testChainBase - tester.newPeer("peer", protocol, chain) + tester.newPeer("peer", protocol, chain.blocks[1:]) // Instrument the downloader to signal body requests bodiesHave, receiptsHave := int32(0), int32(0) @@ -886,17 +798,17 @@ func testEmptyShortCircuit(t *testing.T, protocol int, mode SyncMode) { if err := tester.sync("peer", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) // Validate the number of block bodies that should have been requested bodiesNeeded, receiptsNeeded := 0, 0 - for _, block := range chain.blockm { - if mode != LightSync && block != tester.genesis && (len(block.Transactions()) > 0 || len(block.Uncles()) > 0) { + for _, block := range chain.blocks[1:] { + if mode != LightSync && (len(block.Transactions()) > 0 || len(block.Uncles()) > 0) { bodiesNeeded++ } } - for _, receipt := range chain.receiptm { - if mode == FastSync && len(receipt) > 0 { + for _, block := range chain.blocks[1:] { + if mode == SnapSync && len(block.Transactions()) > 0 { receiptsNeeded++ } } @@ -910,81 +822,71 @@ func testEmptyShortCircuit(t *testing.T, protocol int, mode SyncMode) { // Tests that headers are enqueued continuously, preventing malicious nodes from // stalling the downloader by feeding gapped header chains. -func TestMissingHeaderAttack62(t *testing.T) { testMissingHeaderAttack(t, 62, FullSync) } -func TestMissingHeaderAttack63Full(t *testing.T) { testMissingHeaderAttack(t, 63, FullSync) } -func TestMissingHeaderAttack63Fast(t *testing.T) { testMissingHeaderAttack(t, 63, FastSync) } -func TestMissingHeaderAttack64Full(t *testing.T) { testMissingHeaderAttack(t, 64, FullSync) } -func TestMissingHeaderAttack64Fast(t *testing.T) { testMissingHeaderAttack(t, 64, FastSync) } -func TestMissingHeaderAttack64Light(t *testing.T) { testMissingHeaderAttack(t, 64, LightSync) } - -func testMissingHeaderAttack(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestMissingHeaderAttack66Full(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, FullSync) } +func TestMissingHeaderAttack66Snap(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, SnapSync) } +func TestMissingHeaderAttack66Light(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, LightSync) } +func TestMissingHeaderAttack67Full(t *testing.T) { testMissingHeaderAttack(t, eth.ETH67, FullSync) } +func TestMissingHeaderAttack67Snap(t *testing.T) { testMissingHeaderAttack(t, eth.ETH67, SnapSync) } +func TestMissingHeaderAttack67Light(t *testing.T) { testMissingHeaderAttack(t, eth.ETH67, LightSync) } + +func testMissingHeaderAttack(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chain := testChainBase.shorten(blockCacheItems - 15) - brokenChain := chain.shorten(chain.len()) - delete(brokenChain.headerm, brokenChain.chain[brokenChain.len()/2]) - tester.newPeer("attack", protocol, brokenChain) + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + attacker := tester.newPeer("attack", protocol, chain.blocks[1:]) + attacker.withholdHeaders[chain.blocks[len(chain.blocks)/2-1].Hash()] = struct{}{} if err := tester.sync("attack", nil, mode); err == nil { t.Fatalf("succeeded attacker synchronisation") } // Synchronise with the valid peer and make sure sync succeeds - tester.newPeer("valid", protocol, chain) + tester.newPeer("valid", protocol, chain.blocks[1:]) if err := tester.sync("valid", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) } // Tests that if requested headers are shifted (i.e. first is missing), the queue // detects the invalid numbering. -func TestShiftedHeaderAttack62(t *testing.T) { testShiftedHeaderAttack(t, 62, FullSync) } -func TestShiftedHeaderAttack63Full(t *testing.T) { testShiftedHeaderAttack(t, 63, FullSync) } -func TestShiftedHeaderAttack63Fast(t *testing.T) { testShiftedHeaderAttack(t, 63, FastSync) } -func TestShiftedHeaderAttack64Full(t *testing.T) { testShiftedHeaderAttack(t, 64, FullSync) } -func TestShiftedHeaderAttack64Fast(t *testing.T) { testShiftedHeaderAttack(t, 64, FastSync) } -func TestShiftedHeaderAttack64Light(t *testing.T) { testShiftedHeaderAttack(t, 64, LightSync) } - -func testShiftedHeaderAttack(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestShiftedHeaderAttack66Full(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, FullSync) } +func TestShiftedHeaderAttack66Snap(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, SnapSync) } +func TestShiftedHeaderAttack66Light(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, LightSync) } +func TestShiftedHeaderAttack67Full(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH67, FullSync) } +func TestShiftedHeaderAttack67Snap(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH67, SnapSync) } +func TestShiftedHeaderAttack67Light(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH67, LightSync) } + +func testShiftedHeaderAttack(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chain := testChainBase.shorten(blockCacheItems - 15) + chain := testChainBase.shorten(blockCacheMaxItems - 15) // Attempt a full sync with an attacker feeding shifted headers - brokenChain := chain.shorten(chain.len()) - delete(brokenChain.headerm, brokenChain.chain[1]) - delete(brokenChain.blockm, brokenChain.chain[1]) - delete(brokenChain.receiptm, brokenChain.chain[1]) - tester.newPeer("attack", protocol, brokenChain) + attacker := tester.newPeer("attack", protocol, chain.blocks[1:]) + attacker.withholdHeaders[chain.blocks[1].Hash()] = struct{}{} + if err := tester.sync("attack", nil, mode); err == nil { t.Fatalf("succeeded attacker synchronisation") } - // Synchronise with the valid peer and make sure sync succeeds - tester.newPeer("valid", protocol, chain) + tester.newPeer("valid", protocol, chain.blocks[1:]) if err := tester.sync("valid", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) } // Tests that upon detecting an invalid header, the recent ones are rolled back // for various failure scenarios. Afterwards a full sync is attempted to make // sure no state was corrupted. -func TestInvalidHeaderRollback63Fast(t *testing.T) { testInvalidHeaderRollback(t, 63, FastSync) } -func TestInvalidHeaderRollback64Fast(t *testing.T) { testInvalidHeaderRollback(t, 64, FastSync) } -func TestInvalidHeaderRollback64Light(t *testing.T) { testInvalidHeaderRollback(t, 64, LightSync) } +func TestInvalidHeaderRollback66Snap(t *testing.T) { testInvalidHeaderRollback(t, eth.ETH66, SnapSync) } +func TestInvalidHeaderRollback67Snap(t *testing.T) { testInvalidHeaderRollback(t, eth.ETH67, SnapSync) } -func testInvalidHeaderRollback(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func testInvalidHeaderRollback(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() // Create a small enough block chain to download @@ -994,109 +896,106 @@ func testInvalidHeaderRollback(t *testing.T, protocol int, mode SyncMode) { // Attempt to sync with an attacker that feeds junk during the fast sync phase. // This should result in the last fsHeaderSafetyNet headers being rolled back. missing := fsHeaderSafetyNet + MaxHeaderFetch + 1 - fastAttackChain := chain.shorten(chain.len()) - delete(fastAttackChain.headerm, fastAttackChain.chain[missing]) - tester.newPeer("fast-attack", protocol, fastAttackChain) + + fastAttacker := tester.newPeer("fast-attack", protocol, chain.blocks[1:]) + fastAttacker.withholdHeaders[chain.blocks[missing].Hash()] = struct{}{} if err := tester.sync("fast-attack", nil, mode); err == nil { t.Fatalf("succeeded fast attacker synchronisation") } - if head := tester.CurrentHeader().Number.Int64(); int(head) > MaxHeaderFetch { + if head := tester.chain.CurrentHeader().Number.Int64(); int(head) > MaxHeaderFetch { t.Errorf("rollback head mismatch: have %v, want at most %v", head, MaxHeaderFetch) } - // Attempt to sync with an attacker that feeds junk during the block import phase. // This should result in both the last fsHeaderSafetyNet number of headers being // rolled back, and also the pivot point being reverted to a non-block status. missing = 3*fsHeaderSafetyNet + MaxHeaderFetch + 1 - blockAttackChain := chain.shorten(chain.len()) - delete(fastAttackChain.headerm, fastAttackChain.chain[missing]) // Make sure the fast-attacker doesn't fill in - delete(blockAttackChain.headerm, blockAttackChain.chain[missing]) - tester.newPeer("block-attack", protocol, blockAttackChain) + + blockAttacker := tester.newPeer("block-attack", protocol, chain.blocks[1:]) + fastAttacker.withholdHeaders[chain.blocks[missing].Hash()] = struct{}{} // Make sure the fast-attacker doesn't fill in + blockAttacker.withholdHeaders[chain.blocks[missing].Hash()] = struct{}{} if err := tester.sync("block-attack", nil, mode); err == nil { t.Fatalf("succeeded block attacker synchronisation") } - if head := tester.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { + if head := tester.chain.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { t.Errorf("rollback head mismatch: have %v, want at most %v", head, 2*fsHeaderSafetyNet+MaxHeaderFetch) } - if mode == FastSync { - if head := tester.CurrentBlock().NumberU64(); head != 0 { + if mode == SnapSync { + if head := tester.chain.CurrentBlock().NumberU64(); head != 0 { t.Errorf("fast sync pivot block #%d not rolled back", head) } } - // Attempt to sync with an attacker that withholds promised blocks after the // fast sync pivot point. This could be a trial to leave the node with a bad // but already imported pivot block. - withholdAttackChain := chain.shorten(chain.len()) - tester.newPeer("withhold-attack", protocol, withholdAttackChain) + withholdAttacker := tester.newPeer("withhold-attack", protocol, chain.blocks[1:]) + tester.downloader.syncInitHook = func(uint64, uint64) { - for i := missing; i < withholdAttackChain.len(); i++ { - delete(withholdAttackChain.headerm, withholdAttackChain.chain[i]) + for i := missing; i < len(chain.blocks); i++ { + withholdAttacker.withholdHeaders[chain.blocks[i].Hash()] = struct{}{} } tester.downloader.syncInitHook = nil } if err := tester.sync("withhold-attack", nil, mode); err == nil { t.Fatalf("succeeded withholding attacker synchronisation") } - if head := tester.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { + if head := tester.chain.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { t.Errorf("rollback head mismatch: have %v, want at most %v", head, 2*fsHeaderSafetyNet+MaxHeaderFetch) } - if mode == FastSync { - if head := tester.CurrentBlock().NumberU64(); head != 0 { + if mode == SnapSync { + if head := tester.chain.CurrentBlock().NumberU64(); head != 0 { t.Errorf("fast sync pivot block #%d not rolled back", head) } } - - // synchronise with the valid peer and make sure sync succeeds. Since the last rollback + // Synchronise with the valid peer and make sure sync succeeds. Since the last rollback // should also disable fast syncing for this process, verify that we did a fresh full // sync. Note, we can't assert anything about the receipts since we won't purge the // database of them, hence we can't use assertOwnChain. - tester.newPeer("valid", protocol, chain) + tester.newPeer("valid", protocol, chain.blocks[1:]) if err := tester.sync("valid", nil, mode); err != nil { t.Fatalf("failed to synchronise blocks: %v", err) } - if hs := len(tester.ownHeaders); hs != chain.len() { - t.Fatalf("synchronised headers mismatch: have %v, want %v", hs, chain.len()) - } - if mode != LightSync { - if bs := len(tester.ownBlocks); bs != chain.len() { - t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, chain.len()) - } - } + assertOwnChain(t, tester, len(chain.blocks)) } -// Tests that a peer advertising an high TD doesn't get to stall the downloader +// Tests that a peer advertising a high TD doesn't get to stall the downloader // afterwards by not sending any useful hashes. -func TestHighTDStarvationAttack62(t *testing.T) { testHighTDStarvationAttack(t, 62, FullSync) } -func TestHighTDStarvationAttack63Full(t *testing.T) { testHighTDStarvationAttack(t, 63, FullSync) } -func TestHighTDStarvationAttack63Fast(t *testing.T) { testHighTDStarvationAttack(t, 63, FastSync) } -func TestHighTDStarvationAttack64Full(t *testing.T) { testHighTDStarvationAttack(t, 64, FullSync) } -func TestHighTDStarvationAttack64Fast(t *testing.T) { testHighTDStarvationAttack(t, 64, FastSync) } -func TestHighTDStarvationAttack64Light(t *testing.T) { testHighTDStarvationAttack(t, 64, LightSync) } - -func testHighTDStarvationAttack(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() +func TestHighTDStarvationAttack66Full(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, FullSync) +} +func TestHighTDStarvationAttack66Snap(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, SnapSync) +} +func TestHighTDStarvationAttack66Light(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, LightSync) +} +func TestHighTDStarvationAttack67Full(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH67, FullSync) +} +func TestHighTDStarvationAttack67Snap(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH67, SnapSync) +} +func TestHighTDStarvationAttack67Light(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH67, LightSync) +} - tester := newTester() +func testHighTDStarvationAttack(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() chain := testChainBase.shorten(1) - tester.newPeer("attack", protocol, chain) + tester.newPeer("attack", protocol, chain.blocks[1:]) if err := tester.sync("attack", big.NewInt(1000000), mode); err != errStallingPeer { t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errStallingPeer) } } // Tests that misbehaving peers are disconnected, whilst behaving ones are not. -func TestBlockHeaderAttackerDropping62(t *testing.T) { testBlockHeaderAttackerDropping(t, 62) } -func TestBlockHeaderAttackerDropping63(t *testing.T) { testBlockHeaderAttackerDropping(t, 63) } -func TestBlockHeaderAttackerDropping64(t *testing.T) { testBlockHeaderAttackerDropping(t, 64) } - -func testBlockHeaderAttackerDropping(t *testing.T, protocol int) { - t.Parallel() +func TestBlockHeaderAttackerDropping66(t *testing.T) { testBlockHeaderAttackerDropping(t, eth.ETH66) } +func TestBlockHeaderAttackerDropping67(t *testing.T) { testBlockHeaderAttackerDropping(t, eth.ETH67) } +func testBlockHeaderAttackerDropping(t *testing.T, protocol uint) { // Define the disconnection requirement for individual hash fetch errors tests := []struct { result error @@ -1119,23 +1018,21 @@ func testBlockHeaderAttackerDropping(t *testing.T, protocol int) { {errCancelContentProcessing, false}, // Synchronisation was canceled, origin may be innocent, don't drop } // Run the tests and check disconnection status - tester := newTester() + tester := newTester(t) defer tester.terminate() chain := testChainBase.shorten(1) for i, tt := range tests { - // Register a new peer and ensure it's presence + // Register a new peer and ensure its presence id := fmt.Sprintf("test %d", i) - if err := tester.newPeer(id, protocol, chain); err != nil { - t.Fatalf("test %d: failed to register new peer: %v", i, err) - } + tester.newPeer(id, protocol, chain.blocks[1:]) if _, ok := tester.peers[id]; !ok { t.Fatalf("test %d: registered peer not found", i) } // Simulate a synchronisation and check the required result tester.downloader.synchroniseMock = func(string, common.Hash) error { return tt.result } - tester.downloader.Synchronise(id, tester.genesis.Hash(), big.NewInt(1000), FullSync) + tester.downloader.LegacySync(id, tester.chain.Genesis().Hash(), big.NewInt(1000), nil, FullSync) if _, ok := tester.peers[id]; !ok != tt.drop { t.Errorf("test %d: peer drop mismatch for %v: have %v, want %v", i, tt.result, !ok, tt.drop) } @@ -1144,19 +1041,18 @@ func testBlockHeaderAttackerDropping(t *testing.T, protocol int) { // Tests that synchronisation progress (origin block number, current block number // and highest block number) is tracked and updated correctly. -func TestSyncProgress62(t *testing.T) { testSyncProgress(t, 62, FullSync) } -func TestSyncProgress63Full(t *testing.T) { testSyncProgress(t, 63, FullSync) } -func TestSyncProgress63Fast(t *testing.T) { testSyncProgress(t, 63, FastSync) } -func TestSyncProgress64Full(t *testing.T) { testSyncProgress(t, 64, FullSync) } -func TestSyncProgress64Fast(t *testing.T) { testSyncProgress(t, 64, FastSync) } -func TestSyncProgress64Light(t *testing.T) { testSyncProgress(t, 64, LightSync) } - -func testSyncProgress(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestSyncProgress66Full(t *testing.T) { testSyncProgress(t, eth.ETH66, FullSync) } +func TestSyncProgress66Snap(t *testing.T) { testSyncProgress(t, eth.ETH66, SnapSync) } +func TestSyncProgress66Light(t *testing.T) { testSyncProgress(t, eth.ETH66, LightSync) } +func TestSyncProgress67Full(t *testing.T) { testSyncProgress(t, eth.ETH67, FullSync) } +func TestSyncProgress67Snap(t *testing.T) { testSyncProgress(t, eth.ETH67, SnapSync) } +func TestSyncProgress67Light(t *testing.T) { testSyncProgress(t, eth.ETH67, LightSync) } + +func testSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chain := testChainBase.shorten(blockCacheItems - 15) + + chain := testChainBase.shorten(blockCacheMaxItems - 15) // Set a sync init hook to catch progress changes starting := make(chan struct{}) @@ -1169,7 +1065,7 @@ func testSyncProgress(t *testing.T, protocol int, mode SyncMode) { checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) // Synchronise half the blocks and check initial progress - tester.newPeer("peer-half", protocol, chain.shorten(chain.len()/2)) + tester.newPeer("peer-half", protocol, chain.shorten(len(chain.blocks) / 2).blocks[1:]) pending := new(sync.WaitGroup) pending.Add(1) @@ -1181,13 +1077,13 @@ func testSyncProgress(t *testing.T, protocol int, mode SyncMode) { }() <-starting checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ - HighestBlock: uint64(chain.len()/2 - 1), + HighestBlock: uint64(len(chain.blocks)/2 - 1), }) progress <- struct{}{} pending.Wait() // Synchronise all the blocks and check continuation progress - tester.newPeer("peer-full", protocol, chain) + tester.newPeer("peer-full", protocol, chain.blocks[1:]) pending.Add(1) go func() { defer pending.Done() @@ -1197,18 +1093,18 @@ func testSyncProgress(t *testing.T, protocol int, mode SyncMode) { }() <-starting checkProgress(t, tester.downloader, "completing", ethereum.SyncProgress{ - StartingBlock: uint64(chain.len()/2 - 1), - CurrentBlock: uint64(chain.len()/2 - 1), - HighestBlock: uint64(chain.len() - 1), + StartingBlock: uint64(len(chain.blocks)/2 - 1), + CurrentBlock: uint64(len(chain.blocks)/2 - 1), + HighestBlock: uint64(len(chain.blocks) - 1), }) // Check final progress after successful sync progress <- struct{}{} pending.Wait() checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ - StartingBlock: uint64(chain.len()/2 - 1), - CurrentBlock: uint64(chain.len() - 1), - HighestBlock: uint64(chain.len() - 1), + StartingBlock: uint64(len(chain.blocks)/2 - 1), + CurrentBlock: uint64(len(chain.blocks) - 1), + HighestBlock: uint64(len(chain.blocks) - 1), }) } @@ -1217,9 +1113,7 @@ func checkProgress(t *testing.T, d *Downloader, stage string, want ethereum.Sync t.Helper() p := d.Progress() - p.KnownStates, p.PulledStates = 0, 0 - want.KnownStates, want.PulledStates = 0, 0 - if p != want { + if p.StartingBlock != want.StartingBlock || p.CurrentBlock != want.CurrentBlock || p.HighestBlock != want.HighestBlock { t.Fatalf("%s progress mismatch:\nhave %+v\nwant %+v", stage, p, want) } } @@ -1227,20 +1121,19 @@ func checkProgress(t *testing.T, d *Downloader, stage string, want ethereum.Sync // Tests that synchronisation progress (origin block number and highest block // number) is tracked and updated correctly in case of a fork (or manual head // revertal). -func TestForkedSyncProgress62(t *testing.T) { testForkedSyncProgress(t, 62, FullSync) } -func TestForkedSyncProgress63Full(t *testing.T) { testForkedSyncProgress(t, 63, FullSync) } -func TestForkedSyncProgress63Fast(t *testing.T) { testForkedSyncProgress(t, 63, FastSync) } -func TestForkedSyncProgress64Full(t *testing.T) { testForkedSyncProgress(t, 64, FullSync) } -func TestForkedSyncProgress64Fast(t *testing.T) { testForkedSyncProgress(t, 64, FastSync) } -func TestForkedSyncProgress64Light(t *testing.T) { testForkedSyncProgress(t, 64, LightSync) } - -func testForkedSyncProgress(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestForkedSyncProgress66Full(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, FullSync) } +func TestForkedSyncProgress66Snap(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, SnapSync) } +func TestForkedSyncProgress66Light(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, LightSync) } +func TestForkedSyncProgress67Full(t *testing.T) { testForkedSyncProgress(t, eth.ETH67, FullSync) } +func TestForkedSyncProgress67Snap(t *testing.T) { testForkedSyncProgress(t, eth.ETH67, SnapSync) } +func TestForkedSyncProgress67Light(t *testing.T) { testForkedSyncProgress(t, eth.ETH67, LightSync) } + +func testForkedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chainA := testChainForkLightA.shorten(testChainBase.len() + MaxHashFetch) - chainB := testChainForkLightB.shorten(testChainBase.len() + MaxHashFetch) + + chainA := testChainForkLightA.shorten(len(testChainBase.blocks) + MaxHeaderFetch) + chainB := testChainForkLightB.shorten(len(testChainBase.blocks) + MaxHeaderFetch) // Set a sync init hook to catch progress changes starting := make(chan struct{}) @@ -1253,7 +1146,7 @@ func testForkedSyncProgress(t *testing.T, protocol int, mode SyncMode) { checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) // Synchronise with one of the forks and check progress - tester.newPeer("fork A", protocol, chainA) + tester.newPeer("fork A", protocol, chainA.blocks[1:]) pending := new(sync.WaitGroup) pending.Add(1) go func() { @@ -1265,7 +1158,7 @@ func testForkedSyncProgress(t *testing.T, protocol int, mode SyncMode) { <-starting checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ - HighestBlock: uint64(chainA.len() - 1), + HighestBlock: uint64(len(chainA.blocks) - 1), }) progress <- struct{}{} pending.Wait() @@ -1274,7 +1167,7 @@ func testForkedSyncProgress(t *testing.T, protocol int, mode SyncMode) { tester.downloader.syncStatsChainOrigin = tester.downloader.syncStatsChainHeight // Synchronise with the second fork and check progress resets - tester.newPeer("fork B", protocol, chainB) + tester.newPeer("fork B", protocol, chainB.blocks[1:]) pending.Add(1) go func() { defer pending.Done() @@ -1284,37 +1177,36 @@ func testForkedSyncProgress(t *testing.T, protocol int, mode SyncMode) { }() <-starting checkProgress(t, tester.downloader, "forking", ethereum.SyncProgress{ - StartingBlock: uint64(testChainBase.len()) - 1, - CurrentBlock: uint64(chainA.len() - 1), - HighestBlock: uint64(chainB.len() - 1), + StartingBlock: uint64(len(testChainBase.blocks)) - 1, + CurrentBlock: uint64(len(chainA.blocks) - 1), + HighestBlock: uint64(len(chainB.blocks) - 1), }) // Check final progress after successful sync progress <- struct{}{} pending.Wait() checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ - StartingBlock: uint64(testChainBase.len()) - 1, - CurrentBlock: uint64(chainB.len() - 1), - HighestBlock: uint64(chainB.len() - 1), + StartingBlock: uint64(len(testChainBase.blocks)) - 1, + CurrentBlock: uint64(len(chainB.blocks) - 1), + HighestBlock: uint64(len(chainB.blocks) - 1), }) } // Tests that if synchronisation is aborted due to some failure, then the progress // origin is not updated in the next sync cycle, as it should be considered the // continuation of the previous sync and not a new instance. -func TestFailedSyncProgress62(t *testing.T) { testFailedSyncProgress(t, 62, FullSync) } -func TestFailedSyncProgress63Full(t *testing.T) { testFailedSyncProgress(t, 63, FullSync) } -func TestFailedSyncProgress63Fast(t *testing.T) { testFailedSyncProgress(t, 63, FastSync) } -func TestFailedSyncProgress64Full(t *testing.T) { testFailedSyncProgress(t, 64, FullSync) } -func TestFailedSyncProgress64Fast(t *testing.T) { testFailedSyncProgress(t, 64, FastSync) } -func TestFailedSyncProgress64Light(t *testing.T) { testFailedSyncProgress(t, 64, LightSync) } - -func testFailedSyncProgress(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestFailedSyncProgress66Full(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, FullSync) } +func TestFailedSyncProgress66Snap(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, SnapSync) } +func TestFailedSyncProgress66Light(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, LightSync) } +func TestFailedSyncProgress67Full(t *testing.T) { testFailedSyncProgress(t, eth.ETH67, FullSync) } +func TestFailedSyncProgress67Snap(t *testing.T) { testFailedSyncProgress(t, eth.ETH67, SnapSync) } +func TestFailedSyncProgress67Light(t *testing.T) { testFailedSyncProgress(t, eth.ETH67, LightSync) } + +func testFailedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chain := testChainBase.shorten(blockCacheItems - 15) + + chain := testChainBase.shorten(blockCacheMaxItems - 15) // Set a sync init hook to catch progress changes starting := make(chan struct{}) @@ -1327,12 +1219,10 @@ func testFailedSyncProgress(t *testing.T, protocol int, mode SyncMode) { checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) // Attempt a full sync with a faulty peer - brokenChain := chain.shorten(chain.len()) - missing := brokenChain.len() / 2 - delete(brokenChain.headerm, brokenChain.chain[missing]) - delete(brokenChain.blockm, brokenChain.chain[missing]) - delete(brokenChain.receiptm, brokenChain.chain[missing]) - tester.newPeer("faulty", protocol, brokenChain) + missing := len(chain.blocks)/2 - 1 + + faulter := tester.newPeer("faulty", protocol, chain.blocks[1:]) + faulter.withholdHeaders[chain.blocks[missing].Hash()] = struct{}{} pending := new(sync.WaitGroup) pending.Add(1) @@ -1344,7 +1234,7 @@ func testFailedSyncProgress(t *testing.T, protocol int, mode SyncMode) { }() <-starting checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ - HighestBlock: uint64(brokenChain.len() - 1), + HighestBlock: uint64(len(chain.blocks) - 1), }) progress <- struct{}{} pending.Wait() @@ -1352,7 +1242,7 @@ func testFailedSyncProgress(t *testing.T, protocol int, mode SyncMode) { // Synchronise with a good peer and check that the progress origin remind the same // after a failure - tester.newPeer("valid", protocol, chain) + tester.newPeer("valid", protocol, chain.blocks[1:]) pending.Add(1) go func() { defer pending.Done() @@ -1367,26 +1257,25 @@ func testFailedSyncProgress(t *testing.T, protocol int, mode SyncMode) { progress <- struct{}{} pending.Wait() checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ - CurrentBlock: uint64(chain.len() - 1), - HighestBlock: uint64(chain.len() - 1), + CurrentBlock: uint64(len(chain.blocks) - 1), + HighestBlock: uint64(len(chain.blocks) - 1), }) } // Tests that if an attacker fakes a chain height, after the attack is detected, // the progress height is successfully reduced at the next sync invocation. -func TestFakedSyncProgress62(t *testing.T) { testFakedSyncProgress(t, 62, FullSync) } -func TestFakedSyncProgress63Full(t *testing.T) { testFakedSyncProgress(t, 63, FullSync) } -func TestFakedSyncProgress63Fast(t *testing.T) { testFakedSyncProgress(t, 63, FastSync) } -func TestFakedSyncProgress64Full(t *testing.T) { testFakedSyncProgress(t, 64, FullSync) } -func TestFakedSyncProgress64Fast(t *testing.T) { testFakedSyncProgress(t, 64, FastSync) } -func TestFakedSyncProgress64Light(t *testing.T) { testFakedSyncProgress(t, 64, LightSync) } - -func testFakedSyncProgress(t *testing.T, protocol int, mode SyncMode) { - t.Parallel() - - tester := newTester() +func TestFakedSyncProgress66Full(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, FullSync) } +func TestFakedSyncProgress66Snap(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, SnapSync) } +func TestFakedSyncProgress66Light(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, LightSync) } +func TestFakedSyncProgress67Full(t *testing.T) { testFakedSyncProgress(t, eth.ETH67, FullSync) } +func TestFakedSyncProgress67Snap(t *testing.T) { testFakedSyncProgress(t, eth.ETH67, SnapSync) } +func TestFakedSyncProgress67Light(t *testing.T) { testFakedSyncProgress(t, eth.ETH67, LightSync) } + +func testFakedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + tester := newTester(t) defer tester.terminate() - chain := testChainBase.shorten(blockCacheItems - 15) + + chain := testChainBase.shorten(blockCacheMaxItems - 15) // Set a sync init hook to catch progress changes starting := make(chan struct{}) @@ -1398,13 +1287,11 @@ func testFakedSyncProgress(t *testing.T, protocol int, mode SyncMode) { checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) // Create and sync with an attacker that promises a higher chain than available. - brokenChain := chain.shorten(chain.len()) + attacker := tester.newPeer("attack", protocol, chain.blocks[1:]) numMissing := 5 - for i := brokenChain.len() - 2; i > brokenChain.len()-numMissing; i-- { - delete(brokenChain.headerm, brokenChain.chain[i]) + for i := len(chain.blocks) - 2; i > len(chain.blocks)-numMissing; i-- { + attacker.withholdHeaders[chain.blocks[i].Hash()] = struct{}{} } - tester.newPeer("attack", protocol, brokenChain) - pending := new(sync.WaitGroup) pending.Add(1) go func() { @@ -1415,7 +1302,7 @@ func testFakedSyncProgress(t *testing.T, protocol int, mode SyncMode) { }() <-starting checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ - HighestBlock: uint64(brokenChain.len() - 1), + HighestBlock: uint64(len(chain.blocks) - 1), }) progress <- struct{}{} pending.Wait() @@ -1423,8 +1310,8 @@ func testFakedSyncProgress(t *testing.T, protocol int, mode SyncMode) { // Synchronise with a good peer and check that the progress height has been reduced to // the true value. - validChain := chain.shorten(chain.len() - numMissing) - tester.newPeer("valid", protocol, validChain) + validChain := chain.shorten(len(chain.blocks) - numMissing) + tester.newPeer("valid", protocol, validChain.blocks[1:]) pending.Add(1) go func() { @@ -1436,116 +1323,17 @@ func testFakedSyncProgress(t *testing.T, protocol int, mode SyncMode) { <-starting checkProgress(t, tester.downloader, "completing", ethereum.SyncProgress{ CurrentBlock: afterFailedSync.CurrentBlock, - HighestBlock: uint64(validChain.len() - 1), + HighestBlock: uint64(len(validChain.blocks) - 1), }) - // Check final progress after successful sync. progress <- struct{}{} pending.Wait() checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ - CurrentBlock: uint64(validChain.len() - 1), - HighestBlock: uint64(validChain.len() - 1), + CurrentBlock: uint64(len(validChain.blocks) - 1), + HighestBlock: uint64(len(validChain.blocks) - 1), }) } -// This test reproduces an issue where unexpected deliveries would -// block indefinitely if they arrived at the right time. -func TestDeliverHeadersHang(t *testing.T) { - t.Parallel() - - testCases := []struct { - protocol int - syncMode SyncMode - }{ - {62, FullSync}, - {63, FullSync}, - {63, FastSync}, - {64, FullSync}, - {64, FastSync}, - {64, LightSync}, - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("protocol %d mode %v", tc.protocol, tc.syncMode), func(t *testing.T) { - t.Parallel() - testDeliverHeadersHang(t, tc.protocol, tc.syncMode) - }) - } -} - -func testDeliverHeadersHang(t *testing.T, protocol int, mode SyncMode) { - master := newTester() - defer master.terminate() - chain := testChainBase.shorten(15) - - for i := 0; i < 200; i++ { - tester := newTester() - tester.peerDb = master.peerDb - tester.newPeer("peer", protocol, chain) - - // Whenever the downloader requests headers, flood it with - // a lot of unrequested header deliveries. - tester.downloader.peers.peers["peer"].peer = &floodingTestPeer{ - peer: tester.downloader.peers.peers["peer"].peer, - tester: tester, - } - if err := tester.sync("peer", nil, mode); err != nil { - t.Errorf("test %d: sync failed: %v", i, err) - } - tester.terminate() - } -} - -type floodingTestPeer struct { - peer Peer - tester *downloadTester -} - -func (ftp *floodingTestPeer) Head() (common.Hash, *big.Int) { return ftp.peer.Head() } -func (ftp *floodingTestPeer) RequestHeadersByHash(hash common.Hash, count int, skip int, reverse bool) error { - return ftp.peer.RequestHeadersByHash(hash, count, skip, reverse) -} -func (ftp *floodingTestPeer) RequestBodies(hashes []common.Hash) error { - return ftp.peer.RequestBodies(hashes) -} -func (ftp *floodingTestPeer) RequestReceipts(hashes []common.Hash) error { - return ftp.peer.RequestReceipts(hashes) -} -func (ftp *floodingTestPeer) RequestNodeData(hashes []common.Hash) error { - return ftp.peer.RequestNodeData(hashes) -} - -func (ftp *floodingTestPeer) RequestHeadersByNumber(from uint64, count, skip int, reverse bool) error { - deliveriesDone := make(chan struct{}, 500) - for i := 0; i < cap(deliveriesDone)-1; i++ { - peer := fmt.Sprintf("fake-peer%d", i) - go func() { - ftp.tester.downloader.DeliverHeaders(peer, []*types.Header{{}, {}, {}, {}}) - deliveriesDone <- struct{}{} - }() - } - - // None of the extra deliveries should block. - timeout := time.After(60 * time.Second) - launched := false - for i := 0; i < cap(deliveriesDone); i++ { - select { - case <-deliveriesDone: - if !launched { - // Start delivering the requested headers - // after one of the flooding responses has arrived. - go func() { - ftp.peer.RequestHeadersByNumber(from, count, skip, reverse) - deliveriesDone <- struct{}{} - }() - launched = true - } - case <-timeout: - panic("blocked") - } - } - return nil -} - func TestRemoteHeaderRequestSpan(t *testing.T) { testCases := []struct { remoteHeight uint64 @@ -1559,7 +1347,7 @@ func TestRemoteHeaderRequestSpan(t *testing.T) { {15000, 13006, []int{14823, 14839, 14855, 14871, 14887, 14903, 14919, 14935, 14951, 14967, 14983, 14999}, }, - //Remote is pretty close to us. We don't have to fetch as many + // Remote is pretty close to us. We don't have to fetch as many {1200, 1150, []int{1149, 1154, 1159, 1164, 1169, 1174, 1179, 1184, 1189, 1194, 1199}, }, @@ -1612,8 +1400,8 @@ func TestRemoteHeaderRequestSpan(t *testing.T) { } } if failed { - res := strings.Replace(fmt.Sprint(data), " ", ",", -1) - exp := strings.Replace(fmt.Sprint(tt.expected), " ", ",", -1) + res := strings.ReplaceAll(fmt.Sprint(data), " ", ",") + exp := strings.ReplaceAll(fmt.Sprint(tt.expected), " ", ",") t.Logf("got: %v\n", res) t.Logf("exp: %v\n", exp) t.Errorf("test %d: wrong values", i) @@ -1623,36 +1411,86 @@ func TestRemoteHeaderRequestSpan(t *testing.T) { // 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() +func TestCheckpointEnforcement66Full(t *testing.T) { testCheckpointEnforcement(t, eth.ETH66, FullSync) } +func TestCheckpointEnforcement66Snap(t *testing.T) { testCheckpointEnforcement(t, eth.ETH66, SnapSync) } +func TestCheckpointEnforcement66Light(t *testing.T) { + testCheckpointEnforcement(t, eth.ETH66, LightSync) +} +func TestCheckpointEnforcement67Full(t *testing.T) { testCheckpointEnforcement(t, eth.ETH67, FullSync) } +func TestCheckpointEnforcement67Snap(t *testing.T) { testCheckpointEnforcement(t, eth.ETH67, SnapSync) } +func TestCheckpointEnforcement67Light(t *testing.T) { + testCheckpointEnforcement(t, eth.ETH67, LightSync) +} +func testCheckpointEnforcement(t *testing.T, protocol uint, mode SyncMode) { // Create a new tester with a particular hard coded checkpoint block - tester := newTester() + tester := newTester(t) 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) + tester.newPeer("peer", protocol, chain.blocks[1:]) var expect error - if mode == FastSync || mode == LightSync { + if mode == SnapSync || mode == LightSync { expect = errUnsyncedPeer } - if err := tester.sync("peer", nil, mode); err != expect { + if err := tester.sync("peer", nil, mode); !errors.Is(err, expect) { t.Fatalf("block sync error mismatch: have %v, want %v", err, expect) } - if mode == FastSync || mode == LightSync { + if mode == SnapSync || mode == LightSync { assertOwnChain(t, tester, 1) } else { - assertOwnChain(t, tester, chain.len()) + assertOwnChain(t, tester, len(chain.blocks)) + } +} + +// Tests that peers below a pre-configured checkpoint block are prevented from +// being fast-synced from, avoiding potential cheap eclipse attacks. +func TestBeaconSync66Full(t *testing.T) { testBeaconSync(t, eth.ETH66, FullSync) } +func TestBeaconSync66Snap(t *testing.T) { testBeaconSync(t, eth.ETH66, SnapSync) } + +func testBeaconSync(t *testing.T, protocol uint, mode SyncMode) { + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + var cases = []struct { + name string // The name of testing scenario + local int // The length of local chain(canonical chain assumed), 0 means genesis is the head + }{ + {name: "Beacon sync since genesis", local: 0}, + {name: "Beacon sync with short local chain", local: 1}, + {name: "Beacon sync with long local chain", local: blockCacheMaxItems - 15 - fsMinFullBlocks/2}, + {name: "Beacon sync with full local chain", local: blockCacheMaxItems - 15 - 1}, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + success := make(chan struct{}) + tester := newTesterWithNotification(t, func() { + close(success) + }) + defer tester.terminate() + + chain := testChainBase.shorten(blockCacheMaxItems - 15) + tester.newPeer("peer", protocol, chain.blocks[1:]) + + // Build the local chain segment if it's required + if c.local > 0 { + tester.chain.InsertChain(chain.blocks[1 : c.local+1]) + } + if err := tester.downloader.BeaconSync(mode, chain.blocks[len(chain.blocks)-1].Header()); err != nil { + t.Fatalf("Failed to beacon sync chain %v %v", c.name, err) + } + select { + case <-success: + // Ok, downloader fully cancelled after sync cycle + if bs := int(tester.chain.CurrentBlock().NumberU64()) + 1; bs != len(chain.blocks) { + t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, len(chain.blocks)) + } + case <-time.NewTimer(time.Second * 3).C: + t.Fatalf("Failed to sync chain in three seconds") + } + }) } } diff --git a/eth/downloader/events.go b/eth/downloader/events.go index 0d198f65..25255a3a 100644 --- a/eth/downloader/events.go +++ b/eth/downloader/events.go @@ -16,7 +16,7 @@ package downloader -import "github.com/cryptoecc/ETH-ECC/core/types" +import "github.com/ethereum/go-ethereum/core/types" type DoneEvent struct { Latest *types.Header diff --git a/eth/downloader/fakepeer.go b/eth/downloader/fakepeer.go deleted file mode 100644 index 969f860f..00000000 --- a/eth/downloader/fakepeer.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 . - -package downloader - -import ( - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" -) - -// FakePeer is a mock downloader peer that operates on a local database instance -// instead of being an actual live node. It's useful for testing and to implement -// sync commands from an existing local database. -type FakePeer struct { - id string - db ethdb.Database - hc *core.HeaderChain - dl *Downloader -} - -// NewFakePeer creates a new mock downloader peer with the given data sources. -func NewFakePeer(id string, db ethdb.Database, hc *core.HeaderChain, dl *Downloader) *FakePeer { - return &FakePeer{id: id, db: db, hc: hc, dl: dl} -} - -// Head implements downloader.Peer, returning the current head hash and number -// of the best known header. -func (p *FakePeer) Head() (common.Hash, *big.Int) { - header := p.hc.CurrentHeader() - return header.Hash(), header.Number -} - -// RequestHeadersByHash implements downloader.Peer, returning a batch of headers -// defined by the origin hash and the associated query parameters. -func (p *FakePeer) RequestHeadersByHash(hash common.Hash, amount int, skip int, reverse bool) error { - var ( - headers []*types.Header - unknown bool - ) - for !unknown && len(headers) < amount { - origin := p.hc.GetHeaderByHash(hash) - if origin == nil { - break - } - number := origin.Number.Uint64() - headers = append(headers, origin) - if reverse { - for i := 0; i <= skip; i++ { - if header := p.hc.GetHeader(hash, number); header != nil { - hash = header.ParentHash - number-- - } else { - unknown = true - break - } - } - } else { - var ( - current = origin.Number.Uint64() - next = current + uint64(skip) + 1 - ) - if header := p.hc.GetHeaderByNumber(next); header != nil { - if p.hc.GetBlockHashesFromHash(header.Hash(), uint64(skip+1))[skip] == hash { - hash = header.Hash() - } else { - unknown = true - } - } else { - unknown = true - } - } - } - p.dl.DeliverHeaders(p.id, headers) - return nil -} - -// RequestHeadersByNumber implements downloader.Peer, returning a batch of headers -// defined by the origin number and the associated query parameters. -func (p *FakePeer) RequestHeadersByNumber(number uint64, amount int, skip int, reverse bool) error { - var ( - headers []*types.Header - unknown bool - ) - for !unknown && len(headers) < amount { - origin := p.hc.GetHeaderByNumber(number) - if origin == nil { - break - } - if reverse { - if number >= uint64(skip+1) { - number -= uint64(skip + 1) - } else { - unknown = true - } - } else { - number += uint64(skip + 1) - } - headers = append(headers, origin) - } - p.dl.DeliverHeaders(p.id, headers) - return nil -} - -// RequestBodies implements downloader.Peer, returning a batch of block bodies -// corresponding to the specified block hashes. -func (p *FakePeer) RequestBodies(hashes []common.Hash) error { - var ( - txs [][]*types.Transaction - uncles [][]*types.Header - ) - for _, hash := range hashes { - block := rawdb.ReadBlock(p.db, hash, *p.hc.GetBlockNumber(hash)) - - txs = append(txs, block.Transactions()) - uncles = append(uncles, block.Uncles()) - } - p.dl.DeliverBodies(p.id, txs, uncles) - return nil -} - -// RequestReceipts implements downloader.Peer, returning a batch of transaction -// receipts corresponding to the specified block hashes. -func (p *FakePeer) RequestReceipts(hashes []common.Hash) error { - var receipts [][]*types.Receipt - for _, hash := range hashes { - receipts = append(receipts, rawdb.ReadRawReceipts(p.db, hash, *p.hc.GetBlockNumber(hash))) - } - p.dl.DeliverReceipts(p.id, receipts) - return nil -} - -// RequestNodeData implements downloader.Peer, returning a batch of state trie -// nodes corresponding to the specified trie hashes. -func (p *FakePeer) RequestNodeData(hashes []common.Hash) error { - var data [][]byte - for _, hash := range hashes { - if entry, err := p.db.Get(hash.Bytes()); err == nil { - data = append(data, entry) - } - } - p.dl.DeliverNodeData(p.id, data) - return nil -} diff --git a/eth/downloader/fetchers.go b/eth/downloader/fetchers.go new file mode 100644 index 00000000..021e8c4f --- /dev/null +++ b/eth/downloader/fetchers.go @@ -0,0 +1,115 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" +) + +// fetchHeadersByHash is a blocking version of Peer.RequestHeadersByHash which +// handles all the cancellation, interruption and timeout mechanisms of a data +// retrieval to allow blocking API calls. +func (d *Downloader) fetchHeadersByHash(p *peerConnection, hash common.Hash, amount int, skip int, reverse bool) ([]*types.Header, []common.Hash, error) { + // Create the response sink and send the network request + start := time.Now() + resCh := make(chan *eth.Response) + + req, err := p.peer.RequestHeadersByHash(hash, amount, skip, reverse, resCh) + if err != nil { + return nil, nil, err + } + defer req.Close() + + // Wait until the response arrives, the request is cancelled or times out + ttl := d.peers.rates.TargetTimeout() + + timeoutTimer := time.NewTimer(ttl) + defer timeoutTimer.Stop() + + select { + case <-d.cancelCh: + return nil, nil, errCanceled + + case <-timeoutTimer.C: + // Header retrieval timed out, update the metrics + p.log.Debug("Header request timed out", "elapsed", ttl) + headerTimeoutMeter.Mark(1) + + return nil, nil, errTimeout + + case res := <-resCh: + // Headers successfully retrieved, update the metrics + headerReqTimer.Update(time.Since(start)) + headerInMeter.Mark(int64(len(*res.Res.(*eth.BlockHeadersPacket)))) + + // Don't reject the packet even if it turns out to be bad, downloader will + // disconnect the peer on its own terms. Simply delivery the headers to + // be processed by the caller + res.Done <- nil + + return *res.Res.(*eth.BlockHeadersPacket), res.Meta.([]common.Hash), nil + } +} + +// fetchHeadersByNumber is a blocking version of Peer.RequestHeadersByNumber which +// handles all the cancellation, interruption and timeout mechanisms of a data +// retrieval to allow blocking API calls. +func (d *Downloader) fetchHeadersByNumber(p *peerConnection, number uint64, amount int, skip int, reverse bool) ([]*types.Header, []common.Hash, error) { + // Create the response sink and send the network request + start := time.Now() + resCh := make(chan *eth.Response) + + req, err := p.peer.RequestHeadersByNumber(number, amount, skip, reverse, resCh) + if err != nil { + return nil, nil, err + } + defer req.Close() + + // Wait until the response arrives, the request is cancelled or times out + ttl := d.peers.rates.TargetTimeout() + + timeoutTimer := time.NewTimer(ttl) + defer timeoutTimer.Stop() + + select { + case <-d.cancelCh: + return nil, nil, errCanceled + + case <-timeoutTimer.C: + // Header retrieval timed out, update the metrics + p.log.Debug("Header request timed out", "elapsed", ttl) + headerTimeoutMeter.Mark(1) + + return nil, nil, errTimeout + + case res := <-resCh: + // Headers successfully retrieved, update the metrics + headerReqTimer.Update(time.Since(start)) + headerInMeter.Mark(int64(len(*res.Res.(*eth.BlockHeadersPacket)))) + + // Don't reject the packet even if it turns out to be bad, downloader will + // disconnect the peer on its own terms. Simply delivery the headers to + // be processed by the caller + res.Done <- nil + + return *res.Res.(*eth.BlockHeadersPacket), res.Meta.([]common.Hash), nil + } +} diff --git a/eth/downloader/fetchers_concurrent.go b/eth/downloader/fetchers_concurrent.go new file mode 100644 index 00000000..44e6aa8f --- /dev/null +++ b/eth/downloader/fetchers_concurrent.go @@ -0,0 +1,381 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "errors" + "sort" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" +) + +// timeoutGracePeriod is the amount of time to allow for a peer to deliver a +// response to a locally already timed out request. Timeouts are not penalized +// as a peer might be temporarily overloaded, however, they still must reply +// to each request. Failing to do so is considered a protocol violation. +var timeoutGracePeriod = 2 * time.Minute + +// typedQueue is an interface defining the adaptor needed to translate the type +// specific downloader/queue schedulers into the type-agnostic general concurrent +// fetcher algorithm calls. +type typedQueue interface { + // waker returns a notification channel that gets pinged in case more fetches + // have been queued up, so the fetcher might assign it to idle peers. + waker() chan bool + + // pending returns the number of wrapped items that are currently queued for + // fetching by the concurrent downloader. + pending() int + + // capacity is responsible for calculating how many items of the abstracted + // type a particular peer is estimated to be able to retrieve within the + // allotted round trip time. + capacity(peer *peerConnection, rtt time.Duration) int + + // updateCapacity is responsible for updating how many items of the abstracted + // type a particular peer is estimated to be able to retrieve in a unit time. + updateCapacity(peer *peerConnection, items int, elapsed time.Duration) + + // reserve is responsible for allocating a requested number of pending items + // from the download queue to the specified peer. + reserve(peer *peerConnection, items int) (*fetchRequest, bool, bool) + + // unreserve is responsible for removing the current retrieval allocation + // assigned to a specific peer and placing it back into the pool to allow + // reassigning to some other peer. + unreserve(peer string) int + + // request is responsible for converting a generic fetch request into a typed + // one and sending it to the remote peer for fulfillment. + request(peer *peerConnection, req *fetchRequest, resCh chan *eth.Response) (*eth.Request, error) + + // deliver is responsible for taking a generic response packet from the + // concurrent fetcher, unpacking the type specific data and delivering + // it to the downloader's queue. + deliver(peer *peerConnection, packet *eth.Response) (int, error) +} + +// concurrentFetch iteratively downloads scheduled block parts, taking available +// peers, reserving a chunk of fetch requests for each and waiting for delivery +// or timeouts. +func (d *Downloader) concurrentFetch(queue typedQueue, beaconMode bool) error { + // Create a delivery channel to accept responses from all peers + responses := make(chan *eth.Response) + + // Track the currently active requests and their timeout order + pending := make(map[string]*eth.Request) + defer func() { + // Abort all requests on sync cycle cancellation. The requests may still + // be fulfilled by the remote side, but the dispatcher will not wait to + // deliver them since nobody's going to be listening. + for _, req := range pending { + req.Close() + } + }() + ordering := make(map[*eth.Request]int) + timeouts := prque.New(func(data interface{}, index int) { + ordering[data.(*eth.Request)] = index + }) + + timeout := time.NewTimer(0) + if !timeout.Stop() { + <-timeout.C + } + defer timeout.Stop() + + // Track the timed-out but not-yet-answered requests separately. We want to + // keep tracking which peers are busy (potentially overloaded), so removing + // all trace of a timed out request is not good. We also can't just cancel + // the pending request altogether as that would prevent a late response from + // being delivered, thus never unblocking the peer. + stales := make(map[string]*eth.Request) + defer func() { + // Abort all requests on sync cycle cancellation. The requests may still + // be fulfilled by the remote side, but the dispatcher will not wait to + // deliver them since nobody's going to be listening. + for _, req := range stales { + req.Close() + } + }() + // Subscribe to peer lifecycle events to schedule tasks to new joiners and + // reschedule tasks upon disconnections. We don't care which event happened + // for simplicity, so just use a single channel. + peering := make(chan *peeringEvent, 64) // arbitrary buffer, just some burst protection + + peeringSub := d.peers.SubscribeEvents(peering) + defer peeringSub.Unsubscribe() + + // Prepare the queue and fetch block parts until the block header fetcher's done + finished := false + for { + // Short circuit if we lost all our peers + if d.peers.Len() == 0 && !beaconMode { + return errNoPeers + } + // If there's nothing more to fetch, wait or terminate + if queue.pending() == 0 { + if len(pending) == 0 && finished { + return nil + } + } else { + // Send a download request to all idle peers, until throttled + var ( + idles []*peerConnection + caps []int + ) + for _, peer := range d.peers.AllPeers() { + pending, stale := pending[peer.id], stales[peer.id] + if pending == nil && stale == nil { + idles = append(idles, peer) + caps = append(caps, queue.capacity(peer, time.Second)) + } else if stale != nil { + if waited := time.Since(stale.Sent); waited > timeoutGracePeriod { + // Request has been in flight longer than the grace period + // permitted it, consider the peer malicious attempting to + // stall the sync. + peer.log.Warn("Peer stalling, dropping", "waited", common.PrettyDuration(waited)) + d.dropPeer(peer.id) + } + } + } + sort.Sort(&peerCapacitySort{idles, caps}) + + var ( + progressed bool + throttled bool + queued = queue.pending() + ) + for _, peer := range idles { + // Short circuit if throttling activated or there are no more + // queued tasks to be retrieved + if throttled { + break + } + if queued = queue.pending(); queued == 0 { + break + } + // Reserve a chunk of fetches for a peer. A nil can mean either that + // no more headers are available, or that the peer is known not to + // have them. + request, progress, throttle := queue.reserve(peer, queue.capacity(peer, d.peers.rates.TargetRoundTrip())) + if progress { + progressed = true + } + if throttle { + throttled = true + throttleCounter.Inc(1) + } + if request == nil { + continue + } + // Fetch the chunk and make sure any errors return the hashes to the queue + req, err := queue.request(peer, request, responses) + if err != nil { + // Sending the request failed, which generally means the peer + // was disconnected in between assignment and network send. + // Although all peer removal operations return allocated tasks + // to the queue, that is async, and we can do better here by + // immediately pushing the unfulfilled requests. + queue.unreserve(peer.id) // TODO(karalabe): This needs a non-expiration method + continue + } + pending[peer.id] = req + + ttl := d.peers.rates.TargetTimeout() + ordering[req] = timeouts.Size() + + timeouts.Push(req, -time.Now().Add(ttl).UnixNano()) + if timeouts.Size() == 1 { + timeout.Reset(ttl) + } + } + // Make sure that we have peers available for fetching. If all peers have been tried + // and all failed throw an error + if !progressed && !throttled && len(pending) == 0 && len(idles) == d.peers.Len() && queued > 0 && !beaconMode { + return errPeersUnavailable + } + } + // Wait for something to happen + select { + case <-d.cancelCh: + // If sync was cancelled, tear down the parallel retriever. Pending + // requests will be cancelled locally, and the remote responses will + // be dropped when they arrive + return errCanceled + + case event := <-peering: + // A peer joined or left, the tasks queue and allocations need to be + // checked for potential assignment or reassignment + peerid := event.peer.id + + if event.join { + // Sanity check the internal state; this can be dropped later + if _, ok := pending[peerid]; ok { + event.peer.log.Error("Pending request exists for joining peer") + } + if _, ok := stales[peerid]; ok { + event.peer.log.Error("Stale request exists for joining peer") + } + // Loop back to the entry point for task assignment + continue + } + // A peer left, any existing requests need to be untracked, pending + // tasks returned and possible reassignment checked + if req, ok := pending[peerid]; ok { + queue.unreserve(peerid) // TODO(karalabe): This needs a non-expiration method + delete(pending, peerid) + req.Close() + + if index, live := ordering[req]; live { + timeouts.Remove(index) + if index == 0 { + if !timeout.Stop() { + <-timeout.C + } + if timeouts.Size() > 0 { + _, exp := timeouts.Peek() + timeout.Reset(time.Until(time.Unix(0, -exp))) + } + } + delete(ordering, req) + } + } + if req, ok := stales[peerid]; ok { + delete(stales, peerid) + req.Close() + } + + case <-timeout.C: + // Retrieve the next request which should have timed out. The check + // below is purely for to catch programming errors, given the correct + // code, there's no possible order of events that should result in a + // timeout firing for a non-existent event. + item, exp := timeouts.Peek() + if now, at := time.Now(), time.Unix(0, -exp); now.Before(at) { + log.Error("Timeout triggered but not reached", "left", at.Sub(now)) + timeout.Reset(at.Sub(now)) + continue + } + req := item.(*eth.Request) + + // Stop tracking the timed out request from a timing perspective, + // cancel it, so it's not considered in-flight anymore, but keep + // the peer marked busy to prevent assigning a second request and + // overloading it further. + delete(pending, req.Peer) + stales[req.Peer] = req + delete(ordering, req) + + timeouts.Pop() + if timeouts.Size() > 0 { + _, exp := timeouts.Peek() + timeout.Reset(time.Until(time.Unix(0, -exp))) + } + // New timeout potentially set if there are more requests pending, + // reschedule the failed one to a free peer + fails := queue.unreserve(req.Peer) + + // Finally, update the peer's retrieval capacity, or if it's already + // below the minimum allowance, drop the peer. If a lot of retrieval + // elements expired, we might have overestimated the remote peer or + // perhaps ourselves. Only reset to minimal throughput but don't drop + // just yet. + // + // The reason the minimum threshold is 2 is that the downloader tries + // to estimate the bandwidth and latency of a peer separately, which + // requires pushing the measured capacity a bit and seeing how response + // times reacts, to it always requests one more than the minimum (i.e. + // min 2). + peer := d.peers.Peer(req.Peer) + if peer == nil { + // If the peer got disconnected in between, we should really have + // short-circuited it already. Just in case there's some strange + // codepath, leave this check in not to crash. + log.Error("Delivery timeout from unknown peer", "peer", req.Peer) + continue + } + if fails > 2 { + queue.updateCapacity(peer, 0, 0) + } else { + d.dropPeer(peer.id) + + // If this peer was the master peer, abort sync immediately + d.cancelLock.RLock() + master := peer.id == d.cancelPeer + d.cancelLock.RUnlock() + + if master { + d.cancel() + return errTimeout + } + } + + case res := <-responses: + // Response arrived, it may be for an existing or an already timed + // out request. If the former, update the timeout heap and perhaps + // reschedule the timeout timer. + index, live := ordering[res.Req] + if live { + timeouts.Remove(index) + if index == 0 { + if !timeout.Stop() { + <-timeout.C + } + if timeouts.Size() > 0 { + _, exp := timeouts.Peek() + timeout.Reset(time.Until(time.Unix(0, -exp))) + } + } + delete(ordering, res.Req) + } + // Delete the pending request (if it still exists) and mark the peer idle + delete(pending, res.Req.Peer) + delete(stales, res.Req.Peer) + + // Signal the dispatcher that the round trip is done. We'll drop the + // peer if the data turns out to be junk. + res.Done <- nil + res.Req.Close() + + // If the peer was previously banned and failed to deliver its pack + // in a reasonable time frame, ignore its message. + if peer := d.peers.Peer(res.Req.Peer); peer != nil { + // Deliver the received chunk of data and check chain validity + accepted, err := queue.deliver(peer, res) + if errors.Is(err, errInvalidChain) { + return err + } + // Unless a peer delivered something completely else than requested (usually + // caused by a timed out request which came through in the end), set it to + // idle. If the delivery's stale, the peer should have already been idled. + if !errors.Is(err, errStaleDelivery) { + queue.updateCapacity(peer, accepted, res.Time) + } + } + + case cont := <-queue.waker(): + // The header fetcher sent a continuation flag, check if it's done + if !cont { + finished = true + } + } + } +} diff --git a/eth/downloader/fetchers_concurrent_bodies.go b/eth/downloader/fetchers_concurrent_bodies.go new file mode 100644 index 00000000..e84206fe --- /dev/null +++ b/eth/downloader/fetchers_concurrent_bodies.go @@ -0,0 +1,105 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" +) + +// bodyQueue implements typedQueue and is a type adapter between the generic +// concurrent fetcher and the downloader. +type bodyQueue Downloader + +// waker returns a notification channel that gets pinged in case more body +// fetches have been queued up, so the fetcher might assign it to idle peers. +func (q *bodyQueue) waker() chan bool { + return q.queue.blockWakeCh +} + +// pending returns the number of bodies that are currently queued for fetching +// by the concurrent downloader. +func (q *bodyQueue) pending() int { + return q.queue.PendingBodies() +} + +// capacity is responsible for calculating how many bodies a particular peer is +// estimated to be able to retrieve within the allotted round trip time. +func (q *bodyQueue) capacity(peer *peerConnection, rtt time.Duration) int { + return peer.BodyCapacity(rtt) +} + +// updateCapacity is responsible for updating how many bodies a particular peer +// is estimated to be able to retrieve in a unit time. +func (q *bodyQueue) updateCapacity(peer *peerConnection, items int, span time.Duration) { + peer.UpdateBodyRate(items, span) +} + +// reserve is responsible for allocating a requested number of pending bodies +// from the download queue to the specified peer. +func (q *bodyQueue) reserve(peer *peerConnection, items int) (*fetchRequest, bool, bool) { + return q.queue.ReserveBodies(peer, items) +} + +// unreserve is responsible for removing the current body retrieval allocation +// assigned to a specific peer and placing it back into the pool to allow +// reassigning to some other peer. +func (q *bodyQueue) unreserve(peer string) int { + fails := q.queue.ExpireBodies(peer) + if fails > 2 { + log.Trace("Body delivery timed out", "peer", peer) + } else { + log.Debug("Body delivery stalling", "peer", peer) + } + return fails +} + +// request is responsible for converting a generic fetch request into a body +// one and sending it to the remote peer for fulfillment. +func (q *bodyQueue) request(peer *peerConnection, req *fetchRequest, resCh chan *eth.Response) (*eth.Request, error) { + peer.log.Trace("Requesting new batch of bodies", "count", len(req.Headers), "from", req.Headers[0].Number) + if q.bodyFetchHook != nil { + q.bodyFetchHook(req.Headers) + } + + hashes := make([]common.Hash, 0, len(req.Headers)) + for _, header := range req.Headers { + hashes = append(hashes, header.Hash()) + } + return peer.peer.RequestBodies(hashes, resCh) +} + +// deliver is responsible for taking a generic response packet from the concurrent +// fetcher, unpacking the body data and delivering it to the downloader's queue. +func (q *bodyQueue) deliver(peer *peerConnection, packet *eth.Response) (int, error) { + txs, uncles := packet.Res.(*eth.BlockBodiesPacket).Unpack() + hashsets := packet.Meta.([][]common.Hash) // {txs hashes, uncle hashes} + + accepted, err := q.queue.DeliverBodies(peer.id, txs, hashsets[0], uncles, hashsets[1]) + switch { + case err == nil && len(txs) == 0: + peer.log.Trace("Requested bodies delivered") + case err == nil: + peer.log.Trace("Delivered new batch of bodies", "count", len(txs), "accepted", accepted) + default: + peer.log.Debug("Failed to deliver retrieved bodies", "err", err) + } + return accepted, err +} diff --git a/eth/downloader/fetchers_concurrent_headers.go b/eth/downloader/fetchers_concurrent_headers.go new file mode 100644 index 00000000..84c7f209 --- /dev/null +++ b/eth/downloader/fetchers_concurrent_headers.go @@ -0,0 +1,97 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" +) + +// headerQueue implements typedQueue and is a type adapter between the generic +// concurrent fetcher and the downloader. +type headerQueue Downloader + +// waker returns a notification channel that gets pinged in case more header +// fetches have been queued up, so the fetcher might assign it to idle peers. +func (q *headerQueue) waker() chan bool { + return q.queue.headerContCh +} + +// pending returns the number of headers that are currently queued for fetching +// by the concurrent downloader. +func (q *headerQueue) pending() int { + return q.queue.PendingHeaders() +} + +// capacity is responsible for calculating how many headers a particular peer is +// estimated to be able to retrieve within the allotted round trip time. +func (q *headerQueue) capacity(peer *peerConnection, rtt time.Duration) int { + return peer.HeaderCapacity(rtt) +} + +// updateCapacity is responsible for updating how many headers a particular peer +// is estimated to be able to retrieve in a unit time. +func (q *headerQueue) updateCapacity(peer *peerConnection, items int, span time.Duration) { + peer.UpdateHeaderRate(items, span) +} + +// reserve is responsible for allocating a requested number of pending headers +// from the download queue to the specified peer. +func (q *headerQueue) reserve(peer *peerConnection, items int) (*fetchRequest, bool, bool) { + return q.queue.ReserveHeaders(peer, items), false, false +} + +// unreserve is responsible for removing the current header retrieval allocation +// assigned to a specific peer and placing it back into the pool to allow +// reassigning to some other peer. +func (q *headerQueue) unreserve(peer string) int { + fails := q.queue.ExpireHeaders(peer) + if fails > 2 { + log.Trace("Header delivery timed out", "peer", peer) + } else { + log.Debug("Header delivery stalling", "peer", peer) + } + return fails +} + +// request is responsible for converting a generic fetch request into a header +// one and sending it to the remote peer for fulfillment. +func (q *headerQueue) request(peer *peerConnection, req *fetchRequest, resCh chan *eth.Response) (*eth.Request, error) { + peer.log.Trace("Requesting new batch of headers", "from", req.From) + return peer.peer.RequestHeadersByNumber(req.From, MaxHeaderFetch, 0, false, resCh) +} + +// deliver is responsible for taking a generic response packet from the concurrent +// fetcher, unpacking the header data and delivering it to the downloader's queue. +func (q *headerQueue) deliver(peer *peerConnection, packet *eth.Response) (int, error) { + headers := *packet.Res.(*eth.BlockHeadersPacket) + hashes := packet.Meta.([]common.Hash) + + accepted, err := q.queue.DeliverHeaders(peer.id, headers, hashes, q.headerProcCh) + switch { + case err == nil && len(headers) == 0: + peer.log.Trace("Requested headers delivered") + case err == nil: + peer.log.Trace("Delivered new batch of headers", "count", len(headers), "accepted", accepted) + default: + peer.log.Debug("Failed to deliver retrieved headers", "err", err) + } + return accepted, err +} diff --git a/eth/downloader/fetchers_concurrent_receipts.go b/eth/downloader/fetchers_concurrent_receipts.go new file mode 100644 index 00000000..1c853c21 --- /dev/null +++ b/eth/downloader/fetchers_concurrent_receipts.go @@ -0,0 +1,104 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" +) + +// receiptQueue implements typedQueue and is a type adapter between the generic +// concurrent fetcher and the downloader. +type receiptQueue Downloader + +// waker returns a notification channel that gets pinged in case more receipt +// fetches have been queued up, so the fetcher might assign it to idle peers. +func (q *receiptQueue) waker() chan bool { + return q.queue.receiptWakeCh +} + +// pending returns the number of receipt that are currently queued for fetching +// by the concurrent downloader. +func (q *receiptQueue) pending() int { + return q.queue.PendingReceipts() +} + +// capacity is responsible for calculating how many receipts a particular peer is +// estimated to be able to retrieve within the allotted round trip time. +func (q *receiptQueue) capacity(peer *peerConnection, rtt time.Duration) int { + return peer.ReceiptCapacity(rtt) +} + +// updateCapacity is responsible for updating how many receipts a particular peer +// is estimated to be able to retrieve in a unit time. +func (q *receiptQueue) updateCapacity(peer *peerConnection, items int, span time.Duration) { + peer.UpdateReceiptRate(items, span) +} + +// reserve is responsible for allocating a requested number of pending receipts +// from the download queue to the specified peer. +func (q *receiptQueue) reserve(peer *peerConnection, items int) (*fetchRequest, bool, bool) { + return q.queue.ReserveReceipts(peer, items) +} + +// unreserve is responsible for removing the current receipt retrieval allocation +// assigned to a specific peer and placing it back into the pool to allow +// reassigning to some other peer. +func (q *receiptQueue) unreserve(peer string) int { + fails := q.queue.ExpireReceipts(peer) + if fails > 2 { + log.Trace("Receipt delivery timed out", "peer", peer) + } else { + log.Debug("Receipt delivery stalling", "peer", peer) + } + return fails +} + +// request is responsible for converting a generic fetch request into a receipt +// one and sending it to the remote peer for fulfillment. +func (q *receiptQueue) request(peer *peerConnection, req *fetchRequest, resCh chan *eth.Response) (*eth.Request, error) { + peer.log.Trace("Requesting new batch of receipts", "count", len(req.Headers), "from", req.Headers[0].Number) + if q.receiptFetchHook != nil { + q.receiptFetchHook(req.Headers) + } + hashes := make([]common.Hash, 0, len(req.Headers)) + for _, header := range req.Headers { + hashes = append(hashes, header.Hash()) + } + return peer.peer.RequestReceipts(hashes, resCh) +} + +// deliver is responsible for taking a generic response packet from the concurrent +// fetcher, unpacking the receipt data and delivering it to the downloader's queue. +func (q *receiptQueue) deliver(peer *peerConnection, packet *eth.Response) (int, error) { + receipts := *packet.Res.(*eth.ReceiptsPacket) + hashes := packet.Meta.([]common.Hash) // {receipt hashes} + + accepted, err := q.queue.DeliverReceipts(peer.id, receipts, hashes) + switch { + case err == nil && len(receipts) == 0: + peer.log.Trace("Requested receipts delivered") + case err == nil: + peer.log.Trace("Delivered new batch of receipts", "count", len(receipts), "accepted", accepted) + default: + peer.log.Debug("Failed to deliver retrieved receipts", "err", err) + } + return accepted, err +} diff --git a/eth/downloader/metrics.go b/eth/downloader/metrics.go index d6ac27ad..23c033a8 100644 --- a/eth/downloader/metrics.go +++ b/eth/downloader/metrics.go @@ -19,7 +19,7 @@ package downloader import ( - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/metrics" ) var ( @@ -38,6 +38,5 @@ var ( receiptDropMeter = metrics.NewRegisteredMeter("eth/downloader/receipts/drop", nil) receiptTimeoutMeter = metrics.NewRegisteredMeter("eth/downloader/receipts/timeout", nil) - stateInMeter = metrics.NewRegisteredMeter("eth/downloader/states/in", nil) - stateDropMeter = metrics.NewRegisteredMeter("eth/downloader/states/drop", nil) + throttleCounter = metrics.NewRegisteredCounter("eth/downloader/throttle", nil) ) diff --git a/eth/downloader/modes.go b/eth/downloader/modes.go index 8ecdf91f..d388b9ee 100644 --- a/eth/downloader/modes.go +++ b/eth/downloader/modes.go @@ -19,11 +19,12 @@ package downloader import "fmt" // SyncMode represents the synchronisation mode of the downloader. -type SyncMode int +// It is a uint32 as it is used with atomic operations. +type SyncMode uint32 const ( FullSync SyncMode = iota // Synchronise the entire blockchain history from full blocks - FastSync // Quickly download the headers, full sync only at the chain head + SnapSync // Download the chain and the state via compact snapshots LightSync // Download only the headers and terminate afterwards ) @@ -36,8 +37,8 @@ func (mode SyncMode) String() string { switch mode { case FullSync: return "full" - case FastSync: - return "fast" + case SnapSync: + return "snap" case LightSync: return "light" default: @@ -49,8 +50,8 @@ func (mode SyncMode) MarshalText() ([]byte, error) { switch mode { case FullSync: return []byte("full"), nil - case FastSync: - return []byte("fast"), nil + case SnapSync: + return []byte("snap"), nil case LightSync: return []byte("light"), nil default: @@ -62,12 +63,12 @@ func (mode *SyncMode) UnmarshalText(text []byte) error { switch string(text) { case "full": *mode = FullSync - case "fast": - *mode = FastSync + case "snap": + *mode = SnapSync case "light": *mode = LightSync default: - return fmt.Errorf(`unknown sync mode %q, want "full", "fast" or "light"`, text) + return fmt.Errorf(`unknown sync mode %q, want "full", "snap" or "light"`, text) } return nil } diff --git a/eth/downloader/peer.go b/eth/downloader/peer.go index 0726900f..6b826949 100644 --- a/eth/downloader/peer.go +++ b/eth/downloader/peer.go @@ -21,26 +21,22 @@ package downloader import ( "errors" - "fmt" - "math" "math/big" - "sort" "sync" - "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/msgrate" ) const ( - maxLackingHashes = 4096 // Maximum number of entries allowed on the list or lacking items - measurementImpact = 0.1 // The impact a single measurement has on a peer's final throughput value. + maxLackingHashes = 4096 // Maximum number of entries allowed on the list or lacking items ) var ( - errAlreadyFetching = errors.New("already fetching blocks from peer") errAlreadyRegistered = errors.New("peer is already registered") errNotRegistered = errors.New("peer is not registered") ) @@ -49,28 +45,12 @@ var ( type peerConnection struct { id string // Unique identifier of the peer - headerIdle int32 // Current header activity state of the peer (idle = 0, active = 1) - blockIdle int32 // Current block activity state of the peer (idle = 0, active = 1) - receiptIdle int32 // Current receipt activity state of the peer (idle = 0, active = 1) - stateIdle int32 // Current node data activity state of the peer (idle = 0, active = 1) - - headerThroughput float64 // Number of headers measured to be retrievable per second - blockThroughput float64 // Number of blocks (bodies) measured to be retrievable per second - receiptThroughput float64 // Number of receipts measured to be retrievable per second - stateThroughput float64 // Number of node data pieces measured to be retrievable per second - - rtt time.Duration // Request round trip time to track responsiveness (QoS) - - headerStarted time.Time // Time instance when the last header fetch was started - blockStarted time.Time // Time instance when the last block (body) fetch was started - receiptStarted time.Time // Time instance when the last receipt fetch was started - stateStarted time.Time // Time instance when the last node data fetch was started - + rates *msgrate.Tracker // Tracker to hone in on the number of items retrievable per second lacking map[common.Hash]struct{} // Set of hashes not to request (didn't have previously) peer Peer - version int // Eth protocol version number to switch strategies + version uint // Eth protocol version number to switch strategies log log.Logger // Contextual logger to add extra infos to peer logs lock sync.RWMutex } @@ -78,16 +58,15 @@ type peerConnection struct { // LightPeer encapsulates the methods required to synchronise with a remote light peer. type LightPeer interface { Head() (common.Hash, *big.Int) - RequestHeadersByHash(common.Hash, int, int, bool) error - RequestHeadersByNumber(uint64, int, int, bool) error + RequestHeadersByHash(common.Hash, int, int, bool, chan *eth.Response) (*eth.Request, error) + RequestHeadersByNumber(uint64, int, int, bool, chan *eth.Response) (*eth.Request, error) } // Peer encapsulates the methods required to synchronise with a remote full peer. type Peer interface { LightPeer - RequestBodies([]common.Hash) error - RequestReceipts([]common.Hash) error - RequestNodeData([]common.Hash) error + RequestBodies([]common.Hash, chan *eth.Response) (*eth.Request, error) + RequestReceipts([]common.Hash, chan *eth.Response) (*eth.Request, error) } // lightPeerWrapper wraps a LightPeer struct, stubbing out the Peer-only methods. @@ -96,30 +75,25 @@ type lightPeerWrapper struct { } func (w *lightPeerWrapper) Head() (common.Hash, *big.Int) { return w.peer.Head() } -func (w *lightPeerWrapper) RequestHeadersByHash(h common.Hash, amount int, skip int, reverse bool) error { - return w.peer.RequestHeadersByHash(h, amount, skip, reverse) +func (w *lightPeerWrapper) RequestHeadersByHash(h common.Hash, amount int, skip int, reverse bool, sink chan *eth.Response) (*eth.Request, error) { + return w.peer.RequestHeadersByHash(h, amount, skip, reverse, sink) } -func (w *lightPeerWrapper) RequestHeadersByNumber(i uint64, amount int, skip int, reverse bool) error { - return w.peer.RequestHeadersByNumber(i, amount, skip, reverse) +func (w *lightPeerWrapper) RequestHeadersByNumber(i uint64, amount int, skip int, reverse bool, sink chan *eth.Response) (*eth.Request, error) { + return w.peer.RequestHeadersByNumber(i, amount, skip, reverse, sink) } -func (w *lightPeerWrapper) RequestBodies([]common.Hash) error { +func (w *lightPeerWrapper) RequestBodies([]common.Hash, chan *eth.Response) (*eth.Request, error) { panic("RequestBodies not supported in light client mode sync") } -func (w *lightPeerWrapper) RequestReceipts([]common.Hash) error { +func (w *lightPeerWrapper) RequestReceipts([]common.Hash, chan *eth.Response) (*eth.Request, error) { panic("RequestReceipts not supported in light client mode sync") } -func (w *lightPeerWrapper) RequestNodeData([]common.Hash) error { - panic("RequestNodeData not supported in light client mode sync") -} // newPeerConnection creates a new downloader peer. -func newPeerConnection(id string, version int, peer Peer, logger log.Logger) *peerConnection { +func newPeerConnection(id string, version uint, peer Peer, logger log.Logger) *peerConnection { return &peerConnection{ id: id, lacking: make(map[common.Hash]struct{}), - - peer: peer, - + peer: peer, version: version, log: logger, } @@ -130,187 +104,55 @@ func (p *peerConnection) Reset() { p.lock.Lock() defer p.lock.Unlock() - atomic.StoreInt32(&p.headerIdle, 0) - atomic.StoreInt32(&p.blockIdle, 0) - atomic.StoreInt32(&p.receiptIdle, 0) - atomic.StoreInt32(&p.stateIdle, 0) - - p.headerThroughput = 0 - p.blockThroughput = 0 - p.receiptThroughput = 0 - p.stateThroughput = 0 - p.lacking = make(map[common.Hash]struct{}) } -// FetchHeaders sends a header retrieval request to the remote peer. -func (p *peerConnection) FetchHeaders(from uint64, count int) error { - // Sanity check the protocol version - if p.version < 62 { - panic(fmt.Sprintf("header fetch [eth/62+] requested on eth/%d", p.version)) - } - // Short circuit if the peer is already fetching - if !atomic.CompareAndSwapInt32(&p.headerIdle, 0, 1) { - return errAlreadyFetching - } - p.headerStarted = time.Now() - - // Issue the header retrieval request (absolut upwards without gaps) - go p.peer.RequestHeadersByNumber(from, count, 0, false) - - return nil -} - -// FetchBodies sends a block body retrieval request to the remote peer. -func (p *peerConnection) FetchBodies(request *fetchRequest) error { - // Sanity check the protocol version - if p.version < 62 { - panic(fmt.Sprintf("body fetch [eth/62+] requested on eth/%d", p.version)) - } - // Short circuit if the peer is already fetching - if !atomic.CompareAndSwapInt32(&p.blockIdle, 0, 1) { - return errAlreadyFetching - } - p.blockStarted = time.Now() - - // Convert the header set to a retrievable slice - hashes := make([]common.Hash, 0, len(request.Headers)) - for _, header := range request.Headers { - hashes = append(hashes, header.Hash()) - } - go p.peer.RequestBodies(hashes) - - return nil -} - -// FetchReceipts sends a receipt retrieval request to the remote peer. -func (p *peerConnection) FetchReceipts(request *fetchRequest) error { - // Sanity check the protocol version - if p.version < 63 { - panic(fmt.Sprintf("body fetch [eth/63+] requested on eth/%d", p.version)) - } - // Short circuit if the peer is already fetching - if !atomic.CompareAndSwapInt32(&p.receiptIdle, 0, 1) { - return errAlreadyFetching - } - p.receiptStarted = time.Now() - - // Convert the header set to a retrievable slice - hashes := make([]common.Hash, 0, len(request.Headers)) - for _, header := range request.Headers { - hashes = append(hashes, header.Hash()) - } - go p.peer.RequestReceipts(hashes) - - return nil -} - -// FetchNodeData sends a node state data retrieval request to the remote peer. -func (p *peerConnection) FetchNodeData(hashes []common.Hash) error { - // Sanity check the protocol version - if p.version < 63 { - panic(fmt.Sprintf("node data fetch [eth/63+] requested on eth/%d", p.version)) - } - // Short circuit if the peer is already fetching - if !atomic.CompareAndSwapInt32(&p.stateIdle, 0, 1) { - return errAlreadyFetching - } - p.stateStarted = time.Now() - - go p.peer.RequestNodeData(hashes) - - return nil -} - -// SetHeadersIdle sets the peer to idle, allowing it to execute new header retrieval -// requests. Its estimated header retrieval throughput is updated with that measured -// just now. -func (p *peerConnection) SetHeadersIdle(delivered int) { - p.setIdle(p.headerStarted, delivered, &p.headerThroughput, &p.headerIdle) -} - -// SetBodiesIdle sets the peer to idle, allowing it to execute block body retrieval -// requests. Its estimated body retrieval throughput is updated with that measured -// just now. -func (p *peerConnection) SetBodiesIdle(delivered int) { - p.setIdle(p.blockStarted, delivered, &p.blockThroughput, &p.blockIdle) +// UpdateHeaderRate updates the peer's estimated header retrieval throughput with +// the current measurement. +func (p *peerConnection) UpdateHeaderRate(delivered int, elapsed time.Duration) { + p.rates.Update(eth.BlockHeadersMsg, elapsed, delivered) } -// SetReceiptsIdle sets the peer to idle, allowing it to execute new receipt -// retrieval requests. Its estimated receipt retrieval throughput is updated -// with that measured just now. -func (p *peerConnection) SetReceiptsIdle(delivered int) { - p.setIdle(p.receiptStarted, delivered, &p.receiptThroughput, &p.receiptIdle) +// UpdateBodyRate updates the peer's estimated body retrieval throughput with the +// current measurement. +func (p *peerConnection) UpdateBodyRate(delivered int, elapsed time.Duration) { + p.rates.Update(eth.BlockBodiesMsg, elapsed, delivered) } -// SetNodeDataIdle sets the peer to idle, allowing it to execute new state trie -// data retrieval requests. Its estimated state retrieval throughput is updated -// with that measured just now. -func (p *peerConnection) SetNodeDataIdle(delivered int) { - p.setIdle(p.stateStarted, delivered, &p.stateThroughput, &p.stateIdle) +// UpdateReceiptRate updates the peer's estimated receipt retrieval throughput +// with the current measurement. +func (p *peerConnection) UpdateReceiptRate(delivered int, elapsed time.Duration) { + p.rates.Update(eth.ReceiptsMsg, elapsed, delivered) } -// setIdle sets the peer to idle, allowing it to execute new retrieval requests. -// Its estimated retrieval throughput is updated with that measured just now. -func (p *peerConnection) setIdle(started time.Time, delivered int, throughput *float64, idle *int32) { - // Irrelevant of the scaling, make sure the peer ends up idle - defer atomic.StoreInt32(idle, 0) - - p.lock.Lock() - defer p.lock.Unlock() - - // If nothing was delivered (hard timeout / unavailable data), reduce throughput to minimum - if delivered == 0 { - *throughput = 0 - return - } - // Otherwise update the throughput with a new measurement - elapsed := time.Since(started) + 1 // +1 (ns) to ensure non-zero divisor - measured := float64(delivered) / (float64(elapsed) / float64(time.Second)) - - *throughput = (1-measurementImpact)*(*throughput) + measurementImpact*measured - p.rtt = time.Duration((1-measurementImpact)*float64(p.rtt) + measurementImpact*float64(elapsed)) - - p.log.Trace("Peer throughput measurements updated", - "hps", p.headerThroughput, "bps", p.blockThroughput, - "rps", p.receiptThroughput, "sps", p.stateThroughput, - "miss", len(p.lacking), "rtt", p.rtt) -} - -// HeaderCapacity retrieves the peers header download allowance based on its +// HeaderCapacity retrieves the peer's header download allowance based on its // previously discovered throughput. func (p *peerConnection) HeaderCapacity(targetRTT time.Duration) int { - p.lock.RLock() - defer p.lock.RUnlock() - - return int(math.Min(1+math.Max(1, p.headerThroughput*float64(targetRTT)/float64(time.Second)), float64(MaxHeaderFetch))) + cap := p.rates.Capacity(eth.BlockHeadersMsg, targetRTT) + if cap > MaxHeaderFetch { + cap = MaxHeaderFetch + } + return cap } -// BlockCapacity retrieves the peers block download allowance based on its +// BodyCapacity retrieves the peer's body download allowance based on its // previously discovered throughput. -func (p *peerConnection) BlockCapacity(targetRTT time.Duration) int { - p.lock.RLock() - defer p.lock.RUnlock() - - return int(math.Min(1+math.Max(1, p.blockThroughput*float64(targetRTT)/float64(time.Second)), float64(MaxBlockFetch))) +func (p *peerConnection) BodyCapacity(targetRTT time.Duration) int { + cap := p.rates.Capacity(eth.BlockBodiesMsg, targetRTT) + if cap > MaxBlockFetch { + cap = MaxBlockFetch + } + return cap } // ReceiptCapacity retrieves the peers receipt download allowance based on its // previously discovered throughput. func (p *peerConnection) ReceiptCapacity(targetRTT time.Duration) int { - p.lock.RLock() - defer p.lock.RUnlock() - - return int(math.Min(1+math.Max(1, p.receiptThroughput*float64(targetRTT)/float64(time.Second)), float64(MaxReceiptFetch))) -} - -// NodeDataCapacity retrieves the peers state download allowance based on its -// previously discovered throughput. -func (p *peerConnection) NodeDataCapacity(targetRTT time.Duration) int { - p.lock.RLock() - defer p.lock.RUnlock() - - return int(math.Min(1+math.Max(1, p.stateThroughput*float64(targetRTT)/float64(time.Second)), float64(MaxStateFetch))) + cap := p.rates.Capacity(eth.ReceiptsMsg, targetRTT) + if cap > MaxReceiptFetch { + cap = MaxReceiptFetch + } + return cap } // MarkLacking appends a new entity to the set of items (blocks, receipts, states) @@ -339,30 +181,34 @@ func (p *peerConnection) Lacks(hash common.Hash) bool { return ok } +// peeringEvent is sent on the peer event feed when a remote peer connects or +// disconnects. +type peeringEvent struct { + peer *peerConnection + join bool +} + // peerSet represents the collection of active peer participating in the chain // download procedure. type peerSet struct { - peers map[string]*peerConnection - newPeerFeed event.Feed - peerDropFeed event.Feed - lock sync.RWMutex + peers map[string]*peerConnection + rates *msgrate.Trackers // Set of rate trackers to give the sync a common beat + events event.Feed // Feed to publish peer lifecycle events on + + lock sync.RWMutex } // newPeerSet creates a new peer set top track the active download sources. func newPeerSet() *peerSet { return &peerSet{ peers: make(map[string]*peerConnection), + rates: msgrate.NewTrackers(log.New("proto", "eth")), } } -// SubscribeNewPeers subscribes to peer arrival events. -func (ps *peerSet) SubscribeNewPeers(ch chan<- *peerConnection) event.Subscription { - return ps.newPeerFeed.Subscribe(ch) -} - -// SubscribePeerDrops subscribes to peer departure events. -func (ps *peerSet) SubscribePeerDrops(ch chan<- *peerConnection) event.Subscription { - return ps.peerDropFeed.Subscribe(ch) +// SubscribeEvents subscribes to peer arrival and departure events. +func (ps *peerSet) SubscribeEvents(ch chan<- *peeringEvent) event.Subscription { + return ps.events.Subscribe(ch) } // Reset iterates over the current peer set, and resets each of the known peers @@ -383,35 +229,21 @@ func (ps *peerSet) Reset() { // average of all existing peers, to give it a realistic chance of being used // for data retrievals. func (ps *peerSet) Register(p *peerConnection) error { - // Retrieve the current median RTT as a sane default - p.rtt = ps.medianRTT() - // Register the new peer with some meaningful defaults ps.lock.Lock() if _, ok := ps.peers[p.id]; ok { ps.lock.Unlock() return errAlreadyRegistered } - if len(ps.peers) > 0 { - p.headerThroughput, p.blockThroughput, p.receiptThroughput, p.stateThroughput = 0, 0, 0, 0 - - for _, peer := range ps.peers { - peer.lock.RLock() - p.headerThroughput += peer.headerThroughput - p.blockThroughput += peer.blockThroughput - p.receiptThroughput += peer.receiptThroughput - p.stateThroughput += peer.stateThroughput - peer.lock.RUnlock() - } - p.headerThroughput /= float64(len(ps.peers)) - p.blockThroughput /= float64(len(ps.peers)) - p.receiptThroughput /= float64(len(ps.peers)) - p.stateThroughput /= float64(len(ps.peers)) + p.rates = msgrate.NewTracker(ps.rates.MeanCapacities(), ps.rates.MedianRoundTrip()) + if err := ps.rates.Track(p.id, p.rates); err != nil { + ps.lock.Unlock() + return err } ps.peers[p.id] = p ps.lock.Unlock() - ps.newPeerFeed.Send(p) + ps.events.Send(&peeringEvent{peer: p, join: true}) return nil } @@ -421,13 +253,14 @@ func (ps *peerSet) Unregister(id string) error { ps.lock.Lock() p, ok := ps.peers[id] if !ok { - defer ps.lock.Unlock() + ps.lock.Unlock() return errNotRegistered } delete(ps.peers, id) + ps.rates.Untrack(id) ps.lock.Unlock() - ps.peerDropFeed.Send(p) + ps.events.Send(&peeringEvent{peer: p, join: false}) return nil } @@ -459,115 +292,22 @@ func (ps *peerSet) AllPeers() []*peerConnection { return list } -// HeaderIdlePeers retrieves a flat list of all the currently header-idle peers -// within the active peer set, ordered by their reputation. -func (ps *peerSet) HeaderIdlePeers() ([]*peerConnection, int) { - idle := func(p *peerConnection) bool { - return atomic.LoadInt32(&p.headerIdle) == 0 - } - throughput := func(p *peerConnection) float64 { - p.lock.RLock() - defer p.lock.RUnlock() - return p.headerThroughput - } - return ps.idlePeers(62, 64, idle, throughput) +// peerCapacitySort implements sort.Interface. +// It sorts peer connections by capacity (descending). +type peerCapacitySort struct { + peers []*peerConnection + caps []int } -// BodyIdlePeers retrieves a flat list of all the currently body-idle peers within -// the active peer set, ordered by their reputation. -func (ps *peerSet) BodyIdlePeers() ([]*peerConnection, int) { - idle := func(p *peerConnection) bool { - return atomic.LoadInt32(&p.blockIdle) == 0 - } - throughput := func(p *peerConnection) float64 { - p.lock.RLock() - defer p.lock.RUnlock() - return p.blockThroughput - } - return ps.idlePeers(62, 64, idle, throughput) -} - -// ReceiptIdlePeers retrieves a flat list of all the currently receipt-idle peers -// within the active peer set, ordered by their reputation. -func (ps *peerSet) ReceiptIdlePeers() ([]*peerConnection, int) { - idle := func(p *peerConnection) bool { - return atomic.LoadInt32(&p.receiptIdle) == 0 - } - throughput := func(p *peerConnection) float64 { - p.lock.RLock() - defer p.lock.RUnlock() - return p.receiptThroughput - } - return ps.idlePeers(63, 64, idle, throughput) -} - -// NodeDataIdlePeers retrieves a flat list of all the currently node-data-idle -// peers within the active peer set, ordered by their reputation. -func (ps *peerSet) NodeDataIdlePeers() ([]*peerConnection, int) { - idle := func(p *peerConnection) bool { - return atomic.LoadInt32(&p.stateIdle) == 0 - } - throughput := func(p *peerConnection) float64 { - p.lock.RLock() - defer p.lock.RUnlock() - return p.stateThroughput - } - return ps.idlePeers(63, 64, idle, throughput) +func (ps *peerCapacitySort) Len() int { + return len(ps.peers) } -// idlePeers retrieves a flat list of all currently idle peers satisfying the -// protocol version constraints, using the provided function to check idleness. -// The resulting set of peers are sorted by their measure throughput. -func (ps *peerSet) idlePeers(minProtocol, maxProtocol int, idleCheck func(*peerConnection) bool, throughput func(*peerConnection) float64) ([]*peerConnection, int) { - ps.lock.RLock() - defer ps.lock.RUnlock() - - idle, total := make([]*peerConnection, 0, len(ps.peers)), 0 - for _, p := range ps.peers { - if p.version >= minProtocol && p.version <= maxProtocol { - if idleCheck(p) { - idle = append(idle, p) - } - total++ - } - } - for i := 0; i < len(idle); i++ { - for j := i + 1; j < len(idle); j++ { - if throughput(idle[i]) < throughput(idle[j]) { - idle[i], idle[j] = idle[j], idle[i] - } - } - } - return idle, total +func (ps *peerCapacitySort) Less(i, j int) bool { + return ps.caps[i] > ps.caps[j] } -// medianRTT returns the median RTT of the peerset, considering only the tuning -// peers if there are more peers available. -func (ps *peerSet) medianRTT() time.Duration { - // Gather all the currently measured round trip times - ps.lock.RLock() - defer ps.lock.RUnlock() - - rtts := make([]float64, 0, len(ps.peers)) - for _, p := range ps.peers { - p.lock.RLock() - rtts = append(rtts, float64(p.rtt)) - p.lock.RUnlock() - } - sort.Float64s(rtts) - - median := rttMaxEstimate - if qosTuningPeers <= len(rtts) { - median = time.Duration(rtts[qosTuningPeers/2]) // Median of our tuning peers - } else if len(rtts) > 0 { - median = time.Duration(rtts[len(rtts)/2]) // Median of our connected peers (maintain even like this some baseline qos) - } - // Restrict the RTT into some QoS defaults, irrelevant of true RTT - if median < rttMinEstimate { - median = rttMinEstimate - } - if median > rttMaxEstimate { - median = rttMaxEstimate - } - return median +func (ps *peerCapacitySort) Swap(i, j int) { + ps.peers[i], ps.peers[j] = ps.peers[j], ps.peers[i] + ps.caps[i], ps.caps[j] = ps.caps[j], ps.caps[i] } diff --git a/eth/downloader/queue.go b/eth/downloader/queue.go index f42af93a..a8d2ea83 100644 --- a/eth/downloader/queue.go +++ b/eth/downloader/queue.go @@ -23,19 +23,26 @@ import ( "errors" "fmt" "sync" + "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" + "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/log" + "github.com/ethereum/go-ethereum/metrics" +) + +const ( + bodyType = uint(0) + receiptType = uint(1) ) var ( - blockCacheItems = 8192 // Maximum number of blocks to cache before throttling the download - blockCacheMemory = 64 * 1024 * 1024 // Maximum amount of memory to use for block caching - blockCacheSizeWeight = 0.1 // Multiplier to approximate the average block size based on past ones + blockCacheMaxItems = 8192 // Maximum number of blocks to cache before throttling the download + blockCacheInitialItems = 2048 // Initial number of blocks to start fetching, before we know the sizes of the blocks + blockCacheMemory = 256 * 1024 * 1024 // Maximum amount of memory to use for block caching + blockCacheSizeWeight = 0.1 // Multiplier to approximate the average block size based on past ones ) var ( @@ -46,16 +53,15 @@ var ( // fetchRequest is a currently running data retrieval operation. type fetchRequest struct { Peer *peerConnection // Peer to which the request was sent - From uint64 // [eth/62] Requested chain element index (used for skeleton fills only) - Headers []*types.Header // [eth/62] Requested headers, sorted by request order + From uint64 // Requested chain element index (used for skeleton fills only) + Headers []*types.Header // Requested headers, sorted by request order Time time.Time // Time when the request was made } // fetchResult is a struct collecting partial results from data fetchers until // all outstanding pieces complete and the result as a whole can be processed. type fetchResult struct { - Pending int // Number of data fetches still pending - Hash common.Hash // Hash of the header to prevent recalculating + pending int32 // Flag telling what deliveries are outstanding Header *types.Header Uncles []*types.Header @@ -63,63 +69,99 @@ type fetchResult struct { Receipts types.Receipts } +func newFetchResult(header *types.Header, fastSync bool) *fetchResult { + item := &fetchResult{ + Header: header, + } + if !header.EmptyBody() { + item.pending |= (1 << bodyType) + } + if fastSync && !header.EmptyReceipts() { + item.pending |= (1 << receiptType) + } + return item +} + +// SetBodyDone flags the body as finished. +func (f *fetchResult) SetBodyDone() { + if v := atomic.LoadInt32(&f.pending); (v & (1 << bodyType)) != 0 { + atomic.AddInt32(&f.pending, -1) + } +} + +// AllDone checks if item is done. +func (f *fetchResult) AllDone() bool { + return atomic.LoadInt32(&f.pending) == 0 +} + +// SetReceiptsDone flags the receipts as finished. +func (f *fetchResult) SetReceiptsDone() { + if v := atomic.LoadInt32(&f.pending); (v & (1 << receiptType)) != 0 { + atomic.AddInt32(&f.pending, -2) + } +} + +// Done checks if the given type is done already +func (f *fetchResult) Done(kind uint) bool { + v := atomic.LoadInt32(&f.pending) + return v&(1< 0 -} - // InFlightBlocks retrieves whether there are block fetch requests currently in // flight. func (q *queue) InFlightBlocks() bool { @@ -210,59 +241,8 @@ func (q *queue) Idle() bool { queued := q.blockTaskQueue.Size() + q.receiptTaskQueue.Size() pending := len(q.blockPendPool) + len(q.receiptPendPool) - cached := len(q.blockDonePool) + len(q.receiptDonePool) - - return (queued + pending + cached) == 0 -} - -// ShouldThrottleBlocks checks if the download should be throttled (active block (body) -// fetches exceed block cache). -func (q *queue) ShouldThrottleBlocks() bool { - q.lock.Lock() - defer q.lock.Unlock() - - return q.resultSlots(q.blockPendPool, q.blockDonePool) <= 0 -} -// ShouldThrottleReceipts checks if the download should be throttled (active receipt -// fetches exceed block cache). -func (q *queue) ShouldThrottleReceipts() bool { - q.lock.Lock() - defer q.lock.Unlock() - - return q.resultSlots(q.receiptPendPool, q.receiptDonePool) <= 0 -} - -// resultSlots calculates the number of results slots available for requests -// whilst adhering to both the item and the memory limit too of the results -// cache. -func (q *queue) resultSlots(pendPool map[string]*fetchRequest, donePool map[common.Hash]struct{}) int { - // Calculate the maximum length capped by the memory limit - limit := len(q.resultCache) - if common.StorageSize(len(q.resultCache))*q.resultSize > common.StorageSize(blockCacheMemory) { - limit = int((common.StorageSize(blockCacheMemory) + q.resultSize - 1) / q.resultSize) - } - // Calculate the number of slots already finished - finished := 0 - for _, result := range q.resultCache[:limit] { - if result == nil { - break - } - if _, ok := donePool[result.Hash]; ok { - finished++ - } - } - // Calculate the number of slots currently downloading - pending := 0 - for _, request := range pendPool { - for _, header := range request.Headers { - if header.Number.Uint64() < q.resultOffset+uint64(limit) { - pending++ - } - } - } - // Return the free slots to distribute - return limit - finished - pending + return (queued + pending) == 0 } // ScheduleSkeleton adds a batch of header retrieval tasks to the queue to fill @@ -280,6 +260,7 @@ func (q *queue) ScheduleSkeleton(from uint64, skeleton []*types.Header) { q.headerTaskQueue = prque.New(nil) q.headerPeerMiss = make(map[string]map[uint64]struct{}) // Reset availability to correct invalid chains q.headerResults = make([]*types.Header, len(skeleton)*MaxHeaderFetch) + q.headerHashes = make([]common.Hash, len(skeleton)*MaxHeaderFetch) q.headerProced = 0 q.headerOffset = from q.headerContCh = make(chan bool, 1) @@ -294,27 +275,27 @@ func (q *queue) ScheduleSkeleton(from uint64, skeleton []*types.Header) { // RetrieveHeaders retrieves the header chain assemble based on the scheduled // skeleton. -func (q *queue) RetrieveHeaders() ([]*types.Header, int) { +func (q *queue) RetrieveHeaders() ([]*types.Header, []common.Hash, int) { q.lock.Lock() defer q.lock.Unlock() - headers, proced := q.headerResults, q.headerProced - q.headerResults, q.headerProced = nil, 0 + headers, hashes, proced := q.headerResults, q.headerHashes, q.headerProced + q.headerResults, q.headerHashes, q.headerProced = nil, nil, 0 - return headers, proced + return headers, hashes, proced } // Schedule adds a set of headers for the download queue for scheduling, returning // the new headers encountered. -func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header { +func (q *queue) Schedule(headers []*types.Header, hashes []common.Hash, from uint64) []*types.Header { q.lock.Lock() defer q.lock.Unlock() // Insert all the headers prioritised by the contained block number inserts := make([]*types.Header, 0, len(headers)) - for _, header := range headers { + for i, header := range headers { // Make sure chain order is honoured and preserved throughout - hash := header.Hash() + hash := hashes[i] if header.Number == nil || header.Number.Uint64() != from { log.Warn("Header broke chain ordering", "number", header.Number, "hash", hash, "expected", from) break @@ -324,21 +305,22 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header { break } // Make sure no duplicate requests are executed + // We cannot skip this, even if the block is empty, since this is + // what triggers the fetchResult creation. if _, ok := q.blockTaskPool[hash]; ok { log.Warn("Header already scheduled for block fetch", "number", header.Number, "hash", hash) - continue - } - if _, ok := q.receiptTaskPool[hash]; ok { - log.Warn("Header already scheduled for receipt fetch", "number", header.Number, "hash", hash) - continue + } else { + q.blockTaskPool[hash] = header + q.blockTaskQueue.Push(header, -int64(header.Number.Uint64())) } - // Queue the header for content retrieval - q.blockTaskPool[hash] = header - q.blockTaskQueue.Push(header, -int64(header.Number.Uint64())) - - if q.mode == FastSync { - q.receiptTaskPool[hash] = header - q.receiptTaskQueue.Push(header, -int64(header.Number.Uint64())) + // Queue for receipt retrieval + if q.mode == SnapSync && !header.EmptyReceipts() { + if _, ok := q.receiptTaskPool[hash]; ok { + log.Warn("Header already scheduled for receipt fetch", "number", header.Number, "hash", hash) + } else { + q.receiptTaskPool[hash] = header + q.receiptTaskQueue.Push(header, -int64(header.Number.Uint64())) + } } inserts = append(inserts, header) q.headerHead = hash @@ -349,66 +331,84 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header { // Results retrieves and permanently removes a batch of fetch results from // the cache. the result slice will be empty if the queue has been closed. +// Results can be called concurrently with Deliver and Schedule, +// but assumes that there are not two simultaneous callers to Results func (q *queue) Results(block bool) []*fetchResult { - q.lock.Lock() - defer q.lock.Unlock() - - // Count the number of items available for processing - nproc := q.countProcessableItems() - for nproc == 0 && !q.closed { - if !block { - return nil + // Abort early if there are no items and non-blocking requested + if !block && !q.resultCache.HasCompletedItems() { + return nil + } + closed := false + for !closed && !q.resultCache.HasCompletedItems() { + // In order to wait on 'active', we need to obtain the lock. + // That may take a while, if someone is delivering at the same + // time, so after obtaining the lock, we check again if there + // are any results to fetch. + // Also, in-between we ask for the lock and the lock is obtained, + // someone can have closed the queue. In that case, we should + // return the available results and stop blocking + q.lock.Lock() + if q.resultCache.HasCompletedItems() || q.closed { + q.lock.Unlock() + break } + // No items available, and not closed q.active.Wait() - nproc = q.countProcessableItems() - } - // Since we have a batch limit, don't pull more into "dangling" memory - if nproc > maxResultsProcess { - nproc = maxResultsProcess - } - results := make([]*fetchResult, nproc) - copy(results, q.resultCache[:nproc]) - if len(results) > 0 { - // Mark results as done before dropping them from the cache. - for _, result := range results { - hash := result.Header.Hash() - delete(q.blockDonePool, hash) - delete(q.receiptDonePool, hash) + closed = q.closed + q.lock.Unlock() + } + // Regardless if closed or not, we can still deliver whatever we have + results := q.resultCache.GetCompleted(maxResultsProcess) + for _, result := range results { + // Recalculate the result item weights to prevent memory exhaustion + size := result.Header.Size() + for _, uncle := range result.Uncles { + size += uncle.Size() } - // Delete the results from the cache and clear the tail. - copy(q.resultCache, q.resultCache[nproc:]) - for i := len(q.resultCache) - nproc; i < len(q.resultCache); i++ { - q.resultCache[i] = nil + for _, receipt := range result.Receipts { + size += receipt.Size() } - // Advance the expected block number of the first cache entry. - q.resultOffset += uint64(nproc) + for _, tx := range result.Transactions { + size += tx.Size() + } + q.resultSize = common.StorageSize(blockCacheSizeWeight)*size + + (1-common.StorageSize(blockCacheSizeWeight))*q.resultSize + } + // Using the newly calibrated resultsize, figure out the new throttle limit + // on the result cache + throttleThreshold := uint64((common.StorageSize(blockCacheMemory) + q.resultSize - 1) / q.resultSize) + throttleThreshold = q.resultCache.SetThrottleThreshold(throttleThreshold) - // Recalculate the result item weights to prevent memory exhaustion - for _, result := range results { - size := result.Header.Size() - for _, uncle := range result.Uncles { - size += uncle.Size() - } - for _, receipt := range result.Receipts { - size += receipt.Size() - } - for _, tx := range result.Transactions { - size += tx.Size() - } - q.resultSize = common.StorageSize(blockCacheSizeWeight)*size + (1-common.StorageSize(blockCacheSizeWeight))*q.resultSize + // With results removed from the cache, wake throttled fetchers + for _, ch := range []chan bool{q.blockWakeCh, q.receiptWakeCh} { + select { + case ch <- true: + default: } } + // Log some info at certain times + if time.Since(q.lastStatLog) > 60*time.Second { + q.lastStatLog = time.Now() + info := q.Stats() + info = append(info, "throttle", throttleThreshold) + log.Info("Downloader queue stats", info...) + } return results } -// countProcessableItems counts the processable items. -func (q *queue) countProcessableItems() int { - for i, result := range q.resultCache { - if result == nil || result.Pending > 0 { - return i - } +func (q *queue) Stats() []interface{} { + q.lock.RLock() + defer q.lock.RUnlock() + + return q.stats() +} + +func (q *queue) stats() []interface{} { + return []interface{}{ + "receiptTasks", q.receiptTaskQueue.Size(), + "blockTasks", q.blockTaskQueue.Size(), + "itemSize", q.resultSize, } - return len(q.resultCache) } // ReserveHeaders reserves a set of headers for the given peer, skipping any @@ -454,27 +454,21 @@ func (q *queue) ReserveHeaders(p *peerConnection, count int) *fetchRequest { // ReserveBodies reserves a set of body fetches for the given peer, skipping any // previously failed downloads. Beside the next batch of needed fetches, it also // returns a flag whether empty blocks were queued requiring processing. -func (q *queue) ReserveBodies(p *peerConnection, count int) (*fetchRequest, bool, error) { - isNoop := func(header *types.Header) bool { - return header.TxHash == types.EmptyRootHash && header.UncleHash == types.EmptyUncleHash - } +func (q *queue) ReserveBodies(p *peerConnection, count int) (*fetchRequest, bool, bool) { q.lock.Lock() defer q.lock.Unlock() - return q.reserveHeaders(p, count, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, q.blockDonePool, isNoop) + return q.reserveHeaders(p, count, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, bodyType) } // ReserveReceipts reserves a set of receipt fetches for the given peer, skipping // any previously failed downloads. Beside the next batch of needed fetches, it // also returns a flag whether empty receipts were queued requiring importing. -func (q *queue) ReserveReceipts(p *peerConnection, count int) (*fetchRequest, bool, error) { - isNoop := func(header *types.Header) bool { - return header.ReceiptHash == types.EmptyRootHash - } +func (q *queue) ReserveReceipts(p *peerConnection, count int) (*fetchRequest, bool, bool) { q.lock.Lock() defer q.lock.Unlock() - return q.reserveHeaders(p, count, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, q.receiptDonePool, isNoop) + return q.reserveHeaders(p, count, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, receiptType) } // reserveHeaders reserves a set of data download operations for a given peer, @@ -484,57 +478,71 @@ func (q *queue) ReserveReceipts(p *peerConnection, count int) (*fetchRequest, bo // Note, this method expects the queue lock to be already held for writing. The // reason the lock is not obtained in here is because the parameters already need // to access the queue, so they already need a lock anyway. +// +// Returns: +// item - the fetchRequest +// progress - whether any progress was made +// throttle - if the caller should throttle for a while func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common.Hash]*types.Header, taskQueue *prque.Prque, - pendPool map[string]*fetchRequest, donePool map[common.Hash]struct{}, isNoop func(*types.Header) bool) (*fetchRequest, bool, error) { + pendPool map[string]*fetchRequest, kind uint) (*fetchRequest, bool, bool) { // Short circuit if the pool has been depleted, or if the peer's already // downloading something (sanity check not to corrupt state) if taskQueue.Empty() { - return nil, false, nil + return nil, false, true } if _, ok := pendPool[p.id]; ok { - return nil, false, nil + return nil, false, false } - // Calculate an upper limit on the items we might fetch (i.e. throttling) - space := q.resultSlots(pendPool, donePool) - // Retrieve a batch of tasks, skipping previously failed ones send := make([]*types.Header, 0, count) skip := make([]*types.Header, 0) - progress := false - for proc := 0; proc < space && len(send) < count && !taskQueue.Empty(); proc++ { - header := taskQueue.PopItem().(*types.Header) - hash := header.Hash() - - // If we're the first to request this task, initialise the result container - index := int(header.Number.Int64() - int64(q.resultOffset)) - if index >= len(q.resultCache) || index < 0 { - common.Report("index allocation went beyond available resultCache space") - return nil, false, errInvalidChain + throttled := false + for proc := 0; len(send) < count && !taskQueue.Empty(); proc++ { + // the task queue will pop items in order, so the highest prio block + // is also the lowest block number. + h, _ := taskQueue.Peek() + header := h.(*types.Header) + // we can ask the resultcache if this header is within the + // "prioritized" segment of blocks. If it is not, we need to throttle + + stale, throttle, item, err := q.resultCache.AddFetch(header, q.mode == SnapSync) + if stale { + // Don't put back in the task queue, this item has already been + // delivered upstream + taskQueue.PopItem() + progress = true + delete(taskPool, header.Hash()) + proc = proc - 1 + log.Error("Fetch reservation already delivered", "number", header.Number.Uint64()) + continue } - if q.resultCache[index] == nil { - components := 1 - if q.mode == FastSync { - components = 2 - } - q.resultCache[index] = &fetchResult{ - Pending: components, - Hash: hash, - Header: header, - } + if throttle { + // There are no resultslots available. Leave it in the task queue + // However, if there are any left as 'skipped', we should not tell + // the caller to throttle, since we still want some other + // peer to fetch those for us + throttled = len(skip) == 0 + break } - // If this fetch task is a noop, skip this fetch operation - if isNoop(header) { - donePool[hash] = struct{}{} - delete(taskPool, hash) - - space, proc = space-1, proc-1 - q.resultCache[index].Pending-- + if err != nil { + // this most definitely should _not_ happen + log.Warn("Failed to reserve headers", "err", err) + // There are no resultslots available. Leave it in the task queue + break + } + if item.Done(kind) { + // If it's a noop, we can skip this task + delete(taskPool, header.Hash()) + taskQueue.PopItem() + proc = proc - 1 progress = true continue } + // Remove it from the task queue + taskQueue.PopItem() // Otherwise unless the peer is known not to have the data, add to the retrieve list - if p.Lacks(hash) { + if p.Lacks(header.Hash()) { skip = append(skip, header) } else { send = append(send, header) @@ -544,13 +552,13 @@ func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common for _, header := range skip { taskQueue.Push(header, -int64(header.Number.Uint64())) } - if progress { + if q.resultCache.HasCompletedItems() { // Wake Results, resultCache was modified q.active.Signal() } // Assemble and return the block download request if len(send) == 0 { - return nil, progress, nil + return nil, progress, throttled } request := &fetchRequest{ Peer: p, @@ -558,39 +566,7 @@ func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common Time: time.Now(), } pendPool[p.id] = request - - return request, progress, nil -} - -// CancelHeaders aborts a fetch request, returning all pending skeleton indexes to the queue. -func (q *queue) CancelHeaders(request *fetchRequest) { - q.cancel(request, q.headerTaskQueue, q.headerPendPool) -} - -// CancelBodies aborts a body fetch request, returning all pending headers to the -// task queue. -func (q *queue) CancelBodies(request *fetchRequest) { - q.cancel(request, q.blockTaskQueue, q.blockPendPool) -} - -// CancelReceipts aborts a body fetch request, returning all pending headers to -// the task queue. -func (q *queue) CancelReceipts(request *fetchRequest) { - q.cancel(request, q.receiptTaskQueue, q.receiptPendPool) -} - -// Cancel aborts a fetch request, returning all pending hashes to the task queue. -func (q *queue) cancel(request *fetchRequest, taskQueue *prque.Prque, pendPool map[string]*fetchRequest) { - q.lock.Lock() - defer q.lock.Unlock() - - if request.From > 0 { - taskQueue.Push(request.From, -int64(request.From)) - } - for _, header := range request.Headers { - taskQueue.Push(header, -int64(header.Number.Uint64())) - } - delete(pendPool, request.Peer.id) + return request, progress, throttled } // Revoke cancels all pending requests belonging to a given peer. This method is @@ -600,6 +576,10 @@ func (q *queue) Revoke(peerID string) { q.lock.Lock() defer q.lock.Unlock() + if request, ok := q.headerPendPool[peerID]; ok { + q.headerTaskQueue.Push(request.From, -int64(request.From)) + delete(q.headerPendPool, peerID) + } if request, ok := q.blockPendPool[peerID]; ok { for _, header := range request.Headers { q.blockTaskQueue.Push(header, -int64(header.Number.Uint64())) @@ -614,62 +594,60 @@ func (q *queue) Revoke(peerID string) { } } -// ExpireHeaders checks for in flight requests that exceeded a timeout allowance, -// canceling them and returning the responsible peers for penalisation. -func (q *queue) ExpireHeaders(timeout time.Duration) map[string]int { +// ExpireHeaders cancels a request that timed out and moves the pending fetch +// task back into the queue for rescheduling. +func (q *queue) ExpireHeaders(peer string) int { q.lock.Lock() defer q.lock.Unlock() - return q.expire(timeout, q.headerPendPool, q.headerTaskQueue, headerTimeoutMeter) + headerTimeoutMeter.Mark(1) + return q.expire(peer, q.headerPendPool, q.headerTaskQueue) } // ExpireBodies checks for in flight block body requests that exceeded a timeout // allowance, canceling them and returning the responsible peers for penalisation. -func (q *queue) ExpireBodies(timeout time.Duration) map[string]int { +func (q *queue) ExpireBodies(peer string) int { q.lock.Lock() defer q.lock.Unlock() - return q.expire(timeout, q.blockPendPool, q.blockTaskQueue, bodyTimeoutMeter) + bodyTimeoutMeter.Mark(1) + return q.expire(peer, q.blockPendPool, q.blockTaskQueue) } // ExpireReceipts checks for in flight receipt requests that exceeded a timeout // allowance, canceling them and returning the responsible peers for penalisation. -func (q *queue) ExpireReceipts(timeout time.Duration) map[string]int { +func (q *queue) ExpireReceipts(peer string) int { q.lock.Lock() defer q.lock.Unlock() - return q.expire(timeout, q.receiptPendPool, q.receiptTaskQueue, receiptTimeoutMeter) + receiptTimeoutMeter.Mark(1) + return q.expire(peer, q.receiptPendPool, q.receiptTaskQueue) } -// expire is the generic check that move expired tasks from a pending pool back -// into a task pool, returning all entities caught with expired tasks. +// expire is the generic check that moves a specific expired task from a pending +// pool back into a task pool. // -// Note, this method expects the queue lock to be already held. The -// reason the lock is not obtained in here is because the parameters already need -// to access the queue, so they already need a lock anyway. -func (q *queue) expire(timeout time.Duration, pendPool map[string]*fetchRequest, taskQueue *prque.Prque, timeoutMeter metrics.Meter) map[string]int { - // Iterate over the expired requests and return each to the queue - expiries := make(map[string]int) - for id, request := range pendPool { - if time.Since(request.Time) > timeout { - // Update the metrics with the timeout - timeoutMeter.Mark(1) - - // Return any non satisfied requests to the pool - if request.From > 0 { - taskQueue.Push(request.From, -int64(request.From)) - } - for _, header := range request.Headers { - taskQueue.Push(header, -int64(header.Number.Uint64())) - } - // Add the peer to the expiry report along the number of failed requests - expiries[id] = len(request.Headers) - - // Remove the expired requests from the pending pool directly - delete(pendPool, id) - } +// Note, this method expects the queue lock to be already held. The reason the +// lock is not obtained in here is that the parameters already need to access +// the queue, so they already need a lock anyway. +func (q *queue) expire(peer string, pendPool map[string]*fetchRequest, taskQueue *prque.Prque) int { + // Retrieve the request being expired and log an error if it's non-existnet, + // as there's no order of events that should lead to such expirations. + req := pendPool[peer] + if req == nil { + log.Error("Expired request does not exist", "peer", peer) + return 0 + } + delete(pendPool, peer) + + // Return any non-satisfied requests to the pool + if req.From > 0 { + taskQueue.Push(req.From, -int64(req.From)) + } + for _, header := range req.Headers { + taskQueue.Push(header, -int64(header.Number.Uint64())) } - return expiries + return len(req.Headers) } // DeliverHeaders injects a header retrieval response into the header results @@ -677,51 +655,65 @@ func (q *queue) expire(timeout time.Duration, pendPool map[string]*fetchRequest, // if they do not map correctly to the skeleton. // // If the headers are accepted, the method makes an attempt to deliver the set -// of ready headers to the processor to keep the pipeline full. However it will +// of ready headers to the processor to keep the pipeline full. However, it will // not block to prevent stalling other pending deliveries. -func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh chan []*types.Header) (int, error) { +func (q *queue) DeliverHeaders(id string, headers []*types.Header, hashes []common.Hash, headerProcCh chan *headerTask) (int, error) { q.lock.Lock() defer q.lock.Unlock() + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:16]) + } // Short circuit if the data was never requested request := q.headerPendPool[id] if request == nil { + headerDropMeter.Mark(int64(len(headers))) return 0, errNoFetchesPending } - headerReqTimer.UpdateSince(request.Time) delete(q.headerPendPool, id) + headerReqTimer.UpdateSince(request.Time) + headerInMeter.Mark(int64(len(headers))) + // Ensure headers can be mapped onto the skeleton chain target := q.headerTaskPool[request.From].Hash() accepted := len(headers) == MaxHeaderFetch if accepted { if headers[0].Number.Uint64() != request.From { - log.Trace("First header broke chain ordering", "peer", id, "number", headers[0].Number, "hash", headers[0].Hash(), request.From) + logger.Trace("First header broke chain ordering", "number", headers[0].Number, "hash", hashes[0], "expected", request.From) accepted = false - } else if headers[len(headers)-1].Hash() != target { - log.Trace("Last header broke skeleton structure ", "peer", id, "number", headers[len(headers)-1].Number, "hash", headers[len(headers)-1].Hash(), "expected", target) + } else if hashes[len(headers)-1] != target { + logger.Trace("Last header broke skeleton structure ", "number", headers[len(headers)-1].Number, "hash", hashes[len(headers)-1], "expected", target) accepted = false } } if accepted { + parentHash := hashes[0] for i, header := range headers[1:] { - hash := header.Hash() + hash := hashes[i+1] if want := request.From + 1 + uint64(i); header.Number.Uint64() != want { - log.Warn("Header broke chain ordering", "peer", id, "number", header.Number, "hash", hash, "expected", want) + logger.Warn("Header broke chain ordering", "number", header.Number, "hash", hash, "expected", want) accepted = false break } - if headers[i].Hash() != header.ParentHash { - log.Warn("Header broke chain ancestry", "peer", id, "number", header.Number, "hash", hash) + if parentHash != header.ParentHash { + logger.Warn("Header broke chain ancestry", "number", header.Number, "hash", hash) accepted = false break } + // Set-up parent hash for next round + parentHash = hash } } // If the batch of headers wasn't accepted, mark as unavailable if !accepted { - log.Trace("Skeleton filling not accepted", "peer", id, "from", request.From) + logger.Trace("Skeleton filling not accepted", "from", request.From) + headerDropMeter.Mark(int64(len(headers))) miss := q.headerPeerMiss[id] if miss == nil { @@ -735,6 +727,8 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh } // Clean up a successful fetch and try to deliver any sub-results copy(q.headerResults[request.From-q.headerOffset:], headers) + copy(q.headerHashes[request.From-q.headerOffset:], hashes) + delete(q.headerTaskPool, request.From) ready := 0 @@ -743,13 +737,19 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh } if ready > 0 { // Headers are ready for delivery, gather them and push forward (non blocking) - process := make([]*types.Header, ready) - copy(process, q.headerResults[q.headerProced:q.headerProced+ready]) + processHeaders := make([]*types.Header, ready) + copy(processHeaders, q.headerResults[q.headerProced:q.headerProced+ready]) + + processHashes := make([]common.Hash, ready) + copy(processHashes, q.headerHashes[q.headerProced:q.headerProced+ready]) select { - case headerProcCh <- process: - log.Trace("Pre-scheduled new headers", "peer", id, "count", len(process), "from", process[0].Number) - q.headerProced += len(process) + case headerProcCh <- &headerTask{ + headers: processHeaders, + hashes: processHashes, + }: + logger.Trace("Pre-scheduled new headers", "count", len(processHeaders), "from", processHeaders[0].Number) + q.headerProced += len(processHeaders) default: } } @@ -763,55 +763,71 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh // DeliverBodies injects a block body retrieval response into the results queue. // The method returns the number of blocks bodies accepted from the delivery and // also wakes any threads waiting for data delivery. -func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, uncleLists [][]*types.Header) (int, error) { +func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, txListHashes []common.Hash, uncleLists [][]*types.Header, uncleListHashes []common.Hash) (int, error) { q.lock.Lock() defer q.lock.Unlock() - reconstruct := func(header *types.Header, index int, result *fetchResult) error { - if types.DeriveSha(types.Transactions(txLists[index])) != header.TxHash || types.CalcUncleHash(uncleLists[index]) != header.UncleHash { + validate := func(index int, header *types.Header) error { + if txListHashes[index] != header.TxHash { return errInvalidBody } + if uncleListHashes[index] != header.UncleHash { + return errInvalidBody + } + return nil + } + + reconstruct := func(index int, result *fetchResult) { result.Transactions = txLists[index] result.Uncles = uncleLists[index] - return nil + result.SetBodyDone() } - return q.deliver(id, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, q.blockDonePool, bodyReqTimer, len(txLists), reconstruct) + return q.deliver(id, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, + bodyReqTimer, bodyInMeter, bodyDropMeter, len(txLists), validate, reconstruct) } // DeliverReceipts injects a receipt retrieval response into the results queue. // The method returns the number of transaction receipts accepted from the delivery // and also wakes any threads waiting for data delivery. -func (q *queue) DeliverReceipts(id string, receiptList [][]*types.Receipt) (int, error) { +func (q *queue) DeliverReceipts(id string, receiptList [][]*types.Receipt, receiptListHashes []common.Hash) (int, error) { q.lock.Lock() defer q.lock.Unlock() - reconstruct := func(header *types.Header, index int, result *fetchResult) error { - if types.DeriveSha(types.Receipts(receiptList[index])) != header.ReceiptHash { + validate := func(index int, header *types.Header) error { + if receiptListHashes[index] != header.ReceiptHash { return errInvalidReceipt } - result.Receipts = receiptList[index] return nil } - return q.deliver(id, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, q.receiptDonePool, receiptReqTimer, len(receiptList), reconstruct) + reconstruct := func(index int, result *fetchResult) { + result.Receipts = receiptList[index] + result.SetReceiptsDone() + } + return q.deliver(id, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, + receiptReqTimer, receiptInMeter, receiptDropMeter, len(receiptList), validate, reconstruct) } // deliver injects a data retrieval response into the results queue. // // Note, this method expects the queue lock to be already held for writing. The -// reason the lock is not obtained in here is because the parameters already need +// reason this lock is not obtained in here is because the parameters already need // to access the queue, so they already need a lock anyway. -func (q *queue) deliver(id string, taskPool map[common.Hash]*types.Header, taskQueue *prque.Prque, - pendPool map[string]*fetchRequest, donePool map[common.Hash]struct{}, reqTimer metrics.Timer, - results int, reconstruct func(header *types.Header, index int, result *fetchResult) error) (int, error) { - +func (q *queue) deliver(id string, taskPool map[common.Hash]*types.Header, + taskQueue *prque.Prque, pendPool map[string]*fetchRequest, + reqTimer metrics.Timer, resInMeter metrics.Meter, resDropMeter metrics.Meter, + results int, validate func(index int, header *types.Header) error, + reconstruct func(index int, result *fetchResult)) (int, error) { // Short circuit if the data was never requested request := pendPool[id] if request == nil { + resDropMeter.Mark(int64(results)) return 0, errNoFetchesPending } - reqTimer.UpdateSince(request.Time) delete(pendPool, id) + reqTimer.UpdateSince(request.Time) + resInMeter.Mark(int64(results)) + // If no data items were retrieved, mark them as unavailable for the origin peer if results == 0 { for _, header := range request.Headers { @@ -822,53 +838,55 @@ func (q *queue) deliver(id string, taskPool map[common.Hash]*types.Header, taskQ var ( accepted int failure error - useful bool + i int + hashes []common.Hash ) - for i, header := range request.Headers { + for _, header := range request.Headers { // Short circuit assembly if no more fetch results are found if i >= results { break } - // Reconstruct the next result if contents match up - index := int(header.Number.Int64() - int64(q.resultOffset)) - if index >= len(q.resultCache) || index < 0 || q.resultCache[index] == nil { - failure = errInvalidChain - break - } - if err := reconstruct(header, i, q.resultCache[index]); err != nil { + // Validate the fields + if err := validate(i, header); err != nil { failure = err break } - hash := header.Hash() - - donePool[hash] = struct{}{} - q.resultCache[index].Pending-- - useful = true - accepted++ + hashes = append(hashes, header.Hash()) + i++ + } + for _, header := range request.Headers[:i] { + if res, stale, err := q.resultCache.GetDeliverySlot(header.Number.Uint64()); err == nil { + reconstruct(accepted, res) + } else { + // else: between here and above, some other peer filled this result, + // or it was indeed a no-op. This should not happen, but if it does it's + // not something to panic about + log.Error("Delivery stale", "stale", stale, "number", header.Number.Uint64(), "err", err) + failure = errStaleDelivery + } // Clean up a successful fetch - request.Headers[i] = nil - delete(taskPool, hash) + delete(taskPool, hashes[accepted]) + accepted++ } + resDropMeter.Mark(int64(results - accepted)) + // Return all failed or missing fetches to the queue - for _, header := range request.Headers { - if header != nil { - taskQueue.Push(header, -int64(header.Number.Uint64())) - } + for _, header := range request.Headers[accepted:] { + taskQueue.Push(header, -int64(header.Number.Uint64())) } // Wake up Results if accepted > 0 { q.active.Signal() } + if failure == nil { + return accepted, nil + } // If none of the data was good, it's a stale delivery - switch { - case failure == nil || failure == errInvalidChain: - return accepted, failure - case useful: + if accepted > 0 { return accepted, fmt.Errorf("partial failure: %v", failure) - default: - return accepted, errStaleDelivery } + return accepted, fmt.Errorf("%w: %v", failure, errStaleDelivery) } // Prepare configures the result cache to allow accepting and caching inbound @@ -878,8 +896,6 @@ func (q *queue) Prepare(offset uint64, mode SyncMode) { defer q.lock.Unlock() // Prepare the queue for sync results - if q.resultOffset < offset { - q.resultOffset = offset - } + q.resultCache.Prepare(offset) q.mode = mode } diff --git a/eth/downloader/queue_test.go b/eth/downloader/queue_test.go new file mode 100644 index 00000000..8631b27c --- /dev/null +++ b/eth/downloader/queue_test.go @@ -0,0 +1,472 @@ +// 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 downloader + +import ( + "fmt" + "math/big" + "math/rand" + "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/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" +) + +// makeChain creates a chain of n blocks starting at and including parent. +// the returned hash chain is ordered head->parent. In addition, every 3rd block +// contains a transaction and every 5th an uncle to allow testing correct block +// reassembly. +func makeChain(n int, seed byte, parent *types.Block, empty bool) ([]*types.Block, []types.Receipts) { + blocks, receipts := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testDB, n, func(i int, block *core.BlockGen) { + block.SetCoinbase(common.Address{seed}) + // Add one tx to every secondblock + if !empty && i%2 == 0 { + signer := types.MakeSigner(params.TestChainConfig, block.Number()) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) + if err != nil { + panic(err) + } + block.AddTx(tx) + } + }) + return blocks, receipts +} + +type chainData struct { + blocks []*types.Block + offset int +} + +var chain *chainData +var emptyChain *chainData + +func init() { + // Create a chain of blocks to import + targetBlocks := 128 + blocks, _ := makeChain(targetBlocks, 0, testGenesis, false) + chain = &chainData{blocks, 0} + + blocks, _ = makeChain(targetBlocks, 0, testGenesis, true) + emptyChain = &chainData{blocks, 0} +} + +func (chain *chainData) headers() []*types.Header { + hdrs := make([]*types.Header, len(chain.blocks)) + for i, b := range chain.blocks { + hdrs[i] = b.Header() + } + return hdrs +} + +func (chain *chainData) Len() int { + return len(chain.blocks) +} + +func dummyPeer(id string) *peerConnection { + p := &peerConnection{ + id: id, + lacking: make(map[common.Hash]struct{}), + } + return p +} + +func TestBasics(t *testing.T) { + numOfBlocks := len(emptyChain.blocks) + numOfReceipts := len(emptyChain.blocks) / 2 + + q := newQueue(10, 10) + if !q.Idle() { + t.Errorf("new queue should be idle") + } + q.Prepare(1, SnapSync) + if res := q.Results(false); len(res) != 0 { + t.Fatal("new queue should have 0 results") + } + + // Schedule a batch of headers + headers := chain.headers() + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() + } + q.Schedule(headers, hashes, 1) + if q.Idle() { + t.Errorf("queue should not be idle") + } + if got, exp := q.PendingBodies(), chain.Len(); got != exp { + t.Errorf("wrong pending block count, got %d, exp %d", got, exp) + } + // Only non-empty receipts get added to task-queue + if got, exp := q.PendingReceipts(), 64; got != exp { + t.Errorf("wrong pending receipt count, got %d, exp %d", got, exp) + } + // Items are now queued for downloading, next step is that we tell the + // queue that a certain peer will deliver them for us + { + peer := dummyPeer("peer-1") + fetchReq, _, throttle := q.ReserveBodies(peer, 50) + if !throttle { + // queue size is only 10, so throttling should occur + t.Fatal("should throttle") + } + // But we should still get the first things to fetch + if got, exp := len(fetchReq.Headers), 5; got != exp { + t.Fatalf("expected %d requests, got %d", exp, got) + } + if got, exp := fetchReq.Headers[0].Number.Uint64(), uint64(1); got != exp { + t.Fatalf("expected header %d, got %d", exp, got) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + { + peer := dummyPeer("peer-2") + fetchReq, _, throttle := q.ReserveBodies(peer, 50) + + // The second peer should hit throttling + if !throttle { + t.Fatalf("should throttle") + } + // And not get any fetches at all, since it was throttled to begin with + if fetchReq != nil { + t.Fatalf("should have no fetches, got %d", len(fetchReq.Headers)) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + { + // The receipt delivering peer should not be affected + // by the throttling of body deliveries + peer := dummyPeer("peer-3") + fetchReq, _, throttle := q.ReserveReceipts(peer, 50) + if !throttle { + // queue size is only 10, so throttling should occur + t.Fatal("should throttle") + } + // But we should still get the first things to fetch + if got, exp := len(fetchReq.Headers), 5; got != exp { + t.Fatalf("expected %d requests, got %d", exp, got) + } + if got, exp := fetchReq.Headers[0].Number.Uint64(), uint64(1); got != exp { + t.Fatalf("expected header %d, got %d", exp, got) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts-5; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + if got, exp := q.resultCache.countCompleted(), 0; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } +} + +func TestEmptyBlocks(t *testing.T) { + numOfBlocks := len(emptyChain.blocks) + + q := newQueue(10, 10) + + q.Prepare(1, SnapSync) + + // Schedule a batch of headers + headers := emptyChain.headers() + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() + } + q.Schedule(headers, hashes, 1) + if q.Idle() { + t.Errorf("queue should not be idle") + } + if got, exp := q.PendingBodies(), len(emptyChain.blocks); got != exp { + t.Errorf("wrong pending block count, got %d, exp %d", got, exp) + } + if got, exp := q.PendingReceipts(), 0; got != exp { + t.Errorf("wrong pending receipt count, got %d, exp %d", got, exp) + } + // They won't be processable, because the fetchresults haven't been + // created yet + if got, exp := q.resultCache.countCompleted(), 0; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } + + // Items are now queued for downloading, next step is that we tell the + // queue that a certain peer will deliver them for us + // That should trigger all of them to suddenly become 'done' + { + // Reserve blocks + peer := dummyPeer("peer-1") + fetchReq, _, _ := q.ReserveBodies(peer, 50) + + // there should be nothing to fetch, blocks are empty + if fetchReq != nil { + t.Fatal("there should be no body fetch tasks remaining") + } + } + if q.blockTaskQueue.Size() != numOfBlocks-10 { + t.Errorf("expected block task queue to be %d, got %d", numOfBlocks-10, q.blockTaskQueue.Size()) + } + if q.receiptTaskQueue.Size() != 0 { + t.Errorf("expected receipt task queue to be %d, got %d", 0, q.receiptTaskQueue.Size()) + } + { + peer := dummyPeer("peer-3") + fetchReq, _, _ := q.ReserveReceipts(peer, 50) + + // there should be nothing to fetch, blocks are empty + if fetchReq != nil { + t.Fatal("there should be no receipt fetch tasks remaining") + } + } + if q.blockTaskQueue.Size() != numOfBlocks-10 { + t.Errorf("expected block task queue to be %d, got %d", numOfBlocks-10, q.blockTaskQueue.Size()) + } + if q.receiptTaskQueue.Size() != 0 { + t.Errorf("expected receipt task queue to be %d, got %d", 0, q.receiptTaskQueue.Size()) + } + if got, exp := q.resultCache.countCompleted(), 10; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } +} + +// XTestDelivery does some more extensive testing of events that happen, +// blocks that become known and peers that make reservations and deliveries. +// disabled since it's not really a unit-test, but can be executed to test +// some more advanced scenarios +func XTestDelivery(t *testing.T) { + // the outside network, holding blocks + blo, rec := makeChain(128, 0, testGenesis, false) + world := newNetwork() + world.receipts = rec + world.chain = blo + world.progress(10) + if false { + log.Root().SetHandler(log.StdoutHandler) + } + q := newQueue(10, 10) + var wg sync.WaitGroup + q.Prepare(1, SnapSync) + wg.Add(1) + go func() { + // deliver headers + defer wg.Done() + c := 1 + for { + //fmt.Printf("getting headers from %d\n", c) + headers := world.headers(c) + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() + } + l := len(headers) + //fmt.Printf("scheduling %d headers, first %d last %d\n", + // l, headers[0].Number.Uint64(), headers[len(headers)-1].Number.Uint64()) + q.Schedule(headers, hashes, uint64(c)) + c += l + } + }() + wg.Add(1) + go func() { + // collect results + defer wg.Done() + tot := 0 + for { + res := q.Results(true) + tot += len(res) + fmt.Printf("got %d results, %d tot\n", len(res), tot) + // Now we can forget about these + world.forget(res[len(res)-1].Header.Number.Uint64()) + } + }() + wg.Add(1) + go func() { + defer wg.Done() + // reserve body fetch + i := 4 + for { + peer := dummyPeer(fmt.Sprintf("peer-%d", i)) + f, _, _ := q.ReserveBodies(peer, rand.Intn(30)) + if f != nil { + var ( + emptyList []*types.Header + txset [][]*types.Transaction + uncleset [][]*types.Header + ) + numToSkip := rand.Intn(len(f.Headers)) + for _, hdr := range f.Headers[0 : len(f.Headers)-numToSkip] { + txset = append(txset, world.getTransactions(hdr.Number.Uint64())) + uncleset = append(uncleset, emptyList) + } + var ( + txsHashes = make([]common.Hash, len(txset)) + uncleHashes = make([]common.Hash, len(uncleset)) + ) + hasher := trie.NewStackTrie(nil) + for i, txs := range txset { + txsHashes[i] = types.DeriveSha(types.Transactions(txs), hasher) + } + for i, uncles := range uncleset { + uncleHashes[i] = types.CalcUncleHash(uncles) + } + time.Sleep(100 * time.Millisecond) + _, err := q.DeliverBodies(peer.id, txset, txsHashes, uncleset, uncleHashes) + if err != nil { + fmt.Printf("delivered %d bodies %v\n", len(txset), err) + } + } else { + i++ + time.Sleep(200 * time.Millisecond) + } + } + }() + go func() { + defer wg.Done() + // reserve receiptfetch + peer := dummyPeer("peer-3") + for { + f, _, _ := q.ReserveReceipts(peer, rand.Intn(50)) + if f != nil { + var rcs [][]*types.Receipt + for _, hdr := range f.Headers { + rcs = append(rcs, world.getReceipts(hdr.Number.Uint64())) + } + hasher := trie.NewStackTrie(nil) + hashes := make([]common.Hash, len(rcs)) + for i, receipt := range rcs { + hashes[i] = types.DeriveSha(types.Receipts(receipt), hasher) + } + _, err := q.DeliverReceipts(peer.id, rcs, hashes) + if err != nil { + fmt.Printf("delivered %d receipts %v\n", len(rcs), err) + } + time.Sleep(100 * time.Millisecond) + } else { + time.Sleep(200 * time.Millisecond) + } + } + }() + wg.Add(1) + go func() { + defer wg.Done() + for i := 0; i < 50; i++ { + time.Sleep(300 * time.Millisecond) + //world.tick() + //fmt.Printf("trying to progress\n") + world.progress(rand.Intn(100)) + } + for i := 0; i < 50; i++ { + time.Sleep(2990 * time.Millisecond) + } + }() + wg.Add(1) + go func() { + defer wg.Done() + for { + time.Sleep(990 * time.Millisecond) + fmt.Printf("world block tip is %d\n", + world.chain[len(world.chain)-1].Header().Number.Uint64()) + fmt.Println(q.Stats()) + } + }() + wg.Wait() +} + +func newNetwork() *network { + var l sync.RWMutex + return &network{ + cond: sync.NewCond(&l), + offset: 1, // block 1 is at blocks[0] + } +} + +// represents the network +type network struct { + offset int + chain []*types.Block + receipts []types.Receipts + lock sync.RWMutex + cond *sync.Cond +} + +func (n *network) getTransactions(blocknum uint64) types.Transactions { + index := blocknum - uint64(n.offset) + return n.chain[index].Transactions() +} +func (n *network) getReceipts(blocknum uint64) types.Receipts { + index := blocknum - uint64(n.offset) + if got := n.chain[index].Header().Number.Uint64(); got != blocknum { + fmt.Printf("Err, got %d exp %d\n", got, blocknum) + panic("sd") + } + return n.receipts[index] +} + +func (n *network) forget(blocknum uint64) { + index := blocknum - uint64(n.offset) + n.chain = n.chain[index:] + n.receipts = n.receipts[index:] + n.offset = int(blocknum) +} +func (n *network) progress(numBlocks int) { + n.lock.Lock() + defer n.lock.Unlock() + //fmt.Printf("progressing...\n") + newBlocks, newR := makeChain(numBlocks, 0, n.chain[len(n.chain)-1], false) + n.chain = append(n.chain, newBlocks...) + n.receipts = append(n.receipts, newR...) + n.cond.Broadcast() +} + +func (n *network) headers(from int) []*types.Header { + numHeaders := 128 + var hdrs []*types.Header + index := from - n.offset + + for index >= len(n.chain) { + // wait for progress + n.cond.L.Lock() + //fmt.Printf("header going into wait\n") + n.cond.Wait() + index = from - n.offset + n.cond.L.Unlock() + } + n.lock.RLock() + defer n.lock.RUnlock() + for i, b := range n.chain[index:] { + hdrs = append(hdrs, b.Header()) + if i >= numHeaders { + break + } + } + return hdrs +} diff --git a/eth/downloader/resultstore.go b/eth/downloader/resultstore.go new file mode 100644 index 00000000..3162cd6d --- /dev/null +++ b/eth/downloader/resultstore.go @@ -0,0 +1,194 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "fmt" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/core/types" +) + +// resultStore implements a structure for maintaining fetchResults, tracking their +// download-progress and delivering (finished) results. +type resultStore struct { + items []*fetchResult // Downloaded but not yet delivered fetch results + resultOffset uint64 // Offset of the first cached fetch result in the block chain + + // Internal index of first non-completed entry, updated atomically when needed. + // If all items are complete, this will equal length(items), so + // *important* : is not safe to use for indexing without checking against length + indexIncomplete int32 // atomic access + + // throttleThreshold is the limit up to which we _want_ to fill the + // results. If blocks are large, we want to limit the results to less + // than the number of available slots, and maybe only fill 1024 out of + // 8192 possible places. The queue will, at certain times, recalibrate + // this index. + throttleThreshold uint64 + + lock sync.RWMutex +} + +func newResultStore(size int) *resultStore { + return &resultStore{ + resultOffset: 0, + items: make([]*fetchResult, size), + throttleThreshold: uint64(size), + } +} + +// SetThrottleThreshold updates the throttling threshold based on the requested +// limit and the total queue capacity. It returns the (possibly capped) threshold +func (r *resultStore) SetThrottleThreshold(threshold uint64) uint64 { + r.lock.Lock() + defer r.lock.Unlock() + + limit := uint64(len(r.items)) + if threshold >= limit { + threshold = limit + } + r.throttleThreshold = threshold + return r.throttleThreshold +} + +// AddFetch adds a header for body/receipt fetching. This is used when the queue +// wants to reserve headers for fetching. +// +// It returns the following: +// stale - if true, this item is already passed, and should not be requested again +// throttled - if true, the store is at capacity, this particular header is not prio now +// item - the result to store data into +// err - any error that occurred +func (r *resultStore) AddFetch(header *types.Header, fastSync bool) (stale, throttled bool, item *fetchResult, err error) { + r.lock.Lock() + defer r.lock.Unlock() + + var index int + item, index, stale, throttled, err = r.getFetchResult(header.Number.Uint64()) + if err != nil || stale || throttled { + return stale, throttled, item, err + } + if item == nil { + item = newFetchResult(header, fastSync) + r.items[index] = item + } + return stale, throttled, item, err +} + +// GetDeliverySlot returns the fetchResult for the given header. If the 'stale' flag +// is true, that means the header has already been delivered 'upstream'. This method +// does not bubble up the 'throttle' flag, since it's moot at the point in time when +// the item is downloaded and ready for delivery +func (r *resultStore) GetDeliverySlot(headerNumber uint64) (*fetchResult, bool, error) { + r.lock.RLock() + defer r.lock.RUnlock() + + res, _, stale, _, err := r.getFetchResult(headerNumber) + return res, stale, err +} + +// getFetchResult returns the fetchResult corresponding to the given item, and +// the index where the result is stored. +func (r *resultStore) getFetchResult(headerNumber uint64) (item *fetchResult, index int, stale, throttle bool, err error) { + index = int(int64(headerNumber) - int64(r.resultOffset)) + throttle = index >= int(r.throttleThreshold) + stale = index < 0 + + if index >= len(r.items) { + err = fmt.Errorf("%w: index allocation went beyond available resultStore space "+ + "(index [%d] = header [%d] - resultOffset [%d], len(resultStore) = %d", errInvalidChain, + index, headerNumber, r.resultOffset, len(r.items)) + return nil, index, stale, throttle, err + } + if stale { + return nil, index, stale, throttle, nil + } + item = r.items[index] + return item, index, stale, throttle, nil +} + +// hasCompletedItems returns true if there are processable items available +// this method is cheaper than countCompleted +func (r *resultStore) HasCompletedItems() bool { + r.lock.RLock() + defer r.lock.RUnlock() + + if len(r.items) == 0 { + return false + } + if item := r.items[0]; item != nil && item.AllDone() { + return true + } + return false +} + +// countCompleted returns the number of items ready for delivery, stopping at +// the first non-complete item. +// +// The mthod assumes (at least) rlock is held. +func (r *resultStore) countCompleted() int { + // We iterate from the already known complete point, and see + // if any more has completed since last count + index := atomic.LoadInt32(&r.indexIncomplete) + for ; ; index++ { + if index >= int32(len(r.items)) { + break + } + result := r.items[index] + if result == nil || !result.AllDone() { + break + } + } + atomic.StoreInt32(&r.indexIncomplete, index) + return int(index) +} + +// GetCompleted returns the next batch of completed fetchResults +func (r *resultStore) GetCompleted(limit int) []*fetchResult { + r.lock.Lock() + defer r.lock.Unlock() + + completed := r.countCompleted() + if limit > completed { + limit = completed + } + results := make([]*fetchResult, limit) + copy(results, r.items[:limit]) + + // Delete the results from the cache and clear the tail. + copy(r.items, r.items[limit:]) + for i := len(r.items) - limit; i < len(r.items); i++ { + r.items[i] = nil + } + // Advance the expected block number of the first cache entry + r.resultOffset += uint64(limit) + atomic.AddInt32(&r.indexIncomplete, int32(-limit)) + + return results +} + +// Prepare initialises the offset with the given block number +func (r *resultStore) Prepare(offset uint64) { + r.lock.Lock() + defer r.lock.Unlock() + + if r.resultOffset < offset { + r.resultOffset = offset + } +} diff --git a/eth/downloader/skeleton.go b/eth/downloader/skeleton.go new file mode 100644 index 00000000..517b8378 --- /dev/null +++ b/eth/downloader/skeleton.go @@ -0,0 +1,1186 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "encoding/json" + "errors" + "fmt" + "math/rand" + "sort" + "time" + + "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/eth/protocols/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// scratchHeaders is the number of headers to store in a scratch space to allow +// concurrent downloads. A header is about 0.5KB in size, so there is no worry +// about using too much memory. The only catch is that we can only validate gaps +// afer they're linked to the head, so the bigger the scratch space, the larger +// potential for invalid headers. +// +// The current scratch space of 131072 headers is expected to use 64MB RAM. +const scratchHeaders = 131072 + +// requestHeaders is the number of header to request from a remote peer in a single +// network packet. Although the skeleton downloader takes into consideration peer +// capacities when picking idlers, the packet size was decided to remain constant +// since headers are relatively small and it's easier to work with fixed batches +// vs. dynamic interval fillings. +const requestHeaders = 512 + +// errSyncLinked is an internal helper error to signal that the current sync +// cycle linked up to the genesis block, this the skeleton syncer should ping +// the backfiller to resume. Since we already have that logic on sync start, +// piggy-back on that instead of 2 entrypoints. +var errSyncLinked = errors.New("sync linked") + +// errSyncMerged is an internal helper error to signal that the current sync +// cycle merged with a previously aborted subchain, thus the skeleton syncer +// should abort and restart with the new state. +var errSyncMerged = errors.New("sync merged") + +// errSyncReorged is an internal helper error to signal that the head chain of +// the current sync cycle was (partially) reorged, thus the skeleton syncer +// should abort and restart with the new state. +var errSyncReorged = errors.New("sync reorged") + +// errTerminated is returned if the sync mechanism was terminated for this run of +// the process. This is usually the case when Geth is shutting down and some events +// might still be propagating. +var errTerminated = errors.New("terminated") + +// errReorgDenied is returned if an attempt is made to extend the beacon chain +// with a new header, but it does not link up to the existing sync. +var errReorgDenied = errors.New("non-forced head reorg denied") + +func init() { + // Tuning parameters is nice, but the scratch space must be assignable in + // full to peers. It's a useless cornercase to support a dangling half-group. + if scratchHeaders%requestHeaders != 0 { + panic("Please make scratchHeaders divisible by requestHeaders") + } +} + +// subchain is a contiguous header chain segment that is backed by the database, +// but may not be linked to the live chain. The skeleton downloader may produce +// a new one of these every time it is restarted until the subchain grows large +// enough to connect with a previous subchain. +// +// The subchains use the exact same database namespace and are not disjoint from +// each other. As such, extending one to overlap the other entails reducing the +// second one first. This combined buffer model is used to avoid having to move +// data on disk when two subchains are joined together. +type subchain struct { + Head uint64 // Block number of the newest header in the subchain + Tail uint64 // Block number of the oldest header in the subchain + Next common.Hash // Block hash of the next oldest header in the subchain +} + +// skeletonProgress is a database entry to allow suspending and resuming a chain +// sync. As the skeleton header chain is downloaded backwards, restarts can and +// will produce temporarily disjoint subchains. There is no way to restart a +// suspended skeleton sync without prior knowledge of all prior suspension points. +type skeletonProgress struct { + Subchains []*subchain // Disjoint subchains downloaded until now +} + +// headUpdate is a notification that the beacon sync should switch to a new target. +// The update might request whether to forcefully change the target, or only try to +// extend it and fail if it's not possible. +type headUpdate struct { + header *types.Header // Header to update the sync target to + force bool // Whether to force the update or only extend if possible + errc chan error // Channel to signal acceptance of the new head +} + +// headerRequest tracks a pending header request to ensure responses are to +// actual requests and to validate any security constraints. +// +// Concurrency note: header requests and responses are handled concurrently from +// the main runloop to allow Keccak256 hash verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. subchains). +// That is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type headerRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + + deliver chan *headerResponse // Channel to deliver successful response on + revert chan *headerRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + stale chan struct{} // Channel to signal the request was dropped + + head uint64 // Head number of the requested batch of headers +} + +// headerResponse is an already verified remote response to a header request. +type headerResponse struct { + peer *peerConnection // Peer from which this response originates + reqid uint64 // Request ID that this response fulfils + headers []*types.Header // Chain of headers +} + +// backfiller is a callback interface through which the skeleton sync can tell +// the downloader that it should suspend or resume backfilling on specific head +// events (e.g. suspend on forks or gaps, resume on successful linkups). +type backfiller interface { + // suspend requests the backfiller to abort any running full or snap sync + // based on the skeleton chain as it might be invalid. The backfiller should + // gracefully handle multiple consecutive suspends without a resume, even + // on initial startup. + // + // The method should return the last block header that has been successfully + // backfilled, or nil if the backfiller was not resumed. + suspend() *types.Header + + // resume requests the backfiller to start running fill or snap sync based on + // the skeleton chain as it has successfully been linked. Appending new heads + // to the end of the chain will not result in suspend/resume cycles. + // leaking too much sync logic out to the filler. + resume() +} + +// skeleton represents a header chain synchronized after the merge where blocks +// aren't validated any more via PoW in a forward fashion, rather are dictated +// and extended at the head via the beacon chain and backfilled on the original +// Ethereum block sync protocol. +// +// Since the skeleton is grown backwards from head to genesis, it is handled as +// a separate entity, not mixed in with the logical sequential transition of the +// blocks. Once the skeleton is connected to an existing, validated chain, the +// headers will be moved into the main downloader for filling and execution. +// +// Opposed to the original Ethereum block synchronization which is trustless (and +// uses a master peer to minimize the attack surface), post-merge block sync starts +// from a trusted head. As such, there is no need for a master peer any more and +// headers can be requested fully concurrently (though some batches might be +// discarded if they don't link up correctly). +// +// Although a skeleton is part of a sync cycle, it is not recreated, rather stays +// alive throughout the lifetime of the downloader. This allows it to be extended +// concurrently with the sync cycle, since extensions arrive from an API surface, +// not from within (vs. legacy Ethereum sync). +// +// Since the skeleton tracks the entire header chain until it is consumed by the +// forward block filling, it needs 0.5KB/block storage. At current mainnet sizes +// this is only possible with a disk backend. Since the skeleton is separate from +// the node's header chain, storing the headers ephemerally until sync finishes +// is wasted disk IO, but it's a price we're going to pay to keep things simple +// for now. +type skeleton struct { + db ethdb.Database // Database backing the skeleton + filler backfiller // Chain syncer suspended/resumed by head events + + peers *peerSet // Set of peers we can sync from + idles map[string]*peerConnection // Set of idle peers in the current sync cycle + drop peerDropFn // Drops a peer for misbehaving + + progress *skeletonProgress // Sync progress tracker for resumption and metrics + started time.Time // Timestamp when the skeleton syncer was created + logged time.Time // Timestamp when progress was last logged to the user + pulled uint64 // Number of headers downloaded in this run + + scratchSpace []*types.Header // Scratch space to accumulate headers in (first = recent) + scratchOwners []string // Peer IDs owning chunks of the scratch space (pend or delivered) + scratchHead uint64 // Block number of the first item in the scratch space + + requests map[uint64]*headerRequest // Header requests currently running + + headEvents chan *headUpdate // Notification channel for new heads + terminate chan chan error // Termination channel to abort sync + terminated chan struct{} // Channel to signal that the syncer is dead + + // Callback hooks used during testing + syncStarting func() // callback triggered after a sync cycle is inited but before started +} + +// newSkeleton creates a new sync skeleton that tracks a potentially dangling +// header chain until it's linked into an existing set of blocks. +func newSkeleton(db ethdb.Database, peers *peerSet, drop peerDropFn, filler backfiller) *skeleton { + sk := &skeleton{ + db: db, + filler: filler, + peers: peers, + drop: drop, + requests: make(map[uint64]*headerRequest), + headEvents: make(chan *headUpdate), + terminate: make(chan chan error), + terminated: make(chan struct{}), + } + go sk.startup() + return sk +} + +// startup is an initial background loop which waits for an event to start or +// tear the syncer down. This is required to make the skeleton sync loop once +// per process but at the same time not start before the beacon chain announces +// a new (existing) head. +func (s *skeleton) startup() { + // Close a notification channel so anyone sending us events will know if the + // sync loop was torn down for good. + defer close(s.terminated) + + // Wait for startup or teardown. This wait might loop a few times if a beacon + // client requests sync head extensions, but not forced reorgs (i.e. they are + // giving us new payloads without setting a starting head initially). + for { + select { + case errc := <-s.terminate: + // No head was announced but Geth is shutting down + errc <- nil + return + + case event := <-s.headEvents: + // New head announced, start syncing to it, looping every time a current + // cycle is terminated due to a chain event (head reorg, old chain merge). + if !event.force { + event.errc <- errors.New("forced head needed for startup") + continue + } + event.errc <- nil // forced head accepted for startup + head := event.header + s.started = time.Now() + + for { + // If the sync cycle terminated or was terminated, propagate up when + // higher layers request termination. There's no fancy explicit error + // signalling as the sync loop should never terminate (TM). + newhead, err := s.sync(head) + switch { + case err == errSyncLinked: + // Sync cycle linked up to the genesis block. Tear down the loop + // and restart it so, it can properly notify the backfiller. Don't + // account a new head. + head = nil + + case err == errSyncMerged: + // Subchains were merged, we just need to reinit the internal + // start to continue on the tail of the merged chain. Don't + // announce a new head, + head = nil + + case err == errSyncReorged: + // The subchain being synced got modified at the head in a + // way that requires resyncing it. Restart sync with the new + // head to force a cleanup. + head = newhead + + case err == errTerminated: + // Sync was requested to be terminated from within, stop and + // return (no need to pass a message, was already done internally) + return + + default: + // Sync either successfully terminated or failed with an unhandled + // error. Abort and wait until Geth requests a termination. + errc := <-s.terminate + errc <- err + return + } + } + } + } +} + +// Terminate tears down the syncer indefinitely. +func (s *skeleton) Terminate() error { + // Request termination and fetch any errors + errc := make(chan error) + s.terminate <- errc + err := <-errc + + // Wait for full shutdown (not necessary, but cleaner) + <-s.terminated + return err +} + +// Sync starts or resumes a previous sync cycle to download and maintain a reverse +// header chain starting at the head and leading towards genesis to an available +// ancestor. +// +// This method does not block, rather it just waits until the syncer receives the +// fed header. What the syncer does with it is the syncer's problem. +func (s *skeleton) Sync(head *types.Header, force bool) error { + log.Trace("New skeleton head announced", "number", head.Number, "hash", head.Hash(), "force", force) + errc := make(chan error) + + select { + case s.headEvents <- &headUpdate{header: head, force: force, errc: errc}: + return <-errc + case <-s.terminated: + return errTerminated + } +} + +// sync is the internal version of Sync that executes a single sync cycle, either +// until some termination condition is reached, or until the current cycle merges +// with a previously aborted run. +func (s *skeleton) sync(head *types.Header) (*types.Header, error) { + // If we're continuing a previous merge interrupt, just access the existing + // old state without initing from disk. + if head == nil { + head = rawdb.ReadSkeletonHeader(s.db, s.progress.Subchains[0].Head) + } else { + // Otherwise, initialize the sync, trimming and previous leftovers until + // we're consistent with the newly requested chain head + s.initSync(head) + } + // Create the scratch space to fill with concurrently downloaded headers + s.scratchSpace = make([]*types.Header, scratchHeaders) + defer func() { s.scratchSpace = nil }() // don't hold on to references after sync + + s.scratchOwners = make([]string, scratchHeaders/requestHeaders) + defer func() { s.scratchOwners = nil }() // don't hold on to references after sync + + s.scratchHead = s.progress.Subchains[0].Tail - 1 // tail must not be 0! + + // If the sync is already done, resume the backfiller. When the loop stops, + // terminate the backfiller too. + linked := len(s.progress.Subchains) == 1 && + rawdb.HasHeader(s.db, s.progress.Subchains[0].Next, s.scratchHead) && + rawdb.HasBody(s.db, s.progress.Subchains[0].Next, s.scratchHead) && + rawdb.HasReceipts(s.db, s.progress.Subchains[0].Next, s.scratchHead) + if linked { + s.filler.resume() + } + defer func() { + if filled := s.filler.suspend(); filled != nil { + // If something was filled, try to delete stale sync helpers. If + // unsuccessful, warn the user, but not much else we can do (it's + // a programming error, just let users report an issue and don't + // choke in the meantime). + if err := s.cleanStales(filled); err != nil { + log.Error("Failed to clean stale beacon headers", "err", err) + } + } + }() + // Create a set of unique channels for this sync cycle. We need these to be + // ephemeral so a data race doesn't accidentally deliver something stale on + // a persistent channel across syncs (yup, this happened) + var ( + requestFails = make(chan *headerRequest) + responses = make(chan *headerResponse) + ) + cancel := make(chan struct{}) + defer close(cancel) + + log.Debug("Starting reverse header sync cycle", "head", head.Number, "hash", head.Hash(), "cont", s.scratchHead) + + // Whether sync completed or not, disregard any future packets + defer func() { + log.Debug("Terminating reverse header sync cycle", "head", head.Number, "hash", head.Hash(), "cont", s.scratchHead) + s.requests = make(map[uint64]*headerRequest) + }() + + // Start tracking idle peers for task assignments + peering := make(chan *peeringEvent, 64) // arbitrary buffer, just some burst protection + + peeringSub := s.peers.SubscribeEvents(peering) + defer peeringSub.Unsubscribe() + + s.idles = make(map[string]*peerConnection) + for _, peer := range s.peers.AllPeers() { + s.idles[peer.id] = peer + } + // Nofity any tester listening for startup events + if s.syncStarting != nil { + s.syncStarting() + } + for { + // Something happened, try to assign new tasks to any idle peers + if !linked { + s.assignTasks(responses, requestFails, cancel) + } + // Wait for something to happen + select { + case event := <-peering: + // A peer joined or left, the tasks queue and allocations need to be + // checked for potential assignment or reassignment + peerid := event.peer.id + if event.join { + log.Debug("Joining skeleton peer", "id", peerid) + s.idles[peerid] = event.peer + } else { + log.Debug("Leaving skeleton peer", "id", peerid) + s.revertRequests(peerid) + delete(s.idles, peerid) + } + + case errc := <-s.terminate: + errc <- nil + return nil, errTerminated + + case event := <-s.headEvents: + // New head was announced, try to integrate it. If successful, nothing + // needs to be done as the head simply extended the last range. For now + // we don't seamlessly integrate reorgs to keep things simple. If the + // network starts doing many mini reorgs, it might be worthwhile handling + // a limited depth without an error. + if reorged := s.processNewHead(event.header, event.force); reorged { + // If a reorg is needed, and we're forcing the new head, signal + // the syncer to tear down and start over. Otherwise, drop the + // non-force reorg. + if event.force { + event.errc <- nil // forced head reorg accepted + return event.header, errSyncReorged + } + event.errc <- errReorgDenied + continue + } + event.errc <- nil // head extension accepted + + // New head was integrated into the skeleton chain. If the backfiller + // is still running, it will pick it up. If it already terminated, + // a new cycle needs to be spun up. + if linked { + s.filler.resume() + } + + case req := <-requestFails: + s.revertRequest(req) + + case res := <-responses: + // Process the batch of headers. If though processing we managed to + // link the current subchain to a previously downloaded one, abort the + // sync and restart with the merged subchains. + // + // If we managed to link to the existing local chain or genesis block, + // abort sync altogether. + linked, merged := s.processResponse(res) + if linked { + log.Debug("Beacon sync linked to local chain") + return nil, errSyncLinked + } + if merged { + log.Debug("Beacon sync merged subchains") + return nil, errSyncMerged + } + // We still have work to do, loop and repeat + } + } +} + +// initSync attempts to get the skeleton sync into a consistent state wrt any +// past state on disk and the newly requested head to sync to. If the new head +// is nil, the method will return and continue from the previous head. +func (s *skeleton) initSync(head *types.Header) { + // Extract the head number, we'll need it all over + number := head.Number.Uint64() + + // Retrieve the previously saved sync progress + if status := rawdb.ReadSkeletonSyncStatus(s.db); len(status) > 0 { + s.progress = new(skeletonProgress) + if err := json.Unmarshal(status, s.progress); err != nil { + log.Error("Failed to decode skeleton sync status", "err", err) + } else { + // Previous sync was available, print some continuation logs + for _, subchain := range s.progress.Subchains { + log.Debug("Restarting skeleton subchain", "head", subchain.Head, "tail", subchain.Tail) + } + // Create a new subchain for the head (unless the last can be extended), + // trimming anything it would overwrite + headchain := &subchain{ + Head: number, + Tail: number, + Next: head.ParentHash, + } + for len(s.progress.Subchains) > 0 { + // If the last chain is above the new head, delete altogether + lastchain := s.progress.Subchains[0] + if lastchain.Tail >= headchain.Tail { + log.Debug("Dropping skeleton subchain", "head", lastchain.Head, "tail", lastchain.Tail) + s.progress.Subchains = s.progress.Subchains[1:] + continue + } + // Otherwise truncate the last chain if needed and abort trimming + if lastchain.Head >= headchain.Tail { + log.Debug("Trimming skeleton subchain", "oldhead", lastchain.Head, "newhead", headchain.Tail-1, "tail", lastchain.Tail) + lastchain.Head = headchain.Tail - 1 + } + break + } + // If the last subchain can be extended, we're lucky. Otherwise create + // a new subchain sync task. + var extended bool + if n := len(s.progress.Subchains); n > 0 { + lastchain := s.progress.Subchains[0] + if lastchain.Head == headchain.Tail-1 { + lasthead := rawdb.ReadSkeletonHeader(s.db, lastchain.Head) + if lasthead.Hash() == head.ParentHash { + log.Debug("Extended skeleton subchain with new head", "head", headchain.Tail, "tail", lastchain.Tail) + lastchain.Head = headchain.Tail + extended = true + } + } + } + if !extended { + log.Debug("Created new skeleton subchain", "head", number, "tail", number) + s.progress.Subchains = append([]*subchain{headchain}, s.progress.Subchains...) + } + // Update the database with the new sync stats and insert the new + // head header. We won't delete any trimmed skeleton headers since + // those will be outside the index space of the many subchains and + // the database space will be reclaimed eventually when processing + // blocks above the current head (TODO(karalabe): don't forget). + batch := s.db.NewBatch() + + rawdb.WriteSkeletonHeader(batch, head) + s.saveSyncStatus(batch) + + if err := batch.Write(); err != nil { + log.Crit("Failed to write skeleton sync status", "err", err) + } + return + } + } + // Either we've failed to decode the previous state, or there was none. Start + // a fresh sync with a single subchain represented by the currently sent + // chain head. + s.progress = &skeletonProgress{ + Subchains: []*subchain{ + { + Head: number, + Tail: number, + Next: head.ParentHash, + }, + }, + } + batch := s.db.NewBatch() + + rawdb.WriteSkeletonHeader(batch, head) + s.saveSyncStatus(batch) + + if err := batch.Write(); err != nil { + log.Crit("Failed to write initial skeleton sync status", "err", err) + } + log.Debug("Created initial skeleton subchain", "head", number, "tail", number) +} + +// saveSyncStatus marshals the remaining sync tasks into leveldb. +func (s *skeleton) saveSyncStatus(db ethdb.KeyValueWriter) { + status, err := json.Marshal(s.progress) + if err != nil { + panic(err) // This can only fail during implementation + } + rawdb.WriteSkeletonSyncStatus(db, status) +} + +// processNewHead does the internal shuffling for a new head marker and either +// accepts and integrates it into the skeleton or requests a reorg. Upon reorg, +// the syncer will tear itself down and restart with a fresh head. It is simpler +// to reconstruct the sync state than to mutate it and hope for the best. +func (s *skeleton) processNewHead(head *types.Header, force bool) bool { + // If the header cannot be inserted without interruption, return an error for + // the outer loop to tear down the skeleton sync and restart it + number := head.Number.Uint64() + + lastchain := s.progress.Subchains[0] + if lastchain.Tail >= number { + // If the chain is down to a single beacon header, and it is re-announced + // once more, ignore it instead of tearing down sync for a noop. + if lastchain.Head == lastchain.Tail { + if current := rawdb.ReadSkeletonHeader(s.db, number); current.Hash() == head.Hash() { + return false + } + } + // Not a noop / double head announce, abort with a reorg + if force { + log.Warn("Beacon chain reorged", "tail", lastchain.Tail, "head", lastchain.Head, "newHead", number) + } + return true + } + if lastchain.Head+1 < number { + if force { + log.Warn("Beacon chain gapped", "head", lastchain.Head, "newHead", number) + } + return true + } + if parent := rawdb.ReadSkeletonHeader(s.db, number-1); parent.Hash() != head.ParentHash { + if force { + log.Warn("Beacon chain forked", "ancestor", parent.Number, "hash", parent.Hash(), "want", head.ParentHash) + } + return true + } + // New header seems to be in the last subchain range. Unwind any extra headers + // from the chain tip and insert the new head. We won't delete any trimmed + // skeleton headers since those will be outside the index space of the many + // subchains and the database space will be reclaimed eventually when processing + // blocks above the current head (TODO(karalabe): don't forget). + batch := s.db.NewBatch() + + rawdb.WriteSkeletonHeader(batch, head) + lastchain.Head = number + s.saveSyncStatus(batch) + + if err := batch.Write(); err != nil { + log.Crit("Failed to write skeleton sync status", "err", err) + } + return false +} + +// assignTasks attempts to match idle peers to pending header retrievals. +func (s *skeleton) assignTasks(success chan *headerResponse, fail chan *headerRequest, cancel chan struct{}) { + // Sort the peers by download capacity to use faster ones if many available + idlers := &peerCapacitySort{ + peers: make([]*peerConnection, 0, len(s.idles)), + caps: make([]int, 0, len(s.idles)), + } + targetTTL := s.peers.rates.TargetTimeout() + for _, peer := range s.idles { + idlers.peers = append(idlers.peers, peer) + idlers.caps = append(idlers.caps, s.peers.rates.Capacity(peer.id, eth.BlockHeadersMsg, targetTTL)) + } + if len(idlers.peers) == 0 { + return + } + sort.Sort(idlers) + + // Find header regions not yet downloading and fill them + for task, owner := range s.scratchOwners { + // If we're out of idle peers, stop assigning tasks + if len(idlers.peers) == 0 { + return + } + // Skip any tasks already filling + if owner != "" { + continue + } + // If we've reached the genesis, stop assigning tasks + if uint64(task*requestHeaders) >= s.scratchHead { + return + } + // Found a task and have peers available, assign it + idle := idlers.peers[0] + + idlers.peers = idlers.peers[1:] + idlers.caps = idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.requests[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer + req := &headerRequest{ + peer: idle.id, + id: reqid, + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + head: s.scratchHead - uint64(task*requestHeaders), + } + s.requests[reqid] = req + delete(s.idles, idle.id) + + // Generate the network query and send it to the peer + go s.executeTask(idle, req) + + // Inject the request into the task to block further assignments + s.scratchOwners[task] = idle.id + } +} + +// executeTask executes a single fetch request, blocking until either a result +// arrives or a timeouts / cancellation is triggered. The method should be run +// on its own goroutine and will deliver on the requested channels. +func (s *skeleton) executeTask(peer *peerConnection, req *headerRequest) { + start := time.Now() + resCh := make(chan *eth.Response) + + // Figure out how many headers to fetch. Usually this will be a full batch, + // but for the very tail of the chain, trim the request to the number left. + // Since nodes may or may not return the genesis header for a batch request, + // don't even request it. The parent hash of block #1 is enough to link. + requestCount := requestHeaders + if req.head < requestHeaders { + requestCount = int(req.head) + } + peer.log.Trace("Fetching skeleton headers", "from", req.head, "count", requestCount) + netreq, err := peer.peer.RequestHeadersByNumber(req.head, requestCount, 0, true, resCh) + if err != nil { + peer.log.Trace("Failed to request headers", "err", err) + s.scheduleRevertRequest(req) + return + } + defer netreq.Close() + + // Wait until the response arrives, the request is cancelled or times out + ttl := s.peers.rates.TargetTimeout() + + timeoutTimer := time.NewTimer(ttl) + defer timeoutTimer.Stop() + + select { + case <-req.cancel: + peer.log.Debug("Header request cancelled") + s.scheduleRevertRequest(req) + + case <-timeoutTimer.C: + // Header retrieval timed out, update the metrics + peer.log.Warn("Header request timed out, dropping peer", "elapsed", ttl) + headerTimeoutMeter.Mark(1) + s.peers.rates.Update(peer.id, eth.BlockHeadersMsg, 0, 0) + s.scheduleRevertRequest(req) + + // At this point we either need to drop the offending peer, or we need a + // mechanism to allow waiting for the response and not cancel it. For now + // lets go with dropping since the header sizes are deterministic and the + // beacon sync runs exclusive (downloader is idle) so there should be no + // other load to make timeouts probable. If we notice that timeouts happen + // more often than we'd like, we can introduce a tracker for the requests + // gone stale and monitor them. However, in that case too, we need a way + // to protect against malicious peers never responding, so it would need + // a second, hard-timeout mechanism. + s.drop(peer.id) + + case res := <-resCh: + // Headers successfully retrieved, update the metrics + headers := *res.Res.(*eth.BlockHeadersPacket) + + headerReqTimer.Update(time.Since(start)) + s.peers.rates.Update(peer.id, eth.BlockHeadersMsg, res.Time, len(headers)) + + // Cross validate the headers with the requests + switch { + case len(headers) == 0: + // No headers were delivered, reject the response and reschedule + peer.log.Debug("No headers delivered") + res.Done <- errors.New("no headers delivered") + s.scheduleRevertRequest(req) + + case headers[0].Number.Uint64() != req.head: + // Header batch anchored at non-requested number + peer.log.Debug("Invalid header response head", "have", headers[0].Number, "want", req.head) + res.Done <- errors.New("invalid header batch anchor") + s.scheduleRevertRequest(req) + + case req.head >= requestHeaders && len(headers) != requestHeaders: + // Invalid number of non-genesis headers delivered, reject the response and reschedule + peer.log.Debug("Invalid non-genesis header count", "have", len(headers), "want", requestHeaders) + res.Done <- errors.New("not enough non-genesis headers delivered") + s.scheduleRevertRequest(req) + + case req.head < requestHeaders && uint64(len(headers)) != req.head: + // Invalid number of genesis headers delivered, reject the response and reschedule + peer.log.Debug("Invalid genesis header count", "have", len(headers), "want", headers[0].Number.Uint64()) + res.Done <- errors.New("not enough genesis headers delivered") + s.scheduleRevertRequest(req) + + default: + // Packet seems structurally valid, check hash progression and if it + // is correct too, deliver for storage + for i := 0; i < len(headers)-1; i++ { + if headers[i].ParentHash != headers[i+1].Hash() { + peer.log.Debug("Invalid hash progression", "index", i, "wantparenthash", headers[i].ParentHash, "haveparenthash", headers[i+1].Hash()) + res.Done <- errors.New("invalid hash progression") + s.scheduleRevertRequest(req) + return + } + } + // Hash chain is valid. The delivery might still be junk as we're + // downloading batches concurrently (so no way to link the headers + // until gaps are filled); in that case, we'll nuke the peer when + // we detect the fault. + res.Done <- nil + + select { + case req.deliver <- &headerResponse{ + peer: peer, + reqid: req.id, + headers: headers, + }: + case <-req.cancel: + } + } + } +} + +// revertRequests locates all the currently pending requests from a particular +// peer and reverts them, rescheduling for others to fulfill. +func (s *skeleton) revertRequests(peer string) { + // Gather the requests first, revertals need the lock too + var requests []*headerRequest + for _, req := range s.requests { + if req.peer == peer { + requests = append(requests, req) + } + } + // Revert all the requests matching the peer + for _, req := range requests { + s.revertRequest(req) + } +} + +// scheduleRevertRequest asks the event loop to clean up a request and return +// all failed retrieval tasks to the scheduler for reassignment. +func (s *skeleton) scheduleRevertRequest(req *headerRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertRequest cleans up a request and returns all failed retrieval tasks to +// the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertRequest. +func (s *skeleton) revertRequest(req *headerRequest) { + log.Trace("Reverting header request", "peer", req.peer, "reqid", req.id) + select { + case <-req.stale: + log.Trace("Header request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + delete(s.requests, req.id) + + // Remove the request from the tracked set and mark the task as not-pending, + // ready for rescheduling + s.scratchOwners[(s.scratchHead-req.head)/requestHeaders] = "" +} + +func (s *skeleton) processResponse(res *headerResponse) (linked bool, merged bool) { + res.peer.log.Trace("Processing header response", "head", res.headers[0].Number, "hash", res.headers[0].Hash(), "count", len(res.headers)) + + // Whether the response is valid, we can mark the peer as idle and notify + // the scheduler to assign a new task. If the response is invalid, we'll + // drop the peer in a bit. + s.idles[res.peer.id] = res.peer + + // Ensure the response is for a valid request + if _, ok := s.requests[res.reqid]; !ok { + // Some internal accounting is broken. A request either times out or it + // gets fulfilled successfully. It should not be possible to deliver a + // response to a non-existing request. + res.peer.log.Error("Unexpected header packet") + return false, false + } + delete(s.requests, res.reqid) + + // Insert the delivered headers into the scratch space independent of the + // content or continuation; those will be validated in a moment + head := res.headers[0].Number.Uint64() + copy(s.scratchSpace[s.scratchHead-head:], res.headers) + + // If there's still a gap in the head of the scratch space, abort + if s.scratchSpace[0] == nil { + return false, false + } + // Try to consume any head headers, validating the boundary conditions + batch := s.db.NewBatch() + for s.scratchSpace[0] != nil { + // Next batch of headers available, cross-reference with the subchain + // we are extending and either accept or discard + if s.progress.Subchains[0].Next != s.scratchSpace[0].Hash() { + // Print a log messages to track what's going on + tail := s.progress.Subchains[0].Tail + want := s.progress.Subchains[0].Next + have := s.scratchSpace[0].Hash() + + log.Warn("Invalid skeleton headers", "peer", s.scratchOwners[0], "number", tail-1, "want", want, "have", have) + + // The peer delivered junk, or at least not the subchain we are + // syncing to. Free up the scratch space and assignment, reassign + // and drop the original peer. + for i := 0; i < requestHeaders; i++ { + s.scratchSpace[i] = nil + } + s.drop(s.scratchOwners[0]) + s.scratchOwners[0] = "" + break + } + // Scratch delivery matches required subchain, deliver the batch of + // headers and push the subchain forward + var consumed int + for _, header := range s.scratchSpace[:requestHeaders] { + if header != nil { // nil when the genesis is reached + consumed++ + + rawdb.WriteSkeletonHeader(batch, header) + s.pulled++ + + s.progress.Subchains[0].Tail-- + s.progress.Subchains[0].Next = header.ParentHash + + // If we've reached an existing block in the chain, stop retrieving + // headers. Note, if we want to support light clients with the same + // code we'd need to switch here based on the downloader mode. That + // said, there's no such functionality for now, so don't complicate. + // + // In the case of full sync it would be enough to check for the body, + // but even a full syncing node will generate a receipt once block + // processing is done, so it's just one more "needless" check. + // + // The weird cascading checks are done to minimize the database reads. + linked = rawdb.HasHeader(s.db, header.ParentHash, header.Number.Uint64()-1) && + rawdb.HasBody(s.db, header.ParentHash, header.Number.Uint64()-1) && + rawdb.HasReceipts(s.db, header.ParentHash, header.Number.Uint64()-1) + if linked { + break + } + } + } + head := s.progress.Subchains[0].Head + tail := s.progress.Subchains[0].Tail + next := s.progress.Subchains[0].Next + + log.Trace("Primary subchain extended", "head", head, "tail", tail, "next", next) + + // If the beacon chain was linked to the local chain, completely swap out + // all internal progress and abort header synchronization. + if linked { + // Linking into the local chain should also mean that there are no + // leftover subchains, but in the case of importing the blocks via + // the engine API, we will not push the subchains forward. This will + // lead to a gap between an old sync cycle and a future one. + if subchains := len(s.progress.Subchains); subchains > 1 { + switch { + // If there are only 2 subchains - the current one and an older + // one - and the old one consists of a single block, then it's + // the expected new sync cycle after some propagated blocks. Log + // it for debugging purposes, explicitly clean and don't escalate. + case subchains == 2 && s.progress.Subchains[1].Head == s.progress.Subchains[1].Tail: + log.Debug("Cleaning previous beacon sync state", "head", s.progress.Subchains[1].Head) + rawdb.DeleteSkeletonHeader(batch, s.progress.Subchains[1].Head) + s.progress.Subchains = s.progress.Subchains[:1] + + // If we have more than one header or more than one leftover chain, + // the syncer's internal state is corrupted. Do try to fix it, but + // be very vocal about the fault. + default: + var context []interface{} + + for i := range s.progress.Subchains[1:] { + context = append(context, fmt.Sprintf("stale_head_%d", i+1)) + context = append(context, s.progress.Subchains[i+1].Head) + context = append(context, fmt.Sprintf("stale_tail_%d", i+1)) + context = append(context, s.progress.Subchains[i+1].Tail) + context = append(context, fmt.Sprintf("stale_next_%d", i+1)) + context = append(context, s.progress.Subchains[i+1].Next) + } + log.Error("Cleaning spurious beacon sync leftovers", context...) + s.progress.Subchains = s.progress.Subchains[:1] + + // Note, here we didn't actually delete the headers at all, + // just the metadata. We could implement a cleanup mechanism, + // but further modifying corrupted state is kind of asking + // for it. Unless there's a good enough reason to risk it, + // better to live with the small database junk. + } + } + break + } + // Batch of headers consumed, shift the download window forward + copy(s.scratchSpace, s.scratchSpace[requestHeaders:]) + for i := 0; i < requestHeaders; i++ { + s.scratchSpace[scratchHeaders-i-1] = nil + } + copy(s.scratchOwners, s.scratchOwners[1:]) + s.scratchOwners[scratchHeaders/requestHeaders-1] = "" + + s.scratchHead -= uint64(consumed) + + // If the subchain extended into the next subchain, we need to handle + // the overlap. Since there could be many overlaps (come on), do this + // in a loop. + for len(s.progress.Subchains) > 1 && s.progress.Subchains[1].Head >= s.progress.Subchains[0].Tail { + // Extract some stats from the second subchain + head := s.progress.Subchains[1].Head + tail := s.progress.Subchains[1].Tail + next := s.progress.Subchains[1].Next + + // Since we just overwrote part of the next subchain, we need to trim + // its head independent of matching or mismatching content + if s.progress.Subchains[1].Tail >= s.progress.Subchains[0].Tail { + // Fully overwritten, get rid of the subchain as a whole + log.Debug("Previous subchain fully overwritten", "head", head, "tail", tail, "next", next) + s.progress.Subchains = append(s.progress.Subchains[:1], s.progress.Subchains[2:]...) + continue + } else { + // Partially overwritten, trim the head to the overwritten size + log.Debug("Previous subchain partially overwritten", "head", head, "tail", tail, "next", next) + s.progress.Subchains[1].Head = s.progress.Subchains[0].Tail - 1 + } + // If the old subchain is an extension of the new one, merge the two + // and let the skeleton syncer restart (to clean internal state) + if rawdb.ReadSkeletonHeader(s.db, s.progress.Subchains[1].Head).Hash() == s.progress.Subchains[0].Next { + log.Debug("Previous subchain merged", "head", head, "tail", tail, "next", next) + s.progress.Subchains[0].Tail = s.progress.Subchains[1].Tail + s.progress.Subchains[0].Next = s.progress.Subchains[1].Next + + s.progress.Subchains = append(s.progress.Subchains[:1], s.progress.Subchains[2:]...) + merged = true + } + } + // If subchains were merged, all further available headers in the scratch + // space are invalid since we skipped ahead. Stop processing the scratch + // space to avoid dropping peers thinking they delivered invalid data. + if merged { + break + } + } + s.saveSyncStatus(batch) + if err := batch.Write(); err != nil { + log.Crit("Failed to write skeleton headers and progress", "err", err) + } + // Print a progress report making the UX a bit nicer + left := s.progress.Subchains[0].Tail - 1 + if linked { + left = 0 + } + if time.Since(s.logged) > 8*time.Second || left == 0 { + s.logged = time.Now() + + if s.pulled == 0 { + log.Info("Beacon sync starting", "left", left) + } else { + eta := float64(time.Since(s.started)) / float64(s.pulled) * float64(left) + log.Info("Syncing beacon headers", "downloaded", s.pulled, "left", left, "eta", common.PrettyDuration(eta)) + } + } + return linked, merged +} + +// cleanStales removes previously synced beacon headers that have become stale +// due to the downloader backfilling past the tracked tail. +func (s *skeleton) cleanStales(filled *types.Header) error { + number := filled.Number.Uint64() + log.Trace("Cleaning stale beacon headers", "filled", number, "hash", filled.Hash()) + + // If the filled header is below the linked subchain, something's + // corrupted internally. Report and error and refuse to do anything. + if number < s.progress.Subchains[0].Tail { + return fmt.Errorf("filled header below beacon header tail: %d < %d", number, s.progress.Subchains[0].Tail) + } + // Subchain seems trimmable, push the tail forward up to the last + // filled header and delete everything before it - if available. In + // case we filled past the head, recreate the subchain with a new + // head to keep it consistent with the data on disk. + var ( + start = s.progress.Subchains[0].Tail // start deleting from the first known header + end = number // delete until the requested threshold + ) + s.progress.Subchains[0].Tail = number + s.progress.Subchains[0].Next = filled.ParentHash + + if s.progress.Subchains[0].Head < number { + // If more headers were filled than available, push the entire + // subchain forward to keep tracking the node's block imports + end = s.progress.Subchains[0].Head + 1 // delete the entire original range, including the head + s.progress.Subchains[0].Head = number // assign a new head (tail is already assigned to this) + } + // Execute the trimming and the potential rewiring of the progress + batch := s.db.NewBatch() + + if end != number { + // The entire original skeleton chain was deleted and a new one + // defined. Make sure the new single-header chain gets pushed to + // disk to keep internal state consistent. + rawdb.WriteSkeletonHeader(batch, filled) + } + s.saveSyncStatus(batch) + for n := start; n < end; n++ { + // If the batch grew too big, flush it and continue with a new batch. + // The catch is that the sync metadata needs to reflect the actually + // flushed state, so temporarily change the subchain progress and + // revert after the flush. + if batch.ValueSize() >= ethdb.IdealBatchSize { + tmpTail := s.progress.Subchains[0].Tail + tmpNext := s.progress.Subchains[0].Next + + s.progress.Subchains[0].Tail = n + s.progress.Subchains[0].Next = rawdb.ReadSkeletonHeader(s.db, n).ParentHash + s.saveSyncStatus(batch) + + if err := batch.Write(); err != nil { + log.Crit("Failed to write beacon trim data", "err", err) + } + batch.Reset() + + s.progress.Subchains[0].Tail = tmpTail + s.progress.Subchains[0].Next = tmpNext + s.saveSyncStatus(batch) + } + rawdb.DeleteSkeletonHeader(batch, n) + } + if err := batch.Write(); err != nil { + log.Crit("Failed to write beacon trim data", "err", err) + } + return nil +} + +// Bounds retrieves the current head and tail tracked by the skeleton syncer. +// This method is used by the backfiller, whose life cycle is controlled by the +// skeleton syncer. +// +// Note, the method will not use the internal state of the skeleton, but will +// rather blindly pull stuff from the database. This is fine, because the back- +// filler will only run when the skeleton chain is fully downloaded and stable. +// There might be new heads appended, but those are atomic from the perspective +// of this method. Any head reorg will first tear down the backfiller and only +// then make the modification. +func (s *skeleton) Bounds() (head *types.Header, tail *types.Header, err error) { + // Read the current sync progress from disk and figure out the current head. + // Although there's a lot of error handling here, these are mostly as sanity + // checks to avoid crashing if a programming error happens. These should not + // happen in live code. + status := rawdb.ReadSkeletonSyncStatus(s.db) + if len(status) == 0 { + return nil, nil, errors.New("beacon sync not yet started") + } + progress := new(skeletonProgress) + if err := json.Unmarshal(status, progress); err != nil { + return nil, nil, err + } + head = rawdb.ReadSkeletonHeader(s.db, progress.Subchains[0].Head) + tail = rawdb.ReadSkeletonHeader(s.db, progress.Subchains[0].Tail) + + return head, tail, nil +} + +// Header retrieves a specific header tracked by the skeleton syncer. This method +// is meant to be used by the backfiller, whose life cycle is controlled by the +// skeleton syncer. +// +// Note, outside the permitted runtimes, this method might return nil results and +// subsequent calls might return headers from different chains. +func (s *skeleton) Header(number uint64) *types.Header { + return rawdb.ReadSkeletonHeader(s.db, number) +} diff --git a/eth/downloader/skeleton_test.go b/eth/downloader/skeleton_test.go new file mode 100644 index 00000000..6bcbac3a --- /dev/null +++ b/eth/downloader/skeleton_test.go @@ -0,0 +1,894 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "encoding/json" + "errors" + "fmt" + "math/big" + "sync/atomic" + "testing" + "time" + + "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/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" +) + +// hookedBackfiller is a tester backfiller with all interface methods mocked and +// hooked so tests can implement only the things they need. +type hookedBackfiller struct { + // suspendHook is an optional hook to be called when the filler is requested + // to be suspended. + suspendHook func() + + // resumeHook is an optional hook to be called when the filler is requested + // to be resumed. + resumeHook func() +} + +// newHookedBackfiller creates a hooked backfiller with all callbacks disabled, +// essentially acting as a noop. +func newHookedBackfiller() backfiller { + return new(hookedBackfiller) +} + +// suspend requests the backfiller to abort any running full or snap sync +// based on the skeleton chain as it might be invalid. The backfiller should +// gracefully handle multiple consecutive suspends without a resume, even +// on initial startup. +func (hf *hookedBackfiller) suspend() *types.Header { + if hf.suspendHook != nil { + hf.suspendHook() + } + return nil // we don't really care about header cleanups for now +} + +// resume requests the backfiller to start running fill or snap sync based on +// the skeleton chain as it has successfully been linked. Appending new heads +// to the end of the chain will not result in suspend/resume cycles. +func (hf *hookedBackfiller) resume() { + if hf.resumeHook != nil { + hf.resumeHook() + } +} + +// skeletonTestPeer is a mock peer that can only serve header requests from a +// pre-perated header chain (which may be arbitrarily wrong for testing). +// +// Requesting anything else from these peers will hard panic. Note, do *not* +// implement any other methods. We actually want to make sure that the skeleton +// syncer only depends on - and will only ever do so - on header requests. +type skeletonTestPeer struct { + id string // Unique identifier of the mock peer + headers []*types.Header // Headers to serve when requested + + serve func(origin uint64) []*types.Header // Hook to allow custom responses + + served uint64 // Number of headers served by this peer + dropped uint64 // Flag whether the peer was dropped (stop responding) +} + +// newSkeletonTestPeer creates a new mock peer to test the skeleton sync with. +func newSkeletonTestPeer(id string, headers []*types.Header) *skeletonTestPeer { + return &skeletonTestPeer{ + id: id, + headers: headers, + } +} + +// newSkeletonTestPeer creates a new mock peer to test the skeleton sync with, +// and sets an optional serve hook that can return headers for delivery instead +// of the predefined chain. Useful for emulating malicious behavior that would +// otherwise require dedicated peer types. +func newSkeletonTestPeerWithHook(id string, headers []*types.Header, serve func(origin uint64) []*types.Header) *skeletonTestPeer { + return &skeletonTestPeer{ + id: id, + headers: headers, + serve: serve, + } +} + +// RequestHeadersByNumber constructs a GetBlockHeaders function based on a numbered +// origin; associated with a particular peer in the download tester. The returned +// function can be used to retrieve batches of headers from the particular peer. +func (p *skeletonTestPeer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool, sink chan *eth.Response) (*eth.Request, error) { + // Since skeleton test peer are in-memory mocks, dropping the does not make + // them inaccessible. As such, check a local `dropped` field to see if the + // peer has been dropped and should not respond any more. + if atomic.LoadUint64(&p.dropped) != 0 { + return nil, errors.New("peer already dropped") + } + // Skeleton sync retrieves batches of headers going backward without gaps. + // This ensures we can follow a clean parent progression without any reorg + // hiccups. There is no need for any other type of header retrieval, so do + // panic if there's such a request. + if !reverse || skip != 0 { + // Note, if other clients want to do these kinds of requests, it's their + // problem, it will still work. We just don't want *us* making complicated + // requests without a very strong reason to. + panic(fmt.Sprintf("invalid header retrieval: reverse %v, want true; skip %d, want 0", reverse, skip)) + } + // If the skeleton syncer requests the genesis block, panic. Whilst it could + // be considered a valid request, our code specifically should not request it + // ever since we want to link up headers to an existing local chain, which at + // worse will be the genesis. + if int64(origin)-int64(amount) < 0 { + panic(fmt.Sprintf("headers requested before (or at) genesis: origin %d, amount %d", origin, amount)) + } + // To make concurrency easier, the skeleton syncer always requests fixed size + // batches of headers. Panic if the peer is requested an amount other than the + // configured batch size (apart from the request leading to the genesis). + if amount > requestHeaders || (amount < requestHeaders && origin > uint64(amount)) { + panic(fmt.Sprintf("non-chunk size header batch requested: requested %d, want %d, origin %d", amount, requestHeaders, origin)) + } + // Simple reverse header retrieval. Fill from the peer's chain and return. + // If the tester has a serve hook set, try to use that before falling back + // to the default behavior. + var headers []*types.Header + if p.serve != nil { + headers = p.serve(origin) + } + if headers == nil { + headers = make([]*types.Header, 0, amount) + if len(p.headers) > int(origin) { // Don't serve headers if we're missing the origin + for i := 0; i < amount; i++ { + // Consider nil headers as a form of attack and withhold them. Nil + // cannot be decoded from RLP, so it's not possible to produce an + // attack by sending/receiving those over eth. + header := p.headers[int(origin)-i] + if header == nil { + continue + } + headers = append(headers, header) + } + } + } + atomic.AddUint64(&p.served, uint64(len(headers))) + + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() + } + // Deliver the headers to the downloader + req := ð.Request{ + Peer: p.id, + } + res := ð.Response{ + Req: req, + Res: (*eth.BlockHeadersPacket)(&headers), + Meta: hashes, + Time: 1, + Done: make(chan error), + } + go func() { + sink <- res + if err := <-res.Done; err != nil { + log.Warn("Skeleton test peer response rejected", "err", err) + atomic.AddUint64(&p.dropped, 1) + } + }() + return req, nil +} + +func (p *skeletonTestPeer) Head() (common.Hash, *big.Int) { + panic("skeleton sync must not request the remote head") +} + +func (p *skeletonTestPeer) RequestHeadersByHash(common.Hash, int, int, bool, chan *eth.Response) (*eth.Request, error) { + panic("skeleton sync must not request headers by hash") +} + +func (p *skeletonTestPeer) RequestBodies([]common.Hash, chan *eth.Response) (*eth.Request, error) { + panic("skeleton sync must not request block bodies") +} + +func (p *skeletonTestPeer) RequestReceipts([]common.Hash, chan *eth.Response) (*eth.Request, error) { + panic("skeleton sync must not request receipts") +} + +// Tests various sync initializations based on previous leftovers in the database +// and announced heads. +func TestSkeletonSyncInit(t *testing.T) { + // Create a few key headers + var ( + genesis = &types.Header{Number: big.NewInt(0)} + block49 = &types.Header{Number: big.NewInt(49)} + block49B = &types.Header{Number: big.NewInt(49), Extra: []byte("B")} + block50 = &types.Header{Number: big.NewInt(50), ParentHash: block49.Hash()} + ) + tests := []struct { + headers []*types.Header // Database content (beside the genesis) + oldstate []*subchain // Old sync state with various interrupted subchains + head *types.Header // New head header to announce to reorg to + newstate []*subchain // Expected sync state after the reorg + }{ + // Completely empty database with only the genesis set. The sync is expected + // to create a single subchain with the requested head. + { + head: block50, + newstate: []*subchain{{Head: 50, Tail: 50}}, + }, + // Empty database with only the genesis set with a leftover empty sync + // progress. This is a synthetic case, just for the sake of covering things. + { + oldstate: []*subchain{}, + head: block50, + newstate: []*subchain{{Head: 50, Tail: 50}}, + }, + // A single leftover subchain is present, older than the new head. The + // old subchain should be left as is and a new one appended to the sync + // status. + { + oldstate: []*subchain{{Head: 10, Tail: 5}}, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 10, Tail: 5}, + }, + }, + // Multiple leftover subchains are present, older than the new head. The + // old subchains should be left as is and a new one appended to the sync + // status. + { + oldstate: []*subchain{ + {Head: 20, Tail: 15}, + {Head: 10, Tail: 5}, + }, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 20, Tail: 15}, + {Head: 10, Tail: 5}, + }, + }, + // A single leftover subchain is present, newer than the new head. The + // newer subchain should be deleted and a fresh one created for the head. + { + oldstate: []*subchain{{Head: 65, Tail: 60}}, + head: block50, + newstate: []*subchain{{Head: 50, Tail: 50}}, + }, + // Multiple leftover subchain is present, newer than the new head. The + // newer subchains should be deleted and a fresh one created for the head. + { + oldstate: []*subchain{ + {Head: 75, Tail: 70}, + {Head: 65, Tail: 60}, + }, + head: block50, + newstate: []*subchain{{Head: 50, Tail: 50}}, + }, + + // Two leftover subchains are present, one fully older and one fully + // newer than the announced head. The head should delete the newer one, + // keeping the older one. + { + oldstate: []*subchain{ + {Head: 65, Tail: 60}, + {Head: 10, Tail: 5}, + }, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 10, Tail: 5}, + }, + }, + // Multiple leftover subchains are present, some fully older and some + // fully newer than the announced head. The head should delete the newer + // ones, keeping the older ones. + { + oldstate: []*subchain{ + {Head: 75, Tail: 70}, + {Head: 65, Tail: 60}, + {Head: 20, Tail: 15}, + {Head: 10, Tail: 5}, + }, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 20, Tail: 15}, + {Head: 10, Tail: 5}, + }, + }, + // A single leftover subchain is present and the new head is extending + // it with one more header. We expect the subchain head to be pushed + // forward. + { + headers: []*types.Header{block49}, + oldstate: []*subchain{{Head: 49, Tail: 5}}, + head: block50, + newstate: []*subchain{{Head: 50, Tail: 5}}, + }, + // A single leftover subchain is present and although the new head does + // extend it number wise, the hash chain does not link up. We expect a + // new subchain to be created for the dangling head. + { + headers: []*types.Header{block49B}, + oldstate: []*subchain{{Head: 49, Tail: 5}}, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 49, Tail: 5}, + }, + }, + // A single leftover subchain is present. A new head is announced that + // links into the middle of it, correctly anchoring into an existing + // header. We expect the old subchain to be truncated and extended with + // the new head. + { + headers: []*types.Header{block49}, + oldstate: []*subchain{{Head: 100, Tail: 5}}, + head: block50, + newstate: []*subchain{{Head: 50, Tail: 5}}, + }, + // A single leftover subchain is present. A new head is announced that + // links into the middle of it, but does not anchor into an existing + // header. We expect the old subchain to be truncated and a new chain + // be created for the dangling head. + { + headers: []*types.Header{block49B}, + oldstate: []*subchain{{Head: 100, Tail: 5}}, + head: block50, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + {Head: 49, Tail: 5}, + }, + }, + } + for i, tt := range tests { + // Create a fresh database and initialize it with the starting state + db := rawdb.NewMemoryDatabase() + + rawdb.WriteHeader(db, genesis) + for _, header := range tt.headers { + rawdb.WriteSkeletonHeader(db, header) + } + if tt.oldstate != nil { + blob, _ := json.Marshal(&skeletonProgress{Subchains: tt.oldstate}) + rawdb.WriteSkeletonSyncStatus(db, blob) + } + // Create a skeleton sync and run a cycle + wait := make(chan struct{}) + + skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller()) + skeleton.syncStarting = func() { close(wait) } + skeleton.Sync(tt.head, true) + + <-wait + skeleton.Terminate() + + // Ensure the correct resulting sync status + var progress skeletonProgress + json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) + + if len(progress.Subchains) != len(tt.newstate) { + t.Errorf("test %d: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.newstate)) + continue + } + for j := 0; j < len(progress.Subchains); j++ { + if progress.Subchains[j].Head != tt.newstate[j].Head { + t.Errorf("test %d: subchain %d head mismatch: have %d, want %d", i, j, progress.Subchains[j].Head, tt.newstate[j].Head) + } + if progress.Subchains[j].Tail != tt.newstate[j].Tail { + t.Errorf("test %d: subchain %d tail mismatch: have %d, want %d", i, j, progress.Subchains[j].Tail, tt.newstate[j].Tail) + } + } + } +} + +// Tests that a running skeleton sync can be extended with properly linked up +// headers but not with side chains. +func TestSkeletonSyncExtend(t *testing.T) { + // Create a few key headers + var ( + genesis = &types.Header{Number: big.NewInt(0)} + block49 = &types.Header{Number: big.NewInt(49)} + block49B = &types.Header{Number: big.NewInt(49), Extra: []byte("B")} + block50 = &types.Header{Number: big.NewInt(50), ParentHash: block49.Hash()} + block51 = &types.Header{Number: big.NewInt(51), ParentHash: block50.Hash()} + ) + tests := []struct { + head *types.Header // New head header to announce to reorg to + extend *types.Header // New head header to announce to extend with + newstate []*subchain // Expected sync state after the reorg + err error // Whether extension succeeds or not + }{ + // Initialize a sync and try to extend it with a subsequent block. + { + head: block49, + extend: block50, + newstate: []*subchain{ + {Head: 50, Tail: 49}, + }, + }, + // Initialize a sync and try to extend it with the existing head block. + { + head: block49, + extend: block49, + newstate: []*subchain{ + {Head: 49, Tail: 49}, + }, + }, + // Initialize a sync and try to extend it with a sibling block. + { + head: block49, + extend: block49B, + newstate: []*subchain{ + {Head: 49, Tail: 49}, + }, + err: errReorgDenied, + }, + // Initialize a sync and try to extend it with a number-wise sequential + // header, but a hash wise non-linking one. + { + head: block49B, + extend: block50, + newstate: []*subchain{ + {Head: 49, Tail: 49}, + }, + err: errReorgDenied, + }, + // Initialize a sync and try to extend it with a non-linking future block. + { + head: block49, + extend: block51, + newstate: []*subchain{ + {Head: 49, Tail: 49}, + }, + err: errReorgDenied, + }, + // Initialize a sync and try to extend it with a past canonical block. + { + head: block50, + extend: block49, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + }, + err: errReorgDenied, + }, + // Initialize a sync and try to extend it with a past sidechain block. + { + head: block50, + extend: block49B, + newstate: []*subchain{ + {Head: 50, Tail: 50}, + }, + err: errReorgDenied, + }, + } + for i, tt := range tests { + // Create a fresh database and initialize it with the starting state + db := rawdb.NewMemoryDatabase() + rawdb.WriteHeader(db, genesis) + + // Create a skeleton sync and run a cycle + wait := make(chan struct{}) + + skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller()) + skeleton.syncStarting = func() { close(wait) } + skeleton.Sync(tt.head, true) + + <-wait + if err := skeleton.Sync(tt.extend, false); err != tt.err { + t.Errorf("test %d: extension failure mismatch: have %v, want %v", i, err, tt.err) + } + skeleton.Terminate() + + // Ensure the correct resulting sync status + var progress skeletonProgress + json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) + + if len(progress.Subchains) != len(tt.newstate) { + t.Errorf("test %d: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.newstate)) + continue + } + for j := 0; j < len(progress.Subchains); j++ { + if progress.Subchains[j].Head != tt.newstate[j].Head { + t.Errorf("test %d: subchain %d head mismatch: have %d, want %d", i, j, progress.Subchains[j].Head, tt.newstate[j].Head) + } + if progress.Subchains[j].Tail != tt.newstate[j].Tail { + t.Errorf("test %d: subchain %d tail mismatch: have %d, want %d", i, j, progress.Subchains[j].Tail, tt.newstate[j].Tail) + } + } + } +} + +// Tests that the skeleton sync correctly retrieves headers from one or more +// peers without duplicates or other strange side effects. +func TestSkeletonSyncRetrievals(t *testing.T) { + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + // Since skeleton headers don't need to be meaningful, beyond a parent hash + // progression, create a long fake chain to test with. + chain := []*types.Header{{Number: big.NewInt(0)}} + for i := 1; i < 10000; i++ { + chain = append(chain, &types.Header{ + ParentHash: chain[i-1].Hash(), + Number: big.NewInt(int64(i)), + }) + } + tests := []struct { + headers []*types.Header // Database content (beside the genesis) + oldstate []*subchain // Old sync state with various interrupted subchains + + head *types.Header // New head header to announce to reorg to + peers []*skeletonTestPeer // Initial peer set to start the sync with + midstate []*subchain // Expected sync state after initial cycle + midserve uint64 // Expected number of header retrievals after initial cycle + middrop uint64 // Expected number of peers dropped after initial cycle + + newHead *types.Header // New header to anoint on top of the old one + newPeer *skeletonTestPeer // New peer to join the skeleton syncer + endstate []*subchain // Expected sync state after the post-init event + endserve uint64 // Expected number of header retrievals after the post-init event + enddrop uint64 // Expected number of peers dropped after the post-init event + }{ + // Completely empty database with only the genesis set. The sync is expected + // to create a single subchain with the requested head. No peers however, so + // the sync should be stuck without any progression. + // + // When a new peer is added, it should detect the join and fill the headers + // to the genesis block. + { + head: chain[len(chain)-1], + midstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: uint64(len(chain) - 1)}}, + + newPeer: newSkeletonTestPeer("test-peer", chain), + endstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: 1}}, + endserve: uint64(len(chain) - 2), // len - head - genesis + }, + // Completely empty database with only the genesis set. The sync is expected + // to create a single subchain with the requested head. With one valid peer, + // the sync is expected to complete already in the initial round. + // + // Adding a second peer should not have any effect. + { + head: chain[len(chain)-1], + peers: []*skeletonTestPeer{newSkeletonTestPeer("test-peer-1", chain)}, + midstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: 1}}, + midserve: uint64(len(chain) - 2), // len - head - genesis + + newPeer: newSkeletonTestPeer("test-peer-2", chain), + endstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: 1}}, + endserve: uint64(len(chain) - 2), // len - head - genesis + }, + // Completely empty database with only the genesis set. The sync is expected + // to create a single subchain with the requested head. With many valid peers, + // the sync is expected to complete already in the initial round. + // + // Adding a new peer should not have any effect. + { + head: chain[len(chain)-1], + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("test-peer-1", chain), + newSkeletonTestPeer("test-peer-2", chain), + newSkeletonTestPeer("test-peer-3", chain), + }, + midstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: 1}}, + midserve: uint64(len(chain) - 2), // len - head - genesis + + newPeer: newSkeletonTestPeer("test-peer-4", chain), + endstate: []*subchain{{Head: uint64(len(chain) - 1), Tail: 1}}, + endserve: uint64(len(chain) - 2), // len - head - genesis + }, + // This test checks if a peer tries to withhold a header - *on* the sync + // boundary - instead of sending the requested amount. The malicious short + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-skipper", append(append(append([]*types.Header{}, chain[:99]...), nil), chain[100:]...)), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 3, // len - head - genesis - missing + middrop: 1, // penalize shortened header deliveries + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 3) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test checks if a peer tries to withhold a header - *off* the sync + // boundary - instead of sending the requested amount. The malicious short + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-skipper", append(append(append([]*types.Header{}, chain[:50]...), nil), chain[51:]...)), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 3, // len - head - genesis - missing + middrop: 1, // penalize shortened header deliveries + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 3) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test checks if a peer tries to duplicate a header - *on* the sync + // boundary - instead of sending the correct sequence. The malicious duped + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], // We want to force the 100th header to be a request boundary + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-duper", append(append(append([]*types.Header{}, chain[:99]...), chain[98]), chain[100:]...)), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 2, // len - head - genesis + middrop: 1, // penalize invalid header sequences + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 2) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test checks if a peer tries to duplicate a header - *off* the sync + // boundary - instead of sending the correct sequence. The malicious duped + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], // We want to force the 100th header to be a request boundary + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-duper", append(append(append([]*types.Header{}, chain[:50]...), chain[49]), chain[51:]...)), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 2, // len - head - genesis + middrop: 1, // penalize invalid header sequences + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 2) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test checks if a peer tries to inject a different header - *on* + // the sync boundary - instead of sending the correct sequence. The bad + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], // We want to force the 100th header to be a request boundary + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-changer", + append( + append( + append([]*types.Header{}, chain[:99]...), + &types.Header{ + ParentHash: chain[98].Hash(), + Number: big.NewInt(int64(99)), + GasLimit: 1, + }, + ), chain[100:]..., + ), + ), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 2, // len - head - genesis + middrop: 1, // different set of headers, drop // TODO(karalabe): maybe just diff sync? + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 2) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test checks if a peer tries to inject a different header - *off* + // the sync boundary - instead of sending the correct sequence. The bad + // package should not be accepted. + // + // Joining with a new peer should however unblock the sync. + { + head: chain[requestHeaders+100], // We want to force the 100th header to be a request boundary + peers: []*skeletonTestPeer{ + newSkeletonTestPeer("header-changer", + append( + append( + append([]*types.Header{}, chain[:50]...), + &types.Header{ + ParentHash: chain[49].Hash(), + Number: big.NewInt(int64(50)), + GasLimit: 1, + }, + ), chain[51:]..., + ), + ), + }, + midstate: []*subchain{{Head: requestHeaders + 100, Tail: 100}}, + midserve: requestHeaders + 101 - 2, // len - head - genesis + middrop: 1, // different set of headers, drop + + newPeer: newSkeletonTestPeer("good-peer", chain), + endstate: []*subchain{{Head: requestHeaders + 100, Tail: 1}}, + endserve: (requestHeaders + 101 - 2) + (100 - 1), // midserve + lenrest - genesis + enddrop: 1, // no new drops + }, + // This test reproduces a bug caught during review (kudos to @holiman) + // where a subchain is merged with a previously interrupted one, causing + // pending data in the scratch space to become "invalid" (since we jump + // ahead during subchain merge). In that case it is expected to ignore + // the queued up data instead of trying to process on top of a shifted + // task set. + // + // The test is a bit convoluted since it needs to trigger a concurrency + // issue. First we sync up an initial chain of 2x512 items. Then announce + // 2x512+2 as head and delay delivering the head batch to fill the scratch + // space first. The delivery head should merge with the previous download + // and the scratch space must not be consumed further. + { + head: chain[2*requestHeaders], + peers: []*skeletonTestPeer{ + newSkeletonTestPeerWithHook("peer-1", chain, func(origin uint64) []*types.Header { + if origin == chain[2*requestHeaders+1].Number.Uint64() { + time.Sleep(100 * time.Millisecond) + } + return nil // Fallback to default behavior, just delayed + }), + newSkeletonTestPeerWithHook("peer-2", chain, func(origin uint64) []*types.Header { + if origin == chain[2*requestHeaders+1].Number.Uint64() { + time.Sleep(100 * time.Millisecond) + } + return nil // Fallback to default behavior, just delayed + }), + }, + midstate: []*subchain{{Head: 2 * requestHeaders, Tail: 1}}, + midserve: 2*requestHeaders - 1, // len - head - genesis + + newHead: chain[2*requestHeaders+2], + endstate: []*subchain{{Head: 2*requestHeaders + 2, Tail: 1}}, + endserve: 4 * requestHeaders, + }, + } + for i, tt := range tests { + // Create a fresh database and initialize it with the starting state + db := rawdb.NewMemoryDatabase() + rawdb.WriteHeader(db, chain[0]) + + // Create a peer set to feed headers through + peerset := newPeerSet() + for _, peer := range tt.peers { + peerset.Register(newPeerConnection(peer.id, eth.ETH66, peer, log.New("id", peer.id))) + } + // Create a peer dropper to track malicious peers + dropped := make(map[string]int) + drop := func(peer string) { + if p := peerset.Peer(peer); p != nil { + atomic.AddUint64(&p.peer.(*skeletonTestPeer).dropped, 1) + } + peerset.Unregister(peer) + dropped[peer]++ + } + // Create a skeleton sync and run a cycle + skeleton := newSkeleton(db, peerset, drop, newHookedBackfiller()) + skeleton.Sync(tt.head, true) + + var progress skeletonProgress + // Wait a bit (bleah) for the initial sync loop to go to idle. This might + // be either a finish or a never-start hence why there's no event to hook. + check := func() error { + if len(progress.Subchains) != len(tt.midstate) { + return fmt.Errorf("test %d, mid state: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.midstate)) + } + for j := 0; j < len(progress.Subchains); j++ { + if progress.Subchains[j].Head != tt.midstate[j].Head { + return fmt.Errorf("test %d, mid state: subchain %d head mismatch: have %d, want %d", i, j, progress.Subchains[j].Head, tt.midstate[j].Head) + } + if progress.Subchains[j].Tail != tt.midstate[j].Tail { + return fmt.Errorf("test %d, mid state: subchain %d tail mismatch: have %d, want %d", i, j, progress.Subchains[j].Tail, tt.midstate[j].Tail) + } + } + return nil + } + + waitStart := time.Now() + for waitTime := 20 * time.Millisecond; time.Since(waitStart) < time.Second; waitTime = waitTime * 2 { + time.Sleep(waitTime) + // Check the post-init end state if it matches the required results + json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) + if err := check(); err == nil { + break + } + } + if err := check(); err != nil { + t.Error(err) + continue + } + var served uint64 + for _, peer := range tt.peers { + served += atomic.LoadUint64(&peer.served) + } + if served != tt.midserve { + t.Errorf("test %d, mid state: served headers mismatch: have %d, want %d", i, served, tt.midserve) + } + var drops uint64 + for _, peer := range tt.peers { + drops += atomic.LoadUint64(&peer.dropped) + } + if drops != tt.middrop { + t.Errorf("test %d, mid state: dropped peers mismatch: have %d, want %d", i, drops, tt.middrop) + } + // Apply the post-init events if there's any + if tt.newHead != nil { + skeleton.Sync(tt.newHead, true) + } + if tt.newPeer != nil { + if err := peerset.Register(newPeerConnection(tt.newPeer.id, eth.ETH66, tt.newPeer, log.New("id", tt.newPeer.id))); err != nil { + t.Errorf("test %d: failed to register new peer: %v", i, err) + } + } + // Wait a bit (bleah) for the second sync loop to go to idle. This might + // be either a finish or a never-start hence why there's no event to hook. + check = func() error { + if len(progress.Subchains) != len(tt.endstate) { + return fmt.Errorf("test %d, end state: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.endstate)) + } + for j := 0; j < len(progress.Subchains); j++ { + if progress.Subchains[j].Head != tt.endstate[j].Head { + return fmt.Errorf("test %d, end state: subchain %d head mismatch: have %d, want %d", i, j, progress.Subchains[j].Head, tt.endstate[j].Head) + } + if progress.Subchains[j].Tail != tt.endstate[j].Tail { + return fmt.Errorf("test %d, end state: subchain %d tail mismatch: have %d, want %d", i, j, progress.Subchains[j].Tail, tt.endstate[j].Tail) + } + } + return nil + } + waitStart = time.Now() + for waitTime := 20 * time.Millisecond; time.Since(waitStart) < time.Second; waitTime = waitTime * 2 { + time.Sleep(waitTime) + // Check the post-init end state if it matches the required results + json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) + if err := check(); err == nil { + break + } + } + if err := check(); err != nil { + t.Error(err) + continue + } + // Check that the peers served no more headers than we actually needed + served = 0 + for _, peer := range tt.peers { + served += atomic.LoadUint64(&peer.served) + } + if tt.newPeer != nil { + served += atomic.LoadUint64(&tt.newPeer.served) + } + if served != tt.endserve { + t.Errorf("test %d, end state: served headers mismatch: have %d, want %d", i, served, tt.endserve) + } + drops = 0 + for _, peer := range tt.peers { + drops += atomic.LoadUint64(&peer.dropped) + } + if tt.newPeer != nil { + drops += atomic.LoadUint64(&tt.newPeer.dropped) + } + if drops != tt.middrop { + t.Errorf("test %d, end state: dropped peers mismatch: have %d, want %d", i, drops, tt.middrop) + } + // Clean up any leftover skeleton sync resources + skeleton.Terminate() + } +} diff --git a/eth/downloader/statesync.go b/eth/downloader/statesync.go index 5858ea80..501af63e 100644 --- a/eth/downloader/statesync.go +++ b/eth/downloader/statesync.go @@ -17,52 +17,22 @@ package downloader import ( - "fmt" - "hash" "sync" - "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/trie" - "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" ) -// stateReq represents a batch of state fetch requests grouped together into -// a single data retrieval network packet. -type stateReq struct { - items []common.Hash // Hashes of the state items to download - tasks map[common.Hash]*stateTask // Download tasks to track previous attempts - timeout time.Duration // Maximum round trip time for this to complete - timer *time.Timer // Timer to fire when the RTT timeout expires - peer *peerConnection // Peer that we're requesting from - response [][]byte // Response data of the peer (nil for timeouts) - dropped bool // Flag whether the peer dropped off early -} - -// timedOut returns if this request timed out. -func (req *stateReq) timedOut() bool { - return req.response == nil -} - -// stateSyncStats is a collection of progress stats to report during a state trie -// sync to RPC requests as well as to display in user logs. -type stateSyncStats struct { - processed uint64 // Number of state entries processed - duplicate uint64 // Number of state entries downloaded twice - unexpected uint64 // Number of non-requested state entries received - pending uint64 // Number of still pending state entries -} - // 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: + // If we tell the statesync to restart with a new root, we also need + // to wait for it to actually also start -- when old requests have timed + // out or been delivered + <-s.started case <-d.quitCh: s.err = errCancelStateFetch close(s.done) @@ -79,8 +49,6 @@ func (d *Downloader) stateFetcher() { for next := s; next != nil; { next = d.runStateSync(next) } - case <-d.stateCh: - // Ignore state responses while no sync is running. case <-d.quitCh: return } @@ -90,122 +58,18 @@ func (d *Downloader) stateFetcher() { // runStateSync runs a state synchronisation until it completes or another root // hash is requested to be switched over to. func (d *Downloader) runStateSync(s *stateSync) *stateSync { - var ( - active = make(map[string]*stateReq) // Currently in-flight requests - finished []*stateReq // Completed or failed requests - timeout = make(chan *stateReq) // Timed out active requests - ) - defer func() { - // Cancel active request timers on exit. Also set peers to idle so they're - // available for the next sync. - for _, req := range active { - req.timer.Stop() - req.peer.SetNodeDataIdle(len(req.items)) - } - }() - // Run the state sync. + log.Trace("State sync starting", "root", s.root) + go s.run() defer s.Cancel() - // Listen for peer departure events to cancel assigned tasks - peerDrop := make(chan *peerConnection, 1024) - peerSub := s.d.peers.SubscribePeerDrops(peerDrop) - defer peerSub.Unsubscribe() - for { - // Enable sending of the first buffered element if there is one. - var ( - deliverReq *stateReq - deliverReqCh chan *stateReq - ) - if len(finished) > 0 { - deliverReq = finished[0] - deliverReqCh = s.deliver - } - select { - // The stateSync lifecycle: case next := <-d.stateSyncStart: return next case <-s.done: return nil - - // Send the next finished request to the current sync: - case deliverReqCh <- deliverReq: - // Shift out the first request, but also set the emptied slot to nil for GC - copy(finished, finished[1:]) - finished[len(finished)-1] = nil - finished = finished[:len(finished)-1] - - // Handle incoming state packs: - case pack := <-d.stateCh: - // Discard any data not requested (or previously timed out) - req := active[pack.PeerId()] - if req == nil { - log.Debug("Unrequested node data", "peer", pack.PeerId(), "len", pack.Items()) - continue - } - // Finalize the request and queue up for processing - req.timer.Stop() - req.response = pack.(*statePack).states - - finished = append(finished, req) - delete(active, pack.PeerId()) - - // Handle dropped peer connections: - case p := <-peerDrop: - // Skip if no request is currently pending - req := active[p.id] - if req == nil { - continue - } - // Finalize the request and queue up for processing - req.timer.Stop() - req.dropped = true - - finished = append(finished, req) - delete(active, p.id) - - // Handle timed-out requests: - case req := <-timeout: - // If the peer is already requesting something else, ignore the stale timeout. - // This can happen when the timeout and the delivery happens simultaneously, - // causing both pathways to trigger. - if active[req.peer.id] != req { - continue - } - // Move the timed out data back into the download queue - finished = append(finished, req) - delete(active, req.peer.id) - - // Track outgoing state requests: - case req := <-d.trackStateReq: - // If an active request already exists for this peer, we have a problem. In - // theory the trie node schedule must never assign two requests to the same - // peer. In practice however, a peer might receive a request, disconnect and - // immediately reconnect before the previous times out. In this case the first - // request is never honored, alas we must not silently overwrite it, as that - // causes valid requests to go missing and sync to get stuck. - if old := active[req.peer.id]; old != nil { - log.Warn("Busy peer assigned new state fetch", "peer", old.peer.id) - - // Make sure the previous one doesn't get siletly lost - old.timer.Stop() - old.dropped = true - - finished = append(finished, old) - } - // Start a timer to notify the sync loop if the peer stalled. - req.timer = time.AfterFunc(req.timeout, func() { - select { - case timeout <- req: - case <-s.done: - // Prevent leaking of timer goroutines in the unlikely case where a - // timer is fired just before exiting runStateSync. - } - }) - active[req.peer.id] = req } } } @@ -213,26 +77,14 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync { // stateSync schedules requests for downloading a particular state trie defined // by a given state root. type stateSync struct { - d *Downloader // Downloader instance to access and manage current peerset - - sched *trie.Sync // State trie sync scheduler defining the tasks - keccak hash.Hash // Keccak256 hasher to verify deliveries with - tasks map[common.Hash]*stateTask // Set of tasks currently queued for retrieval + d *Downloader // Downloader instance to access and manage current peerset + root common.Hash // State root currently being synced - numUncommitted int - bytesUncommitted int - - deliver chan *stateReq // Delivery channel multiplexing peer responses - cancel chan struct{} // Channel to signal a termination request - cancelOnce sync.Once // Ensures cancel only ever gets called once - done chan struct{} // Channel to signal termination completion - err error // Any error hit during sync (set before completion) -} - -// stateTask represents a single trie node download task, containing a set of -// peers already attempted retrieval from to detect stalled syncs and abort. -type stateTask struct { - attempts map[string]struct{} + started chan struct{} // Started is signalled once the sync loop starts + cancel chan struct{} // Channel to signal a termination request + cancelOnce sync.Once // Ensures cancel only ever gets called once + done chan struct{} // Channel to signal termination completion + err error // Any error hit during sync (set before completion) } // newStateSync creates a new state trie download scheduler. This method does not @@ -240,12 +92,10 @@ type stateTask struct { func newStateSync(d *Downloader, root common.Hash) *stateSync { return &stateSync{ d: d, - sched: state.NewStateSync(root, d.stateDB, d.stateBloom), - keccak: sha3.NewLegacyKeccak256(), - tasks: make(map[common.Hash]*stateTask), - deliver: make(chan *stateReq), + root: root, cancel: make(chan struct{}), done: make(chan struct{}), + started: make(chan struct{}), } } @@ -253,7 +103,8 @@ func newStateSync(d *Downloader, root common.Hash) *stateSync { // it finishes, and finally notifying any goroutines waiting for the loop to // finish. func (s *stateSync) run() { - s.err = s.loop() + close(s.started) + s.err = s.d.SnapSyncer.Sync(s.root, s.cancel) close(s.done) } @@ -265,232 +116,8 @@ func (s *stateSync) Wait() error { // Cancel cancels the sync and waits until it has shut down. func (s *stateSync) Cancel() error { - s.cancelOnce.Do(func() { close(s.cancel) }) + s.cancelOnce.Do(func() { + close(s.cancel) + }) return s.Wait() } - -// loop is the main event loop of a state trie sync. It it responsible for the -// assignment of new tasks to peers (including sending it to them) as well as -// for the processing of inbound data. Note, that the loop does not directly -// receive data from peers, rather those are buffered up in the downloader and -// pushed here async. The reason is to decouple processing from data receipt -// and timeouts. -func (s *stateSync) loop() (err error) { - // Listen for new peer events to assign tasks to them - newPeer := make(chan *peerConnection, 1024) - peerSub := s.d.peers.SubscribeNewPeers(newPeer) - defer peerSub.Unsubscribe() - defer func() { - cerr := s.commit(true) - if err == nil { - err = cerr - } - }() - - // Keep assigning new tasks until the sync completes or aborts - for s.sched.Pending() > 0 { - if err = s.commit(false); err != nil { - return err - } - s.assignTasks() - // Tasks assigned, wait for something to happen - select { - case <-newPeer: - // New peer arrived, try to assign it download tasks - - case <-s.cancel: - return errCancelStateFetch - - case <-s.d.cancelCh: - return errCanceled - - case req := <-s.deliver: - // Response, disconnect or timeout triggered, drop the peer if stalling - log.Trace("Received node data response", "peer", req.peer.id, "count", len(req.response), "dropped", req.dropped, "timeout", !req.dropped && req.timedOut()) - if len(req.items) <= 2 && !req.dropped && req.timedOut() { - // 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) - 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) - if err != nil { - log.Warn("Node data write error", "err", err) - return err - } - req.peer.SetNodeDataIdle(delivered) - } - } - return nil -} - -func (s *stateSync) commit(force bool) error { - if !force && s.bytesUncommitted < ethdb.IdealBatchSize { - return nil - } - start := time.Now() - b := s.d.stateDB.NewBatch() - if written, err := s.sched.Commit(b); written == 0 || err != nil { - return err - } - if err := b.Write(); err != nil { - return fmt.Errorf("DB write error: %v", err) - } - s.updateStats(s.numUncommitted, 0, 0, time.Since(start)) - s.numUncommitted = 0 - s.bytesUncommitted = 0 - return nil -} - -// assignTasks attempts to assign new tasks to all idle peers, either from the -// batch currently being retried, or fetching new data from the trie sync itself. -func (s *stateSync) assignTasks() { - // Iterate over all idle peers and try to assign them state fetches - peers, _ := s.d.peers.NodeDataIdlePeers() - for _, p := range peers { - // Assign a batch of fetches proportional to the estimated latency/bandwidth - cap := p.NodeDataCapacity(s.d.requestRTT()) - req := &stateReq{peer: p, timeout: s.d.requestTTL()} - s.fillTasks(cap, req) - - // If the peer was assigned tasks to fetch, send the network request - if len(req.items) > 0 { - req.peer.log.Trace("Requesting new batch of data", "type", "state", "count", len(req.items)) - select { - case s.d.trackStateReq <- req: - req.peer.FetchNodeData(req.items) - case <-s.cancel: - case <-s.d.cancelCh: - } - } - } -} - -// fillTasks fills the given request object with a maximum of n state download -// tasks to send to the remote peer. -func (s *stateSync) fillTasks(n int, req *stateReq) { - // Refill available tasks from the scheduler. - if len(s.tasks) < n { - new := s.sched.Missing(n - len(s.tasks)) - for _, hash := range new { - s.tasks[hash] = &stateTask{make(map[string]struct{})} - } - } - // Find tasks that haven't been tried with the request's peer. - req.items = make([]common.Hash, 0, n) - req.tasks = make(map[common.Hash]*stateTask, n) - for hash, t := range s.tasks { - // Stop when we've gathered enough requests - if len(req.items) == n { - break - } - // Skip any requests we've already tried from this peer - if _, ok := t.attempts[req.peer.id]; ok { - continue - } - // Assign the request to this peer - t.attempts[req.peer.id] = struct{}{} - req.items = append(req.items, hash) - req.tasks[hash] = t - delete(s.tasks, hash) - } -} - -// process iterates over a batch of delivered state data, injecting each item -// into a running state sync, re-queuing any items that were requested but not -// delivered. Returns whether the peer actually managed to deliver anything of -// value, and any error that occurred. -func (s *stateSync) process(req *stateReq) (int, error) { - // Collect processing stats and update progress if valid data was received - duplicate, unexpected, successful := 0, 0, 0 - - defer func(start time.Time) { - if duplicate > 0 || unexpected > 0 { - s.updateStats(0, duplicate, unexpected, time.Since(start)) - } - }(time.Now()) - - // Iterate over all the delivered data and inject one-by-one into the trie - for _, blob := range req.response { - _, hash, err := s.processNodeData(blob) - switch err { - case nil: - s.numUncommitted++ - s.bytesUncommitted += len(blob) - successful++ - case trie.ErrNotRequested: - unexpected++ - case trie.ErrAlreadyProcessed: - duplicate++ - default: - return successful, fmt.Errorf("invalid state node %s: %v", hash.TerminalString(), err) - } - delete(req.tasks, hash) - } - // Put unfulfilled tasks back into the retry queue - npeers := s.d.peers.Len() - for hash, task := range req.tasks { - // If the node did deliver something, missing items may be due to a protocol - // limit or a previous timeout + delayed delivery. Both cases should permit - // the node to retry the missing items (to avoid single-peer stalls). - if len(req.response) > 0 || req.timedOut() { - delete(task.attempts, req.peer.id) - } - // If we've requested the node too many times already, it may be a malicious - // sync where nobody has the right data. Abort. - if len(task.attempts) >= npeers { - return successful, fmt.Errorf("state node %s failed with all peers (%d tries, %d peers)", hash.TerminalString(), len(task.attempts), npeers) - } - // Missing item, place into the retry queue. - s.tasks[hash] = task - } - return successful, nil -} - -// processNodeData tries to inject a trie node data blob delivered from a remote -// peer into the state trie, returning whether anything useful was written or any -// error occurred. -func (s *stateSync) processNodeData(blob []byte) (bool, common.Hash, error) { - res := trie.SyncResult{Data: blob} - s.keccak.Reset() - s.keccak.Write(blob) - s.keccak.Sum(res.Hash[:0]) - committed, _, err := s.sched.Process([]trie.SyncResult{res}) - return committed, res.Hash, err -} - -// updateStats bumps the various state sync progress counters and displays a log -// message for the user to see. -func (s *stateSync) updateStats(written, duplicate, unexpected int, duration time.Duration) { - s.d.syncStatsLock.Lock() - defer s.d.syncStatsLock.Unlock() - - s.d.syncStatsState.pending = uint64(s.sched.Pending()) - s.d.syncStatsState.processed += uint64(written) - s.d.syncStatsState.duplicate += uint64(duplicate) - s.d.syncStatsState.unexpected += uint64(unexpected) - - if written > 0 || duplicate > 0 || unexpected > 0 { - log.Info("Imported new state entries", "count", written, "elapsed", common.PrettyDuration(duration), "processed", s.d.syncStatsState.processed, "pending", s.d.syncStatsState.pending, "retry", len(s.tasks), "duplicate", s.d.syncStatsState.duplicate, "unexpected", s.d.syncStatsState.unexpected) - } - if written > 0 { - rawdb.WriteFastTrieProgress(s.d.stateDB, s.d.syncStatsState.processed) - } -} diff --git a/eth/downloader/testchain_test.go b/eth/downloader/testchain_test.go index 549e161a..1c96681e 100644 --- a/eth/downloader/testchain_test.go +++ b/eth/downloader/testchain_test.go @@ -20,14 +20,16 @@ import ( "fmt" "math/big" "sync" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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/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" ) // Test chain parameters. @@ -35,77 +37,120 @@ var ( testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddress = crypto.PubkeyToAddress(testKey.PublicKey) testDB = rawdb.NewMemoryDatabase() - testGenesis = core.GenesisBlockForTesting(testDB, testAddress, big.NewInt(1000000000)) + + testGspec = core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testAddress: {Balance: big.NewInt(1000000000000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + testGenesis = testGspec.MustCommit(testDB) ) // The common prefix of all test chains: -var testChainBase = newTestChain(blockCacheItems+200, testGenesis) +var testChainBase *testChain // Different forks on top of the base chain: var testChainForkLightA, testChainForkLightB, testChainForkHeavy *testChain +var pregenerated bool + func init() { - var forkLen = int(maxForkAncestry + 50) + // Reduce some of the parameters to make the tester faster + fullMaxForkAncestry = 10000 + lightMaxForkAncestry = 10000 + blockCacheMaxItems = 1024 + fsHeaderSafetyNet = 256 + fsHeaderContCheck = 500 * time.Millisecond + + testChainBase = newTestChain(blockCacheMaxItems+200, testGenesis) + + var forkLen = int(fullMaxForkAncestry + 50) var wg sync.WaitGroup + + // Generate the test chains to seed the peers with wg.Add(3) go func() { testChainForkLightA = testChainBase.makeFork(forkLen, false, 1); wg.Done() }() go func() { testChainForkLightB = testChainBase.makeFork(forkLen, false, 2); wg.Done() }() go func() { testChainForkHeavy = testChainBase.makeFork(forkLen, true, 3); wg.Done() }() wg.Wait() + + // Generate the test peers used by the tests to avoid overloading during testing. + // These seemingly random chains are used in various downloader tests. We're just + // pre-generating them here. + chains := []*testChain{ + testChainBase, + testChainForkLightA, + testChainForkLightB, + testChainForkHeavy, + testChainBase.shorten(1), + testChainBase.shorten(blockCacheMaxItems - 15), + testChainBase.shorten((blockCacheMaxItems - 15) / 2), + testChainBase.shorten(blockCacheMaxItems - 15 - 5), + testChainBase.shorten(MaxHeaderFetch), + testChainBase.shorten(800), + testChainBase.shorten(800 / 2), + testChainBase.shorten(800 / 3), + testChainBase.shorten(800 / 4), + testChainBase.shorten(800 / 5), + testChainBase.shorten(800 / 6), + testChainBase.shorten(800 / 7), + testChainBase.shorten(800 / 8), + testChainBase.shorten(3*fsHeaderSafetyNet + 256 + fsMinFullBlocks), + testChainBase.shorten(fsMinFullBlocks + 256 - 1), + testChainForkLightA.shorten(len(testChainBase.blocks) + 80), + testChainForkLightB.shorten(len(testChainBase.blocks) + 81), + testChainForkLightA.shorten(len(testChainBase.blocks) + MaxHeaderFetch), + testChainForkLightB.shorten(len(testChainBase.blocks) + MaxHeaderFetch), + testChainForkHeavy.shorten(len(testChainBase.blocks) + 79), + } + wg.Add(len(chains)) + for _, chain := range chains { + go func(blocks []*types.Block) { + newTestBlockchain(blocks) + wg.Done() + }(chain.blocks[1:]) + } + wg.Wait() + + // Mark the chains pregenerated. Generating a new one will lead to a panic. + pregenerated = true } type testChain struct { - genesis *types.Block - chain []common.Hash - headerm map[common.Hash]*types.Header - blockm map[common.Hash]*types.Block - receiptm map[common.Hash][]*types.Receipt - tdm map[common.Hash]*big.Int + blocks []*types.Block } // newTestChain creates a blockchain of the given length. func newTestChain(length int, genesis *types.Block) *testChain { - tc := new(testChain).copy(length) - tc.genesis = genesis - tc.chain = append(tc.chain, genesis.Hash()) - tc.headerm[tc.genesis.Hash()] = tc.genesis.Header() - tc.tdm[tc.genesis.Hash()] = tc.genesis.Difficulty() - tc.blockm[tc.genesis.Hash()] = tc.genesis + tc := &testChain{ + blocks: []*types.Block{genesis}, + } tc.generate(length-1, 0, genesis, false) return tc } // makeFork creates a fork on top of the test chain. func (tc *testChain) makeFork(length int, heavy bool, seed byte) *testChain { - fork := tc.copy(tc.len() + length) - fork.generate(length, seed, tc.headBlock(), heavy) + fork := tc.copy(len(tc.blocks) + length) + fork.generate(length, seed, tc.blocks[len(tc.blocks)-1], heavy) return fork } // shorten creates a copy of the chain with the given length. It panics if the // length is longer than the number of available blocks. func (tc *testChain) shorten(length int) *testChain { - if length > tc.len() { - panic(fmt.Errorf("can't shorten test chain to %d blocks, it's only %d blocks long", length, tc.len())) + if length > len(tc.blocks) { + panic(fmt.Errorf("can't shorten test chain to %d blocks, it's only %d blocks long", length, len(tc.blocks))) } return tc.copy(length) } func (tc *testChain) copy(newlen int) *testChain { - cpy := &testChain{ - genesis: tc.genesis, - headerm: make(map[common.Hash]*types.Header, newlen), - blockm: make(map[common.Hash]*types.Block, newlen), - receiptm: make(map[common.Hash][]*types.Receipt, newlen), - tdm: make(map[common.Hash]*big.Int, newlen), + if newlen > len(tc.blocks) { + newlen = len(tc.blocks) } - for i := 0; i < len(tc.chain) && i < newlen; i++ { - hash := tc.chain[i] - cpy.chain = append(cpy.chain, tc.chain[i]) - cpy.tdm[hash] = tc.tdm[hash] - cpy.blockm[hash] = tc.blockm[hash] - cpy.headerm[hash] = tc.headerm[hash] - cpy.receiptm[hash] = tc.receiptm[hash] + cpy := &testChain{ + blocks: append([]*types.Block{}, tc.blocks[:newlen]...), } return cpy } @@ -115,19 +160,16 @@ func (tc *testChain) copy(newlen int) *testChain { // contains a transaction and every 5th an uncle to allow testing correct block // reassembly. func (tc *testChain) generate(n int, seed byte, parent *types.Block, heavy bool) { - // start := time.Now() - // defer func() { fmt.Printf("test chain generated in %v\n", time.Since(start)) }() - - blocks, receipts := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testDB, n, func(i int, block *core.BlockGen) { + blocks, _ := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testDB, n, func(i int, block *core.BlockGen) { block.SetCoinbase(common.Address{seed}) // If a heavy chain is requested, delay blocks to raise difficulty if heavy { - block.OffsetTime(-1) + block.OffsetTime(-9) } // Include transactions to the miner to make blocks more interesting. - if parent == tc.genesis && i%22 == 0 { + if parent == tc.blocks[0] && i%22 == 0 { signer := types.MakeSigner(params.TestChainConfig, block.Number()) - tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, nil, nil), signer, testKey) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) if err != nil { panic(err) } @@ -136,86 +178,56 @@ func (tc *testChain) generate(n int, seed byte, parent *types.Block, heavy bool) // if the block number is a multiple of 5, add a bonus uncle to the block if i > 0 && i%5 == 0 { block.AddUncle(&types.Header{ - ParentHash: block.PrevBlock(i - 1).Hash(), + ParentHash: block.PrevBlock(i - 2).Hash(), Number: big.NewInt(block.Number().Int64() - 1), }) } }) - - // Convert the block-chain into a hash-chain and header/block maps - td := new(big.Int).Set(tc.td(parent.Hash())) - for i, b := range blocks { - td := td.Add(td, b.Difficulty()) - hash := b.Hash() - tc.chain = append(tc.chain, hash) - tc.blockm[hash] = b - tc.headerm[hash] = b.Header() - tc.receiptm[hash] = receipts[i] - tc.tdm[hash] = new(big.Int).Set(td) - } + tc.blocks = append(tc.blocks, blocks...) } -// len returns the total number of blocks in the chain. -func (tc *testChain) len() int { - return len(tc.chain) -} - -// headBlock returns the head of the chain. -func (tc *testChain) headBlock() *types.Block { - return tc.blockm[tc.chain[len(tc.chain)-1]] -} - -// td returns the total difficulty of the given block. -func (tc *testChain) td(hash common.Hash) *big.Int { - return tc.tdm[hash] -} +var ( + testBlockchains = make(map[common.Hash]*testBlockchain) + testBlockchainsLock sync.Mutex +) -// headersByHash returns headers in ascending order from the given hash. -func (tc *testChain) headersByHash(origin common.Hash, amount int, skip int) []*types.Header { - num, _ := tc.hashToNumber(origin) - return tc.headersByNumber(num, amount, skip) +type testBlockchain struct { + chain *core.BlockChain + gen sync.Once } -// headersByNumber returns headers in ascending order from the given number. -func (tc *testChain) headersByNumber(origin uint64, amount int, skip int) []*types.Header { - result := make([]*types.Header, 0, amount) - for num := origin; num < uint64(len(tc.chain)) && len(result) < amount; num += uint64(skip) + 1 { - if header, ok := tc.headerm[tc.chain[int(num)]]; ok { - result = append(result, header) - } +// newTestBlockchain creates a blockchain database built by running the given blocks, +// either actually running them, or reusing a previously created one. The returned +// chains are *shared*, so *do not* mutate them. +func newTestBlockchain(blocks []*types.Block) *core.BlockChain { + // Retrieve an existing database, or create a new one + head := testGenesis.Hash() + if len(blocks) > 0 { + head = blocks[len(blocks)-1].Hash() } - return result -} - -// receipts returns the receipts of the given block hashes. -func (tc *testChain) receipts(hashes []common.Hash) [][]*types.Receipt { - results := make([][]*types.Receipt, 0, len(hashes)) - for _, hash := range hashes { - if receipt, ok := tc.receiptm[hash]; ok { - results = append(results, receipt) - } + testBlockchainsLock.Lock() + if _, ok := testBlockchains[head]; !ok { + testBlockchains[head] = new(testBlockchain) } - return results -} + tbc := testBlockchains[head] + testBlockchainsLock.Unlock() -// bodies returns the block bodies of the given block hashes. -func (tc *testChain) bodies(hashes []common.Hash) ([][]*types.Transaction, [][]*types.Header) { - transactions := make([][]*types.Transaction, 0, len(hashes)) - uncles := make([][]*types.Header, 0, len(hashes)) - for _, hash := range hashes { - if block, ok := tc.blockm[hash]; ok { - transactions = append(transactions, block.Transactions()) - uncles = append(uncles, block.Uncles()) + // Ensure that the database is generated + tbc.gen.Do(func() { + if pregenerated { + panic("Requested chain generation outside of init") } - } - return transactions, uncles -} + db := rawdb.NewMemoryDatabase() + testGspec.MustCommit(db) -func (tc *testChain) hashToNumber(target common.Hash) (uint64, bool) { - for num, hash := range tc.chain { - if hash == target { - return uint64(num), true + chain, err := core.NewBlockChain(db, nil, &testGspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + if err != nil { + panic(err) } - } - return 0, false + if n, err := chain.InsertChain(blocks); err != nil { + panic(fmt.Sprintf("block %d: %v", n, err)) + } + tbc.chain = chain + }) + return tbc.chain } diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go new file mode 100644 index 00000000..a8972941 --- /dev/null +++ b/eth/ethconfig/config.go @@ -0,0 +1,249 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package ethconfig contains the configuration of the ETH and LES protocols. +package ethconfig + +import ( + "math/big" + "os" + "os/user" + "path/filepath" + "runtime" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" +) + +// FullNodeGPO contains default gasprice oracle settings for full node. +var FullNodeGPO = gasprice.Config{ + Blocks: 20, + Percentile: 60, + MaxHeaderHistory: 1024, + MaxBlockHistory: 1024, + MaxPrice: gasprice.DefaultMaxPrice, + IgnorePrice: gasprice.DefaultIgnorePrice, +} + +// LightClientGPO contains default gasprice oracle settings for light client. +var LightClientGPO = gasprice.Config{ + Blocks: 2, + Percentile: 60, + MaxHeaderHistory: 300, + MaxBlockHistory: 5, + MaxPrice: gasprice.DefaultMaxPrice, + IgnorePrice: gasprice.DefaultIgnorePrice, +} + +// Defaults contains default settings for use on the Ethereum main net. +var Defaults = Config{ + SyncMode: downloader.SnapSync, + Ethash: ethash.Config{ + CacheDir: "ethash", + CachesInMem: 2, + CachesOnDisk: 3, + CachesLockMmap: false, + DatasetsInMem: 1, + DatasetsOnDisk: 2, + DatasetsLockMmap: false, + }, + NetworkId: 1, + TxLookupLimit: 2350000, + LightPeers: 100, + UltraLightFraction: 75, + DatabaseCache: 512, + TrieCleanCache: 154, + TrieCleanCacheJournal: "triecache", + TrieCleanCacheRejournal: 60 * time.Minute, + TrieDirtyCache: 256, + TrieTimeout: 60 * time.Minute, + SnapshotCache: 102, + FilterLogCacheSize: 32, + Miner: miner.Config{ + GasCeil: 30000000, + GasPrice: big.NewInt(params.GWei), + Recommit: 3 * time.Second, + }, + TxPool: core.DefaultTxPoolConfig, + RPCGasCap: 50000000, + RPCEVMTimeout: 5 * time.Second, + GPO: FullNodeGPO, + RPCTxFeeCap: 1, // 1 ether +} + +func init() { + home := os.Getenv("HOME") + if home == "" { + if user, err := user.Current(); err == nil { + home = user.HomeDir + } + } + if runtime.GOOS == "darwin" { + Defaults.Ethash.DatasetDir = filepath.Join(home, "Library", "Ethash") + } else if runtime.GOOS == "windows" { + localappdata := os.Getenv("LOCALAPPDATA") + if localappdata != "" { + Defaults.Ethash.DatasetDir = filepath.Join(localappdata, "Ethash") + } else { + Defaults.Ethash.DatasetDir = filepath.Join(home, "AppData", "Local", "Ethash") + } + } else { + Defaults.Ethash.DatasetDir = filepath.Join(home, ".ethash") + } +} + +//go:generate go run github.com/fjl/gencodec -type Config -formats toml -out gen_config.go + +// Config contains configuration options for of the ETH and LES protocols. +type Config struct { + // The genesis block, which is inserted if the database is empty. + // If nil, the Ethereum main net block is used. + Genesis *core.Genesis `toml:",omitempty"` + + // Protocol options + NetworkId uint64 // Network ID to use for selecting peers to connect to + SyncMode downloader.SyncMode + + // This can be set to list of enrtree:// URLs which will be queried for + // for nodes to connect to. + EthDiscoveryURLs []string + SnapDiscoveryURLs []string + + NoPruning bool // Whether to disable pruning and flush everything to disk + NoPrefetch bool // Whether to disable prefetching and only load state on demand + + TxLookupLimit uint64 `toml:",omitempty"` // The maximum number of blocks from head whose tx indices are reserved. + + // RequiredBlocks is a set of block number -> hash mappings which must be in the + // canonical chain of all remote peers. Setting the option makes geth verify the + // presence of these blocks for every new peer connection. + RequiredBlocks map[uint64]common.Hash `toml:"-"` + + // Light client options + 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 + LightNoPrune bool `toml:",omitempty"` // Whether to disable light chain pruning + LightNoSyncServe bool `toml:",omitempty"` // Whether to serve light clients before syncing + SyncFromCheckpoint bool `toml:",omitempty"` // Whether to sync the header chain from the configured checkpoint + + // 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 + DatabaseFreezer string + + TrieCleanCache int + TrieCleanCacheJournal string `toml:",omitempty"` // Disk journal directory for trie cache to survive node restarts + TrieCleanCacheRejournal time.Duration `toml:",omitempty"` // Time interval to regenerate the journal for clean cache + TrieDirtyCache int + TrieTimeout time.Duration + SnapshotCache int + Preimages bool + + // This is the number of blocks for which logs will be cached in the filter system. + FilterLogCacheSize int + + // Mining options + Miner miner.Config + + // Ethash options + Ethash ethash.Config + + // Transaction pool options + TxPool core.TxPoolConfig + + // Gas Price Oracle options + GPO gasprice.Config + + // Enables tracking of SHA3 preimages in the VM + EnablePreimageRecording bool + + // Miscellaneous options + DocRoot string `toml:"-"` + + // RPCGasCap is the global gas cap for eth-call variants. + RPCGasCap uint64 + + // RPCEVMTimeout is the global timeout for eth-call. + RPCEVMTimeout time.Duration + + // RPCTxFeeCap is the global transaction fee(price * gaslimit) cap for + // send-transaction variants. The unit is ether. + RPCTxFeeCap float64 + + // 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"` + + // OverrideTerminalTotalDifficulty (TODO: remove after the fork) + OverrideTerminalTotalDifficulty *big.Int `toml:",omitempty"` + + // OverrideTerminalTotalDifficultyPassed (TODO: remove after the fork) + OverrideTerminalTotalDifficultyPassed *bool `toml:",omitempty"` +} + +// CreateConsensusEngine creates a consensus engine for the given chain configuration. +func CreateConsensusEngine(stack *node.Node, ethashConfig *ethash.Config, cliqueConfig *params.CliqueConfig, notify []string, noverify bool, db ethdb.Database) consensus.Engine { + // If proof-of-authority is requested, set it up + var engine consensus.Engine + if cliqueConfig != nil { + engine = clique.New(cliqueConfig, db) + } else { + switch ethashConfig.PowMode { + case ethash.ModeFake: + log.Warn("Ethash used in fake mode") + case ethash.ModeTest: + log.Warn("Ethash used in test mode") + case ethash.ModeShared: + log.Warn("Ethash used in shared mode") + } + engine = ethash.New(ethash.Config{ + PowMode: ethashConfig.PowMode, + CacheDir: stack.ResolvePath(ethashConfig.CacheDir), + CachesInMem: ethashConfig.CachesInMem, + CachesOnDisk: ethashConfig.CachesOnDisk, + CachesLockMmap: ethashConfig.CachesLockMmap, + DatasetDir: ethashConfig.DatasetDir, + DatasetsInMem: ethashConfig.DatasetsInMem, + DatasetsOnDisk: ethashConfig.DatasetsOnDisk, + DatasetsLockMmap: ethashConfig.DatasetsLockMmap, + NotifyFull: ethashConfig.NotifyFull, + }, notify, noverify) + engine.(*ethash.Ethash).SetThreads(-1) // Disable CPU mining + } + return beacon.New(engine) +} diff --git a/eth/ethconfig/gen_config.go b/eth/ethconfig/gen_config.go new file mode 100644 index 00000000..9c7a0436 --- /dev/null +++ b/eth/ethconfig/gen_config.go @@ -0,0 +1,299 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package ethconfig + +import ( + "math/big" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/params" +) + +// MarshalTOML marshals as TOML. +func (c Config) MarshalTOML() (interface{}, error) { + type Config struct { + Genesis *core.Genesis `toml:",omitempty"` + NetworkId uint64 + SyncMode downloader.SyncMode + EthDiscoveryURLs []string + SnapDiscoveryURLs []string + NoPruning bool + NoPrefetch bool + TxLookupLimit uint64 `toml:",omitempty"` + RequiredBlocks map[uint64]common.Hash `toml:"-"` + LightServ int `toml:",omitempty"` + LightIngress int `toml:",omitempty"` + LightEgress int `toml:",omitempty"` + LightPeers int `toml:",omitempty"` + LightNoPrune bool `toml:",omitempty"` + LightNoSyncServe bool `toml:",omitempty"` + SyncFromCheckpoint bool `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 + TrieCleanCacheJournal string `toml:",omitempty"` + TrieCleanCacheRejournal time.Duration `toml:",omitempty"` + TrieDirtyCache int + TrieTimeout time.Duration + SnapshotCache int + Preimages bool + FilterLogCacheSize int + Miner miner.Config + Ethash ethash.Config + TxPool core.TxPoolConfig + GPO gasprice.Config + EnablePreimageRecording bool + DocRoot string `toml:"-"` + RPCGasCap uint64 + RPCEVMTimeout time.Duration + RPCTxFeeCap float64 + Checkpoint *params.TrustedCheckpoint `toml:",omitempty"` + CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` + OverrideTerminalTotalDifficulty *big.Int `toml:",omitempty"` + OverrideTerminalTotalDifficultyPassed *bool `toml:",omitempty"` + } + var enc Config + enc.Genesis = c.Genesis + enc.NetworkId = c.NetworkId + enc.SyncMode = c.SyncMode + enc.EthDiscoveryURLs = c.EthDiscoveryURLs + enc.SnapDiscoveryURLs = c.SnapDiscoveryURLs + enc.NoPruning = c.NoPruning + enc.NoPrefetch = c.NoPrefetch + enc.TxLookupLimit = c.TxLookupLimit + enc.RequiredBlocks = c.RequiredBlocks + enc.LightServ = c.LightServ + enc.LightIngress = c.LightIngress + enc.LightEgress = c.LightEgress + enc.LightPeers = c.LightPeers + enc.LightNoPrune = c.LightNoPrune + enc.LightNoSyncServe = c.LightNoSyncServe + enc.SyncFromCheckpoint = c.SyncFromCheckpoint + 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.TrieCleanCacheJournal = c.TrieCleanCacheJournal + enc.TrieCleanCacheRejournal = c.TrieCleanCacheRejournal + enc.TrieDirtyCache = c.TrieDirtyCache + enc.TrieTimeout = c.TrieTimeout + enc.SnapshotCache = c.SnapshotCache + enc.Preimages = c.Preimages + enc.FilterLogCacheSize = c.FilterLogCacheSize + enc.Miner = c.Miner + enc.Ethash = c.Ethash + enc.TxPool = c.TxPool + enc.GPO = c.GPO + enc.EnablePreimageRecording = c.EnablePreimageRecording + enc.DocRoot = c.DocRoot + enc.RPCGasCap = c.RPCGasCap + enc.RPCEVMTimeout = c.RPCEVMTimeout + enc.RPCTxFeeCap = c.RPCTxFeeCap + enc.Checkpoint = c.Checkpoint + enc.CheckpointOracle = c.CheckpointOracle + enc.OverrideTerminalTotalDifficulty = c.OverrideTerminalTotalDifficulty + enc.OverrideTerminalTotalDifficultyPassed = c.OverrideTerminalTotalDifficultyPassed + return &enc, nil +} + +// UnmarshalTOML unmarshals from TOML. +func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { + type Config struct { + Genesis *core.Genesis `toml:",omitempty"` + NetworkId *uint64 + SyncMode *downloader.SyncMode + EthDiscoveryURLs []string + SnapDiscoveryURLs []string + NoPruning *bool + NoPrefetch *bool + TxLookupLimit *uint64 `toml:",omitempty"` + RequiredBlocks map[uint64]common.Hash `toml:"-"` + LightServ *int `toml:",omitempty"` + LightIngress *int `toml:",omitempty"` + LightEgress *int `toml:",omitempty"` + LightPeers *int `toml:",omitempty"` + LightNoPrune *bool `toml:",omitempty"` + LightNoSyncServe *bool `toml:",omitempty"` + SyncFromCheckpoint *bool `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 + TrieCleanCacheJournal *string `toml:",omitempty"` + TrieCleanCacheRejournal *time.Duration `toml:",omitempty"` + TrieDirtyCache *int + TrieTimeout *time.Duration + SnapshotCache *int + Preimages *bool + FilterLogCacheSize *int + Miner *miner.Config + Ethash *ethash.Config + TxPool *core.TxPoolConfig + GPO *gasprice.Config + EnablePreimageRecording *bool + DocRoot *string `toml:"-"` + RPCGasCap *uint64 + RPCEVMTimeout *time.Duration + RPCTxFeeCap *float64 + Checkpoint *params.TrustedCheckpoint `toml:",omitempty"` + CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` + OverrideTerminalTotalDifficulty *big.Int `toml:",omitempty"` + OverrideTerminalTotalDifficultyPassed *bool `toml:",omitempty"` + } + var dec Config + if err := unmarshal(&dec); err != nil { + return err + } + if dec.Genesis != nil { + c.Genesis = dec.Genesis + } + if dec.NetworkId != nil { + c.NetworkId = *dec.NetworkId + } + if dec.SyncMode != nil { + c.SyncMode = *dec.SyncMode + } + if dec.EthDiscoveryURLs != nil { + c.EthDiscoveryURLs = dec.EthDiscoveryURLs + } + if dec.SnapDiscoveryURLs != nil { + c.SnapDiscoveryURLs = dec.SnapDiscoveryURLs + } + if dec.NoPruning != nil { + c.NoPruning = *dec.NoPruning + } + if dec.NoPrefetch != nil { + c.NoPrefetch = *dec.NoPrefetch + } + if dec.TxLookupLimit != nil { + c.TxLookupLimit = *dec.TxLookupLimit + } + if dec.RequiredBlocks != nil { + c.RequiredBlocks = dec.RequiredBlocks + } + 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.LightNoPrune != nil { + c.LightNoPrune = *dec.LightNoPrune + } + if dec.LightNoSyncServe != nil { + c.LightNoSyncServe = *dec.LightNoSyncServe + } + if dec.SyncFromCheckpoint != nil { + c.SyncFromCheckpoint = *dec.SyncFromCheckpoint + } + 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 + } + if dec.DatabaseHandles != nil { + c.DatabaseHandles = *dec.DatabaseHandles + } + if dec.DatabaseCache != nil { + c.DatabaseCache = *dec.DatabaseCache + } + if dec.DatabaseFreezer != nil { + c.DatabaseFreezer = *dec.DatabaseFreezer + } + if dec.TrieCleanCache != nil { + c.TrieCleanCache = *dec.TrieCleanCache + } + if dec.TrieCleanCacheJournal != nil { + c.TrieCleanCacheJournal = *dec.TrieCleanCacheJournal + } + if dec.TrieCleanCacheRejournal != nil { + c.TrieCleanCacheRejournal = *dec.TrieCleanCacheRejournal + } + if dec.TrieDirtyCache != nil { + c.TrieDirtyCache = *dec.TrieDirtyCache + } + if dec.TrieTimeout != nil { + c.TrieTimeout = *dec.TrieTimeout + } + if dec.SnapshotCache != nil { + c.SnapshotCache = *dec.SnapshotCache + } + if dec.Preimages != nil { + c.Preimages = *dec.Preimages + } + if dec.FilterLogCacheSize != nil { + c.FilterLogCacheSize = *dec.FilterLogCacheSize + } + if dec.Miner != nil { + c.Miner = *dec.Miner + } + if dec.Ethash != nil { + c.Ethash = *dec.Ethash + } + if dec.TxPool != nil { + c.TxPool = *dec.TxPool + } + if dec.GPO != nil { + c.GPO = *dec.GPO + } + if dec.EnablePreimageRecording != nil { + c.EnablePreimageRecording = *dec.EnablePreimageRecording + } + if dec.DocRoot != nil { + c.DocRoot = *dec.DocRoot + } + if dec.RPCGasCap != nil { + c.RPCGasCap = *dec.RPCGasCap + } + if dec.RPCEVMTimeout != nil { + c.RPCEVMTimeout = *dec.RPCEVMTimeout + } + if dec.RPCTxFeeCap != nil { + c.RPCTxFeeCap = *dec.RPCTxFeeCap + } + if dec.Checkpoint != nil { + c.Checkpoint = dec.Checkpoint + } + if dec.CheckpointOracle != nil { + c.CheckpointOracle = dec.CheckpointOracle + } + if dec.OverrideTerminalTotalDifficulty != nil { + c.OverrideTerminalTotalDifficulty = dec.OverrideTerminalTotalDifficulty + } + if dec.OverrideTerminalTotalDifficultyPassed != nil { + c.OverrideTerminalTotalDifficultyPassed = dec.OverrideTerminalTotalDifficultyPassed + } + return nil +} diff --git a/eth/fetcher/block_fetcher.go b/eth/fetcher/block_fetcher.go new file mode 100644 index 00000000..bd1a34c8 --- /dev/null +++ b/eth/fetcher/block_fetcher.go @@ -0,0 +1,939 @@ +// 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 fetcher contains the announcement based header, blocks or transaction synchronisation. +package fetcher + +import ( + "errors" + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/trie" +) + +const ( + lightTimeout = time.Millisecond // Time allowance before an announced header is explicitly requested + arriveTimeout = 500 * time.Millisecond // Time allowance before an announced block/transaction is explicitly requested + gatherSlack = 100 * time.Millisecond // Interval used to collate almost-expired announces with fetches + fetchTimeout = 5 * time.Second // Maximum allotted time to return an explicitly requested block/transaction +) + +const ( + maxUncleDist = 7 // Maximum allowed backward distance from the chain head + maxQueueDist = 32 // Maximum allowed distance from the chain head to queue + hashLimit = 256 // Maximum number of unique blocks or headers a peer may have announced + blockLimit = 64 // Maximum number of unique blocks a peer may have delivered +) + +var ( + blockAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/in", nil) + blockAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/announces/out", nil) + blockAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/drop", nil) + blockAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/dos", nil) + + blockBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/in", nil) + blockBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/broadcasts/out", nil) + blockBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/drop", nil) + blockBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/dos", nil) + + headerFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/headers", nil) + bodyFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/bodies", nil) + + headerFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/in", nil) + headerFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/out", nil) + bodyFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/in", nil) + bodyFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/out", nil) +) + +var errTerminated = errors.New("terminated") + +// HeaderRetrievalFn is a callback type for retrieving a header from the local chain. +type HeaderRetrievalFn func(common.Hash) *types.Header + +// blockRetrievalFn is a callback type for retrieving a block from the local chain. +type blockRetrievalFn func(common.Hash) *types.Block + +// headerRequesterFn is a callback type for sending a header retrieval request. +type headerRequesterFn func(common.Hash, chan *eth.Response) (*eth.Request, error) + +// bodyRequesterFn is a callback type for sending a body retrieval request. +type bodyRequesterFn func([]common.Hash, chan *eth.Response) (*eth.Request, error) + +// headerVerifierFn is a callback type to verify a block's header for fast propagation. +type headerVerifierFn func(header *types.Header) error + +// blockBroadcasterFn is a callback type for broadcasting a block to connected peers. +type blockBroadcasterFn func(block *types.Block, propagate bool) + +// chainHeightFn is a callback type to retrieve the current chain height. +type chainHeightFn func() uint64 + +// headersInsertFn is a callback type to insert a batch of headers into the local chain. +type headersInsertFn func(headers []*types.Header) (int, error) + +// chainInsertFn is a callback type to insert a batch of blocks into the local chain. +type chainInsertFn func(types.Blocks) (int, error) + +// peerDropFn is a callback type for dropping a peer detected as malicious. +type peerDropFn func(id string) + +// blockAnnounce is the hash notification of the availability of a new block in the +// network. +type blockAnnounce struct { + hash common.Hash // Hash of the block being announced + number uint64 // Number of the block being announced (0 = unknown | old protocol) + header *types.Header // Header of the block partially reassembled (new protocol) + time time.Time // Timestamp of the announcement + + origin string // Identifier of the peer originating the notification + + fetchHeader headerRequesterFn // Fetcher function to retrieve the header of an announced block + fetchBodies bodyRequesterFn // Fetcher function to retrieve the body of an announced block +} + +// headerFilterTask represents a batch of headers needing fetcher filtering. +type headerFilterTask struct { + peer string // The source peer of block headers + headers []*types.Header // Collection of headers to filter + time time.Time // Arrival time of the headers +} + +// bodyFilterTask represents a batch of block bodies (transactions and uncles) +// needing fetcher filtering. +type bodyFilterTask struct { + peer string // The source peer of block bodies + transactions [][]*types.Transaction // Collection of transactions per block bodies + uncles [][]*types.Header // Collection of uncles per block bodies + time time.Time // Arrival time of the blocks' contents +} + +// blockOrHeaderInject represents a schedules import operation. +type blockOrHeaderInject struct { + origin string + + header *types.Header // Used for light mode fetcher which only cares about header. + block *types.Block // Used for normal mode fetcher which imports full block. +} + +// number returns the block number of the injected object. +func (inject *blockOrHeaderInject) number() uint64 { + if inject.header != nil { + return inject.header.Number.Uint64() + } + return inject.block.NumberU64() +} + +// number returns the block hash of the injected object. +func (inject *blockOrHeaderInject) hash() common.Hash { + if inject.header != nil { + return inject.header.Hash() + } + return inject.block.Hash() +} + +// BlockFetcher is responsible for accumulating block announcements from various peers +// and scheduling them for retrieval. +type BlockFetcher struct { + light bool // The indicator whether it's a light fetcher or normal one. + + // Various event channels + notify chan *blockAnnounce + inject chan *blockOrHeaderInject + + headerFilter chan chan *headerFilterTask + bodyFilter chan chan *bodyFilterTask + + done chan common.Hash + quit chan struct{} + + // Announce states + announces map[string]int // Per peer blockAnnounce counts to prevent memory exhaustion + announced map[common.Hash][]*blockAnnounce // Announced blocks, scheduled for fetching + fetching map[common.Hash]*blockAnnounce // Announced blocks, currently fetching + fetched map[common.Hash][]*blockAnnounce // Blocks with headers fetched, scheduled for body retrieval + completing map[common.Hash]*blockAnnounce // Blocks with headers, currently body-completing + + // Block cache + queue *prque.Prque // Queue containing the import operations (block number sorted) + queues map[string]int // Per peer block counts to prevent memory exhaustion + queued map[common.Hash]*blockOrHeaderInject // Set of already queued blocks (to dedup imports) + + // Callbacks + getHeader HeaderRetrievalFn // Retrieves a header from the local chain + getBlock blockRetrievalFn // Retrieves a block from the local chain + verifyHeader headerVerifierFn // Checks if a block's headers have a valid proof of work + broadcastBlock blockBroadcasterFn // Broadcasts a block to connected peers + chainHeight chainHeightFn // Retrieves the current chain's height + insertHeaders headersInsertFn // Injects a batch of headers into the chain + insertChain chainInsertFn // Injects a batch of blocks into the chain + dropPeer peerDropFn // Drops a peer for misbehaving + + // Testing hooks + announceChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a hash from the blockAnnounce list + queueChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a block from the import queue + fetchingHook func([]common.Hash) // Method to call upon starting a block (eth/61) or header (eth/62) fetch + completingHook func([]common.Hash) // Method to call upon starting a block body fetch (eth/62) + importedHook func(*types.Header, *types.Block) // Method to call upon successful header or block import (both eth/61 and eth/62) +} + +// NewBlockFetcher creates a block fetcher to retrieve blocks based on hash announcements. +func NewBlockFetcher(light bool, getHeader HeaderRetrievalFn, getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBlock blockBroadcasterFn, chainHeight chainHeightFn, insertHeaders headersInsertFn, insertChain chainInsertFn, dropPeer peerDropFn) *BlockFetcher { + return &BlockFetcher{ + light: light, + notify: make(chan *blockAnnounce), + inject: make(chan *blockOrHeaderInject), + headerFilter: make(chan chan *headerFilterTask), + bodyFilter: make(chan chan *bodyFilterTask), + done: make(chan common.Hash), + quit: make(chan struct{}), + announces: make(map[string]int), + announced: make(map[common.Hash][]*blockAnnounce), + fetching: make(map[common.Hash]*blockAnnounce), + fetched: make(map[common.Hash][]*blockAnnounce), + completing: make(map[common.Hash]*blockAnnounce), + queue: prque.New(nil), + queues: make(map[string]int), + queued: make(map[common.Hash]*blockOrHeaderInject), + getHeader: getHeader, + getBlock: getBlock, + verifyHeader: verifyHeader, + broadcastBlock: broadcastBlock, + chainHeight: chainHeight, + insertHeaders: insertHeaders, + insertChain: insertChain, + dropPeer: dropPeer, + } +} + +// Start boots up the announcement based synchroniser, accepting and processing +// hash notifications and block fetches until termination requested. +func (f *BlockFetcher) Start() { + go f.loop() +} + +// Stop terminates the announcement based synchroniser, canceling all pending +// operations. +func (f *BlockFetcher) Stop() { + close(f.quit) +} + +// Notify announces the fetcher of the potential availability of a new block in +// the network. +func (f *BlockFetcher) Notify(peer string, hash common.Hash, number uint64, time time.Time, + headerFetcher headerRequesterFn, bodyFetcher bodyRequesterFn) error { + block := &blockAnnounce{ + hash: hash, + number: number, + time: time, + origin: peer, + fetchHeader: headerFetcher, + fetchBodies: bodyFetcher, + } + select { + case f.notify <- block: + return nil + case <-f.quit: + return errTerminated + } +} + +// Enqueue tries to fill gaps the fetcher's future import queue. +func (f *BlockFetcher) Enqueue(peer string, block *types.Block) error { + op := &blockOrHeaderInject{ + origin: peer, + block: block, + } + select { + case f.inject <- op: + return nil + case <-f.quit: + return errTerminated + } +} + +// FilterHeaders extracts all the headers that were explicitly requested by the fetcher, +// returning those that should be handled differently. +func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time time.Time) []*types.Header { + log.Trace("Filtering headers", "peer", peer, "headers", len(headers)) + + // Send the filter channel to the fetcher + filter := make(chan *headerFilterTask) + + select { + case f.headerFilter <- filter: + case <-f.quit: + return nil + } + // Request the filtering of the header list + select { + case filter <- &headerFilterTask{peer: peer, headers: headers, time: time}: + case <-f.quit: + return nil + } + // Retrieve the headers remaining after filtering + select { + case task := <-filter: + return task.headers + case <-f.quit: + return nil + } +} + +// FilterBodies extracts all the block bodies that were explicitly requested by +// the fetcher, returning those that should be handled differently. +func (f *BlockFetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time) ([][]*types.Transaction, [][]*types.Header) { + log.Trace("Filtering bodies", "peer", peer, "txs", len(transactions), "uncles", len(uncles)) + + // Send the filter channel to the fetcher + filter := make(chan *bodyFilterTask) + + select { + case f.bodyFilter <- filter: + case <-f.quit: + return nil, nil + } + // Request the filtering of the body list + select { + case filter <- &bodyFilterTask{peer: peer, transactions: transactions, uncles: uncles, time: time}: + case <-f.quit: + return nil, nil + } + // Retrieve the bodies remaining after filtering + select { + case task := <-filter: + return task.transactions, task.uncles + case <-f.quit: + return nil, nil + } +} + +// Loop is the main fetcher loop, checking and processing various notification +// events. +func (f *BlockFetcher) loop() { + // Iterate the block fetching until a quit is requested + var ( + fetchTimer = time.NewTimer(0) + completeTimer = time.NewTimer(0) + ) + <-fetchTimer.C // clear out the channel + <-completeTimer.C + defer fetchTimer.Stop() + defer completeTimer.Stop() + + for { + // Clean up any expired block fetches + for hash, announce := range f.fetching { + if time.Since(announce.time) > fetchTimeout { + f.forgetHash(hash) + } + } + // Import any queued blocks that could potentially fit + height := f.chainHeight() + for !f.queue.Empty() { + op := f.queue.PopItem().(*blockOrHeaderInject) + hash := op.hash() + if f.queueChangeHook != nil { + f.queueChangeHook(hash, false) + } + // If too high up the chain or phase, continue later + number := op.number() + if number > height+1 { + f.queue.Push(op, -int64(number)) + if f.queueChangeHook != nil { + f.queueChangeHook(hash, true) + } + break + } + // Otherwise if fresh and still unknown, try and import + if (number+maxUncleDist < height) || (f.light && f.getHeader(hash) != nil) || (!f.light && f.getBlock(hash) != nil) { + f.forgetBlock(hash) + continue + } + if f.light { + f.importHeaders(op.origin, op.header) + } else { + f.importBlocks(op.origin, op.block) + } + } + // Wait for an outside event to occur + select { + case <-f.quit: + // BlockFetcher terminating, abort all operations + return + + case notification := <-f.notify: + // A block was announced, make sure the peer isn't DOSing us + blockAnnounceInMeter.Mark(1) + + count := f.announces[notification.origin] + 1 + if count > hashLimit { + log.Debug("Peer exceeded outstanding announces", "peer", notification.origin, "limit", hashLimit) + blockAnnounceDOSMeter.Mark(1) + break + } + if notification.number == 0 { + break + } + // If we have a valid block number, check that it's potentially useful + if dist := int64(notification.number) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { + log.Debug("Peer discarded announcement", "peer", notification.origin, "number", notification.number, "hash", notification.hash, "distance", dist) + blockAnnounceDropMeter.Mark(1) + break + } + // All is well, schedule the announce if block's not yet downloading + if _, ok := f.fetching[notification.hash]; ok { + break + } + if _, ok := f.completing[notification.hash]; ok { + break + } + f.announces[notification.origin] = count + f.announced[notification.hash] = append(f.announced[notification.hash], notification) + if f.announceChangeHook != nil && len(f.announced[notification.hash]) == 1 { + f.announceChangeHook(notification.hash, true) + } + if len(f.announced) == 1 { + f.rescheduleFetch(fetchTimer) + } + + case op := <-f.inject: + // A direct block insertion was requested, try and fill any pending gaps + blockBroadcastInMeter.Mark(1) + + // Now only direct block injection is allowed, drop the header injection + // here silently if we receive. + if f.light { + continue + } + f.enqueue(op.origin, nil, op.block) + + case hash := <-f.done: + // A pending import finished, remove all traces of the notification + f.forgetHash(hash) + f.forgetBlock(hash) + + case <-fetchTimer.C: + // At least one block's timer ran out, check for needing retrieval + request := make(map[string][]common.Hash) + + for hash, announces := range f.announced { + // In current LES protocol(les2/les3), only header announce is + // available, no need to wait too much time for header broadcast. + timeout := arriveTimeout - gatherSlack + if f.light { + timeout = 0 + } + if time.Since(announces[0].time) > timeout { + // Pick a random peer to retrieve from, reset all others + announce := announces[rand.Intn(len(announces))] + f.forgetHash(hash) + + // If the block still didn't arrive, queue for fetching + if (f.light && f.getHeader(hash) == nil) || (!f.light && f.getBlock(hash) == nil) { + request[announce.origin] = append(request[announce.origin], hash) + f.fetching[hash] = announce + } + } + } + // Send out all block header requests + for peer, hashes := range request { + log.Trace("Fetching scheduled headers", "peer", peer, "list", hashes) + + // Create a closure of the fetch and schedule in on a new thread + fetchHeader, hashes := f.fetching[hashes[0]].fetchHeader, hashes + go func(peer string) { + if f.fetchingHook != nil { + f.fetchingHook(hashes) + } + for _, hash := range hashes { + headerFetchMeter.Mark(1) + go func(hash common.Hash) { + resCh := make(chan *eth.Response) + + req, err := fetchHeader(hash, resCh) + if err != nil { + return // Legacy code, yolo + } + defer req.Close() + + timeout := time.NewTimer(2 * fetchTimeout) // 2x leeway before dropping the peer + defer timeout.Stop() + + select { + case res := <-resCh: + res.Done <- nil + f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersPacket), time.Now().Add(res.Time)) + + case <-timeout.C: + // The peer didn't respond in time. The request + // was already rescheduled at this point, we were + // waiting for a catchup. With an unresponsive + // peer however, it's a protocol violation. + f.dropPeer(peer) + } + }(hash) + } + }(peer) + } + // Schedule the next fetch if blocks are still pending + f.rescheduleFetch(fetchTimer) + + case <-completeTimer.C: + // At least one header's timer ran out, retrieve everything + request := make(map[string][]common.Hash) + + for hash, announces := range f.fetched { + // Pick a random peer to retrieve from, reset all others + announce := announces[rand.Intn(len(announces))] + f.forgetHash(hash) + + // If the block still didn't arrive, queue for completion + if f.getBlock(hash) == nil { + request[announce.origin] = append(request[announce.origin], hash) + f.completing[hash] = announce + } + } + // Send out all block body requests + for peer, hashes := range request { + log.Trace("Fetching scheduled bodies", "peer", peer, "list", hashes) + + // Create a closure of the fetch and schedule in on a new thread + if f.completingHook != nil { + f.completingHook(hashes) + } + fetchBodies := f.completing[hashes[0]].fetchBodies + bodyFetchMeter.Mark(int64(len(hashes))) + + go func(peer string, hashes []common.Hash) { + resCh := make(chan *eth.Response) + + req, err := fetchBodies(hashes, resCh) + if err != nil { + return // Legacy code, yolo + } + defer req.Close() + + timeout := time.NewTimer(2 * fetchTimeout) // 2x leeway before dropping the peer + defer timeout.Stop() + + select { + case res := <-resCh: + res.Done <- nil + + txs, uncles := res.Res.(*eth.BlockBodiesPacket).Unpack() + f.FilterBodies(peer, txs, uncles, time.Now()) + + case <-timeout.C: + // The peer didn't respond in time. The request + // was already rescheduled at this point, we were + // waiting for a catchup. With an unresponsive + // peer however, it's a protocol violation. + f.dropPeer(peer) + } + }(peer, hashes) + } + // Schedule the next fetch if blocks are still pending + f.rescheduleComplete(completeTimer) + + case filter := <-f.headerFilter: + // Headers arrived from a remote peer. Extract those that were explicitly + // requested by the fetcher, and return everything else so it's delivered + // to other parts of the system. + var task *headerFilterTask + select { + case task = <-filter: + case <-f.quit: + return + } + headerFilterInMeter.Mark(int64(len(task.headers))) + + // Split the batch of headers into unknown ones (to return to the caller), + // known incomplete ones (requiring body retrievals) and completed blocks. + unknown, incomplete, complete, lightHeaders := []*types.Header{}, []*blockAnnounce{}, []*types.Block{}, []*blockAnnounce{} + for _, header := range task.headers { + hash := header.Hash() + + // Filter fetcher-requested headers from other synchronisation algorithms + if announce := f.fetching[hash]; announce != nil && announce.origin == task.peer && f.fetched[hash] == nil && f.completing[hash] == nil && f.queued[hash] == nil { + // If the delivered header does not match the promised number, drop the announcer + if header.Number.Uint64() != announce.number { + log.Trace("Invalid block number fetched", "peer", announce.origin, "hash", header.Hash(), "announced", announce.number, "provided", header.Number) + f.dropPeer(announce.origin) + f.forgetHash(hash) + continue + } + // Collect all headers only if we are running in light + // mode and the headers are not imported by other means. + if f.light { + if f.getHeader(hash) == nil { + announce.header = header + lightHeaders = append(lightHeaders, announce) + } + f.forgetHash(hash) + continue + } + // Only keep if not imported by other means + if f.getBlock(hash) == nil { + announce.header = header + announce.time = task.time + + // If the block is empty (header only), short circuit into the final import queue + if header.TxHash == types.EmptyRootHash && header.UncleHash == types.EmptyUncleHash { + log.Trace("Block empty, skipping body retrieval", "peer", announce.origin, "number", header.Number, "hash", header.Hash()) + + block := types.NewBlockWithHeader(header) + block.ReceivedAt = task.time + + complete = append(complete, block) + f.completing[hash] = announce + continue + } + // Otherwise add to the list of blocks needing completion + incomplete = append(incomplete, announce) + } else { + log.Trace("Block already imported, discarding header", "peer", announce.origin, "number", header.Number, "hash", header.Hash()) + f.forgetHash(hash) + } + } else { + // BlockFetcher doesn't know about it, add to the return list + unknown = append(unknown, header) + } + } + headerFilterOutMeter.Mark(int64(len(unknown))) + select { + case filter <- &headerFilterTask{headers: unknown, time: task.time}: + case <-f.quit: + return + } + // Schedule the retrieved headers for body completion + for _, announce := range incomplete { + hash := announce.header.Hash() + if _, ok := f.completing[hash]; ok { + continue + } + f.fetched[hash] = append(f.fetched[hash], announce) + if len(f.fetched) == 1 { + f.rescheduleComplete(completeTimer) + } + } + // Schedule the header for light fetcher import + for _, announce := range lightHeaders { + f.enqueue(announce.origin, announce.header, nil) + } + // Schedule the header-only blocks for import + for _, block := range complete { + if announce := f.completing[block.Hash()]; announce != nil { + f.enqueue(announce.origin, nil, block) + } + } + + case filter := <-f.bodyFilter: + // Block bodies arrived, extract any explicitly requested blocks, return the rest + var task *bodyFilterTask + select { + case task = <-filter: + case <-f.quit: + return + } + bodyFilterInMeter.Mark(int64(len(task.transactions))) + blocks := []*types.Block{} + // abort early if there's nothing explicitly requested + if len(f.completing) > 0 { + for i := 0; i < len(task.transactions) && i < len(task.uncles); i++ { + // Match up a body to any possible completion request + var ( + matched = false + uncleHash common.Hash // calculated lazily and reused + txnHash common.Hash // calculated lazily and reused + ) + for hash, announce := range f.completing { + if f.queued[hash] != nil || announce.origin != task.peer { + continue + } + if uncleHash == (common.Hash{}) { + uncleHash = types.CalcUncleHash(task.uncles[i]) + } + if uncleHash != announce.header.UncleHash { + continue + } + if txnHash == (common.Hash{}) { + txnHash = types.DeriveSha(types.Transactions(task.transactions[i]), trie.NewStackTrie(nil)) + } + if txnHash != announce.header.TxHash { + continue + } + // Mark the body matched, reassemble if still unknown + matched = true + if f.getBlock(hash) == nil { + block := types.NewBlockWithHeader(announce.header).WithBody(task.transactions[i], task.uncles[i]) + block.ReceivedAt = task.time + blocks = append(blocks, block) + } else { + f.forgetHash(hash) + } + } + if matched { + task.transactions = append(task.transactions[:i], task.transactions[i+1:]...) + task.uncles = append(task.uncles[:i], task.uncles[i+1:]...) + i-- + continue + } + } + } + bodyFilterOutMeter.Mark(int64(len(task.transactions))) + select { + case filter <- task: + case <-f.quit: + return + } + // Schedule the retrieved blocks for ordered import + for _, block := range blocks { + if announce := f.completing[block.Hash()]; announce != nil { + f.enqueue(announce.origin, nil, block) + } + } + } + } +} + +// rescheduleFetch resets the specified fetch timer to the next blockAnnounce timeout. +func (f *BlockFetcher) rescheduleFetch(fetch *time.Timer) { + // Short circuit if no blocks are announced + if len(f.announced) == 0 { + return + } + // Schedule announcement retrieval quickly for light mode + // since server won't send any headers to client. + if f.light { + fetch.Reset(lightTimeout) + return + } + // Otherwise find the earliest expiring announcement + earliest := time.Now() + for _, announces := range f.announced { + if earliest.After(announces[0].time) { + earliest = announces[0].time + } + } + fetch.Reset(arriveTimeout - time.Since(earliest)) +} + +// rescheduleComplete resets the specified completion timer to the next fetch timeout. +func (f *BlockFetcher) rescheduleComplete(complete *time.Timer) { + // Short circuit if no headers are fetched + if len(f.fetched) == 0 { + return + } + // Otherwise find the earliest expiring announcement + earliest := time.Now() + for _, announces := range f.fetched { + if earliest.After(announces[0].time) { + earliest = announces[0].time + } + } + complete.Reset(gatherSlack - time.Since(earliest)) +} + +// enqueue schedules a new header or block import operation, if the component +// to be imported has not yet been seen. +func (f *BlockFetcher) enqueue(peer string, header *types.Header, block *types.Block) { + var ( + hash common.Hash + number uint64 + ) + if header != nil { + hash, number = header.Hash(), header.Number.Uint64() + } else { + hash, number = block.Hash(), block.NumberU64() + } + // Ensure the peer isn't DOSing us + count := f.queues[peer] + 1 + if count > blockLimit { + log.Debug("Discarded delivered header or block, exceeded allowance", "peer", peer, "number", number, "hash", hash, "limit", blockLimit) + blockBroadcastDOSMeter.Mark(1) + f.forgetHash(hash) + return + } + // Discard any past or too distant blocks + if dist := int64(number) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { + log.Debug("Discarded delivered header or block, too far away", "peer", peer, "number", number, "hash", hash, "distance", dist) + blockBroadcastDropMeter.Mark(1) + f.forgetHash(hash) + return + } + // Schedule the block for future importing + if _, ok := f.queued[hash]; !ok { + op := &blockOrHeaderInject{origin: peer} + if header != nil { + op.header = header + } else { + op.block = block + } + f.queues[peer] = count + f.queued[hash] = op + f.queue.Push(op, -int64(number)) + if f.queueChangeHook != nil { + f.queueChangeHook(hash, true) + } + log.Debug("Queued delivered header or block", "peer", peer, "number", number, "hash", hash, "queued", f.queue.Size()) + } +} + +// importHeaders spawns a new goroutine to run a header insertion into the chain. +// If the header's number is at the same height as the current import phase, it +// updates the phase states accordingly. +func (f *BlockFetcher) importHeaders(peer string, header *types.Header) { + hash := header.Hash() + log.Debug("Importing propagated header", "peer", peer, "number", header.Number, "hash", hash) + + go func() { + defer func() { f.done <- hash }() + // If the parent's unknown, abort insertion + parent := f.getHeader(header.ParentHash) + if parent == nil { + log.Debug("Unknown parent of propagated header", "peer", peer, "number", header.Number, "hash", hash, "parent", header.ParentHash) + return + } + // Validate the header and if something went wrong, drop the peer + if err := f.verifyHeader(header); err != nil && err != consensus.ErrFutureBlock { + log.Debug("Propagated header verification failed", "peer", peer, "number", header.Number, "hash", hash, "err", err) + f.dropPeer(peer) + return + } + // Run the actual import and log any issues + if _, err := f.insertHeaders([]*types.Header{header}); err != nil { + log.Debug("Propagated header import failed", "peer", peer, "number", header.Number, "hash", hash, "err", err) + return + } + // Invoke the testing hook if needed + if f.importedHook != nil { + f.importedHook(header, nil) + } + }() +} + +// importBlocks spawns a new goroutine to run a block insertion into the chain. If the +// block's number is at the same height as the current import phase, it updates +// the phase states accordingly. +func (f *BlockFetcher) importBlocks(peer string, block *types.Block) { + hash := block.Hash() + + // Run the import on a new thread + log.Debug("Importing propagated block", "peer", peer, "number", block.Number(), "hash", hash) + go func() { + defer func() { f.done <- hash }() + + // If the parent's unknown, abort insertion + parent := f.getBlock(block.ParentHash()) + if parent == nil { + log.Debug("Unknown parent of propagated block", "peer", peer, "number", block.Number(), "hash", hash, "parent", block.ParentHash()) + return + } + // Quickly validate the header and propagate the block if it passes + switch err := f.verifyHeader(block.Header()); err { + case nil: + // All ok, quickly propagate to our peers + blockBroadcastOutTimer.UpdateSince(block.ReceivedAt) + go f.broadcastBlock(block, true) + + case consensus.ErrFutureBlock: + // Weird future block, don't fail, but neither propagate + + default: + // Something went very wrong, drop the peer + log.Debug("Propagated block verification failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) + f.dropPeer(peer) + return + } + // Run the actual import and log any issues + if _, err := f.insertChain(types.Blocks{block}); err != nil { + log.Debug("Propagated block import failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) + return + } + // If import succeeded, broadcast the block + blockAnnounceOutTimer.UpdateSince(block.ReceivedAt) + go f.broadcastBlock(block, false) + + // Invoke the testing hook if needed + if f.importedHook != nil { + f.importedHook(nil, block) + } + }() +} + +// forgetHash removes all traces of a block announcement from the fetcher's +// internal state. +func (f *BlockFetcher) forgetHash(hash common.Hash) { + // Remove all pending announces and decrement DOS counters + if announceMap, ok := f.announced[hash]; ok { + for _, announce := range announceMap { + f.announces[announce.origin]-- + if f.announces[announce.origin] <= 0 { + delete(f.announces, announce.origin) + } + } + delete(f.announced, hash) + if f.announceChangeHook != nil { + f.announceChangeHook(hash, false) + } + } + // 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 { + delete(f.announces, announce.origin) + } + delete(f.fetching, 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 { + delete(f.announces, announce.origin) + } + } + delete(f.fetched, 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 { + delete(f.announces, announce.origin) + } + delete(f.completing, hash) + } +} + +// forgetBlock removes all traces of a queued block from the fetcher's internal +// state. +func (f *BlockFetcher) forgetBlock(hash common.Hash) { + if insert := f.queued[hash]; insert != nil { + f.queues[insert.origin]-- + if f.queues[insert.origin] == 0 { + delete(f.queues, insert.origin) + } + delete(f.queued, hash) + } +} diff --git a/eth/fetcher/block_fetcher_test.go b/eth/fetcher/block_fetcher_test.go new file mode 100644 index 00000000..bf794695 --- /dev/null +++ b/eth/fetcher/block_fetcher_test.go @@ -0,0 +1,947 @@ +// 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 fetcher + +import ( + "errors" + "math/big" + "sync" + "sync/atomic" + "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/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + testdb = rawdb.NewMemoryDatabase() + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddress = crypto.PubkeyToAddress(testKey.PublicKey) + gspec = core.Genesis{ + Alloc: core.GenesisAlloc{testAddress: {Balance: big.NewInt(1000000000000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(testdb) + unknownBlock = types.NewBlock(&types.Header{GasLimit: params.GenesisGasLimit, BaseFee: big.NewInt(params.InitialBaseFee)}, nil, nil, nil, trie.NewStackTrie(nil)) +) + +// makeChain creates a chain of n blocks starting at and including parent. +// the returned hash chain is ordered head->parent. In addition, every 3rd block +// contains a transaction and every 5th an uncle to allow testing correct block +// reassembly. +func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common.Hash]*types.Block) { + blocks, _ := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testdb, n, func(i int, block *core.BlockGen) { + block.SetCoinbase(common.Address{seed}) + + // If the block number is multiple of 3, send a bonus transaction to the miner + if parent == genesis && i%3 == 0 { + signer := types.MakeSigner(params.TestChainConfig, block.Number()) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) + if err != nil { + panic(err) + } + block.AddTx(tx) + } + // If the block number is a multiple of 5, add a bonus uncle to the block + if i > 0 && i%5 == 0 { + block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 2).Hash(), Number: big.NewInt(int64(i - 1))}) + } + }) + hashes := make([]common.Hash, n+1) + hashes[len(hashes)-1] = parent.Hash() + blockm := make(map[common.Hash]*types.Block, n+1) + blockm[parent.Hash()] = parent + for i, b := range blocks { + hashes[len(hashes)-i-2] = b.Hash() + blockm[b.Hash()] = b + } + return hashes, blockm +} + +// fetcherTester is a test simulator for mocking out local block chain. +type fetcherTester struct { + fetcher *BlockFetcher + + hashes []common.Hash // Hash chain belonging to the tester + headers map[common.Hash]*types.Header // Headers belonging to the tester + blocks map[common.Hash]*types.Block // Blocks belonging to the tester + drops map[string]bool // Map of peers dropped by the fetcher + + lock sync.RWMutex +} + +// newTester creates a new fetcher test mocker. +func newTester(light bool) *fetcherTester { + tester := &fetcherTester{ + hashes: []common.Hash{genesis.Hash()}, + headers: map[common.Hash]*types.Header{genesis.Hash(): genesis.Header()}, + blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, + drops: make(map[string]bool), + } + tester.fetcher = NewBlockFetcher(light, tester.getHeader, tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertHeaders, tester.insertChain, tester.dropPeer) + tester.fetcher.Start() + + return tester +} + +// getHeader retrieves a header from the tester's block chain. +func (f *fetcherTester) getHeader(hash common.Hash) *types.Header { + f.lock.RLock() + defer f.lock.RUnlock() + + return f.headers[hash] +} + +// getBlock retrieves a block from the tester's block chain. +func (f *fetcherTester) getBlock(hash common.Hash) *types.Block { + f.lock.RLock() + defer f.lock.RUnlock() + + return f.blocks[hash] +} + +// verifyHeader is a nop placeholder for the block header verification. +func (f *fetcherTester) verifyHeader(header *types.Header) error { + return nil +} + +// broadcastBlock is a nop placeholder for the block broadcasting. +func (f *fetcherTester) broadcastBlock(block *types.Block, propagate bool) { +} + +// chainHeight retrieves the current height (block number) of the chain. +func (f *fetcherTester) chainHeight() uint64 { + f.lock.RLock() + defer f.lock.RUnlock() + + if f.fetcher.light { + return f.headers[f.hashes[len(f.hashes)-1]].Number.Uint64() + } + return f.blocks[f.hashes[len(f.hashes)-1]].NumberU64() +} + +// insertChain injects a new headers into the simulated chain. +func (f *fetcherTester) insertHeaders(headers []*types.Header) (int, error) { + f.lock.Lock() + defer f.lock.Unlock() + + for i, header := range headers { + // Make sure the parent in known + if _, ok := f.headers[header.ParentHash]; !ok { + return i, errors.New("unknown parent") + } + // Discard any new blocks if the same height already exists + if header.Number.Uint64() <= f.headers[f.hashes[len(f.hashes)-1]].Number.Uint64() { + return i, nil + } + // Otherwise build our current chain + f.hashes = append(f.hashes, header.Hash()) + f.headers[header.Hash()] = header + } + return 0, nil +} + +// insertChain injects a new blocks into the simulated chain. +func (f *fetcherTester) insertChain(blocks types.Blocks) (int, error) { + f.lock.Lock() + defer f.lock.Unlock() + + for i, block := range blocks { + // Make sure the parent in known + if _, ok := f.blocks[block.ParentHash()]; !ok { + return i, errors.New("unknown parent") + } + // Discard any new blocks if the same height already exists + if block.NumberU64() <= f.blocks[f.hashes[len(f.hashes)-1]].NumberU64() { + return i, nil + } + // Otherwise build our current chain + f.hashes = append(f.hashes, block.Hash()) + f.blocks[block.Hash()] = block + } + return 0, nil +} + +// dropPeer is an emulator for the peer removal, simply accumulating the various +// peers dropped by the fetcher. +func (f *fetcherTester) dropPeer(peer string) { + f.lock.Lock() + defer f.lock.Unlock() + + f.drops[peer] = true +} + +// makeHeaderFetcher retrieves a block header fetcher associated with a simulated peer. +func (f *fetcherTester) makeHeaderFetcher(peer string, blocks map[common.Hash]*types.Block, drift time.Duration) headerRequesterFn { + closure := make(map[common.Hash]*types.Block) + for hash, block := range blocks { + closure[hash] = block + } + // Create a function that return a header from the closure + return func(hash common.Hash, sink chan *eth.Response) (*eth.Request, error) { + // Gather the blocks to return + headers := make([]*types.Header, 0, 1) + if block, ok := closure[hash]; ok { + headers = append(headers, block.Header()) + } + // Return on a new thread + req := ð.Request{ + Peer: peer, + } + res := ð.Response{ + Req: req, + Res: (*eth.BlockHeadersPacket)(&headers), + Time: drift, + Done: make(chan error, 1), // Ignore the returned status + } + go func() { + sink <- res + }() + return req, nil + } +} + +// makeBodyFetcher retrieves a block body fetcher associated with a simulated peer. +func (f *fetcherTester) makeBodyFetcher(peer string, blocks map[common.Hash]*types.Block, drift time.Duration) bodyRequesterFn { + closure := make(map[common.Hash]*types.Block) + for hash, block := range blocks { + closure[hash] = block + } + // Create a function that returns blocks from the closure + return func(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { + // Gather the block bodies to return + transactions := make([][]*types.Transaction, 0, len(hashes)) + uncles := make([][]*types.Header, 0, len(hashes)) + + for _, hash := range hashes { + if block, ok := closure[hash]; ok { + transactions = append(transactions, block.Transactions()) + uncles = append(uncles, block.Uncles()) + } + } + // Return on a new thread + bodies := make([]*eth.BlockBody, len(transactions)) + for i, txs := range transactions { + bodies[i] = ð.BlockBody{ + Transactions: txs, + Uncles: uncles[i], + } + } + req := ð.Request{ + Peer: peer, + } + res := ð.Response{ + Req: req, + Res: (*eth.BlockBodiesPacket)(&bodies), + Time: drift, + Done: make(chan error, 1), // Ignore the returned status + } + go func() { + sink <- res + }() + return req, nil + } +} + +// verifyFetchingEvent verifies that one single event arrive on a fetching channel. +func verifyFetchingEvent(t *testing.T, fetching chan []common.Hash, arrive bool) { + t.Helper() + + if arrive { + select { + case <-fetching: + case <-time.After(time.Second): + t.Fatalf("fetching timeout") + } + } else { + select { + case <-fetching: + t.Fatalf("fetching invoked") + case <-time.After(10 * time.Millisecond): + } + } +} + +// verifyCompletingEvent verifies that one single event arrive on an completing channel. +func verifyCompletingEvent(t *testing.T, completing chan []common.Hash, arrive bool) { + t.Helper() + + if arrive { + select { + case <-completing: + case <-time.After(time.Second): + t.Fatalf("completing timeout") + } + } else { + select { + case <-completing: + t.Fatalf("completing invoked") + case <-time.After(10 * time.Millisecond): + } + } +} + +// verifyImportEvent verifies that one single event arrive on an import channel. +func verifyImportEvent(t *testing.T, imported chan interface{}, arrive bool) { + t.Helper() + + if arrive { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("import timeout") + } + } else { + select { + case <-imported: + t.Fatalf("import invoked") + case <-time.After(20 * time.Millisecond): + } + } +} + +// verifyImportCount verifies that exactly count number of events arrive on an +// import hook channel. +func verifyImportCount(t *testing.T, imported chan interface{}, count int) { + t.Helper() + + for i := 0; i < count; i++ { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", i+1) + } + } + verifyImportDone(t, imported) +} + +// verifyImportDone verifies that no more events are arriving on an import channel. +func verifyImportDone(t *testing.T, imported chan interface{}) { + t.Helper() + + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): + } +} + +// verifyChainHeight verifies the chain height is as expected. +func verifyChainHeight(t *testing.T, fetcher *fetcherTester, height uint64) { + t.Helper() + + if fetcher.chainHeight() != height { + t.Fatalf("chain height mismatch, got %d, want %d", fetcher.chainHeight(), height) + } +} + +// Tests that a fetcher accepts block/header announcements and initiates retrievals +// for them, successfully importing into the local chain. +func TestFullSequentialAnnouncements(t *testing.T) { testSequentialAnnouncements(t, false) } +func TestLightSequentialAnnouncements(t *testing.T) { testSequentialAnnouncements(t, true) } + +func testSequentialAnnouncements(t *testing.T, light bool) { + // Create a chain of blocks to import + targetBlocks := 4 * hashLimit + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + tester := newTester(light) + defer tester.fetcher.Stop() + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + // Iteratively announce blocks until all are imported + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } + for i := len(hashes) - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + verifyImportEvent(t, imported, true) + } + verifyImportDone(t, imported) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) +} + +// Tests that if blocks are announced by multiple peers (or even the same buggy +// peer), they will only get downloaded at most once. +func TestFullConcurrentAnnouncements(t *testing.T) { testConcurrentAnnouncements(t, false) } +func TestLightConcurrentAnnouncements(t *testing.T) { testConcurrentAnnouncements(t, true) } + +func testConcurrentAnnouncements(t *testing.T, light bool) { + // Create a chain of blocks to import + targetBlocks := 4 * hashLimit + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + // Assemble a tester with a built in counter for the requests + tester := newTester(light) + firstHeaderFetcher := tester.makeHeaderFetcher("first", blocks, -gatherSlack) + firstBodyFetcher := tester.makeBodyFetcher("first", blocks, 0) + secondHeaderFetcher := tester.makeHeaderFetcher("second", blocks, -gatherSlack) + secondBodyFetcher := tester.makeBodyFetcher("second", blocks, 0) + + counter := uint32(0) + firstHeaderWrapper := func(hash common.Hash, sink chan *eth.Response) (*eth.Request, error) { + atomic.AddUint32(&counter, 1) + return firstHeaderFetcher(hash, sink) + } + secondHeaderWrapper := func(hash common.Hash, sink chan *eth.Response) (*eth.Request, error) { + atomic.AddUint32(&counter, 1) + return secondHeaderFetcher(hash, sink) + } + // Iteratively announce blocks until all are imported + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } + for i := len(hashes) - 2; i >= 0; i-- { + tester.fetcher.Notify("first", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), firstHeaderWrapper, firstBodyFetcher) + tester.fetcher.Notify("second", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout+time.Millisecond), secondHeaderWrapper, secondBodyFetcher) + tester.fetcher.Notify("second", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout-time.Millisecond), secondHeaderWrapper, secondBodyFetcher) + verifyImportEvent(t, imported, true) + } + verifyImportDone(t, imported) + + // Make sure no blocks were retrieved twice + if int(counter) != targetBlocks { + t.Fatalf("retrieval count mismatch: have %v, want %v", counter, targetBlocks) + } + verifyChainHeight(t, tester, uint64(len(hashes)-1)) +} + +// Tests that announcements arriving while a previous is being fetched still +// results in a valid import. +func TestFullOverlappingAnnouncements(t *testing.T) { testOverlappingAnnouncements(t, false) } +func TestLightOverlappingAnnouncements(t *testing.T) { testOverlappingAnnouncements(t, true) } + +func testOverlappingAnnouncements(t *testing.T, light bool) { + // Create a chain of blocks to import + targetBlocks := 4 * hashLimit + hashes, blocks := makeChain(targetBlocks, 0, genesis) + + tester := newTester(light) + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + // Iteratively announce blocks, but overlap them continuously + overlap := 16 + imported := make(chan interface{}, len(hashes)-1) + for i := 0; i < overlap; i++ { + imported <- nil + } + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } + + for i := len(hashes) - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("block %d: import timeout", len(hashes)-i) + } + } + // Wait for all the imports to complete and check count + verifyImportCount(t, imported, overlap) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) +} + +// Tests that announces already being retrieved will not be duplicated. +func TestFullPendingDeduplication(t *testing.T) { testPendingDeduplication(t, false) } +func TestLightPendingDeduplication(t *testing.T) { testPendingDeduplication(t, true) } + +func testPendingDeduplication(t *testing.T, light bool) { + // Create a hash and corresponding block + hashes, blocks := makeChain(1, 0, genesis) + + // Assemble a tester with a built in counter and delayed fetcher + tester := newTester(light) + headerFetcher := tester.makeHeaderFetcher("repeater", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("repeater", blocks, 0) + + delay := 50 * time.Millisecond + counter := uint32(0) + headerWrapper := func(hash common.Hash, sink chan *eth.Response) (*eth.Request, error) { + atomic.AddUint32(&counter, 1) + + // Simulate a long running fetch + resink := make(chan *eth.Response) + req, err := headerFetcher(hash, resink) + if err == nil { + go func() { + res := <-resink + time.Sleep(delay) + sink <- res + }() + } + return req, err + } + checkNonExist := func() bool { + return tester.getBlock(hashes[0]) == nil + } + if light { + checkNonExist = func() bool { + return tester.getHeader(hashes[0]) == nil + } + } + // Announce the same block many times until it's fetched (wait for any pending ops) + for checkNonExist() { + tester.fetcher.Notify("repeater", hashes[0], 1, time.Now().Add(-arriveTimeout), headerWrapper, bodyFetcher) + time.Sleep(time.Millisecond) + } + time.Sleep(delay) + + // Check that all blocks were imported and none fetched twice + if int(counter) != 1 { + t.Fatalf("retrieval count mismatch: have %v, want %v", counter, 1) + } + verifyChainHeight(t, tester, 1) +} + +// Tests that announcements retrieved in a random order are cached and eventually +// imported when all the gaps are filled in. +func TestFullRandomArrivalImport(t *testing.T) { testRandomArrivalImport(t, false) } +func TestLightRandomArrivalImport(t *testing.T) { testRandomArrivalImport(t, true) } + +func testRandomArrivalImport(t *testing.T, light bool) { + // Create a chain of blocks to import, and choose one to delay + targetBlocks := maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + skip := targetBlocks / 2 + + tester := newTester(light) + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + // Iteratively announce blocks, skipping one entry + imported := make(chan interface{}, len(hashes)-1) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } + for i := len(hashes) - 1; i >= 0; i-- { + if i != skip { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + time.Sleep(time.Millisecond) + } + } + // Finally announce the skipped entry and check full import + tester.fetcher.Notify("valid", hashes[skip], uint64(len(hashes)-skip-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + verifyImportCount(t, imported, len(hashes)-1) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) +} + +// Tests that direct block enqueues (due to block propagation vs. hash announce) +// are correctly schedule, filling and import queue gaps. +func TestQueueGapFill(t *testing.T) { + // Create a chain of blocks to import, and choose one to not announce at all + targetBlocks := maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + skip := targetBlocks / 2 + + tester := newTester(false) + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + // Iteratively announce blocks, skipping one entry + imported := make(chan interface{}, len(hashes)-1) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } + + for i := len(hashes) - 1; i >= 0; i-- { + if i != skip { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + time.Sleep(time.Millisecond) + } + } + // Fill the missing block directly as if propagated + tester.fetcher.Enqueue("valid", blocks[hashes[skip]]) + verifyImportCount(t, imported, len(hashes)-1) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) +} + +// Tests that blocks arriving from various sources (multiple propagations, hash +// announces, etc) do not get scheduled for import multiple times. +func TestImportDeduplication(t *testing.T) { + // Create two blocks to import (one for duplication, the other for stalling) + hashes, blocks := makeChain(2, 0, genesis) + + // Create the tester and wrap the importer with a counter + tester := newTester(false) + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + counter := uint32(0) + tester.fetcher.insertChain = func(blocks types.Blocks) (int, error) { + atomic.AddUint32(&counter, uint32(len(blocks))) + return tester.insertChain(blocks) + } + // Instrument the fetching and imported events + fetching := make(chan []common.Hash) + imported := make(chan interface{}, len(hashes)-1) + tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- hashes } + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } + + // Announce the duplicating block, wait for retrieval, and also propagate directly + tester.fetcher.Notify("valid", hashes[0], 1, time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + <-fetching + + tester.fetcher.Enqueue("valid", blocks[hashes[0]]) + tester.fetcher.Enqueue("valid", blocks[hashes[0]]) + tester.fetcher.Enqueue("valid", blocks[hashes[0]]) + + // Fill the missing block directly as if propagated, and check import uniqueness + tester.fetcher.Enqueue("valid", blocks[hashes[1]]) + verifyImportCount(t, imported, 2) + + if counter != 2 { + t.Fatalf("import invocation count mismatch: have %v, want %v", counter, 2) + } +} + +// Tests that blocks with numbers much lower or higher than out current head get +// discarded to prevent wasting resources on useless blocks from faulty peers. +func TestDistantPropagationDiscarding(t *testing.T) { + // Create a long chain to import and define the discard boundaries + hashes, blocks := makeChain(3*maxQueueDist, 0, genesis) + head := hashes[len(hashes)/2] + + low, high := len(hashes)/2+maxUncleDist+1, len(hashes)/2-maxQueueDist-1 + + // Create a tester and simulate a head block being the middle of the above chain + tester := newTester(false) + + tester.lock.Lock() + tester.hashes = []common.Hash{head} + tester.blocks = map[common.Hash]*types.Block{head: blocks[head]} + tester.lock.Unlock() + + // Ensure that a block with a lower number than the threshold is discarded + tester.fetcher.Enqueue("lower", blocks[hashes[low]]) + time.Sleep(10 * time.Millisecond) + if !tester.fetcher.queue.Empty() { + t.Fatalf("fetcher queued stale block") + } + // Ensure that a block with a higher number than the threshold is discarded + tester.fetcher.Enqueue("higher", blocks[hashes[high]]) + time.Sleep(10 * time.Millisecond) + if !tester.fetcher.queue.Empty() { + t.Fatalf("fetcher queued future block") + } +} + +// Tests that announcements with numbers much lower or higher than out current +// head get discarded to prevent wasting resources on useless blocks from faulty +// peers. +func TestFullDistantAnnouncementDiscarding(t *testing.T) { testDistantAnnouncementDiscarding(t, false) } +func TestLightDistantAnnouncementDiscarding(t *testing.T) { testDistantAnnouncementDiscarding(t, true) } + +func testDistantAnnouncementDiscarding(t *testing.T, light bool) { + // Create a long chain to import and define the discard boundaries + hashes, blocks := makeChain(3*maxQueueDist, 0, genesis) + head := hashes[len(hashes)/2] + + low, high := len(hashes)/2+maxUncleDist+1, len(hashes)/2-maxQueueDist-1 + + // Create a tester and simulate a head block being the middle of the above chain + tester := newTester(light) + + tester.lock.Lock() + tester.hashes = []common.Hash{head} + tester.headers = map[common.Hash]*types.Header{head: blocks[head].Header()} + tester.blocks = map[common.Hash]*types.Block{head: blocks[head]} + tester.lock.Unlock() + + headerFetcher := tester.makeHeaderFetcher("lower", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("lower", blocks, 0) + + fetching := make(chan struct{}, 2) + tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- struct{}{} } + + // Ensure that a block with a lower number than the threshold is discarded + tester.fetcher.Notify("lower", hashes[low], blocks[hashes[low]].NumberU64(), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + select { + case <-time.After(50 * time.Millisecond): + case <-fetching: + t.Fatalf("fetcher requested stale header") + } + // Ensure that a block with a higher number than the threshold is discarded + tester.fetcher.Notify("higher", hashes[high], blocks[hashes[high]].NumberU64(), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + select { + case <-time.After(50 * time.Millisecond): + case <-fetching: + t.Fatalf("fetcher requested future header") + } +} + +// Tests that peers announcing blocks with invalid numbers (i.e. not matching +// the headers provided afterwards) get dropped as malicious. +func TestFullInvalidNumberAnnouncement(t *testing.T) { testInvalidNumberAnnouncement(t, false) } +func TestLightInvalidNumberAnnouncement(t *testing.T) { testInvalidNumberAnnouncement(t, true) } + +func testInvalidNumberAnnouncement(t *testing.T, light bool) { + // Create a single block to import and check numbers against + hashes, blocks := makeChain(1, 0, genesis) + + tester := newTester(light) + badHeaderFetcher := tester.makeHeaderFetcher("bad", blocks, -gatherSlack) + badBodyFetcher := tester.makeBodyFetcher("bad", blocks, 0) + + imported := make(chan interface{}) + announced := make(chan interface{}, 2) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } + // Announce a block with a bad number, check for immediate drop + tester.fetcher.announceChangeHook = func(hash common.Hash, b bool) { + announced <- nil + } + tester.fetcher.Notify("bad", hashes[0], 2, time.Now().Add(-arriveTimeout), badHeaderFetcher, badBodyFetcher) + verifyAnnounce := func() { + for i := 0; i < 2; i++ { + select { + case <-announced: + continue + case <-time.After(1 * time.Second): + t.Fatal("announce timeout") + return + } + } + } + verifyAnnounce() + verifyImportEvent(t, imported, false) + tester.lock.RLock() + dropped := tester.drops["bad"] + tester.lock.RUnlock() + + if !dropped { + t.Fatalf("peer with invalid numbered announcement not dropped") + } + goodHeaderFetcher := tester.makeHeaderFetcher("good", blocks, -gatherSlack) + goodBodyFetcher := tester.makeBodyFetcher("good", blocks, 0) + // Make sure a good announcement passes without a drop + tester.fetcher.Notify("good", hashes[0], 1, time.Now().Add(-arriveTimeout), goodHeaderFetcher, goodBodyFetcher) + verifyAnnounce() + verifyImportEvent(t, imported, true) + + tester.lock.RLock() + dropped = tester.drops["good"] + tester.lock.RUnlock() + + if dropped { + t.Fatalf("peer with valid numbered announcement dropped") + } + verifyImportDone(t, imported) +} + +// Tests that if a block is empty (i.e. header only), no body request should be +// made, and instead the header should be assembled into a whole block in itself. +func TestEmptyBlockShortCircuit(t *testing.T) { + // Create a chain of blocks to import + hashes, blocks := makeChain(32, 0, genesis) + + tester := newTester(false) + defer tester.fetcher.Stop() + headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + // Add a monitoring hook for all internal events + fetching := make(chan []common.Hash) + tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- hashes } + + completing := make(chan []common.Hash) + tester.fetcher.completingHook = func(hashes []common.Hash) { completing <- hashes } + + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + // Iteratively announce blocks until all are imported + for i := len(hashes) - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) + + // All announces should fetch the header + verifyFetchingEvent(t, fetching, true) + + // Only blocks with data contents should request bodies + verifyCompletingEvent(t, completing, len(blocks[hashes[i]].Transactions()) > 0 || len(blocks[hashes[i]].Uncles()) > 0) + + // Irrelevant of the construct, import should succeed + verifyImportEvent(t, imported, true) + } + verifyImportDone(t, imported) +} + +// Tests that a peer is unable to use unbounded memory with sending infinite +// block announcements to a node, but that even in the face of such an attack, +// the fetcher remains operational. +func TestHashMemoryExhaustionAttack(t *testing.T) { + // Create a tester with instrumented import hooks + tester := newTester(false) + + imported, announces := make(chan interface{}), int32(0) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } + tester.fetcher.announceChangeHook = func(hash common.Hash, added bool) { + if added { + atomic.AddInt32(&announces, 1) + } else { + atomic.AddInt32(&announces, -1) + } + } + // Create a valid chain and an infinite junk chain + targetBlocks := hashLimit + 2*maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + validHeaderFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) + validBodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) + + attack, _ := makeChain(targetBlocks, 0, unknownBlock) + attackerHeaderFetcher := tester.makeHeaderFetcher("attacker", nil, -gatherSlack) + attackerBodyFetcher := tester.makeBodyFetcher("attacker", nil, 0) + + // Feed the tester a huge hashset from the attacker, and a limited from the valid peer + for i := 0; i < len(attack); i++ { + if i < maxQueueDist { + tester.fetcher.Notify("valid", hashes[len(hashes)-2-i], uint64(i+1), time.Now(), validHeaderFetcher, validBodyFetcher) + } + tester.fetcher.Notify("attacker", attack[i], 1 /* don't distance drop */, time.Now(), attackerHeaderFetcher, attackerBodyFetcher) + } + if count := atomic.LoadInt32(&announces); count != hashLimit+maxQueueDist { + t.Fatalf("queued announce count mismatch: have %d, want %d", count, hashLimit+maxQueueDist) + } + // Wait for fetches to complete + verifyImportCount(t, imported, maxQueueDist) + + // Feed the remaining valid hashes to ensure DOS protection state remains clean + for i := len(hashes) - maxQueueDist - 2; i >= 0; i-- { + tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), validHeaderFetcher, validBodyFetcher) + verifyImportEvent(t, imported, true) + } + verifyImportDone(t, imported) +} + +// Tests that blocks sent to the fetcher (either through propagation or via hash +// announces and retrievals) don't pile up indefinitely, exhausting available +// system memory. +func TestBlockMemoryExhaustionAttack(t *testing.T) { + // Create a tester with instrumented import hooks + tester := newTester(false) + + imported, enqueued := make(chan interface{}), int32(0) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } + tester.fetcher.queueChangeHook = func(hash common.Hash, added bool) { + if added { + atomic.AddInt32(&enqueued, 1) + } else { + atomic.AddInt32(&enqueued, -1) + } + } + // Create a valid chain and a batch of dangling (but in range) blocks + targetBlocks := hashLimit + 2*maxQueueDist + hashes, blocks := makeChain(targetBlocks, 0, genesis) + attack := make(map[common.Hash]*types.Block) + for i := byte(0); len(attack) < blockLimit+2*maxQueueDist; i++ { + hashes, blocks := makeChain(maxQueueDist-1, i, unknownBlock) + for _, hash := range hashes[:maxQueueDist-2] { + attack[hash] = blocks[hash] + } + } + // Try to feed all the attacker blocks make sure only a limited batch is accepted + for _, block := range attack { + tester.fetcher.Enqueue("attacker", block) + } + time.Sleep(200 * time.Millisecond) + if queued := atomic.LoadInt32(&enqueued); queued != blockLimit { + t.Fatalf("queued block count mismatch: have %d, want %d", queued, blockLimit) + } + // Queue up a batch of valid blocks, and check that a new peer is allowed to do so + for i := 0; i < maxQueueDist-1; i++ { + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-3-i]]) + } + time.Sleep(100 * time.Millisecond) + if queued := atomic.LoadInt32(&enqueued); queued != blockLimit+maxQueueDist-1 { + t.Fatalf("queued block count mismatch: have %d, want %d", queued, blockLimit+maxQueueDist-1) + } + // Insert the missing piece (and sanity check the import) + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2]]) + verifyImportCount(t, imported, maxQueueDist) + + // Insert the remaining blocks in chunks to ensure clean DOS protection + for i := maxQueueDist; i < len(hashes)-1; i++ { + tester.fetcher.Enqueue("valid", blocks[hashes[len(hashes)-2-i]]) + verifyImportEvent(t, imported, true) + } + verifyImportDone(t, imported) +} diff --git a/eth/fetcher/metrics.go b/eth/fetcher/metrics.go deleted file mode 100644 index 896a5b87..00000000 --- a/eth/fetcher/metrics.go +++ /dev/null @@ -1,43 +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 . - -// Contains the metrics collected by the fetcher. - -package fetcher - -import ( - "github.com/cryptoecc/ETH-ECC/metrics" -) - -var ( - propAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/in", nil) - propAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/announces/out", nil) - propAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/drop", nil) - propAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/dos", nil) - - propBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/in", nil) - propBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/broadcasts/out", nil) - propBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/drop", nil) - propBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/dos", nil) - - headerFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/headers", nil) - bodyFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/bodies", nil) - - headerFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/headers/in", nil) - headerFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/headers/out", nil) - bodyFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/bodies/in", nil) - bodyFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/bodies/out", nil) -) diff --git a/eth/fetcher/tx_fetcher.go b/eth/fetcher/tx_fetcher.go new file mode 100644 index 00000000..035e0c2e --- /dev/null +++ b/eth/fetcher/tx_fetcher.go @@ -0,0 +1,893 @@ +// 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 fetcher + +import ( + "bytes" + "errors" + "fmt" + mrand "math/rand" + "sort" + "time" + + mapset "github.com/deckarep/golang-set" + "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/log" + "github.com/ethereum/go-ethereum/metrics" +) + +const ( + // maxTxAnnounces is the maximum number of unique transaction a peer + // can announce in a short time. + maxTxAnnounces = 4096 + + // maxTxRetrievals is the maximum transaction number can be fetched in one + // request. The rationale to pick 256 is: + // - In eth protocol, the softResponseLimit is 2MB. Nowadays according to + // Etherscan the average transaction size is around 200B, so in theory + // we can include lots of transaction in a single protocol packet. + // - However the maximum size of a single transaction is raised to 128KB, + // so pick a middle value here to ensure we can maximize the efficiency + // of the retrieval and response size overflow won't happen in most cases. + maxTxRetrievals = 256 + + // maxTxUnderpricedSetSize is the size of the underpriced transaction set that + // is used to track recent transactions that have been dropped so we don't + // re-request them. + maxTxUnderpricedSetSize = 32768 + + // txArriveTimeout is the time allowance before an announced transaction is + // explicitly requested. + txArriveTimeout = 500 * time.Millisecond + + // txGatherSlack is the interval used to collate almost-expired announces + // with network fetches. + txGatherSlack = 100 * time.Millisecond +) + +var ( + // txFetchTimeout is the maximum allotted time to return an explicitly + // requested transaction. + txFetchTimeout = 5 * time.Second +) + +var ( + txAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/in", nil) + txAnnounceKnownMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/known", nil) + txAnnounceUnderpricedMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/underpriced", nil) + txAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/dos", nil) + + txBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/broadcasts/in", nil) + txBroadcastKnownMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/broadcasts/known", nil) + txBroadcastUnderpricedMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/broadcasts/underpriced", nil) + txBroadcastOtherRejectMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/broadcasts/otherreject", nil) + + txRequestOutMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/request/out", nil) + txRequestFailMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/request/fail", nil) + txRequestDoneMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/request/done", nil) + txRequestTimeoutMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/request/timeout", nil) + + txReplyInMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/replies/in", nil) + txReplyKnownMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/replies/known", nil) + txReplyUnderpricedMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/replies/underpriced", nil) + txReplyOtherRejectMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/replies/otherreject", nil) + + txFetcherWaitingPeers = metrics.NewRegisteredGauge("eth/fetcher/transaction/waiting/peers", nil) + txFetcherWaitingHashes = metrics.NewRegisteredGauge("eth/fetcher/transaction/waiting/hashes", nil) + txFetcherQueueingPeers = metrics.NewRegisteredGauge("eth/fetcher/transaction/queueing/peers", nil) + txFetcherQueueingHashes = metrics.NewRegisteredGauge("eth/fetcher/transaction/queueing/hashes", nil) + txFetcherFetchingPeers = metrics.NewRegisteredGauge("eth/fetcher/transaction/fetching/peers", nil) + txFetcherFetchingHashes = metrics.NewRegisteredGauge("eth/fetcher/transaction/fetching/hashes", nil) +) + +// txAnnounce is the notification of the availability of a batch +// of new transactions in the network. +type txAnnounce struct { + origin string // Identifier of the peer originating the notification + hashes []common.Hash // Batch of transaction hashes being announced +} + +// txRequest represents an in-flight transaction retrieval request destined to +// a specific peers. +type txRequest struct { + hashes []common.Hash // Transactions having been requested + stolen map[common.Hash]struct{} // Deliveries by someone else (don't re-request) + time mclock.AbsTime // Timestamp of the request +} + +// txDelivery is the notification that a batch of transactions have been added +// to the pool and should be untracked. +type txDelivery struct { + origin string // Identifier of the peer originating the notification + hashes []common.Hash // Batch of transaction hashes having been delivered + direct bool // Whether this is a direct reply or a broadcast +} + +// txDrop is the notification that a peer has disconnected. +type txDrop struct { + peer string +} + +// TxFetcher is responsible for retrieving new transaction based on announcements. +// +// The fetcher operates in 3 stages: +// - Transactions that are newly discovered are moved into a wait list. +// - After ~500ms passes, transactions from the wait list that have not been +// broadcast to us in whole are moved into a queueing area. +// - When a connected peer doesn't have in-flight retrieval requests, any +// transaction queued up (and announced by the peer) are allocated to the +// peer and moved into a fetching status until it's fulfilled or fails. +// +// The invariants of the fetcher are: +// - Each tracked transaction (hash) must only be present in one of the +// three stages. This ensures that the fetcher operates akin to a finite +// state automata and there's do data leak. +// - Each peer that announced transactions may be scheduled retrievals, but +// only ever one concurrently. This ensures we can immediately know what is +// missing from a reply and reschedule it. +type TxFetcher struct { + notify chan *txAnnounce + cleanup chan *txDelivery + drop chan *txDrop + quit chan struct{} + + underpriced mapset.Set // Transactions discarded as too cheap (don't re-fetch) + + // Stage 1: Waiting lists for newly discovered transactions that might be + // broadcast without needing explicit request/reply round trips. + waitlist map[common.Hash]map[string]struct{} // Transactions waiting for an potential broadcast + waittime map[common.Hash]mclock.AbsTime // Timestamps when transactions were added to the waitlist + waitslots map[string]map[common.Hash]struct{} // Waiting announcement sgroupped by peer (DoS protection) + + // Stage 2: Queue of transactions that waiting to be allocated to some peer + // to be retrieved directly. + announces map[string]map[common.Hash]struct{} // Set of announced transactions, grouped by origin peer + announced map[common.Hash]map[string]struct{} // Set of download locations, grouped by transaction hash + + // Stage 3: Set of transactions currently being retrieved, some which may be + // fulfilled and some rescheduled. Note, this step shares 'announces' from the + // previous stage to avoid having to duplicate (need it for DoS checks). + fetching map[common.Hash]string // Transaction set currently being retrieved + requests map[string]*txRequest // In-flight transaction retrievals + alternates map[common.Hash]map[string]struct{} // In-flight transaction alternate origins if retrieval fails + + // Callbacks + hasTx func(common.Hash) bool // Retrieves a tx from the local txpool + addTxs func([]*types.Transaction) []error // Insert a batch of transactions into local txpool + fetchTxs func(string, []common.Hash) error // Retrieves a set of txs from a remote peer + + step chan struct{} // Notification channel when the fetcher loop iterates + clock mclock.Clock // Time wrapper to simulate in tests + rand *mrand.Rand // Randomizer to use in tests instead of map range loops (soft-random) +} + +// NewTxFetcher creates a transaction fetcher to retrieve transaction +// based on hash announcements. +func NewTxFetcher(hasTx func(common.Hash) bool, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error) *TxFetcher { + return NewTxFetcherForTests(hasTx, addTxs, fetchTxs, mclock.System{}, nil) +} + +// NewTxFetcherForTests is a testing method to mock out the realtime clock with +// a simulated version and the internal randomness with a deterministic one. +func NewTxFetcherForTests( + hasTx func(common.Hash) bool, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error, + clock mclock.Clock, rand *mrand.Rand) *TxFetcher { + return &TxFetcher{ + notify: make(chan *txAnnounce), + cleanup: make(chan *txDelivery), + drop: make(chan *txDrop), + quit: make(chan struct{}), + waitlist: make(map[common.Hash]map[string]struct{}), + waittime: make(map[common.Hash]mclock.AbsTime), + waitslots: make(map[string]map[common.Hash]struct{}), + announces: make(map[string]map[common.Hash]struct{}), + announced: make(map[common.Hash]map[string]struct{}), + fetching: make(map[common.Hash]string), + requests: make(map[string]*txRequest), + alternates: make(map[common.Hash]map[string]struct{}), + underpriced: mapset.NewSet(), + hasTx: hasTx, + addTxs: addTxs, + fetchTxs: fetchTxs, + clock: clock, + rand: rand, + } +} + +// Notify announces the fetcher of the potential availability of a new batch of +// transactions in the network. +func (f *TxFetcher) Notify(peer string, hashes []common.Hash) error { + // Keep track of all the announced transactions + txAnnounceInMeter.Mark(int64(len(hashes))) + + // Skip any transaction announcements that we already know of, or that we've + // previously marked as cheap and discarded. This check is of course racey, + // because multiple concurrent notifies will still manage to pass it, but it's + // still valuable to check here because it runs concurrent to the internal + // loop, so anything caught here is time saved internally. + var ( + unknowns = make([]common.Hash, 0, len(hashes)) + duplicate, underpriced int64 + ) + for _, hash := range hashes { + switch { + case f.hasTx(hash): + duplicate++ + + case f.underpriced.Contains(hash): + underpriced++ + + default: + unknowns = append(unknowns, hash) + } + } + txAnnounceKnownMeter.Mark(duplicate) + txAnnounceUnderpricedMeter.Mark(underpriced) + + // If anything's left to announce, push it into the internal loop + if len(unknowns) == 0 { + return nil + } + announce := &txAnnounce{ + origin: peer, + hashes: unknowns, + } + select { + case f.notify <- announce: + return nil + case <-f.quit: + return errTerminated + } +} + +// Enqueue imports a batch of received transaction into the transaction pool +// and the fetcher. This method may be called by both transaction broadcasts and +// direct request replies. The differentiation is important so the fetcher can +// re-schedule missing transactions as soon as possible. +func (f *TxFetcher) Enqueue(peer string, txs []*types.Transaction, direct bool) error { + // Keep track of all the propagated transactions + if direct { + txReplyInMeter.Mark(int64(len(txs))) + } else { + txBroadcastInMeter.Mark(int64(len(txs))) + } + // Push all the transactions into the pool, tracking underpriced ones to avoid + // re-requesting them and dropping the peer in case of malicious transfers. + var ( + added = make([]common.Hash, 0, len(txs)) + duplicate int64 + underpriced int64 + otherreject int64 + ) + errs := f.addTxs(txs) + for i, err := range errs { + // Track the transaction hash if the price is too low for us. + // Avoid re-request this transaction when we receive another + // announcement. + if errors.Is(err, core.ErrUnderpriced) || errors.Is(err, core.ErrReplaceUnderpriced) { + for f.underpriced.Cardinality() >= maxTxUnderpricedSetSize { + f.underpriced.Pop() + } + f.underpriced.Add(txs[i].Hash()) + } + // Track a few interesting failure types + switch { + case err == nil: // Noop, but need to handle to not count these + + case errors.Is(err, core.ErrAlreadyKnown): + duplicate++ + + case errors.Is(err, core.ErrUnderpriced) || errors.Is(err, core.ErrReplaceUnderpriced): + underpriced++ + + default: + otherreject++ + } + added = append(added, txs[i].Hash()) + } + if direct { + txReplyKnownMeter.Mark(duplicate) + txReplyUnderpricedMeter.Mark(underpriced) + txReplyOtherRejectMeter.Mark(otherreject) + } else { + txBroadcastKnownMeter.Mark(duplicate) + txBroadcastUnderpricedMeter.Mark(underpriced) + txBroadcastOtherRejectMeter.Mark(otherreject) + } + select { + case f.cleanup <- &txDelivery{origin: peer, hashes: added, direct: direct}: + return nil + case <-f.quit: + return errTerminated + } +} + +// Drop should be called when a peer disconnects. It cleans up all the internal +// data structures of the given node. +func (f *TxFetcher) Drop(peer string) error { + select { + case f.drop <- &txDrop{peer: peer}: + return nil + case <-f.quit: + return errTerminated + } +} + +// Start boots up the announcement based synchroniser, accepting and processing +// hash notifications and block fetches until termination requested. +func (f *TxFetcher) Start() { + go f.loop() +} + +// Stop terminates the announcement based synchroniser, canceling all pending +// operations. +func (f *TxFetcher) Stop() { + close(f.quit) +} + +func (f *TxFetcher) loop() { + var ( + waitTimer = new(mclock.Timer) + timeoutTimer = new(mclock.Timer) + + waitTrigger = make(chan struct{}, 1) + timeoutTrigger = make(chan struct{}, 1) + ) + for { + select { + case ann := <-f.notify: + // Drop part of the new announcements if there are too many accumulated. + // Note, we could but do not filter already known transactions here as + // the probability of something arriving between this call and the pre- + // filter outside is essentially zero. + used := len(f.waitslots[ann.origin]) + len(f.announces[ann.origin]) + if used >= maxTxAnnounces { + // This can happen if a set of transactions are requested but not + // all fulfilled, so the remainder are rescheduled without the cap + // check. Should be fine as the limit is in the thousands and the + // request size in the hundreds. + txAnnounceDOSMeter.Mark(int64(len(ann.hashes))) + break + } + want := used + len(ann.hashes) + if want > maxTxAnnounces { + txAnnounceDOSMeter.Mark(int64(want - maxTxAnnounces)) + ann.hashes = ann.hashes[:want-maxTxAnnounces] + } + // All is well, schedule the remainder of the transactions + idleWait := len(f.waittime) == 0 + _, oldPeer := f.announces[ann.origin] + + for _, hash := range ann.hashes { + // If the transaction is already downloading, add it to the list + // of possible alternates (in case the current retrieval fails) and + // also account it for the peer. + if f.alternates[hash] != nil { + f.alternates[hash][ann.origin] = struct{}{} + + // Stage 2 and 3 share the set of origins per tx + if announces := f.announces[ann.origin]; announces != nil { + announces[hash] = struct{}{} + } else { + f.announces[ann.origin] = map[common.Hash]struct{}{hash: {}} + } + continue + } + // If the transaction is not downloading, but is already queued + // from a different peer, track it for the new peer too. + if f.announced[hash] != nil { + f.announced[hash][ann.origin] = struct{}{} + + // Stage 2 and 3 share the set of origins per tx + if announces := f.announces[ann.origin]; announces != nil { + announces[hash] = struct{}{} + } else { + f.announces[ann.origin] = map[common.Hash]struct{}{hash: {}} + } + continue + } + // If the transaction is already known to the fetcher, but not + // yet downloading, add the peer as an alternate origin in the + // waiting list. + if f.waitlist[hash] != nil { + f.waitlist[hash][ann.origin] = struct{}{} + + if waitslots := f.waitslots[ann.origin]; waitslots != nil { + waitslots[hash] = struct{}{} + } else { + f.waitslots[ann.origin] = map[common.Hash]struct{}{hash: {}} + } + continue + } + // Transaction unknown to the fetcher, insert it into the waiting list + f.waitlist[hash] = map[string]struct{}{ann.origin: {}} + f.waittime[hash] = f.clock.Now() + + if waitslots := f.waitslots[ann.origin]; waitslots != nil { + waitslots[hash] = struct{}{} + } else { + f.waitslots[ann.origin] = map[common.Hash]struct{}{hash: {}} + } + } + // If a new item was added to the waitlist, schedule it into the fetcher + if idleWait && len(f.waittime) > 0 { + f.rescheduleWait(waitTimer, waitTrigger) + } + // If this peer is new and announced something already queued, maybe + // request transactions from them + if !oldPeer && len(f.announces[ann.origin]) > 0 { + f.scheduleFetches(timeoutTimer, timeoutTrigger, map[string]struct{}{ann.origin: {}}) + } + + case <-waitTrigger: + // At least one transaction's waiting time ran out, push all expired + // ones into the retrieval queues + actives := make(map[string]struct{}) + for hash, instance := range f.waittime { + if time.Duration(f.clock.Now()-instance)+txGatherSlack > txArriveTimeout { + // Transaction expired without propagation, schedule for retrieval + if f.announced[hash] != nil { + panic("announce tracker already contains waitlist item") + } + f.announced[hash] = f.waitlist[hash] + for peer := range f.waitlist[hash] { + if announces := f.announces[peer]; announces != nil { + announces[hash] = struct{}{} + } else { + f.announces[peer] = map[common.Hash]struct{}{hash: {}} + } + delete(f.waitslots[peer], hash) + if len(f.waitslots[peer]) == 0 { + delete(f.waitslots, peer) + } + actives[peer] = struct{}{} + } + delete(f.waittime, hash) + delete(f.waitlist, hash) + } + } + // If transactions are still waiting for propagation, reschedule the wait timer + if len(f.waittime) > 0 { + f.rescheduleWait(waitTimer, waitTrigger) + } + // If any peers became active and are idle, request transactions from them + if len(actives) > 0 { + f.scheduleFetches(timeoutTimer, timeoutTrigger, actives) + } + + case <-timeoutTrigger: + // Clean up any expired retrievals and avoid re-requesting them from the + // same peer (either overloaded or malicious, useless in both cases). We + // could also penalize (Drop), but there's nothing to gain, and if could + // possibly further increase the load on it. + for peer, req := range f.requests { + if time.Duration(f.clock.Now()-req.time)+txGatherSlack > txFetchTimeout { + txRequestTimeoutMeter.Mark(int64(len(req.hashes))) + + // Reschedule all the not-yet-delivered fetches to alternate peers + for _, hash := range req.hashes { + // Skip rescheduling hashes already delivered by someone else + if req.stolen != nil { + if _, ok := req.stolen[hash]; ok { + continue + } + } + // Move the delivery back from fetching to queued + if _, ok := f.announced[hash]; ok { + panic("announced tracker already contains alternate item") + } + if f.alternates[hash] != nil { // nil if tx was broadcast during fetch + f.announced[hash] = f.alternates[hash] + } + delete(f.announced[hash], peer) + if len(f.announced[hash]) == 0 { + delete(f.announced, hash) + } + delete(f.announces[peer], hash) + delete(f.alternates, hash) + delete(f.fetching, hash) + } + if len(f.announces[peer]) == 0 { + delete(f.announces, peer) + } + // Keep track of the request as dangling, but never expire + f.requests[peer].hashes = nil + } + } + // Schedule a new transaction retrieval + f.scheduleFetches(timeoutTimer, timeoutTrigger, nil) + + // No idea if we scheduled something or not, trigger the timer if needed + // TODO(karalabe): this is kind of lame, can't we dump it into scheduleFetches somehow? + f.rescheduleTimeout(timeoutTimer, timeoutTrigger) + + case delivery := <-f.cleanup: + // Independent if the delivery was direct or broadcast, remove all + // traces of the hash from internal trackers + for _, hash := range delivery.hashes { + if _, ok := f.waitlist[hash]; ok { + for peer, txset := range f.waitslots { + delete(txset, hash) + if len(txset) == 0 { + delete(f.waitslots, peer) + } + } + delete(f.waitlist, hash) + delete(f.waittime, hash) + } else { + for peer, txset := range f.announces { + delete(txset, hash) + if len(txset) == 0 { + delete(f.announces, peer) + } + } + delete(f.announced, hash) + delete(f.alternates, hash) + + // If a transaction currently being fetched from a different + // origin was delivered (delivery stolen), mark it so the + // actual delivery won't double schedule it. + if origin, ok := f.fetching[hash]; ok && (origin != delivery.origin || !delivery.direct) { + stolen := f.requests[origin].stolen + if stolen == nil { + f.requests[origin].stolen = make(map[common.Hash]struct{}) + stolen = f.requests[origin].stolen + } + stolen[hash] = struct{}{} + } + delete(f.fetching, hash) + } + } + // In case of a direct delivery, also reschedule anything missing + // from the original query + if delivery.direct { + // Mark the requesting successful (independent of individual status) + txRequestDoneMeter.Mark(int64(len(delivery.hashes))) + + // Make sure something was pending, nuke it + req := f.requests[delivery.origin] + if req == nil { + log.Warn("Unexpected transaction delivery", "peer", delivery.origin) + break + } + delete(f.requests, delivery.origin) + + // Anything not delivered should be re-scheduled (with or without + // this peer, depending on the response cutoff) + delivered := make(map[common.Hash]struct{}) + for _, hash := range delivery.hashes { + delivered[hash] = struct{}{} + } + cutoff := len(req.hashes) // If nothing is delivered, assume everything is missing, don't retry!!! + for i, hash := range req.hashes { + if _, ok := delivered[hash]; ok { + cutoff = i + } + } + // Reschedule missing hashes from alternates, not-fulfilled from alt+self + for i, hash := range req.hashes { + // Skip rescheduling hashes already delivered by someone else + if req.stolen != nil { + if _, ok := req.stolen[hash]; ok { + continue + } + } + if _, ok := delivered[hash]; !ok { + if i < cutoff { + delete(f.alternates[hash], delivery.origin) + delete(f.announces[delivery.origin], hash) + if len(f.announces[delivery.origin]) == 0 { + delete(f.announces, delivery.origin) + } + } + if len(f.alternates[hash]) > 0 { + if _, ok := f.announced[hash]; ok { + panic(fmt.Sprintf("announced tracker already contains alternate item: %v", f.announced[hash])) + } + f.announced[hash] = f.alternates[hash] + } + } + delete(f.alternates, hash) + delete(f.fetching, hash) + } + // Something was delivered, try to reschedule requests + f.scheduleFetches(timeoutTimer, timeoutTrigger, nil) // Partial delivery may enable others to deliver too + } + + case drop := <-f.drop: + // A peer was dropped, remove all traces of it + if _, ok := f.waitslots[drop.peer]; ok { + for hash := range f.waitslots[drop.peer] { + delete(f.waitlist[hash], drop.peer) + if len(f.waitlist[hash]) == 0 { + delete(f.waitlist, hash) + delete(f.waittime, hash) + } + } + delete(f.waitslots, drop.peer) + if len(f.waitlist) > 0 { + f.rescheduleWait(waitTimer, waitTrigger) + } + } + // Clean up any active requests + var request *txRequest + if request = f.requests[drop.peer]; request != nil { + for _, hash := range request.hashes { + // Skip rescheduling hashes already delivered by someone else + if request.stolen != nil { + if _, ok := request.stolen[hash]; ok { + continue + } + } + // Undelivered hash, reschedule if there's an alternative origin available + delete(f.alternates[hash], drop.peer) + if len(f.alternates[hash]) == 0 { + delete(f.alternates, hash) + } else { + f.announced[hash] = f.alternates[hash] + delete(f.alternates, hash) + } + delete(f.fetching, hash) + } + delete(f.requests, drop.peer) + } + // Clean up general announcement tracking + if _, ok := f.announces[drop.peer]; ok { + for hash := range f.announces[drop.peer] { + delete(f.announced[hash], drop.peer) + if len(f.announced[hash]) == 0 { + delete(f.announced, hash) + } + } + delete(f.announces, drop.peer) + } + // If a request was cancelled, check if anything needs to be rescheduled + if request != nil { + f.scheduleFetches(timeoutTimer, timeoutTrigger, nil) + f.rescheduleTimeout(timeoutTimer, timeoutTrigger) + } + + case <-f.quit: + return + } + // No idea what happened, but bump some sanity metrics + txFetcherWaitingPeers.Update(int64(len(f.waitslots))) + txFetcherWaitingHashes.Update(int64(len(f.waitlist))) + txFetcherQueueingPeers.Update(int64(len(f.announces) - len(f.requests))) + txFetcherQueueingHashes.Update(int64(len(f.announced))) + txFetcherFetchingPeers.Update(int64(len(f.requests))) + txFetcherFetchingHashes.Update(int64(len(f.fetching))) + + // Loop did something, ping the step notifier if needed (tests) + if f.step != nil { + f.step <- struct{}{} + } + } +} + +// rescheduleWait iterates over all the transactions currently in the waitlist +// and schedules the movement into the fetcher for the earliest. +// +// The method has a granularity of 'gatherSlack', since there's not much point in +// spinning over all the transactions just to maybe find one that should trigger +// a few ms earlier. +func (f *TxFetcher) rescheduleWait(timer *mclock.Timer, trigger chan struct{}) { + if *timer != nil { + (*timer).Stop() + } + now := f.clock.Now() + + earliest := now + for _, instance := range f.waittime { + if earliest > instance { + earliest = instance + if txArriveTimeout-time.Duration(now-earliest) < gatherSlack { + break + } + } + } + *timer = f.clock.AfterFunc(txArriveTimeout-time.Duration(now-earliest), func() { + trigger <- struct{}{} + }) +} + +// rescheduleTimeout iterates over all the transactions currently in flight and +// schedules a cleanup run when the first would trigger. +// +// The method has a granularity of 'gatherSlack', since there's not much point in +// spinning over all the transactions just to maybe find one that should trigger +// a few ms earlier. +// +// This method is a bit "flaky" "by design". In theory the timeout timer only ever +// should be rescheduled if some request is pending. In practice, a timeout will +// cause the timer to be rescheduled every 5 secs (until the peer comes through or +// disconnects). This is a limitation of the fetcher code because we don't trac +// pending requests and timed out requests separately. Without double tracking, if +// we simply didn't reschedule the timer on all-timeout then the timer would never +// be set again since len(request) > 0 => something's running. +func (f *TxFetcher) rescheduleTimeout(timer *mclock.Timer, trigger chan struct{}) { + if *timer != nil { + (*timer).Stop() + } + now := f.clock.Now() + + earliest := now + for _, req := range f.requests { + // If this request already timed out, skip it altogether + if req.hashes == nil { + continue + } + if earliest > req.time { + earliest = req.time + if txFetchTimeout-time.Duration(now-earliest) < gatherSlack { + break + } + } + } + *timer = f.clock.AfterFunc(txFetchTimeout-time.Duration(now-earliest), func() { + trigger <- struct{}{} + }) +} + +// scheduleFetches starts a batch of retrievals for all available idle peers. +func (f *TxFetcher) scheduleFetches(timer *mclock.Timer, timeout chan struct{}, whitelist map[string]struct{}) { + // Gather the set of peers we want to retrieve from (default to all) + actives := whitelist + if actives == nil { + actives = make(map[string]struct{}) + for peer := range f.announces { + actives[peer] = struct{}{} + } + } + if len(actives) == 0 { + return + } + // For each active peer, try to schedule some transaction fetches + idle := len(f.requests) == 0 + + f.forEachPeer(actives, func(peer string) { + if f.requests[peer] != nil { + return // continue in the for-each + } + if len(f.announces[peer]) == 0 { + return // continue in the for-each + } + hashes := make([]common.Hash, 0, maxTxRetrievals) + f.forEachHash(f.announces[peer], func(hash common.Hash) bool { + if _, ok := f.fetching[hash]; !ok { + // Mark the hash as fetching and stash away possible alternates + f.fetching[hash] = peer + + if _, ok := f.alternates[hash]; ok { + panic(fmt.Sprintf("alternate tracker already contains fetching item: %v", f.alternates[hash])) + } + f.alternates[hash] = f.announced[hash] + delete(f.announced, hash) + + // Accumulate the hash and stop if the limit was reached + hashes = append(hashes, hash) + if len(hashes) >= maxTxRetrievals { + return false // break in the for-each + } + } + return true // continue in the for-each + }) + // If any hashes were allocated, request them from the peer + if len(hashes) > 0 { + f.requests[peer] = &txRequest{hashes: hashes, time: f.clock.Now()} + txRequestOutMeter.Mark(int64(len(hashes))) + + go func(peer string, hashes []common.Hash) { + // Try to fetch the transactions, but in case of a request + // failure (e.g. peer disconnected), reschedule the hashes. + if err := f.fetchTxs(peer, hashes); err != nil { + txRequestFailMeter.Mark(int64(len(hashes))) + f.Drop(peer) + } + }(peer, hashes) + } + }) + // If a new request was fired, schedule a timeout timer + if idle && len(f.requests) > 0 { + f.rescheduleTimeout(timer, timeout) + } +} + +// forEachPeer does a range loop over a map of peers in production, but during +// testing it does a deterministic sorted random to allow reproducing issues. +func (f *TxFetcher) forEachPeer(peers map[string]struct{}, do func(peer string)) { + // If we're running production, use whatever Go's map gives us + if f.rand == nil { + for peer := range peers { + do(peer) + } + return + } + // We're running the test suite, make iteration deterministic + list := make([]string, 0, len(peers)) + for peer := range peers { + list = append(list, peer) + } + sort.Strings(list) + rotateStrings(list, f.rand.Intn(len(list))) + for _, peer := range list { + do(peer) + } +} + +// forEachHash does a range loop over a map of hashes in production, but during +// testing it does a deterministic sorted random to allow reproducing issues. +func (f *TxFetcher) forEachHash(hashes map[common.Hash]struct{}, do func(hash common.Hash) bool) { + // If we're running production, use whatever Go's map gives us + if f.rand == nil { + for hash := range hashes { + if !do(hash) { + return + } + } + return + } + // We're running the test suite, make iteration deterministic + list := make([]common.Hash, 0, len(hashes)) + for hash := range hashes { + list = append(list, hash) + } + sortHashes(list) + rotateHashes(list, f.rand.Intn(len(list))) + for _, hash := range list { + if !do(hash) { + return + } + } +} + +// rotateStrings rotates the contents of a slice by n steps. This method is only +// used in tests to simulate random map iteration but keep it deterministic. +func rotateStrings(slice []string, n int) { + orig := make([]string, len(slice)) + copy(orig, slice) + + for i := 0; i < len(orig); i++ { + slice[i] = orig[(i+n)%len(orig)] + } +} + +// sortHashes sorts a slice of hashes. This method is only used in tests in order +// to simulate random map iteration but keep it deterministic. +func sortHashes(slice []common.Hash) { + for i := 0; i < len(slice); i++ { + for j := i + 1; j < len(slice); j++ { + if bytes.Compare(slice[i][:], slice[j][:]) > 0 { + slice[i], slice[j] = slice[j], slice[i] + } + } + } +} + +// rotateHashes rotates the contents of a slice by n steps. This method is only +// used in tests to simulate random map iteration but keep it deterministic. +func rotateHashes(slice []common.Hash, n int) { + orig := make([]common.Hash, len(slice)) + copy(orig, slice) + + for i := 0; i < len(orig); i++ { + slice[i] = orig[(i+n)%len(orig)] + } +} diff --git a/eth/fetcher/tx_fetcher_test.go b/eth/fetcher/tx_fetcher_test.go new file mode 100644 index 00000000..4c06712f --- /dev/null +++ b/eth/fetcher/tx_fetcher_test.go @@ -0,0 +1,1537 @@ +// 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 fetcher + +import ( + "errors" + "math/big" + "math/rand" + "testing" + "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" +) + +var ( + // testTxs is a set of transactions to use during testing that have meaningful hashes. + testTxs = []*types.Transaction{ + types.NewTransaction(5577006791947779410, common.Address{0x0f}, new(big.Int), 0, new(big.Int), nil), + types.NewTransaction(15352856648520921629, common.Address{0xbb}, new(big.Int), 0, new(big.Int), nil), + types.NewTransaction(3916589616287113937, common.Address{0x86}, new(big.Int), 0, new(big.Int), nil), + types.NewTransaction(9828766684487745566, common.Address{0xac}, new(big.Int), 0, new(big.Int), nil), + } + // testTxsHashes is the hashes of the test transactions above + testTxsHashes = []common.Hash{testTxs[0].Hash(), testTxs[1].Hash(), testTxs[2].Hash(), testTxs[3].Hash()} +) + +type doTxNotify struct { + peer string + hashes []common.Hash +} +type doTxEnqueue struct { + peer string + txs []*types.Transaction + direct bool +} +type doWait struct { + time time.Duration + step bool +} +type doDrop string +type doFunc func() + +type isWaiting map[string][]common.Hash +type isScheduled struct { + tracking map[string][]common.Hash + fetching map[string][]common.Hash + dangling map[string][]common.Hash +} +type isUnderpriced int + +// txFetcherTest represents a test scenario that can be executed by the test +// runner. +type txFetcherTest struct { + init func() *TxFetcher + steps []interface{} +} + +// Tests that transaction announcements are added to a waitlist, and none +// of them are scheduled for retrieval until the wait expires. +func TestTransactionFetcherWaiting(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Initial announcement to get something into the waitlist + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}, {0x02}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }), + // Announce from a new peer to check that no overwrite happens + doTxNotify{peer: "B", hashes: []common.Hash{{0x03}, {0x04}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + "B": {{0x03}, {0x04}}, + }), + // Announce clashing hashes but unique new peer + doTxNotify{peer: "C", hashes: []common.Hash{{0x01}, {0x04}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + "B": {{0x03}, {0x04}}, + "C": {{0x01}, {0x04}}, + }), + // Announce existing and clashing hashes from existing peer + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}, {0x03}, {0x05}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x05}}, + "B": {{0x03}, {0x04}}, + "C": {{0x01}, {0x04}}, + }), + isScheduled{tracking: nil, fetching: nil}, + + // Wait for the arrival timeout which should move all expired items + // from the wait list to the scheduler + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x05}}, + "B": {{0x03}, {0x04}}, + "C": {{0x01}, {0x04}}, + }, + fetching: map[string][]common.Hash{ // Depends on deterministic test randomizer + "A": {{0x02}, {0x03}, {0x05}}, + "C": {{0x01}, {0x04}}, + }, + }, + // Queue up a non-fetchable transaction and then trigger it with a new + // peer (weird case to test 1 line in the fetcher) + doTxNotify{peer: "C", hashes: []common.Hash{{0x06}, {0x07}}}, + isWaiting(map[string][]common.Hash{ + "C": {{0x06}, {0x07}}, + }), + doWait{time: txArriveTimeout, step: true}, + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x05}}, + "B": {{0x03}, {0x04}}, + "C": {{0x01}, {0x04}, {0x06}, {0x07}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x02}, {0x03}, {0x05}}, + "C": {{0x01}, {0x04}}, + }, + }, + doTxNotify{peer: "D", hashes: []common.Hash{{0x06}, {0x07}}}, + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x05}}, + "B": {{0x03}, {0x04}}, + "C": {{0x01}, {0x04}, {0x06}, {0x07}}, + "D": {{0x06}, {0x07}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x02}, {0x03}, {0x05}}, + "C": {{0x01}, {0x04}}, + "D": {{0x06}, {0x07}}, + }, + }, + }, + }) +} + +// Tests that transaction announcements skip the waiting list if they are +// already scheduled. +func TestTransactionFetcherSkipWaiting(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}, {0x02}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // Announce overlaps from the same peer, ensure the new ones end up + // in stage one, and clashing ones don't get double tracked + doTxNotify{peer: "A", hashes: []common.Hash{{0x02}, {0x03}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x03}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // Announce overlaps from a new peer, ensure new transactions end up + // in stage one and clashing ones get tracked for the new peer + doTxNotify{peer: "B", hashes: []common.Hash{{0x02}, {0x03}, {0x04}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x03}}, + "B": {{0x03}, {0x04}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + "B": {{0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + }, + }) +} + +// Tests that only a single transaction request gets scheduled to a peer +// and subsequent announces block or get allotted to someone else. +func TestTransactionFetcherSingletonRequesting(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}, {0x02}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // Announce a new set of transactions from the same peer and ensure + // they do not start fetching since the peer is already busy + doTxNotify{peer: "A", hashes: []common.Hash{{0x03}, {0x04}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x03}, {0x04}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x04}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // Announce a duplicate set of transactions from a new peer and ensure + // uniquely new ones start downloading, even if clashing. + doTxNotify{peer: "B", hashes: []common.Hash{{0x02}, {0x03}, {0x05}, {0x06}}}, + isWaiting(map[string][]common.Hash{ + "B": {{0x05}, {0x06}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}, {0x03}, {0x04}}, + "B": {{0x02}, {0x03}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + "B": {{0x03}}, + }, + }, + }, + }) +} + +// Tests that if a transaction retrieval fails, all the transactions get +// instantly schedule back to someone else or the announcements dropped +// if no alternate source is available. +func TestTransactionFetcherFailedRescheduling(t *testing.T) { + // Create a channel to control when tx requests can fail + proceed := make(chan struct{}) + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(origin string, hashes []common.Hash) error { + <-proceed + return errors.New("peer disconnected") + }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}, {0x02}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // While the original peer is stuck in the request, push in an second + // data source. + doTxNotify{peer: "B", hashes: []common.Hash{{0x02}}}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + "B": {{0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + }, + // Wait until the original request fails and check that transactions + // are either rescheduled or dropped + doFunc(func() { + proceed <- struct{}{} // Allow peer A to return the failure + }), + doWait{time: 0, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "B": {{0x02}}, + }, + fetching: map[string][]common.Hash{ + "B": {{0x02}}, + }, + }, + doFunc(func() { + proceed <- struct{}{} // Allow peer B to return the failure + }), + doWait{time: 0, step: true}, + isWaiting(nil), + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that if a transaction retrieval succeeds, all alternate origins +// are cleaned up. +func TestTransactionFetcherCleanup(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Request should be delivered + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}, direct: true}, + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that if a transaction retrieval succeeds, but the response is empty (no +// transactions available, then all are nuked instead of being rescheduled (yes, +// this was a bug)). +func TestTransactionFetcherCleanupEmpty(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Deliver an empty response and ensure the transaction is cleared, not rescheduled + doTxEnqueue{peer: "A", txs: []*types.Transaction{}, direct: true}, + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that non-returned transactions are either re-scheduled from a +// different peer, or self if they are after the cutoff point. +func TestTransactionFetcherMissingRescheduling(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0], testTxsHashes[1], testTxsHashes[2]}}, + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1], testTxsHashes[2]}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1], testTxsHashes[2]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1], testTxsHashes[2]}, + }, + }, + // Deliver the middle transaction requested, the one before which + // should be dropped and the one after re-requested. + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}, direct: true}, // This depends on the deterministic random + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[2]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[2]}, + }, + }, + }, + }) +} + +// Tests that out of two transactions, if one is missing and the last is +// delivered, the peer gets properly cleaned out from the internal state. +func TestTransactionFetcherMissingCleanup(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0], testTxsHashes[1]}}, + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1]}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1]}, + }, + }, + // Deliver the middle transaction requested, the one before which + // should be dropped and the one after re-requested. + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[1]}, direct: true}, // This depends on the deterministic random + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that transaction broadcasts properly clean up announcements. +func TestTransactionFetcherBroadcasts(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Set up three transactions to be in different stats, waiting, queued and fetching + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[1]}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[2]}}, + + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[2]}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Broadcast all the transactions and ensure everything gets cleaned + // up, but the dangling request is left alone to avoid doing multiple + // concurrent requests. + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0], testTxs[1], testTxs[2]}, direct: false}, + isWaiting(nil), + isScheduled{ + tracking: nil, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Deliver the requested hashes + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0], testTxs[1], testTxs[2]}, direct: true}, + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that the waiting list timers properly reset and reschedule. +func TestTransactionFetcherWaitTimerResets(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}}, + }), + isScheduled{nil, nil, nil}, + doWait{time: txArriveTimeout / 2, step: false}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}}, + }), + isScheduled{nil, nil, nil}, + + doTxNotify{peer: "A", hashes: []common.Hash{{0x02}}}, + isWaiting(map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }), + isScheduled{nil, nil, nil}, + doWait{time: txArriveTimeout / 2, step: true}, + isWaiting(map[string][]common.Hash{ + "A": {{0x02}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}}, + }, + }, + + doWait{time: txArriveTimeout / 2, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}}, + }, + }, + }, + }) +} + +// Tests that if a transaction request is not replied to, it will time +// out and be re-scheduled for someone else. +func TestTransactionFetcherTimeoutRescheduling(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Push an initial announcement through to the scheduled stage + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }), + isScheduled{tracking: nil, fetching: nil}, + + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Wait until the delivery times out, everything should be cleaned up + doWait{time: txFetchTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: nil, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {}, + }, + }, + // Ensure that followup announcements don't get scheduled + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[1]}}, + doWait{time: txArriveTimeout, step: true}, + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[1]}, + }, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {}, + }, + }, + // If the dangling request arrives a bit later, do not choke + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}, direct: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[1]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[1]}, + }, + }, + }, + }) +} + +// Tests that the fetching timeout timers properly reset and reschedule. +func TestTransactionFetcherTimeoutTimerResets(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "B", hashes: []common.Hash{{0x02}}}, + doWait{time: txArriveTimeout, step: true}, + + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}}, + "B": {{0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}}, + "B": {{0x02}}, + }, + }, + doWait{time: txFetchTimeout - txArriveTimeout, step: true}, + isScheduled{ + tracking: map[string][]common.Hash{ + "B": {{0x02}}, + }, + fetching: map[string][]common.Hash{ + "B": {{0x02}}, + }, + dangling: map[string][]common.Hash{ + "A": {}, + }, + }, + doWait{time: txArriveTimeout, step: true}, + isScheduled{ + tracking: nil, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {}, + "B": {}, + }, + }, + }, + }) +} + +// Tests that if thousands of transactions are announces, only a small +// number of them will be requested at a time. +func TestTransactionFetcherRateLimiting(t *testing.T) { + // Create a slew of transactions and to announce them + var hashes []common.Hash + for i := 0; i < maxTxAnnounces; i++ { + hashes = append(hashes, common.Hash{byte(i / 256), byte(i % 256)}) + } + + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Announce all the transactions, wait a bit and ensure only a small + // percentage gets requested + doTxNotify{peer: "A", hashes: hashes}, + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": hashes, + }, + fetching: map[string][]common.Hash{ + "A": hashes[1643 : 1643+maxTxRetrievals], + }, + }, + }, + }) +} + +// Tests that then number of transactions a peer is allowed to announce and/or +// request at the same time is hard capped. +func TestTransactionFetcherDoSProtection(t *testing.T) { + // Create a slew of transactions and to announce them + var hashesA []common.Hash + for i := 0; i < maxTxAnnounces+1; i++ { + hashesA = append(hashesA, common.Hash{0x01, byte(i / 256), byte(i % 256)}) + } + var hashesB []common.Hash + for i := 0; i < maxTxAnnounces+1; i++ { + hashesB = append(hashesB, common.Hash{0x02, byte(i / 256), byte(i % 256)}) + } + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + nil, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Announce half of the transaction and wait for them to be scheduled + doTxNotify{peer: "A", hashes: hashesA[:maxTxAnnounces/2]}, + doTxNotify{peer: "B", hashes: hashesB[:maxTxAnnounces/2-1]}, + doWait{time: txArriveTimeout, step: true}, + + // Announce the second half and keep them in the wait list + doTxNotify{peer: "A", hashes: hashesA[maxTxAnnounces/2 : maxTxAnnounces]}, + doTxNotify{peer: "B", hashes: hashesB[maxTxAnnounces/2-1 : maxTxAnnounces-1]}, + + // Ensure the hashes are split half and half + isWaiting(map[string][]common.Hash{ + "A": hashesA[maxTxAnnounces/2 : maxTxAnnounces], + "B": hashesB[maxTxAnnounces/2-1 : maxTxAnnounces-1], + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": hashesA[:maxTxAnnounces/2], + "B": hashesB[:maxTxAnnounces/2-1], + }, + fetching: map[string][]common.Hash{ + "A": hashesA[1643 : 1643+maxTxRetrievals], + "B": append(append([]common.Hash{}, hashesB[maxTxAnnounces/2-3:maxTxAnnounces/2-1]...), hashesB[:maxTxRetrievals-2]...), + }, + }, + // Ensure that adding even one more hash results in dropping the hash + doTxNotify{peer: "A", hashes: []common.Hash{hashesA[maxTxAnnounces]}}, + doTxNotify{peer: "B", hashes: hashesB[maxTxAnnounces-1 : maxTxAnnounces+1]}, + + isWaiting(map[string][]common.Hash{ + "A": hashesA[maxTxAnnounces/2 : maxTxAnnounces], + "B": hashesB[maxTxAnnounces/2-1 : maxTxAnnounces], + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": hashesA[:maxTxAnnounces/2], + "B": hashesB[:maxTxAnnounces/2-1], + }, + fetching: map[string][]common.Hash{ + "A": hashesA[1643 : 1643+maxTxRetrievals], + "B": append(append([]common.Hash{}, hashesB[maxTxAnnounces/2-3:maxTxAnnounces/2-1]...), hashesB[:maxTxRetrievals-2]...), + }, + }, + }, + }) +} + +// Tests that underpriced transactions don't get rescheduled after being rejected. +func TestTransactionFetcherUnderpricedDedup(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + errs := make([]error, len(txs)) + for i := 0; i < len(errs); i++ { + if i%2 == 0 { + errs[i] = core.ErrUnderpriced + } else { + errs[i] = core.ErrReplaceUnderpriced + } + } + return errs + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Deliver a transaction through the fetcher, but reject as underpriced + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0], testTxsHashes[1]}}, + doWait{time: txArriveTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0], testTxs[1]}, direct: true}, + isScheduled{nil, nil, nil}, + + // Try to announce the transaction again, ensure it's not scheduled back + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0], testTxsHashes[1], testTxsHashes[2]}}, // [2] is needed to force a step in the fetcher + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[2]}, + }), + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that underpriced transactions don't get rescheduled after being rejected, +// but at the same time there's a hard cap on the number of transactions that are +// tracked. +func TestTransactionFetcherUnderpricedDoSProtection(t *testing.T) { + // Temporarily disable fetch timeouts as they massively mess up the simulated clock + defer func(timeout time.Duration) { txFetchTimeout = timeout }(txFetchTimeout) + txFetchTimeout = 24 * time.Hour + + // Create a slew of transactions to max out the underpriced set + var txs []*types.Transaction + for i := 0; i < maxTxUnderpricedSetSize+1; i++ { + txs = append(txs, types.NewTransaction(rand.Uint64(), common.Address{byte(rand.Intn(256))}, new(big.Int), 0, new(big.Int), nil)) + } + hashes := make([]common.Hash, len(txs)) + for i, tx := range txs { + hashes[i] = tx.Hash() + } + // Generate a set of steps to announce and deliver the entire set of transactions + var steps []interface{} + for i := 0; i < maxTxUnderpricedSetSize/maxTxRetrievals; i++ { + steps = append(steps, doTxNotify{peer: "A", hashes: hashes[i*maxTxRetrievals : (i+1)*maxTxRetrievals]}) + steps = append(steps, isWaiting(map[string][]common.Hash{ + "A": hashes[i*maxTxRetrievals : (i+1)*maxTxRetrievals], + })) + steps = append(steps, doWait{time: txArriveTimeout, step: true}) + steps = append(steps, isScheduled{ + tracking: map[string][]common.Hash{ + "A": hashes[i*maxTxRetrievals : (i+1)*maxTxRetrievals], + }, + fetching: map[string][]common.Hash{ + "A": hashes[i*maxTxRetrievals : (i+1)*maxTxRetrievals], + }, + }) + steps = append(steps, doTxEnqueue{peer: "A", txs: txs[i*maxTxRetrievals : (i+1)*maxTxRetrievals], direct: true}) + steps = append(steps, isWaiting(nil)) + steps = append(steps, isScheduled{nil, nil, nil}) + steps = append(steps, isUnderpriced((i+1)*maxTxRetrievals)) + } + testTransactionFetcher(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + errs := make([]error, len(txs)) + for i := 0; i < len(errs); i++ { + errs[i] = core.ErrUnderpriced + } + return errs + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: append(steps, []interface{}{ + // The preparation of the test has already been done in `steps`, add the last check + doTxNotify{peer: "A", hashes: []common.Hash{hashes[maxTxUnderpricedSetSize]}}, + doWait{time: txArriveTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{txs[maxTxUnderpricedSetSize]}, direct: true}, + isUnderpriced(maxTxUnderpricedSetSize), + }...), + }) +} + +// Tests that unexpected deliveries don't corrupt the internal state. +func TestTransactionFetcherOutOfBoundDeliveries(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Deliver something out of the blue + isWaiting(nil), + isScheduled{nil, nil, nil}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}, direct: false}, + isWaiting(nil), + isScheduled{nil, nil, nil}, + + // Set up a few hashes into various stages + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[1]}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[2]}}, + + isWaiting(map[string][]common.Hash{ + "A": {testTxsHashes[2]}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0], testTxsHashes[1]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + // Deliver everything and more out of the blue + doTxEnqueue{peer: "B", txs: []*types.Transaction{testTxs[0], testTxs[1], testTxs[2], testTxs[3]}, direct: true}, + isWaiting(nil), + isScheduled{ + tracking: nil, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + }, + }) +} + +// Tests that dropping a peer cleans out all internal data structures in all the +// live or dangling stages. +func TestTransactionFetcherDrop(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Set up a few hashes into various stages + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{{0x02}}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "A", hashes: []common.Hash{{0x03}}}, + + isWaiting(map[string][]common.Hash{ + "A": {{0x03}}, + }), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}, {0x02}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}}, + }, + }, + // Drop the peer and ensure everything's cleaned out + doDrop("A"), + isWaiting(nil), + isScheduled{nil, nil, nil}, + + // Push the node into a dangling (timeout) state + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + fetching: map[string][]common.Hash{ + "A": {testTxsHashes[0]}, + }, + }, + doWait{time: txFetchTimeout, step: true}, + isWaiting(nil), + isScheduled{ + tracking: nil, + fetching: nil, + dangling: map[string][]common.Hash{ + "A": {}, + }, + }, + // Drop the peer and ensure everything's cleaned out + doDrop("A"), + isWaiting(nil), + isScheduled{nil, nil, nil}, + }, + }) +} + +// Tests that dropping a peer instantly reschedules failed announcements to any +// available peer. +func TestTransactionFetcherDropRescheduling(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Set up a few hashes into various stages + doTxNotify{peer: "A", hashes: []common.Hash{{0x01}}}, + doWait{time: txArriveTimeout, step: true}, + doTxNotify{peer: "B", hashes: []common.Hash{{0x01}}}, + + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "A": {{0x01}}, + "B": {{0x01}}, + }, + fetching: map[string][]common.Hash{ + "A": {{0x01}}, + }, + }, + // Drop the peer and ensure everything's cleaned out + doDrop("A"), + isWaiting(nil), + isScheduled{ + tracking: map[string][]common.Hash{ + "B": {{0x01}}, + }, + fetching: map[string][]common.Hash{ + "B": {{0x01}}, + }, + }, + }, + }) +} + +// This test reproduces a crash caught by the fuzzer. The root cause was a +// dangling transaction timing out and clashing on re-add with a concurrently +// announced one. +func TestTransactionFetcherFuzzCrash01(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Get a transaction into fetching mode and make it dangling with a broadcast + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}}, + + // Notify the dangling transaction once more and crash via a timeout + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txFetchTimeout, step: true}, + }, + }) +} + +// This test reproduces a crash caught by the fuzzer. The root cause was a +// dangling transaction getting peer-dropped and clashing on re-add with a +// concurrently announced one. +func TestTransactionFetcherFuzzCrash02(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Get a transaction into fetching mode and make it dangling with a broadcast + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}}, + + // Notify the dangling transaction once more, re-fetch, and crash via a drop and timeout + doTxNotify{peer: "B", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doDrop("A"), + doWait{time: txFetchTimeout, step: true}, + }, + }) +} + +// This test reproduces a crash caught by the fuzzer. The root cause was a +// dangling transaction getting rescheduled via a partial delivery, clashing +// with a concurrent notify. +func TestTransactionFetcherFuzzCrash03(t *testing.T) { + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + ) + }, + steps: []interface{}{ + // Get a transaction into fetching mode and make it dangling with a broadcast + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0], testTxsHashes[1]}}, + doWait{time: txFetchTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0], testTxs[1]}}, + + // Notify the dangling transaction once more, partially deliver, clash&crash with a timeout + doTxNotify{peer: "B", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[1]}, direct: true}, + doWait{time: txFetchTimeout, step: true}, + }, + }) +} + +// This test reproduces a crash caught by the fuzzer. The root cause was a +// dangling transaction getting rescheduled via a disconnect, clashing with +// a concurrent notify. +func TestTransactionFetcherFuzzCrash04(t *testing.T) { + // Create a channel to control when tx requests can fail + proceed := make(chan struct{}) + + testTransactionFetcherParallel(t, txFetcherTest{ + init: func() *TxFetcher { + return NewTxFetcher( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { + <-proceed + return errors.New("peer disconnected") + }, + ) + }, + steps: []interface{}{ + // Get a transaction into fetching mode and make it dangling with a broadcast + doTxNotify{peer: "A", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doTxEnqueue{peer: "A", txs: []*types.Transaction{testTxs[0]}}, + + // Notify the dangling transaction once more, re-fetch, and crash via an in-flight disconnect + doTxNotify{peer: "B", hashes: []common.Hash{testTxsHashes[0]}}, + doWait{time: txArriveTimeout, step: true}, + doFunc(func() { + proceed <- struct{}{} // Allow peer A to return the failure + }), + doWait{time: 0, step: true}, + doWait{time: txFetchTimeout, step: true}, + }, + }) +} + +func testTransactionFetcherParallel(t *testing.T, tt txFetcherTest) { + t.Parallel() + testTransactionFetcher(t, tt) +} + +func testTransactionFetcher(t *testing.T, tt txFetcherTest) { + // Create a fetcher and hook into it's simulated fields + clock := new(mclock.Simulated) + wait := make(chan struct{}) + + fetcher := tt.init() + fetcher.clock = clock + fetcher.step = wait + fetcher.rand = rand.New(rand.NewSource(0x3a29)) + + fetcher.Start() + defer fetcher.Stop() + + defer func() { // drain the wait chan on exit + for { + select { + case <-wait: + default: + return + } + } + }() + + // Crunch through all the test steps and execute them + for i, step := range tt.steps { + switch step := step.(type) { + case doTxNotify: + if err := fetcher.Notify(step.peer, step.hashes); err != nil { + t.Errorf("step %d: %v", i, err) + } + <-wait // Fetcher needs to process this, wait until it's done + select { + case <-wait: + panic("wtf") + case <-time.After(time.Millisecond): + } + + case doTxEnqueue: + if err := fetcher.Enqueue(step.peer, step.txs, step.direct); err != nil { + t.Errorf("step %d: %v", i, err) + } + <-wait // Fetcher needs to process this, wait until it's done + + case doWait: + clock.Run(step.time) + if step.step { + <-wait // Fetcher supposed to do something, wait until it's done + } + + case doDrop: + if err := fetcher.Drop(string(step)); err != nil { + t.Errorf("step %d: %v", i, err) + } + <-wait // Fetcher needs to process this, wait until it's done + + case doFunc: + step() + + case isWaiting: + // We need to check that the waiting list (stage 1) internals + // match with the expected set. Check the peer->hash mappings + // first. + for peer, hashes := range step { + waiting := fetcher.waitslots[peer] + if waiting == nil { + t.Errorf("step %d: peer %s missing from waitslots", i, peer) + continue + } + for _, hash := range hashes { + if _, ok := waiting[hash]; !ok { + t.Errorf("step %d, peer %s: hash %x missing from waitslots", i, peer, hash) + } + } + for hash := range waiting { + if !containsHash(hashes, hash) { + t.Errorf("step %d, peer %s: hash %x extra in waitslots", i, peer, hash) + } + } + } + for peer := range fetcher.waitslots { + if _, ok := step[peer]; !ok { + t.Errorf("step %d: peer %s extra in waitslots", i, peer) + } + } + // Peer->hash sets correct, check the hash->peer and timeout sets + for peer, hashes := range step { + for _, hash := range hashes { + if _, ok := fetcher.waitlist[hash][peer]; !ok { + t.Errorf("step %d, hash %x: peer %s missing from waitlist", i, hash, peer) + } + if _, ok := fetcher.waittime[hash]; !ok { + t.Errorf("step %d: hash %x missing from waittime", i, hash) + } + } + } + for hash, peers := range fetcher.waitlist { + if len(peers) == 0 { + t.Errorf("step %d, hash %x: empty peerset in waitlist", i, hash) + } + for peer := range peers { + if !containsHash(step[peer], hash) { + t.Errorf("step %d, hash %x: peer %s extra in waitlist", i, hash, peer) + } + } + } + for hash := range fetcher.waittime { + var found bool + for _, hashes := range step { + if containsHash(hashes, hash) { + found = true + break + } + } + if !found { + t.Errorf("step %d,: hash %x extra in waittime", i, hash) + } + } + + case isScheduled: + // Check that all scheduled announces are accounted for and no + // extra ones are present. + for peer, hashes := range step.tracking { + scheduled := fetcher.announces[peer] + if scheduled == nil { + t.Errorf("step %d: peer %s missing from announces", i, peer) + continue + } + for _, hash := range hashes { + if _, ok := scheduled[hash]; !ok { + t.Errorf("step %d, peer %s: hash %x missing from announces", i, peer, hash) + } + } + for hash := range scheduled { + if !containsHash(hashes, hash) { + t.Errorf("step %d, peer %s: hash %x extra in announces", i, peer, hash) + } + } + } + for peer := range fetcher.announces { + if _, ok := step.tracking[peer]; !ok { + t.Errorf("step %d: peer %s extra in announces", i, peer) + } + } + // Check that all announces required to be fetching are in the + // appropriate sets + for peer, hashes := range step.fetching { + request := fetcher.requests[peer] + if request == nil { + t.Errorf("step %d: peer %s missing from requests", i, peer) + continue + } + for _, hash := range hashes { + if !containsHash(request.hashes, hash) { + t.Errorf("step %d, peer %s: hash %x missing from requests", i, peer, hash) + } + } + for _, hash := range request.hashes { + if !containsHash(hashes, hash) { + t.Errorf("step %d, peer %s: hash %x extra in requests", i, peer, hash) + } + } + } + for peer := range fetcher.requests { + if _, ok := step.fetching[peer]; !ok { + if _, ok := step.dangling[peer]; !ok { + t.Errorf("step %d: peer %s extra in requests", i, peer) + } + } + } + for peer, hashes := range step.fetching { + for _, hash := range hashes { + if _, ok := fetcher.fetching[hash]; !ok { + t.Errorf("step %d, peer %s: hash %x missing from fetching", i, peer, hash) + } + } + } + for hash := range fetcher.fetching { + var found bool + for _, req := range fetcher.requests { + if containsHash(req.hashes, hash) { + found = true + break + } + } + if !found { + t.Errorf("step %d: hash %x extra in fetching", i, hash) + } + } + for _, hashes := range step.fetching { + for _, hash := range hashes { + alternates := fetcher.alternates[hash] + if alternates == nil { + t.Errorf("step %d: hash %x missing from alternates", i, hash) + continue + } + for peer := range alternates { + if _, ok := fetcher.announces[peer]; !ok { + t.Errorf("step %d: peer %s extra in alternates", i, peer) + continue + } + if _, ok := fetcher.announces[peer][hash]; !ok { + t.Errorf("step %d, peer %s: hash %x extra in alternates", i, hash, peer) + continue + } + } + for p := range fetcher.announced[hash] { + if _, ok := alternates[p]; !ok { + t.Errorf("step %d, hash %x: peer %s missing from alternates", i, hash, p) + continue + } + } + } + } + for peer, hashes := range step.dangling { + request := fetcher.requests[peer] + if request == nil { + t.Errorf("step %d: peer %s missing from requests", i, peer) + continue + } + for _, hash := range hashes { + if !containsHash(request.hashes, hash) { + t.Errorf("step %d, peer %s: hash %x missing from requests", i, peer, hash) + } + } + for _, hash := range request.hashes { + if !containsHash(hashes, hash) { + t.Errorf("step %d, peer %s: hash %x extra in requests", i, peer, hash) + } + } + } + // Check that all transaction announces that are scheduled for + // retrieval but not actively being downloaded are tracked only + // in the stage 2 `announced` map. + var queued []common.Hash + for _, hashes := range step.tracking { + for _, hash := range hashes { + var found bool + for _, hs := range step.fetching { + if containsHash(hs, hash) { + found = true + break + } + } + if !found { + queued = append(queued, hash) + } + } + } + for _, hash := range queued { + if _, ok := fetcher.announced[hash]; !ok { + t.Errorf("step %d: hash %x missing from announced", i, hash) + } + } + for hash := range fetcher.announced { + if !containsHash(queued, hash) { + t.Errorf("step %d: hash %x extra in announced", i, hash) + } + } + + case isUnderpriced: + if fetcher.underpriced.Cardinality() != int(step) { + t.Errorf("step %d: underpriced set size mismatch: have %d, want %d", i, fetcher.underpriced.Cardinality(), step) + } + + default: + t.Fatalf("step %d: unknown step type %T", i, step) + } + // After every step, cross validate the internal uniqueness invariants + // between stage one and stage two. + for hash := range fetcher.waittime { + if _, ok := fetcher.announced[hash]; ok { + t.Errorf("step %d: hash %s present in both stage 1 and 2", i, hash) + } + } + } +} + +// containsHash returns whether a hash is contained within a hash slice. +func containsHash(slice []common.Hash, hash common.Hash) bool { + for _, have := range slice { + if have == hash { + return true + } + } + return false +} diff --git a/eth/filters/api.go b/eth/filters/api.go index 816de4d6..43e63d5b 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -25,73 +25,74 @@ import ( "sync" "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/rpc" -) - -var ( - deadline = 5 * time.Minute // consider a filter inactive if it has not been polled for within deadline + "github.com/ethereum/go-ethereum" + "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/rpc" ) // filter is a helper struct that holds meta information over the filter type // and associated subscription in the event system. type filter struct { typ Type - deadline *time.Timer // filter is inactiv when deadline triggers + deadline *time.Timer // filter is inactive when deadline triggers hashes []common.Hash crit FilterCriteria logs []*types.Log s *Subscription // associated subscription in event system } -// PublicFilterAPI offers support to create and manage filters. This will allow external clients to retrieve various +// FilterAPI offers support to create and manage filters. This will allow external clients to retrieve various // information related to the Ethereum protocol such als blocks, transactions and logs. -type PublicFilterAPI struct { - backend Backend - mux *event.TypeMux - quit chan struct{} - chainDb ethdb.Database +type FilterAPI struct { + sys *FilterSystem events *EventSystem filtersMu sync.Mutex filters map[rpc.ID]*filter + timeout time.Duration } -// NewPublicFilterAPI returns a new PublicFilterAPI instance. -func NewPublicFilterAPI(backend Backend, lightMode bool) *PublicFilterAPI { - api := &PublicFilterAPI{ - backend: backend, - mux: backend.EventMux(), - chainDb: backend.ChainDb(), - events: NewEventSystem(backend.EventMux(), backend, lightMode), +// NewFilterAPI returns a new FilterAPI instance. +func NewFilterAPI(system *FilterSystem, lightMode bool) *FilterAPI { + api := &FilterAPI{ + sys: system, + events: NewEventSystem(system, lightMode), filters: make(map[rpc.ID]*filter), + timeout: system.cfg.Timeout, } - go api.timeoutLoop() + go api.timeoutLoop(system.cfg.Timeout) return api } -// timeoutLoop runs every 5 minutes and deletes filters that have not been recently used. -// Tt is started when the api is created. -func (api *PublicFilterAPI) timeoutLoop() { - ticker := time.NewTicker(5 * time.Minute) +// timeoutLoop runs at the interval set by 'timeout' and deletes filters +// that have not been recently used. It is started when the API is created. +func (api *FilterAPI) timeoutLoop(timeout time.Duration) { + var toUninstall []*Subscription + ticker := time.NewTicker(timeout) + defer ticker.Stop() for { <-ticker.C api.filtersMu.Lock() for id, f := range api.filters { select { case <-f.deadline.C: - f.s.Unsubscribe() + toUninstall = append(toUninstall, f.s) delete(api.filters, id) default: continue } } api.filtersMu.Unlock() + + // Unsubscribes are processed outside the lock to avoid the following scenario: + // event loop attempts broadcasting events to still active filters while + // Unsubscribe is waiting for it to process the uninstall request. + for _, s := range toUninstall { + s.Unsubscribe() + } + toUninstall = nil } } @@ -100,16 +101,14 @@ func (api *PublicFilterAPI) timeoutLoop() { // // It is part of the filter package because this filter can be used through the // `eth_getFilterChanges` polling method that is also used for log filters. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_newpendingtransactionfilter -func (api *PublicFilterAPI) NewPendingTransactionFilter() rpc.ID { +func (api *FilterAPI) NewPendingTransactionFilter() rpc.ID { var ( pendingTxs = make(chan []common.Hash) pendingTxSub = api.events.SubscribePendingTxs(pendingTxs) ) api.filtersMu.Lock() - api.filters[pendingTxSub.ID] = &filter{typ: PendingTransactionsSubscription, deadline: time.NewTimer(deadline), hashes: make([]common.Hash, 0), s: pendingTxSub} + api.filters[pendingTxSub.ID] = &filter{typ: PendingTransactionsSubscription, deadline: time.NewTimer(api.timeout), hashes: make([]common.Hash, 0), s: pendingTxSub} api.filtersMu.Unlock() go func() { @@ -135,7 +134,7 @@ func (api *PublicFilterAPI) NewPendingTransactionFilter() rpc.ID { // NewPendingTransactions creates a subscription that is triggered each time a transaction // enters the transaction pool and was signed from one of the transactions this nodes manages. -func (api *PublicFilterAPI) NewPendingTransactions(ctx context.Context) (*rpc.Subscription, error) { +func (api *FilterAPI) NewPendingTransactions(ctx context.Context) (*rpc.Subscription, error) { notifier, supported := rpc.NotifierFromContext(ctx) if !supported { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported @@ -170,16 +169,14 @@ func (api *PublicFilterAPI) NewPendingTransactions(ctx context.Context) (*rpc.Su // NewBlockFilter creates a filter that fetches blocks that are imported into the chain. // It is part of the filter package since polling goes with eth_getFilterChanges. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_newblockfilter -func (api *PublicFilterAPI) NewBlockFilter() rpc.ID { +func (api *FilterAPI) NewBlockFilter() rpc.ID { var ( headers = make(chan *types.Header) headerSub = api.events.SubscribeNewHeads(headers) ) api.filtersMu.Lock() - api.filters[headerSub.ID] = &filter{typ: BlocksSubscription, deadline: time.NewTimer(deadline), hashes: make([]common.Hash, 0), s: headerSub} + api.filters[headerSub.ID] = &filter{typ: BlocksSubscription, deadline: time.NewTimer(api.timeout), hashes: make([]common.Hash, 0), s: headerSub} api.filtersMu.Unlock() go func() { @@ -204,7 +201,7 @@ func (api *PublicFilterAPI) NewBlockFilter() rpc.ID { } // NewHeads send a notification each time a new (header) block is appended to the chain. -func (api *PublicFilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, error) { +func (api *FilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, error) { notifier, supported := rpc.NotifierFromContext(ctx) if !supported { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported @@ -234,7 +231,7 @@ func (api *PublicFilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, er } // Logs creates a subscription that fires for all new log that match the given filter criteria. -func (api *PublicFilterAPI) Logs(ctx context.Context, crit FilterCriteria) (*rpc.Subscription, error) { +func (api *FilterAPI) Logs(ctx context.Context, crit FilterCriteria) (*rpc.Subscription, error) { notifier, supported := rpc.NotifierFromContext(ctx) if !supported { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported @@ -251,11 +248,11 @@ func (api *PublicFilterAPI) Logs(ctx context.Context, crit FilterCriteria) (*rpc } go func() { - for { select { case logs := <-matchedLogs: for _, log := range logs { + log := log notifier.Notify(rpcSub.ID, &log) } case <-rpcSub.Err(): // client send an unsubscribe request @@ -286,17 +283,15 @@ type FilterCriteria ethereum.FilterQuery // again but with the removed property set to true. // // In case "fromBlock" > "toBlock" an error is returned. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_newfilter -func (api *PublicFilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) { +func (api *FilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) { logs := make(chan []*types.Log) logsSub, err := api.events.SubscribeLogs(ethereum.FilterQuery(crit), logs) if err != nil { - return rpc.ID(""), err + return "", err } api.filtersMu.Lock() - api.filters[logsSub.ID] = &filter{typ: LogsSubscription, crit: crit, deadline: time.NewTimer(deadline), logs: make([]*types.Log, 0), s: logsSub} + api.filters[logsSub.ID] = &filter{typ: LogsSubscription, crit: crit, deadline: time.NewTimer(api.timeout), logs: make([]*types.Log, 0), s: logsSub} api.filtersMu.Unlock() go func() { @@ -321,13 +316,11 @@ func (api *PublicFilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) { } // GetLogs returns logs matching the given argument that are stored within the state. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_getlogs -func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*types.Log, error) { +func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*types.Log, error) { var filter *Filter if crit.BlockHash != nil { // Block filter requested, construct a single-shot filter - filter = NewBlockFilter(api.backend, *crit.BlockHash, crit.Addresses, crit.Topics) + filter = api.sys.NewBlockFilter(*crit.BlockHash, crit.Addresses, crit.Topics) } else { // Convert the RPC block numbers into internal representations begin := rpc.LatestBlockNumber.Int64() @@ -339,7 +332,7 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ end = crit.ToBlock.Int64() } // Construct the range filter - filter = NewRangeFilter(api.backend, begin, end, crit.Addresses, crit.Topics) + filter = api.sys.NewRangeFilter(begin, end, crit.Addresses, crit.Topics) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) @@ -350,9 +343,7 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ } // UninstallFilter removes the filter with the given filter id. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_uninstallfilter -func (api *PublicFilterAPI) UninstallFilter(id rpc.ID) bool { +func (api *FilterAPI) UninstallFilter(id rpc.ID) bool { api.filtersMu.Lock() f, found := api.filters[id] if found { @@ -368,9 +359,7 @@ func (api *PublicFilterAPI) UninstallFilter(id rpc.ID) bool { // GetFilterLogs returns the logs for the filter with the given id. // If the filter could not be found an empty array of logs is returned. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_getfilterlogs -func (api *PublicFilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*types.Log, error) { +func (api *FilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*types.Log, error) { api.filtersMu.Lock() f, found := api.filters[id] api.filtersMu.Unlock() @@ -382,7 +371,7 @@ func (api *PublicFilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*ty var filter *Filter if f.crit.BlockHash != nil { // Block filter requested, construct a single-shot filter - filter = NewBlockFilter(api.backend, *f.crit.BlockHash, f.crit.Addresses, f.crit.Topics) + filter = api.sys.NewBlockFilter(*f.crit.BlockHash, f.crit.Addresses, f.crit.Topics) } else { // Convert the RPC block numbers into internal representations begin := rpc.LatestBlockNumber.Int64() @@ -394,7 +383,7 @@ func (api *PublicFilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*ty end = f.crit.ToBlock.Int64() } // Construct the range filter - filter = NewRangeFilter(api.backend, begin, end, f.crit.Addresses, f.crit.Topics) + filter = api.sys.NewRangeFilter(begin, end, f.crit.Addresses, f.crit.Topics) } // Run the filter and return all the logs logs, err := filter.Logs(ctx) @@ -409,9 +398,7 @@ func (api *PublicFilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*ty // // For pending transaction and block filters the result is []common.Hash. // (pending)Log filters return []Log. -// -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_getfilterchanges -func (api *PublicFilterAPI) GetFilterChanges(id rpc.ID) (interface{}, error) { +func (api *FilterAPI) GetFilterChanges(id rpc.ID) (interface{}, error) { api.filtersMu.Lock() defer api.filtersMu.Unlock() @@ -421,14 +408,14 @@ func (api *PublicFilterAPI) GetFilterChanges(id rpc.ID) (interface{}, error) { // receive timer value and reset timer <-f.deadline.C } - f.deadline.Reset(deadline) + f.deadline.Reset(api.timeout) switch f.typ { case PendingTransactionsSubscription, BlocksSubscription: hashes := f.hashes f.hashes = nil return returnHashes(hashes), nil - case LogsSubscription: + case LogsSubscription, MinedAndPendingLogsSubscription: logs := f.logs f.logs = nil return returnLogs(logs), nil diff --git a/eth/filters/api_test.go b/eth/filters/api_test.go index 92a91aa2..0a80d0f8 100644 --- a/eth/filters/api_test.go +++ b/eth/filters/api_test.go @@ -21,8 +21,8 @@ import ( "fmt" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rpc" ) func TestUnmarshalJSONNewFilterArgs(t *testing.T) { @@ -56,7 +56,7 @@ func TestUnmarshalJSONNewFilterArgs(t *testing.T) { // from, to block number var test1 FilterCriteria - vector := fmt.Sprintf(`{"fromBlock":"0x%x","toBlock":"0x%x"}`, fromBlock, toBlock) + vector := fmt.Sprintf(`{"fromBlock":"%#x","toBlock":"%#x"}`, fromBlock, toBlock) if err := json.Unmarshal([]byte(vector), &test1); err != nil { t.Fatal(err) } diff --git a/eth/filters/bench_test.go b/eth/filters/bench_test.go index 6ec3330a..73b96b77 100644 --- a/eth/filters/bench_test.go +++ b/eth/filters/bench_test.go @@ -22,14 +22,13 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/node" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/core/bloombits" + "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/node" ) func BenchmarkBloomBits512(b *testing.B) { @@ -63,10 +62,11 @@ func BenchmarkBloomBits32k(b *testing.B) { const benchFilterCnt = 2000 func benchmarkBloomBits(b *testing.B, sectionSize uint64) { + b.Skip("test disabled: this tests presume (and modify) an existing datadir.") benchDataDir := node.DefaultDataDir() + "/geth/chaindata" b.Log("Running bloombits benchmark section size:", sectionSize) - db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "", false) if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } @@ -93,9 +93,9 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { var header *types.Header for i := sectionIdx * sectionSize; i < (sectionIdx+1)*sectionSize; i++ { hash := rawdb.ReadCanonicalHash(db, i) - header = rawdb.ReadHeader(db, hash, i) - if header == nil { + if header = rawdb.ReadHeader(db, hash, i); header == nil { b.Fatalf("Error creating bloomBits data") + return } bc.AddBloom(uint(i-sectionIdx*sectionSize), header.Bloom) } @@ -122,34 +122,38 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { b.Log("Running filter benchmarks...") start = time.Now() - mux := new(event.TypeMux) - var backend *testBackend + var ( + backend *testBackend + sys *FilterSystem + ) for i := 0; i < benchFilterCnt; i++ { if i%20 == 0 { db.Close() - db, _ = rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") - backend = &testBackend{mux, db, cnt, new(event.Feed), new(event.Feed), new(event.Feed), new(event.Feed)} + db, _ = rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "", false) + backend = &testBackend{db: db, sections: cnt} + sys = NewFilterSystem(backend, Config{}) } var addr common.Address addr[0] = byte(i) addr[1] = byte(i / 256) - filter := NewRangeFilter(backend, 0, int64(cnt*sectionSize-1), []common.Address{addr}, nil) + filter := sys.NewRangeFilter(0, int64(cnt*sectionSize-1), []common.Address{addr}, nil) if _, err := filter.Logs(context.Background()); err != nil { - b.Error("filter.Find error:", err) + b.Error("filter.Logs error:", err) } } + d = time.Since(start) 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() } -var bloomBitsPrefix = []byte("bloomBits-") - +//nolint:unused func clearBloomBits(db ethdb.Database) { + var bloomBitsPrefix = []byte("bloomBits-") fmt.Println("Clearing bloombits data...") - it := db.NewIteratorWithPrefix(bloomBitsPrefix) + it := db.NewIterator(bloomBitsPrefix, nil) for it.Next() { db.Delete(it.Key()) } @@ -157,9 +161,10 @@ func clearBloomBits(db ethdb.Database) { } func BenchmarkNoBloomBits(b *testing.B) { + b.Skip("test disabled: this tests presume (and modify) an existing datadir.") benchDataDir := node.DefaultDataDir() + "/geth/chaindata" b.Log("Running benchmark without bloombits") - db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "", false) if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } @@ -171,11 +176,11 @@ func BenchmarkNoBloomBits(b *testing.B) { clearBloomBits(db) + _, sys := newTestFilterSystem(b, db, Config{}) + 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 := sys.NewRangeFilter(0, int64(*headNum), []common.Address{{}}, nil) filter.Logs(context.Background()) d := time.Since(start) b.Log("Finished running filter benchmarks") diff --git a/eth/filters/filter.go b/eth/filters/filter.go index a7a98317..0a70c9ec 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -21,37 +21,16 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/bloombits" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rpc" ) -type Backend interface { - ChainDb() ethdb.Database - EventMux() *event.TypeMux - HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) - HeaderByHash(ctx context.Context, blockHash common.Hash) (*types.Header, error) - GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error) - GetLogs(ctx context.Context, blockHash common.Hash) ([][]*types.Log, error) - - SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription - SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription - SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription - SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription - - BloomStatus() (uint64, uint64) - ServiceFilter(ctx context.Context, session *bloombits.MatcherSession) -} - // Filter can be used to retrieve and filter logs. type Filter struct { - backend Backend + sys *FilterSystem - db ethdb.Database addresses []common.Address topics [][]common.Hash @@ -63,7 +42,7 @@ type Filter struct { // NewRangeFilter creates a new filter which uses a bloom filter on blocks to // figure out whether a particular block is interesting or not. -func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Address, topics [][]common.Hash) *Filter { +func (sys *FilterSystem) NewRangeFilter(begin, end int64, addresses []common.Address, topics [][]common.Hash) *Filter { // Flatten the address and topic filter clauses into a single bloombits filter // system. Since the bloombits are not positional, nil topics are permitted, // which get flattened into a nil byte slice. @@ -82,10 +61,10 @@ func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Addres } filters = append(filters, filter) } - size, _ := backend.BloomStatus() + size, _ := sys.backend.BloomStatus() // Create a generic filter and convert it into a range filter - filter := newFilter(backend, addresses, topics) + filter := newFilter(sys, addresses, topics) filter.matcher = bloombits.NewMatcher(size, filters) filter.begin = begin @@ -96,21 +75,20 @@ func NewRangeFilter(backend Backend, begin, end int64, addresses []common.Addres // NewBlockFilter creates a new filter which directly inspects the contents of // a block to figure out whether it is interesting or not. -func NewBlockFilter(backend Backend, block common.Hash, addresses []common.Address, topics [][]common.Hash) *Filter { +func (sys *FilterSystem) NewBlockFilter(block common.Hash, addresses []common.Address, topics [][]common.Hash) *Filter { // Create a generic filter and convert it into a block filter - filter := newFilter(backend, addresses, topics) + filter := newFilter(sys, addresses, topics) filter.block = block return filter } // newFilter creates a generic filter that can either filter based on a block hash, // or based on range queries. The search criteria needs to be explicitly set. -func newFilter(backend Backend, addresses []common.Address, topics [][]common.Hash) *Filter { +func newFilter(sys *FilterSystem, addresses []common.Address, topics [][]common.Hash) *Filter { return &Filter{ - backend: backend, + sys: sys, addresses: addresses, topics: topics, - db: backend.ChainDb(), } } @@ -119,35 +97,44 @@ func newFilter(backend Backend, addresses []common.Address, topics [][]common.Ha func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { // If we're doing singleton block filtering, execute and return if f.block != (common.Hash{}) { - header, err := f.backend.HeaderByHash(ctx, f.block) + header, err := f.sys.backend.HeaderByHash(ctx, f.block) if err != nil { return nil, err } if header == nil { return nil, errors.New("unknown block") } - return f.blockLogs(ctx, header) + return f.blockLogs(ctx, header, false) + } + // Short-cut if all we care about is pending logs + if f.begin == rpc.PendingBlockNumber.Int64() { + if f.end != rpc.PendingBlockNumber.Int64() { + return nil, errors.New("invalid block range") + } + return f.pendingLogs() } // Figure out the limits of the filter range - header, _ := f.backend.HeaderByNumber(ctx, rpc.LatestBlockNumber) + header, _ := f.sys.backend.HeaderByNumber(ctx, rpc.LatestBlockNumber) if header == nil { return nil, nil } - head := header.Number.Uint64() - - if f.begin == -1 { + var ( + head = header.Number.Uint64() + end = uint64(f.end) + pending = f.end == rpc.PendingBlockNumber.Int64() + ) + if f.begin == rpc.LatestBlockNumber.Int64() { f.begin = int64(head) } - end := uint64(f.end) - if f.end == -1 { + if f.end == rpc.LatestBlockNumber.Int64() || f.end == rpc.PendingBlockNumber.Int64() { end = head } // Gather all indexed logs, and finish with non indexed ones var ( - logs []*types.Log - err error + logs []*types.Log + err error + size, sections = f.sys.backend.BloomStatus() ) - size, sections := f.backend.BloomStatus() if indexed := sections * size; indexed > uint64(f.begin) { if indexed > end { logs, err = f.indexedLogs(ctx, end) @@ -160,6 +147,13 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { } rest, err := f.unindexedLogs(ctx, end) logs = append(logs, rest...) + if pending { + pendingLogs, err := f.pendingLogs() + if err != nil { + return nil, err + } + logs = append(logs, pendingLogs...) + } return logs, err } @@ -175,7 +169,7 @@ func (f *Filter) indexedLogs(ctx context.Context, end uint64) ([]*types.Log, err } defer session.Close() - f.backend.ServiceFilter(ctx, session) + f.sys.backend.ServiceFilter(ctx, session) // Iterate over the matches until exhausted or context closed var logs []*types.Log @@ -194,11 +188,11 @@ func (f *Filter) indexedLogs(ctx context.Context, end uint64) ([]*types.Log, err f.begin = int64(number) + 1 // Retrieve the suggested block and pull any truly matching logs - header, err := f.backend.HeaderByNumber(ctx, rpc.BlockNumber(number)) + header, err := f.sys.backend.HeaderByNumber(ctx, rpc.BlockNumber(number)) if header == nil || err != nil { return logs, err } - found, err := f.checkMatches(ctx, header) + found, err := f.blockLogs(ctx, header, true) if err != nil { return logs, err } @@ -210,17 +204,17 @@ func (f *Filter) indexedLogs(ctx context.Context, end uint64) ([]*types.Log, err } } -// indexedLogs returns the logs matching the filter criteria based on raw block +// unindexedLogs returns the logs matching the filter criteria based on raw block // iteration and bloom matching. func (f *Filter) unindexedLogs(ctx context.Context, end uint64) ([]*types.Log, error) { var logs []*types.Log for ; f.begin <= int64(end); f.begin++ { - header, err := f.backend.HeaderByNumber(ctx, rpc.BlockNumber(f.begin)) + header, err := f.sys.backend.HeaderByNumber(ctx, rpc.BlockNumber(f.begin)) if header == nil || err != nil { return logs, err } - found, err := f.blockLogs(ctx, header) + found, err := f.blockLogs(ctx, header, false) if err != nil { return logs, err } @@ -230,34 +224,34 @@ func (f *Filter) unindexedLogs(ctx context.Context, end uint64) ([]*types.Log, e } // blockLogs returns the logs matching the filter criteria within a single block. -func (f *Filter) blockLogs(ctx context.Context, header *types.Header) (logs []*types.Log, err error) { - if bloomFilter(header.Bloom, f.addresses, f.topics) { - found, err := f.checkMatches(ctx, header) +func (f *Filter) blockLogs(ctx context.Context, header *types.Header, skipBloom bool) ([]*types.Log, error) { + // Fast track: no filtering criteria + if len(f.addresses) == 0 && len(f.topics) == 0 { + list, err := f.sys.cachedGetLogs(ctx, header.Hash(), header.Number.Uint64()) if err != nil { - return logs, err + return nil, err } - logs = append(logs, found...) + return flatten(list), nil + } else if skipBloom || bloomFilter(header.Bloom, f.addresses, f.topics) { + return f.checkMatches(ctx, header) } - return logs, nil + return nil, nil } // checkMatches checks if the receipts belonging to the given header contain any log events that // match the filter criteria. This function is called when the bloom filter signals a potential match. -func (f *Filter) checkMatches(ctx context.Context, header *types.Header) (logs []*types.Log, err error) { - // Get the logs of the block - logsList, err := f.backend.GetLogs(ctx, header.Hash()) +func (f *Filter) checkMatches(ctx context.Context, header *types.Header) ([]*types.Log, error) { + logsList, err := f.sys.cachedGetLogs(ctx, header.Hash(), header.Number.Uint64()) if err != nil { return nil, err } - var unfiltered []*types.Log - for _, logs := range logsList { - unfiltered = append(unfiltered, logs...) - } - logs = filterLogs(unfiltered, nil, nil, f.addresses, f.topics) + + unfiltered := flatten(logsList) + logs := filterLogs(unfiltered, nil, nil, f.addresses, f.topics) if len(logs) > 0 { // We have matching logs, check if we need to resolve full logs via the light client if logs[0].TxHash == (common.Hash{}) { - receipts, err := f.backend.GetReceipts(ctx, header.Hash()) + receipts, err := f.sys.backend.GetReceipts(ctx, header.Hash()) if err != nil { return nil, err } @@ -272,6 +266,19 @@ func (f *Filter) checkMatches(ctx context.Context, header *types.Header) (logs [ return nil, nil } +// pendingLogs returns the logs matching the filter criteria within the pending block. +func (f *Filter) pendingLogs() ([]*types.Log, error) { + block, receipts := f.sys.backend.PendingBlockAndReceipts() + if bloomFilter(block.Bloom(), f.addresses, f.topics) { + var unfiltered []*types.Log + for _, r := range receipts { + unfiltered = append(unfiltered, r.Logs...) + } + return filterLogs(unfiltered, nil, nil, f.addresses, f.topics), nil + } + return nil, nil +} + func includes(addresses []common.Address, a common.Address) bool { for _, addr := range addresses { if addr == a { @@ -299,7 +306,7 @@ Logs: } // If the to filtered topics is greater than the amount of topics in logs, skip. if len(topics) > len(log.Topics) { - continue Logs + continue } for i, sub := range topics { match := len(sub) == 0 // empty rule set == wildcard @@ -346,3 +353,11 @@ func bloomFilter(bloom types.Bloom, addresses []common.Address, topics [][]commo } return true } + +func flatten(list [][]*types.Log) []*types.Log { + var flat []*types.Log + for _, logs := range list { + flat = append(flat, logs...) + } + return flat +} diff --git a/eth/filters/filter_system.go b/eth/filters/filter_system.go index 81edac1e..79a9b089 100644 --- a/eth/filters/filter_system.go +++ b/eth/filters/filter_system.go @@ -20,21 +20,97 @@ package filters import ( "context" - "errors" "fmt" "sync" "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum" + "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/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + lru "github.com/hashicorp/golang-lru" ) +// Config represents the configuration of the filter system. +type Config struct { + LogCacheSize int // maximum number of cached blocks (default: 32) + Timeout time.Duration // how long filters stay active (default: 5min) +} + +func (cfg Config) withDefaults() Config { + if cfg.Timeout == 0 { + cfg.Timeout = 5 * time.Minute + } + if cfg.LogCacheSize == 0 { + cfg.LogCacheSize = 32 + } + return cfg +} + +type Backend interface { + ChainDb() ethdb.Database + HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) + HeaderByHash(ctx context.Context, blockHash common.Hash) (*types.Header, error) + GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error) + GetLogs(ctx context.Context, blockHash common.Hash, number uint64) ([][]*types.Log, error) + PendingBlockAndReceipts() (*types.Block, types.Receipts) + + SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription + SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription + SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription + SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription + SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription + + BloomStatus() (uint64, uint64) + ServiceFilter(ctx context.Context, session *bloombits.MatcherSession) +} + +// FilterSystem holds resources shared by all filters. +type FilterSystem struct { + backend Backend + logsCache *lru.Cache + cfg *Config +} + +// NewFilterSystem creates a filter system. +func NewFilterSystem(backend Backend, config Config) *FilterSystem { + config = config.withDefaults() + + cache, err := lru.New(config.LogCacheSize) + if err != nil { + panic(err) + } + return &FilterSystem{ + backend: backend, + logsCache: cache, + cfg: &config, + } +} + +// cachedGetLogs loads block logs from the backend and caches the result. +func (sys *FilterSystem) cachedGetLogs(ctx context.Context, blockHash common.Hash, number uint64) ([][]*types.Log, error) { + cached, ok := sys.logsCache.Get(blockHash) + if ok { + return cached.([][]*types.Log), nil + } + + logs, err := sys.backend.GetLogs(ctx, blockHash, number) + if err != nil { + return nil, err + } + if logs == nil { + return nil, fmt.Errorf("failed to get logs for block #%d (0x%s)", number, blockHash.TerminalString()) + } + sys.logsCache.Add(blockHash, logs) + return logs, nil +} + // Type determines the kind of filter and is used to put the filter in to // the correct bucket when added. type Type byte @@ -58,7 +134,6 @@ const ( ) const ( - // txChanSize is the size of channel listening to NewTxsEvent. // The number is referenced from the size of tx pool. txChanSize = 4096 @@ -70,10 +145,6 @@ const ( chainEvChanSize = 10 ) -var ( - ErrInvalidSubscriptionID = errors.New("invalid id") -) - type subscription struct { id rpc.ID typ Type @@ -89,25 +160,26 @@ type subscription struct { // EventSystem creates subscriptions, processes events and broadcasts them to the // subscription which match the subscription criteria. type EventSystem struct { - mux *event.TypeMux backend Backend + sys *FilterSystem lightMode bool lastHead *types.Header // Subscriptions - txsSub event.Subscription // Subscription for new transaction event - logsSub event.Subscription // Subscription for new log event - rmLogsSub event.Subscription // Subscription for removed log event - chainSub event.Subscription // Subscription for new chain event - pendingLogSub *event.TypeMuxSubscription // Subscription for pending log event + txsSub event.Subscription // Subscription for new transaction event + logsSub event.Subscription // Subscription for new log event + rmLogsSub event.Subscription // Subscription for removed log event + pendingLogsSub event.Subscription // Subscription for pending log event + chainSub event.Subscription // Subscription for new chain event // Channels - install chan *subscription // install filter for event notification - uninstall chan *subscription // remove filter for event notification - txsCh chan core.NewTxsEvent // Channel to receive new transactions event - logsCh chan []*types.Log // Channel to receive new log event - rmLogsCh chan core.RemovedLogsEvent // Channel to receive removed log event - chainCh chan core.ChainEvent // Channel to receive new chain event + install chan *subscription // install filter for event notification + uninstall chan *subscription // remove filter for event notification + txsCh chan core.NewTxsEvent // Channel to receive new transactions event + logsCh chan []*types.Log // Channel to receive new log event + pendingLogsCh chan []*types.Log // Channel to receive new log event + rmLogsCh chan core.RemovedLogsEvent // Channel to receive removed log event + chainCh chan core.ChainEvent // Channel to receive new chain event } // NewEventSystem creates a new manager that listens for event on the given mux, @@ -116,17 +188,18 @@ type EventSystem struct { // // The returned manager has a loop that needs to be stopped with the Stop function // or by stopping the given mux. -func NewEventSystem(mux *event.TypeMux, backend Backend, lightMode bool) *EventSystem { +func NewEventSystem(sys *FilterSystem, lightMode bool) *EventSystem { m := &EventSystem{ - mux: mux, - backend: backend, - lightMode: lightMode, - install: make(chan *subscription), - uninstall: make(chan *subscription), - txsCh: make(chan core.NewTxsEvent, txChanSize), - logsCh: make(chan []*types.Log, logsChanSize), - rmLogsCh: make(chan core.RemovedLogsEvent, rmLogsChanSize), - chainCh: make(chan core.ChainEvent, chainEvChanSize), + sys: sys, + backend: sys.backend, + lightMode: lightMode, + install: make(chan *subscription), + uninstall: make(chan *subscription), + txsCh: make(chan core.NewTxsEvent, txChanSize), + logsCh: make(chan []*types.Log, logsChanSize), + rmLogsCh: make(chan core.RemovedLogsEvent, rmLogsChanSize), + pendingLogsCh: make(chan []*types.Log, logsChanSize), + chainCh: make(chan core.ChainEvent, chainEvChanSize), } // Subscribe events @@ -134,12 +207,10 @@ func NewEventSystem(mux *event.TypeMux, backend Backend, lightMode bool) *EventS m.logsSub = m.backend.SubscribeLogsEvent(m.logsCh) m.rmLogsSub = m.backend.SubscribeRemovedLogsEvent(m.rmLogsCh) m.chainSub = m.backend.SubscribeChainEvent(m.chainCh) - // TODO(rjl493456442): use feed to subscribe pending log event - m.pendingLogSub = m.mux.Subscribe(core.PendingLogsEvent{}) + m.pendingLogsSub = m.backend.SubscribePendingLogsEvent(m.pendingLogsCh) // Make sure none of the subscriptions are empty - if m.txsSub == nil || m.logsSub == nil || m.rmLogsSub == nil || m.chainSub == nil || - m.pendingLogSub.Closed() { + if m.txsSub == nil || m.logsSub == nil || m.rmLogsSub == nil || m.chainSub == nil || m.pendingLogsSub == nil { log.Crit("Subscribe for event system failed") } @@ -265,7 +336,7 @@ func (es *EventSystem) subscribeLogs(crit ethereum.FilterQuery, logs chan []*typ return es.subscribe(sub) } -// subscribePendingLogs creates a subscription that writes transaction hashes for +// subscribePendingLogs creates a subscription that writes contract event logs for // transactions that enter the transaction pool. func (es *EventSystem) subscribePendingLogs(crit ethereum.FilterQuery, logs chan []*types.Log) *Subscription { sub := &subscription{ @@ -316,58 +387,61 @@ func (es *EventSystem) SubscribePendingTxs(hashes chan []common.Hash) *Subscript type filterIndex map[Type]map[rpc.ID]*subscription -// broadcast event to filters that match criteria. -func (es *EventSystem) broadcast(filters filterIndex, ev interface{}) { - if ev == nil { +func (es *EventSystem) handleLogs(filters filterIndex, ev []*types.Log) { + if len(ev) == 0 { return } + for _, f := range filters[LogsSubscription] { + matchedLogs := filterLogs(ev, f.logsCrit.FromBlock, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics) + if len(matchedLogs) > 0 { + f.logs <- matchedLogs + } + } +} - switch e := ev.(type) { - case []*types.Log: - if len(e) > 0 { - for _, f := range filters[LogsSubscription] { - if matchedLogs := filterLogs(e, f.logsCrit.FromBlock, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics); len(matchedLogs) > 0 { - f.logs <- matchedLogs - } - } +func (es *EventSystem) handlePendingLogs(filters filterIndex, ev []*types.Log) { + if len(ev) == 0 { + return + } + for _, f := range filters[PendingLogsSubscription] { + matchedLogs := filterLogs(ev, nil, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics) + if len(matchedLogs) > 0 { + f.logs <- matchedLogs } - case core.RemovedLogsEvent: - for _, f := range filters[LogsSubscription] { - if matchedLogs := filterLogs(e.Logs, f.logsCrit.FromBlock, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics); len(matchedLogs) > 0 { - f.logs <- matchedLogs - } + } +} + +func (es *EventSystem) handleRemovedLogs(filters filterIndex, ev core.RemovedLogsEvent) { + for _, f := range filters[LogsSubscription] { + matchedLogs := filterLogs(ev.Logs, f.logsCrit.FromBlock, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics) + if len(matchedLogs) > 0 { + f.logs <- matchedLogs } - case *event.TypeMuxEvent: - if muxe, ok := e.Data.(core.PendingLogsEvent); ok { - for _, f := range filters[PendingLogsSubscription] { - if e.Time.After(f.created) { - if matchedLogs := filterLogs(muxe.Logs, nil, f.logsCrit.ToBlock, f.logsCrit.Addresses, f.logsCrit.Topics); len(matchedLogs) > 0 { - f.logs <- matchedLogs - } + } +} + +func (es *EventSystem) handleTxsEvent(filters filterIndex, ev core.NewTxsEvent) { + hashes := make([]common.Hash, 0, len(ev.Txs)) + for _, tx := range ev.Txs { + hashes = append(hashes, tx.Hash()) + } + for _, f := range filters[PendingTransactionsSubscription] { + f.hashes <- hashes + } +} + +func (es *EventSystem) handleChainEvent(filters filterIndex, ev core.ChainEvent) { + for _, f := range filters[BlocksSubscription] { + f.headers <- ev.Block.Header() + } + if es.lightMode && len(filters[LogsSubscription]) > 0 { + es.lightFilterNewHead(ev.Block.Header(), func(header *types.Header, remove bool) { + for _, f := range filters[LogsSubscription] { + if matchedLogs := es.lightFilterLogs(header, f.logsCrit.Addresses, f.logsCrit.Topics, remove); len(matchedLogs) > 0 { + f.logs <- matchedLogs } } - } - case core.NewTxsEvent: - hashes := make([]common.Hash, 0, len(e.Txs)) - for _, tx := range e.Txs { - hashes = append(hashes, tx.Hash()) - } - for _, f := range filters[PendingTransactionsSubscription] { - f.hashes <- hashes - } - case core.ChainEvent: - for _, f := range filters[BlocksSubscription] { - f.headers <- e.Block.Header() - } - if es.lightMode && len(filters[LogsSubscription]) > 0 { - es.lightFilterNewHead(e.Block.Header(), func(header *types.Header, remove bool) { - for _, f := range filters[LogsSubscription] { - if matchedLogs := es.lightFilterLogs(header, f.logsCrit.Addresses, f.logsCrit.Topics, remove); len(matchedLogs) > 0 { - f.logs <- matchedLogs - } - } - }) - } + }) } } @@ -410,7 +484,7 @@ func (es *EventSystem) lightFilterLogs(header *types.Header, addresses []common. // Get the logs of the block ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) defer cancel() - logsList, err := es.backend.GetLogs(ctx, header.Hash()) + logsList, err := es.sys.cachedGetLogs(ctx, header.Hash(), header.Number.Uint64()) if err != nil { return nil } @@ -448,10 +522,10 @@ func (es *EventSystem) lightFilterLogs(header *types.Header, addresses []common. func (es *EventSystem) eventLoop() { // Ensure all subscriptions get cleaned up defer func() { - es.pendingLogSub.Unsubscribe() es.txsSub.Unsubscribe() es.logsSub.Unsubscribe() es.rmLogsSub.Unsubscribe() + es.pendingLogsSub.Unsubscribe() es.chainSub.Unsubscribe() }() @@ -462,20 +536,16 @@ func (es *EventSystem) eventLoop() { for { select { - // Handle subscribed events case ev := <-es.txsCh: - es.broadcast(index, ev) + es.handleTxsEvent(index, ev) case ev := <-es.logsCh: - es.broadcast(index, ev) + es.handleLogs(index, ev) case ev := <-es.rmLogsCh: - es.broadcast(index, ev) + es.handleRemovedLogs(index, ev) + case ev := <-es.pendingLogsCh: + es.handlePendingLogs(index, ev) case ev := <-es.chainCh: - es.broadcast(index, ev) - case ev, active := <-es.pendingLogSub.Chan(): - if !active { // system stopped - return - } - es.broadcast(index, ev) + es.handleChainEvent(index, ev) case f := <-es.install: if f.typ == MinedAndPendingLogsSubscription { diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index 7dae6e00..51bda29b 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -22,40 +22,37 @@ import ( "math/big" "math/rand" "reflect" + "runtime" "testing" "time" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "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/bloombits" + "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" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) type testBackend struct { - mux *event.TypeMux - db ethdb.Database - sections uint64 - txFeed *event.Feed - rmLogsFeed *event.Feed - logsFeed *event.Feed - chainFeed *event.Feed + db ethdb.Database + sections uint64 + txFeed event.Feed + logsFeed event.Feed + rmLogsFeed event.Feed + pendingLogsFeed event.Feed + chainFeed event.Feed } func (b *testBackend) ChainDb() ethdb.Database { return b.db } -func (b *testBackend) EventMux() *event.TypeMux { - return b.mux -} - func (b *testBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) { var ( hash common.Hash @@ -90,20 +87,15 @@ func (b *testBackend) GetReceipts(ctx context.Context, hash common.Hash) (types. return nil, nil } -func (b *testBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) { - number := rawdb.ReadHeaderNumber(b.db, hash) - if number == nil { - return nil, nil - } - receipts := rawdb.ReadReceipts(b.db, hash, *number, params.TestChainConfig) - - logs := make([][]*types.Log, len(receipts)) - for i, receipt := range receipts { - logs[i] = receipt.Logs - } +func (b *testBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, error) { + logs := rawdb.ReadLogs(b.db, hash, number, params.TestChainConfig) return logs, nil } +func (b *testBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + return nil, nil +} + func (b *testBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { return b.txFeed.Subscribe(ch) } @@ -116,6 +108,10 @@ func (b *testBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscript return b.logsFeed.Subscribe(ch) } +func (b *testBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { + return b.pendingLogsFeed.Subscribe(ch) +} + func (b *testBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { return b.chainFeed.Subscribe(ch) } @@ -151,6 +147,12 @@ func (b *testBackend) ServiceFilter(ctx context.Context, session *bloombits.Matc }() } +func newTestFilterSystem(t testing.TB, db ethdb.Database, cfg Config) (*testBackend, *FilterSystem) { + backend := &testBackend{db: db} + sys := NewFilterSystem(backend, cfg) + return backend, sys +} + // TestBlockSubscription tests if a block subscription returns block hashes for posted chain events. // It creates multiple subscriptions: // - one at the start and should receive all posted chain events and a second (blockHashes) @@ -160,17 +162,12 @@ func TestBlockSubscription(t *testing.T) { t.Parallel() var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) - genesis = new(core.Genesis).MustCommit(db) - chain, _ = core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 10, func(i int, gen *core.BlockGen) {}) - chainEvents = []core.ChainEvent{} + db = rawdb.NewMemoryDatabase() + backend, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) + genesis = (&core.Genesis{BaseFee: big.NewInt(params.InitialBaseFee)}).MustCommit(db) + chain, _ = core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 10, func(i int, gen *core.BlockGen) {}) + chainEvents = []core.ChainEvent{} ) for _, blk := range chain { @@ -205,7 +202,7 @@ func TestBlockSubscription(t *testing.T) { time.Sleep(1 * time.Second) for _, e := range chainEvents { - chainFeed.Send(e) + backend.chainFeed.Send(e) } <-sub0.Err() @@ -217,14 +214,9 @@ func TestPendingTxFilter(t *testing.T) { t.Parallel() var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) + db = rawdb.NewMemoryDatabase() + backend, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) transactions = []*types.Transaction{ types.NewTransaction(0, common.HexToAddress("0xb794f5ea0ba39494ce83a213fffba74279579268"), new(big.Int), 0, new(big.Int), nil), @@ -240,7 +232,7 @@ func TestPendingTxFilter(t *testing.T) { fid0 := api.NewPendingTransactionFilter() time.Sleep(1 * time.Second) - txFeed.Send(core.NewTxsEvent{Txs: transactions}) + backend.txFeed.Send(core.NewTxsEvent{Txs: transactions}) timeout := time.Now().Add(1 * time.Second) for { @@ -277,14 +269,9 @@ func TestPendingTxFilter(t *testing.T) { // If not it must return an error. func TestLogFilterCreation(t *testing.T) { var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) + db = rawdb.NewMemoryDatabase() + _, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) testCases = []struct { crit FilterCriteria @@ -310,12 +297,15 @@ func TestLogFilterCreation(t *testing.T) { ) for i, test := range testCases { - _, err := api.NewFilter(test.crit) - if test.success && err != nil { + id, err := api.NewFilter(test.crit) + if err != nil && test.success { t.Errorf("expected filter creation for case %d to success, got %v", i, err) } - if !test.success && err == nil { - t.Errorf("expected testcase %d to fail with an error", i) + if err == nil { + api.UninstallFilter(id) + if !test.success { + t.Errorf("expected testcase %d to fail with an error", i) + } } } } @@ -326,14 +316,9 @@ func TestInvalidLogFilterCreation(t *testing.T) { t.Parallel() var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) + db = rawdb.NewMemoryDatabase() + _, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) ) // different situations where log filter creation should fail. @@ -353,15 +338,10 @@ func TestInvalidLogFilterCreation(t *testing.T) { func TestInvalidGetLogsRequest(t *testing.T) { var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) - blockHash = common.HexToHash("0x1111111111111111111111111111111111111111111111111111111111111111") + db = rawdb.NewMemoryDatabase() + _, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) + blockHash = common.HexToHash("0x1111111111111111111111111111111111111111111111111111111111111111") ) // Reason: Cannot specify both BlockHash and FromBlock/ToBlock) @@ -383,14 +363,9 @@ func TestLogFilter(t *testing.T) { t.Parallel() var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) + db = rawdb.NewMemoryDatabase() + backend, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) firstAddr = common.HexToAddress("0x1111111111111111111111111111111111111111") secondAddr = common.HexToAddress("0x2222222222222222222222222222222222222222") @@ -400,7 +375,7 @@ func TestLogFilter(t *testing.T) { secondTopic = common.HexToHash("0x2222222222222222222222222222222222222222222222222222222222222222") notUsedTopic = common.HexToHash("0x9999999999999999999999999999999999999999999999999999999999999999") - // posted twice, once as vm.Logs and once as core.PendingLogsEvent + // posted twice, once as regular logs and once as pending logs. allLogs = []*types.Log{ {Address: firstAddr}, {Address: firstAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 1}, @@ -453,11 +428,11 @@ func TestLogFilter(t *testing.T) { // raise events time.Sleep(1 * time.Second) - if nsend := logsFeed.Send(allLogs); nsend == 0 { - t.Fatal("Shoud have at least one subscription") + if nsend := backend.logsFeed.Send(allLogs); nsend == 0 { + t.Fatal("Logs event not delivered") } - if err := mux.Post(core.PendingLogsEvent{Logs: allLogs}); err != nil { - t.Fatal(err) + if nsend := backend.pendingLogsFeed.Send(allLogs); nsend == 0 { + t.Fatal("Pending logs event not delivered") } for i, tt := range testCases { @@ -502,14 +477,9 @@ func TestPendingLogsSubscription(t *testing.T) { t.Parallel() var ( - mux = new(event.TypeMux) - db = rawdb.NewMemoryDatabase() - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - api = NewPublicFilterAPI(backend, false) + db = rawdb.NewMemoryDatabase() + backend, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) firstAddr = common.HexToAddress("0x1111111111111111111111111111111111111111") secondAddr = common.HexToAddress("0x2222222222222222222222222222222222222222") @@ -521,50 +491,95 @@ func TestPendingLogsSubscription(t *testing.T) { fourthTopic = common.HexToHash("0x4444444444444444444444444444444444444444444444444444444444444444") notUsedTopic = common.HexToHash("0x9999999999999999999999999999999999999999999999999999999999999999") - allLogs = []core.PendingLogsEvent{ - {Logs: []*types.Log{{Address: firstAddr, Topics: []common.Hash{}, BlockNumber: 0}}}, - {Logs: []*types.Log{{Address: firstAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 1}}}, - {Logs: []*types.Log{{Address: secondAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 2}}}, - {Logs: []*types.Log{{Address: thirdAddress, Topics: []common.Hash{secondTopic}, BlockNumber: 3}}}, - {Logs: []*types.Log{{Address: thirdAddress, Topics: []common.Hash{secondTopic}, BlockNumber: 4}}}, - {Logs: []*types.Log{ + allLogs = [][]*types.Log{ + {{Address: firstAddr, Topics: []common.Hash{}, BlockNumber: 0}}, + {{Address: firstAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 1}}, + {{Address: secondAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 2}}, + {{Address: thirdAddress, Topics: []common.Hash{secondTopic}, BlockNumber: 3}}, + {{Address: thirdAddress, Topics: []common.Hash{secondTopic}, BlockNumber: 4}}, + { {Address: thirdAddress, Topics: []common.Hash{firstTopic}, BlockNumber: 5}, {Address: thirdAddress, Topics: []common.Hash{thirdTopic}, BlockNumber: 5}, {Address: thirdAddress, Topics: []common.Hash{fourthTopic}, BlockNumber: 5}, {Address: firstAddr, Topics: []common.Hash{firstTopic}, BlockNumber: 5}, - }}, + }, } - convertLogs = func(pl []core.PendingLogsEvent) []*types.Log { - var logs []*types.Log - for _, l := range pl { - logs = append(logs, l.Logs...) - } - return logs - } + pendingBlockNumber = big.NewInt(rpc.PendingBlockNumber.Int64()) testCases = []struct { crit ethereum.FilterQuery expected []*types.Log c chan []*types.Log sub *Subscription + err chan error }{ // match all - {ethereum.FilterQuery{}, convertLogs(allLogs), nil, nil}, + { + ethereum.FilterQuery{FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + flattenLogs(allLogs), + nil, nil, nil, + }, // match none due to no matching addresses - {ethereum.FilterQuery{Addresses: []common.Address{{}, notUsedAddress}, Topics: [][]common.Hash{nil}}, []*types.Log{}, nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{{}, notUsedAddress}, Topics: [][]common.Hash{nil}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + nil, + nil, nil, nil, + }, // match logs based on addresses, ignore topics - {ethereum.FilterQuery{Addresses: []common.Address{firstAddr}}, append(convertLogs(allLogs[:2]), allLogs[5].Logs[3]), nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{firstAddr}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + append(flattenLogs(allLogs[:2]), allLogs[5][3]), + nil, nil, nil, + }, // match none due to no matching topics (match with address) - {ethereum.FilterQuery{Addresses: []common.Address{secondAddr}, Topics: [][]common.Hash{{notUsedTopic}}}, []*types.Log{}, nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{secondAddr}, Topics: [][]common.Hash{{notUsedTopic}}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + nil, + nil, nil, nil, + }, // match logs based on addresses and topics - {ethereum.FilterQuery{Addresses: []common.Address{thirdAddress}, Topics: [][]common.Hash{{firstTopic, secondTopic}}}, append(convertLogs(allLogs[3:5]), allLogs[5].Logs[0]), nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{thirdAddress}, Topics: [][]common.Hash{{firstTopic, secondTopic}}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + append(flattenLogs(allLogs[3:5]), allLogs[5][0]), + nil, nil, nil, + }, // match logs based on multiple addresses and "or" topics - {ethereum.FilterQuery{Addresses: []common.Address{secondAddr, thirdAddress}, Topics: [][]common.Hash{{firstTopic, secondTopic}}}, append(convertLogs(allLogs[2:5]), allLogs[5].Logs[0]), nil, nil}, - // block numbers are ignored for filters created with New***Filter, these return all logs that match the given criteria when the state changes - {ethereum.FilterQuery{Addresses: []common.Address{firstAddr}, FromBlock: big.NewInt(2), ToBlock: big.NewInt(3)}, append(convertLogs(allLogs[:2]), allLogs[5].Logs[3]), nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{secondAddr, thirdAddress}, Topics: [][]common.Hash{{firstTopic, secondTopic}}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + append(flattenLogs(allLogs[2:5]), allLogs[5][0]), + nil, nil, nil, + }, // multiple pending logs, should match only 2 topics from the logs in block 5 - {ethereum.FilterQuery{Addresses: []common.Address{thirdAddress}, Topics: [][]common.Hash{{firstTopic, fourthTopic}}}, []*types.Log{allLogs[5].Logs[0], allLogs[5].Logs[2]}, nil, nil}, + { + ethereum.FilterQuery{Addresses: []common.Address{thirdAddress}, Topics: [][]common.Hash{{firstTopic, fourthTopic}}, FromBlock: pendingBlockNumber, ToBlock: pendingBlockNumber}, + []*types.Log{allLogs[5][0], allLogs[5][2]}, + nil, nil, nil, + }, + // match none due to only matching new mined logs + { + ethereum.FilterQuery{}, + nil, + nil, nil, nil, + }, + // match none due to only matching mined logs within a specific block range + { + ethereum.FilterQuery{FromBlock: big.NewInt(1), ToBlock: big.NewInt(2)}, + nil, + nil, nil, nil, + }, + // match all due to matching mined and pending logs + { + ethereum.FilterQuery{FromBlock: big.NewInt(rpc.LatestBlockNumber.Int64()), ToBlock: big.NewInt(rpc.PendingBlockNumber.Int64())}, + flattenLogs(allLogs), + nil, nil, nil, + }, + // match none due to matching logs from a specific block number to new mined blocks + { + ethereum.FilterQuery{FromBlock: big.NewInt(1), ToBlock: big.NewInt(rpc.LatestBlockNumber.Int64())}, + nil, + nil, nil, nil, + }, } ) @@ -573,44 +588,142 @@ func TestPendingLogsSubscription(t *testing.T) { // (some) events are posted. for i := range testCases { testCases[i].c = make(chan []*types.Log) - testCases[i].sub, _ = api.events.SubscribeLogs(testCases[i].crit, testCases[i].c) + testCases[i].err = make(chan error, 1) + + var err error + testCases[i].sub, err = api.events.SubscribeLogs(testCases[i].crit, testCases[i].c) + if err != nil { + t.Fatalf("SubscribeLogs %d failed: %v\n", i, err) + } } for n, test := range testCases { i := n tt := test go func() { + defer tt.sub.Unsubscribe() + var fetched []*types.Log + + timeout := time.After(1 * time.Second) fetchLoop: for { - logs := <-tt.c - fetched = append(fetched, logs...) - if len(fetched) >= len(tt.expected) { + select { + case logs := <-tt.c: + // Do not break early if we've fetched greater, or equal, + // to the number of logs expected. This ensures we do not + // deadlock the filter system because it will do a blocking + // send on this channel if another log arrives. + fetched = append(fetched, logs...) + case <-timeout: break fetchLoop } } if len(fetched) != len(tt.expected) { - panic(fmt.Sprintf("invalid number of logs for case %d, want %d log(s), got %d", i, len(tt.expected), len(fetched))) + tt.err <- fmt.Errorf("invalid number of logs for case %d, want %d log(s), got %d", i, len(tt.expected), len(fetched)) + return } for l := range fetched { if fetched[l].Removed { - panic(fmt.Sprintf("expected log not to be removed for log %d in case %d", l, i)) + tt.err <- fmt.Errorf("expected log not to be removed for log %d in case %d", l, i) + return } if !reflect.DeepEqual(fetched[l], tt.expected[l]) { - panic(fmt.Sprintf("invalid log on index %d for case %d", l, i)) + tt.err <- fmt.Errorf("invalid log on index %d for case %d\n", l, i) + return } } + tt.err <- nil }() } // raise events - time.Sleep(1 * time.Second) - // allLogs are type of core.PendingLogsEvent - for _, l := range allLogs { - if err := mux.Post(l); err != nil { - t.Fatal(err) + for _, ev := range allLogs { + backend.pendingLogsFeed.Send(ev) + } + + for i := range testCases { + err := <-testCases[i].err + if err != nil { + t.Fatalf("test %d failed: %v", i, err) } + <-testCases[i].sub.Err() + } +} + +// TestPendingTxFilterDeadlock tests if the event loop hangs when pending +// txes arrive at the same time that one of multiple filters is timing out. +// Please refer to #22131 for more details. +func TestPendingTxFilterDeadlock(t *testing.T) { + t.Parallel() + timeout := 100 * time.Millisecond + + var ( + db = rawdb.NewMemoryDatabase() + backend, sys = newTestFilterSystem(t, db, Config{Timeout: timeout}) + api = NewFilterAPI(sys, false) + done = make(chan struct{}) + ) + + go func() { + // Bombard feed with txes until signal was received to stop + i := uint64(0) + for { + select { + case <-done: + return + default: + } + + tx := types.NewTransaction(i, common.HexToAddress("0xb794f5ea0ba39494ce83a213fffba74279579268"), new(big.Int), 0, new(big.Int), nil) + backend.txFeed.Send(core.NewTxsEvent{Txs: []*types.Transaction{tx}}) + i++ + } + }() + + // Create a bunch of filters that will + // timeout either in 100ms or 200ms + fids := make([]rpc.ID, 20) + for i := 0; i < len(fids); i++ { + fid := api.NewPendingTransactionFilter() + fids[i] = fid + // Wait for at least one tx to arrive in filter + for { + hashes, err := api.GetFilterChanges(fid) + if err != nil { + t.Fatalf("Filter should exist: %v\n", err) + } + if len(hashes.([]common.Hash)) > 0 { + break + } + runtime.Gosched() + } + } + + // Wait until filters have timed out + time.Sleep(3 * timeout) + + // If tx loop doesn't consume `done` after a second + // it's hanging. + select { + case done <- struct{}{}: + // Check that all filters have been uninstalled + for _, fid := range fids { + if _, err := api.GetFilterChanges(fid); err == nil { + t.Errorf("Filter %s should have been uninstalled\n", fid) + } + } + case <-time.After(1 * time.Second): + t.Error("Tx sending loop hangs") + } +} + +func flattenLogs(pl [][]*types.Log) []*types.Log { + var logs []*types.Log + for _, l := range pl { + logs = append(logs, l...) } + return logs } diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index b4bbf4b5..2c1f7cad 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -18,19 +18,16 @@ package filters import ( "context" - "io/ioutil" "math/big" - "os" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) func makeReceipt(addr common.Address) *types.Receipt { @@ -43,44 +40,45 @@ func makeReceipt(addr common.Address) *types.Receipt { } func BenchmarkFilters(b *testing.B) { - dir, err := ioutil.TempDir("", "filtertest") - if err != nil { - b.Fatal(err) - } - defer os.RemoveAll(dir) + dir := b.TempDir() var ( - db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") - mux = new(event.TypeMux) - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - addr1 = crypto.PubkeyToAddress(key1.PublicKey) - addr2 = common.BytesToAddress([]byte("jeff")) - addr3 = common.BytesToAddress([]byte("ethereum")) - addr4 = common.BytesToAddress([]byte("random addresses please")) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "", false) + _, sys = newTestFilterSystem(b, db, Config{}) + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + addr2 = common.BytesToAddress([]byte("jeff")) + addr3 = common.BytesToAddress([]byte("ethereum")) + addr4 = common.BytesToAddress([]byte("random addresses please")) + + gspec = core.Genesis{ + Alloc: core.GenesisAlloc{addr1: {Balance: big.NewInt(1000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.ToBlock() ) defer db.Close() - genesis := core.GenesisBlockForTesting(db, addr1, big.NewInt(1000000)) + gspec.MustCommit(db) + chain, receipts := core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 100010, func(i int, gen *core.BlockGen) { switch i { case 2403: receipt := makeReceipt(addr1) gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, gen.BaseFee(), nil)) case 1034: receipt := makeReceipt(addr2) gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, gen.BaseFee(), nil)) case 34: receipt := makeReceipt(addr3) gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, gen.BaseFee(), nil)) case 99999: receipt := makeReceipt(addr4) gen.AddUncheckedReceipt(receipt) - + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, gen.BaseFee(), nil)) } }) for i, block := range chain { @@ -91,7 +89,7 @@ func BenchmarkFilters(b *testing.B) { } b.ResetTimer() - filter := NewRangeFilter(backend, 0, -1, []common.Address{addr1, addr2, addr3, addr4}, nil) + filter := sys.NewRangeFilter(0, -1, []common.Address{addr1, addr2, addr3, addr4}, nil) for i := 0; i < b.N; i++ { logs, _ := filter.Logs(context.Background()) @@ -102,31 +100,29 @@ func BenchmarkFilters(b *testing.B) { } func TestFilters(t *testing.T) { - dir, err := ioutil.TempDir("", "filtertest") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) + dir := t.TempDir() var ( - db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") - mux = new(event.TypeMux) - txFeed = new(event.Feed) - rmLogsFeed = new(event.Feed) - logsFeed = new(event.Feed) - chainFeed = new(event.Feed) - backend = &testBackend{mux, db, 0, txFeed, rmLogsFeed, logsFeed, chainFeed} - key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - addr = crypto.PubkeyToAddress(key1.PublicKey) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "", false) + _, sys = newTestFilterSystem(t, db, Config{}) + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr = crypto.PubkeyToAddress(key1.PublicKey) hash1 = common.BytesToHash([]byte("topic1")) hash2 = common.BytesToHash([]byte("topic2")) hash3 = common.BytesToHash([]byte("topic3")) hash4 = common.BytesToHash([]byte("topic4")) + + gspec = core.Genesis{ + Alloc: core.GenesisAlloc{addr: {Balance: big.NewInt(1000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.ToBlock() ) defer db.Close() - genesis := core.GenesisBlockForTesting(db, addr, big.NewInt(1000000)) + gspec.MustCommit(db) + chain, receipts := core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 1000, func(i int, gen *core.BlockGen) { switch i { case 1: @@ -138,7 +134,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)) + gen.AddUncheckedTx(types.NewTransaction(1, common.HexToAddress("0x1"), big.NewInt(1), 1, gen.BaseFee(), nil)) case 2: receipt := types.NewReceipt(nil, false, 0) receipt.Logs = []*types.Log{ @@ -148,7 +144,7 @@ func TestFilters(t *testing.T) { }, } gen.AddUncheckedReceipt(receipt) - gen.AddUncheckedTx(types.NewTransaction(2, common.HexToAddress("0x2"), big.NewInt(2), 2, big.NewInt(2), nil)) + gen.AddUncheckedTx(types.NewTransaction(2, common.HexToAddress("0x2"), big.NewInt(2), 2, gen.BaseFee(), nil)) case 998: receipt := types.NewReceipt(nil, false, 0) @@ -159,7 +155,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)) + gen.AddUncheckedTx(types.NewTransaction(998, common.HexToAddress("0x998"), big.NewInt(998), 998, gen.BaseFee(), nil)) case 999: receipt := types.NewReceipt(nil, false, 0) receipt.Logs = []*types.Log{ @@ -169,7 +165,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)) + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, gen.BaseFee(), nil)) } }) for i, block := range chain { @@ -179,14 +175,14 @@ func TestFilters(t *testing.T) { rawdb.WriteReceipts(db, block.Hash(), block.NumberU64(), receipts[i]) } - filter := NewRangeFilter(backend, 0, -1, []common.Address{addr}, [][]common.Hash{{hash1, hash2, hash3, hash4}}) + filter := sys.NewRangeFilter(0, -1, []common.Address{addr}, [][]common.Hash{{hash1, hash2, hash3, hash4}}) logs, _ := filter.Logs(context.Background()) if len(logs) != 4 { t.Error("expected 4 log, got", len(logs)) } - filter = NewRangeFilter(backend, 900, 999, []common.Address{addr}, [][]common.Hash{{hash3}}) + filter = sys.NewRangeFilter(900, 999, []common.Address{addr}, [][]common.Hash{{hash3}}) logs, _ = filter.Logs(context.Background()) if len(logs) != 1 { t.Error("expected 1 log, got", len(logs)) @@ -195,7 +191,7 @@ func TestFilters(t *testing.T) { t.Errorf("expected log[0].Topics[0] to be %x, got %x", hash3, logs[0].Topics[0]) } - filter = NewRangeFilter(backend, 990, -1, []common.Address{addr}, [][]common.Hash{{hash3}}) + filter = sys.NewRangeFilter(990, -1, []common.Address{addr}, [][]common.Hash{{hash3}}) logs, _ = filter.Logs(context.Background()) if len(logs) != 1 { t.Error("expected 1 log, got", len(logs)) @@ -204,7 +200,7 @@ func TestFilters(t *testing.T) { t.Errorf("expected log[0].Topics[0] to be %x, got %x", hash3, logs[0].Topics[0]) } - filter = NewRangeFilter(backend, 1, 10, nil, [][]common.Hash{{hash1, hash2}}) + filter = sys.NewRangeFilter(1, 10, nil, [][]common.Hash{{hash1, hash2}}) logs, _ = filter.Logs(context.Background()) if len(logs) != 2 { @@ -212,7 +208,7 @@ func TestFilters(t *testing.T) { } failHash := common.BytesToHash([]byte("fail")) - filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}}) + filter = sys.NewRangeFilter(0, -1, nil, [][]common.Hash{{failHash}}) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { @@ -220,14 +216,14 @@ func TestFilters(t *testing.T) { } failAddr := common.BytesToAddress([]byte("failmenow")) - filter = NewRangeFilter(backend, 0, -1, []common.Address{failAddr}, nil) + filter = sys.NewRangeFilter(0, -1, []common.Address{failAddr}, nil) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { t.Error("expected 0 log, got", len(logs)) } - filter = NewRangeFilter(backend, 0, -1, nil, [][]common.Hash{{failHash}, {hash1}}) + filter = sys.NewRangeFilter(0, -1, nil, [][]common.Hash{{failHash}, {hash1}}) logs, _ = filter.Logs(context.Background()) if len(logs) != 0 { diff --git a/eth/gasprice/feehistory.go b/eth/gasprice/feehistory.go new file mode 100644 index 00000000..91835c16 --- /dev/null +++ b/eth/gasprice/feehistory.go @@ -0,0 +1,334 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package gasprice + +import ( + "context" + "encoding/binary" + "errors" + "fmt" + "math" + "math/big" + "sort" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" +) + +var ( + errInvalidPercentile = errors.New("invalid reward percentile") + errRequestBeyondHead = errors.New("request beyond head block") +) + +const ( + // maxBlockFetchers is the max number of goroutines to spin up to pull blocks + // for the fee history calculation (mostly relevant for LES). + maxBlockFetchers = 4 +) + +// blockFees represents a single block for processing +type blockFees struct { + // set by the caller + blockNumber uint64 + header *types.Header + block *types.Block // only set if reward percentiles are requested + receipts types.Receipts + // filled by processBlock + results processedFees + err error +} + +// processedFees contains the results of a processed block and is also used for caching +type processedFees struct { + reward []*big.Int + baseFee, nextBaseFee *big.Int + gasUsedRatio float64 +} + +// txGasAndReward is sorted in ascending order based on reward +type ( + txGasAndReward struct { + gasUsed uint64 + reward *big.Int + } + sortGasAndReward []txGasAndReward +) + +func (s sortGasAndReward) Len() int { return len(s) } +func (s sortGasAndReward) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} +func (s sortGasAndReward) Less(i, j int) bool { + return s[i].reward.Cmp(s[j].reward) < 0 +} + +// processBlock takes a blockFees structure with the blockNumber, the header and optionally +// the block field filled in, retrieves the block from the backend if not present yet and +// fills in the rest of the fields. +func (oracle *Oracle) processBlock(bf *blockFees, percentiles []float64) { + chainconfig := oracle.backend.ChainConfig() + if bf.results.baseFee = bf.header.BaseFee; bf.results.baseFee == nil { + bf.results.baseFee = new(big.Int) + } + if chainconfig.IsLondon(big.NewInt(int64(bf.blockNumber + 1))) { + bf.results.nextBaseFee = misc.CalcBaseFee(chainconfig, bf.header) + } else { + bf.results.nextBaseFee = new(big.Int) + } + bf.results.gasUsedRatio = float64(bf.header.GasUsed) / float64(bf.header.GasLimit) + if len(percentiles) == 0 { + // rewards were not requested, return null + return + } + if bf.block == nil || (bf.receipts == nil && len(bf.block.Transactions()) != 0) { + log.Error("Block or receipts are missing while reward percentiles are requested") + return + } + + bf.results.reward = make([]*big.Int, len(percentiles)) + if len(bf.block.Transactions()) == 0 { + // return an all zero row if there are no transactions to gather data from + for i := range bf.results.reward { + bf.results.reward[i] = new(big.Int) + } + return + } + + sorter := make(sortGasAndReward, len(bf.block.Transactions())) + for i, tx := range bf.block.Transactions() { + reward, _ := tx.EffectiveGasTip(bf.block.BaseFee()) + sorter[i] = txGasAndReward{gasUsed: bf.receipts[i].GasUsed, reward: reward} + } + sort.Stable(sorter) + + var txIndex int + sumGasUsed := sorter[0].gasUsed + + for i, p := range percentiles { + thresholdGasUsed := uint64(float64(bf.block.GasUsed()) * p / 100) + for sumGasUsed < thresholdGasUsed && txIndex < len(bf.block.Transactions())-1 { + txIndex++ + sumGasUsed += sorter[txIndex].gasUsed + } + bf.results.reward[i] = sorter[txIndex].reward + } +} + +// resolveBlockRange resolves the specified block range to absolute block numbers while also +// enforcing backend specific limitations. The pending block and corresponding receipts are +// also returned if requested and available. +// Note: an error is only returned if retrieving the head header has failed. If there are no +// retrievable blocks in the specified range then zero block count is returned with no error. +func (oracle *Oracle) resolveBlockRange(ctx context.Context, reqEnd rpc.BlockNumber, blocks int) (*types.Block, []*types.Receipt, uint64, int, error) { + var ( + headBlock *types.Header + pendingBlock *types.Block + pendingReceipts types.Receipts + err error + ) + + // Get the chain's current head. + if headBlock, err = oracle.backend.HeaderByNumber(ctx, rpc.LatestBlockNumber); err != nil { + return nil, nil, 0, 0, err + } + head := rpc.BlockNumber(headBlock.Number.Uint64()) + + // Fail if request block is beyond the chain's current head. + if head < reqEnd { + return nil, nil, 0, 0, fmt.Errorf("%w: requested %d, head %d", errRequestBeyondHead, reqEnd, head) + } + + // Resolve block tag. + if reqEnd < 0 { + var ( + resolved *types.Header + err error + ) + switch reqEnd { + case rpc.PendingBlockNumber: + if pendingBlock, pendingReceipts = oracle.backend.PendingBlockAndReceipts(); pendingBlock != nil { + resolved = pendingBlock.Header() + } else { + // Pending block not supported by backend, process only until latest block. + resolved = headBlock + + // Update total blocks to return to account for this. + blocks-- + } + case rpc.LatestBlockNumber: + // Retrieved above. + resolved = headBlock + case rpc.SafeBlockNumber: + resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.SafeBlockNumber) + case rpc.FinalizedBlockNumber: + resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.FinalizedBlockNumber) + case rpc.EarliestBlockNumber: + resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.EarliestBlockNumber) + } + if resolved == nil || err != nil { + return nil, nil, 0, 0, err + } + // Absolute number resolved. + reqEnd = rpc.BlockNumber(resolved.Number.Uint64()) + } + + // If there are no blocks to return, short circuit. + if blocks == 0 { + return nil, nil, 0, 0, nil + } + // Ensure not trying to retrieve before genesis. + if int(reqEnd+1) < blocks { + blocks = int(reqEnd + 1) + } + return pendingBlock, pendingReceipts, uint64(reqEnd), blocks, nil +} + +// FeeHistory returns data relevant for fee estimation based on the specified range of blocks. +// The range can be specified either with absolute block numbers or ending with the latest +// or pending block. Backends may or may not support gathering data from the pending block +// or blocks older than a certain age (specified in maxHistory). The first block of the +// actually processed range is returned to avoid ambiguity when parts of the requested range +// are not available or when the head has changed during processing this request. +// Three arrays are returned based on the processed blocks: +// - reward: the requested percentiles of effective priority fees per gas of transactions in each +// block, sorted in ascending order and weighted by gas used. +// - baseFee: base fee per gas in the given block +// - gasUsedRatio: gasUsed/gasLimit in the given block +// Note: baseFee includes the next block after the newest of the returned range, because this +// value can be derived from the newest block. +func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, unresolvedLastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) { + if blocks < 1 { + return common.Big0, nil, nil, nil, nil // returning with no data and no error means there are no retrievable blocks + } + maxFeeHistory := oracle.maxHeaderHistory + if len(rewardPercentiles) != 0 { + maxFeeHistory = oracle.maxBlockHistory + } + if blocks > maxFeeHistory { + log.Warn("Sanitizing fee history length", "requested", blocks, "truncated", maxFeeHistory) + blocks = maxFeeHistory + } + for i, p := range rewardPercentiles { + if p < 0 || p > 100 { + return common.Big0, nil, nil, nil, fmt.Errorf("%w: %f", errInvalidPercentile, p) + } + if i > 0 && p < rewardPercentiles[i-1] { + return common.Big0, nil, nil, nil, fmt.Errorf("%w: #%d:%f > #%d:%f", errInvalidPercentile, i-1, rewardPercentiles[i-1], i, p) + } + } + var ( + pendingBlock *types.Block + pendingReceipts []*types.Receipt + err error + ) + pendingBlock, pendingReceipts, lastBlock, blocks, err := oracle.resolveBlockRange(ctx, unresolvedLastBlock, blocks) + if err != nil || blocks == 0 { + return common.Big0, nil, nil, nil, err + } + oldestBlock := lastBlock + 1 - uint64(blocks) + + var ( + next = oldestBlock + results = make(chan *blockFees, blocks) + ) + percentileKey := make([]byte, 8*len(rewardPercentiles)) + for i, p := range rewardPercentiles { + binary.LittleEndian.PutUint64(percentileKey[i*8:(i+1)*8], math.Float64bits(p)) + } + for i := 0; i < maxBlockFetchers && i < blocks; i++ { + go func() { + for { + // Retrieve the next block number to fetch with this goroutine + blockNumber := atomic.AddUint64(&next, 1) - 1 + if blockNumber > lastBlock { + return + } + + fees := &blockFees{blockNumber: blockNumber} + if pendingBlock != nil && blockNumber >= pendingBlock.NumberU64() { + fees.block, fees.receipts = pendingBlock, pendingReceipts + fees.header = fees.block.Header() + oracle.processBlock(fees, rewardPercentiles) + results <- fees + } else { + cacheKey := struct { + number uint64 + percentiles string + }{blockNumber, string(percentileKey)} + + if p, ok := oracle.historyCache.Get(cacheKey); ok { + fees.results = p.(processedFees) + results <- fees + } else { + if len(rewardPercentiles) != 0 { + fees.block, fees.err = oracle.backend.BlockByNumber(ctx, rpc.BlockNumber(blockNumber)) + if fees.block != nil && fees.err == nil { + fees.receipts, fees.err = oracle.backend.GetReceipts(ctx, fees.block.Hash()) + fees.header = fees.block.Header() + } + } else { + fees.header, fees.err = oracle.backend.HeaderByNumber(ctx, rpc.BlockNumber(blockNumber)) + } + if fees.header != nil && fees.err == nil { + oracle.processBlock(fees, rewardPercentiles) + if fees.err == nil { + oracle.historyCache.Add(cacheKey, fees.results) + } + } + // send to results even if empty to guarantee that blocks items are sent in total + results <- fees + } + } + } + }() + } + var ( + reward = make([][]*big.Int, blocks) + baseFee = make([]*big.Int, blocks+1) + gasUsedRatio = make([]float64, blocks) + firstMissing = blocks + ) + for ; blocks > 0; blocks-- { + fees := <-results + if fees.err != nil { + return common.Big0, nil, nil, nil, fees.err + } + i := int(fees.blockNumber - oldestBlock) + if fees.results.baseFee != nil { + reward[i], baseFee[i], baseFee[i+1], gasUsedRatio[i] = fees.results.reward, fees.results.baseFee, fees.results.nextBaseFee, fees.results.gasUsedRatio + } else { + // getting no block and no error means we are requesting into the future (might happen because of a reorg) + if i < firstMissing { + firstMissing = i + } + } + } + if firstMissing == 0 { + return common.Big0, nil, nil, nil, nil + } + if len(rewardPercentiles) != 0 { + reward = reward[:firstMissing] + } else { + reward = nil + } + baseFee, gasUsedRatio = baseFee[:firstMissing+1], gasUsedRatio[:firstMissing] + return new(big.Int).SetUint64(oldestBlock), reward, baseFee, gasUsedRatio, nil +} diff --git a/eth/gasprice/feehistory_test.go b/eth/gasprice/feehistory_test.go new file mode 100644 index 00000000..deece7f4 --- /dev/null +++ b/eth/gasprice/feehistory_test.go @@ -0,0 +1,91 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package gasprice + +import ( + "context" + "errors" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/rpc" +) + +func TestFeeHistory(t *testing.T) { + var cases = []struct { + pending bool + maxHeader, maxBlock int + count int + last rpc.BlockNumber + percent []float64 + expFirst uint64 + expCount int + expErr error + }{ + {false, 1000, 1000, 10, 30, nil, 21, 10, nil}, + {false, 1000, 1000, 10, 30, []float64{0, 10}, 21, 10, nil}, + {false, 1000, 1000, 10, 30, []float64{20, 10}, 0, 0, errInvalidPercentile}, + {false, 1000, 1000, 1000000000, 30, nil, 0, 31, nil}, + {false, 1000, 1000, 1000000000, rpc.LatestBlockNumber, nil, 0, 33, nil}, + {false, 1000, 1000, 10, 40, nil, 0, 0, errRequestBeyondHead}, + {true, 1000, 1000, 10, 40, nil, 0, 0, errRequestBeyondHead}, + {false, 20, 2, 100, rpc.LatestBlockNumber, nil, 13, 20, nil}, + {false, 20, 2, 100, rpc.LatestBlockNumber, []float64{0, 10}, 31, 2, nil}, + {false, 20, 2, 100, 32, []float64{0, 10}, 31, 2, nil}, + {false, 1000, 1000, 1, rpc.PendingBlockNumber, nil, 0, 0, nil}, + {false, 1000, 1000, 2, rpc.PendingBlockNumber, nil, 32, 1, nil}, + {true, 1000, 1000, 2, rpc.PendingBlockNumber, nil, 32, 2, nil}, + {true, 1000, 1000, 2, rpc.PendingBlockNumber, []float64{0, 10}, 32, 2, nil}, + {false, 1000, 1000, 2, rpc.FinalizedBlockNumber, []float64{0, 10}, 24, 2, nil}, + {false, 1000, 1000, 2, rpc.SafeBlockNumber, []float64{0, 10}, 24, 2, nil}, + } + for i, c := range cases { + config := Config{ + MaxHeaderHistory: c.maxHeader, + MaxBlockHistory: c.maxBlock, + } + backend := newTestBackend(t, big.NewInt(16), c.pending) + oracle := NewOracle(backend, config) + + first, reward, baseFee, ratio, err := oracle.FeeHistory(context.Background(), c.count, c.last, c.percent) + + expReward := c.expCount + if len(c.percent) == 0 { + expReward = 0 + } + expBaseFee := c.expCount + if expBaseFee != 0 { + expBaseFee++ + } + + if first.Uint64() != c.expFirst { + t.Fatalf("Test case %d: first block mismatch, want %d, got %d", i, c.expFirst, first) + } + if len(reward) != expReward { + t.Fatalf("Test case %d: reward array length mismatch, want %d, got %d", i, expReward, len(reward)) + } + if len(baseFee) != expBaseFee { + t.Fatalf("Test case %d: baseFee array length mismatch, want %d, got %d", i, expBaseFee, len(baseFee)) + } + if len(ratio) != c.expCount { + t.Fatalf("Test case %d: gasUsedRatio array length mismatch, want %d, got %d", i, c.expCount, len(ratio)) + } + if err != c.expErr && !errors.Is(err, c.expErr) { + t.Fatalf("Test case %d: error mismatch, want %v, got %v", i, c.expErr, err) + } + } +} diff --git a/eth/gasprice/gasprice.go b/eth/gasprice/gasprice.go index ce950a61..00128a5d 100644 --- a/eth/gasprice/gasprice.go +++ b/eth/gasprice/gasprice.go @@ -22,164 +22,271 @@ import ( "sort" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" + lru "github.com/hashicorp/golang-lru" ) -var maxPrice = big.NewInt(500 * params.GWei) +const sampleNumber = 3 // Number of transactions sampled in a block + +var ( + DefaultMaxPrice = big.NewInt(500 * params.GWei) + DefaultIgnorePrice = big.NewInt(2 * params.Wei) +) type Config struct { - Blocks int - Percentile int - Default *big.Int `toml:",omitempty"` + Blocks int + Percentile int + MaxHeaderHistory int + MaxBlockHistory int + Default *big.Int `toml:",omitempty"` + MaxPrice *big.Int `toml:",omitempty"` + IgnorePrice *big.Int `toml:",omitempty"` +} + +// OracleBackend includes all necessary background APIs for oracle. +type OracleBackend interface { + HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) + BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) + GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) + PendingBlockAndReceipts() (*types.Block, types.Receipts) + ChainConfig() *params.ChainConfig + SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription } // Oracle recommends gas prices based on the content of recent // blocks. Suitable for both light and full clients. type Oracle struct { - backend ethapi.Backend - lastHead common.Hash - lastPrice *big.Int - cacheLock sync.RWMutex - fetchLock sync.Mutex - - checkBlocks, maxEmpty, maxBlocks int - percentile int + backend OracleBackend + lastHead common.Hash + lastPrice *big.Int + maxPrice *big.Int + ignorePrice *big.Int + cacheLock sync.RWMutex + fetchLock sync.Mutex + + checkBlocks, percentile int + maxHeaderHistory, maxBlockHistory int + historyCache *lru.Cache } -// NewOracle returns a new oracle. -func NewOracle(backend ethapi.Backend, params Config) *Oracle { +// NewOracle returns a new gasprice oracle which can recommend suitable +// gasprice for newly created transaction. +func NewOracle(backend OracleBackend, params Config) *Oracle { blocks := params.Blocks if blocks < 1 { blocks = 1 + log.Warn("Sanitizing invalid gasprice oracle sample blocks", "provided", params.Blocks, "updated", blocks) } percent := params.Percentile if percent < 0 { percent = 0 - } - if percent > 100 { + log.Warn("Sanitizing invalid gasprice oracle sample percentile", "provided", params.Percentile, "updated", percent) + } else if percent > 100 { percent = 100 + log.Warn("Sanitizing invalid gasprice oracle sample percentile", "provided", params.Percentile, "updated", percent) + } + maxPrice := params.MaxPrice + if maxPrice == nil || maxPrice.Int64() <= 0 { + maxPrice = DefaultMaxPrice + log.Warn("Sanitizing invalid gasprice oracle price cap", "provided", params.MaxPrice, "updated", maxPrice) + } + ignorePrice := params.IgnorePrice + if ignorePrice == nil || ignorePrice.Int64() <= 0 { + ignorePrice = DefaultIgnorePrice + log.Warn("Sanitizing invalid gasprice oracle ignore price", "provided", params.IgnorePrice, "updated", ignorePrice) + } else if ignorePrice.Int64() > 0 { + log.Info("Gasprice oracle is ignoring threshold set", "threshold", ignorePrice) } + maxHeaderHistory := params.MaxHeaderHistory + if maxHeaderHistory < 1 { + maxHeaderHistory = 1 + log.Warn("Sanitizing invalid gasprice oracle max header history", "provided", params.MaxHeaderHistory, "updated", maxHeaderHistory) + } + maxBlockHistory := params.MaxBlockHistory + if maxBlockHistory < 1 { + maxBlockHistory = 1 + log.Warn("Sanitizing invalid gasprice oracle max block history", "provided", params.MaxBlockHistory, "updated", maxBlockHistory) + } + + cache, _ := lru.New(2048) + headEvent := make(chan core.ChainHeadEvent, 1) + backend.SubscribeChainHeadEvent(headEvent) + go func() { + var lastHead common.Hash + for ev := range headEvent { + if ev.Block.ParentHash() != lastHead { + cache.Purge() + } + lastHead = ev.Block.Hash() + } + }() + return &Oracle{ - backend: backend, - lastPrice: params.Default, - checkBlocks: blocks, - maxEmpty: blocks / 2, - maxBlocks: blocks * 5, - percentile: percent, + backend: backend, + lastPrice: params.Default, + maxPrice: maxPrice, + ignorePrice: ignorePrice, + checkBlocks: blocks, + percentile: percent, + maxHeaderHistory: maxHeaderHistory, + maxBlockHistory: maxBlockHistory, + historyCache: cache, } } -// SuggestPrice returns the recommended gas price. -func (gpo *Oracle) SuggestPrice(ctx context.Context) (*big.Int, error) { - gpo.cacheLock.RLock() - lastHead := gpo.lastHead - lastPrice := gpo.lastPrice - gpo.cacheLock.RUnlock() - - head, _ := gpo.backend.HeaderByNumber(ctx, rpc.LatestBlockNumber) +// SuggestTipCap returns a tip cap so that newly created transaction can have a +// very high chance to be included in the following blocks. +// +// Note, for legacy transactions and the legacy eth_gasPrice RPC call, it will be +// necessary to add the basefee to the returned number to fall back to the legacy +// behavior. +func (oracle *Oracle) SuggestTipCap(ctx context.Context) (*big.Int, error) { + head, _ := oracle.backend.HeaderByNumber(ctx, rpc.LatestBlockNumber) headHash := head.Hash() + + // If the latest gasprice is still available, return it. + oracle.cacheLock.RLock() + lastHead, lastPrice := oracle.lastHead, oracle.lastPrice + oracle.cacheLock.RUnlock() if headHash == lastHead { - return lastPrice, nil + return new(big.Int).Set(lastPrice), nil } + oracle.fetchLock.Lock() + defer oracle.fetchLock.Unlock() - gpo.fetchLock.Lock() - defer gpo.fetchLock.Unlock() - - // try checking the cache again, maybe the last fetch fetched what we need - gpo.cacheLock.RLock() - lastHead = gpo.lastHead - lastPrice = gpo.lastPrice - gpo.cacheLock.RUnlock() + // Try checking the cache again, maybe the last fetch fetched what we need + oracle.cacheLock.RLock() + lastHead, lastPrice = oracle.lastHead, oracle.lastPrice + oracle.cacheLock.RUnlock() if headHash == lastHead { - return lastPrice, nil + return new(big.Int).Set(lastPrice), nil } - - blockNum := head.Number.Uint64() - ch := make(chan getBlockPricesResult, gpo.checkBlocks) - sent := 0 - exp := 0 - var blockPrices []*big.Int - for sent < gpo.checkBlocks && blockNum > 0 { - go gpo.getBlockPrices(ctx, types.MakeSigner(gpo.backend.ChainConfig(), big.NewInt(int64(blockNum))), blockNum, ch) + var ( + sent, exp int + number = head.Number.Uint64() + result = make(chan results, oracle.checkBlocks) + quit = make(chan struct{}) + results []*big.Int + ) + for sent < oracle.checkBlocks && number > 0 { + go oracle.getBlockValues(ctx, types.MakeSigner(oracle.backend.ChainConfig(), big.NewInt(int64(number))), number, sampleNumber, oracle.ignorePrice, result, quit) sent++ exp++ - blockNum-- + number-- } - maxEmpty := gpo.maxEmpty for exp > 0 { - res := <-ch + res := <-result if res.err != nil { - return lastPrice, res.err + close(quit) + return new(big.Int).Set(lastPrice), res.err } exp-- - if res.price != nil { - blockPrices = append(blockPrices, res.price) - continue - } - if maxEmpty > 0 { - maxEmpty-- - continue + // Nothing returned. There are two special cases here: + // - The block is empty + // - All the transactions included are sent by the miner itself. + // In these cases, use the latest calculated price for sampling. + if len(res.values) == 0 { + res.values = []*big.Int{lastPrice} } - if blockNum > 0 && sent < gpo.maxBlocks { - go gpo.getBlockPrices(ctx, types.MakeSigner(gpo.backend.ChainConfig(), big.NewInt(int64(blockNum))), blockNum, ch) + // Besides, in order to collect enough data for sampling, if nothing + // meaningful returned, try to query more blocks. But the maximum + // is 2*checkBlocks. + if len(res.values) == 1 && len(results)+1+exp < oracle.checkBlocks*2 && number > 0 { + go oracle.getBlockValues(ctx, types.MakeSigner(oracle.backend.ChainConfig(), big.NewInt(int64(number))), number, sampleNumber, oracle.ignorePrice, result, quit) sent++ exp++ - blockNum-- + number-- } + results = append(results, res.values...) } price := lastPrice - if len(blockPrices) > 0 { - sort.Sort(bigIntArray(blockPrices)) - price = blockPrices[(len(blockPrices)-1)*gpo.percentile/100] + if len(results) > 0 { + sort.Sort(bigIntArray(results)) + price = results[(len(results)-1)*oracle.percentile/100] } - if price.Cmp(maxPrice) > 0 { - price = new(big.Int).Set(maxPrice) + if price.Cmp(oracle.maxPrice) > 0 { + price = new(big.Int).Set(oracle.maxPrice) } + oracle.cacheLock.Lock() + oracle.lastHead = headHash + oracle.lastPrice = price + oracle.cacheLock.Unlock() + + return new(big.Int).Set(price), nil +} - gpo.cacheLock.Lock() - gpo.lastHead = headHash - gpo.lastPrice = price - gpo.cacheLock.Unlock() - return price, nil +type results struct { + values []*big.Int + err error } -type getBlockPricesResult struct { - price *big.Int - err error +type txSorter struct { + txs []*types.Transaction + baseFee *big.Int } -type transactionsByGasPrice []*types.Transaction +func newSorter(txs []*types.Transaction, baseFee *big.Int) *txSorter { + return &txSorter{ + txs: txs, + baseFee: baseFee, + } +} -func (t transactionsByGasPrice) Len() int { return len(t) } -func (t transactionsByGasPrice) Swap(i, j int) { t[i], t[j] = t[j], t[i] } -func (t transactionsByGasPrice) Less(i, j int) bool { return t[i].GasPrice().Cmp(t[j].GasPrice()) < 0 } +func (s *txSorter) Len() int { return len(s.txs) } +func (s *txSorter) Swap(i, j int) { + s.txs[i], s.txs[j] = s.txs[j], s.txs[i] +} +func (s *txSorter) Less(i, j int) bool { + // It's okay to discard the error because a tx would never be + // accepted into a block with an invalid effective tip. + tip1, _ := s.txs[i].EffectiveGasTip(s.baseFee) + tip2, _ := s.txs[j].EffectiveGasTip(s.baseFee) + return tip1.Cmp(tip2) < 0 +} // getBlockPrices calculates the lowest transaction gas price in a given block -// and sends it to the result channel. If the block is empty, price is nil. -func (gpo *Oracle) getBlockPrices(ctx context.Context, signer types.Signer, blockNum uint64, ch chan getBlockPricesResult) { - block, err := gpo.backend.BlockByNumber(ctx, rpc.BlockNumber(blockNum)) +// and sends it to the result channel. If the block is empty or all transactions +// are sent by the miner itself(it doesn't make any sense to include this kind of +// transaction prices for sampling), nil gasprice is returned. +func (oracle *Oracle) getBlockValues(ctx context.Context, signer types.Signer, blockNum uint64, limit int, ignoreUnder *big.Int, result chan results, quit chan struct{}) { + block, err := oracle.backend.BlockByNumber(ctx, rpc.BlockNumber(blockNum)) if block == nil { - ch <- getBlockPricesResult{nil, err} + select { + case result <- results{nil, err}: + case <-quit: + } return } + // Sort the transaction by effective tip in ascending sort. + txs := make([]*types.Transaction, len(block.Transactions())) + copy(txs, block.Transactions()) + sorter := newSorter(txs, block.BaseFee()) + sort.Sort(sorter) - blockTxs := block.Transactions() - txs := make([]*types.Transaction, len(blockTxs)) - copy(txs, blockTxs) - sort.Sort(transactionsByGasPrice(txs)) - - for _, tx := range txs { + var prices []*big.Int + for _, tx := range sorter.txs { + tip, _ := tx.EffectiveGasTip(block.BaseFee()) + if ignoreUnder != nil && tip.Cmp(ignoreUnder) == -1 { + continue + } sender, err := types.Sender(signer, tx) if err == nil && sender != block.Coinbase() { - ch <- getBlockPricesResult{tx.GasPrice(), nil} - return + prices = append(prices, tip) + if len(prices) >= limit { + break + } } } - ch <- getBlockPricesResult{nil, nil} + select { + case result <- results{prices, nil}: + case <-quit: + } } type bigIntArray []*big.Int diff --git a/eth/gasprice/gasprice_test.go b/eth/gasprice/gasprice_test.go new file mode 100644 index 00000000..5830312f --- /dev/null +++ b/eth/gasprice/gasprice_test.go @@ -0,0 +1,212 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package gasprice + +import ( + "context" + "math" + "math/big" + "testing" + + "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" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + +const testHead = 32 + +type testBackend struct { + chain *core.BlockChain + pending bool // pending block available +} + +func (b *testBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { + if number > testHead { + return nil, nil + } + if number == rpc.EarliestBlockNumber { + number = 0 + } + if number == rpc.FinalizedBlockNumber { + return b.chain.CurrentFinalizedBlock().Header(), nil + } + if number == rpc.SafeBlockNumber { + return b.chain.CurrentSafeBlock().Header(), nil + } + if number == rpc.LatestBlockNumber { + number = testHead + } + if number == rpc.PendingBlockNumber { + if b.pending { + number = testHead + 1 + } else { + return nil, nil + } + } + return b.chain.GetHeaderByNumber(uint64(number)), nil +} + +func (b *testBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { + if number > testHead { + return nil, nil + } + if number == rpc.EarliestBlockNumber { + number = 0 + } + if number == rpc.FinalizedBlockNumber { + return b.chain.CurrentFinalizedBlock(), nil + } + if number == rpc.SafeBlockNumber { + return b.chain.CurrentSafeBlock(), nil + } + if number == rpc.LatestBlockNumber { + number = testHead + } + if number == rpc.PendingBlockNumber { + if b.pending { + number = testHead + 1 + } else { + return nil, nil + } + } + return b.chain.GetBlockByNumber(uint64(number)), nil +} + +func (b *testBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { + return b.chain.GetReceiptsByHash(hash), nil +} + +func (b *testBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + if b.pending { + block := b.chain.GetBlockByNumber(testHead + 1) + return block, b.chain.GetReceiptsByHash(block.Hash()) + } + return nil, nil +} + +func (b *testBackend) ChainConfig() *params.ChainConfig { + return b.chain.Config() +} + +func (b *testBackend) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { + return nil +} + +func newTestBackend(t *testing.T, londonBlock *big.Int, pending bool) *testBackend { + var ( + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr = crypto.PubkeyToAddress(key.PublicKey) + config = *params.TestChainConfig // needs copy because it is modified below + gspec = &core.Genesis{ + Config: &config, + Alloc: core.GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}}, + } + signer = types.LatestSigner(gspec.Config) + ) + config.LondonBlock = londonBlock + config.ArrowGlacierBlock = londonBlock + config.GrayGlacierBlock = londonBlock + config.TerminalTotalDifficulty = common.Big0 + engine := ethash.NewFaker() + db := rawdb.NewMemoryDatabase() + genesis := gspec.MustCommit(db) + + // Generate testing blocks + blocks, _ := core.GenerateChain(gspec.Config, genesis, engine, db, testHead+1, func(i int, b *core.BlockGen) { + b.SetCoinbase(common.Address{1}) + + var txdata types.TxData + if londonBlock != nil && b.Number().Cmp(londonBlock) >= 0 { + txdata = &types.DynamicFeeTx{ + ChainID: gspec.Config.ChainID, + Nonce: b.TxNonce(addr), + To: &common.Address{}, + Gas: 30000, + GasFeeCap: big.NewInt(100 * params.GWei), + GasTipCap: big.NewInt(int64(i+1) * params.GWei), + Data: []byte{}, + } + } else { + txdata = &types.LegacyTx{ + Nonce: b.TxNonce(addr), + To: &common.Address{}, + Gas: 21000, + GasPrice: big.NewInt(int64(i+1) * params.GWei), + Value: big.NewInt(100), + Data: []byte{}, + } + } + b.AddTx(types.MustSignNewTx(key, signer, txdata)) + }) + // Construct testing chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + chain, err := core.NewBlockChain(diskdb, &core.CacheConfig{TrieCleanNoPrefetch: true}, gspec, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("Failed to create local chain, %v", err) + } + chain.InsertChain(blocks) + chain.SetFinalized(chain.GetBlockByNumber(25)) + chain.SetSafe(chain.GetBlockByNumber(25)) + return &testBackend{chain: chain, pending: pending} +} + +func (b *testBackend) CurrentHeader() *types.Header { + return b.chain.CurrentHeader() +} + +func (b *testBackend) GetBlockByNumber(number uint64) *types.Block { + return b.chain.GetBlockByNumber(number) +} + +func TestSuggestTipCap(t *testing.T) { + config := Config{ + Blocks: 3, + Percentile: 60, + Default: big.NewInt(params.GWei), + } + var cases = []struct { + fork *big.Int // London fork number + expect *big.Int // Expected gasprice suggestion + }{ + {nil, big.NewInt(params.GWei * int64(30))}, + {big.NewInt(0), big.NewInt(params.GWei * int64(30))}, // Fork point in genesis + {big.NewInt(1), big.NewInt(params.GWei * int64(30))}, // Fork point in first block + {big.NewInt(32), big.NewInt(params.GWei * int64(30))}, // Fork point in last block + {big.NewInt(33), big.NewInt(params.GWei * int64(30))}, // Fork point in the future + } + for _, c := range cases { + backend := newTestBackend(t, c.fork, false) + oracle := NewOracle(backend, config) + + // The gas price sampled is: 32G, 31G, 30G, 29G, 28G, 27G + got, err := oracle.SuggestTipCap(context.Background()) + if err != nil { + t.Fatalf("Failed to retrieve recommended gas price: %v", err) + } + if got.Cmp(c.expect) != 0 { + t.Fatalf("Gas price mismatch, want %d, got %d", c.expect, got) + } + } +} diff --git a/eth/gen_config.go b/eth/gen_config.go deleted file mode 100644 index ff3d5d62..00000000 --- a/eth/gen_config.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package eth - -import ( - "math/big" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/miner" - "github.com/cryptoecc/ETH-ECC/params" -) - -// MarshalTOML marshals as TOML. -func (c Config) MarshalTOML() (interface{}, error) { - type Config struct { - Genesis *core.Genesis `toml:",omitempty"` - NetworkId uint64 - SyncMode downloader.SyncMode - NoPruning bool - 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 - Miner miner.Config - Ethash ethash.Config - TxPool core.TxPoolConfig - GPO gasprice.Config - EnablePreimageRecording bool - 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.Miner = c.Miner - enc.Ethash = c.Ethash - enc.TxPool = c.TxPool - enc.GPO = c.GPO - enc.EnablePreimageRecording = c.EnablePreimageRecording - 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 -} - -// UnmarshalTOML unmarshals from TOML. -func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { - type Config struct { - Genesis *core.Genesis `toml:",omitempty"` - NetworkId *uint64 - SyncMode *downloader.SyncMode - NoPruning *bool - 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 - Miner *miner.Config - Ethash *ethash.Config - TxPool *core.TxPoolConfig - GPO *gasprice.Config - EnablePreimageRecording *bool - 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 { - return err - } - if dec.Genesis != nil { - c.Genesis = dec.Genesis - } - if dec.NetworkId != nil { - c.NetworkId = *dec.NetworkId - } - if dec.SyncMode != nil { - c.SyncMode = *dec.SyncMode - } - 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 - } - if dec.DatabaseHandles != nil { - c.DatabaseHandles = *dec.DatabaseHandles - } - if dec.DatabaseCache != nil { - c.DatabaseCache = *dec.DatabaseCache - } - if dec.DatabaseFreezer != nil { - c.DatabaseFreezer = *dec.DatabaseFreezer - } - if dec.TrieCleanCache != nil { - c.TrieCleanCache = *dec.TrieCleanCache - } - if dec.TrieDirtyCache != nil { - c.TrieDirtyCache = *dec.TrieDirtyCache - } - if dec.TrieTimeout != nil { - c.TrieTimeout = *dec.TrieTimeout - } - if dec.Miner != nil { - c.Miner = *dec.Miner - } - if dec.Ethash != nil { - c.Ethash = *dec.Ethash - } - if dec.TxPool != nil { - c.TxPool = *dec.TxPool - } - if dec.GPO != nil { - c.GPO = *dec.GPO - } - if dec.EnablePreimageRecording != nil { - c.EnablePreimageRecording = *dec.EnablePreimageRecording - } - if dec.DocRoot != nil { - c.DocRoot = *dec.DocRoot - } - if dec.EWASMInterpreter != nil { - c.EWASMInterpreter = *dec.EWASMInterpreter - } - 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 ab082900..4224a9f3 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -17,752 +17,585 @@ package eth import ( - "encoding/json" "errors" - "fmt" "math" "math/big" "sync" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/fetcher" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/fetcher" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" ) 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 - // txChanSize is the size of channel listening to NewTxsEvent. // The number is referenced from the size of tx pool. txChanSize = 4096 - - // minimim number of peers to broadcast new blocks to - minBroadcastPeers = 4 ) var ( syncChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the sync progress challenge ) -func errResp(code errCode, format string, v ...interface{}) error { - return fmt.Errorf("%v - %v", code, fmt.Sprintf(format, v...)) +// txPool defines the methods needed from a transaction pool implementation to +// support all the operations needed by the Ethereum chain protocols. +type txPool interface { + // Has returns an indicator whether txpool has a transaction + // cached with the given hash. + Has(hash common.Hash) bool + + // Get retrieves the transaction from local txpool with given + // tx hash. + Get(hash common.Hash) *types.Transaction + + // AddRemotes should add the given transactions to the pool. + AddRemotes([]*types.Transaction) []error + + // Pending should return pending transactions. + // The slice should be modifiable by the caller. + Pending(enforceTips bool) map[common.Address]types.Transactions + + // SubscribeNewTxsEvent should return an event subscription of + // NewTxsEvent and send events to the given channel. + SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription +} + +// handlerConfig is the collection of initialization parameters to create a full +// node network handler. +type handlerConfig struct { + Database ethdb.Database // Database for direct sync insertions + Chain *core.BlockChain // Blockchain to serve data from + TxPool txPool // Transaction pool to propagate from + Merger *consensus.Merger // The manager for eth1/2 transition + Network uint64 // Network identifier to adfvertise + Sync downloader.SyncMode // Whether to snap or full sync + BloomCache uint64 // Megabytes to alloc for snap sync bloom + EventMux *event.TypeMux // Legacy event mux, deprecate for `feed` + Checkpoint *params.TrustedCheckpoint // Hard coded checkpoint for sync challenges + RequiredBlocks map[uint64]common.Hash // Hard coded map of required block hashes for sync challenges } -type ProtocolManager struct { - networkID uint64 +type handler struct { + networkID uint64 + forkFilter forkid.Filter // Fork ID filter, constant across the lifetime of the node - fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks) + snapSync uint32 // Flag whether snap sync is enabled (gets disabled if we already have blocks) acceptTxs uint32 // Flag whether we're considered synchronised (enables transaction processing) 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 + database ethdb.Database + txpool txPool + chain *core.BlockChain + maxPeers int - downloader *downloader.Downloader - fetcher *fetcher.Fetcher - peers *peerSet + downloader *downloader.Downloader + blockFetcher *fetcher.BlockFetcher + txFetcher *fetcher.TxFetcher + peers *peerSet + merger *consensus.Merger eventMux *event.TypeMux txsCh chan core.NewTxsEvent txsSub event.Subscription minedBlockSub *event.TypeMuxSubscription - whitelist map[uint64]common.Hash + requiredBlocks map[uint64]common.Hash // channels for fetcher, syncer, txsyncLoop - newPeerCh chan *peer - txsyncCh chan *txsync - quitSync chan struct{} - noMorePeers chan struct{} - - // wait group is used for graceful shutdowns during downloading - // and processing - wg sync.WaitGroup + quitSync chan struct{} + + chainSync *chainSyncer + wg sync.WaitGroup + peerWG sync.WaitGroup } -// NewProtocolManager returns a new Ethereum sub protocol manager. The Ethereum sub protocol manages peers capable -// with the Ethereum network. -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) { +// newHandler returns a handler for all Ethereum chain management protocol. +func newHandler(config *handlerConfig) (*handler, error) { // Create the protocol manager with the base fields - manager := &ProtocolManager{ - networkID: networkID, - eventMux: mux, - txpool: txpool, - blockchain: blockchain, - peers: newPeerSet(), - whitelist: whitelist, - newPeerCh: make(chan *peer), - noMorePeers: make(chan struct{}), - txsyncCh: make(chan *txsync), - quitSync: make(chan struct{}), - } - 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. + if config.EventMux == nil { + config.EventMux = new(event.TypeMux) // Nicety initialization for tests + } + h := &handler{ + networkID: config.Network, + forkFilter: forkid.NewFilter(config.Chain), + eventMux: config.EventMux, + database: config.Database, + txpool: config.TxPool, + chain: config.Chain, + peers: newPeerSet(), + merger: config.Merger, + requiredBlocks: config.RequiredBlocks, + quitSync: make(chan struct{}), + } + if config.Sync == downloader.FullSync { + // The database seems empty as the current block is the genesis. Yet the snap + // block is ahead, so snap 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 + // * if the user manually (or via a bad block) rolled back a snap sync node // below the sync point. - // * the last fast sync is not finished while user specifies a full sync this + // * the last snap 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() + // In these cases however it's safe to reenable snap sync. + fullBlock, fastBlock := h.chain.CurrentBlock(), h.chain.CurrentFastBlock() if fullBlock.NumberU64() == 0 && fastBlock.NumberU64() > 0 { - manager.fastSync = uint32(1) - log.Warn("Switch sync mode from full sync to fast sync") + h.snapSync = uint32(1) + log.Warn("Switch sync mode from full sync to snap 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") + if h.chain.CurrentBlock().NumberU64() > 0 { + // Print warning log if database is not empty to run snap sync. + log.Warn("Switch sync mode from snap sync to full sync") } else { - // If fast sync was requested and our database is empty, grant it - manager.fastSync = uint32(1) + // If snap sync was requested and our database is empty, grant it + h.snapSync = uint32(1) } } // 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 + if config.Checkpoint != nil { + h.checkpointNumber = (config.Checkpoint.SectionIndex+1)*params.CHTFrequency - 1 + h.checkpointHash = config.Checkpoint.SectionHead } - - // 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) + // If sync succeeds, pass a callback to potentially disable snap sync mode + // and enable transaction propagation. + success := func() { + // If we were running snap sync and it finished, disable doing another + // round on next sync cycle + if atomic.LoadUint32(&h.snapSync) == 1 { + log.Info("Snap sync complete, auto disabling") + atomic.StoreUint32(&h.snapSync, 0) + } + // If we've successfully finished a sync cycle and passed any required + // checkpoint, enable accepting transactions from the network + head := h.chain.CurrentBlock() + if head.NumberU64() >= h.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(&h.acceptTxs, 1) + } + } + } + // Construct the downloader (long sync) + h.downloader = downloader.New(h.checkpointNumber, config.Database, h.eventMux, h.chain, nil, h.removePeer, success) + if ttd := h.chain.Config().TerminalTotalDifficulty; ttd != nil { + if h.chain.Config().TerminalTotalDifficultyPassed { + log.Info("Chain post-merge, sync via beacon client") + } else { + head := h.chain.CurrentBlock() + if td := h.chain.GetTd(head.Hash(), head.NumberU64()); td.Cmp(ttd) >= 0 { + log.Info("Chain post-TTD, sync via beacon client") + } else { + log.Warn("Chain pre-merge, sync via PoW (ensure beacon client is ready)") + } + } + } else if h.chain.Config().TerminalTotalDifficultyPassed { + log.Error("Chain configured post-merge, but without TTD. Are you debugging sync?") } - 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) + // All the block fetcher activities should be disabled + // after the transition. Print the warning log. + if h.merger.PoSFinalized() { + log.Warn("Unexpected validation activity", "hash", header.Hash(), "number", header.Number) + return errors.New("unexpected behavior after transition") + } + // Reject all the PoS style headers in the first place. No matter + // the chain has finished the transition or not, the PoS headers + // should only come from the trusted consensus layer instead of + // p2p network. + if beacon, ok := h.chain.Engine().(*beacon.Beacon); ok { + if beacon.IsPoSHeader(header) { + return errors.New("unexpected post-merge header") + } + } + return h.chain.Engine().VerifyHeader(h.chain, header, true) } heighter := func() uint64 { - return blockchain.CurrentBlock().NumberU64() + return h.chain.CurrentBlock().NumberU64() } inserter := func(blocks types.Blocks) (int, error) { + // All the block fetcher activities should be disabled + // after the transition. Print the warning log. + if h.merger.PoSFinalized() { + var ctx []interface{} + ctx = append(ctx, "blocks", len(blocks)) + if len(blocks) > 0 { + ctx = append(ctx, "firsthash", blocks[0].Hash()) + ctx = append(ctx, "firstnumber", blocks[0].Number()) + ctx = append(ctx, "lasthash", blocks[len(blocks)-1].Hash()) + ctx = append(ctx, "lastnumber", blocks[len(blocks)-1].Number()) + } + log.Warn("Unexpected insertion activity", ctx...) + return 0, errors.New("unexpected behavior after transition") + } // 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 { + if h.chain.CurrentBlock().NumberU64() < h.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 + // If snap sync is running, deny importing weird blocks. This is a problematic + // clause when starting up a new network, because snap-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("Fast syncing, discarded propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash()) + if atomic.LoadUint32(&h.snapSync) == 1 { + log.Warn("Snap syncing, discarded propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash()) + return 0, nil + } + if h.merger.TDDReached() { + // The blocks from the p2p network is regarded as untrusted + // after the transition. In theory block gossip should be disabled + // entirely whenever the transition is started. But in order to + // handle the transition boundary reorg in the consensus-layer, + // the legacy blocks are still accepted, but only for the terminal + // pow blocks. Spec: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3675.md#halt-the-importing-of-pow-blocks + for i, block := range blocks { + ptd := h.chain.GetTd(block.ParentHash(), block.NumberU64()-1) + if ptd == nil { + return 0, nil + } + td := new(big.Int).Add(ptd, block.Difficulty()) + if !h.chain.Config().IsTerminalPoWBlock(ptd, td) { + log.Info("Filtered out non-termimal pow block", "number", block.NumberU64(), "hash", block.Hash()) + return 0, nil + } + if err := h.chain.InsertBlockWithoutSetHead(block); err != nil { + return i, err + } + } return 0, nil } - n, err := manager.blockchain.InsertChain(blocks) + n, err := h.chain.InsertChain(blocks) if err == nil { - atomic.StoreUint32(&manager.acceptTxs, 1) // Mark initial sync done on any fetcher import + atomic.StoreUint32(&h.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) - - return manager, nil -} - -func (pm *ProtocolManager) makeProtocol(version uint) p2p.Protocol { - length, ok := protocolLengths[version] - if !ok { - panic("makeProtocol for unknown version") - } + h.blockFetcher = fetcher.NewBlockFetcher(false, nil, h.chain.GetBlockByHash, validator, h.BroadcastBlock, heighter, nil, inserter, h.removePeer) - 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 - }, + fetchTx := func(peer string, hashes []common.Hash) error { + p := h.peers.peer(peer) + if p == nil { + return errors.New("unknown peer") + } + return p.RequestTxs(hashes) } + h.txFetcher = fetcher.NewTxFetcher(h.txpool.Has, h.txpool.AddRemotes, fetchTx) + h.chainSync = newChainSyncer(h) + return h, nil } -func (pm *ProtocolManager) removePeer(id string) { - // Short circuit if the peer was already removed - peer := pm.peers.Peer(id) - if peer == nil { - return - } - log.Debug("Removing Ethereum peer", "peer", id) - - // Unregister the peer from the downloader and Ethereum peer set - pm.downloader.UnregisterPeer(id) - if err := pm.peers.Unregister(id); err != nil { - log.Error("Peer removal failed", "peer", id, "err", err) +// runEthPeer registers an eth peer into the joint eth/snap peerset, adds it to +// various subsystems and starts handling messages. +func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error { + // If the peer has a `snap` extension, wait for it to connect so we can have + // a uniform initialization/teardown mechanism + snap, err := h.peers.waitSnapExtension(peer) + if err != nil { + peer.Log().Error("Snapshot extension barrier failed", "err", err) + return err } - // Hard disconnect at the networking layer - if peer != nil { - peer.Peer.Disconnect(p2p.DiscUselessPeer) + // TODO(karalabe): Not sure why this is needed + if !h.chainSync.handlePeerEvent(peer) { + return p2p.DiscQuitting } -} - -func (pm *ProtocolManager) Start(maxPeers int) { - pm.maxPeers = maxPeers - - // broadcast transactions - pm.txsCh = make(chan core.NewTxsEvent, txChanSize) - pm.txsSub = pm.txpool.SubscribeNewTxsEvent(pm.txsCh) - go pm.txBroadcastLoop() - - // broadcast mined blocks - pm.minedBlockSub = pm.eventMux.Subscribe(core.NewMinedBlockEvent{}) - go pm.minedBroadcastLoop() - - // start sync handlers - go pm.syncer() - go pm.txsyncLoop() -} - -func (pm *ProtocolManager) Stop() { - log.Info("Stopping Ethereum protocol") - - pm.txsSub.Unsubscribe() // quits txBroadcastLoop - pm.minedBlockSub.Unsubscribe() // quits blockBroadcastLoop - - // Quit the sync loop. - // After this send has completed, no new peers will be accepted. - pm.noMorePeers <- struct{}{} - - // Quit fetcher, txsyncLoop. - close(pm.quitSync) - - // 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 all peer handler goroutines and the loops to come down. - pm.wg.Wait() - - log.Info("Ethereum protocol stopped") -} - -func (pm *ProtocolManager) newPeer(pv int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - return newPeer(pv, p, newMeteredMsgWriter(rw)) -} - -// handle is the callback invoked to manage the life cycle of an eth peer. When -// this function terminates, the peer is disconnected. -func (pm *ProtocolManager) handle(p *peer) error { - // Ignore maxPeers if this is a trusted peer - if pm.peers.Len() >= pm.maxPeers && !p.Peer.Info().Network.Trusted { - return p2p.DiscTooManyPeers - } - p.Log().Debug("Ethereum peer connected", "name", p.Name()) + h.peerWG.Add(1) + defer h.peerWG.Done() // Execute the Ethereum handshake var ( - genesis = pm.blockchain.Genesis() - head = pm.blockchain.CurrentHeader() + genesis = h.chain.Genesis() + head = h.chain.CurrentHeader() hash = head.Hash() number = head.Number.Uint64() - td = pm.blockchain.GetTd(hash, number) + td = h.chain.GetTd(hash, number) ) - if err := p.Handshake(pm.networkID, td, hash, genesis.Hash()); err != nil { - p.Log().Debug("Ethereum handshake failed", "err", err) + forkID := forkid.NewID(h.chain.Config(), h.chain.Genesis().Hash(), h.chain.CurrentHeader().Number.Uint64()) + if err := peer.Handshake(h.networkID, td, hash, genesis.Hash(), forkID, h.forkFilter); err != nil { + peer.Log().Debug("Ethereum handshake failed", "err", err) return err } - if rw, ok := p.rw.(*meteredMsgReadWriter); ok { - rw.Init(p.version) + reject := false // reserved peer slots + if atomic.LoadUint32(&h.snapSync) == 1 { + if snap == nil { + // If we are running snap-sync, we want to reserve roughly half the peer + // slots for peers supporting the snap protocol. + // The logic here is; we only allow up to 5 more non-snap peers than snap-peers. + if all, snp := h.peers.len(), h.peers.snapLen(); all-snp > snp+5 { + reject = true + } + } } + // Ignore maxPeers if this is a trusted peer + if !peer.Peer.Info().Network.Trusted { + if reject || h.peers.len() >= h.maxPeers { + return p2p.DiscTooManyPeers + } + } + peer.Log().Debug("Ethereum peer connected", "name", peer.Name()) + // Register the peer locally - if err := pm.peers.Register(p); err != nil { - p.Log().Error("Ethereum peer registration failed", "err", err) + if err := h.peers.registerPeer(peer, snap); err != nil { + peer.Log().Error("Ethereum peer registration failed", "err", err) return err } - defer pm.removePeer(p.id) + defer h.unregisterPeer(peer.ID()) + p := h.peers.peer(peer.ID()) + if p == nil { + return errors.New("peer dropped during handling") + } // Register the peer in the downloader. If the downloader considers it banned, we disconnect - if err := pm.downloader.RegisterPeer(p.id, p.version, p); err != nil { + if err := h.downloader.RegisterPeer(peer.ID(), peer.Version(), peer); err != nil { + peer.Log().Error("Failed to register peer in eth syncer", "err", err) return err } + if snap != nil { + if err := h.downloader.SnapSyncer.Register(snap); err != nil { + peer.Log().Error("Failed to register peer in snap syncer", "err", err) + return err + } + } + h.chainSync.handlePeerEvent(peer) + // Propagate existing transactions. new transactions appearing // after this will be sent via broadcasts. - pm.syncTransactions(p) + h.syncTransactions(peer) + + // Create a notification channel for pending requests if the peer goes down + dead := make(chan struct{}) + defer close(dead) // If we have a trusted CHT, reject all peers below that (avoid fast sync eclipse) - if pm.checkpointHash != (common.Hash{}) { + if h.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 { + resCh := make(chan *eth.Response) + if _, err := peer.RequestHeadersByNumber(h.checkpointNumber, 1, 0, false, resCh); err != nil { return err } // Start a timer to disconnect if the peer doesn't reply in time - 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.syncDrop != nil { - p.syncDrop.Stop() - p.syncDrop = nil - } - }() - } - // If we have any explicit whitelist block hashes, request them - for number := range pm.whitelist { - if err := p.RequestHeadersByNumber(number, 1, 0, false); err != nil { - return err - } - } - // Handle incoming messages until the connection is torn down - for { - if err := pm.handleMsg(p); err != nil { - p.Log().Debug("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 (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 - } - if msg.Size > protocolMaxMsgSize { - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, protocolMaxMsgSize) - } - defer msg.Discard() + go func() { + timeout := time.NewTimer(syncChallengeTimeout) + defer timeout.Stop() - // Handle the message depending on its contents - switch { - case msg.Code == StatusMsg: - // Status messages should never arrive after the handshake - return errResp(ErrExtraStatusMsg, "uncontrolled status message") - - // Block header query, collect the requested headers and reply - case msg.Code == GetBlockHeadersMsg: - // Decode the complex header query - var query getBlockHeadersData - if err := msg.Decode(&query); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - 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 && len(headers) < downloader.MaxHeaderFetch { - // 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() + select { + case res := <-resCh: + headers := ([]*types.Header)(*res.Res.(*eth.BlockHeadersPacket)) + if len(headers) == 0 { + // If we're doing a snap 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(&h.snapSync) == 1 { + peer.Log().Warn("Dropping unsynced node during sync", "addr", peer.RemoteAddr(), "type", peer.Name()) + res.Done <- errors.New("unsynced node cannot serve sync") + return } - } else { - origin = pm.blockchain.GetHeader(query.Origin.Hash, query.Origin.Number) + res.Done <- nil + return } - } 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 - } + // Validate the header and either drop the peer or continue + if len(headers) > 1 { + res.Done <- errors.New("too many headers in checkpoint response") + return } - 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 + if headers[0].Hash() != h.checkpointHash { + res.Done <- errors.New("checkpoint hash mismatch") + return } + res.Done <- nil - case !query.Reverse: - // Number based traversal towards the leaf block - query.Origin.Number += query.Skip + 1 - } - } - return p.SendBlockHeaders(headers) + case <-timeout.C: + peer.Log().Warn("Checkpoint challenge timed out, dropping", "addr", peer.RemoteAddr(), "type", peer.Name()) + h.removePeer(peer.ID()) - case msg.Code == BlockHeadersMsg: - // A batch of headers arrived to one of our previous requests - var headers []*types.Header - if err := msg.Decode(&headers); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // 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") + case <-dead: + // Peer handler terminated, abort all goroutines } + }() + } + // If we have any explicit peer required block hashes, request them + for number, hash := range h.requiredBlocks { + resCh := make(chan *eth.Response) + if _, err := peer.RequestHeadersByNumber(number, 1, 0, false, resCh); err != nil { + return err } - // Filter out any explicitly requested headers, deliver the rest to the downloader - filter := len(headers) == 1 - if filter { - // 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 + go func(number uint64, hash common.Hash) { + timeout := time.NewTimer(syncChallengeTimeout) + defer timeout.Stop() + select { + case res := <-resCh: + headers := ([]*types.Header)(*res.Res.(*eth.BlockHeadersPacket)) + if len(headers) == 0 { + // Required blocks are allowed to be missing if the remote + // node is not yet synced + res.Done <- nil + return + } // Validate the header and either drop the peer or continue - if headers[0].Hash() != pm.checkpointHash { - return errors.New("checkpoint hash mismatch") + if len(headers) > 1 { + res.Done <- errors.New("too many headers in required block response") + return } - return nil - } - // Otherwise if it's a whitelisted block, validate against the set - if want, ok := pm.whitelist[headers[0].Number.Uint64()]; ok { - if hash := headers[0].Hash(); want != hash { - p.Log().Info("Whitelist mismatch, dropping peer", "number", headers[0].Number.Uint64(), "hash", hash, "want", want) - return errors.New("whitelist block mismatch") + if headers[0].Number.Uint64() != number || headers[0].Hash() != hash { + peer.Log().Info("Required block mismatch, dropping peer", "number", number, "hash", headers[0].Hash(), "want", hash) + res.Done <- errors.New("required block mismatch") + return } - p.Log().Debug("Whitelist block verified", "number", headers[0].Number.Uint64(), "hash", want) - } - // Irrelevant of the fork checks, send the header to the fetcher just in case - headers = pm.fetcher.FilterHeaders(p.id, headers, time.Now()) - } - if len(headers) > 0 || !filter { - err := pm.downloader.DeliverHeaders(p.id, headers) - if err != nil { - log.Debug("Failed to deliver headers", "err", err) + peer.Log().Debug("Peer required block verified", "number", number, "hash", hash) + res.Done <- nil + case <-timeout.C: + peer.Log().Warn("Required block challenge timed out, dropping", "addr", peer.RemoteAddr(), "type", peer.Name()) + h.removePeer(peer.ID()) } - } + }(number, hash) + } + // Handle incoming messages until the connection is torn down + return handler(peer) +} - case msg.Code == GetBlockBodiesMsg: - // Decode the retrieval message - msgStream := rlp.NewStream(msg.Payload, uint64(msg.Size)) - if _, err := msgStream.List(); err != nil { - return err - } - // Gather blocks until the fetch or network limits is reached - var ( - hash common.Hash - bytes int - bodies []rlp.RawValue - ) - for bytes < softResponseLimit && len(bodies) < downloader.MaxBlockFetch { - // Retrieve the hash of the next block - if err := msgStream.Decode(&hash); err == rlp.EOL { - break - } else if err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Retrieve the requested block body, stopping if enough was found - if data := pm.blockchain.GetBodyRLP(hash); len(data) != 0 { - bodies = append(bodies, data) - bytes += len(data) - } - } - return p.SendBlockBodiesRLP(bodies) +// runSnapExtension registers a `snap` peer into the joint eth/snap peerset and +// starts handling inbound messages. As `snap` is only a satellite protocol to +// `eth`, all subsystem registrations and lifecycle management will be done by +// the main `eth` handler to prevent strange races. +func (h *handler) runSnapExtension(peer *snap.Peer, handler snap.Handler) error { + h.peerWG.Add(1) + defer h.peerWG.Done() - case msg.Code == BlockBodiesMsg: - // A batch of block bodies arrived to one of our previous requests - var request blockBodiesData - if err := msg.Decode(&request); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Deliver them all to the downloader for queuing - transactions := make([][]*types.Transaction, len(request)) - uncles := make([][]*types.Header, len(request)) + if err := h.peers.registerSnapExtension(peer); err != nil { + peer.Log().Warn("Snapshot extension registration failed", "err", err) + return err + } + return handler(peer) +} - for i, body := range request { - transactions[i] = body.Transactions - uncles[i] = body.Uncles - } - // Filter out any explicitly requested bodies, deliver the rest to the downloader - filter := len(transactions) > 0 || len(uncles) > 0 - if filter { - transactions, uncles = pm.fetcher.FilterBodies(p.id, transactions, uncles, time.Now()) - } - if len(transactions) > 0 || len(uncles) > 0 || !filter { - err := pm.downloader.DeliverBodies(p.id, transactions, uncles) - if err != nil { - log.Debug("Failed to deliver bodies", "err", err) - } - } +// removePeer requests disconnection of a peer. +func (h *handler) removePeer(id string) { + peer := h.peers.peer(id) + if peer != nil { + peer.Peer.Disconnect(p2p.DiscUselessPeer) + } +} - case p.version >= eth63 && msg.Code == GetNodeDataMsg: - // Decode the retrieval message - msgStream := rlp.NewStream(msg.Payload, uint64(msg.Size)) - if _, err := msgStream.List(); err != nil { - return err - } - // Gather state data until the fetch or network limits is reached - var ( - hash common.Hash - bytes int - data [][]byte - ) - for bytes < softResponseLimit && len(data) < downloader.MaxStateFetch { - // Retrieve the hash of the next state entry - if err := msgStream.Decode(&hash); err == rlp.EOL { - break - } else if err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Retrieve the requested state entry, stopping if enough was found - if entry, err := pm.blockchain.TrieNode(hash); err == nil { - data = append(data, entry) - bytes += len(entry) - } - } - return p.SendNodeData(data) +// unregisterPeer removes a peer from the downloader, fetchers and main peer set. +func (h *handler) unregisterPeer(id string) { + // Create a custom logger to avoid printing the entire id + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:8]) + } + // Abort if the peer does not exist + peer := h.peers.peer(id) + if peer == nil { + logger.Error("Ethereum peer removal failed", "err", errPeerNotRegistered) + return + } + // Remove the `eth` peer if it exists + logger.Debug("Removing Ethereum peer", "snap", peer.snapExt != nil) - case p.version >= eth63 && msg.Code == NodeDataMsg: - // A batch of node state data arrived to one of our previous requests - var data [][]byte - if err := msg.Decode(&data); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Deliver all to the downloader - if err := pm.downloader.DeliverNodeData(p.id, data); err != nil { - log.Debug("Failed to deliver node state data", "err", err) - } + // Remove the `snap` extension if it exists + if peer.snapExt != nil { + h.downloader.SnapSyncer.Unregister(id) + } + h.downloader.UnregisterPeer(id) + h.txFetcher.Drop(id) - case p.version >= eth63 && msg.Code == GetReceiptsMsg: - // Decode the retrieval message - msgStream := rlp.NewStream(msg.Payload, uint64(msg.Size)) - if _, err := msgStream.List(); err != nil { - return err - } - // Gather state data until the fetch or network limits is reached - var ( - hash common.Hash - bytes int - receipts []rlp.RawValue - ) - for bytes < softResponseLimit && len(receipts) < downloader.MaxReceiptFetch { - // Retrieve the hash of the next block - if err := msgStream.Decode(&hash); err == rlp.EOL { - break - } else if err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Retrieve the requested block's receipts, skipping if unknown to us - results := pm.blockchain.GetReceiptsByHash(hash) - 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) - } - } - return p.SendReceiptsRLP(receipts) + if err := h.peers.unregisterPeer(id); err != nil { + logger.Error("Ethereum peer removal failed", "err", err) + } +} - case p.version >= eth63 && msg.Code == ReceiptsMsg: - // A batch of receipts arrived to one of our previous requests - var receipts [][]*types.Receipt - if err := msg.Decode(&receipts); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Deliver all to the downloader - if err := pm.downloader.DeliverReceipts(p.id, receipts); err != nil { - log.Debug("Failed to deliver receipts", "err", err) - } +func (h *handler) Start(maxPeers int) { + h.maxPeers = maxPeers - case msg.Code == NewBlockHashesMsg: - var announces newBlockHashesData - if err := msg.Decode(&announces); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - // Mark the hashes as present at the remote node - for _, block := range announces { - p.MarkBlock(block.Hash) - } - // Schedule all the unknown hashes for retrieval - unknown := make(newBlockHashesData, 0, len(announces)) - for _, block := range announces { - if !pm.blockchain.HasBlock(block.Hash, block.Number) { - unknown = append(unknown, block) - } - } - for _, block := range unknown { - pm.fetcher.Notify(p.id, block.Hash, block.Number, time.Now(), p.RequestOneHeader, p.RequestBodies) - } + // broadcast transactions + h.wg.Add(1) + h.txsCh = make(chan core.NewTxsEvent, txChanSize) + h.txsSub = h.txpool.SubscribeNewTxsEvent(h.txsCh) + go h.txBroadcastLoop() - case msg.Code == NewBlockMsg: - // Retrieve and decode the propagated block - var request newBlockData - if err := msg.Decode(&request); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - if err := request.sanityCheck(); err != nil { - return err - } - request.Block.ReceivedAt = msg.ReceivedAt - request.Block.ReceivedFrom = p - - // Mark the peer as owning the block and schedule it for import - p.MarkBlock(request.Block.Hash()) - pm.fetcher.Enqueue(p.id, request.Block) - - // Assuming the block is importable by the peer, but possibly not yet done so, - // calculate the head hash and TD that the peer truly must have. - var ( - trueHead = request.Block.ParentHash() - trueTD = new(big.Int).Sub(request.TD, request.Block.Difficulty()) - ) - // Update the peer's total difficulty if better than the previous - if _, td := p.Head(); trueTD.Cmp(td) > 0 { - p.SetHead(trueHead, trueTD) - - // Schedule a sync if above ours. Note, this will not fire a sync for a gap of - // a single block (as the true TD is below the propagated block), however this - // scenario should easily be covered by the fetcher. - currentBlock := pm.blockchain.CurrentBlock() - if trueTD.Cmp(pm.blockchain.GetTd(currentBlock.Hash(), currentBlock.NumberU64())) > 0 { - go pm.synchronise(p) - } - } + // broadcast mined blocks + h.wg.Add(1) + h.minedBlockSub = h.eventMux.Subscribe(core.NewMinedBlockEvent{}) + go h.minedBroadcastLoop() - case msg.Code == TxMsg: - // Transactions arrived, make sure we have a valid and fresh chain to handle them - if atomic.LoadUint32(&pm.acceptTxs) == 0 { - break - } - // Transactions can be processed, 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) - } - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return errResp(ErrDecode, "transaction %d is nil", i) - } - p.MarkTransaction(tx.Hash()) - } - pm.txpool.AddRemotes(txs) + // start sync handlers + h.wg.Add(1) + go h.chainSync.loop() +} - default: - return errResp(ErrInvalidMsgCode, "%v", msg.Code) - } - return nil +func (h *handler) Stop() { + h.txsSub.Unsubscribe() // quits txBroadcastLoop + h.minedBlockSub.Unsubscribe() // quits blockBroadcastLoop + + // Quit chainSync and txsync64. + // After this is done, no new peers will be accepted. + close(h.quitSync) + h.wg.Wait() + + // 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 h.peers yet + // will exit when they try to register. + h.peers.close() + h.peerWG.Wait() + + log.Info("Ethereum protocol stopped") } -// BroadcastBlock will either propagate a block to a subset of it's peers, or -// will only announce it's availability (depending what's requested). -func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { +// BroadcastBlock will either propagate a block to a subset of its peers, or +// will only announce its availability (depending what's requested). +func (h *handler) BroadcastBlock(block *types.Block, propagate bool) { + // Disable the block propagation if the chain has already entered the PoS + // stage. The block propagation is delegated to the consensus layer. + if h.merger.PoSFinalized() { + return + } + // Disable the block propagation if it's the post-merge block. + if beacon, ok := h.chain.Engine().(*beacon.Beacon); ok { + if beacon.IsPoSHeader(block.Header()) { + return + } + } hash := block.Hash() - peers := pm.peers.PeersWithoutBlock(hash) + peers := h.peers.peersWithoutBlock(hash) // If propagation is requested, send to a subset of the peer if propagate { // Calculate the TD of the block (it's not imported yet, so block.Td is not valid) var td *big.Int - if parent := pm.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1); parent != nil { - td = new(big.Int).Add(block.Difficulty(), pm.blockchain.GetTd(block.ParentHash(), block.NumberU64()-1)) + if parent := h.chain.GetBlock(block.ParentHash(), block.NumberU64()-1); parent != nil { + td = new(big.Int).Add(block.Difficulty(), h.chain.GetTd(block.ParentHash(), block.NumberU64()-1)) } else { log.Error("Propagating dangling block", "number", block.Number(), "hash", hash) return } // Send the block to a subset of our peers - transferLen := int(math.Sqrt(float64(len(peers)))) - if transferLen < minBroadcastPeers { - transferLen = minBroadcastPeers - } - if transferLen > len(peers) { - transferLen = len(peers) - } - transfer := peers[:transferLen] + transfer := peers[:int(math.Sqrt(float64(len(peers))))] for _, peer := range transfer { peer.AsyncSendNewBlock(block, td) } @@ -770,7 +603,7 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { return } // Otherwise if the block is indeed in out own chain, announce it - if pm.blockchain.HasBlock(hash, block.NumberU64()) { + if h.chain.HasBlock(hash, block.NumberU64()) { for _, peer := range peers { peer.AsyncSendNewBlockHash(block) } @@ -778,67 +611,70 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) { } } -// BroadcastTxs will propagate a batch of transactions to all peers which are not known to +// BroadcastTransactions will propagate a batch of transactions +// - To a square root of all peers +// - And, separately, as announcements to all peers which are not known to // already have the given transaction. -func (pm *ProtocolManager) BroadcastTxs(txs types.Transactions) { - var txset = make(map[*peer]types.Transactions) +func (h *handler) BroadcastTransactions(txs types.Transactions) { + var ( + annoCount int // Count of announcements made + annoPeers int + directCount int // Count of the txs sent directly to peers + directPeers int // Count of the peers that were sent transactions directly + + txset = make(map[*ethPeer][]common.Hash) // Set peer->hash to transfer directly + annos = make(map[*ethPeer][]common.Hash) // Set peer->hash to announce + ) // Broadcast transactions to a batch of peers not knowing about it for _, tx := range txs { - peers := pm.peers.PeersWithoutTx(tx.Hash()) - for _, peer := range peers { - txset[peer] = append(txset[peer], tx) + peers := h.peers.peersWithoutTransaction(tx.Hash()) + // Send the tx unconditionally to a subset of our peers + numDirect := int(math.Sqrt(float64(len(peers)))) + for _, peer := range peers[:numDirect] { + txset[peer] = append(txset[peer], tx.Hash()) } - log.Trace("Broadcast transaction", "hash", tx.Hash(), "recipients", len(peers)) + // For the remaining peers, send announcement only + for _, peer := range peers[numDirect:] { + annos[peer] = append(annos[peer], tx.Hash()) + } + } + for peer, hashes := range txset { + directPeers++ + directCount += len(hashes) + peer.AsyncSendTransactions(hashes) } - // FIXME include this again: peers = peers[:int(math.Sqrt(float64(len(peers))))] - for peer, txs := range txset { - peer.AsyncSendTransactions(txs) + for peer, hashes := range annos { + annoPeers++ + annoCount += len(hashes) + peer.AsyncSendPooledTransactionHashes(hashes) } + log.Debug("Transaction broadcast", "txs", len(txs), + "announce packs", annoPeers, "announced hashes", annoCount, + "tx packs", directPeers, "broadcast txs", directCount) } -// Mined broadcast loop -func (pm *ProtocolManager) minedBroadcastLoop() { - // automatically stops if unsubscribe - for obj := range pm.minedBlockSub.Chan() { +// minedBroadcastLoop sends mined blocks to connected peers. +func (h *handler) minedBroadcastLoop() { + defer h.wg.Done() + + for obj := range h.minedBlockSub.Chan() { if ev, ok := obj.Data.(core.NewMinedBlockEvent); ok { - pm.BroadcastBlock(ev.Block, true) // First propagate block to peers - pm.BroadcastBlock(ev.Block, false) // Only then announce to the rest + h.BroadcastBlock(ev.Block, true) // First propagate block to peers + h.BroadcastBlock(ev.Block, false) // Only then announce to the rest } } } -func (pm *ProtocolManager) txBroadcastLoop() { +// txBroadcastLoop announces new transactions to connected peers. +func (h *handler) txBroadcastLoop() { + defer h.wg.Done() for { select { - case event := <-pm.txsCh: - pm.BroadcastTxs(event.Txs) - - // Err() channel will be closed when unsubscribing. - case <-pm.txsSub.Err(): + case event := <-h.txsCh: + h.BroadcastTransactions(event.Txs) + case <-h.txsSub.Err(): return } } } - -// NodeInfo represents a short summary of the Ethereum sub-protocol metadata -// known about the host peer. -type NodeInfo struct { - Network uint64 `json:"network"` // Ethereum network ID (1=Frontier, 2=Morden, Ropsten=3, Rinkeby=4) - Difficulty *big.Int `json:"difficulty"` // Total difficulty of the host's blockchain - Genesis common.Hash `json:"genesis"` // SHA3 hash of the host's genesis block - Config *params.ChainConfig `json:"config"` // Chain configuration for the fork rules - Head common.Hash `json:"head"` // SHA3 hash of the host's best owned block -} - -// NodeInfo retrieves some protocol metadata about the running host node. -func (pm *ProtocolManager) NodeInfo() *NodeInfo { - currentBlock := pm.blockchain.CurrentBlock() - return &NodeInfo{ - Network: pm.networkID, - Difficulty: pm.blockchain.GetTd(currentBlock.Hash(), currentBlock.NumberU64()), - Genesis: pm.blockchain.Genesis().Hash(), - Config: pm.blockchain.Config(), - Head: currentBlock.Hash(), - } -} diff --git a/eth/handler_eth.go b/eth/handler_eth.go new file mode 100644 index 00000000..12e91ec7 --- /dev/null +++ b/eth/handler_eth.go @@ -0,0 +1,138 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "math/big" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// ethHandler implements the eth.Backend interface to handle the various network +// packets that are sent as replies or broadcasts. +type ethHandler handler + +func (h *ethHandler) Chain() *core.BlockChain { return h.chain } +func (h *ethHandler) TxPool() eth.TxPool { return h.txpool } + +// RunPeer is invoked when a peer joins on the `eth` protocol. +func (h *ethHandler) RunPeer(peer *eth.Peer, hand eth.Handler) error { + return (*handler)(h).runEthPeer(peer, hand) +} + +// PeerInfo retrieves all known `eth` information about a peer. +func (h *ethHandler) PeerInfo(id enode.ID) interface{} { + if p := h.peers.peer(id.String()); p != nil { + return p.info() + } + return nil +} + +// AcceptTxs retrieves whether transaction processing is enabled on the node +// or if inbound transactions should simply be dropped. +func (h *ethHandler) AcceptTxs() bool { + return atomic.LoadUint32(&h.acceptTxs) == 1 +} + +// Handle is invoked from a peer's message handler when it receives a new remote +// message that the handler couldn't consume and serve itself. +func (h *ethHandler) Handle(peer *eth.Peer, packet eth.Packet) error { + // Consume any broadcasts and announces, forwarding the rest to the downloader + switch packet := packet.(type) { + case *eth.NewBlockHashesPacket: + hashes, numbers := packet.Unpack() + return h.handleBlockAnnounces(peer, hashes, numbers) + + case *eth.NewBlockPacket: + return h.handleBlockBroadcast(peer, packet.Block, packet.TD) + + case *eth.NewPooledTransactionHashesPacket: + return h.txFetcher.Notify(peer.ID(), *packet) + + case *eth.TransactionsPacket: + return h.txFetcher.Enqueue(peer.ID(), *packet, false) + + case *eth.PooledTransactionsPacket: + return h.txFetcher.Enqueue(peer.ID(), *packet, true) + + default: + return fmt.Errorf("unexpected eth packet type: %T", packet) + } +} + +// handleBlockAnnounces is invoked from a peer's message handler when it transmits a +// batch of block announcements for the local node to process. +func (h *ethHandler) handleBlockAnnounces(peer *eth.Peer, hashes []common.Hash, numbers []uint64) error { + // Drop all incoming block announces from the p2p network if + // the chain already entered the pos stage and disconnect the + // remote peer. + if h.merger.PoSFinalized() { + // TODO (MariusVanDerWijden) drop non-updated peers after the merge + return nil + // return errors.New("unexpected block announces") + } + // Schedule all the unknown hashes for retrieval + var ( + unknownHashes = make([]common.Hash, 0, len(hashes)) + unknownNumbers = make([]uint64, 0, len(numbers)) + ) + for i := 0; i < len(hashes); i++ { + if !h.chain.HasBlock(hashes[i], numbers[i]) { + unknownHashes = append(unknownHashes, hashes[i]) + unknownNumbers = append(unknownNumbers, numbers[i]) + } + } + for i := 0; i < len(unknownHashes); i++ { + h.blockFetcher.Notify(peer.ID(), unknownHashes[i], unknownNumbers[i], time.Now(), peer.RequestOneHeader, peer.RequestBodies) + } + return nil +} + +// handleBlockBroadcast is invoked from a peer's message handler when it transmits a +// block broadcast for the local node to process. +func (h *ethHandler) handleBlockBroadcast(peer *eth.Peer, block *types.Block, td *big.Int) error { + // Drop all incoming block announces from the p2p network if + // the chain already entered the pos stage and disconnect the + // remote peer. + if h.merger.PoSFinalized() { + // TODO (MariusVanDerWijden) drop non-updated peers after the merge + return nil + // return errors.New("unexpected block announces") + } + // Schedule the block for import + h.blockFetcher.Enqueue(peer.ID(), block) + + // Assuming the block is importable by the peer, but possibly not yet done so, + // calculate the head hash and TD that the peer truly must have. + var ( + trueHead = block.ParentHash() + trueTD = new(big.Int).Sub(td, block.Difficulty()) + ) + // Update the peer's total difficulty if better than the previous + if _, td := peer.Head(); trueTD.Cmp(td) > 0 { + peer.SetHead(trueHead, trueTD) + h.chainSync.handlePeerEvent(peer) + } + return nil +} diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go new file mode 100644 index 00000000..9c2fcd36 --- /dev/null +++ b/eth/handler_eth_test.go @@ -0,0 +1,747 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "math/big" + "math/rand" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "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/forkid" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/event" + "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" +) + +// testEthHandler is a mock event handler to listen for inbound network requests +// on the `eth` protocol and convert them into a more easily testable form. +type testEthHandler struct { + blockBroadcasts event.Feed + txAnnounces event.Feed + txBroadcasts event.Feed +} + +func (h *testEthHandler) Chain() *core.BlockChain { panic("no backing chain") } +func (h *testEthHandler) TxPool() eth.TxPool { panic("no backing tx pool") } +func (h *testEthHandler) AcceptTxs() bool { return true } +func (h *testEthHandler) RunPeer(*eth.Peer, eth.Handler) error { panic("not used in tests") } +func (h *testEthHandler) PeerInfo(enode.ID) interface{} { panic("not used in tests") } + +func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { + switch packet := packet.(type) { + case *eth.NewBlockPacket: + h.blockBroadcasts.Send(packet.Block) + return nil + + case *eth.NewPooledTransactionHashesPacket: + h.txAnnounces.Send(([]common.Hash)(*packet)) + return nil + + case *eth.TransactionsPacket: + h.txBroadcasts.Send(([]*types.Transaction)(*packet)) + return nil + + case *eth.PooledTransactionsPacket: + h.txBroadcasts.Send(([]*types.Transaction)(*packet)) + return nil + + default: + panic(fmt.Sprintf("unexpected eth packet type in tests: %T", packet)) + } +} + +// Tests that peers are correctly accepted (or rejected) based on the advertised +// fork IDs in the protocol handshake. +func TestForkIDSplit66(t *testing.T) { testForkIDSplit(t, eth.ETH66) } + +func testForkIDSplit(t *testing.T, protocol uint) { + t.Parallel() + + var ( + engine = ethash.NewFaker() + + configNoFork = ¶ms.ChainConfig{HomesteadBlock: big.NewInt(1)} + configProFork = ¶ms.ChainConfig{ + HomesteadBlock: big.NewInt(1), + EIP150Block: big.NewInt(2), + EIP155Block: big.NewInt(2), + EIP158Block: big.NewInt(2), + ByzantiumBlock: big.NewInt(3), + } + dbNoFork = rawdb.NewMemoryDatabase() + dbProFork = rawdb.NewMemoryDatabase() + + gspecNoFork = &core.Genesis{Config: configNoFork} + gspecProFork = &core.Genesis{Config: configProFork} + + genesisNoFork = gspecNoFork.MustCommit(dbNoFork) + genesisProFork = gspecProFork.MustCommit(dbProFork) + + chainNoFork, _ = core.NewBlockChain(dbNoFork, nil, gspecNoFork, nil, engine, vm.Config{}, nil, nil) + chainProFork, _ = core.NewBlockChain(dbProFork, nil, gspecProFork, nil, engine, vm.Config{}, nil, nil) + + blocksNoFork, _ = core.GenerateChain(configNoFork, genesisNoFork, engine, dbNoFork, 2, nil) + blocksProFork, _ = core.GenerateChain(configProFork, genesisProFork, engine, dbProFork, 2, nil) + + ethNoFork, _ = newHandler(&handlerConfig{ + Database: dbNoFork, + Chain: chainNoFork, + TxPool: newTestTxPool(), + Merger: consensus.NewMerger(rawdb.NewMemoryDatabase()), + Network: 1, + Sync: downloader.FullSync, + BloomCache: 1, + }) + ethProFork, _ = newHandler(&handlerConfig{ + Database: dbProFork, + Chain: chainProFork, + TxPool: newTestTxPool(), + Merger: consensus.NewMerger(rawdb.NewMemoryDatabase()), + Network: 1, + Sync: downloader.FullSync, + BloomCache: 1, + }) + ) + ethNoFork.Start(1000) + ethProFork.Start(1000) + + // Clean up everything after ourselves + defer chainNoFork.Stop() + defer chainProFork.Stop() + + defer ethNoFork.Stop() + defer ethProFork.Stop() + + // Both nodes should allow the other to connect (same genesis, next fork is the same) + p2pNoFork, p2pProFork := p2p.MsgPipe() + defer p2pNoFork.Close() + defer p2pProFork.Close() + + peerNoFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil) + peerProFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil) + defer peerNoFork.Close() + defer peerProFork.Close() + + errc := make(chan error, 2) + go func(errc chan error) { + errc <- ethNoFork.runEthPeer(peerProFork, func(peer *eth.Peer) error { return nil }) + }(errc) + go func(errc chan error) { + errc <- ethProFork.runEthPeer(peerNoFork, func(peer *eth.Peer) error { return nil }) + }(errc) + + for i := 0; i < 2; i++ { + select { + case err := <-errc: + if err != nil { + t.Fatalf("frontier nofork <-> profork failed: %v", err) + } + case <-time.After(250 * time.Millisecond): + t.Fatalf("frontier nofork <-> profork handler timeout") + } + } + // Progress into Homestead. Fork's match, so we don't care what the future holds + chainNoFork.InsertChain(blocksNoFork[:1]) + chainProFork.InsertChain(blocksProFork[:1]) + + p2pNoFork, p2pProFork = p2p.MsgPipe() + defer p2pNoFork.Close() + defer p2pProFork.Close() + + peerNoFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{1}, "", nil), p2pNoFork, nil) + peerProFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{2}, "", nil), p2pProFork, nil) + defer peerNoFork.Close() + defer peerProFork.Close() + + errc = make(chan error, 2) + go func(errc chan error) { + errc <- ethNoFork.runEthPeer(peerProFork, func(peer *eth.Peer) error { return nil }) + }(errc) + go func(errc chan error) { + errc <- ethProFork.runEthPeer(peerNoFork, func(peer *eth.Peer) error { return nil }) + }(errc) + + for i := 0; i < 2; i++ { + select { + case err := <-errc: + if err != nil { + t.Fatalf("homestead nofork <-> profork failed: %v", err) + } + case <-time.After(250 * time.Millisecond): + t.Fatalf("homestead nofork <-> profork handler timeout") + } + } + // Progress into Spurious. Forks mismatch, signalling differing chains, reject + chainNoFork.InsertChain(blocksNoFork[1:2]) + chainProFork.InsertChain(blocksProFork[1:2]) + + p2pNoFork, p2pProFork = p2p.MsgPipe() + defer p2pNoFork.Close() + defer p2pProFork.Close() + + peerNoFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil) + peerProFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil) + defer peerNoFork.Close() + defer peerProFork.Close() + + errc = make(chan error, 2) + go func(errc chan error) { + errc <- ethNoFork.runEthPeer(peerProFork, func(peer *eth.Peer) error { return nil }) + }(errc) + go func(errc chan error) { + errc <- ethProFork.runEthPeer(peerNoFork, func(peer *eth.Peer) error { return nil }) + }(errc) + + var successes int + for i := 0; i < 2; i++ { + select { + case err := <-errc: + if err == nil { + successes++ + if successes == 2 { // Only one side disconnects + t.Fatalf("fork ID rejection didn't happen") + } + } + case <-time.After(250 * time.Millisecond): + t.Fatalf("split peers not rejected") + } + } +} + +// Tests that received transactions are added to the local pool. +func TestRecvTransactions66(t *testing.T) { testRecvTransactions(t, eth.ETH66) } + +func testRecvTransactions(t *testing.T, protocol uint) { + t.Parallel() + + // Create a message handler, configure it to accept transactions and watch them + handler := newTestHandler() + defer handler.close() + + handler.handler.acceptTxs = 1 // mark synced to accept transactions + + txs := make(chan core.NewTxsEvent) + sub := handler.txpool.SubscribeNewTxsEvent(txs) + defer sub.Unsubscribe() + + // Create a source peer to send messages through and a sink handler to receive them + p2pSrc, p2pSink := p2p.MsgPipe() + defer p2pSrc.Close() + defer p2pSink.Close() + + src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool) + sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool) + defer src.Close() + defer sink.Close() + + go handler.handler.runEthPeer(sink, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(handler.handler), peer) + }) + // Run the handshake locally to avoid spinning up a source handler + var ( + genesis = handler.chain.Genesis() + head = handler.chain.CurrentBlock() + td = handler.chain.GetTd(head.Hash(), head.NumberU64()) + ) + if err := src.Handshake(1, td, head.Hash(), genesis.Hash(), forkid.NewIDWithChain(handler.chain), forkid.NewFilter(handler.chain)); err != nil { + t.Fatalf("failed to run protocol handshake") + } + // Send the transaction to the sink and verify that it's added to the tx pool + tx := types.NewTransaction(0, common.Address{}, big.NewInt(0), 100000, big.NewInt(0), nil) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) + + if err := src.SendTransactions([]*types.Transaction{tx}); err != nil { + t.Fatalf("failed to send transaction: %v", err) + } + select { + case event := <-txs: + if len(event.Txs) != 1 { + t.Errorf("wrong number of added transactions: got %d, want 1", len(event.Txs)) + } else if event.Txs[0].Hash() != tx.Hash() { + t.Errorf("added wrong tx hash: got %v, want %v", event.Txs[0].Hash(), tx.Hash()) + } + case <-time.After(2 * time.Second): + t.Errorf("no NewTxsEvent received within 2 seconds") + } +} + +// This test checks that pending transactions are sent. +func TestSendTransactions66(t *testing.T) { testSendTransactions(t, eth.ETH66) } + +func testSendTransactions(t *testing.T, protocol uint) { + t.Parallel() + + // Create a message handler and fill the pool with big transactions + handler := newTestHandler() + defer handler.close() + + insert := make([]*types.Transaction, 100) + for nonce := range insert { + tx := types.NewTransaction(uint64(nonce), common.Address{}, big.NewInt(0), 100000, big.NewInt(0), make([]byte, 10240)) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) + + insert[nonce] = tx + } + go handler.txpool.AddRemotes(insert) // Need goroutine to not block on feed + time.Sleep(250 * time.Millisecond) // Wait until tx events get out of the system (can't use events, tx broadcaster races with peer join) + + // Create a source handler to send messages through and a sink peer to receive them + p2pSrc, p2pSink := p2p.MsgPipe() + defer p2pSrc.Close() + defer p2pSink.Close() + + src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool) + sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool) + defer src.Close() + defer sink.Close() + + go handler.handler.runEthPeer(src, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(handler.handler), peer) + }) + // Run the handshake locally to avoid spinning up a source handler + var ( + genesis = handler.chain.Genesis() + head = handler.chain.CurrentBlock() + td = handler.chain.GetTd(head.Hash(), head.NumberU64()) + ) + if err := sink.Handshake(1, td, head.Hash(), genesis.Hash(), forkid.NewIDWithChain(handler.chain), forkid.NewFilter(handler.chain)); err != nil { + t.Fatalf("failed to run protocol handshake") + } + // After the handshake completes, the source handler should stream the sink + // the transactions, subscribe to all inbound network events + backend := new(testEthHandler) + + anns := make(chan []common.Hash) + annSub := backend.txAnnounces.Subscribe(anns) + defer annSub.Unsubscribe() + + bcasts := make(chan []*types.Transaction) + bcastSub := backend.txBroadcasts.Subscribe(bcasts) + defer bcastSub.Unsubscribe() + + go eth.Handle(backend, sink) + + // Make sure we get all the transactions on the correct channels + seen := make(map[common.Hash]struct{}) + for len(seen) < len(insert) { + switch protocol { + case 66: + select { + case hashes := <-anns: + for _, hash := range hashes { + if _, ok := seen[hash]; ok { + t.Errorf("duplicate transaction announced: %x", hash) + } + seen[hash] = struct{}{} + } + case <-bcasts: + t.Errorf("initial tx broadcast received on post eth/66") + } + + default: + panic("unsupported protocol, please extend test") + } + } + for _, tx := range insert { + if _, ok := seen[tx.Hash()]; !ok { + t.Errorf("missing transaction: %x", tx.Hash()) + } + } +} + +// Tests that transactions get propagated to all attached peers, either via direct +// broadcasts or via announcements/retrievals. +func TestTransactionPropagation66(t *testing.T) { testTransactionPropagation(t, eth.ETH66) } + +func testTransactionPropagation(t *testing.T, protocol uint) { + t.Parallel() + + // Create a source handler to send transactions from and a number of sinks + // to receive them. We need multiple sinks since a one-to-one peering would + // broadcast all transactions without announcement. + source := newTestHandler() + source.handler.snapSync = 0 // Avoid requiring snap, otherwise some will be dropped below + defer source.close() + + sinks := make([]*testHandler, 10) + for i := 0; i < len(sinks); i++ { + sinks[i] = newTestHandler() + defer sinks[i].close() + + sinks[i].handler.acceptTxs = 1 // mark synced to accept transactions + } + // Interconnect all the sink handlers with the source handler + for i, sink := range sinks { + sink := sink // Closure for gorotuine below + + sourcePipe, sinkPipe := p2p.MsgPipe() + defer sourcePipe.Close() + defer sinkPipe.Close() + + sourcePeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{byte(i + 1)}, "", nil, sourcePipe), sourcePipe, source.txpool) + sinkPeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{0}, "", nil, sinkPipe), sinkPipe, sink.txpool) + defer sourcePeer.Close() + defer sinkPeer.Close() + + go source.handler.runEthPeer(sourcePeer, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(source.handler), peer) + }) + go sink.handler.runEthPeer(sinkPeer, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(sink.handler), peer) + }) + } + // Subscribe to all the transaction pools + txChs := make([]chan core.NewTxsEvent, len(sinks)) + for i := 0; i < len(sinks); i++ { + txChs[i] = make(chan core.NewTxsEvent, 1024) + + sub := sinks[i].txpool.SubscribeNewTxsEvent(txChs[i]) + defer sub.Unsubscribe() + } + // Fill the source pool with transactions and wait for them at the sinks + txs := make([]*types.Transaction, 1024) + for nonce := range txs { + tx := types.NewTransaction(uint64(nonce), common.Address{}, big.NewInt(0), 100000, big.NewInt(0), nil) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) + + txs[nonce] = tx + } + source.txpool.AddRemotes(txs) + + // Iterate through all the sinks and ensure they all got the transactions + for i := range sinks { + for arrived, timeout := 0, false; arrived < len(txs) && !timeout; { + select { + case event := <-txChs[i]: + arrived += len(event.Txs) + case <-time.After(time.Second): + t.Errorf("sink %d: transaction propagation timed out: have %d, want %d", i, arrived, len(txs)) + timeout = true + } + } + } +} + +// 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.SnapSync, 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.SnapSync, 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.SnapSync, true, false, false, false, true}, + + // If checkpointing is enabled locally and remote response matches, never drop + {downloader.FullSync, true, false, false, true, false}, + {downloader.SnapSync, true, false, false, true, false}, + + // If checkpointing is enabled locally and remote times out, always drop + {downloader.FullSync, true, true, false, true, true}, + {downloader.SnapSync, 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 + + // Create a test handler and inject a CHT into it. The injection is a bit + // ugly, but it beats creating everything manually just to avoid reaching + // into the internals a bit. + handler := newTestHandler() + defer handler.close() + + if syncmode == downloader.SnapSync { + atomic.StoreUint32(&handler.handler.snapSync, 1) + } else { + atomic.StoreUint32(&handler.handler.snapSync, 0) + } + var response *types.Header + if checkpoint { + number := (uint64(rand.Intn(500))+1)*params.CHTFrequency - 1 + response = &types.Header{Number: big.NewInt(int64(number)), Extra: []byte("valid")} + + handler.handler.checkpointNumber = number + handler.handler.checkpointHash = response.Hash() + } + + // Create a challenger peer and a challenged one. + p2pLocal, p2pRemote := p2p.MsgPipe() + defer p2pLocal.Close() + defer p2pRemote.Close() + + local := eth.NewPeer(eth.ETH66, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pLocal), p2pLocal, handler.txpool) + remote := eth.NewPeer(eth.ETH66, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pRemote), p2pRemote, handler.txpool) + defer local.Close() + defer remote.Close() + + handlerDone := make(chan struct{}) + go func() { + defer close(handlerDone) + handler.handler.runEthPeer(local, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(handler.handler), peer) + }) + }() + + // Run the handshake locally to avoid spinning up a remote handler. + var ( + genesis = handler.chain.Genesis() + head = handler.chain.CurrentBlock() + td = handler.chain.GetTd(head.Hash(), head.NumberU64()) + ) + if err := remote.Handshake(1, td, head.Hash(), genesis.Hash(), forkid.NewIDWithChain(handler.chain), forkid.NewFilter(handler.chain)); err != nil { + t.Fatalf("failed to run protocol handshake") + } + // Connect a new peer and check that we receive the checkpoint challenge. + if checkpoint { + msg, err := p2pRemote.ReadMsg() + if err != nil { + t.Fatalf("failed to read checkpoint challenge: %v", err) + } + request := new(eth.GetBlockHeadersPacket66) + if err := msg.Decode(request); err != nil { + t.Fatalf("failed to decode checkpoint challenge: %v", err) + } + query := request.GetBlockHeadersPacket + if query.Origin.Number != response.Number.Uint64() || query.Amount != 1 || query.Skip != 0 || query.Reverse { + t.Fatalf("challenge mismatch: have [%d, %d, %d, %v] want [%d, %d, %d, %v]", + query.Origin.Number, query.Amount, query.Skip, query.Reverse, + response.Number.Uint64(), 1, 0, false) + } + // Create a block to reply to the challenge if no timeout is simulated. + if !timeout { + if empty { + if err := remote.ReplyBlockHeadersRLP(request.RequestId, []rlp.RawValue{}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } else if match { + responseRlp, _ := rlp.EncodeToBytes(response) + if err := remote.ReplyBlockHeadersRLP(request.RequestId, []rlp.RawValue{responseRlp}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } else { + responseRlp, _ := rlp.EncodeToBytes(&types.Header{Number: response.Number}) + if err := remote.ReplyBlockHeadersRLP(request.RequestId, []rlp.RawValue{responseRlp}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } + } + } + // Wait until the test timeout passes to ensure proper cleanup + time.Sleep(syncChallengeTimeout + 300*time.Millisecond) + + // Verify that the remote peer is maintained or dropped. + if drop { + <-handlerDone + if peers := handler.handler.peers.len(); peers != 0 { + t.Fatalf("peer count mismatch: have %d, want %d", peers, 0) + } + } else { + if peers := handler.handler.peers.len(); peers != 1 { + t.Fatalf("peer count mismatch: have %d, want %d", peers, 1) + } + } +} + +// Tests that blocks are broadcast to a sqrt number of peers only. +func TestBroadcastBlock1Peer(t *testing.T) { testBroadcastBlock(t, 1, 1) } +func TestBroadcastBlock2Peers(t *testing.T) { testBroadcastBlock(t, 2, 1) } +func TestBroadcastBlock3Peers(t *testing.T) { testBroadcastBlock(t, 3, 1) } +func TestBroadcastBlock4Peers(t *testing.T) { testBroadcastBlock(t, 4, 2) } +func TestBroadcastBlock5Peers(t *testing.T) { testBroadcastBlock(t, 5, 2) } +func TestBroadcastBlock8Peers(t *testing.T) { testBroadcastBlock(t, 9, 3) } +func TestBroadcastBlock12Peers(t *testing.T) { testBroadcastBlock(t, 12, 3) } +func TestBroadcastBlock16Peers(t *testing.T) { testBroadcastBlock(t, 16, 4) } +func TestBroadcastBloc26Peers(t *testing.T) { testBroadcastBlock(t, 26, 5) } +func TestBroadcastBlock100Peers(t *testing.T) { testBroadcastBlock(t, 100, 10) } + +func testBroadcastBlock(t *testing.T, peers, bcasts int) { + t.Parallel() + + // Create a source handler to broadcast blocks from and a number of sinks + // to receive them. + source := newTestHandlerWithBlocks(1) + defer source.close() + + sinks := make([]*testEthHandler, peers) + for i := 0; i < len(sinks); i++ { + sinks[i] = new(testEthHandler) + } + // Interconnect all the sink handlers with the source handler + var ( + genesis = source.chain.Genesis() + td = source.chain.GetTd(genesis.Hash(), genesis.NumberU64()) + ) + for i, sink := range sinks { + sink := sink // Closure for gorotuine below + + sourcePipe, sinkPipe := p2p.MsgPipe() + defer sourcePipe.Close() + defer sinkPipe.Close() + + sourcePeer := eth.NewPeer(eth.ETH66, p2p.NewPeerPipe(enode.ID{byte(i)}, "", nil, sourcePipe), sourcePipe, nil) + sinkPeer := eth.NewPeer(eth.ETH66, p2p.NewPeerPipe(enode.ID{0}, "", nil, sinkPipe), sinkPipe, nil) + defer sourcePeer.Close() + defer sinkPeer.Close() + + go source.handler.runEthPeer(sourcePeer, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(source.handler), peer) + }) + if err := sinkPeer.Handshake(1, td, genesis.Hash(), genesis.Hash(), forkid.NewIDWithChain(source.chain), forkid.NewFilter(source.chain)); err != nil { + t.Fatalf("failed to run protocol handshake") + } + go eth.Handle(sink, sinkPeer) + } + // Subscribe to all the transaction pools + blockChs := make([]chan *types.Block, len(sinks)) + for i := 0; i < len(sinks); i++ { + blockChs[i] = make(chan *types.Block, 1) + defer close(blockChs[i]) + + sub := sinks[i].blockBroadcasts.Subscribe(blockChs[i]) + defer sub.Unsubscribe() + } + // Initiate a block propagation across the peers + time.Sleep(100 * time.Millisecond) + source.handler.BroadcastBlock(source.chain.CurrentBlock(), true) + + // Iterate through all the sinks and ensure the correct number got the block + done := make(chan struct{}, peers) + for _, ch := range blockChs { + ch := ch + go func() { + <-ch + done <- struct{}{} + }() + } + var received int + for { + select { + case <-done: + received++ + + case <-time.After(100 * time.Millisecond): + if received != bcasts { + t.Errorf("broadcast count mismatch: have %d, want %d", received, bcasts) + } + return + } + } +} + +// Tests that a propagated malformed block (uncles or transactions don't match +// with the hashes in the header) gets discarded and not broadcast forward. +func TestBroadcastMalformedBlock66(t *testing.T) { testBroadcastMalformedBlock(t, eth.ETH66) } + +func testBroadcastMalformedBlock(t *testing.T, protocol uint) { + t.Parallel() + + // Create a source handler to broadcast blocks from and a number of sinks + // to receive them. + source := newTestHandlerWithBlocks(1) + defer source.close() + + // Create a source handler to send messages through and a sink peer to receive them + p2pSrc, p2pSink := p2p.MsgPipe() + defer p2pSrc.Close() + defer p2pSink.Close() + + src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, source.txpool) + sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, source.txpool) + defer src.Close() + defer sink.Close() + + go source.handler.runEthPeer(src, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(source.handler), peer) + }) + // Run the handshake locally to avoid spinning up a sink handler + var ( + genesis = source.chain.Genesis() + td = source.chain.GetTd(genesis.Hash(), genesis.NumberU64()) + ) + if err := sink.Handshake(1, td, genesis.Hash(), genesis.Hash(), forkid.NewIDWithChain(source.chain), forkid.NewFilter(source.chain)); err != nil { + t.Fatalf("failed to run protocol handshake") + } + // After the handshake completes, the source handler should stream the sink + // the blocks, subscribe to inbound network events + backend := new(testEthHandler) + + blocks := make(chan *types.Block, 1) + sub := backend.blockBroadcasts.Subscribe(blocks) + defer sub.Unsubscribe() + + go eth.Handle(backend, sink) + + // Create various combinations of malformed blocks + head := source.chain.CurrentBlock() + + malformedUncles := head.Header() + malformedUncles.UncleHash[0]++ + malformedTransactions := head.Header() + malformedTransactions.TxHash[0]++ + malformedEverything := head.Header() + malformedEverything.UncleHash[0]++ + malformedEverything.TxHash[0]++ + + // Try to broadcast all malformations and ensure they all get discarded + for _, header := range []*types.Header{malformedUncles, malformedTransactions, malformedEverything} { + block := types.NewBlockWithHeader(header).WithBody(head.Transactions(), head.Uncles()) + if err := src.SendNewBlock(block, big.NewInt(131136)); err != nil { + t.Fatalf("failed to broadcast block: %v", err) + } + select { + case <-blocks: + t.Fatalf("malformed block forwarded") + case <-time.After(100 * time.Millisecond): + } + } +} diff --git a/eth/handler_snap.go b/eth/handler_snap.go new file mode 100644 index 00000000..767416ff --- /dev/null +++ b/eth/handler_snap.go @@ -0,0 +1,50 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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/eth/protocols/snap" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// snapHandler implements the snap.Backend interface to handle the various network +// packets that are sent as replies or broadcasts. +type snapHandler handler + +func (h *snapHandler) Chain() *core.BlockChain { return h.chain } + +// RunPeer is invoked when a peer joins on the `snap` protocol. +func (h *snapHandler) RunPeer(peer *snap.Peer, hand snap.Handler) error { + return (*handler)(h).runSnapExtension(peer, hand) +} + +// PeerInfo retrieves all known `snap` information about a peer. +func (h *snapHandler) PeerInfo(id enode.ID) interface{} { + if p := h.peers.peer(id.String()); p != nil { + if p.snapExt != nil { + return p.snapExt.info() + } + } + return nil +} + +// Handle is invoked from a peer's message handler when it receives a new remote +// message that the handler couldn't consume and serve itself. +func (h *snapHandler) Handle(peer *snap.Peer, packet snap.Packet) error { + return h.downloader.DeliverSnapPacket(peer, packet) +} diff --git a/eth/handler_test.go b/eth/handler_test.go index 0101485c..044130f4 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -17,618 +17,157 @@ package eth import ( - "fmt" - "math" "math/big" - "math/rand" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/params" + "sort" + "sync" + + "github.com/ethereum/go-ethereum/common" + "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/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/params" ) -// 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) } +var ( + // testKey is a private key to use for funding a tester account. + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") -func testGetBlockHeaders(t *testing.T, protocol int) { - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, downloader.MaxHashFetch+15, nil, nil) - peer, _ := newTestPeer("peer", protocol, pm, true) - defer peer.close() + // testAddr is the Ethereum address of the tester account. + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) +) - // Create a "random" unknown hash for testing - var unknown common.Hash - for i := range unknown { - unknown[i] = byte(i) - } - // Create a batch of tests for various scenarios - limit := uint64(downloader.MaxHeaderFetch) - tests := []struct { - query *getBlockHeadersData // The query to execute for header retrieval - expect []common.Hash // The hashes of the block whose headers are expected - }{ - // A single random block should be retrievable by hash and number too - { - &getBlockHeadersData{Origin: hashOrNumber{Hash: pm.blockchain.GetBlockByNumber(limit / 2).Hash()}, Amount: 1}, - []common.Hash{pm.blockchain.GetBlockByNumber(limit / 2).Hash()}, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 1}, - []common.Hash{pm.blockchain.GetBlockByNumber(limit / 2).Hash()}, - }, - // Multiple headers should be retrievable in both directions - { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(limit / 2).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 + 1).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 + 2).Hash(), - }, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3, Reverse: true}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(limit / 2).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 - 1).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 - 2).Hash(), - }, - }, - // Multiple headers with skip lists should be retrievable - { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(limit / 2).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 + 4).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 + 8).Hash(), - }, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3, Reverse: true}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(limit / 2).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 - 4).Hash(), - pm.blockchain.GetBlockByNumber(limit/2 - 8).Hash(), - }, - }, - // The chain endpoints should be retrievable - { - &getBlockHeadersData{Origin: hashOrNumber{Number: 0}, Amount: 1}, - []common.Hash{pm.blockchain.GetBlockByNumber(0).Hash()}, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: pm.blockchain.CurrentBlock().NumberU64()}, Amount: 1}, - []common.Hash{pm.blockchain.CurrentBlock().Hash()}, - }, - // Ensure protocol limits are honored - { - &getBlockHeadersData{Origin: hashOrNumber{Number: pm.blockchain.CurrentBlock().NumberU64() - 1}, Amount: limit + 10, Reverse: true}, - pm.blockchain.GetBlockHashesFromHash(pm.blockchain.CurrentBlock().Hash(), limit), - }, - // Check that requesting more than available is handled gracefully - { - &getBlockHeadersData{Origin: hashOrNumber{Number: pm.blockchain.CurrentBlock().NumberU64() - 4}, Skip: 3, Amount: 3}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(pm.blockchain.CurrentBlock().NumberU64() - 4).Hash(), - pm.blockchain.GetBlockByNumber(pm.blockchain.CurrentBlock().NumberU64()).Hash(), - }, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 3, Amount: 3, Reverse: true}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(4).Hash(), - pm.blockchain.GetBlockByNumber(0).Hash(), - }, - }, - // Check that requesting more than available is handled gracefully, even if mid skip - { - &getBlockHeadersData{Origin: hashOrNumber{Number: pm.blockchain.CurrentBlock().NumberU64() - 4}, Skip: 2, Amount: 3}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(pm.blockchain.CurrentBlock().NumberU64() - 4).Hash(), - pm.blockchain.GetBlockByNumber(pm.blockchain.CurrentBlock().NumberU64() - 1).Hash(), - }, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 2, Amount: 3, Reverse: true}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(4).Hash(), - pm.blockchain.GetBlockByNumber(1).Hash(), - }, - }, - // Check a corner case where requesting more can iterate past the endpoints - { - &getBlockHeadersData{Origin: hashOrNumber{Number: 2}, Amount: 5, Reverse: true}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(2).Hash(), - pm.blockchain.GetBlockByNumber(1).Hash(), - pm.blockchain.GetBlockByNumber(0).Hash(), - }, - }, - // Check a corner case where skipping overflow loops back into the chain start - { - &getBlockHeadersData{Origin: hashOrNumber{Hash: pm.blockchain.GetBlockByNumber(3).Hash()}, Amount: 2, Reverse: false, Skip: math.MaxUint64 - 1}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(3).Hash(), - }, - }, - // Check a corner case where skipping overflow loops back to the same header - { - &getBlockHeadersData{Origin: hashOrNumber{Hash: pm.blockchain.GetBlockByNumber(1).Hash()}, Amount: 2, Reverse: false, Skip: math.MaxUint64}, - []common.Hash{ - pm.blockchain.GetBlockByNumber(1).Hash(), - }, - }, - // Check that non existing headers aren't returned - { - &getBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1}, - []common.Hash{}, - }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: pm.blockchain.CurrentBlock().NumberU64() + 1}, Amount: 1}, - []common.Hash{}, - }, - } - // Run each of the tests and verify the results against the chain - for i, tt := range tests { - // Collect the headers to expect in the response - headers := []*types.Header{} - for _, hash := range tt.expect { - headers = append(headers, pm.blockchain.GetBlockByHash(hash).Header()) - } - // Send the hash request and verify the response - p2p.Send(peer.app, 0x03, tt.query) - if err := p2p.ExpectMsg(peer.app, 0x04, headers); err != nil { - t.Errorf("test %d: headers mismatch: %v", i, err) - } - // If the test used number origins, repeat with hashes as the too - if tt.query.Origin.Hash == (common.Hash{}) { - if origin := pm.blockchain.GetBlockByNumber(tt.query.Origin.Number); origin != nil { - tt.query.Origin.Hash, tt.query.Origin.Number = origin.Hash(), 0 +// testTxPool is a mock transaction pool that blindly accepts all transactions. +// Its goal is to get around setting up a valid statedb for the balance and nonce +// checks. +type testTxPool struct { + pool map[common.Hash]*types.Transaction // Hash map of collected transactions - p2p.Send(peer.app, 0x03, tt.query) - if err := p2p.ExpectMsg(peer.app, 0x04, headers); err != nil { - t.Errorf("test %d: headers mismatch: %v", i, err) - } - } - } - } + txFeed event.Feed // Notification feed to allow waiting for inclusion + lock sync.RWMutex // Protects the transaction pool } -// Tests that block contents can be retrieved from a remote chain based on their hashes. -func TestGetBlockBodies62(t *testing.T) { testGetBlockBodies(t, 62) } -func TestGetBlockBodies63(t *testing.T) { testGetBlockBodies(t, 63) } - -func testGetBlockBodies(t *testing.T, protocol int) { - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, downloader.MaxBlockFetch+15, nil, nil) - peer, _ := newTestPeer("peer", protocol, pm, true) - defer peer.close() - - // Create a batch of tests for various scenarios - limit := downloader.MaxBlockFetch - tests := []struct { - random int // Number of blocks to fetch randomly from the chain - explicit []common.Hash // Explicitly requested blocks - available []bool // Availability of explicitly requested blocks - expected int // Total number of existing blocks to expect - }{ - {1, nil, nil, 1}, // A single random block should be retrievable - {10, nil, nil, 10}, // Multiple random blocks should be retrievable - {limit, nil, nil, limit}, // The maximum possible blocks should be retrievable - {limit + 1, nil, nil, limit}, // No more than the possible block count should be returned - {0, []common.Hash{pm.blockchain.Genesis().Hash()}, []bool{true}, 1}, // The genesis block should be retrievable - {0, []common.Hash{pm.blockchain.CurrentBlock().Hash()}, []bool{true}, 1}, // The chains head block should be retrievable - {0, []common.Hash{{}}, []bool{false}, 0}, // A non existent block should not be returned - - // Existing and non-existing blocks interleaved should not cause problems - {0, []common.Hash{ - {}, - pm.blockchain.GetBlockByNumber(1).Hash(), - {}, - pm.blockchain.GetBlockByNumber(10).Hash(), - {}, - pm.blockchain.GetBlockByNumber(100).Hash(), - {}, - }, []bool{false, true, false, true, false, true, false}, 3}, - } - // Run each of the tests and verify the results against the chain - for i, tt := range tests { - // Collect the hashes to request, and the response to expect - hashes, seen := []common.Hash{}, make(map[int64]bool) - bodies := []*blockBody{} - - for j := 0; j < tt.random; j++ { - for { - num := rand.Int63n(int64(pm.blockchain.CurrentBlock().NumberU64())) - if !seen[num] { - seen[num] = true - - block := pm.blockchain.GetBlockByNumber(uint64(num)) - hashes = append(hashes, block.Hash()) - if len(bodies) < tt.expected { - bodies = append(bodies, &blockBody{Transactions: block.Transactions(), Uncles: block.Uncles()}) - } - break - } - } - } - for j, hash := range tt.explicit { - hashes = append(hashes, hash) - if tt.available[j] && len(bodies) < tt.expected { - block := pm.blockchain.GetBlockByHash(hash) - bodies = append(bodies, &blockBody{Transactions: block.Transactions(), Uncles: block.Uncles()}) - } - } - // Send the hash request and verify the response - p2p.Send(peer.app, 0x05, hashes) - if err := p2p.ExpectMsg(peer.app, 0x06, bodies); err != nil { - t.Errorf("test %d: bodies mismatch: %v", i, err) - } +// newTestTxPool creates a mock transaction pool. +func newTestTxPool() *testTxPool { + return &testTxPool{ + pool: make(map[common.Hash]*types.Transaction), } } -// Tests that the node state database can be retrieved based on hashes. -func TestGetNodeData63(t *testing.T) { testGetNodeData(t, 63) } - -func testGetNodeData(t *testing.T, protocol int) { - // Define three accounts to simulate transactions with - acc1Key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") - acc2Key, _ := crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - acc1Addr := crypto.PubkeyToAddress(acc1Key.PublicKey) - acc2Addr := crypto.PubkeyToAddress(acc2Key.PublicKey) - - signer := types.HomesteadSigner{} - // Create a chain generator with some simple transactions (blatantly stolen from @fjl/chain_markets_test) - generator := func(i int, block *core.BlockGen) { - switch i { - case 0: - // In block 1, the test bank sends account #1 some ether. - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBank), 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. - tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBank), acc1Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, testBankKey) - tx2, _ := types.SignTx(types.NewTransaction(block.TxNonce(acc1Addr), acc2Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, acc1Key) - block.AddTx(tx1) - block.AddTx(tx2) - case 2: - // Block 3 is empty but was mined by account #2. - block.SetCoinbase(acc2Addr) - block.SetExtra([]byte("yeehaw")) - 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) - } - } - // Assemble the test environment - pm, db := newTestProtocolManagerMust(t, downloader.FullSync, 4, generator, nil) - peer, _ := newTestPeer("peer", protocol, pm, true) - defer peer.close() - - // Fetch for now the entire chain db - hashes := []common.Hash{} - - it := db.NewIterator() - for it.Next() { - if key := it.Key(); len(key) == common.HashLength { - hashes = append(hashes, common.BytesToHash(key)) - } - } - it.Release() +// Has returns an indicator whether txpool has a transaction +// cached with the given hash. +func (p *testTxPool) Has(hash common.Hash) bool { + p.lock.Lock() + defer p.lock.Unlock() - p2p.Send(peer.app, 0x0d, hashes) - msg, err := peer.app.ReadMsg() - if err != nil { - t.Fatalf("failed to read node data response: %v", err) - } - if msg.Code != 0x0e { - t.Fatalf("response packet code mismatch: have %x, want %x", msg.Code, 0x0c) - } - var data [][]byte - if err := msg.Decode(&data); err != nil { - t.Fatalf("failed to decode response node data: %v", err) - } - // Verify that all hashes correspond to the requested data, and reconstruct a state tree - for i, want := range hashes { - if hash := crypto.Keccak256Hash(data[i]); hash != want { - t.Errorf("data hash mismatch: have %x, want %x", hash, want) - } - } - statedb := rawdb.NewMemoryDatabase() - for i := 0; i < len(data); i++ { - statedb.Put(hashes[i].Bytes(), data[i]) - } - accounts := []common.Address{testBank, acc1Addr, acc2Addr} - for i := uint64(0); i <= pm.blockchain.CurrentBlock().NumberU64(); i++ { - trie, _ := state.New(pm.blockchain.GetBlockByNumber(i).Root(), state.NewDatabase(statedb)) - - for j, acc := range accounts { - state, _ := pm.blockchain.State() - bw := state.GetBalance(acc) - bh := trie.GetBalance(acc) - - if (bw != nil && bh == nil) || (bw == nil && bh != nil) { - t.Errorf("test %d, account %d: balance mismatch: have %v, want %v", i, j, bh, bw) - } - if bw != nil && bh != nil && bw.Cmp(bw) != 0 { - t.Errorf("test %d, account %d: balance mismatch: have %v, want %v", i, j, bh, bw) - } - } - } + return p.pool[hash] != nil } -// Tests that the transaction receipts can be retrieved based on hashes. -func TestGetReceipt63(t *testing.T) { testGetReceipt(t, 63) } - -func testGetReceipt(t *testing.T, protocol int) { - // Define three accounts to simulate transactions with - acc1Key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") - acc2Key, _ := crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - acc1Addr := crypto.PubkeyToAddress(acc1Key.PublicKey) - acc2Addr := crypto.PubkeyToAddress(acc2Key.PublicKey) +// Get retrieves the transaction from local txpool with given +// tx hash. +func (p *testTxPool) Get(hash common.Hash) *types.Transaction { + p.lock.Lock() + defer p.lock.Unlock() - signer := types.HomesteadSigner{} - // Create a chain generator with some simple transactions (blatantly stolen from @fjl/chain_markets_test) - generator := func(i int, block *core.BlockGen) { - switch i { - case 0: - // In block 1, the test bank sends account #1 some ether. - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBank), 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. - tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBank), acc1Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, testBankKey) - tx2, _ := types.SignTx(types.NewTransaction(block.TxNonce(acc1Addr), acc2Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, acc1Key) - block.AddTx(tx1) - block.AddTx(tx2) - case 2: - // Block 3 is empty but was mined by account #2. - block.SetCoinbase(acc2Addr) - block.SetExtra([]byte("yeehaw")) - 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) - } - } - // Assemble the test environment - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, 4, generator, nil) - peer, _ := newTestPeer("peer", protocol, pm, true) - defer peer.close() - - // Collect the hashes to request, and the response to expect - hashes, receipts := []common.Hash{}, []types.Receipts{} - for i := uint64(0); i <= pm.blockchain.CurrentBlock().NumberU64(); i++ { - block := pm.blockchain.GetBlockByNumber(i) - - hashes = append(hashes, block.Hash()) - receipts = append(receipts, pm.blockchain.GetReceiptsByHash(block.Hash())) - } - // Send the hash request and verify the response - p2p.Send(peer.app, 0x0f, hashes) - if err := p2p.ExpectMsg(peer.app, 0x10, receipts); err != nil { - t.Errorf("receipts mismatch: %v", err) - } + return p.pool[hash] } -// 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}, +// AddRemotes appends a batch of transactions to the pool, and notifies any +// listeners if the addition channel is non nil +func (p *testTxPool) AddRemotes(txs []*types.Transaction) []error { + p.lock.Lock() + defer p.lock.Unlock() - // 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) - }) + for _, tx := range txs { + p.pool[tx.Hash()] = tx } + p.txFeed.Send(core.NewTxsEvent{Txs: txs}) + return make([]error, len(txs)) } -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 ( - db = rawdb.NewMemoryDatabase() - config = new(params.ChainConfig) - ) - (&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")} +// Pending returns all the transactions known to the pool +func (p *testTxPool) Pending(enforceTips bool) map[common.Address]types.Transactions { + p.lock.RLock() + defer p.lock.RUnlock() - cht = ¶ms.TrustedCheckpoint{ - SectionIndex: index, - SectionHead: response.Hash(), - } + batches := make(map[common.Address]types.Transactions) + for _, tx := range p.pool { + from, _ := types.Sender(types.HomesteadSigner{}, tx) + batches[from] = append(batches[from], tx) } - // 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) + for _, batch := range batches { + sort.Sort(types.TxByNonce(batch)) } - 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 checkpoint challenge - peer, _ := newTestPeer("peer", eth63, pm, true) - defer peer.close() + return batches +} - 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) - } - } - } - } - // Wait until the test timeout passes to ensure proper cleanup - time.Sleep(syncChallengeTimeout + 100*time.Millisecond) +// SubscribeNewTxsEvent should return an event subscription of NewTxsEvent and +// send events to the given channel. +func (p *testTxPool) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { + return p.txFeed.Subscribe(ch) +} - // 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) - } - } +// testHandler is a live implementation of the Ethereum protocol handler, just +// preinitialized with some sane testing defaults and the transaction pool mocked +// out. +type testHandler struct { + db ethdb.Database + chain *core.BlockChain + txpool *testTxPool + handler *handler } -func TestBroadcastBlock(t *testing.T) { - var tests = []struct { - totalPeers int - broadcastExpected int - }{ - {1, 1}, - {2, 2}, - {3, 3}, - {4, 4}, - {5, 4}, - {9, 4}, - {12, 4}, - {16, 4}, - {26, 5}, - {100, 10}, - } - for _, test := range tests { - testBroadcastBlock(t, test.totalPeers, test.broadcastExpected) - } +// newTestHandler creates a new handler for testing purposes with no blocks. +func newTestHandler() *testHandler { + return newTestHandlerWithBlocks(0) } -func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) { - var ( - evmux = new(event.TypeMux) - pow = ethash.NewFaker() - db = rawdb.NewMemoryDatabase() - config = ¶ms.ChainConfig{} - gspec = &core.Genesis{Config: config} - genesis = gspec.MustCommit(db) - ) - blockchain, err := core.NewBlockChain(db, nil, config, pow, vm.Config{}, nil) - if err != nil { - t.Fatalf("failed to create new blockchain: %v", err) - } - 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) - } - pm.Start(1000) - defer pm.Stop() - var peers []*testPeer - for i := 0; i < totalPeers; i++ { - peer, _ := newTestPeer(fmt.Sprintf("peer %d", i), eth63, pm, true) - defer peer.close() - peers = append(peers, peer) +// newTestHandlerWithBlocks creates a new handler for testing purposes, with a +// given number of initial blocks. +func newTestHandlerWithBlocks(blocks int) *testHandler { + // Create a database pre-initialize with a genesis block + db := rawdb.NewMemoryDatabase() + gspec := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testAddr: {Balance: big.NewInt(1000000)}}, + } + gspec.MustCommit(db) + + chain, _ := core.NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + + bs, _ := core.GenerateChain(params.TestChainConfig, chain.Genesis(), ethash.NewFaker(), db, blocks, nil) + if _, err := chain.InsertChain(bs); err != nil { + panic(err) + } + txpool := newTestTxPool() + + handler, _ := newHandler(&handlerConfig{ + Database: db, + Chain: chain, + TxPool: txpool, + Merger: consensus.NewMerger(rawdb.NewMemoryDatabase()), + Network: 1, + Sync: downloader.SnapSync, + BloomCache: 1, + }) + handler.Start(1000) + + return &testHandler{ + db: db, + chain: chain, + txpool: txpool, + handler: handler, } - chain, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 1, func(i int, gen *core.BlockGen) {}) - pm.BroadcastBlock(chain[0], true /*propagate*/) +} - errCh := make(chan error, totalPeers) - doneCh := make(chan struct{}, totalPeers) - for _, peer := range peers { - go func(p *testPeer) { - if err := p2p.ExpectMsg(p.app, NewBlockMsg, &newBlockData{Block: chain[0], TD: big.NewInt(131136)}); err != nil { - errCh <- err - } else { - doneCh <- struct{}{} - } - }(peer) - } - timeout := time.After(300 * time.Millisecond) - var receivedCount int -outer: - for { - select { - case err = <-errCh: - break outer - case <-doneCh: - receivedCount++ - if receivedCount == totalPeers { - break outer - } - case <-timeout: - break outer - } - } - for _, peer := range peers { - peer.app.Close() - } - if err != nil { - t.Errorf("error matching block by peer: %v", err) - } - if receivedCount != broadcastExpected { - t.Errorf("block broadcast to %d peers, expected %d", receivedCount, broadcastExpected) - } +// close tears down the handler and all its internal constructs. +func (b *testHandler) close() { + b.handler.Stop() + b.chain.Stop() } diff --git a/eth/helper_test.go b/eth/helper_test.go deleted file mode 100644 index 1618a3ef..00000000 --- a/eth/helper_test.go +++ /dev/null @@ -1,201 +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 . - -// This file contains some shares testing functionality, common to multiple -// different files and modules being tested. - -package eth - -import ( - "crypto/ecdsa" - "crypto/rand" - "math/big" - "sort" - "sync" - "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" -) - -var ( - testBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - testBank = crypto.PubkeyToAddress(testBankKey.PublicKey) -) - -// 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.Database, error) { - var ( - evmux = new(event.TypeMux) - engine = ethash.NewFaker() - db = rawdb.NewMemoryDatabase() - gspec = &core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{testBank: {Balance: big.NewInt(1000000)}}, - } - genesis = gspec.MustCommit(db) - blockchain, _ = core.NewBlockChain(db, nil, gspec.Config, engine, vm.Config{}, nil) - ) - chain, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, blocks, generator) - if _, err := blockchain.InsertChain(chain); err != nil { - panic(err) - } - 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 - } - pm.Start(1000) - return pm, db, nil -} - -// newTestProtocolManagerMust creates a new protocol manager for testing purposes, -// 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.Database) { - pm, db, err := newTestProtocolManager(mode, blocks, generator, newtx) - if err != nil { - t.Fatalf("Failed to create protocol manager: %v", err) - } - return pm, db -} - -// testTxPool is a fake, helper transaction pool for testing purposes -type testTxPool struct { - txFeed event.Feed - pool []*types.Transaction // Collection of all transactions - added chan<- []*types.Transaction // Notification channel for new transactions - - lock sync.RWMutex // Protects the transaction pool -} - -// AddRemotes appends a batch of transactions to the pool, and notifies any -// listeners if the addition channel is non nil -func (p *testTxPool) AddRemotes(txs []*types.Transaction) []error { - p.lock.Lock() - defer p.lock.Unlock() - - p.pool = append(p.pool, txs...) - if p.added != nil { - p.added <- txs - } - return make([]error, len(txs)) -} - -// Pending returns all the transactions known to the pool -func (p *testTxPool) Pending() (map[common.Address]types.Transactions, error) { - p.lock.RLock() - defer p.lock.RUnlock() - - batches := make(map[common.Address]types.Transactions) - for _, tx := range p.pool { - from, _ := types.Sender(types.HomesteadSigner{}, tx) - batches[from] = append(batches[from], tx) - } - for _, batch := range batches { - sort.Sort(types.TxByNonce(batch)) - } - return batches, nil -} - -func (p *testTxPool) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { - return p.txFeed.Subscribe(ch) -} - -// newTestTransaction create a new dummy transaction. -func newTestTransaction(from *ecdsa.PrivateKey, nonce uint64, datasize int) *types.Transaction { - tx := types.NewTransaction(nonce, common.Address{}, big.NewInt(0), 100000, big.NewInt(0), make([]byte, datasize)) - tx, _ = types.SignTx(tx, types.HomesteadSigner{}, from) - return tx -} - -// 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(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, 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(nil, td, head.Hash(), genesis.Hash()) - } - return tp, errc -} - -// 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, genesis common.Hash) { - msg := &statusData{ - ProtocolVersion: uint32(p.version), - NetworkId: DefaultConfig.NetworkId, - TD: td, - CurrentBlock: head, - GenesisBlock: genesis, - } - if err := p2p.ExpectMsg(p.app, StatusMsg, msg); err != nil { - t.Fatalf("status recv: %v", err) - } - if err := p2p.Send(p.app, StatusMsg, msg); err != nil { - t.Fatalf("status send: %v", err) - } -} - -// close terminates the local side of the peer, notifying the remote protocol -// manager of termination. -func (p *testPeer) close() { - p.app.Close() -} diff --git a/eth/metrics.go b/eth/metrics.go deleted file mode 100644 index f99c22f5..00000000 --- a/eth/metrics.go +++ /dev/null @@ -1,139 +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 eth - -import ( - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/p2p" -) - -var ( - propTxnInPacketsMeter = metrics.NewRegisteredMeter("eth/prop/txns/in/packets", nil) - propTxnInTrafficMeter = metrics.NewRegisteredMeter("eth/prop/txns/in/traffic", nil) - propTxnOutPacketsMeter = metrics.NewRegisteredMeter("eth/prop/txns/out/packets", nil) - propTxnOutTrafficMeter = metrics.NewRegisteredMeter("eth/prop/txns/out/traffic", nil) - propHashInPacketsMeter = metrics.NewRegisteredMeter("eth/prop/hashes/in/packets", nil) - propHashInTrafficMeter = metrics.NewRegisteredMeter("eth/prop/hashes/in/traffic", nil) - propHashOutPacketsMeter = metrics.NewRegisteredMeter("eth/prop/hashes/out/packets", nil) - propHashOutTrafficMeter = metrics.NewRegisteredMeter("eth/prop/hashes/out/traffic", nil) - propBlockInPacketsMeter = metrics.NewRegisteredMeter("eth/prop/blocks/in/packets", nil) - propBlockInTrafficMeter = metrics.NewRegisteredMeter("eth/prop/blocks/in/traffic", nil) - propBlockOutPacketsMeter = metrics.NewRegisteredMeter("eth/prop/blocks/out/packets", nil) - propBlockOutTrafficMeter = metrics.NewRegisteredMeter("eth/prop/blocks/out/traffic", nil) - reqHeaderInPacketsMeter = metrics.NewRegisteredMeter("eth/req/headers/in/packets", nil) - reqHeaderInTrafficMeter = metrics.NewRegisteredMeter("eth/req/headers/in/traffic", nil) - reqHeaderOutPacketsMeter = metrics.NewRegisteredMeter("eth/req/headers/out/packets", nil) - reqHeaderOutTrafficMeter = metrics.NewRegisteredMeter("eth/req/headers/out/traffic", nil) - reqBodyInPacketsMeter = metrics.NewRegisteredMeter("eth/req/bodies/in/packets", nil) - reqBodyInTrafficMeter = metrics.NewRegisteredMeter("eth/req/bodies/in/traffic", nil) - reqBodyOutPacketsMeter = metrics.NewRegisteredMeter("eth/req/bodies/out/packets", nil) - reqBodyOutTrafficMeter = metrics.NewRegisteredMeter("eth/req/bodies/out/traffic", nil) - reqStateInPacketsMeter = metrics.NewRegisteredMeter("eth/req/states/in/packets", nil) - reqStateInTrafficMeter = metrics.NewRegisteredMeter("eth/req/states/in/traffic", nil) - reqStateOutPacketsMeter = metrics.NewRegisteredMeter("eth/req/states/out/packets", nil) - reqStateOutTrafficMeter = metrics.NewRegisteredMeter("eth/req/states/out/traffic", nil) - reqReceiptInPacketsMeter = metrics.NewRegisteredMeter("eth/req/receipts/in/packets", nil) - reqReceiptInTrafficMeter = metrics.NewRegisteredMeter("eth/req/receipts/in/traffic", nil) - reqReceiptOutPacketsMeter = metrics.NewRegisteredMeter("eth/req/receipts/out/packets", nil) - reqReceiptOutTrafficMeter = metrics.NewRegisteredMeter("eth/req/receipts/out/traffic", nil) - miscInPacketsMeter = metrics.NewRegisteredMeter("eth/misc/in/packets", nil) - miscInTrafficMeter = metrics.NewRegisteredMeter("eth/misc/in/traffic", nil) - miscOutPacketsMeter = metrics.NewRegisteredMeter("eth/misc/out/packets", nil) - miscOutTrafficMeter = metrics.NewRegisteredMeter("eth/misc/out/traffic", nil) -) - -// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of -// accumulating the above defined metrics based on the data stream contents. -type meteredMsgReadWriter struct { - p2p.MsgReadWriter // Wrapped message stream to meter - version int // Protocol version to select correct meters -} - -// 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 { - 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 -} - -func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { - // Read the message and short circuit in case of an error - msg, err := rw.MsgReadWriter.ReadMsg() - if err != nil { - return msg, err - } - // Account for the data traffic - packets, traffic := miscInPacketsMeter, miscInTrafficMeter - switch { - case msg.Code == BlockHeadersMsg: - packets, traffic = reqHeaderInPacketsMeter, reqHeaderInTrafficMeter - case msg.Code == BlockBodiesMsg: - packets, traffic = reqBodyInPacketsMeter, reqBodyInTrafficMeter - - case rw.version >= eth63 && msg.Code == NodeDataMsg: - packets, traffic = reqStateInPacketsMeter, reqStateInTrafficMeter - case rw.version >= eth63 && msg.Code == ReceiptsMsg: - packets, traffic = reqReceiptInPacketsMeter, reqReceiptInTrafficMeter - - case msg.Code == NewBlockHashesMsg: - packets, traffic = propHashInPacketsMeter, propHashInTrafficMeter - case msg.Code == NewBlockMsg: - packets, traffic = propBlockInPacketsMeter, propBlockInTrafficMeter - case msg.Code == TxMsg: - packets, traffic = propTxnInPacketsMeter, propTxnInTrafficMeter - } - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - return msg, err -} - -func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error { - // Account for the data traffic - packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter - switch { - case msg.Code == BlockHeadersMsg: - packets, traffic = reqHeaderOutPacketsMeter, reqHeaderOutTrafficMeter - case msg.Code == BlockBodiesMsg: - packets, traffic = reqBodyOutPacketsMeter, reqBodyOutTrafficMeter - - case rw.version >= eth63 && msg.Code == NodeDataMsg: - packets, traffic = reqStateOutPacketsMeter, reqStateOutTrafficMeter - case rw.version >= eth63 && msg.Code == ReceiptsMsg: - packets, traffic = reqReceiptOutPacketsMeter, reqReceiptOutTrafficMeter - - case msg.Code == NewBlockHashesMsg: - packets, traffic = propHashOutPacketsMeter, propHashOutTrafficMeter - case msg.Code == NewBlockMsg: - packets, traffic = propBlockOutPacketsMeter, propBlockOutTrafficMeter - case msg.Code == TxMsg: - packets, traffic = propTxnOutPacketsMeter, propTxnOutTrafficMeter - } - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - // Send the packet to the p2p layer - return rw.MsgReadWriter.WriteMsg(msg) -} diff --git a/eth/peer.go b/eth/peer.go index 7132f75a..55e5f004 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -17,530 +17,51 @@ package eth import ( - "errors" - "fmt" "math/big" - "sync" - "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rlp" - mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" ) -var ( - errClosed = errors.New("peer set is closed") - errAlreadyRegistered = errors.New("peer is already registered") - errNotRegistered = errors.New("peer is not registered") -) - -const ( - maxKnownTxs = 32768 // Maximum transactions hashes to keep in the known list (prevent DOS) - maxKnownBlocks = 1024 // Maximum block hashes to keep in the known list (prevent DOS) - - // maxQueuedTxs is the maximum number of transaction lists to queue up before - // dropping broadcasts. This is a sensitive number as a transaction list might - // contain a single transaction, or thousands. - maxQueuedTxs = 128 - - // maxQueuedProps is the maximum number of block propagations to queue up before - // dropping broadcasts. There's not much point in queueing stale blocks, so a few - // that might cover uncles should be enough. - maxQueuedProps = 4 - - // maxQueuedAnns is the maximum number of block announcements to queue up before - // dropping broadcasts. Similarly to block propagations, there's no point to queue - // above some healthy uncle limit, so use that. - maxQueuedAnns = 4 - - handshakeTimeout = 5 * time.Second -) - -// PeerInfo represents a short summary of the Ethereum sub-protocol metadata known +// ethPeerInfo represents a short summary of the `eth` sub-protocol metadata known // about a connected peer. -type PeerInfo struct { - Version int `json:"version"` // Ethereum protocol version negotiated +type ethPeerInfo struct { + Version uint `json:"version"` // Ethereum protocol version negotiated Difficulty *big.Int `json:"difficulty"` // Total difficulty of the peer's blockchain - Head string `json:"head"` // SHA3 hash of the peer's best owned block -} - -// propEvent is a block propagation, waiting for its turn in the broadcast queue. -type propEvent struct { - block *types.Block - td *big.Int -} - -type peer struct { - id string - - *p2p.Peer - rw p2p.MsgReadWriter - - version int // Protocol version negotiated - syncDrop *time.Timer // Timed connection dropper if sync progress isn't validated in time - - head common.Hash - td *big.Int - lock sync.RWMutex - - knownTxs mapset.Set // Set of transaction hashes known to be known by this peer - knownBlocks mapset.Set // Set of block hashes known to be known by this peer - queuedTxs chan []*types.Transaction // Queue of transactions to broadcast to the peer - queuedProps chan *propEvent // Queue of blocks to broadcast to the peer - queuedAnns chan *types.Block // Queue of blocks to announce to the peer - term chan struct{} // Termination channel to stop the broadcaster + Head string `json:"head"` // Hex hash of the peer's best owned block } -func newPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - return &peer{ - Peer: p, - rw: rw, - version: version, - id: fmt.Sprintf("%x", p.ID().Bytes()[:8]), - knownTxs: mapset.NewSet(), - knownBlocks: mapset.NewSet(), - queuedTxs: make(chan []*types.Transaction, maxQueuedTxs), - queuedProps: make(chan *propEvent, maxQueuedProps), - queuedAnns: make(chan *types.Block, maxQueuedAnns), - term: make(chan struct{}), - } -} - -// broadcast is a write loop that multiplexes block propagations, announcements -// and transaction broadcasts into the remote peer. The goal is to have an async -// writer that does not lock up node internals. -func (p *peer) broadcast() { - for { - select { - case txs := <-p.queuedTxs: - if err := p.SendTransactions(txs); err != nil { - return - } - p.Log().Trace("Broadcast transactions", "count", len(txs)) - - case prop := <-p.queuedProps: - if err := p.SendNewBlock(prop.block, prop.td); err != nil { - return - } - p.Log().Trace("Propagated block", "number", prop.block.Number(), "hash", prop.block.Hash(), "td", prop.td) - - case block := <-p.queuedAnns: - if err := p.SendNewBlockHashes([]common.Hash{block.Hash()}, []uint64{block.NumberU64()}); err != nil { - return - } - p.Log().Trace("Announced block", "number", block.Number(), "hash", block.Hash()) - - case <-p.term: - return - } - } -} - -// close signals the broadcast goroutine to terminate. -func (p *peer) close() { - close(p.term) +// ethPeer is a wrapper around eth.Peer to maintain a few extra metadata. +type ethPeer struct { + *eth.Peer + snapExt *snapPeer // Satellite `snap` connection } -// Info gathers and returns a collection of metadata known about a peer. -func (p *peer) Info() *PeerInfo { +// info gathers and returns some `eth` protocol metadata known about a peer. +func (p *ethPeer) info() *ethPeerInfo { hash, td := p.Head() - return &PeerInfo{ - Version: p.version, + return ðPeerInfo{ + Version: p.Version(), Difficulty: td, Head: hash.Hex(), } } -// Head retrieves a copy of the current head hash and total difficulty of the -// peer. -func (p *peer) Head() (hash common.Hash, td *big.Int) { - p.lock.RLock() - defer p.lock.RUnlock() - - copy(hash[:], p.head[:]) - return hash, new(big.Int).Set(p.td) -} - -// SetHead updates the head hash and total difficulty of the peer. -func (p *peer) SetHead(hash common.Hash, td *big.Int) { - p.lock.Lock() - defer p.lock.Unlock() - - copy(p.head[:], hash[:]) - p.td.Set(td) -} - -// MarkBlock marks a block as known for the peer, ensuring that the block will -// never be propagated to this particular peer. -func (p *peer) MarkBlock(hash common.Hash) { - // If we reached the memory allowance, drop a previously known block hash - for p.knownBlocks.Cardinality() >= maxKnownBlocks { - p.knownBlocks.Pop() - } - p.knownBlocks.Add(hash) -} - -// MarkTransaction marks a transaction as known for the peer, ensuring that it -// will never be propagated to this particular peer. -func (p *peer) MarkTransaction(hash common.Hash) { - // If we reached the memory allowance, drop a previously known transaction hash - for p.knownTxs.Cardinality() >= maxKnownTxs { - p.knownTxs.Pop() - } - p.knownTxs.Add(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.Add(tx.Hash()) - } - for p.knownTxs.Cardinality() >= maxKnownTxs { - p.knownTxs.Pop() - } - return p2p.Send(p.rw, TxMsg, txs) -} - -// AsyncSendTransactions queues list of transactions propagation to a remote -// peer. If the peer's broadcast queue is full, the event is silently dropped. -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.Add(tx.Hash()) - } - for p.knownTxs.Cardinality() >= maxKnownTxs { - p.knownTxs.Pop() - } - default: - p.Log().Debug("Dropping transaction propagation", "count", len(txs)) - } -} - -// 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.Add(hash) - } - for p.knownBlocks.Cardinality() >= maxKnownBlocks { - p.knownBlocks.Pop() - } - request := make(newBlockHashesData, len(hashes)) - for i := 0; i < len(hashes); i++ { - request[i].Hash = hashes[i] - request[i].Number = numbers[i] - } - return p2p.Send(p.rw, NewBlockHashesMsg, request) -} - -// AsyncSendNewBlockHash queues the availability of a block for propagation to a -// remote peer. If the peer's broadcast queue is full, the event is silently -// dropped. -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.Add(block.Hash()) - for p.knownBlocks.Cardinality() >= maxKnownBlocks { - p.knownBlocks.Pop() - } - default: - p.Log().Debug("Dropping block announcement", "number", block.NumberU64(), "hash", block.Hash()) - } -} - -// 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.Add(block.Hash()) - for p.knownBlocks.Cardinality() >= maxKnownBlocks { - p.knownBlocks.Pop() - } - return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, td}) -} - -// AsyncSendNewBlock queues an entire block for propagation to a remote peer. If -// the peer's broadcast queue is full, the event is silently dropped. -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.Add(block.Hash()) - for p.knownBlocks.Cardinality() >= maxKnownBlocks { - p.knownBlocks.Pop() - } - default: - p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash()) - } -} - -// SendBlockHeaders sends a batch of block headers to the remote peer. -func (p *peer) SendBlockHeaders(headers []*types.Header) error { - return p2p.Send(p.rw, BlockHeadersMsg, headers) -} - -// SendBlockBodies sends a batch of block contents to the remote peer. -func (p *peer) SendBlockBodies(bodies []*blockBody) error { - return p2p.Send(p.rw, BlockBodiesMsg, blockBodiesData(bodies)) -} - -// SendBlockBodiesRLP sends a batch of block contents to the remote peer from -// an already RLP encoded format. -func (p *peer) SendBlockBodiesRLP(bodies []rlp.RawValue) error { - return p2p.Send(p.rw, BlockBodiesMsg, bodies) -} - -// SendNodeDataRLP sends a batch of arbitrary internal data, corresponding to the -// hashes requested. -func (p *peer) SendNodeData(data [][]byte) error { - return p2p.Send(p.rw, NodeDataMsg, data) -} - -// SendReceiptsRLP sends a batch of transaction receipts, corresponding to the -// ones requested from an already RLP encoded format. -func (p *peer) SendReceiptsRLP(receipts []rlp.RawValue) error { - return p2p.Send(p.rw, ReceiptsMsg, receipts) -} - -// RequestOneHeader is a wrapper around the header query functions to fetch a -// single header. It is used solely by the fetcher. -func (p *peer) RequestOneHeader(hash common.Hash) error { - p.Log().Debug("Fetching single header", "hash", hash) - return p2p.Send(p.rw, GetBlockHeadersMsg, &getBlockHeadersData{Origin: hashOrNumber{Hash: hash}, Amount: uint64(1), Skip: uint64(0), Reverse: false}) -} - -// RequestHeadersByHash fetches a batch of blocks' headers corresponding to the -// specified header query, based on the hash of an origin block. -func (p *peer) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromhash", origin, "skip", skip, "reverse", reverse) - return p2p.Send(p.rw, GetBlockHeadersMsg, &getBlockHeadersData{Origin: hashOrNumber{Hash: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}) -} - -// RequestHeadersByNumber fetches a batch of blocks' headers corresponding to the -// specified header query, based on the number of an origin block. -func (p *peer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromnum", origin, "skip", skip, "reverse", reverse) - return p2p.Send(p.rw, GetBlockHeadersMsg, &getBlockHeadersData{Origin: hashOrNumber{Number: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}) -} - -// RequestBodies fetches a batch of blocks' bodies corresponding to the hashes -// specified. -func (p *peer) RequestBodies(hashes []common.Hash) error { - p.Log().Debug("Fetching batch of block bodies", "count", len(hashes)) - return p2p.Send(p.rw, GetBlockBodiesMsg, hashes) -} - -// RequestNodeData fetches a batch of arbitrary data from a node's known state -// data, corresponding to the specified hashes. -func (p *peer) RequestNodeData(hashes []common.Hash) error { - p.Log().Debug("Fetching batch of state data", "count", len(hashes)) - return p2p.Send(p.rw, GetNodeDataMsg, hashes) -} - -// RequestReceipts fetches a batch of transaction receipts from a remote node. -func (p *peer) RequestReceipts(hashes []common.Hash) error { - p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) - return p2p.Send(p.rw, GetReceiptsMsg, hashes) -} - -// Handshake executes the eth protocol handshake, negotiating version number, -// network IDs, difficulties, head and genesis blocks. -func (p *peer) Handshake(network uint64, td *big.Int, head common.Hash, genesis common.Hash) error { - // Send out own handshake in a new thread - errc := make(chan error, 2) - var status statusData // safe to read after two values have been received from errc - - go func() { - errc <- p2p.Send(p.rw, StatusMsg, &statusData{ - ProtocolVersion: uint32(p.version), - NetworkId: network, - TD: td, - CurrentBlock: head, - GenesisBlock: genesis, - }) - }() - go func() { - errc <- p.readStatus(network, &status, genesis) - }() - timeout := time.NewTimer(handshakeTimeout) - defer timeout.Stop() - for i := 0; i < 2; i++ { - select { - case err := <-errc: - if err != nil { - return err - } - case <-timeout.C: - return p2p.DiscReadTimeout - } - } - p.td, p.head = status.TD, status.CurrentBlock - return nil -} - -func (p *peer) readStatus(network uint64, status *statusData, genesis common.Hash) (err error) { - msg, err := p.rw.ReadMsg() - if err != nil { - return err - } - 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) - } - // Decode the handshake and make sure everything matches - if err := msg.Decode(&status); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - if status.GenesisBlock != genesis { - return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", status.GenesisBlock[:8], genesis[:8]) - } - if status.NetworkId != network { - return errResp(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, network) - } - if int(status.ProtocolVersion) != p.version { - return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, p.version) - } - return nil -} - -// String implements fmt.Stringer. -func (p *peer) String() string { - return fmt.Sprintf("Peer %s [%s]", p.id, - fmt.Sprintf("eth/%2d", p.version), - ) -} - -// peerSet represents the collection of active peers currently participating in -// the Ethereum sub-protocol. -type peerSet struct { - peers map[string]*peer - lock sync.RWMutex - closed bool -} - -// newPeerSet creates a new peer set to track the active participants. -func newPeerSet() *peerSet { - return &peerSet{ - peers: make(map[string]*peer), - } -} - -// Register injects a new peer into the working set, or returns an error if the -// peer is already known. If a new peer it registered, its broadcast loop is also -// started. -func (ps *peerSet) Register(p *peer) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - if ps.closed { - return errClosed - } - if _, ok := ps.peers[p.id]; ok { - return errAlreadyRegistered - } - ps.peers[p.id] = p - go p.broadcast() - - return nil -} - -// Unregister removes a remote peer from the active set, disabling any further -// actions to/from that particular entity. -func (ps *peerSet) Unregister(id string) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - p, ok := ps.peers[id] - if !ok { - return errNotRegistered - } - delete(ps.peers, id) - p.close() - - return nil -} - -// Peer retrieves the registered peer with the given id. -func (ps *peerSet) Peer(id string) *peer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return ps.peers[id] -} - -// Len returns if the current number of peers in the set. -func (ps *peerSet) Len() int { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return len(ps.peers) -} - -// PeersWithoutBlock retrieves a list of peers that do not have a given block in -// their set of known hashes. -func (ps *peerSet) PeersWithoutBlock(hash common.Hash) []*peer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - list := make([]*peer, 0, len(ps.peers)) - for _, p := range ps.peers { - if !p.knownBlocks.Contains(hash) { - list = append(list, p) - } - } - return list -} - -// PeersWithoutTx retrieves a list of peers that do not have a given transaction -// in their set of known hashes. -func (ps *peerSet) PeersWithoutTx(hash common.Hash) []*peer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - list := make([]*peer, 0, len(ps.peers)) - for _, p := range ps.peers { - if !p.knownTxs.Contains(hash) { - list = append(list, p) - } - } - return list +// snapPeerInfo represents a short summary of the `snap` sub-protocol metadata known +// about a connected peer. +type snapPeerInfo struct { + Version uint `json:"version"` // Snapshot protocol version negotiated } -// BestPeer retrieves the known peer with the currently highest total difficulty. -func (ps *peerSet) BestPeer() *peer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - var ( - bestPeer *peer - bestTd *big.Int - ) - for _, p := range ps.peers { - if _, td := p.Head(); bestPeer == nil || td.Cmp(bestTd) > 0 { - bestPeer, bestTd = p, td - } - } - return bestPeer +// snapPeer is a wrapper around snap.Peer to maintain a few extra metadata. +type snapPeer struct { + *snap.Peer } -// Close disconnects all peers. -// No new peers can be registered after Close has returned. -func (ps *peerSet) Close() { - ps.lock.Lock() - defer ps.lock.Unlock() - - for _, p := range ps.peers { - p.Disconnect(p2p.DiscQuitting) +// info gathers and returns some `snap` protocol metadata known about a peer. +func (p *snapPeer) info() *snapPeerInfo { + return &snapPeerInfo{ + Version: p.Version(), } - ps.closed = true } diff --git a/eth/peerset.go b/eth/peerset.go new file mode 100644 index 00000000..b9cc1e03 --- /dev/null +++ b/eth/peerset.go @@ -0,0 +1,259 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "math/big" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/p2p" +) + +var ( + // errPeerSetClosed is returned if a peer is attempted to be added or removed + // from the peer set after it has been terminated. + errPeerSetClosed = errors.New("peerset closed") + + // errPeerAlreadyRegistered is returned if a peer is attempted to be added + // to the peer set, but one with the same id already exists. + errPeerAlreadyRegistered = errors.New("peer already registered") + + // errPeerNotRegistered is returned if a peer is attempted to be removed from + // a peer set, but no peer with the given id exists. + errPeerNotRegistered = errors.New("peer not registered") + + // errSnapWithoutEth is returned if a peer attempts to connect only on the + // snap protocol without advertising the eth main protocol. + errSnapWithoutEth = errors.New("peer connected on snap without compatible eth support") +) + +// peerSet represents the collection of active peers currently participating in +// the `eth` protocol, with or without the `snap` extension. +type peerSet struct { + peers map[string]*ethPeer // Peers connected on the `eth` protocol + snapPeers int // Number of `snap` compatible peers for connection prioritization + + snapWait map[string]chan *snap.Peer // Peers connected on `eth` waiting for their snap extension + snapPend map[string]*snap.Peer // Peers connected on the `snap` protocol, but not yet on `eth` + + lock sync.RWMutex + closed bool +} + +// newPeerSet creates a new peer set to track the active participants. +func newPeerSet() *peerSet { + return &peerSet{ + peers: make(map[string]*ethPeer), + snapWait: make(map[string]chan *snap.Peer), + snapPend: make(map[string]*snap.Peer), + } +} + +// registerSnapExtension unblocks an already connected `eth` peer waiting for its +// `snap` extension, or if no such peer exists, tracks the extension for the time +// being until the `eth` main protocol starts looking for it. +func (ps *peerSet) registerSnapExtension(peer *snap.Peer) error { + // Reject the peer if it advertises `snap` without `eth` as `snap` is only a + // satellite protocol meaningful with the chain selection of `eth` + if !peer.RunningCap(eth.ProtocolName, eth.ProtocolVersions) { + return errSnapWithoutEth + } + // Ensure nobody can double connect + ps.lock.Lock() + defer ps.lock.Unlock() + + id := peer.ID() + if _, ok := ps.peers[id]; ok { + return errPeerAlreadyRegistered // avoid connections with the same id as existing ones + } + if _, ok := ps.snapPend[id]; ok { + return errPeerAlreadyRegistered // avoid connections with the same id as pending ones + } + // Inject the peer into an `eth` counterpart is available, otherwise save for later + if wait, ok := ps.snapWait[id]; ok { + delete(ps.snapWait, id) + wait <- peer + return nil + } + ps.snapPend[id] = peer + return nil +} + +// waitExtensions blocks until all satellite protocols are connected and tracked +// by the peerset. +func (ps *peerSet) waitSnapExtension(peer *eth.Peer) (*snap.Peer, error) { + // If the peer does not support a compatible `snap`, don't wait + if !peer.RunningCap(snap.ProtocolName, snap.ProtocolVersions) { + return nil, nil + } + // Ensure nobody can double connect + ps.lock.Lock() + + id := peer.ID() + if _, ok := ps.peers[id]; ok { + ps.lock.Unlock() + return nil, errPeerAlreadyRegistered // avoid connections with the same id as existing ones + } + if _, ok := ps.snapWait[id]; ok { + ps.lock.Unlock() + return nil, errPeerAlreadyRegistered // avoid connections with the same id as pending ones + } + // If `snap` already connected, retrieve the peer from the pending set + if snap, ok := ps.snapPend[id]; ok { + delete(ps.snapPend, id) + + ps.lock.Unlock() + return snap, nil + } + // Otherwise wait for `snap` to connect concurrently + wait := make(chan *snap.Peer) + ps.snapWait[id] = wait + ps.lock.Unlock() + + return <-wait, nil +} + +// registerPeer injects a new `eth` peer into the working set, or returns an error +// if the peer is already known. +func (ps *peerSet) registerPeer(peer *eth.Peer, ext *snap.Peer) error { + // Start tracking the new peer + ps.lock.Lock() + defer ps.lock.Unlock() + + if ps.closed { + return errPeerSetClosed + } + id := peer.ID() + if _, ok := ps.peers[id]; ok { + return errPeerAlreadyRegistered + } + eth := ðPeer{ + Peer: peer, + } + if ext != nil { + eth.snapExt = &snapPeer{ext} + ps.snapPeers++ + } + ps.peers[id] = eth + return nil +} + +// unregisterPeer removes a remote peer from the active set, disabling any further +// actions to/from that particular entity. +func (ps *peerSet) unregisterPeer(id string) error { + ps.lock.Lock() + defer ps.lock.Unlock() + + peer, ok := ps.peers[id] + if !ok { + return errPeerNotRegistered + } + delete(ps.peers, id) + if peer.snapExt != nil { + ps.snapPeers-- + } + return nil +} + +// peer retrieves the registered peer with the given id. +func (ps *peerSet) peer(id string) *ethPeer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return ps.peers[id] +} + +// peersWithoutBlock retrieves a list of peers that do not have a given block in +// their set of known hashes so it might be propagated to them. +func (ps *peerSet) peersWithoutBlock(hash common.Hash) []*ethPeer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + list := make([]*ethPeer, 0, len(ps.peers)) + for _, p := range ps.peers { + if !p.KnownBlock(hash) { + list = append(list, p) + } + } + return list +} + +// peersWithoutTransaction retrieves a list of peers that do not have a given +// transaction in their set of known hashes. +func (ps *peerSet) peersWithoutTransaction(hash common.Hash) []*ethPeer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + list := make([]*ethPeer, 0, len(ps.peers)) + for _, p := range ps.peers { + if !p.KnownTransaction(hash) { + list = append(list, p) + } + } + return list +} + +// len returns if the current number of `eth` peers in the set. Since the `snap` +// peers are tied to the existence of an `eth` connection, that will always be a +// subset of `eth`. +func (ps *peerSet) len() int { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return len(ps.peers) +} + +// snapLen returns if the current number of `snap` peers in the set. +func (ps *peerSet) snapLen() int { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return ps.snapPeers +} + +// peerWithHighestTD retrieves the known peer with the currently highest total +// difficulty, but below the given PoS switchover threshold. +func (ps *peerSet) peerWithHighestTD() *eth.Peer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + var ( + bestPeer *eth.Peer + bestTd *big.Int + ) + for _, p := range ps.peers { + if _, td := p.Head(); bestPeer == nil || td.Cmp(bestTd) > 0 { + bestPeer, bestTd = p.Peer, td + } + } + return bestPeer +} + +// close disconnects all peers. +func (ps *peerSet) close() { + ps.lock.Lock() + defer ps.lock.Unlock() + + for _, p := range ps.peers { + p.Disconnect(p2p.DiscQuitting) + } + ps.closed = true +} diff --git a/eth/protocol.go b/eth/protocol.go deleted file mode 100644 index 686249b3..00000000 --- a/eth/protocol.go +++ /dev/null @@ -1,196 +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 eth - -import ( - "fmt" - "io" - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/rlp" -) - -// Constants to match up protocol versions and messages -const ( - eth62 = 62 - eth63 = 63 -) - -// protocolName is the official short name of the protocol used during capability negotiation. -const protocolName = "eth" - -// ProtocolVersions are the supported versions of the eth protocol (first is primary). -var ProtocolVersions = []uint{eth63} - -// protocolLengths are the number of implemented message corresponding to different protocol versions. -var protocolLengths = map[uint]uint64{eth63: 17, eth62: 8} - -const protocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message - -// eth protocol message codes -const ( - // Protocol messages belonging to eth/62 - StatusMsg = 0x00 - NewBlockHashesMsg = 0x01 - TxMsg = 0x02 - GetBlockHeadersMsg = 0x03 - BlockHeadersMsg = 0x04 - GetBlockBodiesMsg = 0x05 - BlockBodiesMsg = 0x06 - NewBlockMsg = 0x07 - - // Protocol messages belonging to eth/63 - GetNodeDataMsg = 0x0d - NodeDataMsg = 0x0e - GetReceiptsMsg = 0x0f - ReceiptsMsg = 0x10 -) - -type errCode int - -const ( - ErrMsgTooLarge = iota - ErrDecode - ErrInvalidMsgCode - ErrProtocolVersionMismatch - ErrNetworkIdMismatch - ErrGenesisBlockMismatch - ErrNoStatusMsg - ErrExtraStatusMsg - ErrSuspendedPeer -) - -func (e errCode) String() string { - return errorToString[int(e)] -} - -// XXX change once legacy code is out -var errorToString = map[int]string{ - ErrMsgTooLarge: "Message too long", - ErrDecode: "Invalid message", - ErrInvalidMsgCode: "Invalid message code", - ErrProtocolVersionMismatch: "Protocol version mismatch", - ErrNetworkIdMismatch: "NetworkId mismatch", - ErrGenesisBlockMismatch: "Genesis block mismatch", - ErrNoStatusMsg: "No status message", - ErrExtraStatusMsg: "Extra status message", - ErrSuspendedPeer: "Suspended peer", -} - -type txPool interface { - // AddRemotes should add the given transactions to the pool. - AddRemotes([]*types.Transaction) []error - - // Pending should return pending transactions. - // The slice should be modifiable by the caller. - Pending() (map[common.Address]types.Transactions, error) - - // SubscribeNewTxsEvent should return an event subscription of - // NewTxsEvent and send events to the given channel. - SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription -} - -// statusData is the network packet for the status message. -type statusData struct { - ProtocolVersion uint32 - NetworkId uint64 - TD *big.Int - CurrentBlock common.Hash - GenesisBlock common.Hash -} - -// newBlockHashesData is the network packet for the block announcements. -type newBlockHashesData []struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced -} - -// getBlockHeadersData represents a block header query. -type getBlockHeadersData struct { - Origin hashOrNumber // Block from which to retrieve headers - Amount uint64 // Maximum number of headers to retrieve - Skip uint64 // Blocks to skip between consecutive headers - Reverse bool // Query direction (false = rising towards latest, true = falling towards genesis) -} - -// hashOrNumber is a combined field for specifying an origin block. -type hashOrNumber struct { - Hash common.Hash // Block hash from which to retrieve headers (excludes Number) - Number uint64 // Block hash from which to retrieve headers (excludes Hash) -} - -// EncodeRLP is a specialized encoder for hashOrNumber to encode only one of the -// two contained union fields. -func (hn *hashOrNumber) EncodeRLP(w io.Writer) error { - if hn.Hash == (common.Hash{}) { - return rlp.Encode(w, hn.Number) - } - if hn.Number != 0 { - return fmt.Errorf("both origin hash (%x) and number (%d) provided", hn.Hash, hn.Number) - } - return rlp.Encode(w, hn.Hash) -} - -// DecodeRLP is a specialized decoder for hashOrNumber to decode the contents -// into either a block hash or a block number. -func (hn *hashOrNumber) DecodeRLP(s *rlp.Stream) error { - _, size, _ := s.Kind() - origin, err := s.Raw() - if err == nil { - switch { - case size == 32: - err = rlp.DecodeBytes(origin, &hn.Hash) - case size <= 8: - err = rlp.DecodeBytes(origin, &hn.Number) - default: - err = fmt.Errorf("invalid input size %d for origin", size) - } - } - return err -} - -// newBlockData is the network packet for the block propagation message. -type newBlockData struct { - Block *types.Block - 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 - Uncles []*types.Header // Uncles contained within a block -} - -// blockBodiesData is the network packet for block content distribution. -type blockBodiesData []*blockBody diff --git a/eth/protocol_test.go b/eth/protocol_test.go deleted file mode 100644 index e79035ff..00000000 --- a/eth/protocol_test.go +++ /dev/null @@ -1,223 +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 eth - -import ( - "fmt" - "sync" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rlp" -) - -func init() { - // log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) -} - -var testAccount, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - -// Tests that handshake failures are detected and reported correctly. -func TestStatusMsgErrors62(t *testing.T) { testStatusMsgErrors(t, 62) } -func TestStatusMsgErrors63(t *testing.T) { testStatusMsgErrors(t, 63) } - -func testStatusMsgErrors(t *testing.T, protocol int) { - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, 0, nil, nil) - var ( - genesis = pm.blockchain.Genesis() - head = pm.blockchain.CurrentHeader() - td = pm.blockchain.GetTd(head.Hash(), head.Number.Uint64()) - ) - defer pm.Stop() - - tests := []struct { - code uint64 - data interface{} - wantError error - }{ - { - code: TxMsg, data: []interface{}{}, - wantError: errResp(ErrNoStatusMsg, "first msg has code 2 (!= 0)"), - }, - { - code: StatusMsg, data: statusData{10, DefaultConfig.NetworkId, td, head.Hash(), genesis.Hash()}, - wantError: errResp(ErrProtocolVersionMismatch, "10 (!= %d)", protocol), - }, - { - code: StatusMsg, data: statusData{uint32(protocol), 999, td, head.Hash(), genesis.Hash()}, - wantError: errResp(ErrNetworkIdMismatch, "999 (!= %d)", DefaultConfig.NetworkId), - }, - { - code: StatusMsg, data: statusData{uint32(protocol), DefaultConfig.NetworkId, td, head.Hash(), common.Hash{3}}, - wantError: errResp(ErrGenesisBlockMismatch, "0300000000000000 (!= %x)", genesis.Hash().Bytes()[:8]), - }, - } - - for i, test := range tests { - p, errc := newTestPeer("peer", protocol, pm, false) - // The send call might hang until reset because - // the protocol might not read the payload. - go p2p.Send(p.app, test.code, test.data) - - select { - case err := <-errc: - if err == nil { - t.Errorf("test %d: protocol returned nil error, want %q", i, test.wantError) - } else if err.Error() != test.wantError.Error() { - t.Errorf("test %d: wrong error: got %q, want %q", i, err, test.wantError) - } - case <-time.After(2 * time.Second): - t.Errorf("protocol did not shut down within 2 seconds") - } - p.close() - } -} - -// This test checks that received transactions are added to the local pool. -func TestRecvTransactions62(t *testing.T) { testRecvTransactions(t, 62) } -func TestRecvTransactions63(t *testing.T) { testRecvTransactions(t, 63) } - -func testRecvTransactions(t *testing.T, protocol int) { - txAdded := make(chan []*types.Transaction) - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, 0, nil, txAdded) - pm.acceptTxs = 1 // mark synced to accept transactions - p, _ := newTestPeer("peer", protocol, pm, true) - defer pm.Stop() - defer p.close() - - tx := newTestTransaction(testAccount, 0, 0) - if err := p2p.Send(p.app, TxMsg, []interface{}{tx}); err != nil { - t.Fatalf("send error: %v", err) - } - select { - case added := <-txAdded: - if len(added) != 1 { - t.Errorf("wrong number of added transactions: got %d, want 1", len(added)) - } else if added[0].Hash() != tx.Hash() { - t.Errorf("added wrong tx hash: got %v, want %v", added[0].Hash(), tx.Hash()) - } - case <-time.After(2 * time.Second): - t.Errorf("no NewTxsEvent received within 2 seconds") - } -} - -// This test checks that pending transactions are sent. -func TestSendTransactions62(t *testing.T) { testSendTransactions(t, 62) } -func TestSendTransactions63(t *testing.T) { testSendTransactions(t, 63) } - -func testSendTransactions(t *testing.T, protocol int) { - pm, _ := newTestProtocolManagerMust(t, downloader.FullSync, 0, nil, nil) - defer pm.Stop() - - // Fill the pool with big transactions. - const txsize = txsyncPackSize / 10 - alltxs := make([]*types.Transaction, 100) - for nonce := range alltxs { - alltxs[nonce] = newTestTransaction(testAccount, uint64(nonce), txsize) - } - pm.txpool.AddRemotes(alltxs) - - // Connect several peers. They should all receive the pending transactions. - var wg sync.WaitGroup - checktxs := func(p *testPeer) { - defer wg.Done() - defer p.close() - seen := make(map[common.Hash]bool) - for _, tx := range alltxs { - seen[tx.Hash()] = false - } - for n := 0; n < len(alltxs) && !t.Failed(); { - var txs []*types.Transaction - msg, err := p.app.ReadMsg() - if err != nil { - t.Errorf("%v: read error: %v", p.Peer, err) - } else if msg.Code != TxMsg { - t.Errorf("%v: got code %d, want TxMsg", p.Peer, msg.Code) - } - if err := msg.Decode(&txs); err != nil { - t.Errorf("%v: %v", p.Peer, err) - } - for _, tx := range txs { - hash := tx.Hash() - seentx, want := seen[hash] - if seentx { - t.Errorf("%v: got tx more than once: %x", p.Peer, hash) - } - if !want { - t.Errorf("%v: got unexpected tx: %x", p.Peer, hash) - } - seen[hash] = true - n++ - } - } - } - for i := 0; i < 3; i++ { - p, _ := newTestPeer(fmt.Sprintf("peer #%d", i), protocol, pm, true) - wg.Add(1) - go checktxs(p) - } - wg.Wait() -} - -// Tests that the custom union field encoder and decoder works correctly. -func TestGetBlockHeadersDataEncodeDecode(t *testing.T) { - // Create a "random" hash for testing - var hash common.Hash - for i := range hash { - hash[i] = byte(i) - } - // Assemble some table driven tests - tests := []struct { - packet *getBlockHeadersData - fail bool - }{ - // Providing the origin as either a hash or a number should both work - {fail: false, packet: &getBlockHeadersData{Origin: hashOrNumber{Number: 314}}}, - {fail: false, packet: &getBlockHeadersData{Origin: hashOrNumber{Hash: hash}}}, - - // Providing arbitrary query field should also work - {fail: false, packet: &getBlockHeadersData{Origin: hashOrNumber{Number: 314}, Amount: 314, Skip: 1, Reverse: true}}, - {fail: false, packet: &getBlockHeadersData{Origin: hashOrNumber{Hash: hash}, Amount: 314, Skip: 1, Reverse: true}}, - - // Providing both the origin hash and origin number must fail - {fail: true, packet: &getBlockHeadersData{Origin: hashOrNumber{Hash: hash, Number: 314}}}, - } - // Iterate over each of the tests and try to encode and then decode - for i, tt := range tests { - bytes, err := rlp.EncodeToBytes(tt.packet) - if err != nil && !tt.fail { - t.Fatalf("test %d: failed to encode packet: %v", i, err) - } else if err == nil && tt.fail { - t.Fatalf("test %d: encode should have failed", i) - } - if !tt.fail { - packet := new(getBlockHeadersData) - if err := rlp.DecodeBytes(bytes, packet); err != nil { - t.Fatalf("test %d: failed to decode packet: %v", i, err) - } - if packet.Origin.Hash != tt.packet.Origin.Hash || packet.Origin.Number != tt.packet.Origin.Number || packet.Amount != tt.packet.Amount || - packet.Skip != tt.packet.Skip || packet.Reverse != tt.packet.Reverse { - t.Fatalf("test %d: encode decode mismatch: have %+v, want %+v", i, packet, tt.packet) - } - } - } -} diff --git a/eth/protocols/eth/broadcast.go b/eth/protocols/eth/broadcast.go new file mode 100644 index 00000000..6fc15f13 --- /dev/null +++ b/eth/protocols/eth/broadcast.go @@ -0,0 +1,195 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +const ( + // This is the target size for the packs of transactions or announcements. A + // pack can get larger than this if a single transactions exceeds this size. + maxTxPacketSize = 100 * 1024 +) + +// blockPropagation is a block propagation event, waiting for its turn in the +// broadcast queue. +type blockPropagation struct { + block *types.Block + td *big.Int +} + +// broadcastBlocks is a write loop that multiplexes blocks and block announcements +// to the remote peer. The goal is to have an async writer that does not lock up +// node internals and at the same time rate limits queued data. +func (p *Peer) broadcastBlocks() { + for { + select { + case prop := <-p.queuedBlocks: + if err := p.SendNewBlock(prop.block, prop.td); err != nil { + return + } + p.Log().Trace("Propagated block", "number", prop.block.Number(), "hash", prop.block.Hash(), "td", prop.td) + + case block := <-p.queuedBlockAnns: + if err := p.SendNewBlockHashes([]common.Hash{block.Hash()}, []uint64{block.NumberU64()}); err != nil { + return + } + p.Log().Trace("Announced block", "number", block.Number(), "hash", block.Hash()) + + case <-p.term: + return + } + } +} + +// broadcastTransactions is a write loop that schedules transaction broadcasts +// to the remote peer. The goal is to have an async writer that does not lock up +// node internals and at the same time rate limits queued data. +func (p *Peer) broadcastTransactions() { + var ( + queue []common.Hash // Queue of hashes to broadcast as full transactions + done chan struct{} // Non-nil if background broadcaster is running + fail = make(chan error, 1) // Channel used to receive network error + failed bool // Flag whether a send failed, discard everything onward + ) + for { + // If there's no in-flight broadcast running, check if a new one is needed + if done == nil && len(queue) > 0 { + // Pile transaction until we reach our allowed network limit + var ( + hashesCount uint64 + txs []*types.Transaction + size common.StorageSize + ) + for i := 0; i < len(queue) && size < maxTxPacketSize; i++ { + if tx := p.txpool.Get(queue[i]); tx != nil { + txs = append(txs, tx) + size += tx.Size() + } + hashesCount++ + } + queue = queue[:copy(queue, queue[hashesCount:])] + + // If there's anything available to transfer, fire up an async writer + if len(txs) > 0 { + done = make(chan struct{}) + go func() { + if err := p.SendTransactions(txs); err != nil { + fail <- err + return + } + close(done) + p.Log().Trace("Sent transactions", "count", len(txs)) + }() + } + } + // Transfer goroutine may or may not have been started, listen for events + select { + case hashes := <-p.txBroadcast: + // If the connection failed, discard all transaction events + if failed { + continue + } + // New batch of transactions to be broadcast, queue them (with cap) + queue = append(queue, hashes...) + if len(queue) > maxQueuedTxs { + // Fancy copy and resize to ensure buffer doesn't grow indefinitely + queue = queue[:copy(queue, queue[len(queue)-maxQueuedTxs:])] + } + + case <-done: + done = nil + + case <-fail: + failed = true + + case <-p.term: + return + } + } +} + +// announceTransactions is a write loop that schedules transaction broadcasts +// to the remote peer. The goal is to have an async writer that does not lock up +// node internals and at the same time rate limits queued data. +func (p *Peer) announceTransactions() { + var ( + queue []common.Hash // Queue of hashes to announce as transaction stubs + done chan struct{} // Non-nil if background announcer is running + fail = make(chan error, 1) // Channel used to receive network error + failed bool // Flag whether a send failed, discard everything onward + ) + for { + // If there's no in-flight announce running, check if a new one is needed + if done == nil && len(queue) > 0 { + // Pile transaction hashes until we reach our allowed network limit + var ( + count int + pending []common.Hash + size common.StorageSize + ) + for count = 0; count < len(queue) && size < maxTxPacketSize; count++ { + if p.txpool.Get(queue[count]) != nil { + pending = append(pending, queue[count]) + size += common.HashLength + } + } + // Shift and trim queue + queue = queue[:copy(queue, queue[count:])] + + // If there's anything available to transfer, fire up an async writer + if len(pending) > 0 { + done = make(chan struct{}) + go func() { + if err := p.sendPooledTransactionHashes(pending); err != nil { + fail <- err + return + } + close(done) + p.Log().Trace("Sent transaction announcements", "count", len(pending)) + }() + } + } + // Transfer goroutine may or may not have been started, listen for events + select { + case hashes := <-p.txAnnounce: + // If the connection failed, discard all transaction events + if failed { + continue + } + // New batch of transactions to be broadcast, queue them (with cap) + queue = append(queue, hashes...) + if len(queue) > maxQueuedTxAnns { + // Fancy copy and resize to ensure buffer doesn't grow indefinitely + queue = queue[:copy(queue, queue[len(queue)-maxQueuedTxAnns:])] + } + + case <-done: + done = nil + + case <-fail: + failed = true + + case <-p.term: + return + } + } +} diff --git a/eth/enr_entry.go b/eth/protocols/eth/discovery.go similarity index 54% rename from eth/enr_entry.go rename to eth/protocols/eth/discovery.go index 48f86335..03f2ea3c 100644 --- a/eth/enr_entry.go +++ b/eth/protocols/eth/discovery.go @@ -1,4 +1,4 @@ -// Copyright 2019 The go-ethereum Authors +// Copyright 2020 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -17,15 +17,14 @@ package eth import ( - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/forkid" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rlp" + "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 { +// enrEntry is the ENR entry which advertises `eth` protocol on the discovery. +type enrEntry struct { ForkID forkid.ID // Fork identifier per EIP-2124 // Ignore additional fields (for forward compatibility). @@ -33,22 +32,24 @@ type ethEntry struct { } // ENRKey implements enr.Entry. -func (e ethEntry) ENRKey() string { +func (e enrEntry) ENRKey() string { return "eth" } -func (eth *Ethereum) startEthEntryUpdate(ln *enode.LocalNode) { +// StartENRUpdater starts the `eth` ENR updater loop, which listens for chain +// head events and updates the requested node record whenever a fork is passed. +func StartENRUpdater(chain *core.BlockChain, ln *enode.LocalNode) { var newHead = make(chan core.ChainHeadEvent, 10) - sub := eth.blockchain.SubscribeChainHeadEvent(newHead) + sub := chain.SubscribeChainHeadEvent(newHead) go func() { defer sub.Unsubscribe() for { select { case <-newHead: - ln.Set(eth.currentEthEntry()) + ln.Set(currentENREntry(chain)) case <-sub.Err(): - // Would be nice to sync with eth.Stop, but there is no + // Would be nice to sync with Stop, but there is no // good way to do that. return } @@ -56,6 +57,9 @@ func (eth *Ethereum) startEthEntryUpdate(ln *enode.LocalNode) { }() } -func (eth *Ethereum) currentEthEntry() *ethEntry { - return ðEntry{ForkID: forkid.NewID(eth.blockchain)} +// currentENREntry constructs an `eth` ENR entry based on the current state of the chain. +func currentENREntry(chain *core.BlockChain) *enrEntry { + return &enrEntry{ + ForkID: forkid.NewID(chain.Config(), chain.Genesis().Hash(), chain.CurrentHeader().Number.Uint64()), + } } diff --git a/eth/protocols/eth/dispatcher.go b/eth/protocols/eth/dispatcher.go new file mode 100644 index 00000000..65a935d5 --- /dev/null +++ b/eth/protocols/eth/dispatcher.go @@ -0,0 +1,253 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/p2p" +) + +var ( + // errDisconnected is returned if a request is attempted to be made to a peer + // that was already closed. + errDisconnected = errors.New("disconnected") + + // errDanglingResponse is returned if a response arrives with a request id + // which does not match to any existing pending requests. + errDanglingResponse = errors.New("response to non-existent request") + + // errMismatchingResponseType is returned if the remote peer sent a different + // packet type as a response to a request than what the local node expected. + errMismatchingResponseType = errors.New("mismatching response type") +) + +// Request is a pending request to allow tracking it and delivering a response +// back to the requester on their chosen channel. +type Request struct { + peer *Peer // Peer to which this request belogs for untracking + id uint64 // Request ID to match up replies to + + sink chan *Response // Channel to deliver the response on + cancel chan struct{} // Channel to cancel requests ahead of time + + code uint64 // Message code of the request packet + want uint64 // Message code of the response packet + data interface{} // Data content of the request packet + + Peer string // Demultiplexer if cross-peer requests are batched together + Sent time.Time // Timestamp when the request was sent +} + +// Close aborts an in-flight request. Although there's no way to notify the +// remote peer about the cancellation, this method notifies the dispatcher to +// discard any late responses. +func (r *Request) Close() error { + if r.peer == nil { // Tests mock out the dispatcher, skip internal cancellation + return nil + } + cancelOp := &cancel{ + id: r.id, + fail: make(chan error), + } + select { + case r.peer.reqCancel <- cancelOp: + if err := <-cancelOp.fail; err != nil { + return err + } + close(r.cancel) + return nil + case <-r.peer.term: + return errDisconnected + } +} + +// request is a wrapper around a client Request that has an error channel to +// signal on if sending the request already failed on a network level. +type request struct { + req *Request + fail chan error +} + +// cancel is a maintenance type on the dispatcher to stop tracking a pending +// request. +type cancel struct { + id uint64 // Request ID to stop tracking + fail chan error +} + +// Response is a reply packet to a previously created request. It is delivered +// on the channel assigned by the requester subsystem and contains the original +// request embedded to allow uniquely matching it caller side. +type Response struct { + id uint64 // Request ID to match up this reply to + recv time.Time // Timestamp when the request was received + code uint64 // Response packet type to cross validate with request + + Req *Request // Original request to cross-reference with + Res interface{} // Remote response for the request query + Meta interface{} // Metadata generated locally on the receiver thread + Time time.Duration // Time it took for the request to be served + Done chan error // Channel to signal message handling to the reader +} + +// response is a wrapper around a remote Response that has an error channel to +// signal on if processing the response failed. +type response struct { + res *Response + fail chan error +} + +// dispatchRequest schedules the request to the dispatcher for tracking and +// network serialization, blocking until it's successfully sent. +// +// The returned Request must either be closed before discarding it, or the reply +// must be waited for and the Response's Done channel signalled. +func (p *Peer) dispatchRequest(req *Request) error { + reqOp := &request{ + req: req, + fail: make(chan error), + } + req.cancel = make(chan struct{}) + req.peer = p + req.Peer = p.id + + select { + case p.reqDispatch <- reqOp: + return <-reqOp.fail + case <-p.term: + return errDisconnected + } +} + +// dispatchRequest fulfils a pending request and delivers it to the requested +// sink. +func (p *Peer) dispatchResponse(res *Response, metadata func() interface{}) error { + resOp := &response{ + res: res, + fail: make(chan error), + } + res.recv = time.Now() + res.Done = make(chan error) + + select { + case p.resDispatch <- resOp: + // Ensure the response is accepted by the dispatcher + if err := <-resOp.fail; err != nil { + return nil + } + // Request was accepted, run any postprocessing step to generate metadata + // on the receiver thread, not the sink thread + if metadata != nil { + res.Meta = metadata() + } + // Deliver the filled out response and wait until it's handled. This + // path is a bit funky as Go's select has no order, so if a response + // arrives to an already cancelled request, there's a 50-50% changes + // of picking on channel or the other. To avoid such cases delivering + // the packet upstream, check for cancellation first and only after + // block on delivery. + select { + case <-res.Req.cancel: + return nil // Request cancelled, silently discard response + default: + // Request not yet cancelled, attempt to deliver it, but do watch + // for fresh cancellations too + select { + case res.Req.sink <- res: + return <-res.Done // Response delivered, return any errors + case <-res.Req.cancel: + return nil // Request cancelled, silently discard response + } + } + + case <-p.term: + return errDisconnected + } +} + +// dispatcher is a loop that accepts requests from higher layer packages, pushes +// it to the network and tracks and dispatches the responses back to the original +// requester. +func (p *Peer) dispatcher() { + pending := make(map[uint64]*Request) + + for { + select { + case reqOp := <-p.reqDispatch: + req := reqOp.req + req.Sent = time.Now() + + requestTracker.Track(p.id, p.version, req.code, req.want, req.id) + err := p2p.Send(p.rw, req.code, req.data) + reqOp.fail <- err + + if err == nil { + pending[req.id] = req + } + + case cancelOp := <-p.reqCancel: + // Retrieve the pendign request to cancel and short circuit if it + // has already been serviced and is not available anymore + req := pending[cancelOp.id] + if req == nil { + cancelOp.fail <- nil + continue + } + // Stop tracking the request + delete(pending, cancelOp.id) + cancelOp.fail <- nil + + case resOp := <-p.resDispatch: + res := resOp.res + res.Req = pending[res.id] + + // Independent if the request exists or not, track this packet + requestTracker.Fulfil(p.id, p.version, res.code, res.id) + + switch { + case res.Req == nil: + // Response arrived with an untracked ID. Since even cancelled + // requests are tracked until fulfilment, a dangling response + // means the remote peer implements the protocol badly. + resOp.fail <- errDanglingResponse + + case res.Req.want != res.code: + // Response arrived, but it's a different packet type than the + // one expected by the requester. Either the local code is bad, + // or the remote peer send junk. In neither cases can we handle + // the packet. + resOp.fail <- fmt.Errorf("%w: have %d, want %d", errMismatchingResponseType, res.code, res.Req.want) + + default: + // All dispatcher checks passed and the response was initialized + // with the matching request. Signal to the delivery routine that + // it can wait for a handler response and dispatch the data. + res.Time = res.recv.Sub(res.Req.Sent) + resOp.fail <- nil + + // Stop tracking the request, the response dispatcher will deliver + delete(pending, res.id) + } + + case <-p.term: + return + } + } +} diff --git a/eth/protocols/eth/handler.go b/eth/protocols/eth/handler.go new file mode 100644 index 00000000..3a0b21c3 --- /dev/null +++ b/eth/protocols/eth/handler.go @@ -0,0 +1,233 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "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/enr" + "github.com/ethereum/go-ethereum/params" +) + +const ( + // softResponseLimit is the target maximum size of replies to data retrievals. + softResponseLimit = 2 * 1024 * 1024 + + // maxHeadersServe is the maximum number of block headers to serve. This number + // is there to limit the number of disk lookups. + maxHeadersServe = 1024 + + // maxBodiesServe is the maximum number of block bodies to serve. This number + // is mostly there to limit the number of disk lookups. With 24KB block sizes + // nowadays, the practical limit will always be softResponseLimit. + maxBodiesServe = 1024 + + // maxNodeDataServe is the maximum number of state trie nodes to serve. This + // number is there to limit the number of disk lookups. + maxNodeDataServe = 1024 + + // maxReceiptsServe is the maximum number of block receipts to serve. This + // number is mostly there to limit the number of disk lookups. With block + // containing 200+ transactions nowadays, the practical limit will always + // be softResponseLimit. + maxReceiptsServe = 1024 +) + +// Handler is a callback to invoke from an outside runner after the boilerplate +// exchanges have passed. +type Handler func(peer *Peer) error + +// Backend defines the data retrieval methods to serve remote requests and the +// callback methods to invoke on remote deliveries. +type Backend interface { + // Chain retrieves the blockchain object to serve data. + Chain() *core.BlockChain + + // TxPool retrieves the transaction pool object to serve data. + TxPool() TxPool + + // AcceptTxs retrieves whether transaction processing is enabled on the node + // or if inbound transactions should simply be dropped. + AcceptTxs() bool + + // RunPeer is invoked when a peer joins on the `eth` protocol. The handler + // should do any peer maintenance work, handshakes and validations. If all + // is passed, control should be given back to the `handler` to process the + // inbound messages going forward. + RunPeer(peer *Peer, handler Handler) error + + // PeerInfo retrieves all known `eth` information about a peer. + PeerInfo(id enode.ID) interface{} + + // Handle is a callback to be invoked when a data packet is received from + // the remote peer. Only packets not consumed by the protocol handler will + // be forwarded to the backend. + Handle(peer *Peer, packet Packet) error +} + +// TxPool defines the methods needed by the protocol handler to serve transactions. +type TxPool interface { + // Get retrieves the transaction from the local txpool with the given hash. + Get(hash common.Hash) *types.Transaction +} + +// MakeProtocols constructs the P2P protocol definitions for `eth`. +func MakeProtocols(backend Backend, network uint64, dnsdisc enode.Iterator) []p2p.Protocol { + protocols := make([]p2p.Protocol, len(ProtocolVersions)) + for i, version := range ProtocolVersions { + version := version // Closure + + protocols[i] = p2p.Protocol{ + Name: ProtocolName, + Version: version, + Length: protocolLengths[version], + Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { + peer := NewPeer(version, p, rw, backend.TxPool()) + defer peer.Close() + + return backend.RunPeer(peer, func(peer *Peer) error { + return Handle(backend, peer) + }) + }, + NodeInfo: func() interface{} { + return nodeInfo(backend.Chain(), network) + }, + PeerInfo: func(id enode.ID) interface{} { + return backend.PeerInfo(id) + }, + Attributes: []enr.Entry{currentENREntry(backend.Chain())}, + DialCandidates: dnsdisc, + } + } + return protocols +} + +// NodeInfo represents a short summary of the `eth` sub-protocol metadata +// known about the host peer. +type NodeInfo struct { + Network uint64 `json:"network"` // Ethereum network ID (1=Frontier, 2=Morden, Ropsten=3, Rinkeby=4) + Difficulty *big.Int `json:"difficulty"` // Total difficulty of the host's blockchain + Genesis common.Hash `json:"genesis"` // SHA3 hash of the host's genesis block + Config *params.ChainConfig `json:"config"` // Chain configuration for the fork rules + Head common.Hash `json:"head"` // Hex hash of the host's best owned block +} + +// nodeInfo retrieves some `eth` protocol metadata about the running host node. +func nodeInfo(chain *core.BlockChain, network uint64) *NodeInfo { + head := chain.CurrentBlock() + return &NodeInfo{ + Network: network, + Difficulty: chain.GetTd(head.Hash(), head.NumberU64()), + Genesis: chain.Genesis().Hash(), + Config: chain.Config(), + Head: head.Hash(), + } +} + +// Handle is invoked whenever an `eth` connection is made that successfully passes +// the protocol handshake. This method will keep processing messages until the +// connection is torn down. +func Handle(backend Backend, peer *Peer) error { + for { + if err := handleMessage(backend, peer); err != nil { + peer.Log().Debug("Message handling failed in `eth`", "err", err) + return err + } + } +} + +type msgHandler func(backend Backend, msg Decoder, peer *Peer) error +type Decoder interface { + Decode(val interface{}) error + Time() time.Time +} + +var eth66 = map[uint64]msgHandler{ + NewBlockHashesMsg: handleNewBlockhashes, + NewBlockMsg: handleNewBlock, + TransactionsMsg: handleTransactions, + NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes, + GetBlockHeadersMsg: handleGetBlockHeaders66, + BlockHeadersMsg: handleBlockHeaders66, + GetBlockBodiesMsg: handleGetBlockBodies66, + BlockBodiesMsg: handleBlockBodies66, + GetNodeDataMsg: handleGetNodeData66, + NodeDataMsg: handleNodeData66, + GetReceiptsMsg: handleGetReceipts66, + ReceiptsMsg: handleReceipts66, + GetPooledTransactionsMsg: handleGetPooledTransactions66, + PooledTransactionsMsg: handlePooledTransactions66, +} + +var eth67 = map[uint64]msgHandler{ + NewBlockHashesMsg: handleNewBlockhashes, + NewBlockMsg: handleNewBlock, + TransactionsMsg: handleTransactions, + NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes, + GetBlockHeadersMsg: handleGetBlockHeaders66, + BlockHeadersMsg: handleBlockHeaders66, + GetBlockBodiesMsg: handleGetBlockBodies66, + BlockBodiesMsg: handleBlockBodies66, + GetReceiptsMsg: handleGetReceipts66, + ReceiptsMsg: handleReceipts66, + GetPooledTransactionsMsg: handleGetPooledTransactions66, + PooledTransactionsMsg: handlePooledTransactions66, +} + +// handleMessage is invoked whenever an inbound message is received from a remote +// peer. The remote connection is torn down upon returning any error. +func handleMessage(backend Backend, peer *Peer) error { + // Read the next message from the remote peer, and ensure it's fully consumed + msg, err := peer.rw.ReadMsg() + if err != nil { + return err + } + if msg.Size > maxMessageSize { + return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) + } + defer msg.Discard() + + var handlers = eth66 + if peer.Version() >= ETH67 { + handlers = eth67 + } + + // Track the amount of time it takes to serve the request and run the handler + if metrics.Enabled { + h := fmt.Sprintf("%s/%s/%d/%#02x", p2p.HandleHistName, ProtocolName, peer.Version(), msg.Code) + defer func(start time.Time) { + sampler := func() metrics.Sample { + return metrics.ResettingSample( + metrics.NewExpDecaySample(1028, 0.015), + ) + } + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(time.Since(start).Microseconds()) + }(time.Now()) + } + if handler := handlers[msg.Code]; handler != nil { + return handler(backend, msg, peer) + } + return fmt.Errorf("%w: %v", errInvalidMsgCode, msg.Code) +} diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go new file mode 100644 index 00000000..ea2edc4a --- /dev/null +++ b/eth/protocols/eth/handler_test.go @@ -0,0 +1,558 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math" + "math/big" + "math/rand" + "testing" + + "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/ethdb" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" +) + +var ( + // testKey is a private key to use for funding a tester account. + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + + // testAddr is the Ethereum address of the tester account. + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) +) + +// testBackend is a mock implementation of the live Ethereum message handler. Its +// purpose is to allow testing the request/reply workflows and wire serialization +// in the `eth` protocol without actually doing any data processing. +type testBackend struct { + db ethdb.Database + chain *core.BlockChain + txpool *core.TxPool +} + +// newTestBackend creates an empty chain and wraps it into a mock backend. +func newTestBackend(blocks int) *testBackend { + return newTestBackendWithGenerator(blocks, nil) +} + +// newTestBackend creates a chain with a number of explicitly defined blocks and +// wraps it into a mock backend. +func newTestBackendWithGenerator(blocks int, generator func(int, *core.BlockGen)) *testBackend { + // Create a database pre-initialize with a genesis block + db := rawdb.NewMemoryDatabase() + gspec := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testAddr: {Balance: big.NewInt(100_000_000_000_000_000)}}, + } + gspec.MustCommit(db) + + chain, _ := core.NewBlockChain(db, nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + + bs, _ := core.GenerateChain(params.TestChainConfig, chain.Genesis(), ethash.NewFaker(), db, blocks, generator) + if _, err := chain.InsertChain(bs); err != nil { + panic(err) + } + txconfig := core.DefaultTxPoolConfig + txconfig.Journal = "" // Don't litter the disk with test journals + + return &testBackend{ + db: db, + chain: chain, + txpool: core.NewTxPool(txconfig, params.TestChainConfig, chain), + } +} + +// close tears down the transaction pool and chain behind the mock backend. +func (b *testBackend) close() { + b.txpool.Stop() + b.chain.Stop() +} + +func (b *testBackend) Chain() *core.BlockChain { return b.chain } +func (b *testBackend) TxPool() TxPool { return b.txpool } + +func (b *testBackend) RunPeer(peer *Peer, handler Handler) error { + // Normally the backend would do peer maintenance and handshakes. All that + // is omitted and we will just give control back to the handler. + return handler(peer) +} +func (b *testBackend) PeerInfo(enode.ID) interface{} { panic("not implemented") } + +func (b *testBackend) AcceptTxs() bool { + panic("data processing tests should be done in the handler package") +} +func (b *testBackend) Handle(*Peer, Packet) error { + panic("data processing tests should be done in the handler package") +} + +// Tests that block headers can be retrieved from a remote chain based on user queries. +func TestGetBlockHeaders66(t *testing.T) { testGetBlockHeaders(t, ETH66) } + +func testGetBlockHeaders(t *testing.T, protocol uint) { + t.Parallel() + + backend := newTestBackend(maxHeadersServe + 15) + defer backend.close() + + peer, _ := newTestPeer("peer", protocol, backend) + defer peer.close() + + // Create a "random" unknown hash for testing + var unknown common.Hash + for i := range unknown { + unknown[i] = byte(i) + } + getHashes := func(from, limit uint64) (hashes []common.Hash) { + for i := uint64(0); i < limit; i++ { + hashes = append(hashes, backend.chain.GetCanonicalHash(from-1-i)) + } + return hashes + } + // Create a batch of tests for various scenarios + limit := uint64(maxHeadersServe) + tests := []struct { + query *GetBlockHeadersPacket // The query to execute for header retrieval + expect []common.Hash // The hashes of the block whose headers are expected + }{ + // A single random block should be retrievable by hash + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: backend.chain.GetBlockByNumber(limit / 2).Hash()}, Amount: 1}, + []common.Hash{backend.chain.GetBlockByNumber(limit / 2).Hash()}, + }, + // A single random block should be retrievable by number + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: limit / 2}, Amount: 1}, + []common.Hash{backend.chain.GetBlockByNumber(limit / 2).Hash()}, + }, + // Multiple headers should be retrievable in both directions + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: limit / 2}, Amount: 3}, + []common.Hash{ + backend.chain.GetBlockByNumber(limit / 2).Hash(), + backend.chain.GetBlockByNumber(limit/2 + 1).Hash(), + backend.chain.GetBlockByNumber(limit/2 + 2).Hash(), + }, + }, { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: limit / 2}, Amount: 3, Reverse: true}, + []common.Hash{ + backend.chain.GetBlockByNumber(limit / 2).Hash(), + backend.chain.GetBlockByNumber(limit/2 - 1).Hash(), + backend.chain.GetBlockByNumber(limit/2 - 2).Hash(), + }, + }, + // Multiple headers with skip lists should be retrievable + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3}, + []common.Hash{ + backend.chain.GetBlockByNumber(limit / 2).Hash(), + backend.chain.GetBlockByNumber(limit/2 + 4).Hash(), + backend.chain.GetBlockByNumber(limit/2 + 8).Hash(), + }, + }, { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3, Reverse: true}, + []common.Hash{ + backend.chain.GetBlockByNumber(limit / 2).Hash(), + backend.chain.GetBlockByNumber(limit/2 - 4).Hash(), + backend.chain.GetBlockByNumber(limit/2 - 8).Hash(), + }, + }, + // The chain endpoints should be retrievable + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 0}, Amount: 1}, + []common.Hash{backend.chain.GetBlockByNumber(0).Hash()}, + }, + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64()}, Amount: 1}, + []common.Hash{backend.chain.CurrentBlock().Hash()}, + }, + { // If the peer requests a bit into the future, we deliver what we have + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64()}, Amount: 10}, + []common.Hash{backend.chain.CurrentBlock().Hash()}, + }, + // Ensure protocol limits are honored + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64() - 1}, Amount: limit + 10, Reverse: true}, + getHashes(backend.chain.CurrentBlock().NumberU64(), limit), + }, + // Check that requesting more than available is handled gracefully + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64() - 4}, Skip: 3, Amount: 3}, + []common.Hash{ + backend.chain.GetBlockByNumber(backend.chain.CurrentBlock().NumberU64() - 4).Hash(), + backend.chain.GetBlockByNumber(backend.chain.CurrentBlock().NumberU64()).Hash(), + }, + }, { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 4}, Skip: 3, Amount: 3, Reverse: true}, + []common.Hash{ + backend.chain.GetBlockByNumber(4).Hash(), + backend.chain.GetBlockByNumber(0).Hash(), + }, + }, + // Check that requesting more than available is handled gracefully, even if mid skip + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64() - 4}, Skip: 2, Amount: 3}, + []common.Hash{ + backend.chain.GetBlockByNumber(backend.chain.CurrentBlock().NumberU64() - 4).Hash(), + backend.chain.GetBlockByNumber(backend.chain.CurrentBlock().NumberU64() - 1).Hash(), + }, + }, { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 4}, Skip: 2, Amount: 3, Reverse: true}, + []common.Hash{ + backend.chain.GetBlockByNumber(4).Hash(), + backend.chain.GetBlockByNumber(1).Hash(), + }, + }, + // Check a corner case where requesting more can iterate past the endpoints + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 2}, Amount: 5, Reverse: true}, + []common.Hash{ + backend.chain.GetBlockByNumber(2).Hash(), + backend.chain.GetBlockByNumber(1).Hash(), + backend.chain.GetBlockByNumber(0).Hash(), + }, + }, + // Check a corner case where skipping overflow loops back into the chain start + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: backend.chain.GetBlockByNumber(3).Hash()}, Amount: 2, Reverse: false, Skip: math.MaxUint64 - 1}, + []common.Hash{ + backend.chain.GetBlockByNumber(3).Hash(), + }, + }, + // Check a corner case where skipping overflow loops back to the same header + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: backend.chain.GetBlockByNumber(1).Hash()}, Amount: 2, Reverse: false, Skip: math.MaxUint64}, + []common.Hash{ + backend.chain.GetBlockByNumber(1).Hash(), + }, + }, + // Check that non existing headers aren't returned + { + &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: unknown}, Amount: 1}, + []common.Hash{}, + }, { + &GetBlockHeadersPacket{Origin: HashOrNumber{Number: backend.chain.CurrentBlock().NumberU64() + 1}, Amount: 1}, + []common.Hash{}, + }, + } + // Run each of the tests and verify the results against the chain + for i, tt := range tests { + // Collect the headers to expect in the response + var headers []*types.Header + for _, hash := range tt.expect { + headers = append(headers, backend.chain.GetBlockByHash(hash).Header()) + } + // Send the hash request and verify the response + p2p.Send(peer.app, GetBlockHeadersMsg, &GetBlockHeadersPacket66{ + RequestId: 123, + GetBlockHeadersPacket: tt.query, + }) + if err := p2p.ExpectMsg(peer.app, BlockHeadersMsg, &BlockHeadersPacket66{ + RequestId: 123, + BlockHeadersPacket: headers, + }); err != nil { + t.Errorf("test %d: headers mismatch: %v", i, err) + } + // If the test used number origins, repeat with hashes as the too + if tt.query.Origin.Hash == (common.Hash{}) { + if origin := backend.chain.GetBlockByNumber(tt.query.Origin.Number); origin != nil { + tt.query.Origin.Hash, tt.query.Origin.Number = origin.Hash(), 0 + + p2p.Send(peer.app, GetBlockHeadersMsg, &GetBlockHeadersPacket66{ + RequestId: 456, + GetBlockHeadersPacket: tt.query, + }) + expected := &BlockHeadersPacket66{RequestId: 456, BlockHeadersPacket: headers} + if err := p2p.ExpectMsg(peer.app, BlockHeadersMsg, expected); err != nil { + t.Errorf("test %d by hash: headers mismatch: %v", i, err) + } + } + } + } +} + +// Tests that block contents can be retrieved from a remote chain based on their hashes. +func TestGetBlockBodies66(t *testing.T) { testGetBlockBodies(t, ETH66) } + +func testGetBlockBodies(t *testing.T, protocol uint) { + t.Parallel() + + backend := newTestBackend(maxBodiesServe + 15) + defer backend.close() + + peer, _ := newTestPeer("peer", protocol, backend) + defer peer.close() + + // Create a batch of tests for various scenarios + limit := maxBodiesServe + tests := []struct { + random int // Number of blocks to fetch randomly from the chain + explicit []common.Hash // Explicitly requested blocks + available []bool // Availability of explicitly requested blocks + expected int // Total number of existing blocks to expect + }{ + {1, nil, nil, 1}, // A single random block should be retrievable + {10, nil, nil, 10}, // Multiple random blocks should be retrievable + {limit, nil, nil, limit}, // The maximum possible blocks should be retrievable + {limit + 1, nil, nil, limit}, // No more than the possible block count should be returned + {0, []common.Hash{backend.chain.Genesis().Hash()}, []bool{true}, 1}, // The genesis block should be retrievable + {0, []common.Hash{backend.chain.CurrentBlock().Hash()}, []bool{true}, 1}, // The chains head block should be retrievable + {0, []common.Hash{{}}, []bool{false}, 0}, // A non existent block should not be returned + + // Existing and non-existing blocks interleaved should not cause problems + {0, []common.Hash{ + {}, + backend.chain.GetBlockByNumber(1).Hash(), + {}, + backend.chain.GetBlockByNumber(10).Hash(), + {}, + backend.chain.GetBlockByNumber(100).Hash(), + {}, + }, []bool{false, true, false, true, false, true, false}, 3}, + } + // Run each of the tests and verify the results against the chain + for i, tt := range tests { + // Collect the hashes to request, and the response to expectva + var ( + hashes []common.Hash + bodies []*BlockBody + seen = make(map[int64]bool) + ) + for j := 0; j < tt.random; j++ { + for { + num := rand.Int63n(int64(backend.chain.CurrentBlock().NumberU64())) + if !seen[num] { + seen[num] = true + + block := backend.chain.GetBlockByNumber(uint64(num)) + hashes = append(hashes, block.Hash()) + if len(bodies) < tt.expected { + bodies = append(bodies, &BlockBody{Transactions: block.Transactions(), Uncles: block.Uncles()}) + } + break + } + } + } + for j, hash := range tt.explicit { + hashes = append(hashes, hash) + if tt.available[j] && len(bodies) < tt.expected { + block := backend.chain.GetBlockByHash(hash) + bodies = append(bodies, &BlockBody{Transactions: block.Transactions(), Uncles: block.Uncles()}) + } + } + // Send the hash request and verify the response + p2p.Send(peer.app, GetBlockBodiesMsg, &GetBlockBodiesPacket66{ + RequestId: 123, + GetBlockBodiesPacket: hashes, + }) + if err := p2p.ExpectMsg(peer.app, BlockBodiesMsg, &BlockBodiesPacket66{ + RequestId: 123, + BlockBodiesPacket: bodies, + }); err != nil { + t.Errorf("test %d: bodies mismatch: %v", i, err) + } + } +} + +// Tests that the state trie nodes can be retrieved based on hashes. +func TestGetNodeData66(t *testing.T) { testGetNodeData(t, ETH66) } + +func testGetNodeData(t *testing.T, protocol uint) { + t.Parallel() + + // Define three accounts to simulate transactions with + acc1Key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + acc2Key, _ := crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + acc1Addr := crypto.PubkeyToAddress(acc1Key.PublicKey) + acc2Addr := crypto.PubkeyToAddress(acc2Key.PublicKey) + + signer := types.HomesteadSigner{} + // Create a chain generator with some simple transactions (blatantly stolen from @fjl/chain_makers_test) + generator := func(i int, block *core.BlockGen) { + switch i { + case 0: + // In block 1, the test bank sends account #1 some ether. + tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testAddr), acc1Addr, big.NewInt(10_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testKey) + 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. + tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testAddr), acc1Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testKey) + tx2, _ := types.SignTx(types.NewTransaction(block.TxNonce(acc1Addr), acc2Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, acc1Key) + block.AddTx(tx1) + block.AddTx(tx2) + case 2: + // Block 3 is empty but was mined by account #2. + block.SetCoinbase(acc2Addr) + block.SetExtra([]byte("yeehaw")) + 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) + } + } + // Assemble the test environment + backend := newTestBackendWithGenerator(4, generator) + defer backend.close() + + peer, _ := newTestPeer("peer", protocol, backend) + defer peer.close() + + // Collect all state tree hashes. + var hashes []common.Hash + it := backend.db.NewIterator(nil, nil) + for it.Next() { + if key := it.Key(); len(key) == common.HashLength { + hashes = append(hashes, common.BytesToHash(key)) + } + } + it.Release() + + // Request all hashes. + p2p.Send(peer.app, GetNodeDataMsg, &GetNodeDataPacket66{ + RequestId: 123, + GetNodeDataPacket: hashes, + }) + msg, err := peer.app.ReadMsg() + if err != nil { + t.Fatalf("failed to read node data response: %v", err) + } + if msg.Code != NodeDataMsg { + t.Fatalf("response packet code mismatch: have %x, want %x", msg.Code, NodeDataMsg) + } + var res NodeDataPacket66 + if err := msg.Decode(&res); err != nil { + t.Fatalf("failed to decode response node data: %v", err) + } + + // Verify that all hashes correspond to the requested data. + data := res.NodeDataPacket + for i, want := range hashes { + if hash := crypto.Keccak256Hash(data[i]); hash != want { + t.Errorf("data hash mismatch: have %x, want %x", hash, want) + } + } + + // Reconstruct state tree from the received data. + reconstructDB := rawdb.NewMemoryDatabase() + for i := 0; i < len(data); i++ { + rawdb.WriteTrieNode(reconstructDB, hashes[i], data[i]) + } + + // Sanity check whether all state matches. + accounts := []common.Address{testAddr, acc1Addr, acc2Addr} + for i := uint64(0); i <= backend.chain.CurrentBlock().NumberU64(); i++ { + root := backend.chain.GetBlockByNumber(i).Root() + reconstructed, _ := state.New(root, state.NewDatabase(reconstructDB), nil) + for j, acc := range accounts { + state, _ := backend.chain.StateAt(root) + bw := state.GetBalance(acc) + bh := reconstructed.GetBalance(acc) + + if (bw == nil) != (bh == nil) { + t.Errorf("block %d, account %d: balance mismatch: have %v, want %v", i, j, bh, bw) + } + if bw != nil && bh != nil && bw.Cmp(bh) != 0 { + t.Errorf("block %d, account %d: balance mismatch: have %v, want %v", i, j, bh, bw) + } + } + } +} + +// Tests that the transaction receipts can be retrieved based on hashes. +func TestGetBlockReceipts66(t *testing.T) { testGetBlockReceipts(t, ETH66) } + +func testGetBlockReceipts(t *testing.T, protocol uint) { + t.Parallel() + + // Define three accounts to simulate transactions with + acc1Key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + acc2Key, _ := crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + acc1Addr := crypto.PubkeyToAddress(acc1Key.PublicKey) + acc2Addr := crypto.PubkeyToAddress(acc2Key.PublicKey) + + signer := types.HomesteadSigner{} + // Create a chain generator with some simple transactions (blatantly stolen from @fjl/chain_markets_test) + generator := func(i int, block *core.BlockGen) { + switch i { + case 0: + // In block 1, the test bank sends account #1 some ether. + tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testAddr), acc1Addr, big.NewInt(10_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testKey) + 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. + tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testAddr), acc1Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testKey) + tx2, _ := types.SignTx(types.NewTransaction(block.TxNonce(acc1Addr), acc2Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, acc1Key) + block.AddTx(tx1) + block.AddTx(tx2) + case 2: + // Block 3 is empty but was mined by account #2. + block.SetCoinbase(acc2Addr) + block.SetExtra([]byte("yeehaw")) + 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) + } + } + // Assemble the test environment + backend := newTestBackendWithGenerator(4, generator) + defer backend.close() + + peer, _ := newTestPeer("peer", protocol, backend) + defer peer.close() + + // Collect the hashes to request, and the response to expect + var ( + hashes []common.Hash + receipts [][]*types.Receipt + ) + for i := uint64(0); i <= backend.chain.CurrentBlock().NumberU64(); i++ { + block := backend.chain.GetBlockByNumber(i) + + hashes = append(hashes, block.Hash()) + receipts = append(receipts, backend.chain.GetReceiptsByHash(block.Hash())) + } + // Send the hash request and verify the response + p2p.Send(peer.app, GetReceiptsMsg, &GetReceiptsPacket66{ + RequestId: 123, + GetReceiptsPacket: hashes, + }) + if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket66{ + RequestId: 123, + ReceiptsPacket: receipts, + }); err != nil { + t.Errorf("receipts mismatch: %v", err) + } +} diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go new file mode 100644 index 00000000..c8585dfd --- /dev/null +++ b/eth/protocols/eth/handlers.go @@ -0,0 +1,528 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "encoding/json" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +// handleGetBlockHeaders66 is the eth/66 version of handleGetBlockHeaders +func handleGetBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { + // Decode the complex header query + var query GetBlockHeadersPacket66 + if err := msg.Decode(&query); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + response := ServiceGetBlockHeadersQuery(backend.Chain(), query.GetBlockHeadersPacket, peer) + return peer.ReplyBlockHeadersRLP(query.RequestId, response) +} + +// ServiceGetBlockHeadersQuery assembles the response to a header query. It is +// exposed to allow external packages to test protocol behavior. +func ServiceGetBlockHeadersQuery(chain *core.BlockChain, query *GetBlockHeadersPacket, peer *Peer) []rlp.RawValue { + if query.Skip == 0 { + // The fast path: when the request is for a contiguous segment of headers. + return serviceContiguousBlockHeaderQuery(chain, query) + } else { + return serviceNonContiguousBlockHeaderQuery(chain, query, peer) + } +} + +func serviceNonContiguousBlockHeaderQuery(chain *core.BlockChain, query *GetBlockHeadersPacket, peer *Peer) []rlp.RawValue { + 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 []rlp.RawValue + unknown bool + lookups int + ) + for !unknown && len(headers) < int(query.Amount) && bytes < softResponseLimit && + len(headers) < maxHeadersServe && lookups < 2*maxHeadersServe { + lookups++ + // Retrieve the next header satisfying the query + var origin *types.Header + if hashMode { + if first { + first = false + origin = chain.GetHeaderByHash(query.Origin.Hash) + if origin != nil { + query.Origin.Number = origin.Number.Uint64() + } + } else { + origin = chain.GetHeader(query.Origin.Hash, query.Origin.Number) + } + } else { + origin = chain.GetHeaderByNumber(query.Origin.Number) + } + if origin == nil { + break + } + if rlpData, err := rlp.EncodeToBytes(origin); err != nil { + log.Crit("Unable to decode our own headers", "err", err) + } else { + headers = append(headers, rlp.RawValue(rlpData)) + bytes += common.StorageSize(len(rlpData)) + } + // 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 = chain.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(peer.Peer.Info(), "", " ") + peer.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", query.Skip, "next", next, "attacker", infos) + unknown = true + } else { + if header := chain.GetHeaderByNumber(next); header != nil { + nextHash := header.Hash() + expOldHash, _ := chain.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 + } + } + return headers +} + +func serviceContiguousBlockHeaderQuery(chain *core.BlockChain, query *GetBlockHeadersPacket) []rlp.RawValue { + count := query.Amount + if count > maxHeadersServe { + count = maxHeadersServe + } + if query.Origin.Hash == (common.Hash{}) { + // Number mode, just return the canon chain segment. The backend + // delivers in [N, N-1, N-2..] descending order, so we need to + // accommodate for that. + from := query.Origin.Number + if !query.Reverse { + from = from + count - 1 + } + headers := chain.GetHeadersFrom(from, count) + if !query.Reverse { + for i, j := 0, len(headers)-1; i < j; i, j = i+1, j-1 { + headers[i], headers[j] = headers[j], headers[i] + } + } + return headers + } + // Hash mode. + var ( + headers []rlp.RawValue + hash = query.Origin.Hash + header = chain.GetHeaderByHash(hash) + ) + if header != nil { + rlpData, _ := rlp.EncodeToBytes(header) + headers = append(headers, rlpData) + } else { + // We don't even have the origin header + return headers + } + num := header.Number.Uint64() + if !query.Reverse { + // Theoretically, we are tasked to deliver header by hash H, and onwards. + // However, if H is not canon, we will be unable to deliver any descendants of + // H. + if canonHash := chain.GetCanonicalHash(num); canonHash != hash { + // Not canon, we can't deliver descendants + return headers + } + descendants := chain.GetHeadersFrom(num+count-1, count-1) + for i, j := 0, len(descendants)-1; i < j; i, j = i+1, j-1 { + descendants[i], descendants[j] = descendants[j], descendants[i] + } + headers = append(headers, descendants...) + return headers + } + { // Last mode: deliver ancestors of H + for i := uint64(1); header != nil && i < count; i++ { + header = chain.GetHeaderByHash(header.ParentHash) + if header == nil { + break + } + rlpData, _ := rlp.EncodeToBytes(header) + headers = append(headers, rlpData) + } + return headers + } +} + +func handleGetBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { + // Decode the block body retrieval message + var query GetBlockBodiesPacket66 + if err := msg.Decode(&query); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + response := ServiceGetBlockBodiesQuery(backend.Chain(), query.GetBlockBodiesPacket) + return peer.ReplyBlockBodiesRLP(query.RequestId, response) +} + +// ServiceGetBlockBodiesQuery assembles the response to a body query. It is +// exposed to allow external packages to test protocol behavior. +func ServiceGetBlockBodiesQuery(chain *core.BlockChain, query GetBlockBodiesPacket) []rlp.RawValue { + // Gather blocks until the fetch or network limits is reached + var ( + bytes int + bodies []rlp.RawValue + ) + for lookups, hash := range query { + if bytes >= softResponseLimit || len(bodies) >= maxBodiesServe || + lookups >= 2*maxBodiesServe { + break + } + if data := chain.GetBodyRLP(hash); len(data) != 0 { + bodies = append(bodies, data) + bytes += len(data) + } + } + return bodies +} + +func handleGetNodeData66(backend Backend, msg Decoder, peer *Peer) error { + // Decode the trie node data retrieval message + var query GetNodeDataPacket66 + if err := msg.Decode(&query); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + response := ServiceGetNodeDataQuery(backend.Chain(), query.GetNodeDataPacket) + return peer.ReplyNodeData(query.RequestId, response) +} + +// ServiceGetNodeDataQuery assembles the response to a node data query. It is +// exposed to allow external packages to test protocol behavior. +func ServiceGetNodeDataQuery(chain *core.BlockChain, query GetNodeDataPacket) [][]byte { + // Gather state data until the fetch or network limits is reached + var ( + bytes int + nodes [][]byte + ) + for lookups, hash := range query { + if bytes >= softResponseLimit || len(nodes) >= maxNodeDataServe || + lookups >= 2*maxNodeDataServe { + break + } + // Retrieve the requested state entry + entry, err := chain.TrieNode(hash) + if len(entry) == 0 || err != nil { + // Read the contract code with prefix only to save unnecessary lookups. + entry, err = chain.ContractCodeWithPrefix(hash) + } + if err == nil && len(entry) > 0 { + nodes = append(nodes, entry) + bytes += len(entry) + } + } + return nodes +} + +func handleGetReceipts66(backend Backend, msg Decoder, peer *Peer) error { + // Decode the block receipts retrieval message + var query GetReceiptsPacket66 + if err := msg.Decode(&query); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + response := ServiceGetReceiptsQuery(backend.Chain(), query.GetReceiptsPacket) + return peer.ReplyReceiptsRLP(query.RequestId, response) +} + +// ServiceGetReceiptsQuery assembles the response to a receipt query. It is +// exposed to allow external packages to test protocol behavior. +func ServiceGetReceiptsQuery(chain *core.BlockChain, query GetReceiptsPacket) []rlp.RawValue { + // Gather state data until the fetch or network limits is reached + var ( + bytes int + receipts []rlp.RawValue + ) + for lookups, hash := range query { + if bytes >= softResponseLimit || len(receipts) >= maxReceiptsServe || + lookups >= 2*maxReceiptsServe { + break + } + // Retrieve the requested block's receipts + results := chain.GetReceiptsByHash(hash) + if results == nil { + if header := chain.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) + } + } + return receipts +} + +func handleNewBlockhashes(backend Backend, msg Decoder, peer *Peer) error { + // A batch of new block announcements just arrived + ann := new(NewBlockHashesPacket) + if err := msg.Decode(ann); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Mark the hashes as present at the remote node + for _, block := range *ann { + peer.markBlock(block.Hash) + } + // Deliver them all to the backend for queuing + return backend.Handle(peer, ann) +} + +func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error { + // Retrieve and decode the propagated block + ann := new(NewBlockPacket) + if err := msg.Decode(ann); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + if err := ann.sanityCheck(); err != nil { + return err + } + if hash := types.CalcUncleHash(ann.Block.Uncles()); hash != ann.Block.UncleHash() { + log.Warn("Propagated block has invalid uncles", "have", hash, "exp", ann.Block.UncleHash()) + return nil // TODO(karalabe): return error eventually, but wait a few releases + } + if hash := types.DeriveSha(ann.Block.Transactions(), trie.NewStackTrie(nil)); hash != ann.Block.TxHash() { + log.Warn("Propagated block has invalid body", "have", hash, "exp", ann.Block.TxHash()) + return nil // TODO(karalabe): return error eventually, but wait a few releases + } + ann.Block.ReceivedAt = msg.Time() + ann.Block.ReceivedFrom = peer + + // Mark the peer as owning the block + peer.markBlock(ann.Block.Hash()) + + return backend.Handle(peer, ann) +} + +func handleBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { + // A batch of headers arrived to one of our previous requests + res := new(BlockHeadersPacket66) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + metadata := func() interface{} { + hashes := make([]common.Hash, len(res.BlockHeadersPacket)) + for i, header := range res.BlockHeadersPacket { + hashes[i] = header.Hash() + } + return hashes + } + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: BlockHeadersMsg, + Res: &res.BlockHeadersPacket, + }, metadata) +} + +func handleBlockBodies66(backend Backend, msg Decoder, peer *Peer) error { + // A batch of block bodies arrived to one of our previous requests + res := new(BlockBodiesPacket66) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + metadata := func() interface{} { + var ( + txsHashes = make([]common.Hash, len(res.BlockBodiesPacket)) + uncleHashes = make([]common.Hash, len(res.BlockBodiesPacket)) + ) + hasher := trie.NewStackTrie(nil) + for i, body := range res.BlockBodiesPacket { + txsHashes[i] = types.DeriveSha(types.Transactions(body.Transactions), hasher) + uncleHashes[i] = types.CalcUncleHash(body.Uncles) + } + return [][]common.Hash{txsHashes, uncleHashes} + } + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: BlockBodiesMsg, + Res: &res.BlockBodiesPacket, + }, metadata) +} + +func handleNodeData66(backend Backend, msg Decoder, peer *Peer) error { + // A batch of node state data arrived to one of our previous requests + res := new(NodeDataPacket66) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: NodeDataMsg, + Res: &res.NodeDataPacket, + }, nil) // No post-processing, we're not using this packet anymore +} + +func handleReceipts66(backend Backend, msg Decoder, peer *Peer) error { + // A batch of receipts arrived to one of our previous requests + res := new(ReceiptsPacket66) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + metadata := func() interface{} { + hasher := trie.NewStackTrie(nil) + hashes := make([]common.Hash, len(res.ReceiptsPacket)) + for i, receipt := range res.ReceiptsPacket { + hashes[i] = types.DeriveSha(types.Receipts(receipt), hasher) + } + return hashes + } + return peer.dispatchResponse(&Response{ + id: res.RequestId, + code: ReceiptsMsg, + Res: &res.ReceiptsPacket, + }, metadata) +} + +func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer) error { + // New transaction announcement arrived, make sure we have + // a valid and fresh chain to handle them + if !backend.AcceptTxs() { + return nil + } + ann := new(NewPooledTransactionHashesPacket) + if err := msg.Decode(ann); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Schedule all the unknown hashes for retrieval + for _, hash := range *ann { + peer.markTransaction(hash) + } + return backend.Handle(peer, ann) +} + +func handleGetPooledTransactions66(backend Backend, msg Decoder, peer *Peer) error { + // Decode the pooled transactions retrieval message + var query GetPooledTransactionsPacket66 + if err := msg.Decode(&query); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + hashes, txs := answerGetPooledTransactions(backend, query.GetPooledTransactionsPacket, peer) + return peer.ReplyPooledTransactionsRLP(query.RequestId, hashes, txs) +} + +func answerGetPooledTransactions(backend Backend, query GetPooledTransactionsPacket, peer *Peer) ([]common.Hash, []rlp.RawValue) { + // Gather transactions until the fetch or network limits is reached + var ( + bytes int + hashes []common.Hash + txs []rlp.RawValue + ) + for _, hash := range query { + if bytes >= softResponseLimit { + break + } + // Retrieve the requested transaction, skipping if unknown to us + tx := backend.TxPool().Get(hash) + if tx == nil { + continue + } + // If known, encode and queue for response packet + if encoded, err := rlp.EncodeToBytes(tx); err != nil { + log.Error("Failed to encode transaction", "err", err) + } else { + hashes = append(hashes, hash) + txs = append(txs, encoded) + bytes += len(encoded) + } + } + return hashes, txs +} + +func handleTransactions(backend Backend, msg Decoder, peer *Peer) error { + // Transactions arrived, make sure we have a valid and fresh chain to handle them + if !backend.AcceptTxs() { + return nil + } + // Transactions can be processed, parse all of them and deliver to the pool + var txs TransactionsPacket + if err := msg.Decode(&txs); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + for i, tx := range txs { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) + } + peer.markTransaction(tx.Hash()) + } + return backend.Handle(peer, &txs) +} + +func handlePooledTransactions66(backend Backend, msg Decoder, peer *Peer) error { + // Transactions arrived, make sure we have a valid and fresh chain to handle them + if !backend.AcceptTxs() { + return nil + } + // Transactions can be processed, parse all of them and deliver to the pool + var txs PooledTransactionsPacket66 + if err := msg.Decode(&txs); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + for i, tx := range txs.PooledTransactionsPacket { + // Validate and mark the remote transaction + if tx == nil { + return fmt.Errorf("%w: transaction %d is nil", errDecode, i) + } + peer.markTransaction(tx.Hash()) + } + requestTracker.Fulfil(peer.id, peer.version, PooledTransactionsMsg, txs.RequestId) + + return backend.Handle(peer, &txs.PooledTransactionsPacket) +} diff --git a/eth/protocols/eth/handshake.go b/eth/protocols/eth/handshake.go new file mode 100644 index 00000000..9a2769fa --- /dev/null +++ b/eth/protocols/eth/handshake.go @@ -0,0 +1,107 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/p2p" +) + +const ( + // handshakeTimeout is the maximum allowed time for the `eth` handshake to + // complete before dropping the connection.= as malicious. + handshakeTimeout = 5 * time.Second +) + +// Handshake executes the eth protocol handshake, negotiating version number, +// network IDs, difficulties, head and genesis blocks. +func (p *Peer) Handshake(network uint64, td *big.Int, head common.Hash, genesis common.Hash, forkID forkid.ID, forkFilter forkid.Filter) error { + // Send out own handshake in a new thread + errc := make(chan error, 2) + + var status StatusPacket // safe to read after two values have been received from errc + + go func() { + errc <- p2p.Send(p.rw, StatusMsg, &StatusPacket{ + ProtocolVersion: uint32(p.version), + NetworkID: network, + TD: td, + Head: head, + Genesis: genesis, + ForkID: forkID, + }) + }() + go func() { + errc <- p.readStatus(network, &status, genesis, forkFilter) + }() + timeout := time.NewTimer(handshakeTimeout) + defer timeout.Stop() + for i := 0; i < 2; i++ { + select { + case err := <-errc: + if err != nil { + return err + } + case <-timeout.C: + return p2p.DiscReadTimeout + } + } + p.td, p.head = status.TD, status.Head + + // TD at mainnet block #7753254 is 76 bits. If it becomes 100 million times + // larger, it will still fit within 100 bits + if tdlen := p.td.BitLen(); tdlen > 100 { + return fmt.Errorf("too large total difficulty: bitlen %d", tdlen) + } + return nil +} + +// readStatus reads the remote handshake message. +func (p *Peer) readStatus(network uint64, status *StatusPacket, genesis common.Hash, forkFilter forkid.Filter) error { + msg, err := p.rw.ReadMsg() + if err != nil { + return err + } + if msg.Code != StatusMsg { + return fmt.Errorf("%w: first msg has code %x (!= %x)", errNoStatusMsg, msg.Code, StatusMsg) + } + if msg.Size > maxMessageSize { + return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) + } + // Decode the handshake and make sure everything matches + if err := msg.Decode(&status); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + if status.NetworkID != network { + return fmt.Errorf("%w: %d (!= %d)", errNetworkIDMismatch, status.NetworkID, network) + } + if uint(status.ProtocolVersion) != p.version { + return fmt.Errorf("%w: %d (!= %d)", errProtocolVersionMismatch, status.ProtocolVersion, p.version) + } + if status.Genesis != genesis { + return fmt.Errorf("%w: %x (!= %x)", errGenesisMismatch, status.Genesis, genesis) + } + if err := forkFilter(status.ForkID); err != nil { + return fmt.Errorf("%w: %v", errForkIDRejected, err) + } + return nil +} diff --git a/eth/protocols/eth/handshake_test.go b/eth/protocols/eth/handshake_test.go new file mode 100644 index 00000000..8cf5216c --- /dev/null +++ b/eth/protocols/eth/handshake_test.go @@ -0,0 +1,90 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// Tests that handshake failures are detected and reported correctly. +func TestHandshake66(t *testing.T) { testHandshake(t, ETH66) } + +func testHandshake(t *testing.T, protocol uint) { + t.Parallel() + + // Create a test backend only to have some valid genesis chain + backend := newTestBackend(3) + defer backend.close() + + var ( + genesis = backend.chain.Genesis() + head = backend.chain.CurrentBlock() + td = backend.chain.GetTd(head.Hash(), head.NumberU64()) + forkID = forkid.NewID(backend.chain.Config(), backend.chain.Genesis().Hash(), backend.chain.CurrentHeader().Number.Uint64()) + ) + tests := []struct { + code uint64 + data interface{} + want error + }{ + { + code: TransactionsMsg, data: []interface{}{}, + want: errNoStatusMsg, + }, + { + code: StatusMsg, data: StatusPacket{10, 1, td, head.Hash(), genesis.Hash(), forkID}, + want: errProtocolVersionMismatch, + }, + { + code: StatusMsg, data: StatusPacket{uint32(protocol), 999, td, head.Hash(), genesis.Hash(), forkID}, + want: errNetworkIDMismatch, + }, + { + code: StatusMsg, data: StatusPacket{uint32(protocol), 1, td, head.Hash(), common.Hash{3}, forkID}, + want: errGenesisMismatch, + }, + { + code: StatusMsg, data: StatusPacket{uint32(protocol), 1, td, head.Hash(), genesis.Hash(), forkid.ID{Hash: [4]byte{0x00, 0x01, 0x02, 0x03}}}, + want: errForkIDRejected, + }, + } + for i, test := range tests { + // Create the two peers to shake with each other + app, net := p2p.MsgPipe() + defer app.Close() + defer net.Close() + + peer := NewPeer(protocol, p2p.NewPeer(enode.ID{}, "peer", nil), net, nil) + defer peer.Close() + + // Send the junk test with one peer, check the handshake failure + go p2p.Send(app, test.code, test.data) + + err := peer.Handshake(1, td, head.Hash(), genesis.Hash(), forkID, forkid.NewFilter(backend.chain)) + if err == nil { + t.Errorf("test %d: protocol returned nil error, want %q", i, test.want) + } else if !errors.Is(err, test.want) { + t.Errorf("test %d: wrong error: got %q, want %q", i, err, test.want) + } + } +} diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go new file mode 100644 index 00000000..a2372638 --- /dev/null +++ b/eth/protocols/eth/peer.go @@ -0,0 +1,522 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/big" + "math/rand" + "sync" + + mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + // maxKnownTxs is the maximum transactions hashes to keep in the known list + // before starting to randomly evict them. + maxKnownTxs = 32768 + + // maxKnownBlocks is the maximum block hashes to keep in the known list + // before starting to randomly evict them. + maxKnownBlocks = 1024 + + // maxQueuedTxs is the maximum number of transactions to queue up before dropping + // older broadcasts. + maxQueuedTxs = 4096 + + // maxQueuedTxAnns is the maximum number of transaction announcements to queue up + // before dropping older announcements. + maxQueuedTxAnns = 4096 + + // maxQueuedBlocks is the maximum number of block propagations to queue up before + // dropping broadcasts. There's not much point in queueing stale blocks, so a few + // that might cover uncles should be enough. + maxQueuedBlocks = 4 + + // maxQueuedBlockAnns is the maximum number of block announcements to queue up before + // dropping broadcasts. Similarly to block propagations, there's no point to queue + // above some healthy uncle limit, so use that. + maxQueuedBlockAnns = 4 +) + +// max is a helper function which returns the larger of the two given integers. +func max(a, b int) int { + if a > b { + return a + } + return b +} + +// Peer is a collection of relevant information we have about a `eth` peer. +type Peer struct { + id string // Unique ID for the peer, cached + + *p2p.Peer // The embedded P2P package peer + rw p2p.MsgReadWriter // Input/output streams for snap + version uint // Protocol version negotiated + + head common.Hash // Latest advertised head block hash + td *big.Int // Latest advertised head block total difficulty + + knownBlocks *knownCache // Set of block hashes known to be known by this peer + queuedBlocks chan *blockPropagation // Queue of blocks to broadcast to the peer + queuedBlockAnns chan *types.Block // Queue of blocks to announce to the peer + + txpool TxPool // Transaction pool used by the broadcasters for liveness checks + knownTxs *knownCache // Set of transaction hashes known to be known by this peer + txBroadcast chan []common.Hash // Channel used to queue transaction propagation requests + txAnnounce chan []common.Hash // Channel used to queue transaction announcement requests + + reqDispatch chan *request // Dispatch channel to send requests and track then until fulfilment + reqCancel chan *cancel // Dispatch channel to cancel pending requests and untrack them + resDispatch chan *response // Dispatch channel to fulfil pending requests and untrack them + + term chan struct{} // Termination channel to stop the broadcasters + lock sync.RWMutex // Mutex protecting the internal fields +} + +// NewPeer create a wrapper for a network connection and negotiated protocol +// version. +func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool) *Peer { + peer := &Peer{ + id: p.ID().String(), + Peer: p, + rw: rw, + version: version, + knownTxs: newKnownCache(maxKnownTxs), + knownBlocks: newKnownCache(maxKnownBlocks), + queuedBlocks: make(chan *blockPropagation, maxQueuedBlocks), + queuedBlockAnns: make(chan *types.Block, maxQueuedBlockAnns), + txBroadcast: make(chan []common.Hash), + txAnnounce: make(chan []common.Hash), + reqDispatch: make(chan *request), + reqCancel: make(chan *cancel), + resDispatch: make(chan *response), + txpool: txpool, + term: make(chan struct{}), + } + // Start up all the broadcasters + go peer.broadcastBlocks() + go peer.broadcastTransactions() + go peer.announceTransactions() + go peer.dispatcher() + + return peer +} + +// Close signals the broadcast goroutine to terminate. Only ever call this if +// you created the peer yourself via NewPeer. Otherwise let whoever created it +// clean it up! +func (p *Peer) Close() { + close(p.term) +} + +// ID retrieves the peer's unique identifier. +func (p *Peer) ID() string { + return p.id +} + +// Version retrieves the peer's negotiated `eth` protocol version. +func (p *Peer) Version() uint { + return p.version +} + +// Head retrieves the current head hash and total difficulty of the peer. +func (p *Peer) Head() (hash common.Hash, td *big.Int) { + p.lock.RLock() + defer p.lock.RUnlock() + + copy(hash[:], p.head[:]) + return hash, new(big.Int).Set(p.td) +} + +// SetHead updates the head hash and total difficulty of the peer. +func (p *Peer) SetHead(hash common.Hash, td *big.Int) { + p.lock.Lock() + defer p.lock.Unlock() + + copy(p.head[:], hash[:]) + p.td.Set(td) +} + +// KnownBlock returns whether peer is known to already have a block. +func (p *Peer) KnownBlock(hash common.Hash) bool { + return p.knownBlocks.Contains(hash) +} + +// KnownTransaction returns whether peer is known to already have a transaction. +func (p *Peer) KnownTransaction(hash common.Hash) bool { + return p.knownTxs.Contains(hash) +} + +// markBlock marks a block as known for the peer, ensuring that the block will +// never be propagated to this particular peer. +func (p *Peer) markBlock(hash common.Hash) { + // If we reached the memory allowance, drop a previously known block hash + p.knownBlocks.Add(hash) +} + +// markTransaction marks a transaction as known for the peer, ensuring that it +// will never be propagated to this particular peer. +func (p *Peer) markTransaction(hash common.Hash) { + // If we reached the memory allowance, drop a previously known transaction hash + p.knownTxs.Add(hash) +} + +// SendTransactions sends transactions to the peer and includes the hashes +// in its transaction hash set for future reference. +// +// This method is a helper used by the async transaction sender. Don't call it +// directly as the queueing (memory) and transmission (bandwidth) costs should +// not be managed directly. +// +// The reasons this is public is to allow packages using this protocol to write +// tests that directly send messages without having to do the asyn queueing. +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.Add(tx.Hash()) + } + return p2p.Send(p.rw, TransactionsMsg, txs) +} + +// AsyncSendTransactions queues a list of transactions (by hash) to eventually +// propagate to a remote peer. The number of pending sends are capped (new ones +// will force old sends to be dropped) +func (p *Peer) AsyncSendTransactions(hashes []common.Hash) { + select { + case p.txBroadcast <- hashes: + // Mark all the transactions as known, but ensure we don't overflow our limits + p.knownTxs.Add(hashes...) + case <-p.term: + p.Log().Debug("Dropping transaction propagation", "count", len(hashes)) + } +} + +// sendPooledTransactionHashes sends transaction hashes to the peer and includes +// them in its transaction hash set for future reference. +// +// This method is a helper used by the async transaction announcer. Don't call it +// directly as the queueing (memory) and transmission (bandwidth) costs should +// not be managed directly. +func (p *Peer) sendPooledTransactionHashes(hashes []common.Hash) error { + // Mark all the transactions as known, but ensure we don't overflow our limits + p.knownTxs.Add(hashes...) + return p2p.Send(p.rw, NewPooledTransactionHashesMsg, NewPooledTransactionHashesPacket(hashes)) +} + +// AsyncSendPooledTransactionHashes queues a list of transactions hashes to eventually +// announce to a remote peer. The number of pending sends are capped (new ones +// will force old sends to be dropped) +func (p *Peer) AsyncSendPooledTransactionHashes(hashes []common.Hash) { + select { + case p.txAnnounce <- hashes: + // Mark all the transactions as known, but ensure we don't overflow our limits + p.knownTxs.Add(hashes...) + case <-p.term: + p.Log().Debug("Dropping transaction announcement", "count", len(hashes)) + } +} + +// ReplyPooledTransactionsRLP is the eth/66 version of SendPooledTransactionsRLP. +func (p *Peer) ReplyPooledTransactionsRLP(id uint64, hashes []common.Hash, txs []rlp.RawValue) error { + // Mark all the transactions as known, but ensure we don't overflow our limits + p.knownTxs.Add(hashes...) + + // Not packed into PooledTransactionsPacket to avoid RLP decoding + return p2p.Send(p.rw, PooledTransactionsMsg, &PooledTransactionsRLPPacket66{ + RequestId: id, + PooledTransactionsRLPPacket: txs, + }) +} + +// 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 + p.knownBlocks.Add(hashes...) + + request := make(NewBlockHashesPacket, len(hashes)) + for i := 0; i < len(hashes); i++ { + request[i].Hash = hashes[i] + request[i].Number = numbers[i] + } + return p2p.Send(p.rw, NewBlockHashesMsg, request) +} + +// AsyncSendNewBlockHash queues the availability of a block for propagation to a +// remote peer. If the peer's broadcast queue is full, the event is silently +// dropped. +func (p *Peer) AsyncSendNewBlockHash(block *types.Block) { + select { + case p.queuedBlockAnns <- block: + // Mark all the block hash as known, but ensure we don't overflow our limits + p.knownBlocks.Add(block.Hash()) + default: + p.Log().Debug("Dropping block announcement", "number", block.NumberU64(), "hash", block.Hash()) + } +} + +// 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.Add(block.Hash()) + return p2p.Send(p.rw, NewBlockMsg, &NewBlockPacket{ + Block: block, + TD: td, + }) +} + +// AsyncSendNewBlock queues an entire block for propagation to a remote peer. If +// the peer's broadcast queue is full, the event is silently dropped. +func (p *Peer) AsyncSendNewBlock(block *types.Block, td *big.Int) { + select { + case p.queuedBlocks <- &blockPropagation{block: block, td: td}: + // Mark all the block hash as known, but ensure we don't overflow our limits + p.knownBlocks.Add(block.Hash()) + default: + p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash()) + } +} + +// ReplyBlockHeadersRLP is the eth/66 response to GetBlockHeaders. +func (p *Peer) ReplyBlockHeadersRLP(id uint64, headers []rlp.RawValue) error { + return p2p.Send(p.rw, BlockHeadersMsg, &BlockHeadersRLPPacket66{ + RequestId: id, + BlockHeadersRLPPacket: headers, + }) +} + +// ReplyBlockBodiesRLP is the eth/66 response to GetBlockBodies. +func (p *Peer) ReplyBlockBodiesRLP(id uint64, bodies []rlp.RawValue) error { + // Not packed into BlockBodiesPacket to avoid RLP decoding + return p2p.Send(p.rw, BlockBodiesMsg, &BlockBodiesRLPPacket66{ + RequestId: id, + BlockBodiesRLPPacket: bodies, + }) +} + +// ReplyNodeData is the eth/66 response to GetNodeData. +func (p *Peer) ReplyNodeData(id uint64, data [][]byte) error { + return p2p.Send(p.rw, NodeDataMsg, &NodeDataPacket66{ + RequestId: id, + NodeDataPacket: data, + }) +} + +// ReplyReceiptsRLP is the eth/66 response to GetReceipts. +func (p *Peer) ReplyReceiptsRLP(id uint64, receipts []rlp.RawValue) error { + return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsRLPPacket66{ + RequestId: id, + ReceiptsRLPPacket: receipts, + }) +} + +// RequestOneHeader is a wrapper around the header query functions to fetch a +// single header. It is used solely by the fetcher. +func (p *Peer) RequestOneHeader(hash common.Hash, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching single header", "hash", hash) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + data: &GetBlockHeadersPacket66{ + RequestId: id, + GetBlockHeadersPacket: &GetBlockHeadersPacket{ + Origin: HashOrNumber{Hash: hash}, + Amount: uint64(1), + Skip: uint64(0), + Reverse: false, + }, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestHeadersByHash fetches a batch of blocks' headers corresponding to the +// specified header query, based on the hash of an origin block. +func (p *Peer) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching batch of headers", "count", amount, "fromhash", origin, "skip", skip, "reverse", reverse) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + data: &GetBlockHeadersPacket66{ + RequestId: id, + GetBlockHeadersPacket: &GetBlockHeadersPacket{ + Origin: HashOrNumber{Hash: origin}, + Amount: uint64(amount), + Skip: uint64(skip), + Reverse: reverse, + }, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestHeadersByNumber fetches a batch of blocks' headers corresponding to the +// specified header query, based on the number of an origin block. +func (p *Peer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching batch of headers", "count", amount, "fromnum", origin, "skip", skip, "reverse", reverse) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + data: &GetBlockHeadersPacket66{ + RequestId: id, + GetBlockHeadersPacket: &GetBlockHeadersPacket{ + Origin: HashOrNumber{Number: origin}, + Amount: uint64(amount), + Skip: uint64(skip), + Reverse: reverse, + }, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestBodies fetches a batch of blocks' bodies corresponding to the hashes +// specified. +func (p *Peer) RequestBodies(hashes []common.Hash, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching batch of block bodies", "count", len(hashes)) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetBlockBodiesMsg, + want: BlockBodiesMsg, + data: &GetBlockBodiesPacket66{ + RequestId: id, + GetBlockBodiesPacket: hashes, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestNodeData fetches a batch of arbitrary data from a node's known state +// data, corresponding to the specified hashes. +func (p *Peer) RequestNodeData(hashes []common.Hash, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching batch of state data", "count", len(hashes)) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetNodeDataMsg, + want: NodeDataMsg, + data: &GetNodeDataPacket66{ + RequestId: id, + GetNodeDataPacket: hashes, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestReceipts fetches a batch of transaction receipts from a remote node. +func (p *Peer) RequestReceipts(hashes []common.Hash, sink chan *Response) (*Request, error) { + p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) + id := rand.Uint64() + + req := &Request{ + id: id, + sink: sink, + code: GetReceiptsMsg, + want: ReceiptsMsg, + data: &GetReceiptsPacket66{ + RequestId: id, + GetReceiptsPacket: hashes, + }, + } + if err := p.dispatchRequest(req); err != nil { + return nil, err + } + return req, nil +} + +// RequestTxs fetches a batch of transactions from a remote node. +func (p *Peer) RequestTxs(hashes []common.Hash) error { + p.Log().Debug("Fetching batch of transactions", "count", len(hashes)) + id := rand.Uint64() + + requestTracker.Track(p.id, p.version, GetPooledTransactionsMsg, PooledTransactionsMsg, id) + return p2p.Send(p.rw, GetPooledTransactionsMsg, &GetPooledTransactionsPacket66{ + RequestId: id, + GetPooledTransactionsPacket: hashes, + }) +} + +// knownCache is a cache for known hashes. +type knownCache struct { + hashes mapset.Set + max int +} + +// newKnownCache creates a new knownCache with a max capacity. +func newKnownCache(max int) *knownCache { + return &knownCache{ + max: max, + hashes: mapset.NewSet(), + } +} + +// Add adds a list of elements to the set. +func (k *knownCache) Add(hashes ...common.Hash) { + for k.hashes.Cardinality() > max(0, k.max-len(hashes)) { + k.hashes.Pop() + } + for _, hash := range hashes { + k.hashes.Add(hash) + } +} + +// Contains returns whether the given item is in the set. +func (k *knownCache) Contains(hash common.Hash) bool { + return k.hashes.Contains(hash) +} + +// Cardinality returns the number of elements in the set. +func (k *knownCache) Cardinality() int { + return k.hashes.Cardinality() +} diff --git a/eth/protocols/eth/peer_test.go b/eth/protocols/eth/peer_test.go new file mode 100644 index 00000000..0916ebee --- /dev/null +++ b/eth/protocols/eth/peer_test.go @@ -0,0 +1,88 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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 eth + +import ( + "crypto/rand" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// testPeer is a simulated peer to allow testing direct network calls. +type testPeer struct { + *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 data backend. +func newTestPeer(name string, version uint, backend Backend) (*testPeer, <-chan error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() + + // Start the peer on a new thread + var id enode.ID + rand.Read(id[:]) + + peer := NewPeer(version, p2p.NewPeer(id, name, nil), net, backend.TxPool()) + errc := make(chan error, 1) + go func() { + errc <- backend.RunPeer(peer, func(peer *Peer) error { + return Handle(backend, peer) + }) + }() + return &testPeer{app: app, net: net, Peer: peer}, errc +} + +// close terminates the local side of the peer, notifying the remote protocol +// manager of termination. +func (p *testPeer) close() { + p.Peer.Close() + p.app.Close() +} + +func TestPeerSet(t *testing.T) { + size := 5 + s := newKnownCache(size) + + // add 10 items + for i := 0; i < size*2; i++ { + s.Add(common.Hash{byte(i)}) + } + + if s.Cardinality() != size { + t.Fatalf("wrong size, expected %d but found %d", size, s.Cardinality()) + } + + vals := []common.Hash{} + for i := 10; i < 20; i++ { + vals = append(vals, common.Hash{byte(i)}) + } + + // add item in batch + s.Add(vals...) + if s.Cardinality() < size { + t.Fatalf("bad size") + } +} diff --git a/eth/protocols/eth/protocol.go b/eth/protocols/eth/protocol.go new file mode 100644 index 00000000..f6fac427 --- /dev/null +++ b/eth/protocols/eth/protocol.go @@ -0,0 +1,374 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "fmt" + "io" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +// Constants to match up protocol versions and messages +const ( + ETH66 = 66 + ETH67 = 67 +) + +// ProtocolName is the official short name of the `eth` protocol used during +// devp2p capability negotiation. +const ProtocolName = "eth" + +// ProtocolVersions are the supported versions of the `eth` protocol (first +// is primary). +var ProtocolVersions = []uint{ETH67, ETH66} + +// protocolLengths are the number of implemented message corresponding to +// different protocol versions. +var protocolLengths = map[uint]uint64{ETH67: 17, ETH66: 17} + +// maxMessageSize is the maximum cap on the size of a protocol message. +const maxMessageSize = 10 * 1024 * 1024 + +const ( + StatusMsg = 0x00 + NewBlockHashesMsg = 0x01 + TransactionsMsg = 0x02 + GetBlockHeadersMsg = 0x03 + BlockHeadersMsg = 0x04 + GetBlockBodiesMsg = 0x05 + BlockBodiesMsg = 0x06 + NewBlockMsg = 0x07 + GetNodeDataMsg = 0x0d + NodeDataMsg = 0x0e + GetReceiptsMsg = 0x0f + ReceiptsMsg = 0x10 + NewPooledTransactionHashesMsg = 0x08 + GetPooledTransactionsMsg = 0x09 + PooledTransactionsMsg = 0x0a +) + +var ( + errNoStatusMsg = errors.New("no status message") + errMsgTooLarge = errors.New("message too long") + errDecode = errors.New("invalid message") + errInvalidMsgCode = errors.New("invalid message code") + errProtocolVersionMismatch = errors.New("protocol version mismatch") + errNetworkIDMismatch = errors.New("network ID mismatch") + errGenesisMismatch = errors.New("genesis mismatch") + errForkIDRejected = errors.New("fork ID rejected") +) + +// Packet represents a p2p message in the `eth` protocol. +type Packet interface { + Name() string // Name returns a string corresponding to the message type. + Kind() byte // Kind returns the message type. +} + +// StatusPacket is the network packet for the status message for eth/64 and later. +type StatusPacket struct { + ProtocolVersion uint32 + NetworkID uint64 + TD *big.Int + Head common.Hash + Genesis common.Hash + ForkID forkid.ID +} + +// NewBlockHashesPacket is the network packet for the block announcements. +type NewBlockHashesPacket []struct { + Hash common.Hash // Hash of one particular block being announced + Number uint64 // Number of one particular block being announced +} + +// Unpack retrieves the block hashes and numbers from the announcement packet +// and returns them in a split flat format that's more consistent with the +// internal data structures. +func (p *NewBlockHashesPacket) Unpack() ([]common.Hash, []uint64) { + var ( + hashes = make([]common.Hash, len(*p)) + numbers = make([]uint64, len(*p)) + ) + for i, body := range *p { + hashes[i], numbers[i] = body.Hash, body.Number + } + return hashes, numbers +} + +// TransactionsPacket is the network packet for broadcasting new transactions. +type TransactionsPacket []*types.Transaction + +// GetBlockHeadersPacket represents a block header query. +type GetBlockHeadersPacket struct { + Origin HashOrNumber // Block from which to retrieve headers + Amount uint64 // Maximum number of headers to retrieve + Skip uint64 // Blocks to skip between consecutive headers + Reverse bool // Query direction (false = rising towards latest, true = falling towards genesis) +} + +// GetBlockHeadersPacket66 represents a block header query over eth/66 +type GetBlockHeadersPacket66 struct { + RequestId uint64 + *GetBlockHeadersPacket +} + +// HashOrNumber is a combined field for specifying an origin block. +type HashOrNumber struct { + Hash common.Hash // Block hash from which to retrieve headers (excludes Number) + Number uint64 // Block hash from which to retrieve headers (excludes Hash) +} + +// EncodeRLP is a specialized encoder for HashOrNumber to encode only one of the +// two contained union fields. +func (hn *HashOrNumber) EncodeRLP(w io.Writer) error { + if hn.Hash == (common.Hash{}) { + return rlp.Encode(w, hn.Number) + } + if hn.Number != 0 { + return fmt.Errorf("both origin hash (%x) and number (%d) provided", hn.Hash, hn.Number) + } + return rlp.Encode(w, hn.Hash) +} + +// DecodeRLP is a specialized decoder for HashOrNumber to decode the contents +// into either a block hash or a block number. +func (hn *HashOrNumber) DecodeRLP(s *rlp.Stream) error { + _, size, err := s.Kind() + switch { + case err != nil: + return err + case size == 32: + hn.Number = 0 + return s.Decode(&hn.Hash) + case size <= 8: + hn.Hash = common.Hash{} + return s.Decode(&hn.Number) + default: + return fmt.Errorf("invalid input size %d for origin", size) + } +} + +// BlockHeadersPacket represents a block header response. +type BlockHeadersPacket []*types.Header + +// BlockHeadersPacket66 represents a block header response over eth/66. +type BlockHeadersPacket66 struct { + RequestId uint64 + BlockHeadersPacket +} + +// BlockHeadersRLPPacket represents a block header response, to use when we already +// have the headers rlp encoded. +type BlockHeadersRLPPacket []rlp.RawValue + +// BlockHeadersRLPPacket66 represents a block header response over eth/66. +type BlockHeadersRLPPacket66 struct { + RequestId uint64 + BlockHeadersRLPPacket +} + +// NewBlockPacket is the network packet for the block propagation message. +type NewBlockPacket struct { + Block *types.Block + TD *big.Int +} + +// sanityCheck verifies that the values are reasonable, as a DoS protection +func (request *NewBlockPacket) 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 +} + +// GetBlockBodiesPacket represents a block body query. +type GetBlockBodiesPacket []common.Hash + +// GetBlockBodiesPacket66 represents a block body query over eth/66. +type GetBlockBodiesPacket66 struct { + RequestId uint64 + GetBlockBodiesPacket +} + +// BlockBodiesPacket is the network packet for block content distribution. +type BlockBodiesPacket []*BlockBody + +// BlockBodiesPacket66 is the network packet for block content distribution over eth/66. +type BlockBodiesPacket66 struct { + RequestId uint64 + BlockBodiesPacket +} + +// BlockBodiesRLPPacket is used for replying to block body requests, in cases +// where we already have them RLP-encoded, and thus can avoid the decode-encode +// roundtrip. +type BlockBodiesRLPPacket []rlp.RawValue + +// BlockBodiesRLPPacket66 is the BlockBodiesRLPPacket over eth/66 +type BlockBodiesRLPPacket66 struct { + RequestId uint64 + BlockBodiesRLPPacket +} + +// BlockBody represents the data content of a single block. +type BlockBody struct { + Transactions []*types.Transaction // Transactions contained within a block + Uncles []*types.Header // Uncles contained within a block +} + +// Unpack retrieves the transactions and uncles from the range packet and returns +// them in a split flat format that's more consistent with the internal data structures. +func (p *BlockBodiesPacket) Unpack() ([][]*types.Transaction, [][]*types.Header) { + var ( + txset = make([][]*types.Transaction, len(*p)) + uncleset = make([][]*types.Header, len(*p)) + ) + for i, body := range *p { + txset[i], uncleset[i] = body.Transactions, body.Uncles + } + return txset, uncleset +} + +// GetNodeDataPacket represents a trie node data query. +type GetNodeDataPacket []common.Hash + +// GetNodeDataPacket66 represents a trie node data query over eth/66. +type GetNodeDataPacket66 struct { + RequestId uint64 + GetNodeDataPacket +} + +// NodeDataPacket is the network packet for trie node data distribution. +type NodeDataPacket [][]byte + +// NodeDataPacket66 is the network packet for trie node data distribution over eth/66. +type NodeDataPacket66 struct { + RequestId uint64 + NodeDataPacket +} + +// GetReceiptsPacket represents a block receipts query. +type GetReceiptsPacket []common.Hash + +// GetReceiptsPacket66 represents a block receipts query over eth/66. +type GetReceiptsPacket66 struct { + RequestId uint64 + GetReceiptsPacket +} + +// ReceiptsPacket is the network packet for block receipts distribution. +type ReceiptsPacket [][]*types.Receipt + +// ReceiptsPacket66 is the network packet for block receipts distribution over eth/66. +type ReceiptsPacket66 struct { + RequestId uint64 + ReceiptsPacket +} + +// ReceiptsRLPPacket is used for receipts, when we already have it encoded +type ReceiptsRLPPacket []rlp.RawValue + +// ReceiptsRLPPacket66 is the eth-66 version of ReceiptsRLPPacket +type ReceiptsRLPPacket66 struct { + RequestId uint64 + ReceiptsRLPPacket +} + +// NewPooledTransactionHashesPacket represents a transaction announcement packet. +type NewPooledTransactionHashesPacket []common.Hash + +// GetPooledTransactionsPacket represents a transaction query. +type GetPooledTransactionsPacket []common.Hash + +type GetPooledTransactionsPacket66 struct { + RequestId uint64 + GetPooledTransactionsPacket +} + +// PooledTransactionsPacket is the network packet for transaction distribution. +type PooledTransactionsPacket []*types.Transaction + +// PooledTransactionsPacket66 is the network packet for transaction distribution over eth/66. +type PooledTransactionsPacket66 struct { + RequestId uint64 + PooledTransactionsPacket +} + +// PooledTransactionsRLPPacket is the network packet for transaction distribution, used +// in the cases we already have them in rlp-encoded form +type PooledTransactionsRLPPacket []rlp.RawValue + +// PooledTransactionsRLPPacket66 is the eth/66 form of PooledTransactionsRLPPacket +type PooledTransactionsRLPPacket66 struct { + RequestId uint64 + PooledTransactionsRLPPacket +} + +func (*StatusPacket) Name() string { return "Status" } +func (*StatusPacket) Kind() byte { return StatusMsg } + +func (*NewBlockHashesPacket) Name() string { return "NewBlockHashes" } +func (*NewBlockHashesPacket) Kind() byte { return NewBlockHashesMsg } + +func (*TransactionsPacket) Name() string { return "Transactions" } +func (*TransactionsPacket) Kind() byte { return TransactionsMsg } + +func (*GetBlockHeadersPacket) Name() string { return "GetBlockHeaders" } +func (*GetBlockHeadersPacket) Kind() byte { return GetBlockHeadersMsg } + +func (*BlockHeadersPacket) Name() string { return "BlockHeaders" } +func (*BlockHeadersPacket) Kind() byte { return BlockHeadersMsg } + +func (*GetBlockBodiesPacket) Name() string { return "GetBlockBodies" } +func (*GetBlockBodiesPacket) Kind() byte { return GetBlockBodiesMsg } + +func (*BlockBodiesPacket) Name() string { return "BlockBodies" } +func (*BlockBodiesPacket) Kind() byte { return BlockBodiesMsg } + +func (*NewBlockPacket) Name() string { return "NewBlock" } +func (*NewBlockPacket) Kind() byte { return NewBlockMsg } + +func (*GetNodeDataPacket) Name() string { return "GetNodeData" } +func (*GetNodeDataPacket) Kind() byte { return GetNodeDataMsg } + +func (*NodeDataPacket) Name() string { return "NodeData" } +func (*NodeDataPacket) Kind() byte { return NodeDataMsg } + +func (*GetReceiptsPacket) Name() string { return "GetReceipts" } +func (*GetReceiptsPacket) Kind() byte { return GetReceiptsMsg } + +func (*ReceiptsPacket) Name() string { return "Receipts" } +func (*ReceiptsPacket) Kind() byte { return ReceiptsMsg } + +func (*NewPooledTransactionHashesPacket) Name() string { return "NewPooledTransactionHashes" } +func (*NewPooledTransactionHashesPacket) Kind() byte { return NewPooledTransactionHashesMsg } + +func (*GetPooledTransactionsPacket) Name() string { return "GetPooledTransactions" } +func (*GetPooledTransactionsPacket) Kind() byte { return GetPooledTransactionsMsg } + +func (*PooledTransactionsPacket) Name() string { return "PooledTransactions" } +func (*PooledTransactionsPacket) Kind() byte { return PooledTransactionsMsg } diff --git a/eth/protocols/eth/protocol_test.go b/eth/protocols/eth/protocol_test.go new file mode 100644 index 00000000..a86fbb0a --- /dev/null +++ b/eth/protocols/eth/protocol_test.go @@ -0,0 +1,266 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +// Tests that the custom union field encoder and decoder works correctly. +func TestGetBlockHeadersDataEncodeDecode(t *testing.T) { + // Create a "random" hash for testing + var hash common.Hash + for i := range hash { + hash[i] = byte(i) + } + // Assemble some table driven tests + tests := []struct { + packet *GetBlockHeadersPacket + fail bool + }{ + // Providing the origin as either a hash or a number should both work + {fail: false, packet: &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 314}}}, + {fail: false, packet: &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: hash}}}, + + // Providing arbitrary query field should also work + {fail: false, packet: &GetBlockHeadersPacket{Origin: HashOrNumber{Number: 314}, Amount: 314, Skip: 1, Reverse: true}}, + {fail: false, packet: &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: hash}, Amount: 314, Skip: 1, Reverse: true}}, + + // Providing both the origin hash and origin number must fail + {fail: true, packet: &GetBlockHeadersPacket{Origin: HashOrNumber{Hash: hash, Number: 314}}}, + } + // Iterate over each of the tests and try to encode and then decode + for i, tt := range tests { + bytes, err := rlp.EncodeToBytes(tt.packet) + if err != nil && !tt.fail { + t.Fatalf("test %d: failed to encode packet: %v", i, err) + } else if err == nil && tt.fail { + t.Fatalf("test %d: encode should have failed", i) + } + if !tt.fail { + packet := new(GetBlockHeadersPacket) + if err := rlp.DecodeBytes(bytes, packet); err != nil { + t.Fatalf("test %d: failed to decode packet: %v", i, err) + } + if packet.Origin.Hash != tt.packet.Origin.Hash || packet.Origin.Number != tt.packet.Origin.Number || packet.Amount != tt.packet.Amount || + packet.Skip != tt.packet.Skip || packet.Reverse != tt.packet.Reverse { + t.Fatalf("test %d: encode decode mismatch: have %+v, want %+v", i, packet, tt.packet) + } + } + } +} + +// TestEth66EmptyMessages tests encoding of empty eth66 messages +func TestEth66EmptyMessages(t *testing.T) { + // All empty messages encodes to the same format + want := common.FromHex("c4820457c0") + + for i, msg := range []interface{}{ + // Headers + GetBlockHeadersPacket66{1111, nil}, + BlockHeadersPacket66{1111, nil}, + // Bodies + GetBlockBodiesPacket66{1111, nil}, + BlockBodiesPacket66{1111, nil}, + BlockBodiesRLPPacket66{1111, nil}, + // Node data + GetNodeDataPacket66{1111, nil}, + NodeDataPacket66{1111, nil}, + // Receipts + GetReceiptsPacket66{1111, nil}, + ReceiptsPacket66{1111, nil}, + // Transactions + GetPooledTransactionsPacket66{1111, nil}, + PooledTransactionsPacket66{1111, nil}, + PooledTransactionsRLPPacket66{1111, nil}, + + // Headers + BlockHeadersPacket66{1111, BlockHeadersPacket([]*types.Header{})}, + // Bodies + GetBlockBodiesPacket66{1111, GetBlockBodiesPacket([]common.Hash{})}, + BlockBodiesPacket66{1111, BlockBodiesPacket([]*BlockBody{})}, + BlockBodiesRLPPacket66{1111, BlockBodiesRLPPacket([]rlp.RawValue{})}, + // Node data + GetNodeDataPacket66{1111, GetNodeDataPacket([]common.Hash{})}, + NodeDataPacket66{1111, NodeDataPacket([][]byte{})}, + // Receipts + GetReceiptsPacket66{1111, GetReceiptsPacket([]common.Hash{})}, + ReceiptsPacket66{1111, ReceiptsPacket([][]*types.Receipt{})}, + // Transactions + GetPooledTransactionsPacket66{1111, GetPooledTransactionsPacket([]common.Hash{})}, + PooledTransactionsPacket66{1111, PooledTransactionsPacket([]*types.Transaction{})}, + PooledTransactionsRLPPacket66{1111, PooledTransactionsRLPPacket([]rlp.RawValue{})}, + } { + if have, _ := rlp.EncodeToBytes(msg); !bytes.Equal(have, want) { + t.Errorf("test %d, type %T, have\n\t%x\nwant\n\t%x", i, msg, have, want) + } + } +} + +// TestEth66Messages tests the encoding of all redefined eth66 messages +func TestEth66Messages(t *testing.T) { + // Some basic structs used during testing + var ( + header *types.Header + blockBody *BlockBody + blockBodyRlp rlp.RawValue + txs []*types.Transaction + txRlps []rlp.RawValue + hashes []common.Hash + receipts []*types.Receipt + receiptsRlp rlp.RawValue + + err error + ) + header = &types.Header{ + Difficulty: big.NewInt(2222), + Number: big.NewInt(3333), + GasLimit: 4444, + GasUsed: 5555, + Time: 6666, + Extra: []byte{0x77, 0x88}, + } + // Init the transactions, taken from a different test + { + for _, hexrlp := range []string{ + "f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", + "f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + } { + var tx *types.Transaction + rlpdata := common.FromHex(hexrlp) + if err := rlp.DecodeBytes(rlpdata, &tx); err != nil { + t.Fatal(err) + } + txs = append(txs, tx) + txRlps = append(txRlps, rlpdata) + } + } + // init the block body data, both object and rlp form + blockBody = &BlockBody{ + Transactions: txs, + Uncles: []*types.Header{header}, + } + blockBodyRlp, err = rlp.EncodeToBytes(blockBody) + if err != nil { + t.Fatal(err) + } + + hashes = []common.Hash{ + common.HexToHash("deadc0de"), + common.HexToHash("feedbeef"), + } + byteSlices := [][]byte{ + common.FromHex("deadc0de"), + common.FromHex("feedbeef"), + } + // init the receipts + { + receipts = []*types.Receipt{ + { + Status: types.ReceiptStatusFailed, + CumulativeGasUsed: 1, + Logs: []*types.Log{ + { + Address: common.BytesToAddress([]byte{0x11}), + Topics: []common.Hash{common.HexToHash("dead"), common.HexToHash("beef")}, + Data: []byte{0x01, 0x00, 0xff}, + }, + }, + TxHash: hashes[0], + ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), + GasUsed: 111111, + }, + } + rlpData, err := rlp.EncodeToBytes(receipts) + if err != nil { + t.Fatal(err) + } + receiptsRlp = rlpData + } + + for i, tc := range []struct { + message interface{} + want []byte + }{ + { + GetBlockHeadersPacket66{1111, &GetBlockHeadersPacket{HashOrNumber{hashes[0], 0}, 5, 5, false}}, + common.FromHex("e8820457e4a000000000000000000000000000000000000000000000000000000000deadc0de050580"), + }, + { + GetBlockHeadersPacket66{1111, &GetBlockHeadersPacket{HashOrNumber{common.Hash{}, 9999}, 5, 5, false}}, + common.FromHex("ca820457c682270f050580"), + }, + { + BlockHeadersPacket66{1111, BlockHeadersPacket{header}}, + common.FromHex("f90202820457f901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), + }, + { + GetBlockBodiesPacket66{1111, GetBlockBodiesPacket(hashes)}, + common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), + }, + { + BlockBodiesPacket66{1111, BlockBodiesPacket([]*BlockBody{blockBody})}, + common.FromHex("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), + }, + { // Identical to non-rlp-shortcut version + BlockBodiesRLPPacket66{1111, BlockBodiesRLPPacket([]rlp.RawValue{blockBodyRlp})}, + common.FromHex("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), + }, + { + GetNodeDataPacket66{1111, GetNodeDataPacket(hashes)}, + common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), + }, + { + NodeDataPacket66{1111, NodeDataPacket(byteSlices)}, + common.FromHex("ce820457ca84deadc0de84feedbeef"), + }, + { + GetReceiptsPacket66{1111, GetReceiptsPacket(hashes)}, + common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), + }, + { + ReceiptsPacket66{1111, ReceiptsPacket([][]*types.Receipt{receipts})}, + common.FromHex("f90172820457f9016cf90169f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff"), + }, + { + ReceiptsRLPPacket66{1111, ReceiptsRLPPacket([]rlp.RawValue{receiptsRlp})}, + common.FromHex("f90172820457f9016cf90169f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff"), + }, + { + GetPooledTransactionsPacket66{1111, GetPooledTransactionsPacket(hashes)}, + common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), + }, + { + PooledTransactionsPacket66{1111, PooledTransactionsPacket(txs)}, + common.FromHex("f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb"), + }, + { + PooledTransactionsRLPPacket66{1111, PooledTransactionsRLPPacket(txRlps)}, + common.FromHex("f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb"), + }, + } { + if have, _ := rlp.EncodeToBytes(tc.message); !bytes.Equal(have, tc.want) { + t.Errorf("test %d, type %T, have\n\t%x\nwant\n\t%x", i, tc.message, have, tc.want) + } + } +} diff --git a/eth/protocols/eth/tracker.go b/eth/protocols/eth/tracker.go new file mode 100644 index 00000000..324fd228 --- /dev/null +++ b/eth/protocols/eth/tracker.go @@ -0,0 +1,26 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "time" + + "github.com/ethereum/go-ethereum/p2p/tracker" +) + +// requestTracker is a singleton tracker for eth/66 and newer request times. +var requestTracker = tracker.New(ProtocolName, 5*time.Minute) diff --git a/eth/protocols/snap/discovery.go b/eth/protocols/snap/discovery.go new file mode 100644 index 00000000..684ec7e6 --- /dev/null +++ b/eth/protocols/snap/discovery.go @@ -0,0 +1,32 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "github.com/ethereum/go-ethereum/rlp" +) + +// enrEntry is the ENR entry which advertises `snap` protocol on the discovery. +type enrEntry struct { + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` +} + +// ENRKey implements enr.Entry. +func (e enrEntry) ENRKey() string { + return "snap" +} diff --git a/eth/protocols/snap/handler.go b/eth/protocols/snap/handler.go new file mode 100644 index 00000000..41380d96 --- /dev/null +++ b/eth/protocols/snap/handler.go @@ -0,0 +1,567 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "bytes" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "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/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/trie" +) + +const ( + // softResponseLimit is the target maximum size of replies to data retrievals. + softResponseLimit = 2 * 1024 * 1024 + + // maxCodeLookups is the maximum number of bytecodes to serve. This number is + // there to limit the number of disk lookups. + maxCodeLookups = 1024 + + // stateLookupSlack defines the ratio by how much a state response can exceed + // the requested limit in order to try and avoid breaking up contracts into + // multiple packages and proving them. + stateLookupSlack = 0.1 + + // maxTrieNodeLookups is the maximum number of state trie nodes to serve. This + // number is there to limit the number of disk lookups. + maxTrieNodeLookups = 1024 + + // maxTrieNodeTimeSpent is the maximum time we should spend on looking up trie nodes. + // If we spend too much time, then it's a fairly high chance of timing out + // at the remote side, which means all the work is in vain. + maxTrieNodeTimeSpent = 5 * time.Second +) + +// Handler is a callback to invoke from an outside runner after the boilerplate +// exchanges have passed. +type Handler func(peer *Peer) error + +// Backend defines the data retrieval methods to serve remote requests and the +// callback methods to invoke on remote deliveries. +type Backend interface { + // Chain retrieves the blockchain object to serve data. + Chain() *core.BlockChain + + // RunPeer is invoked when a peer joins on the `eth` protocol. The handler + // should do any peer maintenance work, handshakes and validations. If all + // is passed, control should be given back to the `handler` to process the + // inbound messages going forward. + RunPeer(peer *Peer, handler Handler) error + + // PeerInfo retrieves all known `snap` information about a peer. + PeerInfo(id enode.ID) interface{} + + // Handle is a callback to be invoked when a data packet is received from + // the remote peer. Only packets not consumed by the protocol handler will + // be forwarded to the backend. + Handle(peer *Peer, packet Packet) error +} + +// MakeProtocols constructs the P2P protocol definitions for `snap`. +func MakeProtocols(backend Backend, dnsdisc enode.Iterator) []p2p.Protocol { + // Filter the discovery iterator for nodes advertising snap support. + dnsdisc = enode.Filter(dnsdisc, func(n *enode.Node) bool { + var snap enrEntry + return n.Load(&snap) == nil + }) + + protocols := make([]p2p.Protocol, len(ProtocolVersions)) + for i, version := range ProtocolVersions { + version := version // Closure + + protocols[i] = p2p.Protocol{ + Name: ProtocolName, + Version: version, + Length: protocolLengths[version], + Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { + return backend.RunPeer(NewPeer(version, p, rw), func(peer *Peer) error { + return Handle(backend, peer) + }) + }, + NodeInfo: func() interface{} { + return nodeInfo(backend.Chain()) + }, + PeerInfo: func(id enode.ID) interface{} { + return backend.PeerInfo(id) + }, + Attributes: []enr.Entry{&enrEntry{}}, + DialCandidates: dnsdisc, + } + } + return protocols +} + +// Handle is the callback invoked to manage the life cycle of a `snap` peer. +// When this function terminates, the peer is disconnected. +func Handle(backend Backend, peer *Peer) error { + for { + if err := HandleMessage(backend, peer); err != nil { + peer.Log().Debug("Message handling failed in `snap`", "err", err) + return err + } + } +} + +// HandleMessage is invoked whenever an inbound message is received from a +// remote peer on the `snap` protocol. The remote connection is torn down upon +// returning any error. +func HandleMessage(backend Backend, peer *Peer) error { + // Read the next message from the remote peer, and ensure it's fully consumed + msg, err := peer.rw.ReadMsg() + if err != nil { + return err + } + if msg.Size > maxMessageSize { + return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) + } + defer msg.Discard() + start := time.Now() + // Track the emount of time it takes to serve the request and run the handler + if metrics.Enabled { + h := fmt.Sprintf("%s/%s/%d/%#02x", p2p.HandleHistName, ProtocolName, peer.Version(), msg.Code) + defer func(start time.Time) { + sampler := func() metrics.Sample { + return metrics.ResettingSample( + metrics.NewExpDecaySample(1028, 0.015), + ) + } + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(time.Since(start).Microseconds()) + }(start) + } + // Handle the message depending on its contents + switch { + case msg.Code == GetAccountRangeMsg: + // Decode the account retrieval request + var req GetAccountRangePacket + if err := msg.Decode(&req); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Service the request, potentially returning nothing in case of errors + accounts, proofs := ServiceGetAccountRangeQuery(backend.Chain(), &req) + + // Send back anything accumulated (or empty in case of errors) + return p2p.Send(peer.rw, AccountRangeMsg, &AccountRangePacket{ + ID: req.ID, + Accounts: accounts, + Proof: proofs, + }) + + case msg.Code == AccountRangeMsg: + // A range of accounts arrived to one of our previous requests + res := new(AccountRangePacket) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Ensure the range is monotonically increasing + for i := 1; i < len(res.Accounts); i++ { + if bytes.Compare(res.Accounts[i-1].Hash[:], res.Accounts[i].Hash[:]) >= 0 { + return fmt.Errorf("accounts not monotonically increasing: #%d [%x] vs #%d [%x]", i-1, res.Accounts[i-1].Hash[:], i, res.Accounts[i].Hash[:]) + } + } + requestTracker.Fulfil(peer.id, peer.version, AccountRangeMsg, res.ID) + + return backend.Handle(peer, res) + + case msg.Code == GetStorageRangesMsg: + // Decode the storage retrieval request + var req GetStorageRangesPacket + if err := msg.Decode(&req); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Service the request, potentially returning nothing in case of errors + slots, proofs := ServiceGetStorageRangesQuery(backend.Chain(), &req) + + // Send back anything accumulated (or empty in case of errors) + return p2p.Send(peer.rw, StorageRangesMsg, &StorageRangesPacket{ + ID: req.ID, + Slots: slots, + Proof: proofs, + }) + + case msg.Code == StorageRangesMsg: + // A range of storage slots arrived to one of our previous requests + res := new(StorageRangesPacket) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Ensure the ranges are monotonically increasing + for i, slots := range res.Slots { + for j := 1; j < len(slots); j++ { + if bytes.Compare(slots[j-1].Hash[:], slots[j].Hash[:]) >= 0 { + return fmt.Errorf("storage slots not monotonically increasing for account #%d: #%d [%x] vs #%d [%x]", i, j-1, slots[j-1].Hash[:], j, slots[j].Hash[:]) + } + } + } + requestTracker.Fulfil(peer.id, peer.version, StorageRangesMsg, res.ID) + + return backend.Handle(peer, res) + + case msg.Code == GetByteCodesMsg: + // Decode bytecode retrieval request + var req GetByteCodesPacket + if err := msg.Decode(&req); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Service the request, potentially returning nothing in case of errors + codes := ServiceGetByteCodesQuery(backend.Chain(), &req) + + // Send back anything accumulated (or empty in case of errors) + return p2p.Send(peer.rw, ByteCodesMsg, &ByteCodesPacket{ + ID: req.ID, + Codes: codes, + }) + + case msg.Code == ByteCodesMsg: + // A batch of byte codes arrived to one of our previous requests + res := new(ByteCodesPacket) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + requestTracker.Fulfil(peer.id, peer.version, ByteCodesMsg, res.ID) + + return backend.Handle(peer, res) + + case msg.Code == GetTrieNodesMsg: + // Decode trie node retrieval request + var req GetTrieNodesPacket + if err := msg.Decode(&req); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + // Service the request, potentially returning nothing in case of errors + nodes, err := ServiceGetTrieNodesQuery(backend.Chain(), &req, start) + if err != nil { + return err + } + // Send back anything accumulated (or empty in case of errors) + return p2p.Send(peer.rw, TrieNodesMsg, &TrieNodesPacket{ + ID: req.ID, + Nodes: nodes, + }) + + case msg.Code == TrieNodesMsg: + // A batch of trie nodes arrived to one of our previous requests + res := new(TrieNodesPacket) + if err := msg.Decode(res); err != nil { + return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) + } + requestTracker.Fulfil(peer.id, peer.version, TrieNodesMsg, res.ID) + + return backend.Handle(peer, res) + + default: + return fmt.Errorf("%w: %v", errInvalidMsgCode, msg.Code) + } +} + +// ServiceGetAccountRangeQuery assembles the response to an account range query. +// It is exposed to allow external packages to test protocol behavior. +func ServiceGetAccountRangeQuery(chain *core.BlockChain, req *GetAccountRangePacket) ([]*AccountData, [][]byte) { + if req.Bytes > softResponseLimit { + req.Bytes = softResponseLimit + } + // Retrieve the requested state and bail out if non existent + tr, err := trie.New(common.Hash{}, req.Root, chain.StateCache().TrieDB()) + if err != nil { + return nil, nil + } + it, err := chain.Snapshots().AccountIterator(req.Root, req.Origin) + if err != nil { + return nil, nil + } + // Iterate over the requested range and pile accounts up + var ( + accounts []*AccountData + size uint64 + last common.Hash + ) + for it.Next() { + hash, account := it.Hash(), common.CopyBytes(it.Account()) + + // Track the returned interval for the Merkle proofs + last = hash + + // Assemble the reply item + size += uint64(common.HashLength + len(account)) + accounts = append(accounts, &AccountData{ + Hash: hash, + Body: account, + }) + // If we've exceeded the request threshold, abort + if bytes.Compare(hash[:], req.Limit[:]) >= 0 { + break + } + if size > req.Bytes { + break + } + } + it.Release() + + // Generate the Merkle proofs for the first and last account + proof := light.NewNodeSet() + if err := tr.Prove(req.Origin[:], 0, proof); err != nil { + log.Warn("Failed to prove account range", "origin", req.Origin, "err", err) + return nil, nil + } + if last != (common.Hash{}) { + if err := tr.Prove(last[:], 0, proof); err != nil { + log.Warn("Failed to prove account range", "last", last, "err", err) + return nil, nil + } + } + var proofs [][]byte + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + return accounts, proofs +} + +func ServiceGetStorageRangesQuery(chain *core.BlockChain, req *GetStorageRangesPacket) ([][]*StorageData, [][]byte) { + if req.Bytes > softResponseLimit { + req.Bytes = softResponseLimit + } + // TODO(karalabe): Do we want to enforce > 0 accounts and 1 account if origin is set? + // TODO(karalabe): - Logging locally is not ideal as remote faulst annoy the local user + // TODO(karalabe): - Dropping the remote peer is less flexible wrt client bugs (slow is better than non-functional) + + // Calculate the hard limit at which to abort, even if mid storage trie + hardLimit := uint64(float64(req.Bytes) * (1 + stateLookupSlack)) + + // Retrieve storage ranges until the packet limit is reached + var ( + slots [][]*StorageData + proofs [][]byte + size uint64 + ) + for _, account := range req.Accounts { + // If we've exceeded the requested data limit, abort without opening + // a new storage range (that we'd need to prove due to exceeded size) + if size >= req.Bytes { + break + } + // The first account might start from a different origin and end sooner + var origin common.Hash + if len(req.Origin) > 0 { + origin, req.Origin = common.BytesToHash(req.Origin), nil + } + var limit = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + if len(req.Limit) > 0 { + limit, req.Limit = common.BytesToHash(req.Limit), nil + } + // Retrieve the requested state and bail out if non existent + it, err := chain.Snapshots().StorageIterator(req.Root, account, origin) + if err != nil { + return nil, nil + } + // Iterate over the requested range and pile slots up + var ( + storage []*StorageData + last common.Hash + abort bool + ) + for it.Next() { + if size >= hardLimit { + abort = true + break + } + hash, slot := it.Hash(), common.CopyBytes(it.Slot()) + + // Track the returned interval for the Merkle proofs + last = hash + + // Assemble the reply item + size += uint64(common.HashLength + len(slot)) + storage = append(storage, &StorageData{ + Hash: hash, + Body: slot, + }) + // If we've exceeded the request threshold, abort + if bytes.Compare(hash[:], limit[:]) >= 0 { + break + } + } + if len(storage) > 0 { + slots = append(slots, storage) + } + it.Release() + + // Generate the Merkle proofs for the first and last storage slot, but + // only if the response was capped. If the entire storage trie included + // in the response, no need for any proofs. + if origin != (common.Hash{}) || (abort && len(storage) > 0) { + // Request started at a non-zero hash or was capped prematurely, add + // the endpoint Merkle proofs + accTrie, err := trie.NewStateTrie(common.Hash{}, req.Root, chain.StateCache().TrieDB()) + if err != nil { + return nil, nil + } + acc, err := accTrie.TryGetAccountWithPreHashedKey(account[:]) + if err != nil || acc == nil { + return nil, nil + } + stTrie, err := trie.NewStateTrie(account, acc.Root, chain.StateCache().TrieDB()) + if err != nil { + return nil, nil + } + proof := light.NewNodeSet() + if err := stTrie.Prove(origin[:], 0, proof); err != nil { + log.Warn("Failed to prove storage range", "origin", req.Origin, "err", err) + return nil, nil + } + if last != (common.Hash{}) { + if err := stTrie.Prove(last[:], 0, proof); err != nil { + log.Warn("Failed to prove storage range", "last", last, "err", err) + return nil, nil + } + } + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + // Proof terminates the reply as proofs are only added if a node + // refuses to serve more data (exception when a contract fetch is + // finishing, but that's that). + break + } + } + return slots, proofs +} + +// ServiceGetByteCodesQuery assembles the response to a byte codes query. +// It is exposed to allow external packages to test protocol behavior. +func ServiceGetByteCodesQuery(chain *core.BlockChain, req *GetByteCodesPacket) [][]byte { + if req.Bytes > softResponseLimit { + req.Bytes = softResponseLimit + } + if len(req.Hashes) > maxCodeLookups { + req.Hashes = req.Hashes[:maxCodeLookups] + } + // Retrieve bytecodes until the packet size limit is reached + var ( + codes [][]byte + bytes uint64 + ) + for _, hash := range req.Hashes { + if hash == emptyCode { + // Peers should not request the empty code, but if they do, at + // least sent them back a correct response without db lookups + codes = append(codes, []byte{}) + } else if blob, err := chain.ContractCodeWithPrefix(hash); err == nil { + codes = append(codes, blob) + bytes += uint64(len(blob)) + } + if bytes > req.Bytes { + break + } + } + return codes +} + +// ServiceGetTrieNodesQuery assembles the response to a trie nodes query. +// It is exposed to allow external packages to test protocol behavior. +func ServiceGetTrieNodesQuery(chain *core.BlockChain, req *GetTrieNodesPacket, start time.Time) ([][]byte, error) { + if req.Bytes > softResponseLimit { + req.Bytes = softResponseLimit + } + // Make sure we have the state associated with the request + triedb := chain.StateCache().TrieDB() + + accTrie, err := trie.NewStateTrie(common.Hash{}, req.Root, triedb) + if err != nil { + // We don't have the requested state available, bail out + return nil, nil + } + snap := chain.Snapshots().Snapshot(req.Root) + if snap == nil { + // We don't have the requested state snapshotted yet, bail out. + // In reality we could still serve using the account and storage + // tries only, but let's protect the node a bit while it's doing + // snapshot generation. + return nil, nil + } + // Retrieve trie nodes until the packet size limit is reached + var ( + nodes [][]byte + bytes uint64 + loads int // Trie hash expansions to count database reads + ) + for _, pathset := range req.Paths { + switch len(pathset) { + case 0: + // Ensure we penalize invalid requests + return nil, fmt.Errorf("%w: zero-item pathset requested", errBadRequest) + + case 1: + // If we're only retrieving an account trie node, fetch it directly + blob, resolved, err := accTrie.TryGetNode(pathset[0]) + loads += resolved // always account database reads, even for failures + if err != nil { + break + } + nodes = append(nodes, blob) + bytes += uint64(len(blob)) + + default: + // Storage slots requested, open the storage trie and retrieve from there + account, err := snap.Account(common.BytesToHash(pathset[0])) + loads++ // always account database reads, even for failures + if err != nil || account == nil { + break + } + stTrie, err := trie.NewStateTrie(common.BytesToHash(pathset[0]), common.BytesToHash(account.Root), triedb) + loads++ // always account database reads, even for failures + if err != nil { + break + } + for _, path := range pathset[1:] { + blob, resolved, err := stTrie.TryGetNode(path) + loads += resolved // always account database reads, even for failures + if err != nil { + break + } + nodes = append(nodes, blob) + bytes += uint64(len(blob)) + + // Sanity check limits to avoid DoS on the store trie loads + if bytes > req.Bytes || loads > maxTrieNodeLookups || time.Since(start) > maxTrieNodeTimeSpent { + break + } + } + } + // Abort request processing if we've exceeded our limits + if bytes > req.Bytes || loads > maxTrieNodeLookups || time.Since(start) > maxTrieNodeTimeSpent { + break + } + } + return nodes, nil +} + +// NodeInfo represents a short summary of the `snap` sub-protocol metadata +// known about the host peer. +type NodeInfo struct{} + +// nodeInfo retrieves some `snap` protocol metadata about the running host node. +func nodeInfo(chain *core.BlockChain) *NodeInfo { + return &NodeInfo{} +} diff --git a/eth/protocols/snap/peer.go b/eth/protocols/snap/peer.go new file mode 100644 index 00000000..235d499f --- /dev/null +++ b/eth/protocols/snap/peer.go @@ -0,0 +1,133 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" +) + +// Peer is a collection of relevant information we have about a `snap` peer. +type Peer struct { + id string // Unique ID for the peer, cached + + *p2p.Peer // The embedded P2P package peer + rw p2p.MsgReadWriter // Input/output streams for snap + version uint // Protocol version negotiated + + logger log.Logger // Contextual logger with the peer id injected +} + +// NewPeer create a wrapper for a network connection and negotiated protocol +// version. +func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) *Peer { + id := p.ID().String() + return &Peer{ + id: id, + Peer: p, + rw: rw, + version: version, + logger: log.New("peer", id[:8]), + } +} + +// NewFakePeer create a fake snap peer without a backing p2p peer, for testing purposes. +func NewFakePeer(version uint, id string, rw p2p.MsgReadWriter) *Peer { + return &Peer{ + id: id, + rw: rw, + version: version, + logger: log.New("peer", id[:8]), + } +} + +// ID retrieves the peer's unique identifier. +func (p *Peer) ID() string { + return p.id +} + +// Version retrieves the peer's negotiated `snap` protocol version. +func (p *Peer) Version() uint { + return p.version +} + +// Log overrides the P2P logger with the higher level one containing only the id. +func (p *Peer) Log() log.Logger { + return p.logger +} + +// RequestAccountRange fetches a batch of accounts rooted in a specific account +// trie, starting with the origin. +func (p *Peer) RequestAccountRange(id uint64, root common.Hash, origin, limit common.Hash, bytes uint64) error { + p.logger.Trace("Fetching range of accounts", "reqid", id, "root", root, "origin", origin, "limit", limit, "bytes", common.StorageSize(bytes)) + + requestTracker.Track(p.id, p.version, GetAccountRangeMsg, AccountRangeMsg, id) + return p2p.Send(p.rw, GetAccountRangeMsg, &GetAccountRangePacket{ + ID: id, + Root: root, + Origin: origin, + Limit: limit, + Bytes: bytes, + }) +} + +// RequestStorageRange fetches a batch of storage slots belonging to one or more +// accounts. If slots from only one account is requested, an origin marker may also +// be used to retrieve from there. +func (p *Peer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { + if len(accounts) == 1 && origin != nil { + p.logger.Trace("Fetching range of large storage slots", "reqid", id, "root", root, "account", accounts[0], "origin", common.BytesToHash(origin), "limit", common.BytesToHash(limit), "bytes", common.StorageSize(bytes)) + } else { + p.logger.Trace("Fetching ranges of small storage slots", "reqid", id, "root", root, "accounts", len(accounts), "first", accounts[0], "bytes", common.StorageSize(bytes)) + } + requestTracker.Track(p.id, p.version, GetStorageRangesMsg, StorageRangesMsg, id) + return p2p.Send(p.rw, GetStorageRangesMsg, &GetStorageRangesPacket{ + ID: id, + Root: root, + Accounts: accounts, + Origin: origin, + Limit: limit, + Bytes: bytes, + }) +} + +// RequestByteCodes fetches a batch of bytecodes by hash. +func (p *Peer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { + p.logger.Trace("Fetching set of byte codes", "reqid", id, "hashes", len(hashes), "bytes", common.StorageSize(bytes)) + + requestTracker.Track(p.id, p.version, GetByteCodesMsg, ByteCodesMsg, id) + return p2p.Send(p.rw, GetByteCodesMsg, &GetByteCodesPacket{ + ID: id, + Hashes: hashes, + Bytes: bytes, + }) +} + +// RequestTrieNodes fetches a batch of account or storage trie nodes rooted in +// a specific state trie. +func (p *Peer) RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error { + p.logger.Trace("Fetching set of trie nodes", "reqid", id, "root", root, "pathsets", len(paths), "bytes", common.StorageSize(bytes)) + + requestTracker.Track(p.id, p.version, GetTrieNodesMsg, TrieNodesMsg, id) + return p2p.Send(p.rw, GetTrieNodesMsg, &GetTrieNodesPacket{ + ID: id, + Root: root, + Paths: paths, + Bytes: bytes, + }) +} diff --git a/eth/protocols/snap/protocol.go b/eth/protocols/snap/protocol.go new file mode 100644 index 00000000..60a254f3 --- /dev/null +++ b/eth/protocols/snap/protocol.go @@ -0,0 +1,218 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "github.com/ethereum/go-ethereum/rlp" +) + +// Constants to match up protocol versions and messages +const ( + SNAP1 = 1 +) + +// ProtocolName is the official short name of the `snap` protocol used during +// devp2p capability negotiation. +const ProtocolName = "snap" + +// ProtocolVersions are the supported versions of the `snap` protocol (first +// is primary). +var ProtocolVersions = []uint{SNAP1} + +// protocolLengths are the number of implemented message corresponding to +// different protocol versions. +var protocolLengths = map[uint]uint64{SNAP1: 8} + +// maxMessageSize is the maximum cap on the size of a protocol message. +const maxMessageSize = 10 * 1024 * 1024 + +const ( + GetAccountRangeMsg = 0x00 + AccountRangeMsg = 0x01 + GetStorageRangesMsg = 0x02 + StorageRangesMsg = 0x03 + GetByteCodesMsg = 0x04 + ByteCodesMsg = 0x05 + GetTrieNodesMsg = 0x06 + TrieNodesMsg = 0x07 +) + +var ( + errMsgTooLarge = errors.New("message too long") + errDecode = errors.New("invalid message") + errInvalidMsgCode = errors.New("invalid message code") + errBadRequest = errors.New("bad request") +) + +// Packet represents a p2p message in the `snap` protocol. +type Packet interface { + Name() string // Name returns a string corresponding to the message type. + Kind() byte // Kind returns the message type. +} + +// GetAccountRangePacket represents an account query. +type GetAccountRangePacket struct { + ID uint64 // Request ID to match up responses with + Root common.Hash // Root hash of the account trie to serve + Origin common.Hash // Hash of the first account to retrieve + Limit common.Hash // Hash of the last account to retrieve + Bytes uint64 // Soft limit at which to stop returning data +} + +// AccountRangePacket represents an account query response. +type AccountRangePacket struct { + ID uint64 // ID of the request this is a response for + Accounts []*AccountData // List of consecutive accounts from the trie + Proof [][]byte // List of trie nodes proving the account range +} + +// AccountData represents a single account in a query response. +type AccountData struct { + Hash common.Hash // Hash of the account + Body rlp.RawValue // Account body in slim format +} + +// Unpack retrieves the accounts from the range packet and converts from slim +// wire representation to consensus format. The returned data is RLP encoded +// since it's expected to be serialized to disk without further interpretation. +// +// Note, this method does a round of RLP decoding and reencoding, so only use it +// once and cache the results if need be. Ideally discard the packet afterwards +// to not double the memory use. +func (p *AccountRangePacket) Unpack() ([]common.Hash, [][]byte, error) { + var ( + hashes = make([]common.Hash, len(p.Accounts)) + accounts = make([][]byte, len(p.Accounts)) + ) + for i, acc := range p.Accounts { + val, err := snapshot.FullAccountRLP(acc.Body) + if err != nil { + return nil, nil, fmt.Errorf("invalid account %x: %v", acc.Body, err) + } + hashes[i], accounts[i] = acc.Hash, val + } + return hashes, accounts, nil +} + +// GetStorageRangesPacket represents an storage slot query. +type GetStorageRangesPacket struct { + ID uint64 // Request ID to match up responses with + Root common.Hash // Root hash of the account trie to serve + Accounts []common.Hash // Account hashes of the storage tries to serve + Origin []byte // Hash of the first storage slot to retrieve (large contract mode) + Limit []byte // Hash of the last storage slot to retrieve (large contract mode) + Bytes uint64 // Soft limit at which to stop returning data +} + +// StorageRangesPacket represents a storage slot query response. +type StorageRangesPacket struct { + ID uint64 // ID of the request this is a response for + Slots [][]*StorageData // Lists of consecutive storage slots for the requested accounts + Proof [][]byte // Merkle proofs for the *last* slot range, if it's incomplete +} + +// StorageData represents a single storage slot in a query response. +type StorageData struct { + Hash common.Hash // Hash of the storage slot + Body []byte // Data content of the slot +} + +// Unpack retrieves the storage slots from the range packet and returns them in +// a split flat format that's more consistent with the internal data structures. +func (p *StorageRangesPacket) Unpack() ([][]common.Hash, [][][]byte) { + var ( + hashset = make([][]common.Hash, len(p.Slots)) + slotset = make([][][]byte, len(p.Slots)) + ) + for i, slots := range p.Slots { + hashset[i] = make([]common.Hash, len(slots)) + slotset[i] = make([][]byte, len(slots)) + for j, slot := range slots { + hashset[i][j] = slot.Hash + slotset[i][j] = slot.Body + } + } + return hashset, slotset +} + +// GetByteCodesPacket represents a contract bytecode query. +type GetByteCodesPacket struct { + ID uint64 // Request ID to match up responses with + Hashes []common.Hash // Code hashes to retrieve the code for + Bytes uint64 // Soft limit at which to stop returning data +} + +// ByteCodesPacket represents a contract bytecode query response. +type ByteCodesPacket struct { + ID uint64 // ID of the request this is a response for + Codes [][]byte // Requested contract bytecodes +} + +// GetTrieNodesPacket represents a state trie node query. +type GetTrieNodesPacket struct { + ID uint64 // Request ID to match up responses with + Root common.Hash // Root hash of the account trie to serve + Paths []TrieNodePathSet // Trie node hashes to retrieve the nodes for + Bytes uint64 // Soft limit at which to stop returning data +} + +// TrieNodePathSet is a list of trie node paths to retrieve. A naive way to +// represent trie nodes would be a simple list of `account || storage` path +// segments concatenated, but that would be very wasteful on the network. +// +// Instead, this array special cases the first element as the path in the +// account trie and the remaining elements as paths in the storage trie. To +// address an account node, the slice should have a length of 1 consisting +// of only the account path. There's no need to be able to address both an +// account node and a storage node in the same request as it cannot happen +// that a slot is accessed before the account path is fully expanded. +type TrieNodePathSet [][]byte + +// TrieNodesPacket represents a state trie node query response. +type TrieNodesPacket struct { + ID uint64 // ID of the request this is a response for + Nodes [][]byte // Requested state trie nodes +} + +func (*GetAccountRangePacket) Name() string { return "GetAccountRange" } +func (*GetAccountRangePacket) Kind() byte { return GetAccountRangeMsg } + +func (*AccountRangePacket) Name() string { return "AccountRange" } +func (*AccountRangePacket) Kind() byte { return AccountRangeMsg } + +func (*GetStorageRangesPacket) Name() string { return "GetStorageRanges" } +func (*GetStorageRangesPacket) Kind() byte { return GetStorageRangesMsg } + +func (*StorageRangesPacket) Name() string { return "StorageRanges" } +func (*StorageRangesPacket) Kind() byte { return StorageRangesMsg } + +func (*GetByteCodesPacket) Name() string { return "GetByteCodes" } +func (*GetByteCodesPacket) Kind() byte { return GetByteCodesMsg } + +func (*ByteCodesPacket) Name() string { return "ByteCodes" } +func (*ByteCodesPacket) Kind() byte { return ByteCodesMsg } + +func (*GetTrieNodesPacket) Name() string { return "GetTrieNodes" } +func (*GetTrieNodesPacket) Kind() byte { return GetTrieNodesMsg } + +func (*TrieNodesPacket) Name() string { return "TrieNodes" } +func (*TrieNodesPacket) Kind() byte { return TrieNodesMsg } diff --git a/eth/protocols/snap/range.go b/eth/protocols/snap/range.go new file mode 100644 index 00000000..2627cb95 --- /dev/null +++ b/eth/protocols/snap/range.go @@ -0,0 +1,81 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" +) + +// hashRange is a utility to handle ranges of hashes, Split up the +// hash-space into sections, and 'walk' over the sections +type hashRange struct { + current *uint256.Int + step *uint256.Int +} + +// newHashRange creates a new hashRange, initiated at the start position, +// and with the step set to fill the desired 'num' chunks +func newHashRange(start common.Hash, num uint64) *hashRange { + left := new(big.Int).Sub(hashSpace, start.Big()) + step := new(big.Int).Div( + new(big.Int).Add(left, new(big.Int).SetUint64(num-1)), + new(big.Int).SetUint64(num), + ) + step256 := new(uint256.Int) + step256.SetFromBig(step) + + return &hashRange{ + current: new(uint256.Int).SetBytes32(start[:]), + step: step256, + } +} + +// Next pushes the hash range to the next interval. +func (r *hashRange) Next() bool { + next, overflow := new(uint256.Int).AddOverflow(r.current, r.step) + if overflow { + return false + } + r.current = next + return true +} + +// Start returns the first hash in the current interval. +func (r *hashRange) Start() common.Hash { + return r.current.Bytes32() +} + +// End returns the last hash in the current interval. +func (r *hashRange) End() common.Hash { + // If the end overflows (non divisible range), return a shorter interval + next, overflow := new(uint256.Int).AddOverflow(r.current, r.step) + if overflow { + return common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + } + return next.SubUint64(next, 1).Bytes32() +} + +// incHash returns the next hash, in lexicographical order (a.k.a plus one) +func incHash(h common.Hash) common.Hash { + var a uint256.Int + a.SetBytes32(h[:]) + a.AddUint64(&a, 1) + return common.Hash(a.Bytes32()) +} diff --git a/eth/protocols/snap/range_test.go b/eth/protocols/snap/range_test.go new file mode 100644 index 00000000..c6dc8fb7 --- /dev/null +++ b/eth/protocols/snap/range_test.go @@ -0,0 +1,143 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +// Tests that given a starting hash and a density, the hash ranger can correctly +// split up the remaining hash space into a fixed number of chunks. +func TestHashRanges(t *testing.T) { + tests := []struct { + head common.Hash + chunks uint64 + starts []common.Hash + ends []common.Hash + }{ + // Simple test case to split the entire hash range into 4 chunks + { + head: common.Hash{}, + chunks: 4, + starts: []common.Hash{ + {}, + common.HexToHash("0x4000000000000000000000000000000000000000000000000000000000000000"), + common.HexToHash("0x8000000000000000000000000000000000000000000000000000000000000000"), + common.HexToHash("0xc000000000000000000000000000000000000000000000000000000000000000"), + }, + ends: []common.Hash{ + common.HexToHash("0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + common.HexToHash("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + common.HexToHash("0xbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, + }, + // Split a divisible part of the hash range up into 2 chunks + { + head: common.HexToHash("0x2000000000000000000000000000000000000000000000000000000000000000"), + chunks: 2, + starts: []common.Hash{ + {}, + common.HexToHash("0x9000000000000000000000000000000000000000000000000000000000000000"), + }, + ends: []common.Hash{ + common.HexToHash("0x8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, + }, + // Split the entire hash range into a non divisible 3 chunks + { + head: common.Hash{}, + chunks: 3, + starts: []common.Hash{ + {}, + common.HexToHash("0x5555555555555555555555555555555555555555555555555555555555555556"), + common.HexToHash("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac"), + }, + ends: []common.Hash{ + common.HexToHash("0x5555555555555555555555555555555555555555555555555555555555555555"), + common.HexToHash("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"), + common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, + }, + // Split a part of hash range into a non divisible 3 chunks + { + head: common.HexToHash("0x2000000000000000000000000000000000000000000000000000000000000000"), + chunks: 3, + starts: []common.Hash{ + {}, + common.HexToHash("0x6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"), + common.HexToHash("0xb555555555555555555555555555555555555555555555555555555555555556"), + }, + ends: []common.Hash{ + common.HexToHash("0x6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), + common.HexToHash("0xb555555555555555555555555555555555555555555555555555555555555555"), + common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, + }, + // Split a part of hash range into a non divisible 3 chunks, but with a + // meaningful space size for manual verification. + // - The head being 0xff...f0, we have 14 hashes left in the space + // - Chunking up 14 into 3 pieces is 4.(6), but we need the ceil of 5 to avoid a micro-last-chunk + // - Since the range is not divisible, the last interval will be shrter, capped at 0xff...f + // - The chunk ranges thus needs to be [..0, ..5], [..6, ..b], [..c, ..f] + { + head: common.HexToHash("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0"), + chunks: 3, + starts: []common.Hash{ + {}, + common.HexToHash("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"), + common.HexToHash("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"), + }, + ends: []common.Hash{ + common.HexToHash("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5"), + common.HexToHash("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"), + common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, + }, + } + for i, tt := range tests { + r := newHashRange(tt.head, tt.chunks) + + var ( + starts = []common.Hash{{}} + ends = []common.Hash{r.End()} + ) + for r.Next() { + starts = append(starts, r.Start()) + ends = append(ends, r.End()) + } + if len(starts) != len(tt.starts) { + t.Errorf("test %d: starts count mismatch: have %d, want %d", i, len(starts), len(tt.starts)) + } + for j := 0; j < len(starts) && j < len(tt.starts); j++ { + if starts[j] != tt.starts[j] { + t.Errorf("test %d, start %d: hash mismatch: have %x, want %x", i, j, starts[j], tt.starts[j]) + } + } + if len(ends) != len(tt.ends) { + t.Errorf("test %d: ends count mismatch: have %d, want %d", i, len(ends), len(tt.ends)) + } + for j := 0; j < len(ends) && j < len(tt.ends); j++ { + if ends[j] != tt.ends[j] { + t.Errorf("test %d, end %d: hash mismatch: have %x, want %x", i, j, ends[j], tt.ends[j]) + } + } + } +} diff --git a/eth/protocols/snap/sort_test.go b/eth/protocols/snap/sort_test.go new file mode 100644 index 00000000..be0a8c57 --- /dev/null +++ b/eth/protocols/snap/sort_test.go @@ -0,0 +1,101 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "bytes" + "fmt" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func hexToNibbles(s string) []byte { + if len(s) >= 2 && s[0] == '0' && s[1] == 'x' { + s = s[2:] + } + var s2 []byte + for _, ch := range []byte(s) { + s2 = append(s2, '0') + s2 = append(s2, ch) + } + return common.Hex2Bytes(string(s2)) +} + +func TestRequestSorting(t *testing.T) { + // - Path 0x9 -> {0x19} + // - Path 0x99 -> {0x0099} + // - Path 0x01234567890123456789012345678901012345678901234567890123456789019 -> {0x0123456789012345678901234567890101234567890123456789012345678901, 0x19} + // - Path 0x012345678901234567890123456789010123456789012345678901234567890199 -> {0x0123456789012345678901234567890101234567890123456789012345678901, 0x0099} + var f = func(path string) string { + data := hexToNibbles(path) + return string(data) + } + var ( + hashes []common.Hash + paths []string + ) + for _, x := range []string{ + "0x9", + "0x012345678901234567890123456789010123456789012345678901234567890195", + "0x012345678901234567890123456789010123456789012345678901234567890197", + "0x012345678901234567890123456789010123456789012345678901234567890196", + "0x99", + "0x012345678901234567890123456789010123456789012345678901234567890199", + "0x01234567890123456789012345678901012345678901234567890123456789019", + "0x0123456789012345678901234567890101234567890123456789012345678901", + "0x01234567890123456789012345678901012345678901234567890123456789010", + "0x01234567890123456789012345678901012345678901234567890123456789011", + } { + paths = append(paths, f(x)) + hashes = append(hashes, common.Hash{}) + } + _, _, syncPaths, pathsets := sortByAccountPath(paths, hashes) + { + var b = new(bytes.Buffer) + for i := 0; i < len(syncPaths); i++ { + fmt.Fprintf(b, "\n%d. paths %x", i, syncPaths[i]) + } + want := ` +0. paths [0099] +1. paths [0123456789012345678901234567890101234567890123456789012345678901 00] +2. paths [0123456789012345678901234567890101234567890123456789012345678901 0095] +3. paths [0123456789012345678901234567890101234567890123456789012345678901 0096] +4. paths [0123456789012345678901234567890101234567890123456789012345678901 0097] +5. paths [0123456789012345678901234567890101234567890123456789012345678901 0099] +6. paths [0123456789012345678901234567890101234567890123456789012345678901 10] +7. paths [0123456789012345678901234567890101234567890123456789012345678901 11] +8. paths [0123456789012345678901234567890101234567890123456789012345678901 19] +9. paths [19]` + if have := b.String(); have != want { + t.Errorf("have:%v\nwant:%v\n", have, want) + } + } + { + var b = new(bytes.Buffer) + for i := 0; i < len(pathsets); i++ { + fmt.Fprintf(b, "\n%d. pathset %x", i, pathsets[i]) + } + want := ` +0. pathset [0099] +1. pathset [0123456789012345678901234567890101234567890123456789012345678901 00 0095 0096 0097 0099 10 11 19] +2. pathset [19]` + if have := b.String(); have != want { + t.Errorf("have:%v\nwant:%v\n", have, want) + } + } +} diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go new file mode 100644 index 00000000..deaa4456 --- /dev/null +++ b/eth/protocols/snap/sync.go @@ -0,0 +1,2989 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "math/big" + "math/rand" + "sort" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "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/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/msgrate" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +var ( + // 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) +) + +const ( + // minRequestSize is the minimum number of bytes to request from a remote peer. + // This number is used as the low cap for account and storage range requests. + // Bytecode and trienode are limited inherently by item count (1). + minRequestSize = 64 * 1024 + + // maxRequestSize is the maximum number of bytes to request from a remote peer. + // This number is used as the high cap for account and storage range requests. + // Bytecode and trienode are limited more explicitly by the caps below. + maxRequestSize = 512 * 1024 + + // maxCodeRequestCount is the maximum number of bytecode blobs to request in a + // single query. If this number is too low, we're not filling responses fully + // and waste round trip times. If it's too high, we're capping responses and + // waste bandwidth. + // + // Depoyed bytecodes are currently capped at 24KB, so the minimum request + // size should be maxRequestSize / 24K. Assuming that most contracts do not + // come close to that, requesting 4x should be a good approximation. + maxCodeRequestCount = maxRequestSize / (24 * 1024) * 4 + + // maxTrieRequestCount is the maximum number of trie node blobs to request in + // a single query. If this number is too low, we're not filling responses fully + // and waste round trip times. If it's too high, we're capping responses and + // waste bandwidth. + maxTrieRequestCount = maxRequestSize / 512 +) + +var ( + // accountConcurrency is the number of chunks to split the account trie into + // to allow concurrent retrievals. + accountConcurrency = 16 + + // storageConcurrency is the number of chunks to split the a large contract + // storage trie into to allow concurrent retrievals. + storageConcurrency = 16 +) + +// ErrCancelled is returned from snap syncing if the operation was prematurely +// terminated. +var ErrCancelled = errors.New("sync cancelled") + +// accountRequest tracks a pending account range request to ensure responses are +// to actual requests and to validate any security constraints. +// +// Concurrency note: account requests and responses are handled concurrently from +// the main runloop to allow Merkle proof verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. task). That +// is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type accountRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + time time.Time // Timestamp when the request was sent + + deliver chan *accountResponse // Channel to deliver successful response on + revert chan *accountRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + timeout *time.Timer // Timer to track delivery timeout + stale chan struct{} // Channel to signal the request was dropped + + origin common.Hash // First account requested to allow continuation checks + limit common.Hash // Last account requested to allow non-overlapping chunking + + task *accountTask // Task which this request is filling (only access fields through the runloop!!) +} + +// accountResponse is an already Merkle-verified remote response to an account +// range request. It contains the subtrie for the requested account range and +// the database that's going to be filled with the internal nodes on commit. +type accountResponse struct { + task *accountTask // Task which this request is filling + + hashes []common.Hash // Account hashes in the returned range + accounts []*types.StateAccount // Expanded accounts in the returned range + + cont bool // Whether the account range has a continuation +} + +// bytecodeRequest tracks a pending bytecode request to ensure responses are to +// actual requests and to validate any security constraints. +// +// Concurrency note: bytecode requests and responses are handled concurrently from +// the main runloop to allow Keccak256 hash verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. task). That +// is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type bytecodeRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + time time.Time // Timestamp when the request was sent + + deliver chan *bytecodeResponse // Channel to deliver successful response on + revert chan *bytecodeRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + timeout *time.Timer // Timer to track delivery timeout + stale chan struct{} // Channel to signal the request was dropped + + hashes []common.Hash // Bytecode hashes to validate responses + task *accountTask // Task which this request is filling (only access fields through the runloop!!) +} + +// bytecodeResponse is an already verified remote response to a bytecode request. +type bytecodeResponse struct { + task *accountTask // Task which this request is filling + + hashes []common.Hash // Hashes of the bytecode to avoid double hashing + codes [][]byte // Actual bytecodes to store into the database (nil = missing) +} + +// storageRequest tracks a pending storage ranges request to ensure responses are +// to actual requests and to validate any security constraints. +// +// Concurrency note: storage requests and responses are handled concurrently from +// the main runloop to allow Merkle proof verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. tasks). That +// is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type storageRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + time time.Time // Timestamp when the request was sent + + deliver chan *storageResponse // Channel to deliver successful response on + revert chan *storageRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + timeout *time.Timer // Timer to track delivery timeout + stale chan struct{} // Channel to signal the request was dropped + + accounts []common.Hash // Account hashes to validate responses + roots []common.Hash // Storage roots to validate responses + + origin common.Hash // First storage slot requested to allow continuation checks + limit common.Hash // Last storage slot requested to allow non-overlapping chunking + + mainTask *accountTask // Task which this response belongs to (only access fields through the runloop!!) + subTask *storageTask // Task which this response is filling (only access fields through the runloop!!) +} + +// storageResponse is an already Merkle-verified remote response to a storage +// range request. It contains the subtries for the requested storage ranges and +// the databases that's going to be filled with the internal nodes on commit. +type storageResponse struct { + mainTask *accountTask // Task which this response belongs to + subTask *storageTask // Task which this response is filling + + accounts []common.Hash // Account hashes requested, may be only partially filled + roots []common.Hash // Storage roots requested, may be only partially filled + + hashes [][]common.Hash // Storage slot hashes in the returned range + slots [][][]byte // Storage slot values in the returned range + + cont bool // Whether the last storage range has a continuation +} + +// trienodeHealRequest tracks a pending state trie request to ensure responses +// are to actual requests and to validate any security constraints. +// +// Concurrency note: trie node requests and responses are handled concurrently from +// the main runloop to allow Keccak256 hash verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. task). That +// is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type trienodeHealRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + time time.Time // Timestamp when the request was sent + + deliver chan *trienodeHealResponse // Channel to deliver successful response on + revert chan *trienodeHealRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + timeout *time.Timer // Timer to track delivery timeout + stale chan struct{} // Channel to signal the request was dropped + + paths []string // Trie node paths for identifying trie node + hashes []common.Hash // Trie node hashes to validate responses + + task *healTask // Task which this request is filling (only access fields through the runloop!!) +} + +// trienodeHealResponse is an already verified remote response to a trie node request. +type trienodeHealResponse struct { + task *healTask // Task which this request is filling + + paths []string // Paths of the trie nodes + hashes []common.Hash // Hashes of the trie nodes to avoid double hashing + nodes [][]byte // Actual trie nodes to store into the database (nil = missing) +} + +// bytecodeHealRequest tracks a pending bytecode request to ensure responses are to +// actual requests and to validate any security constraints. +// +// Concurrency note: bytecode requests and responses are handled concurrently from +// the main runloop to allow Keccak256 hash verifications on the peer's thread and +// to drop on invalid response. The request struct must contain all the data to +// construct the response without accessing runloop internals (i.e. task). That +// is only included to allow the runloop to match a response to the task being +// synced without having yet another set of maps. +type bytecodeHealRequest struct { + peer string // Peer to which this request is assigned + id uint64 // Request ID of this request + time time.Time // Timestamp when the request was sent + + deliver chan *bytecodeHealResponse // Channel to deliver successful response on + revert chan *bytecodeHealRequest // Channel to deliver request failure on + cancel chan struct{} // Channel to track sync cancellation + timeout *time.Timer // Timer to track delivery timeout + stale chan struct{} // Channel to signal the request was dropped + + hashes []common.Hash // Bytecode hashes to validate responses + task *healTask // Task which this request is filling (only access fields through the runloop!!) +} + +// bytecodeHealResponse is an already verified remote response to a bytecode request. +type bytecodeHealResponse struct { + task *healTask // Task which this request is filling + + hashes []common.Hash // Hashes of the bytecode to avoid double hashing + codes [][]byte // Actual bytecodes to store into the database (nil = missing) +} + +// accountTask represents the sync task for a chunk of the account snapshot. +type accountTask struct { + // These fields get serialized to leveldb on shutdown + Next common.Hash // Next account to sync in this interval + Last common.Hash // Last account to sync in this interval + SubTasks map[common.Hash][]*storageTask // Storage intervals needing fetching for large contracts + + // These fields are internals used during runtime + req *accountRequest // Pending request to fill this task + res *accountResponse // Validate response filling this task + pend int // Number of pending subtasks for this round + + needCode []bool // Flags whether the filling accounts need code retrieval + needState []bool // Flags whether the filling accounts need storage retrieval + needHeal []bool // Flags whether the filling accounts's state was chunked and need healing + + codeTasks map[common.Hash]struct{} // Code hashes that need retrieval + stateTasks map[common.Hash]common.Hash // Account hashes->roots that need full state retrieval + + genBatch ethdb.Batch // Batch used by the node generator + genTrie *trie.StackTrie // Node generator from storage slots + + done bool // Flag whether the task can be removed +} + +// storageTask represents the sync task for a chunk of the storage snapshot. +type storageTask struct { + Next common.Hash // Next account to sync in this interval + Last common.Hash // Last account to sync in this interval + + // These fields are internals used during runtime + root common.Hash // Storage root hash for this instance + req *storageRequest // Pending request to fill this task + + genBatch ethdb.Batch // Batch used by the node generator + genTrie *trie.StackTrie // Node generator from storage slots + + done bool // Flag whether the task can be removed +} + +// healTask represents the sync task for healing the snap-synced chunk boundaries. +type healTask struct { + scheduler *trie.Sync // State trie sync scheduler defining the tasks + + trieTasks map[string]common.Hash // Set of trie node tasks currently queued for retrieval, indexed by node path + codeTasks map[common.Hash]struct{} // Set of byte code tasks currently queued for retrieval, indexed by code hash +} + +// SyncProgress is a database entry to allow suspending and resuming a snapshot state +// sync. Opposed to full and fast sync, there is no way to restart a suspended +// snap sync without prior knowledge of the suspension point. +type SyncProgress struct { + Tasks []*accountTask // The suspended account tasks (contract tasks within) + + // Status report during syncing phase + AccountSynced uint64 // Number of accounts downloaded + AccountBytes common.StorageSize // Number of account trie bytes persisted to disk + BytecodeSynced uint64 // Number of bytecodes downloaded + BytecodeBytes common.StorageSize // Number of bytecode bytes downloaded + StorageSynced uint64 // Number of storage slots downloaded + StorageBytes common.StorageSize // Number of storage trie bytes persisted to disk + + // Status report during healing phase + TrienodeHealSynced uint64 // Number of state trie nodes downloaded + TrienodeHealBytes common.StorageSize // Number of state trie bytes persisted to disk + BytecodeHealSynced uint64 // Number of bytecodes downloaded + BytecodeHealBytes common.StorageSize // Number of bytecodes persisted to disk +} + +// SyncPending is analogous to SyncProgress, but it's used to report on pending +// ephemeral sync progress that doesn't get persisted into the database. +type SyncPending struct { + TrienodeHeal uint64 // Number of state trie nodes pending + BytecodeHeal uint64 // Number of bytecodes pending +} + +// SyncPeer abstracts out the methods required for a peer to be synced against +// with the goal of allowing the construction of mock peers without the full +// blown networking. +type SyncPeer interface { + // ID retrieves the peer's unique identifier. + ID() string + + // RequestAccountRange fetches a batch of accounts rooted in a specific account + // trie, starting with the origin. + RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error + + // RequestStorageRanges fetches a batch of storage slots belonging to one or + // more accounts. If slots from only one account is requested, an origin marker + // may also be used to retrieve from there. + RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error + + // RequestByteCodes fetches a batch of bytecodes by hash. + RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error + + // RequestTrieNodes fetches a batch of account or storage trie nodes rooted in + // a specific state trie. + RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error + + // Log retrieves the peer's own contextual logger. + Log() log.Logger +} + +// Syncer is an Ethereum account and storage trie syncer based on snapshots and +// the snap protocol. It's purpose is to download all the accounts and storage +// slots from remote peers and reassemble chunks of the state trie, on top of +// which a state sync can be run to fix any gaps / overlaps. +// +// Every network request has a variety of failure events: +// - The peer disconnects after task assignment, failing to send the request +// - The peer disconnects after sending the request, before delivering on it +// - The peer remains connected, but does not deliver a response in time +// - The peer delivers a stale response after a previous timeout +// - The peer delivers a refusal to serve the requested state +type Syncer struct { + db ethdb.KeyValueStore // Database to store the trie nodes into (and dedup) + + root common.Hash // Current state trie root being synced + tasks []*accountTask // Current account task set being synced + snapped bool // Flag to signal that snap phase is done + healer *healTask // Current state healing task being executed + update chan struct{} // Notification channel for possible sync progression + + peers map[string]SyncPeer // Currently active peers to download from + peerJoin *event.Feed // Event feed to react to peers joining + peerDrop *event.Feed // Event feed to react to peers dropping + rates *msgrate.Trackers // Message throughput rates for peers + + // Request tracking during syncing phase + statelessPeers map[string]struct{} // Peers that failed to deliver state data + accountIdlers map[string]struct{} // Peers that aren't serving account requests + bytecodeIdlers map[string]struct{} // Peers that aren't serving bytecode requests + storageIdlers map[string]struct{} // Peers that aren't serving storage requests + + accountReqs map[uint64]*accountRequest // Account requests currently running + bytecodeReqs map[uint64]*bytecodeRequest // Bytecode requests currently running + storageReqs map[uint64]*storageRequest // Storage requests currently running + + accountSynced uint64 // Number of accounts downloaded + accountBytes common.StorageSize // Number of account trie bytes persisted to disk + bytecodeSynced uint64 // Number of bytecodes downloaded + bytecodeBytes common.StorageSize // Number of bytecode bytes downloaded + storageSynced uint64 // Number of storage slots downloaded + storageBytes common.StorageSize // Number of storage trie bytes persisted to disk + + extProgress *SyncProgress // progress that can be exposed to external caller. + + // Request tracking during healing phase + trienodeHealIdlers map[string]struct{} // Peers that aren't serving trie node requests + bytecodeHealIdlers map[string]struct{} // Peers that aren't serving bytecode requests + + trienodeHealReqs map[uint64]*trienodeHealRequest // Trie node requests currently running + bytecodeHealReqs map[uint64]*bytecodeHealRequest // Bytecode requests currently running + + trienodeHealSynced uint64 // Number of state trie nodes downloaded + trienodeHealBytes common.StorageSize // Number of state trie bytes persisted to disk + trienodeHealDups uint64 // Number of state trie nodes already processed + trienodeHealNops uint64 // Number of state trie nodes not requested + bytecodeHealSynced uint64 // Number of bytecodes downloaded + bytecodeHealBytes common.StorageSize // Number of bytecodes persisted to disk + bytecodeHealDups uint64 // Number of bytecodes already processed + bytecodeHealNops uint64 // Number of bytecodes not requested + + stateWriter ethdb.Batch // Shared batch writer used for persisting raw states + accountHealed uint64 // Number of accounts downloaded during the healing stage + accountHealedBytes common.StorageSize // Number of raw account bytes persisted to disk during the healing stage + storageHealed uint64 // Number of storage slots downloaded during the healing stage + storageHealedBytes common.StorageSize // Number of raw storage bytes persisted to disk during the healing stage + + startTime time.Time // Time instance when snapshot sync started + logTime time.Time // Time instance when status was last reported + + pend sync.WaitGroup // Tracks network request goroutines for graceful shutdown + lock sync.RWMutex // Protects fields that can change outside of sync (peers, reqs, root) +} + +// NewSyncer creates a new snapshot syncer to download the Ethereum state over the +// snap protocol. +func NewSyncer(db ethdb.KeyValueStore) *Syncer { + return &Syncer{ + db: db, + + peers: make(map[string]SyncPeer), + peerJoin: new(event.Feed), + peerDrop: new(event.Feed), + rates: msgrate.NewTrackers(log.New("proto", "snap")), + update: make(chan struct{}, 1), + + accountIdlers: make(map[string]struct{}), + storageIdlers: make(map[string]struct{}), + bytecodeIdlers: make(map[string]struct{}), + + accountReqs: make(map[uint64]*accountRequest), + storageReqs: make(map[uint64]*storageRequest), + bytecodeReqs: make(map[uint64]*bytecodeRequest), + + trienodeHealIdlers: make(map[string]struct{}), + bytecodeHealIdlers: make(map[string]struct{}), + + trienodeHealReqs: make(map[uint64]*trienodeHealRequest), + bytecodeHealReqs: make(map[uint64]*bytecodeHealRequest), + stateWriter: db.NewBatch(), + + extProgress: new(SyncProgress), + } +} + +// Register injects a new data source into the syncer's peerset. +func (s *Syncer) Register(peer SyncPeer) error { + // Make sure the peer is not registered yet + id := peer.ID() + + s.lock.Lock() + if _, ok := s.peers[id]; ok { + log.Error("Snap peer already registered", "id", id) + + s.lock.Unlock() + return errors.New("already registered") + } + s.peers[id] = peer + s.rates.Track(id, msgrate.NewTracker(s.rates.MeanCapacities(), s.rates.MedianRoundTrip())) + + // Mark the peer as idle, even if no sync is running + s.accountIdlers[id] = struct{}{} + s.storageIdlers[id] = struct{}{} + s.bytecodeIdlers[id] = struct{}{} + s.trienodeHealIdlers[id] = struct{}{} + s.bytecodeHealIdlers[id] = struct{}{} + s.lock.Unlock() + + // Notify any active syncs that a new peer can be assigned data + s.peerJoin.Send(id) + return nil +} + +// Unregister injects a new data source into the syncer's peerset. +func (s *Syncer) Unregister(id string) error { + // Remove all traces of the peer from the registry + s.lock.Lock() + if _, ok := s.peers[id]; !ok { + log.Error("Snap peer not registered", "id", id) + + s.lock.Unlock() + return errors.New("not registered") + } + delete(s.peers, id) + s.rates.Untrack(id) + + // Remove status markers, even if no sync is running + delete(s.statelessPeers, id) + + delete(s.accountIdlers, id) + delete(s.storageIdlers, id) + delete(s.bytecodeIdlers, id) + delete(s.trienodeHealIdlers, id) + delete(s.bytecodeHealIdlers, id) + s.lock.Unlock() + + // Notify any active syncs that pending requests need to be reverted + s.peerDrop.Send(id) + return nil +} + +// Sync starts (or resumes a previous) sync cycle to iterate over a state trie +// with the given root and reconstruct the nodes based on the snapshot leaves. +// Previously downloaded segments will not be redownloaded of fixed, rather any +// errors will be healed after the leaves are fully accumulated. +func (s *Syncer) Sync(root common.Hash, cancel chan struct{}) error { + // Move the trie root from any previous value, revert stateless markers for + // any peers and initialize the syncer if it was not yet run + s.lock.Lock() + s.root = root + s.healer = &healTask{ + scheduler: state.NewStateSync(root, s.db, s.onHealState), + trieTasks: make(map[string]common.Hash), + codeTasks: make(map[common.Hash]struct{}), + } + s.statelessPeers = make(map[string]struct{}) + s.lock.Unlock() + + if s.startTime == (time.Time{}) { + s.startTime = time.Now() + } + // Retrieve the previous sync status from LevelDB and abort if already synced + s.loadSyncStatus() + if len(s.tasks) == 0 && s.healer.scheduler.Pending() == 0 { + log.Debug("Snapshot sync already completed") + return nil + } + defer func() { // Persist any progress, independent of failure + for _, task := range s.tasks { + s.forwardAccountTask(task) + } + s.cleanAccountTasks() + s.saveSyncStatus() + }() + + log.Debug("Starting snapshot sync cycle", "root", root) + + // Flush out the last committed raw states + defer func() { + if s.stateWriter.ValueSize() > 0 { + s.stateWriter.Write() + s.stateWriter.Reset() + } + }() + defer s.report(true) + + // Whether sync completed or not, disregard any future packets + defer func() { + log.Debug("Terminating snapshot sync cycle", "root", root) + s.lock.Lock() + s.accountReqs = make(map[uint64]*accountRequest) + s.storageReqs = make(map[uint64]*storageRequest) + s.bytecodeReqs = make(map[uint64]*bytecodeRequest) + s.trienodeHealReqs = make(map[uint64]*trienodeHealRequest) + s.bytecodeHealReqs = make(map[uint64]*bytecodeHealRequest) + s.lock.Unlock() + }() + // Keep scheduling sync tasks + peerJoin := make(chan string, 16) + peerJoinSub := s.peerJoin.Subscribe(peerJoin) + defer peerJoinSub.Unsubscribe() + + peerDrop := make(chan string, 16) + peerDropSub := s.peerDrop.Subscribe(peerDrop) + defer peerDropSub.Unsubscribe() + + // Create a set of unique channels for this sync cycle. We need these to be + // ephemeral so a data race doesn't accidentally deliver something stale on + // a persistent channel across syncs (yup, this happened) + var ( + accountReqFails = make(chan *accountRequest) + storageReqFails = make(chan *storageRequest) + bytecodeReqFails = make(chan *bytecodeRequest) + accountResps = make(chan *accountResponse) + storageResps = make(chan *storageResponse) + bytecodeResps = make(chan *bytecodeResponse) + trienodeHealReqFails = make(chan *trienodeHealRequest) + bytecodeHealReqFails = make(chan *bytecodeHealRequest) + trienodeHealResps = make(chan *trienodeHealResponse) + bytecodeHealResps = make(chan *bytecodeHealResponse) + ) + for { + // Remove all completed tasks and terminate sync if everything's done + s.cleanStorageTasks() + s.cleanAccountTasks() + if len(s.tasks) == 0 && s.healer.scheduler.Pending() == 0 { + return nil + } + // Assign all the data retrieval tasks to any free peers + s.assignAccountTasks(accountResps, accountReqFails, cancel) + s.assignBytecodeTasks(bytecodeResps, bytecodeReqFails, cancel) + s.assignStorageTasks(storageResps, storageReqFails, cancel) + + if len(s.tasks) == 0 { + // Sync phase done, run heal phase + s.assignTrienodeHealTasks(trienodeHealResps, trienodeHealReqFails, cancel) + s.assignBytecodeHealTasks(bytecodeHealResps, bytecodeHealReqFails, cancel) + } + // Update sync progress + s.lock.Lock() + s.extProgress = &SyncProgress{ + AccountSynced: s.accountSynced, + AccountBytes: s.accountBytes, + BytecodeSynced: s.bytecodeSynced, + BytecodeBytes: s.bytecodeBytes, + StorageSynced: s.storageSynced, + StorageBytes: s.storageBytes, + TrienodeHealSynced: s.trienodeHealSynced, + TrienodeHealBytes: s.trienodeHealBytes, + BytecodeHealSynced: s.bytecodeHealSynced, + BytecodeHealBytes: s.bytecodeHealBytes, + } + s.lock.Unlock() + // Wait for something to happen + select { + case <-s.update: + // Something happened (new peer, delivery, timeout), recheck tasks + case <-peerJoin: + // A new peer joined, try to schedule it new tasks + case id := <-peerDrop: + s.revertRequests(id) + case <-cancel: + return ErrCancelled + + case req := <-accountReqFails: + s.revertAccountRequest(req) + case req := <-bytecodeReqFails: + s.revertBytecodeRequest(req) + case req := <-storageReqFails: + s.revertStorageRequest(req) + case req := <-trienodeHealReqFails: + s.revertTrienodeHealRequest(req) + case req := <-bytecodeHealReqFails: + s.revertBytecodeHealRequest(req) + + case res := <-accountResps: + s.processAccountResponse(res) + case res := <-bytecodeResps: + s.processBytecodeResponse(res) + case res := <-storageResps: + s.processStorageResponse(res) + case res := <-trienodeHealResps: + s.processTrienodeHealResponse(res) + case res := <-bytecodeHealResps: + s.processBytecodeHealResponse(res) + } + // Report stats if something meaningful happened + s.report(false) + } +} + +// loadSyncStatus retrieves a previously aborted sync status from the database, +// or generates a fresh one if none is available. +func (s *Syncer) loadSyncStatus() { + var progress SyncProgress + + if status := rawdb.ReadSnapshotSyncStatus(s.db); status != nil { + if err := json.Unmarshal(status, &progress); err != nil { + log.Error("Failed to decode snap sync status", "err", err) + } else { + for _, task := range progress.Tasks { + log.Debug("Scheduled account sync task", "from", task.Next, "last", task.Last) + } + s.tasks = progress.Tasks + for _, task := range s.tasks { + task.genBatch = ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.accountBytes += common.StorageSize(len(key) + len(value)) + }, + } + task.genTrie = trie.NewStackTrie(task.genBatch) + + for accountHash, subtasks := range task.SubTasks { + for _, subtask := range subtasks { + subtask.genBatch = ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.storageBytes += common.StorageSize(len(key) + len(value)) + }, + } + subtask.genTrie = trie.NewStackTrieWithOwner(subtask.genBatch, accountHash) + } + } + } + s.lock.Lock() + defer s.lock.Unlock() + + s.snapped = len(s.tasks) == 0 + + s.accountSynced = progress.AccountSynced + s.accountBytes = progress.AccountBytes + s.bytecodeSynced = progress.BytecodeSynced + s.bytecodeBytes = progress.BytecodeBytes + s.storageSynced = progress.StorageSynced + s.storageBytes = progress.StorageBytes + + s.trienodeHealSynced = progress.TrienodeHealSynced + s.trienodeHealBytes = progress.TrienodeHealBytes + s.bytecodeHealSynced = progress.BytecodeHealSynced + s.bytecodeHealBytes = progress.BytecodeHealBytes + return + } + } + // Either we've failed to decode the previous state, or there was none. + // Start a fresh sync by chunking up the account range and scheduling + // them for retrieval. + s.tasks = nil + s.accountSynced, s.accountBytes = 0, 0 + s.bytecodeSynced, s.bytecodeBytes = 0, 0 + s.storageSynced, s.storageBytes = 0, 0 + s.trienodeHealSynced, s.trienodeHealBytes = 0, 0 + s.bytecodeHealSynced, s.bytecodeHealBytes = 0, 0 + + var next common.Hash + step := new(big.Int).Sub( + new(big.Int).Div( + new(big.Int).Exp(common.Big2, common.Big256, nil), + big.NewInt(int64(accountConcurrency)), + ), common.Big1, + ) + for i := 0; i < accountConcurrency; i++ { + last := common.BigToHash(new(big.Int).Add(next.Big(), step)) + if i == accountConcurrency-1 { + // Make sure we don't overflow if the step is not a proper divisor + last = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + } + batch := ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.accountBytes += common.StorageSize(len(key) + len(value)) + }, + } + s.tasks = append(s.tasks, &accountTask{ + Next: next, + Last: last, + SubTasks: make(map[common.Hash][]*storageTask), + genBatch: batch, + genTrie: trie.NewStackTrie(batch), + }) + log.Debug("Created account sync task", "from", next, "last", last) + next = common.BigToHash(new(big.Int).Add(last.Big(), common.Big1)) + } +} + +// saveSyncStatus marshals the remaining sync tasks into leveldb. +func (s *Syncer) saveSyncStatus() { + // Serialize any partial progress to disk before spinning down + for _, task := range s.tasks { + if err := task.genBatch.Write(); err != nil { + log.Error("Failed to persist account slots", "err", err) + } + for _, subtasks := range task.SubTasks { + for _, subtask := range subtasks { + if err := subtask.genBatch.Write(); err != nil { + log.Error("Failed to persist storage slots", "err", err) + } + } + } + } + // Store the actual progress markers + progress := &SyncProgress{ + Tasks: s.tasks, + AccountSynced: s.accountSynced, + AccountBytes: s.accountBytes, + BytecodeSynced: s.bytecodeSynced, + BytecodeBytes: s.bytecodeBytes, + StorageSynced: s.storageSynced, + StorageBytes: s.storageBytes, + TrienodeHealSynced: s.trienodeHealSynced, + TrienodeHealBytes: s.trienodeHealBytes, + BytecodeHealSynced: s.bytecodeHealSynced, + BytecodeHealBytes: s.bytecodeHealBytes, + } + status, err := json.Marshal(progress) + if err != nil { + panic(err) // This can only fail during implementation + } + rawdb.WriteSnapshotSyncStatus(s.db, status) +} + +// Progress returns the snap sync status statistics. +func (s *Syncer) Progress() (*SyncProgress, *SyncPending) { + s.lock.Lock() + defer s.lock.Unlock() + pending := new(SyncPending) + if s.healer != nil { + pending.TrienodeHeal = uint64(len(s.healer.trieTasks)) + pending.BytecodeHeal = uint64(len(s.healer.codeTasks)) + } + return s.extProgress, pending +} + +// cleanAccountTasks removes account range retrieval tasks that have already been +// completed. +func (s *Syncer) cleanAccountTasks() { + // If the sync was already done before, don't even bother + if len(s.tasks) == 0 { + return + } + // Sync wasn't finished previously, check for any task that can be finalized + for i := 0; i < len(s.tasks); i++ { + if s.tasks[i].done { + s.tasks = append(s.tasks[:i], s.tasks[i+1:]...) + i-- + } + } + // If everything was just finalized just, generate the account trie and start heal + if len(s.tasks) == 0 { + s.lock.Lock() + s.snapped = true + s.lock.Unlock() + + // Push the final sync report + s.reportSyncProgress(true) + } +} + +// cleanStorageTasks iterates over all the account tasks and storage sub-tasks +// within, cleaning any that have been completed. +func (s *Syncer) cleanStorageTasks() { + for _, task := range s.tasks { + for account, subtasks := range task.SubTasks { + // Remove storage range retrieval tasks that completed + for j := 0; j < len(subtasks); j++ { + if subtasks[j].done { + subtasks = append(subtasks[:j], subtasks[j+1:]...) + j-- + } + } + if len(subtasks) > 0 { + task.SubTasks[account] = subtasks + continue + } + // If all storage chunks are done, mark the account as done too + for j, hash := range task.res.hashes { + if hash == account { + task.needState[j] = false + } + } + delete(task.SubTasks, account) + task.pend-- + + // If this was the last pending task, forward the account task + if task.pend == 0 { + s.forwardAccountTask(task) + } + } + } +} + +// assignAccountTasks attempts to match idle peers to pending account range +// retrievals. +func (s *Syncer) assignAccountTasks(success chan *accountResponse, fail chan *accountRequest, cancel chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + // Sort the peers by download capacity to use faster ones if many available + idlers := &capacitySort{ + ids: make([]string, 0, len(s.accountIdlers)), + caps: make([]int, 0, len(s.accountIdlers)), + } + targetTTL := s.rates.TargetTimeout() + for id := range s.accountIdlers { + if _, ok := s.statelessPeers[id]; ok { + continue + } + idlers.ids = append(idlers.ids, id) + idlers.caps = append(idlers.caps, s.rates.Capacity(id, AccountRangeMsg, targetTTL)) + } + if len(idlers.ids) == 0 { + return + } + sort.Sort(sort.Reverse(idlers)) + + // Iterate over all the tasks and try to find a pending one + for _, task := range s.tasks { + // Skip any tasks already filling + if task.req != nil || task.res != nil { + continue + } + // Task pending retrieval, try to find an idle peer. If no such peer + // exists, we probably assigned tasks for all (or they are stateless). + // Abort the entire assignment mechanism. + if len(idlers.ids) == 0 { + return + } + var ( + idle = idlers.ids[0] + peer = s.peers[idle] + cap = idlers.caps[0] + ) + idlers.ids, idlers.caps = idlers.ids[1:], idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.accountReqs[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer + req := &accountRequest{ + peer: idle, + id: reqid, + time: time.Now(), + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + origin: task.Next, + limit: task.Last, + task: task, + } + req.timeout = time.AfterFunc(s.rates.TargetTimeout(), func() { + peer.Log().Debug("Account range request timed out", "reqid", reqid) + s.rates.Update(idle, AccountRangeMsg, 0, 0) + s.scheduleRevertAccountRequest(req) + }) + s.accountReqs[reqid] = req + delete(s.accountIdlers, idle) + + s.pend.Add(1) + go func(root common.Hash) { + defer s.pend.Done() + + // Attempt to send the remote request and revert if it fails + if cap > maxRequestSize { + cap = maxRequestSize + } + if cap < minRequestSize { // Don't bother with peers below a bare minimum performance + cap = minRequestSize + } + if err := peer.RequestAccountRange(reqid, root, req.origin, req.limit, uint64(cap)); err != nil { + peer.Log().Debug("Failed to request account range", "err", err) + s.scheduleRevertAccountRequest(req) + } + }(s.root) + + // Inject the request into the task to block further assignments + task.req = req + } +} + +// assignBytecodeTasks attempts to match idle peers to pending code retrievals. +func (s *Syncer) assignBytecodeTasks(success chan *bytecodeResponse, fail chan *bytecodeRequest, cancel chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + // Sort the peers by download capacity to use faster ones if many available + idlers := &capacitySort{ + ids: make([]string, 0, len(s.bytecodeIdlers)), + caps: make([]int, 0, len(s.bytecodeIdlers)), + } + targetTTL := s.rates.TargetTimeout() + for id := range s.bytecodeIdlers { + if _, ok := s.statelessPeers[id]; ok { + continue + } + idlers.ids = append(idlers.ids, id) + idlers.caps = append(idlers.caps, s.rates.Capacity(id, ByteCodesMsg, targetTTL)) + } + if len(idlers.ids) == 0 { + return + } + sort.Sort(sort.Reverse(idlers)) + + // Iterate over all the tasks and try to find a pending one + for _, task := range s.tasks { + // Skip any tasks not in the bytecode retrieval phase + if task.res == nil { + continue + } + // Skip tasks that are already retrieving (or done with) all codes + if len(task.codeTasks) == 0 { + continue + } + // Task pending retrieval, try to find an idle peer. If no such peer + // exists, we probably assigned tasks for all (or they are stateless). + // Abort the entire assignment mechanism. + if len(idlers.ids) == 0 { + return + } + var ( + idle = idlers.ids[0] + peer = s.peers[idle] + cap = idlers.caps[0] + ) + idlers.ids, idlers.caps = idlers.ids[1:], idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.bytecodeReqs[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer + if cap > maxCodeRequestCount { + cap = maxCodeRequestCount + } + hashes := make([]common.Hash, 0, cap) + for hash := range task.codeTasks { + delete(task.codeTasks, hash) + hashes = append(hashes, hash) + if len(hashes) >= cap { + break + } + } + req := &bytecodeRequest{ + peer: idle, + id: reqid, + time: time.Now(), + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + hashes: hashes, + task: task, + } + req.timeout = time.AfterFunc(s.rates.TargetTimeout(), func() { + peer.Log().Debug("Bytecode request timed out", "reqid", reqid) + s.rates.Update(idle, ByteCodesMsg, 0, 0) + s.scheduleRevertBytecodeRequest(req) + }) + s.bytecodeReqs[reqid] = req + delete(s.bytecodeIdlers, idle) + + s.pend.Add(1) + go func() { + defer s.pend.Done() + + // Attempt to send the remote request and revert if it fails + if err := peer.RequestByteCodes(reqid, hashes, maxRequestSize); err != nil { + log.Debug("Failed to request bytecodes", "err", err) + s.scheduleRevertBytecodeRequest(req) + } + }() + } +} + +// assignStorageTasks attempts to match idle peers to pending storage range +// retrievals. +func (s *Syncer) assignStorageTasks(success chan *storageResponse, fail chan *storageRequest, cancel chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + // Sort the peers by download capacity to use faster ones if many available + idlers := &capacitySort{ + ids: make([]string, 0, len(s.storageIdlers)), + caps: make([]int, 0, len(s.storageIdlers)), + } + targetTTL := s.rates.TargetTimeout() + for id := range s.storageIdlers { + if _, ok := s.statelessPeers[id]; ok { + continue + } + idlers.ids = append(idlers.ids, id) + idlers.caps = append(idlers.caps, s.rates.Capacity(id, StorageRangesMsg, targetTTL)) + } + if len(idlers.ids) == 0 { + return + } + sort.Sort(sort.Reverse(idlers)) + + // Iterate over all the tasks and try to find a pending one + for _, task := range s.tasks { + // Skip any tasks not in the storage retrieval phase + if task.res == nil { + continue + } + // Skip tasks that are already retrieving (or done with) all small states + if len(task.SubTasks) == 0 && len(task.stateTasks) == 0 { + continue + } + // Task pending retrieval, try to find an idle peer. If no such peer + // exists, we probably assigned tasks for all (or they are stateless). + // Abort the entire assignment mechanism. + if len(idlers.ids) == 0 { + return + } + var ( + idle = idlers.ids[0] + peer = s.peers[idle] + cap = idlers.caps[0] + ) + idlers.ids, idlers.caps = idlers.ids[1:], idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.storageReqs[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer. If there are + // large contract tasks pending, complete those before diving into + // even more new contracts. + if cap > maxRequestSize { + cap = maxRequestSize + } + if cap < minRequestSize { // Don't bother with peers below a bare minimum performance + cap = minRequestSize + } + storageSets := cap / 1024 + + var ( + accounts = make([]common.Hash, 0, storageSets) + roots = make([]common.Hash, 0, storageSets) + subtask *storageTask + ) + for account, subtasks := range task.SubTasks { + for _, st := range subtasks { + // Skip any subtasks already filling + if st.req != nil { + continue + } + // Found an incomplete storage chunk, schedule it + accounts = append(accounts, account) + roots = append(roots, st.root) + subtask = st + break // Large contract chunks are downloaded individually + } + if subtask != nil { + break // Large contract chunks are downloaded individually + } + } + if subtask == nil { + // No large contract required retrieval, but small ones available + for account, root := range task.stateTasks { + delete(task.stateTasks, account) + + accounts = append(accounts, account) + roots = append(roots, root) + + if len(accounts) >= storageSets { + break + } + } + } + // If nothing was found, it means this task is actually already fully + // retrieving, but large contracts are hard to detect. Skip to the next. + if len(accounts) == 0 { + continue + } + req := &storageRequest{ + peer: idle, + id: reqid, + time: time.Now(), + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + accounts: accounts, + roots: roots, + mainTask: task, + subTask: subtask, + } + if subtask != nil { + req.origin = subtask.Next + req.limit = subtask.Last + } + req.timeout = time.AfterFunc(s.rates.TargetTimeout(), func() { + peer.Log().Debug("Storage request timed out", "reqid", reqid) + s.rates.Update(idle, StorageRangesMsg, 0, 0) + s.scheduleRevertStorageRequest(req) + }) + s.storageReqs[reqid] = req + delete(s.storageIdlers, idle) + + s.pend.Add(1) + go func(root common.Hash) { + defer s.pend.Done() + + // Attempt to send the remote request and revert if it fails + var origin, limit []byte + if subtask != nil { + origin, limit = req.origin[:], req.limit[:] + } + if err := peer.RequestStorageRanges(reqid, root, accounts, origin, limit, uint64(cap)); err != nil { + log.Debug("Failed to request storage", "err", err) + s.scheduleRevertStorageRequest(req) + } + }(s.root) + + // Inject the request into the subtask to block further assignments + if subtask != nil { + subtask.req = req + } + } +} + +// assignTrienodeHealTasks attempts to match idle peers to trie node requests to +// heal any trie errors caused by the snap sync's chunked retrieval model. +func (s *Syncer) assignTrienodeHealTasks(success chan *trienodeHealResponse, fail chan *trienodeHealRequest, cancel chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + // Sort the peers by download capacity to use faster ones if many available + idlers := &capacitySort{ + ids: make([]string, 0, len(s.trienodeHealIdlers)), + caps: make([]int, 0, len(s.trienodeHealIdlers)), + } + targetTTL := s.rates.TargetTimeout() + for id := range s.trienodeHealIdlers { + if _, ok := s.statelessPeers[id]; ok { + continue + } + idlers.ids = append(idlers.ids, id) + idlers.caps = append(idlers.caps, s.rates.Capacity(id, TrieNodesMsg, targetTTL)) + } + if len(idlers.ids) == 0 { + return + } + sort.Sort(sort.Reverse(idlers)) + + // Iterate over pending tasks and try to find a peer to retrieve with + for len(s.healer.trieTasks) > 0 || s.healer.scheduler.Pending() > 0 { + // If there are not enough trie tasks queued to fully assign, fill the + // queue from the state sync scheduler. The trie synced schedules these + // together with bytecodes, so we need to queue them combined. + var ( + have = len(s.healer.trieTasks) + len(s.healer.codeTasks) + want = maxTrieRequestCount + maxCodeRequestCount + ) + if have < want { + paths, hashes, codes := s.healer.scheduler.Missing(want - have) + for i, path := range paths { + s.healer.trieTasks[path] = hashes[i] + } + for _, hash := range codes { + s.healer.codeTasks[hash] = struct{}{} + } + } + // If all the heal tasks are bytecodes or already downloading, bail + if len(s.healer.trieTasks) == 0 { + return + } + // Task pending retrieval, try to find an idle peer. If no such peer + // exists, we probably assigned tasks for all (or they are stateless). + // Abort the entire assignment mechanism. + if len(idlers.ids) == 0 { + return + } + var ( + idle = idlers.ids[0] + peer = s.peers[idle] + cap = idlers.caps[0] + ) + idlers.ids, idlers.caps = idlers.ids[1:], idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.trienodeHealReqs[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer + if cap > maxTrieRequestCount { + cap = maxTrieRequestCount + } + var ( + hashes = make([]common.Hash, 0, cap) + paths = make([]string, 0, cap) + pathsets = make([]TrieNodePathSet, 0, cap) + ) + for path, hash := range s.healer.trieTasks { + delete(s.healer.trieTasks, path) + + paths = append(paths, path) + hashes = append(hashes, hash) + if len(paths) >= cap { + break + } + } + // Group requests by account hash + paths, hashes, _, pathsets = sortByAccountPath(paths, hashes) + req := &trienodeHealRequest{ + peer: idle, + id: reqid, + time: time.Now(), + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + paths: paths, + hashes: hashes, + task: s.healer, + } + req.timeout = time.AfterFunc(s.rates.TargetTimeout(), func() { + peer.Log().Debug("Trienode heal request timed out", "reqid", reqid) + s.rates.Update(idle, TrieNodesMsg, 0, 0) + s.scheduleRevertTrienodeHealRequest(req) + }) + s.trienodeHealReqs[reqid] = req + delete(s.trienodeHealIdlers, idle) + + s.pend.Add(1) + go func(root common.Hash) { + defer s.pend.Done() + + // Attempt to send the remote request and revert if it fails + if err := peer.RequestTrieNodes(reqid, root, pathsets, maxRequestSize); err != nil { + log.Debug("Failed to request trienode healers", "err", err) + s.scheduleRevertTrienodeHealRequest(req) + } + }(s.root) + } +} + +// assignBytecodeHealTasks attempts to match idle peers to bytecode requests to +// heal any trie errors caused by the snap sync's chunked retrieval model. +func (s *Syncer) assignBytecodeHealTasks(success chan *bytecodeHealResponse, fail chan *bytecodeHealRequest, cancel chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + // Sort the peers by download capacity to use faster ones if many available + idlers := &capacitySort{ + ids: make([]string, 0, len(s.bytecodeHealIdlers)), + caps: make([]int, 0, len(s.bytecodeHealIdlers)), + } + targetTTL := s.rates.TargetTimeout() + for id := range s.bytecodeHealIdlers { + if _, ok := s.statelessPeers[id]; ok { + continue + } + idlers.ids = append(idlers.ids, id) + idlers.caps = append(idlers.caps, s.rates.Capacity(id, ByteCodesMsg, targetTTL)) + } + if len(idlers.ids) == 0 { + return + } + sort.Sort(sort.Reverse(idlers)) + + // Iterate over pending tasks and try to find a peer to retrieve with + for len(s.healer.codeTasks) > 0 || s.healer.scheduler.Pending() > 0 { + // If there are not enough trie tasks queued to fully assign, fill the + // queue from the state sync scheduler. The trie synced schedules these + // together with trie nodes, so we need to queue them combined. + var ( + have = len(s.healer.trieTasks) + len(s.healer.codeTasks) + want = maxTrieRequestCount + maxCodeRequestCount + ) + if have < want { + paths, hashes, codes := s.healer.scheduler.Missing(want - have) + for i, path := range paths { + s.healer.trieTasks[path] = hashes[i] + } + for _, hash := range codes { + s.healer.codeTasks[hash] = struct{}{} + } + } + // If all the heal tasks are trienodes or already downloading, bail + if len(s.healer.codeTasks) == 0 { + return + } + // Task pending retrieval, try to find an idle peer. If no such peer + // exists, we probably assigned tasks for all (or they are stateless). + // Abort the entire assignment mechanism. + if len(idlers.ids) == 0 { + return + } + var ( + idle = idlers.ids[0] + peer = s.peers[idle] + cap = idlers.caps[0] + ) + idlers.ids, idlers.caps = idlers.ids[1:], idlers.caps[1:] + + // Matched a pending task to an idle peer, allocate a unique request id + var reqid uint64 + for { + reqid = uint64(rand.Int63()) + if reqid == 0 { + continue + } + if _, ok := s.bytecodeHealReqs[reqid]; ok { + continue + } + break + } + // Generate the network query and send it to the peer + if cap > maxCodeRequestCount { + cap = maxCodeRequestCount + } + hashes := make([]common.Hash, 0, cap) + for hash := range s.healer.codeTasks { + delete(s.healer.codeTasks, hash) + + hashes = append(hashes, hash) + if len(hashes) >= cap { + break + } + } + req := &bytecodeHealRequest{ + peer: idle, + id: reqid, + time: time.Now(), + deliver: success, + revert: fail, + cancel: cancel, + stale: make(chan struct{}), + hashes: hashes, + task: s.healer, + } + req.timeout = time.AfterFunc(s.rates.TargetTimeout(), func() { + peer.Log().Debug("Bytecode heal request timed out", "reqid", reqid) + s.rates.Update(idle, ByteCodesMsg, 0, 0) + s.scheduleRevertBytecodeHealRequest(req) + }) + s.bytecodeHealReqs[reqid] = req + delete(s.bytecodeHealIdlers, idle) + + s.pend.Add(1) + go func() { + defer s.pend.Done() + + // Attempt to send the remote request and revert if it fails + if err := peer.RequestByteCodes(reqid, hashes, maxRequestSize); err != nil { + log.Debug("Failed to request bytecode healers", "err", err) + s.scheduleRevertBytecodeHealRequest(req) + } + }() + } +} + +// revertRequests locates all the currently pending requests from a particular +// peer and reverts them, rescheduling for others to fulfill. +func (s *Syncer) revertRequests(peer string) { + // Gather the requests first, revertals need the lock too + s.lock.Lock() + var accountReqs []*accountRequest + for _, req := range s.accountReqs { + if req.peer == peer { + accountReqs = append(accountReqs, req) + } + } + var bytecodeReqs []*bytecodeRequest + for _, req := range s.bytecodeReqs { + if req.peer == peer { + bytecodeReqs = append(bytecodeReqs, req) + } + } + var storageReqs []*storageRequest + for _, req := range s.storageReqs { + if req.peer == peer { + storageReqs = append(storageReqs, req) + } + } + var trienodeHealReqs []*trienodeHealRequest + for _, req := range s.trienodeHealReqs { + if req.peer == peer { + trienodeHealReqs = append(trienodeHealReqs, req) + } + } + var bytecodeHealReqs []*bytecodeHealRequest + for _, req := range s.bytecodeHealReqs { + if req.peer == peer { + bytecodeHealReqs = append(bytecodeHealReqs, req) + } + } + s.lock.Unlock() + + // Revert all the requests matching the peer + for _, req := range accountReqs { + s.revertAccountRequest(req) + } + for _, req := range bytecodeReqs { + s.revertBytecodeRequest(req) + } + for _, req := range storageReqs { + s.revertStorageRequest(req) + } + for _, req := range trienodeHealReqs { + s.revertTrienodeHealRequest(req) + } + for _, req := range bytecodeHealReqs { + s.revertBytecodeHealRequest(req) + } +} + +// scheduleRevertAccountRequest asks the event loop to clean up an account range +// request and return all failed retrieval tasks to the scheduler for reassignment. +func (s *Syncer) scheduleRevertAccountRequest(req *accountRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertAccountRequest cleans up an account range request and returns all failed +// retrieval tasks to the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertAccountRequest. +func (s *Syncer) revertAccountRequest(req *accountRequest) { + log.Debug("Reverting account request", "peer", req.peer, "reqid", req.id) + select { + case <-req.stale: + log.Trace("Account request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + s.lock.Lock() + delete(s.accountReqs, req.id) + s.lock.Unlock() + + // If there's a timeout timer still running, abort it and mark the account + // task as not-pending, ready for rescheduling + req.timeout.Stop() + if req.task.req == req { + req.task.req = nil + } +} + +// scheduleRevertBytecodeRequest asks the event loop to clean up a bytecode request +// and return all failed retrieval tasks to the scheduler for reassignment. +func (s *Syncer) scheduleRevertBytecodeRequest(req *bytecodeRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertBytecodeRequest cleans up a bytecode request and returns all failed +// retrieval tasks to the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertBytecodeRequest. +func (s *Syncer) revertBytecodeRequest(req *bytecodeRequest) { + log.Debug("Reverting bytecode request", "peer", req.peer) + select { + case <-req.stale: + log.Trace("Bytecode request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + s.lock.Lock() + delete(s.bytecodeReqs, req.id) + s.lock.Unlock() + + // If there's a timeout timer still running, abort it and mark the code + // retrievals as not-pending, ready for rescheduling + req.timeout.Stop() + for _, hash := range req.hashes { + req.task.codeTasks[hash] = struct{}{} + } +} + +// scheduleRevertStorageRequest asks the event loop to clean up a storage range +// request and return all failed retrieval tasks to the scheduler for reassignment. +func (s *Syncer) scheduleRevertStorageRequest(req *storageRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertStorageRequest cleans up a storage range request and returns all failed +// retrieval tasks to the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertStorageRequest. +func (s *Syncer) revertStorageRequest(req *storageRequest) { + log.Debug("Reverting storage request", "peer", req.peer) + select { + case <-req.stale: + log.Trace("Storage request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + s.lock.Lock() + delete(s.storageReqs, req.id) + s.lock.Unlock() + + // If there's a timeout timer still running, abort it and mark the storage + // task as not-pending, ready for rescheduling + req.timeout.Stop() + if req.subTask != nil { + req.subTask.req = nil + } else { + for i, account := range req.accounts { + req.mainTask.stateTasks[account] = req.roots[i] + } + } +} + +// scheduleRevertTrienodeHealRequest asks the event loop to clean up a trienode heal +// request and return all failed retrieval tasks to the scheduler for reassignment. +func (s *Syncer) scheduleRevertTrienodeHealRequest(req *trienodeHealRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertTrienodeHealRequest cleans up a trienode heal request and returns all +// failed retrieval tasks to the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertTrienodeHealRequest. +func (s *Syncer) revertTrienodeHealRequest(req *trienodeHealRequest) { + log.Debug("Reverting trienode heal request", "peer", req.peer) + select { + case <-req.stale: + log.Trace("Trienode heal request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + s.lock.Lock() + delete(s.trienodeHealReqs, req.id) + s.lock.Unlock() + + // If there's a timeout timer still running, abort it and mark the trie node + // retrievals as not-pending, ready for rescheduling + req.timeout.Stop() + for i, path := range req.paths { + req.task.trieTasks[path] = req.hashes[i] + } +} + +// scheduleRevertBytecodeHealRequest asks the event loop to clean up a bytecode heal +// request and return all failed retrieval tasks to the scheduler for reassignment. +func (s *Syncer) scheduleRevertBytecodeHealRequest(req *bytecodeHealRequest) { + select { + case req.revert <- req: + // Sync event loop notified + case <-req.cancel: + // Sync cycle got cancelled + case <-req.stale: + // Request already reverted + } +} + +// revertBytecodeHealRequest cleans up a bytecode heal request and returns all +// failed retrieval tasks to the scheduler for reassignment. +// +// Note, this needs to run on the event runloop thread to reschedule to idle peers. +// On peer threads, use scheduleRevertBytecodeHealRequest. +func (s *Syncer) revertBytecodeHealRequest(req *bytecodeHealRequest) { + log.Debug("Reverting bytecode heal request", "peer", req.peer) + select { + case <-req.stale: + log.Trace("Bytecode heal request already reverted", "peer", req.peer, "reqid", req.id) + return + default: + } + close(req.stale) + + // Remove the request from the tracked set + s.lock.Lock() + delete(s.bytecodeHealReqs, req.id) + s.lock.Unlock() + + // If there's a timeout timer still running, abort it and mark the code + // retrievals as not-pending, ready for rescheduling + req.timeout.Stop() + for _, hash := range req.hashes { + req.task.codeTasks[hash] = struct{}{} + } +} + +// processAccountResponse integrates an already validated account range response +// into the account tasks. +func (s *Syncer) processAccountResponse(res *accountResponse) { + // Switch the task from pending to filling + res.task.req = nil + res.task.res = res + + // Ensure that the response doesn't overflow into the subsequent task + last := res.task.Last.Big() + for i, hash := range res.hashes { + // Mark the range complete if the last is already included. + // Keep iteration to delete the extra states if exists. + cmp := hash.Big().Cmp(last) + if cmp == 0 { + res.cont = false + continue + } + if cmp > 0 { + // Chunk overflown, cut off excess + res.hashes = res.hashes[:i] + res.accounts = res.accounts[:i] + res.cont = false // Mark range completed + break + } + } + // Iterate over all the accounts and assemble which ones need further sub- + // filling before the entire account range can be persisted. + res.task.needCode = make([]bool, len(res.accounts)) + res.task.needState = make([]bool, len(res.accounts)) + res.task.needHeal = make([]bool, len(res.accounts)) + + res.task.codeTasks = make(map[common.Hash]struct{}) + res.task.stateTasks = make(map[common.Hash]common.Hash) + + resumed := make(map[common.Hash]struct{}) + + res.task.pend = 0 + for i, account := range res.accounts { + // Check if the account is a contract with an unknown code + if !bytes.Equal(account.CodeHash, emptyCode[:]) { + if !rawdb.HasCodeWithPrefix(s.db, common.BytesToHash(account.CodeHash)) { + res.task.codeTasks[common.BytesToHash(account.CodeHash)] = struct{}{} + res.task.needCode[i] = true + res.task.pend++ + } + } + // Check if the account is a contract with an unknown storage trie + if account.Root != emptyRoot { + if ok, err := s.db.Has(account.Root[:]); err != nil || !ok { + // If there was a previous large state retrieval in progress, + // don't restart it from scratch. This happens if a sync cycle + // is interrupted and resumed later. However, *do* update the + // previous root hash. + if subtasks, ok := res.task.SubTasks[res.hashes[i]]; ok { + log.Debug("Resuming large storage retrieval", "account", res.hashes[i], "root", account.Root) + for _, subtask := range subtasks { + subtask.root = account.Root + } + res.task.needHeal[i] = true + resumed[res.hashes[i]] = struct{}{} + } else { + res.task.stateTasks[res.hashes[i]] = account.Root + } + res.task.needState[i] = true + res.task.pend++ + } + } + } + // Delete any subtasks that have been aborted but not resumed. This may undo + // some progress if a new peer gives us less accounts than an old one, but for + // now we have to live with that. + for hash := range res.task.SubTasks { + if _, ok := resumed[hash]; !ok { + log.Debug("Aborting suspended storage retrieval", "account", hash) + delete(res.task.SubTasks, hash) + } + } + // If the account range contained no contracts, or all have been fully filled + // beforehand, short circuit storage filling and forward to the next task + if res.task.pend == 0 { + s.forwardAccountTask(res.task) + return + } + // Some accounts are incomplete, leave as is for the storage and contract + // task assigners to pick up and fill. +} + +// processBytecodeResponse integrates an already validated bytecode response +// into the account tasks. +func (s *Syncer) processBytecodeResponse(res *bytecodeResponse) { + batch := s.db.NewBatch() + + var ( + codes uint64 + ) + for i, hash := range res.hashes { + code := res.codes[i] + + // If the bytecode was not delivered, reschedule it + if code == nil { + res.task.codeTasks[hash] = struct{}{} + continue + } + // Code was delivered, mark it not needed any more + for j, account := range res.task.res.accounts { + if res.task.needCode[j] && hash == common.BytesToHash(account.CodeHash) { + res.task.needCode[j] = false + res.task.pend-- + } + } + // Push the bytecode into a database batch + codes++ + rawdb.WriteCode(batch, hash, code) + } + bytes := common.StorageSize(batch.ValueSize()) + if err := batch.Write(); err != nil { + log.Crit("Failed to persist bytecodes", "err", err) + } + s.bytecodeSynced += codes + s.bytecodeBytes += bytes + + log.Debug("Persisted set of bytecodes", "count", codes, "bytes", bytes) + + // If this delivery completed the last pending task, forward the account task + // to the next chunk + if res.task.pend == 0 { + s.forwardAccountTask(res.task) + return + } + // Some accounts are still incomplete, leave as is for the storage and contract + // task assigners to pick up and fill. +} + +// processStorageResponse integrates an already validated storage response +// into the account tasks. +func (s *Syncer) processStorageResponse(res *storageResponse) { + // Switch the subtask from pending to idle + if res.subTask != nil { + res.subTask.req = nil + } + batch := ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.storageBytes += common.StorageSize(len(key) + len(value)) + }, + } + var ( + slots int + oldStorageBytes = s.storageBytes + ) + // Iterate over all the accounts and reconstruct their storage tries from the + // delivered slots + for i, account := range res.accounts { + // If the account was not delivered, reschedule it + if i >= len(res.hashes) { + res.mainTask.stateTasks[account] = res.roots[i] + continue + } + // State was delivered, if complete mark as not needed any more, otherwise + // mark the account as needing healing + for j, hash := range res.mainTask.res.hashes { + if account != hash { + continue + } + acc := res.mainTask.res.accounts[j] + + // If the packet contains multiple contract storage slots, all + // but the last are surely complete. The last contract may be + // chunked, so check it's continuation flag. + if res.subTask == nil && res.mainTask.needState[j] && (i < len(res.hashes)-1 || !res.cont) { + res.mainTask.needState[j] = false + res.mainTask.pend-- + } + // If the last contract was chunked, mark it as needing healing + // to avoid writing it out to disk prematurely. + if res.subTask == nil && !res.mainTask.needHeal[j] && i == len(res.hashes)-1 && res.cont { + res.mainTask.needHeal[j] = true + } + // If the last contract was chunked, we need to switch to large + // contract handling mode + if res.subTask == nil && i == len(res.hashes)-1 && res.cont { + // If we haven't yet started a large-contract retrieval, create + // the subtasks for it within the main account task + if tasks, ok := res.mainTask.SubTasks[account]; !ok { + var ( + keys = res.hashes[i] + chunks = uint64(storageConcurrency) + lastKey common.Hash + ) + if len(keys) > 0 { + lastKey = keys[len(keys)-1] + } + // If the number of slots remaining is low, decrease the + // number of chunks. Somewhere on the order of 10-15K slots + // fit into a packet of 500KB. A key/slot pair is maximum 64 + // bytes, so pessimistically maxRequestSize/64 = 8K. + // + // Chunk so that at least 2 packets are needed to fill a task. + if estimate, err := estimateRemainingSlots(len(keys), lastKey); err == nil { + if n := estimate / (2 * (maxRequestSize / 64)); n+1 < chunks { + chunks = n + 1 + } + log.Debug("Chunked large contract", "initiators", len(keys), "tail", lastKey, "remaining", estimate, "chunks", chunks) + } else { + log.Debug("Chunked large contract", "initiators", len(keys), "tail", lastKey, "chunks", chunks) + } + r := newHashRange(lastKey, chunks) + + // Our first task is the one that was just filled by this response. + batch := ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.storageBytes += common.StorageSize(len(key) + len(value)) + }, + } + tasks = append(tasks, &storageTask{ + Next: common.Hash{}, + Last: r.End(), + root: acc.Root, + genBatch: batch, + genTrie: trie.NewStackTrieWithOwner(batch, account), + }) + for r.Next() { + batch := ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.storageBytes += common.StorageSize(len(key) + len(value)) + }, + } + tasks = append(tasks, &storageTask{ + Next: r.Start(), + Last: r.End(), + root: acc.Root, + genBatch: batch, + genTrie: trie.NewStackTrieWithOwner(batch, account), + }) + } + for _, task := range tasks { + log.Debug("Created storage sync task", "account", account, "root", acc.Root, "from", task.Next, "last", task.Last) + } + res.mainTask.SubTasks[account] = tasks + + // Since we've just created the sub-tasks, this response + // is surely for the first one (zero origin) + res.subTask = tasks[0] + } + } + // If we're in large contract delivery mode, forward the subtask + if res.subTask != nil { + // Ensure the response doesn't overflow into the subsequent task + last := res.subTask.Last.Big() + // Find the first overflowing key. While at it, mark res as complete + // if we find the range to include or pass the 'last' + index := sort.Search(len(res.hashes[i]), func(k int) bool { + cmp := res.hashes[i][k].Big().Cmp(last) + if cmp >= 0 { + res.cont = false + } + return cmp > 0 + }) + if index >= 0 { + // cut off excess + res.hashes[i] = res.hashes[i][:index] + res.slots[i] = res.slots[i][:index] + } + // Forward the relevant storage chunk (even if created just now) + if res.cont { + res.subTask.Next = incHash(res.hashes[i][len(res.hashes[i])-1]) + } else { + res.subTask.done = true + } + } + } + // Iterate over all the complete contracts, reconstruct the trie nodes and + // push them to disk. If the contract is chunked, the trie nodes will be + // reconstructed later. + slots += len(res.hashes[i]) + + if i < len(res.hashes)-1 || res.subTask == nil { + tr := trie.NewStackTrieWithOwner(batch, account) + for j := 0; j < len(res.hashes[i]); j++ { + tr.Update(res.hashes[i][j][:], res.slots[i][j]) + } + tr.Commit() + } + // Persist the received storage segments. These flat state maybe + // outdated during the sync, but it can be fixed later during the + // snapshot generation. + for j := 0; j < len(res.hashes[i]); j++ { + rawdb.WriteStorageSnapshot(batch, account, res.hashes[i][j], res.slots[i][j]) + + // If we're storing large contracts, generate the trie nodes + // on the fly to not trash the gluing points + if i == len(res.hashes)-1 && res.subTask != nil { + res.subTask.genTrie.Update(res.hashes[i][j][:], res.slots[i][j]) + } + } + } + // Large contracts could have generated new trie nodes, flush them to disk + if res.subTask != nil { + if res.subTask.done { + if root, err := res.subTask.genTrie.Commit(); err != nil { + log.Error("Failed to commit stack slots", "err", err) + } else if root == res.subTask.root { + // If the chunk's root is an overflown but full delivery, clear the heal request + for i, account := range res.mainTask.res.hashes { + if account == res.accounts[len(res.accounts)-1] { + res.mainTask.needHeal[i] = false + } + } + } + } + if res.subTask.genBatch.ValueSize() > ethdb.IdealBatchSize || res.subTask.done { + if err := res.subTask.genBatch.Write(); err != nil { + log.Error("Failed to persist stack slots", "err", err) + } + res.subTask.genBatch.Reset() + } + } + // Flush anything written just now and update the stats + if err := batch.Write(); err != nil { + log.Crit("Failed to persist storage slots", "err", err) + } + s.storageSynced += uint64(slots) + + log.Debug("Persisted set of storage slots", "accounts", len(res.hashes), "slots", slots, "bytes", s.storageBytes-oldStorageBytes) + + // If this delivery completed the last pending task, forward the account task + // to the next chunk + if res.mainTask.pend == 0 { + s.forwardAccountTask(res.mainTask) + return + } + // Some accounts are still incomplete, leave as is for the storage and contract + // task assigners to pick up and fill. +} + +// processTrienodeHealResponse integrates an already validated trienode response +// into the healer tasks. +func (s *Syncer) processTrienodeHealResponse(res *trienodeHealResponse) { + for i, hash := range res.hashes { + node := res.nodes[i] + + // If the trie node was not delivered, reschedule it + if node == nil { + res.task.trieTasks[res.paths[i]] = res.hashes[i] + continue + } + // Push the trie node into the state syncer + s.trienodeHealSynced++ + s.trienodeHealBytes += common.StorageSize(len(node)) + + err := s.healer.scheduler.ProcessNode(trie.NodeSyncResult{Path: res.paths[i], Data: node}) + switch err { + case nil: + case trie.ErrAlreadyProcessed: + s.trienodeHealDups++ + case trie.ErrNotRequested: + s.trienodeHealNops++ + default: + log.Error("Invalid trienode processed", "hash", hash, "err", err) + } + } + batch := s.db.NewBatch() + if err := s.healer.scheduler.Commit(batch); err != nil { + log.Error("Failed to commit healing data", "err", err) + } + if err := batch.Write(); err != nil { + log.Crit("Failed to persist healing data", "err", err) + } + log.Debug("Persisted set of healing data", "type", "trienodes", "bytes", common.StorageSize(batch.ValueSize())) +} + +// processBytecodeHealResponse integrates an already validated bytecode response +// into the healer tasks. +func (s *Syncer) processBytecodeHealResponse(res *bytecodeHealResponse) { + for i, hash := range res.hashes { + node := res.codes[i] + + // If the trie node was not delivered, reschedule it + if node == nil { + res.task.codeTasks[hash] = struct{}{} + continue + } + // Push the trie node into the state syncer + s.bytecodeHealSynced++ + s.bytecodeHealBytes += common.StorageSize(len(node)) + + err := s.healer.scheduler.ProcessCode(trie.CodeSyncResult{Hash: hash, Data: node}) + switch err { + case nil: + case trie.ErrAlreadyProcessed: + s.bytecodeHealDups++ + case trie.ErrNotRequested: + s.bytecodeHealNops++ + default: + log.Error("Invalid bytecode processed", "hash", hash, "err", err) + } + } + batch := s.db.NewBatch() + if err := s.healer.scheduler.Commit(batch); err != nil { + log.Error("Failed to commit healing data", "err", err) + } + if err := batch.Write(); err != nil { + log.Crit("Failed to persist healing data", "err", err) + } + log.Debug("Persisted set of healing data", "type", "bytecode", "bytes", common.StorageSize(batch.ValueSize())) +} + +// forwardAccountTask takes a filled account task and persists anything available +// into the database, after which it forwards the next account marker so that the +// task's next chunk may be filled. +func (s *Syncer) forwardAccountTask(task *accountTask) { + // Remove any pending delivery + res := task.res + if res == nil { + return // nothing to forward + } + task.res = nil + + // Persist the received account segments. These flat state maybe + // outdated during the sync, but it can be fixed later during the + // snapshot generation. + oldAccountBytes := s.accountBytes + + batch := ethdb.HookedBatch{ + Batch: s.db.NewBatch(), + OnPut: func(key []byte, value []byte) { + s.accountBytes += common.StorageSize(len(key) + len(value)) + }, + } + for i, hash := range res.hashes { + if task.needCode[i] || task.needState[i] { + break + } + slim := snapshot.SlimAccountRLP(res.accounts[i].Nonce, res.accounts[i].Balance, res.accounts[i].Root, res.accounts[i].CodeHash) + rawdb.WriteAccountSnapshot(batch, hash, slim) + + // If the task is complete, drop it into the stack trie to generate + // account trie nodes for it + if !task.needHeal[i] { + full, err := snapshot.FullAccountRLP(slim) // TODO(karalabe): Slim parsing can be omitted + if err != nil { + panic(err) // Really shouldn't ever happen + } + task.genTrie.Update(hash[:], full) + } + } + // Flush anything written just now and update the stats + if err := batch.Write(); err != nil { + log.Crit("Failed to persist accounts", "err", err) + } + s.accountSynced += uint64(len(res.accounts)) + + // Task filling persisted, push it the chunk marker forward to the first + // account still missing data. + for i, hash := range res.hashes { + if task.needCode[i] || task.needState[i] { + return + } + task.Next = incHash(hash) + } + // All accounts marked as complete, track if the entire task is done + task.done = !res.cont + + // Stack trie could have generated trie nodes, push them to disk (we need to + // flush after finalizing task.done. It's fine even if we crash and lose this + // write as it will only cause more data to be downloaded during heal. + if task.done { + if _, err := task.genTrie.Commit(); err != nil { + log.Error("Failed to commit stack account", "err", err) + } + } + if task.genBatch.ValueSize() > ethdb.IdealBatchSize || task.done { + if err := task.genBatch.Write(); err != nil { + log.Error("Failed to persist stack account", "err", err) + } + task.genBatch.Reset() + } + log.Debug("Persisted range of accounts", "accounts", len(res.accounts), "bytes", s.accountBytes-oldAccountBytes) +} + +// OnAccounts is a callback method to invoke when a range of accounts are +// received from a remote peer. +func (s *Syncer) OnAccounts(peer SyncPeer, id uint64, hashes []common.Hash, accounts [][]byte, proof [][]byte) error { + size := common.StorageSize(len(hashes) * common.HashLength) + for _, account := range accounts { + size += common.StorageSize(len(account)) + } + for _, node := range proof { + size += common.StorageSize(len(node)) + } + logger := peer.Log().New("reqid", id) + logger.Trace("Delivering range of accounts", "hashes", len(hashes), "accounts", len(accounts), "proofs", len(proof), "bytes", size) + + // Whether or not the response is valid, we can mark the peer as idle and + // notify the scheduler to assign a new task. If the response is invalid, + // we'll drop the peer in a bit. + s.lock.Lock() + if _, ok := s.peers[peer.ID()]; ok { + s.accountIdlers[peer.ID()] = struct{}{} + } + select { + case s.update <- struct{}{}: + default: + } + // Ensure the response is for a valid request + req, ok := s.accountReqs[id] + if !ok { + // Request stale, perhaps the peer timed out but came through in the end + logger.Warn("Unexpected account range packet") + s.lock.Unlock() + return nil + } + delete(s.accountReqs, id) + s.rates.Update(peer.ID(), AccountRangeMsg, time.Since(req.time), int(size)) + + // Clean up the request timeout timer, we'll see how to proceed further based + // on the actual delivered content + if !req.timeout.Stop() { + // The timeout is already triggered, and this request will be reverted+rescheduled + s.lock.Unlock() + return nil + } + // Response is valid, but check if peer is signalling that it does not have + // the requested data. For account range queries that means the state being + // retrieved was either already pruned remotely, or the peer is not yet + // synced to our head. + if len(hashes) == 0 && len(accounts) == 0 && len(proof) == 0 { + logger.Debug("Peer rejected account range request", "root", s.root) + s.statelessPeers[peer.ID()] = struct{}{} + s.lock.Unlock() + + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertAccountRequest(req) + return nil + } + root := s.root + s.lock.Unlock() + + // Reconstruct a partial trie from the response and verify it + keys := make([][]byte, len(hashes)) + for i, key := range hashes { + keys[i] = common.CopyBytes(key[:]) + } + nodes := make(light.NodeList, len(proof)) + for i, node := range proof { + nodes[i] = node + } + proofdb := nodes.NodeSet() + + var end []byte + if len(keys) > 0 { + end = keys[len(keys)-1] + } + cont, err := trie.VerifyRangeProof(root, req.origin[:], end, keys, accounts, proofdb) + if err != nil { + logger.Warn("Account range failed proof", "err", err) + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertAccountRequest(req) + return err + } + accs := make([]*types.StateAccount, len(accounts)) + for i, account := range accounts { + acc := new(types.StateAccount) + if err := rlp.DecodeBytes(account, acc); err != nil { + panic(err) // We created these blobs, we must be able to decode them + } + accs[i] = acc + } + response := &accountResponse{ + task: req.task, + hashes: hashes, + accounts: accs, + cont: cont, + } + select { + case req.deliver <- response: + case <-req.cancel: + case <-req.stale: + } + return nil +} + +// OnByteCodes is a callback method to invoke when a batch of contract +// bytes codes are received from a remote peer. +func (s *Syncer) OnByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) error { + s.lock.RLock() + syncing := !s.snapped + s.lock.RUnlock() + + if syncing { + return s.onByteCodes(peer, id, bytecodes) + } + return s.onHealByteCodes(peer, id, bytecodes) +} + +// onByteCodes is a callback method to invoke when a batch of contract +// bytes codes are received from a remote peer in the syncing phase. +func (s *Syncer) onByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) error { + var size common.StorageSize + for _, code := range bytecodes { + size += common.StorageSize(len(code)) + } + logger := peer.Log().New("reqid", id) + logger.Trace("Delivering set of bytecodes", "bytecodes", len(bytecodes), "bytes", size) + + // Whether or not the response is valid, we can mark the peer as idle and + // notify the scheduler to assign a new task. If the response is invalid, + // we'll drop the peer in a bit. + s.lock.Lock() + if _, ok := s.peers[peer.ID()]; ok { + s.bytecodeIdlers[peer.ID()] = struct{}{} + } + select { + case s.update <- struct{}{}: + default: + } + // Ensure the response is for a valid request + req, ok := s.bytecodeReqs[id] + if !ok { + // Request stale, perhaps the peer timed out but came through in the end + logger.Warn("Unexpected bytecode packet") + s.lock.Unlock() + return nil + } + delete(s.bytecodeReqs, id) + s.rates.Update(peer.ID(), ByteCodesMsg, time.Since(req.time), len(bytecodes)) + + // Clean up the request timeout timer, we'll see how to proceed further based + // on the actual delivered content + if !req.timeout.Stop() { + // The timeout is already triggered, and this request will be reverted+rescheduled + s.lock.Unlock() + return nil + } + + // Response is valid, but check if peer is signalling that it does not have + // the requested data. For bytecode range queries that means the peer is not + // yet synced. + if len(bytecodes) == 0 { + logger.Debug("Peer rejected bytecode request") + s.statelessPeers[peer.ID()] = struct{}{} + s.lock.Unlock() + + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertBytecodeRequest(req) + return nil + } + s.lock.Unlock() + + // Cross reference the requested bytecodes with the response to find gaps + // that the serving node is missing + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + hash := make([]byte, 32) + + codes := make([][]byte, len(req.hashes)) + for i, j := 0, 0; i < len(bytecodes); i++ { + // Find the next hash that we've been served, leaving misses with nils + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Read(hash) + + for j < len(req.hashes) && !bytes.Equal(hash, req.hashes[j][:]) { + j++ + } + if j < len(req.hashes) { + codes[j] = bytecodes[i] + j++ + continue + } + // We've either ran out of hashes, or got unrequested data + logger.Warn("Unexpected bytecodes", "count", len(bytecodes)-i) + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertBytecodeRequest(req) + return errors.New("unexpected bytecode") + } + // Response validated, send it to the scheduler for filling + response := &bytecodeResponse{ + task: req.task, + hashes: req.hashes, + codes: codes, + } + select { + case req.deliver <- response: + case <-req.cancel: + case <-req.stale: + } + return nil +} + +// OnStorage is a callback method to invoke when ranges of storage slots +// are received from a remote peer. +func (s *Syncer) OnStorage(peer SyncPeer, id uint64, hashes [][]common.Hash, slots [][][]byte, proof [][]byte) error { + // Gather some trace stats to aid in debugging issues + var ( + hashCount int + slotCount int + size common.StorageSize + ) + for _, hashset := range hashes { + size += common.StorageSize(common.HashLength * len(hashset)) + hashCount += len(hashset) + } + for _, slotset := range slots { + for _, slot := range slotset { + size += common.StorageSize(len(slot)) + } + slotCount += len(slotset) + } + for _, node := range proof { + size += common.StorageSize(len(node)) + } + logger := peer.Log().New("reqid", id) + logger.Trace("Delivering ranges of storage slots", "accounts", len(hashes), "hashes", hashCount, "slots", slotCount, "proofs", len(proof), "size", size) + + // Whether or not the response is valid, we can mark the peer as idle and + // notify the scheduler to assign a new task. If the response is invalid, + // we'll drop the peer in a bit. + s.lock.Lock() + if _, ok := s.peers[peer.ID()]; ok { + s.storageIdlers[peer.ID()] = struct{}{} + } + select { + case s.update <- struct{}{}: + default: + } + // Ensure the response is for a valid request + req, ok := s.storageReqs[id] + if !ok { + // Request stale, perhaps the peer timed out but came through in the end + logger.Warn("Unexpected storage ranges packet") + s.lock.Unlock() + return nil + } + delete(s.storageReqs, id) + s.rates.Update(peer.ID(), StorageRangesMsg, time.Since(req.time), int(size)) + + // Clean up the request timeout timer, we'll see how to proceed further based + // on the actual delivered content + if !req.timeout.Stop() { + // The timeout is already triggered, and this request will be reverted+rescheduled + s.lock.Unlock() + return nil + } + + // Reject the response if the hash sets and slot sets don't match, or if the + // peer sent more data than requested. + if len(hashes) != len(slots) { + s.lock.Unlock() + s.scheduleRevertStorageRequest(req) // reschedule request + logger.Warn("Hash and slot set size mismatch", "hashset", len(hashes), "slotset", len(slots)) + return errors.New("hash and slot set size mismatch") + } + if len(hashes) > len(req.accounts) { + s.lock.Unlock() + s.scheduleRevertStorageRequest(req) // reschedule request + logger.Warn("Hash set larger than requested", "hashset", len(hashes), "requested", len(req.accounts)) + return errors.New("hash set larger than requested") + } + // Response is valid, but check if peer is signalling that it does not have + // the requested data. For storage range queries that means the state being + // retrieved was either already pruned remotely, or the peer is not yet + // synced to our head. + if len(hashes) == 0 { + logger.Debug("Peer rejected storage request") + s.statelessPeers[peer.ID()] = struct{}{} + s.lock.Unlock() + s.scheduleRevertStorageRequest(req) // reschedule request + return nil + } + s.lock.Unlock() + + // Reconstruct the partial tries from the response and verify them + var cont bool + + for i := 0; i < len(hashes); i++ { + // Convert the keys and proofs into an internal format + keys := make([][]byte, len(hashes[i])) + for j, key := range hashes[i] { + keys[j] = common.CopyBytes(key[:]) + } + nodes := make(light.NodeList, 0, len(proof)) + if i == len(hashes)-1 { + for _, node := range proof { + nodes = append(nodes, node) + } + } + var err error + if len(nodes) == 0 { + // No proof has been attached, the response must cover the entire key + // space and hash to the origin root. + _, err = trie.VerifyRangeProof(req.roots[i], nil, nil, keys, slots[i], nil) + if err != nil { + s.scheduleRevertStorageRequest(req) // reschedule request + logger.Warn("Storage slots failed proof", "err", err) + return err + } + } else { + // A proof was attached, the response is only partial, check that the + // returned data is indeed part of the storage trie + proofdb := nodes.NodeSet() + + var end []byte + if len(keys) > 0 { + end = keys[len(keys)-1] + } + cont, err = trie.VerifyRangeProof(req.roots[i], req.origin[:], end, keys, slots[i], proofdb) + if err != nil { + s.scheduleRevertStorageRequest(req) // reschedule request + logger.Warn("Storage range failed proof", "err", err) + return err + } + } + } + // Partial tries reconstructed, send them to the scheduler for storage filling + response := &storageResponse{ + mainTask: req.mainTask, + subTask: req.subTask, + accounts: req.accounts, + roots: req.roots, + hashes: hashes, + slots: slots, + cont: cont, + } + select { + case req.deliver <- response: + case <-req.cancel: + case <-req.stale: + } + return nil +} + +// OnTrieNodes is a callback method to invoke when a batch of trie nodes +// are received from a remote peer. +func (s *Syncer) OnTrieNodes(peer SyncPeer, id uint64, trienodes [][]byte) error { + var size common.StorageSize + for _, node := range trienodes { + size += common.StorageSize(len(node)) + } + logger := peer.Log().New("reqid", id) + logger.Trace("Delivering set of healing trienodes", "trienodes", len(trienodes), "bytes", size) + + // Whether or not the response is valid, we can mark the peer as idle and + // notify the scheduler to assign a new task. If the response is invalid, + // we'll drop the peer in a bit. + s.lock.Lock() + if _, ok := s.peers[peer.ID()]; ok { + s.trienodeHealIdlers[peer.ID()] = struct{}{} + } + select { + case s.update <- struct{}{}: + default: + } + // Ensure the response is for a valid request + req, ok := s.trienodeHealReqs[id] + if !ok { + // Request stale, perhaps the peer timed out but came through in the end + logger.Warn("Unexpected trienode heal packet") + s.lock.Unlock() + return nil + } + delete(s.trienodeHealReqs, id) + s.rates.Update(peer.ID(), TrieNodesMsg, time.Since(req.time), len(trienodes)) + + // Clean up the request timeout timer, we'll see how to proceed further based + // on the actual delivered content + if !req.timeout.Stop() { + // The timeout is already triggered, and this request will be reverted+rescheduled + s.lock.Unlock() + return nil + } + + // Response is valid, but check if peer is signalling that it does not have + // the requested data. For bytecode range queries that means the peer is not + // yet synced. + if len(trienodes) == 0 { + logger.Debug("Peer rejected trienode heal request") + s.statelessPeers[peer.ID()] = struct{}{} + s.lock.Unlock() + + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertTrienodeHealRequest(req) + return nil + } + s.lock.Unlock() + + // Cross reference the requested trienodes with the response to find gaps + // that the serving node is missing + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + hash := make([]byte, 32) + + nodes := make([][]byte, len(req.hashes)) + for i, j := 0, 0; i < len(trienodes); i++ { + // Find the next hash that we've been served, leaving misses with nils + hasher.Reset() + hasher.Write(trienodes[i]) + hasher.Read(hash) + + for j < len(req.hashes) && !bytes.Equal(hash, req.hashes[j][:]) { + j++ + } + if j < len(req.hashes) { + nodes[j] = trienodes[i] + j++ + continue + } + // We've either ran out of hashes, or got unrequested data + logger.Warn("Unexpected healing trienodes", "count", len(trienodes)-i) + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertTrienodeHealRequest(req) + return errors.New("unexpected healing trienode") + } + // Response validated, send it to the scheduler for filling + response := &trienodeHealResponse{ + paths: req.paths, + task: req.task, + hashes: req.hashes, + nodes: nodes, + } + select { + case req.deliver <- response: + case <-req.cancel: + case <-req.stale: + } + return nil +} + +// onHealByteCodes is a callback method to invoke when a batch of contract +// bytes codes are received from a remote peer in the healing phase. +func (s *Syncer) onHealByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) error { + var size common.StorageSize + for _, code := range bytecodes { + size += common.StorageSize(len(code)) + } + logger := peer.Log().New("reqid", id) + logger.Trace("Delivering set of healing bytecodes", "bytecodes", len(bytecodes), "bytes", size) + + // Whether or not the response is valid, we can mark the peer as idle and + // notify the scheduler to assign a new task. If the response is invalid, + // we'll drop the peer in a bit. + s.lock.Lock() + if _, ok := s.peers[peer.ID()]; ok { + s.bytecodeHealIdlers[peer.ID()] = struct{}{} + } + select { + case s.update <- struct{}{}: + default: + } + // Ensure the response is for a valid request + req, ok := s.bytecodeHealReqs[id] + if !ok { + // Request stale, perhaps the peer timed out but came through in the end + logger.Warn("Unexpected bytecode heal packet") + s.lock.Unlock() + return nil + } + delete(s.bytecodeHealReqs, id) + s.rates.Update(peer.ID(), ByteCodesMsg, time.Since(req.time), len(bytecodes)) + + // Clean up the request timeout timer, we'll see how to proceed further based + // on the actual delivered content + if !req.timeout.Stop() { + // The timeout is already triggered, and this request will be reverted+rescheduled + s.lock.Unlock() + return nil + } + + // Response is valid, but check if peer is signalling that it does not have + // the requested data. For bytecode range queries that means the peer is not + // yet synced. + if len(bytecodes) == 0 { + logger.Debug("Peer rejected bytecode heal request") + s.statelessPeers[peer.ID()] = struct{}{} + s.lock.Unlock() + + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertBytecodeHealRequest(req) + return nil + } + s.lock.Unlock() + + // Cross reference the requested bytecodes with the response to find gaps + // that the serving node is missing + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + hash := make([]byte, 32) + + codes := make([][]byte, len(req.hashes)) + for i, j := 0, 0; i < len(bytecodes); i++ { + // Find the next hash that we've been served, leaving misses with nils + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Read(hash) + + for j < len(req.hashes) && !bytes.Equal(hash, req.hashes[j][:]) { + j++ + } + if j < len(req.hashes) { + codes[j] = bytecodes[i] + j++ + continue + } + // We've either ran out of hashes, or got unrequested data + logger.Warn("Unexpected healing bytecodes", "count", len(bytecodes)-i) + // Signal this request as failed, and ready for rescheduling + s.scheduleRevertBytecodeHealRequest(req) + return errors.New("unexpected healing bytecode") + } + // Response validated, send it to the scheduler for filling + response := &bytecodeHealResponse{ + task: req.task, + hashes: req.hashes, + codes: codes, + } + select { + case req.deliver <- response: + case <-req.cancel: + case <-req.stale: + } + return nil +} + +// onHealState is a callback method to invoke when a flat state(account +// or storage slot) is downloaded during the healing stage. The flat states +// can be persisted blindly and can be fixed later in the generation stage. +// Note it's not concurrent safe, please handle the concurrent issue outside. +func (s *Syncer) onHealState(paths [][]byte, value []byte) error { + if len(paths) == 1 { + var account types.StateAccount + if err := rlp.DecodeBytes(value, &account); err != nil { + return nil // Returning the error here would drop the remote peer + } + blob := snapshot.SlimAccountRLP(account.Nonce, account.Balance, account.Root, account.CodeHash) + rawdb.WriteAccountSnapshot(s.stateWriter, common.BytesToHash(paths[0]), blob) + s.accountHealed += 1 + s.accountHealedBytes += common.StorageSize(1 + common.HashLength + len(blob)) + } + if len(paths) == 2 { + rawdb.WriteStorageSnapshot(s.stateWriter, common.BytesToHash(paths[0]), common.BytesToHash(paths[1]), value) + s.storageHealed += 1 + s.storageHealedBytes += common.StorageSize(1 + 2*common.HashLength + len(value)) + } + if s.stateWriter.ValueSize() > ethdb.IdealBatchSize { + s.stateWriter.Write() // It's fine to ignore the error here + s.stateWriter.Reset() + } + return nil +} + +// hashSpace is the total size of the 256 bit hash space for accounts. +var hashSpace = new(big.Int).Exp(common.Big2, common.Big256, nil) + +// report calculates various status reports and provides it to the user. +func (s *Syncer) report(force bool) { + if len(s.tasks) > 0 { + s.reportSyncProgress(force) + return + } + s.reportHealProgress(force) +} + +// reportSyncProgress calculates various status reports and provides it to the user. +func (s *Syncer) reportSyncProgress(force bool) { + // Don't report all the events, just occasionally + if !force && time.Since(s.logTime) < 8*time.Second { + return + } + // Don't report anything until we have a meaningful progress + synced := s.accountBytes + s.bytecodeBytes + s.storageBytes + if synced == 0 { + return + } + accountGaps := new(big.Int) + for _, task := range s.tasks { + accountGaps.Add(accountGaps, new(big.Int).Sub(task.Last.Big(), task.Next.Big())) + } + accountFills := new(big.Int).Sub(hashSpace, accountGaps) + if accountFills.BitLen() == 0 { + return + } + s.logTime = time.Now() + estBytes := float64(new(big.Int).Div( + new(big.Int).Mul(new(big.Int).SetUint64(uint64(synced)), hashSpace), + accountFills, + ).Uint64()) + // Don't report anything until we have a meaningful progress + if estBytes < 1.0 { + return + } + elapsed := time.Since(s.startTime) + estTime := elapsed / time.Duration(synced) * time.Duration(estBytes) + + // Create a mega progress report + var ( + progress = fmt.Sprintf("%.2f%%", float64(synced)*100/estBytes) + accounts = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.accountSynced), s.accountBytes.TerminalString()) + storage = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.storageSynced), s.storageBytes.TerminalString()) + bytecode = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.bytecodeSynced), s.bytecodeBytes.TerminalString()) + ) + log.Info("State sync in progress", "synced", progress, "state", synced, + "accounts", accounts, "slots", storage, "codes", bytecode, "eta", common.PrettyDuration(estTime-elapsed)) +} + +// reportHealProgress calculates various status reports and provides it to the user. +func (s *Syncer) reportHealProgress(force bool) { + // Don't report all the events, just occasionally + if !force && time.Since(s.logTime) < 8*time.Second { + return + } + s.logTime = time.Now() + + // Create a mega progress report + var ( + trienode = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.trienodeHealSynced), s.trienodeHealBytes.TerminalString()) + bytecode = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.bytecodeHealSynced), s.bytecodeHealBytes.TerminalString()) + accounts = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.accountHealed), s.accountHealedBytes.TerminalString()) + storage = fmt.Sprintf("%v@%v", log.FormatLogfmtUint64(s.storageHealed), s.storageHealedBytes.TerminalString()) + ) + log.Info("State heal in progress", "accounts", accounts, "slots", storage, + "codes", bytecode, "nodes", trienode, "pending", s.healer.scheduler.Pending()) +} + +// estimateRemainingSlots tries to determine roughly how many slots are left in +// a contract storage, based on the number of keys and the last hash. This method +// assumes that the hashes are lexicographically ordered and evenly distributed. +func estimateRemainingSlots(hashes int, last common.Hash) (uint64, error) { + if last == (common.Hash{}) { + return 0, errors.New("last hash empty") + } + space := new(big.Int).Mul(math.MaxBig256, big.NewInt(int64(hashes))) + space.Div(space, last.Big()) + if !space.IsUint64() { + // Gigantic address space probably due to too few or malicious slots + return 0, errors.New("too few slots for estimation") + } + return space.Uint64() - uint64(hashes), nil +} + +// capacitySort implements the Sort interface, allowing sorting by peer message +// throughput. Note, callers should use sort.Reverse to get the desired effect +// of highest capacity being at the front. +type capacitySort struct { + ids []string + caps []int +} + +func (s *capacitySort) Len() int { + return len(s.ids) +} + +func (s *capacitySort) Less(i, j int) bool { + return s.caps[i] < s.caps[j] +} + +func (s *capacitySort) Swap(i, j int) { + s.ids[i], s.ids[j] = s.ids[j], s.ids[i] + s.caps[i], s.caps[j] = s.caps[j], s.caps[i] +} + +// healRequestSort implements the Sort interface, allowing sorting trienode +// heal requests, which is a prerequisite for merging storage-requests. +type healRequestSort struct { + paths []string + hashes []common.Hash + syncPaths []trie.SyncPath +} + +func (t *healRequestSort) Len() int { + return len(t.hashes) +} + +func (t *healRequestSort) Less(i, j int) bool { + a := t.syncPaths[i] + b := t.syncPaths[j] + switch bytes.Compare(a[0], b[0]) { + case -1: + return true + case 1: + return false + } + // identical first part + if len(a) < len(b) { + return true + } + if len(b) < len(a) { + return false + } + if len(a) == 2 { + return bytes.Compare(a[1], b[1]) < 0 + } + return false +} + +func (t *healRequestSort) Swap(i, j int) { + t.paths[i], t.paths[j] = t.paths[j], t.paths[i] + t.hashes[i], t.hashes[j] = t.hashes[j], t.hashes[i] + t.syncPaths[i], t.syncPaths[j] = t.syncPaths[j], t.syncPaths[i] +} + +// Merge merges the pathsets, so that several storage requests concerning the +// same account are merged into one, to reduce bandwidth. +// OBS: This operation is moot if t has not first been sorted. +func (t *healRequestSort) Merge() []TrieNodePathSet { + var result []TrieNodePathSet + for _, path := range t.syncPaths { + pathset := TrieNodePathSet([][]byte(path)) + if len(path) == 1 { + // It's an account reference. + result = append(result, pathset) + } else { + // It's a storage reference. + end := len(result) - 1 + if len(result) == 0 || !bytes.Equal(pathset[0], result[end][0]) { + // The account doesn't match last, create a new entry. + result = append(result, pathset) + } else { + // It's the same account as the previous one, add to the storage + // paths of that request. + result[end] = append(result[end], pathset[1]) + } + } + } + return result +} + +// sortByAccountPath takes hashes and paths, and sorts them. After that, it generates +// the TrieNodePaths and merges paths which belongs to the same account path. +func sortByAccountPath(paths []string, hashes []common.Hash) ([]string, []common.Hash, []trie.SyncPath, []TrieNodePathSet) { + var syncPaths []trie.SyncPath + for _, path := range paths { + syncPaths = append(syncPaths, trie.NewSyncPath([]byte(path))) + } + n := &healRequestSort{paths, hashes, syncPaths} + sort.Sort(n) + pathsets := n.Merge() + return n.paths, n.hashes, n.syncPaths, pathsets +} diff --git a/eth/protocols/snap/sync_test.go b/eth/protocols/snap/sync_test.go new file mode 100644 index 00000000..4d9f631b --- /dev/null +++ b/eth/protocols/snap/sync_test.go @@ -0,0 +1,1769 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "bytes" + "crypto/rand" + "encoding/binary" + "fmt" + "math/big" + "sort" + "sync" + "testing" + "time" + + "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/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +func TestHashing(t *testing.T) { + t.Parallel() + + var bytecodes = make([][]byte, 10) + for i := 0; i < len(bytecodes); i++ { + buf := make([]byte, 100) + rand.Read(buf) + bytecodes[i] = buf + } + var want, got string + var old = func() { + hasher := sha3.NewLegacyKeccak256() + for i := 0; i < len(bytecodes); i++ { + hasher.Reset() + hasher.Write(bytecodes[i]) + hash := hasher.Sum(nil) + got = fmt.Sprintf("%v\n%v", got, hash) + } + } + var new = func() { + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + var hash = make([]byte, 32) + for i := 0; i < len(bytecodes); i++ { + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Read(hash) + want = fmt.Sprintf("%v\n%v", want, hash) + } + } + old() + new() + if want != got { + t.Errorf("want\n%v\ngot\n%v\n", want, got) + } +} + +func BenchmarkHashing(b *testing.B) { + var bytecodes = make([][]byte, 10000) + for i := 0; i < len(bytecodes); i++ { + buf := make([]byte, 100) + rand.Read(buf) + bytecodes[i] = buf + } + var old = func() { + hasher := sha3.NewLegacyKeccak256() + for i := 0; i < len(bytecodes); i++ { + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Sum(nil) + } + } + var new = func() { + hasher := sha3.NewLegacyKeccak256().(crypto.KeccakState) + var hash = make([]byte, 32) + for i := 0; i < len(bytecodes); i++ { + hasher.Reset() + hasher.Write(bytecodes[i]) + hasher.Read(hash) + } + } + b.Run("old", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + old() + } + }) + b.Run("new", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + new() + } + }) +} + +type ( + accountHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error + storageHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error + trieHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error + codeHandlerFunc func(t *testPeer, id uint64, hashes []common.Hash, max uint64) error +) + +type testPeer struct { + id string + test *testing.T + remote *Syncer + logger log.Logger + accountTrie *trie.Trie + accountValues entrySlice + storageTries map[common.Hash]*trie.Trie + storageValues map[common.Hash]entrySlice + + accountRequestHandler accountHandlerFunc + storageRequestHandler storageHandlerFunc + trieRequestHandler trieHandlerFunc + codeRequestHandler codeHandlerFunc + term func() + + // counters + nAccountRequests int + nStorageRequests int + nBytecodeRequests int + nTrienodeRequests int +} + +func newTestPeer(id string, t *testing.T, term func()) *testPeer { + peer := &testPeer{ + id: id, + test: t, + logger: log.New("id", id), + accountRequestHandler: defaultAccountRequestHandler, + trieRequestHandler: defaultTrieRequestHandler, + storageRequestHandler: defaultStorageRequestHandler, + codeRequestHandler: defaultCodeRequestHandler, + term: term, + } + //stderrHandler := log.StreamHandler(os.Stderr, log.TerminalFormat(true)) + //peer.logger.SetHandler(stderrHandler) + return peer +} + +func (t *testPeer) ID() string { return t.id } +func (t *testPeer) Log() log.Logger { return t.logger } + +func (t *testPeer) Stats() string { + return fmt.Sprintf(`Account requests: %d +Storage requests: %d +Bytecode requests: %d +Trienode requests: %d +`, t.nAccountRequests, t.nStorageRequests, t.nBytecodeRequests, t.nTrienodeRequests) +} + +func (t *testPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error { + t.logger.Trace("Fetching range of accounts", "reqid", id, "root", root, "origin", origin, "limit", limit, "bytes", common.StorageSize(bytes)) + t.nAccountRequests++ + go t.accountRequestHandler(t, id, root, origin, limit, bytes) + return nil +} + +func (t *testPeer) RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error { + t.logger.Trace("Fetching set of trie nodes", "reqid", id, "root", root, "pathsets", len(paths), "bytes", common.StorageSize(bytes)) + t.nTrienodeRequests++ + go t.trieRequestHandler(t, id, root, paths, bytes) + return nil +} + +func (t *testPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { + t.nStorageRequests++ + if len(accounts) == 1 && origin != nil { + t.logger.Trace("Fetching range of large storage slots", "reqid", id, "root", root, "account", accounts[0], "origin", common.BytesToHash(origin), "limit", common.BytesToHash(limit), "bytes", common.StorageSize(bytes)) + } else { + t.logger.Trace("Fetching ranges of small storage slots", "reqid", id, "root", root, "accounts", len(accounts), "first", accounts[0], "bytes", common.StorageSize(bytes)) + } + go t.storageRequestHandler(t, id, root, accounts, origin, limit, bytes) + return nil +} + +func (t *testPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { + t.nBytecodeRequests++ + t.logger.Trace("Fetching set of byte codes", "reqid", id, "hashes", len(hashes), "bytes", common.StorageSize(bytes)) + go t.codeRequestHandler(t, id, hashes, bytes) + return nil +} + +// defaultTrieRequestHandler is a well-behaving handler for trie healing requests +func defaultTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { + // Pass the response + var nodes [][]byte + for _, pathset := range paths { + switch len(pathset) { + case 1: + blob, _, err := t.accountTrie.TryGetNode(pathset[0]) + if err != nil { + t.logger.Info("Error handling req", "error", err) + break + } + nodes = append(nodes, blob) + default: + account := t.storageTries[(common.BytesToHash(pathset[0]))] + for _, path := range pathset[1:] { + blob, _, err := account.TryGetNode(path) + if err != nil { + t.logger.Info("Error handling req", "error", err) + break + } + nodes = append(nodes, blob) + } + } + } + t.remote.OnTrieNodes(t, requestId, nodes) + return nil +} + +// defaultAccountRequestHandler is a well-behaving handler for AccountRangeRequests +func defaultAccountRequestHandler(t *testPeer, id uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + keys, vals, proofs := createAccountRequestResponse(t, root, origin, limit, cap) + if err := t.remote.OnAccounts(t, id, keys, vals, proofs); err != nil { + t.test.Errorf("Remote side rejected our delivery: %v", err) + t.term() + return err + } + return nil +} + +func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) (keys []common.Hash, vals [][]byte, proofs [][]byte) { + var size uint64 + if limit == (common.Hash{}) { + limit = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + } + for _, entry := range t.accountValues { + if size > cap { + break + } + if bytes.Compare(origin[:], entry.k) <= 0 { + keys = append(keys, common.BytesToHash(entry.k)) + vals = append(vals, entry.v) + size += uint64(32 + len(entry.v)) + } + // If we've exceeded the request threshold, abort + if bytes.Compare(entry.k, limit[:]) >= 0 { + break + } + } + // Unless we send the entire trie, we need to supply proofs + // Actually, we need to supply proofs either way! This seems to be an implementation + // quirk in go-ethereum + proof := light.NewNodeSet() + if err := t.accountTrie.Prove(origin[:], 0, proof); err != nil { + t.logger.Error("Could not prove inexistence of origin", "origin", origin, "error", err) + } + if len(keys) > 0 { + lastK := (keys[len(keys)-1])[:] + if err := t.accountTrie.Prove(lastK, 0, proof); err != nil { + t.logger.Error("Could not prove last item", "error", err) + } + } + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + return keys, vals, proofs +} + +// defaultStorageRequestHandler is a well-behaving storage request handler +func defaultStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max uint64) error { + hashes, slots, proofs := createStorageRequestResponse(t, root, accounts, bOrigin, bLimit, max) + if err := t.remote.OnStorage(t, requestId, hashes, slots, proofs); err != nil { + t.test.Errorf("Remote side rejected our delivery: %v", err) + t.term() + } + return nil +} + +func defaultCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { + var bytecodes [][]byte + for _, h := range hashes { + bytecodes = append(bytecodes, getCodeByHash(h)) + } + if err := t.remote.OnByteCodes(t, id, bytecodes); err != nil { + t.test.Errorf("Remote side rejected our delivery: %v", err) + t.term() + } + return nil +} + +func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { + var size uint64 + for _, account := range accounts { + // The first account might start from a different origin and end sooner + var originHash common.Hash + if len(origin) > 0 { + originHash = common.BytesToHash(origin) + } + var limitHash = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + if len(limit) > 0 { + limitHash = common.BytesToHash(limit) + } + var ( + keys []common.Hash + vals [][]byte + abort bool + ) + for _, entry := range t.storageValues[account] { + if size >= max { + abort = true + break + } + if bytes.Compare(entry.k, originHash[:]) < 0 { + continue + } + keys = append(keys, common.BytesToHash(entry.k)) + vals = append(vals, entry.v) + size += uint64(32 + len(entry.v)) + if bytes.Compare(entry.k, limitHash[:]) >= 0 { + break + } + } + if len(keys) > 0 { + hashes = append(hashes, keys) + slots = append(slots, vals) + } + // Generate the Merkle proofs for the first and last storage slot, but + // only if the response was capped. If the entire storage trie included + // in the response, no need for any proofs. + if originHash != (common.Hash{}) || (abort && len(keys) > 0) { + // If we're aborting, we need to prove the first and last item + // This terminates the response (and thus the loop) + proof := light.NewNodeSet() + stTrie := t.storageTries[account] + + // Here's a potential gotcha: when constructing the proof, we cannot + // use the 'origin' slice directly, but must use the full 32-byte + // hash form. + if err := stTrie.Prove(originHash[:], 0, proof); err != nil { + t.logger.Error("Could not prove inexistence of origin", "origin", originHash, "error", err) + } + if len(keys) > 0 { + lastK := (keys[len(keys)-1])[:] + if err := stTrie.Prove(lastK, 0, proof); err != nil { + t.logger.Error("Could not prove last item", "error", err) + } + } + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + break + } + } + return hashes, slots, proofs +} + +// the createStorageRequestResponseAlwaysProve tests a cornercase, where it always +// supplies the proof for the last account, even if it is 'complete'.h +func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max uint64) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { + var size uint64 + max = max * 3 / 4 + + var origin common.Hash + if len(bOrigin) > 0 { + origin = common.BytesToHash(bOrigin) + } + var exit bool + for i, account := range accounts { + var keys []common.Hash + var vals [][]byte + for _, entry := range t.storageValues[account] { + if bytes.Compare(entry.k, origin[:]) < 0 { + exit = true + } + keys = append(keys, common.BytesToHash(entry.k)) + vals = append(vals, entry.v) + size += uint64(32 + len(entry.v)) + if size > max { + exit = true + } + } + if i == len(accounts)-1 { + exit = true + } + hashes = append(hashes, keys) + slots = append(slots, vals) + + if exit { + // If we're aborting, we need to prove the first and last item + // This terminates the response (and thus the loop) + proof := light.NewNodeSet() + stTrie := t.storageTries[account] + + // Here's a potential gotcha: when constructing the proof, we cannot + // use the 'origin' slice directly, but must use the full 32-byte + // hash form. + if err := stTrie.Prove(origin[:], 0, proof); err != nil { + t.logger.Error("Could not prove inexistence of origin", "origin", origin, + "error", err) + } + if len(keys) > 0 { + lastK := (keys[len(keys)-1])[:] + if err := stTrie.Prove(lastK, 0, proof); err != nil { + t.logger.Error("Could not prove last item", "error", err) + } + } + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + break + } + } + return hashes, slots, proofs +} + +// emptyRequestAccountRangeFn is a rejects AccountRangeRequests +func emptyRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + t.remote.OnAccounts(t, requestId, nil, nil, nil) + return nil +} + +func nonResponsiveRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + return nil +} + +func emptyTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { + t.remote.OnTrieNodes(t, requestId, nil) + return nil +} + +func nonResponsiveTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { + return nil +} + +func emptyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + t.remote.OnStorage(t, requestId, nil, nil, nil) + return nil +} + +func nonResponsiveStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + return nil +} + +func proofHappyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + hashes, slots, proofs := createStorageRequestResponseAlwaysProve(t, root, accounts, origin, limit, max) + if err := t.remote.OnStorage(t, requestId, hashes, slots, proofs); err != nil { + t.test.Errorf("Remote side rejected our delivery: %v", err) + t.term() + } + return nil +} + +//func emptyCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { +// var bytecodes [][]byte +// t.remote.OnByteCodes(t, id, bytecodes) +// return nil +//} + +func corruptCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { + var bytecodes [][]byte + for _, h := range hashes { + // Send back the hashes + bytecodes = append(bytecodes, h[:]) + } + if err := t.remote.OnByteCodes(t, id, bytecodes); err != nil { + t.logger.Info("remote error on delivery (as expected)", "error", err) + // Mimic the real-life handler, which drops a peer on errors + t.remote.Unregister(t.id) + } + return nil +} + +func cappedCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { + var bytecodes [][]byte + for _, h := range hashes[:1] { + bytecodes = append(bytecodes, getCodeByHash(h)) + } + // Missing bytecode can be retrieved again, no error expected + if err := t.remote.OnByteCodes(t, id, bytecodes); err != nil { + t.test.Errorf("Remote side rejected our delivery: %v", err) + t.term() + } + return nil +} + +// starvingStorageRequestHandler is somewhat well-behaving storage handler, but it caps the returned results to be very small +func starvingStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + return defaultStorageRequestHandler(t, requestId, root, accounts, origin, limit, 500) +} + +func starvingAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + return defaultAccountRequestHandler(t, requestId, root, origin, limit, 500) +} + +//func misdeliveringAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, cap uint64) error { +// return defaultAccountRequestHandler(t, requestId-1, root, origin, 500) +//} + +func corruptAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + hashes, accounts, proofs := createAccountRequestResponse(t, root, origin, limit, cap) + if len(proofs) > 0 { + proofs = proofs[1:] + } + if err := t.remote.OnAccounts(t, requestId, hashes, accounts, proofs); err != nil { + t.logger.Info("remote error on delivery (as expected)", "error", err) + // Mimic the real-life handler, which drops a peer on errors + t.remote.Unregister(t.id) + } + return nil +} + +// corruptStorageRequestHandler doesn't provide good proofs +func corruptStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + hashes, slots, proofs := createStorageRequestResponse(t, root, accounts, origin, limit, max) + if len(proofs) > 0 { + proofs = proofs[1:] + } + if err := t.remote.OnStorage(t, requestId, hashes, slots, proofs); err != nil { + t.logger.Info("remote error on delivery (as expected)", "error", err) + // Mimic the real-life handler, which drops a peer on errors + t.remote.Unregister(t.id) + } + return nil +} + +func noProofStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + hashes, slots, _ := createStorageRequestResponse(t, root, accounts, origin, limit, max) + if err := t.remote.OnStorage(t, requestId, hashes, slots, nil); err != nil { + t.logger.Info("remote error on delivery (as expected)", "error", err) + // Mimic the real-life handler, which drops a peer on errors + t.remote.Unregister(t.id) + } + return nil +} + +// TestSyncBloatedProof tests a scenario where we provide only _one_ value, but +// also ship the entire trie inside the proof. If the attack is successful, +// the remote side does not do any follow-up requests +func TestSyncBloatedProof(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(100) + source := newTestPeer("source", t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + + source.accountRequestHandler = func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + var ( + proofs [][]byte + keys []common.Hash + vals [][]byte + ) + // The values + for _, entry := range t.accountValues { + if bytes.Compare(entry.k, origin[:]) < 0 { + continue + } + if bytes.Compare(entry.k, limit[:]) > 0 { + continue + } + keys = append(keys, common.BytesToHash(entry.k)) + vals = append(vals, entry.v) + } + // The proofs + proof := light.NewNodeSet() + if err := t.accountTrie.Prove(origin[:], 0, proof); err != nil { + t.logger.Error("Could not prove origin", "origin", origin, "error", err) + } + // The bloat: add proof of every single element + for _, entry := range t.accountValues { + if err := t.accountTrie.Prove(entry.k, 0, proof); err != nil { + t.logger.Error("Could not prove item", "error", err) + } + } + // And remove one item from the elements + if len(keys) > 2 { + keys = append(keys[:1], keys[2:]...) + vals = append(vals[:1], vals[2:]...) + } + for _, blob := range proof.NodeList() { + proofs = append(proofs, blob) + } + if err := t.remote.OnAccounts(t, requestId, keys, vals, proofs); err != nil { + t.logger.Info("remote error on delivery (as expected)", "error", err) + t.term() + // This is actually correct, signal to exit the test successfully + } + return nil + } + syncer := setupSyncer(source) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err == nil { + t.Fatal("No error returned from incomplete/cancelled sync") + } +} + +func setupSyncer(peers ...*testPeer) *Syncer { + stateDb := rawdb.NewMemoryDatabase() + syncer := NewSyncer(stateDb) + for _, peer := range peers { + syncer.Register(peer) + peer.remote = syncer + } + return syncer +} + +// TestSync tests a basic sync with one peer +func TestSync(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(100) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + return source + } + syncer := setupSyncer(mkSource("source")) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncTinyTriePanic tests a basic sync with one peer, and a tiny trie. This caused a +// panic within the prover +func TestSyncTinyTriePanic(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(1) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + return source + } + syncer := setupSyncer(mkSource("source")) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestMultiSync tests a basic sync with multiple peers +func TestMultiSync(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(100) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + return source + } + syncer := setupSyncer(mkSource("sourceA"), mkSource("sourceB")) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncWithStorage tests basic sync using accounts + storage + code +func TestSyncWithStorage(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(3, 3000, true, false) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + return source + } + syncer := setupSyncer(mkSource("sourceA")) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestMultiSyncManyUseless contains one good peer, and many which doesn't return anything valuable at all +func TestMultiSyncManyUseless(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(100, 3000, true, false) + + mkSource := func(name string, noAccount, noStorage, noTrieNode bool) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + + if !noAccount { + source.accountRequestHandler = emptyRequestAccountRangeFn + } + if !noStorage { + source.storageRequestHandler = emptyStorageRequestHandler + } + if !noTrieNode { + source.trieRequestHandler = emptyTrieRequestHandler + } + return source + } + + syncer := setupSyncer( + mkSource("full", true, true, true), + mkSource("noAccounts", false, true, true), + mkSource("noStorage", true, false, true), + mkSource("noTrie", true, true, false), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestMultiSyncManyUseless contains one good peer, and many which doesn't return anything valuable at all +func TestMultiSyncManyUselessWithLowTimeout(t *testing.T) { + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(100, 3000, true, false) + + mkSource := func(name string, noAccount, noStorage, noTrieNode bool) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + + if !noAccount { + source.accountRequestHandler = emptyRequestAccountRangeFn + } + if !noStorage { + source.storageRequestHandler = emptyStorageRequestHandler + } + if !noTrieNode { + source.trieRequestHandler = emptyTrieRequestHandler + } + return source + } + + syncer := setupSyncer( + mkSource("full", true, true, true), + mkSource("noAccounts", false, true, true), + mkSource("noStorage", true, false, true), + mkSource("noTrie", true, true, false), + ) + // We're setting the timeout to very low, to increase the chance of the timeout + // being triggered. This was previously a cause of panic, when a response + // arrived simultaneously as a timeout was triggered. + syncer.rates.OverrideTTLLimit = time.Millisecond + + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestMultiSyncManyUnresponsive contains one good peer, and many which doesn't respond at all +func TestMultiSyncManyUnresponsive(t *testing.T) { + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(100, 3000, true, false) + + mkSource := func(name string, noAccount, noStorage, noTrieNode bool) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + + if !noAccount { + source.accountRequestHandler = nonResponsiveRequestAccountRangeFn + } + if !noStorage { + source.storageRequestHandler = nonResponsiveStorageRequestHandler + } + if !noTrieNode { + source.trieRequestHandler = nonResponsiveTrieRequestHandler + } + return source + } + + syncer := setupSyncer( + mkSource("full", true, true, true), + mkSource("noAccounts", false, true, true), + mkSource("noStorage", true, false, true), + mkSource("noTrie", true, true, false), + ) + // We're setting the timeout to very low, to make the test run a bit faster + syncer.rates.OverrideTTLLimit = time.Millisecond + + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +func checkStall(t *testing.T, term func()) chan struct{} { + testDone := make(chan struct{}) + go func() { + select { + case <-time.After(time.Minute): // TODO(karalabe): Make tests smaller, this is too much + t.Log("Sync stalled") + term() + case <-testDone: + return + } + }() + return testDone +} + +// TestSyncBoundaryAccountTrie tests sync against a few normal peers, but the +// account trie has a few boundary elements. +func TestSyncBoundaryAccountTrie(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeBoundaryAccountTrie(3000) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + return source + } + syncer := setupSyncer( + mkSource("peer-a"), + mkSource("peer-b"), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncNoStorageAndOneCappedPeer tests sync using accounts and no storage, where one peer is +// consistently returning very small results +func TestSyncNoStorageAndOneCappedPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(3000) + + mkSource := func(name string, slow bool) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + + if slow { + source.accountRequestHandler = starvingAccountRequestHandler + } + return source + } + + syncer := setupSyncer( + mkSource("nice-a", false), + mkSource("nice-b", false), + mkSource("nice-c", false), + mkSource("capped", true), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncNoStorageAndOneCodeCorruptPeer has one peer which doesn't deliver +// code requests properly. +func TestSyncNoStorageAndOneCodeCorruptPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(3000) + + mkSource := func(name string, codeFn codeHandlerFunc) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.codeRequestHandler = codeFn + return source + } + // One is capped, one is corrupt. If we don't use a capped one, there's a 50% + // chance that the full set of codes requested are sent only to the + // non-corrupt peer, which delivers everything in one go, and makes the + // test moot + syncer := setupSyncer( + mkSource("capped", cappedCodeRequestHandler), + mkSource("corrupt", corruptCodeRequestHandler), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +func TestSyncNoStorageAndOneAccountCorruptPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(3000) + + mkSource := func(name string, accFn accountHandlerFunc) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.accountRequestHandler = accFn + return source + } + // One is capped, one is corrupt. If we don't use a capped one, there's a 50% + // chance that the full set of codes requested are sent only to the + // non-corrupt peer, which delivers everything in one go, and makes the + // test moot + syncer := setupSyncer( + mkSource("capped", defaultAccountRequestHandler), + mkSource("corrupt", corruptAccountRequestHandler), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncNoStorageAndOneCodeCappedPeer has one peer which delivers code hashes +// one by one +func TestSyncNoStorageAndOneCodeCappedPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(3000) + + mkSource := func(name string, codeFn codeHandlerFunc) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.codeRequestHandler = codeFn + return source + } + // Count how many times it's invoked. Remember, there are only 8 unique hashes, + // so it shouldn't be more than that + var counter int + syncer := setupSyncer( + mkSource("capped", func(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { + counter++ + return cappedCodeRequestHandler(t, id, hashes, max) + }), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + + // There are only 8 unique hashes, and 3K accounts. However, the code + // deduplication is per request batch. If it were a perfect global dedup, + // we would expect only 8 requests. If there were no dedup, there would be + // 3k requests. + // We expect somewhere below 100 requests for these 8 unique hashes. But + // the number can be flaky, so don't limit it so strictly. + if threshold := 100; counter > threshold { + t.Logf("Error, expected < %d invocations, got %d", threshold, counter) + } + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncBoundaryStorageTrie tests sync against a few normal peers, but the +// storage trie has a few boundary elements. +func TestSyncBoundaryStorageTrie(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(10, 1000, false, true) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + return source + } + syncer := setupSyncer( + mkSource("peer-a"), + mkSource("peer-b"), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncWithStorageAndOneCappedPeer tests sync using accounts + storage, where one peer is +// consistently returning very small results +func TestSyncWithStorageAndOneCappedPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(300, 1000, false, false) + + mkSource := func(name string, slow bool) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + + if slow { + source.storageRequestHandler = starvingStorageRequestHandler + } + return source + } + + syncer := setupSyncer( + mkSource("nice-a", false), + mkSource("slow", true), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncWithStorageAndCorruptPeer tests sync using accounts + storage, where one peer is +// sometimes sending bad proofs +func TestSyncWithStorageAndCorruptPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(100, 3000, true, false) + + mkSource := func(name string, handler storageHandlerFunc) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + source.storageRequestHandler = handler + return source + } + + syncer := setupSyncer( + mkSource("nice-a", defaultStorageRequestHandler), + mkSource("nice-b", defaultStorageRequestHandler), + mkSource("nice-c", defaultStorageRequestHandler), + mkSource("corrupt", corruptStorageRequestHandler), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +func TestSyncWithStorageAndNonProvingPeer(t *testing.T) { + t.Parallel() + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorage(100, 3000, true, false) + + mkSource := func(name string, handler storageHandlerFunc) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + source.storageRequestHandler = handler + return source + } + syncer := setupSyncer( + mkSource("nice-a", defaultStorageRequestHandler), + mkSource("nice-b", defaultStorageRequestHandler), + mkSource("nice-c", defaultStorageRequestHandler), + mkSource("corrupt", noProofStorageRequestHandler), + ) + done := checkStall(t, term) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + close(done) + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +// TestSyncWithStorage tests basic sync using accounts + storage + code, against +// a peer who insists on delivering full storage sets _and_ proofs. This triggered +// an error, where the recipient erroneously clipped the boundary nodes, but +// did not mark the account for healing. +func TestSyncWithStorageMisbehavingProve(t *testing.T) { + t.Parallel() + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems, storageTries, storageElems := makeAccountTrieWithStorageWithUniqueStorage(10, 30, false) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + source.storageTries = storageTries + source.storageValues = storageElems + source.storageRequestHandler = proofHappyStorageRequestHandler + return source + } + syncer := setupSyncer(mkSource("sourceA")) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) +} + +type kv struct { + k, v []byte +} + +// Some helpers for sorting +type entrySlice []*kv + +func (p entrySlice) Len() int { return len(p) } +func (p entrySlice) Less(i, j int) bool { return bytes.Compare(p[i].k, p[j].k) < 0 } +func (p entrySlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +func key32(i uint64) []byte { + key := make([]byte, 32) + binary.LittleEndian.PutUint64(key, i) + return key +} + +var ( + codehashes = []common.Hash{ + crypto.Keccak256Hash([]byte{0}), + crypto.Keccak256Hash([]byte{1}), + crypto.Keccak256Hash([]byte{2}), + crypto.Keccak256Hash([]byte{3}), + crypto.Keccak256Hash([]byte{4}), + crypto.Keccak256Hash([]byte{5}), + crypto.Keccak256Hash([]byte{6}), + crypto.Keccak256Hash([]byte{7}), + } +) + +// getCodeHash returns a pseudo-random code hash +func getCodeHash(i uint64) []byte { + h := codehashes[int(i)%len(codehashes)] + return common.CopyBytes(h[:]) +} + +// getCodeByHash convenience function to lookup the code from the code hash +func getCodeByHash(hash common.Hash) []byte { + if hash == emptyCode { + return nil + } + for i, h := range codehashes { + if h == hash { + return []byte{byte(i)} + } + } + return nil +} + +// makeAccountTrieNoStorage spits out a trie, along with the leafs +func makeAccountTrieNoStorage(n int) (*trie.Trie, entrySlice) { + var ( + db = trie.NewDatabase(rawdb.NewMemoryDatabase()) + accTrie = trie.NewEmpty(db) + entries entrySlice + ) + for i := uint64(1); i <= uint64(n); i++ { + value, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: i, + Balance: big.NewInt(int64(i)), + Root: emptyRoot, + CodeHash: getCodeHash(i), + }) + key := key32(i) + elem := &kv{key, value} + accTrie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + sort.Sort(entries) + + // Commit the state changes into db and re-create the trie + // for accessing later. + root, nodes, _ := accTrie.Commit(false) + db.Update(trie.NewWithNodeSet(nodes)) + + accTrie, _ = trie.New(common.Hash{}, root, db) + return accTrie, entries +} + +// makeBoundaryAccountTrie constructs an account trie. Instead of filling +// accounts normally, this function will fill a few accounts which have +// boundary hash. +func makeBoundaryAccountTrie(n int) (*trie.Trie, entrySlice) { + var ( + entries entrySlice + boundaries []common.Hash + + db = trie.NewDatabase(rawdb.NewMemoryDatabase()) + accTrie = trie.NewEmpty(db) + ) + // Initialize boundaries + var next common.Hash + step := new(big.Int).Sub( + new(big.Int).Div( + new(big.Int).Exp(common.Big2, common.Big256, nil), + big.NewInt(int64(accountConcurrency)), + ), common.Big1, + ) + for i := 0; i < accountConcurrency; i++ { + last := common.BigToHash(new(big.Int).Add(next.Big(), step)) + if i == accountConcurrency-1 { + last = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + } + boundaries = append(boundaries, last) + next = common.BigToHash(new(big.Int).Add(last.Big(), common.Big1)) + } + // Fill boundary accounts + for i := 0; i < len(boundaries); i++ { + value, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: uint64(0), + Balance: big.NewInt(int64(i)), + Root: emptyRoot, + CodeHash: getCodeHash(uint64(i)), + }) + elem := &kv{boundaries[i].Bytes(), value} + accTrie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + // Fill other accounts if required + for i := uint64(1); i <= uint64(n); i++ { + value, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: i, + Balance: big.NewInt(int64(i)), + Root: emptyRoot, + CodeHash: getCodeHash(i), + }) + elem := &kv{key32(i), value} + accTrie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + sort.Sort(entries) + + // Commit the state changes into db and re-create the trie + // for accessing later. + root, nodes, _ := accTrie.Commit(false) + db.Update(trie.NewWithNodeSet(nodes)) + + accTrie, _ = trie.New(common.Hash{}, root, db) + return accTrie, entries +} + +// makeAccountTrieWithStorageWithUniqueStorage creates an account trie where each accounts +// has a unique storage set. +func makeAccountTrieWithStorageWithUniqueStorage(accounts, slots int, code bool) (*trie.Trie, entrySlice, map[common.Hash]*trie.Trie, map[common.Hash]entrySlice) { + var ( + db = trie.NewDatabase(rawdb.NewMemoryDatabase()) + accTrie = trie.NewEmpty(db) + entries entrySlice + storageRoots = make(map[common.Hash]common.Hash) + storageTries = make(map[common.Hash]*trie.Trie) + storageEntries = make(map[common.Hash]entrySlice) + nodes = trie.NewMergedNodeSet() + ) + // Create n accounts in the trie + for i := uint64(1); i <= uint64(accounts); i++ { + key := key32(i) + codehash := emptyCode[:] + if code { + codehash = getCodeHash(i) + } + // Create a storage trie + stRoot, stNodes, stEntries := makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), i, db) + nodes.Merge(stNodes) + + value, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: i, + Balance: big.NewInt(int64(i)), + Root: stRoot, + CodeHash: codehash, + }) + elem := &kv{key, value} + accTrie.Update(elem.k, elem.v) + entries = append(entries, elem) + + storageRoots[common.BytesToHash(key)] = stRoot + storageEntries[common.BytesToHash(key)] = stEntries + } + sort.Sort(entries) + + // Commit account trie + root, set, _ := accTrie.Commit(true) + nodes.Merge(set) + + // Commit gathered dirty nodes into database + db.Update(nodes) + + // Re-create tries with new root + accTrie, _ = trie.New(common.Hash{}, root, db) + for i := uint64(1); i <= uint64(accounts); i++ { + key := key32(i) + trie, _ := trie.New(common.BytesToHash(key), storageRoots[common.BytesToHash(key)], db) + storageTries[common.BytesToHash(key)] = trie + } + return accTrie, entries, storageTries, storageEntries +} + +// makeAccountTrieWithStorage spits out a trie, along with the leafs +func makeAccountTrieWithStorage(accounts, slots int, code, boundary bool) (*trie.Trie, entrySlice, map[common.Hash]*trie.Trie, map[common.Hash]entrySlice) { + var ( + db = trie.NewDatabase(rawdb.NewMemoryDatabase()) + accTrie = trie.NewEmpty(db) + entries entrySlice + storageRoots = make(map[common.Hash]common.Hash) + storageTries = make(map[common.Hash]*trie.Trie) + storageEntries = make(map[common.Hash]entrySlice) + nodes = trie.NewMergedNodeSet() + ) + // Create n accounts in the trie + for i := uint64(1); i <= uint64(accounts); i++ { + key := key32(i) + codehash := emptyCode[:] + if code { + codehash = getCodeHash(i) + } + // Make a storage trie + var ( + stRoot common.Hash + stNodes *trie.NodeSet + stEntries entrySlice + ) + if boundary { + stRoot, stNodes, stEntries = makeBoundaryStorageTrie(common.BytesToHash(key), slots, db) + } else { + stRoot, stNodes, stEntries = makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), 0, db) + } + nodes.Merge(stNodes) + + value, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: i, + Balance: big.NewInt(int64(i)), + Root: stRoot, + CodeHash: codehash, + }) + elem := &kv{key, value} + accTrie.Update(elem.k, elem.v) + entries = append(entries, elem) + + // we reuse the same one for all accounts + storageRoots[common.BytesToHash(key)] = stRoot + storageEntries[common.BytesToHash(key)] = stEntries + } + sort.Sort(entries) + + // Commit account trie + root, set, _ := accTrie.Commit(true) + nodes.Merge(set) + + // Commit gathered dirty nodes into database + db.Update(nodes) + + // Re-create tries with new root + accTrie, err := trie.New(common.Hash{}, root, db) + if err != nil { + panic(err) + } + for i := uint64(1); i <= uint64(accounts); i++ { + key := key32(i) + trie, err := trie.New(common.BytesToHash(key), storageRoots[common.BytesToHash(key)], db) + if err != nil { + panic(err) + } + storageTries[common.BytesToHash(key)] = trie + } + return accTrie, entries, storageTries, storageEntries +} + +// makeStorageTrieWithSeed fills a storage trie with n items, returning the +// not-yet-committed trie and the sorted entries. The seeds can be used to ensure +// that tries are unique. +func makeStorageTrieWithSeed(owner common.Hash, n, seed uint64, db *trie.Database) (common.Hash, *trie.NodeSet, entrySlice) { + trie, _ := trie.New(owner, common.Hash{}, db) + var entries entrySlice + for i := uint64(1); i <= n; i++ { + // store 'x' at slot 'x' + slotValue := key32(i + seed) + rlpSlotValue, _ := rlp.EncodeToBytes(common.TrimLeftZeroes(slotValue[:])) + + slotKey := key32(i) + key := crypto.Keccak256Hash(slotKey[:]) + + elem := &kv{key[:], rlpSlotValue} + trie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + sort.Sort(entries) + root, nodes, _ := trie.Commit(false) + return root, nodes, entries +} + +// makeBoundaryStorageTrie constructs a storage trie. Instead of filling +// storage slots normally, this function will fill a few slots which have +// boundary hash. +func makeBoundaryStorageTrie(owner common.Hash, n int, db *trie.Database) (common.Hash, *trie.NodeSet, entrySlice) { + var ( + entries entrySlice + boundaries []common.Hash + trie, _ = trie.New(owner, common.Hash{}, db) + ) + // Initialize boundaries + var next common.Hash + step := new(big.Int).Sub( + new(big.Int).Div( + new(big.Int).Exp(common.Big2, common.Big256, nil), + big.NewInt(int64(accountConcurrency)), + ), common.Big1, + ) + for i := 0; i < accountConcurrency; i++ { + last := common.BigToHash(new(big.Int).Add(next.Big(), step)) + if i == accountConcurrency-1 { + last = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + } + boundaries = append(boundaries, last) + next = common.BigToHash(new(big.Int).Add(last.Big(), common.Big1)) + } + // Fill boundary slots + for i := 0; i < len(boundaries); i++ { + key := boundaries[i] + val := []byte{0xde, 0xad, 0xbe, 0xef} + + elem := &kv{key[:], val} + trie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + // Fill other slots if required + for i := uint64(1); i <= uint64(n); i++ { + slotKey := key32(i) + key := crypto.Keccak256Hash(slotKey[:]) + + slotValue := key32(i) + rlpSlotValue, _ := rlp.EncodeToBytes(common.TrimLeftZeroes(slotValue[:])) + + elem := &kv{key[:], rlpSlotValue} + trie.Update(elem.k, elem.v) + entries = append(entries, elem) + } + sort.Sort(entries) + root, nodes, _ := trie.Commit(false) + return root, nodes, entries +} + +func verifyTrie(db ethdb.KeyValueStore, root common.Hash, t *testing.T) { + t.Helper() + triedb := trie.NewDatabase(db) + accTrie, err := trie.New(common.Hash{}, root, triedb) + if err != nil { + t.Fatal(err) + } + accounts, slots := 0, 0 + accIt := trie.NewIterator(accTrie.NodeIterator(nil)) + for accIt.Next() { + var acc struct { + Nonce uint64 + Balance *big.Int + Root common.Hash + CodeHash []byte + } + if err := rlp.DecodeBytes(accIt.Value, &acc); err != nil { + log.Crit("Invalid account encountered during snapshot creation", "err", err) + } + accounts++ + if acc.Root != emptyRoot { + storeTrie, err := trie.NewStateTrie(common.BytesToHash(accIt.Key), acc.Root, triedb) + if err != nil { + t.Fatal(err) + } + storeIt := trie.NewIterator(storeTrie.NodeIterator(nil)) + for storeIt.Next() { + slots++ + } + if err := storeIt.Err; err != nil { + t.Fatal(err) + } + } + } + if err := accIt.Err; err != nil { + t.Fatal(err) + } + t.Logf("accounts: %d, slots: %d", accounts, slots) +} + +// TestSyncAccountPerformance tests how efficient the snap algo is at minimizing +// state healing +func TestSyncAccountPerformance(t *testing.T) { + // Set the account concurrency to 1. This _should_ result in the + // range root to become correct, and there should be no healing needed + defer func(old int) { accountConcurrency = old }(accountConcurrency) + accountConcurrency = 1 + + var ( + once sync.Once + cancel = make(chan struct{}) + term = func() { + once.Do(func() { + close(cancel) + }) + } + ) + sourceAccountTrie, elems := makeAccountTrieNoStorage(100) + + mkSource := func(name string) *testPeer { + source := newTestPeer(name, t, term) + source.accountTrie = sourceAccountTrie + source.accountValues = elems + return source + } + src := mkSource("source") + syncer := setupSyncer(src) + if err := syncer.Sync(sourceAccountTrie.Hash(), cancel); err != nil { + t.Fatalf("sync failed: %v", err) + } + verifyTrie(syncer.db, sourceAccountTrie.Hash(), t) + // The trie root will always be requested, since it is added when the snap + // sync cycle starts. When popping the queue, we do not look it up again. + // Doing so would bring this number down to zero in this artificial testcase, + // but only add extra IO for no reason in practice. + if have, want := src.nTrienodeRequests, 1; have != want { + fmt.Print(src.Stats()) + t.Errorf("trie node heal requests wrong, want %d, have %d", want, have) + } +} + +func TestSlotEstimation(t *testing.T) { + for i, tc := range []struct { + last common.Hash + count int + want uint64 + }{ + { + // Half the space + common.HexToHash("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + 100, + 100, + }, + { + // 1 / 16th + common.HexToHash("0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + 100, + 1500, + }, + { + // Bit more than 1 / 16th + common.HexToHash("0x1000000000000000000000000000000000000000000000000000000000000000"), + 100, + 1499, + }, + { + // Almost everything + common.HexToHash("0xF000000000000000000000000000000000000000000000000000000000000000"), + 100, + 6, + }, + { + // Almost nothing -- should lead to error + common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000001"), + 1, + 0, + }, + { + // Nothing -- should lead to error + common.Hash{}, + 100, + 0, + }, + } { + have, _ := estimateRemainingSlots(tc.count, tc.last) + if want := tc.want; have != want { + t.Errorf("test %d: have %d want %d", i, have, want) + } + } +} diff --git a/eth/protocols/snap/tracker.go b/eth/protocols/snap/tracker.go new file mode 100644 index 00000000..2cf59cc2 --- /dev/null +++ b/eth/protocols/snap/tracker.go @@ -0,0 +1,26 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "time" + + "github.com/ethereum/go-ethereum/p2p/tracker" +) + +// requestTracker is a singleton tracker for request times. +var requestTracker = tracker.New(ProtocolName, time.Minute) diff --git a/eth/state_accessor.go b/eth/state_accessor.go new file mode 100644 index 00000000..12dba8a0 --- /dev/null +++ b/eth/state_accessor.go @@ -0,0 +1,202 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "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/log" + "github.com/ethereum/go-ethereum/trie" +) + +// StateAtBlock 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. The optional +// base layer statedb can be passed then it's regarded as the statedb of the +// parent block. +// Parameters: +// - block: The block for which we want the state (== state at the stateRoot of the parent) +// - reexec: The maximum number of blocks to reprocess trying to obtain the desired state +// - base: If the caller is tracing multiple blocks, the caller can provide the parent state +// continuously from the callsite. +// - checklive: if true, then the live 'blockchain' state database is used. If the caller want to +// perform Commit or other 'save-to-disk' changes, this should be set to false to avoid +// storing trash persistently +// - preferDisk: this arg can be used by the caller to signal that even though the 'base' is provided, +// it would be preferable to start from a fresh state, if we have it on disk. +func (eth *Ethereum) StateAtBlock(block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (statedb *state.StateDB, err error) { + var ( + current *types.Block + database state.Database + report = true + origin = block.NumberU64() + ) + // Check the live database first if we have the state fully available, use that. + if checkLive { + statedb, err = eth.blockchain.StateAt(block.Root()) + if err == nil { + return statedb, nil + } + } + if base != nil { + if preferDisk { + // Create an ephemeral trie.Database for isolating the live one. Otherwise + // the internal junks created by tracing will be persisted into the disk. + database = state.NewDatabaseWithConfig(eth.chainDb, &trie.Config{Cache: 16}) + if statedb, err = state.New(block.Root(), database, nil); err == nil { + log.Info("Found disk backend for state trie", "root", block.Root(), "number", block.Number()) + return statedb, nil + } + } + // The optional base statedb is given, mark the start point as parent block + statedb, database, report = base, base.Database(), false + current = eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) + } else { + // Otherwise try to reexec blocks until we find a state or reach our limit + current = block + + // Create an ephemeral trie.Database for isolating the live one. Otherwise + // the internal junks created by tracing will be persisted into the disk. + database = state.NewDatabaseWithConfig(eth.chainDb, &trie.Config{Cache: 16}) + + // If we didn't check the dirty database, do check the clean one, otherwise + // we would rewind past a persisted block (specific corner case is chain + // tracing from the genesis). + if !checkLive { + statedb, err = state.New(current.Root(), database, nil) + if err == nil { + return statedb, nil + } + } + // Database does not have the state for the given block, try to regenerate + for i := uint64(0); i < reexec; i++ { + if current.NumberU64() == 0 { + return nil, errors.New("genesis state is missing") + } + parent := eth.blockchain.GetBlock(current.ParentHash(), current.NumberU64()-1) + if parent == nil { + return nil, fmt.Errorf("missing block %v %d", current.ParentHash(), current.NumberU64()-1) + } + current = parent + + statedb, err = state.New(current.Root(), database, nil) + if err == nil { + break + } + } + if err != nil { + switch err.(type) { + case *trie.MissingNodeError: + return nil, fmt.Errorf("required historical state unavailable (reexec=%d)", reexec) + default: + return nil, err + } + } + } + // State was available at historical point, regenerate + var ( + start = time.Now() + logged time.Time + parent common.Hash + ) + for current.NumberU64() < origin { + // Print progress logs if long enough time elapsed + if time.Since(logged) > 8*time.Second && report { + log.Info("Regenerating historical state", "block", current.NumberU64()+1, "target", origin, "remaining", origin-current.NumberU64()-1, "elapsed", time.Since(start)) + logged = time.Now() + } + // Retrieve the next block to regenerate and process it + next := current.NumberU64() + 1 + if current = eth.blockchain.GetBlockByNumber(next); current == nil { + return nil, fmt.Errorf("block #%d not found", next) + } + _, _, _, err := eth.blockchain.Processor().Process(current, statedb, vm.Config{}) + if err != nil { + return nil, fmt.Errorf("processing block %d failed: %v", current.NumberU64(), err) + } + // Finalize the state so any modifications are written to the trie + root, err := statedb.Commit(eth.blockchain.Config().IsEIP158(current.Number())) + if err != nil { + return nil, fmt.Errorf("stateAtBlock commit failed, number %d root %v: %w", + current.NumberU64(), current.Root().Hex(), err) + } + statedb, err = state.New(root, database, nil) + if err != nil { + return nil, fmt.Errorf("state reset after block %d failed: %v", current.NumberU64(), err) + } + database.TrieDB().Reference(root, common.Hash{}) + if parent != (common.Hash{}) { + database.TrieDB().Dereference(parent) + } + parent = root + } + if report { + nodes, imgs := database.TrieDB().Size() + log.Info("Historical state regenerated", "block", current.NumberU64(), "elapsed", time.Since(start), "nodes", nodes, "preimages", imgs) + } + return statedb, nil +} + +// stateAtTransaction returns the execution environment of a certain transaction. +func (eth *Ethereum) stateAtTransaction(block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) { + // Short circuit if it's genesis block. + if block.NumberU64() == 0 { + return nil, vm.BlockContext{}, nil, errors.New("no transaction in genesis") + } + // Create the parent state database + parent := eth.blockchain.GetBlock(block.ParentHash(), block.NumberU64()-1) + if parent == nil { + return nil, vm.BlockContext{}, nil, fmt.Errorf("parent %#x not found", block.ParentHash()) + } + // Lookup the statedb of parent block from the live database, + // otherwise regenerate it on the flight. + statedb, err := eth.StateAtBlock(parent, reexec, nil, true, false) + if err != nil { + return nil, vm.BlockContext{}, nil, err + } + if txIndex == 0 && len(block.Transactions()) == 0 { + return nil, vm.BlockContext{}, statedb, nil + } + // Recompute transactions up to the target index. + signer := types.MakeSigner(eth.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, block.BaseFee()) + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(block.Header(), eth.blockchain, nil) + if idx == txIndex { + return msg, context, statedb, nil + } + // Not yet the searched for transaction, execute on top of the current state + vmenv := vm.NewEVM(context, txContext, statedb, eth.blockchain.Config(), vm.Config{}) + statedb.Prepare(tx.Hash(), idx) + if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + return nil, vm.BlockContext{}, nil, 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.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) + } + return nil, vm.BlockContext{}, nil, fmt.Errorf("transaction index %d out of range for block %#x", txIndex, block.Hash()) +} diff --git a/eth/sync.go b/eth/sync.go index 6cedb5c9..8fd86b57 100644 --- a/eth/sync.go +++ b/eth/sync.go @@ -17,191 +17,257 @@ package eth import ( - "math/rand" + "errors" + "math/big" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/log" ) const ( forceSyncCycle = 10 * time.Second // Time interval to force syncs, even if few peers are available - minDesiredPeerCount = 5 // Amount of peers desired to start syncing - - // This is the target size for the packs of transactions sent by txsyncLoop. - // A pack can get larger than this if a single transactions exceeds this size. - txsyncPackSize = 100 * 1024 + defaultMinSyncPeers = 5 // Amount of peers desired to start syncing ) -type txsync struct { - p *peer - txs []*types.Transaction -} - // syncTransactions starts sending all currently pending transactions to the given peer. -func (pm *ProtocolManager) syncTransactions(p *peer) { +func (h *handler) syncTransactions(p *eth.Peer) { + // Assemble the set of transaction to broadcast or announce to the remote + // peer. Fun fact, this is quite an expensive operation as it needs to sort + // the transactions if the sorting is not cached yet. However, with a random + // order, insertions could overflow the non-executable queues and get dropped. + // + // TODO(karalabe): Figure out if we could get away with random order somehow var txs types.Transactions - pending, _ := pm.txpool.Pending() + pending := h.txpool.Pending(false) for _, batch := range pending { txs = append(txs, batch...) } if len(txs) == 0 { return } - select { - case pm.txsyncCh <- &txsync{p, txs}: - case <-pm.quitSync: + // The eth/65 protocol introduces proper transaction announcements, so instead + // of dripping transactions across multiple peers, just send the entire list as + // an announcement and let the remote side decide what they need (likely nothing). + hashes := make([]common.Hash, len(txs)) + for i, tx := range txs { + hashes[i] = tx.Hash() } + p.AsyncSendPooledTransactionHashes(hashes) } -// txsyncLoop takes care of the initial transaction sync for each new -// connection. When a new peer appears, we relay all currently pending -// transactions. In order to minimise egress bandwidth usage, we send -// the transactions in small packs to one peer at a time. -func (pm *ProtocolManager) txsyncLoop() { - var ( - pending = make(map[enode.ID]*txsync) - sending = false // whether a send is active - pack = new(txsync) // the pack that is being sent - done = make(chan error, 1) // result of the send - ) - - // send starts a sending a pack of transactions from the sync. - send := func(s *txsync) { - // Fill pack with transactions up to the target size. - size := common.StorageSize(0) - pack.p = s.p - pack.txs = pack.txs[:0] - for i := 0; i < len(s.txs) && size < txsyncPackSize; i++ { - pack.txs = append(pack.txs, s.txs[i]) - size += s.txs[i].Size() - } - // Remove the transactions that will be sent. - s.txs = s.txs[:copy(s.txs, s.txs[len(pack.txs):])] - if len(s.txs) == 0 { - delete(pending, s.p.ID()) - } - // Send the pack in the background. - s.p.Log().Trace("Sending batch of transactions", "count", len(pack.txs), "bytes", size) - sending = true - go func() { done <- pack.p.SendTransactions(pack.txs) }() - } +// chainSyncer coordinates blockchain sync components. +type chainSyncer struct { + handler *handler + force *time.Timer + forced bool // true when force timer fired + warned time.Time + peerEventCh chan struct{} + doneCh chan error // non-nil when sync is running +} - // pick chooses the next pending sync. - pick := func() *txsync { - if len(pending) == 0 { - return nil - } - n := rand.Intn(len(pending)) + 1 - for _, s := range pending { - if n--; n == 0 { - return s - } - } - return nil +// chainSyncOp is a scheduled sync operation. +type chainSyncOp struct { + mode downloader.SyncMode + peer *eth.Peer + td *big.Int + head common.Hash +} + +// newChainSyncer creates a chainSyncer. +func newChainSyncer(handler *handler) *chainSyncer { + return &chainSyncer{ + handler: handler, + peerEventCh: make(chan struct{}), } +} - for { - select { - case s := <-pm.txsyncCh: - pending[s.p.ID()] = s - if !sending { - send(s) - } - case err := <-done: - sending = false - // Stop tracking peers that cause send failures. - if err != nil { - pack.p.Log().Debug("Transaction send failed", "err", err) - delete(pending, pack.p.ID()) - } - // Schedule the next send. - if s := pick(); s != nil { - send(s) - } - case <-pm.quitSync: - return - } +// handlePeerEvent notifies the syncer about a change in the peer set. +// This is called for new peers and every time a peer announces a new +// chain head. +func (cs *chainSyncer) handlePeerEvent(peer *eth.Peer) bool { + select { + case cs.peerEventCh <- struct{}{}: + return true + case <-cs.handler.quitSync: + return false } } -// 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() +// loop runs in its own goroutine and launches the sync when necessary. +func (cs *chainSyncer) loop() { + defer cs.handler.wg.Done() + + cs.handler.blockFetcher.Start() + cs.handler.txFetcher.Start() + defer cs.handler.blockFetcher.Stop() + defer cs.handler.txFetcher.Stop() + defer cs.handler.downloader.Terminate() - // Wait for different events to fire synchronisation operations - forceSync := time.NewTicker(forceSyncCycle) - defer forceSync.Stop() + // The force timer lowers the peer count threshold down to one when it fires. + // This ensures we'll always start sync even if there aren't enough peers. + cs.force = time.NewTimer(forceSyncCycle) + defer cs.force.Stop() for { + if op := cs.nextSyncOp(); op != nil { + cs.startSync(op) + } 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 <-cs.peerEventCh: + // Peer information changed, recheck. + case err := <-cs.doneCh: + cs.doneCh = nil + cs.force.Reset(forceSyncCycle) + cs.forced = false - case <-forceSync.C: - // Force a sync even if not enough peers are present - go pm.synchronise(pm.peers.BestPeer()) + // If we've reached the merge transition but no beacon client is available, or + // it has not yet switched us over, keep warning the user that their infra is + // potentially flaky. + if errors.Is(err, downloader.ErrMergeTransition) && time.Since(cs.warned) > 10*time.Second { + log.Warn("Local chain is post-merge, waiting for beacon client sync switch-over...") + cs.warned = time.Now() + } + case <-cs.force.C: + cs.forced = true - case <-pm.noMorePeers: + case <-cs.handler.quitSync: + // Disable all insertion on the blockchain. This needs to happen before + // terminating the downloader because the downloader waits for blockchain + // inserts, and these can take a long time to finish. + cs.handler.chain.StopInsert() + cs.handler.downloader.Terminate() + if cs.doneCh != nil { + <-cs.doneCh + } return } } } -// 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 +// nextSyncOp determines whether sync is required at this time. +func (cs *chainSyncer) nextSyncOp() *chainSyncOp { + if cs.doneCh != nil { + return nil // Sync already running + } + // If a beacon client once took over control, disable the entire legacy sync + // path from here on end. Note, there is a slight "race" between reaching TTD + // and the beacon client taking over. The downloader will enforce that nothing + // above the first TTD will be delivered to the chain for import. + // + // An alternative would be to check the local chain for exceeding the TTD and + // avoid triggering a sync in that case, but that could also miss sibling or + // other family TTD block being accepted. + if cs.handler.chain.Config().TerminalTotalDifficultyPassed || cs.handler.merger.TDDReached() { + return nil + } + // Ensure we're at minimum peer count. + minPeers := defaultMinSyncPeers + if cs.forced { + minPeers = 1 + } else if minPeers > cs.handler.maxPeers { + minPeers = cs.handler.maxPeers + } + if cs.handler.peers.len() < minPeers { + return nil + } + // We have enough peers, pick the one with the highest TD, but avoid going + // over the terminal total difficulty. Above that we expect the consensus + // clients to direct the chain head to sync to. + peer := cs.handler.peers.peerWithHighestTD() if peer == nil { - return + return nil + } + mode, ourTD := cs.modeAndLocalHead() + op := peerToSyncOp(mode, peer) + if op.td.Cmp(ourTD) <= 0 { + // We seem to be in sync according to the legacy rules. In the merge + // world, it can also mean we're stuck on the merge block, waiting for + // a beacon client. In the latter case, notify the user. + if ttd := cs.handler.chain.Config().TerminalTotalDifficulty; ttd != nil && ourTD.Cmp(ttd) >= 0 && time.Since(cs.warned) > 10*time.Second { + log.Warn("Local chain is post-merge, waiting for beacon client sync switch-over...") + cs.warned = time.Now() + } + return nil // We're in sync } - // Make sure the peer's TD is higher than our own - currentBlock := pm.blockchain.CurrentBlock() - td := pm.blockchain.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) + return op +} - pHead, pTd := peer.Head() - if pTd.Cmp(td) <= 0 { - return +func peerToSyncOp(mode downloader.SyncMode, p *eth.Peer) *chainSyncOp { + peerHead, peerTD := p.Head() + return &chainSyncOp{mode: mode, peer: p, td: peerTD, head: peerHead} +} + +func (cs *chainSyncer) modeAndLocalHead() (downloader.SyncMode, *big.Int) { + // If we're in snap sync mode, return that directly + if atomic.LoadUint32(&cs.handler.snapSync) == 1 { + block := cs.handler.chain.CurrentFastBlock() + td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64()) + return downloader.SnapSync, td } - // Otherwise try to sync with the downloader - mode := downloader.FullSync - if atomic.LoadUint32(&pm.fastSync) == 1 { - // Fast sync was explicitly requested, and explicitly granted - mode = downloader.FastSync + // We are probably in full sync, but we might have rewound to before the + // snap sync pivot, check if we should reenable + if pivot := rawdb.ReadLastPivotNumber(cs.handler.database); pivot != nil { + if head := cs.handler.chain.CurrentBlock(); head.NumberU64() < *pivot { + block := cs.handler.chain.CurrentFastBlock() + td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64()) + return downloader.SnapSync, td + } } - 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 + // Nope, we're really full syncing + head := cs.handler.chain.CurrentBlock() + td := cs.handler.chain.GetTd(head.Hash(), head.NumberU64()) + return downloader.FullSync, td +} + +// startSync launches doSync in a new goroutine. +func (cs *chainSyncer) startSync(op *chainSyncOp) { + cs.doneCh = make(chan error, 1) + go func() { cs.doneCh <- cs.handler.doSync(op) }() +} + +// doSync synchronizes the local blockchain with a remote peer. +func (h *handler) doSync(op *chainSyncOp) error { + if op.mode == downloader.SnapSync { + // Before launch the snap sync, we have to ensure user uses the same + // txlookup limit. + // The main concern here is: during the snap sync Geth won't index the + // block(generate tx indices) before the HEAD-limit. But if user changes + // the limit in the next snap sync(e.g. user kill Geth manually and + // restart) then it will be hard for Geth to figure out the oldest block + // has been indexed. So here for the user-experience wise, it's non-optimal + // that user can't change limit during the snap sync. If changed, Geth + // will just blindly use the original one. + limit := h.chain.TxLookupLimit() + if stored := rawdb.ReadFastTxLookupLimit(h.database); stored == nil { + rawdb.WriteFastTxLookupLimit(h.database, limit) + } else if *stored != limit { + h.chain.SetTxLookupLimit(*stored) + log.Warn("Update txLookup limit", "provided", limit, "updated", *stored) } } - // 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 + // Run the sync cycle, and disable snap sync if we're past the pivot block + err := h.downloader.LegacySync(op.peer.ID(), op.head, op.td, h.chain.Config().TerminalTotalDifficulty, op.mode) + if err != nil { + return err } - if atomic.LoadUint32(&pm.fastSync) == 1 { - log.Info("Fast sync complete, auto disabling") - atomic.StoreUint32(&pm.fastSync, 0) + if atomic.LoadUint32(&h.snapSync) == 1 { + log.Info("Snap sync complete, auto disabling") + atomic.StoreUint32(&h.snapSync, 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 { + head := h.chain.CurrentBlock() + if head.NumberU64() >= h.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) + atomic.StoreUint32(&h.acceptTxs, 1) } } if head.NumberU64() > 0 { @@ -211,6 +277,7 @@ func (pm *ProtocolManager) synchronise(peer *peer) { // scenario will most often crop up in private and hackathon networks with // degenerate connectivity, but it should be healthy for the mainnet too to // more reliably update peers or the local TD state. - go pm.BroadcastBlock(head, false) + h.BroadcastBlock(head, false) } + return nil } diff --git a/eth/sync_test.go b/eth/sync_test.go index c86a3d6d..0b9f9e1b 100644 --- a/eth/sync_test.go +++ b/eth/sync_test.go @@ -21,35 +21,77 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" ) -// Tests that fast sync gets disabled as soon as a real block is successfully +// Tests that snap sync is disabled after a successful sync cycle. +func TestSnapSyncDisabling66(t *testing.T) { testSnapSyncDisabling(t, eth.ETH66, snap.SNAP1) } +func TestSnapSyncDisabling67(t *testing.T) { testSnapSyncDisabling(t, eth.ETH67, snap.SNAP1) } + +// Tests that snap sync gets disabled as soon as a real block is successfully // imported into the blockchain. -func TestFastSyncDisabling(t *testing.T) { - // Create a pristine protocol manager, check that fast sync is left enabled - pmEmpty, _ := newTestProtocolManagerMust(t, downloader.FastSync, 0, nil, nil) - if atomic.LoadUint32(&pmEmpty.fastSync) == 0 { - t.Fatalf("fast sync disabled on pristine blockchain") +func testSnapSyncDisabling(t *testing.T, ethVer uint, snapVer uint) { + t.Parallel() + + // Create an empty handler and ensure it's in snap sync mode + empty := newTestHandler() + if atomic.LoadUint32(&empty.handler.snapSync) == 0 { + t.Fatalf("snap sync disabled on pristine blockchain") } - // Create a full protocol manager, check that fast sync gets disabled - pmFull, _ := newTestProtocolManagerMust(t, downloader.FastSync, 1024, nil, nil) - if atomic.LoadUint32(&pmFull.fastSync) == 1 { - t.Fatalf("fast sync not disabled on non-empty blockchain") + defer empty.close() + + // Create a full handler and ensure snap sync ends up disabled + full := newTestHandlerWithBlocks(1024) + if atomic.LoadUint32(&full.handler.snapSync) == 1 { + t.Fatalf("snap sync not disabled on non-empty blockchain") } - // Sync up the two peers - io1, io2 := p2p.MsgPipe() + defer full.close() + + // Sync up the two handlers via both `eth` and `snap` + caps := []p2p.Cap{{Name: "eth", Version: ethVer}, {Name: "snap", Version: snapVer}} + + emptyPipeEth, fullPipeEth := p2p.MsgPipe() + defer emptyPipeEth.Close() + defer fullPipeEth.Close() - go pmFull.handle(pmFull.newPeer(63, p2p.NewPeer(enode.ID{}, "empty", nil), io2)) - go pmEmpty.handle(pmEmpty.newPeer(63, p2p.NewPeer(enode.ID{}, "full", nil), io1)) + emptyPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{1}, "", caps), emptyPipeEth, empty.txpool) + fullPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{2}, "", caps), fullPipeEth, full.txpool) + defer emptyPeerEth.Close() + defer fullPeerEth.Close() + go empty.handler.runEthPeer(emptyPeerEth, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(empty.handler), peer) + }) + go full.handler.runEthPeer(fullPeerEth, func(peer *eth.Peer) error { + return eth.Handle((*ethHandler)(full.handler), peer) + }) + + emptyPipeSnap, fullPipeSnap := p2p.MsgPipe() + defer emptyPipeSnap.Close() + defer fullPipeSnap.Close() + + emptyPeerSnap := snap.NewPeer(snapVer, p2p.NewPeer(enode.ID{1}, "", caps), emptyPipeSnap) + fullPeerSnap := snap.NewPeer(snapVer, p2p.NewPeer(enode.ID{2}, "", caps), fullPipeSnap) + + go empty.handler.runSnapExtension(emptyPeerSnap, func(peer *snap.Peer) error { + return snap.Handle((*snapHandler)(empty.handler), peer) + }) + go full.handler.runSnapExtension(fullPeerSnap, func(peer *snap.Peer) error { + return snap.Handle((*snapHandler)(full.handler), peer) + }) + // Wait a bit for the above handlers to start time.Sleep(250 * time.Millisecond) - pmEmpty.synchronise(pmEmpty.peers.BestPeer()) - // Check that fast sync was disabled - if atomic.LoadUint32(&pmEmpty.fastSync) == 1 { - t.Fatalf("fast sync not disabled after successful synchronisation") + // Check that snap sync was disabled + op := peerToSyncOp(downloader.SnapSync, empty.handler.peers.peerWithHighestTD()) + if err := empty.handler.doSync(op); err != nil { + t.Fatal("sync failed:", err) + } + if atomic.LoadUint32(&empty.handler.snapSync) == 1 { + t.Fatalf("snap sync not disabled after successful synchronisation") } } diff --git a/eth/tracers/api.go b/eth/tracers/api.go new file mode 100644 index 00000000..092950e7 --- /dev/null +++ b/eth/tracers/api.go @@ -0,0 +1,925 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracers + +import ( + "bufio" + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "os" + "runtime" + "sync" + "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/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/tracers/logger" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" +) + +const ( + // defaultTraceTimeout is the amount of time a single transaction can execute + // by default before being forcefully aborted. + defaultTraceTimeout = 5 * time.Second + + // defaultTraceReexec is the number of blocks the tracer is willing to go back + // and reexecute to produce missing historical state necessary to run a specific + // trace. + defaultTraceReexec = uint64(128) + + // defaultTracechainMemLimit is the size of the triedb, at which traceChain + // switches over and tries to use a disk-backed database instead of building + // on top of memory. + // For non-archive nodes, this limit _will_ be overblown, as disk-backed tries + // will only be found every ~15K blocks or so. + defaultTracechainMemLimit = common.StorageSize(500 * 1024 * 1024) +) + +// Backend interface provides the common API services (that are provided by +// both full and light clients) with access to necessary functions. +type Backend interface { + HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) + HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) + BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) + BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) + GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) + RPCGasCap() uint64 + ChainConfig() *params.ChainConfig + Engine() consensus.Engine + ChainDb() ethdb.Database + // StateAtBlock returns the state corresponding to the stateroot of the block. + // N.B: For executing transactions on block N, the required stateRoot is block N-1, + // so this method should be called with the parent. + StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive, preferDisk bool) (*state.StateDB, error) + StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) +} + +// API is the collection of tracing APIs exposed over the private debugging endpoint. +type API struct { + backend Backend +} + +// NewAPI creates a new API definition for the tracing methods of the Ethereum service. +func NewAPI(backend Backend) *API { + return &API{backend: backend} +} + +type chainContext struct { + api *API + ctx context.Context +} + +func (context *chainContext) Engine() consensus.Engine { + return context.api.backend.Engine() +} + +func (context *chainContext) GetHeader(hash common.Hash, number uint64) *types.Header { + header, err := context.api.backend.HeaderByNumber(context.ctx, rpc.BlockNumber(number)) + if err != nil { + return nil + } + if header.Hash() == hash { + return header + } + header, err = context.api.backend.HeaderByHash(context.ctx, hash) + if err != nil { + return nil + } + return header +} + +// chainContext constructs the context reader which is used by the evm for reading +// the necessary chain context. +func (api *API) chainContext(ctx context.Context) core.ChainContext { + return &chainContext{api: api, ctx: ctx} +} + +// blockByNumber is the wrapper of the chain access function offered by the backend. +// It will return an error if the block is not found. +func (api *API) blockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { + block, err := api.backend.BlockByNumber(ctx, number) + if err != nil { + return nil, err + } + if block == nil { + return nil, fmt.Errorf("block #%d not found", number) + } + return block, nil +} + +// blockByHash is the wrapper of the chain access function offered by the backend. +// It will return an error if the block is not found. +func (api *API) blockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + block, err := api.backend.BlockByHash(ctx, hash) + if err != nil { + return nil, err + } + if block == nil { + return nil, fmt.Errorf("block %s not found", hash.Hex()) + } + return block, nil +} + +// blockByNumberAndHash is the wrapper of the chain access function offered by +// the backend. It will return an error if the block is not found. +// +// Note this function is friendly for the light client which can only retrieve the +// historical(before the CHT) header/block by number. +func (api *API) blockByNumberAndHash(ctx context.Context, number rpc.BlockNumber, hash common.Hash) (*types.Block, error) { + block, err := api.blockByNumber(ctx, number) + if err != nil { + return nil, err + } + if block.Hash() == hash { + return block, nil + } + return api.blockByHash(ctx, hash) +} + +// TraceConfig holds extra parameters to trace functions. +type TraceConfig struct { + *logger.Config + Tracer *string + Timeout *string + Reexec *uint64 + // Config specific to given tracer. Note struct logger + // config are historically embedded in main object. + TracerConfig json.RawMessage +} + +// TraceCallConfig is the config for traceCall API. It holds one more +// field to override the state for tracing. +type TraceCallConfig struct { + TraceConfig + StateOverrides *ethapi.StateOverride + BlockOverrides *ethapi.BlockOverrides +} + +// StdTraceConfig holds extra parameters to standard-json trace functions. +type StdTraceConfig struct { + logger.Config + Reexec *uint64 + TxHash common.Hash +} + +// txTraceResult is the result of a single transaction trace. +type txTraceResult struct { + Result interface{} `json:"result,omitempty"` // Trace results produced by the tracer + Error string `json:"error,omitempty"` // Trace failure produced by the tracer +} + +// blockTraceTask represents a single block trace task when an entire chain is +// being traced. +type blockTraceTask struct { + statedb *state.StateDB // Intermediate state prepped for tracing + block *types.Block // Block to trace the transactions from + rootref common.Hash // Trie root reference held for this task + results []*txTraceResult // Trace results produced by the task +} + +// blockTraceResult represents the results of tracing a single block when an entire +// chain is being traced. +type blockTraceResult struct { + Block hexutil.Uint64 `json:"block"` // Block number corresponding to this trace + Hash common.Hash `json:"hash"` // Block hash corresponding to this trace + Traces []*txTraceResult `json:"traces"` // Trace results produced by the task +} + +// txTraceTask represents a single transaction trace task when an entire block +// is being traced. +type txTraceTask struct { + statedb *state.StateDB // Intermediate state prepped for tracing + index int // Transaction offset in the block +} + +// TraceChain returns the structured logs created during the execution of EVM +// between two blocks (excluding start) and returns them as a JSON object. +func (api *API) TraceChain(ctx context.Context, start, end rpc.BlockNumber, config *TraceConfig) (*rpc.Subscription, error) { // Fetch the block interval that we want to trace + from, err := api.blockByNumber(ctx, start) + if err != nil { + return nil, err + } + to, err := api.blockByNumber(ctx, end) + if err != nil { + return nil, err + } + if from.Number().Cmp(to.Number()) >= 0 { + return nil, fmt.Errorf("end block (#%d) needs to come after start block (#%d)", end, start) + } + return api.traceChain(ctx, from, to, config) +} + +// traceChain configures a new tracer according to the provided configuration, and +// executes all the transactions contained within. The return value will be one item +// per transaction, dependent on the requested tracer. +func (api *API) traceChain(ctx context.Context, start, end *types.Block, config *TraceConfig) (*rpc.Subscription, error) { + // Tracing a chain is a **long** operation, only do with subscriptions + notifier, supported := rpc.NotifierFromContext(ctx) + if !supported { + return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported + } + sub := notifier.CreateSubscription() + + // Prepare all the states for tracing. Note this procedure can take very + // long time. Timeout mechanism is necessary. + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + blocks := int(end.NumberU64() - start.NumberU64()) + threads := runtime.NumCPU() + if threads > blocks { + threads = blocks + } + var ( + pend = new(sync.WaitGroup) + tasks = make(chan *blockTraceTask, threads) + results = make(chan *blockTraceTask, threads) + localctx = context.Background() + ) + for th := 0; th < threads; th++ { + pend.Add(1) + go func() { + defer pend.Done() + + // Fetch and execute the next block trace tasks + for task := range tasks { + signer := types.MakeSigner(api.backend.ChainConfig(), task.block.Number()) + blockCtx := core.NewEVMBlockContext(task.block.Header(), api.chainContext(localctx), nil) + // Trace all the transactions contained within + for i, tx := range task.block.Transactions() { + msg, _ := tx.AsMessage(signer, task.block.BaseFee()) + txctx := &Context{ + BlockHash: task.block.Hash(), + TxIndex: i, + TxHash: tx.Hash(), + } + res, err := api.traceTx(localctx, msg, txctx, blockCtx, task.statedb, config) + if err != nil { + task.results[i] = &txTraceResult{Error: err.Error()} + log.Warn("Tracing failed", "hash", tx.Hash(), "block", task.block.NumberU64(), "err", err) + break + } + // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect + task.statedb.Finalise(api.backend.ChainConfig().IsEIP158(task.block.Number())) + task.results[i] = &txTraceResult{Result: res} + } + // Stream the result back to the user or abort on teardown + select { + case results <- task: + case <-notifier.Closed(): + return + } + } + }() + } + // Start a goroutine to feed all the blocks into the tracers + var ( + begin = time.Now() + derefTodo []common.Hash // list of hashes to dereference from the db + derefsMu sync.Mutex // mutex for the derefs + ) + + go func() { + var ( + logged time.Time + number uint64 + traced uint64 + failed error + parent common.Hash + statedb *state.StateDB + ) + // Ensure everything is properly cleaned up on any exit path + defer func() { + close(tasks) + pend.Wait() + + switch { + case failed != nil: + log.Warn("Chain tracing failed", "start", start.NumberU64(), "end", end.NumberU64(), "transactions", traced, "elapsed", time.Since(begin), "err", failed) + case number < end.NumberU64(): + log.Warn("Chain tracing aborted", "start", start.NumberU64(), "end", end.NumberU64(), "abort", number, "transactions", traced, "elapsed", time.Since(begin)) + default: + log.Info("Chain tracing finished", "start", start.NumberU64(), "end", end.NumberU64(), "transactions", traced, "elapsed", time.Since(begin)) + } + close(results) + }() + var preferDisk bool + // Feed all the blocks both into the tracer, as well as fast process concurrently + for number = start.NumberU64(); number < end.NumberU64(); number++ { + // Stop tracing if interruption was requested + select { + case <-notifier.Closed(): + return + default: + } + // clean out any derefs + derefsMu.Lock() + for _, h := range derefTodo { + statedb.Database().TrieDB().Dereference(h) + } + derefTodo = derefTodo[:0] + derefsMu.Unlock() + + // Print progress logs if long enough time elapsed + if time.Since(logged) > 8*time.Second { + logged = time.Now() + log.Info("Tracing chain segment", "start", start.NumberU64(), "end", end.NumberU64(), "current", number, "transactions", traced, "elapsed", time.Since(begin)) + } + // Retrieve the parent state to trace on top + block, err := api.blockByNumber(localctx, rpc.BlockNumber(number)) + if err != nil { + failed = err + break + } + // Prepare the statedb for tracing. Don't use the live database for + // tracing to avoid persisting state junks into the database. + statedb, err = api.backend.StateAtBlock(localctx, block, reexec, statedb, false, preferDisk) + if err != nil { + failed = err + break + } + if trieDb := statedb.Database().TrieDB(); trieDb != nil { + // Hold the reference for tracer, will be released at the final stage + trieDb.Reference(block.Root(), common.Hash{}) + + // Release the parent state because it's already held by the tracer + if parent != (common.Hash{}) { + trieDb.Dereference(parent) + } + // Prefer disk if the trie db memory grows too much + s1, s2 := trieDb.Size() + if !preferDisk && (s1+s2) > defaultTracechainMemLimit { + log.Info("Switching to prefer-disk mode for tracing", "size", s1+s2) + preferDisk = true + } + } + parent = block.Root() + + next, err := api.blockByNumber(localctx, rpc.BlockNumber(number+1)) + if err != nil { + failed = err + break + } + // Send the block over to the concurrent tracers (if not in the fast-forward phase) + txs := next.Transactions() + select { + case tasks <- &blockTraceTask{statedb: statedb.Copy(), block: next, rootref: block.Root(), results: make([]*txTraceResult, len(txs))}: + case <-notifier.Closed(): + return + } + traced += uint64(len(txs)) + } + }() + + // Keep reading the trace results and stream the to the user + go func() { + var ( + done = make(map[uint64]*blockTraceResult) + next = start.NumberU64() + 1 + ) + for res := range results { + // Queue up next received result + result := &blockTraceResult{ + Block: hexutil.Uint64(res.block.NumberU64()), + Hash: res.block.Hash(), + Traces: res.results, + } + // Schedule any parent tries held in memory by this task for dereferencing + done[uint64(result.Block)] = result + derefsMu.Lock() + derefTodo = append(derefTodo, res.rootref) + derefsMu.Unlock() + // Stream completed traces to the user, aborting on the first error + for result, ok := done[next]; ok; result, ok = done[next] { + if len(result.Traces) > 0 || next == end.NumberU64() { + notifier.Notify(sub.ID, result) + } + delete(done, next) + next++ + } + } + }() + return sub, nil +} + +// TraceBlockByNumber returns the structured logs created during the execution of +// EVM and returns them as a JSON object. +func (api *API) TraceBlockByNumber(ctx context.Context, number rpc.BlockNumber, config *TraceConfig) ([]*txTraceResult, error) { + block, err := api.blockByNumber(ctx, number) + if err != nil { + return nil, err + } + return api.traceBlock(ctx, block, config) +} + +// TraceBlockByHash returns the structured logs created during the execution of +// EVM and returns them as a JSON object. +func (api *API) TraceBlockByHash(ctx context.Context, hash common.Hash, config *TraceConfig) ([]*txTraceResult, error) { + block, err := api.blockByHash(ctx, hash) + if err != nil { + return nil, err + } + return api.traceBlock(ctx, block, config) +} + +// TraceBlock returns the structured logs created during the execution of EVM +// and returns them as a JSON object. +func (api *API) TraceBlock(ctx context.Context, blob hexutil.Bytes, config *TraceConfig) ([]*txTraceResult, error) { + block := new(types.Block) + if err := rlp.Decode(bytes.NewReader(blob), block); err != nil { + return nil, fmt.Errorf("could not decode block: %v", err) + } + return api.traceBlock(ctx, block, config) +} + +// TraceBlockFromFile returns the structured logs created during the execution of +// EVM and returns them as a JSON object. +func (api *API) TraceBlockFromFile(ctx context.Context, file string, config *TraceConfig) ([]*txTraceResult, error) { + blob, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("could not read file: %v", err) + } + return api.TraceBlock(ctx, blob, config) +} + +// TraceBadBlock returns the structured logs created during the execution of +// EVM against a block pulled from the pool of bad ones and returns them as a JSON +// object. +func (api *API) TraceBadBlock(ctx context.Context, hash common.Hash, config *TraceConfig) ([]*txTraceResult, error) { + block := rawdb.ReadBadBlock(api.backend.ChainDb(), hash) + if block == nil { + return nil, fmt.Errorf("bad block %#x not found", hash) + } + return api.traceBlock(ctx, block, config) +} + +// StandardTraceBlockToFile dumps the structured logs created during the +// execution of EVM to the local file system and returns a list of files +// to the caller. +func (api *API) StandardTraceBlockToFile(ctx context.Context, hash common.Hash, config *StdTraceConfig) ([]string, error) { + block, err := api.blockByHash(ctx, hash) + if err != nil { + return nil, err + } + return api.standardTraceBlockToFile(ctx, block, config) +} + +// IntermediateRoots executes a block (bad- or canon- or side-), and returns a list +// of intermediate roots: the stateroot after each transaction. +func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config *TraceConfig) ([]common.Hash, error) { + block, _ := api.blockByHash(ctx, hash) + if block == nil { + // Check in the bad blocks + block = rawdb.ReadBadBlock(api.backend.ChainDb(), hash) + } + if block == nil { + return nil, fmt.Errorf("block %#x not found", hash) + } + if block.NumberU64() == 0 { + return nil, errors.New("genesis is not traceable") + } + parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash()) + if err != nil { + return nil, err + } + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + statedb, err := api.backend.StateAtBlock(ctx, parent, reexec, nil, true, false) + if err != nil { + return nil, err + } + var ( + roots []common.Hash + signer = types.MakeSigner(api.backend.ChainConfig(), block.Number()) + chainConfig = api.backend.ChainConfig() + vmctx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + deleteEmptyObjects = chainConfig.IsEIP158(block.Number()) + ) + for i, tx := range block.Transactions() { + var ( + msg, _ = tx.AsMessage(signer, block.BaseFee()) + txContext = core.NewEVMTxContext(msg) + vmenv = vm.NewEVM(vmctx, txContext, statedb, chainConfig, vm.Config{}) + ) + statedb.Prepare(tx.Hash(), i) + if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())); err != nil { + log.Warn("Tracing intermediate roots did not complete", "txindex", i, "txhash", tx.Hash(), "err", err) + // We intentionally don't return the error here: if we do, then the RPC server will not + // return the roots. Most likely, the caller already knows that a certain transaction fails to + // be included, but still want the intermediate roots that led to that point. + // It may happen the tx_N causes an erroneous state, which in turn causes tx_N+M to not be + // executable. + // N.B: This should never happen while tracing canon blocks, only when tracing bad blocks. + return roots, nil + } + // calling IntermediateRoot will internally call Finalize on the state + // so any modifications are written to the trie + roots = append(roots, statedb.IntermediateRoot(deleteEmptyObjects)) + } + return roots, nil +} + +// StandardTraceBadBlockToFile dumps the structured logs created during the +// execution of EVM against a block pulled from the pool of bad ones to the +// local file system and returns a list of files to the caller. +func (api *API) StandardTraceBadBlockToFile(ctx context.Context, hash common.Hash, config *StdTraceConfig) ([]string, error) { + block := rawdb.ReadBadBlock(api.backend.ChainDb(), hash) + if block == nil { + return nil, fmt.Errorf("bad block %#x not found", hash) + } + return api.standardTraceBlockToFile(ctx, block, config) +} + +// traceBlock configures a new tracer according to the provided configuration, and +// executes all the transactions contained within. The return value will be one item +// per transaction, dependent on the requested tracer. +func (api *API) traceBlock(ctx context.Context, block *types.Block, config *TraceConfig) ([]*txTraceResult, error) { + if block.NumberU64() == 0 { + return nil, errors.New("genesis is not traceable") + } + parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash()) + if err != nil { + return nil, err + } + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + statedb, err := api.backend.StateAtBlock(ctx, parent, reexec, nil, true, false) + if err != nil { + return nil, err + } + // Execute all the transaction contained within the block concurrently + var ( + signer = types.MakeSigner(api.backend.ChainConfig(), block.Number()) + txs = block.Transactions() + results = make([]*txTraceResult, len(txs)) + + pend = new(sync.WaitGroup) + jobs = make(chan *txTraceTask, len(txs)) + ) + threads := runtime.NumCPU() + if threads > len(txs) { + threads = len(txs) + } + blockHash := block.Hash() + for th := 0; th < threads; th++ { + pend.Add(1) + go func() { + blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + defer pend.Done() + // Fetch and execute the next transaction trace tasks + for task := range jobs { + msg, _ := txs[task.index].AsMessage(signer, block.BaseFee()) + txctx := &Context{ + BlockHash: blockHash, + TxIndex: task.index, + TxHash: txs[task.index].Hash(), + } + res, err := api.traceTx(ctx, msg, txctx, blockCtx, task.statedb, config) + if err != nil { + results[task.index] = &txTraceResult{Error: err.Error()} + continue + } + results[task.index] = &txTraceResult{Result: res} + } + }() + } + // Feed the transactions into the tracers and return + var failed error + blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + for i, tx := range txs { + // Send the trace task over for execution + jobs <- &txTraceTask{statedb: statedb.Copy(), index: i} + + // Generate the next state snapshot fast without tracing + msg, _ := tx.AsMessage(signer, block.BaseFee()) + statedb.Prepare(tx.Hash(), i) + vmenv := vm.NewEVM(blockCtx, core.NewEVMTxContext(msg), statedb, api.backend.ChainConfig(), vm.Config{}) + if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())); err != nil { + failed = err + break + } + // Finalize the state so any modifications are written to the trie + // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect + statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) + } + close(jobs) + pend.Wait() + + // If execution failed in between, abort + if failed != nil { + return nil, failed + } + return results, nil +} + +// standardTraceBlockToFile configures a new tracer which uses standard JSON output, +// and traces either a full block or an individual transaction. The return value will +// be one filename per transaction traced. +func (api *API) 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{}) { + if !containsTx(block, config.TxHash) { + return nil, fmt.Errorf("transaction %#x not found in block", config.TxHash) + } + } + if block.NumberU64() == 0 { + return nil, errors.New("genesis is not traceable") + } + parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash()) + if err != nil { + return nil, err + } + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + statedb, err := api.backend.StateAtBlock(ctx, parent, reexec, nil, true, false) + if err != nil { + return nil, err + } + // Retrieve the tracing configurations, or use default values + var ( + logConfig logger.Config + txHash common.Hash + ) + if config != nil { + logConfig = config.Config + txHash = config.TxHash + } + logConfig.Debug = true + + // Execute transaction, either tracing all or just the requested one + var ( + dumps []string + signer = types.MakeSigner(api.backend.ChainConfig(), block.Number()) + chainConfig = api.backend.ChainConfig() + vmctx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + canon = true + ) + // Check if there are any overrides: the caller may wish to enable a future + // fork when executing this block. Note, such overrides are only applicable to the + // actual specified block, not any preceding blocks that we have to go through + // in order to obtain the state. + // Therefore, it's perfectly valid to specify `"futureForkBlock": 0`, to enable `futureFork` + + if config != nil && config.Overrides != nil { + // Copy the config, to not screw up the main config + // Note: the Clique-part is _not_ deep copied + chainConfigCopy := new(params.ChainConfig) + *chainConfigCopy = *chainConfig + chainConfig = chainConfigCopy + if berlin := config.Config.Overrides.BerlinBlock; berlin != nil { + chainConfig.BerlinBlock = berlin + canon = false + } + } + for i, tx := range block.Transactions() { + // Prepare the transaction for un-traced execution + var ( + msg, _ = tx.AsMessage(signer, block.BaseFee()) + txContext = core.NewEVMTxContext(msg) + vmConf vm.Config + dump *os.File + writer *bufio.Writer + err error + ) + // If the transaction needs tracing, swap out the configs + if tx.Hash() == txHash || txHash == (common.Hash{}) { + // Generate a unique temporary file to dump it into + prefix := fmt.Sprintf("block_%#x-%d-%#x-", block.Hash().Bytes()[:4], i, tx.Hash().Bytes()[:4]) + if !canon { + prefix = fmt.Sprintf("%valt-", prefix) + } + dump, err = os.CreateTemp(os.TempDir(), prefix) + if err != nil { + return nil, err + } + dumps = append(dumps, dump.Name()) + + // Swap out the noop logger to the standard tracer + writer = bufio.NewWriter(dump) + vmConf = vm.Config{ + Debug: true, + Tracer: logger.NewJSONLogger(&logConfig, writer), + EnablePreimageRecording: true, + } + } + // Execute the transaction and flush any traces to disk + vmenv := vm.NewEVM(vmctx, txContext, statedb, chainConfig, vmConf) + statedb.Prepare(tx.Hash(), i) + _, 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()) + } + if err != nil { + return dumps, err + } + // Finalize the state so any modifications are written to the trie + // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect + statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) + + // If we've traced the transaction we were looking for, abort + if tx.Hash() == txHash { + break + } + } + 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 +} + +// TraceTransaction returns the structured logs created during the execution of EVM +// and returns them as a JSON object. +func (api *API) TraceTransaction(ctx context.Context, hash common.Hash, config *TraceConfig) (interface{}, error) { + _, blockHash, blockNumber, index, err := api.backend.GetTransaction(ctx, hash) + if err != nil { + return nil, err + } + // It shouldn't happen in practice. + if blockNumber == 0 { + return nil, errors.New("genesis is not traceable") + } + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + block, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(blockNumber), blockHash) + if err != nil { + return nil, err + } + msg, vmctx, statedb, err := api.backend.StateAtTransaction(ctx, block, int(index), reexec) + if err != nil { + return nil, err + } + txctx := &Context{ + BlockHash: blockHash, + TxIndex: int(index), + TxHash: hash, + } + return api.traceTx(ctx, msg, txctx, vmctx, statedb, config) +} + +// TraceCall lets you trace a given eth_call. It collects the structured logs +// created during the execution of EVM if the given transaction was added on +// top of the provided block and returns them as a JSON object. +func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, config *TraceCallConfig) (interface{}, error) { + // Try to retrieve the specified block + var ( + err error + block *types.Block + ) + if hash, ok := blockNrOrHash.Hash(); ok { + block, err = api.blockByHash(ctx, hash) + } else if number, ok := blockNrOrHash.Number(); ok { + if number == rpc.PendingBlockNumber { + // We don't have access to the miner here. For tracing 'future' transactions, + // it can be done with block- and state-overrides instead, which offers + // more flexibility and stability than trying to trace on 'pending', since + // the contents of 'pending' is unstable and probably not a true representation + // of what the next actual block is likely to contain. + return nil, errors.New("tracing on top of pending is not supported") + } + block, err = api.blockByNumber(ctx, number) + } else { + return nil, errors.New("invalid arguments; neither block nor hash specified") + } + if err != nil { + return nil, err + } + // try to recompute the state + reexec := defaultTraceReexec + if config != nil && config.Reexec != nil { + reexec = *config.Reexec + } + statedb, err := api.backend.StateAtBlock(ctx, block, reexec, nil, true, false) + if err != nil { + return nil, err + } + vmctx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + // Apply the customization rules if required. + if config != nil { + if err := config.StateOverrides.Apply(statedb); err != nil { + return nil, err + } + config.BlockOverrides.Apply(&vmctx) + } + // Execute the trace + msg, err := args.ToMessage(api.backend.RPCGasCap(), block.BaseFee()) + if err != nil { + return nil, err + } + + var traceConfig *TraceConfig + if config != nil { + traceConfig = &TraceConfig{ + Config: config.Config, + Tracer: config.Tracer, + Timeout: config.Timeout, + Reexec: config.Reexec, + } + } + return api.traceTx(ctx, msg, new(Context), vmctx, statedb, traceConfig) +} + +// traceTx configures a new tracer according to the provided configuration, and +// executes the given message in the provided environment. The return value will +// be tracer dependent. +func (api *API) traceTx(ctx context.Context, message core.Message, txctx *Context, vmctx vm.BlockContext, statedb *state.StateDB, config *TraceConfig) (interface{}, error) { + var ( + tracer Tracer + err error + timeout = defaultTraceTimeout + txContext = core.NewEVMTxContext(message) + ) + if config == nil { + config = &TraceConfig{} + } + // Default tracer is the struct logger + tracer = logger.NewStructLogger(config.Config) + if config.Tracer != nil { + tracer, err = New(*config.Tracer, txctx, config.TracerConfig) + if err != nil { + return nil, err + } + } + // Define a meaningful timeout of a single transaction trace + if config.Timeout != nil { + if timeout, err = time.ParseDuration(*config.Timeout); err != nil { + return nil, err + } + } + deadlineCtx, cancel := context.WithTimeout(ctx, timeout) + go func() { + <-deadlineCtx.Done() + if errors.Is(deadlineCtx.Err(), context.DeadlineExceeded) { + tracer.Stop(errors.New("execution timeout")) + } + }() + defer cancel() + + // Run the transaction with tracing enabled. + vmenv := vm.NewEVM(vmctx, txContext, statedb, api.backend.ChainConfig(), vm.Config{Debug: true, Tracer: tracer, NoBaseFee: true}) + // Call Prepare to clear out the statedb access list + statedb.Prepare(txctx.TxHash, txctx.TxIndex) + if _, err = core.ApplyMessage(vmenv, message, new(core.GasPool).AddGas(message.Gas())); err != nil { + return nil, fmt.Errorf("tracing failed: %w", err) + } + return tracer.GetResult() +} + +// APIs return the collection of RPC services the tracer package offers. +func APIs(backend Backend) []rpc.API { + // Append all the local APIs and return + return []rpc.API{ + { + Namespace: "debug", + Service: NewAPI(backend), + }, + } +} diff --git a/eth/tracers/api_test.go b/eth/tracers/api_test.go new file mode 100644 index 00000000..b75b6793 --- /dev/null +++ b/eth/tracers/api_test.go @@ -0,0 +1,630 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracers + +import ( + "bytes" + "context" + "crypto/ecdsa" + "encoding/json" + "errors" + "fmt" + "math/big" + "reflect" + "sort" + "testing" + "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/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/tracers/logger" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + +var ( + errStateNotFound = errors.New("state not found") + errBlockNotFound = errors.New("block not found") + errTransactionNotFound = errors.New("transaction not found") +) + +type testBackend struct { + chainConfig *params.ChainConfig + engine consensus.Engine + chaindb ethdb.Database + chain *core.BlockChain +} + +func newTestBackend(t *testing.T, n int, gspec *core.Genesis, generator func(i int, b *core.BlockGen)) *testBackend { + backend := &testBackend{ + chainConfig: params.TestChainConfig, + engine: ethash.NewFaker(), + chaindb: rawdb.NewMemoryDatabase(), + } + // Generate blocks for testing + gspec.Config = backend.chainConfig + var ( + gendb = rawdb.NewMemoryDatabase() + genesis = gspec.MustCommit(gendb) + ) + blocks, _ := core.GenerateChain(backend.chainConfig, genesis, backend.engine, gendb, n, generator) + + // Import the canonical chain + gspec.MustCommit(backend.chaindb) + cacheConfig := &core.CacheConfig{ + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + SnapshotLimit: 0, + TrieDirtyDisabled: true, // Archive mode + } + chain, err := core.NewBlockChain(backend.chaindb, cacheConfig, gspec, nil, backend.engine, vm.Config{}, nil, 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) + } + backend.chain = chain + return backend +} + +func (b *testBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { + return b.chain.GetHeaderByHash(hash), nil +} + +func (b *testBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { + if number == rpc.PendingBlockNumber || number == rpc.LatestBlockNumber { + return b.chain.CurrentHeader(), nil + } + return b.chain.GetHeaderByNumber(uint64(number)), nil +} + +func (b *testBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + return b.chain.GetBlockByHash(hash), nil +} + +func (b *testBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { + if number == rpc.PendingBlockNumber || number == rpc.LatestBlockNumber { + return b.chain.CurrentBlock(), nil + } + return b.chain.GetBlockByNumber(uint64(number)), nil +} + +func (b *testBackend) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { + tx, hash, blockNumber, index := rawdb.ReadTransaction(b.chaindb, txHash) + if tx == nil { + return nil, common.Hash{}, 0, 0, errTransactionNotFound + } + return tx, hash, blockNumber, index, nil +} + +func (b *testBackend) RPCGasCap() uint64 { + return 25000000 +} + +func (b *testBackend) ChainConfig() *params.ChainConfig { + return b.chainConfig +} + +func (b *testBackend) Engine() consensus.Engine { + return b.engine +} + +func (b *testBackend) ChainDb() ethdb.Database { + return b.chaindb +} + +func (b *testBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (*state.StateDB, error) { + statedb, err := b.chain.StateAt(block.Root()) + if err != nil { + return nil, errStateNotFound + } + return statedb, nil +} + +func (b *testBackend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) { + parent := b.chain.GetBlock(block.ParentHash(), block.NumberU64()-1) + if parent == nil { + return nil, vm.BlockContext{}, nil, errBlockNotFound + } + statedb, err := b.chain.StateAt(parent.Root()) + if err != nil { + return nil, vm.BlockContext{}, nil, errStateNotFound + } + if txIndex == 0 && len(block.Transactions()) == 0 { + return nil, vm.BlockContext{}, statedb, nil + } + // Recompute transactions up to the target index. + signer := types.MakeSigner(b.chainConfig, block.Number()) + for idx, tx := range block.Transactions() { + msg, _ := tx.AsMessage(signer, block.BaseFee()) + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(block.Header(), b.chain, nil) + if idx == txIndex { + return msg, context, statedb, nil + } + vmenv := vm.NewEVM(context, txContext, statedb, b.chainConfig, vm.Config{}) + if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + return nil, vm.BlockContext{}, nil, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) + } + statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) + } + return nil, vm.BlockContext{}, nil, fmt.Errorf("transaction index %d out of range for block %#x", txIndex, block.Hash()) +} + +func TestTraceCall(t *testing.T) { + t.Parallel() + + // Initialize test accounts + accounts := newAccounts(3) + genesis := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + accounts[2].addr: {Balance: big.NewInt(params.Ether)}, + }, + } + genBlocks := 10 + signer := types.HomesteadSigner{} + api := NewAPI(newTestBackend(t, genBlocks, genesis, func(i int, b *core.BlockGen) { + // Transfer from account[0] to account[1] + // value: 1000 wei + // fee: 0 wei + tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + b.AddTx(tx) + })) + var testSuite = []struct { + blockNumber rpc.BlockNumber + call ethapi.TransactionArgs + config *TraceCallConfig + expectErr error + expect string + }{ + // Standard JSON trace upon the genesis, plain transfer. + { + blockNumber: rpc.BlockNumber(0), + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + To: &accounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: nil, + expectErr: nil, + expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, + }, + // Standard JSON trace upon the head, plain transfer. + { + blockNumber: rpc.BlockNumber(genBlocks), + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + To: &accounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: nil, + expectErr: nil, + expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, + }, + // Standard JSON trace upon the non-existent block, error expects + { + blockNumber: rpc.BlockNumber(genBlocks + 1), + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + To: &accounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: nil, + expectErr: fmt.Errorf("block #%d not found", genBlocks+1), + //expect: nil, + }, + // Standard JSON trace upon the latest block + { + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + To: &accounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: nil, + expectErr: nil, + expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, + }, + // Tracing on 'pending' should fail: + { + blockNumber: rpc.PendingBlockNumber, + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + To: &accounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: nil, + expectErr: errors.New("tracing on top of pending is not supported"), + }, + { + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + Input: &hexutil.Bytes{0x43}, // blocknumber + }, + config: &TraceCallConfig{ + BlockOverrides: ðapi.BlockOverrides{Number: (*hexutil.Big)(big.NewInt(0x1337))}, + }, + expectErr: nil, + expect: ` {"gas":53018,"failed":false,"returnValue":"","structLogs":[ + {"pc":0,"op":"NUMBER","gas":24946984,"gasCost":2,"depth":1,"stack":[]}, + {"pc":1,"op":"STOP","gas":24946982,"gasCost":0,"depth":1,"stack":["0x1337"]}]}`, + }, + } + for i, testspec := range testSuite { + result, err := api.TraceCall(context.Background(), testspec.call, rpc.BlockNumberOrHash{BlockNumber: &testspec.blockNumber}, testspec.config) + if testspec.expectErr != nil { + if err == nil { + t.Errorf("test %d: expect error %v, got nothing", i, testspec.expectErr) + continue + } + if !reflect.DeepEqual(err, testspec.expectErr) { + t.Errorf("test %d: error mismatch, want %v, git %v", i, testspec.expectErr, err) + } + } else { + if err != nil { + t.Errorf("test %d: expect no error, got %v", i, err) + continue + } + var have *logger.ExecutionResult + if err := json.Unmarshal(result.(json.RawMessage), &have); err != nil { + t.Errorf("test %d: failed to unmarshal result %v", i, err) + } + var want *logger.ExecutionResult + if err := json.Unmarshal([]byte(testspec.expect), &want); err != nil { + t.Errorf("test %d: failed to unmarshal result %v", i, err) + } + if !reflect.DeepEqual(have, want) { + t.Errorf("test %d: result mismatch, want %v, got %v", i, testspec.expect, string(result.(json.RawMessage))) + } + } + } +} + +func TestTraceTransaction(t *testing.T) { + t.Parallel() + + // Initialize test accounts + accounts := newAccounts(2) + genesis := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + }, + } + target := common.Hash{} + signer := types.HomesteadSigner{} + api := NewAPI(newTestBackend(t, 1, genesis, func(i int, b *core.BlockGen) { + // Transfer from account[0] to account[1] + // value: 1000 wei + // fee: 0 wei + tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + b.AddTx(tx) + target = tx.Hash() + })) + result, err := api.TraceTransaction(context.Background(), target, nil) + if err != nil { + t.Errorf("Failed to trace transaction %v", err) + } + var have *logger.ExecutionResult + if err := json.Unmarshal(result.(json.RawMessage), &have); err != nil { + t.Errorf("failed to unmarshal result %v", err) + } + if !reflect.DeepEqual(have, &logger.ExecutionResult{ + Gas: params.TxGas, + Failed: false, + ReturnValue: "", + StructLogs: []logger.StructLogRes{}, + }) { + t.Error("Transaction tracing result is different") + } +} + +func TestTraceBlock(t *testing.T) { + t.Parallel() + + // Initialize test accounts + accounts := newAccounts(3) + genesis := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + accounts[2].addr: {Balance: big.NewInt(params.Ether)}, + }, + } + genBlocks := 10 + signer := types.HomesteadSigner{} + api := NewAPI(newTestBackend(t, genBlocks, genesis, func(i int, b *core.BlockGen) { + // Transfer from account[0] to account[1] + // value: 1000 wei + // fee: 0 wei + tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + b.AddTx(tx) + })) + + var testSuite = []struct { + blockNumber rpc.BlockNumber + config *TraceConfig + want string + expectErr error + }{ + // Trace genesis block, expect error + { + blockNumber: rpc.BlockNumber(0), + expectErr: errors.New("genesis is not traceable"), + }, + // Trace head block + { + blockNumber: rpc.BlockNumber(genBlocks), + want: `[{"result":{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}}]`, + }, + // Trace non-existent block + { + blockNumber: rpc.BlockNumber(genBlocks + 1), + expectErr: fmt.Errorf("block #%d not found", genBlocks+1), + }, + // Trace latest block + { + blockNumber: rpc.LatestBlockNumber, + want: `[{"result":{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}}]`, + }, + // Trace pending block + { + blockNumber: rpc.PendingBlockNumber, + want: `[{"result":{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}}]`, + }, + } + for i, tc := range testSuite { + result, err := api.TraceBlockByNumber(context.Background(), tc.blockNumber, tc.config) + if tc.expectErr != nil { + if err == nil { + t.Errorf("test %d, want error %v", i, tc.expectErr) + continue + } + if !reflect.DeepEqual(err, tc.expectErr) { + t.Errorf("test %d: error mismatch, want %v, get %v", i, tc.expectErr, err) + } + continue + } + if err != nil { + t.Errorf("test %d, want no error, have %v", i, err) + continue + } + have, _ := json.Marshal(result) + want := tc.want + if string(have) != want { + t.Errorf("test %d, result mismatch, have\n%v\n, want\n%v\n", i, string(have), want) + } + } +} + +func TestTracingWithOverrides(t *testing.T) { + t.Parallel() + // Initialize test accounts + accounts := newAccounts(3) + genesis := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + accounts[2].addr: {Balance: big.NewInt(params.Ether)}, + }, + } + genBlocks := 10 + signer := types.HomesteadSigner{} + api := NewAPI(newTestBackend(t, genBlocks, genesis, func(i int, b *core.BlockGen) { + // Transfer from account[0] to account[1] + // value: 1000 wei + // fee: 0 wei + tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + b.AddTx(tx) + })) + randomAccounts := newAccounts(3) + type res struct { + Gas int + Failed bool + ReturnValue string + } + var testSuite = []struct { + blockNumber rpc.BlockNumber + call ethapi.TransactionArgs + config *TraceCallConfig + expectErr error + want string + }{ + // Call which can only succeed if state is state overridden + { + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &randomAccounts[0].addr, + To: &randomAccounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: &TraceCallConfig{ + StateOverrides: ðapi.StateOverride{ + randomAccounts[0].addr: ethapi.OverrideAccount{Balance: newRPCBalance(new(big.Int).Mul(big.NewInt(1), big.NewInt(params.Ether)))}, + }, + }, + want: `{"gas":21000,"failed":false,"returnValue":""}`, + }, + // Invalid call without state overriding + { + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &randomAccounts[0].addr, + To: &randomAccounts[1].addr, + Value: (*hexutil.Big)(big.NewInt(1000)), + }, + config: &TraceCallConfig{}, + expectErr: core.ErrInsufficientFunds, + }, + // Successful simple contract call + // + // // SPDX-License-Identifier: GPL-3.0 + // + // pragma solidity >=0.7.0 <0.8.0; + // + // /** + // * @title Storage + // * @dev Store & retrieve value in a variable + // */ + // contract Storage { + // uint256 public number; + // constructor() { + // number = block.number; + // } + // } + { + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &randomAccounts[0].addr, + To: &randomAccounts[2].addr, + Data: newRPCBytes(common.Hex2Bytes("8381f58a")), // call number() + }, + config: &TraceCallConfig{ + //Tracer: &tracer, + StateOverrides: ðapi.StateOverride{ + randomAccounts[2].addr: ethapi.OverrideAccount{ + Code: newRPCBytes(common.Hex2Bytes("6080604052348015600f57600080fd5b506004361060285760003560e01c80638381f58a14602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b6000548156fea2646970667358221220eab35ffa6ab2adfe380772a48b8ba78e82a1b820a18fcb6f59aa4efb20a5f60064736f6c63430007040033")), + StateDiff: newStates([]common.Hash{{}}, []common.Hash{common.BigToHash(big.NewInt(123))}), + }, + }, + }, + want: `{"gas":23347,"failed":false,"returnValue":"000000000000000000000000000000000000000000000000000000000000007b"}`, + }, + { // Override blocknumber + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + // BLOCKNUMBER PUSH1 MSTORE + Input: newRPCBytes(common.Hex2Bytes("4360005260206000f3")), + //&hexutil.Bytes{0x43}, // blocknumber + }, + config: &TraceCallConfig{ + BlockOverrides: ðapi.BlockOverrides{Number: (*hexutil.Big)(big.NewInt(0x1337))}, + }, + want: `{"gas":59537,"failed":false,"returnValue":"0000000000000000000000000000000000000000000000000000000000001337"}`, + }, + { // Override blocknumber, and query a blockhash + blockNumber: rpc.LatestBlockNumber, + call: ethapi.TransactionArgs{ + From: &accounts[0].addr, + Input: &hexutil.Bytes{ + 0x60, 0x00, 0x40, // BLOCKHASH(0) + 0x60, 0x00, 0x52, // STORE memory offset 0 + 0x61, 0x13, 0x36, 0x40, // BLOCKHASH(0x1336) + 0x60, 0x20, 0x52, // STORE memory offset 32 + 0x61, 0x13, 0x37, 0x40, // BLOCKHASH(0x1337) + 0x60, 0x40, 0x52, // STORE memory offset 64 + 0x60, 0x60, 0x60, 0x00, 0xf3, // RETURN (0-96) + + }, // blocknumber + }, + config: &TraceCallConfig{ + BlockOverrides: ðapi.BlockOverrides{Number: (*hexutil.Big)(big.NewInt(0x1337))}, + }, + want: `{"gas":72666,"failed":false,"returnValue":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}`, + }, + } + for i, tc := range testSuite { + result, err := api.TraceCall(context.Background(), tc.call, rpc.BlockNumberOrHash{BlockNumber: &tc.blockNumber}, tc.config) + if tc.expectErr != nil { + if err == nil { + t.Errorf("test %d: want error %v, have nothing", i, tc.expectErr) + continue + } + if !errors.Is(err, tc.expectErr) { + t.Errorf("test %d: error mismatch, want %v, have %v", i, tc.expectErr, err) + } + continue + } + if err != nil { + t.Errorf("test %d: want no error, have %v", i, err) + continue + } + // Turn result into res-struct + var ( + have res + want res + ) + resBytes, _ := json.Marshal(result) + json.Unmarshal(resBytes, &have) + json.Unmarshal([]byte(tc.want), &want) + if !reflect.DeepEqual(have, want) { + t.Errorf("test %d, result mismatch, have\n%v\n, want\n%v\n", i, string(resBytes), want) + } + } +} + +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 newAccounts(n int) (accounts Accounts) { + for i := 0; i < n; i++ { + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + accounts = append(accounts, Account{key: key, addr: addr}) + } + sort.Sort(accounts) + return accounts +} + +func newRPCBalance(balance *big.Int) **hexutil.Big { + rpcBalance := (*hexutil.Big)(balance) + return &rpcBalance +} + +func newRPCBytes(bytes []byte) *hexutil.Bytes { + rpcBytes := hexutil.Bytes(bytes) + return &rpcBytes +} + +func newStates(keys []common.Hash, vals []common.Hash) *map[common.Hash]common.Hash { + if len(keys) != len(vals) { + panic("invalid input") + } + m := make(map[common.Hash]common.Hash) + for i := 0; i < len(keys); i++ { + m[keys[i]] = vals[i] + } + return &m +} diff --git a/eth/tracers/internal/tracers/assets.go b/eth/tracers/internal/tracers/assets.go deleted file mode 100644 index d0a0bf7c..00000000 --- a/eth/tracers/internal/tracers/assets.go +++ /dev/null @@ -1,463 +0,0 @@ -// Code generated by go-bindata. DO NOT EDIT. -// sources: -// 4byte_tracer.js (2.933kB) -// bigram_tracer.js (1.712kB) -// call_tracer.js (8.643kB) -// evmdis_tracer.js (4.194kB) -// noop_tracer.js (1.271kB) -// opcount_tracer.js (1.372kB) -// prestate_tracer.js (4.234kB) -// trigram_tracer.js (1.788kB) -// unigram_tracer.js (1.51kB) - -package tracers - -import ( - "bytes" - "compress/gzip" - "crypto/sha256" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" -) - -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) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - clErr := gz.Close() - - if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) - } - if clErr != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -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 -} - -var __4byte_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x5b\x6f\xdb\x4a\x0e\x7e\xb6\x7f\x05\xd7\x2f\xb5\x51\x59\x8e\x2f\x89\x2f\xd9\x16\xf0\xe6\xa4\x6d\x80\x9c\x24\x88\xdd\x3d\x28\x16\xfb\x30\x9e\xa1\xac\xd9\xc8\x33\xc2\x0c\xe5\x4b\x73\xf2\xdf\x17\x1c\x49\x89\x93\xd3\x62\xbb\x4f\x96\x47\xc3\x8f\x1f\xc9\x8f\xa4\x7a\x3d\xb8\xb0\xf9\xc1\xe9\x75\x4a\x30\x38\xe9\x8f\x61\x99\x22\xac\x6d\x17\x29\x45\x87\xc5\x06\xe6\x05\xa5\xd6\xf9\x66\xaf\x07\xcb\x54\x7b\x48\x74\x86\xa0\x3d\xe4\xc2\x11\xd8\x04\xe8\xcd\xfd\x4c\xaf\x9c\x70\x87\xb8\xd9\xeb\x95\x36\x3f\x7c\xcd\x08\x89\x43\x04\x6f\x13\xda\x09\x87\x33\x38\xd8\x02\xa4\x30\xe0\x50\x69\x4f\x4e\xaf\x0a\x42\xd0\x04\xc2\xa8\x9e\x75\xb0\xb1\x4a\x27\x07\x86\xd4\x04\x85\x51\xe8\x82\x6b\x42\xb7\xf1\x35\x8f\xcf\x37\x5f\xe1\x1a\xbd\x47\x07\x9f\xd1\xa0\x13\x19\xdc\x15\xab\x4c\x4b\xb8\xd6\x12\x8d\x47\x10\x1e\x72\x3e\xf1\x29\x2a\x58\x05\x38\x36\xfc\xc4\x54\x16\x15\x15\xf8\x64\x0b\xa3\x04\x69\x6b\x22\x40\xcd\xcc\x61\x8b\xce\x6b\x6b\x60\x58\xbb\xaa\x00\x23\xb0\x8e\x41\xda\x82\x38\x00\x07\x36\x67\xbb\x0e\x08\x73\x80\x4c\xd0\x8b\xe9\x2f\x24\xe4\x25\x6e\x05\xda\x04\x37\xa9\xcd\x11\x28\x15\xc4\x51\xef\x74\x96\xc1\x0a\xa1\xf0\x98\x14\x59\xc4\x68\xab\x82\xe0\x8f\xab\xe5\x97\xdb\xaf\x4b\x98\xdf\x7c\x83\x3f\xe6\xf7\xf7\xf3\x9b\xe5\xb7\x73\xd8\x69\x4a\x6d\x41\x80\x5b\x2c\xa1\xf4\x26\xcf\x34\x2a\xd8\x09\xe7\x84\xa1\x03\xd8\x84\x11\x7e\xbf\xbc\xbf\xf8\x32\xbf\x59\xce\xff\x71\x75\x7d\xb5\xfc\x06\xd6\xc1\xa7\xab\xe5\xcd\xe5\x62\x01\x9f\x6e\xef\x61\x0e\x77\xf3\xfb\xe5\xd5\xc5\xd7\xeb\xf9\x3d\xdc\x7d\xbd\xbf\xbb\x5d\x5c\xc6\xb0\x40\x66\x85\x6c\xff\xbf\x73\x9e\x84\xea\x39\x04\x85\x24\x74\xe6\xeb\x4c\x7c\xb3\x05\xf8\xd4\x16\x99\x82\x54\x6c\x11\x1c\x4a\xd4\x5b\x54\x20\x40\xda\xfc\xf0\xcb\x45\x65\x2c\x91\x59\xb3\x0e\x31\xff\x54\x90\x70\x95\x80\xb1\x14\x81\x47\x84\xbf\xa7\x44\xf9\xac\xd7\xdb\xed\x76\xf1\xda\x14\xb1\x75\xeb\x5e\x56\xc2\xf9\xde\xc7\xb8\xc9\x98\xa3\xd5\x81\x70\xe9\x84\x44\x07\x1e\x85\x93\x29\xfa\x10\x4c\x78\xd1\xd5\x0a\x0d\xe9\x44\xa3\xf3\x11\x8b\x14\xa4\xcd\x32\x94\xe4\x99\xc1\x26\x5c\xcc\xad\xa7\x6e\xee\xac\x44\xef\xb5\x59\x73\xe0\x70\x45\xaf\x2e\xc2\x06\x29\xb5\xca\xc3\x11\xdc\xdb\x68\xbc\xfe\x8e\x75\x36\x7c\x91\x97\x65\x54\x82\x44\x04\xde\x86\xe8\xc1\x21\xcb\x0c\x15\x78\xbd\x36\x82\x0a\x87\xa1\x97\x56\x08\x1b\x41\x92\xc5\x2e\xd6\x42\x1b\x4f\x7f\x01\x64\x9c\xba\x22\x97\x7b\xb1\xc9\x33\x9c\xf1\x33\xc0\x47\x50\xb8\x2a\xd6\x31\x71\x0a\x96\x4e\x18\x2f\x24\x8b\xbb\x0d\xad\x93\xfd\xa0\x3f\xc2\xd3\xe9\x18\x87\xa7\x4a\x9c\x4c\x86\x67\xd3\x41\x72\x3a\x9c\x9c\xf5\x47\x7d\x3c\x9b\x26\xa3\x31\x4e\xc7\xc3\xd5\x40\x9e\x9e\xe1\x58\x4c\x4e\xc6\xc3\x55\x1f\xc5\xc9\x24\x51\xe3\xd3\x71\x1f\xa7\x0a\x5b\x11\x3c\x06\x60\x37\x83\xd6\x51\xa6\x5b\x4f\x9d\xd2\xfb\x63\xf9\x03\x70\xb2\x1f\x8c\x95\x1c\x4c\xc7\xd8\xed\x0f\x26\x33\xe8\x47\x2f\x6f\x86\x13\x29\x47\x93\x61\xbf\x7b\x32\x83\xc1\xd1\xf9\xe9\x60\x94\x0c\x27\x93\x69\x77\x7a\xf6\xda\x40\xa8\xe4\x74\x9a\x4c\xa7\xdd\xc1\xe4\x0d\x94\x1c\x4c\xfa\xaa\x3f\x45\x86\xea\x97\xc7\x4f\xcd\xc7\x66\x83\x07\x8e\xf2\x20\xd6\x6b\x87\x6b\x41\x58\x56\x2d\x30\x0e\x2f\x12\x1e\x16\x71\xb3\xc1\xcf\x33\x78\x7c\x8a\x9a\xc1\x46\x8a\x2c\x5b\x1e\x72\x56\x35\x15\xce\x78\x78\x97\x88\xcc\xe3\xbb\xa0\x0b\x63\x4d\x97\x2f\x78\x1e\x1f\x01\x2f\x47\x7c\xe8\x6a\xa3\x70\x1f\x2e\xf0\x51\xa2\x9d\x27\x1e\xb3\x62\x13\x10\x45\xc2\xd3\xe4\xdd\x56\x64\x05\xbe\x8b\x40\xc7\x18\xc3\x06\x37\x5c\x54\xe1\x28\x6e\x36\x6a\x97\x33\x48\x0a\x53\x56\xca\xe6\x9e\x5c\xe7\xb1\xd9\x68\xf8\x9d\x26\x99\x1e\x1d\x48\xe1\x11\x5a\x17\xf3\xeb\xeb\xd6\x0c\x5e\xfe\x5c\xdc\xfe\x76\xd9\x9a\x35\x1b\x0d\x76\xb9\x16\x2c\x6d\xa5\x5c\x04\x5b\x91\x45\xa5\xbb\xea\xc7\x7f\x0f\x0f\xb6\xa0\xfa\xd7\x7f\x67\xb3\x32\x5e\x18\x9e\x43\xaf\x07\x9e\x84\x7c\x80\x9c\x1c\x90\x2d\xcd\x9a\xcf\xae\x7f\xbb\xbc\xbe\xfc\x3c\x5f\x5e\xbe\xa2\xb0\x58\xce\x97\x57\x17\xe5\xd1\x5f\x49\xfc\x1f\xfe\x07\x3f\xf3\xdf\x68\x3c\x35\x9f\x6f\x85\x9a\x9c\x37\x1b\x75\xd5\x3c\xf1\x9c\xf2\x3c\x8d\xc2\x18\xd1\x3c\x3c\xb9\x2c\x55\x6b\x86\x3e\xe7\x8e\xe1\x0e\x8a\x9b\x8d\x70\xff\x28\xdf\x5a\x45\xa1\xb9\x42\x86\xb7\xc2\xc1\x03\x1e\xe0\x03\xb4\x5a\xf0\x1e\xc8\x7e\xc1\x7d\x5b\xab\x0e\xbc\x87\x56\x97\x4f\xf8\xe6\x79\xb3\xd1\xa0\x54\xfb\x58\x2b\xff\xaf\x07\x3c\xfc\x1b\x3e\xc0\xeb\xff\xef\xa1\x0f\x7f\xfe\x09\xfd\x57\x34\x31\xe7\x85\xa1\xcd\xd6\x3e\xa0\x0a\x92\xe1\x01\x70\x00\x9b\x4b\xab\xaa\x8d\xc1\x11\xfc\xf3\x77\xc0\x3d\xca\x82\xd0\x07\xba\x98\x1f\xb1\xcd\xec\x3a\x02\xb5\xea\x00\xb3\xed\xf5\x60\xf1\xa0\xf3\xb0\xb8\x4a\x14\x5f\xc2\xf0\x46\x34\x96\x40\x1b\x42\x67\x44\x16\xa4\xed\xab\xf8\x24\xd5\x7c\x6b\xf5\x31\x6a\x6c\xf3\x98\xec\x82\x9c\x36\xeb\x76\xa7\xc3\x31\xea\x04\xda\x7f\x93\x54\xfa\xaa\xd2\x7f\x5e\x15\xe3\xd8\x75\xee\xb0\x2b\xed\x26\x0f\x5f\x19\x66\x6b\x65\xd8\xc3\x3e\x02\x4a\x2d\xef\x6f\x87\xf0\x9f\xc2\x13\x24\xc2\xc8\x67\xa2\x15\xbe\xf6\x77\x0e\x2b\x63\xd5\x26\x3b\x57\xca\xa1\xf7\x81\x51\x50\x42\xcc\x6d\xd6\xee\x77\x5e\xc8\xf5\xcf\x3a\x9d\xce\xcf\x48\x7d\x16\x61\xf7\xbf\x0a\xbc\x5e\x62\x55\xfc\xda\x2c\xbe\xc3\x07\x78\xe3\x41\x12\x57\xad\x13\x87\x5e\xbd\x4d\xda\xcf\x19\x08\xd7\x3f\x7e\x80\x51\xe5\xb2\x84\xb8\x4d\x92\x1f\x61\xbc\xb1\x2f\x65\x12\x14\x17\x22\x62\xd1\xbb\x43\xec\x79\x6d\xb5\x03\x48\x54\x61\xbd\x87\x51\x27\x0a\xd4\xba\xa3\x4e\x15\x4f\x2d\x9d\x44\x14\x19\x1d\x6b\x67\x97\x56\xdf\x07\x42\x52\x21\xb2\x4a\x2e\xfc\xad\x63\x13\x10\xa6\x56\x54\x52\x6e\xee\x46\xb0\xff\xa1\x86\xa0\x76\xe1\xd0\xff\xc8\x07\x27\x8f\xfd\xd4\xe2\x0a\x3b\x7f\x85\xdc\x60\x84\x4e\xf0\x47\x8f\xdd\x56\x2d\x56\x0d\xcd\x00\x57\xce\x42\xce\x7f\x05\x5c\x2d\x2e\xde\x1e\x61\xa9\x36\xca\xf3\x23\x52\x92\xf6\x2f\xa2\xae\x9b\xd9\x16\x3c\x3f\xb9\x86\xdc\xc0\x20\x32\x6f\xab\xaa\x48\xda\xc7\xda\xe4\x05\xc5\x19\x9a\x35\xa5\xc7\x15\x3a\x4a\x7a\x99\xe9\xe7\xcb\x11\x9c\x44\x21\xd1\x6f\xcd\xbb\xa3\xce\xeb\x29\x53\xf7\x73\xd9\xc1\x4f\xcd\xff\x06\x00\x00\xff\xff\x8e\xc8\x27\x72\x75\x0b\x00\x00") - -func _4byte_tracerJsBytes() ([]byte, error) { - return bindataRead( - __4byte_tracerJs, - "4byte_tracer.js", - ) -} - -func _4byte_tracerJs() (*asset, error) { - bytes, err := _4byte_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "4byte_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb4, 0xc5, 0x48, 0x2d, 0xd9, 0x43, 0x95, 0x93, 0x3b, 0x93, 0x2c, 0x47, 0x8c, 0x84, 0x32, 0x3c, 0x8b, 0x2e, 0xf3, 0x72, 0xc4, 0x57, 0xe6, 0x3a, 0xb3, 0xdf, 0x1d, 0xbf, 0x45, 0x3, 0xfc, 0xa}} - return a, nil -} - -var _bigram_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x5b\x6f\xdb\x36\x14\x7e\xf7\xaf\xf8\xde\x92\x20\xae\xd4\x6e\x2f\x83\x33\x0f\xd0\xb2\xa4\x35\x90\xda\x81\xad\xac\x30\x86\x3d\x50\xd2\x91\x44\x84\x26\x05\xf2\xd0\xae\x50\xe4\xbf\x17\x94\x2c\x5f\x8a\x14\x8d\x9e\x64\xf3\xbb\x9d\x0b\x15\xc7\xb8\x35\x4d\x6b\x65\x55\x33\x7e\x7b\xff\xe1\x0f\xa4\x35\xa1\x32\xef\x88\x6b\xb2\xe4\x37\x48\x3c\xd7\xc6\xba\x51\x1c\x23\xad\xa5\x43\x29\x15\x41\x3a\x34\xc2\x32\x4c\x09\xfe\x01\xaf\x64\x66\x85\x6d\xa3\x51\x1c\xf7\x9c\x57\x8f\x83\x42\x69\x89\xe0\x4c\xc9\x3b\x61\x69\x82\xd6\x78\xe4\x42\xc3\x52\x21\x1d\x5b\x99\x79\x26\x48\x86\xd0\x45\x6c\x2c\x36\xa6\x90\x65\x1b\x24\x25\xc3\xeb\x82\x6c\x67\xcd\x64\x37\x6e\xc8\xf1\x71\xfe\x84\x07\x72\x8e\x2c\x3e\x92\x26\x2b\x14\x1e\x7d\xa6\x64\x8e\x07\x99\x93\x76\x04\xe1\xd0\x84\x7f\x5c\x4d\x05\xb2\x4e\x2e\x10\xef\x43\x94\xd5\x3e\x0a\xee\x8d\xd7\x85\x60\x69\xf4\x18\x24\x43\x72\x6c\xc9\x3a\x69\x34\x7e\x1f\xac\xf6\x82\x63\x18\x1b\x44\x2e\x05\x87\x02\x2c\x4c\x13\x78\x57\x10\xba\x85\x12\x7c\xa4\xbe\xa1\x21\xc7\xba\x0b\x48\xdd\xd9\xd4\xa6\x21\x70\x2d\x38\x54\xbd\x93\x4a\x21\x23\x78\x47\xa5\x57\xe3\xa0\x96\x79\xc6\x97\x59\xfa\x69\xf1\x94\x22\x99\xaf\xf1\x25\x59\x2e\x93\x79\xba\xbe\xc1\x4e\x72\x6d\x3c\x83\xb6\xd4\x4b\xc9\x4d\xa3\x24\x15\xd8\x09\x6b\x85\xe6\x16\xa6\x0c\x0a\x9f\xef\x96\xb7\x9f\x92\x79\x9a\xfc\x3d\x7b\x98\xa5\x6b\x18\x8b\xfb\x59\x3a\xbf\x5b\xad\x70\xbf\x58\x22\xc1\x63\xb2\x4c\x67\xb7\x4f\x0f\xc9\x12\x8f\x4f\xcb\xc7\xc5\xea\x2e\xc2\x8a\x42\x2a\x0a\xfc\x5f\xf7\xbc\xec\xa6\x67\x09\x05\xb1\x90\xca\x0d\x9d\x58\x1b\x0f\x57\x1b\xaf\x0a\xd4\x62\x4b\xb0\x94\x93\xdc\x52\x01\x81\xdc\x34\xed\x9b\x87\x1a\xb4\x84\x32\xba\xea\x6a\xfe\xe9\x42\x62\x56\x42\x1b\x1e\xc3\x11\xe1\xcf\x9a\xb9\x99\xc4\xf1\x6e\xb7\x8b\x2a\xed\x23\x63\xab\x58\xf5\x72\x2e\xfe\x2b\x1a\x8d\xbe\x8d\x00\x20\x8e\x51\x4b\xc7\x61\x38\x41\x36\x37\x5e\x33\xd9\x6e\xdf\x4c\x93\x9b\x82\x90\xc9\xca\x8a\x8d\xeb\xd0\x01\x3a\xc1\xb7\x97\xf1\xc0\x55\xc2\xf1\xa2\x09\xec\xf0\x06\xd3\x90\xed\xd6\xaa\x3b\xef\x0f\x27\xb8\xb8\x38\xe0\xe9\x2b\xe5\x3e\x00\x50\x50\xc3\x75\xb0\xd9\x13\x0f\x8c\x7f\xc2\xc1\x04\xef\x0f\x1c\xc7\xd4\x39\x48\xbd\x35\xcf\x54\x74\xdd\xa6\x2d\xd9\x76\x48\xd8\x6d\x4f\x48\xff\xef\xe7\xbd\x01\xb9\xa8\x63\x07\xea\x04\xa5\xd7\x79\xf0\xbc\x54\xa6\x1a\xa3\xc8\xae\xd0\xd7\x1e\x9e\xad\x08\x1b\x8d\x29\x94\xa9\x22\xd3\x44\x6c\x56\x6c\xa5\xae\x2e\xaf\x6e\xce\x30\x7d\xdc\x1e\x56\x51\x1f\xf2\x14\x23\x4b\x5c\xee\x31\x53\x70\x2d\x5d\x74\xa8\xe5\xea\xe8\x36\xa8\x3d\x53\x8b\x13\xd8\xa2\xb9\xbe\x78\x77\x71\x6d\x9a\x9b\x33\x64\xd0\xec\x30\xa1\xed\xff\x3d\x53\xfb\xff\x0f\x52\xe1\x39\x07\x5c\x5f\x9f\x4b\xbc\x9c\xfd\x22\xe5\x08\xbf\x92\xc0\x14\x1f\x7e\x26\x72\x7c\x3b\xc9\x8e\x29\x4e\x93\x9f\x17\x8f\x69\xdf\xba\xfe\xfc\xb8\x38\xa5\xf0\x8a\x4f\xa7\xba\xab\xf7\xb7\x58\xe4\xec\x85\x3a\xd9\x14\x53\x42\xe8\x61\xd6\x65\x7f\xbf\x82\x4a\x27\xf1\xea\x74\x8f\x36\x96\xdc\x6b\x3e\x42\xa9\xce\xab\x17\x75\xfd\xed\xcc\x88\x34\x24\x87\x0d\xa6\x02\x66\x4b\x36\x7c\x99\x61\x89\xbd\xd5\x6e\x50\x0c\xb4\x52\x6a\xa1\x06\xed\xfd\x25\x66\x2b\x72\xa9\xab\x3e\x5a\x7f\x74\x92\x2d\xe7\xaf\xa7\x5b\xd7\x6b\x1e\x1b\x7f\xe8\xce\xcb\xe8\x7b\x00\x00\x00\xff\xff\x83\xb5\xcb\x27\xb0\x06\x00\x00") - -func bigram_tracerJsBytes() ([]byte, error) { - return bindataRead( - _bigram_tracerJs, - "bigram_tracer.js", - ) -} - -func bigram_tracerJs() (*asset, error) { - bytes, err := bigram_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bigram_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x6c, 0xd, 0x24, 0xf2, 0x49, 0xbd, 0x58, 0x8b, 0xb5, 0xd1, 0xc9, 0xcd, 0xcf, 0x5b, 0x3e, 0x5c, 0xfb, 0x14, 0x50, 0xe7, 0xe3, 0xb9, 0xd1, 0x54, 0x69, 0xe6, 0x5e, 0x45, 0xa6, 0x2c, 0x6c}} - return a, nil -} - -var _call_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x5f\x6f\x1b\xb7\xb2\x7f\x96\x3e\xc5\x24\x0f\xb5\x84\x28\x92\x93\xf4\xf6\x02\x76\xd5\x0b\x5d\x47\x49\x0d\xb8\x71\x60\x2b\x0d\x82\x20\x0f\xd4\xee\xac\xc4\x9a\x4b\x6e\x49\xae\xe4\x3d\xa9\xbf\xfb\xc1\x0c\xb9\xab\xd5\x1f\x3b\x6e\x0f\xce\x41\xcf\x8b\xa0\x5d\xce\x0c\x87\x33\xbf\xf9\xc7\x1d\x8d\xe0\xcc\x14\x95\x95\x8b\xa5\x87\x97\xc7\x2f\xfe\x17\x66\x4b\x84\x85\x79\x8e\x7e\x89\x16\xcb\x1c\x26\xa5\x5f\x1a\xeb\xba\xa3\x11\xcc\x96\xd2\x41\x26\x15\x82\x74\x50\x08\xeb\xc1\x64\xe0\x77\xe8\x95\x9c\x5b\x61\xab\x61\x77\x34\x0a\x3c\x07\x97\x49\x42\x66\x11\xc1\x99\xcc\xaf\x85\xc5\x13\xa8\x4c\x09\x89\xd0\x60\x31\x95\xce\x5b\x39\x2f\x3d\x82\xf4\x20\x74\x3a\x32\x16\x72\x93\xca\xac\x22\x91\xd2\x43\xa9\x53\xb4\xbc\xb5\x47\x9b\xbb\x5a\x8f\xb7\xef\x3e\xc0\x05\x3a\x87\x16\xde\xa2\x46\x2b\x14\xbc\x2f\xe7\x4a\x26\x70\x21\x13\xd4\x0e\x41\x38\x28\xe8\x8d\x5b\x62\x0a\x73\x16\x47\x8c\x6f\x48\x95\xeb\xa8\x0a\xbc\x31\xa5\x4e\x85\x97\x46\x0f\x00\x25\x69\x0e\x2b\xb4\x4e\x1a\x0d\xaf\xea\xad\xa2\xc0\x01\x18\x4b\x42\x7a\xc2\xd3\x01\x2c\x98\x82\xf8\xfa\x20\x74\x05\x4a\xf8\x0d\xeb\x23\x0c\xb2\x39\x77\x0a\x52\xf3\x36\x4b\x53\x20\xf8\xa5\xf0\x74\xea\xb5\x54\x0a\xe6\x08\xa5\xc3\xac\x54\x03\x92\x36\x2f\x3d\x7c\x3c\x9f\xfd\x7c\xf9\x61\x06\x93\x77\x9f\xe0\xe3\xe4\xea\x6a\xf2\x6e\xf6\xe9\x14\xd6\xd2\x2f\x4d\xe9\x01\x57\x18\x44\xc9\xbc\x50\x12\x53\x58\x0b\x6b\x85\xf6\x15\x98\x8c\x24\xfc\x32\xbd\x3a\xfb\x79\xf2\x6e\x36\xf9\xff\xf3\x8b\xf3\xd9\x27\x30\x16\xde\x9c\xcf\xde\x4d\xaf\xaf\xe1\xcd\xe5\x15\x4c\xe0\xfd\xe4\x6a\x76\x7e\xf6\xe1\x62\x72\x05\xef\x3f\x5c\xbd\xbf\xbc\x9e\x0e\xe1\x1a\x49\x2b\x24\xfe\x6f\xdb\x3c\x63\xef\x59\x84\x14\xbd\x90\xca\xd5\x96\xf8\x64\x4a\x70\x4b\x53\xaa\x14\x96\x62\x85\x60\x31\x41\xb9\xc2\x14\x04\x24\xa6\xa8\x1e\xed\x54\x92\x25\x94\xd1\x0b\x3e\xf3\xbd\x80\x84\xf3\x0c\xb4\xf1\x03\x70\x88\xf0\xe3\xd2\xfb\xe2\x64\x34\x5a\xaf\xd7\xc3\x85\x2e\x87\xc6\x2e\x46\x2a\x88\x73\xa3\x9f\x86\x5d\x92\x99\x08\xa5\x66\x56\x24\x68\xc9\x39\x02\xb2\x92\xcc\xaf\xcc\x5a\x83\xb7\x42\x3b\x91\x90\xab\xe9\x7f\xc2\x60\x14\x1e\xf0\x96\x9e\xbc\x23\xd0\x82\xc5\xc2\x58\xfa\xaf\x54\x8d\x33\xa9\x3d\x5a\x2d\x14\xcb\x76\x90\x8b\x14\x61\x5e\x81\x68\x0b\x1c\xb4\x0f\x43\x30\x0a\xee\x06\xa9\x33\x63\x73\x86\xe5\xb0\xfb\xb5\xdb\x89\x1a\x3a\x2f\x92\x1b\x52\x90\xe4\x27\xa5\xb5\xa8\x3d\x99\xb2\xb4\x4e\xae\x90\x49\x20\xd0\x44\x7b\x4e\x7f\xfd\x05\xf0\x16\x93\x32\x48\xea\x34\x42\x4e\xe0\xf3\xd7\xbb\x2f\x83\x2e\x8b\x4e\xd1\x25\xa8\x53\x4c\xf9\x7c\x37\x0e\xd6\x4b\xb6\x28\xac\xf1\x68\x85\xf0\x5b\xe9\x7c\x8b\x26\xb3\x26\x07\xa1\xc1\x94\x84\xf8\xb6\x75\xa4\xf6\x86\x05\x0a\xfa\xaf\xd1\xb2\x46\xc3\x6e\xa7\x61\x3e\x81\x4c\x28\x87\x71\x5f\xe7\xb1\xa0\xd3\x48\xbd\x32\x37\x24\xd9\x58\x82\xb0\xad\xc0\x14\x89\x49\x63\x30\xd0\x39\x9a\x63\xa0\x1b\x76\x3b\xc4\x77\x02\x59\xa9\x79\xdb\x9e\x32\x8b\x01\xa4\xf3\x3e\x7c\xed\x76\x48\xec\x99\x28\x7c\x69\x91\xed\x89\xd6\x1a\xeb\x40\xe6\x39\xa6\x52\x78\x54\x55\xb7\xd3\x59\x09\x1b\x16\x60\x0c\xca\x2c\x86\x0b\xf4\x53\x7a\xec\xf5\x4f\xbb\x9d\x8e\xcc\xa0\x17\x56\x9f\x8c\xc7\x9c\x7d\x32\xa9\x31\x0d\xe2\x3b\x7e\x29\xdd\x30\x13\xa5\xf2\xcd\xbe\xc4\xd4\xb1\xe8\x4b\xab\xe9\xef\x5d\xd0\xe2\x23\x82\xd1\xaa\x82\x84\xb2\x8c\x98\x53\x78\xba\xca\x79\xcc\xe3\xe1\xdc\x00\x32\xe1\xc8\x84\x32\x83\x35\x42\x61\xf1\x79\xb2\x44\xf2\x9d\x4e\x30\x6a\xe9\x2a\xc7\x4e\x1d\x03\xed\x36\x34\xc5\xd0\x9b\x77\x65\x3e\x47\xdb\xeb\xc3\x77\x70\x7c\x9b\x1d\xf7\x61\x3c\xe6\x3f\xb5\xee\x91\x27\xea\x4b\x52\x4c\x11\x0f\xca\xfc\xd7\xde\x4a\xbd\x08\x67\x8d\xba\x9e\x67\x20\x40\xe3\x1a\x12\xa3\x19\xd4\xe4\x95\x39\x4a\xbd\x80\xc4\xa2\xf0\x98\x0e\x40\xa4\x29\x78\x13\x90\xd7\xe0\x6c\x7b\x4b\xf8\xee\x3b\xe8\xd1\x66\x63\x38\x3a\xbb\x9a\x4e\x66\xd3\x23\xf8\xe3\x0f\x08\x6f\x9e\x86\x37\x2f\x9f\xf6\x5b\x9a\x49\x7d\x99\x65\x51\x39\x16\x38\x2c\x10\x6f\x7a\x2f\xfa\xc3\x95\x50\x25\x5e\x66\x41\xcd\x48\x3b\xd5\x29\x8c\x23\xcf\xb3\x5d\x9e\x97\x5b\x3c\xc4\x34\x1a\xc1\xc4\x39\xcc\xe7\x0a\xf7\x03\x32\x46\x2c\x07\xaf\xf3\x94\xb1\x08\x7d\x89\xc9\x0b\x85\x84\xaa\x7a\xd7\x68\x7e\xd6\xb8\xe3\xab\x02\x4f\x00\x00\x4c\x31\xe0\x17\x14\x0b\xfc\xc2\x9b\x9f\xf1\x96\x7d\x54\x9b\x90\x50\x35\x49\x53\x8b\xce\xf5\xfa\xfd\x40\x2e\x75\x51\xfa\x93\x2d\xf2\x1c\x73\x63\xab\xa1\xa3\x84\xd4\xe3\xa3\x0d\xc2\x49\x6b\x9e\x85\x70\xe7\x9a\x78\x22\x52\xdf\x0a\xd7\xdb\x2c\x9d\x19\xe7\x4f\xea\x25\x7a\xa8\xd7\xd8\x16\xc4\x76\x74\x7c\x7b\xb4\x6f\xad\xe3\xfe\x06\x09\x2f\x7e\xe8\x13\xcb\xdd\x69\x83\xef\x26\x4d\x0c\x8b\xd2\x2d\x7b\x0c\xa7\xcd\xea\x26\x15\x8c\xc1\xdb\x12\x0f\xc2\x9f\x21\xb5\x0f\x27\x87\x2a\xa3\x5c\xe2\x6d\x99\x30\xac\x16\x82\x33\x0d\x47\xba\xa0\xcc\xeb\xca\x39\xdb\xdc\x1b\xb3\x8f\xae\x08\xae\xeb\xe9\xc5\x9b\xd7\xd3\xeb\xd9\xd5\x87\xb3\xd9\x51\x0b\x4e\x0a\x33\x4f\x4a\x6d\x9f\x41\xa1\x5e\xf8\x25\xeb\x4f\xe2\xb6\x57\x3f\x13\xcf\xf3\x17\x5f\xc2\x1b\x18\x1f\x08\xf9\xce\xc3\x1c\xf0\xf9\x0b\xcb\xbe\xdb\x37\xdf\x36\x69\x30\xe6\xd7\x00\x22\x53\xdc\xb5\x13\xc7\x81\x58\xcc\xd1\x2f\x4d\xca\xc9\x31\x11\x21\xbf\xd6\x56\x4c\x8d\xc6\x3f\x1f\x91\x93\x8b\x8b\x56\x3c\xf2\xf3\xd9\xe5\xeb\x76\x8c\x1e\xbd\x9e\x5e\x4c\xdf\x4e\x66\xd3\x5d\xda\xeb\xd9\x64\x76\x7e\xc6\x6f\xeb\xf0\x1d\x8d\xe0\xfa\x46\x16\x9c\x65\x39\x77\x99\xbc\xe0\x76\xb1\xd1\xd7\x0d\xc0\x2f\x0d\x35\x62\x36\x16\x91\x4c\xe8\xa4\x4e\xee\xae\x76\x9a\x37\xe4\x32\x53\xc7\xca\x7e\x2a\x68\x03\xb5\xdf\xb8\x51\xba\xf7\x16\xe3\xa6\x69\xcf\x9b\x5a\xaf\x8d\x41\x83\x47\x38\x01\x72\x92\xe9\x3d\xfe\x90\xf0\x7f\x70\x0c\x27\xf0\x22\x66\x92\x07\x52\xd5\x4b\x78\x46\xe2\xff\x42\xc2\x7a\x75\x80\xf3\xef\x99\xb6\xbc\x61\xe2\x9a\xdc\x9b\xff\x7c\x3a\x33\xa5\xbf\xcc\xb2\x13\xd8\x35\xe2\xf7\x7b\x46\x6c\xe8\x2f\x50\xef\xd3\xff\xcf\x1e\xfd\x26\xf5\x11\xaa\x4c\x01\x4f\xf6\x20\x12\x12\xcf\x93\x9d\x38\x88\xc6\xe5\x16\x87\xa5\xc1\xf8\x9e\x64\xfb\x72\x1b\xc3\xf7\x65\x8b\x7f\x29\xd9\x1e\x6c\xd5\xa8\x21\xdb\x6e\xc6\x06\x60\xd1\x5b\x89\x2b\x1a\xb7\x8e\x1c\x8b\xa4\xa6\xd5\xac\x85\x4e\x70\x08\x1f\x31\x48\xd4\x88\x9c\x5c\x62\x93\x4b\x3d\x0a\xf7\x7d\xd4\xa8\xc6\x71\x85\x21\x26\xb8\x17\xb5\x08\xb9\xa8\x68\x5c\xc9\x4a\x7d\x53\xc1\x42\x38\x48\x2b\x2d\x72\x99\xb8\x20\x8f\x1b\x5c\x8b\x0b\x61\x59\xac\xc5\xdf\x4b\x74\x34\xfb\x10\x90\x45\xe2\x4b\xa1\x54\x05\x0b\x49\x03\x0c\x71\xf7\x5e\xbe\x3a\x3e\x06\xe7\x65\x81\x3a\x1d\xc0\x0f\xaf\x46\x3f\x7c\x0f\xb6\x54\xd8\x1f\x76\x5b\x69\xbc\x39\x6a\xf4\x06\x2d\x44\xf4\xbc\xc6\xc2\x2f\x7b\x7d\xf8\xe9\x9e\x7a\x70\x4f\x72\x3f\x48\x0b\xcf\xe1\xc5\x97\x21\xe9\x35\xde\xc2\x6d\xf0\x24\xa0\x72\x18\xa5\xd1\xd0\x77\xf9\xfa\xb2\x77\x23\xac\x50\x62\x8e\xfd\x13\x1e\x02\xd9\x56\x6b\x11\xa7\x00\x72\x0a\x14\x4a\x48\x0d\x22\x49\x4c\xa9\x3d\x19\xbe\x6e\xe8\x55\x45\xf9\xfd\xc8\xd7\xf2\x78\x5e\x12\x49\x82\xce\xd5\xe9\x9e\xbd\x46\xea\x88\x9c\xb8\x41\x6a\x27\x53\x6c\x79\x85\xb2\x83\xe1\xd4\x1c\x29\x68\x9c\xac\x05\xe6\xc6\xd1\x26\x73\x84\xb5\xa5\xe1\xc3\x49\x9d\xf0\xf4\x9d\x22\x59\xdb\x81\xd1\x20\x40\x19\x1e\xf9\x39\xc6\x41\xd8\x85\x1b\x86\x7c\x4f\xdb\x52\xce\xd1\x66\x3d\xdc\x06\x72\x1b\xaa\xdc\xe6\xef\xb4\x03\x1a\xf0\x56\x3a\xcf\x5d\x25\x69\x29\x1d\x04\x24\x4b\xbd\x18\x40\x61\x0a\xce\xd3\xdf\x2a\x67\x31\x59\x5f\x4d\x7f\x9d\x5e\x35\xc5\xff\xf1\x4e\xac\xfb\xfe\xa7\xcd\x58\x04\x96\x66\x0e\x8f\xe9\xd3\x03\x8d\xfc\x01\x40\x8d\xef\x01\x14\xc9\xdf\xd4\xc6\xf7\xad\xe3\x28\xe1\xfc\xc6\x31\x0b\x0c\x33\x4d\x5b\x01\x57\x2a\xef\x76\x72\xf7\x6e\x72\x30\x45\x5d\x21\x48\x29\x4e\x3b\x94\xd8\x77\xbb\xed\xad\x85\x4d\xd3\xbd\xc1\xe7\x79\xcb\xc6\x6b\x6e\xb9\x02\x51\x2b\x35\xf0\x7a\xdd\xbb\x89\x50\x0d\x58\x77\x53\x7a\x82\x03\xd5\xef\x4d\xf2\x5b\x08\xf7\xc1\xb1\xd7\x63\xfa\x9b\xcb\xc5\xb9\xf6\xbd\x7a\xf1\x5c\xc3\x73\xa8\x1f\x28\xa9\xc3\xf3\xad\x28\x3a\x90\x1d\x3b\x29\x2a\xf4\x08\x1b\x11\xa7\xb0\xf3\x8a\x04\x05\x73\xb0\xd1\x2c\xfa\xfd\xe2\x7c\x1c\xa5\x91\xc1\x9e\x58\xf4\x43\xfc\xbd\x14\xca\xf5\x8e\x9b\x66\x21\x9c\xc0\x1b\x2e\x6f\xe3\xa6\xc0\xd5\x15\x90\x78\xb6\xda\x8f\x28\x30\xb0\x45\x6b\xd4\x6c\xe9\x3c\x54\xad\x14\x1f\x94\x10\x45\xc4\xb4\xd1\xf8\x32\x02\xf3\x50\xff\xd9\x69\x13\xc0\xd3\xa6\x21\xc8\x84\x54\xa5\xc5\xa7\xa7\x70\x20\xed\xb8\xd2\x66\x22\x61\x5f\x3a\x04\x9e\x58\x1d\x38\x93\xe3\xd2\xac\x83\x02\x87\x92\xd7\x3e\x38\x1a\x1c\xec\x94\x0f\xbe\x7a\x11\x0e\x4a\x27\x16\xd8\x02\x47\x63\xf0\xda\x51\x07\xc7\xe8\xbf\x0c\x9d\x67\xcd\xe3\x37\x50\x14\x76\xf9\x26\x34\x1e\xc2\xc6\x41\x2f\xef\x75\x39\x35\x11\xf7\x3a\xad\x87\x5a\xd5\xd0\x8a\x34\xc8\xf9\x33\x7e\xff\xf7\x38\x3e\x78\x3e\xfe\x3e\x36\xd0\x76\x69\xc3\x19\xb7\x89\xc3\x49\x37\xed\xcd\xb7\x51\xd0\xac\xde\x07\x80\xfb\x3a\x27\x82\xaa\xfe\x0d\x13\xbf\x81\x2b\x37\x3b\xf4\x54\x58\x5c\x49\x53\x52\x1d\xc3\xff\xa6\xc9\xb0\xe9\xfc\xee\xba\x9d\xbb\x78\x45\xc6\xee\x6b\xdf\x91\xad\x97\xf1\x8a\x37\x34\x4d\xad\x2a\x62\xb8\xc4\xc6\x9b\xb3\x2c\x5c\xbe\x76\x98\xff\x81\xbb\xb2\x18\xef\xde\x14\xd4\x15\xc4\x22\xa5\x2c\x8a\xb4\x6a\xea\xe2\x20\xf4\x23\xb0\x14\x3a\x8d\x33\x89\x48\x53\x49\xf2\x18\x8b\xa4\xa1\x58\x08\xa9\xbb\x07\xcd\xf8\xcd\x62\x7c\x08\x19\x7b\x2d\x6e\xbb\x9e\xc6\x59\x92\x06\x3f\xd6\xb8\xfb\x88\xba\xb9\x13\x4b\xbb\xd7\x7e\xf1\xe6\xd0\x68\x57\xe6\xdc\x10\x83\x58\x09\xa9\x04\x0d\x61\xdc\x68\xe9\x14\x12\x85\x42\x87\xcb\x7e\xcc\xbc\x59\xa1\x75\xdd\x47\x80\xfc\xaf\x60\x7c\x27\x39\xd6\x8f\xd1\x1c\x8f\x8f\xd9\xc7\x46\x6c\x38\xfe\x1b\x25\xbc\x8f\xf0\x6a\x99\x37\x44\x96\xf4\xfc\x1d\x08\xb5\xef\x3e\x2e\xa4\xb8\x75\x22\x9a\x9f\xe0\xb8\xd5\x9e\xff\x5d\x82\x6c\x1f\x62\x17\x4d\x9b\x16\x0f\xef\x8d\x19\x80\x42\xc1\xc3\x52\xfd\x95\xa6\x6e\x4b\x1f\x9a\xdd\xea\xe8\x0d\x8d\xdd\x5e\xf8\xf2\xf5\xd6\x12\xeb\x8b\x90\xd0\xe1\xcf\x11\x35\x48\x8f\x56\xd0\x58\x44\xe8\x8a\x1f\x16\x48\x4b\xc7\xe2\xd8\x2f\x92\x82\x2e\x0a\x8e\xb7\xfc\x54\x9f\xa5\x5e\x0c\xbb\x9d\xf0\xbe\x15\xef\x89\xbf\xdd\xc4\x7b\x28\x86\xcc\x19\xaf\x06\x9a\x9b\x81\xc4\xdf\x72\xd3\xc8\xd3\xf3\xce\xf5\x00\xad\xd1\xab\x30\x5a\xef\x5c\x06\x30\x63\xbc\x10\xd8\xbd\x73\xa4\x35\x7e\xb7\x05\x70\x26\x5d\x08\x17\xc4\xec\x84\x84\xbf\xdd\x8f\x88\x9a\x81\x82\xe1\xe4\x30\x03\x2d\x1d\x60\xda\xb9\xa0\x20\x62\x7e\x15\x56\x43\x61\x3f\x69\xaf\x86\x57\xf1\xa0\x32\x6f\xd9\x46\xe6\x6c\x9b\xbb\xd3\xc3\x49\xee\xb8\xc6\xe3\xe1\x64\x46\x36\x6f\x00\x7b\x0f\x6b\x7b\xe4\xd8\x27\x79\x28\x55\xb2\xf4\x3a\xb3\xdd\xc3\xca\xd2\x5b\xad\x87\xbf\x7d\xbc\xc8\x86\xb8\xad\xe2\x16\xcd\x21\x21\x31\xcf\x44\xba\x60\xd9\x5a\x40\x40\x75\xd0\x95\x11\x2d\xff\x81\x51\x62\x3b\x7e\xea\x25\xb0\x18\xbe\x43\x70\x43\x4a\xe1\x63\xe6\x5c\xfc\x4b\x47\xd3\xe4\x26\x2e\x52\x74\xd2\x62\x0a\x99\x44\x95\x82\x49\xd1\xf2\xac\xfa\x9b\x33\x3a\x7c\x71\x42\x2b\x49\x62\xf8\xb2\x16\x3e\x72\xf3\xf7\x3e\x2d\x13\xf4\x15\x64\x28\xf8\xd3\x91\x37\x50\x08\xe7\x20\x47\x41\xd3\x69\x56\x2a\x55\x81\xb1\x29\x92\xf0\x66\x5c\xa3\x90\x34\x50\x3a\xb4\x0e\xd6\x4b\x13\xcb\x24\x77\x69\x05\x35\x9d\xd2\x0f\xe2\x8d\x8c\x74\x85\x12\x15\x48\x4f\x25\x39\x1e\xaa\x1d\xa5\xcd\xf7\x1a\xfe\xe8\x63\xa8\xea\xee\x87\x68\x3d\xd8\x6d\xc7\x28\xbf\xa6\xa7\xed\xe8\x8c\x73\xcd\x76\x5c\x6e\xee\xaa\xb6\x83\xb0\x2e\x1b\xdb\x91\xd6\x2e\x42\xdb\xe1\xc4\x2b\xfc\xb4\x1d\x48\xad\x7e\x99\x17\x18\x1c\x0d\x03\x3f\xed\x84\x16\x6b\x19\x63\x2b\x7c\x9d\x6c\xc8\xf9\x69\x10\x01\x43\x5e\xec\x91\x71\x6e\xb0\xa2\x4c\x1c\x6c\xd4\x2a\x2b\xe1\xc5\xe7\x1b\xac\xbe\x1c\xae\x22\x11\x8e\x2d\xba\xa6\x6c\xd4\x90\x0e\x6b\x0f\x04\x72\xa3\x85\x1c\x1f\x9f\x82\xfc\xb1\xcd\x50\x57\x3e\x90\xcf\x9e\xd5\x7b\xb6\xd7\x3f\xcb\x2f\x75\x74\x36\x88\xdf\x59\xef\x6f\x69\x14\x63\x24\xd0\x50\x50\x74\xef\xba\xff\x0c\x00\x00\xff\xff\x00\x24\x55\x1f\xc3\x21\x00\x00") - -func call_tracerJsBytes() ([]byte, error) { - return bindataRead( - _call_tracerJs, - "call_tracer.js", - ) -} - -func call_tracerJs() (*asset, error) { - bytes, err := call_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "call_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xef, 0x68, 0xda, 0xd8, 0x9, 0xf5, 0xd5, 0x71, 0xa8, 0x8a, 0xfb, 0x30, 0xe8, 0xf0, 0x72, 0x14, 0x36, 0x6b, 0x62, 0x5a, 0x4e, 0xff, 0x16, 0xdc, 0xd3, 0x2c, 0x68, 0x7b, 0x79, 0x9f, 0xd3}} - return a, nil -} - -var _evmdis_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x6f\xda\xca\x12\x7e\x86\xbf\x62\x94\x27\x50\x29\x60\x63\x08\x38\x27\x47\xe2\xa6\xf4\x1c\xae\xd2\x24\x02\x72\x8f\x2a\x94\x87\x05\xc6\xb0\xaa\xf1\x5a\xbb\x6b\x72\xb8\x55\xfe\xf7\xab\xd9\x59\x03\xf9\x75\xdb\x4a\xa7\x0f\x3b\xb5\x77\xbe\x6f\xbe\x9d\x19\xcf\x92\x56\x0b\xae\x54\xbe\xd7\x72\xbd\xb1\x10\xb6\x83\x73\x98\x6d\x10\xd6\xea\x23\xda\x0d\x6a\x2c\xb6\x30\x2c\xec\x46\x69\x53\x6d\xb5\x60\xb6\x91\x06\x12\x99\x22\x48\x03\xb9\xd0\x16\x54\x02\xf6\x85\x7f\x2a\x17\x5a\xe8\x7d\xb3\xda\x6a\x31\xe6\xcd\x6d\x62\x48\x34\x22\x18\x95\xd8\x47\xa1\x31\x86\xbd\x2a\x60\x29\x32\xd0\xb8\x92\xc6\x6a\xb9\x28\x2c\x82\xb4\x20\xb2\x55\x4b\x69\xd8\xaa\x95\x4c\xf6\x44\x29\x2d\x14\xd9\x0a\xb5\x0b\x6d\x51\x6f\x4d\xa9\xe3\x8f\x9b\x7b\xb8\x46\x63\x50\xc3\x1f\x98\xa1\x16\x29\xdc\x15\x8b\x54\x2e\xe1\x5a\x2e\x31\x33\x08\xc2\x40\x4e\x6f\xcc\x06\x57\xb0\x70\x74\x04\xfc\x4c\x52\xa6\x5e\x0a\x7c\x56\x45\xb6\x12\x56\xaa\xac\x01\x28\x49\x39\xec\x50\x1b\xa9\x32\xe8\x94\xa1\x3c\x61\x03\x94\x26\x92\x9a\xb0\x74\x00\x0d\x2a\x27\x5c\x1d\x44\xb6\x87\x54\xd8\x23\xf4\x27\x12\x72\x3c\xf7\x0a\x64\xe6\xc2\x6c\x54\x8e\x60\x37\xc2\xd2\xa9\x1f\x65\x9a\xc2\x02\xa1\x30\x98\x14\x69\x83\xd8\x16\x85\x85\xbf\xc6\xb3\x3f\x6f\xef\x67\x30\xbc\xf9\x0a\x7f\x0d\x27\x93\xe1\xcd\xec\xeb\x05\x3c\x4a\xbb\x51\x85\x05\xdc\x21\x53\xc9\x6d\x9e\x4a\x5c\xc1\xa3\xd0\x5a\x64\x76\x0f\x2a\x21\x86\x2f\xa3\xc9\xd5\x9f\xc3\x9b\xd9\xf0\x5f\xe3\xeb\xf1\xec\x2b\x28\x0d\x9f\xc7\xb3\x9b\xd1\x74\x0a\x9f\x6f\x27\x30\x84\xbb\xe1\x64\x36\xbe\xba\xbf\x1e\x4e\xe0\xee\x7e\x72\x77\x3b\x1d\x35\x61\x8a\xa4\x0a\x09\xff\xe3\x9c\x27\xae\x7a\x1a\x61\x85\x56\xc8\xd4\x94\x99\xf8\xaa\x0a\x30\x1b\x55\xa4\x2b\xd8\x88\x1d\x82\xc6\x25\xca\x1d\xae\x40\xc0\x52\xe5\xfb\x9f\x2e\x2a\x71\x89\x54\x65\x6b\x77\xe6\x77\x1b\x12\xc6\x09\x64\xca\x36\xc0\x20\xc2\x6f\x1b\x6b\xf3\xb8\xd5\x7a\x7c\x7c\x6c\xae\xb3\xa2\xa9\xf4\xba\x95\x32\x9d\x69\xfd\xde\xac\x12\x27\xee\xb6\x2b\x69\x66\x5a\x2c\x51\x83\x46\x5b\xe8\xcc\x80\x29\x92\x84\xfc\x2c\xc8\x2c\x51\x7a\xeb\xda\x04\x12\xad\xb6\x20\xc0\x92\x2f\x58\x05\x39\x6a\xda\xf4\x14\x1f\x8d\xdd\xa7\x4e\xe6\x4a\x1a\x61\x0c\x6e\x17\xe9\xbe\x59\xfd\x5e\xad\x18\x2b\x96\xdf\x62\x98\x7f\x57\xb9\x89\x61\xfe\xf0\xf4\xd0\xa8\x56\x2b\x59\x5e\x98\x0d\x9a\x18\xbe\xb7\x63\x68\x37\x20\x88\x21\x68\x40\xe8\xd6\x8e\x5b\x23\xb7\x76\xdd\xda\x73\xeb\xb9\x5b\xfb\x6e\x1d\xb8\x35\x68\xb3\x61\x74\xc0\x6e\x01\xfb\x05\xec\x18\xb0\x67\xc8\x9e\xa1\x8f\xc3\x81\x42\x8e\x14\x72\xa8\x90\x63\x85\xcc\xd2\x61\x97\x88\x59\x22\x66\xe9\x32\x4b\x97\x59\xba\xec\xd2\x65\x96\xae\x17\xdc\x75\xe7\xe9\x32\x4b\xf7\x9c\x9f\x98\xa5\xcb\x2c\x3d\x3e\x72\x8f\x01\x3d\x7f\x44\x06\xf4\x58\x7c\x8f\x01\x3d\x06\xf4\x19\xd0\xe7\xb0\xfd\x90\x9f\x3a\x6c\x98\xa5\xcf\x61\xfb\x3d\x36\x1c\xb6\xcf\x2c\x7d\x66\x19\xb0\xf8\x41\xe0\xf6\x06\x1c\x6f\xc0\xf1\x06\x3e\xab\x65\x5a\x7d\x5e\xdb\x3e\xb1\xed\xd0\xdb\x8e\xb7\x91\xb7\x5d\x6f\x7d\xe6\xdb\x3e\xf5\x6d\x9f\xfb\xb6\xe7\x3b\xd4\xc9\xf3\x05\x9e\x2f\xf0\x7c\x81\xe7\x0b\x3c\x5f\x59\xc9\xb2\x94\x65\x2d\x7d\x31\x03\x5f\xcd\xc0\x97\x33\xf0\xf5\x0c\x7c\x41\x03\x5f\xd1\xc0\x97\x34\xf0\x35\x0d\x42\xcf\x17\xf6\x63\x08\xc9\x0e\x62\xe8\x34\x20\xe8\xb4\x63\x88\xc8\x06\x31\x74\xc9\x86\x31\xf4\xc8\x76\x62\x38\x27\x1b\xc5\xd0\x27\xdb\x8d\x61\x40\x96\xf8\xa8\x6b\x3b\x44\x48\x8c\x1d\x52\x48\x94\x1d\x92\x48\x9c\x11\x69\x24\xd2\x88\x44\x12\x6b\x44\x2a\x89\x36\x22\x99\xc4\x1b\x45\xac\x23\xea\xb2\x8e\xa8\xc7\x3a\xa2\x73\xd6\x41\xdd\xe7\x00\x03\xd6\x41\xfd\x47\x3a\xa8\x01\x49\x87\xeb\x40\xd2\xe1\x7a\x90\x74\xb8\x2e\x24\x4a\xea\x43\xa7\xc3\x75\x22\x91\x52\x2f\x3a\x1d\xae\x1b\x89\xd6\xf5\x23\xf1\xfa\x8e\x0c\x7a\x81\xb7\xa1\xb7\x1d\x6f\x23\x67\xc3\xc8\x7f\x45\x91\xff\x8c\x22\xff\x1d\x45\x1d\xbf\xef\xfd\xdc\x47\xf0\x44\xdf\x79\xab\x05\x1a\x4d\x91\x5a\x1a\xfe\x32\xdb\xa9\x6f\x34\x9e\x37\x98\x81\x48\x53\x37\xc7\x54\xbe\x54\x2b\x34\x3c\x1f\x17\x88\x19\x48\x8b\x5a\xd0\x05\xa1\x76\xa8\xe9\x6e\x2c\x27\x93\xa3\x23\x4c\x22\x33\x91\x96\xc4\x7e\x86\xd2\x60\x92\xd9\xba\x59\xad\xf0\xfb\x18\x92\x22\x5b\xd2\xe8\xaa\xd5\xe1\xbb\xa7\x00\xbb\x91\xa6\xe9\x46\xd2\xbc\xfd\xd0\x54\xb9\xb9\x80\x52\x67\x22\xde\x92\x49\xd4\x62\x69\x0b\x91\x02\xfe\x8d\xcb\xc2\xcd\x42\x95\x80\xc8\xbc\x72\x48\x78\xe0\x57\x1c\xfe\x24\x6a\xaa\xd6\x0d\x58\x2d\x28\x78\x19\xc2\x58\xcc\x4f\x23\xd0\xb5\x81\x3b\xd4\xfb\x92\xcb\x5d\x83\x14\xf2\x3f\x5f\x7c\x38\x24\x6a\xc2\xbd\xc9\x5c\xad\x54\x76\x42\x43\xa2\xc5\x16\xe1\xf2\xf4\x74\xc7\xff\x36\x53\xcc\xd6\x76\x03\x1f\x21\x78\xb8\xa8\x7a\x04\x6a\xad\x34\x5c\x42\xaa\xd6\xcd\x35\xda\x11\x3d\xd6\xea\x17\xd5\x4a\x45\x26\x50\x73\xbb\x4c\x5f\x71\xdc\xf3\x33\xf7\xea\xec\x01\x2e\x19\x4a\x9e\x4f\x80\xa9\x41\x20\x80\xa7\xf9\x84\xb9\xdd\xd4\xea\x70\x79\x2a\xc5\xc7\xf7\x74\x2a\xa7\x4b\x05\x2e\xf9\xa9\xa2\xf2\x18\xe8\x1f\x11\xa8\xbc\x69\xd5\x4d\xb1\x5d\xa0\xae\xd5\x1b\x6e\x7b\x45\x84\x10\xc3\x73\x7e\xde\x2b\xcb\x3c\x7f\x70\xcf\x4f\x24\xc9\xa9\x77\x8a\xa9\xb6\xe5\xc9\x7f\x87\xb6\x8f\xee\xce\x9e\x6b\xdc\xa9\x1c\x2e\xe1\xe0\x38\x7f\x05\xe1\x64\x11\x22\x51\xba\x46\x28\x09\x97\xd0\xbe\x00\x09\xbf\xf1\xd9\xfc\x0d\x36\x67\xb6\xa6\xca\x1f\x2e\x40\x7e\xf8\x50\x77\xa0\x8a\x7f\xcb\x1a\x9b\xe4\xea\x72\xc4\x09\xc9\x11\xbf\xd5\x64\xbd\x69\xd5\xd4\x6a\x99\xad\x6b\x41\xaf\xee\x72\x5f\x79\xa2\xc5\x3c\x4a\xbb\x64\x7f\x97\x12\xef\x54\xf7\x67\x58\x0a\x83\x70\x76\x35\xbc\xbe\x3e\x8b\xe1\xf8\x70\x75\xfb\x69\x74\x16\x1f\x0e\x29\x33\x63\xe9\xe7\x2b\x97\xf8\x24\x6e\xa7\xde\xdc\x89\xb4\xc0\xdb\x84\xeb\x7d\x70\x97\xff\xc5\xd7\xde\xd1\x2b\x6f\x2e\xe0\xfc\x6c\x2d\x8c\x6b\x87\x17\x80\xf6\xbb\x00\xab\xde\xf2\x0f\x9e\xa7\xe1\x39\xc4\x31\xbd\x85\x0a\x4f\x50\x2f\x30\x32\xcb\x0b\x7b\xc0\x6c\x71\xab\xf4\xbe\x69\xe8\x87\x4f\xcd\xe7\xa4\x71\x48\xce\x07\x7f\xee\x17\x14\xc7\x5e\xcf\x8a\x34\x7d\xbe\xc7\x73\xe4\x9d\x4d\x95\x73\x4e\xe6\xbe\x77\x4e\x3e\x02\xd7\x02\xec\xe7\xa3\x2d\x34\x8a\x6f\x17\xc7\x8a\x7e\x1a\x5d\x8f\xfe\x18\xce\x46\xcf\x2a\x3b\x9d\x0d\x67\xe3\x2b\x7e\xf5\xe3\xda\x86\xbf\x54\xdb\xd7\x9d\x70\x3c\x87\x3b\x06\xbc\x6a\xc1\xb7\x5b\xe0\x97\x7b\xe0\x97\x9a\xe0\x58\xd0\x7f\xa2\xa2\xff\xbf\xa4\xff\x74\x4d\x27\xa3\xd9\xfd\xe4\xe6\xa4\x74\xf4\xe7\xca\x4f\x7c\x33\xde\xf5\xed\xba\x05\xaf\xdc\x79\x7c\xf9\x2b\xee\x8d\xc6\x57\x85\x6d\xb8\xd0\x1f\x4a\xd6\x77\xf4\x4e\x67\xb7\x77\xc7\xde\xbb\x1f\x5f\x8d\x0f\x43\xe5\x47\x31\xda\x0d\x68\xbf\xc3\xfa\xef\xfb\x2f\x77\x9f\x46\xd3\x99\x67\x2a\x33\x9b\x2f\x0f\x9f\xe9\x1a\xed\xdd\x55\xed\x64\x06\xca\xa4\x9c\x7f\xd2\xdc\x51\x9a\xcb\xe9\x77\x40\xa7\x98\x1d\xe0\xcf\x6e\x0e\xf8\x08\xed\xbf\xbb\x78\xe4\x3a\x0e\xf7\x97\x05\xf3\x37\x98\x23\x3e\xd6\xf5\xd9\x45\x7a\x3c\xdd\xf3\x3b\x88\xf1\xd5\xca\x53\xf5\xa9\xfa\xbf\x00\x00\x00\xff\xff\x51\x4b\xdc\x7e\x62\x10\x00\x00") - -func evmdis_tracerJsBytes() ([]byte, error) { - return bindataRead( - _evmdis_tracerJs, - "evmdis_tracer.js", - ) -} - -func evmdis_tracerJs() (*asset, error) { - bytes, err := evmdis_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "evmdis_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0xe8, 0x96, 0xa1, 0x8b, 0xc, 0x68, 0x3c, 0xe8, 0x5d, 0x7e, 0xf0, 0xab, 0xfe, 0xec, 0xd1, 0xb, 0x3d, 0xfc, 0xc7, 0xac, 0xb5, 0xa, 0x41, 0x55, 0x0, 0x3a, 0x60, 0xa7, 0x8e, 0x46, 0x93}} - return a, nil -} - -var _noop_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\x4f\x6f\xdb\x46\x10\xc5\xcf\xe6\xa7\x78\xc7\x04\x50\xc5\xfe\x39\x14\x70\x8a\x02\xac\x61\x27\x2a\x1c\xdb\x90\xe8\x06\x3e\x0e\xc9\xa1\xb8\xe9\x6a\x87\x9d\x9d\x95\x22\x18\xfe\xee\xc5\x92\x12\x12\x14\x69\x9b\x9b\xb0\xd2\xfb\xbd\x37\xf3\x46\x65\x89\x2b\x19\x8f\xea\xb6\x83\xe1\xc7\xef\x7f\xf8\x19\xf5\xc0\xd8\xca\x77\x6c\x03\x2b\xa7\x1d\xaa\x64\x83\x68\x2c\xca\x12\xf5\xe0\x22\x7a\xe7\x19\x2e\x62\x24\x35\x48\x0f\xfb\xc7\xef\xbd\x6b\x94\xf4\xb8\x2c\xca\x72\xd6\x7c\xf5\xeb\x4c\xe8\x95\x19\x51\x7a\x3b\x90\xf2\x25\x8e\x92\xd0\x52\x80\x72\xe7\xa2\xa9\x6b\x92\x31\x9c\x81\x42\x57\x8a\x62\x27\x9d\xeb\x8f\x19\xe9\x0c\x29\x74\xac\x93\xb5\xb1\xee\xe2\x39\xc7\xdb\xbb\x47\xdc\x72\x8c\xac\x78\xcb\x81\x95\x3c\x1e\x52\xe3\x5d\x8b\x5b\xd7\x72\x88\x0c\x8a\x18\xf3\x4b\x1c\xb8\x43\x33\xe1\xb2\xf0\x26\x47\xd9\x9c\xa2\xe0\x46\x52\xe8\xc8\x9c\x84\x05\xd8\xe5\xe4\xd8\xb3\x46\x27\x01\x3f\x9d\xad\x4e\xc0\x05\x44\x33\xe4\x15\x59\x1e\x40\x21\x63\xd6\xbd\x06\x85\x23\x3c\xd9\x67\xe9\x37\x2c\xe4\xf3\xdc\x1d\x5c\x98\x6c\x06\x19\x19\x36\x90\xe5\xa9\x0f\xce\x7b\x34\x8c\x14\xb9\x4f\x7e\x91\x69\x4d\x32\x7c\x58\xd5\xef\xee\x1f\x6b\x54\x77\x4f\xf8\x50\xad\xd7\xd5\x5d\xfd\xf4\x06\x07\x67\x83\x24\x03\xef\x79\x46\xb9\xdd\xe8\x1d\x77\x38\x90\x2a\x05\x3b\x42\xfa\x4c\x78\x7f\xbd\xbe\x7a\x57\xdd\xd5\xd5\x6f\xab\xdb\x55\xfd\x04\x51\xdc\xac\xea\xbb\xeb\xcd\x06\x37\xf7\x6b\x54\x78\xa8\xd6\xf5\xea\xea\xf1\xb6\x5a\xe3\xe1\x71\xfd\x70\xbf\xb9\x5e\x62\xc3\x39\x15\x67\xfd\xff\xef\xbc\x9f\xda\x53\x46\xc7\x46\xce\xc7\xf3\x26\x9e\x24\x21\x0e\x92\x7c\x87\x81\xf6\x0c\xe5\x96\xdd\x9e\x3b\x10\x5a\x19\x8f\xdf\x5c\x6a\x66\x91\x97\xb0\x9d\x66\xfe\xd7\x83\xc4\xaa\x47\x10\x5b\x20\x32\xe3\x97\xc1\x6c\xbc\x2c\xcb\xc3\xe1\xb0\xdc\x86\xb4\x14\xdd\x96\x7e\xc6\xc5\xf2\xd7\x65\x91\x99\x41\x64\xac\x95\x5a\xd6\x5c\xce\xc7\x14\x6d\x62\x37\xa4\xdc\x48\x60\x34\xe2\x3c\xeb\x98\x5b\x46\x2b\x5d\x1e\xe0\xaf\xe4\x94\x3b\xf4\x2a\x3b\x10\x7e\xa7\x3d\x6d\x5a\x75\xa3\x65\x9c\x34\x1f\xb9\x35\x98\xcc\x15\x52\xe3\xa7\x73\x24\x98\x52\x88\xd4\xe6\xbb\xc9\x9f\x5b\xd6\x65\xf1\x5c\x5c\x94\x25\xa2\xf1\x98\xbd\x5d\xd8\xcb\x9f\x99\x2b\x9a\xfb\xd4\x23\x64\x9c\x1c\xa7\xcb\xc8\xa1\xfe\x78\x0f\xfe\xc4\x6d\x32\x8e\xcb\xe2\x22\xeb\x2e\xd1\xa7\x30\x41\x5f\x79\xd9\x2e\xd0\x35\xaf\xf1\x8c\x97\x45\x31\x91\x7b\x4a\xde\xbe\x44\x1f\x86\xd3\x99\x50\x6b\x89\xfc\x89\x96\x23\x49\x0f\x0a\x67\xc3\x7e\x2e\xf0\x62\xd2\xff\xb7\x85\x72\xfc\x9a\x07\x79\x3f\xf9\xcc\xc0\x38\x57\xdf\x30\x07\x38\x63\xa5\x7c\xfb\xb2\x67\xcd\x7f\x7b\x28\x5b\xd2\x10\x27\x5c\xd6\xf4\x2e\x90\x3f\x83\x4f\xe7\x91\x37\xe6\xc2\x76\x59\x5c\xcc\xef\x5f\x84\x6a\xed\xd3\x39\xd4\x4c\xc2\xf3\xcb\x1b\xbc\x14\x2f\xc5\xdf\x01\x00\x00\xff\xff\x77\x56\xe7\x1a\xf7\x04\x00\x00") - -func noop_tracerJsBytes() ([]byte, error) { - return bindataRead( - _noop_tracerJs, - "noop_tracer.js", - ) -} - -func noop_tracerJs() (*asset, error) { - bytes, err := noop_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "noop_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xf, 0x1c, 0x6f, 0x65, 0xaf, 0x90, 0x31, 0xab, 0xf, 0xe0, 0xca, 0x54, 0x7, 0xfd, 0xd3, 0xa1, 0x4a, 0x14, 0x1, 0x2a, 0x9d, 0xdc, 0xb9, 0x64, 0x69, 0x83, 0x30, 0xb1, 0x2a, 0xbd, 0xfb}} - return a, nil -} - -var _opcount_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xcf\x6e\xdb\x46\x10\x87\xcf\xe2\x53\xfc\x8e\x09\xa2\x92\x69\x7b\x28\xe0\x16\x05\x58\xc3\x4e\x04\xd8\xb2\x21\xd1\x09\x7c\x5c\x92\x43\x71\x9b\xd5\x2e\x31\x3b\x2b\x86\x08\xfc\xee\xc5\x2e\xc5\xc6\x08\x5c\xd4\xd7\xd5\xcc\xf7\xcd\x3f\xb1\x28\x70\xe9\x86\x89\xf5\xa1\x17\xfc\xf2\xfe\xe7\xdf\x50\xf5\x84\x83\xfb\x89\xa4\x27\xa6\x70\x44\x19\xa4\x77\xec\xb3\xa2\x40\xd5\x6b\x8f\x4e\x1b\x82\xf6\x18\x14\x0b\x5c\x07\xf9\x21\xde\xe8\x9a\x15\x4f\x79\x56\x14\x73\xce\x8b\x3f\x47\x42\xc7\x44\xf0\xae\x93\x51\x31\x5d\x60\x72\x01\x8d\xb2\x60\x6a\xb5\x17\xd6\x75\x10\x82\x16\x28\xdb\x16\x8e\x71\x74\xad\xee\xa6\x88\xd4\x82\x60\x5b\xe2\xa4\x16\xe2\xa3\x5f\xea\xf8\xb0\x7d\xc0\x0d\x79\x4f\x8c\x0f\x64\x89\x95\xc1\x7d\xa8\x8d\x6e\x70\xa3\x1b\xb2\x9e\xa0\x3c\x86\xf8\xe2\x7b\x6a\x51\x27\x5c\x4c\xbc\x8e\xa5\xec\xcf\xa5\xe0\xda\x05\xdb\x2a\xd1\xce\xae\x41\x3a\x56\x8e\x13\xb1\xd7\xce\xe2\xd7\x45\x75\x06\xae\xe1\x38\x42\xde\x28\x89\x0d\x30\xdc\x10\xf3\xde\x42\xd9\x09\x46\xc9\xf7\xd4\x57\x0c\xe4\x7b\xdf\x2d\xb4\x4d\x9a\xde\x0d\x04\xe9\x95\xc4\xae\x47\x6d\x0c\x6a\x42\xf0\xd4\x05\xb3\x8e\xb4\x3a\x08\x3e\x6f\xaa\x8f\x77\x0f\x15\xca\xed\x23\x3e\x97\xbb\x5d\xb9\xad\x1e\x7f\xc7\xa8\xa5\x77\x41\x40\x27\x9a\x51\xfa\x38\x18\x4d\x2d\x46\xc5\xac\xac\x4c\x70\x5d\x24\xdc\x5e\xed\x2e\x3f\x96\xdb\xaa\xfc\x6b\x73\xb3\xa9\x1e\xe1\x18\xd7\x9b\x6a\x7b\xb5\xdf\xe3\xfa\x6e\x87\x12\xf7\xe5\xae\xda\x5c\x3e\xdc\x94\x3b\xdc\x3f\xec\xee\xef\xf6\x57\x39\xf6\x14\xab\xa2\x98\xff\xff\x33\xef\xd2\xf6\x98\xd0\x92\x28\x6d\xfc\x32\x89\x47\x17\xe0\x7b\x17\x4c\x8b\x5e\x9d\x08\x4c\x0d\xe9\x13\xb5\x50\x68\xdc\x30\xbd\x7a\xa9\x91\xa5\x8c\xb3\x87\xd4\xf3\x7f\x1e\x24\x36\x1d\xac\x93\x35\x3c\x11\xfe\xe8\x45\x86\x8b\xa2\x18\xc7\x31\x3f\xd8\x90\x3b\x3e\x14\x66\xc6\xf9\xe2\xcf\x3c\x8b\x4c\x37\x34\x2e\x58\xa9\x58\x35\xc4\x71\x3f\x0a\x5e\x1d\x07\x43\x90\xf9\x29\xed\xe5\xef\xe0\x05\x29\xd0\x27\xb5\x0d\xc7\x9a\x38\x16\xaf\xad\x17\x0e\x4d\xbc\x87\xf4\xf7\xa1\xaf\xd4\xa4\xdd\xd6\x53\x8a\xbc\xfa\x74\x8b\x9a\xba\x38\x99\x74\xc9\xac\xac\x57\x29\x3c\x5d\xb5\xb6\x4a\xa8\xcd\xb3\x6f\xd9\xaa\x28\x66\x43\x12\x7f\xf9\xd1\x13\x39\xcf\x5d\xff\x8a\xf2\x6c\x95\xd2\x2e\xf0\x7e\x9d\x25\x8a\x17\x1a\x62\x27\xda\x9e\xdc\x17\x6a\xd3\x6a\xe8\x44\x3c\xa5\x66\xdb\xf3\xa9\x45\xfc\xa7\xdb\x05\xe3\xf3\x6c\x15\xf3\x2e\xd0\x05\x9b\x0c\x6f\x8c\x3b\xac\xd1\xd6\x6f\xf1\x0d\xd2\x6b\x9f\x27\xcb\xbb\x77\x78\x3a\x6b\x3a\x15\x8c\x3c\xf7\x8c\xfd\xf9\x08\x55\x23\x41\x99\x33\x3a\x76\xea\x3a\x28\xbb\xd8\xbb\xf9\x3c\x56\x29\xff\x65\xdf\xa2\x60\xf2\x2f\x39\x94\x31\xc9\x33\x03\xfd\x7c\x58\x35\x91\x85\x16\xe2\x38\x50\xb8\x13\x71\xfc\xa8\x80\x49\x02\x5b\x9f\x70\x31\xa7\xd3\x56\x99\x05\x7c\x3e\xbe\x38\x70\x6d\x0f\x79\xb6\x9a\xdf\x9f\x15\xd5\xc8\xd7\xa5\xa8\x99\xf4\x6c\x16\x78\xca\x9e\xb2\x7f\x02\x00\x00\xff\xff\xdd\xd8\xa1\x0a\x5c\x05\x00\x00") - -func opcount_tracerJsBytes() ([]byte, error) { - return bindataRead( - _opcount_tracerJs, - "opcount_tracer.js", - ) -} - -func opcount_tracerJs() (*asset, error) { - bytes, err := opcount_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "opcount_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x27, 0xe, 0x97, 0x88, 0x9b, 0x53, 0xbb, 0x20, 0x44, 0xd8, 0xf5, 0xeb, 0x41, 0xd2, 0x7e, 0xd6, 0xda, 0x6b, 0xf5, 0xaf, 0x0, 0x75, 0x9f, 0xd9, 0x22, 0xc, 0x6e, 0x74, 0xac, 0x2a, 0xa9, 0xa7}} - return a, nil -} - -var _prestate_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\xdd\x6f\xdb\x38\x12\x7f\x96\xfe\x8a\x41\x5f\x6c\xa3\xae\xdc\x64\x81\x3d\xc0\xb9\x1c\xa0\xba\x6e\x1b\x20\x9b\x04\xb6\x7b\xb9\xdc\x62\x1f\x28\x72\x24\x73\x4d\x93\x02\x49\xd9\xf1\x15\xf9\xdf\x0f\x43\x7d\xf8\xa3\x49\xd3\xdd\x37\x9b\x1c\xfe\xe6\xfb\x37\xa3\xd1\x08\x26\xa6\xdc\x59\x59\x2c\x3d\x9c\xbf\x3f\xfb\x07\x2c\x96\x08\x85\x79\x87\x7e\x89\x16\xab\x35\xa4\x95\x5f\x1a\xeb\xe2\xd1\x08\x16\x4b\xe9\x20\x97\x0a\x41\x3a\x28\x99\xf5\x60\x72\xf0\x27\xf2\x4a\x66\x96\xd9\x5d\x12\x8f\x46\xf5\x9b\x67\xaf\x09\x21\xb7\x88\xe0\x4c\xee\xb7\xcc\xe2\x18\x76\xa6\x02\xce\x34\x58\x14\xd2\x79\x2b\xb3\xca\x23\x48\x0f\x4c\x8b\x91\xb1\xb0\x36\x42\xe6\x3b\x82\x94\x1e\x2a\x2d\xd0\x06\xd5\x1e\xed\xda\xb5\x76\x7c\xbe\xf9\x0a\xd7\xe8\x1c\x5a\xf8\x8c\x1a\x2d\x53\x70\x57\x65\x4a\x72\xb8\x96\x1c\xb5\x43\x60\x0e\x4a\x3a\x71\x4b\x14\x90\x05\x38\x7a\xf8\x89\x4c\x99\x37\xa6\xc0\x27\x53\x69\xc1\xbc\x34\x7a\x08\x28\xc9\x72\xd8\xa0\x75\xd2\x68\xf8\xa5\x55\xd5\x00\x0e\xc1\x58\x02\xe9\x33\x4f\x0e\x58\x30\x25\xbd\x1b\x00\xd3\x3b\x50\xcc\xef\x9f\xfe\x44\x40\xf6\x7e\x0b\x90\x3a\xa8\x59\x9a\x12\xc1\x2f\x99\x27\xaf\xb7\x52\x29\xc8\x10\x2a\x87\x79\xa5\x86\x84\x96\x55\x1e\xee\xaf\x16\x5f\x6e\xbf\x2e\x20\xbd\x79\x80\xfb\x74\x36\x4b\x6f\x16\x0f\x17\xb0\x95\x7e\x69\x2a\x0f\xb8\xc1\x1a\x4a\xae\x4b\x25\x51\xc0\x96\x59\xcb\xb4\xdf\x81\xc9\x09\xe1\xb7\xe9\x6c\xf2\x25\xbd\x59\xa4\x1f\xae\xae\xaf\x16\x0f\x60\x2c\x7c\xba\x5a\xdc\x4c\xe7\x73\xf8\x74\x3b\x83\x14\xee\xd2\xd9\xe2\x6a\xf2\xf5\x3a\x9d\xc1\xdd\xd7\xd9\xdd\xed\x7c\x9a\xc0\x1c\xc9\x2a\xa4\xf7\xaf\xc7\x3c\x0f\xd9\xb3\x08\x02\x3d\x93\xca\xb5\x91\x78\x30\x15\xb8\xa5\xa9\x94\x80\x25\xdb\x20\x58\xe4\x28\x37\x28\x80\x01\x37\xe5\xee\xa7\x93\x4a\x58\x4c\x19\x5d\x04\x9f\x5f\x2c\x48\xb8\xca\x41\x1b\x3f\x04\x87\x08\xff\x5c\x7a\x5f\x8e\x47\xa3\xed\x76\x9b\x14\xba\x4a\x8c\x2d\x46\xaa\x86\x73\xa3\x7f\x25\x31\x61\x96\x16\x9d\x67\x1e\x17\x96\x71\xb4\x60\x2a\x5f\x56\xde\x81\xab\xf2\x5c\x72\x89\xda\x83\xd4\xb9\xb1\xeb\x50\x29\xe0\x0d\x70\x8b\xcc\x23\x30\x50\x86\x33\x05\xf8\x88\xbc\x0a\x77\x75\xa4\x43\xb9\x5a\xa6\x1d\xe3\xe1\x34\xb7\x66\x4d\xbe\x56\xce\xd3\x0f\xe7\x70\x9d\x29\x14\x50\xa0\x46\x27\x1d\x64\xca\xf0\x55\x12\x7f\x8b\xa3\x03\x63\xa8\x4e\x82\x87\x8d\x50\xa8\x8d\x2d\xf6\x2c\x42\x56\x49\x25\xa4\x2e\x92\x38\x6a\xa5\xc7\xa0\x2b\xa5\x86\x71\x80\x50\xc6\xac\xaa\x32\xe5\xdc\x54\xc1\xf6\x3f\x91\xfb\x1a\xcc\x95\xc8\x65\x4e\xc5\xc1\xba\x5b\x6f\xc2\x55\xa7\xd7\x64\x24\x9f\xc4\xd1\x11\xcc\x18\xf2\x4a\x07\x77\xfa\x4c\x08\x3b\x04\x91\x0d\xbe\xc5\x51\xb4\x61\x96\xb0\xe0\x12\xbc\xf9\x82\x8f\xe1\x72\x70\x11\x47\x91\xcc\xa1\xef\x97\xd2\x25\x2d\xf0\xef\x8c\xf3\x3f\xe0\xf2\xf2\x32\x34\x75\x2e\x35\x8a\x01\x10\x44\xf4\x9c\x58\x7d\x13\x65\x4c\x31\xcd\x71\x0c\xbd\xf7\x8f\x3d\x78\x0b\x22\x4b\x0a\xf4\x1f\xea\xd3\x5a\x59\xe2\xcd\xdc\x5b\xa9\x8b\xfe\xd9\xaf\x83\x61\x78\xa5\x4d\x78\x03\x8d\xf8\x8d\xe9\x84\xeb\x7b\x6e\x44\xb8\x6e\x6c\xae\xa5\x26\x46\x34\x42\x8d\x94\xf3\xc6\xb2\x02\xc7\xf0\xed\x89\xfe\x3f\x91\x57\x4f\x71\xf4\x74\x14\xe5\x79\x2d\xf4\x42\x94\x1b\x08\x40\xed\x6d\x57\xe7\x85\xa4\x4e\x3d\x4c\x40\xc0\xfb\x51\x12\xe6\xad\x29\x27\x49\x58\xe1\xee\xf5\x4c\xd0\x85\x14\x8f\xdd\xc5\x0a\x77\x83\x8b\xf8\xc5\x14\x25\x8d\xd1\xbf\x4b\xf1\xf8\xb3\xf9\x3a\x79\x73\x14\xd7\x39\x49\xed\xed\x1d\x0c\x4e\xe2\x68\xd1\x55\xca\x53\xb9\x4b\xbd\x31\x2b\x22\xae\x25\xc5\x47\xa9\x10\x12\x53\x52\xb6\x5c\xcd\x1c\x19\xa2\x06\xe9\xd1\x32\xa2\x4e\xb3\x41\x4b\x53\x03\x2c\xfa\xca\x6a\xd7\x85\x31\x97\x9a\xa9\x16\xb8\x89\xba\xb7\x8c\xd7\x3d\x53\x9f\x1f\xc4\x92\xfb\xc7\x10\xc5\xe0\xdd\x68\x04\xa9\x07\x72\x11\x4a\x23\xb5\x1f\xc2\x16\x41\x23\x0a\x6a\x7c\x81\xa2\xe2\x3e\xe0\xf5\x36\x4c\x55\xd8\xab\x9b\x9b\x28\x32\x3c\x35\x15\x4d\x82\x83\xe6\x1f\x06\x03\xd7\x66\x13\x46\x5c\xc6\xf8\x0a\x9a\x86\x33\x56\x16\x52\xc7\x4d\x38\x8f\x9a\x8d\x2c\x4a\x08\x38\x98\x15\x72\x45\x49\xa4\x93\x0f\x4c\xc1\x25\x64\xb2\xb8\xd2\xfe\x24\x79\x75\xd0\xdb\xa7\x83\x3f\x92\xa6\x79\x12\x47\x84\xd7\x3f\x1f\x0c\xe1\xec\xd7\xae\x22\xbc\x21\x28\x78\x1d\xcc\x9b\x97\xa1\xe2\xd3\x62\x78\xfe\x59\x50\x43\x1d\xfc\x36\x68\x4d\x5c\x95\x51\x3a\x6a\x3f\x43\x1c\x8f\xbb\xf8\xe2\x07\xb8\xc7\xbe\xb5\xb8\x4d\x68\x12\x26\xc4\xcb\xa0\x75\x8a\x3e\x22\xb7\xb8\x26\x56\xa7\x2c\x70\xa6\x14\xda\x9e\x83\xc0\x19\xc3\xa6\x9c\x42\xbe\x70\x5d\xfa\x5d\xcb\xf5\x9e\xd9\x02\xbd\x7b\xdd\xb0\x80\xf3\xee\x5d\x4b\x81\x21\x14\xbb\x12\xe1\xf2\x12\x7a\x93\xd9\x34\x5d\x4c\x7b\x4d\x1b\x8d\x46\x70\x8f\x61\x13\xca\x94\xcc\x84\xda\x81\x40\x85\x1e\x6b\xbb\x8c\x0e\x21\xea\x28\x61\x48\x2b\x0d\x2d\x1b\xf8\x28\x9d\x97\xba\x80\x9a\x29\xb6\x34\x57\x1b\xb8\xd0\x23\x9c\x55\x8e\xaa\xf5\x64\x08\x79\x43\x1b\x85\x45\xe2\x15\xe2\xff\xd0\x6e\x4c\xc9\x6e\x03\xc9\xa5\x75\x1e\x4a\xc5\x38\x26\x84\xd7\x19\xf3\x72\x7e\x9b\x4e\x26\xd5\xb3\xd0\x82\x01\x68\x3f\xe0\x98\xa2\x01\x49\xea\x1d\xf4\x5b\x8c\x41\x1c\x45\xb6\x95\x3e\xc0\xbe\xd8\x53\x82\xf3\x58\x1e\x12\x02\x2d\x16\xb8\x41\xa2\xd0\xc0\x06\xf5\x30\x24\x5d\xff\xfe\xad\x99\xbe\xe8\x92\x38\xa2\x77\x07\x7d\xad\x4c\x71\xdc\xd7\xa2\x0e\x0b\xaf\xac\xa5\xfc\x77\x14\x9c\x53\x8f\xff\x59\x39\x4f\x31\xb5\x14\x9e\x86\x2d\x9e\x23\xc9\x40\x89\x34\x6d\x07\xdf\x93\x21\xcd\xad\x30\x27\x48\x5d\x33\xa5\xea\x6d\xae\x34\x1e\xb5\x97\x4c\xa9\x1d\xe5\x61\x6b\x69\x8d\xa1\xc5\x65\x08\x4e\x92\x54\x60\x9c\x20\x2a\x35\x57\x95\xa8\xcb\x20\xd4\x71\x83\xe7\x82\xcd\xc7\xfb\xcf\x1a\x9d\x63\x05\x26\x54\x49\xb9\x7c\x6c\x36\x48\x0d\xbd\x9a\xe4\xfa\x83\x5e\xd2\x19\x79\x4c\x31\xca\x14\x49\x5b\x64\x44\xd3\xa9\x10\x16\x9d\xeb\x0f\x1a\xce\xe9\x32\x7b\xbf\x44\x4d\xc1\x07\x8d\x5b\xe8\x56\x13\xc6\x39\xad\x6a\x62\x08\x4c\x08\xa2\xb6\x93\x35\x22\x8e\x22\xb7\x95\x9e\x2f\x21\x68\x32\xe5\xbe\x17\x07\x4d\xfd\x73\xe6\x10\xde\x4c\xff\xb3\x98\xdc\x7e\x9c\x4e\x6e\xef\x1e\xde\x8c\xe1\xe8\x6c\x7e\xf5\xdf\x69\x77\xf6\x21\xbd\x4e\x6f\x26\xd3\x37\xe3\x30\x9b\x9f\x71\xc8\x9b\xd6\x05\x52\xe8\x3c\xe3\xab\xa4\x44\x5c\xf5\xdf\x1f\xf3\xc0\xde\xc1\x28\xca\x2c\xb2\xd5\xc5\xde\x98\xba\x41\x1b\x1d\x2d\xe5\xc2\x25\xbc\x18\xac\x8b\x97\xad\x99\x34\xf2\xfd\x96\xc8\xf7\xab\x48\xa0\x8a\xd7\xed\x38\xff\xcb\x86\x84\xde\x61\x7c\x35\x06\xc7\x14\x6d\xc0\xf2\x7f\xf4\xe5\x92\xe7\x0e\xfd\x10\x50\x0b\xb3\x25\xe6\xeb\x50\xeb\x9b\x06\xf7\x20\x64\x67\x83\x9a\x41\x6f\xf3\xfe\xa0\x13\x26\xb0\xef\x45\xcf\x9f\x13\x45\x2d\xe0\xb2\x45\x7f\x1b\x5e\xbe\x1e\xa8\xf3\x26\x52\x27\x0a\x7e\x39\xd9\xf0\xc2\xfd\x1a\xd7\xc6\xee\x9a\x71\x74\xe0\xdf\x8f\xa3\x9a\x5e\x5f\x77\xf5\x44\x7f\xa8\xc8\xba\x83\x8f\xd3\xeb\xe9\xe7\x74\x31\x3d\x92\x9a\x2f\xd2\xc5\xd5\xa4\x3e\xfa\xcb\x85\x77\xf6\xd3\x85\xd7\x9b\xcf\x17\xb7\xb3\x69\x6f\xdc\xfc\xbb\xbe\x4d\x3f\xf6\xbe\x53\xd8\x6c\x81\x3f\x6a\x5d\x6f\xee\x8d\x15\x7f\xa7\x03\x0e\x36\xb2\x9c\x3d\xb7\x90\x05\x6a\xe7\xbe\x3a\xf9\xe0\x01\xa6\x5b\x56\xce\xeb\x8f\xbe\x28\xbc\x7f\x96\x87\x9f\xe2\xa7\xf8\xff\x01\x00\x00\xff\xff\xb1\x28\x85\x2a\x8a\x10\x00\x00") - -func prestate_tracerJsBytes() ([]byte, error) { - return bindataRead( - _prestate_tracerJs, - "prestate_tracer.js", - ) -} - -func prestate_tracerJs() (*asset, error) { - bytes, err := prestate_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "prestate_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0x79, 0x70, 0x4f, 0xc5, 0x78, 0x57, 0x63, 0x6f, 0x5, 0x31, 0xce, 0x3e, 0x5d, 0xbd, 0x71, 0x4, 0x46, 0x78, 0xcd, 0x1d, 0xcd, 0xb9, 0xd8, 0x10, 0xff, 0xe6, 0xc5, 0x59, 0xb9, 0x25, 0x6e}} - return a, nil -} - -var _trigram_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\x4f\x6f\xe3\x36\x10\xc5\xef\xfe\x14\xaf\x27\x27\x88\xd7\x4a\xda\x4b\xe1\xd4\x05\xdc\x6c\xb2\x6b\x20\x6b\x07\xb6\xd2\x45\x10\xe4\x40\x4b\x23\x89\x08\x4d\x0a\xe4\xd0\x5e\x21\xc8\x77\x2f\xa8\x3f\xfe\x13\xb8\xed\xfa\x64\x70\xe6\xfd\xe6\xcd\x70\xc4\x28\xc2\x8d\x29\x2b\x2b\xf3\x82\xf1\xeb\xe5\xd5\xef\x88\x0b\x42\x6e\x3e\x11\x17\x64\xc9\xaf\x31\xf1\x5c\x18\xeb\x7a\x51\x84\xb8\x90\x0e\x99\x54\x04\xe9\x50\x0a\xcb\x30\x19\xf8\x43\xbe\x92\x2b\x2b\x6c\x35\xec\x45\x51\xa3\x39\x19\x0e\x84\xcc\x12\xc1\x99\x8c\xb7\xc2\xd2\x08\x95\xf1\x48\x84\x86\xa5\x54\x3a\xb6\x72\xe5\x99\x20\x19\x42\xa7\x91\xb1\x58\x9b\x54\x66\x55\x40\x4a\x86\xd7\x29\xd9\xba\x34\x93\x5d\xbb\xce\xc7\x97\xd9\x23\xee\xc9\x39\xb2\xf8\x42\x9a\xac\x50\x78\xf0\x2b\x25\x13\xdc\xcb\x84\xb4\x23\x08\x87\x32\x9c\xb8\x82\x52\xac\x6a\x5c\x10\xde\x05\x2b\xcb\xd6\x0a\xee\x8c\xd7\xa9\x60\x69\xf4\x00\x24\x83\x73\x6c\xc8\x3a\x69\x34\x7e\xeb\x4a\xb5\xc0\x01\x8c\x0d\x90\x33\xc1\xa1\x01\x0b\x53\x06\xdd\x39\x84\xae\xa0\x04\xef\xa5\x3f\x31\x90\x7d\xdf\x29\xa4\xae\xcb\x14\xa6\x24\x70\x21\x38\x74\xbd\x95\x4a\x61\x45\xf0\x8e\x32\xaf\x06\x81\xb6\xf2\x8c\xef\xd3\xf8\xeb\xfc\x31\xc6\x64\xf6\x84\xef\x93\xc5\x62\x32\x8b\x9f\xae\xb1\x95\x5c\x18\xcf\xa0\x0d\x35\x28\xb9\x2e\x95\xa4\x14\x5b\x61\xad\xd0\x5c\xc1\x64\x81\xf0\xed\x76\x71\xf3\x75\x32\x8b\x27\x7f\x4d\xef\xa7\xf1\x13\x8c\xc5\xdd\x34\x9e\xdd\x2e\x97\xb8\x9b\x2f\x30\xc1\xc3\x64\x11\x4f\x6f\x1e\xef\x27\x0b\x3c\x3c\x2e\x1e\xe6\xcb\xdb\x21\x96\x14\x5c\x51\xd0\xff\xff\xcc\xb3\xfa\xf6\x2c\x21\x25\x16\x52\xb9\x6e\x12\x4f\xc6\xc3\x15\xc6\xab\x14\x85\xd8\x10\x2c\x25\x24\x37\x94\x42\x20\x31\x65\xf5\xd3\x97\x1a\x58\x42\x19\x9d\xd7\x3d\xff\xeb\x42\x62\x9a\x41\x1b\x1e\xc0\x11\xe1\x8f\x82\xb9\x1c\x45\xd1\x76\xbb\x1d\xe6\xda\x0f\x8d\xcd\x23\xd5\xe0\x5c\xf4\xe7\xb0\xd7\x7b\xeb\x01\x40\x14\xa1\x90\x8e\xc3\xe5\x04\xec\x5a\x94\xb5\x2b\x2b\x73\x2b\xd6\x48\x8c\xd7\x4c\xd6\xd5\xa9\x21\x6f\x84\xb7\xf7\x41\x27\x54\xc2\xf1\xbc\x0c\xd2\xf0\x0f\xa6\x24\x5b\xef\x54\x1d\x6f\x82\x6e\x84\xe7\x7e\x7f\xd0\xef\xbf\x0c\x76\xa7\x9f\xa9\xe4\x62\x84\xcb\xe6\xa4\x65\x39\xa6\x9a\x24\xf5\xc6\xbc\x52\x5a\x8f\x94\x36\x64\x2b\x98\x32\x31\x69\xbb\x22\xc1\xe2\xdf\xdf\x40\x3f\x28\xf1\x4c\x6e\x58\x13\x82\x74\x84\xcc\xeb\x24\x14\x3f\x53\x26\x1f\x20\x5d\x9d\xe3\x6d\xc7\xdf\x08\x8b\x34\x54\xc5\x18\xca\xe4\xc3\x9c\x1a\x13\x67\xe7\xd7\xbb\x1c\x99\xe1\xac\xc9\xf9\x65\x0c\x2e\xa4\x1b\xee\xbc\x9e\xef\x49\xe1\xb7\x0b\xce\x4b\x87\x71\xd7\xdf\xf5\xe9\x9c\xcf\x6d\xd9\x1a\x7d\x9c\x63\x89\xbd\xd5\xfb\xb3\xf7\x23\xbf\xa6\x6c\xcd\x9a\x72\xc8\x66\xc9\x56\xea\xfc\xd0\x6f\xc8\x79\xa5\x0a\xe3\x23\x3f\xcf\x97\x2f\x17\xfd\x4f\xfd\x8b\xa3\xb3\xab\xe6\xcc\x94\xc7\xdd\xd6\x39\xe1\x52\x9f\x5f\xa9\x7a\x39\xd5\xe4\x2e\x78\x71\x71\xca\x26\x29\x47\xf8\x2f\x19\xc6\xb8\x3a\x25\xfc\xe0\xf8\x63\x0f\x57\x07\xc3\xfc\x10\xc0\x18\x5d\x1b\xfb\x3d\xcc\x84\x57\x7c\xb8\x3c\xdb\xa2\x7d\x11\x44\xc2\x5e\xa8\x76\x5f\xc2\xeb\x66\x32\x08\xdd\xad\x54\xd6\x7c\xab\x81\x52\x23\x4e\x2e\xd1\xbe\x8c\x25\x77\xaa\x8e\x50\xaa\xae\xd5\x40\x5d\xf3\xa5\xaf\x88\x34\x24\x87\x0f\x82\x52\x98\x0d\xd9\xf0\xca\xb7\x57\xee\x3a\x62\x90\x65\x52\x0b\xd5\xb1\xdb\x07\x81\xad\x48\xa4\xce\x1b\x6b\x4d\xe8\xc0\x5b\xc2\x3f\x0e\x97\xbb\x61\xee\x27\xbf\x9b\xce\x7b\xef\x9f\x00\x00\x00\xff\xff\xb3\x93\x16\xd5\xfc\x06\x00\x00") - -func trigram_tracerJsBytes() ([]byte, error) { - return bindataRead( - _trigram_tracerJs, - "trigram_tracer.js", - ) -} - -func trigram_tracerJs() (*asset, error) { - bytes, err := trigram_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "trigram_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x40, 0x63, 0xe1, 0x42, 0x60, 0x7, 0x1b, 0x79, 0x47, 0x1, 0xa1, 0xbf, 0xc4, 0x66, 0x19, 0x9b, 0x2b, 0x5a, 0x1f, 0x82, 0x3d, 0xcf, 0xee, 0xe7, 0x60, 0x25, 0x2c, 0x4f, 0x13, 0x97, 0xc7, 0x18}} - return a, nil -} - -var _unigram_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x4d\x6f\xdb\x46\x10\xbd\xeb\x57\xbc\xa3\x8c\xa8\xa4\xd3\x5e\x0a\xa5\x09\xc0\x1a\x76\x22\xc0\x91\x0d\x89\x6e\x60\x14\x3d\x2c\xc9\x21\xb9\xe8\x6a\x87\xd8\x9d\x95\x42\x04\xfa\xef\xc5\x92\xa2\xe5\x1a\x6e\x13\x9e\x04\xcd\xbc\x8f\x79\x33\x64\x9a\xe2\x8a\xbb\xde\xe9\xa6\x15\xfc\x7c\xf9\xf6\x57\xe4\x2d\xa1\xe1\x9f\x48\x5a\x72\x14\x76\xc8\x82\xb4\xec\xfc\x2c\x4d\x91\xb7\xda\xa3\xd6\x86\xa0\x3d\x3a\xe5\x04\x5c\x43\x5e\xf4\x1b\x5d\x38\xe5\xfa\x64\x96\xa6\x23\xe6\xd5\x72\x64\xa8\x1d\x11\x3c\xd7\x72\x50\x8e\x96\xe8\x39\xa0\x54\x16\x8e\x2a\xed\xc5\xe9\x22\x08\x41\x0b\x94\xad\x52\x76\xd8\x71\xa5\xeb\x3e\x52\x6a\x41\xb0\x15\xb9\x41\x5a\xc8\xed\xfc\xe4\xe3\xe3\xfa\x01\xb7\xe4\x3d\x39\x7c\x24\x4b\x4e\x19\xdc\x87\xc2\xe8\x12\xb7\xba\x24\xeb\x09\xca\xa3\x8b\xff\xf8\x96\x2a\x14\x03\x5d\x04\xde\x44\x2b\xdb\x93\x15\xdc\x70\xb0\x95\x12\xcd\x76\x01\xd2\xd1\x39\xf6\xe4\xbc\x66\x8b\x5f\x26\xa9\x13\xe1\x02\xec\x22\xc9\x5c\x49\x1c\xc0\x81\xbb\x88\xbb\x80\xb2\x3d\x8c\x92\x33\xf4\x07\x02\x39\xcf\x5d\x41\xdb\x41\xa6\xe5\x8e\x20\xad\x92\x38\xf5\x41\x1b\x83\x82\x10\x3c\xd5\xc1\x2c\x22\x5b\x11\x04\x5f\x56\xf9\xa7\xbb\x87\x1c\xd9\xfa\x11\x5f\xb2\xcd\x26\x5b\xe7\x8f\xef\x70\xd0\xd2\x72\x10\xd0\x9e\x46\x2a\xbd\xeb\x8c\xa6\x0a\x07\xe5\x9c\xb2\xd2\x83\xeb\xc8\xf0\xf9\x7a\x73\xf5\x29\x5b\xe7\xd9\xef\xab\xdb\x55\xfe\x08\x76\xb8\x59\xe5\xeb\xeb\xed\x16\x37\x77\x1b\x64\xb8\xcf\x36\xf9\xea\xea\xe1\x36\xdb\xe0\xfe\x61\x73\x7f\xb7\xbd\x4e\xb0\xa5\xe8\x8a\x22\xfe\xfb\x99\xd7\xc3\xf6\x1c\xa1\x22\x51\xda\xf8\x29\x89\x47\x0e\xf0\x2d\x07\x53\xa1\x55\x7b\x82\xa3\x92\xf4\x9e\x2a\x28\x94\xdc\xf5\x3f\xbc\xd4\xc8\xa5\x0c\xdb\x66\x98\xf9\x3f\x0f\x12\xab\x1a\x96\x65\x01\x4f\x84\xdf\x5a\x91\x6e\x99\xa6\x87\xc3\x21\x69\x6c\x48\xd8\x35\xa9\x19\xe9\x7c\xfa\x21\x99\xcd\xbe\xcd\x00\x20\x4d\xd1\x6a\x2f\x71\x39\x91\x76\xa7\xba\xe8\x8a\xbb\x92\x2b\xf2\x10\x46\xc9\xc1\x0a\x39\x3f\x74\xc7\xd6\x25\xbe\x1d\x17\x13\xd6\x72\xe7\xc7\x16\x0f\x1b\x76\x05\xb9\x11\x3e\xb6\xc7\xea\x12\x97\x4f\xdd\x5e\xa8\x8b\x4a\xda\xee\xf9\x6f\xaa\x86\xdc\x68\x4f\xae\x3f\x09\x8e\x77\x10\x7d\xfc\xf1\x19\xf4\x95\xca\x20\xe4\x93\x01\x1d\xa1\x4b\xd4\xc1\x96\xf1\xfa\xe6\x86\x9b\x05\xaa\xe2\x02\xe3\x14\xf1\xd9\xab\x78\x9b\x78\x0f\xc3\x4d\xc2\x5d\x22\xbc\x15\xa7\x6d\x33\xbf\x78\xf7\xd4\xa3\x6b\xcc\xa5\xd5\x3e\x89\x83\xfc\xc9\xdd\x5f\x17\x67\x7c\x7c\xfe\x55\x7b\xf3\xe6\x0c\x3c\x3e\xfd\x22\xe3\x09\xff\x83\xc2\x7b\xbc\x7d\x0d\x37\x34\xc5\x40\x26\xda\x73\x88\xb5\x0a\x46\x9e\xe7\x72\x68\x4f\x17\xad\x4a\x09\xca\x9c\xa2\x88\x6f\x27\xd7\x50\x76\x4a\xab\x1e\x6f\x2d\xb2\x0c\x14\xaf\xe6\x73\x5c\xcc\x26\x1d\x47\xfe\x35\x21\x65\xcc\x20\x36\x2d\x7d\x38\xd5\x82\xc8\x42\x0b\x39\x15\xdf\x55\xde\x93\x8b\x9f\x29\x38\x92\xe0\xac\x9f\x18\x23\xac\xd6\x56\x99\x89\xfb\x74\xd1\xe2\x54\xa9\x6d\x33\x7a\x1b\x4b\xcf\xcc\x95\xf2\xf5\xf9\xe2\x74\x3d\x7f\x0a\x07\x1f\x70\xf9\x62\x27\xa3\xe4\x39\xe4\x97\xe1\x1e\x17\xb3\xe3\xec\x9f\x00\x00\x00\xff\xff\x8d\xba\x8d\xa8\xe6\x05\x00\x00") - -func unigram_tracerJsBytes() ([]byte, error) { - return bindataRead( - _unigram_tracerJs, - "unigram_tracer.js", - ) -} - -func unigram_tracerJs() (*asset, error) { - bytes, err := unigram_tracerJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "unigram_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2f, 0x36, 0x14, 0xc2, 0xf6, 0xc3, 0x80, 0x2b, 0x4a, 0x11, 0x7d, 0xd5, 0x3e, 0xef, 0x23, 0xb5, 0xd6, 0xe6, 0xe6, 0x5, 0x41, 0xf6, 0x14, 0x7a, 0x39, 0xf7, 0xf8, 0xac, 0x89, 0x8e, 0x43, 0xe6}} - 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_tracer.js": _4byte_tracerJs, - - "bigram_tracer.js": bigram_tracerJs, - - "call_tracer.js": call_tracerJs, - - "evmdis_tracer.js": evmdis_tracerJs, - - "noop_tracer.js": noop_tracerJs, - - "opcount_tracer.js": opcount_tracerJs, - - "prestate_tracer.js": prestate_tracerJs, - - "trigram_tracer.js": trigram_tracerJs, - - "unigram_tracer.js": unigram_tracerJs, -} - -// 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_tracer.js": {_4byte_tracerJs, map[string]*bintree{}}, - "bigram_tracer.js": {bigram_tracerJs, map[string]*bintree{}}, - "call_tracer.js": {call_tracerJs, map[string]*bintree{}}, - "evmdis_tracer.js": {evmdis_tracerJs, map[string]*bintree{}}, - "noop_tracer.js": {noop_tracerJs, map[string]*bintree{}}, - "opcount_tracer.js": {opcount_tracerJs, map[string]*bintree{}}, - "prestate_tracer.js": {prestate_tracerJs, map[string]*bintree{}}, - "trigram_tracer.js": {trigram_tracerJs, map[string]*bintree{}}, - "unigram_tracer.js": {unigram_tracerJs, 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/eth/tracers/internal/tracetest/calltrace_test.go b/eth/tracers/internal/tracetest/calltrace_test.go new file mode 100644 index 00000000..d2c50656 --- /dev/null +++ b/eth/tracers/internal/tracetest/calltrace_test.go @@ -0,0 +1,391 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracetest + +import ( + "encoding/json" + "math/big" + "os" + "path/filepath" + "reflect" + "strings" + "testing" + "unicode" + + "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/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/tests" + + // Force-load native and js packages, to trigger registration + _ "github.com/ethereum/go-ethereum/eth/tracers/js" + _ "github.com/ethereum/go-ethereum/eth/tracers/native" +) + +// To generate a new callTracer test, copy paste the makeTest method below into +// a Geth console and call it with a transaction hash you which to export. + +/* +// makeTest generates a callTracer test by running a prestate reassembled and a +// call trace run, assembling all the gathered information into a test case. +var makeTest = function(tx, rewind) { + // Generate the genesis block from the block, transaction and prestate data + var block = eth.getBlock(eth.getTransaction(tx).blockHash); + var genesis = eth.getBlock(block.parentHash); + + delete genesis.gasUsed; + delete genesis.logsBloom; + delete genesis.parentHash; + delete genesis.receiptsRoot; + delete genesis.sha3Uncles; + delete genesis.size; + delete genesis.transactions; + delete genesis.transactionsRoot; + delete genesis.uncles; + + genesis.gasLimit = genesis.gasLimit.toString(); + genesis.number = genesis.number.toString(); + genesis.timestamp = genesis.timestamp.toString(); + + genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer", rewind: rewind}); + for (var key in genesis.alloc) { + genesis.alloc[key].nonce = genesis.alloc[key].nonce.toString(); + } + genesis.config = admin.nodeInfo.protocols.eth.config; + + // Generate the call trace and produce the test input + var result = debug.traceTransaction(tx, {tracer: "callTracer", rewind: rewind}); + delete result.time; + + console.log(JSON.stringify({ + genesis: genesis, + context: { + number: block.number.toString(), + difficulty: block.difficulty, + timestamp: block.timestamp.toString(), + gasLimit: block.gasLimit.toString(), + miner: block.miner, + }, + input: eth.getRawTransaction(tx), + result: result, + }, null, 2)); +} +*/ + +type callContext struct { + Number math.HexOrDecimal64 `json:"number"` + Difficulty *math.HexOrDecimal256 `json:"difficulty"` + Time math.HexOrDecimal64 `json:"timestamp"` + GasLimit math.HexOrDecimal64 `json:"gasLimit"` + Miner common.Address `json:"miner"` +} + +// callTrace is the result of a callTracer run. +type callTrace struct { + Type string `json:"type"` + From common.Address `json:"from"` + To common.Address `json:"to"` + Input hexutil.Bytes `json:"input"` + Output hexutil.Bytes `json:"output"` + Gas *hexutil.Uint64 `json:"gas,omitempty"` + GasUsed *hexutil.Uint64 `json:"gasUsed,omitempty"` + Value *hexutil.Big `json:"value,omitempty"` + Error string `json:"error,omitempty"` + Calls []callTrace `json:"calls,omitempty"` +} + +// callTracerTest defines a single test to check the call tracer against. +type callTracerTest struct { + Genesis *core.Genesis `json:"genesis"` + Context *callContext `json:"context"` + Input string `json:"input"` + TracerConfig json.RawMessage `json:"tracerConfig"` + Result *callTrace `json:"result"` +} + +// Iterates over all the input-output datasets in the tracer test harness and +// runs the JavaScript tracers against them. +func TestCallTracerLegacy(t *testing.T) { + testCallTracer("callTracerLegacy", "call_tracer_legacy", t) +} + +func TestCallTracerNative(t *testing.T) { + testCallTracer("callTracer", "call_tracer", t) +} + +func testCallTracer(tracerName string, dirPath string, t *testing.T) { + files, err := os.ReadDir(filepath.Join("testdata", dirPath)) + if err != nil { + t.Fatalf("failed to retrieve tracer test suite: %v", err) + } + for _, file := range files { + if !strings.HasSuffix(file.Name(), ".json") { + continue + } + file := file // capture range variable + t.Run(camel(strings.TrimSuffix(file.Name(), ".json")), func(t *testing.T) { + t.Parallel() + + var ( + test = new(callTracerTest) + tx = new(types.Transaction) + ) + // Call tracer test found, read if from disk + if blob, err := os.ReadFile(filepath.Join("testdata", dirPath, file.Name())); err != nil { + t.Fatalf("failed to read testcase: %v", err) + } else if err := json.Unmarshal(blob, test); err != nil { + t.Fatalf("failed to parse testcase: %v", err) + } + if err := rlp.DecodeBytes(common.FromHex(test.Input), tx); err != nil { + t.Fatalf("failed to parse testcase input: %v", err) + } + // Configure a blockchain with the given prestate + var ( + signer = types.MakeSigner(test.Genesis.Config, new(big.Int).SetUint64(uint64(test.Context.Number))) + origin, _ = signer.Sender(tx) + txContext = vm.TxContext{ + Origin: origin, + GasPrice: tx.GasPrice(), + } + context = vm.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + Coinbase: test.Context.Miner, + BlockNumber: new(big.Int).SetUint64(uint64(test.Context.Number)), + Time: new(big.Int).SetUint64(uint64(test.Context.Time)), + Difficulty: (*big.Int)(test.Context.Difficulty), + GasLimit: uint64(test.Context.GasLimit), + } + _, statedb = tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc, false) + ) + tracer, err := tracers.New(tracerName, new(tracers.Context), test.TracerConfig) + if err != nil { + t.Fatalf("failed to create call tracer: %v", err) + } + evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer}) + msg, err := tx.AsMessage(signer, nil) + if err != nil { + t.Fatalf("failed to prepare transaction for tracing: %v", err) + } + st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + if _, err = st.TransitionDb(); err != nil { + t.Fatalf("failed to execute transaction: %v", err) + } + // Retrieve the trace result and compare against the etalon + res, err := tracer.GetResult() + if err != nil { + t.Fatalf("failed to retrieve trace result: %v", err) + } + ret := new(callTrace) + if err := json.Unmarshal(res, ret); err != nil { + t.Fatalf("failed to unmarshal trace result: %v", err) + } + + if !jsonEqual(ret, test.Result) { + // uncomment this for easier debugging + //have, _ := json.MarshalIndent(ret, "", " ") + //want, _ := json.MarshalIndent(test.Result, "", " ") + //t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want)) + t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result) + } + }) + } +} + +// jsonEqual is similar to reflect.DeepEqual, but does a 'bounce' via json prior to +// comparison +func jsonEqual(x, y interface{}) bool { + xTrace := new(callTrace) + yTrace := new(callTrace) + if xj, err := json.Marshal(x); err == nil { + json.Unmarshal(xj, xTrace) + } else { + return false + } + if yj, err := json.Marshal(y); err == nil { + json.Unmarshal(yj, yTrace) + } else { + return false + } + return reflect.DeepEqual(xTrace, yTrace) +} + +// camel converts a snake cased input string into a camel cased output. +func camel(str string) string { + pieces := strings.Split(str, "_") + for i := 1; i < len(pieces); i++ { + pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] + } + return strings.Join(pieces, "") +} +func BenchmarkTracers(b *testing.B) { + files, err := os.ReadDir(filepath.Join("testdata", "call_tracer")) + if err != nil { + b.Fatalf("failed to retrieve tracer test suite: %v", err) + } + for _, file := range files { + if !strings.HasSuffix(file.Name(), ".json") { + continue + } + file := file // capture range variable + b.Run(camel(strings.TrimSuffix(file.Name(), ".json")), func(b *testing.B) { + blob, err := os.ReadFile(filepath.Join("testdata", "call_tracer", file.Name())) + if err != nil { + b.Fatalf("failed to read testcase: %v", err) + } + test := new(callTracerTest) + if err := json.Unmarshal(blob, test); err != nil { + b.Fatalf("failed to parse testcase: %v", err) + } + benchTracer("callTracer", test, b) + }) + } +} + +func benchTracer(tracerName string, test *callTracerTest, b *testing.B) { + // Configure a blockchain with the given prestate + tx := new(types.Transaction) + if err := rlp.DecodeBytes(common.FromHex(test.Input), tx); err != nil { + b.Fatalf("failed to parse testcase input: %v", err) + } + signer := types.MakeSigner(test.Genesis.Config, new(big.Int).SetUint64(uint64(test.Context.Number))) + msg, err := tx.AsMessage(signer, nil) + if err != nil { + b.Fatalf("failed to prepare transaction for tracing: %v", err) + } + origin, _ := signer.Sender(tx) + txContext := vm.TxContext{ + Origin: origin, + GasPrice: tx.GasPrice(), + } + context := vm.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + Coinbase: test.Context.Miner, + BlockNumber: new(big.Int).SetUint64(uint64(test.Context.Number)), + Time: new(big.Int).SetUint64(uint64(test.Context.Time)), + Difficulty: (*big.Int)(test.Context.Difficulty), + GasLimit: uint64(test.Context.GasLimit), + } + _, statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc, false) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + tracer, err := tracers.New(tracerName, new(tracers.Context), nil) + if err != nil { + b.Fatalf("failed to create call tracer: %v", err) + } + evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer}) + snap := statedb.Snapshot() + st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + if _, err = st.TransitionDb(); err != nil { + b.Fatalf("failed to execute transaction: %v", err) + } + if _, err = tracer.GetResult(); err != nil { + b.Fatal(err) + } + statedb.RevertToSnapshot(snap) + } +} + +// TestZeroValueToNotExitCall tests the calltracer(s) on the following: +// Tx to A, A calls B with zero value. B does not already exist. +// Expected: that enter/exit is invoked and the inner call is shown in the result +func TestZeroValueToNotExitCall(t *testing.T) { + var to = common.HexToAddress("0x00000000000000000000000000000000deadbeef") + privkey, err := crypto.HexToECDSA("0000000000000000deadbeef00000000000000000000000000000000deadbeef") + if err != nil { + t.Fatalf("err %v", err) + } + signer := types.NewEIP155Signer(big.NewInt(1)) + tx, err := types.SignNewTx(privkey, signer, &types.LegacyTx{ + GasPrice: big.NewInt(0), + Gas: 50000, + To: &to, + }) + if err != nil { + t.Fatalf("err %v", err) + } + origin, _ := signer.Sender(tx) + txContext := vm.TxContext{ + Origin: origin, + GasPrice: big.NewInt(1), + } + context := vm.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + Coinbase: common.Address{}, + BlockNumber: new(big.Int).SetUint64(8000000), + Time: new(big.Int).SetUint64(5), + Difficulty: big.NewInt(0x30000), + GasLimit: uint64(6000000), + } + var code = []byte{ + byte(vm.PUSH1), 0x0, byte(vm.DUP1), byte(vm.DUP1), byte(vm.DUP1), // in and outs zero + byte(vm.DUP1), byte(vm.PUSH1), 0xff, byte(vm.GAS), // value=0,address=0xff, gas=GAS + byte(vm.CALL), + } + var alloc = core.GenesisAlloc{ + to: core.GenesisAccount{ + Nonce: 1, + Code: code, + }, + origin: core.GenesisAccount{ + Nonce: 0, + Balance: big.NewInt(500000000000000), + }, + } + _, statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc, false) + // Create the tracer, the EVM environment and run it + tracer, err := tracers.New("callTracer", nil, nil) + if err != nil { + t.Fatalf("failed to create call tracer: %v", err) + } + evm := vm.NewEVM(context, txContext, statedb, params.MainnetChainConfig, vm.Config{Debug: true, Tracer: tracer}) + msg, err := tx.AsMessage(signer, nil) + if err != nil { + t.Fatalf("failed to prepare transaction for tracing: %v", err) + } + st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + if _, err = st.TransitionDb(); err != nil { + t.Fatalf("failed to execute transaction: %v", err) + } + // Retrieve the trace result and compare against the etalon + res, err := tracer.GetResult() + if err != nil { + t.Fatalf("failed to retrieve trace result: %v", err) + } + have := new(callTrace) + if err := json.Unmarshal(res, have); err != nil { + t.Fatalf("failed to unmarshal trace result: %v", err) + } + wantStr := `{"type":"CALL","from":"0x682a80a6f560eec50d54e63cbeda1c324c5f8d1b","to":"0x00000000000000000000000000000000deadbeef","value":"0x0","gas":"0x7148","gasUsed":"0x2d0","input":"0x","output":"0x","calls":[{"type":"CALL","from":"0x00000000000000000000000000000000deadbeef","to":"0x00000000000000000000000000000000000000ff","value":"0x0","gas":"0x6cbf","gasUsed":"0x0","input":"0x","output":"0x"}]}` + want := new(callTrace) + json.Unmarshal([]byte(wantStr), want) + if !jsonEqual(have, want) { + t.Error("have != want") + } +} diff --git a/eth/tracers/testdata/call_tracer_create.json b/eth/tracers/internal/tracetest/testdata/call_tracer/create.json similarity index 100% rename from eth/tracers/testdata/call_tracer_create.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/create.json diff --git a/eth/tracers/testdata/call_tracer_deep_calls.json b/eth/tracers/internal/tracetest/testdata/call_tracer/deep_calls.json similarity index 100% rename from eth/tracers/testdata/call_tracer_deep_calls.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/deep_calls.json diff --git a/eth/tracers/testdata/call_tracer_delegatecall.json b/eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json similarity index 100% rename from eth/tracers/testdata/call_tracer_delegatecall.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/inner_create_oog_outer_throw.json b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_create_oog_outer_throw.json new file mode 100644 index 00000000..9395eb40 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_create_oog_outer_throw.json @@ -0,0 +1,77 @@ +{ + "context": { + "difficulty": "3451177886", + "gasLimit": "4709286", + "miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724", + "number": "2290744", + "timestamp": "1513616439" + }, + "genesis": { + "alloc": { + "0x1d3ddf7caf024f253487e18bc4a15b1a360c170a": { + "balance": "0x0", + "code": "0x606060405263ffffffff60e060020a6000350416633b91f50681146100505780635bb47808146100715780635f51fca01461008c578063bc7647a9146100ad578063f1bd0d7a146100c8575b610000565b346100005761006f600160a060020a03600435811690602435166100e9565b005b346100005761006f600160a060020a0360043516610152565b005b346100005761006f600160a060020a036004358116906024351661019c565b005b346100005761006f600160a060020a03600435166101fa565b005b346100005761006f600160a060020a0360043581169060243516610db8565b005b600160a060020a038083166000908152602081905260408120549091908116903316811461011657610000565b839150600160a060020a038316151561012d573392505b6101378284610e2e565b6101418284610db8565b61014a826101fa565b5b5b50505050565b600154600160a060020a03908116903316811461016e57610000565b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b5b5050565b600254600160a060020a0390811690331681146101b857610000565b600160a060020a038381166000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19169184169190911790555b5b505050565b6040805160e260020a631a481fc102815260016024820181905260026044830152606482015262093a8060848201819052600060a4830181905260c06004840152601e60c48401527f736574456e7469747953746174757328616464726573732c75696e743829000060e484015292519091600160a060020a038516916369207f049161010480820192879290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526000602482018190526001604483015260606004830152602360648301527f626567696e506f6c6c28616464726573732c75696e7436342c626f6f6c2c626f60848301527f6f6c29000000000000000000000000000000000000000000000000000000000060a48301529151600160a060020a038716935063de64e15c9260c48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc102815260016024820181905260026044830152606482015267ffffffffffffffff8416608482015260ff851660a482015260c06004820152601960c48201527f61646453746f636b28616464726573732c75696e74323536290000000000000060e48201529051600160a060020a03861692506369207f04916101048082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc102815260016024820181905260026044830152606482015267ffffffffffffffff8416608482015260ff851660a482015260c06004820152601960c48201527f697373756553746f636b2875696e74382c75696e74323536290000000000000060e48201529051600160a060020a03861692506369207f04916101048082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526002602482015260006044820181905260606004830152602160648301527f6772616e7453746f636b2875696e74382c75696e743235362c61646472657373608483015260f860020a60290260a48301529151600160a060020a038716935063de64e15c9260c48084019391929182900301818387803b156100005760325a03f115610000575050604080517f010555b8000000000000000000000000000000000000000000000000000000008152600160a060020a03338116602483015260006044830181905260606004840152603c60648401527f6772616e7456657374656453746f636b2875696e74382c75696e743235362c6160848401527f6464726573732c75696e7436342c75696e7436342c75696e743634290000000060a48401529251908716935063010555b89260c48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc102815260016024820181905260026044830152606482015267ffffffffffffffff8416608482015260ff851660a482015260c06004820152601260c48201527f626567696e53616c65286164647265737329000000000000000000000000000060e48201529051600160a060020a03861692506369207f04916101048082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526002602482015260006044820181905260606004830152601a60648301527f7472616e7366657253616c6546756e64732875696e743235362900000000000060848301529151600160a060020a038716935063de64e15c9260a48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc102815260016024820181905260026044830152606482015267ffffffffffffffff8416608482015260ff851660a482015260c06004820152602d60c48201527f7365744163636f756e74696e6753657474696e67732875696e743235362c756960e48201527f6e7436342c75696e7432353629000000000000000000000000000000000000006101048201529051600160a060020a03861692506369207f04916101248082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526002602482015260006044820181905260606004830152603460648301527f637265617465526563757272696e6752657761726428616464726573732c756960848301527f6e743235362c75696e7436342c737472696e672900000000000000000000000060a48301529151600160a060020a038716935063de64e15c9260c48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526002602482015260006044820181905260606004830152601b60648301527f72656d6f7665526563757272696e675265776172642875696e7429000000000060848301529151600160a060020a038716935063de64e15c9260a48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a63379938570281526002602482015260006044820181905260606004830152602360648301527f697373756552657761726428616464726573732c75696e743235362c7374726960848301527f6e6729000000000000000000000000000000000000000000000000000000000060a48301529151600160a060020a038716935063de64e15c9260c48084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a6337993857028152600160248201819052604482015260606004820152602260648201527f61737369676e53746f636b2875696e74382c616464726573732c75696e743235608482015260f060020a6136290260a48201529051600160a060020a038616925063de64e15c9160c48082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a6337993857028152600160248201819052604482015260606004820152602260648201527f72656d6f766553746f636b2875696e74382c616464726573732c75696e743235608482015260f060020a6136290260a48201529051600160a060020a038616925063de64e15c9160c48082019260009290919082900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc102815260026024808301919091526003604483015260006064830181905267ffffffffffffffff8616608484015260ff871660a484015260c0600484015260c48301919091527f7365744164647265737342796c617728737472696e672c616464726573732c6260e48301527f6f6f6c29000000000000000000000000000000000000000000000000000000006101048301529151600160a060020a03871693506369207f04926101248084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc1028152600260248201526003604482015260006064820181905267ffffffffffffffff8516608483015260ff861660a483015260c06004830152602160c48301527f73657453746174757342796c617728737472696e672c75696e74382c626f6f6c60e483015260f860020a6029026101048301529151600160a060020a03871693506369207f04926101248084019391929182900301818387803b156100005760325a03f1156100005750506040805160e260020a631a481fc1028152600260248201526003604482015260006064820181905267ffffffffffffffff8516608483015260ff861660a483015260c06004830152603860c48301527f736574566f74696e6742796c617728737472696e672c75696e743235362c756960e48301527f6e743235362c626f6f6c2c75696e7436342c75696e74382900000000000000006101048301529151600160a060020a03871693506369207f04926101248084019391929182900301818387803b156100005760325a03f115610000575050505b505050565b604080517f225553a4000000000000000000000000000000000000000000000000000000008152600160a060020a0383811660048301526002602483015291519184169163225553a49160448082019260009290919082900301818387803b156100005760325a03f115610000575050505b5050565b600082604051611fd280610f488339600160a060020a03909216910190815260405190819003602001906000f0801561000057905082600160a060020a03166308b027418260016040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b156100005760325a03f115610000575050604080517fa14e3ee300000000000000000000000000000000000000000000000000000000815260006004820181905260016024830152600160a060020a0386811660448401529251928716935063a14e3ee39260648084019382900301818387803b156100005760325a03f115610000575050505b5050505600606060405234620000005760405160208062001fd283398101604052515b805b600a8054600160a060020a031916600160a060020a0383161790555b506001600d819055600e81905560408051808201909152600c8082527f566f74696e672053746f636b00000000000000000000000000000000000000006020928301908152600b805460008290528251601860ff1990911617825590947f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9600291831615610100026000190190921604601f0193909304830192906200010c565b828001600101855582156200010c579182015b828111156200010c578251825591602001919060010190620000ef565b5b50620001309291505b808211156200012c576000815560010162000116565b5090565b50506040805180820190915260038082527f43565300000000000000000000000000000000000000000000000000000000006020928301908152600c805460008290528251600660ff1990911617825590937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c760026001841615610100026000190190931692909204601f010481019291620001f7565b82800160010185558215620001f7579182015b82811115620001f7578251825591602001919060010190620001da565b5b506200021b9291505b808211156200012c576000815560010162000116565b5090565b50505b505b611da280620002306000396000f3006060604052361561019a5763ffffffff60e060020a600035041662e1986d811461019f57806302a72a4c146101d657806306eb4e421461020157806306fdde0314610220578063095ea7b3146102ad578063158ccb99146102dd57806318160ddd146102f85780631cf65a781461031757806323b872dd146103365780632c71e60a1461036c57806333148fd6146103ca578063435ebc2c146103f55780635eeb6e451461041e578063600e85b71461043c5780636103d70b146104a157806362c1e46a146104b05780636c182e99146104ba578063706dc87c146104f057806370a082311461052557806377174f851461055057806395d89b411461056f578063a7771ee3146105fc578063a9059cbb14610629578063ab377daa14610659578063b25dbb5e14610685578063b89a73cb14610699578063ca5eb5e1146106c6578063cbcf2e5a146106e1578063d21f05ba1461070e578063d347c2051461072d578063d96831e114610765578063dd62ed3e14610777578063df3c211b146107a8578063e2982c21146107d6578063eb944e4c14610801575b610000565b34610000576101d4600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351661081f565b005b34610000576101ef600160a060020a0360043516610a30565b60408051918252519081900360200190f35b34610000576101ef610a4f565b60408051918252519081900360200190f35b346100005761022d610a55565b604080516020808252835181830152835191928392908301918501908083838215610273575b80518252602083111561027357601f199092019160209182019101610253565b505050905090810190601f16801561029f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576102c9600160a060020a0360043516602435610ae3565b604080519115158252519081900360200190f35b34610000576101d4600160a060020a0360043516610b4e565b005b34610000576101ef610b89565b60408051918252519081900360200190f35b34610000576101ef610b8f565b60408051918252519081900360200190f35b34610000576102c9600160a060020a0360043581169060243516604435610b95565b604080519115158252519081900360200190f35b3461000057610388600160a060020a0360043516602435610bb7565b60408051600160a060020a039096168652602086019490945267ffffffffffffffff928316858501529082166060850152166080830152519081900360a00190f35b34610000576101ef600160a060020a0360043516610c21565b60408051918252519081900360200190f35b3461000057610402610c40565b60408051600160a060020a039092168252519081900360200190f35b34610000576101d4600160a060020a0360043516602435610c4f565b005b3461000057610458600160a060020a0360043516602435610cc9565b60408051600160a060020a03909716875260208701959095528585019390935267ffffffffffffffff9182166060860152811660808501521660a0830152519081900360c00190f35b34610000576101d4610d9e565b005b6101d4610e1e565b005b34610000576104d3600160a060020a0360043516610e21565b6040805167ffffffffffffffff9092168252519081900360200190f35b3461000057610402600160a060020a0360043516610ead565b60408051600160a060020a039092168252519081900360200190f35b34610000576101ef600160a060020a0360043516610ef9565b60408051918252519081900360200190f35b34610000576101ef610f18565b60408051918252519081900360200190f35b346100005761022d610f1e565b604080516020808252835181830152835191928392908301918501908083838215610273575b80518252602083111561027357601f199092019160209182019101610253565b505050905090810190601f16801561029f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576102c9600160a060020a0360043516610fac565b604080519115158252519081900360200190f35b34610000576102c9600160a060020a0360043516602435610fc2565b604080519115158252519081900360200190f35b3461000057610402600435610fe2565b60408051600160a060020a039092168252519081900360200190f35b34610000576101d46004351515610ffd565b005b34610000576102c9600160a060020a036004351661104c565b604080519115158252519081900360200190f35b34610000576101d4600160a060020a0360043516611062565b005b34610000576102c9600160a060020a0360043516611070565b604080519115158252519081900360200190f35b34610000576101ef6110f4565b60408051918252519081900360200190f35b34610000576101ef600160a060020a036004351667ffffffffffffffff602435166110fa565b60408051918252519081900360200190f35b34610000576101d4600435611121565b005b34610000576101ef600160a060020a03600435811690602435166111c6565b60408051918252519081900360200190f35b34610000576101ef6004356024356044356064356084356111f3565b60408051918252519081900360200190f35b34610000576101ef600160a060020a036004351661128c565b60408051918252519081900360200190f35b34610000576101d4600160a060020a036004351660243561129e565b005b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff848116908416101561086457610000565b8367ffffffffffffffff168267ffffffffffffffff16101561088557610000565b8267ffffffffffffffff168267ffffffffffffffff1610156108a657610000565b506040805160a081018252600160a060020a033381168252602080830188905267ffffffffffffffff80871684860152858116606085015287166080840152908816600090815260039091529190912080546001810180835582818380158290116109615760030281600302836000526020600020918201910161096191905b8082111561095d578054600160a060020a031916815560006001820155600281018054600160c060020a0319169055600301610926565b5090565b5b505050916000526020600020906003020160005b5082518154600160a060020a031916600160a060020a03909116178155602083015160018201556040830151600290910180546060850151608086015167ffffffffffffffff1990921667ffffffffffffffff948516176fffffffffffffffff00000000000000001916604060020a918516919091021777ffffffffffffffff000000000000000000000000000000001916608060020a939091169290920291909117905550610a268686610fc2565b505b505050505050565b600160a060020a0381166000908152600360205260409020545b919050565b60055481565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600a5433600160a060020a03908116911614610b6957610000565b600a8054600160a060020a031916600160a060020a0383161790555b5b50565b60005481565b60005b90565b6000610ba2848484611600565b610bad8484846116e2565b90505b9392505050565b600360205281600052604060002081815481101561000057906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691604060020a8104821691608060020a9091041685565b600160a060020a0381166000908152600860205260409020545b919050565b600a54600160a060020a031681565b600a5433600160a060020a03908116911614610c6a57610000565b610c7660005482611714565b6000908155600160a060020a038316815260016020526040902054610c9b9082611714565b600160a060020a038316600090815260016020526040812091909155610cc390839083611600565b5b5b5050565b6000600060006000600060006000600360008a600160a060020a0316600160a060020a0316815260200190815260200160002088815481101561000057906000526020600020906003020160005b508054600182015460028301546040805160a081018252600160a060020a039094168085526020850184905267ffffffffffffffff808416928601839052604060020a8404811660608701819052608060020a9094041660808601819052909c50929a509197509095509350909150610d90904261172d565b94505b509295509295509295565b33600160a060020a038116600090815260066020526040902054801515610dc457610000565b8030600160a060020a0316311015610ddb57610000565b600160a060020a0382166000818152600660205260408082208290555183156108fc0291849190818181858888f193505050501515610cc357610000565b5b5050565b5b565b600160a060020a03811660009081526003602052604081205442915b81811015610ea557600160a060020a03841660009081526003602052604090208054610e9a9190839081101561000057906000526020600020906003020160005b5060020154604060020a900467ffffffffffffffff168461177d565b92505b600101610e3d565b5b5050919050565b600160a060020a0380821660009081526007602052604081205490911615610eef57600160a060020a0380831660009081526007602052604090205416610ef1565b815b90505b919050565b600160a060020a0381166000908152600160205260409020545b919050565b600d5481565b600c805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b505050505081565b60006000610fb983610c21565b1190505b919050565b6000610fcf338484611600565b610fd983836117ac565b90505b92915050565b600460205260009081526040902054600160a060020a031681565b8015801561101a575061100f33610ef9565b61101833610c21565b115b1561102457610000565b33600160a060020a03166000908152600960205260409020805460ff19168215151790555b50565b60006000610fb983610ef9565b1190505b919050565b610b8533826117dc565b5b50565b600a54604080516000602091820181905282517fcbcf2e5a000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263cbcf2e5a92602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b919050565b600e5481565b6000610fd961110984846118b2565b61111385856119b6565b611a05565b90505b92915050565b600a5433600160a060020a0390811691161461113c57610000565b61114860005482611a1f565b600055600554600190101561116c57600a5461116c90600160a060020a0316611a47565b5b600a54600160a060020a03166000908152600160205260409020546111929082611a1f565b600a8054600160a060020a039081166000908152600160205260408120939093559054610b8592911683611600565b5b5b50565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b6000600060008487101561120a5760009250611281565b8387111561121a57879250611281565b61123f6112308961122b888a611714565b611a90565b61123a8689611714565b611abc565b915081925061124e8883611714565b905061127e8361127961126a8461122b8c8b611714565b611a90565b61123a888b611714565b611abc565b611a1f565b92505b505095945050505050565b60066020526000908152604090205481565b600160a060020a03821660009081526003602052604081208054829190849081101561000057906000526020600020906003020160005b50805490925033600160a060020a039081169116146112f357610000565b6040805160a0810182528354600160a060020a0316815260018401546020820152600284015467ffffffffffffffff80821693830193909352604060020a810483166060830152608060020a900490911660808201526113539042611af9565b600160a060020a0385166000908152600360205260409020805491925090849081101561000057906000526020600020906003020160005b508054600160a060020a031916815560006001820181905560029091018054600160c060020a0319169055600160a060020a0385168152600360205260409020805460001981019081101561000057906000526020600020906003020160005b50600160a060020a03851660009081526003602052604090208054859081101561000057906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff948516178082558354604060020a908190048616026fffffffffffffffff000000000000000019909116178082559254608060020a9081900490941690930277ffffffffffffffff00000000000000000000000000000000199092169190911790915584166000908152600360205260409020805460001981018083559190829080158290116115485760030281600302836000526020600020918201910161154891905b8082111561095d578054600160a060020a031916815560006001820155600281018054600160c060020a0319169055600301610926565b5090565b5b505050600160a060020a033316600090815260016020526040902054611570915082611a1f565b600160a060020a03338116600090815260016020526040808220939093559086168152205461159f9082611714565b600160a060020a038086166000818152600160209081526040918290209490945580518581529051339093169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b50505050565b600160a060020a0383161561166e576116466008600061161f86610ead565b600160a060020a0316600160a060020a031681526020019081526020016000205482611714565b6008600061165386610ead565b600160a060020a031681526020810191909152604001600020555b600160a060020a038216156116dc576116b46008600061168d85610ead565b600160a060020a0316600160a060020a031681526020019081526020016000205482611a1f565b600860006116c185610ead565b600160a060020a031681526020810191909152604001600020555b5b505050565b600083826116f082426110fa565b8111156116fc57610000565b611707868686611b1b565b92505b5b50509392505050565b600061172283831115611b4d565b508082035b92915050565b6000610fd983602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166111f3565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156117a15781610fd9565b825b90505b92915050565b600033826117ba82426110fa565b8111156117c657610000565b6117d08585611b5d565b92505b5b505092915050565b6117e582610ef9565b6117ee83610c21565b11156117f957610000565b600160a060020a03811660009081526009602052604090205460ff16158015611834575081600160a060020a031681600160a060020a031614155b1561183e57610000565b61184782611070565b1561185157610000565b611864828261185f85610ef9565b611600565b600160a060020a0382811660009081526007602052604090208054600160a060020a031916918316918217905561189a82610ead565b600160a060020a031614610cc357610000565b5b5050565b600160a060020a038216600090815260036020526040812054815b818110156119885761197d836112796003600089600160a060020a0316600160a060020a0316815260200190815260200160002084815481101561000057906000526020600020906003020160005b506040805160a0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff80821692840192909252604060020a810482166060840152608060020a900416608082015287611af9565b611a1f565b92505b6001016118cd565b600160a060020a0385166000908152600160205260409020546117d09084611714565b92505b505092915050565b600060006119c384611070565b80156119d157506000600d54115b90506119fb816119e9576119e485610ef9565b6119ec565b60005b6111138686611b7b565b611a05565b91505b5092915050565b60008183106117a15781610fd9565b825b90505b92915050565b6000828201611a3c848210801590611a375750838210155b611b4d565b8091505b5092915050565b611a508161104c565b15611a5a57610b85565b6005805460009081526004602052604090208054600160a060020a031916600160a060020a038416179055805460010190555b50565b6000828202611a3c841580611a37575083858381156100005704145b611b4d565b8091505b5092915050565b60006000611acc60008411611b4d565b8284811561000057049050611a3c838581156100005706828502018514611b4d565b8091505b5092915050565b6000610fd98360200151611b0d858561172d565b611714565b90505b92915050565b60008382611b2982426110fa565b811115611b3557610000565b611707868686611b8f565b92505b5b50509392505050565b801515610b8557610000565b5b50565b6000611b6883611a47565b610fd98383611c92565b90505b92915050565b6000610fd983610ef9565b90505b92915050565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152812054909190611bd09084611a1f565b600160a060020a038086166000908152600160205260408082209390935590871681522054611bff9084611714565b600160a060020a038616600090815260016020526040902055611c228184611714565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3600191505b509392505050565b60003382611ca082426110fa565b811115611cac57610000565b6117d08585611cc2565b92505b5b505092915050565b600160a060020a033316600090815260016020526040812054611ce59083611714565b600160a060020a033381166000908152600160205260408082209390935590851681522054611d149083611a1f565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b929150505600a165627a7a72305820bfa5ddd3fecf3f43aed25385ec7ec3ef79638c2e58d99f85d9a3cc494183bf160029a165627a7a723058200e78a5f7e0f91739035d0fbf5eca02f79377210b722f63431f29a22e2880b3bd0029", + "nonce": "789", + "storage": { + "0xfe9ec0542a1c009be8b1f3acf43af97100ffff42eb736850fb038fa1151ad4d9": "0x000000000000000000000000e4a13bc304682a903e9472f469c33801dd18d9e8" + } + }, + "0x5cb4a6b902fcb21588c86c3517e797b07cdaadb9": { + "balance": "0x0", + "code": "0x", + "nonce": "0", + "storage": {} + }, + "0xe4a13bc304682a903e9472f469c33801dd18d9e8": { + "balance": "0x33c763c929f62c4f", + "code": "0x", + "nonce": "14", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3451177886", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4713874", + "hash": "0x5d52a672417cd1269bf4f7095e25dcbf837747bba908cd5ef809dc1bd06144b5", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0x01a12845ed546b94a038a7a03e8df8d7952024ed41ccb3db7a7ade4abc290ce1", + "nonce": "0x28c446f1cb9748c1", + "number": "2290743", + "stateRoot": "0x4898aceede76739daef76448a367d10015a2c022c9e7909b99a10fbf6fb16708", + "timestamp": "1513616414", + "totalDifficulty": "7146523769022564" + }, + "input": "0xf8aa0e8509502f9000830493e0941d3ddf7caf024f253487e18bc4a15b1a360c170a80b8443b91f506000000000000000000000000a14bdd7e5666d784dcce98ad24d383a6b1cd4182000000000000000000000000e4a13bc304682a903e9472f469c33801dd18d9e829a0524564944fa419f5c189b5074044f89210c6d6b2d77ee8f7f12a927d59b636dfa0015b28986807a424b18b186ee6642d76739df36cad802d20e8c00e79a61d7281", + "result": { + "calls": [ + { + "error": "contract creation code storage out of gas", + "from": "0x1d3ddf7caf024f253487e18bc4a15b1a360c170a", + "gas": "0x39ff0", + "gasUsed": "0x39ff0", + "input": "0x606060405234620000005760405160208062001fd283398101604052515b805b600a8054600160a060020a031916600160a060020a0383161790555b506001600d819055600e81905560408051808201909152600c8082527f566f74696e672053746f636b00000000000000000000000000000000000000006020928301908152600b805460008290528251601860ff1990911617825590947f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9600291831615610100026000190190921604601f0193909304830192906200010c565b828001600101855582156200010c579182015b828111156200010c578251825591602001919060010190620000ef565b5b50620001309291505b808211156200012c576000815560010162000116565b5090565b50506040805180820190915260038082527f43565300000000000000000000000000000000000000000000000000000000006020928301908152600c805460008290528251600660ff1990911617825590937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c760026001841615610100026000190190931692909204601f010481019291620001f7565b82800160010185558215620001f7579182015b82811115620001f7578251825591602001919060010190620001da565b5b506200021b9291505b808211156200012c576000815560010162000116565b5090565b50505b505b611da280620002306000396000f3006060604052361561019a5763ffffffff60e060020a600035041662e1986d811461019f57806302a72a4c146101d657806306eb4e421461020157806306fdde0314610220578063095ea7b3146102ad578063158ccb99146102dd57806318160ddd146102f85780631cf65a781461031757806323b872dd146103365780632c71e60a1461036c57806333148fd6146103ca578063435ebc2c146103f55780635eeb6e451461041e578063600e85b71461043c5780636103d70b146104a157806362c1e46a146104b05780636c182e99146104ba578063706dc87c146104f057806370a082311461052557806377174f851461055057806395d89b411461056f578063a7771ee3146105fc578063a9059cbb14610629578063ab377daa14610659578063b25dbb5e14610685578063b89a73cb14610699578063ca5eb5e1146106c6578063cbcf2e5a146106e1578063d21f05ba1461070e578063d347c2051461072d578063d96831e114610765578063dd62ed3e14610777578063df3c211b146107a8578063e2982c21146107d6578063eb944e4c14610801575b610000565b34610000576101d4600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351661081f565b005b34610000576101ef600160a060020a0360043516610a30565b60408051918252519081900360200190f35b34610000576101ef610a4f565b60408051918252519081900360200190f35b346100005761022d610a55565b604080516020808252835181830152835191928392908301918501908083838215610273575b80518252602083111561027357601f199092019160209182019101610253565b505050905090810190601f16801561029f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576102c9600160a060020a0360043516602435610ae3565b604080519115158252519081900360200190f35b34610000576101d4600160a060020a0360043516610b4e565b005b34610000576101ef610b89565b60408051918252519081900360200190f35b34610000576101ef610b8f565b60408051918252519081900360200190f35b34610000576102c9600160a060020a0360043581169060243516604435610b95565b604080519115158252519081900360200190f35b3461000057610388600160a060020a0360043516602435610bb7565b60408051600160a060020a039096168652602086019490945267ffffffffffffffff928316858501529082166060850152166080830152519081900360a00190f35b34610000576101ef600160a060020a0360043516610c21565b60408051918252519081900360200190f35b3461000057610402610c40565b60408051600160a060020a039092168252519081900360200190f35b34610000576101d4600160a060020a0360043516602435610c4f565b005b3461000057610458600160a060020a0360043516602435610cc9565b60408051600160a060020a03909716875260208701959095528585019390935267ffffffffffffffff9182166060860152811660808501521660a0830152519081900360c00190f35b34610000576101d4610d9e565b005b6101d4610e1e565b005b34610000576104d3600160a060020a0360043516610e21565b6040805167ffffffffffffffff9092168252519081900360200190f35b3461000057610402600160a060020a0360043516610ead565b60408051600160a060020a039092168252519081900360200190f35b34610000576101ef600160a060020a0360043516610ef9565b60408051918252519081900360200190f35b34610000576101ef610f18565b60408051918252519081900360200190f35b346100005761022d610f1e565b604080516020808252835181830152835191928392908301918501908083838215610273575b80518252602083111561027357601f199092019160209182019101610253565b505050905090810190601f16801561029f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34610000576102c9600160a060020a0360043516610fac565b604080519115158252519081900360200190f35b34610000576102c9600160a060020a0360043516602435610fc2565b604080519115158252519081900360200190f35b3461000057610402600435610fe2565b60408051600160a060020a039092168252519081900360200190f35b34610000576101d46004351515610ffd565b005b34610000576102c9600160a060020a036004351661104c565b604080519115158252519081900360200190f35b34610000576101d4600160a060020a0360043516611062565b005b34610000576102c9600160a060020a0360043516611070565b604080519115158252519081900360200190f35b34610000576101ef6110f4565b60408051918252519081900360200190f35b34610000576101ef600160a060020a036004351667ffffffffffffffff602435166110fa565b60408051918252519081900360200190f35b34610000576101d4600435611121565b005b34610000576101ef600160a060020a03600435811690602435166111c6565b60408051918252519081900360200190f35b34610000576101ef6004356024356044356064356084356111f3565b60408051918252519081900360200190f35b34610000576101ef600160a060020a036004351661128c565b60408051918252519081900360200190f35b34610000576101d4600160a060020a036004351660243561129e565b005b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff848116908416101561086457610000565b8367ffffffffffffffff168267ffffffffffffffff16101561088557610000565b8267ffffffffffffffff168267ffffffffffffffff1610156108a657610000565b506040805160a081018252600160a060020a033381168252602080830188905267ffffffffffffffff80871684860152858116606085015287166080840152908816600090815260039091529190912080546001810180835582818380158290116109615760030281600302836000526020600020918201910161096191905b8082111561095d578054600160a060020a031916815560006001820155600281018054600160c060020a0319169055600301610926565b5090565b5b505050916000526020600020906003020160005b5082518154600160a060020a031916600160a060020a03909116178155602083015160018201556040830151600290910180546060850151608086015167ffffffffffffffff1990921667ffffffffffffffff948516176fffffffffffffffff00000000000000001916604060020a918516919091021777ffffffffffffffff000000000000000000000000000000001916608060020a939091169290920291909117905550610a268686610fc2565b505b505050505050565b600160a060020a0381166000908152600360205260409020545b919050565b60055481565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600a5433600160a060020a03908116911614610b6957610000565b600a8054600160a060020a031916600160a060020a0383161790555b5b50565b60005481565b60005b90565b6000610ba2848484611600565b610bad8484846116e2565b90505b9392505050565b600360205281600052604060002081815481101561000057906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691604060020a8104821691608060020a9091041685565b600160a060020a0381166000908152600860205260409020545b919050565b600a54600160a060020a031681565b600a5433600160a060020a03908116911614610c6a57610000565b610c7660005482611714565b6000908155600160a060020a038316815260016020526040902054610c9b9082611714565b600160a060020a038316600090815260016020526040812091909155610cc390839083611600565b5b5b5050565b6000600060006000600060006000600360008a600160a060020a0316600160a060020a0316815260200190815260200160002088815481101561000057906000526020600020906003020160005b508054600182015460028301546040805160a081018252600160a060020a039094168085526020850184905267ffffffffffffffff808416928601839052604060020a8404811660608701819052608060020a9094041660808601819052909c50929a509197509095509350909150610d90904261172d565b94505b509295509295509295565b33600160a060020a038116600090815260066020526040902054801515610dc457610000565b8030600160a060020a0316311015610ddb57610000565b600160a060020a0382166000818152600660205260408082208290555183156108fc0291849190818181858888f193505050501515610cc357610000565b5b5050565b5b565b600160a060020a03811660009081526003602052604081205442915b81811015610ea557600160a060020a03841660009081526003602052604090208054610e9a9190839081101561000057906000526020600020906003020160005b5060020154604060020a900467ffffffffffffffff168461177d565b92505b600101610e3d565b5b5050919050565b600160a060020a0380821660009081526007602052604081205490911615610eef57600160a060020a0380831660009081526007602052604090205416610ef1565b815b90505b919050565b600160a060020a0381166000908152600160205260409020545b919050565b600d5481565b600c805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b505050505081565b60006000610fb983610c21565b1190505b919050565b6000610fcf338484611600565b610fd983836117ac565b90505b92915050565b600460205260009081526040902054600160a060020a031681565b8015801561101a575061100f33610ef9565b61101833610c21565b115b1561102457610000565b33600160a060020a03166000908152600960205260409020805460ff19168215151790555b50565b60006000610fb983610ef9565b1190505b919050565b610b8533826117dc565b5b50565b600a54604080516000602091820181905282517fcbcf2e5a000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263cbcf2e5a92602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b919050565b600e5481565b6000610fd961110984846118b2565b61111385856119b6565b611a05565b90505b92915050565b600a5433600160a060020a0390811691161461113c57610000565b61114860005482611a1f565b600055600554600190101561116c57600a5461116c90600160a060020a0316611a47565b5b600a54600160a060020a03166000908152600160205260409020546111929082611a1f565b600a8054600160a060020a039081166000908152600160205260408120939093559054610b8592911683611600565b5b5b50565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b6000600060008487101561120a5760009250611281565b8387111561121a57879250611281565b61123f6112308961122b888a611714565b611a90565b61123a8689611714565b611abc565b915081925061124e8883611714565b905061127e8361127961126a8461122b8c8b611714565b611a90565b61123a888b611714565b611abc565b611a1f565b92505b505095945050505050565b60066020526000908152604090205481565b600160a060020a03821660009081526003602052604081208054829190849081101561000057906000526020600020906003020160005b50805490925033600160a060020a039081169116146112f357610000565b6040805160a0810182528354600160a060020a0316815260018401546020820152600284015467ffffffffffffffff80821693830193909352604060020a810483166060830152608060020a900490911660808201526113539042611af9565b600160a060020a0385166000908152600360205260409020805491925090849081101561000057906000526020600020906003020160005b508054600160a060020a031916815560006001820181905560029091018054600160c060020a0319169055600160a060020a0385168152600360205260409020805460001981019081101561000057906000526020600020906003020160005b50600160a060020a03851660009081526003602052604090208054859081101561000057906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff948516178082558354604060020a908190048616026fffffffffffffffff000000000000000019909116178082559254608060020a9081900490941690930277ffffffffffffffff00000000000000000000000000000000199092169190911790915584166000908152600360205260409020805460001981018083559190829080158290116115485760030281600302836000526020600020918201910161154891905b8082111561095d578054600160a060020a031916815560006001820155600281018054600160c060020a0319169055600301610926565b5090565b5b505050600160a060020a033316600090815260016020526040902054611570915082611a1f565b600160a060020a03338116600090815260016020526040808220939093559086168152205461159f9082611714565b600160a060020a038086166000818152600160209081526040918290209490945580518581529051339093169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b50505050565b600160a060020a0383161561166e576116466008600061161f86610ead565b600160a060020a0316600160a060020a031681526020019081526020016000205482611714565b6008600061165386610ead565b600160a060020a031681526020810191909152604001600020555b600160a060020a038216156116dc576116b46008600061168d85610ead565b600160a060020a0316600160a060020a031681526020019081526020016000205482611a1f565b600860006116c185610ead565b600160a060020a031681526020810191909152604001600020555b5b505050565b600083826116f082426110fa565b8111156116fc57610000565b611707868686611b1b565b92505b5b50509392505050565b600061172283831115611b4d565b508082035b92915050565b6000610fd983602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166111f3565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156117a15781610fd9565b825b90505b92915050565b600033826117ba82426110fa565b8111156117c657610000565b6117d08585611b5d565b92505b5b505092915050565b6117e582610ef9565b6117ee83610c21565b11156117f957610000565b600160a060020a03811660009081526009602052604090205460ff16158015611834575081600160a060020a031681600160a060020a031614155b1561183e57610000565b61184782611070565b1561185157610000565b611864828261185f85610ef9565b611600565b600160a060020a0382811660009081526007602052604090208054600160a060020a031916918316918217905561189a82610ead565b600160a060020a031614610cc357610000565b5b5050565b600160a060020a038216600090815260036020526040812054815b818110156119885761197d836112796003600089600160a060020a0316600160a060020a0316815260200190815260200160002084815481101561000057906000526020600020906003020160005b506040805160a0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff80821692840192909252604060020a810482166060840152608060020a900416608082015287611af9565b611a1f565b92505b6001016118cd565b600160a060020a0385166000908152600160205260409020546117d09084611714565b92505b505092915050565b600060006119c384611070565b80156119d157506000600d54115b90506119fb816119e9576119e485610ef9565b6119ec565b60005b6111138686611b7b565b611a05565b91505b5092915050565b60008183106117a15781610fd9565b825b90505b92915050565b6000828201611a3c848210801590611a375750838210155b611b4d565b8091505b5092915050565b611a508161104c565b15611a5a57610b85565b6005805460009081526004602052604090208054600160a060020a031916600160a060020a038416179055805460010190555b50565b6000828202611a3c841580611a37575083858381156100005704145b611b4d565b8091505b5092915050565b60006000611acc60008411611b4d565b8284811561000057049050611a3c838581156100005706828502018514611b4d565b8091505b5092915050565b6000610fd98360200151611b0d858561172d565b611714565b90505b92915050565b60008382611b2982426110fa565b811115611b3557610000565b611707868686611b8f565b92505b5b50509392505050565b801515610b8557610000565b5b50565b6000611b6883611a47565b610fd98383611c92565b90505b92915050565b6000610fd983610ef9565b90505b92915050565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152812054909190611bd09084611a1f565b600160a060020a038086166000908152600160205260408082209390935590871681522054611bff9084611714565b600160a060020a038616600090815260016020526040902055611c228184611714565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3600191505b509392505050565b60003382611ca082426110fa565b811115611cac57610000565b6117d08585611cc2565b92505b5b505092915050565b600160a060020a033316600090815260016020526040812054611ce59083611714565b600160a060020a033381166000908152600160205260408082209390935590851681522054611d149083611a1f565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b929150505600a165627a7a72305820bfa5ddd3fecf3f43aed25385ec7ec3ef79638c2e58d99f85d9a3cc494183bf160029000000000000000000000000a14bdd7e5666d784dcce98ad24d383a6b1cd4182", + "type": "CREATE", + "value": "0x0" + } + ], + "error": "invalid jump destination", + "from": "0xe4a13bc304682a903e9472f469c33801dd18d9e8", + "gas": "0x435c8", + "gasUsed": "0x435c8", + "input": "0x3b91f506000000000000000000000000a14bdd7e5666d784dcce98ad24d383a6b1cd4182000000000000000000000000e4a13bc304682a903e9472f469c33801dd18d9e8", + "to": "0x1d3ddf7caf024f253487e18bc4a15b1a360c170a", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/inner_instafail.json b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_instafail.json new file mode 100644 index 00000000..6e221b3c --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_instafail.json @@ -0,0 +1,63 @@ +{ + "genesis": { + "difficulty": "117067574", + "extraData": "0xd783010502846765746887676f312e372e33856c696e7578", + "gasLimit": "4712380", + "hash": "0xe05db05eeb3f288041ecb10a787df121c0ed69499355716e17c307de313a4486", + "miner": "0x0c062b329265c965deef1eede55183b3acb8f611", + "mixHash": "0xb669ae39118a53d2c65fd3b1e1d3850dd3f8c6842030698ed846a2762d68b61d", + "nonce": "0x2b469722b8e28c45", + "number": "24973", + "stateRoot": "0x532a5c3f75453a696428db078e32ae283c85cb97e4d8560dbdf022adac6df369", + "timestamp": "1479891145", + "totalDifficulty": "1892250259406", + "alloc": { + "0x6c06b16512b332e6cd8293a2974872674716ce18": { + "balance": "0x0", + "nonce": "1", + "code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e1a7d4d146036575b6000565b34600057604e60048080359060200190919050506050565b005b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051809050600060405180830381858888f19350505050505b5056", + "storage": {} + }, + "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31": { + "balance": "0x229ebbb36c3e0f20", + "nonce": "3", + "code": "0x", + "storage": {} + } + }, + "config": { + "chainId": 3, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "byzantiumBlock": 1700000, + "constantinopleBlock": 4230000, + "petersburgBlock": 4939394, + "istanbulBlock": 6485846, + "muirGlacierBlock": 7117117, + "ethash": {} + } + }, + "context": { + "number": "24974", + "difficulty": "117067574", + "timestamp": "1479891162", + "gasLimit": "4712388", + "miner": "0xc822ef32e6d26e170b70cf761e204c1806265914" + }, + "input": "0xf889038504a81557008301f97e946c06b16512b332e6cd8293a2974872674716ce1880a42e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b1600002aa0e2a6558040c5d72bc59f2fb62a38993a314c849cd22fb393018d2c5af3112095a01bdb6d7ba32263ccc2ecc880d38c49d9f0c5a72d8b7908e3122b31356d349745", + "result": { + "type": "CALL", + "from": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31", + "to": "0x6c06b16512b332e6cd8293a2974872674716ce18", + "value": "0x0", + "gas": "0x1a466", + "gasUsed": "0x1dc6", + "input": "0x2e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b160000", + "output": "0x", + "calls": [] + } +} diff --git a/eth/tracers/testdata/call_tracer_inner_throw_outer_revert.json b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_throw_outer_revert.json similarity index 99% rename from eth/tracers/testdata/call_tracer_inner_throw_outer_revert.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/inner_throw_outer_revert.json index edd80e5b..ec2ceb42 100644 --- a/eth/tracers/testdata/call_tracer_inner_throw_outer_revert.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/inner_throw_outer_revert.json @@ -59,7 +59,7 @@ "result": { "calls": [ { - "error": "invalid opcode 0xfe", + "error": "invalid opcode: INVALID", "from": "0x33056b5dcac09a9b4becad0e1dcf92c19bd0af76", "gas": "0x75fe3", "gasUsed": "0x75fe3", diff --git a/eth/tracers/testdata/call_tracer_oog.json b/eth/tracers/internal/tracetest/testdata/call_tracer/oog.json similarity index 100% rename from eth/tracers/testdata/call_tracer_oog.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/oog.json diff --git a/eth/tracers/testdata/call_tracer_revert.json b/eth/tracers/internal/tracetest/testdata/call_tracer/revert.json similarity index 100% rename from eth/tracers/testdata/call_tracer_revert.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/revert.json diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/revert_reason.json b/eth/tracers/internal/tracetest/testdata/call_tracer/revert_reason.json new file mode 100644 index 00000000..094b0446 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/revert_reason.json @@ -0,0 +1,64 @@ +{ + "context": { + "difficulty": "2", + "gasLimit": "8000000", + "miner": "0x0000000000000000000000000000000000000000", + "number": "3212651", + "timestamp": "1597246515" + }, + "genesis": { + "alloc": { + "0xf58833cf0c791881b494eb79d461e08a1f043f52": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063609ff1bd11610078578063609ff1bd146101af5780639e7b8d61146101cd578063a3ec138d14610211578063e2ba53f0146102ae576100a5565b80630121b93f146100aa578063013cf08b146100d85780632e4176cf146101215780635c19a95c1461016b575b600080fd5b6100d6600480360360208110156100c057600080fd5b81019080803590602001909291905050506102cc565b005b610104600480360360208110156100ee57600080fd5b8101908080359060200190929190505050610469565b604051808381526020018281526020019250505060405180910390f35b61012961049a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ad6004803603602081101561018157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104bf565b005b6101b76108db565b6040518082815260200191505060405180910390f35b61020f600480360360208110156101e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610952565b005b6102536004803603602081101561022757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b53565b60405180858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b6102b6610bb0565b6040518082815260200191505060405180910390f35b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561038a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f486173206e6f20726967687420746f20766f746500000000000000000000000081525060200191505060405180910390fd5b8060010160009054906101000a900460ff161561040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f416c726561647920766f7465642e00000000000000000000000000000000000081525060200191505060405180910390fd5b60018160010160006101000a81548160ff02191690831515021790555081816002018190555080600001546002838154811061044757fe5b9060005260206000209060020201600101600082825401925050819055505050565b6002818154811061047657fe5b90600052602060002090600202016000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff1615610587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f7520616c726561647920766f7465642e000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e000081525060200191505060405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107cc57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466f756e64206c6f6f7020696e2064656c65676174696f6e2e0000000000000081525060200191505060405180910390fd5b61062a565b60018160010160006101000a81548160ff021916908315150217905550818160010160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff16156108bf578160000154600282600201548154811061089c57fe5b9060005260206000209060020201600101600082825401925050819055506108d6565b816000015481600001600082825401925050819055505b505050565b6000806000905060008090505b60028054905081101561094d57816002828154811061090357fe5b9060005260206000209060020201600101541115610940576002818154811061092857fe5b90600052602060002090600202016001015491508092505b80806001019150506108e8565b505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180610bde6028913960400191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615610aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520766f74657220616c726561647920766f7465642e000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414610b0957600080fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905084565b60006002610bbc6108db565b81548110610bc657fe5b90600052602060002090600202016000015490509056fe4f6e6c79206368616972706572736f6e2063616e206769766520726967687420746f20766f74652ea26469706673582212201d282819f8f06fed792100d60a8b08809b081a34a1ecd225e83a4b41122165ed64736f6c63430006060033", + "nonce": "1", + "storage": { + "0x6200beec95762de01ce05f2a0e58ce3299dbb53c68c9f3254a242121223cdf58": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1": { + "balance": "0x57af9d6b3df812900", + "code": "0x", + "nonce": "6", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "IstanbulBlock":1561651, + "chainId": 5, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf888068449504f80832dc6c094f58833cf0c791881b494eb79d461e08a1f043f5280a45c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf12da0264664db3e71fae1dbdaf2f53954be149ad3b7ba8a5054b4d89c70febfacc8b1a0212e8398757963f419681839ae8c5a54b411e252473c82d93dda68405ca63294", + "result": { + "error": "execution reverted", + "from": "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "gas": "0x2d7308", + "gasUsed": "0x588", + "input": "0x5c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "to": "0xf58833cf0c791881b494eb79d461e08a1f043f52", + "type": "CALL", + "value": "0x0", + "output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e0000" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/selfdestruct.json b/eth/tracers/internal/tracetest/testdata/call_tracer/selfdestruct.json new file mode 100644 index 00000000..dd717906 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/selfdestruct.json @@ -0,0 +1,75 @@ +{ + "context": { + "difficulty": "3502894804", + "gasLimit": "4722976", + "miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724", + "number": "2289806", + "timestamp": "1513601314" + }, + "genesis": { + "alloc": { + "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { + "balance": "0x0", + "code": "0x", + "nonce": "22", + "storage": {} + }, + "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { + "balance": "0x4d87094125a369d9bd5", + "code": "0x61deadff", + "nonce": "1", + "storage": {} + }, + "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { + "balance": "0x1780d77678137ac1b775", + "code": "0x", + "nonce": "29072", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf88b8271908506fc23ac0083015f90943b873a919aa0512d5a0f09e6dcceaa4a6727fafe80a463e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c52aa0bdce0b59e8761854e857fe64015f06dd08a4fbb7624f6094893a79a72e6ad6bea01d9dde033cff7bb235a3163f348a6d7ab8d6b52bc0963a95b91612e40ca766a4", + "result": { + "calls": [ + { + "from": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "gas": "0x0", + "gasUsed": "0x0", + "input": "0x", + "to": "0x000000000000000000000000000000000000dEaD", + "type": "SELFDESTRUCT", + "value": "0x4d87094125a369d9bd5" + } + ], + "from": "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb", + "gas": "0x10738", + "gasUsed": "0x7533", + "input": "0x63e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c5", + "output": "0x", + "to": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/simple.json b/eth/tracers/internal/tracetest/testdata/call_tracer/simple.json new file mode 100644 index 00000000..08cb7b2d --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/simple.json @@ -0,0 +1,80 @@ +{ + "context": { + "difficulty": "3502894804", + "gasLimit": "4722976", + "miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724", + "number": "2289806", + "timestamp": "1513601314" + }, + "genesis": { + "alloc": { + "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { + "balance": "0x0", + "code": "0x", + "nonce": "22", + "storage": {} + }, + "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { + "balance": "0x4d87094125a369d9bd5", + "code": "0x606060405236156100935763ffffffff60e060020a60003504166311ee8382811461009c57806313af4035146100be5780631f5e8f4c146100ee57806324daddc5146101125780634921a91a1461013b57806363e4bff414610157578063764978f91461017f578063893d20e8146101a1578063ba40aaa1146101cd578063cebc9a82146101f4578063e177246e14610216575b61009a5b5b565b005b34156100a457fe5b6100ac61023d565b60408051918252519081900360200190f35b34156100c657fe5b6100da600160a060020a0360043516610244565b604080519115158252519081900360200190f35b34156100f657fe5b6100da610307565b604080519115158252519081900360200190f35b341561011a57fe5b6100da6004351515610318565b604080519115158252519081900360200190f35b6100da6103d6565b604080519115158252519081900360200190f35b6100da600160a060020a0360043516610420565b604080519115158252519081900360200190f35b341561018757fe5b6100ac61046c565b60408051918252519081900360200190f35b34156101a957fe5b6101b1610473565b60408051600160a060020a039092168252519081900360200190f35b34156101d557fe5b6100da600435610483565b604080519115158252519081900360200190f35b34156101fc57fe5b6100ac61050d565b60408051918252519081900360200190f35b341561021e57fe5b6100da600435610514565b604080519115158252519081900360200190f35b6003545b90565b60006000610250610473565b600160a060020a031633600160a060020a03161415156102705760006000fd5b600160a060020a03831615156102865760006000fd5b50600054600160a060020a0390811690831681146102fb57604051600160a060020a0380851691908316907ffcf23a92150d56e85e3a3d33b357493246e55783095eb6a733eb8439ffc752c890600090a360008054600160a060020a031916600160a060020a03851617905560019150610300565b600091505b5b50919050565b60005460a060020a900460ff165b90565b60006000610324610473565b600160a060020a031633600160a060020a03161415156103445760006000fd5b5060005460a060020a900460ff16801515831515146102fb576000546040805160a060020a90920460ff1615158252841515602083015280517fe6cd46a119083b86efc6884b970bfa30c1708f53ba57b86716f15b2f4551a9539281900390910190a16000805460a060020a60ff02191660a060020a8515150217905560019150610300565b600091505b5b50919050565b60006103e0610307565b801561040557506103ef610473565b600160a060020a031633600160a060020a031614155b156104105760006000fd5b610419336105a0565b90505b5b90565b600061042a610307565b801561044f5750610439610473565b600160a060020a031633600160a060020a031614155b1561045a5760006000fd5b610463826105a0565b90505b5b919050565b6001545b90565b600054600160a060020a03165b90565b6000600061048f610473565b600160a060020a031633600160a060020a03161415156104af5760006000fd5b506001548281146102fb57604080518281526020810185905281517f79a3746dde45672c9e8ab3644b8bb9c399a103da2dc94b56ba09777330a83509929181900390910190a160018381559150610300565b600091505b5b50919050565b6002545b90565b60006000610520610473565b600160a060020a031633600160a060020a03161415156105405760006000fd5b506002548281146102fb57604080518281526020810185905281517ff6991a728965fedd6e927fdf16bdad42d8995970b4b31b8a2bf88767516e2494929181900390910190a1600283905560019150610300565b600091505b5b50919050565b60006000426105ad61023d565b116102fb576105c46105bd61050d565b4201610652565b6105cc61046c565b604051909150600160a060020a038416908290600081818185876187965a03f1925050501561063d57604080518281529051600160a060020a038516917f9bca65ce52fdef8a470977b51f247a2295123a4807dfa9e502edf0d30722da3b919081900360200190a260019150610300565b6102fb42610652565b5b600091505b50919050565b60038190555b505600a165627a7a72305820f3c973c8b7ed1f62000b6701bd5b708469e19d0f1d73fde378a56c07fd0b19090029", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000001b436ba50d378d4bbc8660d312a13df6af6e89dfb", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000006f05b59d3b20000", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000003c", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b834" + } + }, + "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { + "balance": "0x1780d77678137ac1b775", + "code": "0x", + "nonce": "29072", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf88b8271908506fc23ac0083015f90943b873a919aa0512d5a0f09e6dcceaa4a6727fafe80a463e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c52aa0bdce0b59e8761854e857fe64015f06dd08a4fbb7624f6094893a79a72e6ad6bea01d9dde033cff7bb235a3163f348a6d7ab8d6b52bc0963a95b91612e40ca766a4", + "result": { + "calls": [ + { + "from": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "gas": "0x6d05", + "gasUsed": "0x0", + "input": "0x", + "to": "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5", + "type": "CALL", + "value": "0x6f05b59d3b20000" + } + ], + "from": "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb", + "gas": "0x10738", + "gasUsed": "0x3ef9", + "input": "0x63e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c5", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/simple_onlytop.json b/eth/tracers/internal/tracetest/testdata/call_tracer/simple_onlytop.json new file mode 100644 index 00000000..ac1fef44 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/simple_onlytop.json @@ -0,0 +1,72 @@ +{ + "context": { + "difficulty": "3502894804", + "gasLimit": "4722976", + "miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724", + "number": "2289806", + "timestamp": "1513601314" + }, + "genesis": { + "alloc": { + "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { + "balance": "0x0", + "code": "0x", + "nonce": "22", + "storage": {} + }, + "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { + "balance": "0x4d87094125a369d9bd5", + "code": "0x606060405236156100935763ffffffff60e060020a60003504166311ee8382811461009c57806313af4035146100be5780631f5e8f4c146100ee57806324daddc5146101125780634921a91a1461013b57806363e4bff414610157578063764978f91461017f578063893d20e8146101a1578063ba40aaa1146101cd578063cebc9a82146101f4578063e177246e14610216575b61009a5b5b565b005b34156100a457fe5b6100ac61023d565b60408051918252519081900360200190f35b34156100c657fe5b6100da600160a060020a0360043516610244565b604080519115158252519081900360200190f35b34156100f657fe5b6100da610307565b604080519115158252519081900360200190f35b341561011a57fe5b6100da6004351515610318565b604080519115158252519081900360200190f35b6100da6103d6565b604080519115158252519081900360200190f35b6100da600160a060020a0360043516610420565b604080519115158252519081900360200190f35b341561018757fe5b6100ac61046c565b60408051918252519081900360200190f35b34156101a957fe5b6101b1610473565b60408051600160a060020a039092168252519081900360200190f35b34156101d557fe5b6100da600435610483565b604080519115158252519081900360200190f35b34156101fc57fe5b6100ac61050d565b60408051918252519081900360200190f35b341561021e57fe5b6100da600435610514565b604080519115158252519081900360200190f35b6003545b90565b60006000610250610473565b600160a060020a031633600160a060020a03161415156102705760006000fd5b600160a060020a03831615156102865760006000fd5b50600054600160a060020a0390811690831681146102fb57604051600160a060020a0380851691908316907ffcf23a92150d56e85e3a3d33b357493246e55783095eb6a733eb8439ffc752c890600090a360008054600160a060020a031916600160a060020a03851617905560019150610300565b600091505b5b50919050565b60005460a060020a900460ff165b90565b60006000610324610473565b600160a060020a031633600160a060020a03161415156103445760006000fd5b5060005460a060020a900460ff16801515831515146102fb576000546040805160a060020a90920460ff1615158252841515602083015280517fe6cd46a119083b86efc6884b970bfa30c1708f53ba57b86716f15b2f4551a9539281900390910190a16000805460a060020a60ff02191660a060020a8515150217905560019150610300565b600091505b5b50919050565b60006103e0610307565b801561040557506103ef610473565b600160a060020a031633600160a060020a031614155b156104105760006000fd5b610419336105a0565b90505b5b90565b600061042a610307565b801561044f5750610439610473565b600160a060020a031633600160a060020a031614155b1561045a5760006000fd5b610463826105a0565b90505b5b919050565b6001545b90565b600054600160a060020a03165b90565b6000600061048f610473565b600160a060020a031633600160a060020a03161415156104af5760006000fd5b506001548281146102fb57604080518281526020810185905281517f79a3746dde45672c9e8ab3644b8bb9c399a103da2dc94b56ba09777330a83509929181900390910190a160018381559150610300565b600091505b5b50919050565b6002545b90565b60006000610520610473565b600160a060020a031633600160a060020a03161415156105405760006000fd5b506002548281146102fb57604080518281526020810185905281517ff6991a728965fedd6e927fdf16bdad42d8995970b4b31b8a2bf88767516e2494929181900390910190a1600283905560019150610300565b600091505b5b50919050565b60006000426105ad61023d565b116102fb576105c46105bd61050d565b4201610652565b6105cc61046c565b604051909150600160a060020a038416908290600081818185876187965a03f1925050501561063d57604080518281529051600160a060020a038516917f9bca65ce52fdef8a470977b51f247a2295123a4807dfa9e502edf0d30722da3b919081900360200190a260019150610300565b6102fb42610652565b5b600091505b50919050565b60038190555b505600a165627a7a72305820f3c973c8b7ed1f62000b6701bd5b708469e19d0f1d73fde378a56c07fd0b19090029", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000001b436ba50d378d4bbc8660d312a13df6af6e89dfb", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000006f05b59d3b20000", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000003c", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b834" + } + }, + "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { + "balance": "0x1780d77678137ac1b775", + "code": "0x", + "nonce": "29072", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf88b8271908506fc23ac0083015f90943b873a919aa0512d5a0f09e6dcceaa4a6727fafe80a463e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c52aa0bdce0b59e8761854e857fe64015f06dd08a4fbb7624f6094893a79a72e6ad6bea01d9dde033cff7bb235a3163f348a6d7ab8d6b52bc0963a95b91612e40ca766a4", + "tracerConfig": { + "onlyTopCall": true + }, + "result": { + "from": "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb", + "gas": "0x10738", + "gasUsed": "0x3ef9", + "input": "0x63e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c5", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/testdata/call_tracer_throw.json b/eth/tracers/internal/tracetest/testdata/call_tracer/throw.json similarity index 99% rename from eth/tracers/testdata/call_tracer_throw.json rename to eth/tracers/internal/tracetest/testdata/call_tracer/throw.json index d66f1ffa..09cf4497 100644 --- a/eth/tracers/testdata/call_tracer_throw.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/throw.json @@ -50,7 +50,7 @@ }, "input": "0xf88b8206668504a817c8008303d09094c212e03b9e060e36facad5fd8f4435412ca22e6b80a451a34eb8000000000000000000000000000000000000000000000027fad02094277c000029a0692a3b4e7b2842f8dd7832e712c21e09f451f416c8976d5b8d02e8c0c2b4bea9a07645e90fc421b63dd755767fd93d3c03b4ec0c4d8fafa059558d08cf11d59750", "result": { - "error": "evm: invalid jump destination", + "error": "invalid jump destination", "from": "0x70c9217d814985faef62b124420f8dfbddd96433", "gas": "0x37b38", "gasUsed": "0x37b38", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/create.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/create.json new file mode 100644 index 00000000..8699bf3e --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/create.json @@ -0,0 +1,58 @@ +{ + "context": { + "difficulty": "3755480783", + "gasLimit": "5401723", + "miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511", + "number": "2294702", + "timestamp": "1513676146" + }, + "genesis": { + "alloc": { + "0x13e4acefe6a6700604929946e70e6443e4e73447": { + "balance": "0xcf3e0938579f000", + "code": "0x", + "nonce": "9", + "storage": {} + }, + "0x7dc9c9730689ff0b0fd506c67db815f12d90a448": { + "balance": "0x0", + "code": "0x", + "nonce": "0", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3757315409", + "extraData": "0x566961425443", + "gasLimit": "5406414", + "hash": "0xae107f592eebdd9ff8d6ba00363676096e6afb0e1007a7d3d0af88173077378d", + "miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511", + "mixHash": "0xc927aa05a38bc3de864e95c33b3ae559d3f39c4ccd51cef6f113f9c50ba0caf1", + "nonce": "0x93363bbd2c95f410", + "number": "2294701", + "stateRoot": "0x6b6737d5bde8058990483e915866bd1578014baeff57bd5e4ed228a2bfad635c", + "timestamp": "1513676127", + "totalDifficulty": "7160808139332585" + }, + "input": "0xf907ef098504e3b29200830897be8080b9079c606060405260405160208061077c83398101604052808051906020019091905050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561007d57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006101000a81548160ff02191690831515021790555050610653806101296000396000f300606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029000000000000000000000000c65e620a3a55451316168d57e268f5702ef56a1129a01060f46676a5dff6f407f0f51eb6f37f5c8c54e238c70221e18e65fc29d3ea65a0557b01c50ff4ffaac8ed6e5d31237a4ecbac843ab1bfe8bb0165a0060df7c54f", + "result": { + "from": "0x13e4acefe6a6700604929946e70e6443e4e73447", + "gas": "0x5e106", + "gasUsed": "0x5e106", + "input": "0x606060405260405160208061077c83398101604052808051906020019091905050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561007d57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006101000a81548160ff02191690831515021790555050610653806101296000396000f300606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029000000000000000000000000c65e620a3a55451316168d57e268f5702ef56a11", + "output": "0x606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029", + "to": "0x7dc9c9730689ff0b0fd506c67db815f12d90a448", + "type": "CREATE", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/deep_calls.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/deep_calls.json new file mode 100644 index 00000000..0353d4cf --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/deep_calls.json @@ -0,0 +1,415 @@ +{ + "context": { + "difficulty": "117066904", + "gasLimit": "4712384", + "miner": "0x1977c248e1014cc103929dd7f154199c916e39ec", + "number": "25001", + "timestamp": "1479891545" + }, + "genesis": { + "alloc": { + "0x2a98c5f40bfa3dee83431103c535f6fae9a8ad38": { + "balance": "0x0", + "code": "0x606060405236156100825760e060020a600035046302d05d3f811461008a5780630accce061461009c5780631ab9075a146100c757806331ed274614610102578063645a3b7214610133578063772fdae314610155578063a7f4377914610180578063ae5f80801461019e578063c9bded21146101ea578063f905c15a14610231575b61023a610002565b61023c600054600160a060020a031681565b61023a600435602435604435606435608435600254600160a060020a03166000141561024657610002565b61023a600435600254600160a060020a03166000148015906100f8575060025433600160a060020a03908116911614155b156102f457610002565b61023a60043560243560443560643560843560a43560c435600254600160a060020a03166000141561031657610002565b61023a600435602435600254600160a060020a0316600014156103d057610002565b61023a600435602435604435606435608435600254600160a060020a03166000141561046157610002565b61023a60025433600160a060020a0390811691161461051657610002565b61023a6004356024356044356060828152600160a060020a0382169060ff8516907fa6c2f0913db6f79ff0a4365762c61718973b3413d6e40382e704782a9a5099f690602090a3505050565b61023a600435602435600160a060020a038116606090815260ff8316907fee6348a7ec70f74e3d6cba55a53e9f9110d180d7698e9117fc466ae29a43e34790602090a25050565b61023c60035481565b005b6060908152602090f35b60025460e060020a6313bc6d4b02606090815233600160a060020a0390811660645291909116906313bc6d4b906084906020906024816000876161da5a03f115610002575050604051511515905061029d57610002565b60408051858152602081018390528151600160a060020a03858116939087169260ff8a16927f5a690ecd0cb15c1c1fd6b6f8a32df0d4f56cb41a54fea7e94020f013595de796929181900390910190a45050505050565b6002805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b60025460e060020a6313bc6d4b02606090815233600160a060020a0390811660645291909116906313bc6d4b906084906020906024816000876161da5a03f115610002575050604051511515905061036d57610002565b6040805186815260208101869052808201859052606081018490529051600160a060020a03831691889160ff8b16917fd65d9ddafbad8824e2bbd6f56cc9f4ac27ba60737035c10a321ea2f681c94d47919081900360800190a450505050505050565b60025460e060020a6313bc6d4b02606090815233600160a060020a0390811660645291909116906313bc6d4b906084906020906024816000876161da5a03f115610002575050604051511515905061042757610002565b60408051828152905183917fa9c6cbc4bd352a6940479f6d802a1001550581858b310d7f68f7bea51218cda6919081900360200190a25050565b60025460e060020a6313bc6d4b02606090815233600160a060020a0390811660645291909116906313bc6d4b906084906020906024816000876161da5a03f11561000257505060405151151590506104b857610002565b80600160a060020a031684600160a060020a03168660ff167f69bdaf789251e1d3a0151259c0c715315496a7404bce9fd0b714674685c2cab78686604051808381526020018281526020019250505060405180910390a45050505050565b600254600160a060020a0316ff", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396" + } + }, + "0x2cccf5e0538493c235d1c5ef6580f77d99e91396": { + "balance": "0x0", + "code": "0x606060405236156100775760e060020a600035046302d05d3f811461007f57806313bc6d4b146100915780633688a877146100b95780635188f9961461012f5780637eadc976146101545780638ad79680146101d3578063a43e04d814610238578063a7f437791461025e578063e16c7d981461027c575b61029f610002565b6102a1600054600160a060020a031681565b6102be600435600160a060020a03811660009081526002602052604090205460ff165b919050565b6102d26004356040805160208181018352600080835284815260038252835190849020805460026001821615610100026000190190911604601f8101849004840283018401909552848252929390929183018282801561037d5780601f106103525761010080835404028352916020019161037d565b61029f6004356024356000805433600160a060020a039081169116146104a957610002565b61034060043560008181526001602090815260408083205481517ff905c15a0000000000000000000000000000000000000000000000000000000081529151600160a060020a03909116928392839263f905c15a92600483810193919291829003018189876161da5a03f1156100025750506040515195945050505050565b60408051602060248035600481810135601f810185900485028601850190965285855261029f9581359591946044949293909201918190840183828082843750949650505050505050600054600160a060020a0390811633909116146104f657610002565b61029f6004355b600080548190600160a060020a0390811633909116146105a457610002565b61029f60005433600160a060020a0390811691161461072957610002565b6102a1600435600081815260016020526040902054600160a060020a03166100b4565b005b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b820191906000526020600020905b81548152906001019060200180831161036057829003601f168201915b505050505090506100b4565b506000828152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff191686179055600160a060020a038581168086526002909352818520805460ff191690941790935580517f1ab9075a0000000000000000000000000000000000000000000000000000000081523090931660048401525184939192631ab9075a926024828101939192829003018183876161da5a03f11561000257505060408051602081018690528082019290925243606083015260808083526003908301527f414444000000000000000000000000000000000000000000000000000000000060a0830152517f8ac68d4e97d65912f220b4c5f87978b8186320a5e378c1369850b5b5f90323d39181900360c00190a15b505050565b600083815260016020526040902054600160a060020a03838116911614156104d0576104a4565b600083815260016020526040812054600160a060020a031614610389576103898361023f565b600082815260036020908152604082208054845182855293839020919360026001831615610100026000190190921691909104601f90810184900483019391929186019083901061056a57805160ff19168380011785555b5061059a9291505b808211156105a05760008155600101610556565b8280016001018555821561054e579182015b8281111561054e57825182600050559160200191906001019061057c565b50505050565b5090565b600083815260016020526040812054600160a060020a031614156105c757610002565b50506000818152600160205260408082205481517fa7f437790000000000000000000000000000000000000000000000000000000081529151600160a060020a0391909116928392839263a7f4377992600483810193919291829003018183876161da5a03f11561000257505050600160005060008460001916815260200190815260200160002060006101000a815490600160a060020a0302191690556002600050600083600160a060020a0316815260200190815260200160002060006101000a81549060ff02191690557f8ac68d4e97d65912f220b4c5f87978b8186320a5e378c1369850b5b5f90323d383834360405180806020018560001916815260200184600160a060020a03168152602001838152602001828103825260038152602001807f44454c000000000000000000000000000000000000000000000000000000000081526020015060200194505050505060405180910390a1505050565b600054600160a060020a0316ff", + "nonce": "1", + "storage": { + "0x0684ac65a9fa32414dda56996f4183597d695987fdb82b145d722743891a6fe8": "0x0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "0x1cd76f78169a420d99346e3501dd3e541622c38a226f9b63e01cfebc69879dc7": "0x000000000000000000000000b4fe7aa695b326c9d219158d2ca50db77b39f99f", + "0x8e54a4494fe5da016bfc01363f4f6cdc91013bb5434bd2a4a3359f13a23afa2f": "0x000000000000000000000000cf00ffd997ad14939736f026006498e3f099baaf", + "0x94edf7f600ba56655fd65fca1f1424334ce369326c1dc3e53151dcd1ad06bc13": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xbbee47108b275f55f98482c6800f6372165e88b0330d3f5dae6419df4734366c": "0x0000000000000000000000002a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "0xd38c0c4e84de118cfdcc775130155d83b8bbaaf23dc7f3c83a626b10473213bd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xfb3aa5c655c2ec9d40609401f88d505d1da61afaa550e36ef5da0509ada257ba": "0x0000000000000000000000007986bad81f4cbd9317f5a46861437dae58d69113" + } + }, + "0x3e9286eafa2db8101246c2131c09b49080d00690": { + "balance": "0x0", + "code": "0x606060405236156100cf5760e060020a600035046302d05d3f81146100d7578063056d4470146100e957806316c66cc61461010c5780631ab9075a146101935780633ae1005c146101ce57806358541662146101fe5780635ed61af014610231578063644e3b791461025457806384dbac3b146102db578063949ae479146102fd5780639859387b14610321578063a7f4377914610340578063ab03fc261461035e578063e8161b7814610385578063e964d4e114610395578063f905c15a146103a5578063f92eb774146103ae575b6103be610002565b6103c0600054600160a060020a031681565b6103be6004356002546000908190600160a060020a031681141561040357610002565b6103dd60043560006108365b6040805160025460e360020a631c2d8fb30282527f636f6e747261637464620000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f1156100025750506040515191506104e29050565b6103be600435600254600160a060020a03166000148015906101c4575060025433600160a060020a03908116911614155b1561088d57610002565b6103be600435602435604435606435600254600090819081908190600160a060020a03168114156108af57610002565b6103c0600435602435604435606435608435600254600090819081908190600160a060020a03168114156110e857610002565b6103be6004356002546000908190600160a060020a03168114156115ec57610002565b6103c06004356000611b635b6040805160025460e360020a631c2d8fb30282527f6d61726b6574646200000000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f1156100025750506040515191506104e29050565b6103be600435602435600254600160a060020a031660001415611bb557610002565b6103be600435602435600254600090600160a060020a0316811415611d2e57610002565b6103be600435600254600160a060020a031660001415611fc657610002565b6103be60025433600160a060020a0390811691161461207e57610002565b6103be600435602435604435600254600090600160a060020a031681141561208c57610002565b6103dd60043560006124b8610260565b6103c0600435600061250a610118565b6103f160035481565b6103f16004356000612561610260565b005b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60408051918252519081900360200190f35b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061046557610002565b8291506104e55b6040805160025460e360020a631c2d8fb30282527f63706f6f6c00000000000000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f115610002575050604051519150505b90565b600160a060020a031663b2206e6d83600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517fb2206e6d0000000000000000000000000000000000000000000000000000000082526004820152600160a060020a038816602482015290516044808301935060209282900301816000876161da5a03f11561000257505060405151915061059b90506106ba565b600160a060020a031663d5b205ce83600160a060020a03166336da44686040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e160020a636ad902e7028252600160a060020a0390811660048301526024820187905288166044820152905160648281019350600092829003018183876161da5a03f115610002575050506107355b6040805160025460e360020a631c2d8fb30282527f6c6f676d6772000000000000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f1156100025750506040515191506104e29050565b50826120ee5b6040805160025460e360020a631c2d8fb30282527f6163636f756e7463746c0000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f1156100025750506040515191506104e29050565b600160a060020a0316630accce06600684600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e360020a6306db488d02825291519192899290916336da446891600482810192602092919082900301816000876161da5a03f1156100025750505060405180519060200150866040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f11561000257505050505050565b600160a060020a03166316c66cc6836040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f115610002575050604051519150505b919050565b6002805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061091157610002565b87935061091c610260565b600160a060020a031663bdbdb08685600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517fbdbdb0860000000000000000000000000000000000000000000000000000000082526004820152602481018a905290516044808301935060209282900301816000876161da5a03f1156100025750506040515193506109ca90506106ba565b600160a060020a03166381982a7a8885876040518460e060020a0281526004018084600160a060020a0316815260200183815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f11561000257505050610a3661046c565b600160a060020a03166308636bdb85600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517f08636bdb000000000000000000000000000000000000000000000000000000008252600482015260248101889052604481019290925251606482810192602092919082900301816000876161da5a03f11561000257505060408051805160e160020a630a5d50db028252600482018190529151919450600160a060020a03871692506314baa1b6916024828101926000929190829003018183876161da5a03f11561000257505050610b3561046c565b600160a060020a0316630a3b6ede85600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e160020a63051db76f0282526004820152600160a060020a038d16602482015290516044808301935060209282900301816000876161da5a03f115610002575050604051519150610bd590506106ba565b600160a060020a031663d5b205ce87838b6040518460e060020a0281526004018084600160a060020a0316815260200183815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f11561000257505050610c41610118565b600160a060020a031663988db79c888a6040518360e060020a0281526004018083600160a060020a0316815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050610ca5610260565b600160a060020a031663f4f2821b896040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f11561000257505050610d6f5b6040805160025460e360020a631c2d8fb30282527f747261646564620000000000000000000000000000000000000000000000000060048301529151600092600160a060020a03169163e16c7d98916024828101926020929190829003018187876161da5a03f1156100025750506040515191506104e29050565b600160a060020a0316635f539d69896040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f11561000257505050610dc2610639565b600160a060020a0316630accce06600386600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e360020a6315b1ea01028252915191928e928e9263ad8f500891600482810192602092919082900301816000876161da5a03f11561000257505050604051805190602001506040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f11561000257505050610ec5610639565b600160a060020a0316630accce06600386600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e360020a6315b1ea01028252915191928e928d9263ad8f500891600482810192602092919082900301816000876161da5a03f11561000257505050604051805190602001506040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f11561000257505050610fc8610639565b600160a060020a031663645a3b7285600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151905061101e610260565b600160a060020a031663f92eb77488600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e260020a633e4baddd028252600482015290516024828101935060209282900301816000876161da5a03f11561000257505060408051805160e060020a86028252600482019490945260248101939093525160448381019360009350829003018183876161da5a03f115610002575050505050505050505050565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061114a57610002565b604051600254600160a060020a0316908a908a908a908a908a90611579806125b38339018087600160a060020a0316815260200186600160a060020a03168152602001856000191681526020018481526020018381526020018281526020019650505050505050604051809103906000f092506111c5610118565b600160a060020a031663b9858a288a856040518360e060020a0281526004018083600160a060020a0316815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050611229610260565b600160a060020a0316635188f99689856040518360e060020a028152600401808360001916815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050611288610260565b600160a060020a031663bdbdb08689896040518360e060020a0281526004018083600019168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750506040515192506112e590506106ba565b600160a060020a03166346d88e7d8a858a6040518460e060020a0281526004018084600160a060020a0316815260200183600160a060020a0316815260200182815260200193505050506000604051808303816000876161da5a03f115610002575050506113516106ba565b600160a060020a03166381982a7a8a84866040518460e060020a0281526004018084600160a060020a0316815260200183815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f115610002575050506113bd61046c565b600160a060020a0316632b58469689856040518360e060020a028152600401808360001916815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f1156100025750505061141c61046c565b600160a060020a03166308636bdb8984866040518460e060020a028152600401808460001916815260200183815260200182600160a060020a0316815260200193505050506020604051808303816000876161da5a03f11561000257505060408051805160e160020a630a5d50db028252600482018190529151919350600160a060020a03861692506314baa1b6916024828101926000929190829003018183876161da5a03f115610002575050506114d3610639565b6040805160e160020a630566670302815260016004820152602481018b9052600160a060020a0386811660448301528c811660648301526000608483018190529251931692630accce069260a480840193919291829003018183876161da5a03f11561000257505050611544610639565b600160a060020a031663645a3b728961155b610260565b600160a060020a031663f92eb7748c6040518260e060020a02815260040180826000191681526020019150506020604051808303816000876161da5a03f11561000257505060408051805160e060020a86028252600482019490945260248101939093525160448084019360009350829003018183876161da5a03f1156100025750939a9950505050505050505050565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061164e57610002565b82915061165961046c565b600160a060020a0316630a3b6ede83600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e160020a63051db76f0282526004820152600160a060020a038816602482015290516044808301935060209282900301816000876161da5a03f1156100025750506040515191506116f990506106ba565b600160a060020a031663d5b205ce83600160a060020a03166336da44686040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e160020a636ad902e7028252600160a060020a0390811660048301526024820187905288166044820152905160648281019350600092829003018183876161da5a03f1156100025750505061179b6106ba565b600160a060020a031663d653078983600160a060020a03166336da44686040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517ff1ff78a0000000000000000000000000000000000000000000000000000000008252915191929163f1ff78a09160048181019260209290919082900301816000876161da5a03f1156100025750505060405180519060200150866040518460e060020a0281526004018084600160a060020a0316815260200183815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f1156100025750505061189f610260565b600160a060020a031663f4f2821b846040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f115610002575050506118f2610118565b600160a060020a031663f4f2821b846040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f11561000257505050611945610639565b600160a060020a0316630accce06600484600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e360020a6306db488d02825291519192899290916336da44689181870191602091908190038801816000876161da5a03f115610002575050506040518051906020015060006040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f11561000257505050611a48610639565b600160a060020a031663645a3b7283600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519050611a9e610260565b600160a060020a031663f92eb77486600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e260020a633e4baddd028252600482015290516024828101935060209282900301816000876161da5a03f11561000257505060408051805160e060020a86028252600482019490945260248101939093525160448381019360009350829003018183876161da5a03f11561000257505050505050565b600160a060020a03166381738c59836040518260e060020a02815260040180826000191681526020019150506020604051808303816000876161da5a03f1156100025750506040515191506108889050565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f1156100025750506040515115159050611c1757610002565b611c1f610260565b600160a060020a03166338a699a4836040518260e060020a02815260040180826000191681526020019150506020604051808303816000876161da5a03f11561000257505060405151159050611c7457610002565b611c7c610260565b600160a060020a0316632243118a836040518260e060020a02815260040180826000191681526020019150506000604051808303816000876161da5a03f11561000257505050611cca610639565b600160a060020a031663ae5f8080600184846040518460e060020a028152600401808481526020018360001916815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f115610002575050505050565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f1156100025750506040515115159050611d9057610002565b5081611d9a610260565b600160a060020a031663581d5d6084846040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505050611df5610639565b600160a060020a0316630accce06600283600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e160020a630566670302825260048201949094526024810193909352600160a060020a038816604484015260006064840181905260848401819052905160a4808501949293509091829003018183876161da5a03f11561000257505050611eab610639565b600160a060020a031663645a3b7282600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519050611f01610260565b600160a060020a031663f92eb77485600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e260020a633e4baddd028252600482015290516024828101935060209282900301816000876161da5a03f11561000257505060408051805160e060020a86028252600482019490945260248101939093525160448381019360009350829003018183876161da5a03f11561000257505050505050565b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061202857610002565b612030610118565b600160a060020a0316639859387b826040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f1156100025750505050565b600254600160a060020a0316ff5b6040805160025460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f11561000257505060405151151590506106b457610002565b600160a060020a031663d65307898383600160a060020a031663f1ff78a06040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517fd6530789000000000000000000000000000000000000000000000000000000008252600160a060020a039485166004830152602482015292891660448401525160648381019360009350829003018183876161da5a03f115610002575050506121a5610118565b600160a060020a031663f4f2821b856040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f115610002575050506121f8610cf4565b600160a060020a031663f4f2821b856040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f1156100025750505061224b610639565b600160a060020a0316630accce06600583600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e360020a6306db488d028252915191928a9290916336da446891600482810192602092919082900301816000876161da5a03f1156100025750505060405180519060200150886040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f1156100025750505080600160a060020a031663ea71b02d6040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151600160a060020a031660001490506124b25761239f610639565b600160a060020a0316630accce06600583600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750506040805180517fea71b02d000000000000000000000000000000000000000000000000000000008252915191928a92909163ea71b02d91600482810192602092919082900301816000876161da5a03f1156100025750505060405180519060200150886040518660e060020a028152600401808681526020018560001916815260200184600160a060020a0316815260200183600160a060020a03168152602001828152602001955050505050506000604051808303816000876161da5a03f115610002575050505b50505050565b600160a060020a03166338a699a4836040518260e060020a02815260040180826000191681526020019150506020604051808303816000876161da5a03f1156100025750506040515191506108889050565b600160a060020a031663213fe2b7836040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515191506108889050565b600160a060020a031663f92eb774836040518260e060020a02815260040180826000191681526020019150506020604051808303816000876161da5a03f115610002575050604051519150610888905056606060405260405160c08061157983396101206040819052825160805160a051935160e0516101005160008054600160a060020a03199081163317909155600180546005805484168817905560048a90556006869055600b8590556008849055909116861760a060020a60ff02191690554360038190556002558686526101408390526101608190529396929594919390929091600160a060020a033016917f76885d242fb71c6f74a7e717416e42eff4d96faf54f6de75c6a0a6bbd8890c6b91a230600160a060020a03167fa609f6bd4ad0b4f419ddad4ac9f0d02c2b9295c5e6891469055cf73c2b568fff600b600050546040518082815260200191505060405180910390a250505050505061145e8061011b6000396000f3606060405236156101745760e060020a600035046302d05d3f811461017c57806304a7fdbc1461018e5780630e90f957146101fb5780630fb5a6b41461021257806314baa1b61461021b57806317fc45e21461023a5780632b096926146102435780632e94420f1461025b578063325a19f11461026457806336da44681461026d5780633f81a2c01461027f5780633fc306821461029757806345ecd3d7146102d45780634665096d146102dd5780634e71d92d146102e657806351a34eb8146103085780636111bb951461032d5780636f265b93146103445780637e9014e11461034d57806390ba009114610360578063927df5e014610393578063a7f437791461046c578063ad8f50081461046e578063bc6d909414610477578063bdec3ad114610557578063c19d93fb1461059a578063c9503fe2146105ad578063e0a73a93146105b6578063ea71b02d146105bf578063ea8a1af0146105d1578063ee4a96f9146105f3578063f1ff78a01461065c575b61046c610002565b610665600054600160a060020a031681565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600554600090600160a060020a0390811633909116146106a857610002565b61068260015460a060020a900460ff166000145b90565b61069660085481565b61046c600435600154600160a060020a03166000141561072157610002565b610696600d5481565b610696600435600f8160068110156100025750015481565b61069660045481565b61069660035481565b610665600554600160a060020a031681565b61069660043560158160068110156100025750015481565b6106966004355b600b54600f5460009160028202808203928083039290810191018386101561078357601054840186900394505b50505050919050565b61069660025481565b61069660095481565b61046c600554600090600160a060020a03908116339091161461085857610002565b61046c600435600554600090600160a060020a03908116339091161461092e57610002565b6106826001805460a060020a900460ff161461020f565b610696600b5481565b61068260075460a060020a900460ff1681565b6106966004355b600b54601554600091600282028082039280830392908101910183861015610a6c5760165494506102cb565b61046c6004356024356044356040805160015460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b02600483015291516000928392600160a060020a03919091169163e16c7d9891602481810192602092909190829003018187876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610b4657610002565b005b610696600a5481565b61046c60006000600060006000600160009054906101000a9004600160a060020a0316600160a060020a031663e16c7d986040518160e060020a028152600401808060b260020a691858d8dbdd5b9d18dd1b0281526020015060200190506020604051808303816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610f1757610002565b61046c5b60015b60058160ff16101561071e57600f6001820160ff166006811015610002578101549060ff83166006811015610002570154101561129057610002565b61069660015460a060020a900460ff1681565b61069660065481565b610696600c5481565b610665600754600160a060020a031681565b61046c600554600090600160a060020a0390811633909116146112c857610002565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600154600090600160a060020a03168114156113fb57610002565b610696600e5481565b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60408051918252519081900360200190f35b5060005b60068160ff16101561070857828160ff166006811015610002576020020151600f60ff831660068110156100025701558160ff82166006811015610002576020020151601560ff831660068110156100025701556001016106ac565b61071061055b565b505050565b600e8054820190555b50565b6040805160015460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061071557610002565b83861015801561079257508286105b156107b457600f546010546011548689039082030291909104900394506102cb565b8286101580156107c55750600b5486105b156107e757600f546011546012548589039082030291909104900394506102cb565b600b5486108015906107f857508186105b1561081d57600b54600f546012546013549289039281039290920204900394506102cb565b81861015801561082c57508086105b1561084e57600f546013546014548489039082030291909104900394506102cb565b60145494506102cb565b60015460a060020a900460ff1660001461087157610002565b600254600a01431161088257610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663771d50e16040518160e060020a0281526004018090506000604051808303816000876161da5a03f1156100025750505050565b60015460a060020a900460ff1660001461094757610002565b600254600a01431161095857610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180517f51a34eb8000000000000000000000000000000000000000000000000000000008252600482018690529151919350600160a060020a03841692506351a34eb8916024808301926000929190829003018183876161da5a03f11561000257505050600b8290554360025560408051838152905130600160a060020a0316917fa609f6bd4ad0b4f419ddad4ac9f0d02c2b9295c5e6891469055cf73c2b568fff919081900360200190a25050565b838610158015610a7b57508286105b15610a9d576015546016546017548689039082900302919091040194506102cb565b828610158015610aae5750600b5486105b15610ad0576015546017546018548589039082900302919091040194506102cb565b600b548610801590610ae157508186105b15610b0657600b546015546018546019549289039281900392909202040194506102cb565b818610158015610b1557508086105b15610b3757601554601954601a548489039082900302919091040194506102cb565b601a54860181900394506102cb565b60015460a060020a900460ff16600014610b5f57610002565b6001805460a060020a60ff02191660a060020a17908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919450600160a060020a038516925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604080518051600a556005547ffebf661200000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015216602482015260448101879052905163febf661291606480820192600092909190829003018183876161da5a03f115610002575050508215610cc7576007805473ffffffffffffffffffffffffffffffffffffffff191633179055610dbb565b6040805160055460065460e060020a63599efa6b028352600160a060020a039182166004840152602483015291519184169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050604080516006547f56ccb6f000000000000000000000000000000000000000000000000000000000825233600160a060020a03166004830152602482015290516356ccb6f091604480820192600092909190829003018183876161da5a03f115610002575050600580546007805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a038416179091551633179055505b6007805460a060020a60ff02191660a060020a87810291909117918290556008544301600955900460ff1615610df757600a54610e039061029e565b600a54610e0b90610367565b600c55610e0f565b600c555b600c54670de0b6b3a7640000850204600d55600754600554604080517f759297bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015260448201879052519184169163759297bb91606481810192600092909190829003018183876161da5a03f11561000257505060408051600754600a54600d54600554600c5460a060020a850460ff161515865260208601929092528486019290925260608401529251600160a060020a0391821694509281169230909116917f3b3d1986083d191be01d28623dc19604728e29ae28bdb9ba52757fdee1a18de2919081900360800190a45050505050565b600954431015610f2657610002565b6001805460a060020a900460ff1614610f3e57610002565b6001805460a060020a60ff0219167402000000000000000000000000000000000000000017908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919750600160a060020a038816925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604051516007549095506000945060a060020a900460ff1615905061105c57600a5484111561105757600a54600d54670de0b6b3a7640000918603020492505b61107e565b600a5484101561107e57600a54600d54670de0b6b3a764000091869003020492505b60065483111561108e5760065492505b6006548390039150600083111561111857604080516005546007547f5928d37f000000000000000000000000000000000000000000000000000000008352600160a060020a0391821660048401528116602483015260448201869052915191871691635928d37f91606481810192600092909190829003018183876161da5a03f115610002575050505b600082111561117a576040805160055460e060020a63599efa6b028252600160a060020a0390811660048301526024820185905291519187169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050505b6040805185815260208101849052808201859052905130600160a060020a0316917f89e690b1d5aaae14f3e85f108dc92d9ab3763a58d45aed8b59daedbbae8fe794919081900360600190a260008311156112285784600160a060020a0316634cc927d785336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050611282565b84600160a060020a0316634cc927d7600a60005054336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f115610002575050505b600054600160a060020a0316ff5b60156001820160ff166006811015610002578101549060ff8316600681101561000257015411156112c057610002565b60010161055e565b60015460a060020a900460ff166000146112e157610002565b600254600a0143116112f257610002565b6001546040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f11561000257505060408051805160055460065460e060020a63599efa6b028452600160a060020a03918216600485015260248401529251909450918416925063599efa6b916044808301926000929190829003018183876161da5a03f1156100025750505080600160a060020a0316632b68bb2d6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050600054600160a060020a03169050ff5b6001546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602480830192602092919082900301816000876161da5a03f11561000257505060405151151590506106a85761000256", + "nonce": "16", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396" + } + }, + "0x70c9217d814985faef62b124420f8dfbddd96433": { + "balance": "0x4ef436dcbda6cd4a", + "code": "0x", + "nonce": "1634", + "storage": {} + }, + "0x7986bad81f4cbd9317f5a46861437dae58d69113": { + "balance": "0x0", + "code": "0x6060604052361561008d5760e060020a600035046302d05d3f811461009557806316c66cc6146100a75780631ab9075a146100d7578063213fe2b7146101125780639859387b1461013f578063988db79c1461015e578063a7f4377914610180578063b9858a281461019e578063c8e40fbf146101c0578063f4f2821b146101e8578063f905c15a14610209575b610212610002565b610214600054600160a060020a031681565b600160a060020a0360043581811660009081526005602052604081205461023193168114610257575060016101e3565b610212600435600254600160a060020a0316600014801590610108575060025433600160a060020a03908116911614155b1561025f57610002565b610214600435600160a060020a03811660009081526004602052604081205460ff16151561027557610002565b610212600435600254600160a060020a03166000141561029b57610002565b610212600435602435600254600160a060020a03166000141561050457610002565b61021260025433600160a060020a0390811691161461056757610002565b610212600435602435600254600160a060020a03166000141561057557610002565b610231600435600160a060020a03811660009081526004602052604090205460ff165b919050565b610212600435600254600090600160a060020a031681141561072057610002565b61024560035481565b005b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60408051918252519081900360200190f35b5060006101e3565b60028054600160a060020a031916821790555b50565b50600160a060020a038181166000908152600460205260409020546101009004166101e3565b6002546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602482810192602092919082900301816000876161da5a03f11561000257505060405151151590506102fe57610002565b600160a060020a03811660009081526004602052604090205460ff161515610272576040516104028061092e833901809050604051809103906000f06004600050600083600160a060020a0316815260200190815260200160002060005060000160016101000a815481600160a060020a030219169083021790555060016004600050600083600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff0219169083021790555050565b600160a060020a03821660009081526004602052604090205460ff1615156104725760405161040280610d30833901809050604051809103906000f06004600050600084600160a060020a0316815260200190815260200160002060005060000160016101000a815481600160a060020a030219169083021790555060016004600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff021916908302179055505b600160a060020a03828116600090815260046020819052604080518184205460e060020a630a3b0a4f02825286861693820193909352905161010090920490931692630a3b0a4f926024828101939192829003018183876161da5a03f11561000257505050600160a060020a03811660009081526006602052604090208054600160a060020a031916831790555b5050565b6002546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602482810192602092919082900301816000876161da5a03f11561000257505060405151151590506103b957610002565b600254600160a060020a0316ff5b6002546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602482810192602092919082900301816000876161da5a03f11561000257505060405151151590506105d857610002565b600160a060020a03821660009081526004602052604090205460ff1615156106915760405161040280611132833901809050604051809103906000f06004600050600084600160a060020a0316815260200190815260200160002060005060000160016101000a815481600160a060020a030219169083021790555060016004600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff021916908302179055505b600160a060020a03828116600090815260046020819052604080518184205460e060020a630a3b0a4f02825286861693820193909352905161010090920490931692630a3b0a4f926024828101939192829003018183876161da5a03f11561000257505050600160a060020a031660009081526005602052604090208054600160a060020a0319169091179055565b6002546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602482810192602092919082900301816000876161da5a03f115610002575050604051511515905061078357610002565b50600160a060020a0381811660009081526005602090815260408083205490931680835260049091529190205460ff161561080f576040600081812054825160e260020a632e72bafd028152600160a060020a03868116600483015293516101009092049093169263b9caebf4926024828101939192829003018183876161da5a03f115610002575050505b600160a060020a03828116600090815260056020526040812054909116146108545760406000908120600160a060020a0384169091528054600160a060020a03191690555b50600160a060020a0381811660009081526006602090815260408083205490931680835260049091529190205460ff16156108e657600160a060020a038181166000908152604080518183205460e260020a632e72bafd028252868516600483015291516101009092049093169263b9caebf4926024828101939192829003018183876161da5a03f115610002575050505b600160a060020a03828116600090815260066020526040812054909116146105005760406000908120600160a060020a0384169091528054600160a060020a0319169055505056606060405260008054600160a060020a031916331790556103de806100246000396000f3606060405236156100615760e060020a600035046302d05d3f81146100695780630a3b0a4f1461007b5780630d327fa7146100f6578063524d81d314610109578063a7f4377914610114578063b9caebf414610132578063bbec3bae14610296575b6102ce610002565b6102d0600054600160a060020a031681565b6102ce600435600254600090600160a060020a03168114156102ed5760028054600160a060020a03199081168417808355600160a060020a03808616855260036020526040852060018101805493831694909316939093179091559154815461010060a860020a031916921661010002919091179055610372565b6102d0600254600160a060020a03165b90565b6102e3600154610106565b6102ce60005433600160a060020a039081169116146103c657610002565b6102ce600435600160a060020a038116600090815260036020526040812054819060ff16801561016457506001548190115b1561029157506040808220600180820154915461010090819004600160a060020a039081168087528587209093018054600160a060020a031916948216948517905583865293909420805461010060a860020a03191694820294909417909355600254909190811690841614156101e85760028054600160a060020a031916821790555b600254600160a060020a0390811690841614156102105760028054600160a060020a03191690555b6003600050600084600160a060020a0316815260200190815260200160002060006000820160006101000a81549060ff02191690556000820160016101000a815490600160a060020a0302191690556001820160006101000a815490600160a060020a03021916905550506001600081815054809291906001900391905055505b505050565b600160a060020a036004358181166000908152600360205260408120600101546002546102d09491821691168114156103d4576103d8565b005b600160a060020a03166060908152602090f35b6060908152602090f35b60028054600160a060020a03908116835260036020526040808420805461010060a860020a0319808216610100808a029190911790935590829004841680875283872060019081018054600160a060020a03199081168b179091559654868a168952949097209687018054949095169390951692909217909255835416908202179091555b60016003600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff0219169083021790555060016000818150548092919060010191905055505050565b600054600160a060020a0316ff5b8091505b5091905056606060405260008054600160a060020a031916331790556103de806100246000396000f3606060405236156100615760e060020a600035046302d05d3f81146100695780630a3b0a4f1461007b5780630d327fa7146100f6578063524d81d314610109578063a7f4377914610114578063b9caebf414610132578063bbec3bae14610296575b6102ce610002565b6102d0600054600160a060020a031681565b6102ce600435600254600090600160a060020a03168114156102ed5760028054600160a060020a03199081168417808355600160a060020a03808616855260036020526040852060018101805493831694909316939093179091559154815461010060a860020a031916921661010002919091179055610372565b6102d0600254600160a060020a03165b90565b6102e3600154610106565b6102ce60005433600160a060020a039081169116146103c657610002565b6102ce600435600160a060020a038116600090815260036020526040812054819060ff16801561016457506001548190115b1561029157506040808220600180820154915461010090819004600160a060020a039081168087528587209093018054600160a060020a031916948216948517905583865293909420805461010060a860020a03191694820294909417909355600254909190811690841614156101e85760028054600160a060020a031916821790555b600254600160a060020a0390811690841614156102105760028054600160a060020a03191690555b6003600050600084600160a060020a0316815260200190815260200160002060006000820160006101000a81549060ff02191690556000820160016101000a815490600160a060020a0302191690556001820160006101000a815490600160a060020a03021916905550506001600081815054809291906001900391905055505b505050565b600160a060020a036004358181166000908152600360205260408120600101546002546102d09491821691168114156103d4576103d8565b005b600160a060020a03166060908152602090f35b6060908152602090f35b60028054600160a060020a03908116835260036020526040808420805461010060a860020a0319808216610100808a029190911790935590829004841680875283872060019081018054600160a060020a03199081168b179091559654868a168952949097209687018054949095169390951692909217909255835416908202179091555b60016003600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff0219169083021790555060016000818150548092919060010191905055505050565b600054600160a060020a0316ff5b8091505b5091905056606060405260008054600160a060020a031916331790556103de806100246000396000f3606060405236156100615760e060020a600035046302d05d3f81146100695780630a3b0a4f1461007b5780630d327fa7146100f6578063524d81d314610109578063a7f4377914610114578063b9caebf414610132578063bbec3bae14610296575b6102ce610002565b6102d0600054600160a060020a031681565b6102ce600435600254600090600160a060020a03168114156102ed5760028054600160a060020a03199081168417808355600160a060020a03808616855260036020526040852060018101805493831694909316939093179091559154815461010060a860020a031916921661010002919091179055610372565b6102d0600254600160a060020a03165b90565b6102e3600154610106565b6102ce60005433600160a060020a039081169116146103c657610002565b6102ce600435600160a060020a038116600090815260036020526040812054819060ff16801561016457506001548190115b1561029157506040808220600180820154915461010090819004600160a060020a039081168087528587209093018054600160a060020a031916948216948517905583865293909420805461010060a860020a03191694820294909417909355600254909190811690841614156101e85760028054600160a060020a031916821790555b600254600160a060020a0390811690841614156102105760028054600160a060020a03191690555b6003600050600084600160a060020a0316815260200190815260200160002060006000820160006101000a81549060ff02191690556000820160016101000a815490600160a060020a0302191690556001820160006101000a815490600160a060020a03021916905550506001600081815054809291906001900391905055505b505050565b600160a060020a036004358181166000908152600360205260408120600101546002546102d09491821691168114156103d4576103d8565b005b600160a060020a03166060908152602090f35b6060908152602090f35b60028054600160a060020a03908116835260036020526040808420805461010060a860020a0319808216610100808a029190911790935590829004841680875283872060019081018054600160a060020a03199081168b179091559654868a168952949097209687018054949095169390951692909217909255835416908202179091555b60016003600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff0219169083021790555060016000818150548092919060010191905055505050565b600054600160a060020a0316ff5b8091505b5091905056", + "nonce": "7", + "storage": { + "0xffc4df2d4f3d2cffad590bed6296406ab7926ca9e74784f74a95191fa069a174": "0x00000000000000000000000070c9217d814985faef62b124420f8dfbddd96433" + } + }, + "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f": { + "balance": "0x0", + "code": "0x606060405236156100ae5760e060020a600035046302d05d3f81146100b65780631ab9075a146100c85780632b68bb2d146101035780634cc927d7146101c557806351a34eb81461028e57806356ccb6f0146103545780635928d37f1461041d578063599efa6b146104e9578063759297bb146105b2578063771d50e11461067e578063a7f4377914610740578063f905c15a1461075e578063f92eb77414610767578063febf661214610836575b610902610002565b610904600054600160a060020a031681565b610902600435600254600160a060020a03166000148015906100f9575060025433600160a060020a03908116911614155b1561092057610002565b60025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b02606452610902916000918291600160a060020a03169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f115610002575050604051511515905061094257610002565b61090260043560243560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610a0d57610002565b61090260043560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610ae957610002565b61090260043560243560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610bbc57610002565b61090260043560243560443560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610c9657610002565b61090260043560243560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610de057610002565b61090260043560243560443560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610ebb57610002565b60025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b02606452610902916000918291600160a060020a03169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610f9e57610002565b61090260025433600160a060020a0390811691161461106957610002565b61090e60035481565b61090e60043560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750506040805180517ff92eb774000000000000000000000000000000000000000000000000000000008252600482018790529151919350600160a060020a038416925063f92eb774916024828101926020929190829003018188876161da5a03f11561000257505060405151949350505050565b61090260043560243560443560025460e360020a631c2d8fb302606090815260aa60020a6a18dbdb9d1c9858dd18dd1b026064526000918291600160a060020a039091169063e16c7d989060849060209060248187876161da5a03f1156100025750505060405180519060200150905080600160a060020a03166316c66cc6336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f115610002575050604051511515905061107757610002565b005b6060908152602090f35b60408051918252519081900360200190f35b6002805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b6040805160025460e360020a631c2d8fb302825260aa60020a6a18dbdb9d1c9858dd18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f5ed61af000000000000000000000000000000000000000000000000000000000825233600160a060020a039081166004840152925190959286169350635ed61af092602483810193919291829003018183876161da5a03f115610002575050505050565b6040805160025460e360020a631c2d8fb302825260aa60020a6a18dbdb9d1c9858dd18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517fab03fc2600000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015260248301899052808816604484015292519095928616935063ab03fc2692606483810193919291829003018183876161da5a03f1156100025750505050505050565b6040805160025460e360020a631c2d8fb302825260aa60020a6a18dbdb9d1c9858dd18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f949ae47900000000000000000000000000000000000000000000000000000000825233600160a060020a0390811660048401526024830188905292519095928616935063949ae47992604483810193919291829003018183876161da5a03f11561000257505050505050565b6040805160025460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f46d88e7d000000000000000000000000000000000000000000000000000000008252600160a060020a0380891660048401523381166024840152604483018890529251909592861693506346d88e7d92606483810193919291829003018183876161da5a03f1156100025750505050505050565b6040805160025460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f5315cdde00000000000000000000000000000000000000000000000000000000825233600160a060020a039081166004840152808a16602484015260448301889052925190959286169350635315cdde92606483810193919291829003018183876161da5a03f115610002575050604080517f5928d37f00000000000000000000000000000000000000000000000000000000815233600160a060020a03908116600483015287166024820152604481018690529051635928d37f91606481810192600092909190829003018183876161da5a03f115610002575050505050505050565b6040805160025460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517fe68e401c00000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015280891660248401526044830188905292519095928616935063e68e401c92606483810193919291829003018183876161da5a03f1156100025750505050505050565b6040805160025460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f5152f381000000000000000000000000000000000000000000000000000000008252600160a060020a03808a1660048401528089166024840152604483018890523381166064840152925190959286169350635152f38192608483810193919291829003018183876161da5a03f115610002575050505050505050565b6040805160025460e360020a631c2d8fb302825260aa60020a6a18dbdb9d1c9858dd18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f056d447000000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015292519095928616935063056d447092602483810193919291829003018183876161da5a03f115610002575050505050565b600254600160a060020a0316ff5b6040805160025460e360020a631c2d8fb302825260aa60020a6a18dbdb9d1c9858dd18dd1b0260048301529151600160a060020a03929092169163e16c7d9891602481810192602092909190829003018188876161da5a03f1156100025750506040805180517f3ae1005c00000000000000000000000000000000000000000000000000000000825233600160a060020a039081166004840152808a166024840152808916604484015260648301889052925190959286169350633ae1005c92608483810193919291829003018183876161da5a03f11561000257505050505050505056", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396" + } + }, + "0xc212e03b9e060e36facad5fd8f4435412ca22e6b": { + "balance": "0x0", + "code": "0x606060405236156101745760e060020a600035046302d05d3f811461017c57806304a7fdbc1461018e5780630e90f957146101fb5780630fb5a6b41461021257806314baa1b61461021b57806317fc45e21461023a5780632b096926146102435780632e94420f1461025b578063325a19f11461026457806336da44681461026d5780633f81a2c01461027f5780633fc306821461029757806345ecd3d7146102d45780634665096d146102dd5780634e71d92d146102e657806351a34eb8146103085780636111bb951461032d5780636f265b93146103445780637e9014e11461034d57806390ba009114610360578063927df5e014610393578063a7f437791461046c578063ad8f50081461046e578063bc6d909414610477578063bdec3ad114610557578063c19d93fb1461059a578063c9503fe2146105ad578063e0a73a93146105b6578063ea71b02d146105bf578063ea8a1af0146105d1578063ee4a96f9146105f3578063f1ff78a01461065c575b61046c610002565b610665600054600160a060020a031681565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600554600090600160a060020a0390811633909116146106a857610002565b61068260015460a060020a900460ff166000145b90565b61069660085481565b61046c600435600154600160a060020a03166000141561072157610002565b610696600d5481565b610696600435600f8160068110156100025750015481565b61069660045481565b61069660035481565b610665600554600160a060020a031681565b61069660043560158160068110156100025750015481565b6106966004355b600b54600f5460009160028202808203928083039290810191018386101561078357601054840186900394505b50505050919050565b61069660025481565b61069660095481565b61046c600554600090600160a060020a03908116339091161461085857610002565b61046c600435600554600090600160a060020a03908116339091161461092e57610002565b6106826001805460a060020a900460ff161461020f565b610696600b5481565b61068260075460a060020a900460ff1681565b6106966004355b600b54601554600091600282028082039280830392908101910183861015610a6c5760165494506102cb565b61046c6004356024356044356040805160015460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b02600483015291516000928392600160a060020a03919091169163e16c7d9891602481810192602092909190829003018187876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610b4657610002565b005b610696600a5481565b61046c60006000600060006000600160009054906101000a9004600160a060020a0316600160a060020a031663e16c7d986040518160e060020a028152600401808060b260020a691858d8dbdd5b9d18dd1b0281526020015060200190506020604051808303816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610f1757610002565b61046c5b60015b60058160ff16101561071e57600f6001820160ff166006811015610002578101549060ff83166006811015610002570154101561129057610002565b61069660015460a060020a900460ff1681565b61069660065481565b610696600c5481565b610665600754600160a060020a031681565b61046c600554600090600160a060020a0390811633909116146112c857610002565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600154600090600160a060020a03168114156113fb57610002565b610696600e5481565b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60408051918252519081900360200190f35b5060005b60068160ff16101561070857828160ff166006811015610002576020020151600f60ff831660068110156100025701558160ff82166006811015610002576020020151601560ff831660068110156100025701556001016106ac565b61071061055b565b505050565b600e8054820190555b50565b6040805160015460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061071557610002565b83861015801561079257508286105b156107b457600f546010546011548689039082030291909104900394506102cb565b8286101580156107c55750600b5486105b156107e757600f546011546012548589039082030291909104900394506102cb565b600b5486108015906107f857508186105b1561081d57600b54600f546012546013549289039281039290920204900394506102cb565b81861015801561082c57508086105b1561084e57600f546013546014548489039082030291909104900394506102cb565b60145494506102cb565b60015460a060020a900460ff1660001461087157610002565b600254600a01431161088257610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663771d50e16040518160e060020a0281526004018090506000604051808303816000876161da5a03f1156100025750505050565b60015460a060020a900460ff1660001461094757610002565b600254600a01431161095857610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180517f51a34eb8000000000000000000000000000000000000000000000000000000008252600482018690529151919350600160a060020a03841692506351a34eb8916024808301926000929190829003018183876161da5a03f11561000257505050600b8290554360025560408051838152905130600160a060020a0316917fa609f6bd4ad0b4f419ddad4ac9f0d02c2b9295c5e6891469055cf73c2b568fff919081900360200190a25050565b838610158015610a7b57508286105b15610a9d576015546016546017548689039082900302919091040194506102cb565b828610158015610aae5750600b5486105b15610ad0576015546017546018548589039082900302919091040194506102cb565b600b548610801590610ae157508186105b15610b0657600b546015546018546019549289039281900392909202040194506102cb565b818610158015610b1557508086105b15610b3757601554601954601a548489039082900302919091040194506102cb565b601a54860181900394506102cb565b60015460a060020a900460ff16600014610b5f57610002565b6001805460a060020a60ff02191660a060020a17908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919450600160a060020a038516925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604080518051600a556005547ffebf661200000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015216602482015260448101879052905163febf661291606480820192600092909190829003018183876161da5a03f115610002575050508215610cc7576007805473ffffffffffffffffffffffffffffffffffffffff191633179055610dbb565b6040805160055460065460e060020a63599efa6b028352600160a060020a039182166004840152602483015291519184169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050604080516006547f56ccb6f000000000000000000000000000000000000000000000000000000000825233600160a060020a03166004830152602482015290516356ccb6f091604480820192600092909190829003018183876161da5a03f115610002575050600580546007805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a038416179091551633179055505b6007805460a060020a60ff02191660a060020a87810291909117918290556008544301600955900460ff1615610df757600a54610e039061029e565b600a54610e0b90610367565b600c55610e0f565b600c555b600c54670de0b6b3a7640000850204600d55600754600554604080517f759297bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015260448201879052519184169163759297bb91606481810192600092909190829003018183876161da5a03f11561000257505060408051600754600a54600d54600554600c5460a060020a850460ff161515865260208601929092528486019290925260608401529251600160a060020a0391821694509281169230909116917f3b3d1986083d191be01d28623dc19604728e29ae28bdb9ba52757fdee1a18de2919081900360800190a45050505050565b600954431015610f2657610002565b6001805460a060020a900460ff1614610f3e57610002565b6001805460a060020a60ff0219167402000000000000000000000000000000000000000017908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919750600160a060020a038816925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604051516007549095506000945060a060020a900460ff1615905061105c57600a5484111561105757600a54600d54670de0b6b3a7640000918603020492505b61107e565b600a5484101561107e57600a54600d54670de0b6b3a764000091869003020492505b60065483111561108e5760065492505b6006548390039150600083111561111857604080516005546007547f5928d37f000000000000000000000000000000000000000000000000000000008352600160a060020a0391821660048401528116602483015260448201869052915191871691635928d37f91606481810192600092909190829003018183876161da5a03f115610002575050505b600082111561117a576040805160055460e060020a63599efa6b028252600160a060020a0390811660048301526024820185905291519187169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050505b6040805185815260208101849052808201859052905130600160a060020a0316917f89e690b1d5aaae14f3e85f108dc92d9ab3763a58d45aed8b59daedbbae8fe794919081900360600190a260008311156112285784600160a060020a0316634cc927d785336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050611282565b84600160a060020a0316634cc927d7600a60005054336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f115610002575050505b600054600160a060020a0316ff5b60156001820160ff166006811015610002578101549060ff8316600681101561000257015411156112c057610002565b60010161055e565b60015460a060020a900460ff166000146112e157610002565b600254600a0143116112f257610002565b6001546040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f11561000257505060408051805160055460065460e060020a63599efa6b028452600160a060020a03918216600485015260248401529251909450918416925063599efa6b916044808301926000929190829003018183876161da5a03f1156100025750505080600160a060020a0316632b68bb2d6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050600054600160a060020a03169050ff5b6001546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602480830192602092919082900301816000876161da5a03f11561000257505060405151151590506106a85761000256", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000006195", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5842545553440000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000070c9217d814985faef62b124420f8dfbddd96433", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000283c7b9181eca20000" + } + }, + "0xcf00ffd997ad14939736f026006498e3f099baaf": { + "balance": "0x0", + "code": "0x606060405236156100cf5760e060020a600035046302d05d3f81146100d7578063031e7f5d146100e95780631ab9075a1461010b5780632243118a1461014657806327aad68a1461016557806338a699a4146101da5780635188f996146101f8578063581d5d601461021e57806381738c5914610246578063977da54014610269578063a07421ce14610288578063a7f43779146102be578063bdbdb086146102dc578063e1c7111914610303578063f4f2821b14610325578063f905c15a1461034a578063f92eb77414610353575b610387610002565b610389600054600160a060020a031681565b610387600435602435600254600160a060020a0316600014156103a857610002565b610387600435600254600160a060020a031660001480159061013c575060025433600160a060020a03908116911614155b1561042957610002565b610387600435600254600160a060020a03166000141561044b57610002565b6102ac60043560008181526004602081815260408320547f524d81d3000000000000000000000000000000000000000000000000000000006060908152610100909104600160a060020a031692839263524d81d3926064928188876161da5a03f1156100025750506040515192506103819050565b61039c60043560008181526004602052604090205460ff165b919050565b6103876004356024356002546000908190600160a060020a031681141561079457610002565b61038760043560243560025460009081908190600160a060020a031681141561080457610002565b61038960043560008181526004602052604081205460ff1615156109e357610002565b610387600435600254600160a060020a0316600014156109fb57610002565b600435600090815260096020526040902054670de0b6b3a764000090810360243502045b60408051918252519081900360200190f35b61038760025433600160a060020a03908116911614610a9257610002565b600435600090815260086020526040902054670de0b6b3a7640000602435909102046102ac565b610387600435602435600254600160a060020a031660001415610aa057610002565b61038760043560025460009081908190600160a060020a0316811415610b3657610002565b6102ac60035481565b6102ac600435600081815260076020908152604080832054600690925290912054670de0b6b3a76400000204805b50919050565b005b600160a060020a03166060908152602090f35b15156060908152602090f35b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b906084906020906024816000876161da5a03f11561000257505060405151151590506103fe57610002565b60008281526004602052604090205460ff16151561041b57610002565b600860205260406000205550565b6002805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b906084906020906024816000876161da5a03f11561000257505060405151151590506104a157610002565b604080516000838152600460205291909120805460ff1916600117905561040280610de2833901809050604051809103906000f0600460005060008360001916815260200190815260200160002060005060000160016101000a815481600160a060020a030219169083021790555066470de4df8200006008600050600083600019168152602001908152602001600020600050819055506703782dace9d9000060096000506000836000191681526020019081526020016000206000508190555050565b600460005060008560001916815260200190815260200160002060005060000160019054906101000a9004600160a060020a0316915081600160a060020a031663524d81d36040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151821415905061060057838152600660209081526040808320839055600790915281208190555b81600160a060020a0316630a3b0a4f846040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f11561000257505050600160a060020a038316808252600560209081526040808420879055805160e160020a6364a81ff102815290518694670de0b6b3a7640000949363c9503fe29360048181019492939183900301908290876161da5a03f11561000257505060408051805160e060020a636f265b930282529151919291636f265b939160048181019260209290919082900301816000876161da5a03f11561000257505050604051805190602001500204600660005060008660001916815260200190815260200160002060008282825054019250508190555080600160a060020a031663c9503fe26040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050506040518051906020015060076000506000866000191681526020019081526020016000206000828282505401925050819055505b50505050565b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b9060849060209060248187876161da5a03f11561000257505060405151151590506107e957610002565b8381526004602052604081205460ff16151561056657610002565b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b9060849060209060248187876161da5a03f115610002575050604051511515905061085957610002565b849250670de0b6b3a764000083600160a060020a031663c9503fe26040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575060408051805160e160020a6364a81ff102825291519189028590049650600481810192602092909190829003018188876161da5a03f11561000257505060408051805160e060020a636f265b930282529151919291636f265b9391600481810192602092909190829003018189876161da5a03f115610002575050506040518051906020015002049050806006600050600085600160a060020a0316632e94420f6040518160e060020a0281526004018090506020604051808303816000876161da5a03f1156100025750604080518051855260208681528286208054989098039097557f2e94420f00000000000000000000000000000000000000000000000000000000815290518896600483810193919291829003018187876161da5a03f115610002575050604080515183526020939093525020805490910190555050505050565b60409020546101009004600160a060020a03166101f3565b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b906084906020906024816000876161da5a03f1156100025750506040515115159050610a5157610002565b60008181526004602052604090205460ff161515610a6e57610002565b6040600020805474ffffffffffffffffffffffffffffffffffffffffff1916905550565b600254600160a060020a0316ff5b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b906084906020906024816000876161da5a03f1156100025750506040515115159050610af657610002565b60008281526004602052604090205460ff161515610b1357610002565b670de0b6b3a7640000811115610b2857610002565b600960205260406000205550565b60025460e060020a6313bc6d4b02606090815233600160a060020a03908116606452909116906313bc6d4b9060849060209060248187876161da5a03f1156100025750506040515115159050610b8b57610002565b600160a060020a038416815260056020908152604080832054808452600490925282205490935060ff161515610bc057610002565b600460005060008460001916815260200190815260200160002060005060000160019054906101000a9004600160a060020a0316915081600160a060020a031663b9caebf4856040518260e060020a0281526004018082600160a060020a031681526020019150506000604051808303816000876161da5a03f115610002575050506005600050600085600160a060020a0316815260200190815260200160002060005060009055839050600082600160a060020a031663524d81d36040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519190911115905061078e57670de0b6b3a764000081600160a060020a031663c9503fe26040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060408051805160e060020a636f265b930282529151919291636f265b939160048181019260209290919082900301816000876161da5a03f11561000257505050604051805190602001500204600660005060008560001916815260200190815260200160002060008282825054039250508190555080600160a060020a031663c9503fe26040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050506040518051906020015060076000506000856000191681526020019081526020016000206000828282505403925050819055505050505056606060405260008054600160a060020a031916331790556103de806100246000396000f3606060405236156100615760e060020a600035046302d05d3f81146100695780630a3b0a4f1461007b5780630d327fa7146100f6578063524d81d314610109578063a7f4377914610114578063b9caebf414610132578063bbec3bae14610296575b6102ce610002565b6102d0600054600160a060020a031681565b6102ce600435600254600090600160a060020a03168114156102ed5760028054600160a060020a03199081168417808355600160a060020a03808616855260036020526040852060018101805493831694909316939093179091559154815461010060a860020a031916921661010002919091179055610372565b6102d0600254600160a060020a03165b90565b6102e3600154610106565b6102ce60005433600160a060020a039081169116146103c657610002565b6102ce600435600160a060020a038116600090815260036020526040812054819060ff16801561016457506001548190115b1561029157506040808220600180820154915461010090819004600160a060020a039081168087528587209093018054600160a060020a031916948216948517905583865293909420805461010060a860020a03191694820294909417909355600254909190811690841614156101e85760028054600160a060020a031916821790555b600254600160a060020a0390811690841614156102105760028054600160a060020a03191690555b6003600050600084600160a060020a0316815260200190815260200160002060006000820160006101000a81549060ff02191690556000820160016101000a815490600160a060020a0302191690556001820160006101000a815490600160a060020a03021916905550506001600081815054809291906001900391905055505b505050565b600160a060020a036004358181166000908152600360205260408120600101546002546102d09491821691168114156103d4576103d8565b005b600160a060020a03166060908152602090f35b6060908152602090f35b60028054600160a060020a03908116835260036020526040808420805461010060a860020a0319808216610100808a029190911790935590829004841680875283872060019081018054600160a060020a03199081168b179091559654868a168952949097209687018054949095169390951692909217909255835416908202179091555b60016003600050600084600160a060020a0316815260200190815260200160002060005060000160006101000a81548160ff0219169083021790555060016000818150548092919060010191905055505050565b600054600160a060020a0316ff5b8091505b5091905056", + "nonce": "3", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396", + "0x3571d73f14f31a1463bd0a2f92f7fde1653d4e1ead7aedf4b0a5df02f16092ab": "0x0000000000000000000000000000000000000000000007d634e4c55188be0000", + "0x4e64fe2d1b72d95a0a31945cc6e4f4e524ac5ad56d6bd44a85ec7bc9cc0462c0": "0x000000000000000000000000000000000000000000000002b5e3af16b1880000" + } + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "117124093", + "extraData": "0xd5830105008650617269747986312e31322e31826d61", + "gasLimit": "4707788", + "hash": "0xad325e4c49145fb7a4058a68ac741cc8607a71114e23fc88083c7e881dd653e7", + "miner": "0x00714b9ac97fd6bd9325a059a70c9b9fa94ce050", + "mixHash": "0x0af918f65cb4af04b608fc1f14a849707696986a0e7049e97ef3981808bcc65f", + "nonce": "0x38dee147326a8d40", + "number": "25000", + "stateRoot": "0xc5d6bbcd46236fcdcc80b332ffaaa5476b980b01608f9708408cfef01b58bd5b", + "timestamp": "1479891517", + "totalDifficulty": "1895410389427" + }, + "input": "0xf88b8206628504a817c8008303d09094c212e03b9e060e36facad5fd8f4435412ca22e6b80a451a34eb80000000000000000000000000000000000000000000000280faf689c35ac00002aa0a7ee5b7877811bf671d121b40569462e722657044808dc1d6c4f1e4233ec145ba0417e7543d52b65738d9df419cbe40a708424f4d54b0fc145c0a64545a2bb1065", + "result": { + "calls": [ + { + "from": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "gas": "0x31217", + "gasUsed": "0x334", + "input": "0xe16c7d98636f6e7472616374617069000000000000000000000000000000000000000000", + "output": "0x000000000000000000000000b4fe7aa695b326c9d219158d2ca50db77b39f99f", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f", + "gas": "0x2a68d", + "gasUsed": "0x334", + "input": "0xe16c7d98636f6e747261637463746c000000000000000000000000000000000000000000", + "output": "0x0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x23ac9", + "gasUsed": "0x334", + "input": "0xe16c7d98636f6e7472616374646200000000000000000000000000000000000000000000", + "output": "0x0000000000000000000000007986bad81f4cbd9317f5a46861437dae58d69113", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x23366", + "gasUsed": "0x273", + "input": "0x16c66cc6000000000000000000000000c212e03b9e060e36facad5fd8f4435412ca22e6b", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x7986bad81f4cbd9317f5a46861437dae58d69113", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f", + "gas": "0x29f35", + "gasUsed": "0xf8d", + "input": "0x16c66cc6000000000000000000000000c212e03b9e060e36facad5fd8f4435412ca22e6b", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f", + "gas": "0x28a9e", + "gasUsed": "0x334", + "input": "0xe16c7d98636f6e747261637463746c000000000000000000000000000000000000000000", + "output": "0x0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x21d79", + "gasUsed": "0x24d", + "input": "0x13bc6d4b000000000000000000000000b4fe7aa695b326c9d219158d2ca50db77b39f99f", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x2165b", + "gasUsed": "0x334", + "input": "0xe16c7d986d61726b65746462000000000000000000000000000000000000000000000000", + "output": "0x000000000000000000000000cf00ffd997ad14939736f026006498e3f099baaf", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x1a8e8", + "gasUsed": "0x24d", + "input": "0x13bc6d4b0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x1a2c6", + "gasUsed": "0x3cb", + "input": "0xc9503fe2", + "output": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x19b72", + "gasUsed": "0x3cb", + "input": "0xc9503fe2", + "output": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x19428", + "gasUsed": "0x305", + "input": "0x6f265b93", + "output": "0x0000000000000000000000000000000000000000000000283c7b9181eca20000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x18d45", + "gasUsed": "0x229", + "input": "0x2e94420f", + "output": "0x5842545553440000000000000000000000000000000000000000000000000000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "gas": "0x1734e", + "gasUsed": "0x229", + "input": "0x2e94420f", + "output": "0x5842545553440000000000000000000000000000000000000000000000000000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x20ee1", + "gasUsed": "0x5374", + "input": "0x581d5d60000000000000000000000000c212e03b9e060e36facad5fd8f4435412ca22e6b0000000000000000000000000000000000000000000000280faf689c35ac0000", + "output": "0x", + "to": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x1b6c1", + "gasUsed": "0x334", + "input": "0xe16c7d986c6f676d67720000000000000000000000000000000000000000000000000000", + "output": "0x0000000000000000000000002a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x1af69", + "gasUsed": "0x229", + "input": "0x2e94420f", + "output": "0x5842545553440000000000000000000000000000000000000000000000000000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0x2a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "gas": "0x143a5", + "gasUsed": "0x24d", + "input": "0x13bc6d4b0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x1a91d", + "gasUsed": "0x12fa", + "input": "0x0accce0600000000000000000000000000000000000000000000000000000000000000025842545553440000000000000000000000000000000000000000000000000000000000000000000000000000c212e03b9e060e36facad5fd8f4435412ca22e6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "output": "0x", + "to": "0x2a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x19177", + "gasUsed": "0x334", + "input": "0xe16c7d986c6f676d67720000000000000000000000000000000000000000000000000000", + "output": "0x0000000000000000000000002a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x18a22", + "gasUsed": "0x229", + "input": "0x2e94420f", + "output": "0x5842545553440000000000000000000000000000000000000000000000000000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x18341", + "gasUsed": "0x334", + "input": "0xe16c7d986d61726b65746462000000000000000000000000000000000000000000000000", + "output": "0x000000000000000000000000cf00ffd997ad14939736f026006498e3f099baaf", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x17bec", + "gasUsed": "0x229", + "input": "0x2e94420f", + "output": "0x5842545553440000000000000000000000000000000000000000000000000000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x1764e", + "gasUsed": "0x45c", + "input": "0xf92eb7745842545553440000000000000000000000000000000000000000000000000000", + "output": "0x00000000000000000000000000000000000000000000002816d180e30c390000", + "to": "0xcf00ffd997ad14939736f026006498e3f099baaf", + "type": "CALL", + "value": "0x0" + }, + { + "calls": [ + { + "from": "0x2a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "gas": "0x108ba", + "gasUsed": "0x24d", + "input": "0x13bc6d4b0000000000000000000000003e9286eafa2db8101246c2131c09b49080d00690", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x2cccf5e0538493c235d1c5ef6580f77d99e91396", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "gas": "0x16e62", + "gasUsed": "0xebb", + "input": "0x645a3b72584254555344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002816d180e30c390000", + "output": "0x", + "to": "0x2a98c5f40bfa3dee83431103c535f6fae9a8ad38", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f", + "gas": "0x283b9", + "gasUsed": "0xc51c", + "input": "0x949ae479000000000000000000000000c212e03b9e060e36facad5fd8f4435412ca22e6b0000000000000000000000000000000000000000000000280faf689c35ac0000", + "output": "0x", + "to": "0x3e9286eafa2db8101246c2131c09b49080d00690", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "gas": "0x30b4a", + "gasUsed": "0xedb7", + "input": "0x51a34eb80000000000000000000000000000000000000000000000280faf689c35ac0000", + "output": "0x", + "to": "0xb4fe7aa695b326c9d219158d2ca50db77b39f99f", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0x70c9217d814985faef62b124420f8dfbddd96433", + "gas": "0x37b38", + "gasUsed": "0x12bb3", + "input": "0x51a34eb80000000000000000000000000000000000000000000000280faf689c35ac0000", + "output": "0x", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/delegatecall.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/delegatecall.json new file mode 100644 index 00000000..f7ad6df5 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/delegatecall.json @@ -0,0 +1,97 @@ +{ + "context": { + "difficulty": "31927752", + "gasLimit": "4707788", + "miner": "0x5659922ce141eedbc2733678f9806c77b4eebee8", + "number": "11495", + "timestamp": "1479735917" + }, + "genesis": { + "alloc": { + "0x13204f5d64c28326fd7bd05fd4ea855302d7f2ff": { + "balance": "0x0", + "code": "0x606060405236156100825760e060020a60003504630a0313a981146100875780630a3b0a4f146101095780630cd40fea1461021257806329092d0e1461021f5780634cd06a5f146103295780635dbe47e8146103395780637a9e5410146103d9578063825db5f7146103e6578063a820b44d146103f3578063efa52fb31461047a575b610002565b34610002576104fc600435600060006000507342b02b5deeb78f34cd5ac896473b63e6c99a71a26333556e849091846000604051602001526040518360e060020a028152600401808381526020018281526020019250505060206040518083038186803b156100025760325a03f415610002575050604051519150505b919050565b346100025761051060043560006000507342b02b5deeb78f34cd5ac896473b63e6c99a71a2637d65837a9091336000604051602001526040518360e060020a0281526004018083815260200182600160a060020a031681526020019250505060206040518083038186803b156100025760325a03f4156100025750506040515115905061008257604080517f21ce24d4000000000000000000000000000000000000000000000000000000008152600060048201819052600160a060020a038416602483015291517342b02b5deeb78f34cd5ac896473b63e6c99a71a2926321ce24d49260448082019391829003018186803b156100025760325a03f415610002575050505b50565b3461000257610512600181565b346100025761051060043560006000507342b02b5deeb78f34cd5ac896473b63e6c99a71a2637d65837a9091336000604051602001526040518360e060020a0281526004018083815260200182600160a060020a031681526020019250505060206040518083038186803b156100025760325a03f4156100025750506040515115905061008257604080517f89489a87000000000000000000000000000000000000000000000000000000008152600060048201819052600160a060020a038416602483015291517342b02b5deeb78f34cd5ac896473b63e6c99a71a2926389489a879260448082019391829003018186803b156100025760325a03f4156100025750505061020f565b3461000257610528600435610403565b34610002576104fc600435604080516000602091820181905282517f7d65837a00000000000000000000000000000000000000000000000000000000815260048101829052600160a060020a0385166024820152925190927342b02b5deeb78f34cd5ac896473b63e6c99a71a292637d65837a92604480840193829003018186803b156100025760325a03f4156100025750506040515191506101049050565b3461000257610512600c81565b3461000257610512600081565b3461000257610528600061055660005b600060006000507342b02b5deeb78f34cd5ac896473b63e6c99a71a263685a1f3c9091846000604051602001526040518360e060020a028152600401808381526020018281526020019250505060206040518083038186803b156100025760325a03f4156100025750506040515191506101049050565b346100025761053a600435600060006000507342b02b5deeb78f34cd5ac896473b63e6c99a71a263f775b6b59091846000604051602001526040518360e060020a028152600401808381526020018281526020019250505060206040518083038186803b156100025760325a03f4156100025750506040515191506101049050565b604080519115158252519081900360200190f35b005b6040805160ff9092168252519081900360200190f35b60408051918252519081900360200190f35b60408051600160a060020a039092168252519081900360200190f35b90509056", + "nonce": "1", + "storage": { + "0x4d140b25abf3c71052885c66f73ce07cff141c1afabffdaf5cba04d625b7ebcc": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0x269296dddce321a6bcbaa2f0181127593d732cba": { + "balance": "0x0", + "code": "0x606060405236156101275760e060020a60003504630cd40fea811461012c578063173825d9146101395780631849cb5a146101c7578063285791371461030f5780632a58b3301461033f5780632cb0d48a146103565780632f54bf6e1461036a578063332b9f061461039d5780633ca8b002146103c55780633df4ddf4146103d557806341c0e1b5146103f457806347799da81461040557806362a51eee1461042457806366907d13146104575780637065cb48146104825780637a9e541014610496578063825db5f7146104a3578063949d225d146104b0578063a51687df146104c7578063b4da4e37146104e6578063b4e6850b146104ff578063bd7474ca14610541578063e75623d814610541578063e9938e1114610555578063f5d241d314610643575b610002565b3461000257610682600181565b34610002576106986004356106ff335b60006001600a9054906101000a9004600160a060020a0316600160a060020a0316635dbe47e8836000604051602001526040518260e060020a0281526004018082600160a060020a03168152602001915050602060405180830381600087803b156100025760325a03f1156100025750506040515191506103989050565b3461000257604080516101008082018352600080835260208084018290528385018290526060808501839052608080860184905260a080870185905260c080880186905260e09788018690526001605060020a0360043581168752600586529589902089519788018a528054808816808a52605060020a91829004600160a060020a0316978a01889052600183015463ffffffff8082169d8c018e905264010000000082048116988c01899052604060020a90910416958a018690526002830154948a01859052600390920154808916938a01849052049096169690970186905293969495949293604080516001605060020a03998a16815297891660208901529590971686860152600160a060020a03909316606086015263ffffffff9182166080860152811660a08501521660c083015260e08201929092529051908190036101000190f35b346100025761069a60043560018054600091829160ff60f060020a909104161515141561063d5761072833610376565b34610002576106ae6004546001605060020a031681565b34610002576106986004356108b333610149565b346100025761069a6004355b600160a060020a03811660009081526002602052604090205460ff1615156001145b919050565b34610002576106986001805460ff60f060020a9091041615151415610913576108ed33610376565b346100025761069a600435610149565b34610002576106ae6003546001605060020a03605060020a9091041681565b346100025761069861091533610149565b34610002576106ae6003546001605060020a0360a060020a9091041681565b346100025761069a60043560243560018054600091829160ff60f060020a909104161515141561095e5761092633610376565b34610002576106986004356001805460ff60f060020a909104161515141561072557610a8b33610376565b3461000257610698600435610aa533610149565b3461000257610682600c81565b3461000257610682600081565b34610002576106ae6003546001605060020a031681565b34610002576106ca600154600160a060020a03605060020a9091041681565b346100025761069a60015460ff60f060020a9091041681565b346100025761069a60043560243560443560643560843560a43560c43560018054600091829160ff60f060020a9091041615151415610b5857610ad233610376565b3461000257610698600435610bd633610149565b34610002576106e6600435604080516101008181018352600080835260208084018290528385018290526060808501839052608080860184905260a080870185905260c080880186905260e09788018690526001605060020a03808b168752600586529589902089519788018a5280548088168952600160a060020a03605060020a918290041696890196909652600181015463ffffffff8082169b8a019b909b5264010000000081048b1695890195909552604060020a90940490981691860182905260028301549086015260039091015480841696850196909652940416918101919091525b50919050565b346100025761069a60043560243560443560643560843560a43560018054600091829160ff60f060020a9091041615151415610c8e57610bfb33610376565b6040805160ff9092168252519081900360200190f35b005b604080519115158252519081900360200190f35b604080516001605060020a039092168252519081900360200190f35b60408051600160a060020a039092168252519081900360200190f35b6040805163ffffffff9092168252519081900360200190f35b1561012757600160a060020a0381166000908152600260205260409020805460ff191690555b50565b1561063d57506001605060020a0380831660009081526005602052604090208054909116151561075b576000915061063d565b604080516101008101825282546001605060020a038082168352600160a060020a03605060020a92839004166020840152600185015463ffffffff80821695850195909552640100000000810485166060850152604060020a90049093166080830152600284015460a0830152600384015480841660c08401520490911660e0820152610817905b8051600354600090819060016001605060020a0390911611610c995760038054605060020a60f060020a0319169055610ddf565b600380546001605060020a031981166000196001605060020a03928316011782558416600090815260056020526040812080547fffff000000000000000000000000000000000000000000000000000000000000168155600181810180546bffffffffffffffffffffffff191690556002820192909255909101805473ffffffffffffffffffffffffffffffffffffffff19169055915061063d565b1561012757600180547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f060020a8302179055610725565b1561091357600480546001605060020a031981166001605060020a039091166001011790555b565b156101275733600160a060020a0316ff5b1561095e57506001605060020a03808416600090815260056020526040902080549091161515610965576000915061095e565b600191505b5092915050565b60038101546001605060020a0384811691161415610986576001915061095e565b604080516101008101825282546001605060020a038082168352600160a060020a03605060020a92839004166020840152600185015463ffffffff80821695850195909552640100000000810485166060850152604060020a90049093166080830152600284015460a0830152600384015480841660c08401520490911660e0820152610a12906107e3565b61095983825b80546003546001605060020a0391821691600091161515610de55760038054605060020a60a060020a031916605060020a84021760a060020a69ffffffffffffffffffff02191660a060020a84021781558301805473ffffffffffffffffffffffffffffffffffffffff19169055610ddf565b1561072557600480546001605060020a0319168217905550565b1561012757600160a060020a0381166000908152600260205260409020805460ff19166001179055610725565b15610b5857506001605060020a038088166000908152600560205260409020805490911615610b645760009150610b58565b6004546001605060020a0390811690891610610b3057600480546001605060020a03191660018a011790555b6003805460016001605060020a03821681016001605060020a03199092169190911790915591505b50979650505050505050565b80546001605060020a0319168817605060020a60f060020a031916605060020a880217815560018101805463ffffffff1916871767ffffffff0000000019166401000000008702176bffffffff00000000000000001916604060020a860217905560028101839055610b048982610a18565b156101275760018054605060020a60f060020a031916605060020a8302179055610725565b15610c8e57506001605060020a03808816600090815260056020526040902080549091161515610c2e5760009150610c8e565b8054605060020a60f060020a031916605060020a88021781556001808201805463ffffffff1916881767ffffffff0000000019166401000000008802176bffffffff00000000000000001916604060020a87021790556002820184905591505b509695505050505050565b6003546001605060020a03848116605060020a909204161415610d095760e084015160038054605060020a928302605060020a60a060020a031990911617808255919091046001605060020a031660009081526005602052604090200180546001605060020a0319169055610ddf565b6003546001605060020a0384811660a060020a909204161415610d825760c08401516003805460a060020a92830260a060020a69ffffffffffffffffffff021990911617808255919091046001605060020a03166000908152600560205260409020018054605060020a60a060020a0319169055610ddf565b505060c082015160e08301516001605060020a0380831660009081526005602052604080822060039081018054605060020a60a060020a031916605060020a8702179055928416825290200180546001605060020a031916831790555b50505050565b6001605060020a0384161515610e6457600380546001605060020a03605060020a9182900481166000908152600560205260409020830180546001605060020a0319908116871790915583548785018054918590049093168402605060020a60a060020a03199182161790911690915582549185029116179055610ddf565b506001605060020a038381166000908152600560205260409020600390810180549185018054605060020a60a060020a0319908116605060020a94859004909516808502959095176001605060020a0319168817909155815416918402919091179055801515610ef4576003805460a060020a69ffffffffffffffffffff02191660a060020a8402179055610ddf565b6003808401546001605060020a03605060020a9091041660009081526005602052604090200180546001605060020a031916831790555050505056", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000113204f5d64c28326fd7bd05fd4ea855302d7f2ff00000000000000000000" + } + }, + "0x42b02b5deeb78f34cd5ac896473b63e6c99a71a2": { + "balance": "0x0", + "code": "0x6504032353da7150606060405236156100695760e060020a60003504631bf7509d811461006e57806321ce24d41461008157806333556e84146100ec578063685a1f3c146101035780637d65837a1461011757806389489a8714610140578063f775b6b5146101fc575b610007565b61023460043560006100fd82600061010d565b610246600435602435600160a060020a03811660009081526020839052604081205415156102cb57826001016000508054806001018281815481835581811511610278576000838152602090206102789181019083015b808211156102d057600081556001016100d8565b610248600435602435600182015481105b92915050565b6102346004356024355b60018101906100fd565b610248600435602435600160a060020a03811660009081526020839052604090205415156100fd565b61024660043560243580600160a060020a031632600160a060020a03161415156101f857600160a060020a038116600090815260208390526040902054156101f857600160a060020a038116600090815260208390526040902054600183018054909160001901908110156100075760009182526020808320909101805473ffffffffffffffffffffffffffffffffffffffff19169055600160a060020a038316825283905260408120556002820180546000190190555b5050565b61025c60043560243560008260010160005082815481101561000757600091825260209091200154600160a060020a03169392505050565b60408051918252519081900360200190f35b005b604080519115158252519081900360200190f35b60408051600160a060020a039092168252519081900360200190f35b50505060009283526020808420909201805473ffffffffffffffffffffffffffffffffffffffff191686179055600160a060020a0385168352908590526040909120819055600284018054600101905590505b505050565b509056", + "nonce": "1", + "storage": {} + }, + "0xa529806c67cc6486d4d62024471772f47f6fd672": { + "balance": "0x67820e39ac8fe9800", + "code": "0x", + "nonce": "68", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "31912170", + "extraData": "0xd783010502846765746887676f312e372e33856c696e7578", + "gasLimit": "4712388", + "hash": "0x0855914bdc581bccdc62591fd438498386ffb59ea4d5361ed5c3702e26e2c72f", + "miner": "0x334391aa808257952a462d1475562ee2106a6c90", + "mixHash": "0x64bb70b8ca883cadb8fbbda2c70a861612407864089ed87b98e5de20acceada6", + "nonce": "0x684129f283aaef18", + "number": "11494", + "stateRoot": "0x7057f31fe3dab1d620771adad35224aae43eb70e94861208bc84c557ff5b9d10", + "timestamp": "1479735912", + "totalDifficulty": "90744064339" + }, + "input": "0xf889448504a817c800832dc6c094269296dddce321a6bcbaa2f0181127593d732cba80a47065cb480000000000000000000000001523e55a1ca4efbae03355775ae89f8d7699ad9e29a080ed81e4c5e9971a730efab4885566e2c868cd80bd4166d0ed8c287fdf181650a069d7c49215e3d4416ad239cd09dbb71b9f04c16b33b385d14f40b618a7a65115", + "result": { + "calls": [ + { + "calls": [ + { + "from": "0x13204f5d64c28326fd7bd05fd4ea855302d7f2ff", + "gas": "0x2bf459", + "gasUsed": "0x2aa", + "input": "0x7d65837a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a529806c67cc6486d4d62024471772f47f6fd672", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x42b02b5deeb78f34cd5ac896473b63e6c99a71a2", + "type": "DELEGATECALL" + } + ], + "from": "0x269296dddce321a6bcbaa2f0181127593d732cba", + "gas": "0x2cae73", + "gasUsed": "0xa9d", + "input": "0x5dbe47e8000000000000000000000000a529806c67cc6486d4d62024471772f47f6fd672", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x13204f5d64c28326fd7bd05fd4ea855302d7f2ff", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0xa529806c67cc6486d4d62024471772f47f6fd672", + "gas": "0x2d6e28", + "gasUsed": "0x64bd", + "input": "0x7065cb480000000000000000000000001523e55a1ca4efbae03355775ae89f8d7699ad9e", + "output": "0x", + "to": "0x269296dddce321a6bcbaa2f0181127593d732cba", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_create_oog_outer_throw.json similarity index 99% rename from eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json rename to eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_create_oog_outer_throw.json index d1c8ac91..72152e27 100644 --- a/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_create_oog_outer_throw.json @@ -65,7 +65,7 @@ "value": "0x0" } ], - "error": "evm: invalid jump destination", + "error": "invalid jump destination", "from": "0xe4a13bc304682a903e9472f469c33801dd18d9e8", "gas": "0x435c8", "gasUsed": "0x435c8", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_instafail.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_instafail.json new file mode 100644 index 00000000..86070d13 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_instafail.json @@ -0,0 +1,72 @@ +{ + "genesis": { + "difficulty": "117067574", + "extraData": "0xd783010502846765746887676f312e372e33856c696e7578", + "gasLimit": "4712380", + "hash": "0xe05db05eeb3f288041ecb10a787df121c0ed69499355716e17c307de313a4486", + "miner": "0x0c062b329265c965deef1eede55183b3acb8f611", + "mixHash": "0xb669ae39118a53d2c65fd3b1e1d3850dd3f8c6842030698ed846a2762d68b61d", + "nonce": "0x2b469722b8e28c45", + "number": "24973", + "stateRoot": "0x532a5c3f75453a696428db078e32ae283c85cb97e4d8560dbdf022adac6df369", + "timestamp": "1479891145", + "totalDifficulty": "1892250259406", + "alloc": { + "0x6c06b16512b332e6cd8293a2974872674716ce18": { + "balance": "0x0", + "nonce": "1", + "code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e1a7d4d146036575b6000565b34600057604e60048080359060200190919050506050565b005b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051809050600060405180830381858888f19350505050505b5056", + "storage": {} + }, + "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31": { + "balance": "0x229ebbb36c3e0f20", + "nonce": "3", + "code": "0x", + "storage": {} + } + }, + "config": { + "chainId": 3, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "byzantiumBlock": 1700000, + "constantinopleBlock": 4230000, + "petersburgBlock": 4939394, + "istanbulBlock": 6485846, + "muirGlacierBlock": 7117117, + "ethash": {} + } + }, + "context": { + "number": "24974", + "difficulty": "117067574", + "timestamp": "1479891162", + "gasLimit": "4712388", + "miner": "0xc822ef32e6d26e170b70cf761e204c1806265914" + }, + "input": "0xf889038504a81557008301f97e946c06b16512b332e6cd8293a2974872674716ce1880a42e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b1600002aa0e2a6558040c5d72bc59f2fb62a38993a314c849cd22fb393018d2c5af3112095a01bdb6d7ba32263ccc2ecc880d38c49d9f0c5a72d8b7908e3122b31356d349745", + "result": { + "type": "CALL", + "from": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31", + "to": "0x6c06b16512b332e6cd8293a2974872674716ce18", + "value": "0x0", + "gas": "0x1a466", + "gasUsed": "0x1dc6", + "input": "0x2e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b160000", + "output": "0x", + "calls": [ + { + "type": "CALL", + "from": "0x6c06b16512b332e6cd8293a2974872674716ce18", + "to": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31", + "value": "0x14d1120d7b160000", + "error":"internal failure", + "input": "0x" + } + ] + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_throw_outer_revert.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_throw_outer_revert.json new file mode 100644 index 00000000..ec2ceb42 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/inner_throw_outer_revert.json @@ -0,0 +1,81 @@ +{ + "context": { + "difficulty": "3956606365", + "gasLimit": "5413248", + "miner": "0x00d8ae40d9a06d0e7a2877b62e32eb959afbe16d", + "number": "2295104", + "timestamp": "1513681256" + }, + "genesis": { + "alloc": { + "0x33056b5dcac09a9b4becad0e1dcf92c19bd0af76": { + "balance": "0x0", + "code": "0x60606040526004361061015e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680625b4487146101a257806311df9995146101cb578063278ecde11461022057806330adce0e146102435780633197cbb61461026c5780634bb278f3146102955780636103d70b146102aa57806363a599a4146102bf5780636a2d1cb8146102d457806375f12b21146102fd57806378e979251461032a578063801db9cc1461035357806386d1a69f1461037c5780638da5cb5b146103915780638ef26a71146103e65780639890220b1461040f5780639b39caef14610424578063b85dfb801461044d578063be9a6555146104a1578063ccb07cef146104b6578063d06c91e4146104e3578063d669e1d414610538578063df40503c14610561578063e2982c2114610576578063f02e030d146105c3578063f2fde38b146105d8578063f3283fba14610611575b600060149054906101000a900460ff1615151561017a57600080fd5b60075442108061018b575060085442115b15151561019757600080fd5b6101a03361064a565b005b34156101ad57600080fd5b6101b5610925565b6040518082815260200191505060405180910390f35b34156101d657600080fd5b6101de61092b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561022b57600080fd5b6102416004808035906020019091905050610951565b005b341561024e57600080fd5b610256610c48565b6040518082815260200191505060405180910390f35b341561027757600080fd5b61027f610c4e565b6040518082815260200191505060405180910390f35b34156102a057600080fd5b6102a8610c54565b005b34156102b557600080fd5b6102bd610f3e565b005b34156102ca57600080fd5b6102d261105d565b005b34156102df57600080fd5b6102e76110d5565b6040518082815260200191505060405180910390f35b341561030857600080fd5b6103106110e1565b604051808215151515815260200191505060405180910390f35b341561033557600080fd5b61033d6110f4565b6040518082815260200191505060405180910390f35b341561035e57600080fd5b6103666110fa565b6040518082815260200191505060405180910390f35b341561038757600080fd5b61038f611104565b005b341561039c57600080fd5b6103a4611196565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103f157600080fd5b6103f96111bb565b6040518082815260200191505060405180910390f35b341561041a57600080fd5b6104226111c1565b005b341561042f57600080fd5b610437611296565b6040518082815260200191505060405180910390f35b341561045857600080fd5b610484600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061129c565b604051808381526020018281526020019250505060405180910390f35b34156104ac57600080fd5b6104b46112c0565b005b34156104c157600080fd5b6104c9611341565b604051808215151515815260200191505060405180910390f35b34156104ee57600080fd5b6104f6611354565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561054357600080fd5b61054b61137a565b6040518082815260200191505060405180910390f35b341561056c57600080fd5b610574611385565b005b341561058157600080fd5b6105ad600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116c3565b6040518082815260200191505060405180910390f35b34156105ce57600080fd5b6105d66116db565b005b34156105e357600080fd5b61060f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611829565b005b341561061c57600080fd5b610648600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118fe565b005b600080670de0b6b3a7640000341015151561066457600080fd5b61069b610696670de0b6b3a7640000610688610258346119d990919063ffffffff16565b611a0c90919063ffffffff16565b611a27565b9150660221b262dd80006106ba60065484611a7e90919063ffffffff16565b111515156106c757600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156107d557600080fd5b6102c65a03f115156107e657600080fd5b5050506040518051905050610808828260010154611a7e90919063ffffffff16565b8160010181905550610827348260000154611a7e90919063ffffffff16565b816000018190555061084434600554611a7e90919063ffffffff16565b60058190555061085f82600654611a7e90919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff167ff3c1c7c0eb1328ddc834c4c9e579c06d35f443bf1102b034653624a239c7a40c836040518082815260200191505060405180910390a27fd1dc370699ae69fb860ed754789a4327413ec1cd379b93f2cbedf449a26b0e8583600554604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b60025481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060085442108061096b5750651b48eb57e00060065410155b15151561097757600080fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154821415156109c757600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515610ac857600080fd5b6102c65a03f11515610ad957600080fd5b5050506040518051905050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610b7d57600080fd5b6102c65a03f11515610b8e57600080fd5b505050604051805190501515610ba357600080fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000811115610c4457610c433382611a9c565b5b5050565b60055481565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cb157600080fd5b600854421015610cd357660221b262dd8000600654141515610cd257600080fd5b5b651b48eb57e000600654108015610cf057506213c6806008540142105b151515610cfc57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515610d7557600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610e3a57600080fd5b6102c65a03f11515610e4b57600080fd5b5050506040518051905090506000811115610f2057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610ef957600080fd5b6102c65a03f11515610f0a57600080fd5b505050604051805190501515610f1f57600080fd5b5b6001600960006101000a81548160ff02191690831515021790555050565b600080339150600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114151515610f9657600080fd5b803073ffffffffffffffffffffffffffffffffffffffff163110151515610fbc57600080fd5b610fd181600254611b5090919063ffffffff16565b6002819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561105957fe5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110b857600080fd5b6001600060146101000a81548160ff021916908315150217905550565b670de0b6b3a764000081565b600060149054906101000a900460ff1681565b60075481565b651b48eb57e00081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561115f57600080fd5b600060149054906101000a900460ff16151561117a57600080fd5b60008060146101000a81548160ff021916908315150217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561121c57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561129457600080fd5b565b61025881565b600a6020528060005260406000206000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561131b57600080fd5b600060075414151561132c57600080fd5b4260078190555062278d004201600881905550565b600960009054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b660221b262dd800081565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113e557600080fd5b600654660221b262dd800003925061142b670de0b6b3a764000061141c610258670de0b6b3a76400006119d990919063ffffffff16565b81151561142557fe5b04611a27565b915081831115151561143c57600080fd5b600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561158c57600080fd5b6102c65a03f1151561159d57600080fd5b50505060405180519050506115bf838260010154611a7e90919063ffffffff16565b81600101819055506115dc83600654611a7e90919063ffffffff16565b6006819055503073ffffffffffffffffffffffffffffffffffffffff167ff3c1c7c0eb1328ddc834c4c9e579c06d35f443bf1102b034653624a239c7a40c846040518082815260200191505060405180910390a27fd1dc370699ae69fb860ed754789a4327413ec1cd379b93f2cbedf449a26b0e856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600554604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b60016020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561173657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b151561181357600080fd5b6102c65a03f1151561182457600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561188457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156118fb57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561195957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561199557600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828402905060008414806119fa57508284828115156119f757fe5b04145b1515611a0257fe5b8091505092915050565b6000808284811515611a1a57fe5b0490508091505092915050565b6000611a416202a300600754611a7e90919063ffffffff16565b421015611a7557611a6e611a5f600584611a0c90919063ffffffff16565b83611a7e90919063ffffffff16565b9050611a79565b8190505b919050565b6000808284019050838110151515611a9257fe5b8091505092915050565b611aee81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a7e90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b4681600254611a7e90919063ffffffff16565b6002819055505050565b6000828211151515611b5e57fe5b8183039050929150505600a165627a7a72305820ec0d82a406896ccf20989b3d6e650abe4dc104e400837f1f58e67ef499493ae90029", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000008d69d00910d0b2afb2a99ed6c16c8129fa8e1751", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000e819f024b41358d2c08e3a868a5c5dd0566078d4", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000000000000000000000000000000000005a388981", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000005a3b38e6" + } + }, + "0xd4fcab9f0a6dc0493af47c864f6f17a8a5e2e826": { + "balance": "0x2a2dd979a35cf000", + "code": "0x", + "nonce": "0", + "storage": {} + }, + "0xe819f024b41358d2c08e3a868a5c5dd0566078d4": { + "balance": "0x0", + "code": "0x6060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf578063095ea7b31461014d57806318160ddd146101a757806323b872dd146101d0578063313ce5671461024957806342966c681461027257806370a08231146102ad5780638da5cb5b146102fa57806395d89b411461034f578063a9059cbb146103dd578063dd62ed3e14610437578063f2fde38b146104a3575b600080fd5b34156100ca57600080fd5b6100d26104dc565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101125780820151818401526020810190506100f7565b50505050905090810190601f16801561013f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015857600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610515565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101ba61069c565b6040518082815260200191505060405180910390f35b34156101db57600080fd5b61022f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506106a2565b604051808215151515815260200191505060405180910390f35b341561025457600080fd5b61025c610952565b6040518082815260200191505060405180910390f35b341561027d57600080fd5b6102936004808035906020019091905050610957565b604051808215151515815260200191505060405180910390f35b34156102b857600080fd5b6102e4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610abe565b6040518082815260200191505060405180910390f35b341561030557600080fd5b61030d610b07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561035a57600080fd5b610362610b2d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103a2578082015181840152602081019050610387565b50505050905090810190601f1680156103cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103e857600080fd5b61041d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b66565b604051808215151515815260200191505060405180910390f35b341561044257600080fd5b61048d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610d01565b6040518082815260200191505060405180910390f35b34156104ae57600080fd5b6104da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610d88565b005b6040805190810160405280600b81526020017f416c6c436f6465436f696e00000000000000000000000000000000000000000081525081565b6000808214806105a157506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15156105ac57600080fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061077683600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5f90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061080b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7d90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108618382610e7d90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b600681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109b557600080fd5b610a0782600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7d90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a5f82600054610e7d90919063ffffffff16565b60008190555060003373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600481526020017f414c4c430000000000000000000000000000000000000000000000000000000081525081565b6000610bba82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7d90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c4f82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5f90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610e5c5780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000808284019050838110151515610e7357fe5b8091505092915050565b6000828211151515610e8b57fe5b8183039050929150505600a165627a7a7230582059f3ea3df0b054e9ab711f37969684ba83fe38f255ffe2c8d850d951121c51100029", + "nonce": "1", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3956606365", + "extraData": "0x566961425443", + "gasLimit": "5418523", + "hash": "0x6f37eb930a25da673ea1bb80fd9e32ddac19cdf7cd4bb2eac62cc13598624077", + "miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511", + "mixHash": "0x10971cde68c587c750c23b8589ae868ce82c2c646636b97e7d9856470c5297c7", + "nonce": "0x810f923ff4b450a1", + "number": "2295103", + "stateRoot": "0xff403612573d76dfdaf4fea2429b77dbe9764021ae0e38dc8ac79a3cf551179e", + "timestamp": "1513681246", + "totalDifficulty": "7162347056825919" + }, + "input": "0xf86d808504e3b292008307dfa69433056b5dcac09a9b4becad0e1dcf92c19bd0af76880e92596fd62900008029a0e5f27bb66431f7081bb7f1f242003056d7f3f35414c352cd3d1848b52716dac2a07d0be78980edb0bd2a0678fc53aa90ea9558ce346b0d947967216918ac74ccea", + "result": { + "calls": [ + { + "error": "invalid opcode: INVALID", + "from": "0x33056b5dcac09a9b4becad0e1dcf92c19bd0af76", + "gas": "0x75fe3", + "gasUsed": "0x75fe3", + "input": "0xa9059cbb000000000000000000000000d4fcab9f0a6dc0493af47c864f6f17a8a5e2e82600000000000000000000000000000000000000000000000000000000000002f4", + "to": "0xe819f024b41358d2c08e3a868a5c5dd0566078d4", + "type": "CALL", + "value": "0x0" + } + ], + "error": "execution reverted", + "from": "0xd4fcab9f0a6dc0493af47c864f6f17a8a5e2e826", + "gas": "0x78d9e", + "gasUsed": "0x76fc0", + "input": "0x", + "to": "0x33056b5dcac09a9b4becad0e1dcf92c19bd0af76", + "type": "CALL", + "value": "0xe92596fd6290000" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/oog.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/oog.json new file mode 100644 index 00000000..de4fed6a --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/oog.json @@ -0,0 +1,60 @@ +{ + "context": { + "difficulty": "3699098917", + "gasLimit": "5258985", + "miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511", + "number": "2294631", + "timestamp": "1513675366" + }, + "genesis": { + "alloc": { + "0x43064693d3d38ad6a7cb579e0d6d9718c8aa6b62": { + "balance": "0x0", + "code": "0x6060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf578063095ea7b31461014d57806318160ddd146101a757806323b872dd146101d0578063313ce5671461024957806342966c68146102785780635a3b7e42146102b357806370a082311461034157806379cc67901461038e57806395d89b41146103e8578063a9059cbb14610476578063dd62ed3e146104b8575b600080fd5b34156100ca57600080fd5b6100d2610524565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101125780820151818401526020810190506100f7565b50505050905090810190601f16801561013f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015857600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061055d565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101ba6105ea565b6040518082815260200191505060405180910390f35b34156101db57600080fd5b61022f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506105f0565b604051808215151515815260200191505060405180910390f35b341561025457600080fd5b61025c610910565b604051808260ff1660ff16815260200191505060405180910390f35b341561028357600080fd5b6102996004808035906020019091905050610915565b604051808215151515815260200191505060405180910390f35b34156102be57600080fd5b6102c6610a18565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103065780820151818401526020810190506102eb565b50505050905090810190601f1680156103335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034c57600080fd5b610378600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a51565b6040518082815260200191505060405180910390f35b341561039957600080fd5b6103ce600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a69565b604051808215151515815260200191505060405180910390f35b34156103f357600080fd5b6103fb610bf8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043b578082015181840152602081019050610420565b50505050905090810190601f1680156104685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561048157600080fd5b6104b6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c31565b005b34156104c357600080fd5b61050e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e34565b6040518082815260200191505060405180910390f35b6040805190810160405280600881526020017f446f70616d696e6500000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b60005481565b6000808373ffffffffffffffffffffffffffffffffffffffff161415151561061757600080fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561066557600080fd5b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401101515156106f157fe5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561077c57600080fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561096557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a260019050919050565b6040805190810160405280600981526020017f446f706d6e20302e32000000000000000000000000000000000000000000000081525081565b60016020528060005260406000206000915090505481565b600081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610ab957600080fd5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610b4457600080fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508160008082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a26001905092915050565b6040805190810160405280600581526020017f444f504d4e00000000000000000000000000000000000000000000000000000081525081565b60008273ffffffffffffffffffffffffffffffffffffffff1614151515610c5757600080fd5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610ca557600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110151515610d3157fe5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60026020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058206d93424f4e7b11929b8276a269038402c10c0ddf21800e999916ddd9dff4a7630029", + "nonce": "1", + "storage": { + "0x296b66049cc4f9c8bf3d4f14752add261d1a980b39bdd194a7897baf39ac7579": "0x0000000000000000000000000000000000000000033b2e3c9fc9653f9e72b1e0" + } + }, + "0x94194bc2aaf494501d7880b61274a169f6502a54": { + "balance": "0xea8c39a876d19888d", + "code": "0x", + "nonce": "265", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3699098917", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "5263953", + "hash": "0x03a0f62a8106793dafcfae7b75fd2654322062d585a19cea568314d7205790dc", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0x15482cc64b7c00a947f5bf015dfc010db1a6a668c74df61974d6a7848c174408", + "nonce": "0xd1bdb150f6fd170e", + "number": "2294630", + "stateRoot": "0x1ab1a534e84cc787cda1db21e0d5920ab06017948075b759166cfea7274657a1", + "timestamp": "1513675347", + "totalDifficulty": "7160543502214733" + }, + "input": "0xf8ab820109855d21dba00082ca1d9443064693d3d38ad6a7cb579e0d6d9718c8aa6b6280b844a9059cbb000000000000000000000000e77b1ac803616503510bed0086e3a7be2627a69900000000000000000000000000000000000000000000000000000009502f90001ba0ce3ad83f5530136467b7c2bb225f406bd170f4ad59c254e5103c34eeabb5bd69a0455154527224a42ab405cacf0fe92918a75641ce4152f8db292019a5527aa956", + "result": { + "error": "out of gas", + "from": "0x94194bc2aaf494501d7880b61274a169f6502a54", + "gas": "0x7045", + "gasUsed": "0x7045", + "input": "0xa9059cbb000000000000000000000000e77b1ac803616503510bed0086e3a7be2627a69900000000000000000000000000000000000000000000000000000009502f9000", + "to": "0x43064693d3d38ad6a7cb579e0d6d9718c8aa6b62", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert.json new file mode 100644 index 00000000..059040a1 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert.json @@ -0,0 +1,58 @@ +{ + "context": { + "difficulty": "3665057456", + "gasLimit": "5232723", + "miner": "0xf4d8e706cfb25c0decbbdd4d2e2cc10c66376a3f", + "number": "2294501", + "timestamp": "1513673601" + }, + "genesis": { + "alloc": { + "0x0f6cef2b7fbb504782e35aa82a2207e816a2b7a9": { + "balance": "0x2a3fc32bcc019283", + "code": "0x", + "nonce": "10", + "storage": {} + }, + "0xabbcd5b340c80b5f1c0545c04c987b87310296ae": { + "balance": "0x0", + "code": "0x606060405236156100755763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632d0335ab811461007a578063548db174146100ab5780637f649783146100fc578063b092145e1461014d578063c3f44c0a14610186578063c47cf5de14610203575b600080fd5b341561008557600080fd5b610099600160a060020a0360043516610270565b60405190815260200160405180910390f35b34156100b657600080fd5b6100fa600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061028f95505050505050565b005b341561010757600080fd5b6100fa600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061029e95505050505050565b005b341561015857600080fd5b610172600160a060020a03600435811690602435166102ad565b604051901515815260200160405180910390f35b341561019157600080fd5b6100fa6004803560ff1690602480359160443591606435600160a060020a0316919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506102cd915050565b005b341561020e57600080fd5b61025460046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061056a95505050505050565b604051600160a060020a03909116815260200160405180910390f35b600160a060020a0381166000908152602081905260409020545b919050565b61029a816000610594565b5b50565b61029a816001610594565b5b50565b600160209081526000928352604080842090915290825290205460ff1681565b60008080600160a060020a038416158061030d5750600160a060020a038085166000908152600160209081526040808320339094168352929052205460ff165b151561031857600080fd5b6103218561056a565b600160a060020a038116600090815260208190526040808220549295507f19000000000000000000000000000000000000000000000000000000000000009230918891908b908b90517fff000000000000000000000000000000000000000000000000000000000000008089168252871660018201526c01000000000000000000000000600160a060020a038088168202600284015286811682026016840152602a8301869052841602604a820152605e810182805190602001908083835b6020831061040057805182525b601f1990920191602091820191016103e0565b6001836020036101000a0380198251168184511617909252505050919091019850604097505050505050505051809103902091506001828a8a8a6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561049957600080fd5b5050602060405103519050600160a060020a03838116908216146104bc57600080fd5b600160a060020a0380841660009081526020819052604090819020805460010190559087169086905180828051906020019080838360005b8381101561050d5780820151818401525b6020016104f4565b50505050905090810190601f16801561053a5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050151561055e57600080fd5b5b505050505050505050565b600060248251101561057e5750600061028a565b600160a060020a0360248301511690505b919050565b60005b825181101561060157600160a060020a033316600090815260016020526040812083918584815181106105c657fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790555b600101610597565b5b5050505600a165627a7a723058200027e8b695e9d2dea9f3629519022a69f3a1d23055ce86406e686ea54f31ee9c0029", + "nonce": "1", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3672229776", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "5227619", + "hash": "0xa07b3d6c6bf63f5f981016db9f2d1d93033833f2c17e8bf7209e85f1faf08076", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0x806e151ce2817be922e93e8d5921fa0f0d0fd213d6b2b9a3fa17458e74a163d0", + "nonce": "0xbc5d43adc2c30c7d", + "number": "2294500", + "stateRoot": "0xca645b335888352ef9d8b1ef083e9019648180b259026572e3139717270de97d", + "timestamp": "1513673552", + "totalDifficulty": "7160066586979149" + }, + "input": "0xf9018b0a8505d21dba00832dc6c094abbcd5b340c80b5f1c0545c04c987b87310296ae80b9012473b40a5c000000000000000000000000400de2e016bda6577407dfc379faba9899bc73ef0000000000000000000000002cc31912b2b0f3075a87b3640923d45a26cef3ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d79d8e6c7265636f76657279416464726573730000000000000000000000000000000000000000000000000000000000383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988000000000000000000000000000000000000000000000000000000000000000000000000000000001ba0fd659d76a4edbd2a823e324c93f78ad6803b30ff4a9c8bce71ba82798975c70ca06571eecc0b765688ec6c78942c5ee8b585e00988c0141b518287e9be919bc48a", + "result": { + "error": "execution reverted", + "from": "0x0f6cef2b7fbb504782e35aa82a2207e816a2b7a9", + "gas": "0x2d55e8", + "gasUsed": "0xc3", + "input": "0x73b40a5c000000000000000000000000400de2e016bda6577407dfc379faba9899bc73ef0000000000000000000000002cc31912b2b0f3075a87b3640923d45a26cef3ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d79d8e6c7265636f76657279416464726573730000000000000000000000000000000000000000000000000000000000383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988383e3ec32dc0f66d8fe60dbdc2f6815bdf73a98800000000000000000000000000000000000000000000000000000000000000000000000000000000", + "to": "0xabbcd5b340c80b5f1c0545c04c987b87310296ae", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert_reason.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert_reason.json new file mode 100644 index 00000000..094b0446 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/revert_reason.json @@ -0,0 +1,64 @@ +{ + "context": { + "difficulty": "2", + "gasLimit": "8000000", + "miner": "0x0000000000000000000000000000000000000000", + "number": "3212651", + "timestamp": "1597246515" + }, + "genesis": { + "alloc": { + "0xf58833cf0c791881b494eb79d461e08a1f043f52": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063609ff1bd11610078578063609ff1bd146101af5780639e7b8d61146101cd578063a3ec138d14610211578063e2ba53f0146102ae576100a5565b80630121b93f146100aa578063013cf08b146100d85780632e4176cf146101215780635c19a95c1461016b575b600080fd5b6100d6600480360360208110156100c057600080fd5b81019080803590602001909291905050506102cc565b005b610104600480360360208110156100ee57600080fd5b8101908080359060200190929190505050610469565b604051808381526020018281526020019250505060405180910390f35b61012961049a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ad6004803603602081101561018157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104bf565b005b6101b76108db565b6040518082815260200191505060405180910390f35b61020f600480360360208110156101e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610952565b005b6102536004803603602081101561022757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b53565b60405180858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b6102b6610bb0565b6040518082815260200191505060405180910390f35b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561038a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f486173206e6f20726967687420746f20766f746500000000000000000000000081525060200191505060405180910390fd5b8060010160009054906101000a900460ff161561040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f416c726561647920766f7465642e00000000000000000000000000000000000081525060200191505060405180910390fd5b60018160010160006101000a81548160ff02191690831515021790555081816002018190555080600001546002838154811061044757fe5b9060005260206000209060020201600101600082825401925050819055505050565b6002818154811061047657fe5b90600052602060002090600202016000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff1615610587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f7520616c726561647920766f7465642e000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e000081525060200191505060405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107cc57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f466f756e64206c6f6f7020696e2064656c65676174696f6e2e0000000000000081525060200191505060405180910390fd5b61062a565b60018160010160006101000a81548160ff021916908315150217905550818160010160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff16156108bf578160000154600282600201548154811061089c57fe5b9060005260206000209060020201600101600082825401925050819055506108d6565b816000015481600001600082825401925050819055505b505050565b6000806000905060008090505b60028054905081101561094d57816002828154811061090357fe5b9060005260206000209060020201600101541115610940576002818154811061092857fe5b90600052602060002090600202016001015491508092505b80806001019150506108e8565b505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180610bde6028913960400191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615610aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520766f74657220616c726561647920766f7465642e000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414610b0957600080fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905084565b60006002610bbc6108db565b81548110610bc657fe5b90600052602060002090600202016000015490509056fe4f6e6c79206368616972706572736f6e2063616e206769766520726967687420746f20766f74652ea26469706673582212201d282819f8f06fed792100d60a8b08809b081a34a1ecd225e83a4b41122165ed64736f6c63430006060033", + "nonce": "1", + "storage": { + "0x6200beec95762de01ce05f2a0e58ce3299dbb53c68c9f3254a242121223cdf58": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1": { + "balance": "0x57af9d6b3df812900", + "code": "0x", + "nonce": "6", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "IstanbulBlock":1561651, + "chainId": 5, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf888068449504f80832dc6c094f58833cf0c791881b494eb79d461e08a1f043f5280a45c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf12da0264664db3e71fae1dbdaf2f53954be149ad3b7ba8a5054b4d89c70febfacc8b1a0212e8398757963f419681839ae8c5a54b411e252473c82d93dda68405ca63294", + "result": { + "error": "execution reverted", + "from": "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "gas": "0x2d7308", + "gasUsed": "0x588", + "input": "0x5c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf1", + "to": "0xf58833cf0c791881b494eb79d461e08a1f043f52", + "type": "CALL", + "value": "0x0", + "output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e53656c662d64656c65676174696f6e20697320646973616c6c6f7765642e0000" + } +} diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/selfdestruct.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/selfdestruct.json new file mode 100644 index 00000000..132cefa1 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/selfdestruct.json @@ -0,0 +1,73 @@ +{ + "context": { + "difficulty": "3502894804", + "gasLimit": "4722976", + "miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724", + "number": "2289806", + "timestamp": "1513601314" + }, + "genesis": { + "alloc": { + "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { + "balance": "0x0", + "code": "0x", + "nonce": "22", + "storage": {} + }, + "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { + "balance": "0x4d87094125a369d9bd5", + "code": "0x61deadff", + "nonce": "1", + "storage": {} + }, + "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { + "balance": "0x1780d77678137ac1b775", + "code": "0x", + "nonce": "29072", + "storage": {} + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "3509749784", + "extraData": "0x4554482e45544846414e532e4f52472d4641313738394444", + "gasLimit": "4727564", + "hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440", + "miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3", + "mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada", + "nonce": "0x4eb12e19c16d43da", + "number": "2289805", + "stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f", + "timestamp": "1513601261", + "totalDifficulty": "7143276353481064" + }, + "input": "0xf88b8271908506fc23ac0083015f90943b873a919aa0512d5a0f09e6dcceaa4a6727fafe80a463e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c52aa0bdce0b59e8761854e857fe64015f06dd08a4fbb7624f6094893a79a72e6ad6bea01d9dde033cff7bb235a3163f348a6d7ab8d6b52bc0963a95b91612e40ca766a4", + "result": { + "calls": [ + { + "from": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "input": "0x", + "to": "0x000000000000000000000000000000000000dEaD", + "type": "SELFDESTRUCT", + "value": "0x4d87094125a369d9bd5" + } + ], + "from": "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb", + "gas": "0x10738", + "gasUsed": "0x7533", + "input": "0x63e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c5", + "output": "0x", + "to": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/testdata/call_tracer_simple.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/simple.json similarity index 100% rename from eth/tracers/testdata/call_tracer_simple.json rename to eth/tracers/internal/tracetest/testdata/call_tracer_legacy/simple.json diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/throw.json b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/throw.json new file mode 100644 index 00000000..09cf4497 --- /dev/null +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_legacy/throw.json @@ -0,0 +1,62 @@ +{ + "context": { + "difficulty": "117009631", + "gasLimit": "4712388", + "miner": "0x294e5d6c39a36ce38af1dca70c1060f78dee8070", + "number": "25009", + "timestamp": "1479891666" + }, + "genesis": { + "alloc": { + "0x70c9217d814985faef62b124420f8dfbddd96433": { + "balance": "0x4ecd70668f5d854a", + "code": "0x", + "nonce": "1638", + "storage": {} + }, + "0xc212e03b9e060e36facad5fd8f4435412ca22e6b": { + "balance": "0x0", + "code": "0x606060405236156101745760e060020a600035046302d05d3f811461017c57806304a7fdbc1461018e5780630e90f957146101fb5780630fb5a6b41461021257806314baa1b61461021b57806317fc45e21461023a5780632b096926146102435780632e94420f1461025b578063325a19f11461026457806336da44681461026d5780633f81a2c01461027f5780633fc306821461029757806345ecd3d7146102d45780634665096d146102dd5780634e71d92d146102e657806351a34eb8146103085780636111bb951461032d5780636f265b93146103445780637e9014e11461034d57806390ba009114610360578063927df5e014610393578063a7f437791461046c578063ad8f50081461046e578063bc6d909414610477578063bdec3ad114610557578063c19d93fb1461059a578063c9503fe2146105ad578063e0a73a93146105b6578063ea71b02d146105bf578063ea8a1af0146105d1578063ee4a96f9146105f3578063f1ff78a01461065c575b61046c610002565b610665600054600160a060020a031681565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600554600090600160a060020a0390811633909116146106a857610002565b61068260015460a060020a900460ff166000145b90565b61069660085481565b61046c600435600154600160a060020a03166000141561072157610002565b610696600d5481565b610696600435600f8160068110156100025750015481565b61069660045481565b61069660035481565b610665600554600160a060020a031681565b61069660043560158160068110156100025750015481565b6106966004355b600b54600f5460009160028202808203928083039290810191018386101561078357601054840186900394505b50505050919050565b61069660025481565b61069660095481565b61046c600554600090600160a060020a03908116339091161461085857610002565b61046c600435600554600090600160a060020a03908116339091161461092e57610002565b6106826001805460a060020a900460ff161461020f565b610696600b5481565b61068260075460a060020a900460ff1681565b6106966004355b600b54601554600091600282028082039280830392908101910183861015610a6c5760165494506102cb565b61046c6004356024356044356040805160015460e360020a631c2d8fb302825260b260020a691858d8dbdd5b9d18dd1b02600483015291516000928392600160a060020a03919091169163e16c7d9891602481810192602092909190829003018187876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610b4657610002565b005b610696600a5481565b61046c60006000600060006000600160009054906101000a9004600160a060020a0316600160a060020a031663e16c7d986040518160e060020a028152600401808060b260020a691858d8dbdd5b9d18dd1b0281526020015060200190506020604051808303816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663c4b0c96a336040518260e060020a0281526004018082600160a060020a031681526020019150506020604051808303816000876161da5a03f1156100025750506040515115159050610f1757610002565b61046c5b60015b60058160ff16101561071e57600f6001820160ff166006811015610002578101549060ff83166006811015610002570154101561129057610002565b61069660015460a060020a900460ff1681565b61069660065481565b610696600c5481565b610665600754600160a060020a031681565b61046c600554600090600160a060020a0390811633909116146112c857610002565b6040805160c081810190925261046c9160049160c4918390600690839083908082843760408051808301909152929750909561018495509193509091908390839080828437509095505050505050600154600090600160a060020a03168114156113fb57610002565b610696600e5481565b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b60408051918252519081900360200190f35b5060005b60068160ff16101561070857828160ff166006811015610002576020020151600f60ff831660068110156100025701558160ff82166006811015610002576020020151601560ff831660068110156100025701556001016106ac565b61071061055b565b505050565b600e8054820190555b50565b6040805160015460e060020a6313bc6d4b02825233600160a060020a03908116600484015292519216916313bc6d4b9160248181019260209290919082900301816000876161da5a03f115610002575050604051511515905061071557610002565b83861015801561079257508286105b156107b457600f546010546011548689039082030291909104900394506102cb565b8286101580156107c55750600b5486105b156107e757600f546011546012548589039082030291909104900394506102cb565b600b5486108015906107f857508186105b1561081d57600b54600f546012546013549289039281039290920204900394506102cb565b81861015801561082c57508086105b1561084e57600f546013546014548489039082030291909104900394506102cb565b60145494506102cb565b60015460a060020a900460ff1660001461087157610002565b600254600a01431161088257610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750505060405180519060200150905080600160a060020a031663771d50e16040518160e060020a0281526004018090506000604051808303816000876161da5a03f1156100025750505050565b60015460a060020a900460ff1660001461094757610002565b600254600a01431161095857610002565b6040805160015460e360020a631c2d8fb302825260a860020a6a636f6e74726163746170690260048301529151600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180517f51a34eb8000000000000000000000000000000000000000000000000000000008252600482018690529151919350600160a060020a03841692506351a34eb8916024808301926000929190829003018183876161da5a03f11561000257505050600b8290554360025560408051838152905130600160a060020a0316917fa609f6bd4ad0b4f419ddad4ac9f0d02c2b9295c5e6891469055cf73c2b568fff919081900360200190a25050565b838610158015610a7b57508286105b15610a9d576015546016546017548689039082900302919091040194506102cb565b828610158015610aae5750600b5486105b15610ad0576015546017546018548589039082900302919091040194506102cb565b600b548610801590610ae157508186105b15610b0657600b546015546018546019549289039281900392909202040194506102cb565b818610158015610b1557508086105b15610b3757601554601954601a548489039082900302919091040194506102cb565b601a54860181900394506102cb565b60015460a060020a900460ff16600014610b5f57610002565b6001805460a060020a60ff02191660a060020a17908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919450600160a060020a038516925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604080518051600a556005547ffebf661200000000000000000000000000000000000000000000000000000000825233600160a060020a03908116600484015216602482015260448101879052905163febf661291606480820192600092909190829003018183876161da5a03f115610002575050508215610cc7576007805473ffffffffffffffffffffffffffffffffffffffff191633179055610dbb565b6040805160055460065460e060020a63599efa6b028352600160a060020a039182166004840152602483015291519184169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050604080516006547f56ccb6f000000000000000000000000000000000000000000000000000000000825233600160a060020a03166004830152602482015290516356ccb6f091604480820192600092909190829003018183876161da5a03f115610002575050600580546007805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a038416179091551633179055505b6007805460a060020a60ff02191660a060020a87810291909117918290556008544301600955900460ff1615610df757600a54610e039061029e565b600a54610e0b90610367565b600c55610e0f565b600c555b600c54670de0b6b3a7640000850204600d55600754600554604080517f759297bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015260448201879052519184169163759297bb91606481810192600092909190829003018183876161da5a03f11561000257505060408051600754600a54600d54600554600c5460a060020a850460ff161515865260208601929092528486019290925260608401529251600160a060020a0391821694509281169230909116917f3b3d1986083d191be01d28623dc19604728e29ae28bdb9ba52757fdee1a18de2919081900360800190a45050505050565b600954431015610f2657610002565b6001805460a060020a900460ff1614610f3e57610002565b6001805460a060020a60ff0219167402000000000000000000000000000000000000000017908190556040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f1156100025750506040805180516004805460e260020a633e4baddd028452908301529151919750600160a060020a038816925063f92eb77491602482810192602092919082900301816000876161da5a03f115610002575050604051516007549095506000945060a060020a900460ff1615905061105c57600a5484111561105757600a54600d54670de0b6b3a7640000918603020492505b61107e565b600a5484101561107e57600a54600d54670de0b6b3a764000091869003020492505b60065483111561108e5760065492505b6006548390039150600083111561111857604080516005546007547f5928d37f000000000000000000000000000000000000000000000000000000008352600160a060020a0391821660048401528116602483015260448201869052915191871691635928d37f91606481810192600092909190829003018183876161da5a03f115610002575050505b600082111561117a576040805160055460e060020a63599efa6b028252600160a060020a0390811660048301526024820185905291519187169163599efa6b91604481810192600092909190829003018183876161da5a03f115610002575050505b6040805185815260208101849052808201859052905130600160a060020a0316917f89e690b1d5aaae14f3e85f108dc92d9ab3763a58d45aed8b59daedbbae8fe794919081900360600190a260008311156112285784600160a060020a0316634cc927d785336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f11561000257505050611282565b84600160a060020a0316634cc927d7600a60005054336040518360e060020a0281526004018083815260200182600160a060020a03168152602001925050506000604051808303816000876161da5a03f115610002575050505b600054600160a060020a0316ff5b60156001820160ff166006811015610002578101549060ff8316600681101561000257015411156112c057610002565b60010161055e565b60015460a060020a900460ff166000146112e157610002565b600254600a0143116112f257610002565b6001546040805160e360020a631c2d8fb302815260a860020a6a636f6e74726163746170690260048201529051600160a060020a03929092169163e16c7d989160248181019260209290919082900301816000876161da5a03f11561000257505060408051805160055460065460e060020a63599efa6b028452600160a060020a03918216600485015260248401529251909450918416925063599efa6b916044808301926000929190829003018183876161da5a03f1156100025750505080600160a060020a0316632b68bb2d6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050600054600160a060020a03169050ff5b6001546040805160e060020a6313bc6d4b02815233600160a060020a039081166004830152915191909216916313bc6d4b91602480830192602092919082900301816000876161da5a03f11561000257505060405151151590506106a85761000256", + "nonce": "1", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000002cccf5e0538493c235d1c5ef6580f77d99e91396", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000000000000000000061a9", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000070c9217d814985faef62b124420f8dfbddd96433" + } + } + }, + "config": { + "byzantiumBlock": 1700000, + "chainId": 3, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "eip155Block": 10, + "eip158Block": 10, + "ethash": {}, + "homesteadBlock": 0 + }, + "difficulty": "117066792", + "extraData": "0xd783010502846765746887676f312e372e33856c696e7578", + "gasLimit": "4712388", + "hash": "0xe23e8d4562a1045b70cbc99fefb20c101a8f0fc8559a80d65fea8896e2f1d46e", + "miner": "0x71842f946b98800fe6feb49f0ae4e253259031c9", + "mixHash": "0x0aada9d6e93dd4db0d09c0488dc0a048fca2ccdc1f3fc7b83ba2a8d393a3a4ff", + "nonce": "0x70849d5838dee2e9", + "number": "25008", + "stateRoot": "0x1e01d2161794768c5b917069e73d86e8dca80cd7f3168c0597de420ab93a3b7b", + "timestamp": "1479891641", + "totalDifficulty": "1896347038589" + }, + "input": "0xf88b8206668504a817c8008303d09094c212e03b9e060e36facad5fd8f4435412ca22e6b80a451a34eb8000000000000000000000000000000000000000000000027fad02094277c000029a0692a3b4e7b2842f8dd7832e712c21e09f451f416c8976d5b8d02e8c0c2b4bea9a07645e90fc421b63dd755767fd93d3c03b4ec0c4d8fafa059558d08cf11d59750", + "result": { + "error": "invalid jump destination", + "from": "0x70c9217d814985faef62b124420f8dfbddd96433", + "gas": "0x37b38", + "gasUsed": "0x37b38", + "input": "0x51a34eb8000000000000000000000000000000000000000000000027fad02094277c0000", + "to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b", + "type": "CALL", + "value": "0x0" + } +} diff --git a/eth/tracers/tracer.go b/eth/tracers/js/bigint.go similarity index 57% rename from eth/tracers/tracer.go rename to eth/tracers/js/bigint.go index 69ea29d3..9aeb3304 100644 --- a/eth/tracers/tracer.go +++ b/eth/tracers/js/bigint.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2021 The go-ethereum 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,628 +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 tracers - -import ( - "encoding/json" - "errors" - "fmt" - "math/big" - "sync/atomic" - "time" - "unsafe" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - duktape "gopkg.in/olebedev/go-duktape.v3" -) +package js // bigIntegerJS is the minified version of https://github.com/peterolson/BigInteger.js. const bigIntegerJS = `var bigInt=function(undefined){"use strict";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),LOG_MAX_INT=Math.log(MAX_INT);function Integer(v,radix){if(typeof v==="undefined")return Integer[0];if(typeof radix!=="undefined")return+radix===10?parseValue(v):parseBase(v,radix);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(value){this.value=value;this.sign=value<0;this.isSmall=true}SmallInteger.prototype=Object.create(Integer.prototype);function isPrecise(n){return-MAX_INT0)return Math.floor(n);return Math.ceil(n)}function add(a,b){var l_a=a.length,l_b=b.length,r=new Array(l_a),carry=0,base=BASE,sum,i;for(i=0;i=base?1:0;r[i]=sum-carry*base}while(i0)r.push(carry);return r}function addAny(a,b){if(a.length>=b.length)return add(a,b);return add(b,a)}function addSmall(a,carry){var l=a.length,r=new Array(l),base=BASE,sum,i;for(i=0;i0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}BigInteger.prototype.add=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.subtract(n.negate())}var a=this.value,b=n.value;if(n.isSmall){return new BigInteger(addSmall(a,Math.abs(b)),this.sign)}return new BigInteger(addAny(a,b),this.sign)};BigInteger.prototype.plus=BigInteger.prototype.add;SmallInteger.prototype.add=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.subtract(n.negate())}var b=n.value;if(n.isSmall){if(isPrecise(a+b))return new SmallInteger(a+b);b=smallToArray(Math.abs(b))}return new BigInteger(addSmall(b,Math.abs(a)),a<0)};SmallInteger.prototype.plus=SmallInteger.prototype.add;function subtract(a,b){var a_l=a.length,b_l=b.length,r=new Array(a_l),borrow=0,base=BASE,i,difference;for(i=0;i=0){value=subtract(a,b)}else{value=subtract(b,a);sign=!sign}value=arrayToSmall(value);if(typeof value==="number"){if(sign)value=-value;return new SmallInteger(value)}return new BigInteger(value,sign)}function subtractSmall(a,b,sign){var l=a.length,r=new Array(l),carry=-b,base=BASE,i,difference;for(i=0;i=0)};SmallInteger.prototype.minus=SmallInteger.prototype.subtract;BigInteger.prototype.negate=function(){return new BigInteger(this.value,!this.sign)};SmallInteger.prototype.negate=function(){var sign=this.sign;var small=new SmallInteger(-this.value);small.sign=!sign;return small};BigInteger.prototype.abs=function(){return new BigInteger(this.value,false)};SmallInteger.prototype.abs=function(){return new SmallInteger(Math.abs(this.value))};function multiplyLong(a,b){var a_l=a.length,b_l=b.length,l=a_l+b_l,r=createArray(l),base=BASE,product,carry,i,a_i,b_j;for(i=0;i0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}function shiftLeft(x,n){var r=[];while(n-- >0)r.push(0);return r.concat(x)}function multiplyKaratsuba(x,y){var n=Math.max(x.length,y.length);if(n<=30)return multiplyLong(x,y);n=Math.ceil(n/2);var b=x.slice(n),a=x.slice(0,n),d=y.slice(n),c=y.slice(0,n);var ac=multiplyKaratsuba(a,c),bd=multiplyKaratsuba(b,d),abcd=multiplyKaratsuba(addAny(a,b),addAny(c,d));var product=addAny(addAny(ac,shiftLeft(subtract(subtract(abcd,ac),bd),n)),shiftLeft(bd,2*n));trim(product);return product}function useKaratsuba(l1,l2){return-.012*l1-.012*l2+15e-6*l1*l2>0}BigInteger.prototype.multiply=function(v){var n=parseValue(v),a=this.value,b=n.value,sign=this.sign!==n.sign,abs;if(n.isSmall){if(b===0)return Integer[0];if(b===1)return this;if(b===-1)return this.negate();abs=Math.abs(b);if(abs=0;shift--){quotientDigit=base-1;if(remainder[shift+b_l]!==divisorMostSignificantDigit){quotientDigit=Math.floor((remainder[shift+b_l]*base+remainder[shift+b_l-1])/divisorMostSignificantDigit)}carry=0;borrow=0;l=divisor.length;for(i=0;ib_l){highx=(highx+1)*base}guess=Math.ceil(highx/highy);do{check=multiplySmall(b,guess);if(compareAbs(check,part)<=0)break;guess--}while(guess);result.push(guess);part=subtract(part,check)}result.reverse();return[arrayToSmall(result),arrayToSmall(part)]}function divModSmall(value,lambda){var length=value.length,quotient=createArray(length),base=BASE,i,q,remainder,divisor;remainder=0;for(i=length-1;i>=0;--i){divisor=remainder*base+value[i];q=truncate(divisor/lambda);remainder=divisor-q*lambda;quotient[i]=q|0}return[quotient,remainder|0]}function divModAny(self,v){var value,n=parseValue(v);var a=self.value,b=n.value;var quotient;if(b===0)throw new Error("Cannot divide by zero");if(self.isSmall){if(n.isSmall){return[new SmallInteger(truncate(a/b)),new SmallInteger(a%b)]}return[Integer[0],self]}if(n.isSmall){if(b===1)return[self,Integer[0]];if(b==-1)return[self.negate(),Integer[0]];var abs=Math.abs(b);if(absb.length?1:-1}for(var i=a.length-1;i>=0;i--){if(a[i]!==b[i])return a[i]>b[i]?1:-1}return 0}BigInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall)return 1;return compareAbs(a,b)};SmallInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=Math.abs(this.value),b=n.value;if(n.isSmall){b=Math.abs(b);return a===b?0:a>b?1:-1}return-1};BigInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(this.sign!==n.sign){return n.sign?1:-1}if(n.isSmall){return this.sign?-1:1}return compareAbs(a,b)*(this.sign?-1:1)};BigInteger.prototype.compareTo=BigInteger.prototype.compare;SmallInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall){return a==b?0:a>b?1:-1}if(a<0!==n.sign){return a<0?-1:1}return a<0?1:-1};SmallInteger.prototype.compareTo=SmallInteger.prototype.compare;BigInteger.prototype.equals=function(v){return this.compare(v)===0};SmallInteger.prototype.eq=SmallInteger.prototype.equals=BigInteger.prototype.eq=BigInteger.prototype.equals;BigInteger.prototype.notEquals=function(v){return this.compare(v)!==0};SmallInteger.prototype.neq=SmallInteger.prototype.notEquals=BigInteger.prototype.neq=BigInteger.prototype.notEquals;BigInteger.prototype.greater=function(v){return this.compare(v)>0};SmallInteger.prototype.gt=SmallInteger.prototype.greater=BigInteger.prototype.gt=BigInteger.prototype.greater;BigInteger.prototype.lesser=function(v){return this.compare(v)<0};SmallInteger.prototype.lt=SmallInteger.prototype.lesser=BigInteger.prototype.lt=BigInteger.prototype.lesser;BigInteger.prototype.greaterOrEquals=function(v){return this.compare(v)>=0};SmallInteger.prototype.geq=SmallInteger.prototype.greaterOrEquals=BigInteger.prototype.geq=BigInteger.prototype.greaterOrEquals;BigInteger.prototype.lesserOrEquals=function(v){return this.compare(v)<=0};SmallInteger.prototype.leq=SmallInteger.prototype.lesserOrEquals=BigInteger.prototype.leq=BigInteger.prototype.lesserOrEquals;BigInteger.prototype.isEven=function(){return(this.value[0]&1)===0};SmallInteger.prototype.isEven=function(){return(this.value&1)===0};BigInteger.prototype.isOdd=function(){return(this.value[0]&1)===1};SmallInteger.prototype.isOdd=function(){return(this.value&1)===1};BigInteger.prototype.isPositive=function(){return!this.sign};SmallInteger.prototype.isPositive=function(){return this.value>0};BigInteger.prototype.isNegative=function(){return this.sign};SmallInteger.prototype.isNegative=function(){return this.value<0};BigInteger.prototype.isUnit=function(){return false};SmallInteger.prototype.isUnit=function(){return Math.abs(this.value)===1};BigInteger.prototype.isZero=function(){return false};SmallInteger.prototype.isZero=function(){return this.value===0};BigInteger.prototype.isDivisibleBy=function(v){var n=parseValue(v);var value=n.value;if(value===0)return false;if(value===1)return true;if(value===2)return this.isEven();return this.mod(n).equals(Integer[0])};SmallInteger.prototype.isDivisibleBy=BigInteger.prototype.isDivisibleBy;function isBasicPrime(v){var n=v.abs();if(n.isUnit())return false;if(n.equals(2)||n.equals(3)||n.equals(5))return true;if(n.isEven()||n.isDivisibleBy(3)||n.isDivisibleBy(5))return false;if(n.lesser(25))return true}BigInteger.prototype.isPrime=function(){var isPrime=isBasicPrime(this);if(isPrime!==undefined)return isPrime;var n=this.abs(),nPrev=n.prev();var a=[2,3,5,7,11,13,17,19],b=nPrev,d,t,i,x;while(b.isEven())b=b.divide(2);for(i=0;i-MAX_INT)return new SmallInteger(value-1);return new BigInteger(MAX_INT_ARR,true)};var powersOfTwo=[1];while(2*powersOfTwo[powersOfTwo.length-1]<=BASE)powersOfTwo.push(2*powersOfTwo[powersOfTwo.length-1]);var powers2Length=powersOfTwo.length,highestPower2=powersOfTwo[powers2Length-1];function shift_isSmall(n){return(typeof n==="number"||typeof n==="string")&&+Math.abs(n)<=BASE||n instanceof BigInteger&&n.value.length<=1}BigInteger.prototype.shiftLeft=function(n){if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}n=+n;if(n<0)return this.shiftRight(-n);var result=this;while(n>=powers2Length){result=result.multiply(highestPower2);n-=powers2Length-1}return result.multiply(powersOfTwo[n])};SmallInteger.prototype.shiftLeft=BigInteger.prototype.shiftLeft;BigInteger.prototype.shiftRight=function(n){var remQuo;if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}n=+n;if(n<0)return this.shiftLeft(-n);var result=this;while(n>=powers2Length){if(result.isZero())return result;remQuo=divModAny(result,highestPower2);result=remQuo[1].isNegative()?remQuo[0].prev():remQuo[0];n-=powers2Length-1}remQuo=divModAny(result,powersOfTwo[n]);return remQuo[1].isNegative()?remQuo[0].prev():remQuo[0]};SmallInteger.prototype.shiftRight=BigInteger.prototype.shiftRight;function bitwise(x,y,fn){y=parseValue(y);var xSign=x.isNegative(),ySign=y.isNegative();var xRem=xSign?x.not():x,yRem=ySign?y.not():y;var xDigit=0,yDigit=0;var xDivMod=null,yDivMod=null;var result=[];while(!xRem.isZero()||!yRem.isZero()){xDivMod=divModAny(xRem,highestPower2);xDigit=xDivMod[1].toJSNumber();if(xSign){xDigit=highestPower2-1-xDigit}yDivMod=divModAny(yRem,highestPower2);yDigit=yDivMod[1].toJSNumber();if(ySign){yDigit=highestPower2-1-yDigit}xRem=xDivMod[0];yRem=yDivMod[0];result.push(fn(xDigit,yDigit))}var sum=fn(xSign?1:0,ySign?1:0)!==0?bigInt(-1):bigInt(0);for(var i=result.length-1;i>=0;i-=1){sum=sum.multiply(highestPower2).add(bigInt(result[i]))}return sum}BigInteger.prototype.not=function(){return this.negate().prev()};SmallInteger.prototype.not=BigInteger.prototype.not;BigInteger.prototype.and=function(n){return bitwise(this,n,function(a,b){return a&b})};SmallInteger.prototype.and=BigInteger.prototype.and;BigInteger.prototype.or=function(n){return bitwise(this,n,function(a,b){return a|b})};SmallInteger.prototype.or=BigInteger.prototype.or;BigInteger.prototype.xor=function(n){return bitwise(this,n,function(a,b){return a^b})};SmallInteger.prototype.xor=BigInteger.prototype.xor;var LOBMASK_I=1<<30,LOBMASK_BI=(BASE&-BASE)*(BASE&-BASE)|LOBMASK_I;function roughLOB(n){var v=n.value,x=typeof v==="number"?v|LOBMASK_I:v[0]+v[1]*BASE|LOBMASK_BI;return x&-x}function max(a,b){a=parseValue(a);b=parseValue(b);return a.greater(b)?a:b}function min(a,b){a=parseValue(a);b=parseValue(b);return a.lesser(b)?a:b}function gcd(a,b){a=parseValue(a).abs();b=parseValue(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var c=Integer[1],d,t;while(a.isEven()&&b.isEven()){d=Math.min(roughLOB(a),roughLOB(b));a=a.divide(d);b=b.divide(d);c=c.multiply(d)}while(a.isEven()){a=a.divide(roughLOB(a))}do{while(b.isEven()){b=b.divide(roughLOB(b))}if(a.greater(b)){t=b;b=a;a=t}b=b.subtract(a)}while(!b.isZero());return c.isUnit()?a:a.multiply(c)}function lcm(a,b){a=parseValue(a).abs();b=parseValue(b).abs();return a.divide(gcd(a,b)).multiply(b)}function randBetween(a,b){a=parseValue(a);b=parseValue(b);var low=min(a,b),high=max(a,b);var range=high.subtract(low).add(1);if(range.isSmall)return low.add(Math.floor(Math.random()*range));var length=range.value.length-1;var result=[],restricted=true;for(var i=length;i>=0;i--){var top=restricted?range.value[i]:BASE;var digit=truncate(Math.random()*top);result.unshift(digit);if(digit=absBase){if(c==="1"&&absBase===1)continue;throw new Error(c+" is not a valid digit in base "+base+".")}else if(c.charCodeAt(0)-87>=absBase){throw new Error(c+" is not a valid digit in base "+base+".")}}}if(2<=base&&base<=36){if(length<=LOG_MAX_INT/Math.log(base)){var result=parseInt(text,base);if(isNaN(result)){throw new Error(c+" is not a valid digit in base "+base+".")}return new SmallInteger(parseInt(text,base))}}base=parseValue(base);var digits=[];var isNegative=text[0]==="-";for(i=isNegative?1:0;i");digits.push(parseValue(text.slice(start+1,i)))}else throw new Error(c+" is not a valid character")}return parseBaseFromArray(digits,base,isNegative)};function parseBaseFromArray(digits,base,isNegative){var val=Integer[0],pow=Integer[1],i;for(i=digits.length-1;i>=0;i--){val=val.add(digits[i].times(pow));pow=pow.times(base)}return isNegative?val.negate():val}function stringify(digit){var v=digit.value;if(typeof v==="number")v=[v];if(v.length===1&&v[0]<=35){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(v[0])}return"<"+v+">"}function toBase(n,base){base=bigInt(base);if(base.isZero()){if(n.isZero())return"0";throw new Error("Cannot convert nonzero numbers to base 0.")}if(base.equals(-1)){if(n.isZero())return"0";if(n.isNegative())return new Array(1-n).join("10");return"1"+new Array(+n).join("01")}var minusSign="";if(n.isNegative()&&base.isPositive()){minusSign="-";n=n.abs()}if(base.equals(1)){if(n.isZero())return"0";return minusSign+new Array(+n+1).join(1)}var out=[];var left=n,divmod;while(left.isNegative()||left.compareAbs(base)>=0){divmod=left.divmod(base);left=divmod.quotient;var digit=divmod.remainder;if(digit.isNegative()){digit=base.minus(digit).abs();left=left.next()}out.push(stringify(digit))}out.push(stringify(left));return minusSign+out.reverse().join("")}BigInteger.prototype.toString=function(radix){if(radix===undefined)radix=10;if(radix!==10)return toBase(this,radix);var v=this.value,l=v.length,str=String(v[--l]),zeros="0000000",digit;while(--l>=0){digit=String(v[l]);str+=zeros.slice(digit.length)+digit}var sign=this.sign?"-":"";return sign+str};SmallInteger.prototype.toString=function(radix){if(radix===undefined)radix=10;if(radix!=10)return toBase(this,radix);return String(this.value)};BigInteger.prototype.toJSON=SmallInteger.prototype.toJSON=function(){return this.toString()};BigInteger.prototype.valueOf=function(){return+this.toString()};BigInteger.prototype.toJSNumber=BigInteger.prototype.valueOf;SmallInteger.prototype.valueOf=function(){return this.value};SmallInteger.prototype.toJSNumber=SmallInteger.prototype.valueOf;function parseStringValue(v){if(isPrecise(+v)){var x=+v;if(x===truncate(x))return new SmallInteger(x);throw"Invalid integer: "+v}var sign=v[0]==="-";if(sign)v=v.slice(1);var split=v.split(/e/i);if(split.length>2)throw new Error("Invalid integer: "+split.join("e"));if(split.length===2){var exp=split[1];if(exp[0]==="+")exp=exp.slice(1);exp=+exp;if(exp!==truncate(exp)||!isPrecise(exp))throw new Error("Invalid integer: "+exp+" is not a valid exponent.");var text=split[0];var decimalPlace=text.indexOf(".");if(decimalPlace>=0){exp-=text.length-decimalPlace-1;text=text.slice(0,decimalPlace)+text.slice(decimalPlace+1)}if(exp<0)throw new Error("Cannot include negative exponent part for integers");text+=new Array(exp+1).join("0");v=text}var isValid=/^([0-9][0-9]*)$/.test(v);if(!isValid)throw new Error("Invalid integer: "+v);var r=[],max=v.length,l=LOG_BASE,min=max-l;while(max>0){r.push(+v.slice(min,max));min-=l;if(min<0)min=0;max-=l}trim(r);return new BigInteger(r,sign)}function parseNumberValue(v){if(isPrecise(v)){if(v!==truncate(v))throw new Error(v+" is not an integer.");return new SmallInteger(v)}return parseStringValue(v.toString())}function parseValue(v){if(typeof v==="number"){return parseNumberValue(v)}if(typeof v==="string"){return parseStringValue(v)}return v}for(var i=0;i<1e3;i++){Integer[i]=new SmallInteger(i);if(i>0)Integer[-i]=new SmallInteger(-i)}Integer.one=Integer[1];Integer.zero=Integer[0];Integer.minusOne=Integer[-1];Integer.max=max;Integer.min=min;Integer.gcd=gcd;Integer.lcm=lcm;Integer.isInstance=function(x){return x instanceof BigInteger||x instanceof SmallInteger};Integer.randBetween=randBetween;Integer.fromArray=function(digits,base,isNegative){return parseBaseFromArray(digits.map(parseValue),parseValue(base||10),isNegative)};return Integer}();if(typeof module!=="undefined"&&module.hasOwnProperty("exports")){module.exports=bigInt}if(typeof define==="function"&&define.amd){define("big-integer",[],function(){return bigInt})}; bigInt` - -// makeSlice convert an unsafe memory pointer with the given type into a Go byte -// slice. -// -// Note, the returned slice uses the same memory area as the input arguments. -// If those are duktape stack items, popping them off **will** make the slice -// contents change. -func makeSlice(ptr unsafe.Pointer, size uint) []byte { - var sl = struct { - addr uintptr - len int - cap int - }{uintptr(ptr), int(size), int(size)} - - return *(*[]byte)(unsafe.Pointer(&sl)) -} - -// popSlice pops a buffer off the JavaScript stack and returns it as a slice. -func popSlice(ctx *duktape.Context) []byte { - blob := common.CopyBytes(makeSlice(ctx.GetBuffer(-1))) - ctx.Pop() - return blob -} - -// pushBigInt create a JavaScript BigInteger in the VM. -func pushBigInt(n *big.Int, ctx *duktape.Context) { - ctx.GetGlobalString("bigInt") - ctx.PushString(n.String()) - ctx.Call(1) -} - -// opWrapper provides a JavaScript wrapper around OpCode. -type opWrapper struct { - op vm.OpCode -} - -// pushObject assembles a JSVM object wrapping a swappable opcode and pushes it -// onto the VM stack. -func (ow *opWrapper) pushObject(vm *duktape.Context) { - obj := vm.PushObject() - - vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushInt(int(ow.op)); return 1 }) - vm.PutPropString(obj, "toNumber") - - vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushString(ow.op.String()); return 1 }) - vm.PutPropString(obj, "toString") - - vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushBoolean(ow.op.IsPush()); return 1 }) - vm.PutPropString(obj, "isPush") -} - -// memoryWrapper provides a JavaScript wrapper around vm.Memory. -type memoryWrapper struct { - memory *vm.Memory -} - -// slice returns the requested range of memory as a byte slice. -func (mw *memoryWrapper) slice(begin, end int64) []byte { - if mw.memory.Len() < int(end) { - // TODO(karalabe): We can't js-throw from Go inside duktape inside Go. The Go - // runtime goes belly up https://github.com/golang/go/issues/15639. - log.Warn("Tracer accessed out of bound memory", "available", mw.memory.Len(), "offset", begin, "size", end-begin) - return nil - } - return mw.memory.Get(begin, end-begin) -} - -// getUint returns the 32 bytes at the specified address interpreted as a uint. -func (mw *memoryWrapper) getUint(addr int64) *big.Int { - if mw.memory.Len() < int(addr)+32 { - // TODO(karalabe): We can't js-throw from Go inside duktape inside Go. The Go - // runtime goes belly up https://github.com/golang/go/issues/15639. - log.Warn("Tracer accessed out of bound memory", "available", mw.memory.Len(), "offset", addr, "size", 32) - return new(big.Int) - } - return new(big.Int).SetBytes(mw.memory.GetPtr(addr, 32)) -} - -// pushObject assembles a JSVM object wrapping a swappable memory and pushes it -// onto the VM stack. -func (mw *memoryWrapper) pushObject(vm *duktape.Context) { - obj := vm.PushObject() - - // Generate the `slice` method which takes two ints and returns a buffer - vm.PushGoFunction(func(ctx *duktape.Context) int { - blob := mw.slice(int64(ctx.GetInt(-2)), int64(ctx.GetInt(-1))) - ctx.Pop2() - - ptr := ctx.PushFixedBuffer(len(blob)) - copy(makeSlice(ptr, uint(len(blob))), blob) - return 1 - }) - vm.PutPropString(obj, "slice") - - // Generate the `getUint` method which takes an int and returns a bigint - vm.PushGoFunction(func(ctx *duktape.Context) int { - offset := int64(ctx.GetInt(-1)) - ctx.Pop() - - pushBigInt(mw.getUint(offset), ctx) - return 1 - }) - vm.PutPropString(obj, "getUint") -} - -// stackWrapper provides a JavaScript wrapper around vm.Stack. -type stackWrapper struct { - stack *vm.Stack -} - -// peek returns the nth-from-the-top element of the stack. -func (sw *stackWrapper) peek(idx int) *big.Int { - if len(sw.stack.Data()) <= idx { - // TODO(karalabe): We can't js-throw from Go inside duktape inside Go. The Go - // runtime goes belly up https://github.com/golang/go/issues/15639. - log.Warn("Tracer accessed out of bound stack", "size", len(sw.stack.Data()), "index", idx) - return new(big.Int) - } - return sw.stack.Data()[len(sw.stack.Data())-idx-1] -} - -// pushObject assembles a JSVM object wrapping a swappable stack and pushes it -// onto the VM stack. -func (sw *stackWrapper) pushObject(vm *duktape.Context) { - obj := vm.PushObject() - - vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushInt(len(sw.stack.Data())); return 1 }) - vm.PutPropString(obj, "length") - - // Generate the `peek` method which takes an int and returns a bigint - vm.PushGoFunction(func(ctx *duktape.Context) int { - offset := ctx.GetInt(-1) - ctx.Pop() - - pushBigInt(sw.peek(offset), ctx) - return 1 - }) - vm.PutPropString(obj, "peek") -} - -// dbWrapper provides a JavaScript wrapper around vm.Database. -type dbWrapper struct { - db vm.StateDB -} - -// pushObject assembles a JSVM object wrapping a swappable database and pushes it -// onto the VM stack. -func (dw *dbWrapper) pushObject(vm *duktape.Context) { - obj := vm.PushObject() - - // Push the wrapper for statedb.GetBalance - vm.PushGoFunction(func(ctx *duktape.Context) int { - pushBigInt(dw.db.GetBalance(common.BytesToAddress(popSlice(ctx))), ctx) - return 1 - }) - vm.PutPropString(obj, "getBalance") - - // Push the wrapper for statedb.GetNonce - vm.PushGoFunction(func(ctx *duktape.Context) int { - ctx.PushInt(int(dw.db.GetNonce(common.BytesToAddress(popSlice(ctx))))) - return 1 - }) - vm.PutPropString(obj, "getNonce") - - // Push the wrapper for statedb.GetCode - vm.PushGoFunction(func(ctx *duktape.Context) int { - code := dw.db.GetCode(common.BytesToAddress(popSlice(ctx))) - - ptr := ctx.PushFixedBuffer(len(code)) - copy(makeSlice(ptr, uint(len(code))), code) - return 1 - }) - vm.PutPropString(obj, "getCode") - - // Push the wrapper for statedb.GetState - vm.PushGoFunction(func(ctx *duktape.Context) int { - hash := popSlice(ctx) - addr := popSlice(ctx) - - state := dw.db.GetState(common.BytesToAddress(addr), common.BytesToHash(hash)) - - ptr := ctx.PushFixedBuffer(len(state)) - copy(makeSlice(ptr, uint(len(state))), state[:]) - return 1 - }) - vm.PutPropString(obj, "getState") - - // Push the wrapper for statedb.Exists - vm.PushGoFunction(func(ctx *duktape.Context) int { - ctx.PushBoolean(dw.db.Exist(common.BytesToAddress(popSlice(ctx)))) - return 1 - }) - vm.PutPropString(obj, "exists") -} - -// contractWrapper provides a JavaScript wrapper around vm.Contract -type contractWrapper struct { - contract *vm.Contract -} - -// pushObject assembles a JSVM object wrapping a swappable contract and pushes it -// onto the VM stack. -func (cw *contractWrapper) pushObject(vm *duktape.Context) { - obj := vm.PushObject() - - // Push the wrapper for contract.Caller - vm.PushGoFunction(func(ctx *duktape.Context) int { - ptr := ctx.PushFixedBuffer(20) - copy(makeSlice(ptr, 20), cw.contract.Caller().Bytes()) - return 1 - }) - vm.PutPropString(obj, "getCaller") - - // Push the wrapper for contract.Address - vm.PushGoFunction(func(ctx *duktape.Context) int { - ptr := ctx.PushFixedBuffer(20) - copy(makeSlice(ptr, 20), cw.contract.Address().Bytes()) - return 1 - }) - vm.PutPropString(obj, "getAddress") - - // Push the wrapper for contract.Value - vm.PushGoFunction(func(ctx *duktape.Context) int { - pushBigInt(cw.contract.Value(), ctx) - return 1 - }) - vm.PutPropString(obj, "getValue") - - // Push the wrapper for contract.Input - vm.PushGoFunction(func(ctx *duktape.Context) int { - blob := cw.contract.Input - - ptr := ctx.PushFixedBuffer(len(blob)) - copy(makeSlice(ptr, uint(len(blob))), blob) - return 1 - }) - vm.PutPropString(obj, "getInput") -} - -// Tracer provides an implementation of Tracer that evaluates a Javascript -// function for each VM execution step. -type Tracer struct { - inited bool // Flag whether the context was already inited from the EVM - - vm *duktape.Context // Javascript VM instance - - tracerObject int // Stack index of the tracer JavaScript object - stateObject int // Stack index of the global state to pull arguments from - - opWrapper *opWrapper // Wrapper around the VM opcode - stackWrapper *stackWrapper // Wrapper around the VM stack - memoryWrapper *memoryWrapper // Wrapper around the VM memory - contractWrapper *contractWrapper // Wrapper around the contract object - dbWrapper *dbWrapper // Wrapper around the VM environment - - pcValue *uint // Swappable pc value wrapped by a log accessor - gasValue *uint // Swappable gas value wrapped by a log accessor - costValue *uint // Swappable cost value wrapped by a log accessor - depthValue *uint // Swappable depth value wrapped by a log accessor - errorValue *string // Swappable error value wrapped by a log accessor - refundValue *uint // Swappable refund value wrapped by a log accessor - - ctx map[string]interface{} // Transaction context gathered throughout execution - err error // Error, if one has occurred - - interrupt uint32 // Atomic flag to signal execution interruption - reason error // Textual reason for the interruption -} - -// New instantiates a new tracer instance. code specifies a Javascript snippet, -// which must evaluate to an expression returning an object with 'step', 'fault' -// and 'result' functions. -func New(code string) (*Tracer, error) { - // Resolve any tracers by name and assemble the tracer object - if tracer, ok := tracer(code); ok { - code = tracer - } - tracer := &Tracer{ - vm: duktape.New(), - ctx: make(map[string]interface{}), - opWrapper: new(opWrapper), - stackWrapper: new(stackWrapper), - memoryWrapper: new(memoryWrapper), - contractWrapper: new(contractWrapper), - dbWrapper: new(dbWrapper), - pcValue: new(uint), - gasValue: new(uint), - costValue: new(uint), - depthValue: new(uint), - refundValue: new(uint), - } - // Set up builtins for this environment - tracer.vm.PushGlobalGoFunction("toHex", func(ctx *duktape.Context) int { - ctx.PushString(hexutil.Encode(popSlice(ctx))) - return 1 - }) - tracer.vm.PushGlobalGoFunction("toWord", func(ctx *duktape.Context) int { - var word common.Hash - if ptr, size := ctx.GetBuffer(-1); ptr != nil { - word = common.BytesToHash(makeSlice(ptr, size)) - } else { - word = common.HexToHash(ctx.GetString(-1)) - } - ctx.Pop() - copy(makeSlice(ctx.PushFixedBuffer(32), 32), word[:]) - return 1 - }) - tracer.vm.PushGlobalGoFunction("toAddress", func(ctx *duktape.Context) int { - var addr common.Address - if ptr, size := ctx.GetBuffer(-1); ptr != nil { - addr = common.BytesToAddress(makeSlice(ptr, size)) - } else { - addr = common.HexToAddress(ctx.GetString(-1)) - } - ctx.Pop() - copy(makeSlice(ctx.PushFixedBuffer(20), 20), addr[:]) - return 1 - }) - tracer.vm.PushGlobalGoFunction("toContract", func(ctx *duktape.Context) int { - var from common.Address - if ptr, size := ctx.GetBuffer(-2); ptr != nil { - from = common.BytesToAddress(makeSlice(ptr, size)) - } else { - from = common.HexToAddress(ctx.GetString(-2)) - } - nonce := uint64(ctx.GetInt(-1)) - ctx.Pop2() - - contract := crypto.CreateAddress(from, nonce) - copy(makeSlice(ctx.PushFixedBuffer(20), 20), contract[:]) - return 1 - }) - tracer.vm.PushGlobalGoFunction("toContract2", func(ctx *duktape.Context) int { - var from common.Address - if ptr, size := ctx.GetBuffer(-3); ptr != nil { - from = common.BytesToAddress(makeSlice(ptr, size)) - } else { - from = common.HexToAddress(ctx.GetString(-3)) - } - // Retrieve salt hex string from js stack - salt := common.HexToHash(ctx.GetString(-2)) - // Retrieve code slice from js stack - var code []byte - if ptr, size := ctx.GetBuffer(-1); ptr != nil { - code = common.CopyBytes(makeSlice(ptr, size)) - } else { - code = common.FromHex(ctx.GetString(-1)) - } - codeHash := crypto.Keccak256(code) - ctx.Pop3() - contract := crypto.CreateAddress2(from, salt, codeHash) - copy(makeSlice(ctx.PushFixedBuffer(20), 20), contract[:]) - return 1 - }) - tracer.vm.PushGlobalGoFunction("isPrecompiled", func(ctx *duktape.Context) int { - _, ok := vm.PrecompiledContractsIstanbul[common.BytesToAddress(popSlice(ctx))] - ctx.PushBoolean(ok) - return 1 - }) - tracer.vm.PushGlobalGoFunction("slice", func(ctx *duktape.Context) int { - start, end := ctx.GetInt(-2), ctx.GetInt(-1) - ctx.Pop2() - - blob := popSlice(ctx) - size := end - start - - if start < 0 || start > end || end > len(blob) { - // TODO(karalabe): We can't js-throw from Go inside duktape inside Go. The Go - // runtime goes belly up https://github.com/golang/go/issues/15639. - log.Warn("Tracer accessed out of bound memory", "available", len(blob), "offset", start, "size", size) - ctx.PushFixedBuffer(0) - return 1 - } - copy(makeSlice(ctx.PushFixedBuffer(size), uint(size)), blob[start:end]) - return 1 - }) - // Push the JavaScript tracer as object #0 onto the JSVM stack and validate it - if err := tracer.vm.PevalString("(" + code + ")"); err != nil { - log.Warn("Failed to compile tracer", "err", err) - return nil, err - } - tracer.tracerObject = 0 // yeah, nice, eval can't return the index itself - - if !tracer.vm.GetPropString(tracer.tracerObject, "step") { - return nil, fmt.Errorf("Trace object must expose a function step()") - } - tracer.vm.Pop() - - if !tracer.vm.GetPropString(tracer.tracerObject, "fault") { - return nil, fmt.Errorf("Trace object must expose a function fault()") - } - tracer.vm.Pop() - - if !tracer.vm.GetPropString(tracer.tracerObject, "result") { - return nil, fmt.Errorf("Trace object must expose a function result()") - } - tracer.vm.Pop() - - // Tracer is valid, inject the big int library to access large numbers - tracer.vm.EvalString(bigIntegerJS) - tracer.vm.PutGlobalString("bigInt") - - // Push the global environment state as object #1 into the JSVM stack - tracer.stateObject = tracer.vm.PushObject() - - logObject := tracer.vm.PushObject() - - tracer.opWrapper.pushObject(tracer.vm) - tracer.vm.PutPropString(logObject, "op") - - tracer.stackWrapper.pushObject(tracer.vm) - tracer.vm.PutPropString(logObject, "stack") - - tracer.memoryWrapper.pushObject(tracer.vm) - tracer.vm.PutPropString(logObject, "memory") - - tracer.contractWrapper.pushObject(tracer.vm) - tracer.vm.PutPropString(logObject, "contract") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushUint(*tracer.pcValue); return 1 }) - tracer.vm.PutPropString(logObject, "getPC") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushUint(*tracer.gasValue); return 1 }) - tracer.vm.PutPropString(logObject, "getGas") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushUint(*tracer.costValue); return 1 }) - tracer.vm.PutPropString(logObject, "getCost") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushUint(*tracer.depthValue); return 1 }) - tracer.vm.PutPropString(logObject, "getDepth") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { ctx.PushUint(*tracer.refundValue); return 1 }) - tracer.vm.PutPropString(logObject, "getRefund") - - tracer.vm.PushGoFunction(func(ctx *duktape.Context) int { - if tracer.errorValue != nil { - ctx.PushString(*tracer.errorValue) - } else { - ctx.PushUndefined() - } - return 1 - }) - tracer.vm.PutPropString(logObject, "getError") - - tracer.vm.PutPropString(tracer.stateObject, "log") - - tracer.dbWrapper.pushObject(tracer.vm) - tracer.vm.PutPropString(tracer.stateObject, "db") - - return tracer, nil -} - -// Stop terminates execution of the tracer at the first opportune moment. -func (jst *Tracer) Stop(err error) { - jst.reason = err - atomic.StoreUint32(&jst.interrupt, 1) -} - -// call executes a method on a JS object, catching any errors, formatting and -// returning them as error objects. -func (jst *Tracer) call(method string, args ...string) (json.RawMessage, error) { - // Execute the JavaScript call and return any error - jst.vm.PushString(method) - for _, arg := range args { - jst.vm.GetPropString(jst.stateObject, arg) - } - code := jst.vm.PcallProp(jst.tracerObject, len(args)) - defer jst.vm.Pop() - - if code != 0 { - err := jst.vm.SafeToString(-1) - return nil, errors.New(err) - } - // No error occurred, extract return value and return - return json.RawMessage(jst.vm.JsonEncode(-1)), nil -} - -func wrapError(context string, err error) error { - return fmt.Errorf("%v in server-side tracer function '%v'", err, context) -} - -// CaptureStart implements the Tracer interface to initialize the tracing operation. -func (jst *Tracer) CaptureStart(from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) error { - jst.ctx["type"] = "CALL" - if create { - jst.ctx["type"] = "CREATE" - } - jst.ctx["from"] = from - jst.ctx["to"] = to - jst.ctx["input"] = input - jst.ctx["gas"] = gas - jst.ctx["value"] = value - - return nil -} - -// CaptureState implements the Tracer interface to trace a single step of VM execution. -func (jst *Tracer) CaptureState(env *vm.EVM, pc uint64, op vm.OpCode, gas, cost uint64, memory *vm.Memory, stack *vm.Stack, contract *vm.Contract, depth int, err error) error { - if jst.err == nil { - // Initialize the context if it wasn't done yet - if !jst.inited { - jst.ctx["block"] = env.BlockNumber.Uint64() - jst.inited = true - } - // If tracing was interrupted, set the error and stop - if atomic.LoadUint32(&jst.interrupt) > 0 { - jst.err = jst.reason - return nil - } - jst.opWrapper.op = op - jst.stackWrapper.stack = stack - jst.memoryWrapper.memory = memory - jst.contractWrapper.contract = contract - jst.dbWrapper.db = env.StateDB - - *jst.pcValue = uint(pc) - *jst.gasValue = uint(gas) - *jst.costValue = uint(cost) - *jst.depthValue = uint(depth) - *jst.refundValue = uint(env.StateDB.GetRefund()) - - jst.errorValue = nil - if err != nil { - jst.errorValue = new(string) - *jst.errorValue = err.Error() - } - _, err := jst.call("step", "log", "db") - if err != nil { - jst.err = wrapError("step", err) - } - } - return nil -} - -// CaptureFault implements the Tracer interface to trace an execution fault -// while running an opcode. -func (jst *Tracer) CaptureFault(env *vm.EVM, pc uint64, op vm.OpCode, gas, cost uint64, memory *vm.Memory, stack *vm.Stack, contract *vm.Contract, depth int, err error) error { - if jst.err == nil { - // Apart from the error, everything matches the previous invocation - jst.errorValue = new(string) - *jst.errorValue = err.Error() - - _, err := jst.call("fault", "log", "db") - if err != nil { - jst.err = wrapError("fault", err) - } - } - return nil -} - -// CaptureEnd is called after the call finishes to finalize the tracing. -func (jst *Tracer) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) error { - jst.ctx["output"] = output - jst.ctx["gasUsed"] = gasUsed - jst.ctx["time"] = t.String() - - if err != nil { - jst.ctx["error"] = err.Error() - } - return nil -} - -// GetResult calls the Javascript 'result' function and returns its value, or any accumulated error -func (jst *Tracer) GetResult() (json.RawMessage, error) { - // Transform the context into a JavaScript object and inject into the state - obj := jst.vm.PushObject() - - for key, val := range jst.ctx { - switch val := val.(type) { - case uint64: - jst.vm.PushUint(uint(val)) - - case string: - jst.vm.PushString(val) - - case []byte: - ptr := jst.vm.PushFixedBuffer(len(val)) - copy(makeSlice(ptr, uint(len(val))), val) - - case common.Address: - ptr := jst.vm.PushFixedBuffer(20) - copy(makeSlice(ptr, 20), val[:]) - - case *big.Int: - pushBigInt(val, jst.vm) - - default: - panic(fmt.Sprintf("unsupported type: %T", val)) - } - jst.vm.PutPropString(obj, key) - } - jst.vm.PutPropString(jst.stateObject, "ctx") - - // Finalize the trace and return the results - result, err := jst.call("result", "ctx", "db") - if err != nil { - jst.err = wrapError("result", err) - } - // Clean up the JavaScript environment - jst.vm.DestroyHeap() - jst.vm.Destroy() - - return result, jst.err -} diff --git a/eth/tracers/js/goja.go b/eth/tracers/js/goja.go new file mode 100644 index 00000000..8238bb60 --- /dev/null +++ b/eth/tracers/js/goja.go @@ -0,0 +1,960 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package js + +import ( + "encoding/json" + "errors" + "fmt" + "math/big" + "time" + + "github.com/dop251/goja" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers" + jsassets "github.com/ethereum/go-ethereum/eth/tracers/js/internal/tracers" +) + +var assetTracers = make(map[string]string) + +// init retrieves the JavaScript transaction tracers included in go-ethereum. +func init() { + var err error + assetTracers, err = jsassets.Load() + if err != nil { + panic(err) + } + tracers.RegisterLookup(true, newJsTracer) +} + +// bigIntProgram is compiled once and the exported function mostly invoked to convert +// hex strings into big ints. +var bigIntProgram = goja.MustCompile("bigInt", bigIntegerJS, false) + +type toBigFn = func(vm *goja.Runtime, val string) (goja.Value, error) +type toBufFn = func(vm *goja.Runtime, val []byte) (goja.Value, error) +type fromBufFn = func(vm *goja.Runtime, buf goja.Value, allowString bool) ([]byte, error) + +func toBuf(vm *goja.Runtime, bufType goja.Value, val []byte) (goja.Value, error) { + // bufType is usually Uint8Array. This is equivalent to `new Uint8Array(val)` in JS. + return vm.New(bufType, vm.ToValue(vm.NewArrayBuffer(val))) +} + +func fromBuf(vm *goja.Runtime, bufType goja.Value, buf goja.Value, allowString bool) ([]byte, error) { + obj := buf.ToObject(vm) + switch obj.ClassName() { + case "String": + if !allowString { + break + } + return common.FromHex(obj.String()), nil + + case "Array": + var b []byte + if err := vm.ExportTo(buf, &b); err != nil { + return nil, err + } + return b, nil + + case "Object": + if !obj.Get("constructor").SameAs(bufType) { + break + } + b := obj.Get("buffer").Export().(goja.ArrayBuffer).Bytes() + return b, nil + } + return nil, fmt.Errorf("invalid buffer type") +} + +// jsTracer is an implementation of the Tracer interface which evaluates +// JS functions on the relevant EVM hooks. It uses Goja as its JS engine. +type jsTracer struct { + vm *goja.Runtime + env *vm.EVM + toBig toBigFn // Converts a hex string into a JS bigint + toBuf toBufFn // Converts a []byte into a JS buffer + fromBuf fromBufFn // Converts an array, hex string or Uint8Array to a []byte + ctx map[string]goja.Value // KV-bag passed to JS in `result` + activePrecompiles []common.Address // List of active precompiles at current block + traceStep bool // True if tracer object exposes a `step()` method + traceFrame bool // True if tracer object exposes the `enter()` and `exit()` methods + gasLimit uint64 // Amount of gas bought for the whole tx + err error // Any error that should stop tracing + obj *goja.Object // Trace object + + // Methods exposed by tracer + result goja.Callable + fault goja.Callable + step goja.Callable + enter goja.Callable + exit goja.Callable + + // Underlying structs being passed into JS + log *steplog + frame *callframe + frameResult *callframeResult + + // Goja-wrapping of types prepared for JS consumption + logValue goja.Value + dbValue goja.Value + frameValue goja.Value + frameResultValue goja.Value +} + +// newJsTracer instantiates a new JS tracer instance. code is either +// the name of a built-in JS tracer or a Javascript snippet which +// evaluates to an expression returning an object with certain methods. +// The methods `result` and `fault` are required to be present. +// The methods `step`, `enter`, and `exit` are optional, but note that +// `enter` and `exit` always go together. +func newJsTracer(code string, ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, error) { + if c, ok := assetTracers[code]; ok { + code = c + } + vm := goja.New() + // By default field names are exported to JS as is, i.e. capitalized. + vm.SetFieldNameMapper(goja.UncapFieldNameMapper()) + t := &jsTracer{ + vm: vm, + ctx: make(map[string]goja.Value), + } + if ctx == nil { + ctx = new(tracers.Context) + } + if ctx.BlockHash != (common.Hash{}) { + t.ctx["blockHash"] = vm.ToValue(ctx.BlockHash.Bytes()) + if ctx.TxHash != (common.Hash{}) { + t.ctx["txIndex"] = vm.ToValue(ctx.TxIndex) + t.ctx["txHash"] = vm.ToValue(ctx.TxHash.Bytes()) + } + } + + t.setTypeConverters() + t.setBuiltinFunctions() + ret, err := vm.RunString("(" + code + ")") + if err != nil { + return nil, err + } + // Check tracer's interface for required and optional methods. + obj := ret.ToObject(vm) + result, ok := goja.AssertFunction(obj.Get("result")) + if !ok { + return nil, errors.New("trace object must expose a function result()") + } + fault, ok := goja.AssertFunction(obj.Get("fault")) + if !ok { + return nil, errors.New("trace object must expose a function fault()") + } + step, ok := goja.AssertFunction(obj.Get("step")) + t.traceStep = ok + enter, hasEnter := goja.AssertFunction(obj.Get("enter")) + exit, hasExit := goja.AssertFunction(obj.Get("exit")) + if hasEnter != hasExit { + return nil, errors.New("trace object must expose either both or none of enter() and exit()") + } + t.traceFrame = hasEnter + t.obj = obj + t.step = step + t.enter = enter + t.exit = exit + t.result = result + t.fault = fault + + // Pass in config + if setup, ok := goja.AssertFunction(obj.Get("setup")); ok { + cfgStr := "{}" + if cfg != nil { + cfgStr = string(cfg) + } + if _, err := setup(obj, vm.ToValue(cfgStr)); err != nil { + return nil, err + } + } + // Setup objects carrying data to JS. These are created once and re-used. + t.log = &steplog{ + vm: vm, + op: &opObj{vm: vm}, + memory: &memoryObj{vm: vm, toBig: t.toBig, toBuf: t.toBuf}, + stack: &stackObj{vm: vm, toBig: t.toBig}, + contract: &contractObj{vm: vm, toBig: t.toBig, toBuf: t.toBuf}, + } + t.frame = &callframe{vm: vm, toBig: t.toBig, toBuf: t.toBuf} + t.frameResult = &callframeResult{vm: vm, toBuf: t.toBuf} + t.frameValue = t.frame.setupObject() + t.frameResultValue = t.frameResult.setupObject() + t.logValue = t.log.setupObject() + return t, nil +} + +// CaptureTxStart implements the Tracer interface and is invoked at the beginning of +// transaction processing. +func (t *jsTracer) CaptureTxStart(gasLimit uint64) { + t.gasLimit = gasLimit +} + +// CaptureTxStart implements the Tracer interface and is invoked at the end of +// transaction processing. +func (t *jsTracer) CaptureTxEnd(restGas uint64) {} + +// CaptureStart implements the Tracer interface to initialize the tracing operation. +func (t *jsTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.env = env + db := &dbObj{db: env.StateDB, vm: t.vm, toBig: t.toBig, toBuf: t.toBuf, fromBuf: t.fromBuf} + t.dbValue = db.setupObject() + if create { + t.ctx["type"] = t.vm.ToValue("CREATE") + } else { + t.ctx["type"] = t.vm.ToValue("CALL") + } + t.ctx["from"] = t.vm.ToValue(from.Bytes()) + t.ctx["to"] = t.vm.ToValue(to.Bytes()) + t.ctx["input"] = t.vm.ToValue(input) + t.ctx["gas"] = t.vm.ToValue(gas) + t.ctx["gasPrice"] = t.vm.ToValue(env.TxContext.GasPrice) + valueBig, err := t.toBig(t.vm, value.String()) + if err != nil { + t.err = err + return + } + t.ctx["value"] = valueBig + t.ctx["block"] = t.vm.ToValue(env.Context.BlockNumber.Uint64()) + // Update list of precompiles based on current block + rules := env.ChainConfig().Rules(env.Context.BlockNumber, env.Context.Random != nil) + t.activePrecompiles = vm.ActivePrecompiles(rules) + t.ctx["intrinsicGas"] = t.vm.ToValue(t.gasLimit - gas) +} + +// CaptureState implements the Tracer interface to trace a single step of VM execution. +func (t *jsTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + if !t.traceStep { + return + } + if t.err != nil { + return + } + + log := t.log + log.op.op = op + log.memory.memory = scope.Memory + log.stack.stack = scope.Stack + log.contract.contract = scope.Contract + log.pc = uint(pc) + log.gas = uint(gas) + log.cost = uint(cost) + log.depth = uint(depth) + log.err = err + if _, err := t.step(t.obj, t.logValue, t.dbValue); err != nil { + t.onError("step", err) + } +} + +// CaptureFault implements the Tracer interface to trace an execution fault +func (t *jsTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { + if t.err != nil { + return + } + // Other log fields have been already set as part of the last CaptureState. + t.log.err = err + if _, err := t.fault(t.obj, t.logValue, t.dbValue); err != nil { + t.onError("fault", err) + } +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *jsTracer) CaptureEnd(output []byte, gasUsed uint64, duration time.Duration, err error) { + t.ctx["output"] = t.vm.ToValue(output) + t.ctx["time"] = t.vm.ToValue(duration.String()) + t.ctx["gasUsed"] = t.vm.ToValue(gasUsed) + if err != nil { + t.ctx["error"] = t.vm.ToValue(err.Error()) + } +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *jsTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { + if !t.traceFrame { + return + } + if t.err != nil { + return + } + + t.frame.typ = typ.String() + t.frame.from = from + t.frame.to = to + t.frame.input = common.CopyBytes(input) + t.frame.gas = uint(gas) + t.frame.value = nil + if value != nil { + t.frame.value = new(big.Int).SetBytes(value.Bytes()) + } + + if _, err := t.enter(t.obj, t.frameValue); err != nil { + t.onError("enter", err) + } +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *jsTracer) CaptureExit(output []byte, gasUsed uint64, err error) { + if !t.traceFrame { + return + } + + t.frameResult.gasUsed = uint(gasUsed) + t.frameResult.output = common.CopyBytes(output) + t.frameResult.err = err + + if _, err := t.exit(t.obj, t.frameResultValue); err != nil { + t.onError("exit", err) + } +} + +// GetResult calls the Javascript 'result' function and returns its value, or any accumulated error +func (t *jsTracer) GetResult() (json.RawMessage, error) { + ctx := t.vm.ToValue(t.ctx) + res, err := t.result(t.obj, ctx, t.dbValue) + if err != nil { + return nil, wrapError("result", err) + } + encoded, err := json.Marshal(res) + if err != nil { + return nil, err + } + return json.RawMessage(encoded), t.err +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *jsTracer) Stop(err error) { + t.vm.Interrupt(err) +} + +// onError is called anytime the running JS code is interrupted +// and returns an error. It in turn pings the EVM to cancel its +// execution. +func (t *jsTracer) onError(context string, err error) { + t.err = wrapError(context, err) + // `env` is set on CaptureStart which comes before any JS execution. + // So it should be non-nil. + t.env.Cancel() +} + +func wrapError(context string, err error) error { + return fmt.Errorf("%v in server-side tracer function '%v'", err, context) +} + +// setBuiltinFunctions injects Go functions which are available to tracers into the environment. +// It depends on type converters having been set up. +func (t *jsTracer) setBuiltinFunctions() { + vm := t.vm + // TODO: load console from goja-nodejs + vm.Set("toHex", func(v goja.Value) string { + b, err := t.fromBuf(vm, v, false) + if err != nil { + vm.Interrupt(err) + return "" + } + return hexutil.Encode(b) + }) + vm.Set("toWord", func(v goja.Value) goja.Value { + // TODO: add test with []byte len < 32 or > 32 + b, err := t.fromBuf(vm, v, true) + if err != nil { + vm.Interrupt(err) + return nil + } + b = common.BytesToHash(b).Bytes() + res, err := t.toBuf(vm, b) + if err != nil { + vm.Interrupt(err) + return nil + } + return res + }) + vm.Set("toAddress", func(v goja.Value) goja.Value { + a, err := t.fromBuf(vm, v, true) + if err != nil { + vm.Interrupt(err) + return nil + } + a = common.BytesToAddress(a).Bytes() + res, err := t.toBuf(vm, a) + if err != nil { + vm.Interrupt(err) + return nil + } + return res + }) + vm.Set("toContract", func(from goja.Value, nonce uint) goja.Value { + a, err := t.fromBuf(vm, from, true) + if err != nil { + vm.Interrupt(err) + return nil + } + addr := common.BytesToAddress(a) + b := crypto.CreateAddress(addr, uint64(nonce)).Bytes() + res, err := t.toBuf(vm, b) + if err != nil { + vm.Interrupt(err) + return nil + } + return res + }) + vm.Set("toContract2", func(from goja.Value, salt string, initcode goja.Value) goja.Value { + a, err := t.fromBuf(vm, from, true) + if err != nil { + vm.Interrupt(err) + return nil + } + addr := common.BytesToAddress(a) + code, err := t.fromBuf(vm, initcode, true) + if err != nil { + vm.Interrupt(err) + return nil + } + code = common.CopyBytes(code) + codeHash := crypto.Keccak256(code) + b := crypto.CreateAddress2(addr, common.HexToHash(salt), codeHash).Bytes() + res, err := t.toBuf(vm, b) + if err != nil { + vm.Interrupt(err) + return nil + } + return res + }) + vm.Set("isPrecompiled", func(v goja.Value) bool { + a, err := t.fromBuf(vm, v, true) + if err != nil { + vm.Interrupt(err) + return false + } + addr := common.BytesToAddress(a) + for _, p := range t.activePrecompiles { + if p == addr { + return true + } + } + return false + }) + vm.Set("slice", func(slice goja.Value, start, end int) goja.Value { + b, err := t.fromBuf(vm, slice, false) + if err != nil { + vm.Interrupt(err) + return nil + } + if start < 0 || start > end || end > len(b) { + vm.Interrupt(fmt.Sprintf("Tracer accessed out of bound memory: available %d, offset %d, size %d", len(b), start, end-start)) + return nil + } + res, err := t.toBuf(vm, b[start:end]) + if err != nil { + vm.Interrupt(err) + return nil + } + return res + }) +} + +// setTypeConverters sets up utilities for converting Go types into those +// suitable for JS consumption. +func (t *jsTracer) setTypeConverters() error { + // Inject bigint logic. + // TODO: To be replaced after goja adds support for native JS bigint. + toBigCode, err := t.vm.RunProgram(bigIntProgram) + if err != nil { + return err + } + // Used to create JS bigint objects from go. + toBigFn, ok := goja.AssertFunction(toBigCode) + if !ok { + return errors.New("failed to bind bigInt func") + } + toBigWrapper := func(vm *goja.Runtime, val string) (goja.Value, error) { + return toBigFn(goja.Undefined(), vm.ToValue(val)) + } + t.toBig = toBigWrapper + // NOTE: We need this workaround to create JS buffers because + // goja doesn't at the moment expose constructors for typed arrays. + // + // Cache uint8ArrayType once to be used every time for less overhead. + uint8ArrayType := t.vm.Get("Uint8Array") + toBufWrapper := func(vm *goja.Runtime, val []byte) (goja.Value, error) { + return toBuf(vm, uint8ArrayType, val) + } + t.toBuf = toBufWrapper + fromBufWrapper := func(vm *goja.Runtime, buf goja.Value, allowString bool) ([]byte, error) { + return fromBuf(vm, uint8ArrayType, buf, allowString) + } + t.fromBuf = fromBufWrapper + return nil +} + +type opObj struct { + vm *goja.Runtime + op vm.OpCode +} + +func (o *opObj) ToNumber() int { + return int(o.op) +} + +func (o *opObj) ToString() string { + return o.op.String() +} + +func (o *opObj) IsPush() bool { + return o.op.IsPush() +} + +func (o *opObj) setupObject() *goja.Object { + obj := o.vm.NewObject() + obj.Set("toNumber", o.vm.ToValue(o.ToNumber)) + obj.Set("toString", o.vm.ToValue(o.ToString)) + obj.Set("isPush", o.vm.ToValue(o.IsPush)) + return obj +} + +type memoryObj struct { + memory *vm.Memory + vm *goja.Runtime + toBig toBigFn + toBuf toBufFn +} + +func (mo *memoryObj) Slice(begin, end int64) goja.Value { + b, err := mo.slice(begin, end) + if err != nil { + mo.vm.Interrupt(err) + return nil + } + res, err := mo.toBuf(mo.vm, b) + if err != nil { + mo.vm.Interrupt(err) + return nil + } + return res +} + +// slice returns the requested range of memory as a byte slice. +func (mo *memoryObj) slice(begin, end int64) ([]byte, error) { + if end == begin { + return []byte{}, nil + } + if end < begin || begin < 0 { + return nil, fmt.Errorf("tracer accessed out of bound memory: offset %d, end %d", begin, end) + } + if mo.memory.Len() < int(end) { + return nil, fmt.Errorf("tracer accessed out of bound memory: available %d, offset %d, size %d", mo.memory.Len(), begin, end-begin) + } + return mo.memory.GetCopy(begin, end-begin), nil +} + +func (mo *memoryObj) GetUint(addr int64) goja.Value { + value, err := mo.getUint(addr) + if err != nil { + mo.vm.Interrupt(err) + return nil + } + res, err := mo.toBig(mo.vm, value.String()) + if err != nil { + mo.vm.Interrupt(err) + return nil + } + return res +} + +// getUint returns the 32 bytes at the specified address interpreted as a uint. +func (mo *memoryObj) getUint(addr int64) (*big.Int, error) { + if mo.memory.Len() < int(addr)+32 || addr < 0 { + return nil, fmt.Errorf("tracer accessed out of bound memory: available %d, offset %d, size %d", mo.memory.Len(), addr, 32) + } + return new(big.Int).SetBytes(mo.memory.GetPtr(addr, 32)), nil +} + +func (mo *memoryObj) Length() int { + return mo.memory.Len() +} + +func (m *memoryObj) setupObject() *goja.Object { + o := m.vm.NewObject() + o.Set("slice", m.vm.ToValue(m.Slice)) + o.Set("getUint", m.vm.ToValue(m.GetUint)) + o.Set("length", m.vm.ToValue(m.Length)) + return o +} + +type stackObj struct { + stack *vm.Stack + vm *goja.Runtime + toBig toBigFn +} + +func (s *stackObj) Peek(idx int) goja.Value { + value, err := s.peek(idx) + if err != nil { + s.vm.Interrupt(err) + return nil + } + res, err := s.toBig(s.vm, value.String()) + if err != nil { + s.vm.Interrupt(err) + return nil + } + return res +} + +// peek returns the nth-from-the-top element of the stack. +func (s *stackObj) peek(idx int) (*big.Int, error) { + if len(s.stack.Data()) <= idx || idx < 0 { + return nil, fmt.Errorf("tracer accessed out of bound stack: size %d, index %d", len(s.stack.Data()), idx) + } + return s.stack.Back(idx).ToBig(), nil +} + +func (s *stackObj) Length() int { + return len(s.stack.Data()) +} + +func (s *stackObj) setupObject() *goja.Object { + o := s.vm.NewObject() + o.Set("peek", s.vm.ToValue(s.Peek)) + o.Set("length", s.vm.ToValue(s.Length)) + return o +} + +type dbObj struct { + db vm.StateDB + vm *goja.Runtime + toBig toBigFn + toBuf toBufFn + fromBuf fromBufFn +} + +func (do *dbObj) GetBalance(addrSlice goja.Value) goja.Value { + a, err := do.fromBuf(do.vm, addrSlice, false) + if err != nil { + do.vm.Interrupt(err) + return nil + } + addr := common.BytesToAddress(a) + value := do.db.GetBalance(addr) + res, err := do.toBig(do.vm, value.String()) + if err != nil { + do.vm.Interrupt(err) + return nil + } + return res +} + +func (do *dbObj) GetNonce(addrSlice goja.Value) uint64 { + a, err := do.fromBuf(do.vm, addrSlice, false) + if err != nil { + do.vm.Interrupt(err) + return 0 + } + addr := common.BytesToAddress(a) + return do.db.GetNonce(addr) +} + +func (do *dbObj) GetCode(addrSlice goja.Value) goja.Value { + a, err := do.fromBuf(do.vm, addrSlice, false) + if err != nil { + do.vm.Interrupt(err) + return nil + } + addr := common.BytesToAddress(a) + code := do.db.GetCode(addr) + res, err := do.toBuf(do.vm, code) + if err != nil { + do.vm.Interrupt(err) + return nil + } + return res +} + +func (do *dbObj) GetState(addrSlice goja.Value, hashSlice goja.Value) goja.Value { + a, err := do.fromBuf(do.vm, addrSlice, false) + if err != nil { + do.vm.Interrupt(err) + return nil + } + addr := common.BytesToAddress(a) + h, err := do.fromBuf(do.vm, hashSlice, false) + if err != nil { + do.vm.Interrupt(err) + return nil + } + hash := common.BytesToHash(h) + state := do.db.GetState(addr, hash).Bytes() + res, err := do.toBuf(do.vm, state) + if err != nil { + do.vm.Interrupt(err) + return nil + } + return res +} + +func (do *dbObj) Exists(addrSlice goja.Value) bool { + a, err := do.fromBuf(do.vm, addrSlice, false) + if err != nil { + do.vm.Interrupt(err) + return false + } + addr := common.BytesToAddress(a) + return do.db.Exist(addr) +} + +func (do *dbObj) setupObject() *goja.Object { + o := do.vm.NewObject() + o.Set("getBalance", do.vm.ToValue(do.GetBalance)) + o.Set("getNonce", do.vm.ToValue(do.GetNonce)) + o.Set("getCode", do.vm.ToValue(do.GetCode)) + o.Set("getState", do.vm.ToValue(do.GetState)) + o.Set("exists", do.vm.ToValue(do.Exists)) + return o +} + +type contractObj struct { + contract *vm.Contract + vm *goja.Runtime + toBig toBigFn + toBuf toBufFn +} + +func (co *contractObj) GetCaller() goja.Value { + caller := co.contract.Caller().Bytes() + res, err := co.toBuf(co.vm, caller) + if err != nil { + co.vm.Interrupt(err) + return nil + } + return res +} + +func (co *contractObj) GetAddress() goja.Value { + addr := co.contract.Address().Bytes() + res, err := co.toBuf(co.vm, addr) + if err != nil { + co.vm.Interrupt(err) + return nil + } + return res +} + +func (co *contractObj) GetValue() goja.Value { + value := co.contract.Value() + res, err := co.toBig(co.vm, value.String()) + if err != nil { + co.vm.Interrupt(err) + return nil + } + return res +} + +func (co *contractObj) GetInput() goja.Value { + input := common.CopyBytes(co.contract.Input) + res, err := co.toBuf(co.vm, input) + if err != nil { + co.vm.Interrupt(err) + return nil + } + return res +} + +func (c *contractObj) setupObject() *goja.Object { + o := c.vm.NewObject() + o.Set("getCaller", c.vm.ToValue(c.GetCaller)) + o.Set("getAddress", c.vm.ToValue(c.GetAddress)) + o.Set("getValue", c.vm.ToValue(c.GetValue)) + o.Set("getInput", c.vm.ToValue(c.GetInput)) + return o +} + +type callframe struct { + vm *goja.Runtime + toBig toBigFn + toBuf toBufFn + + typ string + from common.Address + to common.Address + input []byte + gas uint + value *big.Int +} + +func (f *callframe) GetType() string { + return f.typ +} + +func (f *callframe) GetFrom() goja.Value { + from := f.from.Bytes() + res, err := f.toBuf(f.vm, from) + if err != nil { + f.vm.Interrupt(err) + return nil + } + return res +} + +func (f *callframe) GetTo() goja.Value { + to := f.to.Bytes() + res, err := f.toBuf(f.vm, to) + if err != nil { + f.vm.Interrupt(err) + return nil + } + return res +} + +func (f *callframe) GetInput() goja.Value { + input := f.input + res, err := f.toBuf(f.vm, input) + if err != nil { + f.vm.Interrupt(err) + return nil + } + return res +} + +func (f *callframe) GetGas() uint { + return f.gas +} + +func (f *callframe) GetValue() goja.Value { + if f.value == nil { + return goja.Undefined() + } + res, err := f.toBig(f.vm, f.value.String()) + if err != nil { + f.vm.Interrupt(err) + return nil + } + return res +} + +func (f *callframe) setupObject() *goja.Object { + o := f.vm.NewObject() + o.Set("getType", f.vm.ToValue(f.GetType)) + o.Set("getFrom", f.vm.ToValue(f.GetFrom)) + o.Set("getTo", f.vm.ToValue(f.GetTo)) + o.Set("getInput", f.vm.ToValue(f.GetInput)) + o.Set("getGas", f.vm.ToValue(f.GetGas)) + o.Set("getValue", f.vm.ToValue(f.GetValue)) + return o +} + +type callframeResult struct { + vm *goja.Runtime + toBuf toBufFn + + gasUsed uint + output []byte + err error +} + +func (r *callframeResult) GetGasUsed() uint { + return r.gasUsed +} + +func (r *callframeResult) GetOutput() goja.Value { + res, err := r.toBuf(r.vm, r.output) + if err != nil { + r.vm.Interrupt(err) + return nil + } + return res +} + +func (r *callframeResult) GetError() goja.Value { + if r.err != nil { + return r.vm.ToValue(r.err.Error()) + } + return goja.Undefined() +} + +func (r *callframeResult) setupObject() *goja.Object { + o := r.vm.NewObject() + o.Set("getGasUsed", r.vm.ToValue(r.GetGasUsed)) + o.Set("getOutput", r.vm.ToValue(r.GetOutput)) + o.Set("getError", r.vm.ToValue(r.GetError)) + return o +} + +type steplog struct { + vm *goja.Runtime + + op *opObj + memory *memoryObj + stack *stackObj + contract *contractObj + + pc uint + gas uint + cost uint + depth uint + refund uint + err error +} + +func (l *steplog) GetPC() uint { + return l.pc +} + +func (l *steplog) GetGas() uint { + return l.gas +} + +func (l *steplog) GetCost() uint { + return l.cost +} + +func (l *steplog) GetDepth() uint { + return l.depth +} + +func (l *steplog) GetRefund() uint { + return l.refund +} + +func (l *steplog) GetError() goja.Value { + if l.err != nil { + return l.vm.ToValue(l.err.Error()) + } + return goja.Undefined() +} + +func (l *steplog) setupObject() *goja.Object { + o := l.vm.NewObject() + // Setup basic fields. + o.Set("getPC", l.vm.ToValue(l.GetPC)) + o.Set("getGas", l.vm.ToValue(l.GetGas)) + o.Set("getCost", l.vm.ToValue(l.GetCost)) + o.Set("getDepth", l.vm.ToValue(l.GetDepth)) + o.Set("getRefund", l.vm.ToValue(l.GetRefund)) + o.Set("getError", l.vm.ToValue(l.GetError)) + // Setup nested objects. + o.Set("op", l.op.setupObject()) + o.Set("stack", l.stack.setupObject()) + o.Set("memory", l.memory.setupObject()) + o.Set("contract", l.contract.setupObject()) + return o +} diff --git a/eth/tracers/internal/tracers/4byte_tracer.js b/eth/tracers/js/internal/tracers/4byte_tracer_legacy.js similarity index 98% rename from eth/tracers/internal/tracers/4byte_tracer.js rename to eth/tracers/js/internal/tracers/4byte_tracer_legacy.js index 462b4ad4..e4714b8b 100644 --- a/eth/tracers/internal/tracers/4byte_tracer.js +++ b/eth/tracers/js/internal/tracers/4byte_tracer_legacy.js @@ -46,7 +46,7 @@ return false; }, - // store save the given indentifier and datasize. + // store save the given identifier and datasize. store: function(id, size){ var key = "" + toHex(id) + "-" + size; this.ids[key] = this.ids[key] + 1 || 1; diff --git a/eth/tracers/internal/tracers/bigram_tracer.js b/eth/tracers/js/internal/tracers/bigram_tracer.js similarity index 100% rename from eth/tracers/internal/tracers/bigram_tracer.js rename to eth/tracers/js/internal/tracers/bigram_tracer.js diff --git a/eth/tracers/internal/tracers/call_tracer.js b/eth/tracers/js/internal/tracers/call_tracer_legacy.js similarity index 92% rename from eth/tracers/internal/tracers/call_tracer.js rename to eth/tracers/js/internal/tracers/call_tracer_legacy.js index f8b383cd..3ca73777 100644 --- a/eth/tracers/internal/tracers/call_tracer.js +++ b/eth/tracers/js/internal/tracers/call_tracer_legacy.js @@ -61,7 +61,14 @@ if (this.callstack[left-1].calls === undefined) { this.callstack[left-1].calls = []; } - this.callstack[left-1].calls.push({type: op}); + this.callstack[left-1].calls.push({ + type: op, + from: toHex(log.contract.getAddress()), + to: toHex(toAddress(log.stack.peek(0).toString(16))), + gasIn: log.getGas(), + gasCost: log.getCost(), + value: '0x' + db.getBalance(log.contract.getAddress()).toString(16) + }); return } // If a new method invocation is being done, add to the call stack @@ -132,13 +139,12 @@ // If the call was a contract call, retrieve the gas usage and output if (call.gas !== undefined) { call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost + call.gas - log.getGas()).toString(16); - - var ret = log.stack.peek(0); - if (!ret.equals(0)) { - call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen)); - } else if (call.error === undefined) { - call.error = "internal failure"; // TODO(karalabe): surface these faults somehow - } + } + var ret = log.stack.peek(0); + if (!ret.equals(0)) { + call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen)); + } else if (call.error === undefined) { + call.error = "internal failure"; // TODO(karalabe): surface these faults somehow } delete call.gasIn; delete call.gasCost; delete call.outOff; delete call.outLen; @@ -208,7 +214,7 @@ } else if (ctx.error !== undefined) { result.error = ctx.error; } - if (result.error !== undefined) { + if (result.error !== undefined && (result.error !== "execution reverted" || result.output ==="0x")) { delete result.output; } return this.finalize(result); diff --git a/eth/tracers/internal/tracers/evmdis_tracer.js b/eth/tracers/js/internal/tracers/evmdis_tracer.js similarity index 98% rename from eth/tracers/internal/tracers/evmdis_tracer.js rename to eth/tracers/js/internal/tracers/evmdis_tracer.js index bb19777a..c841c57f 100644 --- a/eth/tracers/internal/tracers/evmdis_tracer.js +++ b/eth/tracers/js/internal/tracers/evmdis_tracer.js @@ -71,12 +71,12 @@ opinfo["ops"] = []; this.stack.push(opinfo); break; - case "RETURN": + case "RETURN": case "REVERT": var out = log.stack.peek(0).valueOf(); var outsize = log.stack.peek(1).valueOf(); frame.return = log.memory.slice(out, out + outsize); break; - case "STOP": case "SUICIDE": + case "STOP": case "SELFDESTRUCT": frame.return = log.memory.slice(0, 0); break; case "JUMPDEST": diff --git a/eth/tracers/internal/tracers/noop_tracer.js b/eth/tracers/js/internal/tracers/noop_tracer_legacy.js similarity index 100% rename from eth/tracers/internal/tracers/noop_tracer.js rename to eth/tracers/js/internal/tracers/noop_tracer_legacy.js diff --git a/eth/tracers/internal/tracers/opcount_tracer.js b/eth/tracers/js/internal/tracers/opcount_tracer.js similarity index 100% rename from eth/tracers/internal/tracers/opcount_tracer.js rename to eth/tracers/js/internal/tracers/opcount_tracer.js diff --git a/eth/tracers/internal/tracers/prestate_tracer.js b/eth/tracers/js/internal/tracers/prestate_tracer_legacy.js similarity index 92% rename from eth/tracers/internal/tracers/prestate_tracer.js rename to eth/tracers/js/internal/tracers/prestate_tracer_legacy.js index e0a22bf1..77f25209 100644 --- a/eth/tracers/internal/tracers/prestate_tracer.js +++ b/eth/tracers/js/internal/tracers/prestate_tracer_legacy.js @@ -47,6 +47,13 @@ // result is invoked when all the opcodes have been iterated over and returns // the final result of the tracing. result: function(ctx, db) { + if (this.prestate === null) { + this.prestate = {}; + // If tx is transfer-only, the recipient account + // hasn't been populated. + this.lookupAccount(ctx.to, db); + } + // At this point, we need to deduct the 'value' from the // outer transaction, and move it back to the origin this.lookupAccount(ctx.from, db); @@ -55,7 +62,7 @@ var toBal = bigInt(this.prestate[toHex(ctx.to)].balance.slice(2), 16); this.prestate[toHex(ctx.to)].balance = '0x'+toBal.subtract(ctx.value).toString(16); - this.prestate[toHex(ctx.from)].balance = '0x'+fromBal.add(ctx.value).toString(16); + this.prestate[toHex(ctx.from)].balance = '0x'+fromBal.add(ctx.value).add((ctx.gasUsed + ctx.intrinsicGas) * ctx.gasPrice).toString(16); // Decrement the caller's nonce, and remove empty create targets this.prestate[toHex(ctx.from)].nonce--; @@ -79,7 +86,7 @@ } // Whenever new state is accessed, add it to the prestate switch (log.op.toString()) { - case "EXTCODECOPY": case "EXTCODESIZE": case "BALANCE": + case "EXTCODECOPY": case "EXTCODESIZE": case "EXTCODEHASH": case "BALANCE": this.lookupAccount(toAddress(log.stack.peek(0).toString(16)), db); break; case "CREATE": diff --git a/eth/tracers/js/internal/tracers/tracers.go b/eth/tracers/js/internal/tracers/tracers.go new file mode 100644 index 00000000..6547f1b0 --- /dev/null +++ b/eth/tracers/js/internal/tracers/tracers.go @@ -0,0 +1,59 @@ +// 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 tracers contains the actual JavaScript tracer assets. +package tracers + +import ( + "embed" + "io/fs" + "strings" + "unicode" +) + +//go:embed *.js +var files embed.FS + +// Load reads the built-in JS tracer files embedded in the binary and +// returns a mapping of tracer name to source. +func Load() (map[string]string, error) { + var assetTracers = make(map[string]string) + err := fs.WalkDir(files, ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + b, err := fs.ReadFile(files, path) + if err != nil { + return err + } + name := camel(strings.TrimSuffix(path, ".js")) + assetTracers[name] = string(b) + return nil + }) + return assetTracers, err +} + +// camel converts a snake cased input string into a camel cased output. +func camel(str string) string { + pieces := strings.Split(str, "_") + for i := 1; i < len(pieces); i++ { + pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] + } + return strings.Join(pieces, "") +} diff --git a/eth/tracers/internal/tracers/trigram_tracer.js b/eth/tracers/js/internal/tracers/trigram_tracer.js similarity index 100% rename from eth/tracers/internal/tracers/trigram_tracer.js rename to eth/tracers/js/internal/tracers/trigram_tracer.js diff --git a/eth/tracers/internal/tracers/unigram_tracer.js b/eth/tracers/js/internal/tracers/unigram_tracer.js similarity index 95% rename from eth/tracers/internal/tracers/unigram_tracer.js rename to eth/tracers/js/internal/tracers/unigram_tracer.js index 000fb13b..51107d8f 100644 --- a/eth/tracers/internal/tracers/unigram_tracer.js +++ b/eth/tracers/js/internal/tracers/unigram_tracer.js @@ -36,8 +36,6 @@ // result is invoked when all the opcodes have been iterated over and returns // the final result of the tracing. result: function(ctx) { - if(this.nops > 0){ - return this.hist; - } + return this.hist; }, } diff --git a/eth/tracers/js/tracer_test.go b/eth/tracers/js/tracer_test.go new file mode 100644 index 00000000..80a002d5 --- /dev/null +++ b/eth/tracers/js/tracer_test.go @@ -0,0 +1,306 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package js + +import ( + "encoding/json" + "errors" + "math/big" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/params" +) + +type account struct{} + +func (account) SubBalance(amount *big.Int) {} +func (account) AddBalance(amount *big.Int) {} +func (account) SetAddress(common.Address) {} +func (account) Value() *big.Int { return nil } +func (account) SetBalance(*big.Int) {} +func (account) SetNonce(uint64) {} +func (account) Balance() *big.Int { return nil } +func (account) Address() common.Address { return common.Address{} } +func (account) SetCode(common.Hash, []byte) {} +func (account) ForEachStorage(cb func(key, value common.Hash) bool) {} + +type dummyStatedb struct { + state.StateDB +} + +func (*dummyStatedb) GetRefund() uint64 { return 1337 } +func (*dummyStatedb) GetBalance(addr common.Address) *big.Int { return new(big.Int) } + +type vmContext struct { + blockCtx vm.BlockContext + txCtx vm.TxContext +} + +func testCtx() *vmContext { + return &vmContext{blockCtx: vm.BlockContext{BlockNumber: big.NewInt(1)}, txCtx: vm.TxContext{GasPrice: big.NewInt(100000)}} +} + +func runTrace(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainConfig) (json.RawMessage, error) { + var ( + env = vm.NewEVM(vmctx.blockCtx, vmctx.txCtx, &dummyStatedb{}, chaincfg, vm.Config{Debug: true, Tracer: tracer}) + gasLimit uint64 = 31000 + startGas uint64 = 10000 + value = big.NewInt(0) + contract = vm.NewContract(account{}, account{}, value, startGas) + ) + contract.Code = []byte{byte(vm.PUSH1), 0x1, byte(vm.PUSH1), 0x1, 0x0} + + tracer.CaptureTxStart(gasLimit) + tracer.CaptureStart(env, contract.Caller(), contract.Address(), false, []byte{}, startGas, value) + ret, err := env.Interpreter().Run(contract, []byte{}, false) + tracer.CaptureEnd(ret, startGas-contract.Gas, 1, err) + // Rest gas assumes no refund + tracer.CaptureTxEnd(startGas - contract.Gas) + if err != nil { + return nil, err + } + return tracer.GetResult() +} + +func TestTracer(t *testing.T) { + execTracer := func(code string) ([]byte, string) { + t.Helper() + tracer, err := newJsTracer(code, nil, nil) + if err != nil { + t.Fatal(err) + } + ret, err := runTrace(tracer, testCtx(), params.TestChainConfig) + if err != nil { + return nil, err.Error() // Stringify to allow comparison without nil checks + } + return ret, "" + } + for i, tt := range []struct { + code string + want string + fail string + }{ + { // tests that we don't panic on bad arguments to memory access + code: "{depths: [], step: function(log) { this.depths.push(log.memory.slice(-1,-2)); }, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound memory: offset -1, end -2 at step (:1:53(15)) in server-side tracer function 'step'", + }, { // tests that we don't panic on bad arguments to stack peeks + code: "{depths: [], step: function(log) { this.depths.push(log.stack.peek(-1)); }, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound stack: size 0, index -1 at step (:1:53(13)) in server-side tracer function 'step'", + }, { // tests that we don't panic on bad arguments to memory getUint + code: "{ depths: [], step: function(log, db) { this.depths.push(log.memory.getUint(-64));}, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound memory: available 0, offset -64, size 32 at step (:1:58(13)) in server-side tracer function 'step'", + }, { // tests some general counting + code: "{count: 0, step: function() { this.count += 1; }, fault: function() {}, result: function() { return this.count; }}", + want: `3`, + }, { // tests that depth is reported correctly + code: "{depths: [], step: function(log) { this.depths.push(log.stack.length()); }, fault: function() {}, result: function() { return this.depths; }}", + want: `[0,1,2]`, + }, { // tests memory length + code: "{lengths: [], step: function(log) { this.lengths.push(log.memory.length()); }, fault: function() {}, result: function() { return this.lengths; }}", + want: `[0,0,0]`, + }, { // tests to-string of opcodes + code: "{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, fault: function() {}, result: function() { return this.opcodes; }}", + want: `["PUSH1","PUSH1","STOP"]`, + }, { // tests intrinsic gas + code: "{depths: [], step: function() {}, fault: function() {}, result: function(ctx) { return ctx.gasPrice+'.'+ctx.gasUsed+'.'+ctx.intrinsicGas; }}", + want: `"100000.6.21000"`, + }, { + code: "{res: null, step: function(log) {}, fault: function() {}, result: function() { return toWord('0xffaa') }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":255,"31":170}`, + }, { // test feeding a buffer back into go + code: "{res: null, step: function(log) { var address = log.contract.getAddress(); this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, { + code: "{res: null, step: function(log) { var address = '0x0000000000000000000000000000000000000000'; this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, { + code: "{res: null, step: function(log) { var address = Array.prototype.slice.call(log.contract.getAddress()); this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, + } { + if have, err := execTracer(tt.code); tt.want != string(have) || tt.fail != err { + t.Errorf("testcase %d: expected return value to be '%s' got '%s', error to be '%s' got '%s'\n\tcode: %v", i, tt.want, string(have), tt.fail, err, tt.code) + } + } +} + +func TestHalt(t *testing.T) { + timeout := errors.New("stahp") + tracer, err := newJsTracer("{step: function() { while(1); }, result: function() { return null; }, fault: function(){}}", nil, nil) + if err != nil { + t.Fatal(err) + } + go func() { + time.Sleep(1 * time.Second) + tracer.Stop(timeout) + }() + if _, err = runTrace(tracer, testCtx(), params.TestChainConfig); !strings.Contains(err.Error(), "stahp") { + t.Errorf("Expected timeout error, got %v", err) + } +} + +func TestHaltBetweenSteps(t *testing.T) { + tracer, err := newJsTracer("{step: function() {}, fault: function() {}, result: function() { return null; }}", nil, nil) + if err != nil { + t.Fatal(err) + } + env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(1)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer}) + scope := &vm.ScopeContext{ + Contract: vm.NewContract(&account{}, &account{}, big.NewInt(0), 0), + } + tracer.CaptureStart(env, common.Address{}, common.Address{}, false, []byte{}, 0, big.NewInt(0)) + tracer.CaptureState(0, 0, 0, 0, scope, nil, 0, nil) + timeout := errors.New("stahp") + tracer.Stop(timeout) + tracer.CaptureState(0, 0, 0, 0, scope, nil, 0, nil) + + if _, err := tracer.GetResult(); !strings.Contains(err.Error(), timeout.Error()) { + t.Errorf("Expected timeout error, got %v", err) + } +} + +// testNoStepExec tests a regular value transfer (no exec), and accessing the statedb +// in 'result' +func TestNoStepExec(t *testing.T) { + execTracer := func(code string) []byte { + t.Helper() + tracer, err := newJsTracer(code, nil, nil) + if err != nil { + t.Fatal(err) + } + env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(100)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer}) + tracer.CaptureStart(env, common.Address{}, common.Address{}, false, []byte{}, 1000, big.NewInt(0)) + tracer.CaptureEnd(nil, 0, 1, nil) + ret, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + return ret + } + for i, tt := range []struct { + code string + want string + }{ + { // tests that we don't panic on accessing the db methods + code: "{depths: [], step: function() {}, fault: function() {}, result: function(ctx, db){ return db.getBalance(ctx.to)} }", + want: `"0"`, + }, + } { + if have := execTracer(tt.code); tt.want != string(have) { + t.Errorf("testcase %d: expected return value to be %s got %s\n\tcode: %v", i, tt.want, string(have), tt.code) + } + } +} + +func TestIsPrecompile(t *testing.T) { + chaincfg := ¶ms.ChainConfig{ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), DAOForkBlock: nil, DAOForkSupport: false, EIP150Block: big.NewInt(0), EIP150Hash: common.Hash{}, EIP155Block: big.NewInt(0), EIP158Block: big.NewInt(0), ByzantiumBlock: big.NewInt(100), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(200), MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(300), LondonBlock: big.NewInt(0), TerminalTotalDifficulty: nil, Ethash: new(params.EthashConfig), Clique: nil} + chaincfg.ByzantiumBlock = big.NewInt(100) + chaincfg.IstanbulBlock = big.NewInt(200) + chaincfg.BerlinBlock = big.NewInt(300) + txCtx := vm.TxContext{GasPrice: big.NewInt(100000)} + tracer, err := newJsTracer("{addr: toAddress('0000000000000000000000000000000000000009'), res: null, step: function() { this.res = isPrecompiled(this.addr); }, fault: function() {}, result: function() { return this.res; }}", nil, nil) + if err != nil { + t.Fatal(err) + } + + blockCtx := vm.BlockContext{BlockNumber: big.NewInt(150)} + res, err := runTrace(tracer, &vmContext{blockCtx, txCtx}, chaincfg) + if err != nil { + t.Error(err) + } + if string(res) != "false" { + t.Errorf("tracer should not consider blake2f as precompile in byzantium") + } + + tracer, _ = newJsTracer("{addr: toAddress('0000000000000000000000000000000000000009'), res: null, step: function() { this.res = isPrecompiled(this.addr); }, fault: function() {}, result: function() { return this.res; }}", nil, nil) + blockCtx = vm.BlockContext{BlockNumber: big.NewInt(250)} + res, err = runTrace(tracer, &vmContext{blockCtx, txCtx}, chaincfg) + if err != nil { + t.Error(err) + } + if string(res) != "true" { + t.Errorf("tracer should consider blake2f as precompile in istanbul") + } +} + +func TestEnterExit(t *testing.T) { + // test that either both or none of enter() and exit() are defined + if _, err := newJsTracer("{step: function() {}, fault: function() {}, result: function() { return null; }, enter: function() {}}", new(tracers.Context), nil); err == nil { + t.Fatal("tracer creation should've failed without exit() definition") + } + if _, err := newJsTracer("{step: function() {}, fault: function() {}, result: function() { return null; }, enter: function() {}, exit: function() {}}", new(tracers.Context), nil); err != nil { + t.Fatal(err) + } + // test that the enter and exit method are correctly invoked and the values passed + tracer, err := newJsTracer("{enters: 0, exits: 0, enterGas: 0, gasUsed: 0, step: function() {}, fault: function() {}, result: function() { return {enters: this.enters, exits: this.exits, enterGas: this.enterGas, gasUsed: this.gasUsed} }, enter: function(frame) { this.enters++; this.enterGas = frame.getGas(); }, exit: function(res) { this.exits++; this.gasUsed = res.getGasUsed(); }}", new(tracers.Context), nil) + if err != nil { + t.Fatal(err) + } + scope := &vm.ScopeContext{ + Contract: vm.NewContract(&account{}, &account{}, big.NewInt(0), 0), + } + tracer.CaptureEnter(vm.CALL, scope.Contract.Caller(), scope.Contract.Address(), []byte{}, 1000, new(big.Int)) + tracer.CaptureExit([]byte{}, 400, nil) + + have, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + want := `{"enters":1,"exits":1,"enterGas":1000,"gasUsed":400}` + if string(have) != want { + t.Errorf("Number of invocations of enter() and exit() is wrong. Have %s, want %s\n", have, want) + } +} + +func TestSetup(t *testing.T) { + // Test empty config + _, err := newJsTracer(`{setup: function(cfg) { if (cfg !== "{}") { throw("invalid empty config") } }, fault: function() {}, result: function() {}}`, new(tracers.Context), nil) + if err != nil { + t.Error(err) + } + + cfg, err := json.Marshal(map[string]string{"foo": "bar"}) + if err != nil { + t.Fatal(err) + } + // Test no setup func + _, err = newJsTracer(`{fault: function() {}, result: function() {}}`, new(tracers.Context), cfg) + if err != nil { + t.Fatal(err) + } + // Test config value + tracer, err := newJsTracer("{config: null, setup: function(cfg) { this.config = JSON.parse(cfg) }, step: function() {}, fault: function() {}, result: function() { return this.config.foo }}", new(tracers.Context), cfg) + if err != nil { + t.Fatal(err) + } + have, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + if string(have) != `"bar"` { + t.Errorf("tracer returned wrong result. have: %s, want: \"bar\"\n", string(have)) + } +} diff --git a/eth/tracers/logger/access_list_tracer.go b/eth/tracers/logger/access_list_tracer.go new file mode 100644 index 00000000..a8908094 --- /dev/null +++ b/eth/tracers/logger/access_list_tracer.go @@ -0,0 +1,184 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package logger + +import ( + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" +) + +// accessList is an accumulator for the set of accounts and storage slots an EVM +// contract execution touches. +type accessList map[common.Address]accessListSlots + +// accessListSlots is an accumulator for the set of storage slots within a single +// contract that an EVM contract execution touches. +type accessListSlots map[common.Hash]struct{} + +// newAccessList creates a new accessList. +func newAccessList() accessList { + return make(map[common.Address]accessListSlots) +} + +// addAddress adds an address to the accesslist. +func (al accessList) addAddress(address common.Address) { + // Set address if not previously present + if _, present := al[address]; !present { + al[address] = make(map[common.Hash]struct{}) + } +} + +// addSlot adds a storage slot to the accesslist. +func (al accessList) addSlot(address common.Address, slot common.Hash) { + // Set address if not previously present + al.addAddress(address) + + // Set the slot on the surely existent storage set + al[address][slot] = struct{}{} +} + +// equal checks if the content of the current access list is the same as the +// content of the other one. +func (al accessList) equal(other accessList) bool { + // Cross reference the accounts first + if len(al) != len(other) { + return false + } + // Given that len(al) == len(other), we only need to check that + // all the items from al are in other. + for addr := range al { + if _, ok := other[addr]; !ok { + return false + } + } + + // Accounts match, cross reference the storage slots too + for addr, slots := range al { + otherslots := other[addr] + + if len(slots) != len(otherslots) { + return false + } + // Given that len(slots) == len(otherslots), we only need to check that + // all the items from slots are in otherslots. + for hash := range slots { + if _, ok := otherslots[hash]; !ok { + return false + } + } + } + return true +} + +// accesslist converts the accesslist to a types.AccessList. +func (al accessList) accessList() types.AccessList { + acl := make(types.AccessList, 0, len(al)) + for addr, slots := range al { + tuple := types.AccessTuple{Address: addr, StorageKeys: []common.Hash{}} + for slot := range slots { + tuple.StorageKeys = append(tuple.StorageKeys, slot) + } + acl = append(acl, tuple) + } + return acl +} + +// AccessListTracer is a tracer that accumulates touched accounts and storage +// slots into an internal set. +type AccessListTracer struct { + excl map[common.Address]struct{} // Set of account to exclude from the list + list accessList // Set of accounts and storage slots touched +} + +// NewAccessListTracer creates a new tracer that can generate AccessLists. +// An optional AccessList can be specified to occupy slots and addresses in +// the resulting accesslist. +func NewAccessListTracer(acl types.AccessList, from, to common.Address, precompiles []common.Address) *AccessListTracer { + excl := map[common.Address]struct{}{ + from: {}, to: {}, + } + for _, addr := range precompiles { + excl[addr] = struct{}{} + } + list := newAccessList() + for _, al := range acl { + if _, ok := excl[al.Address]; !ok { + list.addAddress(al.Address) + } + for _, slot := range al.StorageKeys { + list.addSlot(al.Address, slot) + } + } + return &AccessListTracer{ + excl: excl, + list: list, + } +} + +func (a *AccessListTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { +} + +// CaptureState captures all opcodes that touch storage or addresses and adds them to the accesslist. +func (a *AccessListTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + stack := scope.Stack + stackData := stack.Data() + stackLen := len(stackData) + if (op == vm.SLOAD || op == vm.SSTORE) && stackLen >= 1 { + slot := common.Hash(stackData[stackLen-1].Bytes32()) + a.list.addSlot(scope.Contract.Address(), slot) + } + if (op == vm.EXTCODECOPY || op == vm.EXTCODEHASH || op == vm.EXTCODESIZE || op == vm.BALANCE || op == vm.SELFDESTRUCT) && stackLen >= 1 { + addr := common.Address(stackData[stackLen-1].Bytes20()) + if _, ok := a.excl[addr]; !ok { + a.list.addAddress(addr) + } + } + if (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE) && stackLen >= 5 { + addr := common.Address(stackData[stackLen-2].Bytes20()) + if _, ok := a.excl[addr]; !ok { + a.list.addAddress(addr) + } + } +} + +func (*AccessListTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { +} + +func (*AccessListTracer) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) {} + +func (*AccessListTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +func (*AccessListTracer) CaptureExit(output []byte, gasUsed uint64, err error) {} + +func (*AccessListTracer) CaptureTxStart(gasLimit uint64) {} + +func (*AccessListTracer) CaptureTxEnd(restGas uint64) {} + +// AccessList returns the current accesslist maintained by the tracer. +func (a *AccessListTracer) AccessList() types.AccessList { + return a.list.accessList() +} + +// Equal returns if the content of two access list traces are equal. +func (a *AccessListTracer) Equal(other *AccessListTracer) bool { + return a.list.equal(other.list) +} diff --git a/core/vm/gen_structlog.go b/eth/tracers/logger/gen_structlog.go similarity index 71% rename from core/vm/gen_structlog.go rename to eth/tracers/logger/gen_structlog.go index 6146a819..df06a9ee 100644 --- a/core/vm/gen_structlog.go +++ b/eth/tracers/logger/gen_structlog.go @@ -1,14 +1,15 @@ // Code generated by github.com/fjl/gencodec. DO NOT EDIT. -package vm +package logger import ( "encoding/json" - "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" + "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/vm" + "github.com/holiman/uint256" ) var _ = (*structLogMarshaling)(nil) @@ -17,18 +18,19 @@ var _ = (*structLogMarshaling)(nil) func (s StructLog) MarshalJSON() ([]byte, error) { type StructLog struct { Pc uint64 `json:"pc"` - Op OpCode `json:"op"` + Op vm.OpCode `json:"op"` Gas math.HexOrDecimal64 `json:"gas"` GasCost math.HexOrDecimal64 `json:"gasCost"` - Memory hexutil.Bytes `json:"memory"` + Memory hexutil.Bytes `json:"memory,omitempty"` MemorySize int `json:"memSize"` - Stack []*math.HexOrDecimal256 `json:"stack"` + Stack []uint256.Int `json:"stack"` + ReturnData hexutil.Bytes `json:"returnData,omitempty"` Storage map[common.Hash]common.Hash `json:"-"` Depth int `json:"depth"` RefundCounter uint64 `json:"refund"` Err error `json:"-"` OpName string `json:"opName"` - ErrorString string `json:"error"` + ErrorString string `json:"error,omitempty"` } var enc StructLog enc.Pc = s.Pc @@ -37,12 +39,8 @@ func (s StructLog) MarshalJSON() ([]byte, error) { enc.GasCost = math.HexOrDecimal64(s.GasCost) enc.Memory = s.Memory enc.MemorySize = s.MemorySize - if s.Stack != nil { - enc.Stack = make([]*math.HexOrDecimal256, len(s.Stack)) - for k, v := range s.Stack { - enc.Stack[k] = (*math.HexOrDecimal256)(v) - } - } + enc.Stack = s.Stack + enc.ReturnData = s.ReturnData enc.Storage = s.Storage enc.Depth = s.Depth enc.RefundCounter = s.RefundCounter @@ -56,12 +54,13 @@ func (s StructLog) MarshalJSON() ([]byte, error) { func (s *StructLog) UnmarshalJSON(input []byte) error { type StructLog struct { Pc *uint64 `json:"pc"` - Op *OpCode `json:"op"` + Op *vm.OpCode `json:"op"` Gas *math.HexOrDecimal64 `json:"gas"` GasCost *math.HexOrDecimal64 `json:"gasCost"` - Memory *hexutil.Bytes `json:"memory"` + Memory *hexutil.Bytes `json:"memory,omitempty"` MemorySize *int `json:"memSize"` - Stack []*math.HexOrDecimal256 `json:"stack"` + Stack []uint256.Int `json:"stack"` + ReturnData *hexutil.Bytes `json:"returnData,omitempty"` Storage map[common.Hash]common.Hash `json:"-"` Depth *int `json:"depth"` RefundCounter *uint64 `json:"refund"` @@ -90,10 +89,10 @@ func (s *StructLog) UnmarshalJSON(input []byte) error { s.MemorySize = *dec.MemorySize } if dec.Stack != nil { - s.Stack = make([]*big.Int, len(dec.Stack)) - for k, v := range dec.Stack { - s.Stack[k] = (*big.Int)(v) - } + s.Stack = dec.Stack + } + if dec.ReturnData != nil { + s.ReturnData = *dec.ReturnData } if dec.Storage != nil { s.Storage = dec.Storage diff --git a/eth/tracers/logger/logger.go b/eth/tracers/logger/logger.go new file mode 100644 index 00000000..07aa2f2b --- /dev/null +++ b/eth/tracers/logger/logger.go @@ -0,0 +1,464 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package logger + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "io" + "math/big" + "strings" + "sync/atomic" + "time" + + "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/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" +) + +// Storage represents a contract's storage. +type Storage map[common.Hash]common.Hash + +// Copy duplicates the current storage. +func (s Storage) Copy() Storage { + cpy := make(Storage, len(s)) + for key, value := range s { + cpy[key] = value + } + return cpy +} + +// Config are the configuration options for structured logger the EVM +type Config struct { + EnableMemory bool // enable memory capture + DisableStack bool // disable stack capture + DisableStorage bool // disable storage capture + EnableReturnData bool // enable return data capture + Debug bool // print output during capture end + Limit int // maximum length of output, but zero means unlimited + // Chain overrides, can be used to execute a trace using future fork rules + Overrides *params.ChainConfig `json:"overrides,omitempty"` +} + +//go:generate go run github.com/fjl/gencodec -type StructLog -field-override structLogMarshaling -out gen_structlog.go + +// StructLog is emitted to the EVM each cycle and lists information about the current internal state +// prior to the execution of the statement. +type StructLog struct { + Pc uint64 `json:"pc"` + Op vm.OpCode `json:"op"` + Gas uint64 `json:"gas"` + GasCost uint64 `json:"gasCost"` + Memory []byte `json:"memory,omitempty"` + MemorySize int `json:"memSize"` + Stack []uint256.Int `json:"stack"` + ReturnData []byte `json:"returnData,omitempty"` + Storage map[common.Hash]common.Hash `json:"-"` + Depth int `json:"depth"` + RefundCounter uint64 `json:"refund"` + Err error `json:"-"` +} + +// overrides for gencodec +type structLogMarshaling struct { + Gas math.HexOrDecimal64 + GasCost math.HexOrDecimal64 + Memory hexutil.Bytes + ReturnData hexutil.Bytes + OpName string `json:"opName"` // adds call to OpName() in MarshalJSON + ErrorString string `json:"error,omitempty"` // adds call to ErrorString() in MarshalJSON +} + +// OpName formats the operand name in a human-readable format. +func (s *StructLog) OpName() string { + return s.Op.String() +} + +// ErrorString formats the log's error as a string. +func (s *StructLog) ErrorString() string { + if s.Err != nil { + return s.Err.Error() + } + return "" +} + +// StructLogger is an EVM state logger and implements EVMLogger. +// +// StructLogger can capture state based on the given Log configuration and also keeps +// a track record of modified storage which is used in reporting snapshots of the +// contract their storage. +type StructLogger struct { + cfg Config + env *vm.EVM + + storage map[common.Address]Storage + logs []StructLog + output []byte + err error + gasLimit uint64 + usedGas uint64 + + interrupt uint32 // Atomic flag to signal execution interruption + reason error // Textual reason for the interruption +} + +// NewStructLogger returns a new logger +func NewStructLogger(cfg *Config) *StructLogger { + logger := &StructLogger{ + storage: make(map[common.Address]Storage), + } + if cfg != nil { + logger.cfg = *cfg + } + return logger +} + +// Reset clears the data held by the logger. +func (l *StructLogger) Reset() { + l.storage = make(map[common.Address]Storage) + l.output = make([]byte, 0) + l.logs = l.logs[:0] + l.err = nil +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (l *StructLogger) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + l.env = env +} + +// CaptureState logs a new structured log message and pushes it out to the environment +// +// CaptureState also tracks SLOAD/SSTORE ops to track storage change. +func (l *StructLogger) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + // If tracing was interrupted, set the error and stop + if atomic.LoadUint32(&l.interrupt) > 0 { + l.env.Cancel() + return + } + // check if already accumulated the specified number of logs + if l.cfg.Limit != 0 && l.cfg.Limit <= len(l.logs) { + return + } + + memory := scope.Memory + stack := scope.Stack + contract := scope.Contract + // Copy a snapshot of the current memory state to a new buffer + var mem []byte + if l.cfg.EnableMemory { + mem = make([]byte, len(memory.Data())) + copy(mem, memory.Data()) + } + // Copy a snapshot of the current stack state to a new buffer + var stck []uint256.Int + if !l.cfg.DisableStack { + stck = make([]uint256.Int, len(stack.Data())) + for i, item := range stack.Data() { + stck[i] = item + } + } + stackData := stack.Data() + stackLen := len(stackData) + // Copy a snapshot of the current storage to a new container + var storage Storage + if !l.cfg.DisableStorage && (op == vm.SLOAD || op == vm.SSTORE) { + // initialise new changed values storage container for this contract + // if not present. + if l.storage[contract.Address()] == nil { + l.storage[contract.Address()] = make(Storage) + } + // capture SLOAD opcodes and record the read entry in the local storage + if op == vm.SLOAD && stackLen >= 1 { + var ( + address = common.Hash(stackData[stackLen-1].Bytes32()) + value = l.env.StateDB.GetState(contract.Address(), address) + ) + l.storage[contract.Address()][address] = value + storage = l.storage[contract.Address()].Copy() + } else if op == vm.SSTORE && stackLen >= 2 { + // capture SSTORE opcodes and record the written entry in the local storage. + var ( + value = common.Hash(stackData[stackLen-2].Bytes32()) + address = common.Hash(stackData[stackLen-1].Bytes32()) + ) + l.storage[contract.Address()][address] = value + storage = l.storage[contract.Address()].Copy() + } + } + var rdata []byte + if l.cfg.EnableReturnData { + rdata = make([]byte, len(rData)) + copy(rdata, rData) + } + // create a new snapshot of the EVM. + log := StructLog{pc, op, gas, cost, mem, memory.Len(), stck, rdata, storage, depth, l.env.StateDB.GetRefund(), err} + l.logs = append(l.logs, log) +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault +// while running an opcode. +func (l *StructLogger) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (l *StructLogger) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) { + l.output = output + l.err = err + if l.cfg.Debug { + fmt.Printf("%#x\n", output) + if err != nil { + fmt.Printf(" error: %v\n", err) + } + } +} + +func (l *StructLogger) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +func (l *StructLogger) CaptureExit(output []byte, gasUsed uint64, err error) { +} + +func (l *StructLogger) GetResult() (json.RawMessage, error) { + // Tracing aborted + if l.reason != nil { + return nil, l.reason + } + failed := l.err != nil + returnData := common.CopyBytes(l.output) + // Return data when successful and revert reason when reverted, otherwise empty. + returnVal := fmt.Sprintf("%x", returnData) + if failed && l.err != vm.ErrExecutionReverted { + returnVal = "" + } + return json.Marshal(&ExecutionResult{ + Gas: l.usedGas, + Failed: failed, + ReturnValue: returnVal, + StructLogs: formatLogs(l.StructLogs()), + }) +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (l *StructLogger) Stop(err error) { + l.reason = err + atomic.StoreUint32(&l.interrupt, 1) +} + +func (l *StructLogger) CaptureTxStart(gasLimit uint64) { + l.gasLimit = gasLimit +} + +func (l *StructLogger) CaptureTxEnd(restGas uint64) { + l.usedGas = l.gasLimit - restGas +} + +// StructLogs returns the captured log entries. +func (l *StructLogger) StructLogs() []StructLog { return l.logs } + +// Error returns the VM error captured by the trace. +func (l *StructLogger) Error() error { return l.err } + +// Output returns the VM return value captured by the trace. +func (l *StructLogger) Output() []byte { return l.output } + +// WriteTrace writes a formatted trace to the given writer +func WriteTrace(writer io.Writer, logs []StructLog) { + for _, log := range logs { + fmt.Fprintf(writer, "%-16spc=%08d gas=%v cost=%v", log.Op, log.Pc, log.Gas, log.GasCost) + if log.Err != nil { + fmt.Fprintf(writer, " ERROR: %v", log.Err) + } + fmt.Fprintln(writer) + + if len(log.Stack) > 0 { + fmt.Fprintln(writer, "Stack:") + for i := len(log.Stack) - 1; i >= 0; i-- { + fmt.Fprintf(writer, "%08d %s\n", len(log.Stack)-i-1, log.Stack[i].Hex()) + } + } + if len(log.Memory) > 0 { + fmt.Fprintln(writer, "Memory:") + fmt.Fprint(writer, hex.Dump(log.Memory)) + } + if len(log.Storage) > 0 { + fmt.Fprintln(writer, "Storage:") + for h, item := range log.Storage { + fmt.Fprintf(writer, "%x: %x\n", h, item) + } + } + if len(log.ReturnData) > 0 { + fmt.Fprintln(writer, "ReturnData:") + fmt.Fprint(writer, hex.Dump(log.ReturnData)) + } + fmt.Fprintln(writer) + } +} + +// WriteLogs writes vm logs in a readable format to the given writer +func WriteLogs(writer io.Writer, logs []*types.Log) { + for _, log := range logs { + fmt.Fprintf(writer, "LOG%d: %x bn=%d txi=%x\n", len(log.Topics), log.Address, log.BlockNumber, log.TxIndex) + + for i, topic := range log.Topics { + fmt.Fprintf(writer, "%08d %x\n", i, topic) + } + + fmt.Fprint(writer, hex.Dump(log.Data)) + fmt.Fprintln(writer) + } +} + +type mdLogger struct { + out io.Writer + cfg *Config + env *vm.EVM +} + +// NewMarkdownLogger creates a logger which outputs information in a format adapted +// for human readability, and is also a valid markdown table +func NewMarkdownLogger(cfg *Config, writer io.Writer) *mdLogger { + l := &mdLogger{out: writer, cfg: cfg} + if l.cfg == nil { + l.cfg = &Config{} + } + return l +} + +func (t *mdLogger) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.env = env + if !create { + fmt.Fprintf(t.out, "From: `%v`\nTo: `%v`\nData: `%#x`\nGas: `%d`\nValue `%v` wei\n", + from.String(), to.String(), + input, gas, value) + } else { + fmt.Fprintf(t.out, "From: `%v`\nCreate at: `%v`\nData: `%#x`\nGas: `%d`\nValue `%v` wei\n", + from.String(), to.String(), + input, gas, value) + } + + fmt.Fprintf(t.out, ` +| Pc | Op | Cost | Stack | RStack | Refund | +|-------|-------------|------|-----------|-----------|---------| +`) +} + +// CaptureState also tracks SLOAD/SSTORE ops to track storage change. +func (t *mdLogger) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + stack := scope.Stack + fmt.Fprintf(t.out, "| %4d | %10v | %3d |", pc, op, cost) + + if !t.cfg.DisableStack { + // format stack + var a []string + for _, elem := range stack.Data() { + a = append(a, elem.Hex()) + } + b := fmt.Sprintf("[%v]", strings.Join(a, ",")) + fmt.Fprintf(t.out, "%10v |", b) + } + fmt.Fprintf(t.out, "%10v |", t.env.StateDB.GetRefund()) + fmt.Fprintln(t.out, "") + if err != nil { + fmt.Fprintf(t.out, "Error: %v\n", err) + } +} + +func (t *mdLogger) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { + fmt.Fprintf(t.out, "\nError: at pc=%d, op=%v: %v\n", pc, op, err) +} + +func (t *mdLogger) CaptureEnd(output []byte, gasUsed uint64, tm time.Duration, err error) { + fmt.Fprintf(t.out, "\nOutput: `%#x`\nConsumed gas: `%d`\nError: `%v`\n", + output, gasUsed, err) +} + +func (t *mdLogger) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +func (t *mdLogger) CaptureExit(output []byte, gasUsed uint64, err error) {} + +func (*mdLogger) CaptureTxStart(gasLimit uint64) {} + +func (*mdLogger) CaptureTxEnd(restGas uint64) {} + +// 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 +type ExecutionResult struct { + Gas uint64 `json:"gas"` + Failed bool `json:"failed"` + ReturnValue string `json:"returnValue"` + StructLogs []StructLogRes `json:"structLogs"` +} + +// StructLogRes stores a structured log emitted by the EVM while replaying a +// transaction in debug mode +type StructLogRes struct { + Pc uint64 `json:"pc"` + Op string `json:"op"` + Gas uint64 `json:"gas"` + GasCost uint64 `json:"gasCost"` + Depth int `json:"depth"` + Error string `json:"error,omitempty"` + Stack *[]string `json:"stack,omitempty"` + Memory *[]string `json:"memory,omitempty"` + Storage *map[string]string `json:"storage,omitempty"` + RefundCounter uint64 `json:"refund,omitempty"` +} + +// formatLogs formats EVM returned structured logs for json output +func formatLogs(logs []StructLog) []StructLogRes { + formatted := make([]StructLogRes, len(logs)) + for index, trace := range logs { + formatted[index] = StructLogRes{ + Pc: trace.Pc, + Op: trace.Op.String(), + Gas: trace.Gas, + GasCost: trace.GasCost, + Depth: trace.Depth, + Error: trace.ErrorString(), + RefundCounter: trace.RefundCounter, + } + if trace.Stack != nil { + stack := make([]string, len(trace.Stack)) + for i, stackValue := range trace.Stack { + stack[i] = stackValue.Hex() + } + formatted[index].Stack = &stack + } + if trace.Memory != nil { + memory := make([]string, 0, (len(trace.Memory)+31)/32) + for i := 0; i+32 <= len(trace.Memory); i += 32 { + memory = append(memory, fmt.Sprintf("%x", trace.Memory[i:i+32])) + } + formatted[index].Memory = &memory + } + if trace.Storage != nil { + storage := make(map[string]string) + for i, storageValue := range trace.Storage { + storage[fmt.Sprintf("%x", i)] = fmt.Sprintf("%x", storageValue) + } + formatted[index].Storage = &storage + } + } + return formatted +} diff --git a/core/vm/logger_json.go b/eth/tracers/logger/logger_json.go similarity index 51% rename from core/vm/logger_json.go rename to eth/tracers/logger/logger_json.go index cce14439..838d5017 100644 --- a/core/vm/logger_json.go +++ b/eth/tracers/logger/logger_json.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2021 The go-ethereum 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,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 vm +package logger import ( "encoding/json" @@ -22,66 +22,83 @@ import ( "math/big" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/vm" ) type JSONLogger struct { encoder *json.Encoder - cfg *LogConfig + cfg *Config + env *vm.EVM } // NewJSONLogger creates a new EVM tracer that prints execution steps as JSON objects // into the provided stream. -func NewJSONLogger(cfg *LogConfig, writer io.Writer) *JSONLogger { - l := &JSONLogger{json.NewEncoder(writer), cfg} +func NewJSONLogger(cfg *Config, writer io.Writer) *JSONLogger { + l := &JSONLogger{encoder: json.NewEncoder(writer), cfg: cfg} if l.cfg == nil { - l.cfg = &LogConfig{} + l.cfg = &Config{} } return l } -func (l *JSONLogger) CaptureStart(from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) error { - return nil +func (l *JSONLogger) CaptureStart(env *vm.EVM, from, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + l.env = env +} + +func (l *JSONLogger) CaptureFault(pc uint64, op vm.OpCode, gas uint64, cost uint64, scope *vm.ScopeContext, depth int, err error) { + // TODO: Add rData to this interface as well + l.CaptureState(pc, op, gas, cost, scope, nil, depth, err) } // CaptureState outputs state information on the logger. -func (l *JSONLogger) CaptureState(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error { +func (l *JSONLogger) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + memory := scope.Memory + stack := scope.Stack + log := StructLog{ Pc: pc, Op: op, Gas: gas, GasCost: cost, MemorySize: memory.Len(), - Storage: nil, Depth: depth, - RefundCounter: env.StateDB.GetRefund(), + RefundCounter: l.env.StateDB.GetRefund(), Err: err, } - if !l.cfg.DisableMemory { + if l.cfg.EnableMemory { log.Memory = memory.Data() } if !l.cfg.DisableStack { log.Stack = stack.Data() } - return l.encoder.Encode(log) -} - -// CaptureFault outputs state information on the logger. -func (l *JSONLogger) CaptureFault(env *EVM, pc uint64, op OpCode, gas, cost uint64, memory *Memory, stack *Stack, contract *Contract, depth int, err error) error { - return nil + if l.cfg.EnableReturnData { + log.ReturnData = rData + } + l.encoder.Encode(log) } // CaptureEnd is triggered at end of execution. -func (l *JSONLogger) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) error { +func (l *JSONLogger) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) { type endLog struct { Output string `json:"output"` GasUsed math.HexOrDecimal64 `json:"gasUsed"` Time time.Duration `json:"time"` Err string `json:"error,omitempty"` } + var errMsg string if err != nil { - return l.encoder.Encode(endLog{common.Bytes2Hex(output), math.HexOrDecimal64(gasUsed), t, err.Error()}) + errMsg = err.Error() } - return l.encoder.Encode(endLog{common.Bytes2Hex(output), math.HexOrDecimal64(gasUsed), t, ""}) + l.encoder.Encode(endLog{common.Bytes2Hex(output), math.HexOrDecimal64(gasUsed), t, errMsg}) } + +func (l *JSONLogger) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +func (l *JSONLogger) CaptureExit(output []byte, gasUsed uint64, err error) {} + +func (l *JSONLogger) CaptureTxStart(gasLimit uint64) {} + +func (l *JSONLogger) CaptureTxEnd(restGas uint64) {} diff --git a/eth/tracers/logger/logger_test.go b/eth/tracers/logger/logger_test.go new file mode 100644 index 00000000..1bc7456d --- /dev/null +++ b/eth/tracers/logger/logger_test.go @@ -0,0 +1,107 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package logger + +import ( + "encoding/json" + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" +) + +type dummyContractRef struct { + calledForEach bool +} + +func (dummyContractRef) Address() common.Address { return common.Address{} } +func (dummyContractRef) Value() *big.Int { return new(big.Int) } +func (dummyContractRef) SetCode(common.Hash, []byte) {} +func (d *dummyContractRef) ForEachStorage(callback func(key, value common.Hash) bool) { + d.calledForEach = true +} +func (d *dummyContractRef) SubBalance(amount *big.Int) {} +func (d *dummyContractRef) AddBalance(amount *big.Int) {} +func (d *dummyContractRef) SetBalance(*big.Int) {} +func (d *dummyContractRef) SetNonce(uint64) {} +func (d *dummyContractRef) Balance() *big.Int { return new(big.Int) } + +type dummyStatedb struct { + state.StateDB +} + +func (*dummyStatedb) GetRefund() uint64 { return 1337 } +func (*dummyStatedb) GetState(_ common.Address, _ common.Hash) common.Hash { return common.Hash{} } +func (*dummyStatedb) SetState(_ common.Address, _ common.Hash, _ common.Hash) {} + +func TestStoreCapture(t *testing.T) { + var ( + logger = NewStructLogger(nil) + env = vm.NewEVM(vm.BlockContext{}, vm.TxContext{}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: logger}) + contract = vm.NewContract(&dummyContractRef{}, &dummyContractRef{}, new(big.Int), 100000) + ) + contract.Code = []byte{byte(vm.PUSH1), 0x1, byte(vm.PUSH1), 0x0, byte(vm.SSTORE)} + var index common.Hash + logger.CaptureStart(env, common.Address{}, contract.Address(), false, nil, 0, nil) + _, err := env.Interpreter().Run(contract, []byte{}, false) + if err != nil { + t.Fatal(err) + } + if len(logger.storage[contract.Address()]) == 0 { + t.Fatalf("expected exactly 1 changed value on address %x, got %d", contract.Address(), + len(logger.storage[contract.Address()])) + } + exp := common.BigToHash(big.NewInt(1)) + if logger.storage[contract.Address()][index] != exp { + t.Errorf("expected %x, got %x", exp, logger.storage[contract.Address()][index]) + } +} + +// Tests that blank fields don't appear in logs when JSON marshalled, to reduce +// logs bloat and confusion. See https://github.com/ethereum/go-ethereum/issues/24487 +func TestStructLogMarshalingOmitEmpty(t *testing.T) { + tests := []struct { + name string + log *StructLog + want string + }{ + {"empty err and no fields", &StructLog{}, + `{"pc":0,"op":0,"gas":"0x0","gasCost":"0x0","memSize":0,"stack":null,"depth":0,"refund":0,"opName":"STOP"}`}, + {"with err", &StructLog{Err: fmt.Errorf("this failed")}, + `{"pc":0,"op":0,"gas":"0x0","gasCost":"0x0","memSize":0,"stack":null,"depth":0,"refund":0,"opName":"STOP","error":"this failed"}`}, + {"with mem", &StructLog{Memory: make([]byte, 2), MemorySize: 2}, + `{"pc":0,"op":0,"gas":"0x0","gasCost":"0x0","memory":"0x0000","memSize":2,"stack":null,"depth":0,"refund":0,"opName":"STOP"}`}, + {"with 0-size mem", &StructLog{Memory: make([]byte, 0)}, + `{"pc":0,"op":0,"gas":"0x0","gasCost":"0x0","memSize":0,"stack":null,"depth":0,"refund":0,"opName":"STOP"}`}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + blob, err := json.Marshal(tt.log) + if err != nil { + t.Fatal(err) + } + if have, want := string(blob), tt.want; have != want { + t.Fatalf("mismatched results\n\thave: %v\n\twant: %v", have, want) + } + }) + } +} diff --git a/eth/tracers/native/4byte.go b/eth/tracers/native/4byte.go new file mode 100644 index 00000000..34e608bf --- /dev/null +++ b/eth/tracers/native/4byte.go @@ -0,0 +1,152 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package native + +import ( + "encoding/json" + "math/big" + "strconv" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +func init() { + register("4byteTracer", newFourByteTracer) +} + +// fourByteTracer searches for 4byte-identifiers, and collects them for post-processing. +// It collects the methods identifiers along with the size of the supplied data, so +// a reversed signature can be matched against the size of the data. +// +// Example: +// > debug.traceTransaction( "0x214e597e35da083692f5386141e69f47e973b2c56e7a8073b1ea08fd7571e9de", {tracer: "4byteTracer"}) +// { +// 0x27dc297e-128: 1, +// 0x38cc4831-0: 2, +// 0x524f3889-96: 1, +// 0xadf59f99-288: 1, +// 0xc281d19e-0: 1 +// } +type fourByteTracer struct { + env *vm.EVM + ids map[string]int // ids aggregates the 4byte ids found + interrupt uint32 // Atomic flag to signal execution interruption + reason error // Textual reason for the interruption + activePrecompiles []common.Address // Updated on CaptureStart based on given rules +} + +// newFourByteTracer returns a native go tracer which collects +// 4 byte-identifiers of a tx, and implements vm.EVMLogger. +func newFourByteTracer(ctx *tracers.Context, _ json.RawMessage) (tracers.Tracer, error) { + t := &fourByteTracer{ + ids: make(map[string]int), + } + return t, nil +} + +// isPrecompiled returns whether the addr is a precompile. Logic borrowed from newJsTracer in eth/tracers/js/tracer.go +func (t *fourByteTracer) isPrecompiled(addr common.Address) bool { + for _, p := range t.activePrecompiles { + if p == addr { + return true + } + } + return false +} + +// store saves the given identifier and datasize. +func (t *fourByteTracer) store(id []byte, size int) { + key := bytesToHex(id) + "-" + strconv.Itoa(size) + t.ids[key] += 1 +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (t *fourByteTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.env = env + + // Update list of precompiles based on current block + rules := env.ChainConfig().Rules(env.Context.BlockNumber, env.Context.Random != nil) + t.activePrecompiles = vm.ActivePrecompiles(rules) + + // Save the outer calldata also + if len(input) >= 4 { + t.store(input[0:4], len(input)-4) + } +} + +// CaptureState implements the EVMLogger interface to trace a single step of VM execution. +func (t *fourByteTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *fourByteTracer) CaptureEnter(op vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { + // Skip if tracing was interrupted + if atomic.LoadUint32(&t.interrupt) > 0 { + t.env.Cancel() + return + } + if len(input) < 4 { + return + } + // primarily we want to avoid CREATE/CREATE2/SELFDESTRUCT + if op != vm.DELEGATECALL && op != vm.STATICCALL && + op != vm.CALL && op != vm.CALLCODE { + return + } + // Skip any pre-compile invocations, those are just fancy opcodes + if t.isPrecompiled(to) { + return + } + t.store(input[0:4], len(input)-4) +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *fourByteTracer) CaptureExit(output []byte, gasUsed uint64, err error) { +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault. +func (t *fourByteTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *fourByteTracer) CaptureEnd(output []byte, gasUsed uint64, _ time.Duration, err error) { +} + +func (*fourByteTracer) CaptureTxStart(gasLimit uint64) {} + +func (*fourByteTracer) CaptureTxEnd(restGas uint64) {} + +// GetResult returns the json-encoded nested list of call traces, and any +// error arising from the encoding or forceful termination (via `Stop`). +func (t *fourByteTracer) GetResult() (json.RawMessage, error) { + res, err := json.Marshal(t.ids) + if err != nil { + return nil, err + } + return res, t.reason +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *fourByteTracer) Stop(err error) { + t.reason = err + atomic.StoreUint32(&t.interrupt, 1) +} diff --git a/eth/tracers/native/call.go b/eth/tracers/native/call.go new file mode 100644 index 00000000..7af0e658 --- /dev/null +++ b/eth/tracers/native/call.go @@ -0,0 +1,202 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package native + +import ( + "encoding/json" + "errors" + "math/big" + "strconv" + "strings" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +func init() { + register("callTracer", newCallTracer) +} + +type callFrame struct { + Type string `json:"type"` + From string `json:"from"` + To string `json:"to,omitempty"` + Value string `json:"value,omitempty"` + Gas string `json:"gas"` + GasUsed string `json:"gasUsed"` + Input string `json:"input"` + Output string `json:"output,omitempty"` + Error string `json:"error,omitempty"` + Calls []callFrame `json:"calls,omitempty"` +} + +type callTracer struct { + env *vm.EVM + callstack []callFrame + config callTracerConfig + interrupt uint32 // Atomic flag to signal execution interruption + reason error // Textual reason for the interruption +} + +type callTracerConfig struct { + OnlyTopCall bool `json:"onlyTopCall"` // If true, call tracer won't collect any subcalls +} + +// newCallTracer returns a native go tracer which tracks +// call frames of a tx, and implements vm.EVMLogger. +func newCallTracer(ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, error) { + var config callTracerConfig + if cfg != nil { + if err := json.Unmarshal(cfg, &config); err != nil { + return nil, err + } + } + // First callframe contains tx context info + // and is populated on start and end. + return &callTracer{callstack: make([]callFrame, 1), config: config}, nil +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (t *callTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.env = env + t.callstack[0] = callFrame{ + Type: "CALL", + From: addrToHex(from), + To: addrToHex(to), + Input: bytesToHex(input), + Gas: uintToHex(gas), + Value: bigToHex(value), + } + if create { + t.callstack[0].Type = "CREATE" + } +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *callTracer) CaptureEnd(output []byte, gasUsed uint64, _ time.Duration, err error) { + t.callstack[0].GasUsed = uintToHex(gasUsed) + if err != nil { + t.callstack[0].Error = err.Error() + if err.Error() == "execution reverted" && len(output) > 0 { + t.callstack[0].Output = bytesToHex(output) + } + } else { + t.callstack[0].Output = bytesToHex(output) + } +} + +// CaptureState implements the EVMLogger interface to trace a single step of VM execution. +func (t *callTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault. +func (t *callTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, _ *vm.ScopeContext, depth int, err error) { +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *callTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { + if t.config.OnlyTopCall { + return + } + // Skip if tracing was interrupted + if atomic.LoadUint32(&t.interrupt) > 0 { + t.env.Cancel() + return + } + + call := callFrame{ + Type: typ.String(), + From: addrToHex(from), + To: addrToHex(to), + Input: bytesToHex(input), + Gas: uintToHex(gas), + Value: bigToHex(value), + } + t.callstack = append(t.callstack, call) +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *callTracer) CaptureExit(output []byte, gasUsed uint64, err error) { + if t.config.OnlyTopCall { + return + } + size := len(t.callstack) + if size <= 1 { + return + } + // pop call + call := t.callstack[size-1] + t.callstack = t.callstack[:size-1] + size -= 1 + + call.GasUsed = uintToHex(gasUsed) + if err == nil { + call.Output = bytesToHex(output) + } else { + call.Error = err.Error() + if call.Type == "CREATE" || call.Type == "CREATE2" { + call.To = "" + } + } + t.callstack[size-1].Calls = append(t.callstack[size-1].Calls, call) +} + +func (*callTracer) CaptureTxStart(gasLimit uint64) {} + +func (*callTracer) CaptureTxEnd(restGas uint64) {} + +// GetResult returns the json-encoded nested list of call traces, and any +// error arising from the encoding or forceful termination (via `Stop`). +func (t *callTracer) GetResult() (json.RawMessage, error) { + if len(t.callstack) != 1 { + return nil, errors.New("incorrect number of top-level calls") + } + res, err := json.Marshal(t.callstack[0]) + if err != nil { + return nil, err + } + return json.RawMessage(res), t.reason +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *callTracer) Stop(err error) { + t.reason = err + atomic.StoreUint32(&t.interrupt, 1) +} + +func bytesToHex(s []byte) string { + return "0x" + common.Bytes2Hex(s) +} + +func bigToHex(n *big.Int) string { + if n == nil { + return "" + } + return "0x" + n.Text(16) +} + +func uintToHex(n uint64) string { + return "0x" + strconv.FormatUint(n, 16) +} + +func addrToHex(a common.Address) string { + return strings.ToLower(a.Hex()) +} diff --git a/eth/tracers/native/noop.go b/eth/tracers/native/noop.go new file mode 100644 index 00000000..c252b240 --- /dev/null +++ b/eth/tracers/native/noop.go @@ -0,0 +1,78 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package native + +import ( + "encoding/json" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +func init() { + register("noopTracer", newNoopTracer) +} + +// noopTracer is a go implementation of the Tracer interface which +// performs no action. It's mostly useful for testing purposes. +type noopTracer struct{} + +// newNoopTracer returns a new noop tracer. +func newNoopTracer(ctx *tracers.Context, _ json.RawMessage) (tracers.Tracer, error) { + return &noopTracer{}, nil +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (t *noopTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *noopTracer) CaptureEnd(output []byte, gasUsed uint64, _ time.Duration, err error) { +} + +// CaptureState implements the EVMLogger interface to trace a single step of VM execution. +func (t *noopTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault. +func (t *noopTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, _ *vm.ScopeContext, depth int, err error) { +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *noopTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *noopTracer) CaptureExit(output []byte, gasUsed uint64, err error) { +} + +func (*noopTracer) CaptureTxStart(gasLimit uint64) {} + +func (*noopTracer) CaptureTxEnd(restGas uint64) {} + +// GetResult returns an empty json object. +func (t *noopTracer) GetResult() (json.RawMessage, error) { + return json.RawMessage(`{}`), nil +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *noopTracer) Stop(err error) { +} diff --git a/eth/tracers/native/prestate.go b/eth/tracers/native/prestate.go new file mode 100644 index 00000000..b513f383 --- /dev/null +++ b/eth/tracers/native/prestate.go @@ -0,0 +1,178 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package native + +import ( + "encoding/json" + "math/big" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +func init() { + register("prestateTracer", newPrestateTracer) +} + +type prestate = map[common.Address]*account +type account struct { + Balance string `json:"balance"` + Nonce uint64 `json:"nonce"` + Code string `json:"code"` + Storage map[common.Hash]common.Hash `json:"storage"` +} + +type prestateTracer struct { + env *vm.EVM + prestate prestate + create bool + to common.Address + gasLimit uint64 // Amount of gas bought for the whole tx + interrupt uint32 // Atomic flag to signal execution interruption + reason error // Textual reason for the interruption +} + +func newPrestateTracer(ctx *tracers.Context, _ json.RawMessage) (tracers.Tracer, error) { + // First callframe contains tx context info + // and is populated on start and end. + return &prestateTracer{prestate: prestate{}}, nil +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (t *prestateTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.env = env + t.create = create + t.to = to + + t.lookupAccount(from) + t.lookupAccount(to) + + // The recipient balance includes the value transferred. + toBal := hexutil.MustDecodeBig(t.prestate[to].Balance) + toBal = new(big.Int).Sub(toBal, value) + t.prestate[to].Balance = hexutil.EncodeBig(toBal) + + // The sender balance is after reducing: value and gasLimit. + // We need to re-add them to get the pre-tx balance. + fromBal := hexutil.MustDecodeBig(t.prestate[from].Balance) + gasPrice := env.TxContext.GasPrice + consumedGas := new(big.Int).Mul(gasPrice, new(big.Int).SetUint64(t.gasLimit)) + fromBal.Add(fromBal, new(big.Int).Add(value, consumedGas)) + t.prestate[from].Balance = hexutil.EncodeBig(fromBal) + t.prestate[from].Nonce-- +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *prestateTracer) CaptureEnd(output []byte, gasUsed uint64, _ time.Duration, err error) { + if t.create { + // Exclude created contract. + delete(t.prestate, t.to) + } +} + +// CaptureState implements the EVMLogger interface to trace a single step of VM execution. +func (t *prestateTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + stack := scope.Stack + stackData := stack.Data() + stackLen := len(stackData) + switch { + case stackLen >= 1 && (op == vm.SLOAD || op == vm.SSTORE): + slot := common.Hash(stackData[stackLen-1].Bytes32()) + t.lookupStorage(scope.Contract.Address(), slot) + case stackLen >= 1 && (op == vm.EXTCODECOPY || op == vm.EXTCODEHASH || op == vm.EXTCODESIZE || op == vm.BALANCE || op == vm.SELFDESTRUCT): + addr := common.Address(stackData[stackLen-1].Bytes20()) + t.lookupAccount(addr) + case stackLen >= 5 && (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE): + addr := common.Address(stackData[stackLen-2].Bytes20()) + t.lookupAccount(addr) + case op == vm.CREATE: + addr := scope.Contract.Address() + nonce := t.env.StateDB.GetNonce(addr) + t.lookupAccount(crypto.CreateAddress(addr, nonce)) + case stackLen >= 4 && op == vm.CREATE2: + offset := stackData[stackLen-2] + size := stackData[stackLen-3] + init := scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) + inithash := crypto.Keccak256(init) + salt := stackData[stackLen-4] + t.lookupAccount(crypto.CreateAddress2(scope.Contract.Address(), salt.Bytes32(), inithash)) + } +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault. +func (t *prestateTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, _ *vm.ScopeContext, depth int, err error) { +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *prestateTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *prestateTracer) CaptureExit(output []byte, gasUsed uint64, err error) { +} + +func (t *prestateTracer) CaptureTxStart(gasLimit uint64) { + t.gasLimit = gasLimit +} + +func (t *prestateTracer) CaptureTxEnd(restGas uint64) {} + +// GetResult returns the json-encoded nested list of call traces, and any +// error arising from the encoding or forceful termination (via `Stop`). +func (t *prestateTracer) GetResult() (json.RawMessage, error) { + res, err := json.Marshal(t.prestate) + if err != nil { + return nil, err + } + return json.RawMessage(res), t.reason +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *prestateTracer) Stop(err error) { + t.reason = err + atomic.StoreUint32(&t.interrupt, 1) +} + +// lookupAccount fetches details of an account and adds it to the prestate +// if it doesn't exist there. +func (t *prestateTracer) lookupAccount(addr common.Address) { + if _, ok := t.prestate[addr]; ok { + return + } + t.prestate[addr] = &account{ + Balance: bigToHex(t.env.StateDB.GetBalance(addr)), + Nonce: t.env.StateDB.GetNonce(addr), + Code: bytesToHex(t.env.StateDB.GetCode(addr)), + Storage: make(map[common.Hash]common.Hash), + } +} + +// lookupStorage fetches the requested storage slot and adds +// it to the prestate of the given contract. It assumes `lookupAccount` +// has been performed on the contract before. +func (t *prestateTracer) lookupStorage(addr common.Address, key common.Hash) { + if _, ok := t.prestate[addr].Storage[key]; ok { + return + } + t.prestate[addr].Storage[key] = t.env.StateDB.GetState(addr, key) +} diff --git a/eth/tracers/native/revertreason.go b/eth/tracers/native/revertreason.go new file mode 100644 index 00000000..d09b8610 --- /dev/null +++ b/eth/tracers/native/revertreason.go @@ -0,0 +1,108 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package native + +import ( + "bytes" + "encoding/json" + "math/big" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +func init() { + register("revertReasonTracer", newRevertReasonTracer) +} + +var revertSelector = crypto.Keccak256([]byte("Error(string)"))[:4] + +// revertReasonTracer is a go implementation of the Tracer interface which +// track the error message or revert reason return by the contract. +type revertReasonTracer struct { + env *vm.EVM + revertReason string // The revert reason return from the tx, if tx success, empty string return + interrupt uint32 // Atomic flag to signal execution interruption + reason error // Textual reason for the interruption +} + +// newRevertReasonTracer returns a new revert reason tracer. +func newRevertReasonTracer(_ *tracers.Context, _ json.RawMessage) (tracers.Tracer, error) { + return &revertReasonTracer{}, nil +} + +// CaptureStart implements the EVMLogger interface to initialize the tracing operation. +func (t *revertReasonTracer) CaptureStart(env *vm.EVM, _ common.Address, _ common.Address, _ bool, _ []byte, _ uint64, _ *big.Int) { + t.env = env +} + +// CaptureEnd is called after the call finishes to finalize the tracing. +func (t *revertReasonTracer) CaptureEnd(output []byte, _ uint64, _ time.Duration, err error) { + if err != nil { + if err == vm.ErrExecutionReverted && len(output) > 4 && bytes.Equal(output[:4], revertSelector) { + errMsg, _ := abi.UnpackRevert(output) + t.revertReason = err.Error() + ": " + errMsg + } else { + t.revertReason = err.Error() + } + } +} + +// CaptureState implements the EVMLogger interface to trace a single step of VM execution. +func (t *revertReasonTracer) CaptureState(_ uint64, _ vm.OpCode, _, _ uint64, _ *vm.ScopeContext, _ []byte, _ int, _ error) { +} + +// CaptureFault implements the EVMLogger interface to trace an execution fault. +func (t *revertReasonTracer) CaptureFault(_ uint64, _ vm.OpCode, _, _ uint64, _ *vm.ScopeContext, _ int, _ error) { +} + +// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). +func (t *revertReasonTracer) CaptureEnter(_ vm.OpCode, _ common.Address, _ common.Address, _ []byte, _ uint64, _ *big.Int) { + // Skip if tracing was interrupted + if atomic.LoadUint32(&t.interrupt) > 0 { + t.env.Cancel() + return + } +} + +// CaptureExit is called when EVM exits a scope, even if the scope didn't +// execute any code. +func (t *revertReasonTracer) CaptureExit(_ []byte, _ uint64, _ error) {} + +func (t *revertReasonTracer) CaptureTxStart(_ uint64) {} + +func (t *revertReasonTracer) CaptureTxEnd(_ uint64) {} + +// GetResult returns an error message json object. +func (t *revertReasonTracer) GetResult() (json.RawMessage, error) { + res, err := json.Marshal(t.revertReason) + if err != nil { + return nil, err + } + return res, t.reason +} + +// Stop terminates execution of the tracer at the first opportune moment. +func (t *revertReasonTracer) Stop(err error) { + t.reason = err + atomic.StoreUint32(&t.interrupt, 1) +} diff --git a/eth/tracers/native/tracer.go b/eth/tracers/native/tracer.go new file mode 100644 index 00000000..9587caf1 --- /dev/null +++ b/eth/tracers/native/tracer.go @@ -0,0 +1,83 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +/* +Package native is a collection of tracers written in go. + +In order to add a native tracer and have it compiled into the binary, a new +file needs to be added to this folder, containing an implementation of the +`eth.tracers.Tracer` interface. + +Aside from implementing the tracer, it also needs to register itself, using the +`register` method -- and this needs to be done in the package initialization. + +Example: + +```golang +func init() { + register("noopTracerNative", newNoopTracer) +} +``` +*/ +package native + +import ( + "encoding/json" + "errors" + + "github.com/ethereum/go-ethereum/eth/tracers" +) + +// init registers itself this packages as a lookup for tracers. +func init() { + tracers.RegisterLookup(false, lookup) +} + +// ctorFn is the constructor signature of a native tracer. +type ctorFn = func(*tracers.Context, json.RawMessage) (tracers.Tracer, error) + +/* +ctors is a map of package-local tracer constructors. + +We cannot be certain about the order of init-functions within a package, +The go spec (https://golang.org/ref/spec#Package_initialization) says + +> To ensure reproducible initialization behavior, build systems +> are encouraged to present multiple files belonging to the same +> package in lexical file name order to a compiler. + +Hence, we cannot make the map in init, but must make it upon first use. +*/ +var ctors map[string]ctorFn + +// register is used by native tracers to register their presence. +func register(name string, ctor ctorFn) { + if ctors == nil { + ctors = make(map[string]ctorFn) + } + ctors[name] = ctor +} + +// lookup returns a tracer, if one can be matched to the given name. +func lookup(name string, ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, error) { + if ctors == nil { + ctors = make(map[string]ctorFn) + } + if ctor, ok := ctors[name]; ok { + return ctor(ctx, cfg) + } + return nil, errors.New("no tracer found") +} diff --git a/eth/tracers/tracer_test.go b/eth/tracers/tracer_test.go deleted file mode 100644 index 3362e755..00000000 --- a/eth/tracers/tracer_test.go +++ /dev/null @@ -1,147 +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 tracers - -import ( - "bytes" - "encoding/json" - "errors" - "math/big" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" -) - -type account struct{} - -func (account) SubBalance(amount *big.Int) {} -func (account) AddBalance(amount *big.Int) {} -func (account) SetAddress(common.Address) {} -func (account) Value() *big.Int { return nil } -func (account) SetBalance(*big.Int) {} -func (account) SetNonce(uint64) {} -func (account) Balance() *big.Int { return nil } -func (account) Address() common.Address { return common.Address{} } -func (account) ReturnGas(*big.Int) {} -func (account) SetCode(common.Hash, []byte) {} -func (account) ForEachStorage(cb func(key, value common.Hash) bool) {} - -type dummyStatedb struct { - state.StateDB -} - -func (*dummyStatedb) GetRefund() uint64 { return 1337 } - -func runTrace(tracer *Tracer) (json.RawMessage, error) { - env := vm.NewEVM(vm.Context{BlockNumber: big.NewInt(1)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer}) - - contract := vm.NewContract(account{}, account{}, big.NewInt(0), 10000) - contract.Code = []byte{byte(vm.PUSH1), 0x1, byte(vm.PUSH1), 0x1, 0x0} - - _, err := env.Interpreter().Run(contract, []byte{}, false) - if err != nil { - return nil, err - } - return tracer.GetResult() -} - -func TestTracing(t *testing.T) { - tracer, err := New("{count: 0, step: function() { this.count += 1; }, fault: function() {}, result: function() { return this.count; }}") - if err != nil { - t.Fatal(err) - } - - ret, err := runTrace(tracer) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(ret, []byte("3")) { - t.Errorf("Expected return value to be 3, got %s", string(ret)) - } -} - -func TestStack(t *testing.T) { - tracer, err := New("{depths: [], step: function(log) { this.depths.push(log.stack.length()); }, fault: function() {}, result: function() { return this.depths; }}") - if err != nil { - t.Fatal(err) - } - - ret, err := runTrace(tracer) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(ret, []byte("[0,1,2]")) { - t.Errorf("Expected return value to be [0,1,2], got %s", string(ret)) - } -} - -func TestOpcodes(t *testing.T) { - tracer, err := New("{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, fault: function() {}, result: function() { return this.opcodes; }}") - if err != nil { - t.Fatal(err) - } - - ret, err := runTrace(tracer) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(ret, []byte("[\"PUSH1\",\"PUSH1\",\"STOP\"]")) { - t.Errorf("Expected return value to be [\"PUSH1\",\"PUSH1\",\"STOP\"], got %s", string(ret)) - } -} - -func TestHalt(t *testing.T) { - t.Skip("duktape doesn't support abortion") - - timeout := errors.New("stahp") - tracer, err := New("{step: function() { while(1); }, result: function() { return null; }}") - if err != nil { - t.Fatal(err) - } - - go func() { - time.Sleep(1 * time.Second) - tracer.Stop(timeout) - }() - - if _, err = runTrace(tracer); err.Error() != "stahp in server-side tracer function 'step'" { - t.Errorf("Expected timeout error, got %v", err) - } -} - -func TestHaltBetweenSteps(t *testing.T) { - tracer, err := New("{step: function() {}, fault: function() {}, result: function() { return null; }}") - if err != nil { - t.Fatal(err) - } - - env := vm.NewEVM(vm.Context{BlockNumber: big.NewInt(1)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer}) - contract := vm.NewContract(&account{}, &account{}, big.NewInt(0), 0) - - tracer.CaptureState(env, 0, 0, 0, 0, nil, nil, contract, 0, nil) - timeout := errors.New("stahp") - tracer.Stop(timeout) - tracer.CaptureState(env, 0, 0, 0, 0, nil, nil, contract, 0, nil) - - if _, err := tracer.GetResult(); err.Error() != timeout.Error() { - t.Errorf("Expected timeout error, got %v", err) - } -} diff --git a/eth/tracers/tracers.go b/eth/tracers/tracers.go index 012bf769..3d2d1256 100644 --- a/eth/tracers/tracers.go +++ b/eth/tracers/tracers.go @@ -14,40 +14,59 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package tracers is a collection of JavaScript transaction tracers. +// Package tracers is a manager for transaction tracing engines. package tracers import ( - "strings" - "unicode" + "encoding/json" + "errors" - "github.com/cryptoecc/ETH-ECC/eth/tracers/internal/tracers" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" ) -// all contains all the built in JavaScript tracers by name. -var all = make(map[string]string) +// Context contains some contextual infos for a transaction execution that is not +// available from within the EVM object. +type Context struct { + BlockHash common.Hash // Hash of the block the tx is contained within (zero if dangling tx or call) + TxIndex int // Index of the transaction within a block (zero if dangling tx or call) + TxHash common.Hash // Hash of the transaction being traced (zero if dangling call) +} -// camel converts a snake cased input string into a camel cased output. -func camel(str string) string { - pieces := strings.Split(str, "_") - for i := 1; i < len(pieces); i++ { - pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] - } - return strings.Join(pieces, "") +// Tracer interface extends vm.EVMLogger and additionally +// allows collecting the tracing result. +type Tracer interface { + vm.EVMLogger + GetResult() (json.RawMessage, error) + // Stop terminates execution of the tracer at the first opportune moment. + Stop(err error) } -// init retrieves the JavaScript transaction tracers included in go-ethereum. -func init() { - for _, file := range tracers.AssetNames() { - name := camel(strings.TrimSuffix(file, ".js")) - all[name] = string(tracers.MustAsset(file)) +type lookupFunc func(string, *Context, json.RawMessage) (Tracer, error) + +var ( + lookups []lookupFunc +) + +// RegisterLookup registers a method as a lookup for tracers, meaning that +// users can invoke a named tracer through that lookup. If 'wildcard' is true, +// then the lookup will be placed last. This is typically meant for interpreted +// engines (js) which can evaluate dynamic user-supplied code. +func RegisterLookup(wildcard bool, lookup lookupFunc) { + if wildcard { + lookups = append(lookups, lookup) + } else { + lookups = append([]lookupFunc{lookup}, lookups...) } } -// tracer retrieves a specific JavaScript tracer by name. -func tracer(name string) (string, bool) { - if tracer, ok := all[name]; ok { - return tracer, true +// New returns a new instance of a tracer, by iterating through the +// registered lookups. +func New(code string, ctx *Context, cfg json.RawMessage) (Tracer, error) { + for _, lookup := range lookups { + if tracer, err := lookup(code, ctx, cfg); err == nil { + return tracer, nil + } } - return "", false + return nil, errors.New("tracer not found") } diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go index b2ca9c13..12e01aba 100644 --- a/eth/tracers/tracers_test.go +++ b/eth/tracers/tracers_test.go @@ -17,261 +17,95 @@ package tracers import ( - "crypto/ecdsa" - "crypto/rand" - "encoding/json" - "io/ioutil" "math/big" - "path/filepath" - "reflect" - "strings" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/tests" + "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/eth/tracers/logger" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/tests" ) -// To generate a new callTracer test, copy paste the makeTest method below into -// a Geth console and call it with a transaction hash you which to export. - -/* -// makeTest generates a callTracer test by running a prestate reassembled and a -// call trace run, assembling all the gathered information into a test case. -var makeTest = function(tx, rewind) { - // Generate the genesis block from the block, transaction and prestate data - var block = eth.getBlock(eth.getTransaction(tx).blockHash); - var genesis = eth.getBlock(block.parentHash); - - delete genesis.gasUsed; - delete genesis.logsBloom; - delete genesis.parentHash; - delete genesis.receiptsRoot; - delete genesis.sha3Uncles; - delete genesis.size; - delete genesis.transactions; - delete genesis.transactionsRoot; - delete genesis.uncles; - - genesis.gasLimit = genesis.gasLimit.toString(); - genesis.number = genesis.number.toString(); - genesis.timestamp = genesis.timestamp.toString(); - - genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer", rewind: rewind}); - for (var key in genesis.alloc) { - genesis.alloc[key].nonce = genesis.alloc[key].nonce.toString(); - } - genesis.config = admin.nodeInfo.protocols.eth.config; - - // Generate the call trace and produce the test input - var result = debug.traceTransaction(tx, {tracer: "callTracer", rewind: rewind}); - delete result.time; - - console.log(JSON.stringify({ - genesis: genesis, - context: { - number: block.number.toString(), - difficulty: block.difficulty, - timestamp: block.timestamp.toString(), - gasLimit: block.gasLimit.toString(), - miner: block.miner, - }, - input: eth.getRawTransaction(tx), - result: result, - }, null, 2)); -} -*/ - -// callTrace is the result of a callTracer run. -type callTrace struct { - Type string `json:"type"` - From common.Address `json:"from"` - To common.Address `json:"to"` - Input hexutil.Bytes `json:"input"` - Output hexutil.Bytes `json:"output"` - Gas *hexutil.Uint64 `json:"gas,omitempty"` - GasUsed *hexutil.Uint64 `json:"gasUsed,omitempty"` - Value *hexutil.Big `json:"value,omitempty"` - Error string `json:"error,omitempty"` - Calls []callTrace `json:"calls,omitempty"` -} - -type callContext struct { - Number math.HexOrDecimal64 `json:"number"` - Difficulty *math.HexOrDecimal256 `json:"difficulty"` - Time math.HexOrDecimal64 `json:"timestamp"` - GasLimit math.HexOrDecimal64 `json:"gasLimit"` - Miner common.Address `json:"miner"` -} - -// callTracerTest defines a single test to check the call tracer against. -type callTracerTest struct { - Genesis *core.Genesis `json:"genesis"` - Context *callContext `json:"context"` - Input string `json:"input"` - Result *callTrace `json:"result"` -} - -func TestPrestateTracerCreate2(t *testing.T) { - unsignedTx := types.NewTransaction(1, common.HexToAddress("0x00000000000000000000000000000000deadbeef"), - new(big.Int), 5000000, big.NewInt(1), []byte{}) - - privateKeyECDSA, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader) +func BenchmarkTransactionTrace(b *testing.B) { + key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + from := crypto.PubkeyToAddress(key.PublicKey) + gas := uint64(1000000) // 1M gas + to := common.HexToAddress("0x00000000000000000000000000000000deadbeef") + signer := types.LatestSignerForChainID(big.NewInt(1337)) + tx, err := types.SignNewTx(key, signer, + &types.LegacyTx{ + Nonce: 1, + GasPrice: big.NewInt(500), + Gas: gas, + To: &to, + }) if err != nil { - t.Fatalf("err %v", err) + b.Fatal(err) } - signer := types.NewEIP155Signer(big.NewInt(1)) - tx, err := types.SignTx(unsignedTx, signer, privateKeyECDSA) - if err != nil { - t.Fatalf("err %v", err) + txContext := vm.TxContext{ + Origin: from, + GasPrice: tx.GasPrice(), } - /** - This comes from one of the test-vectors on the Skinny Create2 - EIP - - address 0x00000000000000000000000000000000deadbeef - salt 0x00000000000000000000000000000000000000000000000000000000cafebabe - init_code 0xdeadbeef - gas (assuming no mem expansion): 32006 - result: 0x60f3f640a8508fC6a86d45DF051962668E1e8AC7 - */ - origin, _ := signer.Sender(tx) - context := vm.Context{ + context := vm.BlockContext{ CanTransfer: core.CanTransfer, Transfer: core.Transfer, - Origin: origin, Coinbase: common.Address{}, - BlockNumber: new(big.Int).SetUint64(8000000), - Time: new(big.Int).SetUint64(5), - Difficulty: big.NewInt(0x30000), - GasLimit: uint64(6000000), - GasPrice: big.NewInt(1), + BlockNumber: new(big.Int).SetUint64(uint64(5)), + Time: new(big.Int).SetUint64(uint64(5)), + Difficulty: big.NewInt(0xffffffff), + GasLimit: gas, + BaseFee: big.NewInt(8), } alloc := core.GenesisAlloc{} - // The code pushes 'deadbeef' into memory, then the other params, and calls CREATE2, then returns // the address + loop := []byte{ + byte(vm.JUMPDEST), // [ count ] + byte(vm.PUSH1), 0, // jumpdestination + byte(vm.JUMP), + } alloc[common.HexToAddress("0x00000000000000000000000000000000deadbeef")] = core.GenesisAccount{ Nonce: 1, - Code: hexutil.MustDecode("0x63deadbeef60005263cafebabe6004601c6000F560005260206000F3"), + Code: loop, Balance: big.NewInt(1), } - alloc[origin] = core.GenesisAccount{ + alloc[from] = core.GenesisAccount{ Nonce: 1, Code: []byte{}, Balance: big.NewInt(500000000000000), } - statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc) - + _, statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc, false) // Create the tracer, the EVM environment and run it - tracer, err := New("prestateTracer") - if err != nil { - t.Fatalf("failed to create call tracer: %v", err) - } - evm := vm.NewEVM(context, statedb, params.MainnetChainConfig, vm.Config{Debug: true, Tracer: tracer}) - - msg, err := tx.AsMessage(signer) - if err != nil { - t.Fatalf("failed to prepare transaction for tracing: %v", err) - } - st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) - if _, _, _, err = st.TransitionDb(); err != nil { - t.Fatalf("failed to execute transaction: %v", err) - } - // Retrieve the trace result and compare against the etalon - res, err := tracer.GetResult() - if err != nil { - t.Fatalf("failed to retrieve trace result: %v", err) - } - ret := make(map[string]interface{}) - if err := json.Unmarshal(res, &ret); err != nil { - t.Fatalf("failed to unmarshal trace result: %v", err) - } - if _, has := ret["0x60f3f640a8508fc6a86d45df051962668e1e8ac7"]; !has { - t.Fatalf("Expected 0x60f3f640a8508fc6a86d45df051962668e1e8ac7 in result") - } -} - -// Iterates over all the input-output datasets in the tracer test harness and -// runs the JavaScript tracers against them. -func TestCallTracer(t *testing.T) { - files, err := ioutil.ReadDir("testdata") + tracer := logger.NewStructLogger(&logger.Config{ + Debug: false, + //DisableStorage: true, + //EnableMemory: false, + //EnableReturnData: false, + }) + evm := vm.NewEVM(context, txContext, statedb, params.AllEthashProtocolChanges, vm.Config{Debug: true, Tracer: tracer}) + msg, err := tx.AsMessage(signer, nil) if err != nil { - t.Fatalf("failed to retrieve tracer test suite: %v", err) + b.Fatalf("failed to prepare transaction for tracing: %v", err) } - for _, file := range files { - if !strings.HasPrefix(file.Name(), "call_tracer_") { - continue + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + snap := statedb.Snapshot() + st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + _, err = st.TransitionDb() + if err != nil { + b.Fatal(err) } - file := file // capture range variable - t.Run(camel(strings.TrimSuffix(strings.TrimPrefix(file.Name(), "call_tracer_"), ".json")), func(t *testing.T) { - t.Parallel() - - // Call tracer test found, read if from disk - blob, err := ioutil.ReadFile(filepath.Join("testdata", file.Name())) - if err != nil { - t.Fatalf("failed to read testcase: %v", err) - } - test := new(callTracerTest) - if err := json.Unmarshal(blob, test); err != nil { - t.Fatalf("failed to parse testcase: %v", err) - } - // Configure a blockchain with the given prestate - tx := new(types.Transaction) - if err := rlp.DecodeBytes(common.FromHex(test.Input), tx); err != nil { - t.Fatalf("failed to parse testcase input: %v", err) - } - signer := types.MakeSigner(test.Genesis.Config, new(big.Int).SetUint64(uint64(test.Context.Number))) - origin, _ := signer.Sender(tx) - - context := vm.Context{ - CanTransfer: core.CanTransfer, - Transfer: core.Transfer, - Origin: origin, - Coinbase: test.Context.Miner, - BlockNumber: new(big.Int).SetUint64(uint64(test.Context.Number)), - Time: new(big.Int).SetUint64(uint64(test.Context.Time)), - Difficulty: (*big.Int)(test.Context.Difficulty), - GasLimit: uint64(test.Context.GasLimit), - GasPrice: tx.GasPrice(), - } - statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc) - - // Create the tracer, the EVM environment and run it - tracer, err := New("callTracer") - if err != nil { - t.Fatalf("failed to create call tracer: %v", err) - } - evm := vm.NewEVM(context, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer}) - - msg, err := tx.AsMessage(signer) - if err != nil { - t.Fatalf("failed to prepare transaction for tracing: %v", err) - } - st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas())) - if _, _, _, err = st.TransitionDb(); err != nil { - t.Fatalf("failed to execute transaction: %v", err) - } - // Retrieve the trace result and compare against the etalon - res, err := tracer.GetResult() - if err != nil { - t.Fatalf("failed to retrieve trace result: %v", err) - } - ret := new(callTrace) - if err := json.Unmarshal(res, ret); err != nil { - t.Fatalf("failed to unmarshal trace result: %v", err) - } - - if !reflect.DeepEqual(ret, test.Result) { - t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result) - } - }) + statedb.RevertToSnapshot(snap) + if have, want := len(tracer.StructLogs()), 244752; have != want { + b.Fatalf("trace wrong, want %d steps, have %d", want, have) + } + tracer.Reset() } } diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index 13369055..766efcf5 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -24,12 +24,11 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum" + "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/rpc" ) // Client defines typed wrappers for the Ethereum RPC API. @@ -61,7 +60,7 @@ func (ec *Client) Close() { // Blockchain Access -// ChainId retrieves the current chain ID for transaction replay protection. +// 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") @@ -88,6 +87,20 @@ func (ec *Client) BlockByNumber(ctx context.Context, number *big.Int) (*types.Bl return ec.getBlock(ctx, "eth_getBlockByNumber", toBlockNumArg(number), true) } +// BlockNumber returns the most recent block number +func (ec *Client) BlockNumber(ctx context.Context) (uint64, error) { + var result hexutil.Uint64 + err := ec.c.CallContext(ctx, &result, "eth_blockNumber") + return uint64(result), err +} + +// PeerCount returns the number of p2p peers as reported by the net_peerCount method. +func (ec *Client) PeerCount(ctx context.Context) (uint64, error) { + var result hexutil.Uint64 + err := ec.c.CallContext(ctx, &result, "net_peerCount") + return uint64(result), err +} + type rpcBlock struct { Hash common.Hash `json:"hash"` Transactions []rpcTransaction `json:"transactions"` @@ -227,6 +240,8 @@ func (ec *Client) TransactionSender(ctx context.Context, tx *types.Transaction, if err == nil { return sender, nil } + + // It was not found in cache, ask the server. var meta struct { Hash common.Hash From common.Address @@ -278,21 +293,6 @@ func (ec *Client) TransactionReceipt(ctx context.Context, txHash common.Hash) (* return r, err } -func toBlockNumArg(number *big.Int) string { - if number == nil { - return "latest" - } - return hexutil.EncodeBig(number) -} - -type rpcProgress struct { - StartingBlock hexutil.Uint64 - CurrentBlock hexutil.Uint64 - HighestBlock hexutil.Uint64 - PulledStates hexutil.Uint64 - KnownStates hexutil.Uint64 -} - // SyncProgress retrieves the current progress of the sync algorithm. If there's // no sync currently running, it returns nil. func (ec *Client) SyncProgress(ctx context.Context) (*ethereum.SyncProgress, error) { @@ -305,17 +305,11 @@ func (ec *Client) SyncProgress(ctx context.Context) (*ethereum.SyncProgress, err if err := json.Unmarshal(raw, &syncing); err == nil { return nil, nil // Not syncing (always false) } - var progress *rpcProgress - if err := json.Unmarshal(raw, &progress); err != nil { + var p *rpcProgress + if err := json.Unmarshal(raw, &p); err != nil { return nil, err } - return ðereum.SyncProgress{ - StartingBlock: uint64(progress.StartingBlock), - CurrentBlock: uint64(progress.CurrentBlock), - HighestBlock: uint64(progress.HighestBlock), - PulledStates: uint64(progress.PulledStates), - KnownStates: uint64(progress.KnownStates), - }, nil + return p.toSyncProgress(), nil } // SubscribeNewHead subscribes to notifications about the current blockchain head @@ -452,8 +446,6 @@ func (ec *Client) PendingTransactionCount(ctx context.Context) (uint, error) { return uint(num), err } -// TODO: SubscribePendingTransactions (needs server side) - // Contract Calling // CallContract executes a message call transaction, which is directly executed in the VM @@ -471,6 +463,17 @@ func (ec *Client) CallContract(ctx context.Context, msg ethereum.CallMsg, blockN return hex, nil } +// CallContractAtHash is almost the same as CallContract except that it selects +// the block by block hash instead of block height. +func (ec *Client) CallContractAtHash(ctx context.Context, msg ethereum.CallMsg, blockHash common.Hash) ([]byte, error) { + var hex hexutil.Bytes + err := ec.c.CallContext(ctx, &hex, "eth_call", toCallArg(msg), rpc.BlockNumberOrHashWithHash(blockHash, false)) + if err != nil { + return nil, err + } + return hex, nil +} + // PendingCallContract executes a message call transaction using the EVM. // The state seen by the contract call is the pending state. func (ec *Client) PendingCallContract(ctx context.Context, msg ethereum.CallMsg) ([]byte, error) { @@ -492,6 +495,48 @@ func (ec *Client) SuggestGasPrice(ctx context.Context) (*big.Int, error) { return (*big.Int)(&hex), nil } +// SuggestGasTipCap retrieves the currently suggested gas tip cap after 1559 to +// allow a timely execution of a transaction. +func (ec *Client) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + var hex hexutil.Big + if err := ec.c.CallContext(ctx, &hex, "eth_maxPriorityFeePerGas"); err != nil { + return nil, err + } + return (*big.Int)(&hex), nil +} + +type feeHistoryResultMarshaling struct { + OldestBlock *hexutil.Big `json:"oldestBlock"` + Reward [][]*hexutil.Big `json:"reward,omitempty"` + BaseFee []*hexutil.Big `json:"baseFeePerGas,omitempty"` + GasUsedRatio []float64 `json:"gasUsedRatio"` +} + +// FeeHistory retrieves the fee market history. +func (ec *Client) FeeHistory(ctx context.Context, blockCount uint64, lastBlock *big.Int, rewardPercentiles []float64) (*ethereum.FeeHistory, error) { + var res feeHistoryResultMarshaling + if err := ec.c.CallContext(ctx, &res, "eth_feeHistory", hexutil.Uint(blockCount), toBlockNumArg(lastBlock), rewardPercentiles); err != nil { + return nil, err + } + reward := make([][]*big.Int, len(res.Reward)) + for i, r := range res.Reward { + reward[i] = make([]*big.Int, len(r)) + for j, r := range r { + reward[i][j] = (*big.Int)(r) + } + } + baseFee := make([]*big.Int, len(res.BaseFee)) + for i, b := range res.BaseFee { + baseFee[i] = (*big.Int)(b) + } + return ðereum.FeeHistory{ + OldestBlock: (*big.Int)(res.OldestBlock), + Reward: reward, + BaseFee: baseFee, + GasUsedRatio: res.GasUsedRatio, + }, nil +} + // EstimateGas tries to estimate the gas needed to execute a specific transaction based on // the current pending state of the backend blockchain. There is no guarantee that this is // the true gas limit requirement as other transactions may be added or removed by miners, @@ -510,11 +555,30 @@ func (ec *Client) EstimateGas(ctx context.Context, msg ethereum.CallMsg) (uint64 // If the transaction was a contract creation use the TransactionReceipt method to get the // contract address after the transaction has been mined. func (ec *Client) SendTransaction(ctx context.Context, tx *types.Transaction) error { - data, err := rlp.EncodeToBytes(tx) + data, err := tx.MarshalBinary() if err != nil { return err } - return ec.c.CallContext(ctx, nil, "eth_sendRawTransaction", common.ToHex(data)) + return ec.c.CallContext(ctx, nil, "eth_sendRawTransaction", hexutil.Encode(data)) +} + +func toBlockNumArg(number *big.Int) string { + if number == nil { + return "latest" + } + pending := big.NewInt(-1) + if number.Cmp(pending) == 0 { + return "pending" + } + finalized := big.NewInt(int64(rpc.FinalizedBlockNumber)) + if number.Cmp(finalized) == 0 { + return "finalized" + } + safe := big.NewInt(int64(rpc.SafeBlockNumber)) + if number.Cmp(safe) == 0 { + return "safe" + } + return hexutil.EncodeBig(number) } func toCallArg(msg ethereum.CallMsg) interface{} { @@ -536,3 +600,51 @@ func toCallArg(msg ethereum.CallMsg) interface{} { } return arg } + +// rpcProgress is a copy of SyncProgress with hex-encoded fields. +type rpcProgress struct { + StartingBlock hexutil.Uint64 + CurrentBlock hexutil.Uint64 + HighestBlock hexutil.Uint64 + + PulledStates hexutil.Uint64 + KnownStates hexutil.Uint64 + + SyncedAccounts hexutil.Uint64 + SyncedAccountBytes hexutil.Uint64 + SyncedBytecodes hexutil.Uint64 + SyncedBytecodeBytes hexutil.Uint64 + SyncedStorage hexutil.Uint64 + SyncedStorageBytes hexutil.Uint64 + HealedTrienodes hexutil.Uint64 + HealedTrienodeBytes hexutil.Uint64 + HealedBytecodes hexutil.Uint64 + HealedBytecodeBytes hexutil.Uint64 + HealingTrienodes hexutil.Uint64 + HealingBytecode hexutil.Uint64 +} + +func (p *rpcProgress) toSyncProgress() *ethereum.SyncProgress { + if p == nil { + return nil + } + return ðereum.SyncProgress{ + StartingBlock: uint64(p.StartingBlock), + CurrentBlock: uint64(p.CurrentBlock), + HighestBlock: uint64(p.HighestBlock), + PulledStates: uint64(p.PulledStates), + KnownStates: uint64(p.KnownStates), + SyncedAccounts: uint64(p.SyncedAccounts), + SyncedAccountBytes: uint64(p.SyncedAccountBytes), + SyncedBytecodes: uint64(p.SyncedBytecodes), + SyncedBytecodeBytes: uint64(p.SyncedBytecodeBytes), + SyncedStorage: uint64(p.SyncedStorage), + SyncedStorageBytes: uint64(p.SyncedStorageBytes), + HealedTrienodes: uint64(p.HealedTrienodes), + HealedTrienodeBytes: uint64(p.HealedTrienodeBytes), + HealedBytecodes: uint64(p.HealedBytecodes), + HealedBytecodeBytes: uint64(p.HealedBytecodeBytes), + HealingTrienodes: uint64(p.HealingTrienodes), + HealingBytecode: uint64(p.HealingBytecode), + } +} diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go index fe6a62dd..f2f4a576 100644 --- a/ethclient/ethclient_test.go +++ b/ethclient/ethclient_test.go @@ -17,6 +17,7 @@ package ethclient import ( + "bytes" "context" "errors" "fmt" @@ -25,16 +26,18 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/params" + "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/eth/ethconfig" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) // Verify that Client implements the ethereum interfaces. @@ -97,6 +100,22 @@ func TestToFilterArg(t *testing.T) { }, nil, }, + { + "with negative fromBlock and negative toBlock", + ethereum.FilterQuery{ + Addresses: addresses, + FromBlock: big.NewInt(-1), + ToBlock: big.NewInt(-1), + Topics: [][]common.Hash{}, + }, + map[string]interface{}{ + "address": addresses, + "fromBlock": "pending", + "toBlock": "pending", + "topics": [][]common.Hash{}, + }, + nil, + }, { "with blockhash", ethereum.FilterQuery{ @@ -165,23 +184,49 @@ func TestToFilterArg(t *testing.T) { var ( testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddr = crypto.PubkeyToAddress(testKey.PublicKey) - testBalance = big.NewInt(2e10) + testBalance = big.NewInt(2e15) ) +var genesis = &core.Genesis{ + Config: params.AllEthashProtocolChanges, + Alloc: core.GenesisAlloc{testAddr: {Balance: testBalance}}, + ExtraData: []byte("test genesis"), + Timestamp: 9000, + BaseFee: big.NewInt(params.InitialBaseFee), +} + +var testTx1 = types.MustSignNewTx(testKey, types.LatestSigner(genesis.Config), &types.LegacyTx{ + Nonce: 0, + Value: big.NewInt(12), + GasPrice: big.NewInt(params.InitialBaseFee), + Gas: params.TxGas, + To: &common.Address{2}, +}) + +var testTx2 = types.MustSignNewTx(testKey, types.LatestSigner(genesis.Config), &types.LegacyTx{ + Nonce: 1, + Value: big.NewInt(8), + GasPrice: big.NewInt(params.InitialBaseFee), + Gas: params.TxGas, + To: &common.Address{2}, +}) + func newTestBackend(t *testing.T) (*node.Node, []*types.Block) { // Generate test chain. - genesis, blocks := generateTestChain() + blocks := generateTestChain() - // Start Ethereum service. - var ethservice *eth.Ethereum + // Create node 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 - }) - + if err != nil { + t.Fatalf("can't create new node: %v", err) + } + // Create Ethereum Service + config := ðconfig.Config{Genesis: genesis} + config.Ethash.PowMode = ethash.ModeFake + ethservice, err := eth.New(n, config) + if err != nil { + t.Fatalf("can't create new ethereum service: %v", err) + } // Import the test chain. if err := n.Start(); err != nil { t.Fatalf("can't start test node: %v", err) @@ -192,32 +237,72 @@ func newTestBackend(t *testing.T) (*node.Node, []*types.Block) { return n, blocks } -func generateTestChain() (*core.Genesis, []*types.Block) { +func generateTestChain() []*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")) + if i == 1 { + // Test transactions are included in block #2. + g.AddTx(testTx1) + g.AddTx(testTx2) + } } - gblock := genesis.ToBlock(db) + gblock := genesis.MustCommit(db) engine := ethash.NewFaker() - blocks, _ := core.GenerateChain(config, gblock, engine, db, 1, generate) + blocks, _ := core.GenerateChain(genesis.Config, gblock, engine, db, 2, generate) blocks = append([]*types.Block{gblock}, blocks...) - return genesis, blocks + return blocks } -func TestHeader(t *testing.T) { +func TestEthClient(t *testing.T) { backend, chain := newTestBackend(t) client, _ := backend.Attach() - defer backend.Stop() + defer backend.Close() defer client.Close() + tests := map[string]struct { + test func(t *testing.T) + }{ + "Header": { + func(t *testing.T) { testHeader(t, chain, client) }, + }, + "BalanceAt": { + func(t *testing.T) { testBalanceAt(t, client) }, + }, + "TxInBlockInterrupted": { + func(t *testing.T) { testTransactionInBlockInterrupted(t, client) }, + }, + "ChainID": { + func(t *testing.T) { testChainID(t, client) }, + }, + "GetBlock": { + func(t *testing.T) { testGetBlock(t, client) }, + }, + "StatusFunctions": { + func(t *testing.T) { testStatusFunctions(t, client) }, + }, + "CallContract": { + func(t *testing.T) { testCallContract(t, client) }, + }, + "CallContractAtHash": { + func(t *testing.T) { testCallContractAtHash(t, client) }, + }, + "AtFunctions": { + func(t *testing.T) { testAtFunctions(t, client) }, + }, + "TransactionSender": { + func(t *testing.T) { testTransactionSender(t, client) }, + }, + } + + t.Parallel() + for name, tt := range tests { + t.Run(name, tt.test) + } +} + +func testHeader(t *testing.T, chain []*types.Block, client *rpc.Client) { tests := map[string]struct { block *big.Int want *types.Header @@ -232,8 +317,9 @@ func TestHeader(t *testing.T) { want: chain[1].Header(), }, "future_block": { - block: big.NewInt(1000000000), - want: nil, + block: big.NewInt(1000000000), + want: nil, + wantErr: ethereum.NotFound, }, } for name, tt := range tests { @@ -243,10 +329,10 @@ func TestHeader(t *testing.T) { defer cancel() got, err := ec.HeaderByNumber(ctx, tt.block) - if tt.wantErr != nil && (err == nil || err.Error() != tt.wantErr.Error()) { + if !errors.Is(err, tt.wantErr) { t.Fatalf("HeaderByNumber(%v) error = %q, want %q", tt.block, err, tt.wantErr) } - if got != nil && got.Number.Sign() == 0 { + if got != nil && got.Number != nil && got.Number.Sign() == 0 { got.Number = big.NewInt(0) // hack to make DeepEqual work } if !reflect.DeepEqual(got, tt.want) { @@ -256,18 +342,18 @@ func TestHeader(t *testing.T) { } } -func TestBalanceAt(t *testing.T) { - backend, _ := newTestBackend(t) - client, _ := backend.Attach() - defer backend.Stop() - defer client.Close() - +func testBalanceAt(t *testing.T, client *rpc.Client) { tests := map[string]struct { account common.Address block *big.Int want *big.Int wantErr error }{ + "valid_account_genesis": { + account: testAddr, + block: big.NewInt(0), + want: testBalance, + }, "valid_account": { account: testAddr, block: big.NewInt(1), @@ -302,31 +388,34 @@ func TestBalanceAt(t *testing.T) { } } -func TestTransactionInBlockInterrupted(t *testing.T) { - backend, _ := newTestBackend(t) - client, _ := backend.Attach() - defer backend.Stop() - defer client.Close() - +func testTransactionInBlockInterrupted(t *testing.T, client *rpc.Client) { ec := NewClient(client) + + // Get current block by number. + block, err := ec.BlockByNumber(context.Background(), nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // Test tx in block interupted. ctx, cancel := context.WithCancel(context.Background()) cancel() - tx, err := ec.TransactionInBlock(ctx, common.Hash{1}, 1) + tx, err := ec.TransactionInBlock(ctx, block.Hash(), 0) if tx != nil { t.Fatal("transaction should be nil") } - if err == nil { - t.Fatal("error should not be nil") + if err == nil || err == ethereum.NotFound { + t.Fatal("error should not be nil/notfound") + } + + // Test tx in block not found. + if _, err := ec.TransactionInBlock(context.Background(), block.Hash(), 20); err != ethereum.NotFound { + t.Fatal("error should be ethereum.NotFound") } } -func TestChainID(t *testing.T) { - backend, _ := newTestBackend(t) - client, _ := backend.Attach() - defer backend.Stop() - defer client.Close() +func testChainID(t *testing.T, client *rpc.Client) { ec := NewClient(client) - id, err := ec.ChainID(context.Background()) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -335,3 +424,294 @@ func TestChainID(t *testing.T) { t.Fatalf("ChainID returned wrong number: %+v", id) } } + +func testGetBlock(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + + // Get current block number + blockNumber, err := ec.BlockNumber(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if blockNumber != 2 { + t.Fatalf("BlockNumber returned wrong number: %d", blockNumber) + } + // Get current block by number + block, err := ec.BlockByNumber(context.Background(), new(big.Int).SetUint64(blockNumber)) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if block.NumberU64() != blockNumber { + t.Fatalf("BlockByNumber returned wrong block: want %d got %d", blockNumber, block.NumberU64()) + } + // Get current block by hash + blockH, err := ec.BlockByHash(context.Background(), block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if block.Hash() != blockH.Hash() { + t.Fatalf("BlockByHash returned wrong block: want %v got %v", block.Hash().Hex(), blockH.Hash().Hex()) + } + // Get header by number + header, err := ec.HeaderByNumber(context.Background(), new(big.Int).SetUint64(blockNumber)) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if block.Header().Hash() != header.Hash() { + t.Fatalf("HeaderByNumber returned wrong header: want %v got %v", block.Header().Hash().Hex(), header.Hash().Hex()) + } + // Get header by hash + headerH, err := ec.HeaderByHash(context.Background(), block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if block.Header().Hash() != headerH.Hash() { + t.Fatalf("HeaderByHash returned wrong header: want %v got %v", block.Header().Hash().Hex(), headerH.Hash().Hex()) + } +} + +func testStatusFunctions(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + + // Sync progress + progress, err := ec.SyncProgress(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if progress != nil { + t.Fatalf("unexpected progress: %v", progress) + } + + // NetworkID + networkID, err := ec.NetworkID(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if networkID.Cmp(big.NewInt(0)) != 0 { + t.Fatalf("unexpected networkID: %v", networkID) + } + + // SuggestGasPrice + gasPrice, err := ec.SuggestGasPrice(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if gasPrice.Cmp(big.NewInt(1000000000)) != 0 { + t.Fatalf("unexpected gas price: %v", gasPrice) + } + + // SuggestGasTipCap + gasTipCap, err := ec.SuggestGasTipCap(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if gasTipCap.Cmp(big.NewInt(234375000)) != 0 { + t.Fatalf("unexpected gas tip cap: %v", gasTipCap) + } + + // FeeHistory + history, err := ec.FeeHistory(context.Background(), 1, big.NewInt(2), []float64{95, 99}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + want := ðereum.FeeHistory{ + OldestBlock: big.NewInt(2), + Reward: [][]*big.Int{ + { + big.NewInt(234375000), + big.NewInt(234375000), + }, + }, + BaseFee: []*big.Int{ + big.NewInt(765625000), + big.NewInt(671627818), + }, + GasUsedRatio: []float64{0.008912678667376286}, + } + if !reflect.DeepEqual(history, want) { + t.Fatalf("FeeHistory result doesn't match expected: (got: %v, want: %v)", history, want) + } +} + +func testCallContractAtHash(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + + // EstimateGas + msg := ethereum.CallMsg{ + From: testAddr, + To: &common.Address{}, + Gas: 21000, + Value: big.NewInt(1), + } + gas, err := ec.EstimateGas(context.Background(), msg) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if gas != 21000 { + t.Fatalf("unexpected gas price: %v", gas) + } + block, err := ec.HeaderByNumber(context.Background(), big.NewInt(1)) + if err != nil { + t.Fatalf("BlockByNumber error: %v", err) + } + // CallContract + if _, err := ec.CallContractAtHash(context.Background(), msg, block.Hash()); err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func testCallContract(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + + // EstimateGas + msg := ethereum.CallMsg{ + From: testAddr, + To: &common.Address{}, + Gas: 21000, + Value: big.NewInt(1), + } + gas, err := ec.EstimateGas(context.Background(), msg) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if gas != 21000 { + t.Fatalf("unexpected gas price: %v", gas) + } + // CallContract + if _, err := ec.CallContract(context.Background(), msg, big.NewInt(1)); err != nil { + t.Fatalf("unexpected error: %v", err) + } + // PendingCallContract + if _, err := ec.PendingCallContract(context.Background(), msg); err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func testAtFunctions(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + + // send a transaction for some interesting pending status + sendTransaction(ec) + time.Sleep(100 * time.Millisecond) + + // Check pending transaction count + pending, err := ec.PendingTransactionCount(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if pending != 1 { + t.Fatalf("unexpected pending, wanted 1 got: %v", pending) + } + // Query balance + balance, err := ec.BalanceAt(context.Background(), testAddr, nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + penBalance, err := ec.PendingBalanceAt(context.Background(), testAddr) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if balance.Cmp(penBalance) == 0 { + t.Fatalf("unexpected balance: %v %v", balance, penBalance) + } + // NonceAt + nonce, err := ec.NonceAt(context.Background(), testAddr, nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + penNonce, err := ec.PendingNonceAt(context.Background(), testAddr) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if penNonce != nonce+1 { + t.Fatalf("unexpected nonce: %v %v", nonce, penNonce) + } + // StorageAt + storage, err := ec.StorageAt(context.Background(), testAddr, common.Hash{}, nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + penStorage, err := ec.PendingStorageAt(context.Background(), testAddr, common.Hash{}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !bytes.Equal(storage, penStorage) { + t.Fatalf("unexpected storage: %v %v", storage, penStorage) + } + // CodeAt + code, err := ec.CodeAt(context.Background(), testAddr, nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + penCode, err := ec.PendingCodeAt(context.Background(), testAddr) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !bytes.Equal(code, penCode) { + t.Fatalf("unexpected code: %v %v", code, penCode) + } +} + +func testTransactionSender(t *testing.T, client *rpc.Client) { + ec := NewClient(client) + ctx := context.Background() + + // Retrieve testTx1 via RPC. + block2, err := ec.HeaderByNumber(ctx, big.NewInt(2)) + if err != nil { + t.Fatal("can't get block 1:", err) + } + tx1, err := ec.TransactionInBlock(ctx, block2.Hash(), 0) + if err != nil { + t.Fatal("can't get tx:", err) + } + if tx1.Hash() != testTx1.Hash() { + t.Fatalf("wrong tx hash %v, want %v", tx1.Hash(), testTx1.Hash()) + } + + // The sender address is cached in tx1, so no additional RPC should be required in + // TransactionSender. Ensure the server is not asked by canceling the context here. + canceledCtx, cancel := context.WithCancel(context.Background()) + cancel() + sender1, err := ec.TransactionSender(canceledCtx, tx1, block2.Hash(), 0) + if err != nil { + t.Fatal(err) + } + if sender1 != testAddr { + t.Fatal("wrong sender:", sender1) + } + + // Now try to get the sender of testTx2, which was not fetched through RPC. + // TransactionSender should query the server here. + sender2, err := ec.TransactionSender(ctx, testTx2, block2.Hash(), 1) + if err != nil { + t.Fatal(err) + } + if sender2 != testAddr { + t.Fatal("wrong sender:", sender2) + } +} + +func sendTransaction(ec *Client) error { + chainID, err := ec.ChainID(context.Background()) + if err != nil { + return err + } + nonce, err := ec.PendingNonceAt(context.Background(), testAddr) + if err != nil { + return err + } + + signer := types.LatestSignerForChainID(chainID) + tx, err := types.SignNewTx(testKey, signer, &types.LegacyTx{ + Nonce: nonce, + To: &common.Address{2}, + Value: big.NewInt(1), + Gas: 22000, + GasPrice: big.NewInt(params.InitialBaseFee), + }) + if err != nil { + return err + } + return ec.SendTransaction(context.Background(), tx) +} diff --git a/ethclient/gethclient/gethclient.go b/ethclient/gethclient/gethclient.go new file mode 100644 index 00000000..edc441bd --- /dev/null +++ b/ethclient/gethclient/gethclient.go @@ -0,0 +1,243 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package gethclient provides an RPC client for geth-specific APIs. +package gethclient + +import ( + "context" + "math/big" + "runtime" + "runtime/debug" + + "github.com/ethereum/go-ethereum" + "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/p2p" + "github.com/ethereum/go-ethereum/rpc" +) + +// Client is a wrapper around rpc.Client that implements geth-specific functionality. +// +// If you want to use the standardized Ethereum RPC functionality, use ethclient.Client instead. +type Client struct { + c *rpc.Client +} + +// New creates a client that uses the given RPC client. +func New(c *rpc.Client) *Client { + return &Client{c} +} + +// CreateAccessList tries to create an access list for a specific transaction based on the +// current pending state of the blockchain. +func (ec *Client) CreateAccessList(ctx context.Context, msg ethereum.CallMsg) (*types.AccessList, uint64, string, error) { + type accessListResult struct { + Accesslist *types.AccessList `json:"accessList"` + Error string `json:"error,omitempty"` + GasUsed hexutil.Uint64 `json:"gasUsed"` + } + var result accessListResult + if err := ec.c.CallContext(ctx, &result, "eth_createAccessList", toCallArg(msg)); err != nil { + return nil, 0, "", err + } + return result.Accesslist, uint64(result.GasUsed), result.Error, nil +} + +// AccountResult is the result of a GetProof operation. +type AccountResult struct { + Address common.Address `json:"address"` + AccountProof []string `json:"accountProof"` + Balance *big.Int `json:"balance"` + CodeHash common.Hash `json:"codeHash"` + Nonce uint64 `json:"nonce"` + StorageHash common.Hash `json:"storageHash"` + StorageProof []StorageResult `json:"storageProof"` +} + +// StorageResult provides a proof for a key-value pair. +type StorageResult struct { + Key string `json:"key"` + Value *big.Int `json:"value"` + Proof []string `json:"proof"` +} + +// GetProof returns the account and storage values of the specified account including the Merkle-proof. +// The block number can be nil, in which case the value is taken from the latest known block. +func (ec *Client) GetProof(ctx context.Context, account common.Address, keys []string, blockNumber *big.Int) (*AccountResult, error) { + type storageResult struct { + Key string `json:"key"` + Value *hexutil.Big `json:"value"` + Proof []string `json:"proof"` + } + + type accountResult struct { + Address common.Address `json:"address"` + AccountProof []string `json:"accountProof"` + Balance *hexutil.Big `json:"balance"` + CodeHash common.Hash `json:"codeHash"` + Nonce hexutil.Uint64 `json:"nonce"` + StorageHash common.Hash `json:"storageHash"` + StorageProof []storageResult `json:"storageProof"` + } + + var res accountResult + err := ec.c.CallContext(ctx, &res, "eth_getProof", account, keys, toBlockNumArg(blockNumber)) + // Turn hexutils back to normal datatypes + storageResults := make([]StorageResult, 0, len(res.StorageProof)) + for _, st := range res.StorageProof { + storageResults = append(storageResults, StorageResult{ + Key: st.Key, + Value: st.Value.ToInt(), + Proof: st.Proof, + }) + } + result := AccountResult{ + Address: res.Address, + AccountProof: res.AccountProof, + Balance: res.Balance.ToInt(), + Nonce: uint64(res.Nonce), + CodeHash: res.CodeHash, + StorageHash: res.StorageHash, + StorageProof: storageResults, + } + return &result, err +} + +// OverrideAccount specifies the state of an account to be overridden. +type OverrideAccount struct { + Nonce uint64 `json:"nonce"` + Code []byte `json:"code"` + Balance *big.Int `json:"balance"` + State map[common.Hash]common.Hash `json:"state"` + StateDiff map[common.Hash]common.Hash `json:"stateDiff"` +} + +// CallContract executes a message call transaction, which is directly executed in the VM +// of the node, but never mined into the blockchain. +// +// blockNumber selects the block height at which the call runs. It can be nil, in which +// case the code is taken from the latest known block. Note that state from very old +// blocks might not be available. +// +// overrides specifies a map of contract states that should be overwritten before executing +// the message call. +// Please use ethclient.CallContract instead if you don't need the override functionality. +func (ec *Client) CallContract(ctx context.Context, msg ethereum.CallMsg, blockNumber *big.Int, overrides *map[common.Address]OverrideAccount) ([]byte, error) { + var hex hexutil.Bytes + err := ec.c.CallContext( + ctx, &hex, "eth_call", toCallArg(msg), + toBlockNumArg(blockNumber), toOverrideMap(overrides), + ) + return hex, err +} + +// GCStats retrieves the current garbage collection stats from a geth node. +func (ec *Client) GCStats(ctx context.Context) (*debug.GCStats, error) { + var result debug.GCStats + err := ec.c.CallContext(ctx, &result, "debug_gcStats") + return &result, err +} + +// MemStats retrieves the current memory stats from a geth node. +func (ec *Client) MemStats(ctx context.Context) (*runtime.MemStats, error) { + var result runtime.MemStats + err := ec.c.CallContext(ctx, &result, "debug_memStats") + return &result, err +} + +// SetHead sets the current head of the local chain by block number. +// Note, this is a destructive action and may severely damage your chain. +// Use with extreme caution. +func (ec *Client) SetHead(ctx context.Context, number *big.Int) error { + return ec.c.CallContext(ctx, nil, "debug_setHead", toBlockNumArg(number)) +} + +// GetNodeInfo retrieves the node info of a geth node. +func (ec *Client) GetNodeInfo(ctx context.Context) (*p2p.NodeInfo, error) { + var result p2p.NodeInfo + err := ec.c.CallContext(ctx, &result, "admin_nodeInfo") + return &result, err +} + +// SubscribePendingTransactions subscribes to new pending transactions. +func (ec *Client) SubscribePendingTransactions(ctx context.Context, ch chan<- common.Hash) (*rpc.ClientSubscription, error) { + return ec.c.EthSubscribe(ctx, ch, "newPendingTransactions") +} + +func toBlockNumArg(number *big.Int) string { + if number == nil { + return "latest" + } + pending := big.NewInt(-1) + if number.Cmp(pending) == 0 { + return "pending" + } + finalized := big.NewInt(int64(rpc.FinalizedBlockNumber)) + if number.Cmp(finalized) == 0 { + return "finalized" + } + safe := big.NewInt(int64(rpc.SafeBlockNumber)) + if number.Cmp(safe) == 0 { + return "safe" + } + return hexutil.EncodeBig(number) +} + +func toCallArg(msg ethereum.CallMsg) interface{} { + arg := map[string]interface{}{ + "from": msg.From, + "to": msg.To, + } + if len(msg.Data) > 0 { + arg["data"] = hexutil.Bytes(msg.Data) + } + if msg.Value != nil { + arg["value"] = (*hexutil.Big)(msg.Value) + } + if msg.Gas != 0 { + arg["gas"] = hexutil.Uint64(msg.Gas) + } + if msg.GasPrice != nil { + arg["gasPrice"] = (*hexutil.Big)(msg.GasPrice) + } + return arg +} + +func toOverrideMap(overrides *map[common.Address]OverrideAccount) interface{} { + if overrides == nil { + return nil + } + type overrideAccount 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"` + } + result := make(map[common.Address]overrideAccount) + for addr, override := range *overrides { + result[addr] = overrideAccount{ + Nonce: hexutil.Uint64(override.Nonce), + Code: override.Code, + Balance: (*hexutil.Big)(override.Balance), + State: override.State, + StateDiff: override.StateDiff, + } + } + return &result +} diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go new file mode 100644 index 00000000..a0f4eaaf --- /dev/null +++ b/ethclient/gethclient/gethclient_test.go @@ -0,0 +1,329 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package gethclient + +import ( + "bytes" + "context" + "math/big" + "testing" + + "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/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + +var ( + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) + testSlot = common.HexToHash("0xdeadbeef") + testValue = crypto.Keccak256Hash(testSlot[:]) + testBalance = big.NewInt(2e15) +) + +func newTestBackend(t *testing.T) (*node.Node, []*types.Block) { + // Generate test chain. + genesis, blocks := generateTestChain() + // Create node + n, err := node.New(&node.Config{}) + if err != nil { + t.Fatalf("can't create new node: %v", err) + } + // Create Ethereum Service + config := ðconfig.Config{Genesis: genesis} + config.Ethash.PowMode = ethash.ModeFake + ethservice, err := eth.New(n, config) + if err != nil { + t.Fatalf("can't create new ethereum service: %v", err) + } + filterSystem := filters.NewFilterSystem(ethservice.APIBackend, filters.Config{}) + n.RegisterAPIs([]rpc.API{{ + Namespace: "eth", + Service: filters.NewFilterAPI(filterSystem, false), + }}) + + // 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, Storage: map[common.Hash]common.Hash{testSlot: testValue}}}, + ExtraData: []byte("test genesis"), + Timestamp: 9000, + } + generate := func(i int, g *core.BlockGen) { + g.OffsetTime(5) + g.SetExtra([]byte("test")) + } + gblock := genesis.MustCommit(db) + engine := ethash.NewFaker() + blocks, _ := core.GenerateChain(config, gblock, engine, db, 1, generate) + blocks = append([]*types.Block{gblock}, blocks...) + return genesis, blocks +} + +func TestGethClient(t *testing.T) { + backend, _ := newTestBackend(t) + client, err := backend.Attach() + if err != nil { + t.Fatal(err) + } + defer backend.Close() + defer client.Close() + + tests := []struct { + name string + test func(t *testing.T) + }{ + { + "TestAccessList", + func(t *testing.T) { testAccessList(t, client) }, + }, + { + "TestGetProof", + func(t *testing.T) { testGetProof(t, client) }, + }, { + "TestGCStats", + func(t *testing.T) { testGCStats(t, client) }, + }, { + "TestMemStats", + func(t *testing.T) { testMemStats(t, client) }, + }, { + "TestGetNodeInfo", + func(t *testing.T) { testGetNodeInfo(t, client) }, + }, { + "TestSetHead", + func(t *testing.T) { testSetHead(t, client) }, + }, { + "TestSubscribePendingTxs", + func(t *testing.T) { testSubscribePendingTransactions(t, client) }, + }, { + "TestCallContract", + func(t *testing.T) { testCallContract(t, client) }, + }, + } + t.Parallel() + for _, tt := range tests { + t.Run(tt.name, tt.test) + } +} + +func testAccessList(t *testing.T, client *rpc.Client) { + ec := New(client) + // Test transfer + msg := ethereum.CallMsg{ + From: testAddr, + To: &common.Address{}, + Gas: 21000, + GasPrice: big.NewInt(765625000), + Value: big.NewInt(1), + } + al, gas, vmErr, err := ec.CreateAccessList(context.Background(), msg) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if vmErr != "" { + t.Fatalf("unexpected vm error: %v", vmErr) + } + if gas != 21000 { + t.Fatalf("unexpected gas used: %v", gas) + } + if len(*al) != 0 { + t.Fatalf("unexpected length of accesslist: %v", len(*al)) + } + // Test reverting transaction + msg = ethereum.CallMsg{ + From: testAddr, + To: nil, + Gas: 100000, + GasPrice: big.NewInt(1000000000), + Value: big.NewInt(1), + Data: common.FromHex("0x608060806080608155fd"), + } + al, gas, vmErr, err = ec.CreateAccessList(context.Background(), msg) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if vmErr == "" { + t.Fatalf("wanted vmErr, got none") + } + if gas == 21000 { + t.Fatalf("unexpected gas used: %v", gas) + } + if len(*al) != 1 || al.StorageKeys() != 1 { + t.Fatalf("unexpected length of accesslist: %v", len(*al)) + } + // address changes between calls, so we can't test for it. + if (*al)[0].Address == common.HexToAddress("0x0") { + t.Fatalf("unexpected address: %v", (*al)[0].Address) + } + if (*al)[0].StorageKeys[0] != common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000081") { + t.Fatalf("unexpected storage key: %v", (*al)[0].StorageKeys[0]) + } +} + +func testGetProof(t *testing.T, client *rpc.Client) { + ec := New(client) + ethcl := ethclient.NewClient(client) + result, err := ec.GetProof(context.Background(), testAddr, []string{testSlot.String()}, nil) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(result.Address[:], testAddr[:]) { + t.Fatalf("unexpected address, want: %v got: %v", testAddr, result.Address) + } + // test nonce + nonce, _ := ethcl.NonceAt(context.Background(), result.Address, nil) + if result.Nonce != nonce { + t.Fatalf("invalid nonce, want: %v got: %v", nonce, result.Nonce) + } + // test balance + balance, _ := ethcl.BalanceAt(context.Background(), result.Address, nil) + if result.Balance.Cmp(balance) != 0 { + t.Fatalf("invalid balance, want: %v got: %v", balance, result.Balance) + } + // test storage + if len(result.StorageProof) != 1 { + t.Fatalf("invalid storage proof, want 1 proof, got %v proof(s)", len(result.StorageProof)) + } + proof := result.StorageProof[0] + slotValue, _ := ethcl.StorageAt(context.Background(), testAddr, testSlot, nil) + if !bytes.Equal(slotValue, proof.Value.Bytes()) { + t.Fatalf("invalid storage proof value, want: %v, got: %v", slotValue, proof.Value.Bytes()) + } + if proof.Key != testSlot.String() { + t.Fatalf("invalid storage proof key, want: %v, got: %v", testSlot.String(), proof.Key) + } +} + +func testGCStats(t *testing.T, client *rpc.Client) { + ec := New(client) + _, err := ec.GCStats(context.Background()) + if err != nil { + t.Fatal(err) + } +} + +func testMemStats(t *testing.T, client *rpc.Client) { + ec := New(client) + stats, err := ec.MemStats(context.Background()) + if err != nil { + t.Fatal(err) + } + if stats.Alloc == 0 { + t.Fatal("Invalid mem stats retrieved") + } +} + +func testGetNodeInfo(t *testing.T, client *rpc.Client) { + ec := New(client) + info, err := ec.GetNodeInfo(context.Background()) + if err != nil { + t.Fatal(err) + } + + if info.Name == "" { + t.Fatal("Invalid node info retrieved") + } +} + +func testSetHead(t *testing.T, client *rpc.Client) { + ec := New(client) + err := ec.SetHead(context.Background(), big.NewInt(0)) + if err != nil { + t.Fatal(err) + } +} + +func testSubscribePendingTransactions(t *testing.T, client *rpc.Client) { + ec := New(client) + ethcl := ethclient.NewClient(client) + // Subscribe to Transactions + ch := make(chan common.Hash) + ec.SubscribePendingTransactions(context.Background(), ch) + // Send a transaction + chainID, err := ethcl.ChainID(context.Background()) + if err != nil { + t.Fatal(err) + } + // Create transaction + tx := types.NewTransaction(0, common.Address{1}, big.NewInt(1), 22000, big.NewInt(1), nil) + signer := types.LatestSignerForChainID(chainID) + signature, err := crypto.Sign(signer.Hash(tx).Bytes(), testKey) + if err != nil { + t.Fatal(err) + } + signedTx, err := tx.WithSignature(signer, signature) + if err != nil { + t.Fatal(err) + } + // Send transaction + err = ethcl.SendTransaction(context.Background(), signedTx) + if err != nil { + t.Fatal(err) + } + // Check that the transaction was send over the channel + hash := <-ch + if hash != signedTx.Hash() { + t.Fatalf("Invalid tx hash received, got %v, want %v", hash, signedTx.Hash()) + } +} + +func testCallContract(t *testing.T, client *rpc.Client) { + ec := New(client) + msg := ethereum.CallMsg{ + From: testAddr, + To: &common.Address{}, + Gas: 21000, + GasPrice: big.NewInt(1000000000), + Value: big.NewInt(1), + } + // CallContract without override + if _, err := ec.CallContract(context.Background(), msg, big.NewInt(0), nil); err != nil { + t.Fatalf("unexpected error: %v", err) + } + // CallContract with override + override := OverrideAccount{ + Nonce: 1, + } + mapAcc := make(map[common.Address]OverrideAccount) + mapAcc[testAddr] = override + if _, err := ec.CallContract(context.Background(), msg, big.NewInt(0), &mapAcc); err != nil { + t.Fatalf("unexpected error: %v", err) + } +} diff --git a/ethclient/signer.go b/ethclient/signer.go index c4610f5e..f827d4eb 100644 --- a/ethclient/signer.go +++ b/ethclient/signer.go @@ -20,8 +20,8 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // senderFromServer is a types.Signer that remembers the sender address returned by the RPC @@ -45,12 +45,15 @@ func (s *senderFromServer) Equal(other types.Signer) bool { } func (s *senderFromServer) Sender(tx *types.Transaction) (common.Address, error) { - if s.blockhash == (common.Hash{}) { + if s.addr == (common.Address{}) { return common.Address{}, errNotCached } return s.addr, nil } +func (s *senderFromServer) ChainID() *big.Int { + panic("can't sign with senderFromServer") +} func (s *senderFromServer) Hash(tx *types.Transaction) common.Hash { panic("can't sign with senderFromServer") } diff --git a/ethdb/batch.go b/ethdb/batch.go index e261415b..541f40c8 100644 --- a/ethdb/batch.go +++ b/ethdb/batch.go @@ -43,4 +43,32 @@ type Batcher interface { // NewBatch creates a write-only database that buffers changes to its host db // until a final write is called. NewBatch() Batch + + // NewBatchWithSize creates a write-only database batch with pre-allocated buffer. + NewBatchWithSize(size int) Batch +} + +// HookedBatch wraps an arbitrary batch where each operation may be hooked into +// to monitor from black box code. +type HookedBatch struct { + Batch + + OnPut func(key []byte, value []byte) // Callback if a key is inserted + OnDelete func(key []byte) // Callback if a key is deleted +} + +// Put inserts the given value into the key-value data store. +func (b HookedBatch) Put(key []byte, value []byte) error { + if b.OnPut != nil { + b.OnPut(key, value) + } + return b.Batch.Put(key, value) +} + +// Delete removes the key from the key-value data store. +func (b HookedBatch) Delete(key []byte) error { + if b.OnDelete != nil { + b.OnDelete(key) + } + return b.Batch.Delete(key) } diff --git a/ethdb/database.go b/ethdb/database.go index 0dc14624..361218f2 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -37,8 +37,8 @@ type KeyValueWriter interface { Delete(key []byte) error } -// Stater wraps the Stat method of a backing data store. -type Stater interface { +// KeyValueStater wraps the Stat method of a backing data store. +type KeyValueStater interface { // Stat returns a particular internal stat of the database. Stat(property string) (string, error) } @@ -60,15 +60,16 @@ type Compacter interface { type KeyValueStore interface { KeyValueReader KeyValueWriter + KeyValueStater Batcher Iteratee - Stater Compacter + Snapshotter io.Closer } -// AncientReader contains the methods required to read from immutable ancient data. -type AncientReader interface { +// AncientReaderOp contains the methods required to read from immutable ancient data. +type AncientReaderOp interface { // HasAncient returns an indicator whether the specified data exists in the // ancient store. HasAncient(kind string, number uint64) (bool, error) @@ -76,24 +77,75 @@ type AncientReader interface { // Ancient retrieves an ancient binary blob from the append-only immutable files. Ancient(kind string, number uint64) ([]byte, error) + // AncientRange retrieves multiple items in sequence, starting from the index 'start'. + // It will return + // - at most 'count' items, + // - at least 1 item (even if exceeding the maxBytes), but will otherwise + // return as many items as fit into maxBytes. + AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) + // Ancients returns the ancient item numbers in the ancient store. Ancients() (uint64, error) + // Tail returns the number of first stored item in the freezer. + // This number can also be interpreted as the total deleted item numbers. + Tail() (uint64, error) + // AncientSize returns the ancient size of the specified category. AncientSize(kind string) (uint64, error) } +// AncientReader is the extended ancient reader interface including 'batched' or 'atomic' reading. +type AncientReader interface { + AncientReaderOp + + // ReadAncients runs the given read operation while ensuring that no writes take place + // on the underlying freezer. + ReadAncients(fn func(AncientReaderOp) error) (err error) +} + // 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 - - // TruncateAncients discards all but the first n ancient data from the ancient store. - TruncateAncients(n uint64) error + // ModifyAncients runs a write operation on the ancient store. + // If the function returns an error, any changes to the underlying store are reverted. + // The integer return value is the total size of the written data. + ModifyAncients(func(AncientWriteOp) error) (int64, error) + + // TruncateHead discards all but the first n ancient data from the ancient store. + // After the truncation, the latest item can be accessed it item_n-1(start from 0). + TruncateHead(n uint64) error + + // TruncateTail discards the first n ancient data from the ancient store. The already + // deleted items are ignored. After the truncation, the earliest item can be accessed + // is item_n(start from 0). The deleted items may not be removed from the ancient store + // immediately, but only when the accumulated deleted data reach the threshold then + // will be removed all together. + TruncateTail(n uint64) error // Sync flushes all in-memory ancient store data to disk. Sync() error + + // MigrateTable processes and migrates entries of a given table to a new format. + // The second argument is a function that takes a raw entry and returns it + // in the newest format. + MigrateTable(string, func([]byte) ([]byte, error)) error +} + +// AncientWriteOp is given to the function argument of ModifyAncients. +type AncientWriteOp interface { + // Append adds an RLP-encoded item. + Append(kind string, number uint64, item interface{}) error + + // AppendRaw adds an item without RLP-encoding it. + AppendRaw(kind string, number uint64, item []byte) error +} + +// AncientStater wraps the Stat method of a backing data store. +type AncientStater interface { + // AncientDatadir returns the path of root ancient directory. Empty string + // will be returned if ancient store is not enabled at all. The returned + // path can be used to construct the path of other freezers. + AncientDatadir() (string, error) } // Reader contains the methods required to read data from both key-value as well as @@ -110,6 +162,13 @@ type Writer interface { AncientWriter } +// Stater contains the methods required to retrieve states from both key-value as well as +// immutable ancient data. +type Stater interface { + KeyValueStater + AncientStater +} + // AncientStore contains all the methods required to allow handling different // ancient data stores backing immutable chain data store. type AncientStore interface { @@ -127,5 +186,6 @@ type Database interface { Iteratee Stater Compacter + Snapshotter io.Closer } diff --git a/ethdb/dbtest/testsuite.go b/ethdb/dbtest/testsuite.go index 2ae2dddf..6b206af4 100644 --- a/ethdb/dbtest/testsuite.go +++ b/ethdb/dbtest/testsuite.go @@ -22,7 +22,7 @@ import ( "sort" "testing" - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/ethdb" ) // TestDatabaseSuite runs a suite of tests against a KeyValueStore database @@ -32,31 +32,32 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { tests := []struct { content map[string]string prefix string + start string order []string }{ // Empty databases should be iterable - {map[string]string{}, "", nil}, - {map[string]string{}, "non-existent-prefix", nil}, + {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}, + {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", + "k", "", []string{"k1", "k2", "k3", "k4", "k5"}, }, { map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, - "l", + "l", "", nil, }, // Multi-item databases should be prefix-iterable @@ -65,7 +66,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "ka", + "ka", "", []string{"ka1", "ka2", "ka3", "ka4", "ka5"}, }, { @@ -73,7 +74,24 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", }, - "kc", + "kc", "", + nil, + }, + // Multi-item databases should be prefix-iterable with start position + { + map[string]string{ + "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", + "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", + }, + "ka", "3", + []string{"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", + }, + "ka", "8", nil, }, } @@ -86,7 +104,7 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { } } // Iterate over the database with the given configs and verify the results - it, idx := db.NewIteratorWithPrefix([]byte(tt.prefix)), 0 + it, idx := db.NewIterator([]byte(tt.prefix), []byte(tt.start)), 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)) @@ -124,62 +142,57 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { } { - it := db.NewIterator() + it := db.NewIterator(nil, nil) 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")) + it := db.NewIterator([]byte("1"), nil) 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) + t.Errorf("IteratorWith(1,nil): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithPrefix([]byte("5")) + it := db.NewIterator([]byte("5"), nil) 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) + t.Errorf("IteratorWith(5,nil): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithStart([]byte("2")) + it := db.NewIterator(nil, []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) + t.Errorf("IteratorWith(nil,2): got: %s; want: %s", got, want) } } { - it := db.NewIteratorWithStart([]byte("5")) + it := db.NewIterator(nil, []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.Errorf("IteratorWith(nil,5): got: %s; want: %s", got, want) } } }) @@ -246,11 +259,10 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { } { - it := db.NewIterator() + it := db.NewIterator(nil, nil) 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() @@ -267,11 +279,10 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { } { - it := db.NewIterator() + it := db.NewIterator(nil, nil) 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() } }) @@ -296,13 +307,74 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { t.Fatal(err) } - it := db.NewIterator() + it := db.NewIterator(nil, nil) if got := iterateKeys(it); !reflect.DeepEqual(got, want) { t.Errorf("got: %s; want: %s", got, want) } - it.Release() }) + t.Run("Snapshot", func(t *testing.T) { + db := New() + defer db.Close() + + initial := map[string]string{ + "k1": "v1", "k2": "v2", "k3": "", "k4": "", + } + for k, v := range initial { + db.Put([]byte(k), []byte(v)) + } + snapshot, err := db.NewSnapshot() + if err != nil { + t.Fatal(err) + } + for k, v := range initial { + got, err := snapshot.Get([]byte(k)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, []byte(v)) { + t.Fatalf("Unexpected value want: %v, got %v", v, got) + } + } + + // Flush more modifications into the database, ensure the snapshot + // isn't affected. + var ( + update = map[string]string{"k1": "v1-b", "k3": "v3-b"} + insert = map[string]string{"k5": "v5-b"} + delete = map[string]string{"k2": ""} + ) + for k, v := range update { + db.Put([]byte(k), []byte(v)) + } + for k, v := range insert { + db.Put([]byte(k), []byte(v)) + } + for k := range delete { + db.Delete([]byte(k)) + } + for k, v := range initial { + got, err := snapshot.Get([]byte(k)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, []byte(v)) { + t.Fatalf("Unexpected value want: %v, got %v", v, got) + } + } + for k := range insert { + got, err := snapshot.Get([]byte(k)) + if err == nil || len(got) != 0 { + t.Fatal("Unexpected value") + } + } + for k := range delete { + got, err := snapshot.Get([]byte(k)) + if err != nil || len(got) == 0 { + t.Fatal("Unexpected deletion") + } + } + }) } func iterateKeys(it ethdb.Iterator) []string { @@ -311,5 +383,6 @@ func iterateKeys(it ethdb.Iterator) []string { keys = append(keys, string(it.Key())) } sort.Strings(keys) + it.Release() return keys } diff --git a/ethdb/iterator.go b/ethdb/iterator.go index 419e9bdf..2b49c93a 100644 --- a/ethdb/iterator.go +++ b/ethdb/iterator.go @@ -51,16 +51,11 @@ type Iterator interface { // 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 + // NewIterator creates a binary-alphabetical iterator over a subset + // of database content with a particular key prefix, starting at a particular + // initial key (or after, if it does not exist). + // + // Note: This method assumes that the prefix is NOT part of the start, so there's + // no need for the caller to prepend the prefix to the start + NewIterator(prefix []byte, start []byte) Iterator } diff --git a/ethdb/leveldb/leveldb.go b/ethdb/leveldb/leveldb.go index 0bf0632c..15bd4e6e 100644 --- a/ethdb/leveldb/leveldb.go +++ b/ethdb/leveldb/leveldb.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build !js // +build !js // Package leveldb implements the key-value database layer based on LevelDB. @@ -26,10 +27,10 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" + "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" @@ -62,14 +63,18 @@ 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 + 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 @@ -79,24 +84,40 @@ type Database struct { // 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 - } +func New(file string, cache int, handles int, namespace string, readonly bool) (*Database, error) { + return NewCustom(file, namespace, func(options *opt.Options) { + // Ensure we have some minimal caching and file guarantees + if cache < minCache { + cache = minCache + } + if handles < minHandles { + handles = minHandles + } + // Set default options + options.OpenFilesCacheCapacity = handles + options.BlockCacheCapacity = cache / 2 * opt.MiB + options.WriteBuffer = cache / 4 * opt.MiB // Two of these are used internally + if readonly { + options.ReadOnly = true + } + }) +} + +// NewCustom returns a wrapped LevelDB object. The namespace is the prefix that the +// metrics reporting should use for surfacing internal stats. +// The customize function allows the caller to modify the leveldb options. +func NewCustom(file string, namespace string, customize func(options *opt.Options)) (*Database, error) { + options := configureOptions(customize) logger := log.New("database", file) - logger.Info("Allocated cache and file handles", "cache", common.StorageSize(cache*1024*1024), "handles", handles) + usedCache := options.GetBlockCacheCapacity() + options.GetWriteBuffer()*2 + logCtx := []interface{}{"cache", common.StorageSize(usedCache), "handles", options.GetOpenFilesCacheCapacity()} + if options.ReadOnly { + logCtx = append(logCtx, "readonly", "true") + } + logger.Info("Allocated cache and file handles", logCtx...) // 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), - }) + db, err := leveldb.OpenFile(file, options) if _, corrupted := err.(*errors.ErrCorrupted); corrupted { db, err = leveldb.RecoverFile(file, nil) } @@ -118,12 +139,30 @@ func New(file string, cache int, handles int, namespace string) (*Database, erro 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 } +// configureOptions sets some default options, then runs the provided setter. +func configureOptions(customizeFn func(*opt.Options)) *opt.Options { + // Set default options + options := &opt.Options{ + Filter: filter.NewBloomFilter(10), + DisableSeeksCompaction: true, + } + // Allow caller to make custom modifications to the options + if customizeFn != nil { + customizeFn(options) + } + return options +} + // 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 { @@ -174,23 +213,32 @@ func (db *Database) NewBatch() ethdb.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) +// NewBatchWithSize creates a write-only database batch with pre-allocated buffer. +func (db *Database) NewBatchWithSize(size int) ethdb.Batch { + return &batch{ + db: db.db, + b: leveldb.MakeBatch(size), + } } -// 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) +// NewIterator creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix, starting at a particular +// initial key (or after, if it does not exist). +func (db *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { + return db.db.NewIterator(bytesPrefixRange(prefix, 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) +// NewSnapshot creates a database snapshot based on the current state. +// The created snapshot will not be affected by all following mutations +// happened on the database. +// Note don't forget to release the snapshot once it's used up, otherwise +// the stale data will never be cleaned up by the underlying compactor. +func (db *Database) NewSnapshot() (ethdb.Snapshot, error) { + snap, err := db.db.GetSnapshot() + if err != nil { + return nil, err + } + return &snapshot{db: snap}, nil } // Stat returns a particular internal stat of the database. @@ -251,6 +299,9 @@ func (db *Database) meter(refresh time.Duration) { merr error ) + timer := time.NewTimer(refresh) + defer timer.Stop() + // Iterate ad infinitum and collect the stats for i := 1; errc == nil && merr == nil; i++ { // Retrieve the database stats @@ -375,11 +426,35 @@ func (db *Database) meter(refresh time.Duration) { } 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): + case <-timer.C: + timer.Reset(refresh) // Timeout, gather a new set of stats } } @@ -401,14 +476,14 @@ type batch struct { // 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) + b.size += len(key) + 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++ + b.size += len(key) return nil } @@ -456,3 +531,35 @@ func (r *replayer) Delete(key []byte) { } r.failure = r.writer.Delete(key) } + +// bytesPrefixRange returns key range that satisfy +// - the given prefix, and +// - the given seek position +func bytesPrefixRange(prefix, start []byte) *util.Range { + r := util.BytesPrefix(prefix) + r.Start = append(r.Start, start...) + return r +} + +// snapshot wraps a leveldb snapshot for implementing the Snapshot interface. +type snapshot struct { + db *leveldb.Snapshot +} + +// Has retrieves if a key is present in the snapshot backing by a key-value +// data store. +func (snap *snapshot) Has(key []byte) (bool, error) { + return snap.db.Has(key, nil) +} + +// Get retrieves the given key if it's present in the snapshot backing by +// key-value data store. +func (snap *snapshot) Get(key []byte) ([]byte, error) { + return snap.db.Get(key, nil) +} + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (snap *snapshot) Release() { + snap.db.Release() +} diff --git a/ethdb/leveldb/leveldb_test.go b/ethdb/leveldb/leveldb_test.go index 4c55502b..421d9b46 100644 --- a/ethdb/leveldb/leveldb_test.go +++ b/ethdb/leveldb/leveldb_test.go @@ -19,8 +19,8 @@ package leveldb import ( "testing" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethdb/dbtest" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/dbtest" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/storage" ) diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go index fb9cc45f..7e4fd7e5 100644 --- a/ethdb/memorydb/memorydb.go +++ b/ethdb/memorydb/memorydb.go @@ -23,8 +23,8 @@ import ( "strings" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" ) var ( @@ -35,6 +35,10 @@ var ( // errMemorydbNotFound is returned if a key is requested that is not found in // the provided memory database. errMemorydbNotFound = errors.New("not found") + + // errSnapshotReleased is returned if callers want to retrieve data from a + // released snapshot. + errSnapshotReleased = errors.New("snapshot released") ) // Database is an ephemeral key-value store. Apart from basic data storage @@ -53,7 +57,7 @@ func New() *Database { } } -// NewWithCap returns a wrapped map pre-allocated to the provided capcity with +// NewWithCap returns a wrapped map pre-allocated to the provided capacity with // all the required database interface methods implemented. func NewWithCap(size int) *Database { return &Database{ @@ -62,7 +66,7 @@ func NewWithCap(size int) *Database { } // Close deallocates the internal map and ensures any consecutive data access op -// failes with an error. +// fails with an error. func (db *Database) Close() error { db.lock.Lock() defer db.lock.Unlock() @@ -129,55 +133,33 @@ func (db *Database) NewBatch() ethdb.Batch { } } -// 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, +// NewBatchWithSize creates a write-only database batch with pre-allocated buffer. +func (db *Database) NewBatchWithSize(size int) ethdb.Batch { + return &batch{ + db: db, } } -// 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 { +// NewIterator creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix, starting at a particular +// initial key (or after, if it does not exist). +func (db *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { db.lock.RLock() defer db.lock.RUnlock() var ( pr = string(prefix) + st = string(append(prefix, 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 prefix + // and start for key := range db.db { - if strings.HasPrefix(key, pr) { + if !strings.HasPrefix(key, pr) { + continue + } + if key >= st { keys = append(keys, key) } } @@ -187,11 +169,19 @@ func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { values = append(values, db.db[key]) } return &iterator{ + index: -1, keys: keys, values: values, } } +// NewSnapshot creates a database snapshot based on the current state. +// The created snapshot will not be affected by all following mutations +// happened on the database. +func (db *Database) NewSnapshot() (ethdb.Snapshot, error) { + return newSnapshot(db), nil +} + // Stat returns a particular internal stat of the database. func (db *Database) Stat(property string) (string, error) { return "", errors.New("unknown property") @@ -233,14 +223,14 @@ type batch struct { // 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) + b.size += len(key) + 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 + b.size += len(key) return nil } @@ -290,7 +280,7 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { // value store. Internally it is a deep copy of the entire iterated state, // sorted by keys. type iterator struct { - inited bool + index int keys []string values [][]byte } @@ -298,17 +288,12 @@ type iterator struct { // 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 + // Short circuit if iterator is already exhausted in the forward direction. + if it.index >= len(it.keys) { + return false } - // 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 + it.index += 1 + return it.index < len(it.keys) } // Error returns any accumulated error. Exhausting all the key/value pairs @@ -321,24 +306,82 @@ func (it *iterator) Error() error { // 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]) + // Short circuit if iterator is not in a valid position + if it.index < 0 || it.index >= len(it.keys) { + return nil } - return nil + return []byte(it.keys[it.index]) } // 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] + // Short circuit if iterator is not in a valid position + if it.index < 0 || it.index >= len(it.keys) { + return nil } - return nil + return it.values[it.index] } // 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 + it.index, it.keys, it.values = -1, nil, nil +} + +// snapshot wraps a batch of key-value entries deep copied from the in-memory +// database for implementing the Snapshot interface. +type snapshot struct { + db map[string][]byte + lock sync.RWMutex +} + +// newSnapshot initializes the snapshot with the given database instance. +func newSnapshot(db *Database) *snapshot { + db.lock.RLock() + defer db.lock.RUnlock() + + copied := make(map[string][]byte) + for key, val := range db.db { + copied[key] = common.CopyBytes(val) + } + return &snapshot{db: copied} +} + +// Has retrieves if a key is present in the snapshot backing by a key-value +// data store. +func (snap *snapshot) Has(key []byte) (bool, error) { + snap.lock.RLock() + defer snap.lock.RUnlock() + + if snap.db == nil { + return false, errSnapshotReleased + } + _, ok := snap.db[string(key)] + return ok, nil +} + +// Get retrieves the given key if it's present in the snapshot backing by +// key-value data store. +func (snap *snapshot) Get(key []byte) ([]byte, error) { + snap.lock.RLock() + defer snap.lock.RUnlock() + + if snap.db == nil { + return nil, errSnapshotReleased + } + if entry, ok := snap.db[string(key)]; ok { + return common.CopyBytes(entry), nil + } + return nil, errMemorydbNotFound +} + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (snap *snapshot) Release() { + snap.lock.Lock() + defer snap.lock.Unlock() + + snap.db = nil } diff --git a/ethdb/memorydb/memorydb_test.go b/ethdb/memorydb/memorydb_test.go index 80439e0d..dba18ad3 100644 --- a/ethdb/memorydb/memorydb_test.go +++ b/ethdb/memorydb/memorydb_test.go @@ -19,8 +19,8 @@ package memorydb import ( "testing" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethdb/dbtest" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/dbtest" ) func TestMemoryDB(t *testing.T) { diff --git a/ethdb/remotedb/remotedb.go b/ethdb/remotedb/remotedb.go new file mode 100644 index 00000000..59a570bb --- /dev/null +++ b/ethdb/remotedb/remotedb.go @@ -0,0 +1,173 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package remotedb implements the key-value database layer based on a remote geth +// node. Under the hood, it utilises the `debug_dbGet` method to implement a +// read-only database. +// There really are no guarantees in this database, since the local geth does not +// exclusive access, but it can be used for basic diagnostics of a remote node. +package remotedb + +import ( + "errors" + "strings" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rpc" +) + +// Database is a key-value lookup for a remote database via debug_dbGet. +type Database struct { + remote *rpc.Client +} + +func (db *Database) Has(key []byte) (bool, error) { + if _, err := db.Get(key); err != nil { + return false, nil + } + return true, nil +} + +func (db *Database) Get(key []byte) ([]byte, error) { + var resp hexutil.Bytes + err := db.remote.Call(&resp, "debug_dbGet", hexutil.Bytes(key)) + if err != nil { + return nil, err + } + return resp, nil +} + +func (db *Database) HasAncient(kind string, number uint64) (bool, error) { + if _, err := db.Ancient(kind, number); err != nil { + return false, nil + } + return true, nil +} + +func (db *Database) Ancient(kind string, number uint64) ([]byte, error) { + var resp hexutil.Bytes + err := db.remote.Call(&resp, "debug_dbAncient", kind, number) + if err != nil { + return nil, err + } + return resp, nil +} + +func (db *Database) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) { + panic("not supported") +} + +func (db *Database) Ancients() (uint64, error) { + var resp uint64 + err := db.remote.Call(&resp, "debug_dbAncients") + return resp, err +} + +func (db *Database) Tail() (uint64, error) { + panic("not supported") +} + +func (db *Database) AncientSize(kind string) (uint64, error) { + panic("not supported") +} + +func (db *Database) ReadAncients(fn func(op ethdb.AncientReaderOp) error) (err error) { + return fn(db) +} + +func (db *Database) Put(key []byte, value []byte) error { + panic("not supported") +} + +func (db *Database) Delete(key []byte) error { + panic("not supported") +} + +func (db *Database) ModifyAncients(f func(ethdb.AncientWriteOp) error) (int64, error) { + panic("not supported") +} + +func (db *Database) TruncateHead(n uint64) error { + panic("not supported") +} + +func (db *Database) TruncateTail(n uint64) error { + panic("not supported") +} + +func (db *Database) Sync() error { + return nil +} + +func (db *Database) MigrateTable(s string, f func([]byte) ([]byte, error)) error { + panic("not supported") +} + +func (db *Database) NewBatch() ethdb.Batch { + panic("not supported") +} + +func (db *Database) NewBatchWithSize(size int) ethdb.Batch { + panic("not supported") +} + +func (db *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { + panic("not supported") +} + +func (db *Database) Stat(property string) (string, error) { + panic("not supported") +} + +func (db *Database) AncientDatadir() (string, error) { + panic("not supported") +} + +func (db *Database) Compact(start []byte, limit []byte) error { + return nil +} + +func (db *Database) NewSnapshot() (ethdb.Snapshot, error) { + panic("not supported") +} + +func (db *Database) Close() error { + db.remote.Close() + return nil +} + +func dialRPC(endpoint string) (*rpc.Client, error) { + if endpoint == "" { + return nil, errors.New("endpoint must be specified") + } + if strings.HasPrefix(endpoint, "rpc:") || strings.HasPrefix(endpoint, "ipc:") { + // Backwards compatibility with geth < 1.5 which required + // these prefixes. + endpoint = endpoint[4:] + } + return rpc.Dial(endpoint) +} + +func New(endpoint string) (ethdb.Database, error) { + client, err := dialRPC(endpoint) + if err != nil { + return nil, err + } + return &Database{ + remote: client, + }, nil +} diff --git a/ethdb/snapshot.go b/ethdb/snapshot.go new file mode 100644 index 00000000..03b7794a --- /dev/null +++ b/ethdb/snapshot.go @@ -0,0 +1,41 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 Snapshot interface { + // Has retrieves if a key is present in the snapshot backing by a key-value + // data store. + Has(key []byte) (bool, error) + + // Get retrieves the given key if it's present in the snapshot backing by + // key-value data store. + Get(key []byte) ([]byte, error) + + // Release releases associated resources. Release should always succeed and can + // be called multiple times without causing error. + Release() +} + +// Snapshotter wraps the Snapshot method of a backing data store. +type Snapshotter interface { + // NewSnapshot creates a database snapshot based on the current state. + // The created snapshot will not be affected by all following mutations + // happened on the database. + // Note don't forget to release the snapshot once it's used up, otherwise + // the stale data will never be cleaned up by the underlying compactor. + NewSnapshot() (Snapshot, error) +} diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index e2093c37..5d60efab 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -24,23 +24,26 @@ import ( "fmt" "math/big" "net/http" - "regexp" "runtime" "strconv" "strings" + "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/les" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum" + "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/types" + ethproto "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/les" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" "github.com/gorilla/websocket" ) @@ -56,23 +59,33 @@ const ( chainHeadChanSize = 10 ) -type txPool interface { - // SubscribeNewTxsEvent should return an event subscription of - // NewTxsEvent and send events to the given channel. - SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription +// backend encompasses the bare-minimum functionality needed for ethstats reporting +type backend interface { + SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription + SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription + CurrentHeader() *types.Header + HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) + GetTd(ctx context.Context, hash common.Hash) *big.Int + Stats() (pending int, queued int) + SyncProgress() ethereum.SyncProgress } -type blockChain interface { - SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription +// fullNodeBackend encompasses the functionality necessary for a full node +// reporting to ethstats +type fullNodeBackend interface { + backend + Miner() *miner.Miner + BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) + CurrentBlock() *types.Block + SuggestGasTipCap(ctx context.Context) (*big.Int, error) } // Service implements an Ethereum netstats reporting daemon that pushes local // chain statistics up to a monitoring server. type Service struct { - server *p2p.Server // Peer-to-peer server to retrieve networking infos - eth *eth.Ethereum // Full Ethereum service if monitoring a full node - les *les.LightEthereum // Light Ethereum service if monitoring a light node - engine consensus.Engine // Consensus engine to retrieve variadic block fields + server *p2p.Server // Peer-to-peer server to retrieve networking infos + backend backend + engine consensus.Engine // Consensus engine to retrieve variadic block fields node string // Name of the node to display on the monitoring page pass string // Password to authorize access to the monitoring page @@ -80,81 +93,126 @@ type Service struct { pongCh chan struct{} // Pong notifications are fed into this channel histCh chan []uint64 // History request block numbers are fed into this channel + + headSub event.Subscription + txSub event.Subscription } -// New returns a monitoring service ready for stats reporting. -func New(url string, ethServ *eth.Ethereum, lesServ *les.LightEthereum) (*Service, error) { - // Parse the netstats connection url - re := regexp.MustCompile("([^:@]*)(:([^@]*))?@(.+)") - parts := re.FindStringSubmatch(url) - if len(parts) != 5 { - return nil, fmt.Errorf("invalid netstats url: \"%s\", should be nodename:secret@host:port", url) - } - // Assemble and return the stats service - var engine consensus.Engine - if ethServ != nil { - engine = ethServ.Engine() - } else { - engine = lesServ.Engine() - } - return &Service{ - eth: ethServ, - les: lesServ, - engine: engine, - node: parts[1], - pass: parts[3], - host: parts[4], - pongCh: make(chan struct{}), - histCh: make(chan []uint64, 1), - }, nil +// connWrapper is a wrapper to prevent concurrent-write or concurrent-read on the +// websocket. +// +// From Gorilla websocket docs: +// 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. +type connWrapper struct { + conn *websocket.Conn + + rlock sync.Mutex + wlock sync.Mutex +} + +func newConnectionWrapper(conn *websocket.Conn) *connWrapper { + return &connWrapper{conn: conn} +} + +// WriteJSON wraps corresponding method on the websocket but is safe for concurrent calling +func (w *connWrapper) WriteJSON(v interface{}) error { + w.wlock.Lock() + defer w.wlock.Unlock() + + return w.conn.WriteJSON(v) +} + +// ReadJSON wraps corresponding method on the websocket but is safe for concurrent calling +func (w *connWrapper) ReadJSON(v interface{}) error { + w.rlock.Lock() + defer w.rlock.Unlock() + + return w.conn.ReadJSON(v) +} + +// Close wraps corresponding method on the websocket but is safe for concurrent calling +func (w *connWrapper) Close() error { + // The Close and WriteControl methods can be called concurrently with all other methods, + // so the mutex is not used here + return w.conn.Close() +} + +// parseEthstatsURL parses the netstats connection url. +// URL argument should be of the form +// If non-erroring, the returned slice contains 3 elements: [nodename, pass, host] +func parseEthstatsURL(url string) (parts []string, err error) { + err = fmt.Errorf("invalid netstats url: \"%s\", should be nodename:secret@host:port", url) + + hostIndex := strings.LastIndex(url, "@") + if hostIndex == -1 || hostIndex == len(url)-1 { + return nil, err + } + preHost, host := url[:hostIndex], url[hostIndex+1:] + + passIndex := strings.LastIndex(preHost, ":") + if passIndex == -1 { + return []string{preHost, "", host}, nil + } + nodename, pass := preHost[:passIndex], "" + if passIndex != len(preHost)-1 { + pass = preHost[passIndex+1:] + } + + return []string{nodename, pass, host}, nil } -// Protocols implements node.Service, returning the P2P network protocols used -// by the stats service (nil as it doesn't use the devp2p overlay network). -func (s *Service) Protocols() []p2p.Protocol { return nil } +// New returns a monitoring service ready for stats reporting. +func New(node *node.Node, backend backend, engine consensus.Engine, url string) error { + parts, err := parseEthstatsURL(url) + if err != nil { + return err + } + ethstats := &Service{ + backend: backend, + engine: engine, + server: node.Server(), + node: parts[0], + pass: parts[1], + host: parts[2], + pongCh: make(chan struct{}), + histCh: make(chan []uint64, 1), + } -// APIs implements node.Service, returning the RPC API endpoints provided by the -// stats service (nil as it doesn't provide any user callable APIs). -func (s *Service) APIs() []rpc.API { return nil } + node.RegisterLifecycle(ethstats) + return nil +} -// Start implements node.Service, starting up the monitoring and reporting daemon. -func (s *Service) Start(server *p2p.Server) error { - s.server = server - go s.loop() +// Start implements node.Lifecycle, starting up the monitoring and reporting daemon. +func (s *Service) Start() error { + // Subscribe to chain events to execute updates on + chainHeadCh := make(chan core.ChainHeadEvent, chainHeadChanSize) + s.headSub = s.backend.SubscribeChainHeadEvent(chainHeadCh) + txEventCh := make(chan core.NewTxsEvent, txChanSize) + s.txSub = s.backend.SubscribeNewTxsEvent(txEventCh) + go s.loop(chainHeadCh, txEventCh) log.Info("Stats daemon started") return nil } -// Stop implements node.Service, terminating the monitoring and reporting daemon. +// Stop implements node.Lifecycle, terminating the monitoring and reporting daemon. func (s *Service) Stop() error { + s.headSub.Unsubscribe() + s.txSub.Unsubscribe() log.Info("Stats daemon stopped") return nil } // loop keeps trying to connect to the netstats server, reporting chain events // until termination. -func (s *Service) loop() { - // Subscribe to chain events to execute updates on - var blockchain blockChain - var txpool txPool - if s.eth != nil { - blockchain = s.eth.BlockChain() - txpool = s.eth.TxPool() - } else { - blockchain = s.les.BlockChain() - txpool = s.les.TxPool() - } - - chainHeadCh := make(chan core.ChainHeadEvent, chainHeadChanSize) - headSub := blockchain.SubscribeChainHeadEvent(chainHeadCh) - defer headSub.Unsubscribe() - - txEventCh := make(chan core.NewTxsEvent, txChanSize) - txSub := txpool.SubscribeNewTxsEvent(txEventCh) - defer txSub.Unsubscribe() - - // Start a goroutine that exhausts the subsciptions to avoid events piling up +func (s *Service) loop(chainHeadCh chan core.ChainHeadEvent, txEventCh chan core.NewTxsEvent) { + // Start a goroutine that exhausts the subscriptions to avoid events piling up var ( quitCh = make(chan struct{}) headCh = make(chan *types.Block, 1) @@ -186,90 +244,107 @@ func (s *Service) loop() { } // node stopped - case <-txSub.Err(): + case <-s.txSub.Err(): break HandleLoop - case <-headSub.Err(): + case <-s.headSub.Err(): break HandleLoop } } close(quitCh) }() + + // Resolve the URL, defaulting to TLS, but falling back to none too + path := fmt.Sprintf("%s/api", s.host) + urls := []string{path} + + // url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779) + if !strings.Contains(path, "://") { + urls = []string{"wss://" + path, "ws://" + path} + } + + errTimer := time.NewTimer(0) + defer errTimer.Stop() // Loop reporting until termination for { - // Resolve the URL, defaulting to TLS, but falling back to none too - path := fmt.Sprintf("%s/api", s.host) - urls := []string{path} - - // 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 ( - 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 { - conn, _, err = dialer.Dial(url, header) - if err == nil { - break + select { + case <-quitCh: + return + case <-errTimer.C: + // Establish a websocket connection to the server on any supported URL + var ( + conn *connWrapper + err error + ) + dialer := websocket.Dialer{HandshakeTimeout: 5 * time.Second} + header := make(http.Header) + header.Set("origin", "http://localhost") + for _, url := range urls { + c, _, e := dialer.Dial(url, header) + err = e + if err == nil { + conn = newConnectionWrapper(c) + break + } } - } - if err != nil { - log.Warn("Stats server unreachable", "err", err) - time.Sleep(10 * time.Second) - continue - } - // Authenticate the client with the server - if err = s.login(conn); err != nil { - log.Warn("Stats login failed", "err", err) - conn.Close() - time.Sleep(10 * time.Second) - continue - } - go s.readLoop(conn) - - // Send the initial stats so our node looks decent from the get go - if err = s.report(conn); err != nil { - log.Warn("Initial stats report failed", "err", err) - conn.Close() - continue - } - // Keep sending status updates until the connection breaks - fullReport := time.NewTicker(15 * time.Second) + if err != nil { + log.Warn("Stats server unreachable", "err", err) + errTimer.Reset(10 * time.Second) + continue + } + // Authenticate the client with the server + if err = s.login(conn); err != nil { + log.Warn("Stats login failed", "err", err) + conn.Close() + errTimer.Reset(10 * time.Second) + continue + } + go s.readLoop(conn) - for err == nil { - select { - case <-quitCh: + // Send the initial stats so our node looks decent from the get go + if err = s.report(conn); err != nil { + log.Warn("Initial stats report failed", "err", err) conn.Close() - return + errTimer.Reset(0) + continue + } + // Keep sending status updates until the connection breaks + fullReport := time.NewTicker(15 * time.Second) - case <-fullReport.C: - if err = s.report(conn); err != nil { - log.Warn("Full stats report failed", "err", err) - } - case list := <-s.histCh: - if err = s.reportHistory(conn, list); err != nil { - log.Warn("Requested history report failed", "err", err) - } - case head := <-headCh: - if err = s.reportBlock(conn, head); err != nil { - log.Warn("Block stats report failed", "err", err) - } - if err = s.reportPending(conn); err != nil { - log.Warn("Post-block transaction stats report failed", "err", err) - } - case <-txCh: - if err = s.reportPending(conn); err != nil { - log.Warn("Transaction stats report failed", "err", err) + for err == nil { + select { + case <-quitCh: + fullReport.Stop() + // Make sure the connection is closed + conn.Close() + return + + case <-fullReport.C: + if err = s.report(conn); err != nil { + log.Warn("Full stats report failed", "err", err) + } + case list := <-s.histCh: + if err = s.reportHistory(conn, list); err != nil { + log.Warn("Requested history report failed", "err", err) + } + case head := <-headCh: + if err = s.reportBlock(conn, head); err != nil { + log.Warn("Block stats report failed", "err", err) + } + if err = s.reportPending(conn); err != nil { + log.Warn("Post-block transaction stats report failed", "err", err) + } + case <-txCh: + if err = s.reportPending(conn); err != nil { + log.Warn("Transaction stats report failed", "err", err) + } } } + fullReport.Stop() + + // Close the current connection and establish a new one + conn.Close() + errTimer.Reset(0) } - // Make sure the connection is closed - conn.Close() } } @@ -277,14 +352,29 @@ func (s *Service) loop() { // from the network socket. If any of them match an active request, it forwards // it, if they themselves are requests it initiates a reply, and lastly it drops // unknown packets. -func (s *Service) readLoop(conn *websocket.Conn) { - // If the read loop exists, close the connection +func (s *Service) readLoop(conn *connWrapper) { + // If the read loop exits, close the connection defer conn.Close() for { // Retrieve the next generic network packet and bail out on error + var blob json.RawMessage + if err := conn.ReadJSON(&blob); err != nil { + log.Warn("Failed to retrieve stats server message", "err", err) + return + } + // If the network packet is a system ping, respond to it directly + var ping string + if err := json.Unmarshal(blob, &ping); err == nil && strings.HasPrefix(ping, "primus::ping::") { + if err := conn.WriteJSON(strings.ReplaceAll(ping, "ping", "pong")); err != nil { + log.Warn("Failed to respond to system ping message", "err", err) + return + } + continue + } + // Not a system ping, try to decode an actual state message var msg map[string][]interface{} - if err := conn.ReadJSON(&msg); err != nil { + if err := json.Unmarshal(blob, &msg); err != nil { log.Warn("Failed to decode stats server message", "err", err) return } @@ -316,8 +406,11 @@ func (s *Service) readLoop(conn *websocket.Conn) { request, ok := msg["emit"][1].(map[string]interface{}) if !ok { log.Warn("Invalid stats history request", "msg", msg["emit"][1]) - s.histCh <- nil - continue // Ethstats sometime sends invalid history requests, ignore those + select { + case s.histCh <- nil: // Treat it as an no indexes request + default: + } + continue } list, ok := request["list"].([]interface{}) if !ok { @@ -345,7 +438,7 @@ func (s *Service) readLoop(conn *websocket.Conn) { } } -// nodeInfo is the collection of metainformation about a node that is displayed +// nodeInfo is the collection of meta information about a node that is displayed // on the monitoring page. type nodeInfo struct { Name string `json:"name"` @@ -368,17 +461,19 @@ type authMsg struct { } // login tries to authorize the client at the remote server. -func (s *Service) login(conn *websocket.Conn) error { +func (s *Service) login(conn *connWrapper) error { // Construct and send the login authentication infos := s.server.NodeInfo() - var network, protocol string + var protocols []string + for _, proto := range s.server.Protocols { + protocols = append(protocols, fmt.Sprintf("%s/%d", proto.Name, proto.Version)) + } + var network string if info := infos.Protocols["eth"]; info != nil { - network = fmt.Sprintf("%d", info.(*eth.NodeInfo).Network) - protocol = fmt.Sprintf("eth/%d", eth.ProtocolVersions[0]) + network = fmt.Sprintf("%d", info.(*ethproto.NodeInfo).Network) } else { network = fmt.Sprintf("%d", infos.Protocols["les"].(*les.NodeInfo).Network) - protocol = fmt.Sprintf("les/%d", les.ClientProtocolVersions[0]) } auth := &authMsg{ ID: s.node, @@ -387,7 +482,7 @@ func (s *Service) login(conn *websocket.Conn) error { Node: infos.Name, Port: infos.Ports.Listener, Network: network, - Protocol: protocol, + Protocol: strings.Join(protocols, ", "), API: "No", Os: runtime.GOOS, OsVer: runtime.GOARCH, @@ -413,7 +508,7 @@ func (s *Service) login(conn *websocket.Conn) error { // report collects all possible data to report and send it to the stats server. // This should only be used on reconnects or rarely to avoid overloading the // server. Use the individual methods for reporting subscribed events. -func (s *Service) report(conn *websocket.Conn) error { +func (s *Service) report(conn *connWrapper) error { if err := s.reportLatency(conn); err != nil { return err } @@ -431,7 +526,7 @@ func (s *Service) report(conn *websocket.Conn) error { // reportLatency sends a ping request to the server, measures the RTT time and // finally sends a latency update. -func (s *Service) reportLatency(conn *websocket.Conn) error { +func (s *Service) reportLatency(conn *connWrapper) error { // Send the current time to the ethstats server start := time.Now() @@ -500,7 +595,7 @@ func (s uncleStats) MarshalJSON() ([]byte, error) { } // reportBlock retrieves the current chain head and reports it to the stats server. -func (s *Service) reportBlock(conn *websocket.Conn, block *types.Block) error { +func (s *Service) reportBlock(conn *connWrapper, block *types.Block) error { // Gather the block details from the header or block chain details := s.assembleBlockStats(block) @@ -527,13 +622,15 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { txs []txStats uncles []*types.Header ) - if s.eth != nil { - // Full nodes have all needed information available + + // check if backend is a full node + fullBackend, ok := s.backend.(fullNodeBackend) + if ok { if block == nil { - block = s.eth.BlockChain().CurrentBlock() + block = fullBackend.CurrentBlock() } header = block.Header() - td = s.eth.BlockChain().GetTd(header.Hash(), header.Number.Uint64()) + td = fullBackend.GetTd(context.Background(), header.Hash()) txs = make([]txStats, len(block.Transactions())) for i, tx := range block.Transactions() { @@ -545,11 +642,12 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { if block != nil { header = block.Header() } else { - header = s.les.BlockChain().CurrentHeader() + header = s.backend.CurrentHeader() } - td = s.les.BlockChain().GetTd(header.Hash(), header.Number.Uint64()) + td = s.backend.GetTd(context.Background(), header.Hash()) txs = []txStats{} } + // Assemble and return the block stats author, _ := s.engine.Author(header) @@ -572,7 +670,7 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { // reportHistory retrieves the most recent batch of blocks and reports it to the // stats server. -func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error { +func (s *Service) reportHistory(conn *connWrapper, list []uint64) error { // Figure out the indexes that need reporting indexes := make([]uint64, 0, historyUpdateRange) if len(list) > 0 { @@ -580,12 +678,7 @@ func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error { indexes = append(indexes, list...) } else { // No indexes requested, send back the top ones - var head int64 - if s.eth != nil { - head = s.eth.BlockChain().CurrentHeader().Number.Int64() - } else { - head = s.les.BlockChain().CurrentHeader().Number.Int64() - } + head := s.backend.CurrentHeader().Number.Int64() start := head - historyUpdateRange + 1 if start < 0 { start = 0 @@ -597,12 +690,13 @@ func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error { // Gather the batch of blocks to report history := make([]*blockStats, len(indexes)) for i, number := range indexes { + fullBackend, ok := s.backend.(fullNodeBackend) // Retrieve the next block if it's known to us var block *types.Block - if s.eth != nil { - block = s.eth.BlockChain().GetBlockByNumber(number) + if ok { + block, _ = fullBackend.BlockByNumber(context.Background(), rpc.BlockNumber(number)) // TODO ignore error here ? } else { - if header := s.les.BlockChain().GetHeaderByNumber(number); header != nil { + if header, _ := s.backend.HeaderByNumber(context.Background(), rpc.BlockNumber(number)); header != nil { block = types.NewBlockWithHeader(header) } } @@ -638,14 +732,9 @@ type pendStats struct { // reportPending retrieves the current number of pending transactions and reports // it to the stats server. -func (s *Service) reportPending(conn *websocket.Conn) error { +func (s *Service) reportPending(conn *connWrapper) error { // Retrieve the pending count from the local blockchain - var pending int - if s.eth != nil { - pending, _ = s.eth.TxPool().Stats() - } else { - pending = s.les.TxPool().Stats() - } + pending, _ := s.backend.Stats() // Assemble the transaction stats and send it to the server log.Trace("Sending pending transactions to ethstats", "count", pending) @@ -672,9 +761,9 @@ type nodeStats struct { Uptime int `json:"uptime"` } -// reportPending retrieves various stats about the node at the networking and +// reportStats retrieves various stats about the node at the networking and // mining layer and reports it to the stats server. -func (s *Service) reportStats(conn *websocket.Conn) error { +func (s *Service) reportStats(conn *connWrapper) error { // Gather the syncing and mining infos from the local miner instance var ( mining bool @@ -682,18 +771,23 @@ func (s *Service) reportStats(conn *websocket.Conn) error { syncing bool gasprice int ) - if s.eth != nil { - mining = s.eth.Miner().Mining() - hashrate = int(s.eth.Miner().HashRate()) + // check if backend is a full node + fullBackend, ok := s.backend.(fullNodeBackend) + if ok { + mining = fullBackend.Miner().Mining() + hashrate = int(fullBackend.Miner().Hashrate()) - sync := s.eth.Downloader().Progress() - syncing = s.eth.BlockChain().CurrentHeader().Number.Uint64() >= sync.HighestBlock + sync := fullBackend.SyncProgress() + syncing = fullBackend.CurrentHeader().Number.Uint64() >= sync.HighestBlock - price, _ := s.eth.APIBackend.SuggestPrice(context.Background()) + price, _ := fullBackend.SuggestGasTipCap(context.Background()) gasprice = int(price.Uint64()) + if basefee := fullBackend.CurrentHeader().BaseFee; basefee != nil { + gasprice += int(basefee.Uint64()) + } } else { - sync := s.les.Downloader().Progress() - syncing = s.les.BlockChain().CurrentHeader().Number.Uint64() >= sync.HighestBlock + sync := s.backend.SyncProgress() + syncing = s.backend.CurrentHeader().Number.Uint64() >= sync.HighestBlock } // Assemble the node stats and send it to the server log.Trace("Sending node details to ethstats") diff --git a/ethstats/ethstats_test.go b/ethstats/ethstats_test.go new file mode 100644 index 00000000..60322f76 --- /dev/null +++ b/ethstats/ethstats_test.go @@ -0,0 +1,82 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethstats + +import ( + "strconv" + "testing" +) + +func TestParseEthstatsURL(t *testing.T) { + cases := []struct { + url string + node, pass, host string + }{ + { + url: `"debug meowsbits":mypass@ws://mordor.dash.fault.dev:3000`, + node: "debug meowsbits", pass: "mypass", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `"debug @meowsbits":mypass@ws://mordor.dash.fault.dev:3000`, + node: "debug @meowsbits", pass: "mypass", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `"debug: @meowsbits":mypass@ws://mordor.dash.fault.dev:3000`, + node: "debug: @meowsbits", pass: "mypass", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `name:@ws://mordor.dash.fault.dev:3000`, + node: "name", pass: "", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `name@ws://mordor.dash.fault.dev:3000`, + node: "name", pass: "", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `:mypass@ws://mordor.dash.fault.dev:3000`, + node: "", pass: "mypass", host: "ws://mordor.dash.fault.dev:3000", + }, + { + url: `:@ws://mordor.dash.fault.dev:3000`, + node: "", pass: "", host: "ws://mordor.dash.fault.dev:3000", + }, + } + + for i, c := range cases { + parts, err := parseEthstatsURL(c.url) + if err != nil { + t.Fatal(err) + } + node, pass, host := parts[0], parts[1], parts[2] + + // unquote because the value provided will be used as a CLI flag value, so unescaped quotes will be removed + nodeUnquote, err := strconv.Unquote(node) + if err == nil { + node = nodeUnquote + } + + if node != c.node { + t.Errorf("case=%d mismatch node value, got: %v ,want: %v", i, node, c.node) + } + if pass != c.pass { + t.Errorf("case=%d mismatch pass value, got: %v ,want: %v", i, pass, c.pass) + } + if host != c.host { + t.Errorf("case=%d mismatch host value, got: %v ,want: %v", i, host, c.host) + } + } +} diff --git a/event/event.go b/event/event.go index 42327873..ce1b03d5 100644 --- a/event/event.go +++ b/event/event.go @@ -104,6 +104,7 @@ func (mux *TypeMux) Post(ev interface{}) error { // Stop blocks until all current deliveries have finished. func (mux *TypeMux) Stop() { mux.mutex.Lock() + defer mux.mutex.Unlock() for _, subs := range mux.subm { for _, sub := range subs { sub.closewait() @@ -111,11 +112,11 @@ func (mux *TypeMux) Stop() { } mux.subm = nil mux.stopped = true - mux.mutex.Unlock() } func (mux *TypeMux) del(s *TypeMuxSubscription) { mux.mutex.Lock() + defer mux.mutex.Unlock() for typ, subs := range mux.subm { if pos := find(subs, s); pos >= 0 { if len(subs) == 1 { @@ -125,7 +126,6 @@ func (mux *TypeMux) del(s *TypeMuxSubscription) { } } } - s.mux.mutex.Unlock() } func find(slice []*TypeMuxSubscription, item *TypeMuxSubscription) int { @@ -196,9 +196,9 @@ func (s *TypeMuxSubscription) closewait() { s.closed = true s.postMu.Lock() + defer s.postMu.Unlock() close(s.postC) s.postC = nil - s.postMu.Unlock() } func (s *TypeMuxSubscription) deliver(event *TypeMuxEvent) { diff --git a/event/event_test.go b/event/event_test.go index 2be357ba..bdad11f1 100644 --- a/event/event_test.go +++ b/event/event_test.go @@ -29,7 +29,7 @@ func TestSubCloseUnsub(t *testing.T) { // the point of this test is **not** to panic var mux TypeMux mux.Stop() - sub := mux.Subscribe(int(0)) + sub := mux.Subscribe(0) sub.Unsubscribe() } @@ -203,6 +203,7 @@ func BenchmarkPostConcurrent(b *testing.B) { // for comparison func BenchmarkChanSend(b *testing.B) { c := make(chan interface{}) + defer close(c) closed := make(chan struct{}) go func() { for range c { diff --git a/event/example_feed_test.go b/event/example_feed_test.go index 297d24a9..9b5ad50d 100644 --- a/event/example_feed_test.go +++ b/event/example_feed_test.go @@ -19,7 +19,7 @@ package event_test import ( "fmt" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum/event" ) func ExampleFeed_acknowledgedEvents() { diff --git a/event/example_scope_test.go b/event/example_scope_test.go index 5f20f131..825a8dee 100644 --- a/event/example_scope_test.go +++ b/event/example_scope_test.go @@ -20,7 +20,7 @@ import ( "fmt" "sync" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum/event" ) // This example demonstrates how SubscriptionScope can be used to control the lifetime of diff --git a/event/example_subscription_test.go b/event/example_subscription_test.go index 47c78a33..5c76b55d 100644 --- a/event/example_subscription_test.go +++ b/event/example_subscription_test.go @@ -19,7 +19,7 @@ package event_test import ( "fmt" - "github.com/cryptoecc/ETH-ECC/event" + "github.com/ethereum/go-ethereum/event" ) func ExampleNewSubscription() { diff --git a/event/feed.go b/event/feed.go index f578f00c..33dafe58 100644 --- a/event/feed.go +++ b/event/feed.go @@ -39,10 +39,9 @@ type Feed struct { sendCases caseList // the active set of select cases used by Send // The inbox holds newly subscribed channels until they are added to sendCases. - mu sync.Mutex - inbox caseList - etype reflect.Type - closed bool + mu sync.Mutex + inbox caseList + etype reflect.Type } // This is the index of the first actual subscription channel in sendCases. @@ -139,6 +138,7 @@ func (f *Feed) Send(value interface{}) (nsent int) { if !f.typecheck(rvalue.Type()) { f.sendLock <- struct{}{} + f.mu.Unlock() panic(feedTypeError{op: "Send", got: rvalue.Type(), want: f.etype}) } f.mu.Unlock() diff --git a/event/feed_test.go b/event/feed_test.go index be887693..cdf29fdd 100644 --- a/event/feed_test.go +++ b/event/feed_test.go @@ -27,8 +27,8 @@ import ( func TestFeedPanics(t *testing.T) { { var f Feed - f.Send(int(2)) - want := feedTypeError{op: "Send", got: reflect.TypeOf(uint64(0)), want: reflect.TypeOf(int(0))} + f.Send(2) + want := feedTypeError{op: "Send", got: reflect.TypeOf(uint64(0)), want: reflect.TypeOf(0)} if err := checkPanic(want, func() { f.Send(uint64(2)) }); err != nil { t.Error(err) } @@ -37,14 +37,14 @@ func TestFeedPanics(t *testing.T) { var f Feed ch := make(chan int) f.Subscribe(ch) - want := feedTypeError{op: "Send", got: reflect.TypeOf(uint64(0)), want: reflect.TypeOf(int(0))} + want := feedTypeError{op: "Send", got: reflect.TypeOf(uint64(0)), want: reflect.TypeOf(0)} if err := checkPanic(want, func() { f.Send(uint64(2)) }); err != nil { t.Error(err) } } { var f Feed - f.Send(int(2)) + f.Send(2) want := feedTypeError{op: "Subscribe", got: reflect.TypeOf(make(chan uint64)), want: reflect.TypeOf(make(chan<- int))} if err := checkPanic(want, func() { f.Subscribe(make(chan uint64)) }); err != nil { t.Error(err) @@ -58,7 +58,7 @@ func TestFeedPanics(t *testing.T) { } { var f Feed - if err := checkPanic(errBadChannel, func() { f.Subscribe(int(0)) }); err != nil { + if err := checkPanic(errBadChannel, func() { f.Subscribe(0) }); err != nil { t.Error(err) } } @@ -86,6 +86,7 @@ func TestFeed(t *testing.T) { subchan := make(chan int) sub := feed.Subscribe(subchan) timeout := time.NewTimer(2 * time.Second) + defer timeout.Stop() subscribed.Done() select { diff --git a/event/subscription.go b/event/subscription.go index f6f76a77..6c628747 100644 --- a/event/subscription.go +++ b/event/subscription.go @@ -21,7 +21,7 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) // Subscription represents a stream of events. The carrier of the events is typically a @@ -95,6 +95,26 @@ func (s *funcSub) Err() <-chan error { // Resubscribe applies backoff between calls to fn. The time between calls is adapted // based on the error rate, but will never exceed backoffMax. func Resubscribe(backoffMax time.Duration, fn ResubscribeFunc) Subscription { + return ResubscribeErr(backoffMax, func(ctx context.Context, _ error) (Subscription, error) { + return fn(ctx) + }) +} + +// A ResubscribeFunc attempts to establish a subscription. +type ResubscribeFunc func(context.Context) (Subscription, error) + +// ResubscribeErr calls fn repeatedly to keep a subscription established. When the +// subscription is established, ResubscribeErr waits for it to fail and calls fn again. This +// process repeats until Unsubscribe is called or the active subscription ends +// successfully. +// +// The difference between Resubscribe and ResubscribeErr is that with ResubscribeErr, +// the error of the failing subscription is available to the callback for logging +// purposes. +// +// ResubscribeErr applies backoff between calls to fn. The time between calls is adapted +// based on the error rate, but will never exceed backoffMax. +func ResubscribeErr(backoffMax time.Duration, fn ResubscribeErrFunc) Subscription { s := &resubscribeSub{ waitTime: backoffMax / 10, backoffMax: backoffMax, @@ -106,15 +126,18 @@ func Resubscribe(backoffMax time.Duration, fn ResubscribeFunc) Subscription { return s } -// A ResubscribeFunc attempts to establish a subscription. -type ResubscribeFunc func(context.Context) (Subscription, error) +// A ResubscribeErrFunc attempts to establish a subscription. +// For every call but the first, the second argument to this function is +// the error that occurred with the previous subscription. +type ResubscribeErrFunc func(context.Context, error) (Subscription, error) type resubscribeSub struct { - fn ResubscribeFunc + fn ResubscribeErrFunc err chan error unsub chan struct{} unsubOnce sync.Once lastTry mclock.AbsTime + lastSubErr error waitTime, backoffMax time.Duration } @@ -145,31 +168,30 @@ func (s *resubscribeSub) loop() { func (s *resubscribeSub) subscribe() Subscription { subscribed := make(chan error) var sub Subscription -retry: for { s.lastTry = mclock.Now() ctx, cancel := context.WithCancel(context.Background()) go func() { - rsub, err := s.fn(ctx) + rsub, err := s.fn(ctx, s.lastSubErr) sub = rsub subscribed <- err }() select { case err := <-subscribed: cancel() - if err != nil { - // Subscribing failed, wait before launching the next try. - if s.backoffWait() { - return nil + if err == nil { + if sub == nil { + panic("event: ResubscribeFunc returned nil subscription and no error") } - continue retry + return sub } - if sub == nil { - panic("event: ResubscribeFunc returned nil subscription and no error") + // Subscribing failed, wait before launching the next try. + if s.backoffWait() { + return nil // unsubscribed during wait } - return sub case <-s.unsub: cancel() + <-subscribed // avoid leaking the s.fn goroutine. return nil } } @@ -179,6 +201,7 @@ func (s *resubscribeSub) waitForError(sub Subscription) bool { defer sub.Unsubscribe() select { case err := <-sub.Err(): + s.lastSubErr = err return err == nil case <-s.unsub: return true diff --git a/event/subscription_test.go b/event/subscription_test.go index 5b8a2c8e..ba081705 100644 --- a/event/subscription_test.go +++ b/event/subscription_test.go @@ -19,6 +19,8 @@ package event import ( "context" "errors" + "fmt" + "reflect" "testing" "time" ) @@ -102,7 +104,7 @@ func TestResubscribe(t *testing.T) { func TestResubscribeAbort(t *testing.T) { t.Parallel() - done := make(chan error) + done := make(chan error, 1) sub := Resubscribe(0, func(ctx context.Context) (Subscription, error) { select { case <-ctx.Done(): @@ -118,3 +120,37 @@ func TestResubscribeAbort(t *testing.T) { t.Fatal(err) } } + +func TestResubscribeWithErrorHandler(t *testing.T) { + t.Parallel() + + var i int + nfails := 6 + subErrs := make([]string, 0) + sub := ResubscribeErr(100*time.Millisecond, func(ctx context.Context, lastErr error) (Subscription, error) { + i++ + var lastErrVal string + if lastErr != nil { + lastErrVal = lastErr.Error() + } + subErrs = append(subErrs, lastErrVal) + sub := NewSubscription(func(unsubscribed <-chan struct{}) error { + if i < nfails { + return fmt.Errorf("err-%v", i) + } else { + return nil + } + }) + return sub, nil + }) + + <-sub.Err() + if i != nfails { + t.Fatalf("resubscribe function called %d times, want %d times", i, nfails) + } + + expectedSubErrs := []string{"", "err-1", "err-2", "err-3", "err-4", "err-5"} + if !reflect.DeepEqual(subErrs, expectedSubErrs) { + t.Fatalf("unexpected subscription errors %v, want %v", subErrs, expectedSubErrs) + } +} diff --git a/go.mod b/go.mod index 96b1e14d..4a769c7a 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,108 @@ -module cryptoecc/ETH-ECC/blob/master/go.mod +module github.com/ethereum/go-ethereum -go 1.18 +go 1.17 + +require ( + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 + github.com/VictoriaMetrics/fastcache v1.6.0 + github.com/aws/aws-sdk-go-v2 v1.2.0 + github.com/aws/aws-sdk-go-v2/config v1.1.1 + github.com/aws/aws-sdk-go-v2/credentials v1.1.1 + github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 + github.com/btcsuite/btcd/btcec/v2 v2.2.0 + github.com/cespare/cp v0.1.0 + github.com/cloudflare/cloudflare-go v0.14.0 + github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f + github.com/davecgh/go-spew v1.1.1 + github.com/deckarep/golang-set v1.8.0 + github.com/docker/docker v1.6.2 + github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf + github.com/edsrzf/mmap-go v1.0.0 + github.com/fatih/color v1.7.0 + github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c + github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 + github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff + github.com/go-stack/stack v1.8.0 + github.com/golang-jwt/jwt/v4 v4.3.0 + github.com/golang/protobuf v1.5.2 + github.com/golang/snappy v0.0.4 + github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa + github.com/google/uuid v1.2.0 + github.com/gorilla/websocket v1.4.2 + github.com/graph-gophers/graphql-go v1.3.0 + github.com/hashicorp/go-bexpr v0.1.10 + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d + github.com/holiman/bloomfilter/v2 v2.0.3 + github.com/holiman/uint256 v1.2.0 + github.com/huin/goupnp v1.0.3 + github.com/influxdata/influxdb v1.8.3 + github.com/influxdata/influxdb-client-go/v2 v2.4.0 + github.com/jackpal/go-nat-pmp v1.0.2 + github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e + github.com/julienschmidt/httprouter v1.2.0 + github.com/karalabe/usb v0.0.2 + github.com/mattn/go-colorable v0.1.8 + github.com/mattn/go-isatty v0.0.12 + github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 + github.com/olekukonko/tablewriter v0.0.5 + github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 + github.com/prometheus/tsdb v0.7.1 + github.com/rjeczalik/notify v0.9.1 + github.com/rs/cors v1.7.0 + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible + github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 + github.com/stretchr/testify v1.7.2 + github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef + github.com/urfave/cli/v2 v2.10.2 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 + golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 + golang.org/x/text v0.3.7 + golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba + golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce +) + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 // indirect + github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 // indirect + github.com/aws/smithy-go v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/deepmap/oapi-codegen v1.8.2 // indirect + github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect + github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 // indirect + github.com/go-logfmt/logfmt v0.4.0 // indirect + github.com/go-ole/go-ole v1.2.1 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect + github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect + github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/pointerstructure v1.2.0 // indirect + github.com/naoina/go-stringutil v0.1.0 // indirect + github.com/opentracing/opentracing-go v1.1.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/tklauser/go-sysconf v0.3.5 // indirect + github.com/tklauser/numcpus v0.2.2 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 // indirect + golang.org/x/net v0.0.0-20220607020251-c690dde0001d // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + google.golang.org/protobuf v1.26.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..4b27867f --- /dev/null +++ b/go.sum @@ -0,0 +1,707 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/aws/aws-sdk-go-v2 v1.2.0 h1:BS+UYpbsElC82gB+2E2jiCBg36i8HlubTB/dO/moQ9c= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0 h1:D6CSsM3gdxaGaqXnPgOBCeL6Mophqzu7KJOu7zW78sU= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +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/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= +github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/docker v1.6.2 h1:HlFGsy+9/xrgMmhmN+NGhCc5SHGJ7I+kHosRR1xc/aI= +github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d h1:4SFsTMi4UahlKoloni7L4eYzhFRifURQLw+yv0QDCx8= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/graphql/graphiql.go b/graphql/graphiql.go index 483d4cea..864ebf57 100644 --- a/graphql/graphiql.go +++ b/graphql/graphiql.go @@ -52,7 +52,7 @@ func (h GraphiQL) ServeHTTP(w http.ResponseWriter, r *http.Request) { respond(w, errorJSON("only GET requests are supported"), http.StatusMethodNotAllowed) return } - + w.Header().Set("Content-Type", "text/html") w.Write(graphiql) } diff --git a/graphql/graphql.go b/graphql/graphql.go index caf3c4bf..66c25841 100644 --- a/graphql/graphql.go +++ b/graphql/graphql.go @@ -20,36 +20,71 @@ package graphql import ( "context" "errors" - "time" - - "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/filters" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" + "fmt" + "math/big" + "sort" + "strconv" + + "github.com/ethereum/go-ethereum" + "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/misc" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "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 ( - errOnlyOnMainChain = errors.New("this operation is only available for blocks on the canonical chain") - errBlockInvariant = errors.New("block objects must be instantiated with at least one of num or hash") + errBlockInvariant = errors.New("block objects must be instantiated with at least one of num or hash") ) +type Long int64 + +// ImplementsGraphQLType returns true if Long implements the provided GraphQL type. +func (b Long) ImplementsGraphQLType(name string) bool { return name == "Long" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Long) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + // uncomment to support hex values + //if strings.HasPrefix(input, "0x") { + // // apply leniency and support hex representations of longs. + // value, err := hexutil.DecodeUint64(input) + // *b = Long(value) + // return err + //} else { + value, err := strconv.ParseInt(input, 10, 64) + *b = Long(value) + return err + //} + case int32: + *b = Long(input) + case int64: + *b = Long(input) + case float64: + *b = Long(input) + default: + err = fmt.Errorf("unexpected type %T for Long", input) + } + return err +} + // Account represents an Ethereum account at a particular block. type Account struct { - backend ethapi.Backend - address common.Address - blockNumber rpc.BlockNumber + r *Resolver + 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.StateAndHeaderByNumber(ctx, a.blockNumber) + state, _, err := a.r.backend.StateAndHeaderByNumberOrHash(ctx, a.blockNrOrHash) return state, err } @@ -62,10 +97,22 @@ func (a *Account) Balance(ctx context.Context) (hexutil.Big, error) { if err != nil { return hexutil.Big{}, err } - return hexutil.Big(*state.GetBalance(a.address)), nil + balance := state.GetBalance(a.address) + if balance == nil { + return hexutil.Big{}, fmt.Errorf("failed to load balance %x", a.address) + } + return hexutil.Big(*balance), nil } func (a *Account) TransactionCount(ctx context.Context) (hexutil.Uint64, error) { + // Ask transaction pool for the nonce which includes pending transactions + if blockNr, ok := a.blockNrOrHash.Number(); ok && blockNr == rpc.PendingBlockNumber { + nonce, err := a.r.backend.GetPoolNonce(ctx, a.address) + if err != nil { + return 0, err + } + return hexutil.Uint64(nonce), nil + } state, err := a.getState(ctx) if err != nil { return 0, err @@ -78,7 +125,7 @@ func (a *Account) Code(ctx context.Context) (hexutil.Bytes, error) { if err != nil { return hexutil.Bytes{}, err } - return hexutil.Bytes(state.GetCode(a.address)), nil + return state.GetCode(a.address), nil } func (a *Account) Storage(ctx context.Context, args struct{ Slot common.Hash }) (common.Hash, error) { @@ -91,7 +138,7 @@ func (a *Account) Storage(ctx context.Context, args struct{ Slot common.Hash }) // Log represents an individual log message. All arguments are mandatory. type Log struct { - backend ethapi.Backend + r *Resolver transaction *Transaction log *types.Log } @@ -102,9 +149,9 @@ func (l *Log) Transaction(ctx context.Context) *Transaction { func (l *Log) Account(ctx context.Context, args BlockNumberArgs) *Account { return &Account{ - backend: l.backend, - address: l.log.Address, - blockNumber: args.Number(), + r: l.r, + address: l.log.Address, + blockNrOrHash: args.NumberOrLatest(), } } @@ -117,34 +164,50 @@ func (l *Log) Topics(ctx context.Context) []common.Hash { } func (l *Log) Data(ctx context.Context) hexutil.Bytes { - return hexutil.Bytes(l.log.Data) + return l.log.Data +} + +// AccessTuple represents EIP-2930 +type AccessTuple struct { + address common.Address + storageKeys []common.Hash +} + +func (at *AccessTuple) Address(ctx context.Context) common.Address { + return at.address +} + +func (at *AccessTuple) StorageKeys(ctx context.Context) []common.Hash { + return at.storageKeys } // 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 + r *Resolver + 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 { + // Try to return an already finalized transaction + tx, blockHash, _, index, err := t.r.backend.GetTransaction(ctx, t.hash) + if err == nil && tx != nil { t.tx = tx + blockNrOrHash := rpc.BlockNumberOrHashWithHash(blockHash, false) t.block = &Block{ - backend: t.backend, - hash: blockHash, - canonical: unknown, + r: t.r, + numberOrHash: &blockNrOrHash, } t.index = index - } else { - t.tx = t.backend.GetPoolTransaction(t.hash) + return t.tx, nil } + // No finalized transaction, try to retrieve it from the pool + t.tx = t.r.backend.GetPoolTransaction(t.hash) } return t.tx, nil } @@ -158,7 +221,7 @@ func (t *Transaction) InputData(ctx context.Context) (hexutil.Bytes, error) { if err != nil || tx == nil { return hexutil.Bytes{}, err } - return hexutil.Bytes(tx.Data()), nil + return tx.Data(), nil } func (t *Transaction) Gas(ctx context.Context) (hexutil.Uint64, error) { @@ -174,7 +237,93 @@ func (t *Transaction) GasPrice(ctx context.Context) (hexutil.Big, error) { if err != nil || tx == nil { return hexutil.Big{}, err } - return hexutil.Big(*tx.GasPrice()), nil + switch tx.Type() { + case types.AccessListTxType: + return hexutil.Big(*tx.GasPrice()), nil + case types.DynamicFeeTxType: + if t.block != nil { + if baseFee, _ := t.block.BaseFeePerGas(ctx); baseFee != nil { + // price = min(tip, gasFeeCap - baseFee) + baseFee + return (hexutil.Big)(*math.BigMin(new(big.Int).Add(tx.GasTipCap(), baseFee.ToInt()), tx.GasFeeCap())), nil + } + } + return hexutil.Big(*tx.GasPrice()), nil + default: + return hexutil.Big(*tx.GasPrice()), nil + } +} + +func (t *Transaction) EffectiveGasPrice(ctx context.Context) (*hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + // Pending tx + if t.block == nil { + return nil, nil + } + header, err := t.block.resolveHeader(ctx) + if err != nil || header == nil { + return nil, err + } + if header.BaseFee == nil { + return (*hexutil.Big)(tx.GasPrice()), nil + } + return (*hexutil.Big)(math.BigMin(new(big.Int).Add(tx.GasTipCap(), header.BaseFee), tx.GasFeeCap())), nil +} + +func (t *Transaction) MaxFeePerGas(ctx context.Context) (*hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + switch tx.Type() { + case types.AccessListTxType: + return nil, nil + case types.DynamicFeeTxType: + return (*hexutil.Big)(tx.GasFeeCap()), nil + default: + return nil, nil + } +} + +func (t *Transaction) MaxPriorityFeePerGas(ctx context.Context) (*hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + switch tx.Type() { + case types.AccessListTxType: + return nil, nil + case types.DynamicFeeTxType: + return (*hexutil.Big)(tx.GasTipCap()), nil + default: + return nil, nil + } +} + +func (t *Transaction) EffectiveTip(ctx context.Context) (*hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + // Pending tx + if t.block == nil { + return nil, nil + } + header, err := t.block.resolveHeader(ctx) + if err != nil || header == nil { + return nil, err + } + if header.BaseFee == nil { + return (*hexutil.Big)(tx.GasPrice()), nil + } + + tip, err := tx.EffectiveGasTip(header.BaseFee) + if err != nil { + return nil, err + } + return (*hexutil.Big)(tip), nil } func (t *Transaction) Value(ctx context.Context) (hexutil.Big, error) { @@ -182,6 +331,9 @@ func (t *Transaction) Value(ctx context.Context) (hexutil.Big, error) { if err != nil || tx == nil { return hexutil.Big{}, err } + if tx.Value() == nil { + return hexutil.Big{}, fmt.Errorf("invalid transaction value %x", t.hash) + } return hexutil.Big(*tx.Value()), nil } @@ -203,9 +355,9 @@ func (t *Transaction) To(ctx context.Context, args BlockNumberArgs) (*Account, e return nil, nil } return &Account{ - backend: t.backend, - address: *to, - blockNumber: args.Number(), + r: t.r, + address: *to, + blockNrOrHash: args.NumberOrLatest(), }, nil } @@ -214,16 +366,12 @@ func (t *Transaction) From(ctx context.Context, args BlockNumberArgs) (*Account, if err != nil || tx == nil { return nil, err } - var signer types.Signer = types.HomesteadSigner{} - if tx.Protected() { - signer = types.NewEIP155Signer(tx.ChainId()) - } + signer := types.LatestSigner(t.r.backend.ChainConfig()) from, _ := types.Sender(signer, tx) - return &Account{ - backend: t.backend, - address: from, - blockNumber: args.Number(), + r: t.r, + address: from, + blockNrOrHash: args.NumberOrLatest(), }, nil } @@ -260,30 +408,33 @@ func (t *Transaction) getReceipt(ctx context.Context) (*types.Receipt, error) { return receipts[t.index], nil } -func (t *Transaction) Status(ctx context.Context) (*hexutil.Uint64, error) { +func (t *Transaction) Status(ctx context.Context) (*Long, error) { receipt, err := t.getReceipt(ctx) if err != nil || receipt == nil { return nil, err } - ret := hexutil.Uint64(receipt.Status) + if len(receipt.PostState) != 0 { + return nil, nil + } + ret := Long(receipt.Status) return &ret, nil } -func (t *Transaction) GasUsed(ctx context.Context) (*hexutil.Uint64, error) { +func (t *Transaction) GasUsed(ctx context.Context) (*Long, error) { receipt, err := t.getReceipt(ctx) if err != nil || receipt == nil { return nil, err } - ret := hexutil.Uint64(receipt.GasUsed) + ret := Long(receipt.GasUsed) return &ret, nil } -func (t *Transaction) CumulativeGasUsed(ctx context.Context) (*hexutil.Uint64, error) { +func (t *Transaction) CumulativeGasUsed(ctx context.Context) (*Long, error) { receipt, err := t.getReceipt(ctx) if err != nil || receipt == nil { return nil, err } - ret := hexutil.Uint64(receipt.CumulativeGasUsed) + ret := Long(receipt.CumulativeGasUsed) return &ret, nil } @@ -293,69 +444,135 @@ func (t *Transaction) CreatedContract(ctx context.Context, args BlockNumberArgs) return nil, err } return &Account{ - backend: t.backend, - address: receipt.ContractAddress, - blockNumber: args.Number(), + r: t.r, + 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 { + if _, err := t.resolve(ctx); err != nil { return nil, err } - ret := make([]*Log, 0, len(receipt.Logs)) - for _, log := range receipt.Logs { + if t.block == nil { + return nil, nil + } + if _, ok := t.block.numberOrHash.Hash(); !ok { + header, err := t.r.backend.HeaderByNumberOrHash(ctx, *t.block.numberOrHash) + if err != nil { + return nil, err + } + hash := header.Hash() + t.block.numberOrHash.BlockHash = &hash + } + return t.getLogs(ctx) +} + +// getLogs returns log objects for the given tx. +// Assumes block hash is resolved. +func (t *Transaction) getLogs(ctx context.Context) (*[]*Log, error) { + var ( + hash, _ = t.block.numberOrHash.Hash() + filter = t.r.filterSystem.NewBlockFilter(hash, nil, nil) + logs, err = filter.Logs(ctx) + ) + if err != nil { + return nil, err + } + var ret []*Log + // Select tx logs from all block logs + ix := sort.Search(len(logs), func(i int) bool { return uint64(logs[i].TxIndex) == t.index }) + for ix < len(logs) && uint64(logs[ix].TxIndex) == t.index { ret = append(ret, &Log{ - backend: t.backend, + r: t.r, transaction: t, - log: log, + log: logs[ix], }) + ix++ } return &ret, nil } -type BlockType int +func (t *Transaction) Type(ctx context.Context) (*int32, error) { + tx, err := t.resolve(ctx) + if err != nil { + return nil, err + } + txType := int32(tx.Type()) + return &txType, nil +} -const ( - unknown BlockType = iota - isCanonical - notCanonical -) +func (t *Transaction) AccessList(ctx context.Context) (*[]*AccessTuple, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + accessList := tx.AccessList() + ret := make([]*AccessTuple, 0, len(accessList)) + for _, al := range accessList { + ret = append(ret, &AccessTuple{ + address: al.Address, + storageKeys: al.StorageKeys, + }) + } + return &ret, nil +} -// Block represents an Ethereum block. -// backend, and either num or hash are mandatory. All other fields are lazily fetched -// when required. -type Block struct { - backend ethapi.Backend - num *rpc.BlockNumber - hash common.Hash - header *types.Header - block *types.Block - receipts []*types.Receipt - canonical BlockType // Indicates if this block is on the main chain or not. +func (t *Transaction) R(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + _, r, _ := tx.RawSignatureValues() + return hexutil.Big(*r), nil } -func (b *Block) onMainChain(ctx context.Context) error { - if b.canonical == unknown { - header, err := b.resolveHeader(ctx) - if err != nil { - return err - } - canonHeader, err := b.backend.HeaderByNumber(ctx, rpc.BlockNumber(header.Number.Uint64())) - if err != nil { - return err - } - if header.Hash() == canonHeader.Hash() { - b.canonical = isCanonical - } else { - b.canonical = notCanonical - } +func (t *Transaction) S(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + _, _, s := tx.RawSignatureValues() + return hexutil.Big(*s), nil +} + +func (t *Transaction) V(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + v, _, _ := tx.RawSignatureValues() + return hexutil.Big(*v), nil +} + +func (t *Transaction) Raw(ctx context.Context) (hexutil.Bytes, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Bytes{}, err } - if b.canonical != isCanonical { - return errOnlyOnMainChain + return tx.MarshalBinary() +} + +func (t *Transaction) RawReceipt(ctx context.Context) (hexutil.Bytes, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return hexutil.Bytes{}, err } - return nil + return receipt.MarshalBinary() +} + +type BlockType int + +// Block represents an Ethereum block. +// backend, and numberOrHash are mandatory. All other fields are lazily fetched +// when required. +type Block struct { + r *Resolver + 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 @@ -364,14 +581,17 @@ func (b *Block) resolve(ctx context.Context) (*types.Block, error) { if b.block != nil { return b.block, nil } - var err error - if b.hash != (common.Hash{}) { - b.block, err = b.backend.BlockByHash(ctx, b.hash) - } else { - b.block, err = b.backend.BlockByNumber(ctx, *b.num) + if b.numberOrHash == nil { + latest := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + b.numberOrHash = &latest } + var err error + b.block, err = b.r.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 } @@ -380,15 +600,15 @@ func (b *Block) resolve(ctx context.Context) (*types.Block, error) { // 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.num == nil && b.hash == (common.Hash{}) { + 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) + b.header, err = b.r.backend.HeaderByHash(ctx, b.hash) } else { - b.header, err = b.backend.HeaderByNumber(ctx, *b.num) + b.header, err = b.r.backend.HeaderByNumberOrHash(ctx, *b.numberOrHash) } } return b.header, err @@ -406,25 +626,22 @@ func (b *Block) resolveReceipts(ctx context.Context) ([]*types.Receipt, error) { } hash = header.Hash() } - receipts, err := b.backend.GetReceipts(ctx, hash) + receipts, err := b.r.backend.GetReceipts(ctx, hash) if err != nil { return nil, err } - b.receipts = []*types.Receipt(receipts) + b.receipts = receipts } return b.receipts, nil } -func (b *Block) Number(ctx context.Context) (hexutil.Uint64, error) { - if b.num == nil || *b.num == rpc.LatestBlockNumber { - header, err := b.resolveHeader(ctx) - if err != nil { - return 0, err - } - num := rpc.BlockNumber(header.Number.Uint64()) - b.num = &num +func (b *Block) Number(ctx context.Context) (Long, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err } - return hexutil.Uint64(*b.num), nil + + return Long(header.Number.Uint64()), nil } func (b *Block) Hash(ctx context.Context) (common.Hash, error) { @@ -438,47 +655,62 @@ func (b *Block) Hash(ctx context.Context) (common.Hash, error) { return b.hash, nil } -func (b *Block) GasLimit(ctx context.Context) (hexutil.Uint64, error) { +func (b *Block) GasLimit(ctx context.Context) (Long, error) { header, err := b.resolveHeader(ctx) if err != nil { return 0, err } - return hexutil.Uint64(header.GasLimit), nil + return Long(header.GasLimit), nil } -func (b *Block) GasUsed(ctx context.Context) (hexutil.Uint64, error) { +func (b *Block) GasUsed(ctx context.Context) (Long, error) { header, err := b.resolveHeader(ctx) if err != nil { return 0, err } - return hexutil.Uint64(header.GasUsed), nil + return Long(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.num == nil && b.hash != (common.Hash{}) && b.header == nil { - if _, err := b.resolveHeader(ctx); err != nil { - return nil, err +func (b *Block) BaseFeePerGas(ctx context.Context) (*hexutil.Big, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + if header.BaseFee == nil { + return nil, nil + } + return (*hexutil.Big)(header.BaseFee), nil +} + +func (b *Block) NextBaseFeePerGas(ctx context.Context) (*hexutil.Big, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + chaincfg := b.r.backend.ChainConfig() + if header.BaseFee == nil { + // Make sure next block doesn't enable EIP-1559 + if !chaincfg.IsLondon(new(big.Int).Add(header.Number, common.Big1)) { + return nil, nil } } - if b.header != nil && b.header.Number.Uint64() > 0 { - num := rpc.BlockNumber(b.header.Number.Uint64() - 1) - return &Block{ - backend: b.backend, - num: &num, - hash: b.header.ParentHash, - canonical: unknown, - }, nil + nextBaseFee := misc.CalcBaseFee(chaincfg, header) + return (*hexutil.Big)(nextBaseFee), nil +} + +func (b *Block) Parent(ctx context.Context) (*Block, error) { + if _, err := b.resolveHeader(ctx); err != nil { + return nil, err } - if b.num != nil && *b.num != 0 { - num := *b.num - 1 - return &Block{ - backend: b.backend, - num: &num, - canonical: isCanonical, - }, nil + if b.header == nil || b.header.Number.Uint64() < 1 { + return nil, nil } - return nil, nil + num := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(b.header.Number.Uint64() - 1)) + return &Block{ + r: b.r, + numberOrHash: &num, + hash: b.header.ParentHash, + }, nil } func (b *Block) Difficulty(ctx context.Context) (hexutil.Big, error) { @@ -502,7 +734,7 @@ func (b *Block) Nonce(ctx context.Context) (hexutil.Bytes, error) { if err != nil { return hexutil.Bytes{}, err } - return hexutil.Bytes(header.Nonce[:]), nil + return header.Nonce[:], nil } func (b *Block) MixHash(ctx context.Context) (common.Hash, error) { @@ -561,13 +793,11 @@ func (b *Block) Ommers(ctx context.Context) (*[]*Block, error) { } ret := make([]*Block, 0, len(block.Uncles())) for _, uncle := range block.Uncles() { - blockNumber := rpc.BlockNumber(uncle.Number.Uint64()) + blockNumberOrHash := rpc.BlockNumberOrHashWithHash(uncle.Hash(), false) ret = append(ret, &Block{ - backend: b.backend, - num: &blockNumber, - hash: uncle.Hash(), - header: uncle, - canonical: notCanonical, + r: b.r, + numberOrHash: &blockNumberOrHash, + header: uncle, }) } return &ret, nil @@ -578,7 +808,7 @@ func (b *Block) ExtraData(ctx context.Context) (hexutil.Bytes, error) { if err != nil { return hexutil.Bytes{}, err } - return hexutil.Bytes(header.Extra), nil + return header.Extra, nil } func (b *Block) LogsBloom(ctx context.Context) (hexutil.Bytes, error) { @@ -586,7 +816,7 @@ func (b *Block) LogsBloom(ctx context.Context) (hexutil.Bytes, error) { if err != nil { return hexutil.Bytes{}, err } - return hexutil.Bytes(header.Bloom.Bytes()), nil + return header.Bloom.Bytes(), nil } func (b *Block) TotalDifficulty(ctx context.Context) (hexutil.Big, error) { @@ -598,21 +828,51 @@ func (b *Block) TotalDifficulty(ctx context.Context) (hexutil.Big, error) { } h = header.Hash() } - return hexutil.Big(*b.backend.GetTd(h)), nil + td := b.r.backend.GetTd(ctx, h) + if td == nil { + return hexutil.Big{}, fmt.Errorf("total difficulty not found %x", b.hash) + } + return hexutil.Big(*td), nil +} + +func (b *Block) RawHeader(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return rlp.EncodeToBytes(header) +} + +func (b *Block) Raw(ctx context.Context) (hexutil.Bytes, error) { + block, err := b.resolve(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return rlp.EncodeToBytes(block) } // 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 } -// Number returns the provided block number, or rpc.LatestBlockNumber if none +// NumberOr returns the provided block number argument, or the "current" block number or hash if none // was provided. -func (a BlockNumberArgs) Number() rpc.BlockNumber { +func (a BlockNumberArgs) NumberOr(current rpc.BlockNumberOrHash) rpc.BlockNumberOrHash { if a.Block != nil { - return rpc.BlockNumber(*a.Block) + blockNr := rpc.BlockNumber(*a.Block) + return rpc.BlockNumberOrHashWithNumber(blockNr) } - return rpc.LatestBlockNumber + 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) { @@ -621,9 +881,9 @@ func (b *Block) Miner(ctx context.Context, args BlockNumberArgs) (*Account, erro return nil, err } return &Account{ - backend: b.backend, - address: header.Coinbase, - blockNumber: args.Number(), + r: b.r, + address: header.Coinbase, + blockNrOrHash: args.NumberOrLatest(), }, nil } @@ -644,11 +904,11 @@ func (b *Block) Transactions(ctx context.Context) (*[]*Transaction, error) { 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), + r: b.r, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(i), }) } return &ret, nil @@ -665,11 +925,11 @@ func (b *Block) TransactionAt(ctx context.Context, args struct{ Index int32 }) ( } tx := txs[args.Index] return &Transaction{ - backend: b.backend, - hash: tx.Hash(), - tx: tx, - block: b, - index: uint64(args.Index), + r: b.r, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(args.Index), }, nil } @@ -683,13 +943,11 @@ func (b *Block) OmmerAt(ctx context.Context, args struct{ Index int32 }) (*Block return nil, nil } uncle := uncles[args.Index] - blockNumber := rpc.BlockNumber(uncle.Number.Uint64()) + blockNumberOrHash := rpc.BlockNumberOrHashWithHash(uncle.Hash(), false) return &Block{ - backend: b.backend, - num: &blockNumber, - hash: uncle.Hash(), - header: uncle, - canonical: notCanonical, + r: b.r, + numberOrHash: &blockNumberOrHash, + header: uncle, }, nil } @@ -714,7 +972,7 @@ type BlockFilterCriteria struct { // 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) { +func runFilter(ctx context.Context, r *Resolver, filter *filters.Filter) ([]*Log, error) { logs, err := filter.Logs(ctx) if err != nil || logs == nil { return nil, err @@ -722,8 +980,8 @@ func runFilter(ctx context.Context, be ethapi.Backend, filter *filters.Filter) ( ret := make([]*Log, 0, len(logs)) for _, log := range logs { ret = append(ret, &Log{ - backend: be, - transaction: &Transaction{backend: be, hash: log.TxHash}, + r: r, + transaction: &Transaction{r: r, hash: log.TxHash}, log: log, }) } @@ -748,125 +1006,119 @@ func (b *Block) Logs(ctx context.Context, args struct{ Filter BlockFilterCriteri hash = header.Hash() } // Construct the range filter - filter := filters.NewBlockFilter(b.backend, hash, addresses, topics) + filter := b.r.filterSystem.NewBlockFilter(hash, addresses, topics) // Run the filter and return all the logs - return runFilter(ctx, b.backend, filter) + return runFilter(ctx, b.r, filter) } func (b *Block) Account(ctx context.Context, args struct { Address common.Address }) (*Account, error) { - err := b.onMainChain(ctx) - if err != nil { - return nil, err - } - if b.num == nil { + if b.numberOrHash == nil { _, err := b.resolveHeader(ctx) if err != nil { return nil, err } } return &Account{ - backend: b.backend, - address: args.Address, - blockNumber: *b.num, + r: b.r, + 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. + 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. + MaxFeePerGas *hexutil.Big // The max price of each unit of gas, in wei (1559). + MaxPriorityFeePerGas *hexutil.Big // The max tip of each unit of gas, in wei (1559). + 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. + data hexutil.Bytes // The return data from the call + gasUsed Long // The amount of gas used + status Long // 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 { +func (c *CallResult) GasUsed() Long { return c.gasUsed } -func (c *CallResult) Status() hexutil.Uint64 { +func (c *CallResult) Status() Long { return c.status } func (b *Block) Call(ctx context.Context, args struct { - Data ethapi.CallArgs + Data ethapi.TransactionArgs }) (*CallResult, error) { - err := b.onMainChain(ctx) - if err != nil { - return nil, err - } - if b.num == nil { - _, err := b.resolveHeader(ctx) + 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.num, nil, vm.Config{}, 5*time.Second, b.backend.RPCGasCap()) - status := hexutil.Uint64(1) - if failed { + result, err := ethapi.DoCall(ctx, b.r.backend, args.Data, *b.numberOrHash, nil, b.r.backend.RPCEVMTimeout(), b.r.backend.RPCGasCap()) + if err != nil { + return nil, err + } + status := Long(1) + if result.Failed() { status = 0 } + return &CallResult{ - data: hexutil.Bytes(result), - gasUsed: hexutil.Uint64(gas), + data: result.ReturnData, + gasUsed: Long(result.UsedGas), status: status, - }, err + }, nil } func (b *Block) EstimateGas(ctx context.Context, args struct { - Data ethapi.CallArgs -}) (hexutil.Uint64, error) { - err := b.onMainChain(ctx) - if err != nil { - return hexutil.Uint64(0), err - } - if b.num == nil { + Data ethapi.TransactionArgs +}) (Long, error) { + if b.numberOrHash == nil { _, err := b.resolveHeader(ctx) if err != nil { - return hexutil.Uint64(0), err + return 0, err } } - gas, err := ethapi.DoEstimateGas(ctx, b.backend, args.Data, *b.num, b.backend.RPCGasCap()) - return gas, err + gas, err := ethapi.DoEstimateGas(ctx, b.r.backend, args.Data, *b.numberOrHash, b.r.backend.RPCGasCap()) + return Long(gas), err } type Pending struct { - backend ethapi.Backend + r *Resolver } func (p *Pending) TransactionCount(ctx context.Context) (int32, error) { - txs, err := p.backend.GetPoolTransactions() + txs, err := p.r.backend.GetPoolTransactions() return int32(len(txs)), err } func (p *Pending) Transactions(ctx context.Context) (*[]*Transaction, error) { - txs, err := p.backend.GetPoolTransactions() + txs, err := p.r.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), + r: p.r, + hash: tx.Hash(), + tx: tx, + index: uint64(i), }) } return &ret, nil @@ -875,63 +1127,74 @@ func (p *Pending) Transactions(ctx context.Context) (*[]*Transaction, error) { 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, - blockNumber: rpc.PendingBlockNumber, + r: p.r, + address: args.Address, + blockNrOrHash: pendingBlockNr, } } func (p *Pending) Call(ctx context.Context, args struct { - Data ethapi.CallArgs + Data ethapi.TransactionArgs }) (*CallResult, error) { - result, gas, failed, err := ethapi.DoCall(ctx, p.backend, args.Data, rpc.PendingBlockNumber, nil, vm.Config{}, 5*time.Second, p.backend.RPCGasCap()) - status := hexutil.Uint64(1) - if failed { + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + result, err := ethapi.DoCall(ctx, p.r.backend, args.Data, pendingBlockNr, nil, p.r.backend.RPCEVMTimeout(), p.r.backend.RPCGasCap()) + if err != nil { + return nil, err + } + status := Long(1) + if result.Failed() { status = 0 } + return &CallResult{ - data: hexutil.Bytes(result), - gasUsed: hexutil.Uint64(gas), + data: result.ReturnData, + gasUsed: Long(result.UsedGas), status: status, - }, err + }, nil } func (p *Pending) EstimateGas(ctx context.Context, args struct { - Data ethapi.CallArgs -}) (hexutil.Uint64, error) { - return ethapi.DoEstimateGas(ctx, p.backend, args.Data, rpc.PendingBlockNumber, p.backend.RPCGasCap()) + Data ethapi.TransactionArgs +}) (Long, error) { + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + gas, err := ethapi.DoEstimateGas(ctx, p.r.backend, args.Data, pendingBlockNr, p.r.backend.RPCGasCap()) + return Long(gas), err } // Resolver is the top-level object in the GraphQL hierarchy. type Resolver struct { - backend ethapi.Backend + backend ethapi.Backend + filterSystem *filters.FilterSystem } func (r *Resolver) Block(ctx context.Context, args struct { - Number *hexutil.Uint64 + Number *Long Hash *common.Hash }) (*Block, error) { var block *Block if args.Number != nil { - num := rpc.BlockNumber(uint64(*args.Number)) + if *args.Number < 0 { + return nil, nil + } + number := rpc.BlockNumber(*args.Number) + numberOrHash := rpc.BlockNumberOrHashWithNumber(number) block = &Block{ - backend: r.backend, - num: &num, - canonical: isCanonical, + r: r, + numberOrHash: &numberOrHash, } } else if args.Hash != nil { + numberOrHash := rpc.BlockNumberOrHashWithHash(*args.Hash, false) block = &Block{ - backend: r.backend, - hash: *args.Hash, - canonical: unknown, + r: r, + numberOrHash: &numberOrHash, } } else { - num := rpc.LatestBlockNumber + numberOrHash := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) block = &Block{ - backend: r.backend, - num: &num, - canonical: isCanonical, + r: r, + numberOrHash: &numberOrHash, } } // Resolve the header, return nil if it doesn't exist. @@ -947,10 +1210,10 @@ func (r *Resolver) Block(ctx context.Context, args struct { } func (r *Resolver) Blocks(ctx context.Context, args struct { - From hexutil.Uint64 - To *hexutil.Uint64 + From *Long + To *Long }) ([]*Block, error) { - from := rpc.BlockNumber(args.From) + from := rpc.BlockNumber(*args.From) var to rpc.BlockNumber if args.To != nil { @@ -963,24 +1226,34 @@ func (r *Resolver) Blocks(ctx context.Context, args struct { } ret := make([]*Block, 0, to-from+1) for i := from; i <= to; i++ { - num := i - ret = append(ret, &Block{ - backend: r.backend, - num: &num, - canonical: isCanonical, - }) + numberOrHash := rpc.BlockNumberOrHashWithNumber(i) + block := &Block{ + r: r, + numberOrHash: &numberOrHash, + } + // Resolve the header to check for existence. + // 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 { + // Blocks after must be non-existent too, break. + break + } + ret = append(ret, block) } return ret, nil } func (r *Resolver) Pending(ctx context.Context) *Pending { - return &Pending{r.backend} + return &Pending{r} } func (r *Resolver) Transaction(ctx context.Context, args struct{ Hash common.Hash }) (*Transaction, error) { tx := &Transaction{ - backend: r.backend, - hash: args.Hash, + r: r, + hash: args.Hash, } // Resolve the transaction; if it doesn't exist, return nil. t, err := tx.resolve(ctx) @@ -994,7 +1267,7 @@ func (r *Resolver) Transaction(ctx context.Context, args struct{ Hash common.Has 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 { + if err := tx.UnmarshalBinary(args.Data); err != nil { return common.Hash{}, err } hash, err := ethapi.SubmitTransaction(ctx, r.backend, tx) @@ -1040,17 +1313,31 @@ func (r *Resolver) Logs(ctx context.Context, args struct{ Filter FilterCriteria 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) + filter := r.filterSystem.NewRangeFilter(begin, end, addresses, topics) + return runFilter(ctx, r, filter) } func (r *Resolver) GasPrice(ctx context.Context) (hexutil.Big, error) { - price, err := r.backend.SuggestPrice(ctx) - return hexutil.Big(*price), err + tipcap, err := r.backend.SuggestGasTipCap(ctx) + if err != nil { + return hexutil.Big{}, err + } + if head := r.backend.CurrentHeader(); head.BaseFee != nil { + tipcap.Add(tipcap, head.BaseFee) + } + return (hexutil.Big)(*tipcap), nil +} + +func (r *Resolver) MaxPriorityFeePerGas(ctx context.Context) (hexutil.Big, error) { + tipcap, err := r.backend.SuggestGasTipCap(ctx) + if err != nil { + return hexutil.Big{}, err + } + return (hexutil.Big)(*tipcap), nil } -func (r *Resolver) ProtocolVersion(ctx context.Context) (int32, error) { - return int32(r.backend.ProtocolVersion()), nil +func (r *Resolver) ChainID(ctx context.Context) (hexutil.Big, error) { + return hexutil.Big(*r.backend.ChainConfig().ChainID), nil } // SyncState represents the synchronisation status returned from the `syncing` accessor. @@ -1061,34 +1348,68 @@ type SyncState struct { 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) SyncedAccounts() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedAccounts) } - -func (s *SyncState) KnownStates() *hexutil.Uint64 { - ret := hexutil.Uint64(s.progress.KnownStates) - return &ret +func (s *SyncState) SyncedAccountBytes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedAccountBytes) +} +func (s *SyncState) SyncedBytecodes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedBytecodes) +} +func (s *SyncState) SyncedBytecodeBytes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedBytecodeBytes) +} +func (s *SyncState) SyncedStorage() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedStorage) +} +func (s *SyncState) SyncedStorageBytes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.SyncedStorageBytes) +} +func (s *SyncState) HealedTrienodes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealedTrienodes) +} +func (s *SyncState) HealedTrienodeBytes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealedTrienodeBytes) +} +func (s *SyncState) HealedBytecodes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealedBytecodes) +} +func (s *SyncState) HealedBytecodeBytes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealedBytecodeBytes) +} +func (s *SyncState) HealingTrienodes() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealingTrienodes) +} +func (s *SyncState) HealingBytecode() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HealingBytecode) } // 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 +// - 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 +// - syncedAccounts: number of accounts downloaded +// - syncedAccountBytes: number of account trie bytes persisted to disk +// - syncedBytecodes: number of bytecodes downloaded +// - syncedBytecodeBytes: number of bytecode bytes downloaded +// - syncedStorage: number of storage slots downloaded +// - syncedStorageBytes: number of storage trie bytes persisted to disk +// - healedTrienodes: number of state trie nodes downloaded +// - healedTrienodeBytes: number of state trie bytes persisted to disk +// - healedBytecodes: number of bytecodes downloaded +// - healedBytecodeBytes: number of bytecodes persisted to disk +// - healingTrienodes: number of state trie nodes pending +// - healingBytecode: number of bytecodes pending func (r *Resolver) Syncing() (*SyncState, error) { - progress := r.backend.Downloader().Progress() + progress := r.backend.SyncProgress() // Return not syncing if the synchronisation already completed if progress.CurrentBlock >= progress.HighestBlock { diff --git a/graphql/graphql_test.go b/graphql/graphql_test.go index 40b13187..d55f4e06 100644 --- a/graphql/graphql_test.go +++ b/graphql/graphql_test.go @@ -17,12 +17,342 @@ package graphql import ( + "fmt" + "io" + "math/big" + "net/http" + "strings" "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/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + + "github.com/stretchr/testify/assert" ) func TestBuildSchema(t *testing.T) { + ddir := t.TempDir() + // Copy config + conf := node.DefaultConfig + conf.DataDir = ddir + stack, err := node.New(&conf) + if err != nil { + t.Fatalf("could not create new node: %v", err) + } + defer stack.Close() // Make sure the schema can be parsed and matched up to the object model. - if _, err := newHandler(nil); err != nil { + if err := newHandler(stack, nil, nil, []string{}, []string{}); err != nil { t.Errorf("Could not construct GraphQL handler: %v", err) } } + +// Tests that a graphQL request is successfully handled when graphql is enabled on the specified endpoint +func TestGraphQLBlockSerialization(t *testing.T) { + stack := createNode(t, true, false) + defer stack.Close() + // start node + if err := stack.Start(); err != nil { + t.Fatalf("could not start node: %v", err) + } + + for i, tt := range []struct { + body string + want string + code int + }{ + { // Should return latest block + body: `{"query": "{block{number}}","variables": null}`, + want: `{"data":{"block":{"number":10}}}`, + code: 200, + }, + { // Should return info about latest block + body: `{"query": "{block{number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":{"number":10,"gasUsed":0,"gasLimit":11500000}}}`, + code: 200, + }, + { + body: `{"query": "{block(number:0){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":{"number":0,"gasUsed":0,"gasLimit":11500000}}}`, + code: 200, + }, + { + body: `{"query": "{block(number:-1){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":null}}`, + code: 200, + }, + { + body: `{"query": "{block(number:-500){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":null}}`, + code: 200, + }, + { + body: `{"query": "{block(number:\"0\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":{"number":0,"gasUsed":0,"gasLimit":11500000}}}`, + code: 200, + }, + { + body: `{"query": "{block(number:\"-33\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":null}}`, + code: 200, + }, + { + body: `{"query": "{block(number:\"1337\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"data":{"block":null}}`, + code: 200, + }, + { + body: `{"query": "{block(number:\"0xbad\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"errors":[{"message":"strconv.ParseInt: parsing \"0xbad\": invalid syntax"}],"data":{}}`, + code: 400, + }, + { // hex strings are currently not supported. If that's added to the spec, this test will need to change + body: `{"query": "{block(number:\"0x0\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"errors":[{"message":"strconv.ParseInt: parsing \"0x0\": invalid syntax"}],"data":{}}`, + code: 400, + }, + { + body: `{"query": "{block(number:\"a\"){number,gasUsed,gasLimit}}","variables": null}`, + want: `{"errors":[{"message":"strconv.ParseInt: parsing \"a\": invalid syntax"}],"data":{}}`, + code: 400, + }, + { + body: `{"query": "{bleh{number}}","variables": null}"`, + want: `{"errors":[{"message":"Cannot query field \"bleh\" on type \"Query\".","locations":[{"line":1,"column":2}]}]}`, + code: 400, + }, + // should return `estimateGas` as decimal + { + body: `{"query": "{block{ estimateGas(data:{}) }}"}`, + want: `{"data":{"block":{"estimateGas":53000}}}`, + code: 200, + }, + // should return `status` as decimal + { + body: `{"query": "{block {number call (data : {from : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\", data :\"0x12a7b914\"}){data status}}}"}`, + want: `{"data":{"block":{"number":10,"call":{"data":"0x","status":1}}}}`, + code: 200, + }, + } { + resp, err := http.Post(fmt.Sprintf("%s/graphql", stack.HTTPEndpoint()), "application/json", strings.NewReader(tt.body)) + if err != nil { + t.Fatalf("could not post: %v", err) + } + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + t.Fatalf("could not read from response body: %v", err) + } + if have := string(bodyBytes); have != tt.want { + t.Errorf("testcase %d %s,\nhave:\n%v\nwant:\n%v", i, tt.body, have, tt.want) + } + if tt.code != resp.StatusCode { + t.Errorf("testcase %d %s,\nwrong statuscode, have: %v, want: %v", i, tt.body, resp.StatusCode, tt.code) + } + } +} + +func TestGraphQLBlockSerializationEIP2718(t *testing.T) { + stack := createNode(t, true, true) + defer stack.Close() + // start node + if err := stack.Start(); err != nil { + t.Fatalf("could not start node: %v", err) + } + + for i, tt := range []struct { + body string + want string + code int + }{ + { + body: `{"query": "{block {number transactions { from { address } to { address } value hash type accessList { address storageKeys } index}}}"}`, + want: `{"data":{"block":{"number":1,"transactions":[{"from":{"address":"0x71562b71999873db5b286df957af199ec94617f7"},"to":{"address":"0x0000000000000000000000000000000000000dad"},"value":"0x64","hash":"0xd864c9d7d37fade6b70164740540c06dd58bb9c3f6b46101908d6339db6a6a7b","type":0,"accessList":[],"index":0},{"from":{"address":"0x71562b71999873db5b286df957af199ec94617f7"},"to":{"address":"0x0000000000000000000000000000000000000dad"},"value":"0x32","hash":"0x19b35f8187b4e15fb59a9af469dca5dfa3cd363c11d372058c12f6482477b474","type":1,"accessList":[{"address":"0x0000000000000000000000000000000000000dad","storageKeys":["0x0000000000000000000000000000000000000000000000000000000000000000"]}],"index":1}]}}}`, + code: 200, + }, + } { + resp, err := http.Post(fmt.Sprintf("%s/graphql", stack.HTTPEndpoint()), "application/json", strings.NewReader(tt.body)) + if err != nil { + t.Fatalf("could not post: %v", err) + } + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + t.Fatalf("could not read from response body: %v", err) + } + if have := string(bodyBytes); have != tt.want { + t.Errorf("testcase %d %s,\nhave:\n%v\nwant:\n%v", i, tt.body, have, tt.want) + } + if tt.code != resp.StatusCode { + t.Errorf("testcase %d %s,\nwrong statuscode, have: %v, want: %v", i, tt.body, resp.StatusCode, tt.code) + } + } +} + +// Tests that a graphQL request is not handled successfully when graphql is not enabled on the specified endpoint +func TestGraphQLHTTPOnSamePort_GQLRequest_Unsuccessful(t *testing.T) { + stack := createNode(t, false, false) + defer stack.Close() + if err := stack.Start(); err != nil { + t.Fatalf("could not start node: %v", err) + } + body := strings.NewReader(`{"query": "{block{number}}","variables": null}`) + resp, err := http.Post(fmt.Sprintf("%s/graphql", stack.HTTPEndpoint()), "application/json", body) + if err != nil { + t.Fatalf("could not post: %v", err) + } + // make sure the request is not handled successfully + assert.Equal(t, http.StatusNotFound, resp.StatusCode) +} + +func createNode(t *testing.T, gqlEnabled bool, txEnabled bool) *node.Node { + stack, err := node.New(&node.Config{ + HTTPHost: "127.0.0.1", + HTTPPort: 0, + WSHost: "127.0.0.1", + WSPort: 0, + }) + if err != nil { + t.Fatalf("could not create node: %v", err) + } + if !gqlEnabled { + return stack + } + if !txEnabled { + createGQLService(t, stack) + } else { + createGQLServiceWithTransactions(t, stack) + } + return stack +} + +func createGQLService(t *testing.T, stack *node.Node) { + // create backend + ethConf := ðconfig.Config{ + Genesis: &core.Genesis{ + Config: params.AllEthashProtocolChanges, + GasLimit: 11500000, + Difficulty: big.NewInt(1048576), + }, + Ethash: ethash.Config{ + PowMode: ethash.ModeFake, + }, + NetworkId: 1337, + TrieCleanCache: 5, + TrieCleanCacheJournal: "triecache", + TrieCleanCacheRejournal: 60 * time.Minute, + TrieDirtyCache: 5, + TrieTimeout: 60 * time.Minute, + SnapshotCache: 5, + } + ethBackend, err := eth.New(stack, ethConf) + if err != nil { + t.Fatalf("could not create eth backend: %v", err) + } + // Create some blocks and import them + chain, _ := core.GenerateChain(params.AllEthashProtocolChanges, ethBackend.BlockChain().Genesis(), + ethash.NewFaker(), ethBackend.ChainDb(), 10, func(i int, gen *core.BlockGen) {}) + _, err = ethBackend.BlockChain().InsertChain(chain) + if err != nil { + t.Fatalf("could not create import blocks: %v", err) + } + // create gql service + filterSystem := filters.NewFilterSystem(ethBackend.APIBackend, filters.Config{}) + err = New(stack, ethBackend.APIBackend, filterSystem, []string{}, []string{}) + if err != nil { + t.Fatalf("could not create graphql service: %v", err) + } +} + +func createGQLServiceWithTransactions(t *testing.T, stack *node.Node) { + // create backend + key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address := crypto.PubkeyToAddress(key.PublicKey) + funds := big.NewInt(1000000000000000) + dad := common.HexToAddress("0x0000000000000000000000000000000000000dad") + + ethConf := ðconfig.Config{ + Genesis: &core.Genesis{ + Config: params.AllEthashProtocolChanges, + GasLimit: 11500000, + Difficulty: big.NewInt(1048576), + Alloc: core.GenesisAlloc{ + address: {Balance: funds}, + // The address 0xdad sloads 0x00 and 0x01 + dad: { + Code: []byte{ + byte(vm.PC), + byte(vm.PC), + byte(vm.SLOAD), + byte(vm.SLOAD), + }, + Nonce: 0, + Balance: big.NewInt(0), + }, + }, + BaseFee: big.NewInt(params.InitialBaseFee), + }, + Ethash: ethash.Config{ + PowMode: ethash.ModeFake, + }, + NetworkId: 1337, + TrieCleanCache: 5, + TrieCleanCacheJournal: "triecache", + TrieCleanCacheRejournal: 60 * time.Minute, + TrieDirtyCache: 5, + TrieTimeout: 60 * time.Minute, + SnapshotCache: 5, + } + + ethBackend, err := eth.New(stack, ethConf) + if err != nil { + t.Fatalf("could not create eth backend: %v", err) + } + signer := types.LatestSigner(ethConf.Genesis.Config) + + legacyTx, _ := types.SignNewTx(key, signer, &types.LegacyTx{ + Nonce: uint64(0), + To: &dad, + Value: big.NewInt(100), + Gas: 50000, + GasPrice: big.NewInt(params.InitialBaseFee), + }) + envelopTx, _ := types.SignNewTx(key, signer, &types.AccessListTx{ + ChainID: ethConf.Genesis.Config.ChainID, + Nonce: uint64(1), + To: &dad, + Gas: 30000, + GasPrice: big.NewInt(params.InitialBaseFee), + Value: big.NewInt(50), + AccessList: types.AccessList{{ + Address: dad, + StorageKeys: []common.Hash{{0}}, + }}, + }) + + // Create some blocks and import them + chain, _ := core.GenerateChain(params.AllEthashProtocolChanges, ethBackend.BlockChain().Genesis(), + ethash.NewFaker(), ethBackend.ChainDb(), 1, func(i int, b *core.BlockGen) { + b.SetCoinbase(common.Address{1}) + b.AddTx(legacyTx) + b.AddTx(envelopTx) + }) + + _, err = ethBackend.BlockChain().InsertChain(chain) + if err != nil { + t.Fatalf("could not create import blocks: %v", err) + } + // create gql service + filterSystem := filters.NewFilterSystem(ethBackend.APIBackend, filters.Config{}) + err = New(stack, ethBackend.APIBackend, filterSystem, []string{}, []string{}) + if err != nil { + t.Fatalf("could not create graphql service: %v", err) + } +} diff --git a/graphql/schema.go b/graphql/schema.go index 525b9e1e..ff3919be 100644 --- a/graphql/schema.go +++ b/graphql/schema.go @@ -69,6 +69,12 @@ const schema string = ` transaction: Transaction! } + #EIP-2718 + type AccessTuple{ + address: Address! + storageKeys : [Bytes32!]! + } + # Transaction is an Ethereum transaction. type Transaction { # Hash is the hash of this transaction. @@ -88,6 +94,12 @@ const schema string = ` value: BigInt! # GasPrice is the price offered to miners for gas, in wei per unit. gasPrice: BigInt! + # MaxFeePerGas is the maximum fee per gas offered to include a transaction, in wei. + maxFeePerGas: BigInt + # MaxPriorityFeePerGas is the maximum miner tip per gas offered to include a transaction, in wei. + maxPriorityFeePerGas: BigInt + # EffectiveTip is the actual amount of reward going to miner after considering the max fee cap. + effectiveTip: 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. @@ -108,6 +120,13 @@ const schema string = ` # this transaction. If the transaction has not yet been mined, this field # will be null. cumulativeGasUsed: Long + # EffectiveGasPrice is actual value per gas deducted from the sender's + # account. Before EIP-1559, this is equal to the transaction's gas price. + # After EIP-1559, it is baseFeePerGas + min(maxFeePerGas - baseFeePerGas, + # maxPriorityFeePerGas). Legacy transactions and EIP-2930 transactions are + # coerced into the EIP-1559 format by setting both maxFeePerGas and + # maxPriorityFeePerGas as the transaction's gas price. + effectiveGasPrice: BigInt # 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. @@ -115,6 +134,19 @@ const schema string = ` # 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!] + r: BigInt! + s: BigInt! + v: BigInt! + # Envelope transaction support + type: Int + accessList: [AccessTuple!] + # Raw is the canonical encoding of the transaction. + # For legacy transactions, it returns the RLP encoding. + # For EIP-2718 typed transactions, it returns the type and payload. + raw: Bytes! + # RawReceipt is the canonical encoding of the receipt. For post EIP-2718 typed transactions + # this is equivalent to TxType || ReceiptEncoding. + rawReceipt: Bytes! } # BlockFilterCriteria encapsulates log filter criteria for a filter applied @@ -164,6 +196,10 @@ const schema string = ` gasLimit: Long! # GasUsed is the amount of gas that was used executing transactions in this block. gasUsed: Long! + # BaseFeePerGas is the fee per unit of gas burned by the protocol in this block. + baseFeePerGas: BigInt + # NextBaseFeePerGas is the fee per unit of gas which needs to be burned in the next block. + nextBaseFeePerGas: BigInt # 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 @@ -206,6 +242,10 @@ const schema string = ` # 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! + # RawHeader is the RLP encoding of the block's header. + rawHeader: Bytes! + # Raw is the RLP encoding of the block. + raw: Bytes! } # CallData represents the data associated with a local contract call. @@ -219,6 +259,10 @@ const schema string = ` gas: Long # GasPrice is the price, in wei, offered for each unit of gas. gasPrice: BigInt + # MaxFeePerGas is the maximum fee per gas offered, in wei. + maxFeePerGas: BigInt + # MaxPriorityFeePerGas is the maximum miner tip per gas offered, in wei. + maxPriorityFeePerGas: BigInt # Value is the value, in wei, sent along with the call. value: BigInt # Data is the data sent to the callee. @@ -268,12 +312,6 @@ const schema string = ` 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. @@ -297,7 +335,7 @@ const schema string = ` 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!]! + blocks(from: Long, to: Long): [Block!]! # Pending returns the current pending state. pending: Pending! # Transaction returns a transaction specified by its hash. @@ -307,10 +345,13 @@ const schema string = ` # 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! + # MaxPriorityFeePerGas returns the node's estimate of a gas tip sufficient + # to ensure a transaction is mined in a timely fashion. + maxPriorityFeePerGas: BigInt! # Syncing returns information on the current synchronisation state. syncing: SyncState + # ChainID returns the current chain ID for transaction replay protection. + chainID: BigInt! } type Mutation { diff --git a/graphql/service.go b/graphql/service.go index 37957632..019026bc 100644 --- a/graphql/service.go +++ b/graphql/service.go @@ -17,87 +17,64 @@ package graphql import ( - "fmt" - "net" + "encoding/json" "net/http" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/node" "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. +type handler struct { + Schema *graphql.Schema } -// 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 } +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 + } -// 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) + response := h.Schema.Exec(r.Context(), params.Query, params.OperationName, params.Variables) + responseJSON, err := json.Marshal(response) if err != nil { - return err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } - if s.listener, err = net.Listen("tcp", s.endpoint); err != nil { - return err + if len(response.Errors) > 0 { + w.WriteHeader(http.StatusBadRequest) } - 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 + + w.Header().Set("Content-Type", "application/json") + w.Write(responseJSON) +} + +// New constructs a new GraphQL service instance. +func New(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cors, vhosts []string) error { + return newHandler(stack, backend, filterSystem, cors, vhosts) } // 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} +func newHandler(stack *node.Node, backend ethapi.Backend, filterSystem *filters.FilterSystem, cors, vhosts []string) error { + q := Resolver{backend, filterSystem} s, err := graphql.ParseSchema(schema, &q) if err != nil { - return nil, err + return err } - h := &relay.Handler{Schema: s} + h := handler{Schema: s} + handler := node.NewHTTPHandlerStack(h, cors, vhosts, nil) - mux := http.NewServeMux() - mux.Handle("/", GraphiQL{}) - mux.Handle("/graphql", h) - mux.Handle("/graphql/", h) - return mux, nil -} + stack.RegisterHandler("GraphQL UI", "/graphql/ui", GraphiQL{}) + stack.RegisterHandler("GraphQL", "/graphql", handler) + stack.RegisterHandler("GraphQL", "/graphql/", handler) -// 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 5fdf15a7..eb9af600 100644 --- a/interfaces.go +++ b/interfaces.go @@ -22,8 +22,8 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // NotFound is returned by API methods if the requested item does not exist. @@ -101,8 +101,27 @@ type SyncProgress struct { StartingBlock uint64 // Block number where sync began CurrentBlock uint64 // Current block number where sync is at HighestBlock uint64 // Highest alleged block number in the chain - PulledStates uint64 // Number of state trie entries already downloaded - KnownStates uint64 // Total number of state trie entries known about + + // "fast sync" fields. These used to be sent by geth, but are no longer used + // since version v1.10. + PulledStates uint64 // Number of state trie entries already downloaded + KnownStates uint64 // Total number of state trie entries known about + + // "snap sync" fields. + SyncedAccounts uint64 // Number of accounts downloaded + SyncedAccountBytes uint64 // Number of account trie bytes persisted to disk + SyncedBytecodes uint64 // Number of bytecodes downloaded + SyncedBytecodeBytes uint64 // Number of bytecode bytes downloaded + SyncedStorage uint64 // Number of storage slots downloaded + SyncedStorageBytes uint64 // Number of storage trie bytes persisted to disk + + HealedTrienodes uint64 // Number of state trie nodes downloaded + HealedTrienodeBytes uint64 // Number of state trie bytes persisted to disk + HealedBytecodes uint64 // Number of bytecodes downloaded + HealedBytecodeBytes uint64 // Number of bytecodes persisted to disk + + HealingTrienodes uint64 // Number of state trie nodes pending + HealingBytecode uint64 // Number of bytecodes pending } // ChainSyncReader wraps access to the node's current sync status. If there's no @@ -113,12 +132,16 @@ type ChainSyncReader interface { // CallMsg contains parameters for contract calls. type CallMsg struct { - From common.Address // the sender of the 'transaction' - To *common.Address // the destination contract (nil for contract creation) - Gas uint64 // if 0, the call executes with near-infinite gas - GasPrice *big.Int // wei <-> gas exchange ratio - Value *big.Int // amount of wei sent along with the call - Data []byte // input data, usually an ABI-encoded contract method invocation + From common.Address // the sender of the 'transaction' + To *common.Address // the destination contract (nil for contract creation) + Gas uint64 // if 0, the call executes with near-infinite gas + GasPrice *big.Int // wei <-> gas exchange ratio + GasFeeCap *big.Int // EIP-1559 fee cap per gas. + GasTipCap *big.Int // EIP-1559 tip per gas. + Value *big.Int // amount of wei sent along with the call + Data []byte // input data, usually an ABI-encoded contract method invocation + + AccessList types.AccessList // EIP-2930 access list. } // A ContractCaller provides contract calls, essentially transactions that are executed by @@ -178,6 +201,15 @@ type GasPricer interface { SuggestGasPrice(ctx context.Context) (*big.Int, error) } +// FeeHistory provides recent fee market data that consumers can use to determine +// a reasonable maxPriorityFeePerGas value. +type FeeHistory struct { + OldestBlock *big.Int // block corresponding to first response value + Reward [][]*big.Int // list every txs priority fee per block + BaseFee []*big.Int // list of each block's base fee + GasUsedRatio []float64 // ratio of gas used out of the total available limit +} + // A PendingStateReader provides access to the pending state, which is the result of all // known executable transactions which have not yet been included in the blockchain. It is // commonly used to display the result of ’unconfirmed’ actions (e.g. wallet value diff --git a/internal/build/archive.go b/internal/build/archive.go index ac680ba6..c1624607 100644 --- a/internal/build/archive.go +++ b/internal/build/archive.go @@ -25,6 +25,7 @@ import ( "os" "path/filepath" "strings" + "time" ) type Archive interface { @@ -159,6 +160,7 @@ func (a *TarballArchive) Directory(name string) error { Name: a.dir, Mode: 0755, Typeflag: tar.TypeDir, + ModTime: time.Now(), }) } @@ -183,3 +185,106 @@ func (a *TarballArchive) Close() error { } return a.file.Close() } + +// ExtractArchive unpacks a .zip or .tar.gz archive to the destination directory. +func ExtractArchive(archive string, dest string) error { + ar, err := os.Open(archive) + if err != nil { + return err + } + defer ar.Close() + + switch { + case strings.HasSuffix(archive, ".tar.gz"): + return extractTarball(ar, dest) + case strings.HasSuffix(archive, ".zip"): + return extractZip(ar, dest) + default: + return fmt.Errorf("unhandled archive type %s", archive) + } +} + +// extractTarball unpacks a .tar.gz file. +func extractTarball(ar io.Reader, dest string) error { + gzr, err := gzip.NewReader(ar) + if err != nil { + return err + } + defer gzr.Close() + + tr := tar.NewReader(gzr) + for { + // Move to the next file header. + header, err := tr.Next() + if err != nil { + if err == io.EOF { + return nil + } + return err + } + // We only care about regular files, directory modes + // and special file types are not supported. + if header.Typeflag == tar.TypeReg { + armode := header.FileInfo().Mode() + err := extractFile(header.Name, armode, tr, dest) + if err != nil { + return fmt.Errorf("extract %s: %v", header.Name, err) + } + } + } +} + +// extractZip unpacks the given .zip file. +func extractZip(ar *os.File, dest string) error { + info, err := ar.Stat() + if err != nil { + return err + } + zr, err := zip.NewReader(ar, info.Size()) + if err != nil { + return err + } + + for _, zf := range zr.File { + if !zf.Mode().IsRegular() { + continue + } + + data, err := zf.Open() + if err != nil { + return err + } + err = extractFile(zf.Name, zf.Mode(), data, dest) + data.Close() + if err != nil { + return fmt.Errorf("extract %s: %v", zf.Name, err) + } + } + return nil +} + +// extractFile extracts a single file from an archive. +func extractFile(arpath string, armode os.FileMode, data io.Reader, dest string) error { + // Check that path is inside destination directory. + target := filepath.Join(dest, filepath.FromSlash(arpath)) + if !strings.HasPrefix(target, filepath.Clean(dest)+string(os.PathSeparator)) { + return fmt.Errorf("path %q escapes archive destination", target) + } + + // Ensure the destination directory exists. + if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil { + return err + } + + // Copy file data. + file, err := os.OpenFile(target, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, armode) + if err != nil { + return err + } + if _, err := io.Copy(file, data); err != nil { + file.Close() + os.Remove(target) + return err + } + return file.Close() +} diff --git a/internal/build/azure.go b/internal/build/azure.go index 2846dff0..9d1c4f30 100644 --- a/internal/build/azure.go +++ b/internal/build/azure.go @@ -19,14 +19,13 @@ package build import ( "context" "fmt" - "net/url" "os" - "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) // AzureBlobstoreConfig is an authentication and configuration struct containing -// the data needed by the Azure SDK to interact with a speicifc container in the +// the data needed by the Azure SDK to interact with a specific container in the // blobstore. type AzureBlobstoreConfig struct { Account string // Account name to authorize API requests with @@ -49,15 +48,11 @@ func AzureBlobstoreUpload(path string, name string, config AzureBlobstoreConfig) if err != nil { return err } - - pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{}) - - u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net", config.Account)) - service := azblob.NewServiceURL(*u, pipeline) - - container := service.NewContainerURL(config.Container) - blockblob := container.NewBlockBlobURL(name) - + u := fmt.Sprintf("https://%s.blob.core.windows.net/%s", config.Account, config.Container) + container, err := azblob.NewContainerClientWithSharedKey(u, credential, nil) + if err != nil { + return err + } // Stream the file to upload into the designated blobstore container in, err := os.Open(path) if err != nil { @@ -65,40 +60,41 @@ func AzureBlobstoreUpload(path string, name string, config AzureBlobstoreConfig) } defer in.Close() - _, err = blockblob.Upload(context.Background(), in, azblob.BlobHTTPHeaders{}, azblob.Metadata{}, azblob.BlobAccessConditions{}, ) + blockblob := container.NewBlockBlobClient(name) + _, err = blockblob.Upload(context.Background(), in, nil) return err } // AzureBlobstoreList lists all the files contained within an azure blobstore. -func AzureBlobstoreList(config AzureBlobstoreConfig) ([]azblob.BlobItem, error) { +func AzureBlobstoreList(config AzureBlobstoreConfig) ([]*azblob.BlobItemInternal, error) { + // Create an authenticated client against the Azure cloud 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)) - service := azblob.NewServiceURL(*u, pipeline) - - // List all the blobs from the container and return them - container := service.NewContainerURL(config.Container) - - res, err := container.ListBlobsFlatSegment(context.Background(), azblob.Marker{}, azblob.ListBlobsSegmentOptions{ - MaxResults: 1024 * 1024 * 1024, // Yes, fetch all of them - }) + u := fmt.Sprintf("https://%s.blob.core.windows.net/%s", config.Account, config.Container) + container, err := azblob.NewContainerClientWithSharedKey(u, credential, nil) if err != nil { return nil, err } - return res.Segment.BlobItems, nil + var maxResults int32 = 5000 + pager := container.ListBlobsFlat(&azblob.ContainerListBlobFlatSegmentOptions{ + Maxresults: &maxResults, + }) + var allBlobs []*azblob.BlobItemInternal + for pager.NextPage(context.Background()) { + res := pager.PageResponse() + allBlobs = append(allBlobs, res.ContainerListBlobFlatSegmentResult.Segment.BlobItems...) + } + return allBlobs, pager.Err() } // AzureBlobstoreDelete iterates over a list of files to delete and removes them // from the blobstore. -func AzureBlobstoreDelete(config AzureBlobstoreConfig, blobs []azblob.BlobItem) error { +func AzureBlobstoreDelete(config AzureBlobstoreConfig, blobs []*azblob.BlobItemInternal) error { if *DryRunFlag { for _, blob := range blobs { - fmt.Printf("would delete %s (%s) from %s/%s\n", blob.Name, blob.Properties.LastModified, config.Account, config.Container) + fmt.Printf("would delete %s (%s) from %s/%s\n", *blob.Name, blob.Properties.LastModified, config.Account, config.Container) } return nil } @@ -107,20 +103,18 @@ func AzureBlobstoreDelete(config AzureBlobstoreConfig, blobs []azblob.BlobItem) if err != nil { return err } - - pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{}) - - u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net", config.Account)) - service := azblob.NewServiceURL(*u, pipeline) - - container := service.NewContainerURL(config.Container) - + u := fmt.Sprintf("https://%s.blob.core.windows.net/%s", config.Account, config.Container) + container, err := azblob.NewContainerClientWithSharedKey(u, credential, nil) + if err != nil { + return err + } // Iterate over the blobs and delete them for _, blob := range blobs { - blockblob := container.NewBlockBlobURL(blob.Name) - if _, err := blockblob.Delete(context.Background(), azblob.DeleteSnapshotsOptionInclude, azblob.BlobAccessConditions{}); err != nil { + blockblob := container.NewBlockBlobClient(*blob.Name) + if _, err := blockblob.Delete(context.Background(), &azblob.DeleteBlobOptions{}); err != nil { return err } + fmt.Printf("deleted %s (%s)\n", *blob.Name, blob.Properties.LastModified) } return nil } diff --git a/internal/build/download.go b/internal/build/download.go new file mode 100644 index 00000000..903d0308 --- /dev/null +++ b/internal/build/download.go @@ -0,0 +1,150 @@ +// 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 build + +import ( + "bufio" + "crypto/sha256" + "encoding/hex" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "strings" +) + +// ChecksumDB keeps file checksums. +type ChecksumDB struct { + allChecksums []string +} + +// MustLoadChecksums loads a file containing checksums. +func MustLoadChecksums(file string) *ChecksumDB { + content, err := os.ReadFile(file) + if err != nil { + log.Fatal("can't load checksum file: " + err.Error()) + } + return &ChecksumDB{strings.Split(string(content), "\n")} +} + +// Verify checks whether the given file is valid according to the checksum database. +func (db *ChecksumDB) Verify(path string) error { + fd, err := os.Open(path) + if err != nil { + return err + } + defer fd.Close() + + h := sha256.New() + if _, err := io.Copy(h, bufio.NewReader(fd)); err != nil { + return err + } + fileHash := hex.EncodeToString(h.Sum(nil)) + if !db.findHash(filepath.Base(path), fileHash) { + return fmt.Errorf("invalid file hash %s for %s", fileHash, filepath.Base(path)) + } + return nil +} + +func (db *ChecksumDB) findHash(basename, hash string) bool { + want := hash + " " + basename + for _, line := range db.allChecksums { + if strings.TrimSpace(line) == want { + return true + } + } + return false +} + +// DownloadFile downloads a file and verifies its checksum. +func (db *ChecksumDB) DownloadFile(url, dstPath string) error { + if err := db.Verify(dstPath); err == nil { + fmt.Printf("%s is up-to-date\n", dstPath) + return nil + } + fmt.Printf("%s is stale\n", dstPath) + fmt.Printf("downloading from %s\n", url) + + resp, err := http.Get(url) + if err != nil { + return fmt.Errorf("download error: %v", err) + } else if resp.StatusCode != http.StatusOK { + return fmt.Errorf("download error: status %d", resp.StatusCode) + } + defer resp.Body.Close() + if err := os.MkdirAll(filepath.Dir(dstPath), 0755); err != nil { + return err + } + fd, err := os.OpenFile(dstPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644) + if err != nil { + return err + } + dst := newDownloadWriter(fd, resp.ContentLength) + _, err = io.Copy(dst, resp.Body) + dst.Close() + if err != nil { + return err + } + + return db.Verify(dstPath) +} + +type downloadWriter struct { + file *os.File + dstBuf *bufio.Writer + size int64 + written int64 + lastpct int64 +} + +func newDownloadWriter(dst *os.File, size int64) *downloadWriter { + return &downloadWriter{ + file: dst, + dstBuf: bufio.NewWriter(dst), + size: size, + } +} + +func (w *downloadWriter) Write(buf []byte) (int, error) { + n, err := w.dstBuf.Write(buf) + + // Report progress. + w.written += int64(n) + pct := w.written * 10 / w.size * 10 + if pct != w.lastpct { + if w.lastpct != 0 { + fmt.Print("...") + } + fmt.Print(pct, "%") + w.lastpct = pct + } + return n, err +} + +func (w *downloadWriter) Close() error { + if w.lastpct > 0 { + fmt.Println() // Finish the progress line. + } + flushErr := w.dstBuf.Flush() + closeErr := w.file.Close() + if flushErr != nil { + return flushErr + } + return closeErr +} diff --git a/internal/build/env.go b/internal/build/env.go index a3017182..d70c0d50 100644 --- a/internal/build/env.go +++ b/internal/build/env.go @@ -38,6 +38,7 @@ var ( // Environment contains metadata provided by the build environment. type Environment struct { + CI bool Name string // name of the environment Repo string // name of GitHub repo Commit, Date, Branch, Tag string // Git info @@ -61,6 +62,7 @@ func Env() Environment { commit = os.Getenv("TRAVIS_COMMIT") } return Environment{ + CI: true, Name: "travis", Repo: os.Getenv("TRAVIS_REPO_SLUG"), Commit: commit, @@ -77,6 +79,7 @@ func Env() Environment { commit = os.Getenv("APPVEYOR_REPO_COMMIT") } return Environment{ + CI: true, Name: "appveyor", Repo: os.Getenv("APPVEYOR_REPO_NAME"), Commit: commit, diff --git a/internal/build/gotool.go b/internal/build/gotool.go new file mode 100644 index 00000000..08c8b2ef --- /dev/null +++ b/internal/build/gotool.go @@ -0,0 +1,149 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package build + +import ( + "fmt" + "log" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" +) + +type GoToolchain struct { + Root string // GOROOT + + // Cross-compilation variables. These are set when running the go tool. + GOARCH string + GOOS string + CC string +} + +// Go creates an invocation of the go command. +func (g *GoToolchain) Go(command string, args ...string) *exec.Cmd { + tool := g.goTool(command, args...) + + // Configure environment for cross build. + if g.GOARCH != "" && g.GOARCH != runtime.GOARCH { + tool.Env = append(tool.Env, "CGO_ENABLED=1") + tool.Env = append(tool.Env, "GOARCH="+g.GOARCH) + } + if g.GOOS != "" && g.GOOS != runtime.GOOS { + tool.Env = append(tool.Env, "GOOS="+g.GOOS) + } + // Configure C compiler. + if g.CC != "" { + tool.Env = append(tool.Env, "CC="+g.CC) + } else if os.Getenv("CC") != "" { + tool.Env = append(tool.Env, "CC="+os.Getenv("CC")) + } + return tool +} + +// Install creates an invocation of 'go install'. The command is configured to output +// executables to the given 'gobin' directory. +// +// This can be used to install auxiliary build tools without modifying the local go.mod and +// go.sum files. To install tools which are not required by go.mod, ensure that all module +// paths in 'args' contain a module version suffix (e.g. "...@latest"). +func (g *GoToolchain) Install(gobin string, args ...string) *exec.Cmd { + if !filepath.IsAbs(gobin) { + panic("GOBIN must be an absolute path") + } + tool := g.goTool("install") + tool.Env = append(tool.Env, "GOBIN="+gobin) + tool.Args = append(tool.Args, "-mod=readonly") + tool.Args = append(tool.Args, args...) + + // Ensure GOPATH is set because go install seems to absolutely require it. This uses + // 'go env' because it resolves the default value when GOPATH is not set in the + // environment. Ignore errors running go env and leave any complaining about GOPATH to + // the install command. + pathTool := g.goTool("env", "GOPATH") + output, _ := pathTool.Output() + tool.Env = append(tool.Env, "GOPATH="+string(output)) + return tool +} + +func (g *GoToolchain) goTool(command string, args ...string) *exec.Cmd { + if g.Root == "" { + g.Root = runtime.GOROOT() + } + tool := exec.Command(filepath.Join(g.Root, "bin", "go"), command) // nolint: gosec + tool.Args = append(tool.Args, args...) + tool.Env = append(tool.Env, "GOROOT="+g.Root) + + // Forward environment variables to the tool, but skip compiler target settings. + // TODO: what about GOARM? + skip := map[string]struct{}{"GOROOT": {}, "GOARCH": {}, "GOOS": {}, "GOBIN": {}, "CC": {}} + for _, e := range os.Environ() { + if i := strings.IndexByte(e, '='); i >= 0 { + if _, ok := skip[e[:i]]; ok { + continue + } + } + tool.Env = append(tool.Env, e) + } + return tool +} + +// DownloadGo downloads the Go binary distribution and unpacks it into a temporary +// directory. It returns the GOROOT of the unpacked toolchain. +func DownloadGo(csdb *ChecksumDB, version string) string { + // Shortcut: if the Go version that runs this script matches the + // requested version exactly, there is no need to download anything. + activeGo := strings.TrimPrefix(runtime.Version(), "go") + if activeGo == version { + log.Printf("-dlgo version matches active Go version %s, skipping download.", activeGo) + return runtime.GOROOT() + } + + ucache, err := os.UserCacheDir() + if err != nil { + log.Fatal(err) + } + + // For Arm architecture, GOARCH includes ISA version. + os := runtime.GOOS + arch := runtime.GOARCH + if arch == "arm" { + arch = "armv6l" + } + file := fmt.Sprintf("go%s.%s-%s", version, os, arch) + if os == "windows" { + file += ".zip" + } else { + file += ".tar.gz" + } + url := "https://golang.org/dl/" + file + dst := filepath.Join(ucache, file) + if err := csdb.DownloadFile(url, dst); err != nil { + log.Fatal(err) + } + + godir := filepath.Join(ucache, fmt.Sprintf("geth-go-%s-%s-%s", version, os, arch)) + if err := ExtractArchive(dst, godir); err != nil { + log.Fatal(err) + } + goroot, err := filepath.Abs(filepath.Join(godir, "go")) + if err != nil { + log.Fatal(err) + } + return goroot +} diff --git a/internal/build/util.go b/internal/build/util.go index 971d948c..9a721e9b 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -17,19 +17,22 @@ package build import ( + "bufio" "bytes" "flag" "fmt" + "go/parser" + "go/token" "io" - "io/ioutil" "log" "os" "os/exec" "path" "path/filepath" - "runtime" + "strconv" "strings" "text/template" + "time" ) var DryRunFlag = flag.Bool("n", false, "dry run, don't execute commands") @@ -37,7 +40,7 @@ var DryRunFlag = flag.Bool("n", false, "dry run, don't execute commands") // MustRun executes the given command and exits the host process for // any error. func MustRun(cmd *exec.Cmd) { - fmt.Println(">>>", strings.Join(cmd.Args, " ")) + fmt.Println(">>>", printArgs(cmd.Args)) if !*DryRunFlag { cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout @@ -47,17 +50,22 @@ func MustRun(cmd *exec.Cmd) { } } -func MustRunCommand(cmd string, args ...string) { - MustRun(exec.Command(cmd, args...)) +func printArgs(args []string) string { + var s strings.Builder + for i, arg := range args { + if i > 0 { + s.WriteByte(' ') + } + if strings.IndexByte(arg, ' ') >= 0 { + arg = strconv.QuoteToASCII(arg) + } + s.WriteString(arg) + } + return s.String() } -// GOPATH returns the value that the GOPATH environment -// variable should be set to. -func GOPATH() string { - if os.Getenv("GOPATH") == "" { - log.Fatal("GOPATH is not set") - } - return os.Getenv("GOPATH") +func MustRunCommand(cmd string, args ...string) { + MustRun(exec.Command(cmd, args...)) } var warnedAboutGit bool @@ -83,7 +91,7 @@ func RunGit(args ...string) string { // readGitFile returns content of file in .git directory. func readGitFile(file string) string { - content, err := ioutil.ReadFile(path.Join(".git", file)) + content, err := os.ReadFile(path.Join(".git", file)) if err != nil { return "" } @@ -118,79 +126,17 @@ func render(tpl *template.Template, outputFile string, outputPerm os.FileMode, x } } -// CopyFile copies a file. -func CopyFile(dst, src string, mode os.FileMode) { - if err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil { - log.Fatal(err) - } - destFile, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, mode) - if err != nil { - log.Fatal(err) - } - defer destFile.Close() - - srcFile, err := os.Open(src) - if err != nil { - log.Fatal(err) - } - defer srcFile.Close() - - if _, err := io.Copy(destFile, srcFile); err != nil { - log.Fatal(err) - } -} - -// GoTool returns the command that runs a go tool. This uses go from GOROOT instead of PATH -// 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.12.1/bin/go run build/ci.go ... -// -// 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]. func UploadSFTP(identityFile, host, dir string, files []string) error { sftp := exec.Command("sftp") - sftp.Stdout = nil sftp.Stderr = os.Stderr if identityFile != "" { sftp.Args = append(sftp.Args, "-i", identityFile) } sftp.Args = append(sftp.Args, host) - fmt.Println(">>>", strings.Join(sftp.Args, " ")) + fmt.Println(">>>", printArgs(sftp.Args)) if *DryRunFlag { return nil } @@ -199,6 +145,10 @@ func UploadSFTP(identityFile, host, dir string, files []string) error { if err != nil { return fmt.Errorf("can't create stdin pipe for sftp: %v", err) } + stdout, err := sftp.StdoutPipe() + if err != nil { + return fmt.Errorf("can't create stdout pipe for sftp: %v", err) + } if err := sftp.Start(); err != nil { return err } @@ -206,6 +156,58 @@ func UploadSFTP(identityFile, host, dir string, files []string) error { for _, f := range files { fmt.Fprintln(in, "put", f, path.Join(dir, filepath.Base(f))) } + fmt.Fprintln(in, "exit") + // Some issue with the PPA sftp server makes it so the server does not + // respond properly to a 'bye', 'exit' or 'quit' from the client. + // To work around that, we check the output, and when we see the client + // exit command, we do a hard exit. + // See + // https://github.com/kolban-google/sftp-gcs/issues/23 + // https://github.com/mscdex/ssh2/pull/1111 + aborted := false + go func() { + scanner := bufio.NewScanner(stdout) + for scanner.Scan() { + txt := scanner.Text() + fmt.Println(txt) + if txt == "sftp> exit" { + // Give it .5 seconds to exit (server might be fixed), then + // hard kill it from the outside + time.Sleep(500 * time.Millisecond) + aborted = true + sftp.Process.Kill() + } + } + }() stdin.Close() - return sftp.Wait() + err = sftp.Wait() + if aborted { + return nil + } + return err +} + +// FindMainPackages finds all 'main' packages in the given directory and returns their +// package paths. +func FindMainPackages(dir string) []string { + var commands []string + cmds, err := os.ReadDir(dir) + if err != nil { + log.Fatal(err) + } + for _, cmd := range cmds { + pkgdir := filepath.Join(dir, cmd.Name()) + pkgs, err := parser.ParseDir(token.NewFileSet(), pkgdir, nil, parser.PackageClauseOnly) + if err != nil { + log.Fatal(err) + } + for name := range pkgs { + if name == "main" { + path := "./" + filepath.ToSlash(pkgdir) + commands = append(commands, path) + break + } + } + } + return commands } diff --git a/internal/cmdtest/test_cmd.go b/internal/cmdtest/test_cmd.go index f8b1b43c..b837c9c3 100644 --- a/internal/cmdtest/test_cmd.go +++ b/internal/cmdtest/test_cmd.go @@ -21,12 +21,12 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "os" "os/exec" "regexp" "strings" "sync" + "sync/atomic" "syscall" "testing" "text/template" @@ -55,10 +55,13 @@ type TestCmd struct { Err error } +var id int32 + // Run exec's the current binary using name as argv[0] which will trigger the // reexec init function for that name (e.g. "geth-test" in cmd/geth/run_test.go) func (tt *TestCmd) Run(name string, args ...string) { - tt.stderr = &testlogger{t: tt.T} + id := atomic.AddInt32(&id, 1) + tt.stderr = &testlogger{t: tt.T, name: fmt.Sprintf("%d", id)} tt.cmd = &exec.Cmd{ Path: reexec.Self(), Args: append([]string{name}, args...), @@ -77,7 +80,7 @@ func (tt *TestCmd) Run(name string, args ...string) { } } -// InputLine writes the given text to the childs stdin. +// InputLine writes the given text to the child's stdin. // This method can also be called from an expect template, e.g.: // // geth.expect(`Passphrase: {{.InputLine "password"}}`) @@ -114,6 +117,13 @@ func (tt *TestCmd) Expect(tplsource string) { tt.Logf("Matched stdout text:\n%s", want) } +// Output reads all output from stdout, and returns the data. +func (tt *TestCmd) Output() []byte { + var buf []byte + tt.withKillTimeout(func() { buf, _ = io.ReadAll(tt.stdout) }) + return buf +} + func (tt *TestCmd) matchExactOutput(want []byte) error { buf := make([]byte, len(want)) n := 0 @@ -127,12 +137,12 @@ func (tt *TestCmd) matchExactOutput(want []byte) error { // Find the mismatch position. for i := 0; i < n; i++ { if want[i] != buf[i] { - return fmt.Errorf("Output mismatch at ◊:\n---------------- (stdout text)\n%s◊%s\n---------------- (expected text)\n%s", + return fmt.Errorf("output mismatch at ◊:\n---------------- (stdout text)\n%s◊%s\n---------------- (expected text)\n%s", buf[:i], buf[i:n], want) } } if n < len(want) { - return fmt.Errorf("Not enough output, got until ◊:\n---------------- (stdout text)\n%s\n---------------- (expected text)\n%s◊%s", + return fmt.Errorf("not enough output, got until ◊:\n---------------- (stdout text)\n%s\n---------------- (expected text)\n%s◊%s", buf, want[:n], want[n:]) } } @@ -173,7 +183,7 @@ func (tt *TestCmd) ExpectRegexp(regex string) (*regexp.Regexp, []string) { func (tt *TestCmd) ExpectExit() { var output []byte tt.withKillTimeout(func() { - output, _ = ioutil.ReadAll(tt.stdout) + output, _ = io.ReadAll(tt.stdout) }) tt.WaitExit() if tt.Cleanup != nil { @@ -238,16 +248,17 @@ func (tt *TestCmd) withKillTimeout(fn func()) { // testlogger logs all written lines via t.Log and also // collects them for later inspection. type testlogger struct { - t *testing.T - mu sync.Mutex - buf bytes.Buffer + t *testing.T + mu sync.Mutex + buf bytes.Buffer + name string } func (tl *testlogger) Write(b []byte) (n int, err error) { lines := bytes.Split(b, []byte("\n")) for _, line := range lines { if len(line) > 0 { - tl.t.Logf("(stderr) %s", line) + tl.t.Logf("(stderr:%v) %s", tl.name, line) } } tl.mu.Lock() diff --git a/internal/debug/api.go b/internal/debug/api.go index faa85266..42d0fa15 100644 --- a/internal/debug/api.go +++ b/internal/debug/api.go @@ -27,6 +27,7 @@ import ( "os" "os/user" "path/filepath" + "regexp" "runtime" "runtime/debug" "runtime/pprof" @@ -34,7 +35,8 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" + "github.com/hashicorp/go-bexpr" ) // Handler is the global debugging handler. @@ -189,14 +191,48 @@ func (*HandlerT) WriteMemProfile(file string) error { return writeProfile("heap", file) } -// Stacks returns a printed representation of the stacks of all goroutines. -func (*HandlerT) Stacks() string { +// Stacks returns a printed representation of the stacks of all goroutines. It +// also permits the following optional filters to be used: +// - filter: boolean expression of packages to filter for +func (*HandlerT) Stacks(filter *string) string { buf := new(bytes.Buffer) pprof.Lookup("goroutine").WriteTo(buf, 2) + + // If any filtering was requested, execute them now + if filter != nil && len(*filter) > 0 { + expanded := *filter + + // The input filter is a logical expression of package names. Transform + // it into a proper boolean expression that can be fed into a parser and + // interpreter: + // + // E.g. (eth || snap) && !p2p -> (eth in Value || snap in Value) && p2p not in Value + expanded = regexp.MustCompile(`[:/\.A-Za-z0-9_-]+`).ReplaceAllString(expanded, "`$0` in Value") + expanded = regexp.MustCompile("!(`[:/\\.A-Za-z0-9_-]+`)").ReplaceAllString(expanded, "$1 not") + expanded = strings.ReplaceAll(expanded, "||", "or") + expanded = strings.ReplaceAll(expanded, "&&", "and") + log.Info("Expanded filter expression", "filter", *filter, "expanded", expanded) + + expr, err := bexpr.CreateEvaluator(expanded) + if err != nil { + log.Error("Failed to parse filter expression", "expanded", expanded, "err", err) + return "" + } + // Split the goroutine dump into segments and filter each + dump := buf.String() + buf.Reset() + + for _, trace := range strings.Split(dump, "\n\n") { + if ok, _ := expr.Evaluate(map[string]string{"Value": trace}); ok { + buf.WriteString(trace) + buf.WriteString("\n\n") + } + } + } return buf.String() } -// FreeOSMemory returns unused memory to the OS. +// FreeOSMemory forces a garbage collection. func (*HandlerT) FreeOSMemory() { debug.FreeOSMemory() } diff --git a/internal/debug/flags.go b/internal/debug/flags.go index b52a1708..2082d60d 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -20,143 +20,189 @@ import ( "fmt" "io" "net/http" - _ "net/http/pprof" + _ "net/http/pprof" // nolint: gosec "os" "runtime" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/metrics/exp" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/metrics/exp" "github.com/fjl/memsize/memsizeui" - colorable "github.com/mattn/go-colorable" + "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) var Memsize memsizeui.Handler var ( - verbosityFlag = cli.IntFlag{ - Name: "verbosity", - Usage: "Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail", - Value: 3, - } - vmoduleFlag = cli.StringFlag{ - Name: "vmodule", - Usage: "Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4)", - Value: "", - } - backtraceAtFlag = cli.StringFlag{ - Name: "backtrace", - Usage: "Request a stack trace at a specific logging statement (e.g. \"block.go:271\")", - Value: "", - } - debugFlag = cli.BoolFlag{ - Name: "debug", - Usage: "Prepends log messages with call-site location (file and line number)", - } - pprofFlag = cli.BoolFlag{ - Name: "pprof", - Usage: "Enable the pprof HTTP server", - } - pprofPortFlag = cli.IntFlag{ - Name: "pprofport", - Usage: "pprof HTTP server listening port", - Value: 6060, - } - pprofAddrFlag = cli.StringFlag{ - Name: "pprofaddr", - Usage: "pprof HTTP server listening interface", - Value: "127.0.0.1", - } - memprofilerateFlag = cli.IntFlag{ - Name: "memprofilerate", - Usage: "Turn on memory profiling with the given rate", - Value: runtime.MemProfileRate, - } - blockprofilerateFlag = cli.IntFlag{ - Name: "blockprofilerate", - Usage: "Turn on block profiling with the given rate", - } - cpuprofileFlag = cli.StringFlag{ - Name: "cpuprofile", - Usage: "Write CPU profile to the given file", - } - traceFlag = cli.StringFlag{ - Name: "trace", - Usage: "Write execution trace to the given file", + verbosityFlag = &cli.IntFlag{ + Name: "verbosity", + Usage: "Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail", + Value: 3, + Category: flags.LoggingCategory, + } + vmoduleFlag = &cli.StringFlag{ + Name: "vmodule", + Usage: "Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4)", + Value: "", + Category: flags.LoggingCategory, + } + logjsonFlag = &cli.BoolFlag{ + Name: "log.json", + Usage: "Format logs with JSON", + Category: flags.LoggingCategory, + } + backtraceAtFlag = &cli.StringFlag{ + Name: "log.backtrace", + Usage: "Request a stack trace at a specific logging statement (e.g. \"block.go:271\")", + Value: "", + Category: flags.LoggingCategory, + } + debugFlag = &cli.BoolFlag{ + Name: "log.debug", + Usage: "Prepends log messages with call-site location (file and line number)", + Category: flags.LoggingCategory, + } + pprofFlag = &cli.BoolFlag{ + Name: "pprof", + Usage: "Enable the pprof HTTP server", + Category: flags.LoggingCategory, + } + pprofPortFlag = &cli.IntFlag{ + Name: "pprof.port", + Usage: "pprof HTTP server listening port", + Value: 6060, + Category: flags.LoggingCategory, + } + pprofAddrFlag = &cli.StringFlag{ + Name: "pprof.addr", + Usage: "pprof HTTP server listening interface", + Value: "127.0.0.1", + Category: flags.LoggingCategory, + } + memprofilerateFlag = &cli.IntFlag{ + Name: "pprof.memprofilerate", + Usage: "Turn on memory profiling with the given rate", + Value: runtime.MemProfileRate, + Category: flags.LoggingCategory, + } + blockprofilerateFlag = &cli.IntFlag{ + Name: "pprof.blockprofilerate", + Usage: "Turn on block profiling with the given rate", + Category: flags.LoggingCategory, + } + cpuprofileFlag = &cli.StringFlag{ + Name: "pprof.cpuprofile", + Usage: "Write CPU profile to the given file", + Category: flags.LoggingCategory, + } + traceFlag = &cli.StringFlag{ + Name: "trace", + Usage: "Write execution trace to the given file", + Category: flags.LoggingCategory, } ) // Flags holds all command-line flags required for debugging. var Flags = []cli.Flag{ - verbosityFlag, vmoduleFlag, backtraceAtFlag, debugFlag, - pprofFlag, pprofAddrFlag, pprofPortFlag, - memprofilerateFlag, blockprofilerateFlag, cpuprofileFlag, traceFlag, + verbosityFlag, + vmoduleFlag, + logjsonFlag, + backtraceAtFlag, + debugFlag, + pprofFlag, + pprofAddrFlag, + pprofPortFlag, + memprofilerateFlag, + blockprofilerateFlag, + cpuprofileFlag, + traceFlag, } -var ( - ostream log.Handler - glogger *log.GlogHandler -) +var glogger *log.GlogHandler func init() { - usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" - output := io.Writer(os.Stderr) - if usecolor { - output = colorable.NewColorableStderr() - } - ostream = log.StreamHandler(output, log.TerminalFormat(usecolor)) - glogger = log.NewGlogHandler(ostream) + glogger = log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) + glogger.Verbosity(log.LvlInfo) + log.Root().SetHandler(glogger) } // Setup initializes profiling and logging based on the CLI flags. // It should be called as early as possible in the program. -func Setup(ctx *cli.Context, logdir string) error { - // logging - log.PrintOrigins(ctx.GlobalBool(debugFlag.Name)) - if logdir != "" { - rfh, err := log.RotatingFileHandler( - logdir, - 262144, - log.JSONFormatOrderedEx(false, true), - ) - if err != nil { - return err +func Setup(ctx *cli.Context) error { + var ostream log.Handler + output := io.Writer(os.Stderr) + if ctx.Bool(logjsonFlag.Name) { + ostream = log.StreamHandler(output, log.JSONFormat()) + } else { + usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" + if usecolor { + output = colorable.NewColorableStderr() } - glogger.SetHandler(log.MultiHandler(ostream, rfh)) + ostream = log.StreamHandler(output, log.TerminalFormat(usecolor)) } - glogger.Verbosity(log.Lvl(ctx.GlobalInt(verbosityFlag.Name))) - glogger.Vmodule(ctx.GlobalString(vmoduleFlag.Name)) - glogger.BacktraceAt(ctx.GlobalString(backtraceAtFlag.Name)) + glogger.SetHandler(ostream) + + // logging + verbosity := ctx.Int(verbosityFlag.Name) + glogger.Verbosity(log.Lvl(verbosity)) + vmodule := ctx.String(vmoduleFlag.Name) + glogger.Vmodule(vmodule) + + debug := ctx.Bool(debugFlag.Name) + if ctx.IsSet(debugFlag.Name) { + debug = ctx.Bool(debugFlag.Name) + } + log.PrintOrigins(debug) + + backtrace := ctx.String(backtraceAtFlag.Name) + glogger.BacktraceAt(backtrace) + log.Root().SetHandler(glogger) // profiling, tracing - runtime.MemProfileRate = ctx.GlobalInt(memprofilerateFlag.Name) - Handler.SetBlockProfileRate(ctx.GlobalInt(blockprofilerateFlag.Name)) - if traceFile := ctx.GlobalString(traceFlag.Name); traceFile != "" { + runtime.MemProfileRate = memprofilerateFlag.Value + if ctx.IsSet(memprofilerateFlag.Name) { + runtime.MemProfileRate = ctx.Int(memprofilerateFlag.Name) + } + + blockProfileRate := ctx.Int(blockprofilerateFlag.Name) + Handler.SetBlockProfileRate(blockProfileRate) + + if traceFile := ctx.String(traceFlag.Name); traceFile != "" { if err := Handler.StartGoTrace(traceFile); err != nil { return err } } - if cpuFile := ctx.GlobalString(cpuprofileFlag.Name); cpuFile != "" { + + if cpuFile := ctx.String(cpuprofileFlag.Name); cpuFile != "" { if err := Handler.StartCPUProfile(cpuFile); err != nil { return err } } // pprof server - if ctx.GlobalBool(pprofFlag.Name) { - address := fmt.Sprintf("%s:%d", ctx.GlobalString(pprofAddrFlag.Name), ctx.GlobalInt(pprofPortFlag.Name)) - StartPProf(address) + if ctx.Bool(pprofFlag.Name) { + listenHost := ctx.String(pprofAddrFlag.Name) + + port := ctx.Int(pprofPortFlag.Name) + + address := fmt.Sprintf("%s:%d", listenHost, port) + // This context value ("metrics.addr") represents the utils.MetricsHTTPFlag.Name. + // It cannot be imported because it will cause a cyclical dependency. + StartPProf(address, !ctx.IsSet("metrics.addr")) } return nil } -func StartPProf(address string) { +func StartPProf(address string, withMetrics bool) { // Hook go-metrics into expvar on any /debug/metrics request, load all vars // from the registry into expvar, and execute regular expvar handler. - exp.Exp(metrics.DefaultRegistry) + if withMetrics { + exp.Exp(metrics.DefaultRegistry) + } http.Handle("/memsize/", http.StripPrefix("/memsize", &Memsize)) log.Info("Starting pprof server", "addr", fmt.Sprintf("http://%s/debug/pprof", address)) go func() { diff --git a/internal/debug/loudpanic.go b/internal/debug/loudpanic.go index 572ebcef..86e6bc88 100644 --- a/internal/debug/loudpanic.go +++ b/internal/debug/loudpanic.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build go1.6 // +build go1.6 package debug diff --git a/internal/debug/loudpanic_fallback.go b/internal/debug/loudpanic_fallback.go index 4ce4985d..377490e5 100644 --- a/internal/debug/loudpanic_fallback.go +++ b/internal/debug/loudpanic_fallback.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build !go1.6 // +build !go1.6 package debug diff --git a/internal/debug/trace.go b/internal/debug/trace.go index c96892b4..a273e4a9 100644 --- a/internal/debug/trace.go +++ b/internal/debug/trace.go @@ -14,7 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//+build go1.5 +//go:build go1.5 +// +build go1.5 package debug @@ -23,7 +24,7 @@ import ( "os" "runtime/trace" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // StartGoTrace turns on tracing, writing to the given file. diff --git a/internal/debug/trace_fallback.go b/internal/debug/trace_fallback.go index 4118ff40..ec07d991 100644 --- a/internal/debug/trace_fallback.go +++ b/internal/debug/trace_fallback.go @@ -14,7 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//+build !go1.5 +//go:build !go1.5 +// +build !go1.5 // no-op implementation of tracing methods for Go < 1.5. diff --git a/internal/ethapi/addrlock.go b/internal/ethapi/addrlock.go index 21f544be..61ddff68 100644 --- a/internal/ethapi/addrlock.go +++ b/internal/ethapi/addrlock.go @@ -19,7 +19,7 @@ package ethapi import ( "sync" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) type AddrLocker struct { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index eecf76e0..89c95c50 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -17,7 +17,6 @@ package ethapi import ( - "bytes" "context" "errors" "fmt" @@ -25,52 +24,94 @@ import ( "strings" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/accounts/scwallet" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/clique" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi" + "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/ethash" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core" + "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/tracers/logger" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" "github.com/tyler-smith/go-bip39" ) -const ( - defaultGasPrice = params.GWei -) - -// PublicEthereumAPI provides an API to access Ethereum related information. -// It offers only methods that operate on public data that is freely available to anyone. -type PublicEthereumAPI struct { +// EthereumAPI provides an API to access Ethereum related information. +type EthereumAPI struct { b Backend } -// NewPublicEthereumAPI creates a new Ethereum protocol API. -func NewPublicEthereumAPI(b Backend) *PublicEthereumAPI { - return &PublicEthereumAPI{b} +// NewEthereumAPI creates a new Ethereum protocol API. +func NewEthereumAPI(b Backend) *EthereumAPI { + return &EthereumAPI{b} } -// GasPrice returns a suggestion for a gas price. -func (s *PublicEthereumAPI) GasPrice(ctx context.Context) (*hexutil.Big, error) { - price, err := s.b.SuggestPrice(ctx) - return (*hexutil.Big)(price), err +// GasPrice returns a suggestion for a gas price for legacy transactions. +func (s *EthereumAPI) GasPrice(ctx context.Context) (*hexutil.Big, error) { + tipcap, err := s.b.SuggestGasTipCap(ctx) + if err != nil { + return nil, err + } + if head := s.b.CurrentHeader(); head.BaseFee != nil { + tipcap.Add(tipcap, head.BaseFee) + } + return (*hexutil.Big)(tipcap), err } -// ProtocolVersion returns the current Ethereum protocol version this node supports -func (s *PublicEthereumAPI) ProtocolVersion() hexutil.Uint { - return hexutil.Uint(s.b.ProtocolVersion()) +// MaxPriorityFeePerGas returns a suggestion for a gas tip cap for dynamic fee transactions. +func (s *EthereumAPI) MaxPriorityFeePerGas(ctx context.Context) (*hexutil.Big, error) { + tipcap, err := s.b.SuggestGasTipCap(ctx) + if err != nil { + return nil, err + } + return (*hexutil.Big)(tipcap), err +} + +type feeHistoryResult struct { + OldestBlock *hexutil.Big `json:"oldestBlock"` + Reward [][]*hexutil.Big `json:"reward,omitempty"` + BaseFee []*hexutil.Big `json:"baseFeePerGas,omitempty"` + GasUsedRatio []float64 `json:"gasUsedRatio"` +} + +// FeeHistory returns the fee market history. +func (s *EthereumAPI) FeeHistory(ctx context.Context, blockCount rpc.DecimalOrHex, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*feeHistoryResult, error) { + oldest, reward, baseFee, gasUsed, err := s.b.FeeHistory(ctx, int(blockCount), lastBlock, rewardPercentiles) + if err != nil { + return nil, err + } + results := &feeHistoryResult{ + OldestBlock: (*hexutil.Big)(oldest), + GasUsedRatio: gasUsed, + } + if reward != nil { + results.Reward = make([][]*hexutil.Big, len(reward)) + for i, w := range reward { + results.Reward[i] = make([]*hexutil.Big, len(w)) + for j, v := range w { + results.Reward[i][j] = (*hexutil.Big)(v) + } + } + } + if baseFee != nil { + results.BaseFee = make([]*hexutil.Big, len(baseFee)) + for i, v := range baseFee { + results.BaseFee[i] = (*hexutil.Big)(v) + } + } + return results, nil } // Syncing returns false in case the node is currently not syncing with the network. It can be up to date or has not @@ -80,8 +121,8 @@ func (s *PublicEthereumAPI) ProtocolVersion() hexutil.Uint { // - 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 (s *PublicEthereumAPI) Syncing() (interface{}, error) { - progress := s.b.Downloader().Progress() +func (s *EthereumAPI) Syncing() (interface{}, error) { + progress := s.b.SyncProgress() // Return not syncing if the synchronisation already completed if progress.CurrentBlock >= progress.HighestBlock { @@ -89,37 +130,47 @@ func (s *PublicEthereumAPI) Syncing() (interface{}, error) { } // Otherwise gather the block sync stats return map[string]interface{}{ - "startingBlock": hexutil.Uint64(progress.StartingBlock), - "currentBlock": hexutil.Uint64(progress.CurrentBlock), - "highestBlock": hexutil.Uint64(progress.HighestBlock), - "pulledStates": hexutil.Uint64(progress.PulledStates), - "knownStates": hexutil.Uint64(progress.KnownStates), + "startingBlock": hexutil.Uint64(progress.StartingBlock), + "currentBlock": hexutil.Uint64(progress.CurrentBlock), + "highestBlock": hexutil.Uint64(progress.HighestBlock), + "syncedAccounts": hexutil.Uint64(progress.SyncedAccounts), + "syncedAccountBytes": hexutil.Uint64(progress.SyncedAccountBytes), + "syncedBytecodes": hexutil.Uint64(progress.SyncedBytecodes), + "syncedBytecodeBytes": hexutil.Uint64(progress.SyncedBytecodeBytes), + "syncedStorage": hexutil.Uint64(progress.SyncedStorage), + "syncedStorageBytes": hexutil.Uint64(progress.SyncedStorageBytes), + "healedTrienodes": hexutil.Uint64(progress.HealedTrienodes), + "healedTrienodeBytes": hexutil.Uint64(progress.HealedTrienodeBytes), + "healedBytecodes": hexutil.Uint64(progress.HealedBytecodes), + "healedBytecodeBytes": hexutil.Uint64(progress.HealedBytecodeBytes), + "healingTrienodes": hexutil.Uint64(progress.HealingTrienodes), + "healingBytecode": hexutil.Uint64(progress.HealingBytecode), }, nil } -// PublicTxPoolAPI offers and API for the transaction pool. It only operates on data that is non confidential. -type PublicTxPoolAPI struct { +// TxPoolAPI offers and API for the transaction pool. It only operates on data that is non confidential. +type TxPoolAPI struct { b Backend } -// NewPublicTxPoolAPI creates a new tx pool service that gives information about the transaction pool. -func NewPublicTxPoolAPI(b Backend) *PublicTxPoolAPI { - return &PublicTxPoolAPI{b} +// NewTxPoolAPI creates a new tx pool service that gives information about the transaction pool. +func NewTxPoolAPI(b Backend) *TxPoolAPI { + return &TxPoolAPI{b} } // Content returns the transactions contained within the transaction pool. -func (s *PublicTxPoolAPI) Content() map[string]map[string]map[string]*RPCTransaction { +func (s *TxPoolAPI) Content() map[string]map[string]map[string]*RPCTransaction { content := map[string]map[string]map[string]*RPCTransaction{ "pending": make(map[string]map[string]*RPCTransaction), "queued": make(map[string]map[string]*RPCTransaction), } pending, queue := s.b.TxPoolContent() - + curHeader := s.b.CurrentHeader() // Flatten the pending transactions for account, txs := range pending { dump := make(map[string]*RPCTransaction) for _, tx := range txs { - dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx) + dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx, curHeader, s.b.ChainConfig()) } content["pending"][account.Hex()] = dump } @@ -127,15 +178,38 @@ func (s *PublicTxPoolAPI) Content() map[string]map[string]map[string]*RPCTransac for account, txs := range queue { dump := make(map[string]*RPCTransaction) for _, tx := range txs { - dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx) + dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx, curHeader, s.b.ChainConfig()) } content["queued"][account.Hex()] = dump } return content } +// ContentFrom returns the transactions contained within the transaction pool. +func (s *TxPoolAPI) ContentFrom(addr common.Address) map[string]map[string]*RPCTransaction { + content := make(map[string]map[string]*RPCTransaction, 2) + pending, queue := s.b.TxPoolContentFrom(addr) + curHeader := s.b.CurrentHeader() + + // Build the pending transactions + dump := make(map[string]*RPCTransaction, len(pending)) + for _, tx := range pending { + dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx, curHeader, s.b.ChainConfig()) + } + content["pending"] = dump + + // Build the queued transactions + dump = make(map[string]*RPCTransaction, len(queue)) + for _, tx := range queue { + dump[fmt.Sprintf("%d", tx.Nonce())] = newRPCPendingTransaction(tx, curHeader, s.b.ChainConfig()) + } + content["queued"] = dump + + return content +} + // Status returns the number of pending and queued transaction in the pool. -func (s *PublicTxPoolAPI) Status() map[string]hexutil.Uint { +func (s *TxPoolAPI) Status() map[string]hexutil.Uint { pending, queue := s.b.Stats() return map[string]hexutil.Uint{ "pending": hexutil.Uint(pending), @@ -145,7 +219,7 @@ func (s *PublicTxPoolAPI) Status() map[string]hexutil.Uint { // Inspect retrieves the content of the transaction pool and flattens it into an // easily inspectable list. -func (s *PublicTxPoolAPI) Inspect() map[string]map[string]map[string]string { +func (s *TxPoolAPI) Inspect() map[string]map[string]map[string]string { content := map[string]map[string]map[string]string{ "pending": make(map[string]map[string]string), "queued": make(map[string]map[string]string), @@ -178,42 +252,42 @@ func (s *PublicTxPoolAPI) Inspect() map[string]map[string]map[string]string { return content } -// PublicAccountAPI provides an API to access accounts managed by this node. +// EthereumAccountAPI provides an API to access accounts managed by this node. // It offers only methods that can retrieve accounts. -type PublicAccountAPI struct { +type EthereumAccountAPI struct { am *accounts.Manager } -// NewPublicAccountAPI creates a new PublicAccountAPI. -func NewPublicAccountAPI(am *accounts.Manager) *PublicAccountAPI { - return &PublicAccountAPI{am: am} +// NewEthereumAccountAPI creates a new EthereumAccountAPI. +func NewEthereumAccountAPI(am *accounts.Manager) *EthereumAccountAPI { + return &EthereumAccountAPI{am: am} } -// Accounts returns the collection of accounts this node manages -func (s *PublicAccountAPI) Accounts() []common.Address { +// Accounts returns the collection of accounts this node manages. +func (s *EthereumAccountAPI) Accounts() []common.Address { return s.am.Accounts() } -// PrivateAccountAPI provides an API to access accounts managed by this node. +// PersonalAccountAPI provides an API to access accounts managed by this node. // It offers methods to create, (un)lock en list accounts. Some methods accept // passwords and are therefore considered private by default. -type PrivateAccountAPI struct { +type PersonalAccountAPI struct { am *accounts.Manager nonceLock *AddrLocker b Backend } -// NewPrivateAccountAPI create a new PrivateAccountAPI. -func NewPrivateAccountAPI(b Backend, nonceLock *AddrLocker) *PrivateAccountAPI { - return &PrivateAccountAPI{ +// NewPersonalAccountAPI create a new PersonalAccountAPI. +func NewPersonalAccountAPI(b Backend, nonceLock *AddrLocker) *PersonalAccountAPI { + return &PersonalAccountAPI{ am: b.AccountManager(), nonceLock: nonceLock, b: b, } } -// listAccounts will return a list of addresses for accounts this node manages. -func (s *PrivateAccountAPI) ListAccounts() []common.Address { +// ListAccounts will return a list of addresses for accounts this node manages. +func (s *PersonalAccountAPI) ListAccounts() []common.Address { return s.am.Accounts() } @@ -227,7 +301,7 @@ type rawWallet struct { } // ListWallets will return a list of wallets this node manages. -func (s *PrivateAccountAPI) ListWallets() []rawWallet { +func (s *PersonalAccountAPI) ListWallets() []rawWallet { wallets := make([]rawWallet, 0) // return [] instead of nil if empty for _, wallet := range s.am.Wallets() { status, failure := wallet.Status() @@ -249,7 +323,7 @@ func (s *PrivateAccountAPI) ListWallets() []rawWallet { // 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). -func (s *PrivateAccountAPI) OpenWallet(url string, passphrase *string) error { +func (s *PersonalAccountAPI) OpenWallet(url string, passphrase *string) error { wallet, err := s.am.Wallet(url) if err != nil { return err @@ -263,7 +337,7 @@ func (s *PrivateAccountAPI) OpenWallet(url string, passphrase *string) error { // DeriveAccount requests a HD wallet to derive a new account, optionally pinning // it for later reuse. -func (s *PrivateAccountAPI) DeriveAccount(url string, path string, pin *bool) (accounts.Account, error) { +func (s *PersonalAccountAPI) DeriveAccount(url string, path string, pin *bool) (accounts.Account, error) { wallet, err := s.am.Wallet(url) if err != nil { return accounts.Account{}, err @@ -279,8 +353,12 @@ func (s *PrivateAccountAPI) DeriveAccount(url string, path string, pin *bool) (a } // NewAccount will create a new account and returns the address for the new account. -func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error) { - acc, err := fetchKeystore(s.am).NewAccount(password) +func (s *PersonalAccountAPI) NewAccount(password string) (common.Address, error) { + ks, err := fetchKeystore(s.am) + if err != nil { + return common.Address{}, err + } + acc, err := ks.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) @@ -290,26 +368,33 @@ func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error) return common.Address{}, err } -// fetchKeystore retrives the encrypted keystore from the account manager. -func fetchKeystore(am *accounts.Manager) *keystore.KeyStore { - return am.Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) +// fetchKeystore retrieves the encrypted keystore from the account manager. +func fetchKeystore(am *accounts.Manager) (*keystore.KeyStore, error) { + if ks := am.Backends(keystore.KeyStoreType); len(ks) > 0 { + return ks[0].(*keystore.KeyStore), nil + } + return nil, errors.New("local keystore not used") } // ImportRawKey stores the given hex encoded ECDSA key into the key directory, // encrypting it with the passphrase. -func (s *PrivateAccountAPI) ImportRawKey(privkey string, password string) (common.Address, error) { +func (s *PersonalAccountAPI) ImportRawKey(privkey string, password string) (common.Address, error) { key, err := crypto.HexToECDSA(privkey) if err != nil { return common.Address{}, err } - acc, err := fetchKeystore(s.am).ImportECDSA(key, password) + ks, err := fetchKeystore(s.am) + if err != nil { + return common.Address{}, err + } + acc, err := ks.ImportECDSA(key, password) return acc.Address, err } // 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(ctx context.Context, addr common.Address, password string, duration *uint64) (bool, error) { +func (s *PersonalAccountAPI) 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. @@ -326,7 +411,11 @@ func (s *PrivateAccountAPI) UnlockAccount(ctx context.Context, addr common.Addre } else { d = time.Duration(*duration) * time.Second } - err := fetchKeystore(s.am).TimedUnlock(accounts.Account{Address: addr}, password, d) + ks, err := fetchKeystore(s.am) + if err != nil { + return false, err + } + err = ks.TimedUnlock(accounts.Account{Address: addr}, password, d) if err != nil { log.Warn("Failed account unlock attempt", "address", addr, "err", err) } @@ -334,16 +423,19 @@ func (s *PrivateAccountAPI) UnlockAccount(ctx context.Context, addr common.Addre } // LockAccount will lock the account associated with the given address when it's unlocked. -func (s *PrivateAccountAPI) LockAccount(addr common.Address) bool { - return fetchKeystore(s.am).Lock(addr) == nil +func (s *PersonalAccountAPI) LockAccount(addr common.Address) bool { + if ks, err := fetchKeystore(s.am); err == nil { + return ks.Lock(addr) == nil + } + return false } // signTransaction sets defaults and signs the given transaction // NOTE: the caller needs to ensure that the nonceLock is held, if applicable, // and release it after the transaction has been submitted to the tx pool -func (s *PrivateAccountAPI) signTransaction(ctx context.Context, args *SendTxArgs, passwd string) (*types.Transaction, error) { +func (s *PersonalAccountAPI) signTransaction(ctx context.Context, args *TransactionArgs, passwd string) (*types.Transaction, error) { // Look up the wallet containing the requested signer - account := accounts.Account{Address: args.From} + account := accounts.Account{Address: args.from()} wallet, err := s.am.Find(account) if err != nil { return nil, err @@ -359,45 +451,53 @@ func (s *PrivateAccountAPI) signTransaction(ctx context.Context, args *SendTxArg } // SendTransaction will create a transaction from the given arguments and -// tries to sign it with the key associated with args.To. If the given passwd isn't -// able to decrypt the key it fails. -func (s *PrivateAccountAPI) SendTransaction(ctx context.Context, args SendTxArgs, passwd string) (common.Hash, error) { +// tries to sign it with the key associated with args.From. If the given +// passwd isn't able to decrypt the key it fails. +func (s *PersonalAccountAPI) SendTransaction(ctx context.Context, args TransactionArgs, passwd string) (common.Hash, error) { if args.Nonce == nil { // Hold the addresse's mutex around signing to prevent concurrent assignment of // the same nonce to multiple accounts. - s.nonceLock.LockAddr(args.From) - defer s.nonceLock.UnlockAddr(args.From) + s.nonceLock.LockAddr(args.from()) + defer s.nonceLock.UnlockAddr(args.from()) } signed, err := s.signTransaction(ctx, &args, passwd) if err != nil { - log.Warn("Failed transaction send attempt", "from", args.From, "to", args.To, "value", args.Value.ToInt(), "err", err) + 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) } // SignTransaction will create a transaction from the given arguments and -// tries to sign it with the key associated with args.To. If the given passwd isn't +// tries to sign it with the key associated with args.From. If the given passwd isn't // able to decrypt the key it fails. The transaction is returned in RLP-form, not broadcast // to other nodes -func (s *PrivateAccountAPI) SignTransaction(ctx context.Context, args SendTxArgs, passwd string) (*SignTransactionResult, error) { +func (s *PersonalAccountAPI) SignTransaction(ctx context.Context, args TransactionArgs, passwd string) (*SignTransactionResult, error) { // No need to obtain the noncelock mutex, since we won't be sending this // tx into the transaction pool, but right back to the user + if args.From == nil { + return nil, fmt.Errorf("sender not specified") + } if args.Gas == nil { return nil, fmt.Errorf("gas not specified") } - if args.GasPrice == nil { - return nil, fmt.Errorf("gasPrice not specified") + if args.GasPrice == nil && (args.MaxFeePerGas == nil || args.MaxPriorityFeePerGas == nil) { + return nil, fmt.Errorf("missing gasPrice or maxFeePerGas/maxPriorityFeePerGas") } if args.Nonce == nil { return nil, fmt.Errorf("nonce not specified") } + // Before actually signing the transaction, ensure the transaction fee is reasonable. + tx := args.toTransaction() + if err := checkTxFee(tx.GasPrice(), tx.Gas(), s.b.RPCTxFeeCap()); err != nil { + return nil, err + } signed, err := s.signTransaction(ctx, &args, passwd) if err != nil { - log.Warn("Failed transaction sign attempt", "from", args.From, "to", args.To, "value", args.Value.ToInt(), "err", err) + log.Warn("Failed transaction sign attempt", "from", args.from(), "to", args.To, "value", args.Value.ToInt(), "err", err) return nil, err } - data, err := rlp.EncodeToBytes(signed) + data, err := signed.MarshalBinary() if err != nil { return nil, err } @@ -405,15 +505,15 @@ func (s *PrivateAccountAPI) SignTransaction(ctx context.Context, args SendTxArgs } // Sign calculates an Ethereum ECDSA signature for: -// keccack256("\x19Ethereum Signed Message:\n" + len(message) + message)) +// keccak256("\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/cryptoecc/ETH-ECC/wiki/Management-APIs#personal_sign -func (s *PrivateAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr common.Address, passwd string) (hexutil.Bytes, error) { +// https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign +func (s *PersonalAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr common.Address, passwd string) (hexutil.Bytes, error) { // Look up the wallet containing the requested signer account := accounts.Account{Address: addr} @@ -440,8 +540,8 @@ func (s *PrivateAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr c // Note, the signature must conform to the secp256k1 curve R, S and V values, where // the V value must be 27 or 28 for legacy reasons. // -// https://github.com/cryptoecc/ETH-ECC/wiki/Management-APIs#personal_ecRecover -func (s *PrivateAccountAPI) EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error) { +// https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_ecRecover +func (s *PersonalAccountAPI) EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error) { if len(sig) != crypto.SignatureLength { return common.Address{}, fmt.Errorf("signature must be %d bytes long", crypto.SignatureLength) } @@ -457,14 +557,8 @@ func (s *PrivateAccountAPI) EcRecover(ctx context.Context, data, sig hexutil.Byt return crypto.PubkeyToAddress(*rpk), nil } -// SignAndSendTransaction was renamed to SendTransaction. This method is deprecated -// and will be removed in the future. It primary goal is to give clients time to update. -func (s *PrivateAccountAPI) SignAndSendTransaction(ctx context.Context, args SendTxArgs, passwd string) (common.Hash, error) { - 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) { +func (s *PersonalAccountAPI) InitializeWallet(ctx context.Context, url string) (string, error) { wallet, err := s.am.Wallet(url) if err != nil { return "", err @@ -486,12 +580,12 @@ func (s *PrivateAccountAPI) InitializeWallet(ctx context.Context, url string) (s case *scwallet.Wallet: return mnemonic, wallet.Initialize(seed) default: - return "", fmt.Errorf("Specified wallet does not support initialization") + 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 { +func (s *PersonalAccountAPI) Unpair(ctx context.Context, url string, pin string) error { wallet, err := s.am.Wallet(url) if err != nil { return err @@ -501,28 +595,32 @@ func (s *PrivateAccountAPI) Unpair(ctx context.Context, url string, pin string) case *scwallet.Wallet: return wallet.Unpair([]byte(pin)) default: - return fmt.Errorf("Specified wallet does not support pairing") + 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 { +// BlockChainAPI provides an API to access Ethereum blockchain data. +type BlockChainAPI struct { b Backend } -// NewPublicBlockChainAPI creates a new Ethereum blockchain API. -func NewPublicBlockChainAPI(b Backend) *PublicBlockChainAPI { - return &PublicBlockChainAPI{b} +// NewBlockChainAPI creates a new Ethereum blockchain API. +func NewBlockChainAPI(b Backend) *BlockChainAPI { + return &BlockChainAPI{b} } -// ChainId returns the chainID value for transaction replay protection. -func (s *PublicBlockChainAPI) ChainId() *hexutil.Big { - return (*hexutil.Big)(s.b.ChainConfig().ChainID) +// ChainId is the EIP-155 replay-protection chain id for the current Ethereum chain config. +// +// Note, this method does not conform to EIP-695 because the configured chain ID is always +// returned, regardless of the current head block. We used to return an error when the chain +// wasn't synced up to a block where EIP-155 is enabled, but this behavior caused issues +// in CL clients. +func (api *BlockChainAPI) ChainId() *hexutil.Big { + return (*hexutil.Big)(api.b.ChainConfig().ChainID) } // BlockNumber returns the block number of the chain head. -func (s *PublicBlockChainAPI) BlockNumber() hexutil.Uint64 { +func (s *BlockChainAPI) BlockNumber() hexutil.Uint64 { header, _ := s.b.HeaderByNumber(context.Background(), rpc.LatestBlockNumber) // latest header should always be available return hexutil.Uint64(header.Number.Uint64()) } @@ -530,8 +628,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 *BlockChainAPI) 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 } @@ -548,6 +646,7 @@ type AccountResult struct { StorageHash common.Hash `json:"storageHash"` StorageProof []StorageResult `json:"storageProof"` } + type StorageResult struct { Key string `json:"key"` Value *hexutil.Big `json:"value"` @@ -555,8 +654,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 *BlockChainAPI) 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 } @@ -581,7 +680,7 @@ func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Addre if storageError != nil { return nil, storageError } - storageProof[i] = StorageResult{key, (*hexutil.Big)(state.GetState(address, common.HexToHash(key)).Big()), common.ToHexArray(proof)} + storageProof[i] = StorageResult{key, (*hexutil.Big)(state.GetState(address, common.HexToHash(key)).Big()), toHexSlice(proof)} } else { storageProof[i] = StorageResult{key, &hexutil.Big{}, []string{}} } @@ -595,7 +694,7 @@ func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Addre return &AccountResult{ Address: address, - AccountProof: common.ToHexArray(accountProof), + AccountProof: toHexSlice(accountProof), Balance: (*hexutil.Big)(state.GetBalance(address)), CodeHash: codeHash, Nonce: hexutil.Uint64(state.GetNonce(address)), @@ -607,10 +706,10 @@ func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Addre // 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) { +func (s *BlockChainAPI) 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) + response := s.rpcMarshalHeader(ctx, header) if number == rpc.PendingBlockNumber { // Pending header need to nil out a few fields for _, field := range []string{"hash", "nonce", "miner"} { @@ -623,10 +722,10 @@ func (s *PublicBlockChainAPI) GetHeaderByNumber(ctx context.Context, number rpc. } // GetHeaderByHash returns the requested header by hash. -func (s *PublicBlockChainAPI) GetHeaderByHash(ctx context.Context, hash common.Hash) map[string]interface{} { +func (s *BlockChainAPI) GetHeaderByHash(ctx context.Context, hash common.Hash) map[string]interface{} { header, _ := s.b.HeaderByHash(ctx, hash) if header != nil { - return s.rpcMarshalHeader(header) + return s.rpcMarshalHeader(ctx, header) } return nil } @@ -636,10 +735,10 @@ func (s *PublicBlockChainAPI) GetHeaderByHash(ctx context.Context, hash common.H // * 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) { +func (s *BlockChainAPI) 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) + response, err := s.rpcMarshalBlock(ctx, 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"} { @@ -653,17 +752,16 @@ func (s *PublicBlockChainAPI) GetBlockByNumber(ctx context.Context, number rpc.B // 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, hash common.Hash, fullTx bool) (map[string]interface{}, error) { +func (s *BlockChainAPI) 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.rpcMarshalBlock(block, true, fullTx) + return s.rpcMarshalBlock(ctx, block, true, fullTx) } return nil, err } -// GetUncleByBlockNumberAndIndex 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) GetUncleByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) (map[string]interface{}, error) { +// GetUncleByBlockNumberAndIndex returns the uncle block for the given block hash and index. +func (s *BlockChainAPI) GetUncleByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) (map[string]interface{}, error) { block, err := s.b.BlockByNumber(ctx, blockNr) if block != nil { uncles := block.Uncles() @@ -672,14 +770,13 @@ func (s *PublicBlockChainAPI) GetUncleByBlockNumberAndIndex(ctx context.Context, return nil, nil } block = types.NewBlockWithHeader(uncles[index]) - return s.rpcMarshalBlock(block, false, false) + return s.rpcMarshalBlock(ctx, block, false, false) } return nil, err } -// 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) { +// GetUncleByBlockHashAndIndex returns the uncle block for the given block hash and index. +func (s *BlockChainAPI) GetUncleByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) (map[string]interface{}, error) { block, err := s.b.BlockByHash(ctx, blockHash) if block != nil { uncles := block.Uncles() @@ -688,13 +785,13 @@ func (s *PublicBlockChainAPI) GetUncleByBlockHashAndIndex(ctx context.Context, b return nil, nil } block = types.NewBlockWithHeader(uncles[index]) - return s.rpcMarshalBlock(block, false, false) + return s.rpcMarshalBlock(ctx, block, false, false) } return nil, err } // GetUncleCountByBlockNumber returns number of uncles in the block for the given block number -func (s *PublicBlockChainAPI) GetUncleCountByBlockNumber(ctx context.Context, blockNr rpc.BlockNumber) *hexutil.Uint { +func (s *BlockChainAPI) GetUncleCountByBlockNumber(ctx context.Context, blockNr rpc.BlockNumber) *hexutil.Uint { if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { n := hexutil.Uint(len(block.Uncles())) return &n @@ -703,7 +800,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 { +func (s *BlockChainAPI) GetUncleCountByBlockHash(ctx context.Context, blockHash common.Hash) *hexutil.Uint { if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { n := hexutil.Uint(len(block.Uncles())) return &n @@ -712,8 +809,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 *BlockChainAPI) 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 } @@ -724,8 +821,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 *BlockChainAPI) 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 } @@ -733,23 +830,13 @@ func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.A return res[:], state.Error() } -// CallArgs represents the arguments for a call. -type CallArgs struct { - 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"` -} - -// account indicates the overriding fields of account during the execution of -// a message call. +// OverrideAccount 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 { +type OverrideAccount struct { Nonce *hexutil.Uint64 `json:"nonce"` Code *hexutil.Bytes `json:"code"` Balance **hexutil.Big `json:"balance"` @@ -757,26 +844,15 @@ type account struct { StateDiff *map[common.Hash]common.Hash `json:"stateDiff"` } -func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumber, 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()) +// StateOverride is the collection of overridden accounts. +type StateOverride map[common.Address]OverrideAccount - state, header, err := b.StateAndHeaderByNumber(ctx, blockNr) - if state == nil || err != nil { - return nil, 0, false, err - } - // Set sender address or use a default if none specified - 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 +// Apply overrides the fields of specified accounts into the given state. +func (diff *StateOverride) Apply(state *state.StateDB) error { + if diff == nil { + return nil } - // Override the fields of specified contracts before execution. - for addr, account := range overrides { + for addr, account := range *diff { // Override account nonce. if account.Nonce != nil { state.SetNonce(addr, uint64(*account.Nonce)) @@ -790,7 +866,7 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb 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()) + return fmt.Errorf("account %s has both 'state' and 'stateDiff'", addr.Hex()) } // Replace entire state if caller requires. if account.State != nil { @@ -803,33 +879,58 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb } } } - // Set default gas & gas price if none were set - gas := uint64(math.MaxUint64 / 2) - if args.Gas != nil { - gas = uint64(*args.Gas) + return nil +} + +// BlockOverrides is a set of header fields to override. +type BlockOverrides struct { + Number *hexutil.Big + Difficulty *hexutil.Big + Time *hexutil.Big + GasLimit *hexutil.Uint64 + Coinbase *common.Address + Random *common.Hash + BaseFee *hexutil.Big +} + +// Apply overrides the given header fields into the given block context. +func (diff *BlockOverrides) Apply(blockCtx *vm.BlockContext) { + if diff == nil { + return + } + if diff.Number != nil { + blockCtx.BlockNumber = diff.Number.ToInt() } - if globalGasCap != nil && globalGasCap.Uint64() < gas { - log.Warn("Caller gas above allowance, capping", "requested", gas, "cap", globalGasCap) - gas = globalGasCap.Uint64() + if diff.Difficulty != nil { + blockCtx.Difficulty = diff.Difficulty.ToInt() } - gasPrice := new(big.Int).SetUint64(defaultGasPrice) - if args.GasPrice != nil { - gasPrice = args.GasPrice.ToInt() + if diff.Time != nil { + blockCtx.Time = diff.Time.ToInt() } - - value := new(big.Int) - if args.Value != nil { - value = args.Value.ToInt() + if diff.GasLimit != nil { + blockCtx.GasLimit = uint64(*diff.GasLimit) } - - var data []byte - if args.Data != nil { - data = []byte(*args.Data) + if diff.Coinbase != nil { + blockCtx.Coinbase = *diff.Coinbase + } + if diff.Random != nil { + blockCtx.Random = diff.Random + } + if diff.BaseFee != nil { + blockCtx.BaseFee = diff.BaseFee.ToInt() } +} - // Create new call message - msg := types.NewMessage(addr, args.To, 0, value, gas, gasPrice, data, false) +func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides *StateOverride, timeout time.Duration, globalGasCap uint64) (*core.ExecutionResult, error) { + defer func(start time.Time) { log.Debug("Executing EVM call finished", "runtime", time.Since(start)) }(time.Now()) + state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) + if state == nil || err != nil { + return nil, err + } + if err := overrides.Apply(state); err != nil { + return nil, err + } // Setup context so it may be cancelled the call has completed // or, in case of unmetered gas, setup a context with a timeout. var cancel context.CancelFunc @@ -843,9 +944,13 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb defer cancel() // Get a new instance of the EVM. - evm, vmError, err := b.GetEVM(ctx, msg, state, header) + msg, err := args.ToMessage(globalGasCap, header.BaseFee) + if err != nil { + return nil, err + } + evm, vmError, err := b.GetEVM(ctx, msg, state, header, &vm.Config{NoBaseFee: true}) if err != nil { - return nil, 0, false, err + return nil, err } // Wait for the context to be done and cancel the evm. Even if the // EVM has finished, cancelling may be done (repeatedly) @@ -854,18 +959,51 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb evm.Cancel() }() - // Setup the gas pool (also for unmetered requests) - // and apply the message. + // Execute the message. gp := new(core.GasPool).AddGas(math.MaxUint64) - res, gas, failed, err := core.ApplyMessage(evm, msg, gp) + result, err := core.ApplyMessage(evm, msg, gp) if err := vmError(); err != nil { - return nil, 0, false, err + return nil, 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 nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) } - return res, gas, failed, err + if err != nil { + return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas()) + } + return result, nil +} + +func newRevertError(result *core.ExecutionResult) *revertError { + reason, errUnpack := abi.UnpackRevert(result.Revert()) + err := errors.New("execution reverted") + if errUnpack == nil { + err = fmt.Errorf("execution reverted: %v", reason) + } + return &revertError{ + error: err, + reason: hexutil.Encode(result.Revert()), + } +} + +// revertError is an API error that encompasses an EVM revertal with JSON error +// code and a binary data blob. +type revertError struct { + error + reason string // revert reason hex encoded +} + +// ErrorCode returns the JSON error code for a revertal. +// See: https://github.com/ethereum/wiki/wiki/JSON-RPC-Error-Codes-Improvement-Proposal +func (e *revertError) ErrorCode() int { + return 3 +} + +// ErrorData returns the hex encoded revert reason. +func (e *revertError) ErrorData() interface{} { + return e.reason } // Call executes the given transaction on the state for the given block number. @@ -874,52 +1012,113 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb // // 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, blockNr rpc.BlockNumber, overrides *map[common.Address]account) (hexutil.Bytes, error) { - var accounts map[common.Address]account - if overrides != nil { - accounts = *overrides +func (s *BlockChainAPI) Call(ctx context.Context, args TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides *StateOverride) (hexutil.Bytes, error) { + result, err := DoCall(ctx, s.b, args, blockNrOrHash, overrides, s.b.RPCEVMTimeout(), s.b.RPCGasCap()) + if err != nil { + return nil, err + } + // If the result contains a revert reason, try to unpack and return it. + if len(result.Revert()) > 0 { + return nil, newRevertError(result) } - result, _, _, err := DoCall(ctx, s.b, args, blockNr, accounts, vm.Config{}, 5*time.Second, s.b.RPCGasCap()) - return (hexutil.Bytes)(result), err + return result.Return(), result.Err } -func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumber, gasCap *big.Int) (hexutil.Uint64, error) { +func DoEstimateGas(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, gasCap uint64) (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 ) + // Use zero address if sender unspecified. + if args.From == nil { + args.From = new(common.Address) + } + // Determine the highest gas limit can be used during the estimation. if args.Gas != nil && uint64(*args.Gas) >= params.TxGas { hi = uint64(*args.Gas) } else { // Retrieve the block to act as the gas ceiling - block, err := b.BlockByNumber(ctx, blockNr) + block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash) if err != nil { return 0, err } + if block == nil { + return 0, errors.New("block not found") + } hi = block.GasLimit() } - if gasCap != nil && hi > gasCap.Uint64() { + // Normalize the max fee per gas the call is willing to spend. + var feeCap *big.Int + if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { + return 0, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } else if args.GasPrice != nil { + feeCap = args.GasPrice.ToInt() + } else if args.MaxFeePerGas != nil { + feeCap = args.MaxFeePerGas.ToInt() + } else { + feeCap = common.Big0 + } + // Recap the highest gas limit with account's available balance. + if feeCap.BitLen() != 0 { + state, _, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) + if err != nil { + return 0, err + } + balance := state.GetBalance(*args.From) // from can't be nil + available := new(big.Int).Set(balance) + if args.Value != nil { + if args.Value.ToInt().Cmp(available) >= 0 { + return 0, errors.New("insufficient funds for transfer") + } + available.Sub(available, args.Value.ToInt()) + } + allowance := new(big.Int).Div(available, feeCap) + + // If the allowance is larger than maximum uint64, skip checking + if allowance.IsUint64() && hi > allowance.Uint64() { + transfer := args.Value + if transfer == nil { + transfer = new(hexutil.Big) + } + log.Warn("Gas estimation capped by limited funds", "original", hi, "balance", balance, + "sent", transfer.ToInt(), "maxFeePerGas", feeCap, "fundable", allowance) + hi = allowance.Uint64() + } + } + // Recap the highest gas allowance with specified gascap. + if gasCap != 0 && hi > gasCap { log.Warn("Caller gas above allowance, capping", "requested", hi, "cap", gasCap) - hi = gasCap.Uint64() + hi = gasCap } cap = hi // Create a helper to check if a gas allowance results in an executable transaction - executable := func(gas uint64) bool { + executable := func(gas uint64) (bool, *core.ExecutionResult, error) { args.Gas = (*hexutil.Uint64)(&gas) - _, _, failed, err := DoCall(ctx, b, args, rpc.PendingBlockNumber, nil, vm.Config{}, 0, gasCap) - if err != nil || failed { - return false + result, err := DoCall(ctx, b, args, blockNrOrHash, nil, 0, gasCap) + if err != nil { + if errors.Is(err, core.ErrIntrinsicGas) { + return true, nil, nil // Special case, raise gas limit + } + return true, nil, err // Bail out } - return true + return result.Failed(), result, nil } // Execute the binary search and hone in on an executable gas limit for lo+1 < hi { mid := (hi + lo) / 2 - if !executable(mid) { + failed, _, err := executable(mid) + + // If the error is not nil(consensus error), it means the provided message + // call or transaction will never be accepted no matter how much gas it is + // assigned. Return the error directly, don't struggle any more. + if err != nil { + return 0, err + } + if failed { lo = mid } else { hi = mid @@ -927,8 +1126,19 @@ func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNr rpc.Bl } // 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 (%d) or always failing transaction", cap) + failed, result, err := executable(hi) + if err != nil { + return 0, err + } + if failed { + if result != nil && result.Err != vm.ErrOutOfGas { + if len(result.Revert()) > 0 { + return 0, newRevertError(result) + } + return 0, result.Err + } + // Otherwise, the specified gas cap is too low + return 0, fmt.Errorf("gas required exceeds allowance (%d)", cap) } } return hexutil.Uint64(hi), nil @@ -936,74 +1146,17 @@ func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNr rpc.Bl // 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) { - return DoEstimateGas(ctx, s.b, args, rpc.PendingBlockNumber, 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 -type ExecutionResult struct { - Gas uint64 `json:"gas"` - Failed bool `json:"failed"` - ReturnValue string `json:"returnValue"` - StructLogs []StructLogRes `json:"structLogs"` -} - -// StructLogRes stores a structured log emitted by the EVM while replaying a -// transaction in debug mode -type StructLogRes struct { - Pc uint64 `json:"pc"` - Op string `json:"op"` - Gas uint64 `json:"gas"` - GasCost uint64 `json:"gasCost"` - Depth int `json:"depth"` - Error error `json:"error,omitempty"` - Stack *[]string `json:"stack,omitempty"` - Memory *[]string `json:"memory,omitempty"` - Storage *map[string]string `json:"storage,omitempty"` -} - -// 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 { - formatted[index] = StructLogRes{ - Pc: trace.Pc, - Op: trace.Op.String(), - Gas: trace.Gas, - GasCost: trace.GasCost, - Depth: trace.Depth, - Error: trace.Err, - } - if trace.Stack != nil { - stack := make([]string, len(trace.Stack)) - for i, stackValue := range trace.Stack { - stack[i] = fmt.Sprintf("%x", math.PaddedBigBytes(stackValue, 32)) - } - formatted[index].Stack = &stack - } - if trace.Memory != nil { - memory := make([]string, 0, (len(trace.Memory)+31)/32) - for i := 0; i+32 <= len(trace.Memory); i += 32 { - memory = append(memory, fmt.Sprintf("%x", trace.Memory[i:i+32])) - } - formatted[index].Memory = &memory - } - if trace.Storage != nil { - storage := make(map[string]string) - for i, storageValue := range trace.Storage { - storage[fmt.Sprintf("%x", i)] = fmt.Sprintf("%x", storageValue) - } - formatted[index].Storage = &storage - } +func (s *BlockChainAPI) EstimateGas(ctx context.Context, args TransactionArgs, blockNrOrHash *rpc.BlockNumberOrHash) (hexutil.Uint64, error) { + bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + if blockNrOrHash != nil { + bNrOrHash = *blockNrOrHash } - return formatted + return DoEstimateGas(ctx, s.b, args, bNrOrHash, s.b.RPCGasCap()) } // RPCMarshalHeader converts the given header to the RPC output . func RPCMarshalHeader(head *types.Header) map[string]interface{} { - return map[string]interface{}{ + result := map[string]interface{}{ "number": (*hexutil.Big)(head.Number), "hash": head.Hash(), "parentHash": head.ParentHash, @@ -1022,12 +1175,18 @@ func RPCMarshalHeader(head *types.Header) map[string]interface{} { "transactionsRoot": head.TxHash, "receiptsRoot": head.ReceiptHash, } + + if head.BaseFee != nil { + result["baseFeePerGas"] = (*hexutil.Big)(head.BaseFee) + } + + return result } // 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) { +func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool, config *params.ChainConfig) (map[string]interface{}, error) { fields := RPCMarshalHeader(block.Header()) fields["size"] = hexutil.Uint64(block.Size()) @@ -1037,7 +1196,7 @@ func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool) (map[string]i } if fullTx { formatTx = func(tx *types.Transaction) (interface{}, error) { - return newRPCTransactionFromBlockHash(block, tx.Hash()), nil + return newRPCTransactionFromBlockHash(block, tx.Hash(), config), nil } } txs := block.Transactions() @@ -1061,53 +1220,57 @@ func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool) (map[string]i } // rpcMarshalHeader uses the generalized output filler, then adds the total difficulty field, which requires -// a `PublicBlockchainAPI`. -func (s *PublicBlockChainAPI) rpcMarshalHeader(header *types.Header) map[string]interface{} { +// a `BlockchainAPI`. +func (s *BlockChainAPI) rpcMarshalHeader(ctx context.Context, header *types.Header) map[string]interface{} { fields := RPCMarshalHeader(header) - fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(header.Hash())) + fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(ctx, 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) +// a `BlockchainAPI`. +func (s *BlockChainAPI) rpcMarshalBlock(ctx context.Context, b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { + fields, err := RPCMarshalBlock(b, inclTx, fullTx, s.b.ChainConfig()) if err != nil { return nil, err } - fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(b.Hash())) + if inclTx { + fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(ctx, b.Hash())) + } return fields, err } // 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.Uint64 `json:"transactionIndex"` - Value *hexutil.Big `json:"value"` - V *hexutil.Big `json:"v"` - R *hexutil.Big `json:"r"` - S *hexutil.Big `json:"s"` + 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"` + GasFeeCap *hexutil.Big `json:"maxFeePerGas,omitempty"` + GasTipCap *hexutil.Big `json:"maxPriorityFeePerGas,omitempty"` + Hash common.Hash `json:"hash"` + Input hexutil.Bytes `json:"input"` + Nonce hexutil.Uint64 `json:"nonce"` + To *common.Address `json:"to"` + TransactionIndex *hexutil.Uint64 `json:"transactionIndex"` + Value *hexutil.Big `json:"value"` + Type hexutil.Uint64 `json:"type"` + Accesses *types.AccessList `json:"accessList,omitempty"` + ChainID *hexutil.Big `json:"chainId,omitempty"` + 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()) - } +func newRPCTransaction(tx *types.Transaction, blockHash common.Hash, blockNumber uint64, index uint64, baseFee *big.Int, config *params.ChainConfig) *RPCTransaction { + signer := types.MakeSigner(config, new(big.Int).SetUint64(blockNumber)) from, _ := types.Sender(signer, tx) v, r, s := tx.RawSignatureValues() - result := &RPCTransaction{ + Type: hexutil.Uint64(tx.Type()), From: from, Gas: hexutil.Uint64(tx.Gas()), GasPrice: (*hexutil.Big)(tx.GasPrice()), @@ -1125,21 +1288,52 @@ func newRPCTransaction(tx *types.Transaction, blockHash common.Hash, blockNumber result.BlockNumber = (*hexutil.Big)(new(big.Int).SetUint64(blockNumber)) result.TransactionIndex = (*hexutil.Uint64)(&index) } + switch tx.Type() { + case types.LegacyTxType: + // if a legacy transaction has an EIP-155 chain id, include it explicitly + if id := tx.ChainId(); id.Sign() != 0 { + result.ChainID = (*hexutil.Big)(id) + } + case types.AccessListTxType: + al := tx.AccessList() + result.Accesses = &al + result.ChainID = (*hexutil.Big)(tx.ChainId()) + case types.DynamicFeeTxType: + al := tx.AccessList() + result.Accesses = &al + result.ChainID = (*hexutil.Big)(tx.ChainId()) + result.GasFeeCap = (*hexutil.Big)(tx.GasFeeCap()) + result.GasTipCap = (*hexutil.Big)(tx.GasTipCap()) + // if the transaction has been mined, compute the effective gas price + if baseFee != nil && blockHash != (common.Hash{}) { + // price = min(tip, gasFeeCap - baseFee) + baseFee + price := math.BigMin(new(big.Int).Add(tx.GasTipCap(), baseFee), tx.GasFeeCap()) + result.GasPrice = (*hexutil.Big)(price) + } else { + result.GasPrice = (*hexutil.Big)(tx.GasFeeCap()) + } + } return result } // newRPCPendingTransaction returns a pending transaction that will serialize to the RPC representation -func newRPCPendingTransaction(tx *types.Transaction) *RPCTransaction { - return newRPCTransaction(tx, common.Hash{}, 0, 0) +func newRPCPendingTransaction(tx *types.Transaction, current *types.Header, config *params.ChainConfig) *RPCTransaction { + var baseFee *big.Int + blockNumber := uint64(0) + if current != nil { + baseFee = misc.CalcBaseFee(config, current) + blockNumber = current.Number.Uint64() + } + return newRPCTransaction(tx, common.Hash{}, blockNumber, 0, baseFee, config) } // newRPCTransactionFromBlockIndex returns a transaction that will serialize to the RPC representation. -func newRPCTransactionFromBlockIndex(b *types.Block, index uint64) *RPCTransaction { +func newRPCTransactionFromBlockIndex(b *types.Block, index uint64, config *params.ChainConfig) *RPCTransaction { txs := b.Transactions() if index >= uint64(len(txs)) { return nil } - return newRPCTransaction(txs[index], b.Hash(), b.NumberU64(), index) + return newRPCTransaction(txs[index], b.Hash(), b.NumberU64(), index, b.BaseFee(), config) } // newRPCRawTransactionFromBlockIndex returns the bytes of a transaction given a block and a transaction index. @@ -1148,33 +1342,130 @@ func newRPCRawTransactionFromBlockIndex(b *types.Block, index uint64) hexutil.By if index >= uint64(len(txs)) { return nil } - blob, _ := rlp.EncodeToBytes(txs[index]) + blob, _ := txs[index].MarshalBinary() return blob } // newRPCTransactionFromBlockHash returns a transaction that will serialize to the RPC representation. -func newRPCTransactionFromBlockHash(b *types.Block, hash common.Hash) *RPCTransaction { +func newRPCTransactionFromBlockHash(b *types.Block, hash common.Hash, config *params.ChainConfig) *RPCTransaction { for idx, tx := range b.Transactions() { if tx.Hash() == hash { - return newRPCTransactionFromBlockIndex(b, uint64(idx)) + return newRPCTransactionFromBlockIndex(b, uint64(idx), config) } } return nil } -// PublicTransactionPoolAPI exposes methods for the RPC interface -type PublicTransactionPoolAPI struct { +// accessListResult returns an optional accesslist +// Its the result of the `debug_createAccessList` RPC call. +// It contains an error if the transaction itself failed. +type accessListResult struct { + Accesslist *types.AccessList `json:"accessList"` + Error string `json:"error,omitempty"` + GasUsed hexutil.Uint64 `json:"gasUsed"` +} + +// CreateAccessList creates a EIP-2930 type AccessList for the given transaction. +// Reexec and BlockNrOrHash can be specified to create the accessList on top of a certain state. +func (s *BlockChainAPI) CreateAccessList(ctx context.Context, args TransactionArgs, blockNrOrHash *rpc.BlockNumberOrHash) (*accessListResult, error) { + bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + if blockNrOrHash != nil { + bNrOrHash = *blockNrOrHash + } + acl, gasUsed, vmerr, err := AccessList(ctx, s.b, bNrOrHash, args) + if err != nil { + return nil, err + } + result := &accessListResult{Accesslist: &acl, GasUsed: hexutil.Uint64(gasUsed)} + if vmerr != nil { + result.Error = vmerr.Error() + } + return result, nil +} + +// AccessList creates an access list for the given transaction. +// If the accesslist creation fails an error is returned. +// If the transaction itself fails, an vmErr is returned. +func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrHash, args TransactionArgs) (acl types.AccessList, gasUsed uint64, vmErr error, err error) { + // Retrieve the execution context + db, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) + if db == nil || err != nil { + return nil, 0, nil, err + } + // If the gas amount is not set, default to RPC gas cap. + if args.Gas == nil { + tmp := hexutil.Uint64(b.RPCGasCap()) + args.Gas = &tmp + } + + // Ensure any missing fields are filled, extract the recipient and input data + if err := args.setDefaults(ctx, b); err != nil { + return nil, 0, nil, err + } + var to common.Address + if args.To != nil { + to = *args.To + } else { + to = crypto.CreateAddress(args.from(), uint64(*args.Nonce)) + } + isPostMerge := header.Difficulty.Cmp(common.Big0) == 0 + // Retrieve the precompiles since they don't need to be added to the access list + precompiles := vm.ActivePrecompiles(b.ChainConfig().Rules(header.Number, isPostMerge)) + + // Create an initial tracer + prevTracer := logger.NewAccessListTracer(nil, args.from(), to, precompiles) + if args.AccessList != nil { + prevTracer = logger.NewAccessListTracer(*args.AccessList, args.from(), to, precompiles) + } + for { + // Retrieve the current access list to expand + accessList := prevTracer.AccessList() + log.Trace("Creating access list", "input", accessList) + + // Copy the original db so we don't modify it + statedb := db.Copy() + // Set the accesslist to the last al + args.AccessList = &accessList + msg, err := args.ToMessage(b.RPCGasCap(), header.BaseFee) + if err != nil { + return nil, 0, nil, err + } + + // Apply the transaction with the access list tracer + tracer := logger.NewAccessListTracer(accessList, args.from(), to, precompiles) + config := vm.Config{Tracer: tracer, Debug: true, NoBaseFee: true} + vmenv, _, err := b.GetEVM(ctx, msg, statedb, header, &config) + if err != nil { + return nil, 0, nil, err + } + res, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())) + if err != nil { + return nil, 0, nil, fmt.Errorf("failed to apply transaction: %v err: %v", args.toTransaction().Hash(), err) + } + if tracer.Equal(prevTracer) { + return accessList, res.UsedGas, res.Err, nil + } + prevTracer = tracer + } +} + +// TransactionAPI exposes methods for reading and creating transaction data. +type TransactionAPI struct { b Backend nonceLock *AddrLocker + signer types.Signer } -// NewPublicTransactionPoolAPI creates a new RPC service with methods specific for the transaction pool. -func NewPublicTransactionPoolAPI(b Backend, nonceLock *AddrLocker) *PublicTransactionPoolAPI { - return &PublicTransactionPoolAPI{b, nonceLock} +// NewTransactionAPI creates a new RPC service with methods for interacting with transactions. +func NewTransactionAPI(b Backend, nonceLock *AddrLocker) *TransactionAPI { + // The signer used by the API should always be the 'latest' known one because we expect + // signers to be backwards-compatible with old transactions. + signer := types.LatestSigner(b.ChainConfig()) + return &TransactionAPI{b, nonceLock, signer} } // GetBlockTransactionCountByNumber returns the number of transactions in the block with the given block number. -func (s *PublicTransactionPoolAPI) GetBlockTransactionCountByNumber(ctx context.Context, blockNr rpc.BlockNumber) *hexutil.Uint { +func (s *TransactionAPI) GetBlockTransactionCountByNumber(ctx context.Context, blockNr rpc.BlockNumber) *hexutil.Uint { if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { n := hexutil.Uint(len(block.Transactions())) return &n @@ -1183,7 +1474,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 { +func (s *TransactionAPI) GetBlockTransactionCountByHash(ctx context.Context, blockHash common.Hash) *hexutil.Uint { if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { n := hexutil.Uint(len(block.Transactions())) return &n @@ -1192,23 +1483,23 @@ func (s *PublicTransactionPoolAPI) GetBlockTransactionCountByHash(ctx context.Co } // GetTransactionByBlockNumberAndIndex returns the transaction for the given block number and index. -func (s *PublicTransactionPoolAPI) GetTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) *RPCTransaction { +func (s *TransactionAPI) GetTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) *RPCTransaction { if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { - return newRPCTransactionFromBlockIndex(block, uint64(index)) + return newRPCTransactionFromBlockIndex(block, uint64(index), s.b.ChainConfig()) } return nil } // 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 { +func (s *TransactionAPI) GetTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) *RPCTransaction { if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { - return newRPCTransactionFromBlockIndex(block, uint64(index)) + return newRPCTransactionFromBlockIndex(block, uint64(index), s.b.ChainConfig()) } return nil } // GetRawTransactionByBlockNumberAndIndex returns the bytes of the transaction for the given block number and index. -func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) hexutil.Bytes { +func (s *TransactionAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) hexutil.Bytes { if block, _ := s.b.BlockByNumber(ctx, blockNr); block != nil { return newRPCRawTransactionFromBlockIndex(block, uint64(index)) } @@ -1216,7 +1507,7 @@ 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 { +func (s *TransactionAPI) GetRawTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) hexutil.Bytes { if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { return newRPCRawTransactionFromBlockIndex(block, uint64(index)) } @@ -1224,9 +1515,9 @@ func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockHashAndIndex(ctx cont } // 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 *TransactionAPI) 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 @@ -1234,7 +1525,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 } @@ -1243,18 +1534,22 @@ 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, error) { +func (s *TransactionAPI) GetTransactionByHash(ctx context.Context, hash common.Hash) (*RPCTransaction, error) { // Try to return an already finalized transaction 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 + header, err := s.b.HeaderByHash(ctx, blockHash) + if err != nil { + return nil, err + } + return newRPCTransaction(tx, blockHash, blockNumber, index, header.BaseFee, s.b.ChainConfig()), nil } // No finalized transaction, try to retrieve it from the pool if tx := s.b.GetPoolTransaction(hash); tx != nil { - return newRPCPendingTransaction(tx), nil + return newRPCPendingTransaction(tx, s.b.CurrentHeader(), s.b.ChainConfig()), nil } // Transaction unknown, return as such @@ -1262,7 +1557,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionByHash(ctx context.Context, has } // GetRawTransactionByHash returns the bytes of the transaction for the given hash. -func (s *PublicTransactionPoolAPI) GetRawTransactionByHash(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { +func (s *TransactionAPI) GetRawTransactionByHash(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { // Retrieve a finalized transaction, or a pooled otherwise tx, _, _, _, err := s.b.GetTransaction(ctx, hash) if err != nil { @@ -1275,13 +1570,15 @@ func (s *PublicTransactionPoolAPI) GetRawTransactionByHash(ctx context.Context, } } // Serialize to RLP and return - return rlp.EncodeToBytes(tx) + return tx.MarshalBinary() } // GetTransactionReceipt returns the transaction receipt for the given transaction hash. -func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, hash common.Hash) (map[string]interface{}, error) { - tx, blockHash, blockNumber, index := rawdb.ReadTransaction(s.b.ChainDb(), hash) - if tx == nil { +func (s *TransactionAPI) GetTransactionReceipt(ctx context.Context, hash common.Hash) (map[string]interface{}, error) { + tx, blockHash, blockNumber, index, err := s.b.GetTransaction(ctx, hash) + if err != nil { + // When the transaction doesn't exist, the RPC method should return JSON null + // as per specification. return nil, nil } receipts, err := s.b.GetReceipts(ctx, blockHash) @@ -1293,10 +1590,9 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, ha } receipt := receipts[index] - var signer types.Signer = types.FrontierSigner{} - if tx.Protected() { - signer = types.NewEIP155Signer(tx.ChainId()) - } + // Derive the sender. + bigblock := new(big.Int).SetUint64(blockNumber) + signer := types.MakeSigner(s.b.ChainConfig(), bigblock) from, _ := types.Sender(signer, tx) fields := map[string]interface{}{ @@ -1311,8 +1607,19 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, ha "contractAddress": nil, "logs": receipt.Logs, "logsBloom": receipt.Bloom, + "type": hexutil.Uint(tx.Type()), + } + // Assign the effective gas price paid + if !s.b.ChainConfig().IsLondon(bigblock) { + fields["effectiveGasPrice"] = hexutil.Uint64(tx.GasPrice().Uint64()) + } else { + header, err := s.b.HeaderByHash(ctx, blockHash) + if err != nil { + return nil, err + } + gasPrice := new(big.Int).Add(header.BaseFee, tx.EffectiveGasTipValue(header.BaseFee)) + fields["effectiveGasPrice"] = hexutil.Uint64(gasPrice.Uint64()) } - // Assign receipt status or post state. if len(receipt.PostState) > 0 { fields["root"] = hexutil.Bytes(receipt.PostState) @@ -1320,7 +1627,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, ha fields["status"] = hexutil.Uint(receipt.Status) } if receipt.Logs == nil { - fields["logs"] = [][]*types.Log{} + fields["logs"] = []*types.Log{} } // If the ContractAddress is 20 0x0 bytes, assume it is not a contract creation if receipt.ContractAddress != (common.Address{}) { @@ -1330,7 +1637,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceipt(ctx context.Context, ha } // sign is a helper function that signs a transaction with the private key of the given address. -func (s *PublicTransactionPoolAPI) sign(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { +func (s *TransactionAPI) sign(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { // Look up the wallet containing the requested signer account := accounts.Account{Address: addr} @@ -1342,116 +1649,41 @@ func (s *PublicTransactionPoolAPI) sign(addr common.Address, tx *types.Transacti return wallet.SignTx(account, tx, s.b.ChainConfig().ChainID) } -// SendTxArgs represents the arguments to sumbit a new transaction into the transaction pool. -type SendTxArgs struct { - 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"` - Nonce *hexutil.Uint64 `json:"nonce"` - // We accept "data" and "input" for backwards-compatibility reasons. "input" is the - // newer name and should be preferred by clients. - Data *hexutil.Bytes `json:"data"` - Input *hexutil.Bytes `json:"input"` -} - -// 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.GasPrice == nil { - price, err := b.SuggestPrice(ctx) - if err != nil { - return err - } - args.GasPrice = (*hexutil.Big)(price) - } - if args.Value == nil { - args.Value = new(hexutil.Big) - } - if args.Nonce == nil { - nonce, err := b.GetPoolNonce(ctx, args.From) - if err != nil { - return err - } - args.Nonce = (*hexutil.Uint64)(&nonce) - } - if args.Data != nil && args.Input != nil && !bytes.Equal(*args.Data, *args.Input) { - return errors.New(`Both "data" and "input" are set and not equal. Please use "input" to pass transaction call data.`) - } - if args.To == nil { - // Contract creation - var input []byte - if args.Data != nil { - input = *args.Data - } else if args.Input != nil { - input = *args.Input - } - if len(input) == 0 { - 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, - } - estimated, err := DoEstimateGas(ctx, b, callArgs, rpc.PendingBlockNumber, 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.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) - } - 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) { + // If the transaction fee cap is already specified, ensure the + // fee of the given transaction is _reasonable_. + if err := checkTxFee(tx.GasPrice(), tx.Gas(), b.RPCTxFeeCap()); err != nil { + return common.Hash{}, err + } + if !b.UnprotectedAllowed() && !tx.Protected() { + // Ensure only eip155 signed transactions are submitted if EIP155Required is set. + return common.Hash{}, errors.New("only replay-protected (EIP-155) transactions allowed over RPC") + } if err := b.SendTx(ctx, tx); err != nil { return common.Hash{}, err } + // Print a log with full tx details for manual investigations and interventions + signer := types.MakeSigner(b.ChainConfig(), b.CurrentBlock().Number()) + from, err := types.Sender(signer, tx) + if err != nil { + return common.Hash{}, err + } + if tx.To() == nil { - signer := types.MakeSigner(b.ChainConfig(), b.CurrentBlock().Number()) - from, err := types.Sender(signer, tx) - if err != nil { - return common.Hash{}, err - } addr := crypto.CreateAddress(from, tx.Nonce()) - log.Info("Submitted contract creation", "fullhash", tx.Hash().Hex(), "contract", addr.Hex()) + log.Info("Submitted contract creation", "hash", tx.Hash().Hex(), "from", from, "nonce", tx.Nonce(), "contract", addr.Hex(), "value", tx.Value()) } else { - log.Info("Submitted transaction", "fullhash", tx.Hash().Hex(), "recipient", tx.To()) + log.Info("Submitted transaction", "hash", tx.Hash().Hex(), "from", from, "nonce", tx.Nonce(), "recipient", tx.To(), "value", tx.Value()) } return tx.Hash(), nil } // 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) { +func (s *TransactionAPI) SendTransaction(ctx context.Context, args TransactionArgs) (common.Hash, error) { // Look up the wallet containing the requested signer - account := accounts.Account{Address: args.From} + account := accounts.Account{Address: args.from()} wallet, err := s.b.AccountManager().Find(account) if err != nil { @@ -1461,8 +1693,8 @@ func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args Sen if args.Nonce == nil { // Hold the addresse's mutex around signing to prevent concurrent assignment of // the same nonce to multiple accounts. - s.nonceLock.LockAddr(args.From) - defer s.nonceLock.UnlockAddr(args.From) + s.nonceLock.LockAddr(args.from()) + defer s.nonceLock.UnlockAddr(args.from()) } // Set some sanity defaults and terminate on failure @@ -1479,26 +1711,43 @@ func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args Sen return SubmitTransaction(ctx, s.b, signed) } +// FillTransaction fills the defaults (nonce, gas, gasPrice or 1559 fields) +// on a given unsigned transaction, and returns it to the caller for further +// processing (signing + broadcast). +func (s *TransactionAPI) FillTransaction(ctx context.Context, args TransactionArgs) (*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 := tx.MarshalBinary() + if err != nil { + return nil, err + } + return &SignTransactionResult{data, tx}, nil +} + // SendRawTransaction will add the signed transaction to the transaction pool. // The sender is responsible for signing the transaction and using the correct nonce. -func (s *PublicTransactionPoolAPI) SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) { +func (s *TransactionAPI) SendRawTransaction(ctx context.Context, input hexutil.Bytes) (common.Hash, error) { tx := new(types.Transaction) - if err := rlp.DecodeBytes(encodedTx, tx); err != nil { + if err := tx.UnmarshalBinary(input); err != nil { return common.Hash{}, err } return SubmitTransaction(ctx, s.b, tx) } // Sign calculates an ECDSA signature for: -// keccack256("\x19Ethereum Signed Message:\n" + len(message) + message). +// keccak256("\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 account associated with addr must be unlocked. // -// https://github.com/Onther-Tech/wiki/wiki/JSON-RPC#eth_sign -func (s *PublicTransactionPoolAPI) Sign(addr common.Address, data hexutil.Bytes) (hexutil.Bytes, error) { +// https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign +func (s *TransactionAPI) Sign(addr common.Address, data hexutil.Bytes) (hexutil.Bytes, error) { // Look up the wallet containing the requested signer account := accounts.Account{Address: addr} @@ -1523,12 +1772,12 @@ type SignTransactionResult struct { // SignTransaction will sign the given transaction with the from account. // The node needs to have the private key of the account corresponding with // the given from address and it needs to be unlocked. -func (s *PublicTransactionPoolAPI) SignTransaction(ctx context.Context, args SendTxArgs) (*SignTransactionResult, error) { +func (s *TransactionAPI) SignTransaction(ctx context.Context, args TransactionArgs) (*SignTransactionResult, error) { if args.Gas == nil { return nil, fmt.Errorf("gas not specified") } - if args.GasPrice == nil { - return nil, fmt.Errorf("gasPrice not specified") + if args.GasPrice == nil && (args.MaxPriorityFeePerGas == nil || args.MaxFeePerGas == nil) { + return nil, fmt.Errorf("missing gasPrice or maxFeePerGas/maxPriorityFeePerGas") } if args.Nonce == nil { return nil, fmt.Errorf("nonce not specified") @@ -1536,20 +1785,25 @@ func (s *PublicTransactionPoolAPI) SignTransaction(ctx context.Context, args Sen if err := args.setDefaults(ctx, s.b); err != nil { return nil, err } - tx, err := s.sign(args.From, args.toTransaction()) + // Before actually sign the transaction, ensure the transaction fee is reasonable. + tx := args.toTransaction() + if err := checkTxFee(tx.GasPrice(), tx.Gas(), s.b.RPCTxFeeCap()); err != nil { + return nil, err + } + signed, err := s.sign(args.from(), tx) if err != nil { return nil, err } - data, err := rlp.EncodeToBytes(tx) + data, err := signed.MarshalBinary() if err != nil { return nil, err } - return &SignTransactionResult{data, tx}, nil + return &SignTransactionResult{data, signed}, nil } // PendingTransactions returns the transactions that are in the transaction pool // and have a from address that is one of the accounts this node manages. -func (s *PublicTransactionPoolAPI) PendingTransactions() ([]*RPCTransaction, error) { +func (s *TransactionAPI) PendingTransactions() ([]*RPCTransaction, error) { pending, err := s.b.GetPoolTransactions() if err != nil { return nil, err @@ -1560,15 +1814,12 @@ func (s *PublicTransactionPoolAPI) PendingTransactions() ([]*RPCTransaction, err accounts[account.Address] = struct{}{} } } + curHeader := s.b.CurrentHeader() transactions := make([]*RPCTransaction, 0, len(pending)) for _, tx := range pending { - var signer types.Signer = types.HomesteadSigner{} - if tx.Protected() { - signer = types.NewEIP155Signer(tx.ChainId()) - } - from, _ := types.Sender(signer, tx) + from, _ := types.Sender(s.signer, tx) if _, exists := accounts[from]; exists { - transactions = append(transactions, newRPCPendingTransaction(tx)) + transactions = append(transactions, newRPCPendingTransaction(tx, curHeader, s.b.ChainConfig())) } } return transactions, nil @@ -1576,7 +1827,7 @@ func (s *PublicTransactionPoolAPI) PendingTransactions() ([]*RPCTransaction, err // Resend accepts an existing transaction and a new gas price and limit. It will remove // the given transaction from the pool and reinsert it with the new gas price and limit. -func (s *PublicTransactionPoolAPI) Resend(ctx context.Context, sendArgs SendTxArgs, gasPrice *hexutil.Big, gasLimit *hexutil.Uint64) (common.Hash, error) { +func (s *TransactionAPI) Resend(ctx context.Context, sendArgs TransactionArgs, gasPrice *hexutil.Big, gasLimit *hexutil.Uint64) (common.Hash, error) { if sendArgs.Nonce == nil { return common.Hash{}, fmt.Errorf("missing transaction nonce in transaction spec") } @@ -1584,19 +1835,28 @@ func (s *PublicTransactionPoolAPI) Resend(ctx context.Context, sendArgs SendTxAr return common.Hash{}, err } matchTx := sendArgs.toTransaction() + + // Before replacing the old transaction, ensure the _new_ transaction fee is reasonable. + var price = matchTx.GasPrice() + if gasPrice != nil { + price = gasPrice.ToInt() + } + var gas = matchTx.Gas() + if gasLimit != nil { + gas = uint64(*gasLimit) + } + if err := checkTxFee(price, gas, s.b.RPCTxFeeCap()); err != nil { + return common.Hash{}, err + } + // Iterate the pending list for replacement pending, err := s.b.GetPoolTransactions() if err != nil { return common.Hash{}, err } - for _, p := range pending { - var signer types.Signer = types.HomesteadSigner{} - if p.Protected() { - signer = types.NewEIP155Signer(p.ChainId()) - } - wantSigHash := signer.Hash(matchTx) - - if pFrom, err := types.Sender(signer, p); err == nil && pFrom == sendArgs.From && signer.Hash(p) == wantSigHash { + wantSigHash := s.signer.Hash(matchTx) + pFrom, err := types.Sender(s.signer, p) + if err == nil && pFrom == sendArgs.from() && s.signer.Hash(p) == wantSigHash { // Match. Re-sign and send the transaction. if gasPrice != nil && (*big.Int)(gasPrice).Sign() != 0 { sendArgs.GasPrice = gasPrice @@ -1604,7 +1864,7 @@ func (s *PublicTransactionPoolAPI) Resend(ctx context.Context, sendArgs SendTxAr if gasLimit != nil && *gasLimit != 0 { sendArgs.Gas = gasLimit } - signedTx, err := s.sign(sendArgs.From, sendArgs.toTransaction()) + signedTx, err := s.sign(sendArgs.from(), sendArgs.toTransaction()) if err != nil { return common.Hash{}, err } @@ -1614,76 +1874,103 @@ func (s *PublicTransactionPoolAPI) Resend(ctx context.Context, sendArgs SendTxAr return signedTx.Hash(), nil } } - - return common.Hash{}, fmt.Errorf("Transaction %#x not found", matchTx.Hash()) + return common.Hash{}, fmt.Errorf("transaction %#x not found", matchTx.Hash()) } -// PublicDebugAPI is the collection of Ethereum APIs exposed over the public -// debugging endpoint. -type PublicDebugAPI struct { +// DebugAPI is the collection of Ethereum APIs exposed over the debugging +// namespace. +type DebugAPI struct { b Backend } -// NewPublicDebugAPI creates a new API definition for the public debug methods -// of the Ethereum service. -func NewPublicDebugAPI(b Backend) *PublicDebugAPI { - return &PublicDebugAPI{b: b} +// NewDebugAPI creates a new instance of DebugAPI. +func NewDebugAPI(b Backend) *DebugAPI { + return &DebugAPI{b: b} } -// GetBlockRlp retrieves the RLP encoded for of a single block. -func (api *PublicDebugAPI) GetBlockRlp(ctx context.Context, number uint64) (string, error) { - block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) - if block == nil { - return "", fmt.Errorf("block #%d not found", number) +// GetRawHeader retrieves the RLP encoding for a single header. +func (api *DebugAPI) GetRawHeader(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { + var hash common.Hash + if h, ok := blockNrOrHash.Hash(); ok { + hash = h + } else { + block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash) + if err != nil { + return nil, err + } + hash = block.Hash() } - encoded, err := rlp.EncodeToBytes(block) - if err != nil { - return "", err + header, _ := api.b.HeaderByHash(ctx, hash) + if header == nil { + return nil, fmt.Errorf("header #%d not found", hash) } - return fmt.Sprintf("%x", encoded), nil + return rlp.EncodeToBytes(header) } -// 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)) +// GetRawBlock retrieves the RLP encoded for a single block. +func (api *DebugAPI) GetRawBlock(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { + var hash common.Hash + if h, ok := blockNrOrHash.Hash(); ok { + hash = h + } else { + block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash) + if err != nil { + return nil, err + } + hash = block.Hash() + } + block, _ := api.b.BlockByHash(ctx, hash) if block == nil { - return common.Address{}, fmt.Errorf("block #%d not found", number) + return nil, fmt.Errorf("block #%d not found", hash) } - header := block.Header() - header.Extra = make([]byte, 32+65) - encoded := clique.CliqueRLP(header) + return rlp.EncodeToBytes(block) +} - // Look up the wallet containing the requested signer - account := accounts.Account{Address: address} - wallet, err := api.b.AccountManager().Find(account) +// GetRawReceipts retrieves the binary-encoded receipts of a single block. +func (api *DebugAPI) GetRawReceipts(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) ([]hexutil.Bytes, error) { + var hash common.Hash + if h, ok := blockNrOrHash.Hash(); ok { + hash = h + } else { + block, err := api.b.BlockByNumberOrHash(ctx, blockNrOrHash) + if err != nil { + return nil, err + } + hash = block.Hash() + } + receipts, err := api.b.GetReceipts(ctx, hash) if err != nil { - return common.Address{}, err + return nil, err + } + result := make([]hexutil.Bytes, len(receipts)) + for i, receipt := range receipts { + b, err := receipt.MarshalBinary() + if err != nil { + return nil, err + } + result[i] = b } + return result, nil +} - signature, err := wallet.SignData(account, accounts.MimetypeClique, encoded) +// GetRawTransaction returns the bytes of the transaction for the given hash. +func (s *DebugAPI) GetRawTransaction(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { + // Retrieve a finalized transaction, or a pooled otherwise + tx, _, _, _, err := s.b.GetTransaction(ctx, hash) if err != nil { - return common.Address{}, err + return nil, 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 + if tx == nil { + if tx = s.b.GetPoolTransaction(hash); tx == nil { + // Transaction not found anywhere, abort + return nil, nil + } } - var signer common.Address - copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) - - return signer, nil + return tx.MarshalBinary() } // PrintBlock retrieves a block and returns its pretty printed form. -func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) { +func (api *DebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) { block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) if block == nil { return "", fmt.Errorf("block #%d not found", number) @@ -1692,28 +1979,16 @@ func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (strin } // SeedHash retrieves the seed hash of a block. -func (api *PublicDebugAPI) SeedHash(ctx context.Context, number uint64) (string, error) { +func (api *DebugAPI) SeedHash(ctx context.Context, number uint64) (string, error) { block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) if block == nil { return "", fmt.Errorf("block #%d not found", number) } - return fmt.Sprintf("0x%x", ethash.SeedHash(number)), nil -} - -// PrivateDebugAPI is the collection of Ethereum APIs exposed over the private -// debugging endpoint. -type PrivateDebugAPI struct { - b Backend -} - -// NewPrivateDebugAPI creates a new API definition for the private debug methods -// of the Ethereum service. -func NewPrivateDebugAPI(b Backend) *PrivateDebugAPI { - return &PrivateDebugAPI{b: b} + return fmt.Sprintf("%#x", ethash.SeedHash(number)), nil } // ChaindbProperty returns leveldb properties of the key-value database. -func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) { +func (api *DebugAPI) ChaindbProperty(property string) (string, error) { if property == "" { property = "leveldb.stats" } else if !strings.HasPrefix(property, "leveldb.") { @@ -1724,7 +1999,7 @@ func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) { // ChaindbCompact flattens the entire key-value database into a single level, // removing all unused slots and merging all keys. -func (api *PrivateDebugAPI) ChaindbCompact() error { +func (api *DebugAPI) ChaindbCompact() error { for b := byte(0); b < 255; b++ { log.Info("Compacting chain database", "range", fmt.Sprintf("0x%0.2X-0x%0.2X", b, b+1)) if err := api.b.ChainDb().Compact([]byte{b}, []byte{b + 1}); err != nil { @@ -1736,32 +2011,56 @@ func (api *PrivateDebugAPI) ChaindbCompact() error { } // SetHead rewinds the head of the blockchain to a previous block. -func (api *PrivateDebugAPI) SetHead(number hexutil.Uint64) { +func (api *DebugAPI) SetHead(number hexutil.Uint64) { api.b.SetHead(uint64(number)) } -// PublicNetAPI offers network related RPC methods -type PublicNetAPI struct { +// NetAPI offers network related RPC methods +type NetAPI struct { net *p2p.Server networkVersion uint64 } -// NewPublicNetAPI creates a new net API instance. -func NewPublicNetAPI(net *p2p.Server, networkVersion uint64) *PublicNetAPI { - return &PublicNetAPI{net, networkVersion} +// NewNetAPI creates a new net API instance. +func NewNetAPI(net *p2p.Server, networkVersion uint64) *NetAPI { + return &NetAPI{net, networkVersion} } // Listening returns an indication if the node is listening for network connections. -func (s *PublicNetAPI) Listening() bool { +func (s *NetAPI) Listening() bool { return true // always listening } // PeerCount returns the number of connected peers -func (s *PublicNetAPI) PeerCount() hexutil.Uint { +func (s *NetAPI) PeerCount() hexutil.Uint { return hexutil.Uint(s.net.PeerCount()) } // Version returns the current ethereum protocol version. -func (s *PublicNetAPI) Version() string { +func (s *NetAPI) Version() string { return fmt.Sprintf("%d", s.networkVersion) } + +// checkTxFee is an internal function used to check whether the fee of +// the given transaction is _reasonable_(under the cap). +func checkTxFee(gasPrice *big.Int, gas uint64, cap float64) error { + // Short circuit if there is no cap for transaction fee at all. + if cap == 0 { + return nil + } + feeEth := new(big.Float).Quo(new(big.Float).SetInt(new(big.Int).Mul(gasPrice, new(big.Int).SetUint64(gas))), new(big.Float).SetInt(big.NewInt(params.Ether))) + feeFloat, _ := feeEth.Float64() + if feeFloat > cap { + return fmt.Errorf("tx fee (%.2f ether) exceeds the configured cap (%.2f ether)", feeFloat, cap) + } + return nil +} + +// toHexSlice creates a slice of hex-strings based on []byte. +func toHexSlice(b [][]byte) []string { + r := make([]string, len(b)) + for i := range b { + r[i] = hexutil.Encode(b[i]) + } + return r +} diff --git a/internal/ethapi/backend.go b/internal/ethapi/backend.go index 2b62c578..5b4ceb63 100644 --- a/internal/ethapi/backend.go +++ b/internal/ethapi/backend.go @@ -20,44 +20,55 @@ package ethapi import ( "context" "math/big" + "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core" + "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/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) // Backend interface provides the common API services (that are provided by // both full and light clients) with access to necessary functions. type Backend interface { // General Ethereum API - Downloader() *downloader.Downloader - ProtocolVersion() int - SuggestPrice(ctx context.Context) (*big.Int, error) + SyncProgress() ethereum.SyncProgress + + SuggestGasTipCap(ctx context.Context) (*big.Int, error) + FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) ChainDb() ethdb.Database - EventMux() *event.TypeMux AccountManager() *accounts.Manager ExtRPCEnabled() bool - RPCGasCap() *big.Int // global gas cap for eth_call over rpc: DoS protection + RPCGasCap() uint64 // global gas cap for eth_call over rpc: DoS protection + RPCEVMTimeout() time.Duration // global timeout for eth_call over rpc: DoS protection + RPCTxFeeCap() float64 // global tx fee cap for all transaction related APIs + UnprotectedAllowed() bool // allows only for EIP155 transactions. // Blockchain API SetHead(number uint64) 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) + CurrentHeader() *types.Header + CurrentBlock() *types.Block 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) + PendingBlockAndReceipts() (*types.Block, types.Receipts) 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) + GetTd(ctx context.Context, hash common.Hash) *big.Int + GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config) (*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 @@ -70,17 +81,15 @@ type Backend interface { GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) Stats() (pending int, queued int) TxPoolContent() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) + TxPoolContentFrom(addr common.Address) (types.Transactions, 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 + Engine() consensus.Engine + + // eth/filters needs to be initialized from this backend type, so methods needed by + // it must also be included here. + filters.Backend } func GetAPIs(apiBackend Backend) []rpc.API { @@ -88,43 +97,25 @@ func GetAPIs(apiBackend Backend) []rpc.API { return []rpc.API{ { Namespace: "eth", - Version: "1.0", - Service: NewPublicEthereumAPI(apiBackend), - Public: true, + Service: NewEthereumAPI(apiBackend), }, { Namespace: "eth", - Version: "1.0", - Service: NewPublicBlockChainAPI(apiBackend), - Public: true, + Service: NewBlockChainAPI(apiBackend), }, { Namespace: "eth", - Version: "1.0", - Service: NewPublicTransactionPoolAPI(apiBackend, nonceLock), - Public: true, + Service: NewTransactionAPI(apiBackend, nonceLock), }, { Namespace: "txpool", - Version: "1.0", - Service: NewPublicTxPoolAPI(apiBackend), - Public: true, - }, { - Namespace: "debug", - Version: "1.0", - Service: NewPublicDebugAPI(apiBackend), - Public: true, + Service: NewTxPoolAPI(apiBackend), }, { Namespace: "debug", - Version: "1.0", - Service: NewPrivateDebugAPI(apiBackend), + Service: NewDebugAPI(apiBackend), }, { Namespace: "eth", - Version: "1.0", - Service: NewPublicAccountAPI(apiBackend.AccountManager()), - Public: true, + Service: NewEthereumAccountAPI(apiBackend.AccountManager()), }, { Namespace: "personal", - Version: "1.0", - Service: NewPrivateAccountAPI(apiBackend, nonceLock), - Public: false, + Service: NewPersonalAccountAPI(apiBackend, nonceLock), }, } } diff --git a/internal/ethapi/dbapi.go b/internal/ethapi/dbapi.go new file mode 100644 index 00000000..33fda936 --- /dev/null +++ b/internal/ethapi/dbapi.go @@ -0,0 +1,43 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethapi + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +// DbGet returns the raw value of a key stored in the database. +func (api *DebugAPI) DbGet(key string) (hexutil.Bytes, error) { + blob, err := common.ParseHexOrString(key) + if err != nil { + return nil, err + } + return api.b.ChainDb().Get(blob) +} + +// DbAncient retrieves an ancient binary blob from the append-only immutable files. +// It is a mapping to the `AncientReaderOp.Ancient` method +func (api *DebugAPI) DbAncient(kind string, number uint64) (hexutil.Bytes, error) { + return api.b.ChainDb().Ancient(kind, number) +} + +// DbAncients returns the ancient item numbers in the ancient store. +// It is a mapping to the `AncientReaderOp.Ancients` method +func (api *DebugAPI) DbAncients() (uint64, error) { + return api.b.ChainDb().Ancients() +} diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go new file mode 100644 index 00000000..e07248db --- /dev/null +++ b/internal/ethapi/transaction_args.go @@ -0,0 +1,319 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethapi + +import ( + "bytes" + "context" + "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/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" +) + +// TransactionArgs represents the arguments to construct a new transaction +// or a message call. +type TransactionArgs struct { + From *common.Address `json:"from"` + To *common.Address `json:"to"` + Gas *hexutil.Uint64 `json:"gas"` + GasPrice *hexutil.Big `json:"gasPrice"` + MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"` + MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"` + Value *hexutil.Big `json:"value"` + Nonce *hexutil.Uint64 `json:"nonce"` + + // We accept "data" and "input" for backwards-compatibility reasons. + // "input" is the newer name and should be preferred by clients. + // Issue detail: https://github.com/ethereum/go-ethereum/issues/15628 + Data *hexutil.Bytes `json:"data"` + Input *hexutil.Bytes `json:"input"` + + // Introduced by AccessListTxType transaction. + AccessList *types.AccessList `json:"accessList,omitempty"` + ChainID *hexutil.Big `json:"chainId,omitempty"` +} + +// from retrieves the transaction sender address. +func (args *TransactionArgs) from() common.Address { + if args.From == nil { + return common.Address{} + } + return *args.From +} + +// data retrieves the transaction calldata. Input field is preferred. +func (args *TransactionArgs) data() []byte { + if args.Input != nil { + return *args.Input + } + if args.Data != nil { + return *args.Data + } + return nil +} + +// setDefaults fills in default values for unspecified tx fields. +func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend) error { + if err := args.setFeeDefaults(ctx, b); err != nil { + return err + } + if args.Value == nil { + args.Value = new(hexutil.Big) + } + if args.Nonce == nil { + nonce, err := b.GetPoolNonce(ctx, args.from()) + if err != nil { + return err + } + args.Nonce = (*hexutil.Uint64)(&nonce) + } + if args.Data != nil && args.Input != nil && !bytes.Equal(*args.Data, *args.Input) { + return errors.New(`both "data" and "input" are set and not equal. Please use "input" to pass transaction call data`) + } + if args.To == nil && len(args.data()) == 0 { + return errors.New(`contract creation without any data provided`) + } + // Estimate the gas usage if necessary. + if args.Gas == nil { + // These fields are immutable during the estimation, safe to + // pass the pointer directly. + data := args.data() + callArgs := TransactionArgs{ + From: args.From, + To: args.To, + GasPrice: args.GasPrice, + MaxFeePerGas: args.MaxFeePerGas, + MaxPriorityFeePerGas: args.MaxPriorityFeePerGas, + Value: args.Value, + Data: (*hexutil.Bytes)(&data), + AccessList: args.AccessList, + } + 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) + } + // If chain id is provided, ensure it matches the local chain id. Otherwise, set the local + // chain id as the default. + want := b.ChainConfig().ChainID + if args.ChainID != nil { + if have := (*big.Int)(args.ChainID); have.Cmp(want) != 0 { + return fmt.Errorf("chainId does not match node's (have=%v, want=%v)", have, want) + } + } else { + args.ChainID = (*hexutil.Big)(want) + } + return nil +} + +// setFeeDefaults fills in default fee values for unspecified tx fields. +func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) error { + // If both gasPrice and at least one of the EIP-1559 fee parameters are specified, error. + if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { + return errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } + // If the tx has completely specified a fee mechanism, no default is needed. This allows users + // who are not yet synced past London to get defaults for other tx values. See + // https://github.com/ethereum/go-ethereum/pull/23274 for more information. + eip1559ParamsSet := args.MaxFeePerGas != nil && args.MaxPriorityFeePerGas != nil + if (args.GasPrice != nil && !eip1559ParamsSet) || (args.GasPrice == nil && eip1559ParamsSet) { + // Sanity check the EIP-1559 fee parameters if present. + if args.GasPrice == nil && args.MaxFeePerGas.ToInt().Cmp(args.MaxPriorityFeePerGas.ToInt()) < 0 { + return fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", args.MaxFeePerGas, args.MaxPriorityFeePerGas) + } + return nil + } + // Now attempt to fill in default value depending on whether London is active or not. + head := b.CurrentHeader() + if b.ChainConfig().IsLondon(head.Number) { + // London is active, set maxPriorityFeePerGas and maxFeePerGas. + if err := args.setLondonFeeDefaults(ctx, head, b); err != nil { + return err + } + } else { + if args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil { + return fmt.Errorf("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active") + } + // London not active, set gas price. + price, err := b.SuggestGasTipCap(ctx) + if err != nil { + return err + } + args.GasPrice = (*hexutil.Big)(price) + } + return nil +} + +// setLondonFeeDefaults fills in reasonable default fee values for unspecified fields. +func (args *TransactionArgs) setLondonFeeDefaults(ctx context.Context, head *types.Header, b Backend) error { + // Set maxPriorityFeePerGas if it is missing. + if args.MaxPriorityFeePerGas == nil { + tip, err := b.SuggestGasTipCap(ctx) + if err != nil { + return err + } + args.MaxPriorityFeePerGas = (*hexutil.Big)(tip) + } + // Set maxFeePerGas if it is missing. + if args.MaxFeePerGas == nil { + // Set the max fee to be 2 times larger than the previous block's base fee. + // The additional slack allows the tx to not become invalidated if the base + // fee is rising. + val := new(big.Int).Add( + args.MaxPriorityFeePerGas.ToInt(), + new(big.Int).Mul(head.BaseFee, big.NewInt(2)), + ) + args.MaxFeePerGas = (*hexutil.Big)(val) + } + // Both EIP-1559 fee parameters are now set; sanity check them. + if args.MaxFeePerGas.ToInt().Cmp(args.MaxPriorityFeePerGas.ToInt()) < 0 { + return fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", args.MaxFeePerGas, args.MaxPriorityFeePerGas) + } + return nil +} + +// ToMessage converts the transaction arguments to the Message type used by the +// core evm. This method is used in calls and traces that do not require a real +// live transaction. +func (args *TransactionArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (types.Message, error) { + // Reject invalid combinations of pre- and post-1559 fee styles + if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { + return types.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + } + // Set sender address or use zero address if none specified. + addr := args.from() + + // Set default gas & gas price if none were set + gas := globalGasCap + if gas == 0 { + gas = uint64(math.MaxUint64 / 2) + } + if args.Gas != nil { + gas = uint64(*args.Gas) + } + if globalGasCap != 0 && globalGasCap < gas { + log.Warn("Caller gas above allowance, capping", "requested", gas, "cap", globalGasCap) + gas = globalGasCap + } + var ( + gasPrice *big.Int + gasFeeCap *big.Int + gasTipCap *big.Int + ) + if baseFee == nil { + // If there's no basefee, then it must be a non-1559 execution + gasPrice = new(big.Int) + if args.GasPrice != nil { + gasPrice = args.GasPrice.ToInt() + } + gasFeeCap, gasTipCap = gasPrice, gasPrice + } else { + // A basefee is provided, necessitating 1559-type execution + if args.GasPrice != nil { + // User specified the legacy gas field, convert to 1559 gas typing + gasPrice = args.GasPrice.ToInt() + gasFeeCap, gasTipCap = gasPrice, gasPrice + } else { + // User specified 1559 gas fields (or none), use those + gasFeeCap = new(big.Int) + if args.MaxFeePerGas != nil { + gasFeeCap = args.MaxFeePerGas.ToInt() + } + gasTipCap = new(big.Int) + if args.MaxPriorityFeePerGas != nil { + gasTipCap = args.MaxPriorityFeePerGas.ToInt() + } + // Backfill the legacy gasPrice for EVM execution, unless we're all zeroes + gasPrice = new(big.Int) + if gasFeeCap.BitLen() > 0 || gasTipCap.BitLen() > 0 { + gasPrice = math.BigMin(new(big.Int).Add(gasTipCap, baseFee), gasFeeCap) + } + } + } + value := new(big.Int) + if args.Value != nil { + value = args.Value.ToInt() + } + data := args.data() + var accessList types.AccessList + if args.AccessList != nil { + accessList = *args.AccessList + } + msg := types.NewMessage(addr, args.To, 0, value, gas, gasPrice, gasFeeCap, gasTipCap, data, accessList, true) + return msg, nil +} + +// toTransaction converts the arguments to a transaction. +// This assumes that setDefaults has been called. +func (args *TransactionArgs) toTransaction() *types.Transaction { + var data types.TxData + switch { + case args.MaxFeePerGas != nil: + al := types.AccessList{} + if args.AccessList != nil { + al = *args.AccessList + } + data = &types.DynamicFeeTx{ + To: args.To, + ChainID: (*big.Int)(args.ChainID), + Nonce: uint64(*args.Nonce), + Gas: uint64(*args.Gas), + GasFeeCap: (*big.Int)(args.MaxFeePerGas), + GasTipCap: (*big.Int)(args.MaxPriorityFeePerGas), + Value: (*big.Int)(args.Value), + Data: args.data(), + AccessList: al, + } + case args.AccessList != nil: + data = &types.AccessListTx{ + To: args.To, + ChainID: (*big.Int)(args.ChainID), + Nonce: uint64(*args.Nonce), + Gas: uint64(*args.Gas), + GasPrice: (*big.Int)(args.GasPrice), + Value: (*big.Int)(args.Value), + Data: args.data(), + AccessList: *args.AccessList, + } + default: + data = &types.LegacyTx{ + To: args.To, + Nonce: uint64(*args.Nonce), + Gas: uint64(*args.Gas), + GasPrice: (*big.Int)(args.GasPrice), + Value: (*big.Int)(args.Value), + Data: args.data(), + } + } + return types.NewTx(data) +} + +// ToTransaction converts the arguments to a transaction. +// This assumes that setDefaults has been called. +func (args *TransactionArgs) ToTransaction() *types.Transaction { + return args.toTransaction() +} diff --git a/internal/ethapi/transaction_args_test.go b/internal/ethapi/transaction_args_test.go new file mode 100644 index 00000000..28dc561c --- /dev/null +++ b/internal/ethapi/transaction_args_test.go @@ -0,0 +1,342 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethapi + +import ( + "context" + "fmt" + "math/big" + "reflect" + "testing" + "time" + + "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/consensus" + "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" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" +) + +// TestSetFeeDefaults tests the logic for filling in default fee values works as expected. +func TestSetFeeDefaults(t *testing.T) { + type test struct { + name string + isLondon bool + in *TransactionArgs + want *TransactionArgs + err error + } + + var ( + b = newBackendMock() + fortytwo = (*hexutil.Big)(big.NewInt(42)) + maxFee = (*hexutil.Big)(new(big.Int).Add(new(big.Int).Mul(b.current.BaseFee, big.NewInt(2)), fortytwo.ToInt())) + al = &types.AccessList{types.AccessTuple{Address: common.Address{0xaa}, StorageKeys: []common.Hash{{0x01}}}} + ) + + tests := []test{ + // Legacy txs + { + "legacy tx pre-London", + false, + &TransactionArgs{}, + &TransactionArgs{GasPrice: fortytwo}, + nil, + }, + { + "legacy tx post-London, explicit gas price", + true, + &TransactionArgs{GasPrice: fortytwo}, + &TransactionArgs{GasPrice: fortytwo}, + nil, + }, + + // Access list txs + { + "access list tx pre-London", + false, + &TransactionArgs{AccessList: al}, + &TransactionArgs{AccessList: al, GasPrice: fortytwo}, + nil, + }, + { + "access list tx post-London, explicit gas price", + false, + &TransactionArgs{AccessList: al, GasPrice: fortytwo}, + &TransactionArgs{AccessList: al, GasPrice: fortytwo}, + nil, + }, + { + "access list tx post-London", + true, + &TransactionArgs{AccessList: al}, + &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + { + "access list tx post-London, only max fee", + true, + &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee}, + &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + { + "access list tx post-London, only priority fee", + true, + &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee}, + &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + + // Dynamic fee txs + { + "dynamic tx post-London", + true, + &TransactionArgs{}, + &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + { + "dynamic tx post-London, only max fee", + true, + &TransactionArgs{MaxFeePerGas: maxFee}, + &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + { + "dynamic tx post-London, only priority fee", + true, + &TransactionArgs{MaxFeePerGas: maxFee}, + &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, + { + "dynamic fee tx pre-London, maxFee set", + false, + &TransactionArgs{MaxFeePerGas: maxFee}, + nil, + fmt.Errorf("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"), + }, + { + "dynamic fee tx pre-London, priorityFee set", + false, + &TransactionArgs{MaxPriorityFeePerGas: fortytwo}, + nil, + fmt.Errorf("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"), + }, + { + "dynamic fee tx, maxFee < priorityFee", + true, + &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: (*hexutil.Big)(big.NewInt(1000))}, + nil, + fmt.Errorf("maxFeePerGas (0x3e) < maxPriorityFeePerGas (0x3e8)"), + }, + { + "dynamic fee tx, maxFee < priorityFee while setting default", + true, + &TransactionArgs{MaxFeePerGas: (*hexutil.Big)(big.NewInt(7))}, + nil, + fmt.Errorf("maxFeePerGas (0x7) < maxPriorityFeePerGas (0x2a)"), + }, + + // Misc + { + "set all fee parameters", + false, + &TransactionArgs{GasPrice: fortytwo, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + fmt.Errorf("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), + }, + { + "set gas price and maxPriorityFee", + false, + &TransactionArgs{GasPrice: fortytwo, MaxPriorityFeePerGas: fortytwo}, + nil, + fmt.Errorf("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), + }, + { + "set gas price and maxFee", + true, + &TransactionArgs{GasPrice: fortytwo, MaxFeePerGas: maxFee}, + nil, + fmt.Errorf("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), + }, + } + + ctx := context.Background() + for i, test := range tests { + if test.isLondon { + b.activateLondon() + } else { + b.deactivateLondon() + } + got := test.in + err := got.setFeeDefaults(ctx, b) + if err != nil && err.Error() == test.err.Error() { + // Test threw expected error. + continue + } else if err != nil { + t.Fatalf("test %d (%s): unexpected error: %s", i, test.name, err) + } + if !reflect.DeepEqual(got, test.want) { + t.Fatalf("test %d (%s): did not fill defaults as expected: (got: %v, want: %v)", i, test.name, got, test.want) + } + } +} + +type backendMock struct { + current *types.Header + config *params.ChainConfig +} + +func newBackendMock() *backendMock { + config := ¶ms.ChainConfig{ + ChainID: big.NewInt(42), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(1000), + } + return &backendMock{ + current: &types.Header{ + Difficulty: big.NewInt(10000000000), + Number: big.NewInt(1100), + GasLimit: 8_000_000, + GasUsed: 8_000_000, + Time: 555, + Extra: make([]byte, 32), + BaseFee: big.NewInt(10), + }, + config: config, + } +} + +func (b *backendMock) activateLondon() { + b.current.Number = big.NewInt(1100) +} + +func (b *backendMock) deactivateLondon() { + b.current.Number = big.NewInt(900) +} +func (b *backendMock) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + return big.NewInt(42), nil +} +func (b *backendMock) CurrentHeader() *types.Header { return b.current } +func (b *backendMock) ChainConfig() *params.ChainConfig { return b.config } + +// Other methods needed to implement Backend interface. +func (b *backendMock) SyncProgress() ethereum.SyncProgress { return ethereum.SyncProgress{} } +func (b *backendMock) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) { + return nil, nil, nil, nil, nil +} +func (b *backendMock) ChainDb() ethdb.Database { return nil } +func (b *backendMock) AccountManager() *accounts.Manager { return nil } +func (b *backendMock) ExtRPCEnabled() bool { return false } +func (b *backendMock) RPCGasCap() uint64 { return 0 } +func (b *backendMock) RPCEVMTimeout() time.Duration { return time.Second } +func (b *backendMock) RPCTxFeeCap() float64 { return 0 } +func (b *backendMock) UnprotectedAllowed() bool { return false } +func (b *backendMock) SetHead(number uint64) {} +func (b *backendMock) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { + return nil, nil +} +func (b *backendMock) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { + return nil, nil +} +func (b *backendMock) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error) { + return nil, nil +} +func (b *backendMock) CurrentBlock() *types.Block { return nil } +func (b *backendMock) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { + return nil, nil +} +func (b *backendMock) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + return nil, nil +} +func (b *backendMock) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error) { + return nil, nil +} +func (b *backendMock) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { + return nil, nil, nil +} +func (b *backendMock) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) { + return nil, nil, nil +} +func (b *backendMock) PendingBlockAndReceipts() (*types.Block, types.Receipts) { return nil, nil } +func (b *backendMock) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { + return nil, nil +} +func (b *backendMock) GetLogs(ctx context.Context, blockHash common.Hash, number uint64) ([][]*types.Log, error) { + return nil, nil +} +func (b *backendMock) GetTd(ctx context.Context, hash common.Hash) *big.Int { return nil } +func (b *backendMock) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config) (*vm.EVM, func() error, error) { + return nil, nil, nil +} +func (b *backendMock) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { return nil } +func (b *backendMock) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { + return nil +} +func (b *backendMock) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { + return nil +} +func (b *backendMock) SendTx(ctx context.Context, signedTx *types.Transaction) error { return nil } +func (b *backendMock) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { + return nil, [32]byte{}, 0, 0, nil +} +func (b *backendMock) GetPoolTransactions() (types.Transactions, error) { return nil, nil } +func (b *backendMock) GetPoolTransaction(txHash common.Hash) *types.Transaction { return nil } +func (b *backendMock) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) { + return 0, nil +} +func (b *backendMock) Stats() (pending int, queued int) { return 0, 0 } +func (b *backendMock) TxPoolContent() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) { + return nil, nil +} +func (b *backendMock) TxPoolContentFrom(addr common.Address) (types.Transactions, types.Transactions) { + return nil, nil +} +func (b *backendMock) SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription { return nil } +func (b *backendMock) BloomStatus() (uint64, uint64) { return 0, 0 } +func (b *backendMock) ServiceFilter(ctx context.Context, session *bloombits.MatcherSession) {} +func (b *backendMock) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { return nil } +func (b *backendMock) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { + return nil +} +func (b *backendMock) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { + return nil +} + +func (b *backendMock) Engine() consensus.Engine { return nil } diff --git a/internal/flags/categories.go b/internal/flags/categories.go new file mode 100644 index 00000000..c2db6c6c --- /dev/null +++ b/internal/flags/categories.go @@ -0,0 +1,43 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flags + +import "github.com/urfave/cli/v2" + +const ( + EthCategory = "ETHEREUM" + LightCategory = "LIGHT CLIENT" + DevCategory = "DEVELOPER CHAIN" + EthashCategory = "ETHASH" + TxPoolCategory = "TRANSACTION POOL" + PerfCategory = "PERFORMANCE TUNING" + AccountCategory = "ACCOUNT" + APICategory = "API AND CONSOLE" + NetworkingCategory = "NETWORKING" + MinerCategory = "MINER" + GasPriceCategory = "GAS PRICE ORACLE" + VMCategory = "VIRTUAL MACHINE" + LoggingCategory = "LOGGING AND DEBUGGING" + MetricsCategory = "METRICS AND STATS" + MiscCategory = "MISC" + DeprecatedCategory = "ALIASED (deprecated)" +) + +func init() { + cli.HelpFlag.(*cli.BoolFlag).Category = MiscCategory + cli.VersionFlag.(*cli.BoolFlag).Category = MiscCategory +} diff --git a/internal/flags/flags.go b/internal/flags/flags.go new file mode 100644 index 00000000..0ae2c6a5 --- /dev/null +++ b/internal/flags/flags.go @@ -0,0 +1,340 @@ +// 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 flags + +import ( + "encoding" + "errors" + "flag" + "math/big" + "os" + "os/user" + "path" + "strings" + + "github.com/ethereum/go-ethereum/common/math" + "github.com/urfave/cli/v2" +) + +// DirectoryString is 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 string + +func (s *DirectoryString) String() string { + return string(*s) +} + +func (s *DirectoryString) Set(value string) error { + *s = DirectoryString(expandPath(value)) + return nil +} + +var ( + _ cli.Flag = (*DirectoryFlag)(nil) + _ cli.RequiredFlag = (*DirectoryFlag)(nil) + _ cli.VisibleFlag = (*DirectoryFlag)(nil) + _ cli.DocGenerationFlag = (*DirectoryFlag)(nil) + _ cli.CategorizableFlag = (*DirectoryFlag)(nil) +) + +// DirectoryFlag is custom cli.Flag type which expand the received string to an absolute path. +// e.g. ~/.ethereum -> /home/username/.ethereum +type DirectoryFlag struct { + Name string + + Category string + DefaultText string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value DirectoryString + + Aliases []string +} + +// For cli.Flag: + +func (f *DirectoryFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) } +func (f *DirectoryFlag) IsSet() bool { return f.HasBeenSet } +func (f *DirectoryFlag) String() string { return cli.FlagStringer(f) } + +// Apply 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) error { + eachName(f, func(name string) { + set.Var(&f.Value, f.Name, f.Usage) + }) + return nil +} + +// For cli.RequiredFlag: + +func (f *DirectoryFlag) IsRequired() bool { return f.Required } + +// For cli.VisibleFlag: + +func (f *DirectoryFlag) IsVisible() bool { return !f.Hidden } + +// For cli.CategorizableFlag: + +func (f *DirectoryFlag) GetCategory() string { return f.Category } + +// For cli.DocGenerationFlag: + +func (f *DirectoryFlag) TakesValue() bool { return true } +func (f *DirectoryFlag) GetUsage() string { return f.Usage } +func (f *DirectoryFlag) GetValue() string { return f.Value.String() } +func (f *DirectoryFlag) GetEnvVars() []string { return nil } // env not supported + +func (f *DirectoryFlag) GetDefaultText() string { + if f.DefaultText != "" { + return f.DefaultText + } + return f.GetValue() +} + +type TextMarshaler interface { + encoding.TextMarshaler + encoding.TextUnmarshaler +} + +// textMarshalerVal turns a TextMarshaler into a flag.Value +type textMarshalerVal struct { + v TextMarshaler +} + +func (v textMarshalerVal) String() string { + if v.v == nil { + return "" + } + text, _ := v.v.MarshalText() + return string(text) +} + +func (v textMarshalerVal) Set(s string) error { + return v.v.UnmarshalText([]byte(s)) +} + +var ( + _ cli.Flag = (*TextMarshalerFlag)(nil) + _ cli.RequiredFlag = (*TextMarshalerFlag)(nil) + _ cli.VisibleFlag = (*TextMarshalerFlag)(nil) + _ cli.DocGenerationFlag = (*TextMarshalerFlag)(nil) + _ cli.CategorizableFlag = (*TextMarshalerFlag)(nil) +) + +// TextMarshalerFlag wraps a TextMarshaler value. +type TextMarshalerFlag struct { + Name string + + Category string + DefaultText string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value TextMarshaler + + Aliases []string +} + +// For cli.Flag: + +func (f *TextMarshalerFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) } +func (f *TextMarshalerFlag) IsSet() bool { return f.HasBeenSet } +func (f *TextMarshalerFlag) String() string { return cli.FlagStringer(f) } + +func (f *TextMarshalerFlag) Apply(set *flag.FlagSet) error { + eachName(f, func(name string) { + set.Var(textMarshalerVal{f.Value}, f.Name, f.Usage) + }) + return nil +} + +// For cli.RequiredFlag: + +func (f *TextMarshalerFlag) IsRequired() bool { return f.Required } + +// For cli.VisibleFlag: + +func (f *TextMarshalerFlag) IsVisible() bool { return !f.Hidden } + +// For cli.CategorizableFlag: + +func (f *TextMarshalerFlag) GetCategory() string { return f.Category } + +// For cli.DocGenerationFlag: + +func (f *TextMarshalerFlag) TakesValue() bool { return true } +func (f *TextMarshalerFlag) GetUsage() string { return f.Usage } +func (f *TextMarshalerFlag) GetEnvVars() []string { return nil } // env not supported + +func (f *TextMarshalerFlag) GetValue() string { + t, err := f.Value.MarshalText() + if err != nil { + return "(ERR: " + err.Error() + ")" + } + return string(t) +} + +func (f *TextMarshalerFlag) GetDefaultText() string { + if f.DefaultText != "" { + return f.DefaultText + } + return f.GetValue() +} + +// GlobalTextMarshaler returns the value of a TextMarshalerFlag from the global flag set. +func GlobalTextMarshaler(ctx *cli.Context, name string) TextMarshaler { + val := ctx.Generic(name) + if val == nil { + return nil + } + return val.(textMarshalerVal).v +} + +var ( + _ cli.Flag = (*BigFlag)(nil) + _ cli.RequiredFlag = (*BigFlag)(nil) + _ cli.VisibleFlag = (*BigFlag)(nil) + _ cli.DocGenerationFlag = (*BigFlag)(nil) + _ cli.CategorizableFlag = (*BigFlag)(nil) +) + +// BigFlag is a command line flag that accepts 256 bit big integers in decimal or +// hexadecimal syntax. +type BigFlag struct { + Name string + + Category string + DefaultText string + Usage string + + Required bool + Hidden bool + HasBeenSet bool + + Value *big.Int + + Aliases []string +} + +// For cli.Flag: + +func (f *BigFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) } +func (f *BigFlag) IsSet() bool { return f.HasBeenSet } +func (f *BigFlag) String() string { return cli.FlagStringer(f) } + +func (f *BigFlag) Apply(set *flag.FlagSet) error { + eachName(f, func(name string) { + f.Value = new(big.Int) + set.Var((*bigValue)(f.Value), f.Name, f.Usage) + }) + + return nil +} + +// For cli.RequiredFlag: + +func (f *BigFlag) IsRequired() bool { return f.Required } + +// For cli.VisibleFlag: + +func (f *BigFlag) IsVisible() bool { return !f.Hidden } + +// For cli.CategorizableFlag: + +func (f *BigFlag) GetCategory() string { return f.Category } + +// For cli.DocGenerationFlag: + +func (f *BigFlag) TakesValue() bool { return true } +func (f *BigFlag) GetUsage() string { return f.Usage } +func (f *BigFlag) GetValue() string { return f.Value.String() } +func (f *BigFlag) GetEnvVars() []string { return nil } // env not supported + +func (f *BigFlag) GetDefaultText() string { + if f.DefaultText != "" { + return f.DefaultText + } + return f.GetValue() +} + +// bigValue turns *big.Int into a flag.Value +type bigValue big.Int + +func (b *bigValue) String() string { + if b == nil { + return "" + } + return (*big.Int)(b).String() +} + +func (b *bigValue) Set(s string) error { + intVal, ok := math.ParseBig256(s) + if !ok { + return errors.New("invalid integer syntax") + } + *b = (bigValue)(*intVal) + return nil +} + +// GlobalBig returns the value of a BigFlag from the global flag set. +func GlobalBig(ctx *cli.Context, name string) *big.Int { + val := ctx.Generic(name) + if val == nil { + return nil + } + return (*big.Int)(val.(*bigValue)) +} + +// 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 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 "" +} + +func eachName(f cli.Flag, fn func(string)) { + for _, name := range f.Names() { + name = strings.Trim(name, " ") + fn(name) + } +} diff --git a/cmd/utils/customflags_test.go b/internal/flags/flags_test.go similarity index 61% rename from cmd/utils/customflags_test.go rename to internal/flags/flags_test.go index de39ca36..a0d4af7c 100644 --- a/cmd/utils/customflags_test.go +++ b/internal/flags/flags_test.go @@ -1,20 +1,20 @@ // Copyright 2015 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 utils +package flags import ( "os" diff --git a/internal/flags/helpers.go b/internal/flags/helpers.go new file mode 100644 index 00000000..4bcdc816 --- /dev/null +++ b/internal/flags/helpers.go @@ -0,0 +1,189 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flags + +import ( + "fmt" + "strings" + + "github.com/ethereum/go-ethereum/params" + "github.com/urfave/cli/v2" +) + +// NewApp creates an app with sane defaults. +func NewApp(gitCommit, gitDate, usage string) *cli.App { + app := cli.NewApp() + app.EnableBashCompletion = true + app.Version = params.VersionWithCommit(gitCommit, gitDate) + app.Usage = usage + app.Copyright = "Copyright 2013-2022 The go-ethereum Authors" + app.Before = func(ctx *cli.Context) error { + MigrateGlobalFlags(ctx) + return nil + } + return app +} + +// Merge merges the given flag slices. +func Merge(groups ...[]cli.Flag) []cli.Flag { + var ret []cli.Flag + for _, group := range groups { + ret = append(ret, group...) + } + return ret +} + +var migrationApplied = map[*cli.Command]struct{}{} + +// MigrateGlobalFlags makes all global flag values available in the +// context. This should be called as early as possible in app.Before. +// +// Example: +// +// geth account new --keystore /tmp/mykeystore --lightkdf +// +// is equivalent after calling this method with: +// +// geth --keystore /tmp/mykeystore --lightkdf account new +// +// i.e. in the subcommand Action function of 'account new', ctx.Bool("lightkdf) +// will return true even if --lightkdf is set as a global option. +// +// This function may become unnecessary when https://github.com/urfave/cli/pull/1245 is merged. +func MigrateGlobalFlags(ctx *cli.Context) { + var iterate func(cs []*cli.Command, fn func(*cli.Command)) + iterate = func(cs []*cli.Command, fn func(*cli.Command)) { + for _, cmd := range cs { + if _, ok := migrationApplied[cmd]; ok { + continue + } + migrationApplied[cmd] = struct{}{} + fn(cmd) + iterate(cmd.Subcommands, fn) + } + } + + // This iterates over all commands and wraps their action function. + iterate(ctx.App.Commands, func(cmd *cli.Command) { + if cmd.Action == nil { + return + } + + action := cmd.Action + cmd.Action = func(ctx *cli.Context) error { + doMigrateFlags(ctx) + return action(ctx) + } + }) +} + +func doMigrateFlags(ctx *cli.Context) { + for _, name := range ctx.FlagNames() { + for _, parent := range ctx.Lineage()[1:] { + if parent.IsSet(name) { + ctx.Set(name, parent.String(name)) + break + } + } + } +} + +func init() { + cli.FlagStringer = FlagString +} + +// FlagString prints a single flag in help. +func FlagString(f cli.Flag) string { + df, ok := f.(cli.DocGenerationFlag) + if !ok { + return "" + } + + needsPlaceholder := df.TakesValue() + placeholder := "" + if needsPlaceholder { + placeholder = "value" + } + + namesText := pad(cli.FlagNamePrefixer(df.Names(), placeholder), 30) + + defaultValueString := "" + if s := df.GetDefaultText(); s != "" { + defaultValueString = " (default: " + s + ")" + } + + usage := strings.TrimSpace(df.GetUsage()) + envHint := strings.TrimSpace(cli.FlagEnvHinter(df.GetEnvVars(), "")) + if len(envHint) > 0 { + usage += " " + envHint + } + + usage = wordWrap(usage, 80) + usage = indent(usage, 10) + + return fmt.Sprintf("\n %s%s\n%s", namesText, defaultValueString, usage) +} + +func pad(s string, length int) string { + if len(s) < length { + s += strings.Repeat(" ", length-len(s)) + } + return s +} + +func indent(s string, nspace int) string { + ind := strings.Repeat(" ", nspace) + return ind + strings.ReplaceAll(s, "\n", "\n"+ind) +} + +func wordWrap(s string, width int) string { + var ( + output strings.Builder + lineLength = 0 + ) + + for { + sp := strings.IndexByte(s, ' ') + var word string + if sp == -1 { + word = s + } else { + word = s[:sp] + } + wlen := len(word) + over := lineLength+wlen >= width + if over { + output.WriteByte('\n') + lineLength = 0 + } else { + if lineLength != 0 { + output.WriteByte(' ') + lineLength++ + } + } + + output.WriteString(word) + lineLength += wlen + + if sp == -1 { + break + } + s = s[wlen+1:] + } + + return output.String() +} diff --git a/internal/guide/guide_test.go b/internal/guide/guide_test.go index 7d50f31f..cdf0ec4d 100644 --- a/internal/guide/guide_test.go +++ b/internal/guide/guide_test.go @@ -23,25 +23,20 @@ package guide import ( - "io/ioutil" "math/big" - "os" "path/filepath" "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) // Tests that the account management snippets work correctly. func TestAccountManagement(t *testing.T) { // Create a temporary folder to work with - workdir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("Failed to create temporary work dir: %v", err) - } - defer os.RemoveAll(workdir) + workdir := t.TempDir() // Create an encrypted keystore with standard crypto parameters ks := keystore.NewKeyStore(filepath.Join(workdir, "keystore"), keystore.StandardScryptN, keystore.StandardScryptP) @@ -75,7 +70,8 @@ func TestAccountManagement(t *testing.T) { if err != nil { t.Fatalf("Failed to create signer account: %v", err) } - tx, chain := new(types.Transaction), big.NewInt(1) + tx := types.NewTransaction(0, common.Address{}, big.NewInt(0), 0, big.NewInt(0), nil) + chain := big.NewInt(1) // Sign a transaction with a single authorization if _, err := ks.SignTxWithPassphrase(signer, "Signer password", tx, chain); err != nil { diff --git a/internal/jsre/completion.go b/internal/jsre/completion.go index 7f484bbb..538fca29 100644 --- a/internal/jsre/completion.go +++ b/internal/jsre/completion.go @@ -20,35 +20,43 @@ import ( "sort" "strings" - "github.com/robertkrimen/otto" + "github.com/dop251/goja" ) // CompleteKeywords returns potential continuations for the given line. Since line is // evaluated, callers need to make sure that evaluating line does not have side effects. func (jsre *JSRE) CompleteKeywords(line string) []string { var results []string - jsre.Do(func(vm *otto.Otto) { + jsre.Do(func(vm *goja.Runtime) { results = getCompletions(vm, line) }) return results } -func getCompletions(vm *otto.Otto, line string) (results []string) { +func getCompletions(vm *goja.Runtime, line string) (results []string) { parts := strings.Split(line, ".") - objRef := "this" - prefix := line - if len(parts) > 1 { - objRef = strings.Join(parts[0:len(parts)-1], ".") - prefix = parts[len(parts)-1] + if len(parts) == 0 { + return nil } - obj, _ := vm.Object(objRef) - if obj == nil { - return nil + // Find the right-most fully named object in the line. e.g. if line = "x.y.z" + // and "x.y" is an object, obj will reference "x.y". + obj := vm.GlobalObject() + for i := 0; i < len(parts)-1; i++ { + v := obj.Get(parts[i]) + if v == nil || goja.IsNull(v) || goja.IsUndefined(v) { + return nil // No object was found + } + obj = v.ToObject(vm) } + + // Go over the keys of the object and retain the keys matching prefix. + // Example: if line = "x.y.z" and "x.y" exists and has keys "zebu", "zebra" + // and "platypus", then "x.y.zebu" and "x.y.zebra" will be added to results. + prefix := parts[len(parts)-1] iterOwnAndConstructorKeys(vm, obj, func(k string) { if strings.HasPrefix(k, prefix) { - if objRef == "this" { + if len(parts) == 1 { results = append(results, k) } else { results = append(results, strings.Join(parts[:len(parts)-1], ".")+"."+k) @@ -59,9 +67,9 @@ func getCompletions(vm *otto.Otto, line string) (results []string) { // Append opening parenthesis (for functions) or dot (for objects) // if the line itself is the only completion. if len(results) == 1 && results[0] == line { - obj, _ := vm.Object(line) + obj := obj.Get(parts[len(parts)-1]) if obj != nil { - if obj.Class() == "Function" { + if _, isfunc := goja.AssertFunction(obj); isfunc { results[0] += "(" } else { results[0] += "." diff --git a/internal/jsre/completion_test.go b/internal/jsre/completion_test.go index ccbd73dc..953bc502 100644 --- a/internal/jsre/completion_test.go +++ b/internal/jsre/completion_test.go @@ -39,6 +39,10 @@ func TestCompleteKeywords(t *testing.T) { input string want []string }{ + { + input: "St", + want: []string{"String"}, + }, { input: "x", want: []string{"x."}, @@ -68,6 +72,7 @@ func TestCompleteKeywords(t *testing.T) { { input: "x.gazonk.", want: []string{ + "x.gazonk.__proto__", "x.gazonk.constructor", "x.gazonk.hasOwnProperty", "x.gazonk.isPrototypeOf", diff --git a/internal/jsre/deps/bignumber.js b/internal/jsre/deps/bignumber.js index 17c8851e..aadb182a 100644 --- a/internal/jsre/deps/bignumber.js +++ b/internal/jsre/deps/bignumber.js @@ -1,4 +1,4 @@ /* bignumber.js v2.0.3 https://github.com/MikeMcl/bignumber.js/LICENCE */ /* modified by zelig to fix https://github.com/robertkrimen/otto#regular-expression-incompatibility */ !function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do p=0,l=n(L,O,_,S),0>l?(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1?(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length,l=n(d,O,w,S),1==l&&(p--,r(d,w>_?x:L,w,f))):(0==p&&(l=p=1),d=L.slice()),w=d.length,S>w&&d.unshift(0),r(O,d,S,f),-1==l&&(S=O.length,l=n(L,O,_,S),1>l&&(p++,r(O,S>_?x:L,S,f))),S=O.length):0===l&&(p++,O=[0]),b[h++]=p,l&&O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1);while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+([\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"$1");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=doc/bignumber.js.map + diff --git a/internal/jsre/deps/bindata.go b/internal/jsre/deps/bindata.go deleted file mode 100644 index 7454c7cf..00000000 --- a/internal/jsre/deps/bindata.go +++ /dev/null @@ -1,254 +0,0 @@ -// Code generated by go-bindata. DO NOT EDIT. -// sources: -// bignumber.js -// web3.js - -package deps - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" -) - -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) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - clErr := gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - if clErr != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -type asset struct { - bytes []byte - info os.FileInfo -} - -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 -} - -var _bignumberJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xbc\x6b\x77\x9b\xc8\x93\x38\xfc\x7e\x3f\x85\xc4\xc6\x9c\x6e\x53\x20\x90\x9d\x38\x86\x14\x9c\x4c\x62\xe7\xe7\x79\x1c\x3b\x4f\x9c\xcc\xcc\xae\xa2\xc9\x91\x51\x23\x75\x82\x40\xe1\x62\xc7\x09\xfe\x7d\xf6\xff\xa9\x6e\x40\xf2\x25\xbb\xb3\x6f\x2c\xe8\x4b\x75\x75\x75\xdd\xbb\xf0\x68\x77\x70\x29\x17\x59\xbd\xba\x14\x85\xf3\xa5\x1c\x5c\x8d\x1d\xd7\xd9\x1b\x2c\xab\x6a\x5d\xfa\xa3\xd1\x42\x56\xcb\xfa\xd2\x89\xf3\xd5\xe8\xad\xfc\x2a\xde\xc6\xe9\x68\x7b\xf8\xe8\xf4\xe4\xd5\xd1\xd9\xab\xa3\xc1\xee\xe8\x3f\x46\xbb\x83\x55\x3e\x97\x89\x14\xf3\xc1\xe5\xcd\xe0\x87\x48\xe5\x62\x50\xe5\x83\x44\x7e\x7f\x0c\x5c\x91\x5f\x8a\xa2\xfa\x5a\xc8\x95\xc8\x46\x79\x55\xe5\xff\x59\x88\x45\x9d\xce\x0a\x5b\x7c\x5f\x17\xa2\x2c\x65\x9e\xd9\x32\x8b\xf3\xd5\x7a\x56\xc9\x4b\x99\xca\xea\x86\x96\x19\x26\x75\x16\x57\x32\xcf\x98\xe0\x3f\x8d\xba\x14\x83\xb2\x2a\x64\x5c\x19\x41\xd7\x31\x50\x5d\xfd\xdb\x8c\x09\xc8\xf8\xcf\xab\x59\x31\xa8\xa0\x00\x09\x39\xd4\x50\x42\x82\xd5\x52\x96\x81\x4c\xd8\x90\x25\x03\x99\x95\xd5\x2c\x8b\x45\x9e\x0c\x66\x9c\x17\xa2\xaa\x8b\x6c\xf0\xc5\x34\x4f\xd9\xf8\x19\x18\x71\x9e\x95\x55\x51\xc7\x55\x5e\x0c\xe2\x59\x9a\x0e\xae\x65\xb5\xcc\xeb\x6a\x90\x89\x6b\x03\x04\x87\x4c\x5c\xb7\xeb\x10\xc0\xac\x4e\xd3\x21\x66\xa6\xf9\x2f\x96\xc1\x18\x9e\xed\xc3\x5b\x30\x2e\x67\xa5\x30\x38\xff\x49\xfd\xe8\x36\x19\x94\x28\x2c\xc3\x00\xcf\x45\xcc\xba\x15\x13\x6c\x21\xdd\x41\x28\x12\x7e\xc9\xe1\x23\x4b\xe0\x9d\x95\x38\xc2\xf2\xe0\xab\x5a\x87\xe5\x68\xe8\xa3\x30\x10\xab\x9b\x35\x0d\x16\xdc\x34\xdd\x5d\x31\x44\xb7\x69\x86\x04\xec\xbd\x58\x1c\x7d\x5f\x33\xe3\x6f\x3b\x32\x2c\x56\xa1\x31\x31\xac\x73\xa7\x4c\x65\x2c\x98\x0b\x19\xb7\x8c\xa9\x65\x70\xcb\x60\x91\xff\xe9\x93\x63\x58\x95\x65\xf0\xe8\x89\x01\x7b\x07\x61\x16\x19\xd2\xf0\x0d\x83\x3b\x95\x28\x2b\x56\xf6\x84\x59\xb0\x04\x4a\xc8\x69\xbb\x79\xc4\x12\xa7\x44\x37\xf4\x46\x22\x62\x25\x96\x2d\x68\x8f\x83\xed\x71\xdf\x83\x2f\xa6\x59\x3a\x85\x58\xa7\xb3\x58\xb0\xd1\xdf\xee\x27\xc7\xdd\x6d\x3e\x39\x23\x20\xb8\xa9\xc8\x16\xd5\x32\xf4\x9e\x12\xa5\xdf\xc2\x25\xd1\x32\xc7\xa1\xc7\x7d\x02\xba\xff\x14\x11\x4b\x27\x5e\xce\x8a\x57\xf9\x5c\xbc\xac\x98\xcb\x1f\x5d\xa3\xc4\xd7\xac\x04\xcf\x85\x0c\x12\xa7\xe4\xb7\x22\x2d\x05\x11\xfa\x2e\x19\x7b\x22\x3b\x25\x0a\xa7\x84\xc4\x11\x28\x1c\x01\x89\x13\x23\xa3\xc7\x98\x47\xa2\x05\xcd\x7d\x01\x57\xb9\x9c\xb3\xb7\xe8\xfe\x6f\xb4\x46\x74\xd5\xb1\x6e\xd1\x41\xa0\x2d\x5a\xdc\x04\x22\xfe\xfb\xdf\xc4\x90\x79\xc1\x0a\x74\x41\xa2\x08\x64\x88\x9e\x1b\xc8\x11\x7a\x2e\x14\x96\xc5\x83\x1e\x35\x81\x85\x42\x68\x22\xa6\x1b\x04\x6e\x35\xaf\xf4\xfb\x1a\xae\xdb\x13\x51\xcd\xf7\x8f\x85\x07\xff\x17\xe2\xdd\xde\x12\x62\xac\xc0\xd2\x91\xd9\x5c\x7c\x3f\x4f\x98\xe1\x18\x9c\x87\xb6\x67\x9a\x6a\x7c\x77\x78\x86\x63\xd0\xa1\x71\x60\x92\xa0\x88\x59\x11\x2f\xd9\x48\x8c\x24\xe7\xa1\x1b\x31\x37\x2c\x4c\x93\x15\x28\x39\x14\x16\x5a\xdd\x3a\xd2\xf2\x38\xa8\x65\xeb\x4b\x92\xd4\x6c\xc1\x5c\x90\x9c\xfb\xdd\xf8\xb2\xe5\x02\x0e\x12\xdd\x60\xff\xf9\x7d\xb4\x25\x0f\x24\x91\x88\xd0\xac\xfb\xd1\x8f\x0c\xb4\xed\x9a\x07\xea\xb0\x36\xbb\x94\x50\x5b\x1e\xe7\x32\xd9\x9a\x0a\xb9\x69\x7e\x31\xcd\x7a\x8b\xed\x12\xa7\xdc\x15\x1c\x0a\x2c\x6c\x69\x7b\x50\x84\x3f\x38\x1d\x02\x1d\x07\x09\x73\x40\x84\x1f\xc8\x84\xbd\x09\x0b\xd5\x31\xa1\x1e\x77\x1a\x74\x07\xb2\x75\x6e\x53\x90\xc8\x0a\xcb\xe3\x3b\x37\xa0\xb7\x28\x2d\xbc\xe1\x50\x87\x52\xf3\x80\x34\xcd\xc4\x89\x9d\x75\x5d\x2e\x59\x4f\x25\x45\x12\xa8\x6d\xbc\x09\xea\x50\x06\xfc\xe1\x08\x09\x0a\x0e\x0f\xb6\x36\x47\x24\xbb\xb1\xbb\x7d\xdd\x6a\x2c\x6d\xac\x15\xad\x02\x69\xdb\x41\x69\xa1\xe1\x1a\xc4\x11\x3d\x3c\x2d\x1e\x83\xed\x6d\xbc\x45\xf7\xb6\xd7\x97\xaf\x49\x8f\x41\x05\x52\xeb\x4c\xd2\x96\x09\xc4\xb0\x84\x05\xac\x61\x8e\xe2\x0e\x9b\xc0\x0a\xdf\xc1\x35\x7e\x55\x2b\xee\x1d\x84\x95\x69\x2a\x51\xaa\xf2\xd3\xfc\x5a\x14\xaf\x66\xa5\x60\x9c\xc3\x3c\x44\xd7\x34\x59\x82\xbf\xc3\xef\xe8\x02\x8d\xb8\xc7\x55\xb0\x6e\x55\x5f\xc5\x61\x89\x6b\x67\x9d\x5f\x33\xd1\x6e\xcc\x9e\x73\xf8\x1d\x13\x58\x3b\x31\x96\x2c\x65\x05\x5b\x3a\x31\x87\xa5\x23\xb8\x12\x7a\x0e\x6b\x47\xe0\xda\x89\x7b\x4e\x5a\x60\xc9\x04\x54\xd4\x55\x63\x82\x8b\x8e\x69\x5c\xc4\xc5\xc4\xb6\x93\x69\xb0\x70\xd6\xf9\x9a\x71\xc5\x2e\xc3\xc5\xc4\x9d\xb6\x42\x64\xb8\x06\x35\xb9\xe1\x3c\xb2\xed\xda\xa7\x95\x70\x41\x4b\x61\x0d\x4b\xa7\x44\x09\x4b\x7c\xc5\x96\xb0\x86\x15\x5c\x13\xfc\x05\x2e\x9d\x18\x62\x5c\x3a\x05\xd4\xa8\x70\xca\xb1\xb6\x56\x96\x07\x73\x5c\x4c\xf2\x29\x24\x98\x8d\xc6\x10\x63\xdc\x34\x6e\x98\x37\x8d\x36\x0f\x8b\x49\x6e\x79\x53\x88\x71\x3f\xbc\x8e\x5a\x93\x31\x6f\x9a\x98\x9b\x26\x73\x11\xaf\x9b\xe6\x1a\x91\x2d\x9d\xf2\x85\x1b\xed\xf9\x63\xce\xfd\x79\x98\x34\xcd\x1c\x31\x31\x4d\xb6\xaf\x46\xc4\x4d\xf3\x0c\xf1\xda\x34\x3d\x73\x31\xc9\x6d\x6f\xba\x3d\xe9\xb9\x7f\xc0\x39\x78\xb4\xa2\xde\xa0\xc0\x38\x4a\x99\xe1\x19\x60\xaf\xb8\x4f\x1b\xed\xd8\xb7\xa3\x0f\xe6\x10\x73\x3a\x49\xdb\xce\x02\xcb\x22\x52\xe5\xd3\x30\x0b\x38\xed\x03\x5d\xc8\x9b\x86\x59\x56\x0d\x0b\xa7\xce\xca\xa5\x4c\x2a\xe6\x71\x2d\x98\x5b\x34\x1e\xb6\x14\xd6\x1d\x73\x75\xdc\x86\x11\x24\x21\xce\x03\x61\xe1\xb9\x12\xd9\x97\x15\x5b\x4c\xe6\x96\x35\xe5\x3c\x10\x98\x32\x01\x35\xbf\x6d\xd5\x98\xd8\xf0\xe2\xe7\x87\xbc\x58\x12\x2f\xd2\x11\x55\xa8\x89\x56\x91\x9d\xad\xc0\x85\xe7\x20\xe1\x8a\x47\x6e\x53\xf9\x5f\x61\x48\xea\xbc\x03\xe8\x54\xf9\x85\x56\x3d\xea\xbc\x73\xd2\xf5\x13\x77\x4a\x26\xd8\x11\x40\x60\xc8\x06\x2f\xb1\x60\x42\x31\x16\x7a\x87\x88\xb2\x69\xc6\xfb\x88\xd2\x34\x7f\x0b\xb1\x8c\x12\xb6\x84\x92\xfb\xa9\xfa\xe9\x15\x82\xc0\x8f\xac\x35\xd9\x9c\x30\x25\x7e\x23\x98\x3d\x2c\x62\x8c\x56\xed\xdc\x05\xca\xea\x10\xb3\xa6\xf9\x2d\xc4\x9a\x6b\xc5\x10\x64\x61\x1c\x2c\x95\xc0\x42\x4c\x1a\x6f\x89\xb4\x68\xdd\x0a\x2c\x39\x0e\x36\x96\xb0\xc4\x54\xb5\x92\x66\x0b\x63\x65\x79\x6c\x3b\x0b\x5d\x75\x70\x34\xdd\x31\x82\xcc\xb6\x5b\x48\x3c\xd8\xcc\xb6\xb0\xb6\x63\xe8\x86\xd6\x96\x87\x18\x9b\x66\x3b\x87\xdf\x99\xd4\x53\xae\x7c\xe1\x9a\x66\x1e\x19\xb6\x61\x2d\xfd\xe5\xe6\x64\xbe\xdf\xf3\xaa\xd0\xd5\x0a\x9a\x09\x62\x35\xad\x05\xe8\x09\xaa\xce\xa5\xa1\xb7\xc0\xb2\xe4\x8b\x4e\xac\x03\x85\x7b\xd1\xf7\xcb\x29\x87\x61\xe1\x94\xfc\x67\x85\x45\x70\x59\x88\xd9\xd7\xdb\xcc\x21\x7f\x8b\x55\x50\x10\xcc\x0a\x8b\x9e\x4b\xaa\x0d\x2e\xc7\x2d\x97\x14\xc4\x27\xba\x9b\x65\xa1\x68\x1a\x11\x56\x4d\x23\x86\x18\x33\xc1\x39\xe9\xfa\x02\x98\x6c\x1a\x63\x2e\x62\xb9\x9a\xa5\x03\xa5\x81\x4a\x83\x5b\xfd\xf0\xc8\x18\x90\x5f\x97\x27\x83\x62\x96\x2d\x84\xe1\x1b\x83\x2c\xaf\x06\xb3\x6c\x20\xb3\x4a\x2c\x44\x61\x70\xf2\x51\x86\x5b\xfa\xf2\x44\xaf\xae\xcf\x90\xe8\x51\xa0\x07\x12\xb3\x5e\x1e\xb2\x89\x6d\xcb\x69\x90\x75\x1a\x47\x19\x01\xcc\x26\xee\xf4\x57\x7e\x00\x6d\xd4\xaa\x76\x6f\x6c\x8f\x87\x3f\x22\xe1\xc4\xc4\x53\x8a\xdd\xfd\x37\x61\xa5\x1a\x26\x42\xa9\x6e\x9f\xd1\x6f\x05\xd4\x94\x71\xd8\x12\x9d\xd3\x0e\x2d\x8d\x12\x11\xf9\xa8\x28\xf2\x82\x4d\x0c\x7a\xfe\x4d\x2e\xce\xb4\x3b\x03\x46\xbc\x5a\x1b\xca\xc9\x4d\xe4\xc2\x00\x63\x2e\xaf\xf4\xdf\x0f\xf9\x49\x56\x19\x60\x88\x6f\x06\x18\x8b\x4a\xfd\x11\x06\x18\x69\xa5\xfe\xd0\xe3\x4a\x66\x75\x49\xbf\xf9\xdc\x00\x63\x9d\xaa\x97\x75\x21\x62\x49\xfe\xbb\x01\x46\x31\xcb\xe6\xf9\x8a\x1e\xf2\x3a\xa3\x31\x4a\x6f\x18\x60\x54\x72\x25\x68\x70\x95\xbf\x96\x0b\x59\xe9\xc7\xa3\xef\xeb\x3c\x13\x59\x25\x67\xa9\x7a\x3f\x96\xdf\xc5\x5c\x3f\xe5\xc5\x6a\x56\xe9\xc7\x62\xa6\xb6\x48\x2b\xe5\xd7\xaa\xe9\xdd\xd6\x8a\x9d\xac\x1b\x60\x6c\x36\x39\x9d\x88\xa9\x65\x30\x3e\x30\xac\xcc\x32\xfc\x81\x61\x55\x3c\xa8\x96\x45\x7e\x3d\x28\x9c\x6c\xb6\x12\xb8\x19\xac\xe9\x64\xc0\x5b\x74\xa1\xd8\x10\xf4\x63\xc7\x65\x9a\xa4\x7d\x1c\x01\x29\xc4\x30\x23\x95\x02\x4b\x7c\x4f\xfa\x65\xc6\x7f\x0a\x5f\xdb\x7a\x24\xe7\x74\x46\x47\x5d\xaa\xa3\x2e\xd5\x51\x2b\x7f\x46\x29\xa2\xcc\x96\xe0\x86\x39\xcf\x2d\xbc\x81\x1a\x33\x48\x70\x36\x49\xd1\x25\xc3\x90\x8c\x96\x13\x69\xd7\xb6\x37\xdd\xf1\xdc\xc6\xed\x75\x4e\x8a\x73\xc6\x72\xcb\xe3\xa3\x1b\x0e\x69\x88\xb3\xce\xec\x29\xd7\xb0\xe0\x4a\x72\x06\x42\x3b\x01\x5d\xe7\x0b\x4c\x83\x99\x76\x01\x5c\xe2\x41\x8c\x95\x2b\xea\x41\xbe\xa3\x56\xce\xed\x1b\xcb\xd3\x0e\xa6\xd6\xe7\x84\x76\x4a\xce\x8c\xf7\x10\xf5\xad\x39\x12\x62\x74\xc3\x3a\x72\xfd\x7b\xe8\xde\x2a\xd9\x2e\xc8\xe6\x65\x9d\xcd\x9b\x4d\x52\x8b\x8c\x14\xa3\x19\x89\x9f\xec\x74\x33\xc8\xf5\xda\x0f\xab\x88\xc5\x4d\x53\xb4\x16\xb0\x6a\x9a\x0a\x91\x89\x2d\x0b\x18\x87\x4f\x9b\xe6\xa9\xd6\x5a\xfb\x6a\x44\xa1\x2c\x20\x79\x1d\x79\xe8\x46\x75\xe8\x46\x2d\x1a\x53\xdf\xf5\x67\x93\x94\x60\xef\x78\xae\xe9\x6d\x03\xeb\x2c\x63\xd6\x34\xc3\xd9\xc6\xf4\x0f\x3a\x5a\xd1\xb9\x47\xa4\x6c\x85\x0a\xb6\x68\x08\x2e\x27\xd9\xce\xcd\x14\x48\xda\xec\xac\x69\x5c\xee\xab\x66\x25\x85\x20\x94\xcb\x80\x98\x47\xac\x87\x91\x42\x89\x1e\xa4\xb6\xcd\xfd\xad\x46\x8b\xf8\x61\x39\xb9\xb1\xf3\x29\x10\x7d\x91\x50\x5e\xb1\x0e\xe9\x9d\xe5\xa4\x9e\xf2\xdd\xd2\x77\x39\x14\x4a\x4b\x07\x5a\x4b\xba\x88\xa9\xd6\x30\x39\x7a\x50\x6b\x96\xaa\xd5\xb9\xd4\xea\x5c\xf2\x8d\x8b\x4c\x7d\x16\x96\xb4\xfe\x9d\x21\xa5\x3a\xba\x21\x96\xa4\x9d\x1d\x61\x59\x7a\x67\x78\x66\x9a\x4c\x3d\x91\x31\xd7\x6a\x97\x98\x78\x92\x2a\x28\xf4\x3b\xc4\x33\xcd\x55\x01\x91\xd4\x26\x57\xa0\x44\xef\x56\xa3\x33\xdb\x72\xae\x70\xa6\x5c\x06\xe2\x34\xad\xeb\x6e\x85\x23\xee\xab\x30\xe1\x88\x17\x6f\x14\x0e\xbd\x1a\xdb\xb2\xfd\x24\x5b\xaf\x94\xec\x7d\xc0\x99\xb3\x2e\xf2\x2a\xa7\x70\x0b\xbe\xb5\x76\xc2\xe3\xf0\x0e\xc7\x2e\x7c\xc5\x7d\xf8\x0d\xed\x03\x78\x82\x63\x0f\xde\xa0\xed\x89\x03\xf8\x81\xf4\xf7\x0b\x0e\x5d\xf8\x17\x1e\xc3\x1f\x38\xf4\xe0\x4f\xf4\xe0\x77\xf4\x5c\x17\xfe\xc2\x9f\xad\xe6\xbf\x10\xeb\x59\x31\xab\xf2\xc2\x27\xf7\x73\x51\xe4\xf5\x7a\xab\x09\xba\x26\xf9\x43\xf8\x7b\x50\x8a\x38\xcf\xe6\xb3\xe2\xe6\x4d\xdf\xe8\x42\xd2\x2a\xa1\x37\xf7\xe6\x0e\x8c\x7b\x5d\x6a\xf8\x6d\xd0\xb3\xd8\x2c\xcb\xab\xa5\x28\x30\x83\x99\xf3\xfe\xfc\xe3\xd9\xeb\xcf\x1f\xdf\xa1\xdb\xbf\xbc\x3e\xff\xf3\x0c\xbd\xfe\xf5\xd5\xd1\xc9\x29\x8e\xfb\xd7\xe3\xd3\xf3\xf3\xf7\xb8\xd7\xbf\xff\xeb\xe5\xe9\x31\xcd\xdf\xbf\xdb\xa2\x80\x3c\xbd\xdb\x76\xf4\xc7\xd1\x19\x3e\xbb\xdb\xa6\xa0\x1f\xdc\x6d\xd3\x4b\x3c\x87\x99\x73\xf4\xf1\xd5\xe9\xc9\x6b\x3c\x84\x99\xa3\x6d\x03\xf6\xa9\x17\xad\x02\x95\x3e\x24\x61\xc1\x9f\xb7\x20\x71\x56\x2c\xea\x95\xc8\x2a\xe2\x3c\x49\xee\x55\x42\xac\x66\xe4\x97\x5f\x44\x5c\x6d\xa2\xe6\x32\xda\x02\xd3\x92\xa5\x74\x96\xb3\xf2\xfc\x3a\x7b\x57\xe4\x6b\x51\x54\x37\x2c\xe3\x91\x56\x19\x4c\x60\x39\xc9\xa6\xdc\xa7\x60\x78\xe0\xde\xfa\x0f\x27\xcb\x2e\x8d\x50\x6d\xe6\xc8\x49\x45\xce\x65\x37\xab\x8f\xaf\x59\x86\xc6\xeb\xa3\x57\x27\x6f\x5f\x9e\x7e\x7e\x77\xfa\xf2\xd5\xd1\x85\xc1\xc9\x7f\x14\xe0\xc2\x11\x8c\x21\x23\xe5\xf3\x0e\xdd\x86\xa2\xc1\x49\x36\xc5\x77\xa0\xe6\x28\x02\x9d\x9c\xbd\xf9\xfc\xf6\xfc\xf5\xd1\x66\xca\xf3\x6e\xca\xd7\xad\x29\x5f\xf5\x94\xa3\xbf\xde\x9d\x9f\x1d\x9d\x7d\x38\x79\x79\xfa\xf9\xe5\x07\x9a\x43\xde\x11\x8f\xfe\xa5\x5c\x21\xb0\x8f\xc0\x6d\x67\x53\x8b\x37\xdd\xc6\xe0\x37\x02\x47\xa3\x9e\xa8\x07\x6f\xca\x7d\x5a\xd0\x3e\xda\x1e\x62\x33\xea\x65\x6e\x28\x22\x5b\xf8\x82\x73\xde\x22\x30\xf9\x0d\x9e\x4c\x5b\xbc\x5f\x9e\xbd\x39\x7a\x6c\x6d\xdb\xbb\xbb\xb8\xb7\x81\xfc\xa6\x5b\xfc\xc7\x2f\x17\x77\x1b\x11\xbd\x41\x9b\xfd\xb8\x8b\x80\xaf\x33\x66\x90\x59\xc6\x20\x9e\x65\xe4\x39\x5d\x8a\xc1\x0f\x51\xe4\x06\x88\x0d\x7a\x6f\xe0\x47\x8b\xde\xd1\xfb\xf7\xe7\xef\xd5\x11\x30\x81\x88\xc3\xa1\x68\x1a\x0f\x11\x45\xd3\x90\x36\x11\x11\x23\x45\xf0\x2f\x64\x5f\xa8\x8f\x47\xc7\x7e\xbe\xb5\xc8\x35\x01\xd5\x30\xbf\x68\x78\xaf\xde\xff\xd7\xbb\x0f\xe7\xff\x13\xbc\x3f\x70\xc8\xa8\x75\xb8\x6c\x9a\x8e\x35\x87\x1d\x6b\x2e\x39\x08\xd3\x1c\xfe\xa1\xf2\x03\xb4\x86\x11\x17\x37\xeb\x2a\x1f\xd4\xd9\xec\x6a\x26\xd3\xd9\x65\x2a\x0c\x58\xf2\xc7\x71\xf8\x43\xe3\xf0\xf6\xfc\xf5\xc7\xd3\xf3\x7b\x8c\x72\xd8\x51\xee\xcf\x2d\x46\xf9\x53\x4f\x78\x77\xfe\xe7\xe7\x77\xef\x8f\x5e\x9d\x5c\x9c\x9c\x9f\x3d\xc2\x8e\xbf\x6f\x4d\xf9\x5d\x4f\x39\x3e\x7f\xff\xb6\xe5\xa9\x07\xf2\x25\xa2\xbf\x50\x6c\x9f\x44\xeb\xc0\xb6\xe3\x36\xf8\xfe\x05\xc5\x2d\xcc\x9c\xd5\xec\x3b\x3e\x14\xaa\xef\x6c\x23\xce\x1f\x9c\xb4\xe2\x6a\xa8\xcc\xfe\xd7\xa1\x0b\x3d\x54\xfb\x7d\x0f\x34\x06\x1e\xba\xee\x81\x77\x78\x38\x7e\xba\x7f\xb0\xef\x1e\x1e\x8e\x21\xc3\xb7\xb3\x6a\xd9\x8e\x67\x7c\x57\x98\x63\xf7\xf0\xc0\x7b\xea\x3d\xa2\x26\x56\xec\xde\x58\xfe\x98\x3e\x78\xbe\xf7\xfc\xf9\x33\xf7\xf9\x2e\xf3\xdc\x83\xbd\x83\x7d\xef\xf9\x78\x7f\xf7\xce\xbc\xc6\xe5\x16\xeb\x46\xdd\xef\xd9\xe8\x8a\xad\x3c\xf3\xbd\xe4\x31\xba\x90\xe0\x64\x0a\x69\x6b\x93\xbe\x29\x6f\x4e\xb4\x01\xa9\xd8\x9c\xa0\xb7\x4f\xf1\xa8\xf0\xdf\x41\x8e\x73\x26\xc8\x61\xfb\x83\xcb\x84\x2d\x4d\x73\xe9\x2c\x44\xf5\x5e\xad\xfb\xc7\x2c\xad\x45\xa9\xcd\x7b\x85\x0f\x3a\x54\x80\xf9\x51\x66\xd5\xde\xf8\x65\x51\xcc\x6e\x58\xbe\x8b\x63\xce\x83\x3c\x2c\x03\x5e\xa3\xb7\xe7\xb9\x07\xe3\xdd\x6a\x52\x4e\x2d\x56\x4d\x4a\xcb\x9b\x86\x61\xe8\x79\x1c\xea\x10\x0f\x85\xf7\x34\x62\xc5\x3f\x00\x3a\xe6\x1c\x08\x06\x16\x24\xfa\x1a\x0e\x16\x4a\xfa\x59\xa2\x1d\xc7\x7a\xc7\x13\xde\x3e\x87\xd2\xc2\x31\x0f\x4a\xcc\x47\xe3\x3e\xb8\x54\x3b\xd2\x64\xfc\xed\xa6\xda\xde\xcd\x56\x23\x61\x7e\xd0\x23\x3e\x7e\xee\xed\x1f\xec\x1f\x1e\x3c\x3b\xf0\xdc\x67\x4f\x9f\xed\xb2\x3d\xcf\x24\x0c\xb8\xe5\xb9\x87\x87\x4f\x3d\xef\xd9\xf8\xe0\xe0\xe0\xd9\xae\xc6\xc5\xda\x1f\x1f\xee\x1f\x3e\x3b\x18\x1f\xea\x96\xf1\xd4\xf2\x9e\x1d\x1c\x1c\x8c\x3d\xfd\xbe\xd7\xee\x7e\x7f\xfa\xe2\x85\xf7\x8c\xeb\x97\xa7\xd3\x17\x2f\x9e\x73\x8b\x1e\x9f\x4d\x7b\x7a\xdc\xc5\xe9\x80\x3b\x71\xbe\xbe\x61\x15\x85\xf7\x8f\x6c\xf5\x40\x6f\xf5\x40\x6f\x55\xc9\x95\xb7\xff\x2b\xcd\xa0\xd2\x49\xa5\xf6\xdc\xda\x6d\x66\x8c\x03\x2d\x1b\xd6\xa6\xc9\x92\x49\x69\x59\x53\x6c\xc1\x07\xda\x83\x4a\x26\xb6\x5d\x4e\x41\x90\x57\x9d\x9b\xa6\x20\x6d\x8d\xef\x27\x37\xb6\x98\x42\x42\x47\xb2\x62\xf9\xa8\xe6\xbb\x35\x57\x3e\x16\x35\x05\x89\xf6\xb0\xa0\xb4\x6d\xae\x13\x56\x25\x4f\x70\x22\xfb\xac\xa4\x0e\x3f\x6c\xaf\x9d\xe2\xd2\x14\x9d\xb3\xe1\x20\x6d\xbc\xd1\x8b\x97\xca\x9b\x4c\xee\x7b\x93\xca\x55\xbc\x09\xc9\x53\xa4\xb1\x76\xd9\x3b\x68\xa9\x23\x50\x42\xea\xc4\x98\x40\x7a\x7b\xcb\x38\xbc\xda\x16\xf2\x3e\x5a\x12\x77\xc2\xcf\x3b\x82\xd3\xc5\xff\x24\x3e\x3b\x2f\x21\xc6\x6c\xf4\xb2\xd1\xe9\x03\x81\x7d\x02\x3e\x48\x6c\x3b\xe0\x39\x8a\x49\x32\xdd\x79\x09\xb5\x7a\xa0\x81\x50\x60\xbc\x9b\x5b\xf5\x6e\x0a\x12\xd3\xdd\xdc\x2a\x76\x5e\xee\xbe\xb4\xc8\xeb\x60\x72\x54\x29\xe1\x2e\x68\x20\xb7\xe2\xdd\x1a\x68\x1a\xca\x9d\xaa\x13\xeb\xd2\x34\x45\x9f\xbe\x2a\xef\x84\xcc\xd9\x83\x08\x4f\xe5\x99\x86\x58\xf0\x1c\xab\xb0\x88\x3c\xdf\xf6\x74\x18\xa6\xa9\x9b\xa3\x1b\x54\xa1\x54\xf9\x69\x52\x00\x13\x39\x1d\x62\x36\x91\x53\xfe\x93\x10\x97\xd3\x90\x5e\xf4\x34\xed\x58\xb7\x48\xe4\x9b\x45\x8b\xcd\xa2\x5d\x02\x41\x12\x58\xda\xbd\x98\x54\x53\x1b\x25\x48\xa4\xa7\x17\xd9\xa4\x22\x60\x2e\xd0\x1b\xca\xdd\xc2\x52\x03\xa8\x59\x07\x7b\x43\x32\xdb\xb4\xbf\xee\x5e\x25\x10\xdd\x99\xf3\xe0\xf6\xbe\x5e\xeb\x23\x58\xbd\xdd\x74\x93\xe4\x85\x6b\xb8\x82\x4b\x38\x87\x0b\x78\x0f\x2f\xe1\x08\x5e\xc3\x67\xf8\x0e\xc7\x28\x9d\x12\x31\x77\x4a\xb5\x25\x38\x41\xe9\xc4\x70\x8a\xb9\x13\xeb\x7b\xb4\x13\xd3\x3c\x51\x18\x9c\x9a\xe6\x29\x05\x56\x5d\x64\xa5\xd5\xa4\x74\x4a\xd3\xcc\xe9\x0f\x3b\x89\x86\xa7\x4d\x43\x83\x87\x48\x23\xfd\x53\x1e\x9d\x98\xa6\x8b\x48\x6d\x4d\x33\x3c\x8d\xdc\xdd\x63\xff\x78\xe4\xfa\xee\xc8\xd5\xbc\x7a\xd5\x6a\xdb\x63\x0e\x97\x78\xa5\x73\xed\x31\x4a\x47\xd8\xb9\x23\xe0\x18\x6b\x2b\xb6\x3c\x48\x9a\x86\x25\x78\x06\x31\x56\x4c\x3a\xa4\x72\xed\x8a\xe5\xea\x01\x8e\xf1\x78\x74\xd3\xb8\x1c\x96\xe8\x06\xa7\x93\xe5\x14\x91\x9d\x4c\x96\x53\x8a\xe7\x82\x65\x1b\x94\x53\x7b\xd8\x37\x9b\x66\x6c\xdb\xe0\x86\xc7\xfc\x52\x6b\x06\x8f\xc3\x02\x87\xee\x46\xc8\x8e\xf0\xa4\x63\xe8\xcf\x78\xda\x3d\x52\x10\x79\x6c\xe1\x18\xd6\x48\xe1\x1d\xa3\x4d\x5a\x1e\xe7\xb0\x0e\x3d\xd3\x64\xa7\x28\xd8\x29\xac\x21\xe1\x70\x82\x82\x9d\xe8\xc7\xad\xf9\x1b\xa8\x1c\x5e\xe2\x67\x38\xc7\x93\xfe\xaa\xe0\x33\x87\x0b\x3c\xef\xc2\xae\xcf\xe1\x45\x70\x3e\xb9\x20\xb5\xe2\xf2\xe0\x3b\x9e\x76\x12\x04\xdf\x7b\x3e\x77\x39\xbc\x56\x74\x86\xd3\x89\x37\x0d\x31\x19\x8d\x4d\xf3\xb5\x65\x05\xf3\x7c\xb0\x46\x97\x24\x91\x9d\xc2\x39\x7c\x86\x0b\x0e\x6e\x98\x46\xec\x3d\x9e\xd3\xf0\xcf\x43\xbc\x30\x4d\xf6\x1e\xdf\xef\x26\x16\x3b\x9f\x78\x8a\x28\x5c\xed\xea\xfd\xe8\xb5\xda\x4e\xc4\xd6\xa1\x4a\x4a\xaf\x31\xb1\x3d\x0e\xf3\xcd\xde\xae\x71\xde\x6d\x68\x83\xb1\x5a\x6d\x0e\xe7\x70\x4d\xab\x79\x88\x29\xcd\xb5\x6d\x28\xd8\x1c\xae\xc3\xcf\xd1\x77\xff\x14\xae\x21\xe1\x9c\xfb\x14\xf8\xae\x4d\x93\xa5\xb8\x46\x05\xba\xdf\xdd\x5d\xe0\xe1\xb5\x69\xce\xb7\xb7\x5b\xb0\x73\x98\xc3\x05\x21\x61\xb7\x4b\xdc\xc3\xa0\xdf\xaf\x17\x2a\x04\x2c\x4b\x4d\xba\x68\x11\xb8\x50\x08\x6c\xa1\xcd\x7d\xd2\xa4\xdd\xd0\x73\x54\xd9\xcd\xcb\xc9\x92\x08\xbf\x86\xd4\x34\x89\x60\x51\x7b\x12\x27\x93\x97\x44\x29\x9f\x9d\xe3\x84\x9e\xa7\x70\x81\x1e\x0f\xae\x97\x32\x15\x8c\xbd\xb4\xac\x17\x47\x5d\x52\xe4\x5c\x27\x4c\x8f\x49\x91\x2f\x70\xd3\x06\x97\x4a\x12\x2e\x3b\x09\xa6\xa0\x3c\x41\x3c\xd3\x7a\x62\x89\x1e\x1c\x23\x0d\x09\x8e\x95\xe2\x3e\x56\x8a\x5b\x31\xf1\x47\x76\x05\xb5\xc5\xae\x1c\x81\x4b\x2b\x56\x69\x44\xcb\x83\x12\x16\x6d\x26\x99\x3a\x62\xb8\x72\x0a\xb4\x16\x9d\x5a\xbc\x52\xba\xfc\x61\x88\x87\xa3\xbf\x99\x1d\x71\x97\x4d\xbe\x5f\xe6\x53\xce\x3e\x5d\x4f\x3e\x5d\x3b\xd3\xdd\x27\x7c\x24\x21\xa3\xde\xc9\xdf\xce\xd4\xe2\x9f\x9c\x27\x23\xa8\x70\xf4\xf7\x27\xa7\x6d\x79\x32\x82\x02\x47\x7f\xdb\x11\x3b\xc9\x12\x99\xc9\xea\xa6\x39\x9b\x9d\x51\xb3\xa4\x61\xe5\xee\x27\x8b\x29\x58\xbc\xf9\xfb\x53\x69\x35\x9f\x4a\xeb\xc9\x68\xf1\xc0\xfb\xba\xaf\xa3\xb0\x8c\x6a\xbf\xee\xaf\x8f\x24\x18\x4f\x3c\x43\x09\x6e\xa1\x2f\x45\x63\xce\x73\xa7\x44\x59\x9e\xcd\xce\x58\xac\xe3\x48\xdf\x0d\xe3\xc8\xf6\x7c\xaf\xbf\xf2\x18\x92\x16\x8a\x31\xee\x01\x09\xd8\x38\x7c\xda\x72\x75\x16\x0f\x8d\xef\x06\x22\xab\xb0\xba\x77\xad\x15\x79\xcf\x7c\xe3\x92\x3c\xef\x68\xec\x3f\x87\xc4\x34\x93\x21\xa6\x91\xf0\xb3\x5b\x4e\x6f\x2c\xc5\x04\xb6\xd7\xc8\x34\xb2\xfd\x7b\x05\x86\xeb\x50\x0b\x87\x7a\x88\xf1\x3d\x75\x19\x43\xca\x83\x2f\xfa\x8a\xd2\x50\x4e\xbc\x61\xb1\x24\x32\x06\x97\xb3\x52\x0c\x0c\x2b\xf1\x0d\x83\x93\x7f\xdf\xe6\x71\x6b\x0e\xb4\x71\xda\xef\x6d\xee\xc4\x98\xb7\x09\x17\x78\x8b\xae\x3a\xdd\x0f\xce\xec\xb2\xcc\xd3\xba\x12\xca\x07\x44\xf5\xfe\xf0\xc4\xdb\x7b\xb8\xa5\x2c\xef\xdf\x03\x30\xe1\x94\x24\x86\xe2\x16\x3e\x38\xb1\x90\xe9\x23\xd1\x40\x77\x1f\xa2\xe6\x03\xfd\x55\x49\xb4\x31\x57\x73\xf2\xd5\x7a\x56\x88\xf9\x87\x1c\x3f\x38\xf1\x6a\x8d\xdb\x34\xef\x41\xbc\x45\x0f\xa4\x02\xb0\x55\x58\xa1\xe6\xb7\xe9\x9b\x77\x2a\x6f\x8f\x1f\x9c\xf9\xfa\xb1\x9c\x44\xa1\x4a\x3b\x5a\xa3\x54\xf4\x44\xad\xd3\x54\xbb\xe9\x8c\x65\x58\x74\x77\x8b\x1e\xd9\x07\x8d\xe6\xe8\x86\xf3\xdd\x1b\xc8\x90\xc2\x23\xed\xc3\x65\x3b\x9e\x8b\xe8\x06\x99\x92\x2e\x41\x32\xda\x82\x73\x43\xa1\xa2\x4c\xb7\x25\xc7\x5c\x5e\xc9\xb9\x98\xff\x76\x83\xea\xf9\x57\x3b\xdb\x83\x57\xf7\x77\x06\xef\xe0\x2b\xdf\x02\xa1\xd2\xee\x62\x21\x8a\x0e\x96\x6a\xf8\x15\xc0\xfd\x47\x00\xba\xe0\x29\x80\xe2\x5b\x3d\x4b\x89\x4e\xe2\xdb\xaf\xa6\x3f\x05\xd2\x6a\x8f\x53\x3b\x49\xf3\xbc\xf8\xe7\x47\xbc\xa7\x26\x2d\x0a\x31\xab\x44\xf1\x61\x39\xcb\x90\xa2\xc1\x5f\x2d\xfc\xec\x91\x23\x0e\xdd\x7b\x10\xce\x8b\x23\xda\x82\x62\x97\x45\x25\x7e\x05\xeb\x80\xac\x08\xb2\xec\x91\x7d\x70\x1d\xf9\x67\x04\x58\x96\xc7\xa4\x87\xc4\xc3\x2d\x0d\x87\x9a\x63\xf4\xa8\x96\xfc\xd8\x3e\xff\x7a\xb8\x69\x6e\xb1\x4e\xa8\xdb\x3a\xbe\x1a\x6b\x58\x67\xb3\xb3\x47\xe6\xab\xa1\x65\x3b\x42\x2c\x66\x95\xbc\x12\xd8\xbe\x3c\x42\x70\x3d\xfc\x85\xab\x27\xfc\xb7\x28\xf2\xff\x09\x27\x17\x5b\xfe\x9f\xb8\x53\x9a\x91\x8a\xb2\x6c\x8f\x23\xfd\xe5\x71\x3c\x7f\xe4\x38\xf4\x82\xdd\xf4\xed\xb3\x48\x7f\x7d\x16\x87\xca\xde\xfe\xef\x87\xa1\x6e\x8e\xf0\x83\x53\xd6\x97\xf7\x40\xdd\x8d\x18\x14\x8c\x04\x4b\x47\xd5\x6a\xbd\x55\x62\x88\x5b\xbc\x9e\xa9\x5a\x9e\x61\xd2\x34\xc3\xec\xae\xfe\x54\x8e\x23\x19\xcd\xe1\xa6\xc0\x8a\x14\x98\x9d\x41\xe9\xac\xd3\xba\x64\x82\x07\xca\xaa\xa0\x3a\x41\x50\x39\xea\xd1\x0d\x2c\xb1\x74\x62\x58\xa0\x68\x55\x48\xda\x34\x43\x7d\xd1\x3a\x5c\x36\xcd\x70\xd1\x01\x5b\x46\xac\x85\x27\xb8\xaf\xd7\x5c\x44\xa5\xdf\xad\x3b\x5c\x6a\x57\x76\xab\xba\x60\x40\xcf\x0f\x67\xd1\xc0\xa8\xf4\xf7\x10\xbf\x46\xb6\xeb\xbb\xca\xd6\xa7\x58\xb1\x94\x2b\x3f\x56\xdd\x49\x2f\x7b\xbf\x2e\xc1\xd4\x8e\xb5\x1b\xc0\x6a\x74\xc3\x84\x47\x2c\x41\x3b\x81\x1c\x97\xdc\x67\x31\xa6\x90\xe3\x82\xac\x41\x21\xae\x44\x41\xb6\x0a\x32\x4c\xd4\x05\x6f\xbe\xb9\x03\xda\xea\xbe\xdd\x0a\x6a\x58\x8d\x2c\xe9\x6f\xad\xf9\x0b\x96\xf5\x77\xfb\x9c\x47\x89\x9f\x41\x82\x19\xba\x81\x0c\xb3\x20\xd3\x81\xcf\x72\x92\x4d\x87\xb8\x20\xad\xf9\xb3\x46\x7a\x7b\x41\x2f\x9b\xcb\x04\x0a\x7d\x73\x24\xaf\x78\x01\x0b\xcc\x41\x11\x40\x38\x25\xe1\xc5\xe4\x06\xbe\xad\x52\x15\x9d\xdf\xdb\xdd\x54\xeb\x9b\xe9\x49\xd1\xba\xb8\xd4\x94\xe1\x99\xed\x05\x32\x4c\xf4\xf5\xc8\x52\x5d\xb1\xbe\x58\xa8\xd0\x4b\x17\x5a\xc9\xa0\x30\xcd\x21\x75\x14\x53\x9a\x3c\xc5\x8c\x07\xb6\x4d\x4f\xb0\x9c\xc8\xa9\x85\x67\xb7\xf4\x6b\x23\xcd\x52\x77\x19\x14\x2a\xd3\x51\x04\xcb\x3e\x52\xb6\xed\xb8\xd7\xf8\xea\x94\x4e\x98\x80\x25\xc4\xdc\x57\x87\xa8\x4f\xcc\xf3\x3d\xd8\xba\xcc\x00\xa1\x14\xe1\x2a\x9f\xd7\x29\x09\xcb\x2a\x9f\x3f\xc2\xe1\xfa\xd6\x5c\xd5\x20\x6e\xcc\x9e\x77\x97\xb7\x87\xd2\x89\x9b\x66\x28\x9c\xb2\x69\x04\x89\xf6\x50\x17\x2e\x44\x1b\x06\xf7\xa9\xa9\x69\xa4\xea\x95\xdb\xbd\x92\xfb\xec\x10\xf1\xcf\x88\x15\x4a\x44\x94\xed\x86\x0a\x5f\x31\x09\x02\x5c\xd8\xe3\xaa\xa9\x80\xca\x29\x77\xb1\xe0\xfe\xa6\xeb\x4f\x0e\x52\x0b\x28\xab\x1c\x75\x51\xcb\x04\xd7\x36\x21\x23\x6d\x25\xe6\xa8\x9e\xfe\xa9\xef\xa0\xce\x5a\xfb\xbb\xda\x58\x92\xf4\x91\xfb\x31\x7f\x8c\x32\x1d\x5d\x20\xa7\x78\xb3\x95\xfa\xf1\xa3\x52\x9f\xff\x5a\xea\xf3\x87\x52\xdf\xed\xa9\x15\xfb\x1a\x55\x7c\xa8\xab\x40\x46\x37\x90\xa8\x70\x36\xed\xc5\xbe\x6e\x9a\x61\xa9\xc5\x9e\xb4\x4b\x7a\x77\x9d\xbc\x93\xf2\x44\x4b\x79\xba\x25\xe5\xf4\x4c\x6e\xa0\x1a\x48\xfd\x91\xf4\xdd\xdd\x5c\x89\x75\x8d\x15\xab\x39\x29\x36\x56\x92\x28\x27\xbd\x58\xe7\x58\xdb\x6d\xde\x2c\x0f\xdd\x88\x95\x58\x43\x81\x29\xf7\x59\x8e\x76\x0e\x05\x26\x1c\x8a\x8d\xcc\x06\xb9\x6d\x07\xc5\x46\x9c\xb7\xba\xda\x9b\xb9\xa4\x0b\x77\x32\x4c\xbb\x47\x37\xcc\xed\x4c\xd5\xdd\xa5\x40\xee\x69\x82\x05\x64\x98\xd3\xea\x6e\x90\x05\x3c\x47\x96\x4c\x6c\x3b\x9b\x62\x32\xc9\xa6\x56\x4a\x7f\x72\x3e\x3a\x6b\x5c\xa0\x86\x1d\x3c\xeb\xce\x35\x37\x4d\x96\xf4\x21\x57\xce\xc1\xb2\x4a\x0e\x24\x1f\x09\x94\x8a\x57\xfa\x3a\x00\x52\xf3\xdb\x27\xad\xcf\x59\x65\x3d\xf4\x49\x4b\x2c\x34\xd1\xfb\x0c\xaa\x18\xaa\xf4\xbd\x69\x7a\x43\xa4\x77\x57\xff\x30\x9d\x7f\xdb\x03\xa3\xcb\x39\x1b\x2a\x05\x0f\x62\xa8\x87\xb7\x59\x58\x4e\xc2\x73\xdf\xf3\xab\x50\xf6\x5e\x1f\x64\x58\xed\xde\x58\x24\x10\x72\x52\xb5\x5a\x23\xa8\x5a\x77\xaf\x52\xee\x5e\x46\xee\x9e\x4e\x63\x4a\x52\x0b\x95\x0a\xb4\xda\x3e\x0a\xb4\xfa\x5b\x4b\xd3\x2c\xc8\x05\x0a\x89\xb2\xe4\x5b\x0a\xcb\xe3\xa0\xcc\x9c\x2a\x7b\x78\x4c\xfc\x1f\x11\x15\xa6\x2b\x91\x44\xd3\xf4\xf9\xe3\xa7\x9c\x9b\xe6\x47\x56\xc1\xbf\xff\x2d\xac\xde\xd3\xba\x53\x60\xec\xc2\x73\xf0\x9e\xea\xca\xa7\xcc\xff\xca\xa1\xa2\x75\xd5\xa9\x3c\x24\xf9\x1d\x85\xa3\x6e\x75\x2e\xe0\x02\xbc\x67\x5b\xf4\xe4\x51\xd6\xca\xbc\xe1\x09\xc3\x52\xb5\x33\x2d\x2b\x67\xa4\x65\x32\xa5\x64\x4c\x93\xd9\x17\xba\x68\xe6\x82\x66\x94\xbb\xea\x1e\xc8\xf5\x3d\x52\x4a\x99\x3a\xff\xf2\x5b\x3d\x2b\xc4\xfb\x3c\xaf\x88\x01\xbe\x15\xd5\x63\xce\xfa\x03\x3b\x4f\x22\x58\x3a\x25\x45\x7a\xaa\x90\xea\x9d\xb5\x0f\x8b\x96\x5a\x86\xeb\x3c\xd5\xc1\x1e\xb1\x05\xd9\x65\x92\xcc\x64\x4b\xf4\xf4\x38\x32\xd9\xae\x0a\xeb\x69\x80\xea\x8f\xdc\x91\xeb\x27\x51\xa9\x10\x0c\x94\x7d\x55\xa9\x7f\xc2\x8b\x11\xe7\xba\x0a\x60\x8a\xe8\x8d\xdc\x88\x4e\x91\x25\x1c\x58\x57\xc6\x63\xc5\x7c\x67\x8c\xaa\x8a\x31\xd3\x35\x52\xb0\x0d\x20\xd3\x86\x9a\xc5\x96\xc7\x47\x63\x6e\x33\x37\x8c\x9b\x26\xde\x19\xd3\x30\x05\x31\x43\x4d\x4e\x9f\x91\x34\xde\x29\x75\x51\xe6\x39\xdb\xd4\x64\x6f\x2a\x2c\x85\xc1\x2d\x8f\x5b\x31\x07\xd9\x52\x20\xe3\xdc\xef\x9e\x53\xcb\x30\x48\x53\xd3\x79\x28\x43\xa9\xb2\x61\x90\x62\x6c\x2d\x61\x4f\x6d\x3f\x25\x83\x19\xe8\xfa\x57\x09\x64\x69\xf5\xd1\xd6\xda\x01\x7a\xc5\x4a\xa8\x61\x09\x9e\xba\x9c\x63\xb5\x13\xf3\x1e\x8d\x94\x6b\x37\xae\x60\xd2\x89\xf9\x76\xbb\xd2\x89\xd2\x11\x2f\x62\xd3\xb4\xed\x74\x0b\xf9\xd4\xde\x83\x94\x78\xdf\x38\x3c\x3c\x3c\x34\x14\x8f\xb2\xbc\x69\x8c\xfd\xf6\x95\xf3\x9f\x6c\x68\x65\x4d\x33\xb4\xb2\xbe\x10\xd9\x34\x8d\xa7\x06\x62\xd6\x55\x06\xba\xc4\xf4\xec\x23\x93\x20\x1d\x61\xbd\xb3\xc6\x40\x31\x27\x0e\x65\x8b\xbc\xe4\x8e\xf8\xc6\xca\xed\x6a\x85\x61\xae\x66\xd4\x50\xb7\x33\x5c\x0e\x75\xb7\xd7\x6e\x38\xff\x29\xb1\x6e\xe7\x2c\x2d\xdc\x87\x94\xfe\xe4\xe8\xdd\xf6\x81\x4d\xb7\xa4\x07\x5f\x5b\x33\xae\x60\x90\x15\xaf\xd3\xff\xc9\x4f\x6d\xeb\x80\xba\x04\xea\x4a\xa7\x50\x35\x57\x9f\xe3\xa5\x13\xc3\x05\x92\x1d\x3b\xb8\x63\xc7\x78\x97\x39\x3d\x37\xcd\x0b\x9d\x41\x32\xcd\x8b\xad\xcc\xe9\xf0\x92\x0c\xa7\xf6\x00\xce\x4d\x73\xa8\x47\x0c\x2f\x9a\xe6\x82\x7e\xf4\xdb\x79\x5f\x5f\x21\xda\xf8\x5f\x79\x27\xbb\x78\xe9\x94\x40\x90\x23\x5d\x6b\xe1\xea\xfa\x15\x97\xfb\xdb\xf5\x18\x1c\x44\x5b\x92\x56\xb1\x4b\x15\xc9\x58\x15\x13\x3a\x61\xda\x43\x49\x37\xb9\xb3\x05\x5e\xf4\x8f\x8a\xc7\x56\x78\x0e\xe7\x78\x01\x17\xb8\x82\x5c\x99\x15\xe5\xe4\x91\x49\x49\xad\x05\xac\x70\x32\x55\xb6\x6a\xb5\x55\x7e\x94\x17\xec\x1a\xcf\xe0\x0a\x5f\x92\xab\x1a\xd8\x76\x1e\xa2\x1b\x6c\x8a\xe4\xd7\x78\x31\xc9\xa7\x3b\x57\x30\x57\x0f\xa3\xab\xc6\x85\x12\x53\xa8\x31\xb7\xca\xa0\x0e\xf3\x80\xc7\x78\xae\xee\x4d\x76\xae\x60\x89\xe7\x93\x52\x0f\x4a\x70\xbe\x1b\x5b\xcb\xdd\x35\xc4\xb8\xde\x8d\xad\x64\xe7\x6a\xf7\xca\x5a\x4d\xea\xa9\x55\x40\x81\x2c\x1e\x5d\xab\x1b\x82\x84\x46\x73\x6b\xbe\xbb\x84\xd5\xa4\xb6\xed\x29\xc6\x3b\xd7\x01\x8d\xc3\xa2\x63\x87\x22\xb2\x2c\xe9\xaf\x7a\x67\x90\x6c\xdb\x0a\xa4\x66\x8b\xb6\x6c\xed\x1f\xaa\xf6\xc1\xbd\xcb\x41\x8f\x94\xfb\xf3\xed\x52\x39\x7d\x51\xa8\x5c\xa4\x0c\x1f\x2a\xf8\xe7\xbd\x82\x07\x11\x91\x41\xa0\xe5\xfc\x4a\xa3\xb2\xa5\x4b\x1e\x0f\xcb\x3e\xb7\xa1\xd8\x83\xfb\xc9\x43\x1e\x91\x65\xf1\xda\x85\xa9\x41\x83\x54\x95\x77\xff\x37\x60\x63\x57\x03\xeb\xcc\x54\x07\x73\xec\x76\x30\x55\x0d\xdf\xa3\x14\xfb\x25\x4c\xef\x17\x30\x3d\xa5\xc3\x75\x9c\xbb\xe5\x36\x3a\xe5\x3a\x95\x95\x2e\x4d\xcf\xd1\xfa\xcb\xe9\x0b\x79\xa0\xa6\xd7\x87\xb5\x3c\x50\x62\x37\xaa\xab\xe2\x21\x4f\x90\x84\x25\x45\x39\x51\x25\xda\x5d\xfc\x0d\x33\x8c\xa3\xa4\xd7\x5b\x7e\x02\xcb\x4d\xf9\x53\x1b\xe6\x14\x98\x93\x27\x07\x35\x16\xb0\xb4\xb1\xe0\x90\x87\xae\x69\x2e\x43\xb7\xe3\xee\xe5\x4e\xde\x34\x39\x24\x38\x6b\xbf\x89\x60\x2e\x14\x3c\x58\x86\x45\x50\x58\x98\xf3\xc4\xc2\xd2\xea\xfb\x0a\xc8\x79\x50\x87\xaa\x7c\xbe\xed\x50\xcb\x17\x9c\x43\xac\x6a\xea\x0d\xdb\xb0\x12\x7e\x5b\x61\x1a\x25\xd6\x5f\xce\xfd\x12\x27\x8b\x82\x44\xeb\x2f\xe7\x41\x59\x12\x8f\xd2\x4d\x66\x72\xeb\x4b\xa1\x4f\x9f\xe6\x3f\x0d\xab\xb6\x8c\xdb\x4f\x9f\x7e\x33\xc0\x58\x18\x1c\x8c\x27\xa6\xf1\x00\x46\xb7\x02\xf7\x53\xee\x27\x9b\xc2\x5c\x7d\xd8\xed\xd0\x47\xdd\xbe\x7b\x4a\x13\xbf\xc0\x42\xab\xca\x35\x2e\x9c\x18\xe6\xfd\xbd\x3a\xac\xb0\xda\xbc\x5c\x63\x72\xe7\xc6\xbd\x67\x17\xf6\x05\x87\x1e\x94\xd8\x97\x62\x7f\xc1\x25\xb0\x21\xa3\x48\x5e\xe5\x70\x18\xe7\x4d\x53\x3a\x69\xc5\xbe\x29\xe3\xa2\xcb\x23\xc6\x60\xac\x66\xdf\x07\x73\x91\xe5\x2b\x99\xd1\x56\x06\x86\xc5\x96\x91\x71\xaf\x06\xf8\xb1\x12\x60\x81\xc3\xa5\x69\xaa\x84\xcb\x47\x56\x82\x76\xcc\x3c\xee\x2c\x2a\xc1\xbe\xf1\xa8\xf4\x3b\x37\x74\xdd\xc7\xfe\xdb\x65\xe8\xda\x5c\x17\x6c\x4d\x7c\x3a\x77\x04\xf6\x89\xa3\x85\x23\x6c\x0f\xe6\xca\xaa\xe3\xfb\x09\xab\x31\xdf\xb9\xe1\x2f\xdc\xe8\xc6\xaa\xfd\x7a\x4a\x0b\x0b\xda\x4b\xbc\x5a\xb3\x39\x0f\xdd\x88\x82\x85\xb9\xbf\xf2\x4b\xa8\xf1\x07\xfc\x20\x6f\xa3\x27\x45\xcc\x21\xd1\x90\xdc\x20\x45\x32\xf7\x73\x95\x1d\x54\xb2\xa2\x5c\x80\xb4\xb5\x92\xd7\x9c\x83\x37\xa4\x10\x68\xb5\xa6\x08\x89\x57\x78\x0d\xd7\x28\x61\x85\xc9\xdd\x91\x12\x57\x9c\x22\x17\x09\x73\x2c\xdb\x90\x6a\xd3\x37\xe7\x14\xdc\xc8\x4e\xef\x49\x7c\xc5\x44\x17\x4b\x72\xb8\xd6\xab\x27\x1d\xcc\xce\xa4\x13\xc4\xaa\x43\x49\x6e\xa1\x94\x38\x25\xae\x9c\x12\x17\x4e\x09\xf9\x2e\x8e\x21\xc3\x57\x8c\xac\x6b\x0e\x5f\x79\x0b\x77\xc1\x9d\xd9\x65\xc9\xb8\x42\xfd\x15\x4b\xa0\x7a\xac\x97\xbf\xf0\xa2\xc9\x6a\xeb\x0c\xe0\x7a\xeb\x65\xea\x4f\x92\xed\xbe\x6a\xbb\x0f\x7e\x60\xad\xdd\xf9\x2a\xd7\x35\xc2\x0f\x23\xdf\x2d\xc7\xda\x12\x4d\x43\x06\x38\x72\x77\x85\xa3\xf3\x41\x7a\xee\xbb\xfc\x5a\xa5\x15\xd7\xf9\xf5\x2f\xa2\xa1\x55\x57\x4d\x65\x09\xde\xa5\x07\xc8\x41\xe8\x5d\xf5\xf1\x1e\x18\xa2\x55\xf7\xaa\xfe\x67\xd8\x65\x35\x99\xe0\x4d\x53\x84\x17\x14\x03\x8d\xd0\xe5\x4d\xb3\x9e\x15\xa5\x38\x4e\xf3\x59\xc5\x04\x57\x72\x32\x64\x02\x09\x9d\x7b\x37\x0d\xca\x8f\x5d\xe7\xd7\xcc\x92\x20\x78\x97\x61\xf9\x3d\x9a\xb3\xdf\x47\x37\xd6\x98\xfb\x2e\x6c\xa4\xb0\xad\x48\x2d\x76\xc6\xea\x57\x5d\x8b\xb4\x6e\x19\x0c\x2b\x27\x6e\x2b\x45\x33\xd3\xac\xfa\x6c\xa8\x0a\x8c\x36\xaf\x98\x71\x5d\x1e\xbc\x62\xc5\x68\xcc\xa1\x2b\x5a\x0e\x24\x6e\x7c\x3c\xc8\x4c\x53\xa5\x35\xe4\x5d\x30\xf2\x0e\x98\x3b\xd9\xf8\x0a\xbf\x39\x73\x79\xc5\x2a\xce\x21\x53\x56\xf2\x77\xf8\xda\x5b\xc9\xbe\x48\xfc\x9f\x9b\x35\x55\x15\xb7\xff\x2b\x33\x0d\xe3\xfd\xf6\x60\x35\xa7\x3c\x76\xa6\x5d\x7c\x5b\x11\xff\x62\xe5\x88\x60\x2b\x28\x45\xc4\x3c\x92\x14\x6c\x18\xdd\x1d\x99\x01\x6e\x28\x55\x14\x49\x6a\x9d\xbc\xfd\x0c\x8d\xb3\xd9\x99\xe1\x2b\x57\x9c\xe8\xdb\xfb\x07\x2d\x92\xea\x0b\xd3\xf1\xd3\xee\x13\xd3\xe8\x35\x4b\x59\x06\x39\x07\xb7\x11\xe0\xb9\x20\xb9\xff\x5b\x88\x64\x73\x42\x7c\x12\x25\xaa\xcf\xef\x86\xd0\x62\x55\x17\xd1\xf5\x8b\xb6\xcc\x5e\xd4\x59\xdc\x66\x7b\xd4\xf3\x3f\xbf\x0b\xd0\xf7\x0f\x57\xb3\xb4\x16\xe7\x09\x4d\xcf\x7f\xbf\x38\x7f\x24\x13\xae\x53\xdb\x1b\x51\xbb\xdd\xd0\xbf\xab\x3a\x25\x75\x3e\xdb\xd4\x4b\x54\x9b\x58\xd6\x6d\x7a\x6a\x8a\xd0\x6d\x1a\x81\x88\x59\x94\xf9\x99\xed\xdd\xa9\xaf\xd8\x54\x56\x68\x21\xf3\x40\x6e\x8a\x50\x72\xf5\x9d\x8a\x65\x18\x81\x0c\x8b\xd6\x03\xcd\x50\xa8\x6c\xa3\x65\x18\x50\xe1\x8d\xdd\x7f\xcb\x51\xd9\x76\x90\x51\xf4\x67\x65\x3c\xc8\x2d\xcc\x6e\xdb\x42\x90\x3b\x5f\x25\xe6\x77\xbf\x4a\x94\x3c\xe8\xdd\xc0\x7c\xf3\xbd\x9f\xe5\x35\x8d\xc7\x37\x88\xca\xfb\xb9\x41\xe1\xc4\x90\x53\x54\xa4\xbe\x29\x2a\x49\xa7\x3b\xa5\xaa\x9f\xa1\x18\x2f\x73\xc4\x56\x96\xea\x61\xa6\xc3\x34\x87\xca\x89\x29\x30\x37\xcd\x61\xae\x8a\xba\x9a\xa6\xbf\x0d\xab\xa2\x22\x72\x7d\xbb\xf4\x6b\xe5\xb8\x0c\xb1\x87\x51\x6b\x00\x6e\x58\x43\x81\x09\x62\x0a\x43\xd9\x34\xc3\x9c\xf7\x5e\xb1\xeb\x0f\xe5\xdf\x95\x2e\x6b\xb9\x73\xc5\x96\x84\x69\xd7\xae\x8b\x8b\x58\xd2\xa7\x5c\xf8\x0b\x96\xf6\x74\xe2\x51\xe2\x93\x33\xef\x06\x65\x58\x07\xb5\xce\x22\xcb\x49\x3d\x1d\x62\x3e\xa9\xfb\x60\x9e\x5a\x42\x6a\xe8\xa0\xf6\x9f\x49\x63\x1a\xb9\xfe\x66\xb9\x0d\x15\xf3\xbb\xb7\xb7\x4c\xe8\x8f\x7f\x42\x72\xa6\xab\x10\xb7\xaa\x7d\x6a\x62\x8c\xf6\xa3\xbf\x89\x2e\x8e\x1c\xa8\x52\xb8\xa9\x81\x78\xae\xde\x37\xe5\xe7\x3d\x8b\xea\xef\x91\xc4\xd6\xb9\x95\x0f\xbe\xff\x21\xf7\x46\x45\x5b\xb5\x2a\x94\xef\xbf\x77\xa2\xbd\xb6\xdf\x80\x6e\x38\x46\xda\x76\x90\x4f\xe4\x74\x17\xb3\xb6\x1e\x6c\x52\xa0\x3b\xb5\xf0\xbc\x4f\x03\x88\x2e\x30\x26\x42\xf1\xa0\x78\xd1\x4f\x2e\x2c\x8b\xe7\x93\x62\x1a\x56\xea\x6b\x5d\xad\x53\xf2\x49\x61\x79\x24\xce\xfa\x01\x5d\x0e\xfa\xc9\xa2\xae\xe9\xa8\x6a\x5c\x6a\x98\xee\x60\xd5\xeb\xcf\xed\xbb\x80\x7e\x67\xc9\xb6\x7e\x64\x9b\xaa\xa2\x48\x6c\x22\x75\xcb\x70\x0c\x4b\x6c\x5c\x62\xc1\x2d\xe6\x86\x59\x64\x90\xdf\x24\x2c\x83\x5b\xd9\x06\x60\x7a\x87\xc5\x75\xd9\x5a\xd6\xb9\xc5\x86\xeb\x18\x81\x65\x65\xe4\x04\xab\x6f\xd0\x04\x16\x96\xe8\x0b\x0c\xab\x8d\xc8\x5a\x56\x16\x56\x9b\x69\x06\x64\x36\x56\x81\x6d\x6f\x4d\xb5\xb0\xd0\x33\x2b\x65\x33\x36\x75\x65\xfa\x93\xf7\x2d\x9c\x33\xbe\x89\xd1\x36\x98\xc6\x1b\xe6\x18\x08\xbc\x63\x48\x81\x2c\xf4\x9c\x09\xee\xaf\x88\x0f\x68\x33\x33\x1d\xf7\xeb\x6a\x87\x4f\x73\x8b\x7d\x72\x3e\xcd\x77\x79\xd4\xd0\xaf\xc5\x99\x98\x58\xf6\x34\xa2\xc7\xe8\xc9\x88\xdc\x26\x65\x70\x63\x21\x53\x58\xe9\x67\x75\xd5\x0a\xd7\xd8\x56\xeb\x0e\x2e\xf3\x3c\x15\xb3\x6c\x90\x17\x83\x4b\x99\xcd\x8a\x9b\xc1\x9c\xc2\x4d\x03\xae\x50\x7f\x49\x25\xb3\xc5\x60\x95\xcf\x85\x01\x97\xdd\x87\xe9\x03\x62\xd4\xc1\x72\x56\x0e\x56\x79\x21\x06\xd5\x72\x96\x0d\xbc\xa7\x83\x52\x2e\x32\x99\xc8\x78\x96\x55\x1a\x48\x69\xc0\x39\x1a\xae\x37\xde\xdb\x7f\xfa\xec\xe0\xf9\xe1\xec\x32\x9e\x8b\x64\xb1\x94\x5f\xbe\xa6\xab\x2c\x5f\x7f\x2b\xca\xaa\xbe\xba\xfe\x7e\xf3\xe3\xe5\x6f\xaf\x5e\x1f\x1d\xbf\xf9\xd7\xc9\xef\xff\xdf\xe9\xdb\xb3\xf3\x77\xff\xff\xfb\x8b\x0f\x1f\xff\xf8\xf3\xaf\xff\xfa\xef\x27\x9f\x0d\x38\x43\x4f\x78\xfb\x70\x83\xde\x3e\x5c\xdc\x2f\xec\xf5\xe0\x3d\x4e\x3c\x32\x3f\x9e\xeb\x82\x27\xf6\xc0\x13\xfb\xe0\x89\xa7\xe0\x89\x67\xe0\x89\x03\xf0\xc4\x73\xf0\xc4\x21\x78\x82\x06\x09\xcf\xa3\x3f\x63\xfa\xb3\x37\x85\x97\xea\x43\x8e\x23\xf4\xc4\xa1\xfa\xa2\x4a\x55\x51\x1a\xdd\xf1\x6c\x8a\x9d\xe7\x22\x91\x99\x30\x4d\xfd\xeb\xcc\x56\x73\xae\x1f\xd9\x43\x53\x33\xbb\xdd\x7c\xb7\x69\xd4\x99\x1e\x37\xdf\x54\x7f\xab\x0b\x1b\x61\x9a\xfa\xd7\x21\x2f\xab\xa8\xf4\x05\xc0\xdd\x26\x9c\xc1\x70\xc9\xab\xe2\xe6\xe7\x12\x0b\xf1\xad\x96\x85\x60\x6d\x3d\xa8\xc1\x6f\xe3\x59\x15\x2f\xd9\x6b\xfe\xf3\x56\x73\xa0\x70\xfa\x2f\xcb\x70\x76\xdb\x66\x05\xfe\x63\x34\xfa\xcf\x41\x99\xd7\x45\x2c\xde\xce\xd6\x6b\x99\x2d\x3e\xbe\x3f\xc5\x79\x1e\xdf\xf9\xf7\x1a\xce\x6a\xb6\xfe\x8f\xff\x17\x00\x00\xff\xff\x2f\x88\x72\xca\xa2\x43\x00\x00") - -func bignumberJsBytes() ([]byte, error) { - return bindataRead( - _bignumberJs, - "bignumber.js", - ) -} - -func bignumberJs() (*asset, error) { - bytes, err := bignumberJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bignumber.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _web3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x7b\x13\x39\xd2\x38\x0e\xbf\xcf\xa7\x50\xfc\xdc\x0f\xb6\x49\x63\xe7\x34\x0c\xd3\x99\x0c\x1b\x02\x33\x64\x6f\x20\x5c\x40\x76\x76\xef\x6c\x96\xab\xed\x96\x6d\x0d\xed\x6e\xff\xba\xdb\x09\x19\x92\xef\xfe\xbf\x54\x3a\x1f\xfa\xe0\x24\xcc\x69\x93\x17\xe0\x96\x4a\xa7\x52\xa9\x54\x2a\x95\xaa\x72\xfc\xff\x96\x24\xc7\xfb\xbd\xc9\x32\x1d\x97\x24\x4b\x11\xee\x95\x41\x1a\xe4\xfd\x2f\x32\xa5\xe8\x65\xc1\xb2\xff\x85\x4c\x7a\xeb\xe9\x69\x76\xc6\x7e\x95\xf0\xeb\x3c\xca\x51\xb4\x5f\x5e\x2e\x70\x36\x41\xa2\xae\xfd\x8e\x28\xda\x79\xf0\x80\x27\xee\xd1\x32\xcb\x07\x0f\xa2\x7e\x8e\xcb\x65\x9e\xa2\xa8\x97\x05\xeb\x9b\x7d\x9a\x4e\x44\x1a\xe1\x69\xb4\xd6\xc9\x7e\x8a\x2f\xd0\x8b\x3c\xcf\xf2\x5e\xe7\x30\x4a\xd3\xac\x44\x13\x92\xc6\x68\x9e\xc5\xcb\x04\xa3\x6e\x67\x23\xdb\xe8\x74\x3b\xfd\xbd\x72\x96\x67\x17\x68\x32\x18\x67\x31\xde\xef\xbc\x3e\x7e\x7e\xf2\xea\xc5\xc7\x37\xc7\x1f\x3e\xfe\x78\x7c\xf2\xe6\x79\x27\x98\x5c\xd3\xfa\x92\x7d\xda\xf7\xfd\x2f\xf8\xf3\x22\xcb\xcb\x22\xfc\x72\x7d\xbd\x47\xc7\x70\xba\x79\x36\x18\x47\x49\xd2\x4b\x06\x3c\x2b\x10\xbd\xef\x61\x36\xc0\x74\x1f\x00\xb7\xce\x4e\xf1\xd9\x1e\xef\x6a\xd1\x4b\x9f\xa6\x21\xee\x5f\x07\x49\xa0\x4a\xe2\x80\xe1\xee\x9a\x43\xd1\x26\x45\x26\xf4\x82\xb4\xc2\xd5\x24\xcb\x7b\x14\x3a\xdb\xdf\xdc\xcb\xbe\xcf\x07\x09\x4e\xa7\xe5\x6c\x2f\xdb\xd8\xe8\x17\xbd\x9c\x22\x5e\x76\xe3\xba\xdf\xfb\xb2\x15\x9e\xca\x2e\xf3\x2a\x02\x86\xa5\x80\xb7\xdd\xff\xb2\xc6\x12\x44\x67\xf6\x4f\xd7\x10\xfa\xb2\x86\x10\x42\x9d\x71\x96\x16\x65\x94\x96\x9d\x10\x95\xf9\x12\x07\x2c\x95\xa4\x8b\x65\x59\x74\x42\x74\x0a\xdf\x02\x1a\xf2\xd2\x68\x8e\x3b\x21\xea\x7c\xcc\x2e\x52\x9c\x77\x02\x95\x43\x47\x47\x73\xa2\x38\xce\x71\x51\x74\x78\xce\x35\xfc\x7f\xc6\xab\x16\xc5\xe1\x7f\x9e\x96\x2d\xcb\xe6\xf6\xb2\x8f\x5a\x11\xa3\xbd\xd1\x65\x89\x8b\x9d\x6d\x7f\x7b\x02\x48\x62\x7a\x0d\xa1\xeb\xe0\x4e\x10\x70\xa3\xfe\xc8\xe1\x68\xd8\x6b\x87\x80\x95\x51\xfd\x47\x1d\xfa\x38\x4b\x4b\x9c\x96\xb7\x1e\xfc\x9f\x72\xde\xe9\x8c\xfd\x61\xa6\x7d\x12\x25\xc5\x6f\x37\xf4\x1c\x17\x38\x3f\xf7\xad\xfa\x3f\xfa\xa4\x15\xcb\xd1\x3b\x3c\x25\x45\x99\x47\xff\x05\x93\x17\xd4\xd5\x81\x2f\x8e\x6f\xc5\xf7\xcb\x3c\x4a\x8b\x89\x97\xf5\xfd\x59\x70\x90\x5b\xa4\xb0\x3a\x12\x0a\x5c\xbe\xaf\x27\xa9\x3b\xc3\x85\xdd\xf4\x6f\xd2\xe8\x57\x9e\x80\xa8\x0d\xe2\xeb\x2a\x58\xe4\x64\x1e\xe5\x97\xde\x7e\x64\x59\xd2\x38\x79\x07\xbc\xad\x3f\x2f\x0a\xcd\x3d\xb8\xb6\x9a\x2a\x24\x1c\x56\x6e\xe3\x7f\x24\x24\x78\x7b\x1f\x93\x22\xbb\x48\x6f\xd1\xf3\x28\xcd\xd2\xcb\x79\xb6\x2c\x56\xe8\x3a\x49\x63\xfc\x19\xc7\xc6\xde\x75\x67\x13\xab\x2a\xd7\xba\x63\xd6\x7e\x41\xd2\xdb\x30\xee\x83\x25\x60\xe2\x45\x1a\xe3\xb8\x63\xa1\x09\x9f\x53\x42\xf8\x0b\xe0\x68\x44\xe2\xb8\x1d\x8e\x6e\x56\xff\x79\x94\x2c\xbd\xdd\x5f\x92\xb4\xdc\xfe\xe6\x71\xfd\x14\xbc\xc1\x17\xcf\xc8\xef\x88\xfc\x5b\xad\xb9\xc3\x59\x94\x4e\x7f\x4f\xd2\xb9\x13\xca\xa9\xa8\x5b\x93\xea\x6b\xa9\xc6\x8b\x99\xb7\x6c\x37\x6a\x44\xd0\xda\xd9\xda\xda\x75\xf0\xe5\xfa\x2c\xd8\xfe\xdd\x0e\xfd\x7f\xa1\x33\xef\xef\x24\x3b\x4e\x96\x69\x7c\x63\x52\xb9\xf5\xc6\x75\x7f\xec\xfd\x73\x1f\x7b\xef\x0f\x7d\x7f\xe4\x33\x87\x77\xf0\xfc\xbc\xf0\x47\x93\x36\xbf\xee\x66\xae\xf6\xaa\x9d\x3b\xdb\xab\x56\x9d\xf7\x49\x9e\xcd\x6f\x39\xed\x65\x76\xcb\xa3\xe6\xed\x04\xbe\xdf\x77\xdd\xfc\x11\xf0\x47\xd2\x98\xe4\x78\x5c\x1e\x79\xf7\xcc\x15\x7a\x72\xbb\x89\x20\xe3\x68\xf1\xe1\x77\x9d\x0c\x3f\x26\xdb\x9d\x76\xf1\x22\x2b\x48\xdd\x41\x7d\x11\x5d\x46\xa3\x04\x9b\x42\xc1\xef\xc2\x95\xaa\x68\xee\x4e\x8e\x5f\xb7\xa3\x81\x03\x31\xde\xe7\x26\x3e\x7f\xfb\x93\xcc\x9d\x20\xa9\xa2\xee\x76\x74\xf6\x3b\xa0\xff\x0f\x8b\xf5\xbb\x38\x3f\xde\x98\x4f\x7e\x6d\xac\xdb\x4c\xef\x1e\xed\x2d\xd1\x7e\xeb\x8d\xeb\x6b\xcf\xec\x91\x67\x4b\xab\x93\xe3\x76\xdb\xc8\x71\x60\xbc\x81\xf6\x85\x85\x43\xaf\x3b\x18\x4e\xb2\x7c\x1e\x95\x25\xce\x8b\x6e\x7f\x0f\x00\xde\x67\x09\x89\x49\x79\xf9\xe1\x72\x81\x4d\x58\xda\x3e\x85\x5a\x1b\x3e\x7c\xb8\x86\x1e\x1a\x90\x5c\xe7\x8e\x48\x81\x22\xb4\xc8\xb3\x8c\x02\xa3\x72\x16\x95\x28\xc7\x0b\x7a\xc8\x4a\xcb\x02\xf1\xb9\x43\x34\x93\xd6\x70\x54\xa2\x79\x54\x8e\x67\xb8\x08\xe9\x27\xcf\xd6\x7e\x9e\x9e\xe9\x1f\xbb\xc6\xd7\x99\x99\xb9\x63\x7d\x9f\x9d\x3e\x3e\x3b\x3d\x0b\xd0\x60\x30\x58\x43\x0f\x87\xce\xd8\x44\x8f\xf7\x91\xb4\xa6\xe9\xf5\xf9\x14\x97\x33\x52\x0c\x3e\xc2\xc2\xf8\x51\x20\x88\x02\x0e\x18\xba\x8e\x68\xc6\x51\x5a\xee\x69\xc0\x6c\xdf\xf6\x41\x1f\x43\x0e\x6f\x6e\x6f\xed\x7a\x6f\x6d\xcd\xd3\x8f\xc1\x22\xcf\x4a\x86\xb5\x7d\x94\xe2\x0b\xa3\xaf\xbd\x2f\xd7\xfd\xbd\xfa\x52\x03\x90\x5e\xf2\xe5\xb8\xcc\x68\xe3\x1e\xd8\xa6\x76\x07\xa4\xe0\x73\xae\x10\x42\xc9\x51\x20\x85\xdb\xb5\xac\xaf\xd3\xc4\x01\xcc\x5b\x6f\xc8\xb1\xdd\xfb\xf7\x69\xef\x74\xf3\xd1\x77\x67\x0f\xfb\xff\x3e\xeb\x3f\x1d\xf6\xd9\x38\xcd\x83\x43\x65\xb7\xae\x83\x2f\x1d\x9d\x14\x3b\xe1\x77\x41\x87\xd1\x5b\x27\xdc\xda\xbd\x3e\x0b\xbe\xf9\x9d\xc9\xfb\x59\x96\x25\x0d\xb4\x3d\xa2\x20\x15\x84\x4d\xf3\xc4\xff\x8c\x4a\xe1\xd7\xae\xfa\x79\xa6\x25\xef\xe8\x1f\x4d\x64\x0c\x3d\xbb\x29\x0d\xd3\xc2\xab\x10\x31\x83\xb7\x29\x98\xa6\xae\x48\xbe\x66\x91\x1a\xda\x65\x2d\xd6\x95\xbd\x09\xd5\xfe\x87\xa2\xd6\xa4\xd9\x87\xff\xd3\x8a\x68\x79\x7f\x9a\x29\xf6\xf1\xef\x4d\xb1\x74\x0f\x93\x24\x5b\xfa\x69\xb6\x9c\x61\x04\x9b\x1d\x10\xee\xc0\x47\xb9\x34\x57\xfe\xe0\x74\x09\x3f\x77\xb5\xdf\x67\x7a\xc6\x8e\xf1\x65\xd2\x2f\xe2\x5b\xab\xfc\xf9\xc4\xa8\x87\x17\xf5\x50\x39\x74\xf2\xc6\x64\x4e\x4b\xaf\x44\xe7\xac\x80\x43\xe8\x34\x79\x55\x4a\x37\xcb\xd4\x91\x3a\x6b\xb4\xb6\xf4\xcd\x88\x9d\x56\xc2\x48\xfd\xcb\x56\x70\xdd\xbf\x19\xe1\xf3\xde\x35\x53\xfe\xb7\x6d\x28\x7f\xf8\x10\x3a\xfc\x61\x46\x0a\x34\x21\x09\xa6\x94\xba\x88\xf2\x12\x65\x13\x74\x81\x47\x3b\x83\x5f\x8a\xc1\x1a\x80\xf0\x2f\x0a\x30\xc9\x31\x46\x45\x36\x29\x2f\xa2\x1c\x87\xe8\x32\x5b\xa2\x71\x94\xa2\x1c\xc7\xa4\x28\x73\x32\x5a\x96\x18\x91\x12\x45\x69\x3c\xcc\x72\x34\xcf\x62\x32\xb9\x84\x3a\x48\x89\x96\x69\x8c\x73\x20\xf8\x12\xe7\xf3\x82\xb6\x43\x3f\x7e\x7a\x73\x82\x5e\xe1\xa2\xc0\x39\xfa\x09\xa7\x38\x8f\x12\xf4\x76\x39\x4a\xc8\x18\xbd\x22\x63\x9c\x16\x18\x45\x05\x5a\xd0\x94\x62\x86\x63\x34\xba\xe4\x54\x84\xd1\x8f\xb4\x33\xef\x79\x67\xd0\x8f\xd9\x32\x8d\x23\x3a\xe6\x00\x61\x52\xce\x70\x8e\xce\x71\x5e\xd0\x19\xda\x11\x6d\xf1\x1a\x03\x94\xe5\x50\x4b\x2f\x2a\xe9\x18\x72\x94\x2d\x68\xc1\x3e\x8a\xd2\x4b\x94\x44\xa5\x2a\xeb\xa2\x40\x8d\x34\x46\x24\x85\x6a\x67\x99\x58\xd9\xa4\x44\x17\x24\x49\xd0\x08\xa3\x65\x81\x27\xcb\x84\x09\x8e\xa3\x65\x89\x7e\x3e\xfa\xf0\xf2\xf8\xe4\x03\x3a\x78\xf3\x2f\xf4\xf3\xc1\xbb\x77\x07\x6f\x3e\xfc\x6b\x0f\x5d\x90\x72\x96\x2d\x4b\x44\x25\x4a\xa8\x8b\xcc\x17\x09\xc1\x31\xba\x88\xf2\x3c\x4a\xcb\x4b\x94\x4d\xa0\x8a\xd7\x2f\xde\x1d\xbe\x3c\x78\xf3\xe1\xe0\xd9\xd1\xab\xa3\x0f\xff\x42\x59\x8e\x7e\x3c\xfa\xf0\xe6\xc5\xfb\xf7\xe8\xc7\xe3\x77\xe8\x00\xbd\x3d\x78\xf7\xe1\xe8\xf0\xe4\xd5\xc1\x3b\xf4\xf6\xe4\xdd\xdb\xe3\xf7\x2f\x06\x08\xbd\xc7\xb4\x63\x18\x6a\x68\x46\xf4\x04\xe6\x2c\xc7\x28\xc6\x65\x44\x12\x31\xff\xff\xca\x96\xa8\x98\x65\xcb\x24\x46\xb3\xe8\x1c\xa3\x1c\x8f\x31\x39\xc7\x31\x8a\xd0\x38\x5b\x5c\xb6\x9e\x48\xa8\x2c\x4a\xb2\x74\x0a\xc3\x96\x54\x86\xd0\xd1\x04\xa5\x59\x19\xa0\x02\x63\xf4\xfd\xac\x2c\x17\xe1\x70\x78\x71\x71\x31\x98\xa6\xcb\x41\x96\x4f\x87\x09\xab\xa0\x18\xfe\x30\x58\x7b\x38\x14\xcc\xf6\x6f\x40\xb6\xe3\x2c\xc6\xf9\xe0\x17\x60\x91\x7f\x8b\x96\xe5\x2c\xcb\xd1\xeb\x28\xc7\x9f\xd0\xff\x66\x25\xbe\x20\xe3\x5f\xd1\xf7\x73\xfa\xfd\x37\x5c\xce\x62\x7c\x3e\x18\x67\xf3\x1f\x00\x38\x8e\x4a\x8c\xb6\x37\xb7\xbe\x01\x86\xd7\xbc\x15\xd4\x08\xb0\x5a\x19\x2e\x8f\xf9\xf6\x0e\x2e\x29\x68\xc0\x74\x17\xf4\x41\x1e\xa5\xa5\x09\x48\xd2\xd2\x07\x77\xe2\x00\x2e\x2b\x20\x9f\x5f\xa6\xd1\x9c\x8c\x05\x1b\xd7\x4a\xc4\x2c\x07\x78\x94\xaf\xe4\xfb\x32\x27\xe9\xd4\x2c\x53\x40\x9a\x0f\xfa\x1d\x8e\xac\x31\xe6\x38\xf2\x8e\xf1\xc4\x05\x5d\x56\xc1\x7a\xba\x2d\xfb\x0b\xc0\xa4\xe0\x03\x34\x38\x73\xa1\x55\x11\xc0\x0e\xcb\xf9\xb4\xb0\x10\xd7\xf2\x07\xb2\x0a\xd8\x46\x18\xf0\xd5\x95\x3c\x3d\xa2\x0a\xe8\x83\x3c\x8f\x2e\x19\x38\x63\xe2\x96\x28\x70\x48\xe9\x53\x93\x00\xf8\x4a\x62\x1c\x22\x46\x65\x86\x70\x4a\x69\x78\x18\x63\xfa\x9f\x6c\x85\x32\xe3\x88\xb1\x49\xca\x95\xb8\x5c\x6b\x6e\xcc\xac\x6e\x7d\xc4\x14\xac\x30\x77\x66\x48\x42\xfb\x50\x43\x61\x74\x11\x78\xff\x1c\x97\xb3\x2c\xf6\x74\x8b\x29\xd7\xb3\x7c\x8e\x98\xe4\x92\x19\x33\xb2\x86\xd8\x1a\xe4\xc5\x3f\xf2\x99\xe1\x59\xe8\x6f\xd0\x7b\xf4\x85\x11\xcf\xb5\x14\xcb\xff\xc6\x30\x5f\xa0\x2f\x7a\x65\xd7\x90\x05\x6f\x15\x0a\xf4\x05\xde\x35\x5c\x23\xfe\x49\x28\x6f\x60\x12\x11\x25\x43\xe8\x0b\xdd\x89\x28\xbb\x07\x84\x18\xc8\xd0\x76\x6a\xbd\x4b\x0e\x8e\x04\x8a\x28\x36\x0b\x53\xbc\xd3\xb0\x36\x98\x90\xa4\xc4\x79\x4f\x2b\xdb\xd7\x74\x10\x9c\x8a\x4a\x2e\x14\x08\x22\x00\x9d\x42\xff\x74\xf3\x6c\x8f\xf1\x4f\x32\x41\xbd\x75\xbd\x11\xbd\x0e\xf6\x40\x83\x3d\xe5\xe8\x92\xf4\x3c\x4a\x48\xac\x68\x80\xd6\xb8\x1e\xa2\x2e\xda\x40\x7a\xe5\x6b\xba\xac\xa1\xd7\x6c\x52\x60\x05\xa5\xa1\x45\x12\x91\x94\xd1\x97\x35\x8d\x0c\xe0\x2d\xcf\xa9\x9e\x45\x9e\x7e\x3c\xfa\x05\x8f\xcb\x6b\xab\x42\x31\xc9\xaa\x1c\xab\x36\xb6\xe0\xaa\xa7\x4e\xeb\x86\x33\x73\x01\x2b\x6f\x09\x5c\x30\x69\x5a\xb1\xa2\x77\x4a\x81\xcf\x02\x74\x0a\xe0\x67\xfd\x76\xa8\x49\x48\x01\x12\x10\x5b\x7c\xd5\xd8\x29\x74\x34\x00\x0b\x60\xd8\xf1\xa5\x2f\x54\x81\x2a\xc4\x38\xcd\xb6\xc2\x4d\xe1\x2e\x7d\x8e\x9d\xa2\x8a\xbe\x0b\x41\xe0\x53\x5c\xea\x2b\xb0\xe0\x9c\x83\x93\x2c\x2d\xc6\xfb\x46\x4b\x18\x35\x0c\xe6\xd1\xa2\x57\xc5\x63\x41\x2b\xe7\x59\x23\x06\xef\x64\x35\xf7\x58\x4f\x4f\xa1\xc8\x19\x63\xcf\xe2\x4b\xae\x22\xad\x3f\x7c\x9f\x3a\x9e\x4c\x0a\x5c\x3a\x9d\xca\x71\xbc\x1c\x63\xad\x5f\xd1\x78\x1c\xa0\x86\xce\x01\x76\xca\xa8\x24\xe3\xb7\x51\x5e\xbe\x82\x97\x44\x56\xcd\x03\x3b\xbf\xe7\xe9\xa7\xa8\x2b\xa7\x4c\x09\xc7\xef\xdd\x2a\x5f\x47\xe5\x6c\x30\x49\xb2\x2c\xef\xf5\x9c\x16\x37\xd0\xce\x56\x1f\x0d\xd1\xce\x76\x1f\x3d\x44\x3b\xdb\x7c\xd0\x1a\xfa\xa2\xf1\x18\x6d\xa0\x9e\xdc\x74\x0c\xac\x57\xa0\x10\x3d\xd5\xf6\x2e\x84\x76\xb6\x51\x68\x24\x54\x74\x56\xa0\x3e\x40\x9b\x3a\xf6\x73\x5c\x2c\x93\x52\x50\x0f\x9b\xc1\xd7\xcb\xa4\x24\x3f\x93\x72\xc6\xe6\x44\x50\xa0\xd1\xb7\x40\xd2\x51\x60\xce\xa0\xa8\x9c\x8f\x90\xd5\x6f\x9e\xf8\xfc\xa4\x6f\xb5\xea\x5b\x03\x2d\x7b\xa0\xad\x11\x39\xbc\x4e\x67\x4f\x2d\x1c\x9c\x4c\xf8\x88\x79\x67\xf9\xae\x90\xe5\x2f\xa2\xf1\xac\x67\x33\x26\xa2\xd3\x16\xe5\xfa\x95\xf3\xa5\xe6\xea\xac\xaf\x17\x62\x08\x81\xae\x6c\xb8\xda\xce\x9e\xd9\x7d\xb1\x8e\x34\x22\x94\x6b\x97\x52\x31\x4e\x26\x1c\xc4\x9e\x23\xe8\x80\xdb\x25\x81\x27\xf8\xb0\x27\x4b\x6f\xc2\x5c\x8a\x1b\xfb\x08\xf3\x67\x78\x68\x88\xb6\x15\xe8\x35\xc2\x49\x81\xad\xe1\x0d\x87\x28\xce\xd2\x6e\x89\xa2\x38\x46\xbc\x54\x99\x99\x55\x0e\x10\x29\xbb\x05\x8a\x92\x1c\x47\xf1\x25\x1a\x67\xcb\xb4\xc4\x71\x05\x96\xbe\xd2\x38\xaf\xd5\x22\x1c\x0e\xd1\x87\xe3\xe7\xc7\x21\x9a\x90\xe9\x32\xc7\x88\x1e\xd8\x52\x5c\xd0\x13\x20\x3d\xa5\x5d\x16\x26\xb3\xfa\x2d\x88\xe4\x8f\x33\xc9\xe6\x64\x60\x1d\x81\x02\x2b\x15\xcb\x5c\xa2\x35\xc7\x93\x08\xd4\x31\x17\xb3\x2c\xc1\xac\x87\x24\x9d\xae\x37\x30\x82\x1a\x1e\x60\x73\x7e\x3e\xe8\x00\x65\xce\xca\x37\x16\xb9\x98\x93\x46\x51\xdf\xb3\xc5\xf5\x5c\xd5\x98\x46\x40\xac\x61\x74\x11\x29\xb2\x2e\x70\xe9\xcc\x29\x23\xab\x37\xd1\x1c\xdb\xfb\x90\xca\xd1\xe5\x4c\xb7\xac\x67\xf3\xa9\xdf\xcf\x54\xc5\x9e\x3a\x25\x5f\xe4\x18\x54\x52\xad\xf8\xab\x19\xb6\xa8\x64\x91\xe3\x73\x92\x2d\x0b\xd9\xa1\xed\x3d\x8a\x12\x92\x22\x92\x96\x4e\x89\x26\xfc\x6b\xfd\xf5\x35\x48\xff\x26\x59\x8e\xe0\x91\x30\x41\xfb\x68\x6b\x0f\x11\xf4\xbd\x18\x80\x78\x2f\x8c\xc8\xc6\x46\x55\x71\xfa\x67\xf5\x79\x63\x1f\x6d\xf4\x04\x0e\x08\x7a\x84\xb6\xce\xa8\x84\x8f\xae\xae\xd0\xe6\x5e\x65\x25\x35\xac\x9c\xd3\xc3\x06\x22\xe8\x61\xd5\xcc\x6d\xd8\xbd\xa0\xc2\x41\x15\xdb\x17\x7f\xd7\x4e\xaa\x99\x72\xdd\xef\xf5\xad\x29\x1c\x0e\xd1\x84\xe4\x45\x89\x70\x82\xe7\x38\x2d\xe9\xf9\x8a\xa1\x29\x40\xc5\x27\xb2\x40\xa4\x5c\x65\xca\x0d\xec\x6f\xfa\xb0\x4f\xf1\x57\x3b\x03\xf0\x74\x3e\x8e\x09\x6d\x24\x4a\xe4\x22\xe7\xf8\x74\xf8\x8f\x8b\x6f\x3f\x5f\x54\xa4\x53\xc1\x20\x4e\x09\xda\x40\x5b\x67\x82\x4f\xa0\x0d\xe4\x74\xc3\x83\xf6\x46\x04\x5b\xcc\xcf\x03\xc9\xb7\x4a\x0f\xed\x33\xaa\xb8\x31\xeb\xf9\x43\x33\x15\x2a\x6c\x99\x98\xba\xe5\xe2\x6f\xa0\x4c\x54\xc5\x90\x36\xeb\x18\x12\x6a\x45\xd3\x8d\x1c\x65\x38\x44\xe3\x28\x19\x2f\x93\xa8\xc4\x42\xf0\xa1\x47\x3e\xde\x17\x44\x4a\x3c\xbf\x05\x3b\xa2\xac\xe8\xf4\x4f\xc4\x94\xfa\x36\xec\xf5\x4a\xfb\xca\x2d\x27\xe4\xf7\x63\x30\x3a\x73\xf9\xea\xbc\x05\x39\xda\x22\xde\x8f\x06\x6d\x08\xd7\x45\xf2\x9b\xc9\xac\x46\x63\xc4\x20\x5b\x6b\x8c\x44\xba\xbc\xd5\x94\x2a\x11\xbf\x2e\xa9\x5a\x0f\xa2\x35\xec\x11\xff\xa0\x7e\x9f\x8e\x48\x2b\xa6\x74\x44\x0c\x1a\x64\x9b\x36\x68\xa9\x55\x12\x55\x20\xa4\x4a\x47\x54\x8d\x10\x5e\x02\x4e\x18\xd0\x9a\x42\x4c\xbd\x86\x48\x1f\xa2\xef\x74\x6c\xe0\x66\x75\x05\x91\x28\xc5\xa8\x58\x87\x67\x44\x5c\x78\x4f\xe1\xd6\x71\xff\x8e\x35\x4a\x6c\xc8\x3d\x18\x99\x58\x5f\x4a\x2d\x62\xe8\x45\x44\x8d\x4a\xc3\x54\xa7\x72\x50\xa3\x6a\xd4\x33\xe8\x18\x65\x1c\x88\x96\xb9\xeb\x91\xb6\x51\x47\xc9\x93\xa8\x4f\x0e\xe6\x5d\xab\x64\x92\xc3\x21\x2a\x96\x73\x76\x43\xe7\xd9\xa5\xb8\x88\x28\xe1\x79\x75\xa7\xe4\x8c\x72\x45\xf9\x05\x5b\x92\x8f\xff\x88\xe6\x4d\x44\x08\x69\xd3\x41\xc1\x70\x88\x72\x3c\xcf\xce\xe1\x1a\x13\x8d\x97\x79\x4e\xe5\x53\x29\x9c\x66\x90\xcc\xbb\x49\x0a\xe8\xb9\xa7\xb7\xc5\x2a\x1a\x3f\x81\xcc\xd6\x9a\x3f\x63\x64\xe8\x91\x53\x7f\x6b\x4a\x7b\x6f\xad\xc3\x8a\x6b\x1d\xef\xa9\x55\xf0\x38\x0f\x95\x95\xd6\x95\x83\x20\x2b\xba\x83\xe9\x97\x24\xe6\xfd\x05\xeb\x2d\x6d\x6b\xcc\x6f\x99\x74\x53\x0b\xe8\x7d\x8f\xd9\xab\xda\x26\x18\xfc\x5a\xb4\xd7\x0f\xbc\xd9\xcf\xb2\x2c\xa9\xca\xa3\x42\x48\x45\xd6\x49\x4d\x9e\x7e\xb9\x59\xd9\x6c\x5d\x26\xe3\xc2\x55\xb9\xef\x70\x54\xd9\xe3\x13\x96\xb9\x46\x09\xc2\xb5\xdf\x00\xd4\x49\x9b\x0d\x61\x38\x1b\xee\x06\x1d\x76\xf7\xdb\x09\xbf\x81\x9f\xb4\x6f\x9d\xf0\x31\xfd\xad\x5f\xc7\x76\xc2\x27\x81\xcf\xd6\x83\xa4\x65\x27\xdc\xda\xa4\x3f\x73\x1c\x25\x9d\x70\x6b\x9b\xfe\x66\xb7\xb2\x9d\x70\x6b\x87\x7e\x2d\x19\x14\x34\xb0\xe4\x60\x8f\xaf\xcf\x82\x27\xbf\xa5\x5d\x54\xc3\x35\xf4\xcd\xac\x89\xf4\x4a\x56\x31\x2a\x32\xcb\xd9\xb6\x45\x7a\xee\x8a\x26\x46\xfe\xa2\x35\x96\x46\x66\x4f\xda\xd4\x75\x0b\xbb\xa3\x0a\x63\xa3\x56\x8d\x6a\x57\xe2\xde\xe9\x12\x6c\x27\x5f\xe2\x16\x26\x4c\xd6\xb0\x9b\x2d\x99\xbe\xbb\xb7\x64\xba\xb7\x64\xfa\x6f\xb1\x64\x52\x0b\xe1\xae\xcc\x99\x9e\x91\xe9\x9b\xe5\x7c\x04\xac\x50\x72\xe7\x11\x99\xa6\x90\x38\xf8\x45\x72\xf2\x65\x49\x12\xd3\xbe\x66\x30\x84\x34\xf6\xaf\x00\x1b\x7b\x41\xc6\x59\x3a\x21\x8e\x31\x90\x38\x99\x69\xbb\x02\x9c\x5d\x60\x5b\x10\x03\x67\xbc\xba\x40\xc0\xef\x11\x3c\xd8\xa0\xe7\x2c\xca\xb7\x94\x95\x2c\x2c\x05\x3a\x37\xa0\x9c\x79\x48\x71\xcc\x20\x49\x81\x52\x3c\x8d\x4a\x72\x8e\x03\xc1\x89\xe0\xe2\xa8\xbc\xc8\xba\x05\x1a\x67\xf3\x85\x90\x56\xa1\x14\x9d\x5b\x59\x72\x92\x64\x51\x49\xd2\x29\x5a\x64\x24\x2d\x03\x76\x1d\x4a\xc9\x3e\xce\x2e\x52\xeb\x4c\x67\xaa\x49\xdc\xe3\xdb\x15\xc3\xf2\x95\xc4\xf7\xb5\x18\x0b\x5d\x4a\x29\xc6\x31\x9c\xa2\x47\x6a\x8e\x63\xbf\x31\x0c\x20\xed\x5a\xda\xf9\x98\xed\x1a\x0c\x18\xea\x17\x5c\x58\xb6\x3b\x60\x73\xd1\x1b\x0f\x5e\x7c\x78\xf9\xf1\xd9\xd1\x4f\x6f\x4e\x5e\x3f\x7b\xf1\xee\xe3\xbb\xe3\x93\x37\xcf\x8f\xde\xfc\xf4\xf1\xf5\xf1\xf3\x17\xda\x19\x4e\x6a\xe2\x60\x26\x07\x8b\x28\x7e\x85\x27\x65\x8f\x7d\x95\xd9\x87\x8b\xac\x38\x94\x58\xe4\x6d\x0e\xca\x8c\x8b\x4b\x5b\x8f\xfb\x01\x7a\xbc\x6b\xde\xf0\xe8\xbb\x25\x0c\xa7\xc7\x1a\x31\x0d\x30\xcc\x89\x17\x87\xdf\x0a\x9c\x3f\x93\x67\x63\xf3\xd0\xbc\x2a\x0e\x5d\xa9\xc3\xc0\xa2\x07\x21\x65\xf6\x12\x7f\x16\xe3\x2e\x96\xa3\xa2\xcc\x7b\xdb\x1a\xfe\x12\xeb\x6a\x9f\x15\x17\x5a\xee\x0d\xf4\x78\xa7\x8f\x86\x3a\x8a\x6c\x74\xbf\x23\xd3\x59\xc9\x8b\x05\x28\x41\x0f\xbf\x32\x3e\xf9\x0e\x7c\xa7\x68\xad\x94\xe9\x6e\x8d\x5d\x71\x3c\x33\xd1\x2a\xb5\x73\xbf\xdb\x0c\x58\x6a\x53\xd6\x58\x7f\xc0\xd6\xfc\x06\x6a\x9e\xa0\x26\x4e\xc7\x24\xf9\xea\x15\xf1\x5e\xe4\xdf\x76\xee\xa4\x71\x67\xfb\x59\x9b\xe4\xd9\xfc\xa4\x9c\x3c\xb9\x9f\x38\xcf\xc4\xf1\x77\x46\x55\x8c\x8c\xbf\x42\x12\x93\x46\xbf\x71\x94\xae\xce\xc8\xec\x27\x47\xd5\x73\xd6\xdd\xbc\xdd\x5f\x17\x6d\xf0\xea\xd1\x53\x84\xba\x5b\x5d\x14\xa2\xee\x66\xf7\xf6\x3c\xaa\x09\x93\xf4\xc4\x4a\x4b\xfd\x83\xc2\x15\x88\x0a\xc6\xf3\x65\x52\x12\x26\x54\x8e\x2e\xd1\xf6\x7f\xe6\x54\x3c\x97\x36\x74\x11\xad\xb9\xc4\x53\x9c\xd7\x6c\x25\xef\x78\xad\x4d\xfb\xf7\xaa\x33\xc2\x6d\x99\x2b\x66\x84\xa3\xc9\xa2\x3e\x8a\x35\xd9\xa2\xdc\x5c\xc9\x1c\x17\x56\xd6\x76\x7f\xb0\xc8\x2e\x7a\x5b\xdb\x4f\xfa\x7d\x13\xa5\x87\x33\x3c\xfe\x84\xc8\xc4\xc0\xa9\x26\x16\x59\x88\x28\xc8\x34\xc5\xf1\x51\xf1\x46\x65\x3b\x8a\x68\x59\xc7\x0c\x7f\xe6\x3d\x36\x91\x21\x88\x16\x0e\x7d\xd0\x76\x69\x4a\x62\x19\x3d\xb2\x5c\x10\x2a\x86\x47\x49\xa1\xac\x96\xed\xd6\x1b\xf1\xe5\xc3\x90\x60\x37\x9b\x01\xda\xea\x07\x68\xeb\xb1\x26\x8f\x6c\xf7\x8d\xdc\x3e\xda\xdf\xdf\xa7\x24\xeb\xa5\xc2\x9c\xb2\x8f\x47\x51\x02\x9d\x42\x4c\x75\xa0\x2e\x3c\x98\xa8\xe9\x12\x11\x53\x24\xd8\x42\xa0\x41\x1e\x8e\x1d\x2c\xc5\x99\x12\x0c\x6b\xda\x95\xc2\x21\x2c\x0b\x32\x45\x4c\x4e\xb7\xe8\x4d\x76\xc1\xc0\x9f\x61\x14\x4b\x81\xd9\x3c\xee\xb3\xde\x68\xba\xcc\x5e\x1f\x5d\x5d\xa1\xce\x66\x87\xeb\x88\x87\x43\x34\x96\x54\x44\x85\x67\x31\x91\xb2\x75\x06\x44\x4a\x36\xd1\x52\xd2\x76\x85\x6c\x71\x7f\x6b\xcd\x33\x9f\x5b\x8f\x0a\xd2\x33\xbf\x6c\x4a\xe7\x24\x5d\xda\xab\xa0\x3b\xb9\xe5\x5f\x17\xea\x16\x95\x6f\xc9\xeb\xb1\x16\x1d\xba\x01\x05\x2d\xeb\x49\xe8\xa4\x96\x86\x7c\xd4\x83\x57\x22\x1f\xde\xbc\x4b\x38\x27\x77\x41\x39\x5f\x07\x65\x9c\xe5\x57\xa1\xcc\xe1\xdd\x8d\x28\x03\x8c\x69\x22\xb1\x89\x22\xde\x9c\x8b\x22\x87\x99\xfb\x2c\xce\xad\xc5\xc8\x61\x06\x31\x39\x27\x31\x8e\x9f\x5d\xd6\xf0\xf0\x9b\x50\x53\x03\x6e\x4e\xee\x1a\x39\xcb\x4a\xec\x9c\xac\x8c\x9e\x93\xdb\xe0\xc7\xbd\x85\x65\x55\x4b\x14\x55\x49\x5c\xea\xc1\x74\x6b\xbc\x88\x9d\xcd\x9c\x8b\x4a\x1c\xf1\xa6\x5d\x14\x39\xf2\x99\x0f\x43\x9e\xe5\x05\xfb\xd5\x2d\x05\xb6\xad\x2e\x7a\xca\xb6\x66\xee\x19\x63\x35\x6c\x56\x9e\x1c\xb5\x77\xb9\x35\x7b\x5f\x82\x27\x0a\x71\x54\x82\xa8\x39\xdb\x38\xa2\x47\x1a\xcd\x31\x7b\xe0\x43\x7f\x59\x22\x18\x87\xa1\x75\xca\x1a\x3c\x98\x77\x0e\xa1\xd0\x46\x80\x74\x65\x39\x2d\xc4\x9f\x58\xa3\x7d\x54\xf5\x52\xf7\x61\x7f\xa8\x1d\x69\x0a\xf2\x2b\xe7\x89\x05\xdc\x52\xf1\xf2\xa7\x5b\x67\xa6\x28\xdc\xdd\xfc\x4c\x45\x66\x77\x72\x07\x45\x42\xc6\x98\x4a\x26\xdb\xe8\x21\x54\xb7\x22\x9d\x37\xcc\x8c\x7e\x0a\xbf\xb3\x09\x5a\x15\xfd\x95\xaa\x00\x67\x93\x91\x47\x44\x8b\x0f\x30\xc4\xf1\x4b\x30\x1b\x73\x8f\x77\xfb\x7c\x0f\x2f\x33\x0e\xdf\x47\x0f\xc5\xa9\xd2\x37\x03\x56\x45\x4c\x3a\x7c\xbc\x1b\xf0\xf6\x57\x9b\x82\x9a\x53\x39\x1b\xbe\xe7\x58\x7e\xa7\xd8\x8f\x8a\x31\x21\x75\xf8\xf7\x1c\xe7\x7f\x43\xcc\x0b\xad\x0e\x68\x07\xda\xe1\x7f\xb5\x09\x50\xee\x69\xaa\x66\xe0\x40\x39\xb0\xa9\x98\x82\x4a\xde\x5e\x81\x72\x59\xa1\x8b\x6d\x9f\x03\x9b\x15\xa4\x29\x03\x77\x9d\xcd\xcf\x1d\xb4\x81\xf8\x19\x07\xd0\xce\x7e\x4b\xb3\x82\xdd\xcd\x00\xe9\x49\x55\x3e\x03\xbe\x08\xd3\x0f\xed\xac\x19\x5a\xdf\x81\x0d\x03\x2b\x36\x74\x52\x1c\x38\x7d\x81\x87\x55\x19\x4e\x29\x86\xcc\xd0\x4d\x72\xfb\x91\x65\x49\x68\x27\x38\x50\x54\x02\x09\xed\x04\x1d\x4a\x8a\x65\xa1\x9d\xe0\x42\x9d\x38\x60\x27\x5e\x38\xbd\x51\x95\xe2\xa9\xcf\x05\x3c\xf1\x43\xea\x83\x55\x29\x1e\x38\x1d\xdb\x5a\x92\x0b\xe9\x9b\x1e\x37\xc7\x2d\x67\x4e\x90\x9e\xe6\xc2\x72\xaa\x0f\xbd\xeb\xee\x5a\x5c\xeb\x9a\x97\x43\x9d\x70\xeb\x49\xd0\x31\x2f\x95\x3a\xe1\x36\x58\x30\xc0\xc2\xe8\x84\x5b\x5b\x41\x47\xbf\x9a\xea\x84\xe6\xe7\xf5\x59\xb0\xb5\xf9\x3b\xbb\x74\x39\x62\xb6\xf1\x35\x3e\x88\x48\x5a\x56\xb9\x20\xe2\xb7\x57\x24\x2d\x99\x77\x16\xfa\x63\x57\xfe\x3a\x53\x89\x3b\xda\x6f\xcb\x79\x0b\x49\x4b\xe6\xba\x85\xa4\xe5\xe3\x5d\x09\xf6\x44\x55\xb4\xfd\xcd\xe3\x8a\xba\x28\x7c\x83\x2b\x23\xfb\x68\xf8\x15\xbd\x71\x01\xb8\x6d\x86\x70\x94\x96\x2b\x5a\x5e\x18\x25\x6a\x0c\x2e\xa0\xb9\x9a\x92\x37\x32\xaf\x20\x69\x29\x44\xc5\xa7\x37\x72\xe9\xc2\x7a\xd5\x6c\x06\xb1\xd5\x2a\x8a\xdd\xbd\x1d\xc4\xbd\x1d\xc4\x9f\xd7\x0e\x02\x29\x43\x08\x26\x2a\xdd\x91\x0d\x44\x0b\xd3\x06\x9b\xd5\x33\xd3\x85\x0c\x0c\xd2\x95\xe7\x8e\x81\x47\x42\xbd\x98\xe1\x54\xbe\x57\x0c\x98\xed\x37\x15\xc0\xa5\x03\x07\x21\x59\x0e\xbd\xb6\x11\x96\xfa\xdb\x7e\x9e\x08\x9c\x54\xc8\x8f\xec\xff\xab\x2b\xd4\xed\x6a\x7c\x36\x13\x2f\x17\xd8\x8f\x3d\xed\xa9\x21\x49\x79\xeb\xad\x3d\x7e\x4c\x71\xa9\x9b\xfc\x82\x01\x79\xb7\x10\x0f\x41\x81\x97\xd0\x4a\x0c\x6b\x77\x25\xdf\x33\x63\x57\x53\x8a\x16\x6a\x26\x55\xab\x5e\x19\xea\x89\x3e\xf6\x0d\x83\x76\x40\x8f\x6e\xd0\x6e\x37\x52\x6b\x8a\x06\x56\xfe\xc6\xb1\x43\xbf\x7e\x6c\x8d\x8c\x71\x8e\x29\x31\x89\xf5\x60\xba\x65\x61\xe4\x1e\x93\xc9\x04\x83\x41\x32\x43\xb9\x75\x2e\xb9\x90\xef\x42\xf4\xe3\x88\x40\x09\x9f\x25\x61\xbb\x9c\x7a\x0f\x21\xe6\xd1\x85\x6e\x87\xbe\x7e\x44\x0b\xc6\x61\x64\x2f\xaa\x51\x79\xe1\x7f\x33\x6b\xd2\x5d\xe5\xad\x9e\x22\x48\x49\xaa\xab\x60\x34\x9b\x8f\x48\xea\x7a\xb8\x29\xb3\x29\xa6\xdc\x9d\xd6\x80\xa7\x03\xb6\xa8\xa2\xc5\x02\xa7\xb0\x96\xa2\x94\xbd\x81\xb0\xb0\xcb\x6b\x6b\xba\x87\xe1\x8c\x69\x46\xc6\x94\x3d\x89\x5e\x35\x17\xe6\x17\xa8\xd9\x84\xc3\xc2\x3e\x54\x8b\x5a\x31\xbc\x26\xbd\x5f\x1d\x5a\xa5\xde\x82\x5d\x99\xec\xa1\x66\xec\x8e\xa3\x24\xe1\xf8\x15\xd7\x38\x6c\x44\xb3\x48\x2d\xdd\x82\xfc\xca\x9d\x0b\xc2\x75\xdd\x2c\x2a\x02\xfa\xbf\x20\x34\x70\xff\xeb\xb9\xb7\xd3\xf1\x2d\x6d\x41\xfd\x3a\xd3\x5a\xd4\xf8\xbd\x33\xf9\x16\x2e\x5f\x15\xeb\xfb\xfb\x20\x5d\x4c\x48\x6a\xbd\x55\x6a\x42\x82\xf2\x5a\xc4\xab\xe2\x37\xcc\xb6\xd2\x80\xe5\x1e\x14\xcf\xaa\x8f\xfe\x4c\xe3\xeb\x6a\x68\x5a\x2c\x33\xa3\xf6\xba\x41\xaf\xc3\xa8\x95\x0b\x80\x3e\x7a\x8a\xba\x5d\x14\xb6\x33\xc8\xd2\x50\xe6\x35\xcb\x5a\x01\x6f\x94\xf7\x33\xe5\x84\x94\x19\x7d\xcf\xbd\x94\xfe\xc2\x8f\x33\xb1\xf7\x88\x5b\xe1\x48\x67\xf8\xd1\x5c\x27\x32\x20\xf1\x5a\x2c\xaa\xc6\xbc\x28\x04\xbf\x4a\x36\xfe\x7c\xfe\x99\xe4\xf2\xda\x43\xec\xca\x0f\x55\xd0\x1d\x9f\xb0\xde\xea\xa8\x33\xb6\xb5\x0a\xdc\x69\x9b\x92\x1f\x79\x22\x21\x12\x97\xf0\x2d\xb0\x88\xe7\x8b\xf2\x52\x57\x09\xb6\xd8\x44\x1b\x57\xa1\x49\x8f\x1a\x7b\x0a\x41\xfa\x58\x01\x37\xc2\xe3\x54\xa5\xaf\x29\x2f\x26\x6a\x07\xc2\xab\x6c\x1a\x83\x71\xb1\xb2\xe1\x11\x0b\x6e\x32\x0e\xf5\x18\xaf\xda\x3f\xd4\x2b\x52\x94\xce\xcb\xbf\x53\x63\x34\x67\x1e\xa7\x50\xb5\xa3\x57\x35\xbb\xdb\x8b\x7c\x17\x24\x6e\xea\x97\x8b\x98\x59\xb6\xf2\x77\x70\x52\x15\x59\x66\xa5\xf6\xd6\x95\x15\x16\xc2\x11\xf3\x3b\x84\x8c\xb7\x7d\xf2\x09\x21\x07\x35\x9f\x15\x19\x7b\x9b\x5c\x8f\x6c\xfb\xaa\x58\x90\xf6\xed\x97\xed\x2c\xc4\x6c\x1e\xed\xeb\x3d\x56\xb0\xfa\x30\x36\xf6\x5d\x45\x3f\x7f\xad\xe5\xbe\xd0\x62\x90\x4a\x04\xea\x65\xfa\xab\x5b\xf9\x6a\x6e\x38\x14\xd3\x8d\xcf\x71\x7e\x59\xce\xc0\x17\x89\x56\x8f\x8e\x1d\xd7\xf1\x94\xb0\x48\x73\xf0\x63\xbc\xd4\xf5\xdf\x50\x48\xdf\x4b\x77\xda\x84\xab\x74\xbe\x0e\x50\xb7\x2b\x94\xef\x35\x4a\x8a\xb7\x6c\x96\x2c\x9d\x9e\x54\xdf\x5d\x9f\x05\x5b\xad\x62\xed\x7d\x45\x9d\x1c\xdc\x46\xd7\x2b\xe5\x72\x0a\x52\xa1\x95\x13\x66\x66\xf4\x7f\xa6\x2a\x83\x5f\xbb\xea\xe7\x99\x96\xbc\xa3\x7f\x58\xba\x39\x9a\xc6\x94\x73\xf4\x97\xd0\xce\xd1\xdf\x4f\xb4\xea\x34\xfd\x9c\x53\x63\x0b\x0d\x9d\x73\xf7\xbe\x8a\x8a\x8e\x16\x5e\x45\x47\xc7\xe0\x6d\x25\x1d\x4d\x5d\x51\x4b\x67\x16\xa9\x51\xd3\xb1\x16\xeb\xca\xde\x44\x51\x47\x71\x5b\xa1\xa8\x6b\xe7\x28\x9f\x77\xab\x85\xa2\xae\x55\x34\xaf\xaf\xf5\xb8\xce\x73\xfb\xb7\x0a\x79\xb0\xe2\xab\x10\x88\x28\x61\x93\x08\x4b\x5f\x91\x48\xec\x42\x35\x64\x22\xda\xad\x2f\x7f\x23\x9d\x2e\x93\xa4\xda\xbc\x99\xf3\xb4\x77\xb7\xaf\xe5\xe4\x28\x5b\xd0\xdd\xdd\x47\x1f\xa9\x7d\xbf\xe3\xe1\xc3\x9a\x8b\x5b\x52\xb4\xf7\x6d\x3b\xc6\x79\x19\x91\xd4\xef\xdf\xd6\x41\x24\xbb\x4d\x6a\x20\x6a\x06\x34\x30\xd3\xeb\xc9\x9a\x17\xb1\x32\x1a\xbd\x41\x94\x38\x9f\xd3\x23\x3f\x99\x40\xcd\x66\xbf\x63\xee\xb5\x16\x4d\xc9\x39\x4e\x85\x49\x8b\x79\xa4\xae\x72\x97\x6b\xd9\xbf\xb0\x63\xb6\xb2\xb8\x05\x2c\xb3\xca\x9d\x76\xfd\xf6\xb7\x3a\x44\xfb\x25\xc2\x9c\xd3\x76\x4a\xaf\x70\x9c\x9d\xe3\x3c\xbf\xc8\x49\x59\x62\x30\xf7\x62\xbd\xea\xa0\x0d\xe8\x7d\x6b\xdc\x5d\x80\x96\xbd\xd0\x1f\xf2\x83\x15\x84\x3a\x8a\x92\x94\xa3\xb0\x74\xfd\x0e\xdb\x6f\xed\x5b\x21\xd3\xd5\x4a\x5a\xcd\x29\xad\x6d\x05\xde\x3c\x2e\x04\xfc\x18\x1c\x0e\x41\x15\x1e\xcd\xe9\xaa\x00\xaf\x87\x5c\x9b\x45\xc7\x4b\x39\x01\x66\x77\x0c\x09\xf9\x84\x51\x84\x0a\x92\x4e\x13\x2c\xfd\x70\x01\xe4\xc0\x30\x89\x06\x0a\x66\x6e\x66\x98\x5b\x0e\xd6\xda\xd5\x15\x3a\xed\x9e\x6e\x9d\x75\xcf\xfa\x52\x18\x6c\x70\x03\xc0\xbb\x67\xe2\x9d\x7e\xe9\xae\x0d\x2b\x44\x77\x66\x03\xc5\x50\x01\xb6\x0a\x5b\x01\x7a\x04\xf6\xd8\x9b\xd0\x97\x2d\xdd\x11\x8d\xea\x90\x23\xc8\x0a\x47\x0d\x81\x70\xed\x50\x75\x5a\x10\x0e\x1d\x1e\x0a\x40\xd5\xc0\x70\x88\xa2\x24\x41\xa3\xa8\x20\x63\xe6\xff\x00\x1e\x0b\xec\x6c\x73\x05\x4e\x92\xd1\x93\xb1\xe8\x4d\x80\x76\xb6\x9b\x8c\x4e\xcc\x85\xcd\x39\x9a\x38\x81\x0b\x5d\x24\xc2\x53\x10\x20\x21\x28\xd4\xe9\x59\x07\xed\xff\x00\xeb\x53\xa5\xed\xb2\xc4\x5a\x65\xda\x81\xa8\x6d\x55\x0e\x30\xc3\x95\x3d\xab\x59\xed\x7a\xab\x95\x34\xab\xdc\x7e\x19\x0e\x61\x1c\xa2\xdb\xb3\xb6\x51\xad\xc8\x83\x07\x48\xff\x3e\xd5\x7e\x6b\x2e\xe0\xce\xc4\xae\x2b\x23\x63\x0c\xa7\x37\x9a\x1b\xbe\x7c\xeb\xa6\x46\xcc\x82\x39\x37\x7c\xc2\xcc\xa9\xd1\x3c\xae\xdd\x72\x66\xac\x7e\xd5\x4c\x8c\xd6\xe6\xd7\x9e\x97\xbb\x9c\x18\xd3\xf5\x89\x62\xa4\xda\x4c\xc0\xd9\xa8\x03\xb6\x08\xdb\x0c\xe9\xec\x90\xd4\xe1\xc6\x0a\x5b\x7c\x2a\xb6\x76\x25\xe0\xf6\xd9\xe9\x0e\x07\x15\x69\x0c\x44\x42\x6c\x9d\x59\x09\xea\xdb\xdd\x1d\x00\xab\x37\xd8\x1e\xf4\xb1\xf0\x21\x36\xef\x09\x5a\x63\x77\x34\x91\x64\x82\x7a\x5a\x96\xc6\x21\x6d\x7e\x7c\xc3\x89\x05\x86\xed\x7b\x0d\xb1\x55\x33\xe5\x7c\x93\x10\xa7\x6a\xdf\x3c\xc3\xbc\xf9\xa6\xba\x23\xe3\xef\x39\x13\xce\x3f\x3b\xc6\xbc\x1b\x15\x9d\x9a\x95\xeb\xd3\xad\xbc\xaf\xb5\x9a\x67\x99\xc1\x86\xc2\xf3\x2b\xe7\xd7\xf0\xa2\x58\xb9\xdb\x73\x6f\x45\x49\x54\x94\xe8\xf4\x8c\x0a\x13\xac\xde\x1b\x4d\xfb\xba\x7f\xde\xe5\x1c\x80\x9c\x85\x1c\x1f\x4b\x70\xa0\x51\x2f\xa1\xe0\x53\xd2\x40\x1b\x22\xa9\x31\x8e\xd5\x8e\x30\x92\x03\xdb\x37\x4d\x68\x74\x89\x62\x3c\x89\x96\x09\x28\x42\x8b\x25\x95\x53\xe5\xc6\xdc\xe1\x6e\x6a\x02\x1e\xe6\xd1\x9e\x45\xe3\x18\x75\x03\x06\xac\x76\xc4\x15\x45\xe1\x96\xa7\xb7\x4a\xa3\x7a\xe1\xab\x5d\xe8\x88\xb5\x25\x52\xd8\x6b\x04\x28\x9e\x93\xf2\x69\x87\x52\x7c\x80\x3a\x74\x11\xd0\xff\xce\x3a\x67\x8a\xda\x39\x84\x96\x06\x85\xd2\x65\x62\x3f\x7b\xd0\x66\xb3\x15\xda\x6c\x07\x73\x56\x7f\x1b\x16\x82\xeb\xa4\xca\x59\x09\x6c\x6f\xe0\xce\xf2\xd8\xac\x17\x70\xc3\x4b\x87\x63\x8c\x97\xfe\x0b\xab\xde\x22\x62\xce\xad\x7a\xff\x3e\x65\xa7\xf1\x7f\x9f\xf5\x9b\x45\x04\xae\xbc\x95\xde\x1e\xaa\xef\x1d\xac\x30\x16\x02\xba\x3d\xeb\x10\x6f\x4f\xdd\xbb\x2c\x0b\x67\x9e\x4b\x0b\x7e\x8f\x6e\x6f\x0c\x5e\x7f\xd4\xe6\xad\x0c\x77\x85\x2a\x9c\xa0\xda\x6c\xa1\xc1\x1b\xac\xb4\xff\xd6\x8d\x89\xf7\x50\xe5\x9f\xdf\x31\xaa\xeb\x57\x16\x27\x13\xdd\x9f\x2c\x67\x65\x4e\x21\xf9\x32\xf9\xf4\xcc\xe7\x44\x7c\xb0\x58\x16\xb3\x9e\xe3\x99\x54\xbc\xd4\x16\x6e\x46\xdd\x9a\xe9\x58\x5c\x9f\xeb\xe7\x3e\x07\xa0\x7a\x4b\x9a\x1f\xcf\xde\x79\x80\x74\xff\xb2\x96\x7b\xd2\x5b\x39\xf5\xe5\x13\xa8\x3b\xf3\xbd\xf5\xfc\x41\xd7\x1d\xa9\x83\x23\xfe\xb7\x9f\x3f\x9f\x47\xd6\x06\x4f\xac\x95\x13\x41\x67\x13\x5c\xa5\xd6\xcc\xc7\xca\xb3\xb1\xe6\xdc\x11\x5a\xba\x23\x63\x49\x6a\x1e\x6d\xdb\xf8\x04\x65\xf7\xa3\x93\x3c\x9b\x7b\xcd\x0d\x18\x94\x8f\xb7\x8c\xec\x07\x3b\x96\x81\x90\x61\x19\xb4\xc2\x83\x29\xc1\xd4\x58\xcb\x2d\x58\x14\x1f\x88\xce\xa2\x0c\x7f\x9a\x0d\xac\xea\xab\xf0\x2a\xd8\x9b\xf4\x1b\x4b\x26\xe8\xf2\x27\x3e\xd0\x3d\x21\xe8\x70\x74\x3d\x44\xdb\x60\xfc\xd0\x17\x1e\x9d\x39\xf2\xaa\x16\x51\x6d\x9d\x7a\xf3\x4e\xc5\xbe\x15\x05\x05\xde\x97\xec\x8e\x5d\x2f\xbd\x81\x76\x98\xd3\x7b\xb6\xdb\x16\x14\xa4\x40\xd1\xa4\xc4\xb9\x5c\x24\x7a\x7f\x6f\xb4\x56\xfd\x65\x7c\xbe\xbb\x15\xe7\xa8\xf0\xd9\x8d\x6a\xb1\xc7\x43\xc7\xbc\xa9\xaa\x5f\xf7\xeb\x51\xe9\x46\xda\x8e\x79\x53\xcb\x68\x5a\x72\x1a\xf4\xb0\xbe\x6f\x14\x76\x63\xbf\x1e\xa6\x15\xa3\x32\x1d\xce\x6a\xd3\xbe\x81\xc8\xdd\x72\xad\x3f\xc4\x1e\xa2\xff\xb5\xa4\x7e\x61\x90\xda\xf2\xef\x0f\x45\xfc\xf7\xb4\xaf\xfd\xfd\x2e\xb4\x8f\xbc\xa4\xaf\x07\x68\xbc\x29\xe9\xdb\x61\xc4\x56\xdc\x54\x1c\x62\xb5\xeb\x6f\xb7\xb3\x98\xbd\x58\xa5\x7e\x3e\x7f\x5e\x7a\x4b\x1c\xfa\xf2\xaf\xbf\xea\x25\xbc\xe0\xb7\x7e\xae\x91\x6a\x53\xf7\x7b\x68\x0b\x6d\x98\xbd\xeb\x33\x9f\x4c\x2c\x92\x98\x67\xea\x99\x07\x62\xeb\xd2\xcd\x78\xb0\x5d\xe3\xcf\xde\xc0\xb5\x65\xf1\x65\x70\xb1\xb5\x15\xc7\xa6\xcf\xb9\x5c\x59\xdb\x7d\x53\xad\xea\xbd\x48\xb4\xba\xde\x78\xc1\x5b\x7d\xb5\x2b\xdf\xc4\x5d\x9f\x05\x5b\xbf\x77\xe8\xfd\x93\xe6\x67\x6f\xcb\x9a\x77\x6f\xdc\x13\x09\xfc\xcf\x6c\x5d\x96\xea\xe9\xdb\x52\x7b\xfb\xb6\xd4\x1f\xac\x2d\x3d\xaf\xdf\x96\xf2\xf9\xdb\x52\x7b\xff\xb6\xd4\x1e\xc0\x2d\xcd\x17\x70\x4e\x8d\x2d\x2c\x6c\x1c\xff\x28\x5f\xf1\x11\xdc\x89\xf7\x15\xdc\xc9\xea\xcf\xe0\x4e\xda\xbe\x83\x3b\x71\x1f\xc2\x9d\xdc\xc1\x4b\xb8\xe5\xad\x9f\xc2\x9d\xb4\x7e\x0b\xf7\x7b\xc7\xf5\x3f\x69\x61\x71\xb6\xac\x33\x39\x13\xae\x55\xd8\x0f\x4e\x9c\x9a\xd5\xd9\x52\x37\x3b\x5b\x1a\x56\x62\x4b\x9f\xe1\xd9\x52\x59\x9e\x2d\x75\xd3\xb3\xa5\x6e\x7b\xb6\xb4\x8c\xcf\x3c\xf5\xb6\x59\x1c\xbf\xa9\xfd\xd9\x89\xdf\x00\xed\xe4\x06\x16\x68\x27\xad\x4d\xd0\x4e\x3c\x36\x68\x76\xe9\x9b\xad\x91\x1a\x33\xb4\xb6\x8b\xa4\xbd\x21\xda\xb7\x6d\x56\x49\x77\x59\x60\x50\xcc\x8e\xcb\x2e\x0b\xc8\x37\xcd\x10\x4e\xcf\x51\x9c\x61\xb0\x56\x80\xd7\x81\x51\x1a\x83\x0f\x5b\xf4\xcf\xd7\xaf\x5e\x96\xe5\xe2\x1d\xfe\x7f\x4b\x5c\x94\x6b\x20\x98\x5d\x2e\x70\x36\xb1\x72\x98\x1f\x1b\xf9\x7e\xa3\x2b\xf0\xc2\x1b\x1e\xd8\xd0\xe8\xcb\xf5\xde\x9a\x11\x2c\xb2\x12\xd2\x4c\x00\x49\xfd\x97\x62\x46\x77\x1f\x32\x4d\xb3\x1c\x87\x09\x49\xf1\xda\x35\xb3\x58\xa5\x78\x68\xe5\xed\xfe\xfe\xe5\xec\xfd\xcb\xd9\x3f\xf1\xcb\x59\xf6\x6a\x96\xdb\xb0\x19\xcf\x66\xd9\x86\x83\x6e\xf6\x7a\x96\xef\x7d\x27\x25\x49\xa0\x4e\xa6\xcf\x84\xb5\xc3\x9e\x27\x39\x60\xa4\xbc\x94\x2c\x51\x15\x19\x27\x51\x51\xa0\x53\x28\x72\xc6\xbb\xc9\x32\x14\x13\x66\x55\xad\x0d\xe1\xde\x08\x56\x29\x57\xae\x52\x0e\x82\x6a\x9c\x59\xb7\xf7\x73\x0e\x90\xb4\xa6\x93\x37\x47\x1f\xde\xd3\xb3\x35\x4c\x42\xf7\x02\x93\x2e\x23\xcd\xee\x27\xed\xf7\x6b\xed\xf7\x4f\xda\xef\xe2\xd7\x68\x94\x89\x8f\x09\x49\x53\x7c\x29\xbf\xf0\xbc\xcc\xe0\x29\xa3\x48\x59\x90\xb1\x99\x90\x46\xa9\x99\x30\x27\xe3\xdc\x4e\x49\x12\xe2\x14\x32\xe0\x0d\x50\xf1\x61\x14\x99\xe6\x51\x1a\xcb\xa1\x18\x59\x3f\x19\x5f\x1f\x8c\xaf\xb7\xc6\xd7\x0b\xe3\xeb\xff\x8c\xaf\x7f\x19\x5f\x6f\x8c\xaf\xe7\xc6\xd7\x3f\x8c\xaf\x13\xf6\xb5\x76\x56\xed\xba\x86\xce\xd1\xdb\x83\xe7\x74\x8a\x43\xb4\xb3\x1d\xc8\xc4\xf7\x47\x3f\xbd\x39\xf8\x70\xf2\xee\xc5\xc7\x57\x2f\xde\xfc\xf4\xe1\x65\x88\x76\x55\x26\xcc\x6a\xa8\x7e\xaa\x9c\x0a\xca\x09\xd1\x17\x64\x25\x28\x3f\xea\x90\xf1\xf1\xf9\xf1\xcf\x6f\xd0\xb5\xaa\xe9\xed\xf1\xab\x57\x14\xfa\xc3\xd1\xeb\x17\xc7\x27\x1f\x42\xb4\xb5\xb9\xb9\x39\xe4\x3d\xe4\x37\xde\xcf\x92\x6c\xfc\x29\x44\x5d\xca\x3a\x8b\xb2\x6b\xe4\x1d\x8c\x21\x94\x71\xa8\xde\x36\xb2\x07\x18\x74\x3f\x6f\xf2\x7d\x72\x1f\x0a\xe3\x7e\x23\xfb\xab\x6f\x64\x6b\xd2\x05\x44\x31\x8b\x76\xee\xca\x03\xc4\x61\x7e\xb9\x28\xb3\xbf\xbf\xd7\x37\x87\x31\xa4\x3d\x52\x11\x30\x68\x83\x5e\x80\x21\xcd\xe9\x7a\xa3\x3b\xb9\xee\x1b\x80\xe2\x0a\xfd\x81\x2a\x4f\x42\x0f\x1e\x88\xdc\x81\xf0\x17\xc1\xc4\xe4\x19\xfe\xdc\xb5\x5f\xd1\x19\x9e\xbf\x7e\x40\xdb\xb4\xb4\xed\xfd\x78\x5b\xb8\x8b\x34\x8b\x23\x71\x19\x2e\x2f\xf8\x2d\xff\xec\xc8\x7a\x6d\xc7\x40\x05\x8e\x68\xe7\x06\x2f\xf1\xe7\x01\x68\x2f\xb9\xe7\x5e\x9f\x8d\x11\xc5\x8a\x18\xb6\x6a\x9d\x9d\xe8\x98\xfa\x2d\x44\xdb\xdf\x3c\x66\x25\xb5\xc7\xc9\xe2\xcd\x19\x65\x79\x12\xc7\x9d\xf0\x9b\xef\x82\x8e\x89\xf2\x4e\xf8\x64\xf3\xfa\x2c\xd8\x6e\xe5\xf3\xe9\x9e\xef\xdd\xf3\xbd\x3f\x2f\xdf\x53\x6c\x8f\xbd\xf3\xbf\x03\xbe\x67\xc9\xee\xab\x8b\xee\x1e\xc9\x5d\x14\xf4\x09\xee\x2b\x45\x1b\xb2\x79\xed\x60\xc8\xd9\xbd\x0a\x47\x34\x79\xa2\x03\xd0\x6f\x29\xc2\x2f\x53\x52\xbe\x8e\x16\x52\x5c\xec\x0a\x89\x3a\x64\x3c\xa8\xbb\x29\x64\x4d\x2a\xb5\x87\x8a\x2d\x76\xb7\x0c\x39\x3f\xd4\x32\x36\x37\x65\xa1\xff\xad\xc9\x1b\x45\xa3\x51\x34\xc5\xb2\x25\x3d\x4f\x13\xfe\x43\x3b\x6f\xee\xa9\x53\xcb\x7e\x5d\x9f\x9d\x64\xe7\x38\x89\xc6\xa2\x59\x3b\x5b\x9d\x31\x42\x5f\xf6\xd4\x5f\xb9\x06\xf1\x53\x23\x44\x31\x8b\xd2\x34\x4b\x8d\x71\x9b\x10\xea\x5c\x13\xd6\x40\x34\xb4\x02\x27\xab\xd0\x03\xa1\xa3\x52\x9d\x97\xc2\x7a\xa0\xa6\x9a\xf8\xd9\x2d\xf4\x02\x19\x95\xc9\xf3\x98\x3d\x36\x0f\xa0\x7f\x88\x26\xa0\x41\xae\x1e\x38\x0d\xf4\x93\x09\xeb\x03\xd5\xe7\x1a\x4e\x7d\xb5\x15\xeb\xfd\x6d\x55\xb7\x5e\x7d\xdb\x02\x5a\x99\x72\x85\x32\xb4\x98\xdf\xd8\x4a\x39\x62\x58\x44\x31\x37\x25\x05\x53\xcf\xcf\x0b\x3c\xa6\x9b\x97\x34\xcf\xd7\x8d\xae\xb8\xf7\x14\x9f\xe5\x94\xaa\x62\x84\x29\x5c\xcc\x23\x72\x59\x36\x58\xe3\x59\x94\x47\xe3\x12\xe7\x85\x50\xf1\xc3\xbd\x3c\x2f\xad\xed\x23\xde\x36\xc8\x34\x0d\x34\x5b\x68\xb4\xb9\xe6\x77\xfb\x41\xa6\xb3\x12\x09\x8f\xb4\x96\x77\x5f\x3e\x06\x43\xda\x64\x20\x01\xf4\xae\x08\xa0\x1d\x8f\x8f\x21\x66\x21\x02\x30\x10\x94\x16\x5e\xab\xca\x1b\xe2\xad\xfe\xe0\x97\x8c\xa4\x10\xac\x01\x3d\x85\x3a\x50\x88\x3a\x9b\x9d\x3e\xda\xe0\xc0\x15\x86\x6f\x37\x9e\x0b\x08\xd8\xf3\x67\x9f\x0c\x18\xc4\x8a\xb3\xc1\x7b\xb8\xc1\x3c\x2e\xdf\x74\x5e\xaa\x0c\x11\x4d\x47\x34\xb0\x75\x82\x19\x22\x04\xf3\x70\x7d\x4c\x5b\xf3\xc2\xbc\x35\xd7\xcc\x0a\x49\x69\x25\x7e\x64\xe9\xfe\xa8\x3d\x8e\x92\x68\xe3\xca\xec\x90\x79\x20\x39\x61\x5b\xbb\x14\xe9\x67\x2c\xde\xf3\x70\x88\x7e\x24\x69\x8c\xd8\xe3\x2e\xde\x51\x19\xaf\x99\x4a\x14\x9d\x8e\xba\xc9\x07\xdb\x97\x00\x42\x48\xcd\xf0\x67\x61\xc2\x2c\xcf\x5c\x34\x8d\x9d\x7a\xe8\x89\xa3\xfa\xac\x44\xab\xd9\xd6\xdf\xbd\x80\x71\x0d\xb7\xa9\xd9\x43\x64\x63\x7f\x5b\x07\x17\xb1\x90\x75\xdb\x0e\xd5\x54\x8f\xd0\x76\x78\xe8\x0b\xd9\xc2\x04\xf5\x58\x91\xfd\x7d\xb4\xd9\x37\x4e\x69\xa3\x1c\x47\x9f\x14\x28\x1d\xe5\xc6\x3e\xe2\xaf\xca\xe9\x0c\x1e\xce\xa2\xfc\x30\x8b\x31\xd4\xe0\x3d\x84\xd1\xc9\x16\xe6\x38\x45\x99\xb7\xa3\x10\x36\x69\x2b\x91\xc8\x01\x2d\xf2\xdb\xd1\x08\x34\xf7\xdf\x43\x24\x37\x99\xf9\xa2\xac\x7a\x9d\x6e\x4e\xb6\xc7\xc7\x7c\x6f\x91\xe3\x09\xf9\xcc\x82\x68\x6d\x7e\xee\xd3\x59\x00\xae\xe1\x77\x6f\xcf\xa3\xbd\x55\xcf\xbe\xd7\x76\x19\x8e\xa0\x51\x02\xdc\xbc\x36\x98\x80\x2f\xca\xa7\xe1\x6b\x9f\xbb\x5d\xe7\xdd\xd0\xa9\x82\x52\x3c\xc7\x3c\x9b\x7d\x58\x0e\xdc\x6c\x9b\x2d\x07\x31\x23\xb4\x25\x45\x1d\x93\x2c\xb7\x4d\xe8\x8a\x32\xaf\x8a\x88\xaf\xcd\x28\x85\x1a\xf3\xb9\x39\x28\x7b\xe4\x66\x2b\x1d\xac\x13\x79\x70\x70\xc3\x6b\x9b\x02\xa1\xfd\xdd\xd8\x47\xa9\xd8\x17\xbe\x47\xdb\xe8\x29\x3d\xd9\xa0\x0d\x44\xf7\x83\xd4\x47\x13\xdc\x85\xfc\x0c\x7f\xbe\x4b\xd2\xb0\x62\x0e\xd8\xb4\xd1\xc0\x1a\x7e\x33\xe2\x70\x78\x86\x46\x1d\xbf\x0d\x05\xfc\x6e\xd3\x6a\x79\x2c\x9d\x2c\x93\x44\xa2\x61\x88\xcf\x71\x5a\xb2\x87\x02\xc0\xf2\x7f\x29\xb2\x14\x45\x23\x62\xf3\x78\xe1\x36\xf1\x43\xf6\xe3\x32\x49\xec\x37\x94\xe2\x31\x01\x2d\xfd\x88\x95\x76\x1f\x43\xb1\x86\x9d\x76\x15\x63\x77\xdb\x30\x04\x29\x5a\xb9\xae\x3a\xa5\xdf\x03\x30\xa1\x20\x69\x8c\x3f\x1f\x4f\x7a\xdd\x5e\xb7\x0f\xbe\x21\x1f\x6d\x79\x9e\x43\x4a\x78\xc7\x4e\xb0\xbc\x5c\x60\xde\x1c\x00\x01\x15\x99\xfe\xcc\x7a\xa4\xff\x45\x84\x10\x1e\x50\xf8\x3d\x74\xcd\x45\x31\xd3\xf2\x4f\xb6\x82\x36\x50\xb7\x47\x67\x4e\xd6\xbe\x81\xba\xfd\x6e\xab\xb5\x17\x93\x62\x91\x44\x97\x6c\x5e\xc0\xc7\x68\x5a\x52\xd9\x56\x62\xc3\x7e\xb3\xf6\x19\xb2\x9f\xb3\x62\x75\x2f\x5c\x69\x6d\xe6\xe4\xfb\x97\x97\xd1\x03\xba\xa5\x59\x14\x83\xa7\x03\x11\x6f\xf1\xb2\xc7\xcd\xea\xfa\xe8\xd1\x0f\x32\x51\x4e\xab\xdb\xb7\xda\x87\xcf\xd2\x66\xd3\x99\x59\x03\xcd\x1c\x8c\x4d\x36\x7a\x6a\xbf\x69\xe5\xef\xc1\xe8\x9a\x51\xce\x46\x86\x43\x35\xd0\xec\x1c\xe7\x49\x16\xc5\x38\x96\x8a\x60\xcf\x9a\xd0\x07\xf0\x41\x11\x49\xd5\x9b\xc6\x21\xfa\x70\xfc\xfc\x38\x44\xf3\xe8\x13\xa8\x86\x49\x7a\xbe\x4c\x52\x9c\x47\xa3\x04\xdf\xe5\x00\xd5\x69\xc0\x7e\xbd\xbb\x85\x1e\x21\x2d\xbb\xdf\x1f\xe4\x78\x91\x44\x63\xdc\xeb\xa2\x2e\x38\x75\xa3\xa7\x85\x8e\x19\x24\x32\x4b\xcf\x71\x5e\x16\x2a\xe4\x26\xc8\x7d\x31\x1e\x93\x79\x94\xd8\x4c\x96\xa4\x7e\x66\x5f\x66\xcf\x59\x01\x97\xf2\x6a\xc3\x67\x9a\x6e\x0d\x99\x80\xc7\x6b\x6a\x0c\x00\x59\x66\x6e\x7c\x4c\x19\x7e\xa6\xcd\x18\x1b\x65\x5b\xca\x13\xef\x6a\x5c\x5a\x5d\xf5\xc1\x59\x53\xa1\x25\x75\xc7\xe7\x09\xcd\xcd\xd5\xa7\xe6\x8e\x62\x1c\xf6\x19\x40\x82\x8b\xe2\xc3\x2c\x4a\x7b\x9b\xe0\x44\xf6\x11\xb3\x3a\xe7\xd6\xfb\x9c\xb0\xb6\xfa\x10\xbe\x55\xcb\x31\xb0\x78\xb0\x04\x37\xcd\x1c\x95\x51\x7a\xc9\x1d\xef\x70\x77\xa4\x69\x35\x5a\x07\x1c\xaf\x07\x69\xcc\xd4\xff\x8c\x86\xc8\xe4\xb2\xe0\x8e\xd4\x0b\x34\xc2\x93\x2c\xc7\x03\x87\xae\x5e\xf2\xa3\x43\x3d\xee\xaf\xf8\x1e\xd4\x40\x5a\x2f\x61\x9f\x37\x90\x2f\xd7\xef\x43\x6e\x2a\x36\x8f\x3e\xb3\xb0\x95\x9f\x49\x79\x19\xa2\x27\xa0\xc2\x16\xbb\x0e\x29\xb8\x4b\x63\x28\xda\xb7\x37\x19\x6d\x92\x7b\x1b\x14\x62\xcf\x28\xaa\x4f\x67\x7d\x61\xab\x2c\x37\xa4\x3b\xa7\xb4\x43\x4f\x21\x0c\x69\x5d\x6f\x15\x10\x5f\xe9\xef\xef\x8f\xdf\x0c\x24\x96\x59\x7b\xca\x81\x25\xb8\x8e\x2d\x50\x64\x47\xf3\x0c\xd0\x22\x2a\x0a\xca\xbb\xca\x59\x9e\x2d\xa7\x33\x73\x05\xc8\x81\x70\x5a\x83\x5a\xdd\xcb\x49\xc5\xd5\x1e\xc1\x69\xc9\x23\xf3\x56\x8e\x58\x00\xf0\xb7\x1d\x66\x75\x0d\xb5\x9d\x0b\xfb\x51\xad\x02\xd4\x5b\x27\xc5\x8f\x24\x25\x25\xb6\x90\x6e\x75\x03\x24\x44\xad\x13\xa6\x94\xe5\x76\x54\x5b\x17\xef\xf8\xa6\xc2\xd6\x01\x3d\x2f\xa5\xc0\xfd\xd1\xcf\xd8\x16\xa4\xa6\xb8\x84\x88\xc5\xc7\x93\x93\x94\x78\xb5\x5d\x50\xb6\x9c\x61\xfe\x43\x2e\x38\x54\x66\x81\xd4\x4e\x49\x87\xe8\xde\xa8\x8d\xb2\x1f\xb2\x9a\x1e\xeb\x4c\x1f\x8a\x80\xdb\xae\x02\xe1\x3c\xcf\x72\xe1\x92\x86\xf5\xb8\x40\x69\x56\xa2\x71\x96\xe7\x78\x5c\x86\x17\x72\xdd\x98\xbd\x36\x16\x10\x2d\x28\x48\x60\xc9\x32\xe1\xbf\xa7\xf0\xdf\xa0\xcc\x5e\x65\x17\x38\x3f\x8c\x0a\xdc\x03\xe6\xc2\xf4\xbd\x8a\x8f\x51\xa8\x7f\xf0\x5b\x66\x7e\x75\x73\x4a\xff\x3f\x53\x47\x71\x0d\x44\xf7\xfb\xad\x13\x1e\xf3\x44\x96\xe2\x0b\xf4\x82\x8e\xaa\xd7\x85\xab\x5e\xe8\x08\xd8\xaa\xfe\xbb\x5b\x22\xfc\x99\x14\x65\x11\xa0\x45\x82\xa3\x02\xc4\x62\x18\x79\x96\x4a\x54\x4d\xb2\x24\xc9\x2e\x48\x3a\x85\x92\x05\xe5\x82\xd6\x32\xe2\x3d\x0c\xc0\xbf\x42\xa0\x9e\x7d\xd4\x44\x89\x95\xbd\x07\xef\x57\xa6\x57\xe1\xe8\x13\x86\x45\xc8\x18\x3e\x5c\x46\x13\xb0\xa7\x95\x4c\x96\x91\x00\x65\xb5\xe0\xab\x82\x4d\x3c\x43\x2d\xa7\xac\xb7\x59\x51\x90\x51\xc2\xa6\x10\x5c\x68\x70\xa3\xbe\xf7\x47\x54\xbe\xcc\x4b\xf6\x93\x8a\xd4\x02\x5b\x2f\x26\x13\x32\xbd\xe4\x1f\xc7\x82\x94\x1e\xa1\x4f\xb4\x79\xf6\xa7\xae\xab\xe0\x93\xdf\x6c\x31\xb0\xb9\x02\x93\x97\x4b\xec\x53\x5c\x45\x31\xb8\xa9\x82\x93\xf7\x3f\xec\x93\x5f\x18\xa9\x3c\x56\xe0\xd1\x23\xb9\x30\xd5\x3d\x0e\x2b\xf0\x6b\x34\xca\x8c\x3c\x4f\x09\x71\x0f\xc3\x06\x00\xd7\x37\x7a\x1e\x2b\xa1\xf5\x42\x2b\xcc\x3e\x39\x16\x34\x10\x64\x41\x68\x1f\x70\x99\xc2\x11\x82\x15\x0e\xa7\xda\xef\x52\xfc\xb6\x45\x0a\xc6\x17\xac\x93\xef\x95\x94\xd3\x19\x39\x8c\xa3\x94\x9e\x0c\x22\xc9\x9a\x79\x3a\xd7\x95\x65\x39\x8a\xd0\xcb\x17\xff\x84\x43\xb8\x90\xd6\xee\x8c\xa1\xc8\x7d\x56\x1c\xed\x7e\x9e\x61\xe1\x67\x2f\xd2\xae\x72\x79\x14\x14\x2d\x58\x00\x5d\x4f\x51\x81\x2e\x30\x5d\x20\xca\xc1\x8a\x18\xc6\x9a\x26\x0d\xfd\x8c\x8d\x23\xb9\x18\xa7\xce\x52\x98\xa8\x43\x6b\x16\x4c\x42\x17\x8a\x58\x09\x3d\x6a\xac\xc9\xa9\x18\x77\xb2\xe4\x21\x7d\x1b\xe6\x15\xa0\xa7\x46\x23\xa1\xfe\xa5\x49\x56\x8d\xcb\x37\x62\x38\xf6\xac\xe0\x0b\x4c\xee\x17\xec\x7f\xcb\x12\x2f\xb3\xba\x05\xae\x9d\x17\x7e\xb3\xa5\x4e\x57\xdb\xef\xb8\xd8\x01\x21\x77\xb3\xd4\x4b\x32\xc7\xc5\xef\xb1\xcc\x53\xae\x5c\xa4\x8b\x5b\xaa\xaa\x0a\x76\xcc\x87\x2d\x1a\x49\x5b\x16\x87\x1c\x64\x4f\x5a\x11\x85\x22\x03\x71\x77\x48\xe7\x5e\xd1\x82\x59\x9b\xf4\x72\xa5\x2a\x50\x00\x12\xff\xba\xf1\x8d\x35\x0b\x0d\xe7\x9f\x6f\xa8\x10\x08\xcb\x5e\x94\xe7\x3f\xae\xae\xd0\xe6\x9e\xf7\x70\xc3\xeb\x75\x0e\x27\x2c\xdd\x38\x11\x71\x9c\x8b\x9e\x3c\x78\x80\xf8\x6f\x9f\xd0\x4f\x9b\xb4\x73\xf5\x13\x86\xcf\x07\x9a\x21\x8b\xf1\xc2\x52\x27\xb2\xf9\xb9\x1b\x74\xbb\xfa\x85\x8b\xe5\x29\xcd\x57\x5a\x27\x94\x4a\x99\x2e\x15\xb1\x63\x3d\xa4\x22\xe9\x84\x81\x89\x28\x1e\xf2\x28\xc6\xcd\x26\x01\xb6\xbc\xc8\xba\x05\x1a\xcb\x98\x2e\x0e\x69\x99\x21\x5f\xda\xd0\x57\x05\xd5\x68\x87\x64\xb3\x4e\x53\xe1\x65\x90\x0c\x05\x1f\x69\x94\xe5\x5b\xb0\xf0\xe4\xbb\xa7\x79\xad\x93\x05\x74\x95\x44\xe3\xd4\x75\x26\xb7\xfc\xeb\xc0\x2c\x0f\x16\xc9\xb2\x50\x5d\xe0\xdf\x5e\xf7\x86\x12\xc8\xd4\x24\xcd\xf0\xf8\x53\x21\x8e\x4d\x8c\x47\x8a\x6b\xce\x82\x3f\x96\x4b\x2e\xc1\x8f\xaf\x37\x1a\x31\x23\xf9\xb1\x37\x12\xb1\x19\x53\x58\x6b\x80\xae\xff\x48\xc1\xeb\x8e\xed\x20\xb8\x12\x9f\x39\xab\x6e\x63\xe2\x78\xa5\x96\x06\x6d\xf8\x9f\xcd\xcf\xa7\x9b\x8f\xbe\x8b\x1e\x4d\xce\xbe\xec\x6e\x5e\xff\xcf\x90\x0c\x4a\x5c\x94\x12\x7c\x85\xb1\xd7\x0c\xf9\xeb\x0c\xb6\xc5\x30\xe1\xfc\x3f\xfc\x4f\x6f\xf3\x73\xff\x69\xed\x38\x75\xfa\x1b\x0e\x55\xac\x2c\x16\x0d\x0b\x7a\xc7\x3c\x08\x73\xa3\xc3\x39\xbc\xe3\xa5\xfb\xb1\x36\x6a\x93\x7e\xb9\x23\x40\x64\xba\xaa\xf0\x76\xc6\xec\x0b\x65\x73\x1a\xd8\xc1\xa3\x1f\xbd\x60\x56\x97\x21\x74\x57\xb7\x00\x67\xc7\xc5\x9c\xfe\x3b\x8e\x16\x05\xc8\x0e\x49\x82\xc4\x77\xa0\x7b\x68\xb4\x7b\xcc\x1c\xcf\x6b\x1d\x36\x1a\x38\x96\xdb\x3b\xc3\x0e\x8e\xc6\x33\x34\x8e\x0a\xa7\x1a\x52\x30\x42\x59\xce\xf9\x0c\x69\xd4\xc4\x56\x59\x7b\x9a\x62\x6d\x15\xcb\xf9\x1c\xc7\x95\xe4\x65\x35\x77\xc7\x64\x66\xd5\x5e\x47\x6e\xc3\x21\x1b\x8f\x85\x9b\x48\x96\xe4\xbf\x9c\x1d\x48\xe9\x43\x38\xc4\xcb\xa8\x00\x67\x34\xb3\x68\x47\x34\x62\xea\x52\x84\xb4\xe3\x73\xf8\xb2\xbb\x09\x77\x94\xc8\xa2\x10\x70\xde\x5d\xce\x50\x82\xe1\x39\xb5\x16\x81\x6f\xb1\xc0\x39\xed\xad\x98\x86\x14\xa2\x17\x4e\x09\x0b\x70\x17\x15\x78\x1e\x2d\xe8\x74\x6c\x19\x9a\xbe\x9e\xb4\x60\xd0\x3a\x0d\x6e\xd9\xb6\x1e\xf7\xd1\x0f\xe8\x5b\xba\x9d\xf3\xac\x53\x72\x36\x28\xb3\x13\xda\x10\xd7\x05\xad\xef\xef\x6b\x99\x40\xf4\xf5\x15\x7e\xbf\xef\xa9\x51\xd7\x2e\x59\x35\x56\xf8\x0a\xd7\x96\xa5\x62\xf9\x06\xe3\x57\xf1\x17\x24\x95\xbe\xe6\x47\x3d\x41\x8d\x15\xa4\x58\x66\x77\x49\x8a\x42\x7b\x2d\xf7\xe5\x15\x28\x51\xd3\x19\x4b\xea\xb3\x5f\x5d\xf3\x76\xba\x5d\x4e\x4a\x2e\x99\x1a\xf8\xbd\x11\xd1\x6a\x40\x63\xa7\xf7\xb4\xa2\x1a\x32\x16\xbd\xd0\xae\xdd\x6d\x92\x06\xa6\x37\x53\xa6\x7f\x94\x48\xbf\xa3\x07\x9f\x09\x73\xa0\x2f\x6e\xe2\x24\x85\x1b\x04\xdc\x44\xbf\x26\x05\xd9\xfd\xdf\xd8\xaf\x24\x6e\x8d\xbc\x6c\x46\xda\x58\x53\x2d\x69\x5a\x25\x4d\xc9\x53\x49\x9a\x06\x1b\x2d\x33\x2a\x51\x92\x18\x6d\x6f\x32\x9f\x41\x8f\xf8\x05\x21\x6b\x93\xbd\x4f\xd8\xfc\x8c\x98\x71\x87\x6b\xdc\xd5\x48\xc9\xfe\xdb\x7e\xee\x7d\x40\xe7\xda\xd2\x80\xab\x1d\xfd\x5a\xe2\x8c\x77\xe3\x13\x4e\x75\x05\x3e\x34\x19\x9e\xed\xb6\x75\x1b\xad\xa7\x22\x7e\xf9\xe5\xab\xcf\x84\x10\xa1\x17\xe1\x4a\x49\xd6\xa8\x5e\x53\x05\x68\x77\xd3\x7f\x4b\x20\x1c\x11\x8b\xd3\x74\xa1\xa4\xdc\xe6\x20\x9b\xde\x93\xa4\xef\xea\xcb\x08\xbc\xc9\x36\x32\xdf\x19\x10\xf5\x58\x37\x2c\xb9\x50\xf4\x2d\x2d\xca\x28\x1d\x53\x2e\xa2\x0a\x5f\x5d\x49\xa4\xf1\xc2\xf0\x7a\x0d\x7e\x19\x8e\x33\xbc\xa9\xcc\x36\x02\x78\x91\xac\xb2\xdb\x16\x51\xe2\x3c\xdc\x84\xa5\xf7\x8e\x71\x51\x4b\x14\x79\x42\x24\x79\xf1\xc3\x59\x2b\xef\x19\x8c\x86\xf5\xad\x7b\x77\xe8\x61\x7d\x69\x8d\x1b\xd1\xe3\x66\xec\xfc\xa8\x8c\x48\x56\xc5\x8f\x28\x7a\x23\x0c\x89\x12\xdd\x96\x23\xa2\x7d\x2a\x9b\x87\xc3\xba\x7e\x83\xc1\x1c\xf3\xbe\xb5\x5c\x0c\x54\xbc\x48\x97\x49\x02\x51\x12\x7a\xee\x0a\x01\xc3\x6d\x50\x61\x78\xc6\xce\xef\x6b\x5b\x8e\x7c\xc4\x3a\xdb\x82\x1d\x30\xc0\x9b\x30\x03\x96\x74\xa3\x89\xe4\xdd\x6b\x3b\x1a\x70\x01\xd8\x3c\x16\x27\xa2\x46\xcb\x91\xb8\x51\x31\x5a\xb2\x34\x28\x58\x3b\x06\xfb\x38\xc2\xf6\x51\xb0\x91\xcb\x04\xd5\x99\x83\xf8\x7b\x61\xae\x2b\x65\x81\x50\x3b\x06\x5a\xcc\x7e\x35\x20\x5d\x27\xe5\x97\xee\x3e\xb5\xbe\x0e\x37\x93\xec\x19\xae\x32\x66\xbd\x46\x63\x08\xfb\xd4\xc3\x9e\xbd\x4d\x3f\x90\xae\x32\xea\x88\x8f\xfb\x05\x9d\x40\xbc\x9c\xa3\x51\x92\x8d\x3f\xa1\x19\x8e\x62\x9c\xd3\x8f\x6c\x6e\x5b\x6d\x90\xe2\x19\x4d\xf6\x09\x0d\x33\xfc\x59\xfa\x45\x87\xb2\x68\x42\x92\xd2\x56\x66\x7a\x08\x16\x60\x0d\xf7\xc3\x34\xa5\xf6\xa4\xff\xcd\xd6\xb6\x3a\xea\x33\xf0\x06\xbc\x54\x1f\xd4\x59\x5d\x7a\x55\xbe\x73\xba\x0b\xe5\x8b\x38\xac\xce\xd9\x6b\x6e\x3f\x6e\x30\x33\x49\x46\xc5\xbc\x05\x19\xbb\xf3\xf0\x81\x26\x37\xcd\x43\x29\x81\x6a\x26\x00\x6a\x32\x26\x00\x8a\xd5\x4e\xc0\xe3\x5d\x85\x7f\x06\x7d\x63\xfc\x43\x55\x7a\x4d\x3e\xf4\x3b\x40\x37\xc2\x7e\x85\xe3\x11\x2e\xf2\x85\xe2\x47\x20\x52\xe1\xd1\x4f\x28\x7f\xb1\x74\x10\x0c\x43\xf6\x9f\x48\xe1\x16\x24\xa1\xfa\xc9\x72\x34\xeb\x92\x50\xff\x10\xe5\x4e\xca\xc9\x93\x90\xff\x2f\xd2\xc0\x5e\x25\x14\x3f\x54\x3d\x0c\x56\xfc\x52\xe9\x1c\x5e\xfe\xe4\xf5\xb8\x46\xb7\xa1\x2f\x91\x41\xbb\xb6\x9c\xa1\x27\xcd\x80\x15\x66\x93\xa1\x9d\x20\xc6\xf1\x33\x86\x51\xfc\x8c\xb5\x31\x40\x1a\xff\x21\xe0\xa4\xb4\x18\xea\x1f\x22\xd7\x54\x59\x87\x4e\x8a\xc4\x1a\x13\xd4\x43\xf5\x93\xe5\x68\xd2\x71\xa8\x7f\x88\x5c\xe3\x24\x12\xda\x09\x02\x4a\xcb\xb7\x72\xac\xa3\x7b\xe8\x26\x89\x1e\x3a\x90\x4e\x92\xa8\x53\x08\x63\xa1\xf6\x5b\xef\x6f\x3a\x0d\xe5\x2f\x91\xce\xf6\xd4\x50\xfe\x92\xa3\x67\xeb\x3d\x54\x3f\xe5\x98\xe8\x2e\x19\x8a\x1f\x22\x95\x6e\x58\x21\xff\x5f\xd6\x41\xf9\x5d\x28\x7e\x88\x54\x60\x1b\xa1\xf8\x11\xc0\x02\x63\x0e\xea\xf8\xab\xee\x4e\xb8\xf5\x5d\x50\xeb\xdf\x26\xe8\x2c\xcb\xc9\x93\x4e\xf8\xe4\x9b\xeb\xb3\x60\x7b\xab\x8d\xc7\x07\x73\x09\xef\xb3\x05\xdc\xe1\x8e\x0e\x3a\x21\xea\x6c\x0e\xb6\x37\x07\x5b\x9d\xb5\x6b\xe1\x0a\x6e\xbb\x55\xa4\xe2\x7b\x4f\x12\xf7\x9e\x24\xfe\x0a\x9e\x24\x78\x2d\x6b\xae\x2f\xb8\xbf\xe3\xc9\x24\xc7\x97\xe8\x67\x92\x8c\x3f\x61\xf4\xfd\x2f\x78\x32\xb1\xdd\x49\xb4\xf4\x18\x07\x60\x24\x4a\xd1\x31\x95\xb8\x23\x80\x22\x51\xea\x82\xfd\x18\x8d\x28\xd8\x3f\xb2\x29\x4e\x8a\x12\x27\x09\xce\xd1\xf7\x13\x48\x74\x81\x7f\x8a\xce\xd1\xcf\x59\x16\xa3\xef\xa7\x95\x6e\x2e\x76\x95\x7b\x1f\xee\x0b\xf2\x75\x94\x46\x53\xd3\xf7\xc4\x60\x48\xb1\x30\xcc\x19\xc0\x9c\x01\x08\x1f\x13\x47\x23\x38\x1c\xd9\xc0\x64\x14\xa5\x02\xe4\x05\x98\xf1\xdb\x10\x4c\xf2\x2a\x86\xb8\x9c\x09\xc0\xe7\xcf\x6a\xe0\xe2\x91\xf4\x37\x3b\xab\xab\xaf\x98\xc9\xfa\xde\x80\x67\xf2\x2a\xc0\x14\x97\x02\xf0\x2d\xce\x0b\x78\x4a\x55\x0d\xbd\xe0\x20\xb2\x13\x17\x51\x3e\xaf\xeb\x06\xcd\x97\xc0\xb8\x2c\x21\x6a\x93\x0b\x5f\xf0\x2c\x01\x2a\xb8\x8a\x01\x29\xd8\x05\x3d\x51\x29\xe7\x1e\x24\xb1\x2a\xd4\xc2\xca\x57\xfb\x08\x61\x40\xc2\x1b\x13\x7f\xb8\x81\xd3\xd8\xd3\x37\x96\x21\xc0\x9e\xc1\x89\xc9\x85\x1a\xd1\x74\x89\xc9\x3c\x5b\xe0\xbc\xbc\xf4\xc0\x2d\x78\x96\x00\x7d\x59\x96\x8b\xb7\x79\x76\x4e\x62\x2f\xb9\xd1\x85\xba\xe0\xd9\x92\xd8\x16\xe3\x9a\x12\x64\x31\xb6\x0b\xb4\xf3\x68\xb8\xb6\x26\x65\xf5\x9f\xf1\x68\x07\xf5\x44\x35\xa6\x57\xde\xdc\x5e\x21\x29\xbe\xb0\x96\x8d\x2a\xa9\x39\xe8\xe5\xa1\x56\xb5\x9e\x0b\x28\x0d\x08\xb3\xb7\x2e\xf8\x82\x2e\x17\x70\xd4\xaf\x57\x11\x8f\x78\xe6\xf3\x67\x4e\x5e\x31\x13\x25\xdf\xcf\xdc\x92\x29\xac\x01\x9a\xfb\x06\x97\x4e\xee\x42\x11\x3e\x05\x11\xeb\xc0\x81\x1b\xfd\xfa\xab\x68\x83\xd2\xb5\xdb\x07\x45\xe0\x00\xc4\x3f\x7b\x3a\x8c\xa2\x6c\x75\xd4\x88\x16\x24\x94\x9b\x21\xff\x9f\x1d\x39\xf4\x4e\x72\x6c\x15\x46\x51\x9d\x7c\x42\xe3\x2b\x90\x30\x1a\xbd\x84\xfa\x87\xd3\xc4\x47\xb9\x06\xd8\x0f\x67\x80\x1c\xa0\xa7\xda\xe7\xe4\x4c\x70\x11\x6a\xbf\x7b\xcc\x98\xe7\xba\xbf\x47\x25\xa6\xe1\x10\x5c\xf0\x16\x18\xa9\x31\x64\x6c\x27\x06\x9f\x40\x6b\x94\xdc\x3c\xe3\x6b\x1a\x5b\xe5\xb8\xa8\xd0\x28\xea\x14\xf1\x34\xb1\x4e\x79\x7a\xcc\xe0\x66\x1a\xd7\x0b\xaf\x4c\xda\x9e\xbe\xe4\x98\x05\x8b\x50\xbd\xf8\x84\xf1\xe2\xa8\x78\x7f\x99\x8e\x49\x3a\xad\xed\x0a\x94\xb5\xe0\xdb\x51\xa0\xa7\x23\x3a\x5f\x78\xa6\xec\x57\x2c\x28\xf1\x0c\x86\xb9\x93\x82\x2f\x0f\x8c\x78\x32\x2b\xa0\xe0\xdb\x03\xc7\xdf\x5d\x0b\x30\xfa\xe9\x40\xe9\x4f\x70\x19\xa0\x4c\xf1\xc2\x1a\x75\x8a\x04\x4f\xdb\xea\x3d\x95\x68\x9e\xa7\x78\x6b\xb5\xa1\xb5\x34\x4f\xdd\x3a\x2e\x45\xed\x75\x38\x65\x26\x8e\x02\xf2\x67\xec\x1f\x99\x0e\xc5\xbf\x1d\x38\xdd\xb4\x85\x41\xca\x14\x0f\xac\x7b\x2b\x2c\xca\x1c\xda\xb7\x85\x4e\x9f\xab\xca\x3a\x39\x9e\x76\x8f\x9e\x1d\xbc\xd1\x1a\xa3\x9f\x0e\x94\x72\x4f\xc3\xc0\xf8\xb7\x0f\x4e\x78\x4e\x91\x80\x90\x40\x77\x31\x7b\xe1\xb3\xad\x5f\x7f\xc9\xcd\x2e\x85\x4c\xef\x8a\xe6\x75\x1d\xdc\x49\xdb\x90\x55\xd7\xa7\x31\xc9\x41\x55\x3c\x8e\x16\xf0\xfa\x42\xbb\xc0\xf4\xcc\xe8\xd1\xe1\xc1\x5b\x63\xed\xd3\x72\xba\x85\x1c\x61\xa2\x24\x5d\xbe\x54\xaa\x64\xf9\xc6\x63\x4f\x0a\x31\xe0\xcd\x88\x95\x0d\x0e\x65\x24\xff\xad\x8b\x38\x7a\x2a\x79\x37\xec\x75\x5c\x1c\xe9\x99\x77\xce\x29\xe8\x60\xba\x62\x4f\x4a\xb3\x18\x77\x03\x03\x62\x0a\x66\x21\x21\xea\x52\xa1\xe3\xe3\x38\x21\x38\x2d\xff\xc1\xc0\xbb\xea\x4e\xba\x1f\xdc\xa4\x35\x5c\x5e\x64\xf9\xa7\xaa\x06\x53\x5c\x7e\xe4\xa0\x16\x88\x19\x30\x20\xb4\x57\xf9\x2d\xbb\x85\xb9\x42\xbb\xaa\x5f\xb8\x9c\x7d\x84\xb9\x1e\x67\xc9\x3f\x7e\x87\xfe\x5d\xcc\x48\xb1\x90\xbe\x91\x9d\xee\x15\xb3\xd9\xad\xd1\x06\x3f\xcf\xbc\x7b\x09\x29\x0e\xb3\x34\x65\x3e\x9b\xb4\xe5\xd6\x37\x68\xaf\xe7\xdd\x2e\x1f\x3c\xf0\x6e\xa3\x7a\x95\xbd\xbe\x7f\x07\x63\x5e\x0a\x84\x4c\x5e\x49\xf3\x60\x1c\x0a\x91\x13\xb8\x44\xe3\xd5\xdb\xd2\xba\x85\x37\x51\xfd\x84\xc0\x54\x4e\xc6\xc1\xa2\x13\x6e\x6f\xd2\x24\xfd\x48\xd2\x09\xb7\xb7\x68\x9a\x3a\x0e\x74\xc2\xed\x5d\x99\xc2\x44\xa7\x4e\xb8\xfd\x44\x26\xe9\xc2\x7d\x27\xdc\xd9\x96\x19\x74\x85\x77\xc2\x9d\x1d\x95\xa0\x84\xfa\x4e\xb8\xa3\x2a\x55\xc7\xc2\x4e\xb8\xf3\xad\x93\x8c\xcb\x59\x27\xdc\x79\xe2\xa4\xa7\xb8\xec\x84\x3b\xdf\x39\xe9\x42\x10\xee\x84\xbb\x9b\x4e\x66\x31\x9b\x75\xc2\xdd\x2d\x37\x9d\xca\xc2\x9d\x70\x57\x75\x5f\x9c\x71\x3a\xe1\xee\x37\x32\xd1\x3c\x38\x77\xc2\xdd\xc7\x32\x4b\x48\x2d\x9d\x70\xf7\xdb\x7a\xdd\xde\xf5\x59\xb0\xbd\x73\xaf\x79\xbb\xd7\xbc\xfd\xb7\x68\xde\xa2\x24\x01\x07\x13\xb7\xf3\xe3\xaa\x29\xb8\x1c\x55\x88\x4f\x17\x22\xc2\xc4\xbc\x38\x67\x16\xfd\x9a\x8e\x01\x7a\x23\xe0\x54\xd0\x98\xa6\xe8\x48\xae\x9e\xc6\xab\xa8\xf9\x11\x2e\x77\xad\xca\x20\x4d\x40\x5c\xb0\xd8\x47\x26\x88\x60\x45\x3c\x53\x7a\x77\x3d\x48\x12\x63\x28\xa6\x60\x64\x1e\xad\x02\xb8\xa9\x0f\x90\x65\x5a\x56\xa1\xf4\x30\x13\xf4\x23\xf2\x2f\xec\x72\x9e\xfe\xa7\x27\x3b\xe6\x92\x6c\x13\x72\x7a\x58\x1f\xe6\xdb\x92\x5a\x85\x3f\xf0\x7d\xf9\xeb\xea\x0a\xe2\xdf\x20\xdb\xef\x03\x4d\x84\xd4\xd3\x2e\x95\x42\x21\xae\x40\x37\x40\xdd\x32\x63\x3f\xcf\x06\x0c\xcd\x5a\xbc\xc3\x89\xe7\x36\x94\x37\x73\x3a\x39\x03\x03\x17\x69\x1f\xca\x6f\x48\xfb\x9e\xa0\xd9\x56\x35\xb4\x3f\xb4\xf8\xbe\x46\x3c\xcc\x85\x0e\x74\x84\x9d\x97\x54\x10\x3c\xd5\xa0\xb0\x59\x50\x0f\xb7\xc0\x17\x85\xc2\xab\x81\x67\xf3\x75\x97\xee\x9d\xa2\x0e\xe3\x9e\xa8\xc5\x71\x54\x46\x62\x04\xf4\xf7\x80\xfe\x83\xf6\xb5\xdf\x57\x57\x60\x14\x2b\x01\xe0\x2a\xb9\x10\x20\xfc\xeb\xea\x4a\x45\xdf\x04\x6d\x23\x6d\x5a\xdc\x91\x6b\x80\xa7\x9b\x67\x83\x82\x32\x04\xe9\x62\x9d\x42\xcf\xb9\x80\xa3\x28\xcc\x9d\xae\x5f\x3c\xd3\xa5\xb7\xb2\xcf\x4d\x6d\xb9\x74\xe7\x5e\xda\xf6\x7e\x91\xef\xd3\xfb\xa7\x9b\x67\xda\xc3\xab\x75\x68\xbf\x8f\xbe\xc0\x63\x87\x28\x4d\xb3\x12\x4d\x48\x1a\xb3\x7e\x91\x74\xca\x1a\x7a\x2a\x9b\x1f\x67\x69\x91\x25\x78\x70\x11\xe5\x69\xaf\xab\x97\x60\xde\x72\x28\x2b\x4e\xb2\x69\x57\x33\x7d\xe5\x3d\xa6\xa8\x70\x3c\x2e\x61\xce\x86\xf4\xc8\x5c\x30\x77\x3d\xdf\xea\x0c\x58\xb7\x02\x93\x20\xcc\x23\x14\xd4\x28\x9c\x1d\xc2\x14\xb7\x58\x8e\x9f\xf1\x98\x4a\x00\x9e\xf5\x18\x80\x47\xa6\x51\x34\xfe\x24\x63\x88\x82\x2b\x02\x7e\xd8\x15\xd7\xad\xbd\x28\x9f\x2e\xe1\x2d\xc8\xa9\xfc\xa5\x79\xe3\x31\x8d\xd0\x45\x8d\x10\xfb\xb9\xb6\x98\xee\x37\xae\xe7\x40\xd0\x89\xdf\x32\xfd\x58\x28\xb6\x91\x2e\x93\xc4\x41\x77\x26\x28\x8d\x7b\xbf\x53\x07\x60\x01\x31\xd1\xa2\xac\x31\xcd\x2c\x60\x72\x30\x22\xa6\xd2\x50\x13\xbf\x19\x67\xef\x65\x01\x1c\x94\xba\x81\x97\xb1\x06\x82\xbd\xd3\xc3\x56\xaf\x1f\xa8\x86\x34\x0c\x37\xcf\x54\x54\x96\xd1\x78\xf6\x21\x3b\x14\x8e\xb0\xf4\x29\x13\xde\xb1\xf4\x33\xb7\x9a\x5a\x36\x6e\xf6\xe9\x0c\x47\x14\x1d\x44\x49\x22\xf7\x13\x0e\x5c\x71\xa6\x70\xba\x29\x0f\x18\x9e\x13\x86\xf7\x88\x01\xa4\xda\x09\xb7\x41\xba\x67\xab\xbe\x13\x6e\x83\xec\xae\xc7\x6c\xdb\x01\x60\x6b\x23\xec\x84\xbb\x3b\x54\x64\xde\xbd\x17\x99\xef\x45\xe6\xbf\xb6\xc8\xac\x85\x7b\x81\xb3\xf7\x5d\xc5\x7b\xf9\x7b\x91\xa5\xf9\x62\x6c\xca\x9b\xbf\xb0\x44\x79\x75\x98\xe7\x99\x2d\x02\xb3\x34\x29\x89\xba\x2a\x0a\x3a\x58\x43\xc8\x74\x64\x4c\x40\xc7\xc7\x4a\x49\x93\x67\x14\x3c\xb0\x77\x83\xa3\xc0\x28\x8e\x85\x4f\x47\xca\x8e\x79\x61\x70\x93\x0d\x5d\xe3\x09\x96\x45\x60\x14\xc7\x1e\x1b\x5b\xc4\xc7\xcf\x0a\x95\xca\xba\x75\xb8\x06\xe3\xd4\x59\x71\x1c\xfb\x64\x6e\xdf\xc0\x0b\x16\x15\x5c\x40\x34\x8e\x48\x30\xed\xba\xfe\x73\x18\x6f\xd7\x7c\xfb\xb9\xe9\x5d\x40\xe2\xd7\xe8\xa6\x3b\x05\xea\x9e\x28\x8d\x99\x9a\x49\xc0\x06\x5a\xdd\x38\xcf\x03\x2e\x89\x16\xae\x4c\xcc\xc8\x87\xfd\xe2\xc2\xa2\x02\xe0\xf8\xd1\x5d\x4c\x4a\x54\x06\x08\x5e\xb7\x57\xbc\x5f\xe3\x55\x9e\x02\xcc\x99\x7e\x3c\xa8\x14\xd8\x59\x91\x8a\x6a\xa9\x58\x23\xfa\xc3\x2b\x1d\x38\xb2\x8f\x5d\x60\x9d\x2f\xa2\x01\x29\xfe\x11\x25\x24\x7e\x87\x8b\x45\x96\x16\x98\x37\xe5\xbc\xbd\x73\xc6\xe0\x6f\xaf\xc7\xd6\xd8\xe0\x28\x3d\xf7\xd6\xba\xe7\x54\x7a\xed\xf6\xaf\xb2\x72\xe6\xb3\xc9\x19\x2c\xdb\x73\xc1\x37\x84\x2f\x83\x37\x3e\xe0\x7d\x00\xaf\x11\x7a\x82\x13\xc5\x5e\x4d\x85\x3c\xdf\x20\xbf\x28\x01\x94\xa5\xf4\x93\x6c\xf0\x9d\x70\x1b\xf4\x68\x7c\x45\x76\xc2\x1d\xb0\x7a\x6b\x15\xe5\xfb\x7e\xc3\xbf\xdf\xf0\xff\xbc\x1b\xbe\xda\xef\xa5\x58\x7e\x47\x2a\xb2\x96\xba\x2a\x7a\xe2\xc9\x2d\xb0\x82\xcb\xfa\x43\xc8\x5c\x55\x9d\x26\xe0\xb4\x77\x53\xba\x1e\x4c\x3c\x88\xe2\xd0\x07\xda\x21\x44\x03\x93\x1a\x43\x23\xe4\xb8\x6f\xff\x64\xea\x25\xfd\x91\x19\x6c\xf3\xf6\x33\x65\x06\x77\xa8\xc0\xde\x0a\x28\x29\x17\x80\xb1\xef\x35\x12\xbe\x9c\xcd\x54\x6f\x03\xdc\xdb\xaf\xbf\x6a\xf3\xa9\xe7\x88\x04\xbc\x9c\x75\xab\x13\x8d\x88\x47\x0d\xa2\xf9\x7d\x46\x96\xa3\x65\x16\xe0\x7b\x7f\x1f\x75\xb5\x3e\x75\xd1\x83\x07\x86\x23\x67\xed\xdc\xcc\x9a\x35\xbc\xfd\x5f\xf7\xad\x6d\xb8\xae\x41\x8f\x6b\x68\xd4\x83\xc4\x8a\xed\x1a\xf2\x98\xc7\x68\xcf\xce\x60\x55\x44\xc1\x0a\x4f\xd3\x40\x7b\xfc\xf0\xce\x10\xca\x40\x25\x1a\x35\x2d\x8f\xd0\x5e\xb5\x90\x1e\x65\x40\x2f\xee\x2a\x8a\x1d\xad\xbd\x2f\x9b\xa2\x38\x16\x34\x5c\xa8\x63\xb8\x4e\x1b\x22\xed\x5a\xd6\x54\x49\x4f\x8c\x54\xfc\x55\xd6\x9e\xec\xd5\x71\xfd\xe6\x84\xa2\xbd\x42\x5c\x65\xf6\x75\x4d\x95\xd4\xfe\xc8\xfe\x7c\xc4\xe5\x4c\xa8\x9b\x55\x27\x4d\xaf\x17\x8d\xaa\xd4\x89\xa3\xe6\x50\x08\x50\xaa\xd2\x16\xf3\xca\xb8\x45\xab\x49\x65\xfc\xe6\xee\x66\xd4\xae\xaf\x59\x51\x23\x18\xde\x5d\xcc\x2d\xe3\xbd\x96\x5a\x99\x73\x56\xae\x6d\x94\x3c\xd6\x9c\x3c\x57\x6f\xc5\x3a\x56\x39\x9d\x07\x49\x52\x3b\x5d\x00\xc4\x2f\x7a\x56\x26\x30\xa6\x0a\x6d\xe8\xe0\xea\xd4\x66\x3c\x0a\x74\x95\x6a\x55\xd4\x56\x47\x6e\xd2\x51\x0e\xd8\xfe\x89\x49\x9f\xe2\xb2\xe0\xc6\x2b\xc9\x25\x8a\xf1\x22\xc9\x2e\x71\x2c\x4c\x04\xe1\xf9\xe0\x78\x16\x91\xd4\x7e\xae\x06\xb5\xfd\x98\xe5\xa2\x47\x1e\xdf\x03\xe2\xc0\xea\x23\x49\xb1\x2e\xaf\xa5\x6a\x71\xcd\x70\x91\x7b\x22\x2e\x37\xd4\xb3\xb6\x8a\x16\x75\x83\x07\xd1\x92\xa6\xb0\x54\xe4\x0b\x01\x9b\x21\x92\x8c\xa3\xe6\xfd\x11\xa2\x94\xef\x8b\x87\x65\x90\x3f\x1c\xa2\x8b\x88\x30\x75\x39\x88\x5c\x8b\x52\xa9\x60\xc5\x4d\x99\x39\xef\x7c\x29\xc8\x80\xd1\xaa\x63\xb8\x6f\x7a\x5e\x5e\xc7\xf0\x34\xd9\x68\xdf\xde\x95\xa0\xbf\x1b\x1b\x7b\xe6\xb1\x69\x38\x44\x45\x99\x2d\x98\xae\x96\xa4\x53\x14\x4d\x68\x57\xbe\xd9\x64\x73\x55\xa0\x5e\x49\xe6\x38\x5b\x96\x7d\xe7\xe8\xc8\x10\xf0\x03\xfa\x66\xd3\x7b\x58\x64\xbd\x1f\xd0\xda\x7f\xe6\x95\xab\x98\x0a\x7d\xf4\xe5\xda\x73\xa6\xb3\x11\xc8\x1e\xec\x79\xcf\xa1\x72\x46\xbc\xa7\x4d\x75\xf2\x53\x8e\x81\x25\x63\x82\xfb\x92\x88\xad\x8c\x31\x25\x6c\x70\x12\x3c\xa2\x12\xf3\x32\x8d\x6d\x0c\x74\x7d\x87\x4f\x9c\x68\x0e\x45\xf4\x3f\xc7\x1d\xf1\x8d\x5b\xa5\xcb\x4f\xaf\x59\xfa\x13\x71\xb1\x66\x50\xcd\x14\x97\x1f\x54\x53\xef\x18\xa9\x29\x8e\xa2\x75\xe3\x65\x54\xcc\x74\xa2\x0a\x04\x61\xf6\xfd\x47\x78\x32\xe9\x71\x00\x3f\xb5\x79\x0b\x79\x3b\x08\x21\x8c\x78\x5d\x83\xb1\xb9\x00\xcd\x1e\x41\x9c\x23\x7f\x77\xc4\x5f\x95\xf7\xf6\xc7\xd2\x7b\x7b\xd5\x1f\x99\xf4\x4c\x8a\xbb\xba\x42\xeb\xd0\x62\x6d\x31\x24\x59\xb7\x87\x36\xf5\xbf\x9b\x2c\x01\xfd\xaf\xe5\x72\xb0\x87\x94\xc5\x5a\x88\xe8\x9d\xda\x99\x11\x7f\xc3\xa1\xbc\xe7\x4b\xb2\xa9\x46\xb5\x70\xac\x10\x6c\x7c\xbd\xdb\x6f\x68\x1e\x19\xa2\x9a\xe4\xa8\x15\x53\xdd\xa2\xb2\xe1\x10\xb1\xcd\x4a\x88\x0b\x51\x1a\x23\x7e\x33\x82\xa2\x69\x44\x52\xbe\x72\x2e\x30\x8f\xf0\xd7\xf0\xe7\x97\x3d\xed\x0d\xb0\xa1\x06\x5b\xd6\x71\xb6\xff\x86\x21\x8d\x99\x53\x36\x7e\x29\x48\xb7\x04\xba\x3b\x16\x78\x9c\xa5\x31\xa2\x0c\xb7\xb1\x12\x8d\x74\x9b\x89\x15\x19\x1c\x11\x74\x61\x6d\x3b\xec\xf5\x62\x74\xc7\x1d\xd2\x7d\xb7\x6b\xa2\x04\x3f\xd1\x6a\x9c\xb2\x28\xb3\x1c\xc7\xd2\x8f\x3b\x93\x40\x40\xe3\x33\x8d\x0a\x14\xcd\xe9\x86\x34\xf0\xf2\x6b\xfb\xaf\x92\x7f\xdb\x7f\x1e\xf7\xf2\x77\xd1\xc5\xfa\x1e\x5e\x57\xe6\x56\x71\x0c\xb7\x84\x0d\xa9\x69\x27\xdb\x1e\x28\xb4\x2b\x06\x41\xe8\x3f\x46\xf4\x98\x7d\x29\x7d\x69\x58\x52\x9c\x05\xd6\x70\x68\xb0\x2b\xd5\x0f\x0c\x70\xaa\x8a\x46\xc4\xb8\x5c\x60\x2f\x8a\xb0\x38\xbe\x43\x5a\x34\x22\x68\x9f\x42\x0a\x39\xeb\x21\xd3\x84\x36\x8f\x49\x9d\x90\x52\x14\x69\xa2\x29\x2f\x2e\x6a\x11\x63\x4b\xf1\x85\x4c\x12\x63\x4a\x2f\xaf\x75\x62\xb0\x74\x23\x5b\xc2\xa6\x20\x4a\xfa\x2b\x16\xdd\xae\x29\x6a\xcb\xc1\x86\x64\xc1\x7d\x9d\x08\x45\x71\xec\x94\xf6\x49\xca\x1c\x42\x4a\xcb\xea\xf8\x27\x92\x64\x5b\x6a\xe2\xa1\xd0\x50\x4d\x04\x45\xa9\xef\xfa\x05\xd5\x6c\xd1\xdf\x8a\x1a\xe8\x9f\xfc\xc1\xa4\x6b\x79\x8a\xd4\xe9\xaf\x27\xe8\x20\x90\xb3\xaf\x73\xb0\xe1\x90\xc5\x56\x54\x56\x16\x46\xa5\xca\x56\xe2\xcb\xf5\x1e\x05\x16\x58\x5a\x37\xdb\xe6\x88\xd1\x2a\x86\x33\x6e\x0e\x6f\x71\x80\x90\xf5\x47\x09\x09\x19\x63\xb8\x6a\x50\xf6\x1a\x56\xf8\x3f\x9f\xed\x08\xd8\x7f\x54\x5b\x8c\x20\xc7\x6a\xa4\x18\x2c\xb2\x85\xe1\x60\xce\xec\x5e\x12\x15\x25\x87\x74\xaa\xf6\x77\x87\x11\x52\x8f\x16\x04\xe7\x45\xeb\xf2\xc5\x09\x04\xa2\x85\x74\xbb\x4f\x0a\x85\x0d\x5d\xa2\x0d\x71\xe0\x01\x8b\x4a\xf2\x03\xda\xb4\x6b\xe3\x33\x2d\x68\xff\x40\xac\xe5\x66\x2d\x80\xf8\xbb\x95\x4a\x50\x43\x93\xc5\x2c\x85\x3a\x4d\x9a\xda\xe9\xc3\x5a\x37\xbb\x3c\x58\x44\x97\xd1\x28\xc1\xbe\xee\xb9\xc7\x01\x66\x3f\x55\xe0\x34\x56\x11\xa9\xd2\x2c\x7d\xc4\x2b\xd1\xd1\x61\x6f\x13\xd7\x55\x53\x0f\xbe\xfd\x28\x67\xf4\xab\x60\x7b\x62\xa9\x04\x30\x62\xad\x56\x31\x41\x60\xfb\xb6\xb1\xcf\x2a\xda\x33\x27\xb1\xf2\x46\x50\x3f\xd1\x1a\x3a\x00\x21\xf7\x45\x71\x6a\x6b\x09\x62\x8c\x2e\xa2\x42\x0a\x94\x6b\x26\xae\xd8\xd2\x86\xab\x57\xed\x08\xa3\x0c\xb3\xac\xfb\xd7\x59\x54\xcc\x7c\x48\xa7\xbd\xc6\x79\x5e\x75\x13\xa9\x5f\x39\xfa\xee\x15\xeb\x24\x1e\x2a\x8e\xc6\x31\xbb\xf6\xd2\xb8\x2e\xed\x89\xbf\xad\x8a\x63\x17\xda\x87\x32\x15\xc2\x57\xa5\x84\x38\x21\x79\x51\x56\x0b\x88\x2b\xca\x78\x15\x1a\x10\x9f\xda\xc3\x77\xfd\x6a\x7c\x35\x39\xbe\x84\x48\x9b\x6c\xe0\x4d\xf3\x6c\x35\xd6\x16\xe5\x8d\xa8\x5e\x65\xe8\x7e\x9e\x26\x75\xf2\x0c\x88\xeb\xca\x38\x76\xc5\x26\x48\xcf\xb7\xcf\x99\x5d\x29\x24\xf1\x4f\xc3\x00\xed\xc6\x82\x97\xad\x35\x6b\xd2\xce\x7a\x36\x75\x5e\xd3\xb5\x29\x03\x4d\x64\xfd\xc3\xb5\xe1\xd0\xda\x81\x8d\x0b\x1c\xe5\xf1\x58\x53\x5f\x5a\x95\xf7\xd8\xbe\x3c\x1c\x1a\xae\x74\x2b\xe3\x4e\x8f\xc7\xe0\x15\x37\x63\x81\x9a\x48\x3a\xad\x91\xcd\x4c\x35\xb6\x39\x72\x36\x89\xd7\x2e\x27\xd2\xc5\xa1\x3a\x51\x08\x7d\xd1\xa4\xae\xb6\x12\xd1\x04\xa5\x99\xaa\x81\xb2\xb7\x45\x54\x14\x38\x0e\x68\x15\xca\xf5\x1d\x85\x28\xb4\x25\x6d\xf2\x32\x49\x78\x30\x03\x16\x3a\x0d\x73\x48\x9f\xef\x54\xd3\x66\x15\xad\x2c\x43\x29\x4b\x79\xa5\xad\x2c\x67\x9a\x6b\x49\x08\x56\x03\x21\xc2\x84\x51\x81\xec\x52\x20\x0a\x8c\xf0\x38\x5a\x16\x98\x9e\xc4\xe3\x2c\x2d\xd1\x45\x94\x82\x4d\x52\xb1\xc8\x48\xc2\x6e\xc3\xd3\x12\xe7\x93\x68\x2c\x7d\x63\xb7\x38\x89\xb7\x39\x6d\xdb\xdb\x54\x33\x3f\x44\x8e\x7b\x5d\xb9\xa6\xb5\xb5\xf9\x13\x2e\x99\xb3\x66\xba\x3f\x06\xe8\x62\x46\xc6\x33\x30\x1a\xa0\xcb\xbb\xcc\xf8\x36\x86\x16\xc9\xb2\x68\xbe\x7a\xe5\x7c\xa0\x61\x7e\x15\xf3\xf0\x1b\x32\x35\x88\xb0\xab\xcb\xa9\xb2\x58\xb3\xfc\x78\x1b\xd9\xb1\x5a\x6e\xd4\x8c\x95\x6f\x24\xc7\xd4\xc9\x30\xe6\x4b\x87\x01\x33\x48\x6f\xcf\x7c\x3d\xa7\x1e\xef\x71\xb7\xc5\xf5\x79\x15\x6b\x72\x0e\xc3\xde\x53\x70\xc5\x4b\x16\xdf\x79\xd8\xdd\xfd\x94\x5d\x38\xc3\x9f\xfb\x78\x05\x79\x0e\xd3\x5e\xb3\x25\x8b\x6e\xf7\xa4\xf9\xb3\x69\x2b\xd1\x09\xbf\xad\xb2\x80\x96\x16\x0d\x9d\x70\x7b\xc7\x35\x89\xe6\x23\xef\x84\x3b\x5b\xd7\x67\xc1\xf6\xe3\x7b\xd3\xa7\x7b\xd3\xa7\xbf\xb6\xe9\x93\x66\xeb\xcc\x4d\x20\xef\xc0\xd8\xb9\xc2\x8d\x25\x37\xae\x64\xef\xb2\x8e\x27\xe2\xce\xf9\x20\x9f\x16\x61\x85\xe6\x46\x93\xf1\xf8\x09\x96\x57\xa2\xc7\xbe\x13\xdb\x09\x65\x9f\xa2\x52\xa4\x9b\x38\x01\x9f\x0f\x7c\x7d\x78\xf7\xf6\x90\x31\xf7\xdb\x74\x80\xc5\x5b\x02\x56\x8b\xe1\x01\x63\x99\xa1\x77\x6f\x0f\xf9\x3d\x81\xbf\x03\xfc\x39\x3a\x38\x51\x54\x2d\xcf\xb2\x42\xbf\xfd\x72\x1b\x3f\x3c\x7e\xf3\xe6\xc5\xe1\x87\xa3\xe3\x37\xe8\xc5\xbb\x77\xc7\xef\x42\x74\x28\xd5\xbf\x63\x56\x25\x3b\xd1\xc7\x18\x75\x37\x10\xad\x0f\x6d\x74\x07\xfe\x3e\x28\x8f\x37\x6d\xc7\x2e\xdf\xd9\x33\x25\x42\x49\x57\x0f\x61\x95\xf9\x9b\x10\x86\xb4\x21\xb2\x8d\x82\xb5\x61\xc2\xb3\x34\x5c\x14\xd1\x14\xa3\x7d\xb4\xbe\xce\x5f\x1a\xd2\x6d\x9d\xff\x1e\xb0\x90\xb1\x4e\xca\x40\x14\x7b\x8a\xbc\xc9\x21\x92\xd3\xf5\xf7\xf7\xc7\x6f\x60\x56\x72\xd9\x25\x4f\x98\x55\xde\x37\xe7\x2d\x99\xc2\x01\xaf\xda\x1c\xad\x9a\xcd\x0f\xec\xba\x5a\x1f\xef\xbc\x68\x3b\xa5\x1f\x8e\x5e\xbf\x38\x3e\xf9\x10\x22\x7e\xe9\x4d\x89\x8b\x76\x72\x5e\xa0\x0d\xd4\xa5\xff\x45\xe3\x19\xe5\x18\x5d\x23\xa0\x0d\x77\x23\xf9\xed\xfd\x6e\x75\xbf\x5b\xfd\xb5\x77\x2b\x6d\xb3\x82\x57\x97\x7f\x54\x2b\xdd\xf6\x8f\xd9\x5b\xbd\xa1\xbf\xc3\xa7\xec\xc2\xe7\x10\x5d\xff\xf2\x70\xa6\x47\x64\x2a\x8c\x63\x08\x7f\x63\x0b\x6d\xa9\xc3\x82\x6d\x84\xfc\xb5\xdf\xc1\x2f\x84\x29\xaf\xa6\x48\xd7\xf3\x59\xe8\x0a\x54\xf3\x1c\xb9\xc8\xd2\x7e\xc3\x13\x7a\x2d\x33\xcd\xd2\xcb\x79\xb6\x94\x2d\xca\x84\x8a\xd3\x9b\x40\xda\x14\x0b\x5c\xe1\x98\xc9\x03\x10\xc4\xc0\x09\xd6\xc4\xd3\xe4\xf1\xec\x59\x96\x25\xd7\x10\x5e\x35\x06\x17\xe4\x6c\x93\xc0\x0c\x32\xd6\x66\x07\xde\x87\xe0\xd8\x70\x98\x2e\x4e\x7c\x10\x8c\x80\x2e\x4a\x5e\xfb\x70\xcd\x98\x26\xdd\xfb\x16\x85\x30\x1d\x47\xb1\x7a\xed\x00\x0c\x1a\xf2\xdd\x2b\x11\xe2\x11\x15\xc8\x80\xd7\x04\xf7\x1b\xfc\x77\x85\xb9\xab\xbf\xbc\xb2\x57\xae\xbc\x21\xd6\xb1\xcd\xe8\x33\x66\x2e\xc0\xc1\x8b\x91\x85\xeb\x58\x79\x07\xf7\x46\x0b\xf2\x56\x50\x8d\x3a\xad\xba\x3a\x27\x41\x8c\x12\x5d\x07\xe5\x3d\x45\xaf\xed\x47\x07\x2b\xd4\x33\xb4\x92\xfb\x33\xaf\x19\x97\x5e\xb4\x9e\x1e\x56\x1a\x91\xf0\xa4\x7e\xa3\xe1\x14\x64\x9a\x46\xe5\x32\xb7\x87\xa3\xa7\x57\x8d\x47\x87\xa9\x1e\x8f\x84\xaa\x1b\x10\x38\x30\x68\xdf\x7f\xfe\xc2\x41\x90\x37\xe7\x48\x51\x1a\x4b\xd5\x52\x99\x41\x50\xe2\x09\x49\xa3\xc4\x6f\xf5\xcc\xea\xf0\xd9\x94\xea\xeb\xda\xca\xe2\xd5\x1b\x48\x11\x79\xf8\x1c\xe7\x97\xe5\x8c\x69\xac\xe7\x23\x02\x2c\x23\x63\x51\xa2\xa1\x6f\x3c\xcc\x42\x2d\xb6\x3c\xae\x41\x78\x77\x1c\xcf\x76\x72\x71\xcb\x5f\xda\x23\xc0\x7b\x07\x22\xca\x5d\x87\xf4\xcf\xd1\xe4\x59\x44\xe8\x35\xd7\xad\x9d\xc7\xed\x27\xaf\x9c\x3d\x6c\xe5\xbe\x05\x99\x9f\x4e\x41\xed\xbd\xbe\xab\xd2\xe4\xf3\xf4\x41\x74\xec\xb6\x2c\x5d\x0b\x61\x51\xcb\xcf\xc1\xf1\x32\x0f\xa6\xcd\xcb\x9f\x12\x08\x31\x65\x19\x03\x70\x20\x7d\xfe\x28\xdd\xa8\xe4\x74\x99\x24\x15\x2f\x5c\x94\x66\x11\xb9\x97\xff\xa6\x42\x18\xea\xab\x0a\xcc\x08\x99\xd6\x68\xce\x6b\x6e\xfb\x39\xf6\x9d\xb7\x31\x3d\xb6\x7d\x05\xe8\xdc\xbe\x39\xef\xdb\xb1\xf5\x56\xaa\x0d\xfa\xde\x40\x71\x26\x91\x8c\xb3\x74\x1c\x95\x3d\x63\xf6\xfb\xd5\x7e\x6c\x2a\xb9\x1e\x77\x62\x53\xcd\xf5\xec\xdd\x16\x57\x71\xb8\x98\xdd\x3d\xb8\x3c\x8c\x73\x05\x6e\x38\x04\x27\x04\x56\x4b\x2c\x9b\x7d\xf0\x00\xf4\x0d\x66\x2f\xea\xb7\xe9\x6a\xe7\x3b\x80\x83\x3b\xf4\xbe\x13\xe5\x53\x6b\x75\x29\xf1\xf1\xa9\x51\x32\xd4\xbf\xb8\x67\x9e\x2d\xcd\x13\x0a\x1f\x1f\xbf\x7f\x91\xf5\xda\x2f\xb5\xd8\x64\xa2\x2f\x52\x4a\xd3\xeb\xdb\xee\xef\xd1\x95\xf9\x4b\x46\xd2\x5e\xa7\xe3\x56\x2e\x1f\xc5\x31\x72\x63\x78\xd2\xaf\x37\x40\x36\xec\xd1\x65\xde\x0f\xf4\x1e\xe9\x57\x35\x69\x56\x1e\x19\x7d\x95\x28\xf4\xf8\x1b\x52\xc0\x2d\xdb\x86\x57\x0b\xfd\xc0\x6a\x45\x6f\x5f\x6e\x24\x1a\xd7\xce\x96\xe5\x62\x59\xbe\xca\xa6\x8a\x5d\x73\x5f\x3c\xda\x6a\x11\xce\x7f\x98\x9f\x19\x4d\x2c\x33\xc1\x14\xb7\x86\x31\xd9\x6e\xa0\x18\x0c\xbb\xe5\x32\xf8\x69\x8e\xe3\xe5\x18\x6b\x73\x15\x8d\xc7\x01\xe2\xae\x28\x75\x7e\x12\x8d\xc7\xa7\x3c\x99\xf1\x44\x8a\x14\xfe\x2d\xa8\xfc\xa9\x39\x65\x83\x62\x46\x26\x65\xaf\x8f\x42\x07\xa3\x22\xcb\x51\x5a\x45\xe3\xb1\xd0\x52\x31\x63\x6f\x46\xda\x38\xc1\x25\x16\xe3\x50\x4e\x92\xcc\x74\x46\x55\x37\x60\x19\xda\xfd\x15\x7f\x57\xc2\x97\x36\xdd\xea\x99\x18\x57\xe9\x58\xe1\xae\xe4\x22\xa3\xe1\x7a\xe1\xc7\xe3\xb8\xc1\x96\x7e\xfe\xe8\x1e\x99\xb6\x9b\x3d\x32\xd5\x15\xdf\xaa\xb6\xb1\x33\x2b\x40\x86\x04\x68\xf8\x7e\xb0\xc5\x0e\xdb\xed\x93\x23\x50\xfe\xa1\xfc\x3f\x55\xd2\xb2\x6e\xfa\xdf\xe2\x51\xa3\xf5\xaa\xcd\xfb\xa2\xb1\x96\x1a\xbf\x96\xb3\x29\x0a\x6a\x9e\x5c\xab\x38\xa0\xb0\x2f\x84\x96\x4e\x35\x80\x33\x83\x7a\x7d\x00\xba\xff\x2a\x45\x14\x5e\xd0\x53\xc9\xee\x59\xdb\x67\x95\x03\x30\xac\x26\xbc\x77\xc2\x06\x2e\x35\x8f\x58\x75\x57\xc2\x4d\x7e\xb2\x6e\xe8\x1a\xeb\x49\x1b\x05\xfc\x6d\x7d\x5d\x0e\xfd\xba\xc9\xd7\x8c\x06\x3d\xfa\xbf\xfa\x40\x22\x7a\x0c\x91\xb5\xe1\x10\x7d\x38\x7e\x7e\x1c\xa2\x1c\x33\x83\xac\x00\x15\x19\x37\x9d\x91\x57\x5c\xca\x16\x27\x62\x9a\xae\x01\x2d\x47\xca\x6e\x81\x52\x3c\xc6\x45\x11\xe5\x97\x74\xb1\x40\x04\xec\x82\x92\x5b\x17\xfc\x15\x83\xb7\x68\x74\x91\xe5\x9f\x98\x94\x37\x5f\x26\x25\x59\x24\x5a\x24\x07\x33\x76\x8a\xdf\xbd\xd1\xf0\x21\xf2\xda\x72\x7f\x23\x4c\xb9\x59\x1d\xa6\x19\x83\x68\xde\xb0\x21\x55\x8d\xe1\x98\x6d\x1c\xe6\xc9\x44\x96\x1a\x08\x1c\xf9\x1c\xd8\xac\xd3\xce\x9d\xba\xb0\x67\xbe\xf3\x43\x15\xac\xc5\x4e\x91\x63\xdf\x68\xf6\x93\xfb\x73\xf2\xd5\xd4\x60\x06\xe9\xad\xa7\xf2\x08\xa5\xea\xe7\x04\x6f\x8f\xc9\x01\xf0\x1c\xb9\x59\x8e\x0f\x1b\x2c\x47\x32\x3d\x6e\xd2\x63\x76\xd1\x63\xf9\xc9\x8b\x15\xb8\xb4\x22\xc5\xf8\x7c\x5c\xd5\x1e\xc4\xea\xa7\x9b\xe0\x9a\xf1\x2a\x18\xcf\x90\xab\xe8\x05\xa9\x20\x27\x97\x2b\x0f\x5b\x16\xbc\x83\x81\x23\xcd\x6e\x14\x7f\x1e\x18\xec\x48\x7d\xec\x21\x01\x20\xb8\x10\xfc\xbf\x27\x52\x25\xcb\x61\x3f\x64\xba\xc6\x68\xc4\x4f\x53\x8e\xc4\x9f\xf9\xf3\x6e\x97\x9b\x33\x34\x28\xcf\x44\x15\xfc\xb9\x82\x23\x77\xc2\x1d\xf0\x60\xa4\x3b\x0d\xa7\x8c\xf9\xbb\xfb\x9b\xd1\xfb\x9b\xd1\xbf\xf6\xcd\x28\xbf\x16\xe5\x4f\x7e\xff\x2b\xe2\xeb\xdd\xa9\xc7\x70\x38\x04\x3c\x44\x87\x59\x7a\x8e\x29\x2b\x8a\x78\xc8\x63\x38\x07\xc3\x59\x00\xe2\x16\x8b\x40\x2e\x94\x80\xa3\xa4\xc8\x50\x94\x24\xd9\x45\xc1\xc2\xb3\x83\xa2\xae\x18\xac\xd1\x8a\x84\xe0\xff\x9a\x7c\xc6\xf1\x35\xcb\x5a\x73\xef\x35\xd6\xf8\x8d\x6a\x99\xd9\x41\x8e\xb9\xca\x52\x1e\x38\x7b\xa6\x4a\x14\x5d\x5d\x89\x00\xe9\x2a\xa3\x2b\x75\xa8\xdd\xbe\xad\x0c\x60\x67\x39\x2e\x22\x31\xc5\x2c\xeb\x43\x4f\xe8\x17\x8d\x86\x98\x1e\xe2\x78\x02\xaa\xe6\x3e\xd4\xbe\xe9\xd4\x09\x90\x9c\xef\xeb\x2f\x5a\x8d\x3b\x23\x11\x44\x49\xb6\x03\x47\x2e\x2a\x6a\x52\x4e\x2b\x2e\x7f\x6c\x4b\xd8\x4c\xea\xf7\xf9\x61\x2b\xa0\x93\x70\x8e\x73\x32\x01\xbf\x1e\x39\x1e\x47\x94\xe3\x68\x81\x6a\x1e\x3c\x40\x49\xf4\xeb\x25\x4a\xb2\x28\x46\xf1\x65\x1a\xcd\xc9\x18\x65\x29\x2e\xa0\x35\x3e\x21\xaa\x21\x1e\xcc\x3a\x93\x7a\x02\x80\x12\xf6\xf5\xa2\x71\x07\x8a\xce\xd6\x14\x97\xc7\xf2\x90\xec\xf1\xe0\x4c\x27\x46\x09\xac\x4d\xee\x01\x74\x65\x02\x9f\x12\x71\x4c\xae\xbe\xf5\x30\x34\xfd\x95\x57\x2f\x2c\xbb\xb8\x20\x10\xaf\x44\xeb\x15\x02\x1d\x44\x81\xd9\x09\x3a\x74\x5e\x56\x31\xe1\x7d\x99\x63\xae\x5e\x0c\xe0\x02\x6f\xcc\x56\x07\x3b\x1c\xcf\xf0\x67\x9f\xda\x40\x69\x4d\xad\x04\xcb\x13\x65\x8b\x22\x86\xe6\x93\x87\xd5\xae\x54\xca\x5b\x0a\x7f\x11\x84\xfb\x29\x0f\x4f\x4e\xab\xe2\x8b\xac\x8f\x42\xb1\xde\x38\x98\x2b\x2b\xf9\xae\x09\x3c\xcf\xeb\xa0\x9b\xa1\xd5\xed\xc0\x81\xa3\x4b\x40\x41\xd1\x2f\x17\xa6\xcc\xf4\x7a\xdc\xfc\x48\x44\x65\x16\x40\x91\x1e\x93\xd9\x6e\x0d\xee\xaf\xc2\x95\xae\xb5\x06\xb2\x5c\xdf\xd7\xbb\x9b\xd4\xc8\x4b\x99\xfa\x29\xed\xa0\xc3\x28\xb0\x98\x51\x0a\xf4\x20\xdc\x22\x75\xa1\xaa\x39\x88\x63\xf6\x2c\x42\x2a\xd1\xa2\x34\x46\x05\x2e\x0b\xb4\x5c\x40\x06\x3f\x8d\x00\xcb\x20\x25\xce\xe9\xde\x91\x9d\x73\x61\x8b\xbb\x31\x1d\xac\xad\x69\x4f\x23\x5e\x65\xd3\xe2\xa0\x7c\x5f\x46\x79\xb9\x66\x6b\x1a\x0b\x9c\x4c\x64\xe2\xc4\x7d\xbf\xcc\x59\xb8\x59\x8b\x11\x27\x0c\x27\x13\xc7\x87\x8f\x78\x64\x37\xc5\x25\xd3\x67\xd1\xc2\xd6\x4b\x3b\xd0\x2f\xa8\x61\x16\xd0\x3d\x24\x4e\x9e\x16\xcf\xa0\xad\x0c\x7c\x8c\x03\x32\xa6\xb8\xec\x59\x6f\x7e\xb8\x25\xa3\x73\xca\x19\x0e\x51\x9c\xa5\x5d\xfe\x4a\x94\xf6\x91\xa3\x0d\xcc\x26\xe1\xa2\x5b\x24\x0a\xb3\x23\xf0\x84\x31\x18\x0c\xd0\x2f\x4b\xe6\x08\x98\xb6\x49\x79\xaf\x73\x5e\xae\x78\x18\x59\xf3\x28\xf2\xda\x7e\x01\x6b\xad\x74\x39\x0c\xff\x19\x93\x65\x7a\x0f\xa6\xcc\x90\xb3\xe9\x99\x26\x7b\xbc\x63\x9a\x7d\x1a\xfd\x6b\xf6\xc3\xfa\xf5\x48\x77\x91\x25\x09\x23\x1f\x3f\xd9\x72\xda\x54\x60\x36\x5d\x4a\x95\x08\xa8\x6d\xd3\xd7\xd2\x0c\xd7\x20\x96\xac\x82\x5c\xf8\x8c\x66\xce\x9c\x0a\x23\x0b\x4a\x7a\x62\xac\xbe\x49\xf0\x3d\x9b\xf2\xd1\x44\xd6\xfa\x24\xdf\x96\x3a\x6e\x46\x19\xca\x4c\x19\x86\xa6\x94\xd7\x4f\xad\x04\x55\x49\x28\x0a\xb9\xa4\x73\x2b\xf4\xdc\x8e\x48\x2b\xf5\x01\xd0\x27\xdb\x19\x35\x65\x3c\x6f\xb3\x24\xa1\x7c\x46\xf5\x84\xd1\x60\xc8\x8a\xd0\x73\x1a\x9e\xe3\xb4\x84\x23\xe7\x80\x52\x1c\x0c\x4d\xed\x25\x0b\x6e\x68\x7f\xca\x30\x05\xe4\x78\x14\x9f\x05\xe2\x8a\xca\x48\x0e\x14\x31\xf2\x1c\xdd\x8d\x11\x53\x10\x03\xfd\xd2\xcd\x5a\x44\x2d\x74\x48\xdc\x92\xc9\x02\xe4\x84\xf7\x10\xcb\xcd\x73\x3b\x10\xf0\xd3\xd4\x61\x8e\x61\x4c\x60\xaf\x7d\xe8\x79\xe8\x08\xcc\x8e\x69\xb0\xb5\x0b\x57\x03\x1f\x9a\x86\x6f\x15\x55\x59\xa5\xae\xab\x52\xd9\xe3\x57\xaa\x99\x9d\xd1\x6c\x09\x50\xa5\xc7\xf8\x4a\x6b\x4c\x25\x6c\x2a\x31\xd8\x12\x7d\x35\x68\x07\x0d\x66\x82\x06\x29\x66\xde\x7d\x32\x26\x57\x08\xb7\xac\x91\x19\x7c\xcb\x3d\xac\xca\x57\x6c\xcf\xc9\xd2\xaf\x9d\xe4\xef\xca\x7e\x0f\x52\x7c\xc1\x6f\x9d\x74\x1c\xe8\xbe\xc2\x18\x93\x24\xb1\xe1\x1a\xcf\xcf\x1c\x1b\x96\x7d\x6f\x3c\xf2\x88\xb9\xe3\x51\x23\x1f\x44\x9c\x23\xf3\x73\x61\x0d\xf5\x5a\x0e\x49\x5d\xf6\x52\x53\xd6\xdf\x8d\x7a\xbd\xb3\xb1\xb4\x29\x11\xc4\xae\x1f\x40\xdd\x55\x43\x8e\xe1\x92\x81\x9e\x39\x16\x38\x8d\xc1\xc0\x4d\x4e\x72\x54\x80\xa2\x25\x2d\x28\x85\x4a\x5f\x30\xaa\xa2\x6c\x02\xc0\xb4\x10\x95\x7a\xfa\x4c\xb9\x22\x5b\x5f\xa6\x51\x51\x90\x69\x8a\xe3\x81\xdb\x47\x9b\xa2\x7c\x3c\xd9\x37\x3b\x52\xc6\x1a\x8f\x1a\x26\xc8\xdb\x8c\x6e\x32\xa6\x8d\x44\xd9\x13\xa3\x44\x97\x0e\xa3\x24\xc7\x51\x7c\xa9\xde\xab\x2b\x41\xb1\xb8\x3d\xa5\x99\x82\xac\x90\x5e\x9b\xc6\x45\x26\x3d\xab\x35\xe9\x03\x6e\xd3\xf5\xc8\xa5\x56\x26\xe3\xe2\x3e\xb7\x90\x54\x8a\x2e\x33\x3e\x36\x32\x9f\xe3\x98\x44\x25\x4e\x2e\xed\x66\x39\xb9\x8f\xdb\xd2\xb6\x29\x9d\x40\xf5\xbd\x0a\x4f\x13\x3e\xaf\x55\xba\x26\x9b\xb1\x7c\xba\xfd\xb0\xc1\x68\x77\xb9\x17\x4e\x94\x0e\x7b\x33\x37\x79\x1b\x33\xec\xd3\xfa\x21\xd4\x31\x06\x73\xd4\x47\x63\xcd\x13\xbf\x2e\x75\x07\xa2\xe1\x5a\xbb\x13\xbe\x6e\x3b\x10\x7d\xdf\x6d\x1e\x8f\x23\x39\x64\x0b\x21\x38\x98\x03\x69\xe0\xef\xf0\xb4\x7c\x9e\x9d\x0b\x95\x26\x8a\x8a\xcb\x74\x2c\x0f\x3f\x3e\xc1\xc8\xc7\xb7\x97\x29\xbc\x9d\x36\x10\xa0\xc9\x18\x16\xb6\x1c\xde\xa5\x1b\xc2\xaf\x52\xb3\x21\xf8\x3b\x18\x9d\x5a\x21\xdb\x7d\xce\x13\x1c\x99\xc2\x6b\x72\x22\x4b\xda\x42\xb9\xb5\xa3\x56\xd8\x51\x0e\x87\xe8\x68\xa2\x38\x23\x29\xe4\xbb\xbe\x4b\xcc\xdd\xaf\x20\x52\x22\xe5\xa5\x4b\x95\xbb\x98\x61\x30\xc6\xe0\xa3\xef\x23\xc6\x54\x0b\x44\x4a\x93\xad\x7a\x37\x6a\x87\xd8\xe5\x32\xf3\xed\x1e\x3e\xf4\xf3\x1a\xed\x09\xd5\xf7\x63\x88\x90\xe2\xe1\x6f\x5f\xd1\x3f\x8f\x25\x8f\xe7\xd8\xb6\xde\x4b\xb2\x69\x55\xbb\xc8\x62\x4c\x35\x67\x0b\xa8\x25\xa4\x7b\x42\x85\x3b\x3e\x7f\xc0\x12\x13\xc4\x39\x00\xd8\x03\x6b\x4f\x47\x8e\x9b\x29\x2e\x88\x1f\x3d\x67\x09\x21\xa7\xb1\x5e\x7f\xc0\x76\xe4\x71\x24\x1c\x16\x82\x5b\x15\x1c\x23\xba\xba\x67\x79\x96\x66\xcb\x42\x7a\x2f\xe4\x86\x01\x74\xb7\xb7\x3d\x11\xb1\x6a\xb8\xb0\xdb\xf5\x9a\xd7\x82\x53\x89\x4c\x59\xe9\xb5\x21\x20\xd7\x86\x8e\xd6\xd0\x3c\x87\xb7\x98\xb7\xeb\x06\x7e\xec\x5c\x91\x32\xdc\x3a\xb1\xdf\x6a\x2e\x48\xaf\xcf\x82\x9d\xcd\x36\x57\xa0\xdd\x65\xc1\xf4\xe2\xe3\xb2\xbb\x76\x7f\x21\x7a\x7f\x21\xfa\x27\xbe\x10\x55\x4f\x45\x35\x95\xf5\x4d\xde\x8b\x72\xe0\x15\x6e\x32\x7d\xb1\xdf\x5a\x3f\x31\x4d\x27\x64\xea\x85\x63\x59\x02\xf0\x68\x14\x59\x31\x5d\xc8\x28\x4a\x3d\x71\x5a\x40\x9b\xcc\x02\x4d\x31\x1b\x69\x76\x99\x39\x22\x53\xee\xc1\xc0\xb2\x62\x64\x40\xcf\xc8\xd4\x52\xea\xeb\xd6\x8c\x4c\xe3\x7c\xc5\x20\xae\x24\xec\xb5\xe9\xb4\x4a\xa5\xeb\x96\xb8\xa0\x67\xac\x68\xc3\x90\x8a\x58\xef\xbc\xcf\xd0\xca\x4c\x96\x15\x60\x7b\x52\x09\x44\x8a\xb7\x39\xe6\xd7\xa0\xda\xed\x84\x51\xf7\x48\xa5\x5b\x0d\x8c\xf4\x12\xf4\x20\xc1\xbd\xdf\xa3\xab\x2b\x37\x8f\x9f\x4d\xfd\x99\x38\xca\x13\x42\x8b\x6a\x5d\x4b\x17\xcb\xf2\x39\x9e\x44\xcb\xc4\x7b\x71\xd2\xd4\x47\xba\x23\xdb\xed\xc8\x2b\x5f\x6f\xf4\x16\x4a\x32\x83\x58\x6b\xd1\xe3\x7b\xaa\xfa\x1e\x47\xef\x82\x35\x8a\xdf\xa2\xfb\xf6\x8b\x2e\x26\xa0\xd0\x5a\x2a\xe6\xd8\x68\xd4\x53\xa1\x96\xed\xc1\x83\xa0\xad\x97\xf8\xb3\x67\xe4\x7c\x55\xb1\xc1\x16\x9a\x51\x64\x36\x41\x91\xe1\x1a\x30\x4a\x63\x71\x53\x5a\xc0\x4d\x09\xb3\x0b\xa0\xeb\xee\xe5\x8b\x7f\x5a\xcb\x0d\xea\xa0\x72\xb1\x77\xa1\x09\x5d\xbe\xe1\x62\xd7\x31\x7c\x17\x57\xe4\x42\xdb\xef\xd6\xe9\x0d\xfc\xfd\xc5\xb8\x3c\x86\xeb\x3f\xed\x0a\x16\x3e\xaf\xae\x2c\x1a\x3a\x18\x43\xd8\x05\xcd\xf1\x99\x0e\xef\xf1\xb8\x25\xaa\x85\x3e\x71\x37\x54\xfe\xab\x47\x53\x0e\xd2\xab\x2e\x33\x1e\x2f\x9a\x94\x68\x4e\xa6\x33\x26\x38\x4a\xe7\xc5\x5c\x49\xe5\xb4\x5c\x66\x8d\xed\x96\x99\xd9\xea\x69\x77\x1a\x15\x6f\x73\x32\xc6\xdd\x00\xd1\xdf\xf4\x3f\x98\x3e\xfa\x23\xcd\xd2\x31\xf6\xbd\x4e\xfc\x84\x2f\x6b\xde\x27\x7e\xc2\x97\x6d\x5f\x28\x42\x4d\x0e\x0e\x59\x0d\xfb\x9a\x3d\xc5\x73\x3c\x26\xf3\x28\xe9\xe9\x00\xee\x0b\x31\xf3\x12\xf5\x6b\x13\xb1\xe6\x4a\xf3\xae\x69\xd9\x57\xf5\xdd\x93\xf4\x4d\xa9\xf6\x9e\x5e\x7f\x4b\x7a\xe5\x42\x8c\x43\xb0\x70\x5f\x2a\x62\xff\x70\x6a\xf5\x8a\x36\xad\xe9\xf4\xb3\x29\xce\xf0\xf4\x35\x43\x86\x69\xa4\xcc\xf2\x73\xff\x8b\xd4\xe4\x7d\x1e\xe8\xdb\xdf\xba\x38\x4d\x2b\x0d\x96\x09\x20\x3d\x5a\x64\x02\x7f\x26\x80\x7c\xb3\x41\xd3\x35\x5c\xc0\xeb\x30\x7f\xf5\x0e\x94\xb7\x0d\x1b\x4a\x28\xeb\x3e\x0f\x80\xa4\xfc\x85\x20\x4b\x41\x4e\xa3\xc2\x0f\x37\x8d\x0a\x03\x0a\xc8\x57\x03\x55\xa2\x9d\x96\xaf\x4a\x08\xe3\x35\x2f\xb8\xfe\x54\x56\x9c\xa4\x3f\xaf\x4c\x4a\x22\xca\xcc\x4d\x48\x8a\x07\xbc\xa9\xa5\x2c\x19\x7f\x69\x15\xf2\xb2\x2b\xb6\xdc\xae\xe8\x81\x73\x54\xa0\x9c\x06\x7a\xf3\x41\xb9\x73\xe6\x81\x52\x94\x27\x32\x5b\x90\x5f\x25\x68\x75\x93\x15\x84\x28\xe3\xb9\x2c\xe7\xcb\x24\x2a\xc9\x39\xfe\x29\x2a\x4e\x0a\x78\x97\x56\x55\x95\x03\x6b\xd5\x35\x6d\xac\x61\x2a\xcb\x89\xc1\x9b\xa6\x06\x02\x2e\xc9\xa6\xb6\xe5\x9e\xca\xd0\xa2\xd1\x38\xaa\x25\xd0\x0f\x79\x15\x4b\x9e\xd7\xad\x14\xb6\x49\x8b\xc4\x5b\x6a\xb5\x00\x60\x76\xdb\x93\x3c\x48\xdd\xb5\x54\x0e\x15\xb6\xa0\x71\xb3\x26\xdd\x3e\x05\x6a\x90\x06\x2a\xc3\x21\x92\xae\x7d\xc0\xc7\x1d\x3f\xbd\x22\xc4\x9a\xa2\xf3\xf3\x8a\xcc\x49\xe9\x99\x42\x13\x80\xe3\x4a\x26\x56\xcc\xbb\x91\x6f\x94\x29\xc8\xaf\x3e\x26\xa8\x32\x0d\xe8\x92\xcc\x71\x51\x46\xf3\x45\x65\x11\x09\xa1\xd6\x15\xcb\x48\xab\x56\xae\x91\x5d\x55\xad\x3c\x1a\x6b\x9d\x89\xc9\x64\x42\xc6\xcb\x04\x9e\x67\xb8\x3c\xd4\x06\x32\x07\x92\x95\x51\xf2\xbc\x4d\x05\x16\xa4\x2e\x24\x99\x6b\x86\x83\xab\x65\x6e\xae\x1c\x37\xdb\x15\x41\x48\x89\xe7\x7d\xfb\x61\x96\x63\x1d\x07\x50\xee\x3d\xa4\xb1\xbe\x7c\x9b\x39\x2b\xd8\xb4\xd0\x46\xec\x68\xdd\x62\x99\x25\xd9\xd4\xbb\x9e\xf4\xb5\xed\x5b\x4d\x49\x36\x55\x5a\x14\x77\x49\x41\xbd\xc6\xb2\xd2\x2b\xd4\x17\x95\xa6\xbd\x26\x13\xfa\x65\xf0\x75\x39\x4e\x2b\xc3\x43\x63\x76\xd1\x3d\xbd\x4e\x87\x71\x1b\x15\xb7\xd8\x01\xbc\x95\x18\x4d\x24\xd9\xd4\x53\xb5\x48\xad\xa8\x52\x16\x32\x85\x4e\xd0\xc8\x37\x1f\x90\x2e\x66\xa4\xa0\x7c\x71\x91\x15\xe5\x0d\x4e\x48\x6f\xb3\xa2\x5e\x30\x70\x23\xe9\xd4\xf2\x4f\xb7\x52\x7d\xa2\x69\x27\x75\xe6\x49\xbf\x07\x8b\xe8\x12\xcc\xe3\xf7\x0d\x6d\x87\x9e\xc5\x91\x0c\x49\x65\x99\x78\xc5\x78\x91\xa9\xc3\x5e\x64\xf9\xa7\x0f\xd9\xdb\x3c\x3b\xc7\xd5\x65\x34\x20\xbd\xec\x22\x27\x59\x4e\x34\x8e\xe2\x14\x14\x10\x9a\x83\xf8\x89\x1e\x3f\xc8\x30\x88\x65\xac\x85\x75\x92\x79\xcb\xd0\x79\x8a\x96\x8e\xf6\x8d\xaf\xa7\xe8\x54\xfb\x3c\x43\xa1\xbc\x8d\xbe\x56\xad\x32\x55\x2a\xd3\xaa\x26\x49\x76\x01\xaf\x03\xc4\x31\xb6\xae\xfa\x7a\x6b\x76\x16\x01\x8f\x12\x13\xca\xd2\xe4\x92\xb9\xf5\x2f\x0d\x23\x7b\x61\xe8\xce\x0c\xda\x7d\xef\x33\x84\xb5\x3b\x0a\xed\xb7\x17\xba\x9d\xbb\x7d\xe2\xa2\x7d\x6c\xc5\xbb\xa4\x5a\x1f\xe8\x9f\x1b\x1b\x7a\xb9\x59\x13\xa5\xfb\xc9\xda\x54\x0f\xd7\x13\x36\xa7\x6b\xc0\x2f\xfe\xbc\x20\xf9\xa5\x67\xc5\x6b\xb9\x3a\xb9\x15\xcc\x0b\x88\x17\x9a\xe6\x55\x2d\x01\x0b\xd4\xb3\x00\x80\xb2\x7d\xb2\x84\x05\xd1\xdf\xf3\xad\xca\x77\xd1\x85\x20\x19\x9e\xe2\x05\xd3\xaa\x3f\x28\xc6\x84\xd8\xcb\x57\x94\xd1\x77\xdb\xbf\x17\x1c\x71\x12\x4e\xc5\xd1\x50\xab\x42\x35\x00\x6e\x71\x21\x96\x95\x8f\x39\x0c\x87\xab\xac\x08\x58\x9b\xfa\x6a\xac\x5c\x8c\x6a\xb9\xdd\x62\x25\x59\xda\x5c\x86\xa2\x76\xf4\x2f\x99\xaa\xad\x80\xf1\x05\xbd\xd0\xad\x35\x08\xbb\x8d\x49\xf1\x05\x5c\xcc\xf4\xcc\x90\xc8\xa0\xb1\x1e\x45\xe9\x80\x14\xff\x88\x12\x12\xf7\x20\x64\x01\x4f\x79\x4e\x72\x3c\x2e\x7b\x3e\x75\x35\xf7\x0c\x05\x80\xbc\xc6\x5e\xdf\xd1\x85\xeb\x82\x8e\x8a\x24\x23\x7a\xe0\xa9\xd6\x70\x3e\xe6\xa9\xa8\x45\x15\xbc\x67\x66\x4d\xfc\xda\xd5\x32\x05\xe0\xee\xa1\x05\x6c\x57\x84\x76\x56\x0b\xfd\xfd\x65\x3a\x26\xa9\x5f\x5a\xe1\xfe\x98\xb5\x0b\x84\x75\x33\x09\xb9\xee\x69\x0c\xf1\x0c\x9c\xd9\x80\x2d\x19\x49\xa7\x70\xd4\xf0\x9e\xf0\x5c\x30\xd3\x25\x10\xf7\xce\xd3\x50\x81\x0e\x65\x96\x9f\x91\xe9\x0c\x17\x4d\xe5\x75\x28\x8d\x76\x78\xee\xa7\x34\xbb\x48\xdf\x97\x51\x69\x47\xea\xb7\x73\xab\x1b\xd0\xab\xd8\xb3\x6b\x58\x2c\x93\x04\xc7\x4d\x55\xe8\x50\x15\x87\x4e\xe5\x25\xa8\xc2\x11\x7c\xd3\x3d\x58\xd8\x08\x11\xa8\x7a\x6a\x2a\x68\x28\x69\x5c\x91\x84\x9e\x34\x0d\xd6\x77\x36\x08\xab\xb3\xb4\x92\x36\x2f\x09\xfd\xc9\x5a\x09\x63\xe7\x0b\x3d\x69\x0c\xb6\xea\x16\x35\xac\xcc\xd1\xcb\xf9\x07\x54\x9d\x57\x51\xd6\x56\x4b\x79\xaa\xb0\x41\x8c\xde\x1b\x87\xff\xd0\x9b\xaa\xc3\xeb\xa7\x9a\xd0\x93\xa6\xc3\x5a\x68\xf4\x24\xea\xd0\x36\x17\x0a\x2b\xd2\x19\xf7\x32\x4c\x6f\xd8\x7d\x42\x27\xdc\x7a\x52\xe5\x50\x86\xb2\xf0\x4e\xb8\xb3\x73\x7d\x16\xec\x6c\xdd\x3b\x23\xb8\xb7\xbd\xf9\xaf\xb1\xbd\xe1\x94\x7e\x17\x51\x45\x56\x73\xc1\xde\xd2\xe0\x86\x05\x3d\x31\x2d\x69\x58\xda\x57\xf0\xe5\xde\xde\xfb\x7a\x94\x24\x43\x2b\x3e\x21\x3c\xab\xb4\xa3\x9b\xb8\x3e\xd9\x85\x6d\xb0\x1b\xc8\xa9\xc6\x17\xbb\x2f\x92\xd3\x47\xb6\xb9\x71\x5f\xe1\x7a\x08\xd3\xd5\xfd\x78\xab\x4a\xf9\xee\xa0\xd7\xca\x92\x6e\x57\x2d\x84\x3f\x8b\xe0\x58\x07\x75\x8a\x6f\x1d\x46\x84\x38\xe5\x20\xfc\x53\x87\xb8\x13\x3f\xf2\x74\x7f\xb0\x27\xc3\xf0\x38\x08\xd7\xc0\xea\x25\x8e\x7e\xb2\xc8\xa7\x85\x2e\xeb\xde\x20\x70\xaf\x90\xf1\x55\x94\x33\x78\xce\x0f\xbc\x9e\xbd\x1d\xc9\xa7\x05\x73\x16\xbf\xce\x85\xb7\x76\x1d\xd6\x85\xb1\xda\x4e\xeb\xdd\xfb\xc1\x21\x25\x91\xa3\xc7\x6c\xe3\x8f\xd4\xdc\xc1\xf9\xc7\x66\x3f\x41\xaf\x11\x13\x7b\x0a\x0f\x2d\x11\x51\x17\x99\x4d\x8f\x25\xeb\x0b\x3f\x44\x0a\x34\xce\xf2\xdc\xf5\x0c\x08\x27\xa0\xa8\xc4\x07\xf9\xb4\xf0\x05\x6b\x53\xd1\xa2\x1f\xa2\xbf\xc1\x09\xaa\x40\x5f\xe0\xfc\x74\x4d\xdb\x23\x25\x37\xcd\x37\x9c\x07\x7a\xa6\x4a\x6f\xa7\x72\x8e\xd4\x21\x97\x41\x01\x8a\x1c\x13\x81\x48\x21\x9e\x9e\xf1\x99\x3d\x37\x28\x84\x0c\xaf\x1c\xb0\x79\x82\x2f\x38\x15\x84\x89\x6e\xb5\x11\xbc\xe0\xca\xa3\x4b\xf1\x1e\x89\xcf\xdd\x7a\xcf\x89\xe1\x17\xf5\xa5\x67\x69\x7a\x2e\x76\x54\xf4\xd6\x8d\x01\x07\x67\x5e\x62\x6b\xe1\xd5\xa5\x84\x51\xc6\x2a\x60\x3d\x86\x84\xb3\xba\xc0\x8e\x20\xc4\xf5\xfd\xfd\x2a\x42\x36\x1f\xa0\xd0\xb3\x2f\x0f\xa3\x55\x13\xec\xaa\xe7\xbc\x0b\xaf\xf3\xa4\x2a\x94\x32\x60\x92\xa2\x93\x8a\x11\x0b\x20\x7b\xcb\xc0\x3c\xe4\xe5\x6c\x1a\xca\x83\x72\x85\x57\xd5\x28\x91\xad\x2a\x0b\x9d\x5a\xca\x93\xed\xd7\x92\x9d\x11\x3d\x72\x75\x86\xb1\x2a\xbf\x30\x83\x3e\x56\x44\x95\xbc\x56\xdc\x5c\x5f\x3e\x3d\x4f\x88\xc7\x32\xf3\x3b\x70\x37\x42\x40\xee\xa3\x0a\xe7\xec\x3e\x1f\xdf\xfc\xf9\x81\x36\x5c\x23\xb6\x64\x8d\x49\x4c\x45\xf0\x11\x81\xfa\x9b\x05\x59\xf0\x16\xaf\x9d\xf7\x1b\x85\x5a\xe0\x5e\xa2\x37\x03\xf4\x44\x68\x83\x6a\x9a\x58\xa6\x8b\x68\xfc\xe9\x98\xe9\xa1\x0d\xa3\x2f\x48\x32\x74\x43\x66\x92\xea\x82\xe9\x2d\x47\x54\xc5\x7e\x48\xd2\xdb\x47\xdb\xe8\xa9\x48\x14\x8e\xac\x91\x38\x07\xaa\x97\xdd\xd2\xfd\x74\x95\x1f\x6b\x5d\xc8\x09\x78\x71\x73\x46\xb9\x2e\x45\xf7\xc2\x2b\x43\x98\x9d\x6e\x9e\xa1\xd0\xe7\x6b\xf9\x10\x22\xf8\x46\x5a\xd0\x64\x81\x2c\x3b\x2c\x73\x94\x24\xfa\xe2\x1e\x0c\x06\x62\x7d\x1f\xda\x65\xad\xcd\xc7\xf1\x72\x72\xc4\xb6\x3b\x88\xce\x2a\x40\xe9\x6e\x14\xc9\x1a\x02\x33\xfa\xba\x48\x66\x2e\xbd\xe0\x09\x99\x38\x74\x45\xc6\x23\x9f\x28\x8d\x4d\x57\x18\x02\x8c\x85\x2f\x66\x27\x23\x5a\x07\x8b\xfd\x46\xc1\x39\xda\xbc\xb4\xcb\x67\x15\xc2\xaf\x36\x51\x2d\xf4\xaa\x2a\xc4\xed\x2a\xf1\x6b\xfd\xfb\xa6\x90\xc1\x2c\x23\x3a\xb9\xc7\xc0\x41\x46\xc9\x7f\xdc\xf3\xad\x21\x16\xea\xec\x07\xbc\xf7\x9a\xd2\x97\x5e\x44\x17\x7f\xec\x62\x4a\xa1\xcf\x3c\xee\x0a\x2e\x2d\xe0\xd4\xb5\xfc\xba\xef\x45\xa5\xd2\xd1\x4a\xc6\x87\xcb\x19\x43\x02\xaf\x3a\x30\xba\xe6\xbe\x9f\x82\x52\xfa\x12\xee\x19\xeb\x41\xf3\x19\xed\xbc\x78\x6c\xd3\x60\xe0\xfa\x29\x71\x79\x80\xe6\xa5\x44\x18\xc6\x1b\x6f\xd9\x03\x66\x5c\xb1\x67\xfa\x86\x65\x9d\xc6\xb1\xe3\x07\xbb\xcc\x2f\xad\xe7\x5f\x1a\x28\xbc\xf8\xaa\x1e\x2f\x32\x9e\xa8\x8d\xe1\x8d\x70\xcf\xf1\x34\xc2\x28\x7e\x1f\x61\xaf\x8f\x13\xbb\xf3\xa2\x75\x4d\x92\xa9\xdd\x28\xda\x9c\x2b\xed\x6d\xc3\x2c\xd2\xb8\x2b\x58\x2d\xfc\xa9\x96\x5a\xe3\x9a\x11\x24\xc5\x01\xb9\x45\xe2\x0f\x68\x13\x0e\x35\xc6\x59\xd3\x95\x0e\xf5\xc0\x8f\x51\xca\x9e\xdb\xa6\x31\x77\xc9\x07\x91\x3b\xd3\x47\xe2\xa0\xea\x84\x30\x6d\x58\xae\x46\xd8\x2e\xba\x6e\xac\x79\xe8\x99\xb7\x78\xbc\xba\x46\xf0\xf6\xfe\xd2\x71\x51\x92\x79\x54\xe2\x9f\x22\x50\x20\x36\x51\x95\x06\xde\x44\x51\x7a\xcd\x77\x41\x4d\x5f\x9f\x3a\xda\xcd\x90\x36\xae\xa6\xd9\xf1\x80\x56\xcd\xcc\x3b\xd1\x0c\x16\x11\xa0\x58\xcc\x78\xae\x0b\xe4\xf2\x81\x3f\x3a\xbc\xbb\xb3\xda\xd5\x34\xcd\x55\x53\x0c\xf9\x9b\xcd\x53\x2b\xc4\x8b\x1b\x5d\xbe\x32\x6b\x02\xae\x7b\xa5\xe6\x5b\xc4\x91\xd3\x8b\x0a\x3c\x6b\x64\x5f\x8b\xb0\xdf\x36\xa8\x9c\xac\xff\x46\x71\xe5\x64\xa1\x55\x07\xf9\x35\x83\xcc\x29\x1d\x0d\x1d\x60\xbe\x18\x0b\xef\x45\x05\x3b\x35\x37\x31\x22\x0e\x5d\x6d\x95\x52\x33\x2e\x5e\xf6\x8f\xcd\x95\x90\x11\x6c\x43\x80\xe9\x62\x8a\x11\x33\x42\x9f\x13\xd7\xdd\x97\xa5\x71\x7d\x0a\x3e\x44\x3f\xd2\x1e\x77\x51\xc8\x3e\xac\x9d\xa4\x1b\x38\xc2\x4b\xa8\xdc\x6c\xc9\x3c\xe9\x20\x8c\x0f\xe7\x4c\x65\xb1\x8e\x0b\xf7\x93\x8c\x41\x36\x12\x83\x88\x8e\x51\xb5\xfd\xc8\xb8\x33\xf5\x5b\x8f\x27\x44\x8c\x3e\xc1\xa5\x21\xe8\xac\x9b\xd8\x51\xd6\x38\xb0\xcd\x97\xba\x0c\x25\x5c\x2c\xa8\xb4\xaa\xad\xc2\x42\xe7\x20\x5a\x2c\x92\x4b\xee\xf0\xa5\x15\x61\xf5\x6d\x33\x36\xb6\x05\x58\xcd\xd0\xc4\x1b\xd5\xdd\x30\x0f\x3c\x8c\x8a\x62\x3c\x2a\x92\xca\xad\x43\xa8\x78\x26\xec\x6b\x45\x51\x11\xe9\x6a\xc5\xeb\x1e\x6f\x2a\xc1\xf9\x61\x53\x61\xb8\x0a\xd0\x95\x9a\xbd\x93\x5f\x55\xdc\x14\x91\xd8\x48\x54\x52\x65\x31\xb5\x5b\x0b\x4f\x2d\xf4\xf3\x4f\x19\x42\x46\x94\x05\x02\x27\xf9\x78\x99\x44\xf9\xfa\xfa\xfa\x7a\x7d\xe0\x18\x41\x41\x7b\x77\x12\x3a\x86\x69\x7f\x3b\xe1\xf6\x63\xbf\x1f\x8e\xed\xfb\xdb\xff\xfb\xdb\xff\xbf\xf6\xed\x3f\xbf\xfa\xa7\xb0\x22\xb4\x8f\x3f\x20\xc1\xef\x16\x6a\xc0\x67\x59\x50\x6f\x08\xb0\x36\x1c\x42\xe8\xa2\x28\xa7\xa4\x4c\x77\xb0\x65\x61\x0e\x91\x12\x5c\x4c\x26\x13\x9c\xe3\xb4\x44\x38\x3d\x2f\xa0\xd0\x28\xcf\x2e\x0a\x9c\xaf\x69\x7e\x19\x2f\x48\x1a\x67\x17\xa0\xb1\xd0\x1c\xf6\xa3\x07\x0f\x78\xce\xe0\x9f\xaf\x5f\xbd\x2c\xcb\x05\x77\xf9\xc9\xb8\xa6\x99\x86\xf6\xfd\xb0\xc0\xfa\xb8\xbf\x79\x32\x4d\x33\xca\x08\x12\x92\x62\xda\x93\x34\x8b\xf1\x9a\xe6\xe4\xc9\xa9\x51\x0e\xfc\xf3\x3c\xa1\x23\xe3\x1b\x5b\xb7\xdf\xb6\x91\x6b\x86\xc9\x7f\xbe\x7c\xb7\x6d\x54\x37\xcb\xb7\xbb\xfd\xca\x52\x42\x72\xa0\x2d\xbc\x15\xc8\x74\x4d\x22\x40\x7e\xa2\xa2\x3d\x78\x39\x64\x3e\x91\x69\x2f\xa5\x01\x84\x51\x5e\xdf\xf2\x67\x59\x51\x06\xa8\x24\x73\x9c\x2d\xcb\x80\x56\x98\x07\xa0\x64\xbe\xc8\x72\xee\x76\x02\x36\x13\x0a\x87\xf6\x11\xfc\x77\x75\x85\xba\x9c\xd8\x93\x6c\x1c\x25\x34\x31\x7c\xf2\xcd\xee\x37\x10\x1f\x94\xed\x3d\xac\x42\xba\x13\xf2\x5f\x57\x57\x68\x53\x66\xd3\x66\xd0\x3e\xb4\x26\xd3\x44\xa3\x68\x5f\xb6\xdf\x28\x3c\x2d\x72\xbc\x80\x80\x5b\xf8\xc2\x9a\x32\x4b\x76\xe2\x80\xef\xb4\xb3\x8c\x16\x5e\x1e\x47\xe9\x35\xdc\xb1\xb2\xf8\xf2\x6c\xce\x15\x96\xb9\x77\x3d\xed\xc0\x67\xb6\x65\xb8\x70\xd1\x31\xad\xc9\x5d\x66\x07\xcc\x8b\x40\x5a\x3d\x43\x35\xbb\x41\x61\x84\x44\x79\x18\xdc\x00\xaa\x6c\x84\x94\x78\x05\x43\x7e\xf9\x6e\x5b\x85\xe7\x64\x92\x96\x86\x79\x6d\x22\x28\x8c\xe1\xc3\xcc\xaa\xc8\x18\x0f\xab\x12\xe4\x61\x51\x6b\xb6\xc0\x69\xaf\xfb\xf6\xf8\xfd\x07\x11\x51\x90\x11\x0e\xeb\xdc\xde\x9a\xe6\x10\x0d\xe6\xf6\xc1\x03\x73\x52\x8d\x43\xdf\x12\x0c\x6a\xba\xcf\xa2\x82\x8c\x51\x17\x6d\x40\x17\x9e\x2d\x29\x7b\xd0\xaa\xd8\x40\xdd\x50\x5e\x15\xca\x7a\x06\x65\xc6\x1f\xad\x75\x47\x51\x81\x1f\xef\x76\xad\xf1\x2b\x77\xc0\x2f\x71\x14\xe3\xbc\xd7\x3d\x00\xbe\x4a\x7e\x8d\xd8\x69\x0b\xda\x67\x23\xac\x29\x44\xe5\x63\x9c\x96\x8f\xe8\x41\xbb\x1b\xa0\x2e\x95\xfc\xc9\x18\xaa\x18\xfe\x52\x08\xb5\xa3\xbc\xb1\xe2\x53\xd6\x40\xae\x2c\x70\xc4\x65\x3a\xd6\x0e\xd5\xb6\x26\xd9\x77\xf1\xbc\xd0\xae\xaf\xfd\x21\x82\xeb\x48\xaf\xb0\x43\xc6\x09\x5d\x9a\x4d\x72\x82\x66\x4c\x5a\xe5\x31\x67\x81\x1e\x95\x76\x5f\x61\x2e\x8d\x7b\xf0\x20\x82\x05\x03\x21\x93\x4b\x59\x3f\x47\xb2\x50\xe4\xeb\xde\x7e\x7d\xd6\x00\x87\x59\x9a\x62\xfe\x6c\x41\x50\x98\xa2\x44\xe3\x72\x51\xb4\x2e\xfc\xee\x7f\xc0\x9f\x4b\xa7\x83\x1c\x56\x7b\xad\xc1\xad\xe3\xcd\x6e\xd5\x75\xe9\x1d\xaf\xbf\xe7\x6b\x50\x5f\x25\xed\x43\xc0\x02\x0d\x44\x0d\x44\x70\x20\x39\x4e\x0d\x25\xf0\xac\x1f\x9d\xa0\x0b\xa8\xcc\xc9\x74\x8a\x73\x16\x29\x86\xce\x3e\x88\x2d\xd2\xed\x23\xc5\x41\x13\xc1\x40\x0f\x7c\x54\x63\x06\x7c\x6d\x43\x3f\x60\xbc\xb2\x67\x70\x93\x14\x5c\xf4\x16\x65\x54\xe2\xf1\x2c\x4a\xa7\x7e\x05\x02\x33\xef\x17\x88\x8f\xe2\x4b\x30\xac\x87\x1b\xe1\x5d\xca\x61\x6c\x96\xb7\x6e\x06\x6c\x6d\x41\x31\x0a\x50\xdc\x2a\x69\x91\x80\xec\xcb\xac\x06\x8a\x82\x33\x99\xf7\xd6\x4a\xde\x58\xad\x48\x5b\x48\xbf\xda\xb2\x2f\xb6\x8c\x96\xe9\x59\xf0\xda\x42\xb1\xda\x08\x5c\xcc\x9a\x95\x15\x03\xb5\xf4\x3e\xb0\x52\x3d\x7d\xf3\xe0\x0b\xf9\x6e\x39\x80\xdd\x85\x3a\x26\xc0\x57\x9a\xbe\xae\xd4\x65\x79\x72\x49\xe9\x9d\xbd\x2d\x85\xc5\x45\xa9\xba\x62\x6d\x91\x82\xd7\x8f\x4d\x66\x2a\x85\x00\xa1\xe0\xb4\x85\x01\x7a\x7e\x48\xbb\x25\x9a\x44\x24\xc1\xf1\x00\x1d\xd3\x73\xda\x05\xa1\x67\x8f\x08\x82\x3b\x55\xaf\x26\xad\x4d\xcf\x5c\x28\x7c\x4a\x7d\x86\x0c\x22\x40\xe2\x10\x7d\x27\xff\x84\xbe\x8f\xee\x3e\xf9\x62\x1c\xa2\xee\xf6\x60\x53\x2a\x0f\x85\xfe\xb1\x9b\xe2\xf2\x63\x42\x8a\x12\xa7\x24\x9d\xca\x6c\xa9\x3d\x3c\x33\x0c\xba\x84\x82\x2b\x67\x91\xaa\x5c\xf2\x15\x56\x85\x74\x90\x6a\x12\x1c\x75\x81\x3e\x74\xa1\x2a\x30\x4e\xfb\x54\xcc\xed\x84\x4f\xe8\x2f\x43\x7e\xee\x84\x5b\xdf\xd2\x93\xff\xce\xfd\xc9\xff\xfe\xe4\xff\x17\x3f\xf9\x2b\xc3\x7f\x78\xb4\x78\x47\x46\xff\xd2\x90\x53\x3f\x55\x8e\xc8\x94\xd9\xe0\x0e\x7e\x61\x27\x74\x76\x0f\x12\xbf\xc2\x13\x73\x43\x90\x21\xfb\x2e\xb5\x87\x73\xc6\xc6\xc9\x20\x18\xbb\xb8\x98\xd1\xde\xf7\x4c\x03\xad\xef\x59\x61\xf4\x10\x6d\xbb\x2f\xef\xc0\xe2\x8f\x4a\xf1\xe6\xfb\x43\x54\x1b\x37\xff\x2d\x3f\xd5\x45\x29\x3a\x7a\x76\xf0\x86\x4f\x72\x8c\xbe\xfb\x16\x8d\xb3\xf9\x62\xc9\xc3\x65\x8c\x2e\xd1\x3c\x3b\x27\xe9\x54\x0b\x0a\xb5\x8b\xc6\xb3\x28\x87\xbd\x80\xdd\xcc\xc6\xcc\x94\x4a\x98\xab\x0b\xe8\x04\xb3\x47\x0b\x65\x46\x1b\x64\xb8\x2a\x50\xef\x00\xed\xa3\xad\xcd\x00\x3d\xa3\xff\x6f\x05\x68\x30\x18\x04\xe8\xff\xd0\x3e\xda\xf9\xa6\x4f\x0f\x3b\xa8\x58\xe0\x31\x99\x10\xb6\x90\x8e\xde\x1f\x6f\xed\x3c\xde\x7a\x6c\x9b\x98\x91\x22\x83\x74\x3e\x0e\xd7\x39\xe8\x35\x7b\x13\x4b\x3b\x42\x07\x68\x5e\xad\xe9\x37\xcb\x5c\x92\x8a\x05\x18\x77\x6d\x60\xd6\x6f\xc6\xe7\x1f\x45\xa9\x3e\x8f\x74\x44\xdd\x83\xee\x80\xa2\xe5\x30\x8b\xf1\x41\xd9\xdb\xd4\xb4\xd6\x74\x6c\xdd\xff\x73\xb2\x19\x03\x64\xef\x76\x81\x58\xcb\xec\x64\xb1\xc0\xf9\x61\x54\x28\x55\xb6\x96\x5d\x2c\x47\x45\x99\xf7\x76\xfb\xe2\x45\x2e\x4f\xd8\x0c\x76\xad\x1b\x33\x96\xbb\x48\x48\xd9\xeb\x76\xfb\xe6\x63\xe5\xb4\x6f\x5a\x57\x8d\xb3\x98\x0e\x2e\xf5\x75\x5e\xc8\x87\x00\xf3\xc3\x3e\x3a\xa0\x02\x21\x7c\x7c\xbf\x8f\xfe\xaf\xef\xb8\x72\xf7\xcc\x2c\x9f\x58\x03\x52\xfa\x06\x8d\x31\x7a\x84\x0e\xd0\x06\xda\xda\xd4\xec\x8c\x7c\xee\xcd\x45\x08\x49\xdb\x86\xe9\xba\x3f\xf8\x25\x23\x29\x1d\xa6\x6d\xa9\x38\x5e\x82\xe3\x54\x98\xe2\xd7\xc7\xcf\x29\x61\x6f\x6d\x0a\xa6\xc4\x2d\xfc\x80\xf2\x3d\x14\xf7\xed\xe6\xe3\x5d\x9b\xe0\xe6\x59\xfc\xdd\xb7\x5b\x9b\x55\x84\x66\xd2\x97\x72\x47\xcb\xa8\x89\x17\xae\xa5\xa2\x1c\xcf\x23\x92\x32\xdd\x11\xcd\x53\x77\x8f\xdc\xb9\x8b\xc9\x1e\x38\xb0\xb2\x5b\xde\xee\x5b\x6e\x6b\x80\x59\x09\x30\x69\xf1\xfa\x9d\x61\x22\xa7\x9a\x04\x59\xfb\x28\x2d\x99\x47\x9c\x00\x6d\x6d\xf6\xd1\xff\x9f\x62\x6d\xc3\xa9\x85\x39\xc5\xe1\xe6\xe7\xbe\x17\xb8\xb2\x2e\x59\x52\xd5\x67\xcc\x53\xf3\x3b\x24\x66\x82\x0e\xeb\x80\x1b\xfc\xc3\x85\x3a\x24\xf0\xb7\x0e\x9c\x7d\x8a\xf9\xf2\x4f\xce\x50\x77\x5a\xec\x9f\x04\x6e\x09\xad\x96\x9c\xdb\x55\x27\x58\x68\x53\x3f\x31\xc4\x92\x59\xce\xc5\xeb\x1c\x8b\xa8\x28\xcc\x81\xcc\x71\xfa\x1e\x69\x59\x42\x8c\xa6\x43\xb8\x96\x6c\x4d\xd7\x8a\xd1\x9c\x81\x56\x63\x93\xcf\x80\xa8\x78\x26\x7c\x06\x68\x2f\x15\x78\x50\x47\xb4\xf5\x58\x63\x61\xa3\xa8\xc0\x3b\x8f\xd1\x3e\x94\x51\xea\xa1\x9d\xc7\x86\x09\x40\x1c\x63\xa6\x59\x84\x3d\xb0\xc7\x0a\x05\x68\xeb\x1b\x53\x12\x96\xfd\x7c\x36\x8a\xd2\x1e\x2b\x66\x32\x3f\x6b\x31\x73\xb7\x24\xda\xc2\x7d\x46\x87\x5e\x66\xc6\xee\x45\xa7\x0f\x81\x27\xcd\xfc\x52\xac\x68\xa6\x4c\x02\x7b\xdd\xb7\xcc\xa5\x7f\x9a\x95\x5c\x28\xfb\x9e\xfc\xd0\x99\x82\x44\xc2\xdc\xdd\x4c\x14\x52\x8b\x59\xc4\xa4\x35\xd8\xdf\x3e\x8f\x93\x65\x41\xce\x65\x04\x42\x32\x22\x09\x29\xa5\x80\x33\x8a\xd2\x4f\xc3\x51\x1e\xa5\xe3\x19\x2a\x70\x7e\x4e\xc6\x62\x03\x8c\x98\x63\xcf\xce\xf7\x43\xf2\xc3\xc0\xa6\x21\x19\x0d\xa0\x10\xbb\xd0\x04\xe7\x74\x1b\x8a\x92\x69\x96\x93\x72\x36\x47\x31\x2e\xc6\x39\x19\x31\xb6\xc4\xe5\x1f\x9c\x0e\x2e\xc8\x27\xb2\xc0\x31\x89\x40\x08\xa2\x5f\xc3\xa3\xb4\xc4\x79\x1a\xb1\xa7\x13\x1f\x9f\x45\xe9\xa7\x8f\xdc\xab\xe8\x47\x36\xaf\xff\xbf\x9f\xf8\x48\xd3\xe9\x47\x3a\xc4\x8f\xf0\x96\xe8\x63\x4c\xa6\xc4\x79\xca\x21\xa6\xc6\x47\x91\x23\xb1\xa7\x8a\x19\x10\x3e\x63\xca\xcc\xb3\xcd\xb6\xa0\xd5\x67\xf6\x8a\x1c\x59\x6c\x91\xcf\xe8\x21\xdb\xa7\xba\xff\x7c\xd1\xdd\x5b\xf3\xf2\x4c\xce\x63\x7b\xd6\xce\xdd\xd3\x2b\xd8\x40\xdd\x4d\x10\x95\xa0\x15\xdd\xdc\x85\xa2\xe3\x39\xc5\x06\xda\x47\x3d\x26\x4e\xf5\xbe\x7b\x82\x1e\xa9\x26\xfa\xe2\xd9\xc0\xa3\x6d\x6b\xbf\x95\x5e\x37\xcc\xa6\xb4\x3a\x79\x83\x0d\x6a\x2b\xce\x44\x34\x5c\x01\x61\xb3\x38\xd0\x24\x2d\x4a\x52\x2e\x4b\xe1\x1b\x97\xc4\x38\x2d\xe9\xa6\x65\xfb\x4f\x67\xb5\x1c\xa5\x31\xc9\xb1\x69\xc0\x60\xbe\xb1\x29\x02\x21\xcb\xca\x47\x36\xf0\x6a\xaa\xa3\xb5\xd4\x81\xa6\x3a\xaa\xad\xce\x2a\xbc\xc8\xec\x89\xd7\x5f\xae\x79\x04\x36\x39\x43\xf7\xc5\x87\x97\x74\x1e\xc4\xeb\x16\x1d\x03\x5a\xaa\xec\x5b\xdf\xe2\xd7\x59\x1d\xbf\x16\x4f\xe9\x18\x72\x79\x90\x65\x52\xb0\x97\x72\x3a\x1f\x77\xe4\x4e\xf0\xa0\x52\x29\x6f\xca\xbd\xc8\xa3\xf8\x10\x0a\x0f\xf6\x9c\x8e\xb5\x24\x85\xce\x23\xcd\x3f\x4b\xad\x9c\x40\x74\x3f\x2f\x84\x91\x95\x2e\xfc\x29\x27\x2f\x8d\xba\x72\x89\x05\xe8\x7a\xe5\xeb\x41\x7d\xcc\xca\xb9\xbe\x77\x54\x01\xca\x3c\x5a\x1b\x18\x9b\xae\xad\x71\x47\x69\x51\xc2\xf0\x3f\xff\x7c\x71\xba\xf9\xe8\xbb\xb3\x2f\xdb\xd7\xbd\x17\x1f\x5e\xd2\xdf\x07\x8f\xfe\xef\xec\xcb\xd6\xce\xf5\x95\xfc\xd8\xd9\x0c\x76\xb6\xae\xfb\xff\x33\x1c\x94\xa0\x04\x95\x1b\xb8\xf1\x2e\xaf\x8a\x31\x68\xe0\xec\x79\xde\xd6\x8a\x08\xe3\x4f\x30\xe1\xf4\xef\x45\xdb\x73\xb5\x04\xef\x06\x6f\xcf\xdd\x95\x64\x21\x4e\x0d\x4a\x7f\xdc\xb3\xb3\x0b\xe1\xda\xfd\x79\xdf\xdc\x70\xd8\x13\x44\xd2\x8a\x81\x1b\xdc\xe7\x6e\x86\xee\x65\x23\xad\x06\xbf\xbd\xd9\xca\x6a\x93\x89\x94\x74\xa4\xc5\x72\x4e\x01\x4f\x0a\x7e\x7c\x98\x67\xf1\xa3\xef\xbe\x7d\xb4\xb5\x29\xb3\xe1\x8c\x0b\xbd\x1b\x67\x09\xea\x1d\xbd\x3f\x1e\x1e\xbd\x38\x44\xf4\xdc\x10\x6e\x6f\x6e\xee\xf4\x6d\x9e\xac\x55\xeb\x9e\x42\xb5\x5c\x67\xe0\x22\xaf\xe5\xb0\xf9\x99\x70\x3b\x40\xdb\xed\x6c\x55\x75\xa6\x6a\x6c\x29\x08\x4f\x07\xe8\x9f\xef\x5e\xfc\xe4\x38\x12\x94\x05\xfc\xa3\xa9\xac\xd1\x9d\x54\x0d\xb2\x69\x78\x8a\x00\x7a\xe0\x65\xce\x19\xf2\xb7\x01\xda\xed\xa3\x10\x75\xbb\xad\xc6\x3d\x4e\x08\x3c\x24\x93\x1d\x04\xe5\x13\x49\xed\xf1\x51\x2c\xfc\x74\xf0\x8f\xe3\x1f\xff\x75\xfc\xee\x7f\xed\x59\x85\x3a\x2a\xe6\xd4\xae\xdf\x3b\xb9\x0c\xe8\xd6\x63\xdf\xda\x5a\x7d\xe4\x7c\x35\xf9\xcf\x25\xee\xc1\xc3\x1d\x9a\x53\x81\x33\xbc\xc8\x73\x0e\xd1\xef\x9d\xf8\xe0\x7c\x0e\xc8\x8c\x43\x87\x3b\xe0\x5d\xed\x10\x5b\x79\x94\x11\xe7\x0f\x79\x4a\x31\x4e\xa8\xec\x8c\x62\x9e\x67\xb6\x1e\xf7\x03\xb4\xbd\x29\x5d\x9c\x19\x52\x9e\x40\xaf\x35\x48\x51\xb8\xdd\x02\xad\xf0\x4a\x75\x04\x59\x4c\xa9\xaf\xeb\x15\x3b\xa1\xf9\x79\x7d\x16\xec\xec\xde\xab\xf1\xef\xd5\xf8\x7f\x71\x35\x3e\x57\xe1\x2f\xc6\xf5\xf6\x7b\xb7\xb0\xb8\xeb\xa8\x48\x73\x9d\xbd\x95\x22\x64\x35\xd8\xe9\x31\x3d\xd3\x62\xec\xb5\x04\x5b\x44\xe5\x2c\x40\x29\x36\xac\xbf\x3f\x82\xe6\xc2\x79\x78\x2a\xae\xaa\xf5\x18\xbd\xc2\x6b\x01\xb7\xd7\x01\x1b\x1f\xfa\x1f\x4b\x55\x59\x63\x79\xc3\x0b\x5c\xb1\x14\x09\xbd\x2f\x14\x3a\x54\xe5\xa5\x2b\x4a\xab\xd8\x20\x4b\x7b\x5d\x18\x55\x57\x8f\x69\xd9\x37\xec\xa7\x8b\x8c\x32\x31\xf6\x96\xf0\xe8\xed\x21\x52\xf7\xca\xec\x85\x61\x37\x40\x7a\x28\xf8\x8f\x8c\x0d\xf2\x0b\xef\x9e\xed\x0c\xd3\xdb\x83\x34\xd6\xdb\xd7\x9a\xaf\xac\x0c\xad\xc9\x37\x06\xaf\x8e\xde\x7f\x78\xf1\x06\x56\xd0\xe1\xf1\x9b\x37\x2f\x0e\x3f\x1c\x1d\xbf\x41\xef\x5e\xbc\x7f\x7b\xfc\xe6\xfd\x8b\xf7\x95\xad\xc6\x51\x19\xe9\xcd\xd2\x6f\x7d\x73\x1a\x3e\xe4\x66\x84\xf3\xe8\xf3\x38\x9b\x2f\x12\xfc\x99\x94\x97\x21\x7a\x0c\x94\x65\xf5\x10\x74\xa1\xd2\x0e\x81\x56\xa5\xf6\x9b\xbe\x27\xa0\x09\xb7\x39\xf8\x62\xc6\x23\x86\x83\x5f\x6c\xdb\x4e\xf0\xee\xb0\x38\xcd\xc0\x5f\x62\x74\x31\x23\xe3\x19\x9a\x47\xe5\x78\xc6\xc5\x57\xb6\x09\x51\x86\x16\x1b\xe5\x3c\xf1\x03\xa0\x69\x7f\xc0\x62\xb8\x8e\x72\x7a\x0b\x16\x08\xfe\x70\xa2\x64\xd2\xfb\xe8\x27\xe4\x53\x78\x1b\x47\xe2\x33\xd7\x1d\xba\x2c\x4c\xc7\xca\xc1\xf6\x1c\x28\x3b\xf4\x73\x65\x48\x54\xa8\x86\xf7\xdd\xae\xe8\xda\xc1\xe2\x84\xe4\xd8\xf0\x08\x60\xa3\xab\x6a\x3c\x74\x28\x9e\xd6\x6b\xc0\x55\x7c\x56\xdd\xb4\x45\xfd\xc5\x38\xc1\x25\xae\xab\xc1\x1e\x8c\x8d\x1b\xfd\x15\xf6\xcf\x74\xd7\x02\x42\xe4\x04\xc1\xea\x03\xe5\x0e\xb3\x95\x4a\x99\xb3\x1c\x94\x31\x57\xcb\xa4\x1c\xac\xad\x09\x61\xd0\x24\xe1\x35\x5b\xed\x01\x2f\x32\xa9\xf0\xa7\x78\x9e\x26\x1e\x99\x85\x75\xcf\xaa\xfa\xaa\xb2\xd9\x60\x60\xc9\x6b\xff\x60\x9e\xcd\x95\x83\x5e\xb1\xc4\x9f\xbf\x78\x74\xf8\xf2\xe4\xcd\xff\xbe\x78\x27\xeb\x89\xf1\x78\xb6\x4c\x3f\xe1\x98\xbf\x2a\x61\x2f\x46\xf9\xdf\x20\xc7\x8b\x24\x1a\xe3\xde\xf0\xdf\xd7\xa7\xff\x4e\xff\x9d\x9f\x3d\xfd\xf7\x97\xe1\x34\xe8\x5e\x5f\x3d\x7a\x74\xf5\xa5\xdb\x07\xd7\xc2\x5f\xbc\xf0\xff\x3e\x13\x25\x4e\x79\x99\x33\x5a\xe8\x54\x94\x3a\x3b\xf5\x97\xb3\x4b\x19\x85\x2a\xca\xa8\xb6\xb4\x96\x64\x43\x5a\x19\x7e\xcd\x47\xb3\xbb\x82\x93\x1a\x18\x70\xd7\x2c\x20\x5e\xe3\x2f\xc3\x21\xdc\x81\x62\xee\x0e\x03\x3c\x6d\x40\x05\x6b\x0e\xe9\xd3\xbc\x43\x9a\x65\xae\x5c\xee\x77\xc6\x82\x41\x1b\x88\xbd\x7f\x35\x44\x75\x79\x67\x6d\x71\x32\xd7\xa9\x81\xcf\x16\x0c\xfa\xae\x95\xe2\xd6\x34\xcc\x98\x66\xcd\x5d\x7c\xaa\x33\xfb\x76\x67\x90\x11\xe6\x9d\x1b\x72\x81\xeb\xbb\x74\x8c\x13\x70\xa8\x2f\x1e\x71\x1a\x65\xc6\x09\x8e\x72\x61\xc2\x65\xb5\xc2\x93\xad\x05\xed\x07\x02\x5f\x0d\xa5\xa8\xc8\xb7\xc7\x99\xe5\xed\xbd\x4e\xff\xab\xb5\xab\xe4\x38\xd3\xe1\xaf\x03\xb4\xb5\xb9\xb9\x89\x1e\xb2\xcb\x19\xcf\x5d\xab\xd7\xf1\x03\xbc\xdb\x03\xec\x08\x7c\x51\x0e\x52\x60\x4e\x2f\x2c\x28\x0a\x7f\xd7\xb7\x3a\xaa\xdc\x19\xb3\x48\x04\xa2\xfd\x70\xcb\x4a\xa7\xc3\x8c\x45\xb0\xb8\xde\xa6\xdd\x9e\xa5\xad\xd7\xc1\xb9\xf3\x1f\xca\x23\x7f\xe2\x5b\x68\x14\xc7\x85\x1e\xf0\x99\x5b\x39\xb8\xd2\x18\x53\x0f\x07\x6b\x6c\xc3\x15\x07\x03\x7e\xd6\x26\xcc\x5d\x3d\xe7\x7a\x73\x11\xbd\xde\xe0\xbe\x47\x31\x2b\x15\xe5\x39\x39\xc7\x3a\xc3\x8d\x62\x39\x7b\xa2\xbd\x1a\x0e\xeb\x81\x36\xbc\xd5\xfb\x6d\x4a\x35\x99\x42\xbc\x56\x27\x31\xba\xba\x12\x5f\xa7\x9b\x67\x72\xcb\x84\x2b\x6c\xd6\x37\x05\xcd\x13\xcc\x12\x2c\x51\x97\xe8\xbc\x9b\x17\xda\x97\xbd\xa9\x93\x78\x29\xe8\x40\x36\x2c\xea\x16\xbb\x9a\x58\x47\xfa\x4a\x65\x61\xe1\xb9\x59\x0a\x13\xcb\xe1\xf4\x05\x1a\x77\xba\xbf\xc7\x1a\x9a\x39\x11\xd7\xa0\xd6\xb5\xef\x94\x47\xfb\x49\x96\xf7\x28\x5e\x3e\xe1\x4b\x76\x52\xf4\x0d\xc0\x74\x02\xd3\xf3\x03\x0d\x66\x51\x71\x7c\x91\xbe\x85\x90\x47\xe5\x25\x84\xb4\xb3\xb8\x40\x05\x7a\x3e\xe1\xcb\xb3\x6a\xdb\xce\x6e\x96\xa2\xa3\xb7\x87\x5d\x3b\x16\x3b\x97\x2d\x6a\xea\x74\xcc\x2c\xd4\x32\x39\xd4\x7d\x10\x72\x77\xe3\x48\x3b\x6e\x90\x02\x15\x25\x61\xc1\x48\x48\xac\x11\xb5\x6e\x16\x5a\x89\x70\xbf\x1d\x67\xaf\xfa\xb4\x24\xe4\x00\xba\x7b\xe4\x98\xf7\x23\x60\x54\x60\xf6\x6a\x9a\xa5\x98\x6b\x9e\x7a\xeb\x1f\x6d\xb1\xff\x22\x27\x25\xf8\x4b\xb1\xb8\x91\x06\x62\x1d\xa1\x3e\xba\x67\x28\xe1\x62\x70\xbd\xaa\x76\xae\x40\xf2\x0e\xbd\xee\x05\xc1\x9a\x4e\x3f\x56\xbd\xf8\xbd\xf6\x74\x05\x19\x9b\xec\x9e\xc1\xb9\x57\x40\x91\x40\x53\x33\x96\x90\xe7\x08\xd5\x78\xd6\x14\xbd\x8c\xb5\x67\xbf\xbe\x51\xd5\x58\x3c\xdf\x4c\x6c\x90\x54\xad\x4b\x0d\xe6\x50\x1a\xf7\x51\x64\xfd\xf9\xf6\x49\xcb\xec\x8e\x6b\x13\xad\x33\x8a\xe3\x8e\xe7\x5f\xd9\x12\xac\xac\xd5\x6b\xb3\x4e\x77\xc3\x66\xb7\x1b\xdd\x0e\x2a\x74\xc3\xec\x81\x6e\xa7\xad\xf8\x20\xbc\xd8\xca\x4a\x54\x2c\x17\x8b\x2c\x2f\x41\xb7\xc6\x6e\x6a\xdf\x1e\x22\xa9\x55\xe9\x1a\x8e\x20\xab\x09\xb3\xf5\x4b\x85\x9b\x2c\xc6\x66\x2a\x5b\x89\xc2\xbc\xc7\x7a\xa0\xa9\x5a\x0b\x7a\xcd\xa1\xae\xbd\x9b\x56\x7a\xbb\x71\xf5\xb8\x0a\x83\x8e\x93\xf6\x8a\x57\xda\xd7\x67\xc1\xce\x37\xf7\x2a\xdd\x7b\x95\xee\x7f\x85\x4a\x97\x3f\xac\xb8\xd5\x73\xec\x83\x28\xcf\x52\xf4\xbf\xcb\x79\x74\x4e\x0a\xf4\x7d\x44\x3f\xff\xf6\x89\x7d\x0e\xe6\xd8\xab\xee\x1d\x0e\xd1\x51\x4a\x4a\x12\x25\xe4\x57\x8c\xfe\xce\x7a\x41\x09\x35\x42\x05\x58\x62\x09\x83\x1b\x18\x28\x5d\xaa\x86\x93\xf3\x01\x68\x75\x45\x31\x11\x45\x84\x07\xa0\x3a\x8a\x43\xb4\xd9\x74\xf3\xc6\xac\x3d\xe8\xf0\x6d\xb7\xba\x5e\x33\x13\xaf\x3b\x5d\xf5\x0a\x4d\xc4\xba\x9a\x08\x84\x42\x4b\xca\xa0\xc7\xe3\x84\x97\xbd\x4e\x09\x34\x55\xcf\x44\x54\x23\xb2\x84\xef\x5d\xaf\x1b\x22\x6d\x04\xb4\x3d\xa7\xf7\xc3\x35\x8e\x9e\x0a\x57\xbc\xac\xad\x80\x37\x66\x38\x4d\x65\x59\xfd\x2a\xd5\xb2\x68\xd2\x31\xe6\x91\x66\xbb\xeb\x5d\x2d\xea\x54\x14\x9f\xd3\x33\xaa\x98\x1d\x74\xf4\x1c\x72\x44\xef\xe4\xa4\x6d\x6c\x54\xf9\x19\xf2\xbf\xfe\x61\x6f\x85\x9c\x6a\x54\xb6\x78\x1e\xc4\x47\x2a\xd3\xc5\xbb\x20\xf6\x3f\x3d\x30\x89\x17\x42\xed\x0d\x2f\x04\x0e\xe4\xe1\x51\x18\x10\xf9\x4d\x75\xa4\xb2\xae\x29\xf2\x99\xe7\x65\xb6\xd5\x80\xdf\x3c\x43\xa0\xc1\x6a\xcf\x8a\x09\xcc\x12\xad\xcb\x50\xe6\xd3\x47\xd3\x39\x73\xa0\xa7\xb2\xed\x01\x3e\xc7\xf9\x65\x4f\x78\x43\x7e\x4f\xd2\x69\x82\x5f\x33\x84\xf7\x51\x88\xbc\x19\xaa\x26\x3e\xad\xb2\x23\x7e\x70\x3e\x81\xf2\xa0\x25\x85\x77\x41\x37\x9a\x05\x91\x48\x63\x14\x69\xd8\x16\xf1\x0c\x31\x3f\xfb\xfb\xfb\x8c\x6a\x74\x20\xee\x76\x41\xc0\xd2\x33\x37\x05\x63\xd7\xba\x5d\x5f\x75\x5c\x86\xb5\x7c\x4a\x0e\x87\x2c\x34\x9f\x4c\xe2\x5e\xd9\x75\xe6\x22\xd6\x63\x2b\x7f\xf2\x8c\x11\x8d\xe0\x3d\x5a\x03\x3b\x7a\x46\x81\xaa\x5d\x7c\xf3\x8e\x5b\xfc\x85\xd5\x55\x30\xa6\xca\xab\x12\x02\x4e\xdc\x07\xe5\x11\x5f\x14\x3d\xc1\x7b\xfa\x68\x42\x70\x12\x5b\xa6\x07\xbc\x15\xa3\xa7\x16\xcf\xd1\x3b\x68\x31\x1e\xd6\x35\x8b\x0c\x45\xb2\x15\xf5\x41\x90\x85\xeb\x08\xcb\x61\x6f\x02\x76\x20\x58\x9b\xf8\xe6\x2c\xce\xd4\xc3\x3b\xb2\x22\xaf\x8f\xcb\x89\x54\x0c\x7c\x7c\x2f\x06\xde\x8b\x81\x7f\x6d\x31\x50\xbd\xcf\x63\x8b\xe6\xae\x5e\xe8\xdd\xcd\xdd\x3d\x05\x79\x2d\xd4\x8d\x95\xc6\xca\x70\x4e\xe4\x91\x5a\x84\x15\x32\xfd\xd4\x4e\x91\xdc\xe5\x9a\xc8\xa5\x9f\xc6\xc5\x3d\xf0\x3c\x95\xaf\x24\x83\x4d\x0d\x0c\x7c\xf2\xeb\x41\x09\x95\x21\xb4\x9e\xa1\x95\x60\x9e\x9e\x7d\x45\xac\x1c\x43\xe9\x0a\x1a\x83\xd7\x51\x1a\x4d\xb1\x7a\x9d\x4f\x59\x16\x43\x85\xa1\x0a\x10\x2e\x3c\x14\xb8\xb6\xdf\xcf\x0d\x0c\x39\x15\xe7\xf3\x06\xfb\xf7\x18\x53\x0e\x43\x52\xd3\xbf\xa7\x25\xfe\x8d\xa2\x82\xf9\x5c\xa8\x8a\x44\x31\xc5\xe0\xa5\xd2\xb3\x49\x99\x9e\xe6\x6d\xc7\xa2\xa2\x4d\xb3\x3d\x20\x31\x07\x11\xbc\x8d\xca\x58\x13\x86\x3b\x51\x2d\x7c\x8e\x24\x0e\x69\xc7\x27\x7c\x19\x16\x54\xb0\x91\x29\x4d\x6e\x8e\x99\x33\x4e\x75\x49\xc1\x43\x73\xf0\x6d\x57\x8e\x73\x80\x5e\x53\x56\x4e\x70\xc1\x83\x48\x03\x3e\x1c\x2f\x94\x86\x67\xcf\xd6\x78\x13\x83\xba\x7a\xb3\x4c\x12\xe5\x18\x23\xa0\x52\x24\xfe\x4c\xe0\xda\xcc\x87\xbb\x3f\x66\xfc\xa1\x3b\x0b\xbb\x83\xd6\xbe\x56\xdc\x1d\x07\x93\xad\xa2\xed\xd8\x01\x4e\x64\x28\x19\xf3\x20\x86\x1a\xc2\xc7\xbc\x7b\x7b\xc8\x23\x4c\xd4\xc7\x8e\x51\x68\xe3\xae\x5e\x19\xe1\x01\xd2\xe5\x89\xd3\x46\x13\x03\x3d\xa2\x90\x2e\x96\x0c\xa2\x93\x49\x1e\x74\x68\xb5\xd4\x62\x63\xdd\xc3\x5d\x2b\x28\xc8\xf7\xb8\xd1\x53\xda\x92\x21\xa5\xd3\xc5\x00\x41\x90\xec\xba\x10\x52\xe8\xa9\xfa\xcd\xa8\x1b\x8a\x9c\x51\x76\xa0\x7d\x36\x78\xd6\x77\xb0\xce\xf8\xbd\x8c\x5e\xab\x63\xde\x45\x3c\x73\xc0\x5b\x7f\x56\x34\xdd\x11\x57\xe0\xde\x13\x23\xc5\x0c\x96\xab\xa3\xd0\xde\xac\xc0\xd9\x0c\x1c\x7b\x9e\x7a\x01\x64\x55\xde\xd8\x24\x1c\x17\xbe\x90\x45\xe2\xfd\x94\xa0\xc3\x15\x22\x17\x45\x62\xdd\xb6\x42\x42\xbb\x18\x44\xba\x3b\x56\xbe\x8f\xd8\x5e\x92\x57\x76\xbe\xcc\xe5\x09\x00\xd6\x96\x81\x0e\x08\x79\x46\x80\x21\x79\x4c\xf1\x6b\x41\x84\x3a\x03\x34\x4b\x15\xca\x8c\x3a\xb7\xca\xba\x8a\xc3\x41\x95\x70\x91\xcb\xf0\x69\x4a\x5b\xa3\x5f\x74\x74\xd1\x0c\x31\xb4\xd1\x92\x24\x31\x20\x8c\x0f\x8a\x66\x3a\xfe\x6d\x81\xe1\x7f\x38\x7e\x7e\xbc\xbe\xbe\x0e\xe2\x7d\xb7\x40\xcb\x69\x72\x39\xe0\x51\xc4\xe8\x81\x60\x59\xd0\x3d\xb1\x94\xad\xa4\x9a\x4b\x59\xfa\x5b\xd8\xd5\xc8\x1b\x12\xca\x38\x20\x43\xbe\xb7\xde\x32\x22\x3d\x8d\x7e\x39\xa5\xd9\xa7\x9b\x67\x67\x54\xec\xd2\x3f\xaf\xae\xa4\xdd\xa6\x0d\xca\x7e\x6c\x41\x19\x3a\x96\x3d\xff\x55\x91\x55\x3b\x40\x22\x8d\x0b\x3b\xe8\x95\x88\xaa\xba\x45\x95\x97\xea\xca\xe8\x94\x85\x40\x49\xfd\xcf\xb2\x90\xe3\xe7\x9b\xcb\xef\xea\x34\xbc\x8a\x1f\x68\x64\x45\xb0\xf0\x85\x2a\x30\xce\xea\xd0\x96\x29\x51\xaa\x8b\x29\x75\x3f\x63\xc4\x62\x91\xe6\x75\x1e\xd3\x3c\xbb\x61\x06\xcf\xdb\xd1\x99\x99\x34\x8a\xb4\x0c\x68\xbc\xe1\x54\xcc\xee\x1a\xd5\x54\x0f\xc1\xbe\x86\xe2\xa4\x42\xb3\xda\x7a\x7a\x16\x61\xae\x70\xda\xec\xce\x51\x70\xc8\x65\x8e\xe1\x86\xf4\xdd\xdb\x43\xe9\x81\x89\x99\xb2\x8c\xa3\x54\x0a\x9b\x24\xe5\x4a\x17\xbf\xaf\xa7\xdc\xf5\xf5\x38\x18\x0c\xae\xf5\xf8\x6e\xb6\x2f\x3d\xa5\xc9\x14\x45\x3d\x9c\xb4\xc9\xa7\x7d\xa5\xbb\xf9\x55\x88\x50\xd0\x80\xe9\x93\x5e\x9f\xb5\x2a\x44\xf3\x92\x15\x8a\x9d\xd7\xc2\x06\xa6\xed\xf5\xdf\xb7\xf7\x7a\x9f\x7b\xbd\xcf\x5f\x5b\xef\xc3\x95\x3e\xf1\xe8\x16\x37\x7f\x3e\xbd\x8f\xd4\xd6\xe8\x8a\x1f\xc6\x9c\xa4\x46\xe7\xf9\x33\x83\x8f\xd0\x61\x98\x2e\x3f\x1c\x4d\x05\x8c\xd4\x4a\xde\xab\x09\x14\xb6\xa6\xe4\xa5\xa2\xe7\xb1\xe9\xe7\x17\x5c\xe8\x0b\xb2\xa4\x2b\x4b\x0e\xea\xd1\x9a\xb5\x9d\x85\x03\x39\x6a\x97\x9e\xaf\x83\x96\xbe\x59\xed\xf2\xd5\x01\x8b\x16\xcb\x52\x3e\x5e\x4b\xf1\x05\xc7\x66\x4f\x6d\x97\x54\xe8\x08\x51\x57\xc2\x59\x71\x34\x42\xd4\x8d\x47\x1f\x7d\xb9\x42\x4c\xdc\x91\x7d\x92\x8d\x4e\x71\xbb\x46\x25\x9c\xb7\x51\x5f\xae\x68\x74\xdb\x6d\x74\xb1\x2c\x5f\xe2\xcf\xcd\xc3\x7c\x89\x3f\x57\x8d\xd1\xcc\xaa\x1f\x60\x73\x5b\x0c\xa8\x6a\x68\xfe\xb6\xac\x71\xf1\xcd\xe8\x54\xc1\x89\x89\x08\x14\x92\x03\x3e\xf4\x80\x77\x0b\x80\xcf\x2a\x76\xae\xe7\xcf\xd4\xae\xc5\x68\xa7\x13\xee\xc0\x16\xf5\xe4\x7e\x8b\xba\xdf\xa2\xfe\xda\x5b\x94\xba\x9a\xc0\xe5\xec\x46\xf7\x12\x1c\xf8\x6e\x5f\x25\x56\x44\xff\xf7\x85\xff\xf7\x5d\x82\xf8\xef\x41\x1a\xb6\x4d\x0a\x22\xcc\x91\x2d\xa0\x05\x4f\x16\x60\xe3\xaa\xf6\xc6\x59\x3a\x21\x53\x01\xa6\x85\xc2\xd1\xa1\x45\x64\x15\x01\x76\xc1\x9f\xad\x19\x17\x34\x3c\x51\xc0\xfc\xc8\x42\x81\x5b\xc8\x80\x44\x01\x72\x54\xbc\xbf\x4c\xc7\x6c\x8b\xd1\xa1\x0a\x96\x2a\xc0\x28\x2b\xce\xb1\x0d\xc4\x53\x65\x5d\xcc\x41\x91\x0e\x41\x46\x51\x2a\xb2\x99\xd7\x43\xa7\x3f\x22\x59\x0a\x21\xe0\x33\xad\xcd\x9d\x81\xd4\x79\xf3\x37\x82\xa0\x04\xdc\x3c\xeb\xa3\x07\x0f\x10\xff\x3d\x00\x9d\xe0\xf1\xa4\xd7\xdd\xfc\xdc\x65\xae\x4b\x36\xfb\xe8\x29\xea\xe0\x72\x46\x77\x0f\x08\x4c\xfa\xec\xf2\x65\x54\xcc\x3a\x28\xb4\x93\x99\x46\xb7\xa3\xa4\x04\x2d\xfe\xd3\x8f\x79\x36\x7f\xf6\x1b\xf4\xb4\xcb\xbb\xa4\x85\x15\x7a\x76\x09\x0d\xd3\x4e\x1f\xa4\xf1\x11\x2d\x27\xa3\x79\x79\x21\xd9\x38\x24\xac\x1a\xcf\x32\x1d\x27\xf8\x37\x1a\xc0\x09\x6d\xab\xa1\xeb\x3a\x4c\x65\xa7\xc5\xfc\x68\xe3\x3c\xcc\x96\x69\xab\x6b\xa6\x3b\x18\x87\xb7\x6d\x46\x42\xfa\x50\x2a\xc0\xd8\xa8\x9c\x29\xf8\x0d\xfb\x7f\x22\x1b\xd4\x26\xc3\x99\x04\x1d\xc0\xe8\xb3\xec\xde\x8b\x72\x76\xd7\x07\x84\xd6\x87\x83\x3b\x3a\x1b\x40\x00\xe0\xea\xb3\x01\x53\x7d\x30\x2e\x4e\xb0\xb7\x47\x0b\xbd\x33\x8b\x86\x7e\x2c\x6e\xd0\x05\xed\x8e\x9b\x71\x57\xe6\xff\x02\xe9\x1e\xba\x8f\x9e\x1d\xbc\xb1\x82\x91\x71\x9e\xca\xb4\x32\xec\x01\x2d\xd7\xcd\x5c\xaf\xad\xb1\xde\x0d\x98\x65\x94\x7c\x4b\xf3\xa2\x9c\x29\x6d\x50\x80\xba\x7a\xe8\xe6\x6e\xc0\x87\x39\xc5\x65\x58\xa1\xf3\x14\xbe\x4a\x07\x7a\x41\x3e\x92\x80\xeb\xe9\x8c\xc2\xe7\x51\x62\x44\x19\x1b\x58\x81\xb3\xcf\xa3\xc4\x71\x46\x22\xd3\xae\xd7\x00\x3d\x2b\x0d\x85\xfb\xf9\xbb\xc9\x60\x78\xd1\x9b\x0c\x87\x17\x6d\x39\xa0\x36\x67\x51\xca\x5d\xa2\x04\x2c\x37\x1b\x4f\x4e\x1c\xd0\x3d\x3d\x09\x36\xe5\xe4\xcb\x23\x94\x66\xcd\x69\x5c\xe1\x85\xe8\x54\x09\x54\xec\x7a\x8f\xbb\xd1\xfc\x51\xdd\xe6\xd9\x10\x7a\xe4\x73\xc6\x4f\x24\xb0\x16\x3a\xd2\xba\xc7\x0a\xf5\x6a\x58\x9e\xf4\x59\x23\x81\x2a\x8e\xcd\x59\x1e\x4d\xf1\x41\xd9\xe6\xe4\xcc\x41\x2b\x71\xe4\x83\x90\x87\xda\x1a\x2c\xb1\x75\xc7\x38\x76\x99\xc1\xc9\x72\x15\xb4\x78\x07\xc6\x9d\x3b\x36\x8c\x89\x42\x55\x0e\xc7\xca\xfc\xed\xe7\xdb\x3b\x30\xb1\xea\x9b\xe8\x99\xb1\x23\x6b\x68\x52\x64\xbc\xdd\xb0\x7c\xbd\x0d\x9c\x25\xae\xec\x5f\xe9\xe2\x45\xd7\xab\xd1\x2f\x6d\xa2\x9e\x76\x61\xff\x6d\xc6\x04\x80\x39\x98\x90\x12\xdd\xd7\xc0\x84\x46\xca\xb7\x18\x74\xb0\x56\x41\xd9\xf3\x05\x49\xd8\xe1\xad\x91\xbc\x39\x68\x0d\x8d\xbb\x10\x02\x0f\x9b\xd5\xf4\x67\xcb\x6b\x2d\xe9\xd1\x2e\xe6\x74\xab\x4e\x64\x75\x3b\xb8\x75\xcb\x89\xaa\x9b\x1b\x31\x85\xcf\xf1\x98\xcc\xa3\xa4\x1a\x15\x4a\x0a\x6c\x89\x04\x55\xa0\x82\x28\xff\xb8\x03\x36\x85\xa7\x86\xc1\x56\xc7\x4a\xae\x38\x82\x81\x7c\x5d\x3b\xe8\xe6\x15\xa4\x55\x58\xcf\x3c\x3e\x78\x4e\xa8\x2b\x8d\x49\x96\x72\x06\x57\x75\xf8\xfd\x23\x71\x9a\x9b\xe0\xe9\x1d\x1e\x63\xb2\x68\x41\xe6\x6e\x99\x36\x04\xe0\x82\xde\x96\x02\x78\x8d\xad\x07\xd8\x72\x15\x37\x72\x31\xcf\xe0\x6c\xc0\x36\x14\xc0\xc4\xa2\x3b\x12\x10\x1b\x97\x37\x3d\x20\xbd\x8b\x2e\xda\x2f\x71\xb7\x80\x1f\x11\xb5\x70\x6d\x38\x1b\xc5\x83\x47\x16\x72\x43\x4b\x37\xf5\xb6\x55\x57\x6f\xde\x4f\x7b\xa6\x7c\x6b\xcc\x37\x0e\x32\x4d\x57\x18\x87\x09\x5d\x31\x8e\x4a\xa0\xaf\x3c\x8e\x16\x9d\xaf\xee\xf1\x9d\xcb\xda\x15\x84\xc3\x8d\xbb\xea\x3a\x0a\x81\xff\xbd\x1d\xb5\x72\x6e\xd2\x51\xba\x17\xdc\xd9\x89\xc0\x8c\x90\x5e\x37\x26\x0d\xd2\x3f\x34\x3f\xc0\x4d\x28\xc6\x18\xe1\xad\xb8\xd2\x98\xc9\xa7\x22\xae\x79\xd3\xb4\x31\xe8\x81\x08\x76\x5e\x31\x85\x66\x9d\xbe\xb1\x56\x76\xe4\xd5\xab\x57\x2d\xfb\x90\x54\x52\x90\xac\x69\xa5\x96\xdf\xe3\x7c\x81\x1b\xb7\x27\x89\x01\x06\x5d\x8f\x00\x07\xa6\xa6\x17\xc5\x72\x34\x27\xe5\xcf\x59\xde\x24\x25\x29\xc0\x8a\x95\xee\xcb\xaf\xbf\xfa\x6e\xd1\x2a\x87\xaa\xdc\x8a\x2b\xda\xb3\x8e\x38\xce\xf5\xb7\x52\xfc\x04\x7a\x9a\x54\x74\x18\xa9\x87\x59\x6c\x82\xc1\x12\x36\x52\x40\xf6\xb7\x0a\xf1\x03\x98\x5b\xd2\x16\x1f\x5c\x08\x75\x94\x30\xf2\xb4\x82\x55\xe9\x52\x30\xad\x02\xe0\xb2\x53\x55\xb6\xd5\xa8\x69\xd0\xab\x31\x12\x95\xe8\x8a\x01\x5a\x9e\xb9\x5f\x99\x85\x2a\x4b\x68\xcd\x9b\x2b\xda\xc9\x78\xf5\xea\x95\x0b\xcc\xa8\x5f\xab\x52\x12\xa6\x31\x68\x9a\x00\xdf\xdc\xc2\x81\xc5\x64\x93\xca\xee\x3a\x1f\xcd\x8a\x8e\x28\xe9\x4a\xad\xab\x69\x3a\x2a\x17\x2e\x49\x47\x51\xa1\x2b\x2a\x78\x07\x80\x51\xf2\x75\xcb\x61\x24\xc8\x75\x3f\x58\xa1\x8d\x39\x49\x4d\xeb\x16\xa7\x05\x0e\x71\xc3\xfa\x67\x51\x31\xcb\xa3\xb2\x76\x0c\x15\x30\xad\x76\x86\xd5\x7b\x24\x6e\x67\x6b\x3a\xe4\x07\x69\x3e\x67\xf0\xeb\x60\xf3\x70\xb1\x7a\x0f\xa7\x51\xf1\x36\x27\xe3\x5a\x9c\x55\xc0\xdc\x58\x09\xbc\x7a\x2f\x79\xd8\xa1\xa2\xae\x97\x12\xe6\x86\x6d\x8c\xb4\x2b\xb4\x9a\x66\xaa\xc1\xbe\x12\x0d\x89\x98\x0c\xff\x60\xb6\x36\x75\x7d\xb3\x41\xb5\x16\x75\x16\x62\x5c\xbb\x0c\xc6\xca\x8e\x41\xbb\xd2\x1c\x11\xe3\xc5\x42\x34\x2e\xb3\x5c\x88\x3f\xc2\xf2\x01\xcc\x88\x03\x44\x61\x0d\x5b\x62\x0e\xed\x6b\x6c\x22\x2c\x1d\x9c\xa7\xa8\x81\xf6\xdc\x8e\x41\x1d\xe6\x18\x2c\x95\xe0\xf1\xd8\xa1\x65\x4e\xaf\xc5\x29\x62\xd6\x13\xaa\x1e\x8a\x0a\x11\x6e\xde\xba\xb1\x0b\x84\x39\xc6\x00\x97\xb3\x5e\x3f\x70\x49\xf6\x55\x36\xd5\x64\xe3\x76\x5d\xf2\x0d\x54\x19\x62\xd4\xbb\xd0\x17\xd8\xef\xf1\x02\x83\x69\x92\x8d\xa2\x64\x40\x91\x3a\x88\xdc\x64\x1e\xf3\xcc\xd7\x24\x19\x47\x8b\x37\x37\x6d\x96\x16\x76\x1a\x65\x89\x75\x4d\x6a\x56\x29\xaa\x41\xfb\xe9\x83\x1e\x53\x4a\x14\xe8\xf9\xa7\xa7\xc9\x1b\xd5\x8b\x72\xa6\xec\xf9\x2c\xc3\x9c\x4e\xb8\xf5\x24\xe8\x38\x06\x42\xdc\x40\x5d\x59\xe6\x74\xc2\xed\x6f\x20\x81\xcd\x69\x27\xdc\xfe\x8e\x7d\x4a\x5a\xe8\x84\x3b\xac\x08\x19\x45\x69\x27\xdc\xd9\x09\x4c\xf3\x41\xf8\xe4\x48\xea\x84\xbb\xbb\xf0\x2d\xcc\x88\x3a\xe1\x2e\xab\x9e\x73\xf6\x4e\xb8\xcb\xba\x25\x2e\x7b\x3b\xe1\x2e\x6d\x50\x18\x01\x75\xc2\xdd\x9d\xeb\xb3\x60\xe7\xbb\x7b\x7b\xc4\x7b\x7b\xc4\xbf\xb6\x3d\x62\x95\x31\xe2\xad\x6d\xe6\xdb\x9b\x09\xb6\xb0\x01\x04\xb8\x37\xb8\xfc\x9a\x26\xf6\x90\xda\x6c\xb2\xa2\x8c\xeb\x6f\x62\xb3\xd2\xc2\xa4\x7e\x38\x1c\x2a\x9f\x34\x3e\x3f\x37\x3c\x60\x23\x65\xf1\x50\x1d\xfe\xff\xd8\x7b\xf7\xb5\xb6\x91\x65\x71\xf4\xef\xe4\x29\x7a\xe6\x77\xd6\xc4\x0e\x02\x7c\x87\x90\x30\x7b\x13\x03\x81\x95\x10\xf8\x01\x99\x99\xb5\xf9\x98\x7c\xb2\xd5\xc6\x4a\x6c\xc9\x5b\x92\xc1\x64\xc2\x7a\x9f\xf3\x1c\xe7\xc5\xce\xd7\xd5\x17\xf5\x55\x96\xb9\x64\x32\xb3\x60\xed\x9d\xb1\xa4\xee\xea\xea\xee\xea\xea\xea\xea\xba\x64\x43\xe4\x4f\x42\x09\xf7\x07\x3a\x90\x98\xc9\xe8\x35\x81\x47\xcd\x58\x7f\x5b\xe1\x0a\xe3\x44\xd7\x8d\x1b\xad\xb8\x0a\x2d\x20\xf0\xc9\xe2\x97\xb1\xa9\xbd\xc7\x99\x65\x53\x53\x37\x2f\x79\x77\xb9\x39\xf7\x5a\xb5\xc7\xdd\xe2\x71\xb7\xf8\x7b\xef\x16\xdf\xa9\xf5\xfa\xfd\x19\x9a\x97\xb4\x83\xcf\x4d\x39\x8f\x70\x92\xc6\x91\x3f\x7a\xb4\xe7\x7c\x68\x7b\xce\x9b\x72\x16\x7e\x11\xbe\xca\xcd\x06\x8b\xf4\xc3\x79\x41\x53\x45\x3c\x61\xb3\xfa\xd1\x5a\xe8\x0e\x37\x94\xe1\x98\x6c\x04\xc7\xfe\xd5\x5b\x3c\xef\xe6\x42\x2e\xfa\xcc\x7b\xfa\xe4\x89\x8e\x9b\x51\xa0\xc0\x33\xad\xfc\x4d\x9c\xd9\x8e\xf8\x20\x19\xee\x3d\x79\x52\xf2\x6e\xba\xf4\x15\x1c\xee\x1f\xe3\x7e\x7c\x49\x83\x43\x15\xdd\x59\xf1\x72\x56\x5c\xd5\xaf\x05\x03\x32\x8d\x46\x71\xff\x73\x39\x4a\x51\xca\x16\x10\x8b\xab\x5c\x19\x83\xc7\x72\xe3\xe6\x1c\xbd\x7b\xbe\xf9\xce\xe7\x7e\xee\xf5\xf7\x22\xd7\x9c\xb6\x6b\x63\x67\x97\xca\xcf\x4f\xb9\xd9\x29\x9e\x9b\x45\xee\x32\xf5\xb9\xd1\x90\xb7\x49\xd6\xac\x61\xa9\x11\x69\xf1\xe6\x6f\x15\x0a\x92\x6e\x4f\x38\x55\xbb\x6e\x3b\x9c\x97\x22\x12\x38\x59\xde\x7d\xb8\xf3\xc1\xd6\x1c\xb5\x70\x3e\x1d\x72\x61\x87\x58\x6e\xca\xe5\x7c\xbb\xcd\x85\x73\x8b\x8a\x48\xd3\x0a\xe9\x72\x7a\xfd\x51\x4e\x7f\x94\xd3\xff\xde\x72\x3a\x13\xd2\xd3\xa1\x43\xab\x33\x47\xfc\xc6\x09\x9e\x8e\x09\xe8\x9f\xe7\x28\x81\xfa\x71\x82\x57\xc2\x58\x95\xd3\xd7\x4a\x07\x4e\x28\xe9\x68\x39\xcf\x5f\x13\x0a\x9d\x0c\x87\x0f\xae\x1d\xfa\x7e\xe4\x71\xc2\x1d\x4f\x86\xca\xed\x06\xbe\x62\x41\xa7\x77\xbf\xc5\x85\x4e\x3a\x9c\x7f\xa1\x93\x0e\xe1\x42\x87\x0a\x2e\x8b\xdc\xdb\x14\xc9\xf9\xee\xcd\xc9\x10\x0f\xa4\xad\xe9\xd2\x7a\x53\xc7\x44\x84\x74\x38\xfc\x68\x2f\xa0\x1a\x85\x20\x8b\x2e\xab\xa8\xd1\x30\x1a\xc4\xee\x16\x2d\x5f\xef\xd6\x5c\x8a\xb3\x03\x7f\xc6\x88\xe0\x24\xfc\xa2\x5f\x0e\x4b\x6d\xcf\x2b\xaa\x5a\xfd\xdc\x06\x91\x30\x3a\x8a\x7f\x2d\x46\xc0\x56\xe4\x6e\x0d\x8f\xfd\xe4\xf3\x69\x32\x4d\x33\x1c\x1c\x61\xe3\x32\x58\x6a\xbe\xb8\xe0\xdd\x90\x88\x30\x91\xe9\x8e\xfc\xb0\xa0\x7d\x67\x99\xbb\x51\x80\x1f\x04\x47\x49\x78\xe9\x67\x98\x1e\x09\x1d\xad\x17\x15\xbb\x5b\xdf\x69\xd2\xaf\xb9\xdd\x2f\x2a\x76\x37\x04\x86\x7e\x3a\xb7\x75\x67\x99\xbb\x35\x7d\x81\x33\xba\xa1\x17\x8e\x7d\x41\xa9\xbb\x37\x5f\x62\xee\x8b\x8a\xdd\x99\xee\x4f\xae\xc7\x85\x8d\xbb\x8a\xdc\x99\xea\xe7\x35\xec\x2a\x72\xd7\x21\x27\x72\x5c\x86\x29\xe8\xdd\x24\x1e\x1f\xf9\x69\x7a\x15\x27\x41\xd1\xf8\x97\xac\x73\xe7\x75\x30\x6f\x4c\x5c\x45\xee\x4c\x86\xf3\x1a\x76\x15\xb9\x0f\xd6\x33\xaf\xed\x82\x52\xf6\xe6\xc5\xc3\xea\x2a\x4a\xa7\x3d\xb8\x79\xa3\x29\x8d\xa7\x51\xfe\x3c\x0e\xd3\x34\x8c\x2e\x9e\x96\xc6\x76\x12\xa7\xfa\xd5\x95\x84\xa5\xe5\xab\x45\x4f\x81\x8a\xf5\x8e\x68\xfe\x2d\xd7\xc9\x70\x28\x25\x10\xd3\x6c\x2f\x94\x53\xb4\x66\x19\xd1\x6a\x3c\x9e\xa1\x1f\xcf\xd0\x7f\xef\x33\x74\x7e\xd7\xd5\xfb\xf2\x45\xbb\xeb\xda\x1a\xe1\x19\x7a\x8d\x13\x7c\x91\x7e\xf1\xd3\x2f\x21\x7a\xe5\x8f\xf0\xec\xbf\x93\x6c\x90\xae\x0c\xa7\xea\x71\xb8\xc3\xa2\x99\x1e\xe3\x01\x4e\x70\xd4\xc7\x1b\x88\xb4\x9f\x6e\xac\xae\x5e\x84\xd9\x70\xda\x5b\xe9\xc7\xe3\x55\x7e\xea\x5e\xbd\x88\x97\xc5\xef\xde\x28\xee\xad\xa6\x57\x7e\x32\x5e\x0d\xa3\x0c\x27\x91\x3f\x5a\x25\x5d\xc2\xb3\x8c\xff\x77\xe5\x22\xfe\x3f\xef\x9a\xcd\x07\xbe\x1a\xcb\xef\xbb\x4e\x08\x36\x7f\xf3\xc3\x35\xfc\xf8\x4b\x5c\x76\x51\xcb\x57\x9c\x5d\xc5\xc9\xe7\x63\x0c\xa1\x6a\x8b\x14\xe5\x7a\x71\x53\x5b\xde\xfb\xf2\xe5\x63\x41\xa9\xbb\xf8\xe6\x5d\x47\xfd\x9d\xc8\xef\x8d\xf0\x3c\x2c\xa5\x92\x76\x04\xed\x05\xee\x82\xdb\x95\x3f\x29\x89\x5b\x5e\xd2\x81\x9b\xb5\xc0\x1d\x70\x0b\xe2\xab\x88\x45\x21\x2e\x42\x8c\x17\xb3\x63\x65\xf9\x5a\xde\xdd\xd4\x81\xd8\x74\x52\x02\x2d\x5a\xc8\x8e\x94\xf1\xed\xce\x28\x25\x38\x4b\x42\x7c\x39\x2f\x02\x04\x2f\x66\x47\xcb\xf2\xf5\x2e\xa4\x95\x91\xdd\x6e\x0e\x51\x91\x32\x0e\x72\xd2\x3e\xdd\x79\x88\x2e\x70\x09\x77\x66\x3b\x2e\xea\x87\x3b\x8c\x09\xcd\xde\x30\x27\x46\xaa\x1d\x07\xf5\xc3\x9d\x47\x83\x25\x6c\x29\x46\x86\x16\xb2\xe3\x63\x7c\xe3\x28\xb5\x4a\xa1\x54\x70\xab\x6b\xa8\x38\x75\xb6\x2c\xdd\xfe\xe5\xfc\x50\x7a\x99\x33\xa2\xfc\x25\xe7\x03\xd2\x8d\xe3\x44\x7d\xe6\xd4\x2f\x01\x22\x24\x98\x3f\x5e\x60\xe9\x62\x72\x32\x95\x1e\x24\x59\xfc\x41\xaf\x19\x87\xe1\xa5\xd3\x37\x86\xcc\x09\x7c\x77\x9e\x21\x8b\x61\x5b\x94\xb2\x0a\x6c\xf8\xee\x38\x5e\x59\xce\x57\x44\x58\xb2\x05\xbb\xb5\xde\x4b\x36\x1f\xcf\x54\x8f\x67\xaa\xbf\xf7\x99\x8a\x1d\xa8\xf8\x05\xd1\xb7\x8d\xd2\x7e\x1b\xc3\x6a\xee\x1d\xe5\x4f\x42\x2e\x8c\xd3\x14\x7f\xd9\xb0\xc8\x02\x8d\x5e\x97\x15\x46\xa5\xe4\xa5\xb3\xeb\x09\x91\x0f\x58\x04\xca\x97\x4f\x25\x06\x1e\x66\xfd\x61\x85\x7c\xd7\x73\x8b\xf4\xfd\x14\xa3\x67\x84\xe2\xd3\xec\xd9\x86\xf2\x09\x26\x2b\xb9\x48\x57\xd2\x61\x38\xc8\x2a\x5a\x42\x11\x64\x24\x07\xac\x99\x05\x18\x4b\x06\xf7\xb5\x08\x5f\xd1\x08\x54\xf4\x42\xf6\xa5\x05\x8d\x09\x8e\x82\x30\xba\x78\x70\x3c\x8e\x68\x3b\xb2\x0d\x91\x0d\x29\x16\x3a\xd0\xc4\x46\x03\x67\x54\xa6\x09\x56\x6e\x24\xe9\x40\x94\x9a\x6f\x49\xc8\xa0\xe9\x32\x82\x42\x0a\x16\xd9\xc9\x22\x55\x47\x61\x94\x66\xfe\x68\x54\xaa\x65\xad\xb4\xdd\xd7\xdd\x5d\xa8\x00\x8f\x0b\x9c\xbd\x8b\x2f\x4a\x04\x14\x23\xa5\x9c\x3e\xf6\xb4\x45\xad\x48\x41\xab\x93\x78\x6e\x1c\x0e\x52\x64\x4e\x7b\xdd\xa1\x1f\x5d\xe0\x12\x4d\xda\x84\x0f\x0a\x42\x36\xc9\x52\x46\x4f\x11\x84\x48\xc7\xa4\x46\xe2\xd1\x48\x96\x07\x16\xe6\x37\xe9\x70\xb8\x02\xac\xd1\x60\x37\xe9\xd0\x64\x37\x6e\xf1\x69\xce\x2d\x8d\x41\x06\xc8\xb8\xa5\x51\x2c\x09\xee\x55\x4d\xef\x26\x46\x64\xd3\xd4\x3f\x1c\x22\x26\xe9\x22\xe3\x9a\x82\x36\xcb\x70\xd0\x8b\xde\xad\x79\x8d\x8c\xef\xa1\x6d\x99\xf4\x0c\x49\x94\xe2\x80\xb3\xe1\x06\xf9\x87\x02\x4b\x87\xc3\x0d\xf2\x0f\x15\x5e\x6d\x09\x19\x5a\xad\x47\x91\xf4\x51\x24\xfd\x9b\x8b\xa4\xb9\x9e\x9f\xfb\x58\xdf\x53\xb6\x68\xea\x1f\x7e\x8c\x2f\xc8\x3c\xfb\xc9\x56\x2f\x74\xe4\x25\x48\x57\xdf\xa8\x45\x21\xd1\x3f\x57\xcf\x87\x7d\x7f\x22\x03\x71\xc1\xd8\xef\x6e\x1d\x99\x10\x24\x4c\x98\x23\x3a\xb3\x5e\x46\x9b\xe8\x59\x6d\xd6\xef\x04\x2f\x82\x46\x3f\x68\xb5\x5e\xf8\x6b\xed\x56\xbf\xf5\xa2\xd5\xe8\xb4\x70\x7d\xbd\xf6\xa2\xdf\xae\xe1\x66\x2b\xe8\xb4\xda\x9d\x46\xef\x59\x8e\x8b\x0d\x8c\x5f\xf7\xeb\xf5\x7a\xaf\x5f\x5b\x6b\xf5\x5f\xf4\x07\xfe\xda\x7a\x7d\x50\xeb\x37\xd7\x71\xa7\xd9\x0b\xda\xf5\xfe\x8b\x7a\x6f\xdd\x1f\xd4\x6a\xcf\xdc\xbc\x89\xe2\xb8\x21\x49\xba\x7e\x2f\xdc\xb0\x0c\x62\xce\x09\x99\x1b\xfc\x86\xb5\x7f\x74\xa7\xa7\x85\x09\xda\x06\x64\x7d\x5c\x2d\x70\xcd\xee\x52\xa8\x0a\xc7\x2c\x9e\xc5\x1f\x37\xea\xde\x8f\x73\xe6\xe9\xc7\x8d\x06\x61\xb6\xed\x47\x66\xfb\xc8\x6c\xff\xde\xcc\x36\xe7\xb5\x5c\xf9\xa5\x31\xdb\x22\xc3\xe4\x41\x12\x7f\xc1\x63\x3f\x5a\x09\xf0\xcf\xdf\x2a\x9d\xbf\x7e\x41\x7a\x97\x74\xfd\x54\x91\x28\x7d\xa7\x2f\x94\x8c\x04\x5a\x89\x54\x2f\x71\x9b\xdc\xfb\x8b\x67\xf8\x2f\xc8\xd6\xcf\xc7\xe2\xe1\xf3\xf5\x97\xcd\xf1\x7d\xe7\x14\xdf\x96\x2e\x15\x24\xf9\xb6\x85\x6e\xd1\x46\xf8\xbf\x6c\x6f\x69\x5d\x48\xb7\xfd\x9d\xa4\xd7\x76\xf6\xfb\x9e\x12\x6c\xff\xb0\x49\x09\x47\x7b\x45\x36\x94\x41\x18\xe1\xe0\x2e\x19\xb8\x79\xe6\xd8\x2c\x46\x2c\x6d\x75\x9e\xce\x1a\xd2\x71\x8b\xc3\xb6\x48\xc8\xba\x82\x0e\xc8\xc6\x16\xe2\x94\x51\x12\x0c\x93\x36\x96\x5a\x0e\xec\xb9\xd9\xf4\xf9\xb8\xee\xb2\x91\xfa\xfa\x7e\x3a\x1a\xdd\x48\xc6\xee\xe1\x00\xe1\x59\x98\x42\x71\xeb\x90\x6b\x2d\x16\xe6\x94\xe7\x19\x6c\x78\x6b\x34\x87\x8d\x9c\x77\x7f\x19\xd5\xcf\xab\x8e\x34\xf3\x2b\x93\x78\x52\xa9\x42\xde\x6a\x76\xef\x45\xf8\x3f\xac\x27\x18\xad\x1f\x64\xe1\x46\x1d\x6e\x6a\xdf\x90\x63\x96\xc5\x76\x52\x54\xed\x20\x5c\xc4\xc8\x5e\xf1\x5e\x38\xa9\xb1\x7c\xfa\x6e\xa8\x23\x44\x49\xc4\x13\x94\xe4\xe9\xbc\xdf\xe0\xac\x22\x9d\xce\x71\x34\x1d\xe3\xc4\xef\x8d\xf0\x06\xca\x92\x29\x36\x55\x7f\xfe\x18\xa7\x85\xa9\xba\xa5\x7c\xde\x50\x18\x94\xb7\x48\xca\xe1\x9d\xce\x49\xe2\x9d\x6a\x59\xbc\x53\x47\x1a\x6f\xbd\xc8\x4b\x45\x23\x26\x9a\xaf\xf3\xec\xfd\xb4\x13\xf6\xec\x2e\x71\xef\x93\x07\xe5\x3d\x3a\x64\xac\x2f\x04\xbe\x9f\x5e\x47\xfd\x37\xb0\xdf\x10\x91\x17\xba\x50\x3d\x57\x72\xa2\x6f\xb1\x22\x15\xc9\x4d\x43\xab\xa6\x4c\x12\x80\x50\x59\x06\xdc\x2e\xa3\x25\xc0\x61\xa5\x3f\xf4\x93\xad\xac\x52\xab\xae\x64\xf1\x87\xc9\x04\x27\x5d\x3f\xc5\x95\x2a\xff\x0c\x59\x95\x2b\xf5\xaa\x73\xe3\xe1\x33\xeb\xce\x3c\x9a\x6f\xdc\x79\x1a\x55\x1e\x11\x8d\xd7\xb8\x20\x1d\x32\x57\x8c\x10\x50\x94\x04\xdb\xe2\xad\x2d\xc5\xb6\xaa\xe8\xe1\x99\xed\x45\x15\xba\xdd\x4b\x1a\x9b\x3c\x15\x77\x51\x07\xf9\xa8\x2f\xd6\xcb\xfc\xae\xdf\x1d\x04\x0c\xe5\x66\x4e\xd6\x0e\xd1\xb4\xe7\x0b\xf6\xaa\x64\x7a\x74\x35\x25\xba\x7d\xb0\xcd\xa4\xe8\x37\x6a\xf6\xf2\x0b\x9c\x2d\x98\xbc\xfc\x02\xbb\xb6\x93\xef\x3b\x77\xb9\x85\x38\xca\x67\x2f\xd7\xcd\xe6\x36\x64\x79\xd4\x54\x92\x9f\x9d\xab\xea\x75\x32\x4d\xac\x8a\xb6\x59\x95\x4c\x84\x2e\x4f\xd9\x43\xa5\x43\xe7\x03\x24\x1d\xcc\xb5\x98\x3d\xe4\x88\xdd\x79\x3c\x62\x3f\x1e\xb1\xff\xde\x47\x6c\x49\x9f\xc9\x38\xc4\x98\xb1\x74\xf5\xa4\xfd\x4f\x3c\x18\x24\xf8\x1a\xfd\x1a\x8e\xfa\x9f\x31\x7a\xf5\x09\x0f\x06\xae\x68\x3d\x0b\x85\xf6\x39\xf0\x13\x72\x84\x3f\xf4\xa3\x3e\xf6\xa1\xac\x2d\xa8\xcf\x2d\xe2\x00\xb1\x2a\x6f\xfc\x4b\xf4\x6b\x1c\x07\xe8\xd5\x85\xf3\x90\xdf\xca\x0f\xf9\xff\x64\xdc\x54\x71\x1e\x66\x2c\xb6\x28\xa5\xad\x25\x50\x9d\x9e\x85\xd6\x96\x82\x16\x27\x49\xac\x05\x0f\x5a\xa5\xef\xa8\x0d\x02\xdd\x76\xf6\xb3\x67\x29\xd9\x18\x27\x71\x94\x86\xbd\x11\x25\xb0\x89\x0f\x4e\x24\x68\xcc\xee\x7c\xc8\x5e\x34\x49\xe2\xcb\x30\xc0\x49\x2a\x6a\xf9\xa3\x34\x36\xab\xc6\xa3\x11\xa9\x4a\xa8\x8d\x5b\x8f\xa3\x28\x0e\xe8\xd7\x30\xea\xc7\x63\x19\x32\x01\xc6\x72\x0a\xd0\x2b\xd7\x2c\x1c\x63\xb2\xd8\xc2\x14\xd5\x51\x8a\xfb\x71\x14\xc0\xee\x18\x46\x17\x23\x9c\xc5\x11\x0c\x27\xe9\x5e\xc1\x41\x9f\xa3\xaa\x1c\xf7\xf9\x4b\xb4\x29\xba\x22\xe9\x19\x48\xdb\xa0\x01\xbe\x91\x5e\x72\x5c\x64\xad\x83\xf3\xf0\x47\x24\x94\x61\x12\x47\xf1\x34\x1d\x5d\x43\x18\x0c\xc7\x3e\x4c\x3e\x59\xce\x23\x28\xf0\x33\xdf\x79\x42\x56\x7b\xab\xa8\x3c\xa2\x40\xe9\x3c\x01\x23\x9f\xd4\x7e\x50\x7a\xaf\x24\x37\x8c\xa3\x34\x26\x5b\x17\x21\x8a\x0a\x25\x8d\x95\xfd\xe8\xd2\x1f\x85\xc1\x11\x2b\x5f\x91\x65\x1e\xee\x85\x0d\x83\x21\x49\xf8\xea\x1e\xcf\xc8\x7c\x25\x8b\x8f\xe8\x3b\x40\x69\x85\xf6\xde\x83\x6e\x32\x63\x0b\xe9\xfc\xc2\x4e\xe5\x9b\xea\x5c\x51\x61\x96\x81\xe6\x57\xe5\xd0\x29\xde\x48\x98\xfe\x42\xd0\x3d\xa6\x54\x88\x85\xa0\x26\x75\x33\x1b\x26\xf1\x15\x52\xbb\xa7\x97\x57\xba\xc3\xba\x49\x3f\xad\x94\x3a\xf9\xfb\x0b\xcd\x3e\x48\xb3\x85\x24\xa0\x9f\x4b\x85\xf4\x33\x9f\x18\x00\xb8\x41\x11\x52\xf0\xdc\x52\xb4\xc1\x53\x67\x4a\xb2\x71\x11\x75\xdc\x0f\x21\x98\x73\x4f\xe5\x7e\x06\xb2\x84\x3c\x4f\x3a\x85\x93\x44\x17\xf1\x2d\xbd\xa9\xea\xe6\x36\xe4\x4f\x81\xb3\x08\x8d\xcd\x1f\x32\xa3\xb6\xdc\xbe\x21\xe4\xb2\x6c\xaf\x0a\x09\xea\xc1\x39\xdd\xc7\x06\x1b\x35\x16\x9d\x0c\x48\x81\xd7\xe4\xbb\x45\xc9\x44\xeb\xdd\x07\x61\x42\x0b\xdf\x19\x61\x02\x4e\x32\x75\x72\x26\x73\x3b\x52\x4c\xef\x81\x16\x55\x1a\xe4\x7a\x36\x98\x8d\x0a\x6f\xe5\x4e\xa4\x97\xce\xa3\x3d\xa5\x43\x82\xe8\xd0\x9c\xed\x0f\x67\x62\x5f\x25\xd2\x26\x3f\x13\x32\x91\xcf\xa0\xb8\x8c\x4f\x95\x5d\x35\x57\x48\x4b\xa2\xae\xba\xeb\x3b\xb7\xfb\x79\x3b\x77\x46\x8e\x54\x4c\x70\xd1\x11\x25\xdf\x8e\xc4\xa7\xb9\x1c\x9b\xc6\xfe\xbf\x01\x68\xfb\xc1\xdc\x25\x63\xf9\x2a\xcc\x92\x38\x26\x59\x1c\xc4\xa8\x3f\xc2\x7e\x34\x9d\xa0\x08\xe0\x93\x01\x16\xc7\xf6\xa2\xa1\x92\xb0\xb7\xac\x3c\x8a\xa4\x1c\x10\x45\x34\xae\x8e\x25\x11\x8e\xce\x68\xe9\x73\x22\x24\x91\xea\x1b\x88\x02\x09\x83\x0d\x03\xd0\x86\x0d\xe4\x46\xfe\xf3\x86\xe7\xc4\x5e\x5d\xd5\x47\x5f\x61\x00\x4c\x00\x53\x77\x73\x86\x50\x45\xac\xf0\x39\x93\x1b\x4f\x84\x50\x4a\x44\x50\x66\x46\x0b\xa7\x9b\x8b\x90\x1c\xe9\x42\x5d\x77\x4c\xea\x58\xe6\xdc\x98\xdb\xc2\x91\x17\x20\x54\x22\x85\xba\xbc\x43\xd4\xb2\xcc\x32\xc8\x2f\xa5\xe1\xc9\xf1\x67\xa3\x53\x61\x1a\xd5\xcf\xf8\x3a\xad\xe4\x75\xab\x5c\xcb\x0b\xc9\xe2\xd1\x4f\x3f\x21\xd7\x18\x12\x62\x4a\x4e\xe9\xfb\x8a\x52\xe8\xa5\x3a\xce\xba\x00\x5c\x30\xde\xf9\xee\x93\x60\xc2\x0b\x88\xfc\xcf\x87\x7d\x8c\xfb\x43\x3f\x0a\xd3\x31\x3f\x86\x16\x33\x07\x00\x50\x3c\xbc\xb4\x0d\x79\x60\x3f\x63\x3c\x11\xf9\x03\x78\x67\x57\x9f\x7f\x4a\x87\x61\x44\x1a\x9a\xf5\xe3\xf1\x64\x84\x67\x61\x76\xbd\xd1\x86\x23\x19\x29\x40\x08\xa2\x42\x36\x87\xcf\xf8\x9a\x6a\x0a\xc4\x68\x4a\xe3\xb5\xba\x8a\x12\x3c\x8e\x2f\x31\xf2\x47\x23\xe8\x55\xea\x21\x3c\xeb\xe3\x49\x06\x62\x3f\x7b\x25\x97\xcf\x86\xf8\x1a\x45\x98\x8e\x48\x0f\xb3\xfa\x01\xe9\xf1\xd4\x1f\x8d\xae\x51\xef\x1a\x86\x8c\x0c\x0f\x4b\x05\x00\x34\xf3\x2b\xd9\x90\xc2\xe8\xa2\x52\x95\xf6\x81\xca\x0f\x4a\xef\xd0\xd7\xaf\x04\xdf\x95\x30\x0a\xf0\xec\x70\x50\x01\x37\x45\x42\x6c\x1f\x9f\x55\x61\xf2\x97\xeb\xfa\x06\x21\x51\xd8\x67\x7c\x7d\xbe\x22\x56\xa2\x6e\x0e\x6d\x52\x24\x29\x6f\x98\x26\xff\x85\xc9\x13\x4e\x99\x64\xde\xfb\xd4\x36\x17\xc5\x51\x19\x9e\x40\x4d\x6a\x8b\x68\x92\x59\x0c\x9b\x2a\x50\x07\x15\xa2\x0e\x01\x67\xe9\x4c\x8a\x33\xa5\xf7\x04\xb0\xa4\x8a\xf4\x50\x7f\x65\xe7\x74\xef\xe3\xd1\xe1\xbb\x77\xfb\xef\xdf\x7c\x3c\xdd\x3f\xd8\x39\xfc\x70\x2a\x1f\x8f\xca\xcc\x80\x29\x54\x29\x12\xd3\x83\x1c\x1d\x4d\x99\x8c\xe0\xb5\xed\x67\x3e\xda\x44\x67\xe7\x2f\xd5\xf7\xfb\xe0\x6e\xcc\x5f\x97\x5b\xaa\x02\xe0\xca\x64\x9a\x0e\x2b\x3a\xdd\x33\x11\x4f\x29\xbd\x1f\xa4\xb4\xf0\x67\x7c\x5d\x35\xc6\x20\x07\xb8\xc0\xe0\x95\x12\x37\x05\x64\xd6\x28\x5f\x52\x63\x7f\xa2\x30\xc9\x10\xc8\x16\x18\x0a\x90\x18\x21\x4d\x75\x98\x0e\xfc\x89\xa4\xba\x90\xf4\xda\xaa\xa7\x38\x15\x5c\x81\x6b\x54\xff\xd0\xc7\xe0\xc0\x9f\x9c\x41\xb5\x10\xb6\x78\x3e\x32\x67\x50\xfc\x5c\xf2\x48\x17\x8d\x2b\x7e\xf3\x68\x61\x99\x39\x56\xa5\x66\x25\xbc\xc9\xe9\xe1\xf6\xe1\x06\x27\x32\x34\x8a\x2f\xfe\x4b\x97\xaa\x63\x87\x5c\x7d\x57\x49\xba\x84\xb2\x20\xb5\x1e\x1d\xd9\xb7\x95\xb1\x3f\xa9\xb8\x8c\x15\xf8\x1f\xd8\x2f\x06\xf9\x28\x93\xb1\x67\x47\xbd\x30\x90\x1d\x6f\x04\x45\x7c\xc6\x28\x9d\x26\xa0\x27\xe6\xcc\x2a\x4c\x51\x9a\x85\x84\x1e\x28\x27\xc7\x01\xf2\x07\xe0\x20\x94\x24\xe1\xa5\x3f\xd2\xf6\x5a\x05\x26\x19\x10\x70\xfb\xa7\x4b\x23\x0c\xce\x75\x14\xf3\x2e\xad\xf4\x73\x7b\x00\xb5\x8e\xf8\xe2\x74\x98\xe1\xba\x13\xf9\xd3\x0d\xc2\x23\xa6\x67\xb6\xd4\x18\xf8\xa3\x14\xcb\xb7\x6c\xcc\xed\x69\xee\x98\x8a\x74\xfe\xac\x4d\x74\x0b\x18\x64\x5e\x60\xc6\xa5\x45\xeb\x38\xfc\xbf\x34\xc6\xf3\x07\xa8\x59\x62\x1c\xcb\x2b\x06\x90\x42\x61\x52\x2f\xa1\xa2\x3a\x4a\xda\x62\x77\x0f\x93\x8a\x8b\x5b\xcf\x80\xe4\x4b\x4e\x57\xc6\xa5\x63\x3d\xa8\x86\x7a\xe3\xa5\xa5\x5e\x32\x53\x57\x30\x85\xf4\x8f\x1b\x0d\x08\xed\xc3\x94\xe1\x3f\x6e\x34\xc1\x0d\x75\xad\xcc\x1d\x19\x8b\xb9\x89\xb3\x2c\x8c\x2e\xec\x9e\xbd\xc0\x98\x02\x29\x73\x2d\xda\x14\x3e\x6b\x2f\x8d\x12\x79\xa4\x67\x61\x1f\xe4\x0a\x5a\xc4\x1a\x65\xfd\x26\x28\xaf\x3f\x5e\xeb\x3d\x5e\xeb\xfd\xcd\xaf\xf5\x58\x44\x5f\x76\x6a\xb9\x4d\x54\xdf\x79\xe6\xb0\x8e\xdc\x17\x5a\xea\x8b\x45\x0c\x67\xf9\x92\xae\xb3\xc3\xc1\x56\x10\xa4\x30\x74\x62\x77\xf3\x23\x50\x4b\xa5\x68\x4a\xc5\x2f\xe6\xf4\xe6\x11\xe1\x2b\xcc\x20\x52\x1e\x82\xa4\x00\x74\x53\xa5\xbb\xfd\xd3\xa7\xf2\xf9\x80\x9d\xcf\x9e\xea\x4a\x22\xb2\x6d\x3e\x65\xd7\x56\x52\x39\x89\x57\xd1\x38\x3d\xdc\x95\x8e\x94\x8b\x23\xe6\x70\xa5\x70\x34\x26\x37\x91\xb1\xb7\xa8\x1a\x5d\x42\x11\xdd\xb7\x79\x4f\x53\xcb\x66\x61\xb3\xc7\xe1\x7f\xea\xbe\xa5\x6f\x4f\x2e\xdd\xa5\xb0\x10\xe4\x81\x88\x00\xe5\x9f\x7e\x02\xdc\xa9\x62\x2a\x8c\x2e\x80\x1b\x57\x15\x88\xfc\xfa\x62\x5e\x4a\x53\x0a\x51\xf6\x52\xbe\x6d\x27\x85\x34\x34\xf2\x53\x68\xe6\x24\x23\x93\xfd\xc3\xe6\xa6\x31\xd0\xfc\xcf\x78\xb1\xba\x4a\x33\xb7\x2b\x24\x05\x4b\x2d\x4b\xa6\x44\x66\x4b\xd2\x0c\xa5\x31\xb5\x73\x9c\x4c\x80\x75\xc3\xd9\xd9\x8f\xae\x33\x72\xe0\xf7\x50\x0f\x0f\x08\x03\xa0\x4b\x9c\x5f\xa1\xc2\x68\x50\x25\xa3\xf6\x17\x0e\x2a\x3f\x58\xb0\xfe\xe9\x27\x64\x1b\xf9\xaa\x51\x1f\x99\xd7\x0d\x04\x55\x8b\x7b\xb4\xb3\xb3\x31\xe5\x9b\x11\x9e\x65\xa8\x7b\xf4\x01\xf5\xaf\xfb\x23\xec\x89\x6e\xc2\xb0\x8b\xcd\x06\x7a\x02\x5d\x66\x36\x4b\x93\x24\xee\x13\x9e\x95\xd2\xd1\x31\x5a\x91\x8e\xc1\x62\x99\xd8\xe6\xc2\xd2\x11\x46\x1a\x7a\xa9\x1b\x0f\xd5\xca\xf4\xcf\x32\xac\x94\x14\x5c\xa2\x99\x64\x0c\xf6\x54\x00\xd0\xcd\xd8\x24\x5d\x6c\xc5\xb4\x83\x72\xa4\xfb\xd5\x2d\xa1\x6e\xbc\x5c\x08\xdf\x0f\xbc\x9c\x4d\xb0\xf7\xb2\x0e\x89\xea\x0c\x80\xb3\x90\x75\xc2\xed\x24\xf7\xad\x69\x39\x9d\xb9\x36\x8b\x4d\xe6\x35\xf9\x0f\xc9\xba\xa6\x7d\x22\x47\x4b\xca\xa9\x25\xca\x85\x97\x96\xa4\x72\x62\xbd\x4a\x27\x7d\xf8\xe0\x07\x81\xb0\xed\x92\xf2\x7e\x8a\xef\xfa\xf4\x48\x07\x07\x89\xc5\x72\xe3\x2d\x78\x2f\xd9\x8a\x53\x81\x4e\x8c\x84\x6c\xe9\x9b\xb7\x5b\x68\xb1\x18\x0e\xf2\x57\xaa\x56\x2a\x67\x41\xa0\x55\xd0\x90\x2f\x85\x84\x3c\x8b\x6e\x89\xd6\x20\x30\xa1\x72\xae\x48\x73\x50\x2d\x18\x6d\xab\x54\x2b\x10\x72\x1b\xb0\x11\x59\x5d\xcd\x76\x41\x64\xdf\xc7\x1c\xa5\x8f\xb2\xef\xdf\x5d\xf6\xcd\x4d\xda\x78\xc2\xde\xfb\xf2\xd1\xdd\xef\xf9\x91\x2a\xed\x86\x3d\x5f\xb8\xde\xe2\x19\x55\x57\x17\xb9\xee\x9e\x8c\xfd\x24\xdb\x61\x05\x73\xb7\x5b\xe7\xd5\x18\xa8\x95\xa0\x59\xde\x17\x4d\xe7\x2d\xbd\x16\x97\x60\x27\x59\x12\x46\x17\x37\xe0\xda\x62\x7b\x4f\xa4\xe5\x9e\x1f\xc9\x9f\x7e\xf1\x47\x53\x7c\x83\x2e\xc9\x7f\xd8\x75\x08\x81\x3c\xc0\x09\x9e\x73\x43\xea\xa9\xe6\x05\x10\xa4\x86\xe1\xa4\x8a\xc5\xd9\xd0\x03\x8c\x88\xb4\xee\xd1\x96\xcc\x2d\x0c\xd4\x6e\x74\x94\x21\xdb\x74\xcf\x8f\x2a\x59\x5c\x65\xaa\x22\xd0\xe1\x90\xcf\x5c\xe5\x53\xb1\x58\x11\x91\x7a\x90\x26\xa2\xf2\x2c\xa4\xea\x1b\x0a\x91\xf9\xe9\x3e\x33\xf5\xc7\x0c\xe2\x76\x98\x10\x59\xcc\xe6\x10\xc3\x7b\x74\x1a\x33\xcf\x5e\xb9\x3b\x50\x9d\x41\xaf\x54\xcd\xae\xf1\xf6\x84\x1c\x03\xdd\xb0\x49\xba\xe0\x22\x21\x3c\xa5\x71\x36\x94\x53\x82\x57\xaa\xd0\x08\xc3\x36\x4a\xb3\x30\x9b\x52\x81\xcb\x34\xff\x0a\xf0\x24\x4e\xc3\x4c\xc6\x92\xc1\x15\xe8\x01\x98\xfe\x28\xc4\x51\xa6\x5b\x62\x94\x6e\xd8\x30\xb1\xe0\xa9\xc6\xcd\x11\x5c\x14\x23\x73\xfc\xb8\x0a\xbe\xf0\x2a\x59\x90\xde\x60\x1a\x05\x60\x13\xd9\xc7\x49\xe6\x87\x62\xfa\x1d\xcb\x47\x4c\xec\x62\xeb\xe8\xc1\x97\x90\xc0\xeb\x16\x6b\x89\x8d\x3c\x99\x4d\x2d\xe3\x97\x24\xdb\x0a\xef\xf5\x2c\xce\x25\x5a\x02\x7a\x83\x36\x20\xd1\xe6\x68\x8a\x37\xe8\x7f\xb8\x98\xab\x25\x7b\x77\xce\x0a\x9b\xfc\x7c\x52\x20\xae\x7d\xd8\x47\x9c\x13\x22\xce\x21\x51\x65\x3c\x4d\x33\xd8\xea\xf0\x18\x47\x99\xa0\x9b\xde\x75\x86\xd3\x66\xa3\xca\x84\xf1\x1f\xaa\xda\x44\xb2\x72\xf7\x3e\x7d\xa9\x31\x7f\xbc\x3a\xa5\x54\x34\x8d\xc2\xff\x9d\x62\x14\x06\x38\xca\xc2\x41\xa8\x72\xe2\x52\x73\xcd\x47\xa7\xc4\x0c\x43\x93\x76\xae\xe9\xc3\xae\x23\xed\x41\x2f\x75\x22\xe0\x63\x5c\xf1\x7b\x61\x75\xc5\xcf\x08\x63\x5d\xe1\xe3\xcb\x41\xff\x71\x57\x22\x30\x64\x55\x3e\x8a\xd6\x20\x08\xe6\x7e\xf8\xe3\x46\x93\x88\xae\x3c\x71\xff\xcd\xb9\xd7\x2e\x95\x2a\x99\x69\x77\xdb\xa5\xf2\xb5\xbd\x94\x95\xf0\x31\x91\x2f\x06\x7e\x3f\x8b\x93\x6b\x8f\x2a\x94\xc9\xc0\x3e\x21\x6c\x9a\x88\xfa\xf1\x00\x89\xde\x6c\x6e\xa2\x1f\x69\x40\xa6\x1f\xa1\xcc\x93\xd5\x55\xd4\x8d\xc7\xe3\x38\xfa\xe7\xc9\xd3\x27\x4f\x8c\xce\xe7\xbf\x58\x03\x1c\xa7\xca\x8f\x64\x18\x12\xfc\x63\xd5\x43\xd2\x2b\x1c\xf5\x97\x7b\x7e\x8a\x3b\x2d\xed\xc3\x38\x68\xeb\x45\x2f\x27\x9f\x83\x81\xf6\xb2\x1f\x4e\x86\x38\x59\xa6\x90\xab\x2f\x9f\x3e\xb9\x79\xfa\x04\x8f\x52\x8c\xa4\xce\x50\x85\x39\xed\x0b\x1f\x86\x1f\xd1\x4f\x3f\xb1\x0f\x2b\xfe\x38\x10\x7d\xdb\x3a\xd8\x7e\xfa\xe4\x09\xfd\x50\x39\xe3\x38\x7b\x48\x45\x15\x9e\x09\x86\xf4\x03\x45\x0c\x7e\xcb\xf8\x9c\x8b\x51\x96\x11\x63\x0d\xd1\x68\x18\xa8\xd2\x4b\xe2\xab\x14\x27\xd5\xa7\x4f\x9e\x88\x11\x8b\xe3\x6c\xa5\x9b\x5c\x4f\xb2\xf8\x9f\x27\xb4\xea\x0d\x9c\x9e\xe4\xed\x47\x7c\x47\x7f\x3c\x7d\xfa\xa4\xa2\x1e\xc7\x9e\x20\xaa\x11\x39\x19\xc6\x49\xd6\x9f\x66\x29\x7d\x43\x96\x4d\x17\x6d\x22\x5e\xf7\xa5\xf4\xfa\xe3\x28\xec\x91\x4f\x2b\xa3\xb0\x27\xbd\x07\x65\x58\x17\x3a\x45\xbe\x92\x52\x2b\xd2\x3b\x05\x82\x3f\xba\x88\x01\x04\xf9\xf1\xf2\xa9\xc0\xe2\x5d\x1c\x7f\x9e\x4e\x50\xe6\xf7\x46\x58\xc2\xe4\xe4\xf5\xe1\x6f\xec\xcc\x27\xde\xed\xbf\xff\xe5\xa3\xed\xfd\xc9\x87\xd7\x1f\x0f\xf6\x7f\xfb\x58\x73\x7d\xa8\xbb\x3e\x34\x5c\x1f\x9a\xd6\xb6\x5d\xed\xc8\x1f\x8d\xb6\xe4\x8f\x46\x7b\xf2\x47\xde\xa6\x18\x9a\x6e\x3c\x9e\x90\x83\xe2\xc8\x1c\x22\xdb\x94\x6a\xb5\x82\x78\xda\x23\x52\x3f\xa9\x95\x17\x00\x16\x2b\x63\x81\x64\x4b\x85\x10\xa2\x09\xa2\x10\xbd\x42\x8d\x76\xe7\x25\x0a\x97\x96\x14\xf0\x42\x46\x44\xaf\x50\xbd\xb1\x6e\x7c\x23\x7f\xc1\x59\x78\x8e\x36\x09\x8c\x57\xa8\xfe\x52\xfd\x4e\xaf\x52\x0b\x6a\x55\x68\xb5\x2a\xfa\x1d\xd5\x66\xf5\x7a\x4f\xaf\x9f\x3f\xde\x3c\x55\x7a\xfd\xab\x3f\xfa\x8c\xde\xec\x56\x1a\xbf\xaf\x57\xd5\xde\xce\x68\x84\x44\xf5\x5d\xa8\xbd\x5c\x68\x04\xa4\x41\x4e\x7b\xf1\x4c\xfd\x08\x86\x06\xa4\xcd\x59\x88\x7e\x47\x95\x59\xde\x21\xf6\xbb\x21\xfd\x6e\x4a\xbf\x5b\x55\xad\xb3\x00\xa5\x92\xce\xd0\xcf\x3f\xff\x8c\xd6\xa1\x64\x3a\x43\x3f\xa1\xda\x6c\x30\xa0\x03\xd4\x69\x6a\x55\xc8\xea\x38\x9b\x91\x81\x4c\x67\xda\x27\xbe\x78\xce\x52\xf8\x3e\x7b\xf9\xd4\xd9\xa9\xf1\x74\x94\x85\x93\x51\xd8\x07\x2d\x81\xd9\xbd\x19\x21\xe3\xe0\x6c\x76\xfe\xd2\xf2\xad\x45\xbf\x35\xac\x1f\xd7\xe9\xc7\xd6\x79\x41\xeb\xe9\xb4\x87\x40\xbe\xf1\xd0\x38\x9c\xa1\x7e\x3c\x9a\x8e\xa3\x54\xa1\x7e\x19\x26\x91\x14\x2a\x01\xf4\xea\x39\xa1\x99\x5a\x9d\x8f\x14\x7b\xac\xd5\x6b\x35\x7d\x68\xc5\x4a\xa6\x83\x55\xc9\x60\x62\x5a\x55\xf4\x95\xfc\xa6\xe3\xed\xa8\x52\x97\xab\xd4\x3b\x52\x95\x7a\xc7\x55\xa7\x21\xd7\x59\xaf\xa2\xbc\x4e\xc3\x98\x75\xc1\x0d\x68\x9d\xac\x60\xa4\xc2\xe8\x52\x1e\x2d\xf2\x58\x7a\xc4\x66\xeb\xd2\xf8\x30\xf2\x6c\xb1\x57\x35\xfe\xa2\xa1\x0c\x69\xe1\x88\x2a\xfc\x91\xd1\x58\x99\x61\x55\x58\xa7\x52\x6f\xce\xd8\x2a\x6c\x55\xa9\x38\x67\x80\x15\x96\xcb\x2a\x16\x8d\x32\x5c\x16\x80\x1e\x18\x27\x26\x27\xfc\x61\x66\x65\x82\x8c\x01\x6c\x2e\xc0\x01\xa1\x4a\x03\xfd\x8e\x82\x33\xf2\xbf\xd9\x3a\xfa\x1d\xcd\x1a\xe7\xe7\xfa\x42\x82\xb2\x21\xfa\x7d\x13\x0a\xce\x42\xa3\x80\xc2\x24\xe1\xe7\x0d\x9c\x69\xc5\xbe\x72\x94\xe0\x3e\xed\x5c\x80\x8e\xfb\x71\xc4\x36\x98\x7c\x57\x3a\xee\x1e\xbe\x27\x7b\x44\x6d\x56\xab\x79\xa8\x36\xab\xd5\xe1\xdf\x06\xfc\xdb\x82\x7f\xd7\x3d\xa0\x05\xf2\x6f\x03\xfe\x6d\xc1\xbf\xeb\xf0\x6f\xbd\x47\xfe\x6d\x76\xf2\xcd\xec\xf9\x73\x86\xd4\x73\xb4\xb5\x73\x42\xe3\xb1\x23\x2a\x0e\x21\x22\x10\x24\x61\x36\x1c\xaf\xf0\x32\xab\x39\x2a\xa4\xf4\x26\x13\x1f\x56\xe8\x83\x24\x61\xac\xe0\x59\x46\xa3\x07\x88\x2e\x7f\x0c\xe2\x63\x9c\xe2\x6c\x03\x39\xb6\x48\x36\x08\x27\x9f\xc3\x09\xb3\xfc\x8d\x07\x28\x3a\x8e\xe1\x34\x36\xf4\x53\xd4\xc3\x38\x02\xef\x00\x76\xbf\xe5\x47\x01\x98\xf0\x05\x61\x80\xa2\x38\x63\x66\x98\x26\x29\xd0\x64\x2e\x1c\x12\x37\x17\xfd\xf8\x19\x5f\x1f\x25\x61\x9c\x1c\x53\x0b\xe0\xcd\xcd\xfc\xbd\x95\x74\xb8\x59\x98\x36\xa7\x66\x07\x54\xf1\x8d\xff\x71\x83\xc3\x4d\x7b\xf3\xf9\x5b\x0b\x7f\xfe\x8c\xaf\x7f\x8d\x13\x30\x62\xfc\x8c\xaf\x57\xae\xc8\x6f\x7b\xb1\x93\xf0\x0b\x66\xa5\xd2\xf0\xe2\x35\x61\x40\x68\x15\xb5\x8a\x96\x91\xf0\x03\x48\x60\x80\x4c\xb0\x7c\xe4\x38\x8e\xf9\x33\x6f\x70\x09\x75\x4a\xb5\x40\xfa\x9f\xf6\x87\x98\x1c\x3f\x10\x11\xa1\x2d\x7d\x48\x8f\xe3\x2b\x02\xbb\xc2\x9b\x59\x22\xbb\xf4\xf3\xc2\x3e\xc8\x70\xed\xc3\xc2\x1b\x95\xc6\x59\x7a\x77\xa6\x2f\xd5\xdc\x44\x94\xa0\x43\x45\x0f\xfa\xf3\x15\xc3\x90\x3d\x5b\xa4\x10\xc4\xc8\x4e\x94\xa7\x83\x64\x2d\x47\xfe\x24\x54\xce\xa0\xce\x39\x1d\x59\x98\x71\xf6\xc6\xc2\x6a\xdc\x0c\x0b\x49\xfb\x89\x01\x1c\xa2\xe9\xe8\x43\x29\xa3\xfd\x03\x43\xfc\x1f\x02\x71\x27\xe6\x6c\x16\x8e\xe3\x0c\x11\x92\x74\x17\xca\xe4\x3d\x40\xdd\x02\x0a\x21\x9f\x4c\x7b\x65\x20\x83\xf8\xc4\x61\x9e\x4b\x7b\x1b\x7c\xc8\x77\x2a\x26\xa3\x9d\x4b\xbb\x98\x5c\x62\x5d\x29\x00\x98\x32\xc8\xec\xf5\x1c\x6c\x0f\xc2\x19\xb0\xed\x22\x6c\x7f\xdf\x04\x26\x7e\xc6\x06\x79\x35\xa7\x8e\xaf\xa8\xc6\x50\xb7\x4c\x36\xca\x27\x1c\x48\x8b\xad\xbb\x9f\x51\x87\xf0\x33\x6d\xc2\xd0\xe6\x26\x6a\xcd\x9b\xb4\xef\x6e\x68\xed\x7d\x76\x8c\xb8\x6b\xcd\x18\xb4\xce\x86\xe4\x1c\xfd\x4e\x64\x09\x73\x11\xcd\xe5\xe6\xb2\x4c\x57\xcc\x66\xc2\xe8\xf2\xad\x85\xd3\x18\xaf\xdd\xcc\x86\x14\xcd\xf9\x8d\x78\xca\x59\x0e\x7f\xe5\xe0\x3a\x32\xc3\x62\x7c\x74\x59\xd4\xb1\x11\x2f\x1c\x19\x79\x33\xff\x28\x20\x1a\x27\x3b\xb9\x5f\xce\xd4\xb2\x82\x9b\x87\xf8\x2b\xd4\x02\x47\x16\xfa\x50\x44\xfb\xea\x5c\x9c\x71\x08\x4c\xd2\x5c\xb0\x23\x05\xc0\x54\xa1\x5b\x5d\x43\x84\x14\x55\xe1\xda\xb1\x94\xce\xd1\xef\xee\xc5\xe9\xf8\x53\x85\x6f\xfb\x0a\xd4\x11\x68\x9e\xa9\x4b\xd1\x3e\x07\x4e\x49\xd6\x93\xa6\x07\x47\xfd\xe4\x7a\x42\x2d\x63\x65\x39\xef\xc0\x43\xf1\x60\x90\xe2\xcc\x98\x19\xba\x46\x82\xb8\x2b\xea\xe5\x85\x3d\x73\xaf\xf6\xf2\x13\x62\xfe\xb3\x9e\xff\x6c\xe4\x3f\x9b\x1e\xb0\x18\xf9\x94\xa1\xe0\x1a\xe0\x45\x71\x25\x5c\xf3\xca\x9f\xa0\x46\x14\x80\xec\xd9\xca\x86\x0e\x21\x86\xd0\xf7\xc1\x19\x05\x43\xe4\x17\x7d\x48\x95\x6f\x6a\xd9\x66\x41\xd9\xa6\xf5\x48\x54\x66\x08\x55\x5a\xf5\x54\x02\x55\x1f\xeb\xea\x63\x43\x7d\x6c\x7a\x42\x61\x61\x6c\xde\xab\xab\x68\x9f\x9c\x7c\xbf\x8b\x31\xb2\x4f\xba\x32\x4c\xd6\x59\xf7\xd0\xdd\xc8\xcd\x46\x34\xec\x40\x50\x5a\xb2\xb6\x0c\xec\x1b\xcc\x62\x85\xc2\x85\x24\x15\xd5\x09\xa6\x16\x1d\x57\x4d\x1a\xac\x73\x78\xfd\xbb\xc2\x6c\x6b\x36\x0d\x50\x5a\xd7\xa7\x43\xab\x65\xcc\x0f\xd4\x6a\xa8\xb5\x1a\x7a\x2d\xab\xb6\x29\x6d\xea\xd3\xa9\xd5\x6a\xda\xd4\x50\x6f\xb5\xb3\x83\xfd\xe8\x2f\x6f\x81\xb6\x13\xc3\xb1\xe5\x8c\x23\xf6\x5f\x3a\xaa\x9b\xa8\xfe\x92\xfd\x7c\xc5\x67\x88\xbd\x70\xec\xbb\x30\xc7\xe1\x20\x03\x4a\xf7\x1c\x8a\xb2\xc2\x89\xe3\xa8\x67\x64\xf2\x24\x75\x4d\x4d\x48\x5e\xbf\x4b\x8a\xae\x4a\x5a\x37\xe4\xae\xdf\x25\xa5\x56\x25\x6d\xe8\x52\xd7\xef\x92\xfe\x2a\x6d\x4a\xaf\x8d\x6d\x78\x69\xc9\xb6\x01\x00\x72\x75\x15\xb9\xba\x03\xb9\xc6\x1c\xe4\x9a\x85\xc8\xd5\x6e\x89\x5c\x43\x45\xae\xe1\x40\xae\x39\x07\xb9\x5a\x21\x72\xf5\x5b\x22\xd7\x54\x91\x6b\x3a\x90\xab\xcd\x41\xae\x5e\x88\x5c\x63\x2e\x72\x56\xd2\xfd\x30\x01\x1b\xa2\x34\xf3\x33\x6c\x16\x00\x76\x92\xd5\x2c\x1d\x03\x96\x91\xe9\x7a\x34\xf8\x42\xe6\x22\x6b\xd8\xbe\x90\x81\xc8\x74\xed\xb8\x55\x89\x62\x5d\x4f\x73\x78\x1f\x2c\x9f\x0a\x3d\x79\x48\x6b\x47\x3f\xb5\x58\x96\x8f\x7e\x6c\x31\x57\x90\x72\x6e\xc9\x97\x50\xb5\x1c\x25\x88\xf5\xc3\xb1\xab\xbb\xb1\x33\xd7\x8f\x81\x9d\xb1\x84\x54\xec\x6a\xb7\xc1\xae\x21\x61\xd7\x70\x63\x67\x2e\x20\x03\x3b\x63\x0d\xa9\xd8\xd5\x6f\x83\x5d\x53\xc2\xae\xe9\xc6\xce\x5c\x41\x06\x76\xc6\x22\x52\xb1\x6b\xcc\xc7\xce\xa4\x56\xcc\x03\x5b\xdb\xe5\x12\xba\x0d\x5b\xd6\x91\x2e\xe4\x18\xcb\x49\xdd\x5c\x2d\xab\xca\x10\x7d\x9a\x2e\xd9\x87\x1d\x85\x37\x50\xa3\xdd\x59\x6d\x36\x98\x06\xba\x6a\x53\x05\x73\x89\x45\x08\x48\x29\x73\x1c\x66\xaa\xe1\x67\x29\xcb\xf7\x84\x20\x85\xf7\xc0\xef\x63\xa1\x23\x16\x40\xfe\x1b\xcf\xfc\xf1\x44\x9c\x94\xf3\x0f\x7c\x4e\x29\xac\x0c\xcf\x32\xe9\x76\x7b\x65\x6b\xe7\x64\x85\x9d\x23\x2a\x63\x6e\x91\xfe\x19\x5f\x7b\xa8\x3f\xb8\x10\xd2\x7c\x0e\x65\x32\xf2\x09\x12\xb3\x0c\xe9\x50\x98\x84\x5f\xc9\xdb\xb1\x01\x62\x3a\xed\xae\x45\x89\xfd\x91\x46\x4d\xdd\xc3\xa3\x09\x4e\x2a\x5b\x3b\xf4\x5a\x9f\xea\xec\x9f\x3e\x61\x36\x2b\x72\x93\x2f\x9f\x3e\x85\x08\xb8\x60\x40\xa2\x58\x15\x6c\xb4\x1b\x1e\xb7\x4b\xd8\x68\x83\xed\x88\x64\x99\xb0\xd1\x6e\x79\xb9\x49\xc2\x46\x1b\x5c\x18\xc7\x41\xfb\xc7\x8d\x4e\xfd\xe6\xdc\x6b\x37\xee\x64\x2d\xf2\x2d\xcd\x44\x1e\xcc\x98\xe3\x1b\x9a\x65\xd0\x95\xf0\x1c\x31\x03\x0a\xd2\x3c\xea\xc7\xe3\x49\x1c\x41\xc8\x75\xf2\x6d\xf5\xe9\x13\x31\xef\xa3\xb0\xb7\xc2\x8a\x7e\xfd\x2a\x1b\x00\x08\xa7\xcf\x7b\x36\xee\xf0\x53\x9c\x5b\x75\xf8\x29\x96\xbe\xfd\x1a\x27\x01\xb8\xa5\x8b\x02\xe2\x8d\x0c\x61\x3a\x00\x7b\x31\xa0\xf5\x2d\x7e\xcb\x93\xc3\xb4\x7e\x56\x30\xc3\xe0\x59\xd5\x25\x0b\x55\x7a\xff\x21\x1b\xac\x03\x14\x1c\xf5\x57\xc8\x83\x86\x75\xa7\x25\xbe\xd2\xc7\x22\x43\x14\xf1\x65\xe7\x72\xf2\x76\x7b\x37\xbf\x6c\xa2\xcf\xd6\x1b\xac\x5e\x4a\xcd\xf3\xc8\xb2\xe2\xb7\x58\x19\x1e\x4f\x46\x7e\x66\x63\x50\x22\xc8\xf4\x1f\x11\x0b\xc8\xc3\x35\xa8\xe0\x54\x20\x78\x1d\xe8\xfd\xc2\x2f\x78\x85\x07\x98\xdc\x40\x2d\x54\xa9\x37\xd6\x51\x2f\xcc\xd2\x6a\x11\xc0\xf0\xd2\x02\x6f\xff\x97\xdb\x82\xfb\xb8\xf3\xbe\xfb\xf1\xb7\xdd\xc3\xe3\x83\x8f\x07\x87\xdb\x3b\x68\x0b\x42\x1b\x64\x7e\x94\xa1\x04\x4f\x12\x9c\xe2\x28\x0b\xa3\x0b\xae\x88\x21\x64\x38\x8e\x83\xbc\xef\x56\x98\xdb\x3b\xa5\x60\x32\x76\x6a\xc0\x94\x2e\x05\x35\x93\x23\xf1\x68\xa7\x28\xcb\x25\x61\x3e\x9b\x14\xdd\x2e\xb8\x7d\x4f\x13\x30\x78\x10\x39\x3e\xe4\x22\x4a\x71\xa9\x77\x82\xee\xc9\x1c\xa0\xd3\x21\x26\xa3\x9e\xc5\x68\xca\xdc\x04\x08\x0b\x40\xa4\x30\x80\x56\x40\xae\xe6\x0f\xfd\xc1\xc5\x06\x90\x2e\xc7\xb5\x2a\xef\xa8\x06\xb6\xb0\x5d\xa4\x14\x36\x23\xbf\x30\x72\x4d\x86\x0d\x7d\x6a\x8f\x29\xe1\x4e\x48\x8f\x20\xff\x19\x5f\xaf\x58\xcb\x72\xcf\xd0\xfe\xe0\x02\x55\x0e\xa1\x15\x7f\x54\x85\x3a\x7d\xdb\xe0\x95\x1c\x03\xb5\x2d\x1e\x47\x94\x4e\xe8\x0d\x21\x11\xde\x3b\x42\x28\xfd\xa2\x3e\x91\x73\x45\xd8\x77\x7f\x57\xa5\x04\xb3\x00\x52\xa4\x05\x79\x8f\xe7\x57\xcf\x2b\x74\x9b\xde\xa1\xc3\x1c\x27\x15\x76\x79\x06\x43\xe8\xa1\x3f\x50\x78\xb9\x81\xc2\xcb\x9c\x37\xde\x28\xa6\x07\xca\x7c\xab\x90\x36\x94\xb0\x50\x4c\x72\xd0\x35\x00\x72\xe2\x10\x5a\x9f\xdd\x38\xab\x6b\xd5\x22\x7b\xe8\x12\x5a\x49\x7a\x72\x2c\xc4\x47\x7a\xba\x5f\x7a\xda\xc6\xf7\x45\x4f\x02\xd2\xdd\xe8\x49\xe5\xd3\xb7\xa0\xa7\xfd\x28\xcc\x42\x7f\x14\x7e\xc1\x29\xf2\x51\x84\xaf\x46\xd7\x0c\xc3\x80\x0d\xc7\x7c\x5a\xe2\xbb\xc6\x6c\x10\x27\xe3\x83\x38\xc0\x68\x87\xfa\xaa\x41\x98\xe6\x9c\xd3\xc5\x89\x4c\xa7\x60\x5d\x0d\x6e\x7e\x9c\x6a\xc5\x26\x63\x27\xc3\xef\x8e\x64\xef\x8d\xac\x2a\xe6\x07\x1b\xa7\xb8\x25\xc1\x85\x51\xa8\x58\xd8\x88\x69\x92\xc8\xc5\xa2\xa2\xde\x9a\x4c\x08\x2d\xc0\x68\xf1\x6c\xd3\xa9\xe5\x9a\x81\x0c\xf1\xa6\xf8\xc9\x37\x45\x4a\x83\xe6\xa9\x38\x23\x92\x33\x35\xac\x8f\x93\x31\x9d\x76\xdf\xa6\xbb\xa1\xf4\x9d\x93\xd4\x66\x4e\x5e\x2f\x6d\x25\xa9\x1d\x0d\xd8\xca\x58\xcf\xe2\x21\x25\x74\xea\x01\x60\xeb\x07\xd8\x17\x55\x4a\x2f\x1c\xb0\xd1\x51\xf9\x30\xc4\x72\x48\x45\x4b\xa0\x3d\xbb\x23\xf9\xb0\x25\x68\xe2\xa6\xcc\x70\x52\xc6\x88\x8a\x1a\x15\x05\x7e\xe6\xa3\x1e\xc8\x5e\x6a\x09\x87\x3c\x06\xa0\x69\xa6\x0b\xee\xed\xac\x03\x3e\xc2\x09\xcc\x65\x3f\x8e\xfa\x09\xce\xf0\x32\x1b\x8e\x51\x7c\xa1\x30\x65\xe9\x5e\xea\x78\xb1\xb1\x86\x78\x1a\x80\x39\x75\x6f\x61\x3c\x05\x07\x12\x4b\xc1\xc1\x02\x9b\xde\xd7\x94\xb9\xc2\x10\xa0\x4c\xd9\x49\x78\x03\x6f\x83\x35\x20\x81\x2f\xb1\x73\x49\xfc\x49\xc0\xa2\x41\xb3\x58\x30\x82\x30\xba\xb8\x07\x6e\x92\x77\x7e\x93\x93\x07\x83\x5f\x79\x46\xda\x7c\xa6\x92\x49\x99\x7a\x57\x1c\x73\x27\x85\xb1\x92\x1b\x5a\x94\x57\x3a\x74\x0e\xee\x81\xa3\xc0\x36\xfb\x3e\x7c\x91\xab\xdb\x68\x8a\xb6\x87\xfc\x4b\x3f\x1c\xf9\xbd\x11\xa6\x66\x88\xa9\x7b\x5b\xfc\xc8\x3b\x53\x9a\xaa\x76\xc3\x88\x6d\x7c\x85\xfb\x14\x83\xab\xee\x33\xef\xe3\x8c\x79\x47\xd3\xa0\x69\x14\x52\xbe\x6b\xa0\x30\x45\x78\x30\xc0\xfd\x2c\xbc\xc4\xa3\x6b\xe4\xa3\x00\xa7\x59\x32\x85\x67\x0f\x25\xd8\x0f\x96\xe3\xa8\x8f\x4b\xed\x33\x65\xa9\x17\xd0\x78\x28\x1a\xa6\xc0\x1f\x9a\x92\xf9\x48\x56\xca\x13\xb1\xa8\xb2\x28\xf5\x8b\x8a\xf3\xc9\x9f\x17\x2d\x4f\xff\xbb\xf9\x5c\x4c\xa1\x90\x5a\x22\x1c\x14\x02\x40\x85\xab\x45\x29\x6a\xb9\x28\x59\x80\x21\x43\x3c\x24\x82\x2a\x5b\x70\x38\x60\xf1\x32\x39\xa7\xde\x95\x26\xc4\xba\xf8\xcc\xda\x73\x95\xcd\xf5\xc6\xfa\x6a\xb3\x21\x7f\xa2\x2a\x11\xdb\x17\x4d\x0e\xda\x40\x75\xe5\xab\x2a\xff\x6e\xa0\x46\x99\xb3\x53\x6a\x55\x65\xfb\xf3\x15\xd9\xc8\xb9\x36\xf9\xa9\x85\x8d\xf4\xe9\x10\x4b\x42\x01\x4b\xb4\xe5\xa3\x21\x68\x8d\x89\x90\x59\x62\x29\x72\x11\x76\x2b\xe2\xf8\x40\x80\x01\xbe\xac\x89\xd0\xc4\xd6\xb5\xa5\x43\xdf\xe0\xb0\xc4\xac\xbd\x4d\x95\xa7\xa6\x23\x37\x64\x5b\xe7\x2a\x53\xea\x6d\x38\xfd\xa6\xc8\x9f\xf8\x94\xe2\x11\xee\x67\xb4\xe1\x93\x2c\xf1\x33\x7c\x71\x5d\x71\x99\x6b\x4b\xda\x67\x10\x17\x37\xd1\x33\xca\x4a\x9f\x39\xcd\xc3\xd8\x6c\x1c\xf9\x69\x4a\xd8\xc4\x6b\x3f\xc5\x81\xe2\x31\x27\xff\x15\x1b\x87\x31\x50\x27\x38\x81\x03\x17\xd9\xd5\xdc\x90\x8a\x17\xb9\x9e\xdb\x8f\xdd\x67\x14\xd8\xa8\xbb\x90\x62\xe4\x24\x33\x36\xf3\x86\xa5\xc8\x6e\x34\x0f\x02\x66\x9f\x07\x71\x71\x43\x51\xf4\x90\xfb\x02\x47\x1f\x03\xcf\x61\xe9\xc9\xc8\x7e\xc3\xe8\xbf\x76\x9f\x73\x27\xb4\xd5\x9b\x22\x0f\x15\xde\x18\xe9\x98\x5b\x26\x54\x67\xdb\x32\x97\xac\x54\x99\x86\xd7\x7e\xf5\xa6\xea\xb0\xd3\x2c\xc1\xfe\xf8\x56\xaa\x6c\x90\xa1\x98\xf2\x59\xb6\xc1\x6f\x36\x96\x7b\x21\x35\xd8\x56\x4f\x34\x54\x3a\x81\x30\xd6\x92\x66\xba\x8e\x2a\xcd\x86\xaa\x98\x96\x14\xbe\x27\x80\x9f\xa6\xf6\xd5\x5f\x16\x78\x84\xec\x5a\xf6\x5a\xdb\x0e\xcb\x45\xc4\x89\x9f\xc0\x71\xcb\x26\x20\x9a\xdb\x1b\x1c\x6f\x72\xeb\x2a\x2e\x34\xfe\xf0\xc3\xb3\xc1\x68\x9a\x0e\x9f\x95\xdb\xe6\x28\x14\xd7\x46\x27\x86\x79\x03\xd5\x8b\xe6\x15\xce\xb5\x90\xd5\x74\x22\xdf\x96\xca\xca\xf3\x8f\x63\x7a\xf6\xed\xae\xb0\x1f\x7f\xdc\xcc\xa7\x10\xc5\x63\x07\xea\x19\x54\x22\xb5\x21\xdd\x6e\xb2\x83\xb6\xe1\x1c\xcc\xde\xcb\x4a\xef\x22\x05\xbd\xac\xa2\x1c\xf3\xe4\x5c\xb9\x7c\xbd\xf0\x6e\xba\xa5\xf6\xc8\xaa\x10\xd4\x33\xcb\xe4\x0a\x7e\xa0\xea\x6f\xb0\x1f\xf2\x99\xe2\xdb\x1d\xe8\x61\xbb\xaf\xbb\x86\x2a\x9a\x73\x94\xf0\x92\x7a\xed\xdc\x46\xf3\x9c\xc3\x28\xd4\x15\x8a\xba\x5c\xd1\x24\xd5\xbb\x95\xc6\x59\x4c\x67\x7e\x40\xfa\xcf\x9c\xce\x5c\x13\xbc\xe0\x74\x5a\x15\xbf\x25\xa7\x53\xd4\xbd\xc3\x74\x16\x29\x7c\xcb\x5d\x1d\x7c\xd3\xe9\xbc\xf3\x74\x15\x2c\x81\x39\xf3\xa5\xeb\x4d\x0b\x26\x89\x6e\x26\x42\xcf\xdb\xb7\x89\x75\xcc\xea\xfa\x12\x6d\xa2\xf0\x52\x9e\xad\xa2\x2d\x82\xed\x98\x34\xae\x74\x77\xe8\x87\x11\xa4\x3c\x71\xdd\xb5\xbe\x06\xbb\x81\x8f\xbc\xf3\x68\xd3\x1d\x7c\x40\x57\xb1\x29\x3b\x08\xa9\x6b\x10\x83\x34\x34\x79\x63\xda\x2e\x21\xee\x44\x5f\x16\x71\x94\xd7\x5d\xbe\x1d\x68\x27\x21\xa9\x09\x65\xee\x48\xaf\x5e\x77\x2d\x7b\x8f\x09\x9e\x36\x71\x24\xc2\x7f\x66\x5c\x8d\x41\xa9\xd4\xcf\x98\x51\xf7\x8a\x5e\xc7\x80\xa1\xd1\x2c\x95\x8e\x84\x56\x84\x09\x4b\x31\x97\x91\x90\xca\x09\x91\xf5\x86\x84\xd9\x65\x11\x20\xec\xe7\xd5\x10\xb3\xc8\xfb\x14\x3f\x08\xe4\x99\x96\x40\xce\x5c\x18\xf6\x82\xe4\x0f\xa6\x92\x89\x3a\xd4\x1b\x00\xd2\xe3\x41\x17\x84\x6b\x83\x2e\xcb\xca\x93\x81\x72\x15\xa0\x61\x26\xaf\x42\x71\xda\x42\x5b\x1d\x60\x91\x7e\x43\x22\x2f\x24\x87\xe1\x6c\x2e\xc4\x0a\x4d\x8e\x78\xe5\x30\x67\xfd\xed\xf0\x18\xce\xcb\x8c\xe8\xcc\x32\xb3\x38\x81\x7e\xe5\x8a\x6e\x0f\x29\xfd\xf2\xf2\x66\x6d\x42\x3f\xc3\x43\xf6\x75\xa9\xe8\xa3\x6b\xc5\xec\x18\x8f\x31\x48\xe1\xb0\xbb\x52\x12\x60\x57\x51\x70\xda\x07\x87\x76\x78\x6d\x56\xe7\x12\x2c\xbe\xe4\x61\xe7\x29\x33\xa5\xf9\xe4\x39\xde\xc2\x14\xd0\xd9\x01\xd9\x73\x67\xee\xba\x0d\x70\x89\x75\x2b\xf6\xa9\xc7\x75\xfb\xb8\x6e\xd1\xed\xd7\xed\x5d\x56\x07\x58\x08\x0f\xc3\x74\xe1\xb5\x61\xc5\x84\x51\x34\x70\x91\xdf\x0e\x8f\x9d\x1c\x40\xf6\x20\x33\x38\xc0\x5d\xd9\x8e\x15\xb3\xd3\x7c\x68\x7a\xb8\x1f\x8f\xd9\xd2\x21\x6c\x21\x8c\xa7\x69\x79\xe6\x21\x06\xab\x2c\x7b\x10\xa4\xc4\xbb\x51\x71\xe2\xbe\x90\x07\x14\x88\x48\x5c\x5a\xb2\x79\xf8\x0f\xe3\x38\xc5\x68\x1c\xce\x88\x2c\x64\xe9\x1f\x78\x82\x9a\x42\x1a\x92\x09\x91\x49\x61\x2e\xb2\x8b\x2f\x41\x3a\x25\x27\x9d\x74\xda\x4b\xf1\xff\x4e\x71\x94\x59\x55\x0c\x48\x15\xed\xa4\xac\x1e\xea\x28\x3a\x55\x83\x32\x4a\xda\xac\xcc\x57\xf5\x93\x9d\xcd\x86\x95\x2d\x46\x52\xbe\xda\xac\x91\x92\xc8\x1f\x4c\x60\x6e\x3d\x1e\x9e\xa3\xdf\x37\x69\xbd\xb3\xb0\x30\x74\x49\xfe\x9b\x9b\x40\xbf\xee\xb2\xf2\x4a\x40\x13\x49\xb4\x3d\xf2\x83\x80\x4c\xe0\x1c\x05\xc8\x04\xb2\x5c\x75\x57\xe8\x7f\xed\xea\x8f\xa3\xb7\xdd\x13\xf4\x7f\xda\xab\x6b\x68\xc2\x80\xa6\x4c\x97\x67\x83\x79\xf4\xb9\x9f\xae\x81\x9c\x3c\xf1\x83\x15\xfe\x54\x20\x1b\x1f\xf9\xfc\xfa\x79\x9a\xf2\xd0\xf9\x22\x10\x0a\x33\x57\x86\xb8\xc9\x02\x8f\x85\xec\xaf\x00\xb2\x7c\xfb\x4c\xd0\xb2\x56\xb2\xeb\xf1\x58\x08\x28\xe9\x3e\x12\x00\xa5\x22\x98\x25\x19\x14\x08\x67\xf9\xc0\xc7\x66\x71\xf8\x12\xe3\x4a\x7e\xe5\xd7\x6b\x9e\x16\x37\x4b\xb9\x60\xf6\x03\xfd\x72\xed\xd6\x0c\x44\x54\xa3\xb1\x4e\x36\xa5\xf1\x72\xc5\x0c\x99\x46\x99\xa0\x1d\xf0\x2b\x32\xa1\x46\x8c\x60\x0d\xa0\xf4\xc5\x32\x4d\x39\x2d\x22\xac\xfc\x43\x2b\x60\x6b\x96\xde\x0b\xf1\x76\xcd\xd0\x0b\x34\xd3\x1b\x7c\x25\xf4\x02\x11\x50\x14\x2c\x72\x5f\x17\xe3\x3d\x73\x70\x31\xde\x83\x5b\x8b\xf2\x76\x2e\x66\x85\x48\xa5\xc5\xe1\x0b\x72\xf6\xa3\xb6\x89\x42\xb4\xe4\x72\xcb\x97\xa1\xd3\x30\xf7\xd2\x9b\x02\xe9\x55\xc3\x0e\x6d\xe6\xb6\xef\xfc\xf0\x2f\x83\xf6\x54\x94\x6c\x66\x08\x5b\x41\x60\x1f\x04\x98\xeb\x7e\x1c\xf5\xfd\x8c\xc3\x2c\xad\x81\xf9\x10\x4d\x04\x43\x81\x25\x3b\xf4\x03\x1a\xc8\x88\x2d\xd4\x6f\xc3\x65\xa6\x91\xce\x67\xbe\x09\x47\x80\x66\x4b\x5c\xb9\x43\x39\x9d\x25\xd8\xf8\xc0\x1b\x9c\x29\x89\x8b\xa5\x45\x0c\x31\x60\xd1\xc8\x4f\x33\x78\x9e\xbf\xa6\x73\xf1\xfa\xac\xa2\x2e\xe7\x65\x54\xaf\x52\x17\xb3\x73\xe6\x0c\x66\xf3\x24\xa6\x82\x83\x9b\x62\x72\x70\x9b\xfa\x1a\x94\x36\x53\xba\x6d\x2e\xa8\xe7\xff\x33\x2e\x82\x6c\x2e\x0a\xf6\x9b\x05\xdb\xad\x42\xd1\x3d\xd0\xfd\x19\xfd\x1f\xc4\x01\xbe\xa1\xea\xc1\x53\x71\x5a\xa3\x97\x22\x70\x92\x90\xba\xd3\x7d\xdd\x75\x41\x61\x73\x75\x23\xe8\x8b\xc0\xd2\x85\x0d\x13\x22\x90\xbc\x83\xc0\xc1\x8f\x80\x0d\x80\x64\x38\xa9\x11\x38\xc1\x14\x30\xf3\xb4\x53\x1d\x6d\xdb\x68\xe2\x46\xf1\x46\x58\xc0\x30\x90\x4e\xb4\xfa\xb1\x2b\x59\x1f\x16\xdb\x00\x16\x04\x38\x53\xed\x43\x2d\x7e\x9c\x20\x37\x93\x11\x50\xd4\xa2\x48\x55\xec\x92\xef\x63\xb0\xfd\x74\xe0\x9f\x4f\xac\x79\x18\x30\x6c\x49\xb9\xa4\xad\x1a\x97\x38\x4f\x0c\x04\x2a\x6c\x89\xa0\xd1\x80\x53\xb9\x76\x37\x63\x97\xf6\x57\x9f\x17\x37\xaf\x5a\xaf\x54\xd1\xf3\xd5\x85\x31\x10\xaa\x16\xc7\x59\xe6\x2d\xc6\x13\xe4\x67\x68\x84\x09\x17\x8c\x23\xbe\x02\x58\x96\x0f\x6a\x09\x0a\xfb\x35\x30\x5c\x93\x6f\x21\x71\xbe\x19\x87\x11\x35\x12\x65\x87\x78\x23\x5c\xa2\xfa\xc8\x2a\xd1\xe9\x93\xf0\xa7\x84\x34\x06\xfb\x63\x7a\xe4\x0d\x2f\xd1\x4f\x3f\x59\xf5\xf1\x7a\xa0\x8e\xa3\x5b\xe9\x32\x72\x4c\x54\x65\x8a\xf3\x7c\xae\x37\x5b\xf6\x4a\xda\x2d\x92\xe6\x22\x89\x30\x94\x66\xaf\x2c\x04\xcd\x9b\xbb\x5f\x42\x5e\x5d\x25\x07\x19\x9a\xee\xcb\x25\x72\x81\xbc\xce\x4c\xbf\x40\x02\x87\xdf\x73\x75\x10\xfc\x2a\x9e\xda\x08\xba\x4e\xc9\xb7\xba\x8c\x7f\xb8\x65\xf5\xb0\x78\x5b\xdb\x03\xc9\x6f\xce\x0c\x50\xf9\xc8\xd6\xde\x3c\xcb\xbf\x3b\x5a\x2a\x80\xe9\x1d\x93\x3d\xec\x66\x28\xa8\x1f\x8f\x46\x98\xd2\x7f\x3c\xe0\xa2\x01\x88\x9a\x18\x72\xe9\x15\x89\x1e\x92\x28\x2a\x39\x79\x93\x6d\x34\xf1\xaf\xa4\x57\x56\xbf\x44\xbb\xeb\x07\x75\x40\x17\x42\x4a\x99\xda\xf9\xc5\x23\x64\x78\x60\x5c\x90\xd6\x27\xeb\xd3\x30\xc7\x75\x01\x4a\xfd\x11\xc5\x1e\x7e\x00\x30\x50\x49\xfa\x34\xfc\x28\x4e\xc2\x4b\x2a\xab\x70\x8e\x61\x05\xc8\xaf\x52\x73\x39\x5f\xb2\x1c\x34\x63\xad\x96\x93\x6b\x6e\xd3\xb3\x62\xf9\xa6\x3f\xc4\xe3\xdb\xc1\xb5\x0b\x9c\x4c\x65\x0e\x16\xd3\x03\x09\x9e\x15\x04\xcd\xc9\x78\x93\xe7\x6c\xa4\xa7\x18\x2a\x62\xf1\xb7\xba\x18\xd6\x8f\xa3\x4b\x9c\x64\x8a\x0c\x4b\xb3\xdd\x71\x63\x4a\xb0\xf8\xa4\xd6\x7f\x6e\xb7\xd5\x23\x5a\x45\x75\x5e\x15\x2f\x4b\xda\xc3\xcc\x77\xb1\x52\x51\x9b\x7f\xac\x13\xde\x4d\x32\x3e\x9a\x9d\xa8\x1f\x89\x24\x56\x93\x38\x4d\xc3\xde\x08\xbb\x57\xac\xa5\xa9\xc5\x9c\x9b\xf2\x81\x32\xed\x41\xe9\x37\x7e\x02\xff\xc3\x80\x82\x84\xfa\x9c\xac\xe0\x0d\xe9\x77\xee\xf0\x64\xad\xf4\x19\x5f\x6f\xa8\x7e\x51\xd6\x62\x9a\xa7\x94\xbd\x10\x59\xc6\x1b\xf0\xef\x9c\x82\x62\x55\x6e\x98\xee\x5c\xf6\x1a\x4c\x84\xd7\x2d\x13\xec\x85\x85\x5c\xaf\x1e\x9d\xdf\x76\x4f\xd6\xec\x15\x24\x16\xde\xb2\x97\x10\x0b\x47\x02\x4a\xdf\xad\x1c\x4e\x70\x74\x72\xf2\xce\xa8\x56\xde\x99\x4c\x9e\x7e\xbb\xe0\x35\x0e\x67\xfb\x91\x5a\xae\xb4\xe9\x11\x5d\xc5\xe9\x62\xcb\x18\x39\xd7\x8d\xc9\x4a\x34\xdf\x40\x07\x37\x21\x87\x3a\x37\x70\x6e\x60\xcb\xbd\x32\x60\x57\x80\xdf\xe1\x20\xd4\xd7\x78\x01\x1c\x48\x02\x96\xd2\x0c\x60\x90\x3d\x0e\xe7\x5e\x94\x39\xc6\x51\x4c\xdf\x68\x0c\x90\xe5\xec\xc7\x45\xdc\xa3\xec\x92\xa6\xc8\x8b\x6b\x3a\xb6\xb6\x97\xd0\xb3\x67\x76\xdf\x0a\x6b\xf9\x95\x2c\xa6\xf9\x86\x5c\xae\x1c\x73\x6a\x39\x48\xd5\x49\x98\xbc\xa2\x4c\x9c\x62\x6c\x5c\x56\x55\x79\x09\xf4\xf5\x2b\x25\xd7\xbc\xce\x0a\x9f\xc4\x6b\x7e\xec\x35\x74\x34\x56\x39\x89\x52\xd9\xbc\x7b\x0d\xda\x0e\x5c\x6d\x88\x9f\xf6\xdb\x0d\xd6\x73\x1b\x71\xda\x40\xb3\xe2\x22\x95\x31\xec\x5e\xea\x20\x16\x5f\x77\x88\x55\xe7\xbb\x97\x5c\xc4\x9b\x59\xee\xc7\xe3\x89\x9f\xc1\xf6\x52\x76\x19\xca\xdb\x82\xb6\x89\x49\xe2\x4f\xd9\x3d\xd1\xb6\xfc\x6e\x83\xdc\x7d\x19\x0e\xc6\xb4\xed\x13\x4e\xde\x0e\x42\x96\xa8\xcb\xc5\x1b\x15\xfa\x16\xc5\x4b\x73\xdf\x39\x6a\x19\x39\xd2\x92\xb2\x04\xf3\x2f\xb6\x40\x8d\x44\xdc\xd5\x2a\x90\x77\xb6\x63\x2c\xf4\xd7\x3c\xc4\x92\xe2\x4e\x55\xcb\x95\x14\xad\xc6\xd0\xde\x9f\xd5\x66\xed\x66\xa7\xde\xe9\xaf\x41\x62\x83\x4e\xbb\xd3\x6a\x0f\xda\x83\xf3\x2a\x57\xc5\x03\x68\xfe\x90\xf7\xc3\x71\x8e\x2c\x81\x82\x73\x2c\x1c\x87\x2f\x51\x37\x67\x64\x34\xac\xcd\xe2\x7b\x5e\xd1\x1a\x93\xfd\x95\x16\x15\x1e\xf9\x3a\xc9\xe9\xf4\xd6\x4b\x46\x8d\xd9\xc0\x17\xf4\x2d\xd6\xf0\xfd\x06\x70\x30\x85\x51\x6d\xe9\x4d\xfc\x24\xc5\x15\x65\xa1\x16\x5c\x4c\x26\xa9\xa2\xf8\xc9\xab\x59\xbd\x12\x48\x71\x44\x63\x78\xcd\x59\x74\x94\x30\x0c\x64\x8a\xd4\xab\x45\x10\xf9\x65\x9c\x74\x18\x66\x49\x21\x0c\x70\xa7\x38\xcd\xa8\x6d\x83\x3f\xb2\x2c\x50\x0d\xe6\x59\xed\x1c\x6d\x6e\xa2\x7c\xed\xa1\x9f\x7e\xd2\xdb\x3d\xab\xb3\x32\x7c\x4d\xba\x54\x50\x3b\x33\x7a\x81\x61\xb6\x8c\x54\x0e\x63\x2c\x7e\xad\x45\x66\xca\xd3\xf0\x50\xab\x5a\x60\x5d\x17\x5f\xb2\x23\x3a\x5c\x05\xe5\x30\xcc\xf2\x06\xfc\x09\x34\x50\xd3\x6f\xad\x8d\xe2\xca\xad\x4e\xbd\x53\x8e\x51\x58\x8f\x46\x8e\x63\x90\x27\x9d\x4e\x54\xd1\xbc\xf0\xae\x88\x2f\xc2\xab\xc4\x9f\x4c\x40\x8e\xf4\x33\xd6\xbc\xac\x32\x41\x3e\xd9\xe9\x53\xc9\x2b\xad\x70\xf5\x2a\xae\x3e\x86\x2b\x5b\xee\xf0\x63\xfb\x54\xd6\x81\xe4\xd6\x97\x3d\x42\xe8\xe1\x32\x7e\x91\x54\xcf\x75\x04\x72\x6f\x59\x67\xa9\x43\x68\x14\x50\xaa\x11\x07\x8c\xfc\x62\xc7\x72\x70\x2a\x0a\x11\xa5\x7b\x2f\x02\x42\x1b\x86\xa8\x26\x4d\x6c\x61\x50\x29\x76\xed\x40\xe6\x8d\x79\xd3\xdd\xc5\x43\x35\x57\x3e\x59\x8e\x3a\x05\xde\xe7\xac\x69\x6a\x83\xc2\x7e\xe7\x7e\xe7\x7f\x91\x18\x2e\xf6\x2d\x6c\xeb\xcf\xdd\xc0\xc8\xb2\xb4\x6b\x54\xcc\x65\x25\xfc\x2b\x4d\x6d\x84\xe2\x6a\xe9\x38\x85\x3d\x5c\x83\x79\x90\x1a\x5d\x9d\xf0\x4d\x1b\xf7\xc4\x6a\x73\x48\x03\x05\xca\x0e\x8b\x73\xac\xdb\x8b\xf5\x76\x21\x74\x16\x8a\x9e\xb3\x63\xb3\x5f\x97\xa2\x1b\xc4\xb9\xf3\x89\x2d\x00\x9a\xd5\x67\xd5\x10\x4b\x72\xcf\x0c\x11\x20\x81\x75\xf6\x36\x92\x49\x17\xfa\x97\xc3\x84\x2b\x60\x03\x0a\xb3\x37\x22\x1c\x57\x38\xe6\xba\xf6\xa3\xf2\xdb\x69\xd1\xa6\xad\xec\xaf\x66\x41\xae\x5a\xb4\x7c\x22\x64\x25\xfa\xb6\x12\x5e\x5a\x8a\x48\x3a\x42\x46\x2f\x66\x19\xaa\x15\xcc\x01\xc1\x85\xa8\x59\x4c\xe8\x03\xf3\x92\xec\x95\xa5\xb0\xa4\x0b\xd4\x2d\xac\x2d\xa5\x25\xbd\x20\x21\xbd\x81\xe5\xb8\x76\x53\xfa\xd8\xc2\xee\xa1\x53\x31\x71\x42\xf1\x25\x5f\xcb\xa0\x07\xdb\x9e\x64\x02\x10\x3b\x94\x76\xd1\x24\x3d\x42\x6a\xef\xbf\xe2\x3e\xa5\x05\x68\x11\x91\x8e\xbf\xc1\xde\x94\x47\x55\x9e\xcf\xa6\xb9\xf7\xbc\x85\x4d\x73\xb2\x63\x61\x14\x24\x8f\xfa\x5b\xb3\xec\xfb\x46\x51\xdf\x97\xee\x71\x4b\x71\xc6\x2e\x70\x44\x18\xf8\x06\xbb\x0a\xd3\x38\x48\xaa\x05\x79\x31\x69\x80\xe5\x9d\x82\xdd\x7e\xc3\xf9\x55\x46\x3e\xe7\x26\xb6\xe6\x18\xa7\x30\x37\x0c\x79\xf2\x94\x4d\x4c\x89\xba\x48\x87\x25\xdf\x9b\x24\x26\xa3\x28\x7c\xac\xdb\x84\x68\x62\x61\x6d\x8c\x95\xad\xe9\x63\xa5\xde\xbf\x80\x8e\xc9\x4f\xd3\xe9\x18\x07\xea\x7d\xa2\x3f\x4a\xb0\x1f\x5c\x4b\xfb\x9d\x72\x20\x9b\x46\x34\x6d\x65\x89\x88\x66\x8b\xb1\x3d\x3b\xff\x5a\xe8\xd0\x44\x18\x17\x98\xa8\x27\x29\x5e\x98\xd7\xbb\xf5\x45\xd3\x68\x51\x58\x7f\xa2\xc4\x6d\x90\x3c\x55\x21\x1d\x72\x2a\x40\x82\xf8\xed\x3c\xe0\xa3\xa1\x53\x92\x57\x0f\xab\x6c\x4b\xe5\xcd\x62\xd7\xc8\x8b\x70\x4e\x08\x1b\x6e\x13\x42\xd9\x93\xb9\x54\xf5\x8b\x0d\x54\xa8\x1d\x65\xd0\x0a\x94\xa2\x86\x66\xc2\x7a\x43\xf2\xd6\x6e\x22\x31\xef\xca\xe4\x73\x30\x80\xfb\x12\xfa\xdf\xe2\xcb\x92\x79\x56\x18\xe6\x85\xc9\x5b\x0a\x9d\xb4\x52\xee\x9e\x64\x9b\x80\x87\x3b\x7d\xd2\x18\x59\xcb\xfb\xbf\x70\x85\xc1\x84\xc5\x0b\x2a\xaf\x8e\xe5\x35\x98\xe5\x05\x7b\x00\x39\x85\x34\x03\x80\x8b\xbd\x42\xf2\x40\xe5\x98\xda\x56\x84\x11\xb3\xe4\x65\x76\x00\xcc\x64\xe6\x02\x47\x60\xcc\x5b\x0c\x4d\x44\x29\x77\x00\xa3\xa1\xb3\x8b\x61\x99\x3a\x03\x50\x61\x49\x42\xd2\x16\xea\xb4\xc0\xe4\x18\x3e\x70\xfb\xd9\xfd\x01\x8a\xc7\x21\x91\x11\x3c\xe4\xd3\x4f\x57\xe1\x68\x84\x7a\x58\x34\x18\xa0\xc4\x8f\x82\x78\x3c\xba\xbe\xa7\xc3\x3d\xb5\x9a\x60\xc3\xe4\xa1\xfd\x5f\x3c\x98\x52\xd2\xf8\x37\xe0\x42\x74\x92\x03\x93\x05\x49\xd4\xb8\x82\x67\xb8\x3f\xcd\x70\xe5\x19\x8f\x46\xf5\xcc\x63\x89\x3b\x3c\x66\xbe\xe5\x10\x8b\xee\x09\xba\x87\x9e\x91\xe1\x20\xff\xff\xcc\x7d\x66\xa6\x60\x64\xee\xc6\xa9\xd9\xe3\x24\xea\x31\xea\xa2\x8a\x4d\xbb\x51\x3f\x9d\x66\x36\xcb\x0e\x45\xf5\x0f\xce\xab\x24\x43\x89\x4c\xe1\x54\x3a\xad\x55\x23\xad\xb9\xc5\xad\x8e\x2e\x6d\x69\x5d\x9b\xd2\x0a\x8d\x37\x4b\x13\x0f\xe4\x0a\x5c\x11\xe3\x2e\x4f\x83\xcc\x16\xd2\x4d\x75\x85\x25\xf2\x96\xc6\x03\xf0\xb7\x06\xac\x25\xb4\x99\x15\x63\x00\x76\xd3\x86\x9a\x5c\x24\x83\x66\x0a\x72\x9e\x4c\x96\x8f\x39\x7a\x6e\xea\xb3\x95\xd4\xd0\x79\x0a\x67\xbb\xb3\xd4\x31\x13\xa5\x16\x3c\x8c\xe7\x47\x6a\x21\x45\xdf\x4e\xab\x6d\xd3\x0c\x28\x2a\xee\x80\xf1\x65\xce\xf2\x34\x96\xec\x09\x58\x0e\xf1\xeb\xf6\xfa\x70\x4b\x94\x38\xa1\x10\xb7\x7f\xb3\x69\xb8\x1e\x50\x3f\xfe\x76\x7b\xf7\x06\x91\xed\x93\x5b\x50\xda\x76\xe1\x5c\xca\xe3\xcc\xb6\x78\x8b\x5b\x48\x2b\x6e\xe9\xb0\xdb\xf9\xe1\x73\x30\xd8\x90\xb6\x67\x89\x42\x16\x54\x8f\x33\x97\xaa\x45\xf6\xe5\xef\x43\x5f\x5e\x28\x1d\x7c\x07\xea\x88\xbf\x88\xda\xdc\xb2\xf8\x4a\x69\x92\x9f\xf1\xa1\x76\x85\x95\x7d\xf8\x86\x3d\xf4\xc7\x03\x6b\xb0\xf3\xed\xe8\x1b\x29\x1c\xb4\xdd\x35\xce\x5c\xca\x5d\x9b\xec\x42\xc0\x13\xb1\x85\x8b\x2b\x12\xf6\x74\x78\x85\x8c\xc1\x9e\xe9\xb6\xe7\xf2\xee\xa4\x62\x2c\xed\x9b\xd1\xa5\x15\xd8\x62\x15\x0c\x56\xac\x21\x09\x9c\x8a\x79\x45\x5f\xe2\xbe\xce\x90\x03\x40\x18\xf3\xa3\xb6\x2f\xe9\xf1\x0d\x34\x0e\xc2\x19\x4d\x06\x02\x15\xac\x43\x2a\x9d\xad\xa9\x61\xa6\x02\xdd\xa5\x37\xb1\x9e\xf8\xee\xa0\x0f\xfe\x13\xf8\xf1\x3d\x2b\x88\xbf\x77\xc6\xfc\x3d\xea\x89\x6d\xcc\x70\x51\x45\xf1\x9d\x18\xe3\xbd\xa3\x68\x2a\x8a\xef\x8b\x71\x97\xd4\x13\x7f\x73\xde\xfd\xcd\x95\xc5\xdf\x7e\xab\xf0\x14\xdb\x1e\xc7\x09\xed\xfe\xf6\x8e\x52\xfa\x70\xf7\xfd\x85\x6d\xeb\x90\xc7\xb7\xe4\xee\x51\xa4\x20\xcf\x55\x79\x22\xd3\xa5\x9c\xd2\x92\xe5\xaf\xbc\x39\xf7\xda\xcd\xef\x35\x29\xe5\xbd\xe7\xa0\x5c\x34\xf7\xa4\x92\x73\xd2\x40\xcc\x4c\x3f\xa9\xa5\x9d\xe4\x15\x1d\x89\x27\x41\x3f\x9a\x03\x17\x3f\xd5\xe4\x93\x07\x7e\x36\xf4\x90\x25\x05\x65\x7e\xbc\x7e\x17\xf7\xfd\x11\x9a\xc4\xa3\xeb\x41\x38\x42\xf1\x00\xd1\x4d\x8b\x9d\xe2\x2d\x47\x5e\x16\xdb\x7e\x53\x2d\xa8\x35\xac\x30\x26\xf1\x7a\x97\xbc\xbf\x79\x69\xc6\x0e\x92\x6c\x2d\x7b\x9f\x0c\xa6\x06\x36\x82\xd3\x1e\x99\x41\x9d\x88\x77\x57\x26\x49\x9c\xc5\xe4\x13\xda\x24\xa7\x0f\xbd\x00\xab\x87\x36\x51\x84\xaf\x08\x02\xc5\x10\xa2\xe9\x68\xe4\x58\x28\x02\x83\x7c\x99\x48\xf1\x8e\x6c\x91\x3c\xf9\x9c\x14\x2b\xb9\x9d\x8a\xed\x77\x61\x2f\xf1\x93\xeb\x79\x3a\x72\x29\x3f\xa8\x13\x14\x64\x0b\x65\x5a\x4f\x22\x5c\xf0\x2e\xfb\x23\x14\x46\x43\x9c\x84\x4a\x00\x57\x25\xa2\x83\x9e\x67\xd4\x8c\x30\x6a\x4e\x67\x89\xb0\x7f\x3c\xc6\x30\xb8\xc7\x09\x3f\x83\xa1\x9f\x71\x84\x58\x28\x0f\x2a\x06\x19\xa7\x4a\x84\x8a\xe2\x00\x72\xb9\x2b\xbe\xc4\x49\x12\x06\x38\x45\x47\x54\x21\x12\xe2\x94\x32\xf0\xc9\x35\x0a\x23\x96\xcd\x38\x47\xa0\x44\x0b\x7a\xae\x86\xd3\x45\x01\x18\x32\x97\xa3\xdc\x22\x51\x03\xc9\x44\x1d\x5c\x9f\x52\x12\x56\xa4\x9b\x02\x93\x44\xd9\x5f\x2c\xc4\xa3\x60\x03\x3d\x83\x4c\x59\xcf\x74\xc3\x11\x7b\x9b\xe4\x6f\x8c\xb3\x61\x1c\x14\xfa\xc8\x4b\xa5\xf5\x18\xf9\x36\xc7\x33\x84\xcc\x70\x86\x14\x7d\xc5\x20\x9b\xcf\xab\x33\x88\xe1\xc4\xbf\x8a\xcc\x2f\x12\x23\x21\xc2\x42\x9e\x56\xcf\x65\x4e\xbc\x35\xbd\x18\xe3\xc8\x62\x3a\x4c\x76\x94\x62\x2c\x50\xce\x7c\xd8\xb9\x2b\x2f\x6f\x4d\xff\x60\x45\x80\x99\x49\x71\xd7\xaf\x50\x38\x96\x26\x76\x9c\x7e\xe0\x4d\x0e\xfd\xf4\xf0\x2a\x62\x64\x7f\x5d\x79\x46\x6a\x3e\xab\x0a\x9f\x27\xf2\x08\x9b\x20\x2f\x4f\x5e\xcc\xed\x07\xad\x55\x38\xdd\x96\x5a\xff\x4f\x3a\x9d\x10\x51\x2b\x0a\xb3\x15\x9f\x08\xa7\x6c\xeb\xf3\x93\x8b\x29\x19\x5d\xeb\x78\x20\x4b\x06\x85\x82\x71\xca\x3d\x6e\x93\x67\x29\xca\x39\x7a\x48\x95\xc2\x7c\xd2\xe9\x2a\x35\x21\xc8\x1d\x54\xf6\x03\xc7\xb6\x83\xb8\x62\x7c\x80\x13\x1c\xf5\x49\x03\x30\xce\x13\x7d\xbd\x1a\xc3\xc0\xe4\x62\x1b\x40\xe7\x3e\x83\x6c\xa9\x31\x6c\x4c\x75\x07\x56\x4a\x2a\x33\x4d\xaa\xf2\x9e\x46\x74\x1c\x60\x02\xe9\xaa\x35\x43\xa0\x6e\xf1\xf9\xc8\x33\xd8\x54\xaa\xe2\x1a\x8e\x88\xd2\x10\x52\x0e\x80\x54\xaa\x7f\x65\x5e\xc9\x23\x96\xa3\x4d\xc6\x36\xf9\x9d\xc5\x5c\x5e\x44\xcb\x15\x73\x3c\xb3\x11\x58\x72\x79\x9c\x6c\x73\xe5\xf2\x08\xea\xd2\x1a\xe1\xef\xd4\x75\xe2\xa4\x1a\x5e\xfc\x36\x64\x53\xe4\xae\xee\x98\x2b\x74\xc8\x98\x19\x4b\x12\x00\x24\x05\x26\xf4\x41\x80\xd2\x78\x8c\x69\xea\x29\x74\x35\xc4\x11\xba\x8e\xa7\x89\x30\xb3\xf7\x89\x38\x4b\x81\xdf\x73\xec\xdc\xbb\xee\x82\xba\xa3\x73\xd1\x5e\x86\x28\x03\x58\x59\x31\x47\x46\x0c\xfd\x2d\xb7\xbb\xb9\x68\x94\x9a\xd3\x6e\x3c\x21\xc2\xce\x24\x97\x7b\x98\xbc\x73\x07\x71\x4a\x02\x06\x1a\x26\x45\xa6\x1a\x83\x26\xf2\x9e\xa7\x94\xad\x4e\xba\x7f\x96\x95\x5f\x6e\x39\xee\xd0\x88\x72\x89\x2d\xfa\x67\x5d\xe3\x22\xe2\x21\xbf\x6c\x7b\xef\x8f\xc1\x68\x62\x4e\x3d\xc4\xb6\xea\xbc\x98\xbe\x59\xcb\x00\xab\x85\x5b\x2c\x99\xce\x33\xb9\xf8\x39\xda\x94\xda\x57\x3f\x2d\x90\xba\xc8\xb1\xc9\xee\xa0\xab\x38\x7a\x96\x51\xf9\x99\xbb\x3b\x4a\xc1\x0b\x47\x71\x3c\x41\x7e\x2f\xbe\xb4\x6c\x83\xc5\x5d\x7e\xc6\xa1\x3d\x73\x77\x18\xb8\xa8\x68\x55\xee\xa7\x78\x5b\x22\xaf\x56\xa9\xc5\x23\x0e\x27\xd0\x53\xb0\x7f\x59\x64\xdd\xd8\x36\xbe\xfe\x28\x8e\xf0\x03\x70\x3c\x80\x8b\x36\xf3\x3d\x04\x5e\x94\xd8\xc9\x48\xb1\xb9\x1b\x99\x9c\x8b\x44\x15\x8e\x38\x3f\xb5\xda\x93\xd9\xcf\xc8\xd6\xdb\xfd\x08\xf9\xe0\x79\xab\xc5\x22\x2c\x8c\x2c\x64\xc4\x79\x2f\x06\x61\x0b\x4f\x23\x8c\x1f\xd4\x70\x88\x69\x78\x11\x85\x83\xb0\xef\x47\x19\x0b\x28\x19\xd2\xde\x03\x48\xda\x8e\xed\x98\xfc\xab\xe4\x41\x4c\xcf\xca\xf2\x9b\x7b\x08\x1b\x63\x36\xaf\x93\x85\x23\x0c\xbe\x6c\x7a\x35\x67\xac\x91\xd5\x2c\x4c\x8c\x94\x76\x83\x31\x77\xd0\xf0\xbd\xa5\x7a\x91\xfd\xb3\x95\x8d\xdd\xb0\x85\x71\x68\xff\xcb\x03\x38\xab\xcd\x6a\xb5\x5a\xbd\xd6\xa8\x35\x3d\x54\x9b\xd5\x5a\xb5\x76\xad\x53\x5b\x3b\x7f\x30\xc0\x1e\xea\x94\x0e\xbd\xc2\xc2\xd7\xf1\x19\x31\x56\xec\x15\x73\x08\x86\xe5\xca\x1f\xe8\x7f\xbf\x7e\x85\x98\xbd\x9a\xa8\x31\x40\x15\x31\xbd\x3f\x6c\x5a\x14\x85\xf2\x1f\x40\x95\x8c\x86\xf8\xcf\xd2\xc6\xa4\x3a\x00\x4a\x1e\x23\x1c\x5d\x64\x43\x6a\x7a\xe4\xe4\x22\xe5\x63\xc6\xe4\x0b\x65\xb1\x48\x31\x3b\x51\x3f\x0e\x08\xbd\x63\xfa\x43\x27\x77\x78\x5d\x1c\xfb\x53\x10\x00\x8e\xfa\x2b\x7b\x78\xe6\x6e\x73\x5e\x00\x99\x52\xab\x7d\xe1\xe0\x2e\x39\xb1\x96\x88\xec\x62\x89\x6b\x30\x2f\xac\x8b\xa5\x8a\x32\x24\x1f\xb2\xc1\xfa\x42\xd1\x5c\xd8\x54\x38\x63\xb9\xf0\xa9\xfa\xfa\x15\xed\xe1\x59\x61\xf8\x96\x39\x04\xd4\xf7\x33\x1c\xb1\x3d\x5f\xa5\x20\x07\xf3\x77\x13\x92\x74\x0f\x9b\x0f\xf8\x29\xe3\x86\x12\x65\x42\x9a\xdf\x45\xef\x75\xcb\xe2\x52\x86\x36\x04\x76\x75\x1e\x3f\x43\xbc\x69\xb8\x53\x9a\x41\x49\x9d\x29\xd1\xc0\xce\x8b\x85\x23\x21\x03\xfb\xab\xc1\xb0\x2c\xbe\x8a\xd9\xd0\x17\xa1\x0e\x72\x12\x73\x97\x0e\xd3\x93\x9c\xc7\x28\x3c\xc7\x01\xfc\x44\x65\x49\x14\x7e\x5e\xc7\xe8\x54\x77\xe4\x8f\x27\x08\xcf\x20\x92\x64\x2f\xd4\x3b\x47\xef\x55\x49\x19\xf3\xb6\x81\xde\xa7\xf6\x6d\x41\x52\x14\xc4\xff\xe1\x08\x94\x0e\xf5\x89\x48\x1a\x61\xd8\x6a\x91\x9f\x21\x1f\x65\xe1\xd8\x22\x71\xdb\x42\xb2\xcb\xdd\x75\x27\x85\x90\x07\x87\x14\x45\x9b\x04\x3d\x36\x0b\x67\x21\x8f\x8a\x4d\xfe\x53\x69\xb4\xd0\x32\xaa\x84\x14\xe3\xe7\x68\xbd\x5a\x15\xd1\xb2\x9d\x52\x3c\x85\xa3\xf6\x78\x09\x85\x22\xdc\xf6\xd7\xcd\xbc\xe9\x57\xaf\x78\x1b\x96\xf2\xa2\xd1\x12\x82\xbf\x73\x5b\x92\xc7\x94\x2e\xae\x3b\x8d\xa9\x3b\xca\x7d\xd9\xee\x6f\x22\x73\xb0\xcb\x64\x0c\x36\xa9\x50\x6c\xb6\x4b\x9b\x2a\x9a\xb6\x1c\x2b\x7e\x18\xf9\x3d\xfd\xe4\x21\x1d\x00\xca\xb2\x53\x1a\x83\x83\x08\x81\x8a\x60\x18\x66\x77\x15\x05\xf3\xc5\x29\x56\x97\x83\x49\x91\xcf\x65\x43\xf7\x5a\x58\x93\x29\x47\xd9\xe2\x22\x39\x99\x8c\x9d\x61\x58\x44\xb5\x33\x01\x83\xc7\x99\xdf\x84\xa5\x43\xff\x80\xf4\x9b\x0d\x42\xfa\xa9\xc2\x17\x2c\x04\xaf\x88\x52\x9b\xe8\xc0\xcf\x86\x2b\x7d\x1c\x8e\xf2\x9a\xab\x68\x81\x88\x44\xf6\xf3\x6f\xa9\x9d\xc7\x61\x8e\x64\x1c\x7f\x6f\x6b\xf7\xc9\x8e\xbb\x32\x2d\x18\xe7\x5d\x95\x16\xe6\x9d\x73\x65\xb0\x70\x52\xa3\xb8\xca\xd1\xcf\xcd\x93\xf3\x8a\x49\x23\xcc\xfc\xbe\xe6\x34\xa9\x23\xf5\x16\x9f\x02\x49\x6c\x18\x84\xa3\x11\x0f\x3b\xcb\xdc\x24\xe0\xbc\x35\x5f\x28\xe1\x87\xb9\xc8\x76\xe8\x95\x41\x39\x5d\x7c\x4a\xcd\x32\x83\x54\x8a\x50\xee\xcb\xf8\xac\xc4\x11\x8c\xb9\x82\xd4\xdd\x27\x2d\x5a\x42\x26\x93\xc8\x7e\xc4\x92\xd9\x83\x79\xa0\x22\x5f\x13\xf5\x86\x7c\xfc\xf1\xca\x1d\x65\xfe\xe3\x15\xda\x24\xff\x3a\x12\xa8\x8d\x3f\x7e\x21\xdb\xcc\xac\xe9\x07\xb8\xb3\xde\xd3\xc3\xaf\x8b\x62\x7e\xfa\x19\xc9\x9c\xa3\xe0\x9e\xa0\xc4\xdd\x1d\x6d\xb5\x52\x9b\xbd\xa8\x75\x5e\xa0\xe7\xa4\x0b\x5f\x60\x4f\xdf\xdd\xdd\xdd\xad\xa2\x25\xfa\xe2\xe7\x9f\x51\x6d\x56\xaf\xc1\x76\x4f\x10\x70\x6c\xf7\xb4\x8b\x95\xda\xac\xd5\x69\xd7\x28\xb0\x2b\x1d\xd8\x55\x59\x60\x30\xbc\x38\x9d\x82\xa7\x4f\x05\xd0\x78\xf5\x8a\xd6\x44\x4b\x08\x46\xba\xb0\x3e\xab\xbb\xba\x09\x75\xd8\x5f\x71\xd9\xa5\x4d\x54\x5b\x69\x3b\xcb\xc0\x98\xb2\xa2\xcf\xa9\xbd\x0d\xa7\xb6\x2a\xfa\x19\xad\xb4\xd1\x7f\xa1\x3a\xda\x40\xcb\xf5\x32\x22\x8a\xc1\x39\x54\x71\xc3\x43\x49\xdf\xef\x0f\x31\xcb\xae\x33\x5f\xe0\x20\x35\x3f\x12\x7a\x4c\x2a\x15\x5a\x95\x1c\x95\x14\x24\xc9\x6e\x22\x0d\x86\xfd\x8a\x89\x56\xdd\x44\x1f\x93\x0a\x2d\x0f\x04\xb9\xd6\x5b\xb3\xf4\xe9\x2a\xcf\xe1\x53\x11\xe5\x73\xf8\xe8\x2b\xaa\x95\x0c\x6b\x1e\xe1\x2b\xc9\xd9\x09\x6e\x1d\x99\x02\x24\xe2\xe9\x7b\x9e\x68\x23\x69\x77\x3e\x65\x47\xfb\x79\x86\x34\x38\xea\x83\x21\x0d\xfd\xaf\xdd\x90\x66\x0f\xcf\x4c\x4d\x80\x0d\x1c\x29\xb8\x49\x81\xae\xd0\xdf\xe5\xe2\x6f\xea\xea\x8b\x21\x9e\x95\x56\x61\x94\x38\x79\x2e\x18\x55\xb3\x54\xeb\xf7\xc5\xc8\x87\x78\x66\x86\xd0\x64\xe3\x27\x1d\xed\xe7\x27\x12\xb2\x06\xce\xbc\xed\x31\xf5\xaa\xf4\xc9\x33\x5d\xf4\x18\x49\x67\xdd\x04\x34\xc4\xb3\xee\xd0\x4f\x4a\xe7\xd9\x4a\xe7\x1e\xe8\x20\x47\x5a\x48\x0f\x72\x57\x77\x3c\xc4\x71\xec\xd8\x1a\x07\xb0\x04\x48\xab\x9a\xab\x7d\xea\x9d\xaa\x8d\xdf\xd9\xaa\x92\x76\x6a\x83\xe2\xba\x0e\x06\x21\xc0\x7d\x8a\xc3\xa8\xf2\xec\xd9\x2d\x22\x6e\x4a\x14\x4e\xd7\xdb\x22\x9a\x1e\xbe\x52\x28\xe1\x96\x5f\x30\x0e\xe1\xe9\xcf\x97\x9a\xf8\x62\xa3\x36\xdb\x62\x3d\x96\x8f\x94\x49\xab\x2c\x96\x28\x85\xd6\x79\xc7\x8f\x2e\xf4\x91\x1d\x65\x16\x59\x35\x57\x8b\xa4\xa6\x93\x1b\x65\x5b\x68\xa3\x20\x3f\x26\x5d\x2d\x4d\xd0\x4c\x40\xa7\xf7\xa3\x8c\x75\x76\x25\x9d\xf6\xd2\x2c\xa9\x84\x1e\x6a\x54\x3d\x48\xc2\x97\xab\x2c\xc8\x8a\x5a\xaf\xda\x1c\x70\x17\xde\xf3\x94\x61\x5a\x45\x8d\xb2\xee\xb3\xef\xfc\x2c\x8c\xea\xe5\x36\x2d\x56\x96\xef\x5b\xe2\xf1\x76\x5b\x17\xab\xfe\xe7\xed\x5e\x65\x11\xb8\xaf\x35\x35\x82\xf6\xec\x7b\x18\xc5\xe5\x3f\x6a\x1b\xa3\xc3\xf1\x1d\xef\x64\x12\x82\x74\x47\xa2\x53\xb7\x32\x48\xe2\x31\x79\xdb\x8d\x03\x0c\x9b\x54\xd9\x0d\x49\x06\x78\x87\x3d\x49\xa1\xdb\xdb\x6f\x4b\x82\x1c\x17\x5a\x0c\xdf\xf5\xe6\xc4\x56\x11\xdd\x9f\xe4\xe5\x56\x7e\x8b\x12\xb5\x16\xdb\xa5\x44\x35\xb1\x51\x89\x37\x0f\xbd\x57\x69\x4d\xcf\xcb\xe5\x1c\x4a\x5a\xf4\xbc\xb7\x2b\x7d\x46\xd0\x5b\x59\x25\xe4\x6b\x42\xdf\xaa\xec\xba\xc5\x85\xb7\x2a\x0d\xe1\xb2\x3b\xd5\x87\xd3\xdd\xe5\xf5\x72\x1b\xd5\x87\x6c\xb0\x2e\xb6\x29\xf6\x70\xbb\x4d\x8a\x36\xfa\xe7\xed\x51\x25\xdb\xbf\xaf\x95\x35\xcd\x06\xeb\xf6\x0d\x8a\x8c\xe2\x43\x6e\x4f\x59\x72\x5d\x60\x60\x14\x60\x72\x44\xff\x70\xbc\xdf\xe5\x9e\x4e\x15\x9c\xf6\xfd\x09\xae\x14\x6c\x9c\x26\x5b\x46\x7d\x3f\xeb\x0f\x51\xc5\x4c\x1f\x0d\x28\x0c\x93\xf8\x0a\xe8\x16\x32\xae\x54\x9e\x1d\xf8\xa3\x41\x9c\x8c\x71\xc0\xa6\x21\xf0\x33\xdf\x4c\x41\xb7\x38\x03\x97\x27\xf5\xf6\xfc\x9b\xcd\xd5\x22\x64\xf2\x5d\x33\x6f\xa0\x30\xca\xba\x73\x32\x2c\xcf\xb8\x59\x1d\x97\x31\x80\xb2\x35\x4c\x23\x46\x3d\xd4\x42\x40\xa1\x2b\x0e\xa7\x5a\x3a\x00\x8d\x48\xc1\x0b\xb9\x30\x71\xc0\xb2\x99\x49\x5e\xe8\xce\x4c\xbc\x92\x9d\xec\xb5\x94\x12\x6d\x3c\x4d\x33\xd4\xc3\x28\x24\x23\x3a\xc6\x51\x46\xf3\xac\xf9\x70\xbd\x9e\xe0\x4c\x78\x2c\x94\xca\xed\xab\xe5\xe9\x54\x95\xfb\x34\xc7\x21\x75\xad\xca\x13\xc4\x7f\xc6\x93\x0c\x4d\xa3\x09\x4f\x1a\xa8\x66\x07\x95\x6c\x5a\x6a\x16\xee\xfb\x9a\x8d\x03\x64\x1a\xdc\x12\xa3\x20\xbc\xc4\x5c\x9f\x4b\x9a\xc1\x41\x76\x57\x66\xcd\xa3\x8d\xf4\x33\x96\x44\x9b\x25\x31\xcd\x62\x14\x66\x29\xf7\x8a\x41\x84\x82\xef\x7a\xc7\xd4\xb3\x22\x4f\x13\xe2\xba\x2f\x99\x4a\x65\xdd\x65\xe6\x7d\x08\xac\x94\x6d\x36\x03\x90\x81\x93\x79\x2a\x6a\x3b\xab\xce\x94\x68\xf9\x68\xdb\xcf\x7c\x2e\xac\xd7\xca\x4a\x9a\x5b\x41\x90\x42\x1b\x3c\x2f\xb8\x63\xa4\x19\x2d\x94\xdf\x14\x45\x90\x05\x23\xf3\x38\x33\x76\x41\x74\xcd\x33\x27\x00\xca\x2f\xa9\x4f\x89\x2f\x59\x50\x52\x7b\x62\xe0\x78\x0f\x33\x99\x1f\x29\x3a\x95\x67\x26\xbf\x2f\x55\x6f\xfe\xde\xc8\x4a\x96\x49\x66\x6e\xba\xd7\xe7\xe9\xe8\xe4\x80\xa2\xd2\x00\xb1\x60\xa2\x2a\x28\xd9\xc7\x19\xc8\x68\x4e\x9c\x48\x46\x6b\x12\x53\x06\x0c\xe7\x47\x4a\xdb\x82\xae\xb9\xc8\x97\x9b\x12\xd9\x80\x19\x44\xbb\xb4\xa9\x26\x49\x2f\x4b\xc1\x3c\xd7\x69\x8a\xfc\x4b\x3f\x1c\x41\xc4\x2e\xca\x17\x80\xd9\xb9\xa9\xe6\x54\x72\x56\x09\xa3\xcb\xf8\x33\x4e\xf5\x24\xc3\x15\x96\x1c\xd8\x43\x57\xc3\xb0\x3f\xb4\xb2\xea\xde\x75\x01\xab\x36\x5b\xe5\x0b\xa5\x17\xc7\x23\xec\x47\x37\x28\x88\x77\x47\xd3\x74\x88\x7e\x1d\xe2\x8c\xc6\x33\xe1\xb9\x68\xc1\x5d\x6b\xe2\x27\xc0\x28\xd8\xab\x9c\x6b\x0b\x76\x7d\x8b\x70\x20\x82\xd3\xc3\x88\xdf\x7d\x9b\x17\x00\xb7\x29\x21\xb9\xd6\x0c\x4f\x95\xeb\x8a\xcb\xb1\x20\x18\x7b\xa6\x60\x35\xd6\x2a\x2d\xaa\x2c\x3e\x3a\xe0\x0b\xea\x4c\xd8\x12\xc9\x89\xdb\xa2\x2d\x21\xaf\xb9\x71\x1a\x8c\xac\x4b\xad\x42\x3e\x4a\x86\x66\x2e\xba\xe7\xc5\x73\x59\x61\x53\x4b\xc9\x5c\x54\x98\x43\xcf\x6b\xdb\x23\xfa\x75\xe3\x69\x94\x71\xfa\xb2\x30\x13\x02\x34\xa2\x89\x84\x8f\x21\x6e\xf1\xa6\x8a\xff\xaa\xd6\xe4\x4b\x93\x17\xb9\x86\x9c\x61\x70\x1c\x4f\xa3\x00\x4d\x27\xd4\xa1\xb0\x3f\x9a\x06\x58\xa3\x7b\xb3\x9a\x86\x51\x6e\xe4\x22\x7f\x28\x1f\xdb\x56\x60\x11\xc4\x57\x91\x8c\x47\x1c\x8d\xae\xd1\x60\x2a\x16\xa5\x25\x92\xfe\xea\x2a\x1a\xe1\x94\x3a\x55\xda\x65\x2d\xe0\x1b\x09\x1e\xfb\x61\xa4\x0a\x57\xe5\xfa\x35\xf6\x67\x15\xa5\x5f\x70\x71\x8a\x96\x6d\x99\xd9\xbd\xf9\x57\xaa\x62\xce\xa9\xe6\xc1\x35\xe5\x40\xc9\x1c\x0f\xa5\xf5\xe7\x48\x22\x40\x17\x3d\x01\x6d\x38\xc9\x89\x7c\x55\xfb\x18\x46\x15\xb9\xc9\xe7\xa8\xe5\x29\x74\x66\x33\x9f\xe4\x19\xbc\x6d\x44\x42\xe8\x4e\x02\x58\xec\xb6\x45\xf9\x3c\x55\xb3\xb0\xdf\xaf\xe4\x11\x10\x6f\x97\xa4\xf5\xe4\x34\x9a\x20\x98\xe1\x84\x9c\x26\xc5\xc6\xb0\x9c\x1f\x10\xc0\x19\xd2\x5e\x91\x71\x17\x75\x0f\x12\x5c\xc5\x96\xab\xde\x35\xc7\x48\x49\x81\x95\x33\x7c\x98\x72\xb3\xa8\xc2\x7d\x65\x16\xa6\x27\xc3\x92\x47\xd4\x82\x86\xc2\xc9\xd0\xf2\xa6\x3c\xd3\xf3\xa9\x92\xc7\x16\x2d\xc2\xd6\xad\x70\x52\xf1\xf7\xe4\xa6\xef\x6a\xec\x56\x3a\x0b\x65\xa1\x93\xd7\x1d\xad\xdc\x1c\xbb\xe1\x9f\x64\xf2\xf6\xd1\xd8\x10\x73\x4c\xac\x33\x56\x68\xf1\xa6\xf2\x30\x71\xd2\x74\x64\xa2\xe7\x67\xf0\xa1\x9f\x42\x86\x5c\xe7\x89\x7b\x6e\x2a\xf2\x9c\x5d\xcb\x3e\x50\x74\xd2\x19\x74\x1a\x76\x0d\xa7\x28\x8e\xa4\xa3\x70\xbd\x83\x2a\xed\x7a\x03\x2c\x59\xab\x96\x63\xf1\x1e\xad\xcc\x8f\xc1\xe2\xd1\x7e\x1e\xbe\x97\xa8\xaf\x45\x19\xc8\x0a\x03\xa6\x16\xb9\x9a\xd1\x41\x58\x20\x27\xf9\x6d\xa3\xdb\x91\x86\x10\x0d\x91\x3c\x2f\xc8\x5d\x69\x1b\x12\x31\x07\x4a\xe8\xb6\x93\xbd\xad\x46\xbb\x63\x77\x12\x2b\x4a\x75\x7d\xeb\x08\x6b\x3c\xb6\x5a\xf9\x30\x6b\x27\x58\x84\xf7\x70\x6b\x08\x4c\x35\xc4\x1c\x4b\xec\x5c\x93\xc2\x17\xce\xfd\xab\x4c\x18\xbd\xdc\x87\x8a\x04\x10\x96\x55\x3c\x6a\x09\xc7\x4a\x02\xd0\x0a\xf3\x32\xa5\x06\x7d\x6f\x66\xc3\x61\xd9\x98\xf9\x86\x7c\xbc\xd8\x58\x7f\x98\x04\xc0\x32\xe4\xc1\xa6\x69\xf9\xcb\x67\xec\x73\x46\x10\xa6\xc0\xf5\x38\xc2\xa5\x5d\x88\x28\x2b\x62\xfe\x43\x73\x97\xf7\x02\x73\x3e\x05\xbc\x2a\xcf\x18\x52\x36\x5d\x8a\x5a\x72\xbe\xea\x84\x16\x94\x09\x45\x19\x03\xc7\x7a\x74\x68\x24\x98\xc2\x46\x85\x60\x21\x0f\x36\xbe\x44\x48\x27\xf8\xda\x40\x49\xe7\x58\x53\xfc\xbd\x37\xdf\x89\x5d\x96\xe4\x26\x15\xb8\x38\x19\x24\x7a\x1f\x03\xca\x7e\x46\xf3\xc5\xb3\x9a\x79\xcc\x50\x14\xa6\x08\x0f\x06\xb8\x9f\x85\x97\x78\x74\x8d\x7c\x14\xe0\x34\x4b\xa6\xf0\xec\x81\x9c\xbe\x1c\x47\x7d\x5c\x2a\xca\x68\x49\x0a\x55\x12\x3d\x00\x4a\x79\x40\x6e\x28\xb1\xb8\xe6\x82\x0c\xc2\x3d\xed\x0c\x68\x93\x93\xa3\x48\x26\xe4\x50\x4b\x38\x4a\x17\x11\x7a\x41\xb5\xf9\x54\xcf\x8b\x2e\x44\xf7\xbb\x96\xf1\x35\x0f\x44\xc5\x60\xd0\xbc\xb5\x32\x4f\x80\x5f\x80\xb3\x4a\x23\xc4\x99\xec\xae\x34\x0f\xd6\xc5\x43\xca\xbb\x16\x8f\x94\xfc\xae\x5d\x6f\xac\x36\x1b\xe5\xc4\xfc\x94\x69\x7c\x94\xf8\xf7\x3e\x9b\xb4\x67\x22\x70\x52\x18\x65\x38\x19\x48\xd6\xc2\xc8\xb9\x2a\x38\x7f\x65\x5d\xe7\x54\x4b\xb7\x5b\x16\x1f\xd1\x47\x43\x3c\x9a\xe0\x84\x88\x3f\x25\x16\xc1\x2e\xc3\x8d\xf9\x06\xeb\x28\x7f\x83\x7b\x3c\x2a\x33\xe9\x4e\x15\xb4\xab\x2b\x1f\x69\xaf\xf6\xa0\x4b\x15\x9b\xb0\xe5\xd6\xcf\xc9\x55\x15\xe3\x41\x00\xed\xba\xdf\x33\xd6\x85\x3d\x00\x2e\x52\xcf\x8b\x6c\x25\xc2\x61\x51\xcd\x22\x96\x67\xb8\x54\x29\x7c\xf1\x63\xa3\x95\x9e\x08\x4b\xde\x3b\xd8\xea\xde\x3f\x3d\x11\x11\x9a\x07\xa5\x20\x2d\x30\xba\xfa\x4b\xd0\xd4\xde\xd8\xef\x97\xa2\xab\xb1\xdf\xbf\x0b\x6d\x89\xea\x77\xa2\xaf\xcf\xd8\xae\x42\x92\xe8\xab\xfb\x11\xd0\x22\xf3\x40\x89\x8c\x36\x42\xeb\x2e\x46\x6c\x85\xc7\x5f\xa1\x49\x9a\xe3\xc3\x40\xb0\x01\x27\x06\xf6\x23\xf7\x62\xe0\x99\x5a\x20\xa4\xef\x81\x9f\x0d\x69\x58\xdf\x27\xfc\x3d\x1b\xe6\x97\x79\xa4\xdf\x9b\x73\xaf\xdd\xfa\x5e\xc3\xfb\x32\x64\x2a\x3c\x1c\x71\xf5\xde\xe3\xfd\x72\xc8\x8b\xc6\xfd\x15\x18\xca\xf1\x7f\x5d\x41\x7f\xc5\x77\x08\xfe\x6b\x0b\xa0\x6b\x5e\x51\xf0\xa8\xb1\xf9\x94\x49\x04\x20\x45\x83\x95\xde\x17\x84\xa7\x51\x6a\x4b\x2e\x30\xae\x30\xb2\x9d\x56\x39\x13\x2d\x56\x96\x1b\x69\x89\xc7\xdb\x99\x69\xb1\xea\x7f\x9e\x9d\x56\x59\x04\xee\x8b\x53\xf6\xa0\x3d\xbb\xa9\x16\xc5\xe5\x6f\x60\x4b\x6c\x94\x1f\xfb\x13\x21\x1c\x8e\xfd\xc9\xe2\xb1\x17\x2c\x2e\xe2\x26\x08\x97\x55\x26\x1d\xf3\xdb\x1a\x2c\xa3\xa5\x4d\xd4\x74\xdb\x2c\x5f\x67\xb8\x6e\x31\x5a\xa6\x7f\x2e\xd3\x65\xfa\xe7\x34\x60\xe6\x80\x1b\x39\xe0\x4a\x88\x96\x50\xbd\x6a\xb1\x89\xe6\x5f\xca\x58\x46\x73\xc0\x4d\x0d\x70\xc3\x09\xb8\x61\x05\x6c\x87\x9c\x25\xe1\x64\x04\x57\x2f\x15\x3a\x2c\xaf\x5e\x81\xdf\xc4\x57\xfa\xdc\x20\xcf\xeb\xe4\x11\x50\xb0\x41\x11\x53\xf1\x89\x4e\x45\xe5\x13\x7a\x45\x5a\xff\xe9\x27\x04\xd8\x7c\x42\xcf\x51\x6d\x65\xad\x2d\xcd\x50\xf5\x25\xfa\x54\x10\xee\x42\x9a\x7b\x6a\x0b\x3e\xf6\x27\x60\x33\xbb\x95\x55\x2a\x1c\x61\xe8\x74\x07\x3d\x47\x95\x26\x5a\x46\x9f\xaa\xac\xa7\xcd\x81\xd5\xdb\xc9\x88\xcf\x60\x2a\x2e\x82\x80\xa7\xfb\x36\xa9\x91\x7d\x20\x28\xa1\x4d\x24\xa1\xd3\x31\x9c\x49\x20\xb6\x5e\x5e\xdc\x6e\x1c\x3c\x0c\x47\x18\x55\xe4\x7e\xb2\x70\x01\xae\x58\x23\xd6\x61\x91\x9b\x59\xbc\xcf\x8c\xb3\xca\x50\xef\x60\x27\xaf\xf0\xe4\xdb\xdb\x59\x0a\x56\xbb\x10\xa3\xff\xae\x4d\x2d\xd9\x0e\x41\xed\x7a\xe4\xad\xa4\xbc\xb9\xa5\xa8\xb5\xe0\xe6\x20\xea\x09\x43\x79\xf1\x46\x18\xca\xcf\xe7\xfb\x46\x89\x04\x5f\xe2\x24\xc5\x07\x52\xc1\xfc\x95\x2d\xae\xd9\x0f\xf9\x67\x27\x75\x17\x02\xb5\x6d\x01\xfc\x4f\xe7\x3f\x84\xfd\x90\x15\xca\x3a\x58\xc8\x69\xd4\x86\xcf\xf8\xc2\x66\xb6\xf9\x9f\xaa\xe7\x68\x13\x7d\x2a\x17\xab\xd3\xc2\x52\xf6\x2f\xa2\x38\xc1\xdf\x8c\xab\x48\x20\xf7\xa3\x00\xfc\x9c\xf3\xe9\x0e\xc9\x9b\xc3\xc1\x3c\x9e\x21\xb5\x43\x61\xfc\xb0\xb9\x89\x96\xeb\x73\x78\x92\x4c\x61\x72\xed\x5b\x31\x62\xab\x48\x90\x88\xb4\x97\x29\x7e\x17\xc7\x93\x7c\x49\x78\x3a\x0e\x9e\x34\xa3\x8a\xc8\xa1\xdd\x78\xfa\x93\x0d\xf4\x6c\xeb\x75\x77\x7b\x67\xf7\xcd\xde\xfe\x3f\xdf\xbe\x3b\x78\x7f\x78\xf4\x7f\x8f\x4f\x4e\x3f\xfc\xf2\xeb\x6f\xff\xfa\x1f\xbf\xd7\x0f\xf0\xe0\x62\x18\x7e\xfa\x3c\x1a\x47\xf1\xe4\x7f\x93\x34\x9b\x5e\x5e\xcd\xae\xbf\xd4\xea\x8d\x66\xab\xdd\x59\x5b\x7f\xb1\xb4\xba\xc9\x22\xdc\x8a\xa3\x9d\x58\xb4\x0b\xa3\x9a\x0f\xb1\xc3\x2b\x25\xb7\xdc\x50\x2c\x4c\x6d\xa2\x90\xd6\x8e\xcd\x4d\x85\xcc\x74\xe8\xd8\x6f\x98\x63\x57\x4a\x84\x24\x69\x79\xe4\xd4\x24\x3b\xb0\xa0\x65\x54\xaf\x9e\x83\xf7\x4a\x2e\x30\x35\x4c\xe2\xe2\x40\x1b\x65\x80\x56\xcf\xf9\x06\x2f\x8b\x61\x16\xa8\x54\x20\x8a\x94\xc8\x3d\x5f\x89\x30\x03\xe8\x7f\xa5\x2d\xca\xbe\x35\x51\x71\xf0\x1e\xc4\x86\x78\x69\x49\xf9\x20\xc8\x56\xfc\x60\x14\x69\xc4\x96\xb4\x86\x45\xb8\xc9\x73\xf7\xe8\x87\x7c\x69\x8f\x78\xe9\xcc\xec\xd3\x7e\x3c\xfa\x3f\x1e\xfd\xc5\xd1\xff\xc3\xe9\xee\x72\xbd\x83\x5e\xef\x94\x76\xd0\xaa\x77\x5e\xef\xc8\x3e\x5a\xf5\x8e\xfa\x04\x5f\x6f\xef\xb4\x45\x91\xf9\x73\x1d\xb7\x4a\xe2\x70\x8f\xce\x5b\xf5\x8e\xd3\x7b\xab\xde\xf9\x1b\x68\x04\xca\x1f\xd6\x61\x30\xee\x72\x56\xb7\xfb\xfb\x83\x65\x54\x1c\xe0\xa3\x38\x8c\x32\x97\x93\x71\xbd\xe3\x70\x32\xb6\x1e\xa6\x73\x4c\xdd\x5e\xc6\xa2\xc9\xb2\xae\xc6\x12\xd0\x3b\x9c\xa0\x74\x22\xbe\x93\xb3\x1a\xd0\xe6\xa2\x6b\xe3\xbb\x3e\x46\xd1\x55\x25\x5c\xd6\xf8\xe2\x5b\xc8\x67\x0d\x2a\x2d\xe6\x6b\xcc\x6b\x09\xf9\x96\xbf\x78\x68\x4f\x63\xb5\xe1\x72\x8e\xc6\x75\x90\x7d\x04\x86\xaa\x9b\x31\x11\x81\xf2\xc5\xd2\x20\x8b\x45\x0b\xc2\xe6\xa6\x70\x97\x94\xa3\x8d\xce\xf3\xf2\xa1\x30\x18\x59\xbe\x2b\xb1\x87\x49\xfb\xd4\xbb\x3b\xef\x53\xef\xbe\x83\x7d\xaa\x0c\x0e\xf7\xbd\x4f\x59\x97\xd3\xbb\x9d\xc7\x6d\x4a\xfc\xdd\xdb\x36\x95\x5e\xf9\x93\x9d\x28\x08\xfd\xa8\xb2\xe8\x8e\x65\x3b\x92\x7f\xff\x5b\xd6\xbb\x87\xd9\xb2\xca\x2c\x93\xef\x7f\xcb\x7a\xb7\xa3\x6d\x5a\x8f\x3b\x96\xb1\x63\x49\x2b\x66\xa1\xcd\xeb\x9b\xee\x5e\x62\x5e\x24\x6c\x09\x20\xa5\x8f\x3c\x1a\x3e\x7c\x61\x77\x27\x74\x71\xd7\x6a\xe4\xff\xe1\x62\x85\x7e\x24\xdd\x67\x5f\xe9\xb7\x7c\xf9\xcf\x53\x17\x00\x61\xb9\xb5\x05\x9d\x3b\x69\x0b\x58\x8e\xda\x6f\xa9\x34\xf0\x90\xf4\x2a\x1d\xfa\x75\xed\xd5\x70\xec\xf7\x1f\x50\xb5\xe0\x21\xde\x2c\xfc\x82\xd6\xfe\x0e\xea\x06\x23\x5f\xec\x2d\x54\x11\x8a\x11\x8b\xf4\xe5\x60\xbb\x0d\x35\xc1\xe4\xe6\x60\xbb\x6d\x93\xf1\xc0\xc4\xf9\x33\xbe\xa6\x59\xb0\xa9\x1d\xac\xe8\x2b\x38\xff\xfa\x51\xc6\x93\x78\xc7\xc9\x98\xda\x68\xef\xfc\x72\xf4\x11\x36\xdd\xd3\xf8\x2d\xce\x85\x41\x74\x75\x75\xb5\x12\x4f\x70\x94\xa6\xa3\x95\x38\xb9\x58\x0d\xe2\x7e\xba\x0a\x49\xb8\xe3\x55\xad\xce\x30\x1b\x8f\x2c\x8a\x90\x9d\xcb\xc9\xdb\xed\xdd\x1c\x6d\xf1\x5c\x32\x18\xc2\x7c\x1f\x10\x6d\x8f\x33\xbc\x5f\x58\xca\x73\xd8\xa3\xc8\xc0\xa4\xe4\x21\x8c\xb8\xdb\x8b\x14\xee\x39\x77\x75\x69\xa1\x4a\xbd\xb1\xae\x78\xba\x18\xf0\x1d\x46\x6a\x72\x58\x0c\x3d\x41\xca\xc1\x76\x7b\x1e\xb6\x61\xc6\x6c\x91\xf5\x20\xd5\xd2\x87\x2c\x46\x13\x6a\x75\x2a\x7b\xe7\x38\x76\x38\xc3\x2f\x46\xdb\x1d\xd8\xf0\x6c\xa0\x7a\x63\x1d\x4c\x48\x95\xaf\xb4\x73\x80\xb9\xf6\x25\xc7\x47\x69\xfb\xe6\xd6\x6e\x37\x0e\xa2\x7d\x68\x3f\x1c\x2c\x35\x7a\x0f\x66\xd6\x9f\x83\x81\xe1\x7d\x43\x69\x7e\x4e\x8a\xa6\xf9\x15\xff\xc8\xe7\x6a\x5d\xcb\xe7\x77\x5b\x30\x9e\x3a\x8d\xb5\x5a\x4d\x07\xbc\xa0\x77\xd0\x5c\xbf\x9f\x72\xf2\xee\x36\xa4\xf0\x27\x34\x42\xa8\x02\x12\x61\xfb\x90\x81\x95\x2c\xda\xdb\x58\xe9\xf3\xba\x34\x16\x80\x0d\x50\x41\xe5\xd4\x1f\x65\x68\x0b\xfe\xb3\xb8\x58\x0c\xd4\x45\xc9\xfb\x3e\xc8\x0b\x93\xcd\xe3\x73\x30\x58\xa1\x6e\x11\xb8\xc2\x3b\xe3\x01\x7e\x05\x79\x6b\xa0\xb8\x92\xdf\x51\xad\xb9\x90\xc0\xab\x4e\xb1\x45\xbc\x25\x2b\x9d\x71\x0f\xb3\xb6\xf0\x52\x23\xe4\xc1\x4c\x94\xf3\xd5\x61\x85\xe5\x72\x0b\x83\xd0\x02\x74\x88\xdf\xc2\xd8\xd8\x52\xa2\x2d\x72\x46\xce\x81\x09\x9f\x60\xf1\xc6\x79\x5c\xe6\x7b\x0c\xed\x11\x7b\xb2\x94\x93\x98\x38\x2d\x9a\xbf\xb0\x60\xf9\x86\x6d\x4c\x04\xbc\xfa\x91\x19\xb3\x68\xb8\x72\x83\x96\x57\x1c\x1f\xeb\x51\x80\x88\x71\xe0\x39\xe0\xbc\x60\x56\x5d\x96\x68\xd9\xf9\xd7\xca\x48\x0e\xc6\x90\x3b\x81\x30\x28\x9c\xd8\x24\xa3\x60\x83\x5e\xd5\xe6\x85\x3f\x9d\x59\x82\xd0\x84\x18\x38\xf3\xb3\x72\x50\xaa\xd3\x83\x92\x34\xd0\x85\x69\x7f\x34\xec\x05\xb2\xce\x51\xb0\x61\x6c\x19\x2a\xf3\x9d\x44\x56\x2c\x66\x8c\xb5\x0d\x6d\x94\xa5\x5a\x92\x8e\x86\xd3\x9f\x25\xda\x85\x08\x30\xc7\xeb\x95\xb5\xb9\x2e\xc5\x83\x65\xbf\xe3\x5b\xf1\xde\x05\xf9\xee\x3d\x7a\xdf\x5a\xfc\xca\xa4\xde\x94\xe7\xe6\x52\x25\x45\xbb\x21\xbd\x57\xb9\x7b\xfe\x01\x29\x5c\x5d\x6c\xda\x74\xbf\x76\x71\xf6\xc5\xaa\x79\xc8\x21\x36\xdc\x05\x4c\xa1\xd8\x20\x54\xc8\xb9\xac\xef\xda\x73\x4c\x17\x16\x36\xec\xaa\xc4\x02\x8e\x2b\xc5\xfb\xdd\xcd\xcb\x82\xe3\x3b\x85\x66\x3f\xbb\x7b\xfc\xf0\xb9\xd1\x5e\xf7\xf8\x91\x74\x63\x6d\x8d\x9c\xe9\xd7\xfe\xd2\x67\xfa\x7e\x38\x19\xe2\x64\xf9\x81\x4d\x04\xe0\xf4\x2e\x37\xf5\xe7\x1c\xe2\xcd\xcc\x9d\xf7\x72\x9a\xef\x42\xc7\x8e\x08\xc7\x49\xc5\xa1\x5d\x7e\xe9\x36\x21\x10\xef\xb5\x4c\x18\x4a\x0d\x72\x86\xf3\x33\xa8\x44\x7f\x72\x46\xcc\x2a\xee\xc2\xcb\x8c\x45\x55\xa0\x45\x16\x48\xa7\x41\x4e\x37\x74\x6e\x32\x3c\xcb\xc8\x29\xd2\x67\xcf\x68\x42\xfb\xc4\x7c\xb3\x78\xaa\x0d\x3f\xc0\xfd\x70\xec\x8f\x46\xd7\x2c\x0d\x68\x50\xfa\xe6\x46\x1e\x95\x1b\xd6\x0a\x1b\xb8\x53\x81\x86\xda\xec\xe2\xc9\x38\x6e\x83\xdf\x83\xa6\xe7\xc8\xa7\x44\xba\xd5\x91\x3b\xbf\xd8\xc5\x8e\x52\xd3\xe1\xa8\x25\x97\x59\xc9\x67\x37\x4f\x20\xb1\x87\x67\xb7\xcc\x04\x61\x19\x5e\x89\x7c\xe4\xfb\x86\x05\xa7\x53\xbb\x79\x08\xa3\xc9\x34\xbb\xcb\x9c\x72\xf2\x50\x89\xee\x16\x74\x76\x5f\xc4\xd1\xd7\x18\x85\x85\x3e\x6e\x9d\x54\x02\x46\xcb\x1e\xc2\x26\x9f\x9c\x4d\x94\xb7\x41\x2b\xbc\xb4\x52\x4f\x57\xa1\x1e\xae\x11\xc8\x01\x6d\xc8\x40\x6f\xec\xba\x79\xf7\x4e\x9b\x77\x57\xdb\x6d\xa5\x0d\x62\xa3\xdd\xf0\x34\xe5\xf9\xfa\xa3\xa9\xdd\xdf\x5d\xf7\xed\xda\x1d\x8d\x48\xe6\x45\x9a\x70\xf3\x90\x02\x0e\xc0\x42\xe3\x6a\x4d\x44\x45\x4a\x6c\xca\x8e\xaa\xf7\x93\x90\x1e\x5c\x5e\xe7\x72\xbc\xd2\x4a\xe2\x92\xaa\x28\x22\xab\x83\xf3\x32\xee\x27\x38\xbb\x27\xa5\x12\x91\x7f\xf7\xec\x81\x83\xa0\x97\x8c\x4d\xd8\x3c\x91\xa9\xa3\x6f\x59\x8d\xa1\xec\x1c\xec\x08\x10\x6c\xd5\x19\x09\x7d\x11\xf5\x51\x10\x8f\xba\x87\x7b\x81\xb7\xdb\x7d\xc6\x97\x85\x03\xd3\x9c\xf0\xb2\xf4\x50\x25\x45\x97\xd5\xc7\xc9\x6e\x88\x5f\xa0\x98\xa2\x1d\x7d\x2d\xc5\xc5\x64\x5d\x2f\x8a\x8c\xa9\x55\xe2\xfa\x02\x1d\x96\x3d\x4a\xe6\xd6\x68\x14\x5f\x21\x3f\xe9\x85\x59\xe2\x27\xd7\x88\xa9\x97\x3e\xe3\x6b\x4b\xdc\xc1\xcf\xb2\x46\xe2\x67\x6b\xc3\x05\x03\xa5\xab\x5b\xca\x8d\xd6\x1c\x67\x48\x82\x52\x81\x1b\x24\xc4\x7f\x03\xdd\x46\x9c\xa0\x30\x8a\x70\x02\xd1\x67\xe3\x69\x06\x02\x84\x1e\x85\x0f\x62\x26\x52\x1d\x23\x25\x43\xf6\x40\x5b\x31\x02\xd2\x71\x8d\x9f\x5c\x23\xb4\xd4\x58\x84\x04\x62\x49\x2b\x19\x17\xe9\x23\x43\xa9\x60\x28\x15\x34\x1a\xfb\xed\xf0\x18\xe6\x93\x5e\x03\x4e\xfc\x00\xf5\xe3\x28\xcd\xfc\x48\x6f\xde\x9a\x44\x4a\x9d\x63\xb7\x62\x4d\xe0\x7d\x16\x9e\xa3\xdf\x37\x51\x6d\xd6\xee\xd3\xff\xd9\xdc\x61\x8c\xc2\xcd\x0e\xfd\x5f\xb1\x66\x2c\xd6\x74\x62\xa1\xf6\x6c\xa3\xc8\x3f\x21\x0e\x19\xec\x40\x0f\x11\x85\x4c\x30\xf1\x7b\x89\x44\x56\x90\xaf\xcc\xc6\x8c\x2d\x03\x09\x9d\xb6\xf1\x71\x87\x9e\x54\xd5\x17\xe7\x0b\xe6\x76\x11\xc8\x60\x98\xbf\x9b\xf8\x63\x07\x5b\x5d\x16\x7d\x0c\xf0\x0a\x61\x89\x15\x46\x42\x59\x70\xca\xcb\x04\x22\x33\x4a\xdf\x7f\x30\x32\x99\x24\x78\x2b\x73\x83\x8f\x3d\x54\xf4\x30\x18\xea\xff\xf4\xe8\x61\x73\xc4\xd4\x45\x44\x44\xc2\x43\x73\x1a\x9a\x1b\x41\xcc\x5d\x63\x6e\x14\x31\x77\xd5\x07\x8a\x24\x76\x77\x6e\xd7\xa5\xea\x69\x18\x6f\xcb\x7e\x4c\xa4\x8b\x3d\x7b\x70\xb4\xc2\x80\x63\x85\x1c\x53\x1e\x2b\x0d\x68\x2e\xa1\x70\x49\x83\x5f\x32\x09\x54\xaa\xce\x90\x63\x63\xbf\x6f\xbf\x24\x12\x07\x7f\x87\x11\xdc\x8b\xbf\xb4\xc2\x7c\xd6\x69\x2d\x5b\x5e\x8f\xc2\xde\x32\x41\x25\x00\xdb\xd6\x54\xfb\x8a\xa3\xfe\x32\xd8\x34\x5a\xde\x53\x37\x4b\xed\xc3\x38\x68\xcf\x37\xbe\x4b\x87\x7e\xa3\xad\x83\x24\x2f\x1b\x3a\xb8\x74\xe8\xb7\xeb\x0d\xf3\x65\x73\xdd\x52\xb2\xa9\xbd\x4a\xc2\x09\x1e\x07\xf5\x4e\xcd\x6a\xfb\xa7\xbc\x9a\xf4\x3e\x07\x03\xbd\x1d\x7c\x39\xf9\x1c\x0c\x8a\xee\x1d\xd4\xae\xc7\x01\x5e\xee\x0f\x7a\xd6\xd7\x59\xe2\x78\xbd\x7c\x31\xf2\x83\xb1\x1f\xd9\x3e\xc7\x76\x60\xb8\xaf\xbf\x9e\xf8\xc1\xb2\x1f\xa5\xe1\xec\x45\x43\x1f\x04\xf2\x29\x4c\xe3\x7a\xad\xde\xd0\x47\x9c\x7d\x7a\xb1\xf6\x62\x4d\x9f\x21\xf2\xe9\x0b\x4e\x62\xe6\x7a\x6d\xf9\x1a\x39\xbe\x51\x1d\xd9\xf2\x10\xcf\xb4\x0f\x3e\xd6\x89\x8b\xc6\xdd\x08\x8c\xf7\x49\x5f\x9f\xdc\xc4\xef\xf5\xc2\xcc\xfa\x72\x79\x84\x2f\xfc\xfe\xf5\x43\xdf\x01\x89\xd5\x03\x4f\xfa\xa2\x81\x97\xf9\x5a\x11\x8f\x6c\x89\xc0\x33\x59\x19\x9a\x59\x28\x5b\x07\xe2\x77\xa3\x25\x7e\x13\xaa\xe7\xbf\x09\xb1\x8b\xdf\xf4\x57\x4e\xda\xb9\x7d\x29\xfc\x62\x84\x4c\x31\xa0\xf4\x6b\xdc\x61\x51\x74\x38\xb5\x4a\x4f\x59\xa2\x3e\x09\xda\xcc\xdf\xc6\x4a\x0d\x42\x89\xb4\x59\x99\x00\xc5\x1b\x41\x77\xf2\x1b\x4a\x6e\xe2\x8d\x4c\x65\xe2\x65\xa4\xbe\x92\x68\x0a\x9e\x09\x29\xc1\x8f\x9c\x82\xe8\xa8\xf4\xd9\x40\x31\x7a\x91\x7e\x73\x32\x59\x54\x11\xa9\x28\x20\x65\x5e\xbb\xb8\x62\xd2\x1d\x8a\x8d\x75\x69\xa3\x5d\xf7\x8a\xb5\xc9\x9e\x4a\x57\x1b\xed\x96\xa7\x10\xde\x46\xbb\xed\xe5\x13\xbf\xd1\xee\x78\xea\xe8\x6d\xb4\xd7\xf4\x1b\x61\x9d\x94\x37\x3a\x35\x8f\x51\xeb\x46\x07\xf0\x11\x94\xb2\xd1\x69\x78\x32\xad\x6c\x74\x5a\x9e\x8d\x5a\x36\x3a\x4d\x4f\xa6\x90\x8d\x4e\xdb\x93\xe9\x67\xa3\x03\x78\x29\x34\xb3\xd1\x59\xf3\x74\xaa\xd9\xe8\xac\x7b\x3a\xdd\x6c\x74\x5e\x78\x06\x91\x6c\xac\xd5\x3c\x0b\x39\x6d\xac\x01\xfe\x6c\x49\x6c\xac\x01\xf6\x8c\x34\x36\xd6\x5a\x9e\x41\x1c\x1b\x6b\x80\x38\x21\xa3\x8d\x35\xc0\x39\x5f\x67\x1b\x6b\x1d\xf9\x02\xdd\xcb\x97\xec\xc6\x1a\xbf\x5a\x27\x8b\x79\x63\xed\x85\xc7\x97\xea\xc6\x7a\xcd\xcb\x97\xf0\xc6\x7a\xdd\xcb\x17\xf7\xc6\x3a\xa0\x93\x53\xf0\xc6\x3a\x34\x2e\x18\xcd\xc6\x7a\xeb\xe6\xdc\xeb\xd4\x1e\x2f\x0f\xfe\xfc\xcb\x83\xee\x10\xf7\x3f\x93\x4e\xc1\x4a\xa1\x6e\x40\x34\xcd\x59\x3a\x9d\x90\x81\xc1\x2c\x3e\xb5\xd4\x6f\x90\xe3\x69\x48\x73\xf4\xc3\x26\x7a\xc6\x21\x3f\xb3\x58\x84\x08\x27\x8d\x7b\xbc\xae\x28\x34\xc7\x17\xed\x1c\xe3\x01\x4e\x30\x1c\xf4\x92\xf0\x02\xce\x64\x61\x14\x66\x39\x98\x74\x3a\xc1\x09\xa8\xae\x37\xb5\xf4\x1c\x12\x94\xad\xe9\xc5\x18\x47\x99\x56\x00\x65\x31\x1a\xfa\x51\x30\xc2\xca\xb8\xc9\xb0\x7b\x56\xc8\x8a\x4d\x0d\x54\x35\xdd\x01\x25\xdd\x37\x8d\x25\x4f\x4d\xa0\xc2\x28\x5b\x97\x34\xf4\x03\xb9\xbe\x50\x4c\xa8\xb3\x63\x1e\xf3\xf3\x1a\x54\x09\xff\x81\x40\x85\x17\x32\x36\xca\x21\xc2\x8a\x58\x4c\xd3\x7f\x01\xa4\xcb\x10\x5f\xb9\x50\x74\x36\x2f\x21\xbc\xcf\x51\x40\x5f\xbf\xaa\xe5\x39\xc1\x01\x96\xa0\x33\xe6\xd5\x7f\x20\x6b\x4e\xd8\x8e\xc0\xa2\xb3\x03\x37\xaa\x56\x8d\x56\x9c\x58\xd5\x3b\x76\xb4\xdc\x2d\x2d\x56\x63\x3f\xca\x9a\x8d\x45\x9b\x58\xac\xc6\xee\x28\xf6\x6f\x53\xa5\xd3\x82\xf7\x79\xf9\x5b\x92\xd2\x0a\xa5\x60\x0f\xc9\xaf\xae\x33\x7c\x08\xc9\x81\x8c\xd7\xb6\xbc\xcb\x0a\xfd\xed\xd1\x45\x97\xb7\x55\x66\x45\xe4\xa5\x17\x53\x21\xe4\xd0\x5e\x0b\xdc\xd0\xa6\x1d\x67\x8b\x66\x61\x67\xc6\xb2\xaf\x5e\x67\x36\xe3\xe7\x85\xdc\x05\x6d\xa8\x2c\x92\x4f\x3b\xaf\x7f\x16\x9e\xdf\x2a\x79\x76\x6e\xce\x1d\x7e\xc1\x54\x55\x9b\x3b\x8e\xaa\x45\x05\x63\xcd\x53\x5b\x78\x88\xb9\x11\xda\x3a\xa2\xcc\xb7\x35\xeb\x19\x19\x4d\xf2\x9a\xc0\x43\x11\x91\xfa\x64\x66\x6e\xb6\xeb\x4f\x26\xa3\x6b\xd6\xb0\x9f\x5c\x4c\x09\x0b\x4f\x8b\xfc\x15\x19\xbf\x5e\x99\x24\x71\x16\x13\x1c\x65\xce\x5d\x64\x38\xa1\xef\x3e\x76\x05\x4b\xa7\xfe\x28\xeb\xfc\x39\xb2\x0e\x04\x8c\xfe\x13\xe2\x12\x59\x73\x2a\x95\x30\x91\x80\x2d\x96\xde\xe3\xa1\x2c\xd7\xad\x93\x2a\xa7\x8c\x59\x48\x25\xa9\xea\x52\xbb\xf9\xb3\x49\x7a\x2e\xbe\xd2\x69\xd9\xb9\xc8\x29\x61\x13\x9b\x74\xf8\x56\xfc\x5e\x4a\x7f\xa4\x61\xc4\x82\xb1\x12\x96\x51\x9b\xd5\x6b\xec\xaf\x8a\xbe\xaa\x69\x7c\xd9\xf2\xaa\x54\xad\x16\xea\x07\xdb\x6d\xcd\x9a\xc2\x66\x00\xa2\x7b\x4d\xa2\x4d\x36\xaa\x16\x03\x10\x9e\xf6\xa6\xf0\x76\x2c\xd7\x04\xdb\x73\x15\x9f\x99\x9c\xb4\x36\xeb\xac\xb5\xda\x8d\x66\xad\xee\xa1\xda\x0c\x0f\xfa\x81\xdf\x5b\x7f\x61\xc9\xab\x58\x9b\xbd\x58\xef\xf9\x41\x7f\x80\x3d\x18\x98\x66\xa3\xdd\x5a\xeb\xa8\xe5\xce\x9d\x37\x62\x5a\x1a\x3d\xb9\x17\x07\x22\x93\x9e\x6d\xef\xba\xf2\x27\x08\x83\x7b\xf5\xfc\x3d\xa4\xde\x71\xef\x18\xee\xeb\x6b\x3e\x1b\x14\x89\x8f\x04\x1e\x4f\x2f\x88\x42\x47\x04\xde\x83\x8f\x52\xe9\x83\x33\xfe\x70\x6e\x73\x09\x91\x3e\x13\x82\x33\x0b\x90\xbf\x4a\xa5\x22\xc1\xa4\x9e\xe2\xe8\x2b\x92\x5f\xc2\x5e\xd7\xaa\x6a\x3e\xe2\xe8\x6b\x49\x80\x8d\x56\xd5\x02\x10\x42\x19\x2b\x2e\xe9\x26\xb8\xbb\x19\x87\xec\x29\x37\x14\xf6\xeb\x7e\x65\x48\x6b\x48\x1a\x53\xb4\x84\x6a\xba\xf8\xa0\x94\xae\x6b\xa5\xeb\x85\xa5\x1b\x5a\xe9\x46\x61\xe9\xa6\x56\xba\x59\x58\xba\xa5\x95\x6e\x15\x96\x6e\x6b\xa5\xdb\x85\xa5\x3b\x5a\xe9\x4e\x61\xe9\x35\xad\xf4\x5a\x61\xe9\x75\xad\xf4\x7a\x61\xe9\x17\x5a\xe9\x17\xc5\xb3\x53\xd3\x66\x67\xce\x64\xd6\xb5\xe2\xc5\xb3\x59\x6f\x68\xc5\x8b\xa7\xb3\xde\xd4\x8a\x17\xcf\x67\xbd\xa5\x15\x2f\x9e\xd0\x7a\x5b\x2b\xde\x36\xb8\xc1\xea\x2a\x61\xc8\x9f\xc3\xe8\x82\x54\x0d\xfd\x51\xcf\x26\x36\xfb\x64\x1b\x38\xb3\x0e\x54\x0f\x3e\x59\x07\xa5\x0f\x9f\xac\x03\x10\xc0\xa7\xa6\x0d\x9d\x6e\x7e\x07\xad\x7e\x23\x48\xec\xee\x56\x7c\x0f\xf5\x3c\xd4\xf7\x50\xe0\x49\x0b\xd4\x43\x68\xcd\x23\x5b\x68\xed\x5c\xe7\x0d\x01\xad\x17\x78\x48\x54\xcd\x47\xc8\x43\xa8\xde\xf0\xd0\xe9\x59\xdd\xa8\xd7\xa7\xf5\x68\x4b\xb4\x6a\xbe\x68\x49\xbd\x35\x52\xaf\x61\xd4\xeb\xd1\x7a\x02\x49\x5f\xaa\xd7\xf4\x10\x6a\x40\x7b\x4d\xa3\x5e\x51\xff\x5a\xa2\x7f\xad\x85\xfa\xd7\x16\xfd\x6b\x2f\xd4\xbf\x8e\xe8\x5f\x67\xa1\xfe\xad\x89\xfe\xad\x2d\xd4\xbf\x75\xd1\xbf\xf5\x85\xfa\xf7\x42\xf4\xef\xc5\x42\xfd\xab\xd7\x3c\xd6\xbf\xba\x49\x30\x45\x1d\xac\xd7\x3d\xd6\xc1\xba\x49\x31\x45\x3d\x24\x58\xd2\x1e\xd6\x4d\x92\x29\x24\xd1\xa6\xc7\x49\xd4\xa4\x99\xc2\x3e\xb6\x44\x1f\x4d\xa2\x29\xec\x63\x5b\xf4\x11\xa8\xc6\xec\xe4\x9b\x37\x8e\x4e\x7a\x08\xb5\x69\x27\x4d\xba\x09\x68\x45\x6b\x27\x09\xbd\xbd\xa0\x15\x4d\xc2\xe9\xd3\x8a\xf6\x4e\xd6\x3d\x44\x3a\x7a\x7a\x56\x37\x29\xa7\x47\x2b\x5a\x3b\x49\x38\x46\xa3\x06\x15\x4d\xd2\x29\xea\x63\x5b\xf4\xb1\x61\xe7\x35\xae\x3e\x12\x9a\xa3\x7d\x6c\xd8\x99\x8d\xb3\x8f\x6d\xde\xc7\x86\x9d\xdb\xb8\xfa\xd8\x12\x7d\x6c\xd8\xd9\x8d\xab\x8f\x2f\xf2\x3e\xda\xf9\x8d\xb3\x8f\x2d\xd1\x47\x3b\xc3\x71\xf5\x91\x30\x46\xd6\x47\x3b\xc7\x71\xf5\x71\x3d\xef\xa3\x9d\xe5\x38\x69\xb5\xe9\xf1\x3e\xda\x79\x8e\xab\x8f\x0d\x41\xab\x0d\x3b\xd3\x71\xf5\x71\x4d\xf4\xb1\x69\x67\x3a\xae\x3e\x92\xe5\x4f\xfb\xd8\xac\xdb\x17\xe4\xde\x9e\x9b\x58\x5b\x80\x6b\xd3\xce\x75\xf6\xf6\xec\x9d\x24\xc3\x4a\xd6\xd6\xe9\x59\xd3\xce\x75\xf6\xf6\x0a\x16\x64\x07\x2a\xda\xb9\xce\xde\x9e\xa3\x93\x2d\x0f\x35\x9a\x50\xd1\x24\x9d\xa2\x3e\xd6\xf3\x3e\xda\x99\x8e\xab\x8f\xad\xbc\x8f\x76\xa6\xe3\xea\x23\x4c\x24\xed\xa3\x9d\xe9\x38\xfb\x58\x13\x7d\xb4\x33\x1d\x67\x1f\x9b\x1e\xeb\x63\xcb\xce\x74\x5c\x7d\xac\x89\x3e\xb6\xec\x4c\xc7\xd5\xc7\xa6\xe8\x63\xcb\xce\x74\x5c\x7d\x24\xac\x9c\xf6\xb1\x65\x67\x3a\xae\x3e\xbe\x10\xf3\xd8\xb2\x33\x1d\x57\x1f\xc9\xf2\x60\x7d\xb4\x33\x1d\x27\xad\xb6\x39\xad\xb6\xec\x4c\xc7\xd5\xc7\x46\xde\xc7\x35\xfb\x82\xdc\xdf\x77\x0b\xaa\x1d\xda\x49\x3b\xd7\xd9\xdf\xb7\x77\x12\x68\x0e\x78\x40\xcb\xce\x75\xf6\xf7\x0b\xc4\x80\x36\x88\x80\x76\xae\xb3\xbf\x6f\xef\x24\xe1\x1d\x0d\x18\xd6\xb6\x5d\xd4\x71\xf5\x91\xcc\x07\xed\x63\xdb\xce\x74\x5c\x7d\x6c\x8a\x3e\xb6\xed\x4c\xc7\xd9\xc7\x9a\xe8\xa3\x9d\xe9\xb8\xfa\x58\xcf\xfb\x68\x67\x3a\xae\x3e\xae\x8b\x79\x6c\xdb\x99\x8e\xab\x8f\x40\x73\xb4\x8f\x76\xa6\xe3\xea\x23\x88\xe4\xb4\x8f\x76\xa6\xe3\xec\x63\xd3\xe3\x7d\xb4\x33\x1d\x57\x1f\x5b\xa2\x8f\x1d\x3b\xd3\x71\xf6\xb1\xce\xfb\xd8\xb1\x33\x1d\x57\x1f\x1b\xa2\x8f\x1d\x3b\xd3\x71\xf5\xf1\x85\x98\xc7\x4e\xd3\x5c\x90\x70\x8d\x92\xe1\x64\x8c\x83\xd0\xcf\x98\x53\x19\xb8\x2b\xa8\xe5\xc8\x11\x17\x6d\xa2\x0a\xfc\x77\x09\xf9\xba\x86\x95\x96\xa9\xb3\x32\x75\x52\xa6\x67\x2f\xd3\x60\x65\x1a\xa4\x4c\xdf\x5e\xa6\xc9\xca\x34\x49\x99\xc0\xd0\xe6\x6a\xaa\xca\x5d\x8b\xa5\xee\x82\x01\x6d\x21\x53\xba\xc8\xa6\xeb\x67\xbe\xed\x60\xee\x67\xbe\x08\xe5\xe3\x67\xbe\x5b\x39\x16\xbd\x0e\xb3\xf4\x34\xce\xfc\x91\x80\x19\x6d\xfb\x99\x4f\x3d\x48\x9e\xa3\x75\x0b\x74\xa8\xf3\x0e\x0f\x32\x0e\x5d\x78\x9c\x40\x79\xa3\x33\xce\x94\x57\x02\xcd\xb3\x1c\xe4\xcf\x3f\xff\x8c\xda\x70\xf1\x56\x9b\xad\xd7\xf2\xfb\xb6\xbc\xc4\x3f\x50\xb3\x61\x10\x87\xda\x97\x3d\xb4\x89\x40\xed\x3e\x18\xc5\x71\x52\x91\x3a\xb9\xaa\xe8\xde\x5d\x9d\x83\xb2\xef\xd0\xa6\xf4\xa4\x2f\x1c\x81\x7a\xa5\x52\xc9\x71\x5b\x42\x9d\x16\xcd\x97\xf6\x02\x82\x89\xb6\xaa\x54\x61\x63\xd7\xcf\xf2\xaa\x0c\xe7\x5c\x39\x2b\xbf\x2d\xaf\x9d\x35\xc1\x31\xd5\xac\x0e\x6e\x9e\x6e\xd6\xe0\x12\x8b\x74\xb6\x55\xa6\xb3\xef\xac\x9d\x7d\x77\xdb\xce\xbe\xb3\x76\xf6\x5d\xd9\xce\x9a\xbd\x95\x9d\xa8\x2a\xa2\xfb\x3c\xd8\x14\xe4\xd4\xb3\xfb\x0f\x82\xc1\x3b\x75\x63\x00\x1f\x45\x9b\x27\x55\x61\x5e\xf9\x39\xde\x90\x8a\xce\xdb\x42\xbe\x7b\xcc\x30\xde\xe9\xfd\xb6\xd0\xbd\x87\xe3\x8a\x0b\x15\x5d\xff\x0b\x4c\xe0\x0a\x63\xef\xcc\x7e\x77\xb1\xc7\x6e\xc9\x2a\x95\x3d\xe5\x5a\x62\x6f\xe1\xfb\x08\x4a\x0b\x7b\xca\x5d\xc4\x9e\xf3\x12\x62\xfe\x8d\xc3\x31\xcb\x0d\x0c\x73\xc8\x22\xf0\x04\x30\xa6\x6a\xd1\x12\xc9\xca\xc1\x0d\xa1\x90\xd5\x83\x82\x15\x9c\x32\xc5\x0d\x1d\x3c\xe6\xd7\xff\xc6\xc6\x0b\x9f\x3f\x1a\xb4\xe0\xf2\xae\xe4\x11\x34\xc8\x57\xbb\x87\x03\xfd\x25\x90\xd4\x54\x5f\x33\x0f\xa5\x1e\x52\xaf\xd0\x80\x4f\xa2\x4d\xe4\xa3\x25\x54\xa9\xf4\xd0\x4f\x74\x73\xac\xfc\x9b\xfc\x0c\xaa\x84\x0d\xcc\xd0\x12\xca\xa4\xf6\x44\xc0\xe2\x88\x4c\x53\x4a\x57\x2a\x8d\x53\xde\x6c\xa0\x65\x94\x56\xa1\x5a\x4f\x33\x7a\x13\x58\x69\xe7\xff\x72\x58\xc1\x76\x5c\xe9\xa3\x9f\xd0\xbf\x1f\x06\x2b\xed\x10\x34\x17\xab\x1e\xfa\x1d\xf5\xd1\xef\x04\xb1\xfb\x47\x46\x13\x00\xe7\x22\x43\x10\xa9\xf4\xd0\xd7\x7b\x1e\x1c\xf9\xb6\xfa\xc4\x95\x26\x7d\x6e\xe2\xfd\x32\x41\xd6\xb8\x9f\x98\xe6\xa2\x08\xab\xc1\x04\xe3\x70\x16\x73\x94\xbe\x6d\x58\x33\xb6\x2e\x85\x91\xcb\xc1\x76\xdb\xe2\xfb\x55\x5c\xde\x74\xf8\xca\xe3\x8b\x29\x97\xf9\x6a\x46\xfe\x83\xed\xb6\xd5\x64\xc0\x39\x09\x73\x72\xd5\xdf\xd7\x14\xdc\x2a\xb4\xc3\xfc\x89\x93\xbd\xfc\xee\x63\xe2\xa8\x53\x99\x98\x88\xbd\xb1\xdf\x27\x93\xa1\x64\x86\x37\xe7\x83\x15\x33\xe7\x24\xcf\x66\x4f\xe7\xa5\x30\x03\x3b\x8b\x6c\xed\xb0\x80\x6a\xfc\xa5\x5d\xcc\xfe\xfe\x31\xd9\xe8\x62\x7b\xce\xe2\x0c\xa1\x5d\x8c\x83\x9e\xdf\xff\xcc\xe2\x6a\x8e\xe3\x00\x96\x14\xa1\x19\x31\xdf\xf0\xb2\xbb\xfb\x9a\x88\x40\x16\xf1\x00\xcc\x9c\xe0\xab\x62\x2d\x07\x16\x2e\xb4\x95\x03\x02\x80\x19\xf3\x88\x55\xdf\xdd\x7d\xbd\xb2\x13\xd1\x58\xe5\x60\x40\xb5\xfb\xda\x62\xf0\x33\x71\x98\xcb\x30\x33\xc3\x02\x93\x19\xb7\x68\xca\x42\x50\x71\x81\x84\x3e\xda\xee\x99\xa5\x50\x1e\xb4\x90\x1c\xca\x43\x2d\xcf\x63\x94\xbf\xc5\xd7\x69\x96\x60\x7f\xbc\x15\x05\xac\x77\x16\xeb\xc8\x98\x99\xc5\x0a\x70\x1e\x6b\xc0\x26\x64\x1f\xe3\x31\x86\x20\xe3\x60\x8c\x49\xe7\x89\xc5\xca\x04\xff\xf9\x08\xcf\x32\xfa\xda\x2e\xbe\xe3\xcb\xd7\x2c\x66\x2a\xb4\xbe\x92\x8e\xc2\x3e\xae\x70\x14\xc4\x4d\xbd\xc0\xc5\x66\x3f\xa9\xcc\xda\x36\xfe\xbb\xcc\xda\x1d\x46\x17\x0c\x87\x87\x61\xba\xf0\xd8\x7e\x33\xba\x39\xcd\x3b\xd4\xc3\xfd\x78\xcc\xbc\xee\x09\x41\x84\xf1\x34\x2d\x47\x32\xa2\x8b\xa5\xc4\xf1\x82\xde\x54\xe6\x76\x41\xf3\x8d\x30\x0f\x6c\x70\xde\xbb\xcc\x83\xb5\x5c\xbe\x54\x8d\xc6\xe5\x70\xcc\xb4\xf9\xfc\x33\x64\x76\xbd\xb4\x1e\x69\x44\x69\xb4\x89\xc2\x4b\x36\x85\x35\xc7\x4a\x8c\x2f\x31\xda\xff\x05\xce\x9f\xe9\xb4\x97\xe2\xff\x9d\xe2\x28\x2b\x38\x3d\x03\xbe\xc2\x81\x61\xae\x01\xb4\x8e\x8f\x36\x21\xe6\x24\x90\x3f\x46\xe5\x98\x0e\x34\x14\xac\x08\x20\x1e\x52\xbb\xb2\xba\x8a\xd8\x8c\xe4\xef\xac\xd9\x72\x8b\xa3\xc6\x50\xd3\xf3\xdc\x42\x10\x22\xc1\x88\x46\xe1\x1c\x6d\xd0\x0b\xc3\x82\x8b\x13\xbb\xaf\x8b\x0c\xae\xf9\xa6\xb3\x48\x9c\xba\x4e\xf3\x51\xf8\xf8\xde\x85\x0f\xf4\xdf\x93\x04\xa7\x38\xb9\xc4\x54\x0c\x89\xa7\x44\x94\x97\xc4\x0f\x50\x63\xf8\x59\xd8\x1b\x31\x0e\x8c\xb6\x13\xf4\x3a\x09\xfd\x08\xbd\xa1\xee\x99\x68\x10\x8e\x30\x8e\xfa\x2b\x7d\x00\xc1\x43\x3e\x43\x04\x6c\x8d\x7e\x4e\x8f\xa1\xc8\x3f\xfd\x08\xed\x25\xd3\xde\x35\xfa\x34\x24\xff\x59\xb9\xc2\xbd\xff\xbe\x18\xfb\xe1\x68\xa5\x1f\x8f\xed\xf2\xce\xe9\x31\x6f\xae\x40\xec\x91\x0b\x95\x96\x7e\x9e\xe4\xf9\x5e\xa2\x3e\x39\x28\xd0\x94\x49\x4f\x9f\x3c\x21\x83\x0e\xa4\x27\xd2\x21\x81\x92\x88\x2a\x85\xaa\x30\xeb\xf4\xd7\x1f\x68\x75\x35\xbe\xc4\xc9\x60\x14\x5f\x91\x3a\xb0\xf1\xd5\x79\x3a\x50\x52\xaf\xde\xa9\xfe\x44\xca\xbe\x14\x9f\x1b\xf2\xe7\x75\xfd\x6b\x93\xed\x61\xac\x31\xc0\x13\x50\x21\x60\x45\xbb\xab\xab\x88\x37\x8b\x7a\x75\x52\x04\x50\x86\xa6\x6b\x2f\x45\x95\x46\x5e\x45\x94\x79\x02\x08\xd0\x42\xb4\x54\x53\x2d\xc5\x8a\x3d\x01\x54\x58\xb9\x1b\xf8\x97\x10\xa4\x5c\x62\x69\xa9\xd7\x94\xbe\xc3\x3f\xbc\x0c\x2d\xb2\xb4\xd4\x6b\xbc\x7c\xea\x2e\xb0\xb4\xd4\xab\xb3\xef\xe4\x5f\xe8\x38\x6f\x14\x1e\x96\x36\xa1\xe7\xaf\x5e\xb1\x7c\x90\xf2\xeb\x06\x55\x01\x2a\x6f\x19\x42\x66\x4b\xa2\x5a\x6d\x56\xab\x33\xad\x5f\x5e\x94\x71\x3d\x52\x88\xbc\xbc\xd1\xa9\x83\x2d\x8f\x4a\x9f\xfe\x57\xa5\x11\xf6\x92\xde\x20\x71\x52\xca\x5f\x56\x19\xc1\x48\x53\xb0\xba\x8a\xc8\x2e\x01\x37\x31\x28\x94\x16\x12\x5d\x3c\xc6\x4a\x7b\x96\x22\x80\x97\xa2\x38\x1a\x5d\xd3\xe5\xb8\xfd\xeb\xe1\xf1\x36\xfa\x84\x5e\xa1\x75\x80\xc9\x1b\xac\xdb\xb0\xa0\x77\x71\x6a\x67\xd9\x37\xde\x5f\xbe\x96\x94\xb3\x80\x58\x57\x2b\x8e\xd7\x7f\xa2\xcc\xb9\xa8\xc8\x69\x14\xd7\x64\x18\xb3\x55\xc6\x13\x45\xb3\x7c\xc0\x0c\xd4\x8b\x24\x1e\xe4\x96\x7a\x40\x68\xb0\x37\x52\x2c\x03\xa1\x5b\xc8\x41\x68\xbe\x2c\xc4\xa5\x03\x42\xd8\x26\xcd\x53\x56\xf4\x44\x17\x8d\xd8\x67\x09\x57\x55\xf5\xbc\x88\x50\x84\x1c\x82\x11\xba\x9d\x70\x84\x16\x14\x90\x90\x2a\xcf\x99\x87\xae\x9c\xee\xe5\xb3\x97\x58\x1a\x2f\x35\xc9\x4a\x14\x97\x04\x2c\xa7\x88\x25\x15\x5e\x40\xd2\x6a\x3d\x4a\x5a\xdf\xbb\xa4\xe5\x90\xaf\x1c\xea\x9d\xd3\xe3\x62\x39\x67\x51\xf5\x8e\x85\xa5\xeb\xbc\xfc\x91\x89\xff\xfd\x98\x78\xe1\x69\xf6\x01\x58\xf6\x7e\xd4\x4f\x30\x44\x6e\x60\xc0\x35\x90\x4c\x0e\xc9\x27\x77\x19\x51\x63\x1a\xc7\x17\xb8\x2d\xff\x8a\x6a\x7f\xa9\xcd\xa1\xec\xae\x30\xff\xbc\x4d\xca\x2c\xb0\x0b\xb4\x1f\x77\x81\xbf\xc4\x2e\xb0\x33\xc2\xfd\x2c\x89\xa3\xb0\x8f\xba\x71\x80\x7b\x71\x3c\x5f\xe1\xbf\xd3\x2d\x52\xf8\xd3\xaf\x0b\xed\x08\x3b\x5d\x55\xe1\x4f\x9e\xef\x6b\x07\x90\x59\xbb\xca\x40\xd4\x7a\x45\x5a\x4c\x82\x8f\xb2\x90\x1e\x0a\xbf\x00\xdf\x0a\x3f\x9e\x7a\xa9\x3b\x5f\x6f\x06\x65\x16\x58\xc7\x7f\xed\xe4\xc8\xff\x39\xeb\xf8\x70\x9a\x4d\xa6\x59\xf9\x4b\xbb\xc3\xc2\x4b\xbb\xc3\xc5\x2f\xed\x74\xa9\xee\x50\xbb\xc4\x3b\xfc\x73\xaf\x83\x1e\x5c\xaa\x33\x75\xf3\xe2\xcd\xfd\x4a\x76\x05\x0d\x7d\x2f\xd2\xdd\xdf\xe9\x84\x7d\xa8\x5d\x6b\xba\x84\xa8\xc3\x12\x97\x16\x87\x0b\x5e\x5a\x3c\x66\xb1\xfb\x6b\x30\xdf\xad\xf7\x27\xfb\xe8\xb7\x95\x17\x8d\x26\x37\x10\x47\x69\x46\x96\xf7\xc5\xb5\xc1\x7d\x27\x7e\xb0\xb2\x15\xa5\xe1\x6f\xa4\xb4\xc8\x05\x37\xf1\x03\x99\xfd\x05\x7e\xe6\x4b\x17\xa1\xae\x0b\xd0\x54\xbd\x01\x25\xb5\x4e\x72\x83\x5f\xc5\x00\xf8\xa5\x5a\xb4\xa7\xa7\x15\xe9\xb9\x12\x8a\x00\x51\x4c\xa3\x4c\xf4\x4c\x0b\x66\x05\xb6\x78\x47\xf4\x9b\x01\x8c\xbe\x58\x56\x31\xfb\x87\xf6\xdd\x68\x8d\xc6\xb4\x19\xf9\x29\x8d\x9c\x85\x26\x71\x1a\xaa\x1e\xf8\xa4\x51\xf2\x9d\xd4\x3f\x8a\x79\x67\x45\x0b\x4b\x1a\x46\xcb\xa8\xae\x35\x72\xe4\x07\xf9\x33\x0c\x94\xc8\x36\xa2\xbe\xa6\xac\x44\x6e\x2b\x0f\xa9\xa5\x36\x92\x87\xd4\x92\x4b\xdb\x82\x6b\xa9\x96\xd9\x4b\x1a\x20\x6e\x87\xc8\x2d\x70\xa7\x91\x85\x38\x74\x8a\x78\x83\x33\x29\xe1\xbc\x32\x55\x54\x81\x2f\x46\xb3\x78\xe6\xa4\x3e\x57\x54\x34\x97\xc9\xf1\x97\xf5\x3d\xbf\x08\x92\x50\x60\xfb\x8a\xe1\x21\xa1\x81\x71\xf4\xf6\xe9\x93\x1b\x2b\xdf\xe4\xcb\x65\xf6\xa2\xd1\x5c\x88\x77\xde\x2d\x31\xd9\x23\xef\xfc\x56\xbc\x73\xff\xe4\x10\x41\x48\xdc\x72\xac\x73\x9f\x05\xd0\xbd\x2b\xeb\xfc\xd3\xd9\x61\xbe\x24\xe6\xf0\x43\x0b\xab\xa2\xe9\x00\xec\x11\xe8\x56\x12\x3f\x0a\xe2\x71\xc5\xe0\x80\xd5\xea\x8a\x26\x29\x15\xc3\x61\xa9\xc3\xce\x0c\x2e\xd7\x68\x9d\x7b\x04\xdc\x23\xa3\xd2\x19\x15\x27\xce\x85\x18\xd5\x5f\x3b\xf3\xc2\x7f\x14\xa3\x5a\xdd\xdf\xe9\xa2\x17\x6b\x2f\xd6\x96\xeb\x88\xd1\x06\x3a\xc0\xd9\x30\x0e\x50\xc3\xc5\xad\x20\xb4\xf7\x6d\xb9\xd5\x56\x10\x50\xff\x41\x75\x41\x94\xe0\x02\x7c\xf5\x92\xda\xf4\x8f\x2f\x5a\xa5\x81\xff\xc1\x49\x0c\xb9\xc3\xb2\x21\x46\x09\x4e\x25\xbe\xa8\x74\x84\x94\x63\x3d\x26\xcf\x06\xde\xb7\xe2\x05\x6c\x21\x7e\x61\x38\xa8\xab\xd1\xd9\x3c\x80\xa6\xf0\xec\x0b\x3b\x8e\x30\x1a\xc7\x09\xa6\xc2\xe3\xf2\x32\xf4\xcd\x35\x8a\x7c\xbd\x2f\x2f\x97\x5c\xe0\x30\x9f\x8b\x2c\xf0\xb5\xbb\x45\x39\x7f\x5c\xe0\xdf\xec\x14\x87\xa2\x38\x9e\x94\x13\x43\xde\x73\x72\x74\xae\x6c\x41\xec\xee\x35\x91\x17\x29\xa2\x39\xd1\xd4\x42\x44\x77\xb7\x70\xb3\x8f\x44\xf7\xad\x88\xee\x7f\x24\xe6\x57\x4c\x72\x12\x0f\xfc\x13\x85\xdf\xd2\x07\x67\xf9\x7c\x6b\x08\xc0\x95\x4a\xb1\x08\x5c\x45\x5f\xbf\xea\xaf\x6e\xb5\xc5\xd8\x7b\x3c\x3f\xae\xc0\xea\x2a\xfa\x40\xe0\xab\xf5\x42\x23\x52\x00\x68\x16\x44\x99\xab\x61\x38\xc2\xa8\xf2\x43\x25\xf7\xb5\xce\x63\x70\x83\xc7\xa1\x11\x73\x5b\x98\x70\x1a\x8a\xcc\x50\x6c\x49\x48\x55\x51\xea\x8e\xdd\x10\x8f\xb7\xcc\xee\x25\x51\xd0\x42\xbc\xe4\xaf\xed\xb8\x65\xc9\xd1\x45\x93\x64\x3d\x2c\x5f\xc9\x33\x21\x41\x6b\x7f\x7e\x9e\x8f\x87\x4d\x12\x5e\x2e\x26\xb6\x11\xf3\x5a\x7c\x39\xd9\xdb\xaa\xe7\xb1\x9e\xc9\x93\xf4\xd1\x4c\x04\x6e\x73\x10\x3d\xf2\xd3\x94\x2c\xe4\x65\x82\x5a\x80\xde\xe2\x6b\xb4\x8d\x93\xf0\x92\xe6\x84\xdc\xe5\x83\xd2\x28\x8e\x39\x7d\xf4\xfa\xed\xf6\x6e\x23\x6f\x4d\x3c\x97\x4c\x3c\xde\x8d\xa3\x41\x78\x31\x65\x99\x28\x63\xc8\x0a\x99\x16\xe5\x97\x4c\xe2\x09\x4e\xb2\x6b\xf4\x07\x3d\x16\x83\x37\x29\x30\xdf\xd3\x21\xcd\x71\x9c\x92\x87\x30\x62\xe9\x02\xb2\x58\xf8\xd2\xac\xa0\x6d\x3c\xf0\xa7\xa3\x6c\x03\xb5\x50\xa5\xde\x58\x87\x44\xca\x55\x17\x7c\x47\x42\x73\x9c\xf0\x44\xe6\x39\x38\x32\xfe\xf3\xd0\x0c\x33\x96\x3c\x33\x05\x50\xf9\xa1\x5e\xfa\x90\xc5\x68\x82\x93\x41\x9c\x8c\x25\xe0\x0a\x64\x29\xfd\x63\x7f\x70\xb1\xe1\x1a\x65\x44\x2f\xbe\x4e\x20\xe6\x4c\xbd\xb1\xbe\xda\x6c\x68\x21\xb8\x69\x57\x28\xea\xda\xa7\x1c\x21\xa5\xf1\x9b\x6a\x51\x42\xd2\xa2\x04\xf2\x64\x56\x82\x9c\xb4\xf8\x7a\x9b\x9f\x45\xf4\x10\xf8\xdc\x0d\xe9\xaa\x9c\x31\x94\x8c\x5f\xdf\x46\x37\xdc\xdf\x6c\x10\x27\x70\x8a\xc9\x1b\xbd\x87\xc4\xa0\x9f\x83\x81\x91\x34\x9e\x52\x3b\x3f\x3d\x2a\x66\x58\x8b\x54\xfc\x23\x9f\xac\x75\x9a\x7e\xf2\xce\x60\x3c\x75\x1a\x6b\xb5\x9a\x0e\xb8\x20\x7b\x7d\x7f\x70\x61\x37\xbc\x20\x13\xb1\x29\x7e\x72\xc2\x23\xc5\x5d\xc1\x30\xcc\xf5\x0e\xd7\x15\xd4\x83\xae\x2c\x0b\xba\x4d\xbe\xd9\x09\x83\x0d\xd4\xc2\x1f\x56\x4a\x56\x4e\xfd\x51\x86\xb6\xe0\x3f\x8b\x27\xa2\xe5\x6e\x34\x92\x5f\xfb\x5d\xc8\x8e\x26\x52\x0f\x06\x2b\x2c\x2a\x49\x85\x77\xc6\x03\xfc\x9c\x93\xca\x8a\xcb\xf3\xaa\xd5\x5c\x28\xb7\x8b\x3a\xf5\x56\x03\xc2\x30\x73\x24\x85\x65\x5e\xf6\xe0\xbb\xcf\x68\x95\x90\x0f\xe5\x41\x9e\x98\x1d\xbb\x59\xa2\x3b\x41\x39\xc8\xa6\x74\xb0\x69\xba\x79\x43\x9f\x63\x0b\xf5\x04\x72\xf2\x7e\x14\xe0\x99\xad\xc6\x59\x6d\xc6\x14\x40\x96\x68\x9d\x73\x42\x74\x09\x54\x84\xb0\x2c\xde\x38\xf3\xd7\xe7\xd8\xf0\x4a\xf9\x1b\x67\x25\xbe\xe5\x6d\x92\x59\x59\x61\x4f\x36\x23\x8c\x7c\x6b\xa1\x45\xf3\x17\x73\x8c\x2c\xd4\x8f\x4c\x50\xd7\x3a\xc8\xe3\x22\xbd\xe2\xf8\x58\x8d\x0b\x44\x27\x59\x9e\x63\x9e\x2c\x1b\x28\x30\x4f\xe3\x9b\xf7\x5a\x9f\x33\xc4\x32\x7a\xe7\xa9\x81\xcd\xef\xf3\xb3\x31\x00\x7c\x65\x88\xad\xa3\x6b\x16\x17\x59\x8c\xf2\x57\xac\xe3\x0e\x44\xf6\xc5\x18\xdb\x41\x87\x72\x34\x3b\x06\xd6\x82\x85\x62\xcb\x51\xa7\xb6\x1c\xd2\xf4\x39\x8d\x39\x10\xf0\x73\xa5\x09\x18\x3d\x31\xd2\xf2\x47\xdb\x58\x97\x19\x6f\x34\x2f\x14\x94\xad\xb3\x7c\xf4\xe5\x77\xf6\x80\x55\x52\x13\xbf\x1d\x1e\xab\xdd\x01\xd7\x29\x8b\xc7\xb5\x31\x6e\x9f\xa8\x0d\xcc\x27\x6e\x03\x23\xcd\xe6\x4b\xf4\xa9\x60\xf4\xc8\x5f\x5e\xe3\xec\x13\x98\xc3\x18\x1d\x39\xfb\xa4\x9b\xc5\xf0\xbf\x1b\xf3\xb5\x1e\x70\x8a\xfc\x49\xcc\x81\xe9\xa6\xa1\x51\xdb\x94\x68\x4c\xe2\xac\x76\xbe\xb4\x54\x6c\x52\x24\x01\x97\x8e\xbe\x9c\x6f\x58\x82\x98\xb1\xbd\x2c\xaf\x57\x64\x40\x29\x1f\x23\xee\xb4\xa1\x97\x09\x36\x53\xb8\x91\x2f\xb8\x89\xdf\x97\x68\x19\xa6\xb6\x74\xfb\xf3\xa3\xd7\x58\x44\x83\x7b\x08\x62\x43\x45\x04\x21\x19\x52\xa1\xd0\x25\x26\x2c\x56\xcd\x43\x0e\xd9\xf4\x2e\x60\x0a\x65\xd3\x3c\xc8\x8e\x38\x4a\xba\x04\x18\x0f\xe9\x82\x2a\x1b\x76\x55\x2c\x26\x85\xe6\x08\x4f\x37\x45\xb6\x68\x14\x9a\x3d\x50\x8f\x9e\x42\x97\xe7\x84\xbd\x39\xf7\xd6\xfe\xda\x3e\xf4\x0b\xa4\x75\x9f\x9f\x1c\xfd\x61\x75\x47\xce\xf4\xda\xae\xac\xd7\x7f\x07\xed\xd2\x09\x18\x67\x76\xb9\xf1\x2e\x55\x22\xc9\x2f\x8b\xf4\x48\x02\x8f\x63\x3c\x4d\xfd\xde\x08\xb3\x70\x60\x12\x3a\x27\x48\x4e\xb5\x48\xa1\xe8\x6f\xde\x20\x35\xc3\x9a\xb4\x2d\x1c\x43\x36\x65\xc4\x0c\x6d\x99\x8d\xb1\xa9\x49\x12\xe5\x21\xc6\x4a\x98\x22\x1f\xd1\x04\xcc\xe8\x12\x27\x29\x44\x2d\x1b\xfa\x19\x8a\xf0\xc5\x08\xf7\x33\x1c\x10\x36\xdc\x67\x29\x55\x33\xa6\xf0\xc9\x62\x34\x0a\xb3\x6c\x84\x97\x69\x80\xcb\x15\x15\x28\x4e\x92\x38\x41\x41\x8c\xd3\xe8\x59\x86\xfc\xc1\x00\xf7\x69\x5d\x8a\xd4\xb3\x14\xa5\xb8\x3f\x4d\xc2\xec\xda\x13\x15\x7b\xd3\x0c\x85\x19\x54\xe2\x35\xc2\x2c\x15\x01\x15\xc2\x51\x98\x31\x27\x6e\x9a\xd7\x35\x24\xfc\x79\x8c\x23\xba\x1f\xa4\x36\x45\x19\x1d\x90\x77\xb4\x73\x42\x5d\xa6\xbd\x95\xe7\xef\xb6\x49\xdb\x8a\x0f\x29\x6f\x65\x33\x68\xe7\x01\x23\xb7\xde\x86\x53\xc3\x65\xd1\x69\x21\x64\x27\x34\xb2\x7b\x61\xe7\x39\xed\x37\xd1\x2e\xf9\x65\x49\x1c\xf7\xf6\xac\x76\xee\xa1\xca\xdb\xb3\xe6\x39\x0b\x16\x80\xbe\x92\x47\x76\x15\x50\xef\x54\x2d\x49\xe4\xde\x9e\xd5\x69\xa5\x9a\x5a\xa9\x59\x5c\xa9\x41\x2b\xd5\xd5\x4a\xb5\xe2\x4a\x4d\x5a\xa9\xa1\x56\xaa\x8b\x4a\x6a\x1d\x5b\x76\x24\x63\xc8\xb8\x97\xa1\x6b\xd0\xba\x62\xd0\xba\xf6\x41\x33\xf1\x91\x86\x8b\xf5\x89\x5e\x98\x0c\x06\x3c\xed\x20\x45\x9a\x06\x59\xad\xd5\xc8\x17\x5b\x7f\xcd\x89\x68\xaa\x90\xeb\x56\xc8\x8d\x52\x90\x6b\xce\x81\x97\x60\x68\x90\x9b\xa5\x20\xd7\x5d\xb3\xe3\x49\x30\x34\xc8\x35\x0d\xf2\xfc\x89\xec\xfa\x49\x72\x8d\x7a\x7a\x3a\x55\x3a\x55\x3d\x1a\xff\xc2\xd4\x64\x64\x74\xf2\x09\xeb\x49\xaf\xd3\x0c\x8f\xd1\x20\x9e\x26\x28\x0b\xc7\xfa\xdc\x2f\x18\x94\x37\xc2\xb3\xec\x84\xac\x3e\x77\xfc\x58\x4b\xc4\xdb\x83\x38\x08\x07\xd7\x94\x13\x52\x3a\x2c\x81\xc5\xba\x1b\x8b\xee\x19\x75\x1c\xf8\xed\x0c\x52\x5e\x42\xb4\x15\x23\x53\x9c\x2d\x49\xee\x2f\x28\xc5\xd9\x74\xa2\x7e\x28\xf0\xe8\x98\x7f\xd8\xdf\xff\x85\xba\x76\x14\x9d\xf0\xf7\x7f\xf9\x58\x43\x9b\x68\xff\x17\x33\x35\x9a\x54\xa4\x4e\x8b\xd4\xad\xd1\x8c\xe5\x25\x0d\x53\x99\x4e\x7b\x97\x98\x88\x0a\xae\xa3\x7f\x8d\x06\x3f\x86\xb6\x69\xf4\xe3\xaf\x88\x3e\xb9\xa2\x1f\xcb\xc5\x59\x98\x63\x51\x3e\xbf\x0e\xb5\x87\x39\x16\xcd\x36\x44\xb3\x75\xa5\xd9\xfa\xbc\x66\xeb\x6a\xb3\xf5\xc5\x9a\x85\x30\x3a\x61\x8d\x2f\x41\x02\x24\x6c\xa8\x2b\xd0\x55\xb5\x09\x55\x1b\x7c\x31\x43\xd5\x9a\xba\x4c\x1d\x33\xc2\xc8\xba\x88\xb5\x22\xa0\xd6\x1a\x3d\xd7\xeb\xb1\xfd\xe9\xc7\x3a\xfd\x58\xb7\x7e\x6c\xd0\x8f\x0d\xeb\xc7\x26\xfd\xd8\xb4\x7e\x6c\x15\xb5\xd9\x2e\x6a\xb3\x53\xd4\xe6\x9a\x68\xb3\x40\x23\x55\x8a\xf3\xa0\xc5\xb9\x0f\x2a\xc7\x81\x90\xa9\xa4\x90\xfd\x88\xee\x25\xb9\xab\x53\x79\x2d\x49\x1f\xa5\x38\xb3\x5a\xc4\xde\x3b\xf7\xf6\x0e\x83\x9b\x7b\x99\x01\x17\x52\x4b\x9f\xd0\x50\x43\xbf\x01\x11\xa2\xca\x6f\x64\xee\xf9\x2a\x81\x67\xb1\xf7\xbe\xd4\x2b\xd6\x69\xc5\x06\xab\xb8\xa6\x55\x6c\x3b\x2b\x36\x68\xc5\x16\xab\x58\xd7\x2a\xae\x39\x2b\x36\x69\xc5\xce\xb9\x40\x4d\xa9\x58\xcf\x2b\xde\x69\x17\x2b\x8a\x52\x4f\x11\xe1\xb1\xe3\x4f\x58\x4a\x76\x16\x3c\x1e\x1e\x6f\x13\x3d\x9e\xc3\x61\x0c\x4e\xc0\xb1\xc5\x8f\xb7\xe2\x6b\x75\xc2\x43\x52\x8e\x5e\xe1\x4d\x77\x52\xec\x45\x27\x53\xbf\xb0\xe3\xc9\x6f\x6e\xf3\x8f\xe1\x25\xfd\xd2\x69\xad\x36\x1b\xba\x5a\x4e\x2c\x13\x41\xb0\x95\x92\xae\x50\xca\xfa\x50\xbe\x48\x22\xa8\x66\xf0\x73\xe2\x5f\x62\x14\x8f\x02\x27\xab\x5d\x40\x7e\xe8\x7e\xa4\x93\xdb\xd5\xe3\x1d\x2a\x2d\x76\xfd\x51\x7f\x3a\x22\x2b\x2c\xc2\x57\xce\x66\xbb\x2c\x11\x4c\x97\x26\x82\xa9\xcd\x5a\x41\x13\xfe\x0f\x2d\x71\x09\x4d\xcf\xd7\xd2\x65\x79\x61\xba\x34\x2f\x4c\x6d\xc6\x6a\x34\x21\xa6\x7c\x97\x0b\xa8\xb5\x2a\x7a\x85\x2a\xdd\x8f\xd2\xf3\x7f\xa1\x3a\xda\x40\xb5\xaa\x09\xb1\xc1\x20\x36\x28\x44\x06\xb0\xc5\x20\xd6\x35\x88\xf5\x12\x10\x9b\x0c\x62\xd3\xe8\x56\x85\xb6\xa3\x40\x6c\x94\x80\xd8\x62\x10\x5b\xd6\x5e\x37\x35\x88\xcd\x12\x10\xdb\x0c\x62\xdb\xda\xeb\x96\x06\xb1\x55\x02\x62\x87\x41\xec\x58\x7b\xdd\xd6\x20\xb6\x4b\x40\x5c\x63\x10\xd7\xac\xbd\xee\x68\x10\x3b\x73\x21\xe6\x62\x3f\x05\xaa\x54\x5f\xd3\xab\xeb\xde\x31\x82\xa6\xc9\xee\x73\xb1\x7c\x87\x45\x44\x4a\x5d\xcc\x80\x57\x87\xa4\x6b\x5d\x4b\x12\x0e\x9e\x2e\x3f\x99\xf6\x33\x34\x0c\x2f\x86\xc8\x8f\x02\x34\x8a\xaf\x90\x9f\x5c\x4c\x21\xfc\x0b\xb8\x39\xff\xef\xd4\x4f\x8c\xc4\x3d\xd0\x80\x8f\x36\x49\x2b\x5c\x8a\xb3\x28\x0f\x2e\x7a\xb4\x08\xdd\x25\xac\xc7\x27\xde\x67\x05\x83\x04\xa7\xd3\x51\x86\xe2\x41\x51\xf3\x43\xba\x05\x54\x2e\x7c\xf4\x1c\x5d\xf8\xd4\x75\xa5\xbe\x56\x45\x4b\x88\xbe\xea\xb1\x57\x6d\x78\xd5\x83\x57\x36\x24\x47\x14\x90\xd4\x15\x7a\x24\x7c\x8e\x2e\x66\x30\xc3\x55\x20\x08\x5e\x40\x88\x9d\x52\x01\x5b\x22\x18\xd2\xa1\xdf\x0e\x8f\x11\x84\x93\x94\x3f\xbe\xa1\x1c\xee\x62\x88\x7e\x47\x17\xa3\xb2\x4c\xce\xae\x54\xf9\x8d\xb1\xb8\x37\x94\xc5\x55\x2a\x6f\xf2\xed\x9b\xec\x64\x6f\x24\xb1\xa0\xca\x0a\x74\xd4\x02\x9d\xbc\x80\x4e\xcf\xbf\x31\x6e\xf8\x86\x72\xc3\x0a\x6d\x26\xdf\x6f\xdf\x70\xfe\x07\xfb\xed\x12\x22\xad\x99\x30\x1a\x0c\x46\x83\xc3\xa8\xab\x08\xd4\x0d\x0c\x6b\x6a\x81\x5a\x11\x86\x4d\x06\xbd\xc9\xa1\x37\x54\x0c\x1b\x1a\x86\x75\x0b\x86\x2d\x06\xa3\xc5\x61\x34\x55\x04\x9a\x06\x86\x0d\xb5\x40\xa3\x08\xc3\x36\x83\xde\xe6\xd0\x5b\x2a\x86\x2d\x0d\xc3\xa6\x05\xc3\x0e\x83\xd1\xe1\x30\xda\x2a\x02\x6d\x03\xc3\x96\x5a\xa0\x55\x84\xe1\x1a\x83\xbe\x76\xae\x90\x88\xc0\xb0\xa3\x61\xd8\x56\x30\x2c\x95\xf8\x23\xe5\x49\x27\x84\xae\xb5\x44\xda\x89\x79\xd7\x5d\x14\x56\x86\x67\x99\x7c\xef\x24\x6b\x52\x79\x28\x05\x25\x8d\x03\xbd\x2d\x32\xef\xaf\x26\x23\x9f\x60\x33\xcb\x90\x13\x1c\x8b\x33\x53\xc9\x5b\xb6\x41\x14\x17\x57\x45\x4a\x5d\x35\x79\x87\x5c\xb2\x5a\x74\x07\x25\x17\x2c\x6d\x8c\xec\xa9\x77\x23\x1b\xed\x96\x97\x5f\x8a\x6c\xb4\x3b\x1e\xbb\x2b\xd9\xe8\xd4\x6f\xce\xbd\xb5\xbf\x76\x24\xc2\xc7\xfb\xaa\xc7\xfb\xaa\x07\xbb\xaf\xd2\x96\x78\x7e\x9f\xa3\xdf\xe4\xfc\xb5\xee\x70\xee\x2b\x2b\xdc\x5b\x71\x34\x7f\xab\x1e\xcd\xdf\xde\xf6\x68\xfe\x56\x3d\x9a\xbf\x2d\x3a\x9a\xcf\x53\x30\x3f\xde\x54\x3d\xde\x54\x3d\xde\x54\x29\x5f\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\xf2\x66\x1f\x6f\xaa\xf4\x8f\x8f\x37\x55\x8e\xc7\xc7\x9b\xaa\xc7\x9b\xaa\xc7\x9b\x2a\xf8\x7b\xbc\xa9\x2a\xa7\xc4\x7d\xbc\xa9\x7a\xbc\xa9\x7a\xbc\xa9\x92\xfe\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\x1e\x6f\xaa\xfe\x93\x6f\xaa\xee\xed\x8e\xea\x76\xb7\x53\x65\xee\xa5\x4a\xdc\x48\x3d\xd4\x5d\xd4\x5f\x3b\x1f\xca\xe3\x5d\xd4\xdf\xff\x2e\x4a\xbe\x3b\xea\xb6\xe6\x3a\x3a\xc9\x37\x47\xdd\x96\x74\x6d\x04\x0f\x0f\x7f\x67\x44\xbd\x34\xc5\xad\x91\x3d\xa8\x00\xf7\xd0\x2e\xba\x56\x02\x37\x4e\xd9\xa3\x58\x8a\x99\x6e\xea\x2b\xa2\x30\x43\x69\x2f\x9e\x99\x70\x4e\x04\x3a\x27\xf2\x35\x1d\xff\xb3\x49\x93\x8d\x76\xc7\x7d\x28\x67\x87\xee\x70\xbe\x1a\xf7\x2d\xbe\xb6\xe9\x71\xd5\x16\x3d\xee\x3f\x3e\xb7\x61\x36\x28\x64\x08\x78\x54\x89\x10\xfd\x43\x1e\x27\x87\xea\x90\x55\x22\x5b\x1b\x1f\xfb\x33\x05\x90\x19\x09\x4d\xf9\x6c\x04\x45\xb3\x9d\xfd\x49\x2f\x2a\x9f\xd0\x12\x1d\x9f\x25\xde\x68\x15\xfd\x03\x7a\xe5\x88\xa5\x70\xe5\x4f\xec\x38\xc3\xbe\x61\x6a\x08\xa4\x09\x38\xb1\x3b\xc6\x93\xd7\x64\xc6\xe7\x4f\x4f\xd7\xaa\xe2\x67\x59\x35\x04\xd1\x7c\x62\x59\x66\x05\xa0\x3b\xab\xe5\xb8\x26\x04\xb4\x20\x46\xfe\x75\x32\x3d\x76\x95\xa1\xd2\xb2\x70\x72\x6e\xb4\x3b\x0e\x85\x48\xcd\xa9\x0c\xb1\x36\x5a\x56\x31\x22\xad\x27\x4d\x31\x92\x0f\x5a\xa8\x7d\xf9\x94\x0f\xe7\xdc\x0c\xf0\xa0\x1c\x54\xab\x7f\x96\xf1\xd4\xe6\x43\xac\xa6\x88\x2e\xa3\x88\xaa\xd4\x22\xcb\x22\x0a\x41\x83\x4e\x13\xc6\x31\xaa\x54\xbe\x2b\x24\xec\x20\x5c\x2b\xd1\x16\x10\xac\x9b\x58\x73\x42\x55\xdf\xab\x9d\xfd\x4a\xea\x56\xd8\x9a\x22\x55\x18\x5e\xe7\x79\x5e\x83\x48\xcf\x63\xa0\x1d\x9f\x3e\x40\x1c\x14\xcb\x8d\x56\x4e\xea\xa1\x71\x76\x27\x63\xa1\xcc\x15\x13\xcb\x14\xec\xbe\x57\xb9\xb7\xdb\xba\x0f\xa1\xb7\xdb\x5a\x58\xe2\x35\xf7\x58\x4d\xdc\xed\xb6\xac\xb1\x2d\xe0\x86\x26\xc4\xc1\x2d\x76\xf8\xed\x24\x9e\x28\xbb\x3c\x7b\x01\x83\xf0\x0d\xa2\xe2\x05\xa4\x39\x35\xd0\x9c\xa6\xe7\x27\x13\x4f\x4a\x89\x50\x73\xa8\xfe\xa2\x21\x83\xd5\x63\xcd\x11\xd4\xa5\xa8\x5f\xda\x2a\x26\xa0\x36\x54\x10\x6a\xc4\xb8\x52\x42\x0c\x69\x83\x17\x2c\xbe\xc3\x20\xe3\x59\xb0\x81\x0b\xc3\x17\x82\x17\xd9\xc5\x7f\x86\xcd\x7c\x79\xd9\xba\x87\x2f\xc0\xee\xd1\x9c\x04\x48\xdf\xd1\x6a\x23\x43\x74\x3f\x2b\x0e\x20\x2d\xbe\xea\x18\xcd\x17\xaf\x3c\x52\xa8\xf8\xa4\xd9\x6d\x3d\xd4\x31\xf3\x6e\xe9\xfa\xbe\xe5\xf9\xf2\xc1\x4e\x81\xdf\x36\x88\x33\x61\x55\x38\xc5\xc9\x25\x7e\xfa\xa4\xd2\xaf\xa2\x46\xad\xde\x40\xbd\x6b\xd4\xfd\xff\xfe\xdf\x20\x09\xfb\xe8\x00\xa7\x51\x38\x5a\x41\x5b\xa3\x11\x4a\xc2\x8b\x61\x96\x22\x56\x3e\x58\x79\xfa\xf4\xc9\x31\x0e\xc2\x34\x4b\xc2\xde\x14\xe0\xfb\x51\x00\x41\x79\xc2\x08\xa5\xf1\x34\xe9\x63\x78\xd3\x0b\x23\x3f\xb9\x26\xec\x60\x9c\x7a\x2c\x4a\x43\x02\xff\x8d\xa7\x19\x1a\x03\x4f\xef\x03\x67\xf5\x90\x9f\x60\x34\xc1\xc9\x38\xcc\x32\x1c\xa0\x49\x12\x5f\x86\x01\x0e\x68\xd0\x09\xb2\x4e\x07\xf1\x68\x14\x5f\x85\xd1\x05\xea\xc7\x51\x10\xd2\x35\x4c\x2a\x8d\x71\xb6\xc1\x56\xfc\x32\x52\xd1\x4a\x41\x31\x4c\xf1\xe9\xc7\x01\x46\xe3\x69\x9a\x91\x8d\xda\x0f\x23\x00\xea\xf7\xe2\x4b\xf2\x69\x72\x0d\x5d\x44\x51\x9c\x85\x7d\xec\xd1\xb8\x42\xa3\x30\x05\xcd\xb2\xdc\x5e\x14\x68\xc8\x04\x61\xda\x1f\xf9\xe1\x18\x27\x2b\x2e\x1c\xc2\x48\x1e\x08\x8e\xc3\x24\x89\x83\x69\x1f\xdf\x3b\x1a\x88\x75\x2d\x88\xfb\x53\x11\x07\x83\xd4\x58\x8d\x13\x16\x23\x63\xec\x67\x38\x09\xfd\x51\x9a\x0f\x33\xcc\x0d\x54\x93\x50\x27\xf3\x7c\xba\xb7\x7f\x82\x4e\x0e\x77\x4f\x7f\xdd\x3a\xde\x41\xfb\x27\xe8\xe8\xf8\xf0\x97\xfd\xed\x9d\x6d\xf4\xfa\x5f\xe8\x74\x6f\x07\x75\x0f\x8f\xfe\x75\xbc\xff\x66\xef\x14\xed\x1d\xbe\xdb\xde\x39\x3e\x41\x5b\xef\xb7\x51\xf7\xf0\xfd\xe9\xf1\xfe\xeb\x0f\xa7\x87\xc7\x27\xe8\xc7\xad\x13\xb4\x7f\xf2\x23\x7c\xd8\x7a\xff\x2f\xb4\xf3\xdb\xd1\xf1\xce\xc9\x09\x3a\x3c\x46\xfb\x07\x47\xef\xf6\x77\xb6\xd1\xaf\x5b\xc7\xc7\x5b\xef\x4f\xf7\x77\x4e\x3c\xb4\xff\xbe\xfb\xee\xc3\xf6\xfe\xfb\x37\x1e\x7a\xfd\xe1\x14\xbd\x3f\x3c\x45\xef\xf6\x0f\xf6\x4f\x77\xb6\xd1\xe9\xa1\x07\x8d\x9a\xd5\xd0\xe1\x2e\x3a\xd8\x39\xee\xee\x6d\xbd\x3f\xdd\x7a\xbd\xff\x6e\xff\xf4\x5f\xd0\xde\xee\xfe\xe9\x7b\xd2\xd6\xee\xe1\x31\xda\x42\x47\x5b\xc7\xa7\xfb\xdd\x0f\xef\xb6\x8e\xd1\xd1\x87\xe3\xa3\xc3\x93\x1d\x44\xba\xb5\xbd\x7f\xd2\x7d\xb7\xb5\x7f\xb0\xb3\xbd\x82\xf6\xdf\xa3\xf7\x87\x68\xe7\x97\x9d\xf7\xa7\xe8\x64\x6f\xeb\xdd\x3b\x6b\x2f\x09\xee\x4a\x1f\x5f\xef\xa0\x77\xfb\x5b\xaf\xdf\xed\xd0\x96\xde\xff\x0b\x6d\xef\x1f\xef\x74\x4f\x49\x77\xf2\x5f\xdd\xfd\xed\x9d\xf7\xa7\x5b\xef\x3c\x74\x72\xb4\xd3\xdd\x27\x3f\x76\x7e\xdb\x39\x38\x7a\xb7\x75\xfc\x2f\x8f\xc1\x3c\xd9\xf9\xbf\x1f\x76\xde\x9f\xee\x6f\xbd\x43\xdb\x5b\x07\x5b\x6f\x76\x4e\x50\x65\xce\x90\x1c\x1d\x1f\x76\x3f\x1c\xef\x1c\x10\x9c\x0f\x77\xd1\xc9\x87\xd7\x27\xa7\xfb\xa7\x1f\x4e\x77\xd0\x9b\xc3\xc3\x6d\x18\xe8\x93\x9d\xe3\x5f\xf6\xbb\x3b\x27\x2f\xd1\xbb\xc3\x13\x18\xad\x0f\x27\x3b\x1e\xda\xde\x3a\xdd\x82\x86\x8f\x8e\x0f\x77\xf7\x4f\x4f\x5e\x92\xdf\xaf\x3f\x9c\xec\xc3\xa0\xed\xbf\x3f\xdd\x39\x3e\xfe\x70\x74\xba\x7f\xf8\xbe\x8a\xf6\x0e\x7f\xdd\xf9\x65\xe7\x18\x75\xb7\x3e\x9c\xec\x6c\xc3\xe8\x1e\xbe\x87\xae\x9e\xee\xed\x1c\x1e\xff\x8b\x00\x25\x63\x00\x83\xef\xa1\x5f\xf7\x76\x4e\xf7\x76\x8e\xc9\x80\xc2\x48\x6d\x91\x21\x38\x39\x3d\xde\xef\x9e\xca\xc5\x0e\x8f\xd1\xe9\xe1\xf1\xa9\xd4\x47\xf4\x7e\xe7\xcd\xbb\xfd\x37\x3b\xef\xbb\x3b\xe4\xeb\x21\x81\xf2\xeb\xfe\xc9\x4e\x15\x6d\x1d\xef\x9f\x90\x02\xfb\xb4\xd9\x5f\xb7\xfe\x85\x0e\x3f\x40\x97\xc9\x1c\x7d\x38\xd9\xa1\x3f\x25\x8a\xf5\x60\x26\xd1\xfe\x2e\xda\xda\xfe\x65\x9f\xa0\xcd\x0a\x1f\x1d\x9e\x9c\xec\x33\x3a\x81\x21\xeb\xee\xb1\xe1\x5e\x79\xfa\xe4\xf9\xaa\xaa\xf3\x3a\xf0\xb3\xe1\xfd\xea\xbd\xca\x45\x9d\xa6\x81\x8f\x45\x11\xfa\x58\xca\x3a\x1b\x2e\xec\xfc\x28\x4b\x51\xe6\xf7\xb8\xc4\x42\xaa\x7c\xfc\x32\xb2\x06\xdb\xcc\xe5\xa8\x9a\x87\x50\xdd\x43\xa8\xe1\x21\xd4\xf4\x10\x6a\x79\x08\xb5\x3d\x84\x3a\x1e\x42\x6b\x1e\x42\xeb\x1e\x42\x2f\x3c\x54\xaf\x79\xa8\x5e\xf7\x50\xbd\xe1\xa1\x7a\xd3\x43\xf5\x96\x87\xea\x6d\xc9\xc2\x72\x8d\xd6\x25\xdf\x08\x3c\x52\x9e\xc0\xa8\xb7\x29\x5c\x52\x0f\xda\x7a\xc1\xe0\x37\x18\x8c\x3a\xb4\x91\xc3\x69\xb2\xb6\x5a\x0c\x97\x17\x0c\xc6\xba\x84\xe7\x1a\x83\xd5\x61\xb8\xd4\x29\xcc\xba\x1c\x6b\xb9\xce\xea\x72\x5c\x6a\x14\x06\xe0\xc1\xf1\x6c\x52\x58\x04\x7e\x5d\xee\xb7\x0c\xa7\xc5\xea\xb6\x19\xee\x6b\x0c\x46\x43\xc2\xb3\xce\x60\xad\x33\x5c\x58\xbf\xeb\xcd\xf3\xea\x4b\x79\x2e\x92\x39\x73\xc1\xf1\x58\x93\xc6\xaa\xc1\x60\x72\x9c\x3b\xea\x78\x40\xdf\x9a\x5a\xdf\x3b\xac\x4e\x33\x87\x05\x75\xdb\x39\xce\x1c\x06\x1f\x0f\x68\xab\xae\xf5\x1d\x0a\xb5\xa5\x0e\xae\x31\x04\x3b\xf9\xe0\x0a\x20\x0d\x69\xa0\x29\xb2\x39\xa0\x75\x56\x47\x1a\x2c\x98\x98\x76\x3e\xb8\x02\x46\x53\x1a\x68\x8a\xac\x84\x50\x83\x8d\x6c\x4d\x02\xc6\x47\x63\x4d\xcc\x9e\xa0\x50\xc4\x46\x87\x22\xab\xce\x46\x3a\x6f\x65\x50\x14\xd9\x58\x01\x7a\x72\x4b\x9c\xb6\x9a\xd2\x78\x76\xf2\x6f\x0a\x4d\xaf\x79\xf0\x09\x86\x8a\xd3\xeb\x8b\x9c\xf6\x38\x4d\xd5\xdb\xd2\xb0\xae\xb1\xb2\xca\x7c\xd4\x73\x22\x10\x73\xf1\x82\x15\xe4\xc4\xb3\x2e\x95\xe1\x88\xaf\xc1\x6f\xf9\x2c\x25\xd6\x72\x2b\xaf\xca\xdb\x17\x6b\x5e\x5e\x13\xeb\x0a\xc8\x1c\x14\x5f\x9f\xed\x9c\xf6\x45\x3f\x1b\x39\x0a\x62\x9c\x18\xc9\x50\xb8\x48\x9b\x92\x79\x0b\x84\x21\xa6\x0c\x7e\x3b\x47\x00\xfa\xb9\x96\x2f\x44\x68\xb0\xc5\x10\xe9\x68\x48\x37\xd5\xc1\x17\x9d\xae\xe7\x70\xc4\xd8\x89\x05\x0d\xdf\x15\x38\x82\x81\xd4\xa5\x41\xea\xe4\xed\x8a\x85\xc7\x16\x70\xbd\x69\x99\x0f\xd1\x01\x0d\x71\x0e\x48\x2c\xb8\x86\xf4\xdf\xb6\x58\xc5\xea\x00\xb5\x2d\xe5\x5a\xea\xcc\x88\x99\xcc\x3b\x85\xea\x75\x74\xae\x64\xc9\xfe\x38\x24\x2b\xc4\x32\x1f\x48\x84\x6a\xae\x79\xa8\x36\x6b\x6f\xad\x37\xd6\x5e\xbc\x78\x41\x7e\x77\x76\xb6\x5f\xec\xbc\xde\xaa\x93\xdf\xeb\xbb\xf5\xd7\xaf\xbb\xdb\x5d\xf2\x7b\xeb\x45\xbb\xb9\xbb\xdd\xda\x51\xe7\x7b\x98\x38\x1b\x68\xd7\xb6\x1a\xeb\xaf\x77\x3a\xd0\x40\xb7\xb5\xbd\x5d\x6f\xb4\xa0\x81\xed\xb5\x5a\x73\x67\xb7\x49\x7e\xaf\x6d\x75\xb6\xd7\x3a\x3b\xd0\x30\x47\xe8\xdc\xaa\x0f\x38\xde\x3f\xda\x39\xd8\xae\x77\x6a\x10\x7e\x7f\x8e\x0e\x49\x94\xcd\xb5\x48\xd2\x2b\xba\x2b\xdf\xf6\xae\x88\x2a\x13\x01\x09\x47\x10\xec\xce\x5a\xab\xdd\x68\xd6\x60\x04\x77\x76\xbb\xdb\x5b\xaf\xd7\xa1\x83\x2f\xd6\x5f\x6f\x6d\x77\x77\x77\xc8\xef\x7a\xad\xd9\x68\xb7\xd6\x60\x70\xba\xcd\xed\xc6\x4e\x7d\xb7\x76\xee\x54\x8d\x97\x55\xca\x5b\x15\xbb\xa5\xbd\x94\xea\x05\x37\x35\xf3\xcd\xf1\x29\x16\xa0\x7b\xcd\xcd\x22\x1d\xd7\x37\x07\x1f\xa5\xd2\xfc\xf2\xe0\xa3\x69\xc8\x84\x8a\xee\x54\xa4\x7a\x68\x13\x55\xcc\x02\x88\x1a\x80\x4a\x8d\xe5\x86\x0f\xd2\xcb\xc5\x8c\x4a\x0d\x80\xcc\xae\x54\x03\x68\x5a\x97\x9a\xe0\x0a\x54\x63\x68\x9e\xad\xf3\x1e\x12\xf7\x0f\x84\x14\x9d\x57\x8e\xc0\x00\x3e\x0e\x47\xee\x02\x09\x14\x48\x9c\x05\x40\xfc\xfc\xf8\xc5\x0d\x01\x64\xa2\x8f\x5f\xdc\x10\x60\x9b\xfe\x98\xba\x21\xc0\xa6\xf1\x31\x4d\xec\x11\xad\x57\x57\xc9\x2a\xfb\x4c\x0e\xcd\x97\x7e\x12\x12\xe9\xd8\x72\x49\xeb\x8f\x3c\xd4\x1b\x79\xa8\x3f\xf2\x50\x30\xf2\x10\x1e\x59\x1a\xf2\x13\x0f\xf5\x12\x0f\xf5\x13\x0f\x05\x89\x87\x70\xa2\x37\xe6\x13\x54\x7c\x82\xf0\x9e\xe9\x32\xd2\x4b\x20\xe8\x38\x7c\xac\xeb\x1f\xfb\xe4\x63\x9f\x7e\x6c\xe8\x1f\x03\xf2\x31\xa0\x1f\x9b\xfa\x47\x38\x30\x60\xfa\xb1\xa5\x7f\x14\x69\xaa\x7d\x35\x2f\x35\xef\x92\x7e\x2b\x68\x35\x25\x84\xff\x2e\x6d\xa2\xba\x75\x6d\x67\x64\xf9\xf8\x23\xb4\x94\xaf\xa9\xa5\x2f\xa3\xb3\xf0\xfc\xbc\xfa\xd5\xe6\xc4\x00\x5e\x3b\xaf\xea\x9d\xea\x1f\x4f\x9f\xa8\xac\x91\xb4\x81\x06\xf5\x4a\x6f\xe4\xf5\x47\x5e\x30\xaa\xa2\x25\x34\x1c\xd9\x7d\x6f\x6e\x90\x50\xc8\x85\xaf\x9a\x0d\xaa\x6a\xb3\x40\x6b\xe8\xd0\x8c\x91\x37\xa0\xb5\xd6\x9d\xd0\x9a\x3a\x34\x63\xaa\x0c\x68\x9d\x96\x13\x5a\x4b\x87\x66\xcc\xad\x04\xed\x8f\xd5\x55\x06\x71\xbd\xe6\x84\xd8\xd6\x21\x1a\x04\x81\xec\x61\xd2\xc9\x24\x66\xd6\xe9\x22\x5f\x50\x12\x67\xa3\x4a\xe6\xa5\x64\x5a\x6d\x4e\x1b\x40\x03\xd9\x12\x1e\xd9\xa7\x1c\x56\x84\xb1\xa4\xc8\x1f\xd0\x6d\x60\xfb\x02\xe4\x0e\xed\x92\x35\x59\xb7\xba\x01\xc1\x7a\xe9\xd9\x6a\xc3\x32\x33\x6e\x12\x05\xaa\x7e\x82\x96\x24\x6a\x4d\x6e\x4f\xad\xed\x4a\x2f\xf1\xfa\x89\x17\x24\x30\xe2\xc9\xdd\xa8\xb5\xa5\x43\xbb\x2b\xb5\xaa\xd0\xee\x44\xad\x0d\x1d\xda\x9d\xa9\xb5\xae\x43\xbc\x67\x6a\x4d\xe0\xd6\xba\x80\x5c\x13\x07\xb9\x02\x47\x4d\x6c\xe4\x0a\x8c\xd8\xf6\x05\x58\x34\x25\xd7\xc4\x49\xae\xb0\x01\xd8\x6a\xc3\xd6\x60\x5a\x68\xe8\xac\x7c\x5f\x4e\xc7\x00\x32\x24\x58\xfd\x6a\x12\x26\xf9\x67\x13\x55\xf6\xa8\x69\x6e\x9f\x70\xe6\xc0\xd2\xd3\x3d\x66\xc2\xbb\x47\xcd\x6f\x03\x52\xce\x36\x22\x7b\xcc\x4c\x77\x8f\x1a\xd2\x62\x52\xce\xb7\x96\x6b\xb2\x72\x60\x2c\x0b\x3b\x42\xcf\x5a\xae\xc5\xca\x81\x61\x72\x8f\x94\xeb\x5b\xcb\x81\x01\xb3\x32\x2c\xba\x58\xbb\xcb\x52\x6b\xdc\xc1\x3c\x2b\xf0\x33\x5f\x08\x43\xe4\xc1\xb2\xf1\xcf\x4f\xc3\xc8\x4b\x46\xaf\xc3\x2c\x3d\x8d\x33\xe0\x78\x14\x66\xb4\xed\x67\x3e\xb5\xda\x7a\x8e\xd6\x2d\xd0\xa1\xce\x3b\x3c\xc8\x8c\xa4\x8d\x50\xde\xe8\xcc\x56\x10\x98\x59\x88\x11\xcb\xb7\x48\x8d\x99\x72\x90\x44\x9a\x6c\x9f\xa3\xaf\x9b\x34\xb1\x70\x6e\x23\x21\x4a\xfc\x03\x35\x1b\x3a\xb5\xe6\x90\x2a\x95\x4a\x5e\x74\x09\x11\xfe\x40\x40\xbe\xa8\x12\x50\x2d\xb2\x6e\xeb\x2d\x87\x00\xcd\xab\xd2\xe1\xc8\x85\x67\xe9\x65\x79\xe1\xd9\x00\xc6\x04\x67\x0d\xd8\x3c\xc1\xd9\xd6\x51\x39\x4f\x47\x9e\x0f\x93\xe7\xd8\x01\xe3\x18\x4b\xda\x8e\xd5\x55\x38\x09\x22\xc8\xee\x42\x1d\xb2\xac\x86\x53\x13\x7a\xf2\x32\xb3\xb9\x14\x93\x25\xac\x6e\x59\x46\xb7\x10\xce\x1e\xda\x44\xb2\xf8\x7e\xb7\xf3\x5b\xbb\xd4\xf1\xcd\x7e\x22\xdb\x83\xa3\xd8\x9e\xc5\x99\x04\x15\x9d\xc1\xf6\x84\xbb\xde\x9e\x72\xbc\xda\x5b\xf8\x5c\x45\x29\x64\x4f\x39\x53\xed\x39\x0f\x53\xf3\x4d\xe1\x8e\xe9\x4d\x38\x9d\x5c\x96\xc1\x22\x80\xc1\x56\x8b\xb2\x1b\x73\x6d\x82\x14\x36\xd5\x1f\xc5\x51\x31\x83\x02\x53\x02\x52\x2a\xd7\x2e\xc0\xa3\xdb\x0c\x82\x7e\xfe\x68\x10\x09\xad\x67\xd2\x1a\x43\x13\xbe\x2a\x76\x51\xf0\xf3\x86\xde\xfe\x23\xd9\x22\x6e\x50\xaf\xcc\x3c\x74\xed\xa1\x2f\xb6\x34\x1f\x95\xca\x0c\x3c\x3b\xaf\xe1\xdf\x2f\x79\xb6\xf6\x1b\x03\x4e\xa3\x18\x4e\x65\x56\xfd\xa9\x72\x5d\xa5\xee\xe4\xff\x26\x0f\x5f\xaa\xd5\xea\x4b\x17\xb4\xe6\x5c\x68\x04\xd0\xbf\x09\xc4\x1c\x35\x07\xac\xd6\x7c\x58\x3f\x01\x04\xc0\xed\xba\xfa\x53\xe5\xdf\x80\x9c\x1b\x62\xbb\xcc\x98\x91\x41\xfb\x9a\x83\x72\xc0\x02\x51\x62\xe6\x45\x56\x48\xb3\x57\xaf\x22\xc0\x6a\xf6\xf3\xcf\x3f\x57\x9a\x8d\xe5\x48\x46\x8a\xfe\x28\xb4\x86\xe1\xc6\x30\x34\x0f\x5c\x39\x63\x18\x67\xb6\x1f\x66\xdf\x02\x36\x4f\xfc\x77\x16\xff\xff\xec\xbd\x7d\x77\xd4\x38\xd2\x28\xfe\xf7\xf0\x29\xb4\xfb\x3b\x0b\x1d\xd2\x49\x2c\xf9\x4d\x06\x32\xbf\xcb\x64\xe0\x61\xee\xc0\xc0\x81\xcc\x85\xe7\x70\x60\x56\xb6\xe5\xb4\x87\x4e\x77\x9e\x6e\x87\x24\xbb\xc3\x9e\xfb\x35\xee\xd7\xbb\x9f\xe4\x1e\x95\x64\x5b\xb6\x25\xb9\x3b\x84\x79\x76\x76\xc9\x9e\x65\xba\xdb\xa5\xaa\x52\xbd\xa9\xac\x97\x92\x8c\x4c\x43\x34\x96\xfb\x79\x2c\xd0\xd7\xbd\x98\x47\x79\x46\xbb\x93\xa5\x9e\xc0\x9b\xdc\x51\x2c\xde\x31\xec\xc2\xb1\xb7\xba\xa8\xb9\x35\x6d\xb7\x19\x4e\x0e\xf6\xb6\xda\xd4\x00\x9b\x6d\x55\xaa\x95\xf3\xe4\xd9\xc3\xa3\xdf\x41\x35\x8e\xe6\x1f\xf8\x15\x34\x5d\xf3\x6c\xc5\x2b\xcb\xdd\x49\x16\x85\xc2\x95\x83\x37\xa8\x50\x79\x91\x61\xa3\x9a\x27\xa7\x2c\x6b\xd5\xa3\x6f\xb1\x32\x68\xa8\x03\x3c\xd4\xd2\x29\xcb\x0c\x9a\xfa\xe6\x93\x5c\x07\xb6\x6c\x8d\xaa\x21\xcd\xb7\x13\x7d\x7a\x37\x8d\xe3\xaf\x5b\x9c\xfe\x15\x8e\xac\x7c\xe9\xa5\xfb\x5e\x61\x35\x8d\xb0\xb5\x64\xda\xab\x27\x0f\xf7\xf0\x06\x2b\x19\xc3\xbb\xaa\x6f\x72\xfd\xe2\x10\x4e\x9f\xb6\x4b\x18\xe5\xa2\xac\x26\x86\x02\x54\xdd\x25\x0d\x5e\x64\x39\x4b\x69\x62\xa8\xcd\xe4\x5d\x26\x34\x65\x79\x56\xf0\xce\x1a\x87\x09\x30\xf3\x73\xc2\x71\xe1\x75\x9f\x7d\xfe\x12\x88\x2d\x43\x37\x27\xdf\xc3\x19\xf4\x01\x82\x4d\xe6\x9e\xcd\xd3\xc5\xe2\x51\x6a\x9e\x2c\x86\x84\xd1\x3c\x55\x0c\xaf\xab\xe6\x89\x62\xf1\x88\x37\xd3\xc4\x03\x4e\xad\xf3\xc4\xd6\x39\x61\xcb\xdb\x02\xcc\xfb\x20\x79\xc2\xd4\x52\x0b\xe6\xb5\x4c\xfc\xbb\x25\x30\xba\x67\x4f\xeb\xbf\x7a\x42\xc9\x8c\xa8\x3e\xe7\xf0\xfa\x6d\x89\xf6\x90\xff\x0e\xbd\x57\x1f\x69\xfb\x11\x07\xda\xe7\xc8\x76\x77\xa4\x62\x69\xb2\x80\xc3\xb1\xf2\xdd\x12\x5e\x1f\x7c\x6c\x2e\x53\x63\x7e\x13\x82\xa9\xa5\x09\x13\x48\x42\x40\xc2\xe4\x9b\x4c\x0c\x07\x64\x39\xda\x05\x42\xb6\x89\x46\xf4\x00\x11\xcf\x2a\x35\x98\x36\x9b\x4c\x52\x74\x1b\x65\x32\xcf\x15\x1f\x73\xc0\xec\x5d\x86\x4c\xae\xc2\x8e\x4c\xf1\xa1\x07\x28\x18\x23\x91\xa2\xf7\x28\x43\xef\x51\x2e\x31\x47\x3c\x4f\x78\xca\x4c\x45\x87\x7a\x98\xa3\x2d\x98\x97\xbc\x8b\x4f\x99\xea\xc5\x1e\xf2\x2e\x63\x8f\x07\x81\x4f\x02\x3b\xad\x83\xbb\x0d\x39\xea\xed\xa0\xbb\x07\x1b\xf7\x45\xe0\xf7\xc3\x24\xf7\x39\xe9\xcf\xf2\x20\x8b\x4a\x85\xbf\xe4\xa6\xe9\x3e\x74\x88\x32\xd3\x14\x1f\x02\x92\x0f\x1e\x20\xdf\x53\xbd\x04\xf5\x1b\xef\x16\x45\x87\xc8\xc4\x07\xdb\xec\xb4\xd6\x46\x93\x81\x6a\x12\xad\x9e\x6c\x63\xfd\x13\xde\xa8\x33\x11\x08\x13\x86\x83\xca\x27\xa8\x33\x09\x08\x93\x85\x99\x19\xc6\xd7\x27\x0a\x73\x33\x4c\xa0\x4f\x12\xf2\x3e\xcc\xd7\x09\xbe\x7f\xd6\x09\x3e\x91\x0b\xef\x17\xf3\xe5\x72\xa5\xcf\xb9\x1d\xc0\x40\xad\xfe\x3e\x8b\x08\xd4\x42\x68\x31\x8f\xcc\xd3\x0d\xa6\xe9\xbe\xd0\x0c\xdd\x96\xf3\x40\xc6\xe9\xba\x3f\xe2\x6c\xd0\xd7\x29\x84\xc1\x64\x80\x48\x9f\xb7\x9a\x3d\x80\x06\xae\x89\x83\x6e\x42\xde\x9d\x33\x10\xcf\xbe\x4e\x17\xdc\xe8\x74\x01\xe8\x63\x83\x99\x02\xb3\x5a\xda\x49\x02\xa5\x1a\xfb\xb1\x29\x01\x60\x9f\x16\xa0\x7f\xe8\x02\x1b\xeb\x19\x23\x61\xf4\xa5\x6b\x63\x28\x2a\xff\x3e\xd3\x07\x83\xe9\x01\xfd\x1d\x9e\x84\x51\xe7\x2d\x5e\x3b\x85\xdd\x9f\x15\x20\x24\xd8\x6c\x5e\x40\x00\x76\x70\xc2\x77\x89\xfc\x77\x9d\x1b\xc8\xb0\x17\x26\x3c\xa7\xe2\x95\xdf\x8f\xe2\x2c\x0f\xbd\x18\x3e\x7b\xb1\x97\xe7\x18\x3e\x17\xb1\xc7\xc3\xc4\x37\xcf\x19\x14\x45\xe6\x79\xa9\x0f\x93\x0b\x11\x0d\x29\x0e\xb1\xfc\x1c\x14\x09\x2d\x18\x20\x48\x79\xc1\x82\x82\x05\x5b\x4c\x17\x6c\x94\x79\x6a\x61\x5f\x89\x4e\x6b\xe9\x38\x45\x0b\x11\xb5\x49\x67\xf6\x0e\x87\xc9\x8b\x65\x61\xe9\xeb\x10\x3d\x32\xe2\x12\x12\x6c\x3b\x48\x8b\x26\x23\xc3\x74\xc7\x3b\x06\x03\x35\x21\xe6\x43\xec\x5f\x87\xea\xcf\x18\xaa\x85\x56\x36\x1b\xac\x8d\xca\xe9\x0c\xd7\x52\x41\xce\x01\x9b\x90\xfe\x51\x67\xed\x5c\xb3\x1a\x8e\xee\xc5\x89\x18\xc0\x93\xaf\xf3\xfa\xff\x3d\x03\xf3\x1f\xef\x58\xde\x0f\xf2\x12\x87\xf2\x6f\xcd\xa9\x5c\xb4\x5a\x9e\x2f\x72\x94\x75\xcf\xeb\x69\x3d\x78\xd2\xbf\x3a\xe5\xc7\xee\x32\x40\x3d\x51\xcb\x5b\x1c\xf2\x89\x29\x83\x41\xfa\x92\x72\xb9\x7e\xb1\x2a\x4f\xf9\x64\x61\x1c\xc6\xd6\xff\xb5\xaa\x7e\xaa\xdf\xf3\xc5\x97\xc9\xa2\xff\x9e\xd9\x4c\x04\x4b\x75\xa2\x43\x44\xee\xd7\x9f\x1f\x1c\x4a\x0c\xf5\x0f\x8e\xb9\xe1\x3f\x4d\x16\xe8\x2f\x0a\x6c\xc7\x3a\x5f\xa8\x7c\xb4\x60\xf3\x35\x1f\xdf\x15\xd8\x9f\x1f\xab\xdf\xc7\x57\xe7\xdd\x37\x5c\x83\x58\x4e\x78\xf5\x78\xc5\xe0\x33\x9b\x7f\x57\x56\x6b\x83\x80\x9a\x25\xfc\x05\xda\x43\x93\x05\x54\xf6\xdc\x41\x77\x3b\x93\x1f\xfd\x99\x2c\x8d\x56\x3d\x4b\xad\x57\x66\x87\xdf\x40\x21\xbd\xfa\x3d\x17\xb3\x72\xce\xd1\x44\x3d\x7b\x80\xd4\x96\xcc\xbe\x14\x5b\x6d\x5a\x05\xdd\xa0\xa0\x56\x29\x3f\x79\x2b\x81\xa0\xec\xe8\x40\x10\x60\x0b\x67\xcb\x8b\xc9\x62\x8a\x30\x3a\x40\x64\x67\x83\x8a\xed\x08\x6e\x42\xd9\x06\xad\xbf\x63\x2c\x9e\x2d\x51\xec\xee\x8e\x4c\x85\x2e\x3a\x10\x75\x86\x34\x69\x71\x5e\x7f\x8d\x4d\x24\xde\x9b\x65\xd3\xc3\x0c\xfd\x8b\xaf\xb4\x3d\xd9\x5f\xcf\xcb\x8c\x4f\xbc\x9d\xaf\xab\x5e\x1b\xaf\x7a\x0d\x1e\x15\xf0\x28\x34\x3d\x3a\x81\x47\x83\x05\x23\xc8\x59\xe0\x51\xfc\xd9\xcb\x68\x91\xa3\xd6\xfd\xef\xbd\x8c\x76\xc2\x4e\x4f\x99\x77\xd9\x2c\xa6\xe1\x81\x50\x86\xd0\xb0\xd1\x78\x52\xb7\x7c\xf0\x00\x11\xb9\xe8\x55\xff\xf2\xed\xb7\xdf\xa2\x78\x67\x07\xa1\xf7\x66\x4c\xdd\xbf\x0e\x26\x1c\x0c\x30\x61\xba\xb3\xb3\x19\xa6\x6e\x3b\xdf\x18\x5e\x3a\x3d\xc1\x6d\xbf\x8d\x9b\xe4\xbb\xc0\x5a\xb7\xb1\x64\x56\xeb\x36\xbe\xac\xeb\x4d\x6f\xc8\x6c\x17\x93\x3f\xc4\x94\x6c\xd9\xed\xba\x9d\xf9\x4e\x02\xd4\x1a\x8e\x52\xe2\xae\xea\x39\x14\xf9\x55\x3d\xdc\x75\x2e\x98\xda\x56\x3f\x33\x38\xd5\x38\xe1\xe8\x36\x2a\x60\xb3\xdb\x3f\xc4\xc7\x13\xdb\x15\x2e\xa7\x0c\x2a\xcc\x31\x74\x1b\xa5\x00\xce\xe4\xea\xe0\x7b\xa4\xd6\x09\x4d\xfc\x43\xb2\x52\x9e\x08\xc6\x9b\xa5\x56\xb5\xd8\xa6\xd6\x5a\xe5\xd6\x3f\xf9\x04\x27\xda\x13\xec\x77\x1e\x75\x1a\x99\xc7\xb6\x86\x18\xdc\x53\x33\xe1\x60\xe3\xb2\x72\x32\x87\x76\x91\xc2\x28\x9f\x60\xed\x09\xc6\xfa\xa3\x58\xee\x6c\x95\x8f\x48\x68\x1e\xf1\x60\x01\x59\x50\x9a\xa1\xdd\x9a\xec\xae\x10\xea\xae\xbc\xe8\xcd\xba\x78\x0c\x0d\x09\x3a\xac\x05\xb3\x2b\x44\x6b\xa2\x20\x02\xd7\x89\x01\x81\x88\x75\xfd\x3a\xed\xe2\x4f\x84\x47\x53\xfa\x05\xb5\x33\xe1\xb6\x04\x6c\x5a\xe6\x43\x23\x4b\xa4\xfd\x6a\xeb\x68\x64\x39\x74\x52\x09\x41\x54\xc4\x44\xeb\xdf\x65\x69\x54\xc2\x84\x0a\x06\x4a\x86\x17\x66\x98\x48\xc1\x40\x49\xf0\x13\x33\x4c\xac\x60\xc0\xe7\x67\x5f\x97\x61\xbf\x2e\xc3\x7e\x5d\x86\x1d\x66\x9b\x5f\x97\x61\xff\x29\xe7\x78\xc3\x68\xeb\x39\xde\x30\x1a\x9d\xe3\xd5\xdf\xd9\x86\x73\xbc\x61\xf4\x75\x8e\xf7\xc6\xe7\x78\xc3\x68\xd3\x39\x5e\x93\x72\xba\x73\xbc\xa0\x20\xf7\xa6\xed\x66\xed\xcc\xbc\x34\x4b\xbd\x3f\xf4\xd2\xec\x65\x14\xfc\x2e\x17\x17\x34\x74\xbe\xce\x02\x77\x67\x81\x2f\x23\x58\x53\xdd\xbf\x8c\x02\xed\xf7\x37\x51\xa0\xaa\x74\x03\xc4\xbe\x56\x27\x7a\xab\x9a\x6e\x5a\xff\x5e\x3e\x79\xfe\xcb\xf3\xc7\x8f\x5f\x3d\x3a\x7e\xd5\x9f\x2d\x7e\xf1\xc3\x2f\x3f\xfc\xf4\xfd\xa3\x37\x8f\x86\xb7\x72\xbf\x7c\xfe\xf3\x4f\xdf\xff\x72\xf4\xfc\xa7\x57\xc7\x0f\x7f\x6a\x5a\x6a\xe4\xe4\xb4\xf2\xd1\x66\xd3\xca\x5a\x8b\xd5\x6c\x59\x17\x6d\xe9\xcd\x49\xd7\xa4\xc5\xdb\x35\x9e\xa2\x2b\x5b\xa9\xf2\x4a\x4e\x89\x54\xe8\x01\x22\xc1\x7d\x54\x19\xa6\x44\xb4\x3e\xbf\xbd\x44\xbb\x28\x44\x77\xd1\x95\x3c\x3d\x58\xd5\x87\x34\xe1\x13\xd9\x81\x99\x4a\xf4\x17\x14\x0d\x72\x11\x48\x03\xf9\xc5\x1b\x74\x88\xae\xd0\x5f\x50\x68\xca\x12\xf9\xc5\x7f\x0a\xac\x04\xdd\x45\x82\x8e\x2f\xe8\xec\x18\x80\x2f\xe5\xb4\xdc\x9b\xde\xcf\x57\xf2\xe7\xff\xb4\x4c\x05\x6b\x62\x3b\x2b\x51\x09\xd7\x09\x18\x84\xd6\x48\xe6\x52\x4a\xe6\x52\x1e\xd0\xbc\x34\x08\xa6\x01\x95\xd2\x45\x57\x12\xf4\xca\x32\xad\xd4\x1a\x48\x57\x8c\x57\x70\xc1\xcf\xb0\xd7\x42\xae\xfd\xae\x7f\x1a\xed\x5b\x6f\x95\xa3\x6b\x0d\x4f\x1f\xbf\x7a\x29\x78\xbd\xf4\xb0\xc9\x18\xf4\x7b\x27\x2c\xf3\x63\x02\x0c\x48\xd4\xc6\xfa\x6c\x7d\xd1\xb3\x2d\x23\xd8\xd3\x1a\xcc\x22\x42\x75\xf3\xc4\xaf\xe8\x01\x8a\xef\xa3\x5f\x1d\x33\x73\xd0\x07\x38\x9a\x6a\xae\x8a\x52\x93\x4f\xcb\xea\xc5\x72\x0d\x75\x5c\x85\x55\xc1\x65\xb9\xbf\xee\xa0\x3d\x64\xda\x4d\x5d\x23\xd7\x1b\x3d\x40\xaa\x5e\x84\x09\x58\xfc\x0d\x3a\xf8\xfe\x10\x01\x19\x0d\x8b\x85\x56\x77\x47\xb5\x4e\xf5\xdb\x43\x20\x6b\xdf\x5c\x3d\xa0\xfc\x4c\xa3\xdc\x41\xb5\x67\x78\xef\x69\x18\xd8\x6c\x6a\x49\x33\xac\x05\xbf\xac\xc0\x80\x46\xd4\x42\xed\x3b\xd1\x0f\x0e\xd0\x8b\x55\x79\x5a\x56\xe5\x47\x8e\xce\x96\xf3\xab\xc5\xf2\xb4\x64\x73\xb4\xfc\xc8\x57\xe8\x3f\x1e\x4f\xc8\xce\x3d\x74\xf9\x9e\xa2\x5d\x74\xf9\x3e\x82\x7f\x43\xf8\x37\x10\x61\xc6\x8c\x52\x59\xb4\x24\x2f\xcf\x0f\xbc\x47\xde\x65\xec\xd8\x32\x6f\x61\x4e\x61\x38\x34\xda\xc7\xc8\xa2\x57\x2f\xc0\xcb\x39\x3e\x35\xfc\xd4\x05\xc6\xfa\x3a\x9b\x0e\xec\x67\x67\xdb\xd5\x94\x35\xf8\x4f\xc5\x4f\xcf\x96\x2b\xb6\xba\xea\xdc\x44\x27\x5c\xe0\x58\x1f\x88\xac\xab\x94\xc6\x5b\x67\xcc\xde\x7f\x6c\xec\xd9\x18\xdf\xbd\xb5\x1d\x7f\xb3\x95\x1d\xbf\xb3\xae\xe3\xbb\x56\x75\x6e\xfe\x2a\x81\xe5\x79\x75\x76\x5e\x3d\x85\x57\xeb\x0e\x2c\x82\x24\x3d\xe7\xeb\x72\xc5\x73\xed\xa2\x81\xb4\xac\xd6\x75\x41\x68\xd9\xb8\xf3\xb6\x50\x37\x7e\xbe\x98\xd7\x6a\xd2\x6a\x70\xb3\x15\xbf\x87\x08\x09\xa6\x88\x84\xd1\x14\xf9\x34\x98\xa2\x10\x93\x7e\x63\x75\x67\xc1\x3d\xf1\x4c\x7f\xd4\xbf\xb4\xa0\x7e\x69\xb6\xde\x5b\xa0\xf7\xae\x87\xed\x1a\xf7\x17\xc0\x4c\x2d\xdc\x84\x58\xbf\x7b\xd7\xdf\xde\xbe\xb3\x44\xfb\x0d\x4c\x4d\xfc\x01\x1e\x69\x72\x0b\x7e\xd1\x98\x1d\x2c\xc2\x8d\x95\x12\x00\x4e\x9a\xdb\x7a\x61\x04\x88\x3c\x0f\xed\x21\x31\xd0\x36\x37\x25\xe8\x92\x10\xd9\x8b\x4f\xbe\xd4\x8a\x9e\x61\x62\xce\x20\x34\xe3\xe4\x59\xdd\x89\xa7\x6c\x01\x73\x3f\xbd\xae\x1d\x20\x62\x9a\x43\x4b\xd7\xcb\x55\x3a\x2e\xff\x1e\xfa\xcf\xa9\x24\xf8\x8c\x94\xa8\xbb\x28\x26\x64\x6d\x9d\x36\x7f\x46\xe0\x0e\xfa\x3e\xb8\x88\xf5\xae\x62\x16\xd6\x2b\xa8\x05\x79\x67\x3d\x41\xd2\x29\x24\x48\xae\x53\x41\x90\x74\x4a\x07\x92\xeb\xd7\x0c\x54\x0c\xe3\x31\x8e\x71\x97\x65\x7c\x2d\x9e\x71\x97\x69\xbc\x0d\xd7\x46\x3d\x48\xe3\x6a\xa6\x46\xca\x45\xb5\x94\xd6\x6c\xd6\xf4\x9c\xc1\x64\x5e\xed\xce\x06\x51\x08\x88\x7d\xb8\x6f\xf6\xfd\x21\xc8\xc5\x06\x33\x5f\x5e\x20\x05\x33\xbe\x1a\xf1\x52\x0c\xb0\x6b\x8b\x0f\xc8\x44\x19\xfc\x40\x7e\x94\x49\x2f\x7c\xb6\xbb\xc0\xf1\x8c\x57\x6c\xf8\x64\x8b\xb7\x06\x0d\xd9\xb3\x52\xbc\x82\xcc\xcf\x4f\x17\xd0\x39\x83\x5b\xd5\x12\xac\xd3\xec\x29\x6a\x33\x69\x23\xf0\x96\xef\x24\x3a\x8d\x8e\x96\xda\x37\x14\x0b\x21\xf1\x57\xa7\x9e\x8d\xf6\x5c\xb0\x4f\x35\xd8\xf9\xf2\xc2\x9a\x97\x5a\xa5\x75\x6c\xcc\x73\x4c\x3d\x39\x16\x5a\x38\x7e\x7b\x69\xe3\xfd\xf8\x52\xda\xda\x21\xf4\xc0\x0e\x04\xc6\x76\x08\xac\x6f\xb6\xfb\xe6\x7a\x66\xe0\x08\xab\x6d\x8f\x02\xe8\xd2\x44\xe8\x25\x80\xd7\x43\xd7\x62\xf9\xf1\x25\x6e\xc1\xf1\x26\xe0\xd2\xbe\x8e\x2f\xb1\x4b\x8f\x0a\xf6\x69\x03\x0b\x7a\x74\x9a\xf7\xfa\x7c\x05\x1e\x25\xaf\x13\x11\xa6\x3e\x6e\xe5\xc7\x97\x81\x8a\x05\x68\x32\x51\xbc\x35\x47\x83\x15\x7d\x75\x3e\xd8\xf6\x7a\x03\xd8\x9e\x36\xd8\x64\xd4\x90\xd8\x9e\xf6\xb0\x3d\x1b\xc7\xf6\xbb\x3a\x55\x27\x14\x3a\xec\x13\xf5\x43\xa2\xc5\x4c\xd1\x56\x6f\x7b\x2f\x67\x4b\xf4\xa2\x74\x58\xb6\x20\x59\xdf\xf9\x88\xef\x6b\x5f\x65\x2a\xd7\x7c\xff\x6c\x93\xef\x48\xae\x41\xeb\x32\x63\x01\x24\x2d\x68\x2c\x20\xd5\xd0\x4f\x5b\x68\x7b\x48\x82\xc1\x62\xb6\x7c\x2e\xb3\x94\xc3\xce\x7c\x98\xce\x97\xb5\xb3\x2f\x97\x90\xe8\x39\x42\xbc\x78\x81\x6e\x49\x8c\x4e\x3c\x68\xbe\x32\xa9\x3b\xfd\xe0\x41\xcb\x24\x98\x76\xdd\x3f\xb8\x4a\xd3\x27\x68\x4f\x7b\x6e\x33\x74\xd4\x75\x9d\x06\x87\x11\xf9\xb3\x2d\x91\x77\xe7\x3c\xda\xee\x6e\x34\xe3\xd1\xef\xb2\xe2\x4a\x43\x03\xb3\x1d\x43\xe6\xa2\xe0\xda\x3d\x7f\x36\x42\xe3\xe9\x96\x34\x5c\x63\xdb\x8a\x2d\xd6\x67\xcb\xb5\xd3\x4a\x20\xfc\xbe\x28\x9f\x4a\xc7\x38\x7e\xab\x4d\x28\xb6\x76\x68\x1d\xf3\x64\xc3\x4d\x06\x3e\x05\x39\x36\xfa\x59\xe3\xc7\x59\x89\x58\x05\x43\x20\xc4\x4b\x73\x4e\x78\xec\x41\x1f\x8c\x45\x5b\x9b\x97\x23\xaf\x09\x00\x46\xb8\x63\xaf\xee\x8e\x84\xb6\xb9\xfc\xb1\x57\x77\x46\xc1\x59\xc6\xad\x83\x03\x74\x34\x73\x05\xbf\xcd\x87\xf5\x6b\x0e\x19\xe3\xa1\x11\x69\xe1\xab\x8e\xc3\xcd\xb8\x32\x62\xdc\xdb\x85\xd4\xba\xd5\x71\x63\x70\x9b\x37\xb9\xc4\x4d\xa3\x89\x96\x84\xec\x6c\x32\x00\x4a\x04\xa4\x87\x80\x0c\x10\x38\xa5\x28\x72\x8f\xd5\xf2\xc2\x21\xc4\xb9\xe6\x0d\xc7\xad\x6b\xbc\x47\x93\x7f\x28\xf6\xe5\x0f\xb7\x6b\x66\xe0\xab\x2b\x7e\xcc\x35\xaf\x39\x6e\x5d\x48\xc7\x08\x3f\xb4\x18\xe7\xcb\x8b\xcf\x9f\xa0\xfd\x61\x69\x7a\x23\x19\xe8\xdb\xea\x69\x9d\x69\x48\x31\xbe\xf5\x26\x33\xe1\xf9\xe8\x4b\x5b\x07\x8b\xcd\x11\x3b\xf9\x4a\xb7\x85\x70\x49\xc7\x62\xc7\x3f\xd7\xb6\x28\xc3\x24\xcd\x8d\xef\x8a\x1a\xc0\x37\x33\x3e\xa2\xdd\x70\x1a\xe8\x2e\x4c\x5e\x0d\xe7\x81\xae\xbb\x97\x0a\x5f\x67\x2b\x15\x6c\x92\xca\x78\x39\xef\xee\x77\xc2\x3b\xe8\xa0\xcb\xff\x0e\xba\xdb\xff\x01\x88\xc3\x02\x4d\xb3\x9b\xeb\x9f\x64\x13\xd4\x67\xcf\xe1\xe9\xd3\x8c\x35\xf3\xc6\x39\x48\x74\x60\x54\xbd\x0e\x52\xcf\x02\x0e\x71\x1e\x18\x37\xd3\xbd\xfa\xaf\x73\xce\xff\xc6\x87\x48\x67\x6c\x3d\xab\x8d\x7b\xa3\xbb\xe8\x07\x5c\x7c\xce\x64\xe1\xf8\x9c\xd0\xe6\x29\xbd\x2d\x9d\xdf\x7e\x0e\xb1\xa5\x67\x9f\x95\xd3\x52\x43\x35\x31\xa7\x27\x9c\x5b\xcd\xcd\x69\xa8\xd4\xf4\x9c\x8e\xea\xba\xf3\x8a\xad\x28\xdc\x9d\x78\x3a\xe8\xc4\xd3\xeb\x76\xe2\xe9\xa0\x13\x4f\xb7\xeb\x84\x59\x55\xd2\x74\x95\x93\x55\x4b\xb4\xe2\xd5\xaa\xe4\x1f\xb9\x61\x03\x22\x52\x87\xbb\x65\x3c\x38\x3b\x5f\xcf\x6a\x36\x4c\x22\x32\x40\x3e\x1b\x42\x7e\x7e\x79\x62\xc3\xe9\xa1\x86\xf4\x74\xe8\xc2\xd6\xf3\x44\x37\xb4\x6b\xd2\x1e\xbf\xd4\x16\x4a\x43\x38\x6b\x0e\x3b\x6d\x10\x21\x36\x5c\xcc\xa9\x3f\xb6\xfb\x33\x9d\x62\xff\xba\x5d\xf3\x9a\xdb\x35\xfd\x6d\x37\x6b\xfa\x63\x5b\x35\x7d\xc7\x46\x4d\xff\xeb\x36\xcd\x9b\xde\xa6\xe9\x6f\xb8\x49\xd3\xa0\x96\xce\x16\x4d\x7f\x93\x0d\x9a\xbe\xfd\x18\x7e\xb3\xf1\xf0\x1e\x0d\x3e\xbd\x9b\x52\xfc\x2f\xb2\x5d\xb3\x5f\x60\x27\xc4\xe4\x77\xdb\xc3\x59\x97\xdb\x11\x34\xff\x58\xe5\x76\xae\xb5\xdb\x52\x3d\x6e\x77\x7b\xd6\x30\x5b\x15\xe4\x09\x31\xe9\x6c\x0b\x09\x31\xb1\x6e\x33\xa1\x1b\x16\xe4\x11\x80\x9d\xad\x26\x54\x55\xb5\x08\x31\xb9\xb1\x23\xc4\x7a\xf7\xad\x35\x79\x06\x9b\x1c\xbc\xcb\x2c\x4d\xd3\x24\x0f\xf3\xa9\x56\xb0\x67\x67\x6a\x82\x8c\x48\xc2\x48\x42\x98\x5e\xce\x67\xc7\x50\xb7\xc7\xd0\x34\xc1\x61\xe2\xe1\x90\xe9\xd5\x7f\xcc\x44\x70\x48\x0a\x9e\xc9\x9a\x41\x75\x6d\xa0\x0d\x89\x44\xb1\xef\x93\x28\x92\x65\x85\x54\xe5\x20\x33\x11\xca\xd3\x20\x60\x34\xd6\xeb\x0a\x6d\x48\x24\x4f\xbd\x8c\x70\x2f\xd7\xcb\x10\x99\x89\x04\x71\x1a\x06\x14\xe7\x7a\x91\xa2\x5e\x6a\x7a\xd3\x55\x8a\x84\x3d\x5d\xb3\x4a\x11\x8e\xbe\x96\x29\xba\xa1\x9c\x88\x6e\x5d\xa6\x48\x34\x19\xcb\x8b\xf4\x98\x31\xcc\x8c\xe8\xd7\x32\x45\x37\x9f\x1b\xd1\x4d\xcb\x14\x19\x95\xd3\xcd\x8f\xe8\x68\x99\x22\x9f\xba\xcb\x14\x89\x61\xfc\x1e\x25\xa6\x6c\x89\xfc\x8b\x64\x4b\xff\xd2\x87\x5b\x6e\xf6\x60\xcb\x17\x3a\xb2\x72\xfd\x24\x4a\x3e\x6a\xba\xab\x10\xfd\x52\xef\xe0\x35\xdc\x75\xd3\xdd\xe4\xbb\xcf\xce\xce\xe6\x57\x13\xf5\xe3\x14\xb1\xd5\xc9\xf9\x29\x5f\x54\xeb\xfe\x9d\x3c\xfa\xf1\x99\x96\x1f\x28\xa5\xd4\x92\xe8\x91\xf7\x2e\x03\x42\x19\x29\x12\xc8\x2b\xf2\x98\x50\xc6\x09\xd9\x99\x0e\xe1\x62\xec\xc7\x41\x90\x40\x99\x41\xe2\xf3\x22\x0a\xb3\x5c\x4f\x0d\x06\x0d\xd2\x30\xf3\x8a\x34\x2b\xe0\x02\x84\x2c\xc8\xfd\x94\x14\x26\xc4\x3c\x49\xc3\x3c\x65\x21\xdc\x9e\x8d\x69\x92\xa7\x69\xe6\x44\xec\x27\x61\x94\x91\x30\x85\x74\xc6\x0f\x68\x1a\xfa\xd4\x84\x38\x4c\x0a\x8c\x71\x01\x1c\xa7\x91\x17\xe6\x1e\x4e\x9c\x88\x13\xe2\x17\x94\x30\xb8\x72\x9b\x15\x38\x09\x8a\x24\x35\x21\x66\x29\xce\x42\x9e\x03\xc7\x39\x8b\x72\x8a\x31\x75\x22\xce\xa9\x17\x33\x26\x65\xcc\x7c\xcf\xf7\x48\x60\x94\x31\x26\xd4\x0f\x53\x79\x67\x44\x10\xc6\x5e\x54\xa4\xdc\x89\x98\x04\x3e\xa6\x61\x0a\x77\x47\x04\x9c\x07\x29\xa1\x99\x51\x14\xa1\x97\xc5\x79\x06\x17\x88\xe7\x61\x51\xa4\x01\x27\x4e\xc4\x31\x49\x79\x98\xc7\x20\x8a\x82\xc4\x29\x4d\x22\xa3\xf2\xa8\x97\xf3\x14\xcb\xcb\x2b\xfc\x14\x47\x49\x94\x62\xb7\x8c\xd3\x3c\xf3\x22\x59\xa1\x92\x84\x59\x8c\x89\x1f\x9a\x10\x67\x38\x49\x0b\x2c\x19\xc8\x8a\x28\x21\x51\x12\x38\x11\xf3\x20\x49\xa3\x24\x03\xd9\x25\xbc\xc0\x01\xcb\x8d\x32\xe6\x45\xca\x83\x98\xc2\x35\xe2\x3e\x0d\x0a\x12\x72\xdf\x89\xd8\x2b\x32\x9c\xe4\x19\x34\xa0\x29\xcd\xf2\x30\x35\x72\x4c\x02\x2f\x63\x38\xcb\xe0\x92\xf6\x98\x65\x49\x16\x85\x6e\xe5\xe5\x3c\x21\x59\x04\x0e\x12\x26\x24\xf5\x48\x6c\x44\x1c\xb0\x38\xa0\x01\x83\x77\x84\x88\xb3\x88\x07\xd4\xcd\x71\x98\xa5\x1e\x4b\x72\xe0\x24\xcd\x03\x5c\xa4\x79\x60\x74\xe9\xa8\x48\x28\xcd\x01\x31\xf5\x31\x0e\xfd\xd4\xcd\x71\x42\x7d\x1e\xe2\x90\x80\x4b\xf3\x28\xca\x0b\x66\x76\x10\xea\xe3\x2c\x8a\x20\xc3\x27\x79\x1a\xf8\x04\x7b\xee\x58\xe1\x79\x3e\x89\x33\x2a\xef\x7c\x2f\x52\x82\x7d\xa3\xb9\xa5\x45\x98\xc4\x45\xa6\xea\x9b\xf2\xc2\xe3\xdc\x6d\x15\x59\xc4\x3d\x2f\x2d\xc0\xf0\xfd\x9c\x51\x5a\x64\x46\xab\xc8\x43\x16\x27\x38\x00\xc4\x89\xef\x31\x16\x13\xb7\x28\xbc\x28\x63\x91\x1f\xca\xeb\x5d\x3c\xcf\xa7\xc4\xec\x20\x38\x20\x09\x49\xe4\xbb\x97\xc7\x3c\x1e\xf1\xd8\x2d\x0a\x12\xa7\xb1\xc7\x28\x04\x97\x20\xca\x09\x29\x0a\xa3\x4b\x13\x8e\x85\x98\x40\x64\x61\x46\xa2\x2c\x21\x91\x13\x71\x90\x93\x2c\xca\x0b\xb0\x8a\x90\x65\x01\x61\x3c\x37\xc6\x0a\xdf\xa7\x5e\x8e\x41\x64\x49\x9e\x84\xa9\x9f\x17\x4e\xc4\x51\xe8\xb1\xd8\x0f\x03\xe9\x20\xac\x88\xfc\x9c\x9b\xcd\x2d\x62\x1e\x4b\x21\x6e\xfb\x59\x1c\xa7\x84\xb9\xc3\x26\xc5\x19\xc9\x12\x22\xa3\x5b\xcc\x73\xc6\x79\x64\x42\x9c\x90\x98\x90\x4c\x8a\x0c\x07\x94\xf8\xa1\x9f\x3a\x11\x33\x92\x16\x9c\x32\x19\x67\xb3\x02\x7b\x7e\x64\x74\x10\x46\x31\x8b\xa2\x00\x38\x4e\xb3\x80\xf8\x9e\xe7\x8e\x6e\x19\x09\x52\x9a\xc6\x1e\xc4\x59\xaf\xa0\x49\x9c\x60\x63\x74\x8b\xa3\x2c\xc4\x0c\x64\xec\x45\x61\x90\x72\xdf\x6d\x15\x39\x4e\x08\xa7\x38\x01\xc4\x11\x2f\x42\x82\x8d\x63\x5e\x1e\x25\x89\x17\x11\xd0\x45\x18\x46\x21\x4b\x46\x3c\xaf\x08\x3c\xee\x87\x52\x76\x61\x1c\x63\xe2\x11\x66\xb4\x63\x2f\x62\xcc\x93\x3d\xf3\x49\x9a\xe6\x38\x75\x2b\x0f\x27\x2c\xc8\x30\x86\xb0\x99\xd2\x9c\xe4\x5e\x66\xe4\x18\x73\x3f\x8e\x32\x4f\xda\x31\x0e\x30\x4b\x43\x77\x74\x23\x71\x40\xe3\x38\x00\x3b\xce\x0b\xca\x79\x9a\x24\x26\xc4\x7e\x90\x7a\x69\x96\x42\xcf\x38\x4e\xd2\x80\x8e\x98\x9b\x9f\xe0\xcc\xcb\x52\x50\x4a\x16\x66\x49\xc8\x22\xdf\x18\x8f\x79\x4e\x19\x0b\x20\x6c\x72\x3f\xc0\x94\x65\x6e\x73\x0b\xd3\x24\xcb\x58\x50\xc8\x91\x21\xf2\xb9\x1f\x1b\x11\x47\x94\xf0\xa8\x90\xc1\x2a\x8f\x52\x92\x52\xe6\x16\x45\x1c\xd0\x82\x12\x0e\x0e\x12\xe6\xbc\x48\x89\x39\x56\xc4\x94\x85\x91\x2f\x47\x9a\xc0\xc7\x31\x29\x22\xb7\x55\xd0\x20\xa3\x31\xc5\x32\x13\xc2\x85\xc7\xd2\xd8\x18\x36\x69\x96\xc5\x1e\x91\xca\xc3\x2c\x0a\xfc\x84\xbb\x73\xb7\xc4\x4b\x79\x51\x14\x4c\x66\x91\x91\x8f\x39\x31\x5a\x05\x0b\x42\x2f\xca\x38\x78\x5e\xce\x29\x49\x73\xee\xce\xdd\x52\x5e\x24\xcc\x2f\xe4\xc8\x40\xb2\x28\x4e\xb0\x39\xaf\x88\x62\x1c\xd3\x42\x0e\x61\x7e\x4c\x42\x9f\xb8\x95\x97\x31\x12\xfb\x3c\x03\x19\x73\x46\xa2\x08\x27\x46\x19\xe7\x98\x46\x29\x95\x43\x13\x11\x86\x44\xba\x93\x80\xc3\x44\x84\xe5\x2c\xce\x73\x70\x90\x2c\xe7\x1e\x4f\xb1\x31\x6c\x16\x61\x9c\x07\x45\x5c\xa8\x41\x97\xe7\x38\x76\xdb\xb1\x17\x15\x5e\x14\xcb\x7c\x21\x26\x38\x8e\x8a\xd4\xe8\xd2\x1e\x8b\xfc\x38\xcf\xc0\x41\x18\xc9\x68\x42\x99\x7b\x04\xc1\xd8\x2f\x12\xea\x05\x6a\xe2\x2e\xf1\x72\x66\xe4\x18\xa7\x31\xf6\x52\x5f\xc6\x63\x1f\x67\x41\x8c\xdd\x32\x26\x34\x4f\xe3\xb8\x08\xa5\x55\x78\x41\x9c\x53\x63\x3c\xf6\x49\xc6\x58\x1a\x83\x55\x04\x5e\x16\x93\x20\x71\x3b\x88\x9f\x25\x3c\xe5\x1e\x88\x02\x87\x59\x92\xf2\xd4\xa8\xbc\xc0\xc7\x79\x14\x67\xd0\xb3\x24\xc3\x9e\x97\x07\x6e\x3b\x0e\xb2\x2c\xcc\x03\x99\x78\x67\xa9\xcf\x03\x92\x1a\x87\x26\x91\xae\x90\x24\x81\x60\x55\x64\x51\x18\x73\x11\x5e\x5d\xb1\xa2\xc8\xd2\xa8\x60\x72\x90\x64\x79\x54\x30\x6e\xe4\x38\xca\x82\x00\x27\x14\x10\x07\x2c\x88\x43\x8a\x63\x35\x89\xfa\xce\x71\x6c\xb5\x7d\x2f\x7c\x7d\xdd\x13\xaa\xb6\x6b\xd0\x5e\x77\x4e\xa8\xfe\x72\xbd\x13\xaa\x21\x26\x9b\x2d\x1d\x18\x96\x23\x6e\xbe\xfa\xe8\x75\x97\x0e\x22\xe6\x25\xbc\x9e\x70\xf7\xd3\x2c\x4b\x3c\xcb\xd2\x41\x9a\x46\x31\xe3\x72\xf8\xa5\x41\xc6\x58\xdc\x4d\x5d\x1c\x44\xfc\x2c\xe2\x85\x1f\x43\x24\x2b\x78\x12\x14\x54\x44\x32\x13\x24\x0b\x83\xa2\x08\x7d\xf0\x82\xb0\xc0\xb9\x1f\x15\x9b\xce\xea\x87\xd8\xe3\x21\x91\xc1\x87\xe5\x3c\xa2\x24\xb7\x2c\x1d\x24\xa9\x17\x46\x54\x1a\x24\x49\x7d\x1e\x65\xb8\xd8\x90\x08\x2e\xa8\x9f\x27\xd2\xe6\x8b\x34\xc0\x69\x1e\x59\x7a\x12\xa6\xdc\xcb\x72\x99\x06\x61\x3f\xe6\x04\xc7\xc9\x36\x4b\x07\x37\x7d\x8e\x74\x93\xd2\xb0\x00\xe7\xd9\x2b\xbf\x3e\xc1\xf6\xd2\xaf\x4f\x88\xbd\xf6\xeb\x13\xdf\x5e\xfc\xf5\x49\x60\xaf\xfe\xfa\x24\xb4\x97\x7f\x7d\x12\xd9\xeb\xbf\x3e\x89\x2d\x05\x60\x65\x07\xa1\x3c\xac\x71\x1f\xb8\x7c\x3e\x97\xcf\x87\x87\x3d\xa4\x0c\xa0\xb9\xf1\x08\x94\x7c\x3e\x97\xcf\x2d\xcd\x09\x34\x27\xd6\xe6\x64\x2e\x9f\x5b\x9a\xfb\xd0\xdc\xb7\x36\xf7\xe7\xf2\xb9\xa5\x79\x00\xcd\x03\x6b\xf3\x60\x2e\x9f\x5b\x9a\x87\xd0\x3c\xb4\x36\x0f\xe7\xf2\xb9\xa5\x79\x04\xcd\x23\x6b\xf3\x68\x2e\x9f\x5b\x9a\xc7\xd0\x3c\xb6\x36\x8f\xe7\xf2\xb9\x61\x5b\xdf\x86\x45\x8f\xa5\x65\x98\x90\x33\x69\x14\xfd\x8a\x7b\xb0\xe5\x56\x1a\x84\xa9\x55\x2a\x6d\xc1\xd4\x2a\x93\x76\x60\x6a\x95\x49\x13\x30\xb5\xca\xa5\xfa\x4d\xad\x72\xa9\x79\x53\x2b\x2e\xb5\x6e\x6a\xc5\xa5\xc2\x4d\xad\x0a\xa9\x6c\x53\xab\x42\xea\xd9\xd4\xea\x44\xea\xd8\xd4\xea\x44\xaa\xd7\xd4\x6a\x26\x55\x6b\x6a\x35\x93\x5a\x9d\x9b\xea\x0e\xba\x8e\xee\x6e\x78\x1d\xaa\xb5\x9e\x76\x4d\xff\x75\x29\x6b\x0f\xdb\x8e\x9b\x3f\x82\x11\xbc\x5e\x3e\x1b\x82\x6c\x50\x28\x5a\x92\x11\x22\x78\x5d\xd6\xa7\x0d\xf4\xaa\xd1\xe8\x2e\x22\xef\x00\xd2\x5c\xcb\xb5\xc5\x31\x97\x38\xd4\xf9\x82\x3e\x0e\x38\x35\x7f\xad\x0a\xd4\x07\x07\xe8\x3f\xa0\x1a\xb1\x9d\x78\x5d\xd2\x79\xab\x0a\xd5\x97\xb3\xa6\xce\xf1\xe5\xd8\x59\x3c\x05\x36\xd7\x5a\xb8\xcf\xe3\x49\xa8\x59\xa7\x0a\xf6\x4c\x16\xff\xd5\x8b\x57\xcf\xa1\x44\x71\x5d\x0e\xb8\x03\x47\x07\x70\xb0\xe9\xf5\x3d\xea\x82\xc5\xae\x13\xa6\x12\x72\xde\xe1\x62\x3e\xe4\x62\x66\xe2\x62\x3e\xe4\x62\xa6\x73\xd1\x85\x8b\x87\x70\x96\x4a\xc6\xba\x4a\x2d\x35\x73\x3e\x6a\xb5\xb7\xb7\x29\xbe\xdd\x6a\x14\x6f\xa6\x51\xdc\x6a\x14\x6f\xa4\x51\x3c\xeb\x14\xf8\x9e\xd5\x55\xb8\xb5\xc2\xdc\x73\x55\xab\x5b\x13\x12\x56\x12\xee\x82\xc1\x3e\xe6\x44\x53\x69\x8d\x2f\x1a\x55\x29\x9e\x77\xd8\x98\x1b\xd8\x98\x99\xd8\x98\x0f\xd8\x98\x75\xd8\xe8\x22\x8c\x06\xf8\x48\xe4\xd4\xe9\x56\xb5\xc3\x5d\xa1\x24\x6e\xd5\x1e\xbb\xd4\xfe\xba\x8c\x65\xe4\x32\x0e\xcc\x3d\xc8\xb9\x82\x74\x9c\x09\x97\x90\x38\xd2\x02\x89\xf5\x56\xe8\x1a\x56\x32\x80\x8d\x99\x45\x1f\x76\x5e\xc3\x8e\xf2\xd0\x46\x9a\xb9\x10\x5a\x19\xf7\x47\xae\x2e\x78\x1b\xca\x66\x12\x7c\x06\x35\xdb\x04\x1e\xa1\x49\x6f\x07\x3d\xa8\xbd\xb3\xf9\xe5\xff\x47\x18\xdd\x43\x83\x6d\xd3\x43\x3e\xc4\xbf\xb5\x06\xc7\xd9\x10\xff\xee\x36\xde\x62\xe1\x02\x5f\x97\x0b\x90\xe2\x86\x3c\x48\xed\x0c\x39\x90\x9a\x18\xd0\x37\x23\x6d\x47\xc5\xd7\xa5\x4d\xbd\xed\xa8\xf7\xba\x34\x31\x67\xaf\x89\xaf\x8a\xe2\xcf\xd0\x6d\x54\xcc\x54\x59\x7c\xf1\xc5\x7c\x8e\x4f\xb6\x91\xbe\xcf\xe7\xa2\xcd\x5c\xb5\x11\x5f\x4e\xe6\x8e\x62\xfa\x33\xa8\xa6\x2f\x50\xa7\x92\x0e\x7c\xce\xe4\xe7\x54\x7d\xb6\x37\x9f\x43\x73\x41\x25\x95\x24\xe1\x73\x26\x3f\xa7\xea\xb3\xbb\x24\xff\x4c\xd6\xe4\x57\x01\x47\x8e\x2b\x6c\x2e\xcb\x4b\xef\xc8\xe2\x07\x6c\x56\x57\xec\x57\x0f\x3b\x35\xfb\x67\xda\x2d\x12\xac\x1e\x75\x9c\x95\xf9\xe1\x6d\x6a\xd2\x20\x52\x34\x67\x5d\x9a\xf3\x0e\xcd\x59\x97\xe6\x5c\xa7\x39\xdb\x84\x26\x96\xfd\xe4\x6a\x68\x90\xe7\x4d\xb8\x1c\x14\x68\x5d\xf6\x7f\x56\x5f\x5a\xa1\x3d\x0c\xda\x87\x82\xa6\x5f\x3f\x93\x65\xb8\xdd\x34\x65\x3f\x15\x70\x4d\x73\xd6\xa5\x39\xef\xd0\x9c\x75\x69\xce\x75\x9a\xb3\x96\xa6\x31\xeb\x1c\xbf\x87\xc0\xcc\xeb\x8f\x50\x7d\xe9\x47\xfb\x61\xaa\x1f\xc1\x79\x7f\x2c\x5d\xc7\xa8\x7e\x84\x60\xf0\x63\x69\x0b\xa1\x1f\xe1\xa2\x04\x01\x33\x9b\x37\x2c\x9a\x9c\x52\x02\x0a\x82\xb3\xb6\x2f\x32\x5c\x54\x58\x0f\x17\xb3\x4d\x62\x55\x4b\x56\xfc\x2b\x24\xe2\xa6\x59\x01\xa9\x6c\x66\x22\x98\x5d\x8b\xe2\x8f\xc6\xd0\xd3\xa7\xf8\x63\x69\xa2\xf8\x63\x79\x1d\x8a\xe6\x60\xd7\xa7\xf8\xda\x48\xf1\xb5\x89\xa2\xd9\xda\xfa\x97\x57\x58\x48\xc2\xe4\x45\xed\xf6\x00\x68\xe5\x0e\xe6\x41\xea\xa8\xb4\x2b\xc3\x23\xb0\x48\x74\x16\x6b\x5c\x9b\xb1\xf9\xf3\x59\xce\x2a\x8e\x2e\xdc\x6f\xfa\xe2\x0f\xde\x37\x8d\xf6\x0d\xaf\x9b\x27\x26\xb6\x61\x00\x2a\x4c\x6d\xe0\xc5\xb6\x30\xb5\x81\x77\x68\x6e\x6a\x03\xaf\xd0\xdc\xd4\x06\x5e\xc9\x27\xf9\x1c\xae\xef\x98\xdb\xee\xef\x80\x77\xfa\x49\x3e\x03\x28\x29\x3a\xae\x4b\x2e\x1f\x08\xcd\x7a\x13\x88\xc0\x94\x99\x78\x84\x29\x85\xcc\xc4\x23\xcc\x5e\xa4\xa6\x36\x30\x79\x91\x9a\xda\xc0\x3c\x09\x33\xb5\x81\x69\x92\xc1\x6d\x06\xe2\x0f\xa6\x5d\x26\xd2\xd4\x2b\x62\x15\x06\x4c\xdc\x4c\xa4\x1c\x84\x65\xed\xb6\x23\x8e\x94\x46\x35\x4c\x76\x6e\xf4\xb2\x12\x6d\xce\x10\x32\x83\x27\x60\xff\x6c\x90\x0d\x3c\x69\x8a\x51\x4c\x9e\x80\xdd\x33\xc9\xec\x13\x4f\xe7\x96\x0d\x99\xed\xe3\xd1\x66\x19\x25\x41\x10\x51\x3a\x24\x88\x5b\x82\x20\x9e\x54\x11\xec\x44\x82\x74\x9c\xa0\x36\x2f\x29\x09\x12\x08\xb1\x43\x82\xa4\x25\x48\x66\xf5\xb8\x34\x01\x78\x2d\xbc\x8e\x13\xd4\x66\x32\x25\x41\x5f\x10\xcc\x87\x04\xfd\x96\xa0\x2f\x68\xe5\x8a\xa0\x3f\xe2\x0e\x7d\x3c\xda\xdc\xa7\x24\x18\x08\x82\x7c\x48\x30\x68\x09\x06\x82\x16\x57\x04\x03\x9d\x20\x1f\x27\xa8\xcd\x96\x4a\x82\xa1\x20\x58\x0c\x09\x86\x2d\xc1\x50\xd0\x2a\x14\xc1\x50\x27\x58\x8c\x13\xd4\xe6\x57\x25\xc1\x08\x5e\x2a\x86\x04\xa3\x96\x20\x64\xef\x27\x8a\x60\xd4\x79\x89\x18\x27\xa8\xcd\xc8\x4a\x82\xb1\x20\x38\x1b\x12\x8c\x5b\x82\xf0\xda\xa4\xc6\x64\x01\xef\x4a\x02\x3e\xfb\xec\xc5\xd7\x4b\x71\x6e\xee\x52\x1c\x2c\x92\x7b\x75\xb3\x99\x40\x06\x75\x58\x7c\xef\xa6\xaf\xc5\x31\x93\xc1\xff\x94\x17\xe3\x1c\x2d\x17\x1f\xf9\x4a\x56\xf9\x45\xd5\x12\xf9\x64\x2f\x2d\x2b\x91\xa0\xe4\x88\xc1\xfe\xec\x94\x17\xcb\x15\x57\xdb\xa9\x07\x5a\xd3\xce\x9a\x68\x6b\x77\xd5\xf2\x8d\x4f\x6e\xe2\x22\x9e\x3f\xea\x15\x3c\x3a\x9f\x4d\x7d\x90\x7b\x08\x7b\x24\x38\xf0\x55\x9d\xe2\xaf\xa7\x9b\xac\x47\x95\x42\x4c\xb6\x3d\xdd\x24\x9a\x8c\x9c\x6e\xea\x6c\x6b\x18\x9c\x6e\x0a\x31\xf9\x7a\xba\xe9\xa6\x4f\x37\x09\xad\x6c\x76\xba\xc9\xa8\x9c\xce\xe9\x26\xa9\x20\xe7\xe9\x26\x79\x8e\x76\xc3\xd3\xdf\xfe\x1f\xfa\x3c\x13\x5f\x64\x7b\x29\x5b\xf3\x28\xe8\x3d\x38\xcd\xc3\x3e\xe8\xc7\xb3\x0f\x79\xd1\xfb\x31\x2b\xcf\x66\x7c\xf5\xbb\x1c\x89\xd2\x58\x85\xef\x82\x43\xf9\x40\x32\x06\x9f\x75\x7e\xfe\x15\x8e\x4e\xbd\xde\xe8\x4e\x20\xd8\x3c\x73\x04\x5d\x6f\xe0\xb4\xdf\xc6\x8f\x42\x1d\x1c\xa0\x17\x7c\x75\x0a\xa3\xe8\xd1\x6c\x59\x66\x1c\xe1\xfe\xb5\x29\xa2\xf9\x8b\x23\xdc\x3d\xbb\x14\xc6\x53\x14\x24\x53\x14\xe0\x29\xf2\xfd\x29\x22\xe1\x14\xe1\x78\x8a\x92\x29\x42\x58\xdb\x6a\x14\xd2\x29\x0a\xbd\x29\x0a\xc8\x14\xf9\xc1\x14\x91\x68\x8a\x30\x9d\x22\xec\x4d\x11\xd1\xe1\x92\x29\x0a\xf1\x14\x05\xfe\x14\xf9\xe1\x14\x91\x78\x8a\x70\x32\x45\x58\xe0\xd7\xe0\x22\x6f\x8a\x42\x32\x45\x41\x30\x45\x7e\x34\x45\x91\x3f\x45\x61\x38\x45\x41\x3c\x45\x7e\xa2\x01\xfa\x78\x8a\x88\x3f\x45\x38\x9c\xa2\x78\x8a\x50\x44\xa6\x28\x0c\xa6\x28\x80\xab\x05\x74\x40\xc1\x09\x99\x22\x1c\x4c\x51\x24\x00\xf1\x14\x85\xfe\x14\x05\xe1\x14\xf9\xb1\x06\x48\x92\x29\x22\x78\x8a\xb0\x20\x39\x45\x88\xd0\x29\x22\xde\x14\x61\xc1\x8e\x04\x7b\xe7\x90\x2b\x31\xcb\x95\x74\xe5\x2a\xb8\x10\x72\x14\xfd\x26\xe2\xf3\x14\xa1\x50\xe7\x56\x11\x16\xdd\x12\xdc\x02\x43\x9e\xce\xa5\xaf\x04\x27\xb8\x12\x00\xd1\x14\xe9\xdd\xc5\x91\x94\x87\x10\x30\x70\xef\x77\x15\x21\x14\x2a\x04\x2c\xe4\xe7\xc7\x52\xb0\x61\xd8\x93\x57\xe0\x29\x6d\x85\x52\xfb\x81\x4e\x41\xa8\x46\x98\x86\x2f\x54\x1a\x49\xb5\x87\xba\x0e\x85\x0a\x84\x3d\x08\xbb\x10\x3a\x14\x82\xad\xb3\x9a\xce\x8d\x50\xe7\xa7\xe7\x73\x06\xd7\xa4\x88\xa4\x72\x3d\x2b\x8b\xc1\x0d\x4f\xe0\x05\x3f\x1c\xff\xf2\xea\xc9\x0f\x8f\xe5\x9d\x52\x42\x62\x64\x8a\xa0\xf3\x42\x42\x54\x58\xa4\x52\x13\x48\x57\x59\x2a\x56\xea\x24\xca\x7a\x41\x20\x54\xa7\xff\xea\xbb\xe7\x6f\xf8\x1a\xb1\x45\xae\x6a\xa3\x9f\x81\x4a\xe5\x7d\x1a\x06\x3e\x04\xfc\x2f\x2f\xba\xfa\xec\xa5\x94\xde\xa5\x77\x0f\x5e\x46\x28\xf1\xbc\x69\xff\x59\xfd\xae\x20\x41\x0c\x00\xa4\x03\x40\x3d\x8f\x0c\x40\x7c\x0d\x64\xf8\x34\xd0\x9f\x1a\x08\x84\x5d\x02\xc4\x40\x20\xea\x32\x69\x02\x89\x7b\xfd\x30\x10\xa2\x1d\x46\x86\x28\x92\x3e\x95\x21\x0a\xa6\x83\x98\x00\xd2\xbe\xb4\x86\x20\x59\x8f\xcc\x00\x20\xef\x77\x65\x08\xc2\x35\x90\x21\x85\xa2\xcb\xe5\xb0\x39\x75\xb5\xc6\x74\x54\x1f\x84\x8e\x10\xf0\xe9\x88\x55\x05\x7d\x22\x06\xbb\xa0\x6e\xbb\x89\xe8\xa8\x61\xc6\xd4\x65\x98\x94\x8e\xea\x3b\xa1\x23\xfa\x66\x7d\x26\x0c\x26\xd1\x27\x33\xe4\x24\xa3\xa3\x1a\xcf\xe9\x88\xd5\x70\xea\xb6\xee\xa2\x4f\xc3\xa0\x79\xab\xba\x54\x94\xc0\x66\x41\x12\xed\xa9\x45\x99\x7e\x07\xc4\x48\x3d\xe8\x62\x31\xf5\x31\xd4\x41\x8c\x36\xa1\xf3\x69\x78\x1e\x77\xd9\x70\xf8\x06\x76\x98\x7f\xd2\xe7\xd4\x1a\x28\xb0\x43\xa3\x69\xb7\x33\x06\xab\xe8\x74\xc6\x1a\x27\xb0\xc3\x7e\x79\x0f\xc4\x16\x2a\xb0\x39\x14\xd0\x51\x51\x60\x3a\x2a\x0a\x42\x47\x55\xef\x53\xb7\xda\x82\x1e\x0a\x5b\xac\x70\x89\x3b\xa2\x2e\x13\x8e\xe9\x88\x32\x28\x1d\x91\x64\x42\x47\x4d\x8b\x51\xb7\x42\xd3\xbe\xbc\x0d\x83\x47\x9f\xca\x10\x24\xa7\x2e\x95\x72\x3a\xe2\x42\x45\x5f\xa3\xfa\x1d\x55\xd3\xb1\x2c\x23\xf0\x3c\x1a\x78\xd8\x1a\x41\x14\x8c\x35\xcd\x68\x14\x68\x8b\x20\x35\x11\xcf\x44\x24\xe8\x12\x31\xc2\x84\x5d\x3c\x46\x66\xa2\x2e\x1e\x23\x4c\xdc\xc2\x18\xa8\xe8\xc1\xd6\xd8\x3c\xe9\x93\x30\x20\x61\xfd\xee\xd8\x13\x0e\x45\xc8\x80\x24\xeb\x08\xd6\x00\x90\xb7\x00\xd6\x00\x22\x59\x30\x34\x2e\xfa\x5a\xb1\xe6\x5d\x4e\x61\x62\x3a\xd2\x0b\x42\x5d\xd2\xf6\xfb\x24\x4c\xb6\x41\x7b\x7a\x37\xd9\x06\x1d\x17\x78\x44\x47\x0c\x35\xa6\xe3\x86\x4a\xe9\x88\x52\x12\xea\x50\x0a\xa3\x6e\x5f\x4a\xfb\x1c\xd8\x03\x89\xd3\x55\x72\x3a\x62\xc4\xbc\x2f\x53\x7b\x3c\xb1\x5a\x90\xfe\x02\x62\x78\x8a\x37\x70\x7b\x4c\x36\x70\x26\xec\x6f\xe0\xf8\x38\xd8\xc0\x9e\x71\xe8\x74\x7d\x1c\x8d\xb9\x24\x8e\x47\x82\xa1\x9e\x82\x9b\x31\x24\x63\xe1\x12\xb3\x31\xbf\xc7\xe9\x06\xd1\x12\x67\x63\x81\x0c\xe7\x1b\x04\x4b\xcc\x37\x08\x65\xb8\xe8\x6b\xc8\x68\x2e\x63\xa1\x02\xe3\x31\x0f\xc5\x64\x03\x07\xc1\xfe\x88\x97\xe1\x60\x93\xc0\x16\x6e\x10\x76\x70\xe4\x8c\x6e\x38\xde\x20\x2c\x61\xba\x81\x2f\xe2\x64\x03\xaf\xc7\x6c\x83\x68\x8a\xd3\xb1\x08\x86\x33\x57\x08\xc3\xf9\x58\x58\xe0\x1b\x84\x51\x5c\xf4\x22\xd4\x36\xa9\x0a\xf6\x02\x4b\x30\x32\xb3\x4c\x3a\x52\xc1\xd6\x14\x45\xe2\x36\x61\x0f\xb4\xe7\x9e\xe1\x79\xd8\x53\xce\x10\x22\xea\x08\xcd\x44\x23\xee\x40\x8c\x0f\xc7\xf6\xdc\xa4\xa5\x62\xcb\x4c\xea\x9e\xda\xb2\x92\x96\x8b\x21\x9f\x59\x4f\x9a\x43\x88\xbc\x23\x2d\x5b\x6a\x02\x18\x2c\x69\x89\x6a\x6b\x96\x80\xab\x7b\x98\x8e\xb1\x4f\xa8\xdd\x50\x7c\x3a\x66\x28\x01\x1d\x53\x74\x48\xdd\x9d\x8f\xa8\xdb\x94\x62\xed\xf9\xf0\x29\xa5\x76\xd1\x25\xd4\x25\x3a\x46\xc7\xcc\x2b\xa5\x6e\x27\xc8\xa8\xdb\x74\x72\x3a\x66\x18\x9c\x8e\x39\x41\x41\xc7\x4c\xbc\x93\x56\x58\x8c\x00\x8f\xb8\x2b\x26\x23\x16\x8a\xfd\xd1\x90\x81\x03\xa7\xa5\xe2\x70\xd4\xe1\x71\x34\x1a\x35\x70\xec\x8a\xc4\x74\xd4\x13\x71\x32\x1a\x32\x30\x73\x78\x23\x4e\x47\xc2\x05\xce\x46\xa3\x16\xd6\xc3\x81\x81\x04\x1f\x89\xbd\xb8\x18\x0d\x49\x2a\xb5\x70\x76\x13\x3b\xfd\x0a\x93\xf1\xd0\xe2\x3b\x22\x07\x0e\x46\xdc\x1a\x87\xa3\xb1\x05\x47\x4e\x07\xc6\xf1\x68\x6c\xc3\x74\x24\xf8\xe0\x64\xd4\x03\x31\x1b\x09\x03\x38\x1d\x8d\x81\x38\x1b\x0d\x05\x38\x1f\x8d\x47\x98\x3b\x82\x1d\x2e\xba\xd1\x68\x9b\xfc\x81\x7a\x92\xa4\x39\xb6\xd4\xd9\x27\xf6\x02\x4b\x2a\x51\x33\x6d\x78\xee\xb7\x18\x02\xb3\x21\x06\x76\x23\x0a\xbb\x12\x31\xe7\x10\x4d\x72\x6c\x22\x1f\x7b\x9d\xf4\xcf\x3e\x7e\xd6\x2b\x2a\xe6\x0c\xa2\xd5\xad\x39\x7f\x90\xcf\xcd\xb9\x43\x2b\x3e\xdb\x0a\x4a\x2b\x1e\x03\x8e\x5c\xf3\x52\x4b\xe6\x50\x9b\xb7\x39\x77\x68\x15\x6c\xe9\xbf\x53\xbf\x98\xda\xbb\x47\xe8\x18\xf3\x3e\x1d\x13\x40\x40\xdd\x2a\x0e\xe9\x58\x17\x22\x6a\xb5\x9f\x98\x8e\x19\x1f\xa5\x2e\xf9\x25\x5d\xe2\xb6\x24\xc2\x61\x1d\x29\x75\x69\x2f\xa3\x63\xd6\x97\x53\xb7\xfd\x72\xea\x76\xbf\x82\x8e\x79\x08\xf6\x46\x5c\x04\xe3\x11\x2f\xc4\x64\xd4\x0d\xb1\xef\x1a\x29\x9c\x16\x8e\xc3\x51\x17\xc1\x91\x37\xa6\x27\x1c\x8f\x46\x32\x4c\x47\xbd\x05\x27\xa3\xe1\x02\xb3\xd1\x80\x87\xd3\x91\x98\x89\xb3\xd1\xb8\x81\xf3\x91\xb0\x84\xb9\x23\x2e\xe1\xc2\x19\x36\x64\xf6\xe0\xee\x03\x1e\xf5\x4b\x4c\xec\x8e\x89\xfd\x11\xb7\xc7\xc1\x88\xe1\xe3\x70\xd4\x77\x70\x34\x1e\xdd\x62\x47\x78\xc3\x74\xdc\x79\x12\x67\xfc\xc0\x6c\x34\xfe\xe1\x74\x34\x88\xe2\xcc\x19\x44\x70\x3e\x1a\xa5\x30\x1f\x09\x53\xb8\xe8\xc6\x91\xed\x92\x07\x63\x4c\xa9\xf9\xb5\xad\x90\x34\xdc\x18\x53\x86\x7b\xda\x76\x0d\x63\xc6\xa0\x00\x60\x3e\xc5\x98\x37\x34\x39\x9f\xe1\x79\x54\x23\xb0\x01\xc4\x2d\x83\x86\xa7\xba\xce\x6d\x29\x43\xcb\x9f\x25\x67\x68\x7b\x68\xa0\x90\xb6\x0c\x9a\x59\xc8\x3a\x00\xa6\x81\xc3\xea\x7b\x5c\x57\x8e\x01\x75\xd1\x11\x8e\x79\xce\xc1\xd5\x1e\xd3\x11\xe1\x12\xea\xd9\x0c\xc7\xa7\x6e\xc3\x09\xa8\xcb\x70\x42\x3a\x62\x17\x11\x1d\x91\x5a\x4c\x47\x4c\x8f\xd2\x11\xd5\x26\xd4\x26\x77\x46\x47\x74\x9a\x52\xb7\xd5\x66\x74\xc4\x6a\x72\x3a\xa2\x39\x4e\xdd\x86\x5b\x50\x97\xd9\x63\xcf\xe9\xb6\x18\x7b\x56\xbd\x62\x32\xe6\xd3\xd8\x1f\xf3\x49\x1c\x8c\x78\x35\x0e\xc7\x9c\x02\x47\x63\x91\x03\xc7\x23\xbe\xdd\x8c\x7b\x56\x35\xe2\x64\xcc\x81\x30\x1b\x89\x8f\x38\x1d\x8b\x20\x38\x73\x46\x28\x9c\x8f\x45\x18\xcc\xed\x83\x73\x31\x12\x21\x20\x3f\x70\xeb\x0a\x8f\x58\x1a\x26\x23\x9e\x8e\xfd\x31\x67\xc6\xc1\x98\xb3\xe2\x70\x2c\x54\x45\xf6\x50\x84\xe3\xb1\x60\x81\xa9\xdb\x5d\x92\x31\x87\xc7\xcc\x1a\x2c\x70\x3a\xe6\xcb\x38\x1b\x09\x17\x38\x77\x06\x4b\xcc\xc7\x42\x19\x2e\x7a\x01\x67\x9b\xac\x40\xb1\x4d\x4d\x51\xa4\xc6\x69\xca\x0b\x64\x5b\x62\xee\xb3\xdf\x3e\x27\x26\xdc\x41\x2b\x11\x23\xfe\x50\xef\x8f\x29\x2b\x68\x9e\x0e\x71\xc7\x1d\x83\xb6\x8e\x8a\xc6\x6c\x40\x63\x6a\x88\x98\xd5\x64\x8d\x2c\xa7\xca\x40\x4d\x19\x80\x26\xab\xe1\xf3\x5c\x43\x3b\x7c\xca\x9b\xbe\x0e\x9f\x15\x1d\x29\x9b\x7a\xea\x54\x12\xa6\x6e\x25\x11\x6a\xe9\x91\x4f\x5d\xda\x09\xa8\xab\x3f\x21\x75\x5b\x5d\x44\xdd\x96\x11\x53\xbb\x3c\x28\x75\xd9\x45\x42\xed\xf6\xcc\xa8\x5b\xf5\x29\x75\xeb\x30\xa3\x16\x9b\xca\xa9\x5b\x45\x9c\xba\x6c\xaa\xa0\x6e\x53\xc6\xde\x88\x1f\x61\x3c\x62\x7c\x98\x8c\x78\x2a\xf6\x1d\x06\x88\x03\xa7\x9f\xe2\x70\xc4\x15\x71\xe4\x8d\xc4\xa0\xd8\xe9\x73\x4d\x06\x6b\xe1\x3d\xb1\x46\x6d\x66\xf3\x56\x9c\x8e\x84\x36\x9c\x39\xe2\x22\xce\x47\x62\x08\xe6\x23\x3e\x8b\x0b\x67\x70\x13\x23\xba\x85\x71\xec\x34\x25\x4c\x9c\x4e\x8b\xfd\x11\xbf\xc4\xc1\x88\x63\xe2\xd0\xe1\x99\x38\x1a\x89\x35\x38\x1e\x0d\x56\x23\x9e\x84\x93\x11\x1f\xc5\xcc\x11\x00\x70\xea\x8c\x5a\x38\x73\x86\x16\x9c\xdb\xfc\x1f\xf3\x31\x17\x2e\xba\xa1\x67\xfb\xa1\xdb\x60\x23\x35\xab\x81\x87\x0d\x43\xb7\x4a\x35\x0c\x83\xb6\x42\x6a\x6a\x16\x34\x49\x8e\xe9\x69\x68\xe9\x7e\x24\x51\x1a\xc6\xe8\x36\x65\x1a\x3e\xa5\x5a\x07\x4c\xc3\x74\xd3\xf7\x61\x53\xa6\x19\xf9\xf0\x69\xaa\x75\xc2\xf4\xaa\xae\xe5\x71\x86\x61\x5a\xca\x6d\x88\x95\xb7\x72\x33\xbd\xa4\x6b\x99\xef\xb0\xa7\x2e\x31\x60\x6a\x16\x2a\xa1\x2e\xfd\xfa\xd4\xd5\xc7\x80\x3a\x0c\x27\xa4\x2e\xe1\x45\xd4\xd5\x93\x98\xda\xc4\x43\xa9\xc3\xac\x12\xea\x52\x35\xa3\x2e\x8d\xa4\xd4\x61\x08\x19\xb5\x99\x79\x4e\x5d\x96\xcc\xa9\xd9\x62\x0b\xea\x50\x32\xf6\x9c\x5a\xc6\xd8\xe9\xae\xc4\xe9\xaf\xd8\x77\xfa\x0a\x0e\x5c\xee\x80\x43\xa7\x2b\xe1\xc8\xe9\x10\x38\x76\x45\x04\x35\xde\x18\x1f\x25\xce\x68\x81\x99\xcb\x63\x70\x6a\x09\x1a\x38\xb3\x05\xd9\xdc\xe9\xb9\x98\x3b\x83\x02\x2e\xac\x11\x11\x7b\x4e\xad\x63\xa7\x23\x62\xe2\xf6\x6e\xdf\x62\x69\x38\x70\x3a\x1a\x0e\x5d\x2e\x8c\x23\xab\x1f\xe2\xd8\x19\x19\x30\x75\x7a\x3f\x4e\x9c\xbe\x88\x99\x25\x58\xe1\xd4\xe9\x6e\x38\x73\x45\x07\x9c\x5b\xbd\x18\x73\x67\xe4\xc0\x85\x16\x1c\xb6\x19\x53\xa9\x18\xe0\x89\x01\x61\x23\x9c\x61\x3c\xbe\xd7\x2e\x6e\x0c\xc3\xb1\x6c\x37\x0c\xc4\x0a\x9f\xe1\x51\x28\xf1\x11\x23\x1f\x51\xf3\xd0\x14\x84\x15\x27\xe6\x71\x86\x7a\x66\xfe\x93\xa6\xdf\xa6\x10\x2c\xf9\x34\x3d\x4a\x1b\xa4\x06\x3e\xb3\x7b\xf2\xb0\xc7\x30\xfc\x9a\xed\x84\x37\x42\x34\xb4\x29\x14\x13\x86\x47\xf5\xa2\x92\xb5\xe7\xf2\x31\x76\xc9\x54\xc1\x10\x97\xfe\x15\x8c\xef\xd2\xb5\xfa\x3d\x70\x09\x5b\xc1\x84\x76\xb1\x2a\x88\x68\xb4\xcf\xb1\xc5\xb4\xd4\x63\xea\x92\xa8\x82\x49\x6c\x5a\x52\xcf\x99\xdd\x4a\x15\x44\xea\xb2\x47\x05\x93\x99\x55\xae\x9e\xe6\x2e\x33\x52\x30\xdc\x65\xa2\x0a\xa6\xb0\x7b\x68\x9d\x11\x1b\x1d\x1b\xbb\x7a\x80\x89\x45\xc8\xd8\xb7\x59\x1c\x0e\x5c\xcc\xe2\xd0\xa5\x16\x1c\xb9\x84\x81\x63\x47\x17\x6d\xf1\x37\xb1\xab\x10\x33\x97\xa5\xe2\xd4\x19\x0f\x33\x97\x47\xe1\xdc\x6e\xdf\x98\xdb\x8c\x0e\x17\xe3\xde\xd5\xbe\xdc\x58\x21\xb0\x3b\x16\x60\x32\x6e\x70\xd8\x1f\xf3\x3e\x1c\x38\xbd\x0f\x87\xe3\x41\xa0\x56\xb6\xb3\xbb\xf1\x78\x50\xc2\x74\x3c\xb8\xe1\x64\x3c\x1a\xd4\xe6\xe0\xf2\x32\x69\x14\xd6\xa7\xd9\x58\x58\x93\x86\xe1\xe0\x93\x8f\x45\x9c\xda\x48\x80\x8a\x36\xb2\xcb\x8f\x7a\x5d\x83\x67\x6c\xfd\x61\x8d\xaa\x19\xab\xd0\x9a\xcf\x79\x56\x41\x3d\xa2\x57\xdf\x3d\x7f\x83\xca\xc5\x59\x7d\x4d\x44\x53\xd1\xe0\xd9\xc3\x57\xbd\x8b\x8b\xdb\x83\x89\x53\xd4\x6e\xfc\x87\x0b\x14\xd5\x17\xf8\xac\xbe\x4c\xf5\x86\x9e\xfa\x55\x02\xc8\x2f\xf5\x67\xf1\x65\xaa\xf5\xa7\xcf\xb9\x56\x55\xe9\xfb\x47\xaf\x64\x61\x2c\x24\x0b\xbf\xb8\xef\xa8\x12\xd0\xcd\x05\x55\xf2\x8b\x56\x25\xe5\xba\x57\x54\xb9\x4b\xeb\x7d\xe0\x57\x4d\x09\xb0\x0f\xfc\xca\x50\xfa\xee\x03\xbf\xaa\xeb\xea\x7d\xe0\x57\xe6\xb2\x7a\x82\x86\x54\x51\x18\xa1\xb4\xac\xd6\x88\x65\xd9\x72\x95\x97\x8b\x13\x54\x2d\xd1\x8b\x23\x6c\xc4\xfb\x5d\x09\xa5\x80\xde\xf6\x6b\x20\x9b\xee\x0e\x09\x23\xfb\xdd\x21\x2d\xba\x17\x4b\x81\xf0\xc5\x11\x7e\x5b\xbe\x43\x7b\x08\x1b\x6a\x94\x2a\xba\xb2\x3c\xff\xa4\xee\xdd\xdb\xb6\xbd\x2a\xc7\x27\xfe\x33\xf1\x31\xda\xd3\x50\x43\x1d\xbe\x1d\x74\x7b\x80\xd8\x50\xb0\xf4\xe1\x7a\xcd\x4f\xd3\x39\x47\x38\x42\xeb\xf3\xf4\x03\xbf\x32\x88\x7f\x7d\x9e\xfe\xc8\xaf\xd6\x8d\x0a\xda\xef\x76\xa1\x2c\x5e\x01\x90\x14\x4d\xfd\xe5\x01\xc2\x51\xf3\xcd\x7e\xc5\xca\x11\x54\x9c\x52\xfc\x98\x05\xb9\xae\xb1\x2b\x5e\xde\x2a\xa4\xef\x14\x53\x46\xbc\xee\xab\x5b\xd2\xb2\x7a\x05\x55\x51\x0e\xb5\x22\x28\x0d\x5e\x1b\x4a\x69\x50\x01\x35\x1a\x14\x19\xb6\x31\x59\x0d\x09\xec\x56\xd3\xa5\x53\xac\x96\xa7\x10\x60\xe6\xbc\xa8\x10\xa1\xe0\x19\x82\xb2\xb9\xa1\x14\xce\xdb\x49\x89\x0e\xe4\xdd\x10\x1e\x14\x70\xac\x8d\x6b\x32\x79\x71\x44\x94\x0d\xee\xa0\xdd\x46\x02\x3b\xe8\x2f\x88\xd0\x77\x50\xe3\x11\x6c\xab\x44\x7f\x81\x3b\x2e\x36\x66\x6f\x55\x9e\xcc\x36\xe7\x2f\x80\xf2\x9d\x2d\x93\x3b\x1d\x2e\x09\x85\xc7\x92\x57\xb4\x8b\x48\x60\x61\x78\xc7\xc0\xf1\x80\xac\xa9\xb2\xbf\xe8\x40\xb9\xc8\x38\xe2\x2c\x9b\x29\xb3\x43\xe5\x1a\xb1\xb3\xb3\x79\xc9\x73\xa1\x4b\xb6\x40\xfc\xf2\x8c\x2d\x72\x9e\xd7\x75\x19\x21\xbc\x4f\x8d\xd8\x84\x08\x14\x9a\x8c\x2d\x50\xca\x51\xba\x5a\x7e\xe0\x0b\x54\x2e\xaa\x25\xa2\xb2\x28\xf0\x1a\xad\x33\x36\x97\xe8\x25\xca\xb5\x19\xdb\xc5\xac\xcc\x66\x88\xcd\xe7\xcb\x8b\x35\xa0\x16\x78\xab\xa5\x40\x7b\xbe\xe6\x39\xba\x28\xab\xd9\xf2\xbc\x92\x0c\xae\xcb\xe5\x62\x88\x45\x09\x1a\xca\x6b\x4e\xda\x2f\x0f\x1e\xa8\x6b\x65\xda\x9f\x44\x40\xf1\xb1\x49\x72\x1d\xcb\xc5\xd2\x72\x63\xb7\xe1\x2a\xb4\x10\xc4\xda\xcf\x10\xb3\x26\xa5\x54\xe2\x5d\x24\xb4\xef\x9b\x55\x65\xeb\x47\xac\xf7\x23\x7e\xa7\x0a\x7b\xfe\xa6\xff\x04\x97\x02\x0c\xae\xda\x31\x44\xc0\x23\x59\xf8\x12\x95\x8b\x8f\x7c\xb5\xe6\xf6\x28\x58\x2e\x3e\xbe\xea\x05\xc2\xce\x4f\x1b\x0d\x10\xd8\x31\x40\xb4\xd8\x74\x89\xad\xdf\xe2\x50\x18\x74\x1f\xfb\xa7\xce\x84\x43\xfb\x85\x2f\xb2\xd5\xd5\x59\xb5\xc5\x55\x80\xaa\x62\xed\xf2\xa8\x69\xd7\x02\x4f\xbb\x21\xdf\x5a\x42\x37\xe7\x5f\x82\x6a\x2b\x11\x57\xed\xde\x23\x37\xe5\x69\x2d\x48\x53\xd2\xf1\x1f\xbc\xd2\xf3\xb4\x2e\x73\x73\x40\xaa\x5d\x8d\xd5\xd7\x81\x04\x5b\xf5\xc1\xe0\xe6\x2c\x43\xf6\xf1\xc3\xa2\xac\x4a\x36\xd7\x4b\x5f\x75\x61\xf8\x65\x36\x63\x8b\x13\xfe\xf4\x65\x5b\x16\x55\x56\x1e\xf3\x2e\xbd\x42\xfe\xaf\x6f\xd2\xe6\x36\xf2\x7e\x6a\x78\x63\x2d\x0a\x6b\x9b\x97\x4f\xf5\x36\x04\xe8\xf8\xea\x6f\xb3\x36\x54\xf2\xe6\x15\x85\xf8\xff\x86\xbc\x41\x9b\x50\xfd\x19\x2b\xd3\xba\xae\x6a\x93\xe5\xc3\xc0\xa3\xe4\x47\xe9\x55\xf0\x79\xfc\xda\x36\xc3\x48\x64\xcc\x27\x00\x9d\xed\xda\x8b\xc6\x30\x74\x3b\xb1\xc0\xae\xba\xb0\x2b\x05\x6b\x64\xf2\x31\x2f\xd7\x15\x9f\x37\x56\x6c\xc6\x58\x40\xe7\x37\x4b\x2d\xa8\x3b\x40\x17\x62\xa0\x95\xa5\xd6\xde\x96\xef\xde\x4e\x26\x8a\xdb\xf7\x6d\xb8\x16\x89\x64\xf3\xea\x02\xdf\xa1\xac\xb6\x49\x34\x86\x80\xdd\x73\xa4\x95\x4d\x52\x3d\x4f\x9a\xd7\x6c\x14\xe3\x01\xfc\xe7\x45\xbe\x44\xeb\x0b\x76\x26\xd3\x8f\x39\x5b\x57\xd2\x18\x86\x21\xbc\x72\xab\xac\xc7\x6c\x57\x61\x2e\xc7\xaf\x0c\x36\x0c\x15\xc5\xb7\x75\xf5\x81\x6b\xdc\x98\x0b\x5e\xc7\xd5\xaf\x13\x52\x46\x42\x97\xe1\x8d\xac\x42\xcb\xf3\x6a\x10\x81\x9b\x90\xeb\x56\x59\x27\xe4\xda\x75\xd6\x19\x32\x3e\xf0\x2b\x59\x02\x3a\x0a\x0e\x7c\xa2\x3f\x29\x3f\x5a\x1e\x68\x75\xa3\x23\x63\xd5\xe8\x03\xf4\x4a\x58\xa0\x7a\x09\x58\x2d\xd7\xeb\x36\x4d\x87\x9a\x87\x90\x10\xc3\x6b\xa9\x6c\xd1\x0c\x54\xad\xe0\x26\xf5\x78\x75\xca\xd6\x1f\x3a\x2e\x5b\xdb\xee\x64\xd2\x31\x51\xe1\x88\xf5\xe8\xfa\xbe\xd3\x75\xe1\xb4\x02\x8b\x26\x82\x8e\xc9\xbe\x07\x9b\xfd\xc6\x68\xf8\xe2\x99\xc8\xa8\x24\x66\x05\x55\xfb\xdd\x80\xed\x97\x4f\x37\x67\x7b\x65\x67\x7b\xee\x66\x7b\xee\x60\x7b\xb5\x01\xdb\xce\x22\xd2\xeb\xba\x8a\xb4\x9c\xfe\xd8\xac\x8e\xf4\x58\x11\x66\x89\xab\xe2\x97\x95\x5e\x8a\xf9\xfb\x47\xaf\xf6\x55\x82\xd6\xa9\xc5\x3c\x45\x59\x71\x62\x28\xae\x7d\x36\x67\x82\x89\xcb\x0a\xf5\xb1\xa8\x84\x6b\xd2\xd2\x31\x21\x6a\x2a\x3b\x0f\x27\x6a\xba\x45\xb7\xbf\x7f\xf4\xca\x58\x71\xfb\x78\x55\x9e\xcd\xf9\xde\x76\x53\x44\xb2\x51\x67\xa2\x48\xff\xe9\x8f\x33\x5d\xa4\x26\x22\x04\xdb\x25\x54\x28\xcd\xfa\xd7\x03\xa9\x2c\x96\xaf\x31\x3a\x14\x70\xfb\x52\xaa\x8f\xa4\x8e\x97\xab\x49\x7b\xcf\xba\xba\x38\xbe\x26\xbd\xbf\x9e\x97\x19\x9f\x78\x53\x44\x76\x06\x77\x61\x34\x68\xc9\x35\xd1\x92\x29\x0a\x1c\x68\xfd\x6b\xa2\x0d\xa6\x28\xda\xb1\x5f\xa4\x71\xed\x77\x0f\xbe\xc6\xfb\x7a\x63\xad\x85\x55\x32\xfb\xfa\x3b\xc7\x06\x0d\xfc\x0d\x28\xdc\xcc\x3b\x8d\xa0\xb5\x25\x73\x64\xdb\xee\xe3\x0d\x28\x98\x47\x3d\x9c\x90\x1b\x1b\xf6\xfe\x49\xc2\x6a\x13\x5d\x6e\x20\xb8\xb6\xb8\xb6\x0c\xb1\xb6\x10\xd7\x0d\xb4\x0d\x94\xb3\x7e\x7e\x03\xd5\x2b\xa1\xaf\x15\x66\xbf\x17\x92\x69\xaf\xaa\xbe\x56\xdc\xfd\x5e\x18\x4c\xdb\xaa\xee\xf7\xc2\x68\xaa\x8a\xbd\xdf\x8b\xf0\xa7\x77\x53\x1a\x7c\x56\xc1\xfd\xdf\xb3\xd2\xfe\x17\xab\x87\xff\xdf\x53\xd9\x1e\x6e\x2a\x28\x17\x3c\xbf\xd9\x12\xf7\xdf\xb1\x35\x6f\xab\xd6\xb3\x35\xd7\x9e\xbd\xf1\x89\xb3\x02\xfe\xd0\x97\x2f\xa3\x00\x2d\xd8\x29\x5f\x9f\xe9\x5e\x7a\xa0\xb3\x21\x40\x04\x1b\xf2\xbf\x7f\xff\x64\x42\xf3\x10\x45\x41\x73\x85\x8d\x09\xcd\x9b\x28\x10\x7c\x00\x53\x97\x51\xb0\xaf\xbe\x08\xfe\x0d\x99\x41\x8b\x5a\xa2\x57\xd3\x29\xe5\xdf\xf8\x1a\x31\xb4\xe0\x17\xf3\x2b\x24\x7d\x2d\x37\x11\xd6\x03\x0a\xea\xdc\xe6\xb1\x38\x3f\x4d\xf9\xea\x13\x82\x5b\xa5\xe0\x56\x15\xf1\xc1\x27\x90\xce\xef\x3b\x9b\xcc\x97\x17\xd0\x42\xfc\xd7\xd4\xa0\xdb\xb8\x1b\xdd\x86\x00\xb5\x5c\x2e\x5b\xb9\xd4\x11\xa1\x16\x4f\x3d\x30\xcb\xd5\x3f\x8f\x78\x3e\xbc\x95\x05\x5e\xe8\x45\x5e\x77\xbe\xb3\x96\x34\x84\xf8\x45\xd9\xc9\xa8\x44\x0f\xa7\x82\x6b\xf3\x18\xa6\xee\xd7\x32\xdc\xea\x09\x8f\x45\x6f\x0f\x51\xf7\xf6\x6d\xfd\xcd\xbc\xaf\xa9\xef\xca\xea\xa2\x5c\x73\xf4\xd3\xf3\xe3\x35\x60\x18\x53\x4c\x7d\x51\x8a\x32\x90\x4f\xe8\xa1\xd0\xaf\x90\xcb\x1e\x08\x46\x8d\x24\xac\xa8\xf8\x0a\x2d\xf8\x09\xab\xca\xc5\xc9\x0d\x08\x1e\x50\x71\x21\x78\xa5\x82\xfd\xc5\xb2\x9a\x58\xa5\x7a\x70\x80\x16\xcb\xd1\x4c\x15\xee\x64\x91\x02\xfd\x47\x23\xdd\xfb\x46\x30\x29\xd8\x7f\xd4\x42\x36\xa4\xa4\x4a\x32\x4a\x30\xb5\x35\xb4\xea\xbc\xdf\xe1\xae\x93\x01\xd8\xb4\xf2\xf0\xa7\xef\x35\xad\xc0\x72\x02\x8c\xdb\x67\x6c\x0d\xcb\x0b\x1b\xf9\x50\xa3\x29\xc0\x21\x5c\xa2\x51\x56\xb5\x14\x24\x6a\xbc\x37\xac\xfc\x87\x3f\x7d\x7f\x33\xaa\x97\x6b\x3b\xad\xe2\xd9\x22\x9f\xb0\xc5\xb2\x9a\xf1\x95\x62\xc4\x65\x06\x6c\x91\xeb\x66\x20\x7a\x38\x62\x0a\xad\x9f\xdd\x96\x02\x19\xb3\x8a\xc6\xf3\x14\xfc\xef\x66\x1f\xcf\x5f\x7e\x69\xf3\x78\xfe\xf2\x0b\x59\xc7\xf3\x97\x37\x63\x1c\xcb\x55\xc7\x36\x96\xab\x2d\x4c\x63\xb9\xba\xb6\x65\xfc\xb6\xa5\x65\xfc\xf6\x3b\x5b\xc6\x9b\x2f\x6f\x1a\x6f\xbe\x98\x6d\xbc\xb9\x29\xe3\xb8\xec\x59\xc7\xe5\x56\xe6\x71\xf9\x19\xf6\xf1\x7e\x4b\xfb\x78\xff\x3b\xd9\x07\x2c\xca\xeb\x96\xb1\x90\x33\xa3\xea\x85\x70\xce\x8b\x6a\xf3\xac\x6c\x01\x36\x21\xbf\xa1\x65\xd1\x60\x82\x2b\x6c\x6e\xca\x18\x00\xd9\xcd\x98\x03\xa0\xea\x18\x04\xfc\xf2\x74\x42\x42\x97\x1d\x48\x20\xdd\x14\x16\x26\x3b\x10\xaf\x40\x0b\xf4\x00\xf9\xc4\xb6\xd2\xa5\x59\xca\xa4\x35\x95\x07\x0f\xd0\x02\x96\xc8\x1b\x63\x90\x5b\x87\x08\xda\x43\x0b\xe3\x65\xf5\x66\x13\x12\x78\x86\xb6\xf6\x09\xd5\x2f\x4f\x6e\x86\x74\x34\x93\x05\xda\x33\xdc\x18\x3a\x20\xdd\x5f\xea\x12\xe4\xfe\x3b\xad\x17\xa6\xf2\xff\xed\xcc\xf7\xe5\xc4\xfe\x72\x51\x5b\xef\xcb\x1b\xb2\x5e\xa9\xf7\xae\xa5\x6a\xc6\x5b\xdb\xf3\x06\xc6\x3b\x88\x98\x80\xea\x1a\xf6\xab\x79\x41\x83\x67\xdc\x80\x15\xf9\xdf\xdd\x82\x5f\x2e\x2b\x56\xf1\x2f\x1d\x80\x57\x40\xe5\xa6\x4c\x18\xb0\xdd\x8c\x09\x4b\xc6\x74\x13\x5e\x2d\x47\xe3\xaf\x00\x19\xb5\x5f\xd5\x23\xb0\x03\x15\xd5\x17\x3b\x22\x1d\x6c\x7f\x79\x39\x89\x82\x81\x59\x7e\xae\xc2\x6e\x28\xe6\xfc\xb1\x34\x36\x12\x72\x04\xc4\xf6\x0a\x7b\x39\x50\xd8\xd3\xeb\x28\xec\x61\x9e\x7f\xe9\xcc\x97\xe5\xf9\x17\xca\x7c\xe5\x95\xdf\x37\xf1\xce\x9c\xf7\xde\x99\xf3\xad\xde\x99\xf3\x8d\xdf\x99\xfb\x23\xc2\x6e\x93\xc8\xc2\x86\x51\x73\xf2\x9b\xb1\xd5\xea\x4a\x34\xab\xc7\x10\x79\x31\x7c\x67\x58\x69\xaf\x87\x37\xe3\x18\x26\x52\xbb\x6d\xce\x8d\x76\x25\x0d\xc5\xc3\xe7\x46\x74\xf9\xcd\xbc\xba\xf2\x70\xa1\xae\x00\x5f\x16\xfa\xdc\xe6\xda\x74\xc3\xf1\x6a\x79\xc6\x57\xd5\x15\xfa\xbb\xba\x62\x18\x00\xc1\xbc\x1a\x14\x83\x69\x45\x65\x20\xeb\x7d\x13\x9e\x3a\xac\x34\x77\xa2\x77\xa3\xcb\xba\x3c\x59\x94\x45\x99\xb1\x45\x85\x52\x78\x5e\x2e\x34\xdf\x00\xa2\x8e\xd9\xdf\x76\x5e\xba\x66\xa6\xfe\xe5\x06\xe6\x81\x87\x1c\xd8\xdd\xb1\x23\xae\xc9\xf3\x33\x61\x96\x6c\xbe\xd3\x91\xfd\xa8\xe0\x90\x31\x20\x37\x92\xd3\xd0\x6e\x24\x44\xde\x55\xf3\x67\xf8\xea\x85\x2e\xea\x7e\x2f\x3a\x6b\xbe\x5d\x9f\xfd\x4c\x64\x6f\x07\xed\xc5\xdf\xb6\xd3\xda\xd3\x6d\xb1\x60\x8a\x13\xcc\x70\x0a\x67\x6a\x32\x9c\x63\x8e\x8b\x9d\x01\x92\x77\xff\x46\x5d\x9d\x22\xec\x6d\xbc\x3c\x00\x46\x37\x6d\xcc\x76\x10\x96\x2f\xd4\xe6\x09\x08\x8b\xf5\x17\xf9\xdf\xdf\x7e\x33\x1c\xc0\x10\x79\x7f\xe3\x03\x7f\x3a\x44\xc3\x55\x30\xfd\x4f\x8e\xcd\x35\xf8\x61\xc3\x46\x7f\x2f\xa0\x35\x69\xef\x23\x90\x3e\x34\xe7\x8b\x93\x6a\x86\xee\x22\xba\xe1\x56\xea\x7e\xa0\x39\x5a\x2e\x3e\xf2\x55\xfd\x6a\xa8\x85\x61\x15\x1f\xc4\xa0\x5d\x9f\x0e\xd8\x28\xf0\xd4\xa3\x76\xa3\xdd\xce\xca\xdc\x27\x74\xdc\x0d\xa2\x77\xd6\x28\x67\x15\x43\x6c\xbd\x25\x9d\x8d\x67\xb2\xba\x2b\x85\x97\x5a\x80\xde\xaf\x96\x6f\x7c\x62\x5f\x0a\x81\xc7\x9f\xb1\x67\x47\xd1\xea\x1a\x95\x61\xe7\x4e\x0d\xf7\x54\x2a\xb3\x61\xb2\x56\xaf\x69\x17\x8f\x54\x9b\x01\x97\xec\xee\xc6\x9b\xf7\xbb\xb4\xdd\x27\xbd\xda\x25\xbc\xba\xd5\xdb\xc1\x16\x7e\xf1\x57\xf3\xb0\x7f\x76\xbe\x9e\x4d\xea\x44\x4a\xe4\x08\xa6\xf7\x4a\x33\x74\x2f\x97\x40\x86\x7d\xb2\x75\x2a\xa2\x29\xb8\x8e\x20\x35\xce\x69\xd7\x6d\xac\x1b\x49\x06\x5e\x01\x68\x84\x49\x66\xcb\x33\x18\x24\x2d\x63\x3f\x1a\x4d\x5b\x1b\xb3\xe7\x28\x9b\x2f\x17\xae\x37\x95\x4d\x4d\x1a\xf0\xf4\x6d\x19\x7e\xb4\xdb\x32\x3c\x76\xda\xb2\x8e\x19\xb2\x14\xc9\x6e\xb3\xf3\xd5\xb4\xd3\xf5\x08\xe0\xff\x0c\x86\xfd\x67\x29\x99\x21\xd2\x3a\x96\x4a\x7c\xc3\x30\x5b\xef\x1a\xb3\x13\x80\x33\x4c\xf5\xc2\xba\x4c\x4e\x2c\x64\x1a\x17\xba\xe8\xf8\xcf\xa8\x1b\x5c\x6c\xe2\x03\x17\xca\xe4\x6b\xf4\x6f\xcb\x77\x26\xb1\xdb\x4d\x15\x80\x3b\xeb\xcb\x4d\x7a\x6c\xdd\x37\xd3\xdb\x2d\xa3\xb6\xc6\x7c\x7a\x37\xa5\xe1\x26\xfb\x5d\x0e\xee\xfe\x09\xcd\xaa\xea\x6c\x7d\xef\xe0\xe0\xb4\x9a\xad\xf7\x53\x7e\x70\x5e\x15\xf4\xd7\x35\xfa\x48\xf6\xf1\x3e\x41\xe9\x15\xfa\x1f\xa7\xac\x9a\x95\x6c\x2d\x2c\xa6\xdd\x20\x03\xbb\x42\xe4\x66\x8f\x83\x03\xf4\x3d\xaf\xe4\x71\x38\xce\x85\xb8\x4b\x96\xce\xf9\x1a\xfd\x55\x51\xfa\xeb\xad\x6f\x60\x1b\xff\x8a\xf3\x47\xcd\xfe\x97\xc1\x4e\x1a\x74\x47\x2a\xef\x0e\xba\x7d\xbb\xfe\xf9\xbe\x1d\x3d\xfa\xab\xec\x8e\x86\xfc\x19\xfc\xd0\xe2\x3e\x55\xdf\xbb\xa8\xd5\xaf\xb7\x6f\x1b\xf6\xe7\x1c\x76\x98\x6c\x80\x9d\x6c\x9c\xc0\xce\x99\xbf\x4e\xe5\x6e\xfc\x9f\x96\x39\xdf\xff\x75\x8d\x96\x2b\xf4\x9d\xdc\x4a\x53\x16\x25\xcf\x51\xb6\xcc\xf9\x14\xb0\xb0\x45\x8e\xce\xd7\x1c\x95\x95\x18\xd7\xfe\x2a\xe4\xa8\xf5\x41\xed\xc3\x69\xfa\x70\xa2\xbe\x77\xfb\x20\x7f\xbd\x2f\xf7\x24\xb5\xcd\xf6\x1b\xe8\x43\x1d\xd9\x6f\xbf\x69\xdf\xf6\x2f\xca\x45\x2e\xde\x2e\x3b\x30\x72\xeb\x90\xe0\x05\xe9\x3f\xc3\x66\x9f\x5b\xdf\x1c\xdc\xdd\xbb\xb1\xbf\xbb\x07\xb7\x64\x6f\xd7\xd5\xaa\x5c\x9c\x3c\x5e\x2d\x4f\x8f\x66\x6c\x75\xb4\xcc\x85\xe6\x5e\xc1\x8f\xfb\x85\xf6\xab\x12\xfe\x31\xfb\xc0\x17\x52\xc6\x7d\x93\x3d\x3b\x5f\x5c\x09\xf9\xde\xfa\xa6\x89\x60\xe7\xd9\x9a\xe4\x5c\xfc\x38\x91\x74\x64\x07\x61\x69\x13\x36\xdf\xd7\x43\x20\xfc\x94\x2d\xcf\x17\x15\x5f\xa9\x99\x4b\xf8\x69\x5e\xc7\x0a\xd9\xbc\x0d\x16\xf0\x14\xce\x33\xd6\x5f\xf8\x65\xb5\x62\xe2\xcb\xc5\xac\x9c\x73\x34\xa9\xb1\x3d\x50\x48\x24\xe9\x6f\xa0\x4d\x8b\x30\x53\xdd\x7b\x58\xd5\x0d\x76\x77\x85\xab\x7f\x03\x3a\x95\xc0\xdf\x1e\x22\xef\xf2\x7b\xea\x79\x42\xe7\xf2\xa7\x07\xf0\xd3\x77\x8f\x1f\x8b\x9f\x2c\x94\x84\xb8\xe0\x75\x7d\x7d\xbe\x5a\x2d\x4f\x58\xc5\xa7\x60\x75\xd5\x8c\xaf\x38\x9c\xf3\x44\x0b\x7e\x59\x21\xc1\x02\xcb\x2a\xbe\x82\x46\xd0\x8d\x4d\xf8\x03\x06\x27\x12\xfc\x36\xf2\x2e\x1f\x1f\x79\xde\x8e\xb0\x50\xef\xf2\x7b\xf8\xf8\x77\x11\x9c\xe7\xcb\x8b\x96\x3e\x34\xfb\x46\x4a\x5e\x0e\xe5\x13\xd5\x45\x81\xc0\x7f\xfc\x78\x07\x8e\x66\x7a\x3b\x68\x17\x69\x98\xe1\xc1\x6e\x5d\x71\x48\x51\x6f\xb3\x60\xd5\xd5\xf3\xc5\x29\xab\xb2\x19\xcf\x5b\x7a\xf7\xd1\x72\x31\xbf\x42\xec\xec\x8c\x43\xbf\xcb\x35\x38\x20\x3a\x5f\x94\xd5\x54\xbc\x68\x66\x6c\xcd\xe1\x6d\x53\x08\xa2\xc1\xd4\xc0\x08\x21\x55\xf5\xbe\xa8\x06\xab\x18\xea\x99\xf6\xf5\x8c\x95\xab\x61\xcf\xa0\x5f\x8a\xd7\x6f\x94\xe8\xf6\xf6\x14\xef\xb7\xfa\x1d\xb0\xb4\x14\x80\xe2\xff\x2a\xde\x4b\xa8\xda\x1b\xaf\xe3\x0c\x7c\x01\xce\x00\xa3\x70\xeb\x0b\x8d\x95\xcb\xbc\xa5\x6b\xe4\xe5\x22\xe7\x97\xe8\x10\xed\x61\xa3\xd9\x37\x7e\x74\xe7\x8e\x66\xfc\xbb\xbb\xb2\x99\xc5\xf8\x81\xce\x5b\x00\x79\xd7\x37\x76\x61\x4a\x8f\x85\xc6\xa5\x64\xe4\xaf\x7b\x87\xb5\xfa\xef\x6b\xf2\x42\xbb\x87\x86\xf8\x51\x23\xfa\xf6\x5b\x84\xbd\xda\x80\xd0\x6f\xca\x87\x94\x4a\x6a\x4e\xa4\xb1\xa2\xdf\x50\xc7\x0e\x1b\xe1\x6f\x40\x08\x10\xda\x94\xd4\x08\x3f\x9b\xf1\xec\xc3\xab\x8c\xcd\xd9\xea\x7f\x89\x56\x13\xa1\x87\x17\xcb\x72\x21\x77\x53\x83\x00\x9a\x9f\xba\x1e\xdf\xfe\x2c\xbd\xbe\x15\x4e\x35\x5b\x2d\x2f\xd0\xa3\xd5\x6a\xb9\x9a\x40\xaf\xee\x3c\x15\xa9\x50\x6b\x9a\x3f\xef\xde\x41\xbb\x2d\x82\xfd\x6a\x29\x23\xeb\x04\x47\x3b\xfb\xd5\xf2\xe7\xb3\x33\xbe\x3a\x62\x6b\x3e\xd9\x41\xbb\x12\x81\x30\xf9\xc5\xb2\x12\x06\x0e\xcc\x4a\xb9\xdc\x11\x0f\xeb\x8e\x7e\xfa\x02\x23\x41\x2b\x27\xc8\xaa\x45\x26\xde\x8a\x63\x2a\x97\xd9\xd4\xe0\x24\xa5\x6c\xd0\xc6\x44\x17\xe0\xb7\x75\x1b\xa9\x51\x98\xaa\xbc\xa4\xde\x4e\x5f\x2f\xd2\x21\x8e\xea\x86\x26\xb5\x68\x68\x6f\x2b\xe3\x7c\xfc\x98\xaa\x58\xa7\xc2\x1c\xde\x4b\xaf\x2a\x8e\xd6\xfc\xbf\xce\xf9\x22\x83\x40\x67\x67\xb4\xa5\x51\x9b\x0e\x0c\x84\x57\xa7\xe9\x72\xde\x38\x92\x8d\x32\xf5\xba\x94\xc9\x90\x72\x83\x69\x5c\x48\x91\x14\x10\x56\x02\x3a\xf2\x1a\x96\x9a\x8d\xc7\x06\x26\x20\x0c\xeb\x4c\xf8\x43\x26\x1c\x06\x7f\x7f\x4b\x26\x31\x91\x5c\x7a\x8a\xcb\x47\x5e\x07\xc5\xee\xa1\xc5\x6a\xa2\x0d\x3a\xf3\xc8\x1b\x74\x26\xf8\x2c\x89\x62\xaa\x98\x8d\x25\xb3\x8f\x37\x64\x16\x93\x6d\x3b\xd5\x42\x9a\xb8\xea\x76\xb4\xeb\x01\x8d\x6d\x02\x86\xbe\x4b\x88\xd4\x5f\x8d\x13\xfd\xa4\xa9\x41\x2a\x52\xf7\x61\x72\x35\xc8\x9a\x5a\xf8\xd1\x41\xa5\x01\xad\x7f\x10\x4a\x90\xd1\x6a\xc3\xc1\xa5\xed\xb1\x4e\x58\x1f\x65\x34\x94\xbb\x87\x0e\xd7\xef\x45\xf4\xb6\xd9\x97\x4a\x84\x1b\xd9\xaf\x38\xcb\x8f\x96\x8b\xaa\x5c\x9c\xc3\xe1\x59\xd0\x7e\x1b\x8a\x04\x27\x3f\x40\xdf\xbf\x3d\x04\xb6\x8e\x44\x62\x61\x18\x0d\xee\xfc\xb0\xf8\xc8\xe6\x65\x0e\x40\x52\xda\x77\x54\xb7\x1a\x79\x77\xa9\x20\x89\x10\x26\x0a\xde\x36\x74\xde\x29\x37\x11\x4d\x9b\x1f\x77\x77\x45\x32\x5e\x47\xa8\x1e\x9a\xdb\x32\x8c\xc8\x44\x50\x44\xc9\xbf\x6b\xc1\xd0\x08\xed\x3f\x6e\x18\x3b\x38\x40\x3f\x14\xe8\x82\x23\x91\xaf\x9d\x9f\x21\x91\xa9\x4e\x51\x59\xfd\xdf\xff\xfd\x7f\xea\x61\x49\x47\x01\x1c\xdf\xb2\xf4\x7c\x00\x78\x67\x10\xfc\xa5\xf5\xbe\x02\x2f\x98\xb4\x56\x2e\x80\xb1\x6e\x86\x44\xff\xe2\xeb\x5f\x02\x83\xf9\x0e\x75\xf5\x19\xaa\xea\x62\x3a\x1c\x6a\x5d\x49\xb6\x60\x73\x38\xfc\xd0\xc8\xf1\x25\x67\x39\x2a\xca\xd5\xba\xaa\xa5\x04\xdd\xda\x5e\xcd\xc3\xd1\x0d\x4d\x16\xcb\xa1\x78\xd7\x3b\xb5\x4d\x48\x42\xb7\x95\xfe\x55\x64\xd5\x78\x6d\xe4\x5b\xf3\x3a\x1c\xc3\x7a\x78\x1e\xd5\x06\x75\x54\xa3\x02\xb5\xa0\x43\x8b\xc3\xdc\xef\xc7\x03\x1d\x19\x96\xaf\x19\x50\x73\xa7\xd1\xae\x29\x01\x6b\xac\xb7\x35\x5f\x2d\x46\x75\x13\xf8\x2d\x4c\xb0\x4e\xeb\x65\xdf\xfd\xbe\x6c\x4f\xd9\x15\x2a\x17\xd9\xfc\x1c\x5e\x42\xc4\xcb\x85\xfe\x4a\x63\x92\xf2\xe3\x5a\x3a\x8f\xb6\x90\x0e\x98\xf2\xf5\x04\xe8\xa9\xf7\x34\x02\x7b\x93\x24\x2d\x5d\xa0\xbe\x4d\xa0\x1e\x24\x2f\x52\x60\x63\xf9\xc1\x97\x94\xf9\x70\x84\xef\x4b\x94\x2a\x89\x3e\xbe\x59\x89\x42\xc8\xb8\xa6\xd0\x63\x10\xba\x77\xd9\x17\xbb\x77\xe9\x1d\xed\xa0\xdf\x40\x22\x13\xc9\x83\xfc\xb5\xd1\x47\x60\xd5\x07\xbc\x51\x19\xde\x31\xb0\xa7\xbf\x82\x99\x35\x51\xcb\xd3\xa8\x85\x9f\x8f\x1f\xef\x51\x94\xc3\x4c\x19\xcf\x9b\xc8\x5b\x87\x4d\x75\x02\xab\xf9\x0e\x01\x4d\xfb\x0e\xf1\xe7\x7e\x2f\x27\x51\xb9\x46\x3b\x1a\x4b\xfe\x1a\x7c\xdd\x94\x44\x03\xab\xa3\x1a\x50\xd1\x03\xa0\x96\x94\x68\x31\xb6\x9d\xfd\xe9\xa4\x3b\xed\x3c\x51\x75\x7a\xa6\x65\x23\x93\xea\xf4\x0c\x1d\xf6\xc6\x92\x1d\xf4\xa7\xc3\x43\x19\x94\xfb\xd9\x89\x5a\xc4\xa8\x4e\xcf\xfa\x79\x86\xf6\x82\xde\x42\xef\x7c\xc9\xc9\x37\x21\x56\x74\x08\x0c\xde\xf9\xc8\x57\xeb\x72\xb9\xb8\x73\x0f\xdd\x81\x49\xdf\x3b\x53\xf1\xab\xe4\xe7\xce\x3d\x2d\x2b\x84\xdf\x65\x77\xd5\xef\xf2\xcb\xad\x6f\x3e\xa9\x49\xba\x57\xcb\x53\x8e\x1e\x3e\xfb\x1e\xa5\xe7\xe5\x3c\x47\xcb\xb3\xaa\x3c\x2d\xff\xc6\x57\xeb\x29\x9a\x97\x1f\x38\x5a\xed\xff\xba\x9e\xca\x57\x62\x98\x69\x5f\x9f\xf1\xac\x2c\xca\x4c\x38\x6f\x5e\x82\xc2\xcf\x58\x55\xf1\xd5\x62\x0d\xf8\xa0\x51\x35\xe3\xa8\x58\xce\xe7\xcb\x8b\x72\x71\x72\x4f\xce\x79\x0a\xf3\xeb\x9d\x8b\x44\x77\x6a\xa3\xb9\x23\x27\x77\x3b\x00\xfb\xec\x34\xef\xcd\xa2\x36\x47\x24\xc5\xb3\x5b\xdf\x48\x75\xa9\x43\x93\xcd\x34\x77\x77\x00\x13\x7d\x06\xdd\x81\x72\xda\xb7\x8b\xde\xac\xf1\x9f\xb4\xef\xfb\x8b\x65\xce\x8f\xaf\xce\x78\x9b\xcc\xb5\x73\xd5\xea\xc5\xa3\x5c\xe8\xf3\xc6\x2f\xcb\xc5\xc9\xf2\x7f\xbe\x42\x1f\xbd\x7d\xba\xef\xc1\xeb\x79\xdb\x42\x3b\x4b\xda\x30\xa3\x42\x63\x8d\x89\xad\x2e\x66\x6c\xde\xc3\x14\xef\x7b\x7b\x72\x22\x66\x55\xef\x8d\x92\xa7\x18\xd5\x6f\x33\xb6\x7e\x7e\xb1\x78\x51\x6f\x81\x39\x54\x40\xfb\xdd\xdf\x01\xbc\x59\x22\x81\xaa\x71\x52\x28\x75\xc4\xe8\x82\xcb\xf5\x21\xf1\x1c\x0e\x12\xef\x08\xd9\xe8\xb2\x7a\xfb\x41\x16\x30\x14\x10\xf0\xb9\x33\xf9\xd5\xeb\xd7\xcb\x59\xb9\x58\x8a\x5e\x31\x74\xc1\x53\xa4\x0e\xaa\xaa\x59\xeb\x7d\x65\xd0\x4a\x26\x9f\x6e\xa9\x23\xaa\xb0\x6c\xf2\x69\xfa\xf7\x4f\xef\xa6\x34\xda\x64\x49\x64\x70\x62\xf7\xcd\xb3\xa7\x4f\xaa\xea\xec\xa5\x18\x32\xd6\x55\x83\xed\xcf\x69\x79\x22\x37\xb3\xec\xff\xba\xfe\xf3\x26\x98\xef\x9c\xaf\x39\xbc\xb0\x65\xd5\x9d\xfb\xb7\x86\x84\xbe\x2b\x4f\x7e\x02\x84\xf7\x45\x87\x7f\x5d\xcf\x44\x50\x2e\x4f\x16\xcb\x15\xbf\x37\x2f\x17\xfc\x56\x43\xfa\x82\xa7\xfe\x46\x24\x85\x92\x5e\xf3\x54\x8e\x4d\xf2\x98\xf1\x9d\xfd\x83\x79\x99\x1e\x08\x14\x22\x38\xdf\x3a\x38\x40\xf9\x72\x51\xa1\xe5\x47\xbe\x5a\x95\x39\xaf\x17\x1c\xea\xf5\x8d\x5b\xda\x11\x64\xb5\x72\x20\x02\xdc\x9d\x66\x43\x03\xac\x47\x74\x00\xf6\x25\xc9\x2e\x94\x30\x10\x58\x26\xd3\x41\x80\xb9\xfb\xb7\x3e\x19\xa4\x21\x9f\xa8\x85\xad\x9a\xe3\x3f\xdf\x23\xe4\xd3\x3b\x21\x85\xe9\x5b\x29\x85\x77\x3b\xb7\x0e\x0e\xfe\x3f\xb4\x5e\x9e\xaf\x32\xfe\x8c\x9d\x9d\x95\x8b\x93\x9f\x5f\x3e\x3d\x14\x0f\xf7\xe6\xb0\x89\xf4\xd7\xf5\xfe\x29\x3b\xbb\xf5\xff\x02\x00\x00\xff\xff\x64\xb1\xb4\x44\x52\x1f\x06\x00") - -func web3JsBytes() ([]byte, error) { - return bindataRead( - _web3Js, - "web3.js", - ) -} - -func web3Js() (*asset, error) { - bytes, err := web3JsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "web3.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - 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) -} - -// 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 -} - -// 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) -} - -// 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){ - "bignumber.js": bignumberJs, - - "web3.js": web3Js, -} - -// 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 -// 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{ - "bignumber.js": {bignumberJs, map[string]*bintree{}}, - "web3.js": {web3Js, 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/internal/jsre/deps/deps.go b/internal/jsre/deps/deps.go index fe2e6f2f..42af8f77 100644 --- a/internal/jsre/deps/deps.go +++ b/internal/jsre/deps/deps.go @@ -17,5 +17,12 @@ // Package deps contains the console JavaScript dependencies Go embedded. package deps -//go:generate go-bindata -nometadata -pkg deps -o bindata.go bignumber.js web3.js -//go:generate gofmt -w -s bindata.go +import ( + _ "embed" +) + +//go:embed web3.js +var Web3JS string + +//go:embed bignumber.js +var BigNumberJS string diff --git a/internal/jsre/deps/web3.js b/internal/jsre/deps/web3.js index 07418d05..a291218e 100644 --- a/internal/jsre/deps/web3.js +++ b/internal/jsre/deps/web3.js @@ -3056,7 +3056,7 @@ ContractFactory.prototype.at = function (address, callback) { var contract = new Contract(this.eth, this.abi, address); // this functions are not part of prototype, - // because we dont want to spoil the interface + // because we don't want to spoil the interface addFunctionsToContract(contract); addEventsToContract(contract); @@ -3696,7 +3696,7 @@ var outputBigNumberFormatter = function (number) { }; var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; + return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest' || blockNumber === 'finalized' || blockNumber === 'safe'; }; var inputDefaultBlockNumberFormatter = function (blockNumber) { @@ -3734,7 +3734,7 @@ var inputCallFormatter = function (options){ options.to = inputAddressFormatter(options.to); } - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { + ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { return options[key] !== undefined; }).forEach(function(key){ options[key] = utils.fromDecimal(options[key]); @@ -3759,7 +3759,7 @@ var inputTransactionFormatter = function (options){ options.to = inputAddressFormatter(options.to); } - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { + ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { return options[key] !== undefined; }).forEach(function(key){ options[key] = utils.fromDecimal(options[key]); @@ -3783,6 +3783,12 @@ var outputTransactionFormatter = function (tx){ tx.nonce = utils.toDecimal(tx.nonce); tx.gas = utils.toDecimal(tx.gas); tx.gasPrice = utils.toBigNumber(tx.gasPrice); + if(tx.maxFeePerGas !== undefined) { + tx.maxFeePerGas = utils.toBigNumber(tx.maxFeePerGas); + } + if(tx.maxPriorityFeePerGas !== undefined) { + tx.maxPriorityFeePerGas = utils.toBigNumber(tx.maxPriorityFeePerGas); + } tx.value = utils.toBigNumber(tx.value); return tx; }; @@ -3801,7 +3807,9 @@ var outputTransactionReceiptFormatter = function (receipt){ receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); receipt.gasUsed = utils.toDecimal(receipt.gasUsed); - + if(receipt.effectiveGasPrice !== undefined) { + receipt.effectiveGasPrice = utils.toBigNumber(receipt.effectiveGasPrice); + } if(utils.isArray(receipt.logs)) { receipt.logs = receipt.logs.map(function(log){ return outputLogFormatter(log); @@ -3819,8 +3827,10 @@ var outputTransactionReceiptFormatter = function (receipt){ * @returns {Object} */ var outputBlockFormatter = function(block) { - // transform to number + if (block.baseFeePerGas !== undefined) { + block.baseFeePerGas = utils.toBigNumber(block.baseFeePerGas); + } block.gasLimit = utils.toDecimal(block.gasLimit); block.gasUsed = utils.toDecimal(block.gasUsed); block.size = utils.toDecimal(block.size); @@ -3939,10 +3949,18 @@ var outputSyncingFormatter = function(result) { result.startingBlock = utils.toDecimal(result.startingBlock); result.currentBlock = utils.toDecimal(result.currentBlock); result.highestBlock = utils.toDecimal(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.toDecimal(result.knownStates); - result.pulledStates = utils.toDecimal(result.pulledStates); - } + result.syncedAccounts = utils.toDecimal(result.syncedAccounts); + result.syncedAccountBytes = utils.toDecimal(result.syncedAccountBytes); + result.syncedBytecodes = utils.toDecimal(result.syncedBytecodes); + result.syncedBytecodeBytes = utils.toDecimal(result.syncedBytecodeBytes); + result.syncedStorage = utils.toDecimal(result.syncedStorage); + result.syncedStorageBytes = utils.toDecimal(result.syncedStorageBytes); + result.healedTrienodes = utils.toDecimal(result.healedTrienodes); + result.healedTrienodeBytes = utils.toDecimal(result.healedTrienodeBytes); + result.healedBytecodes = utils.toDecimal(result.healedBytecodes); + result.healedBytecodeBytes = utils.toDecimal(result.healedBytecodeBytes); + result.healingTrienodes = utils.toDecimal(result.healingTrienodes); + result.healingBytecode = utils.toDecimal(result.healingBytecode); return result; }; @@ -13617,7 +13635,7 @@ module.exports = BigNumber; // jshint ignore:line },{}],"web3":[function(require,module,exports){ var Web3 = require('./lib/web3'); -// dont override global variable +// don't override global variable if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { window.Web3 = Web3; } @@ -13625,4 +13643,4 @@ if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { module.exports = Web3; },{"./lib/web3":22}]},{},["web3"]) -//# sourceMappingURL=web3-light.js.map + diff --git a/internal/jsre/jsre.go b/internal/jsre/jsre.go index 21aa1a59..f6e21d2e 100644 --- a/internal/jsre/jsre.go +++ b/internal/jsre/jsre.go @@ -20,36 +20,37 @@ package jsre import ( crand "crypto/rand" "encoding/binary" + "errors" "fmt" "io" - "io/ioutil" "math/rand" + "os" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/internal/jsre/deps" - "github.com/robertkrimen/otto" + "github.com/dop251/goja" + "github.com/ethereum/go-ethereum/common" ) -var ( - BignumberJs = deps.MustAsset("bignumber.js") - Web3Js = deps.MustAsset("web3.js") -) - -/* -JSRE is a generic JS runtime environment embedding the otto JS interpreter. -It provides some helper functions to -- load code from files -- run code snippets -- require libraries -- bind native go objects -*/ +// JSRE is a JS runtime environment embedding the goja interpreter. +// It provides helper functions to load code from files, run code snippets +// and bind native go objects to JS. +// +// The runtime runs all code on a dedicated event loop and does not expose the underlying +// goja runtime directly. To use the runtime, call JSRE.Do. When binding a Go function, +// use the Call type to gain access to the runtime. type JSRE struct { assetPath string output io.Writer evalQueue chan *evalReq stopEventLoop chan bool closed chan struct{} + vm *goja.Runtime +} + +// Call is the argument type of Go functions which are callable from JS. +type Call struct { + goja.FunctionCall + VM *goja.Runtime } // jsTimer is a single timer instance with a callback function @@ -57,12 +58,12 @@ type jsTimer struct { timer *time.Timer duration time.Duration interval bool - call otto.FunctionCall + call goja.FunctionCall } // evalReq is a serialized vm execution request processed by runEventLoop. type evalReq struct { - fn func(vm *otto.Otto) + fn func(vm *goja.Runtime) done chan bool } @@ -74,9 +75,10 @@ func New(assetPath string, output io.Writer) *JSRE { closed: make(chan struct{}), evalQueue: make(chan *evalReq), stopEventLoop: make(chan bool), + vm: goja.New(), } go re.runEventLoop() - re.Set("loadScript", re.loadScript) + re.Set("loadScript", MakeCallback(re.vm, re.loadScript)) re.Set("inspect", re.prettyPrintJS) return re } @@ -99,21 +101,20 @@ func randomSource() *rand.Rand { // serialized way and calls timer callback functions at the appropriate time. // Exported functions always access the vm through the event queue. You can -// call the functions of the otto vm directly to circumvent the queue. These +// call the functions of the goja vm directly to circumvent the queue. These // functions should be used if and only if running a routine that was already // called from JS through an RPC call. func (re *JSRE) runEventLoop() { defer close(re.closed) - vm := otto.New() r := randomSource() - vm.SetRandomSource(r.Float64) + re.vm.SetRandSource(r.Float64) registry := map[*jsTimer]*jsTimer{} ready := make(chan *jsTimer) - newTimer := func(call otto.FunctionCall, interval bool) (*jsTimer, otto.Value) { - delay, _ := call.Argument(1).ToInteger() + newTimer := func(call goja.FunctionCall, interval bool) (*jsTimer, goja.Value) { + delay := call.Argument(1).ToInteger() if 0 >= delay { delay = 1 } @@ -128,47 +129,43 @@ func (re *JSRE) runEventLoop() { ready <- timer }) - value, err := call.Otto.ToValue(timer) - if err != nil { - panic(err) - } - return timer, value + return timer, re.vm.ToValue(timer) } - setTimeout := func(call otto.FunctionCall) otto.Value { + setTimeout := func(call goja.FunctionCall) goja.Value { _, value := newTimer(call, false) return value } - setInterval := func(call otto.FunctionCall) otto.Value { + setInterval := func(call goja.FunctionCall) goja.Value { _, value := newTimer(call, true) return value } - clearTimeout := func(call otto.FunctionCall) otto.Value { - timer, _ := call.Argument(0).Export() + clearTimeout := func(call goja.FunctionCall) goja.Value { + timer := call.Argument(0).Export() if timer, ok := timer.(*jsTimer); ok { timer.timer.Stop() delete(registry, timer) } - return otto.UndefinedValue() + return goja.Undefined() } - vm.Set("_setTimeout", setTimeout) - vm.Set("_setInterval", setInterval) - vm.Run(`var setTimeout = function(args) { + re.vm.Set("_setTimeout", setTimeout) + re.vm.Set("_setInterval", setInterval) + re.vm.RunString(`var setTimeout = function(args) { if (arguments.length < 1) { throw TypeError("Failed to execute 'setTimeout': 1 argument required, but only 0 present."); } return _setTimeout.apply(this, arguments); }`) - vm.Run(`var setInterval = function(args) { + re.vm.RunString(`var setInterval = function(args) { if (arguments.length < 1) { throw TypeError("Failed to execute 'setInterval': 1 argument required, but only 0 present."); } return _setInterval.apply(this, arguments); }`) - vm.Set("clearTimeout", clearTimeout) - vm.Set("clearInterval", clearTimeout) + re.vm.Set("clearTimeout", clearTimeout) + re.vm.Set("clearInterval", clearTimeout) var waitForCallbacks bool @@ -178,8 +175,8 @@ loop: case timer := <-ready: // execute callback, remove/reschedule the timer var arguments []interface{} - if len(timer.call.ArgumentList) > 2 { - tmp := timer.call.ArgumentList[2:] + if len(timer.call.Arguments) > 2 { + tmp := timer.call.Arguments[2:] arguments = make([]interface{}, 2+len(tmp)) for i, value := range tmp { arguments[i+2] = value @@ -187,11 +184,12 @@ loop: } else { arguments = make([]interface{}, 1) } - arguments[0] = timer.call.ArgumentList[0] - _, err := vm.Call(`Function.call.call`, nil, arguments...) - if err != nil { - fmt.Println("js error:", err, arguments) + arguments[0] = timer.call.Arguments[0] + call, isFunc := goja.AssertFunction(timer.call.Arguments[0]) + if !isFunc { + panic(re.vm.ToValue("js error: timer/timeout callback is not a function")) } + call(goja.Null(), timer.call.Arguments...) _, inreg := registry[timer] // when clearInterval is called from within the callback don't reset it if timer.interval && inreg { @@ -204,7 +202,7 @@ loop: } case req := <-re.evalQueue: // run the code, send the result back - req.fn(vm) + req.fn(re.vm) close(req.done) if waitForCallbacks && (len(registry) == 0) { break loop @@ -223,93 +221,73 @@ loop: } // Do executes the given function on the JS event loop. -func (re *JSRE) Do(fn func(*otto.Otto)) { +// When the runtime is stopped, fn will not execute. +func (re *JSRE) Do(fn func(*goja.Runtime)) { done := make(chan bool) req := &evalReq{fn, done} - re.evalQueue <- req - <-done + select { + case re.evalQueue <- req: + <-done + case <-re.closed: + } } -// stops the event loop before exit, optionally waits for all timers to expire +// Stop terminates the event loop, optionally waiting for all timers to expire. func (re *JSRE) Stop(waitForCallbacks bool) { - select { - case <-re.closed: - case re.stopEventLoop <- waitForCallbacks: - <-re.closed + timeout := time.NewTimer(10 * time.Millisecond) + defer timeout.Stop() + + for { + select { + case <-re.closed: + return + case re.stopEventLoop <- waitForCallbacks: + <-re.closed + return + case <-timeout.C: + // JS is blocked, interrupt and try again. + re.vm.Interrupt(errors.New("JS runtime stopped")) + } } } // Exec(file) loads and runs the contents of a file // if a relative path is given, the jsre's assetPath is used func (re *JSRE) Exec(file string) error { - code, err := ioutil.ReadFile(common.AbsolutePath(re.assetPath, file)) + code, err := os.ReadFile(common.AbsolutePath(re.assetPath, file)) if err != nil { return err } - var script *otto.Script - re.Do(func(vm *otto.Otto) { - script, err = vm.Compile(file, code) - if err != nil { - return - } - _, err = vm.Run(script) - }) - return err -} - -// Bind assigns value v to a variable in the JS environment -// This method is deprecated, use Set. -func (re *JSRE) Bind(name string, v interface{}) error { - return re.Set(name, v) + return re.Compile(file, string(code)) } // Run runs a piece of JS code. -func (re *JSRE) Run(code string) (v otto.Value, err error) { - re.Do(func(vm *otto.Otto) { v, err = vm.Run(code) }) - return v, err -} - -// Get returns the value of a variable in the JS environment. -func (re *JSRE) Get(ns string) (v otto.Value, err error) { - re.Do(func(vm *otto.Otto) { v, err = vm.Get(ns) }) +func (re *JSRE) Run(code string) (v goja.Value, err error) { + re.Do(func(vm *goja.Runtime) { v, err = vm.RunString(code) }) return v, err } // Set assigns value v to a variable in the JS environment. func (re *JSRE) Set(ns string, v interface{}) (err error) { - re.Do(func(vm *otto.Otto) { err = vm.Set(ns, v) }) + re.Do(func(vm *goja.Runtime) { vm.Set(ns, v) }) return err } -// loadScript executes a JS script from inside the currently executing JS code. -func (re *JSRE) loadScript(call otto.FunctionCall) otto.Value { - file, err := call.Argument(0).ToString() - if err != nil { - // TODO: throw exception - return otto.FalseValue() - } - file = common.AbsolutePath(re.assetPath, file) - source, err := ioutil.ReadFile(file) - if err != nil { - // TODO: throw exception - return otto.FalseValue() - } - if _, err := compileAndRun(call.Otto, file, source); err != nil { - // TODO: throw exception - fmt.Println("err:", err) - return otto.FalseValue() - } - // TODO: return evaluation result - return otto.TrueValue() +// MakeCallback turns the given function into a function that's callable by JS. +func MakeCallback(vm *goja.Runtime, fn func(Call) (goja.Value, error)) goja.Value { + return vm.ToValue(func(call goja.FunctionCall) goja.Value { + result, err := fn(Call{call, vm}) + if err != nil { + panic(vm.NewGoError(err)) + } + return result + }) } -// Evaluate executes code and pretty prints the result to the specified output -// stream. -func (re *JSRE) Evaluate(code string, w io.Writer) error { - var fail error - - re.Do(func(vm *otto.Otto) { - val, err := vm.Run(code) +// Evaluate executes code and pretty prints the result to the specified output stream. +func (re *JSRE) Evaluate(code string, w io.Writer) { + re.Do(func(vm *goja.Runtime) { + val, err := vm.RunString(code) if err != nil { prettyError(vm, err, w) } else { @@ -317,19 +295,46 @@ func (re *JSRE) Evaluate(code string, w io.Writer) error { } fmt.Fprintln(w) }) - return fail +} + +// Interrupt stops the current JS evaluation. +func (re *JSRE) Interrupt(v interface{}) { + done := make(chan bool) + noop := func(*goja.Runtime) {} + + select { + case re.evalQueue <- &evalReq{noop, done}: + // event loop is not blocked. + default: + re.vm.Interrupt(v) + } } // Compile compiles and then runs a piece of JS code. -func (re *JSRE) Compile(filename string, src interface{}) (err error) { - re.Do(func(vm *otto.Otto) { _, err = compileAndRun(vm, filename, src) }) +func (re *JSRE) Compile(filename string, src string) (err error) { + re.Do(func(vm *goja.Runtime) { _, err = compileAndRun(vm, filename, src) }) return err } -func compileAndRun(vm *otto.Otto, filename string, src interface{}) (otto.Value, error) { - script, err := vm.Compile(filename, src) +// loadScript loads and executes a JS file. +func (re *JSRE) loadScript(call Call) (goja.Value, error) { + file := call.Argument(0).ToString().String() + file = common.AbsolutePath(re.assetPath, file) + source, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("could not read file %s: %v", file, err) + } + value, err := compileAndRun(re.vm, file, string(source)) + if err != nil { + return nil, fmt.Errorf("error while compiling or running script: %v", err) + } + return value, nil +} + +func compileAndRun(vm *goja.Runtime, filename string, src string) (goja.Value, error) { + script, err := goja.Compile(filename, src, false) if err != nil { - return otto.Value{}, err + return goja.Null(), err } - return vm.Run(script) + return vm.RunProgram(script) } diff --git a/internal/jsre/jsre_test.go b/internal/jsre/jsre_test.go index bcb6e0dd..bb4ff5fa 100644 --- a/internal/jsre/jsre_test.go +++ b/internal/jsre/jsre_test.go @@ -17,46 +17,41 @@ package jsre import ( - "io/ioutil" "os" "path" + "reflect" "testing" "time" - "github.com/robertkrimen/otto" + "github.com/dop251/goja" ) -type testNativeObjectBinding struct{} +type testNativeObjectBinding struct { + vm *goja.Runtime +} type msg struct { Msg string } -func (no *testNativeObjectBinding) TestMethod(call otto.FunctionCall) otto.Value { - m, err := call.Argument(0).ToString() - if err != nil { - return otto.UndefinedValue() - } - v, _ := call.Otto.ToValue(&msg{m}) - return v +func (no *testNativeObjectBinding) TestMethod(call goja.FunctionCall) goja.Value { + m := call.Argument(0).ToString().String() + return no.vm.ToValue(&msg{m}) } -func newWithTestJS(t *testing.T, testjs string) (*JSRE, string) { - dir, err := ioutil.TempDir("", "jsre-test") - if err != nil { - t.Fatal("cannot create temporary directory:", err) - } +func newWithTestJS(t *testing.T, testjs string) *JSRE { + dir := t.TempDir() if testjs != "" { - if err := ioutil.WriteFile(path.Join(dir, "test.js"), []byte(testjs), os.ModePerm); err != nil { + if err := os.WriteFile(path.Join(dir, "test.js"), []byte(testjs), os.ModePerm); err != nil { t.Fatal("cannot create test.js:", err) } } - return New(dir, os.Stdout), dir + jsre := New(dir, os.Stdout) + return jsre } func TestExec(t *testing.T) { - jsre, dir := newWithTestJS(t, `msg = "testMsg"`) - defer os.RemoveAll(dir) + jsre := newWithTestJS(t, `msg = "testMsg"`) err := jsre.Exec("test.js") if err != nil { @@ -66,11 +61,11 @@ func TestExec(t *testing.T) { if err != nil { t.Errorf("expected no error, got %v", err) } - if !val.IsString() { + if val.ExportType().Kind() != reflect.String { t.Errorf("expected string value, got %v", val) } exp := "testMsg" - got, _ := val.ToString() + got := val.ToString().String() if exp != got { t.Errorf("expected '%v', got '%v'", exp, got) } @@ -78,25 +73,24 @@ func TestExec(t *testing.T) { } func TestNatto(t *testing.T) { - jsre, dir := newWithTestJS(t, `setTimeout(function(){msg = "testMsg"}, 1);`) - defer os.RemoveAll(dir) + jsre := newWithTestJS(t, `setTimeout(function(){msg = "testMsg"}, 1);`) err := jsre.Exec("test.js") if err != nil { - t.Errorf("expected no error, got %v", err) + t.Fatalf("expected no error, got %v", err) } time.Sleep(100 * time.Millisecond) val, err := jsre.Run("msg") if err != nil { - t.Errorf("expected no error, got %v", err) + t.Fatalf("expected no error, got %v", err) } - if !val.IsString() { - t.Errorf("expected string value, got %v", val) + if val.ExportType().Kind() != reflect.String { + t.Fatalf("expected string value, got %v", val) } exp := "testMsg" - got, _ := val.ToString() + got := val.ToString().String() if exp != got { - t.Errorf("expected '%v', got '%v'", exp, got) + t.Fatalf("expected '%v', got '%v'", exp, got) } jsre.Stop(false) } @@ -105,7 +99,7 @@ func TestBind(t *testing.T) { jsre := New("", os.Stdout) defer jsre.Stop(false) - jsre.Bind("no", &testNativeObjectBinding{}) + jsre.Set("no", &testNativeObjectBinding{vm: jsre.vm}) _, err := jsre.Run(`no.TestMethod("testMsg")`) if err != nil { @@ -114,8 +108,7 @@ func TestBind(t *testing.T) { } func TestLoadScript(t *testing.T) { - jsre, dir := newWithTestJS(t, `msg = "testMsg"`) - defer os.RemoveAll(dir) + jsre := newWithTestJS(t, `msg = "testMsg"`) _, err := jsre.Run(`loadScript("test.js")`) if err != nil { @@ -125,11 +118,11 @@ func TestLoadScript(t *testing.T) { if err != nil { t.Errorf("expected no error, got %v", err) } - if !val.IsString() { + if val.ExportType().Kind() != reflect.String { t.Errorf("expected string value, got %v", val) } exp := "testMsg" - got, _ := val.ToString() + got := val.ToString().String() if exp != got { t.Errorf("expected '%v', got '%v'", exp, got) } diff --git a/internal/jsre/pretty.go b/internal/jsre/pretty.go index 16fa91b6..bd772b49 100644 --- a/internal/jsre/pretty.go +++ b/internal/jsre/pretty.go @@ -19,12 +19,13 @@ package jsre import ( "fmt" "io" + "reflect" "sort" "strconv" "strings" + "github.com/dop251/goja" "github.com/fatih/color" - "github.com/robertkrimen/otto" ) const ( @@ -52,29 +53,29 @@ var boringKeys = map[string]bool{ } // prettyPrint writes value to standard output. -func prettyPrint(vm *otto.Otto, value otto.Value, w io.Writer) { +func prettyPrint(vm *goja.Runtime, value goja.Value, w io.Writer) { ppctx{vm: vm, w: w}.printValue(value, 0, false) } // prettyError writes err to standard output. -func prettyError(vm *otto.Otto, err error, w io.Writer) { +func prettyError(vm *goja.Runtime, err error, w io.Writer) { failure := err.Error() - if ottoErr, ok := err.(*otto.Error); ok { - failure = ottoErr.String() + if gojaErr, ok := err.(*goja.Exception); ok { + failure = gojaErr.String() } fmt.Fprint(w, ErrorColor("%s", failure)) } -func (re *JSRE) prettyPrintJS(call otto.FunctionCall) otto.Value { - for _, v := range call.ArgumentList { - prettyPrint(call.Otto, v, re.output) +func (re *JSRE) prettyPrintJS(call goja.FunctionCall) goja.Value { + for _, v := range call.Arguments { + prettyPrint(re.vm, v, re.output) fmt.Fprintln(re.output) } - return otto.UndefinedValue() + return goja.Undefined() } type ppctx struct { - vm *otto.Otto + vm *goja.Runtime w io.Writer } @@ -82,35 +83,47 @@ func (ctx ppctx) indent(level int) string { return strings.Repeat(indentString, level) } -func (ctx ppctx) printValue(v otto.Value, level int, inArray bool) { +func (ctx ppctx) printValue(v goja.Value, level int, inArray bool) { + if goja.IsNull(v) || goja.IsUndefined(v) { + fmt.Fprint(ctx.w, SpecialColor(v.String())) + return + } + kind := v.ExportType().Kind() switch { - case v.IsObject(): - ctx.printObject(v.Object(), level, inArray) - case v.IsNull(): - fmt.Fprint(ctx.w, SpecialColor("null")) - case v.IsUndefined(): - fmt.Fprint(ctx.w, SpecialColor("undefined")) - case v.IsString(): - s, _ := v.ToString() - fmt.Fprint(ctx.w, StringColor("%q", s)) - case v.IsBoolean(): - b, _ := v.ToBoolean() - fmt.Fprint(ctx.w, SpecialColor("%t", b)) - case v.IsNaN(): - fmt.Fprint(ctx.w, NumberColor("NaN")) - case v.IsNumber(): - s, _ := v.ToString() - fmt.Fprint(ctx.w, NumberColor("%s", s)) + case kind == reflect.Bool: + fmt.Fprint(ctx.w, SpecialColor("%t", v.ToBoolean())) + case kind == reflect.String: + fmt.Fprint(ctx.w, StringColor("%q", v.String())) + case kind >= reflect.Int && kind <= reflect.Complex128: + fmt.Fprint(ctx.w, NumberColor("%s", v.String())) default: - fmt.Fprint(ctx.w, "") + if obj, ok := v.(*goja.Object); ok { + ctx.printObject(obj, level, inArray) + } else { + fmt.Fprintf(ctx.w, "", v) + } } } -func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { - switch obj.Class() { +// SafeGet attempt to get the value associated to `key`, and +// catches the panic that goja creates if an error occurs in +// key. +func SafeGet(obj *goja.Object, key string) (ret goja.Value) { + defer func() { + if r := recover(); r != nil { + ret = goja.Undefined() + } + }() + ret = obj.Get(key) + + return ret +} + +func (ctx ppctx) printObject(obj *goja.Object, level int, inArray bool) { + switch obj.ClassName() { case "Array", "GoArray": - lv, _ := obj.Get("length") - len, _ := lv.ToInteger() + lv := obj.Get("length") + len := lv.ToInteger() if len == 0 { fmt.Fprintf(ctx.w, "[]") return @@ -121,8 +134,8 @@ func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { } fmt.Fprint(ctx.w, "[") for i := int64(0); i < len; i++ { - el, err := obj.Get(strconv.FormatInt(i, 10)) - if err == nil { + el := obj.Get(strconv.FormatInt(i, 10)) + if el != nil { ctx.printValue(el, level+1, true) } if i < len-1 { @@ -149,7 +162,7 @@ func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { } fmt.Fprintln(ctx.w, "{") for i, k := range keys { - v, _ := obj.Get(k) + v := SafeGet(obj, k) fmt.Fprintf(ctx.w, "%s%s: ", ctx.indent(level+1), k) ctx.printValue(v, level+1, false) if i < len(keys)-1 { @@ -163,29 +176,25 @@ func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { fmt.Fprintf(ctx.w, "%s}", ctx.indent(level)) case "Function": - // Use toString() to display the argument list if possible. - if robj, err := obj.Call("toString"); err != nil { - fmt.Fprint(ctx.w, FunctionColor("function()")) - } else { - desc := strings.Trim(strings.Split(robj.String(), "{")[0], " \t\n") - desc = strings.Replace(desc, " (", "(", 1) - fmt.Fprint(ctx.w, FunctionColor("%s", desc)) - } + robj := obj.ToString() + desc := strings.Trim(strings.Split(robj.String(), "{")[0], " \t\n") + desc = strings.Replace(desc, " (", "(", 1) + fmt.Fprint(ctx.w, FunctionColor("%s", desc)) case "RegExp": fmt.Fprint(ctx.w, StringColor("%s", toString(obj))) default: - if v, _ := obj.Get("toString"); v.IsFunction() && level <= maxPrettyPrintLevel { - s, _ := obj.Call("toString") - fmt.Fprintf(ctx.w, "<%s %s>", obj.Class(), s.String()) + if level <= maxPrettyPrintLevel { + s := obj.ToString().String() + fmt.Fprintf(ctx.w, "<%s %s>", obj.ClassName(), s) } else { - fmt.Fprintf(ctx.w, "<%s>", obj.Class()) + fmt.Fprintf(ctx.w, "<%s>", obj.ClassName()) } } } -func (ctx ppctx) fields(obj *otto.Object) []string { +func (ctx ppctx) fields(obj *goja.Object) []string { var ( vals, methods []string seen = make(map[string]bool) @@ -195,10 +204,20 @@ func (ctx ppctx) fields(obj *otto.Object) []string { return } seen[k] = true - if v, _ := obj.Get(k); v.IsFunction() { - methods = append(methods, k) - } else { + + key := SafeGet(obj, k) + if key == nil { + // The value corresponding to that key could not be found + // (typically because it is backed by an RPC call that is + // not supported by this instance. Add it to the list of + // values so that it appears as `undefined` to the user. vals = append(vals, k) + } else { + if _, callable := goja.AssertFunction(key); callable { + methods = append(methods, k) + } else { + vals = append(vals, k) + } } } iterOwnAndConstructorKeys(ctx.vm, obj, add) @@ -207,13 +226,13 @@ func (ctx ppctx) fields(obj *otto.Object) []string { return append(vals, methods...) } -func iterOwnAndConstructorKeys(vm *otto.Otto, obj *otto.Object, f func(string)) { +func iterOwnAndConstructorKeys(vm *goja.Runtime, obj *goja.Object, f func(string)) { seen := make(map[string]bool) iterOwnKeys(vm, obj, func(prop string) { seen[prop] = true f(prop) }) - if cp := constructorPrototype(obj); cp != nil { + if cp := constructorPrototype(vm, obj); cp != nil { iterOwnKeys(vm, cp, func(prop string) { if !seen[prop] { f(prop) @@ -222,10 +241,17 @@ func iterOwnAndConstructorKeys(vm *otto.Otto, obj *otto.Object, f func(string)) } } -func iterOwnKeys(vm *otto.Otto, obj *otto.Object, f func(string)) { - Object, _ := vm.Object("Object") - rv, _ := Object.Call("getOwnPropertyNames", obj.Value()) - gv, _ := rv.Export() +func iterOwnKeys(vm *goja.Runtime, obj *goja.Object, f func(string)) { + Object := vm.Get("Object").ToObject(vm) + getOwnPropertyNames, isFunc := goja.AssertFunction(Object.Get("getOwnPropertyNames")) + if !isFunc { + panic(vm.ToValue("Object.getOwnPropertyNames isn't a function")) + } + rv, err := getOwnPropertyNames(goja.Null(), obj) + if err != nil { + panic(vm.ToValue(fmt.Sprintf("Error getting object properties: %v", err))) + } + gv := rv.Export() switch gv := gv.(type) { case []interface{}: for _, v := range gv { @@ -240,32 +266,35 @@ func iterOwnKeys(vm *otto.Otto, obj *otto.Object, f func(string)) { } } -func (ctx ppctx) isBigNumber(v *otto.Object) bool { +func (ctx ppctx) isBigNumber(v *goja.Object) bool { // Handle numbers with custom constructor. - if v, _ := v.Get("constructor"); v.Object() != nil { - if strings.HasPrefix(toString(v.Object()), "function BigNumber") { + if obj := v.Get("constructor").ToObject(ctx.vm); obj != nil { + if strings.HasPrefix(toString(obj), "function BigNumber") { return true } } // Handle default constructor. - BigNumber, _ := ctx.vm.Object("BigNumber.prototype") + BigNumber := ctx.vm.Get("BigNumber").ToObject(ctx.vm) if BigNumber == nil { return false } - bv, _ := BigNumber.Call("isPrototypeOf", v) - b, _ := bv.ToBoolean() - return b + prototype := BigNumber.Get("prototype").ToObject(ctx.vm) + isPrototypeOf, callable := goja.AssertFunction(prototype.Get("isPrototypeOf")) + if !callable { + return false + } + bv, _ := isPrototypeOf(prototype, v) + return bv.ToBoolean() } -func toString(obj *otto.Object) string { - s, _ := obj.Call("toString") - return s.String() +func toString(obj *goja.Object) string { + return obj.ToString().String() } -func constructorPrototype(obj *otto.Object) *otto.Object { - if v, _ := obj.Get("constructor"); v.Object() != nil { - if v, _ = v.Object().Get("prototype"); v.Object() != nil { - return v.Object() +func constructorPrototype(vm *goja.Runtime, obj *goja.Object) *goja.Object { + if v := obj.Get("constructor"); v != nil { + if v := v.ToObject(vm).Get("prototype"); v != nil { + return v.ToObject(vm) } } return nil diff --git a/internal/shutdowncheck/shutdown_tracker.go b/internal/shutdowncheck/shutdown_tracker.go new file mode 100644 index 00000000..c95b4f02 --- /dev/null +++ b/internal/shutdowncheck/shutdown_tracker.go @@ -0,0 +1,85 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package shutdowncheck + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// ShutdownTracker is a service that reports previous unclean shutdowns +// upon start. It needs to be started after a successful start-up and stopped +// after a successful shutdown, just before the db is closed. +type ShutdownTracker struct { + db ethdb.Database + stopCh chan struct{} +} + +// NewShutdownTracker creates a new ShutdownTracker instance and has +// no other side-effect. +func NewShutdownTracker(db ethdb.Database) *ShutdownTracker { + return &ShutdownTracker{ + db: db, + stopCh: make(chan struct{}), + } +} + +// MarkStartup is to be called in the beginning when the node starts. It will: +// - Push a new startup marker to the db +// - Report previous unclean shutdowns +func (t *ShutdownTracker) MarkStartup() { + if uncleanShutdowns, discards, err := rawdb.PushUncleanShutdownMarker(t.db); err != nil { + log.Error("Could not update unclean-shutdown-marker list", "error", err) + } else { + if discards > 0 { + log.Warn("Old unclean shutdowns found", "count", discards) + } + for _, tstamp := range uncleanShutdowns { + t := time.Unix(int64(tstamp), 0) + log.Warn("Unclean shutdown detected", "booted", t, + "age", common.PrettyAge(t)) + } + } +} + +// Start runs an event loop that updates the current marker's timestamp every 5 minutes. +func (t *ShutdownTracker) Start() { + go func() { + ticker := time.NewTicker(5 * time.Minute) + defer ticker.Stop() + for { + select { + case <-ticker.C: + rawdb.UpdateUncleanShutdownMarker(t.db) + case <-t.stopCh: + return + } + } + }() +} + +// Stop will stop the update loop and clear the current marker. +func (t *ShutdownTracker) Stop() { + // Stop update loop. + t.stopCh <- struct{}{} + // Clear last marker. + rawdb.PopUncleanShutdownMarker(t.db) +} diff --git a/internal/syncx/mutex.go b/internal/syncx/mutex.go new file mode 100644 index 00000000..96a21986 --- /dev/null +++ b/internal/syncx/mutex.go @@ -0,0 +1,64 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package syncx contains exotic synchronization primitives. +package syncx + +// ClosableMutex is a mutex that can also be closed. +// Once closed, it can never be taken again. +type ClosableMutex struct { + ch chan struct{} +} + +func NewClosableMutex() *ClosableMutex { + ch := make(chan struct{}, 1) + ch <- struct{}{} + return &ClosableMutex{ch} +} + +// TryLock attempts to lock cm. +// If the mutex is closed, TryLock returns false. +func (cm *ClosableMutex) TryLock() bool { + _, ok := <-cm.ch + return ok +} + +// MustLock locks cm. +// If the mutex is closed, MustLock panics. +func (cm *ClosableMutex) MustLock() { + _, ok := <-cm.ch + if !ok { + panic("mutex closed") + } +} + +// Unlock unlocks cm. +func (cm *ClosableMutex) Unlock() { + select { + case cm.ch <- struct{}{}: + default: + panic("Unlock of already-unlocked ClosableMutex") + } +} + +// Close locks the mutex, then closes it. +func (cm *ClosableMutex) Close() { + _, ok := <-cm.ch + if !ok { + panic("Close of already-closed ClosableMutex") + } + close(cm.ch) +} diff --git a/internal/testlog/testlog.go b/internal/testlog/testlog.go index e183768f..684339f1 100644 --- a/internal/testlog/testlog.go +++ b/internal/testlog/testlog.go @@ -18,18 +18,12 @@ package testlog import ( + "sync" "testing" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) -// 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 -} - // 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)}) @@ -44,3 +38,105 @@ func (h *handler) Log(r *log.Record) error { h.t.Logf("%s", h.fmt.Format(r)) return nil } + +// logger implements log.Logger such that all output goes to the unit test log via +// t.Logf(). All methods in between logger.Trace, logger.Debug, etc. are marked as test +// helpers, so the file and line number in unit test output correspond to the call site +// which emitted the log message. +type logger struct { + t *testing.T + l log.Logger + mu *sync.Mutex + h *bufHandler +} + +type bufHandler struct { + buf []*log.Record + fmt log.Format +} + +func (h *bufHandler) Log(r *log.Record) error { + h.buf = append(h.buf, r) + return nil +} + +// Logger returns a logger which logs to the unit test log of t. +func Logger(t *testing.T, level log.Lvl) log.Logger { + l := &logger{ + t: t, + l: log.New(), + mu: new(sync.Mutex), + h: &bufHandler{fmt: log.TerminalFormat(false)}, + } + l.l.SetHandler(log.LvlFilterHandler(level, l.h)) + return l +} + +func (l *logger) Trace(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Trace(msg, ctx...) + l.flush() +} + +func (l *logger) Debug(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Debug(msg, ctx...) + l.flush() +} + +func (l *logger) Info(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Info(msg, ctx...) + l.flush() +} + +func (l *logger) Warn(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Warn(msg, ctx...) + l.flush() +} + +func (l *logger) Error(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Error(msg, ctx...) + l.flush() +} + +func (l *logger) Crit(msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Crit(msg, ctx...) + l.flush() +} + +func (l *logger) New(ctx ...interface{}) log.Logger { + return &logger{l.t, l.l.New(ctx...), l.mu, l.h} +} + +func (l *logger) GetHandler() log.Handler { + return l.l.GetHandler() +} + +func (l *logger) SetHandler(h log.Handler) { + l.l.SetHandler(h) +} + +// flush writes all buffered messages and clears the buffer. +func (l *logger) flush() { + l.t.Helper() + for _, r := range l.h.buf { + l.t.Logf("%s", l.h.fmt.Format(r)) + } + l.h.buf = nil +} diff --git a/internal/utesting/utesting.go b/internal/utesting/utesting.go new file mode 100644 index 00000000..ee99794c --- /dev/null +++ b/internal/utesting/utesting.go @@ -0,0 +1,338 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package utesting provides a standalone replacement for package testing. +// +// This package exists because package testing cannot easily be embedded into a +// standalone go program. It provides an API that mirrors the standard library +// testing API. +package utesting + +import ( + "bytes" + "fmt" + "io" + "regexp" + "runtime" + "sync" + "time" +) + +// Test represents a single test. +type Test struct { + Name string + Fn func(*T) +} + +// Result is the result of a test execution. +type Result struct { + Name string + Failed bool + Output string + Duration time.Duration +} + +// MatchTests returns the tests whose name matches a regular expression. +func MatchTests(tests []Test, expr string) []Test { + var results []Test + re, err := regexp.Compile(expr) + if err != nil { + return nil + } + for _, test := range tests { + if re.MatchString(test.Name) { + results = append(results, test) + } + } + return results +} + +// RunTests executes all given tests in order and returns their results. +// If the report writer is non-nil, a test report is written to it in real time. +func RunTests(tests []Test, report io.Writer) []Result { + if report == nil { + report = io.Discard + } + results := run(tests, newConsoleOutput(report)) + fails := CountFailures(results) + fmt.Fprintf(report, "%v/%v tests passed.\n", len(tests)-fails, len(tests)) + return results +} + +// RunTAP runs the given tests and writes Test Anything Protocol output +// to the report writer. +func RunTAP(tests []Test, report io.Writer) []Result { + return run(tests, newTAP(report, len(tests))) +} + +func run(tests []Test, output testOutput) []Result { + var results = make([]Result, len(tests)) + for i, test := range tests { + buffer := new(bytes.Buffer) + logOutput := io.MultiWriter(buffer, output) + + output.testStart(test.Name) + start := time.Now() + results[i].Name = test.Name + results[i].Failed = runTest(test, logOutput) + results[i].Duration = time.Since(start) + results[i].Output = buffer.String() + output.testResult(results[i]) + } + return results +} + +// testOutput is implemented by output formats. +type testOutput interface { + testStart(name string) + Write([]byte) (int, error) + testResult(Result) +} + +// consoleOutput prints test results similarly to go test. +type consoleOutput struct { + out io.Writer + indented *indentWriter + curTest string + wroteHeader bool +} + +func newConsoleOutput(w io.Writer) *consoleOutput { + return &consoleOutput{ + out: w, + indented: newIndentWriter(" ", w), + } +} + +// testStart signals the start of a new test. +func (c *consoleOutput) testStart(name string) { + c.curTest = name + c.wroteHeader = false +} + +// Write handles test log output. +func (c *consoleOutput) Write(b []byte) (int, error) { + if !c.wroteHeader { + // This is the first output line from the test. Print a "-- RUN" header. + fmt.Fprintln(c.out, "-- RUN", c.curTest) + c.wroteHeader = true + } + return c.indented.Write(b) +} + +// testResult prints the final test result line. +func (c *consoleOutput) testResult(r Result) { + c.indented.flush() + pd := r.Duration.Truncate(100 * time.Microsecond) + if r.Failed { + fmt.Fprintf(c.out, "-- FAIL %s (%v)\n", r.Name, pd) + } else { + fmt.Fprintf(c.out, "-- OK %s (%v)\n", r.Name, pd) + } +} + +// tapOutput produces Test Anything Protocol v13 output. +type tapOutput struct { + out io.Writer + indented *indentWriter + counter int +} + +func newTAP(out io.Writer, numTests int) *tapOutput { + fmt.Fprintf(out, "1..%d\n", numTests) + return &tapOutput{ + out: out, + indented: newIndentWriter("# ", out), + } +} + +func (t *tapOutput) testStart(name string) { + t.counter++ +} + +// Write does nothing for TAP because there is no real-time output of test logs. +func (t *tapOutput) Write(b []byte) (int, error) { + return len(b), nil +} + +func (t *tapOutput) testResult(r Result) { + status := "ok" + if r.Failed { + status = "not ok" + } + fmt.Fprintln(t.out, status, t.counter, r.Name) + t.indented.Write([]byte(r.Output)) + t.indented.flush() +} + +// indentWriter indents all written text. +type indentWriter struct { + out io.Writer + indent string + inLine bool +} + +func newIndentWriter(indent string, out io.Writer) *indentWriter { + return &indentWriter{out: out, indent: indent} +} + +func (w *indentWriter) Write(b []byte) (n int, err error) { + for len(b) > 0 { + if !w.inLine { + if _, err = io.WriteString(w.out, w.indent); err != nil { + return n, err + } + w.inLine = true + } + + end := bytes.IndexByte(b, '\n') + if end == -1 { + nn, err := w.out.Write(b) + n += nn + return n, err + } + + line := b[:end+1] + nn, err := w.out.Write(line) + n += nn + if err != nil { + return n, err + } + b = b[end+1:] + w.inLine = false + } + return n, err +} + +// flush ensures the current line is terminated. +func (w *indentWriter) flush() { + if w.inLine { + fmt.Println(w.out) + w.inLine = false + } +} + +// CountFailures returns the number of failed tests in the result slice. +func CountFailures(rr []Result) int { + count := 0 + for _, r := range rr { + if r.Failed { + count++ + } + } + return count +} + +// Run executes a single test. +func Run(test Test) (bool, string) { + output := new(bytes.Buffer) + failed := runTest(test, output) + return failed, output.String() +} + +func runTest(test Test, output io.Writer) bool { + t := &T{output: output} + done := make(chan struct{}) + go func() { + defer close(done) + defer func() { + if err := recover(); err != nil { + buf := make([]byte, 4096) + i := runtime.Stack(buf, false) + t.Logf("panic: %v\n\n%s", err, buf[:i]) + t.Fail() + } + }() + test.Fn(t) + }() + <-done + return t.failed +} + +// T is the value given to the test function. The test can signal failures +// and log output by calling methods on this object. +type T struct { + mu sync.Mutex + failed bool + output io.Writer +} + +// Helper exists for compatibility with testing.T. +func (t *T) Helper() {} + +// FailNow marks the test as having failed and stops its execution by calling +// runtime.Goexit (which then runs all deferred calls in the current goroutine). +func (t *T) FailNow() { + t.Fail() + runtime.Goexit() +} + +// Fail marks the test as having failed but continues execution. +func (t *T) Fail() { + t.mu.Lock() + defer t.mu.Unlock() + t.failed = true +} + +// Failed reports whether the test has failed. +func (t *T) Failed() bool { + t.mu.Lock() + defer t.mu.Unlock() + return t.failed +} + +// Log formats its arguments using default formatting, analogous to Println, and records +// the text in the error log. +func (t *T) Log(vs ...interface{}) { + t.mu.Lock() + defer t.mu.Unlock() + fmt.Fprintln(t.output, vs...) +} + +// Logf formats its arguments according to the format, analogous to Printf, and records +// the text in the error log. A final newline is added if not provided. +func (t *T) Logf(format string, vs ...interface{}) { + t.mu.Lock() + defer t.mu.Unlock() + if len(format) == 0 || format[len(format)-1] != '\n' { + format += "\n" + } + fmt.Fprintf(t.output, format, vs...) +} + +// Error is equivalent to Log followed by Fail. +func (t *T) Error(vs ...interface{}) { + t.Log(vs...) + t.Fail() +} + +// Errorf is equivalent to Logf followed by Fail. +func (t *T) Errorf(format string, vs ...interface{}) { + t.Logf(format, vs...) + t.Fail() +} + +// Fatal is equivalent to Log followed by FailNow. +func (t *T) Fatal(vs ...interface{}) { + t.Log(vs...) + t.FailNow() +} + +// Fatalf is equivalent to Logf followed by FailNow. +func (t *T) Fatalf(format string, vs ...interface{}) { + t.Logf(format, vs...) + t.FailNow() +} diff --git a/internal/utesting/utesting_test.go b/internal/utesting/utesting_test.go new file mode 100644 index 00000000..31c7911c --- /dev/null +++ b/internal/utesting/utesting_test.go @@ -0,0 +1,139 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utesting + +import ( + "bytes" + "regexp" + "strings" + "testing" +) + +func TestTest(t *testing.T) { + tests := []Test{ + { + Name: "successful test", + Fn: func(t *T) {}, + }, + { + Name: "failing test", + Fn: func(t *T) { + t.Log("output") + t.Error("failed") + }, + }, + { + Name: "panicking test", + Fn: func(t *T) { + panic("oh no") + }, + }, + } + results := RunTests(tests, nil) + + if results[0].Failed || results[0].Output != "" { + t.Fatalf("wrong result for successful test: %#v", results[0]) + } + if !results[1].Failed || results[1].Output != "output\nfailed\n" { + t.Fatalf("wrong result for failing test: %#v", results[1]) + } + if !results[2].Failed || !strings.HasPrefix(results[2].Output, "panic: oh no\n") { + t.Fatalf("wrong result for panicking test: %#v", results[2]) + } +} + +var outputTests = []Test{ + { + Name: "TestWithLogs", + Fn: func(t *T) { + t.Log("output line 1") + t.Log("output line 2\noutput line 3") + }, + }, + { + Name: "TestNoLogs", + Fn: func(t *T) {}, + }, + { + Name: "FailWithLogs", + Fn: func(t *T) { + t.Log("output line 1") + t.Error("failed 1") + }, + }, + { + Name: "FailMessage", + Fn: func(t *T) { + t.Error("failed 2") + }, + }, + { + Name: "FailNoOutput", + Fn: func(t *T) { + t.Fail() + }, + }, +} + +func TestOutput(t *testing.T) { + var buf bytes.Buffer + RunTests(outputTests, &buf) + + want := regexp.MustCompile(` +^-- RUN TestWithLogs + output line 1 + output line 2 + output line 3 +-- OK TestWithLogs \([^)]+\) +-- OK TestNoLogs \([^)]+\) +-- RUN FailWithLogs + output line 1 + failed 1 +-- FAIL FailWithLogs \([^)]+\) +-- RUN FailMessage + failed 2 +-- FAIL FailMessage \([^)]+\) +-- FAIL FailNoOutput \([^)]+\) +2/5 tests passed. +$`[1:]) + if !want.MatchString(buf.String()) { + t.Fatalf("output does not match: %q", buf.String()) + } +} + +func TestOutputTAP(t *testing.T) { + var buf bytes.Buffer + RunTAP(outputTests, &buf) + + want := ` +1..5 +ok 1 TestWithLogs +# output line 1 +# output line 2 +# output line 3 +ok 2 TestNoLogs +not ok 3 FailWithLogs +# output line 1 +# failed 1 +not ok 4 FailMessage +# failed 2 +not ok 5 FailNoOutput +` + if buf.String() != want[1:] { + t.Fatalf("output does not match: %q", buf.String()) + } +} diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 4a5d4b4d..134562bd 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -18,54 +18,20 @@ package web3ext var Modules = map[string]string{ - "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, + "admin": AdminJs, + "clique": CliqueJs, + "ethash": EthashJs, + "debug": DebugJs, + "eth": EthJs, + "miner": MinerJs, + "net": NetJs, + "personal": PersonalJs, + "rpc": RpcJs, + "txpool": TxpoolJs, + "les": LESJs, + "vflux": VfluxJs, } -const ChequebookJs = ` -web3._extend({ - property: 'chequebook', - methods: [ - new web3._extend.Method({ - name: 'deposit', - call: 'chequebook_deposit', - params: 1, - inputFormatter: [null] - }), - new web3._extend.Property({ - name: 'balance', - getter: 'chequebook_balance', - outputFormatter: web3._extend.utils.toDecimal - }), - new web3._extend.Method({ - name: 'cash', - call: 'chequebook_cash', - params: 1, - inputFormatter: [null] - }), - new web3._extend.Method({ - name: 'issue', - call: 'chequebook_issue', - params: 2, - inputFormatter: [null, null] - }), - ] -}); -` - const CliqueJs = ` web3._extend({ property: 'clique', @@ -74,7 +40,7 @@ web3._extend({ name: 'getSnapshot', call: 'clique_getSnapshot', params: 1, - inputFormatter: [null] + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] }), new web3._extend.Method({ name: 'getSnapshotAtHash', @@ -85,7 +51,7 @@ web3._extend({ name: 'getSigners', call: 'clique_getSigners', params: 1, - inputFormatter: [null] + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] }), new web3._extend.Method({ name: 'getSignersAtHash', @@ -102,6 +68,17 @@ web3._extend({ call: 'clique_discard', params: 1 }), + new web3._extend.Method({ + name: 'status', + call: 'clique_status', + params: 0 + }), + new web3._extend.Method({ + name: 'getSigner', + call: 'clique_getSigner', + params: 1, + inputFormatter: [null] + }), ], properties: [ new web3._extend.Property({ @@ -132,8 +109,8 @@ web3._extend({ params: 3, }), new web3._extend.Method({ - name: 'submitHashRate', - call: 'ethash_submitHashRate', + name: 'submitHashrate', + call: 'ethash_submitHashrate', params: 2, }), ] @@ -167,8 +144,8 @@ web3._extend({ new web3._extend.Method({ name: 'exportChain', call: 'admin_exportChain', - params: 1, - inputFormatter: [null] + params: 3, + inputFormatter: [null, null, null] }), new web3._extend.Method({ name: 'importChain', @@ -180,12 +157,24 @@ web3._extend({ call: 'admin_sleepBlocks', params: 2 }), + new web3._extend.Method({ + name: 'startHTTP', + call: 'admin_startHTTP', + params: 5, + inputFormatter: [null, null, null, null, null] + }), + new web3._extend.Method({ + name: 'stopHTTP', + call: 'admin_stopHTTP' + }), + // This method is deprecated. new web3._extend.Method({ name: 'startRPC', call: 'admin_startRPC', - params: 4, - inputFormatter: [null, null, null, null] + params: 5, + inputFormatter: [null, null, null, null, null] }), + // This method is deprecated. new web3._extend.Method({ name: 'stopRPC', call: 'admin_stopRPC' @@ -222,21 +211,37 @@ const DebugJs = ` web3._extend({ property: 'debug', methods: [ + new web3._extend.Method({ + name: 'accountRange', + call: 'debug_accountRange', + params: 6, + inputFormatter: [web3._extend.formatters.inputDefaultBlockNumberFormatter, null, null, null, null, null], + }), new web3._extend.Method({ name: 'printBlock', call: 'debug_printBlock', + params: 1, + outputFormatter: console.log + }), + new web3._extend.Method({ + name: 'getRawHeader', + call: 'debug_getRawHeader', params: 1 }), new web3._extend.Method({ - name: 'getBlockRlp', - call: 'debug_getBlockRlp', + name: 'getRawBlock', + call: 'debug_getRawBlock', params: 1 }), new web3._extend.Method({ - name: 'testSignCliqueBlock', - call: 'debug_testSignCliqueBlock', - params: 2, - inputFormatters: [web3._extend.formatters.inputAddressFormatter, null], + name: 'getRawReceipts', + call: 'debug_getRawReceipts', + params: 1 + }), + new web3._extend.Method({ + name: 'getRawTransaction', + call: 'debug_getRawTransaction', + params: 1 }), new web3._extend.Method({ name: 'setHead', @@ -251,7 +256,8 @@ web3._extend({ new web3._extend.Method({ name: 'dumpBlock', call: 'debug_dumpBlock', - params: 1 + params: 1, + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] }), new web3._extend.Method({ name: 'chaindbProperty', @@ -281,7 +287,8 @@ web3._extend({ new web3._extend.Method({ name: 'stacks', call: 'debug_stacks', - params: 0, + params: 1, + inputFormatter: [null], outputFormatter: console.log }), new web3._extend.Method({ @@ -393,6 +400,12 @@ web3._extend({ params: 2, inputFormatter: [null, null] }), + new web3._extend.Method({ + name: 'intermediateRoots', + call: 'debug_intermediateRoots', + params: 2, + inputFormatter: [null, null] + }), new web3._extend.Method({ name: 'standardTraceBlockToFile', call: 'debug_standardTraceBlockToFile', @@ -403,7 +416,7 @@ web3._extend({ name: 'traceBlockByNumber', call: 'debug_traceBlockByNumber', params: 2, - inputFormatter: [null, null] + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, null] }), new web3._extend.Method({ name: 'traceBlockByHash', @@ -417,6 +430,12 @@ web3._extend({ params: 2, inputFormatter: [null, null] }), + new web3._extend.Method({ + name: 'traceCall', + call: 'debug_traceCall', + params: 3, + inputFormatter: [null, null, null] + }), new web3._extend.Method({ name: 'preimage', call: 'debug_preimage', @@ -445,6 +464,32 @@ web3._extend({ params: 2, inputFormatter:[null, null], }), + new web3._extend.Method({ + name: 'freezeClient', + call: 'debug_freezeClient', + params: 1, + }), + new web3._extend.Method({ + name: 'getAccessibleState', + call: 'debug_getAccessibleState', + params: 2, + inputFormatter:[web3._extend.formatters.inputBlockNumberFormatter, web3._extend.formatters.inputBlockNumberFormatter], + }), + new web3._extend.Method({ + name: 'dbGet', + call: 'debug_dbGet', + params: 1 + }), + new web3._extend.Method({ + name: 'dbAncient', + call: 'debug_dbAncient', + params: 2 + }), + new web3._extend.Method({ + name: 'dbAncients', + call: 'debug_dbAncients', + params: 0 + }), ], properties: [] }); @@ -477,16 +522,30 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.formatters.inputTransactionFormatter] }), + new web3._extend.Method({ + name: 'estimateGas', + call: 'eth_estimateGas', + params: 2, + inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter], + outputFormatter: web3._extend.utils.toDecimal + }), new web3._extend.Method({ name: 'submitTransaction', call: 'eth_submitTransaction', 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 + params: 1, + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] }), new web3._extend.Method({ name: 'getHeaderByHash', @@ -496,12 +555,14 @@ web3._extend({ new web3._extend.Method({ name: 'getBlockByNumber', call: 'eth_getBlockByNumber', - params: 2 + params: 2, + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter, function (val) { return !!val; }] }), new web3._extend.Method({ name: 'getBlockByHash', call: 'eth_getBlockByHash', - params: 2 + params: 2, + inputFormatter: [null, function (val) { return !!val; }] }), new web3._extend.Method({ name: 'getRawTransaction', @@ -522,6 +583,23 @@ web3._extend({ params: 3, inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter] }), + new web3._extend.Method({ + name: 'createAccessList', + call: 'eth_createAccessList', + params: 2, + inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter], + }), + new web3._extend.Method({ + name: 'feeHistory', + call: 'eth_feeHistory', + params: 3, + inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter, null] + }), + new web3._extend.Method({ + name: 'getLogs', + call: 'eth_getLogs', + params: 1, + }), ], properties: [ new web3._extend.Property({ @@ -536,6 +614,11 @@ web3._extend({ return formatted; } }), + new web3._extend.Property({ + name: 'maxPriorityFeePerGas', + getter: 'eth_maxPriorityFeePerGas', + outputFormatter: web3._extend.utils.toBigNumber + }), ] }); ` @@ -571,6 +654,12 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.utils.fromDecimal] }), + new web3._extend.Method({ + name: 'setGasLimit', + call: 'miner_setGasLimit', + params: 1, + inputFormatter: [web3._extend.utils.fromDecimal] + }), new web3._extend.Method({ name: 'setRecommitInterval', call: 'miner_setRecommitInterval', @@ -667,50 +756,6 @@ web3._extend({ }); ` -const ShhJs = ` -web3._extend({ - property: 'shh', - methods: [ - ], - properties: - [ - new web3._extend.Property({ - name: 'version', - getter: 'shh_version', - outputFormatter: web3._extend.utils.toDecimal - }), - new web3._extend.Property({ - name: 'info', - getter: 'shh_info' - }), - ] -}); -` - -const SwarmfsJs = ` -web3._extend({ - property: 'swarmfs', - methods: - [ - new web3._extend.Method({ - name: 'mount', - call: 'swarmfs_mount', - params: 2 - }), - new web3._extend.Method({ - name: 'unmount', - call: 'swarmfs_unmount', - params: 1 - }), - new web3._extend.Method({ - name: 'listmounts', - call: 'swarmfs_listmounts', - params: 0 - }), - ] -}); -` - const TxpoolJs = ` web3._extend({ property: 'txpool', @@ -734,74 +779,95 @@ web3._extend({ return status; } }), + new web3._extend.Method({ + name: 'contentFrom', + call: 'txpool_contentFrom', + params: 1, + }), ] }); ` -const AccountingJs = ` +const LESJs = ` web3._extend({ - property: 'accounting', - methods: [ - new web3._extend.Property({ - name: 'balance', - getter: 'account_balance' + property: 'les', + methods: + [ + new web3._extend.Method({ + name: 'getCheckpoint', + call: 'les_getCheckpoint', + params: 1 }), - new web3._extend.Property({ - name: 'balanceCredit', - getter: 'account_balanceCredit' + new web3._extend.Method({ + name: 'clientInfo', + call: 'les_clientInfo', + params: 1 }), - new web3._extend.Property({ - name: 'balanceDebit', - getter: 'account_balanceDebit' + new web3._extend.Method({ + name: 'priorityClientInfo', + call: 'les_priorityClientInfo', + params: 3 }), - new web3._extend.Property({ - name: 'bytesCredit', - getter: 'account_bytesCredit' + new web3._extend.Method({ + name: 'setClientParams', + call: 'les_setClientParams', + params: 2 }), - new web3._extend.Property({ - name: 'bytesDebit', - getter: 'account_bytesDebit' + new web3._extend.Method({ + name: 'setDefaultParams', + call: 'les_setDefaultParams', + params: 1 }), - new web3._extend.Property({ - name: 'msgCredit', - getter: 'account_msgCredit' + new web3._extend.Method({ + name: 'addBalance', + call: 'les_addBalance', + params: 2 }), + ], + properties: + [ new web3._extend.Property({ - name: 'msgDebit', - getter: 'account_msgDebit' + name: 'latestCheckpoint', + getter: 'les_latestCheckpoint' }), new web3._extend.Property({ - name: 'peerDrops', - getter: 'account_peerDrops' + name: 'checkpointContractAddress', + getter: 'les_getCheckpointContractAddress' }), new web3._extend.Property({ - name: 'selfDrops', - getter: 'account_selfDrops' + name: 'serverInfo', + getter: 'les_serverInfo' }), ] }); ` -const LESJs = ` +const VfluxJs = ` web3._extend({ - property: 'les', + property: 'vflux', methods: [ new web3._extend.Method({ - name: 'getCheckpoint', - call: 'les_getCheckpoint', - params: 1 + name: 'distribution', + call: 'vflux_distribution', + params: 2 + }), + new web3._extend.Method({ + name: 'timeout', + call: 'vflux_timeout', + params: 2 + }), + new web3._extend.Method({ + name: 'value', + call: 'vflux_value', + params: 2 }), ], properties: [ new web3._extend.Property({ - name: 'latestCheckpoint', - getter: 'les_latestCheckpoint' - }), - new web3._extend.Property({ - name: 'checkpointContractAddress', - getter: 'les_getCheckpointContractAddress' + name: 'requestStats', + getter: 'vflux_requestStats' }), ] }); diff --git a/les/api.go b/les/api.go index c1d2f4cd..dc863938 100644 --- a/les/api.go +++ b/les/api.go @@ -18,23 +18,349 @@ package les import ( "errors" + "fmt" + "time" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/mclock" + vfs "github.com/ethereum/go-ethereum/les/vflux/server" + "github.com/ethereum/go-ethereum/p2p/enode" ) var ( - errNoCheckpoint = errors.New("no local checkpoint provided") - errNotActivated = errors.New("checkpoint registrar is not activated") + errNoCheckpoint = errors.New("no local checkpoint provided") + errNotActivated = errors.New("checkpoint registrar is not activated") + errUnknownBenchmarkType = errors.New("unknown benchmark type") ) -// PrivateLightAPI provides an API to access the LES light server or light client. -type PrivateLightAPI struct { +// LightServerAPI provides an API to access the LES light server. +type LightServerAPI struct { + server *LesServer + defaultPosFactors, defaultNegFactors vfs.PriceFactors +} + +// NewLightServerAPI creates a new LES light server API. +func NewLightServerAPI(server *LesServer) *LightServerAPI { + return &LightServerAPI{ + server: server, + defaultPosFactors: defaultPosFactors, + defaultNegFactors: defaultNegFactors, + } +} + +// parseNode parses either an enode address a raw hex node id +func parseNode(node string) (enode.ID, error) { + if id, err := enode.ParseID(node); err == nil { + return id, nil + } + if node, err := enode.Parse(enode.ValidSchemes, node); err == nil { + return node.ID(), nil + } else { + return enode.ID{}, err + } +} + +// ServerInfo returns global server parameters +func (api *LightServerAPI) ServerInfo() map[string]interface{} { + res := make(map[string]interface{}) + res["minimumCapacity"] = api.server.minCapacity + res["maximumCapacity"] = api.server.maxCapacity + _, res["totalCapacity"] = api.server.clientPool.Limits() + _, res["totalConnectedCapacity"] = api.server.clientPool.Active() + res["priorityConnectedCapacity"] = 0 //TODO connect when token sale module is added + return res +} + +// ClientInfo returns information about clients listed in the ids list or matching the given tags +func (api *LightServerAPI) ClientInfo(nodes []string) map[enode.ID]map[string]interface{} { + var ids []enode.ID + for _, node := range nodes { + if id, err := parseNode(node); err == nil { + ids = append(ids, id) + } + } + + res := make(map[enode.ID]map[string]interface{}) + if len(ids) == 0 { + ids = api.server.peers.ids() + } + for _, id := range ids { + if peer := api.server.peers.peer(id); peer != nil { + res[id] = api.clientInfo(peer, peer.balance) + } else { + api.server.clientPool.BalanceOperation(id, "", func(balance vfs.AtomicBalanceOperator) { + res[id] = api.clientInfo(nil, balance) + }) + } + } + return res +} + +// PriorityClientInfo returns information about clients with a positive balance +// in the given ID range (stop excluded). If stop is null then the iterator stops +// only at the end of the ID space. MaxCount limits the number of results returned. +// If maxCount limit is applied but there are more potential results then the ID +// of the next potential result is included in the map with an empty structure +// assigned to it. +func (api *LightServerAPI) PriorityClientInfo(start, stop enode.ID, maxCount int) map[enode.ID]map[string]interface{} { + res := make(map[enode.ID]map[string]interface{}) + ids := api.server.clientPool.GetPosBalanceIDs(start, stop, maxCount+1) + if len(ids) > maxCount { + res[ids[maxCount]] = make(map[string]interface{}) + ids = ids[:maxCount] + } + for _, id := range ids { + if peer := api.server.peers.peer(id); peer != nil { + res[id] = api.clientInfo(peer, peer.balance) + } else { + api.server.clientPool.BalanceOperation(id, "", func(balance vfs.AtomicBalanceOperator) { + res[id] = api.clientInfo(nil, balance) + }) + } + } + return res +} + +// clientInfo creates a client info data structure +func (api *LightServerAPI) clientInfo(peer *clientPeer, balance vfs.ReadOnlyBalance) map[string]interface{} { + info := make(map[string]interface{}) + pb, nb := balance.GetBalance() + info["isConnected"] = peer != nil + info["pricing/balance"] = pb + info["priority"] = pb != 0 + // cb := api.server.clientPool.ndb.getCurrencyBalance(id) + // info["pricing/currency"] = cb.amount + if peer != nil { + info["connectionTime"] = float64(mclock.Now()-peer.connectedAt) / float64(time.Second) + info["capacity"] = peer.getCapacity() + info["pricing/negBalance"] = nb + } + return info +} + +// setParams either sets the given parameters for a single connected client (if specified) +// or the default parameters applicable to clients connected in the future +func (api *LightServerAPI) setParams(params map[string]interface{}, client *clientPeer, posFactors, negFactors *vfs.PriceFactors) (updateFactors bool, err error) { + defParams := client == nil + for name, value := range params { + errValue := func() error { + return fmt.Errorf("invalid value for parameter '%s'", name) + } + setFactor := func(v *float64) { + if val, ok := value.(float64); ok && val >= 0 { + *v = val / float64(time.Second) + updateFactors = true + } else { + err = errValue() + } + } + + switch { + case name == "pricing/timeFactor": + setFactor(&posFactors.TimeFactor) + case name == "pricing/capacityFactor": + setFactor(&posFactors.CapacityFactor) + case name == "pricing/requestCostFactor": + setFactor(&posFactors.RequestFactor) + case name == "pricing/negative/timeFactor": + setFactor(&negFactors.TimeFactor) + case name == "pricing/negative/capacityFactor": + setFactor(&negFactors.CapacityFactor) + case name == "pricing/negative/requestCostFactor": + setFactor(&negFactors.RequestFactor) + case !defParams && name == "capacity": + if capacity, ok := value.(float64); ok && uint64(capacity) >= api.server.minCapacity { + _, err = api.server.clientPool.SetCapacity(client.Node(), uint64(capacity), 0, false) + // time factor recalculation is performed automatically by the balance tracker + } else { + err = errValue() + } + default: + if defParams { + err = fmt.Errorf("invalid default parameter '%s'", name) + } else { + err = fmt.Errorf("invalid client parameter '%s'", name) + } + } + if err != nil { + return + } + } + return +} + +// SetClientParams sets client parameters for all clients listed in the ids list +// or all connected clients if the list is empty +func (api *LightServerAPI) SetClientParams(nodes []string, params map[string]interface{}) error { + var err error + for _, node := range nodes { + var id enode.ID + if id, err = parseNode(node); err != nil { + return err + } + if peer := api.server.peers.peer(id); peer != nil { + posFactors, negFactors := peer.balance.GetPriceFactors() + update, e := api.setParams(params, peer, &posFactors, &negFactors) + if update { + peer.balance.SetPriceFactors(posFactors, negFactors) + } + if e != nil { + err = e + } + } else { + err = fmt.Errorf("client %064x is not connected", id) + } + } + return err +} + +// SetDefaultParams sets the default parameters applicable to clients connected in the future +func (api *LightServerAPI) SetDefaultParams(params map[string]interface{}) error { + update, err := api.setParams(params, nil, &api.defaultPosFactors, &api.defaultNegFactors) + if update { + api.server.clientPool.SetDefaultFactors(api.defaultPosFactors, api.defaultNegFactors) + } + return err +} + +// SetConnectedBias set the connection bias, which is applied to already connected clients +// So that already connected client won't be kicked out very soon and we can ensure all +// connected clients can have enough time to request or sync some data. +// When the input parameter `bias` < 0 (illegal), return error. +func (api *LightServerAPI) SetConnectedBias(bias time.Duration) error { + if bias < time.Duration(0) { + return fmt.Errorf("bias illegal: %v less than 0", bias) + } + api.server.clientPool.SetConnectedBias(bias) + return nil +} + +// AddBalance adds the given amount to the balance of a client if possible and returns +// the balance before and after the operation +func (api *LightServerAPI) AddBalance(node string, amount int64) (balance [2]uint64, err error) { + var id enode.ID + if id, err = parseNode(node); err != nil { + return + } + api.server.clientPool.BalanceOperation(id, "", func(nb vfs.AtomicBalanceOperator) { + balance[0], balance[1], err = nb.AddBalance(amount) + }) + return +} + +// Benchmark runs a request performance benchmark with a given set of measurement setups +// in multiple passes specified by passCount. The measurement time for each setup in each +// pass is specified in milliseconds by length. +// +// Note: measurement time is adjusted for each pass depending on the previous ones. +// Therefore a controlled total measurement time is achievable in multiple passes. +func (api *LightServerAPI) Benchmark(setups []map[string]interface{}, passCount, length int) ([]map[string]interface{}, error) { + benchmarks := make([]requestBenchmark, len(setups)) + for i, setup := range setups { + if t, ok := setup["type"].(string); ok { + getInt := func(field string, def int) int { + if value, ok := setup[field].(float64); ok { + return int(value) + } + return def + } + getBool := func(field string, def bool) bool { + if value, ok := setup[field].(bool); ok { + return value + } + return def + } + switch t { + case "header": + benchmarks[i] = &benchmarkBlockHeaders{ + amount: getInt("amount", 1), + skip: getInt("skip", 1), + byHash: getBool("byHash", false), + reverse: getBool("reverse", false), + } + case "body": + benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: false} + case "receipts": + benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: true} + case "proof": + benchmarks[i] = &benchmarkProofsOrCode{code: false} + case "code": + benchmarks[i] = &benchmarkProofsOrCode{code: true} + case "cht": + benchmarks[i] = &benchmarkHelperTrie{ + bloom: false, + reqCount: getInt("amount", 1), + } + case "bloom": + benchmarks[i] = &benchmarkHelperTrie{ + bloom: true, + reqCount: getInt("amount", 1), + } + case "txSend": + benchmarks[i] = &benchmarkTxSend{} + case "txStatus": + benchmarks[i] = &benchmarkTxStatus{} + default: + return nil, errUnknownBenchmarkType + } + } else { + return nil, errUnknownBenchmarkType + } + } + rs := api.server.handler.runBenchmark(benchmarks, passCount, time.Millisecond*time.Duration(length)) + result := make([]map[string]interface{}, len(setups)) + for i, r := range rs { + res := make(map[string]interface{}) + if r.err == nil { + res["totalCount"] = r.totalCount + res["avgTime"] = r.avgTime + res["maxInSize"] = r.maxInSize + res["maxOutSize"] = r.maxOutSize + } else { + res["error"] = r.err.Error() + } + result[i] = res + } + return result, nil +} + +// DebugAPI provides an API to debug LES light server functionality. +type DebugAPI struct { + server *LesServer +} + +// NewDebugAPI creates a new LES light server debug API. +func NewDebugAPI(server *LesServer) *DebugAPI { + return &DebugAPI{ + server: server, + } +} + +// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded +func (api *DebugAPI) FreezeClient(node string) error { + var ( + id enode.ID + err error + ) + if id, err = parseNode(node); err != nil { + return err + } + if peer := api.server.peers.peer(id); peer != nil { + peer.freeze() + return nil + } else { + return fmt.Errorf("client %064x is not connected", id[:]) + } +} + +// LightAPI provides an API to access the LES light server or light client. +type LightAPI struct { backend *lesCommons } -// NewPrivateLightAPI creates a new LES service API. -func NewPrivateLightAPI(backend *lesCommons) *PrivateLightAPI { - return &PrivateLightAPI{backend: backend} +// NewLightAPI creates a new LES service API. +func NewLightAPI(backend *lesCommons) *LightAPI { + return &LightAPI{backend: backend} } // LatestCheckpoint returns the latest local checkpoint package. @@ -44,7 +370,7 @@ func NewPrivateLightAPI(backend *lesCommons) *PrivateLightAPI { // 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) { +func (api *LightAPI) LatestCheckpoint() ([4]string, error) { var res [4]string cp := api.backend.latestLocalCheckpoint() if cp.Empty() { @@ -61,7 +387,7 @@ func (api *PrivateLightAPI) LatestCheckpoint() ([4]string, error) { // 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) { +func (api *LightAPI) GetCheckpoint(index uint64) ([3]string, error) { var res [3]string cp := api.backend.localCheckpoint(index) if cp.Empty() { @@ -72,9 +398,9 @@ func (api *PrivateLightAPI) GetCheckpoint(index uint64) ([3]string, error) { } // GetCheckpointContractAddress returns the contract contract address in hex format. -func (api *PrivateLightAPI) GetCheckpointContractAddress() (string, error) { +func (api *LightAPI) GetCheckpointContractAddress() (string, error) { if api.backend.oracle == nil { return "", errNotActivated } - return api.backend.oracle.config.Address.Hex(), nil + return api.backend.oracle.Contract().ContractAddr().Hex(), nil } diff --git a/les/api_backend.go b/les/api_backend.go index 7fffc499..5b421313 100644 --- a/les/api_backend.go +++ b/les/api_backend.go @@ -20,29 +20,31 @@ import ( "context" "errors" "math/big" - - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "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" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" ) type LesApiBackend struct { - extRPCEnabled bool - eth *LightEthereum - gpo *gasprice.Oracle + extRPCEnabled bool + allowUnprotectedTxs bool + eth *LightEthereum + gpo *gasprice.Oracle } func (b *LesApiBackend) ChainConfig() *params.ChainConfig { @@ -59,12 +61,38 @@ func (b *LesApiBackend) SetHead(number uint64) { } func (b *LesApiBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { - if number == rpc.LatestBlockNumber || number == rpc.PendingBlockNumber { + // Return the latest current as the pending one since there + // is no pending notion in the light client. TODO(rjl493456442) + // unify the behavior of `HeaderByNumber` and `PendingBlockAndReceipts`. + if number == rpc.PendingBlockNumber { + return b.eth.blockchain.CurrentHeader(), nil + } + if number == rpc.LatestBlockNumber { return b.eth.blockchain.CurrentHeader(), nil } 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 } @@ -81,6 +109,30 @@ func (b *LesApiBackend) BlockByHash(ctx context.Context, hash common.Hash) (*typ 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) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + return nil, nil +} + func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { header, err := b.HeaderByNumber(ctx, number) if err != nil { @@ -92,6 +144,23 @@ func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.B return light.NewState(ctx, header, b.eth.odr), header, nil } +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) { if number := rawdb.ReadHeaderNumber(b.eth.chainDb, hash); number != nil { return light.GetBlockReceipts(ctx, b.eth.odr, hash, *number) @@ -99,21 +168,24 @@ func (b *LesApiBackend) GetReceipts(ctx context.Context, hash common.Hash) (type return nil, nil } -func (b *LesApiBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) { - if number := rawdb.ReadHeaderNumber(b.eth.chainDb, hash); number != nil { - return light.GetBlockLogs(ctx, b.eth.odr, hash, *number) - } - return nil, nil +func (b *LesApiBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, error) { + return light.GetBlockLogs(ctx, b.eth.odr, hash, number) } -func (b *LesApiBackend) GetTd(hash common.Hash) *big.Int { - return b.eth.blockchain.GetTdByHash(hash) +func (b *LesApiBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { + if number := rawdb.ReadHeaderNumber(b.eth.chainDb, hash); number != nil { + return b.eth.blockchain.GetTdOdr(ctx, hash, *number) + } + return nil } -func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) { - state.SetBalance(msg.From(), math.MaxBig256) - context := core.NewEVMContext(msg, header, b.eth.blockchain, nil) - return vm.NewEVM(context, state, b.eth.chainConfig, vm.Config{}), state.Error, nil +func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config) (*vm.EVM, func() error, error) { + if vmConfig == nil { + vmConfig = new(vm.Config) + } + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(header, b.eth.blockchain, nil) + return vm.NewEVM(context, txContext, state, b.eth.chainConfig, *vmConfig), state.Error, nil } func (b *LesApiBackend) SendTx(ctx context.Context, signedTx *types.Transaction) error { @@ -148,6 +220,10 @@ func (b *LesApiBackend) TxPoolContent() (map[common.Address]types.Transactions, return b.eth.txPool.Content() } +func (b *LesApiBackend) TxPoolContentFrom(addr common.Address) (types.Transactions, types.Transactions) { + return b.eth.txPool.ContentFrom(addr) +} + func (b *LesApiBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { return b.eth.txPool.SubscribeNewTxsEvent(ch) } @@ -168,28 +244,35 @@ func (b *LesApiBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscri return b.eth.blockchain.SubscribeLogsEvent(ch) } +func (b *LesApiBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { + return event.NewSubscription(func(quit <-chan struct{}) error { + <-quit + return nil + }) +} + func (b *LesApiBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { return b.eth.blockchain.SubscribeRemovedLogsEvent(ch) } -func (b *LesApiBackend) Downloader() *downloader.Downloader { - return b.eth.Downloader() +func (b *LesApiBackend) SyncProgress() ethereum.SyncProgress { + return b.eth.Downloader().Progress() } func (b *LesApiBackend) ProtocolVersion() int { return b.eth.LesVersion() + 10000 } -func (b *LesApiBackend) SuggestPrice(ctx context.Context) (*big.Int, error) { - return b.gpo.SuggestPrice(ctx) +func (b *LesApiBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { + return b.gpo.SuggestTipCap(ctx) } -func (b *LesApiBackend) ChainDb() ethdb.Database { - return b.eth.chainDb +func (b *LesApiBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) { + return b.gpo.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles) } -func (b *LesApiBackend) EventMux() *event.TypeMux { - return b.eth.eventMux +func (b *LesApiBackend) ChainDb() ethdb.Database { + return b.eth.chainDb } func (b *LesApiBackend) AccountManager() *accounts.Manager { @@ -200,10 +283,22 @@ func (b *LesApiBackend) ExtRPCEnabled() bool { return b.extRPCEnabled } -func (b *LesApiBackend) RPCGasCap() *big.Int { +func (b *LesApiBackend) UnprotectedAllowed() bool { + return b.allowUnprotectedTxs +} + +func (b *LesApiBackend) RPCGasCap() uint64 { return b.eth.config.RPCGasCap } +func (b *LesApiBackend) RPCEVMTimeout() time.Duration { + return b.eth.config.RPCEVMTimeout +} + +func (b *LesApiBackend) RPCTxFeeCap() float64 { + return b.eth.config.RPCTxFeeCap +} + func (b *LesApiBackend) BloomStatus() (uint64, uint64) { if b.eth.bloomIndexer == nil { return 0, 0 @@ -217,3 +312,19 @@ func (b *LesApiBackend) ServiceFilter(ctx context.Context, session *bloombits.Ma go session.Multiplex(bloomRetrievalBatch, bloomRetrievalWait, b.eth.bloomRequests) } } + +func (b *LesApiBackend) Engine() consensus.Engine { + return b.eth.engine +} + +func (b *LesApiBackend) CurrentHeader() *types.Header { + return b.eth.blockchain.CurrentHeader() +} + +func (b *LesApiBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (*state.StateDB, error) { + return b.eth.stateAtBlock(ctx, block, reexec) +} + +func (b *LesApiBackend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) { + return b.eth.stateAtTransaction(ctx, block, txIndex, reexec) +} diff --git a/les/api_test.go b/les/api_test.go index 87a022a6..3db1c5fd 100644 --- a/les/api_test.go +++ b/les/api_test.go @@ -20,7 +20,6 @@ import ( "context" "errors" "flag" - "io/ioutil" "math/rand" "os" "sync" @@ -28,26 +27,42 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" - "github.com/cryptoecc/ETH-ECC/rpc" + "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" + ethdownloader "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/les/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" ) -/* -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. -*/ +// 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.RegisterLifecycles(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 @@ -93,7 +108,7 @@ func testCapacityAPI(t *testing.T, clientCount int) { t.Fatalf("Failed to obtain rpc client: %v", err) } headNum, headHash := getHead(ctx, t, serverRpcClient) - minCap, freeCap, totalCap := getCapacityInfo(ctx, t, serverRpcClient) + minCap, 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))) @@ -188,7 +203,7 @@ func testCapacityAPI(t *testing.T, clientCount int) { weights := make([]float64, len(clients)) for c := 0; c < 5; c++ { - setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), freeCap) + setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), minCap) freeIdx = rand.Intn(len(clients)) var sum float64 for i := range clients { @@ -200,7 +215,7 @@ func testCapacityAPI(t *testing.T, clientCount int) { sum += weights[i] } for i, client := range clients { - weights[i] *= float64(testCap-freeCap-100) / sum + weights[i] *= float64(testCap-minCap-100) / sum capacity := uint64(weights[i]) if i != freeIdx && capacity < getCapacity(ctx, t, serverRpcClient, client.ID()) { setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) @@ -213,7 +228,7 @@ func testCapacityAPI(t *testing.T, clientCount int) { setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) } } - weights[freeIdx] = float64(freeCap) + weights[freeIdx] = float64(minCap) for i := range clients { weights[i] /= float64(testCap) } @@ -233,7 +248,7 @@ func testCapacityAPI(t *testing.T, clientCount int) { default: } - _, _, totalCap = getCapacityInfo(ctx, t, serverRpcClient) + _, totalCap = getCapacityInfo(ctx, t, serverRpcClient) if totalCap < testCap { t.Log("Total capacity underrun") close(stop) @@ -312,7 +327,8 @@ 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) + c, cancel := context.WithTimeout(ctx, time.Second*12) + defer cancel() err := client.CallContext(c, &res, "eth_getBalance", addr, "latest") if err != nil { t.Log("request error:", err) @@ -324,7 +340,6 @@ func freezeClient(ctx context.Context, t *testing.T, server *rpc.Client, clientI 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) { @@ -355,7 +370,7 @@ func getCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID return uint64(vv) } -func getCapacityInfo(ctx context.Context, t *testing.T, server *rpc.Client) (minCap, freeCap, totalCap uint64) { +func getCapacityInfo(ctx context.Context, t *testing.T, server *rpc.Client) (minCap, 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) @@ -372,34 +387,17 @@ func getCapacityInfo(ctx context.Context, t *testing.T, server *rpc.Client) (min return uint64(vv) } minCap = decode("minimumCapacity") - freeCap = decode("freeClientCapacity") totalCap = decode("totalCapacity") return } -func init() { - flag.Parse() - // register the Delivery 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(true)))) -} - -var ( - adapter = flag.String("adapter", "exec", "type of simulation: sim|socket|exec|docker") - loglevel = flag.Int("loglevel", 0, "verbosity of logs") - nodes = flag.Int("nodes", 0, "number of nodes") -) - -var services = adapters.Services{ +var services = adapters.LifecycleConstructors{ "lesclient": newLesClientService, "lesserver": newLesServerService, } func NewNetwork() (*simulations.Network, func(), error) { - adapter, adapterTeardown, err := NewAdapter(*adapter, services) + adapter, adapterTeardown, err := NewAdapter(*simAdapter, services) if err != nil { return nil, adapterTeardown, err } @@ -415,7 +413,7 @@ func NewNetwork() (*simulations.Network, func(), error) { return net, teardown, nil } -func NewAdapter(adapterType string, services adapters.Services) (adapter adapters.NodeAdapter, teardown func(), err error) { +func NewAdapter(adapterType string, services adapters.LifecycleConstructors) (adapter adapters.NodeAdapter, teardown func(), err error) { teardown = func() {} switch adapterType { case "sim": @@ -423,7 +421,7 @@ func NewAdapter(adapterType string, services adapters.Services) (adapter adapter // case "socket": // adapter = adapters.NewSocketAdapter(services) case "exec": - baseDir, err0 := ioutil.TempDir("", "les-test") + baseDir, err0 := os.MkdirTemp("", "les-test") if err0 != nil { return nil, teardown, err0 } @@ -455,7 +453,7 @@ func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir [] for i := range clients { clientconf := adapters.RandomNodeConfig() - clientconf.Services = []string{"lesclient"} + clientconf.Lifecycles = []string{"lesclient"} if len(clientDir) == clientCount { clientconf.DataDir = clientDir[i] } @@ -468,7 +466,7 @@ func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir [] for i := range servers { serverconf := adapters.RandomNodeConfig() - serverconf.Services = []string{"lesserver"} + serverconf.Lifecycles = []string{"lesserver"} if len(serverDir) == serverCount { serverconf.DataDir = serverDir[i] } @@ -493,26 +491,25 @@ func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir [] return test(ctx, net, servers, clients) } -func newLesClientService(ctx *adapters.ServiceContext) (node.Service, error) { - config := eth.DefaultConfig - config.SyncMode = downloader.LightSync +func newLesClientService(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { + config := ethconfig.Defaults + config.SyncMode = (ethdownloader.SyncMode)(downloader.LightSync) config.Ethash.PowMode = ethash.ModeFake - return New(ctx.NodeContext, &config) + return New(stack, &config) } -func newLesServerService(ctx *adapters.ServiceContext) (node.Service, error) { - config := eth.DefaultConfig - config.SyncMode = downloader.FullSync +func newLesServerService(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { + config := ethconfig.Defaults + config.SyncMode = (ethdownloader.SyncMode)(downloader.FullSync) config.LightServ = testServerCapacity config.LightPeers = testMaxClients - ethereum, err := eth.New(ctx.NodeContext, &config) + ethereum, err := eth.New(stack, &config) if err != nil { return nil, err } - server, err := NewLesServer(ethereum, &config) + _, err = NewLesServer(stack, ethereum, &config) if err != nil { return nil, err } - ethereum.AddLesServer(server) return ethereum, nil } diff --git a/les/balance.go b/les/balance.go deleted file mode 100644 index 9db90dfb..00000000 --- a/les/balance.go +++ /dev/null @@ -1,381 +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 les - -import ( - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/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.Event - // 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.Cancel() - 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.Cancel() { - 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 index 7080d26d..757822a6 100644 --- a/les/benchmark.go +++ b/les/benchmark.go @@ -24,17 +24,17 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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 @@ -42,7 +42,7 @@ 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 + request(peer *serverPeer, index int) error } // benchmarkBlockHeaders implements requestBenchmark @@ -72,12 +72,11 @@ func (b *benchmarkBlockHeaders) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkBlockHeaders) request(peer *peer, index int) error { +func (b *benchmarkBlockHeaders) request(peer *serverPeer, 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) + return peer.requestHeadersByHash(0, b.hashes[index], b.amount, b.skip, b.reverse) } + return peer.requestHeadersByNumber(0, uint64(b.offset+rand.Int63n(b.randMax)), b.amount, b.skip, b.reverse) } // benchmarkBodiesOrReceipts implements requestBenchmark @@ -95,12 +94,11 @@ func (b *benchmarkBodiesOrReceipts) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkBodiesOrReceipts) request(peer *peer, index int) error { +func (b *benchmarkBodiesOrReceipts) request(peer *serverPeer, 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]}) + return peer.requestReceipts(0, []common.Hash{b.hashes[index]}) } + return peer.requestBodies(0, []common.Hash{b.hashes[index]}) } // benchmarkProofsOrCode implements requestBenchmark @@ -114,14 +112,13 @@ func (b *benchmarkProofsOrCode) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkProofsOrCode) request(peer *peer, index int) error { +func (b *benchmarkProofsOrCode) request(peer *serverPeer, 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}}) + return peer.requestCode(0, []CodeReq{{BHash: b.headHash, AccKey: key}}) } + return peer.requestProofs(0, []ProofReq{{BHash: b.headHash, Key: key}}) } // benchmarkHelperTrie implements requestBenchmark @@ -144,7 +141,7 @@ func (b *benchmarkHelperTrie) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkHelperTrie) request(peer *peer, index int) error { +func (b *benchmarkHelperTrie) request(peer *serverPeer, index int) error { reqs := make([]HelperTrieReq, b.reqCount) if b.bloom { @@ -159,11 +156,11 @@ func (b *benchmarkHelperTrie) request(peer *peer, index int) error { 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} + reqs[i] = HelperTrieReq{Type: htCanonical, TrieIdx: b.sectionCount - 1, Key: key, AuxReq: htAuxHeader} } } - return peer.RequestHelperTrieProofs(0, 0, reqs) + return peer.requestHelperTrieProofs(0, reqs) } // benchmarkTxSend implements requestBenchmark @@ -174,7 +171,7 @@ type benchmarkTxSend struct { func (b *benchmarkTxSend) init(h *serverHandler, count int) error { key, _ := crypto.GenerateKey() addr := crypto.PubkeyToAddress(key.PublicKey) - signer := types.NewEIP155Signer(big.NewInt(18)) + signer := types.LatestSigner(h.server.chainConfig) b.txs = make(types.Transactions, count) for i := range b.txs { @@ -189,9 +186,9 @@ func (b *benchmarkTxSend) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkTxSend) request(peer *peer, index int) error { +func (b *benchmarkTxSend) request(peer *serverPeer, index int) error { enc, _ := rlp.EncodeToBytes(types.Transactions{b.txs[index]}) - return peer.SendTxs(0, 0, enc) + return peer.sendTxs(0, 1, enc) } // benchmarkTxStatus implements requestBenchmark @@ -201,10 +198,10 @@ func (b *benchmarkTxStatus) init(h *serverHandler, count int) error { return nil } -func (b *benchmarkTxStatus) request(peer *peer, index int) error { +func (b *benchmarkTxStatus) request(peer *serverPeer, index int) error { var hash common.Hash rand.Read(hash[:]) - return peer.RequestTxStatus(0, 0, []common.Hash{hash}) + return peer.requestTxStatus(0, []common.Hash{hash}) } // benchmarkSetup stores measurement data for a single benchmark type @@ -283,18 +280,17 @@ func (h *serverHandler) measure(setup *benchmarkSetup, count int) error { 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) + peer1 := newServerPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "client", nil), clientMeteredPipe) + peer2 := newClientPeer(lpv2, NetworkId, p2p.NewPeer(id, "server", nil), serverMeteredPipe) + peer2.announceType = announceTypeNone + peer2.fcCosts = make(requestCostTable) c := &requestCosts{} for code := range requests { - serverPeer.fcCosts[code] = c + peer2.fcCosts[code] = c } - serverPeer.fcParams = flowcontrol.ServerParams{BufLimit: 1, MinRecharge: 1} - serverPeer.fcClient = flowcontrol.NewClientNode(h.server.fcManager, serverPeer.fcParams) - defer serverPeer.fcClient.Disconnect() + peer2.fcParams = flowcontrol.ServerParams{BufLimit: 1, MinRecharge: 1} + peer2.fcClient = flowcontrol.NewClientNode(h.server.fcManager, peer2.fcParams) + defer peer2.fcClient.Disconnect() if err := setup.req.init(h, count); err != nil { return err @@ -305,7 +301,7 @@ func (h *serverHandler) measure(setup *benchmarkSetup, count int) error { go func() { for i := 0; i < count; i++ { - if err := setup.req.request(clientPeer, i); err != nil { + if err := setup.req.request(peer1, i); err != nil { errCh <- err return } @@ -313,7 +309,7 @@ func (h *serverHandler) measure(setup *benchmarkSetup, count int) error { }() go func() { for i := 0; i < count; i++ { - if err := h.handleMsg(serverPeer, &sync.WaitGroup{}); err != nil { + if err := h.handleMsg(peer2, &sync.WaitGroup{}); err != nil { errCh <- err return } diff --git a/les/bloombits.go b/les/bloombits.go index e8981ad8..a98524ce 100644 --- a/les/bloombits.go +++ b/les/bloombits.go @@ -19,8 +19,8 @@ package les import ( "time" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/light" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/light" ) const ( diff --git a/les/catalyst/api.go b/les/catalyst/api.go new file mode 100644 index 00000000..983fc7bf --- /dev/null +++ b/les/catalyst/api.go @@ -0,0 +1,187 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package catalyst implements the temporary eth1/eth2 RPC integration. +package catalyst + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/beacon" + "github.com/ethereum/go-ethereum/les" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/rpc" +) + +// Register adds catalyst APIs to the light client. +func Register(stack *node.Node, backend *les.LightEthereum) error { + log.Warn("Catalyst mode enabled", "protocol", "les") + stack.RegisterAPIs([]rpc.API{ + { + Namespace: "engine", + Service: NewConsensusAPI(backend), + Authenticated: true, + }, + }) + return nil +} + +type ConsensusAPI struct { + les *les.LightEthereum +} + +// NewConsensusAPI creates a new consensus api for the given backend. +// The underlying blockchain needs to have a valid terminal total difficulty set. +func NewConsensusAPI(les *les.LightEthereum) *ConsensusAPI { + if les.BlockChain().Config().TerminalTotalDifficulty == nil { + log.Warn("Catalyst started without valid total difficulty") + } + return &ConsensusAPI{les: les} +} + +// ForkchoiceUpdatedV1 has several responsibilities: +// If the method is called with an empty head block: +// we return success, which can be used to check if the catalyst mode is enabled +// If the total difficulty was not reached: +// we return INVALID +// If the finalizedBlockHash is set: +// we check if we have the finalizedBlockHash in our db, if not we start a sync +// We try to set our blockchain to the headBlock +// If there are payloadAttributes: +// we return an error since block creation is not supported in les mode +func (api *ConsensusAPI) ForkchoiceUpdatedV1(heads beacon.ForkchoiceStateV1, payloadAttributes *beacon.PayloadAttributesV1) (beacon.ForkChoiceResponse, error) { + if heads.HeadBlockHash == (common.Hash{}) { + log.Warn("Forkchoice requested update to zero hash") + return beacon.STATUS_INVALID, nil // TODO(karalabe): Why does someone send us this? + } + if err := api.checkTerminalTotalDifficulty(heads.HeadBlockHash); err != nil { + if header := api.les.BlockChain().GetHeaderByHash(heads.HeadBlockHash); header == nil { + // TODO (MariusVanDerWijden) trigger sync + return beacon.STATUS_SYNCING, nil + } + return beacon.STATUS_INVALID, err + } + // If the finalized block is set, check if it is in our blockchain + if heads.FinalizedBlockHash != (common.Hash{}) { + if header := api.les.BlockChain().GetHeaderByHash(heads.FinalizedBlockHash); header == nil { + // TODO (MariusVanDerWijden) trigger sync + return beacon.STATUS_SYNCING, nil + } + } + // SetHead + if err := api.setCanonical(heads.HeadBlockHash); err != nil { + return beacon.STATUS_INVALID, err + } + if payloadAttributes != nil { + return beacon.STATUS_INVALID, errors.New("not supported") + } + return api.validForkChoiceResponse(), nil +} + +// GetPayloadV1 returns a cached payload by id. It's not supported in les mode. +func (api *ConsensusAPI) GetPayloadV1(payloadID beacon.PayloadID) (*beacon.ExecutableDataV1, error) { + return nil, beacon.GenericServerError.With(errors.New("not supported in light client mode")) +} + +// ExecutePayloadV1 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. +func (api *ConsensusAPI) ExecutePayloadV1(params beacon.ExecutableDataV1) (beacon.PayloadStatusV1, error) { + block, err := beacon.ExecutableDataToBlock(params) + if err != nil { + return api.invalid(), err + } + if !api.les.BlockChain().HasHeader(block.ParentHash(), block.NumberU64()-1) { + /* + TODO (MariusVanDerWijden) reenable once sync is merged + if err := api.eth.Downloader().BeaconSync(api.eth.SyncMode(), block.Header()); err != nil { + return SYNCING, err + } + */ + // TODO (MariusVanDerWijden) we should return nil here not empty hash + return beacon.PayloadStatusV1{Status: beacon.SYNCING, LatestValidHash: nil}, nil + } + parent := api.les.BlockChain().GetHeaderByHash(params.ParentHash) + if parent == nil { + return api.invalid(), fmt.Errorf("could not find parent %x", params.ParentHash) + } + td := api.les.BlockChain().GetTd(parent.Hash(), block.NumberU64()-1) + ttd := api.les.BlockChain().Config().TerminalTotalDifficulty + if td.Cmp(ttd) < 0 { + return api.invalid(), fmt.Errorf("can not execute payload on top of block with low td got: %v threshold %v", td, ttd) + } + if err = api.les.BlockChain().InsertHeader(block.Header()); err != nil { + return api.invalid(), err + } + if merger := api.les.Merger(); !merger.TDDReached() { + merger.ReachTTD() + } + hash := block.Hash() + return beacon.PayloadStatusV1{Status: beacon.VALID, LatestValidHash: &hash}, nil +} + +func (api *ConsensusAPI) validForkChoiceResponse() beacon.ForkChoiceResponse { + currentHash := api.les.BlockChain().CurrentHeader().Hash() + return beacon.ForkChoiceResponse{ + PayloadStatus: beacon.PayloadStatusV1{Status: beacon.VALID, LatestValidHash: ¤tHash}, + } +} + +// invalid returns a response "INVALID" with the latest valid hash set to the current head. +func (api *ConsensusAPI) invalid() beacon.PayloadStatusV1 { + currentHash := api.les.BlockChain().CurrentHeader().Hash() + return beacon.PayloadStatusV1{Status: beacon.INVALID, LatestValidHash: ¤tHash} +} + +func (api *ConsensusAPI) checkTerminalTotalDifficulty(head common.Hash) error { + // shortcut if we entered PoS already + if api.les.Merger().PoSFinalized() { + return nil + } + // make sure the parent has enough terminal total difficulty + header := api.les.BlockChain().GetHeaderByHash(head) + if header == nil { + return errors.New("unknown header") + } + td := api.les.BlockChain().GetTd(header.Hash(), header.Number.Uint64()) + if td != nil && td.Cmp(api.les.BlockChain().Config().TerminalTotalDifficulty) < 0 { + return errors.New("invalid ttd") + } + return nil +} + +// setCanonical is called to perform a force choice. +func (api *ConsensusAPI) setCanonical(newHead common.Hash) error { + log.Info("Setting head", "head", newHead) + + headHeader := api.les.BlockChain().CurrentHeader() + if headHeader.Hash() == newHead { + return nil + } + newHeadHeader := api.les.BlockChain().GetHeaderByHash(newHead) + if newHeadHeader == nil { + return errors.New("unknown header") + } + if err := api.les.BlockChain().SetCanonical(newHeadHeader); err != nil { + return err + } + // Trigger the transition if it's the first `NewHead` event. + if merger := api.les.Merger(); !merger.PoSFinalized() { + merger.FinalizePoS() + } + return nil +} diff --git a/les/catalyst/api_test.go b/les/catalyst/api_test.go new file mode 100644 index 00000000..26c49d6e --- /dev/null +++ b/les/catalyst/api_test.go @@ -0,0 +1,244 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package catalyst + +import ( + "math/big" + "testing" + + "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/beacon" + "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/eth/ethconfig" + "github.com/ethereum/go-ethereum/les" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + // testKey is a private key to use for funding a tester account. + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + + // testAddr is the Ethereum address of the tester account. + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) + + testBalance = big.NewInt(2e18) +) + +func generatePreMergeChain(n int) (*core.Genesis, []*types.Header, []*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, + BaseFee: big.NewInt(params.InitialBaseFee), + } + gblock := genesis.MustCommit(db) + engine := ethash.NewFaker() + blocks, _ := core.GenerateChain(config, gblock, engine, db, n, nil) + totalDifficulty := big.NewInt(0) + + var headers []*types.Header + for _, b := range blocks { + totalDifficulty.Add(totalDifficulty, b.Difficulty()) + headers = append(headers, b.Header()) + } + config.TerminalTotalDifficulty = totalDifficulty + + return genesis, headers, blocks +} + +func TestSetHeadBeforeTotalDifficulty(t *testing.T) { + genesis, headers, blocks := generatePreMergeChain(10) + n, lesService := startLesService(t, genesis, headers) + defer n.Close() + + api := NewConsensusAPI(lesService) + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: blocks[5].Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err == nil { + t.Errorf("fork choice updated before total terminal difficulty should fail") + } +} + +func TestExecutePayloadV1(t *testing.T) { + genesis, headers, blocks := generatePreMergeChain(10) + n, lesService := startLesService(t, genesis, headers[:9]) + lesService.Merger().ReachTTD() + defer n.Close() + + api := NewConsensusAPI(lesService) + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: blocks[8].Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Errorf("Failed to update head %v", err) + } + block := blocks[9] + + fakeBlock := types.NewBlock(&types.Header{ + ParentHash: block.ParentHash(), + UncleHash: crypto.Keccak256Hash(nil), + Coinbase: block.Coinbase(), + Root: block.Root(), + TxHash: crypto.Keccak256Hash(nil), + ReceiptHash: crypto.Keccak256Hash(nil), + Bloom: block.Bloom(), + Difficulty: big.NewInt(0), + Number: block.Number(), + GasLimit: block.GasLimit(), + GasUsed: block.GasUsed(), + Time: block.Time(), + Extra: block.Extra(), + MixDigest: block.MixDigest(), + Nonce: types.BlockNonce{}, + BaseFee: block.BaseFee(), + }, nil, nil, nil, trie.NewStackTrie(nil)) + + _, err := api.ExecutePayloadV1(beacon.ExecutableDataV1{ + ParentHash: fakeBlock.ParentHash(), + FeeRecipient: fakeBlock.Coinbase(), + StateRoot: fakeBlock.Root(), + ReceiptsRoot: fakeBlock.ReceiptHash(), + LogsBloom: fakeBlock.Bloom().Bytes(), + Random: fakeBlock.MixDigest(), + Number: fakeBlock.NumberU64(), + GasLimit: fakeBlock.GasLimit(), + GasUsed: fakeBlock.GasUsed(), + Timestamp: fakeBlock.Time(), + ExtraData: fakeBlock.Extra(), + BaseFeePerGas: fakeBlock.BaseFee(), + BlockHash: fakeBlock.Hash(), + Transactions: encodeTransactions(fakeBlock.Transactions()), + }) + if err != nil { + t.Errorf("Failed to execute payload %v", err) + } + headHeader := api.les.BlockChain().CurrentHeader() + if headHeader.Number.Uint64() != fakeBlock.NumberU64()-1 { + t.Fatal("Unexpected chain head update") + } + fcState = beacon.ForkchoiceStateV1{ + HeadBlockHash: fakeBlock.Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + t.Fatal("Failed to update head") + } + headHeader = api.les.BlockChain().CurrentHeader() + if headHeader.Number.Uint64() != fakeBlock.NumberU64() { + t.Fatal("Failed to update chain head") + } +} + +func TestEth2DeepReorg(t *testing.T) { + // TODO (MariusVanDerWijden) TestEth2DeepReorg is currently broken, because it tries to reorg + // before the totalTerminalDifficulty threshold + /* + genesis, preMergeBlocks := generatePreMergeChain(core.TriesInMemory * 2) + n, ethservice := startEthService(t, genesis, preMergeBlocks) + defer n.Close() + + var ( + api = NewConsensusAPI(ethservice, nil) + parent = preMergeBlocks[len(preMergeBlocks)-core.TriesInMemory-1] + head = ethservice.BlockChain().CurrentBlock().NumberU64() + ) + if ethservice.BlockChain().HasBlockAndState(parent.Hash(), parent.NumberU64()) { + t.Errorf("Block %d not pruned", parent.NumberU64()) + } + for i := 0; i < 10; i++ { + execData, err := api.assembleBlock(AssembleBlockParams{ + ParentHash: parent.Hash(), + Timestamp: parent.Time() + 5, + }) + if err != nil { + t.Fatalf("Failed to create the executable data %v", err) + } + block, err := ExecutableDataToBlock(ethservice.BlockChain().Config(), parent.Header(), *execData) + if err != nil { + t.Fatalf("Failed to convert executable data to block %v", err) + } + newResp, err := api.ExecutePayload(*execData) + if err != nil || newResp.Status != "VALID" { + t.Fatalf("Failed to insert block: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != head { + t.Fatalf("Chain head shouldn't be updated") + } + if err := api.setCanonical(block.Hash()); err != nil { + t.Fatalf("Failed to set head: %v", err) + } + if ethservice.BlockChain().CurrentBlock().NumberU64() != block.NumberU64() { + t.Fatalf("Chain head should be updated") + } + parent, head = block, block.NumberU64() + } + */ +} + +// startEthService creates a full node instance for testing. +func startLesService(t *testing.T, genesis *core.Genesis, headers []*types.Header) (*node.Node, *les.LightEthereum) { + t.Helper() + + n, err := node.New(&node.Config{}) + if err != nil { + t.Fatal("can't create node:", err) + } + ethcfg := ðconfig.Config{ + Genesis: genesis, + Ethash: ethash.Config{PowMode: ethash.ModeFake}, + SyncMode: downloader.LightSync, + TrieDirtyCache: 256, + TrieCleanCache: 256, + LightPeers: 10, + } + lesService, err := les.New(n, ethcfg) + if err != nil { + t.Fatal("can't create eth service:", err) + } + if err := n.Start(); err != nil { + t.Fatal("can't start node:", err) + } + if _, err := lesService.BlockChain().InsertHeaderChain(headers, 0); err != nil { + n.Close() + t.Fatal("can't import test headers:", err) + } + return n, lesService +} + +func encodeTransactions(txs []*types.Transaction) [][]byte { + var enc = make([][]byte, len(txs)) + for i, tx := range txs { + enc[i], _ = tx.MarshalBinary() + } + return enc +} diff --git a/les/checkpointoracle.go b/les/checkpointoracle.go deleted file mode 100644 index a1e3379a..00000000 --- a/les/checkpointoracle.go +++ /dev/null @@ -1,158 +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 les - -import ( - "encoding/binary" - "sync/atomic" - - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/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 - - // Whether the contract backend is set. - running int32 - - getLocal func(uint64) params.TrustedCheckpoint // Function used to retrieve local checkpoint - syncDoneHook func() // Function used to notify that light syncing has completed. -} - -// 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/checkpointoracle/oracle.go b/les/checkpointoracle/oracle.go new file mode 100644 index 00000000..6ad1ea29 --- /dev/null +++ b/les/checkpointoracle/oracle.go @@ -0,0 +1,170 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 wrapper of checkpoint oracle contract with +// additional rules defined. This package can be used both in LES client or +// server side for offering oracle related APIs. +package checkpointoracle + +import ( + "encoding/binary" + "sync" + "sync/atomic" + "time" + + "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 can +// be 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 + + checkMu sync.Mutex // Mutex to sync access to the fields below + lastCheckTime time.Time // Time we last checked the checkpoint + lastCheckPoint *params.TrustedCheckpoint // The last stable checkpoint + lastCheckPointHeight uint64 // The height of last stable checkpoint +} + +// New creates a checkpoint oracle handler with given configs and callback. +func New(config *params.CheckpointOracleConfig, getLocal func(uint64) params.TrustedCheckpoint) *CheckpointOracle { + return &CheckpointOracle{ + config: config, + getLocal: getLocal, + } +} + +// Start binds the contract backend, initializes the oracle instance +// and marks the status as available. +func (oracle *CheckpointOracle) Start(backend bind.ContractBackend) { + contract, err := checkpointoracle.NewCheckpointOracle(oracle.config.Address, backend) + if err != nil { + log.Error("Oracle contract binding failed", "err", err) + return + } + if !atomic.CompareAndSwapInt32(&oracle.running, 0, 1) { + log.Error("Already bound and listening to registrar") + return + } + oracle.contract = contract +} + +// IsRunning returns an indicator whether the oracle is running. +func (oracle *CheckpointOracle) IsRunning() bool { + return atomic.LoadInt32(&oracle.running) == 1 +} + +// Contract returns the underlying raw checkpoint oracle contract. +func (oracle *CheckpointOracle) Contract() *checkpointoracle.CheckpointOracle { + return oracle.contract +} + +// StableCheckpoint returns the stable checkpoint which was generated by local +// indexers and announced by trusted signers. +func (oracle *CheckpointOracle) StableCheckpoint() (*params.TrustedCheckpoint, uint64) { + oracle.checkMu.Lock() + defer oracle.checkMu.Unlock() + if time.Since(oracle.lastCheckTime) < 1*time.Minute { + return oracle.lastCheckPoint, oracle.lastCheckPointHeight + } + // Look it up properly + // Retrieve the latest checkpoint from the contract, abort if empty + latest, hash, height, err := oracle.contract.Contract().GetLatestCheckpoint(nil) + oracle.lastCheckTime = time.Now() + if err != nil || (latest == 0 && hash == [32]byte{}) { + oracle.lastCheckPointHeight = 0 + oracle.lastCheckPoint = nil + return oracle.lastCheckPoint, oracle.lastCheckPointHeight + } + local := oracle.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, no stable checkpoint will be returned. + if local.HashEqual(hash) { + oracle.lastCheckPointHeight = height.Uint64() + oracle.lastCheckPoint = &local + return oracle.lastCheckPoint, oracle.lastCheckPointHeight + } + return nil, 0 +} + +// VerifySigners recovers the signer addresses according to the signature and +// checks whether there are enough approvals to finalize the checkpoint. +func (oracle *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(oracle.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(oracle.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 oracle.config.Signers { + if s == signer { + signers = append(signers, signer) + checked[signer] = struct{}{} + } + } + } + threshold := oracle.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/client.go b/les/client.go index bba0c3be..6e6beeb0 100644 --- a/les/client.go +++ b/les/client.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 @@ -19,43 +19,52 @@ package les import ( "fmt" + "strings" + "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/bloombits" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/eth/filters" - "github.com/cryptoecc/ETH-ECC/eth/gasprice" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/accounts" + "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" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/internal/shutdowncheck" + "github.com/ethereum/go-ethereum/les/downloader" + "github.com/ethereum/go-ethereum/les/vflux" + vfc "github.com/ethereum/go-ethereum/les/vflux/client" + "github.com/ethereum/go-ethereum/light" + "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/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) type LightEthereum struct { lesCommons - reqDist *requestDistributor - retriever *retrieveManager - odr *LesOdr - relay *lesTxRelay - handler *clientHandler - txPool *light.TxPool - blockchain *light.LightChain - serverPool *serverPool + peers *serverPeerSet + reqDist *requestDistributor + retriever *retrieveManager + odr *LesOdr + relay *lesTxRelay + handler *clientHandler + txPool *light.TxPool + blockchain *light.LightChain + serverPool *vfc.ServerPool + serverPoolIterator enode.Iterator + pruner *pruner + merger *consensus.Merger bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports @@ -64,21 +73,46 @@ type LightEthereum struct { eventMux *event.TypeMux engine consensus.Engine accountManager *accounts.Manager - netRPCService *ethapi.PublicNetAPI + netRPCService *ethapi.NetAPI + + p2pServer *p2p.Server + p2pConfig *p2p.Config + udpEnabled bool + + shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully } -func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { - chainDb, err := ctx.OpenDatabase("lightchaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/") +// New creates an instance of the light client. +func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) { + chainDb, err := stack.OpenDatabase("lightchaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/", false) + if err != nil { + return nil, err + } + lesDb, err := stack.OpenDatabase("les.client", 0, 0, "eth/db/lesclient/", false) if err != nil { return nil, err } - chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul) + var overrides core.ChainOverrides + if config.OverrideTerminalTotalDifficulty != nil { + overrides.OverrideTerminalTotalDifficulty = config.OverrideTerminalTotalDifficulty + } + if config.OverrideTerminalTotalDifficultyPassed != nil { + overrides.OverrideTerminalTotalDifficultyPassed = config.OverrideTerminalTotalDifficultyPassed + } + chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, &overrides) if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { return nil, genesisErr } - log.Info("Initialised chain configuration", "config", chainConfig) + log.Info("") + log.Info(strings.Repeat("-", 153)) + for _, line := range strings.Split(chainConfig.String(), "\n") { + log.Info(line) + } + log.Info(strings.Repeat("-", 153)) + log.Info("") - peers := newPeerSet() + peers := newServerPeerSet() + merger := consensus.NewMerger(chainDb) leth := &LightEthereum{ lesCommons: lesCommons{ genesis: genesisHash, @@ -86,23 +120,36 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { chainConfig: chainConfig, iConfig: light.DefaultClientIndexerConfig, chainDb: chainDb, - peers: peers, + lesDb: lesDb, closeCh: make(chan struct{}), }, - eventMux: ctx.EventMux, - reqDist: newRequestDistributor(peers, &mclock.System{}), - accountManager: ctx.AccountManager, - engine: eth.CreateConsensusEngine(ctx, chainConfig, &config.Ethash, nil, false, chainDb), - bloomRequests: make(chan chan *bloombits.Retrieval), - bloomIndexer: eth.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), - serverPool: newServerPool(chainDb, config.UltraLightServers), + peers: peers, + eventMux: stack.EventMux(), + reqDist: newRequestDistributor(peers, &mclock.System{}), + accountManager: stack.AccountManager(), + merger: merger, + engine: ethconfig.CreateConsensusEngine(stack, &config.Ethash, chainConfig.Clique, nil, false, chainDb), + bloomRequests: make(chan chan *bloombits.Retrieval), + bloomIndexer: core.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), + p2pServer: stack.Server(), + p2pConfig: &stack.Config().P2P, + udpEnabled: stack.Config().P2P.DiscoveryV5, + shutdownTracker: shutdowncheck.NewShutdownTracker(chainDb), } - leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool) + + var prenegQuery vfc.QueryFunc + if leth.udpEnabled { + prenegQuery = leth.prenegQuery + } + leth.serverPool, leth.serverPoolIterator = vfc.NewServerPool(lesDb, []byte("serverpool:"), time.Second, prenegQuery, &mclock.System{}, config.UltraLightServers, requestList) + leth.serverPool.AddMetrics(suggestedTimeoutGauge, totalValueGauge, serverSelectableGauge, serverConnectedGauge, sessionValueMeter, serverDialedMeter) + + leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool.GetTimeout) leth.relay = newLesTxRelay(peers, leth.retriever) - leth.odr = NewLesOdr(chainDb, light.DefaultClientIndexerConfig, leth.retriever) - leth.chtIndexer = light.NewChtIndexer(chainDb, leth.odr, params.CHTFrequency, params.HelperTrieConfirmations) - leth.bloomTrieIndexer = light.NewBloomTrieIndexer(chainDb, leth.odr, params.BloomBitsBlocksClient, params.BloomTrieFrequency) + leth.odr = NewLesOdr(chainDb, light.DefaultClientIndexerConfig, leth.peers, leth.retriever) + leth.chtIndexer = light.NewChtIndexer(chainDb, leth.odr, params.CHTFrequency, params.HelperTrieConfirmations, config.LightNoPrune) + leth.bloomTrieIndexer = light.NewBloomTrieIndexer(chainDb, leth.odr, params.BloomBitsBlocksClient, params.BloomTrieFrequency, config.LightNoPrune) leth.odr.SetIndexers(leth.chtIndexer, leth.bloomTrieIndexer, leth.bloomIndexer) checkpoint := config.Checkpoint @@ -118,22 +165,16 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { 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) + leth.oracle = leth.setupOracle(stack, genesisHash, config) // 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() - } + // Start a light chain pruner to delete useless historical data. + leth.pruner = newPruner(chainDb, leth.chtIndexer, leth.bloomTrieIndexer) + // 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) @@ -141,16 +182,94 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig) } - leth.ApiBackend = &LesApiBackend{ctx.ExtRPCEnabled(), leth, nil} + leth.ApiBackend = &LesApiBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, leth, nil} gpoParams := config.GPO if gpoParams.Default == nil { gpoParams.Default = config.Miner.GasPrice } leth.ApiBackend.gpo = gasprice.NewOracle(leth.ApiBackend, gpoParams) + 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() + } + + leth.netRPCService = ethapi.NewNetAPI(leth.p2pServer, leth.config.NetworkId) + + // Register the backend on the node + stack.RegisterAPIs(leth.APIs()) + stack.RegisterProtocols(leth.Protocols()) + stack.RegisterLifecycle(leth) + + // Successful startup; push a marker and check previous unclean shutdowns. + leth.shutdownTracker.MarkStartup() + return leth, nil } +// VfluxRequest sends a batch of requests to the given node through discv5 UDP TalkRequest and returns the responses +func (s *LightEthereum) VfluxRequest(n *enode.Node, reqs vflux.Requests) vflux.Replies { + if !s.udpEnabled { + return nil + } + reqsEnc, _ := rlp.EncodeToBytes(&reqs) + repliesEnc, _ := s.p2pServer.DiscV5.TalkRequest(s.serverPool.DialNode(n), "vfx", reqsEnc) + var replies vflux.Replies + if len(repliesEnc) == 0 || rlp.DecodeBytes(repliesEnc, &replies) != nil { + return nil + } + return replies +} + +// vfxVersion returns the version number of the "les" service subdomain of the vflux UDP +// service, as advertised in the ENR record +func (s *LightEthereum) vfxVersion(n *enode.Node) uint { + if n.Seq() == 0 { + var err error + if !s.udpEnabled { + return 0 + } + if n, err = s.p2pServer.DiscV5.RequestENR(n); n != nil && err == nil && n.Seq() != 0 { + s.serverPool.Persist(n) + } else { + return 0 + } + } + + var les []rlp.RawValue + if err := n.Load(enr.WithEntry("les", &les)); err != nil || len(les) < 1 { + return 0 + } + var version uint + rlp.DecodeBytes(les[0], &version) // Ignore additional fields (for forward compatibility). + return version +} + +// prenegQuery sends a capacity query to the given server node to determine whether +// a connection slot is immediately available +func (s *LightEthereum) prenegQuery(n *enode.Node) int { + if s.vfxVersion(n) < 1 { + // UDP query not supported, always try TCP connection + return 1 + } + + var requests vflux.Requests + requests.Add("les", vflux.CapacityQueryName, vflux.CapacityQueryReq{ + Bias: 180, + AddTokens: []vflux.IntOrInf{{}}, + }) + replies := s.VfluxRequest(n, requests) + var cqr vflux.CapacityQueryReply + if replies.Get(0, &cqr) != nil || len(cqr) != 1 { // Note: Get returns an error if replies is nil + return -1 + } + if cqr[0] > 0 { + return 1 + } + return 0 +} + type LightDummyAPI struct{} // Etherbase is the address that mining rewards will be send to @@ -176,32 +295,24 @@ func (s *LightDummyAPI) Mining() bool { // APIs returns the collection of RPC services the ethereum package offers. // NOTE, some of these services probably need to be moved to somewhere else. func (s *LightEthereum) APIs() []rpc.API { - return append(ethapi.GetAPIs(s.ApiBackend), []rpc.API{ + apis := ethapi.GetAPIs(s.ApiBackend) + apis = append(apis, s.engine.APIs(s.BlockChain().HeaderChain())...) + return append(apis, []rpc.API{ { Namespace: "eth", - Version: "1.0", Service: &LightDummyAPI{}, - Public: true, - }, { - Namespace: "eth", - Version: "1.0", - Service: downloader.NewPublicDownloaderAPI(s.handler.downloader, s.eventMux), - Public: true, }, { Namespace: "eth", - Version: "1.0", - Service: filters.NewPublicFilterAPI(s.ApiBackend, true), - Public: true, + Service: downloader.NewDownloaderAPI(s.handler.downloader, s.eventMux), }, { Namespace: "net", - Version: "1.0", Service: s.netRPCService, - Public: true, }, { Namespace: "les", - Version: "1.0", - Service: NewPrivateLightAPI(&s.lesCommons), - Public: false, + Service: NewLightAPI(&s.lesCommons), + }, { + Namespace: "vflux", + Service: s.serverPool.API(), }, }...) } @@ -216,40 +327,50 @@ 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.handler.downloader } func (s *LightEthereum) EventMux() *event.TypeMux { return s.eventMux } +func (s *LightEthereum) Merger() *consensus.Merger { return s.merger } -// Protocols implements node.Service, returning all the currently configured -// network protocols to start. +// Protocols returns all the currently configured network protocols to start. func (s *LightEthereum) Protocols() []p2p.Protocol { return s.makeProtocols(ClientProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { - if p := s.peers.Peer(peerIdToString(id)); p != nil { + if p := s.peers.peer(id.String()); p != nil { return p.Info() } return nil - }) + }, s.serverPoolIterator) } -// Start implements node.Service, starting all internal goroutines needed by the +// Start implements node.Lifecycle, starting all internal goroutines needed by the // light ethereum protocol implementation. -func (s *LightEthereum) Start(srvr *p2p.Server) error { +func (s *LightEthereum) Start() error { log.Warn("Light client mode is an experimental feature") + // Regularly update shutdown marker + s.shutdownTracker.Start() + + if s.udpEnabled && s.p2pServer.DiscV5 == nil { + s.udpEnabled = false + log.Error("Discovery v5 is not initialized") + } + discovery, err := s.setupDiscovery() + if err != nil { + return err + } + s.serverPool.AddSource(discovery) + s.serverPool.Start() // Start bloom request workers. s.wg.Add(bloomServiceThreads) s.startBloomHandlers(params.BloomBitsBlocksClient) + s.handler.start() - 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)) return nil } -// Stop implements node.Service, terminating all internal goroutines used by the +// Stop implements node.Lifecycle, terminating all internal goroutines used by the // Ethereum protocol. func (s *LightEthereum) Stop() error { close(s.closeCh) - s.peers.Close() + s.serverPool.Stop() + s.peers.close() s.reqDist.close() s.odr.Stop() s.relay.Stop() @@ -259,18 +380,14 @@ func (s *LightEthereum) Stop() error { s.handler.stop() s.txPool.Stop() s.engine.Close() + s.pruner.close() s.eventMux.Stop() - s.serverPool.stop() + // Clean shutdown marker as the last thing before closing db + s.shutdownTracker.Stop() + s.chainDb.Close() + s.lesDb.Close() 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 index 75cd87e2..e416f92e 100644 --- a/les/client_handler.go +++ b/les/client_handler.go @@ -17,24 +17,30 @@ package les import ( + "context" "math/big" + "math/rand" "sync" + "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/les/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 + forkFilter forkid.Filter checkpoint *params.TrustedCheckpoint fetcher *lightFetcher downloader *downloader.Downloader @@ -42,12 +48,18 @@ type clientHandler struct { closeCh chan struct{} wg sync.WaitGroup // WaitGroup used to track all connected peers. + + // Hooks used in the testing + syncStart func(header *types.Header) // Hook called when the syncing is started + syncEnd func(header *types.Header) // Hook called when the syncing is done } func newClientHandler(ulcServers []string, ulcFraction int, checkpoint *params.TrustedCheckpoint, backend *LightEthereum) *clientHandler { handler := &clientHandler{ - backend: backend, - closeCh: make(chan struct{}), + forkFilter: forkid.NewFilter(backend.blockchain), + checkpoint: checkpoint, + backend: backend, + closeCh: make(chan struct{}), } if ulcServers != nil { ulc, err := newULC(ulcServers, ulcFraction) @@ -61,16 +73,20 @@ func newClientHandler(ulcServers []string, ulcFraction int, checkpoint *params.T 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)) + handler.fetcher = newLightFetcher(backend.blockchain, backend.engine, backend.peers, handler.ulc, backend.chainDb, backend.reqDist, handler.synchronise) + handler.downloader = downloader.New(height, backend.chainDb, backend.eventMux, nil, backend.blockchain, handler.removePeer) + handler.backend.peers.subscribe((*downloaderPeerNotify)(handler)) return handler } +func (h *clientHandler) start() { + h.fetcher.start() +} + func (h *clientHandler) stop() { close(h.closeCh) h.downloader.Terminate() - h.fetcher.close() + h.fetcher.stop() h.wg.Wait() } @@ -80,55 +96,64 @@ func (h *clientHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) 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 - } + peer := newServerPeer(int(version), h.backend.config.NetworkId, trusted, p, newMeteredMsgWriter(rw, int(version))) + defer peer.close() h.wg.Add(1) defer h.wg.Done() - err := h.handle(peer) - h.backend.serverPool.disconnect(peer.poolEntry) + err := h.handle(peer, false) return err } -func (h *clientHandler) handle(p *peer) error { - if h.backend.peers.Len() >= h.backend.config.LightPeers && !p.Peer.Info().Network.Trusted { +func (h *clientHandler) handle(p *serverPeer, noInitAnnounce bool) 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 { + forkid := forkid.NewID(h.backend.blockchain.Config(), h.backend.genesis, h.backend.blockchain.CurrentHeader().Number.Uint64()) + if err := p.Handshake(h.backend.blockchain.Genesis().Hash(), forkid, h.forkFilter); err != nil { p.Log().Debug("Light Ethereum handshake failed", "err", err) return err } + // Register peer with the server pool + if h.backend.serverPool != nil { + if nvt, err := h.backend.serverPool.RegisterNode(p.Node()); err == nil { + p.setValueTracker(nvt) + p.updateVtParams() + defer func() { + p.setValueTracker(nil) + h.backend.serverPool.UnregisterNode(p.Node()) + }() + } else { + return err + } + } // Register the peer locally - if err := h.backend.peers.Register(p); err != nil { + 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())) + + serverConnectionGauge.Update(int64(h.backend.peers.len())) connectedAt := mclock.Now() defer func() { - h.backend.peers.Unregister(p.id) + h.backend.peers.unregister(p.id) connectionTimer.Update(time.Duration(mclock.Now() - connectedAt)) - serverConnectionGauge.Update(int64(h.backend.peers.Len())) + 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) + // Discard all the announces after the transition + // Also discarding initial signal to prevent syncing during testing. + if !(noInitAnnounce || h.backend.merger.TDDReached()) { + h.fetcher.announce(p, &announceData{Hash: p.headInfo.Hash, Number: p.headInfo.Number, Td: p.headInfo.Td}) } + + // Mark the peer starts to be served. + atomic.StoreUint32(&p.serving, 1) + defer atomic.StoreUint32(&p.serving, 0) + // Spawn a main loop to handle all incoming messages. for { if err := h.handleMsg(p); err != nil { @@ -141,7 +166,7 @@ func (h *clientHandler) handle(p *peer) error { // 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 { +func (h *clientHandler) handleMsg(p *serverPeer) error { // Read the next message from the remote peer, and ensure it's fully consumed msg, err := p.rw.ReadMsg() if err != nil { @@ -157,8 +182,8 @@ func (h *clientHandler) handleMsg(p *peer) error { var deliverMsg *Msg // Handle the message depending on its contents - switch msg.Code { - case AnnounceMsg: + switch { + case msg.Code == AnnounceMsg: p.Log().Trace("Received announce message") var req announceData if err := msg.Decode(&req); err != nil { @@ -172,6 +197,7 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrRequestRejected, "") } p.updateFlowControl(update) + p.updateVtParams() if req.Hash != (common.Hash{}) { if p.announceType == announceTypeNone { @@ -185,9 +211,16 @@ func (h *clientHandler) handleMsg(p *peer) error { 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) + + // Update peer head information first and then notify the announcement + p.updateHead(req.Hash, req.Number, req.Td) + + // Discard all the announces after the transition + if !h.backend.merger.TDDReached() { + h.fetcher.announce(p, &req) + } } - case BlockHeadersMsg: + case msg.Code == BlockHeadersMsg: p.Log().Trace("Received block header response message") var resp struct { ReqID, BV uint64 @@ -196,15 +229,30 @@ func (h *clientHandler) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } + headers := resp.Headers p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - if h.fetcher.requestedID(resp.ReqID) { - h.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers) + p.answeredRequest(resp.ReqID) + + // Filter out the explicitly requested header by the retriever + if h.backend.retriever.requested(resp.ReqID) { + deliverMsg = &Msg{ + MsgType: MsgBlockHeaders, + ReqID: resp.ReqID, + Obj: resp.Headers, + } } else { - if err := h.downloader.DeliverHeaders(p.id, resp.Headers); err != nil { - log.Debug("Failed to deliver headers", "err", err) + // Filter out any explicitly requested headers, deliver the rest to the downloader + filter := len(headers) == 1 + if filter { + headers = h.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers) + } + if len(headers) != 0 || !filter { + if err := h.downloader.DeliverHeaders(p.id, headers); err != nil { + log.Debug("Failed to deliver headers", "err", err) + } } } - case BlockBodiesMsg: + case msg.Code == BlockBodiesMsg: p.Log().Trace("Received block bodies response") var resp struct { ReqID, BV uint64 @@ -214,12 +262,13 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgBlockBodies, ReqID: resp.ReqID, Obj: resp.Data, } - case CodeMsg: + case msg.Code == CodeMsg: p.Log().Trace("Received code response") var resp struct { ReqID, BV uint64 @@ -229,12 +278,13 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgCode, ReqID: resp.ReqID, Obj: resp.Data, } - case ReceiptsMsg: + case msg.Code == ReceiptsMsg: p.Log().Trace("Received receipts response") var resp struct { ReqID, BV uint64 @@ -244,12 +294,13 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgReceipts, ReqID: resp.ReqID, Obj: resp.Receipts, } - case ProofsV2Msg: + case msg.Code == ProofsV2Msg: p.Log().Trace("Received les/2 proofs response") var resp struct { ReqID, BV uint64 @@ -259,12 +310,13 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgProofsV2, ReqID: resp.ReqID, Obj: resp.Data, } - case HelperTrieProofsMsg: + case msg.Code == HelperTrieProofsMsg: p.Log().Trace("Received helper trie proof response") var resp struct { ReqID, BV uint64 @@ -274,12 +326,13 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgHelperTrieProofs, ReqID: resp.ReqID, Obj: resp.Data, } - case TxStatusMsg: + case msg.Code == TxStatusMsg: p.Log().Trace("Received tx status response") var resp struct { ReqID, BV uint64 @@ -289,22 +342,23 @@ func (h *clientHandler) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + p.answeredRequest(resp.ReqID) deliverMsg = &Msg{ MsgType: MsgTxStatus, ReqID: resp.ReqID, Obj: resp.Status, } - case StopMsg: - p.freezeServer(true) + case msg.Code == StopMsg && p.version >= lpv3: + p.freeze() h.backend.retriever.frozen(p) p.Log().Debug("Service stopped") - case ResumeMsg: + case msg.Code == ResumeMsg && p.version >= lpv3: 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.unfreeze() p.Log().Debug("Service resumed") default: p.Log().Trace("Received invalid message", "code", msg.Code) @@ -313,8 +367,7 @@ func (h *clientHandler) handleMsg(p *peer) error { // 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 { + if val := p.errCount.Add(1, mclock.Now()); val > maxResponseErrors { return err } } @@ -323,12 +376,12 @@ func (h *clientHandler) handleMsg(p *peer) error { } func (h *clientHandler) removePeer(id string) { - h.backend.peers.Unregister(id) + h.backend.peers.unregister(id) } type peerConnection struct { handler *clientHandler - peer *peer + peer *serverPeer } func (pc *peerConnection) Head() (common.Hash, *big.Int) { @@ -338,18 +391,18 @@ func (pc *peerConnection) Head() (common.Hash, *big.Int) { 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) + peer := dp.(*serverPeer) + return peer.getRequestCost(GetBlockHeadersMsg, amount) }, canSend: func(dp distPeer) bool { - return dp.(*peer) == pc.peer + return dp.(*serverPeer) == pc.peer }, request: func(dp distPeer) func() { - reqID := genReqID() - peer := dp.(*peer) - cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) + reqID := rand.Uint64() + peer := dp.(*serverPeer) + cost := peer.getRequestCost(GetBlockHeadersMsg, amount) peer.fcServer.QueuedRequest(reqID, cost) - return func() { peer.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse) } + return func() { peer.requestHeadersByHash(reqID, origin, amount, skip, reverse) } }, } _, ok := <-pc.handler.backend.reqDist.queue(rq) @@ -362,18 +415,18 @@ func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, s 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) + peer := dp.(*serverPeer) + return peer.getRequestCost(GetBlockHeadersMsg, amount) }, canSend: func(dp distPeer) bool { - return dp.(*peer) == pc.peer + return dp.(*serverPeer) == pc.peer }, request: func(dp distPeer) func() { - reqID := genReqID() - peer := dp.(*peer) - cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) + reqID := rand.Uint64() + peer := dp.(*serverPeer) + cost := peer.getRequestCost(GetBlockHeadersMsg, amount) peer.fcServer.QueuedRequest(reqID, cost) - return func() { peer.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse) } + return func() { peer.requestHeadersByNumber(reqID, origin, amount, skip, reverse) } }, } _, ok := <-pc.handler.backend.reqDist.queue(rq) @@ -383,19 +436,55 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip return nil } +// RetrieveSingleHeaderByNumber requests a single header by the specified block +// number. This function will wait the response until it's timeout or delivered. +func (pc *peerConnection) RetrieveSingleHeaderByNumber(context context.Context, number uint64) (*types.Header, error) { + reqID := rand.Uint64() + rq := &distReq{ + getCost: func(dp distPeer) uint64 { + peer := dp.(*serverPeer) + return peer.getRequestCost(GetBlockHeadersMsg, 1) + }, + canSend: func(dp distPeer) bool { + return dp.(*serverPeer) == pc.peer + }, + request: func(dp distPeer) func() { + peer := dp.(*serverPeer) + cost := peer.getRequestCost(GetBlockHeadersMsg, 1) + peer.fcServer.QueuedRequest(reqID, cost) + return func() { peer.requestHeadersByNumber(reqID, number, 1, 0, false) } + }, + } + var header *types.Header + if err := pc.handler.backend.retriever.retrieve(context, reqID, rq, func(peer distPeer, msg *Msg) error { + if msg.MsgType != MsgBlockHeaders { + return errInvalidMessageType + } + headers := msg.Obj.([]*types.Header) + if len(headers) != 1 { + return errInvalidEntryCount + } + header = headers[0] + return nil + }, nil); err != nil { + return nil, err + } + return header, nil +} + // downloaderPeerNotify implements peerSetNotify type downloaderPeerNotify clientHandler -func (d *downloaderPeerNotify) registerPeer(p *peer) { +func (d *downloaderPeerNotify) registerPeer(p *serverPeer) { h := (*clientHandler)(d) pc := &peerConnection{ handler: h, peer: p, } - h.downloader.RegisterLightPeer(p.id, ethVersion, pc) + h.downloader.RegisterLightPeer(p.id, eth.ETH66, pc) } -func (d *downloaderPeerNotify) unregisterPeer(p *peer) { +func (d *downloaderPeerNotify) unregisterPeer(p *serverPeer) { h := (*clientHandler)(d) h.downloader.UnregisterPeer(p.id) } diff --git a/les/clientpool.go b/les/clientpool.go deleted file mode 100644 index e07ce9d1..00000000 --- a/les/clientpool.go +++ /dev/null @@ -1,607 +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 les - -import ( - "io" - "math" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/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 // 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 - 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 deleted file mode 100644 index 12ba7683..00000000 --- a/les/clientpool_test.go +++ /dev/null @@ -1,180 +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 les - -import ( - "fmt" - "math/rand" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/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 b1b0ba90..d090fc21 100644 --- a/les/commons.go +++ b/les/commons.go @@ -21,34 +21,26 @@ import ( "math/big" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" + "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/ethconfig" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/checkpointoracle" + "github.com/ethereum/go-ethereum/light" + "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/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 } @@ -56,14 +48,13 @@ type chainReader interface { // lesCommons contains fields needed by both server and client. type lesCommons struct { genesis common.Hash - config *eth.Config + config *ethconfig.Config chainConfig *params.ChainConfig iConfig *light.IndexerConfig - chainDb ethdb.Database - peers *peerSet + chainDb, lesDb ethdb.Database chainReader chainReader chtIndexer, bloomTrieIndexer *core.ChainIndexer - oracle *checkpointOracle + oracle *checkpointoracle.CheckpointOracle closeCh chan struct{} wg sync.WaitGroup @@ -81,7 +72,7 @@ type NodeInfo struct { } // makeProtocols creates protocol descriptors for the given LES versions. -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 { +func (c *lesCommons) makeProtocols(versions []uint, runPeer func(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error, peerInfo func(id enode.ID) interface{}, dialCandidates enode.Iterator) []p2p.Protocol { protos := make([]p2p.Protocol, len(versions)) for i, version := range versions { version := version @@ -93,7 +84,8 @@ func (c *lesCommons) makeProtocols(versions []uint, runPeer func(version uint, p Run: func(peer *p2p.Peer, rw p2p.MsgReadWriter) error { return runPeer(version, peer, rw) }, - PeerInfo: peerInfo, + PeerInfo: peerInfo, + DialCandidates: dialCandidates, } } return protos @@ -144,3 +136,26 @@ func (c *lesCommons) localCheckpoint(index uint64) params.TrustedCheckpoint { BloomRoot: light.GetBloomTrieRoot(c.chainDb, index, sectionHead), } } + +// setupOracle sets up the checkpoint oracle contract client. +func (c *lesCommons) setupOracle(node *node.Node, genesis common.Hash, ethconfig *ethconfig.Config) *checkpointoracle.CheckpointOracle { + config := ethconfig.CheckpointOracle + if config == nil { + // Try loading default config. + config = params.CheckpointOracles[genesis] + } + if config == nil { + log.Info("Checkpoint oracle is not enabled") + return nil + } + if config.Address == (common.Address{}) || uint64(len(config.Signers)) < config.Threshold { + log.Warn("Invalid checkpoint oracle config") + return nil + } + oracle := checkpointoracle.New(config, c.localCheckpoint) + rpcClient, _ := node.Attach() + client := ethclient.NewClient(rpcClient) + oracle.Start(client) + log.Info("Configured checkpoint oracle", "address", config.Address, "signers", len(config.Signers), "threshold", config.Threshold) + return oracle +} diff --git a/les/costtracker.go b/les/costtracker.go index 14dec49f..43e32a5b 100644 --- a/les/costtracker.go +++ b/les/costtracker.go @@ -23,11 +23,12 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "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 @@ -87,7 +88,7 @@ const ( gfUsageTC = time.Second gfRaiseTC = time.Second * 200 gfDropTC = time.Second * 50 - gfDbKey = "_globalCostFactorV3" + gfDbKey = "_globalCostFactorV6" ) // costTracker is responsible for calculating costs and cost estimates on the @@ -136,7 +137,7 @@ type costTracker struct { // 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) { +func newCostTracker(db ethdb.Database, config *ethconfig.Config) (*costTracker, uint64) { utilTarget := float64(config.LightServ) * flowcontrol.FixedPointMultiplier / 100 ct := &costTracker{ db: db, @@ -226,6 +227,9 @@ type reqInfo struct { // 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 @@ -265,15 +269,48 @@ func (ct *costTracker) gfLoop() { log.Debug("global cost factor saved", "value", factor) } saveTicker := time.NewTicker(time.Minute * 10) + defer saveTicker.Stop() 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(int64(r.avgTimeCost / factor / r.servingTime)) + relativeCostHistogram.Update(relCost) now := mclock.Now() dt := float64(now - expUpdate) @@ -324,6 +361,7 @@ func (ct *costTracker) gfLoop() { default: } } + globalFactorGauge.Update(int64(1000 * factor)) log.Debug("global cost factor updated", "factor", factor) } } @@ -375,7 +413,7 @@ 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)}: + case ct.reqInfoCh <- reqInfo{float64(avgTimeCost), float64(servingTime), code}: default: } if makeCostStats { diff --git a/les/distributor.go b/les/distributor.go index 4cbf021b..a0319c67 100644 --- a/les/distributor.go +++ b/les/distributor.go @@ -21,7 +21,8 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/les/utils" ) // requestDistributor implements a mechanism that distributes requests to @@ -49,7 +50,7 @@ type requestDistributor struct { type distPeer interface { waitBefore(uint64) (time.Duration, float64) canQueue() bool - queueSend(f func()) + queueSend(f func()) bool } // distReq is the request abstraction used by the distributor. It is based on @@ -73,7 +74,7 @@ type distReq struct { } // newRequestDistributor creates a new request distributor -func newRequestDistributor(peers *peerSet, clock mclock.Clock) *requestDistributor { +func newRequestDistributor(peers *serverPeerSet, clock mclock.Clock) *requestDistributor { d := &requestDistributor{ clock: clock, reqQueue: list.New(), @@ -82,7 +83,7 @@ func newRequestDistributor(peers *peerSet, clock mclock.Clock) *requestDistribut peers: make(map[distPeer]struct{}), } if peers != nil { - peers.notify(d) + peers.subscribe(d) } d.wg.Add(1) go d.loop() @@ -90,14 +91,14 @@ func newRequestDistributor(peers *peerSet, clock mclock.Clock) *requestDistribut } // registerPeer implements peerSetNotify -func (d *requestDistributor) registerPeer(p *peer) { +func (d *requestDistributor) registerPeer(p *serverPeer) { d.peerLock.Lock() d.peers[p] = struct{}{} d.peerLock.Unlock() } // unregisterPeer implements peerSetNotify -func (d *requestDistributor) unregisterPeer(p *peer) { +func (d *requestDistributor) unregisterPeer(p *serverPeer) { d.peerLock.Lock() delete(d.peers, p) d.peerLock.Unlock() @@ -110,13 +111,15 @@ func (d *requestDistributor) registerTestPeer(p distPeer) { d.peerLock.Unlock() } -// 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 * 50 +var ( + // distMaxWait is the maximum waiting time after which further necessary waiting + // times are recalculated based on new feedback from the servers + 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 + // 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 + waitForPeers = time.Second * 3 +) // main event loop func (d *requestDistributor) loop() { @@ -177,12 +180,11 @@ func (d *requestDistributor) loop() { type selectPeerItem struct { peer distPeer req *distReq - weight int64 + weight uint64 } -// Weight implements wrsItem interface -func (sp selectPeerItem) Weight() int64 { - return sp.weight +func selectPeerWeight(i interface{}) uint64 { + return i.(selectPeerItem).weight } // nextRequest returns the next possible request from any peer, along with the @@ -192,7 +194,7 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { elem := d.reqQueue.Front() var ( bestWait time.Duration - sel *weightedRandomSelect + sel *utils.WeightedRandomSelect ) d.peerLock.RLock() @@ -217,9 +219,9 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { wait, bufRemain := peer.waitBefore(cost) if wait == 0 { if sel == nil { - sel = newWeightedRandomSelect() + sel = utils.NewWeightedRandomSelect(selectPeerWeight) } - sel.update(selectPeerItem{peer: peer, req: req, weight: int64(bufRemain*1000000) + 1}) + sel.Update(selectPeerItem{peer: peer, req: req, weight: uint64(bufRemain*1000000) + 1}) } else { if bestWait == 0 || wait < bestWait { bestWait = wait @@ -237,7 +239,7 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { } if sel != nil { - c := sel.choose().(selectPeerItem) + c := sel.Choose().(selectPeerItem) return c.peer, c.req, 0 } return nil, nil, bestWait @@ -254,7 +256,7 @@ 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) + r.waitForPeers = d.clock.Now().Add(waitForPeers) } // Assign the timestamp when the request is queued no matter it's // a new one or re-queued one. diff --git a/les/distributor_test.go b/les/distributor_test.go index 904a7ba0..9a93dba1 100644 --- a/les/distributor_test.go +++ b/les/distributor_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) type testDistReq struct { @@ -86,8 +86,8 @@ func (p *testDistPeer) worker(t *testing.T, checkOrder bool, stop chan struct{}) const ( testDistBufLimit = 10000000 testDistMaxCost = 1000000 - testDistPeerCount = 5 - testDistReqCount = 5000 + testDistPeerCount = 2 + testDistReqCount = 10 testDistMaxResendCount = 3 ) @@ -105,8 +105,9 @@ func (p *testDistPeer) canQueue() bool { return true } -func (p *testDistPeer) queueSend(f func()) { +func (p *testDistPeer) queueSend(f func()) bool { f() + return true } func TestRequestDistributor(t *testing.T) { @@ -128,6 +129,9 @@ func testRequestDistributor(t *testing.T, resend bool) { go peers[i].worker(t, !resend, stop) dist.registerTestPeer(peers[i]) } + // Disable the mechanism that we will wait a few time for request + // even there is no suitable peer to send right now. + waitForPeers = 0 var wg sync.WaitGroup diff --git a/les/downloader/api.go b/les/downloader/api.go new file mode 100644 index 00000000..21200b67 --- /dev/null +++ b/les/downloader/api.go @@ -0,0 +1,166 @@ +// 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 downloader + +import ( + "context" + "sync" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/rpc" +) + +// DownloaderAPI provides an API which gives information about the current synchronisation status. +// It offers only methods that operates on data that can be available to anyone without security risks. +type DownloaderAPI struct { + d *Downloader + mux *event.TypeMux + installSyncSubscription chan chan interface{} + uninstallSyncSubscription chan *uninstallSyncSubscriptionRequest +} + +// NewDownloaderAPI create a new PublicDownloaderAPI. The API has an internal event loop that +// listens for events from the downloader through the global event mux. In case it receives one of +// these events it broadcasts it to all syncing subscriptions that are installed through the +// installSyncSubscription channel. +func NewDownloaderAPI(d *Downloader, m *event.TypeMux) *DownloaderAPI { + api := &DownloaderAPI{ + d: d, + mux: m, + installSyncSubscription: make(chan chan interface{}), + uninstallSyncSubscription: make(chan *uninstallSyncSubscriptionRequest), + } + + go api.eventLoop() + + return api +} + +// eventLoop runs a loop until the event mux closes. It will install and uninstall new +// sync subscriptions and broadcasts sync status updates to the installed sync subscriptions. +func (api *DownloaderAPI) eventLoop() { + var ( + sub = api.mux.Subscribe(StartEvent{}, DoneEvent{}, FailedEvent{}) + syncSubscriptions = make(map[chan interface{}]struct{}) + ) + + for { + select { + case i := <-api.installSyncSubscription: + syncSubscriptions[i] = struct{}{} + case u := <-api.uninstallSyncSubscription: + delete(syncSubscriptions, u.c) + close(u.uninstalled) + case event := <-sub.Chan(): + if event == nil { + return + } + + var notification interface{} + switch event.Data.(type) { + case StartEvent: + notification = &SyncingResult{ + Syncing: true, + Status: api.d.Progress(), + } + case DoneEvent, FailedEvent: + notification = false + } + // broadcast + for c := range syncSubscriptions { + c <- notification + } + } + } +} + +// Syncing provides information when this nodes starts synchronising with the Ethereum network and when it's finished. +func (api *DownloaderAPI) Syncing(ctx context.Context) (*rpc.Subscription, error) { + notifier, supported := rpc.NotifierFromContext(ctx) + if !supported { + return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported + } + + rpcSub := notifier.CreateSubscription() + + go func() { + statuses := make(chan interface{}) + sub := api.SubscribeSyncStatus(statuses) + + for { + select { + case status := <-statuses: + notifier.Notify(rpcSub.ID, status) + case <-rpcSub.Err(): + sub.Unsubscribe() + return + case <-notifier.Closed(): + sub.Unsubscribe() + return + } + } + }() + + return rpcSub, nil +} + +// SyncingResult provides information about the current synchronisation status for this node. +type SyncingResult struct { + Syncing bool `json:"syncing"` + Status ethereum.SyncProgress `json:"status"` +} + +// uninstallSyncSubscriptionRequest uninstalls a syncing subscription in the API event loop. +type uninstallSyncSubscriptionRequest struct { + c chan interface{} + uninstalled chan interface{} +} + +// SyncStatusSubscription represents a syncing subscription. +type SyncStatusSubscription struct { + api *DownloaderAPI // register subscription in event loop of this api instance + c chan interface{} // channel where events are broadcasted to + unsubOnce sync.Once // make sure unsubscribe logic is executed once +} + +// Unsubscribe uninstalls the subscription from the DownloadAPI event loop. +// The status channel that was passed to subscribeSyncStatus isn't used anymore +// after this method returns. +func (s *SyncStatusSubscription) Unsubscribe() { + s.unsubOnce.Do(func() { + req := uninstallSyncSubscriptionRequest{s.c, make(chan interface{})} + s.api.uninstallSyncSubscription <- &req + + for { + select { + case <-s.c: + // drop new status events until uninstall confirmation + continue + case <-req.uninstalled: + return + } + } + }) +} + +// SubscribeSyncStatus creates a subscription that will broadcast new synchronisation updates. +// The given channel must receive interface values, the result can either +func (api *DownloaderAPI) SubscribeSyncStatus(status chan interface{}) *SyncStatusSubscription { + api.installSyncSubscription <- status + return &SyncStatusSubscription{api: api, c: status} +} diff --git a/les/downloader/downloader.go b/les/downloader/downloader.go new file mode 100644 index 00000000..6352b1c2 --- /dev/null +++ b/les/downloader/downloader.go @@ -0,0 +1,1992 @@ +// 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 . + +// This is a temporary package whilst working on the eth/66 blocking refactors. +// After that work is done, les needs to be refactored to use the new package, +// or alternatively use a stripped down version of it. Either way, we need to +// keep the changes scoped so duplicating temporarily seems the sanest. +package downloader + +import ( + "errors" + "fmt" + "math/big" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/params" +) + +var ( + MaxBlockFetch = 128 // Amount of blocks to be fetched per retrieval request + MaxHeaderFetch = 192 // Amount of block headers to be fetched per retrieval request + MaxSkeletonSize = 128 // Number of header fetches to need for a skeleton assembly + MaxReceiptFetch = 256 // Amount of transaction receipts to allow fetching per request + MaxStateFetch = 384 // Amount of node state values to allow fetching per request + + 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 + fullMaxForkAncestry uint64 = params.FullImmutabilityThreshold // Maximum chain reorganisation (locally redeclared so tests can reduce it) + lightMaxForkAncestry uint64 = params.LightImmutabilityThreshold // 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 + + fsHeaderCheckFrequency = 100 // Verification frequency of the downloaded headers during fast sync + fsHeaderSafetyNet = 2048 // Number of headers to discard in case a chain violation is detected + fsHeaderForceVerify = 24 // Number of headers to verify before and after the pivot to accept it + fsHeaderContCheck = 3 * time.Second // Time interval to check for header continuations during state download + fsMinFullBlocks = 64 // Number of blocks to retrieve fully even in fast sync +) + +var ( + errBusy = errors.New("busy") + 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") + errInvalidBody = errors.New("retrieved block body is invalid") + errInvalidReceipt = errors.New("retrieved receipt is invalid") + errCancelStateFetch = errors.New("state data download 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's protocol version too old") + errNoAncestorFound = errors.New("no common ancestor found") +) + +type Downloader struct { + mode uint32 // Synchronisation mode defining the strategy used (per sync cycle), use d.getMode() to get the SyncMode + mux *event.TypeMux // Event multiplexer to announce sync operation events + + 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 + + stateDB ethdb.Database // Database to state sync into (and deduplicate via) + + // Statistics + syncStatsChainOrigin uint64 // Origin block number where syncing started at + syncStatsChainHeight uint64 // Highest block number known when syncing started + syncStatsState stateSyncStats + syncStatsLock sync.RWMutex // Lock protecting the sync stats fields + + lightchain LightChain + blockchain BlockChain + + // Callbacks + dropPeer peerDropFn // Drops a peer for misbehaving + + // Status + synchroniseMock func(id string, hash common.Hash) error // Replacement for synchronise during testing + synchronising int32 + notified int32 + committed int32 + ancientLimit uint64 // The maximum block number which can be regarded as ancient data. + + // Channels + headerCh chan dataPack // Channel receiving inbound block headers + bodyCh chan dataPack // Channel receiving inbound block bodies + receiptCh chan dataPack // Channel receiving inbound receipts + bodyWakeCh chan bool // Channel to signal the block body fetcher of new tasks + receiptWakeCh chan bool // Channel to signal the receipt fetcher of new tasks + headerProcCh chan []*types.Header // Channel to feed the header processor new tasks + + // State sync + pivotHeader *types.Header // Pivot block header to dynamically push the syncing state root + pivotLock sync.RWMutex // Lock protecting pivot header reads from updates + + snapSync bool // Whether to run state sync over the snap protocol + SnapSyncer *snap.Syncer // TODO(karalabe): make private! hack for now + stateSyncStart chan *stateSync + trackStateReq chan *stateReq + stateCh chan dataPack // Channel receiving inbound node state data + + // Cancellation and termination + cancelPeer string // Identifier of the peer currently being used as the master (cancel on drop) + cancelCh chan struct{} // Channel to cancel mid-flight syncs + cancelLock sync.RWMutex // Lock to protect the cancel channel and peer in delivers + cancelWg sync.WaitGroup // Make sure all fetcher goroutines have exited. + + quitCh chan struct{} // Quit channel to signal termination + quitLock sync.Mutex // Lock to prevent double closes + + // Testing hooks + syncInitHook func(uint64, uint64) // Method to call upon initiating a new sync run + bodyFetchHook func([]*types.Header) // Method to call upon starting a block body fetch + receiptFetchHook func([]*types.Header) // Method to call upon starting a receipt fetch + chainInsertHook func([]*fetchResult) // Method to call upon inserting a chain of blocks (possibly in multiple invocations) +} + +// LightChain encapsulates functions required to synchronise a light chain. +type LightChain interface { + // HasHeader verifies a header's presence in the local chain. + HasHeader(common.Hash, uint64) bool + + // GetHeaderByHash retrieves a header from the local chain. + GetHeaderByHash(common.Hash) *types.Header + + // CurrentHeader retrieves the head header from the local chain. + CurrentHeader() *types.Header + + // GetTd returns the total difficulty of a local block. + GetTd(common.Hash, uint64) *big.Int + + // InsertHeaderChain inserts a batch of headers into the local chain. + InsertHeaderChain([]*types.Header, int) (int, error) + + // SetHead rewinds the local chain to a new head. + SetHead(uint64) error +} + +// BlockChain encapsulates functions required to sync a (full or fast) blockchain. +type BlockChain interface { + LightChain + + // HasBlock verifies a block's presence in the local chain. + HasBlock(common.Hash, uint64) bool + + // HasFastBlock verifies a fast block's presence in the local chain. + HasFastBlock(common.Hash, uint64) bool + + // GetBlockByHash retrieves a block from the local chain. + GetBlockByHash(common.Hash) *types.Block + + // CurrentBlock retrieves the head block from the local chain. + CurrentBlock() *types.Block + + // CurrentFastBlock retrieves the head fast block from the local chain. + CurrentFastBlock() *types.Block + + // FastSyncCommitHead directly commits the head block to a certain entity. + FastSyncCommitHead(common.Hash) error + + // InsertChain inserts a batch of blocks into the local chain. + InsertChain(types.Blocks) (int, error) + + // InsertReceiptChain inserts a batch of receipts into the local chain. + InsertReceiptChain(types.Blocks, []types.Receipts, uint64) (int, error) + + // Snapshots returns the blockchain snapshot tree to paused it during sync. + Snapshots() *snapshot.Tree +} + +// New creates a new downloader to fetch hashes and blocks from remote peers. +func New(checkpoint uint64, stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn) *Downloader { + if lightchain == nil { + lightchain = chain + } + dl := &Downloader{ + stateDB: stateDb, + mux: mux, + checkpoint: checkpoint, + queue: newQueue(blockCacheMaxItems, blockCacheInitialItems), + peers: newPeerSet(), + blockchain: chain, + lightchain: lightchain, + dropPeer: dropPeer, + headerCh: make(chan dataPack, 1), + bodyCh: make(chan dataPack, 1), + receiptCh: make(chan dataPack, 1), + bodyWakeCh: make(chan bool, 1), + receiptWakeCh: make(chan bool, 1), + headerProcCh: make(chan []*types.Header, 1), + quitCh: make(chan struct{}), + stateCh: make(chan dataPack), + SnapSyncer: snap.NewSyncer(stateDb), + stateSyncStart: make(chan *stateSync), + //syncStatsState: stateSyncStats{ + // processed: rawdb.ReadFastTrieProgress(stateDb), + //}, + trackStateReq: make(chan *stateReq), + } + go dl.stateFetcher() + return dl +} + +// Progress retrieves the synchronisation boundaries, specifically the origin +// block where synchronisation started at (may have failed/suspended); the block +// or header sync is currently at; and the latest known block which the sync targets. +// +// In addition, during the state download phase of fast synchronisation the number +// of processed and the total number of known states are also returned. Otherwise +// these are zero. +func (d *Downloader) Progress() ethereum.SyncProgress { + // Lock the current stats and return the progress + d.syncStatsLock.RLock() + defer d.syncStatsLock.RUnlock() + + current := uint64(0) + mode := d.getMode() + switch { + case d.blockchain != nil && mode == FullSync: + current = d.blockchain.CurrentBlock().NumberU64() + case d.blockchain != nil && mode == FastSync: + current = d.blockchain.CurrentFastBlock().NumberU64() + 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", mode) + } + return ethereum.SyncProgress{ + StartingBlock: d.syncStatsChainOrigin, + CurrentBlock: current, + HighestBlock: d.syncStatsChainHeight, + //PulledStates: d.syncStatsState.processed, + //KnownStates: d.syncStatsState.processed + d.syncStatsState.pending, + } +} + +// Synchronising returns whether the downloader is currently retrieving blocks. +func (d *Downloader) Synchronising() bool { + return atomic.LoadInt32(&d.synchronising) > 0 +} + +// RegisterPeer injects a new download peer into the set of block source to be +// used for fetching hashes and blocks from. +func (d *Downloader) RegisterPeer(id string, version uint, peer Peer) error { + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:8]) + } + logger.Trace("Registering sync peer") + if err := d.peers.Register(newPeerConnection(id, version, peer, logger)); err != nil { + logger.Error("Failed to register sync peer", "err", err) + return err + } + return nil +} + +// RegisterLightPeer injects a light client peer, wrapping it so it appears as a regular peer. +func (d *Downloader) RegisterLightPeer(id string, version uint, peer LightPeer) error { + return d.RegisterPeer(id, version, &lightPeerWrapper{peer}) +} + +// UnregisterPeer remove a peer from the known list, preventing any action from +// the specified peer. An effort is also made to return any pending fetches into +// the queue. +func (d *Downloader) UnregisterPeer(id string) error { + // Unregister the peer from the active peer set and revoke any fetch tasks + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:8]) + } + logger.Trace("Unregistering sync peer") + if err := d.peers.Unregister(id); err != nil { + logger.Error("Failed to unregister sync peer", "err", err) + return err + } + d.queue.Revoke(id) + + return nil +} + +// Synchronise tries to sync up our local block chain with a remote peer, both +// adding various sanity checks as well as wrapping it with various log entries. +func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode SyncMode) error { + err := d.synchronise(id, head, td, mode) + + switch err { + case nil, errBusy, errCanceled: + return err + } + if errors.Is(err, errInvalidChain) || errors.Is(err, errBadPeer) || errors.Is(err, errTimeout) || + errors.Is(err, errStallingPeer) || errors.Is(err, errUnsyncedPeer) || errors.Is(err, errEmptyHeaderSet) || + errors.Is(err, errPeersUnavailable) || errors.Is(err, errTooOld) || errors.Is(err, errInvalidAncestor) { + log.Warn("Synchronisation failed, dropping peer", "peer", id, "err", err) + 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 + log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", id) + } else { + d.dropPeer(id) + } + return err + } + log.Warn("Synchronisation failed, retrying", "err", err) + return err +} + +// synchronise will select the peer and use it for synchronising. If an empty string is given +// it will use the best peer possible and synchronize if its TD is higher than our own. If any of the +// checks fail an error will be returned. This method is synchronous +func (d *Downloader) synchronise(id string, hash common.Hash, td *big.Int, mode SyncMode) error { + // Mock out the synchronisation if testing + if d.synchroniseMock != nil { + return d.synchroniseMock(id, hash) + } + // Make sure only one goroutine is ever allowed past this point at once + if !atomic.CompareAndSwapInt32(&d.synchronising, 0, 1) { + return errBusy + } + defer atomic.StoreInt32(&d.synchronising, 0) + + // Post a user notification of the sync (only once per session) + if atomic.CompareAndSwapInt32(&d.notified, 0, 1) { + log.Info("Block synchronisation started") + } + // If snap sync was requested, create the snap scheduler and switch to fast + // sync mode. Long term we could drop fast sync or merge the two together, + // but until snap becomes prevalent, we should support both. TODO(karalabe). + if mode == SnapSync { + if !d.snapSync { + // Snap sync uses the snapshot namespace to store potentially flakey data until + // sync completely heals and finishes. Pause snapshot maintenance in the mean + // time to prevent access. + if snapshots := d.blockchain.Snapshots(); snapshots != nil { // Only nil in tests + snapshots.Disable() + } + log.Warn("Enabling snapshot sync prototype") + d.snapSync = true + } + mode = FastSync + } + // Reset the queue, peer set and wake channels to clean any internal leftover state + d.queue.Reset(blockCacheMaxItems, blockCacheInitialItems) + d.peers.Reset() + + for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + select { + case <-ch: + default: + } + } + for _, ch := range []chan dataPack{d.headerCh, d.bodyCh, d.receiptCh} { + for empty := false; !empty; { + select { + case <-ch: + default: + empty = true + } + } + } + for empty := false; !empty; { + select { + case <-d.headerProcCh: + default: + empty = true + } + } + // Create cancel channel for aborting mid-flight and mark the master peer + d.cancelLock.Lock() + d.cancelCh = make(chan struct{}) + d.cancelPeer = id + d.cancelLock.Unlock() + + defer d.Cancel() // No matter what, we can't leave the cancel channel open + + // Atomically set the requested sync mode + atomic.StoreUint32(&d.mode, uint32(mode)) + + // Retrieve the origin peer and initiate the downloading process + p := d.peers.Peer(id) + if p == nil { + return errUnknownPeer + } + return d.syncWithPeer(p, hash, td) +} + +func (d *Downloader) getMode() SyncMode { + return SyncMode(atomic.LoadUint32(&d.mode)) +} + +// syncWithPeer starts a block synchronization based on the hash chain from the +// specified peer and head hash. +func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.Int) (err error) { + d.mux.Post(StartEvent{}) + defer func() { + // reset on error + if err != nil { + d.mux.Post(FailedEvent{err}) + } else { + latest := d.lightchain.CurrentHeader() + d.mux.Post(DoneEvent{latest}) + } + }() + if p.version < eth.ETH66 { + return fmt.Errorf("%w: advertized %d < required %d", errTooOld, p.version, eth.ETH66) + } + mode := d.getMode() + + log.Debug("Synchronising with the network", "peer", p.id, "eth", p.version, "head", hash, "td", td, "mode", mode) + defer func(start time.Time) { + log.Debug("Synchronisation terminated", "elapsed", common.PrettyDuration(time.Since(start))) + }(time.Now()) + + // Look up the sync boundaries: the common ancestor and the target block + latest, pivot, err := d.fetchHead(p) + if err != nil { + return err + } + if mode == FastSync && pivot == nil { + // If no pivot block was returned, the head is below the min full block + // threshold (i.e. new chain). In that case we won't really fast sync + // anyway, but still need a valid pivot block to avoid some code hitting + // nil panics on an access. + pivot = d.blockchain.CurrentBlock().Header() + } + height := latest.Number.Uint64() + + origin, err := d.findAncestor(p, latest) + if err != nil { + return err + } + d.syncStatsLock.Lock() + if d.syncStatsChainHeight <= origin || d.syncStatsChainOrigin > origin { + d.syncStatsChainOrigin = origin + } + d.syncStatsChainHeight = height + d.syncStatsLock.Unlock() + + // Ensure our origin point is below any fast sync pivot point + if mode == FastSync { + if height <= uint64(fsMinFullBlocks) { + origin = 0 + } else { + pivotNumber := pivot.Number.Uint64() + if pivotNumber <= origin { + origin = pivotNumber - 1 + } + // Write out the pivot into the database so a rollback beyond it will + // reenable fast sync + rawdb.WriteLastPivotNumber(d.stateDB, pivotNumber) + } + } + d.committed = 1 + if mode == FastSync && pivot.Number.Uint64() != 0 { + d.committed = 0 + } + if 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 > fullMaxForkAncestry+1 { + d.ancientLimit = d.checkpoint + } else if height > fullMaxForkAncestry+1 { + d.ancientLimit = height - fullMaxForkAncestry - 1 + } else { + d.ancientLimit = 0 + } + 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 { + if err := d.lightchain.SetHead(origin + 1); err != nil { + return err + } + } + } + // Initiate the sync using a concurrent header and content retrieval algorithm + d.queue.Prepare(origin+1, mode) + if d.syncInitHook != nil { + d.syncInitHook(origin, height) + } + fetchers := []func() error{ + func() error { return d.fetchHeaders(p, origin+1) }, // Headers are always retrieved + func() error { return d.fetchBodies(origin + 1) }, // Bodies are retrieved during normal and fast sync + func() error { return d.fetchReceipts(origin + 1) }, // Receipts are retrieved during fast sync + func() error { return d.processHeaders(origin+1, td) }, + } + if mode == FastSync { + d.pivotLock.Lock() + d.pivotHeader = pivot + d.pivotLock.Unlock() + + fetchers = append(fetchers, func() error { return d.processFastSyncContent() }) + } else if mode == FullSync { + fetchers = append(fetchers, d.processFullSyncContent) + } + return d.spawnSync(fetchers) +} + +// spawnSync runs d.process and all given fetcher functions to completion in +// separate goroutines, returning the first error that appears. +func (d *Downloader) spawnSync(fetchers []func() error) error { + errc := make(chan error, len(fetchers)) + d.cancelWg.Add(len(fetchers)) + for _, fn := range fetchers { + fn := fn + go func() { defer d.cancelWg.Done(); errc <- fn() }() + } + // Wait for the first error, then terminate the others. + var err error + for i := 0; i < len(fetchers); i++ { + if i == len(fetchers)-1 { + // Close the queue when all fetchers have exited. + // This will cause the block processor to end when + // it has processed the queue. + d.queue.Close() + } + if err = <-errc; err != nil && err != errCanceled { + break + } + } + d.queue.Close() + d.Cancel() + return err +} + +// cancel aborts all of the operations and resets the queue. However, cancel does +// not wait for the running download goroutines to finish. This method should be +// used when cancelling the downloads from inside the downloader. +func (d *Downloader) cancel() { + // Close the current cancel channel + d.cancelLock.Lock() + defer d.cancelLock.Unlock() + + if d.cancelCh != nil { + select { + case <-d.cancelCh: + // Channel was already closed + default: + close(d.cancelCh) + } + } +} + +// Cancel aborts all of the operations and waits for all download goroutines to +// finish before returning. +func (d *Downloader) Cancel() { + d.cancel() + d.cancelWg.Wait() +} + +// Terminate interrupts the downloader, canceling all pending operations. +// The downloader cannot be reused after calling Terminate. +func (d *Downloader) Terminate() { + // Close the termination channel (make sure double close is allowed) + d.quitLock.Lock() + select { + case <-d.quitCh: + default: + close(d.quitCh) + } + d.quitLock.Unlock() + + // Cancel any pending download requests + d.Cancel() +} + +// fetchHead retrieves the head header and prior pivot block (if available) from +// a remote peer. +func (d *Downloader) fetchHead(p *peerConnection) (head *types.Header, pivot *types.Header, err error) { + p.log.Debug("Retrieving remote chain head") + mode := d.getMode() + + // Request the advertised remote head block and wait for the response + latest, _ := p.peer.Head() + fetch := 1 + if mode == FastSync { + fetch = 2 // head + pivot headers + } + go p.peer.RequestHeadersByHash(latest, fetch, fsMinFullBlocks-1, true) + + ttl := d.peers.rates.TargetTimeout() + timeout := time.After(ttl) + for { + select { + case <-d.cancelCh: + return nil, nil, errCanceled + + case packet := <-d.headerCh: + // Discard anything not from the origin peer + if packet.PeerId() != p.id { + log.Debug("Received headers from incorrect peer", "peer", packet.PeerId()) + break + } + // Make sure the peer gave us at least one and at most the requested headers + headers := packet.(*headerPack).headers + if len(headers) == 0 || len(headers) > fetch { + return nil, nil, fmt.Errorf("%w: returned headers %d != requested %d", errBadPeer, len(headers), fetch) + } + // The first header needs to be the head, validate against the checkpoint + // and request. If only 1 header was returned, make sure there's no pivot + // or there was not one requested. + head := headers[0] + if (mode == FastSync || mode == LightSync) && head.Number.Uint64() < d.checkpoint { + return nil, nil, fmt.Errorf("%w: remote head %d below checkpoint %d", errUnsyncedPeer, head.Number, d.checkpoint) + } + if len(headers) == 1 { + if mode == FastSync && head.Number.Uint64() > uint64(fsMinFullBlocks) { + return nil, nil, fmt.Errorf("%w: no pivot included along head header", errBadPeer) + } + p.log.Debug("Remote head identified, no pivot", "number", head.Number, "hash", head.Hash()) + return head, nil, nil + } + // At this point we have 2 headers in total and the first is the + // validated head of the chain. Check the pivot number and return, + pivot := headers[1] + if pivot.Number.Uint64() != head.Number.Uint64()-uint64(fsMinFullBlocks) { + return nil, nil, fmt.Errorf("%w: remote pivot %d != requested %d", errInvalidChain, pivot.Number, head.Number.Uint64()-uint64(fsMinFullBlocks)) + } + return head, pivot, nil + + case <-timeout: + p.log.Debug("Waiting for head header timed out", "elapsed", ttl) + return nil, nil, errTimeout + + case <-d.bodyCh: + case <-d.receiptCh: + // Out of bounds delivery, ignore + } + } +} + +// calculateRequestSpan calculates what headers to request from a peer when trying to determine the +// common ancestor. +// It returns parameters to be used for peer.RequestHeadersByNumber: +// from - starting block number +// count - number of headers to request +// skip - number of headers to skip +// and also returns 'max', the last block which is expected to be returned by the remote peers, +// given the (from,count,skip) +func calculateRequestSpan(remoteHeight, localHeight uint64) (int64, int, int, uint64) { + var ( + from int + count int + MaxCount = MaxHeaderFetch / 16 + ) + // requestHead is the highest block that we will ask for. If requestHead is not offset, + // the highest block that we will get is 16 blocks back from head, which means we + // will fetch 14 or 15 blocks unnecessarily in the case the height difference + // between us and the peer is 1-2 blocks, which is most common + requestHead := int(remoteHeight) - 1 + if requestHead < 0 { + requestHead = 0 + } + // requestBottom is the lowest block we want included in the query + // Ideally, we want to include the one just below our own head + requestBottom := int(localHeight - 1) + if requestBottom < 0 { + requestBottom = 0 + } + totalSpan := requestHead - requestBottom + span := 1 + totalSpan/MaxCount + if span < 2 { + span = 2 + } + if span > 16 { + span = 16 + } + + count = 1 + totalSpan/span + if count > MaxCount { + count = MaxCount + } + if count < 2 { + count = 2 + } + from = requestHead - (count-1)*span + if from < 0 { + from = 0 + } + max := from + (count-1)*span + return int64(from), count, span - 1, uint64(max) +} + +// findAncestor tries to locate the common ancestor link of the local chain and +// a remote peers blockchain. In the general case when our node was in sync and +// on the correct chain, checking the top N links should already get us a match. +// In the rare scenario when we ended up on a long reorganisation (i.e. none of +// the head links match), we do a binary search to find the common ancestor. +func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) (uint64, error) { + // Figure out the valid ancestor range to prevent rewrite attacks + var ( + floor = int64(-1) + localHeight uint64 + remoteHeight = remoteHeader.Number.Uint64() + ) + mode := d.getMode() + switch mode { + case FullSync: + localHeight = d.blockchain.CurrentBlock().NumberU64() + case FastSync: + localHeight = d.blockchain.CurrentFastBlock().NumberU64() + default: + localHeight = d.lightchain.CurrentHeader().Number.Uint64() + } + p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight) + + // Recap floor value for binary search + maxForkAncestry := fullMaxForkAncestry + if d.getMode() == LightSync { + maxForkAncestry = lightMaxForkAncestry + } + 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 mode == LightSync { + // If we don't 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 + } + } + + ancestor, err := d.findAncestorSpanSearch(p, mode, remoteHeight, localHeight, floor) + if err == nil { + return ancestor, nil + } + // The returned error was not nil. + // If the error returned does not reflect that a common ancestor was not found, return it. + // If the error reflects that a common ancestor was not found, continue to binary search, + // where the error value will be reassigned. + if !errors.Is(err, errNoAncestorFound) { + return 0, err + } + + ancestor, err = d.findAncestorBinarySearch(p, mode, remoteHeight, floor) + if err != nil { + return 0, err + } + return ancestor, nil +} + +func (d *Downloader) findAncestorSpanSearch(p *peerConnection, mode SyncMode, remoteHeight, localHeight uint64, floor int64) (commonAncestor uint64, err error) { + from, count, skip, max := calculateRequestSpan(remoteHeight, localHeight) + + p.log.Trace("Span searching for common ancestor", "count", count, "from", from, "skip", skip) + go p.peer.RequestHeadersByNumber(uint64(from), count, skip, false) + + // Wait for the remote response to the head fetch + number, hash := uint64(0), common.Hash{} + + ttl := d.peers.rates.TargetTimeout() + timeout := time.After(ttl) + + for finished := false; !finished; { + select { + case <-d.cancelCh: + return 0, errCanceled + + case packet := <-d.headerCh: + // Discard anything not from the origin peer + if packet.PeerId() != p.id { + log.Debug("Received headers from incorrect peer", "peer", packet.PeerId()) + break + } + // Make sure the peer actually gave something valid + headers := packet.(*headerPack).headers + if len(headers) == 0 { + p.log.Warn("Empty head header set") + return 0, errEmptyHeaderSet + } + // Make sure the peer's reply conforms to the request + for i, header := range headers { + 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) + return 0, fmt.Errorf("%w: %v", errInvalidChain, errors.New("head headers broke chain ordering")) + } + } + // Check if a common ancestor was found + finished = true + for i := len(headers) - 1; i >= 0; i-- { + // Skip any headers that underflow/overflow our requested set + if headers[i].Number.Int64() < from || headers[i].Number.Uint64() > max { + continue + } + // Otherwise check if we already know the header or not + h := headers[i].Hash() + n := headers[i].Number.Uint64() + + var known bool + switch mode { + case FullSync: + known = d.blockchain.HasBlock(h, n) + case FastSync: + known = d.blockchain.HasFastBlock(h, n) + default: + known = d.lightchain.HasHeader(h, n) + } + if known { + number, hash = n, h + break + } + } + + case <-timeout: + p.log.Debug("Waiting for head header timed out", "elapsed", ttl) + return 0, errTimeout + + case <-d.bodyCh: + case <-d.receiptCh: + // Out of bounds delivery, ignore + } + } + // If the head fetch already found an ancestor, return + if hash != (common.Hash{}) { + if int64(number) <= floor { + p.log.Warn("Ancestor below allowance", "number", number, "hash", hash, "allowance", floor) + return 0, errInvalidAncestor + } + p.log.Debug("Found common ancestor", "number", number, "hash", hash) + return number, nil + } + return 0, errNoAncestorFound +} + +func (d *Downloader) findAncestorBinarySearch(p *peerConnection, mode SyncMode, remoteHeight uint64, floor int64) (commonAncestor uint64, err error) { + hash := common.Hash{} + + // Ancestor not found, we need to binary search over our chain + start, end := uint64(0), remoteHeight + if floor > 0 { + start = uint64(floor) + } + p.log.Trace("Binary searching for common ancestor", "start", start, "end", end) + + for start+1 < end { + // Split our chain interval in two, and request the hash to cross check + check := (start + end) / 2 + + ttl := d.peers.rates.TargetTimeout() + timeout := time.After(ttl) + + go p.peer.RequestHeadersByNumber(check, 1, 0, false) + + // Wait until a reply arrives to this request + for arrived := false; !arrived; { + select { + case <-d.cancelCh: + return 0, errCanceled + + case packet := <-d.headerCh: + // Discard anything not from the origin peer + if packet.PeerId() != p.id { + log.Debug("Received headers from incorrect peer", "peer", packet.PeerId()) + break + } + // Make sure the peer actually gave something valid + headers := packet.(*headerPack).headers + if len(headers) != 1 { + p.log.Warn("Multiple headers for single request", "headers", len(headers)) + return 0, fmt.Errorf("%w: multiple headers (%d) for single request", errBadPeer, len(headers)) + } + arrived = true + + // Modify the search interval based on the response + h := headers[0].Hash() + n := headers[0].Number.Uint64() + + var known bool + switch mode { + case FullSync: + known = d.blockchain.HasBlock(h, n) + case FastSync: + known = d.blockchain.HasFastBlock(h, n) + default: + known = d.lightchain.HasHeader(h, n) + } + if !known { + end = check + break + } + header := d.lightchain.GetHeaderByHash(h) // Independent of sync mode, header surely exists + if header.Number.Uint64() != check { + p.log.Warn("Received non requested header", "number", header.Number, "hash", header.Hash(), "request", check) + return 0, fmt.Errorf("%w: non-requested header (%d)", errBadPeer, header.Number) + } + start = check + hash = h + + case <-timeout: + p.log.Debug("Waiting for search header timed out", "elapsed", ttl) + return 0, errTimeout + + case <-d.bodyCh: + case <-d.receiptCh: + // Out of bounds delivery, ignore + } + } + } + // Ensure valid ancestry and return + if int64(start) <= floor { + p.log.Warn("Ancestor below allowance", "number", start, "hash", hash, "allowance", floor) + return 0, errInvalidAncestor + } + p.log.Debug("Found common ancestor", "number", start, "hash", hash) + return start, nil +} + +// fetchHeaders keeps retrieving headers concurrently from the number +// requested, until no more are returned, potentially throttling on the way. To +// facilitate concurrency but still protect against malicious nodes sending bad +// headers, we construct a header chain skeleton using the "origin" peer we are +// syncing with, and fill in the missing headers using anyone else. Headers from +// other peers are only accepted if they map cleanly to the skeleton. If no one +// can fill in the skeleton - not even the origin peer - it's assumed invalid and +// the origin is dropped. +func (d *Downloader) fetchHeaders(p *peerConnection, from uint64) error { + p.log.Debug("Directing header downloads", "origin", from) + defer p.log.Debug("Header download terminated") + + // Create a timeout timer, and the associated header fetcher + skeleton := true // Skeleton assembly phase or finishing up + pivoting := false // Whether the next request is pivot verification + request := time.Now() // time of the last skeleton fetch request + timeout := time.NewTimer(0) // timer to dump a non-responsive active peer + <-timeout.C // timeout channel should be initially empty + defer timeout.Stop() + + var ttl time.Duration + getHeaders := func(from uint64) { + request = time.Now() + + ttl = d.peers.rates.TargetTimeout() + timeout.Reset(ttl) + + if skeleton { + p.log.Trace("Fetching skeleton headers", "count", MaxHeaderFetch, "from", from) + go p.peer.RequestHeadersByNumber(from+uint64(MaxHeaderFetch)-1, MaxSkeletonSize, MaxHeaderFetch-1, false) + } else { + p.log.Trace("Fetching full headers", "count", MaxHeaderFetch, "from", from) + go p.peer.RequestHeadersByNumber(from, MaxHeaderFetch, 0, false) + } + } + getNextPivot := func() { + pivoting = true + request = time.Now() + + ttl = d.peers.rates.TargetTimeout() + timeout.Reset(ttl) + + d.pivotLock.RLock() + pivot := d.pivotHeader.Number.Uint64() + d.pivotLock.RUnlock() + + p.log.Trace("Fetching next pivot header", "number", pivot+uint64(fsMinFullBlocks)) + go p.peer.RequestHeadersByNumber(pivot+uint64(fsMinFullBlocks), 2, fsMinFullBlocks-9, false) // move +64 when it's 2x64-8 deep + } + // Start pulling the header chain skeleton until all is done + ancestor := from + getHeaders(from) + + mode := d.getMode() + for { + select { + case <-d.cancelCh: + return errCanceled + + case packet := <-d.headerCh: + // Make sure the active peer is giving us the skeleton headers + if packet.PeerId() != p.id { + log.Debug("Received skeleton from incorrect peer", "peer", packet.PeerId()) + break + } + headerReqTimer.UpdateSince(request) + timeout.Stop() + + // If the pivot is being checked, move if it became stale and run the real retrieval + var pivot uint64 + + d.pivotLock.RLock() + if d.pivotHeader != nil { + pivot = d.pivotHeader.Number.Uint64() + } + d.pivotLock.RUnlock() + + if pivoting { + if packet.Items() == 2 { + // Retrieve the headers and do some sanity checks, just in case + headers := packet.(*headerPack).headers + + if have, want := headers[0].Number.Uint64(), pivot+uint64(fsMinFullBlocks); have != want { + log.Warn("Peer sent invalid next pivot", "have", have, "want", want) + return fmt.Errorf("%w: next pivot number %d != requested %d", errInvalidChain, have, want) + } + if have, want := headers[1].Number.Uint64(), pivot+2*uint64(fsMinFullBlocks)-8; have != want { + log.Warn("Peer sent invalid pivot confirmer", "have", have, "want", want) + return fmt.Errorf("%w: next pivot confirmer number %d != requested %d", errInvalidChain, have, want) + } + log.Warn("Pivot seemingly stale, moving", "old", pivot, "new", headers[0].Number) + pivot = headers[0].Number.Uint64() + + d.pivotLock.Lock() + d.pivotHeader = headers[0] + d.pivotLock.Unlock() + + // Write out the pivot into the database so a rollback beyond + // it will reenable fast sync and update the state root that + // the state syncer will be downloading. + rawdb.WriteLastPivotNumber(d.stateDB, pivot) + } + pivoting = false + getHeaders(from) + continue + } + // If the skeleton's finished, pull any remaining head headers directly from the origin + if skeleton && packet.Items() == 0 { + skeleton = false + getHeaders(from) + continue + } + // If no more headers are inbound, notify the content fetchers and return + if packet.Items() == 0 { + // Don't abort header fetches while the pivot is downloading + if atomic.LoadInt32(&d.committed) == 0 && pivot <= from { + p.log.Debug("No headers, waiting for pivot commit") + select { + case <-time.After(fsHeaderContCheck): + getHeaders(from) + continue + case <-d.cancelCh: + return errCanceled + } + } + // Pivot done (or not in fast sync) and no more headers, terminate the process + p.log.Debug("No more headers available") + select { + case d.headerProcCh <- nil: + return nil + case <-d.cancelCh: + return errCanceled + } + } + headers := packet.(*headerPack).headers + + // If we received a skeleton batch, resolve internals concurrently + if skeleton { + filled, proced, err := d.fillHeaderSkeleton(from, headers) + if err != nil { + p.log.Debug("Skeleton chain invalid", "err", err) + return fmt.Errorf("%w: %v", errInvalidChain, err) + } + headers = filled[proced:] + from += uint64(proced) + } else { + // If we're closing in on the chain head, but haven't yet reached it, delay + // the last few headers so mini reorgs on the head don't cause invalid hash + // chain errors. + if n := len(headers); n > 0 { + // Retrieve the current head we're at + var head uint64 + if mode == LightSync { + head = d.lightchain.CurrentHeader().Number.Uint64() + } else { + head = d.blockchain.CurrentFastBlock().NumberU64() + if full := d.blockchain.CurrentBlock().NumberU64(); head < full { + 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 + if delay > n { + delay = n + } + headers = headers[:n-delay] + } + } + } + // Insert all the new headers and fetch the next batch + if len(headers) > 0 { + p.log.Trace("Scheduling new headers", "count", len(headers), "from", from) + select { + case d.headerProcCh <- headers: + case <-d.cancelCh: + return errCanceled + } + from += uint64(len(headers)) + + // If we're still skeleton filling fast sync, check pivot staleness + // before continuing to the next skeleton filling + if skeleton && pivot > 0 { + getNextPivot() + } else { + getHeaders(from) + } + } else { + // No headers delivered, or all of them being delayed, sleep a bit and retry + p.log.Trace("All headers delayed, waiting") + select { + case <-time.After(fsHeaderContCheck): + getHeaders(from) + continue + case <-d.cancelCh: + return errCanceled + } + } + + case <-timeout.C: + 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 + p.log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", p.id) + break + } + // Header retrieval timed out, consider the peer bad and drop + p.log.Debug("Header request timed out", "elapsed", ttl) + headerTimeoutMeter.Mark(1) + d.dropPeer(p.id) + + // Finish the sync gracefully instead of dumping the gathered data though + for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + select { + case ch <- false: + case <-d.cancelCh: + } + } + select { + case d.headerProcCh <- nil: + case <-d.cancelCh: + } + return fmt.Errorf("%w: header request timed out", errBadPeer) + } + } +} + +// fillHeaderSkeleton concurrently retrieves headers from all our available peers +// and maps them to the provided skeleton header chain. +// +// Any partial results from the beginning of the skeleton is (if possible) forwarded +// immediately to the header processor to keep the rest of the pipeline full even +// in the case of header stalls. +// +// The method returns the entire filled skeleton and also the number of headers +// already forwarded for processing. +func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header) ([]*types.Header, int, error) { + log.Debug("Filling up skeleton", "from", from) + d.queue.ScheduleSkeleton(from, skeleton) + + var ( + deliver = func(packet dataPack) (int, error) { + pack := packet.(*headerPack) + return d.queue.DeliverHeaders(pack.peerID, pack.headers, d.headerProcCh) + } + expire = func() map[string]int { return d.queue.ExpireHeaders(d.peers.rates.TargetTimeout()) } + reserve = func(p *peerConnection, count int) (*fetchRequest, bool, bool) { + return d.queue.ReserveHeaders(p, count), false, false + } + fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchHeaders(req.From, MaxHeaderFetch) } + capacity = func(p *peerConnection) int { return p.HeaderCapacity(d.peers.rates.TargetRoundTrip()) } + setIdle = func(p *peerConnection, accepted int, deliveryTime time.Time) { + p.SetHeadersIdle(accepted, deliveryTime) + } + ) + err := d.fetchParts(d.headerCh, deliver, d.queue.headerContCh, expire, + d.queue.PendingHeaders, d.queue.InFlightHeaders, reserve, + nil, fetch, d.queue.CancelHeaders, capacity, d.peers.HeaderIdlePeers, setIdle, "headers") + + log.Debug("Skeleton fill terminated", "err", err) + + filled, proced := d.queue.RetrieveHeaders() + return filled, proced, err +} + +// fetchBodies iteratively downloads the scheduled block bodies, taking any +// available peers, reserving a chunk of blocks for each, waiting for delivery +// and also periodically checking for timeouts. +func (d *Downloader) fetchBodies(from uint64) error { + log.Debug("Downloading block bodies", "origin", from) + + var ( + deliver = func(packet dataPack) (int, error) { + pack := packet.(*bodyPack) + return d.queue.DeliverBodies(pack.peerID, pack.transactions, pack.uncles) + } + expire = func() map[string]int { return d.queue.ExpireBodies(d.peers.rates.TargetTimeout()) } + fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchBodies(req) } + capacity = func(p *peerConnection) int { return p.BlockCapacity(d.peers.rates.TargetRoundTrip()) } + setIdle = func(p *peerConnection, accepted int, deliveryTime time.Time) { p.SetBodiesIdle(accepted, deliveryTime) } + ) + err := d.fetchParts(d.bodyCh, deliver, d.bodyWakeCh, expire, + d.queue.PendingBlocks, d.queue.InFlightBlocks, d.queue.ReserveBodies, + d.bodyFetchHook, fetch, d.queue.CancelBodies, capacity, d.peers.BodyIdlePeers, setIdle, "bodies") + + log.Debug("Block body download terminated", "err", err) + return err +} + +// fetchReceipts iteratively downloads the scheduled block receipts, taking any +// available peers, reserving a chunk of receipts for each, waiting for delivery +// and also periodically checking for timeouts. +func (d *Downloader) fetchReceipts(from uint64) error { + log.Debug("Downloading transaction receipts", "origin", from) + + var ( + deliver = func(packet dataPack) (int, error) { + pack := packet.(*receiptPack) + return d.queue.DeliverReceipts(pack.peerID, pack.receipts) + } + expire = func() map[string]int { return d.queue.ExpireReceipts(d.peers.rates.TargetTimeout()) } + fetch = func(p *peerConnection, req *fetchRequest) error { return p.FetchReceipts(req) } + capacity = func(p *peerConnection) int { return p.ReceiptCapacity(d.peers.rates.TargetRoundTrip()) } + setIdle = func(p *peerConnection, accepted int, deliveryTime time.Time) { + p.SetReceiptsIdle(accepted, deliveryTime) + } + ) + err := d.fetchParts(d.receiptCh, deliver, d.receiptWakeCh, expire, + d.queue.PendingReceipts, d.queue.InFlightReceipts, d.queue.ReserveReceipts, + d.receiptFetchHook, fetch, d.queue.CancelReceipts, capacity, d.peers.ReceiptIdlePeers, setIdle, "receipts") + + log.Debug("Transaction receipt download terminated", "err", err) + return err +} + +// fetchParts iteratively downloads scheduled block parts, taking any available +// peers, reserving a chunk of fetch requests for each, waiting for delivery and +// also periodically checking for timeouts. +// +// As the scheduling/timeout logic mostly is the same for all downloaded data +// types, this method is used by each for data gathering and is instrumented with +// various callbacks to handle the slight differences between processing them. +// +// The instrumentation parameters: +// - errCancel: error type to return if the fetch operation is cancelled (mostly makes logging nicer) +// - deliveryCh: channel from which to retrieve downloaded data packets (merged from all concurrent peers) +// - deliver: processing callback to deliver data packets into type specific download queues (usually within `queue`) +// - wakeCh: notification channel for waking the fetcher when new tasks are available (or sync completed) +// - expire: task callback method to abort requests that took too long and return the faulty peers (traffic shaping) +// - pending: task callback for the number of requests still needing download (detect completion/non-completability) +// - inFlight: task callback for the number of in-progress requests (wait for all active downloads to finish) +// - throttle: task callback to check if the processing queue is full and activate throttling (bound memory use) +// - reserve: task callback to reserve new download tasks to a particular peer (also signals partial completions) +// - fetchHook: tester callback to notify of new tasks being initiated (allows testing the scheduling logic) +// - fetch: network callback to actually send a particular download request to a physical remote peer +// - cancel: task callback to abort an in-flight download request and allow rescheduling it (in case of lost peer) +// - capacity: network callback to retrieve the estimated type-specific bandwidth capacity of a peer (traffic shaping) +// - 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 messages +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, reserve func(*peerConnection, int) (*fetchRequest, bool, bool), + fetchHook func([]*types.Header), fetch func(*peerConnection, *fetchRequest) error, cancel func(*fetchRequest), capacity func(*peerConnection) int, + idle func() ([]*peerConnection, int), setIdle func(*peerConnection, int, time.Time), kind string) error { + // Create a ticker to detect expired retrieval tasks + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() + + update := make(chan struct{}, 1) + + // Prepare the queue and fetch block parts until the block header fetcher's done + finished := false + for { + select { + case <-d.cancelCh: + return errCanceled + + case packet := <-deliveryCh: + deliveryTime := time.Now() + // If the peer was previously banned and failed to deliver its pack + // in a reasonable time frame, ignore its message. + if peer := d.peers.Peer(packet.PeerId()); peer != nil { + // Deliver the received chunk of data and check chain validity + accepted, err := deliver(packet) + if errors.Is(err, errInvalidChain) { + return err + } + // Unless a peer delivered something completely else than requested (usually + // caused by a timed out request which came through in the end), set it to + // idle. If the delivery's stale, the peer should have already been idled. + if !errors.Is(err, errStaleDelivery) { + setIdle(peer, accepted, deliveryTime) + } + // Issue a log to the user to see what's going on + switch { + case err == nil && packet.Items() == 0: + peer.log.Trace("Requested data not delivered", "type", kind) + case err == nil: + peer.log.Trace("Delivered new batch of data", "type", kind, "count", packet.Stats()) + default: + peer.log.Debug("Failed to deliver retrieved data", "type", kind, "err", err) + } + } + // Blocks assembled, try to update the progress + select { + case update <- struct{}{}: + default: + } + + case cont := <-wakeCh: + // The header fetcher sent a continuation flag, check if it's done + if !cont { + finished = true + } + // Headers arrive, try to update the progress + select { + case update <- struct{}{}: + default: + } + + case <-ticker.C: + // Sanity check update the progress + select { + case update <- struct{}{}: + default: + } + + case <-update: + // Short circuit if we lost all our peers + if d.peers.Len() == 0 { + return errNoPeers + } + // Check for fetch request timeouts and demote the responsible peers + for pid, fails := range expire() { + if peer := d.peers.Peer(pid); peer != nil { + // If a lot of retrieval elements expired, we might have overestimated the remote peer or perhaps + // ourselves. Only reset to minimal throughput but don't drop just yet. If even the minimal times + // out that sync wise we need to get rid of the peer. + // + // The reason the minimum threshold is 2 is because the downloader tries to estimate the bandwidth + // and latency of a peer separately, which requires pushing the measures capacity a bit and seeing + // how response times reacts, to it always requests one more than the minimum (i.e. min 2). + if fails > 2 { + peer.log.Trace("Data delivery timed out", "type", kind) + setIdle(peer, 0, time.Now()) + } 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 + } + } + } + } + } + // If there's nothing more to fetch, wait or terminate + if pending() == 0 { + if !inFlight() && finished { + log.Debug("Data fetching completed", "type", kind) + return nil + } + break + } + // Send a download request to all idle peers, until throttled + progressed, throttled, running := false, false, inFlight() + idles, total := idle() + pendCount := pending() + for _, peer := range idles { + // Short circuit if throttling activated + if throttled { + break + } + // Short circuit if there is no more available task. + if pendCount = pending(); pendCount == 0 { + break + } + // Reserve a chunk of fetches for a peer. A nil can mean either that + // no more headers are available, or that the peer is known not to + // have them. + request, progress, throttle := reserve(peer, capacity(peer)) + if progress { + progressed = true + } + if throttle { + throttled = true + throttleCounter.Inc(1) + } + if request == nil { + continue + } + if request.From > 0 { + peer.log.Trace("Requesting new batch of data", "type", kind, "from", request.From) + } else { + peer.log.Trace("Requesting new batch of data", "type", kind, "count", len(request.Headers), "from", request.Headers[0].Number) + } + // Fetch the chunk and make sure any errors return the hashes to the queue + if fetchHook != nil { + fetchHook(request.Headers) + } + if err := fetch(peer, request); err != nil { + // Although we could try and make an attempt to fix this, this error really + // means that we've double allocated a fetch task to a peer. If that is the + // case, the internal state of the downloader and the queue is very wrong so + // better hard crash and note the error instead of silently accumulating into + // a much bigger issue. + panic(fmt.Sprintf("%v: %s fetch assignment failed", peer, kind)) + } + running = true + } + // Make sure that we have peers available for fetching. If all peers have been tried + // and all failed throw an error + if !progressed && !throttled && !running && len(idles) == total && pendCount > 0 { + return errPeersUnavailable + } + } + } +} + +// processHeaders takes batches of retrieved headers from an input channel and +// keeps processing and scheduling them into the header chain and downloader's +// queue until the stream ends or a failure occurs. +func (d *Downloader) processHeaders(origin uint64, td *big.Int) error { + // Keep a count of uncertain headers to roll back + var ( + rollback uint64 // Zero means no rollback (fine as you can't unroll the genesis) + rollbackErr error + mode = d.getMode() + ) + defer func() { + if rollback > 0 { + lastHeader, lastFastBlock, lastBlock := d.lightchain.CurrentHeader().Number, common.Big0, common.Big0 + if mode != LightSync { + lastFastBlock = d.blockchain.CurrentFastBlock().Number() + lastBlock = d.blockchain.CurrentBlock().Number() + } + if err := d.lightchain.SetHead(rollback - 1); err != nil { // -1 to target the parent of the first uncertain block + // We're already unwinding the stack, only print the error to make it more visible + log.Error("Failed to roll back chain segment", "head", rollback-1, "err", err) + } + curFastBlock, curBlock := common.Big0, common.Big0 + if mode != LightSync { + curFastBlock = d.blockchain.CurrentFastBlock().Number() + curBlock = d.blockchain.CurrentBlock().Number() + } + log.Warn("Rolled back chain segment", + "header", fmt.Sprintf("%d->%d", lastHeader, d.lightchain.CurrentHeader().Number), + "fast", fmt.Sprintf("%d->%d", lastFastBlock, curFastBlock), + "block", fmt.Sprintf("%d->%d", lastBlock, curBlock), "reason", rollbackErr) + } + }() + // Wait for batches of headers to process + gotHeaders := false + + for { + select { + case <-d.cancelCh: + rollbackErr = errCanceled + return errCanceled + + case headers := <-d.headerProcCh: + // Terminate header processing if we synced up + if len(headers) == 0 { + // Notify everyone that headers are fully processed + for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + select { + case ch <- false: + case <-d.cancelCh: + } + } + // If no headers were retrieved at all, the peer violated its TD promise that it had a + // better chain compared to ours. The only exception is if its promised blocks were + // already imported by other means (e.g. fetcher): + // + // R , L : Both at block 10 + // R: Mine block 11, and propagate it to L + // L: Queue block 11 for import + // L: Notice that R's head and TD increased compared to ours, start sync + // L: Import of block 11 finishes + // L: Sync begins, and finds common ancestor at 11 + // L: Request new headers up from 11 (R's TD was higher, it must have something) + // R: Nothing to give + if mode != LightSync { + head := d.blockchain.CurrentBlock() + if !gotHeaders && td.Cmp(d.blockchain.GetTd(head.Hash(), head.NumberU64())) > 0 { + return errStallingPeer + } + } + // If fast or light syncing, ensure promised headers are indeed delivered. This is + // needed to detect scenarios where an attacker feeds a bad pivot and then bails out + // of delivering the post-pivot blocks that would flag the invalid content. + // + // This check cannot be executed "as is" for full imports, since blocks may still be + // queued for processing when the header download completes. However, as long as the + // peer gave us something useful, we're already happy/progressed (above check). + if mode == FastSync || mode == LightSync { + head := d.lightchain.CurrentHeader() + if td.Cmp(d.lightchain.GetTd(head.Hash(), head.Number.Uint64())) > 0 { + return errStallingPeer + } + } + // Disable any rollback and return + rollback = 0 + return nil + } + // 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: + rollbackErr = errCanceled + return errCanceled + default: + } + // Select the next chunk of headers to import + limit := maxHeadersProcess + if limit > len(headers) { + limit = len(headers) + } + chunk := headers[:limit] + + // In case of header only syncing, validate the chunk immediately + if mode == FastSync || mode == LightSync { + // If we're importing pure headers, verify based on their recentness + var pivot uint64 + + d.pivotLock.RLock() + if d.pivotHeader != nil { + pivot = d.pivotHeader.Number.Uint64() + } + d.pivotLock.RUnlock() + + frequency := fsHeaderCheckFrequency + if chunk[len(chunk)-1].Number.Uint64()+uint64(fsHeaderForceVerify) > pivot { + frequency = 1 + } + if n, err := d.lightchain.InsertHeaderChain(chunk, frequency); err != nil { + rollbackErr = err + + // If some headers were inserted, track them as uncertain + if (mode == FastSync || frequency > 1) && n > 0 && rollback == 0 { + rollback = chunk[0].Number.Uint64() + } + log.Warn("Invalid header encountered", "number", chunk[n].Number, "hash", chunk[n].Hash(), "parent", chunk[n].ParentHash, "err", err) + return fmt.Errorf("%w: %v", errInvalidChain, err) + } + // All verifications passed, track all headers within the allotted limits + if mode == FastSync { + head := chunk[len(chunk)-1].Number.Uint64() + if head-rollback > uint64(fsHeaderSafetyNet) { + rollback = head - uint64(fsHeaderSafetyNet) + } else { + rollback = 1 + } + } + } + // Unless we're doing light chains, schedule the headers for associated content retrieval + if mode == FullSync || mode == FastSync { + // If we've reached the allowed number of pending headers, stall a bit + for d.queue.PendingBlocks() >= maxQueuedHeaders || d.queue.PendingReceipts() >= maxQueuedHeaders { + select { + case <-d.cancelCh: + rollbackErr = errCanceled + return errCanceled + case <-time.After(time.Second): + } + } + // Otherwise insert the headers for content retrieval + inserts := d.queue.Schedule(chunk, origin) + if len(inserts) != len(chunk) { + rollbackErr = fmt.Errorf("stale headers: len inserts %v len(chunk) %v", len(inserts), len(chunk)) + return fmt.Errorf("%w: stale headers", errBadPeer) + } + } + 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 { + d.syncStatsChainHeight = origin - 1 + } + d.syncStatsLock.Unlock() + + // Signal the content downloaders of the availability of new tasks + for _, ch := range []chan bool{d.bodyWakeCh, d.receiptWakeCh} { + select { + case ch <- true: + default: + } + } + } + } +} + +// processFullSyncContent takes fetch results from the queue and imports them into the chain. +func (d *Downloader) processFullSyncContent() error { + for { + results := d.queue.Results(true) + if len(results) == 0 { + return nil + } + if d.chainInsertHook != nil { + d.chainInsertHook(results) + } + if err := d.importBlockResults(results); err != nil { + return err + } + } +} + +func (d *Downloader) importBlockResults(results []*fetchResult) error { + // Check for any early termination requests + if len(results) == 0 { + return nil + } + select { + case <-d.quitCh: + return errCancelContentProcessing + default: + } + // Retrieve the a batch of results to import + first, last := results[0].Header, results[len(results)-1].Header + log.Debug("Inserting downloaded chain", "items", len(results), + "firstnum", first.Number, "firsthash", first.Hash(), + "lastnum", last.Number, "lasthash", last.Hash(), + ) + blocks := make([]*types.Block, len(results)) + for i, result := range results { + blocks[i] = types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles) + } + if index, err := d.blockchain.InsertChain(blocks); err != nil { + if index < len(results) { + log.Debug("Downloaded item processing failed", "number", results[index].Header.Number, "hash", results[index].Header.Hash(), "err", err) + } else { + // The InsertChain method in blockchain.go will sometimes return an out-of-bounds index, + // when it needs to preprocess blocks to import a sidechain. + // The importer will put together a new list of blocks to import, which is a superset + // of the blocks delivered from the downloader, and the indexing will be off. + log.Debug("Downloaded item processing failed on sidechain import", "index", index, "err", err) + } + return fmt.Errorf("%w: %v", errInvalidChain, err) + } + return nil +} + +// processFastSyncContent takes fetch results from the queue and writes them to the +// database. It also controls the synchronisation of state nodes of the pivot block. +func (d *Downloader) processFastSyncContent() error { + // Start syncing state of the reported head block. This should get us most of + // the state of the pivot block. + d.pivotLock.RLock() + sync := d.syncState(d.pivotHeader.Root) + d.pivotLock.RUnlock() + + defer func() { + // The `sync` object is replaced every time the pivot moves. We need to + // defer close the very last active one, hence the lazy evaluation vs. + // calling defer sync.Cancel() !!! + sync.Cancel() + }() + + closeOnErr := func(s *stateSync) { + if err := s.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled && err != snap.ErrCancelled { + d.queue.Close() // wake up Results + } + } + go closeOnErr(sync) + + // To cater for moving pivot points, track the pivot block and subsequently + // accumulated download results separately. + var ( + oldPivot *fetchResult // Locked in pivot block, might change eventually + oldTail []*fetchResult // Downloaded content after the pivot + ) + for { + // Wait for the next batch of downloaded data to be available, and if the pivot + // block became stale, move the goalpost + results := d.queue.Results(oldPivot == nil) // Block if we're not monitoring pivot staleness + if len(results) == 0 { + // If pivot sync is done, stop + if oldPivot == nil { + return sync.Cancel() + } + // If sync failed, stop + select { + case <-d.cancelCh: + sync.Cancel() + return errCanceled + default: + } + } + if d.chainInsertHook != nil { + d.chainInsertHook(results) + } + // If we haven't downloaded the pivot block yet, check pivot staleness + // notifications from the header downloader + d.pivotLock.RLock() + pivot := d.pivotHeader + d.pivotLock.RUnlock() + + if oldPivot == nil { + if pivot.Root != sync.root { + sync.Cancel() + sync = d.syncState(pivot.Root) + + go closeOnErr(sync) + } + } else { + results = append(append([]*fetchResult{oldPivot}, oldTail...), results...) + } + // Split around the pivot block and process the two sides via fast/full sync + if atomic.LoadInt32(&d.committed) == 0 { + latest := results[len(results)-1].Header + // If the height is above the pivot block by 2 sets, it means the pivot + // become stale in the network and it was garbage collected, move to a + // new pivot. + // + // Note, we have `reorgProtHeaderDelay` number of blocks withheld, Those + // need to be taken into account, otherwise we're detecting the pivot move + // late and will drop peers due to unavailable state!!! + if height := latest.Number.Uint64(); height >= pivot.Number.Uint64()+2*uint64(fsMinFullBlocks)-uint64(reorgProtHeaderDelay) { + log.Warn("Pivot became stale, moving", "old", pivot.Number.Uint64(), "new", height-uint64(fsMinFullBlocks)+uint64(reorgProtHeaderDelay)) + pivot = results[len(results)-1-fsMinFullBlocks+reorgProtHeaderDelay].Header // must exist as lower old pivot is uncommitted + + d.pivotLock.Lock() + d.pivotHeader = pivot + d.pivotLock.Unlock() + + // Write out the pivot into the database so a rollback beyond it will + // reenable fast sync + rawdb.WriteLastPivotNumber(d.stateDB, pivot.Number.Uint64()) + } + } + P, beforeP, afterP := splitAroundPivot(pivot.Number.Uint64(), results) + if err := d.commitFastSyncData(beforeP, sync); err != nil { + return err + } + if P != nil { + // If new pivot block found, cancel old state retrieval and restart + if oldPivot != P { + sync.Cancel() + sync = d.syncState(P.Header.Root) + + go closeOnErr(sync) + oldPivot = P + } + // Wait for completion, occasionally checking for pivot staleness + select { + case <-sync.done: + if sync.err != nil { + return sync.err + } + if err := d.commitPivotBlock(P); err != nil { + return err + } + oldPivot = nil + + case <-time.After(time.Second): + oldTail = afterP + continue + } + } + // Fast sync done, pivot commit done, full import + if err := d.importBlockResults(afterP); err != nil { + return err + } + } +} + +func splitAroundPivot(pivot uint64, results []*fetchResult) (p *fetchResult, before, after []*fetchResult) { + if len(results) == 0 { + return nil, nil, nil + } + if lastNum := results[len(results)-1].Header.Number.Uint64(); lastNum < pivot { + // the pivot is somewhere in the future + return nil, results, nil + } + // This can also be optimized, but only happens very seldom + for _, result := range results { + num := result.Header.Number.Uint64() + switch { + case num < pivot: + before = append(before, result) + case num == pivot: + p = result + default: + after = append(after, result) + } + } + return p, before, after +} + +func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *stateSync) error { + // Check for any early termination requests + if len(results) == 0 { + return nil + } + select { + case <-d.quitCh: + return errCancelContentProcessing + case <-stateSync.done: + if err := stateSync.Wait(); err != nil { + return err + } + default: + } + // Retrieve the a batch of results to import + first, last := results[0].Header, results[len(results)-1].Header + log.Debug("Inserting fast-sync blocks", "items", len(results), + "firstnum", first.Number, "firsthash", first.Hash(), + "lastnumn", last.Number, "lasthash", last.Hash(), + ) + blocks := make([]*types.Block, len(results)) + receipts := make([]types.Receipts, len(results)) + for i, result := range results { + blocks[i] = types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles) + receipts[i] = result.Receipts + } + 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 fmt.Errorf("%w: %v", errInvalidChain, err) + } + return nil +} + +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()) + + // 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) + return nil +} + +// DeliverHeaders injects a new batch of block headers received from a remote +// node into the download schedule. +func (d *Downloader) DeliverHeaders(id string, headers []*types.Header) error { + return d.deliver(d.headerCh, &headerPack{id, headers}, headerInMeter, headerDropMeter) +} + +// DeliverBodies injects a new batch of block bodies received from a remote node. +func (d *Downloader) DeliverBodies(id string, transactions [][]*types.Transaction, uncles [][]*types.Header) error { + return d.deliver(d.bodyCh, &bodyPack{id, transactions, uncles}, bodyInMeter, bodyDropMeter) +} + +// DeliverReceipts injects a new batch of receipts received from a remote node. +func (d *Downloader) DeliverReceipts(id string, receipts [][]*types.Receipt) error { + return d.deliver(d.receiptCh, &receiptPack{id, receipts}, receiptInMeter, receiptDropMeter) +} + +// DeliverNodeData injects a new batch of node state data received from a remote node. +func (d *Downloader) DeliverNodeData(id string, data [][]byte) error { + return d.deliver(d.stateCh, &statePack{id, data}, stateInMeter, stateDropMeter) +} + +// DeliverSnapPacket is invoked from a peer's message handler when it transmits a +// data packet for the local node to consume. +func (d *Downloader) DeliverSnapPacket(peer *snap.Peer, packet snap.Packet) error { + switch packet := packet.(type) { + case *snap.AccountRangePacket: + hashes, accounts, err := packet.Unpack() + if err != nil { + return err + } + return d.SnapSyncer.OnAccounts(peer, packet.ID, hashes, accounts, packet.Proof) + + case *snap.StorageRangesPacket: + hashset, slotset := packet.Unpack() + return d.SnapSyncer.OnStorage(peer, packet.ID, hashset, slotset, packet.Proof) + + case *snap.ByteCodesPacket: + return d.SnapSyncer.OnByteCodes(peer, packet.ID, packet.Codes) + + case *snap.TrieNodesPacket: + return d.SnapSyncer.OnTrieNodes(peer, packet.ID, packet.Nodes) + + default: + return fmt.Errorf("unexpected snap packet type: %T", packet) + } +} + +// deliver injects a new batch of data received from a remote node. +func (d *Downloader) deliver(destCh chan dataPack, packet dataPack, inMeter, dropMeter metrics.Meter) (err error) { + // Update the delivery metrics for both good and failed deliveries + inMeter.Mark(int64(packet.Items())) + defer func() { + if err != nil { + dropMeter.Mark(int64(packet.Items())) + } + }() + // Deliver or abort if the sync is canceled while queuing + d.cancelLock.RLock() + cancel := d.cancelCh + d.cancelLock.RUnlock() + if cancel == nil { + return errNoSyncActive + } + select { + case destCh <- packet: + return nil + case <-cancel: + return errNoSyncActive + } +} diff --git a/les/downloader/downloader_test.go b/les/downloader/downloader_test.go new file mode 100644 index 00000000..c56870ff --- /dev/null +++ b/les/downloader/downloader_test.go @@ -0,0 +1,1621 @@ +// 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 downloader + +import ( + "errors" + "fmt" + "math/big" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/trie" +) + +// Reduce some of the parameters to make the tester faster. +func init() { + fullMaxForkAncestry = 10000 + lightMaxForkAncestry = 10000 + blockCacheMaxItems = 1024 + fsHeaderContCheck = 500 * time.Millisecond +} + +// downloadTester is a test simulator for mocking out local block chain. +type downloadTester struct { + downloader *Downloader + + genesis *types.Block // Genesis blocks used by the tester and peers + stateDb ethdb.Database // Database used by the tester for syncing from peers + peerDb ethdb.Database // Database of the peers containing all data + peers map[string]*downloadTesterPeer + + ownHashes []common.Hash // Hash chain belonging to the tester + ownHeaders map[common.Hash]*types.Header // Headers belonging to the tester + ownBlocks map[common.Hash]*types.Block // Blocks belonging to the tester + 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 +} + +// newTester creates a new downloader test mocker. +func newTester() *downloadTester { + tester := &downloadTester{ + genesis: testGenesis, + peerDb: testDB, + peers: make(map[string]*downloadTesterPeer), + ownHashes: []common.Hash{testGenesis.Hash()}, + ownHeaders: map[common.Hash]*types.Header{testGenesis.Hash(): testGenesis.Header()}, + 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 = rawdb.NewMemoryDatabase() + tester.stateDb.Put(testGenesis.Root().Bytes(), []byte{0x00}) + + tester.downloader = New(0, tester.stateDb, new(event.TypeMux), tester, nil, tester.dropPeer) + return tester +} + +// terminate aborts any operations on the embedded downloader and releases all +// held resources. +func (dl *downloadTester) terminate() { + dl.downloader.Terminate() +} + +// sync starts synchronizing with a remote peer, blocking until it completes. +func (dl *downloadTester) sync(id string, td *big.Int, mode SyncMode) error { + dl.lock.RLock() + hash := dl.peers[id].chain.headBlock().Hash() + // If no particular TD was requested, load from the peer's blockchain + if td == nil { + td = dl.peers[id].chain.td(hash) + } + dl.lock.RUnlock() + + // Synchronise with the chosen peer and ensure proper cleanup afterwards + err := dl.downloader.synchronise(id, hash, td, mode) + select { + case <-dl.downloader.cancelCh: + // Ok, downloader fully cancelled after sync cycle + default: + // Downloader is still accepting packets, can block a peer up + panic("downloader active post sync cycle") // panic will be caught by tester + } + return err +} + +// HasHeader checks if a header is present in the testers canonical chain. +func (dl *downloadTester) HasHeader(hash common.Hash, number uint64) bool { + return dl.GetHeaderByHash(hash) != nil +} + +// HasBlock checks if a block is present in the testers canonical chain. +func (dl *downloadTester) HasBlock(hash common.Hash, number uint64) bool { + return dl.GetBlockByHash(hash) != nil +} + +// HasFastBlock checks if a block is present in the testers canonical chain. +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 +} + +// GetHeader retrieves a header from the testers canonical chain. +func (dl *downloadTester) GetHeaderByHash(hash common.Hash) *types.Header { + dl.lock.RLock() + defer dl.lock.RUnlock() + return dl.getHeaderByHash(hash) +} + +// getHeaderByHash returns the header if found either within ancients or own blocks) +// This method assumes that the caller holds at least the read-lock (dl.lock) +func (dl *downloadTester) getHeaderByHash(hash common.Hash) *types.Header { + header := dl.ancientHeaders[hash] + if header != nil { + return header + } + return dl.ownHeaders[hash] +} + +// GetBlock retrieves a block from the testers canonical chain. +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] +} + +// CurrentHeader retrieves the current head header from the canonical chain. +func (dl *downloadTester) CurrentHeader() *types.Header { + dl.lock.RLock() + 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 + } + } + return dl.genesis.Header() +} + +// CurrentBlock retrieves the current head block from the canonical chain. +func (dl *downloadTester) CurrentBlock() *types.Block { + dl.lock.RLock() + 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 + } + } + } + return dl.genesis +} + +// CurrentFastBlock retrieves the current head fast-sync block from the canonical chain. +func (dl *downloadTester) CurrentFastBlock() *types.Block { + dl.lock.RLock() + 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 + } + } + return dl.genesis +} + +// FastSyncCommitHead manually sets the head block to a given hash. +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.NewStateTrie(common.Hash{}, block.Root(), trie.NewDatabase(dl.stateDb)) + return err + } + return fmt.Errorf("non existent block: %x", hash[:4]) +} + +// GetTd retrieves the block's total difficulty from the canonical chain. +func (dl *downloadTester) GetTd(hash common.Hash, number uint64) *big.Int { + dl.lock.RLock() + defer dl.lock.RUnlock() + + return dl.getTd(hash) +} + +// getTd retrieves the block's total difficulty if found either within +// ancients or own blocks). +// This method assumes that the caller holds at least the read-lock (dl.lock) +func (dl *downloadTester) getTd(hash common.Hash) *big.Int { + if td := dl.ancientChainTd[hash]; td != nil { + return td + } + return dl.ownChainTd[hash] +} + +// InsertHeaderChain injects a new batch of headers into the simulated chain. +func (dl *downloadTester) InsertHeaderChain(headers []*types.Header, checkFreq int) (i int, err error) { + dl.lock.Lock() + defer dl.lock.Unlock() + // Do a quick check, as the blockchain.InsertHeaderChain doesn't insert anything in case of errors + if dl.getHeaderByHash(headers[0].ParentHash) == nil { + return 0, fmt.Errorf("InsertHeaderChain: unknown parent at first position, parent of number %d", headers[0].Number) + } + var hashes []common.Hash + for i := 1; i < len(headers); i++ { + hash := headers[i-1].Hash() + if headers[i].ParentHash != headers[i-1].Hash() { + return i, fmt.Errorf("non-contiguous import at position %d", i) + } + hashes = append(hashes, hash) + } + hashes = append(hashes, headers[len(headers)-1].Hash()) + // Do a full insert if pre-checks passed + for i, header := range headers { + hash := hashes[i] + if dl.getHeaderByHash(hash) != nil { + continue + } + if dl.getHeaderByHash(header.ParentHash) == nil { + // This _should_ be impossible, due to precheck and induction + return i, fmt.Errorf("InsertHeaderChain: unknown parent at position %d", i) + } + dl.ownHashes = append(dl.ownHashes, hash) + dl.ownHeaders[hash] = header + + td := dl.getTd(header.ParentHash) + dl.ownChainTd[hash] = new(big.Int).Add(td, header.Difficulty) + } + return len(headers), nil +} + +// InsertChain injects a new batch of blocks into the simulated chain. +func (dl *downloadTester) InsertChain(blocks types.Blocks) (i int, err error) { + dl.lock.Lock() + defer dl.lock.Unlock() + for i, block := range blocks { + if parent, ok := dl.ownBlocks[block.ParentHash()]; !ok { + return i, fmt.Errorf("InsertChain: unknown parent at position %d / %d", i, len(blocks)) + } else if _, err := dl.stateDb.Get(parent.Root().Bytes()); err != nil { + return i, fmt.Errorf("InsertChain: unknown parent state %x: %v", parent.Root(), err) + } + if hdr := dl.getHeaderByHash(block.Hash()); hdr == nil { + dl.ownHashes = append(dl.ownHashes, block.Hash()) + dl.ownHeaders[block.Hash()] = block.Header() + } + dl.ownBlocks[block.Hash()] = block + dl.ownReceipts[block.Hash()] = make(types.Receipts, 0) + dl.stateDb.Put(block.Root().Bytes(), []byte{0x00}) + td := dl.getTd(block.ParentHash()) + dl.ownChainTd[block.Hash()] = new(big.Int).Add(td, block.Difficulty()) + } + return len(blocks), nil +} + +// InsertReceiptChain injects a new batch of receipts into the simulated chain. +func (dl *downloadTester) InsertReceiptChain(blocks types.Blocks, receipts []types.Receipts, ancientLimit uint64) (i int, err error) { + dl.lock.Lock() + defer dl.lock.Unlock() + + for i := 0; i < len(blocks) && i < len(receipts); i++ { + if _, ok := dl.ownHeaders[blocks[i].Hash()]; !ok { + return i, errors.New("unknown owner") + } + if _, ok := dl.ancientBlocks[blocks[i].ParentHash()]; !ok { + if _, ok := dl.ownBlocks[blocks[i].ParentHash()]; !ok { + return i, errors.New("InsertReceiptChain: 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] + } + } + return len(blocks), nil +} + +// SetHead rewinds the local chain to a new head. +func (dl *downloadTester) SetHead(head uint64) error { + dl.lock.Lock() + defer dl.lock.Unlock() + + // Find the hash of the head to reset to + var hash common.Hash + for h, header := range dl.ownHeaders { + if header.Number.Uint64() == head { + hash = h + } + } + for h, header := range dl.ancientHeaders { + if header.Number.Uint64() == head { + hash = h + } + } + if hash == (common.Hash{}) { + return fmt.Errorf("unknown head to set: %d", head) + } + // Find the offset in the header chain + var offset int + for o, h := range dl.ownHashes { + if h == hash { + offset = o + break + } + } + // Remove all the hashes and associated data afterwards + for i := offset + 1; i < len(dl.ownHashes); i++ { + delete(dl.ownChainTd, dl.ownHashes[i]) + delete(dl.ownHeaders, dl.ownHashes[i]) + delete(dl.ownReceipts, dl.ownHashes[i]) + delete(dl.ownBlocks, dl.ownHashes[i]) + + delete(dl.ancientChainTd, dl.ownHashes[i]) + delete(dl.ancientHeaders, dl.ownHashes[i]) + delete(dl.ancientReceipts, dl.ownHashes[i]) + delete(dl.ancientBlocks, dl.ownHashes[i]) + } + dl.ownHashes = dl.ownHashes[:offset+1] + return nil +} + +// Rollback removes some recently added elements from the chain. +func (dl *downloadTester) Rollback(hashes []common.Hash) { +} + +// newPeer registers a new block download source into the downloader. +func (dl *downloadTester) newPeer(id string, version uint, chain *testChain) error { + dl.lock.Lock() + defer dl.lock.Unlock() + + peer := &downloadTesterPeer{dl: dl, id: id, chain: chain} + dl.peers[id] = peer + return dl.downloader.RegisterPeer(id, version, peer) +} + +// dropPeer simulates a hard peer removal from the connection pool. +func (dl *downloadTester) dropPeer(id string) { + dl.lock.Lock() + defer dl.lock.Unlock() + + delete(dl.peers, id) + dl.downloader.UnregisterPeer(id) +} + +// Snapshots implements the BlockChain interface for the downloader, but is a noop. +func (dl *downloadTester) Snapshots() *snapshot.Tree { + return nil +} + +type downloadTesterPeer struct { + dl *downloadTester + id string + chain *testChain + missingStates map[common.Hash]bool // State entries that fast sync should not return +} + +// Head constructs a function to retrieve a peer's current head hash +// and total difficulty. +func (dlp *downloadTesterPeer) Head() (common.Hash, *big.Int) { + b := dlp.chain.headBlock() + return b.Hash(), dlp.chain.td(b.Hash()) +} + +// RequestHeadersByHash constructs a GetBlockHeaders function based on a hashed +// origin; associated with a particular peer in the download tester. The returned +// function can be used to retrieve batches of headers from the particular peer. +func (dlp *downloadTesterPeer) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool) error { + result := dlp.chain.headersByHash(origin, amount, skip, reverse) + go dlp.dl.downloader.DeliverHeaders(dlp.id, result) + return nil +} + +// RequestHeadersByNumber constructs a GetBlockHeaders function based on a numbered +// origin; associated with a particular peer in the download tester. The returned +// function can be used to retrieve batches of headers from the particular peer. +func (dlp *downloadTesterPeer) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool) error { + result := dlp.chain.headersByNumber(origin, amount, skip, reverse) + go dlp.dl.downloader.DeliverHeaders(dlp.id, result) + return nil +} + +// RequestBodies constructs a getBlockBodies method associated with a particular +// peer in the download tester. The returned function can be used to retrieve +// batches of block bodies from the particularly requested peer. +func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash) error { + txs, uncles := dlp.chain.bodies(hashes) + go dlp.dl.downloader.DeliverBodies(dlp.id, txs, uncles) + return nil +} + +// RequestReceipts constructs a getReceipts method associated with a particular +// peer in the download tester. The returned function can be used to retrieve +// batches of block receipts from the particularly requested peer. +func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash) error { + receipts := dlp.chain.receipts(hashes) + go dlp.dl.downloader.DeliverReceipts(dlp.id, receipts) + return nil +} + +// RequestNodeData constructs a getNodeData method associated with a particular +// peer in the download tester. The returned function can be used to retrieve +// batches of node state data from the particularly requested peer. +func (dlp *downloadTesterPeer) RequestNodeData(hashes []common.Hash) error { + dlp.dl.lock.RLock() + defer dlp.dl.lock.RUnlock() + + results := make([][]byte, 0, len(hashes)) + for _, hash := range hashes { + if data, err := dlp.dl.peerDb.Get(hash.Bytes()); err == nil { + if !dlp.missingStates[hash] { + results = append(results, data) + } + } + } + go dlp.dl.downloader.DeliverNodeData(dlp.id, results) + return nil +} + +// assertOwnChain checks if the local chain contains the correct number of items +// of the various chain components. +func assertOwnChain(t *testing.T, tester *downloadTester, length int) { + // Mark this method as a helper to report errors at callsite, not in here + t.Helper() + + assertOwnForkedChain(t, tester, 1, []int{length}) +} + +// assertOwnForkedChain checks if the local forked chain contains the correct +// number of items of the various chain components. +func assertOwnForkedChain(t *testing.T, tester *downloadTester, common int, lengths []int) { + // Mark this method as a helper to report errors at callsite, not in here + t.Helper() + + // Initialize the counters for the first fork + headers, blocks, receipts := lengths[0], lengths[0], lengths[0] + + // Update the counters for each subsequent fork + for _, length := range lengths[1:] { + headers += length - common + blocks += length - common + receipts += length - common + } + if tester.downloader.getMode() == LightSync { + blocks, receipts = 1, 1 + } + 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) + len(tester.ancientBlocks) - 1; bs != blocks { + t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, blocks) + } + if rs := len(tester.ownReceipts) + len(tester.ancientReceipts) - 1; rs != receipts { + t.Fatalf("synchronised receipts mismatch: have %v, want %v", rs, receipts) + } +} + +func TestCanonicalSynchronisation66Full(t *testing.T) { testCanonSync(t, eth.ETH66, FullSync) } +func TestCanonicalSynchronisation66Fast(t *testing.T) { testCanonSync(t, eth.ETH66, FastSync) } +func TestCanonicalSynchronisation66Light(t *testing.T) { testCanonSync(t, eth.ETH66, LightSync) } + +func testCanonSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + // Create a small enough block chain to download + chain := testChainBase.shorten(blockCacheMaxItems - 15) + tester.newPeer("peer", protocol, chain) + + // Synchronise with the peer and make sure all relevant data was retrieved + if err := tester.sync("peer", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) +} + +// Tests that if a large batch of blocks are being downloaded, it is throttled +// until the cached blocks are retrieved. +func TestThrottling66Full(t *testing.T) { testThrottling(t, eth.ETH66, FullSync) } +func TestThrottling66Fast(t *testing.T) { testThrottling(t, eth.ETH66, FastSync) } + +func testThrottling(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + tester := newTester() + + // Create a long block chain to download and the tester + targetBlocks := testChainBase.len() - 1 + tester.newPeer("peer", protocol, testChainBase) + + // Wrap the importer to allow stepping + blocked, proceed := uint32(0), make(chan struct{}) + tester.downloader.chainInsertHook = func(results []*fetchResult) { + atomic.StoreUint32(&blocked, uint32(len(results))) + <-proceed + } + // Start a synchronisation concurrently + errc := make(chan error, 1) + go func() { + errc <- tester.sync("peer", nil, mode) + }() + // Iteratively take some blocks, always checking the retrieval count + for { + // Check the retrieval count synchronously (! reason for this ugly block) + tester.lock.RLock() + retrieved := len(tester.ownBlocks) + tester.lock.RUnlock() + if retrieved >= targetBlocks+1 { + break + } + // Wait a bit for sync to throttle itself + var cached, frozen int + for start := time.Now(); time.Since(start) < 3*time.Second; { + time.Sleep(25 * time.Millisecond) + + tester.lock.Lock() + tester.downloader.queue.lock.Lock() + tester.downloader.queue.resultCache.lock.Lock() + { + cached = tester.downloader.queue.resultCache.countCompleted() + frozen = int(atomic.LoadUint32(&blocked)) + retrieved = len(tester.ownBlocks) + } + tester.downloader.queue.resultCache.lock.Unlock() + tester.downloader.queue.lock.Unlock() + tester.lock.Unlock() + + if cached == blockCacheMaxItems || + cached == blockCacheMaxItems-reorgProtHeaderDelay || + retrieved+cached+frozen == targetBlocks+1 || + retrieved+cached+frozen == targetBlocks+1-reorgProtHeaderDelay { + break + } + } + // Make sure we filled up the cache, then exhaust it + time.Sleep(25 * time.Millisecond) // give it a chance to screw up + tester.lock.RLock() + retrieved = len(tester.ownBlocks) + tester.lock.RUnlock() + if cached != blockCacheMaxItems && cached != blockCacheMaxItems-reorgProtHeaderDelay && retrieved+cached+frozen != targetBlocks+1 && retrieved+cached+frozen != targetBlocks+1-reorgProtHeaderDelay { + t.Fatalf("block count mismatch: have %v, want %v (owned %v, blocked %v, target %v)", cached, blockCacheMaxItems, retrieved, frozen, targetBlocks+1) + } + + // Permit the blocked blocks to import + if atomic.LoadUint32(&blocked) > 0 { + atomic.StoreUint32(&blocked, uint32(0)) + proceed <- struct{}{} + } + } + // Check that we haven't pulled more blocks than available + assertOwnChain(t, tester, targetBlocks+1) + if err := <-errc; err != nil { + t.Fatalf("block synchronization failed: %v", err) + } + tester.terminate() +} + +// Tests that simple synchronization against a forked chain works correctly. In +// this test common ancestor lookup should *not* be short circuited, and a full +// binary search should be executed. +func TestForkedSync66Full(t *testing.T) { testForkedSync(t, eth.ETH66, FullSync) } +func TestForkedSync66Fast(t *testing.T) { testForkedSync(t, eth.ETH66, FastSync) } +func TestForkedSync66Light(t *testing.T) { testForkedSync(t, eth.ETH66, LightSync) } + +func testForkedSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chainA := testChainForkLightA.shorten(testChainBase.len() + 80) + chainB := testChainForkLightB.shorten(testChainBase.len() + 80) + tester.newPeer("fork A", protocol, chainA) + tester.newPeer("fork B", protocol, chainB) + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("fork A", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chainA.len()) + + // Synchronise with the second peer and make sure that fork is pulled too + if err := tester.sync("fork B", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnForkedChain(t, tester, testChainBase.len(), []int{chainA.len(), chainB.len()}) +} + +// Tests that synchronising against a much shorter but much heavier fork works +// correctly and is not dropped. +func TestHeavyForkedSync66Full(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, FullSync) } +func TestHeavyForkedSync66Fast(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, FastSync) } +func TestHeavyForkedSync66Light(t *testing.T) { testHeavyForkedSync(t, eth.ETH66, LightSync) } + +func testHeavyForkedSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chainA := testChainForkLightA.shorten(testChainBase.len() + 80) + chainB := testChainForkHeavy.shorten(testChainBase.len() + 80) + tester.newPeer("light", protocol, chainA) + tester.newPeer("heavy", protocol, chainB) + + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("light", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chainA.len()) + + // Synchronise with the second peer and make sure that fork is pulled too + if err := tester.sync("heavy", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnForkedChain(t, tester, testChainBase.len(), []int{chainA.len(), chainB.len()}) +} + +// Tests that chain forks are contained within a certain interval of the current +// chain head, ensuring that malicious peers cannot waste resources by feeding +// long dead chains. +func TestBoundedForkedSync66Full(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, FullSync) } +func TestBoundedForkedSync66Fast(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, FastSync) } +func TestBoundedForkedSync66Light(t *testing.T) { testBoundedForkedSync(t, eth.ETH66, LightSync) } + +func testBoundedForkedSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chainA := testChainForkLightA + chainB := testChainForkLightB + tester.newPeer("original", protocol, chainA) + tester.newPeer("rewriter", protocol, chainB) + + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("original", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chainA.len()) + + // Synchronise with the second peer and ensure that the fork is rejected to being too old + if err := tester.sync("rewriter", nil, mode); err != errInvalidAncestor { + t.Fatalf("sync failure mismatch: have %v, want %v", err, errInvalidAncestor) + } +} + +// Tests that chain forks are contained within a certain interval of the current +// chain head for short but heavy forks too. These are a bit special because they +// take different ancestor lookup paths. +func TestBoundedHeavyForkedSync66Full(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, FullSync) +} +func TestBoundedHeavyForkedSync66Fast(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, FastSync) +} +func TestBoundedHeavyForkedSync66Light(t *testing.T) { + testBoundedHeavyForkedSync(t, eth.ETH66, LightSync) +} + +func testBoundedHeavyForkedSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + tester := newTester() + + // Create a long enough forked chain + chainA := testChainForkLightA + chainB := testChainForkHeavy + tester.newPeer("original", protocol, chainA) + + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("original", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chainA.len()) + + tester.newPeer("heavy-rewriter", protocol, chainB) + // Synchronise with the second peer and ensure that the fork is rejected to being too old + if err := tester.sync("heavy-rewriter", nil, mode); err != errInvalidAncestor { + t.Fatalf("sync failure mismatch: have %v, want %v", err, errInvalidAncestor) + } + tester.terminate() +} + +// Tests that an inactive downloader will not accept incoming block headers, +// bodies and receipts. +func TestInactiveDownloader63(t *testing.T) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + // Check that neither block headers nor bodies are accepted + if err := tester.downloader.DeliverHeaders("bad peer", []*types.Header{}); err != errNoSyncActive { + t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) + } + if err := tester.downloader.DeliverBodies("bad peer", [][]*types.Transaction{}, [][]*types.Header{}); err != errNoSyncActive { + t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) + } + if err := tester.downloader.DeliverReceipts("bad peer", [][]*types.Receipt{}); err != errNoSyncActive { + t.Errorf("error mismatch: have %v, want %v", err, errNoSyncActive) + } +} + +// Tests that a canceled download wipes all previously accumulated state. +func TestCancel66Full(t *testing.T) { testCancel(t, eth.ETH66, FullSync) } +func TestCancel66Fast(t *testing.T) { testCancel(t, eth.ETH66, FastSync) } +func TestCancel66Light(t *testing.T) { testCancel(t, eth.ETH66, LightSync) } + +func testCancel(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chain := testChainBase.shorten(MaxHeaderFetch) + tester.newPeer("peer", protocol, chain) + + // Make sure canceling works with a pristine downloader + tester.downloader.Cancel() + if !tester.downloader.queue.Idle() { + t.Errorf("download queue not idle") + } + // Synchronise with the peer, but cancel afterwards + if err := tester.sync("peer", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + tester.downloader.Cancel() + if !tester.downloader.queue.Idle() { + t.Errorf("download queue not idle") + } +} + +// Tests that synchronisation from multiple peers works as intended (multi thread sanity test). +func TestMultiSynchronisation66Full(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, FullSync) } +func TestMultiSynchronisation66Fast(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, FastSync) } +func TestMultiSynchronisation66Light(t *testing.T) { testMultiSynchronisation(t, eth.ETH66, LightSync) } + +func testMultiSynchronisation(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + // Create various peers with various parts of the chain + targetPeers := 8 + chain := testChainBase.shorten(targetPeers * 100) + + for i := 0; i < targetPeers; i++ { + id := fmt.Sprintf("peer #%d", i) + tester.newPeer(id, protocol, chain.shorten(chain.len()/(i+1))) + } + if err := tester.sync("peer #0", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) +} + +// Tests that synchronisations behave well in multi-version protocol environments +// and not wreak havoc on other nodes in the network. +func TestMultiProtoSynchronisation66Full(t *testing.T) { testMultiProtoSync(t, eth.ETH66, FullSync) } +func TestMultiProtoSynchronisation66Fast(t *testing.T) { testMultiProtoSync(t, eth.ETH66, FastSync) } +func TestMultiProtoSynchronisation66Light(t *testing.T) { testMultiProtoSync(t, eth.ETH66, LightSync) } + +func testMultiProtoSync(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + // Create a small enough block chain to download + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + // Create peers of every type + tester.newPeer("peer 66", eth.ETH66, chain) + //tester.newPeer("peer 65", eth.ETH67, chain) + + // Synchronise with the requested peer and make sure all blocks were retrieved + if err := tester.sync(fmt.Sprintf("peer %d", protocol), nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) + + // Check that no peers have been dropped off + for _, version := range []int{66} { + peer := fmt.Sprintf("peer %d", version) + if _, ok := tester.peers[peer]; !ok { + t.Errorf("%s dropped", peer) + } + } +} + +// Tests that if a block is empty (e.g. header only), no body request should be +// made, and instead the header should be assembled into a whole block in itself. +func TestEmptyShortCircuit66Full(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, FullSync) } +func TestEmptyShortCircuit66Fast(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, FastSync) } +func TestEmptyShortCircuit66Light(t *testing.T) { testEmptyShortCircuit(t, eth.ETH66, LightSync) } + +func testEmptyShortCircuit(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + // Create a block chain to download + chain := testChainBase + tester.newPeer("peer", protocol, chain) + + // Instrument the downloader to signal body requests + bodiesHave, receiptsHave := int32(0), int32(0) + tester.downloader.bodyFetchHook = func(headers []*types.Header) { + atomic.AddInt32(&bodiesHave, int32(len(headers))) + } + tester.downloader.receiptFetchHook = func(headers []*types.Header) { + atomic.AddInt32(&receiptsHave, int32(len(headers))) + } + // Synchronise with the peer and make sure all blocks were retrieved + if err := tester.sync("peer", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) + + // Validate the number of block bodies that should have been requested + bodiesNeeded, receiptsNeeded := 0, 0 + for _, block := range chain.blockm { + if mode != LightSync && block != tester.genesis && (len(block.Transactions()) > 0 || len(block.Uncles()) > 0) { + bodiesNeeded++ + } + } + for _, receipt := range chain.receiptm { + if mode == FastSync && len(receipt) > 0 { + receiptsNeeded++ + } + } + if int(bodiesHave) != bodiesNeeded { + t.Errorf("body retrieval count mismatch: have %v, want %v", bodiesHave, bodiesNeeded) + } + if int(receiptsHave) != receiptsNeeded { + t.Errorf("receipt retrieval count mismatch: have %v, want %v", receiptsHave, receiptsNeeded) + } +} + +// Tests that headers are enqueued continuously, preventing malicious nodes from +// stalling the downloader by feeding gapped header chains. +func TestMissingHeaderAttack66Full(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, FullSync) } +func TestMissingHeaderAttack66Fast(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, FastSync) } +func TestMissingHeaderAttack66Light(t *testing.T) { testMissingHeaderAttack(t, eth.ETH66, LightSync) } + +func testMissingHeaderAttack(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chain := testChainBase.shorten(blockCacheMaxItems - 15) + brokenChain := chain.shorten(chain.len()) + delete(brokenChain.headerm, brokenChain.chain[brokenChain.len()/2]) + tester.newPeer("attack", protocol, brokenChain) + + if err := tester.sync("attack", nil, mode); err == nil { + t.Fatalf("succeeded attacker synchronisation") + } + // Synchronise with the valid peer and make sure sync succeeds + tester.newPeer("valid", protocol, chain) + if err := tester.sync("valid", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) +} + +// Tests that if requested headers are shifted (i.e. first is missing), the queue +// detects the invalid numbering. +func TestShiftedHeaderAttack66Full(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, FullSync) } +func TestShiftedHeaderAttack66Fast(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, FastSync) } +func TestShiftedHeaderAttack66Light(t *testing.T) { testShiftedHeaderAttack(t, eth.ETH66, LightSync) } + +func testShiftedHeaderAttack(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + // Attempt a full sync with an attacker feeding shifted headers + brokenChain := chain.shorten(chain.len()) + delete(brokenChain.headerm, brokenChain.chain[1]) + delete(brokenChain.blockm, brokenChain.chain[1]) + delete(brokenChain.receiptm, brokenChain.chain[1]) + tester.newPeer("attack", protocol, brokenChain) + if err := tester.sync("attack", nil, mode); err == nil { + t.Fatalf("succeeded attacker synchronisation") + } + + // Synchronise with the valid peer and make sure sync succeeds + tester.newPeer("valid", protocol, chain) + if err := tester.sync("valid", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + assertOwnChain(t, tester, chain.len()) +} + +// Tests that upon detecting an invalid header, the recent ones are rolled back +// for various failure scenarios. Afterwards a full sync is attempted to make +// sure no state was corrupted. +func TestInvalidHeaderRollback66Fast(t *testing.T) { testInvalidHeaderRollback(t, eth.ETH66, FastSync) } + +func testInvalidHeaderRollback(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + + // Create a small enough block chain to download + targetBlocks := 3*fsHeaderSafetyNet + 256 + fsMinFullBlocks + chain := testChainBase.shorten(targetBlocks) + + // Attempt to sync with an attacker that feeds junk during the fast sync phase. + // This should result in the last fsHeaderSafetyNet headers being rolled back. + missing := fsHeaderSafetyNet + MaxHeaderFetch + 1 + fastAttackChain := chain.shorten(chain.len()) + delete(fastAttackChain.headerm, fastAttackChain.chain[missing]) + tester.newPeer("fast-attack", protocol, fastAttackChain) + + if err := tester.sync("fast-attack", nil, mode); err == nil { + t.Fatalf("succeeded fast attacker synchronisation") + } + if head := tester.CurrentHeader().Number.Int64(); int(head) > MaxHeaderFetch { + t.Errorf("rollback head mismatch: have %v, want at most %v", head, MaxHeaderFetch) + } + + // Attempt to sync with an attacker that feeds junk during the block import phase. + // This should result in both the last fsHeaderSafetyNet number of headers being + // rolled back, and also the pivot point being reverted to a non-block status. + missing = 3*fsHeaderSafetyNet + MaxHeaderFetch + 1 + blockAttackChain := chain.shorten(chain.len()) + delete(fastAttackChain.headerm, fastAttackChain.chain[missing]) // Make sure the fast-attacker doesn't fill in + delete(blockAttackChain.headerm, blockAttackChain.chain[missing]) + tester.newPeer("block-attack", protocol, blockAttackChain) + + if err := tester.sync("block-attack", nil, mode); err == nil { + t.Fatalf("succeeded block attacker synchronisation") + } + if head := tester.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { + t.Errorf("rollback head mismatch: have %v, want at most %v", head, 2*fsHeaderSafetyNet+MaxHeaderFetch) + } + if mode == FastSync { + if head := tester.CurrentBlock().NumberU64(); head != 0 { + t.Errorf("fast sync pivot block #%d not rolled back", head) + } + } + + // Attempt to sync with an attacker that withholds promised blocks after the + // fast sync pivot point. This could be a trial to leave the node with a bad + // but already imported pivot block. + withholdAttackChain := chain.shorten(chain.len()) + tester.newPeer("withhold-attack", protocol, withholdAttackChain) + tester.downloader.syncInitHook = func(uint64, uint64) { + for i := missing; i < withholdAttackChain.len(); i++ { + delete(withholdAttackChain.headerm, withholdAttackChain.chain[i]) + } + tester.downloader.syncInitHook = nil + } + if err := tester.sync("withhold-attack", nil, mode); err == nil { + t.Fatalf("succeeded withholding attacker synchronisation") + } + if head := tester.CurrentHeader().Number.Int64(); int(head) > 2*fsHeaderSafetyNet+MaxHeaderFetch { + t.Errorf("rollback head mismatch: have %v, want at most %v", head, 2*fsHeaderSafetyNet+MaxHeaderFetch) + } + if mode == FastSync { + if head := tester.CurrentBlock().NumberU64(); head != 0 { + t.Errorf("fast sync pivot block #%d not rolled back", head) + } + } + + // synchronise with the valid peer and make sure sync succeeds. Since the last rollback + // should also disable fast syncing for this process, verify that we did a fresh full + // sync. Note, we can't assert anything about the receipts since we won't purge the + // database of them, hence we can't use assertOwnChain. + tester.newPeer("valid", protocol, chain) + if err := tester.sync("valid", nil, mode); err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + if hs := len(tester.ownHeaders); hs != chain.len() { + t.Fatalf("synchronised headers mismatch: have %v, want %v", hs, chain.len()) + } + if mode != LightSync { + if bs := len(tester.ownBlocks); bs != chain.len() { + t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, chain.len()) + } + } + tester.terminate() +} + +// Tests that a peer advertising a high TD doesn't get to stall the downloader +// afterwards by not sending any useful hashes. +func TestHighTDStarvationAttack66Full(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, FullSync) +} +func TestHighTDStarvationAttack66Fast(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, FastSync) +} +func TestHighTDStarvationAttack66Light(t *testing.T) { + testHighTDStarvationAttack(t, eth.ETH66, LightSync) +} + +func testHighTDStarvationAttack(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + + chain := testChainBase.shorten(1) + tester.newPeer("attack", protocol, chain) + if err := tester.sync("attack", big.NewInt(1000000), mode); err != errStallingPeer { + t.Fatalf("synchronisation error mismatch: have %v, want %v", err, errStallingPeer) + } + tester.terminate() +} + +// Tests that misbehaving peers are disconnected, whilst behaving ones are not. +func TestBlockHeaderAttackerDropping66(t *testing.T) { testBlockHeaderAttackerDropping(t, eth.ETH66) } + +func testBlockHeaderAttackerDropping(t *testing.T, protocol uint) { + t.Parallel() + + // Define the disconnection requirement for individual hash fetch errors + tests := []struct { + result error + drop bool + }{ + {nil, false}, // Sync succeeded, all is well + {errBusy, false}, // Sync is already in progress, no problem + {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 + {errInvalidBody, false}, // A bad peer was detected, but not the sync origin + {errInvalidReceipt, false}, // A bad peer was detected, but not the sync origin + {errCancelContentProcessing, false}, // Synchronisation was canceled, origin may be innocent, don't drop + } + // Run the tests and check disconnection status + tester := newTester() + defer tester.terminate() + chain := testChainBase.shorten(1) + + for i, tt := range tests { + // Register a new peer and ensure its presence + id := fmt.Sprintf("test %d", i) + if err := tester.newPeer(id, protocol, chain); err != nil { + t.Fatalf("test %d: failed to register new peer: %v", i, err) + } + if _, ok := tester.peers[id]; !ok { + t.Fatalf("test %d: registered peer not found", i) + } + // Simulate a synchronisation and check the required result + tester.downloader.synchroniseMock = func(string, common.Hash) error { return tt.result } + + tester.downloader.Synchronise(id, tester.genesis.Hash(), big.NewInt(1000), FullSync) + if _, ok := tester.peers[id]; !ok != tt.drop { + t.Errorf("test %d: peer drop mismatch for %v: have %v, want %v", i, tt.result, !ok, tt.drop) + } + } +} + +// Tests that synchronisation progress (origin block number, current block number +// and highest block number) is tracked and updated correctly. +func TestSyncProgress66Full(t *testing.T) { testSyncProgress(t, eth.ETH66, FullSync) } +func TestSyncProgress66Fast(t *testing.T) { testSyncProgress(t, eth.ETH66, FastSync) } +func TestSyncProgress66Light(t *testing.T) { testSyncProgress(t, eth.ETH66, LightSync) } + +func testSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + // Set a sync init hook to catch progress changes + starting := make(chan struct{}) + progress := make(chan struct{}) + + tester.downloader.syncInitHook = func(origin, latest uint64) { + starting <- struct{}{} + <-progress + } + checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) + + // Synchronise half the blocks and check initial progress + tester.newPeer("peer-half", protocol, chain.shorten(chain.len()/2)) + pending := new(sync.WaitGroup) + pending.Add(1) + + go func() { + defer pending.Done() + if err := tester.sync("peer-half", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ + HighestBlock: uint64(chain.len()/2 - 1), + }) + progress <- struct{}{} + pending.Wait() + + // Synchronise all the blocks and check continuation progress + tester.newPeer("peer-full", protocol, chain) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("peer-full", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + checkProgress(t, tester.downloader, "completing", ethereum.SyncProgress{ + StartingBlock: uint64(chain.len()/2 - 1), + CurrentBlock: uint64(chain.len()/2 - 1), + HighestBlock: uint64(chain.len() - 1), + }) + + // Check final progress after successful sync + progress <- struct{}{} + pending.Wait() + checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ + StartingBlock: uint64(chain.len()/2 - 1), + CurrentBlock: uint64(chain.len() - 1), + HighestBlock: uint64(chain.len() - 1), + }) +} + +func checkProgress(t *testing.T, d *Downloader, stage string, want ethereum.SyncProgress) { + // Mark this method as a helper to report errors at callsite, not in here + t.Helper() + + p := d.Progress() + //p.KnownStates, p.PulledStates = 0, 0 + //want.KnownStates, want.PulledStates = 0, 0 + if p != want { + t.Fatalf("%s progress mismatch:\nhave %+v\nwant %+v", stage, p, want) + } +} + +// Tests that synchronisation progress (origin block number and highest block +// number) is tracked and updated correctly in case of a fork (or manual head +// revertal). +func TestForkedSyncProgress66Full(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, FullSync) } +func TestForkedSyncProgress66Fast(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, FastSync) } +func TestForkedSyncProgress66Light(t *testing.T) { testForkedSyncProgress(t, eth.ETH66, LightSync) } + +func testForkedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + chainA := testChainForkLightA.shorten(testChainBase.len() + MaxHeaderFetch) + chainB := testChainForkLightB.shorten(testChainBase.len() + MaxHeaderFetch) + + // Set a sync init hook to catch progress changes + starting := make(chan struct{}) + progress := make(chan struct{}) + + tester.downloader.syncInitHook = func(origin, latest uint64) { + starting <- struct{}{} + <-progress + } + checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) + + // Synchronise with one of the forks and check progress + tester.newPeer("fork A", protocol, chainA) + pending := new(sync.WaitGroup) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("fork A", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + + checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ + HighestBlock: uint64(chainA.len() - 1), + }) + progress <- struct{}{} + pending.Wait() + + // Simulate a successful sync above the fork + tester.downloader.syncStatsChainOrigin = tester.downloader.syncStatsChainHeight + + // Synchronise with the second fork and check progress resets + tester.newPeer("fork B", protocol, chainB) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("fork B", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + checkProgress(t, tester.downloader, "forking", ethereum.SyncProgress{ + StartingBlock: uint64(testChainBase.len()) - 1, + CurrentBlock: uint64(chainA.len() - 1), + HighestBlock: uint64(chainB.len() - 1), + }) + + // Check final progress after successful sync + progress <- struct{}{} + pending.Wait() + checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ + StartingBlock: uint64(testChainBase.len()) - 1, + CurrentBlock: uint64(chainB.len() - 1), + HighestBlock: uint64(chainB.len() - 1), + }) +} + +// Tests that if synchronisation is aborted due to some failure, then the progress +// origin is not updated in the next sync cycle, as it should be considered the +// continuation of the previous sync and not a new instance. +func TestFailedSyncProgress66Full(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, FullSync) } +func TestFailedSyncProgress66Fast(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, FastSync) } +func TestFailedSyncProgress66Light(t *testing.T) { testFailedSyncProgress(t, eth.ETH66, LightSync) } + +func testFailedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + // Set a sync init hook to catch progress changes + starting := make(chan struct{}) + progress := make(chan struct{}) + + tester.downloader.syncInitHook = func(origin, latest uint64) { + starting <- struct{}{} + <-progress + } + checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) + + // Attempt a full sync with a faulty peer + brokenChain := chain.shorten(chain.len()) + missing := brokenChain.len() / 2 + delete(brokenChain.headerm, brokenChain.chain[missing]) + delete(brokenChain.blockm, brokenChain.chain[missing]) + delete(brokenChain.receiptm, brokenChain.chain[missing]) + tester.newPeer("faulty", protocol, brokenChain) + + pending := new(sync.WaitGroup) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("faulty", nil, mode); err == nil { + panic("succeeded faulty synchronisation") + } + }() + <-starting + checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ + HighestBlock: uint64(brokenChain.len() - 1), + }) + progress <- struct{}{} + pending.Wait() + afterFailedSync := tester.downloader.Progress() + + // Synchronise with a good peer and check that the progress origin remind the same + // after a failure + tester.newPeer("valid", protocol, chain) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("valid", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + checkProgress(t, tester.downloader, "completing", afterFailedSync) + + // Check final progress after successful sync + progress <- struct{}{} + pending.Wait() + checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ + CurrentBlock: uint64(chain.len() - 1), + HighestBlock: uint64(chain.len() - 1), + }) +} + +// Tests that if an attacker fakes a chain height, after the attack is detected, +// the progress height is successfully reduced at the next sync invocation. +func TestFakedSyncProgress66Full(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, FullSync) } +func TestFakedSyncProgress66Fast(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, FastSync) } +func TestFakedSyncProgress66Light(t *testing.T) { testFakedSyncProgress(t, eth.ETH66, LightSync) } + +func testFakedSyncProgress(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + tester := newTester() + defer tester.terminate() + chain := testChainBase.shorten(blockCacheMaxItems - 15) + + // Set a sync init hook to catch progress changes + starting := make(chan struct{}) + progress := make(chan struct{}) + tester.downloader.syncInitHook = func(origin, latest uint64) { + starting <- struct{}{} + <-progress + } + checkProgress(t, tester.downloader, "pristine", ethereum.SyncProgress{}) + + // Create and sync with an attacker that promises a higher chain than available. + brokenChain := chain.shorten(chain.len()) + numMissing := 5 + for i := brokenChain.len() - 2; i > brokenChain.len()-numMissing; i-- { + delete(brokenChain.headerm, brokenChain.chain[i]) + } + tester.newPeer("attack", protocol, brokenChain) + + pending := new(sync.WaitGroup) + pending.Add(1) + go func() { + defer pending.Done() + if err := tester.sync("attack", nil, mode); err == nil { + panic("succeeded attacker synchronisation") + } + }() + <-starting + checkProgress(t, tester.downloader, "initial", ethereum.SyncProgress{ + HighestBlock: uint64(brokenChain.len() - 1), + }) + progress <- struct{}{} + pending.Wait() + afterFailedSync := tester.downloader.Progress() + + // Synchronise with a good peer and check that the progress height has been reduced to + // the true value. + validChain := chain.shorten(chain.len() - numMissing) + tester.newPeer("valid", protocol, validChain) + pending.Add(1) + + go func() { + defer pending.Done() + if err := tester.sync("valid", nil, mode); err != nil { + panic(fmt.Sprintf("failed to synchronise blocks: %v", err)) + } + }() + <-starting + checkProgress(t, tester.downloader, "completing", ethereum.SyncProgress{ + CurrentBlock: afterFailedSync.CurrentBlock, + HighestBlock: uint64(validChain.len() - 1), + }) + + // Check final progress after successful sync. + progress <- struct{}{} + pending.Wait() + checkProgress(t, tester.downloader, "final", ethereum.SyncProgress{ + CurrentBlock: uint64(validChain.len() - 1), + HighestBlock: uint64(validChain.len() - 1), + }) +} + +// This test reproduces an issue where unexpected deliveries would +// block indefinitely if they arrived at the right time. +func TestDeliverHeadersHang66Full(t *testing.T) { testDeliverHeadersHang(t, eth.ETH66, FullSync) } +func TestDeliverHeadersHang66Fast(t *testing.T) { testDeliverHeadersHang(t, eth.ETH66, FastSync) } +func TestDeliverHeadersHang66Light(t *testing.T) { testDeliverHeadersHang(t, eth.ETH66, LightSync) } + +func testDeliverHeadersHang(t *testing.T, protocol uint, mode SyncMode) { + t.Parallel() + + master := newTester() + defer master.terminate() + chain := testChainBase.shorten(15) + + for i := 0; i < 200; i++ { + tester := newTester() + tester.peerDb = master.peerDb + tester.newPeer("peer", protocol, chain) + + // Whenever the downloader requests headers, flood it with + // a lot of unrequested header deliveries. + tester.downloader.peers.peers["peer"].peer = &floodingTestPeer{ + peer: tester.downloader.peers.peers["peer"].peer, + tester: tester, + } + if err := tester.sync("peer", nil, mode); err != nil { + t.Errorf("test %d: sync failed: %v", i, err) + } + tester.terminate() + } +} + +type floodingTestPeer struct { + peer Peer + tester *downloadTester +} + +func (ftp *floodingTestPeer) Head() (common.Hash, *big.Int) { return ftp.peer.Head() } +func (ftp *floodingTestPeer) RequestHeadersByHash(hash common.Hash, count int, skip int, reverse bool) error { + return ftp.peer.RequestHeadersByHash(hash, count, skip, reverse) +} +func (ftp *floodingTestPeer) RequestBodies(hashes []common.Hash) error { + return ftp.peer.RequestBodies(hashes) +} +func (ftp *floodingTestPeer) RequestReceipts(hashes []common.Hash) error { + return ftp.peer.RequestReceipts(hashes) +} +func (ftp *floodingTestPeer) RequestNodeData(hashes []common.Hash) error { + return ftp.peer.RequestNodeData(hashes) +} + +func (ftp *floodingTestPeer) RequestHeadersByNumber(from uint64, count, skip int, reverse bool) error { + deliveriesDone := make(chan struct{}, 500) + for i := 0; i < cap(deliveriesDone)-1; i++ { + peer := fmt.Sprintf("fake-peer%d", i) + go func() { + ftp.tester.downloader.DeliverHeaders(peer, []*types.Header{{}, {}, {}, {}}) + deliveriesDone <- struct{}{} + }() + } + + // None of the extra deliveries should block. + timeout := time.After(60 * time.Second) + launched := false + for i := 0; i < cap(deliveriesDone); i++ { + select { + case <-deliveriesDone: + if !launched { + // Start delivering the requested headers + // after one of the flooding responses has arrived. + go func() { + ftp.peer.RequestHeadersByNumber(from, count, skip, reverse) + deliveriesDone <- struct{}{} + }() + launched = true + } + case <-timeout: + panic("blocked") + } + } + return nil +} + +func TestRemoteHeaderRequestSpan(t *testing.T) { + testCases := []struct { + remoteHeight uint64 + localHeight uint64 + expected []int + }{ + // Remote is way higher. We should ask for the remote head and go backwards + {1500, 1000, + []int{1323, 1339, 1355, 1371, 1387, 1403, 1419, 1435, 1451, 1467, 1483, 1499}, + }, + {15000, 13006, + []int{14823, 14839, 14855, 14871, 14887, 14903, 14919, 14935, 14951, 14967, 14983, 14999}, + }, + // Remote is pretty close to us. We don't have to fetch as many + {1200, 1150, + []int{1149, 1154, 1159, 1164, 1169, 1174, 1179, 1184, 1189, 1194, 1199}, + }, + // Remote is equal to us (so on a fork with higher td) + // We should get the closest couple of ancestors + {1500, 1500, + []int{1497, 1499}, + }, + // We're higher than the remote! Odd + {1000, 1500, + []int{997, 999}, + }, + // Check some weird edgecases that it behaves somewhat rationally + {0, 1500, + []int{0, 2}, + }, + {6000000, 0, + []int{5999823, 5999839, 5999855, 5999871, 5999887, 5999903, 5999919, 5999935, 5999951, 5999967, 5999983, 5999999}, + }, + {0, 0, + []int{0, 2}, + }, + } + reqs := func(from, count, span int) []int { + var r []int + num := from + for len(r) < count { + r = append(r, num) + num += span + 1 + } + return r + } + for i, tt := range testCases { + from, count, span, max := calculateRequestSpan(tt.remoteHeight, tt.localHeight) + data := reqs(int(from), count, span) + + if max != uint64(data[len(data)-1]) { + t.Errorf("test %d: wrong last value %d != %d", i, data[len(data)-1], max) + } + failed := false + if len(data) != len(tt.expected) { + failed = true + t.Errorf("test %d: length wrong, expected %d got %d", i, len(tt.expected), len(data)) + } else { + for j, n := range data { + if n != tt.expected[j] { + failed = true + break + } + } + } + if failed { + res := strings.ReplaceAll(fmt.Sprint(data), " ", ",") + exp := strings.ReplaceAll(fmt.Sprint(tt.expected), " ", ",") + 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 TestCheckpointEnforcement66Full(t *testing.T) { testCheckpointEnforcement(t, eth.ETH66, FullSync) } +func TestCheckpointEnforcement66Fast(t *testing.T) { testCheckpointEnforcement(t, eth.ETH66, FastSync) } +func TestCheckpointEnforcement66Light(t *testing.T) { + testCheckpointEnforcement(t, eth.ETH66, LightSync) +} + +func testCheckpointEnforcement(t *testing.T, protocol uint, 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); !errors.Is(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/les/downloader/events.go b/les/downloader/events.go new file mode 100644 index 00000000..25255a3a --- /dev/null +++ b/les/downloader/events.go @@ -0,0 +1,25 @@ +// 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 downloader + +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/les/downloader/metrics.go b/les/downloader/metrics.go new file mode 100644 index 00000000..c3873204 --- /dev/null +++ b/les/downloader/metrics.go @@ -0,0 +1,45 @@ +// 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 . + +// Contains the metrics collected by the downloader. + +package downloader + +import ( + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + headerInMeter = metrics.NewRegisteredMeter("eth/downloader/headers/in", nil) + headerReqTimer = metrics.NewRegisteredTimer("eth/downloader/headers/req", nil) + headerDropMeter = metrics.NewRegisteredMeter("eth/downloader/headers/drop", nil) + headerTimeoutMeter = metrics.NewRegisteredMeter("eth/downloader/headers/timeout", nil) + + bodyInMeter = metrics.NewRegisteredMeter("eth/downloader/bodies/in", nil) + bodyReqTimer = metrics.NewRegisteredTimer("eth/downloader/bodies/req", nil) + bodyDropMeter = metrics.NewRegisteredMeter("eth/downloader/bodies/drop", nil) + bodyTimeoutMeter = metrics.NewRegisteredMeter("eth/downloader/bodies/timeout", nil) + + receiptInMeter = metrics.NewRegisteredMeter("eth/downloader/receipts/in", nil) + receiptReqTimer = metrics.NewRegisteredTimer("eth/downloader/receipts/req", nil) + receiptDropMeter = metrics.NewRegisteredMeter("eth/downloader/receipts/drop", nil) + receiptTimeoutMeter = metrics.NewRegisteredMeter("eth/downloader/receipts/timeout", nil) + + stateInMeter = metrics.NewRegisteredMeter("eth/downloader/states/in", nil) + stateDropMeter = metrics.NewRegisteredMeter("eth/downloader/states/drop", nil) + + throttleCounter = metrics.NewRegisteredCounter("eth/downloader/throttle", nil) +) diff --git a/les/downloader/modes.go b/les/downloader/modes.go new file mode 100644 index 00000000..3ea14d22 --- /dev/null +++ b/les/downloader/modes.go @@ -0,0 +1,81 @@ +// 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 downloader + +import "fmt" + +// SyncMode represents the synchronisation mode of the downloader. +// It is a uint32 as it is used with atomic operations. +type SyncMode uint32 + +const ( + FullSync SyncMode = iota // Synchronise the entire blockchain history from full blocks + FastSync // Quickly download the headers, full sync only at the chain + SnapSync // Download the chain and the state via compact snapshots + LightSync // Download only the headers and terminate afterwards +) + +func (mode SyncMode) IsValid() bool { + return mode >= FullSync && mode <= LightSync +} + +// String implements the stringer interface. +func (mode SyncMode) String() string { + switch mode { + case FullSync: + return "full" + case FastSync: + return "fast" + case SnapSync: + return "snap" + case LightSync: + return "light" + default: + return "unknown" + } +} + +func (mode SyncMode) MarshalText() ([]byte, error) { + switch mode { + case FullSync: + return []byte("full"), nil + case FastSync: + return []byte("fast"), nil + case SnapSync: + return []byte("snap"), nil + case LightSync: + return []byte("light"), nil + default: + return nil, fmt.Errorf("unknown sync mode %d", mode) + } +} + +func (mode *SyncMode) UnmarshalText(text []byte) error { + switch string(text) { + case "full": + *mode = FullSync + case "fast": + *mode = FastSync + case "snap": + *mode = SnapSync + case "light": + *mode = LightSync + default: + return fmt.Errorf(`unknown sync mode %q, want "full", "fast" or "light"`, text) + } + return nil +} diff --git a/les/downloader/peer.go b/les/downloader/peer.go new file mode 100644 index 00000000..c2161e2d --- /dev/null +++ b/les/downloader/peer.go @@ -0,0 +1,502 @@ +// 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 . + +// Contains the active peer-set of the downloader, maintaining both failures +// as well as reputation metrics to prioritize the block retrievals. + +package downloader + +import ( + "errors" + "math/big" + "sort" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/msgrate" +) + +const ( + maxLackingHashes = 4096 // Maximum number of entries allowed on the list or lacking items +) + +var ( + errAlreadyFetching = errors.New("already fetching blocks from peer") + errAlreadyRegistered = errors.New("peer is already registered") + errNotRegistered = errors.New("peer is not registered") +) + +// peerConnection represents an active peer from which hashes and blocks are retrieved. +type peerConnection struct { + id string // Unique identifier of the peer + + headerIdle int32 // Current header activity state of the peer (idle = 0, active = 1) + blockIdle int32 // Current block activity state of the peer (idle = 0, active = 1) + receiptIdle int32 // Current receipt activity state of the peer (idle = 0, active = 1) + stateIdle int32 // Current node data activity state of the peer (idle = 0, active = 1) + + headerStarted time.Time // Time instance when the last header fetch was started + blockStarted time.Time // Time instance when the last block (body) fetch was started + receiptStarted time.Time // Time instance when the last receipt fetch was started + stateStarted time.Time // Time instance when the last node data fetch was started + + rates *msgrate.Tracker // Tracker to hone in on the number of items retrievable per second + lacking map[common.Hash]struct{} // Set of hashes not to request (didn't have previously) + + peer Peer + + version uint // Eth protocol version number to switch strategies + log log.Logger // Contextual logger to add extra infos to peer logs + lock sync.RWMutex +} + +// LightPeer encapsulates the methods required to synchronise with a remote light peer. +type LightPeer interface { + Head() (common.Hash, *big.Int) + RequestHeadersByHash(common.Hash, int, int, bool) error + RequestHeadersByNumber(uint64, int, int, bool) error +} + +// Peer encapsulates the methods required to synchronise with a remote full peer. +type Peer interface { + LightPeer + RequestBodies([]common.Hash) error + RequestReceipts([]common.Hash) error + RequestNodeData([]common.Hash) error +} + +// lightPeerWrapper wraps a LightPeer struct, stubbing out the Peer-only methods. +type lightPeerWrapper struct { + peer LightPeer +} + +func (w *lightPeerWrapper) Head() (common.Hash, *big.Int) { return w.peer.Head() } +func (w *lightPeerWrapper) RequestHeadersByHash(h common.Hash, amount int, skip int, reverse bool) error { + return w.peer.RequestHeadersByHash(h, amount, skip, reverse) +} +func (w *lightPeerWrapper) RequestHeadersByNumber(i uint64, amount int, skip int, reverse bool) error { + return w.peer.RequestHeadersByNumber(i, amount, skip, reverse) +} +func (w *lightPeerWrapper) RequestBodies([]common.Hash) error { + panic("RequestBodies not supported in light client mode sync") +} +func (w *lightPeerWrapper) RequestReceipts([]common.Hash) error { + panic("RequestReceipts not supported in light client mode sync") +} +func (w *lightPeerWrapper) RequestNodeData([]common.Hash) error { + panic("RequestNodeData not supported in light client mode sync") +} + +// newPeerConnection creates a new downloader peer. +func newPeerConnection(id string, version uint, peer Peer, logger log.Logger) *peerConnection { + return &peerConnection{ + id: id, + lacking: make(map[common.Hash]struct{}), + peer: peer, + version: version, + log: logger, + } +} + +// Reset clears the internal state of a peer entity. +func (p *peerConnection) Reset() { + p.lock.Lock() + defer p.lock.Unlock() + + atomic.StoreInt32(&p.headerIdle, 0) + atomic.StoreInt32(&p.blockIdle, 0) + atomic.StoreInt32(&p.receiptIdle, 0) + atomic.StoreInt32(&p.stateIdle, 0) + + p.lacking = make(map[common.Hash]struct{}) +} + +// FetchHeaders sends a header retrieval request to the remote peer. +func (p *peerConnection) FetchHeaders(from uint64, count int) error { + // Short circuit if the peer is already fetching + if !atomic.CompareAndSwapInt32(&p.headerIdle, 0, 1) { + return errAlreadyFetching + } + p.headerStarted = time.Now() + + // Issue the header retrieval request (absolute upwards without gaps) + go p.peer.RequestHeadersByNumber(from, count, 0, false) + + return nil +} + +// FetchBodies sends a block body retrieval request to the remote peer. +func (p *peerConnection) FetchBodies(request *fetchRequest) error { + // Short circuit if the peer is already fetching + if !atomic.CompareAndSwapInt32(&p.blockIdle, 0, 1) { + return errAlreadyFetching + } + p.blockStarted = time.Now() + + go func() { + // Convert the header set to a retrievable slice + hashes := make([]common.Hash, 0, len(request.Headers)) + for _, header := range request.Headers { + hashes = append(hashes, header.Hash()) + } + p.peer.RequestBodies(hashes) + }() + + return nil +} + +// FetchReceipts sends a receipt retrieval request to the remote peer. +func (p *peerConnection) FetchReceipts(request *fetchRequest) error { + // Short circuit if the peer is already fetching + if !atomic.CompareAndSwapInt32(&p.receiptIdle, 0, 1) { + return errAlreadyFetching + } + p.receiptStarted = time.Now() + + go func() { + // Convert the header set to a retrievable slice + hashes := make([]common.Hash, 0, len(request.Headers)) + for _, header := range request.Headers { + hashes = append(hashes, header.Hash()) + } + p.peer.RequestReceipts(hashes) + }() + + return nil +} + +// FetchNodeData sends a node state data retrieval request to the remote peer. +func (p *peerConnection) FetchNodeData(hashes []common.Hash) error { + // Short circuit if the peer is already fetching + if !atomic.CompareAndSwapInt32(&p.stateIdle, 0, 1) { + return errAlreadyFetching + } + p.stateStarted = time.Now() + + go p.peer.RequestNodeData(hashes) + + return nil +} + +// SetHeadersIdle sets the peer to idle, allowing it to execute new header retrieval +// requests. Its estimated header retrieval throughput is updated with that measured +// just now. +func (p *peerConnection) SetHeadersIdle(delivered int, deliveryTime time.Time) { + p.rates.Update(eth.BlockHeadersMsg, deliveryTime.Sub(p.headerStarted), delivered) + atomic.StoreInt32(&p.headerIdle, 0) +} + +// SetBodiesIdle sets the peer to idle, allowing it to execute block body retrieval +// requests. Its estimated body retrieval throughput is updated with that measured +// just now. +func (p *peerConnection) SetBodiesIdle(delivered int, deliveryTime time.Time) { + p.rates.Update(eth.BlockBodiesMsg, deliveryTime.Sub(p.blockStarted), delivered) + atomic.StoreInt32(&p.blockIdle, 0) +} + +// SetReceiptsIdle sets the peer to idle, allowing it to execute new receipt +// retrieval requests. Its estimated receipt retrieval throughput is updated +// with that measured just now. +func (p *peerConnection) SetReceiptsIdle(delivered int, deliveryTime time.Time) { + p.rates.Update(eth.ReceiptsMsg, deliveryTime.Sub(p.receiptStarted), delivered) + atomic.StoreInt32(&p.receiptIdle, 0) +} + +// SetNodeDataIdle sets the peer to idle, allowing it to execute new state trie +// data retrieval requests. Its estimated state retrieval throughput is updated +// with that measured just now. +func (p *peerConnection) SetNodeDataIdle(delivered int, deliveryTime time.Time) { + p.rates.Update(eth.NodeDataMsg, deliveryTime.Sub(p.stateStarted), delivered) + atomic.StoreInt32(&p.stateIdle, 0) +} + +// HeaderCapacity retrieves the peers header download allowance based on its +// previously discovered throughput. +func (p *peerConnection) HeaderCapacity(targetRTT time.Duration) int { + cap := p.rates.Capacity(eth.BlockHeadersMsg, targetRTT) + if cap > MaxHeaderFetch { + cap = MaxHeaderFetch + } + return cap +} + +// BlockCapacity retrieves the peers block download allowance based on its +// previously discovered throughput. +func (p *peerConnection) BlockCapacity(targetRTT time.Duration) int { + cap := p.rates.Capacity(eth.BlockBodiesMsg, targetRTT) + if cap > MaxBlockFetch { + cap = MaxBlockFetch + } + return cap +} + +// ReceiptCapacity retrieves the peers receipt download allowance based on its +// previously discovered throughput. +func (p *peerConnection) ReceiptCapacity(targetRTT time.Duration) int { + cap := p.rates.Capacity(eth.ReceiptsMsg, targetRTT) + if cap > MaxReceiptFetch { + cap = MaxReceiptFetch + } + return cap +} + +// NodeDataCapacity retrieves the peers state download allowance based on its +// previously discovered throughput. +func (p *peerConnection) NodeDataCapacity(targetRTT time.Duration) int { + cap := p.rates.Capacity(eth.NodeDataMsg, targetRTT) + if cap > MaxStateFetch { + cap = MaxStateFetch + } + return cap +} + +// MarkLacking appends a new entity to the set of items (blocks, receipts, states) +// that a peer is known not to have (i.e. have been requested before). If the +// set reaches its maximum allowed capacity, items are randomly dropped off. +func (p *peerConnection) MarkLacking(hash common.Hash) { + p.lock.Lock() + defer p.lock.Unlock() + + for len(p.lacking) >= maxLackingHashes { + for drop := range p.lacking { + delete(p.lacking, drop) + break + } + } + p.lacking[hash] = struct{}{} +} + +// Lacks retrieves whether the hash of a blockchain item is on the peers lacking +// list (i.e. whether we know that the peer does not have it). +func (p *peerConnection) Lacks(hash common.Hash) bool { + p.lock.RLock() + defer p.lock.RUnlock() + + _, ok := p.lacking[hash] + return ok +} + +// peerSet represents the collection of active peer participating in the chain +// download procedure. +type peerSet struct { + peers map[string]*peerConnection + rates *msgrate.Trackers // Set of rate trackers to give the sync a common beat + + newPeerFeed event.Feed + peerDropFeed event.Feed + + lock sync.RWMutex +} + +// newPeerSet creates a new peer set top track the active download sources. +func newPeerSet() *peerSet { + return &peerSet{ + peers: make(map[string]*peerConnection), + rates: msgrate.NewTrackers(log.New("proto", "eth")), + } +} + +// SubscribeNewPeers subscribes to peer arrival events. +func (ps *peerSet) SubscribeNewPeers(ch chan<- *peerConnection) event.Subscription { + return ps.newPeerFeed.Subscribe(ch) +} + +// SubscribePeerDrops subscribes to peer departure events. +func (ps *peerSet) SubscribePeerDrops(ch chan<- *peerConnection) event.Subscription { + return ps.peerDropFeed.Subscribe(ch) +} + +// Reset iterates over the current peer set, and resets each of the known peers +// to prepare for a next batch of block retrieval. +func (ps *peerSet) Reset() { + ps.lock.RLock() + defer ps.lock.RUnlock() + + for _, peer := range ps.peers { + peer.Reset() + } +} + +// Register injects a new peer into the working set, or returns an error if the +// peer is already known. +// +// The method also sets the starting throughput values of the new peer to the +// average of all existing peers, to give it a realistic chance of being used +// for data retrievals. +func (ps *peerSet) Register(p *peerConnection) error { + // Register the new peer with some meaningful defaults + ps.lock.Lock() + if _, ok := ps.peers[p.id]; ok { + ps.lock.Unlock() + return errAlreadyRegistered + } + p.rates = msgrate.NewTracker(ps.rates.MeanCapacities(), ps.rates.MedianRoundTrip()) + if err := ps.rates.Track(p.id, p.rates); err != nil { + ps.lock.Unlock() + return err + } + ps.peers[p.id] = p + ps.lock.Unlock() + + ps.newPeerFeed.Send(p) + return nil +} + +// Unregister removes a remote peer from the active set, disabling any further +// actions to/from that particular entity. +func (ps *peerSet) Unregister(id string) error { + ps.lock.Lock() + p, ok := ps.peers[id] + if !ok { + ps.lock.Unlock() + return errNotRegistered + } + delete(ps.peers, id) + ps.rates.Untrack(id) + ps.lock.Unlock() + + ps.peerDropFeed.Send(p) + return nil +} + +// Peer retrieves the registered peer with the given id. +func (ps *peerSet) Peer(id string) *peerConnection { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return ps.peers[id] +} + +// Len returns if the current number of peers in the set. +func (ps *peerSet) Len() int { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return len(ps.peers) +} + +// AllPeers retrieves a flat list of all the peers within the set. +func (ps *peerSet) AllPeers() []*peerConnection { + ps.lock.RLock() + defer ps.lock.RUnlock() + + list := make([]*peerConnection, 0, len(ps.peers)) + for _, p := range ps.peers { + list = append(list, p) + } + return list +} + +// HeaderIdlePeers retrieves a flat list of all the currently header-idle peers +// within the active peer set, ordered by their reputation. +func (ps *peerSet) HeaderIdlePeers() ([]*peerConnection, int) { + idle := func(p *peerConnection) bool { + return atomic.LoadInt32(&p.headerIdle) == 0 + } + throughput := func(p *peerConnection) int { + return p.rates.Capacity(eth.BlockHeadersMsg, time.Second) + } + return ps.idlePeers(eth.ETH66, eth.ETH67, idle, throughput) +} + +// BodyIdlePeers retrieves a flat list of all the currently body-idle peers within +// the active peer set, ordered by their reputation. +func (ps *peerSet) BodyIdlePeers() ([]*peerConnection, int) { + idle := func(p *peerConnection) bool { + return atomic.LoadInt32(&p.blockIdle) == 0 + } + throughput := func(p *peerConnection) int { + return p.rates.Capacity(eth.BlockBodiesMsg, time.Second) + } + return ps.idlePeers(eth.ETH66, eth.ETH67, idle, throughput) +} + +// ReceiptIdlePeers retrieves a flat list of all the currently receipt-idle peers +// within the active peer set, ordered by their reputation. +func (ps *peerSet) ReceiptIdlePeers() ([]*peerConnection, int) { + idle := func(p *peerConnection) bool { + return atomic.LoadInt32(&p.receiptIdle) == 0 + } + throughput := func(p *peerConnection) int { + return p.rates.Capacity(eth.ReceiptsMsg, time.Second) + } + return ps.idlePeers(eth.ETH66, eth.ETH67, idle, throughput) +} + +// NodeDataIdlePeers retrieves a flat list of all the currently node-data-idle +// peers within the active peer set, ordered by their reputation. +func (ps *peerSet) NodeDataIdlePeers() ([]*peerConnection, int) { + idle := func(p *peerConnection) bool { + return atomic.LoadInt32(&p.stateIdle) == 0 + } + throughput := func(p *peerConnection) int { + return p.rates.Capacity(eth.NodeDataMsg, time.Second) + } + return ps.idlePeers(eth.ETH66, eth.ETH67, idle, throughput) +} + +// idlePeers retrieves a flat list of all currently idle peers satisfying the +// protocol version constraints, using the provided function to check idleness. +// The resulting set of peers are sorted by their capacity. +func (ps *peerSet) idlePeers(minProtocol, maxProtocol uint, idleCheck func(*peerConnection) bool, capacity func(*peerConnection) int) ([]*peerConnection, int) { + ps.lock.RLock() + defer ps.lock.RUnlock() + + var ( + total = 0 + idle = make([]*peerConnection, 0, len(ps.peers)) + tps = make([]int, 0, len(ps.peers)) + ) + for _, p := range ps.peers { + if p.version >= minProtocol && p.version <= maxProtocol { + if idleCheck(p) { + idle = append(idle, p) + tps = append(tps, capacity(p)) + } + total++ + } + } + + // And sort them + sortPeers := &peerCapacitySort{idle, tps} + sort.Sort(sortPeers) + return sortPeers.p, total +} + +// peerCapacitySort implements sort.Interface. +// It sorts peer connections by capacity (descending). +type peerCapacitySort struct { + p []*peerConnection + tp []int +} + +func (ps *peerCapacitySort) Len() int { + return len(ps.p) +} + +func (ps *peerCapacitySort) Less(i, j int) bool { + return ps.tp[i] > ps.tp[j] +} + +func (ps *peerCapacitySort) Swap(i, j int) { + ps.p[i], ps.p[j] = ps.p[j], ps.p[i] + ps.tp[i], ps.tp[j] = ps.tp[j], ps.tp[i] +} diff --git a/les/downloader/queue.go b/les/downloader/queue.go new file mode 100644 index 00000000..b165b6b5 --- /dev/null +++ b/les/downloader/queue.go @@ -0,0 +1,912 @@ +// 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 . + +// Contains the block download scheduler to collect download tasks and schedule +// them in an ordered, and throttled way. + +package downloader + +import ( + "errors" + "fmt" + "sync" + "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/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/trie" +) + +const ( + bodyType = uint(0) + receiptType = uint(1) +) + +var ( + blockCacheMaxItems = 8192 // Maximum number of blocks to cache before throttling the download + blockCacheInitialItems = 2048 // Initial number of blocks to start fetching, before we know the sizes of the blocks + blockCacheMemory = 256 * 1024 * 1024 // Maximum amount of memory to use for block caching + blockCacheSizeWeight = 0.1 // Multiplier to approximate the average block size based on past ones +) + +var ( + errNoFetchesPending = errors.New("no fetches pending") + errStaleDelivery = errors.New("stale delivery") +) + +// fetchRequest is a currently running data retrieval operation. +type fetchRequest struct { + Peer *peerConnection // Peer to which the request was sent + From uint64 // [eth/62] Requested chain element index (used for skeleton fills only) + Headers []*types.Header // [eth/62] Requested headers, sorted by request order + Time time.Time // Time when the request was made +} + +// fetchResult is a struct collecting partial results from data fetchers until +// all outstanding pieces complete and the result as a whole can be processed. +type fetchResult struct { + pending int32 // Flag telling what deliveries are outstanding + + Header *types.Header + Uncles []*types.Header + Transactions types.Transactions + Receipts types.Receipts +} + +func newFetchResult(header *types.Header, fastSync bool) *fetchResult { + item := &fetchResult{ + Header: header, + } + if !header.EmptyBody() { + item.pending |= (1 << bodyType) + } + if fastSync && !header.EmptyReceipts() { + item.pending |= (1 << receiptType) + } + return item +} + +// SetBodyDone flags the body as finished. +func (f *fetchResult) SetBodyDone() { + if v := atomic.LoadInt32(&f.pending); (v & (1 << bodyType)) != 0 { + atomic.AddInt32(&f.pending, -1) + } +} + +// AllDone checks if item is done. +func (f *fetchResult) AllDone() bool { + return atomic.LoadInt32(&f.pending) == 0 +} + +// SetReceiptsDone flags the receipts as finished. +func (f *fetchResult) SetReceiptsDone() { + if v := atomic.LoadInt32(&f.pending); (v & (1 << receiptType)) != 0 { + atomic.AddInt32(&f.pending, -2) + } +} + +// Done checks if the given type is done already +func (f *fetchResult) Done(kind uint) bool { + v := atomic.LoadInt32(&f.pending) + return v&(1< 0 +} + +// InFlightBlocks retrieves whether there are block fetch requests currently in +// flight. +func (q *queue) InFlightBlocks() bool { + q.lock.Lock() + defer q.lock.Unlock() + + return len(q.blockPendPool) > 0 +} + +// InFlightReceipts retrieves whether there are receipt fetch requests currently +// in flight. +func (q *queue) InFlightReceipts() bool { + q.lock.Lock() + defer q.lock.Unlock() + + return len(q.receiptPendPool) > 0 +} + +// Idle returns if the queue is fully idle or has some data still inside. +func (q *queue) Idle() bool { + q.lock.Lock() + defer q.lock.Unlock() + + queued := q.blockTaskQueue.Size() + q.receiptTaskQueue.Size() + pending := len(q.blockPendPool) + len(q.receiptPendPool) + + return (queued + pending) == 0 +} + +// ScheduleSkeleton adds a batch of header retrieval tasks to the queue to fill +// up an already retrieved header skeleton. +func (q *queue) ScheduleSkeleton(from uint64, skeleton []*types.Header) { + q.lock.Lock() + defer q.lock.Unlock() + + // No skeleton retrieval can be in progress, fail hard if so (huge implementation bug) + if q.headerResults != nil { + panic("skeleton assembly already in progress") + } + // Schedule all the header retrieval tasks for the skeleton assembly + q.headerTaskPool = make(map[uint64]*types.Header) + q.headerTaskQueue = prque.New(nil) + q.headerPeerMiss = make(map[string]map[uint64]struct{}) // Reset availability to correct invalid chains + q.headerResults = make([]*types.Header, len(skeleton)*MaxHeaderFetch) + q.headerProced = 0 + q.headerOffset = from + q.headerContCh = make(chan bool, 1) + + for i, header := range skeleton { + index := from + uint64(i*MaxHeaderFetch) + + q.headerTaskPool[index] = header + q.headerTaskQueue.Push(index, -int64(index)) + } +} + +// RetrieveHeaders retrieves the header chain assemble based on the scheduled +// skeleton. +func (q *queue) RetrieveHeaders() ([]*types.Header, int) { + q.lock.Lock() + defer q.lock.Unlock() + + headers, proced := q.headerResults, q.headerProced + q.headerResults, q.headerProced = nil, 0 + + return headers, proced +} + +// Schedule adds a set of headers for the download queue for scheduling, returning +// the new headers encountered. +func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header { + q.lock.Lock() + defer q.lock.Unlock() + + // Insert all the headers prioritised by the contained block number + inserts := make([]*types.Header, 0, len(headers)) + for _, header := range headers { + // Make sure chain order is honoured and preserved throughout + hash := header.Hash() + if header.Number == nil || header.Number.Uint64() != from { + log.Warn("Header broke chain ordering", "number", header.Number, "hash", hash, "expected", from) + break + } + if q.headerHead != (common.Hash{}) && q.headerHead != header.ParentHash { + log.Warn("Header broke chain ancestry", "number", header.Number, "hash", hash) + break + } + // Make sure no duplicate requests are executed + // We cannot skip this, even if the block is empty, since this is + // what triggers the fetchResult creation. + if _, ok := q.blockTaskPool[hash]; ok { + log.Warn("Header already scheduled for block fetch", "number", header.Number, "hash", hash) + } else { + q.blockTaskPool[hash] = header + q.blockTaskQueue.Push(header, -int64(header.Number.Uint64())) + } + // Queue for receipt retrieval + if q.mode == FastSync && !header.EmptyReceipts() { + if _, ok := q.receiptTaskPool[hash]; ok { + log.Warn("Header already scheduled for receipt fetch", "number", header.Number, "hash", hash) + } else { + q.receiptTaskPool[hash] = header + q.receiptTaskQueue.Push(header, -int64(header.Number.Uint64())) + } + } + inserts = append(inserts, header) + q.headerHead = hash + from++ + } + return inserts +} + +// Results retrieves and permanently removes a batch of fetch results from +// the cache. the result slice will be empty if the queue has been closed. +// Results can be called concurrently with Deliver and Schedule, +// but assumes that there are not two simultaneous callers to Results +func (q *queue) Results(block bool) []*fetchResult { + // Abort early if there are no items and non-blocking requested + if !block && !q.resultCache.HasCompletedItems() { + return nil + } + closed := false + for !closed && !q.resultCache.HasCompletedItems() { + // In order to wait on 'active', we need to obtain the lock. + // That may take a while, if someone is delivering at the same + // time, so after obtaining the lock, we check again if there + // are any results to fetch. + // Also, in-between we ask for the lock and the lock is obtained, + // someone can have closed the queue. In that case, we should + // return the available results and stop blocking + q.lock.Lock() + if q.resultCache.HasCompletedItems() || q.closed { + q.lock.Unlock() + break + } + // No items available, and not closed + q.active.Wait() + closed = q.closed + q.lock.Unlock() + } + // Regardless if closed or not, we can still deliver whatever we have + results := q.resultCache.GetCompleted(maxResultsProcess) + for _, result := range results { + // Recalculate the result item weights to prevent memory exhaustion + size := result.Header.Size() + for _, uncle := range result.Uncles { + size += uncle.Size() + } + for _, receipt := range result.Receipts { + size += receipt.Size() + } + for _, tx := range result.Transactions { + size += tx.Size() + } + q.resultSize = common.StorageSize(blockCacheSizeWeight)*size + + (1-common.StorageSize(blockCacheSizeWeight))*q.resultSize + } + // Using the newly calibrated resultsize, figure out the new throttle limit + // on the result cache + throttleThreshold := uint64((common.StorageSize(blockCacheMemory) + q.resultSize - 1) / q.resultSize) + throttleThreshold = q.resultCache.SetThrottleThreshold(throttleThreshold) + + // Log some info at certain times + if time.Since(q.lastStatLog) > 60*time.Second { + q.lastStatLog = time.Now() + info := q.Stats() + info = append(info, "throttle", throttleThreshold) + log.Info("Downloader queue stats", info...) + } + return results +} + +func (q *queue) Stats() []interface{} { + q.lock.RLock() + defer q.lock.RUnlock() + + return q.stats() +} + +func (q *queue) stats() []interface{} { + return []interface{}{ + "receiptTasks", q.receiptTaskQueue.Size(), + "blockTasks", q.blockTaskQueue.Size(), + "itemSize", q.resultSize, + } +} + +// ReserveHeaders reserves a set of headers for the given peer, skipping any +// previously failed batches. +func (q *queue) ReserveHeaders(p *peerConnection, count int) *fetchRequest { + q.lock.Lock() + defer q.lock.Unlock() + + // Short circuit if the peer's already downloading something (sanity check to + // not corrupt state) + if _, ok := q.headerPendPool[p.id]; ok { + return nil + } + // Retrieve a batch of hashes, skipping previously failed ones + send, skip := uint64(0), []uint64{} + for send == 0 && !q.headerTaskQueue.Empty() { + from, _ := q.headerTaskQueue.Pop() + if q.headerPeerMiss[p.id] != nil { + if _, ok := q.headerPeerMiss[p.id][from.(uint64)]; ok { + skip = append(skip, from.(uint64)) + continue + } + } + send = from.(uint64) + } + // Merge all the skipped batches back + for _, from := range skip { + q.headerTaskQueue.Push(from, -int64(from)) + } + // Assemble and return the block download request + if send == 0 { + return nil + } + request := &fetchRequest{ + Peer: p, + From: send, + Time: time.Now(), + } + q.headerPendPool[p.id] = request + return request +} + +// ReserveBodies reserves a set of body fetches for the given peer, skipping any +// previously failed downloads. Beside the next batch of needed fetches, it also +// returns a flag whether empty blocks were queued requiring processing. +func (q *queue) ReserveBodies(p *peerConnection, count int) (*fetchRequest, bool, bool) { + q.lock.Lock() + defer q.lock.Unlock() + + return q.reserveHeaders(p, count, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, bodyType) +} + +// ReserveReceipts reserves a set of receipt fetches for the given peer, skipping +// any previously failed downloads. Beside the next batch of needed fetches, it +// also returns a flag whether empty receipts were queued requiring importing. +func (q *queue) ReserveReceipts(p *peerConnection, count int) (*fetchRequest, bool, bool) { + q.lock.Lock() + defer q.lock.Unlock() + + return q.reserveHeaders(p, count, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, receiptType) +} + +// reserveHeaders reserves a set of data download operations for a given peer, +// skipping any previously failed ones. This method is a generic version used +// by the individual special reservation functions. +// +// Note, this method expects the queue lock to be already held for writing. The +// reason the lock is not obtained in here is because the parameters already need +// to access the queue, so they already need a lock anyway. +// +// Returns: +// item - the fetchRequest +// progress - whether any progress was made +// throttle - if the caller should throttle for a while +func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common.Hash]*types.Header, taskQueue *prque.Prque, + pendPool map[string]*fetchRequest, kind uint) (*fetchRequest, bool, bool) { + // Short circuit if the pool has been depleted, or if the peer's already + // downloading something (sanity check not to corrupt state) + if taskQueue.Empty() { + return nil, false, true + } + if _, ok := pendPool[p.id]; ok { + return nil, false, false + } + // Retrieve a batch of tasks, skipping previously failed ones + send := make([]*types.Header, 0, count) + skip := make([]*types.Header, 0) + progress := false + throttled := false + for proc := 0; len(send) < count && !taskQueue.Empty(); proc++ { + // the task queue will pop items in order, so the highest prio block + // is also the lowest block number. + h, _ := taskQueue.Peek() + header := h.(*types.Header) + // we can ask the resultcache if this header is within the + // "prioritized" segment of blocks. If it is not, we need to throttle + + stale, throttle, item, err := q.resultCache.AddFetch(header, q.mode == FastSync) + if stale { + // Don't put back in the task queue, this item has already been + // delivered upstream + taskQueue.PopItem() + progress = true + delete(taskPool, header.Hash()) + proc = proc - 1 + log.Error("Fetch reservation already delivered", "number", header.Number.Uint64()) + continue + } + if throttle { + // There are no resultslots available. Leave it in the task queue + // However, if there are any left as 'skipped', we should not tell + // the caller to throttle, since we still want some other + // peer to fetch those for us + throttled = len(skip) == 0 + break + } + if err != nil { + // this most definitely should _not_ happen + log.Warn("Failed to reserve headers", "err", err) + // There are no resultslots available. Leave it in the task queue + break + } + if item.Done(kind) { + // If it's a noop, we can skip this task + delete(taskPool, header.Hash()) + taskQueue.PopItem() + proc = proc - 1 + progress = true + continue + } + // Remove it from the task queue + taskQueue.PopItem() + // Otherwise unless the peer is known not to have the data, add to the retrieve list + if p.Lacks(header.Hash()) { + skip = append(skip, header) + } else { + send = append(send, header) + } + } + // Merge all the skipped headers back + for _, header := range skip { + taskQueue.Push(header, -int64(header.Number.Uint64())) + } + if q.resultCache.HasCompletedItems() { + // Wake Results, resultCache was modified + q.active.Signal() + } + // Assemble and return the block download request + if len(send) == 0 { + return nil, progress, throttled + } + request := &fetchRequest{ + Peer: p, + Headers: send, + Time: time.Now(), + } + pendPool[p.id] = request + return request, progress, throttled +} + +// CancelHeaders aborts a fetch request, returning all pending skeleton indexes to the queue. +func (q *queue) CancelHeaders(request *fetchRequest) { + q.lock.Lock() + defer q.lock.Unlock() + q.cancel(request, q.headerTaskQueue, q.headerPendPool) +} + +// CancelBodies aborts a body fetch request, returning all pending headers to the +// task queue. +func (q *queue) CancelBodies(request *fetchRequest) { + q.lock.Lock() + defer q.lock.Unlock() + q.cancel(request, q.blockTaskQueue, q.blockPendPool) +} + +// CancelReceipts aborts a body fetch request, returning all pending headers to +// the task queue. +func (q *queue) CancelReceipts(request *fetchRequest) { + q.lock.Lock() + defer q.lock.Unlock() + q.cancel(request, q.receiptTaskQueue, q.receiptPendPool) +} + +// Cancel aborts a fetch request, returning all pending hashes to the task queue. +func (q *queue) cancel(request *fetchRequest, taskQueue *prque.Prque, pendPool map[string]*fetchRequest) { + if request.From > 0 { + taskQueue.Push(request.From, -int64(request.From)) + } + for _, header := range request.Headers { + taskQueue.Push(header, -int64(header.Number.Uint64())) + } + delete(pendPool, request.Peer.id) +} + +// Revoke cancels all pending requests belonging to a given peer. This method is +// meant to be called during a peer drop to quickly reassign owned data fetches +// to remaining nodes. +func (q *queue) Revoke(peerID string) { + q.lock.Lock() + defer q.lock.Unlock() + + if request, ok := q.blockPendPool[peerID]; ok { + for _, header := range request.Headers { + q.blockTaskQueue.Push(header, -int64(header.Number.Uint64())) + } + delete(q.blockPendPool, peerID) + } + if request, ok := q.receiptPendPool[peerID]; ok { + for _, header := range request.Headers { + q.receiptTaskQueue.Push(header, -int64(header.Number.Uint64())) + } + delete(q.receiptPendPool, peerID) + } +} + +// ExpireHeaders checks for in flight requests that exceeded a timeout allowance, +// canceling them and returning the responsible peers for penalisation. +func (q *queue) ExpireHeaders(timeout time.Duration) map[string]int { + q.lock.Lock() + defer q.lock.Unlock() + + return q.expire(timeout, q.headerPendPool, q.headerTaskQueue, headerTimeoutMeter) +} + +// ExpireBodies checks for in flight block body requests that exceeded a timeout +// allowance, canceling them and returning the responsible peers for penalisation. +func (q *queue) ExpireBodies(timeout time.Duration) map[string]int { + q.lock.Lock() + defer q.lock.Unlock() + + return q.expire(timeout, q.blockPendPool, q.blockTaskQueue, bodyTimeoutMeter) +} + +// ExpireReceipts checks for in flight receipt requests that exceeded a timeout +// allowance, canceling them and returning the responsible peers for penalisation. +func (q *queue) ExpireReceipts(timeout time.Duration) map[string]int { + q.lock.Lock() + defer q.lock.Unlock() + + return q.expire(timeout, q.receiptPendPool, q.receiptTaskQueue, receiptTimeoutMeter) +} + +// expire is the generic check that move expired tasks from a pending pool back +// into a task pool, returning all entities caught with expired tasks. +// +// Note, this method expects the queue lock to be already held. The +// reason the lock is not obtained in here is because the parameters already need +// to access the queue, so they already need a lock anyway. +func (q *queue) expire(timeout time.Duration, pendPool map[string]*fetchRequest, taskQueue *prque.Prque, timeoutMeter metrics.Meter) map[string]int { + // Iterate over the expired requests and return each to the queue + expiries := make(map[string]int) + for id, request := range pendPool { + if time.Since(request.Time) > timeout { + // Update the metrics with the timeout + timeoutMeter.Mark(1) + + // Return any non satisfied requests to the pool + if request.From > 0 { + taskQueue.Push(request.From, -int64(request.From)) + } + for _, header := range request.Headers { + taskQueue.Push(header, -int64(header.Number.Uint64())) + } + // Add the peer to the expiry report along the number of failed requests + expiries[id] = len(request.Headers) + + // Remove the expired requests from the pending pool directly + delete(pendPool, id) + } + } + return expiries +} + +// DeliverHeaders injects a header retrieval response into the header results +// cache. This method either accepts all headers it received, or none of them +// if they do not map correctly to the skeleton. +// +// If the headers are accepted, the method makes an attempt to deliver the set +// of ready headers to the processor to keep the pipeline full. However it will +// not block to prevent stalling other pending deliveries. +func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh chan []*types.Header) (int, error) { + q.lock.Lock() + defer q.lock.Unlock() + + var logger log.Logger + if len(id) < 16 { + // Tests use short IDs, don't choke on them + logger = log.New("peer", id) + } else { + logger = log.New("peer", id[:16]) + } + // Short circuit if the data was never requested + request := q.headerPendPool[id] + if request == nil { + return 0, errNoFetchesPending + } + headerReqTimer.UpdateSince(request.Time) + delete(q.headerPendPool, id) + + // Ensure headers can be mapped onto the skeleton chain + target := q.headerTaskPool[request.From].Hash() + + accepted := len(headers) == MaxHeaderFetch + if accepted { + if headers[0].Number.Uint64() != request.From { + logger.Trace("First header broke chain ordering", "number", headers[0].Number, "hash", headers[0].Hash(), "expected", request.From) + accepted = false + } else if headers[len(headers)-1].Hash() != target { + logger.Trace("Last header broke skeleton structure ", "number", headers[len(headers)-1].Number, "hash", headers[len(headers)-1].Hash(), "expected", target) + accepted = false + } + } + if accepted { + parentHash := headers[0].Hash() + for i, header := range headers[1:] { + hash := header.Hash() + if want := request.From + 1 + uint64(i); header.Number.Uint64() != want { + logger.Warn("Header broke chain ordering", "number", header.Number, "hash", hash, "expected", want) + accepted = false + break + } + if parentHash != header.ParentHash { + logger.Warn("Header broke chain ancestry", "number", header.Number, "hash", hash) + accepted = false + break + } + // Set-up parent hash for next round + parentHash = hash + } + } + // If the batch of headers wasn't accepted, mark as unavailable + if !accepted { + logger.Trace("Skeleton filling not accepted", "from", request.From) + + miss := q.headerPeerMiss[id] + if miss == nil { + q.headerPeerMiss[id] = make(map[uint64]struct{}) + miss = q.headerPeerMiss[id] + } + miss[request.From] = struct{}{} + + q.headerTaskQueue.Push(request.From, -int64(request.From)) + return 0, errors.New("delivery not accepted") + } + // Clean up a successful fetch and try to deliver any sub-results + copy(q.headerResults[request.From-q.headerOffset:], headers) + delete(q.headerTaskPool, request.From) + + ready := 0 + for q.headerProced+ready < len(q.headerResults) && q.headerResults[q.headerProced+ready] != nil { + ready += MaxHeaderFetch + } + if ready > 0 { + // Headers are ready for delivery, gather them and push forward (non blocking) + process := make([]*types.Header, ready) + copy(process, q.headerResults[q.headerProced:q.headerProced+ready]) + + select { + case headerProcCh <- process: + logger.Trace("Pre-scheduled new headers", "count", len(process), "from", process[0].Number) + q.headerProced += len(process) + default: + } + } + // Check for termination and return + if len(q.headerTaskPool) == 0 { + q.headerContCh <- false + } + return len(headers), nil +} + +// DeliverBodies injects a block body retrieval response into the results queue. +// The method returns the number of blocks bodies accepted from the delivery and +// also wakes any threads waiting for data delivery. +func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, uncleLists [][]*types.Header) (int, error) { + q.lock.Lock() + defer q.lock.Unlock() + trieHasher := trie.NewStackTrie(nil) + validate := func(index int, header *types.Header) error { + if types.DeriveSha(types.Transactions(txLists[index]), trieHasher) != header.TxHash { + return errInvalidBody + } + if types.CalcUncleHash(uncleLists[index]) != header.UncleHash { + return errInvalidBody + } + return nil + } + + reconstruct := func(index int, result *fetchResult) { + result.Transactions = txLists[index] + result.Uncles = uncleLists[index] + result.SetBodyDone() + } + return q.deliver(id, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, + bodyReqTimer, len(txLists), validate, reconstruct) +} + +// DeliverReceipts injects a receipt retrieval response into the results queue. +// The method returns the number of transaction receipts accepted from the delivery +// and also wakes any threads waiting for data delivery. +func (q *queue) DeliverReceipts(id string, receiptList [][]*types.Receipt) (int, error) { + q.lock.Lock() + defer q.lock.Unlock() + trieHasher := trie.NewStackTrie(nil) + validate := func(index int, header *types.Header) error { + if types.DeriveSha(types.Receipts(receiptList[index]), trieHasher) != header.ReceiptHash { + return errInvalidReceipt + } + return nil + } + reconstruct := func(index int, result *fetchResult) { + result.Receipts = receiptList[index] + result.SetReceiptsDone() + } + return q.deliver(id, q.receiptTaskPool, q.receiptTaskQueue, q.receiptPendPool, + receiptReqTimer, len(receiptList), validate, reconstruct) +} + +// deliver injects a data retrieval response into the results queue. +// +// Note, this method expects the queue lock to be already held for writing. The +// reason this lock is not obtained in here is because the parameters already need +// to access the queue, so they already need a lock anyway. +func (q *queue) deliver(id string, taskPool map[common.Hash]*types.Header, + taskQueue *prque.Prque, pendPool map[string]*fetchRequest, reqTimer metrics.Timer, + results int, validate func(index int, header *types.Header) error, + reconstruct func(index int, result *fetchResult)) (int, error) { + // Short circuit if the data was never requested + request := pendPool[id] + if request == nil { + return 0, errNoFetchesPending + } + reqTimer.UpdateSince(request.Time) + delete(pendPool, id) + + // If no data items were retrieved, mark them as unavailable for the origin peer + if results == 0 { + for _, header := range request.Headers { + request.Peer.MarkLacking(header.Hash()) + } + } + // Assemble each of the results with their headers and retrieved data parts + var ( + accepted int + failure error + i int + hashes []common.Hash + ) + for _, header := range request.Headers { + // Short circuit assembly if no more fetch results are found + if i >= results { + break + } + // Validate the fields + if err := validate(i, header); err != nil { + failure = err + break + } + hashes = append(hashes, header.Hash()) + i++ + } + + for _, header := range request.Headers[:i] { + if res, stale, err := q.resultCache.GetDeliverySlot(header.Number.Uint64()); err == nil { + reconstruct(accepted, res) + } else { + // else: between here and above, some other peer filled this result, + // or it was indeed a no-op. This should not happen, but if it does it's + // not something to panic about + log.Error("Delivery stale", "stale", stale, "number", header.Number.Uint64(), "err", err) + failure = errStaleDelivery + } + // Clean up a successful fetch + delete(taskPool, hashes[accepted]) + accepted++ + } + // Return all failed or missing fetches to the queue + for _, header := range request.Headers[accepted:] { + taskQueue.Push(header, -int64(header.Number.Uint64())) + } + // Wake up Results + if accepted > 0 { + q.active.Signal() + } + if failure == nil { + return accepted, nil + } + // If none of the data was good, it's a stale delivery + if accepted > 0 { + return accepted, fmt.Errorf("partial failure: %v", failure) + } + return accepted, fmt.Errorf("%w: %v", failure, errStaleDelivery) +} + +// Prepare configures the result cache to allow accepting and caching inbound +// fetch results. +func (q *queue) Prepare(offset uint64, mode SyncMode) { + q.lock.Lock() + defer q.lock.Unlock() + + // Prepare the queue for sync results + q.resultCache.Prepare(offset) + q.mode = mode +} diff --git a/les/downloader/queue_test.go b/les/downloader/queue_test.go new file mode 100644 index 00000000..44b22085 --- /dev/null +++ b/les/downloader/queue_test.go @@ -0,0 +1,438 @@ +// 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 downloader + +import ( + "fmt" + "math/big" + "math/rand" + "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/log" + "github.com/ethereum/go-ethereum/params" +) + +// makeChain creates a chain of n blocks starting at and including parent. +// the returned hash chain is ordered head->parent. In addition, every 3rd block +// contains a transaction and every 5th an uncle to allow testing correct block +// reassembly. +func makeChain(n int, seed byte, parent *types.Block, empty bool) ([]*types.Block, []types.Receipts) { + blocks, receipts := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testDB, n, func(i int, block *core.BlockGen) { + block.SetCoinbase(common.Address{seed}) + // Add one tx to every secondblock + if !empty && i%2 == 0 { + signer := types.MakeSigner(params.TestChainConfig, block.Number()) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) + if err != nil { + panic(err) + } + block.AddTx(tx) + } + }) + return blocks, receipts +} + +type chainData struct { + blocks []*types.Block + offset int +} + +var chain *chainData +var emptyChain *chainData + +func init() { + // Create a chain of blocks to import + targetBlocks := 128 + blocks, _ := makeChain(targetBlocks, 0, testGenesis, false) + chain = &chainData{blocks, 0} + + blocks, _ = makeChain(targetBlocks, 0, testGenesis, true) + emptyChain = &chainData{blocks, 0} +} + +func (chain *chainData) headers() []*types.Header { + hdrs := make([]*types.Header, len(chain.blocks)) + for i, b := range chain.blocks { + hdrs[i] = b.Header() + } + return hdrs +} + +func (chain *chainData) Len() int { + return len(chain.blocks) +} + +func dummyPeer(id string) *peerConnection { + p := &peerConnection{ + id: id, + lacking: make(map[common.Hash]struct{}), + } + return p +} + +func TestBasics(t *testing.T) { + numOfBlocks := len(emptyChain.blocks) + numOfReceipts := len(emptyChain.blocks) / 2 + + q := newQueue(10, 10) + if !q.Idle() { + t.Errorf("new queue should be idle") + } + q.Prepare(1, FastSync) + if res := q.Results(false); len(res) != 0 { + t.Fatal("new queue should have 0 results") + } + + // Schedule a batch of headers + q.Schedule(chain.headers(), 1) + if q.Idle() { + t.Errorf("queue should not be idle") + } + if got, exp := q.PendingBlocks(), chain.Len(); got != exp { + t.Errorf("wrong pending block count, got %d, exp %d", got, exp) + } + // Only non-empty receipts get added to task-queue + if got, exp := q.PendingReceipts(), 64; got != exp { + t.Errorf("wrong pending receipt count, got %d, exp %d", got, exp) + } + // Items are now queued for downloading, next step is that we tell the + // queue that a certain peer will deliver them for us + { + peer := dummyPeer("peer-1") + fetchReq, _, throttle := q.ReserveBodies(peer, 50) + if !throttle { + // queue size is only 10, so throttling should occur + t.Fatal("should throttle") + } + // But we should still get the first things to fetch + if got, exp := len(fetchReq.Headers), 5; got != exp { + t.Fatalf("expected %d requests, got %d", exp, got) + } + if got, exp := fetchReq.Headers[0].Number.Uint64(), uint64(1); got != exp { + t.Fatalf("expected header %d, got %d", exp, got) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + { + peer := dummyPeer("peer-2") + fetchReq, _, throttle := q.ReserveBodies(peer, 50) + + // The second peer should hit throttling + if !throttle { + t.Fatalf("should throttle") + } + // And not get any fetches at all, since it was throttled to begin with + if fetchReq != nil { + t.Fatalf("should have no fetches, got %d", len(fetchReq.Headers)) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + { + // The receipt delivering peer should not be affected + // by the throttling of body deliveries + peer := dummyPeer("peer-3") + fetchReq, _, throttle := q.ReserveReceipts(peer, 50) + if !throttle { + // queue size is only 10, so throttling should occur + t.Fatal("should throttle") + } + // But we should still get the first things to fetch + if got, exp := len(fetchReq.Headers), 5; got != exp { + t.Fatalf("expected %d requests, got %d", exp, got) + } + if got, exp := fetchReq.Headers[0].Number.Uint64(), uint64(1); got != exp { + t.Fatalf("expected header %d, got %d", exp, got) + } + } + if exp, got := q.blockTaskQueue.Size(), numOfBlocks-10; exp != got { + t.Errorf("expected block task queue to be %d, got %d", exp, got) + } + if exp, got := q.receiptTaskQueue.Size(), numOfReceipts-5; exp != got { + t.Errorf("expected receipt task queue to be %d, got %d", exp, got) + } + if got, exp := q.resultCache.countCompleted(), 0; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } +} + +func TestEmptyBlocks(t *testing.T) { + numOfBlocks := len(emptyChain.blocks) + + q := newQueue(10, 10) + + q.Prepare(1, FastSync) + // Schedule a batch of headers + q.Schedule(emptyChain.headers(), 1) + if q.Idle() { + t.Errorf("queue should not be idle") + } + if got, exp := q.PendingBlocks(), len(emptyChain.blocks); got != exp { + t.Errorf("wrong pending block count, got %d, exp %d", got, exp) + } + if got, exp := q.PendingReceipts(), 0; got != exp { + t.Errorf("wrong pending receipt count, got %d, exp %d", got, exp) + } + // They won't be processable, because the fetchresults haven't been + // created yet + if got, exp := q.resultCache.countCompleted(), 0; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } + + // Items are now queued for downloading, next step is that we tell the + // queue that a certain peer will deliver them for us + // That should trigger all of them to suddenly become 'done' + { + // Reserve blocks + peer := dummyPeer("peer-1") + fetchReq, _, _ := q.ReserveBodies(peer, 50) + + // there should be nothing to fetch, blocks are empty + if fetchReq != nil { + t.Fatal("there should be no body fetch tasks remaining") + } + } + if q.blockTaskQueue.Size() != numOfBlocks-10 { + t.Errorf("expected block task queue to be %d, got %d", numOfBlocks-10, q.blockTaskQueue.Size()) + } + if q.receiptTaskQueue.Size() != 0 { + t.Errorf("expected receipt task queue to be %d, got %d", 0, q.receiptTaskQueue.Size()) + } + { + peer := dummyPeer("peer-3") + fetchReq, _, _ := q.ReserveReceipts(peer, 50) + + // there should be nothing to fetch, blocks are empty + if fetchReq != nil { + t.Fatal("there should be no receipt fetch tasks remaining") + } + } + if q.blockTaskQueue.Size() != numOfBlocks-10 { + t.Errorf("expected block task queue to be %d, got %d", numOfBlocks-10, q.blockTaskQueue.Size()) + } + if q.receiptTaskQueue.Size() != 0 { + t.Errorf("expected receipt task queue to be %d, got %d", 0, q.receiptTaskQueue.Size()) + } + if got, exp := q.resultCache.countCompleted(), 10; got != exp { + t.Errorf("wrong processable count, got %d, exp %d", got, exp) + } +} + +// XTestDelivery does some more extensive testing of events that happen, +// blocks that become known and peers that make reservations and deliveries. +// disabled since it's not really a unit-test, but can be executed to test +// some more advanced scenarios +func XTestDelivery(t *testing.T) { + // the outside network, holding blocks + blo, rec := makeChain(128, 0, testGenesis, false) + world := newNetwork() + world.receipts = rec + world.chain = blo + world.progress(10) + if false { + log.Root().SetHandler(log.StdoutHandler) + } + q := newQueue(10, 10) + var wg sync.WaitGroup + q.Prepare(1, FastSync) + wg.Add(1) + go func() { + // deliver headers + defer wg.Done() + c := 1 + for { + //fmt.Printf("getting headers from %d\n", c) + hdrs := world.headers(c) + l := len(hdrs) + //fmt.Printf("scheduling %d headers, first %d last %d\n", + // l, hdrs[0].Number.Uint64(), hdrs[len(hdrs)-1].Number.Uint64()) + q.Schedule(hdrs, uint64(c)) + c += l + } + }() + wg.Add(1) + go func() { + // collect results + defer wg.Done() + tot := 0 + for { + res := q.Results(true) + tot += len(res) + fmt.Printf("got %d results, %d tot\n", len(res), tot) + // Now we can forget about these + world.forget(res[len(res)-1].Header.Number.Uint64()) + } + }() + wg.Add(1) + go func() { + defer wg.Done() + // reserve body fetch + i := 4 + for { + peer := dummyPeer(fmt.Sprintf("peer-%d", i)) + f, _, _ := q.ReserveBodies(peer, rand.Intn(30)) + if f != nil { + var emptyList []*types.Header + var txs [][]*types.Transaction + var uncles [][]*types.Header + numToSkip := rand.Intn(len(f.Headers)) + for _, hdr := range f.Headers[0 : len(f.Headers)-numToSkip] { + txs = append(txs, world.getTransactions(hdr.Number.Uint64())) + uncles = append(uncles, emptyList) + } + time.Sleep(100 * time.Millisecond) + _, err := q.DeliverBodies(peer.id, txs, uncles) + if err != nil { + fmt.Printf("delivered %d bodies %v\n", len(txs), err) + } + } else { + i++ + time.Sleep(200 * time.Millisecond) + } + } + }() + go func() { + defer wg.Done() + // reserve receiptfetch + peer := dummyPeer("peer-3") + for { + f, _, _ := q.ReserveReceipts(peer, rand.Intn(50)) + if f != nil { + var rcs [][]*types.Receipt + for _, hdr := range f.Headers { + rcs = append(rcs, world.getReceipts(hdr.Number.Uint64())) + } + _, err := q.DeliverReceipts(peer.id, rcs) + if err != nil { + fmt.Printf("delivered %d receipts %v\n", len(rcs), err) + } + time.Sleep(100 * time.Millisecond) + } else { + time.Sleep(200 * time.Millisecond) + } + } + }() + wg.Add(1) + go func() { + defer wg.Done() + for i := 0; i < 50; i++ { + time.Sleep(300 * time.Millisecond) + //world.tick() + //fmt.Printf("trying to progress\n") + world.progress(rand.Intn(100)) + } + for i := 0; i < 50; i++ { + time.Sleep(2990 * time.Millisecond) + } + }() + wg.Add(1) + go func() { + defer wg.Done() + for { + time.Sleep(990 * time.Millisecond) + fmt.Printf("world block tip is %d\n", + world.chain[len(world.chain)-1].Header().Number.Uint64()) + fmt.Println(q.Stats()) + } + }() + wg.Wait() +} + +func newNetwork() *network { + var l sync.RWMutex + return &network{ + cond: sync.NewCond(&l), + offset: 1, // block 1 is at blocks[0] + } +} + +// represents the network +type network struct { + offset int + chain []*types.Block + receipts []types.Receipts + lock sync.RWMutex + cond *sync.Cond +} + +func (n *network) getTransactions(blocknum uint64) types.Transactions { + index := blocknum - uint64(n.offset) + return n.chain[index].Transactions() +} +func (n *network) getReceipts(blocknum uint64) types.Receipts { + index := blocknum - uint64(n.offset) + if got := n.chain[index].Header().Number.Uint64(); got != blocknum { + fmt.Printf("Err, got %d exp %d\n", got, blocknum) + panic("sd") + } + return n.receipts[index] +} + +func (n *network) forget(blocknum uint64) { + index := blocknum - uint64(n.offset) + n.chain = n.chain[index:] + n.receipts = n.receipts[index:] + n.offset = int(blocknum) +} +func (n *network) progress(numBlocks int) { + n.lock.Lock() + defer n.lock.Unlock() + //fmt.Printf("progressing...\n") + newBlocks, newR := makeChain(numBlocks, 0, n.chain[len(n.chain)-1], false) + n.chain = append(n.chain, newBlocks...) + n.receipts = append(n.receipts, newR...) + n.cond.Broadcast() +} + +func (n *network) headers(from int) []*types.Header { + numHeaders := 128 + var hdrs []*types.Header + index := from - n.offset + + for index >= len(n.chain) { + // wait for progress + n.cond.L.Lock() + //fmt.Printf("header going into wait\n") + n.cond.Wait() + index = from - n.offset + n.cond.L.Unlock() + } + n.lock.RLock() + defer n.lock.RUnlock() + for i, b := range n.chain[index:] { + hdrs = append(hdrs, b.Header()) + if i >= numHeaders { + break + } + } + return hdrs +} diff --git a/les/downloader/resultstore.go b/les/downloader/resultstore.go new file mode 100644 index 00000000..3162cd6d --- /dev/null +++ b/les/downloader/resultstore.go @@ -0,0 +1,194 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package downloader + +import ( + "fmt" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/core/types" +) + +// resultStore implements a structure for maintaining fetchResults, tracking their +// download-progress and delivering (finished) results. +type resultStore struct { + items []*fetchResult // Downloaded but not yet delivered fetch results + resultOffset uint64 // Offset of the first cached fetch result in the block chain + + // Internal index of first non-completed entry, updated atomically when needed. + // If all items are complete, this will equal length(items), so + // *important* : is not safe to use for indexing without checking against length + indexIncomplete int32 // atomic access + + // throttleThreshold is the limit up to which we _want_ to fill the + // results. If blocks are large, we want to limit the results to less + // than the number of available slots, and maybe only fill 1024 out of + // 8192 possible places. The queue will, at certain times, recalibrate + // this index. + throttleThreshold uint64 + + lock sync.RWMutex +} + +func newResultStore(size int) *resultStore { + return &resultStore{ + resultOffset: 0, + items: make([]*fetchResult, size), + throttleThreshold: uint64(size), + } +} + +// SetThrottleThreshold updates the throttling threshold based on the requested +// limit and the total queue capacity. It returns the (possibly capped) threshold +func (r *resultStore) SetThrottleThreshold(threshold uint64) uint64 { + r.lock.Lock() + defer r.lock.Unlock() + + limit := uint64(len(r.items)) + if threshold >= limit { + threshold = limit + } + r.throttleThreshold = threshold + return r.throttleThreshold +} + +// AddFetch adds a header for body/receipt fetching. This is used when the queue +// wants to reserve headers for fetching. +// +// It returns the following: +// stale - if true, this item is already passed, and should not be requested again +// throttled - if true, the store is at capacity, this particular header is not prio now +// item - the result to store data into +// err - any error that occurred +func (r *resultStore) AddFetch(header *types.Header, fastSync bool) (stale, throttled bool, item *fetchResult, err error) { + r.lock.Lock() + defer r.lock.Unlock() + + var index int + item, index, stale, throttled, err = r.getFetchResult(header.Number.Uint64()) + if err != nil || stale || throttled { + return stale, throttled, item, err + } + if item == nil { + item = newFetchResult(header, fastSync) + r.items[index] = item + } + return stale, throttled, item, err +} + +// GetDeliverySlot returns the fetchResult for the given header. If the 'stale' flag +// is true, that means the header has already been delivered 'upstream'. This method +// does not bubble up the 'throttle' flag, since it's moot at the point in time when +// the item is downloaded and ready for delivery +func (r *resultStore) GetDeliverySlot(headerNumber uint64) (*fetchResult, bool, error) { + r.lock.RLock() + defer r.lock.RUnlock() + + res, _, stale, _, err := r.getFetchResult(headerNumber) + return res, stale, err +} + +// getFetchResult returns the fetchResult corresponding to the given item, and +// the index where the result is stored. +func (r *resultStore) getFetchResult(headerNumber uint64) (item *fetchResult, index int, stale, throttle bool, err error) { + index = int(int64(headerNumber) - int64(r.resultOffset)) + throttle = index >= int(r.throttleThreshold) + stale = index < 0 + + if index >= len(r.items) { + err = fmt.Errorf("%w: index allocation went beyond available resultStore space "+ + "(index [%d] = header [%d] - resultOffset [%d], len(resultStore) = %d", errInvalidChain, + index, headerNumber, r.resultOffset, len(r.items)) + return nil, index, stale, throttle, err + } + if stale { + return nil, index, stale, throttle, nil + } + item = r.items[index] + return item, index, stale, throttle, nil +} + +// hasCompletedItems returns true if there are processable items available +// this method is cheaper than countCompleted +func (r *resultStore) HasCompletedItems() bool { + r.lock.RLock() + defer r.lock.RUnlock() + + if len(r.items) == 0 { + return false + } + if item := r.items[0]; item != nil && item.AllDone() { + return true + } + return false +} + +// countCompleted returns the number of items ready for delivery, stopping at +// the first non-complete item. +// +// The mthod assumes (at least) rlock is held. +func (r *resultStore) countCompleted() int { + // We iterate from the already known complete point, and see + // if any more has completed since last count + index := atomic.LoadInt32(&r.indexIncomplete) + for ; ; index++ { + if index >= int32(len(r.items)) { + break + } + result := r.items[index] + if result == nil || !result.AllDone() { + break + } + } + atomic.StoreInt32(&r.indexIncomplete, index) + return int(index) +} + +// GetCompleted returns the next batch of completed fetchResults +func (r *resultStore) GetCompleted(limit int) []*fetchResult { + r.lock.Lock() + defer r.lock.Unlock() + + completed := r.countCompleted() + if limit > completed { + limit = completed + } + results := make([]*fetchResult, limit) + copy(results, r.items[:limit]) + + // Delete the results from the cache and clear the tail. + copy(r.items, r.items[limit:]) + for i := len(r.items) - limit; i < len(r.items); i++ { + r.items[i] = nil + } + // Advance the expected block number of the first cache entry + r.resultOffset += uint64(limit) + atomic.AddInt32(&r.indexIncomplete, int32(-limit)) + + return results +} + +// Prepare initialises the offset with the given block number +func (r *resultStore) Prepare(offset uint64) { + r.lock.Lock() + defer r.lock.Unlock() + + if r.resultOffset < offset { + r.resultOffset = offset + } +} diff --git a/les/downloader/statesync.go b/les/downloader/statesync.go new file mode 100644 index 00000000..22f95215 --- /dev/null +++ b/les/downloader/statesync.go @@ -0,0 +1,635 @@ +// 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 downloader + +import ( + "fmt" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +// stateReq represents a batch of state fetch requests grouped together into +// a single data retrieval network packet. +type stateReq struct { + nItems uint16 // Number of items requested for download (max is 384, so uint16 is sufficient) + trieTasks map[string]*trieTask // Trie node download tasks to track previous attempts + codeTasks map[common.Hash]*codeTask // Byte code download tasks to track previous attempts + timeout time.Duration // Maximum round trip time for this to complete + timer *time.Timer // Timer to fire when the RTT timeout expires + peer *peerConnection // Peer that we're requesting from + delivered time.Time // Time when the packet was delivered (independent when we process it) + response [][]byte // Response data of the peer (nil for timeouts) + dropped bool // Flag whether the peer dropped off early +} + +// timedOut returns if this request timed out. +func (req *stateReq) timedOut() bool { + return req.response == nil +} + +// stateSyncStats is a collection of progress stats to report during a state trie +// sync to RPC requests as well as to display in user logs. +type stateSyncStats struct { + processed uint64 // Number of state entries processed + duplicate uint64 // Number of state entries downloaded twice + unexpected uint64 // Number of non-requested state entries received + pending uint64 // Number of still pending state entries +} + +// 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: + // If we tell the statesync to restart with a new root, we also need + // to wait for it to actually also start -- when old requests have timed + // out or been delivered + <-s.started + case <-d.quitCh: + s.err = errCancelStateFetch + close(s.done) + } + return s +} + +// stateFetcher manages the active state sync and accepts requests +// on its behalf. +func (d *Downloader) stateFetcher() { + for { + select { + case s := <-d.stateSyncStart: + for next := s; next != nil; { + next = d.runStateSync(next) + } + case <-d.stateCh: + // Ignore state responses while no sync is running. + case <-d.quitCh: + return + } + } +} + +// runStateSync runs a state synchronisation until it completes or another root +// hash is requested to be switched over to. +func (d *Downloader) runStateSync(s *stateSync) *stateSync { + var ( + active = make(map[string]*stateReq) // Currently in-flight requests + finished []*stateReq // Completed or failed requests + timeout = make(chan *stateReq) // Timed out active requests + ) + log.Trace("State sync starting", "root", s.root) + + defer func() { + // Cancel active request timers on exit. Also set peers to idle so they're + // available for the next sync. + for _, req := range active { + req.timer.Stop() + req.peer.SetNodeDataIdle(int(req.nItems), time.Now()) + } + }() + go s.run() + defer s.Cancel() + + // Listen for peer departure events to cancel assigned tasks + peerDrop := make(chan *peerConnection, 1024) + peerSub := s.d.peers.SubscribePeerDrops(peerDrop) + defer peerSub.Unsubscribe() + + for { + // Enable sending of the first buffered element if there is one. + var ( + deliverReq *stateReq + deliverReqCh chan *stateReq + ) + if len(finished) > 0 { + deliverReq = finished[0] + deliverReqCh = s.deliver + } + + select { + // The stateSync lifecycle: + case next := <-d.stateSyncStart: + d.spindownStateSync(active, finished, timeout, peerDrop) + return next + + case <-s.done: + d.spindownStateSync(active, finished, timeout, peerDrop) + return nil + + // Send the next finished request to the current sync: + case deliverReqCh <- deliverReq: + // Shift out the first request, but also set the emptied slot to nil for GC + copy(finished, finished[1:]) + finished[len(finished)-1] = nil + finished = finished[:len(finished)-1] + + // Handle incoming state packs: + case pack := <-d.stateCh: + // Discard any data not requested (or previously timed out) + req := active[pack.PeerId()] + if req == nil { + log.Debug("Unrequested node data", "peer", pack.PeerId(), "len", pack.Items()) + continue + } + // Finalize the request and queue up for processing + req.timer.Stop() + req.response = pack.(*statePack).states + req.delivered = time.Now() + + finished = append(finished, req) + delete(active, pack.PeerId()) + + // Handle dropped peer connections: + case p := <-peerDrop: + // Skip if no request is currently pending + req := active[p.id] + if req == nil { + continue + } + // Finalize the request and queue up for processing + req.timer.Stop() + req.dropped = true + req.delivered = time.Now() + + finished = append(finished, req) + delete(active, p.id) + + // Handle timed-out requests: + case req := <-timeout: + // If the peer is already requesting something else, ignore the stale timeout. + // This can happen when the timeout and the delivery happens simultaneously, + // causing both pathways to trigger. + if active[req.peer.id] != req { + continue + } + req.delivered = time.Now() + // Move the timed out data back into the download queue + finished = append(finished, req) + delete(active, req.peer.id) + + // Track outgoing state requests: + case req := <-d.trackStateReq: + // If an active request already exists for this peer, we have a problem. In + // theory the trie node schedule must never assign two requests to the same + // peer. In practice however, a peer might receive a request, disconnect and + // immediately reconnect before the previous times out. In this case the first + // request is never honored, alas we must not silently overwrite it, as that + // causes valid requests to go missing and sync to get stuck. + if old := active[req.peer.id]; old != nil { + log.Warn("Busy peer assigned new state fetch", "peer", old.peer.id) + // Move the previous request to the finished set + old.timer.Stop() + old.dropped = true + old.delivered = time.Now() + finished = append(finished, old) + } + // Start a timer to notify the sync loop if the peer stalled. + req.timer = time.AfterFunc(req.timeout, func() { + timeout <- req + }) + active[req.peer.id] = req + } + } +} + +// spindownStateSync 'drains' the outstanding requests; some will be delivered and other +// will time out. This is to ensure that when the next stateSync starts working, all peers +// are marked as idle and de facto _are_ idle. +func (d *Downloader) spindownStateSync(active map[string]*stateReq, finished []*stateReq, timeout chan *stateReq, peerDrop chan *peerConnection) { + log.Trace("State sync spinning down", "active", len(active), "finished", len(finished)) + for len(active) > 0 { + var ( + req *stateReq + reason string + ) + select { + // Handle (drop) incoming state packs: + case pack := <-d.stateCh: + req = active[pack.PeerId()] + reason = "delivered" + // Handle dropped peer connections: + case p := <-peerDrop: + req = active[p.id] + reason = "peerdrop" + // Handle timed-out requests: + case req = <-timeout: + reason = "timeout" + } + if req == nil { + continue + } + req.peer.log.Trace("State peer marked idle (spindown)", "req.items", int(req.nItems), "reason", reason) + req.timer.Stop() + delete(active, req.peer.id) + req.peer.SetNodeDataIdle(int(req.nItems), time.Now()) + } + // The 'finished' set contains deliveries that we were going to pass to processing. + // Those are now moot, but we still need to set those peers as idle, which would + // otherwise have been done after processing + for _, req := range finished { + req.peer.SetNodeDataIdle(int(req.nItems), time.Now()) + } +} + +// stateSync schedules requests for downloading a particular state trie defined +// by a given state root. +type stateSync struct { + d *Downloader // Downloader instance to access and manage current peerset + + root common.Hash // State root currently being synced + sched *trie.Sync // State trie sync scheduler defining the tasks + keccak crypto.KeccakState // Keccak256 hasher to verify deliveries with + + trieTasks map[string]*trieTask // Set of trie node tasks currently queued for retrieval, indexed by path + codeTasks map[common.Hash]*codeTask // Set of byte code tasks currently queued for retrieval, indexed by hash + + numUncommitted int + bytesUncommitted int + + started chan struct{} // Started is signalled once the sync loop starts + + deliver chan *stateReq // Delivery channel multiplexing peer responses + cancel chan struct{} // Channel to signal a termination request + cancelOnce sync.Once // Ensures cancel only ever gets called once + done chan struct{} // Channel to signal termination completion + err error // Any error hit during sync (set before completion) +} + +// trieTask represents a single trie node download task, containing a set of +// peers already attempted retrieval from to detect stalled syncs and abort. +type trieTask struct { + hash common.Hash + path [][]byte + attempts map[string]struct{} +} + +// codeTask represents a single byte code download task, containing a set of +// peers already attempted retrieval from to detect stalled syncs and abort. +type codeTask struct { + attempts map[string]struct{} +} + +// newStateSync creates a new state trie download scheduler. This method does not +// yet start the sync. The user needs to call run to initiate. +func newStateSync(d *Downloader, root common.Hash) *stateSync { + return &stateSync{ + d: d, + root: root, + sched: state.NewStateSync(root, d.stateDB, nil), + keccak: sha3.NewLegacyKeccak256().(crypto.KeccakState), + trieTasks: make(map[string]*trieTask), + codeTasks: make(map[common.Hash]*codeTask), + deliver: make(chan *stateReq), + cancel: make(chan struct{}), + done: make(chan struct{}), + started: make(chan struct{}), + } +} + +// run starts the task assignment and response processing loop, blocking until +// it finishes, and finally notifying any goroutines waiting for the loop to +// finish. +func (s *stateSync) run() { + close(s.started) + if s.d.snapSync { + s.err = s.d.SnapSyncer.Sync(s.root, s.cancel) + } else { + s.err = s.loop() + } + close(s.done) +} + +// Wait blocks until the sync is done or canceled. +func (s *stateSync) Wait() error { + <-s.done + return s.err +} + +// Cancel cancels the sync and waits until it has shut down. +func (s *stateSync) Cancel() error { + s.cancelOnce.Do(func() { + close(s.cancel) + }) + return s.Wait() +} + +// loop is the main event loop of a state trie sync. It it responsible for the +// assignment of new tasks to peers (including sending it to them) as well as +// for the processing of inbound data. Note, that the loop does not directly +// receive data from peers, rather those are buffered up in the downloader and +// pushed here async. The reason is to decouple processing from data receipt +// and timeouts. +func (s *stateSync) loop() (err error) { + // Listen for new peer events to assign tasks to them + newPeer := make(chan *peerConnection, 1024) + peerSub := s.d.peers.SubscribeNewPeers(newPeer) + defer peerSub.Unsubscribe() + defer func() { + cerr := s.commit(true) + if err == nil { + err = cerr + } + }() + + // Keep assigning new tasks until the sync completes or aborts + for s.sched.Pending() > 0 { + if err = s.commit(false); err != nil { + return err + } + s.assignTasks() + // Tasks assigned, wait for something to happen + select { + case <-newPeer: + // New peer arrived, try to assign it download tasks + + case <-s.cancel: + return errCancelStateFetch + + case <-s.d.cancelCh: + return errCanceled + + case req := <-s.deliver: + // Response, disconnect or timeout triggered, drop the peer if stalling + log.Trace("Received node data response", "peer", req.peer.id, "count", len(req.response), "dropped", req.dropped, "timeout", !req.dropped && req.timedOut()) + if req.nItems <= 2 && !req.dropped && req.timedOut() { + // 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) + 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) + req.peer.SetNodeDataIdle(delivered, req.delivered) + if err != nil { + log.Warn("Node data write error", "err", err) + return err + } + } + } + return nil +} + +func (s *stateSync) commit(force bool) error { + if !force && s.bytesUncommitted < ethdb.IdealBatchSize { + return nil + } + start := time.Now() + b := s.d.stateDB.NewBatch() + if err := s.sched.Commit(b); err != nil { + return err + } + if err := b.Write(); err != nil { + return fmt.Errorf("DB write error: %v", err) + } + s.updateStats(s.numUncommitted, 0, 0, time.Since(start)) + s.numUncommitted = 0 + s.bytesUncommitted = 0 + return nil +} + +// assignTasks attempts to assign new tasks to all idle peers, either from the +// batch currently being retried, or fetching new data from the trie sync itself. +func (s *stateSync) assignTasks() { + // Iterate over all idle peers and try to assign them state fetches + peers, _ := s.d.peers.NodeDataIdlePeers() + for _, p := range peers { + // Assign a batch of fetches proportional to the estimated latency/bandwidth + cap := p.NodeDataCapacity(s.d.peers.rates.TargetRoundTrip()) + req := &stateReq{peer: p, timeout: s.d.peers.rates.TargetTimeout()} + + nodes, _, codes := s.fillTasks(cap, req) + + // If the peer was assigned tasks to fetch, send the network request + if len(nodes)+len(codes) > 0 { + req.peer.log.Trace("Requesting batch of state data", "nodes", len(nodes), "codes", len(codes), "root", s.root) + select { + case s.d.trackStateReq <- req: + req.peer.FetchNodeData(append(nodes, codes...)) // Unified retrieval under eth/6x + case <-s.cancel: + case <-s.d.cancelCh: + } + } + } +} + +// fillTasks fills the given request object with a maximum of n state download +// tasks to send to the remote peer. +func (s *stateSync) fillTasks(n int, req *stateReq) (nodes []common.Hash, paths []trie.SyncPath, codes []common.Hash) { + // Refill available tasks from the scheduler. + if fill := n - (len(s.trieTasks) + len(s.codeTasks)); fill > 0 { + paths, hashes, codes := s.sched.Missing(fill) + for i, path := range paths { + s.trieTasks[path] = &trieTask{ + hash: hashes[i], + path: trie.NewSyncPath([]byte(path)), + attempts: make(map[string]struct{}), + } + } + for _, hash := range codes { + s.codeTasks[hash] = &codeTask{ + attempts: make(map[string]struct{}), + } + } + } + // Find tasks that haven't been tried with the request's peer. Prefer code + // over trie nodes as those can be written to disk and forgotten about. + nodes = make([]common.Hash, 0, n) + paths = make([]trie.SyncPath, 0, n) + codes = make([]common.Hash, 0, n) + + req.trieTasks = make(map[string]*trieTask, n) + req.codeTasks = make(map[common.Hash]*codeTask, n) + + for hash, t := range s.codeTasks { + // Stop when we've gathered enough requests + if len(nodes)+len(codes) == n { + break + } + // Skip any requests we've already tried from this peer + if _, ok := t.attempts[req.peer.id]; ok { + continue + } + // Assign the request to this peer + t.attempts[req.peer.id] = struct{}{} + codes = append(codes, hash) + req.codeTasks[hash] = t + delete(s.codeTasks, hash) + } + for path, t := range s.trieTasks { + // Stop when we've gathered enough requests + if len(nodes)+len(codes) == n { + break + } + // Skip any requests we've already tried from this peer + if _, ok := t.attempts[req.peer.id]; ok { + continue + } + // Assign the request to this peer + t.attempts[req.peer.id] = struct{}{} + + nodes = append(nodes, t.hash) + paths = append(paths, t.path) + + req.trieTasks[path] = t + delete(s.trieTasks, path) + } + req.nItems = uint16(len(nodes) + len(codes)) + return nodes, paths, codes +} + +// process iterates over a batch of delivered state data, injecting each item +// into a running state sync, re-queuing any items that were requested but not +// delivered. Returns whether the peer actually managed to deliver anything of +// value, and any error that occurred. +func (s *stateSync) process(req *stateReq) (int, error) { + // Collect processing stats and update progress if valid data was received + duplicate, unexpected, successful := 0, 0, 0 + + defer func(start time.Time) { + if duplicate > 0 || unexpected > 0 { + s.updateStats(0, duplicate, unexpected, time.Since(start)) + } + }(time.Now()) + + // Iterate over all the delivered data and inject one-by-one into the trie + for _, blob := range req.response { + hash, err := s.processNodeData(req.trieTasks, req.codeTasks, blob) + switch err { + case nil: + s.numUncommitted++ + s.bytesUncommitted += len(blob) + successful++ + case trie.ErrNotRequested: + unexpected++ + case trie.ErrAlreadyProcessed: + duplicate++ + default: + return successful, fmt.Errorf("invalid state node %s: %v", hash.TerminalString(), err) + } + } + // Put unfulfilled tasks back into the retry queue + npeers := s.d.peers.Len() + for path, task := range req.trieTasks { + // If the node did deliver something, missing items may be due to a protocol + // limit or a previous timeout + delayed delivery. Both cases should permit + // the node to retry the missing items (to avoid single-peer stalls). + if len(req.response) > 0 || req.timedOut() { + delete(task.attempts, req.peer.id) + } + // If we've requested the node too many times already, it may be a malicious + // sync where nobody has the right data. Abort. + if len(task.attempts) >= npeers { + return successful, fmt.Errorf("trie node %s failed with all peers (%d tries, %d peers)", task.hash.TerminalString(), len(task.attempts), npeers) + } + // Missing item, place into the retry queue. + s.trieTasks[path] = task + } + for hash, task := range req.codeTasks { + // If the node did deliver something, missing items may be due to a protocol + // limit or a previous timeout + delayed delivery. Both cases should permit + // the node to retry the missing items (to avoid single-peer stalls). + if len(req.response) > 0 || req.timedOut() { + delete(task.attempts, req.peer.id) + } + // If we've requested the node too many times already, it may be a malicious + // sync where nobody has the right data. Abort. + if len(task.attempts) >= npeers { + return successful, fmt.Errorf("byte code %s failed with all peers (%d tries, %d peers)", hash.TerminalString(), len(task.attempts), npeers) + } + // Missing item, place into the retry queue. + s.codeTasks[hash] = task + } + return successful, nil +} + +// processNodeData tries to inject a trie node data blob delivered from a remote +// peer into the state trie, returning whether anything useful was written or any +// error occurred. +// +// If multiple requests correspond to the same hash, this method will inject the +// blob as a result for the first one only, leaving the remaining duplicates to +// be fetched again. +func (s *stateSync) processNodeData(nodeTasks map[string]*trieTask, codeTasks map[common.Hash]*codeTask, blob []byte) (common.Hash, error) { + var hash common.Hash + s.keccak.Reset() + s.keccak.Write(blob) + s.keccak.Read(hash[:]) + + if _, present := codeTasks[hash]; present { + err := s.sched.ProcessCode(trie.CodeSyncResult{ + Hash: hash, + Data: blob, + }) + delete(codeTasks, hash) + return hash, err + } + for path, task := range nodeTasks { + if task.hash == hash { + err := s.sched.ProcessNode(trie.NodeSyncResult{ + Path: path, + Data: blob, + }) + delete(nodeTasks, path) + return hash, err + } + } + return common.Hash{}, trie.ErrNotRequested +} + +// updateStats bumps the various state sync progress counters and displays a log +// message for the user to see. +func (s *stateSync) updateStats(written, duplicate, unexpected int, duration time.Duration) { + s.d.syncStatsLock.Lock() + defer s.d.syncStatsLock.Unlock() + + s.d.syncStatsState.pending = uint64(s.sched.Pending()) + s.d.syncStatsState.processed += uint64(written) + s.d.syncStatsState.duplicate += uint64(duplicate) + s.d.syncStatsState.unexpected += uint64(unexpected) + + if written > 0 || duplicate > 0 || unexpected > 0 { + log.Info("Imported new state entries", "count", written, "elapsed", common.PrettyDuration(duration), "processed", s.d.syncStatsState.processed, "pending", s.d.syncStatsState.pending, "trieretry", len(s.trieTasks), "coderetry", len(s.codeTasks), "duplicate", s.d.syncStatsState.duplicate, "unexpected", s.d.syncStatsState.unexpected) + } + //if written > 0 { + //rawdb.WriteFastTrieProgress(s.d.stateDB, s.d.syncStatsState.processed) + //} +} diff --git a/les/downloader/testchain_test.go b/les/downloader/testchain_test.go new file mode 100644 index 00000000..400eec94 --- /dev/null +++ b/les/downloader/testchain_test.go @@ -0,0 +1,235 @@ +// 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 downloader + +import ( + "fmt" + "math/big" + "sync" + + "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/params" +) + +// Test chain parameters. +var ( + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddress = crypto.PubkeyToAddress(testKey.PublicKey) + testDB = rawdb.NewMemoryDatabase() + + gspec = core.Genesis{ + Alloc: core.GenesisAlloc{testAddress: {Balance: big.NewInt(1000000000000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + testGenesis = gspec.MustCommit(testDB) +) + +// The common prefix of all test chains: +var testChainBase = newTestChain(blockCacheMaxItems+200, testGenesis) + +// Different forks on top of the base chain: +var testChainForkLightA, testChainForkLightB, testChainForkHeavy *testChain + +func init() { + var forkLen = int(fullMaxForkAncestry + 50) + var wg sync.WaitGroup + wg.Add(3) + go func() { testChainForkLightA = testChainBase.makeFork(forkLen, false, 1); wg.Done() }() + go func() { testChainForkLightB = testChainBase.makeFork(forkLen, false, 2); wg.Done() }() + go func() { testChainForkHeavy = testChainBase.makeFork(forkLen, true, 3); wg.Done() }() + wg.Wait() +} + +type testChain struct { + genesis *types.Block + chain []common.Hash + headerm map[common.Hash]*types.Header + blockm map[common.Hash]*types.Block + receiptm map[common.Hash][]*types.Receipt + tdm map[common.Hash]*big.Int +} + +// newTestChain creates a blockchain of the given length. +func newTestChain(length int, genesis *types.Block) *testChain { + tc := new(testChain).copy(length) + tc.genesis = genesis + tc.chain = append(tc.chain, genesis.Hash()) + tc.headerm[tc.genesis.Hash()] = tc.genesis.Header() + tc.tdm[tc.genesis.Hash()] = tc.genesis.Difficulty() + tc.blockm[tc.genesis.Hash()] = tc.genesis + tc.generate(length-1, 0, genesis, false) + return tc +} + +// makeFork creates a fork on top of the test chain. +func (tc *testChain) makeFork(length int, heavy bool, seed byte) *testChain { + fork := tc.copy(tc.len() + length) + fork.generate(length, seed, tc.headBlock(), heavy) + return fork +} + +// shorten creates a copy of the chain with the given length. It panics if the +// length is longer than the number of available blocks. +func (tc *testChain) shorten(length int) *testChain { + if length > tc.len() { + panic(fmt.Errorf("can't shorten test chain to %d blocks, it's only %d blocks long", length, tc.len())) + } + return tc.copy(length) +} + +func (tc *testChain) copy(newlen int) *testChain { + cpy := &testChain{ + genesis: tc.genesis, + headerm: make(map[common.Hash]*types.Header, newlen), + blockm: make(map[common.Hash]*types.Block, newlen), + receiptm: make(map[common.Hash][]*types.Receipt, newlen), + tdm: make(map[common.Hash]*big.Int, newlen), + } + for i := 0; i < len(tc.chain) && i < newlen; i++ { + hash := tc.chain[i] + cpy.chain = append(cpy.chain, tc.chain[i]) + cpy.tdm[hash] = tc.tdm[hash] + cpy.blockm[hash] = tc.blockm[hash] + cpy.headerm[hash] = tc.headerm[hash] + cpy.receiptm[hash] = tc.receiptm[hash] + } + return cpy +} + +// generate creates a chain of n blocks starting at and including parent. +// the returned hash chain is ordered head->parent. In addition, every 22th block +// contains a transaction and every 5th an uncle to allow testing correct block +// reassembly. +func (tc *testChain) generate(n int, seed byte, parent *types.Block, heavy bool) { + // start := time.Now() + // defer func() { fmt.Printf("test chain generated in %v\n", time.Since(start)) }() + + blocks, receipts := core.GenerateChain(params.TestChainConfig, parent, ethash.NewFaker(), testDB, n, func(i int, block *core.BlockGen) { + block.SetCoinbase(common.Address{seed}) + // If a heavy chain is requested, delay blocks to raise difficulty + if heavy { + block.OffsetTime(-1) + } + // Include transactions to the miner to make blocks more interesting. + if parent == tc.genesis && i%22 == 0 { + signer := types.MakeSigner(params.TestChainConfig, block.Number()) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) + if err != nil { + panic(err) + } + block.AddTx(tx) + } + // if the block number is a multiple of 5, add a bonus uncle to the block + if i > 0 && i%5 == 0 { + block.AddUncle(&types.Header{ + ParentHash: block.PrevBlock(i - 1).Hash(), + Number: big.NewInt(block.Number().Int64() - 1), + }) + } + }) + + // Convert the block-chain into a hash-chain and header/block maps + td := new(big.Int).Set(tc.td(parent.Hash())) + for i, b := range blocks { + td := td.Add(td, b.Difficulty()) + hash := b.Hash() + tc.chain = append(tc.chain, hash) + tc.blockm[hash] = b + tc.headerm[hash] = b.Header() + tc.receiptm[hash] = receipts[i] + tc.tdm[hash] = new(big.Int).Set(td) + } +} + +// len returns the total number of blocks in the chain. +func (tc *testChain) len() int { + return len(tc.chain) +} + +// headBlock returns the head of the chain. +func (tc *testChain) headBlock() *types.Block { + return tc.blockm[tc.chain[len(tc.chain)-1]] +} + +// td returns the total difficulty of the given block. +func (tc *testChain) td(hash common.Hash) *big.Int { + return tc.tdm[hash] +} + +// headersByHash returns headers in order from the given hash. +func (tc *testChain) headersByHash(origin common.Hash, amount int, skip int, reverse bool) []*types.Header { + num, _ := tc.hashToNumber(origin) + return tc.headersByNumber(num, amount, skip, reverse) +} + +// headersByNumber returns headers from the given number. +func (tc *testChain) headersByNumber(origin uint64, amount int, skip int, reverse bool) []*types.Header { + result := make([]*types.Header, 0, amount) + + if !reverse { + for num := origin; num < uint64(len(tc.chain)) && len(result) < amount; num += uint64(skip) + 1 { + if header, ok := tc.headerm[tc.chain[int(num)]]; ok { + result = append(result, header) + } + } + } else { + for num := int64(origin); num >= 0 && len(result) < amount; num -= int64(skip) + 1 { + if header, ok := tc.headerm[tc.chain[int(num)]]; ok { + result = append(result, header) + } + } + } + return result +} + +// receipts returns the receipts of the given block hashes. +func (tc *testChain) receipts(hashes []common.Hash) [][]*types.Receipt { + results := make([][]*types.Receipt, 0, len(hashes)) + for _, hash := range hashes { + if receipt, ok := tc.receiptm[hash]; ok { + results = append(results, receipt) + } + } + return results +} + +// bodies returns the block bodies of the given block hashes. +func (tc *testChain) bodies(hashes []common.Hash) ([][]*types.Transaction, [][]*types.Header) { + transactions := make([][]*types.Transaction, 0, len(hashes)) + uncles := make([][]*types.Header, 0, len(hashes)) + for _, hash := range hashes { + if block, ok := tc.blockm[hash]; ok { + transactions = append(transactions, block.Transactions()) + uncles = append(uncles, block.Uncles()) + } + } + return transactions, uncles +} + +func (tc *testChain) hashToNumber(target common.Hash) (uint64, bool) { + for num, hash := range tc.chain { + if hash == target { + return uint64(num), true + } + } + return 0, false +} diff --git a/eth/downloader/types.go b/les/downloader/types.go similarity index 98% rename from eth/downloader/types.go rename to les/downloader/types.go index f74d7996..ff70bfa0 100644 --- a/eth/downloader/types.go +++ b/les/downloader/types.go @@ -19,7 +19,7 @@ package downloader import ( "fmt" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) // peerDropFn is a callback type for dropping a peer detected as malicious. diff --git a/les/enr_entry.go b/les/enr_entry.go new file mode 100644 index 00000000..307313fb --- /dev/null +++ b/les/enr_entry.go @@ -0,0 +1,72 @@ +// 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/core/forkid" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/ethereum/go-ethereum/p2p/enode" + "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). + VfxVersion uint + Rest []rlp.RawValue `rlp:"tail"` +} + +func (lesEntry) ENRKey() string { return "les" } + +// ethEntry is the "eth" ENR entry. This is redeclared here to avoid depending on package eth. +type ethEntry struct { + ForkID forkid.ID + Tail []rlp.RawValue `rlp:"tail"` +} + +func (ethEntry) ENRKey() string { return "eth" } + +// setupDiscovery creates the node discovery source for the eth protocol. +func (eth *LightEthereum) setupDiscovery() (enode.Iterator, error) { + it := enode.NewFairMix(0) + + // Enable DNS discovery. + if len(eth.config.EthDiscoveryURLs) != 0 { + client := dnsdisc.NewClient(dnsdisc.Config{}) + dns, err := client.NewIterator(eth.config.EthDiscoveryURLs...) + if err != nil { + return nil, err + } + it.AddSource(dns) + } + + // Enable DHT. + if eth.udpEnabled { + it.AddSource(eth.p2pServer.DiscV5.RandomNodes()) + } + + forkFilter := forkid.NewFilter(eth.blockchain) + iterator := enode.Filter(it, func(n *enode.Node) bool { return nodeIsServer(forkFilter, n) }) + return iterator, nil +} + +// nodeIsServer checks whether n is an LES server node. +func nodeIsServer(forkFilter forkid.Filter, n *enode.Node) bool { + var les lesEntry + var eth ethEntry + return n.Load(&les) == nil && n.Load(ð) == nil && forkFilter(eth.ForkID) == nil +} diff --git a/les/fetcher.go b/les/fetcher.go index b9c8cf5f..6861eebc 100644 --- a/les/fetcher.go +++ b/les/fetcher.go @@ -18,874 +18,550 @@ package les import ( "math/big" + "math/rand" "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "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/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/fetcher" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" ) const ( - blockDelayTimeout = time.Second * 10 // timeout for a peer to announce a head that has already been confirmed by others - maxNodeCount = 20 // maximum number of fetcherTreeNode entries remembered for each peer - serverStateAvailable = 100 // number of recent blocks where state availability is assumed + blockDelayTimeout = 10 * time.Second // Timeout for retrieving the headers from the peer + gatherSlack = 100 * time.Millisecond // Interval used to collate almost-expired requests + cachedAnnosThreshold = 64 // The maximum queued announcements ) -// lightFetcher implements retrieval of newly announced headers. It also provides a peerHasBlock function for the -// 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 { - handler *clientHandler - chain *light.LightChain - - lock sync.Mutex // lock protects access to the fetcher's internal state variables except sent requests - maxConfirmedTd *big.Int - peers map[*peer]*fetcherPeerInfo - lastUpdateStats *updateStatsEntry - 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 - requestTriggered bool - requestTrigger chan struct{} - lastTrustedHeader *types.Header - - closeCh chan struct{} - wg sync.WaitGroup -} - -// fetcherPeerInfo holds fetcher-specific information about each active peer -type fetcherPeerInfo struct { - root, lastAnnounced *fetcherTreeNode - nodeCnt int - confirmedTd *big.Int - bestConfirmed *fetcherTreeNode - nodeByHash map[common.Hash]*fetcherTreeNode - firstUpdateStats *updateStatsEntry -} - -// fetcherTreeNode is a node of a tree that holds information about blocks recently -// announced and confirmed by a certain peer. Each new announce message from a peer -// adds nodes to the tree, based on the previous announced head and the reorg depth. -// There are three possible states for a tree node: -// - announced: not downloaded (known) yet, but we know its head, number and td -// - intermediate: not known, hash and td are empty, they are filled out when it becomes known -// - known: both announced by this peer and downloaded (from any peer). -// This structure makes it possible to always know which peer has a certain block, -// which is necessary for selecting a suitable peer for ODR requests and also for -// canonizing new heads. It also helps to always download the minimum necessary -// amount of headers with a single request. -type fetcherTreeNode struct { - hash common.Hash - number uint64 - td *big.Int - known, requested bool - parent *fetcherTreeNode - children []*fetcherTreeNode +// announce represents an new block announcement from the les server. +type announce struct { + data *announceData + trust bool + peerid enode.ID } -// fetchRequest represents a header download request -type fetchRequest struct { - hash common.Hash - amount uint64 - peer *peer - sent mclock.AbsTime - timeout bool +// request represents a record when the header request is sent. +type request struct { + reqid uint64 + peerid enode.ID + sendAt time.Time + hash common.Hash } -// fetchResponse represents a header download response -type fetchResponse struct { - reqID uint64 +// response represents a response packet from network as well as a channel +// to return all un-requested data. +type response struct { + reqid uint64 headers []*types.Header - peer *peer + peerid enode.ID + remain chan []*types.Header } -// newLightFetcher creates a new light fetcher -func newLightFetcher(h *clientHandler) *lightFetcher { - f := &lightFetcher{ - 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), - requestTrigger: make(chan struct{}, 1), - syncDone: make(chan *peer), - closeCh: make(chan struct{}), - maxConfirmedTd: big.NewInt(0), - } - h.backend.peers.notify(f) +// fetcherPeer holds the fetcher-specific information for each active peer +type fetcherPeer struct { + latest *announceData // The latest announcement sent from the peer - f.wg.Add(1) - go f.syncLoop() - return f + // These following two fields can track the latest announces + // from the peer with limited size for caching. We hold the + // assumption that all enqueued announces are td-monotonic. + announces map[common.Hash]*announce // Announcement map + fifo []common.Hash // FIFO announces list } -func (f *lightFetcher) close() { - close(f.closeCh) - f.wg.Wait() -} - -// syncLoop is the main event loop of the light fetcher -func (f *lightFetcher) syncLoop() { - defer f.wg.Done() - for { - select { - case <-f.closeCh: - return - // request loop keeps running until no further requests are necessary or possible - case <-f.requestTrigger: - f.lock.Lock() - var ( - rq *distReq - reqID uint64 - syncing bool - ) - if !f.syncing { - rq, reqID, syncing = f.nextRequest() - } - f.requestTriggered = rq != nil - f.lock.Unlock() - - if rq != nil { - if _, ok := <-f.handler.backend.reqDist.queue(rq); ok { - if syncing { - f.lock.Lock() - f.syncing = true - f.lock.Unlock() - } else { - go func() { - time.Sleep(softRequestTimeout) - f.reqMu.Lock() - req, ok := f.requested[reqID] - if ok { - req.timeout = true - f.requested[reqID] = req - } - f.reqMu.Unlock() - // keep starting new requests while possible - f.requestTrigger <- struct{}{} - }() - } - } else { - f.requestTrigger <- struct{}{} - } - } - case reqID := <-f.timeoutChn: - f.reqMu.Lock() - req, ok := f.requested[reqID] - if ok { - delete(f.requested, reqID) - } - f.reqMu.Unlock() - if ok { - 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.handler.removePeer(req.peer.id) - } - case resp := <-f.deliverChn: - f.reqMu.Lock() - req, ok := f.requested[resp.reqID] - if ok && req.peer != resp.peer { - ok = false - } - if ok { - delete(f.requested, resp.reqID) - } - f.reqMu.Unlock() - if ok { - 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.handler.removePeer(resp.peer.id) - } - f.lock.Unlock() - case p := <-f.syncDone: - f.lock.Lock() - p.Log().Debug("Done synchronising with peer") - f.checkSyncedHeaders(p) - f.syncing = false - f.lock.Unlock() - f.requestTrigger <- struct{}{} // f.requestTriggered is always true here - } - } -} - -// registerPeer adds a new peer to the fetcher's peer set -func (f *lightFetcher) registerPeer(p *peer) { - p.lock.Lock() - p.hasBlock = func(hash common.Hash, number uint64, hasState bool) bool { - return f.peerHasBlock(p, hash, number, hasState) - } - p.lock.Unlock() - - f.lock.Lock() - defer f.lock.Unlock() - f.peers[p] = &fetcherPeerInfo{nodeByHash: make(map[common.Hash]*fetcherTreeNode)} -} - -// unregisterPeer removes a new peer from the fetcher's peer set -func (f *lightFetcher) unregisterPeer(p *peer) { - p.lock.Lock() - p.hasBlock = nil - p.lock.Unlock() - - f.lock.Lock() - defer f.lock.Unlock() - - // check for potential timed out block delay statistics - f.checkUpdateStats(p, nil) - delete(f.peers, p) -} - -// announce processes a new announcement message received from a peer, adding new -// nodes to the peer's block tree and removing old nodes if necessary -func (f *lightFetcher) announce(p *peer, head *announceData) { - f.lock.Lock() - defer f.lock.Unlock() - p.Log().Debug("Received new announcement", "number", head.Number, "hash", head.Hash, "reorg", head.ReorgDepth) - - fp := f.peers[p] - if fp == nil { - p.Log().Debug("Announcement from unknown peer") - return - } - - 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.handler.removePeer(p.id) +// addAnno enqueues an new trusted announcement. If the queued announces overflow, +// evict from the oldest. +func (fp *fetcherPeer) addAnno(anno *announce) { + // Short circuit if the anno already exists. In normal case it should + // never happen since only monotonic anno is accepted. But the adversary + // may feed us fake announces with higher td but same hash. In this case, + // ignore the anno anyway. + hash := anno.data.Hash + if _, exist := fp.announces[hash]; exist { return } + fp.announces[hash] = anno + fp.fifo = append(fp.fifo, hash) - n := fp.lastAnnounced - for i := uint64(0); i < head.ReorgDepth; i++ { - if n == nil { - break + // Evict oldest if the announces are oversized. + if len(fp.fifo)-cachedAnnosThreshold > 0 { + for i := 0; i < len(fp.fifo)-cachedAnnosThreshold; i++ { + delete(fp.announces, fp.fifo[i]) } - n = n.parent - } - // n is now the reorg common ancestor, add a new branch of nodes - if n != nil && (head.Number >= n.number+maxNodeCount || head.Number <= n.number) { - // if announced head block height is lower or same as n or too far from it to add - // intermediate nodes then discard previous announcement info and trigger a resync - n = nil - fp.nodeCnt = 0 - fp.nodeByHash = make(map[common.Hash]*fetcherTreeNode) + copy(fp.fifo, fp.fifo[len(fp.fifo)-cachedAnnosThreshold:]) + fp.fifo = fp.fifo[:cachedAnnosThreshold] } - // check if the node count is too high to add new nodes, discard oldest ones if necessary - if n != nil { - // 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 { - f.chain.LockChain() - defer f.chain.UnlockChain() - locked = true - } - // 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.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 - break - } - } - fp.deleteNode(fp.root) - if n == fp.root { - n = newRoot - } - fp.root = newRoot - if newRoot == nil || !f.checkKnownNode(p, newRoot) { - fp.bestConfirmed = nil - fp.confirmedTd = nil - } +} - if n == nil { - break - } - } - if n != nil { - for n.number < head.Number { - nn := &fetcherTreeNode{number: n.number + 1, parent: n} - n.children = append(n.children, nn) - n = nn - fp.nodeCnt++ - } - n.hash = head.Hash - n.td = head.Td - fp.nodeByHash[n.hash] = n +// forwardAnno removes all announces from the map with a number lower than +// the provided threshold. +func (fp *fetcherPeer) forwardAnno(td *big.Int) []*announce { + var ( + cutset int + evicted []*announce + ) + for ; cutset < len(fp.fifo); cutset++ { + anno := fp.announces[fp.fifo[cutset]] + if anno == nil { + continue // In theory it should never ever happen } - } - - 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 { - fp.deleteNode(fp.root) + if anno.data.Td.Cmp(td) > 0 { + break } - n = &fetcherTreeNode{hash: head.Hash, number: head.Number, td: head.Td} - fp.root = n - fp.nodeCnt++ - fp.nodeByHash[n.hash] = n - fp.bestConfirmed = nil - fp.confirmedTd = nil + evicted = append(evicted, anno) + delete(fp.announces, anno.data.Hash) } - - f.checkKnownNode(p, n) - p.lock.Lock() - p.headInfo = head - fp.lastAnnounced = n - p.lock.Unlock() - f.checkUpdateStats(p, nil) - if !f.requestTriggered { - f.requestTriggered = true - f.requestTrigger <- struct{}{} + if cutset > 0 { + copy(fp.fifo, fp.fifo[cutset:]) + fp.fifo = fp.fifo[:len(fp.fifo)-cutset] } + return evicted } -// peerHasBlock returns true if we can assume the peer knows the given block -// based on its announcements -func (f *lightFetcher) peerHasBlock(p *peer, hash common.Hash, number uint64, hasState bool) bool { - f.lock.Lock() - defer f.lock.Unlock() - - fp := f.peers[p] - if fp == nil || fp.root == nil { - return false - } +// lightFetcher implements retrieval of newly announced headers. It reuses +// the eth.BlockFetcher as the underlying fetcher but adding more additional +// rules: e.g. evict "timeout" peers. +type lightFetcher struct { + // Various handlers + ulc *ulc + chaindb ethdb.Database + reqDist *requestDistributor + peerset *serverPeerSet // The global peerset of light client which shared by all components + chain *light.LightChain // The local light chain which maintains the canonical header chain. + fetcher *fetcher.BlockFetcher // The underlying fetcher which takes care block header retrieval. + + // Peerset maintained by fetcher + plock sync.RWMutex + peers map[enode.ID]*fetcherPeer + + // Various channels + announceCh chan *announce + requestCh chan *request + deliverCh chan *response + syncDone chan *types.Header - if hasState { - if fp.lastAnnounced == nil || fp.lastAnnounced.number > number+serverStateAvailable { - return false - } - } + closeCh chan struct{} + wg sync.WaitGroup - if f.syncing { - // always return true when syncing - // false positives are acceptable, a more sophisticated condition can be implemented later - return true - } + // Callback + synchronise func(peer *serverPeer) - if number >= fp.root.number { - // it is recent enough that if it is known, is should be in the peer's block tree - return fp.nodeByHash[hash] != nil - } - f.chain.LockChain() - defer f.chain.UnlockChain() - // if it's older than the peer's block tree root but it's in the same canonical chain - // as the root, we can still be sure the peer knows it - // - // 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.handler.backend.chainDb, fp.root.number) == fp.root.hash && rawdb.ReadCanonicalHash(f.handler.backend.chainDb, number) == hash + // Test fields or hooks + newHeadHook func(*types.Header) } -// requestAmount calculates the amount of headers to be downloaded starting -// from a certain head backwards -func (f *lightFetcher) requestAmount(p *peer, n *fetcherTreeNode) uint64 { - amount := uint64(0) - nn := n - for nn != nil && !f.checkKnownNode(p, nn) { - nn = nn.parent - amount++ - } - if nn == nil { - amount = n.number +// newLightFetcher creates a light fetcher instance. +func newLightFetcher(chain *light.LightChain, engine consensus.Engine, peers *serverPeerSet, ulc *ulc, chaindb ethdb.Database, reqDist *requestDistributor, syncFn func(p *serverPeer)) *lightFetcher { + // Construct the fetcher by offering all necessary APIs + validator := func(header *types.Header) error { + // Disable seal verification explicitly if we are running in ulc mode. + return engine.VerifyHeader(chain, header, ulc == nil) + } + heighter := func() uint64 { return chain.CurrentHeader().Number.Uint64() } + dropper := func(id string) { peers.unregister(id) } + inserter := func(headers []*types.Header) (int, error) { + // Disable PoW checking explicitly if we are running in ulc mode. + checkFreq := 1 + if ulc != nil { + checkFreq = 0 + } + return chain.InsertHeaderChain(headers, checkFreq) } - return amount + f := &lightFetcher{ + ulc: ulc, + peerset: peers, + chaindb: chaindb, + chain: chain, + reqDist: reqDist, + fetcher: fetcher.NewBlockFetcher(true, chain.GetHeaderByHash, nil, validator, nil, heighter, inserter, nil, dropper), + peers: make(map[enode.ID]*fetcherPeer), + synchronise: syncFn, + announceCh: make(chan *announce), + requestCh: make(chan *request), + deliverCh: make(chan *response), + syncDone: make(chan *types.Header), + closeCh: make(chan struct{}), + } + peers.subscribe(f) + return f } -// requestedID tells if a certain reqID has been requested by the fetcher -func (f *lightFetcher) requestedID(reqID uint64) bool { - f.reqMu.RLock() - _, ok := f.requested[reqID] - f.reqMu.RUnlock() - return ok +func (f *lightFetcher) start() { + f.wg.Add(1) + f.fetcher.Start() + go f.mainloop() } -// nextRequest selects the peer and announced head to be requested next, amount -// to be downloaded starting from the head backwards is also returned -func (f *lightFetcher) nextRequest() (*distReq, uint64, bool) { - var ( - bestHash common.Hash - bestAmount uint64 - bestTd *big.Int - bestSyncing bool - ) - bestHash, bestAmount, bestTd, bestSyncing = f.findBestRequest() - - if bestTd == f.maxConfirmedTd { - return nil, 0, false - } - - var rq *distReq - reqID := genReqID() - if bestSyncing { - rq = f.newFetcherDistReqForSync(bestHash) - } else { - rq = f.newFetcherDistReq(bestHash, reqID, bestAmount) - } - return rq, reqID, bestSyncing +func (f *lightFetcher) stop() { + close(f.closeCh) + f.fetcher.Stop() + f.wg.Wait() } -// 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 +// registerPeer adds an new peer to the fetcher's peer set +func (f *lightFetcher) registerPeer(p *serverPeer) { + f.plock.Lock() + defer f.plock.Unlock() - 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 + f.peers[p.ID()] = &fetcherPeer{announces: make(map[common.Hash]*announce)} } -// 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 -} +// unregisterPeer removes the specified peer from the fetcher's peer set +func (f *lightFetcher) unregisterPeer(p *serverPeer) { + f.plock.Lock() + defer f.plock.Unlock() -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) - p.Log().Debug("Synchronisation started") - f.handler.synchronise(p) - f.syncDone <- p - }() - return nil - }, - } + delete(f.peers, p.ID()) } -// 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] - if n != nil { - n.requested = 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) } - }, - } -} +// peer returns the peer from the fetcher peerset. +func (f *lightFetcher) peer(id enode.ID) *fetcherPeer { + f.plock.RLock() + defer f.plock.RUnlock() -// deliverHeaders delivers header download request responses for processing -func (f *lightFetcher) deliverHeaders(peer *peer, reqID uint64, headers []*types.Header) { - f.deliverChn <- fetchResponse{reqID: reqID, headers: headers, peer: peer} + return f.peers[id] } -// processResponse processes header download request responses, returns true if successful -func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) bool { - if uint64(len(resp.headers)) != req.amount || resp.headers[0].Hash() != req.hash { - req.peer.Log().Debug("Response content mismatch", "requested", len(resp.headers), "reqfrom", resp.headers[0], "delivered", req.amount, "delfrom", req.hash) - return false - } - headers := make([]*types.Header, req.amount) - for i, header := range resp.headers { - headers[int(req.amount)-1-i] = header - } +// forEachPeer iterates the fetcher peerset, abort the iteration if the +// callback returns false. +func (f *lightFetcher) forEachPeer(check func(id enode.ID, p *fetcherPeer) bool) { + f.plock.RLock() + defer f.plock.RUnlock() - if _, err := f.chain.InsertHeaderChain(headers, 1); err != nil { - if err == consensus.ErrFutureBlock { - return true - } - log.Debug("Failed to insert header chain", "err", err) - return false - } - tds := make([]*big.Int, len(headers)) - for i, header := range headers { - td := f.chain.GetTd(header.Hash(), header.Number.Uint64()) - if td == nil { - log.Debug("Total difficulty not found for header", "index", i+1, "number", header.Number, "hash", header.Hash()) - return false + for id, peer := range f.peers { + if !check(id, peer) { + return } - tds[i] = td } - f.newHeaders(headers, tds) - return true } -// newHeaders updates the block trees of all active peers according to a newly -// downloaded and validated batch or headers -func (f *lightFetcher) newHeaders(headers []*types.Header, tds []*big.Int) { - var maxTd *big.Int +// mainloop is the main event loop of the light fetcher, which is responsible for +// - announcement maintenance(ulc) +// If we are running in ultra light client mode, then all announcements from +// the trusted servers are maintained. If the same announcements from trusted +// servers reach the threshold, then the relevant header is requested for retrieval. +// +// - block header retrieval +// Whenever we receive announce with higher td compared with local chain, the +// request will be made for header retrieval. +// +// - re-sync trigger +// If the local chain lags too much, then the fetcher will enter "synchronise" +// mode to retrieve missing headers in batch. +func (f *lightFetcher) mainloop() { + defer f.wg.Done() - for p, fp := range f.peers { - if !f.checkAnnouncedHeaders(fp, headers, tds) { - p.Log().Debug("Inconsistent announcement") - go f.handler.removePeer(p.id) - } - if fp.confirmedTd != nil && (maxTd == nil || maxTd.Cmp(fp.confirmedTd) > 0) { - maxTd = fp.confirmedTd - } - } + var ( + syncInterval = uint64(1) // Interval used to trigger a light resync. + syncing bool // Indicator whether the client is syncing - if maxTd != nil { - f.updateMaxConfirmedTd(maxTd) - } -} + ulc = f.ulc != nil + headCh = make(chan core.ChainHeadEvent, 100) + fetching = make(map[uint64]*request) + requestTimer = time.NewTimer(0) -// checkAnnouncedHeaders updates peer's block tree if necessary after validating -// a batch of headers. It searches for the latest header in the batch that has a -// matching tree node (if any), and if it has not been marked as known already, -// sets it and its parents to known (even those which are older than the currently -// validated ones). Return value shows if all hashes, numbers and Tds matched -// correctly to the announced values (otherwise the peer should be dropped). -func (f *lightFetcher) checkAnnouncedHeaders(fp *fetcherPeerInfo, headers []*types.Header, tds []*big.Int) bool { - var ( - n *fetcherTreeNode - header *types.Header - td *big.Int + // Local status + localHead = f.chain.CurrentHeader() + localTd = f.chain.GetTd(localHead.Hash(), localHead.Number.Uint64()) ) + sub := f.chain.SubscribeChainHeadEvent(headCh) + defer sub.Unsubscribe() + + // reset updates the local status with given header. + reset := func(header *types.Header) { + localHead = header + localTd = f.chain.GetTd(header.Hash(), header.Number.Uint64()) + } + // trustedHeader returns an indicator whether the header is regarded as + // trusted. If we are running in the ulc mode, only when we receive enough + // same announcement from trusted server, the header will be trusted. + trustedHeader := func(hash common.Hash, number uint64) (bool, []enode.ID) { + var ( + agreed []enode.ID + trusted bool + ) + f.forEachPeer(func(id enode.ID, p *fetcherPeer) bool { + if anno := p.announces[hash]; anno != nil && anno.trust && anno.data.Number == number { + agreed = append(agreed, id) + if 100*len(agreed)/len(f.ulc.keys) >= f.ulc.fraction { + trusted = true + return false // abort iteration + } + } + return true + }) + return trusted, agreed + } + for { + select { + case anno := <-f.announceCh: + peerid, data := anno.peerid, anno.data + log.Debug("Received new announce", "peer", peerid, "number", data.Number, "hash", data.Hash, "reorg", data.ReorgDepth) - for i := len(headers) - 1; ; i-- { - if i < 0 { - if n == nil { - // no more headers and nothing to match - return true + peer := f.peer(peerid) + if peer == nil { + log.Debug("Receive announce from unknown peer", "peer", peerid) + continue } - // we ran out of recently delivered headers but have not reached a node known by this peer yet, continue matching - hash, number := header.ParentHash, header.Number.Uint64()-1 - td = f.chain.GetTd(hash, number) - header = f.chain.GetHeader(hash, number) - if header == nil || td == nil { - log.Error("Missing parent of validated header", "hash", hash, "number", number) - return false + // Announced tds should be strictly monotonic, drop the peer if + // the announce is out-of-order. + if peer.latest != nil && data.Td.Cmp(peer.latest.Td) <= 0 { + f.peerset.unregister(peerid.String()) + log.Debug("Non-monotonic td", "peer", peerid, "current", data.Td, "previous", peer.latest.Td) + continue } - } else { - header = headers[i] - td = tds[i] - } - hash := header.Hash() - number := header.Number.Uint64() - if n == nil { - n = fp.nodeByHash[hash] - } - if n != nil { - if n.td == nil { - // node was unannounced - if nn := fp.nodeByHash[hash]; nn != nil { - // if there was already a node with the same hash, continue there and drop this one - nn.children = append(nn.children, n.children...) - n.children = nil - fp.deleteNode(n) - n = nn - } else { - n.hash = hash - n.td = td - fp.nodeByHash[hash] = n + peer.latest = data + + // Filter out any stale announce, the local chain is ahead of announce + if localTd != nil && data.Td.Cmp(localTd) <= 0 { + continue + } + peer.addAnno(anno) + + // If we are not syncing, try to trigger a single retrieval or re-sync + if !ulc && !syncing { + // Two scenarios lead to re-sync: + // - reorg happens + // - local chain lags + // We can't retrieve the parent of the announce by single retrieval + // in both cases, so resync is necessary. + if data.Number > localHead.Number.Uint64()+syncInterval || data.ReorgDepth > 0 { + syncing = true + go f.startSync(peerid) + log.Debug("Trigger light sync", "peer", peerid, "local", localHead.Number, "localhash", localHead.Hash(), "remote", data.Number, "remotehash", data.Hash) + continue } + f.fetcher.Notify(peerid.String(), data.Hash, data.Number, time.Now(), f.requestHeaderByHash(peerid), nil) + log.Debug("Trigger header retrieval", "peer", peerid, "number", data.Number, "hash", data.Hash) } - // check if it matches the header - if n.hash != hash || n.number != number || n.td.Cmp(td) != 0 { - // peer has previously made an invalid announcement - return false + // Keep collecting announces from trusted server even we are syncing. + if ulc && anno.trust { + // Notify underlying fetcher to retrieve header or trigger a resync if + // we have receive enough announcements from trusted server. + trusted, agreed := trustedHeader(data.Hash, data.Number) + if trusted && !syncing { + if data.Number > localHead.Number.Uint64()+syncInterval || data.ReorgDepth > 0 { + syncing = true + go f.startSync(peerid) + log.Debug("Trigger trusted light sync", "local", localHead.Number, "localhash", localHead.Hash(), "remote", data.Number, "remotehash", data.Hash) + continue + } + p := agreed[rand.Intn(len(agreed))] + f.fetcher.Notify(p.String(), data.Hash, data.Number, time.Now(), f.requestHeaderByHash(p), nil) + log.Debug("Trigger trusted header retrieval", "number", data.Number, "hash", data.Hash) + } } - if n.known { - // we reached a known node that matched our expectations, return with success - return true + + case req := <-f.requestCh: + fetching[req.reqid] = req // Tracking all in-flight requests for response latency statistic. + if len(fetching) == 1 { + f.rescheduleTimer(fetching, requestTimer) } - n.known = true - if fp.confirmedTd == nil || td.Cmp(fp.confirmedTd) > 0 { - fp.confirmedTd = td - fp.bestConfirmed = n + + case <-requestTimer.C: + for reqid, request := range fetching { + if time.Since(request.sendAt) > blockDelayTimeout-gatherSlack { + delete(fetching, reqid) + f.peerset.unregister(request.peerid.String()) + log.Debug("Request timeout", "peer", request.peerid, "reqid", reqid) + } } - n = n.parent - if n == nil { - return true + f.rescheduleTimer(fetching, requestTimer) + + case resp := <-f.deliverCh: + if req := fetching[resp.reqid]; req != nil { + delete(fetching, resp.reqid) + f.rescheduleTimer(fetching, requestTimer) + + // The underlying fetcher does not check the consistency of request and response. + // The adversary can send the fake announces with invalid hash and number but always + // delivery some mismatched header. So it can't be punished by the underlying fetcher. + // We have to add two more rules here to detect. + if len(resp.headers) != 1 { + f.peerset.unregister(req.peerid.String()) + log.Debug("Deliver more than requested", "peer", req.peerid, "reqid", req.reqid) + continue + } + if resp.headers[0].Hash() != req.hash { + f.peerset.unregister(req.peerid.String()) + log.Debug("Deliver invalid header", "peer", req.peerid, "reqid", req.reqid) + continue + } + resp.remain <- f.fetcher.FilterHeaders(resp.peerid.String(), resp.headers, time.Now()) + } else { + // Discard the entire packet no matter it's a timeout response or unexpected one. + resp.remain <- resp.headers } - } - } -} -// checkSyncedHeaders updates peer's block tree after synchronisation by marking -// downloaded headers as known. If none of the announced headers are found after -// syncing, the peer is dropped. -func (f *lightFetcher) checkSyncedHeaders(p *peer) { - fp := f.peers[p] - if fp == nil { - p.Log().Debug("Unknown peer to check sync headers") - return - } - 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 - } - node = node.parent - } - // Now node is the latest downloaded/approved header after syncing - if node == nil { - p.Log().Debug("Synchronisation failed") - go f.handler.removePeer(p.id) - return - } - header := f.chain.GetHeader(node.hash, node.number) - f.newHeaders([]*types.Header{header}, []*big.Int{td}) -} + case ev := <-headCh: + // Short circuit if we are still syncing. + if syncing { + continue + } + reset(ev.Block.Header()) + + // Clean stale announcements from les-servers. + var droplist []enode.ID + f.forEachPeer(func(id enode.ID, p *fetcherPeer) bool { + removed := p.forwardAnno(localTd) + for _, anno := range removed { + if header := f.chain.GetHeaderByHash(anno.data.Hash); header != nil { + if header.Number.Uint64() != anno.data.Number { + droplist = append(droplist, id) + break + } + // In theory td should exists. + td := f.chain.GetTd(anno.data.Hash, anno.data.Number) + if td != nil && td.Cmp(anno.data.Td) != 0 { + droplist = append(droplist, id) + break + } + } + } + return true + }) + for _, id := range droplist { + f.peerset.unregister(id.String()) + log.Debug("Kicked out peer for invalid announcement") + } + if f.newHeadHook != nil { + f.newHeadHook(localHead) + } -// 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() + case origin := <-f.syncDone: + syncing = false // Reset the status - if f.lastTrustedHeader == nil { - return current, unapprovedHashes - } + // Rewind all untrusted headers for ulc mode. + if ulc { + head := f.chain.CurrentHeader() + ancestor := rawdb.FindCommonAncestor(f.chaindb, origin, head) - 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 - } + // Recap the ancestor with genesis header in case the ancestor + // is not found. It can happen the original head is before the + // checkpoint while the synced headers are after it. In this + // case there is no ancestor between them. + if ancestor == nil { + ancestor = f.chain.Genesis().Header() + } + var untrusted []common.Hash + for head.Number.Cmp(ancestor.Number) > 0 { + hash, number := head.Hash(), head.Number.Uint64() + if trusted, _ := trustedHeader(hash, number); trusted { + break + } + untrusted = append(untrusted, hash) + head = f.chain.GetHeader(head.ParentHash, number-1) + if head == nil { + break // all the synced headers will be dropped + } + } + if len(untrusted) > 0 { + for i, j := 0, len(untrusted)-1; i < j; i, j = i+1, j-1 { + untrusted[i], untrusted[j] = untrusted[j], untrusted[i] + } + f.chain.Rollback(untrusted) + } + } + // Reset local status. + reset(f.chain.CurrentHeader()) + if f.newHeadHook != nil { + f.newHeadHook(localHead) + } + log.Debug("light sync finished", "number", localHead.Number, "hash", localHead.Hash()) - for current.Hash() == commonAncestor.Hash() { - if f.isTrustedHash(current.Hash()) { - break + case <-f.closeCh: + return } - 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) -// If it was not known previously but found in the database, sets its known flag -func (f *lightFetcher) checkKnownNode(p *peer, n *fetcherTreeNode) bool { - if n.known { - return true - } - td := f.chain.GetTd(n.hash, n.number) - if td == nil { - return false - } - header := f.chain.GetHeader(n.hash, n.number) - // check the availability of both header and td because reads are not protected by chain db mutex - // Note: returning false is always safe here - if header == nil { - return false +// announce processes a new announcement message received from a peer. +func (f *lightFetcher) announce(p *serverPeer, head *announceData) { + select { + case f.announceCh <- &announce{peerid: p.ID(), trust: p.trusted, data: head}: + case <-f.closeCh: + return } +} - fp := f.peers[p] - if fp == nil { - p.Log().Debug("Unknown peer to check known nodes") - return false - } - if !f.checkAnnouncedHeaders(fp, []*types.Header{header}, []*big.Int{td}) { - p.Log().Debug("Inconsistent announcement") - go f.handler.removePeer(p.id) +// trackRequest sends a reqID to main loop for in-flight request tracking. +func (f *lightFetcher) trackRequest(peerid enode.ID, reqid uint64, hash common.Hash) { + select { + case f.requestCh <- &request{reqid: reqid, peerid: peerid, sendAt: time.Now(), hash: hash}: + case <-f.closeCh: } - if fp.confirmedTd != nil { - f.updateMaxConfirmedTd(fp.confirmedTd) - } - return n.known } -// deleteNode deletes a node and its child subtrees from a peer's block tree -func (fp *fetcherPeerInfo) deleteNode(n *fetcherTreeNode) { - if n.parent != nil { - for i, nn := range n.parent.children { - if nn == n { - n.parent.children = append(n.parent.children[:i], n.parent.children[i+1:]...) - break - } - } - } - for { - if n.td != nil { - delete(fp.nodeByHash, n.hash) - } - fp.nodeCnt-- - if len(n.children) == 0 { - return - } - for i, nn := range n.children { - if i == 0 { - n = nn - } else { - fp.deleteNode(nn) - } +// requestHeaderByHash constructs a header retrieval request and sends it to +// local request distributor. +// +// Note, we rely on the underlying eth/fetcher to retrieve and validate the +// response, so that we have to obey the rule of eth/fetcher which only accepts +// the response from given peer. +func (f *lightFetcher) requestHeaderByHash(peerid enode.ID) func(common.Hash) error { + return func(hash common.Hash) error { + req := &distReq{ + getCost: func(dp distPeer) uint64 { return dp.(*serverPeer).getRequestCost(GetBlockHeadersMsg, 1) }, + canSend: func(dp distPeer) bool { return dp.(*serverPeer).ID() == peerid }, + request: func(dp distPeer) func() { + peer, id := dp.(*serverPeer), rand.Uint64() + cost := peer.getRequestCost(GetBlockHeadersMsg, 1) + peer.fcServer.QueuedRequest(id, cost) + + return func() { + f.trackRequest(peer.ID(), id, hash) + peer.requestHeadersByHash(id, hash, 1, 0, false) + } + }, } + f.reqDist.queue(req) + return nil } } -// updateStatsEntry items form a linked list that is expanded with a new item every time a new head with a higher Td -// than the previous one has been downloaded and validated. The list contains a series of maximum confirmed Td values -// and the time these values have been confirmed, both increasing monotonically. A maximum confirmed Td is calculated -// both globally for all peers and also for each individual peer (meaning that the given peer has announced the head -// and it has also been downloaded from any peer, either before or after the given announcement). -// The linked list has a global tail where new confirmed Td entries are added and a separate head for each peer, -// pointing to the next Td entry that is higher than the peer's max confirmed Td (nil if it has already confirmed -// the current global head). -type updateStatsEntry struct { - time mclock.AbsTime - td *big.Int - next *updateStatsEntry -} +// startSync invokes synchronisation callback to start syncing. +func (f *lightFetcher) startSync(id enode.ID) { + defer func(header *types.Header) { + f.syncDone <- header + }(f.chain.CurrentHeader()) -// updateMaxConfirmedTd updates the block delay statistics of active peers. Whenever a new highest Td is confirmed, -// adds it to the end of a linked list together with the time it has been confirmed. Then checks which peers have -// already confirmed a head with the same or higher Td (which counts as zero block delay) and updates their statistics. -// Those who have not confirmed such a head by now will be updated by a subsequent checkUpdateStats call with a -// positive block delay value. -func (f *lightFetcher) updateMaxConfirmedTd(td *big.Int) { - if f.maxConfirmedTd == nil || td.Cmp(f.maxConfirmedTd) > 0 { - f.maxConfirmedTd = td - newEntry := &updateStatsEntry{ - time: mclock.Now(), - td: td, - } - if f.lastUpdateStats != nil { - f.lastUpdateStats.next = newEntry - } - - f.lastUpdateStats = newEntry - for p := range f.peers { - f.checkUpdateStats(p, newEntry) - } + peer := f.peerset.peer(id.String()) + if peer == nil || peer.onlyAnnounce { + return } + f.synchronise(peer) } -// checkUpdateStats checks those peers who have not confirmed a certain highest Td (or a larger one) by the time it -// has been confirmed by another peer. If they have confirmed such a head by now, their stats are updated with the -// block delay which is (this peer's confirmation time)-(first confirmation time). After blockDelayTimeout has passed, -// the stats are updated with blockDelayTimeout value. In either case, the confirmed or timed out updateStatsEntry -// items are removed from the head of the linked list. -// If a new entry has been added to the global tail, it is passed as a parameter here even though this function -// assumes that it has already been added, so that if the peer's list is empty (all heads confirmed, head is nil), -// it can set the new head to newEntry. -func (f *lightFetcher) checkUpdateStats(p *peer, newEntry *updateStatsEntry) { - now := mclock.Now() - fp := f.peers[p] - if fp == nil { - p.Log().Debug("Unknown peer to check update stats") - return - } +// deliverHeaders delivers header download request responses for processing +func (f *lightFetcher) deliverHeaders(peer *serverPeer, reqid uint64, headers []*types.Header) []*types.Header { + remain := make(chan []*types.Header, 1) + select { + case f.deliverCh <- &response{reqid: reqid, headers: headers, peerid: peer.ID(), remain: remain}: + case <-f.closeCh: + return nil + } + return <-remain +} - if newEntry != nil && fp.firstUpdateStats == nil { - fp.firstUpdateStats = newEntry - } - for fp.firstUpdateStats != nil && fp.firstUpdateStats.time <= now-mclock.AbsTime(blockDelayTimeout) { - f.handler.backend.serverPool.adjustBlockDelay(p.poolEntry, blockDelayTimeout) - fp.firstUpdateStats = fp.firstUpdateStats.next +// rescheduleTimer resets the specified timeout timer to the next request timeout. +func (f *lightFetcher) rescheduleTimer(requests map[uint64]*request, timer *time.Timer) { + // Short circuit if no inflight requests + if len(requests) == 0 { + timer.Stop() + return } - if fp.confirmedTd != nil { - for fp.firstUpdateStats != nil && fp.firstUpdateStats.td.Cmp(fp.confirmedTd) <= 0 { - f.handler.backend.serverPool.adjustBlockDelay(p.poolEntry, time.Duration(now-fp.firstUpdateStats.time)) - fp.firstUpdateStats = fp.firstUpdateStats.next + // Otherwise find the earliest expiring request + earliest := time.Now() + for _, req := range requests { + if earliest.After(req.sendAt) { + earliest = req.sendAt } } + timer.Reset(blockDelayTimeout - time.Since(earliest)) } diff --git a/eth/fetcher/fetcher.go b/les/fetcher/block_fetcher.go similarity index 57% rename from eth/fetcher/fetcher.go rename to les/fetcher/block_fetcher.go index 69a6632c..86b3c552 100644 --- a/eth/fetcher/fetcher.go +++ b/les/fetcher/block_fetcher.go @@ -14,7 +14,10 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package fetcher contains the block announcement based synchronisation. +// This is a temporary package whilst working on the eth/66 blocking refactors. +// After that work is done, les needs to be refactored to use the new package, +// or alternatively use a stripped down version of it. Either way, we need to +// keep the changes scoped so duplicating temporarily seems the sanest. package fetcher import ( @@ -22,27 +25,54 @@ import ( "math/rand" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/trie" ) const ( - arriveTimeout = 500 * time.Millisecond // Time allowance before an announced block is explicitly requested + lightTimeout = time.Millisecond // Time allowance before an announced header is explicitly requested + arriveTimeout = 500 * time.Millisecond // Time allowance before an announced block/transaction is explicitly requested gatherSlack = 100 * time.Millisecond // Interval used to collate almost-expired announces with fetches - fetchTimeout = 5 * time.Second // Maximum allotted time to return an explicitly requested block - maxUncleDist = 7 // Maximum allowed backward distance from the chain head - maxQueueDist = 32 // Maximum allowed distance from the chain head to queue - hashLimit = 256 // Maximum number of unique blocks a peer may have announced - blockLimit = 64 // Maximum number of unique blocks a peer may have delivered + fetchTimeout = 5 * time.Second // Maximum allotted time to return an explicitly requested block/transaction +) + +const ( + maxUncleDist = 7 // Maximum allowed backward distance from the chain head + maxQueueDist = 32 // Maximum allowed distance from the chain head to queue + hashLimit = 256 // Maximum number of unique blocks or headers a peer may have announced + blockLimit = 64 // Maximum number of unique blocks a peer may have delivered ) var ( - errTerminated = errors.New("terminated") + blockAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/in", nil) + blockAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/announces/out", nil) + blockAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/drop", nil) + blockAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/dos", nil) + + blockBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/in", nil) + blockBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/broadcasts/out", nil) + blockBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/drop", nil) + blockBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/dos", nil) + + headerFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/headers", nil) + bodyFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/bodies", nil) + + headerFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/in", nil) + headerFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/out", nil) + bodyFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/in", nil) + bodyFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/out", nil) ) +var errTerminated = errors.New("terminated") + +// HeaderRetrievalFn is a callback type for retrieving a header from the local chain. +type HeaderRetrievalFn func(common.Hash) *types.Header + // blockRetrievalFn is a callback type for retrieving a block from the local chain. type blockRetrievalFn func(common.Hash) *types.Block @@ -61,15 +91,18 @@ type blockBroadcasterFn func(block *types.Block, propagate bool) // chainHeightFn is a callback type to retrieve the current chain height. type chainHeightFn func() uint64 +// headersInsertFn is a callback type to insert a batch of headers into the local chain. +type headersInsertFn func(headers []*types.Header) (int, error) + // chainInsertFn is a callback type to insert a batch of blocks into the local chain. type chainInsertFn func(types.Blocks) (int, error) // peerDropFn is a callback type for dropping a peer detected as malicious. type peerDropFn func(id string) -// announce is the hash notification of the availability of a new block in the +// blockAnnounce is the hash notification of the availability of a new block in the // network. -type announce struct { +type blockAnnounce struct { hash common.Hash // Hash of the block being announced number uint64 // Number of the block being announced (0 = unknown | old protocol) header *types.Header // Header of the block partially reassembled (new protocol) @@ -97,18 +130,38 @@ type bodyFilterTask struct { time time.Time // Arrival time of the blocks' contents } -// inject represents a schedules import operation. -type inject struct { +// blockOrHeaderInject represents a schedules import operation. +type blockOrHeaderInject struct { origin string - block *types.Block + + header *types.Header // Used for light mode fetcher which only cares about header. + block *types.Block // Used for normal mode fetcher which imports full block. +} + +// number returns the block number of the injected object. +func (inject *blockOrHeaderInject) number() uint64 { + if inject.header != nil { + return inject.header.Number.Uint64() + } + return inject.block.NumberU64() } -// Fetcher is responsible for accumulating block announcements from various peers +// number returns the block hash of the injected object. +func (inject *blockOrHeaderInject) hash() common.Hash { + if inject.header != nil { + return inject.header.Hash() + } + return inject.block.Hash() +} + +// BlockFetcher is responsible for accumulating block announcements from various peers // and scheduling them for retrieval. -type Fetcher struct { +type BlockFetcher struct { + light bool // The indicator whether it's a light fetcher or normal one. + // Various event channels - notify chan *announce - inject chan *inject + notify chan *blockAnnounce + inject chan *blockOrHeaderInject headerFilter chan chan *headerFilterTask bodyFilter chan chan *bodyFilterTask @@ -117,54 +170,59 @@ type Fetcher struct { quit chan struct{} // Announce states - announces map[string]int // Per peer announce counts to prevent memory exhaustion - announced map[common.Hash][]*announce // Announced blocks, scheduled for fetching - fetching map[common.Hash]*announce // Announced blocks, currently fetching - fetched map[common.Hash][]*announce // Blocks with headers fetched, scheduled for body retrieval - completing map[common.Hash]*announce // Blocks with headers, currently body-completing + announces map[string]int // Per peer blockAnnounce counts to prevent memory exhaustion + announced map[common.Hash][]*blockAnnounce // Announced blocks, scheduled for fetching + fetching map[common.Hash]*blockAnnounce // Announced blocks, currently fetching + fetched map[common.Hash][]*blockAnnounce // Blocks with headers fetched, scheduled for body retrieval + completing map[common.Hash]*blockAnnounce // Blocks with headers, currently body-completing // Block cache - queue *prque.Prque // Queue containing the import operations (block number sorted) - queues map[string]int // Per peer block counts to prevent memory exhaustion - queued map[common.Hash]*inject // Set of already queued blocks (to dedupe imports) + queue *prque.Prque // Queue containing the import operations (block number sorted) + queues map[string]int // Per peer block counts to prevent memory exhaustion + queued map[common.Hash]*blockOrHeaderInject // Set of already queued blocks (to dedup imports) // Callbacks + getHeader HeaderRetrievalFn // Retrieves a header from the local chain getBlock blockRetrievalFn // Retrieves a block from the local chain verifyHeader headerVerifierFn // Checks if a block's headers have a valid proof of work broadcastBlock blockBroadcasterFn // Broadcasts a block to connected peers chainHeight chainHeightFn // Retrieves the current chain's height + insertHeaders headersInsertFn // Injects a batch of headers into the chain insertChain chainInsertFn // Injects a batch of blocks into the chain dropPeer peerDropFn // Drops a peer for misbehaving // Testing hooks - announceChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a hash from the announce list - queueChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a block from the import queue - fetchingHook func([]common.Hash) // Method to call upon starting a block (eth/61) or header (eth/62) fetch - completingHook func([]common.Hash) // Method to call upon starting a block body fetch (eth/62) - importedHook func(*types.Block) // Method to call upon successful block import (both eth/61 and eth/62) + announceChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a hash from the blockAnnounce list + queueChangeHook func(common.Hash, bool) // Method to call upon adding or deleting a block from the import queue + fetchingHook func([]common.Hash) // Method to call upon starting a block (eth/61) or header (eth/62) fetch + completingHook func([]common.Hash) // Method to call upon starting a block body fetch (eth/62) + importedHook func(*types.Header, *types.Block) // Method to call upon successful header or block import (both eth/61 and eth/62) } -// New creates a block fetcher to retrieve blocks based on hash announcements. -func New(getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBlock blockBroadcasterFn, chainHeight chainHeightFn, insertChain chainInsertFn, dropPeer peerDropFn) *Fetcher { - return &Fetcher{ - notify: make(chan *announce), - inject: make(chan *inject), +// NewBlockFetcher creates a block fetcher to retrieve blocks based on hash announcements. +func NewBlockFetcher(light bool, getHeader HeaderRetrievalFn, getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBlock blockBroadcasterFn, chainHeight chainHeightFn, insertHeaders headersInsertFn, insertChain chainInsertFn, dropPeer peerDropFn) *BlockFetcher { + return &BlockFetcher{ + light: light, + notify: make(chan *blockAnnounce), + inject: make(chan *blockOrHeaderInject), headerFilter: make(chan chan *headerFilterTask), bodyFilter: make(chan chan *bodyFilterTask), done: make(chan common.Hash), quit: make(chan struct{}), announces: make(map[string]int), - announced: make(map[common.Hash][]*announce), - fetching: make(map[common.Hash]*announce), - fetched: make(map[common.Hash][]*announce), - completing: make(map[common.Hash]*announce), + announced: make(map[common.Hash][]*blockAnnounce), + fetching: make(map[common.Hash]*blockAnnounce), + fetched: make(map[common.Hash][]*blockAnnounce), + completing: make(map[common.Hash]*blockAnnounce), queue: prque.New(nil), queues: make(map[string]int), - queued: make(map[common.Hash]*inject), + queued: make(map[common.Hash]*blockOrHeaderInject), + getHeader: getHeader, getBlock: getBlock, verifyHeader: verifyHeader, broadcastBlock: broadcastBlock, chainHeight: chainHeight, + insertHeaders: insertHeaders, insertChain: insertChain, dropPeer: dropPeer, } @@ -172,21 +230,21 @@ func New(getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBloc // Start boots up the announcement based synchroniser, accepting and processing // hash notifications and block fetches until termination requested. -func (f *Fetcher) Start() { +func (f *BlockFetcher) Start() { go f.loop() } // Stop terminates the announcement based synchroniser, canceling all pending // operations. -func (f *Fetcher) Stop() { +func (f *BlockFetcher) Stop() { close(f.quit) } // Notify announces the fetcher of the potential availability of a new block in // the network. -func (f *Fetcher) Notify(peer string, hash common.Hash, number uint64, time time.Time, +func (f *BlockFetcher) Notify(peer string, hash common.Hash, number uint64, time time.Time, headerFetcher headerRequesterFn, bodyFetcher bodyRequesterFn) error { - block := &announce{ + block := &blockAnnounce{ hash: hash, number: number, time: time, @@ -203,8 +261,8 @@ func (f *Fetcher) Notify(peer string, hash common.Hash, number uint64, time time } // Enqueue tries to fill gaps the fetcher's future import queue. -func (f *Fetcher) Enqueue(peer string, block *types.Block) error { - op := &inject{ +func (f *BlockFetcher) Enqueue(peer string, block *types.Block) error { + op := &blockOrHeaderInject{ origin: peer, block: block, } @@ -218,7 +276,7 @@ func (f *Fetcher) Enqueue(peer string, block *types.Block) error { // FilterHeaders extracts all the headers that were explicitly requested by the fetcher, // returning those that should be handled differently. -func (f *Fetcher) FilterHeaders(peer string, headers []*types.Header, time time.Time) []*types.Header { +func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time time.Time) []*types.Header { log.Trace("Filtering headers", "peer", peer, "headers", len(headers)) // Send the filter channel to the fetcher @@ -246,7 +304,7 @@ func (f *Fetcher) FilterHeaders(peer string, headers []*types.Header, time time. // FilterBodies extracts all the block bodies that were explicitly requested by // the fetcher, returning those that should be handled differently. -func (f *Fetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time) ([][]*types.Transaction, [][]*types.Header) { +func (f *BlockFetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time) ([][]*types.Transaction, [][]*types.Header) { log.Trace("Filtering bodies", "peer", peer, "txs", len(transactions), "uncles", len(uncles)) // Send the filter channel to the fetcher @@ -274,10 +332,16 @@ func (f *Fetcher) FilterBodies(peer string, transactions [][]*types.Transaction, // Loop is the main fetcher loop, checking and processing various notification // events. -func (f *Fetcher) loop() { +func (f *BlockFetcher) loop() { // Iterate the block fetching until a quit is requested - fetchTimer := time.NewTimer(0) - completeTimer := time.NewTimer(0) + var ( + fetchTimer = time.NewTimer(0) + completeTimer = time.NewTimer(0) + ) + <-fetchTimer.C // clear out the channel + <-completeTimer.C + defer fetchTimer.Stop() + defer completeTimer.Stop() for { // Clean up any expired block fetches @@ -289,13 +353,13 @@ func (f *Fetcher) loop() { // Import any queued blocks that could potentially fit height := f.chainHeight() for !f.queue.Empty() { - op := f.queue.PopItem().(*inject) - hash := op.block.Hash() + op := f.queue.PopItem().(*blockOrHeaderInject) + hash := op.hash() if f.queueChangeHook != nil { f.queueChangeHook(hash, false) } // If too high up the chain or phase, continue later - number := op.block.NumberU64() + number := op.number() if number > height+1 { f.queue.Push(op, -int64(number)) if f.queueChangeHook != nil { @@ -304,33 +368,37 @@ func (f *Fetcher) loop() { break } // Otherwise if fresh and still unknown, try and import - if number+maxUncleDist < height || f.getBlock(hash) != nil { + if (number+maxUncleDist < height) || (f.light && f.getHeader(hash) != nil) || (!f.light && f.getBlock(hash) != nil) { f.forgetBlock(hash) continue } - f.insert(op.origin, op.block) + if f.light { + f.importHeaders(op.origin, op.header) + } else { + f.importBlocks(op.origin, op.block) + } } // Wait for an outside event to occur select { case <-f.quit: - // Fetcher terminating, abort all operations + // BlockFetcher terminating, abort all operations return case notification := <-f.notify: // A block was announced, make sure the peer isn't DOSing us - propAnnounceInMeter.Mark(1) + blockAnnounceInMeter.Mark(1) count := f.announces[notification.origin] + 1 if count > hashLimit { log.Debug("Peer exceeded outstanding announces", "peer", notification.origin, "limit", hashLimit) - propAnnounceDOSMeter.Mark(1) + blockAnnounceDOSMeter.Mark(1) break } // If we have a valid block number, check that it's potentially useful if notification.number > 0 { if dist := int64(notification.number) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { log.Debug("Peer discarded announcement", "peer", notification.origin, "number", notification.number, "hash", notification.hash, "distance", dist) - propAnnounceDropMeter.Mark(1) + blockAnnounceDropMeter.Mark(1) break } } @@ -352,8 +420,14 @@ func (f *Fetcher) loop() { case op := <-f.inject: // A direct block insertion was requested, try and fill any pending gaps - propBroadcastInMeter.Mark(1) - f.enqueue(op.origin, op.block) + blockBroadcastInMeter.Mark(1) + + // Now only direct block injection is allowed, drop the header injection + // here silently if we receive. + if f.light { + continue + } + f.enqueue(op.origin, nil, op.block) case hash := <-f.done: // A pending import finished, remove all traces of the notification @@ -365,13 +439,19 @@ func (f *Fetcher) loop() { request := make(map[string][]common.Hash) for hash, announces := range f.announced { - if time.Since(announces[0].time) > arriveTimeout-gatherSlack { + // In current LES protocol(les2/les3), only header announce is + // available, no need to wait too much time for header broadcast. + timeout := arriveTimeout - gatherSlack + if f.light { + timeout = 0 + } + if time.Since(announces[0].time) > timeout { // Pick a random peer to retrieve from, reset all others announce := announces[rand.Intn(len(announces))] f.forgetHash(hash) // If the block still didn't arrive, queue for fetching - if f.getBlock(hash) == nil { + if (f.light && f.getHeader(hash) == nil) || (!f.light && f.getBlock(hash) == nil) { request[announce.origin] = append(request[announce.origin], hash) f.fetching[hash] = announce } @@ -439,7 +519,7 @@ func (f *Fetcher) loop() { // Split the batch of headers into unknown ones (to return to the caller), // known incomplete ones (requiring body retrievals) and completed blocks. - unknown, incomplete, complete := []*types.Header{}, []*announce{}, []*types.Block{} + unknown, incomplete, complete, lightHeaders := []*types.Header{}, []*blockAnnounce{}, []*types.Block{}, []*blockAnnounce{} for _, header := range task.headers { hash := header.Hash() @@ -452,13 +532,23 @@ func (f *Fetcher) loop() { f.forgetHash(hash) continue } + // Collect all headers only if we are running in light + // mode and the headers are not imported by other means. + if f.light { + if f.getHeader(hash) == nil { + announce.header = header + lightHeaders = append(lightHeaders, announce) + } + f.forgetHash(hash) + continue + } // Only keep if not imported by other means if f.getBlock(hash) == nil { announce.header = header announce.time = task.time // If the block is empty (header only), short circuit into the final import queue - if header.TxHash == types.DeriveSha(types.Transactions{}) && header.UncleHash == types.CalcUncleHash([]*types.Header{}) { + if header.TxHash == types.EmptyRootHash && header.UncleHash == types.EmptyUncleHash { log.Trace("Block empty, skipping body retrieval", "peer", announce.origin, "number", header.Number, "hash", header.Hash()) block := types.NewBlockWithHeader(header) @@ -475,7 +565,7 @@ func (f *Fetcher) loop() { f.forgetHash(hash) } } else { - // Fetcher doesn't know about it, add to the return list + // BlockFetcher doesn't know about it, add to the return list unknown = append(unknown, header) } } @@ -496,10 +586,14 @@ func (f *Fetcher) loop() { f.rescheduleComplete(completeTimer) } } + // Schedule the header for light fetcher import + for _, announce := range lightHeaders { + f.enqueue(announce.origin, announce.header, nil) + } // Schedule the header-only blocks for import for _, block := range complete { if announce := f.completing[block.Hash()]; announce != nil { - f.enqueue(announce.origin, block) + f.enqueue(announce.origin, nil, block) } } @@ -512,40 +606,50 @@ func (f *Fetcher) loop() { return } bodyFilterInMeter.Mark(int64(len(task.transactions))) - blocks := []*types.Block{} - for i := 0; i < len(task.transactions) && i < len(task.uncles); i++ { - // Match up a body to any possible completion request - matched := false - - for hash, announce := range f.completing { - if f.queued[hash] == nil { - txnHash := types.DeriveSha(types.Transactions(task.transactions[i])) - uncleHash := types.CalcUncleHash(task.uncles[i]) - - if txnHash == announce.header.TxHash && uncleHash == announce.header.UncleHash && announce.origin == task.peer { - // Mark the body matched, reassemble if still unknown - matched = true - - if f.getBlock(hash) == nil { - block := types.NewBlockWithHeader(announce.header).WithBody(task.transactions[i], task.uncles[i]) - block.ReceivedAt = task.time - - blocks = append(blocks, block) - } else { - f.forgetHash(hash) - } + // abort early if there's nothing explicitly requested + if len(f.completing) > 0 { + for i := 0; i < len(task.transactions) && i < len(task.uncles); i++ { + // Match up a body to any possible completion request + var ( + matched = false + uncleHash common.Hash // calculated lazily and reused + txnHash common.Hash // calculated lazily and reused + ) + for hash, announce := range f.completing { + if f.queued[hash] != nil || announce.origin != task.peer { + continue + } + if uncleHash == (common.Hash{}) { + uncleHash = types.CalcUncleHash(task.uncles[i]) + } + if uncleHash != announce.header.UncleHash { + continue + } + if txnHash == (common.Hash{}) { + txnHash = types.DeriveSha(types.Transactions(task.transactions[i]), trie.NewStackTrie(nil)) + } + if txnHash != announce.header.TxHash { + continue + } + // Mark the body matched, reassemble if still unknown + matched = true + if f.getBlock(hash) == nil { + block := types.NewBlockWithHeader(announce.header).WithBody(task.transactions[i], task.uncles[i]) + block.ReceivedAt = task.time + blocks = append(blocks, block) + } else { + f.forgetHash(hash) } } - } - if matched { - task.transactions = append(task.transactions[:i], task.transactions[i+1:]...) - task.uncles = append(task.uncles[:i], task.uncles[i+1:]...) - i-- - continue + if matched { + task.transactions = append(task.transactions[:i], task.transactions[i+1:]...) + task.uncles = append(task.uncles[:i], task.uncles[i+1:]...) + i-- + continue + } } } - bodyFilterOutMeter.Mark(int64(len(task.transactions))) select { case filter <- task: @@ -555,19 +659,25 @@ func (f *Fetcher) loop() { // Schedule the retrieved blocks for ordered import for _, block := range blocks { if announce := f.completing[block.Hash()]; announce != nil { - f.enqueue(announce.origin, block) + f.enqueue(announce.origin, nil, block) } } } } } -// rescheduleFetch resets the specified fetch timer to the next announce timeout. -func (f *Fetcher) rescheduleFetch(fetch *time.Timer) { +// rescheduleFetch resets the specified fetch timer to the next blockAnnounce timeout. +func (f *BlockFetcher) rescheduleFetch(fetch *time.Timer) { // Short circuit if no blocks are announced if len(f.announced) == 0 { return } + // Schedule announcement retrieval quickly for light mode + // since server won't send any headers to client. + if f.light { + fetch.Reset(lightTimeout) + return + } // Otherwise find the earliest expiring announcement earliest := time.Now() for _, announces := range f.announced { @@ -579,7 +689,7 @@ func (f *Fetcher) rescheduleFetch(fetch *time.Timer) { } // rescheduleComplete resets the specified completion timer to the next fetch timeout. -func (f *Fetcher) rescheduleComplete(complete *time.Timer) { +func (f *BlockFetcher) rescheduleComplete(complete *time.Timer) { // Short circuit if no headers are fetched if len(f.fetched) == 0 { return @@ -594,46 +704,88 @@ func (f *Fetcher) rescheduleComplete(complete *time.Timer) { complete.Reset(gatherSlack - time.Since(earliest)) } -// enqueue schedules a new future import operation, if the block to be imported -// has not yet been seen. -func (f *Fetcher) enqueue(peer string, block *types.Block) { - hash := block.Hash() - +// enqueue schedules a new header or block import operation, if the component +// to be imported has not yet been seen. +func (f *BlockFetcher) enqueue(peer string, header *types.Header, block *types.Block) { + var ( + hash common.Hash + number uint64 + ) + if header != nil { + hash, number = header.Hash(), header.Number.Uint64() + } else { + hash, number = block.Hash(), block.NumberU64() + } // Ensure the peer isn't DOSing us count := f.queues[peer] + 1 if count > blockLimit { - log.Debug("Discarded propagated block, exceeded allowance", "peer", peer, "number", block.Number(), "hash", hash, "limit", blockLimit) - propBroadcastDOSMeter.Mark(1) + log.Debug("Discarded delivered header or block, exceeded allowance", "peer", peer, "number", number, "hash", hash, "limit", blockLimit) + blockBroadcastDOSMeter.Mark(1) f.forgetHash(hash) return } // Discard any past or too distant blocks - if dist := int64(block.NumberU64()) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { - log.Debug("Discarded propagated block, too far away", "peer", peer, "number", block.Number(), "hash", hash, "distance", dist) - propBroadcastDropMeter.Mark(1) + if dist := int64(number) - int64(f.chainHeight()); dist < -maxUncleDist || dist > maxQueueDist { + log.Debug("Discarded delivered header or block, too far away", "peer", peer, "number", number, "hash", hash, "distance", dist) + blockBroadcastDropMeter.Mark(1) f.forgetHash(hash) return } // Schedule the block for future importing if _, ok := f.queued[hash]; !ok { - op := &inject{ - origin: peer, - block: block, + op := &blockOrHeaderInject{origin: peer} + if header != nil { + op.header = header + } else { + op.block = block } f.queues[peer] = count f.queued[hash] = op - f.queue.Push(op, -int64(block.NumberU64())) + f.queue.Push(op, -int64(number)) if f.queueChangeHook != nil { - f.queueChangeHook(op.block.Hash(), true) + f.queueChangeHook(hash, true) } - log.Debug("Queued propagated block", "peer", peer, "number", block.Number(), "hash", hash, "queued", f.queue.Size()) + log.Debug("Queued delivered header or block", "peer", peer, "number", number, "hash", hash, "queued", f.queue.Size()) } } -// insert spawns a new goroutine to run a block insertion into the chain. If the +// importHeaders spawns a new goroutine to run a header insertion into the chain. +// If the header's number is at the same height as the current import phase, it +// updates the phase states accordingly. +func (f *BlockFetcher) importHeaders(peer string, header *types.Header) { + hash := header.Hash() + log.Debug("Importing propagated header", "peer", peer, "number", header.Number, "hash", hash) + + go func() { + defer func() { f.done <- hash }() + // If the parent's unknown, abort insertion + parent := f.getHeader(header.ParentHash) + if parent == nil { + log.Debug("Unknown parent of propagated header", "peer", peer, "number", header.Number, "hash", hash, "parent", header.ParentHash) + return + } + // Validate the header and if something went wrong, drop the peer + if err := f.verifyHeader(header); err != nil && err != consensus.ErrFutureBlock { + log.Debug("Propagated header verification failed", "peer", peer, "number", header.Number, "hash", hash, "err", err) + f.dropPeer(peer) + return + } + // Run the actual import and log any issues + if _, err := f.insertHeaders([]*types.Header{header}); err != nil { + log.Debug("Propagated header import failed", "peer", peer, "number", header.Number, "hash", hash, "err", err) + return + } + // Invoke the testing hook if needed + if f.importedHook != nil { + f.importedHook(header, nil) + } + }() +} + +// importBlocks spawns a new goroutine to run a block insertion into the chain. If the // block's number is at the same height as the current import phase, it updates // the phase states accordingly. -func (f *Fetcher) insert(peer string, block *types.Block) { +func (f *BlockFetcher) importBlocks(peer string, block *types.Block) { hash := block.Hash() // Run the import on a new thread @@ -651,7 +803,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { switch err := f.verifyHeader(block.Header()); err { case nil: // All ok, quickly propagate to our peers - propBroadcastOutTimer.UpdateSince(block.ReceivedAt) + blockBroadcastOutTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, true) case consensus.ErrFutureBlock: @@ -669,29 +821,31 @@ func (f *Fetcher) insert(peer string, block *types.Block) { return } // If import succeeded, broadcast the block - propAnnounceOutTimer.UpdateSince(block.ReceivedAt) + blockAnnounceOutTimer.UpdateSince(block.ReceivedAt) go f.broadcastBlock(block, false) // Invoke the testing hook if needed if f.importedHook != nil { - f.importedHook(block) + f.importedHook(nil, block) } }() } // forgetHash removes all traces of a block announcement from the fetcher's // internal state. -func (f *Fetcher) forgetHash(hash common.Hash) { +func (f *BlockFetcher) 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 { - delete(f.announces, announce.origin) + if announceMap, ok := f.announced[hash]; ok { + for _, announce := range announceMap { + f.announces[announce.origin]-- + if f.announces[announce.origin] <= 0 { + delete(f.announces, announce.origin) + } + } + delete(f.announced, hash) + if f.announceChangeHook != nil { + f.announceChangeHook(hash, false) } - } - delete(f.announced, hash) - if f.announceChangeHook != nil { - f.announceChangeHook(hash, false) } // Remove any pending fetches and decrement the DOS counters if announce := f.fetching[hash]; announce != nil { @@ -723,7 +877,7 @@ func (f *Fetcher) forgetHash(hash common.Hash) { // forgetBlock removes all traces of a queued block from the fetcher's internal // state. -func (f *Fetcher) forgetBlock(hash common.Hash) { +func (f *BlockFetcher) forgetBlock(hash common.Hash) { if insert := f.queued[hash]; insert != nil { f.queues[insert.origin]-- if f.queues[insert.origin] == 0 { diff --git a/eth/fetcher/fetcher_test.go b/les/fetcher/block_fetcher_test.go similarity index 72% rename from eth/fetcher/fetcher_test.go rename to les/fetcher/block_fetcher_test.go index f49c2208..caff7a3b 100644 --- a/eth/fetcher/fetcher_test.go +++ b/les/fetcher/block_fetcher_test.go @@ -24,21 +24,27 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" + "github.com/ethereum/go-ethereum/trie" ) var ( - testdb = rawdb.NewMemoryDatabase() - testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - testAddress = crypto.PubkeyToAddress(testKey.PublicKey) - genesis = core.GenesisBlockForTesting(testdb, testAddress, big.NewInt(1000000000)) - unknownBlock = types.NewBlock(&types.Header{GasLimit: params.GenesisGasLimit}, nil, nil, nil) + testdb = rawdb.NewMemoryDatabase() + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddress = crypto.PubkeyToAddress(testKey.PublicKey) + + gspec = core.Genesis{ + Alloc: core.GenesisAlloc{testAddress: {Balance: big.NewInt(1000000000000000)}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } + genesis = gspec.MustCommit(testdb) + unknownBlock = types.NewBlock(&types.Header{GasLimit: params.GenesisGasLimit, BaseFee: big.NewInt(params.InitialBaseFee)}, nil, nil, nil, trie.NewStackTrie(nil)) ) // makeChain creates a chain of n blocks starting at and including parent. @@ -52,15 +58,15 @@ func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common // If the block number is multiple of 3, send a bonus transaction to the miner if parent == genesis && i%3 == 0 { signer := types.MakeSigner(params.TestChainConfig, block.Number()) - tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, nil, nil), signer, testKey) + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(testAddress), common.Address{seed}, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), signer, testKey) if err != nil { panic(err) } block.AddTx(tx) } // If the block number is a multiple of 5, add a bonus uncle to the block - if i%5 == 0 { - block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 1).Hash(), Number: big.NewInt(int64(i - 1))}) + if i > 0 && i%5 == 0 { + block.AddUncle(&types.Header{ParentHash: block.PrevBlock(i - 2).Hash(), Number: big.NewInt(int64(i - 1))}) } }) hashes := make([]common.Hash, n+1) @@ -76,28 +82,38 @@ func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common // fetcherTester is a test simulator for mocking out local block chain. type fetcherTester struct { - fetcher *Fetcher + fetcher *BlockFetcher - hashes []common.Hash // Hash chain belonging to the tester - blocks map[common.Hash]*types.Block // Blocks belonging to the tester - drops map[string]bool // Map of peers dropped by the fetcher + hashes []common.Hash // Hash chain belonging to the tester + headers map[common.Hash]*types.Header // Headers belonging to the tester + blocks map[common.Hash]*types.Block // Blocks belonging to the tester + drops map[string]bool // Map of peers dropped by the fetcher lock sync.RWMutex } // newTester creates a new fetcher test mocker. -func newTester() *fetcherTester { +func newTester(light bool) *fetcherTester { tester := &fetcherTester{ - hashes: []common.Hash{genesis.Hash()}, - blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, - drops: make(map[string]bool), + hashes: []common.Hash{genesis.Hash()}, + headers: map[common.Hash]*types.Header{genesis.Hash(): genesis.Header()}, + blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, + drops: make(map[string]bool), } - tester.fetcher = New(tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertChain, tester.dropPeer) + tester.fetcher = NewBlockFetcher(light, tester.getHeader, tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertHeaders, tester.insertChain, tester.dropPeer) tester.fetcher.Start() return tester } +// getHeader retrieves a header from the tester's block chain. +func (f *fetcherTester) getHeader(hash common.Hash) *types.Header { + f.lock.RLock() + defer f.lock.RUnlock() + + return f.headers[hash] +} + // getBlock retrieves a block from the tester's block chain. func (f *fetcherTester) getBlock(hash common.Hash) *types.Block { f.lock.RLock() @@ -120,9 +136,33 @@ func (f *fetcherTester) chainHeight() uint64 { f.lock.RLock() defer f.lock.RUnlock() + if f.fetcher.light { + return f.headers[f.hashes[len(f.hashes)-1]].Number.Uint64() + } return f.blocks[f.hashes[len(f.hashes)-1]].NumberU64() } +// insertChain injects a new headers into the simulated chain. +func (f *fetcherTester) insertHeaders(headers []*types.Header) (int, error) { + f.lock.Lock() + defer f.lock.Unlock() + + for i, header := range headers { + // Make sure the parent in known + if _, ok := f.headers[header.ParentHash]; !ok { + return i, errors.New("unknown parent") + } + // Discard any new blocks if the same height already exists + if header.Number.Uint64() <= f.headers[f.hashes[len(f.hashes)-1]].Number.Uint64() { + return i, nil + } + // Otherwise build our current chain + f.hashes = append(f.hashes, header.Hash()) + f.headers[header.Hash()] = header + } + return 0, nil +} + // insertChain injects a new blocks into the simulated chain. func (f *fetcherTester) insertChain(blocks types.Blocks) (int, error) { f.lock.Lock() @@ -233,7 +273,7 @@ func verifyCompletingEvent(t *testing.T, completing chan []common.Hash, arrive b } // verifyImportEvent verifies that one single event arrive on an import channel. -func verifyImportEvent(t *testing.T, imported chan *types.Block, arrive bool) { +func verifyImportEvent(t *testing.T, imported chan interface{}, arrive bool) { if arrive { select { case <-imported: @@ -251,7 +291,7 @@ func verifyImportEvent(t *testing.T, imported chan *types.Block, arrive bool) { // verifyImportCount verifies that exactly count number of events arrive on an // import hook channel. -func verifyImportCount(t *testing.T, imported chan *types.Block, count int) { +func verifyImportCount(t *testing.T, imported chan interface{}, count int) { for i := 0; i < count; i++ { select { case <-imported: @@ -263,7 +303,7 @@ func verifyImportCount(t *testing.T, imported chan *types.Block, count int) { } // verifyImportDone verifies that no more events are arriving on an import channel. -func verifyImportDone(t *testing.T, imported chan *types.Block) { +func verifyImportDone(t *testing.T, imported chan interface{}) { select { case <-imported: t.Fatalf("extra block imported") @@ -271,45 +311,62 @@ func verifyImportDone(t *testing.T, imported chan *types.Block) { } } -// Tests that a fetcher accepts block announcements and initiates retrievals for -// them, successfully importing into the local chain. -func TestSequentialAnnouncements62(t *testing.T) { testSequentialAnnouncements(t, 62) } -func TestSequentialAnnouncements63(t *testing.T) { testSequentialAnnouncements(t, 63) } -func TestSequentialAnnouncements64(t *testing.T) { testSequentialAnnouncements(t, 64) } +// verifyChainHeight verifies the chain height is as expected. +func verifyChainHeight(t *testing.T, fetcher *fetcherTester, height uint64) { + if fetcher.chainHeight() != height { + t.Fatalf("chain height mismatch, got %d, want %d", fetcher.chainHeight(), height) + } +} + +// Tests that a fetcher accepts block/header announcements and initiates retrievals +// for them, successfully importing into the local chain. +func TestFullSequentialAnnouncements(t *testing.T) { testSequentialAnnouncements(t, false) } +func TestLightSequentialAnnouncements(t *testing.T) { testSequentialAnnouncements(t, true) } -func testSequentialAnnouncements(t *testing.T, protocol int) { +func testSequentialAnnouncements(t *testing.T, light bool) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit hashes, blocks := makeChain(targetBlocks, 0, genesis) - tester := newTester() + tester := newTester(light) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) // Iteratively announce blocks until all are imported - imported := make(chan *types.Block) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) verifyImportEvent(t, imported, true) } verifyImportDone(t, imported) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) } // Tests that if blocks are announced by multiple peers (or even the same buggy // peer), they will only get downloaded at most once. -func TestConcurrentAnnouncements62(t *testing.T) { testConcurrentAnnouncements(t, 62) } -func TestConcurrentAnnouncements63(t *testing.T) { testConcurrentAnnouncements(t, 63) } -func TestConcurrentAnnouncements64(t *testing.T) { testConcurrentAnnouncements(t, 64) } +func TestFullConcurrentAnnouncements(t *testing.T) { testConcurrentAnnouncements(t, false) } +func TestLightConcurrentAnnouncements(t *testing.T) { testConcurrentAnnouncements(t, true) } -func testConcurrentAnnouncements(t *testing.T, protocol int) { +func testConcurrentAnnouncements(t *testing.T, light bool) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit hashes, blocks := makeChain(targetBlocks, 0, genesis) // Assemble a tester with a built in counter for the requests - tester := newTester() + tester := newTester(light) firstHeaderFetcher := tester.makeHeaderFetcher("first", blocks, -gatherSlack) firstBodyFetcher := tester.makeBodyFetcher("first", blocks, 0) secondHeaderFetcher := tester.makeHeaderFetcher("second", blocks, -gatherSlack) @@ -325,9 +382,20 @@ func testConcurrentAnnouncements(t *testing.T, protocol int) { return secondHeaderFetcher(hash) } // Iteratively announce blocks until all are imported - imported := make(chan *types.Block) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("first", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), firstHeaderWrapper, firstBodyFetcher) tester.fetcher.Notify("second", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout+time.Millisecond), secondHeaderWrapper, secondBodyFetcher) @@ -340,30 +408,42 @@ func testConcurrentAnnouncements(t *testing.T, protocol int) { if int(counter) != targetBlocks { t.Fatalf("retrieval count mismatch: have %v, want %v", counter, targetBlocks) } + verifyChainHeight(t, tester, uint64(len(hashes)-1)) } // Tests that announcements arriving while a previous is being fetched still // results in a valid import. -func TestOverlappingAnnouncements62(t *testing.T) { testOverlappingAnnouncements(t, 62) } -func TestOverlappingAnnouncements63(t *testing.T) { testOverlappingAnnouncements(t, 63) } -func TestOverlappingAnnouncements64(t *testing.T) { testOverlappingAnnouncements(t, 64) } +func TestFullOverlappingAnnouncements(t *testing.T) { testOverlappingAnnouncements(t, false) } +func TestLightOverlappingAnnouncements(t *testing.T) { testOverlappingAnnouncements(t, true) } -func testOverlappingAnnouncements(t *testing.T, protocol int) { +func testOverlappingAnnouncements(t *testing.T, light bool) { // Create a chain of blocks to import targetBlocks := 4 * hashLimit hashes, blocks := makeChain(targetBlocks, 0, genesis) - tester := newTester() + tester := newTester(light) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) // Iteratively announce blocks, but overlap them continuously overlap := 16 - imported := make(chan *types.Block, len(hashes)-1) + imported := make(chan interface{}, len(hashes)-1) for i := 0; i < overlap; i++ { imported <- nil } - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) @@ -375,19 +455,19 @@ func testOverlappingAnnouncements(t *testing.T, protocol int) { } // Wait for all the imports to complete and check count verifyImportCount(t, imported, overlap) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) } // Tests that announces already being retrieved will not be duplicated. -func TestPendingDeduplication62(t *testing.T) { testPendingDeduplication(t, 62) } -func TestPendingDeduplication63(t *testing.T) { testPendingDeduplication(t, 63) } -func TestPendingDeduplication64(t *testing.T) { testPendingDeduplication(t, 64) } +func TestFullPendingDeduplication(t *testing.T) { testPendingDeduplication(t, false) } +func TestLightPendingDeduplication(t *testing.T) { testPendingDeduplication(t, true) } -func testPendingDeduplication(t *testing.T, protocol int) { +func testPendingDeduplication(t *testing.T, light bool) { // Create a hash and corresponding block hashes, blocks := makeChain(1, 0, genesis) // Assemble a tester with a built in counter and delayed fetcher - tester := newTester() + tester := newTester(light) headerFetcher := tester.makeHeaderFetcher("repeater", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("repeater", blocks, 0) @@ -403,42 +483,58 @@ func testPendingDeduplication(t *testing.T, protocol int) { }() return nil } + checkNonExist := func() bool { + return tester.getBlock(hashes[0]) == nil + } + if light { + checkNonExist = func() bool { + return tester.getHeader(hashes[0]) == nil + } + } // Announce the same block many times until it's fetched (wait for any pending ops) - for tester.getBlock(hashes[0]) == nil { + for checkNonExist() { tester.fetcher.Notify("repeater", hashes[0], 1, time.Now().Add(-arriveTimeout), headerWrapper, bodyFetcher) time.Sleep(time.Millisecond) } time.Sleep(delay) // Check that all blocks were imported and none fetched twice - if imported := len(tester.blocks); imported != 2 { - t.Fatalf("synchronised block mismatch: have %v, want %v", imported, 2) - } if int(counter) != 1 { t.Fatalf("retrieval count mismatch: have %v, want %v", counter, 1) } + verifyChainHeight(t, tester, 1) } // Tests that announcements retrieved in a random order are cached and eventually // imported when all the gaps are filled in. -func TestRandomArrivalImport62(t *testing.T) { testRandomArrivalImport(t, 62) } -func TestRandomArrivalImport63(t *testing.T) { testRandomArrivalImport(t, 63) } -func TestRandomArrivalImport64(t *testing.T) { testRandomArrivalImport(t, 64) } +func TestFullRandomArrivalImport(t *testing.T) { testRandomArrivalImport(t, false) } +func TestLightRandomArrivalImport(t *testing.T) { testRandomArrivalImport(t, true) } -func testRandomArrivalImport(t *testing.T, protocol int) { +func testRandomArrivalImport(t *testing.T, light bool) { // Create a chain of blocks to import, and choose one to delay targetBlocks := maxQueueDist hashes, blocks := makeChain(targetBlocks, 0, genesis) skip := targetBlocks / 2 - tester := newTester() + tester := newTester(light) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) // Iteratively announce blocks, skipping one entry - imported := make(chan *types.Block, len(hashes)-1) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - + imported := make(chan interface{}, len(hashes)-1) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } for i := len(hashes) - 1; i >= 0; i-- { if i != skip { tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) @@ -448,27 +544,24 @@ func testRandomArrivalImport(t *testing.T, protocol int) { // Finally announce the skipped entry and check full import tester.fetcher.Notify("valid", hashes[skip], uint64(len(hashes)-skip-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) verifyImportCount(t, imported, len(hashes)-1) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) } // Tests that direct block enqueues (due to block propagation vs. hash announce) // are correctly schedule, filling and import queue gaps. -func TestQueueGapFill62(t *testing.T) { testQueueGapFill(t, 62) } -func TestQueueGapFill63(t *testing.T) { testQueueGapFill(t, 63) } -func TestQueueGapFill64(t *testing.T) { testQueueGapFill(t, 64) } - -func testQueueGapFill(t *testing.T, protocol int) { +func TestQueueGapFill(t *testing.T) { // Create a chain of blocks to import, and choose one to not announce at all targetBlocks := maxQueueDist hashes, blocks := makeChain(targetBlocks, 0, genesis) skip := targetBlocks / 2 - tester := newTester() + tester := newTester(false) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) // Iteratively announce blocks, skipping one entry - imported := make(chan *types.Block, len(hashes)-1) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + imported := make(chan interface{}, len(hashes)-1) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } for i := len(hashes) - 1; i >= 0; i-- { if i != skip { @@ -479,20 +572,17 @@ func testQueueGapFill(t *testing.T, protocol int) { // Fill the missing block directly as if propagated tester.fetcher.Enqueue("valid", blocks[hashes[skip]]) verifyImportCount(t, imported, len(hashes)-1) + verifyChainHeight(t, tester, uint64(len(hashes)-1)) } // Tests that blocks arriving from various sources (multiple propagations, hash // announces, etc) do not get scheduled for import multiple times. -func TestImportDeduplication62(t *testing.T) { testImportDeduplication(t, 62) } -func TestImportDeduplication63(t *testing.T) { testImportDeduplication(t, 63) } -func TestImportDeduplication64(t *testing.T) { testImportDeduplication(t, 64) } - -func testImportDeduplication(t *testing.T, protocol int) { +func TestImportDeduplication(t *testing.T) { // Create two blocks to import (one for duplication, the other for stalling) hashes, blocks := makeChain(2, 0, genesis) // Create the tester and wrap the importer with a counter - tester := newTester() + tester := newTester(false) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) @@ -503,9 +593,9 @@ func testImportDeduplication(t *testing.T, protocol int) { } // Instrument the fetching and imported events fetching := make(chan []common.Hash) - imported := make(chan *types.Block, len(hashes)-1) + imported := make(chan interface{}, len(hashes)-1) tester.fetcher.fetchingHook = func(hashes []common.Hash) { fetching <- hashes } - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } // Announce the duplicating block, wait for retrieval, and also propagate directly tester.fetcher.Notify("valid", hashes[0], 1, time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) @@ -534,7 +624,7 @@ func TestDistantPropagationDiscarding(t *testing.T) { low, high := len(hashes)/2+maxUncleDist+1, len(hashes)/2-maxQueueDist-1 // Create a tester and simulate a head block being the middle of the above chain - tester := newTester() + tester := newTester(false) tester.lock.Lock() tester.hashes = []common.Hash{head} @@ -558,11 +648,10 @@ func TestDistantPropagationDiscarding(t *testing.T) { // Tests that announcements with numbers much lower or higher than out current // head get discarded to prevent wasting resources on useless blocks from faulty // peers. -func TestDistantAnnouncementDiscarding62(t *testing.T) { testDistantAnnouncementDiscarding(t, 62) } -func TestDistantAnnouncementDiscarding63(t *testing.T) { testDistantAnnouncementDiscarding(t, 63) } -func TestDistantAnnouncementDiscarding64(t *testing.T) { testDistantAnnouncementDiscarding(t, 64) } +func TestFullDistantAnnouncementDiscarding(t *testing.T) { testDistantAnnouncementDiscarding(t, false) } +func TestLightDistantAnnouncementDiscarding(t *testing.T) { testDistantAnnouncementDiscarding(t, true) } -func testDistantAnnouncementDiscarding(t *testing.T, protocol int) { +func testDistantAnnouncementDiscarding(t *testing.T, light bool) { // Create a long chain to import and define the discard boundaries hashes, blocks := makeChain(3*maxQueueDist, 0, genesis) head := hashes[len(hashes)/2] @@ -570,10 +659,11 @@ func testDistantAnnouncementDiscarding(t *testing.T, protocol int) { low, high := len(hashes)/2+maxUncleDist+1, len(hashes)/2-maxQueueDist-1 // Create a tester and simulate a head block being the middle of the above chain - tester := newTester() + tester := newTester(light) tester.lock.Lock() tester.hashes = []common.Hash{head} + tester.headers = map[common.Hash]*types.Header{head: blocks[head].Header()} tester.blocks = map[common.Hash]*types.Block{head: blocks[head]} tester.lock.Unlock() @@ -601,25 +691,50 @@ func testDistantAnnouncementDiscarding(t *testing.T, protocol int) { // Tests that peers announcing blocks with invalid numbers (i.e. not matching // the headers provided afterwards) get dropped as malicious. -func TestInvalidNumberAnnouncement62(t *testing.T) { testInvalidNumberAnnouncement(t, 62) } -func TestInvalidNumberAnnouncement63(t *testing.T) { testInvalidNumberAnnouncement(t, 63) } -func TestInvalidNumberAnnouncement64(t *testing.T) { testInvalidNumberAnnouncement(t, 64) } +func TestFullInvalidNumberAnnouncement(t *testing.T) { testInvalidNumberAnnouncement(t, false) } +func TestLightInvalidNumberAnnouncement(t *testing.T) { testInvalidNumberAnnouncement(t, true) } -func testInvalidNumberAnnouncement(t *testing.T, protocol int) { +func testInvalidNumberAnnouncement(t *testing.T, light bool) { // Create a single block to import and check numbers against hashes, blocks := makeChain(1, 0, genesis) - tester := newTester() + tester := newTester(light) badHeaderFetcher := tester.makeHeaderFetcher("bad", blocks, -gatherSlack) badBodyFetcher := tester.makeBodyFetcher("bad", blocks, 0) - imported := make(chan *types.Block) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - + imported := make(chan interface{}) + announced := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if light { + if header == nil { + t.Fatalf("Fetcher try to import empty header") + } + imported <- header + } else { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } + } // Announce a block with a bad number, check for immediate drop + tester.fetcher.announceChangeHook = func(hash common.Hash, b bool) { + announced <- nil + } tester.fetcher.Notify("bad", hashes[0], 2, time.Now().Add(-arriveTimeout), badHeaderFetcher, badBodyFetcher) + verifyAnnounce := func() { + for i := 0; i < 2; i++ { + select { + case <-announced: + continue + case <-time.After(1 * time.Second): + t.Fatal("announce timeout") + return + } + } + } + verifyAnnounce() verifyImportEvent(t, imported, false) - tester.lock.RLock() dropped := tester.drops["bad"] tester.lock.RUnlock() @@ -627,11 +742,11 @@ func testInvalidNumberAnnouncement(t *testing.T, protocol int) { if !dropped { t.Fatalf("peer with invalid numbered announcement not dropped") } - goodHeaderFetcher := tester.makeHeaderFetcher("good", blocks, -gatherSlack) goodBodyFetcher := tester.makeBodyFetcher("good", blocks, 0) // Make sure a good announcement passes without a drop tester.fetcher.Notify("good", hashes[0], 1, time.Now().Add(-arriveTimeout), goodHeaderFetcher, goodBodyFetcher) + verifyAnnounce() verifyImportEvent(t, imported, true) tester.lock.RLock() @@ -646,15 +761,11 @@ func testInvalidNumberAnnouncement(t *testing.T, protocol int) { // Tests that if a block is empty (i.e. header only), no body request should be // made, and instead the header should be assembled into a whole block in itself. -func TestEmptyBlockShortCircuit62(t *testing.T) { testEmptyBlockShortCircuit(t, 62) } -func TestEmptyBlockShortCircuit63(t *testing.T) { testEmptyBlockShortCircuit(t, 63) } -func TestEmptyBlockShortCircuit64(t *testing.T) { testEmptyBlockShortCircuit(t, 64) } - -func testEmptyBlockShortCircuit(t *testing.T, protocol int) { +func TestEmptyBlockShortCircuit(t *testing.T) { // Create a chain of blocks to import hashes, blocks := makeChain(32, 0, genesis) - tester := newTester() + tester := newTester(false) headerFetcher := tester.makeHeaderFetcher("valid", blocks, -gatherSlack) bodyFetcher := tester.makeBodyFetcher("valid", blocks, 0) @@ -665,9 +776,13 @@ func testEmptyBlockShortCircuit(t *testing.T, protocol int) { completing := make(chan []common.Hash) tester.fetcher.completingHook = func(hashes []common.Hash) { completing <- hashes } - imported := make(chan *types.Block) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } - + imported := make(chan interface{}) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { + if block == nil { + t.Fatalf("Fetcher try to import empty block") + } + imported <- block + } // Iteratively announce blocks until all are imported for i := len(hashes) - 2; i >= 0; i-- { tester.fetcher.Notify("valid", hashes[i], uint64(len(hashes)-i-1), time.Now().Add(-arriveTimeout), headerFetcher, bodyFetcher) @@ -687,16 +802,12 @@ func testEmptyBlockShortCircuit(t *testing.T, protocol int) { // Tests that a peer is unable to use unbounded memory with sending infinite // block announcements to a node, but that even in the face of such an attack, // the fetcher remains operational. -func TestHashMemoryExhaustionAttack62(t *testing.T) { testHashMemoryExhaustionAttack(t, 62) } -func TestHashMemoryExhaustionAttack63(t *testing.T) { testHashMemoryExhaustionAttack(t, 63) } -func TestHashMemoryExhaustionAttack64(t *testing.T) { testHashMemoryExhaustionAttack(t, 64) } - -func testHashMemoryExhaustionAttack(t *testing.T, protocol int) { +func TestHashMemoryExhaustionAttack(t *testing.T) { // Create a tester with instrumented import hooks - tester := newTester() + tester := newTester(false) - imported, announces := make(chan *types.Block), int32(0) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + imported, announces := make(chan interface{}), int32(0) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } tester.fetcher.announceChangeHook = func(hash common.Hash, added bool) { if added { atomic.AddInt32(&announces, 1) @@ -740,10 +851,10 @@ func testHashMemoryExhaustionAttack(t *testing.T, protocol int) { // system memory. func TestBlockMemoryExhaustionAttack(t *testing.T) { // Create a tester with instrumented import hooks - tester := newTester() + tester := newTester(false) - imported, enqueued := make(chan *types.Block), int32(0) - tester.fetcher.importedHook = func(block *types.Block) { imported <- block } + imported, enqueued := make(chan interface{}), int32(0) + tester.fetcher.importedHook = func(header *types.Header, block *types.Block) { imported <- block } tester.fetcher.queueChangeHook = func(hash common.Hash, added bool) { if added { atomic.AddInt32(&enqueued, 1) diff --git a/les/fetcher_test.go b/les/fetcher_test.go new file mode 100644 index 00000000..6a17e737 --- /dev/null +++ b/les/fetcher_test.go @@ -0,0 +1,289 @@ +// 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" + "testing" + "time" + + "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/light" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" +) + +// verifyImportEvent verifies that one single event arrive on an import channel. +func verifyImportEvent(t *testing.T, imported chan interface{}, arrive bool) { + if arrive { + select { + case <-imported: + case <-time.After(time.Second): + t.Fatalf("import timeout") + } + } else { + select { + case <-imported: + t.Fatalf("import invoked") + case <-time.After(20 * time.Millisecond): + } + } +} + +// verifyImportDone verifies that no more events are arriving on an import channel. +func verifyImportDone(t *testing.T, imported chan interface{}) { + select { + case <-imported: + t.Fatalf("extra block imported") + case <-time.After(50 * time.Millisecond): + } +} + +// verifyChainHeight verifies the chain height is as expected. +func verifyChainHeight(t *testing.T, fetcher *lightFetcher, height uint64) { + local := fetcher.chain.CurrentHeader().Number.Uint64() + if local != height { + t.Fatalf("chain height mismatch, got %d, want %d", local, height) + } +} + +func TestSequentialAnnouncementsLes2(t *testing.T) { testSequentialAnnouncements(t, 2) } +func TestSequentialAnnouncementsLes3(t *testing.T) { testSequentialAnnouncements(t, 3) } + +func testSequentialAnnouncements(t *testing.T, protocol int) { + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + s, c, teardown := newClientServerEnv(t, netconfig) + defer teardown() + + // Create connected peer pair, the initial signal from LES server + // is discarded to prevent syncing. + p1, _, err := newTestPeerPair("peer", protocol, s.handler, c.handler, true) + if err != nil { + t.Fatalf("Failed to create peer pair %v", err) + } + importCh := make(chan interface{}) + c.handler.fetcher.newHeadHook = func(header *types.Header) { + importCh <- header + } + for i := uint64(1); i <= s.backend.Blockchain().CurrentHeader().Number.Uint64(); i++ { + header := s.backend.Blockchain().GetHeaderByNumber(i) + hash, number := header.Hash(), header.Number.Uint64() + td := rawdb.ReadTd(s.db, hash, number) + + announce := announceData{hash, number, td, 0, nil} + if p1.cpeer.announceType == announceTypeSigned { + announce.sign(s.handler.server.privateKey) + } + p1.cpeer.sendAnnounce(announce) + verifyImportEvent(t, importCh, true) + } + verifyImportDone(t, importCh) + verifyChainHeight(t, c.handler.fetcher, 4) +} + +func TestGappedAnnouncementsLes2(t *testing.T) { testGappedAnnouncements(t, 2) } +func TestGappedAnnouncementsLes3(t *testing.T) { testGappedAnnouncements(t, 3) } + +func testGappedAnnouncements(t *testing.T, protocol int) { + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + s, c, teardown := newClientServerEnv(t, netconfig) + defer teardown() + + // Create connected peer pair, the initial signal from LES server + // is discarded to prevent syncing. + peer, _, err := newTestPeerPair("peer", protocol, s.handler, c.handler, true) + if err != nil { + t.Fatalf("Failed to create peer pair %v", err) + } + done := make(chan *types.Header, 1) + c.handler.fetcher.newHeadHook = func(header *types.Header) { done <- header } + + // Prepare announcement by latest header. + latest := s.backend.Blockchain().CurrentHeader() + hash, number := latest.Hash(), latest.Number.Uint64() + td := rawdb.ReadTd(s.db, hash, number) + + // Sign the announcement if necessary. + announce := announceData{hash, number, td, 0, nil} + if peer.cpeer.announceType == announceTypeSigned { + announce.sign(s.handler.server.privateKey) + } + peer.cpeer.sendAnnounce(announce) + + <-done // Wait syncing + verifyChainHeight(t, c.handler.fetcher, 4) + + // Send a reorged announcement + blocks, _ := core.GenerateChain(rawdb.ReadChainConfig(s.db, s.backend.Blockchain().Genesis().Hash()), s.backend.Blockchain().GetBlockByNumber(3), + ethash.NewFaker(), s.db, 2, func(i int, gen *core.BlockGen) { + gen.OffsetTime(-9) // higher block difficulty + }) + s.backend.Blockchain().InsertChain(blocks) + + <-done // Wait syncing + verifyChainHeight(t, c.handler.fetcher, 5) +} + +func TestTrustedAnnouncementsLes2(t *testing.T) { testTrustedAnnouncement(t, 2) } +func TestTrustedAnnouncementsLes3(t *testing.T) { testTrustedAnnouncement(t, 3) } + +func testTrustedAnnouncement(t *testing.T, protocol int) { + //log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + var ( + servers []*testServer + teardowns []func() + nodes []*enode.Node + ids []string + cpeers []*clientPeer + + config = light.TestServerIndexerConfig + waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 2 && bts >= 2 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + ) + for i := 0; i < 4; i++ { + s, n, teardown := newTestServerPeer(t, int(2*config.ChtSize+config.ChtConfirms), protocol, waitIndexers) + + servers = append(servers, s) + nodes = append(nodes, n) + teardowns = append(teardowns, teardown) + + // A half of them are trusted servers. + if i < 2 { + ids = append(ids, n.String()) + } + } + netconfig := testnetConfig{ + protocol: protocol, + nopruning: true, + ulcServers: ids, + ulcFraction: 60, + } + _, c, teardown := newClientServerEnv(t, netconfig) + defer teardown() + defer func() { + for i := 0; i < len(teardowns); i++ { + teardowns[i]() + } + }() + + // Register the assembled checkpoint as hardcoded one. + head := servers[0].chtIndexer.SectionHead(0) + cp := ¶ms.TrustedCheckpoint{ + SectionIndex: 0, + SectionHead: head, + CHTRoot: light.GetChtRoot(servers[0].db, 0, head), + BloomRoot: light.GetBloomTrieRoot(servers[0].db, 0, head), + } + c.handler.checkpoint = cp + c.handler.backend.blockchain.AddTrustedCheckpoint(cp) + + // Connect all server instances. + for i := 0; i < len(servers); i++ { + _, cp, err := connect(servers[i].handler, nodes[i].ID(), c.handler, protocol, true) + if err != nil { + t.Fatalf("connect server and client failed, err %s", err) + } + cpeers = append(cpeers, cp) + } + newHead := make(chan *types.Header, 1) + c.handler.fetcher.newHeadHook = func(header *types.Header) { newHead <- header } + + check := func(height []uint64, expected uint64, callback func()) { + for i := 0; i < len(height); i++ { + for j := 0; j < len(servers); j++ { + h := servers[j].backend.Blockchain().GetHeaderByNumber(height[i]) + hash, number := h.Hash(), h.Number.Uint64() + td := rawdb.ReadTd(servers[j].db, hash, number) + + // Sign the announcement if necessary. + announce := announceData{hash, number, td, 0, nil} + p := cpeers[j] + if p.announceType == announceTypeSigned { + announce.sign(servers[j].handler.server.privateKey) + } + p.sendAnnounce(announce) + } + } + if callback != nil { + callback() + } + verifyChainHeight(t, c.handler.fetcher, expected) + } + check([]uint64{1}, 1, func() { <-newHead }) // Sequential announcements + check([]uint64{config.ChtSize + config.ChtConfirms}, config.ChtSize+config.ChtConfirms, func() { <-newHead }) // ULC-style light syncing, rollback untrusted headers + check([]uint64{2*config.ChtSize + config.ChtConfirms}, 2*config.ChtSize+config.ChtConfirms, func() { <-newHead }) // Sync the whole chain. +} + +func TestInvalidAnnouncesLES2(t *testing.T) { testInvalidAnnounces(t, lpv2) } +func TestInvalidAnnouncesLES3(t *testing.T) { testInvalidAnnounces(t, lpv3) } +func TestInvalidAnnouncesLES4(t *testing.T) { testInvalidAnnounces(t, lpv4) } + +func testInvalidAnnounces(t *testing.T, protocol int) { + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + s, c, teardown := newClientServerEnv(t, netconfig) + defer teardown() + + // Create connected peer pair, the initial signal from LES server + // is discarded to prevent syncing. + peer, _, err := newTestPeerPair("peer", lpv3, s.handler, c.handler, true) + if err != nil { + t.Fatalf("Failed to create peer pair %v", err) + } + done := make(chan *types.Header, 1) + c.handler.fetcher.newHeadHook = func(header *types.Header) { done <- header } + + // Prepare announcement by latest header. + headerOne := s.backend.Blockchain().GetHeaderByNumber(1) + hash, number := headerOne.Hash(), headerOne.Number.Uint64() + td := big.NewInt(params.GenesisDifficulty.Int64() + 200) // bad td + + // Sign the announcement if necessary. + announce := announceData{hash, number, td, 0, nil} + if peer.cpeer.announceType == announceTypeSigned { + announce.sign(s.handler.server.privateKey) + } + peer.cpeer.sendAnnounce(announce) + <-done // Wait syncing + + // Ensure the bad peer is evicited + if c.handler.backend.peers.len() != 0 { + t.Fatalf("Failed to evict invalid peer") + } +} diff --git a/les/flowcontrol/control.go b/les/flowcontrol/control.go index df7f4645..76a241fa 100644 --- a/les/flowcontrol/control.go +++ b/les/flowcontrol/control.go @@ -19,11 +19,12 @@ package flowcontrol import ( "fmt" + "math" "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/log" ) const ( @@ -181,7 +182,7 @@ func (node *ClientNode) UpdateParams(params ServerParams) { return } } - node.updateSchedule = append(node.updateSchedule, scheduledUpdate{time: now + mclock.AbsTime(DecParamDelay), params: params}) + node.updateSchedule = append(node.updateSchedule, scheduledUpdate{time: now.Add(DecParamDelay), params: params}) } } @@ -316,6 +317,9 @@ func (node *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { node.lock.RLock() defer node.lock.RUnlock() + if node.params.BufLimit == 0 { + return time.Duration(math.MaxInt64), 0 + } now := node.clock.Now() node.recalcBLE(now) maxCost += uint64(safetyMargin) * node.params.MinRecharge / uint64(fcTimeConst) diff --git a/les/flowcontrol/logger.go b/les/flowcontrol/logger.go index 2d00af04..428d7fbf 100644 --- a/les/flowcontrol/logger.go +++ b/les/flowcontrol/logger.go @@ -20,7 +20,7 @@ import ( "fmt" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) // logger collects events in string format and discards events older than the diff --git a/les/flowcontrol/manager.go b/les/flowcontrol/manager.go index 9d96a225..4367974d 100644 --- a/les/flowcontrol/manager.go +++ b/les/flowcontrol/manager.go @@ -22,8 +22,8 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/common/prque" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" ) // cmNodeFields are ClientNode fields used by the client manager @@ -55,13 +55,12 @@ var ( // 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 +// corrugated 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{} + clock mclock.Clock + lock sync.Mutex + stop chan chan struct{} curve PieceWiseLinear sumRecharge, totalRecharge, totalConnected uint64 @@ -108,7 +107,7 @@ type ClientManager struct { func NewClientManager(curve PieceWiseLinear, clock mclock.Clock) *ClientManager { cm := &ClientManager{ clock: clock, - rcQueue: prque.New(func(a interface{}, i int) { a.(*ClientNode).queueIndex = i }), + rcQueue: prque.NewWrapAround(func(a interface{}, i int) { a.(*ClientNode).queueIndex = i }), capLastUpdate: clock.Now(), stop: make(chan chan struct{}), } diff --git a/les/flowcontrol/manager_test.go b/les/flowcontrol/manager_test.go index 1fb64dd7..564d813f 100644 --- a/les/flowcontrol/manager_test.go +++ b/les/flowcontrol/manager_test.go @@ -21,7 +21,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) type testNode struct { @@ -104,7 +104,6 @@ func testConstantTotalCapacity(t *testing.T, nodeCount, maxCapacityNodes, random 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 { diff --git a/les/handler_test.go b/les/handler_test.go index 0429f8f8..56d7d55b 100644 --- a/les/handler_test.go +++ b/les/handler_test.go @@ -23,19 +23,19 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "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/les/downloader" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) func expectResponse(r p2p.MsgReader, msgcode, reqID, bv uint64, data interface{}) error { @@ -49,11 +49,19 @@ 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 TestGetBlockHeadersLes2(t *testing.T) { testGetBlockHeaders(t, 2) } func TestGetBlockHeadersLes3(t *testing.T) { testGetBlockHeaders(t, 3) } +func TestGetBlockHeadersLes4(t *testing.T) { testGetBlockHeaders(t, 4) } func testGetBlockHeaders(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, downloader.MaxHashFetch+15, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: downloader.MaxHeaderFetch + 15, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() bc := server.handler.blockchain // Create a "random" unknown hash for testing @@ -64,27 +72,27 @@ func testGetBlockHeaders(t *testing.T, protocol int) { // Create a batch of tests for various scenarios limit := uint64(MaxHeaderFetch) tests := []struct { - query *getBlockHeadersData // The query to execute for header retrieval + query *GetBlockHeadersData // The query to execute for header retrieval expect []common.Hash // The hashes of the block whose headers are expected }{ // A single random block should be retrievable by hash and number too { - &getBlockHeadersData{Origin: hashOrNumber{Hash: bc.GetBlockByNumber(limit / 2).Hash()}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Hash: bc.GetBlockByNumber(limit / 2).Hash()}, Amount: 1}, []common.Hash{bc.GetBlockByNumber(limit / 2).Hash()}, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 1}, []common.Hash{bc.GetBlockByNumber(limit / 2).Hash()}, }, // Multiple headers should be retrievable in both directions { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3}, []common.Hash{ bc.GetBlockByNumber(limit / 2).Hash(), bc.GetBlockByNumber(limit/2 + 1).Hash(), bc.GetBlockByNumber(limit/2 + 2).Hash(), }, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3, Reverse: true}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3, Reverse: true}, []common.Hash{ bc.GetBlockByNumber(limit / 2).Hash(), bc.GetBlockByNumber(limit/2 - 1).Hash(), @@ -93,14 +101,14 @@ func testGetBlockHeaders(t *testing.T, protocol int) { }, // Multiple headers with skip lists should be retrievable { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3}, []common.Hash{ bc.GetBlockByNumber(limit / 2).Hash(), bc.GetBlockByNumber(limit/2 + 4).Hash(), bc.GetBlockByNumber(limit/2 + 8).Hash(), }, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3, Reverse: true}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3, Reverse: true}, []common.Hash{ bc.GetBlockByNumber(limit / 2).Hash(), bc.GetBlockByNumber(limit/2 - 4).Hash(), @@ -109,26 +117,26 @@ func testGetBlockHeaders(t *testing.T, protocol int) { }, // The chain endpoints should be retrievable { - &getBlockHeadersData{Origin: hashOrNumber{Number: 0}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: 0}, Amount: 1}, []common.Hash{bc.GetBlockByNumber(0).Hash()}, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64()}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64()}, Amount: 1}, []common.Hash{bc.CurrentBlock().Hash()}, }, // Ensure protocol limits are honored //{ - // &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 1}, Amount: limit + 10, Reverse: true}, + // &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}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 4}, Skip: 3, Amount: 3}, []common.Hash{ bc.GetBlockByNumber(bc.CurrentBlock().NumberU64() - 4).Hash(), bc.GetBlockByNumber(bc.CurrentBlock().NumberU64()).Hash(), }, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 3, Amount: 3, Reverse: true}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 3, Amount: 3, Reverse: true}, []common.Hash{ bc.GetBlockByNumber(4).Hash(), bc.GetBlockByNumber(0).Hash(), @@ -136,13 +144,13 @@ func testGetBlockHeaders(t *testing.T, protocol int) { }, // Check that requesting more than available is handled gracefully, even if mid skip { - &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 4}, Skip: 2, Amount: 3}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 4}, Skip: 2, Amount: 3}, []common.Hash{ bc.GetBlockByNumber(bc.CurrentBlock().NumberU64() - 4).Hash(), bc.GetBlockByNumber(bc.CurrentBlock().NumberU64() - 1).Hash(), }, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 2, Amount: 3, Reverse: true}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 2, Amount: 3, Reverse: true}, []common.Hash{ bc.GetBlockByNumber(4).Hash(), bc.GetBlockByNumber(1).Hash(), @@ -150,10 +158,10 @@ func testGetBlockHeaders(t *testing.T, protocol int) { }, // Check that non existing headers aren't returned { - &getBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1}, []common.Hash{}, }, { - &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() + 1}, Amount: 1}, + &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() + 1}, Amount: 1}, []common.Hash{}, }, } @@ -168,9 +176,8 @@ func testGetBlockHeaders(t *testing.T, protocol int) { // Send the hash request and verify the response reqID++ - 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 { + sendRequest(rawPeer.app, GetBlockHeadersMsg, reqID, tt.query) + if err := expectResponse(rawPeer.app, BlockHeadersMsg, reqID, testBufLimit, headers); err != nil { t.Errorf("test %d: headers mismatch: %v", i, err) } } @@ -179,11 +186,20 @@ func testGetBlockHeaders(t *testing.T, protocol int) { // Tests that block contents can be retrieved from a remote chain based on their hashes. func TestGetBlockBodiesLes2(t *testing.T) { testGetBlockBodies(t, 2) } func TestGetBlockBodiesLes3(t *testing.T) { testGetBlockBodies(t, 3) } +func TestGetBlockBodiesLes4(t *testing.T) { testGetBlockBodies(t, 4) } func testGetBlockBodies(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, downloader.MaxBlockFetch+15, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: downloader.MaxHeaderFetch + 15, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain // Create a batch of tests for various scenarios @@ -246,9 +262,8 @@ func testGetBlockBodies(t *testing.T, protocol int) { reqID++ // Send the hash request and verify the response - 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 { + sendRequest(rawPeer.app, GetBlockBodiesMsg, reqID, hashes) + if err := expectResponse(rawPeer.app, BlockBodiesMsg, reqID, testBufLimit, bodies); err != nil { t.Errorf("test %d: bodies mismatch: %v", i, err) } } @@ -257,11 +272,21 @@ func testGetBlockBodies(t *testing.T, protocol int) { // Tests that the contract codes can be retrieved based on account addresses. func TestGetCodeLes2(t *testing.T) { testGetCode(t, 2) } func TestGetCodeLes3(t *testing.T) { testGetCode(t, 3) } +func TestGetCodeLes4(t *testing.T) { testGetCode(t, 4) } func testGetCode(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain var codereqs []*CodeReq @@ -278,9 +303,8 @@ func testGetCode(t *testing.T, protocol int) { } } - 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 { + sendRequest(rawPeer.app, GetCodeMsg, 42, codereqs) + if err := expectResponse(rawPeer.app, CodeMsg, 42, testBufLimit, codes); err != nil { t.Errorf("codes mismatch: %v", err) } } @@ -288,10 +312,20 @@ func testGetCode(t *testing.T, protocol int) { // 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 TestGetStaleCodeLes4(t *testing.T) { testGetStaleCode(t, 4) } func testGetStaleCode(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, core.TriesInMemory+4, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: core.TriesInMemory + 4, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain check := func(number uint64, expected [][]byte) { @@ -299,9 +333,8 @@ func testGetStaleCode(t *testing.T, protocol int) { 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 { + sendRequest(rawPeer.app, GetCodeMsg, 42, []*CodeReq{req}) + if err := expectResponse(rawPeer.app, CodeMsg, 42, testBufLimit, expected); err != nil { t.Errorf("codes mismatch: %v", err) } } @@ -313,12 +346,21 @@ func testGetStaleCode(t *testing.T, protocol int) { // Tests that the transaction receipts can be retrieved based on hashes. func TestGetReceiptLes2(t *testing.T) { testGetReceipt(t, 2) } func TestGetReceiptLes3(t *testing.T) { testGetReceipt(t, 3) } +func TestGetReceiptLes4(t *testing.T) { testGetReceipt(t, 4) } func testGetReceipt(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain // Collect the hashes to request, and the response to expect @@ -328,12 +370,11 @@ func testGetReceipt(t *testing.T, protocol int) { block := bc.GetBlockByNumber(i) hashes = append(hashes, block.Hash()) - receipts = append(receipts, rawdb.ReadRawReceipts(server.db, block.Hash(), block.NumberU64())) + receipts = append(receipts, rawdb.ReadReceipts(server.db, block.Hash(), block.NumberU64(), bc.Config())) } // Send the hash request and verify the response - 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 { + sendRequest(rawPeer.app, GetReceiptsMsg, 42, hashes) + if err := expectResponse(rawPeer.app, ReceiptsMsg, 42, testBufLimit, receipts); err != nil { t.Errorf("receipts mismatch: %v", err) } } @@ -341,12 +382,21 @@ func testGetReceipt(t *testing.T, protocol int) { // Tests that trie merkle proofs can be retrieved func TestGetProofsLes2(t *testing.T) { testGetProofs(t, 2) } func TestGetProofsLes3(t *testing.T) { testGetProofs(t, 3) } +func TestGetProofsLes4(t *testing.T) { testGetProofs(t, 4) } func testGetProofs(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain var proofreqs []ProofReq @@ -355,7 +405,7 @@ func testGetProofs(t *testing.T, protocol int) { accounts := []common.Address{bankAddr, userAddr1, userAddr2, signerAddr, {}} for i := uint64(0); i <= bc.CurrentBlock().NumberU64(); i++ { header := bc.GetHeaderByNumber(i) - trie, _ := trie.New(header.Root, trie.NewDatabase(server.db)) + trie, _ := trie.New(common.Hash{}, header.Root, trie.NewDatabase(server.db)) for _, acc := range accounts { req := ProofReq{ @@ -367,9 +417,8 @@ func testGetProofs(t *testing.T, protocol int) { } } // Send the proof request and verify the response - 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 { + sendRequest(rawPeer.app, GetProofsV2Msg, 42, proofreqs) + if err := expectResponse(rawPeer.app, ProofsV2Msg, 42, testBufLimit, proofsV2.NodeList()); err != nil { t.Errorf("proofs mismatch: %v", err) } } @@ -377,10 +426,20 @@ func testGetProofs(t *testing.T, protocol int) { // 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 TestGetStaleProofLes4(t *testing.T) { testGetStaleProof(t, 4) } func testGetStaleProof(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, core.TriesInMemory+4, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + blocks: core.TriesInMemory + 4, + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain check := func(number uint64, wantOK bool) { @@ -392,17 +451,16 @@ func testGetStaleProof(t *testing.T, protocol int) { BHash: header.Hash(), Key: account, } - cost := server.peer.peer.GetRequestCost(GetProofsV2Msg, 1) - sendRequest(server.peer.app, GetProofsV2Msg, 42, cost, []*ProofReq{req}) + sendRequest(rawPeer.app, GetProofsV2Msg, 42, []*ProofReq{req}) var expected []rlp.RawValue if wantOK { proofsV2 := light.NewNodeSet() - t, _ := trie.New(header.Root, trie.NewDatabase(server.db)) + t, _ := trie.New(common.Hash{}, 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 { + if err := expectResponse(rawPeer.app, ProofsV2Msg, 42, testBufLimit, expected); err != nil { t.Errorf("codes mismatch: %v", err) } } @@ -414,22 +472,33 @@ func testGetStaleProof(t *testing.T, protocol int) { // Tests that CHT proofs can be correctly retrieved. func TestGetCHTProofsLes2(t *testing.T) { testGetCHTProofs(t, 2) } func TestGetCHTProofsLes3(t *testing.T) { testGetCHTProofs(t, 3) } +func TestGetCHTProofsLes4(t *testing.T) { testGetCHTProofs(t, 4) } func testGetCHTProofs(t *testing.T, protocol int) { - config := light.TestServerIndexerConfig - - waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { - for { - cs, _, _ := cIndexer.Sections() - if cs >= 1 { - break + var ( + config = light.TestServerIndexerConfig + waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + if cs >= 1 { + break + } + time.Sleep(10 * time.Millisecond) } - time.Sleep(10 * time.Millisecond) } - } - server, tearDown := newServerEnv(t, int(config.ChtSize+config.ChtConfirms), protocol, waitIndexers, false, true, 0) + netconfig = testnetConfig{ + blocks: int(config.ChtSize + config.ChtConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + ) + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain // Assemble the proofs from the different protocols @@ -443,42 +512,52 @@ func testGetCHTProofs(t *testing.T, protocol int) { AuxData: [][]byte{rlp}, } 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, _ := trie.New(common.Hash{}, root, trie.NewDatabase(rawdb.NewTable(server.db, light.ChtTablePrefix))) trie.Prove(key, 0, &proofsV2.Proofs) // Assemble the requests for the different protocols requestsV2 := []HelperTrieReq{{ Type: htCanonical, TrieIdx: 0, Key: key, - AuxReq: auxHeader, + AuxReq: htAuxHeader, }} // Send the proof request and verify the response - 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 { + sendRequest(rawPeer.app, GetHelperTrieProofsMsg, 42, requestsV2) + if err := expectResponse(rawPeer.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) } +func TestGetBloombitsProofsLes4(t *testing.T) { testGetBloombitsProofs(t, 4) } // Tests that bloombits proofs can be correctly retrieved. func testGetBloombitsProofs(t *testing.T, protocol int) { - config := light.TestServerIndexerConfig - - waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { - for { - bts, _, _ := btIndexer.Sections() - if bts >= 1 { - break + var ( + config = light.TestServerIndexerConfig + waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + bts, _, _ := btIndexer.Sections() + if bts >= 1 { + break + } + time.Sleep(10 * time.Millisecond) } - time.Sleep(10 * time.Millisecond) } - } - server, tearDown := newServerEnv(t, int(config.BloomTrieSize+config.BloomTrieConfirms), protocol, waitIndexers, false, true, 0) + netconfig = testnetConfig{ + blocks: int(config.BloomTrieSize + config.BloomTrieConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + ) + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + bc := server.handler.blockchain // Request and verify each bit of the bloom bits proofs @@ -498,24 +577,32 @@ func testGetBloombitsProofs(t *testing.T, protocol int) { var proofs HelperTrieResps root := light.GetBloomTrieRoot(server.db, 0, bc.GetHeaderByNumber(config.BloomTrieSize-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.BloomTrieTablePrefix))) + trie, _ := trie.New(common.Hash{}, 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.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 { + sendRequest(rawPeer.app, GetHelperTrieProofsMsg, 42, requests) + if err := expectResponse(rawPeer.app, HelperTrieProofsMsg, 42, testBufLimit, proofs); err != nil { t.Errorf("bit %d: proofs mismatch: %v", bit, err) } } } -func TestTransactionStatusLes2(t *testing.T) { testTransactionStatus(t, 2) } -func TestTransactionStatusLes3(t *testing.T) { testTransactionStatus(t, 3) } +func TestTransactionStatusLes2(t *testing.T) { testTransactionStatus(t, lpv2) } +func TestTransactionStatusLes3(t *testing.T) { testTransactionStatus(t, lpv3) } +func TestTransactionStatusLes4(t *testing.T) { testTransactionStatus(t, lpv4) } func testTransactionStatus(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, 0, protocol, nil, false, true, 0) + netconfig := testnetConfig{ + protocol: protocol, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() + + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() + server.handler.addTxsSync = true chain := server.handler.blockchain @@ -525,13 +612,11 @@ func testTransactionStatus(t *testing.T, protocol int) { test := func(tx *types.Transaction, send bool, expStatus light.TxStatus) { reqID++ if send { - cost := server.peer.peer.GetRequestCost(SendTxV2Msg, 1) - sendRequest(server.peer.app, SendTxV2Msg, reqID, cost, types.Transactions{tx}) + sendRequest(rawPeer.app, SendTxV2Msg, reqID, types.Transactions{tx}) } else { - cost := server.peer.peer.GetRequestCost(GetTxStatusMsg, 1) - sendRequest(server.peer.app, GetTxStatusMsg, reqID, cost, []common.Hash{tx.Hash()}) + sendRequest(rawPeer.app, GetTxStatusMsg, reqID, []common.Hash{tx.Hash()}) } - if err := expectResponse(server.peer.app, TxStatusMsg, reqID, testBufLimit, []light.TxStatus{expStatus}); err != nil { + if err := expectResponse(rawPeer.app, TxStatusMsg, reqID, testBufLimit, []light.TxStatus{expStatus}); err != nil { t.Errorf("transaction status mismatch") } } @@ -573,7 +658,7 @@ func testTransactionStatus(t *testing.T, protocol int) { t.Fatalf("pending count mismatch: have %d, want 1", pending) } // Discard new block announcement - msg, _ := server.peer.app.ReadMsg() + msg, _ := rawPeer.app.ReadMsg() msg.Discard() // check if their status is included now @@ -598,7 +683,7 @@ func testTransactionStatus(t *testing.T, protocol int) { t.Fatalf("pending count mismatch: have %d, want 3", pending) } // Discard new block announcement - msg, _ = server.peer.app.ReadMsg() + msg, _ = rawPeer.app.ReadMsg() msg.Discard() // check if their status is pending again @@ -606,11 +691,23 @@ func testTransactionStatus(t *testing.T, protocol int) { test(tx2, false, light.TxStatus{Status: core.TxStatusPending}) } -func TestStopResumeLes3(t *testing.T) { - server, tearDown := newServerEnv(t, 0, 3, nil, true, true, testBufLimit/10) +func TestStopResumeLES3(t *testing.T) { testStopResume(t, lpv3) } +func TestStopResumeLES4(t *testing.T) { testStopResume(t, lpv4) } + +func testStopResume(t *testing.T, protocol int) { + netconfig := testnetConfig{ + protocol: protocol, + simClock: true, + nopruning: true, + } + server, _, tearDown := newClientServerEnv(t, netconfig) defer tearDown() server.handler.server.costTracker.testing = true + server.handler.server.costTracker.testCostList = testCostList(testBufLimit / 10) + + rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) + defer closePeer() var ( reqID uint64 @@ -620,14 +717,14 @@ func TestStopResumeLes3(t *testing.T) { header := server.handler.blockchain.CurrentHeader() req := func() { reqID++ - sendRequest(server.peer.app, GetBlockHeadersMsg, reqID, testCost, &getBlockHeadersData{Origin: hashOrNumber{Hash: header.Hash()}, Amount: 1}) + sendRequest(rawPeer.app, GetBlockHeadersMsg, reqID, &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 { + if err := expectResponse(rawPeer.app, BlockHeadersMsg, reqID, expBuf, []*types.Header{header}); err != nil { t.Errorf("expected response and failed: %v", err) } } @@ -637,7 +734,7 @@ func TestStopResumeLes3(t *testing.T) { req() c-- } - if err := p2p.ExpectMsg(server.peer.app, StopMsg, nil); err != nil { + if err := p2p.ExpectMsg(rawPeer.app, StopMsg, nil); err != nil { t.Errorf("expected StopMsg and failed: %v", err) } // wait until the buffer is recharged by half of the limit @@ -646,7 +743,7 @@ func TestStopResumeLes3(t *testing.T) { // expect a ResumeMsg with the partially recharged buffer value expBuf += testBufRecharge * wait - if err := p2p.ExpectMsg(server.peer.app, ResumeMsg, expBuf); err != nil { + if err := p2p.ExpectMsg(rawPeer.app, ResumeMsg, expBuf); err != nil { t.Errorf("expected ResumeMsg and failed: %v", err) } } diff --git a/les/metrics.go b/les/metrics.go index c29b068b..07d3133c 100644 --- a/les/metrics.go +++ b/les/metrics.go @@ -17,8 +17,8 @@ package les import ( - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/p2p" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" ) var ( @@ -60,35 +60,54 @@ var ( 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)) - + 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) + 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) + + serverSelectableGauge = metrics.NewRegisteredGauge("les/client/serverPool/selectable", nil) + serverDialedMeter = metrics.NewRegisteredMeter("les/client/serverPool/dialed", nil) + serverConnectedGauge = metrics.NewRegisteredGauge("les/client/serverPool/connected", nil) + sessionValueMeter = metrics.NewRegisteredMeter("les/client/serverPool/sessionValue", nil) + totalValueGauge = metrics.NewRegisteredGauge("les/client/serverPool/totalValue", nil) + suggestedTimeoutGauge = metrics.NewRegisteredGauge("les/client/serverPool/timeout", nil) ) // meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of diff --git a/les/odr.go b/les/odr.go index 391fbe57..2643a534 100644 --- a/les/odr.go +++ b/les/odr.go @@ -18,13 +18,14 @@ package les import ( "context" + "math/rand" + "sort" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" + "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" ) // LesOdr implements light.OdrBackend @@ -32,14 +33,16 @@ type LesOdr struct { db ethdb.Database indexerConfig *light.IndexerConfig chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer + peers *serverPeerSet retriever *retrieveManager stop chan struct{} } -func NewLesOdr(db ethdb.Database, config *light.IndexerConfig, retriever *retrieveManager) *LesOdr { +func NewLesOdr(db ethdb.Database, config *light.IndexerConfig, peers *serverPeerSet, retriever *retrieveManager) *LesOdr { return &LesOdr{ db: db, indexerConfig: config, + peers: peers, retriever: retriever, stop: make(chan struct{}), } @@ -83,7 +86,8 @@ func (odr *LesOdr) IndexerConfig() *light.IndexerConfig { } const ( - MsgBlockBodies = iota + MsgBlockHeaders = iota + MsgBlockBodies MsgCode MsgReceipts MsgProofsV2 @@ -98,37 +102,135 @@ type Msg struct { Obj interface{} } -// Retrieve tries to fetch an object from the LES network. +// peerByTxHistory is a heap.Interface implementation which can sort +// the peerset by transaction history. +type peerByTxHistory []*serverPeer + +func (h peerByTxHistory) Len() int { return len(h) } +func (h peerByTxHistory) Less(i, j int) bool { + if h[i].txHistory == txIndexUnlimited { + return false + } + if h[j].txHistory == txIndexUnlimited { + return true + } + return h[i].txHistory < h[j].txHistory +} +func (h peerByTxHistory) Swap(i, j int) { h[i], h[j] = h[j], h[i] } + +const ( + maxTxStatusRetry = 3 // The maximum retrys will be made for tx status request. + maxTxStatusCandidates = 5 // The maximum les servers the tx status requests will be sent to. +) + +// RetrieveTxStatus retrieves the transaction status from the LES network. +// There is no guarantee in the LES protocol that the mined transaction will +// be retrieved back for sure because of different reasons(the transaction +// is unindexed, the malicious server doesn't reply it deliberately, etc). +// Therefore, unretrieved transactions(UNKNOWN) will receive a certain number +// of retries, thus giving a weak guarantee. +func (odr *LesOdr) RetrieveTxStatus(ctx context.Context, req *light.TxStatusRequest) error { + // Sort according to the transaction history supported by the peer and + // select the peers with longest history. + var ( + retries int + peers []*serverPeer + missing = len(req.Hashes) + result = make([]light.TxStatus, len(req.Hashes)) + canSend = make(map[string]bool) + ) + for _, peer := range odr.peers.allPeers() { + if peer.txHistory == txIndexDisabled { + continue + } + peers = append(peers, peer) + } + sort.Sort(sort.Reverse(peerByTxHistory(peers))) + for i := 0; i < maxTxStatusCandidates && i < len(peers); i++ { + canSend[peers[i].id] = true + } + // Send out the request and assemble the result. + for { + if retries >= maxTxStatusRetry || len(canSend) == 0 { + break + } + var ( + // Deep copy the request, so that the partial result won't be mixed. + req = &TxStatusRequest{Hashes: req.Hashes} + id = rand.Uint64() + distreq = &distReq{ + getCost: func(dp distPeer) uint64 { return req.GetCost(dp.(*serverPeer)) }, + canSend: func(dp distPeer) bool { return canSend[dp.(*serverPeer).id] }, + request: func(dp distPeer) func() { + p := dp.(*serverPeer) + p.fcServer.QueuedRequest(id, req.GetCost(p)) + delete(canSend, p.id) + return func() { req.Request(id, p) } + }, + } + ) + if err := odr.retriever.retrieve(ctx, id, distreq, func(p distPeer, msg *Msg) error { return req.Validate(odr.db, msg) }, odr.stop); err != nil { + return err + } + // Collect the response and assemble them to the final result. + // All the response is not verifiable, so always pick the first + // one we get. + for index, status := range req.Status { + if result[index].Status != core.TxStatusUnknown { + continue + } + if status.Status == core.TxStatusUnknown { + continue + } + result[index], missing = status, missing-1 + } + // Abort the procedure if all the status are retrieved + if missing == 0 { + break + } + retries += 1 + } + req.Status = result + return nil +} + +// Retrieve tries to fetch an object from the LES network. It's a common API +// for most of the LES requests except for the TxStatusRequest which needs +// the additional retry mechanism. // If the network retrieval was successful, it stores the object in local db. func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error) { lreq := LesRequest(req) - reqID := genReqID() + reqID := rand.Uint64() rq := &distReq{ getCost: func(dp distPeer) uint64 { - return lreq.GetCost(dp.(*peer)) + return lreq.GetCost(dp.(*serverPeer)) }, canSend: func(dp distPeer) bool { - p := dp.(*peer) + p := dp.(*serverPeer) if !p.onlyAnnounce { return lreq.CanSend(p) } return false }, request: func(dp distPeer) func() { - p := dp.(*peer) + p := dp.(*serverPeer) cost := lreq.GetCost(p) 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) + + defer func(sent mclock.AbsTime) { + if err != nil { + return + } requestRTT.Update(time.Duration(mclock.Now() - sent)) - } else { - log.Debug("Failed to retrieve data from network", "err", err) + }(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 { + return err } - return + req.StoreResult(odr.db) + return nil } diff --git a/les/odr_requests.go b/les/odr_requests.go index 0d01886b..d548fb1e 100644 --- a/les/odr_requests.go +++ b/les/odr_requests.go @@ -21,15 +21,15 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "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/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) var ( @@ -46,9 +46,9 @@ var ( ) type LesOdrRequest interface { - GetCost(*peer) uint64 - CanSend(*peer) bool - Request(uint64, *peer) error + GetCost(*serverPeer) uint64 + CanSend(*serverPeer) bool + Request(uint64, *serverPeer) error Validate(ethdb.Database, *Msg) error } @@ -78,19 +78,19 @@ type BlockRequest light.BlockRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) -func (r *BlockRequest) GetCost(peer *peer) uint64 { - return peer.GetRequestCost(GetBlockBodiesMsg, 1) +func (r *BlockRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetBlockBodiesMsg, 1) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *BlockRequest) CanSend(peer *peer) bool { +func (r *BlockRequest) CanSend(peer *serverPeer) bool { return peer.HasBlock(r.Hash, r.Number, false) } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *BlockRequest) Request(reqID uint64, peer *peer) error { +func (r *BlockRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting block body", "hash", r.Hash) - return peer.RequestBodies(reqID, r.GetCost(peer), []common.Hash{r.Hash}) + return peer.requestBodies(reqID, []common.Hash{r.Hash}) } // Valid processes an ODR request reply message from the LES network @@ -110,14 +110,16 @@ func (r *BlockRequest) Validate(db ethdb.Database, msg *Msg) error { body := bodies[0] // Retrieve our stored header and validate block 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.TxHash != types.DeriveSha(types.Transactions(body.Transactions)) { + if r.Header.TxHash != types.DeriveSha(types.Transactions(body.Transactions), trie.NewStackTrie(nil)) { return errTxHashMismatch } - if header.UncleHash != types.CalcUncleHash(body.Uncles) { + if r.Header.UncleHash != types.CalcUncleHash(body.Uncles) { return errUncleHashMismatch } // Validations passed, encode and store RLP @@ -134,19 +136,19 @@ type ReceiptsRequest light.ReceiptsRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) -func (r *ReceiptsRequest) GetCost(peer *peer) uint64 { - return peer.GetRequestCost(GetReceiptsMsg, 1) +func (r *ReceiptsRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetReceiptsMsg, 1) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *ReceiptsRequest) CanSend(peer *peer) bool { +func (r *ReceiptsRequest) CanSend(peer *serverPeer) bool { return peer.HasBlock(r.Hash, r.Number, false) } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *ReceiptsRequest) Request(reqID uint64, peer *peer) error { +func (r *ReceiptsRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting block receipts", "hash", r.Hash) - return peer.RequestReceipts(reqID, r.GetCost(peer), []common.Hash{r.Hash}) + return peer.requestReceipts(reqID, []common.Hash{r.Hash}) } // Valid processes an ODR request reply message from the LES network @@ -172,7 +174,7 @@ func (r *ReceiptsRequest) Validate(db ethdb.Database, msg *Msg) error { if r.Header == nil { return errHeaderUnavailable } - if r.Header.ReceiptHash != types.DeriveSha(receipt) { + if r.Header.ReceiptHash != types.DeriveSha(receipt, trie.NewStackTrie(nil)) { return errReceiptHashMismatch } // Validations passed, store and return @@ -191,24 +193,24 @@ 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 { - return peer.GetRequestCost(GetProofsV2Msg, 1) +func (r *TrieRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetProofsV2Msg, 1) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *TrieRequest) CanSend(peer *peer) bool { +func (r *TrieRequest) CanSend(peer *serverPeer) bool { return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true) } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *TrieRequest) Request(reqID uint64, peer *peer) error { +func (r *TrieRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting trie proof", "root", r.Id.Root, "key", r.Key) req := ProofReq{ BHash: r.Id.BlockHash, AccKey: r.Id.AccKey, Key: r.Key, } - return peer.RequestProofs(reqID, r.GetCost(peer), []ProofReq{req}) + return peer.requestProofs(reqID, []ProofReq{req}) } // Valid processes an ODR request reply message from the LES network @@ -224,7 +226,7 @@ func (r *TrieRequest) Validate(db ethdb.Database, msg *Msg) error { // 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 { + 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 @@ -245,23 +247,23 @@ type CodeRequest light.CodeRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) -func (r *CodeRequest) GetCost(peer *peer) uint64 { - return peer.GetRequestCost(GetCodeMsg, 1) +func (r *CodeRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetCodeMsg, 1) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *CodeRequest) CanSend(peer *peer) bool { +func (r *CodeRequest) CanSend(peer *serverPeer) bool { return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true) } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *CodeRequest) Request(reqID uint64, peer *peer) error { +func (r *CodeRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting code data", "hash", r.Hash) req := CodeReq{ BHash: r.Id.BlockHash, AccKey: r.Id.AccKey, } - return peer.RequestCode(reqID, r.GetCost(peer), []CodeReq{req}) + return peer.requestCode(reqID, []CodeReq{req}) } // Valid processes an ODR request reply message from the LES network @@ -293,10 +295,9 @@ const ( htCanonical = iota // Canonical hash trie htBloomBits // BloomBits trie - // applicable for all helper trie requests - auxRoot = 1 - // applicable for htCanonical - auxHeader = 2 + // helper trie auxiliary types + // htAuxNone = 1 ; deprecated number, used in les2/3 previously. + htAuxHeader = 2 // applicable for htCanonical, requests for relevant headers ) type HelperTrieReq struct { @@ -316,24 +317,20 @@ 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 { - return peer.GetRequestCost(GetHelperTrieProofsMsg, 1) +func (r *ChtRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetHelperTrieProofsMsg, 1) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *ChtRequest) CanSend(peer *peer) bool { +func (r *ChtRequest) CanSend(peer *serverPeer) bool { peer.lock.RLock() defer peer.lock.RUnlock() - 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 - } + 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) -func (r *ChtRequest) Request(reqID uint64, peer *peer) error { +func (r *ChtRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting CHT", "cht", r.ChtNum, "block", r.BlockNum) var encNum [8]byte binary.BigEndian.PutUint64(encNum[:], r.BlockNum) @@ -341,9 +338,9 @@ func (r *ChtRequest) Request(reqID uint64, peer *peer) error { Type: htCanonical, TrieIdx: r.ChtNum, Key: encNum[:], - AuxReq: auxHeader, + AuxReq: htAuxHeader, } - return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []HelperTrieReq{req}) + return peer.requestHelperTrieProofs(reqID, []HelperTrieReq{req}) } // Valid processes an ODR request reply message from the LES network @@ -368,39 +365,34 @@ func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error { if err := rlp.DecodeBytes(headerEnc, header); err != nil { return errHeaderUnavailable } - // 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) - - reads := &readTraceDB{db: nodeSet} - value, _, err := trie.VerifyProof(r.ChtRoot, encNumber[:], reads) - if err != nil { - return fmt.Errorf("merkle proof verification failed: %v", err) - } - if len(reads.reads) != nodeSet.KeyCount() { - return errUselessNodes - } + var ( + node light.ChtNode + encNumber [8]byte + ) + binary.BigEndian.PutUint64(encNumber[:], r.BlockNum) - if err := rlp.DecodeBytes(value, &node); err != nil { - return err - } - if node.Hash != header.Hash() { - return errCHTHashMismatch - } - if r.BlockNum != header.Number.Uint64() { - return errCHTNumberMismatch - } + reads := &readTraceDB{db: nodeSet} + value, err := trie.VerifyProof(r.ChtRoot, encNumber[:], reads) + if err != nil { + return fmt.Errorf("merkle proof verification failed: %v", err) + } + if len(reads.reads) != nodeSet.KeyCount() { + return errUselessNodes + } + if err := rlp.DecodeBytes(value, &node); err != nil { + return err + } + if node.Hash != header.Hash() { + return errCHTHashMismatch + } + if r.BlockNum != header.Number.Uint64() { + return errCHTNumberMismatch } // 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 - + r.Td = node.Td return nil } @@ -413,12 +405,12 @@ type BloomRequest light.BloomRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) -func (r *BloomRequest) GetCost(peer *peer) uint64 { - return peer.GetRequestCost(GetHelperTrieProofsMsg, len(r.SectionIndexList)) +func (r *BloomRequest) GetCost(peer *serverPeer) uint64 { + return peer.getRequestCost(GetHelperTrieProofsMsg, len(r.SectionIndexList)) } // CanSend tells if a certain peer is suitable for serving the given request -func (r *BloomRequest) CanSend(peer *peer) bool { +func (r *BloomRequest) CanSend(peer *serverPeer) bool { peer.lock.RLock() defer peer.lock.RUnlock() @@ -429,7 +421,7 @@ func (r *BloomRequest) CanSend(peer *peer) bool { } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *BloomRequest) Request(reqID uint64, peer *peer) error { +func (r *BloomRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList) reqs := make([]HelperTrieReq, len(r.SectionIndexList)) @@ -444,7 +436,7 @@ func (r *BloomRequest) Request(reqID uint64, peer *peer) error { Key: common.CopyBytes(encNumber[:]), } } - return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), reqs) + return peer.requestHelperTrieProofs(reqID, reqs) } // Valid processes an ODR request reply message from the LES network @@ -470,7 +462,7 @@ func (r *BloomRequest) Validate(db ethdb.Database, msg *Msg) error { for i, idx := range r.SectionIndexList { binary.BigEndian.PutUint64(encNumber[2:], idx) - value, _, err := trie.VerifyProof(r.BloomTrieRoot, encNumber[:], reads) + value, err := trie.VerifyProof(r.BloomTrieRoot, encNumber[:], reads) if err != nil { return err } @@ -489,28 +481,27 @@ 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)) +func (r *TxStatusRequest) GetCost(peer *serverPeer) 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 +func (r *TxStatusRequest) CanSend(peer *serverPeer) bool { + return peer.txHistory != txIndexDisabled } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *TxStatusRequest) Request(reqID uint64, peer *peer) error { +func (r *TxStatusRequest) Request(reqID uint64, peer *serverPeer) error { peer.Log().Debug("Requesting transaction status", "count", len(r.Hashes)) - return peer.RequestTxStatus(reqID, r.GetCost(peer), r.Hashes) + return peer.requestTxStatus(reqID, r.Hashes) } -// Valid processes an ODR request reply message from the LES network +// Validate 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 } diff --git a/les/odr_test.go b/les/odr_test.go index 57e55979..24b8e2ae 100644 --- a/les/odr_test.go +++ b/les/odr_test.go @@ -19,27 +19,31 @@ package les import ( "bytes" "context" + "crypto/rand" + "fmt" "math/big" + "reflect" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "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" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" ) type odrTestFn func(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte func TestOdrGetBlockLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetBlock) } func TestOdrGetBlockLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetBlock) } +func TestOdrGetBlockLes4(t *testing.T) { testOdr(t, 4, 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 @@ -57,6 +61,7 @@ func odrGetBlock(ctx context.Context, db ethdb.Database, config *params.ChainCon func TestOdrGetReceiptsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetReceipts) } func TestOdrGetReceiptsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetReceipts) } +func TestOdrGetReceiptsLes4(t *testing.T) { testOdr(t, 4, 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 @@ -78,6 +83,7 @@ func odrGetReceipts(ctx context.Context, db ethdb.Database, config *params.Chain func TestOdrAccountsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrAccounts) } func TestOdrAccountsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrAccounts) } +func TestOdrAccountsLes4(t *testing.T) { testOdr(t, 4, 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") @@ -91,7 +97,7 @@ func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainCon for _, addr := range acc { if bc != nil { header := bc.GetHeaderByHash(bhash) - st, err = state.New(header.Root, state.NewDatabase(db)) + st, err = state.New(header.Root, state.NewDatabase(db), nil) } else { header := lc.GetHeaderByHash(bhash) st = light.NewState(ctx, header, lc.Odr()) @@ -107,6 +113,7 @@ func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainCon func TestOdrContractCallLes2(t *testing.T) { testOdr(t, 2, 2, true, odrContractCall) } func TestOdrContractCallLes3(t *testing.T) { testOdr(t, 3, 2, true, odrContractCall) } +func TestOdrContractCallLes4(t *testing.T) { testOdr(t, 4, 2, true, odrContractCall) } type callmsg struct { types.Message @@ -122,33 +129,35 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai data[35] = byte(i) if bc != nil { header := bc.GetHeaderByHash(bhash) - statedb, err := state.New(header.Root, state.NewDatabase(db)) + statedb, err := state.New(header.Root, state.NewDatabase(db), nil) if err == nil { 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)} + msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), 100000, big.NewInt(params.InitialBaseFee), big.NewInt(params.InitialBaseFee), new(big.Int), data, nil, true)} - context := core.NewEVMContext(msg, header, bc, nil) - vmenv := vm.NewEVM(context, statedb, config, vm.Config{}) + context := core.NewEVMBlockContext(header, bc, nil) + txContext := core.NewEVMTxContext(msg) + vmenv := vm.NewEVM(context, txContext, statedb, config, vm.Config{NoBaseFee: true}) //vmenv := core.NewEnv(statedb, config, bc, msg, header, vm.Config{}) gp := new(core.GasPool).AddGas(math.MaxUint64) - ret, _, _, _ := core.ApplyMessage(vmenv, msg, gp) - res = append(res, ret...) + result, _ := core.ApplyMessage(vmenv, msg, gp) + res = append(res, result.Return()...) } } else { header := lc.GetHeaderByHash(bhash) state := light.NewState(ctx, header, lc.Odr()) 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{}) + msg := callmsg{types.NewMessage(bankAddr, &testContractAddr, 0, new(big.Int), 100000, big.NewInt(params.InitialBaseFee), big.NewInt(params.InitialBaseFee), new(big.Int), data, nil, true)} + context := core.NewEVMBlockContext(header, lc, nil) + txContext := core.NewEVMTxContext(msg) + vmenv := vm.NewEVM(context, txContext, state, config, vm.Config{NoBaseFee: true}) gp := new(core.GasPool).AddGas(math.MaxUint64) - ret, _, _, _ := core.ApplyMessage(vmenv, msg, gp) + result, _ := core.ApplyMessage(vmenv, msg, gp) if state.Error() == nil { - res = append(res, ret...) + res = append(res, result.Return()...) } } } @@ -157,6 +166,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai func TestOdrTxStatusLes2(t *testing.T) { testOdr(t, 2, 1, false, odrTxStatus) } func TestOdrTxStatusLes3(t *testing.T) { testOdr(t, 3, 1, false, odrTxStatus) } +func TestOdrTxStatusLes4(t *testing.T) { testOdr(t, 4, 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 @@ -183,10 +193,23 @@ func odrTxStatus(ctx context.Context, db ethdb.Database, config *params.ChainCon // testOdr tests odr requests whose validation guaranteed by block headers. 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, nil, 0, false, true) + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + connect: true, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) defer tearDown() - client.handler.synchronise(client.peer.peer) + // Ensure the client has synced all necessary data. + clientHead := client.handler.backend.blockchain.CurrentHeader() + if clientHead.Number.Uint64() != 4 { + t.Fatalf("Failed to sync the chain with server, head: %v", clientHead.Number.Uint64()) + } + // Disable the mechanism that we will wait a few time for request + // even there is no suitable peer to send right now. + waitForPeers = 0 test := func(expFail uint64) { // Mark this as a helper to put the failures at the correct lines @@ -196,7 +219,9 @@ func testOdr(t *testing.T, protocol int, expFail uint64, checkCached bool, fn od bhash := rawdb.ReadCanonicalHash(server.db, i) b1 := fn(light.NoOdr, server.db, server.handler.server.chainConfig, server.handler.blockchain, nil, bhash) - ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) + // Set the timeout as 1 second here, ensure there is enough time + // for travis to make the action. + ctx, cancel := context.WithTimeout(context.Background(), time.Second) b2 := fn(ctx, client.db, client.handler.backend.chainConfig, nil, client.handler.backend.blockchain, bhash) cancel() @@ -213,20 +238,199 @@ func testOdr(t *testing.T, protocol int, expFail uint64, checkCached bool, fn od // expect retrievals to fail (except genesis block) without a les peer client.handler.backend.peers.lock.Lock() - client.peer.peer.hasBlock = func(common.Hash, uint64, bool) bool { return false } + client.peer.speer.hasBlockHook = func(common.Hash, uint64, bool) bool { return false } client.handler.backend.peers.lock.Unlock() test(expFail) // expect all retrievals to pass client.handler.backend.peers.lock.Lock() - client.peer.peer.hasBlock = func(common.Hash, uint64, bool) bool { return true } + client.peer.speer.hasBlockHook = 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 if checkCached { - client.handler.backend.peers.Unregister(client.peer.peer.id) + client.handler.backend.peers.unregister(client.peer.speer.id) time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed test(5) } } + +func TestGetTxStatusFromUnindexedPeersLES4(t *testing.T) { testGetTxStatusFromUnindexedPeers(t, lpv4) } + +func testGetTxStatusFromUnindexedPeers(t *testing.T, protocol int) { + var ( + blocks = 8 + netconfig = testnetConfig{ + blocks: blocks, + protocol: protocol, + nopruning: true, + } + ) + server, client, tearDown := newClientServerEnv(t, netconfig) + defer tearDown() + + // Iterate the chain, create the tx indexes locally + var ( + testHash common.Hash + testStatus light.TxStatus + + txs = make(map[common.Hash]*types.Transaction) // Transaction objects set + blockNumbers = make(map[common.Hash]uint64) // Transaction hash to block number mappings + blockHashes = make(map[common.Hash]common.Hash) // Transaction hash to block hash mappings + intraIndex = make(map[common.Hash]uint64) // Transaction intra-index in block + ) + for number := uint64(1); number < server.backend.Blockchain().CurrentBlock().NumberU64(); number++ { + block := server.backend.Blockchain().GetBlockByNumber(number) + if block == nil { + t.Fatalf("Failed to retrieve block %d", number) + } + for index, tx := range block.Transactions() { + txs[tx.Hash()] = tx + blockNumbers[tx.Hash()] = number + blockHashes[tx.Hash()] = block.Hash() + intraIndex[tx.Hash()] = uint64(index) + + if testHash == (common.Hash{}) { + testHash = tx.Hash() + testStatus = light.TxStatus{ + Status: core.TxStatusIncluded, + Lookup: &rawdb.LegacyTxLookupEntry{ + BlockHash: block.Hash(), + BlockIndex: block.NumberU64(), + Index: uint64(index), + }, + } + } + } + } + // serveMsg processes incoming GetTxStatusMsg and sends the response back. + serveMsg := func(peer *testPeer, txLookup uint64) error { + msg, err := peer.app.ReadMsg() + if err != nil { + return err + } + if msg.Code != GetTxStatusMsg { + return fmt.Errorf("message code mismatch: got %d, expected %d", msg.Code, GetTxStatusMsg) + } + var r GetTxStatusPacket + if err := msg.Decode(&r); err != nil { + return err + } + stats := make([]light.TxStatus, len(r.Hashes)) + for i, hash := range r.Hashes { + number, exist := blockNumbers[hash] + if !exist { + continue // Filter out unknown transactions + } + min := uint64(blocks) - txLookup + if txLookup != txIndexUnlimited && (txLookup == txIndexDisabled || number < min) { + continue // Filter out unindexed transactions + } + stats[i].Status = core.TxStatusIncluded + stats[i].Lookup = &rawdb.LegacyTxLookupEntry{ + BlockHash: blockHashes[hash], + BlockIndex: number, + Index: intraIndex[hash], + } + } + data, _ := rlp.EncodeToBytes(stats) + reply := &reply{peer.app, TxStatusMsg, r.ReqID, data} + reply.send(testBufLimit) + return nil + } + + var testspecs = []struct { + peers int + txLookups []uint64 + txs []common.Hash + results []light.TxStatus + }{ + // Retrieve mined transaction from the empty peerset + { + peers: 0, + txLookups: []uint64{}, + txs: []common.Hash{testHash}, + results: []light.TxStatus{{}}, + }, + // Retrieve unknown transaction from the full peers + { + peers: 3, + txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, + txs: []common.Hash{randomHash()}, + results: []light.TxStatus{{}}, + }, + // Retrieve mined transaction from the full peers + { + peers: 3, + txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, + txs: []common.Hash{testHash}, + results: []light.TxStatus{testStatus}, + }, + // Retrieve mixed transactions from the full peers + { + peers: 3, + txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, + txs: []common.Hash{randomHash(), testHash}, + results: []light.TxStatus{{}, testStatus}, + }, + // Retrieve mixed transactions from unindexed peer(but the target is still available) + { + peers: 3, + txLookups: []uint64{uint64(blocks) - testStatus.Lookup.BlockIndex, uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 2}, + txs: []common.Hash{randomHash(), testHash}, + results: []light.TxStatus{{}, testStatus}, + }, + // Retrieve mixed transactions from unindexed peer(but the target is not available) + { + peers: 3, + txLookups: []uint64{uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 2}, + txs: []common.Hash{randomHash(), testHash}, + results: []light.TxStatus{{}, {}}, + }, + } + for _, testspec := range testspecs { + // Create a bunch of server peers with different tx history + var ( + closeFns []func() + ) + for i := 0; i < testspec.peers; i++ { + peer, closePeer, _ := client.newRawPeer(t, fmt.Sprintf("server-%d", i), protocol, testspec.txLookups[i]) + closeFns = append(closeFns, closePeer) + + // Create a one-time routine for serving message + go func(i int, peer *testPeer, lookup uint64) { + serveMsg(peer, lookup) + }(i, peer, testspec.txLookups[i]) + } + + // Send out the GetTxStatus requests, compare the result with + // expected value. + r := &light.TxStatusRequest{Hashes: testspec.txs} + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + err := client.handler.backend.odr.RetrieveTxStatus(ctx, r) + if err != nil { + t.Errorf("Failed to retrieve tx status %v", err) + } else { + if !reflect.DeepEqual(testspec.results, r.Status) { + t.Errorf("Result mismatch, diff") + } + } + + // Close all connected peers and start the next round + for _, closeFn := range closeFns { + closeFn() + } + } +} + +// randomHash generates a random blob of data and returns it as a hash. +func randomHash() common.Hash { + var hash common.Hash + if n, err := rand.Read(hash[:]); n != common.HashLength || err != nil { + panic(err) + } + return hash +} diff --git a/les/peer.go b/les/peer.go index 46c73eee..deda052a 100644 --- a/les/peer.go +++ b/les/peer.go @@ -17,6 +17,7 @@ package les import ( + "crypto/ecdsa" "errors" "fmt" "math/big" @@ -26,17 +27,20 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/les/utils" + vfc "github.com/ethereum/go-ethereum/les/vflux/client" + vfs "github.com/ethereum/go-ethereum/les/vflux/server" + "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 ( @@ -48,24 +52,22 @@ var ( 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 + // 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 + txSizeCostLimit = 0x4000 + + // handshakeTimeout is the timeout LES handshake will be treated as failed. + handshakeTimeout = 5 * time.Second +) const ( announceTypeNone = iota @@ -73,167 +75,105 @@ const ( announceTypeSigned ) -type peer struct { - *p2p.Peer - rw p2p.MsgReadWriter - - version int // Protocol version negotiated - network uint64 // Network ID being on - - announceType uint64 - - // Checkpoint relative fields - checkpoint params.TrustedCheckpoint - checkpointNumber uint64 - - id string - - headInfo *announceData - lock sync.RWMutex - - 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 - fcParams flowcontrol.ServerParams - fcCosts requestCostTable - - 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: peerIdToString(p.ID()), - trusted: trusted, - errCh: make(chan error, 1), - } +type keyValueEntry struct { + Key string + Value rlp.RawValue } -// peerIdToString converts enode.ID to a string form -func peerIdToString(id enode.ID) string { - return fmt.Sprintf("%x", id.Bytes()) -} +type keyValueList []keyValueEntry +type keyValueMap map[string]rlp.RawValue -// 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() - } +func (l keyValueList) add(key string, val interface{}) keyValueList { + var entry keyValueEntry + entry.Key = key + if val == nil { + val = uint64(0) } - return p.id + enc, err := rlp.EncodeToBytes(val) + if err == nil { + entry.Value = enc + } + return append(l, entry) } -// 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 - } +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 } - p.updateCounter += size - return p.updateCounter > allowedUpdateBytes + return m, size } -// 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 +func (m keyValueMap) get(key string, val interface{}) error { + enc, ok := m[key] + if !ok { + return errResp(ErrMissingKey, "%s", key) } - 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 - } - } - }() + if val == nil { + return nil } + return rlp.DecodeBytes(enc, val) } -// 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() - } +// peerCommons contains fields needed by both server peer and client peer. +type peerCommons struct { + *p2p.Peer + rw p2p.MsgReadWriter + + id string // Peer identity. + version int // Protocol version negotiated. + network uint64 // Network ID being on. + frozen uint32 // Flag whether the peer is frozen. + announceType uint64 // New block announcement type. + serving uint32 // The status indicates the peer is served. + headInfo blockInfo // Last announced block information. + + // Background task queue for caching peer tasks and executing in order. + sendQueue *utils.ExecQueue + + // Flow control agreement. + fcParams flowcontrol.ServerParams // The config for token bucket. + fcCosts requestCostTable // The Maximum request cost table. + + closeCh chan struct{} + lock sync.RWMutex // Lock used to protect all thread-sensitive fields. } // isFrozen returns true if the client is frozen or the server has put our // client in frozen state -func (p *peer) isFrozen() bool { +func (p *peerCommons) isFrozen() bool { return atomic.LoadUint32(&p.frozen) != 0 } -func (p *peer) canQueue() bool { - return p.sendQueue.canQueue() && !p.isFrozen() +// canQueue returns an indicator whether the peer can queue an operation. +func (p *peerCommons) canQueue() bool { + return p.sendQueue.CanQueue() && !p.isFrozen() +} + +// queueSend caches a peer operation in the background task queue. +// Please ensure to check `canQueue` before call this function +func (p *peerCommons) queueSend(f func()) bool { + return p.sendQueue.Queue(f) +} + +// String implements fmt.Stringer. +func (p *peerCommons) String() string { + return fmt.Sprintf("Peer %s [%s]", p.id, fmt.Sprintf("les/%d", p.version)) } -func (p *peer) queueSend(f func()) { - p.sendQueue.queue(f) +// PeerInfo represents a short summary of the `eth` sub-protocol metadata known +// about a connected peer. +type PeerInfo struct { + Version int `json:"version"` // Ethereum protocol version negotiated + Difficulty *big.Int `json:"difficulty"` // Total difficulty of the peer's blockchain + Head string `json:"head"` // SHA3 hash of the peer's best owned block } // Info gathers and returns a collection of metadata known about a peer. -func (p *peer) Info() *eth.PeerInfo { - return ð.PeerInfo{ +func (p *peerCommons) Info() *PeerInfo { + return &PeerInfo{ Version: p.version, Difficulty: p.Td(), Head: fmt.Sprintf("%x", p.Head()), @@ -241,93 +181,324 @@ func (p *peer) Info() *eth.PeerInfo { } // Head retrieves a copy of the current head (most recent) hash of the peer. -func (p *peer) Head() (hash common.Hash) { +func (p *peerCommons) Head() (hash common.Hash) { p.lock.RLock() defer p.lock.RUnlock() - copy(hash[:], p.headInfo.Hash[:]) - return hash + return p.headInfo.Hash } -func (p *peer) HeadAndTd() (hash common.Hash, td *big.Int) { +// Td retrieves the current total difficulty of a peer. +func (p *peerCommons) Td() *big.Int { p.lock.RLock() defer p.lock.RUnlock() - copy(hash[:], p.headInfo.Hash[:]) - return hash, p.headInfo.Td + return new(big.Int).Set(p.headInfo.Td) } -func (p *peer) headBlockInfo() blockInfo { +// HeadAndTd retrieves the current head hash and total difficulty of a peer. +func (p *peerCommons) HeadAndTd() (hash common.Hash, td *big.Int) { p.lock.RLock() defer p.lock.RUnlock() - return blockInfo{Hash: p.headInfo.Hash, Number: p.headInfo.Number, Td: p.headInfo.Td} + return p.headInfo.Hash, new(big.Int).Set(p.headInfo.Td) } -// Td retrieves the current total difficulty of a peer. -func (p *peer) Td() *big.Int { - p.lock.RLock() - defer p.lock.RUnlock() +// sendReceiveHandshake exchanges handshake packet with remote peer and returns any error +// if failed to send or receive packet. +func (p *peerCommons) sendReceiveHandshake(sendList keyValueList) (keyValueList, error) { + var ( + errc = make(chan error, 2) + recvList keyValueList + ) + // Send out own handshake in a new thread + go func() { + errc <- p2p.Send(p.rw, StatusMsg, &sendList) + }() + go func() { + // In the mean time retrieve the remote status message + msg, err := p.rw.ReadMsg() + if err != nil { + errc <- err + return + } + if msg.Code != StatusMsg { + errc <- errResp(ErrNoStatusMsg, "first msg has code %x (!= %x)", msg.Code, StatusMsg) + return + } + if msg.Size > ProtocolMaxMsgSize { + errc <- errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) + return + } + // Decode the handshake + if err := msg.Decode(&recvList); err != nil { + errc <- errResp(ErrDecode, "msg %v: %v", msg, err) + return + } + errc <- nil + }() + timeout := time.NewTimer(handshakeTimeout) + defer timeout.Stop() + for i := 0; i < 2; i++ { + select { + case err := <-errc: + if err != nil { + return nil, err + } + case <-timeout.C: + return nil, p2p.DiscReadTimeout + } + } + return recvList, nil +} - return new(big.Int).Set(p.headInfo.Td) +// handshake executes the les protocol handshake, negotiating version number, +// network IDs, difficulties, head and genesis blocks. Besides the basic handshake +// fields, server and client can exchange and resolve some specified fields through +// two callback functions. +func (p *peerCommons) handshake(td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, forkFilter forkid.Filter, sendCallback func(*keyValueList), recvCallback func(keyValueMap) error) error { + p.lock.Lock() + 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) + // Note: the head info announced at handshake is only used in case of server peers + // but dummy values are still announced by clients for compatibility with older servers + send = send.add("headTd", td) + send = send.add("headHash", head) + send = send.add("headNum", headNum) + send = send.add("genesisHash", genesis) + + // If the protocol version is beyond les4, then pass the forkID + // as well. Check http://eips.ethereum.org/EIPS/eip-2124 for more + // spec detail. + if p.version >= lpv4 { + send = send.add("forkID", forkID) + } + // Add client-specified or server-specified fields + if sendCallback != nil { + sendCallback(&send) + } + // Exchange the handshake packet and resolve the received one. + recvList, err := p.sendReceiveHandshake(send) + if err != nil { + return err + } + recv, size := recvList.decode() + if size > allowedUpdateBytes { + return errResp(ErrRequestRejected, "") + } + var rGenesis common.Hash + var rVersion, rNetwork uint64 + if err := recv.get("protocolVersion", &rVersion); err != nil { + return err + } + if err := recv.get("networkId", &rNetwork); err != nil { + return err + } + if err := recv.get("genesisHash", &rGenesis); err != nil { + return err + } + if rGenesis != genesis { + return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", rGenesis[:8], genesis[:8]) + } + if rNetwork != p.network { + return errResp(ErrNetworkIdMismatch, "%d (!= %d)", rNetwork, p.network) + } + if int(rVersion) != p.version { + return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", rVersion, p.version) + } + // Check forkID if the protocol version is beyond the les4 + if p.version >= lpv4 { + var forkID forkid.ID + if err := recv.get("forkID", &forkID); err != nil { + return err + } + if err := forkFilter(forkID); err != nil { + return errResp(ErrForkIDRejected, "%v", err) + } + } + if recvCallback != nil { + return recvCallback(recv) + } + return nil } -// waitBefore implements distPeer interface -func (p *peer) waitBefore(maxCost uint64) (time.Duration, float64) { - return p.fcServer.CanSend(maxCost) +// close closes the channel and notifies all background routines to exit. +func (p *peerCommons) close() { + close(p.closeCh) + p.sendQueue.Quit() +} + +// serverPeer represents each node to which the client is connected. +// The node here refers to the les server. +type serverPeer struct { + peerCommons + + // Status fields + trusted bool // The flag whether the server is selected as trusted server. + onlyAnnounce bool // The flag whether the server sends announcement only. + chainSince, chainRecent uint64 // The range of chain server peer can serve. + stateSince, stateRecent uint64 // The range of state server peer can serve. + txHistory uint64 // The length of available tx history, 0 means all, 1 means disabled + + // Advertised checkpoint fields + checkpointNumber uint64 // The block height which the checkpoint is registered. + checkpoint params.TrustedCheckpoint // The advertised checkpoint sent by server. + + fcServer *flowcontrol.ServerNode // Client side mirror token bucket. + vtLock sync.Mutex + nodeValueTracker *vfc.NodeValueTracker + sentReqs map[uint64]sentReqEntry + + // Statistics + errCount utils.LinearExpiredValue // Counter the invalid responses server has replied + updateCount uint64 + updateTime mclock.AbsTime + + // Test callback hooks + hasBlockHook func(common.Hash, uint64, bool) bool // Used to determine whether the server has the specified block. +} + +func newServerPeer(version int, network uint64, trusted bool, p *p2p.Peer, rw p2p.MsgReadWriter) *serverPeer { + return &serverPeer{ + peerCommons: peerCommons{ + Peer: p, + rw: rw, + id: p.ID().String(), + version: version, + network: network, + sendQueue: utils.NewExecQueue(100), + closeCh: make(chan struct{}), + }, + trusted: trusted, + errCount: utils.LinearExpiredValue{Rate: mclock.AbsTime(time.Hour)}, + } } -// 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() +// 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 *serverPeer) rejectUpdate(size uint64) bool { + now := mclock.Now() + if p.updateCount == 0 { + p.updateTime = now + } else { + dt := now - p.updateTime + p.updateTime = now + + r := uint64(dt / mclock.AbsTime(allowedUpdateRate)) + if p.updateCount > r { + p.updateCount -= r + } else { + p.updateCount = 0 + } + } + p.updateCount += size + return p.updateCount > allowedUpdateBytes +} - 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}) }) +// freeze processes Stop messages from the given server and set the status as +// frozen. +func (p *serverPeer) freeze() { + if atomic.CompareAndSwapUint32(&p.frozen, 0, 1) { + p.sendQueue.Clear() + } } -func (p *peer) responseID() uint64 { - p.responseCount += 1 - return p.responseCount +// unfreeze processes Resume messages from the given server and set the status +// as unfrozen. +func (p *serverPeer) unfreeze() { + atomic.StoreUint32(&p.frozen, 0) } -func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) error { +// sendRequest send a request to the server based on the given message type +// and content. +func sendRequest(w p2p.MsgWriter, msgcode, reqID uint64, data interface{}) error { type req struct { ReqID uint64 Data interface{} } - return p2p.Send(w, msgcode, req{reqID, data}) + return p2p.Send(w, msgcode, &req{reqID, data}) } -// 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 +func (p *serverPeer) sendRequest(msgcode, reqID uint64, data interface{}, amount int) error { + p.sentRequest(reqID, uint32(msgcode), uint32(amount)) + return sendRequest(p.rw, msgcode, reqID, data) } -// send sends the reply with the calculated buffer value -func (r *reply) send(bv uint64) error { - type resp struct { - ReqID, BV uint64 - Data rlp.RawValue +// requestHeadersByHash fetches a batch of blocks' headers corresponding to the +// specified header query, based on the hash of an origin block. +func (p *serverPeer) requestHeadersByHash(reqID uint64, origin common.Hash, amount int, skip int, reverse bool) error { + p.Log().Debug("Fetching batch of headers", "count", amount, "fromhash", origin, "skip", skip, "reverse", reverse) + return p.sendRequest(GetBlockHeadersMsg, reqID, &GetBlockHeadersData{Origin: hashOrNumber{Hash: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}, amount) +} + +// requestHeadersByNumber fetches a batch of blocks' headers corresponding to the +// specified header query, based on the number of an origin block. +func (p *serverPeer) requestHeadersByNumber(reqID, origin uint64, amount int, skip int, reverse bool) error { + p.Log().Debug("Fetching batch of headers", "count", amount, "fromnum", origin, "skip", skip, "reverse", reverse) + return p.sendRequest(GetBlockHeadersMsg, reqID, &GetBlockHeadersData{Origin: hashOrNumber{Number: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}, amount) +} + +// requestBodies fetches a batch of blocks' bodies corresponding to the hashes +// specified. +func (p *serverPeer) requestBodies(reqID uint64, hashes []common.Hash) error { + p.Log().Debug("Fetching batch of block bodies", "count", len(hashes)) + return p.sendRequest(GetBlockBodiesMsg, reqID, hashes, len(hashes)) +} + +// requestCode fetches a batch of arbitrary data from a node's known state +// data, corresponding to the specified hashes. +func (p *serverPeer) requestCode(reqID uint64, reqs []CodeReq) error { + p.Log().Debug("Fetching batch of codes", "count", len(reqs)) + return p.sendRequest(GetCodeMsg, reqID, reqs, len(reqs)) +} + +// requestReceipts fetches a batch of transaction receipts from a remote node. +func (p *serverPeer) requestReceipts(reqID uint64, hashes []common.Hash) error { + p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) + return p.sendRequest(GetReceiptsMsg, reqID, hashes, len(hashes)) +} + +// requestProofs fetches a batch of merkle proofs from a remote node. +func (p *serverPeer) requestProofs(reqID uint64, reqs []ProofReq) error { + p.Log().Debug("Fetching batch of proofs", "count", len(reqs)) + return p.sendRequest(GetProofsV2Msg, reqID, reqs, len(reqs)) +} + +// requestHelperTrieProofs fetches a batch of HelperTrie merkle proofs from a remote node. +func (p *serverPeer) requestHelperTrieProofs(reqID uint64, reqs []HelperTrieReq) error { + p.Log().Debug("Fetching batch of HelperTrie proofs", "count", len(reqs)) + return p.sendRequest(GetHelperTrieProofsMsg, reqID, reqs, len(reqs)) +} + +// requestTxStatus fetches a batch of transaction status records from a remote node. +func (p *serverPeer) requestTxStatus(reqID uint64, txHashes []common.Hash) error { + p.Log().Debug("Requesting transaction status", "count", len(txHashes)) + return p.sendRequest(GetTxStatusMsg, reqID, txHashes, len(txHashes)) +} + +// sendTxs creates a reply with a batch of transactions to be added to the remote transaction pool. +func (p *serverPeer) sendTxs(reqID uint64, amount int, txs rlp.RawValue) error { + p.Log().Debug("Sending batch of transactions", "amount", amount, "size", len(txs)) + sizeFactor := (len(txs) + txSizeCostLimit/2) / txSizeCostLimit + if sizeFactor > amount { + amount = sizeFactor } - return p2p.Send(r.w, r.msgcode, resp{r.reqID, bv, r.data}) + return p.sendRequest(SendTxV2Msg, reqID, txs, amount) } -// size returns the RLP encoded size of the message data -func (r *reply) size() uint32 { - return uint32(len(r.data)) +// waitBefore implements distPeer interface +func (p *serverPeer) waitBefore(maxCost uint64) (time.Duration, float64) { + return p.fcServer.CanSend(maxCost) } -func (p *peer) GetRequestCost(msgcode uint64, amount int) uint64 { +// getRequestCost returns an estimated request cost according to the flow control +// rules negotiated between the server and the client. +func (p *serverPeer) getRequestCost(msgcode uint64, amount int) uint64 { p.lock.RLock() defer p.lock.RUnlock() @@ -342,7 +513,9 @@ func (p *peer) GetRequestCost(msgcode uint64, amount int) uint64 { return cost } -func (p *peer) GetTxRelayCost(amount, size int) uint64 { +// getTxRelayCost returns an estimated relay cost according to the flow control +// rules negotiated between the server and the client. +func (p *serverPeer) getTxRelayCost(amount, size int) uint64 { p.lock.RLock() defer p.lock.RUnlock() @@ -355,7 +528,6 @@ func (p *peer) GetTxRelayCost(amount, size int) uint64 { if sizeCost > cost { cost = sizeCost } - if cost > p.fcParams.BufLimit { cost = p.fcParams.BufLimit } @@ -363,12 +535,15 @@ func (p *peer) GetTxRelayCost(amount, size int) uint64 { } // 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 +func (p *serverPeer) HasBlock(hash common.Hash, number uint64, hasState bool) bool { p.lock.RLock() - if p.headInfo != nil { - head = p.headInfo.Number + defer p.lock.RUnlock() + + if p.hasBlockHook != nil { + return p.hasBlockHook(hash, number, hasState) } + head := p.headInfo.Number + var since, recent uint64 if hasState { since = p.stateSince recent = p.stateRecent @@ -376,233 +551,491 @@ func (p *peer) HasBlock(hash common.Hash, number uint64, hasState bool) bool { since = p.chainSince recent = p.chainRecent } - hasBlock := p.hasBlock - p.lock.RUnlock() - - return head >= number && number >= since && (recent == 0 || number+recent+4 > head) && hasBlock != nil && hasBlock(hash, number, hasState) + return head >= number && number >= since && (recent == 0 || number+recent+4 > head) } -// SendAnnounce announces the availability of a number of blocks through -// a hash notification. -func (p *peer) SendAnnounce(request announceData) error { - return p2p.Send(p.rw, AnnounceMsg, request) -} - -// SendStop notifies the client about being in frozen state -func (p *peer) SendStop() error { - return p2p.Send(p.rw, StopMsg, struct{}{}) -} - -// SendResume notifies the client about getting out of frozen state -func (p *peer) SendResume(bv uint64) error { - return p2p.Send(p.rw, ResumeMsg, bv) -} +// updateFlowControl updates the flow control parameters belonging to the server +// node if the announced key/value set contains relevant fields +func (p *serverPeer) updateFlowControl(update keyValueMap) { + p.lock.Lock() + defer p.lock.Unlock() -// 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} -} + // 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 + } + } +} + +// updateHead updates the head information based on the announcement from +// the peer. +func (p *serverPeer) updateHead(hash common.Hash, number uint64, td *big.Int) { + p.lock.Lock() + defer p.lock.Unlock() + + p.headInfo = blockInfo{Hash: hash, Number: number, Td: td} +} + +// Handshake executes the les protocol handshake, negotiating version number, +// network IDs and genesis blocks. +func (p *serverPeer) Handshake(genesis common.Hash, forkid forkid.ID, forkFilter forkid.Filter) error { + // Note: there is no need to share local head with a server but older servers still + // require these fields so we announce zero values. + return p.handshake(common.Big0, common.Hash{}, 0, genesis, forkid, forkFilter, func(lists *keyValueList) { + // Add some client-specific handshake fields + // + // Enable signed announcement randomly even the server is not trusted. + p.announceType = announceTypeSimple + if p.trusted { + p.announceType = announceTypeSigned + } + *lists = (*lists).add("announceType", p.announceType) + }, func(recv keyValueMap) error { + var ( + rHash common.Hash + rNum uint64 + rTd *big.Int + ) + if err := recv.get("headTd", &rTd); err != nil { + return err + } + if err := recv.get("headHash", &rHash); err != nil { + return err + } + if err := recv.get("headNum", &rNum); err != nil { + return err + } + p.headInfo = blockInfo{Hash: rHash, Number: rNum, Td: rTd} + 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("serveRecentState", &p.stateRecent) != nil { + p.stateRecent = 0 + } + if recv.get("txRelay", nil) != nil { + p.onlyAnnounce = true + } + if p.version >= lpv4 { + var recentTx uint + if err := recv.get("recentTxLookup", &recentTx); err != nil { + return err + } + p.txHistory = uint64(recentTx) + } else { + // The weak assumption is held here that legacy les server(les2,3) + // has unlimited transaction history. The les serving in these legacy + // versions is disabled if the transaction is unindexed. + p.txHistory = txIndexUnlimited + } + if p.onlyAnnounce && !p.trusted { + return errResp(ErrUselessPeer, "peer cannot serve requests") + } + // Parse flow control handshake packet. + var sParams flowcontrol.ServerParams + if err := recv.get("flowControl/BL", &sParams.BufLimit); err != nil { + return err + } + 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.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) + } + } + } + return nil + }) +} + +// setValueTracker sets the value tracker references for connected servers. Note that the +// references should be removed upon disconnection by setValueTracker(nil, nil). +func (p *serverPeer) setValueTracker(nvt *vfc.NodeValueTracker) { + p.vtLock.Lock() + p.nodeValueTracker = nvt + if nvt != nil { + p.sentReqs = make(map[uint64]sentReqEntry) + } else { + p.sentReqs = nil + } + p.vtLock.Unlock() +} + +// updateVtParams updates the server's price table in the value tracker. +func (p *serverPeer) updateVtParams() { + p.vtLock.Lock() + defer p.vtLock.Unlock() + + if p.nodeValueTracker == nil { + return + } + reqCosts := make([]uint64, len(requestList)) + for code, costs := range p.fcCosts { + if m, ok := requestMapping[uint32(code)]; ok { + reqCosts[m.first] = costs.baseCost + costs.reqCost + if m.rest != -1 { + reqCosts[m.rest] = costs.reqCost + } + } + } + p.nodeValueTracker.UpdateCosts(reqCosts) +} + +// sentReqEntry remembers sent requests and their sending times +type sentReqEntry struct { + reqType, amount uint32 + at mclock.AbsTime +} + +// sentRequest marks a request sent at the current moment to this server. +func (p *serverPeer) sentRequest(id uint64, reqType, amount uint32) { + p.vtLock.Lock() + if p.sentReqs != nil { + p.sentReqs[id] = sentReqEntry{reqType, amount, mclock.Now()} + } + p.vtLock.Unlock() +} + +// answeredRequest marks a request answered at the current moment by this server. +func (p *serverPeer) answeredRequest(id uint64) { + p.vtLock.Lock() + if p.sentReqs == nil { + p.vtLock.Unlock() + return + } + e, ok := p.sentReqs[id] + delete(p.sentReqs, id) + nvt := p.nodeValueTracker + p.vtLock.Unlock() + if !ok { + return + } + var ( + vtReqs [2]vfc.ServedRequest + reqCount int + ) + m := requestMapping[e.reqType] + if m.rest == -1 || e.amount <= 1 { + reqCount = 1 + vtReqs[0] = vfc.ServedRequest{ReqType: uint32(m.first), Amount: e.amount} + } else { + reqCount = 2 + vtReqs[0] = vfc.ServedRequest{ReqType: uint32(m.first), Amount: 1} + vtReqs[1] = vfc.ServedRequest{ReqType: uint32(m.rest), Amount: e.amount - 1} + } + dt := time.Duration(mclock.Now() - e.at) + nvt.Served(vtReqs[:reqCount], dt) +} + +// clientPeer represents each node to which the les server is connected. +// The node here refers to the light client. +type clientPeer struct { + peerCommons + + // responseLock ensures that responses are queued in the same order as + // RequestProcessed is called + responseLock sync.Mutex + responseCount uint64 // Counter to generate an unique id for request processing. + + balance vfs.ConnectedBalance + + // invalidLock is used for protecting invalidCount. + invalidLock sync.RWMutex + invalidCount utils.LinearExpiredValue // Counter the invalid request the client peer has made. + + capacity uint64 + // lastAnnounce is the last broadcast created by the server; may be newer than the last head + // sent to the specific client (stored in headInfo) if capacity is zero. In this case the + // latest head is sent when the client gains non-zero capacity. + lastAnnounce announceData + + connectedAt mclock.AbsTime + server bool + errCh chan error + fcClient *flowcontrol.ClientNode // Server side mirror token bucket. +} + +func newClientPeer(version int, network uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *clientPeer { + return &clientPeer{ + peerCommons: peerCommons{ + Peer: p, + rw: rw, + id: p.ID().String(), + version: version, + network: network, + sendQueue: utils.NewExecQueue(100), + closeCh: make(chan struct{}), + }, + invalidCount: utils.LinearExpiredValue{Rate: mclock.AbsTime(time.Hour)}, + errCh: make(chan error, 1), + } +} + +// FreeClientId returns a string identifier for the peer. Multiple peers with +// the same identifier can not be connected in free mode simultaneously. +func (p *clientPeer) 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 +} + +// sendStop notifies the client about being in frozen state +func (p *clientPeer) sendStop() error { + return p2p.Send(p.rw, StopMsg, struct{}{}) +} + +// sendResume notifies the client about getting out of frozen state +func (p *clientPeer) sendResume(bv uint64) error { + return p2p.Send(p.rw, ResumeMsg, bv) +} + +// freeze 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 *clientPeer) freeze() { + 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) + continue + } + atomic.StoreUint32(&p.frozen, 0) + p.sendResume(bufValue) + return + } + }() + } +} + +// 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 +} -// ReplyBlockBodiesRLP creates a reply with a batch of block contents from +// send sends the reply with the calculated buffer value +func (r *reply) send(bv uint64) error { + type resp struct { + ReqID, BV uint64 + Data rlp.RawValue + } + 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)) +} + +// replyBlockHeaders creates a reply with a batch of block headers +func (p *clientPeer) replyBlockHeaders(reqID uint64, headers []*types.Header) *reply { + data, _ := rlp.EncodeToBytes(headers) + return &reply{p.rw, BlockHeadersMsg, reqID, data} +} + +// 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 { +func (p *clientPeer) replyBlockBodiesRLP(reqID uint64, bodies []rlp.RawValue) *reply { data, _ := rlp.EncodeToBytes(bodies) return &reply{p.rw, BlockBodiesMsg, reqID, data} } -// ReplyCode creates a reply with a batch of arbitrary internal data, corresponding to the +// 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 { +func (p *clientPeer) replyCode(reqID uint64, codes [][]byte) *reply { data, _ := rlp.EncodeToBytes(codes) return &reply{p.rw, CodeMsg, reqID, data} } -// ReplyReceiptsRLP creates a reply with a batch of transaction receipts, corresponding to the +// 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 { +func (p *clientPeer) replyReceiptsRLP(reqID uint64, receipts []rlp.RawValue) *reply { data, _ := rlp.EncodeToBytes(receipts) return &reply{p.rw, ReceiptsMsg, reqID, data} } -// 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 { +// replyProofsV2 creates a reply with a batch of merkle proofs, corresponding to the ones requested. +func (p *clientPeer) replyProofsV2(reqID uint64, proofs light.NodeList) *reply { data, _ := rlp.EncodeToBytes(proofs) return &reply{p.rw, ProofsV2Msg, reqID, data} } -// ReplyHelperTrieProofs creates a reply with a batch of HelperTrie proofs, corresponding to the ones requested. -func (p *peer) ReplyHelperTrieProofs(reqID uint64, resp HelperTrieResps) *reply { +// replyHelperTrieProofs creates a reply with a batch of HelperTrie proofs, corresponding to the ones requested. +func (p *clientPeer) replyHelperTrieProofs(reqID uint64, resp HelperTrieResps) *reply { data, _ := rlp.EncodeToBytes(resp) return &reply{p.rw, HelperTrieProofsMsg, reqID, data} } -// 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 { +// replyTxStatus creates a reply with a batch of transaction status records, corresponding to the ones requested. +func (p *clientPeer) 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 -// specified header query, based on the hash of an origin block. -func (p *peer) RequestHeadersByHash(reqID, cost uint64, origin common.Hash, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromhash", origin, "skip", skip, "reverse", reverse) - return sendRequest(p.rw, GetBlockHeadersMsg, reqID, cost, &getBlockHeadersData{Origin: hashOrNumber{Hash: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}) -} - -// RequestHeadersByNumber fetches a batch of blocks' headers corresponding to the -// specified header query, based on the number of an origin block. -func (p *peer) RequestHeadersByNumber(reqID, cost, origin uint64, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromnum", origin, "skip", skip, "reverse", reverse) - return sendRequest(p.rw, GetBlockHeadersMsg, reqID, cost, &getBlockHeadersData{Origin: hashOrNumber{Number: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}) -} - -// RequestBodies fetches a batch of blocks' bodies corresponding to the hashes -// specified. -func (p *peer) RequestBodies(reqID, cost uint64, hashes []common.Hash) error { - p.Log().Debug("Fetching batch of block bodies", "count", len(hashes)) - return sendRequest(p.rw, GetBlockBodiesMsg, reqID, cost, hashes) -} - -// RequestCode fetches a batch of arbitrary data from a node's known state -// data, corresponding to the specified hashes. -func (p *peer) RequestCode(reqID, cost uint64, reqs []CodeReq) error { - p.Log().Debug("Fetching batch of codes", "count", len(reqs)) - return sendRequest(p.rw, GetCodeMsg, reqID, cost, reqs) -} - -// RequestReceipts fetches a batch of transaction receipts from a remote node. -func (p *peer) RequestReceipts(reqID, cost uint64, hashes []common.Hash) error { - p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) - return sendRequest(p.rw, GetReceiptsMsg, reqID, cost, hashes) -} - -// 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)) - return sendRequest(p.rw, GetProofsV2Msg, reqID, cost, reqs) +// sendAnnounce announces the availability of a number of blocks through +// a hash notification. +func (p *clientPeer) sendAnnounce(request announceData) error { + return p2p.Send(p.rw, AnnounceMsg, request) } -// RequestHelperTrieProofs fetches a batch of HelperTrie merkle proofs from a remote node. -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) +// InactiveAllowance implements vfs.clientPeer +func (p *clientPeer) InactiveAllowance() time.Duration { + return 0 // will return more than zero for les/5 clients } -// RequestTxStatus fetches a batch of transaction status records from a remote node. -func (p *peer) RequestTxStatus(reqID, cost uint64, txHashes []common.Hash) error { - p.Log().Debug("Requesting transaction status", "count", len(txHashes)) - return sendRequest(p.rw, GetTxStatusMsg, reqID, cost, txHashes) -} +// getCapacity returns the current capacity of the peer +func (p *clientPeer) getCapacity() uint64 { + p.lock.RLock() + defer p.lock.RUnlock() -// 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) + return p.capacity } -type keyValueEntry struct { - Key string - Value rlp.RawValue -} -type keyValueList []keyValueEntry -type keyValueMap map[string]rlp.RawValue +// UpdateCapacity updates the request serving capacity assigned to a given client +// and also sends an announcement about the updated flow control parameters. +// Note: UpdateCapacity implements vfs.clientPeer and should not block. The requested +// parameter is true if the callback was initiated by ClientPool.SetCapacity on the given peer. +func (p *clientPeer) UpdateCapacity(newCap uint64, requested bool) { + p.lock.Lock() + defer p.lock.Unlock() -func (l keyValueList) add(key string, val interface{}) keyValueList { - var entry keyValueEntry - entry.Key = key - if val == nil { - val = uint64(0) + if newCap != p.fcParams.MinRecharge { + p.fcParams = flowcontrol.ServerParams{MinRecharge: newCap, BufLimit: newCap * bufLimitRatio} + p.fcClient.UpdateParams(p.fcParams) + var kvList keyValueList + kvList = kvList.add("flowControl/MRR", newCap) + kvList = kvList.add("flowControl/BL", newCap*bufLimitRatio) + p.queueSend(func() { p.sendAnnounce(announceData{Update: kvList}) }) } - enc, err := rlp.EncodeToBytes(val) - if err == nil { - entry.Value = enc - } - return append(l, entry) -} -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 + if p.capacity == 0 && newCap != 0 { + p.sendLastAnnounce() } - return m, size + p.capacity = newCap } -func (m keyValueMap) get(key string, val interface{}) error { - enc, ok := m[key] - if !ok { - return errResp(ErrMissingKey, "%s", key) - } - if val == nil { - return nil +// announceOrStore sends the given head announcement to the client if the client is +// active (capacity != 0) and the same announcement hasn't been sent before. If the +// client is inactive the announcement is stored and sent later if the client is +// activated again. +func (p *clientPeer) announceOrStore(announce announceData) { + p.lock.Lock() + defer p.lock.Unlock() + + p.lastAnnounce = announce + if p.capacity != 0 { + p.sendLastAnnounce() } - return rlp.DecodeBytes(enc, val) } -func (p *peer) sendReceiveHandshake(sendList keyValueList) (keyValueList, error) { - // Send out own handshake in a new thread - errc := make(chan error, 1) - go func() { - errc <- p2p.Send(p.rw, StatusMsg, sendList) - }() - // In the mean time retrieve the remote status message - msg, err := p.rw.ReadMsg() - if err != nil { - return nil, err - } - if msg.Code != StatusMsg { - return nil, errResp(ErrNoStatusMsg, "first msg has code %x (!= %x)", msg.Code, StatusMsg) - } - if msg.Size > ProtocolMaxMsgSize { - return nil, errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) - } - // Decode the handshake - var recvList keyValueList - if err := msg.Decode(&recvList); err != nil { - return nil, errResp(ErrDecode, "msg %v: %v", msg, err) +// announce sends the given head announcement to the client if it hasn't been sent before +func (p *clientPeer) sendLastAnnounce() { + if p.lastAnnounce.Td == nil { + return } - if err := <-errc; err != nil { - return nil, err + if p.headInfo.Td == nil || p.lastAnnounce.Td.Cmp(p.headInfo.Td) > 0 { + if !p.queueSend(func() { p.sendAnnounce(p.lastAnnounce) }) { + p.Log().Debug("Dropped announcement because queue is full", "number", p.lastAnnounce.Number, "hash", p.lastAnnounce.Hash) + } else { + p.Log().Debug("Sent announcement", "number", p.lastAnnounce.Number, "hash", p.lastAnnounce.Hash) + } + p.headInfo = blockInfo{Hash: p.lastAnnounce.Hash, Number: p.lastAnnounce.Number, Td: p.lastAnnounce.Td} } - return recvList, nil } // Handshake executes the les protocol handshake, negotiating version number, // network IDs, difficulties, head and genesis blocks. -func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, server *LesServer) error { - p.lock.Lock() - 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) - send = send.add("headHash", head) - send = send.add("headNum", headNum) - send = send.add("genesisHash", genesis) - if server != nil { +func (p *clientPeer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, forkFilter forkid.Filter, server *LesServer) error { + recentTx := server.handler.blockchain.TxLookupLimit() + if recentTx != txIndexUnlimited { + if recentTx < blockSafetyMargin { + recentTx = txIndexDisabled + } else { + recentTx -= blockSafetyMargin - txIndexRecentOffset + } + } + if server.config.UltraLightOnlyAnnounce { + recentTx = txIndexDisabled + } + if recentTx != txIndexUnlimited && p.version < lpv4 { + return errors.New("Cannot serve old clients without a complete tx index") + } + // Note: clientPeer.headInfo should contain the last head announced to the client by us. + // The values announced in the handshake are dummy values for compatibility reasons and should be ignored. + p.headInfo = blockInfo{Hash: head, Number: headNum, Td: td} + return p.handshake(td, head, headNum, genesis, forkID, forkFilter, func(lists *keyValueList) { // 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)) + *lists = (*lists).add("serveHeaders", nil) + *lists = (*lists).add("serveChainSince", uint64(0)) + *lists = (*lists).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) + stateRecent := uint64(core.TriesInMemory - blockSafetyMargin) if server.archiveMode { stateRecent = 0 } - send = send.add("serveRecentState", stateRecent) - send = send.add("txRelay", nil) + *lists = (*lists).add("serveRecentState", stateRecent) + *lists = (*lists).add("txRelay", nil) + } + if p.version >= lpv4 { + *lists = (*lists).add("recentTxLookup", recentTx) } - send = send.add("flowControl/BL", server.defParams.BufLimit) - send = send.add("flowControl/MRR", server.defParams.MinRecharge) + *lists = (*lists).add("flowControl/BL", server.defParams.BufLimit) + *lists = (*lists).add("flowControl/MRR", server.defParams.MinRecharge) var costList RequestCostList if server.costTracker.testCostList != nil { @@ -610,311 +1043,342 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis } else { costList = server.costTracker.makeCostList(server.costTracker.globalFactor()) } - send = send.add("flowControl/MRC", costList) + *lists = (*lists).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 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) + *lists = (*lists).add("checkpoint/value", cp) + *lists = (*lists).add("checkpoint/registerHeight", height) } } - } else { - // Add some client-specific handshake fields - p.announceType = announceTypeSimple - if p.trusted { - p.announceType = announceTypeSigned + }, func(recv keyValueMap) error { + p.server = recv.get("flowControl/MRR", nil) == nil + if p.server { + p.announceType = announceTypeNone // connected to another server, send no messages + } else { + if recv.get("announceType", &p.announceType) != nil { + // set default announceType on server side + p.announceType = announceTypeSimple + } } - send = send.add("announceType", p.announceType) - } + return nil + }) +} - recvList, err := p.sendReceiveHandshake(send) - if err != nil { - return err - } - recv, size := recvList.decode() - if p.rejectUpdate(size) { - return errResp(ErrRequestRejected, "") - } +func (p *clientPeer) bumpInvalid() { + p.invalidLock.Lock() + p.invalidCount.Add(1, mclock.Now()) + p.invalidLock.Unlock() +} - var rGenesis, rHash common.Hash - var rVersion, rNetwork, rNum uint64 - var rTd *big.Int +func (p *clientPeer) getInvalid() uint64 { + p.invalidLock.RLock() + defer p.invalidLock.RUnlock() + return p.invalidCount.Value(mclock.Now()) +} - if err := recv.get("protocolVersion", &rVersion); err != nil { - return err - } - if err := recv.get("networkId", &rNetwork); err != nil { - return err - } - if err := recv.get("headTd", &rTd); err != nil { - return err - } - if err := recv.get("headHash", &rHash); err != nil { - return err - } - if err := recv.get("headNum", &rNum); err != nil { - return err - } - if err := recv.get("genesisHash", &rGenesis); err != nil { - return err - } +// Disconnect implements vfs.clientPeer +func (p *clientPeer) Disconnect() { + p.Peer.Disconnect(p2p.DiscRequested) +} - if rGenesis != genesis { - return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", rGenesis[:8], genesis[:8]) - } - if rNetwork != p.network { - return errResp(ErrNetworkIdMismatch, "%d (!= %d)", rNetwork, p.network) - } - if int(rVersion) != p.version { - return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", rVersion, p.version) - } +// serverPeerSubscriber is an interface to notify services about added or +// removed server peers +type serverPeerSubscriber interface { + registerPeer(*serverPeer) + unregisterPeer(*serverPeer) +} - if server != nil { - 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", &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("serveRecentState", &p.stateRecent) != nil { - p.stateRecent = 0 - } - if recv.get("txRelay", nil) != nil { - p.onlyAnnounce = true - } +// serverPeerSet represents the set of active server peers currently +// participating in the Light Ethereum sub-protocol. +type serverPeerSet struct { + peers map[string]*serverPeer + // subscribers is a batch of subscribers and peerset will notify + // these subscribers when the peerset changes(new server peer is + // added or removed) + subscribers []serverPeerSubscriber + closed bool + lock sync.RWMutex +} - if p.onlyAnnounce && !p.trusted { - return errResp(ErrUselessPeer, "peer cannot serve requests") - } +// newServerPeerSet creates a new peer set to track the active server peers. +func newServerPeerSet() *serverPeerSet { + return &serverPeerSet{peers: make(map[string]*serverPeer)} +} - var sParams flowcontrol.ServerParams - if err := recv.get("flowControl/BL", &sParams.BufLimit); err != nil { - return err - } - 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.fcParams = sParams - p.fcServer = flowcontrol.NewServerNode(sParams, &mclock.System{}) - p.fcCosts = MRC.decode(ProtocolLengths[uint(p.version)]) +// subscribe adds a service to be notified about added or removed +// peers and also register all active peers into the given service. +func (ps *serverPeerSet) subscribe(sub serverPeerSubscriber) { + ps.lock.Lock() + defer ps.lock.Unlock() - recv.get("checkpoint/value", &p.checkpoint) - recv.get("checkpoint/registerHeight", &p.checkpointNumber) + ps.subscribers = append(ps.subscribers, sub) + for _, p := range ps.peers { + sub.registerPeer(p) + } +} - if !p.onlyAnnounce { - for msgCode := range reqAvgTimeCost { - if p.fcCosts[msgCode] == nil { - return errResp(ErrUselessPeer, "peer does not support message %d", msgCode) - } - } - } +// register adds a new server peer into the set, or returns an error if the +// peer is already known. +func (ps *serverPeerSet) register(peer *serverPeer) error { + ps.lock.Lock() + defer ps.lock.Unlock() + + if ps.closed { + return errClosed + } + if _, exist := ps.peers[peer.id]; exist { + return errAlreadyRegistered + } + ps.peers[peer.id] = peer + for _, sub := range ps.subscribers { + sub.registerPeer(peer) } - 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) +// unregister removes a remote peer from the active set, disabling any further +// actions to/from that particular entity. It also initiates disconnection at +// the networking layer. +func (ps *serverPeerSet) unregister(id string) error { + ps.lock.Lock() + defer ps.lock.Unlock() + + p, ok := ps.peers[id] + if !ok { + return errNotRegistered } - 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 - } + delete(ps.peers, id) + for _, sub := range ps.subscribers { + sub.unregisterPeer(p) } + p.Peer.Disconnect(p2p.DiscRequested) + return nil } -// String implements fmt.Stringer. -func (p *peer) String() string { - return fmt.Sprintf("Peer %s [%s]", p.id, - fmt.Sprintf("les/%d", p.version), - ) +// ids returns a list of all registered peer IDs +func (ps *serverPeerSet) ids() []string { + ps.lock.RLock() + defer ps.lock.RUnlock() + + var ids []string + for id := range ps.peers { + ids = append(ids, id) + } + return ids } -// peerSetNotify is a callback interface to notify services about added or -// removed peers -type peerSetNotify interface { - registerPeer(*peer) - unregisterPeer(*peer) +// peer retrieves the registered peer with the given id. +func (ps *serverPeerSet) peer(id string) *serverPeer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return ps.peers[id] } -// peerSet represents the collection of active peers currently participating in -// the Light Ethereum sub-protocol. -type peerSet struct { - peers map[string]*peer - lock sync.RWMutex - notifyList []peerSetNotify - closed bool +// len returns if the current number of peers in the set. +func (ps *serverPeerSet) len() int { + ps.lock.RLock() + defer ps.lock.RUnlock() + + return len(ps.peers) } -// newPeerSet creates a new peer set to track the active participants. -func newPeerSet() *peerSet { - return &peerSet{ - peers: make(map[string]*peer), +// allServerPeers returns all server peers in a list. +func (ps *serverPeerSet) allPeers() []*serverPeer { + ps.lock.RLock() + defer ps.lock.RUnlock() + + list := make([]*serverPeer, 0, len(ps.peers)) + for _, p := range ps.peers { + list = append(list, p) } + return list } -// notify adds a service to be notified about added or removed peers -func (ps *peerSet) notify(n peerSetNotify) { +// close disconnects all peers. No new peers can be registered +// after close has returned. +func (ps *serverPeerSet) close() { ps.lock.Lock() - ps.notifyList = append(ps.notifyList, n) - peers := make([]*peer, 0, len(ps.peers)) + defer ps.lock.Unlock() + for _, p := range ps.peers { - peers = append(peers, p) + p.Disconnect(p2p.DiscQuitting) } - ps.lock.Unlock() + ps.closed = true +} - for _, p := range peers { - n.registerPeer(p) - } +// clientPeerSet represents the set of active client peers currently +// participating in the Light Ethereum sub-protocol. +type clientPeerSet struct { + peers map[enode.ID]*clientPeer + lock sync.RWMutex + closed bool + + privateKey *ecdsa.PrivateKey + lastAnnounce, signedAnnounce announceData +} + +// newClientPeerSet creates a new peer set to track the client peers. +func newClientPeerSet() *clientPeerSet { + return &clientPeerSet{peers: make(map[enode.ID]*clientPeer)} } -// Register injects a new peer into the working set, or returns an error if the +// register adds a new peer into the peer set, or returns an error if the // peer is already known. -func (ps *peerSet) Register(p *peer) error { +func (ps *clientPeerSet) register(peer *clientPeer) error { ps.lock.Lock() + defer ps.lock.Unlock() + if ps.closed { - ps.lock.Unlock() return errClosed } - if _, ok := ps.peers[p.id]; ok { - ps.lock.Unlock() + if _, exist := ps.peers[peer.ID()]; exist { return errAlreadyRegistered } - ps.peers[p.id] = p - p.sendQueue = newExecQueue(100) - peers := make([]peerSetNotify, len(ps.notifyList)) - copy(peers, ps.notifyList) - ps.lock.Unlock() - - for _, n := range peers { - n.registerPeer(p) - } + ps.peers[peer.ID()] = peer + ps.announceOrStore(peer) return nil } -// Unregister removes a remote peer from the active set, disabling any further -// actions to/from that particular entity. It also initiates disconnection at the networking layer. -func (ps *peerSet) Unregister(id string) error { +// unregister removes a remote peer from the peer set, disabling any further +// actions to/from that particular entity. It also initiates disconnection +// at the networking layer. +func (ps *clientPeerSet) unregister(id enode.ID) error { ps.lock.Lock() - if p, ok := ps.peers[id]; !ok { - ps.lock.Unlock() - return errNotRegistered - } else { - delete(ps.peers, id) - peers := make([]peerSetNotify, len(ps.notifyList)) - copy(peers, ps.notifyList) - ps.lock.Unlock() - - for _, n := range peers { - n.unregisterPeer(p) - } - - p.sendQueue.quit() - p.Peer.Disconnect(p2p.DiscUselessPeer) + defer ps.lock.Unlock() - return nil + p, ok := ps.peers[id] + if !ok { + return errNotRegistered } + delete(ps.peers, id) + p.Peer.Disconnect(p2p.DiscRequested) + return nil } -// AllPeerIDs returns a list of all registered peer IDs -func (ps *peerSet) AllPeerIDs() []string { +// ids returns a list of all registered peer IDs +func (ps *clientPeerSet) ids() []enode.ID { ps.lock.RLock() defer ps.lock.RUnlock() - res := make([]string, len(ps.peers)) - idx := 0 + var ids []enode.ID for id := range ps.peers { - res[idx] = id - idx++ + ids = append(ids, id) } - return res + return ids } -// Peer retrieves the registered peer with the given id. -func (ps *peerSet) Peer(id string) *peer { +// peer retrieves the registered peer with the given id. +func (ps *clientPeerSet) peer(id enode.ID) *clientPeer { ps.lock.RLock() defer ps.lock.RUnlock() return ps.peers[id] } -// Len returns if the current number of peers in the set. -func (ps *peerSet) Len() int { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return len(ps.peers) +// setSignerKey sets the signer key for signed announcements. Should be called before +// starting the protocol handler. +func (ps *clientPeerSet) setSignerKey(privateKey *ecdsa.PrivateKey) { + ps.privateKey = privateKey } -// BestPeer retrieves the known peer with the currently highest total difficulty. -func (ps *peerSet) BestPeer() *peer { - ps.lock.RLock() - defer ps.lock.RUnlock() +// broadcast sends the given announcements to all active peers +func (ps *clientPeerSet) broadcast(announce announceData) { + ps.lock.Lock() + defer ps.lock.Unlock() - var ( - bestPeer *peer - bestTd *big.Int - ) - for _, p := range ps.peers { - if td := p.Td(); bestPeer == nil || td.Cmp(bestTd) > 0 { - bestPeer, bestTd = p, td - } + ps.lastAnnounce = announce + for _, peer := range ps.peers { + ps.announceOrStore(peer) } - return bestPeer } -// AllPeers returns all peers in a list -func (ps *peerSet) AllPeers() []*peer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - list := make([]*peer, len(ps.peers)) - i := 0 - for _, peer := range ps.peers { - list[i] = peer - i++ +// announceOrStore sends the requested type of announcement to the given peer or stores +// it for later if the peer is inactive (capacity == 0). +func (ps *clientPeerSet) announceOrStore(p *clientPeer) { + if ps.lastAnnounce.Td == nil { + return + } + switch p.announceType { + case announceTypeSimple: + p.announceOrStore(ps.lastAnnounce) + case announceTypeSigned: + if ps.signedAnnounce.Hash != ps.lastAnnounce.Hash { + ps.signedAnnounce = ps.lastAnnounce + ps.signedAnnounce.sign(ps.privateKey) + } + p.announceOrStore(ps.signedAnnounce) } - return list } -// Close disconnects all peers. -// No new peers can be registered after Close has returned. -func (ps *peerSet) Close() { +// close disconnects all peers. No new peers can be registered +// after close has returned. +func (ps *clientPeerSet) close() { ps.lock.Lock() defer ps.lock.Unlock() for _, p := range ps.peers { - p.Disconnect(p2p.DiscQuitting) + p.Peer.Disconnect(p2p.DiscQuitting) } ps.closed = true } + +// serverSet is a special set which contains all connected les servers. +// Les servers will also be discovered by discovery protocol because they +// also run the LES protocol. We can't drop them although they are useless +// for us(server) but for other protocols(e.g. ETH) upon the devp2p they +// may be useful. +type serverSet struct { + lock sync.Mutex + set map[string]*clientPeer + closed bool +} + +func newServerSet() *serverSet { + return &serverSet{set: make(map[string]*clientPeer)} +} + +func (s *serverSet) register(peer *clientPeer) error { + s.lock.Lock() + defer s.lock.Unlock() + + if s.closed { + return errClosed + } + if _, exist := s.set[peer.id]; exist { + return errAlreadyRegistered + } + s.set[peer.id] = peer + return nil +} + +func (s *serverSet) unregister(peer *clientPeer) error { + s.lock.Lock() + defer s.lock.Unlock() + + if s.closed { + return errClosed + } + if _, exist := s.set[peer.id]; !exist { + return errNotRegistered + } + delete(s.set, peer.id) + peer.Peer.Disconnect(p2p.DiscQuitting) + return nil +} + +func (s *serverSet) close() { + s.lock.Lock() + defer s.lock.Unlock() + + for _, p := range s.set { + p.Peer.Disconnect(p2p.DiscQuitting) + } + s.closed = true +} diff --git a/les/peer_test.go b/les/peer_test.go index 9787ad2b..b8a1482a 100644 --- a/les/peer_test.go +++ b/les/peer_test.go @@ -17,286 +17,150 @@ package les import ( + "crypto/rand" + "errors" "math/big" - "net" + "reflect" + "sort" "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rlp" -) - -const protocolVersion = lpv2 - -var ( - hash = common.HexToHash("deadbeef") - genesis = common.HexToHash("cafebabe") - headNum = uint64(1234) - td = big.NewInt(123) + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" ) -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) +type testServerPeerSub struct { + regCh chan *serverPeer + unregCh chan *serverPeer } -// 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 newTestServerPeerSub() *testServerPeerSub { + return &testServerPeerSub{ + regCh: make(chan *serverPeer, 1), + unregCh: make(chan *serverPeer, 1), } } -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 (t *testServerPeerSub) registerPeer(p *serverPeer) { t.regCh <- p } +func (t *testServerPeerSub) unregisterPeer(p *serverPeer) { t.unregCh <- p } + +func TestPeerSubscription(t *testing.T) { + peers := newServerPeerSet() + defer peers.close() + + checkIds := func(expect []string) { + given := peers.ids() + if len(given) == 0 && len(expect) == 0 { + return + } + sort.Strings(given) + sort.Strings(expect) + if !reflect.DeepEqual(given, expect) { + t.Fatalf("all peer ids mismatch, want %v, given %v", expect, given) + } + } + checkPeers := func(peerCh chan *serverPeer) { + select { + case <-peerCh: + case <-time.NewTimer(100 * time.Millisecond).C: + t.Fatalf("timeout, no event received") + } + select { + case <-peerCh: + t.Fatalf("unexpected event received") + case <-time.NewTimer(10 * time.Millisecond).C: + } + } + checkIds([]string{}) + + sub := newTestServerPeerSub() + peers.subscribe(sub) + + // Generate a random id and create the peer + var id enode.ID + rand.Read(id[:]) + peer := newServerPeer(2, NetworkId, false, p2p.NewPeer(id, "name", nil), nil) + peers.register(peer) + + checkIds([]string{peer.id}) + checkPeers(sub.regCh) + + peers.unregister(peer.id) + checkIds([]string{}) + checkPeers(sub.unregCh) } -func TestPeerHandshakeServerSendOnlyAnnounceRequestsHeaders(t *testing.T) { - id := newNodeID(t).ID() +type fakeChain struct{} - 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 (f *fakeChain) Config() *params.ChainConfig { return params.MainnetChainConfig } +func (f *fakeChain) Genesis() *types.Block { + return core.DefaultGenesisBlock().ToBlock() } -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) +func (f *fakeChain) CurrentHeader() *types.Header { return &types.Header{Number: big.NewInt(10000000)} } + +func TestHandshake(t *testing.T) { + // 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 := newClientPeer(2, NetworkId, p2p.NewPeer(id, "name", nil), net) + peer2 := newServerPeer(2, NetworkId, true, p2p.NewPeer(id, "name", nil), app) + + var ( + errCh1 = make(chan error, 1) + errCh2 = make(chan error, 1) + + td = big.NewInt(100) + head = common.HexToHash("deadbeef") + headNum = uint64(10) + genesis = common.HexToHash("cafebabe") + + chain1, chain2 = &fakeChain{}, &fakeChain{} + forkID1 = forkid.NewID(chain1.Config(), chain1.Genesis().Hash(), chain1.CurrentHeader().Number.Uint64()) + forkID2 = forkid.NewID(chain2.Config(), chain2.Genesis().Hash(), chain2.CurrentHeader().Number.Uint64()) + filter1, filter2 = forkid.NewFilter(chain1), forkid.NewFilter(chain2) + ) + + go func() { + errCh1 <- peer1.handshake(td, head, headNum, genesis, forkID1, filter1, func(list *keyValueList) { + var announceType uint64 = announceTypeSigned + *list = (*list).add("announceType", announceType) + }, nil) + }() + go func() { + errCh2 <- peer2.handshake(td, head, headNum, genesis, forkID2, filter2, nil, func(recv keyValueMap) error { + var reqType uint64 + err := recv.get("announceType", &reqType) + if err != nil { + return err + } + if reqType != announceTypeSigned { + return errors.New("Expected announceTypeSigned") + } + return nil + }) + }() + + for i := 0; i < 2; i++ { + select { + case err := <-errCh1: + if err != nil { + t.Fatalf("handshake failed, %v", err) + } + case err := <-errCh2: + if err != nil { + t.Fatalf("handshake failed, %v", err) + } + case <-time.After(time.Second): + t.Fatalf("timeout") + } } - return nil } diff --git a/les/protocol.go b/les/protocol.go index 16141e74..06db9024 100644 --- a/les/protocol.go +++ b/les/protocol.go @@ -23,31 +23,39 @@ import ( "io" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + vfc "github.com/ethereum/go-ethereum/les/vflux/client" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" ) // Constants to match up protocol versions and messages const ( lpv2 = 2 lpv3 = 3 + lpv4 = 4 ) // Supported versions of the les protocol (first is primary) var ( - ClientProtocolVersions = []uint{lpv2, lpv3} - ServerProtocolVersions = []uint{lpv2, lpv3} + ClientProtocolVersions = []uint{lpv2, lpv3, lpv4} + ServerProtocolVersions = []uint{lpv2, lpv3, lpv4} 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{lpv2: 22, lpv3: 24} +var ProtocolLengths = map[uint]uint64{lpv2: 22, lpv3: 24, lpv4: 24} const ( NetworkId = 1 ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message + blockSafetyMargin = 4 // safety margin applied to block ranges specified relative to head block + + txIndexUnlimited = 0 // this value in the "recentTxLookup" handshake field means the entire tx index history is served + txIndexDisabled = 1 // this value means tx index is not served at all + txIndexRecentOffset = 1 // txIndexRecentOffset + N in the handshake field means then tx index of the last N blocks is supported ) // les protocol message codes @@ -76,20 +84,115 @@ const ( ResumeMsg = 0x17 ) +// GetBlockHeadersData represents a block header query (the request ID is not included) +type GetBlockHeadersData struct { + Origin hashOrNumber // Block from which to retrieve headers + Amount uint64 // Maximum number of headers to retrieve + Skip uint64 // Blocks to skip between consecutive headers + Reverse bool // Query direction (false = rising towards latest, true = falling towards genesis) +} + +// GetBlockHeadersPacket represents a block header request +type GetBlockHeadersPacket struct { + ReqID uint64 + Query GetBlockHeadersData +} + +// GetBlockBodiesPacket represents a block body request +type GetBlockBodiesPacket struct { + ReqID uint64 + Hashes []common.Hash +} + +// GetCodePacket represents a contract code request +type GetCodePacket struct { + ReqID uint64 + Reqs []CodeReq +} + +// GetReceiptsPacket represents a block receipts request +type GetReceiptsPacket struct { + ReqID uint64 + Hashes []common.Hash +} + +// GetProofsPacket represents a proof request +type GetProofsPacket struct { + ReqID uint64 + Reqs []ProofReq +} + +// GetHelperTrieProofsPacket represents a helper trie proof request +type GetHelperTrieProofsPacket struct { + ReqID uint64 + Reqs []HelperTrieReq +} + +// SendTxPacket represents a transaction propagation request +type SendTxPacket struct { + ReqID uint64 + Txs []*types.Transaction +} + +// GetTxStatusPacket represents a transaction status query +type GetTxStatusPacket struct { + ReqID uint64 + Hashes []common.Hash +} + type requestInfo struct { - name string - maxCount uint64 + name string + maxCount uint64 + refBasketFirst, refBasketRest float64 } -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}, +// reqMapping maps an LES request to one or two vflux service vector entries. +// If rest != -1 and the request type is used with amounts larger than one then the +// first one of the multi-request is mapped to first while the rest is mapped to rest. +type reqMapping struct { + first, rest int +} + +var ( + // requests describes the available LES request types and their initializing amounts + // in the vfc.ValueTracker reference basket. Initial values are estimates + // based on the same values as the server's default cost estimates (reqAvgTimeCost). + requests = map[uint64]requestInfo{ + GetBlockHeadersMsg: {"GetBlockHeaders", MaxHeaderFetch, 10, 1000}, + GetBlockBodiesMsg: {"GetBlockBodies", MaxBodyFetch, 1, 0}, + GetReceiptsMsg: {"GetReceipts", MaxReceiptFetch, 1, 0}, + GetCodeMsg: {"GetCode", MaxCodeFetch, 1, 0}, + GetProofsV2Msg: {"GetProofsV2", MaxProofsFetch, 10, 0}, + GetHelperTrieProofsMsg: {"GetHelperTrieProofs", MaxHelperTrieProofsFetch, 10, 100}, + SendTxV2Msg: {"SendTxV2", MaxTxSend, 1, 0}, + GetTxStatusMsg: {"GetTxStatus", MaxTxStatus, 10, 0}, + } + requestList []vfc.RequestInfo + requestMapping map[uint32]reqMapping +) + +// init creates a request list and mapping between protocol message codes and vflux +// service vector indices. +func init() { + requestMapping = make(map[uint32]reqMapping) + for code, req := range requests { + cost := reqAvgTimeCost[code] + rm := reqMapping{len(requestList), -1} + requestList = append(requestList, vfc.RequestInfo{ + Name: req.name + ".first", + InitAmount: req.refBasketFirst, + InitValue: float64(cost.baseCost + cost.reqCost), + }) + if req.refBasketRest != 0 { + rm.rest = len(requestList) + requestList = append(requestList, vfc.RequestInfo{ + Name: req.name + ".rest", + InitAmount: req.refBasketRest, + InitValue: float64(cost.reqCost), + }) + } + requestMapping[uint32(code)] = rm + } } type errCode int @@ -110,6 +213,7 @@ const ( ErrInvalidResponse ErrTooManyTimeouts ErrMissingKey + ErrForkIDRejected ) func (e errCode) String() string { @@ -132,12 +236,7 @@ var errorToString = map[int]string{ ErrInvalidResponse: "Invalid response", ErrTooManyTimeouts: "Too many request timeouts", ErrMissingKey: "Key missing from list", -} - -type announceBlock struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced - Td *big.Int // Total difficulty of one particular block being announced + ErrForkIDRejected: "ForkID rejected", } // announceData is the network packet for the block announcements. @@ -159,7 +258,7 @@ func (a *announceData) sanityCheck() error { // 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}) + rlp, _ := rlp.EncodeToBytes(blockInfo{a.Hash, a.Number, a.Td}) sig, _ := crypto.Sign(crypto.Keccak256(rlp), privKey) a.Update = a.Update.add("sign", sig) } @@ -170,7 +269,7 @@ func (a *announceData) checkSignature(id enode.ID, update keyValueMap) error { if err := update.get("sign", &sig); err != nil { return err } - rlp, _ := rlp.EncodeToBytes(announceBlock{a.Hash, a.Number, a.Td}) + rlp, _ := rlp.EncodeToBytes(blockInfo{a.Hash, a.Number, a.Td}) recPubkey, err := crypto.SigToPub(crypto.Keccak256(rlp), sig) if err != nil { return err @@ -187,14 +286,6 @@ type blockInfo struct { Td *big.Int // Total difficulty of one particular block being announced } -// getBlockHeadersData represents a block header query. -type getBlockHeadersData struct { - Origin hashOrNumber // Block from which to retrieve headers - Amount uint64 // Maximum number of headers to retrieve - Skip uint64 // Blocks to skip between consecutive headers - Reverse bool // Query direction (false = rising towards latest, true = falling towards genesis) -} - // hashOrNumber is a combined field for specifying an origin block. type hashOrNumber struct { Hash common.Hash // Block hash from which to retrieve headers (excludes Number) @@ -216,24 +307,22 @@ func (hn *hashOrNumber) EncodeRLP(w io.Writer) error { // DecodeRLP is a specialized decoder for hashOrNumber to decode the contents // into either a block hash or a block number. func (hn *hashOrNumber) DecodeRLP(s *rlp.Stream) error { - _, size, _ := s.Kind() - origin, err := s.Raw() - if err == nil { - switch { - case size == 32: - err = rlp.DecodeBytes(origin, &hn.Hash) - case size <= 8: - err = rlp.DecodeBytes(origin, &hn.Number) - default: - err = fmt.Errorf("invalid input size %d for origin", size) - } + _, size, err := s.Kind() + switch { + case err != nil: + return err + case size == 32: + hn.Number = 0 + return s.Decode(&hn.Hash) + case size <= 8: + hn.Hash = common.Hash{} + return s.Decode(&hn.Number) + default: + return fmt.Errorf("invalid input size %d for origin", size) } - return err } // CodeData is the network response packet for a node data retrieval. type CodeData []struct { Value []byte } - -type proofsData [][]rlp.RawValue diff --git a/les/pruner.go b/les/pruner.go new file mode 100644 index 00000000..d115a61a --- /dev/null +++ b/les/pruner.go @@ -0,0 +1,99 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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/math" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// pruner is responsible for pruning historical light chain data. +type pruner struct { + db ethdb.Database + indexers []*core.ChainIndexer + closeCh chan struct{} + wg sync.WaitGroup +} + +// newPruner returns a light chain pruner instance. +func newPruner(db ethdb.Database, indexers ...*core.ChainIndexer) *pruner { + pruner := &pruner{ + db: db, + indexers: indexers, + closeCh: make(chan struct{}), + } + pruner.wg.Add(1) + go pruner.loop() + return pruner +} + +// close notifies all background goroutines belonging to pruner to exit. +func (p *pruner) close() { + close(p.closeCh) + p.wg.Wait() +} + +// loop periodically queries the status of chain indexers and prunes useless +// historical chain data. Notably, whenever Geth restarts, it will iterate +// all historical sections even they don't exist at all(below checkpoint) so +// that light client can prune cached chain data that was ODRed after pruning +// that section. +func (p *pruner) loop() { + defer p.wg.Done() + + // cleanTicker is the ticker used to trigger a history clean 2 times a day. + var cleanTicker = time.NewTicker(12 * time.Hour) + defer cleanTicker.Stop() + + // pruning finds the sections that have been processed by all indexers + // and deletes all historical chain data. + // Note, if some indexers don't support pruning(e.g. eth.BloomIndexer), + // pruning operations can be silently ignored. + pruning := func() { + min := uint64(math.MaxUint64) + for _, indexer := range p.indexers { + sections, _, _ := indexer.Sections() + if sections < min { + min = sections + } + } + // Always keep the latest section data in database. + if min < 2 || len(p.indexers) == 0 { + return + } + for _, indexer := range p.indexers { + if err := indexer.Prune(min - 2); err != nil { + log.Debug("Failed to prune historical data", "err", err) + return + } + } + p.db.Compact(nil, nil) // Compact entire database, ensure all removed data are deleted. + } + for { + pruning() + select { + case <-cleanTicker.C: + case <-p.closeCh: + return + } + } +} diff --git a/les/pruner_test.go b/les/pruner_test.go new file mode 100644 index 00000000..16724149 --- /dev/null +++ b/les/pruner_test.go @@ -0,0 +1,204 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "context" + "encoding/binary" + "testing" + "time" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/light" +) + +func TestLightPruner(t *testing.T) { + var ( + waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 3 && bts >= 3 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + config = light.TestClientIndexerConfig + netconfig = testnetConfig{ + blocks: int(3*config.ChtSize + config.ChtConfirms), + protocol: 3, + indexFn: waitIndexers, + connect: true, + } + ) + server, client, tearDown := newClientServerEnv(t, netconfig) + defer tearDown() + + // checkDB iterates the chain with given prefix, resolves the block number + // with given callback and ensures this entry should exist or not. + checkDB := func(from, to uint64, prefix []byte, resolve func(key, value []byte) *uint64, exist bool) bool { + it := client.db.NewIterator(prefix, nil) + defer it.Release() + + var next = from + for it.Next() { + number := resolve(it.Key(), it.Value()) + if number == nil || *number < from { + continue + } else if *number > to { + return true + } + if exist { + if *number != next { + return false + } + next++ + } else { + return false + } + } + return true + } + // checkPruned checks and ensures the stale chain data has been pruned. + checkPruned := func(from, to uint64) { + // Iterate canonical hash + if !checkDB(from, to, []byte("h"), func(key, value []byte) *uint64 { + if len(key) == 1+8+1 && bytes.Equal(key[9:10], []byte("n")) { + n := binary.BigEndian.Uint64(key[1:9]) + return &n + } + return nil + }, false) { + t.Fatalf("canonical hash mappings are not properly pruned") + } + // Iterate header + if !checkDB(from, to, []byte("h"), func(key, value []byte) *uint64 { + if len(key) == 1+8+32 { + n := binary.BigEndian.Uint64(key[1:9]) + return &n + } + return nil + }, false) { + t.Fatalf("headers are not properly pruned") + } + // Iterate body + if !checkDB(from, to, []byte("b"), func(key, value []byte) *uint64 { + if len(key) == 1+8+32 { + n := binary.BigEndian.Uint64(key[1:9]) + return &n + } + return nil + }, false) { + t.Fatalf("block bodies are not properly pruned") + } + // Iterate receipts + if !checkDB(from, to, []byte("r"), func(key, value []byte) *uint64 { + if len(key) == 1+8+32 { + n := binary.BigEndian.Uint64(key[1:9]) + return &n + } + return nil + }, false) { + t.Fatalf("receipts are not properly pruned") + } + // Iterate td + if !checkDB(from, to, []byte("h"), func(key, value []byte) *uint64 { + if len(key) == 1+8+32+1 && bytes.Equal(key[41:42], []byte("t")) { + n := binary.BigEndian.Uint64(key[1:9]) + return &n + } + return nil + }, false) { + t.Fatalf("tds are not properly pruned") + } + } + // Start light pruner. + time.Sleep(1500 * time.Millisecond) // Ensure light client has finished the syncing and indexing + newPruner(client.db, client.chtIndexer, client.bloomTrieIndexer) + + time.Sleep(1500 * time.Millisecond) // Ensure pruner have enough time to prune data. + checkPruned(1, config.ChtSize-1) + + // Ensure all APIs still work after pruning. + var cases = []struct { + from, to uint64 + methodName string + method func(uint64) bool + }{ + { + 1, 10, "GetHeaderByNumber", + func(n uint64) bool { + _, err := light.GetHeaderByNumber(context.Background(), client.handler.backend.odr, n) + return err == nil + }, + }, + { + 11, 20, "GetCanonicalHash", + func(n uint64) bool { + _, err := light.GetCanonicalHash(context.Background(), client.handler.backend.odr, n) + return err == nil + }, + }, + { + 21, 30, "GetTd", + func(n uint64) bool { + _, err := light.GetTd(context.Background(), client.handler.backend.odr, server.handler.blockchain.GetHeaderByNumber(n).Hash(), n) + return err == nil + }, + }, + { + 31, 40, "GetBodyRLP", + func(n uint64) bool { + _, err := light.GetBodyRLP(context.Background(), client.handler.backend.odr, server.handler.blockchain.GetHeaderByNumber(n).Hash(), n) + return err == nil + }, + }, + { + 41, 50, "GetBlock", + func(n uint64) bool { + _, err := light.GetBlock(context.Background(), client.handler.backend.odr, server.handler.blockchain.GetHeaderByNumber(n).Hash(), n) + return err == nil + }, + }, + { + 51, 60, "GetBlockReceipts", + func(n uint64) bool { + _, err := light.GetBlockReceipts(context.Background(), client.handler.backend.odr, server.handler.blockchain.GetHeaderByNumber(n).Hash(), n) + return err == nil + }, + }, + } + for _, c := range cases { + for i := c.from; i <= c.to; i++ { + if !c.method(i) { + t.Fatalf("rpc method %s failed, number %d", c.methodName, i) + } + } + } + // Check GetBloombits + _, err := light.GetBloomBits(context.Background(), client.handler.backend.odr, 0, []uint64{0}) + if err != nil { + t.Fatalf("Failed to retrieve bloombits of pruned section: %v", err) + } + + // Ensure the ODR cached data can be cleaned by pruner. + newPruner(client.db, client.chtIndexer, client.bloomTrieIndexer) + time.Sleep(50 * time.Millisecond) // Ensure pruner have enough time to prune data. + checkPruned(1, config.ChtSize-1) // Ensure all cached data(by odr) is cleaned. +} diff --git a/les/request_test.go b/les/request_test.go index f45deb6c..c65405e3 100644 --- a/les/request_test.go +++ b/les/request_test.go @@ -21,11 +21,11 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" + "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/light" ) var testBankSecureTrieKey = secAddr(bankAddr) @@ -38,6 +38,7 @@ type accessTestFn func(db ethdb.Database, bhash common.Hash, number uint64) ligh func TestBlockAccessLes2(t *testing.T) { testAccess(t, 2, tfBlockAccess) } func TestBlockAccessLes3(t *testing.T) { testAccess(t, 3, tfBlockAccess) } +func TestBlockAccessLes4(t *testing.T) { testAccess(t, 4, tfBlockAccess) } func tfBlockAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { return &light.BlockRequest{Hash: bhash, Number: number} @@ -45,6 +46,7 @@ func tfBlockAccess(db ethdb.Database, bhash common.Hash, number uint64) light.Od func TestReceiptsAccessLes2(t *testing.T) { testAccess(t, 2, tfReceiptsAccess) } func TestReceiptsAccessLes3(t *testing.T) { testAccess(t, 3, tfReceiptsAccess) } +func TestReceiptsAccessLes4(t *testing.T) { testAccess(t, 4, tfReceiptsAccess) } func tfReceiptsAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { return &light.ReceiptsRequest{Hash: bhash, Number: number} @@ -52,6 +54,7 @@ func tfReceiptsAccess(db ethdb.Database, bhash common.Hash, number uint64) light func TestTrieEntryAccessLes2(t *testing.T) { testAccess(t, 2, tfTrieEntryAccess) } func TestTrieEntryAccessLes3(t *testing.T) { testAccess(t, 3, tfTrieEntryAccess) } +func TestTrieEntryAccessLes4(t *testing.T) { testAccess(t, 4, tfTrieEntryAccess) } func tfTrieEntryAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { @@ -62,6 +65,7 @@ func tfTrieEntryAccess(db ethdb.Database, bhash common.Hash, number uint64) ligh func TestCodeAccessLes2(t *testing.T) { testAccess(t, 2, tfCodeAccess) } func TestCodeAccessLes3(t *testing.T) { testAccess(t, 3, tfCodeAccess) } +func TestCodeAccessLes4(t *testing.T) { testAccess(t, 4, tfCodeAccess) } func tfCodeAccess(db ethdb.Database, bhash common.Hash, num uint64) light.OdrRequest { number := rawdb.ReadHeaderNumber(db, bhash) @@ -79,9 +83,21 @@ 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, nil, 0, false, true) + netconfig := testnetConfig{ + blocks: 4, + protocol: protocol, + indexFn: nil, + connect: true, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) defer tearDown() - client.handler.synchronise(client.peer.peer) + + // Ensure the client has synced all necessary data. + clientHead := client.handler.backend.blockchain.CurrentHeader() + if clientHead.Number.Uint64() != 4 { + t.Fatalf("Failed to sync the chain with server, head: %v", clientHead.Number.Uint64()) + } test := func(expFail uint64) { for i := uint64(0); i <= server.handler.blockchain.CurrentHeader().Number.Uint64(); i++ { diff --git a/les/retrieve.go b/les/retrieve.go index 65b7ef90..307af042 100644 --- a/les/retrieve.go +++ b/les/retrieve.go @@ -18,28 +18,24 @@ package les import ( "context" - "crypto/rand" - "encoding/binary" "fmt" "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/light" + "github.com/ethereum/go-ethereum/light" ) var ( retryQueue = time.Millisecond * 100 - softRequestTimeout = time.Millisecond * 500 hardRequestTimeout = time.Second * 10 ) // retrieveManager is a layer on top of requestDistributor which takes care of // matching replies by request ID and handles timeouts and resends if necessary. type retrieveManager struct { - dist *requestDistributor - peers *peerSet - serverPool peerSelector + dist *requestDistributor + peers *serverPeerSet + softRequestTimeout func() time.Duration lock sync.RWMutex sentReqs map[uint64]*sentReq @@ -48,11 +44,6 @@ type retrieveManager struct { // validatorFunc is a function that processes a reply message type validatorFunc func(distPeer, *Msg) error -// peerSelector receives feedback info about response times and timeouts -type peerSelector interface { - adjustResponseTime(*poolEntry, time.Duration, bool) -} - // sentReq represents a request sent and tracked by retrieveManager type sentReq struct { rm *retrieveManager @@ -99,12 +90,12 @@ const ( ) // newRetrieveManager creates the retrieve manager -func newRetrieveManager(peers *peerSet, dist *requestDistributor, serverPool peerSelector) *retrieveManager { +func newRetrieveManager(peers *serverPeerSet, dist *requestDistributor, srto func() time.Duration) *retrieveManager { return &retrieveManager{ - peers: peers, - dist: dist, - serverPool: serverPool, - sentReqs: make(map[uint64]*sentReq), + peers: peers, + dist: dist, + sentReqs: make(map[uint64]*sentReq), + softRequestTimeout: srto, } } @@ -119,7 +110,7 @@ func (rm *retrieveManager) retrieve(ctx context.Context, reqID uint64, req *dist case <-ctx.Done(): sentReq.stop(ctx.Err()) case <-shutdown: - sentReq.stop(fmt.Errorf("Client is shutting down")) + sentReq.stop(fmt.Errorf("client is shutting down")) } return sentReq.getError() } @@ -162,6 +153,15 @@ func (rm *retrieveManager) sendReq(reqID uint64, req *distReq, val validatorFunc return r } +// requested reports whether the request with given reqid is sent by the retriever. +func (rm *retrieveManager) requested(reqId uint64) bool { + rm.lock.RLock() + defer rm.lock.RUnlock() + + _, ok := rm.sentReqs[reqId] + return ok +} + // deliver is called by the LES protocol manager to deliver reply messages to waiting requests func (rm *retrieveManager) deliver(peer distPeer, msg *Msg) error { rm.lock.RLock() @@ -325,8 +325,7 @@ func (r *sentReq) tryRequest() { return } - reqSent := mclock.Now() - srto, hrto := false, false + hrto := false r.lock.RLock() s, ok := r.sentTo[p] @@ -336,22 +335,13 @@ func (r *sentReq) tryRequest() { } defer func() { - // send feedback to server pool and remove peer if hard timeout happened - pp, ok := p.(*peer) - if ok && r.rm.serverPool != nil { - respTime := time.Duration(mclock.Now() - reqSent) - r.rm.serverPool.adjustResponseTime(pp.poolEntry, respTime, srto) - } - if hrto { + pp, ok := p.(*serverPeer) + if hrto && ok { pp.Log().Debug("Request timed out hard") if r.rm.peers != nil { - r.rm.peers.Unregister(pp.id) + r.rm.peers.unregister(pp.id) } } - - r.lock.Lock() - delete(r.sentTo, p) - r.lock.Unlock() }() select { @@ -363,8 +353,7 @@ func (r *sentReq) tryRequest() { } r.eventsCh <- reqPeerEvent{event, p} return - case <-time.After(softRequestTimeout): - srto = true + case <-time.After(r.rm.softRequestTimeout()): r.eventsCh <- reqPeerEvent{rpSoftTimeout, p} } @@ -439,10 +428,3 @@ func (r *sentReq) stop(err error) { func (r *sentReq) getError() error { return r.err } - -// genReqID generates a new random request ID -func genReqID() uint64 { - var rnd [8]byte - rand.Read(rnd[:]) - return binary.BigEndian.Uint64(rnd[:]) -} diff --git a/les/server.go b/les/server.go index 7baf85da..df453b48 100644 --- a/les/server.go +++ b/les/server.go @@ -20,26 +20,46 @@ import ( "crypto/ecdsa" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/flowcontrol" + vfs "github.com/ethereum/go-ethereum/les/vflux/server" + "github.com/ethereum/go-ethereum/light" + "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/params" + "github.com/ethereum/go-ethereum/rpc" ) +var ( + defaultPosFactors = vfs.PriceFactors{TimeFactor: 0, CapacityFactor: 1, RequestFactor: 1} + defaultNegFactors = vfs.PriceFactors{TimeFactor: 0, CapacityFactor: 1, RequestFactor: 1} +) + +const defaultConnectedBias = time.Minute * 3 + +type ethBackend interface { + ArchiveMode() bool + BlockChain() *core.BlockChain + BloomIndexer() *core.ChainIndexer + ChainDb() ethdb.Database + Synced() bool + TxPool() *core.TxPool +} + type LesServer struct { lesCommons archiveMode bool // Flag whether the ethereum node runs in archive mode. handler *serverHandler - lesTopics []discv5.Topic + peers *clientPeerSet + serverset *serverSet + vfluxServer *vfs.Server privateKey *ecdsa.PrivateKey // Flow control and capacity management @@ -47,18 +67,19 @@ type LesServer struct { costTracker *costTracker defParams flowcontrol.ServerParams servingQueue *servingQueue - clientPool *clientPool + clientPool *vfs.ClientPool + + minCapacity, maxCapacity uint64 + threadsIdle int // Request serving threads count when system is idle. + threadsBusy int // Request serving threads count when system is busy(block insertion). - 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). + p2pSrv *p2p.Server } -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(e.BlockChain().Genesis().Hash(), pv) +func NewLesServer(node *node.Node, e ethBackend, config *ethconfig.Config) (*LesServer, error) { + lesDb, err := node.OpenDatabase("les.server", 0, 0, "eth/db/lesserver/", false) + if err != nil { + return nil, err } // Calculate the number of threads used to service the light client // requests based on the user-specified value. @@ -73,33 +94,37 @@ func NewLesServer(e *eth.Ethereum, config *eth.Config) (*LesServer, error) { chainConfig: e.BlockChain().Config(), iConfig: light.DefaultServerIndexerConfig, chainDb: e.ChainDb(), - peers: newPeerSet(), + lesDb: lesDb, chainReader: e.BlockChain(), - chtIndexer: light.NewChtIndexer(e.ChainDb(), nil, params.CHTFrequency, params.HelperTrieProcessConfirmations), - bloomTrieIndexer: light.NewBloomTrieIndexer(e.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency), + chtIndexer: light.NewChtIndexer(e.ChainDb(), nil, params.CHTFrequency, params.HelperTrieProcessConfirmations, true), + bloomTrieIndexer: light.NewBloomTrieIndexer(e.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency, true), closeCh: make(chan struct{}), }, archiveMode: e.ArchiveMode(), - lesTopics: lesTopics, + peers: newClientPeerSet(), + serverset: newServerSet(), + vfluxServer: vfs.NewServer(time.Millisecond * 10), fcManager: flowcontrol.NewClientManager(nil, &mclock.System{}), servingQueue: newServingQueue(int64(time.Millisecond*10), float64(config.LightServ)/100), threadsBusy: config.LightServ/100 + 1, threadsIdle: threads, + p2pSrv: node.Server(), } - srv.handler = newServerHandler(srv, e.BlockChain(), e.ChainDb(), e.TxPool(), e.Synced) - srv.costTracker, srv.freeCapacity = newCostTracker(e.ChainDb(), config) - - // Set up checkpoint oracle. - oracle := config.CheckpointOracle - if oracle == nil { - oracle = params.CheckpointOracles[e.BlockChain().Genesis().Hash()] + issync := e.Synced + if config.LightNoSyncServe { + issync = func() bool { return true } } - srv.oracle = newCheckpointOracle(oracle, srv.localCheckpoint) + srv.handler = newServerHandler(srv, e.BlockChain(), e.ChainDb(), e.TxPool(), issync) + srv.costTracker, srv.minCapacity = newCostTracker(e.ChainDb(), config) + srv.oracle = srv.setupOracle(node, e.BlockChain().Genesis().Hash(), config) + + // Initialize the bloom trie indexer. + e.BloomIndexer().AddChildIndexer(srv.bloomTrieIndexer) // Initialize server capacity management fields. srv.defParams = flowcontrol.ServerParams{ - BufLimit: srv.freeCapacity * bufLimitRatio, - MinRecharge: srv.freeCapacity, + BufLimit: srv.minCapacity * bufLimitRatio, + MinRecharge: srv.minCapacity, } // 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 @@ -107,12 +132,15 @@ func NewLesServer(e *eth.Ethereum, config *eth.Config) (*LesServer, error) { // 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.maxCapacity = srv.minCapacity * uint64(srv.config.LightPeers) + if totalRecharge > srv.maxCapacity { + srv.maxCapacity = totalRecharge } - 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.fcManager.SetCapacityLimits(srv.minCapacity, srv.maxCapacity, srv.minCapacity*2) + srv.clientPool = vfs.NewClientPool(lesDb, srv.minCapacity, defaultConnectedBias, mclock.System{}, issync) + srv.clientPool.Start() + srv.clientPool.SetDefaultFactors(defaultPosFactors, defaultNegFactors) + srv.vfluxServer.Register(srv.clientPool, "les", "Ethereum light client service") checkpoint := srv.latestLocalCheckpoint() if !checkpoint.Empty() { @@ -120,6 +148,10 @@ func NewLesServer(e *eth.Ethereum, config *eth.Config) (*LesServer, error) { "chtroot", checkpoint.CHTRoot, "bloomroot", checkpoint.BloomRoot) } srv.chtIndexer.Start(e.BlockChain()) + + node.RegisterProtocols(srv.Protocols()) + node.RegisterAPIs(srv.APIs()) + node.RegisterLifecycle(srv) return srv, nil } @@ -127,76 +159,76 @@ func (s *LesServer) APIs() []rpc.API { return []rpc.API{ { Namespace: "les", - Version: "1.0", - Service: NewPrivateLightAPI(&s.lesCommons), - Public: false, + Service: NewLightAPI(&s.lesCommons), + }, + { + Namespace: "les", + Service: NewLightServerAPI(s), + }, + { + Namespace: "debug", + Service: NewDebugAPI(s), }, } } func (s *LesServer) Protocols() []p2p.Protocol { - return s.makeProtocols(ServerProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { - if p := s.peers.Peer(peerIdToString(id)); p != nil { + ps := s.makeProtocols(ServerProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { + if p := s.peers.peer(id); p != nil { return p.Info() } return nil - }) + }, nil) + // Add "les" ENR entries. + for i := range ps { + ps[i].Attributes = []enr.Entry{&lesEntry{ + VfxVersion: 1, + }} + } + return ps } // Start starts the LES server -func (s *LesServer) Start(srvr *p2p.Server) { - s.privateKey = srvr.PrivateKey +func (s *LesServer) Start() error { + s.privateKey = s.p2pSrv.PrivateKey + s.peers.setSignerKey(s.privateKey) s.handler.start() - s.wg.Add(1) go s.capacityManagement() - - if srvr.DiscV5 != nil { - for _, topic := range s.lesTopics { - topic := topic - go func() { - logger := log.New("topic", topic) - logger.Info("Starting topic registration") - defer logger.Info("Terminated topic registration") - - srvr.DiscV5.RegisterTopic(topic, s.closeCh) - }() - } + if s.p2pSrv.DiscV5 != nil { + s.p2pSrv.DiscV5.RegisterTalkHandler("vfx", s.vfluxServer.ServeEncoded) } + return nil } // Stop stops the LES service -func (s *LesServer) Stop() { +func (s *LesServer) Stop() error { close(s.closeCh) - // 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() - + s.clientPool.Stop() + if s.serverset != nil { + s.serverset.close() + } + s.peers.close() s.fcManager.Stop() - s.clientPool.stop() s.costTracker.stop() s.handler.stop() s.servingQueue.stop() + if s.vfluxServer != nil { + s.vfluxServer.Stop() + } // Note, bloom trie indexer is closed by parent bloombits indexer. - s.chtIndexer.Close() + if s.chtIndexer != nil { + s.chtIndexer.Close() + } + if s.lesDb != nil { + s.lesDb.Close() + } s.wg.Wait() log.Info("Les server stopped") -} -func (s *LesServer) SetBloomBitsIndexer(bloomIndexer *core.ChainIndexer) { - bloomIndexer.AddChildIndexer(s.bloomTrieIndexer) -} - -// 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) + return nil } // capacityManagement starts an event handler loop that updates the recharge curve of @@ -214,7 +246,7 @@ func (s *LesServer) capacityManagement() { totalCapacityCh := make(chan uint64, 100) totalCapacity := s.fcManager.SubscribeTotalCapacity(totalCapacityCh) - s.clientPool.setLimits(s.config.LightPeers, totalCapacity) + s.clientPool.SetLimits(uint64(s.config.LightPeers), totalCapacity) var ( busy bool @@ -246,12 +278,12 @@ func (s *LesServer) capacityManagement() { updateRecharge() case totalCapacity = <-totalCapacityCh: totalCapacityGauge.Update(int64(totalCapacity)) - newFreePeers := totalCapacity / s.freeCapacity + newFreePeers := totalCapacity / s.minCapacity 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) + s.clientPool.SetLimits(uint64(s.config.LightPeers), totalCapacity) case <-s.closeCh: return } diff --git a/les/server_handler.go b/les/server_handler.go index 01e87c5c..a199a34a 100644 --- a/les/server_handler.go +++ b/les/server_handler.go @@ -17,32 +17,30 @@ package les import ( - "encoding/binary" - "encoding/json" "errors" "sync" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "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/forkid" + "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/les/flowcontrol" + "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 @@ -56,12 +54,12 @@ const ( 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 { + forkFilter forkid.Filter blockchain *core.BlockChain chainDb ethdb.Database txpool *core.TxPool @@ -77,6 +75,7 @@ type serverHandler struct { func newServerHandler(server *LesServer, blockchain *core.BlockChain, chainDb ethdb.Database, txpool *core.TxPool, synced func() bool) *serverHandler { handler := &serverHandler{ + forkFilter: forkid.NewFilter(blockchain), server: server, blockchain: blockchain, chainDb: chainDb, @@ -90,7 +89,7 @@ func newServerHandler(server *LesServer, blockchain *core.BlockChain, chainDb et // start starts the server handler. func (h *serverHandler) start() { h.wg.Add(1) - go h.broadcastHeaders() + go h.broadcastLoop() } // stop stops the server handler. @@ -101,17 +100,14 @@ func (h *serverHandler) stop() { // 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))) + peer := newClientPeer(int(version), h.server.config.NetworkId, p, newMeteredMsgWriter(rw, int(version))) + defer peer.close() 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 - } +func (h *serverHandler) handle(p *clientPeer) error { p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) // Execute the LES handshake @@ -120,37 +116,56 @@ func (h *serverHandler) handle(p *peer) error { hash = head.Hash() number = head.Number.Uint64() td = h.blockchain.GetTd(hash, number) + forkID = forkid.NewID(h.blockchain.Config(), h.blockchain.Genesis().Hash(), h.blockchain.CurrentBlock().NumberU64()) ) - if err := p.Handshake(td, hash, number, h.blockchain.Genesis().Hash(), h.server); err != nil { + if err := p.Handshake(td, hash, number, h.blockchain.Genesis().Hash(), forkID, h.forkFilter, h.server); err != nil { p.Log().Debug("Light Ethereum handshake failed", "err", err) return err } + // Connected to another server, no messages expected, just wait for disconnection + if p.server { + if err := h.server.serverset.register(p); err != nil { + return err + } + _, err := p.rw.ReadMsg() + h.server.serverset.unregister(p) + return err + } + // Setup flow control mechanism for the peer + p.fcClient = flowcontrol.NewClientNode(h.server.fcManager, p.fcParams) 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 + // Reject light clients if server is not synced. Put this checking here, so + // that "non-synced" les-server peers are still allowed to keep the connection. + if !h.synced() { + p.Log().Debug("Light server not synced, rejecting peer") + return p2p.DiscRequested } - // 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) + + // Register the peer into the peerset and clientpool + if err := h.server.peers.register(p); err != nil { return err } - clientConnectionGauge.Update(int64(h.server.peers.Len())) + if p.balance = h.server.clientPool.Register(p); p.balance == nil { + h.server.peers.unregister(p.ID()) + p.Log().Debug("Client pool already closed") + return p2p.DiscRequested + } + p.connectedAt = mclock.Now() 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)) + h.server.clientPool.Unregister(p) + h.server.peers.unregister(p.ID()) + p.balance = nil + connectionTimer.Update(time.Duration(mclock.Now() - p.connectedAt)) }() + // Mark the peer as being served. + atomic.StoreUint32(&p.serving, 1) + defer atomic.StoreUint32(&p.serving, 0) + // Spawn a main loop to handle all incoming messages. for { select { @@ -166,9 +181,93 @@ func (h *serverHandler) handle(p *peer) error { } } +// beforeHandle will do a series of prechecks before handling message. +func (h *serverHandler) beforeHandle(p *clientPeer, reqID, responseCount uint64, msg p2p.Msg, reqCnt uint64, maxCount uint64) (*servingTask, uint64) { + // Ensure that the request sent by client peer is valid + inSizeCost := h.server.costTracker.realCost(0, msg.Size, 0) + if reqCnt == 0 || reqCnt > maxCount { + p.fcClient.OneTimeCost(inSizeCost) + return nil, 0 + } + // Ensure that the client peer complies with the flow control + // rules agreed by both sides. + if p.isFrozen() { + p.fcClient.OneTimeCost(inSizeCost) + return nil, 0 + } + maxCost := p.fcCosts.getMaxCost(msg.Code, reqCnt) + accepted, bufShort, priority := p.fcClient.AcceptRequest(reqID, responseCount, maxCost) + if !accepted { + p.freeze() + p.Log().Error("Request came too early", "remaining", common.PrettyDuration(time.Duration(bufShort*1000000/p.fcParams.MinRecharge))) + p.fcClient.OneTimeCost(inSizeCost) + return nil, 0 + } + // 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() { + p.fcClient.RequestProcessed(reqID, responseCount, maxCost, inSizeCost) + return nil, 0 + } + return task, maxCost +} + +// Afterhandle will perform a series of operations after message handling, +// such as updating flow control data, sending reply, etc. +func (h *serverHandler) afterHandle(p *clientPeer, reqID, responseCount uint64, msg p2p.Msg, maxCost uint64, reqCnt uint64, task *servingTask, reply *reply) { + if reply != nil { + task.done() + } + p.responseLock.Lock() + defer p.responseLock.Unlock() + + // Short circuit if the client is already frozen. + if p.isFrozen() { + realCost := h.server.costTracker.realCost(task.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(task.servingTime, msg.Size, replySize) + if realCost > maxCost { + realCost = maxCost + } + } + bv := p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) + if reply != nil { + // Feed cost tracker request serving statistic. + h.server.costTracker.updateStats(msg.Code, reqCnt, task.servingTime, realCost) + // Reduce priority "balance" for the specific peer. + p.balance.RequestServed(realCost) + p.queueSend(func() { + if err := reply.send(bv); err != nil { + select { + case p.errCh <- err: + default: + } + } + }) + } +} + // 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 { +func (h *serverHandler) handleMsg(p *clientPeer, 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 { @@ -183,709 +282,124 @@ func (h *serverHandler) handleMsg(p *peer, wg *sync.WaitGroup) error { } 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: - } - } - }) - } + // Lookup the request handler table, ensure it's supported + // message type by the protocol. + req, ok := Les3[msg.Code] + if !ok { + p.Log().Trace("Received invalid message", "code", msg.Code) + clientErrorMeter.Mark(1) + return errResp(ErrInvalidMsgCode, "%v", msg.Code) } - switch msg.Code { - case GetBlockHeadersMsg: - p.Log().Trace("Received block header request") - if metrics.EnabledExpensive { - miscInHeaderPacketsMeter.Mark(1) - miscInHeaderTrafficMeter.Mark(int64(msg.Size)) - } - 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)) - } - 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)) - } - 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())) - } - }() - } + p.Log().Trace("Received " + req.Name) - case GetReceiptsMsg: - p.Log().Trace("Received receipts request") - if metrics.EnabledExpensive { - miscInReceiptPacketsMeter.Mark(1) - miscInReceiptTrafficMeter.Mark(int64(msg.Size)) - } - 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())) - } - }() - } + // Decode the p2p message, resolve the concrete handler for it. + serve, reqID, reqCnt, err := req.Handle(msg) + if err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "%v: %v", msg, err) + } + if metrics.EnabledExpensive { + req.InPacketsMeter.Mark(1) + req.InTrafficMeter.Mark(int64(msg.Size)) + } + p.responseCount++ + responseCount := p.responseCount - case GetProofsV2Msg: - p.Log().Trace("Received les/2 proofs request") - if metrics.EnabledExpensive { - miscInTrieProofPacketsMeter.Mark(1) - miscInTrieProofTrafficMeter.Mark(int64(msg.Size)) - } - 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())) - } - }() - } + // First check this client message complies all rules before + // handling it and return a processor if all checks are passed. + task, maxCost := h.beforeHandle(p, reqID, responseCount, msg, reqCnt, req.MaxCount) + if task == nil { + return nil + } + wg.Add(1) + go func() { + defer wg.Done() - case GetHelperTrieProofsMsg: - p.Log().Trace("Received helper trie proof request") - if metrics.EnabledExpensive { - miscInHelperTriePacketsMeter.Mark(1) - miscInHelperTrieTrafficMeter.Mark(int64(msg.Size)) - } - 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())) - } - }() - } + reply := serve(h, p, task.waitOrStop) + h.afterHandle(p, reqID, responseCount, msg, maxCost, reqCnt, task, reply) - case SendTxV2Msg: - p.Log().Trace("Received new transactions") if metrics.EnabledExpensive { - miscInTxsPacketsMeter.Mark(1) - miscInTxsTrafficMeter.Mark(int64(msg.Size)) - } - 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)) - } - 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())) - } - }() + size := uint32(0) + if reply != nil { + size = reply.size() + } + req.OutPacketsMeter.Mark(1) + req.OutTrafficMeter.Mark(int64(size)) + req.ServingTimeMeter.Update(time.Duration(task.servingTime)) } - - 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), + }() + // If the client has made too much invalid request(e.g. request a non-existent data), // reject them to prevent SPAM attack. - if atomic.LoadUint32(&p.invalidCount) > maxRequestErrors { + if p.getInvalid() > maxRequestErrors { clientErrorMeter.Mark(1) return errTooManyInvalidRequest } return nil } +// BlockChain implements serverBackend +func (h *serverHandler) BlockChain() *core.BlockChain { + return h.blockchain +} + +// TxPool implements serverBackend +func (h *serverHandler) TxPool() *core.TxPool { + return h.txpool +} + +// ArchiveMode implements serverBackend +func (h *serverHandler) ArchiveMode() bool { + return h.server.archiveMode +} + +// AddTxsSync implements serverBackend +func (h *serverHandler) AddTxsSync() bool { + return h.addTxsSync +} + // 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) +func getAccount(triedb *trie.Database, root, hash common.Hash) (types.StateAccount, error) { + trie, err := trie.New(common.Hash{}, root, triedb) if err != nil { - return state.Account{}, err + return types.StateAccount{}, err } blob, err := trie.TryGet(hash[:]) if err != nil { - return state.Account{}, err + return types.StateAccount{}, err } - var account state.Account - if err = rlp.DecodeBytes(blob, &account); err != nil { - return state.Account{}, err + var acc types.StateAccount + if err = rlp.DecodeBytes(blob, &acc); err != nil { + return types.StateAccount{}, err } - return account, nil + return acc, 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) { +// GetHelperTrie returns the post-processed trie root for the given trie ID and section index +func (h *serverHandler) GetHelperTrie(typ uint, index uint64) *trie.Trie { + var ( + root common.Hash + prefix 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 + root, prefix = 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 + root, prefix = 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 - } + if root == (common.Hash{}) { + return nil } - return stat + trie, _ := trie.New(common.Hash{}, root, trie.NewDatabase(rawdb.NewTable(h.chainDb, prefix))) + return trie } -// broadcastHeaders broadcasts new block information to all connected light +// broadcastLoop 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() { +func (h *serverHandler) broadcastLoop() { defer h.wg.Done() headCh := make(chan core.ChainHeadEvent, 10) @@ -893,16 +407,12 @@ func (h *serverHandler) broadcastHeaders() { defer headSub.Unsubscribe() var ( - lastHead *types.Header + lastHead = h.blockchain.CurrentHeader() 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) @@ -911,30 +421,14 @@ func (h *serverHandler) broadcastHeaders() { } var reorg uint64 if lastHead != nil { - reorg = lastHead.Number.Uint64() - rawdb.FindCommonAncestor(h.chainDb, header, lastHead).Number.Uint64() + // If a setHead has been performed, the common ancestor can be nil. + if ancestor := rawdb.FindCommonAncestor(h.chainDb, header, lastHead); ancestor != nil { + reorg = lastHead.Number.Uint64() - ancestor.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) }) - } - } + h.server.peers.broadcast(announceData{Hash: hash, Number: number, Td: td, ReorgDepth: reorg}) case <-h.closeCh: return } diff --git a/les/server_requests.go b/les/server_requests.go new file mode 100644 index 00000000..bab5f733 --- /dev/null +++ b/les/server_requests.go @@ -0,0 +1,569 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +// serverBackend defines the backend functions needed for serving LES requests +type serverBackend interface { + ArchiveMode() bool + AddTxsSync() bool + BlockChain() *core.BlockChain + TxPool() *core.TxPool + GetHelperTrie(typ uint, index uint64) *trie.Trie +} + +// Decoder is implemented by the messages passed to the handler functions +type Decoder interface { + Decode(val interface{}) error +} + +// RequestType is a static struct that describes an LES request type and references +// its handler function. +type RequestType struct { + Name string + MaxCount uint64 + InPacketsMeter, InTrafficMeter, OutPacketsMeter, OutTrafficMeter metrics.Meter + ServingTimeMeter metrics.Timer + Handle func(msg Decoder) (serve serveRequestFn, reqID, amount uint64, err error) +} + +// serveRequestFn is returned by the request handler functions after decoding the request. +// This function does the actual request serving using the supplied backend. waitOrStop is +// called between serving individual request items and may block if the serving process +// needs to be throttled. If it returns false then the process is terminated. +// The reply is not sent by this function yet. The flow control feedback value is supplied +// by the protocol handler when calling the send function of the returned reply struct. +type serveRequestFn func(backend serverBackend, peer *clientPeer, waitOrStop func() bool) *reply + +// Les3 contains the request types supported by les/2 and les/3 +var Les3 = map[uint64]RequestType{ + GetBlockHeadersMsg: { + Name: "block header request", + MaxCount: MaxHeaderFetch, + InPacketsMeter: miscInHeaderPacketsMeter, + InTrafficMeter: miscInHeaderTrafficMeter, + OutPacketsMeter: miscOutHeaderPacketsMeter, + OutTrafficMeter: miscOutHeaderTrafficMeter, + ServingTimeMeter: miscServingTimeHeaderTimer, + Handle: handleGetBlockHeaders, + }, + GetBlockBodiesMsg: { + Name: "block bodies request", + MaxCount: MaxBodyFetch, + InPacketsMeter: miscInBodyPacketsMeter, + InTrafficMeter: miscInBodyTrafficMeter, + OutPacketsMeter: miscOutBodyPacketsMeter, + OutTrafficMeter: miscOutBodyTrafficMeter, + ServingTimeMeter: miscServingTimeBodyTimer, + Handle: handleGetBlockBodies, + }, + GetCodeMsg: { + Name: "code request", + MaxCount: MaxCodeFetch, + InPacketsMeter: miscInCodePacketsMeter, + InTrafficMeter: miscInCodeTrafficMeter, + OutPacketsMeter: miscOutCodePacketsMeter, + OutTrafficMeter: miscOutCodeTrafficMeter, + ServingTimeMeter: miscServingTimeCodeTimer, + Handle: handleGetCode, + }, + GetReceiptsMsg: { + Name: "receipts request", + MaxCount: MaxReceiptFetch, + InPacketsMeter: miscInReceiptPacketsMeter, + InTrafficMeter: miscInReceiptTrafficMeter, + OutPacketsMeter: miscOutReceiptPacketsMeter, + OutTrafficMeter: miscOutReceiptTrafficMeter, + ServingTimeMeter: miscServingTimeReceiptTimer, + Handle: handleGetReceipts, + }, + GetProofsV2Msg: { + Name: "les/2 proofs request", + MaxCount: MaxProofsFetch, + InPacketsMeter: miscInTrieProofPacketsMeter, + InTrafficMeter: miscInTrieProofTrafficMeter, + OutPacketsMeter: miscOutTrieProofPacketsMeter, + OutTrafficMeter: miscOutTrieProofTrafficMeter, + ServingTimeMeter: miscServingTimeTrieProofTimer, + Handle: handleGetProofs, + }, + GetHelperTrieProofsMsg: { + Name: "helper trie proof request", + MaxCount: MaxHelperTrieProofsFetch, + InPacketsMeter: miscInHelperTriePacketsMeter, + InTrafficMeter: miscInHelperTrieTrafficMeter, + OutPacketsMeter: miscOutHelperTriePacketsMeter, + OutTrafficMeter: miscOutHelperTrieTrafficMeter, + ServingTimeMeter: miscServingTimeHelperTrieTimer, + Handle: handleGetHelperTrieProofs, + }, + SendTxV2Msg: { + Name: "new transactions", + MaxCount: MaxTxSend, + InPacketsMeter: miscInTxsPacketsMeter, + InTrafficMeter: miscInTxsTrafficMeter, + OutPacketsMeter: miscOutTxsPacketsMeter, + OutTrafficMeter: miscOutTxsTrafficMeter, + ServingTimeMeter: miscServingTimeTxTimer, + Handle: handleSendTx, + }, + GetTxStatusMsg: { + Name: "transaction status query request", + MaxCount: MaxTxStatus, + InPacketsMeter: miscInTxStatusPacketsMeter, + InTrafficMeter: miscInTxStatusTrafficMeter, + OutPacketsMeter: miscOutTxStatusPacketsMeter, + OutTrafficMeter: miscOutTxStatusTrafficMeter, + ServingTimeMeter: miscServingTimeTxStatusTimer, + Handle: handleGetTxStatus, + }, +} + +// handleGetBlockHeaders handles a block header request +func handleGetBlockHeaders(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetBlockHeadersPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + // Gather headers until the fetch or network limits is reached + var ( + bc = backend.BlockChain() + hashMode = r.Query.Origin.Hash != (common.Hash{}) + first = true + maxNonCanonical = uint64(100) + bytes common.StorageSize + headers []*types.Header + unknown bool + ) + for !unknown && len(headers) < int(r.Query.Amount) && bytes < softResponseLimit { + if !first && !waitOrStop() { + return nil + } + // Retrieve the next header satisfying the r + var origin *types.Header + if hashMode { + if first { + origin = bc.GetHeaderByHash(r.Query.Origin.Hash) + if origin != nil { + r.Query.Origin.Number = origin.Number.Uint64() + } + } else { + origin = bc.GetHeader(r.Query.Origin.Hash, r.Query.Origin.Number) + } + } else { + origin = bc.GetHeaderByNumber(r.Query.Origin.Number) + } + if origin == nil { + break + } + headers = append(headers, origin) + bytes += estHeaderRlpSize + + // Advance to the next header of the r + switch { + case hashMode && r.Query.Reverse: + // Hash based traversal towards the genesis block + ancestor := r.Query.Skip + 1 + if ancestor == 0 { + unknown = true + } else { + r.Query.Origin.Hash, r.Query.Origin.Number = bc.GetAncestor(r.Query.Origin.Hash, r.Query.Origin.Number, ancestor, &maxNonCanonical) + unknown = r.Query.Origin.Hash == common.Hash{} + } + case hashMode && !r.Query.Reverse: + // Hash based traversal towards the leaf block + var ( + current = origin.Number.Uint64() + next = current + r.Query.Skip + 1 + ) + if next <= current { + infos, _ := json.Marshal(p.Peer.Info()) + p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", r.Query.Skip, "next", next, "attacker", string(infos)) + unknown = true + } else { + if header := bc.GetHeaderByNumber(next); header != nil { + nextHash := header.Hash() + expOldHash, _ := bc.GetAncestor(nextHash, next, r.Query.Skip+1, &maxNonCanonical) + if expOldHash == r.Query.Origin.Hash { + r.Query.Origin.Hash, r.Query.Origin.Number = nextHash, next + } else { + unknown = true + } + } else { + unknown = true + } + } + case r.Query.Reverse: + // Number based traversal towards the genesis block + if r.Query.Origin.Number >= r.Query.Skip+1 { + r.Query.Origin.Number -= r.Query.Skip + 1 + } else { + unknown = true + } + + case !r.Query.Reverse: + // Number based traversal towards the leaf block + r.Query.Origin.Number += r.Query.Skip + 1 + } + first = false + } + return p.replyBlockHeaders(r.ReqID, headers) + }, r.ReqID, r.Query.Amount, nil +} + +// handleGetBlockBodies handles a block body request +func handleGetBlockBodies(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetBlockBodiesPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + var ( + bytes int + bodies []rlp.RawValue + ) + bc := backend.BlockChain() + for i, hash := range r.Hashes { + if i != 0 && !waitOrStop() { + return nil + } + if bytes >= softResponseLimit { + break + } + body := bc.GetBodyRLP(hash) + if body == nil { + p.bumpInvalid() + continue + } + bodies = append(bodies, body) + bytes += len(body) + } + return p.replyBlockBodiesRLP(r.ReqID, bodies) + }, r.ReqID, uint64(len(r.Hashes)), nil +} + +// handleGetCode handles a contract code request +func handleGetCode(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetCodePacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + var ( + bytes int + data [][]byte + ) + bc := backend.BlockChain() + for i, request := range r.Reqs { + if i != 0 && !waitOrStop() { + return nil + } + // Look up the root hash belonging to the request + header := bc.GetHeaderByHash(request.BHash) + if header == nil { + p.Log().Warn("Failed to retrieve associate header for code", "hash", request.BHash) + p.bumpInvalid() + continue + } + // Refuse to search stale state data in the database since looking for + // a non-exist key is kind of expensive. + local := bc.CurrentHeader().Number.Uint64() + if !backend.ArchiveMode() && header.Number.Uint64()+core.TriesInMemory <= local { + p.Log().Debug("Reject stale code request", "number", header.Number.Uint64(), "head", local) + p.bumpInvalid() + continue + } + triedb := bc.StateCache().TrieDB() + + account, err := 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) + p.bumpInvalid() + continue + } + code, err := bc.StateCache().ContractCode(common.BytesToHash(request.AccKey), 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 + } + } + return p.replyCode(r.ReqID, data) + }, r.ReqID, uint64(len(r.Reqs)), nil +} + +// handleGetReceipts handles a block receipts request +func handleGetReceipts(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetReceiptsPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + var ( + bytes int + receipts []rlp.RawValue + ) + bc := backend.BlockChain() + for i, hash := range r.Hashes { + if i != 0 && !waitOrStop() { + return nil + } + if bytes >= softResponseLimit { + break + } + // Retrieve the requested block's receipts, skipping if unknown to us + results := bc.GetReceiptsByHash(hash) + if results == nil { + if header := bc.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { + p.bumpInvalid() + 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) + } + } + return p.replyReceiptsRLP(r.ReqID, receipts) + }, r.ReqID, uint64(len(r.Hashes)), nil +} + +// handleGetProofs handles a proof request +func handleGetProofs(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetProofsPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + var ( + lastBHash common.Hash + root common.Hash + header *types.Header + err error + ) + bc := backend.BlockChain() + nodes := light.NewNodeSet() + + for i, request := range r.Reqs { + if i != 0 && !waitOrStop() { + return nil + } + // Look up the root hash belonging to the request + if request.BHash != lastBHash { + root, lastBHash = common.Hash{}, request.BHash + + if header = bc.GetHeaderByHash(request.BHash); header == nil { + p.Log().Warn("Failed to retrieve header for proof", "hash", request.BHash) + p.bumpInvalid() + continue + } + // Refuse to search stale state data in the database since looking for + // a non-exist key is kind of expensive. + local := bc.CurrentHeader().Number.Uint64() + if !backend.ArchiveMode() && header.Number.Uint64()+core.TriesInMemory <= local { + p.Log().Debug("Reject stale trie request", "number", header.Number.Uint64(), "head", local) + p.bumpInvalid() + continue + } + root = header.Root + } + // If a header lookup failed (non existent), ignore subsequent requests for the same header + if root == (common.Hash{}) { + p.bumpInvalid() + continue + } + // Open the account or storage trie for the request + statedb := bc.StateCache() + + var trie state.Trie + 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 := 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) + p.bumpInvalid() + 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 + } + } + return p.replyProofsV2(r.ReqID, nodes.NodeList()) + }, r.ReqID, uint64(len(r.Reqs)), nil +} + +// handleGetHelperTrieProofs handles a helper trie proof request +func handleGetHelperTrieProofs(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetHelperTrieProofsPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + var ( + lastIdx uint64 + lastType uint + auxTrie *trie.Trie + auxBytes int + auxData [][]byte + ) + bc := backend.BlockChain() + nodes := light.NewNodeSet() + for i, request := range r.Reqs { + if i != 0 && !waitOrStop() { + return nil + } + if auxTrie == nil || request.Type != lastType || request.TrieIdx != lastIdx { + lastType, lastIdx = request.Type, request.TrieIdx + auxTrie = backend.GetHelperTrie(request.Type, request.TrieIdx) + } + if auxTrie == nil { + return nil + } + // TODO(rjl493456442) short circuit if the proving is failed. + // The original client side code has a dirty hack to retrieve + // the headers with no valid proof. Keep the compatibility for + // legacy les protocol and drop this hack when the les2/3 are + // not supported. + err := auxTrie.Prove(request.Key, request.FromLevel, nodes) + if p.version >= lpv4 && err != nil { + return nil + } + if request.Type == htCanonical && request.AuxReq == htAuxHeader && len(request.Key) == 8 { + header := bc.GetHeaderByNumber(binary.BigEndian.Uint64(request.Key)) + data, err := rlp.EncodeToBytes(header) + if err != nil { + log.Error("Failed to encode header", "err", err) + return nil + } + auxData = append(auxData, data) + auxBytes += len(data) + } + if nodes.DataSize()+auxBytes >= softResponseLimit { + break + } + } + return p.replyHelperTrieProofs(r.ReqID, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}) + }, r.ReqID, uint64(len(r.Reqs)), nil +} + +// handleSendTx handles a transaction propagation request +func handleSendTx(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r SendTxPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + amount := uint64(len(r.Txs)) + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + stats := make([]light.TxStatus, len(r.Txs)) + for i, tx := range r.Txs { + if i != 0 && !waitOrStop() { + return nil + } + hash := tx.Hash() + stats[i] = txStatus(backend, hash) + if stats[i].Status == core.TxStatusUnknown { + addFn := backend.TxPool().AddRemotes + // Add txs synchronously for testing purpose + if backend.AddTxsSync() { + addFn = backend.TxPool().AddRemotesSync + } + if errs := addFn([]*types.Transaction{tx}); errs[0] != nil { + stats[i].Error = errs[0].Error() + continue + } + stats[i] = txStatus(backend, hash) + } + } + return p.replyTxStatus(r.ReqID, stats) + }, r.ReqID, amount, nil +} + +// handleGetTxStatus handles a transaction status query +func handleGetTxStatus(msg Decoder) (serveRequestFn, uint64, uint64, error) { + var r GetTxStatusPacket + if err := msg.Decode(&r); err != nil { + return nil, 0, 0, err + } + return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { + stats := make([]light.TxStatus, len(r.Hashes)) + for i, hash := range r.Hashes { + if i != 0 && !waitOrStop() { + return nil + } + stats[i] = txStatus(backend, hash) + } + return p.replyTxStatus(r.ReqID, stats) + }, r.ReqID, uint64(len(r.Hashes)), nil +} + +// txStatus returns the status of a specified transaction. +func txStatus(b serverBackend, hash common.Hash) light.TxStatus { + var stat light.TxStatus + // Looking the transaction in txpool first. + stat.Status = b.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 := b.BlockChain().GetTransactionLookup(hash) + if lookup != nil { + stat.Status = core.TxStatusIncluded + stat.Lookup = lookup + } + } + return stat +} diff --git a/les/serverpool.go b/les/serverpool.go deleted file mode 100644 index 5c72614a..00000000 --- a/les/serverpool.go +++ /dev/null @@ -1,906 +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 - -import ( - "crypto/ecdsa" - "fmt" - "io" - "math" - "math/rand" - "net" - "strconv" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rlp" -) - -const ( - // After a connection has been ended or timed out, there is a waiting period - // before it can be selected for connection again. - // waiting period = base delay * (1 + random(1)) - // base delay = shortRetryDelay for the first shortRetryCnt times after a - // successful connection, after that longRetryDelay is applied - shortRetryCnt = 5 - shortRetryDelay = time.Second * 5 - longRetryDelay = time.Minute * 10 - // maxNewEntries is the maximum number of newly discovered (never connected) nodes. - // If the limit is reached, the least recently discovered one is thrown out. - maxNewEntries = 1000 - // maxKnownEntries is the maximum number of known (already connected) nodes. - // If the limit is reached, the least recently connected one is thrown out. - // (not that unlike new entries, known entries are persistent) - maxKnownEntries = 1000 - // target for simultaneously connected servers - targetServerCount = 5 - // target for servers selected from the known table - // (we leave room for trying new ones if there is any) - targetKnownSelect = 3 - // after dialTimeout, consider the server unavailable and adjust statistics - dialTimeout = time.Second * 30 - // targetConnTime is the minimum expected connection duration before a server - // drops a client without any specific reason - targetConnTime = time.Minute * 10 - // new entry selection weight calculation based on most recent discovery time: - // unity until discoverExpireStart, then exponential decay with discoverExpireConst - discoverExpireStart = time.Minute * 20 - discoverExpireConst = time.Minute * 20 - // known entry selection weight is dropped by a factor of exp(-failDropLn) after - // each unsuccessful connection (restored after a successful one) - failDropLn = 0.1 - // known node connection success and quality statistics have a long term average - // and a short term value which is adjusted exponentially with a factor of - // pstatRecentAdjust with each dial/connection and also returned exponentially - // to the average with the time constant pstatReturnToMeanTC - pstatReturnToMeanTC = time.Hour - // node address selection weight is dropped by a factor of exp(-addrFailDropLn) after - // each unsuccessful connection (restored after a successful one) - addrFailDropLn = math.Ln2 - // responseScoreTC and delayScoreTC are exponential decay time constants for - // calculating selection chances from response times and block delay times - responseScoreTC = time.Millisecond * 100 - delayScoreTC = time.Second * 5 - timeoutPow = 10 - // initStatsWeight is used to initialize previously unknown peers with good - // statistics to give a chance to prove themselves - initStatsWeight = 1 -) - -// connReq represents a request for peer connection. -type connReq struct { - p *peer - node *enode.Node - result chan *poolEntry -} - -// disconnReq represents a request for peer disconnection. -type disconnReq struct { - entry *poolEntry - stopped bool - done chan struct{} -} - -// registerReq represents a request for peer registration. -type registerReq struct { - entry *poolEntry - done chan struct{} -} - -// serverPool implements a pool for storing and selecting newly discovered and already -// known light server nodes. It received discovered nodes, stores statistics about -// known nodes and takes care of always having enough good quality servers connected. -type serverPool struct { - db ethdb.Database - dbKey []byte - server *p2p.Server - connWg sync.WaitGroup - - topic discv5.Topic - - discSetPeriod chan time.Duration - 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 - - 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, ulcServers []string) *serverPool { - pool := &serverPool{ - db: db, - entries: make(map[enode.ID]*poolEntry), - timeout: make(chan *poolEntry, 1), - adjustStats: make(chan poolStatAdjust, 100), - enableRetry: make(chan *poolEntry, 1), - 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 -} - -func (pool *serverPool) start(server *p2p.Server, topic discv5.Topic) { - pool.server = server - pool.topic = topic - pool.dbKey = append([]byte("serverPool/"), []byte(topic)...) - pool.loadNodes() - pool.connectToTrustedNodes() - - if pool.server.DiscV5 != nil { - pool.discSetPeriod = make(chan time.Duration, 1) - pool.discNodes = make(chan *enode.Node, 100) - pool.discLookups = make(chan bool, 100) - 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) - go func() { - pool.server.DiscV5.SearchTopic(pool.topic, pool.discSetPeriod, ch, pool.discLookups) - close(ch) - }() - for n := range ch { - pubkey, err := decodePubkey64(n.ID[:]) - if err != nil { - continue - } - pool.discNodes <- enode.NewV4(pubkey, n.IP, int(n.TCP), int(n.UDP)) - } -} - -// connect should be called upon any incoming connection. If the connection has been -// dialed by the server pool recently, the appropriate pool entry is returned. -// Otherwise, the connection should be rejected. -// Note that whenever a connection has been accepted and a pool entry has been returned, -// disconnect should also always be called. -func (pool *serverPool) connect(p *peer, node *enode.Node) *poolEntry { - log.Debug("Connect new entry", "enode", p.id) - req := &connReq{p: p, node: node, result: make(chan *poolEntry, 1)} - select { - case pool.connCh <- req: - case <-pool.closeCh: - return nil - } - return <-req.result -} - -// registered should be called after a successful handshake -func (pool *serverPool) registered(entry *poolEntry) { - log.Debug("Registered new entry", "enode", entry.node.ID()) - req := ®isterReq{entry: entry, done: make(chan struct{})} - select { - case pool.registerCh <- req: - case <-pool.closeCh: - return - } - <-req.done -} - -// disconnect should be called when ending a connection. Service quality statistics -// can be updated optionally (not updated if no registration happened, in this case -// only connection statistics are updated, just like in case of timeout) -func (pool *serverPool) disconnect(entry *poolEntry) { - stopped := false - select { - case <-pool.closeCh: - stopped = true - default: - } - log.Debug("Disconnected old entry", "enode", entry.node.ID()) - req := &disconnReq{entry: entry, stopped: stopped, done: make(chan struct{})} - - // Block until disconnection request is served. - pool.disconnCh <- req - <-req.done -} - -const ( - pseBlockDelay = iota - pseResponseTime - pseResponseTimeout -) - -// poolStatAdjust records are sent to adjust peer block delay/response time statistics -type poolStatAdjust struct { - adjustType int - entry *poolEntry - time time.Duration -} - -// adjustBlockDelay adjusts the block announce delay statistics of a node -func (pool *serverPool) adjustBlockDelay(entry *poolEntry, time time.Duration) { - if entry == nil { - return - } - pool.adjustStats <- poolStatAdjust{pseBlockDelay, entry, time} -} - -// adjustResponseTime adjusts the request response time statistics of a node -func (pool *serverPool) adjustResponseTime(entry *poolEntry, time time.Duration, timeout bool) { - if entry == nil { - return - } - if timeout { - pool.adjustStats <- poolStatAdjust{pseResponseTimeout, entry, time} - } else { - pool.adjustStats <- poolStatAdjust{pseResponseTime, entry, time} - } -} - -// 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 { - pool.discSetPeriod <- time.Millisecond * 100 - } - - // disconnect updates service quality statistics depending on the connection time - // and disconnection initiator. - disconnect := func(req *disconnReq, stopped bool) { - // Handle peer disconnection requests. - entry := req.entry - if entry.state == psRegistered { - connAdjust := float64(mclock.Now()-entry.regTime) / float64(targetConnTime) - if connAdjust > 1 { - connAdjust = 1 - } - if stopped { - // disconnect requested by ourselves. - entry.connectStats.add(1, connAdjust) - } else { - // disconnect requested by server side. - entry.connectStats.add(connAdjust, 1) - } - } - entry.state = psNotConnected - - if entry.knownSelected { - pool.knownSelected-- - } else { - pool.newSelected-- - } - pool.setRetryDial(entry) - pool.connWg.Done() - close(req.done) - } - - for { - select { - case entry := <-pool.timeout: - if !entry.removed { - pool.checkDialTimeout(entry) - } - - case entry := <-pool.enableRetry: - if !entry.removed { - entry.delayedRetry = false - pool.updateCheckDial(entry) - } - - case adj := <-pool.adjustStats: - switch adj.adjustType { - case pseBlockDelay: - adj.entry.delayStats.add(float64(adj.time), 1) - case pseResponseTime: - adj.entry.responseStats.add(float64(adj.time), 1) - adj.entry.timeoutStats.add(0, 1) - case pseResponseTimeout: - adj.entry.timeoutStats.add(1, 1) - } - - case node := <-pool.discNodes: - if pool.trustedNodes[node.ID()] == nil { - entry := pool.findOrNewNode(node) - pool.updateCheckDial(entry) - } - - case conv := <-pool.discLookups: - if conv { - if lookupCnt == 0 { - convTime = mclock.Now() - } - lookupCnt++ - if pool.fastDiscover && (lookupCnt == 50 || time.Duration(mclock.Now()-convTime) > time.Minute) { - pool.fastDiscover = false - if pool.discSetPeriod != nil { - pool.discSetPeriod <- time.Minute - } - } - } - - case req := <-pool.connCh: - 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 - } - - case req := <-pool.registerCh: - if req.entry.trusted { - continue - } - // Handle peer registration requests. - entry := req.entry - entry.state = psRegistered - entry.regTime = mclock.Now() - if !entry.known { - pool.newQueue.remove(entry) - entry.known = true - } - pool.knownQueue.setLatest(entry) - entry.shortRetry = shortRetryCnt - close(req.done) - - case req := <-pool.disconnCh: - if req.entry.trusted { - continue - } - // Handle peer disconnection requests. - disconnect(req, req.stopped) - - case <-pool.closeCh: - if pool.discSetPeriod != nil { - close(pool.discSetPeriod) - } - - // Spawn a goroutine to close the disconnCh after all connections are disconnected. - go func() { - pool.connWg.Wait() - close(pool.disconnCh) - }() - - // Handle all remaining disconnection requests before exit. - for req := range pool.disconnCh { - disconnect(req, true) - } - pool.saveNodes() - return - } - } -} - -func (pool *serverPool) findOrNewNode(node *enode.Node) *poolEntry { - now := mclock.Now() - entry := pool.entries[node.ID()] - if entry == nil { - log.Debug("Discovered new entry", "id", node.ID()) - entry = &poolEntry{ - node: node, - addr: make(map[string]*poolEntryAddress), - addrSelect: *newWeightedRandomSelect(), - shortRetry: shortRetryCnt, - } - pool.entries[node.ID()] = entry - // initialize previously unknown peers with good statistics to give a chance to prove themselves - entry.connectStats.add(1, initStatsWeight) - entry.delayStats.add(0, initStatsWeight) - entry.responseStats.add(0, initStatsWeight) - entry.timeoutStats.add(0, initStatsWeight) - } - entry.lastDiscovered = now - addr := &poolEntryAddress{ip: node.IP(), port: uint16(node.TCP())} - if a, ok := entry.addr[addr.strKey()]; ok { - addr = a - } else { - entry.addr[addr.strKey()] = addr - } - addr.lastSeen = now - entry.addrSelect.update(addr) - if !entry.known { - pool.newQueue.setLatest(entry) - } - return entry -} - -// loadNodes loads known nodes and their statistics from the database -func (pool *serverPool) loadNodes() { - enc, err := pool.db.Get(pool.dbKey) - if err != nil { - return - } - var list []*poolEntry - err = rlp.DecodeBytes(enc, &list) - if err != nil { - log.Debug("Failed to decode node list", "err", err) - return - } - for _, e := range list { - log.Debug("Loaded server stats", "id", e.node.ID(), "fails", e.lastConnected.fails, - "conn", fmt.Sprintf("%v/%v", e.connectStats.avg, e.connectStats.weight), - "delay", fmt.Sprintf("%v/%v", time.Duration(e.delayStats.avg), e.delayStats.weight), - "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 - 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 -// ordered from least to most recently connected. -func (pool *serverPool) saveNodes() { - list := make([]*poolEntry, len(pool.knownQueue.queue)) - for i := range list { - list[i] = pool.knownQueue.fetchOldest() - } - enc, err := rlp.EncodeToBytes(list) - if err == nil { - pool.db.Put(pool.dbKey, enc) - } -} - -// removeEntry removes a pool entry when the entry count limit is reached. -// Note that it is called by the new/known queues from which the entry has already -// been removed so removing it from the queues is not necessary. -func (pool *serverPool) removeEntry(entry *poolEntry) { - pool.newSelect.remove((*discoveredEntry)(entry)) - pool.knownSelect.remove((*knownEntry)(entry)) - entry.removed = true - delete(pool.entries, entry.node.ID()) -} - -// setRetryDial starts the timer which will enable dialing a certain node again -func (pool *serverPool) setRetryDial(entry *poolEntry) { - delay := longRetryDelay - if entry.shortRetry > 0 { - entry.shortRetry-- - delay = shortRetryDelay - } - delay += time.Duration(rand.Int63n(int64(delay) + 1)) - entry.delayedRetry = true - go func() { - select { - case <-pool.closeCh: - case <-time.After(delay): - select { - case <-pool.closeCh: - case pool.enableRetry <- entry: - } - } - }() -} - -// updateCheckDial is called when an entry can potentially be dialed again. It updates -// its selection weights and checks if new dials can/should be made. -func (pool *serverPool) updateCheckDial(entry *poolEntry) { - pool.newSelect.update((*discoveredEntry)(entry)) - pool.knownSelect.update((*knownEntry)(entry)) - pool.checkDial() -} - -// checkDial checks if new dials can/should be made. It tries to select servers both -// based on good statistics and recent discovery. -func (pool *serverPool) checkDial() { - fillWithKnownSelects := !pool.fastDiscover - for pool.knownSelected < targetKnownSelect { - entry := pool.knownSelect.choose() - if entry == nil { - fillWithKnownSelects = false - break - } - pool.dial((*poolEntry)(entry.(*knownEntry)), true) - } - for pool.knownSelected+pool.newSelected < targetServerCount { - entry := pool.newSelect.choose() - if entry == nil { - break - } - pool.dial((*poolEntry)(entry.(*discoveredEntry)), false) - } - if fillWithKnownSelects { - // no more newly discovered nodes to select and since fast discover period - // is over, we probably won't find more in the near future so select more - // known entries if possible - for pool.knownSelected < targetServerCount { - entry := pool.knownSelect.choose() - if entry == nil { - break - } - pool.dial((*poolEntry)(entry.(*knownEntry)), true) - } - } -} - -// dial initiates a new connection -func (pool *serverPool) dial(entry *poolEntry, knownSelected bool) { - if pool.server == nil || entry.state != psNotConnected { - return - } - entry.state = psDialed - entry.knownSelected = knownSelected - if knownSelected { - pool.knownSelected++ - } else { - pool.newSelected++ - } - addr := entry.addrSelect.choose().(*poolEntryAddress) - log.Debug("Dialing new peer", "lesaddr", entry.node.ID().String()+"@"+addr.strKey(), "set", len(entry.addr), "known", knownSelected) - entry.dialed = addr - go func() { - pool.server.AddPeer(entry.node) - select { - case <-pool.closeCh: - case <-time.After(dialTimeout): - select { - case <-pool.closeCh: - case pool.timeout <- entry: - } - } - }() -} - -// checkDialTimeout checks if the node is still in dialed state and if so, resets it -// and adjusts connection statistics accordingly. -func (pool *serverPool) checkDialTimeout(entry *poolEntry) { - if entry.state != psDialed { - return - } - log.Debug("Dial timeout", "lesaddr", entry.node.ID().String()+"@"+entry.dialed.strKey()) - entry.state = psNotConnected - if entry.knownSelected { - pool.knownSelected-- - } else { - pool.newSelected-- - } - entry.connectStats.add(0, 1) - entry.dialed.fails++ - pool.setRetryDial(entry) -} - -const ( - psNotConnected = iota - psDialed - psConnected - psRegistered -) - -// poolEntry represents a server node and stores its current state and statistics. -type poolEntry struct { - peer *peer - pubkey [64]byte // secp256k1 key of the node - addr map[string]*poolEntryAddress - node *enode.Node - lastConnected, dialed *poolEntryAddress - addrSelect weightedRandomSelect - - 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 -} - -// poolEntryEnc is the RLP encoding of poolEntry. -type poolEntryEnc struct { - Pubkey []byte - IP net.IP - Port uint16 - Fails uint - CStat, DStat, RStat, TStat poolStats -} - -func (e *poolEntry) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, &poolEntryEnc{ - Pubkey: encodePubkey64(e.node.Pubkey()), - IP: e.lastConnected.ip, - Port: e.lastConnected.port, - Fails: e.lastConnected.fails, - CStat: e.connectStats, - DStat: e.delayStats, - RStat: e.responseStats, - TStat: e.timeoutStats, - }) -} - -func (e *poolEntry) DecodeRLP(s *rlp.Stream) error { - var entry poolEntryEnc - if err := s.Decode(&entry); err != nil { - return err - } - pubkey, err := decodePubkey64(entry.Pubkey) - if err != nil { - return err - } - addr := &poolEntryAddress{ip: entry.IP, port: entry.Port, fails: entry.Fails, lastSeen: mclock.Now()} - e.node = enode.NewV4(pubkey, entry.IP, int(entry.Port), int(entry.Port)) - e.addr = make(map[string]*poolEntryAddress) - e.addr[addr.strKey()] = addr - e.addrSelect = *newWeightedRandomSelect() - e.addrSelect.update(addr) - e.lastConnected = addr - e.connectStats = entry.CStat - e.delayStats = entry.DStat - e.responseStats = entry.RStat - e.timeoutStats = entry.TStat - e.shortRetry = shortRetryCnt - e.known = true - return nil -} - -func encodePubkey64(pub *ecdsa.PublicKey) []byte { - return crypto.FromECDSAPub(pub)[1:] -} - -func decodePubkey64(b []byte) (*ecdsa.PublicKey, error) { - return crypto.UnmarshalPubkey(append([]byte{0x04}, b...)) -} - -// discoveredEntry implements wrsItem -type discoveredEntry poolEntry - -// Weight calculates random selection weight for newly discovered entries -func (e *discoveredEntry) Weight() int64 { - if e.state != psNotConnected || e.delayedRetry { - return 0 - } - t := time.Duration(mclock.Now() - e.lastDiscovered) - if t <= discoverExpireStart { - return 1000000000 - } - return int64(1000000000 * math.Exp(-float64(t-discoverExpireStart)/float64(discoverExpireConst))) -} - -// knownEntry implements wrsItem -type knownEntry poolEntry - -// Weight calculates random selection weight for known entries -func (e *knownEntry) Weight() int64 { - if e.state != psNotConnected || !e.known || e.delayedRetry { - return 0 - } - return int64(1000000000 * e.connectStats.recentAvg() * math.Exp(-float64(e.lastConnected.fails)*failDropLn-e.responseStats.recentAvg()/float64(responseScoreTC)-e.delayStats.recentAvg()/float64(delayScoreTC)) * math.Pow(1-e.timeoutStats.recentAvg(), timeoutPow)) -} - -// poolEntryAddress is a separate object because currently it is necessary to remember -// multiple potential network addresses for a pool entry. This will be removed after -// the final implementation of v5 discovery which will retrieve signed and serial -// numbered advertisements, making it clear which IP/port is the latest one. -type poolEntryAddress struct { - ip net.IP - port uint16 - lastSeen mclock.AbsTime // last time it was discovered, connected or loaded from db - fails uint // connection failures since last successful connection (persistent) -} - -func (a *poolEntryAddress) Weight() int64 { - t := time.Duration(mclock.Now() - a.lastSeen) - return int64(1000000*math.Exp(-float64(t)/float64(discoverExpireConst)-float64(a.fails)*addrFailDropLn)) + 1 -} - -func (a *poolEntryAddress) strKey() string { - return a.ip.String() + ":" + strconv.Itoa(int(a.port)) -} - -// poolStats implement statistics for a certain quantity with a long term average -// and a short term value which is adjusted exponentially with a factor of -// pstatRecentAdjust with each update and also returned exponentially to the -// average with the time constant pstatReturnToMeanTC -type poolStats struct { - sum, weight, avg, recent float64 - lastRecalc mclock.AbsTime -} - -// init initializes stats with a long term sum/update count pair retrieved from the database -func (s *poolStats) init(sum, weight float64) { - s.sum = sum - s.weight = weight - var avg float64 - if weight > 0 { - avg = s.sum / weight - } - s.avg = avg - s.recent = avg - s.lastRecalc = mclock.Now() -} - -// recalc recalculates recent value return-to-mean and long term average -func (s *poolStats) recalc() { - now := mclock.Now() - s.recent = s.avg + (s.recent-s.avg)*math.Exp(-float64(now-s.lastRecalc)/float64(pstatReturnToMeanTC)) - if s.sum == 0 { - s.avg = 0 - } else { - if s.sum > s.weight*1e30 { - s.avg = 1e30 - } else { - s.avg = s.sum / s.weight - } - } - s.lastRecalc = now -} - -// add updates the stats with a new value -func (s *poolStats) add(value, weight float64) { - s.weight += weight - s.sum += value * weight - s.recalc() -} - -// recentAvg returns the short-term adjusted average -func (s *poolStats) recentAvg() float64 { - s.recalc() - return s.recent -} - -func (s *poolStats) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, []interface{}{math.Float64bits(s.sum), math.Float64bits(s.weight)}) -} - -func (s *poolStats) DecodeRLP(st *rlp.Stream) error { - var stats struct { - SumUint, WeightUint uint64 - } - if err := st.Decode(&stats); err != nil { - return err - } - s.init(math.Float64frombits(stats.SumUint), math.Float64frombits(stats.WeightUint)) - return nil -} - -// poolEntryQueue keeps track of its least recently accessed entries and removes -// them when the number of entries reaches the limit -type poolEntryQueue struct { - queue map[int]*poolEntry // known nodes indexed by their latest lastConnCnt value - newPtr, oldPtr, maxCnt int - removeFromPool func(*poolEntry) -} - -// newPoolEntryQueue returns a new poolEntryQueue -func newPoolEntryQueue(maxCnt int, removeFromPool func(*poolEntry)) poolEntryQueue { - return poolEntryQueue{queue: make(map[int]*poolEntry), maxCnt: maxCnt, removeFromPool: removeFromPool} -} - -// fetchOldest returns and removes the least recently accessed entry -func (q *poolEntryQueue) fetchOldest() *poolEntry { - if len(q.queue) == 0 { - return nil - } - for { - if e := q.queue[q.oldPtr]; e != nil { - delete(q.queue, q.oldPtr) - q.oldPtr++ - return e - } - q.oldPtr++ - } -} - -// remove removes an entry from the queue -func (q *poolEntryQueue) remove(entry *poolEntry) { - if q.queue[entry.queueIdx] == entry { - delete(q.queue, entry.queueIdx) - } -} - -// setLatest adds or updates a recently accessed entry. It also checks if an old entry -// needs to be removed and removes it from the parent pool too with a callback function. -func (q *poolEntryQueue) setLatest(entry *poolEntry) { - if q.queue[entry.queueIdx] == entry { - delete(q.queue, entry.queueIdx) - } else { - if len(q.queue) == q.maxCnt { - e := q.fetchOldest() - q.remove(e) - q.removeFromPool(e) - } - } - entry.queueIdx = q.newPtr - q.queue[entry.queueIdx] = entry - q.newPtr++ -} diff --git a/les/servingqueue.go b/les/servingqueue.go index 1f02614a..10c7e6f4 100644 --- a/les/servingqueue.go +++ b/les/servingqueue.go @@ -21,8 +21,8 @@ import ( "sync" "sync/atomic" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/common/prque" + "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 @@ -55,7 +55,7 @@ type servingQueue struct { type servingTask struct { sq *servingQueue servingTime, timeAdded, maxTime, expTime uint64 - peer *peer + peer *clientPeer priority int64 biasAdded bool token runToken @@ -123,7 +123,7 @@ func (t *servingTask) waitOrStop() bool { // newServingQueue returns a new servingQueue func newServingQueue(suspendBias int64, utilTarget float64) *servingQueue { sq := &servingQueue{ - queue: prque.New(nil), + queue: prque.NewWrapAround(nil), suspendBias: suspendBias, queueAddCh: make(chan *servingTask, 100), queueBestCh: make(chan *servingTask), @@ -142,7 +142,7 @@ func newServingQueue(suspendBias int64, utilTarget float64) *servingQueue { } // newTask creates a new task with the given priority -func (sq *servingQueue) newTask(peer *peer, maxTime uint64, priority int64) *servingTask { +func (sq *servingQueue) newTask(peer *clientPeer, maxTime uint64, priority int64) *servingTask { return &servingTask{ sq: sq, peer: peer, @@ -159,27 +159,23 @@ func (sq *servingQueue) newTask(peer *peer, maxTime uint64, priority int64) *ser // run tokens from the token channel and allow the corresponding tasks to run // without entering the priority queue. func (sq *servingQueue) threadController() { + defer sq.wg.Done() 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: + case <-token: } } } @@ -187,7 +183,7 @@ func (sq *servingQueue) threadController() { type ( // peerTasks lists the tasks received from a given peer when selecting peers to freeze peerTasks struct { - peer *peer + peer *clientPeer list []*servingTask sumTime uint64 priority float64 @@ -211,7 +207,7 @@ func (l peerList) Swap(i, j int) { // 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) + peerMap := make(map[*clientPeer]*peerTasks) var peerList peerList if sq.best != nil { sq.queue.Push(sq.best, sq.best.priority) @@ -239,7 +235,7 @@ func (sq *servingQueue) freezePeers() { drop := true for _, tasks := range peerList { if drop { - tasks.peer.freezeClient() + tasks.peer.freeze() tasks.peer.fcClient.Freeze() sq.queuedTime -= tasks.sumTime sqQueuedGauge.Update(int64(sq.queuedTime)) @@ -279,7 +275,7 @@ func (sq *servingQueue) updateRecentTime() { func (sq *servingQueue) addTask(task *servingTask) { if sq.best == nil { sq.best = task - } else if task.priority > sq.best.priority { + } else if task.priority-sq.best.priority > 0 { sq.queue.Push(sq.best, sq.best.priority) sq.best = task } else { @@ -298,6 +294,7 @@ func (sq *servingQueue) addTask(task *servingTask) { // and always tries to send the highest priority task to queueBestCh. Successfully sent // tasks are removed from the queue. func (sq *servingQueue) queueLoop() { + defer sq.wg.Done() for { if sq.best != nil { expTime := sq.best.expTime @@ -316,7 +313,6 @@ func (sq *servingQueue) queueLoop() { sq.best, _ = sq.queue.PopItem().(*servingTask) } case <-sq.quit: - sq.wg.Done() return } } else { @@ -324,7 +320,6 @@ func (sq *servingQueue) queueLoop() { case task := <-sq.queueAddCh: sq.addTask(task) case <-sq.quit: - sq.wg.Done() return } } @@ -335,6 +330,7 @@ func (sq *servingQueue) queueLoop() { // of active thread controller goroutines. func (sq *servingQueue) threadCountLoop() { var threadCountTarget int + defer sq.wg.Done() for { for threadCountTarget > sq.threadCount { sq.wg.Add(1) @@ -347,14 +343,12 @@ func (sq *servingQueue) threadCountLoop() { 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 } } diff --git a/les/state_accessor.go b/les/state_accessor.go new file mode 100644 index 00000000..112e6fd4 --- /dev/null +++ b/les/state_accessor.go @@ -0,0 +1,75 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "fmt" + + "github.com/ethereum/go-ethereum/core" + "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/light" +) + +// stateAtBlock retrieves the state database associated with a certain block. +func (leth *LightEthereum) stateAtBlock(ctx context.Context, block *types.Block, reexec uint64) (*state.StateDB, error) { + return light.NewState(ctx, block.Header(), leth.odr), nil +} + +// stateAtTransaction returns the execution environment of a certain transaction. +func (leth *LightEthereum) stateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) { + // Short circuit if it's genesis block. + if block.NumberU64() == 0 { + return nil, vm.BlockContext{}, nil, errors.New("no transaction in genesis") + } + // Create the parent state database + parent, err := leth.blockchain.GetBlock(ctx, block.ParentHash(), block.NumberU64()-1) + if err != nil { + return nil, vm.BlockContext{}, nil, err + } + statedb, err := leth.stateAtBlock(ctx, parent, reexec) + if err != nil { + return nil, vm.BlockContext{}, nil, err + } + if txIndex == 0 && len(block.Transactions()) == 0 { + return nil, vm.BlockContext{}, statedb, nil + } + // Recompute transactions up to the target index. + signer := types.MakeSigner(leth.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, block.BaseFee()) + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(block.Header(), leth.blockchain, nil) + statedb.Prepare(tx.Hash(), idx) + if idx == txIndex { + return msg, context, statedb, nil + } + // Not yet the searched for transaction, execute on top of the current state + vmenv := vm.NewEVM(context, txContext, statedb, leth.blockchain.Config(), vm.Config{}) + if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + return nil, vm.BlockContext{}, nil, 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.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) + } + return nil, vm.BlockContext{}, nil, fmt.Errorf("transaction index %d out of range for block %#x", txIndex, block.Hash()) +} diff --git a/les/sync.go b/les/sync.go index 65eae9f2..31cd06ca 100644 --- a/les/sync.go +++ b/les/sync.go @@ -21,11 +21,12 @@ import ( "errors" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/les/downloader" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) var errInvalidCheckpoint = errors.New("invalid advertised checkpoint") @@ -51,13 +52,13 @@ const ( // 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 { +func (h *clientHandler) validateCheckpoint(peer *serverPeer) 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) + wrapPeer := &peerConnection{handler: h, peer: peer} + header, err := wrapPeer.RetrieveSingleHeaderByNumber(ctx, peer.checkpointNumber) if err != nil { return err } @@ -66,7 +67,7 @@ func (h *clientHandler) validateCheckpoint(peer *peer) error { if err != nil { return err } - events := h.backend.oracle.contract.LookupCheckpointEvents(logs, cp.SectionIndex, cp.Hash()) + events := h.backend.oracle.Contract().LookupCheckpointEvents(logs, peer.checkpoint.SectionIndex, peer.checkpoint.Hash()) if len(events) == 0 { return errInvalidCheckpoint } @@ -78,7 +79,7 @@ func (h *clientHandler) validateCheckpoint(peer *peer) error { for _, event := range events { signatures = append(signatures, append(event.R[:], append(event.S[:], event.V)...)) } - valid, signers := h.backend.oracle.verifySigners(index, hash, signatures) + valid, signers := h.backend.oracle.VerifySigners(index, hash, signatures) if !valid { return errInvalidCheckpoint } @@ -87,7 +88,7 @@ func (h *clientHandler) validateCheckpoint(peer *peer) error { } // synchronise tries to sync up our local chain with a remote peer. -func (h *clientHandler) synchronise(peer *peer) { +func (h *clientHandler) synchronise(peer *serverPeer) { // Short circuit if the peer is nil. if peer == nil { return @@ -95,25 +96,36 @@ func (h *clientHandler) synchronise(peer *peer) { // Make sure the peer's TD is higher than our own. 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 { + if currentTd != nil && peer.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 + // 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 local checkpoint or empty checkpoint + // (2) New version server but simple checkpoint syncing is not enabled + // (e.g. mainnet, new testnet or private network) + // => Use local checkpoint or empty checkpoint + // (3) New version server but the provided stable checkpoint is even lower + // than the local one. + // => Use local checkpoint // (4) New version server with valid and higher stable checkpoint // => Use provided checkpoint - var checkpoint = &peer.checkpoint - var hardcoded bool + var ( + local bool + checkpoint = &peer.checkpoint + ) if h.checkpoint != nil && h.checkpoint.SectionIndex >= peer.checkpoint.SectionIndex { - checkpoint = h.checkpoint // Use the hardcoded one. - hardcoded = true + local, checkpoint = true, h.checkpoint + } + // Replace the checkpoint with locally configured one If it's required by + // users. Nil checkpoint means synchronization from the scratch. + if h.backend.config.SyncFromCheckpoint { + local, checkpoint = true, h.backend.config.Checkpoint + if h.backend.config.Checkpoint == nil { + checkpoint = ¶ms.TrustedCheckpoint{} + } } // Determine whether we should run checkpoint syncing or normal light syncing. // @@ -121,7 +133,7 @@ func (h *clientHandler) synchronise(peer *peer) { // // 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) + // 3. The checkpoint is local(replaced with local checkpoint) // 4. For some networks the checkpoint syncing is not activated. mode := checkpointSync switch { @@ -131,25 +143,30 @@ func (h *clientHandler) synchronise(peer *peer) { 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: + case local: mode = legacyCheckpointSync log.Debug("Disable checkpoint syncing", "reason", "checkpoint is hardcoded") - case h.backend.oracle == nil || !h.backend.oracle.isRunning(): - mode = legacyCheckpointSync + 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.backend.oracle != nil && h.backend.oracle.syncDoneHook != nil { - h.backend.oracle.syncDoneHook() + if h.syncEnd != nil { + h.syncEnd(h.backend.blockchain.CurrentHeader()) } }() + start := time.Now() if mode == checkpointSync || mode == legacyCheckpointSync { // Validate the advertised checkpoint - if mode == legacyCheckpointSync { - checkpoint = h.checkpoint - } else if mode == checkpointSync { + if mode == checkpointSync { if err := h.validateCheckpoint(peer); err != nil { log.Debug("Failed to validate checkpoint", "reason", err) h.removePeer(peer.id) @@ -174,6 +191,10 @@ func (h *clientHandler) synchronise(peer *peer) { return } } + + if h.syncStart != nil { + h.syncStart(h.backend.blockchain.CurrentHeader()) + } // 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) diff --git a/les/sync_test.go b/les/sync_test.go index bcef8441..3fc2a9c1 100644 --- a/les/sync_test.go +++ b/les/sync_test.go @@ -22,26 +22,24 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "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) } +func TestLightSyncingLes3(t *testing.T) { testCheckpointSyncing(t, lpv3, 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) } +func TestLegacyCheckpointSyncingLes3(t *testing.T) { testCheckpointSyncing(t, lpv3, 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 TestCheckpointSyncingLes3(t *testing.T) { testCheckpointSyncing(t, lpv3, 2) } func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { config := light.TestServerIndexerConfig @@ -56,8 +54,14 @@ func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { 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) + // Generate 128+1 blocks (totally 1 CHT section) + netconfig := testnetConfig{ + blocks: int(config.ChtSize + config.ChtConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) defer tearDown() expected := config.ChtSize + config.ChtConfirms @@ -80,19 +84,20 @@ func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { // 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()...)...)...) + data := append([]byte{0x19, 0x00}, append(oracleAddr.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 { + auth, _ := bind.NewKeyedTransactorWithChainID(signerKey, big.NewInt(1337)) + if _, err := server.handler.server.oracle.Contract().RegisterCheckpoint(auth, 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) + _, hash, _, err := server.handler.server.oracle.Contract().Contract().GetLatestCheckpoint(nil) if err != nil || hash == [32]byte{} { - time.Sleep(100 * time.Millisecond) + time.Sleep(10 * time.Millisecond) continue } break @@ -102,8 +107,7 @@ func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { } done := make(chan error) - client.handler.backend.oracle.syncDoneHook = func() { - header := client.handler.backend.blockchain.CurrentHeader() + client.handler.syncEnd = func(header *types.Header) { if header.Number.Uint64() == expected { done <- nil } else { @@ -112,15 +116,111 @@ func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { } // Create connected peer pair. - _, err1, _, err2 := newTestPeerPair("peer", protocol, server.handler, client.handler) + peer1, peer2, err := newTestPeerPair("peer", protocol, server.handler, client.handler, false) + if err != nil { + t.Fatalf("Failed to connect testing peers %v", err) + } + defer peer1.close() + defer peer2.close() + 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) + 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 TestMissOracleBackendLES3(t *testing.T) { testMissOracleBackend(t, true, lpv3) } +func TestMissOracleBackendNoCheckpointLES3(t *testing.T) { testMissOracleBackend(t, false, lpv3) } + +func testMissOracleBackend(t *testing.T, hasCheckpoint bool, protocol 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 128+1 blocks (totally 1 CHT section) + netconfig := testnetConfig{ + blocks: int(config.ChtSize + config.ChtConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) + 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(oracleAddr.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 + auth, _ := bind.NewKeyedTransactorWithChainID(signerKey, big.NewInt(1337)) + if _, err := server.handler.server.oracle.Contract().RegisterCheckpoint(auth, 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.syncEnd = func(header *types.Header) { + 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. + if _, _, err := newTestPeerPair("peer", 2, server.handler, client.handler, false); err != nil { + t.Fatalf("Failed to connect testing peers %v", err) + } select { case err := <-done: if err != nil { @@ -131,3 +231,160 @@ func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { t.Error("checkpoint syncing timeout") } } + +func TestSyncFromConfiguredCheckpointLES3(t *testing.T) { testSyncFromConfiguredCheckpoint(t, lpv3) } + +func testSyncFromConfiguredCheckpoint(t *testing.T, protocol int) { + config := light.TestServerIndexerConfig + + waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 2 && bts >= 2 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + // Generate 256+1 blocks (totally 2 CHT sections) + netconfig := testnetConfig{ + blocks: int(2*config.ChtSize + config.ChtConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) + defer tearDown() + + // Configure the local checkpoint(the first section) + head := server.handler.blockchain.GetHeaderByNumber(config.ChtSize - 1).Hash() + cp := ¶ms.TrustedCheckpoint{ + SectionIndex: 0, + SectionHead: head, + CHTRoot: light.GetChtRoot(server.db, 0, head), + BloomRoot: light.GetBloomTrieRoot(server.db, 0, head), + } + client.handler.backend.config.SyncFromCheckpoint = true + client.handler.backend.config.Checkpoint = cp + client.handler.checkpoint = cp + client.handler.backend.blockchain.AddTrustedCheckpoint(cp) + + var ( + start = make(chan error, 1) + end = make(chan error, 1) + expectStart = config.ChtSize - 1 + expectEnd = 2*config.ChtSize + config.ChtConfirms + ) + client.handler.syncStart = func(header *types.Header) { + if header.Number.Uint64() == expectStart { + start <- nil + } else { + start <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expectStart, header.Number) + } + } + client.handler.syncEnd = func(header *types.Header) { + if header.Number.Uint64() == expectEnd { + end <- nil + } else { + end <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expectEnd, header.Number) + } + } + // Create connected peer pair. + if _, _, err := newTestPeerPair("peer", 2, server.handler, client.handler, false); err != nil { + t.Fatalf("Failed to connect testing peers %v", err) + } + + select { + case err := <-start: + if err != nil { + t.Error("sync failed", err) + } + return + case <-time.NewTimer(10 * time.Second).C: + t.Error("checkpoint syncing timeout") + } + + select { + case err := <-end: + if err != nil { + t.Error("sync failed", err) + } + return + case <-time.NewTimer(10 * time.Second).C: + t.Error("checkpoint syncing timeout") + } +} + +func TestSyncAll(t *testing.T) { testSyncAll(t, lpv3) } + +func testSyncAll(t *testing.T, protocol int) { + config := light.TestServerIndexerConfig + + waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 2 && bts >= 2 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + // Generate 256+1 blocks (totally 2 CHT sections) + netconfig := testnetConfig{ + blocks: int(2*config.ChtSize + config.ChtConfirms), + protocol: protocol, + indexFn: waitIndexers, + nopruning: true, + } + server, client, tearDown := newClientServerEnv(t, netconfig) + defer tearDown() + + client.handler.backend.config.SyncFromCheckpoint = true + + var ( + start = make(chan error, 1) + end = make(chan error, 1) + expectStart = uint64(0) + expectEnd = 2*config.ChtSize + config.ChtConfirms + ) + client.handler.syncStart = func(header *types.Header) { + if header.Number.Uint64() == expectStart { + start <- nil + } else { + start <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expectStart, header.Number) + } + } + client.handler.syncEnd = func(header *types.Header) { + if header.Number.Uint64() == expectEnd { + end <- nil + } else { + end <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expectEnd, header.Number) + } + } + // Create connected peer pair. + if _, _, err := newTestPeerPair("peer", 2, server.handler, client.handler, false); err != nil { + t.Fatalf("Failed to connect testing peers %v", err) + } + + select { + case err := <-start: + if err != nil { + t.Error("sync failed", err) + } + return + case <-time.NewTimer(10 * time.Second).C: + t.Error("checkpoint syncing timeout") + } + + select { + case err := <-end: + 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 index d573faae..8335e2c3 100644 --- a/les/test_helper.go +++ b/les/test_helper.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,42 +14,49 @@ // 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. +// This file contains some shares testing functionality, common to multiple +// different files and modules being tested. Client based network and Server +// based network can be created easily with available APIs. package les import ( "context" "crypto/rand" + "fmt" "math/big" + "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind/backends" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/contracts/checkpointoracle/contract" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/les/flowcontrol" - "github.com/cryptoecc/ETH-ECC/light" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" + "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" + "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/forkid" + "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/ethconfig" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/les/checkpointoracle" + "github.com/ethereum/go-ethereum/les/flowcontrol" + vfs "github.com/ethereum/go-ethereum/les/vflux/server" + "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) + bankFunds = big.NewInt(1_000_000_000_000_000_000) userKey1, _ = crypto.GenerateKey() userKey2, _ = crypto.GenerateKey() @@ -63,18 +70,18 @@ var ( testEventEmitterCode = common.Hex2Bytes("60606040523415600e57600080fd5b7f57050ab73f6b9ebdd9f76b8d4997793f48cf956e965ee070551b9ca0bb71584e60405160405180910390a160358060476000396000f3006060604052600080fd00a165627a7a723058203f727efcad8b5811f8cb1fc2620ce5e8c63570d697aef968172de296ea3994140029") - // Checkpoint registrar relative - registrarAddr common.Address - signerKey, _ = crypto.GenerateKey() - signerAddr = crypto.PubkeyToAddress(signerKey.PublicKey) + // Checkpoint oracle relative fields + oracleAddr 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) + sectionSize = big.NewInt(128) // The number of confirmations needed to generate a checkpoint(only used in test). - processConfirms = big.NewInt(4) + processConfirms = big.NewInt(1) // The token bucket buffer limit for testing purpose. testBufLimit = uint64(1000000) @@ -107,47 +114,65 @@ func prepare(n int, backend *backends.SimulatedBackend) { for i := 0; i < n; i++ { switch i { case 0: + // Builtin-block + // number: 1 + // txs: 2 + // deploy checkpoint contract - registrarAddr, _, _, _ = contract.DeployCheckpointOracle(bind.NewKeyedTransactor(bankKey), backend, []common.Address{signerAddr}, sectionSize, processConfirms, big.NewInt(1)) + auth, _ := bind.NewKeyedTransactorWithChainID(bankKey, big.NewInt(1337)) + oracleAddr, _, _, _ = contract.DeployCheckpointOracle(auth, 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) + tx, _ := types.SignTx(types.NewTransaction(nonce, userAddr1, big.NewInt(10_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, bankKey) backend.SendTransaction(ctx, tx) case 1: + // Builtin-block + // number: 2 + // txs: 4 + 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) + tx1, _ := types.SignTx(types.NewTransaction(bankNonce, userAddr1, big.NewInt(1_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), 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) + tx2, _ := types.SignTx(types.NewTransaction(userNonce1, userAddr2, big.NewInt(1_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), 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) + tx3, _ := types.SignTx(types.NewContractCreation(userNonce1+1, big.NewInt(0), 200000, big.NewInt(params.InitialBaseFee), 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) + tx4, _ := types.SignTx(types.NewContractCreation(userNonce1+2, big.NewInt(0), 200000, big.NewInt(params.InitialBaseFee), testEventEmitterCode), signer, userKey1) backend.SendTransaction(ctx, tx4) case 2: + // Builtin-block + // number: 3 + // txs: 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) + tx1, _ := types.SignTx(types.NewTransaction(bankNonce, signerAddr, big.NewInt(1000000000), params.TxGas, big.NewInt(params.InitialBaseFee), 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) + tx2, _ := types.SignTx(types.NewTransaction(bankNonce+1, testContractAddr, big.NewInt(0), 100000, big.NewInt(params.InitialBaseFee), data), signer, bankKey) backend.SendTransaction(ctx, tx2) case 3: + // Builtin-block + // number: 4 + // txs: 1 + // 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) + tx, _ := types.SignTx(types.NewTransaction(bankNonce, testContractAddr, big.NewInt(0), 100000, big.NewInt(params.InitialBaseFee), data), signer, bankKey) backend.SendTransaction(ctx, tx) } backend.Commit() @@ -155,17 +180,17 @@ func prepare(n int, backend *backends.SimulatedBackend) { } // 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 { +func testIndexers(db ethdb.Database, odr light.OdrBackend, config *light.IndexerConfig, disablePruning bool) []*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) + indexers[0] = light.NewChtIndexer(db, odr, config.ChtSize, config.ChtConfirms, disablePruning) + indexers[1] = core.NewBloomIndexer(db, config.BloomSize, config.BloomConfirms) + indexers[2] = light.NewBloomTrieIndexer(db, odr, config.BloomSize, config.BloomTrieSize, disablePruning) // 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 { +func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, indexers []*core.ChainIndexer, db ethdb.Database, peers *serverPeerSet, ulcServers []string, ulcFraction int) (*clientHandler, func()) { var ( evmux = new(event.TypeMux) engine = ethash.NewFaker() @@ -173,8 +198,9 @@ func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, index Config: params.AllEthashProtocolChanges, Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, GasLimit: 100000000, + BaseFee: big.NewInt(params.InitialBaseFee), } - oracle *checkpointOracle + oracle *checkpointoracle.CheckpointOracle ) genesis := gspec.MustCommit(db) chain, _ := light.NewLightChain(odr, gspec.Config, engine, nil) @@ -194,43 +220,48 @@ func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, index BloomRoot: light.GetBloomTrieRoot(db, index, sectionHead), } } - oracle = newCheckpointOracle(checkpointConfig, getLocal) + oracle = checkpointoracle.New(checkpointConfig, getLocal) } client := &LightEthereum{ lesCommons: lesCommons{ genesis: genesis.Hash(), - config: ð.Config{LightPeers: 100, NetworkId: NetworkId}, + config: ðconfig.Config{LightPeers: 100, NetworkId: NetworkId}, chainConfig: params.AllEthashProtocolChanges, iConfig: light.TestClientIndexerConfig, chainDb: db, oracle: oracle, chainReader: chain, - peers: peers, closeCh: make(chan struct{}), }, + peers: peers, reqDist: odr.retriever.dist, retriever: odr.retriever, odr: odr, engine: engine, blockchain: chain, eventMux: evmux, + merger: consensus.NewMerger(rawdb.NewMemoryDatabase()), } client.handler = newClientHandler(ulcServers, ulcFraction, nil, client) if client.oracle != nil { - client.oracle.start(backend) + client.oracle.Start(backend) + } + client.handler.start() + return client.handler, func() { + client.handler.stop() } - return client.handler } -func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, peers *peerSet, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend) { +func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend, func()) { var ( gspec = core.Genesis{ Config: params.AllEthashProtocolChanges, Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, GasLimit: 100000000, + BaseFee: big.NewInt(params.InitialBaseFee), } - oracle *checkpointOracle + oracle *checkpointoracle.CheckpointOracle ) genesis := gspec.MustCommit(db) @@ -257,20 +288,20 @@ func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Da BloomRoot: light.GetBloomTrieRoot(db, index, sectionHead), } } - oracle = newCheckpointOracle(checkpointConfig, getLocal) + oracle = checkpointoracle.New(checkpointConfig, getLocal) } server := &LesServer{ lesCommons: lesCommons{ genesis: genesis.Hash(), - config: ð.Config{LightPeers: 100, NetworkId: NetworkId}, + config: ð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{}), }, + peers: newClientPeerSet(), servingQueue: newServingQueue(int64(time.Millisecond*10), 1), defParams: flowcontrol.ServerParams{ BufLimit: testBufLimit, @@ -278,65 +309,89 @@ func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Da }, fcManager: flowcontrol.NewClientManager(nil, clock), } - server.costTracker, server.freeCapacity = newCostTracker(db, server.config) + server.costTracker, server.minCapacity = 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.clientPool = vfs.NewClientPool(db, testBufRecharge, defaultConnectedBias, clock, alwaysTrueFn) + server.clientPool.Start() + 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.oracle.Start(simulation) } server.servingQueue.setThreads(4) server.handler.start() - return server.handler, simulation + closer := func() { server.Stop() } + return server.handler, simulation, closer +} + +func alwaysTrueFn() bool { + return true } // testPeer is a simulated peer to allow testing direct network calls. type testPeer struct { - peer *peer + cpeer *clientPeer + speer *serverPeer 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) +// handshakeWithServer executes the handshake with the remote server peer. +func (p *testPeer) handshakeWithServer(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID) { + // It only works for the simulated client peer + if p.cpeer == nil { + t.Fatal("handshake for client peer only") + } + var sendList keyValueList + sendList = sendList.add("protocolVersion", uint64(p.cpeer.version)) + sendList = sendList.add("networkId", uint64(NetworkId)) + sendList = sendList.add("headTd", td) + sendList = sendList.add("headHash", head) + sendList = sendList.add("headNum", headNum) + sendList = sendList.add("genesisHash", genesis) + if p.cpeer.version >= lpv4 { + sendList = sendList.add("forkID", &forkID) + } + if err := p2p.ExpectMsg(p.app, StatusMsg, nil); err != nil { + t.Fatalf("status recv: %v", err) + } + if err := p2p.Send(p.app, StatusMsg, &sendList); err != nil { + t.Fatalf("status send: %v", err) + } +} - // 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, +// handshakeWithClient executes the handshake with the remote client peer. +func (p *testPeer) handshakeWithClient(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, costList RequestCostList, recentTxLookup uint64) { + // It only works for the simulated client peer + if p.speer == nil { + t.Fatal("handshake for server peer only") } - // 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)) + var sendList keyValueList + sendList = sendList.add("protocolVersion", uint64(p.speer.version)) + sendList = sendList.add("networkId", uint64(NetworkId)) + sendList = sendList.add("headTd", td) + sendList = sendList.add("headHash", head) + sendList = sendList.add("headNum", headNum) + sendList = sendList.add("genesisHash", genesis) + sendList = sendList.add("serveHeaders", nil) + sendList = sendList.add("serveChainSince", uint64(0)) + sendList = sendList.add("serveStateSince", uint64(0)) + sendList = sendList.add("serveRecentState", uint64(core.TriesInMemory-4)) + sendList = sendList.add("txRelay", nil) + sendList = sendList.add("flowControl/BL", testBufLimit) + sendList = sendList.add("flowControl/MRR", testBufRecharge) + sendList = sendList.add("flowControl/MRC", costList) + if p.speer.version >= lpv4 { + sendList = sendList.add("forkID", &forkID) + sendList = sendList.add("recentTxLookup", recentTxLookup) + } + if err := p2p.ExpectMsg(p.app, StatusMsg, nil); err != nil { + t.Fatalf("status recv: %v", err) + } + if err := p2p.Send(p.app, StatusMsg, &sendList); err != nil { + t.Fatalf("status send: %v", err) } - return tp, errCh } // close terminates the local side of the peer, notifying the remote protocol @@ -345,7 +400,7 @@ func (p *testPeer) close() { p.app.Close() } -func newTestPeerPair(name string, version int, server *serverHandler, client *clientHandler) (*testPeer, <-chan error, *testPeer, <-chan error) { +func newTestPeerPair(name string, version int, server *serverHandler, client *clientHandler, noInitAnnounce bool) (*testPeer, *testPeer, error) { // Create a message pipe to communicate through app, net := p2p.MsgPipe() @@ -353,8 +408,8 @@ func newTestPeerPair(name string, version int, server *serverHandler, client *cl 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) + peer1 := newClientPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) + peer2 := newServerPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), app) // Start the peer on a new thread errc1 := make(chan error, 1) @@ -369,49 +424,30 @@ func newTestPeerPair(name string, version int, server *serverHandler, client *cl go func() { select { case <-client.closeCh: - errc1 <- p2p.DiscQuitting - case errc1 <- client.handle(peer2): + errc2 <- p2p.DiscQuitting + case errc2 <- client.handle(peer2, noInitAnnounce): } }() - 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, + // Ensure the connection is established or exits when any error occurs + for { + select { + case err := <-errc1: + return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) + case err := <-errc2: + return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) + default: + } + if atomic.LoadUint32(&peer1.serving) == 1 && atomic.LoadUint32(&peer2.serving) == 1 { + break + } + time.Sleep(50 * time.Millisecond) } + return &testPeer{cpeer: peer1, net: net, app: app}, &testPeer{speer: peer2, net: app, app: net}, nil } type indexerCallback func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer) -// testClient represents a client for testing with necessary auxiliary fields. +// testClient represents a client object for testing with necessary auxiliary fields. type testClient struct { clock mclock.Clock db ethdb.Database @@ -423,7 +459,58 @@ type testClient struct { bloomTrieIndexer *core.ChainIndexer } -// testServer represents a server for testing with necessary auxiliary fields. +// newRawPeer creates a new server peer connects to the server and do the handshake. +func (client *testClient) newRawPeer(t *testing.T, name string, version int, recentTxLookup uint64) (*testPeer, func(), <-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 := newServerPeer(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 <-client.handler.closeCh: + errCh <- p2p.DiscQuitting + case errCh <- client.handler.handle(peer, false): + } + }() + tp := &testPeer{ + app: app, + net: net, + speer: peer, + } + var ( + genesis = client.handler.backend.blockchain.Genesis() + head = client.handler.backend.blockchain.CurrentHeader() + td = client.handler.backend.blockchain.GetTd(head.Hash(), head.Number.Uint64()) + ) + forkID := forkid.NewID(client.handler.backend.blockchain.Config(), genesis.Hash(), head.Number.Uint64()) + tp.handshakeWithClient(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash(), forkID, testCostList(0), recentTxLookup) // disable flow control by default + + // Ensure the connection is established or exits when any error occurs + for { + select { + case <-errCh: + return nil, nil, nil + default: + } + if atomic.LoadUint32(&peer.serving) == 1 { + break + } + time.Sleep(50 * time.Millisecond) + } + closePeer := func() { + tp.speer.close() + tp.close() + } + return tp, closePeer, errCh +} + +// testServer represents a server object for testing with necessary auxiliary fields. type testServer struct { clock mclock.Clock backend *backends.SimulatedBackend @@ -436,92 +523,116 @@ type testServer struct { 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) +// newRawPeer creates a new client peer connects to the server and do the handshake. +func (server *testServer) newRawPeer(t *testing.T, name string, version int) (*testPeer, func(), <-chan error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() - var clock mclock.Clock = &mclock.System{} - if simClock { - clock = &mclock.Simulated{} - } - handler, b := newTestServerHandler(blocks, indexers, db, newPeerSet(), clock) + // Generate a random id and create the peer + var id enode.ID + rand.Read(id[:]) + peer := newClientPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) - var peer *testPeer - if newPeer { - peer, _ = newTestPeer(t, "peer", protocol, handler, true, testCost) + // Start the peer on a new thread + errCh := make(chan error, 1) + go func() { + select { + case <-server.handler.closeCh: + errCh <- p2p.DiscQuitting + case errCh <- server.handler.handle(peer): + } + }() + tp := &testPeer{ + app: app, + net: net, + cpeer: peer, } + var ( + genesis = server.handler.blockchain.Genesis() + head = server.handler.blockchain.CurrentHeader() + td = server.handler.blockchain.GetTd(head.Hash(), head.Number.Uint64()) + ) + forkID := forkid.NewID(server.handler.blockchain.Config(), genesis.Hash(), head.Number.Uint64()) + tp.handshakeWithServer(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash(), forkID) - 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() + // Ensure the connection is established or exits when any error occurs + for { + select { + case <-errCh: + return nil, nil, nil + default: + } + if atomic.LoadUint32(&peer.serving) == 1 { + break } - cIndexer.Close() - bIndexer.Close() + time.Sleep(50 * time.Millisecond) + } + closePeer := func() { + tp.cpeer.close() + tp.close() } - return server, teardown + return tp, closePeer, errCh } -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() +// testnetConfig wraps all the configurations for testing network. +type testnetConfig struct { + blocks int + protocol int + indexFn indexerCallback + ulcServers []string + ulcFraction int + simClock bool + connect bool + nopruning bool +} +func newClientServerEnv(t *testing.T, config testnetConfig) (*testServer, *testClient, func()) { + var ( + sdb = rawdb.NewMemoryDatabase() + cdb = rawdb.NewMemoryDatabase() + speers = newServerPeerSet() + ) var clock mclock.Clock = &mclock.System{} - if simClock { + if config.simClock { clock = &mclock.Simulated{} } - dist := newRequestDistributor(cPeers, clock) - rm := newRetrieveManager(cPeers, dist, nil) - odr := NewLesOdr(cdb, light.TestClientIndexerConfig, rm) + dist := newRequestDistributor(speers, clock) + rm := newRetrieveManager(speers, dist, func() time.Duration { return time.Millisecond * 500 }) + odr := NewLesOdr(cdb, light.TestClientIndexerConfig, speers, rm) - sindexers := testIndexers(sdb, nil, light.TestServerIndexerConfig) - cIndexers := testIndexers(cdb, odr, light.TestClientIndexerConfig) + sindexers := testIndexers(sdb, nil, light.TestServerIndexerConfig, true) + cIndexers := testIndexers(cdb, odr, light.TestClientIndexerConfig, config.nopruning) 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) + server, b, serverClose := newTestServerHandler(config.blocks, sindexers, sdb, clock) + client, clientClose := newTestClientHandler(b, odr, cIndexers, cdb, speers, config.ulcServers, config.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) + if config.indexFn != nil { + config.indexFn(scIndexer, sbIndexer, sbtIndexer) } var ( + err error speer, cpeer *testPeer - err1, err2 <-chan error ) - if connect { - cpeer, err1, speer, err2 = newTestPeerPair("peer", protocol, server, client) + if config.connect { + done := make(chan struct{}) + client.syncEnd = func(_ *types.Header) { close(done) } + cpeer, speer, err = newTestPeerPair("peer", config.protocol, server, client, false) + if err != nil { + t.Fatalf("Failed to connect testing peers %v", err) + } 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) + case <-done: + case <-time.After(10 * time.Second): + t.Fatal("test peer did not connect and sync within 3s") } } s := &testServer{ @@ -544,15 +655,28 @@ func newClientServerEnv(t *testing.T, blocks int, protocol int, callback indexer bloomTrieIndexer: cbtIndexer, } teardown := func() { - if connect { + if config.connect { speer.close() cpeer.close() + cpeer.cpeer.close() + speer.speer.close() } ccIndexer.Close() cbIndexer.Close() scIndexer.Close() sbIndexer.Close() + dist.close() + serverClose() b.Close() + clientClose() } return s, c, teardown } + +// NewFuzzerPeer creates a client peer for test purposes, and also returns +// a function to close the peer: this is needed to avoid goroutine leaks in the +// exec queue. +func NewFuzzerPeer(version int) (p *clientPeer, closer func()) { + p = newClientPeer(version, 0, p2p.NewPeer(enode.ID{}, "", nil), nil) + return p, func() { p.peerCommons.close() } +} diff --git a/les/txrelay.go b/les/txrelay.go index ebb60c5f..40a51fb7 100644 --- a/les/txrelay.go +++ b/les/txrelay.go @@ -18,100 +18,95 @@ package les import ( "context" + "math/rand" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" ) -type ltrInfo struct { - tx *types.Transaction - sentTo map[*peer]struct{} -} - type lesTxRelay struct { - txSent map[common.Hash]*ltrInfo + txSent map[common.Hash]*types.Transaction txPending map[common.Hash]struct{} - ps *peerSet - peerList []*peer + peerList []*serverPeer peerStartPos int - lock sync.RWMutex + lock sync.Mutex stop chan struct{} retriever *retrieveManager } -func newLesTxRelay(ps *peerSet, retriever *retrieveManager) *lesTxRelay { +func newLesTxRelay(ps *serverPeerSet, retriever *retrieveManager) *lesTxRelay { r := &lesTxRelay{ - txSent: make(map[common.Hash]*ltrInfo), + txSent: make(map[common.Hash]*types.Transaction), txPending: make(map[common.Hash]struct{}), - ps: ps, retriever: retriever, stop: make(chan struct{}), } - ps.notify(r) + ps.subscribe(r) return r } -func (self *lesTxRelay) Stop() { - close(self.stop) +func (ltrx *lesTxRelay) Stop() { + close(ltrx.stop) } -func (self *lesTxRelay) registerPeer(p *peer) { - self.lock.Lock() - defer self.lock.Unlock() +func (ltrx *lesTxRelay) registerPeer(p *serverPeer) { + ltrx.lock.Lock() + defer ltrx.lock.Unlock() - self.peerList = self.ps.AllPeers() + // Short circuit if the peer is announce only. + if p.onlyAnnounce { + return + } + ltrx.peerList = append(ltrx.peerList, p) } -func (self *lesTxRelay) unregisterPeer(p *peer) { - self.lock.Lock() - defer self.lock.Unlock() +func (ltrx *lesTxRelay) unregisterPeer(p *serverPeer) { + ltrx.lock.Lock() + defer ltrx.lock.Unlock() - self.peerList = self.ps.AllPeers() + for i, peer := range ltrx.peerList { + if peer == p { + // Remove from the peer list + ltrx.peerList = append(ltrx.peerList[:i], ltrx.peerList[i+1:]...) + return + } + } } -// 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) { - sendTo := make(map[*peer]types.Transactions) +// send sends a list of transactions to at most a given number of peers. +func (ltrx *lesTxRelay) send(txs types.Transactions, count int) { + sendTo := make(map[*serverPeer]types.Transactions) - self.peerStartPos++ // rotate the starting position of the peer list - if self.peerStartPos >= len(self.peerList) { - self.peerStartPos = 0 + ltrx.peerStartPos++ // rotate the starting position of the peer list + if ltrx.peerStartPos >= len(ltrx.peerList) { + ltrx.peerStartPos = 0 } for _, tx := range txs { hash := tx.Hash() - ltr, ok := self.txSent[hash] + _, ok := ltrx.txSent[hash] if !ok { - ltr = <rInfo{ - tx: tx, - sentTo: make(map[*peer]struct{}), - } - self.txSent[hash] = ltr - self.txPending[hash] = struct{}{} + ltrx.txSent[hash] = tx + ltrx.txPending[hash] = struct{}{} } - - if len(self.peerList) > 0 { + if len(ltrx.peerList) > 0 { cnt := count - pos := self.peerStartPos + pos := ltrx.peerStartPos for { - peer := self.peerList[pos] - if _, ok := ltr.sentTo[peer]; !ok { - sendTo[peer] = append(sendTo[peer], tx) - ltr.sentTo[peer] = struct{}{} - cnt-- - } + peer := ltrx.peerList[pos] + sendTo[peer] = append(sendTo[peer], tx) + cnt-- if cnt == 0 { break // sent it to the desired number of peers } pos++ - if pos == len(self.peerList) { + if pos == len(ltrx.peerList) { pos = 0 } - if pos == self.peerStartPos { + if pos == ltrx.peerStartPos { break // tried all available peers } } @@ -123,62 +118,62 @@ func (self *lesTxRelay) send(txs types.Transactions, count int) { ll := list enc, _ := rlp.EncodeToBytes(ll) - reqID := genReqID() + reqID := rand.Uint64() rq := &distReq{ getCost: func(dp distPeer) uint64 { - peer := dp.(*peer) - return peer.GetTxRelayCost(len(ll), len(enc)) + peer := dp.(*serverPeer) + return peer.getTxRelayCost(len(ll), len(enc)) }, canSend: func(dp distPeer) bool { - return !dp.(*peer).onlyAnnounce && dp.(*peer) == pp + return !dp.(*serverPeer).onlyAnnounce && dp.(*serverPeer) == pp }, request: func(dp distPeer) func() { - peer := dp.(*peer) - cost := peer.GetTxRelayCost(len(ll), len(enc)) + peer := dp.(*serverPeer) + cost := peer.getTxRelayCost(len(ll), len(enc)) peer.fcServer.QueuedRequest(reqID, cost) - return func() { peer.SendTxs(reqID, cost, enc) } + return func() { peer.sendTxs(reqID, len(ll), enc) } }, } - go self.retriever.retrieve(context.Background(), reqID, rq, func(p distPeer, msg *Msg) error { return nil }, self.stop) + go ltrx.retriever.retrieve(context.Background(), reqID, rq, func(p distPeer, msg *Msg) error { return nil }, ltrx.stop) } } -func (self *lesTxRelay) Send(txs types.Transactions) { - self.lock.Lock() - defer self.lock.Unlock() +func (ltrx *lesTxRelay) Send(txs types.Transactions) { + ltrx.lock.Lock() + defer ltrx.lock.Unlock() - self.send(txs, 3) + ltrx.send(txs, 3) } -func (self *lesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { - self.lock.Lock() - defer self.lock.Unlock() +func (ltrx *lesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { + ltrx.lock.Lock() + defer ltrx.lock.Unlock() for _, hash := range mined { - delete(self.txPending, hash) + delete(ltrx.txPending, hash) } for _, hash := range rollback { - self.txPending[hash] = struct{}{} + ltrx.txPending[hash] = struct{}{} } - if len(self.txPending) > 0 { - txs := make(types.Transactions, len(self.txPending)) + if len(ltrx.txPending) > 0 { + txs := make(types.Transactions, len(ltrx.txPending)) i := 0 - for hash := range self.txPending { - txs[i] = self.txSent[hash].tx + for hash := range ltrx.txPending { + txs[i] = ltrx.txSent[hash] i++ } - self.send(txs, 1) + ltrx.send(txs, 1) } } -func (self *lesTxRelay) Discard(hashes []common.Hash) { - self.lock.Lock() - defer self.lock.Unlock() +func (ltrx *lesTxRelay) Discard(hashes []common.Hash) { + ltrx.lock.Lock() + defer ltrx.lock.Unlock() for _, hash := range hashes { - delete(self.txSent, hash) - delete(self.txPending, hash) + delete(ltrx.txSent, hash) + delete(ltrx.txPending, hash) } } diff --git a/les/ulc.go b/les/ulc.go index 1ec4f634..b97217e7 100644 --- a/les/ulc.go +++ b/les/ulc.go @@ -19,8 +19,8 @@ package les import ( "errors" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" ) type ulc struct { diff --git a/les/ulc_test.go b/les/ulc_test.go index 038a3da1..9a29a24c 100644 --- a/les/ulc_test.go +++ b/les/ulc_test.go @@ -20,12 +20,13 @@ import ( "crypto/rand" "fmt" "net" + "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "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) } @@ -34,6 +35,19 @@ 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") + + // newTestLightPeer creates node with light sync mode + newTestLightPeer := func(t *testing.T, protocol int, ulcServers []string, ulcFraction int) (*testClient, func()) { + netconfig := testnetConfig{ + protocol: protocol, + ulcServers: ulcServers, + ulcFraction: ulcFraction, + nopruning: true, + } + _, c, teardown := newClientServerEnv(t, netconfig) + return c, teardown + } + var cases = []struct { height []int threshold int @@ -54,18 +68,18 @@ func testULCAnnounceThreshold(t *testing.T, protocol int) { ids []string ) for i := 0; i < len(testcase.height); i++ { - s, n, teardown := newServerPeer(t, 0, protocol) + s, n, teardown := newTestServerPeer(t, 0, protocol, nil) 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) + c, teardown := newTestLightPeer(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) + connect(servers[i].handler, nodes[i].ID(), c.handler, protocol, false) } for i := 0; i < len(servers); i++ { for j := 0; j < testcase.height[i]; j++ { @@ -86,15 +100,15 @@ func testULCAnnounceThreshold(t *testing.T, protocol int) { } } -func connect(server *serverHandler, serverId enode.ID, client *clientHandler, protocol int) (*peer, *peer, error) { +func connect(server *serverHandler, serverId enode.ID, client *clientHandler, protocol int, noInitAnnounce bool) (*serverPeer, *clientPeer, 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) + peer1 := newServerPeer(protocol, NetworkId, true, p2p.NewPeer(serverId, "", nil), net) // Mark server as trusted + peer2 := newClientPeer(protocol, NetworkId, p2p.NewPeer(id, "", nil), app) // Start the peerLight on a new thread errc1 := make(chan error, 1) @@ -110,23 +124,35 @@ func connect(server *serverHandler, serverId enode.ID, client *clientHandler, pr select { case <-client.closeCh: errc1 <- p2p.DiscQuitting - case errc1 <- client.handle(peer1): + case errc1 <- client.handle(peer1, noInitAnnounce): } }() - - 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) + // Ensure the connection is established or exits when any error occurs + for { + select { + case err := <-errc1: + return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) + case err := <-errc2: + return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) + default: + } + if atomic.LoadUint32(&peer1.serving) == 1 && atomic.LoadUint32(&peer2.serving) == 1 { + break + } + time.Sleep(50 * time.Millisecond) } 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) +// newTestServerPeer creates server peer. +func newTestServerPeer(t *testing.T, blocks int, protocol int, indexFn indexerCallback) (*testServer, *enode.Node, func()) { + netconfig := testnetConfig{ + blocks: blocks, + protocol: protocol, + indexFn: indexFn, + nopruning: true, + } + s, _, teardown := newClientServerEnv(t, netconfig) key, err := crypto.GenerateKey() if err != nil { t.Fatal("generate key err:", err) @@ -135,9 +161,3 @@ func newServerPeer(t *testing.T, blocks int, protocol int) (*testServer, *enode. 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/les/execqueue.go b/les/utils/exec_queue.go similarity index 69% rename from les/execqueue.go rename to les/utils/exec_queue.go index e0c88a99..5942b06e 100644 --- a/les/execqueue.go +++ b/les/utils/exec_queue.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,35 +14,35 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package les +package utils import "sync" -// execQueue implements a queue that executes function calls in a single thread, +// ExecQueue implements a queue that executes function calls in a single thread, // in the same order as they have been queued. -type execQueue struct { +type ExecQueue struct { mu sync.Mutex cond *sync.Cond funcs []func() closeWait chan struct{} } -// newExecQueue creates a new execution queue. -func newExecQueue(capacity int) *execQueue { - q := &execQueue{funcs: make([]func(), 0, capacity)} +// NewExecQueue creates a new execution Queue. +func NewExecQueue(capacity int) *ExecQueue { + q := &ExecQueue{funcs: make([]func(), 0, capacity)} q.cond = sync.NewCond(&q.mu) go q.loop() return q } -func (q *execQueue) loop() { +func (q *ExecQueue) loop() { for f := q.waitNext(false); f != nil; f = q.waitNext(true) { f() } close(q.closeWait) } -func (q *execQueue) waitNext(drop bool) (f func()) { +func (q *ExecQueue) waitNext(drop bool) (f func()) { q.mu.Lock() if drop && len(q.funcs) > 0 { // Remove the function that just executed. We do this here instead of when @@ -60,20 +60,20 @@ func (q *execQueue) waitNext(drop bool) (f func()) { return f } -func (q *execQueue) isClosed() bool { +func (q *ExecQueue) isClosed() bool { return q.closeWait != nil } -// canQueue returns true if more function calls can be added to the execution queue. -func (q *execQueue) canQueue() bool { +// CanQueue returns true if more function calls can be added to the execution Queue. +func (q *ExecQueue) CanQueue() bool { q.mu.Lock() ok := !q.isClosed() && len(q.funcs) < cap(q.funcs) q.mu.Unlock() return ok } -// queue adds a function call to the execution queue. Returns true if successful. -func (q *execQueue) queue(f func()) bool { +// Queue adds a function call to the execution Queue. Returns true if successful. +func (q *ExecQueue) Queue(f func()) bool { q.mu.Lock() ok := !q.isClosed() && len(q.funcs) < cap(q.funcs) if ok { @@ -84,16 +84,17 @@ func (q *execQueue) queue(f func()) bool { return ok } -// clear drops all queued functions -func (q *execQueue) clear() { +// 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() { +// Quit stops the exec Queue. +// +// Quit waits for the current execution to finish before returning. +func (q *ExecQueue) Quit() { q.mu.Lock() if !q.isClosed() { q.closeWait = make(chan struct{}) diff --git a/les/execqueue_test.go b/les/utils/exec_queue_test.go similarity index 83% rename from les/execqueue_test.go rename to les/utils/exec_queue_test.go index cd45b03f..98601c44 100644 --- a/les/execqueue_test.go +++ b/les/utils/exec_queue_test.go @@ -14,21 +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 les +package utils -import ( - "testing" -) +import "testing" func TestExecQueue(t *testing.T) { var ( N = 10000 - q = newExecQueue(N) + q = NewExecQueue(N) counter int execd = make(chan int) testexit = make(chan struct{}) ) - defer q.quit() + defer q.Quit() defer close(testexit) check := func(state string, wantOK bool) { @@ -40,11 +38,11 @@ func TestExecQueue(t *testing.T) { case <-testexit: } } - if q.canQueue() != wantOK { - t.Fatalf("canQueue() == %t for %s", !wantOK, state) + if q.CanQueue() != wantOK { + t.Fatalf("CanQueue() == %t for %s", !wantOK, state) } - if q.queue(qf) != wantOK { - t.Fatalf("canQueue() == %t for %s", !wantOK, state) + if q.Queue(qf) != wantOK { + t.Fatalf("Queue() == %t for %s", !wantOK, state) } } @@ -57,6 +55,6 @@ func TestExecQueue(t *testing.T) { t.Fatal("execution out of order") } } - q.quit() + q.Quit() check("closed queue", false) } diff --git a/les/utils/expiredvalue.go b/les/utils/expiredvalue.go new file mode 100644 index 00000000..3fd52616 --- /dev/null +++ b/les/utils/expiredvalue.go @@ -0,0 +1,270 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "math" + "sync" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +// ExpiredValue is a scalar value that is continuously expired (decreased +// exponentially) based on the provided logarithmic expiration offset value. +// +// The formula for value calculation is: base*2^(exp-logOffset). In order to +// simplify the calculation of ExpiredValue, its value is expressed in the form +// of an exponent with a base of 2. +// +// Also here is a trick to reduce a lot of calculations. In theory, when a value X +// decays over time and then a new value Y is added, the final result should be +// X*2^(exp-logOffset)+Y. However it's very hard to represent in memory. +// So the trick is using the idea of inflation instead of exponential decay. At this +// moment the temporary value becomes: X*2^exp+Y*2^logOffset_1, apply the exponential +// decay when we actually want to calculate the value. +// +// e.g. +// t0: V = 100 +// t1: add 30, inflationary value is: 100 + 30/0.3, 0.3 is the decay coefficient +// t2: get value, decay coefficient is 0.2 now, final result is: 200*0.2 = 40 +type ExpiredValue struct { + Base, Exp uint64 // rlp encoding works by default +} + +// ExpirationFactor is calculated from logOffset. 1 <= Factor < 2 and Factor*2^Exp +// describes the multiplier applicable for additions and the divider for readouts. +// If logOffset changes slowly then it saves some expensive operations to not calculate +// them for each addition and readout but cache this intermediate form for some time. +// It is also useful for structures where multiple values are expired with the same +// Expirer. +type ExpirationFactor struct { + Exp uint64 + Factor float64 +} + +// ExpFactor calculates ExpirationFactor based on logOffset +func ExpFactor(logOffset Fixed64) ExpirationFactor { + return ExpirationFactor{Exp: logOffset.ToUint64(), Factor: logOffset.Fraction().Pow2()} +} + +// Value calculates the expired value based on a floating point base and integer +// power-of-2 exponent. This function should be used by multi-value expired structures. +func (e ExpirationFactor) Value(base float64, exp uint64) float64 { + return base / e.Factor * math.Pow(2, float64(int64(exp-e.Exp))) +} + +// value calculates the value at the given moment. +func (e ExpiredValue) Value(logOffset Fixed64) uint64 { + offset := Uint64ToFixed64(e.Exp) - logOffset + return uint64(float64(e.Base) * offset.Pow2()) +} + +// add adds a signed value at the given moment +func (e *ExpiredValue) Add(amount int64, logOffset Fixed64) int64 { + integer, frac := logOffset.ToUint64(), logOffset.Fraction() + factor := frac.Pow2() + base := factor * float64(amount) + if integer < e.Exp { + base /= math.Pow(2, float64(e.Exp-integer)) + } + if integer > e.Exp { + e.Base >>= (integer - e.Exp) + e.Exp = integer + } + if base >= 0 || uint64(-base) <= e.Base { + // The conversion from negative float64 to + // uint64 is undefined in golang, and doesn't + // work with ARMv8. More details at: + // https://github.com/golang/go/issues/43047 + if base >= 0 { + e.Base += uint64(base) + } else { + e.Base -= uint64(-base) + } + return amount + } + net := int64(-float64(e.Base) / factor) + e.Base = 0 + return net +} + +// addExp adds another ExpiredValue +func (e *ExpiredValue) AddExp(a ExpiredValue) { + if e.Exp > a.Exp { + a.Base >>= (e.Exp - a.Exp) + } + if e.Exp < a.Exp { + e.Base >>= (a.Exp - e.Exp) + e.Exp = a.Exp + } + e.Base += a.Base +} + +// subExp subtracts another ExpiredValue +func (e *ExpiredValue) SubExp(a ExpiredValue) { + if e.Exp > a.Exp { + a.Base >>= (e.Exp - a.Exp) + } + if e.Exp < a.Exp { + e.Base >>= (a.Exp - e.Exp) + e.Exp = a.Exp + } + if e.Base > a.Base { + e.Base -= a.Base + } else { + e.Base = 0 + } +} + +// IsZero returns true if the value is zero +func (e *ExpiredValue) IsZero() bool { + return e.Base == 0 +} + +// LinearExpiredValue is very similar with the expiredValue which the value +// will continuously expired. But the different part is it's expired linearly. +type LinearExpiredValue struct { + Offset uint64 // The latest time offset + Val uint64 // The remaining value, can never be negative + Rate mclock.AbsTime `rlp:"-"` // Expiration rate(by nanosecond), will ignored by RLP +} + +// value calculates the value at the given moment. This function always has the +// assumption that the given timestamp shouldn't less than the recorded one. +func (e LinearExpiredValue) Value(now mclock.AbsTime) uint64 { + offset := uint64(now / e.Rate) + if e.Offset < offset { + diff := offset - e.Offset + if e.Val >= diff { + e.Val -= diff + } else { + e.Val = 0 + } + } + return e.Val +} + +// add adds a signed value at the given moment. This function always has the +// assumption that the given timestamp shouldn't less than the recorded one. +func (e *LinearExpiredValue) Add(amount int64, now mclock.AbsTime) uint64 { + offset := uint64(now / e.Rate) + if e.Offset < offset { + diff := offset - e.Offset + if e.Val >= diff { + e.Val -= diff + } else { + e.Val = 0 + } + e.Offset = offset + } + if amount < 0 && uint64(-amount) > e.Val { + e.Val = 0 + } else { + e.Val = uint64(int64(e.Val) + amount) + } + return e.Val +} + +// ValueExpirer controls value expiration rate +type ValueExpirer interface { + SetRate(now mclock.AbsTime, rate float64) + SetLogOffset(now mclock.AbsTime, logOffset Fixed64) + LogOffset(now mclock.AbsTime) Fixed64 +} + +// Expirer changes logOffset with a linear rate which can be changed during operation. +// It is not thread safe, if access by multiple goroutines is needed then it should be +// encapsulated into a locked structure. +// Note that if neither SetRate nor SetLogOffset are used during operation then LogOffset +// is thread safe. +type Expirer struct { + lock sync.RWMutex + logOffset Fixed64 + rate float64 + lastUpdate mclock.AbsTime +} + +// SetRate changes the expiration rate which is the inverse of the time constant in +// nanoseconds. +func (e *Expirer) SetRate(now mclock.AbsTime, rate float64) { + e.lock.Lock() + defer e.lock.Unlock() + + dt := now - e.lastUpdate + if dt > 0 { + e.logOffset += Fixed64(logToFixedFactor * float64(dt) * e.rate) + } + e.lastUpdate = now + e.rate = rate +} + +// SetLogOffset sets logOffset instantly. +func (e *Expirer) SetLogOffset(now mclock.AbsTime, logOffset Fixed64) { + e.lock.Lock() + defer e.lock.Unlock() + + e.lastUpdate = now + e.logOffset = logOffset +} + +// LogOffset returns the current logarithmic offset. +func (e *Expirer) LogOffset(now mclock.AbsTime) Fixed64 { + e.lock.RLock() + defer e.lock.RUnlock() + + dt := now - e.lastUpdate + if dt <= 0 { + return e.logOffset + } + return e.logOffset + Fixed64(logToFixedFactor*float64(dt)*e.rate) +} + +// fixedFactor is the fixed point multiplier factor used by Fixed64. +const fixedFactor = 0x1000000 + +// Fixed64 implements 64-bit fixed point arithmetic functions. +type Fixed64 int64 + +// Uint64ToFixed64 converts uint64 integer to Fixed64 format. +func Uint64ToFixed64(f uint64) Fixed64 { + return Fixed64(f * fixedFactor) +} + +// float64ToFixed64 converts float64 to Fixed64 format. +func Float64ToFixed64(f float64) Fixed64 { + return Fixed64(f * fixedFactor) +} + +// toUint64 converts Fixed64 format to uint64. +func (f64 Fixed64) ToUint64() uint64 { + return uint64(f64) / fixedFactor +} + +// fraction returns the fractional part of a Fixed64 value. +func (f64 Fixed64) Fraction() Fixed64 { + return f64 % fixedFactor +} + +var ( + logToFixedFactor = float64(fixedFactor) / math.Log(2) + fixedToLogFactor = math.Log(2) / float64(fixedFactor) +) + +// pow2Fixed returns the base 2 power of the fixed point value. +func (f64 Fixed64) Pow2() float64 { + return math.Exp(float64(f64) * fixedToLogFactor) +} diff --git a/les/utils/expiredvalue_test.go b/les/utils/expiredvalue_test.go new file mode 100644 index 00000000..1c751d8c --- /dev/null +++ b/les/utils/expiredvalue_test.go @@ -0,0 +1,195 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +func TestValueExpiration(t *testing.T) { + var cases = []struct { + input ExpiredValue + timeOffset Fixed64 + expect uint64 + }{ + {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 128}, + {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 64}, + {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(2), 32}, + {ExpiredValue{Base: 128, Exp: 2}, Uint64ToFixed64(2), 128}, + {ExpiredValue{Base: 128, Exp: 2}, Uint64ToFixed64(3), 64}, + } + for _, c := range cases { + if got := c.input.Value(c.timeOffset); got != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) + } + } +} + +func TestValueAddition(t *testing.T) { + var cases = []struct { + input ExpiredValue + addend int64 + timeOffset Fixed64 + expect uint64 + expectNet int64 + }{ + // Addition + {ExpiredValue{Base: 128, Exp: 0}, 128, Uint64ToFixed64(0), 256, 128}, + {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(0), 640, 128}, + + // Addition with offset + {ExpiredValue{Base: 128, Exp: 0}, 128, Uint64ToFixed64(1), 192, 128}, + {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(1), 384, 128}, + {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(3), 192, 128}, + + // Subtraction + {ExpiredValue{Base: 128, Exp: 0}, -64, Uint64ToFixed64(0), 64, -64}, + {ExpiredValue{Base: 128, Exp: 0}, -128, Uint64ToFixed64(0), 0, -128}, + {ExpiredValue{Base: 128, Exp: 0}, -192, Uint64ToFixed64(0), 0, -128}, + + // Subtraction with offset + {ExpiredValue{Base: 128, Exp: 0}, -64, Uint64ToFixed64(1), 0, -64}, + {ExpiredValue{Base: 128, Exp: 0}, -128, Uint64ToFixed64(1), 0, -64}, + {ExpiredValue{Base: 128, Exp: 2}, -128, Uint64ToFixed64(1), 128, -128}, + {ExpiredValue{Base: 128, Exp: 2}, -128, Uint64ToFixed64(2), 0, -128}, + } + for _, c := range cases { + if net := c.input.Add(c.addend, c.timeOffset); net != c.expectNet { + t.Fatalf("Net amount mismatch, want=%d, got=%d", c.expectNet, net) + } + if got := c.input.Value(c.timeOffset); got != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) + } + } +} + +func TestExpiredValueAddition(t *testing.T) { + var cases = []struct { + input ExpiredValue + another ExpiredValue + timeOffset Fixed64 + expect uint64 + }{ + {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 256}, + {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 384}, + {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 1}, Uint64ToFixed64(0), 384}, + {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 128}, + } + for _, c := range cases { + c.input.AddExp(c.another) + if got := c.input.Value(c.timeOffset); got != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) + } + } +} + +func TestExpiredValueSubtraction(t *testing.T) { + var cases = []struct { + input ExpiredValue + another ExpiredValue + timeOffset Fixed64 + expect uint64 + }{ + {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 0}, + {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 1}, Uint64ToFixed64(0), 0}, + {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 128}, + {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 64}, + } + for _, c := range cases { + c.input.SubExp(c.another) + if got := c.input.Value(c.timeOffset); got != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) + } + } +} + +func TestLinearExpiredValue(t *testing.T) { + var cases = []struct { + value LinearExpiredValue + now mclock.AbsTime + expect uint64 + }{ + {LinearExpiredValue{ + Offset: 0, + Val: 0, + Rate: mclock.AbsTime(1), + }, 0, 0}, + + {LinearExpiredValue{ + Offset: 1, + Val: 1, + Rate: mclock.AbsTime(1), + }, 0, 1}, + + {LinearExpiredValue{ + Offset: 1, + Val: 1, + Rate: mclock.AbsTime(1), + }, mclock.AbsTime(2), 0}, + + {LinearExpiredValue{ + Offset: 1, + Val: 1, + Rate: mclock.AbsTime(1), + }, mclock.AbsTime(3), 0}, + } + for _, c := range cases { + if value := c.value.Value(c.now); value != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, value) + } + } +} + +func TestLinearExpiredAddition(t *testing.T) { + var cases = []struct { + value LinearExpiredValue + amount int64 + now mclock.AbsTime + expect uint64 + }{ + {LinearExpiredValue{ + Offset: 0, + Val: 0, + Rate: mclock.AbsTime(1), + }, -1, 0, 0}, + + {LinearExpiredValue{ + Offset: 1, + Val: 1, + Rate: mclock.AbsTime(1), + }, -1, 0, 0}, + + {LinearExpiredValue{ + Offset: 1, + Val: 2, + Rate: mclock.AbsTime(1), + }, -1, mclock.AbsTime(2), 0}, + + {LinearExpiredValue{ + Offset: 1, + Val: 2, + Rate: mclock.AbsTime(1), + }, -2, mclock.AbsTime(2), 0}, + } + for _, c := range cases { + if value := c.value.Add(c.amount, c.now); value != c.expect { + t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, value) + } + } +} diff --git a/les/utils/limiter.go b/les/utils/limiter.go new file mode 100644 index 00000000..84d186ef --- /dev/null +++ b/les/utils/limiter.go @@ -0,0 +1,405 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "sort" + "sync" + + "github.com/ethereum/go-ethereum/p2p/enode" +) + +const maxSelectionWeight = 1000000000 // maximum selection weight of each individual node/address group + +// Limiter protects a network request serving mechanism from denial-of-service attacks. +// It limits the total amount of resources used for serving requests while ensuring that +// the most valuable connections always have a reasonable chance of being served. +type Limiter struct { + lock sync.Mutex + cond *sync.Cond + quit bool + + nodes map[enode.ID]*nodeQueue + addresses map[string]*addressGroup + addressSelect, valueSelect *WeightedRandomSelect + maxValue float64 + maxCost, sumCost, sumCostLimit uint + selectAddressNext bool +} + +// nodeQueue represents queued requests coming from a single node ID +type nodeQueue struct { + queue []request // always nil if penaltyCost != 0 + id enode.ID + address string + value float64 + flatWeight, valueWeight uint64 // current selection weights in the address/value selectors + sumCost uint // summed cost of requests queued by the node + penaltyCost uint // cumulative cost of dropped requests since last processed request + groupIndex int +} + +// addressGroup is a group of node IDs that have sent their last requests from the same +// network address +type addressGroup struct { + nodes []*nodeQueue + nodeSelect *WeightedRandomSelect + sumFlatWeight, groupWeight uint64 +} + +// request represents an incoming request scheduled for processing +type request struct { + process chan chan struct{} + cost uint +} + +// flatWeight distributes weights equally between each active network address +func flatWeight(item interface{}) uint64 { return item.(*nodeQueue).flatWeight } + +// add adds the node queue to the address group. It is the caller's responsibility to +// add the address group to the address map and the address selector if it wasn't +// there before. +func (ag *addressGroup) add(nq *nodeQueue) { + if nq.groupIndex != -1 { + panic("added node queue is already in an address group") + } + l := len(ag.nodes) + nq.groupIndex = l + ag.nodes = append(ag.nodes, nq) + ag.sumFlatWeight += nq.flatWeight + ag.groupWeight = ag.sumFlatWeight / uint64(l+1) + ag.nodeSelect.Update(ag.nodes[l]) +} + +// update updates the selection weight of the node queue inside the address group. +// It is the caller's responsibility to update the group's selection weight in the +// address selector. +func (ag *addressGroup) update(nq *nodeQueue, weight uint64) { + if nq.groupIndex == -1 || nq.groupIndex >= len(ag.nodes) || ag.nodes[nq.groupIndex] != nq { + panic("updated node queue is not in this address group") + } + ag.sumFlatWeight += weight - nq.flatWeight + nq.flatWeight = weight + ag.groupWeight = ag.sumFlatWeight / uint64(len(ag.nodes)) + ag.nodeSelect.Update(nq) +} + +// remove removes the node queue from the address group. It is the caller's responsibility +// to remove the address group from the address map if it is empty. +func (ag *addressGroup) remove(nq *nodeQueue) { + if nq.groupIndex == -1 || nq.groupIndex >= len(ag.nodes) || ag.nodes[nq.groupIndex] != nq { + panic("removed node queue is not in this address group") + } + + l := len(ag.nodes) - 1 + if nq.groupIndex != l { + ag.nodes[nq.groupIndex] = ag.nodes[l] + ag.nodes[nq.groupIndex].groupIndex = nq.groupIndex + } + nq.groupIndex = -1 + ag.nodes = ag.nodes[:l] + ag.sumFlatWeight -= nq.flatWeight + if l >= 1 { + ag.groupWeight = ag.sumFlatWeight / uint64(l) + } else { + ag.groupWeight = 0 + } + ag.nodeSelect.Remove(nq) +} + +// choose selects one of the node queues belonging to the address group +func (ag *addressGroup) choose() *nodeQueue { + return ag.nodeSelect.Choose().(*nodeQueue) +} + +// NewLimiter creates a new Limiter +func NewLimiter(sumCostLimit uint) *Limiter { + l := &Limiter{ + addressSelect: NewWeightedRandomSelect(func(item interface{}) uint64 { return item.(*addressGroup).groupWeight }), + valueSelect: NewWeightedRandomSelect(func(item interface{}) uint64 { return item.(*nodeQueue).valueWeight }), + nodes: make(map[enode.ID]*nodeQueue), + addresses: make(map[string]*addressGroup), + sumCostLimit: sumCostLimit, + } + l.cond = sync.NewCond(&l.lock) + go l.processLoop() + return l +} + +// selectionWeights calculates the selection weights of a node for both the address and +// the value selector. The selection weight depends on the next request cost or the +// summed cost of recently dropped requests. +func (l *Limiter) selectionWeights(reqCost uint, value float64) (flatWeight, valueWeight uint64) { + if value > l.maxValue { + l.maxValue = value + } + if value > 0 { + // normalize value to <= 1 + value /= l.maxValue + } + if reqCost > l.maxCost { + l.maxCost = reqCost + } + relCost := float64(reqCost) / float64(l.maxCost) + var f float64 + if relCost <= 0.001 { + f = 1 + } else { + f = 0.001 / relCost + } + f *= maxSelectionWeight + flatWeight, valueWeight = uint64(f), uint64(f*value) + if flatWeight == 0 { + flatWeight = 1 + } + return +} + +// Add adds a new request to the node queue belonging to the given id. Value belongs +// to the requesting node. A higher value gives the request a higher chance of being +// served quickly in case of heavy load or a DDoS attack. Cost is a rough estimate +// of the serving cost of the request. A lower cost also gives the request a +// better chance. +func (l *Limiter) Add(id enode.ID, address string, value float64, reqCost uint) chan chan struct{} { + l.lock.Lock() + defer l.lock.Unlock() + + process := make(chan chan struct{}, 1) + if l.quit { + close(process) + return process + } + if reqCost == 0 { + reqCost = 1 + } + if nq, ok := l.nodes[id]; ok { + if nq.queue != nil { + nq.queue = append(nq.queue, request{process, reqCost}) + nq.sumCost += reqCost + nq.value = value + if address != nq.address { + // known id sending request from a new address, move to different address group + l.removeFromGroup(nq) + l.addToGroup(nq, address) + } + } else { + // already waiting on a penalty, just add to the penalty cost and drop the request + nq.penaltyCost += reqCost + l.update(nq) + close(process) + return process + } + } else { + nq := &nodeQueue{ + queue: []request{{process, reqCost}}, + id: id, + value: value, + sumCost: reqCost, + groupIndex: -1, + } + nq.flatWeight, nq.valueWeight = l.selectionWeights(reqCost, value) + if len(l.nodes) == 0 { + l.cond.Signal() + } + l.nodes[id] = nq + if nq.valueWeight != 0 { + l.valueSelect.Update(nq) + } + l.addToGroup(nq, address) + } + l.sumCost += reqCost + if l.sumCost > l.sumCostLimit { + l.dropRequests() + } + return process +} + +// update updates the selection weights of the node queue +func (l *Limiter) update(nq *nodeQueue) { + var cost uint + if nq.queue != nil { + cost = nq.queue[0].cost + } else { + cost = nq.penaltyCost + } + flatWeight, valueWeight := l.selectionWeights(cost, nq.value) + ag := l.addresses[nq.address] + ag.update(nq, flatWeight) + l.addressSelect.Update(ag) + nq.valueWeight = valueWeight + l.valueSelect.Update(nq) +} + +// addToGroup adds the node queue to the given address group. The group is created if +// it does not exist yet. +func (l *Limiter) addToGroup(nq *nodeQueue, address string) { + nq.address = address + ag := l.addresses[address] + if ag == nil { + ag = &addressGroup{nodeSelect: NewWeightedRandomSelect(flatWeight)} + l.addresses[address] = ag + } + ag.add(nq) + l.addressSelect.Update(ag) +} + +// removeFromGroup removes the node queue from its address group +func (l *Limiter) removeFromGroup(nq *nodeQueue) { + ag := l.addresses[nq.address] + ag.remove(nq) + if len(ag.nodes) == 0 { + delete(l.addresses, nq.address) + } + l.addressSelect.Update(ag) +} + +// remove removes the node queue from its address group, the nodes map and the value +// selector +func (l *Limiter) remove(nq *nodeQueue) { + l.removeFromGroup(nq) + if nq.valueWeight != 0 { + l.valueSelect.Remove(nq) + } + delete(l.nodes, nq.id) +} + +// choose selects the next node queue to process. +func (l *Limiter) choose() *nodeQueue { + if l.valueSelect.IsEmpty() || l.selectAddressNext { + if ag, ok := l.addressSelect.Choose().(*addressGroup); ok { + l.selectAddressNext = false + return ag.choose() + } + } + nq, _ := l.valueSelect.Choose().(*nodeQueue) + l.selectAddressNext = true + return nq +} + +// processLoop processes requests sequentially +func (l *Limiter) processLoop() { + l.lock.Lock() + defer l.lock.Unlock() + + for { + if l.quit { + for _, nq := range l.nodes { + for _, request := range nq.queue { + close(request.process) + } + } + return + } + nq := l.choose() + if nq == nil { + l.cond.Wait() + continue + } + if nq.queue != nil { + request := nq.queue[0] + nq.queue = nq.queue[1:] + nq.sumCost -= request.cost + l.sumCost -= request.cost + l.lock.Unlock() + ch := make(chan struct{}) + request.process <- ch + <-ch + l.lock.Lock() + if len(nq.queue) > 0 { + l.update(nq) + } else { + l.remove(nq) + } + } else { + // penalized queue removed, next request will be added to a clean queue + l.remove(nq) + } + } +} + +// Stop stops the processing loop. All queued and future requests are rejected. +func (l *Limiter) Stop() { + l.lock.Lock() + defer l.lock.Unlock() + + l.quit = true + l.cond.Signal() +} + +type ( + dropList []dropListItem + dropListItem struct { + nq *nodeQueue + priority float64 + } +) + +func (l dropList) Len() int { + return len(l) +} + +func (l dropList) Less(i, j int) bool { + return l[i].priority < l[j].priority +} + +func (l dropList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + +// dropRequests selects the nodes with the highest queued request cost to selection +// weight ratio and drops their queued request. The empty node queues stay in the +// selectors with a low selection weight in order to penalize these nodes. +func (l *Limiter) dropRequests() { + var ( + sumValue float64 + list dropList + ) + for _, nq := range l.nodes { + sumValue += nq.value + } + for _, nq := range l.nodes { + if nq.sumCost == 0 { + continue + } + w := 1 / float64(len(l.addresses)*len(l.addresses[nq.address].nodes)) + if sumValue > 0 { + w += nq.value / sumValue + } + list = append(list, dropListItem{ + nq: nq, + priority: w / float64(nq.sumCost), + }) + } + sort.Sort(list) + for _, item := range list { + for _, request := range item.nq.queue { + close(request.process) + } + // make the queue penalized; no more requests are accepted until the node is + // selected based on the penalty cost which is the cumulative cost of all dropped + // requests. This ensures that sending excess requests is always penalized + // and incentivizes the sender to stop for a while if no replies are received. + item.nq.queue = nil + item.nq.penaltyCost = item.nq.sumCost + l.sumCost -= item.nq.sumCost // penalty costs are not counted in sumCost + item.nq.sumCost = 0 + l.update(item.nq) + if l.sumCost <= l.sumCostLimit/2 { + return + } + } +} diff --git a/les/utils/limiter_test.go b/les/utils/limiter_test.go new file mode 100644 index 00000000..3fbdc60d --- /dev/null +++ b/les/utils/limiter_test.go @@ -0,0 +1,206 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "math/rand" + "testing" + + "github.com/ethereum/go-ethereum/p2p/enode" +) + +const ( + ltTolerance = 0.03 + ltRounds = 7 +) + +type ( + ltNode struct { + addr, id int + value, exp float64 + cost uint + reqRate float64 + reqMax, runCount int + lastTotalCost uint + + served, dropped int + } + + ltResult struct { + node *ltNode + ch chan struct{} + } + + limTest struct { + limiter *Limiter + results chan ltResult + runCount int + expCost, totalCost uint + } +) + +func (lt *limTest) request(n *ltNode) { + var ( + address string + id enode.ID + ) + if n.addr >= 0 { + address = string([]byte{byte(n.addr)}) + } else { + var b [32]byte + rand.Read(b[:]) + address = string(b[:]) + } + if n.id >= 0 { + id = enode.ID{byte(n.id)} + } else { + rand.Read(id[:]) + } + lt.runCount++ + n.runCount++ + cch := lt.limiter.Add(id, address, n.value, n.cost) + go func() { + lt.results <- ltResult{n, <-cch} + }() +} + +func (lt *limTest) moreRequests(n *ltNode) { + maxStart := int(float64(lt.totalCost-n.lastTotalCost) * n.reqRate) + if maxStart != 0 { + n.lastTotalCost = lt.totalCost + } + for n.reqMax > n.runCount && maxStart > 0 { + lt.request(n) + maxStart-- + } +} + +func (lt *limTest) process() { + res := <-lt.results + lt.runCount-- + res.node.runCount-- + if res.ch != nil { + res.node.served++ + if res.node.exp != 0 { + lt.expCost += res.node.cost + } + lt.totalCost += res.node.cost + close(res.ch) + } else { + res.node.dropped++ + } +} + +func TestLimiter(t *testing.T) { + limTests := [][]*ltNode{ + { // one id from an individual address and two ids from a shared address + {addr: 0, id: 0, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.5}, + {addr: 1, id: 1, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, + {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, + }, + { // varying request costs + {addr: 0, id: 0, value: 0, cost: 10, reqRate: 0.2, reqMax: 1, exp: 0.5}, + {addr: 1, id: 1, value: 0, cost: 3, reqRate: 0.5, reqMax: 1, exp: 0.25}, + {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, + }, + { // different request rate + {addr: 0, id: 0, value: 0, cost: 1, reqRate: 2, reqMax: 2, exp: 0.5}, + {addr: 1, id: 1, value: 0, cost: 1, reqRate: 10, reqMax: 10, exp: 0.25}, + {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, + }, + { // adding value + {addr: 0, id: 0, value: 3, cost: 1, reqRate: 1, reqMax: 1, exp: (0.5 + 0.3) / 2}, + {addr: 1, id: 1, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25 / 2}, + {addr: 1, id: 2, value: 7, cost: 1, reqRate: 1, reqMax: 1, exp: (0.25 + 0.7) / 2}, + }, + { // DoS attack from a single address with a single id + {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 3, id: 3, value: 0, cost: 1, reqRate: 10, reqMax: 1000000000, exp: 0}, + }, + { // DoS attack from a single address with different ids + {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 3, id: -1, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, + }, + { // DDoS attack from different addresses with a single id + {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: -1, id: 3, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, + }, + { // DDoS attack from different addresses with different ids + {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, + {addr: -1, id: -1, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, + }, + } + + lt := &limTest{ + limiter: NewLimiter(100), + results: make(chan ltResult), + } + for _, test := range limTests { + lt.expCost, lt.totalCost = 0, 0 + iterCount := 10000 + for j := 0; j < ltRounds; j++ { + // try to reach expected target range in multiple rounds with increasing iteration counts + last := j == ltRounds-1 + for _, n := range test { + lt.request(n) + } + for i := 0; i < iterCount; i++ { + lt.process() + for _, n := range test { + lt.moreRequests(n) + } + } + for lt.runCount > 0 { + lt.process() + } + if spamRatio := 1 - float64(lt.expCost)/float64(lt.totalCost); spamRatio > 0.5*(1+ltTolerance) { + t.Errorf("Spam ratio too high (%f)", spamRatio) + } + fail, success := false, true + for _, n := range test { + if n.exp != 0 { + if n.dropped > 0 { + t.Errorf("Dropped %d requests of non-spam node", n.dropped) + fail = true + } + r := float64(n.served) * float64(n.cost) / float64(lt.expCost) + if r < n.exp*(1-ltTolerance) || r > n.exp*(1+ltTolerance) { + if last { + // print error only if the target is still not reached in the last round + t.Errorf("Request ratio (%f) does not match expected value (%f)", r, n.exp) + } + success = false + } + } + } + if fail || success { + break + } + // neither failed nor succeeded; try more iterations to reach probability targets + iterCount *= 2 + } + } + lt.limiter.Stop() +} diff --git a/les/utils/timeutils.go b/les/utils/timeutils.go new file mode 100644 index 00000000..62a4285d --- /dev/null +++ b/les/utils/timeutils.go @@ -0,0 +1,69 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +type UpdateTimer struct { + clock mclock.Clock + lock sync.Mutex + last mclock.AbsTime + threshold time.Duration +} + +func NewUpdateTimer(clock mclock.Clock, threshold time.Duration) *UpdateTimer { + // We don't accept the update threshold less than 0. + if threshold < 0 { + return nil + } + // Don't panic for lazy users + if clock == nil { + clock = mclock.System{} + } + return &UpdateTimer{ + clock: clock, + last: clock.Now(), + threshold: threshold, + } +} + +func (t *UpdateTimer) Update(callback func(diff time.Duration) bool) bool { + return t.UpdateAt(t.clock.Now(), callback) +} + +func (t *UpdateTimer) UpdateAt(at mclock.AbsTime, callback func(diff time.Duration) bool) bool { + t.lock.Lock() + defer t.lock.Unlock() + + diff := time.Duration(at - t.last) + if diff < 0 { + diff = 0 + } + if diff < t.threshold { + return false + } + if callback(diff) { + t.last = at + return true + } + return false +} diff --git a/les/utils/timeutils_test.go b/les/utils/timeutils_test.go new file mode 100644 index 00000000..b219d043 --- /dev/null +++ b/les/utils/timeutils_test.go @@ -0,0 +1,47 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +func TestUpdateTimer(t *testing.T) { + timer := NewUpdateTimer(mclock.System{}, -1) + if timer != nil { + t.Fatalf("Create update timer with negative threshold") + } + sim := &mclock.Simulated{} + timer = NewUpdateTimer(sim, time.Second) + if updated := timer.Update(func(diff time.Duration) bool { return true }); updated { + t.Fatalf("Update the clock without reaching the threshold") + } + sim.Run(time.Second) + if updated := timer.Update(func(diff time.Duration) bool { return true }); !updated { + t.Fatalf("Doesn't update the clock when reaching the threshold") + } + if updated := timer.UpdateAt(sim.Now().Add(time.Second), func(diff time.Duration) bool { return true }); !updated { + t.Fatalf("Doesn't update the clock when reaching the threshold") + } + timer = NewUpdateTimer(sim, 0) + if updated := timer.Update(func(diff time.Duration) bool { return true }); !updated { + t.Fatalf("Doesn't update the clock without threshold limitaion") + } +} diff --git a/les/randselect.go b/les/utils/weighted_select.go similarity index 60% rename from les/randselect.go rename to les/utils/weighted_select.go index 8efe0c94..486b0082 100644 --- a/les/randselect.go +++ b/les/utils/weighted_select.go @@ -14,43 +14,57 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package les +package utils import ( + "math" "math/rand" -) -// wrsItem interface should be implemented by any entries that are to be selected from -// a weightedRandomSelect set. Note that recalculating monotonously decreasing item -// weights on-demand (without constantly calling update) is allowed -type wrsItem interface { - Weight() int64 -} + "github.com/ethereum/go-ethereum/log" +) -// weightedRandomSelect is capable of weighted random selection from a set of items -type weightedRandomSelect struct { - root *wrsNode - idx map[wrsItem]int -} +type ( + // WeightedRandomSelect is capable of weighted random selection from a set of items + WeightedRandomSelect struct { + root *wrsNode + idx map[WrsItem]int + wfn WeightFn + } + WrsItem interface{} + WeightFn func(interface{}) uint64 +) -// newWeightedRandomSelect returns a new weightedRandomSelect structure -func newWeightedRandomSelect() *weightedRandomSelect { - return &weightedRandomSelect{root: &wrsNode{maxItems: wrsBranches}, idx: make(map[wrsItem]int)} +// NewWeightedRandomSelect returns a new WeightedRandomSelect structure +func NewWeightedRandomSelect(wfn WeightFn) *WeightedRandomSelect { + return &WeightedRandomSelect{root: &wrsNode{maxItems: wrsBranches}, idx: make(map[WrsItem]int), wfn: wfn} } -// update updates an item's weight, adds it if it was non-existent or removes it if +// Update updates an item's weight, adds it if it was non-existent or removes it if // the new weight is zero. Note that explicitly updating decreasing weights is not necessary. -func (w *weightedRandomSelect) update(item wrsItem) { - w.setWeight(item, item.Weight()) +func (w *WeightedRandomSelect) Update(item WrsItem) { + w.setWeight(item, w.wfn(item)) } -// remove removes an item from the set -func (w *weightedRandomSelect) remove(item wrsItem) { +// Remove removes an item from the set +func (w *WeightedRandomSelect) Remove(item WrsItem) { w.setWeight(item, 0) } +// IsEmpty returns true if the set is empty +func (w *WeightedRandomSelect) IsEmpty() bool { + return w.root.sumCost == 0 +} + // setWeight sets an item's weight to a specific value (removes it if zero) -func (w *weightedRandomSelect) setWeight(item wrsItem, weight int64) { +func (w *WeightedRandomSelect) setWeight(item WrsItem, weight uint64) { + if weight > math.MaxInt64-w.root.sumCost { + // old weight is still included in sumCost, remove and check again + w.setWeight(item, 0) + if weight > math.MaxInt64-w.root.sumCost { + log.Error("WeightedRandomSelect overflow", "sumCost", w.root.sumCost, "new weight", weight) + weight = math.MaxInt64 - w.root.sumCost + } + } idx, ok := w.idx[item] if ok { w.root.setWeight(idx, weight) @@ -61,9 +75,9 @@ func (w *weightedRandomSelect) setWeight(item wrsItem, weight int64) { if weight != 0 { if w.root.itemCnt == w.root.maxItems { // add a new level - newRoot := &wrsNode{sumWeight: w.root.sumWeight, itemCnt: w.root.itemCnt, level: w.root.level + 1, maxItems: w.root.maxItems * wrsBranches} + newRoot := &wrsNode{sumCost: w.root.sumCost, itemCnt: w.root.itemCnt, level: w.root.level + 1, maxItems: w.root.maxItems * wrsBranches} newRoot.items[0] = w.root - newRoot.weights[0] = w.root.sumWeight + newRoot.weights[0] = w.root.sumCost w.root = newRoot } w.idx[item] = w.root.insert(item, weight) @@ -71,22 +85,22 @@ func (w *weightedRandomSelect) setWeight(item wrsItem, weight int64) { } } -// choose randomly selects an item from the set, with a chance proportional to its +// Choose randomly selects an item from the set, with a chance proportional to its // current weight. If the weight of the chosen element has been decreased since the // last stored value, returns it with a newWeight/oldWeight chance, otherwise just // updates its weight and selects another one -func (w *weightedRandomSelect) choose() wrsItem { +func (w *WeightedRandomSelect) Choose() WrsItem { for { - if w.root.sumWeight == 0 { + if w.root.sumCost == 0 { return nil } - val := rand.Int63n(w.root.sumWeight) + val := uint64(rand.Int63n(int64(w.root.sumCost))) choice, lastWeight := w.root.choose(val) - weight := choice.Weight() + weight := w.wfn(choice) if weight != lastWeight { w.setWeight(choice, weight) } - if weight >= lastWeight || rand.Int63n(lastWeight) < weight { + if weight >= lastWeight || uint64(rand.Int63n(int64(lastWeight))) < weight { return choice } } @@ -94,16 +108,16 @@ func (w *weightedRandomSelect) choose() wrsItem { const wrsBranches = 8 // max number of branches in the wrsNode tree -// wrsNode is a node of a tree structure that can store wrsItems or further wrsNodes. +// wrsNode is a node of a tree structure that can store WrsItems or further wrsNodes. type wrsNode struct { items [wrsBranches]interface{} - weights [wrsBranches]int64 - sumWeight int64 + weights [wrsBranches]uint64 + sumCost uint64 level, itemCnt, maxItems int } // insert recursively inserts a new item to the tree and returns the item index -func (n *wrsNode) insert(item wrsItem, weight int64) int { +func (n *wrsNode) insert(item WrsItem, weight uint64) int { branch := 0 for n.items[branch] != nil && (n.level == 0 || n.items[branch].(*wrsNode).itemCnt == n.items[branch].(*wrsNode).maxItems) { branch++ @@ -112,7 +126,7 @@ func (n *wrsNode) insert(item wrsItem, weight int64) int { } } n.itemCnt++ - n.sumWeight += weight + n.sumCost += weight n.weights[branch] += weight if n.level == 0 { n.items[branch] = item @@ -131,12 +145,12 @@ func (n *wrsNode) insert(item wrsItem, weight int64) int { // setWeight updates the weight of a certain item (which should exist) and returns // the change of the last weight value stored in the tree -func (n *wrsNode) setWeight(idx int, weight int64) int64 { +func (n *wrsNode) setWeight(idx int, weight uint64) uint64 { if n.level == 0 { oldWeight := n.weights[idx] n.weights[idx] = weight diff := weight - oldWeight - n.sumWeight += diff + n.sumCost += diff if weight == 0 { n.items[idx] = nil n.itemCnt-- @@ -147,7 +161,7 @@ func (n *wrsNode) setWeight(idx int, weight int64) int64 { branch := idx / branchItems diff := n.items[branch].(*wrsNode).setWeight(idx-branch*branchItems, weight) n.weights[branch] += diff - n.sumWeight += diff + n.sumCost += diff if weight == 0 { n.itemCnt-- } @@ -155,11 +169,11 @@ func (n *wrsNode) setWeight(idx int, weight int64) int64 { } // choose recursively selects an item from the tree and returns it along with its weight -func (n *wrsNode) choose(val int64) (wrsItem, int64) { +func (n *wrsNode) choose(val uint64) (WrsItem, uint64) { for i, w := range n.weights { if val < w { if n.level == 0 { - return n.items[i].(wrsItem), n.weights[i] + return n.items[i].(WrsItem), n.weights[i] } return n.items[i].(*wrsNode).choose(val) } diff --git a/les/randselect_test.go b/les/utils/weighted_select_test.go similarity index 87% rename from les/randselect_test.go rename to les/utils/weighted_select_test.go index 9ae7726d..3e1c0ad9 100644 --- a/les/randselect_test.go +++ b/les/utils/weighted_select_test.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 les +package utils import ( "math/rand" @@ -26,25 +26,26 @@ type testWrsItem struct { widx *int } -func (t *testWrsItem) Weight() int64 { +func testWeight(i interface{}) uint64 { + t := i.(*testWrsItem) w := *t.widx if w == -1 || w == t.idx { - return int64(t.idx + 1) + return uint64(t.idx + 1) } return 0 } func TestWeightedRandomSelect(t *testing.T) { testFn := func(cnt int) { - s := newWeightedRandomSelect() + s := NewWeightedRandomSelect(testWeight) w := -1 list := make([]testWrsItem, cnt) for i := range list { list[i] = testWrsItem{idx: i, widx: &w} - s.update(&list[i]) + s.Update(&list[i]) } w = rand.Intn(cnt) - c := s.choose() + c := s.Choose() if c == nil { t.Errorf("expected item, got nil") } else { @@ -53,7 +54,7 @@ func TestWeightedRandomSelect(t *testing.T) { } } w = -2 - if s.choose() != nil { + if s.Choose() != nil { t.Errorf("expected nil, got item") } } diff --git a/les/vflux/client/api.go b/les/vflux/client/api.go new file mode 100644 index 00000000..135273ef --- /dev/null +++ b/les/vflux/client/api.go @@ -0,0 +1,107 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// PrivateClientAPI implements the vflux client side API +type PrivateClientAPI struct { + vt *ValueTracker +} + +// NewPrivateClientAPI creates a PrivateClientAPI +func NewPrivateClientAPI(vt *ValueTracker) *PrivateClientAPI { + return &PrivateClientAPI{vt} +} + +// parseNodeStr converts either an enode address or a plain hex node id to enode.ID +func parseNodeStr(nodeStr string) (enode.ID, error) { + if id, err := enode.ParseID(nodeStr); err == nil { + return id, nil + } + if node, err := enode.Parse(enode.ValidSchemes, nodeStr); err == nil { + return node.ID(), nil + } else { + return enode.ID{}, err + } +} + +// RequestStats returns the current contents of the reference request basket, with +// request values meaning average per request rather than total. +func (api *PrivateClientAPI) RequestStats() []RequestStatsItem { + return api.vt.RequestStats() +} + +// Distribution returns a distribution as a series of (X, Y) chart coordinates, +// where the X axis is the response time in seconds while the Y axis is the amount of +// service value received with a response time close to the X coordinate. +// The distribution is optionally normalized to a sum of 1. +// If nodeStr == "" then the global distribution is returned, otherwise the individual +// distribution of the specified server node. +func (api *PrivateClientAPI) Distribution(nodeStr string, normalized bool) (RtDistribution, error) { + var expFactor utils.ExpirationFactor + if !normalized { + expFactor = utils.ExpFactor(api.vt.StatsExpirer().LogOffset(mclock.Now())) + } + if nodeStr == "" { + return api.vt.RtStats().Distribution(normalized, expFactor), nil + } + if id, err := parseNodeStr(nodeStr); err == nil { + return api.vt.GetNode(id).RtStats().Distribution(normalized, expFactor), nil + } else { + return RtDistribution{}, err + } +} + +// Timeout suggests a timeout value based on either the global distribution or the +// distribution of the specified node. The parameter is the desired rate of timeouts +// assuming a similar distribution in the future. +// Note that the actual timeout should have a sensible minimum bound so that operating +// under ideal working conditions for a long time (for example, using a local server +// with very low response times) will not make it very hard for the system to accommodate +// longer response times in the future. +func (api *PrivateClientAPI) Timeout(nodeStr string, failRate float64) (float64, error) { + if nodeStr == "" { + return float64(api.vt.RtStats().Timeout(failRate)) / float64(time.Second), nil + } + if id, err := parseNodeStr(nodeStr); err == nil { + return float64(api.vt.GetNode(id).RtStats().Timeout(failRate)) / float64(time.Second), nil + } else { + return 0, err + } +} + +// Value calculates the total service value provided either globally or by the specified +// server node, using a weight function based on the given timeout. +func (api *PrivateClientAPI) Value(nodeStr string, timeout float64) (float64, error) { + wt := TimeoutWeights(time.Duration(timeout * float64(time.Second))) + expFactor := utils.ExpFactor(api.vt.StatsExpirer().LogOffset(mclock.Now())) + if nodeStr == "" { + return api.vt.RtStats().Value(wt, expFactor), nil + } + if id, err := parseNodeStr(nodeStr); err == nil { + return api.vt.GetNode(id).RtStats().Value(wt, expFactor), nil + } else { + return 0, err + } +} diff --git a/les/vflux/client/fillset.go b/les/vflux/client/fillset.go new file mode 100644 index 00000000..0da850bc --- /dev/null +++ b/les/vflux/client/fillset.go @@ -0,0 +1,107 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "sync" + + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +// FillSet tries to read nodes from an input iterator and add them to a node set by +// setting the specified node state flag(s) until the size of the set reaches the target. +// Note that other mechanisms (like other FillSet instances reading from different inputs) +// can also set the same flag(s) and FillSet will always care about the total number of +// nodes having those flags. +type FillSet struct { + lock sync.Mutex + cond *sync.Cond + ns *nodestate.NodeStateMachine + input enode.Iterator + closed bool + flags nodestate.Flags + count, target int +} + +// NewFillSet creates a new FillSet +func NewFillSet(ns *nodestate.NodeStateMachine, input enode.Iterator, flags nodestate.Flags) *FillSet { + fs := &FillSet{ + ns: ns, + input: input, + flags: flags, + } + fs.cond = sync.NewCond(&fs.lock) + + ns.SubscribeState(flags, func(n *enode.Node, oldState, newState nodestate.Flags) { + fs.lock.Lock() + if oldState.Equals(flags) { + fs.count-- + } + if newState.Equals(flags) { + fs.count++ + } + if fs.target > fs.count { + fs.cond.Signal() + } + fs.lock.Unlock() + }) + + go fs.readLoop() + return fs +} + +// readLoop keeps reading nodes from the input and setting the specified flags for them +// whenever the node set size is under the current target +func (fs *FillSet) readLoop() { + for { + fs.lock.Lock() + for fs.target <= fs.count && !fs.closed { + fs.cond.Wait() + } + + fs.lock.Unlock() + if !fs.input.Next() { + return + } + fs.ns.SetState(fs.input.Node(), fs.flags, nodestate.Flags{}, 0) + } +} + +// SetTarget sets the current target for node set size. If the previous target was not +// reached and FillSet was still waiting for the next node from the input then the next +// incoming node will be added to the set regardless of the target. This ensures that +// all nodes coming from the input are eventually added to the set. +func (fs *FillSet) SetTarget(target int) { + fs.lock.Lock() + defer fs.lock.Unlock() + + fs.target = target + if fs.target > fs.count { + fs.cond.Signal() + } +} + +// Close shuts FillSet down and closes the input iterator +func (fs *FillSet) Close() { + fs.lock.Lock() + defer fs.lock.Unlock() + + fs.closed = true + fs.input.Close() + fs.cond.Signal() +} diff --git a/les/vflux/client/fillset_test.go b/les/vflux/client/fillset_test.go new file mode 100644 index 00000000..ddb12a82 --- /dev/null +++ b/les/vflux/client/fillset_test.go @@ -0,0 +1,117 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +type testIter struct { + waitCh chan struct{} + nodeCh chan *enode.Node + node *enode.Node +} + +func (i *testIter) Next() bool { + if _, ok := <-i.waitCh; !ok { + return false + } + i.node = <-i.nodeCh + return true +} + +func (i *testIter) Node() *enode.Node { + return i.node +} + +func (i *testIter) Close() { + close(i.waitCh) +} + +func (i *testIter) push() { + var id enode.ID + rand.Read(id[:]) + i.nodeCh <- enode.SignNull(new(enr.Record), id) +} + +func (i *testIter) waiting(timeout time.Duration) bool { + select { + case i.waitCh <- struct{}{}: + return true + case <-time.After(timeout): + return false + } +} + +func TestFillSet(t *testing.T) { + ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) + iter := &testIter{ + waitCh: make(chan struct{}), + nodeCh: make(chan *enode.Node), + } + fs := NewFillSet(ns, iter, sfTest1) + ns.Start() + + expWaiting := func(i int, push bool) { + for ; i > 0; i-- { + if !iter.waiting(time.Second * 10) { + t.Fatalf("FillSet not waiting for new nodes") + } + if push { + iter.push() + } + } + } + + expNotWaiting := func() { + if iter.waiting(time.Millisecond * 100) { + t.Fatalf("FillSet unexpectedly waiting for new nodes") + } + } + + expNotWaiting() + fs.SetTarget(3) + expWaiting(3, true) + expNotWaiting() + fs.SetTarget(100) + expWaiting(2, true) + expWaiting(1, false) + // lower the target before the previous one has been filled up + fs.SetTarget(0) + iter.push() + expNotWaiting() + fs.SetTarget(10) + expWaiting(4, true) + expNotWaiting() + // remove all previously set flags + ns.ForEach(sfTest1, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { + ns.SetState(node, nodestate.Flags{}, sfTest1, 0) + }) + // now expect FillSet to fill the set up again with 10 new nodes + expWaiting(10, true) + expNotWaiting() + + fs.Close() + ns.Stop() +} diff --git a/les/vflux/client/queueiterator.go b/les/vflux/client/queueiterator.go new file mode 100644 index 00000000..ad3f8df5 --- /dev/null +++ b/les/vflux/client/queueiterator.go @@ -0,0 +1,123 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "sync" + + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +// QueueIterator returns nodes from the specified selectable set in the same order as +// they entered the set. +type QueueIterator struct { + lock sync.Mutex + cond *sync.Cond + + ns *nodestate.NodeStateMachine + queue []*enode.Node + nextNode *enode.Node + waitCallback func(bool) + fifo, closed bool +} + +// NewQueueIterator creates a new QueueIterator. Nodes are selectable if they have all the required +// and none of the disabled flags set. When a node is selected the selectedFlag is set which also +// disables further selectability until it is removed or times out. +func NewQueueIterator(ns *nodestate.NodeStateMachine, requireFlags, disableFlags nodestate.Flags, fifo bool, waitCallback func(bool)) *QueueIterator { + qi := &QueueIterator{ + ns: ns, + fifo: fifo, + waitCallback: waitCallback, + } + qi.cond = sync.NewCond(&qi.lock) + + ns.SubscribeState(requireFlags.Or(disableFlags), func(n *enode.Node, oldState, newState nodestate.Flags) { + oldMatch := oldState.HasAll(requireFlags) && oldState.HasNone(disableFlags) + newMatch := newState.HasAll(requireFlags) && newState.HasNone(disableFlags) + if newMatch == oldMatch { + return + } + + qi.lock.Lock() + defer qi.lock.Unlock() + + if newMatch { + qi.queue = append(qi.queue, n) + } else { + id := n.ID() + for i, qn := range qi.queue { + if qn.ID() == id { + copy(qi.queue[i:len(qi.queue)-1], qi.queue[i+1:]) + qi.queue = qi.queue[:len(qi.queue)-1] + break + } + } + } + qi.cond.Signal() + }) + return qi +} + +// Next moves to the next selectable node. +func (qi *QueueIterator) Next() bool { + qi.lock.Lock() + if !qi.closed && len(qi.queue) == 0 { + if qi.waitCallback != nil { + qi.waitCallback(true) + } + for !qi.closed && len(qi.queue) == 0 { + qi.cond.Wait() + } + if qi.waitCallback != nil { + qi.waitCallback(false) + } + } + if qi.closed { + qi.nextNode = nil + qi.lock.Unlock() + return false + } + // Move to the next node in queue. + if qi.fifo { + qi.nextNode = qi.queue[0] + copy(qi.queue[:len(qi.queue)-1], qi.queue[1:]) + qi.queue = qi.queue[:len(qi.queue)-1] + } else { + qi.nextNode = qi.queue[len(qi.queue)-1] + qi.queue = qi.queue[:len(qi.queue)-1] + } + qi.lock.Unlock() + return true +} + +// Close ends the iterator. +func (qi *QueueIterator) Close() { + qi.lock.Lock() + qi.closed = true + qi.lock.Unlock() + qi.cond.Signal() +} + +// Node returns the current node. +func (qi *QueueIterator) Node() *enode.Node { + qi.lock.Lock() + defer qi.lock.Unlock() + + return qi.nextNode +} diff --git a/les/vflux/client/queueiterator_test.go b/les/vflux/client/queueiterator_test.go new file mode 100644 index 00000000..400d978e --- /dev/null +++ b/les/vflux/client/queueiterator_test.go @@ -0,0 +1,95 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +func testNode(i int) *enode.Node { + return enode.SignNull(new(enr.Record), testNodeID(i)) +} + +func TestQueueIteratorFIFO(t *testing.T) { + testQueueIterator(t, true) +} + +func TestQueueIteratorLIFO(t *testing.T) { + testQueueIterator(t, false) +} + +func testQueueIterator(t *testing.T, fifo bool) { + ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) + qi := NewQueueIterator(ns, sfTest2, sfTest3.Or(sfTest4), fifo, nil) + ns.Start() + for i := 1; i <= iterTestNodeCount; i++ { + ns.SetState(testNode(i), sfTest1, nodestate.Flags{}, 0) + } + next := func() int { + ch := make(chan struct{}) + go func() { + qi.Next() + close(ch) + }() + select { + case <-ch: + case <-time.After(time.Second * 5): + t.Fatalf("Iterator.Next() timeout") + } + node := qi.Node() + ns.SetState(node, sfTest4, nodestate.Flags{}, 0) + return testNodeIndex(node.ID()) + } + exp := func(i int) { + n := next() + if n != i { + t.Errorf("Wrong item returned by iterator (expected %d, got %d)", i, n) + } + } + explist := func(list []int) { + for i := range list { + if fifo { + exp(list[i]) + } else { + exp(list[len(list)-1-i]) + } + } + } + + ns.SetState(testNode(1), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(2), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(3), sfTest2, nodestate.Flags{}, 0) + explist([]int{1, 2, 3}) + ns.SetState(testNode(4), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(5), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(6), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(5), sfTest3, nodestate.Flags{}, 0) + explist([]int{4, 6}) + ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(2), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(2), sfTest3, nodestate.Flags{}, 0) + ns.SetState(testNode(2), nodestate.Flags{}, sfTest3, 0) + explist([]int{1, 3, 2}) + ns.Stop() +} diff --git a/les/vflux/client/requestbasket.go b/les/vflux/client/requestbasket.go new file mode 100644 index 00000000..55d4b165 --- /dev/null +++ b/les/vflux/client/requestbasket.go @@ -0,0 +1,285 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "io" + + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/rlp" +) + +const basketFactor = 1000000 // reference basket amount and value scale factor + +// referenceBasket keeps track of global request usage statistics and the usual prices +// of each used request type relative to each other. The amounts in the basket are scaled +// up by basketFactor because of the exponential expiration of long-term statistical data. +// Values are scaled so that the sum of all amounts and the sum of all values are equal. +// +// reqValues represent the internal relative value estimates for each request type and are +// calculated as value / amount. The average reqValue of all used requests is 1. +// In other words: SUM(refBasket[type].amount * reqValue[type]) = SUM(refBasket[type].amount) +type referenceBasket struct { + basket requestBasket + reqValues []float64 // contents are read only, new slice is created for each update +} + +// serverBasket collects served request amount and value statistics for a single server. +// +// Values are gradually transferred to the global reference basket with a long time +// constant so that each server basket represents long term usage and price statistics. +// When the transferred part is added to the reference basket the values are scaled so +// that their sum equals the total value calculated according to the previous reqValues. +// The ratio of request values coming from the server basket represent the pricing of +// the specific server and modify the global estimates with a weight proportional to +// the amount of service provided by the server. +type serverBasket struct { + basket requestBasket + rvFactor float64 +} + +type ( + // requestBasket holds amounts and values for each request type. + // These values are exponentially expired (see utils.ExpiredValue). The power of 2 + // exponent is applicable to all values within. + requestBasket struct { + items []basketItem + exp uint64 + } + // basketItem holds amount and value for a single request type. Value is the total + // relative request value accumulated for served requests while amount is the counter + // for each request type. + // Note that these values are both scaled up by basketFactor because of the exponential + // expiration. + basketItem struct { + amount, value uint64 + } +) + +// setExp sets the power of 2 exponent of the structure, scaling base values (the amounts +// and request values) up or down if necessary. +func (b *requestBasket) setExp(exp uint64) { + if exp > b.exp { + shift := exp - b.exp + for i, item := range b.items { + item.amount >>= shift + item.value >>= shift + b.items[i] = item + } + b.exp = exp + } + if exp < b.exp { + shift := b.exp - exp + for i, item := range b.items { + item.amount <<= shift + item.value <<= shift + b.items[i] = item + } + b.exp = exp + } +} + +// init initializes a new server basket with the given service vector size (number of +// different request types) +func (s *serverBasket) init(size int) { + if s.basket.items == nil { + s.basket.items = make([]basketItem, size) + } +} + +// add adds the give type and amount of requests to the basket. Cost is calculated +// according to the server's own cost table. +func (s *serverBasket) add(reqType, reqAmount uint32, reqCost uint64, expFactor utils.ExpirationFactor) { + s.basket.setExp(expFactor.Exp) + i := &s.basket.items[reqType] + i.amount += uint64(float64(uint64(reqAmount)*basketFactor) * expFactor.Factor) + i.value += uint64(float64(reqCost) * s.rvFactor * expFactor.Factor) +} + +// updateRvFactor updates the request value factor that scales server costs into the +// local value dimensions. +func (s *serverBasket) updateRvFactor(rvFactor float64) { + s.rvFactor = rvFactor +} + +// transfer decreases amounts and values in the basket with the given ratio and +// moves the removed amounts into a new basket which is returned and can be added +// to the global reference basket. +func (s *serverBasket) transfer(ratio float64) requestBasket { + res := requestBasket{ + items: make([]basketItem, len(s.basket.items)), + exp: s.basket.exp, + } + for i, v := range s.basket.items { + ta := uint64(float64(v.amount) * ratio) + tv := uint64(float64(v.value) * ratio) + if ta > v.amount { + ta = v.amount + } + if tv > v.value { + tv = v.value + } + s.basket.items[i] = basketItem{v.amount - ta, v.value - tv} + res.items[i] = basketItem{ta, tv} + } + return res +} + +// init initializes the reference basket with the given service vector size (number of +// different request types) +func (r *referenceBasket) init(size int) { + r.reqValues = make([]float64, size) + r.normalize() + r.updateReqValues() +} + +// add adds the transferred part of a server basket to the reference basket while scaling +// value amounts so that their sum equals the total value calculated according to the +// previous reqValues. +func (r *referenceBasket) add(newBasket requestBasket) { + r.basket.setExp(newBasket.exp) + // scale newBasket to match service unit value + var ( + totalCost uint64 + totalValue float64 + ) + for i, v := range newBasket.items { + totalCost += v.value + totalValue += float64(v.amount) * r.reqValues[i] + } + if totalCost > 0 { + // add to reference with scaled values + scaleValues := totalValue / float64(totalCost) + for i, v := range newBasket.items { + r.basket.items[i].amount += v.amount + r.basket.items[i].value += uint64(float64(v.value) * scaleValues) + } + } + r.updateReqValues() +} + +// updateReqValues recalculates reqValues after adding transferred baskets. Note that +// values should be normalized first. +func (r *referenceBasket) updateReqValues() { + r.reqValues = make([]float64, len(r.reqValues)) + for i, b := range r.basket.items { + if b.amount > 0 { + r.reqValues[i] = float64(b.value) / float64(b.amount) + } else { + r.reqValues[i] = 0 + } + } +} + +// normalize ensures that the sum of values equal the sum of amounts in the basket. +func (r *referenceBasket) normalize() { + var sumAmount, sumValue uint64 + for _, b := range r.basket.items { + sumAmount += b.amount + sumValue += b.value + } + add := float64(int64(sumAmount-sumValue)) / float64(sumValue) + for i, b := range r.basket.items { + b.value += uint64(int64(float64(b.value) * add)) + r.basket.items[i] = b + } +} + +// reqValueFactor calculates the request value factor applicable to the server with +// the given announced request cost list +func (r *referenceBasket) reqValueFactor(costList []uint64) float64 { + var ( + totalCost float64 + totalValue uint64 + ) + for i, b := range r.basket.items { + totalCost += float64(costList[i]) * float64(b.amount) // use floats to avoid overflow + totalValue += b.value + } + if totalCost < 1 { + return 0 + } + return float64(totalValue) * basketFactor / totalCost +} + +// EncodeRLP implements rlp.Encoder +func (b *basketItem) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, []interface{}{b.amount, b.value}) +} + +// DecodeRLP implements rlp.Decoder +func (b *basketItem) DecodeRLP(s *rlp.Stream) error { + var item struct { + Amount, Value uint64 + } + if err := s.Decode(&item); err != nil { + return err + } + b.amount, b.value = item.Amount, item.Value + return nil +} + +// EncodeRLP implements rlp.Encoder +func (r *requestBasket) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, []interface{}{r.items, r.exp}) +} + +// DecodeRLP implements rlp.Decoder +func (r *requestBasket) DecodeRLP(s *rlp.Stream) error { + var enc struct { + Items []basketItem + Exp uint64 + } + if err := s.Decode(&enc); err != nil { + return err + } + r.items, r.exp = enc.Items, enc.Exp + return nil +} + +// convertMapping converts a basket loaded from the database into the current format. +// If the available request types and their mapping into the service vector differ from +// the one used when saving the basket then this function reorders old fields and fills +// in previously unknown fields by scaling up amounts and values taken from the +// initialization basket. +func (r requestBasket) convertMapping(oldMapping, newMapping []string, initBasket requestBasket) requestBasket { + nameMap := make(map[string]int) + for i, name := range oldMapping { + nameMap[name] = i + } + rc := requestBasket{items: make([]basketItem, len(newMapping))} + var scale, oldScale, newScale float64 + for i, name := range newMapping { + if ii, ok := nameMap[name]; ok { + rc.items[i] = r.items[ii] + oldScale += float64(initBasket.items[i].amount) * float64(initBasket.items[i].amount) + newScale += float64(rc.items[i].amount) * float64(initBasket.items[i].amount) + } + } + if oldScale > 1e-10 { + scale = newScale / oldScale + } else { + scale = 1 + } + for i, name := range newMapping { + if _, ok := nameMap[name]; !ok { + rc.items[i].amount = uint64(float64(initBasket.items[i].amount) * scale) + rc.items[i].value = uint64(float64(initBasket.items[i].value) * scale) + } + } + return rc +} diff --git a/les/vflux/client/requestbasket_test.go b/les/vflux/client/requestbasket_test.go new file mode 100644 index 00000000..7c5f87c6 --- /dev/null +++ b/les/vflux/client/requestbasket_test.go @@ -0,0 +1,161 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/rand" + "testing" + + "github.com/ethereum/go-ethereum/les/utils" +) + +func checkU64(t *testing.T, name string, value, exp uint64) { + if value != exp { + t.Errorf("Incorrect value for %s: got %d, expected %d", name, value, exp) + } +} + +func checkF64(t *testing.T, name string, value, exp, tol float64) { + if value < exp-tol || value > exp+tol { + t.Errorf("Incorrect value for %s: got %f, expected %f", name, value, exp) + } +} + +func TestServerBasket(t *testing.T) { + var s serverBasket + s.init(2) + // add some requests with different request value factors + s.updateRvFactor(1) + noexp := utils.ExpirationFactor{Factor: 1} + s.add(0, 1000, 10000, noexp) + s.add(1, 3000, 60000, noexp) + s.updateRvFactor(10) + s.add(0, 4000, 4000, noexp) + s.add(1, 2000, 4000, noexp) + s.updateRvFactor(10) + // check basket contents directly + checkU64(t, "s.basket[0].amount", s.basket.items[0].amount, 5000*basketFactor) + checkU64(t, "s.basket[0].value", s.basket.items[0].value, 50000) + checkU64(t, "s.basket[1].amount", s.basket.items[1].amount, 5000*basketFactor) + checkU64(t, "s.basket[1].value", s.basket.items[1].value, 100000) + // transfer 50% of the contents of the basket + transfer1 := s.transfer(0.5) + checkU64(t, "transfer1[0].amount", transfer1.items[0].amount, 2500*basketFactor) + checkU64(t, "transfer1[0].value", transfer1.items[0].value, 25000) + checkU64(t, "transfer1[1].amount", transfer1.items[1].amount, 2500*basketFactor) + checkU64(t, "transfer1[1].value", transfer1.items[1].value, 50000) + // add more requests + s.updateRvFactor(100) + s.add(0, 1000, 100, noexp) + // transfer 25% of the contents of the basket + transfer2 := s.transfer(0.25) + checkU64(t, "transfer2[0].amount", transfer2.items[0].amount, (2500+1000)/4*basketFactor) + checkU64(t, "transfer2[0].value", transfer2.items[0].value, (25000+10000)/4) + checkU64(t, "transfer2[1].amount", transfer2.items[1].amount, 2500/4*basketFactor) + checkU64(t, "transfer2[1].value", transfer2.items[1].value, 50000/4) +} + +func TestConvertMapping(t *testing.T) { + b := requestBasket{items: []basketItem{{3, 3}, {1, 1}, {2, 2}}} + oldMap := []string{"req3", "req1", "req2"} + newMap := []string{"req1", "req2", "req3", "req4"} + init := requestBasket{items: []basketItem{{2, 2}, {4, 4}, {6, 6}, {8, 8}}} + bc := b.convertMapping(oldMap, newMap, init) + checkU64(t, "bc[0].amount", bc.items[0].amount, 1) + checkU64(t, "bc[1].amount", bc.items[1].amount, 2) + checkU64(t, "bc[2].amount", bc.items[2].amount, 3) + checkU64(t, "bc[3].amount", bc.items[3].amount, 4) // 8 should be scaled down to 4 +} + +func TestReqValueFactor(t *testing.T) { + var ref referenceBasket + ref.basket = requestBasket{items: make([]basketItem, 4)} + for i := range ref.basket.items { + ref.basket.items[i].amount = uint64(i+1) * basketFactor + ref.basket.items[i].value = uint64(i+1) * basketFactor + } + ref.init(4) + rvf := ref.reqValueFactor([]uint64{1000, 2000, 3000, 4000}) + // expected value is (1000000+2000000+3000000+4000000) / (1*1000+2*2000+3*3000+4*4000) = 10000000/30000 = 333.333 + checkF64(t, "reqValueFactor", rvf, 333.333, 1) +} + +func TestNormalize(t *testing.T) { + for cycle := 0; cycle < 100; cycle += 1 { + // Initialize data for testing + valueRange, lower := 1000000, 1000000 + ref := referenceBasket{basket: requestBasket{items: make([]basketItem, 10)}} + for i := 0; i < 10; i++ { + ref.basket.items[i].amount = uint64(rand.Intn(valueRange) + lower) + ref.basket.items[i].value = uint64(rand.Intn(valueRange) + lower) + } + ref.normalize() + + // Check whether SUM(amount) ~= SUM(value) + var sumAmount, sumValue uint64 + for i := 0; i < 10; i++ { + sumAmount += ref.basket.items[i].amount + sumValue += ref.basket.items[i].value + } + var epsilon = 0.01 + if float64(sumAmount)*(1+epsilon) < float64(sumValue) || float64(sumAmount)*(1-epsilon) > float64(sumValue) { + t.Fatalf("Failed to normalize sumAmount: %d sumValue: %d", sumAmount, sumValue) + } + } +} + +func TestReqValueAdjustment(t *testing.T) { + var s1, s2 serverBasket + s1.init(3) + s2.init(3) + cost1 := []uint64{30000, 60000, 90000} + cost2 := []uint64{100000, 200000, 300000} + var ref referenceBasket + ref.basket = requestBasket{items: make([]basketItem, 3)} + for i := range ref.basket.items { + ref.basket.items[i].amount = 123 * basketFactor + ref.basket.items[i].value = 123 * basketFactor + } + ref.init(3) + // initial reqValues are expected to be {1, 1, 1} + checkF64(t, "reqValues[0]", ref.reqValues[0], 1, 0.01) + checkF64(t, "reqValues[1]", ref.reqValues[1], 1, 0.01) + checkF64(t, "reqValues[2]", ref.reqValues[2], 1, 0.01) + var logOffset utils.Fixed64 + for period := 0; period < 1000; period++ { + exp := utils.ExpFactor(logOffset) + s1.updateRvFactor(ref.reqValueFactor(cost1)) + s2.updateRvFactor(ref.reqValueFactor(cost2)) + // throw in random requests into each basket using their internal pricing + for i := 0; i < 1000; i++ { + reqType, reqAmount := uint32(rand.Intn(3)), uint32(rand.Intn(10)+1) + reqCost := uint64(reqAmount) * cost1[reqType] + s1.add(reqType, reqAmount, reqCost, exp) + reqType, reqAmount = uint32(rand.Intn(3)), uint32(rand.Intn(10)+1) + reqCost = uint64(reqAmount) * cost2[reqType] + s2.add(reqType, reqAmount, reqCost, exp) + } + ref.add(s1.transfer(0.1)) + ref.add(s2.transfer(0.1)) + ref.normalize() + ref.updateReqValues() + logOffset += utils.Float64ToFixed64(0.1) + } + checkF64(t, "reqValues[0]", ref.reqValues[0], 0.5, 0.01) + checkF64(t, "reqValues[1]", ref.reqValues[1], 1, 0.01) + checkF64(t, "reqValues[2]", ref.reqValues[2], 1.5, 0.01) +} diff --git a/les/vflux/client/serverpool.go b/les/vflux/client/serverpool.go new file mode 100644 index 00000000..cf96f0ee --- /dev/null +++ b/les/vflux/client/serverpool.go @@ -0,0 +1,605 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "math/rand" + "reflect" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/utils" + "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/p2p/nodestate" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + minTimeout = time.Millisecond * 500 // minimum request timeout suggested by the server pool + timeoutRefresh = time.Second * 5 // recalculate timeout if older than this + dialCost = 10000 // cost of a TCP dial (used for known node selection weight calculation) + dialWaitStep = 1.5 // exponential multiplier of redial wait time when no value was provided by the server + queryCost = 500 // cost of a UDP pre-negotiation query + queryWaitStep = 1.02 // exponential multiplier of redial wait time when no value was provided by the server + waitThreshold = time.Hour * 2000 // drop node if waiting time is over the threshold + nodeWeightMul = 1000000 // multiplier constant for node weight calculation + nodeWeightThreshold = 100 // minimum weight for keeping a node in the known (valuable) set + minRedialWait = 10 // minimum redial wait time in seconds + preNegLimit = 5 // maximum number of simultaneous pre-negotiation queries + warnQueryFails = 20 // number of consecutive UDP query failures before we print a warning + maxQueryFails = 100 // number of consecutive UDP query failures when then chance of skipping a query reaches 50% +) + +// ServerPool provides a node iterator for dial candidates. The output is a mix of newly discovered +// nodes, a weighted random selection of known (previously valuable) nodes and trusted/paid nodes. +type ServerPool struct { + clock mclock.Clock + unixTime func() int64 + db ethdb.KeyValueStore + + ns *nodestate.NodeStateMachine + vt *ValueTracker + mixer *enode.FairMix + mixSources []enode.Iterator + dialIterator enode.Iterator + validSchemes enr.IdentityScheme + trustedURLs []string + fillSet *FillSet + started, queryFails uint32 + + timeoutLock sync.RWMutex + timeout time.Duration + timeWeights ResponseTimeWeights + timeoutRefreshed mclock.AbsTime + + suggestedTimeoutGauge, totalValueGauge metrics.Gauge + sessionValueMeter metrics.Meter +} + +// nodeHistory keeps track of dial costs which determine node weight together with the +// service value calculated by ValueTracker. +type nodeHistory struct { + dialCost utils.ExpiredValue + redialWaitStart, redialWaitEnd int64 // unix time (seconds) +} + +type nodeHistoryEnc struct { + DialCost utils.ExpiredValue + RedialWaitStart, RedialWaitEnd uint64 +} + +// queryFunc sends a pre-negotiation query and blocks until a response arrives or timeout occurs. +// It returns 1 if the remote node has confirmed that connection is possible, 0 if not +// possible and -1 if no response arrived (timeout). +type QueryFunc func(*enode.Node) int + +var ( + clientSetup = &nodestate.Setup{Version: 2} + sfHasValue = clientSetup.NewPersistentFlag("hasValue") + sfQuery = clientSetup.NewFlag("query") + sfCanDial = clientSetup.NewFlag("canDial") + sfDialing = clientSetup.NewFlag("dialed") + sfWaitDialTimeout = clientSetup.NewFlag("dialTimeout") + sfConnected = clientSetup.NewFlag("connected") + sfRedialWait = clientSetup.NewFlag("redialWait") + sfAlwaysConnect = clientSetup.NewFlag("alwaysConnect") + sfDialProcess = nodestate.MergeFlags(sfQuery, sfCanDial, sfDialing, sfConnected, sfRedialWait) + + sfiNodeHistory = clientSetup.NewPersistentField("nodeHistory", reflect.TypeOf(nodeHistory{}), + func(field interface{}) ([]byte, error) { + if n, ok := field.(nodeHistory); ok { + ne := nodeHistoryEnc{ + DialCost: n.dialCost, + RedialWaitStart: uint64(n.redialWaitStart), + RedialWaitEnd: uint64(n.redialWaitEnd), + } + enc, err := rlp.EncodeToBytes(&ne) + return enc, err + } + return nil, errors.New("invalid field type") + }, + func(enc []byte) (interface{}, error) { + var ne nodeHistoryEnc + err := rlp.DecodeBytes(enc, &ne) + n := nodeHistory{ + dialCost: ne.DialCost, + redialWaitStart: int64(ne.RedialWaitStart), + redialWaitEnd: int64(ne.RedialWaitEnd), + } + return n, err + }, + ) + sfiNodeWeight = clientSetup.NewField("nodeWeight", reflect.TypeOf(uint64(0))) + sfiConnectedStats = clientSetup.NewField("connectedStats", reflect.TypeOf(ResponseTimeStats{})) + sfiLocalAddress = clientSetup.NewPersistentField("localAddress", reflect.TypeOf(&enr.Record{}), + func(field interface{}) ([]byte, error) { + if enr, ok := field.(*enr.Record); ok { + enc, err := rlp.EncodeToBytes(enr) + return enc, err + } + return nil, errors.New("invalid field type") + }, + func(enc []byte) (interface{}, error) { + var enr enr.Record + if err := rlp.DecodeBytes(enc, &enr); err != nil { + return nil, err + } + return &enr, nil + }, + ) +) + +// NewServerPool creates a new server pool +func NewServerPool(db ethdb.KeyValueStore, dbKey []byte, mixTimeout time.Duration, query QueryFunc, clock mclock.Clock, trustedURLs []string, requestList []RequestInfo) (*ServerPool, enode.Iterator) { + s := &ServerPool{ + db: db, + clock: clock, + unixTime: func() int64 { return time.Now().Unix() }, + validSchemes: enode.ValidSchemes, + trustedURLs: trustedURLs, + vt: NewValueTracker(db, &mclock.System{}, requestList, time.Minute, 1/float64(time.Hour), 1/float64(time.Hour*100), 1/float64(time.Hour*1000)), + ns: nodestate.NewNodeStateMachine(db, []byte(string(dbKey)+"ns:"), clock, clientSetup), + } + s.recalTimeout() + s.mixer = enode.NewFairMix(mixTimeout) + knownSelector := NewWrsIterator(s.ns, sfHasValue, sfDialProcess, sfiNodeWeight) + alwaysConnect := NewQueueIterator(s.ns, sfAlwaysConnect, sfDialProcess, true, nil) + s.mixSources = append(s.mixSources, knownSelector) + s.mixSources = append(s.mixSources, alwaysConnect) + + s.dialIterator = s.mixer + if query != nil { + s.dialIterator = s.addPreNegFilter(s.dialIterator, query) + } + + s.ns.SubscribeState(nodestate.MergeFlags(sfWaitDialTimeout, sfConnected), func(n *enode.Node, oldState, newState nodestate.Flags) { + if oldState.Equals(sfWaitDialTimeout) && newState.IsEmpty() { + // dial timeout, no connection + s.setRedialWait(n, dialCost, dialWaitStep) + s.ns.SetStateSub(n, nodestate.Flags{}, sfDialing, 0) + } + }) + + return s, &serverPoolIterator{ + dialIterator: s.dialIterator, + nextFn: func(node *enode.Node) { + s.ns.Operation(func() { + s.ns.SetStateSub(node, sfDialing, sfCanDial, 0) + s.ns.SetStateSub(node, sfWaitDialTimeout, nodestate.Flags{}, time.Second*10) + }) + }, + nodeFn: s.DialNode, + } +} + +type serverPoolIterator struct { + dialIterator enode.Iterator + nextFn func(*enode.Node) + nodeFn func(*enode.Node) *enode.Node +} + +// Next implements enode.Iterator +func (s *serverPoolIterator) Next() bool { + if s.dialIterator.Next() { + s.nextFn(s.dialIterator.Node()) + return true + } + return false +} + +// Node implements enode.Iterator +func (s *serverPoolIterator) Node() *enode.Node { + return s.nodeFn(s.dialIterator.Node()) +} + +// Close implements enode.Iterator +func (s *serverPoolIterator) Close() { + s.dialIterator.Close() +} + +// AddMetrics adds metrics to the server pool. Should be called before Start(). +func (s *ServerPool) AddMetrics( + suggestedTimeoutGauge, totalValueGauge, serverSelectableGauge, serverConnectedGauge metrics.Gauge, + sessionValueMeter, serverDialedMeter metrics.Meter) { + s.suggestedTimeoutGauge = suggestedTimeoutGauge + s.totalValueGauge = totalValueGauge + s.sessionValueMeter = sessionValueMeter + if serverSelectableGauge != nil { + s.ns.AddLogMetrics(sfHasValue, sfDialProcess, "selectable", nil, nil, serverSelectableGauge) + } + if serverDialedMeter != nil { + s.ns.AddLogMetrics(sfDialing, nodestate.Flags{}, "dialed", serverDialedMeter, nil, nil) + } + if serverConnectedGauge != nil { + s.ns.AddLogMetrics(sfConnected, nodestate.Flags{}, "connected", nil, nil, serverConnectedGauge) + } +} + +// AddSource adds a node discovery source to the server pool (should be called before start) +func (s *ServerPool) AddSource(source enode.Iterator) { + if source != nil { + s.mixSources = append(s.mixSources, source) + } +} + +// addPreNegFilter installs a node filter mechanism that performs a pre-negotiation query. +// Nodes that are filtered out and does not appear on the output iterator are put back +// into redialWait state. +func (s *ServerPool) addPreNegFilter(input enode.Iterator, query QueryFunc) enode.Iterator { + s.fillSet = NewFillSet(s.ns, input, sfQuery) + s.ns.SubscribeState(sfDialProcess, func(n *enode.Node, oldState, newState nodestate.Flags) { + if !newState.Equals(sfQuery) { + if newState.HasAll(sfQuery) { + // remove query flag if the node is already somewhere in the dial process + s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) + } + return + } + fails := atomic.LoadUint32(&s.queryFails) + failMax := fails + if failMax > maxQueryFails { + failMax = maxQueryFails + } + if rand.Intn(maxQueryFails*2) < int(failMax) { + // skip pre-negotiation with increasing chance, max 50% + // this ensures that the client can operate even if UDP is not working at all + s.ns.SetStateSub(n, sfCanDial, nodestate.Flags{}, time.Second*10) + // set canDial before resetting queried so that FillSet will not read more + // candidates unnecessarily + s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) + return + } + go func() { + q := query(n) + if q == -1 { + atomic.AddUint32(&s.queryFails, 1) + fails++ + if fails%warnQueryFails == 0 { + // warn if a large number of consecutive queries have failed + log.Warn("UDP connection queries failed", "count", fails) + } + } else { + atomic.StoreUint32(&s.queryFails, 0) + } + s.ns.Operation(func() { + // we are no longer running in the operation that the callback belongs to, start a new one because of setRedialWait + if q == 1 { + s.ns.SetStateSub(n, sfCanDial, nodestate.Flags{}, time.Second*10) + } else { + s.setRedialWait(n, queryCost, queryWaitStep) + } + s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) + }) + }() + }) + return NewQueueIterator(s.ns, sfCanDial, nodestate.Flags{}, false, func(waiting bool) { + if waiting { + s.fillSet.SetTarget(preNegLimit) + } else { + s.fillSet.SetTarget(0) + } + }) +} + +// start starts the server pool. Note that NodeStateMachine should be started first. +func (s *ServerPool) Start() { + s.ns.Start() + for _, iter := range s.mixSources { + // add sources to mixer at startup because the mixer instantly tries to read them + // which should only happen after NodeStateMachine has been started + s.mixer.AddSource(iter) + } + for _, url := range s.trustedURLs { + if node, err := enode.Parse(s.validSchemes, url); err == nil { + s.ns.SetState(node, sfAlwaysConnect, nodestate.Flags{}, 0) + } else { + log.Error("Invalid trusted server URL", "url", url, "error", err) + } + } + unixTime := s.unixTime() + s.ns.Operation(func() { + s.ns.ForEach(sfHasValue, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { + s.calculateWeight(node) + if n, ok := s.ns.GetField(node, sfiNodeHistory).(nodeHistory); ok && n.redialWaitEnd > unixTime { + wait := n.redialWaitEnd - unixTime + lastWait := n.redialWaitEnd - n.redialWaitStart + if wait > lastWait { + // if the time until expiration is larger than the last suggested + // waiting time then the system clock was probably adjusted + wait = lastWait + } + s.ns.SetStateSub(node, sfRedialWait, nodestate.Flags{}, time.Duration(wait)*time.Second) + } + }) + }) + atomic.StoreUint32(&s.started, 1) +} + +// stop stops the server pool +func (s *ServerPool) Stop() { + if s.fillSet != nil { + s.fillSet.Close() + } + s.ns.Operation(func() { + s.ns.ForEach(sfConnected, nodestate.Flags{}, func(n *enode.Node, state nodestate.Flags) { + // recalculate weight of connected nodes in order to update hasValue flag if necessary + s.calculateWeight(n) + }) + }) + s.ns.Stop() + s.vt.Stop() +} + +// RegisterNode implements serverPeerSubscriber +func (s *ServerPool) RegisterNode(node *enode.Node) (*NodeValueTracker, error) { + if atomic.LoadUint32(&s.started) == 0 { + return nil, errors.New("server pool not started yet") + } + nvt := s.vt.Register(node.ID()) + s.ns.Operation(func() { + s.ns.SetStateSub(node, sfConnected, sfDialing.Or(sfWaitDialTimeout), 0) + s.ns.SetFieldSub(node, sfiConnectedStats, nvt.RtStats()) + if node.IP().IsLoopback() { + s.ns.SetFieldSub(node, sfiLocalAddress, node.Record()) + } + }) + return nvt, nil +} + +// UnregisterNode implements serverPeerSubscriber +func (s *ServerPool) UnregisterNode(node *enode.Node) { + s.ns.Operation(func() { + s.setRedialWait(node, dialCost, dialWaitStep) + s.ns.SetStateSub(node, nodestate.Flags{}, sfConnected, 0) + s.ns.SetFieldSub(node, sfiConnectedStats, nil) + }) + s.vt.Unregister(node.ID()) +} + +// recalTimeout calculates the current recommended timeout. This value is used by +// the client as a "soft timeout" value. It also affects the service value calculation +// of individual nodes. +func (s *ServerPool) recalTimeout() { + // Use cached result if possible, avoid recalculating too frequently. + s.timeoutLock.RLock() + refreshed := s.timeoutRefreshed + s.timeoutLock.RUnlock() + now := s.clock.Now() + if refreshed != 0 && time.Duration(now-refreshed) < timeoutRefresh { + return + } + // Cached result is stale, recalculate a new one. + rts := s.vt.RtStats() + + // Add a fake statistic here. It is an easy way to initialize with some + // conservative values when the database is new. As soon as we have a + // considerable amount of real stats this small value won't matter. + rts.Add(time.Second*2, 10, s.vt.StatsExpFactor()) + + // Use either 10% failure rate timeout or twice the median response time + // as the recommended timeout. + timeout := minTimeout + if t := rts.Timeout(0.1); t > timeout { + timeout = t + } + if t := rts.Timeout(0.5) * 2; t > timeout { + timeout = t + } + s.timeoutLock.Lock() + if s.timeout != timeout { + s.timeout = timeout + s.timeWeights = TimeoutWeights(s.timeout) + + if s.suggestedTimeoutGauge != nil { + s.suggestedTimeoutGauge.Update(int64(s.timeout / time.Millisecond)) + } + if s.totalValueGauge != nil { + s.totalValueGauge.Update(int64(rts.Value(s.timeWeights, s.vt.StatsExpFactor()))) + } + } + s.timeoutRefreshed = now + s.timeoutLock.Unlock() +} + +// GetTimeout returns the recommended request timeout. +func (s *ServerPool) GetTimeout() time.Duration { + s.recalTimeout() + s.timeoutLock.RLock() + defer s.timeoutLock.RUnlock() + return s.timeout +} + +// getTimeoutAndWeight returns the recommended request timeout as well as the +// response time weight which is necessary to calculate service value. +func (s *ServerPool) getTimeoutAndWeight() (time.Duration, ResponseTimeWeights) { + s.recalTimeout() + s.timeoutLock.RLock() + defer s.timeoutLock.RUnlock() + return s.timeout, s.timeWeights +} + +// addDialCost adds the given amount of dial cost to the node history and returns the current +// amount of total dial cost +func (s *ServerPool) addDialCost(n *nodeHistory, amount int64) uint64 { + logOffset := s.vt.StatsExpirer().LogOffset(s.clock.Now()) + if amount > 0 { + n.dialCost.Add(amount, logOffset) + } + totalDialCost := n.dialCost.Value(logOffset) + if totalDialCost < dialCost { + totalDialCost = dialCost + } + return totalDialCost +} + +// serviceValue returns the service value accumulated in this session and in total +func (s *ServerPool) serviceValue(node *enode.Node) (sessionValue, totalValue float64) { + nvt := s.vt.GetNode(node.ID()) + if nvt == nil { + return 0, 0 + } + currentStats := nvt.RtStats() + _, timeWeights := s.getTimeoutAndWeight() + expFactor := s.vt.StatsExpFactor() + + totalValue = currentStats.Value(timeWeights, expFactor) + if connStats, ok := s.ns.GetField(node, sfiConnectedStats).(ResponseTimeStats); ok { + diff := currentStats + diff.SubStats(&connStats) + sessionValue = diff.Value(timeWeights, expFactor) + if s.sessionValueMeter != nil { + s.sessionValueMeter.Mark(int64(sessionValue)) + } + } + return +} + +// updateWeight calculates the node weight and updates the nodeWeight field and the +// hasValue flag. It also saves the node state if necessary. +// Note: this function should run inside a NodeStateMachine operation +func (s *ServerPool) updateWeight(node *enode.Node, totalValue float64, totalDialCost uint64) { + weight := uint64(totalValue * nodeWeightMul / float64(totalDialCost)) + if weight >= nodeWeightThreshold { + s.ns.SetStateSub(node, sfHasValue, nodestate.Flags{}, 0) + s.ns.SetFieldSub(node, sfiNodeWeight, weight) + } else { + s.ns.SetStateSub(node, nodestate.Flags{}, sfHasValue, 0) + s.ns.SetFieldSub(node, sfiNodeWeight, nil) + s.ns.SetFieldSub(node, sfiNodeHistory, nil) + s.ns.SetFieldSub(node, sfiLocalAddress, nil) + } + s.ns.Persist(node) // saved if node history or hasValue changed +} + +// setRedialWait calculates and sets the redialWait timeout based on the service value +// and dial cost accumulated during the last session/attempt and in total. +// The waiting time is raised exponentially if no service value has been received in order +// to prevent dialing an unresponsive node frequently for a very long time just because it +// was useful in the past. It can still be occasionally dialed though and once it provides +// a significant amount of service value again its waiting time is quickly reduced or reset +// to the minimum. +// Note: node weight is also recalculated and updated by this function. +// Note 2: this function should run inside a NodeStateMachine operation +func (s *ServerPool) setRedialWait(node *enode.Node, addDialCost int64, waitStep float64) { + n, _ := s.ns.GetField(node, sfiNodeHistory).(nodeHistory) + sessionValue, totalValue := s.serviceValue(node) + totalDialCost := s.addDialCost(&n, addDialCost) + + // if the current dial session has yielded at least the average value/dial cost ratio + // then the waiting time should be reset to the minimum. If the session value + // is below average but still positive then timeout is limited to the ratio of + // average / current service value multiplied by the minimum timeout. If the attempt + // was unsuccessful then timeout is raised exponentially without limitation. + // Note: dialCost is used in the formula below even if dial was not attempted at all + // because the pre-negotiation query did not return a positive result. In this case + // the ratio has no meaning anyway and waitFactor is always raised, though in smaller + // steps because queries are cheaper and therefore we can allow more failed attempts. + unixTime := s.unixTime() + plannedTimeout := float64(n.redialWaitEnd - n.redialWaitStart) // last planned redialWait timeout + var actualWait float64 // actual waiting time elapsed + if unixTime > n.redialWaitEnd { + // the planned timeout has elapsed + actualWait = plannedTimeout + } else { + // if the node was redialed earlier then we do not raise the planned timeout + // exponentially because that could lead to the timeout rising very high in + // a short amount of time + // Note that in case of an early redial actualWait also includes the dial + // timeout or connection time of the last attempt but it still serves its + // purpose of preventing the timeout rising quicker than linearly as a function + // of total time elapsed without a successful connection. + actualWait = float64(unixTime - n.redialWaitStart) + } + // raise timeout exponentially if the last planned timeout has elapsed + // (use at least the last planned timeout otherwise) + nextTimeout := actualWait * waitStep + if plannedTimeout > nextTimeout { + nextTimeout = plannedTimeout + } + // we reduce the waiting time if the server has provided service value during the + // connection (but never under the minimum) + a := totalValue * dialCost * float64(minRedialWait) + b := float64(totalDialCost) * sessionValue + if a < b*nextTimeout { + nextTimeout = a / b + } + if nextTimeout < minRedialWait { + nextTimeout = minRedialWait + } + wait := time.Duration(float64(time.Second) * nextTimeout) + if wait < waitThreshold { + n.redialWaitStart = unixTime + n.redialWaitEnd = unixTime + int64(nextTimeout) + s.ns.SetFieldSub(node, sfiNodeHistory, n) + s.ns.SetStateSub(node, sfRedialWait, nodestate.Flags{}, wait) + s.updateWeight(node, totalValue, totalDialCost) + } else { + // discard known node statistics if waiting time is very long because the node + // hasn't been responsive for a very long time + s.ns.SetFieldSub(node, sfiNodeHistory, nil) + s.ns.SetFieldSub(node, sfiNodeWeight, nil) + s.ns.SetStateSub(node, nodestate.Flags{}, sfHasValue, 0) + } +} + +// calculateWeight calculates and sets the node weight without altering the node history. +// This function should be called during startup and shutdown only, otherwise setRedialWait +// will keep the weights updated as the underlying statistics are adjusted. +// Note: this function should run inside a NodeStateMachine operation +func (s *ServerPool) calculateWeight(node *enode.Node) { + n, _ := s.ns.GetField(node, sfiNodeHistory).(nodeHistory) + _, totalValue := s.serviceValue(node) + totalDialCost := s.addDialCost(&n, 0) + s.updateWeight(node, totalValue, totalDialCost) +} + +// API returns the vflux client API +func (s *ServerPool) API() *PrivateClientAPI { + return NewPrivateClientAPI(s.vt) +} + +type dummyIdentity enode.ID + +func (id dummyIdentity) Verify(r *enr.Record, sig []byte) error { return nil } +func (id dummyIdentity) NodeAddr(r *enr.Record) []byte { return id[:] } + +// DialNode replaces the given enode with a locally generated one containing the ENR +// stored in the sfiLocalAddress field if present. This workaround ensures that nodes +// on the local network can be dialed at the local address if a connection has been +// successfully established previously. +// Note that NodeStateMachine always remembers the enode with the latest version of +// the remote signed ENR. ENR filtering should be performed on that version while +// dialNode should be used for dialing the node over TCP or UDP. +func (s *ServerPool) DialNode(n *enode.Node) *enode.Node { + if enr, ok := s.ns.GetField(n, sfiLocalAddress).(*enr.Record); ok { + n, _ := enode.New(dummyIdentity(n.ID()), enr) + return n + } + return n +} + +// Persist immediately stores the state of a node in the node database +func (s *ServerPool) Persist(n *enode.Node) { + s.ns.Persist(n) +} diff --git a/les/vflux/client/serverpool_test.go b/les/vflux/client/serverpool_test.go new file mode 100644 index 00000000..f1fd987d --- /dev/null +++ b/les/vflux/client/serverpool_test.go @@ -0,0 +1,392 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math/rand" + "strconv" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" +) + +const ( + spTestNodes = 1000 + spTestTarget = 5 + spTestLength = 10000 + spMinTotal = 40000 + spMaxTotal = 50000 +) + +func testNodeID(i int) enode.ID { + return enode.ID{42, byte(i % 256), byte(i / 256)} +} + +func testNodeIndex(id enode.ID) int { + if id[0] != 42 { + return -1 + } + return int(id[1]) + int(id[2])*256 +} + +type ServerPoolTest struct { + db ethdb.KeyValueStore + clock *mclock.Simulated + quit chan chan struct{} + preNeg, preNegFail bool + sp *ServerPool + spi enode.Iterator + input enode.Iterator + testNodes []spTestNode + trusted []string + waitCount, waitEnded int32 + + // preNegLock protects the cycle counter, testNodes list and its connected field + // (accessed from both the main thread and the preNeg callback) + preNegLock sync.Mutex + queryWg *sync.WaitGroup // a new wait group is created each time the simulation is started + stopping bool // stopping avoid calling queryWg.Add after queryWg.Wait + + cycle, conn, servedConn int + serviceCycles, dialCount int + disconnect map[int][]int +} + +type spTestNode struct { + connectCycles, waitCycles int + nextConnCycle, totalConn int + connected, service bool + node *enode.Node +} + +func newServerPoolTest(preNeg, preNegFail bool) *ServerPoolTest { + nodes := make([]*enode.Node, spTestNodes) + for i := range nodes { + nodes[i] = enode.SignNull(&enr.Record{}, testNodeID(i)) + } + return &ServerPoolTest{ + clock: &mclock.Simulated{}, + db: memorydb.New(), + input: enode.CycleNodes(nodes), + testNodes: make([]spTestNode, spTestNodes), + preNeg: preNeg, + preNegFail: preNegFail, + } +} + +func (s *ServerPoolTest) beginWait() { + // ensure that dialIterator and the maximal number of pre-neg queries are not all stuck in a waiting state + for atomic.AddInt32(&s.waitCount, 1) > preNegLimit { + atomic.AddInt32(&s.waitCount, -1) + s.clock.Run(time.Second) + } +} + +func (s *ServerPoolTest) endWait() { + atomic.AddInt32(&s.waitCount, -1) + atomic.AddInt32(&s.waitEnded, 1) +} + +func (s *ServerPoolTest) addTrusted(i int) { + s.trusted = append(s.trusted, enode.SignNull(&enr.Record{}, testNodeID(i)).String()) +} + +func (s *ServerPoolTest) start() { + var testQuery QueryFunc + s.queryWg = new(sync.WaitGroup) + if s.preNeg { + testQuery = func(node *enode.Node) int { + s.preNegLock.Lock() + if s.stopping { + s.preNegLock.Unlock() + return 0 + } + s.queryWg.Add(1) + idx := testNodeIndex(node.ID()) + n := &s.testNodes[idx] + canConnect := !n.connected && n.connectCycles != 0 && s.cycle >= n.nextConnCycle + s.preNegLock.Unlock() + defer s.queryWg.Done() + + if s.preNegFail { + // simulate a scenario where UDP queries never work + s.beginWait() + s.clock.Sleep(time.Second * 5) + s.endWait() + return -1 + } + switch idx % 3 { + case 0: + // pre-neg returns true only if connection is possible + if canConnect { + return 1 + } + return 0 + case 1: + // pre-neg returns true but connection might still fail + return 1 + case 2: + // pre-neg returns true if connection is possible, otherwise timeout (node unresponsive) + if canConnect { + return 1 + } + s.beginWait() + s.clock.Sleep(time.Second * 5) + s.endWait() + return -1 + } + return -1 + } + } + + requestList := make([]RequestInfo, testReqTypes) + for i := range requestList { + requestList[i] = RequestInfo{Name: "testreq" + strconv.Itoa(i), InitAmount: 1, InitValue: 1} + } + + s.sp, s.spi = NewServerPool(s.db, []byte("sp:"), 0, testQuery, s.clock, s.trusted, requestList) + s.sp.AddSource(s.input) + s.sp.validSchemes = enode.ValidSchemesForTesting + s.sp.unixTime = func() int64 { return int64(s.clock.Now()) / int64(time.Second) } + s.disconnect = make(map[int][]int) + s.sp.Start() + s.quit = make(chan chan struct{}) + go func() { + last := int32(-1) + for { + select { + case <-time.After(time.Millisecond * 100): + c := atomic.LoadInt32(&s.waitEnded) + if c == last { + // advance clock if test is stuck (might happen in rare cases) + s.clock.Run(time.Second) + } + last = c + case quit := <-s.quit: + close(quit) + return + } + } + }() +} + +func (s *ServerPoolTest) stop() { + // disable further queries and wait if one is currently running + s.preNegLock.Lock() + s.stopping = true + s.preNegLock.Unlock() + s.queryWg.Wait() + + quit := make(chan struct{}) + s.quit <- quit + <-quit + s.sp.Stop() + s.spi.Close() + s.preNegLock.Lock() + s.stopping = false + s.preNegLock.Unlock() + for i := range s.testNodes { + n := &s.testNodes[i] + if n.connected { + n.totalConn += s.cycle + } + n.connected = false + n.node = nil + n.nextConnCycle = 0 + } + s.conn, s.servedConn = 0, 0 +} + +func (s *ServerPoolTest) run() { + for count := spTestLength; count > 0; count-- { + if dcList := s.disconnect[s.cycle]; dcList != nil { + for _, idx := range dcList { + n := &s.testNodes[idx] + s.sp.UnregisterNode(n.node) + n.totalConn += s.cycle + s.preNegLock.Lock() + n.connected = false + s.preNegLock.Unlock() + n.node = nil + s.conn-- + if n.service { + s.servedConn-- + } + n.nextConnCycle = s.cycle + n.waitCycles + } + delete(s.disconnect, s.cycle) + } + if s.conn < spTestTarget { + s.dialCount++ + s.beginWait() + s.spi.Next() + s.endWait() + dial := s.spi.Node() + id := dial.ID() + idx := testNodeIndex(id) + n := &s.testNodes[idx] + if !n.connected && n.connectCycles != 0 && s.cycle >= n.nextConnCycle { + s.conn++ + if n.service { + s.servedConn++ + } + n.totalConn -= s.cycle + s.preNegLock.Lock() + n.connected = true + s.preNegLock.Unlock() + dc := s.cycle + n.connectCycles + s.disconnect[dc] = append(s.disconnect[dc], idx) + n.node = dial + nv, _ := s.sp.RegisterNode(n.node) + if n.service { + nv.Served([]ServedRequest{{ReqType: 0, Amount: 100}}, 0) + } + } + } + s.serviceCycles += s.servedConn + s.clock.Run(time.Second) + s.preNegLock.Lock() + s.cycle++ + s.preNegLock.Unlock() + } +} + +func (s *ServerPoolTest) setNodes(count, conn, wait int, service, trusted bool) (res []int) { + for ; count > 0; count-- { + idx := rand.Intn(spTestNodes) + for s.testNodes[idx].connectCycles != 0 || s.testNodes[idx].connected { + idx = rand.Intn(spTestNodes) + } + res = append(res, idx) + s.preNegLock.Lock() + s.testNodes[idx] = spTestNode{ + connectCycles: conn, + waitCycles: wait, + service: service, + } + s.preNegLock.Unlock() + if trusted { + s.addTrusted(idx) + } + } + return +} + +func (s *ServerPoolTest) resetNodes() { + for i, n := range s.testNodes { + if n.connected { + n.totalConn += s.cycle + s.sp.UnregisterNode(n.node) + } + s.preNegLock.Lock() + s.testNodes[i] = spTestNode{totalConn: n.totalConn} + s.preNegLock.Unlock() + } + s.conn, s.servedConn = 0, 0 + s.disconnect = make(map[int][]int) + s.trusted = nil +} + +func (s *ServerPoolTest) checkNodes(t *testing.T, nodes []int) { + var sum int + for _, idx := range nodes { + n := &s.testNodes[idx] + if n.connected { + n.totalConn += s.cycle + } + sum += n.totalConn + n.totalConn = 0 + if n.connected { + n.totalConn -= s.cycle + } + } + if sum < spMinTotal || sum > spMaxTotal { + t.Errorf("Total connection amount %d outside expected range %d to %d", sum, spMinTotal, spMaxTotal) + } +} + +func TestServerPool(t *testing.T) { testServerPool(t, false, false) } +func TestServerPoolWithPreNeg(t *testing.T) { testServerPool(t, true, false) } +func TestServerPoolWithPreNegFail(t *testing.T) { testServerPool(t, true, true) } +func testServerPool(t *testing.T, preNeg, fail bool) { + s := newServerPoolTest(preNeg, fail) + nodes := s.setNodes(100, 200, 200, true, false) + s.setNodes(100, 20, 20, false, false) + s.start() + s.run() + s.stop() + s.checkNodes(t, nodes) +} + +func TestServerPoolChangedNodes(t *testing.T) { testServerPoolChangedNodes(t, false) } +func TestServerPoolChangedNodesWithPreNeg(t *testing.T) { testServerPoolChangedNodes(t, true) } +func testServerPoolChangedNodes(t *testing.T, preNeg bool) { + s := newServerPoolTest(preNeg, false) + nodes := s.setNodes(100, 200, 200, true, false) + s.setNodes(100, 20, 20, false, false) + s.start() + s.run() + s.checkNodes(t, nodes) + for i := 0; i < 3; i++ { + s.resetNodes() + nodes := s.setNodes(100, 200, 200, true, false) + s.setNodes(100, 20, 20, false, false) + s.run() + s.checkNodes(t, nodes) + } + s.stop() +} + +func TestServerPoolRestartNoDiscovery(t *testing.T) { testServerPoolRestartNoDiscovery(t, false) } +func TestServerPoolRestartNoDiscoveryWithPreNeg(t *testing.T) { + testServerPoolRestartNoDiscovery(t, true) +} +func testServerPoolRestartNoDiscovery(t *testing.T, preNeg bool) { + s := newServerPoolTest(preNeg, false) + nodes := s.setNodes(100, 200, 200, true, false) + s.setNodes(100, 20, 20, false, false) + s.start() + s.run() + s.stop() + s.checkNodes(t, nodes) + s.input = nil + s.start() + s.run() + s.stop() + s.checkNodes(t, nodes) +} + +func TestServerPoolTrustedNoDiscovery(t *testing.T) { testServerPoolTrustedNoDiscovery(t, false) } +func TestServerPoolTrustedNoDiscoveryWithPreNeg(t *testing.T) { + testServerPoolTrustedNoDiscovery(t, true) +} +func testServerPoolTrustedNoDiscovery(t *testing.T, preNeg bool) { + s := newServerPoolTest(preNeg, false) + trusted := s.setNodes(200, 200, 200, true, true) + s.input = nil + s.start() + s.run() + s.stop() + s.checkNodes(t, trusted) +} diff --git a/les/vflux/client/timestats.go b/les/vflux/client/timestats.go new file mode 100644 index 00000000..7f1ffdbe --- /dev/null +++ b/les/vflux/client/timestats.go @@ -0,0 +1,237 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "io" + "math" + "time" + + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + minResponseTime = time.Millisecond * 50 + maxResponseTime = time.Second * 10 + timeStatLength = 32 + weightScaleFactor = 1000000 +) + +// ResponseTimeStats is the response time distribution of a set of answered requests, +// weighted with request value, either served by a single server or aggregated for +// multiple servers. +// It it a fixed length (timeStatLength) distribution vector with linear interpolation. +// The X axis (the time values) are not linear, they should be transformed with +// TimeToStatScale and StatScaleToTime. +type ( + ResponseTimeStats struct { + stats [timeStatLength]uint64 + exp uint64 + } + ResponseTimeWeights [timeStatLength]float64 +) + +var timeStatsLogFactor = (timeStatLength - 1) / (math.Log(float64(maxResponseTime)/float64(minResponseTime)) + 1) + +// TimeToStatScale converts a response time to a distribution vector index. The index +// is represented by a float64 so that linear interpolation can be applied. +func TimeToStatScale(d time.Duration) float64 { + if d < 0 { + return 0 + } + r := float64(d) / float64(minResponseTime) + if r > 1 { + r = math.Log(r) + 1 + } + r *= timeStatsLogFactor + if r > timeStatLength-1 { + return timeStatLength - 1 + } + return r +} + +// StatScaleToTime converts a distribution vector index to a response time. The index +// is represented by a float64 so that linear interpolation can be applied. +func StatScaleToTime(r float64) time.Duration { + r /= timeStatsLogFactor + if r > 1 { + r = math.Exp(r - 1) + } + return time.Duration(r * float64(minResponseTime)) +} + +// TimeoutWeights calculates the weight function used for calculating service value +// based on the response time distribution of the received service. +// It is based on the request timeout value of the system. It consists of a half cosine +// function starting with 1, crossing zero at timeout and reaching -1 at 2*timeout. +// After 2*timeout the weight is constant -1. +func TimeoutWeights(timeout time.Duration) (res ResponseTimeWeights) { + for i := range res { + t := StatScaleToTime(float64(i)) + if t < 2*timeout { + res[i] = math.Cos(math.Pi / 2 * float64(t) / float64(timeout)) + } else { + res[i] = -1 + } + } + return +} + +// EncodeRLP implements rlp.Encoder +func (rt *ResponseTimeStats) EncodeRLP(w io.Writer) error { + enc := struct { + Stats [timeStatLength]uint64 + Exp uint64 + }{rt.stats, rt.exp} + return rlp.Encode(w, &enc) +} + +// DecodeRLP implements rlp.Decoder +func (rt *ResponseTimeStats) DecodeRLP(s *rlp.Stream) error { + var enc struct { + Stats [timeStatLength]uint64 + Exp uint64 + } + if err := s.Decode(&enc); err != nil { + return err + } + rt.stats, rt.exp = enc.Stats, enc.Exp + return nil +} + +// Add adds a new response time with the given weight to the distribution. +func (rt *ResponseTimeStats) Add(respTime time.Duration, weight float64, expFactor utils.ExpirationFactor) { + rt.setExp(expFactor.Exp) + weight *= expFactor.Factor * weightScaleFactor + r := TimeToStatScale(respTime) + i := int(r) + r -= float64(i) + rt.stats[i] += uint64(weight * (1 - r)) + if i < timeStatLength-1 { + rt.stats[i+1] += uint64(weight * r) + } +} + +// setExp sets the power of 2 exponent of the structure, scaling base values (the vector +// itself) up or down if necessary. +func (rt *ResponseTimeStats) setExp(exp uint64) { + if exp > rt.exp { + shift := exp - rt.exp + for i, v := range rt.stats { + rt.stats[i] = v >> shift + } + rt.exp = exp + } + if exp < rt.exp { + shift := rt.exp - exp + for i, v := range rt.stats { + rt.stats[i] = v << shift + } + rt.exp = exp + } +} + +// Value calculates the total service value based on the given distribution, using the +// specified weight function. +func (rt ResponseTimeStats) Value(weights ResponseTimeWeights, expFactor utils.ExpirationFactor) float64 { + var v float64 + for i, s := range rt.stats { + v += float64(s) * weights[i] + } + if v < 0 { + return 0 + } + return expFactor.Value(v, rt.exp) / weightScaleFactor +} + +// AddStats adds the given ResponseTimeStats to the current one. +func (rt *ResponseTimeStats) AddStats(s *ResponseTimeStats) { + rt.setExp(s.exp) + for i, v := range s.stats { + rt.stats[i] += v + } +} + +// SubStats subtracts the given ResponseTimeStats from the current one. +func (rt *ResponseTimeStats) SubStats(s *ResponseTimeStats) { + rt.setExp(s.exp) + for i, v := range s.stats { + if v < rt.stats[i] { + rt.stats[i] -= v + } else { + rt.stats[i] = 0 + } + } +} + +// Timeout suggests a timeout value based on the previous distribution. The parameter +// is the desired rate of timeouts assuming a similar distribution in the future. +// Note that the actual timeout should have a sensible minimum bound so that operating +// under ideal working conditions for a long time (for example, using a local server +// with very low response times) will not make it very hard for the system to accommodate +// longer response times in the future. +func (rt ResponseTimeStats) Timeout(failRatio float64) time.Duration { + var sum uint64 + for _, v := range rt.stats { + sum += v + } + s := uint64(float64(sum) * failRatio) + i := timeStatLength - 1 + for i > 0 && s >= rt.stats[i] { + s -= rt.stats[i] + i-- + } + r := float64(i) + 0.5 + if rt.stats[i] > 0 { + r -= float64(s) / float64(rt.stats[i]) + } + if r < 0 { + r = 0 + } + th := StatScaleToTime(r) + if th > maxResponseTime { + th = maxResponseTime + } + return th +} + +// RtDistribution represents a distribution as a series of (X, Y) chart coordinates, +// where the X axis is the response time in seconds while the Y axis is the amount of +// service value received with a response time close to the X coordinate. +type RtDistribution [timeStatLength][2]float64 + +// Distribution returns a RtDistribution, optionally normalized to a sum of 1. +func (rt ResponseTimeStats) Distribution(normalized bool, expFactor utils.ExpirationFactor) (res RtDistribution) { + var mul float64 + if normalized { + var sum uint64 + for _, v := range rt.stats { + sum += v + } + if sum > 0 { + mul = 1 / float64(sum) + } + } else { + mul = expFactor.Value(float64(1)/weightScaleFactor, rt.exp) + } + for i, v := range rt.stats { + res[i][0] = float64(StatScaleToTime(float64(i))) / float64(time.Second) + res[i][1] = float64(v) * mul + } + return +} diff --git a/les/vflux/client/timestats_test.go b/les/vflux/client/timestats_test.go new file mode 100644 index 00000000..a2846017 --- /dev/null +++ b/les/vflux/client/timestats_test.go @@ -0,0 +1,137 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math" + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/les/utils" +) + +func TestTransition(t *testing.T) { + var epsilon = 0.01 + var cases = []time.Duration{ + time.Millisecond, minResponseTime, + time.Second, time.Second * 5, maxResponseTime, + } + for _, c := range cases { + got := StatScaleToTime(TimeToStatScale(c)) + if float64(got)*(1+epsilon) < float64(c) || float64(got)*(1-epsilon) > float64(c) { + t.Fatalf("Failed to transition back") + } + } + // If the time is too large(exceeds the max response time. + got := StatScaleToTime(TimeToStatScale(2 * maxResponseTime)) + if float64(got)*(1+epsilon) < float64(maxResponseTime) || float64(got)*(1-epsilon) > float64(maxResponseTime) { + t.Fatalf("Failed to transition back") + } +} + +var maxResponseWeights = TimeoutWeights(maxResponseTime) + +func TestValue(t *testing.T) { + noexp := utils.ExpirationFactor{Factor: 1} + for i := 0; i < 1000; i++ { + max := minResponseTime + time.Duration(rand.Int63n(int64(maxResponseTime-minResponseTime))) + min := minResponseTime + time.Duration(rand.Int63n(int64(max-minResponseTime))) + timeout := max/2 + time.Duration(rand.Int63n(int64(maxResponseTime-max/2))) + s := makeRangeStats(min, max, 1000, noexp) + value := s.Value(TimeoutWeights(timeout), noexp) + // calculate the average weight (the average of the given range of the half cosine + // weight function). + minx := math.Pi / 2 * float64(min) / float64(timeout) + maxx := math.Pi / 2 * float64(max) / float64(timeout) + avgWeight := (math.Sin(maxx) - math.Sin(minx)) / (maxx - minx) + expv := 1000 * avgWeight + if expv < 0 { + expv = 0 + } + if value < expv-10 || value > expv+10 { + t.Errorf("Value failed (expected %v, got %v)", expv, value) + } + } +} + +func TestAddSubExpire(t *testing.T) { + var ( + sum1, sum2 ResponseTimeStats + sum1ValueExp, sum2ValueExp float64 + logOffset utils.Fixed64 + ) + for i := 0; i < 1000; i++ { + exp := utils.ExpFactor(logOffset) + max := minResponseTime + time.Duration(rand.Int63n(int64(maxResponseTime-minResponseTime))) + min := minResponseTime + time.Duration(rand.Int63n(int64(max-minResponseTime))) + s := makeRangeStats(min, max, 1000, exp) + value := s.Value(maxResponseWeights, exp) + sum1.AddStats(&s) + sum1ValueExp += value + if rand.Intn(2) == 1 { + sum2.AddStats(&s) + sum2ValueExp += value + } + logOffset += utils.Float64ToFixed64(0.001 / math.Log(2)) + sum1ValueExp -= sum1ValueExp * 0.001 + sum2ValueExp -= sum2ValueExp * 0.001 + } + exp := utils.ExpFactor(logOffset) + sum1Value := sum1.Value(maxResponseWeights, exp) + if sum1Value < sum1ValueExp*0.99 || sum1Value > sum1ValueExp*1.01 { + t.Errorf("sum1Value failed (expected %v, got %v)", sum1ValueExp, sum1Value) + } + sum2Value := sum2.Value(maxResponseWeights, exp) + if sum2Value < sum2ValueExp*0.99 || sum2Value > sum2ValueExp*1.01 { + t.Errorf("sum2Value failed (expected %v, got %v)", sum2ValueExp, sum2Value) + } + diff := sum1 + diff.SubStats(&sum2) + diffValue := diff.Value(maxResponseWeights, exp) + diffValueExp := sum1ValueExp - sum2ValueExp + if diffValue < diffValueExp*0.99 || diffValue > diffValueExp*1.01 { + t.Errorf("diffValue failed (expected %v, got %v)", diffValueExp, diffValue) + } +} + +func TestTimeout(t *testing.T) { + testTimeoutRange(t, 0, time.Second) + testTimeoutRange(t, time.Second, time.Second*2) + testTimeoutRange(t, time.Second, maxResponseTime) +} + +func testTimeoutRange(t *testing.T, min, max time.Duration) { + s := makeRangeStats(min, max, 1000, utils.ExpirationFactor{Factor: 1}) + for i := 2; i < 9; i++ { + to := s.Timeout(float64(i) / 10) + exp := max - (max-min)*time.Duration(i)/10 + tol := (max - min) / 50 + if to < exp-tol || to > exp+tol { + t.Errorf("Timeout failed (expected %v, got %v)", exp, to) + } + } +} + +func makeRangeStats(min, max time.Duration, amount float64, exp utils.ExpirationFactor) ResponseTimeStats { + var s ResponseTimeStats + amount /= 1000 + for i := 0; i < 1000; i++ { + s.Add(min+(max-min)*time.Duration(i)/999, amount, exp) + } + return s +} diff --git a/les/vflux/client/valuetracker.go b/les/vflux/client/valuetracker.go new file mode 100644 index 00000000..dcd2fcdf --- /dev/null +++ b/les/vflux/client/valuetracker.go @@ -0,0 +1,506 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + "fmt" + "math" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + vtVersion = 1 // database encoding format for ValueTracker + nvtVersion = 1 // database encoding format for NodeValueTracker +) + +var ( + vtKey = []byte("vt:") + vtNodeKey = []byte("vtNode:") +) + +// NodeValueTracker collects service value statistics for a specific server node +type NodeValueTracker struct { + lock sync.Mutex + + vt *ValueTracker + rtStats, lastRtStats ResponseTimeStats + lastTransfer mclock.AbsTime + basket serverBasket + reqCosts []uint64 + reqValues []float64 +} + +// UpdateCosts updates the node value tracker's request cost table +func (nv *NodeValueTracker) UpdateCosts(reqCosts []uint64) { + nv.vt.lock.Lock() + defer nv.vt.lock.Unlock() + + nv.updateCosts(reqCosts, nv.vt.refBasket.reqValues, nv.vt.refBasket.reqValueFactor(reqCosts)) +} + +// updateCosts updates the request cost table of the server. The request value factor +// is also updated based on the given cost table and the current reference basket. +// Note that the contents of the referenced reqValues slice will not change; a new +// reference is passed if the values are updated by ValueTracker. +func (nv *NodeValueTracker) updateCosts(reqCosts []uint64, reqValues []float64, rvFactor float64) { + nv.lock.Lock() + defer nv.lock.Unlock() + + nv.reqCosts = reqCosts + nv.reqValues = reqValues + nv.basket.updateRvFactor(rvFactor) +} + +// transferStats returns request basket and response time statistics that should be +// added to the global statistics. The contents of the server's own request basket are +// gradually transferred to the main reference basket and removed from the server basket +// with the specified transfer rate. +// The response time statistics are retained at both places and therefore the global +// distribution is always the sum of the individual server distributions. +func (nv *NodeValueTracker) transferStats(now mclock.AbsTime, transferRate float64) (requestBasket, ResponseTimeStats) { + nv.lock.Lock() + defer nv.lock.Unlock() + + dt := now - nv.lastTransfer + nv.lastTransfer = now + if dt < 0 { + dt = 0 + } + recentRtStats := nv.rtStats + recentRtStats.SubStats(&nv.lastRtStats) + nv.lastRtStats = nv.rtStats + return nv.basket.transfer(-math.Expm1(-transferRate * float64(dt))), recentRtStats +} + +type ServedRequest struct { + ReqType, Amount uint32 +} + +// Served adds a served request to the node's statistics. An actual request may be composed +// of one or more request types (service vector indices). +func (nv *NodeValueTracker) Served(reqs []ServedRequest, respTime time.Duration) { + nv.vt.statsExpLock.RLock() + expFactor := nv.vt.statsExpFactor + nv.vt.statsExpLock.RUnlock() + + nv.lock.Lock() + defer nv.lock.Unlock() + + var value float64 + for _, r := range reqs { + nv.basket.add(r.ReqType, r.Amount, nv.reqCosts[r.ReqType]*uint64(r.Amount), expFactor) + value += nv.reqValues[r.ReqType] * float64(r.Amount) + } + nv.rtStats.Add(respTime, value, expFactor) +} + +// RtStats returns the node's own response time distribution statistics +func (nv *NodeValueTracker) RtStats() ResponseTimeStats { + nv.lock.Lock() + defer nv.lock.Unlock() + + return nv.rtStats +} + +// ValueTracker coordinates service value calculation for individual servers and updates +// global statistics +type ValueTracker struct { + clock mclock.Clock + lock sync.Mutex + quit chan chan struct{} + db ethdb.KeyValueStore + connected map[enode.ID]*NodeValueTracker + reqTypeCount int + + refBasket referenceBasket + mappings [][]string + currentMapping int + initRefBasket requestBasket + rtStats ResponseTimeStats + + transferRate float64 + statsExpLock sync.RWMutex + statsExpRate, offlineExpRate float64 + statsExpirer utils.Expirer + statsExpFactor utils.ExpirationFactor +} + +type valueTrackerEncV1 struct { + Mappings [][]string + RefBasketMapping uint + RefBasket requestBasket + RtStats ResponseTimeStats + ExpOffset, SavedAt uint64 +} + +type nodeValueTrackerEncV1 struct { + RtStats ResponseTimeStats + ServerBasketMapping uint + ServerBasket requestBasket +} + +// RequestInfo is an initializer structure for the service vector. +type RequestInfo struct { + // Name identifies the request type and is used for re-mapping the service vector if necessary + Name string + // InitAmount and InitValue are used to initialize the reference basket + InitAmount, InitValue float64 +} + +// NewValueTracker creates a new ValueTracker and loads its previously saved state from +// the database if possible. +func NewValueTracker(db ethdb.KeyValueStore, clock mclock.Clock, reqInfo []RequestInfo, updatePeriod time.Duration, transferRate, statsExpRate, offlineExpRate float64) *ValueTracker { + now := clock.Now() + + initRefBasket := requestBasket{items: make([]basketItem, len(reqInfo))} + mapping := make([]string, len(reqInfo)) + + var sumAmount, sumValue float64 + for _, req := range reqInfo { + sumAmount += req.InitAmount + sumValue += req.InitAmount * req.InitValue + } + scaleValues := sumAmount * basketFactor / sumValue + for i, req := range reqInfo { + mapping[i] = req.Name + initRefBasket.items[i].amount = uint64(req.InitAmount * basketFactor) + initRefBasket.items[i].value = uint64(req.InitAmount * req.InitValue * scaleValues) + } + + vt := &ValueTracker{ + clock: clock, + connected: make(map[enode.ID]*NodeValueTracker), + quit: make(chan chan struct{}), + db: db, + reqTypeCount: len(initRefBasket.items), + initRefBasket: initRefBasket, + transferRate: transferRate, + statsExpRate: statsExpRate, + offlineExpRate: offlineExpRate, + } + if vt.loadFromDb(mapping) != nil { + // previous state not saved or invalid, init with default values + vt.refBasket.basket = initRefBasket + vt.mappings = [][]string{mapping} + vt.currentMapping = 0 + } + vt.statsExpirer.SetRate(now, statsExpRate) + vt.refBasket.init(vt.reqTypeCount) + vt.periodicUpdate() + + go func() { + for { + select { + case <-clock.After(updatePeriod): + vt.lock.Lock() + vt.periodicUpdate() + vt.lock.Unlock() + case quit := <-vt.quit: + close(quit) + return + } + } + }() + return vt +} + +// StatsExpirer returns the statistics expirer so that other values can be expired +// with the same rate as the service value statistics. +func (vt *ValueTracker) StatsExpirer() *utils.Expirer { + return &vt.statsExpirer +} + +// StatsExpirer returns the current expiration factor so that other values can be expired +// with the same rate as the service value statistics. +func (vt *ValueTracker) StatsExpFactor() utils.ExpirationFactor { + vt.statsExpLock.RLock() + defer vt.statsExpLock.RUnlock() + + return vt.statsExpFactor +} + +// loadFromDb loads the value tracker's state from the database and converts saved +// request basket index mapping if it does not match the specified index to name mapping. +func (vt *ValueTracker) loadFromDb(mapping []string) error { + enc, err := vt.db.Get(vtKey) + if err != nil { + return err + } + r := bytes.NewReader(enc) + var version uint + if err := rlp.Decode(r, &version); err != nil { + log.Error("Decoding value tracker state failed", "err", err) + return err + } + if version != vtVersion { + log.Error("Unknown ValueTracker version", "stored", version, "current", nvtVersion) + return fmt.Errorf("Unknown ValueTracker version %d (current version is %d)", version, vtVersion) + } + var vte valueTrackerEncV1 + if err := rlp.Decode(r, &vte); err != nil { + log.Error("Decoding value tracker state failed", "err", err) + return err + } + logOffset := utils.Fixed64(vte.ExpOffset) + dt := time.Now().UnixNano() - int64(vte.SavedAt) + if dt > 0 { + logOffset += utils.Float64ToFixed64(float64(dt) * vt.offlineExpRate / math.Log(2)) + } + vt.statsExpirer.SetLogOffset(vt.clock.Now(), logOffset) + vt.rtStats = vte.RtStats + vt.mappings = vte.Mappings + vt.currentMapping = -1 +loop: + for i, m := range vt.mappings { + if len(m) != len(mapping) { + continue loop + } + for j, s := range mapping { + if m[j] != s { + continue loop + } + } + vt.currentMapping = i + break + } + if vt.currentMapping == -1 { + vt.currentMapping = len(vt.mappings) + vt.mappings = append(vt.mappings, mapping) + } + if int(vte.RefBasketMapping) == vt.currentMapping { + vt.refBasket.basket = vte.RefBasket + } else { + if vte.RefBasketMapping >= uint(len(vt.mappings)) { + log.Error("Unknown request basket mapping", "stored", vte.RefBasketMapping, "current", vt.currentMapping) + return fmt.Errorf("Unknown request basket mapping %d (current version is %d)", vte.RefBasketMapping, vt.currentMapping) + } + vt.refBasket.basket = vte.RefBasket.convertMapping(vt.mappings[vte.RefBasketMapping], mapping, vt.initRefBasket) + } + return nil +} + +// saveToDb saves the value tracker's state to the database +func (vt *ValueTracker) saveToDb() { + vte := valueTrackerEncV1{ + Mappings: vt.mappings, + RefBasketMapping: uint(vt.currentMapping), + RefBasket: vt.refBasket.basket, + RtStats: vt.rtStats, + ExpOffset: uint64(vt.statsExpirer.LogOffset(vt.clock.Now())), + SavedAt: uint64(time.Now().UnixNano()), + } + enc1, err := rlp.EncodeToBytes(uint(vtVersion)) + if err != nil { + log.Error("Encoding value tracker state failed", "err", err) + return + } + enc2, err := rlp.EncodeToBytes(&vte) + if err != nil { + log.Error("Encoding value tracker state failed", "err", err) + return + } + if err := vt.db.Put(vtKey, append(enc1, enc2...)); err != nil { + log.Error("Saving value tracker state failed", "err", err) + } +} + +// Stop saves the value tracker's state and each loaded node's individual state and +// returns after shutting the internal goroutines down. +func (vt *ValueTracker) Stop() { + quit := make(chan struct{}) + vt.quit <- quit + <-quit + vt.lock.Lock() + vt.periodicUpdate() + for id, nv := range vt.connected { + vt.saveNode(id, nv) + } + vt.connected = nil + vt.saveToDb() + vt.lock.Unlock() +} + +// Register adds a server node to the value tracker +func (vt *ValueTracker) Register(id enode.ID) *NodeValueTracker { + vt.lock.Lock() + defer vt.lock.Unlock() + + if vt.connected == nil { + // ValueTracker has already been stopped + return nil + } + nv := vt.loadOrNewNode(id) + reqTypeCount := len(vt.refBasket.reqValues) + nv.reqCosts = make([]uint64, reqTypeCount) + nv.lastTransfer = vt.clock.Now() + nv.reqValues = vt.refBasket.reqValues + nv.basket.init(reqTypeCount) + + vt.connected[id] = nv + return nv +} + +// Unregister removes a server node from the value tracker +func (vt *ValueTracker) Unregister(id enode.ID) { + vt.lock.Lock() + defer vt.lock.Unlock() + + if nv := vt.connected[id]; nv != nil { + vt.saveNode(id, nv) + delete(vt.connected, id) + } +} + +// GetNode returns an individual server node's value tracker. If it did not exist before +// then a new node is created. +func (vt *ValueTracker) GetNode(id enode.ID) *NodeValueTracker { + vt.lock.Lock() + defer vt.lock.Unlock() + + return vt.loadOrNewNode(id) +} + +// loadOrNewNode returns an individual server node's value tracker. If it did not exist before +// then a new node is created. +func (vt *ValueTracker) loadOrNewNode(id enode.ID) *NodeValueTracker { + if nv, ok := vt.connected[id]; ok { + return nv + } + nv := &NodeValueTracker{vt: vt, lastTransfer: vt.clock.Now()} + enc, err := vt.db.Get(append(vtNodeKey, id[:]...)) + if err != nil { + return nv + } + r := bytes.NewReader(enc) + var version uint + if err := rlp.Decode(r, &version); err != nil { + log.Error("Failed to decode node value tracker", "id", id, "err", err) + return nv + } + if version != nvtVersion { + log.Error("Unknown NodeValueTracker version", "stored", version, "current", nvtVersion) + return nv + } + var nve nodeValueTrackerEncV1 + if err := rlp.Decode(r, &nve); err != nil { + log.Error("Failed to decode node value tracker", "id", id, "err", err) + return nv + } + nv.rtStats = nve.RtStats + nv.lastRtStats = nve.RtStats + if int(nve.ServerBasketMapping) == vt.currentMapping { + nv.basket.basket = nve.ServerBasket + } else { + if nve.ServerBasketMapping >= uint(len(vt.mappings)) { + log.Error("Unknown request basket mapping", "stored", nve.ServerBasketMapping, "current", vt.currentMapping) + return nv + } + nv.basket.basket = nve.ServerBasket.convertMapping(vt.mappings[nve.ServerBasketMapping], vt.mappings[vt.currentMapping], vt.initRefBasket) + } + return nv +} + +// saveNode saves a server node's value tracker to the database +func (vt *ValueTracker) saveNode(id enode.ID, nv *NodeValueTracker) { + recentRtStats := nv.rtStats + recentRtStats.SubStats(&nv.lastRtStats) + vt.rtStats.AddStats(&recentRtStats) + nv.lastRtStats = nv.rtStats + + nve := nodeValueTrackerEncV1{ + RtStats: nv.rtStats, + ServerBasketMapping: uint(vt.currentMapping), + ServerBasket: nv.basket.basket, + } + enc1, err := rlp.EncodeToBytes(uint(nvtVersion)) + if err != nil { + log.Error("Failed to encode service value information", "id", id, "err", err) + return + } + enc2, err := rlp.EncodeToBytes(&nve) + if err != nil { + log.Error("Failed to encode service value information", "id", id, "err", err) + return + } + if err := vt.db.Put(append(vtNodeKey, id[:]...), append(enc1, enc2...)); err != nil { + log.Error("Failed to save service value information", "id", id, "err", err) + } +} + +// RtStats returns the global response time distribution statistics +func (vt *ValueTracker) RtStats() ResponseTimeStats { + vt.lock.Lock() + defer vt.lock.Unlock() + + vt.periodicUpdate() + return vt.rtStats +} + +// periodicUpdate transfers individual node data to the global statistics, normalizes +// the reference basket and updates request values. The global state is also saved to +// the database with each update. +func (vt *ValueTracker) periodicUpdate() { + now := vt.clock.Now() + vt.statsExpLock.Lock() + vt.statsExpFactor = utils.ExpFactor(vt.statsExpirer.LogOffset(now)) + vt.statsExpLock.Unlock() + + for _, nv := range vt.connected { + basket, rtStats := nv.transferStats(now, vt.transferRate) + vt.refBasket.add(basket) + vt.rtStats.AddStats(&rtStats) + } + vt.refBasket.normalize() + vt.refBasket.updateReqValues() + for _, nv := range vt.connected { + nv.updateCosts(nv.reqCosts, vt.refBasket.reqValues, vt.refBasket.reqValueFactor(nv.reqCosts)) + } + vt.saveToDb() +} + +type RequestStatsItem struct { + Name string + ReqAmount, ReqValue float64 +} + +// RequestStats returns the current contents of the reference request basket, with +// request values meaning average per request rather than total. +func (vt *ValueTracker) RequestStats() []RequestStatsItem { + vt.statsExpLock.RLock() + expFactor := vt.statsExpFactor + vt.statsExpLock.RUnlock() + vt.lock.Lock() + defer vt.lock.Unlock() + + vt.periodicUpdate() + res := make([]RequestStatsItem, len(vt.refBasket.basket.items)) + for i, item := range vt.refBasket.basket.items { + res[i].Name = vt.mappings[vt.currentMapping][i] + res[i].ReqAmount = expFactor.Value(float64(item.amount)/basketFactor, vt.refBasket.basket.exp) + res[i].ReqValue = vt.refBasket.reqValues[i] + } + return res +} diff --git a/les/vflux/client/valuetracker_test.go b/les/vflux/client/valuetracker_test.go new file mode 100644 index 00000000..87a337be --- /dev/null +++ b/les/vflux/client/valuetracker_test.go @@ -0,0 +1,135 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "math" + "math/rand" + "strconv" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/p2p/enode" + + "github.com/ethereum/go-ethereum/les/utils" +) + +const ( + testReqTypes = 3 + testNodeCount = 5 + testReqCount = 10000 + testRounds = 10 +) + +func TestValueTracker(t *testing.T) { + db := memorydb.New() + clock := &mclock.Simulated{} + requestList := make([]RequestInfo, testReqTypes) + relPrices := make([]float64, testReqTypes) + totalAmount := make([]uint64, testReqTypes) + for i := range requestList { + requestList[i] = RequestInfo{Name: "testreq" + strconv.Itoa(i), InitAmount: 1, InitValue: 1} + totalAmount[i] = 1 + relPrices[i] = rand.Float64() + 0.1 + } + nodes := make([]*NodeValueTracker, testNodeCount) + for round := 0; round < testRounds; round++ { + makeRequests := round < testRounds-2 + useExpiration := round == testRounds-1 + var expRate float64 + if useExpiration { + expRate = math.Log(2) / float64(time.Hour*100) + } + + vt := NewValueTracker(db, clock, requestList, time.Minute, 1/float64(time.Hour), expRate, expRate) + updateCosts := func(i int) { + costList := make([]uint64, testReqTypes) + baseCost := rand.Float64()*10000000 + 100000 + for j := range costList { + costList[j] = uint64(baseCost * relPrices[j]) + } + nodes[i].UpdateCosts(costList) + } + for i := range nodes { + nodes[i] = vt.Register(enode.ID{byte(i)}) + updateCosts(i) + } + if makeRequests { + for i := 0; i < testReqCount; i++ { + reqType := rand.Intn(testReqTypes) + reqAmount := rand.Intn(10) + 1 + node := rand.Intn(testNodeCount) + respTime := time.Duration((rand.Float64() + 1) * float64(time.Second) * float64(node+1) / testNodeCount) + totalAmount[reqType] += uint64(reqAmount) + nodes[node].Served([]ServedRequest{{uint32(reqType), uint32(reqAmount)}}, respTime) + clock.Run(time.Second) + } + } else { + clock.Run(time.Hour * 100) + if useExpiration { + for i, a := range totalAmount { + totalAmount[i] = a / 2 + } + } + } + vt.Stop() + var sumrp, sumrv float64 + for i, rp := range relPrices { + sumrp += rp + sumrv += vt.refBasket.reqValues[i] + } + for i, rp := range relPrices { + ratio := vt.refBasket.reqValues[i] * sumrp / (rp * sumrv) + if ratio < 0.99 || ratio > 1.01 { + t.Errorf("reqValues (%v) does not match relPrices (%v)", vt.refBasket.reqValues, relPrices) + break + } + } + exp := utils.ExpFactor(vt.StatsExpirer().LogOffset(clock.Now())) + basketAmount := make([]uint64, testReqTypes) + for i, bi := range vt.refBasket.basket.items { + basketAmount[i] += uint64(exp.Value(float64(bi.amount), vt.refBasket.basket.exp)) + } + if makeRequests { + // if we did not make requests in this round then we expect all amounts to be + // in the reference basket + for _, node := range nodes { + for i, bi := range node.basket.basket.items { + basketAmount[i] += uint64(exp.Value(float64(bi.amount), node.basket.basket.exp)) + } + } + } + for i, a := range basketAmount { + amount := a / basketFactor + if amount+10 < totalAmount[i] || amount > totalAmount[i]+10 { + t.Errorf("totalAmount[%d] mismatch in round %d (expected %d, got %d)", i, round, totalAmount[i], amount) + } + } + var sumValue float64 + for _, node := range nodes { + s := node.RtStats() + sumValue += s.Value(maxResponseWeights, exp) + } + s := vt.RtStats() + mainValue := s.Value(maxResponseWeights, exp) + if sumValue < mainValue-10 || sumValue > mainValue+10 { + t.Errorf("Main rtStats value does not match sum of node rtStats values in round %d (main %v, sum %v)", round, mainValue, sumValue) + } + } +} diff --git a/les/vflux/client/wrsiterator.go b/les/vflux/client/wrsiterator.go new file mode 100644 index 00000000..1b37cba6 --- /dev/null +++ b/les/vflux/client/wrsiterator.go @@ -0,0 +1,127 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "sync" + + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +// WrsIterator returns nodes from the specified selectable set with a weighted random +// selection. Selection weights are provided by a callback function. +type WrsIterator struct { + lock sync.Mutex + cond *sync.Cond + + ns *nodestate.NodeStateMachine + wrs *utils.WeightedRandomSelect + nextNode *enode.Node + closed bool +} + +// NewWrsIterator creates a new WrsIterator. Nodes are selectable if they have all the required +// and none of the disabled flags set. When a node is selected the selectedFlag is set which also +// disables further selectability until it is removed or times out. +func NewWrsIterator(ns *nodestate.NodeStateMachine, requireFlags, disableFlags nodestate.Flags, weightField nodestate.Field) *WrsIterator { + wfn := func(i interface{}) uint64 { + n := ns.GetNode(i.(enode.ID)) + if n == nil { + return 0 + } + wt, _ := ns.GetField(n, weightField).(uint64) + return wt + } + + w := &WrsIterator{ + ns: ns, + wrs: utils.NewWeightedRandomSelect(wfn), + } + w.cond = sync.NewCond(&w.lock) + + ns.SubscribeField(weightField, func(n *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + if state.HasAll(requireFlags) && state.HasNone(disableFlags) { + w.lock.Lock() + w.wrs.Update(n.ID()) + w.lock.Unlock() + w.cond.Signal() + } + }) + + ns.SubscribeState(requireFlags.Or(disableFlags), func(n *enode.Node, oldState, newState nodestate.Flags) { + oldMatch := oldState.HasAll(requireFlags) && oldState.HasNone(disableFlags) + newMatch := newState.HasAll(requireFlags) && newState.HasNone(disableFlags) + if newMatch == oldMatch { + return + } + + w.lock.Lock() + if newMatch { + w.wrs.Update(n.ID()) + } else { + w.wrs.Remove(n.ID()) + } + w.lock.Unlock() + w.cond.Signal() + }) + return w +} + +// Next selects the next node. +func (w *WrsIterator) Next() bool { + w.nextNode = w.chooseNode() + return w.nextNode != nil +} + +func (w *WrsIterator) chooseNode() *enode.Node { + w.lock.Lock() + defer w.lock.Unlock() + + for { + for !w.closed && w.wrs.IsEmpty() { + w.cond.Wait() + } + if w.closed { + return nil + } + // Choose the next node at random. Even though w.wrs is guaranteed + // non-empty here, Choose might return nil if all items have weight + // zero. + if c := w.wrs.Choose(); c != nil { + id := c.(enode.ID) + w.wrs.Remove(id) + return w.ns.GetNode(id) + } + } +} + +// Close ends the iterator. +func (w *WrsIterator) Close() { + w.lock.Lock() + w.closed = true + w.lock.Unlock() + w.cond.Signal() +} + +// Node returns the current node. +func (w *WrsIterator) Node() *enode.Node { + w.lock.Lock() + defer w.lock.Unlock() + return w.nextNode +} diff --git a/les/vflux/client/wrsiterator_test.go b/les/vflux/client/wrsiterator_test.go new file mode 100644 index 00000000..77bb5ee0 --- /dev/null +++ b/les/vflux/client/wrsiterator_test.go @@ -0,0 +1,103 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +var ( + testSetup = &nodestate.Setup{} + sfTest1 = testSetup.NewFlag("test1") + sfTest2 = testSetup.NewFlag("test2") + sfTest3 = testSetup.NewFlag("test3") + sfTest4 = testSetup.NewFlag("test4") + sfiTestWeight = testSetup.NewField("nodeWeight", reflect.TypeOf(uint64(0))) +) + +const iterTestNodeCount = 6 + +func TestWrsIterator(t *testing.T) { + ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) + w := NewWrsIterator(ns, sfTest2, sfTest3.Or(sfTest4), sfiTestWeight) + ns.Start() + for i := 1; i <= iterTestNodeCount; i++ { + ns.SetState(testNode(i), sfTest1, nodestate.Flags{}, 0) + ns.SetField(testNode(i), sfiTestWeight, uint64(1)) + } + next := func() int { + ch := make(chan struct{}) + go func() { + w.Next() + close(ch) + }() + select { + case <-ch: + case <-time.After(time.Second * 5): + t.Fatalf("Iterator.Next() timeout") + } + node := w.Node() + ns.SetState(node, sfTest4, nodestate.Flags{}, 0) + return testNodeIndex(node.ID()) + } + set := make(map[int]bool) + expset := func() { + for len(set) > 0 { + n := next() + if !set[n] { + t.Errorf("Item returned by iterator not in the expected set (got %d)", n) + } + delete(set, n) + } + } + + ns.SetState(testNode(1), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(2), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(3), sfTest2, nodestate.Flags{}, 0) + set[1] = true + set[2] = true + set[3] = true + expset() + ns.SetState(testNode(4), sfTest2, nodestate.Flags{}, 0) + ns.SetState(testNode(5), sfTest2.Or(sfTest3), nodestate.Flags{}, 0) + ns.SetState(testNode(6), sfTest2, nodestate.Flags{}, 0) + set[4] = true + set[6] = true + expset() + ns.SetField(testNode(2), sfiTestWeight, uint64(0)) + ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(2), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) + set[1] = true + set[3] = true + expset() + ns.SetField(testNode(2), sfiTestWeight, uint64(1)) + ns.SetState(testNode(2), nodestate.Flags{}, sfTest2, 0) + ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) + ns.SetState(testNode(2), sfTest2, sfTest4, 0) + ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) + set[1] = true + set[2] = true + set[3] = true + expset() + ns.Stop() +} diff --git a/les/vflux/requests.go b/les/vflux/requests.go new file mode 100644 index 00000000..7d4bafc1 --- /dev/null +++ b/les/vflux/requests.go @@ -0,0 +1,180 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package vflux + +import ( + "errors" + "math" + "math/big" + + "github.com/ethereum/go-ethereum/rlp" +) + +var ErrNoReply = errors.New("no reply for given request") + +const ( + MaxRequestLength = 16 // max number of individual requests in a batch + CapacityQueryName = "cq" + CapacityQueryMaxLen = 16 +) + +type ( + // Request describes a single vflux request inside a batch. Service and request + // type are identified by strings, parameters are RLP encoded. + Request struct { + Service, Name string + Params []byte + } + // Requests are a batch of vflux requests + Requests []Request + + // Replies are the replies to a batch of requests + Replies [][]byte + + // CapacityQueryReq is the encoding format of the capacity query + CapacityQueryReq struct { + Bias uint64 // seconds + AddTokens []IntOrInf + } + // CapacityQueryReq is the encoding format of the response to the capacity query + CapacityQueryReply []uint64 +) + +// Add encodes and adds a new request to the batch +func (r *Requests) Add(service, name string, val interface{}) (int, error) { + enc, err := rlp.EncodeToBytes(val) + if err != nil { + return -1, err + } + *r = append(*r, Request{ + Service: service, + Name: name, + Params: enc, + }) + return len(*r) - 1, nil +} + +// Get decodes the reply to the i-th request in the batch +func (r Replies) Get(i int, val interface{}) error { + if i < 0 || i >= len(r) { + return ErrNoReply + } + return rlp.DecodeBytes(r[i], val) +} + +const ( + IntNonNegative = iota + IntNegative + IntPlusInf + IntMinusInf +) + +// IntOrInf is the encoding format for arbitrary length signed integers that can also +// hold the values of +Inf or -Inf +type IntOrInf struct { + Type uint8 + Value big.Int +} + +// BigInt returns the value as a big.Int or panics if the value is infinity +func (i *IntOrInf) BigInt() *big.Int { + switch i.Type { + case IntNonNegative: + return new(big.Int).Set(&i.Value) + case IntNegative: + return new(big.Int).Neg(&i.Value) + case IntPlusInf: + panic(nil) // caller should check Inf() before trying to convert to big.Int + case IntMinusInf: + panic(nil) + } + return &big.Int{} // invalid type decodes to 0 value +} + +// Inf returns 1 if the value is +Inf, -1 if it is -Inf, 0 otherwise +func (i *IntOrInf) Inf() int { + switch i.Type { + case IntPlusInf: + return 1 + case IntMinusInf: + return -1 + } + return 0 // invalid type decodes to 0 value +} + +// Int64 limits the value between MinInt64 and MaxInt64 (even if it is +-Inf) and returns an int64 type +func (i *IntOrInf) Int64() int64 { + switch i.Type { + case IntNonNegative: + if i.Value.IsInt64() { + return i.Value.Int64() + } else { + return math.MaxInt64 + } + case IntNegative: + if i.Value.IsInt64() { + return -i.Value.Int64() + } else { + return math.MinInt64 + } + case IntPlusInf: + return math.MaxInt64 + case IntMinusInf: + return math.MinInt64 + } + return 0 // invalid type decodes to 0 value +} + +// SetBigInt sets the value to the given big.Int +func (i *IntOrInf) SetBigInt(v *big.Int) { + if v.Sign() >= 0 { + i.Type = IntNonNegative + i.Value.Set(v) + } else { + i.Type = IntNegative + i.Value.Neg(v) + } +} + +// SetInt64 sets the value to the given int64. Note that MaxInt64 translates to +Inf +// while MinInt64 translates to -Inf. +func (i *IntOrInf) SetInt64(v int64) { + if v >= 0 { + if v == math.MaxInt64 { + i.Type = IntPlusInf + } else { + i.Type = IntNonNegative + i.Value.SetInt64(v) + } + } else { + if v == math.MinInt64 { + i.Type = IntMinusInf + } else { + i.Type = IntNegative + i.Value.SetInt64(-v) + } + } +} + +// SetInf sets the value to +Inf or -Inf +func (i *IntOrInf) SetInf(sign int) { + if sign == 1 { + i.Type = IntPlusInf + } else { + i.Type = IntMinusInf + } +} diff --git a/les/vflux/server/balance.go b/les/vflux/server/balance.go new file mode 100644 index 00000000..b09f7bb5 --- /dev/null +++ b/les/vflux/server/balance.go @@ -0,0 +1,693 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "errors" + "math" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +var errBalanceOverflow = errors.New("balance overflow") + +const maxBalance = math.MaxInt64 // maximum allowed balance value + +const ( + balanceCallbackUpdate = iota // called when priority drops below the last minimum estimate + balanceCallbackZero // called when priority drops to zero (positive balance exhausted) + balanceCallbackCount // total number of balance callbacks +) + +// 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 +} + +// connectionPrice returns the price of connection per nanosecond at the given capacity +// and the estimated average request cost. +func (p PriceFactors) connectionPrice(cap uint64, avgReqCost float64) float64 { + return p.TimeFactor + float64(cap)*p.CapacityFactor/1000000 + p.RequestFactor*avgReqCost +} + +type ( + // nodePriority interface provides current and estimated future priorities on demand + nodePriority interface { + // priority should return the current priority of the node (higher is better) + priority(cap uint64) int64 + // estimatePriority should return a lower estimate for the minimum of the node priority + // value starting from the current moment until the given time. If the priority goes + // under the returned estimate before the specified moment then it is the caller's + // responsibility to signal with updateFlag. + estimatePriority(cap uint64, addBalance int64, future, bias time.Duration, update bool) int64 + } + + // ReadOnlyBalance provides read-only operations on the node balance + ReadOnlyBalance interface { + nodePriority + GetBalance() (uint64, uint64) + GetRawBalance() (utils.ExpiredValue, utils.ExpiredValue) + GetPriceFactors() (posFactor, negFactor PriceFactors) + } + + // ConnectedBalance provides operations permitted on connected nodes (non-read-only + // operations are not permitted inside a BalanceOperation) + ConnectedBalance interface { + ReadOnlyBalance + SetPriceFactors(posFactor, negFactor PriceFactors) + RequestServed(cost uint64) uint64 + } + + // AtomicBalanceOperator provides operations permitted in an atomic BalanceOperation + AtomicBalanceOperator interface { + ReadOnlyBalance + AddBalance(amount int64) (uint64, uint64, error) + SetBalance(pos, neg uint64) error + } +) + +// nodeBalance keeps track of the positive and negative balances of a connected +// client and calculates actual and projected future priority values. +// Implements nodePriority interface. +type nodeBalance struct { + bt *balanceTracker + lock sync.RWMutex + node *enode.Node + connAddress string + active, hasPriority, setFlags bool + capacity uint64 + balance balance + posFactor, negFactor PriceFactors + 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 utils.ExpiredValue + posExp, negExp utils.ValueExpirer +} + +// posValue returns the value of positive balance at a given timestamp. +func (b balance) posValue(now mclock.AbsTime) uint64 { + return b.pos.Value(b.posExp.LogOffset(now)) +} + +// negValue returns the value of negative balance at a given timestamp. +func (b balance) negValue(now mclock.AbsTime) uint64 { + return b.neg.Value(b.negExp.LogOffset(now)) +} + +// addValue adds the value of a given amount to the balance. The original value and +// updated value will also be returned if the addition is successful. +// Returns the error if the given value is too large and the value overflows. +func (b *balance) addValue(now mclock.AbsTime, amount int64, pos bool, force bool) (uint64, uint64, int64, error) { + var ( + val utils.ExpiredValue + offset utils.Fixed64 + ) + if pos { + offset, val = b.posExp.LogOffset(now), b.pos + } else { + offset, val = b.negExp.LogOffset(now), b.neg + } + old := val.Value(offset) + if amount > 0 && (amount > maxBalance || old > maxBalance-uint64(amount)) { + if !force { + return old, 0, 0, errBalanceOverflow + } + val = utils.ExpiredValue{} + amount = maxBalance + } + net := val.Add(amount, offset) + if pos { + b.pos = val + } else { + b.neg = val + } + return old, val.Value(offset), net, nil +} + +// setValue sets the internal balance amount to the given values. Returns the +// error if the given value is too large. +func (b *balance) setValue(now mclock.AbsTime, pos uint64, neg uint64) error { + if pos > maxBalance || neg > maxBalance { + return errBalanceOverflow + } + var pb, nb utils.ExpiredValue + pb.Add(int64(pos), b.posExp.LogOffset(now)) + nb.Add(int64(neg), b.negExp.LogOffset(now)) + b.pos = pb + b.neg = nb + return nil +} + +// balanceCallback represents a single callback that is activated when client priority +// reaches the given threshold +type balanceCallback struct { + id int + threshold int64 + callback func() +} + +// GetBalance returns the current positive and negative balance. +func (n *nodeBalance) GetBalance() (uint64, uint64) { + n.lock.Lock() + defer n.lock.Unlock() + + now := n.bt.clock.Now() + n.updateBalance(now) + return n.balance.posValue(now), n.balance.negValue(now) +} + +// GetRawBalance returns the current positive and negative balance +// but in the raw(expired value) format. +func (n *nodeBalance) GetRawBalance() (utils.ExpiredValue, utils.ExpiredValue) { + n.lock.Lock() + defer n.lock.Unlock() + + now := n.bt.clock.Now() + n.updateBalance(now) + return n.balance.pos, n.balance.neg +} + +// AddBalance adds the given amount to the positive balance and returns the balance +// before and after the operation. Exceeding maxBalance results in an error (balance is +// unchanged) while adding a negative amount higher than the current balance results in +// zero balance. +// Note: this function should run inside a NodeStateMachine operation +func (n *nodeBalance) AddBalance(amount int64) (uint64, uint64, error) { + var ( + err error + old, new uint64 + now = n.bt.clock.Now() + callbacks []func() + setPriority bool + ) + // Operation with holding the lock + n.bt.updateTotalBalance(n, func() bool { + n.updateBalance(now) + if old, new, _, err = n.balance.addValue(now, amount, true, false); err != nil { + return false + } + callbacks, setPriority = n.checkCallbacks(now), n.checkPriorityStatus() + n.storeBalance(true, false) + return true + }) + if err != nil { + return old, old, err + } + // Operation without holding the lock + for _, cb := range callbacks { + cb() + } + if n.setFlags { + if setPriority { + n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) + } + // Note: priority flag is automatically removed by the zero priority callback if necessary + n.signalPriorityUpdate() + } + return old, new, nil +} + +// SetBalance sets the positive and negative balance to the given values +// Note: this function should run inside a NodeStateMachine operation +func (n *nodeBalance) SetBalance(pos, neg uint64) error { + var ( + now = n.bt.clock.Now() + callbacks []func() + setPriority bool + ) + // Operation with holding the lock + n.bt.updateTotalBalance(n, func() bool { + n.updateBalance(now) + if err := n.balance.setValue(now, pos, neg); err != nil { + return false + } + callbacks, setPriority = n.checkCallbacks(now), n.checkPriorityStatus() + n.storeBalance(true, true) + return true + }) + // Operation without holding the lock + for _, cb := range callbacks { + cb() + } + if n.setFlags { + if setPriority { + n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) + } + // Note: priority flag is automatically removed by the zero priority callback if necessary + n.signalPriorityUpdate() + } + return nil +} + +// RequestServed should be called after serving a request for the given peer +func (n *nodeBalance) RequestServed(cost uint64) (newBalance uint64) { + n.lock.Lock() + + var ( + check bool + fcost = float64(cost) + now = n.bt.clock.Now() + ) + n.updateBalance(now) + if !n.balance.pos.IsZero() { + posCost := -int64(fcost * n.posFactor.RequestFactor) + if posCost == 0 { + fcost = 0 + newBalance = n.balance.posValue(now) + } else { + var net int64 + _, newBalance, net, _ = n.balance.addValue(now, posCost, true, false) + if posCost == net { + fcost = 0 + } else { + fcost *= 1 - float64(net)/float64(posCost) + } + check = true + } + } + if fcost > 0 && n.negFactor.RequestFactor != 0 { + n.balance.addValue(now, int64(fcost*n.negFactor.RequestFactor), false, false) + check = true + } + n.sumReqCost += cost + + var callbacks []func() + if check { + callbacks = n.checkCallbacks(now) + } + n.lock.Unlock() + + if callbacks != nil { + n.bt.ns.Operation(func() { + for _, cb := range callbacks { + cb() + } + }) + } + return +} + +// priority returns the actual priority based on the current balance +func (n *nodeBalance) priority(capacity uint64) int64 { + n.lock.Lock() + defer n.lock.Unlock() + + now := n.bt.clock.Now() + n.updateBalance(now) + return n.balanceToPriority(now, n.balance, capacity) +} + +// EstMinPriority gives a lower estimate for the priority at a given time in the future. +// An average request cost per time is assumed that is twice the average cost per time +// in the current session. +// If update is true then a priority callback is added that turns updateFlag on and off +// in case the priority goes below the estimated minimum. +func (n *nodeBalance) estimatePriority(capacity uint64, addBalance int64, future, bias time.Duration, update bool) int64 { + n.lock.Lock() + defer n.lock.Unlock() + + now := n.bt.clock.Now() + n.updateBalance(now) + + b := n.balance // copy the balance + if addBalance != 0 { + b.addValue(now, addBalance, true, true) + } + if future > 0 { + var avgReqCost float64 + dt := time.Duration(n.lastUpdate - n.initTime) + if dt > time.Second { + avgReqCost = float64(n.sumReqCost) * 2 / float64(dt) + } + b = n.reducedBalance(b, now, future, capacity, avgReqCost) + } + if bias > 0 { + b = n.reducedBalance(b, now.Add(future), bias, capacity, 0) + } + pri := n.balanceToPriority(now, b, capacity) + // Ensure that biased estimates are always lower than actual priorities, even if + // the bias is very small. + // This ensures that two nodes will not ping-pong update signals forever if both of + // them have zero estimated priority drop in the projected future. + current := n.balanceToPriority(now, n.balance, capacity) + if pri >= current { + pri = current - 1 + } + if update { + n.addCallback(balanceCallbackUpdate, pri, n.signalPriorityUpdate) + } + return pri +} + +// SetPriceFactors sets the price factors. TimeFactor is the price of a nanosecond of +// connection while RequestFactor is the price of a request cost unit. +func (n *nodeBalance) SetPriceFactors(posFactor, negFactor PriceFactors) { + n.lock.Lock() + now := n.bt.clock.Now() + n.updateBalance(now) + n.posFactor, n.negFactor = posFactor, negFactor + callbacks := n.checkCallbacks(now) + n.lock.Unlock() + if callbacks != nil { + n.bt.ns.Operation(func() { + for _, cb := range callbacks { + cb() + } + }) + } +} + +// GetPriceFactors returns the price factors +func (n *nodeBalance) GetPriceFactors() (posFactor, negFactor PriceFactors) { + n.lock.Lock() + defer n.lock.Unlock() + + return n.posFactor, n.negFactor +} + +// activate starts time/capacity cost deduction. +func (n *nodeBalance) activate() { + n.bt.updateTotalBalance(n, func() bool { + if n.active { + return false + } + n.active = true + n.lastUpdate = n.bt.clock.Now() + return true + }) +} + +// deactivate stops time/capacity cost deduction and saves the balances in the database +func (n *nodeBalance) deactivate() { + n.bt.updateTotalBalance(n, func() bool { + if !n.active { + return false + } + n.updateBalance(n.bt.clock.Now()) + if n.updateEvent != nil { + n.updateEvent.Stop() + n.updateEvent = nil + } + n.storeBalance(true, true) + n.active = false + return true + }) +} + +// updateBalance updates balance based on the time factor +func (n *nodeBalance) updateBalance(now mclock.AbsTime) { + if n.active && now > n.lastUpdate { + n.balance = n.reducedBalance(n.balance, n.lastUpdate, time.Duration(now-n.lastUpdate), n.capacity, 0) + n.lastUpdate = now + } +} + +// storeBalance stores the positive and/or negative balance of the node in the database +func (n *nodeBalance) storeBalance(pos, neg bool) { + if pos { + n.bt.storeBalance(n.node.ID().Bytes(), false, n.balance.pos) + } + if neg { + n.bt.storeBalance([]byte(n.connAddress), true, n.balance.neg) + } +} + +// addCallback 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. +// Note: should be called while n.lock is held +// Note 2: the callback function runs inside a NodeStateMachine operation +func (n *nodeBalance) addCallback(id int, threshold int64, callback func()) { + n.removeCallback(id) + idx := 0 + for idx < n.callbackCount && threshold > n.callbacks[idx].threshold { + idx++ + } + for i := n.callbackCount - 1; i >= idx; i-- { + n.callbackIndex[n.callbacks[i].id]++ + n.callbacks[i+1] = n.callbacks[i] + } + n.callbackCount++ + n.callbackIndex[id] = idx + n.callbacks[idx] = balanceCallback{id, threshold, callback} + now := n.bt.clock.Now() + n.updateBalance(now) + n.scheduleCheck(now) +} + +// removeCallback removes the given callback and returns true if it was active +// Note: should be called while n.lock is held +func (n *nodeBalance) removeCallback(id int) bool { + idx := n.callbackIndex[id] + if idx == -1 { + return false + } + n.callbackIndex[id] = -1 + for i := idx; i < n.callbackCount-1; i++ { + n.callbackIndex[n.callbacks[i+1].id]-- + n.callbacks[i] = n.callbacks[i+1] + } + n.callbackCount-- + return true +} + +// checkCallbacks checks whether the threshold of any of the active callbacks +// have been reached and returns triggered callbacks. +// Note: checkCallbacks assumes that the balance has been recently updated. +func (n *nodeBalance) checkCallbacks(now mclock.AbsTime) (callbacks []func()) { + if n.callbackCount == 0 || n.capacity == 0 { + return + } + pri := n.balanceToPriority(now, n.balance, n.capacity) + for n.callbackCount != 0 && n.callbacks[n.callbackCount-1].threshold >= pri { + n.callbackCount-- + n.callbackIndex[n.callbacks[n.callbackCount].id] = -1 + callbacks = append(callbacks, n.callbacks[n.callbackCount].callback) + } + n.scheduleCheck(now) + return +} + +// scheduleCheck sets up or updates a scheduled event to ensure that it will be called +// again just after the next threshold has been reached. +func (n *nodeBalance) scheduleCheck(now mclock.AbsTime) { + if n.callbackCount != 0 { + d, ok := n.timeUntil(n.callbacks[n.callbackCount-1].threshold) + if !ok { + n.nextUpdate = 0 + n.updateAfter(0) + return + } + if n.nextUpdate == 0 || n.nextUpdate > now.Add(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 + } + n.nextUpdate = now.Add(d) + n.updateAfter(d) + } + } else { + n.nextUpdate = 0 + n.updateAfter(0) + } +} + +// updateAfter schedules a balance update and callback check in the future +func (n *nodeBalance) updateAfter(dt time.Duration) { + if n.updateEvent == nil || n.updateEvent.Stop() { + if dt == 0 { + n.updateEvent = nil + } else { + n.updateEvent = n.bt.clock.AfterFunc(dt, func() { + var callbacks []func() + n.lock.Lock() + if n.callbackCount != 0 { + now := n.bt.clock.Now() + n.updateBalance(now) + callbacks = n.checkCallbacks(now) + } + n.lock.Unlock() + if callbacks != nil { + n.bt.ns.Operation(func() { + for _, cb := range callbacks { + cb() + } + }) + } + }) + } + } +} + +// balanceExhausted should be called when the positive balance is exhausted (priority goes to zero/negative) +// Note: this function should run inside a NodeStateMachine operation +func (n *nodeBalance) balanceExhausted() { + n.lock.Lock() + n.storeBalance(true, false) + n.hasPriority = false + n.lock.Unlock() + if n.setFlags { + n.bt.ns.SetStateSub(n.node, nodestate.Flags{}, n.bt.setup.priorityFlag, 0) + } +} + +// checkPriorityStatus checks whether the node has gained priority status and sets the priority +// callback and flag if necessary. It assumes that the balance has been recently updated. +// Note that the priority flag has to be set by the caller after the mutex has been released. +func (n *nodeBalance) checkPriorityStatus() bool { + if !n.hasPriority && !n.balance.pos.IsZero() { + n.hasPriority = true + n.addCallback(balanceCallbackZero, 0, func() { n.balanceExhausted() }) + return true + } + return false +} + +// signalPriorityUpdate signals that the priority fell below the previous minimum estimate +// Note: this function should run inside a NodeStateMachine operation +func (n *nodeBalance) signalPriorityUpdate() { + n.bt.ns.SetStateSub(n.node, n.bt.setup.updateFlag, nodestate.Flags{}, 0) + n.bt.ns.SetStateSub(n.node, nodestate.Flags{}, n.bt.setup.updateFlag, 0) +} + +// setCapacity updates the capacity value used for priority calculation +// Note: capacity should never be zero +// Note 2: this function should run inside a NodeStateMachine operation +func (n *nodeBalance) setCapacity(capacity uint64) { + n.lock.Lock() + now := n.bt.clock.Now() + n.updateBalance(now) + n.capacity = capacity + callbacks := n.checkCallbacks(now) + n.lock.Unlock() + for _, cb := range callbacks { + cb() + } +} + +// balanceToPriority converts a balance to a priority value. Lower priority means +// first to disconnect. Positive balance translates to positive priority. If positive +// balance is zero then negative balance translates to a negative priority. +func (n *nodeBalance) balanceToPriority(now mclock.AbsTime, b balance, capacity uint64) int64 { + pos := b.posValue(now) + if pos > 0 { + return int64(pos / capacity) + } + return -int64(b.negValue(now)) +} + +// priorityToBalance converts a target priority to a requested balance value. +// If the priority is negative, then minimal negative balance is returned; +// otherwise the minimal positive balance is returned. +func (n *nodeBalance) priorityToBalance(priority int64, capacity uint64) (uint64, uint64) { + if priority > 0 { + return uint64(priority) * n.capacity, 0 + } + return 0, uint64(-priority) +} + +// reducedBalance estimates the reduced balance at a given time in the future based +// on the given balance, the time factor and an estimated average request cost per time ratio +func (n *nodeBalance) reducedBalance(b balance, start mclock.AbsTime, dt time.Duration, capacity uint64, avgReqCost float64) balance { + // since the costs are applied continuously during the dt time period we calculate + // the expiration offset at the middle of the period + var ( + at = start.Add(dt / 2) + dtf = float64(dt) + ) + if !b.pos.IsZero() { + factor := n.posFactor.connectionPrice(capacity, avgReqCost) + diff := -int64(dtf * factor) + _, _, net, _ := b.addValue(at, diff, true, false) + if net == diff { + dtf = 0 + } else { + dtf += float64(net) / factor + } + } + if dtf > 0 { + factor := n.negFactor.connectionPrice(capacity, avgReqCost) + b.addValue(at, int64(dtf*factor), false, false) + } + 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. If it has already been reached then (0, true) +// is returned. +// Note: the function assumes that the balance has been recently updated and +// calculates the time starting from the last update. +func (n *nodeBalance) timeUntil(priority int64) (time.Duration, bool) { + var ( + now = n.bt.clock.Now() + pos = n.balance.posValue(now) + targetPos, targetNeg = n.priorityToBalance(priority, n.capacity) + diffTime float64 + ) + if pos > 0 { + timePrice := n.posFactor.connectionPrice(n.capacity, 0) + if timePrice < 1e-100 { + return 0, false + } + if targetPos > 0 { + if targetPos > pos { + return 0, true + } + diffTime = float64(pos-targetPos) / timePrice + return time.Duration(diffTime), true + } else { + diffTime = float64(pos) / timePrice + } + } else { + if targetPos > 0 { + return 0, true + } + } + neg := n.balance.negValue(now) + if targetNeg > neg { + timePrice := n.negFactor.connectionPrice(n.capacity, 0) + if timePrice < 1e-100 { + return 0, false + } + diffTime += float64(targetNeg-neg) / timePrice + } + return time.Duration(diffTime), true +} diff --git a/les/vflux/server/balance_test.go b/les/vflux/server/balance_test.go new file mode 100644 index 00000000..7c100aab --- /dev/null +++ b/les/vflux/server/balance_test.go @@ -0,0 +1,439 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "math" + "math/rand" + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +type zeroExpirer struct{} + +func (z zeroExpirer) SetRate(now mclock.AbsTime, rate float64) {} +func (z zeroExpirer) SetLogOffset(now mclock.AbsTime, logOffset utils.Fixed64) {} +func (z zeroExpirer) LogOffset(now mclock.AbsTime) utils.Fixed64 { return 0 } + +type balanceTestClient struct{} + +func (client balanceTestClient) FreeClientId() string { return "" } + +type balanceTestSetup struct { + clock *mclock.Simulated + db ethdb.KeyValueStore + ns *nodestate.NodeStateMachine + setup *serverSetup + bt *balanceTracker +} + +func newBalanceTestSetup(db ethdb.KeyValueStore, posExp, negExp utils.ValueExpirer) *balanceTestSetup { + // Initialize and customize the setup for the balance testing + clock := &mclock.Simulated{} + setup := newServerSetup() + setup.clientField = setup.setup.NewField("balanceTestClient", reflect.TypeOf(balanceTestClient{})) + + ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) + if posExp == nil { + posExp = zeroExpirer{} + } + if negExp == nil { + negExp = zeroExpirer{} + } + if db == nil { + db = memorydb.New() + } + bt := newBalanceTracker(ns, setup, db, clock, posExp, negExp) + ns.Start() + return &balanceTestSetup{ + clock: clock, + db: db, + ns: ns, + setup: setup, + bt: bt, + } +} + +func (b *balanceTestSetup) newNode(capacity uint64) *nodeBalance { + node := enode.SignNull(&enr.Record{}, enode.ID{}) + b.ns.SetField(node, b.setup.clientField, balanceTestClient{}) + if capacity != 0 { + b.ns.SetField(node, b.setup.capacityField, capacity) + } + n, _ := b.ns.GetField(node, b.setup.balanceField).(*nodeBalance) + return n +} + +func (b *balanceTestSetup) setBalance(node *nodeBalance, pos, neg uint64) (err error) { + b.bt.BalanceOperation(node.node.ID(), node.connAddress, func(balance AtomicBalanceOperator) { + err = balance.SetBalance(pos, neg) + }) + return +} + +func (b *balanceTestSetup) addBalance(node *nodeBalance, add int64) (old, new uint64, err error) { + b.bt.BalanceOperation(node.node.ID(), node.connAddress, func(balance AtomicBalanceOperator) { + old, new, err = balance.AddBalance(add) + }) + return +} + +func (b *balanceTestSetup) stop() { + b.bt.stop() + b.ns.Stop() +} + +func TestAddBalance(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + + node := b.newNode(1000) + var inputs = []struct { + delta int64 + expect [2]uint64 + total uint64 + expectErr bool + }{ + {100, [2]uint64{0, 100}, 100, false}, + {-100, [2]uint64{100, 0}, 0, false}, + {-100, [2]uint64{0, 0}, 0, false}, + {1, [2]uint64{0, 1}, 1, false}, + {maxBalance, [2]uint64{0, 0}, 0, true}, + } + for _, i := range inputs { + old, new, err := b.addBalance(node, i.delta) + if i.expectErr { + if err == nil { + t.Fatalf("Expect get error but nil") + } + continue + } else if err != nil { + t.Fatalf("Expect get no error but %v", err) + } + if old != i.expect[0] || new != i.expect[1] { + t.Fatalf("Positive balance mismatch, got %v -> %v", old, new) + } + if b.bt.TotalTokenAmount() != i.total { + t.Fatalf("Total positive balance mismatch, want %v, got %v", i.total, b.bt.TotalTokenAmount()) + } + } +} + +func TestSetBalance(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000) + + var inputs = []struct { + pos, neg uint64 + }{ + {1000, 0}, + {0, 1000}, + {1000, 1000}, + } + for _, i := range inputs { + b.setBalance(node, i.pos, i.neg) + pos, neg := node.GetBalance() + if pos != i.pos { + t.Fatalf("Positive balance mismatch, want %v, got %v", i.pos, pos) + } + if neg != i.neg { + t.Fatalf("Negative balance mismatch, want %v, got %v", i.neg, neg) + } + } +} + +func TestBalanceTimeCost(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000) + + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + b.setBalance(node, uint64(time.Minute), 0) // 1 minute time allowance + + var inputs = []struct { + runTime time.Duration + expPos uint64 + expNeg uint64 + }{ + {time.Second, uint64(time.Second * 59), 0}, + {0, uint64(time.Second * 59), 0}, + {time.Second * 59, 0, 0}, + {time.Second, 0, uint64(time.Second)}, + } + for _, i := range inputs { + b.clock.Run(i.runTime) + if pos, _ := node.GetBalance(); pos != i.expPos { + t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) + } + if _, neg := node.GetBalance(); neg != i.expNeg { + t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) + } + } + + b.setBalance(node, uint64(time.Minute), 0) // Refill 1 minute time allowance + for _, i := range inputs { + b.clock.Run(i.runTime) + if pos, _ := node.GetBalance(); pos != i.expPos { + t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) + } + if _, neg := node.GetBalance(); neg != i.expNeg { + t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) + } + } +} + +func TestBalanceReqCost(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + + b.setBalance(node, uint64(time.Minute), 0) // 1 minute time serving time allowance + var inputs = []struct { + reqCost uint64 + expPos uint64 + expNeg uint64 + }{ + {uint64(time.Second), uint64(time.Second * 59), 0}, + {0, uint64(time.Second * 59), 0}, + {uint64(time.Second * 59), 0, 0}, + {uint64(time.Second), 0, uint64(time.Second)}, + } + for _, i := range inputs { + node.RequestServed(i.reqCost) + if pos, _ := node.GetBalance(); pos != i.expPos { + t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) + } + if _, neg := node.GetBalance(); neg != i.expNeg { + t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) + } + } +} + +func TestBalanceToPriority(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + + var inputs = []struct { + pos uint64 + neg uint64 + priority int64 + }{ + {1000, 0, 1}, + {2000, 0, 2}, // Higher balance, higher priority value + {0, 0, 0}, + {0, 1000, -1000}, + } + for _, i := range inputs { + b.setBalance(node, i.pos, i.neg) + priority := node.priority(1000) + if priority != i.priority { + t.Fatalf("priority mismatch, want %v, got %v", i.priority, priority) + } + } +} + +func TestEstimatedPriority(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000000000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + b.setBalance(node, uint64(time.Minute), 0) + var inputs = []struct { + runTime time.Duration // time cost + futureTime time.Duration // diff of future time + reqCost uint64 // single request cost + priority int64 // expected estimated priority + }{ + {time.Second, time.Second, 0, 58}, + {0, time.Second, 0, 58}, + + // 2 seconds time cost, 1 second estimated time cost, 10^9 request cost, + // 10^9 estimated request cost per second. + {time.Second, time.Second, 1000000000, 55}, + + // 3 seconds time cost, 3 second estimated time cost, 10^9*2 request cost, + // 4*10^9 estimated request cost. + {time.Second, 3 * time.Second, 1000000000, 48}, + + // All positive balance is used up + {time.Second * 55, 0, 0, -1}, + + // 1 minute estimated time cost, 4/58 * 10^9 estimated request cost per sec. + {0, time.Minute, 0, -int64(time.Minute) - int64(time.Second)*120/29}, + } + for _, i := range inputs { + b.clock.Run(i.runTime) + node.RequestServed(i.reqCost) + priority := node.estimatePriority(1000000000, 0, i.futureTime, 0, false) + if priority != i.priority { + t.Fatalf("Estimated priority mismatch, want %v, got %v", i.priority, priority) + } + } +} + +func TestPositiveBalanceCounting(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + + var nodes []*nodeBalance + for i := 0; i < 100; i += 1 { + node := b.newNode(1000000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + nodes = append(nodes, node) + } + + // Allocate service token + var sum uint64 + for i := 0; i < 100; i += 1 { + amount := int64(rand.Intn(100) + 100) + b.addBalance(nodes[i], amount) + sum += uint64(amount) + } + if b.bt.TotalTokenAmount() != sum { + t.Fatalf("Invalid token amount") + } + + // Change client status + for i := 0; i < 100; i += 1 { + if rand.Intn(2) == 0 { + b.ns.SetField(nodes[i].node, b.setup.capacityField, uint64(1)) + } + } + if b.bt.TotalTokenAmount() != sum { + t.Fatalf("Invalid token amount") + } + for i := 0; i < 100; i += 1 { + if rand.Intn(2) == 0 { + b.ns.SetField(nodes[i].node, b.setup.capacityField, uint64(1)) + } + } + if b.bt.TotalTokenAmount() != sum { + t.Fatalf("Invalid token amount") + } +} + +func TestCallbackChecking(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + + var inputs = []struct { + priority int64 + expDiff time.Duration + }{ + {500, time.Millisecond * 500}, + {0, time.Second}, + {-int64(time.Second), 2 * time.Second}, + } + b.setBalance(node, uint64(time.Second), 0) + for _, i := range inputs { + diff, _ := node.timeUntil(i.priority) + if diff != i.expDiff { + t.Fatalf("Time difference mismatch, want %v, got %v", i.expDiff, diff) + } + } +} + +func TestCallback(t *testing.T) { + b := newBalanceTestSetup(nil, nil, nil) + defer b.stop() + node := b.newNode(1000) + node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) + + callCh := make(chan struct{}, 1) + b.setBalance(node, uint64(time.Minute), 0) + node.addCallback(balanceCallbackZero, 0, func() { callCh <- struct{}{} }) + + b.clock.Run(time.Minute) + select { + case <-callCh: + case <-time.NewTimer(time.Second).C: + t.Fatalf("Callback hasn't been called yet") + } + + b.setBalance(node, uint64(time.Minute), 0) + node.addCallback(balanceCallbackZero, 0, func() { callCh <- struct{}{} }) + node.removeCallback(balanceCallbackZero) + + b.clock.Run(time.Minute) + select { + case <-callCh: + t.Fatalf("Callback shouldn't be called") + case <-time.NewTimer(time.Millisecond * 100).C: + } +} + +func TestBalancePersistence(t *testing.T) { + posExp := &utils.Expirer{} + negExp := &utils.Expirer{} + posExp.SetRate(0, math.Log(2)/float64(time.Hour*2)) // halves every two hours + negExp.SetRate(0, math.Log(2)/float64(time.Hour)) // halves every hour + setup := newBalanceTestSetup(nil, posExp, negExp) + + exp := func(balance *nodeBalance, expPos, expNeg uint64) { + pos, neg := balance.GetBalance() + if pos != expPos { + t.Fatalf("Positive balance incorrect, want %v, got %v", expPos, pos) + } + if neg != expNeg { + t.Fatalf("Positive balance incorrect, want %v, got %v", expPos, pos) + } + } + expTotal := func(expTotal uint64) { + total := setup.bt.TotalTokenAmount() + if total != expTotal { + t.Fatalf("Total token amount incorrect, want %v, got %v", expTotal, total) + } + } + + expTotal(0) + balance := setup.newNode(0) + expTotal(0) + setup.setBalance(balance, 16000000000, 16000000000) + exp(balance, 16000000000, 16000000000) + expTotal(16000000000) + + setup.clock.Run(time.Hour * 2) + exp(balance, 8000000000, 4000000000) + expTotal(8000000000) + setup.stop() + + // Test the functionalities after restart + setup = newBalanceTestSetup(setup.db, posExp, negExp) + expTotal(8000000000) + balance = setup.newNode(0) + exp(balance, 8000000000, 4000000000) + expTotal(8000000000) + setup.clock.Run(time.Hour * 2) + exp(balance, 4000000000, 1000000000) + expTotal(4000000000) + setup.stop() +} diff --git a/les/vflux/server/balance_tracker.go b/les/vflux/server/balance_tracker.go new file mode 100644 index 00000000..9695e796 --- /dev/null +++ b/les/vflux/server/balance_tracker.go @@ -0,0 +1,300 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +const ( + posThreshold = 1000000 // minimum positive balance that is persisted in the database + negThreshold = 1000000 // minimum negative balance that is persisted in the database + persistExpirationRefresh = time.Minute * 5 // refresh period of the token expiration persistence +) + +// balanceTracker tracks positive and negative balances for connected nodes. +// After clientField is set externally, a nodeBalance is created and previous +// balance values are loaded from the database. Both balances are exponentially expired +// values. Costs are deducted from the positive balance if present, otherwise added to +// the negative balance. If the capacity is non-zero then a time cost is applied +// continuously while individual request costs are applied immediately. +// The two balances are translated into a single priority value that also depends +// on the actual capacity. +type balanceTracker struct { + setup *serverSetup + clock mclock.Clock + lock sync.Mutex + ns *nodestate.NodeStateMachine + ndb *nodeDB + posExp, negExp utils.ValueExpirer + + posExpTC, negExpTC uint64 + defaultPosFactors, defaultNegFactors PriceFactors + + active, inactive utils.ExpiredValue + balanceTimer *utils.UpdateTimer + quit chan struct{} +} + +// newBalanceTracker creates a new balanceTracker +func newBalanceTracker(ns *nodestate.NodeStateMachine, setup *serverSetup, db ethdb.KeyValueStore, clock mclock.Clock, posExp, negExp utils.ValueExpirer) *balanceTracker { + ndb := newNodeDB(db, clock) + bt := &balanceTracker{ + ns: ns, + setup: setup, + ndb: ndb, + clock: clock, + posExp: posExp, + negExp: negExp, + balanceTimer: utils.NewUpdateTimer(clock, time.Second*10), + quit: make(chan struct{}), + } + posOffset, negOffset := bt.ndb.getExpiration() + posExp.SetLogOffset(clock.Now(), posOffset) + negExp.SetLogOffset(clock.Now(), negOffset) + + // Load all persisted balance entries of priority nodes, + // calculate the total number of issued service tokens. + bt.ndb.forEachBalance(false, func(id enode.ID, balance utils.ExpiredValue) bool { + bt.inactive.AddExp(balance) + return true + }) + + ns.SubscribeField(bt.setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + n, _ := ns.GetField(node, bt.setup.balanceField).(*nodeBalance) + if n == nil { + return + } + + ov, _ := oldValue.(uint64) + nv, _ := newValue.(uint64) + if ov == 0 && nv != 0 { + n.activate() + } + if nv != 0 { + n.setCapacity(nv) + } + if ov != 0 && nv == 0 { + n.deactivate() + } + }) + ns.SubscribeField(bt.setup.clientField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + type peer interface { + FreeClientId() string + } + if newValue != nil { + n := bt.newNodeBalance(node, newValue.(peer).FreeClientId(), true) + bt.lock.Lock() + n.SetPriceFactors(bt.defaultPosFactors, bt.defaultNegFactors) + bt.lock.Unlock() + ns.SetFieldSub(node, bt.setup.balanceField, n) + } else { + ns.SetStateSub(node, nodestate.Flags{}, bt.setup.priorityFlag, 0) + if b, _ := ns.GetField(node, bt.setup.balanceField).(*nodeBalance); b != nil { + b.deactivate() + } + ns.SetFieldSub(node, bt.setup.balanceField, nil) + } + }) + + // The positive and negative balances of clients are stored in database + // and both of these decay exponentially over time. Delete them if the + // value is small enough. + bt.ndb.evictCallBack = bt.canDropBalance + + go func() { + for { + select { + case <-clock.After(persistExpirationRefresh): + now := clock.Now() + bt.ndb.setExpiration(posExp.LogOffset(now), negExp.LogOffset(now)) + case <-bt.quit: + return + } + } + }() + return bt +} + +// Stop saves expiration offset and unsaved node balances and shuts balanceTracker down +func (bt *balanceTracker) stop() { + now := bt.clock.Now() + bt.ndb.setExpiration(bt.posExp.LogOffset(now), bt.negExp.LogOffset(now)) + close(bt.quit) + bt.ns.ForEach(nodestate.Flags{}, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { + if n, ok := bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance); ok { + n.lock.Lock() + n.storeBalance(true, true) + n.lock.Unlock() + bt.ns.SetField(node, bt.setup.balanceField, nil) + } + }) + bt.ndb.close() +} + +// TotalTokenAmount returns the current total amount of service tokens in existence +func (bt *balanceTracker) TotalTokenAmount() uint64 { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.balanceTimer.Update(func(_ time.Duration) bool { + bt.active = utils.ExpiredValue{} + bt.ns.ForEach(nodestate.Flags{}, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { + if n, ok := bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance); ok && n.active { + pos, _ := n.GetRawBalance() + bt.active.AddExp(pos) + } + }) + return true + }) + total := bt.active + total.AddExp(bt.inactive) + return total.Value(bt.posExp.LogOffset(bt.clock.Now())) +} + +// GetPosBalanceIDs lists node IDs with an associated positive balance +func (bt *balanceTracker) GetPosBalanceIDs(start, stop enode.ID, maxCount int) (result []enode.ID) { + return bt.ndb.getPosBalanceIDs(start, stop, maxCount) +} + +// SetDefaultFactors sets the default price factors applied to subsequently connected clients +func (bt *balanceTracker) SetDefaultFactors(posFactors, negFactors PriceFactors) { + bt.lock.Lock() + bt.defaultPosFactors = posFactors + bt.defaultNegFactors = negFactors + bt.lock.Unlock() +} + +// SetExpirationTCs sets positive and negative token expiration time constants. +// Specified in seconds, 0 means infinite (no expiration). +func (bt *balanceTracker) SetExpirationTCs(pos, neg uint64) { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.posExpTC, bt.negExpTC = pos, neg + now := bt.clock.Now() + if pos > 0 { + bt.posExp.SetRate(now, 1/float64(pos*uint64(time.Second))) + } else { + bt.posExp.SetRate(now, 0) + } + if neg > 0 { + bt.negExp.SetRate(now, 1/float64(neg*uint64(time.Second))) + } else { + bt.negExp.SetRate(now, 0) + } +} + +// GetExpirationTCs returns the current positive and negative token expiration +// time constants +func (bt *balanceTracker) GetExpirationTCs() (pos, neg uint64) { + bt.lock.Lock() + defer bt.lock.Unlock() + + return bt.posExpTC, bt.negExpTC +} + +// BalanceOperation allows atomic operations on the balance of a node regardless of whether +// it is currently connected or not +func (bt *balanceTracker) BalanceOperation(id enode.ID, connAddress string, cb func(AtomicBalanceOperator)) { + bt.ns.Operation(func() { + var nb *nodeBalance + if node := bt.ns.GetNode(id); node != nil { + nb, _ = bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance) + } + if nb == nil { + node := enode.SignNull(&enr.Record{}, id) + nb = bt.newNodeBalance(node, connAddress, false) + } + cb(nb) + }) +} + +// newNodeBalance loads balances from the database and creates a nodeBalance instance +// for the given node. It also sets the priorityFlag and adds balanceCallbackZero if +// the node has a positive balance. +// Note: this function should run inside a NodeStateMachine operation +func (bt *balanceTracker) newNodeBalance(node *enode.Node, connAddress string, setFlags bool) *nodeBalance { + pb := bt.ndb.getOrNewBalance(node.ID().Bytes(), false) + nb := bt.ndb.getOrNewBalance([]byte(connAddress), true) + n := &nodeBalance{ + bt: bt, + node: node, + setFlags: setFlags, + connAddress: connAddress, + balance: balance{pos: pb, neg: nb, posExp: bt.posExp, negExp: bt.negExp}, + initTime: bt.clock.Now(), + lastUpdate: bt.clock.Now(), + } + for i := range n.callbackIndex { + n.callbackIndex[i] = -1 + } + if setFlags && n.checkPriorityStatus() { + n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) + } + return n +} + +// storeBalance stores either a positive or a negative balance in the database +func (bt *balanceTracker) storeBalance(id []byte, neg bool, value utils.ExpiredValue) { + if bt.canDropBalance(bt.clock.Now(), neg, value) { + bt.ndb.delBalance(id, neg) // balance is small enough, drop it directly. + } else { + bt.ndb.setBalance(id, neg, value) + } +} + +// canDropBalance tells whether a positive or negative balance is below the threshold +// and therefore can be dropped from the database +func (bt *balanceTracker) canDropBalance(now mclock.AbsTime, neg bool, b utils.ExpiredValue) bool { + if neg { + return b.Value(bt.negExp.LogOffset(now)) <= negThreshold + } + return b.Value(bt.posExp.LogOffset(now)) <= posThreshold +} + +// updateTotalBalance adjusts the total balance after executing given callback. +func (bt *balanceTracker) updateTotalBalance(n *nodeBalance, callback func() bool) { + bt.lock.Lock() + defer bt.lock.Unlock() + + n.lock.Lock() + defer n.lock.Unlock() + + original, active := n.balance.pos, n.active + if !callback() { + return + } + if active { + bt.active.SubExp(original) + } else { + bt.inactive.SubExp(original) + } + if n.active { + bt.active.AddExp(n.balance.pos) + } else { + bt.inactive.AddExp(n.balance.pos) + } +} diff --git a/les/vflux/server/clientdb.go b/les/vflux/server/clientdb.go new file mode 100644 index 00000000..30cd9a65 --- /dev/null +++ b/les/vflux/server/clientdb.go @@ -0,0 +1,250 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "bytes" + "encoding/binary" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" + lru "github.com/hashicorp/golang-lru" +) + +const ( + balanceCacheLimit = 8192 // the maximum number of cached items in service token balance queue + + // nodeDBVersion is the version identifier of the node data in db + // + // Changelog: + // Version 0 => 1 + // * Replace `lastTotal` with `meta` in positive balance: version 0=>1 + // + // Version 1 => 2 + // * Positive Balance and negative balance is changed: + // * Cumulative time is replaced with expiration + nodeDBVersion = 2 + + // dbCleanupCycle is the cycle of db for useless data cleanup + dbCleanupCycle = time.Hour +) + +var ( + positiveBalancePrefix = []byte("pb:") // dbVersion(uint16 big endian) + positiveBalancePrefix + id -> balance + negativeBalancePrefix = []byte("nb:") // dbVersion(uint16 big endian) + negativeBalancePrefix + ip -> balance + expirationKey = []byte("expiration:") // dbVersion(uint16 big endian) + expirationKey -> posExp, negExp +) + +type nodeDB struct { + db ethdb.KeyValueStore + cache *lru.Cache + auxbuf []byte // 37-byte auxiliary buffer for key encoding + verbuf [2]byte // 2-byte auxiliary buffer for db version + evictCallBack func(mclock.AbsTime, bool, utils.ExpiredValue) bool // Callback to determine whether the balance can be evicted. + clock mclock.Clock + closeCh chan struct{} + cleanupHook func() // Test hook used for testing +} + +func newNodeDB(db ethdb.KeyValueStore, clock mclock.Clock) *nodeDB { + cache, _ := lru.New(balanceCacheLimit) + ndb := &nodeDB{ + db: db, + cache: cache, + auxbuf: make([]byte, 37), + clock: clock, + closeCh: make(chan struct{}), + } + binary.BigEndian.PutUint16(ndb.verbuf[:], uint16(nodeDBVersion)) + go ndb.expirer() + return ndb +} + +func (db *nodeDB) close() { + close(db.closeCh) +} + +func (db *nodeDB) getPrefix(neg bool) []byte { + prefix := positiveBalancePrefix + if neg { + prefix = negativeBalancePrefix + } + return append(db.verbuf[:], prefix...) +} + +func (db *nodeDB) key(id []byte, neg bool) []byte { + prefix := positiveBalancePrefix + if neg { + prefix = negativeBalancePrefix + } + if len(prefix)+len(db.verbuf)+len(id) > len(db.auxbuf) { + db.auxbuf = append(db.auxbuf, make([]byte, len(prefix)+len(db.verbuf)+len(id)-len(db.auxbuf))...) + } + copy(db.auxbuf[:len(db.verbuf)], db.verbuf[:]) + copy(db.auxbuf[len(db.verbuf):len(db.verbuf)+len(prefix)], prefix) + copy(db.auxbuf[len(prefix)+len(db.verbuf):len(prefix)+len(db.verbuf)+len(id)], id) + return db.auxbuf[:len(prefix)+len(db.verbuf)+len(id)] +} + +func (db *nodeDB) getExpiration() (utils.Fixed64, utils.Fixed64) { + blob, err := db.db.Get(append(db.verbuf[:], expirationKey...)) + if err != nil || len(blob) != 16 { + return 0, 0 + } + return utils.Fixed64(binary.BigEndian.Uint64(blob[:8])), utils.Fixed64(binary.BigEndian.Uint64(blob[8:16])) +} + +func (db *nodeDB) setExpiration(pos, neg utils.Fixed64) { + var buff [16]byte + binary.BigEndian.PutUint64(buff[:8], uint64(pos)) + binary.BigEndian.PutUint64(buff[8:16], uint64(neg)) + db.db.Put(append(db.verbuf[:], expirationKey...), buff[:16]) +} + +func (db *nodeDB) getOrNewBalance(id []byte, neg bool) utils.ExpiredValue { + key := db.key(id, neg) + item, exist := db.cache.Get(string(key)) + if exist { + return item.(utils.ExpiredValue) + } + var b utils.ExpiredValue + enc, err := db.db.Get(key) + if err != nil || len(enc) == 0 { + return b + } + if err := rlp.DecodeBytes(enc, &b); err != nil { + log.Crit("Failed to decode positive balance", "err", err) + } + db.cache.Add(string(key), b) + return b +} + +func (db *nodeDB) setBalance(id []byte, neg bool, b utils.ExpiredValue) { + key := db.key(id, neg) + enc, err := rlp.EncodeToBytes(&(b)) + if err != nil { + log.Crit("Failed to encode positive balance", "err", err) + } + db.db.Put(key, enc) + db.cache.Add(string(key), b) +} + +func (db *nodeDB) delBalance(id []byte, neg bool) { + key := db.key(id, neg) + db.db.Delete(key) + db.cache.Remove(string(key)) +} + +// getPosBalanceIDs returns a lexicographically ordered list of IDs of accounts +// with a positive balance +func (db *nodeDB) getPosBalanceIDs(start, stop enode.ID, maxCount int) (result []enode.ID) { + if maxCount <= 0 { + return + } + prefix := db.getPrefix(false) + keylen := len(prefix) + len(enode.ID{}) + + it := db.db.NewIterator(prefix, start.Bytes()) + defer it.Release() + + for it.Next() { + var id enode.ID + if len(it.Key()) != keylen { + return + } + copy(id[:], it.Key()[keylen-len(id):]) + if bytes.Compare(id.Bytes(), stop.Bytes()) >= 0 { + return + } + result = append(result, id) + if len(result) == maxCount { + return + } + } + return +} + +// forEachBalance iterates all balances and passes values to callback. +func (db *nodeDB) forEachBalance(neg bool, callback func(id enode.ID, balance utils.ExpiredValue) bool) { + prefix := db.getPrefix(neg) + keylen := len(prefix) + len(enode.ID{}) + + it := db.db.NewIterator(prefix, nil) + defer it.Release() + + for it.Next() { + var id enode.ID + if len(it.Key()) != keylen { + return + } + copy(id[:], it.Key()[keylen-len(id):]) + + var b utils.ExpiredValue + if err := rlp.DecodeBytes(it.Value(), &b); err != nil { + continue + } + if !callback(id, b) { + return + } + } +} + +func (db *nodeDB) expirer() { + for { + select { + case <-db.clock.After(dbCleanupCycle): + db.expireNodes() + case <-db.closeCh: + return + } + } +} + +// expireNodes iterates the whole node db and checks whether the +// token balances can be deleted. +func (db *nodeDB) expireNodes() { + var ( + visited int + deleted int + start = time.Now() + ) + for _, neg := range []bool{false, true} { + iter := db.db.NewIterator(db.getPrefix(neg), nil) + for iter.Next() { + visited++ + var balance utils.ExpiredValue + if err := rlp.DecodeBytes(iter.Value(), &balance); err != nil { + log.Crit("Failed to decode negative balance", "err", err) + } + if db.evictCallBack != nil && db.evictCallBack(db.clock.Now(), neg, balance) { + deleted++ + db.db.Delete(iter.Key()) + } + } + } + // Invoke testing hook if it's not nil. + if db.cleanupHook != nil { + db.cleanupHook() + } + log.Debug("Expire nodes", "visited", visited, "deleted", deleted, "elapsed", common.PrettyDuration(time.Since(start))) +} diff --git a/les/vflux/server/clientdb_test.go b/les/vflux/server/clientdb_test.go new file mode 100644 index 00000000..353d84ae --- /dev/null +++ b/les/vflux/server/clientdb_test.go @@ -0,0 +1,144 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func expval(v uint64) utils.ExpiredValue { + return utils.ExpiredValue{Base: v} +} + +func TestNodeDB(t *testing.T) { + ndb := newNodeDB(rawdb.NewMemoryDatabase(), mclock.System{}) + defer ndb.close() + + var cases = []struct { + id enode.ID + ip string + balance utils.ExpiredValue + positive bool + }{ + {enode.ID{0x00, 0x01, 0x02}, "", expval(100), true}, + {enode.ID{0x00, 0x01, 0x02}, "", expval(200), true}, + {enode.ID{}, "127.0.0.1", expval(100), false}, + {enode.ID{}, "127.0.0.1", expval(200), false}, + } + for _, c := range cases { + if c.positive { + ndb.setBalance(c.id.Bytes(), false, c.balance) + if pb := ndb.getOrNewBalance(c.id.Bytes(), false); !reflect.DeepEqual(pb, c.balance) { + t.Fatalf("Positive balance mismatch, want %v, got %v", c.balance, pb) + } + } else { + ndb.setBalance([]byte(c.ip), true, c.balance) + if nb := ndb.getOrNewBalance([]byte(c.ip), true); !reflect.DeepEqual(nb, c.balance) { + t.Fatalf("Negative balance mismatch, want %v, got %v", c.balance, nb) + } + } + } + for _, c := range cases { + if c.positive { + ndb.delBalance(c.id.Bytes(), false) + if pb := ndb.getOrNewBalance(c.id.Bytes(), false); !reflect.DeepEqual(pb, utils.ExpiredValue{}) { + t.Fatalf("Positive balance mismatch, want %v, got %v", utils.ExpiredValue{}, pb) + } + } else { + ndb.delBalance([]byte(c.ip), true) + if nb := ndb.getOrNewBalance([]byte(c.ip), true); !reflect.DeepEqual(nb, utils.ExpiredValue{}) { + t.Fatalf("Negative balance mismatch, want %v, got %v", utils.ExpiredValue{}, nb) + } + } + } + posExp, negExp := utils.Fixed64(1000), utils.Fixed64(2000) + ndb.setExpiration(posExp, negExp) + if pos, neg := ndb.getExpiration(); pos != posExp || neg != negExp { + t.Fatalf("Expiration mismatch, want %v / %v, got %v / %v", posExp, negExp, pos, neg) + } + /* curBalance := currencyBalance{typ: "ETH", amount: 10000} + ndb.setCurrencyBalance(enode.ID{0x01, 0x02}, curBalance) + if got := ndb.getCurrencyBalance(enode.ID{0x01, 0x02}); !reflect.DeepEqual(got, curBalance) { + t.Fatalf("Currency balance mismatch, want %v, got %v", curBalance, got) + }*/ +} + +func TestNodeDBExpiration(t *testing.T) { + var ( + iterated int + done = make(chan struct{}, 1) + ) + callback := func(now mclock.AbsTime, neg bool, b utils.ExpiredValue) bool { + iterated += 1 + return true + } + clock := &mclock.Simulated{} + ndb := newNodeDB(rawdb.NewMemoryDatabase(), clock) + defer ndb.close() + ndb.evictCallBack = callback + ndb.cleanupHook = func() { done <- struct{}{} } + + var cases = []struct { + id []byte + neg bool + balance utils.ExpiredValue + }{ + {[]byte{0x01, 0x02}, false, expval(1)}, + {[]byte{0x03, 0x04}, false, expval(1)}, + {[]byte{0x05, 0x06}, false, expval(1)}, + {[]byte{0x07, 0x08}, false, expval(1)}, + + {[]byte("127.0.0.1"), true, expval(1)}, + {[]byte("127.0.0.2"), true, expval(1)}, + {[]byte("127.0.0.3"), true, expval(1)}, + {[]byte("127.0.0.4"), true, expval(1)}, + } + for _, c := range cases { + ndb.setBalance(c.id, c.neg, c.balance) + } + clock.WaitForTimers(1) + clock.Run(time.Hour + time.Minute) + select { + case <-done: + case <-time.NewTimer(time.Second).C: + t.Fatalf("timeout") + } + if iterated != 8 { + t.Fatalf("Failed to evict useless balances, want %v, got %d", 8, iterated) + } + + for _, c := range cases { + ndb.setBalance(c.id, c.neg, c.balance) + } + clock.WaitForTimers(1) + clock.Run(time.Hour + time.Minute) + select { + case <-done: + case <-time.NewTimer(time.Second).C: + t.Fatalf("timeout") + } + if iterated != 16 { + t.Fatalf("Failed to evict useless balances, want %v, got %d", 16, iterated) + } +} diff --git a/les/vflux/server/clientpool.go b/les/vflux/server/clientpool.go new file mode 100644 index 00000000..734d74f4 --- /dev/null +++ b/les/vflux/server/clientpool.go @@ -0,0 +1,328 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "errors" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/les/vflux" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" + "github.com/ethereum/go-ethereum/rlp" +) + +var ( + ErrNotConnected = errors.New("client not connected") + ErrNoPriority = errors.New("priority too low to raise capacity") + ErrCantFindMaximum = errors.New("unable to find maximum allowed capacity") +) + +// 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. PriorityQueue 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. In theory, we try to ensure that +// each client can have several minutes of connection time. +// +// Balances of disconnected clients are stored in nodeDB including positive balance +// and negative banalce. Boeth positive balance and negative balance will decrease +// exponentially. If the balance is low enough, then the record will be dropped. +type ClientPool struct { + *priorityPool + *balanceTracker + + setup *serverSetup + clock mclock.Clock + ns *nodestate.NodeStateMachine + synced func() bool + + lock sync.RWMutex + connectedBias time.Duration + + minCap uint64 // the minimal capacity value allowed for any client + capReqNode *enode.Node // node that is requesting capacity change; only used inside NSM operation +} + +// clientPeer represents a peer in the client pool. None of the callbacks should block. +type clientPeer interface { + Node() *enode.Node + FreeClientId() string // unique id for non-priority clients (typically a prefix of the network address) + InactiveAllowance() time.Duration // disconnection timeout for inactive non-priority peers + UpdateCapacity(newCap uint64, requested bool) // signals a capacity update (requested is true if it is a result of a SetCapacity call on the given peer + Disconnect() // initiates disconnection (Unregister should always be called) +} + +// NewClientPool creates a new client pool +func NewClientPool(balanceDb ethdb.KeyValueStore, minCap uint64, connectedBias time.Duration, clock mclock.Clock, synced func() bool) *ClientPool { + setup := newServerSetup() + ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) + cp := &ClientPool{ + priorityPool: newPriorityPool(ns, setup, clock, minCap, connectedBias, 4, 100), + balanceTracker: newBalanceTracker(ns, setup, balanceDb, clock, &utils.Expirer{}, &utils.Expirer{}), + setup: setup, + ns: ns, + clock: clock, + minCap: minCap, + connectedBias: connectedBias, + synced: synced, + } + + ns.SubscribeState(nodestate.MergeFlags(setup.activeFlag, setup.inactiveFlag, setup.priorityFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { + if newState.Equals(setup.inactiveFlag) { + // set timeout for non-priority inactive client + var timeout time.Duration + if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { + timeout = c.InactiveAllowance() + } + ns.AddTimeout(node, setup.inactiveFlag, timeout) + } + if oldState.Equals(setup.inactiveFlag) && newState.Equals(setup.inactiveFlag.Or(setup.priorityFlag)) { + ns.SetStateSub(node, setup.inactiveFlag, nodestate.Flags{}, 0) // priority gained; remove timeout + } + if newState.Equals(setup.activeFlag) { + // active with no priority; limit capacity to minCap + cap, _ := ns.GetField(node, setup.capacityField).(uint64) + if cap > minCap { + cp.requestCapacity(node, minCap, minCap, 0) + } + } + if newState.Equals(nodestate.Flags{}) { + if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { + c.Disconnect() + } + } + }) + + ns.SubscribeField(setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { + newCap, _ := newValue.(uint64) + c.UpdateCapacity(newCap, node == cp.capReqNode) + } + }) + + // add metrics + cp.ns.SubscribeState(nodestate.MergeFlags(cp.setup.activeFlag, cp.setup.inactiveFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { + if oldState.IsEmpty() && !newState.IsEmpty() { + clientConnectedMeter.Mark(1) + } + if !oldState.IsEmpty() && newState.IsEmpty() { + clientDisconnectedMeter.Mark(1) + } + if oldState.HasNone(cp.setup.activeFlag) && oldState.HasAll(cp.setup.activeFlag) { + clientActivatedMeter.Mark(1) + } + if oldState.HasAll(cp.setup.activeFlag) && oldState.HasNone(cp.setup.activeFlag) { + clientDeactivatedMeter.Mark(1) + } + activeCount, activeCap := cp.Active() + totalActiveCountGauge.Update(int64(activeCount)) + totalActiveCapacityGauge.Update(int64(activeCap)) + totalInactiveCountGauge.Update(int64(cp.Inactive())) + }) + return cp +} + +// Start starts the client pool. Should be called before Register/Unregister. +func (cp *ClientPool) Start() { + cp.ns.Start() +} + +// Stop shuts the client pool down. The clientPeer interface callbacks will not be called +// after Stop. Register calls will return nil. +func (cp *ClientPool) Stop() { + cp.balanceTracker.stop() + cp.ns.Stop() +} + +// Register registers the peer into the client pool. If the peer has insufficient +// priority and remains inactive for longer than the allowed timeout then it will be +// disconnected by calling the Disconnect function of the clientPeer interface. +func (cp *ClientPool) Register(peer clientPeer) ConnectedBalance { + cp.ns.SetField(peer.Node(), cp.setup.clientField, peerWrapper{peer}) + balance, _ := cp.ns.GetField(peer.Node(), cp.setup.balanceField).(*nodeBalance) + return balance +} + +// Unregister removes the peer from the client pool +func (cp *ClientPool) Unregister(peer clientPeer) { + cp.ns.SetField(peer.Node(), cp.setup.clientField, nil) +} + +// SetConnectedBias sets the connection bias, which is applied to already connected clients +// So that already connected client won't be kicked out very soon and we can ensure all +// connected clients can have enough time to request or sync some data. +func (cp *ClientPool) SetConnectedBias(bias time.Duration) { + cp.lock.Lock() + cp.connectedBias = bias + cp.setActiveBias(bias) + cp.lock.Unlock() +} + +// SetCapacity sets the assigned capacity of a connected client +func (cp *ClientPool) SetCapacity(node *enode.Node, reqCap uint64, bias time.Duration, requested bool) (capacity uint64, err error) { + cp.lock.RLock() + if cp.connectedBias > bias { + bias = cp.connectedBias + } + cp.lock.RUnlock() + + cp.ns.Operation(func() { + balance, _ := cp.ns.GetField(node, cp.setup.balanceField).(*nodeBalance) + if balance == nil { + err = ErrNotConnected + return + } + capacity, _ = cp.ns.GetField(node, cp.setup.capacityField).(uint64) + if capacity == 0 { + // if the client is inactive then it has insufficient priority for the minimal capacity + // (will be activated automatically with minCap when possible) + return + } + if reqCap < cp.minCap { + // can't request less than minCap; switching between 0 (inactive state) and minCap is + // performed by the server automatically as soon as necessary/possible + reqCap = cp.minCap + } + if reqCap > cp.minCap && cp.ns.GetState(node).HasNone(cp.setup.priorityFlag) { + err = ErrNoPriority + return + } + if reqCap == capacity { + return + } + if requested { + // mark the requested node so that the UpdateCapacity callback can signal + // whether the update is the direct result of a SetCapacity call on the given node + cp.capReqNode = node + defer func() { + cp.capReqNode = nil + }() + } + + var minTarget, maxTarget uint64 + if reqCap > capacity { + // Estimate maximum available capacity at the current priority level and request + // the estimated amount. + // Note: requestCapacity could find the highest available capacity between the + // current and the requested capacity but it could cost a lot of iterations with + // fine step adjustment if the requested capacity is very high. By doing a quick + // estimation of the maximum available capacity based on the capacity curve we + // can limit the number of required iterations. + curve := cp.getCapacityCurve().exclude(node.ID()) + maxTarget = curve.maxCapacity(func(capacity uint64) int64 { + return balance.estimatePriority(capacity, 0, 0, bias, false) + }) + if maxTarget < reqCap { + return + } + maxTarget = reqCap + + // Specify a narrow target range that allows a limited number of fine step + // iterations + minTarget = maxTarget - maxTarget/20 + if minTarget < capacity { + minTarget = capacity + } + } else { + minTarget, maxTarget = reqCap, reqCap + } + if newCap := cp.requestCapacity(node, minTarget, maxTarget, bias); newCap >= minTarget && newCap <= maxTarget { + capacity = newCap + return + } + // we should be able to find the maximum allowed capacity in a few iterations + log.Error("Unable to find maximum allowed capacity") + err = ErrCantFindMaximum + }) + return +} + +// serveCapQuery serves a vflux capacity query. It receives multiple token amount values +// and a bias time value. For each given token amount it calculates the maximum achievable +// capacity in case the amount is added to the balance. +func (cp *ClientPool) serveCapQuery(id enode.ID, freeID string, data []byte) []byte { + var req vflux.CapacityQueryReq + if rlp.DecodeBytes(data, &req) != nil { + return nil + } + if l := len(req.AddTokens); l == 0 || l > vflux.CapacityQueryMaxLen { + return nil + } + result := make(vflux.CapacityQueryReply, len(req.AddTokens)) + if !cp.synced() { + capacityQueryZeroMeter.Mark(1) + reply, _ := rlp.EncodeToBytes(&result) + return reply + } + + bias := time.Second * time.Duration(req.Bias) + cp.lock.RLock() + if cp.connectedBias > bias { + bias = cp.connectedBias + } + cp.lock.RUnlock() + + // use capacityCurve to answer request for multiple newly bought token amounts + curve := cp.getCapacityCurve().exclude(id) + cp.BalanceOperation(id, freeID, func(balance AtomicBalanceOperator) { + pb, _ := balance.GetBalance() + for i, addTokens := range req.AddTokens { + add := addTokens.Int64() + result[i] = curve.maxCapacity(func(capacity uint64) int64 { + return balance.estimatePriority(capacity, add, 0, bias, false) / int64(capacity) + }) + if add <= 0 && uint64(-add) >= pb && result[i] > cp.minCap { + result[i] = cp.minCap + } + if result[i] < cp.minCap { + result[i] = 0 + } + } + }) + // add first result to metrics (don't care about priority client multi-queries yet) + if result[0] == 0 { + capacityQueryZeroMeter.Mark(1) + } else { + capacityQueryNonZeroMeter.Mark(1) + } + reply, _ := rlp.EncodeToBytes(&result) + return reply +} + +// Handle implements Service +func (cp *ClientPool) Handle(id enode.ID, address string, name string, data []byte) []byte { + switch name { + case vflux.CapacityQueryName: + return cp.serveCapQuery(id, address, data) + default: + return nil + } +} diff --git a/les/vflux/server/clientpool_test.go b/les/vflux/server/clientpool_test.go new file mode 100644 index 00000000..790ec513 --- /dev/null +++ b/les/vflux/server/clientpool_test.go @@ -0,0 +1,607 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +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" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +const defaultConnectedBias = time.Minute * 3 + +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 = 100000 + +type poolTestPeer struct { + node *enode.Node + index int + disconnCh chan int + cap uint64 + inactiveAllowed bool +} + +func newPoolTestPeer(i int, disconnCh chan int) *poolTestPeer { + return &poolTestPeer{ + index: i, + disconnCh: disconnCh, + node: enode.SignNull(&enr.Record{}, enode.ID{byte(i % 256), byte(i >> 8)}), + } +} + +func (i *poolTestPeer) Node() *enode.Node { + return i.node +} + +func (i *poolTestPeer) FreeClientId() string { + return fmt.Sprintf("addr #%d", i.index) +} + +func (i *poolTestPeer) InactiveAllowance() time.Duration { + if i.inactiveAllowed { + return time.Second * 10 + } + return 0 +} + +func (i *poolTestPeer) UpdateCapacity(capacity uint64, requested bool) { + i.cap = capacity +} + +func (i *poolTestPeer) Disconnect() { + if i.disconnCh == nil { + return + } + id := i.node.ID() + i.disconnCh <- int(id[0]) + int(id[1])<<8 +} + +func getBalance(pool *ClientPool, p *poolTestPeer) (pos, neg uint64) { + pool.BalanceOperation(p.node.ID(), p.FreeClientId(), func(nb AtomicBalanceOperator) { + pos, neg = nb.GetBalance() + }) + return +} + +func addBalance(pool *ClientPool, id enode.ID, amount int64) { + pool.BalanceOperation(id, "", func(nb AtomicBalanceOperator) { + nb.AddBalance(amount) + }) +} + +func checkDiff(a, b uint64) bool { + maxDiff := (a + b) / 2000 + if maxDiff < 1 { + maxDiff = 1 + } + return a > b+maxDiff || b > a+maxDiff +} + +func connect(pool *ClientPool, peer *poolTestPeer) uint64 { + pool.Register(peer) + return peer.cap +} + +func disconnect(pool *ClientPool, peer *poolTestPeer) { + pool.Unregister(peer) +} + +func alwaysTrueFn() bool { + return true +} + +func testClientPool(t *testing.T, activeLimit, 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) + pool = NewClientPool(db, 1, 0, &clock, alwaysTrueFn) + ) + pool.Start() + pool.SetExpirationTCs(0, 1000) + + pool.SetLimits(uint64(activeLimit), uint64(activeLimit)) + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + // pool should accept new peers up to its connected limit + for i := 0; i < activeLimit; i++ { + if cap := connect(pool, newPoolTestPeer(i, disconnCh)); cap != 0 { + connected[i] = true + } else { + t.Fatalf("Test peer #%d rejected", i) + } + } + // 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) + + if tickCounter == testClientPoolTicks/4 { + // give a positive balance to some of the peers + amount := testClientPoolTicks / 2 * int64(time.Second) // enough for half of the simulation period + for i := 0; i < paidCount; i++ { + addBalance(pool, newPoolTestPeer(i, disconnCh).node.ID(), amount) + } + } + + i := rand.Intn(clientCount) + if connected[i] { + if randomDisconnect { + disconnect(pool, newPoolTestPeer(i, disconnCh)) + connected[i] = false + connTicks[i] += tickCounter + } + } else { + if cap := connect(pool, newPoolTestPeer(i, disconnCh)); cap != 0 { + connected[i] = true + connTicks[i] -= tickCounter + } else { + disconnect(pool, newPoolTestPeer(i, disconnCh)) + } + } + pollDisconnects: + for { + select { + case i := <-disconnCh: + disconnect(pool, newPoolTestPeer(i, disconnCh)) + if connected[i] { + connTicks[i] += tickCounter + connected[i] = false + } + default: + break pollDisconnects + } + } + } + + expTicks := testClientPoolTicks/2*activeLimit/clientCount + testClientPoolTicks/2*(activeLimit-paidCount)/(clientCount-paidCount) + expMin := expTicks - expTicks/5 + expMax := expTicks + expTicks/5 + paidTicks := testClientPoolTicks/2*activeLimit/clientCount + testClientPoolTicks/2 + paidMin := paidTicks - paidTicks/5 + paidMax := paidTicks + paidTicks/5 + + // 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) + } + } + pool.Stop() +} + +func testPriorityConnect(t *testing.T, pool *ClientPool, p *poolTestPeer, cap uint64, expSuccess bool) { + if cap := connect(pool, p); cap == 0 { + if expSuccess { + t.Fatalf("Failed to connect paid client") + } else { + return + } + } + if newCap, _ := pool.SetCapacity(p.node, cap, defaultConnectedBias, true); newCap != cap { + if expSuccess { + t.Fatalf("Failed to raise capacity of paid client") + } else { + return + } + } + if !expSuccess { + t.Fatalf("Should reject high capacity paid client") + } +} + +func TestConnectPaidClient(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + // Add balance for an external client and mark it as paid client + addBalance(pool, newPoolTestPeer(0, nil).node.ID(), int64(time.Minute)) + testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 10, true) +} + +func TestConnectPaidClientToSmallPool(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + // Add balance for an external client and mark it as paid client + addBalance(pool, newPoolTestPeer(0, nil).node.ID(), int64(time.Minute)) + + // connect a fat paid client to pool, should reject it. + testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 100, false) +} + +func TestConnectPaidClientToFullPool(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + for i := 0; i < 10; i++ { + addBalance(pool, newPoolTestPeer(i, nil).node.ID(), int64(time.Second*20)) + connect(pool, newPoolTestPeer(i, nil)) + } + addBalance(pool, newPoolTestPeer(11, nil).node.ID(), int64(time.Second*2)) // Add low balance to new paid client + if cap := connect(pool, newPoolTestPeer(11, nil)); cap != 0 { + t.Fatalf("Low balance paid client should be rejected") + } + clock.Run(time.Second) + addBalance(pool, newPoolTestPeer(12, nil).node.ID(), int64(time.Minute*5)) // Add high balance to new paid client + if cap := connect(pool, newPoolTestPeer(12, nil)); cap == 0 { + t.Fatalf("High balance paid client should be accepted") + } +} + +func TestPaidClientKickedOut(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + kickedCh = make(chan int, 100) + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + pool.SetExpirationTCs(0, 0) + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + for i := 0; i < 10; i++ { + addBalance(pool, newPoolTestPeer(i, kickedCh).node.ID(), 10000000000) // 10 second allowance + connect(pool, newPoolTestPeer(i, kickedCh)) + clock.Run(time.Millisecond) + } + clock.Run(defaultConnectedBias + time.Second*11) + if cap := connect(pool, newPoolTestPeer(11, kickedCh)); cap == 0 { + t.Fatalf("Free client should be accepted") + } + clock.Run(0) + select { + case id := <-kickedCh: + if id != 0 { + t.Fatalf("Kicked client mismatch, want %v, got %v", 0, id) + } + default: + t.Fatalf("timeout") + } +} + +func TestConnectFreeClient(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + if cap := connect(pool, newPoolTestPeer(0, nil)); cap == 0 { + t.Fatalf("Failed to connect free client") + } + testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 2, false) +} + +func TestConnectFreeClientToFullPool(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + for i := 0; i < 10; i++ { + connect(pool, newPoolTestPeer(i, nil)) + } + if cap := connect(pool, newPoolTestPeer(11, nil)); cap != 0 { + t.Fatalf("New free client should be rejected") + } + clock.Run(time.Minute) + if cap := connect(pool, newPoolTestPeer(12, nil)); cap != 0 { + t.Fatalf("New free client should be rejected") + } + clock.Run(time.Millisecond) + clock.Run(4 * time.Minute) + if cap := connect(pool, newPoolTestPeer(13, nil)); cap == 0 { + t.Fatalf("Old client connects more than 5min should be kicked") + } +} + +func TestFreeClientKickedOut(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + kicked = make(chan int, 100) + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + for i := 0; i < 10; i++ { + connect(pool, newPoolTestPeer(i, kicked)) + clock.Run(time.Millisecond) + } + if cap := connect(pool, newPoolTestPeer(10, kicked)); cap != 0 { + t.Fatalf("New free client should be rejected") + } + clock.Run(0) + select { + case <-kicked: + default: + t.Fatalf("timeout") + } + disconnect(pool, newPoolTestPeer(10, kicked)) + clock.Run(5 * time.Minute) + for i := 0; i < 10; i++ { + connect(pool, newPoolTestPeer(i+10, kicked)) + } + clock.Run(0) + + for i := 0; i < 10; i++ { + select { + case id := <-kicked: + if id >= 10 { + t.Fatalf("Old client should be kicked, now got: %d", id) + } + default: + t.Fatalf("timeout") + } + } +} + +func TestPositiveBalanceCalculation(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + kicked = make(chan int, 10) + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + addBalance(pool, newPoolTestPeer(0, kicked).node.ID(), int64(time.Minute*3)) + testPriorityConnect(t, pool, newPoolTestPeer(0, kicked), 10, true) + clock.Run(time.Minute) + + disconnect(pool, newPoolTestPeer(0, kicked)) + pb, _ := getBalance(pool, newPoolTestPeer(0, kicked)) + if checkDiff(pb, uint64(time.Minute*2)) { + t.Fatalf("Positive balance mismatch, want %v, got %v", uint64(time.Minute*2), pb) + } +} + +func TestDowngradePriorityClient(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + kicked = make(chan int, 10) + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) + + p := newPoolTestPeer(0, kicked) + addBalance(pool, p.node.ID(), int64(time.Minute)) + testPriorityConnect(t, pool, p, 10, true) + if p.cap != 10 { + t.Fatalf("The capacity of priority peer hasn't been updated, got: %d", p.cap) + } + + clock.Run(time.Minute) // All positive balance should be used up. + time.Sleep(300 * time.Millisecond) // Ensure the callback is called + if p.cap != 1 { + t.Fatalf("The capcacity of peer should be downgraded, got: %d", p.cap) + } + pb, _ := getBalance(pool, newPoolTestPeer(0, kicked)) + if pb != 0 { + t.Fatalf("Positive balance mismatch, want %v, got %v", 0, pb) + } + + addBalance(pool, newPoolTestPeer(0, kicked).node.ID(), int64(time.Minute)) + pb, _ = getBalance(pool, newPoolTestPeer(0, kicked)) + if checkDiff(pb, uint64(time.Minute)) { + t.Fatalf("Positive balance mismatch, want %v, got %v", uint64(time.Minute), pb) + } +} + +func TestNegativeBalanceCalculation(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetExpirationTCs(0, 3600) + pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1e-3, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1e-3, CapacityFactor: 0, RequestFactor: 1}) + + for i := 0; i < 10; i++ { + connect(pool, newPoolTestPeer(i, nil)) + } + clock.Run(time.Second) + + for i := 0; i < 10; i++ { + disconnect(pool, newPoolTestPeer(i, nil)) + _, nb := getBalance(pool, newPoolTestPeer(i, nil)) + if nb != 0 { + t.Fatalf("Short connection shouldn't be recorded") + } + } + for i := 0; i < 10; i++ { + connect(pool, newPoolTestPeer(i, nil)) + } + clock.Run(time.Minute) + for i := 0; i < 10; i++ { + disconnect(pool, newPoolTestPeer(i, nil)) + _, nb := getBalance(pool, newPoolTestPeer(i, nil)) + exp := uint64(time.Minute) / 1000 + exp -= exp / 120 // correct for negative balance expiration + if checkDiff(nb, exp) { + t.Fatalf("Negative balance mismatch, want %v, got %v", exp, nb) + } + } +} + +func TestInactiveClient(t *testing.T) { + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + ) + pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) + pool.Start() + defer pool.Stop() + pool.SetLimits(2, uint64(2)) + + p1 := newPoolTestPeer(1, nil) + p1.inactiveAllowed = true + p2 := newPoolTestPeer(2, nil) + p2.inactiveAllowed = true + p3 := newPoolTestPeer(3, nil) + p3.inactiveAllowed = true + addBalance(pool, p1.node.ID(), 1000*int64(time.Second)) + addBalance(pool, p3.node.ID(), 2000*int64(time.Second)) + // p1: 1000 p2: 0 p3: 2000 + p1.cap = connect(pool, p1) + if p1.cap != 1 { + t.Fatalf("Failed to connect peer #1") + } + p2.cap = connect(pool, p2) + if p2.cap != 1 { + t.Fatalf("Failed to connect peer #2") + } + p3.cap = connect(pool, p3) + if p3.cap != 1 { + t.Fatalf("Failed to connect peer #3") + } + if p2.cap != 0 { + t.Fatalf("Failed to deactivate peer #2") + } + addBalance(pool, p2.node.ID(), 3000*int64(time.Second)) + // p1: 1000 p2: 3000 p3: 2000 + if p2.cap != 1 { + t.Fatalf("Failed to activate peer #2") + } + if p1.cap != 0 { + t.Fatalf("Failed to deactivate peer #1") + } + addBalance(pool, p2.node.ID(), -2500*int64(time.Second)) + // p1: 1000 p2: 500 p3: 2000 + if p1.cap != 1 { + t.Fatalf("Failed to activate peer #1") + } + if p2.cap != 0 { + t.Fatalf("Failed to deactivate peer #2") + } + pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 0}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 0}) + p4 := newPoolTestPeer(4, nil) + addBalance(pool, p4.node.ID(), 1500*int64(time.Second)) + // p1: 1000 p2: 500 p3: 2000 p4: 1500 + p4.cap = connect(pool, p4) + if p4.cap != 1 { + t.Fatalf("Failed to activate peer #4") + } + if p1.cap != 0 { + t.Fatalf("Failed to deactivate peer #1") + } + clock.Run(time.Second * 600) + // manually trigger a check to avoid a long real-time wait + pool.ns.SetState(p1.node, pool.setup.updateFlag, nodestate.Flags{}, 0) + pool.ns.SetState(p1.node, nodestate.Flags{}, pool.setup.updateFlag, 0) + // p1: 1000 p2: 500 p3: 2000 p4: 900 + if p1.cap != 1 { + t.Fatalf("Failed to activate peer #1") + } + if p4.cap != 0 { + t.Fatalf("Failed to deactivate peer #4") + } + disconnect(pool, p2) + disconnect(pool, p4) + addBalance(pool, p1.node.ID(), -1000*int64(time.Second)) + if p1.cap != 1 { + t.Fatalf("Should not deactivate peer #1") + } + if p2.cap != 0 { + t.Fatalf("Should not activate peer #2") + } +} diff --git a/les/vflux/server/metrics.go b/les/vflux/server/metrics.go new file mode 100644 index 00000000..680aebe2 --- /dev/null +++ b/les/vflux/server/metrics.go @@ -0,0 +1,35 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + totalActiveCapacityGauge = metrics.NewRegisteredGauge("vflux/server/active/capacity", nil) + totalActiveCountGauge = metrics.NewRegisteredGauge("vflux/server/active/count", nil) + totalInactiveCountGauge = metrics.NewRegisteredGauge("vflux/server/inactive/count", nil) + + clientConnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/connected", nil) + clientActivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/activated", nil) + clientDeactivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/deactivated", nil) + clientDisconnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/disconnected", nil) + + capacityQueryZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryZero", nil) + capacityQueryNonZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryNonZero", nil) +) diff --git a/les/vflux/server/prioritypool.go b/les/vflux/server/prioritypool.go new file mode 100644 index 00000000..059dac0d --- /dev/null +++ b/les/vflux/server/prioritypool.go @@ -0,0 +1,691 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "math" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +const ( + lazyQueueRefresh = time.Second * 10 // refresh period of the active queue +) + +// priorityPool handles a set of nodes where each node has a capacity (a scalar value) +// and a priority (which can change over time and can also depend on the capacity). +// A node is active if it has at least the necessary minimal amount of capacity while +// inactive nodes have 0 capacity (values between 0 and the minimum are not allowed). +// The pool ensures that the number and total capacity of all active nodes are limited +// and the highest priority nodes are active at all times (limits can be changed +// during operation with immediate effect). +// +// When activating clients a priority bias is applied in favor of the already active +// nodes in order to avoid nodes quickly alternating between active and inactive states +// when their priorities are close to each other. The bias is specified in terms of +// duration (time) because priorities are expected to usually get lower over time and +// therefore a future minimum prediction (see EstMinPriority) should monotonously +// decrease with the specified time parameter. +// This time bias can be interpreted as minimum expected active time at the given +// capacity (if the threshold priority stays the same). +// +// Nodes in the pool always have either inactiveFlag or activeFlag set. A new node is +// added to the pool by externally setting inactiveFlag. priorityPool can switch a node +// between inactiveFlag and activeFlag at any time. Nodes can be removed from the pool +// by externally resetting both flags. activeFlag should not be set externally. +// +// The highest priority nodes in "inactive" state are moved to "active" state as soon as +// the minimum capacity can be granted for them. The capacity of lower priority active +// nodes is reduced or they are demoted to "inactive" state if their priority is +// insufficient even at minimal capacity. +type priorityPool struct { + setup *serverSetup + ns *nodestate.NodeStateMachine + clock mclock.Clock + lock sync.Mutex + maxCount, maxCap uint64 + minCap uint64 + activeBias time.Duration + capacityStepDiv, fineStepDiv uint64 + + // The snapshot of priority pool for query. + cachedCurve *capacityCurve + ccUpdatedAt mclock.AbsTime + ccUpdateForced bool + + // Runtime status of prioritypool, represents the + // temporary state if tempState is not empty + tempState []*ppNodeInfo + activeCount, activeCap uint64 + activeQueue *prque.LazyQueue + inactiveQueue *prque.Prque +} + +// ppNodeInfo is the internal node descriptor of priorityPool +type ppNodeInfo struct { + nodePriority nodePriority + node *enode.Node + connected bool + capacity uint64 // only changed when temporary state is committed + activeIndex, inactiveIndex int + + tempState bool // should only be true while the priorityPool lock is held + tempCapacity uint64 // equals capacity when tempState is false + + // the following fields only affect the temporary state and they are set to their + // default value when leaving the temp state + minTarget, stepDiv uint64 + bias time.Duration +} + +// newPriorityPool creates a new priorityPool +func newPriorityPool(ns *nodestate.NodeStateMachine, setup *serverSetup, clock mclock.Clock, minCap uint64, activeBias time.Duration, capacityStepDiv, fineStepDiv uint64) *priorityPool { + pp := &priorityPool{ + setup: setup, + ns: ns, + clock: clock, + inactiveQueue: prque.New(inactiveSetIndex), + minCap: minCap, + activeBias: activeBias, + capacityStepDiv: capacityStepDiv, + fineStepDiv: fineStepDiv, + } + if pp.activeBias < time.Duration(1) { + pp.activeBias = time.Duration(1) + } + pp.activeQueue = prque.NewLazyQueue(activeSetIndex, activePriority, pp.activeMaxPriority, clock, lazyQueueRefresh) + + ns.SubscribeField(pp.setup.balanceField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + if newValue != nil { + c := &ppNodeInfo{ + node: node, + nodePriority: newValue.(nodePriority), + activeIndex: -1, + inactiveIndex: -1, + } + ns.SetFieldSub(node, pp.setup.queueField, c) + ns.SetStateSub(node, setup.inactiveFlag, nodestate.Flags{}, 0) + } else { + ns.SetStateSub(node, nodestate.Flags{}, pp.setup.activeFlag.Or(pp.setup.inactiveFlag), 0) + if n, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo); n != nil { + pp.disconnectNode(n) + } + ns.SetFieldSub(node, pp.setup.capacityField, nil) + ns.SetFieldSub(node, pp.setup.queueField, nil) + } + }) + ns.SubscribeState(pp.setup.activeFlag.Or(pp.setup.inactiveFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { + if c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo); c != nil { + if oldState.IsEmpty() { + pp.connectNode(c) + } + if newState.IsEmpty() { + pp.disconnectNode(c) + } + } + }) + ns.SubscribeState(pp.setup.updateFlag, func(node *enode.Node, oldState, newState nodestate.Flags) { + if !newState.IsEmpty() { + pp.updatePriority(node) + } + }) + return pp +} + +// requestCapacity tries to set the capacity of a connected node to the highest possible +// value inside the given target range. If maxTarget is not reachable then the capacity is +// iteratively reduced in fine steps based on the fineStepDiv parameter until minTarget is reached. +// The function returns the new capacity if successful and the original capacity otherwise. +// Note: this function should run inside a NodeStateMachine operation +func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget uint64, bias time.Duration) uint64 { + pp.lock.Lock() + pp.activeQueue.Refresh() + + if minTarget < pp.minCap { + minTarget = pp.minCap + } + if maxTarget < minTarget { + maxTarget = minTarget + } + if bias < pp.activeBias { + bias = pp.activeBias + } + c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo) + if c == nil { + log.Error("requestCapacity called for unknown node", "id", node.ID()) + pp.lock.Unlock() + return 0 + } + pp.setTempState(c) + if maxTarget > c.capacity { + pp.setTempStepDiv(c, pp.fineStepDiv) + pp.setTempBias(c, bias) + } + pp.setTempCapacity(c, maxTarget) + c.minTarget = minTarget + pp.activeQueue.Remove(c.activeIndex) + pp.inactiveQueue.Remove(c.inactiveIndex) + pp.activeQueue.Push(c) + pp.enforceLimits() + updates := pp.finalizeChanges(c.tempCapacity >= minTarget && c.tempCapacity <= maxTarget && c.tempCapacity != c.capacity) + pp.lock.Unlock() + pp.updateFlags(updates) + return c.capacity +} + +// SetLimits sets the maximum number and total capacity of simultaneously active nodes +func (pp *priorityPool) SetLimits(maxCount, maxCap uint64) { + pp.lock.Lock() + pp.activeQueue.Refresh() + inc := (maxCount > pp.maxCount) || (maxCap > pp.maxCap) + dec := (maxCount < pp.maxCount) || (maxCap < pp.maxCap) + pp.maxCount, pp.maxCap = maxCount, maxCap + + var updates []capUpdate + if dec { + pp.enforceLimits() + updates = pp.finalizeChanges(true) + } + if inc { + updates = append(updates, pp.tryActivate(false)...) + } + pp.lock.Unlock() + pp.ns.Operation(func() { pp.updateFlags(updates) }) +} + +// setActiveBias sets the bias applied when trying to activate inactive nodes +func (pp *priorityPool) setActiveBias(bias time.Duration) { + pp.lock.Lock() + pp.activeBias = bias + if pp.activeBias < time.Duration(1) { + pp.activeBias = time.Duration(1) + } + updates := pp.tryActivate(false) + pp.lock.Unlock() + pp.ns.Operation(func() { pp.updateFlags(updates) }) +} + +// Active returns the number and total capacity of currently active nodes +func (pp *priorityPool) Active() (uint64, uint64) { + pp.lock.Lock() + defer pp.lock.Unlock() + + return pp.activeCount, pp.activeCap +} + +// Inactive returns the number of currently inactive nodes +func (pp *priorityPool) Inactive() int { + pp.lock.Lock() + defer pp.lock.Unlock() + + return pp.inactiveQueue.Size() +} + +// Limits returns the maximum allowed number and total capacity of active nodes +func (pp *priorityPool) Limits() (uint64, uint64) { + pp.lock.Lock() + defer pp.lock.Unlock() + + return pp.maxCount, pp.maxCap +} + +// inactiveSetIndex callback updates ppNodeInfo item index in inactiveQueue +func inactiveSetIndex(a interface{}, index int) { + a.(*ppNodeInfo).inactiveIndex = index +} + +// activeSetIndex callback updates ppNodeInfo item index in activeQueue +func activeSetIndex(a interface{}, index int) { + a.(*ppNodeInfo).activeIndex = index +} + +// invertPriority inverts a priority value. The active queue uses inverted priorities +// because the node on the top is the first to be deactivated. +func invertPriority(p int64) int64 { + if p == math.MinInt64 { + return math.MaxInt64 + } + return -p +} + +// activePriority callback returns actual priority of ppNodeInfo item in activeQueue +func activePriority(a interface{}) int64 { + c := a.(*ppNodeInfo) + if c.bias == 0 { + return invertPriority(c.nodePriority.priority(c.tempCapacity)) + } else { + return invertPriority(c.nodePriority.estimatePriority(c.tempCapacity, 0, 0, c.bias, true)) + } +} + +// activeMaxPriority callback returns estimated maximum priority of ppNodeInfo item in activeQueue +func (pp *priorityPool) activeMaxPriority(a interface{}, until mclock.AbsTime) int64 { + c := a.(*ppNodeInfo) + future := time.Duration(until - pp.clock.Now()) + if future < 0 { + future = 0 + } + return invertPriority(c.nodePriority.estimatePriority(c.tempCapacity, 0, future, c.bias, false)) +} + +// inactivePriority callback returns actual priority of ppNodeInfo item in inactiveQueue +func (pp *priorityPool) inactivePriority(p *ppNodeInfo) int64 { + return p.nodePriority.priority(pp.minCap) +} + +// connectNode is called when a new node has been added to the pool (inactiveFlag set) +// Note: this function should run inside a NodeStateMachine operation +func (pp *priorityPool) connectNode(c *ppNodeInfo) { + pp.lock.Lock() + pp.activeQueue.Refresh() + if c.connected { + pp.lock.Unlock() + return + } + c.connected = true + pp.inactiveQueue.Push(c, pp.inactivePriority(c)) + updates := pp.tryActivate(false) + pp.lock.Unlock() + pp.updateFlags(updates) +} + +// disconnectNode is called when a node has been removed from the pool (both inactiveFlag +// and activeFlag reset) +// Note: this function should run inside a NodeStateMachine operation +func (pp *priorityPool) disconnectNode(c *ppNodeInfo) { + pp.lock.Lock() + pp.activeQueue.Refresh() + if !c.connected { + pp.lock.Unlock() + return + } + c.connected = false + pp.activeQueue.Remove(c.activeIndex) + pp.inactiveQueue.Remove(c.inactiveIndex) + + var updates []capUpdate + if c.capacity != 0 { + pp.setTempState(c) + pp.setTempCapacity(c, 0) + updates = pp.tryActivate(true) + } + pp.lock.Unlock() + pp.updateFlags(updates) +} + +// setTempState internally puts a node in a temporary state that can either be reverted +// or confirmed later. This temporary state allows changing the capacity of a node and +// moving it between the active and inactive queue. activeFlag/inactiveFlag and +// capacityField are not changed while the changes are still temporary. +func (pp *priorityPool) setTempState(c *ppNodeInfo) { + if c.tempState { + return + } + c.tempState = true + if c.tempCapacity != c.capacity { // should never happen + log.Error("tempCapacity != capacity when entering tempState") + } + // Assign all the defaults to the temp state. + c.minTarget = pp.minCap + c.stepDiv = pp.capacityStepDiv + c.bias = 0 + pp.tempState = append(pp.tempState, c) +} + +// unsetTempState revokes the temp status of the node and reset all internal +// fields to the default value. +func (pp *priorityPool) unsetTempState(c *ppNodeInfo) { + if !c.tempState { + return + } + c.tempState = false + if c.tempCapacity != c.capacity { // should never happen + log.Error("tempCapacity != capacity when leaving tempState") + } + c.minTarget = pp.minCap + c.stepDiv = pp.capacityStepDiv + c.bias = 0 +} + +// setTempCapacity changes the capacity of a node in the temporary state and adjusts +// activeCap and activeCount accordingly. Since this change is performed in the temporary +// state it should be called after setTempState and before finalizeChanges. +func (pp *priorityPool) setTempCapacity(c *ppNodeInfo, cap uint64) { + if !c.tempState { // should never happen + log.Error("Node is not in temporary state") + return + } + pp.activeCap += cap - c.tempCapacity + if c.tempCapacity == 0 { + pp.activeCount++ + } + if cap == 0 { + pp.activeCount-- + } + c.tempCapacity = cap +} + +// setTempBias changes the connection bias of a node in the temporary state. +func (pp *priorityPool) setTempBias(c *ppNodeInfo, bias time.Duration) { + if !c.tempState { // should never happen + log.Error("Node is not in temporary state") + return + } + c.bias = bias +} + +// setTempStepDiv changes the capacity divisor of a node in the temporary state. +func (pp *priorityPool) setTempStepDiv(c *ppNodeInfo, stepDiv uint64) { + if !c.tempState { // should never happen + log.Error("Node is not in temporary state") + return + } + c.stepDiv = stepDiv +} + +// enforceLimits enforces active node count and total capacity limits. It returns the +// lowest active node priority. Note that this function is performed on the temporary +// internal state. +func (pp *priorityPool) enforceLimits() (*ppNodeInfo, int64) { + if pp.activeCap <= pp.maxCap && pp.activeCount <= pp.maxCount { + return nil, math.MinInt64 + } + var ( + c *ppNodeInfo + maxActivePriority int64 + ) + pp.activeQueue.MultiPop(func(data interface{}, priority int64) bool { + c = data.(*ppNodeInfo) + pp.setTempState(c) + maxActivePriority = priority + if c.tempCapacity == c.minTarget || pp.activeCount > pp.maxCount { + pp.setTempCapacity(c, 0) + } else { + sub := c.tempCapacity / c.stepDiv + if sub == 0 { + sub = 1 + } + if c.tempCapacity-sub < c.minTarget { + sub = c.tempCapacity - c.minTarget + } + pp.setTempCapacity(c, c.tempCapacity-sub) + pp.activeQueue.Push(c) + } + return pp.activeCap > pp.maxCap || pp.activeCount > pp.maxCount + }) + return c, invertPriority(maxActivePriority) +} + +// finalizeChanges either commits or reverts temporary changes. The necessary capacity +// field and according flag updates are not performed here but returned in a list because +// they should be performed while the mutex is not held. +func (pp *priorityPool) finalizeChanges(commit bool) (updates []capUpdate) { + for _, c := range pp.tempState { + // always remove and push back in order to update biased priority + pp.activeQueue.Remove(c.activeIndex) + pp.inactiveQueue.Remove(c.inactiveIndex) + oldCapacity := c.capacity + if commit { + c.capacity = c.tempCapacity + } else { + pp.setTempCapacity(c, c.capacity) // revert activeCount/activeCap + } + pp.unsetTempState(c) + + if c.connected { + if c.capacity != 0 { + pp.activeQueue.Push(c) + } else { + pp.inactiveQueue.Push(c, pp.inactivePriority(c)) + } + if c.capacity != oldCapacity { + updates = append(updates, capUpdate{c.node, oldCapacity, c.capacity}) + } + } + } + pp.tempState = nil + if commit { + pp.ccUpdateForced = true + } + return +} + +// capUpdate describes a capacityField and activeFlag/inactiveFlag update +type capUpdate struct { + node *enode.Node + oldCap, newCap uint64 +} + +// updateFlags performs capacityField and activeFlag/inactiveFlag updates while the +// pool mutex is not held +// Note: this function should run inside a NodeStateMachine operation +func (pp *priorityPool) updateFlags(updates []capUpdate) { + for _, f := range updates { + if f.oldCap == 0 { + pp.ns.SetStateSub(f.node, pp.setup.activeFlag, pp.setup.inactiveFlag, 0) + } + if f.newCap == 0 { + pp.ns.SetStateSub(f.node, pp.setup.inactiveFlag, pp.setup.activeFlag, 0) + pp.ns.SetFieldSub(f.node, pp.setup.capacityField, nil) + } else { + pp.ns.SetFieldSub(f.node, pp.setup.capacityField, f.newCap) + } + } +} + +// tryActivate tries to activate inactive nodes if possible +func (pp *priorityPool) tryActivate(commit bool) []capUpdate { + for pp.inactiveQueue.Size() > 0 { + c := pp.inactiveQueue.PopItem().(*ppNodeInfo) + pp.setTempState(c) + pp.setTempBias(c, pp.activeBias) + pp.setTempCapacity(c, pp.minCap) + pp.activeQueue.Push(c) + pp.enforceLimits() + if c.tempCapacity > 0 { + commit = true + pp.setTempBias(c, 0) + } else { + break + } + } + pp.ccUpdateForced = true + return pp.finalizeChanges(commit) +} + +// updatePriority gets the current priority value of the given node from the nodePriority +// interface and performs the necessary changes. It is triggered by updateFlag. +// Note: this function should run inside a NodeStateMachine operation +func (pp *priorityPool) updatePriority(node *enode.Node) { + pp.lock.Lock() + pp.activeQueue.Refresh() + c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo) + if c == nil || !c.connected { + pp.lock.Unlock() + return + } + pp.activeQueue.Remove(c.activeIndex) + pp.inactiveQueue.Remove(c.inactiveIndex) + if c.capacity != 0 { + pp.activeQueue.Push(c) + } else { + pp.inactiveQueue.Push(c, pp.inactivePriority(c)) + } + updates := pp.tryActivate(false) + pp.lock.Unlock() + pp.updateFlags(updates) +} + +// capacityCurve is a snapshot of the priority pool contents in a format that can efficiently +// estimate how much capacity could be granted to a given node at a given priority level. +type capacityCurve struct { + points []curvePoint // curve points sorted in descending order of priority + index map[enode.ID][]int // curve point indexes belonging to each node + excludeList []int // curve point indexes of excluded node + excludeFirst bool // true if activeCount == maxCount +} + +type curvePoint struct { + freeCap uint64 // available capacity and node count at the current priority level + nextPri int64 // next priority level where more capacity will be available +} + +// getCapacityCurve returns a new or recently cached capacityCurve based on the contents of the pool +func (pp *priorityPool) getCapacityCurve() *capacityCurve { + pp.lock.Lock() + defer pp.lock.Unlock() + + now := pp.clock.Now() + dt := time.Duration(now - pp.ccUpdatedAt) + if !pp.ccUpdateForced && pp.cachedCurve != nil && dt < time.Second*10 { + return pp.cachedCurve + } + + pp.ccUpdateForced = false + pp.ccUpdatedAt = now + curve := &capacityCurve{ + index: make(map[enode.ID][]int), + } + pp.cachedCurve = curve + + var excludeID enode.ID + excludeFirst := pp.maxCount == pp.activeCount + // reduce node capacities or remove nodes until nothing is left in the queue; + // record the available capacity and the necessary priority after each step + lastPri := int64(math.MinInt64) + for pp.activeCap > 0 { + cp := curvePoint{} + if pp.activeCap > pp.maxCap { + log.Error("Active capacity is greater than allowed maximum", "active", pp.activeCap, "maximum", pp.maxCap) + } else { + cp.freeCap = pp.maxCap - pp.activeCap + } + // temporarily increase activeCap to enforce reducing or removing a node capacity + tempCap := cp.freeCap + 1 + pp.activeCap += tempCap + var next *ppNodeInfo + // enforceLimits removes the lowest priority node if it has minimal capacity, + // otherwise reduces its capacity + next, cp.nextPri = pp.enforceLimits() + if cp.nextPri < lastPri { + // enforce monotonicity which may be broken by continuously changing priorities + cp.nextPri = lastPri + } else { + lastPri = cp.nextPri + } + pp.activeCap -= tempCap + if next == nil { + log.Error("getCapacityCurve: cannot remove next element from the priority queue") + break + } + id := next.node.ID() + if excludeFirst { + // if the node count limit is already reached then mark the node with the + // lowest priority for exclusion + curve.excludeFirst = true + excludeID = id + excludeFirst = false + } + // multiple curve points and therefore multiple indexes may belong to a node + // if it was removed in multiple steps (if its capacity was more than the minimum) + curve.index[id] = append(curve.index[id], len(curve.points)) + curve.points = append(curve.points, cp) + } + // restore original state of the queue + pp.finalizeChanges(false) + curve.points = append(curve.points, curvePoint{ + freeCap: pp.maxCap, + nextPri: math.MaxInt64, + }) + if curve.excludeFirst { + curve.excludeList = curve.index[excludeID] + } + return curve +} + +// exclude returns a capacityCurve with the given node excluded from the original curve +func (cc *capacityCurve) exclude(id enode.ID) *capacityCurve { + if excludeList, ok := cc.index[id]; ok { + // return a new version of the curve (only one excluded node can be selected) + // Note: if the first node was excluded by default (excludeFirst == true) then + // we can forget about that and exclude the node with the given id instead. + return &capacityCurve{ + points: cc.points, + index: cc.index, + excludeList: excludeList, + } + } + return cc +} + +func (cc *capacityCurve) getPoint(i int) curvePoint { + cp := cc.points[i] + if i == 0 && cc.excludeFirst { + cp.freeCap = 0 + return cp + } + for ii := len(cc.excludeList) - 1; ii >= 0; ii-- { + ei := cc.excludeList[ii] + if ei < i { + break + } + e1, e2 := cc.points[ei], cc.points[ei+1] + cp.freeCap += e2.freeCap - e1.freeCap + } + return cp +} + +// maxCapacity calculates the maximum capacity available for a node with a given +// (monotonically decreasing) priority vs. capacity function. Note that if the requesting +// node is already in the pool then it should be excluded from the curve in order to get +// the correct result. +func (cc *capacityCurve) maxCapacity(priority func(cap uint64) int64) uint64 { + min, max := 0, len(cc.points)-1 // the curve always has at least one point + for min < max { + mid := (min + max) / 2 + cp := cc.getPoint(mid) + if cp.freeCap == 0 || priority(cp.freeCap) > cp.nextPri { + min = mid + 1 + } else { + max = mid + } + } + cp2 := cc.getPoint(min) + if cp2.freeCap == 0 || min == 0 { + return cp2.freeCap + } + cp1 := cc.getPoint(min - 1) + if priority(cp2.freeCap) > cp1.nextPri { + return cp2.freeCap + } + minc, maxc := cp1.freeCap, cp2.freeCap-1 + for minc < maxc { + midc := (minc + maxc + 1) / 2 + if midc == 0 || priority(midc) > cp1.nextPri { + minc = midc + } else { + maxc = midc - 1 + } + } + return maxc +} diff --git a/les/vflux/server/prioritypool_test.go b/les/vflux/server/prioritypool_test.go new file mode 100644 index 00000000..51523121 --- /dev/null +++ b/les/vflux/server/prioritypool_test.go @@ -0,0 +1,233 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "math/rand" + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +const ( + testCapacityStepDiv = 100 + testCapacityToleranceDiv = 10 + testMinCap = 100 +) + +type ppTestClient struct { + node *enode.Node + balance, cap uint64 +} + +func (c *ppTestClient) priority(cap uint64) int64 { + return int64(c.balance / cap) +} + +func (c *ppTestClient) estimatePriority(cap uint64, addBalance int64, future, bias time.Duration, update bool) int64 { + return int64(c.balance / cap) +} + +func TestPriorityPool(t *testing.T) { + clock := &mclock.Simulated{} + setup := newServerSetup() + setup.balanceField = setup.setup.NewField("ppTestClient", reflect.TypeOf(&ppTestClient{})) + ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) + + ns.SubscribeField(setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { + if n := ns.GetField(node, setup.balanceField); n != nil { + c := n.(*ppTestClient) + c.cap = newValue.(uint64) + } + }) + pp := newPriorityPool(ns, setup, clock, testMinCap, 0, testCapacityStepDiv, testCapacityStepDiv) + ns.Start() + pp.SetLimits(100, 1000000) + clients := make([]*ppTestClient, 100) + raise := func(c *ppTestClient) { + for { + var ok bool + ns.Operation(func() { + newCap := c.cap + c.cap/testCapacityStepDiv + ok = pp.requestCapacity(c.node, newCap, newCap, 0) == newCap + }) + if !ok { + return + } + } + } + var sumBalance uint64 + check := func(c *ppTestClient) { + expCap := 1000000 * c.balance / sumBalance + capTol := expCap / testCapacityToleranceDiv + if c.cap < expCap-capTol || c.cap > expCap+capTol { + t.Errorf("Wrong node capacity (expected %d, got %d)", expCap, c.cap) + } + } + + for i := range clients { + c := &ppTestClient{ + node: enode.SignNull(&enr.Record{}, enode.ID{byte(i)}), + balance: 100000000000, + cap: 1000, + } + sumBalance += c.balance + clients[i] = c + ns.SetField(c.node, setup.balanceField, c) + ns.SetState(c.node, setup.inactiveFlag, nodestate.Flags{}, 0) + raise(c) + check(c) + } + + for count := 0; count < 100; count++ { + c := clients[rand.Intn(len(clients))] + oldBalance := c.balance + c.balance = uint64(rand.Int63n(100000000000) + 100000000000) + sumBalance += c.balance - oldBalance + pp.ns.SetState(c.node, setup.updateFlag, nodestate.Flags{}, 0) + pp.ns.SetState(c.node, nodestate.Flags{}, setup.updateFlag, 0) + if c.balance > oldBalance { + raise(c) + } else { + for _, c := range clients { + raise(c) + } + } + // check whether capacities are proportional to balances + for _, c := range clients { + check(c) + } + if count%10 == 0 { + // test available capacity calculation with capacity curve + c = clients[rand.Intn(len(clients))] + curve := pp.getCapacityCurve().exclude(c.node.ID()) + + add := uint64(rand.Int63n(10000000000000)) + c.balance += add + sumBalance += add + expCap := curve.maxCapacity(func(cap uint64) int64 { + return int64(c.balance / cap) + }) + var ok bool + expFail := expCap + 10 + if expFail < testMinCap { + expFail = testMinCap + } + ns.Operation(func() { + ok = pp.requestCapacity(c.node, expFail, expFail, 0) == expFail + }) + if ok { + t.Errorf("Request for more than expected available capacity succeeded") + } + if expCap >= testMinCap { + ns.Operation(func() { + ok = pp.requestCapacity(c.node, expCap, expCap, 0) == expCap + }) + if !ok { + t.Errorf("Request for expected available capacity failed") + } + } + c.balance -= add + sumBalance -= add + pp.ns.SetState(c.node, setup.updateFlag, nodestate.Flags{}, 0) + pp.ns.SetState(c.node, nodestate.Flags{}, setup.updateFlag, 0) + for _, c := range clients { + raise(c) + } + } + } + + ns.Stop() +} + +func TestCapacityCurve(t *testing.T) { + clock := &mclock.Simulated{} + setup := newServerSetup() + setup.balanceField = setup.setup.NewField("ppTestClient", reflect.TypeOf(&ppTestClient{})) + ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) + + pp := newPriorityPool(ns, setup, clock, 400000, 0, 2, 2) + ns.Start() + pp.SetLimits(10, 10000000) + clients := make([]*ppTestClient, 10) + + for i := range clients { + c := &ppTestClient{ + node: enode.SignNull(&enr.Record{}, enode.ID{byte(i)}), + balance: 100000000000 * uint64(i+1), + cap: 1000000, + } + clients[i] = c + ns.SetField(c.node, setup.balanceField, c) + ns.SetState(c.node, setup.inactiveFlag, nodestate.Flags{}, 0) + ns.Operation(func() { + pp.requestCapacity(c.node, c.cap, c.cap, 0) + }) + } + + curve := pp.getCapacityCurve() + check := func(balance, expCap uint64) { + cap := curve.maxCapacity(func(cap uint64) int64 { + return int64(balance / cap) + }) + var fail bool + if cap == 0 || expCap == 0 { + fail = cap != expCap + } else { + pri := balance / cap + expPri := balance / expCap + fail = pri != expPri && pri != expPri+1 + } + if fail { + t.Errorf("Incorrect capacity for %d balance (got %d, expected %d)", balance, cap, expCap) + } + } + + check(0, 0) + check(10000000000, 100000) + check(50000000000, 500000) + check(100000000000, 1000000) + check(200000000000, 1000000) + check(300000000000, 1500000) + check(450000000000, 1500000) + check(600000000000, 2000000) + check(800000000000, 2000000) + check(1000000000000, 2500000) + + pp.SetLimits(11, 10000000) + curve = pp.getCapacityCurve() + + check(0, 0) + check(10000000000, 100000) + check(50000000000, 500000) + check(150000000000, 750000) + check(200000000000, 1000000) + check(220000000000, 1100000) + check(275000000000, 1100000) + check(375000000000, 1500000) + check(450000000000, 1500000) + check(600000000000, 2000000) + check(800000000000, 2000000) + check(1000000000000, 2500000) + + ns.Stop() +} diff --git a/les/vflux/server/service.go b/les/vflux/server/service.go new file mode 100644 index 00000000..40515f07 --- /dev/null +++ b/les/vflux/server/service.go @@ -0,0 +1,120 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "net" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/les/utils" + "github.com/ethereum/go-ethereum/les/vflux" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" +) + +type ( + // Server serves vflux requests + Server struct { + limiter *utils.Limiter + lock sync.Mutex + services map[string]*serviceEntry + delayPerRequest time.Duration + } + + // Service is a service registered at the Server and identified by a string id + Service interface { + Handle(id enode.ID, address string, name string, data []byte) []byte // never called concurrently + } + + serviceEntry struct { + id, desc string + backend Service + } +) + +// NewServer creates a new Server +func NewServer(delayPerRequest time.Duration) *Server { + return &Server{ + limiter: utils.NewLimiter(1000), + delayPerRequest: delayPerRequest, + services: make(map[string]*serviceEntry), + } +} + +// Register registers a Service +func (s *Server) Register(b Service, id, desc string) { + srv := &serviceEntry{backend: b, id: id, desc: desc} + if strings.Contains(srv.id, ":") { + // srv.id + ":" will be used as a service database prefix + log.Error("Service ID contains ':'", "id", srv.id) + return + } + s.lock.Lock() + s.services[srv.id] = srv + s.lock.Unlock() +} + +// Serve serves a vflux request batch +// Note: requests are served by the Handle functions of the registered services. Serve +// may be called concurrently but the Handle functions are called sequentially and +// therefore thread safety is guaranteed. +func (s *Server) Serve(id enode.ID, address string, requests vflux.Requests) vflux.Replies { + reqLen := uint(len(requests)) + if reqLen == 0 || reqLen > vflux.MaxRequestLength { + return nil + } + // Note: the value parameter will be supplied by the token sale module (total amount paid) + ch := <-s.limiter.Add(id, address, 0, reqLen) + if ch == nil { + return nil + } + // Note: the limiter ensures that the following section is not running concurrently, + // the lock only protects against contention caused by new service registration + s.lock.Lock() + results := make(vflux.Replies, len(requests)) + for i, req := range requests { + if service := s.services[req.Service]; service != nil { + results[i] = service.backend.Handle(id, address, req.Name, req.Params) + } + } + s.lock.Unlock() + time.Sleep(s.delayPerRequest * time.Duration(reqLen)) + close(ch) + return results +} + +// ServeEncoded serves an encoded vflux request batch and returns the encoded replies +func (s *Server) ServeEncoded(id enode.ID, addr *net.UDPAddr, req []byte) []byte { + var requests vflux.Requests + if err := rlp.DecodeBytes(req, &requests); err != nil { + return nil + } + results := s.Serve(id, addr.String(), requests) + if results == nil { + return nil + } + res, _ := rlp.EncodeToBytes(&results) + return res +} + +// Stop shuts down the server +func (s *Server) Stop() { + s.limiter.Stop() +} diff --git a/les/vflux/server/status.go b/les/vflux/server/status.go new file mode 100644 index 00000000..2d7e25b6 --- /dev/null +++ b/les/vflux/server/status.go @@ -0,0 +1,59 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "reflect" + + "github.com/ethereum/go-ethereum/p2p/nodestate" +) + +type peerWrapper struct{ clientPeer } // the NodeStateMachine type system needs this wrapper + +// serverSetup is a wrapper of the node state machine setup, which contains +// all the created flags and fields used in the vflux server side. +type serverSetup struct { + setup *nodestate.Setup + clientField nodestate.Field // Field contains the client peer handler + + // Flags and fields controlled by balance tracker. BalanceTracker + // is responsible for setting/deleting these flags or fields. + priorityFlag nodestate.Flags // Flag is set if the node has a positive balance + updateFlag nodestate.Flags // Flag is set whenever the node balance is changed(priority changed) + balanceField nodestate.Field // Field contains the client balance for priority calculation + + // Flags and fields controlled by priority queue. Priority queue + // is responsible for setting/deleting these flags or fields. + activeFlag nodestate.Flags // Flag is set if the node is active + inactiveFlag nodestate.Flags // Flag is set if the node is inactive + capacityField nodestate.Field // Field contains the capacity of the node + queueField nodestate.Field // Field contains the information in the priority queue +} + +// newServerSetup initializes the setup for state machine and returns the flags/fields group. +func newServerSetup() *serverSetup { + setup := &serverSetup{setup: &nodestate.Setup{}} + setup.clientField = setup.setup.NewField("client", reflect.TypeOf(peerWrapper{})) + setup.priorityFlag = setup.setup.NewFlag("priority") + setup.updateFlag = setup.setup.NewFlag("update") + setup.balanceField = setup.setup.NewField("balance", reflect.TypeOf(&nodeBalance{})) + setup.activeFlag = setup.setup.NewFlag("active") + setup.inactiveFlag = setup.setup.NewFlag("inactive") + setup.capacityField = setup.setup.NewField("capacity", reflect.TypeOf(uint64(0))) + setup.queueField = setup.setup.NewField("queue", reflect.TypeOf(&ppNodeInfo{})) + return setup +} diff --git a/light/lightchain.go b/light/lightchain.go index 106ca99b..dca97ce4 100644 --- a/light/lightchain.go +++ b/light/lightchain.go @@ -26,17 +26,17 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "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/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" lru "github.com/hashicorp/golang-lru" ) @@ -59,6 +59,7 @@ type LightChain struct { chainHeadFeed event.Feed scope event.SubscriptionScope genesisBlock *types.Block + forker *core.ForkChoice bodyCache *lru.Cache // Cache for the most recent block bodies bodyRLPCache *lru.Cache // Cache for the most recent block bodies in RLP encoded format @@ -92,6 +93,7 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus. blockCache: blockCache, engine: engine, } + bc.forker = core.NewForkChoice(bc, nil) var err error bc.hc, err = core.NewHeaderChain(odr.Database(), config, bc.engine, bc.getProcInterrupt) if err != nil { @@ -112,7 +114,7 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus. if header := bc.GetHeaderByHash(hash); header != nil { log.Error("Found bad hash, rewinding chain", "number", header.Number, "hash", header.ParentHash) bc.SetHead(header.Number.Uint64() - 1) - log.Error("Chain rewind was successful, resuming normal operation") + log.Info("Chain rewind was successful, resuming normal operation") } } return bc, nil @@ -143,6 +145,11 @@ func (lc *LightChain) Odr() OdrBackend { return lc.odr } +// HeaderChain returns the underlying header chain. +func (lc *LightChain) HeaderChain() *core.HeaderChain { + return lc.hc +} + // loadLastState loads the last known chain state from the database. This method // assumes that the chain manager mutex is held. func (lc *LightChain) loadLastState() error { @@ -150,16 +157,18 @@ func (lc *LightChain) loadLastState() error { // Corrupt or empty database, init from scratch lc.Reset() } else { - if header := lc.GetHeaderByHash(head); header != nil { + header := lc.GetHeaderByHash(head) + if header == nil { + // Corrupt or empty database, init from scratch + lc.Reset() + } else { lc.hc.SetCurrentHeader(header) } } - // Issue a status log and return 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 } @@ -193,9 +202,13 @@ func (lc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { defer lc.chainmu.Unlock() // Prepare the genesis block and reinitialise the chain - rawdb.WriteTd(lc.chainDb, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) - rawdb.WriteBlock(lc.chainDb, genesis) - + batch := lc.chainDb.NewBatch() + rawdb.WriteTd(batch, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) + rawdb.WriteBlock(batch, genesis) + rawdb.WriteHeadHeaderHash(batch, genesis.Hash()) + if err := batch.Write(); err != nil { + log.Crit("Failed to reset genesis block", "err", err) + } lc.genesisBlock = genesis lc.hc.SetGenesis(lc.genesisBlock.Header()) lc.hc.SetCurrentHeader(lc.genesisBlock.Header()) @@ -306,10 +319,16 @@ func (lc *LightChain) Stop() { return } close(lc.quit) - atomic.StoreInt32(&lc.procInterrupt, 1) - + lc.StopInsert() lc.wg.Wait() - log.Info("Blockchain manager stopped") + log.Info("Blockchain stopped") +} + +// StopInsert interrupts all insertion methods, causing them to return +// errInsertionInterrupted as soon as possible. Insertion is permanently disabled after +// calling this method. +func (lc *LightChain) StopInsert() { + atomic.StoreInt32(&lc.procInterrupt, 1) } // Rollback is designed to remove a chain of links from the database that aren't @@ -318,29 +337,58 @@ func (lc *LightChain) Rollback(chain []common.Hash) { lc.chainmu.Lock() defer lc.chainmu.Unlock() + batch := lc.chainDb.NewBatch() for i := len(chain) - 1; i >= 0; i-- { hash := chain[i] + // Degrade the chain markers if they are explicitly reverted. + // In theory we should update all in-memory markers in the + // last step, however the direction of rollback is from high + // to low, so it's safe the update in-memory markers directly. if head := lc.hc.CurrentHeader(); head.Hash() == hash { + rawdb.WriteHeadHeaderHash(batch, head.ParentHash) lc.hc.SetCurrentHeader(lc.GetHeader(head.ParentHash, head.Number.Uint64()-1)) } } + if err := batch.Write(); err != nil { + log.Crit("Failed to rollback light chain", "error", err) + } } -// postChainEvents iterates over the events generated by a chain insertion and -// posts them into the event feed. -func (lc *LightChain) postChainEvents(events []interface{}) { - for _, event := range events { - switch ev := event.(type) { - case core.ChainEvent: - if lc.CurrentHeader().Hash() == ev.Hash { - lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: ev.Block}) - } - lc.chainFeed.Send(ev) - case core.ChainSideEvent: - lc.chainSideFeed.Send(ev) - } +func (lc *LightChain) InsertHeader(header *types.Header) error { + // Verify the header first before obtaining the lock + headers := []*types.Header{header} + if _, err := lc.hc.ValidateHeaderChain(headers, 100); err != nil { + return err + } + // Make sure only one thread manipulates the chain at once + lc.chainmu.Lock() + defer lc.chainmu.Unlock() + + lc.wg.Add(1) + defer lc.wg.Done() + + _, err := lc.hc.WriteHeaders(headers) + log.Info("Inserted header", "number", header.Number, "hash", header.Hash()) + return err +} + +func (lc *LightChain) SetCanonical(header *types.Header) error { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() + + lc.wg.Add(1) + defer lc.wg.Done() + + if err := lc.hc.Reorg([]*types.Header{header}); err != nil { + return err } + // Emit events + block := types.NewBlockWithHeader(header) + lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()}) + lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block}) + log.Info("Set the chain head", "number", block.Number(), "hash", block.Hash()) + return nil } // InsertHeaderChain attempts to insert the given header chain in to the local @@ -349,12 +397,15 @@ func (lc *LightChain) postChainEvents(events []interface{}) { // // The verify parameter can be used to fine tune whether nonce verification // should be done or not. The reason behind the optional check is because some -// of the header retrieval mechanisms already need to verfy nonces, as well as +// of the header retrieval mechanisms already need to verify nonces, as well as // because nonces can be verified sparsely, not needing to check each. // // In the case of a light chain, InsertHeaderChain also creates and posts light // chain events when necessary. func (lc *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { + if len(chain) == 0 { + return 0, nil + } if atomic.LoadInt32(&lc.disableCheckFreq) == 1 { checkFreq = 0 } @@ -370,24 +421,24 @@ func (lc *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (i lc.wg.Add(1) defer lc.wg.Done() - var events []interface{} - whFunc := func(header *types.Header) error { - status, err := lc.hc.WriteHeader(header) - - switch status { - case core.CanonStatTy: - log.Debug("Inserted new header", "number", header.Number, "hash", header.Hash()) - events = append(events, core.ChainEvent{Block: types.NewBlockWithHeader(header), Hash: header.Hash()}) + status, err := lc.hc.InsertHeaderChain(chain, start, lc.forker) + if err != nil || len(chain) == 0 { + return 0, err + } - case core.SideStatTy: - log.Debug("Inserted forked header", "number", header.Number, "hash", header.Hash()) - events = append(events, core.ChainSideEvent{Block: types.NewBlockWithHeader(header)}) - } - return err + // Create chain event for the new head block of this insertion. + var ( + lastHeader = chain[len(chain)-1] + block = types.NewBlockWithHeader(lastHeader) + ) + switch status { + case core.CanonStatTy: + lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()}) + lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block}) + case core.SideStatTy: + lc.chainSideFeed.Send(core.ChainSideEvent{Block: block}) } - i, err := lc.hc.InsertHeaderChain(chain, whFunc, start) - lc.postChainEvents(events) - return i, err + return 0, err } // CurrentHeader retrieves the current head header of the canonical chain. The @@ -402,10 +453,15 @@ 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 (lc *LightChain) GetTdByHash(hash common.Hash) *big.Int { - return lc.hc.GetTdByHash(hash) +// GetHeaderByNumberOdr retrieves the total difficult from the database or +// network by hash and number, caching it (associated with its hash) if found. +func (lc *LightChain) GetTdOdr(ctx context.Context, hash common.Hash, number uint64) *big.Int { + td := lc.GetTd(hash, number) + if td != nil { + return td + } + td, _ = GetTd(ctx, lc.odr, hash, number) + return td } // GetHeader retrieves a block header from the database by hash and number, @@ -426,10 +482,9 @@ func (lc *LightChain) HasHeader(hash common.Hash, number uint64) bool { return lc.hc.HasHeader(hash, number) } -// GetBlockHashesFromHash retrieves a number of block hashes starting at a given -// hash, fetching towards the genesis block. -func (lc *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { - return lc.hc.GetBlockHashesFromHash(hash, max) +// GetCanonicalHash returns the canonical hash for a given block number +func (bc *LightChain) GetCanonicalHash(number uint64) common.Hash { + return bc.hc.GetCanonicalHash(number) } // GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or @@ -438,9 +493,6 @@ func (lc *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []com // // Note: ancestor == 0 returns the same block, 1 returns its parent and so on. func (lc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - lc.chainmu.RLock() - defer lc.chainmu.RUnlock() - return lc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) } @@ -486,6 +538,7 @@ func (lc *LightChain) SyncCheckpoint(ctx context.Context, checkpoint *params.Tru // Ensure the chain didn't move past the latest block while retrieving it 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))) + rawdb.WriteHeadHeaderHash(lc.chainDb, header.Hash()) lc.hc.SetCurrentHeader(header) } return true diff --git a/light/lightchain_test.go b/light/lightchain_test.go index 9749401d..8600e563 100644 --- a/light/lightchain_test.go +++ b/light/lightchain_test.go @@ -18,16 +18,17 @@ package light import ( "context" + "errors" "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" + "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/ethdb" + "github.com/ethereum/go-ethereum/params" ) // So we can deterministically seed different blockchains @@ -103,12 +104,13 @@ func testFork(t *testing.T, LightChain *LightChain, i, n int, comparator func(td } // Sanity check that the forked chain can be imported into the original var tdPre, tdPost *big.Int - - tdPre = LightChain.GetTdByHash(LightChain.CurrentHeader().Hash()) + cur := LightChain.CurrentHeader() + tdPre = LightChain.GetTd(cur.Hash(), cur.Number.Uint64()) if err := testHeaderChainImport(headerChainB, LightChain); err != nil { t.Fatalf("failed to import forked header chain: %v", err) } - tdPost = LightChain.GetTdByHash(headerChainB[len(headerChainB)-1].Hash()) + last := headerChainB[len(headerChainB)-1] + tdPost = LightChain.GetTd(last.Hash(), last.Number.Uint64()) // Compare the total difficulties of the chains comparator(tdPre, tdPost) } @@ -123,7 +125,8 @@ func testHeaderChainImport(chain []*types.Header, lightchain *LightChain) error } // Manually insert the header into the database, but don't reorganize (allows subsequent testing) lightchain.chainmu.Lock() - rawdb.WriteTd(lightchain.chainDb, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, lightchain.GetTdByHash(header.ParentHash))) + rawdb.WriteTd(lightchain.chainDb, header.Hash(), header.Number.Uint64(), + new(big.Int).Add(header.Difficulty, lightchain.GetTd(header.ParentHash, header.Number.Uint64()-1))) rawdb.WriteHeader(lightchain.chainDb, header) lightchain.chainmu.Unlock() } @@ -308,7 +311,7 @@ func testReorg(t *testing.T, first, second []int, td int64) { } // Make sure the chain total difficulty is the correct one want := new(big.Int).Add(bc.genesisBlock.Difficulty(), big.NewInt(td)) - if have := bc.GetTdByHash(bc.CurrentHeader().Hash()); have.Cmp(want) != 0 { + if have := bc.GetTd(bc.CurrentHeader().Hash(), bc.CurrentHeader().Number.Uint64()); have.Cmp(want) != 0 { t.Errorf("total difficulty mismatch: have %v, want %v", have, want) } } @@ -321,8 +324,8 @@ func TestBadHeaderHashes(t *testing.T) { var err error headers := makeHeaderChainWithDiff(bc.genesisBlock, []int{1, 2, 4}, 10) core.BadHashes[headers[2].Hash()] = true - if _, err = bc.InsertHeaderChain(headers, 1); err != core.ErrBlacklistedHash { - t.Errorf("error mismatch: have: %v, want %v", err, core.ErrBlacklistedHash) + if _, err = bc.InsertHeaderChain(headers, 1); !errors.Is(err, core.ErrBannedHash) { + t.Errorf("error mismatch: have: %v, want %v", err, core.ErrBannedHash) } } diff --git a/light/nodeset.go b/light/nodeset.go index 6d5dbf85..36625967 100644 --- a/light/nodeset.go +++ b/light/nodeset.go @@ -20,10 +20,10 @@ import ( "errors" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" ) // NodeSet stores a set of trie nodes. It implements trie.Database and can also diff --git a/light/odr.go b/light/odr.go index a4c7873c..9521dd53 100644 --- a/light/odr.go +++ b/light/odr.go @@ -21,11 +21,11 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" + "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/ethdb" ) // NoOdr is the default context passed to an ODR capable function when the ODR @@ -42,6 +42,7 @@ type OdrBackend interface { BloomTrieIndexer() *core.ChainIndexer BloomIndexer() *core.ChainIndexer Retrieve(ctx context.Context, req OdrRequest) error + RetrieveTxStatus(ctx context.Context, req *TxStatusRequest) error IndexerConfig() *IndexerConfig } @@ -82,7 +83,6 @@ func StorageTrieID(state *TrieID, addrHash, root common.Hash) *TrieID { // TrieRequest is the ODR request type for state/storage trie entries type TrieRequest struct { - OdrRequest Id *TrieID Key []byte Proof *NodeSet @@ -95,7 +95,6 @@ func (req *TrieRequest) StoreResult(db ethdb.Database) { // CodeRequest is the ODR request type for retrieving contract code type CodeRequest struct { - OdrRequest Id *TrieID // references storage trie of the account Hash common.Hash Data []byte @@ -103,14 +102,14 @@ type CodeRequest struct { // StoreResult stores the retrieved data in local database func (req *CodeRequest) StoreResult(db ethdb.Database) { - db.Put(req.Hash[:], req.Data) + rawdb.WriteCode(db, req.Hash, req.Data) } // BlockRequest is the ODR request type for retrieving block bodies type BlockRequest struct { - OdrRequest Hash common.Hash Number uint64 + Header *types.Header Rlp []byte } @@ -119,9 +118,8 @@ func (req *BlockRequest) StoreResult(db ethdb.Database) { rawdb.WriteBodyRLP(db, req.Hash, req.Number, req.Rlp) } -// ReceiptsRequest is the ODR request type for retrieving block bodies +// ReceiptsRequest is the ODR request type for retrieving receipts. type ReceiptsRequest struct { - OdrRequest Untrusted bool // Indicator whether the result retrieved is trusted or not Hash common.Hash Number uint64 @@ -136,11 +134,8 @@ func (req *ReceiptsRequest) StoreResult(db ethdb.Database) { } } -// ChtRequest is the ODR request type for state/storage trie entries +// ChtRequest is the ODR request type for retrieving header by Canonical Hash Trie 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 @@ -152,12 +147,9 @@ type ChtRequest struct { // StoreResult stores the retrieved data in local database func (req *ChtRequest) StoreResult(db ethdb.Database) { hash, num := req.Header.Hash(), req.Header.Number.Uint64() - - if !req.Untrusted { - rawdb.WriteHeader(db, req.Header) - rawdb.WriteTd(db, hash, num, req.Td) - rawdb.WriteCanonicalHash(db, hash, num) - } + 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 @@ -193,7 +185,6 @@ type TxStatus struct { // TxStatusRequest is the ODR request type for retrieving transaction status type TxStatusRequest struct { - OdrRequest Hashes []common.Hash Status []TxStatus } diff --git a/light/odr_test.go b/light/odr_test.go index 01a124c1..d08963af 100644 --- a/light/odr_test.go +++ b/light/odr_test.go @@ -24,25 +24,25 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "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/ethdb" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) var ( testBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testBankAddress = crypto.PubkeyToAddress(testBankKey.PublicKey) - testBankFunds = big.NewInt(100000000) + testBankFunds = big.NewInt(1_000_000_000_000_000_000) acc1Key, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") acc2Key, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") @@ -82,12 +82,12 @@ func (odr *testOdr) Retrieve(ctx context.Context, req OdrRequest) error { req.Receipts = rawdb.ReadRawReceipts(odr.sdb, req.Hash, *number) } case *TrieRequest: - t, _ := trie.New(req.Id.Root, trie.NewDatabase(odr.sdb)) + t, _ := trie.New(common.BytesToHash(req.Id.AccKey), req.Id.Root, trie.NewDatabase(odr.sdb)) nodes := NewNodeSet() t.Prove(req.Key, 0, nodes) req.Proof = nodes case *CodeRequest: - req.Data, _ = odr.sdb.Get(req.Hash[:]) + req.Data = rawdb.ReadCode(odr.sdb, req.Hash) } req.StoreResult(odr.ldb) return nil @@ -149,7 +149,7 @@ func odrAccounts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc st = NewState(ctx, header, lc.Odr()) } else { header := bc.GetHeaderByHash(bhash) - st, _ = state.New(header.Root, state.NewDatabase(db)) + st, _ = state.New(header.Root, state.NewDatabase(db), nil) } var res []byte @@ -189,17 +189,18 @@ func odrContractCall(ctx context.Context, db ethdb.Database, bc *core.BlockChain } else { chain = bc header = bc.GetHeaderByHash(bhash) - st, _ = state.New(header.Root, state.NewDatabase(db)) + st, _ = state.New(header.Root, state.NewDatabase(db), nil) } // Perform read-only call. st.SetBalance(testBankAddress, math.MaxBig256) - msg := callmsg{types.NewMessage(testBankAddress, &testContractAddr, 0, new(big.Int), 1000000, new(big.Int), data, false)} - context := core.NewEVMContext(msg, header, chain, nil) - vmenv := vm.NewEVM(context, st, config, vm.Config{}) + msg := callmsg{types.NewMessage(testBankAddress, &testContractAddr, 0, new(big.Int), 1000000, big.NewInt(params.InitialBaseFee), big.NewInt(params.InitialBaseFee), new(big.Int), data, nil, true)} + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(header, chain, nil) + vmenv := vm.NewEVM(context, txContext, st, config, vm.Config{NoBaseFee: true}) gp := new(core.GasPool).AddGas(math.MaxUint64) - ret, _, _, _ := core.ApplyMessage(vmenv, msg, gp) - res = append(res, ret...) + result, _ := core.ApplyMessage(vmenv, msg, gp) + res = append(res, result.Return()...) if st.Error() != nil { return res, st.Error() } @@ -212,17 +213,17 @@ func testChainGen(i int, block *core.BlockGen) { 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) + tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(10_000_000_000_000_000), params.TxGas, block.BaseFee(), 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. - tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, testBankKey) + tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testBankKey) nonce := block.TxNonce(acc1Addr) - tx2, _ := types.SignTx(types.NewTransaction(nonce, acc2Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, acc1Key) + tx2, _ := types.SignTx(types.NewTransaction(nonce, acc2Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, acc1Key) nonce++ - tx3, _ := types.SignTx(types.NewContractCreation(nonce, big.NewInt(0), 1000000, big.NewInt(0), testContractCode), signer, acc1Key) + tx3, _ := types.SignTx(types.NewContractCreation(nonce, big.NewInt(0), 1000000, block.BaseFee(), testContractCode), signer, acc1Key) testContractAddr = crypto.CreateAddress(acc1Addr, nonce) block.AddTx(tx1) block.AddTx(tx2) @@ -232,7 +233,7 @@ func testChainGen(i int, block *core.BlockGen) { 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) + tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, block.BaseFee(), data), signer, testBankKey) block.AddTx(tx) case 3: // Block 4 includes blocks 2 and 3 as uncle headers (with modified extra data). @@ -243,21 +244,25 @@ func testChainGen(i int, block *core.BlockGen) { 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) + tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, block.BaseFee(), data), signer, testBankKey) block.AddTx(tx) } } func testChainOdr(t *testing.T, protocol int, fn odrTestFn) { var ( - sdb = rawdb.NewMemoryDatabase() - ldb = rawdb.NewMemoryDatabase() - gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() + gspec = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } genesis = gspec.MustCommit(sdb) ) gspec.MustCommit(ldb) // Assemble the test environment - blockchain, _ := core.NewBlockChain(sdb, nil, params.TestChainConfig, ethash.NewFullFaker(), vm.Config{}, nil) + blockchain, _ := core.NewBlockChain(sdb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{}, nil, nil) gchain, _ := core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), sdb, 4, testChainGen) if _, err := blockchain.InsertChain(gchain); err != nil { t.Fatal(err) diff --git a/light/odr_util.go b/light/odr_util.go index 37a54f6e..48631139 100644 --- a/light/odr_util.go +++ b/light/odr_util.go @@ -19,76 +19,82 @@ package light import ( "bytes" "context" + "errors" + "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/rlp" ) -var sha3Nil = crypto.Keccak256Hash(nil) +// errNonCanonicalHash is returned if the requested chain data doesn't belong +// to the canonical chain. ODR can only retrieve the canonical chain data covered +// by the CHT or Bloom trie for verification. +var errNonCanonicalHash = errors.New("hash is not currently canonical") +// GetHeaderByNumber retrieves the canonical block header corresponding to the +// given number. The returned header is proven by local CHT. func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*types.Header, error) { + // Try to find it in the local database first. db := odr.Database() hash := rawdb.ReadCanonicalHash(db, number) - if (hash != common.Hash{}) { - // if there is a canonical hash, there is a header too - header := rawdb.ReadHeader(db, hash, number) - if header == nil { - panic("Canonical hash present but header not found") - } - return header, nil - } - var ( - chtCount, sectionHeadNum uint64 - sectionHead common.Hash - ) - if odr.ChtIndexer() != nil { - chtCount, sectionHeadNum, sectionHead = odr.ChtIndexer().Sections() - canonicalHash := rawdb.ReadCanonicalHash(db, sectionHeadNum) - // if the CHT was injected as a trusted checkpoint, we have no canonical hash yet so we accept zero hash too - for chtCount > 0 && canonicalHash != sectionHead && canonicalHash != (common.Hash{}) { - chtCount-- - if chtCount > 0 { - sectionHeadNum = chtCount*odr.IndexerConfig().ChtSize - 1 - sectionHead = odr.ChtIndexer().SectionHead(chtCount - 1) - canonicalHash = rawdb.ReadCanonicalHash(db, sectionHeadNum) - } + // If there is a canonical hash, there should have a header too. + // But if it's pruned, re-fetch from network again. + if (hash != common.Hash{}) { + if header := rawdb.ReadHeader(db, hash, number); header != nil { + return header, nil } } - if number >= chtCount*odr.IndexerConfig().ChtSize { + // Retrieve the header via ODR, ensure the requested header is covered + // by local trusted CHT. + chts, _, chtHead := odr.ChtIndexer().Sections() + if number >= chts*odr.IndexerConfig().ChtSize { 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 { - return nil, err + r := &ChtRequest{ + ChtRoot: GetChtRoot(db, chts-1, chtHead), + ChtNum: chts - 1, + BlockNum: number, + Config: odr.IndexerConfig(), } - 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 } +// GetCanonicalHash retrieves the canonical block hash corresponding to the number. func GetCanonicalHash(ctx context.Context, odr OdrBackend, number uint64) (common.Hash, error) { hash := rawdb.ReadCanonicalHash(odr.Database(), number) - if (hash != common.Hash{}) { + if hash != (common.Hash{}) { return hash, nil } header, err := GetHeaderByNumber(ctx, odr, number) - if header != nil { - return header.Hash(), nil + if err != nil { + return common.Hash{}, err } - return common.Hash{}, err + // number -> canonical mapping already be stored in db, get it. + return header.Hash(), nil +} + +// GetTd retrieves the total difficulty corresponding to the number and hash. +func GetTd(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*big.Int, error) { + td := rawdb.ReadTd(odr.Database(), hash, number) + if td != nil { + return td, nil + } + header, err := GetHeaderByNumber(ctx, odr, number) + if err != nil { + return nil, err + } + if header.Hash() != hash { + return nil, errNonCanonicalHash + } + // -> td mapping already be stored in db, get it. + return rawdb.ReadTd(odr.Database(), hash, number), nil } // GetBodyRLP retrieves the block body (transactions and uncles) in RLP encoding. @@ -96,15 +102,22 @@ func GetBodyRLP(ctx context.Context, odr OdrBackend, hash common.Hash, number ui if data := rawdb.ReadBodyRLP(odr.Database(), hash, number); data != nil { return data, nil } - r := &BlockRequest{Hash: hash, Number: number} + // Retrieve the block header first and pass it for verification. + header, err := GetHeaderByNumber(ctx, odr, number) + if err != nil { + return nil, errNoHeader + } + if header.Hash() != hash { + return nil, errNonCanonicalHash + } + r := &BlockRequest{Hash: hash, Number: number, Header: header} if err := odr.Retrieve(ctx, r); err != nil { return nil, err - } else { - return r.Rlp, nil } + return r.Rlp, nil } -// GetBody retrieves the block body (transactons, uncles) corresponding to the +// GetBody retrieves the block body (transactions, uncles) corresponding to the // hash. func GetBody(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*types.Body, error) { data, err := GetBodyRLP(ctx, odr, hash, number) @@ -122,8 +135,8 @@ func GetBody(ctx context.Context, odr OdrBackend, hash common.Hash, number uint6 // back from the stored header and body. func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*types.Block, error) { // Retrieve the block header and body contents - header := rawdb.ReadHeader(odr.Database(), hash, number) - if header == nil { + header, err := GetHeaderByNumber(ctx, odr, number) + if err != nil { return nil, errNoHeader } body, err := GetBody(ctx, odr, hash, number) @@ -140,7 +153,14 @@ func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, num // 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} + header, err := GetHeaderByNumber(ctx, odr, number) + if err != nil { + return nil, errNoHeader + } + if header.Hash() != hash { + return nil, errNonCanonicalHash + } + r := &ReceiptsRequest{Hash: hash, Number: number, Header: header} if err := odr.Retrieve(ctx, r); err != nil { return nil, err } @@ -171,7 +191,6 @@ func GetBlockLogs(ctx context.Context, odr OdrBackend, hash common.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 @@ -203,82 +222,73 @@ func GetUntrustedBlockLogs(ctx context.Context, odr OdrBackend, header *types.He return logs, nil } -// GetBloomBits retrieves a batch of compressed bloomBits vectors belonging to the given bit index and section indexes -func GetBloomBits(ctx context.Context, odr OdrBackend, bitIdx uint, sectionIdxList []uint64) ([][]byte, error) { +// GetBloomBits retrieves a batch of compressed bloomBits vectors belonging to +// the given bit index and section indexes. +func GetBloomBits(ctx context.Context, odr OdrBackend, bit uint, sections []uint64) ([][]byte, error) { var ( - db = odr.Database() - result = make([][]byte, len(sectionIdxList)) - reqList []uint64 - reqIdx []int + reqIndex []int + reqSections []uint64 + db = odr.Database() + result = make([][]byte, len(sections)) ) - - var ( - bloomTrieCount, sectionHeadNum uint64 - sectionHead common.Hash - ) - if odr.BloomTrieIndexer() != nil { - bloomTrieCount, sectionHeadNum, sectionHead = odr.BloomTrieIndexer().Sections() - canonicalHash := rawdb.ReadCanonicalHash(db, sectionHeadNum) - // if the BloomTrie was injected as a trusted checkpoint, we have no canonical hash yet so we accept zero hash too - for bloomTrieCount > 0 && canonicalHash != sectionHead && canonicalHash != (common.Hash{}) { - bloomTrieCount-- - if bloomTrieCount > 0 { - sectionHeadNum = bloomTrieCount*odr.IndexerConfig().BloomTrieSize - 1 - sectionHead = odr.BloomTrieIndexer().SectionHead(bloomTrieCount - 1) - canonicalHash = rawdb.ReadCanonicalHash(db, sectionHeadNum) - } - } - } - - for i, sectionIdx := range sectionIdxList { - sectionHead := rawdb.ReadCanonicalHash(db, (sectionIdx+1)*odr.IndexerConfig().BloomSize-1) - // if we don't have the canonical hash stored for this section head number, we'll still look for - // an entry with a zero sectionHead (we store it with zero section head too if we don't know it - // at the time of the retrieval) - bloomBits, err := rawdb.ReadBloomBits(db, bitIdx, sectionIdx, sectionHead) - if err == nil { + blooms, _, sectionHead := odr.BloomTrieIndexer().Sections() + for i, section := range sections { + sectionHead := rawdb.ReadCanonicalHash(db, (section+1)*odr.IndexerConfig().BloomSize-1) + // If we don't have the canonical hash stored for this section head number, + // we'll still look for an entry with a zero sectionHead (we store it with + // zero section head too if we don't know it at the time of the retrieval) + if bloomBits, _ := rawdb.ReadBloomBits(db, bit, section, sectionHead); len(bloomBits) != 0 { result[i] = bloomBits - } else { - // TODO(rjl493456442) Convert sectionIndex to BloomTrie relative index - if sectionIdx >= bloomTrieCount { - return nil, errNoTrustedBloomTrie - } - reqList = append(reqList, sectionIdx) - reqIdx = append(reqIdx, i) + continue } + // TODO(rjl493456442) Convert sectionIndex to BloomTrie relative index + if section >= blooms { + return nil, errNoTrustedBloomTrie + } + reqSections = append(reqSections, section) + reqIndex = append(reqIndex, i) } - if reqList == nil { + // Find all bloombits in database, nothing to query via odr, return. + if reqSections == nil { return result, nil } - - r := &BloomRequest{BloomTrieRoot: GetBloomTrieRoot(db, bloomTrieCount-1, sectionHead), BloomTrieNum: bloomTrieCount - 1, - BitIdx: bitIdx, SectionIndexList: reqList, Config: odr.IndexerConfig()} + // Send odr request to retrieve missing bloombits. + r := &BloomRequest{ + BloomTrieRoot: GetBloomTrieRoot(db, blooms-1, sectionHead), + BloomTrieNum: blooms - 1, + BitIdx: bit, + SectionIndexList: reqSections, + Config: odr.IndexerConfig(), + } if err := odr.Retrieve(ctx, r); err != nil { return nil, err - } else { - for i, idx := range reqIdx { - result[idx] = r.BloomBits[i] - } - return result, nil } + for i, idx := range reqIndex { + result[idx] = r.BloomBits[i] + } + return result, nil } -// GetTransaction retrieves a canonical transaction by hash and also returns its position in the chain +// GetTransaction retrieves a canonical transaction by hash and also returns +// its position in the chain. There is no guarantee in the LES protocol that +// the mined transaction will be retrieved back for sure because of different +// reasons(the transaction is unindexed, the malicious server doesn't reply it +// deliberately, etc). Therefore, unretrieved transactions will receive a certain +// number of retries, thus giving a weak guarantee. 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 { + if err := odr.RetrieveTxStatus(ctx, r); err != nil || r.Status[0].Status != core.TxStatusIncluded { + return nil, common.Hash{}, 0, 0, err + } + 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 + } + body, err := GetBody(ctx, odr, pos.BlockHash, pos.BlockIndex) + if err != nil || uint64(len(body.Transactions)) <= pos.Index || body.Transactions[pos.Index].Hash() != txHash { 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 - } } + return body.Transactions[pos.Index], pos.BlockHash, pos.BlockIndex, pos.Index, nil } diff --git a/light/postprocess.go b/light/postprocess.go index 250b8264..3f9da659 100644 --- a/light/postprocess.go +++ b/light/postprocess.go @@ -17,6 +17,7 @@ package light import ( + "bytes" "context" "encoding/binary" "errors" @@ -24,16 +25,17 @@ import ( "math/big" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/bitutil" + "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/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) // IndexerConfig includes a set of configs for chain indexers. @@ -79,21 +81,21 @@ var ( } // TestServerIndexerConfig wraps a set of configs as a test indexer config for server side. TestServerIndexerConfig = &IndexerConfig{ - ChtSize: 512, - ChtConfirms: 4, - BloomSize: 64, - BloomConfirms: 4, - BloomTrieSize: 512, - BloomTrieConfirms: 4, + ChtSize: 128, + ChtConfirms: 1, + BloomSize: 16, + BloomConfirms: 1, + BloomTrieSize: 128, + BloomTrieConfirms: 1, } // TestClientIndexerConfig wraps a set of configs as a test indexer config for client side. TestClientIndexerConfig = &IndexerConfig{ - ChtSize: 512, - ChtConfirms: 32, - BloomSize: 512, - BloomConfirms: 32, - BloomTrieSize: 512, - BloomTrieConfirms: 32, + ChtSize: 128, + ChtConfirms: 8, + BloomSize: 128, + BloomConfirms: 8, + BloomTrieSize: 128, + BloomTrieConfirms: 8, } ) @@ -128,23 +130,27 @@ func StoreChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common // ChtIndexerBackend implements core.ChainIndexerBackend. type ChtIndexerBackend struct { + disablePruning bool diskdb, trieTable ethdb.Database odr OdrBackend triedb *trie.Database + trieset mapset.Set section, sectionSize uint64 lastHash common.Hash trie *trie.Trie } // NewChtIndexer creates a Cht chain indexer -func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64) *core.ChainIndexer { +func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64, disablePruning bool) *core.ChainIndexer { trieTable := rawdb.NewTable(db, ChtTablePrefix) backend := &ChtIndexerBackend{ - diskdb: db, - odr: odr, - trieTable: trieTable, - triedb: trie.NewDatabaseWithCache(trieTable, 1), // Use a tiny cache only to keep memory down - sectionSize: size, + diskdb: db, + odr: odr, + trieTable: trieTable, + triedb: trie.NewDatabaseWithConfig(trieTable, &trie.Config{Cache: 1}), // Use a tiny cache only to keep memory down + trieset: mapset.NewSet(), + sectionSize: size, + disablePruning: disablePruning, } return core.NewChainIndexer(db, rawdb.NewTable(db, "chtIndexV2-"), backend, size, confirms, time.Millisecond*100, "cht") } @@ -181,15 +187,14 @@ func (c *ChtIndexerBackend) Reset(ctx context.Context, section uint64, lastSecti root = GetChtRoot(c.diskdb, section-1, lastSectionHead) } var err error - c.trie, err = trie.New(root, c.triedb) + c.trie, err = trie.New(common.Hash{}, root, c.triedb) if err != nil && c.odr != nil { err = c.fetchMissingNodes(ctx, section, root) if err == nil { - c.trie, err = trie.New(root, c.triedb) + c.trie, err = trie.New(common.Hash{}, root, c.triedb) } } - c.section = section return err } @@ -212,23 +217,103 @@ func (c *ChtIndexerBackend) Process(ctx context.Context, header *types.Header) e // Commit implements core.ChainIndexerBackend func (c *ChtIndexerBackend) Commit() error { - root, err := c.trie.Commit(nil) + root, nodes, err := c.trie.Commit(false) if err != nil { return err } - c.triedb.Commit(root, false) - + // Commit trie changes into trie database in case it's not nil. + if nodes != nil { + if err := c.triedb.Update(trie.NewWithNodeSet(nodes)); err != nil { + return err + } + } + // Re-create trie with newly generated root and updated database. + c.trie, err = trie.New(common.Hash{}, root, c.triedb) + if err != nil { + return err + } + // Pruning historical trie nodes if necessary. + if !c.disablePruning { + // Flush the triedb and track the latest trie nodes. + c.trieset.Clear() + c.triedb.Commit(root, false, func(hash common.Hash) { c.trieset.Add(hash) }) + + it := c.trieTable.NewIterator(nil, nil) + defer it.Release() + + var ( + deleted int + remaining int + t = time.Now() + ) + for it.Next() { + trimmed := bytes.TrimPrefix(it.Key(), []byte(ChtTablePrefix)) + if !c.trieset.Contains(common.BytesToHash(trimmed)) { + c.trieTable.Delete(trimmed) + deleted += 1 + } else { + remaining += 1 + } + } + log.Debug("Prune historical CHT trie nodes", "deleted", deleted, "remaining", remaining, "elapsed", common.PrettyDuration(time.Since(t))) + } else { + c.triedb.Commit(root, false, nil) + } 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 } +// Prune implements core.ChainIndexerBackend which deletes all chain data +// (except hash<->number mappings) older than the specified threshold. +func (c *ChtIndexerBackend) Prune(threshold uint64) error { + // Short circuit if the light pruning is disabled. + if c.disablePruning { + return nil + } + t := time.Now() + // Always keep genesis header in database. + start, end := uint64(1), (threshold+1)*c.sectionSize + + var batch = c.diskdb.NewBatch() + for { + numbers, hashes := rawdb.ReadAllCanonicalHashes(c.diskdb, start, end, 10240) + if len(numbers) == 0 { + break + } + for i := 0; i < len(numbers); i++ { + // Keep hash<->number mapping in database otherwise the hash based + // API(e.g. GetReceipt, GetLogs) will be broken. + // + // Storage size wise, the size of a mapping is ~41bytes. For one + // section is about 1.3MB which is acceptable. + // + // In order to totally get rid of this index, we need an additional + // flag to specify how many historical data light client can serve. + rawdb.DeleteCanonicalHash(batch, numbers[i]) + rawdb.DeleteBlockWithoutNumber(batch, hashes[i], numbers[i]) + } + if batch.ValueSize() > ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + return err + } + batch.Reset() + } + start = numbers[len(numbers)-1] + 1 + } + if err := batch.Write(); err != nil { + return err + } + log.Debug("Prune history headers", "threshold", threshold, "elapsed", common.PrettyDuration(time.Since(t))) + return nil +} + var ( bloomTriePrefix = []byte("bltRoot-") // bloomTriePrefix + bloomTrieNum (uint64 big endian) -> trie root hash BloomTrieTablePrefix = "blt-" ) -// GetBloomTrieRoot reads the BloomTrie root assoctiated to the given section from the database +// GetBloomTrieRoot reads the BloomTrie root associated to the given section from the database func GetBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.Hash) common.Hash { var encNumber [8]byte binary.BigEndian.PutUint64(encNumber[:], sectionIdx) @@ -236,7 +321,7 @@ func GetBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.H return common.BytesToHash(data) } -// StoreBloomTrieRoot writes the BloomTrie root assoctiated to the given section into the database +// StoreBloomTrieRoot writes the BloomTrie root associated to the given section into the database func StoreBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common.Hash) { var encNumber [8]byte binary.BigEndian.PutUint64(encNumber[:], sectionIdx) @@ -245,8 +330,10 @@ func StoreBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root // BloomTrieIndexerBackend implements core.ChainIndexerBackend type BloomTrieIndexerBackend struct { + disablePruning bool diskdb, trieTable ethdb.Database triedb *trie.Database + trieset mapset.Set odr OdrBackend section uint64 parentSize uint64 @@ -257,15 +344,17 @@ type BloomTrieIndexerBackend struct { } // NewBloomTrieIndexer creates a BloomTrie chain indexer -func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uint64) *core.ChainIndexer { +func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uint64, disablePruning bool) *core.ChainIndexer { trieTable := rawdb.NewTable(db, BloomTrieTablePrefix) backend := &BloomTrieIndexerBackend{ - diskdb: db, - odr: odr, - trieTable: trieTable, - triedb: trie.NewDatabaseWithCache(trieTable, 1), // Use a tiny cache only to keep memory down - parentSize: parentSize, - size: size, + diskdb: db, + odr: odr, + trieTable: trieTable, + triedb: trie.NewDatabaseWithConfig(trieTable, &trie.Config{Cache: 1}), // Use a tiny cache only to keep memory down + trieset: mapset.NewSet(), + parentSize: parentSize, + size: size, + disablePruning: disablePruning, } backend.bloomTrieRatio = size / parentSize backend.sectionHeads = make([]common.Hash, backend.bloomTrieRatio) @@ -303,7 +392,6 @@ func (b *BloomTrieIndexerBackend) fetchMissingNodes(ctx context.Context, section } }() } - for i := uint(0); i < types.BloomBitLength; i++ { indexCh <- i } @@ -326,11 +414,11 @@ func (b *BloomTrieIndexerBackend) Reset(ctx context.Context, section uint64, las root = GetBloomTrieRoot(b.diskdb, section-1, lastSectionHead) } var err error - b.trie, err = trie.New(root, b.triedb) + b.trie, err = trie.New(common.Hash{}, root, b.triedb) if err != nil && b.odr != nil { err = b.fetchMissingNodes(ctx, section, root) if err == nil { - b.trie, err = trie.New(root, b.triedb) + b.trie, err = trie.New(common.Hash{}, root, b.triedb) } } b.section = section @@ -376,14 +464,66 @@ func (b *BloomTrieIndexerBackend) Commit() error { b.trie.Delete(encKey[:]) } } - root, err := b.trie.Commit(nil) + root, nodes, err := b.trie.Commit(false) if err != nil { return err } - b.triedb.Commit(root, false) - + // Commit trie changes into trie database in case it's not nil. + if nodes != nil { + if err := b.triedb.Update(trie.NewWithNodeSet(nodes)); err != nil { + return err + } + } + // Re-create trie with newly generated root and updated database. + b.trie, err = trie.New(common.Hash{}, root, b.triedb) + if err != nil { + return err + } + // Pruning historical trie nodes if necessary. + if !b.disablePruning { + // Flush the triedb and track the latest trie nodes. + b.trieset.Clear() + b.triedb.Commit(root, false, func(hash common.Hash) { b.trieset.Add(hash) }) + + it := b.trieTable.NewIterator(nil, nil) + defer it.Release() + + var ( + deleted int + remaining int + t = time.Now() + ) + for it.Next() { + trimmed := bytes.TrimPrefix(it.Key(), []byte(BloomTrieTablePrefix)) + if !b.trieset.Contains(common.BytesToHash(trimmed)) { + b.trieTable.Delete(trimmed) + deleted += 1 + } else { + remaining += 1 + } + } + log.Debug("Prune historical bloom trie nodes", "deleted", deleted, "remaining", remaining, "elapsed", common.PrettyDuration(time.Since(t))) + } else { + b.triedb.Commit(root, false, nil) + } sectionHead := b.sectionHeads[b.bloomTrieRatio-1] - log.Info("Storing bloom trie", "section", b.section, "head", fmt.Sprintf("%064x", sectionHead), "root", fmt.Sprintf("%064x", root), "compression", float64(compSize)/float64(decompSize)) StoreBloomTrieRoot(b.diskdb, b.section, sectionHead, root) + log.Info("Storing bloom trie", "section", b.section, "head", fmt.Sprintf("%064x", sectionHead), "root", fmt.Sprintf("%064x", root), "compression", float64(compSize)/float64(decompSize)) + + return nil +} + +// Prune implements core.ChainIndexerBackend which deletes all +// bloombits which older than the specified threshold. +func (b *BloomTrieIndexerBackend) Prune(threshold uint64) error { + // Short circuit if the light pruning is disabled. + if b.disablePruning { + return nil + } + start := time.Now() + for i := uint(0); i < types.BloomBitLength; i++ { + rawdb.DeleteBloombits(b.diskdb, i, 0, threshold*b.bloomTrieRatio+b.bloomTrieRatio) + } + log.Debug("Prune history bloombits", "threshold", threshold, "elapsed", common.PrettyDuration(time.Since(start))) return nil } diff --git a/light/trie.go b/light/trie.go index b005d5df..b88265e8 100644 --- a/light/trie.go +++ b/light/trie.go @@ -21,16 +21,22 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/trie" + "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/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + sha3Nil = crypto.Keccak256Hash(nil) ) func NewState(ctx context.Context, head *types.Header, odr OdrBackend) *state.StateDB { - state, _ := state.New(head.Root, NewStateDatabase(ctx, head, odr)) + state, _ := state.New(head.Root, NewStateDatabase(ctx, head, odr), nil) return state } @@ -70,7 +76,8 @@ func (db *odrDatabase) ContractCode(addrHash, codeHash common.Hash) ([]byte, err if codeHash == sha3Nil { return nil, nil } - if code, err := db.backend.Database().Get(codeHash[:]); err == nil { + code := rawdb.ReadCode(db.backend.Database(), codeHash) + if len(code) != 0 { return code, nil } id := *db.id @@ -105,6 +112,33 @@ func (t *odrTrie) TryGet(key []byte) ([]byte, error) { return res, err } +func (t *odrTrie) TryGetAccount(key []byte) (*types.StateAccount, error) { + key = crypto.Keccak256(key) + var res types.StateAccount + err := t.do(key, func() (err error) { + value, err := t.trie.TryGet(key) + if err != nil { + return err + } + if value == nil { + return nil + } + return rlp.DecodeBytes(value, &res) + }) + return &res, err +} + +func (t *odrTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error { + key = crypto.Keccak256(key) + value, err := rlp.EncodeToBytes(acc) + if err != nil { + return fmt.Errorf("decoding error in account update: %w", err) + } + return t.do(key, func() error { + return t.trie.TryUpdate(key, value) + }) +} + func (t *odrTrie) TryUpdate(key, value []byte) error { key = crypto.Keccak256(key) return t.do(key, func() error { @@ -119,11 +153,19 @@ func (t *odrTrie) TryDelete(key []byte) error { }) } -func (t *odrTrie) Commit(onleaf trie.LeafCallback) (common.Hash, error) { +// TryDeleteAccount abstracts an account deletion from the trie. +func (t *odrTrie) TryDeleteAccount(key []byte) error { + key = crypto.Keccak256(key) + return t.do(key, func() error { + return t.trie.TryDelete(key) + }) +} + +func (t *odrTrie) Commit(collectLeaf bool) (common.Hash, *trie.NodeSet, error) { if t.trie == nil { - return t.id.Root, nil + return t.id.Root, nil, nil } - return t.trie.Commit(onleaf) + return t.trie.Commit(collectLeaf) } func (t *odrTrie) Hash() common.Hash { @@ -151,7 +193,11 @@ func (t *odrTrie) do(key []byte, fn func() error) error { for { var err error if t.trie == nil { - t.trie, err = trie.New(t.id.Root, trie.NewDatabase(t.db.backend.Database())) + var owner common.Hash + if len(t.id.AccKey) > 0 { + owner = common.BytesToHash(t.id.AccKey) + } + t.trie, err = trie.New(owner, t.id.Root, trie.NewDatabase(t.db.backend.Database())) } if err == nil { err = fn() @@ -177,7 +223,11 @@ func newNodeIterator(t *odrTrie, startkey []byte) trie.NodeIterator { // Open the actual non-ODR trie if that hasn't happened yet. if t.trie == nil { it.do(func() error { - t, err := trie.New(t.id.Root, trie.NewDatabase(t.db.backend.Database())) + var owner common.Hash + if len(t.id.AccKey) > 0 { + owner = common.BytesToHash(t.id.AccKey) + } + t, err := trie.New(owner, t.id.Root, trie.NewDatabase(t.db.backend.Database())) if err == nil { it.t.trie = t } diff --git a/light/trie_test.go b/light/trie_test.go index 3105b4ff..581469c4 100644 --- a/light/trie_test.go +++ b/light/trie_test.go @@ -20,27 +20,32 @@ import ( "bytes" "context" "fmt" + "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/trie" "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/params" + "github.com/ethereum/go-ethereum/trie" ) func TestNodeIterator(t *testing.T) { var ( fulldb = rawdb.NewMemoryDatabase() lightdb = rawdb.NewMemoryDatabase() - gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} + gspec = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } genesis = gspec.MustCommit(fulldb) ) gspec.MustCommit(lightdb) - blockchain, _ := core.NewBlockChain(fulldb, nil, params.TestChainConfig, ethash.NewFullFaker(), vm.Config{}, nil) + blockchain, _ := core.NewBlockChain(fulldb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{}, nil, nil) gchain, _ := core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), fulldb, 4, testChainGen) if _, err := blockchain.InsertChain(gchain); err != nil { panic(err) @@ -72,7 +77,7 @@ func diffTries(t1, t2 state.Trie) error { case i1.Err != nil: return fmt.Errorf("full trie iterator error: %v", i1.Err) case i2.Err != nil: - return fmt.Errorf("light trie iterator error: %v", i1.Err) + return fmt.Errorf("light trie iterator error: %v", i2.Err) case i1.Next(): return fmt.Errorf("full trie iterator has more k/v pairs") case i2.Next(): diff --git a/light/txpool.go b/light/txpool.go index b5a224b8..b3e1a62e 100644 --- a/light/txpool.go +++ b/light/txpool.go @@ -23,16 +23,15 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) const ( @@ -69,9 +68,10 @@ type TxPool struct { clearIdx uint64 // earliest block nr that can contain mined tx info istanbul bool // Fork indicator whether we are in the istanbul stage. + eip2718 bool // Fork indicator whether we are in the eip2718 stage. } -// TxRelayBackend provides an interface to the mechanism that forwards transacions +// TxRelayBackend provides an interface to the mechanism that forwards transactions // to the ETH network. The implementations of the functions should be non-blocking. // // Send instructs backend to forward new transactions @@ -90,7 +90,7 @@ type TxRelayBackend interface { func NewTxPool(config *params.ChainConfig, chain *LightChain, relay TxRelayBackend) *TxPool { pool := &TxPool{ config: config, - signer: types.NewEIP155Signer(config.ChainID), + signer: types.LatestSigner(config), nonce: make(map[common.Address]uint64), pending: make(map[common.Hash]*types.Transaction), mined: make(map[common.Hash][]*types.Transaction), @@ -185,7 +185,7 @@ func (pool *TxPool) checkMinedTxs(ctx context.Context, hash common.Hash, number if _, err := GetBlockReceipts(ctx, pool.odr, hash, number); err != nil { // ODR caches, ignore results return err } - rawdb.WriteTxLookupEntries(pool.chainDb, block) + rawdb.WriteTxLookupEntriesByBlock(pool.chainDb, block) // Update the transaction pool's state for _, tx := range list { @@ -314,6 +314,7 @@ func (pool *TxPool) setNewHead(head *types.Header) { // Update fork indicator by next pending block number next := new(big.Int).Add(head.Number, big.NewInt(1)) pool.istanbul = pool.config.IsIstanbul(next) + pool.eip2718 = pool.config.IsBerlin(next) } // Stop stops the light transaction pool @@ -381,7 +382,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, true, pool.istanbul) + gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, true, pool.istanbul) if err != nil { return err } @@ -397,7 +398,7 @@ func (pool *TxPool) add(ctx context.Context, tx *types.Transaction) error { hash := tx.Hash() if pool.pending[hash] != nil { - return fmt.Errorf("Known transaction (%x)", hash[:4]) + return fmt.Errorf("known transaction (%x)", hash[:4]) } err := pool.validateTx(ctx, tx) if err != nil { @@ -430,8 +431,7 @@ func (pool *TxPool) add(ctx context.Context, tx *types.Transaction) error { func (pool *TxPool) Add(ctx context.Context, tx *types.Transaction) error { pool.mu.Lock() defer pool.mu.Unlock() - - data, err := rlp.EncodeToBytes(tx) + data, err := tx.MarshalBinary() if err != nil { return err } @@ -505,6 +505,25 @@ func (pool *TxPool) Content() (map[common.Address]types.Transactions, map[common return pending, queued } +// ContentFrom retrieves the data content of the transaction pool, returning the +// pending as well as queued transactions of this address, grouped by nonce. +func (pool *TxPool) ContentFrom(addr common.Address) (types.Transactions, types.Transactions) { + pool.mu.RLock() + defer pool.mu.RUnlock() + + // Retrieve the pending transactions and sort by nonce + var pending types.Transactions + for _, tx := range pool.pending { + account, _ := types.Sender(pool.signer, tx) + if account != addr { + continue + } + pending = append(pending, tx) + } + // There are no queued transactions in a light pool, just return an empty map + return pending, types.Transactions{} +} + // RemoveTransactions removes all given transactions from the pool. func (pool *TxPool) RemoveTransactions(txs types.Transactions) { pool.mu.Lock() diff --git a/light/txpool_test.go b/light/txpool_test.go index 03306190..78cac513 100644 --- a/light/txpool_test.go +++ b/light/txpool_test.go @@ -23,13 +23,13 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" + "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/params" ) type testTxRelay struct { @@ -77,18 +77,22 @@ func txPoolTestChainGen(i int, block *core.BlockGen) { func TestTxPool(t *testing.T) { for i := range testTx { - testTx[i], _ = types.SignTx(types.NewTransaction(uint64(i), acc1Addr, big.NewInt(10000), params.TxGas, nil, nil), types.HomesteadSigner{}, testBankKey) + testTx[i], _ = types.SignTx(types.NewTransaction(uint64(i), acc1Addr, big.NewInt(10000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), types.HomesteadSigner{}, testBankKey) } var ( - sdb = rawdb.NewMemoryDatabase() - ldb = rawdb.NewMemoryDatabase() - gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() + gspec = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, + BaseFee: big.NewInt(params.InitialBaseFee), + } genesis = gspec.MustCommit(sdb) ) gspec.MustCommit(ldb) // Assemble the test environment - blockchain, _ := core.NewBlockChain(sdb, nil, params.TestChainConfig, ethash.NewFullFaker(), vm.Config{}, nil) + blockchain, _ := core.NewBlockChain(sdb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{}, nil, nil) gchain, _ := core.GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), sdb, poolTestBlocks, txPoolTestChainGen) if _, err := blockchain.InsertChain(gchain); err != nil { panic(err) diff --git a/log/README.md b/log/README.md index b4476577..47426806 100644 --- a/log/README.md +++ b/log/README.md @@ -1,8 +1,8 @@ -![obligatory xkcd](http://imgs.xkcd.com/comics/standards.png) +![obligatory xkcd](https://imgs.xkcd.com/comics/standards.png) # log15 [![godoc reference](https://godoc.org/github.com/inconshreveable/log15?status.png)](https://godoc.org/github.com/inconshreveable/log15) [![Build Status](https://travis-ci.org/inconshreveable/log15.svg?branch=master)](https://travis-ci.org/inconshreveable/log15) -Package log15 provides an opinionated, simple toolkit for best-practice logging in Go (golang) that is both human and machine readable. It is modeled after the Go standard library's [`io`](http://golang.org/pkg/io/) and [`net/http`](http://golang.org/pkg/net/http/) packages and is an alternative to the standard library's [`log`](http://golang.org/pkg/log/) package. +Package log15 provides an opinionated, simple toolkit for best-practice logging in Go (golang) that is both human and machine readable. It is modeled after the Go standard library's [`io`](https://golang.org/pkg/io/) and [`net/http`](https://golang.org/pkg/net/http/) packages and is an alternative to the standard library's [`log`](https://golang.org/pkg/log/) package. ## Features - A simple, easy-to-understand API diff --git a/log/doc.go b/log/doc.go index bff2f496..993743c0 100644 --- a/log/doc.go +++ b/log/doc.go @@ -65,7 +65,7 @@ This will output a log line that includes the path context that is attached to t Handlers -The Handler interface defines where log lines are printed to and how they are formated. Handler is a +The Handler interface defines where log lines are printed to and how they are formatted. Handler is a single interface that is inspired by net/http's handler interface: type Handler interface { diff --git a/log/format.go b/log/format.go index 0ad916b1..baf8fdda 100644 --- a/log/format.go +++ b/log/format.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "fmt" + "math/big" "reflect" "strconv" "strings" @@ -23,7 +24,7 @@ const ( // locationTrims are trimmed for display to avoid unwieldy log lines. var locationTrims = []string{ - "github.com/cryptoecc/ETH-ECC/", + "github.com/ethereum/go-ethereum/", } // PrintOrigins sets or unsets log location (file:line) printing for terminal @@ -78,7 +79,7 @@ type TerminalStringer interface { // a terminal with color-coded level output and terser human friendly timestamp. // This format should only be used for interactive programs or while developing. // -// [LEVEL] [TIME] MESAGE key=value key=value ... +// [LEVEL] [TIME] MESSAGE key=value key=value ... // // Example: // @@ -329,11 +330,20 @@ func formatLogfmtValue(value interface{}, term bool) string { return "nil" } - if t, ok := value.(time.Time); ok { + switch v := value.(type) { + case time.Time: // Performance optimization: No need for escaping since the provided // timeFormat doesn't have any escape characters, and escaping is // expensive. - return t.Format(timeFormat) + return v.Format(timeFormat) + + case *big.Int: + // Big ints get consumed by the Stringer clause so we need to handle + // them earlier on. + if v == nil { + return "" + } + return formatLogfmtBigInt(v) } if term { if s, ok := value.(TerminalStringer); ok { @@ -349,8 +359,27 @@ func formatLogfmtValue(value interface{}, term bool) string { return strconv.FormatFloat(float64(v), floatFormat, 3, 64) case float64: return strconv.FormatFloat(v, floatFormat, 3, 64) - case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: - return fmt.Sprintf("%d", value) + case int8: + return strconv.FormatInt(int64(v), 10) + case uint8: + return strconv.FormatInt(int64(v), 10) + case int16: + return strconv.FormatInt(int64(v), 10) + case uint16: + return strconv.FormatInt(int64(v), 10) + // Larger integers get thousands separators. + case int: + return FormatLogfmtInt64(int64(v)) + case int32: + return FormatLogfmtInt64(int64(v)) + case int64: + return FormatLogfmtInt64(v) + case uint: + return FormatLogfmtUint64(uint64(v)) + case uint32: + return FormatLogfmtUint64(uint64(v)) + case uint64: + return FormatLogfmtUint64(v) case string: return escapeString(v) default: @@ -358,49 +387,100 @@ func formatLogfmtValue(value interface{}, term bool) string { } } -var stringBufPool = sync.Pool{ - New: func() interface{} { return new(bytes.Buffer) }, +// FormatLogfmtInt64 formats n with thousand separators. +func FormatLogfmtInt64(n int64) string { + if n < 0 { + return formatLogfmtUint64(uint64(-n), true) + } + return formatLogfmtUint64(uint64(n), false) } -func escapeString(s string) string { - needsQuotes := false - needsEscape := false - for _, r := range s { - if r <= ' ' || r == '=' || r == '"' { - needsQuotes = true +// FormatLogfmtUint64 formats n with thousand separators. +func FormatLogfmtUint64(n uint64) string { + return formatLogfmtUint64(n, false) +} + +func formatLogfmtUint64(n uint64, neg bool) string { + // Small numbers are fine as is + if n < 100000 { + if neg { + return strconv.Itoa(-int(n)) + } else { + return strconv.Itoa(int(n)) } - if r == '\\' || r == '"' || r == '\n' || r == '\r' || r == '\t' { - needsEscape = true + } + // Large numbers should be split + const maxLength = 26 + + var ( + out = make([]byte, maxLength) + i = maxLength - 1 + comma = 0 + ) + for ; n > 0; i-- { + if comma == 3 { + comma = 0 + out[i] = ',' + } else { + comma++ + out[i] = '0' + byte(n%10) + n /= 10 } } - if !needsEscape && !needsQuotes { - return s + if neg { + out[i] = '-' + i-- } - e := stringBufPool.Get().(*bytes.Buffer) - e.WriteByte('"') - for _, r := range s { - switch r { - case '\\', '"': - e.WriteByte('\\') - e.WriteByte(byte(r)) - case '\n': - e.WriteString("\\n") - case '\r': - e.WriteString("\\r") - case '\t': - e.WriteString("\\t") + return string(out[i+1:]) +} + +// formatLogfmtBigInt formats n with thousand separators. +func formatLogfmtBigInt(n *big.Int) string { + if n.IsUint64() { + return FormatLogfmtUint64(n.Uint64()) + } + if n.IsInt64() { + return FormatLogfmtInt64(n.Int64()) + } + + var ( + text = n.String() + buf = make([]byte, len(text)+len(text)/3) + comma = 0 + i = len(buf) - 1 + ) + for j := len(text) - 1; j >= 0; j, i = j-1, i-1 { + c := text[j] + + switch { + case c == '-': + buf[i] = c + case comma == 3: + buf[i] = ',' + i-- + comma = 0 + fallthrough default: - e.WriteRune(r) + buf[i] = c + comma++ } } - e.WriteByte('"') - var ret string - if needsQuotes { - ret = e.String() - } else { - ret = string(e.Bytes()[1 : e.Len()-1]) + return string(buf[i+1:]) +} + +// escapeString checks if the provided string needs escaping/quoting, and +// calls strconv.Quote if needed +func escapeString(s string) string { + needsQuoting := false + for _, r := range s { + // We quote everything below " (0x34) and above~ (0x7E), plus equal-sign + if r <= '"' || r > '~' || r == '=' { + needsQuoting = true + break + } + } + if !needsQuoting { + return s } - e.Reset() - stringBufPool.Put(e) - return ret + return strconv.Quote(s) } diff --git a/log/format_test.go b/log/format_test.go new file mode 100644 index 00000000..d7e0a957 --- /dev/null +++ b/log/format_test.go @@ -0,0 +1,95 @@ +package log + +import ( + "math" + "math/big" + "math/rand" + "testing" +) + +func TestPrettyInt64(t *testing.T) { + tests := []struct { + n int64 + s string + }{ + {0, "0"}, + {10, "10"}, + {-10, "-10"}, + {100, "100"}, + {-100, "-100"}, + {1000, "1000"}, + {-1000, "-1000"}, + {10000, "10000"}, + {-10000, "-10000"}, + {99999, "99999"}, + {-99999, "-99999"}, + {100000, "100,000"}, + {-100000, "-100,000"}, + {1000000, "1,000,000"}, + {-1000000, "-1,000,000"}, + {math.MaxInt64, "9,223,372,036,854,775,807"}, + {math.MinInt64, "-9,223,372,036,854,775,808"}, + } + for i, tt := range tests { + if have := FormatLogfmtInt64(tt.n); have != tt.s { + t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s) + } + } +} + +func TestPrettyUint64(t *testing.T) { + tests := []struct { + n uint64 + s string + }{ + {0, "0"}, + {10, "10"}, + {100, "100"}, + {1000, "1000"}, + {10000, "10000"}, + {99999, "99999"}, + {100000, "100,000"}, + {1000000, "1,000,000"}, + {math.MaxUint64, "18,446,744,073,709,551,615"}, + } + for i, tt := range tests { + if have := FormatLogfmtUint64(tt.n); have != tt.s { + t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s) + } + } +} + +func TestPrettyBigInt(t *testing.T) { + tests := []struct { + int string + s string + }{ + {"111222333444555678999", "111,222,333,444,555,678,999"}, + {"-111222333444555678999", "-111,222,333,444,555,678,999"}, + {"11122233344455567899900", "11,122,233,344,455,567,899,900"}, + {"-11122233344455567899900", "-11,122,233,344,455,567,899,900"}, + } + + for _, tt := range tests { + v, _ := new(big.Int).SetString(tt.int, 10) + if have := formatLogfmtBigInt(v); have != tt.s { + t.Errorf("invalid output %s, want %s", have, tt.s) + } + } +} + +var sink string + +func BenchmarkPrettyInt64Logfmt(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + sink = FormatLogfmtInt64(rand.Int63()) + } +} + +func BenchmarkPrettyUint64Logfmt(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + sink = FormatLogfmtUint64(rand.Uint64()) + } +} diff --git a/log/handler.go b/log/handler.go index 2f01b5dc..4b9515fa 100644 --- a/log/handler.go +++ b/log/handler.go @@ -8,11 +8,6 @@ import ( "reflect" "sync" - "io/ioutil" - "path/filepath" - "regexp" - "strings" - "github.com/go-stack/stack" ) @@ -57,8 +52,9 @@ func StreamHandler(wr io.Writer, fmtr Format) Handler { func SyncHandler(h Handler) Handler { var mu sync.Mutex return FuncHandler(func(r *Record) error { - defer mu.Unlock() mu.Lock() + defer mu.Unlock() + return h.Log(r) }) } @@ -75,111 +71,6 @@ func FileHandler(path string, fmtr Format) (Handler, error) { return closingHandler{f, StreamHandler(f, fmtr)}, nil } -// countingWriter wraps a WriteCloser object in order to count the written bytes. -type countingWriter struct { - w io.WriteCloser // the wrapped object - count uint // number of bytes written -} - -// Write increments the byte counter by the number of bytes written. -// Implements the WriteCloser interface. -func (w *countingWriter) Write(p []byte) (n int, err error) { - n, err = w.w.Write(p) - w.count += uint(n) - return n, err -} - -// Close implements the WriteCloser interface. -func (w *countingWriter) Close() error { - return w.w.Close() -} - -// prepFile opens the log file at the given path, and cuts off the invalid part -// from the end, because the previous execution could have been finished by interruption. -// Assumes that every line ended by '\n' contains a valid log record. -func prepFile(path string) (*countingWriter, error) { - f, err := os.OpenFile(path, os.O_RDWR|os.O_APPEND, 0600) - if err != nil { - return nil, err - } - _, err = f.Seek(-1, io.SeekEnd) - if err != nil { - return nil, err - } - buf := make([]byte, 1) - var cut int64 - for { - if _, err := f.Read(buf); err != nil { - return nil, err - } - if buf[0] == '\n' { - break - } - if _, err = f.Seek(-2, io.SeekCurrent); err != nil { - return nil, err - } - cut++ - } - fi, err := f.Stat() - if err != nil { - return nil, err - } - ns := fi.Size() - cut - if err = f.Truncate(ns); err != nil { - return nil, err - } - return &countingWriter{w: f, count: uint(ns)}, nil -} - -// RotatingFileHandler returns a handler which writes log records to file chunks -// at the given path. When a file's size reaches the limit, the handler creates -// a new file named after the timestamp of the first log record it will contain. -func RotatingFileHandler(path string, limit uint, formatter Format) (Handler, error) { - if err := os.MkdirAll(path, 0700); err != nil { - return nil, err - } - files, err := ioutil.ReadDir(path) - if err != nil { - return nil, err - } - re := regexp.MustCompile(`\.log$`) - last := len(files) - 1 - for last >= 0 && (!files[last].Mode().IsRegular() || !re.MatchString(files[last].Name())) { - last-- - } - var counter *countingWriter - if last >= 0 && files[last].Size() < int64(limit) { - // Open the last file, and continue to write into it until it's size reaches the limit. - if counter, err = prepFile(filepath.Join(path, files[last].Name())); err != nil { - return nil, err - } - } - if counter == nil { - counter = new(countingWriter) - } - h := StreamHandler(counter, formatter) - - return FuncHandler(func(r *Record) error { - if counter.count > limit { - counter.Close() - counter.w = nil - } - if counter.w == nil { - f, err := os.OpenFile( - filepath.Join(path, fmt.Sprintf("%s.log", strings.Replace(r.Time.Format("060102150405.00"), ".", "", 1))), - os.O_CREATE|os.O_APPEND|os.O_WRONLY, - 0600, - ) - if err != nil { - return err - } - counter.w = f - counter.count = 0 - } - return h.Log(r) - }), nil -} - // NetHandler opens a socket to the given address and writes records // over the connection. func NetHandler(network, addr string, fmtr Format) (Handler, error) { @@ -227,7 +118,7 @@ func formatCall(format string, c stack.Call) string { } // CallerStackHandler returns a Handler that adds a stack trace to the context -// with key "stack". The stack trace is formated as a space separated list of +// with key "stack". The stack trace is formatted as a space separated list of // call sites inside matching []'s. The most recent call site is listed first. // Each call site is formatted according to format. See the documentation of // package github.com/go-stack/stack for the list of supported formats. diff --git a/log/handler_glog.go b/log/handler_glog.go index 83dae44b..9b1d4efa 100644 --- a/log/handler_glog.go +++ b/log/handler_glog.go @@ -207,7 +207,7 @@ func (h *GlogHandler) Log(r *Record) error { } // Check callsite cache for previously calculated log levels h.lock.RLock() - lvl, ok := h.siteCache[r.Call.PC()] + lvl, ok := h.siteCache[r.Call.Frame().PC] h.lock.RUnlock() // If we didn't cache the callsite yet, calculate it @@ -215,13 +215,13 @@ func (h *GlogHandler) Log(r *Record) error { h.lock.Lock() for _, rule := range h.patterns { if rule.pattern.MatchString(fmt.Sprintf("%+s", r.Call)) { - h.siteCache[r.Call.PC()], lvl, ok = rule.level, rule.level, true + h.siteCache[r.Call.Frame().PC], lvl, ok = rule.level, rule.level, true break } } // If no rule matched, remember to drop log the next time if !ok { - h.siteCache[r.Call.PC()] = 0 + h.siteCache[r.Call.Frame().PC] = 0 } h.lock.Unlock() } diff --git a/log/handler_go13.go b/log/handler_go13.go index 0843ed0e..4df694de 100644 --- a/log/handler_go13.go +++ b/log/handler_go13.go @@ -1,3 +1,4 @@ +//go:build !go1.4 // +build !go1.4 package log diff --git a/log/handler_go14.go b/log/handler_go14.go index 05dedbf2..d0cb14aa 100644 --- a/log/handler_go14.go +++ b/log/handler_go14.go @@ -1,3 +1,4 @@ +//go:build go1.4 // +build go1.4 package log diff --git a/log/logger.go b/log/logger.go index ca3e0b05..276d6969 100644 --- a/log/logger.go +++ b/log/logger.go @@ -83,7 +83,7 @@ func LvlFromString(lvlString string) (Lvl, error) { case "crit": return LvlCrit, nil default: - return LvlDebug, fmt.Errorf("Unknown level: %v", lvlString) + return LvlDebug, fmt.Errorf("unknown level: %v", lvlString) } } diff --git a/log/syslog.go b/log/syslog.go index 71a17b30..451d831b 100644 --- a/log/syslog.go +++ b/log/syslog.go @@ -1,3 +1,4 @@ +//go:build !windows && !plan9 // +build !windows,!plan9 package log diff --git a/metrics/README.md b/metrics/README.md index bc2a45a8..e2d79450 100644 --- a/metrics/README.md +++ b/metrics/README.md @@ -5,7 +5,7 @@ go-metrics Go port of Coda Hale's Metrics library: . -Documentation: . +Documentation: . Usage ----- @@ -128,7 +128,7 @@ go stathat.Stathat(metrics.DefaultRegistry, 10e9, "example@example.com") Maintain all metrics along with expvars at `/debug/metrics`: -This uses the same mechanism as [the official expvar](http://golang.org/pkg/expvar/) +This uses the same mechanism as [the official expvar](https://golang.org/pkg/expvar/) but exposed under `/debug/metrics`, which shows a json representation of all your usual expvars as well as all your go-metrics. diff --git a/metrics/config.go b/metrics/config.go new file mode 100644 index 00000000..2eb09fb4 --- /dev/null +++ b/metrics/config.go @@ -0,0 +1,56 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of go-ethereum. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 + +// Config contains the configuration for the metric collection. +type Config struct { + Enabled bool `toml:",omitempty"` + EnabledExpensive bool `toml:",omitempty"` + HTTP string `toml:",omitempty"` + Port int `toml:",omitempty"` + EnableInfluxDB bool `toml:",omitempty"` + InfluxDBEndpoint string `toml:",omitempty"` + InfluxDBDatabase string `toml:",omitempty"` + InfluxDBUsername string `toml:",omitempty"` + InfluxDBPassword string `toml:",omitempty"` + InfluxDBTags string `toml:",omitempty"` + + EnableInfluxDBV2 bool `toml:",omitempty"` + InfluxDBToken string `toml:",omitempty"` + InfluxDBBucket string `toml:",omitempty"` + InfluxDBOrganization string `toml:",omitempty"` +} + +// DefaultConfig is the default config for metrics used in go-ethereum. +var DefaultConfig = Config{ + Enabled: false, + EnabledExpensive: false, + HTTP: "127.0.0.1", + Port: 6060, + EnableInfluxDB: false, + InfluxDBEndpoint: "http://localhost:8086", + InfluxDBDatabase: "geth", + InfluxDBUsername: "test", + InfluxDBPassword: "test", + InfluxDBTags: "host=localhost", + + // influxdbv2-specific flags + EnableInfluxDBV2: false, + InfluxDBToken: "test", + InfluxDBBucket: "geth", + InfluxDBOrganization: "geth", +} diff --git a/metrics/counter_test.go b/metrics/counter_test.go index dfb03b4e..af26ef15 100644 --- a/metrics/counter_test.go +++ b/metrics/counter_test.go @@ -14,7 +14,7 @@ func TestCounterClear(t *testing.T) { c := NewCounter() c.Inc(1) c.Clear() - if count := c.Count(); 0 != count { + if count := c.Count(); count != 0 { t.Errorf("c.Count(): 0 != %v\n", count) } } @@ -22,7 +22,7 @@ func TestCounterClear(t *testing.T) { func TestCounterDec1(t *testing.T) { c := NewCounter() c.Dec(1) - if count := c.Count(); -1 != count { + if count := c.Count(); count != -1 { t.Errorf("c.Count(): -1 != %v\n", count) } } @@ -30,7 +30,7 @@ func TestCounterDec1(t *testing.T) { func TestCounterDec2(t *testing.T) { c := NewCounter() c.Dec(2) - if count := c.Count(); -2 != count { + if count := c.Count(); count != -2 { t.Errorf("c.Count(): -2 != %v\n", count) } } @@ -38,7 +38,7 @@ func TestCounterDec2(t *testing.T) { func TestCounterInc1(t *testing.T) { c := NewCounter() c.Inc(1) - if count := c.Count(); 1 != count { + if count := c.Count(); count != 1 { t.Errorf("c.Count(): 1 != %v\n", count) } } @@ -46,7 +46,7 @@ func TestCounterInc1(t *testing.T) { func TestCounterInc2(t *testing.T) { c := NewCounter() c.Inc(2) - if count := c.Count(); 2 != count { + if count := c.Count(); count != 2 { t.Errorf("c.Count(): 2 != %v\n", count) } } @@ -56,14 +56,14 @@ func TestCounterSnapshot(t *testing.T) { c.Inc(1) snapshot := c.Snapshot() c.Inc(1) - if count := snapshot.Count(); 1 != count { + if count := snapshot.Count(); count != 1 { t.Errorf("c.Count(): 1 != %v\n", count) } } func TestCounterZero(t *testing.T) { c := NewCounter() - if count := c.Count(); 0 != count { + if count := c.Count(); count != 0 { t.Errorf("c.Count(): 0 != %v\n", count) } } @@ -71,7 +71,7 @@ func TestCounterZero(t *testing.T) { func TestGetOrRegisterCounter(t *testing.T) { r := NewRegistry() NewRegisteredCounter("foo", r).Inc(47) - if c := GetOrRegisterCounter("foo", r); 47 != c.Count() { + if c := GetOrRegisterCounter("foo", r); c.Count() != 47 { t.Fatal(c) } } diff --git a/metrics/cpu.go b/metrics/cpu.go index 3278d816..72ece16e 100644 --- a/metrics/cpu.go +++ b/metrics/cpu.go @@ -16,21 +16,9 @@ package metrics -import "github.com/elastic/gosigar" - // 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 } - -// 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/eth/tracers/internal/tracers/tracers.go b/metrics/cpu_disabled.go similarity index 73% rename from eth/tracers/internal/tracers/tracers.go rename to metrics/cpu_disabled.go index 2e40975b..025d97ae 100644 --- a/eth/tracers/internal/tracers/tracers.go +++ b/metrics/cpu_disabled.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,8 +14,11 @@ // 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 -o assets.go -pkg tracers -ignore tracers.go -ignore assets.go ./... -//go:generate gofmt -s -w assets.go +//go:build ios || js +// +build ios js -// Package tracers contains the actual JavaScript tracer assets. -package tracers +package metrics + +// ReadCPUStats retrieves the current CPU stats. Internally this uses `gosigar`, +// which is not supported on the platforms in this file. +func ReadCPUStats(stats *CPUStats) {} diff --git a/metrics/cpu_enabled.go b/metrics/cpu_enabled.go new file mode 100644 index 00000000..533d40b8 --- /dev/null +++ b/metrics/cpu_enabled.go @@ -0,0 +1,44 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build !ios && !js +// +build !ios,!js + +package metrics + +import ( + "github.com/ethereum/go-ethereum/log" + "github.com/shirou/gopsutil/cpu" +) + +// ReadCPUStats retrieves the current CPU stats. +func ReadCPUStats(stats *CPUStats) { + // passing false to request all cpu times + timeStats, err := cpu.Times(false) + if err != nil { + log.Error("Could not read cpu stats", "err", err) + return + } + if len(timeStats) == 0 { + log.Error("Empty cpu stats") + return + } + // requesting all cpu times will always return an array with only one time stats entry + timeStat := timeStats[0] + stats.GlobalTime = int64((timeStat.User + timeStat.Nice + timeStat.System) * cpu.ClocksPerSec) + stats.GlobalWait = int64((timeStat.Iowait) * cpu.ClocksPerSec) + stats.LocalTime = getProcessCPUTime() +} diff --git a/metrics/cpu_windows.go b/metrics/cputime_nop.go similarity index 95% rename from metrics/cpu_windows.go rename to metrics/cputime_nop.go index fb29a52a..0188735a 100644 --- a/metrics/cpu_windows.go +++ b/metrics/cputime_nop.go @@ -14,6 +14,9 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build windows || js +// +build windows js + package metrics // getProcessCPUTime returns 0 on Windows as there is no system call to resolve diff --git a/metrics/cpu_syscall.go b/metrics/cputime_unix.go similarity index 90% rename from metrics/cpu_syscall.go rename to metrics/cputime_unix.go index 47b1823e..3c56a75d 100644 --- a/metrics/cpu_syscall.go +++ b/metrics/cputime_unix.go @@ -14,14 +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 !windows +//go:build !windows && !js +// +build !windows,!js package metrics import ( - "syscall" + syscall "golang.org/x/sys/unix" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // getProcessCPUTime retrieves the process' CPU time since program startup. diff --git a/metrics/disk_nop.go b/metrics/disk_nop.go index 4319f8b2..58fa4e02 100644 --- a/metrics/disk_nop.go +++ b/metrics/disk_nop.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build !linux // +build !linux package metrics diff --git a/metrics/doc.go b/metrics/doc.go new file mode 100644 index 00000000..13f429c1 --- /dev/null +++ b/metrics/doc.go @@ -0,0 +1,4 @@ +package metrics + +const epsilon = 0.0000000000000001 +const epsilonPercentile = .00000000001 diff --git a/metrics/ewma.go b/metrics/ewma.go index 57c949e7..03928649 100644 --- a/metrics/ewma.go +++ b/metrics/ewma.go @@ -4,6 +4,7 @@ import ( "math" "sync" "sync/atomic" + "time" ) // EWMAs continuously calculate an exponentially-weighted moving average @@ -85,7 +86,7 @@ type StandardEWMA struct { func (a *StandardEWMA) Rate() float64 { a.mutex.Lock() defer a.mutex.Unlock() - return a.rate * float64(1e9) + return a.rate * float64(time.Second) } // Snapshot returns a read-only copy of the EWMA. @@ -98,7 +99,7 @@ func (a *StandardEWMA) Snapshot() EWMA { func (a *StandardEWMA) Tick() { count := atomic.LoadInt64(&a.uncounted) atomic.AddInt64(&a.uncounted, -count) - instantRate := float64(count) / float64(5e9) + instantRate := float64(count) / float64(5*time.Second) a.mutex.Lock() defer a.mutex.Unlock() if a.init { diff --git a/metrics/ewma_test.go b/metrics/ewma_test.go index 0430fbd2..5b244191 100644 --- a/metrics/ewma_test.go +++ b/metrics/ewma_test.go @@ -1,6 +1,9 @@ package metrics -import "testing" +import ( + "math" + "testing" +) func BenchmarkEWMA(b *testing.B) { a := NewEWMA1() @@ -15,67 +18,67 @@ func TestEWMA1(t *testing.T) { a := NewEWMA1() a.Update(3) a.Tick() - if rate := a.Rate(); 0.6 != rate { + if rate := a.Rate(); math.Abs(0.6-rate) > epsilon { t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.22072766470286553 != rate { + if rate := a.Rate(); math.Abs(0.22072766470286553-rate) > epsilon { t.Errorf("1 minute a.Rate(): 0.22072766470286553 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.08120116994196772 != rate { + if rate := a.Rate(); math.Abs(0.08120116994196772-rate) > epsilon { t.Errorf("2 minute a.Rate(): 0.08120116994196772 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.029872241020718428 != rate { + if rate := a.Rate(); math.Abs(0.029872241020718428-rate) > epsilon { t.Errorf("3 minute a.Rate(): 0.029872241020718428 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.01098938333324054 != rate { + if rate := a.Rate(); math.Abs(0.01098938333324054-rate) > epsilon { t.Errorf("4 minute a.Rate(): 0.01098938333324054 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.004042768199451294 != rate { + if rate := a.Rate(); math.Abs(0.004042768199451294-rate) > epsilon { t.Errorf("5 minute a.Rate(): 0.004042768199451294 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.0014872513059998212 != rate { + if rate := a.Rate(); math.Abs(0.0014872513059998212-rate) > epsilon { t.Errorf("6 minute a.Rate(): 0.0014872513059998212 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.0005471291793327122 != rate { + if rate := a.Rate(); math.Abs(0.0005471291793327122-rate) > epsilon { t.Errorf("7 minute a.Rate(): 0.0005471291793327122 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.00020127757674150815 != rate { + if rate := a.Rate(); math.Abs(0.00020127757674150815-rate) > epsilon { t.Errorf("8 minute a.Rate(): 0.00020127757674150815 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 7.404588245200814e-05 != rate { + if rate := a.Rate(); math.Abs(7.404588245200814e-05-rate) > epsilon { t.Errorf("9 minute a.Rate(): 7.404588245200814e-05 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 2.7239957857491083e-05 != rate { + if rate := a.Rate(); math.Abs(2.7239957857491083e-05-rate) > epsilon { t.Errorf("10 minute a.Rate(): 2.7239957857491083e-05 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 1.0021020474147462e-05 != rate { + if rate := a.Rate(); math.Abs(1.0021020474147462e-05-rate) > epsilon { t.Errorf("11 minute a.Rate(): 1.0021020474147462e-05 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 3.6865274119969525e-06 != rate { + if rate := a.Rate(); math.Abs(3.6865274119969525e-06-rate) > epsilon { t.Errorf("12 minute a.Rate(): 3.6865274119969525e-06 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 1.3561976441886433e-06 != rate { + if rate := a.Rate(); math.Abs(1.3561976441886433e-06-rate) > epsilon { t.Errorf("13 minute a.Rate(): 1.3561976441886433e-06 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 4.989172314621449e-07 != rate { + if rate := a.Rate(); math.Abs(4.989172314621449e-07-rate) > epsilon { t.Errorf("14 minute a.Rate(): 4.989172314621449e-07 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 1.8354139230109722e-07 != rate { + if rate := a.Rate(); math.Abs(1.8354139230109722e-07-rate) > epsilon { t.Errorf("15 minute a.Rate(): 1.8354139230109722e-07 != %v\n", rate) } } @@ -84,67 +87,67 @@ func TestEWMA5(t *testing.T) { a := NewEWMA5() a.Update(3) a.Tick() - if rate := a.Rate(); 0.6 != rate { + if rate := a.Rate(); math.Abs(0.6-rate) > epsilon { t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.49123845184678905 != rate { + if rate := a.Rate(); math.Abs(0.49123845184678905-rate) > epsilon { t.Errorf("1 minute a.Rate(): 0.49123845184678905 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.4021920276213837 != rate { + if rate := a.Rate(); math.Abs(0.4021920276213837-rate) > epsilon { t.Errorf("2 minute a.Rate(): 0.4021920276213837 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.32928698165641596 != rate { + if rate := a.Rate(); math.Abs(0.32928698165641596-rate) > epsilon { t.Errorf("3 minute a.Rate(): 0.32928698165641596 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.269597378470333 != rate { + if rate := a.Rate(); math.Abs(0.269597378470333-rate) > epsilon { t.Errorf("4 minute a.Rate(): 0.269597378470333 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.2207276647028654 != rate { + if rate := a.Rate(); math.Abs(0.2207276647028654-rate) > epsilon { t.Errorf("5 minute a.Rate(): 0.2207276647028654 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.18071652714732128 != rate { + if rate := a.Rate(); math.Abs(0.18071652714732128-rate) > epsilon { t.Errorf("6 minute a.Rate(): 0.18071652714732128 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.14795817836496392 != rate { + if rate := a.Rate(); math.Abs(0.14795817836496392-rate) > epsilon { t.Errorf("7 minute a.Rate(): 0.14795817836496392 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.12113791079679326 != rate { + if rate := a.Rate(); math.Abs(0.12113791079679326-rate) > epsilon { t.Errorf("8 minute a.Rate(): 0.12113791079679326 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.09917933293295193 != rate { + if rate := a.Rate(); math.Abs(0.09917933293295193-rate) > epsilon { t.Errorf("9 minute a.Rate(): 0.09917933293295193 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.08120116994196763 != rate { + if rate := a.Rate(); math.Abs(0.08120116994196763-rate) > epsilon { t.Errorf("10 minute a.Rate(): 0.08120116994196763 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.06648189501740036 != rate { + if rate := a.Rate(); math.Abs(0.06648189501740036-rate) > epsilon { t.Errorf("11 minute a.Rate(): 0.06648189501740036 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.05443077197364752 != rate { + if rate := a.Rate(); math.Abs(0.05443077197364752-rate) > epsilon { t.Errorf("12 minute a.Rate(): 0.05443077197364752 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.04456414692860035 != rate { + if rate := a.Rate(); math.Abs(0.04456414692860035-rate) > epsilon { t.Errorf("13 minute a.Rate(): 0.04456414692860035 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.03648603757513079 != rate { + if rate := a.Rate(); math.Abs(0.03648603757513079-rate) > epsilon { t.Errorf("14 minute a.Rate(): 0.03648603757513079 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.0298722410207183831020718428 != rate { + if rate := a.Rate(); math.Abs(0.0298722410207183831020718428-rate) > epsilon { t.Errorf("15 minute a.Rate(): 0.0298722410207183831020718428 != %v\n", rate) } } @@ -153,67 +156,67 @@ func TestEWMA15(t *testing.T) { a := NewEWMA15() a.Update(3) a.Tick() - if rate := a.Rate(); 0.6 != rate { + if rate := a.Rate(); math.Abs(0.6-rate) > epsilon { t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.5613041910189706 != rate { + if rate := a.Rate(); math.Abs(0.5613041910189706-rate) > epsilon { t.Errorf("1 minute a.Rate(): 0.5613041910189706 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.5251039914257684 != rate { + if rate := a.Rate(); math.Abs(0.5251039914257684-rate) > epsilon { t.Errorf("2 minute a.Rate(): 0.5251039914257684 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.4912384518467888184678905 != rate { + if rate := a.Rate(); math.Abs(0.4912384518467888184678905-rate) > epsilon { t.Errorf("3 minute a.Rate(): 0.4912384518467888184678905 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.459557003018789 != rate { + if rate := a.Rate(); math.Abs(0.459557003018789-rate) > epsilon { t.Errorf("4 minute a.Rate(): 0.459557003018789 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.4299187863442732 != rate { + if rate := a.Rate(); math.Abs(0.4299187863442732-rate) > epsilon { t.Errorf("5 minute a.Rate(): 0.4299187863442732 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.4021920276213831 != rate { + if rate := a.Rate(); math.Abs(0.4021920276213831-rate) > epsilon { t.Errorf("6 minute a.Rate(): 0.4021920276213831 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.37625345116383313 != rate { + if rate := a.Rate(); math.Abs(0.37625345116383313-rate) > epsilon { t.Errorf("7 minute a.Rate(): 0.37625345116383313 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.3519877317060185 != rate { + if rate := a.Rate(); math.Abs(0.3519877317060185-rate) > epsilon { t.Errorf("8 minute a.Rate(): 0.3519877317060185 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.3292869816564153165641596 != rate { + if rate := a.Rate(); math.Abs(0.3292869816564153165641596-rate) > epsilon { t.Errorf("9 minute a.Rate(): 0.3292869816564153165641596 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.3080502714195546 != rate { + if rate := a.Rate(); math.Abs(0.3080502714195546-rate) > epsilon { t.Errorf("10 minute a.Rate(): 0.3080502714195546 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.2881831806538789 != rate { + if rate := a.Rate(); math.Abs(0.2881831806538789-rate) > epsilon { t.Errorf("11 minute a.Rate(): 0.2881831806538789 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.26959737847033216 != rate { + if rate := a.Rate(); math.Abs(0.26959737847033216-rate) > epsilon { t.Errorf("12 minute a.Rate(): 0.26959737847033216 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.2522102307052083 != rate { + if rate := a.Rate(); math.Abs(0.2522102307052083-rate) > epsilon { t.Errorf("13 minute a.Rate(): 0.2522102307052083 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.23594443252115815 != rate { + if rate := a.Rate(); math.Abs(0.23594443252115815-rate) > epsilon { t.Errorf("14 minute a.Rate(): 0.23594443252115815 != %v\n", rate) } elapseMinute(a) - if rate := a.Rate(); 0.2207276647028646247028654470286553 != rate { + if rate := a.Rate(); math.Abs(0.2207276647028646247028654470286553-rate) > epsilon { t.Errorf("15 minute a.Rate(): 0.2207276647028646247028654470286553 != %v\n", rate) } } diff --git a/metrics/exp/exp.go b/metrics/exp/exp.go index 12ad2e79..3ebe8cc6 100644 --- a/metrics/exp/exp.go +++ b/metrics/exp/exp.go @@ -8,8 +8,9 @@ import ( "net/http" "sync" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/metrics/prometheus" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/metrics/prometheus" ) type exp struct { @@ -52,6 +53,20 @@ func ExpHandler(r metrics.Registry) http.Handler { return http.HandlerFunc(e.expHandler) } +// Setup starts a dedicated metrics server at the given address. +// This function enables metrics reporting separate from pprof. +func Setup(address string) { + m := http.NewServeMux() + m.Handle("/debug/metrics", ExpHandler(metrics.DefaultRegistry)) + m.Handle("/debug/metrics/prometheus", prometheus.Handler(metrics.DefaultRegistry)) + log.Info("Starting metrics server", "addr", fmt.Sprintf("http://%s/debug/metrics", address)) + go func() { + if err := http.ListenAndServe(address, m); err != nil { + log.Error("Failure in running metrics server", "err", err) + } + }() +} + func (exp *exp) getInt(name string) *expvar.Int { var v *expvar.Int exp.expvarLock.Lock() @@ -113,7 +128,7 @@ func (exp *exp) publishMeter(name string, metric metrics.Meter) { exp.getInt(name + ".count").Set(m.Count()) exp.getFloat(name + ".one-minute").Set(m.Rate1()) exp.getFloat(name + ".five-minute").Set(m.Rate5()) - exp.getFloat(name + ".fifteen-minute").Set((m.Rate15())) + exp.getFloat(name + ".fifteen-minute").Set(m.Rate15()) exp.getFloat(name + ".mean").Set(m.RateMean()) } diff --git a/metrics/gauge.go b/metrics/gauge.go index 0fbfdb86..b6b2758b 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/gauge_float64_test.go b/metrics/gauge_float64_test.go index 99e62a40..7b854d23 100644 --- a/metrics/gauge_float64_test.go +++ b/metrics/gauge_float64_test.go @@ -2,7 +2,7 @@ package metrics import "testing" -func BenchmarkGuageFloat64(b *testing.B) { +func BenchmarkGaugeFloat64(b *testing.B) { g := NewGaugeFloat64() b.ResetTimer() for i := 0; i < b.N; i++ { @@ -12,27 +12,27 @@ func BenchmarkGuageFloat64(b *testing.B) { func TestGaugeFloat64(t *testing.T) { g := NewGaugeFloat64() - g.Update(float64(47.0)) - if v := g.Value(); float64(47.0) != v { + g.Update(47.0) + if v := g.Value(); 47.0 != v { t.Errorf("g.Value(): 47.0 != %v\n", v) } } func TestGaugeFloat64Snapshot(t *testing.T) { g := NewGaugeFloat64() - g.Update(float64(47.0)) + g.Update(47.0) snapshot := g.Snapshot() g.Update(float64(0)) - if v := snapshot.Value(); float64(47.0) != v { + if v := snapshot.Value(); 47.0 != v { t.Errorf("g.Value(): 47.0 != %v\n", v) } } func TestGetOrRegisterGaugeFloat64(t *testing.T) { r := NewRegistry() - NewRegisteredGaugeFloat64("foo", r).Update(float64(47.0)) + NewRegisteredGaugeFloat64("foo", r).Update(47.0) t.Logf("registry: %v", r) - if g := GetOrRegisterGaugeFloat64("foo", r); float64(47.0) != g.Value() { + if g := GetOrRegisterGaugeFloat64("foo", r); 47.0 != g.Value() { t.Fatal(g) } } @@ -53,7 +53,7 @@ func TestFunctionalGaugeFloat64(t *testing.T) { func TestGetOrRegisterFunctionalGaugeFloat64(t *testing.T) { r := NewRegistry() NewRegisteredFunctionalGaugeFloat64("foo", r, func() float64 { return 47 }) - if g := GetOrRegisterGaugeFloat64("foo", r); 47 != g.Value() { + if g := GetOrRegisterGaugeFloat64("foo", r); g.Value() != 47 { t.Fatal(g) } } diff --git a/metrics/gauge_test.go b/metrics/gauge_test.go index 1f2603d3..a98fe985 100644 --- a/metrics/gauge_test.go +++ b/metrics/gauge_test.go @@ -5,7 +5,7 @@ import ( "testing" ) -func BenchmarkGuage(b *testing.B) { +func BenchmarkGauge(b *testing.B) { g := NewGauge() b.ResetTimer() for i := 0; i < b.N; i++ { @@ -16,7 +16,7 @@ func BenchmarkGuage(b *testing.B) { func TestGauge(t *testing.T) { g := NewGauge() g.Update(int64(47)) - if v := g.Value(); 47 != v { + if v := g.Value(); v != 47 { t.Errorf("g.Value(): 47 != %v\n", v) } } @@ -26,7 +26,7 @@ func TestGaugeSnapshot(t *testing.T) { g.Update(int64(47)) snapshot := g.Snapshot() g.Update(int64(0)) - if v := snapshot.Value(); 47 != v { + if v := snapshot.Value(); v != 47 { t.Errorf("g.Value(): 47 != %v\n", v) } } @@ -34,7 +34,7 @@ func TestGaugeSnapshot(t *testing.T) { func TestGetOrRegisterGauge(t *testing.T) { r := NewRegistry() NewRegisteredGauge("foo", r).Update(47) - if g := GetOrRegisterGauge("foo", r); 47 != g.Value() { + if g := GetOrRegisterGauge("foo", r); g.Value() != 47 { t.Fatal(g) } } @@ -55,7 +55,7 @@ func TestFunctionalGauge(t *testing.T) { func TestGetOrRegisterFunctionalGauge(t *testing.T) { r := NewRegistry() NewRegisteredFunctionalGauge("foo", r, func() int64 { return 47 }) - if g := GetOrRegisterGauge("foo", r); 47 != g.Value() { + if g := GetOrRegisterGauge("foo", r); g.Value() != 47 { t.Fatal(g) } } diff --git a/metrics/histogram.go b/metrics/histogram.go index 46f3bbd2..2c54ce8b 100644 --- a/metrics/histogram.go +++ b/metrics/histogram.go @@ -26,6 +26,15 @@ func GetOrRegisterHistogram(name string, r Registry, s Sample) Histogram { return r.GetOrRegister(name, func() Histogram { return NewHistogram(s) }).(Histogram) } +// GetOrRegisterHistogramLazy returns an existing Histogram or constructs and +// registers a new StandardHistogram. +func GetOrRegisterHistogramLazy(name string, r Registry, s func() Sample) Histogram { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() Histogram { return NewHistogram(s()) }).(Histogram) +} + // NewHistogram constructs a new StandardHistogram from a Sample. func NewHistogram(s Sample) Histogram { if !Enabled { diff --git a/metrics/histogram_test.go b/metrics/histogram_test.go index d7f4f017..7c9f42fc 100644 --- a/metrics/histogram_test.go +++ b/metrics/histogram_test.go @@ -14,7 +14,7 @@ func TestGetOrRegisterHistogram(t *testing.T) { r := NewRegistry() s := NewUniformSample(100) NewRegisteredHistogram("foo", r, s).Update(47) - if h := GetOrRegisterHistogram("foo", r, s); 1 != h.Count() { + if h := GetOrRegisterHistogram("foo", r, s); h.Count() != 1 { t.Fatal(h) } } @@ -29,29 +29,29 @@ func TestHistogram10000(t *testing.T) { func TestHistogramEmpty(t *testing.T) { h := NewHistogram(NewUniformSample(100)) - if count := h.Count(); 0 != count { + if count := h.Count(); count != 0 { t.Errorf("h.Count(): 0 != %v\n", count) } - if min := h.Min(); 0 != min { + if min := h.Min(); min != 0 { t.Errorf("h.Min(): 0 != %v\n", min) } - if max := h.Max(); 0 != max { + if max := h.Max(); max != 0 { t.Errorf("h.Max(): 0 != %v\n", max) } - if mean := h.Mean(); 0.0 != mean { + if mean := h.Mean(); mean != 0.0 { t.Errorf("h.Mean(): 0.0 != %v\n", mean) } - if stdDev := h.StdDev(); 0.0 != stdDev { + if stdDev := h.StdDev(); stdDev != 0.0 { t.Errorf("h.StdDev(): 0.0 != %v\n", stdDev) } ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) - if 0.0 != ps[0] { + if ps[0] != 0.0 { t.Errorf("median: 0.0 != %v\n", ps[0]) } - if 0.0 != ps[1] { + if ps[1] != 0.0 { t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) } - if 0.0 != ps[2] { + if ps[2] != 0.0 { t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) } } @@ -67,29 +67,29 @@ func TestHistogramSnapshot(t *testing.T) { } func testHistogram10000(t *testing.T, h Histogram) { - if count := h.Count(); 10000 != count { + if count := h.Count(); count != 10000 { t.Errorf("h.Count(): 10000 != %v\n", count) } - if min := h.Min(); 1 != min { + if min := h.Min(); min != 1 { t.Errorf("h.Min(): 1 != %v\n", min) } - if max := h.Max(); 10000 != max { + if max := h.Max(); max != 10000 { t.Errorf("h.Max(): 10000 != %v\n", max) } - if mean := h.Mean(); 5000.5 != mean { + if mean := h.Mean(); mean != 5000.5 { t.Errorf("h.Mean(): 5000.5 != %v\n", mean) } - if stdDev := h.StdDev(); 2886.751331514372 != stdDev { + if stdDev := h.StdDev(); stdDev != 2886.751331514372 { t.Errorf("h.StdDev(): 2886.751331514372 != %v\n", stdDev) } ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) - if 5000.5 != ps[0] { + if ps[0] != 5000.5 { t.Errorf("median: 5000.5 != %v\n", ps[0]) } - if 7500.75 != ps[1] { + if ps[1] != 7500.75 { t.Errorf("75th percentile: 7500.75 != %v\n", ps[1]) } - if 9900.99 != ps[2] { + if ps[2] != 9900.99 { t.Errorf("99th percentile: 9900.99 != %v\n", ps[2]) } } diff --git a/metrics/influxdb/influxdb.go b/metrics/influxdb/influxdb.go index 44836928..e99717ae 100644 --- a/metrics/influxdb/influxdb.go +++ b/metrics/influxdb/influxdb.go @@ -5,8 +5,8 @@ import ( uurl "net/url" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/influxdata/influxdb/client" ) @@ -62,7 +62,7 @@ func InfluxDBWithTags(r metrics.Registry, d time.Duration, url, database, userna func InfluxDBWithTagsOnce(r metrics.Registry, url, database, username, password, namespace string, tags map[string]string) error { u, err := uurl.Parse(url) if err != nil { - return fmt.Errorf("Unable to parse InfluxDB. url: %s, err: %v", url, err) + return fmt.Errorf("unable to parse InfluxDB. url: %s, err: %v", url, err) } rep := &reporter{ @@ -76,11 +76,11 @@ func InfluxDBWithTagsOnce(r metrics.Registry, url, database, username, password, cache: make(map[string]int64), } if err := rep.makeClient(); err != nil { - return fmt.Errorf("Unable to make InfluxDB client. err: %v", err) + return fmt.Errorf("unable to make InfluxDB client. err: %v", err) } if err := rep.send(); err != nil { - return fmt.Errorf("Unable to send to InfluxDB. err: %v", err) + return fmt.Errorf("unable to send to InfluxDB. err: %v", err) } return nil @@ -98,16 +98,16 @@ func (r *reporter) makeClient() (err error) { } func (r *reporter) run() { - intervalTicker := time.Tick(r.interval) - pingTicker := time.Tick(time.Second * 5) + intervalTicker := time.NewTicker(r.interval) + pingTicker := time.NewTicker(time.Second * 5) for { select { - case <-intervalTicker: + case <-intervalTicker.C: if err := r.send(); err != nil { log.Warn("Unable to send to InfluxDB", "err", err) } - case <-pingTicker: + case <-pingTicker.C: _, _, err := r.client.Ping() if err != nil { log.Warn("Got error while sending a ping to InfluxDB, trying to recreate client", "err", err) @@ -129,17 +129,15 @@ func (r *reporter) send() error { switch metric := i.(type) { case metrics.Counter: - v := metric.Count() - l := r.cache[name] + count := metric.Count() pts = append(pts, client.Point{ Measurement: fmt.Sprintf("%s%s.count", namespace, name), Tags: r.tags, Fields: map[string]interface{}{ - "value": v - l, + "value": count, }, Time: now, }) - r.cache[name] = v case metrics.Gauge: ms := metric.Snapshot() pts = append(pts, client.Point{ @@ -162,26 +160,29 @@ func (r *reporter) send() error { }) case metrics.Histogram: ms := metric.Snapshot() - ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999}) - pts = append(pts, client.Point{ - Measurement: fmt.Sprintf("%s%s.histogram", namespace, name), - Tags: r.tags, - Fields: map[string]interface{}{ - "count": ms.Count(), - "max": ms.Max(), - "mean": ms.Mean(), - "min": ms.Min(), - "stddev": ms.StdDev(), - "variance": ms.Variance(), - "p50": ps[0], - "p75": ps[1], - "p95": ps[2], - "p99": ps[3], - "p999": ps[4], - "p9999": ps[5], - }, - Time: now, - }) + + if ms.Count() > 0 { + ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999}) + pts = append(pts, client.Point{ + Measurement: fmt.Sprintf("%s%s.histogram", namespace, name), + Tags: r.tags, + Fields: map[string]interface{}{ + "count": ms.Count(), + "max": ms.Max(), + "mean": ms.Mean(), + "min": ms.Min(), + "stddev": ms.StdDev(), + "variance": ms.Variance(), + "p50": ps[0], + "p75": ps[1], + "p95": ps[2], + "p99": ps[3], + "p999": ps[4], + "p9999": ps[5], + }, + Time: now, + }) + } case metrics.Meter: ms := metric.Snapshot() pts = append(pts, client.Point{ diff --git a/metrics/influxdb/influxdbv2.go b/metrics/influxdb/influxdbv2.go new file mode 100644 index 00000000..c8eca416 --- /dev/null +++ b/metrics/influxdb/influxdbv2.go @@ -0,0 +1,221 @@ +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . +package influxdb + +import ( + "context" + "fmt" + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + influxdb2 "github.com/influxdata/influxdb-client-go/v2" + "github.com/influxdata/influxdb-client-go/v2/api" +) + +type v2Reporter struct { + reg metrics.Registry + interval time.Duration + + endpoint string + token string + bucket string + organization string + namespace string + tags map[string]string + + client influxdb2.Client + write api.WriteAPI + + cache map[string]int64 +} + +// InfluxDBWithTags starts a InfluxDB reporter which will post the from the given metrics.Registry at each d interval with the specified tags +func InfluxDBV2WithTags(r metrics.Registry, d time.Duration, endpoint string, token string, bucket string, organization string, namespace string, tags map[string]string) { + rep := &v2Reporter{ + reg: r, + interval: d, + endpoint: endpoint, + token: token, + bucket: bucket, + organization: organization, + namespace: namespace, + tags: tags, + cache: make(map[string]int64), + } + + rep.client = influxdb2.NewClient(rep.endpoint, rep.token) + defer rep.client.Close() + + // async write client + rep.write = rep.client.WriteAPI(rep.organization, rep.bucket) + errorsCh := rep.write.Errors() + + // have to handle write errors in a separate goroutine like this b/c the channel is unbuffered and will block writes if not read + go func() { + for err := range errorsCh { + log.Warn("write error", "err", err.Error()) + } + }() + rep.run() +} + +func (r *v2Reporter) run() { + intervalTicker := time.NewTicker(r.interval) + pingTicker := time.NewTicker(time.Second * 5) + + for { + select { + case <-intervalTicker.C: + r.send() + case <-pingTicker.C: + _, err := r.client.Health(context.Background()) + if err != nil { + log.Warn("Got error from influxdb client health check", "err", err.Error()) + } + } + } +} + +func (r *v2Reporter) send() { + r.reg.Each(func(name string, i interface{}) { + now := time.Now() + namespace := r.namespace + + switch metric := i.(type) { + case metrics.Counter: + v := metric.Count() + l := r.cache[name] + + measurement := fmt.Sprintf("%s%s.count", namespace, name) + fields := map[string]interface{}{ + "value": v - l, + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + + r.cache[name] = v + + case metrics.Gauge: + ms := metric.Snapshot() + + measurement := fmt.Sprintf("%s%s.gauge", namespace, name) + fields := map[string]interface{}{ + "value": ms.Value(), + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + + case metrics.GaugeFloat64: + ms := metric.Snapshot() + + measurement := fmt.Sprintf("%s%s.gauge", namespace, name) + fields := map[string]interface{}{ + "value": ms.Value(), + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + + case metrics.Histogram: + ms := metric.Snapshot() + + if ms.Count() > 0 { + ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999}) + measurement := fmt.Sprintf("%s%s.histogram", namespace, name) + fields := map[string]interface{}{ + "count": ms.Count(), + "max": ms.Max(), + "mean": ms.Mean(), + "min": ms.Min(), + "stddev": ms.StdDev(), + "variance": ms.Variance(), + "p50": ps[0], + "p75": ps[1], + "p95": ps[2], + "p99": ps[3], + "p999": ps[4], + "p9999": ps[5], + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + } + + case metrics.Meter: + ms := metric.Snapshot() + + measurement := fmt.Sprintf("%s%s.meter", namespace, name) + fields := map[string]interface{}{ + "count": ms.Count(), + "m1": ms.Rate1(), + "m5": ms.Rate5(), + "m15": ms.Rate15(), + "mean": ms.RateMean(), + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + + case metrics.Timer: + ms := metric.Snapshot() + ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999}) + + measurement := fmt.Sprintf("%s%s.timer", namespace, name) + fields := map[string]interface{}{ + "count": ms.Count(), + "max": ms.Max(), + "mean": ms.Mean(), + "min": ms.Min(), + "stddev": ms.StdDev(), + "variance": ms.Variance(), + "p50": ps[0], + "p75": ps[1], + "p95": ps[2], + "p99": ps[3], + "p999": ps[4], + "p9999": ps[5], + "m1": ms.Rate1(), + "m5": ms.Rate5(), + "m15": ms.Rate15(), + "meanrate": ms.RateMean(), + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + + case metrics.ResettingTimer: + t := metric.Snapshot() + + if len(t.Values()) > 0 { + ps := t.Percentiles([]float64{50, 95, 99}) + val := t.Values() + + measurement := fmt.Sprintf("%s%s.span", namespace, name) + fields := map[string]interface{}{ + "count": len(val), + "max": val[len(val)-1], + "mean": t.Mean(), + "min": val[0], + "p50": ps[0], + "p95": ps[1], + "p99": ps[2], + } + + pt := influxdb2.NewPoint(measurement, r.tags, fields, now) + r.write.WritePoint(pt) + } + } + }) + + // Force all unwritten data to be sent + r.write.Flush() +} diff --git a/metrics/json_test.go b/metrics/json_test.go index cf70051f..f91fe8cf 100644 --- a/metrics/json_test.go +++ b/metrics/json_test.go @@ -12,7 +12,7 @@ func TestRegistryMarshallJSON(t *testing.T) { r := NewRegistry() r.Register("counter", NewCounter()) enc.Encode(r) - if s := b.String(); "{\"counter\":{\"count\":0}}\n" != s { + if s := b.String(); s != "{\"counter\":{\"count\":0}}\n" { t.Fatalf(s) } } diff --git a/metrics/librato/client.go b/metrics/librato/client.go index 1f8920cb..eebe2052 100644 --- a/metrics/librato/client.go +++ b/metrics/librato/client.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" ) @@ -93,10 +93,10 @@ func (c *LibratoClient) PostMetrics(batch Batch) (err error) { if resp.StatusCode != http.StatusOK { var body []byte - if body, err = ioutil.ReadAll(resp.Body); err != nil { + if body, err = io.ReadAll(resp.Body); err != nil { body = []byte(fmt.Sprintf("(could not fetch response body for error: %s)", err)) } - err = fmt.Errorf("Unable to post to Librato: %d %s %s", resp.StatusCode, resp.Status, string(body)) + err = fmt.Errorf("unable to post to Librato: %d %s %s", resp.StatusCode, resp.Status, string(body)) } return } diff --git a/metrics/librato/librato.go b/metrics/librato/librato.go index 58a87f45..b1649341 100644 --- a/metrics/librato/librato.go +++ b/metrics/librato/librato.go @@ -7,7 +7,7 @@ import ( "regexp" "time" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/metrics" ) // a regexp for extracting the unit from time.Duration.String @@ -42,9 +42,10 @@ func Librato(r metrics.Registry, d time.Duration, e string, t string, s string, func (rep *Reporter) Run() { log.Printf("WARNING: This client has been DEPRECATED! It has been moved to https://github.com/mihasya/go-metrics-librato and will be removed from rcrowley/go-metrics on August 5th 2015") - ticker := time.Tick(rep.Interval) + ticker := time.NewTicker(rep.Interval) + defer ticker.Stop() metricsApi := &LibratoClient{rep.Email, rep.Token} - for now := range ticker { + for now := range ticker.C { var metrics Batch var err error if metrics, err = rep.BuildRequest(now, rep.Registry); err != nil { diff --git a/metrics/meter.go b/metrics/meter.go index 58d170fa..60ae919d 100644 --- a/metrics/meter.go +++ b/metrics/meter.go @@ -2,6 +2,7 @@ package metrics import ( "sync" + "sync/atomic" "time" ) @@ -100,6 +101,11 @@ func NewRegisteredMeterForced(name string, r Registry) Meter { // MeterSnapshot is a read-only copy of another Meter. type MeterSnapshot struct { + // WARNING: The `temp` 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. For more information, + // see https://golang.org/pkg/sync/atomic/#pkg-note-BUG. + temp int64 count int64 rate1, rate5, rate15, rateMean float64 } @@ -149,7 +155,7 @@ func (NilMeter) Rate1() float64 { return 0.0 } // Rate5 is a no-op. func (NilMeter) Rate5() float64 { return 0.0 } -// Rate15is a no-op. +// Rate15 is a no-op. func (NilMeter) Rate15() float64 { return 0.0 } // RateMean is a no-op. @@ -167,7 +173,7 @@ type StandardMeter struct { snapshot *MeterSnapshot a1, a5, a15 EWMA startTime time.Time - stopped bool + stopped uint32 } func newStandardMeter() *StandardMeter { @@ -182,11 +188,8 @@ func newStandardMeter() *StandardMeter { // Stop stops the meter, Mark() will be a no-op if you use it after being stopped. func (m *StandardMeter) Stop() { - m.lock.Lock() - stopped := m.stopped - m.stopped = true - m.lock.Unlock() - if !stopped { + stopped := atomic.SwapUint32(&m.stopped, 1) + if stopped != 1 { arbiter.Lock() delete(arbiter.meters, m) arbiter.Unlock() @@ -194,57 +197,45 @@ func (m *StandardMeter) Stop() { } // Count returns the number of events recorded. +// It updates the meter to be as accurate as possible func (m *StandardMeter) Count() int64 { - m.lock.RLock() - count := m.snapshot.count - m.lock.RUnlock() - return count + m.lock.Lock() + defer m.lock.Unlock() + m.updateMeter() + return m.snapshot.count } // Mark records the occurrence of n events. func (m *StandardMeter) Mark(n int64) { - m.lock.Lock() - defer m.lock.Unlock() - if m.stopped { - return - } - m.snapshot.count += n - m.a1.Update(n) - m.a5.Update(n) - m.a15.Update(n) - m.updateSnapshot() + atomic.AddInt64(&m.snapshot.temp, n) } // Rate1 returns the one-minute moving average rate of events per second. func (m *StandardMeter) Rate1() float64 { m.lock.RLock() - rate1 := m.snapshot.rate1 - m.lock.RUnlock() - return rate1 + defer m.lock.RUnlock() + return m.snapshot.rate1 } // Rate5 returns the five-minute moving average rate of events per second. func (m *StandardMeter) Rate5() float64 { m.lock.RLock() - rate5 := m.snapshot.rate5 - m.lock.RUnlock() - return rate5 + defer m.lock.RUnlock() + return m.snapshot.rate5 } // Rate15 returns the fifteen-minute moving average rate of events per second. func (m *StandardMeter) Rate15() float64 { m.lock.RLock() - rate15 := m.snapshot.rate15 - m.lock.RUnlock() - return rate15 + defer m.lock.RUnlock() + return m.snapshot.rate15 } // RateMean returns the meter's mean rate of events per second. func (m *StandardMeter) RateMean() float64 { m.lock.RLock() - rateMean := m.snapshot.rateMean - m.lock.RUnlock() - return rateMean + defer m.lock.RUnlock() + return m.snapshot.rateMean } // Snapshot returns a read-only copy of the meter. @@ -264,9 +255,19 @@ func (m *StandardMeter) updateSnapshot() { snapshot.rateMean = float64(snapshot.count) / time.Since(m.startTime).Seconds() } +func (m *StandardMeter) updateMeter() { + // should only run with write lock held on m.lock + n := atomic.SwapInt64(&m.snapshot.temp, 0) + m.snapshot.count += n + m.a1.Update(n) + m.a5.Update(n) + m.a15.Update(n) +} + func (m *StandardMeter) tick() { m.lock.Lock() defer m.lock.Unlock() + m.updateMeter() m.a1.Tick() m.a5.Tick() m.a15.Tick() @@ -282,7 +283,7 @@ type meterArbiter struct { ticker *time.Ticker } -var arbiter = meterArbiter{ticker: time.NewTicker(5e9), meters: make(map[*StandardMeter]struct{})} +var arbiter = meterArbiter{ticker: time.NewTicker(5 * time.Second), meters: make(map[*StandardMeter]struct{})} // Ticks meters on the scheduled interval func (ma *meterArbiter) tick() { diff --git a/metrics/meter_test.go b/metrics/meter_test.go index e8892226..b3f6cb8c 100644 --- a/metrics/meter_test.go +++ b/metrics/meter_test.go @@ -16,8 +16,8 @@ func BenchmarkMeter(b *testing.B) { func TestGetOrRegisterMeter(t *testing.T) { r := NewRegistry() NewRegisteredMeter("foo", r).Mark(47) - if m := GetOrRegisterMeter("foo", r); 47 != m.Count() { - t.Fatal(m) + if m := GetOrRegisterMeter("foo", r); m.Count() != 47 { + t.Fatal(m.Count()) } } @@ -26,12 +26,14 @@ func TestMeterDecay(t *testing.T) { ticker: time.NewTicker(time.Millisecond), meters: make(map[*StandardMeter]struct{}), } + defer ma.ticker.Stop() m := newStandardMeter() ma.meters[m] = struct{}{} - go ma.tick() m.Mark(1) + ma.tickMeters() rateMean := m.RateMean() time.Sleep(100 * time.Millisecond) + ma.tickMeters() if m.RateMean() >= rateMean { t.Error("m.RateMean() didn't decrease") } @@ -40,7 +42,7 @@ func TestMeterDecay(t *testing.T) { func TestMeterNonzero(t *testing.T) { m := NewMeter() m.Mark(3) - if count := m.Count(); 3 != count { + if count := m.Count(); count != 3 { t.Errorf("m.Count(): 3 != %v\n", count) } } @@ -48,11 +50,11 @@ func TestMeterNonzero(t *testing.T) { func TestMeterStop(t *testing.T) { l := len(arbiter.meters) m := NewMeter() - if len(arbiter.meters) != l+1 { + if l+1 != len(arbiter.meters) { t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters)) } m.Stop() - if len(arbiter.meters) != l { + if l != len(arbiter.meters) { t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters)) } } @@ -67,7 +69,23 @@ func TestMeterSnapshot(t *testing.T) { func TestMeterZero(t *testing.T) { m := NewMeter() - if count := m.Count(); 0 != count { + if count := m.Count(); count != 0 { t.Errorf("m.Count(): 0 != %v\n", count) } } + +func TestMeterRepeat(t *testing.T) { + m := NewMeter() + for i := 0; i < 101; i++ { + m.Mark(int64(i)) + } + if count := m.Count(); count != 5050 { + t.Errorf("m.Count(): 5050 != %v\n", count) + } + for i := 0; i < 101; i++ { + m.Mark(int64(i)) + } + if count := m.Count(); count != 10100 { + t.Errorf("m.Count(): 10100 != %v\n", count) + } +} diff --git a/metrics/metrics.go b/metrics/metrics.go index 30657a49..747d6471 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // Enabled is checked by the constructor functions for all of the @@ -27,7 +27,7 @@ var Enabled = false var EnabledExpensive = false // enablerFlags is the CLI flag names to use to enable metrics collections. -var enablerFlags = []string{"metrics", "dashboard"} +var enablerFlags = []string{"metrics"} // expensiveEnablerFlags is the CLI flag names to use to enable metrics collections. var expensiveEnablerFlags = []string{"metrics.expensive"} diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go index df36da0a..029c9987 100644 --- a/metrics/metrics_test.go +++ b/metrics/metrics_test.go @@ -2,7 +2,7 @@ package metrics import ( "fmt" - "io/ioutil" + "io" "log" "sync" "testing" @@ -13,7 +13,7 @@ const FANOUT = 128 // Stop the compiler from complaining during debugging. var ( - _ = ioutil.Discard + _ = io.Discard _ = log.LstdFlags ) @@ -78,7 +78,7 @@ func BenchmarkMetrics(b *testing.B) { //log.Println("done Write") return default: - WriteOnce(r, ioutil.Discard) + WriteOnce(r, io.Discard) } } }() diff --git a/metrics/prometheus/collector.go b/metrics/prometheus/collector.go index 0495f4c0..e8d5e4f5 100644 --- a/metrics/prometheus/collector.go +++ b/metrics/prometheus/collector.go @@ -22,7 +22,7 @@ import ( "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/metrics" ) var ( @@ -30,7 +30,7 @@ var ( typeCounterTpl = "# TYPE %s counter\n" typeSummaryTpl = "# TYPE %s summary\n" keyValueTpl = "%s %v\n\n" - keyQuantileTagValueTpl = "%s {quantile=\"%s\"} %v\n\n" + keyQuantileTagValueTpl = "%s {quantile=\"%s\"} %v\n" ) // collector is a collection of byte buffers that aggregate Prometheus reports @@ -39,7 +39,7 @@ type collector struct { buff *bytes.Buffer } -// newCollector createa a new Prometheus metric aggregator. +// newCollector creates a new Prometheus metric aggregator. func newCollector() *collector { return &collector{ buff: &bytes.Buffer{}, @@ -62,9 +62,11 @@ 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()) + c.buff.WriteString(fmt.Sprintf(typeSummaryTpl, mutateKey(name))) for i := range pv { c.writeSummaryPercentile(name, strconv.FormatFloat(pv[i], 'f', -1, 64), ps[i]) } + c.buff.WriteRune('\n') } func (c *collector) addMeter(name string, m metrics.Meter) { @@ -75,9 +77,11 @@ 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()) + c.buff.WriteString(fmt.Sprintf(typeSummaryTpl, mutateKey(name))) for i := range pv { c.writeSummaryPercentile(name, strconv.FormatFloat(pv[i], 'f', -1, 64), ps[i]) } + c.buff.WriteRune('\n') } func (c *collector) addResettingTimer(name string, m metrics.ResettingTimer) { @@ -87,9 +91,11 @@ func (c *collector) addResettingTimer(name string, m metrics.ResettingTimer) { ps := m.Percentiles([]float64{50, 95, 99}) val := m.Values() c.writeSummaryCounter(name, len(val)) + c.buff.WriteString(fmt.Sprintf(typeSummaryTpl, mutateKey(name))) c.writeSummaryPercentile(name, "0.50", ps[0]) c.writeSummaryPercentile(name, "0.95", ps[1]) c.writeSummaryPercentile(name, "0.99", ps[2]) + c.buff.WriteRune('\n') } func (c *collector) writeGaugeCounter(name string, value interface{}) { @@ -106,10 +112,9 @@ func (c *collector) writeSummaryCounter(name string, value interface{}) { 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) + return strings.ReplaceAll(key, "/", "_") } diff --git a/metrics/prometheus/collector_test.go b/metrics/prometheus/collector_test.go new file mode 100644 index 00000000..43f2f804 --- /dev/null +++ b/metrics/prometheus/collector_test.go @@ -0,0 +1,110 @@ +package prometheus + +import ( + "os" + "testing" + "time" + + "github.com/ethereum/go-ethereum/metrics" +) + +func TestMain(m *testing.M) { + metrics.Enabled = true + os.Exit(m.Run()) +} + +func TestCollector(t *testing.T) { + c := newCollector() + + counter := metrics.NewCounter() + counter.Inc(12345) + c.addCounter("test/counter", counter) + + gauge := metrics.NewGauge() + gauge.Update(23456) + c.addGauge("test/gauge", gauge) + + gaugeFloat64 := metrics.NewGaugeFloat64() + gaugeFloat64.Update(34567.89) + c.addGaugeFloat64("test/gauge_float64", gaugeFloat64) + + histogram := metrics.NewHistogram(&metrics.NilSample{}) + c.addHistogram("test/histogram", histogram) + + meter := metrics.NewMeter() + defer meter.Stop() + meter.Mark(9999999) + c.addMeter("test/meter", meter) + + timer := metrics.NewTimer() + defer timer.Stop() + timer.Update(20 * time.Millisecond) + timer.Update(21 * time.Millisecond) + timer.Update(22 * time.Millisecond) + timer.Update(120 * time.Millisecond) + timer.Update(23 * time.Millisecond) + timer.Update(24 * time.Millisecond) + c.addTimer("test/timer", timer) + + resettingTimer := metrics.NewResettingTimer() + resettingTimer.Update(10 * time.Millisecond) + resettingTimer.Update(11 * time.Millisecond) + resettingTimer.Update(12 * time.Millisecond) + resettingTimer.Update(120 * time.Millisecond) + resettingTimer.Update(13 * time.Millisecond) + resettingTimer.Update(14 * time.Millisecond) + c.addResettingTimer("test/resetting_timer", resettingTimer.Snapshot()) + + emptyResettingTimer := metrics.NewResettingTimer().Snapshot() + c.addResettingTimer("test/empty_resetting_timer", emptyResettingTimer) + + const expectedOutput = `# TYPE test_counter gauge +test_counter 12345 + +# TYPE test_gauge gauge +test_gauge 23456 + +# TYPE test_gauge_float64 gauge +test_gauge_float64 34567.89 + +# TYPE test_histogram_count counter +test_histogram_count 0 + +# TYPE test_histogram summary +test_histogram {quantile="0.5"} 0 +test_histogram {quantile="0.75"} 0 +test_histogram {quantile="0.95"} 0 +test_histogram {quantile="0.99"} 0 +test_histogram {quantile="0.999"} 0 +test_histogram {quantile="0.9999"} 0 + +# TYPE test_meter gauge +test_meter 9999999 + +# TYPE test_timer_count counter +test_timer_count 6 + +# TYPE test_timer summary +test_timer {quantile="0.5"} 2.25e+07 +test_timer {quantile="0.75"} 4.8e+07 +test_timer {quantile="0.95"} 1.2e+08 +test_timer {quantile="0.99"} 1.2e+08 +test_timer {quantile="0.999"} 1.2e+08 +test_timer {quantile="0.9999"} 1.2e+08 + +# TYPE test_resetting_timer_count counter +test_resetting_timer_count 6 + +# TYPE test_resetting_timer summary +test_resetting_timer {quantile="0.50"} 12000000 +test_resetting_timer {quantile="0.95"} 120000000 +test_resetting_timer {quantile="0.99"} 120000000 + +` + exp := c.buff.String() + if exp != expectedOutput { + t.Log("Expected Output:\n", expectedOutput) + t.Log("Actual Output:\n", exp) + t.Fatal("unexpected collector output") + } +} diff --git a/metrics/prometheus/prometheus.go b/metrics/prometheus/prometheus.go index 29f4fe05..c8408d8c 100644 --- a/metrics/prometheus/prometheus.go +++ b/metrics/prometheus/prometheus.go @@ -22,8 +22,8 @@ import ( "net/http" "sort" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" ) // Handler returns an HTTP handler which dump metrics in Prometheus format. @@ -36,7 +36,7 @@ func Handler(reg metrics.Registry) http.Handler { }) sort.Strings(names) - // Aggregate all the metris into a Prometheus collector + // Aggregate all the metrics into a Prometheus collector c := newCollector() for _, name := range names { diff --git a/metrics/registry_test.go b/metrics/registry_test.go index a63e485f..d277ae5c 100644 --- a/metrics/registry_test.go +++ b/metrics/registry_test.go @@ -19,20 +19,20 @@ func TestRegistry(t *testing.T) { i := 0 r.Each(func(name string, iface interface{}) { i++ - if "foo" != name { + if name != "foo" { t.Fatal(name) } if _, ok := iface.(Counter); !ok { t.Fatal(iface) } }) - if 1 != i { + if i != 1 { t.Fatal(i) } r.Unregister("foo") i = 0 r.Each(func(string, interface{}) { i++ }) - if 0 != i { + if i != 0 { t.Fatal(i) } } @@ -52,7 +52,7 @@ func TestRegistryDuplicate(t *testing.T) { t.Fatal(iface) } }) - if 1 != i { + if i != 1 { t.Fatal(i) } } @@ -60,11 +60,11 @@ func TestRegistryDuplicate(t *testing.T) { func TestRegistryGet(t *testing.T) { r := NewRegistry() r.Register("foo", NewCounter()) - if count := r.Get("foo").(Counter).Count(); 0 != count { + if count := r.Get("foo").(Counter).Count(); count != 0 { t.Fatal(count) } r.Get("foo").(Counter).Inc(1) - if count := r.Get("foo").(Counter).Count(); 1 != count { + if count := r.Get("foo").(Counter).Count(); count != 1 { t.Fatal(count) } } @@ -271,6 +271,9 @@ func TestChildPrefixedRegistryOfChildRegister(t *testing.T) { t.Fatal(err.Error()) } err = r2.Register("baz", NewCounter()) + if err != nil { + t.Fatal(err.Error()) + } c := NewCounter() Register("bars", c) @@ -278,7 +281,7 @@ func TestChildPrefixedRegistryOfChildRegister(t *testing.T) { r2.Each(func(name string, m interface{}) { i++ if name != "prefix.prefix2.baz" { - //t.Fatal(name) + t.Fatal(name) } }) if i != 1 { @@ -294,12 +297,14 @@ func TestWalkRegistries(t *testing.T) { t.Fatal(err.Error()) } err = r2.Register("baz", NewCounter()) + if err != nil { + t.Fatal(err.Error()) + } c := NewCounter() Register("bars", c) _, prefix := findPrefix(r2, "") - if "prefix.prefix2." != prefix { + if prefix != "prefix.prefix2." { t.Fatal(prefix) } - } diff --git a/metrics/resetting_sample.go b/metrics/resetting_sample.go new file mode 100644 index 00000000..43c1129c --- /dev/null +++ b/metrics/resetting_sample.go @@ -0,0 +1,24 @@ +package metrics + +// ResettingSample converts an ordinary sample into one that resets whenever its +// snapshot is retrieved. This will break for multi-monitor systems, but when only +// a single metric is being pushed out, this ensure that low-frequency events don't +// skew th charts indefinitely. +func ResettingSample(sample Sample) Sample { + return &resettingSample{ + Sample: sample, + } +} + +// resettingSample is a simple wrapper around a sample that resets it upon the +// snapshot retrieval. +type resettingSample struct { + Sample +} + +// Snapshot returns a read-only copy of the sample with the original reset. +func (rs *resettingSample) Snapshot() Sample { + s := rs.Sample.Snapshot() + rs.Sample.Clear() + return s +} diff --git a/metrics/runtime_cgo.go b/metrics/runtime_cgo.go index e3391f4e..4307ebdb 100644 --- a/metrics/runtime_cgo.go +++ b/metrics/runtime_cgo.go @@ -1,5 +1,5 @@ -// +build cgo -// +build !appengine +//go:build cgo && !appengine && !js +// +build cgo,!appengine,!js package metrics diff --git a/metrics/runtime_gccpufraction.go b/metrics/runtime_gccpufraction.go index ca12c05b..28cd4475 100644 --- a/metrics/runtime_gccpufraction.go +++ b/metrics/runtime_gccpufraction.go @@ -1,3 +1,4 @@ +//go:build go1.5 // +build go1.5 package metrics diff --git a/metrics/runtime_no_cgo.go b/metrics/runtime_no_cgo.go index 616a3b47..1799bef6 100644 --- a/metrics/runtime_no_cgo.go +++ b/metrics/runtime_no_cgo.go @@ -1,4 +1,5 @@ -// +build !cgo appengine +//go:build !cgo || appengine || js +// +build !cgo appengine js package metrics diff --git a/metrics/runtime_no_gccpufraction.go b/metrics/runtime_no_gccpufraction.go index be96aa6f..af1a4b63 100644 --- a/metrics/runtime_no_gccpufraction.go +++ b/metrics/runtime_no_gccpufraction.go @@ -1,3 +1,4 @@ +//go:build !go1.5 // +build !go1.5 package metrics diff --git a/metrics/runtime_test.go b/metrics/runtime_test.go index ebbfd501..f85f7868 100644 --- a/metrics/runtime_test.go +++ b/metrics/runtime_test.go @@ -22,27 +22,27 @@ func TestRuntimeMemStats(t *testing.T) { zero := runtimeMetrics.MemStats.PauseNs.Count() // Get a "zero" since GC may have run before these tests. runtime.GC() CaptureRuntimeMemStatsOnce(r) - if count := runtimeMetrics.MemStats.PauseNs.Count(); 1 != count-zero { + if count := runtimeMetrics.MemStats.PauseNs.Count(); count-zero != 1 { t.Fatal(count - zero) } runtime.GC() runtime.GC() CaptureRuntimeMemStatsOnce(r) - if count := runtimeMetrics.MemStats.PauseNs.Count(); 3 != count-zero { + if count := runtimeMetrics.MemStats.PauseNs.Count(); count-zero != 3 { t.Fatal(count - zero) } for i := 0; i < 256; i++ { runtime.GC() } CaptureRuntimeMemStatsOnce(r) - if count := runtimeMetrics.MemStats.PauseNs.Count(); 259 != count-zero { + if count := runtimeMetrics.MemStats.PauseNs.Count(); count-zero != 259 { t.Fatal(count - zero) } for i := 0; i < 257; i++ { runtime.GC() } CaptureRuntimeMemStatsOnce(r) - if count := runtimeMetrics.MemStats.PauseNs.Count(); 515 != count-zero { // We lost one because there were too many GCs between captures. + if count := runtimeMetrics.MemStats.PauseNs.Count(); count-zero != 515 { // We lost one because there were too many GCs between captures. t.Fatal(count - zero) } } diff --git a/metrics/sample.go b/metrics/sample.go index 5c4845a4..fa2bfb27 100644 --- a/metrics/sample.go +++ b/metrics/sample.go @@ -234,7 +234,7 @@ func (NilSample) Variance() float64 { return 0.0 } // SampleMax returns the maximum value of the slice of int64. func SampleMax(values []int64) int64 { - if 0 == len(values) { + if len(values) == 0 { return 0 } var max int64 = math.MinInt64 @@ -248,7 +248,7 @@ func SampleMax(values []int64) int64 { // SampleMean returns the mean value of the slice of int64. func SampleMean(values []int64) float64 { - if 0 == len(values) { + if len(values) == 0 { return 0.0 } return float64(SampleSum(values)) / float64(len(values)) @@ -256,7 +256,7 @@ func SampleMean(values []int64) float64 { // SampleMin returns the minimum value of the slice of int64. func SampleMin(values []int64) int64 { - if 0 == len(values) { + if len(values) == 0 { return 0 } var min int64 = math.MaxInt64 @@ -382,7 +382,7 @@ func SampleSum(values []int64) int64 { // SampleVariance returns the variance of the slice of int64. func SampleVariance(values []int64) float64 { - if 0 == len(values) { + if len(values) == 0 { return 0.0 } m := SampleMean(values) diff --git a/metrics/sample_test.go b/metrics/sample_test.go index d60e99c5..c9168d3e 100644 --- a/metrics/sample_test.go +++ b/metrics/sample_test.go @@ -1,6 +1,7 @@ package metrics import ( + "math" "math/rand" "runtime" "testing" @@ -84,13 +85,13 @@ func TestExpDecaySample10(t *testing.T) { for i := 0; i < 10; i++ { s.Update(int64(i)) } - if size := s.Count(); 10 != size { + if size := s.Count(); size != 10 { t.Errorf("s.Count(): 10 != %v\n", size) } - if size := s.Size(); 10 != size { + if size := s.Size(); size != 10 { t.Errorf("s.Size(): 10 != %v\n", size) } - if l := len(s.Values()); 10 != l { + if l := len(s.Values()); l != 10 { t.Errorf("len(s.Values()): 10 != %v\n", l) } for _, v := range s.Values() { @@ -106,13 +107,13 @@ func TestExpDecaySample100(t *testing.T) { for i := 0; i < 100; i++ { s.Update(int64(i)) } - if size := s.Count(); 100 != size { + if size := s.Count(); size != 100 { t.Errorf("s.Count(): 100 != %v\n", size) } - if size := s.Size(); 100 != size { + if size := s.Size(); size != 100 { t.Errorf("s.Size(): 100 != %v\n", size) } - if l := len(s.Values()); 100 != l { + if l := len(s.Values()); l != 100 { t.Errorf("len(s.Values()): 100 != %v\n", l) } for _, v := range s.Values() { @@ -128,13 +129,13 @@ func TestExpDecaySample1000(t *testing.T) { for i := 0; i < 1000; i++ { s.Update(int64(i)) } - if size := s.Count(); 1000 != size { + if size := s.Count(); size != 1000 { t.Errorf("s.Count(): 1000 != %v\n", size) } - if size := s.Size(); 100 != size { + if size := s.Size(); size != 100 { t.Errorf("s.Size(): 100 != %v\n", size) } - if l := len(s.Values()); 100 != l { + if l := len(s.Values()); l != 100 { t.Errorf("len(s.Values()): 100 != %v\n", l) } for _, v := range s.Values() { @@ -208,13 +209,13 @@ func TestUniformSample(t *testing.T) { for i := 0; i < 1000; i++ { s.Update(int64(i)) } - if size := s.Count(); 1000 != size { + if size := s.Count(); size != 1000 { t.Errorf("s.Count(): 1000 != %v\n", size) } - if size := s.Size(); 100 != size { + if size := s.Size(); size != 100 { t.Errorf("s.Size(): 100 != %v\n", size) } - if l := len(s.Values()); 100 != l { + if l := len(s.Values()); l != 100 { t.Errorf("len(s.Values()): 100 != %v\n", l) } for _, v := range s.Values() { @@ -276,57 +277,57 @@ func benchmarkSample(b *testing.B, s Sample) { } func testExpDecaySampleStatistics(t *testing.T, s Sample) { - if count := s.Count(); 10000 != count { + if count := s.Count(); count != 10000 { t.Errorf("s.Count(): 10000 != %v\n", count) } - if min := s.Min(); 107 != min { + if min := s.Min(); min != 107 { t.Errorf("s.Min(): 107 != %v\n", min) } - if max := s.Max(); 10000 != max { + if max := s.Max(); max != 10000 { t.Errorf("s.Max(): 10000 != %v\n", max) } - if mean := s.Mean(); 4965.98 != mean { + if mean := s.Mean(); mean != 4965.98 { t.Errorf("s.Mean(): 4965.98 != %v\n", mean) } - if stdDev := s.StdDev(); 2959.825156930727 != stdDev { + if stdDev := s.StdDev(); stdDev != 2959.825156930727 { t.Errorf("s.StdDev(): 2959.825156930727 != %v\n", stdDev) } ps := s.Percentiles([]float64{0.5, 0.75, 0.99}) - if 4615 != ps[0] { + if ps[0] != 4615 { t.Errorf("median: 4615 != %v\n", ps[0]) } - if 7672 != ps[1] { + if ps[1] != 7672 { t.Errorf("75th percentile: 7672 != %v\n", ps[1]) } - if 9998.99 != ps[2] { + if ps[2] != 9998.99 { t.Errorf("99th percentile: 9998.99 != %v\n", ps[2]) } } func testUniformSampleStatistics(t *testing.T, s Sample) { - if count := s.Count(); 10000 != count { + if count := s.Count(); count != 10000 { t.Errorf("s.Count(): 10000 != %v\n", count) } - if min := s.Min(); 37 != min { + if min := s.Min(); min != 37 { t.Errorf("s.Min(): 37 != %v\n", min) } - if max := s.Max(); 9989 != max { + if max := s.Max(); max != 9989 { t.Errorf("s.Max(): 9989 != %v\n", max) } - if mean := s.Mean(); 4748.14 != mean { + if mean := s.Mean(); mean != 4748.14 { t.Errorf("s.Mean(): 4748.14 != %v\n", mean) } - if stdDev := s.StdDev(); 2826.684117548333 != stdDev { + if stdDev := s.StdDev(); stdDev != 2826.684117548333 { t.Errorf("s.StdDev(): 2826.684117548333 != %v\n", stdDev) } ps := s.Percentiles([]float64{0.5, 0.75, 0.99}) - if 4599 != ps[0] { + if ps[0] != 4599 { t.Errorf("median: 4599 != %v\n", ps[0]) } - if 7380.5 != ps[1] { + if ps[1] != 7380.5 { t.Errorf("75th percentile: 7380.5 != %v\n", ps[1]) } - if 9986.429999999998 != ps[2] { + if math.Abs(9986.429999999998-ps[2]) > epsilonPercentile { t.Errorf("99th percentile: 9986.429999999998 != %v\n", ps[2]) } } @@ -345,6 +346,7 @@ func TestUniformSampleConcurrentUpdateCount(t *testing.T) { quit := make(chan struct{}) go func() { t := time.NewTicker(10 * time.Millisecond) + defer t.Stop() for { select { case <-t.C: diff --git a/metrics/syslog.go b/metrics/syslog.go index a0ed4b1b..551a2bd0 100644 --- a/metrics/syslog.go +++ b/metrics/syslog.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package metrics diff --git a/metrics/timer.go b/metrics/timer.go index 89e22208..a63c9dfb 100644 --- a/metrics/timer.go +++ b/metrics/timer.go @@ -76,10 +76,7 @@ func NewTimer() Timer { } // NilTimer is a no-op Timer. -type NilTimer struct { - h Histogram - m Meter -} +type NilTimer struct{} // Count is a no-op. func (NilTimer) Count() int64 { return 0 } diff --git a/metrics/timer_test.go b/metrics/timer_test.go index 8638a227..903e8e8d 100644 --- a/metrics/timer_test.go +++ b/metrics/timer_test.go @@ -18,7 +18,7 @@ func BenchmarkTimer(b *testing.B) { func TestGetOrRegisterTimer(t *testing.T) { r := NewRegistry() NewRegisteredTimer("foo", r).Update(47) - if tm := GetOrRegisterTimer("foo", r); 1 != tm.Count() { + if tm := GetOrRegisterTimer("foo", r); tm.Count() != 1 { t.Fatal(tm) } } @@ -27,7 +27,7 @@ func TestTimerExtremes(t *testing.T) { tm := NewTimer() tm.Update(math.MaxInt64) tm.Update(0) - if stdDev := tm.StdDev(); 4.611686018427388e+18 != stdDev { + if stdDev := tm.StdDev(); stdDev != 4.611686018427388e+18 { t.Errorf("tm.StdDev(): 4.611686018427388e+18 != %v\n", stdDev) } } @@ -35,60 +35,73 @@ func TestTimerExtremes(t *testing.T) { func TestTimerStop(t *testing.T) { l := len(arbiter.meters) tm := NewTimer() - if len(arbiter.meters) != l+1 { + if l+1 != len(arbiter.meters) { t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters)) } tm.Stop() - if len(arbiter.meters) != l { + if l != len(arbiter.meters) { t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters)) } } func TestTimerFunc(t *testing.T) { - tm := NewTimer() - tm.Time(func() { time.Sleep(50e6) }) - if max := tm.Max(); 35e6 > max || max > 145e6 { - t.Errorf("tm.Max(): 35e6 > %v || %v > 145e6\n", max, max) + var ( + tm = NewTimer() + testStart = time.Now() + actualTime time.Duration + ) + tm.Time(func() { + time.Sleep(50 * time.Millisecond) + actualTime = time.Since(testStart) + }) + var ( + drift = time.Millisecond * 2 + measured = time.Duration(tm.Max()) + ceil = actualTime + drift + floor = actualTime - drift + ) + if measured > ceil || measured < floor { + t.Errorf("tm.Max(): %v > %v || %v > %v\n", measured, ceil, measured, floor) } } func TestTimerZero(t *testing.T) { tm := NewTimer() - if count := tm.Count(); 0 != count { + if count := tm.Count(); count != 0 { t.Errorf("tm.Count(): 0 != %v\n", count) } - if min := tm.Min(); 0 != min { + if min := tm.Min(); min != 0 { t.Errorf("tm.Min(): 0 != %v\n", min) } - if max := tm.Max(); 0 != max { + if max := tm.Max(); max != 0 { t.Errorf("tm.Max(): 0 != %v\n", max) } - if mean := tm.Mean(); 0.0 != mean { + if mean := tm.Mean(); mean != 0.0 { t.Errorf("tm.Mean(): 0.0 != %v\n", mean) } - if stdDev := tm.StdDev(); 0.0 != stdDev { + if stdDev := tm.StdDev(); stdDev != 0.0 { t.Errorf("tm.StdDev(): 0.0 != %v\n", stdDev) } ps := tm.Percentiles([]float64{0.5, 0.75, 0.99}) - if 0.0 != ps[0] { + if ps[0] != 0.0 { t.Errorf("median: 0.0 != %v\n", ps[0]) } - if 0.0 != ps[1] { + if ps[1] != 0.0 { t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) } - if 0.0 != ps[2] { + if ps[2] != 0.0 { t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) } - if rate1 := tm.Rate1(); 0.0 != rate1 { + if rate1 := tm.Rate1(); rate1 != 0.0 { t.Errorf("tm.Rate1(): 0.0 != %v\n", rate1) } - if rate5 := tm.Rate5(); 0.0 != rate5 { + if rate5 := tm.Rate5(); rate5 != 0.0 { t.Errorf("tm.Rate5(): 0.0 != %v\n", rate5) } - if rate15 := tm.Rate15(); 0.0 != rate15 { + if rate15 := tm.Rate15(); rate15 != 0.0 { t.Errorf("tm.Rate15(): 0.0 != %v\n", rate15) } - if rateMean := tm.RateMean(); 0.0 != rateMean { + if rateMean := tm.RateMean(); rateMean != 0.0 { t.Errorf("tm.RateMean(): 0.0 != %v\n", rateMean) } } diff --git a/metrics/validate.sh b/metrics/validate.sh old mode 100755 new mode 100644 diff --git a/miner/csv_write_test.go b/miner/csv_write_test.go deleted file mode 100644 index 4c0c83f0..00000000 --- a/miner/csv_write_test.go +++ /dev/null @@ -1,18 +0,0 @@ -package miner - -import ( - "encoding/csv" - "os" - "testing" -) - -func TestWritingCSV(t *testing.T) { - - csvFile, _ := os.OpenFile("output.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) - wr := csv.NewWriter(csvFile) - - wr.Write([]string{"A", "0.25"}) - wr.Write([]string{"B", "55.70"}) - wr.Write([]string{"C", "60.70"}) - wr.Flush() -} diff --git a/miner/miner.go b/miner/miner.go index 7fb6b2ec..1e9607a7 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -20,22 +20,23 @@ package miner import ( "fmt" "math/big" - "sync/atomic" + "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" + "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" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) -// Backend wraps all methods required for mining. +// Backend wraps all methods required for mining. Only full node is capable +// to offer all the functions here. type Backend interface { BlockChain() *core.BlockChain TxPool() *core.TxPool @@ -43,14 +44,15 @@ type Backend interface { // 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). + 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). + NotifyFull bool `toml:",omitempty"` // Notify with pending block headers instead of work packages + 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. @@ -61,22 +63,24 @@ type Miner struct { eth Backend engine consensus.Engine exitCh chan struct{} + startCh chan common.Address + stopCh chan struct{} - canStart int32 // can start indicates whether we can start the mining operation - shouldStart int32 // should start indicates whether we should start after sync + wg sync.WaitGroup } -func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *event.TypeMux, engine consensus.Engine, isLocalBlock func(block *types.Block) bool) *Miner { +func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *event.TypeMux, engine consensus.Engine, isLocalBlock func(header *types.Header) bool) *Miner { miner := &Miner{ - eth: eth, - mux: mux, - engine: engine, - exitCh: make(chan struct{}), - worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock), - canStart: 1, + eth: eth, + mux: mux, + engine: engine, + exitCh: make(chan struct{}), + startCh: make(chan common.Address), + stopCh: make(chan struct{}), + worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock, true), } + miner.wg.Add(1) go miner.update() - return miner } @@ -84,89 +88,108 @@ func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *even // It's entered once and as soon as `Done` or `Failed` has been broadcasted the events are unregistered and // the loop is exited. This to prevent a major security vuln where external parties can DOS you with blocks // and halt your mining operation for as long as the DOS continues. -func (self *Miner) update() { - events := self.mux.Subscribe(downloader.StartEvent{}, downloader.DoneEvent{}, downloader.FailedEvent{}) - defer events.Unsubscribe() +func (miner *Miner) update() { + defer miner.wg.Done() + + events := miner.mux.Subscribe(downloader.StartEvent{}, downloader.DoneEvent{}, downloader.FailedEvent{}) + defer func() { + if !events.Closed() { + events.Unsubscribe() + } + }() + shouldStart := false + canStart := true + dlEventCh := events.Chan() for { select { - case ev := <-events.Chan(): + case ev := <-dlEventCh: if ev == nil { - return + // Unsubscription done, stop listening + dlEventCh = nil + continue } switch ev.Data.(type) { case downloader.StartEvent: - atomic.StoreInt32(&self.canStart, 0) - if self.Mining() { - self.Stop() - atomic.StoreInt32(&self.shouldStart, 1) + wasMining := miner.Mining() + miner.worker.stop() + canStart = false + if wasMining { + // Resume mining after sync was finished + shouldStart = true log.Info("Mining aborted due to sync") } - case downloader.DoneEvent, downloader.FailedEvent: - shouldStart := atomic.LoadInt32(&self.shouldStart) == 1 - - atomic.StoreInt32(&self.canStart, 1) - atomic.StoreInt32(&self.shouldStart, 0) + case downloader.FailedEvent: + canStart = true if shouldStart { - self.Start(self.coinbase) + miner.SetEtherbase(miner.coinbase) + miner.worker.start() } - // stop immediately and ignore all further pending events - return + case downloader.DoneEvent: + canStart = true + if shouldStart { + miner.SetEtherbase(miner.coinbase) + miner.worker.start() + } + // Stop reacting to downloader events + events.Unsubscribe() + } + case addr := <-miner.startCh: + miner.SetEtherbase(addr) + if canStart { + miner.worker.start() } - case <-self.exitCh: + shouldStart = true + case <-miner.stopCh: + shouldStart = false + miner.worker.stop() + case <-miner.exitCh: + miner.worker.close() return } } } -func (self *Miner) Start(coinbase common.Address) { - atomic.StoreInt32(&self.shouldStart, 1) - self.SetEtherbase(coinbase) - - if atomic.LoadInt32(&self.canStart) == 0 { - log.Info("Network syncing, will start miner afterwards") - return - } - self.worker.start() +func (miner *Miner) Start(coinbase common.Address) { + miner.startCh <- coinbase } -func (self *Miner) Stop() { - self.worker.stop() - atomic.StoreInt32(&self.shouldStart, 0) +func (miner *Miner) Stop() { + miner.stopCh <- struct{}{} } -func (self *Miner) Close() { - self.worker.close() - close(self.exitCh) +func (miner *Miner) Close() { + close(miner.exitCh) + miner.wg.Wait() } -func (self *Miner) Mining() bool { - return self.worker.isRunning() +func (miner *Miner) Mining() bool { + return miner.worker.isRunning() } -func (self *Miner) HashRate() uint64 { - if pow, ok := self.engine.(consensus.PoW); ok { +func (miner *Miner) Hashrate() uint64 { + if pow, ok := miner.engine.(consensus.PoW); ok { return uint64(pow.Hashrate()) } return 0 } -func (self *Miner) SetExtra(extra []byte) error { +func (miner *Miner) SetExtra(extra []byte) error { if uint64(len(extra)) > params.MaximumExtraDataSize { - return fmt.Errorf("Extra exceeds max length. %d > %v", len(extra), params.MaximumExtraDataSize) + return fmt.Errorf("extra exceeds max length. %d > %v", len(extra), params.MaximumExtraDataSize) } - self.worker.setExtra(extra) + miner.worker.setExtra(extra) return nil } // SetRecommitInterval sets the interval for sealing work resubmitting. -func (self *Miner) SetRecommitInterval(interval time.Duration) { - self.worker.setRecommitInterval(interval) +func (miner *Miner) SetRecommitInterval(interval time.Duration) { + miner.worker.setRecommitInterval(interval) } // Pending returns the currently pending block and associated state. -func (self *Miner) Pending() (*types.Block, *state.StateDB) { - return self.worker.pending() +func (miner *Miner) Pending() (*types.Block, *state.StateDB) { + return miner.worker.pending() } // PendingBlock returns the currently pending block. @@ -174,11 +197,69 @@ func (self *Miner) Pending() (*types.Block, *state.StateDB) { // Note, to access both the pending block and the pending state // simultaneously, please use Pending(), as the pending state can // change between multiple method calls -func (self *Miner) PendingBlock() *types.Block { - return self.worker.pendingBlock() +func (miner *Miner) PendingBlock() *types.Block { + return miner.worker.pendingBlock() +} + +// PendingBlockAndReceipts returns the currently pending block and corresponding receipts. +func (miner *Miner) PendingBlockAndReceipts() (*types.Block, types.Receipts) { + return miner.worker.pendingBlockAndReceipts() +} + +func (miner *Miner) SetEtherbase(addr common.Address) { + miner.coinbase = addr + miner.worker.setEtherbase(addr) } -func (self *Miner) SetEtherbase(addr common.Address) { - self.coinbase = addr - self.worker.setEtherbase(addr) +// SetGasCeil sets the gaslimit to strive for when mining blocks post 1559. +// For pre-1559 blocks, it sets the ceiling. +func (miner *Miner) SetGasCeil(ceil uint64) { + miner.worker.setGasCeil(ceil) +} + +// EnablePreseal turns on the preseal mining feature. It's enabled by default. +// Note this function shouldn't be exposed to API, it's unnecessary for users +// (miners) to actually know the underlying detail. It's only for outside project +// which uses this library. +func (miner *Miner) EnablePreseal() { + miner.worker.enablePreseal() +} + +// DisablePreseal turns off the preseal mining feature. It's necessary for some +// fake consensus engine which can seal blocks instantaneously. +// Note this function shouldn't be exposed to API, it's unnecessary for users +// (miners) to actually know the underlying detail. It's only for outside project +// which uses this library. +func (miner *Miner) DisablePreseal() { + miner.worker.disablePreseal() +} + +// SubscribePendingLogs starts delivering logs from pending transactions +// to the given channel. +func (miner *Miner) SubscribePendingLogs(ch chan<- []*types.Log) event.Subscription { + return miner.worker.pendingLogsFeed.Subscribe(ch) +} + +// GetSealingBlockAsync requests to generate a sealing block according to the +// given parameters. Regardless of whether the generation is successful or not, +// there is always a result that will be returned through the result channel. +// The difference is that if the execution fails, the returned result is nil +// and the concrete error is dropped silently. +func (miner *Miner) GetSealingBlockAsync(parent common.Hash, timestamp uint64, coinbase common.Address, random common.Hash, noTxs bool) (chan *types.Block, error) { + resCh, _, err := miner.worker.getSealingBlock(parent, timestamp, coinbase, random, noTxs) + if err != nil { + return nil, err + } + return resCh, nil +} + +// GetSealingBlockSync creates a sealing block according to the given parameters. +// If the generation is failed or the underlying work is already closed, an error +// will be returned. +func (miner *Miner) GetSealingBlockSync(parent common.Hash, timestamp uint64, coinbase common.Address, random common.Hash, noTxs bool) (*types.Block, error) { + resCh, errCh, err := miner.worker.getSealingBlock(parent, timestamp, coinbase, random, noTxs) + if err != nil { + return nil, err + } + return <-resCh, <-errCh } diff --git a/miner/miner_test.go b/miner/miner_test.go new file mode 100644 index 00000000..d49c07d9 --- /dev/null +++ b/miner/miner_test.go @@ -0,0 +1,281 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package miner implements Ethereum block creation and mining. +package miner + +import ( + "errors" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/clique" + "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/eth/downloader" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/trie" +) + +type mockBackend struct { + bc *core.BlockChain + txPool *core.TxPool +} + +func NewMockBackend(bc *core.BlockChain, txPool *core.TxPool) *mockBackend { + return &mockBackend{ + bc: bc, + txPool: txPool, + } +} + +func (m *mockBackend) BlockChain() *core.BlockChain { + return m.bc +} + +func (m *mockBackend) TxPool() *core.TxPool { + return m.txPool +} + +func (m *mockBackend) StateAtBlock(block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (statedb *state.StateDB, err error) { + return nil, errors.New("not supported") +} + +type testBlockChain struct { + statedb *state.StateDB + gasLimit uint64 + chainHeadFeed *event.Feed +} + +func (bc *testBlockChain) CurrentBlock() *types.Block { + return types.NewBlock(&types.Header{ + GasLimit: bc.gasLimit, + }, nil, nil, nil, trie.NewStackTrie(nil)) +} + +func (bc *testBlockChain) GetBlock(hash common.Hash, number uint64) *types.Block { + return bc.CurrentBlock() +} + +func (bc *testBlockChain) StateAt(common.Hash) (*state.StateDB, error) { + return bc.statedb, nil +} + +func (bc *testBlockChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { + return bc.chainHeadFeed.Subscribe(ch) +} + +func TestMiner(t *testing.T) { + miner, mux, cleanup := createMiner(t) + defer cleanup(false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Start the downloader + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.DoneEvent{}) + waitForMiningState(t, miner, true) + + // Subsequent downloader events after a successful DoneEvent should not cause the + // miner to start or stop. This prevents a security vulnerability + // that would allow entities to present fake high blocks that would + // stop mining operations by causing a downloader sync + // until it was discovered they were invalid, whereon mining would resume. + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, true) + + mux.Post(downloader.FailedEvent{}) + waitForMiningState(t, miner, true) +} + +// TestMinerDownloaderFirstFails tests that mining is only +// permitted to run indefinitely once the downloader sees a DoneEvent (success). +// An initial FailedEvent should allow mining to stop on a subsequent +// downloader StartEvent. +func TestMinerDownloaderFirstFails(t *testing.T) { + miner, mux, cleanup := createMiner(t) + defer cleanup(false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Start the downloader + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.FailedEvent{}) + waitForMiningState(t, miner, true) + + // Since the downloader hasn't yet emitted a successful DoneEvent, + // we expect the miner to stop on next StartEvent. + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + + // Downloader finally succeeds. + mux.Post(downloader.DoneEvent{}) + waitForMiningState(t, miner, true) + + // Downloader starts again. + // Since it has achieved a DoneEvent once, we expect miner + // state to be unchanged. + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, true) + + mux.Post(downloader.FailedEvent{}) + waitForMiningState(t, miner, true) +} + +func TestMinerStartStopAfterDownloaderEvents(t *testing.T) { + miner, mux, cleanup := createMiner(t) + defer cleanup(false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Start the downloader + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + + // Downloader finally succeeds. + mux.Post(downloader.DoneEvent{}) + waitForMiningState(t, miner, true) + + miner.Stop() + waitForMiningState(t, miner, false) + + miner.Start(common.HexToAddress("0x678910")) + waitForMiningState(t, miner, true) + + miner.Stop() + waitForMiningState(t, miner, false) +} + +func TestStartWhileDownload(t *testing.T) { + miner, mux, cleanup := createMiner(t) + defer cleanup(false) + waitForMiningState(t, miner, false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + // Starting the miner after the downloader should not work + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, false) +} + +func TestStartStopMiner(t *testing.T) { + miner, _, cleanup := createMiner(t) + defer cleanup(false) + waitForMiningState(t, miner, false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + miner.Stop() + waitForMiningState(t, miner, false) +} + +func TestCloseMiner(t *testing.T) { + miner, _, cleanup := createMiner(t) + defer cleanup(true) + waitForMiningState(t, miner, false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Terminate the miner and wait for the update loop to run + miner.Close() + waitForMiningState(t, miner, false) +} + +// TestMinerSetEtherbase checks that etherbase becomes set even if mining isn't +// possible at the moment +func TestMinerSetEtherbase(t *testing.T) { + miner, mux, cleanup := createMiner(t) + defer cleanup(false) + // Start with a 'bad' mining address + miner.Start(common.HexToAddress("0xdead")) + waitForMiningState(t, miner, true) + // Start the downloader + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + // Now user tries to configure proper mining address + miner.Start(common.HexToAddress("0x1337")) + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.DoneEvent{}) + + waitForMiningState(t, miner, true) + // The miner should now be using the good address + if got, exp := miner.coinbase, common.HexToAddress("0x1337"); got != exp { + t.Fatalf("Wrong coinbase, got %x expected %x", got, exp) + } +} + +// waitForMiningState waits until either +// * the desired mining state was reached +// * a timeout was reached which fails the test +func waitForMiningState(t *testing.T, m *Miner, mining bool) { + t.Helper() + + var state bool + for i := 0; i < 100; i++ { + time.Sleep(10 * time.Millisecond) + if state = m.Mining(); state == mining { + return + } + } + t.Fatalf("Mining() == %t, want %t", state, mining) +} + +func createMiner(t *testing.T) (*Miner, *event.TypeMux, func(skipMiner bool)) { + // Create Ethash config + config := Config{ + Etherbase: common.HexToAddress("123456789"), + } + // Create chainConfig + memdb := memorydb.New() + chainDB := rawdb.NewDatabase(memdb) + genesis := core.DeveloperGenesisBlock(15, 11_500_000, common.HexToAddress("12345")) + chainConfig, _, err := core.SetupGenesisBlock(chainDB, genesis) + if err != nil { + t.Fatalf("can't create new chain config: %v", err) + } + // Create consensus engine + engine := clique.New(chainConfig.Clique, chainDB) + // Create Ethereum backend + bc, err := core.NewBlockChain(chainDB, nil, genesis, nil, engine, vm.Config{}, nil, nil) + if err != nil { + t.Fatalf("can't create new chain %v", err) + } + statedb, _ := state.New(common.Hash{}, state.NewDatabase(chainDB), nil) + blockchain := &testBlockChain{statedb, 10000000, new(event.Feed)} + + pool := core.NewTxPool(testTxPoolConfig, chainConfig, blockchain) + backend := NewMockBackend(bc, pool) + // Create event Mux + mux := new(event.TypeMux) + // Create Miner + miner := New(backend, &config, chainConfig, mux, engine, nil) + cleanup := func(skipMiner bool) { + bc.Stop() + engine.Close() + pool.Stop() + if !skipMiner { + miner.Close() + } + } + return miner, mux, cleanup +} diff --git a/miner/stress/1559/main.go b/miner/stress/1559/main.go new file mode 100644 index 00000000..9c1ab0f4 --- /dev/null +++ b/miner/stress/1559/main.go @@ -0,0 +1,263 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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 a miner stress test for eip 1559. +package main + +import ( + "crypto/ecdsa" + "math/big" + "math/rand" + "os" + "os/signal" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/fdlimit" + "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/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" +) + +var ( + londonBlock = big.NewInt(30) // Predefined london fork block for activating eip 1559. +) + +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + fdlimit.Raise(2048) + + // Generate a batch of accounts to seal and fund with + faucets := make([]*ecdsa.PrivateKey, 128) + for i := 0; i < len(faucets); i++ { + faucets[i], _ = crypto.GenerateKey() + } + // Pre-generate the ethash mining DAG so we don't race + ethash.MakeDataset(1, ethconfig.Defaults.Ethash.DatasetDir) + + // Create an Ethash network based off of the Ropsten config + genesis := makeGenesis(faucets) + + // Handle interrupts. + interruptCh := make(chan os.Signal, 5) + signal.Notify(interruptCh, os.Interrupt) + + var ( + stacks []*node.Node + nodes []*eth.Ethereum + enodes []*enode.Node + ) + for i := 0; i < 4; i++ { + // Start the node and wait until it's up + stack, ethBackend, err := makeMiner(genesis) + if err != nil { + panic(err) + } + defer stack.Close() + + for stack.Server().NodeInfo().Ports.Listener == 0 { + time.Sleep(250 * time.Millisecond) + } + // Connect the node to all the previous ones + for _, n := range enodes { + stack.Server().AddPeer(n) + } + // Start tracking the node and its enode + nodes = append(nodes, ethBackend) + enodes = append(enodes, stack.Server().Self()) + } + + // Iterate over all the nodes and start mining + time.Sleep(3 * time.Second) + for _, node := range nodes { + if err := node.StartMining(1); err != nil { + panic(err) + } + } + time.Sleep(3 * time.Second) + + // Start injecting transactions from the faucets like crazy + var ( + nonces = make([]uint64, len(faucets)) + + // The signer activates the 1559 features even before the fork, + // so the new 1559 txs can be created with this signer. + signer = types.LatestSignerForChainID(genesis.Config.ChainID) + ) + for { + // Stop when interrupted. + select { + case <-interruptCh: + for _, node := range stacks { + node.Close() + } + return + default: + } + + // Pick a random mining node + index := rand.Intn(len(faucets)) + backend := nodes[index%len(nodes)] + + headHeader := backend.BlockChain().CurrentHeader() + baseFee := headHeader.BaseFee + + // Create a self transaction and inject into the pool. The legacy + // and 1559 transactions can all be created by random even if the + // fork is not happened. + tx := makeTransaction(nonces[index], faucets[index], signer, baseFee) + if err := backend.TxPool().AddLocal(tx); err != nil { + continue + } + nonces[index]++ + + // Wait if we're too saturated + if pend, _ := backend.TxPool().Stats(); pend > 4192 { + time.Sleep(100 * time.Millisecond) + } + + // Wait if the basefee is raised too fast + if baseFee != nil && baseFee.Cmp(new(big.Int).Mul(big.NewInt(100), big.NewInt(params.GWei))) > 0 { + time.Sleep(500 * time.Millisecond) + } + } +} + +func makeTransaction(nonce uint64, privKey *ecdsa.PrivateKey, signer types.Signer, baseFee *big.Int) *types.Transaction { + // Generate legacy transaction + if rand.Intn(2) == 0 { + tx, err := types.SignTx(types.NewTransaction(nonce, crypto.PubkeyToAddress(privKey.PublicKey), new(big.Int), 21000, big.NewInt(100000000000+rand.Int63n(65536)), nil), signer, privKey) + if err != nil { + panic(err) + } + return tx + } + // Generate eip 1559 transaction + recipient := crypto.PubkeyToAddress(privKey.PublicKey) + + // Feecap and feetip are limited to 32 bytes. Offer a sightly + // larger buffer for creating both valid and invalid transactions. + var buf = make([]byte, 32+5) + rand.Read(buf) + gasTipCap := new(big.Int).SetBytes(buf) + + // If the given base fee is nil(the 1559 is still not available), + // generate a fake base fee in order to create 1559 tx forcibly. + if baseFee == nil { + baseFee = new(big.Int).SetInt64(int64(rand.Int31())) + } + // Generate the feecap, 75% valid feecap and 25% unguaranted. + var gasFeeCap *big.Int + if rand.Intn(4) == 0 { + rand.Read(buf) + gasFeeCap = new(big.Int).SetBytes(buf) + } else { + gasFeeCap = new(big.Int).Add(baseFee, gasTipCap) + } + return types.MustSignNewTx(privKey, signer, &types.DynamicFeeTx{ + ChainID: signer.ChainID(), + Nonce: nonce, + GasTipCap: gasTipCap, + GasFeeCap: gasFeeCap, + Gas: 21000, + To: &recipient, + Value: big.NewInt(100), + Data: nil, + AccessList: nil, + }) +} + +// makeGenesis creates a custom Ethash genesis block based on some pre-defined +// faucet accounts. +func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis { + genesis := core.DefaultRopstenGenesisBlock() + + genesis.Config = params.AllEthashProtocolChanges + genesis.Config.LondonBlock = londonBlock + genesis.Difficulty = params.MinimumDifficulty + + // Small gaslimit for easier basefee moving testing. + genesis.GasLimit = 8_000_000 + + genesis.Config.ChainID = big.NewInt(18) + genesis.Config.EIP150Hash = common.Hash{} + + genesis.Alloc = core.GenesisAlloc{} + for _, faucet := range faucets { + genesis.Alloc[crypto.PubkeyToAddress(faucet.PublicKey)] = core.GenesisAccount{ + Balance: new(big.Int).Exp(big.NewInt(2), big.NewInt(128), nil), + } + } + if londonBlock.Sign() == 0 { + log.Info("Enabled the eip 1559 by default") + } else { + log.Info("Registered the london fork", "number", londonBlock) + } + return genesis +} + +func makeMiner(genesis *core.Genesis) (*node.Node, *eth.Ethereum, error) { + // Define the basic configurations for the Ethereum node + datadir, _ := os.MkdirTemp("", "") + + config := &node.Config{ + Name: "geth", + Version: params.Version, + DataDir: datadir, + P2P: p2p.Config{ + ListenAddr: "0.0.0.0:0", + NoDiscovery: true, + MaxPeers: 25, + }, + UseLightweightKDF: true, + } + // Create the node and configure a full Ethereum node on it + stack, err := node.New(config) + if err != nil { + return nil, nil, err + } + ethBackend, err := eth.New(stack, ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + GPO: ethconfig.Defaults.GPO, + Ethash: ethconfig.Defaults.Ethash, + Miner: miner.Config{ + Etherbase: common.Address{1}, + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: time.Second, + }, + }) + if err != nil { + return nil, nil, err + } + err = stack.Start() + return stack, ethBackend, err +} diff --git a/miner/stress/beacon/main.go b/miner/stress/beacon/main.go new file mode 100644 index 00000000..88af84c7 --- /dev/null +++ b/miner/stress/beacon/main.go @@ -0,0 +1,555 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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 a miner stress test for the eth1/2 transition +package main + +import ( + "crypto/ecdsa" + "errors" + "math/big" + "math/rand" + "os" + "path/filepath" + "time" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/fdlimit" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/beacon" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + ethcatalyst "github.com/ethereum/go-ethereum/eth/catalyst" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/les" + lescatalyst "github.com/ethereum/go-ethereum/les/catalyst" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" +) + +type nodetype int + +const ( + legacyMiningNode nodetype = iota + legacyNormalNode + eth2MiningNode + eth2NormalNode + eth2LightClient +) + +func (typ nodetype) String() string { + switch typ { + case legacyMiningNode: + return "legacyMiningNode" + case legacyNormalNode: + return "legacyNormalNode" + case eth2MiningNode: + return "eth2MiningNode" + case eth2NormalNode: + return "eth2NormalNode" + case eth2LightClient: + return "eth2LightClient" + default: + return "undefined" + } +} + +var ( + // transitionDifficulty is the target total difficulty for transition + transitionDifficulty = new(big.Int).Mul(big.NewInt(20), params.MinimumDifficulty) + + // blockInterval is the time interval for creating a new eth2 block + blockInterval = time.Second * 3 + blockIntervalInt = 3 + + // finalizationDist is the block distance for finalizing block + finalizationDist = 10 +) + +type ethNode struct { + typ nodetype + stack *node.Node + enode *enode.Node + api *ethcatalyst.ConsensusAPI + ethBackend *eth.Ethereum + lapi *lescatalyst.ConsensusAPI + lesBackend *les.LightEthereum +} + +func newNode(typ nodetype, genesis *core.Genesis, enodes []*enode.Node) *ethNode { + var ( + err error + api *ethcatalyst.ConsensusAPI + lapi *lescatalyst.ConsensusAPI + stack *node.Node + ethBackend *eth.Ethereum + lesBackend *les.LightEthereum + ) + // Start the node and wait until it's up + if typ == eth2LightClient { + stack, lesBackend, lapi, err = makeLightNode(genesis) + } else { + stack, ethBackend, api, err = makeFullNode(genesis) + } + if err != nil { + panic(err) + } + for stack.Server().NodeInfo().Ports.Listener == 0 { + time.Sleep(250 * time.Millisecond) + } + // Connect the node to all the previous ones + for _, n := range enodes { + stack.Server().AddPeer(n) + } + enode := stack.Server().Self() + + // Inject the signer key and start sealing with it + stack.AccountManager().AddBackend(keystore.NewPlaintextKeyStore("beacon-stress")) + store := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) + if _, err := store.NewAccount(""); err != nil { + panic(err) + } + return ðNode{ + typ: typ, + api: api, + ethBackend: ethBackend, + lapi: lapi, + lesBackend: lesBackend, + stack: stack, + enode: enode, + } +} + +func (n *ethNode) assembleBlock(parentHash common.Hash, parentTimestamp uint64) (*beacon.ExecutableDataV1, error) { + if n.typ != eth2MiningNode { + return nil, errors.New("invalid node type") + } + timestamp := uint64(time.Now().Unix()) + if timestamp <= parentTimestamp { + timestamp = parentTimestamp + 1 + } + payloadAttribute := beacon.PayloadAttributesV1{ + Timestamp: timestamp, + Random: common.Hash{}, + SuggestedFeeRecipient: common.HexToAddress("0xdeadbeef"), + } + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: parentHash, + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + payload, err := n.api.ForkchoiceUpdatedV1(fcState, &payloadAttribute) + if err != nil { + return nil, err + } + return n.api.GetPayloadV1(*payload.PayloadID) +} + +func (n *ethNode) insertBlock(eb beacon.ExecutableDataV1) error { + if !eth2types(n.typ) { + return errors.New("invalid node type") + } + switch n.typ { + case eth2NormalNode, eth2MiningNode: + newResp, err := n.api.NewPayloadV1(eb) + if err != nil { + return err + } else if newResp.Status != "VALID" { + return errors.New("failed to insert block") + } + return nil + case eth2LightClient: + newResp, err := n.lapi.ExecutePayloadV1(eb) + if err != nil { + return err + } else if newResp.Status != "VALID" { + return errors.New("failed to insert block") + } + return nil + default: + return errors.New("undefined node") + } +} + +func (n *ethNode) insertBlockAndSetHead(parent *types.Header, ed beacon.ExecutableDataV1) error { + if !eth2types(n.typ) { + return errors.New("invalid node type") + } + if err := n.insertBlock(ed); err != nil { + return err + } + block, err := beacon.ExecutableDataToBlock(ed) + if err != nil { + return err + } + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: block.ParentHash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: common.Hash{}, + } + switch n.typ { + case eth2NormalNode, eth2MiningNode: + if _, err := n.api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + return err + } + return nil + case eth2LightClient: + if _, err := n.lapi.ForkchoiceUpdatedV1(fcState, nil); err != nil { + return err + } + return nil + default: + return errors.New("undefined node") + } +} + +type nodeManager struct { + genesis *core.Genesis + genesisBlock *types.Block + nodes []*ethNode + enodes []*enode.Node + close chan struct{} +} + +func newNodeManager(genesis *core.Genesis) *nodeManager { + return &nodeManager{ + close: make(chan struct{}), + genesis: genesis, + genesisBlock: genesis.ToBlock(), + } +} + +func (mgr *nodeManager) createNode(typ nodetype) { + node := newNode(typ, mgr.genesis, mgr.enodes) + mgr.nodes = append(mgr.nodes, node) + mgr.enodes = append(mgr.enodes, node.enode) +} + +func (mgr *nodeManager) getNodes(typ nodetype) []*ethNode { + var ret []*ethNode + for _, node := range mgr.nodes { + if node.typ == typ { + ret = append(ret, node) + } + } + return ret +} + +func (mgr *nodeManager) startMining() { + for _, node := range append(mgr.getNodes(eth2MiningNode), mgr.getNodes(legacyMiningNode)...) { + if err := node.ethBackend.StartMining(1); err != nil { + panic(err) + } + } +} + +func (mgr *nodeManager) shutdown() { + close(mgr.close) + for _, node := range mgr.nodes { + node.stack.Close() + } +} + +func (mgr *nodeManager) run() { + if len(mgr.nodes) == 0 { + return + } + chain := mgr.nodes[0].ethBackend.BlockChain() + sink := make(chan core.ChainHeadEvent, 1024) + sub := chain.SubscribeChainHeadEvent(sink) + defer sub.Unsubscribe() + + var ( + transitioned bool + parentBlock *types.Block + waitFinalise []*types.Block + ) + timer := time.NewTimer(0) + defer timer.Stop() + <-timer.C // discard the initial tick + + // Handle the by default transition. + if transitionDifficulty.Sign() == 0 { + transitioned = true + parentBlock = mgr.genesisBlock + timer.Reset(blockInterval) + log.Info("Enable the transition by default") + } + + // Handle the block finalization. + checkFinalise := func() { + if parentBlock == nil { + return + } + if len(waitFinalise) == 0 { + return + } + oldest := waitFinalise[0] + if oldest.NumberU64() > parentBlock.NumberU64() { + return + } + distance := parentBlock.NumberU64() - oldest.NumberU64() + if int(distance) < finalizationDist { + return + } + nodes := mgr.getNodes(eth2MiningNode) + nodes = append(nodes, mgr.getNodes(eth2NormalNode)...) + nodes = append(nodes, mgr.getNodes(eth2LightClient)...) + for _, node := range nodes { + fcState := beacon.ForkchoiceStateV1{ + HeadBlockHash: oldest.Hash(), + SafeBlockHash: common.Hash{}, + FinalizedBlockHash: oldest.Hash(), + } + // TODO(rjl493456442) finalization doesn't work properly, FIX IT + _ = fcState + _ = node + //node.api.ForkchoiceUpdatedV1(fcState, nil) + } + log.Info("Finalised eth2 block", "number", oldest.NumberU64(), "hash", oldest.Hash()) + waitFinalise = waitFinalise[1:] + } + + for { + checkFinalise() + select { + case <-mgr.close: + return + + case ev := <-sink: + if transitioned { + continue + } + td := chain.GetTd(ev.Block.Hash(), ev.Block.NumberU64()) + if td.Cmp(transitionDifficulty) < 0 { + continue + } + transitioned, parentBlock = true, ev.Block + timer.Reset(blockInterval) + log.Info("Transition difficulty reached", "td", td, "target", transitionDifficulty, "number", ev.Block.NumberU64(), "hash", ev.Block.Hash()) + + case <-timer.C: + producers := mgr.getNodes(eth2MiningNode) + if len(producers) == 0 { + continue + } + hash, timestamp := parentBlock.Hash(), parentBlock.Time() + if parentBlock.NumberU64() == 0 { + timestamp = uint64(time.Now().Unix()) - uint64(blockIntervalInt) + } + ed, err := producers[0].assembleBlock(hash, timestamp) + if err != nil { + log.Error("Failed to assemble the block", "err", err) + continue + } + block, _ := beacon.ExecutableDataToBlock(*ed) + + nodes := mgr.getNodes(eth2MiningNode) + nodes = append(nodes, mgr.getNodes(eth2NormalNode)...) + nodes = append(nodes, mgr.getNodes(eth2LightClient)...) + for _, node := range nodes { + if err := node.insertBlockAndSetHead(parentBlock.Header(), *ed); err != nil { + log.Error("Failed to insert block", "type", node.typ, "err", err) + } + } + log.Info("Create and insert eth2 block", "number", ed.Number) + parentBlock = block + waitFinalise = append(waitFinalise, block) + timer.Reset(blockInterval) + } + } +} + +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + fdlimit.Raise(2048) + + // Generate a batch of accounts to seal and fund with + faucets := make([]*ecdsa.PrivateKey, 16) + for i := 0; i < len(faucets); i++ { + faucets[i], _ = crypto.GenerateKey() + } + // Pre-generate the ethash mining DAG so we don't race + ethash.MakeDataset(1, filepath.Join(os.Getenv("HOME"), ".ethash")) + + // Create an Ethash network based off of the Ropsten config + genesis := makeGenesis(faucets) + manager := newNodeManager(genesis) + defer manager.shutdown() + + manager.createNode(eth2NormalNode) + manager.createNode(eth2MiningNode) + manager.createNode(legacyMiningNode) + manager.createNode(legacyNormalNode) + manager.createNode(eth2LightClient) + + // Iterate over all the nodes and start mining + time.Sleep(3 * time.Second) + if transitionDifficulty.Sign() != 0 { + manager.startMining() + } + go manager.run() + + // Start injecting transactions from the faucets like crazy + time.Sleep(3 * time.Second) + nonces := make([]uint64, len(faucets)) + for { + // Pick a random mining node + nodes := manager.getNodes(eth2MiningNode) + + index := rand.Intn(len(faucets)) + node := nodes[index%len(nodes)] + + // Create a self transaction and inject into the pool + tx, err := types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(100000000000+rand.Int63n(65536)), nil), types.HomesteadSigner{}, faucets[index]) + if err != nil { + panic(err) + } + if err := node.ethBackend.TxPool().AddLocal(tx); err != nil { + panic(err) + } + nonces[index]++ + + // Wait if we're too saturated + if pend, _ := node.ethBackend.TxPool().Stats(); pend > 2048 { + time.Sleep(100 * time.Millisecond) + } + } +} + +// makeGenesis creates a custom Ethash genesis block based on some pre-defined +// faucet accounts. +func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis { + genesis := core.DefaultRopstenGenesisBlock() + genesis.Difficulty = params.MinimumDifficulty + genesis.GasLimit = 25000000 + + genesis.BaseFee = big.NewInt(params.InitialBaseFee) + genesis.Config = params.AllEthashProtocolChanges + genesis.Config.TerminalTotalDifficulty = transitionDifficulty + + genesis.Alloc = core.GenesisAlloc{} + for _, faucet := range faucets { + genesis.Alloc[crypto.PubkeyToAddress(faucet.PublicKey)] = core.GenesisAccount{ + Balance: new(big.Int).Exp(big.NewInt(2), big.NewInt(128), nil), + } + } + return genesis +} + +func makeFullNode(genesis *core.Genesis) (*node.Node, *eth.Ethereum, *ethcatalyst.ConsensusAPI, error) { + // Define the basic configurations for the Ethereum node + datadir, _ := os.MkdirTemp("", "") + + config := &node.Config{ + Name: "geth", + Version: params.Version, + DataDir: datadir, + P2P: p2p.Config{ + ListenAddr: "0.0.0.0:0", + NoDiscovery: true, + MaxPeers: 25, + }, + UseLightweightKDF: true, + } + // Create the node and configure a full Ethereum node on it + stack, err := node.New(config) + if err != nil { + return nil, nil, nil, err + } + econfig := ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + GPO: ethconfig.Defaults.GPO, + Ethash: ethconfig.Defaults.Ethash, + Miner: miner.Config{ + GasFloor: genesis.GasLimit * 9 / 10, + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: 10 * time.Second, // Disable the recommit + }, + LightServ: 100, + LightPeers: 10, + LightNoSyncServe: true, + } + ethBackend, err := eth.New(stack, econfig) + if err != nil { + return nil, nil, nil, err + } + _, err = les.NewLesServer(stack, ethBackend, econfig) + if err != nil { + log.Crit("Failed to create the LES server", "err", err) + } + err = stack.Start() + return stack, ethBackend, ethcatalyst.NewConsensusAPI(ethBackend), err +} + +func makeLightNode(genesis *core.Genesis) (*node.Node, *les.LightEthereum, *lescatalyst.ConsensusAPI, error) { + // Define the basic configurations for the Ethereum node + datadir, _ := os.MkdirTemp("", "") + + config := &node.Config{ + Name: "geth", + Version: params.Version, + DataDir: datadir, + P2P: p2p.Config{ + ListenAddr: "0.0.0.0:0", + NoDiscovery: true, + MaxPeers: 25, + }, + UseLightweightKDF: true, + } + // Create the node and configure a full Ethereum node on it + stack, err := node.New(config) + if err != nil { + return nil, nil, nil, err + } + lesBackend, err := les.New(stack, ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.LightSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + GPO: ethconfig.Defaults.GPO, + Ethash: ethconfig.Defaults.Ethash, + LightPeers: 10, + }) + if err != nil { + return nil, nil, nil, err + } + err = stack.Start() + return stack, lesBackend, lescatalyst.NewConsensusAPI(lesBackend), err +} + +func eth2types(typ nodetype) bool { + if typ == eth2LightClient || typ == eth2NormalNode || typ == eth2MiningNode { + return true + } + return false +} diff --git a/miner/stress_clique.go b/miner/stress/clique/main.go similarity index 62% rename from miner/stress_clique.go rename to miner/stress/clique/main.go index db44fa7b..070a6ed6 100644 --- a/miner/stress_clique.go +++ b/miner/stress/clique/main.go @@ -14,33 +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 none - // This file contains a miner stress test based on the Clique consensus engine. package main import ( "bytes" "crypto/ecdsa" - "io/ioutil" "math/big" "math/rand" "os" + "os/signal" "time" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/fdlimit" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/fdlimit" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" ) func main() { @@ -59,48 +59,51 @@ func main() { // Create a Clique network based off of the Rinkeby config genesis := makeGenesis(faucets, sealers) + // Handle interrupts. + interruptCh := make(chan os.Signal, 5) + signal.Notify(interruptCh, os.Interrupt) + var ( - nodes []*node.Node + stacks []*node.Node + nodes []*eth.Ethereum enodes []*enode.Node ) for _, sealer := range sealers { // Start the node and wait until it's up - node, err := makeSealer(genesis) + stack, ethBackend, err := makeSealer(genesis) if err != nil { panic(err) } - defer node.Close() + defer stack.Close() - for node.Server().NodeInfo().Ports.Listener == 0 { + for stack.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) } - // Connect the node to al the previous ones + // Connect the node to all the previous ones for _, n := range enodes { - node.Server().AddPeer(n) + stack.Server().AddPeer(n) } - // Start tracking the node and it's enode - nodes = append(nodes, node) - enodes = append(enodes, node.Server().Self()) + // Start tracking the node and its enode + stacks = append(stacks, stack) + nodes = append(nodes, ethBackend) + enodes = append(enodes, stack.Server().Self()) // Inject the signer key and start sealing with it - store := node.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) - signer, err := store.ImportECDSA(sealer, "") + ks := keystore.NewKeyStore(stack.KeyStoreDir(), keystore.LightScryptN, keystore.LightScryptP) + signer, err := ks.ImportECDSA(sealer, "") if err != nil { panic(err) } - if err := store.Unlock(signer, ""); err != nil { + if err := ks.Unlock(signer, ""); err != nil { panic(err) } + stack.AccountManager().AddBackend(ks) } - // Iterate over all the nodes and start signing with them - time.Sleep(3 * time.Second) + // Iterate over all the nodes and start signing on them + time.Sleep(3 * time.Second) for _, node := range nodes { - var ethereum *eth.Ethereum - if err := node.Service(ðereum); err != nil { - panic(err) - } - if err := ethereum.StartMining(1); err != nil { + if err := node.StartMining(1); err != nil { panic(err) } } @@ -109,25 +112,32 @@ func main() { // Start injecting transactions from the faucet like crazy nonces := make([]uint64, len(faucets)) for { + // Stop when interrupted. + select { + case <-interruptCh: + for _, node := range stacks { + node.Close() + } + return + default: + } + + // Pick a random signer node index := rand.Intn(len(faucets)) + backend := nodes[index%len(nodes)] - // Fetch the accessor for the relevant signer - var ethereum *eth.Ethereum - if err := nodes[index%len(nodes)].Service(ðereum); err != nil { - panic(err) - } // Create a self transaction and inject into the pool tx, err := types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(100000000000), nil), types.HomesteadSigner{}, faucets[index]) if err != nil { panic(err) } - if err := ethereum.TxPool().AddLocal(tx); err != nil { + if err := backend.TxPool().AddLocal(tx); err != nil { panic(err) } nonces[index]++ // Wait if we're too saturated - if pend, _ := ethereum.TxPool().Stats(); pend > 2048 { + if pend, _ := backend.TxPool().Stats(); pend > 2048 { time.Sleep(100 * time.Millisecond) } } @@ -170,9 +180,9 @@ func makeGenesis(faucets []*ecdsa.PrivateKey, sealers []*ecdsa.PrivateKey) *core return genesis } -func makeSealer(genesis *core.Genesis) (*node.Node, error) { +func makeSealer(genesis *core.Genesis) (*node.Node, *eth.Ethereum, error) { // Define the basic configurations for the Ethereum node - datadir, _ := ioutil.TempDir("", "") + datadir, _ := os.MkdirTemp("", "") config := &node.Config{ Name: "geth", @@ -183,32 +193,31 @@ func makeSealer(genesis *core.Genesis) (*node.Node, error) { NoDiscovery: true, MaxPeers: 25, }, - NoUSB: true, } // Start the node and configure a full Ethereum node on it stack, err := node.New(config) if err != nil { - return nil, err + return nil, nil, err } - if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return eth.New(ctx, ð.Config{ - Genesis: genesis, - NetworkId: genesis.Config.ChainID.Uint64(), - SyncMode: downloader.FullSync, - DatabaseCache: 256, - DatabaseHandles: 256, - TxPool: core.DefaultTxPoolConfig, - GPO: eth.DefaultConfig.GPO, - Miner: Config{ - GasFloor: genesis.GasLimit * 9 / 10, - GasCeil: genesis.GasLimit * 11 / 10, - GasPrice: big.NewInt(1), - Recommit: time.Second, - }, - }) - }); err != nil { - return nil, err + // Create and register the backend + ethBackend, err := eth.New(stack, ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + GPO: ethconfig.Defaults.GPO, + Miner: miner.Config{ + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: time.Second, + }, + }) + if err != nil { + return nil, nil, err } - // Start the node and return if successful - return stack, stack.Start() + + err = stack.Start() + return stack, ethBackend, err } diff --git a/miner/stress_ethash.go b/miner/stress/ethash/main.go similarity index 55% rename from miner/stress_ethash.go rename to miner/stress/ethash/main.go index 4364d056..56a6e581 100644 --- a/miner/stress_ethash.go +++ b/miner/stress/ethash/main.go @@ -14,34 +14,32 @@ // 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 file contains a miner stress test based on the Ethash consensus engine. package main import ( "crypto/ecdsa" - "io/ioutil" "math/big" "math/rand" "os" - "path/filepath" + "os/signal" "time" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/fdlimit" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/fdlimit" + "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/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" ) func main() { @@ -54,49 +52,45 @@ func main() { faucets[i], _ = crypto.GenerateKey() } // Pre-generate the ethash mining DAG so we don't race - ethash.MakeDataset(1, filepath.Join(os.Getenv("HOME"), ".ethash")) + ethash.MakeDataset(1, ethconfig.Defaults.Ethash.DatasetDir) // Create an Ethash network based off of the Ropsten config genesis := makeGenesis(faucets) + // Handle interrupts. + interruptCh := make(chan os.Signal, 5) + signal.Notify(interruptCh, os.Interrupt) + var ( - nodes []*node.Node + stacks []*node.Node + nodes []*eth.Ethereum enodes []*enode.Node ) for i := 0; i < 4; i++ { // Start the node and wait until it's up - node, err := makeMiner(genesis) + stack, ethBackend, err := makeMiner(genesis) if err != nil { panic(err) } - defer node.Close() + defer stack.Close() - for node.Server().NodeInfo().Ports.Listener == 0 { + for stack.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) } - // Connect the node to al the previous ones + // Connect the node to all the previous ones for _, n := range enodes { - node.Server().AddPeer(n) - } - // Start tracking the node and it's enode - nodes = append(nodes, node) - enodes = append(enodes, node.Server().Self()) - - // Inject the signer key and start sealing with it - store := node.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) - if _, err := store.NewAccount(""); err != nil { - panic(err) + stack.Server().AddPeer(n) } + // Start tracking the node and its enode + stacks = append(stacks, stack) + nodes = append(nodes, ethBackend) + enodes = append(enodes, stack.Server().Self()) } - // Iterate over all the nodes and start signing with them - time.Sleep(3 * time.Second) + // Iterate over all the nodes and start mining + time.Sleep(3 * time.Second) for _, node := range nodes { - var ethereum *eth.Ethereum - if err := node.Service(ðereum); err != nil { - panic(err) - } - if err := ethereum.StartMining(1); err != nil { + if err := node.StartMining(1); err != nil { panic(err) } } @@ -105,25 +99,32 @@ func main() { // Start injecting transactions from the faucets like crazy nonces := make([]uint64, len(faucets)) for { + // Stop when interrupted. + select { + case <-interruptCh: + for _, node := range stacks { + node.Close() + } + return + default: + } + + // Pick a random mining node index := rand.Intn(len(faucets)) + backend := nodes[index%len(nodes)] - // Fetch the accessor for the relevant signer - var ethereum *eth.Ethereum - if err := nodes[index%len(nodes)].Service(ðereum); err != nil { - panic(err) - } // Create a self transaction and inject into the pool tx, err := types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(100000000000+rand.Int63n(65536)), nil), types.HomesteadSigner{}, faucets[index]) if err != nil { panic(err) } - if err := ethereum.TxPool().AddLocal(tx); err != nil { + if err := backend.TxPool().AddLocal(tx); err != nil { panic(err) } nonces[index]++ // Wait if we're too saturated - if pend, _ := ethereum.TxPool().Stats(); pend > 2048 { + if pend, _ := backend.TxPool().Stats(); pend > 2048 { time.Sleep(100 * time.Millisecond) } } @@ -132,7 +133,7 @@ func main() { // makeGenesis creates a custom Ethash genesis block based on some pre-defined // faucet accounts. func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis { - genesis := core.DefaultTestnetGenesisBlock() + genesis := core.DefaultRopstenGenesisBlock() genesis.Difficulty = params.MinimumDifficulty genesis.GasLimit = 25000000 @@ -148,9 +149,9 @@ func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis { return genesis } -func makeMiner(genesis *core.Genesis) (*node.Node, error) { +func makeMiner(genesis *core.Genesis) (*node.Node, *eth.Ethereum, error) { // Define the basic configurations for the Ethereum node - datadir, _ := ioutil.TempDir("", "") + datadir, _ := os.MkdirTemp("", "") config := &node.Config{ Name: "geth", @@ -161,34 +162,33 @@ func makeMiner(genesis *core.Genesis) (*node.Node, error) { NoDiscovery: true, MaxPeers: 25, }, - NoUSB: true, UseLightweightKDF: true, } - // Start the node and configure a full Ethereum node on it + // Create the node and configure a full Ethereum node on it stack, err := node.New(config) if err != nil { - return nil, err + return nil, nil, err } - if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return eth.New(ctx, ð.Config{ - Genesis: genesis, - NetworkId: genesis.Config.ChainID.Uint64(), - SyncMode: downloader.FullSync, - DatabaseCache: 256, - DatabaseHandles: 256, - TxPool: core.DefaultTxPoolConfig, - GPO: eth.DefaultConfig.GPO, - Ethash: eth.DefaultConfig.Ethash, - Miner: Config{ - GasFloor: genesis.GasLimit * 9 / 10, - GasCeil: genesis.GasLimit * 11 / 10, - GasPrice: big.NewInt(1), - Recommit: time.Second, - }, - }) - }); err != nil { - return nil, err + ethBackend, err := eth.New(stack, ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + GPO: ethconfig.Defaults.GPO, + Ethash: ethconfig.Defaults.Ethash, + Miner: miner.Config{ + Etherbase: common.Address{1}, + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: time.Second, + }, + }) + if err != nil { + return nil, nil, err } - // Start the node and return if successful - return stack, stack.Start() + + err = stack.Start() + return stack, ethBackend, err } diff --git a/miner/unconfirmed.go b/miner/unconfirmed.go index 0f3a6177..0489f1ea 100644 --- a/miner/unconfirmed.go +++ b/miner/unconfirmed.go @@ -20,9 +20,9 @@ import ( "container/ring" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" ) // chainRetriever is used by the unconfirmed block set to verify whether a previously @@ -50,7 +50,7 @@ type unconfirmedBlocks struct { chain chainRetriever // Blockchain to verify canonical status through depth uint // Depth after which to discard previous blocks blocks *ring.Ring // Block infos to allow canonical chain cross checks - lock sync.RWMutex // Protects the fields from concurrent access + lock sync.Mutex // Protects the fields from concurrent access } // newUnconfirmedBlocks returns new data structure to track currently unconfirmed blocks. diff --git a/miner/unconfirmed_test.go b/miner/unconfirmed_test.go index 97d8951b..60958f65 100644 --- a/miner/unconfirmed_test.go +++ b/miner/unconfirmed_test.go @@ -19,8 +19,7 @@ package miner import ( "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) // noopChainRetriever is an implementation of headerRetriever that always @@ -43,7 +42,7 @@ func TestUnconfirmedInsertBounds(t *testing.T) { for depth := uint64(0); depth < 2*uint64(limit); depth++ { // Insert multiple blocks for the same level just to stress it for i := 0; i < int(depth); i++ { - pool.Insert(depth, common.Hash([32]byte{byte(depth), byte(i)})) + pool.Insert(depth, [32]byte{byte(depth), byte(i)}) } // Validate that no blocks below the depth allowance are left in pool.blocks.Do(func(block interface{}) { @@ -63,7 +62,7 @@ func TestUnconfirmedShifts(t *testing.T) { pool := newUnconfirmedBlocks(new(noopChainRetriever), limit) for depth := start; depth < start+uint64(limit); depth++ { - pool.Insert(depth, common.Hash([32]byte{byte(depth)})) + pool.Insert(depth, [32]byte{byte(depth)}) } // Try to shift below the limit and ensure no blocks are dropped pool.Shift(start + uint64(limit) - 1) @@ -75,7 +74,7 @@ func TestUnconfirmedShifts(t *testing.T) { if n := pool.blocks.Len(); n != int(limit)/2 { t.Errorf("unconfirmed count mismatch: have %d, want %d", n, limit/2) } - // Try to shift all the remaining blocks out and verify emptyness + // Try to shift all the remaining blocks out and verify emptiness pool.Shift(start + 2*uint64(limit)) if n := pool.blocks.Len(); n != 0 { t.Errorf("unconfirmed count mismatch: have %d, want %d", n, 0) diff --git a/miner/worker.go b/miner/worker.go index 9db3a9ca..93fb6288 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -17,23 +17,24 @@ package miner import ( - "bytes" "errors" + "fmt" "math/big" "sync" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/misc" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/params" mapset "github.com/deckarep/golang-set" + "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/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" ) const ( @@ -53,14 +54,14 @@ const ( // resubmitAdjustChanSize is the size of resubmitting interval adjustment channel. resubmitAdjustChanSize = 10 - // miningLogAtDepth is the number of confirmations before logging successful mining. - miningLogAtDepth = 7 + // sealingLogAtDepth is the number of confirmations before logging successful sealing. + sealingLogAtDepth = 7 - // minRecommitInterval is the minimal time interval to recreate the mining block with + // minRecommitInterval is the minimal time interval to recreate the sealing block with // any newly arrived transactions. minRecommitInterval = 1 * time.Second - // maxRecommitInterval is the maximum time interval to recreate the mining block with + // maxRecommitInterval is the maximum time interval to recreate the sealing block with // any newly arrived transactions. maxRecommitInterval = 15 * time.Second @@ -76,20 +77,73 @@ const ( staleThreshold = 7 ) -// environment is the worker's current environment and holds all of the current state information. +var ( + errBlockInterruptedByNewHead = errors.New("new head arrived while building block") + errBlockInterruptedByRecommit = errors.New("recommit interrupt while building block") +) + +// environment is the worker's current environment and holds all +// information of the sealing block generation. type environment struct { signer types.Signer state *state.StateDB // apply state changes here ancestors mapset.Set // ancestor set (used for checking uncle parent validity) family mapset.Set // family set (used for checking uncle invalidity) - uncles mapset.Set // uncle set tcount int // tx count in cycle gasPool *core.GasPool // available gas used to pack transactions + coinbase common.Address header *types.Header txs []*types.Transaction receipts []*types.Receipt + uncles map[common.Hash]*types.Header +} + +// copy creates a deep copy of environment. +func (env *environment) copy() *environment { + cpy := &environment{ + signer: env.signer, + state: env.state.Copy(), + ancestors: env.ancestors.Clone(), + family: env.family.Clone(), + tcount: env.tcount, + coinbase: env.coinbase, + header: types.CopyHeader(env.header), + receipts: copyReceipts(env.receipts), + } + if env.gasPool != nil { + gasPool := *env.gasPool + cpy.gasPool = &gasPool + } + // The content of txs and uncles are immutable, unnecessary + // to do the expensive deep copy for them. + cpy.txs = make([]*types.Transaction, len(env.txs)) + copy(cpy.txs, env.txs) + cpy.uncles = make(map[common.Hash]*types.Header) + for hash, uncle := range env.uncles { + cpy.uncles[hash] = uncle + } + return cpy +} + +// unclelist returns the contained uncles as the list format. +func (env *environment) unclelist() []*types.Header { + var uncles []*types.Header + for _, uncle := range env.uncles { + uncles = append(uncles, uncle) + } + return uncles +} + +// discard terminates the background prefetcher go-routine. It should +// always be called for all created environment instances otherwise +// the go-routine leak can happen. +func (env *environment) discard() { + if env.state == nil { + return + } + env.state.StopPrefetcher() } // task contains all information for consensus engine sealing and result submitting. @@ -113,6 +167,13 @@ type newWorkReq struct { timestamp int64 } +// getWorkReq represents a request for getting a new sealing work with provided parameters. +type getWorkReq struct { + params *generateParams + result chan *types.Block // non-blocking channel + err chan error +} + // intervalAdjust represents a resubmitting interval adjustment. type intervalAdjust struct { ratio float64 @@ -128,6 +189,9 @@ type worker struct { eth Backend chain *core.BlockChain + // Feeds + pendingLogsFeed event.Feed + // Subscriptions mux *event.TypeMux txsCh chan core.NewTxsEvent @@ -139,6 +203,7 @@ type worker struct { // Channels newWorkCh chan *newWorkReq + getWorkCh chan *getWorkReq taskCh chan *task resultCh chan *types.Block startCh chan struct{} @@ -146,6 +211,8 @@ type worker struct { resubmitIntervalCh chan time.Duration resubmitAdjustCh chan *intervalAdjust + wg sync.WaitGroup + current *environment // An environment for current running cycle. localUncles map[common.Hash]*types.Block // A set of side blocks generated locally as the possible uncle blocks. remoteUncles map[common.Hash]*types.Block // A set of side blocks as the possible uncle blocks. @@ -158,16 +225,24 @@ type worker struct { pendingMu sync.RWMutex pendingTasks map[common.Hash]*task - snapshotMu sync.RWMutex // The lock used to protect the block snapshot and state snapshot - snapshotBlock *types.Block - snapshotState *state.StateDB + snapshotMu sync.RWMutex // The lock used to protect the snapshots below + snapshotBlock *types.Block + snapshotReceipts types.Receipts + snapshotState *state.StateDB // atomic status counters running int32 // The indicator whether the consensus engine is running or not. newTxs int32 // New arrival transaction count since last sealing work submitting. + // noempty is the flag used to control whether the feature of pre-seal empty + // block is enabled. The default value is false(pre-seal is enabled by default). + // But in some special scenario the consensus engine will seal blocks instantaneously, + // in this case this feature will add all empty blocks into canonical chain + // non-stop and no real transaction will be included. + noempty uint32 + // External functions - isLocalBlock func(block *types.Block) bool // Function used to determine whether the specified block is mined by local miner. + isLocalBlock func(header *types.Header) bool // Function used to determine whether the specified block is mined by local miner. // Test hooks newTaskHook func(*task) // Method to call upon receiving a new sealing task. @@ -176,7 +251,7 @@ type worker struct { resubmitHook func(time.Duration, time.Duration) // Method to call upon updating resubmitting interval. } -func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus.Engine, eth Backend, mux *event.TypeMux, isLocalBlock func(*types.Block) bool) *worker { +func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus.Engine, eth Backend, mux *event.TypeMux, isLocalBlock func(header *types.Header) bool, init bool) *worker { worker := &worker{ config: config, chainConfig: chainConfig, @@ -187,12 +262,13 @@ func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus isLocalBlock: isLocalBlock, localUncles: make(map[common.Hash]*types.Block), remoteUncles: make(map[common.Hash]*types.Block), - unconfirmed: newUnconfirmedBlocks(eth.BlockChain(), miningLogAtDepth), + unconfirmed: newUnconfirmedBlocks(eth.BlockChain(), sealingLogAtDepth), pendingTasks: make(map[common.Hash]*task), txsCh: make(chan core.NewTxsEvent, txChanSize), chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), chainSideCh: make(chan core.ChainSideEvent, chainSideChanSize), newWorkCh: make(chan *newWorkReq), + getWorkCh: make(chan *getWorkReq), taskCh: make(chan *task), resultCh: make(chan *types.Block, resultQueueSize), exitCh: make(chan struct{}), @@ -213,14 +289,16 @@ func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus recommit = minRecommitInterval } + worker.wg.Add(4) go worker.mainLoop() go worker.newWorkLoop(recommit) go worker.resultLoop() go worker.taskLoop() // Submit first work to initialize pending state. - worker.startCh <- struct{}{} - + if init { + worker.startCh <- struct{}{} + } return worker } @@ -231,6 +309,12 @@ func (w *worker) setEtherbase(addr common.Address) { w.coinbase = addr } +func (w *worker) setGasCeil(ceil uint64) { + w.mu.Lock() + defer w.mu.Unlock() + w.config.GasCeil = ceil +} + // setExtra sets the content used to initialize the block extra field. func (w *worker) setExtra(extra []byte) { w.mu.Lock() @@ -240,7 +324,20 @@ func (w *worker) setExtra(extra []byte) { // setRecommitInterval updates the interval for miner sealing work recommitting. func (w *worker) setRecommitInterval(interval time.Duration) { - w.resubmitIntervalCh <- interval + select { + case w.resubmitIntervalCh <- interval: + case <-w.exitCh: + } +} + +// disablePreseal disables pre-sealing feature +func (w *worker) disablePreseal() { + atomic.StoreUint32(&w.noempty, 1) +} + +// enablePreseal enables pre-sealing feature +func (w *worker) enablePreseal() { + atomic.StoreUint32(&w.noempty, 0) } // pending returns the pending state and corresponding block. @@ -262,6 +359,14 @@ func (w *worker) pendingBlock() *types.Block { return w.snapshotBlock } +// pendingBlockAndReceipts returns pending block and corresponding receipts. +func (w *worker) pendingBlockAndReceipts() (*types.Block, types.Receipts) { + // return a snapshot to avoid contention on currentMu mutex + w.snapshotMu.RLock() + defer w.snapshotMu.RUnlock() + return w.snapshotBlock, w.snapshotReceipts +} + // start sets the running status as 1 and triggers new work submitting. func (w *worker) start() { atomic.StoreInt32(&w.running, 1) @@ -281,18 +386,44 @@ func (w *worker) isRunning() bool { // close terminates all background threads maintained by the worker. // Note the worker does not support being closed multiple times. func (w *worker) close() { + atomic.StoreInt32(&w.running, 0) close(w.exitCh) + w.wg.Wait() +} + +// recalcRecommit recalculates the resubmitting interval upon feedback. +func recalcRecommit(minRecommit, prev time.Duration, target float64, inc bool) time.Duration { + var ( + prevF = float64(prev.Nanoseconds()) + next float64 + ) + if inc { + next = prevF*(1-intervalAdjustRatio) + intervalAdjustRatio*(target+intervalAdjustBias) + max := float64(maxRecommitInterval.Nanoseconds()) + if next > max { + next = max + } + } else { + next = prevF*(1-intervalAdjustRatio) + intervalAdjustRatio*(target-intervalAdjustBias) + min := float64(minRecommit.Nanoseconds()) + if next < min { + next = min + } + } + return time.Duration(int64(next)) } -// newWorkLoop is a standalone goroutine to submit new mining work upon received events. +// newWorkLoop is a standalone goroutine to submit new sealing work upon received events. func (w *worker) newWorkLoop(recommit time.Duration) { + defer w.wg.Done() var ( interrupt *int32 minRecommit = recommit // minimal resubmit interval specified by user. - timestamp int64 // timestamp for each round of mining. + timestamp int64 // timestamp for each round of sealing. ) timer := time.NewTimer(0) + defer timer.Stop() <-timer.C // discard the initial tick // commit aborts in-flight transaction execution with given signal and resubmits a new one. @@ -301,31 +432,14 @@ func (w *worker) newWorkLoop(recommit time.Duration) { atomic.StoreInt32(interrupt, s) } interrupt = new(int32) - w.newWorkCh <- &newWorkReq{interrupt: interrupt, noempty: noempty, timestamp: timestamp} + select { + case w.newWorkCh <- &newWorkReq{interrupt: interrupt, noempty: noempty, timestamp: timestamp}: + case <-w.exitCh: + return + } timer.Reset(recommit) atomic.StoreInt32(&w.newTxs, 0) } - // recalcRecommit recalculates the resubmitting interval upon feedback. - recalcRecommit := func(target float64, inc bool) { - var ( - prev = float64(recommit.Nanoseconds()) - next float64 - ) - if inc { - next = prev*(1-intervalAdjustRatio) + intervalAdjustRatio*(target+intervalAdjustBias) - // Recap if interval is larger than the maximum time interval - if next > float64(maxRecommitInterval.Nanoseconds()) { - next = float64(maxRecommitInterval.Nanoseconds()) - } - } else { - next = prev*(1-intervalAdjustRatio) + intervalAdjustRatio*(target-intervalAdjustBias) - // Recap if interval is less than the user specified minimum - if next < float64(minRecommit.Nanoseconds()) { - next = float64(minRecommit.Nanoseconds()) - } - } - recommit = time.Duration(int64(next)) - } // clearPending cleans the stale pending tasks. clearPending := func(number uint64) { w.pendingMu.Lock() @@ -350,7 +464,7 @@ func (w *worker) newWorkLoop(recommit time.Duration) { commit(false, commitInterruptNewHead) case <-timer.C: - // If mining is running resubmit a new work cycle periodically to pull in + // If sealing is running resubmit a new work cycle periodically to pull in // higher priced transactions. Disable this overhead for pending blocks. if w.isRunning() && (w.chainConfig.Clique == nil || w.chainConfig.Clique.Period > 0) { // Short circuit if no new transaction arrives. @@ -378,11 +492,12 @@ func (w *worker) newWorkLoop(recommit time.Duration) { // Adjust resubmit interval by feedback. if adjust.inc { before := recommit - recalcRecommit(float64(recommit.Nanoseconds())/adjust.ratio, true) + target := float64(recommit.Nanoseconds()) / adjust.ratio + recommit = recalcRecommit(minRecommit, recommit, target, true) log.Trace("Increase miner recommit interval", "from", before, "to", recommit) } else { before := recommit - recalcRecommit(float64(minRecommit.Nanoseconds()), false) + recommit = recalcRecommit(minRecommit, recommit, float64(minRecommit.Nanoseconds()), false) log.Trace("Decrease miner recommit interval", "from", before, "to", recommit) } @@ -396,17 +511,37 @@ func (w *worker) newWorkLoop(recommit time.Duration) { } } -// mainLoop is a standalone goroutine to regenerate the sealing task based on the received event. +// mainLoop is responsible for generating and submitting sealing work based on +// the received event. It can support two modes: automatically generate task and +// submit it or return task according to given parameters for various proposes. func (w *worker) mainLoop() { + defer w.wg.Done() defer w.txsSub.Unsubscribe() defer w.chainHeadSub.Unsubscribe() defer w.chainSideSub.Unsubscribe() + defer func() { + if w.current != nil { + w.current.discard() + } + }() + + cleanTicker := time.NewTicker(time.Second * 10) + defer cleanTicker.Stop() for { select { case req := <-w.newWorkCh: - w.commitNewWork(req.interrupt, req.noempty, req.timestamp) + w.commitWork(req.interrupt, req.noempty, req.timestamp) + case req := <-w.getWorkCh: + block, err := w.generateWork(req.params) + if err != nil { + req.err <- err + req.result <- nil + } else { + req.err <- nil + req.result <- block + } case ev := <-w.chainSideCh: // Short circuit for duplicate side blocks if _, exist := w.localUncles[ev.Block.Hash()]; exist { @@ -416,69 +551,65 @@ func (w *worker) mainLoop() { continue } // Add side block to possible uncle block set depending on the author. - if w.isLocalBlock != nil && w.isLocalBlock(ev.Block) { + if w.isLocalBlock != nil && w.isLocalBlock(ev.Block.Header()) { w.localUncles[ev.Block.Hash()] = ev.Block } else { w.remoteUncles[ev.Block.Hash()] = ev.Block } - // If our mining block contains less than 2 uncle blocks, - // add the new uncle block if valid and regenerate a mining block. - if w.isRunning() && w.current != nil && w.current.uncles.Cardinality() < 2 { + // If our sealing block contains less than 2 uncle blocks, + // add the new uncle block if valid and regenerate a new + // sealing block for higher profit. + if w.isRunning() && w.current != nil && len(w.current.uncles) < 2 { start := time.Now() if err := w.commitUncle(w.current, ev.Block.Header()); err == nil { - var uncles []*types.Header - w.current.uncles.Each(func(item interface{}) bool { - hash, ok := item.(common.Hash) - if !ok { - return false - } - uncle, exist := w.localUncles[hash] - if !exist { - uncle, exist = w.remoteUncles[hash] - } - if !exist { - return false - } - uncles = append(uncles, uncle.Header()) - return false - }) - w.commit(uncles, nil, true, start) + w.commit(w.current.copy(), nil, true, start) + } + } + + case <-cleanTicker.C: + chainHead := w.chain.CurrentBlock() + for hash, uncle := range w.localUncles { + if uncle.NumberU64()+staleThreshold <= chainHead.NumberU64() { + delete(w.localUncles, hash) + } + } + for hash, uncle := range w.remoteUncles { + if uncle.NumberU64()+staleThreshold <= chainHead.NumberU64() { + delete(w.remoteUncles, hash) } } case ev := <-w.txsCh: - // Apply transactions to the pending state if we're not mining. + // Apply transactions to the pending state if we're not sealing // // Note all transactions received may not be continuous with transactions - // already included in the current mining block. These transactions will + // already included in the current sealing 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() - txs := make(map[common.Address]types.Transactions) for _, tx := range ev.Txs { acc, _ := types.Sender(w.current.signer, tx) txs[acc] = append(txs[acc], tx) } - txset := types.NewTransactionsByPriceAndNonce(w.current.signer, txs) + txset := types.NewTransactionsByPriceAndNonce(w.current.signer, txs, w.current.header.BaseFee) tcount := w.current.tcount - w.commitTransactions(txset, coinbase, nil) - // Only update the snapshot if any new transactons were added + w.commitTransactions(w.current, txset, nil) + + // Only update the snapshot if any new transactions were added // to the pending block if tcount != w.current.tcount { - w.updateSnapshot() + w.updateSnapshot(w.current) } } else { - // If clique is running in dev mode(period is 0), disable - // advance sealing here. + // Special case, if the consensus engine is 0 period clique(dev mode), + // submit sealing work here since all empty submission will be rejected + // by clique. Of course the advance sealing(empty submission) is disabled. if w.chainConfig.Clique != nil && w.chainConfig.Clique.Period == 0 { - w.commitNewWork(nil, true, time.Now().Unix()) + w.commitWork(nil, true, time.Now().Unix()) } } atomic.AddInt32(&w.newTxs, int32(len(ev.Txs))) @@ -499,6 +630,7 @@ func (w *worker) mainLoop() { // taskLoop is a standalone goroutine to fetch sealing task from the generator and // push them to consensus engine. func (w *worker) taskLoop() { + defer w.wg.Done() var ( stopCh chan struct{} prev common.Hash @@ -530,11 +662,14 @@ func (w *worker) taskLoop() { continue } w.pendingMu.Lock() - w.pendingTasks[w.engine.SealHash(task.block.Header())] = task + w.pendingTasks[sealHash] = task w.pendingMu.Unlock() if err := w.engine.Seal(w.chain, task.block, w.resultCh, stopCh); err != nil { log.Warn("Block sealing failed", "err", err) + w.pendingMu.Lock() + delete(w.pendingTasks, sealHash) + w.pendingMu.Unlock() } case <-w.exitCh: interrupt() @@ -546,6 +681,7 @@ func (w *worker) taskLoop() { // resultLoop is a standalone goroutine to handle sealing result submitting // and flush relative data to the database. func (w *worker) resultLoop() { + defer w.wg.Done() for { select { case block := <-w.resultCh: @@ -573,23 +709,29 @@ func (w *worker) resultLoop() { receipts = make([]*types.Receipt, len(task.receipts)) logs []*types.Log ) - for i, receipt := range task.receipts { + for i, taskReceipt := range task.receipts { + receipt := new(types.Receipt) + receipts[i] = receipt + *receipt = *taskReceipt + // 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 // receipt/log of individual transactions were created. - for _, log := range receipt.Logs { + receipt.Logs = make([]*types.Log, len(taskReceipt.Logs)) + for i, taskLog := range taskReceipt.Logs { + log := new(types.Log) + receipt.Logs[i] = log + *log = *taskLog log.BlockHash = hash } logs = append(logs, receipt.Logs...) } // Commit block and state to database. - stat, err := w.chain.WriteBlockWithState(block, receipts, task.state) + _, err := w.chain.WriteBlockAndSetHead(block, receipts, logs, task.state, true) if err != nil { log.Error("Failed writing block to chain", "err", err) continue @@ -597,26 +739,9 @@ func (w *worker) resultLoop() { log.Info("Successfully sealed new block", "number", block.Number(), "sealhash", sealhash, "hash", hash, "elapsed", common.PrettyDuration(time.Since(task.createdAt))) - /* - csvFile, _ := os.OpenFile("elapseTime.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) - - wr := csv.NewWriter(csvFile) - wr.Write([]string{block.Number().String(), time.Since(task.createdAt).String()}) - wr.Flush() - */ // Broadcast the block and announce chain insertion event w.mux.Post(core.NewMinedBlockEvent{Block: block}) - var events []interface{} - switch stat { - case core.CanonStatTy: - events = append(events, core.ChainEvent{Block: block, Hash: block.Hash(), Logs: logs}) - events = append(events, core.ChainHeadEvent{Block: block}) - case core.SideStatTy: - events = append(events, core.ChainSideEvent{Block: block}) - } - w.chain.PostChainEvents(events, logs) - // Insert the block into the set of pending ones to resultLoop for confirmations w.unconfirmed.Insert(block.NumberU64(), block.Hash()) @@ -626,21 +751,26 @@ func (w *worker) resultLoop() { } } -// makeCurrent creates a new environment for the current cycle. -func (w *worker) makeCurrent(parent *types.Block, header *types.Header) error { +// makeEnv creates a new environment for the sealing block. +func (w *worker) makeEnv(parent *types.Block, header *types.Header, coinbase common.Address) (*environment, error) { + // Retrieve the parent state to execute on top and start a prefetcher for + // the miner to speed block sealing up a bit. state, err := w.chain.StateAt(parent.Root()) if err != nil { - return err + return nil, err } + state.StartPrefetcher("miner") + + // Note the passed coinbase may be different with header.Coinbase. env := &environment{ - signer: types.NewEIP155Signer(w.chainConfig.ChainID), + signer: types.MakeSigner(w.chainConfig, header.Number), state: state, + coinbase: coinbase, ancestors: mapset.NewSet(), family: mapset.NewSet(), - uncles: mapset.NewSet(), header: header, + uncles: make(map[common.Hash]*types.Header), } - // when 08 is processed ancestors contain 07 (quick block) for _, ancestor := range w.chain.GetBlocksFromHash(parent.Hash(), 7) { for _, uncle := range ancestor.Uncles() { @@ -649,17 +779,18 @@ func (w *worker) makeCurrent(parent *types.Block, header *types.Header) error { env.family.Add(ancestor.Hash()) env.ancestors.Add(ancestor.Hash()) } - // Keep track of transactions which return errors so they can be removed env.tcount = 0 - w.current = env - return nil + return env, nil } // commitUncle adds the given block to uncle block set, returns error if failed to add. func (w *worker) commitUncle(env *environment, uncle *types.Header) error { + if w.isTTDReached(env.header) { + return errors.New("ignore uncle for beacon block") + } hash := uncle.Hash() - if env.uncles.Contains(hash) { + if _, exist := env.uncles[hash]; exist { return errors.New("uncle not unique") } if env.header.ParentHash == uncle.ParentHash { @@ -671,80 +802,58 @@ func (w *worker) commitUncle(env *environment, uncle *types.Header) error { if env.family.Contains(hash) { return errors.New("uncle already included") } - env.uncles.Add(uncle.Hash()) + env.uncles[hash] = uncle return nil } -// updateSnapshot updates pending snapshot block and state. -// Note this function assumes the current variable is thread safe. -func (w *worker) updateSnapshot() { +// updateSnapshot updates pending snapshot block, receipts and state. +func (w *worker) updateSnapshot(env *environment) { w.snapshotMu.Lock() defer w.snapshotMu.Unlock() - var uncles []*types.Header - w.current.uncles.Each(func(item interface{}) bool { - hash, ok := item.(common.Hash) - if !ok { - return false - } - uncle, exist := w.localUncles[hash] - if !exist { - uncle, exist = w.remoteUncles[hash] - } - if !exist { - return false - } - uncles = append(uncles, uncle.Header()) - return false - }) - w.snapshotBlock = types.NewBlock( - w.current.header, - w.current.txs, - uncles, - w.current.receipts, + env.header, + env.txs, + env.unclelist(), + env.receipts, + trie.NewStackTrie(nil), ) - - w.snapshotState = w.current.state.Copy() + w.snapshotReceipts = copyReceipts(env.receipts) + w.snapshotState = env.state.Copy() } -func (w *worker) commitTransaction(tx *types.Transaction, coinbase common.Address) ([]*types.Log, error) { - snap := w.current.state.Snapshot() +func (w *worker) commitTransaction(env *environment, tx *types.Transaction) ([]*types.Log, error) { + snap := env.state.Snapshot() - receipt, _, err := core.ApplyTransaction(w.chainConfig, w.chain, &coinbase, w.current.gasPool, w.current.state, w.current.header, tx, &w.current.header.GasUsed, *w.chain.GetVMConfig()) + receipt, err := core.ApplyTransaction(w.chainConfig, w.chain, &env.coinbase, env.gasPool, env.state, env.header, tx, &env.header.GasUsed, *w.chain.GetVMConfig()) if err != nil { - w.current.state.RevertToSnapshot(snap) + env.state.RevertToSnapshot(snap) return nil, err } - w.current.txs = append(w.current.txs, tx) - w.current.receipts = append(w.current.receipts, receipt) + env.txs = append(env.txs, tx) + env.receipts = append(env.receipts, receipt) return receipt.Logs, nil } -func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coinbase common.Address, interrupt *int32) bool { - // Short circuit if current is nil - if w.current == nil { - return true - } - - if w.current.gasPool == nil { - w.current.gasPool = new(core.GasPool).AddGas(w.current.header.GasLimit) +func (w *worker) commitTransactions(env *environment, txs *types.TransactionsByPriceAndNonce, interrupt *int32) error { + gasLimit := env.header.GasLimit + if env.gasPool == nil { + env.gasPool = new(core.GasPool).AddGas(gasLimit) } - var coalescedLogs []*types.Log for { // In the following three cases, we will interrupt the execution of the transaction. // (1) new head block event arrival, the interrupt signal is 1 // (2) worker start or restart, the interrupt signal is 1 - // (3) worker recreate the mining block with any newly arrived transactions, the interrupt signal is 2. + // (3) worker recreate the sealing block with any newly arrived transactions, the interrupt signal is 2. // For the first two cases, the semi-finished work will be discarded. // For the third case, the semi-finished work will be submitted to the consensus engine. if interrupt != nil && atomic.LoadInt32(interrupt) != commitInterruptNone { // Notify resubmit loop to increase resubmitting interval due to too frequent commits. if atomic.LoadInt32(interrupt) == commitInterruptResubmit { - ratio := float64(w.current.header.GasLimit-w.current.gasPool.Gas()) / float64(w.current.header.GasLimit) + ratio := float64(gasLimit-env.gasPool.Gas()) / float64(gasLimit) if ratio < 0.1 { ratio = 0.1 } @@ -752,12 +861,13 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin ratio: ratio, inc: true, } + return errBlockInterruptedByRecommit } - return atomic.LoadInt32(interrupt) == commitInterruptNewHead + return errBlockInterruptedByNewHead } // If we don't have enough gas for any further transactions then we're done - if w.current.gasPool.Gas() < params.TxGas { - log.Trace("Not enough gas for further transactions", "have", w.current.gasPool, "want", params.TxGas) + if env.gasPool.Gas() < params.TxGas { + log.Trace("Not enough gas for further transactions", "have", env.gasPool, "want", params.TxGas) break } // Retrieve the next transaction and abort if all done @@ -769,41 +879,46 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin // during transaction acceptance is the transaction pool. // // We use the eip155 signer regardless of the current hf. - from, _ := types.Sender(w.current.signer, tx) + from, _ := types.Sender(env.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.chainConfig.IsEIP155(w.current.header.Number) { + if tx.Protected() && !w.chainConfig.IsEIP155(env.header.Number) { log.Trace("Ignoring reply protected transaction", "hash", tx.Hash(), "eip155", w.chainConfig.EIP155Block) txs.Pop() continue } // Start executing the transaction - w.current.state.Prepare(tx.Hash(), common.Hash{}, w.current.tcount) + env.state.Prepare(tx.Hash(), env.tcount) - logs, err := w.commitTransaction(tx, coinbase) - switch err { - case core.ErrGasLimitReached: + logs, err := w.commitTransaction(env, tx) + switch { + case errors.Is(err, core.ErrGasLimitReached): // Pop the current out-of-gas transaction without shifting in the next from the account log.Trace("Gas limit exceeded for current block", "sender", from) txs.Pop() - case core.ErrNonceTooLow: + case errors.Is(err, core.ErrNonceTooLow): // New head notification data race between the transaction pool and miner, shift log.Trace("Skipping transaction with low nonce", "sender", from, "nonce", tx.Nonce()) txs.Shift() - case core.ErrNonceTooHigh: + case errors.Is(err, core.ErrNonceTooHigh): // Reorg notification data race between the transaction pool and miner, skip account = log.Trace("Skipping account with hight nonce", "sender", from, "nonce", tx.Nonce()) txs.Pop() - case nil: + case errors.Is(err, nil): // Everything ok, collect the logs and shift in the next transaction from the same account coalescedLogs = append(coalescedLogs, logs...) - w.current.tcount++ + env.tcount++ txs.Shift() + case errors.Is(err, core.ErrTxTypeNotSupported): + // Pop the unsupported transaction without shifting in the next from the account + log.Trace("Skipping unsupported transaction type", "sender", from, "type", tx.Type()) + txs.Pop() + default: // Strange error, discard the transaction and get the next in line (note, the // nonce-too-high clause will prevent us from executing in vain). @@ -813,8 +928,8 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin } if !w.isRunning() && len(coalescedLogs) > 0 { - // We don't push the pendingLogsEvent while we are mining. The reason is that - // when we are mining, the worker will regenerate a mining block every 3 seconds. + // We don't push the pendingLogsEvent while we are sealing. The reason is that + // when we are sealing, the worker will regenerate a sealing block every 3 seconds. // In order to avoid pushing the repeated pendingLog, we disable the pending log pushing. // make a copy, the state caches the logs and these logs get "upgraded" from pending to mined @@ -825,121 +940,117 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin cpy[i] = new(types.Log) *cpy[i] = *l } - go w.mux.Post(core.PendingLogsEvent{Logs: cpy}) + w.pendingLogsFeed.Send(cpy) } // Notify resubmit loop to decrease resubmitting interval if current interval is larger // than the user-specified one. if interrupt != nil { w.resubmitAdjustCh <- &intervalAdjust{inc: false} } - return false + return nil } -// commitNewWork generates several new sealing tasks based on the parent block. -func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) { +// generateParams wraps various of settings for generating sealing task. +type generateParams struct { + timestamp uint64 // The timstamp for sealing task + forceTime bool // Flag whether the given timestamp is immutable or not + parentHash common.Hash // Parent block hash, empty means the latest chain head + coinbase common.Address // The fee recipient address for including transaction + random common.Hash // The randomness generated by beacon chain, empty before the merge + noUncle bool // Flag whether the uncle block inclusion is allowed + noExtra bool // Flag whether the extra field assignment is allowed + noTxs bool // Flag whether an empty block without any transaction is expected +} + +// prepareWork constructs the sealing task according to the given parameters, +// either based on the last chain head or specified parent. In this function +// the pending transactions are not filled yet, only the empty task returned. +func (w *worker) prepareWork(genParams *generateParams) (*environment, error) { w.mu.RLock() defer w.mu.RUnlock() - tstart := time.Now() + // Find the parent block for sealing task parent := w.chain.CurrentBlock() - - if parent.Time() >= uint64(timestamp) { - timestamp = int64(parent.Time() + 1) + if genParams.parentHash != (common.Hash{}) { + parent = w.chain.GetBlockByHash(genParams.parentHash) } - // 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 - log.Info("Mining too far in the future", "wait", common.PrettyDuration(wait)) - time.Sleep(wait) + if parent == nil { + return nil, fmt.Errorf("missing parent") } - + // Sanity check the timestamp correctness, recap the timestamp + // to parent+1 if the mutation is allowed. + timestamp := genParams.timestamp + if parent.Time() >= timestamp { + if genParams.forceTime { + return nil, fmt.Errorf("invalid timestamp, parent %d given %d", parent.Time(), timestamp) + } + timestamp = parent.Time() + 1 + } + // Construct the sealing block header, set the extra field if it's allowed num := parent.Number() header := &types.Header{ ParentHash: parent.Hash(), Number: num.Add(num, common.Big1), - GasLimit: core.CalcGasLimit(parent, w.config.GasFloor, w.config.GasCeil), - Extra: w.extra, - Time: uint64(timestamp), + GasLimit: core.CalcGasLimit(parent.GasLimit(), w.config.GasCeil), + Time: timestamp, + Coinbase: genParams.coinbase, } - // Only set the coinbase if our consensus engine is running (avoid spurious block rewards) - if w.isRunning() { - if w.coinbase == (common.Address{}) { - log.Error("Refusing to mine without etherbase") - return - } - header.Coinbase = w.coinbase + if !genParams.noExtra && len(w.extra) != 0 { + header.Extra = w.extra } - if err := w.engine.Prepare(w.chain, header); err != nil { - log.Error("Failed to prepare header for mining", "err", err) - return + // Set the randomness field from the beacon chain if it's available. + if genParams.random != (common.Hash{}) { + header.MixDigest = genParams.random } - // If we are care about TheDAO hard-fork check whether to override the extra-data or not - 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.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 - } + // Set baseFee and GasLimit if we are on an EIP-1559 chain + if w.chainConfig.IsLondon(header.Number) { + header.BaseFee = misc.CalcBaseFee(w.chainConfig, parent.Header()) + if !w.chainConfig.IsLondon(parent.Number()) { + parentGasLimit := parent.GasLimit() * params.ElasticityMultiplier + header.GasLimit = core.CalcGasLimit(parentGasLimit, w.config.GasCeil) } } + // Run the consensus preparation with the default or customized consensus engine. + if err := w.engine.Prepare(w.chain, header); err != nil { + log.Error("Failed to prepare header for sealing", "err", err) + return nil, err + } // Could potentially happen if starting to mine in an odd state. - err := w.makeCurrent(parent, header) + // Note genParams.coinbase can be different with header.Coinbase + // since clique algorithm can modify the coinbase field in header. + env, err := w.makeEnv(parent, header, genParams.coinbase) if err != nil { - log.Error("Failed to create mining context", "err", err) - return + log.Error("Failed to create sealing context", "err", err) + return nil, err } - // Create the current work task and check any fork transitions needed - env := w.current - 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 - uncles := make([]*types.Header, 0, 2) - commitUncles := func(blocks map[common.Hash]*types.Block) { - // Clean up stale uncle blocks first - for hash, uncle := range blocks { - if uncle.NumberU64()+staleThreshold <= header.Number.Uint64() { - delete(blocks, hash) - } - } - for hash, uncle := range blocks { - if len(uncles) == 2 { - break - } - if err := w.commitUncle(env, uncle.Header()); err != nil { - log.Trace("Possible uncle rejected", "hash", hash, "reason", err) - } else { - log.Debug("Committing new uncle to block", "hash", hash) - uncles = append(uncles, uncle.Header()) + // Accumulate the uncles for the sealing work only if it's allowed. + if !genParams.noUncle { + commitUncles := func(blocks map[common.Hash]*types.Block) { + for hash, uncle := range blocks { + if len(env.uncles) == 2 { + break + } + if err := w.commitUncle(env, uncle.Header()); err != nil { + log.Trace("Possible uncle rejected", "hash", hash, "reason", err) + } else { + log.Debug("Committing new uncle to block", "hash", hash) + } } } + // Prefer to locally generated uncle + commitUncles(w.localUncles) + commitUncles(w.remoteUncles) } - // Prefer to locally generated uncle - commitUncles(w.localUncles) - commitUncles(w.remoteUncles) - - if !noempty { - // Create an empty block based on temporary copied state for sealing in advance without waiting block - // execution finished. - w.commit(uncles, nil, false, tstart) - } + return env, nil +} - // Fill the block with all available pending transactions. - pending, err := w.eth.TxPool().Pending() - if err != nil { - log.Error("Failed to fetch pending transactions", "err", err) - return - } - // Short circuit if there is no available pending transactions - if len(pending) == 0 { - w.updateSnapshot() - return - } +// fillTransactions retrieves the pending transactions from the txpool and fills them +// into the given sealing block. The transaction selection and ordering strategy can +// be customized with the plugin in the future. +func (w *worker) fillTransactions(interrupt *int32, env *environment) error { // Split the pending transactions into locals and remotes + // Fill the block with all available pending transactions. + pending := w.eth.TxPool().Pending(true) localTxs, remoteTxs := make(map[common.Address]types.Transactions), pending for _, account := range w.eth.TxPool().Locals() { if txs := remoteTxs[account]; len(txs) > 0 { @@ -948,57 +1059,175 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) } } if len(localTxs) > 0 { - txs := types.NewTransactionsByPriceAndNonce(w.current.signer, localTxs) - if w.commitTransactions(txs, w.coinbase, interrupt) { - return + txs := types.NewTransactionsByPriceAndNonce(env.signer, localTxs, env.header.BaseFee) + if err := w.commitTransactions(env, txs, interrupt); err != nil { + return err } } if len(remoteTxs) > 0 { - txs := types.NewTransactionsByPriceAndNonce(w.current.signer, remoteTxs) - if w.commitTransactions(txs, w.coinbase, interrupt) { + txs := types.NewTransactionsByPriceAndNonce(env.signer, remoteTxs, env.header.BaseFee) + if err := w.commitTransactions(env, txs, interrupt); err != nil { + return err + } + } + return nil +} + +// generateWork generates a sealing block based on the given parameters. +func (w *worker) generateWork(params *generateParams) (*types.Block, error) { + work, err := w.prepareWork(params) + if err != nil { + return nil, err + } + defer work.discard() + + if !params.noTxs { + w.fillTransactions(nil, work) + } + return w.engine.FinalizeAndAssemble(w.chain, work.header, work.state, work.txs, work.unclelist(), work.receipts) +} + +// commitWork generates several new sealing tasks based on the parent block +// and submit them to the sealer. +func (w *worker) commitWork(interrupt *int32, noempty bool, timestamp int64) { + start := time.Now() + + // Set the coinbase if the worker is running or it's required + var coinbase common.Address + if w.isRunning() { + if w.coinbase == (common.Address{}) { + log.Error("Refusing to mine without etherbase") return } + coinbase = w.coinbase // Use the preset address as the fee recipient + } + work, err := w.prepareWork(&generateParams{ + timestamp: uint64(timestamp), + coinbase: coinbase, + }) + if err != nil { + return + } + // Create an empty block based on temporary copied state for + // sealing in advance without waiting block execution finished. + if !noempty && atomic.LoadUint32(&w.noempty) == 0 { + w.commit(work.copy(), nil, false, start) + } + + // Fill pending transactions from the txpool + err = w.fillTransactions(interrupt, work) + if errors.Is(err, errBlockInterruptedByNewHead) { + work.discard() + return } - w.commit(uncles, w.fullTaskHook, true, tstart) + w.commit(work.copy(), w.fullTaskHook, true, start) + + // Swap out the old work with the new one, terminating any leftover + // prefetcher processes in the mean time and starting a new one. + if w.current != nil { + w.current.discard() + } + w.current = work } // commit runs any post-transaction state modifications, assembles the final block // and commits new work if consensus engine is running. -func (w *worker) commit(uncles []*types.Header, interval func(), update bool, start time.Time) error { - // Deep copy receipts here to avoid interaction between different tasks. - receipts := make([]*types.Receipt, len(w.current.receipts)) - for i, l := range w.current.receipts { - receipts[i] = new(types.Receipt) - *receipts[i] = *l - } - s := w.current.state.Copy() - block, err := w.engine.FinalizeAndAssemble(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) - if err != nil { - return err - } +// Note the assumption is held that the mutation is allowed to the passed env, do +// the deep copy first. +func (w *worker) commit(env *environment, interval func(), update bool, start time.Time) error { if w.isRunning() { if interval != nil { interval() } - select { - case w.taskCh <- &task{receipts: receipts, state: s, block: block, createdAt: time.Now()}: - w.unconfirmed.Shift(block.NumberU64() - 1) - - feesWei := new(big.Int) - for i, tx := range block.Transactions() { - feesWei.Add(feesWei, new(big.Int).Mul(new(big.Int).SetUint64(receipts[i].GasUsed), tx.GasPrice())) + // Create a local environment copy, avoid the data race with snapshot state. + // https://github.com/ethereum/go-ethereum/issues/24299 + env := env.copy() + block, err := w.engine.FinalizeAndAssemble(w.chain, env.header, env.state, env.txs, env.unclelist(), env.receipts) + if err != nil { + return err + } + // If we're post merge, just ignore + if !w.isTTDReached(block.Header()) { + select { + case w.taskCh <- &task{receipts: env.receipts, state: env.state, block: block, createdAt: time.Now()}: + w.unconfirmed.Shift(block.NumberU64() - 1) + log.Info("Commit new sealing work", "number", block.Number(), "sealhash", w.engine.SealHash(block.Header()), + "uncles", len(env.uncles), "txs", env.tcount, + "gas", block.GasUsed(), "fees", totalFees(block, env.receipts), + "elapsed", common.PrettyDuration(time.Since(start))) + + case <-w.exitCh: + log.Info("Worker has exited") } - feesEth := new(big.Float).Quo(new(big.Float).SetInt(feesWei), new(big.Float).SetInt(big.NewInt(params.Ether))) - - log.Info("Commit new mining work", "number", block.Number(), "sealhash", w.engine.SealHash(block.Header()), - "uncles", len(uncles), "txs", w.current.tcount, "gas", block.GasUsed(), "fees", feesEth, "elapsed", common.PrettyDuration(time.Since(start))) - - case <-w.exitCh: - log.Info("Worker has exited") } } if update { - w.updateSnapshot() + w.updateSnapshot(env) } return nil } + +// getSealingBlock generates the sealing block based on the given parameters. +// The generation result will be passed back via the given channel no matter +// the generation itself succeeds or not. +func (w *worker) getSealingBlock(parent common.Hash, timestamp uint64, coinbase common.Address, random common.Hash, noTxs bool) (chan *types.Block, chan error, error) { + var ( + resCh = make(chan *types.Block, 1) + errCh = make(chan error, 1) + ) + req := &getWorkReq{ + params: &generateParams{ + timestamp: timestamp, + forceTime: true, + parentHash: parent, + coinbase: coinbase, + random: random, + noUncle: true, + noExtra: true, + noTxs: noTxs, + }, + result: resCh, + err: errCh, + } + select { + case w.getWorkCh <- req: + return resCh, errCh, nil + case <-w.exitCh: + return nil, nil, errors.New("miner closed") + } +} + +// isTTDReached returns the indicator if the given block has reached the total +// terminal difficulty for The Merge transition. +func (w *worker) isTTDReached(header *types.Header) bool { + td, ttd := w.chain.GetTd(header.ParentHash, header.Number.Uint64()-1), w.chain.Config().TerminalTotalDifficulty + return td != nil && ttd != nil && td.Cmp(ttd) >= 0 +} + +// copyReceipts makes a deep copy of the given receipts. +func copyReceipts(receipts []*types.Receipt) []*types.Receipt { + result := make([]*types.Receipt, len(receipts)) + for i, l := range receipts { + cpy := *l + result[i] = &cpy + } + return result +} + +// postSideBlock fires a side chain event, only use it for testing. +func (w *worker) postSideBlock(event core.ChainSideEvent) { + select { + case w.chainSideCh <- event: + case <-w.exitCh: + } +} + +// totalFees computes total consumed miner fees in ETH. Block transactions and receipts have to have the same order. +func totalFees(block *types.Block, receipts []*types.Receipt) *big.Float { + feesWei := new(big.Int) + for i, tx := range block.Transactions() { + minerFee, _ := tx.EffectiveGasTip(block.BaseFee()) + feesWei.Add(feesWei, new(big.Int).Mul(new(big.Int).SetUint64(receipts[i].GasUsed), minerFee)) + } + return new(big.Float).Quo(new(big.Float).SetInt(feesWei), new(big.Float).SetInt(big.NewInt(params.Ether))) +} diff --git a/miner/worker_test.go b/miner/worker_test.go index 3bc51b18..3c70b4ba 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -17,22 +17,36 @@ package miner import ( + "errors" "math/big" + "math/rand" + "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/clique" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "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/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/params" +) + +const ( + // testCode is the testing contract binary code which will initialises some + // variables in constructor + testCode = "0x60806040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005534801561003457600080fd5b5060fc806100436000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c4dae8814603757806398a213cf146053575b600080fd5b603d607e565b6040518082815260200191505060405180910390f35b607c60048036036020811015606757600080fd5b81019080803590602001909291905050506084565b005b60005481565b806000819055507fe9e44f9f7da8c559de847a3232b57364adc0354f15a2cd8dc636d54396f9587a6000546040518082815260200191505060405180910390a15056fea265627a7a723058208ae31d9424f2d0bc2a3da1a5dd659db2d71ec322a17db8f87e19e209e3a1ff4a64736f6c634300050a0032" + + // testGas is the gas required for contract deployment. + testGas = 144109 ) var ( @@ -55,7 +69,6 @@ var ( testConfig = &Config{ Recommit: time.Second, - GasFloor: params.GenesisGasLimit, GasCeil: params.GenesisGasLimit, } ) @@ -63,16 +76,36 @@ var ( func init() { testTxPoolConfig = core.DefaultTxPoolConfig testTxPoolConfig.Journal = "" - ethashChainConfig = params.TestChainConfig - cliqueChainConfig = params.TestChainConfig + ethashChainConfig = new(params.ChainConfig) + *ethashChainConfig = *params.TestChainConfig + cliqueChainConfig = new(params.ChainConfig) + *cliqueChainConfig = *params.TestChainConfig cliqueChainConfig.Clique = ¶ms.CliqueConfig{ Period: 10, Epoch: 30000, } - tx1, _ := types.SignTx(types.NewTransaction(0, testUserAddress, big.NewInt(1000), params.TxGas, nil, nil), types.HomesteadSigner{}, testBankKey) + + signer := types.LatestSigner(params.TestChainConfig) + tx1 := types.MustSignNewTx(testBankKey, signer, &types.AccessListTx{ + ChainID: params.TestChainConfig.ChainID, + Nonce: 0, + To: &testUserAddress, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: big.NewInt(params.InitialBaseFee), + }) pendingTxs = append(pendingTxs, tx1) - tx2, _ := types.SignTx(types.NewTransaction(1, testUserAddress, big.NewInt(1000), params.TxGas, nil, nil), types.HomesteadSigner{}, testBankKey) + + tx2 := types.MustSignNewTx(testBankKey, signer, &types.LegacyTx{ + Nonce: 1, + To: &testUserAddress, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: big.NewInt(params.InitialBaseFee), + }) newTxs = append(newTxs, tx2) + + rand.Seed(time.Now().UnixNano()) } // testWorkerBackend implements worker.Backend interfaces and wraps all information needed during the testing. @@ -80,30 +113,30 @@ type testWorkerBackend struct { db ethdb.Database txPool *core.TxPool chain *core.BlockChain - testTxFeed event.Feed + genesis *core.Genesis uncleBlock *types.Block } -func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, n int) *testWorkerBackend { - var ( - db = rawdb.NewMemoryDatabase() - gspec = core.Genesis{ - Config: chainConfig, - Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, - } - ) +func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, n int) *testWorkerBackend { + var gspec = core.Genesis{ + Config: chainConfig, + Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, + } - switch engine.(type) { + switch e := engine.(type) { case *clique.Clique: gspec.ExtraData = make([]byte, 32+common.AddressLength+crypto.SignatureLength) - copy(gspec.ExtraData[32:], testBankAddress[:]) + copy(gspec.ExtraData[32:32+common.AddressLength], testBankAddress.Bytes()) + e.Authorize(testBankAddress, func(account accounts.Account, s string, data []byte) ([]byte, error) { + return crypto.Sign(crypto.Keccak256(data), testBankKey) + }) case *ethash.Ethash: default: t.Fatalf("unexpected consensus engine type: %T", engine) } genesis := gspec.MustCommit(db) - chain, _ := core.NewBlockChain(db, nil, gspec.Config, engine, vm.Config{}, nil) + chain, _ := core.NewBlockChain(db, &core.CacheConfig{TrieDirtyDisabled: true}, &gspec, nil, engine, vm.Config{}, nil, nil) txpool := core.NewTxPool(testTxPoolConfig, chainConfig, chain) // Generate a small n-block chain and an uncle block for it @@ -127,53 +160,112 @@ func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine db: db, chain: chain, txPool: txpool, + genesis: &gspec, uncleBlock: blocks[0], } } func (b *testWorkerBackend) BlockChain() *core.BlockChain { return b.chain } func (b *testWorkerBackend) TxPool() *core.TxPool { return b.txPool } -func (b *testWorkerBackend) PostChainEvents(events []interface{}) { - b.chain.PostChainEvents(events, nil) +func (b *testWorkerBackend) StateAtBlock(block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (statedb *state.StateDB, err error) { + return nil, errors.New("not supported") +} + +func (b *testWorkerBackend) newRandomUncle() *types.Block { + var parent *types.Block + cur := b.chain.CurrentBlock() + if cur.NumberU64() == 0 { + parent = b.chain.Genesis() + } else { + parent = b.chain.GetBlockByHash(b.chain.CurrentBlock().ParentHash()) + } + blocks, _ := core.GenerateChain(b.chain.Config(), parent, b.chain.Engine(), b.db, 1, func(i int, gen *core.BlockGen) { + var addr = make([]byte, common.AddressLength) + rand.Read(addr) + gen.SetCoinbase(common.BytesToAddress(addr)) + }) + return blocks[0] +} + +func (b *testWorkerBackend) newRandomTx(creation bool) *types.Transaction { + var tx *types.Transaction + gasPrice := big.NewInt(10 * params.InitialBaseFee) + if creation { + tx, _ = types.SignTx(types.NewContractCreation(b.txPool.Nonce(testBankAddress), big.NewInt(0), testGas, gasPrice, common.FromHex(testCode)), types.HomesteadSigner{}, testBankKey) + } else { + tx, _ = types.SignTx(types.NewTransaction(b.txPool.Nonce(testBankAddress), testUserAddress, big.NewInt(1000), params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey) + } + return tx } -func newTestWorker(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, blocks int) (*worker, *testWorkerBackend) { - backend := newTestWorkerBackend(t, chainConfig, engine, blocks) +func newTestWorker(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, blocks int) (*worker, *testWorkerBackend) { + backend := newTestWorkerBackend(t, chainConfig, engine, db, blocks) backend.txPool.AddLocals(pendingTxs) - w := newWorker(testConfig, chainConfig, engine, backend, new(event.TypeMux), nil) + w := newWorker(testConfig, chainConfig, engine, backend, new(event.TypeMux), nil, false) w.setEtherbase(testBankAddress) return w, backend } -func TestPendingStateAndBlockEthash(t *testing.T) { - testPendingStateAndBlock(t, ethashChainConfig, ethash.NewFaker()) +func TestGenerateBlockAndImportEthash(t *testing.T) { + testGenerateBlockAndImport(t, false) } -func TestPendingStateAndBlockClique(t *testing.T) { - testPendingStateAndBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) + +func TestGenerateBlockAndImportClique(t *testing.T) { + testGenerateBlockAndImport(t, true) } -func testPendingStateAndBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { - defer engine.Close() +func testGenerateBlockAndImport(t *testing.T, isClique bool) { + var ( + engine consensus.Engine + chainConfig *params.ChainConfig + db = rawdb.NewMemoryDatabase() + ) + if isClique { + chainConfig = params.AllCliqueProtocolChanges + chainConfig.Clique = ¶ms.CliqueConfig{Period: 1, Epoch: 30000} + engine = clique.New(chainConfig.Clique, db) + } else { + chainConfig = params.AllEthashProtocolChanges + engine = ethash.NewFaker() + } - w, b := newTestWorker(t, chainConfig, engine, 0) + chainConfig.LondonBlock = big.NewInt(0) + w, b := newTestWorker(t, chainConfig, engine, db, 0) defer w.close() - // Ensure snapshot has been updated. - time.Sleep(100 * time.Millisecond) - block, state := w.pending() - if block.NumberU64() != 1 { - t.Errorf("block number mismatch: have %d, want %d", block.NumberU64(), 1) - } - if balance := state.GetBalance(testUserAddress); balance.Cmp(big.NewInt(1000)) != 0 { - t.Errorf("account balance mismatch: have %d, want %d", balance, 1000) + // This test chain imports the mined blocks. + db2 := rawdb.NewMemoryDatabase() + b.genesis.MustCommit(db2) + chain, _ := core.NewBlockChain(db2, nil, b.genesis, nil, engine, vm.Config{}, nil, nil) + defer chain.Stop() + + // Ignore empty commit here for less noise. + w.skipSealHook = func(task *task) bool { + return len(task.receipts) == 0 } - b.txPool.AddLocals(newTxs) - // Ensure the new tx events has been processed - time.Sleep(100 * time.Millisecond) - block, state = w.pending() - if balance := state.GetBalance(testUserAddress); balance.Cmp(big.NewInt(2000)) != 0 { - t.Errorf("account balance mismatch: have %d, want %d", balance, 2000) + // Wait for mined blocks. + sub := w.mux.Subscribe(core.NewMinedBlockEvent{}) + defer sub.Unsubscribe() + + // Start mining! + w.start() + + for i := 0; i < 5; i++ { + b.txPool.AddLocal(b.newRandomTx(true)) + b.txPool.AddLocal(b.newRandomTx(false)) + w.postSideBlock(core.ChainSideEvent{Block: b.newRandomUncle()}) + w.postSideBlock(core.ChainSideEvent{Block: b.newRandomUncle()}) + + select { + case ev := <-sub.Chan(): + block := ev.Data.(core.NewMinedBlockEvent).Block + if _, err := chain.InsertChain([]*types.Block{block}); err != nil { + t.Fatalf("failed to insert new mined block %d: %v", block.NumberU64(), err) + } + case <-time.After(3 * time.Second): // Worker needs 1s to include new changes. + t.Fatalf("timeout") + } } } @@ -187,27 +279,27 @@ func TestEmptyWorkClique(t *testing.T) { func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { defer engine.Close() - w, _ := newTestWorker(t, chainConfig, engine, 0) + w, _ := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0) defer w.close() var ( - taskCh = make(chan struct{}, 2) taskIndex int + taskCh = make(chan struct{}, 2) ) - checkEqual := func(t *testing.T, task *task, index int) { + // The first empty work without any txs included receiptLen, balance := 0, big.NewInt(0) if index == 1 { + // The second full work with 1 tx included receiptLen, balance = 1, big.NewInt(1000) } if len(task.receipts) != receiptLen { - t.Errorf("receipt number mismatch: have %d, want %d", len(task.receipts), receiptLen) + t.Fatalf("receipt number mismatch: have %d, want %d", len(task.receipts), receiptLen) } if task.state.GetBalance(testUserAddress).Cmp(balance) != 0 { - t.Errorf("account balance mismatch: have %d, want %d", task.state.GetBalance(testUserAddress), balance) + t.Fatalf("account balance mismatch: have %d, want %d", task.state.GetBalance(testUserAddress), balance) } } - w.newTaskHook = func(task *task) { if task.block.NumberU64() == 1 { checkEqual(t, task, taskIndex) @@ -215,23 +307,15 @@ func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consens taskCh <- struct{}{} } } + w.skipSealHook = func(task *task) bool { return true } w.fullTaskHook = func() { time.Sleep(100 * time.Millisecond) } - - // Ensure worker has finished initialization - for { - b := w.pendingBlock() - if b != nil && b.NumberU64() == 1 { - break - } - } - - w.start() + w.start() // Start mining! for i := 0; i < 2; i += 1 { select { case <-taskCh: - case <-time.NewTimer(2 * time.Second).C: + case <-time.NewTimer(3 * time.Second).C: t.Error("new task timeout") } } @@ -241,7 +325,7 @@ func TestStreamUncleBlock(t *testing.T) { ethash := ethash.NewFaker() defer ethash.Close() - w, b := newTestWorker(t, ethashChainConfig, ethash, 1) + w, b := newTestWorker(t, ethashChainConfig, ethash, rawdb.NewMemoryDatabase(), 1) defer w.close() var taskCh = make(chan struct{}) @@ -249,6 +333,9 @@ func TestStreamUncleBlock(t *testing.T) { taskIndex := 0 w.newTaskHook = func(task *task) { if task.block.NumberU64() == 2 { + // The first task is an empty task, the second + // one has 1 pending tx, the third one has 1 tx + // and 1 uncle. if taskIndex == 2 { have := task.block.Header().UncleHash want := types.CalcUncleHash([]*types.Header{b.uncleBlock.Header()}) @@ -266,17 +353,8 @@ func TestStreamUncleBlock(t *testing.T) { w.fullTaskHook = func() { time.Sleep(100 * time.Millisecond) } - - // Ensure worker has finished initialization - for { - b := w.pendingBlock() - if b != nil && b.NumberU64() == 2 { - break - } - } w.start() - // Ignore the first two works for i := 0; i < 2; i += 1 { select { case <-taskCh: @@ -284,7 +362,8 @@ func TestStreamUncleBlock(t *testing.T) { t.Error("new task timeout") } } - b.PostChainEvents([]interface{}{core.ChainSideEvent{Block: b.uncleBlock}}) + + w.postSideBlock(core.ChainSideEvent{Block: b.uncleBlock}) select { case <-taskCh: @@ -304,14 +383,16 @@ func TestRegenerateMiningBlockClique(t *testing.T) { func testRegenerateMiningBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { defer engine.Close() - w, b := newTestWorker(t, chainConfig, engine, 0) + w, b := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0) defer w.close() - var taskCh = make(chan struct{}) + var taskCh = make(chan struct{}, 3) taskIndex := 0 w.newTaskHook = func(task *task) { if task.block.NumberU64() == 1 { + // The first task is an empty task, the second + // one has 1 pending tx, the third one has 2 txs if taskIndex == 2 { receiptLen, balance := 2, big.NewInt(2000) if len(task.receipts) != receiptLen { @@ -331,13 +412,6 @@ func testRegenerateMiningBlock(t *testing.T, chainConfig *params.ChainConfig, en w.fullTaskHook = func() { time.Sleep(100 * time.Millisecond) } - // Ensure worker has finished initialization - for { - b := w.pendingBlock() - if b != nil && b.NumberU64() == 1 { - break - } - } w.start() // Ignore the first two works @@ -369,7 +443,7 @@ func TestAdjustIntervalClique(t *testing.T) { func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { defer engine.Close() - w, _ := newTestWorker(t, chainConfig, engine, 0) + w, _ := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0) defer w.close() w.skipSealHook = func(task *task) bool { @@ -382,11 +456,11 @@ func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine co progress = make(chan struct{}, 10) result = make([]float64, 0, 10) index = 0 - start = false + start uint32 ) w.resubmitHook = func(minInterval time.Duration, recommitInterval time.Duration) { // Short circuit if interval checking hasn't started. - if !start { + if atomic.LoadUint32(&start) == 0 { return } var wantMinInterval, wantRecommitInterval time.Duration @@ -418,19 +492,11 @@ func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine co index += 1 progress <- struct{}{} } - // Ensure worker has finished initialization - for { - b := w.pendingBlock() - if b != nil && b.NumberU64() == 1 { - break - } - } - w.start() - time.Sleep(time.Second) + time.Sleep(time.Second) // Ensure two tasks have been submitted due to start opt + atomic.StoreUint32(&start, 1) - start = true w.setRecommitInterval(3 * time.Second) select { case <-progress: @@ -459,3 +525,148 @@ func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine co t.Error("interval reset timeout") } } + +func TestGetSealingWorkEthash(t *testing.T) { + testGetSealingWork(t, ethashChainConfig, ethash.NewFaker(), false) +} + +func TestGetSealingWorkClique(t *testing.T) { + testGetSealingWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase()), false) +} + +func TestGetSealingWorkPostMerge(t *testing.T) { + local := new(params.ChainConfig) + *local = *ethashChainConfig + local.TerminalTotalDifficulty = big.NewInt(0) + testGetSealingWork(t, local, ethash.NewFaker(), true) +} + +func testGetSealingWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, postMerge bool) { + defer engine.Close() + + w, b := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0) + defer w.close() + + w.setExtra([]byte{0x01, 0x02}) + w.postSideBlock(core.ChainSideEvent{Block: b.uncleBlock}) + + w.skipSealHook = func(task *task) bool { + return true + } + w.fullTaskHook = func() { + time.Sleep(100 * time.Millisecond) + } + timestamp := uint64(time.Now().Unix()) + assertBlock := func(block *types.Block, number uint64, coinbase common.Address, random common.Hash) { + if block.Time() != timestamp { + // Sometime the timestamp will be mutated if the timestamp + // is even smaller than parent block's. It's OK. + t.Logf("Invalid timestamp, want %d, get %d", timestamp, block.Time()) + } + if len(block.Uncles()) != 0 { + t.Error("Unexpected uncle block") + } + _, isClique := engine.(*clique.Clique) + if !isClique { + if len(block.Extra()) != 0 { + t.Error("Unexpected extra field") + } + if block.Coinbase() != coinbase { + t.Errorf("Unexpected coinbase got %x want %x", block.Coinbase(), coinbase) + } + } else { + if block.Coinbase() != (common.Address{}) { + t.Error("Unexpected coinbase") + } + } + if !isClique { + if block.MixDigest() != random { + t.Error("Unexpected mix digest") + } + } + if block.Nonce() != 0 { + t.Error("Unexpected block nonce") + } + if block.NumberU64() != number { + t.Errorf("Mismatched block number, want %d got %d", number, block.NumberU64()) + } + } + var cases = []struct { + parent common.Hash + coinbase common.Address + random common.Hash + expectNumber uint64 + expectErr bool + }{ + { + b.chain.Genesis().Hash(), + common.HexToAddress("0xdeadbeef"), + common.HexToHash("0xcafebabe"), + uint64(1), + false, + }, + { + b.chain.CurrentBlock().Hash(), + common.HexToAddress("0xdeadbeef"), + common.HexToHash("0xcafebabe"), + b.chain.CurrentBlock().NumberU64() + 1, + false, + }, + { + b.chain.CurrentBlock().Hash(), + common.Address{}, + common.HexToHash("0xcafebabe"), + b.chain.CurrentBlock().NumberU64() + 1, + false, + }, + { + b.chain.CurrentBlock().Hash(), + common.Address{}, + common.Hash{}, + b.chain.CurrentBlock().NumberU64() + 1, + false, + }, + { + common.HexToHash("0xdeadbeef"), + common.HexToAddress("0xdeadbeef"), + common.HexToHash("0xcafebabe"), + 0, + true, + }, + } + + // This API should work even when the automatic sealing is not enabled + for _, c := range cases { + resChan, errChan, _ := w.getSealingBlock(c.parent, timestamp, c.coinbase, c.random, false) + block := <-resChan + err := <-errChan + if c.expectErr { + if err == nil { + t.Error("Expect error but get nil") + } + } else { + if err != nil { + t.Errorf("Unexpected error %v", err) + } + assertBlock(block, c.expectNumber, c.coinbase, c.random) + } + } + + // This API should work even when the automatic sealing is enabled + w.start() + for _, c := range cases { + resChan, errChan, _ := w.getSealingBlock(c.parent, timestamp, c.coinbase, c.random, false) + block := <-resChan + err := <-errChan + if c.expectErr { + if err == nil { + t.Error("Expect error but get nil") + } + } else { + if err != nil { + t.Errorf("Unexpected error %v", err) + } + assertBlock(block, c.expectNumber, c.coinbase, c.random) + } + } +} diff --git a/mobile/accounts.go b/mobile/accounts.go index d5124745..d9eab93a 100644 --- a/mobile/accounts.go +++ b/mobile/accounts.go @@ -23,10 +23,10 @@ import ( "errors" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) const ( @@ -212,10 +212,10 @@ func (ks *KeyStore) ImportECDSAKey(key []byte, passphrase string) (account *Acco // ImportPreSaleKey decrypts the given Ethereum presale wallet and stores // a key file in the key directory. The key file is encrypted with the same passphrase. -func (ks *KeyStore) ImportPreSaleKey(keyJSON []byte, passphrase string) (ccount *Account, _ error) { - account, err := ks.keystore.ImportPreSaleKey(common.CopyBytes(keyJSON), passphrase) +func (ks *KeyStore) ImportPreSaleKey(keyJSON []byte, passphrase string) (account *Account, _ error) { + acc, err := ks.keystore.ImportPreSaleKey(common.CopyBytes(keyJSON), passphrase) if err != nil { return nil, err } - return &Account{account}, nil + return &Account{acc}, nil } diff --git a/mobile/android_test.go b/mobile/android_test.go index 5842aa19..2ddf5d9d 100644 --- a/mobile/android_test.go +++ b/mobile/android_test.go @@ -17,7 +17,6 @@ package geth import ( - "io/ioutil" "os" "os/exec" "path/filepath" @@ -25,7 +24,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/internal/build" + "github.com/cespare/cp" ) // androidTestClass is a Java class to do some lightweight tests against the Android @@ -184,11 +183,7 @@ func TestAndroid(t *testing.T) { t.Logf("initialization took %v", time.Since(start)) } // Create and switch to a temporary workspace - workspace, err := ioutil.TempDir("", "geth-android-") - if err != nil { - t.Fatalf("failed to create temporary workspace: %v", err) - } - defer os.RemoveAll(workspace) + workspace := t.TempDir() pwd, err := os.Getwd() if err != nil { @@ -200,28 +195,28 @@ func TestAndroid(t *testing.T) { defer os.Chdir(pwd) // Create the skeleton of the Android project - for _, dir := range []string{"src/main", "src/androidTest/java/org/Onther-Tech/gethtest", "libs"} { + for _, dir := range []string{"src/main", "src/androidTest/java/org/ethereum/gethtest", "libs"} { err = os.MkdirAll(dir, os.ModePerm) if err != nil { t.Fatal(err) } } // Generate the mobile bindings for Geth and add the tester class - gobind := exec.Command("gomobile", "bind", "-javapkg", "org.ethereum", "github.com/cryptoecc/ETH-ECC/mobile") + gobind := exec.Command("gomobile", "bind", "-javapkg", "org.ethereum", "github.com/ethereum/go-ethereum/mobile") if output, err := gobind.CombinedOutput(); err != nil { t.Logf("%s", output) t.Fatalf("failed to run gomobile bind: %v", err) } - build.CopyFile(filepath.Join("libs", "geth.aar"), "geth.aar", os.ModePerm) + cp.CopyFile(filepath.Join("libs", "geth.aar"), "geth.aar") - if err = ioutil.WriteFile(filepath.Join("src", "androidTest", "java", "org", "ethereum", "gethtest", "AndroidTest.java"), []byte(androidTestClass), os.ModePerm); err != nil { + if err = os.WriteFile(filepath.Join("src", "androidTest", "java", "org", "ethereum", "gethtest", "AndroidTest.java"), []byte(androidTestClass), os.ModePerm); err != nil { t.Fatalf("failed to write Android test class: %v", err) } // Finish creating the project and run the tests via gradle - if err = ioutil.WriteFile(filepath.Join("src", "main", "AndroidManifest.xml"), []byte(androidManifest), os.ModePerm); err != nil { + if err = os.WriteFile(filepath.Join("src", "main", "AndroidManifest.xml"), []byte(androidManifest), os.ModePerm); err != nil { t.Fatalf("failed to write Android manifest: %v", err) } - if err = ioutil.WriteFile("build.gradle", []byte(gradleConfig), os.ModePerm); err != nil { + if err = os.WriteFile("build.gradle", []byte(gradleConfig), os.ModePerm); err != nil { t.Fatalf("failed to write gradle build file: %v", err) } if output, err := exec.Command("gradle", "connectedAndroidTest").CombinedOutput(); err != nil { diff --git a/mobile/big.go b/mobile/big.go index d7cb6508..c08bcf93 100644 --- a/mobile/big.go +++ b/mobile/big.go @@ -22,7 +22,7 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // A BigInt represents a signed multi-precision integer. @@ -35,6 +35,16 @@ func NewBigInt(x int64) *BigInt { return &BigInt{big.NewInt(x)} } +// NewBigIntFromString allocates and returns a new BigInt set to x +// interpreted in the provided base. +func NewBigIntFromString(x string, base int) *BigInt { + b, success := new(big.Int).SetString(x, base) + if !success { + return nil + } + return &BigInt{b} +} + // GetBytes returns the absolute value of x as a big-endian byte slice. func (bi *BigInt) GetBytes() []byte { return bi.bigint.Bytes() diff --git a/mobile/bind.go b/mobile/bind.go index 7513cf9a..e32d864a 100644 --- a/mobile/bind.go +++ b/mobile/bind.go @@ -19,22 +19,20 @@ package geth import ( - "errors" "math/big" "strings" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/accounts/abi/bind" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" + "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" ) // 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) + Sign(addr *Address, unsignedTx *Transaction) (tx *Transaction, _ error) } type MobileSigner struct { @@ -42,7 +40,7 @@ type MobileSigner struct { } func (s *MobileSigner) Sign(addr *Address, unsignedTx *Transaction) (signedTx *Transaction, _ error) { - sig, err := s.sign(types.EIP155Signer{}, addr.address, unsignedTx.tx) + sig, err := s.sign(addr.address, unsignedTx.tx) if err != nil { return nil, err } @@ -69,6 +67,7 @@ func (opts *CallOpts) GetGasLimit() int64 { return 0 /* TODO(karalabe) */ } func (opts *CallOpts) SetPending(pending bool) { opts.opts.Pending = pending } func (opts *CallOpts) SetGasLimit(limit int64) { /* TODO(karalabe) */ } func (opts *CallOpts) SetContext(context *Context) { opts.opts.Context = context.context } +func (opts *CallOpts) SetFrom(addr *Address) { opts.opts.From = addr.address } // TransactOpts is the collection of authorization data required to create a // valid Ethereum transaction. @@ -81,28 +80,18 @@ func NewTransactOpts() *TransactOpts { return new(TransactOpts) } -// NewKeyedTransactor is a utility method to easily create a transaction signer +// NewKeyedTransactOpts is a utility method to easily create a transaction signer // from a single private key. -func NewKeyedTransactOpts(keyJson []byte, passphrase string) (*TransactOpts, error) { +func NewKeyedTransactOpts(keyJson []byte, passphrase string, chainID *big.Int) (*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) - }, + auth, err := bind.NewKeyedTransactorWithChainID(key.PrivateKey, chainID) + if err != nil { + return nil, err } - return &TransactOpts{opts}, nil + return &TransactOpts{*auth}, nil } func (opts *TransactOpts) GetFrom() *Address { return &Address{opts.opts.From} } @@ -121,7 +110,7 @@ func (opts *TransactOpts) GetGasLimit() int64 { return int64(opts.opts.GasLimi func (opts *TransactOpts) SetFrom(from *Address) { opts.opts.From = from.address } func (opts *TransactOpts) SetNonce(nonce int64) { opts.opts.Nonce = big.NewInt(nonce) } func (opts *TransactOpts) SetSigner(s Signer) { - opts.opts.Signer = func(signer types.Signer, addr common.Address, tx *types.Transaction) (*types.Transaction, error) { + opts.opts.Signer = func(addr common.Address, tx *types.Transaction) (*types.Transaction, error) { sig, err := s.Sign(&Address{addr}, &Transaction{tx}) if err != nil { return nil, err @@ -186,20 +175,12 @@ func (c *BoundContract) GetDeployer() *Transaction { // Call invokes the (constant) contract method with params as input values and // sets the output to result. func (c *BoundContract) Call(opts *CallOpts, out *Interfaces, method string, args *Interfaces) error { - if len(out.objects) == 1 { - result := out.objects[0] - if err := c.contract.Call(&opts.opts, result, method, args.objects...); err != nil { - return err - } - out.objects[0] = result - } else { - results := make([]interface{}, len(out.objects)) - copy(results, out.objects) - if err := c.contract.Call(&opts.opts, &results, method, args.objects...); err != nil { - return err - } - copy(out.objects, results) + results := make([]interface{}, len(out.objects)) + copy(results, out.objects) + if err := c.contract.Call(&opts.opts, &results, method, args.objects...); err != nil { + return err } + copy(out.objects, results) return nil } @@ -212,6 +193,15 @@ func (c *BoundContract) Transact(opts *TransactOpts, method string, args *Interf return &Transaction{rawTx}, nil } +// RawTransact invokes the (paid) contract method with raw calldata as input values. +func (c *BoundContract) RawTransact(opts *TransactOpts, calldata []byte) (tx *Transaction, _ error) { + rawTx, err := c.contract.RawTransact(&opts.opts, calldata) + if err != nil { + return nil, err + } + return &Transaction{rawTx}, nil +} + // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. func (c *BoundContract) Transfer(opts *TransactOpts) (tx *Transaction, _ error) { diff --git a/mobile/common.go b/mobile/common.go index c6f1a371..124712b4 100644 --- a/mobile/common.go +++ b/mobile/common.go @@ -24,8 +24,8 @@ import ( "fmt" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) // Hash represents the 32 byte Keccak256 hash of arbitrary data. @@ -87,6 +87,11 @@ func (h *Hash) GetHex() string { return h.hash.Hex() } +// String implements Stringer interface for printable representation of the hash. +func (h *Hash) String() string { + return h.GetHex() +} + // Hashes represents a slice of hashes. type Hashes struct{ hashes []common.Hash } @@ -188,6 +193,11 @@ func (a *Address) GetHex() string { return a.address.Hex() } +// String returns a printable representation of the address. +func (a *Address) String() string { + return a.GetHex() +} + // Addresses represents a slice of addresses. type Addresses struct{ addresses []common.Address } diff --git a/mobile/discover.go b/mobile/discover.go index 81d2254a..2c699f08 100644 --- a/mobile/discover.go +++ b/mobile/discover.go @@ -22,12 +22,12 @@ package geth import ( "errors" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" + "github.com/ethereum/go-ethereum/p2p/enode" ) // Enode represents a host on the network. type Enode struct { - node *discv5.Node + node *enode.Node } // NewEnode parses a node designator. @@ -53,8 +53,8 @@ type Enode struct { // and UDP discovery port 30301. // // enode://@10.3.58.6:30303?discport=30301 -func NewEnode(rawurl string) (enode *Enode, _ error) { - node, err := discv5.ParseNode(rawurl) +func NewEnode(rawurl string) (*Enode, error) { + node, err := enode.Parse(enode.ValidSchemes, rawurl) if err != nil { return nil, err } @@ -62,12 +62,12 @@ func NewEnode(rawurl string) (enode *Enode, _ error) { } // Enodes represents a slice of accounts. -type Enodes struct{ nodes []*discv5.Node } +type Enodes struct{ nodes []*enode.Node } // NewEnodes creates a slice of uninitialized enodes. func NewEnodes(size int) *Enodes { return &Enodes{ - nodes: make([]*discv5.Node, size), + nodes: make([]*enode.Node, size), } } diff --git a/mobile/doc.go b/mobile/doc.go index 64d47bec..20131afc 100644 --- a/mobile/doc.go +++ b/mobile/doc.go @@ -24,7 +24,7 @@ // // Since gomobile cannot bridge arbitrary types between Go and Android/iOS, the // exposed APIs need to be manually wrapped into simplified types, with custom -// constructors and getters/setters to ensure that they can be meaninfully used +// constructors and getters/setters to ensure that they can be meaningfully used // from Java/ObjC too. // // With this in mind, please try to limit the scope of this package and only add diff --git a/mobile/ethclient.go b/mobile/ethclient.go index 5a4722d4..00bcb3a2 100644 --- a/mobile/ethclient.go +++ b/mobile/ethclient.go @@ -21,8 +21,8 @@ package geth import ( "math/big" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/ethclient" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" ) // EthereumClient provides access to the Ethereum APIs. @@ -94,7 +94,6 @@ func (ec *EthereumClient) GetTransactionCount(ctx *Context, hash *Hash) (count i func (ec *EthereumClient) GetTransactionInBlock(ctx *Context, hash *Hash, index int) (tx *Transaction, _ error) { rawTx, err := ec.client.TransactionInBlock(ctx.context, hash.hash, uint(index)) return &Transaction{rawTx}, err - } // GetTransactionReceipt returns the receipt of a transaction by transaction hash. diff --git a/mobile/ethereum.go b/mobile/ethereum.go index ef8d8716..d5058e4e 100644 --- a/mobile/ethereum.go +++ b/mobile/ethereum.go @@ -21,8 +21,8 @@ package geth import ( "errors" - ethereum "github.com/cryptoecc/ETH-ECC" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" ) // Subscription represents an event subscription where events are @@ -78,11 +78,21 @@ type SyncProgress struct { progress ethereum.SyncProgress } -func (p *SyncProgress) GetStartingBlock() int64 { return int64(p.progress.StartingBlock) } -func (p *SyncProgress) GetCurrentBlock() int64 { return int64(p.progress.CurrentBlock) } -func (p *SyncProgress) GetHighestBlock() int64 { return int64(p.progress.HighestBlock) } -func (p *SyncProgress) GetPulledStates() int64 { return int64(p.progress.PulledStates) } -func (p *SyncProgress) GetKnownStates() int64 { return int64(p.progress.KnownStates) } +func (p *SyncProgress) GetStartingBlock() int64 { return int64(p.progress.StartingBlock) } +func (p *SyncProgress) GetCurrentBlock() int64 { return int64(p.progress.CurrentBlock) } +func (p *SyncProgress) GetHighestBlock() int64 { return int64(p.progress.HighestBlock) } +func (p *SyncProgress) GetSyncedAccounts() int64 { return int64(p.progress.SyncedAccounts) } +func (p *SyncProgress) GetSyncedAccountBytes() int64 { return int64(p.progress.SyncedAccountBytes) } +func (p *SyncProgress) GetSyncedBytecodes() int64 { return int64(p.progress.SyncedBytecodes) } +func (p *SyncProgress) GetSyncedBytecodeBytes() int64 { return int64(p.progress.SyncedBytecodeBytes) } +func (p *SyncProgress) GetSyncedStorage() int64 { return int64(p.progress.SyncedStorage) } +func (p *SyncProgress) GetSyncedStorageBytes() int64 { return int64(p.progress.SyncedStorageBytes) } +func (p *SyncProgress) GetHealedTrienodes() int64 { return int64(p.progress.HealedTrienodes) } +func (p *SyncProgress) GetHealedTrienodeBytes() int64 { return int64(p.progress.HealedTrienodeBytes) } +func (p *SyncProgress) GetHealedBytecodes() int64 { return int64(p.progress.HealedBytecodes) } +func (p *SyncProgress) GetHealedBytecodeBytes() int64 { return int64(p.progress.HealedBytecodeBytes) } +func (p *SyncProgress) GetHealingTrienodes() int64 { return int64(p.progress.HealingTrienodes) } +func (p *SyncProgress) GetHealingBytecode() int64 { return int64(p.progress.HealingBytecode) } // Topics is a set of topic lists to filter events with. type Topics struct{ topics [][]common.Hash } diff --git a/mobile/geth.go b/mobile/geth.go index 2d69e0df..204e29c8 100644 --- a/mobile/geth.go +++ b/mobile/geth.go @@ -24,18 +24,17 @@ import ( "fmt" "path/filepath" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/eth" - "github.com/cryptoecc/ETH-ECC/eth/downloader" - "github.com/cryptoecc/ETH-ECC/ethclient" - "github.com/cryptoecc/ETH-ECC/ethstats" - "github.com/cryptoecc/ETH-ECC/internal/debug" - "github.com/cryptoecc/ETH-ECC/les" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/params" - whisper "github.com/cryptoecc/ETH-ECC/whisper/whisperv6" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/ethstats" + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/les" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/nat" + "github.com/ethereum/go-ethereum/params" ) // NodeConfig represents the collection of configuration values to fine tune the Geth @@ -71,9 +70,6 @@ type NodeConfig struct { // It has the form "nodename:secret@host:port" EthereumNetStats string - // WhisperEnabled specifies whether the node should run the Whisper protocol. - WhisperEnabled bool - // Listening address of pprof server. PprofAddress string } @@ -94,6 +90,22 @@ func NewNodeConfig() *NodeConfig { return &config } +// AddBootstrapNode adds an additional bootstrap node to the node config. +func (conf *NodeConfig) AddBootstrapNode(node *Enode) { + conf.BootstrapNodes.Append(node) +} + +// EncodeJSON encodes a NodeConfig into a JSON data dump. +func (conf *NodeConfig) EncodeJSON() (string, error) { + data, err := json.Marshal(conf) + return string(data), err +} + +// String returns a printable representation of the node config. +func (conf *NodeConfig) String() string { + return encodeOrError(conf) +} + // Node represents a Geth Ethereum node instance. type Node struct { node *node.Node @@ -113,7 +125,7 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { } if config.PprofAddress != "" { - debug.StartPProf(config.PprofAddress) + debug.StartPProf(config.PprofAddress, true) } // Create the empty networking stack @@ -144,68 +156,73 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { // Parse the user supplied genesis spec if not mainnet genesis = new(core.Genesis) if err := json.Unmarshal([]byte(config.EthereumGenesis), genesis); err != nil { + rawStack.Close() return nil, fmt.Errorf("invalid genesis spec: %v", err) } - // If we have the testnet, hard code the chain configs too - if config.EthereumGenesis == TestnetGenesis() { - genesis.Config = params.TestnetChainConfig + // If we have the Ropsten testnet, hard code the chain configs too + if config.EthereumGenesis == RopstenGenesis() { + genesis.Config = params.RopstenChainConfig if config.EthereumNetworkID == 1 { config.EthereumNetworkID = 3 } } + // If we have the Sepolia testnet, hard code the chain configs too + if config.EthereumGenesis == SepoliaGenesis() { + genesis.Config = params.SepoliaChainConfig + if config.EthereumNetworkID == 1 { + config.EthereumNetworkID = 11155111 + } + } + // If we have the Rinkeby testnet, hard code the chain configs too + if config.EthereumGenesis == RinkebyGenesis() { + genesis.Config = params.RinkebyChainConfig + if config.EthereumNetworkID == 1 { + config.EthereumNetworkID = 4 + } + } + // If we have the Goerli testnet, hard code the chain configs too + if config.EthereumGenesis == GoerliGenesis() { + genesis.Config = params.GoerliChainConfig + if config.EthereumNetworkID == 1 { + config.EthereumNetworkID = 5 + } + } } // Register the Ethereum protocol if requested if config.EthereumEnabled { - ethConf := eth.DefaultConfig + ethConf := ethconfig.Defaults ethConf.Genesis = genesis ethConf.SyncMode = downloader.LightSync ethConf.NetworkId = uint64(config.EthereumNetworkID) ethConf.DatabaseCache = config.EthereumDatabaseCache - if err := rawStack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return les.New(ctx, ðConf) - }); err != nil { + lesBackend, err := les.New(rawStack, ðConf) + if err != nil { + rawStack.Close() return nil, fmt.Errorf("ethereum init: %v", err) } // If netstats reporting is requested, do it if config.EthereumNetStats != "" { - if err := rawStack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - var lesServ *les.LightEthereum - ctx.Service(&lesServ) - - return ethstats.New(config.EthereumNetStats, nil, lesServ) - }); err != nil { + if err := ethstats.New(rawStack, lesBackend.ApiBackend, lesBackend.Engine(), config.EthereumNetStats); err != nil { + rawStack.Close() return nil, fmt.Errorf("netstats init: %v", err) } } } - // Register the Whisper protocol if requested - if config.WhisperEnabled { - if err := rawStack.Register(func(*node.ServiceContext) (node.Service, error) { - return whisper.New(&whisper.DefaultConfig), nil - }); err != nil { - return nil, fmt.Errorf("whisper init: %v", err) - } - } 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. +// Close terminates a running node along with all it's services, tearing internal state +// down. It is 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 { + // TODO: recreate the node so it can be started multiple times return n.node.Start() } -// Stop terminates a running node along with all it's services. If the node was -// not started, an error is returned. -func (n *Node) Stop() error { - return n.node.Stop() -} - // GetEthereumClient retrieves a client to access the Ethereum subsystem. func (n *Node) GetEthereumClient() (client *EthereumClient, _ error) { rpc, err := n.node.Attach() diff --git a/mobile/geth_android.go b/mobile/geth_android.go index 8e4ebe63..cfdf1c28 100644 --- a/mobile/geth_android.go +++ b/mobile/geth_android.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build android // +build android package geth diff --git a/mobile/geth_ios.go b/mobile/geth_ios.go index 307cd085..aab83972 100644 --- a/mobile/geth_ios.go +++ b/mobile/geth_ios.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build ios // +build ios package geth diff --git a/mobile/geth_other.go b/mobile/geth_other.go index 6f0c5dda..c5cad4a7 100644 --- a/mobile/geth_other.go +++ b/mobile/geth_other.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build !android && !ios // +build !android,!ios package geth diff --git a/mobile/init.go b/mobile/init.go index 707d097e..94f5baf2 100644 --- a/mobile/init.go +++ b/mobile/init.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 . -// Contains initialization code for the mbile library. +// Contains initialization code for the mobile library. package geth @@ -22,7 +22,7 @@ import ( "os" "runtime" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) func init() { diff --git a/mobile/interface.go b/mobile/interface.go index 80a60f90..d5200d5b 100644 --- a/mobile/interface.go +++ b/mobile/interface.go @@ -22,7 +22,7 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // Interface represents a wrapped version of Go's interface{}, with the capacity diff --git a/mobile/interface_test.go b/mobile/interface_test.go index 7baafe25..4bd1af47 100644 --- a/mobile/interface_test.go +++ b/mobile/interface_test.go @@ -22,7 +22,7 @@ import ( "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) func TestInterfaceGetSet(t *testing.T) { diff --git a/mobile/logger.go b/mobile/logger.go index 52116c29..7078c4fd 100644 --- a/mobile/logger.go +++ b/mobile/logger.go @@ -19,7 +19,7 @@ package geth import ( "os" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // SetVerbosity sets the global verbosity level (between 0 and 6 - see logger/verbosity.go). diff --git a/mobile/p2p.go b/mobile/p2p.go index 1fc35f68..a80d9fff 100644 --- a/mobile/p2p.go +++ b/mobile/p2p.go @@ -21,7 +21,7 @@ package geth import ( "errors" - "github.com/cryptoecc/ETH-ECC/p2p" + "github.com/ethereum/go-ethereum/p2p" ) // NodeInfo represents pi short summary of the information known about the host. diff --git a/mobile/params.go b/mobile/params.go index fcb487de..2f4240b2 100644 --- a/mobile/params.go +++ b/mobile/params.go @@ -21,9 +21,9 @@ package geth import ( "encoding/json" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" ) // MainnetGenesis returns the JSON spec to use for the main Ethereum network. It @@ -32,9 +32,18 @@ func MainnetGenesis() string { return "" } -// TestnetGenesis returns the JSON spec to use for the Ethereum test network. -func TestnetGenesis() string { - enc, err := json.Marshal(core.DefaultTestnetGenesisBlock()) +// RopstenGenesis returns the JSON spec to use for the Ropsten test network. +func RopstenGenesis() string { + enc, err := json.Marshal(core.DefaultRopstenGenesisBlock()) + if err != nil { + panic(err) + } + return string(enc) +} + +// SepoliaGenesis returns the JSON spec to use for the Sepolia test network. +func SepoliaGenesis() string { + enc, err := json.Marshal(core.DefaultSepoliaGenesisBlock()) if err != nil { panic(err) } @@ -50,8 +59,9 @@ func RinkebyGenesis() string { return string(enc) } -func EccPoWGenesis() string { - enc, err := json.Marshal(core.EccGenesisBlock()) +// GoerliGenesis returns the JSON spec to use for the Goerli test network +func GoerliGenesis() string { + enc, err := json.Marshal(core.DefaultGoerliGenesisBlock()) if err != nil { panic(err) } @@ -61,9 +71,13 @@ func EccPoWGenesis() string { // FoundationBootnodes returns the enode URLs of the P2P bootstrap nodes operated // by the foundation running the V5 discovery protocol. func FoundationBootnodes() *Enodes { - nodes := &Enodes{nodes: make([]*discv5.Node, len(params.DiscoveryV5Bootnodes))} - for i, url := range params.DiscoveryV5Bootnodes { - nodes.nodes[i] = discv5.MustParseNode(url) + nodes := &Enodes{nodes: make([]*enode.Node, len(params.MainnetBootnodes))} + for i, url := range params.MainnetBootnodes { + var err error + nodes.nodes[i], err = enode.Parse(enode.ValidSchemes, url) + if err != nil { + panic("invalid node URL: " + err.Error()) + } } return nodes } diff --git a/mobile/primitives.go b/mobile/primitives.go index bb058376..7e1ab26e 100644 --- a/mobile/primitives.go +++ b/mobile/primitives.go @@ -22,7 +22,7 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // Strings represents s slice of strs. diff --git a/mobile/shhclient.go b/mobile/shhclient.go deleted file mode 100644 index f06f03f6..00000000 --- a/mobile/shhclient.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 . - -// Contains a wrapper for the Whisper client. - -package geth - -import ( - "github.com/cryptoecc/ETH-ECC/whisper/shhclient" - whisper "github.com/cryptoecc/ETH-ECC/whisper/whisperv6" -) - -// WhisperClient provides access to the Ethereum APIs. -type WhisperClient struct { - client *shhclient.Client -} - -// NewWhisperClient connects a client to the given URL. -func NewWhisperClient(rawurl string) (client *WhisperClient, _ error) { - rawClient, err := shhclient.Dial(rawurl) - return &WhisperClient{rawClient}, err -} - -// GetVersion returns the Whisper sub-protocol version. -func (wc *WhisperClient) GetVersion(ctx *Context) (version string, _ error) { - return wc.client.Version(ctx.context) -} - -// Info returns diagnostic information about the whisper node. -func (wc *WhisperClient) GetInfo(ctx *Context) (info *Info, _ error) { - rawInfo, err := wc.client.Info(ctx.context) - return &Info{&rawInfo}, err -} - -// SetMaxMessageSize sets the maximal message size allowed by this node. Incoming -// and outgoing messages with a larger size will be rejected. Whisper message size -// can never exceed the limit imposed by the underlying P2P protocol (10 Mb). -func (wc *WhisperClient) SetMaxMessageSize(ctx *Context, size int32) error { - return wc.client.SetMaxMessageSize(ctx.context, uint32(size)) -} - -// SetMinimumPoW (experimental) sets the minimal PoW required by this node. -// This experimental function was introduced for the future dynamic adjustment of -// PoW requirement. If the node is overwhelmed with messages, it should raise the -// PoW requirement and notify the peers. The new value should be set relative to -// the old value (e.g. double). The old value could be obtained via shh_info call. -func (wc *WhisperClient) SetMinimumPoW(ctx *Context, pow float64) error { - return wc.client.SetMinimumPoW(ctx.context, pow) -} - -// Marks specific peer trusted, which will allow it to send historic (expired) messages. -// Note This function is not adding new nodes, the node needs to exists as a peer. -func (wc *WhisperClient) MarkTrustedPeer(ctx *Context, enode string) error { - return wc.client.MarkTrustedPeer(ctx.context, enode) -} - -// NewKeyPair generates a new public and private key pair for message decryption and encryption. -// It returns an identifier that can be used to refer to the key. -func (wc *WhisperClient) NewKeyPair(ctx *Context) (string, error) { - return wc.client.NewKeyPair(ctx.context) -} - -// AddPrivateKey stored the key pair, and returns its ID. -func (wc *WhisperClient) AddPrivateKey(ctx *Context, key []byte) (string, error) { - return wc.client.AddPrivateKey(ctx.context, key) -} - -// DeleteKeyPair delete the specifies key. -func (wc *WhisperClient) DeleteKeyPair(ctx *Context, id string) (string, error) { - return wc.client.DeleteKeyPair(ctx.context, id) -} - -// HasKeyPair returns an indication if the node has a private key or -// key pair matching the given ID. -func (wc *WhisperClient) HasKeyPair(ctx *Context, id string) (bool, error) { - return wc.client.HasKeyPair(ctx.context, id) -} - -// GetPublicKey return the public key for a key ID. -func (wc *WhisperClient) GetPublicKey(ctx *Context, id string) ([]byte, error) { - return wc.client.PublicKey(ctx.context, id) -} - -// GetPrivateKey return the private key for a key ID. -func (wc *WhisperClient) GetPrivateKey(ctx *Context, id string) ([]byte, error) { - return wc.client.PrivateKey(ctx.context, id) -} - -// NewSymmetricKey generates a random symmetric key and returns its identifier. -// Can be used encrypting and decrypting messages where the key is known to both parties. -func (wc *WhisperClient) NewSymmetricKey(ctx *Context) (string, error) { - return wc.client.NewSymmetricKey(ctx.context) -} - -// AddSymmetricKey stores the key, and returns its identifier. -func (wc *WhisperClient) AddSymmetricKey(ctx *Context, key []byte) (string, error) { - return wc.client.AddSymmetricKey(ctx.context, key) -} - -// GenerateSymmetricKeyFromPassword generates the key from password, stores it, and returns its identifier. -func (wc *WhisperClient) GenerateSymmetricKeyFromPassword(ctx *Context, passwd string) (string, error) { - return wc.client.GenerateSymmetricKeyFromPassword(ctx.context, passwd) -} - -// HasSymmetricKey returns an indication if the key associated with the given id is stored in the node. -func (wc *WhisperClient) HasSymmetricKey(ctx *Context, id string) (bool, error) { - return wc.client.HasSymmetricKey(ctx.context, id) -} - -// GetSymmetricKey returns the symmetric key associated with the given identifier. -func (wc *WhisperClient) GetSymmetricKey(ctx *Context, id string) ([]byte, error) { - return wc.client.GetSymmetricKey(ctx.context, id) -} - -// DeleteSymmetricKey deletes the symmetric key associated with the given identifier. -func (wc *WhisperClient) DeleteSymmetricKey(ctx *Context, id string) error { - return wc.client.DeleteSymmetricKey(ctx.context, id) -} - -// Post a message onto the network. -func (wc *WhisperClient) Post(ctx *Context, message *NewMessage) (string, error) { - return wc.client.Post(ctx.context, *message.newMessage) -} - -// NewHeadHandler is a client-side subscription callback to invoke on events and -// subscription failure. -type NewMessageHandler interface { - OnNewMessage(message *Message) - OnError(failure string) -} - -// SubscribeMessages subscribes to messages that match the given criteria. This method -// is only supported on bi-directional connections such as websockets and IPC. -// NewMessageFilter uses polling and is supported over HTTP. -func (wc *WhisperClient) SubscribeMessages(ctx *Context, criteria *Criteria, handler NewMessageHandler, buffer int) (*Subscription, error) { - // Subscribe to the event internally - ch := make(chan *whisper.Message, buffer) - rawSub, err := wc.client.SubscribeMessages(ctx.context, *criteria.criteria, ch) - if err != nil { - return nil, err - } - // Start up a dispatcher to feed into the callback - go func() { - for { - select { - case message := <-ch: - handler.OnNewMessage(&Message{message}) - - case err := <-rawSub.Err(): - if err != nil { - handler.OnError(err.Error()) - } - return - } - } - }() - return &Subscription{rawSub}, nil -} - -// NewMessageFilter creates a filter within the node. This filter can be used to poll -// for new messages (see FilterMessages) that satisfy the given criteria. A filter can -// timeout when it was polled for in whisper.filterTimeout. -func (wc *WhisperClient) NewMessageFilter(ctx *Context, criteria *Criteria) (string, error) { - return wc.client.NewMessageFilter(ctx.context, *criteria.criteria) -} - -// DeleteMessageFilter removes the filter associated with the given id. -func (wc *WhisperClient) DeleteMessageFilter(ctx *Context, id string) error { - return wc.client.DeleteMessageFilter(ctx.context, id) -} - -// GetFilterMessages retrieves all messages that are received between the last call to -// this function and match the criteria that where given when the filter was created. -func (wc *WhisperClient) GetFilterMessages(ctx *Context, id string) (*Messages, error) { - rawFilterMessages, err := wc.client.FilterMessages(ctx.context, id) - if err != nil { - return nil, err - } - res := make([]*whisper.Message, len(rawFilterMessages)) - copy(res, rawFilterMessages) - return &Messages{res}, nil -} diff --git a/mobile/types.go b/mobile/types.go index 3717eaba..f3f92e4d 100644 --- a/mobile/types.go +++ b/mobile/types.go @@ -23,12 +23,25 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/rlp" - whisper "github.com/cryptoecc/ETH-ECC/whisper/whisperv6" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" ) +type jsonEncoder interface { + EncodeJSON() (string, error) +} + +// encodeOrError tries to encode the object into json. +// If the encoding fails the resulting error is returned. +func encodeOrError(encoder jsonEncoder) string { + enc, err := encoder.EncodeJSON() + if err != nil { + return err.Error() + } + return enc +} + // A Nonce is a 64-bit hash which proves (combined with the mix-hash) that // a sufficient amount of computation has been carried out on a block. type Nonce struct { @@ -42,7 +55,12 @@ func (n *Nonce) GetBytes() []byte { // GetHex retrieves the hex string representation of the block nonce. func (n *Nonce) GetHex() string { - return fmt.Sprintf("0x%x", n.nonce[:]) + return fmt.Sprintf("%#x", n.nonce[:]) +} + +// String returns a printable representation of the nonce. +func (n *Nonce) String() string { + return n.GetHex() } // Bloom represents a 256 bit bloom filter. @@ -57,7 +75,12 @@ func (b *Bloom) GetBytes() []byte { // GetHex retrieves the hex string representation of the bloom filter. func (b *Bloom) GetHex() string { - return fmt.Sprintf("0x%x", b.bloom[:]) + return fmt.Sprintf("%#x", b.bloom[:]) +} + +// String returns a printable representation of the bloom filter. +func (b *Bloom) String() string { + return b.GetHex() } // Header represents a block header in the Ethereum blockchain. @@ -98,6 +121,11 @@ func (h *Header) EncodeJSON() (string, error) { return string(data), err } +// String returns a printable representation of the header. +func (h *Header) String() string { + return encodeOrError(h) +} + func (h *Header) GetParentHash() *Hash { return &Hash{h.header.ParentHash} } func (h *Header) GetUncleHash() *Hash { return &Hash{h.header.UncleHash} } func (h *Header) GetCoinbase() *Address { return &Address{h.header.Coinbase} } @@ -169,6 +197,11 @@ func (b *Block) EncodeJSON() (string, error) { return string(data), err } +// String returns a printable representation of the block. +func (b *Block) String() string { + return encodeOrError(b) +} + func (b *Block) GetParentHash() *Hash { return &Hash{b.block.ParentHash()} } func (b *Block) GetUncleHash() *Hash { return &Hash{b.block.UncleHash()} } func (b *Block) GetCoinbase() *Address { return &Address{b.block.Coinbase()} } @@ -245,6 +278,11 @@ func (tx *Transaction) EncodeJSON() (string, error) { return string(data), err } +// String returns a printable representation of the transaction. +func (tx *Transaction) String() string { + return encodeOrError(tx) +} + func (tx *Transaction) GetData() []byte { return tx.tx.Data() } func (tx *Transaction) GetGas() int64 { return int64(tx.tx.Gas()) } func (tx *Transaction) GetGasPrice() *BigInt { return &BigInt{tx.tx.GasPrice()} } @@ -254,19 +292,6 @@ func (tx *Transaction) GetNonce() int64 { return int64(tx.tx.Nonce()) } func (tx *Transaction) GetHash() *Hash { return &Hash{tx.tx.Hash()} } func (tx *Transaction) GetCost() *BigInt { return &BigInt{tx.tx.Cost()} } -// Deprecated: GetSigHash cannot know which signer to use. -func (tx *Transaction) GetSigHash() *Hash { return &Hash{types.HomesteadSigner{}.Hash(tx.tx)} } - -// Deprecated: use EthereumClient.TransactionSender -func (tx *Transaction) GetFrom(chainID *BigInt) (address *Address, _ error) { - var signer types.Signer = types.HomesteadSigner{} - if chainID != nil { - signer = types.NewEIP155Signer(chainID.bigint) - } - from, err := types.Sender(signer, tx.tx) - return &Address{from}, err -} - func (tx *Transaction) GetTo() *Address { if to := tx.tx.To(); to != nil { return &Address{*to} @@ -333,10 +358,15 @@ func NewReceiptFromJSON(data string) (*Receipt, error) { // EncodeJSON encodes a transaction receipt into a JSON data dump. func (r *Receipt) EncodeJSON() (string, error) { - data, err := rlp.EncodeToBytes(r.receipt) + data, err := json.Marshal(r.receipt) return string(data), err } +// String returns a printable representation of the receipt. +func (r *Receipt) String() string { + return encodeOrError(r) +} + func (r *Receipt) GetStatus() int { return int(r.receipt.Status) } func (r *Receipt) GetPostState() []byte { return r.receipt.PostState } func (r *Receipt) GetCumulativeGasUsed() int64 { return int64(r.receipt.CumulativeGasUsed) } @@ -345,95 +375,3 @@ func (r *Receipt) GetLogs() *Logs { return &Logs{r.receipt.Logs} } func (r *Receipt) GetTxHash() *Hash { return &Hash{r.receipt.TxHash} } func (r *Receipt) GetContractAddress() *Address { return &Address{r.receipt.ContractAddress} } func (r *Receipt) GetGasUsed() int64 { return int64(r.receipt.GasUsed) } - -// Info represents a diagnostic information about the whisper node. -type Info struct { - info *whisper.Info -} - -// NewMessage represents a new whisper message that is posted through the RPC. -type NewMessage struct { - newMessage *whisper.NewMessage -} - -func NewNewMessage() *NewMessage { - nm := &NewMessage{ - newMessage: new(whisper.NewMessage), - } - return nm -} - -func (nm *NewMessage) GetSymKeyID() string { return nm.newMessage.SymKeyID } -func (nm *NewMessage) SetSymKeyID(symKeyID string) { nm.newMessage.SymKeyID = symKeyID } -func (nm *NewMessage) GetPublicKey() []byte { return nm.newMessage.PublicKey } -func (nm *NewMessage) SetPublicKey(publicKey []byte) { - nm.newMessage.PublicKey = common.CopyBytes(publicKey) -} -func (nm *NewMessage) GetSig() string { return nm.newMessage.Sig } -func (nm *NewMessage) SetSig(sig string) { nm.newMessage.Sig = sig } -func (nm *NewMessage) GetTTL() int64 { return int64(nm.newMessage.TTL) } -func (nm *NewMessage) SetTTL(ttl int64) { nm.newMessage.TTL = uint32(ttl) } -func (nm *NewMessage) GetPayload() []byte { return nm.newMessage.Payload } -func (nm *NewMessage) SetPayload(payload []byte) { nm.newMessage.Payload = common.CopyBytes(payload) } -func (nm *NewMessage) GetPowTime() int64 { return int64(nm.newMessage.PowTime) } -func (nm *NewMessage) SetPowTime(powTime int64) { nm.newMessage.PowTime = uint32(powTime) } -func (nm *NewMessage) GetPowTarget() float64 { return nm.newMessage.PowTarget } -func (nm *NewMessage) SetPowTarget(powTarget float64) { nm.newMessage.PowTarget = powTarget } -func (nm *NewMessage) GetTargetPeer() string { return nm.newMessage.TargetPeer } -func (nm *NewMessage) SetTargetPeer(targetPeer string) { nm.newMessage.TargetPeer = targetPeer } -func (nm *NewMessage) GetTopic() []byte { return nm.newMessage.Topic[:] } -func (nm *NewMessage) SetTopic(topic []byte) { nm.newMessage.Topic = whisper.BytesToTopic(topic) } - -// Message represents a whisper message. -type Message struct { - message *whisper.Message -} - -func (m *Message) GetSig() []byte { return m.message.Sig } -func (m *Message) GetTTL() int64 { return int64(m.message.TTL) } -func (m *Message) GetTimestamp() int64 { return int64(m.message.Timestamp) } -func (m *Message) GetPayload() []byte { return m.message.Payload } -func (m *Message) GetPoW() float64 { return m.message.PoW } -func (m *Message) GetHash() []byte { return m.message.Hash } -func (m *Message) GetDst() []byte { return m.message.Dst } - -// Messages represents an array of messages. -type Messages struct { - messages []*whisper.Message -} - -// Size returns the number of messages in the slice. -func (m *Messages) Size() int { - return len(m.messages) -} - -// Get returns the message at the given index from the slice. -func (m *Messages) Get(index int) (message *Message, _ error) { - if index < 0 || index >= len(m.messages) { - return nil, errors.New("index out of bounds") - } - return &Message{m.messages[index]}, nil -} - -// Criteria holds various filter options for inbound messages. -type Criteria struct { - criteria *whisper.Criteria -} - -func NewCriteria(topic []byte) *Criteria { - c := &Criteria{ - criteria: new(whisper.Criteria), - } - encodedTopic := whisper.BytesToTopic(topic) - c.criteria.Topics = []whisper.TopicType{encodedTopic} - return c -} - -func (c *Criteria) GetSymKeyID() string { return c.criteria.SymKeyID } -func (c *Criteria) SetSymKeyID(symKeyID string) { c.criteria.SymKeyID = symKeyID } -func (c *Criteria) GetPrivateKeyID() string { return c.criteria.PrivateKeyID } -func (c *Criteria) SetPrivateKeyID(privateKeyID string) { c.criteria.PrivateKeyID = privateKeyID } -func (c *Criteria) GetSig() []byte { return c.criteria.Sig } -func (c *Criteria) SetSig(sig []byte) { c.criteria.Sig = common.CopyBytes(sig) } -func (c *Criteria) GetMinPow() float64 { return c.criteria.MinPow } -func (c *Criteria) SetMinPow(pow float64) { c.criteria.MinPow = pow } diff --git a/mobile/vm.go b/mobile/vm.go index ca95c742..72093e3d 100644 --- a/mobile/vm.go +++ b/mobile/vm.go @@ -21,7 +21,7 @@ package geth import ( "errors" - "github.com/cryptoecc/ETH-ECC/core/types" + "github.com/ethereum/go-ethereum/core/types" ) // Log represents a contract log event. These events are generated by the LOG diff --git a/node/api.go b/node/api.go index 71c68b48..67953a81 100644 --- a/node/api.go +++ b/node/api.go @@ -21,28 +21,40 @@ import ( "fmt" "strings" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rpc" ) -// PrivateAdminAPI is the collection of administrative API methods exposed only -// over a secure RPC channel. -type PrivateAdminAPI struct { - node *Node // Node interfaced by this API +// apis returns the collection of built-in RPC APIs. +func (n *Node) apis() []rpc.API { + return []rpc.API{ + { + Namespace: "admin", + Service: &adminAPI{n}, + }, { + Namespace: "debug", + Service: debug.Handler, + }, { + Namespace: "web3", + Service: &web3API{n}, + }, + } } -// NewPrivateAdminAPI creates a new API definition for the private admin methods -// of the node itself. -func NewPrivateAdminAPI(node *Node) *PrivateAdminAPI { - return &PrivateAdminAPI{node: node} +// adminAPI is the collection of administrative API methods exposed over +// both secure and unsecure RPC channels. +type adminAPI struct { + node *Node // Node interfaced by this API } // AddPeer requests connecting to a remote node, and also maintaining the new // connection at all times, even reconnecting if it is lost. -func (api *PrivateAdminAPI) AddPeer(url string) (bool, error) { +func (api *adminAPI) AddPeer(url string) (bool, error) { // Make sure the server is running, fail otherwise server := api.node.Server() if server == nil { @@ -58,7 +70,7 @@ func (api *PrivateAdminAPI) AddPeer(url string) (bool, error) { } // RemovePeer disconnects from a remote node if the connection exists -func (api *PrivateAdminAPI) RemovePeer(url string) (bool, error) { +func (api *adminAPI) RemovePeer(url string) (bool, error) { // Make sure the server is running, fail otherwise server := api.node.Server() if server == nil { @@ -74,7 +86,7 @@ func (api *PrivateAdminAPI) RemovePeer(url string) (bool, error) { } // AddTrustedPeer allows a remote node to always connect, even if slots are full -func (api *PrivateAdminAPI) AddTrustedPeer(url string) (bool, error) { +func (api *adminAPI) AddTrustedPeer(url string) (bool, error) { // Make sure the server is running, fail otherwise server := api.node.Server() if server == nil { @@ -90,7 +102,7 @@ func (api *PrivateAdminAPI) AddTrustedPeer(url string) (bool, error) { // RemoveTrustedPeer removes a remote node from the trusted peer set, but it // does not disconnect it automatically. -func (api *PrivateAdminAPI) RemoveTrustedPeer(url string) (bool, error) { +func (api *adminAPI) RemoveTrustedPeer(url string) (bool, error) { // Make sure the server is running, fail otherwise server := api.node.Server() if server == nil { @@ -106,7 +118,7 @@ func (api *PrivateAdminAPI) RemoveTrustedPeer(url string) (bool, error) { // PeerEvents creates an RPC subscription which receives peer events from the // node's p2p.Server -func (api *PrivateAdminAPI) PeerEvents(ctx context.Context) (*rpc.Subscription, error) { +func (api *adminAPI) PeerEvents(ctx context.Context) (*rpc.Subscription, error) { // Make sure the server is running, fail otherwise server := api.node.Server() if server == nil { @@ -142,15 +154,12 @@ func (api *PrivateAdminAPI) PeerEvents(ctx context.Context) (*rpc.Subscription, return rpcSub, nil } -// StartRPC starts the HTTP RPC API server. -func (api *PrivateAdminAPI) StartRPC(host *string, port *int, cors *string, apis *string, vhosts *string) (bool, error) { +// StartHTTP starts the HTTP RPC API server. +func (api *adminAPI) StartHTTP(host *string, port *int, cors *string, apis *string, vhosts *string) (bool, error) { api.node.lock.Lock() defer api.node.lock.Unlock() - if api.node.httpHandler != nil { - return false, fmt.Errorf("HTTP RPC already running on %s", api.node.httpEndpoint) - } - + // Determine host and port. if host == nil { h := DefaultHTTPHost if api.node.config.HTTPHost != "" { @@ -162,57 +171,69 @@ func (api *PrivateAdminAPI) StartRPC(host *string, port *int, cors *string, apis port = &api.node.config.HTTPPort } - allowedOrigins := api.node.config.HTTPCors + // Determine config. + config := httpConfig{ + CorsAllowedOrigins: api.node.config.HTTPCors, + Vhosts: api.node.config.HTTPVirtualHosts, + Modules: api.node.config.HTTPModules, + } if cors != nil { - allowedOrigins = nil + config.CorsAllowedOrigins = nil for _, origin := range strings.Split(*cors, ",") { - allowedOrigins = append(allowedOrigins, strings.TrimSpace(origin)) + config.CorsAllowedOrigins = append(config.CorsAllowedOrigins, strings.TrimSpace(origin)) } } - - allowedVHosts := api.node.config.HTTPVirtualHosts if vhosts != nil { - allowedVHosts = nil + config.Vhosts = nil for _, vhost := range strings.Split(*host, ",") { - allowedVHosts = append(allowedVHosts, strings.TrimSpace(vhost)) + config.Vhosts = append(config.Vhosts, strings.TrimSpace(vhost)) } } - - modules := api.node.httpWhitelist if apis != nil { - modules = nil + config.Modules = nil for _, m := range strings.Split(*apis, ",") { - modules = append(modules, strings.TrimSpace(m)) + config.Modules = append(config.Modules, strings.TrimSpace(m)) } } - if err := api.node.startHTTP(fmt.Sprintf("%s:%d", *host, *port), api.node.rpcAPIs, modules, allowedOrigins, allowedVHosts, api.node.config.HTTPTimeouts); err != nil { + if err := api.node.http.setListenAddr(*host, *port); err != nil { + return false, err + } + if err := api.node.http.enableRPC(api.node.rpcAPIs, config); err != nil { + return false, err + } + if err := api.node.http.start(); err != nil { return false, err } return true, nil } -// StopRPC terminates an already running HTTP RPC API endpoint. -func (api *PrivateAdminAPI) StopRPC() (bool, error) { - api.node.lock.Lock() - defer api.node.lock.Unlock() +// StartRPC starts the HTTP RPC API server. +// Deprecated: use StartHTTP instead. +func (api *adminAPI) StartRPC(host *string, port *int, cors *string, apis *string, vhosts *string) (bool, error) { + log.Warn("Deprecation warning", "method", "admin.StartRPC", "use-instead", "admin.StartHTTP") + return api.StartHTTP(host, port, cors, apis, vhosts) +} - if api.node.httpHandler == nil { - return false, fmt.Errorf("HTTP RPC not running") - } - api.node.stopHTTP() +// StopHTTP shuts down the HTTP server. +func (api *adminAPI) StopHTTP() (bool, error) { + api.node.http.stop() return true, nil } +// StopRPC shuts down the HTTP server. +// Deprecated: use StopHTTP instead. +func (api *adminAPI) StopRPC() (bool, error) { + log.Warn("Deprecation warning", "method", "admin.StopRPC", "use-instead", "admin.StopHTTP") + return api.StopHTTP() +} + // StartWS starts the websocket RPC API server. -func (api *PrivateAdminAPI) StartWS(host *string, port *int, allowedOrigins *string, apis *string) (bool, error) { +func (api *adminAPI) StartWS(host *string, port *int, allowedOrigins *string, apis *string) (bool, error) { api.node.lock.Lock() defer api.node.lock.Unlock() - if api.node.wsHandler != nil { - return false, fmt.Errorf("WebSocket RPC already running on %s", api.node.wsEndpoint) - } - + // Determine host and port. if host == nil { h := DefaultWSHost if api.node.config.WSHost != "" { @@ -224,55 +245,51 @@ func (api *PrivateAdminAPI) StartWS(host *string, port *int, allowedOrigins *str port = &api.node.config.WSPort } - origins := api.node.config.WSOrigins - if allowedOrigins != nil { - origins = nil - for _, origin := range strings.Split(*allowedOrigins, ",") { - origins = append(origins, strings.TrimSpace(origin)) - } + // Determine config. + config := wsConfig{ + Modules: api.node.config.WSModules, + Origins: api.node.config.WSOrigins, + // ExposeAll: api.node.config.WSExposeAll, } - - modules := api.node.config.WSModules if apis != nil { - modules = nil + config.Modules = nil for _, m := range strings.Split(*apis, ",") { - modules = append(modules, strings.TrimSpace(m)) + config.Modules = append(config.Modules, strings.TrimSpace(m)) + } + } + if allowedOrigins != nil { + config.Origins = nil + for _, origin := range strings.Split(*allowedOrigins, ",") { + config.Origins = append(config.Origins, strings.TrimSpace(origin)) } } - if err := api.node.startWS(fmt.Sprintf("%s:%d", *host, *port), api.node.rpcAPIs, modules, origins, api.node.config.WSExposeAll); err != nil { + // Enable WebSocket on the server. + server := api.node.wsServerForPort(*port, false) + if err := server.setListenAddr(*host, *port); err != nil { return false, err } - return true, nil -} - -// StopWS terminates an already running websocket RPC API endpoint. -func (api *PrivateAdminAPI) StopWS() (bool, error) { - api.node.lock.Lock() - defer api.node.lock.Unlock() - - if api.node.wsHandler == nil { - return false, fmt.Errorf("WebSocket RPC not running") + openApis, _ := api.node.GetAPIs() + if err := server.enableWS(openApis, config); err != nil { + return false, err + } + if err := server.start(); err != nil { + return false, err } - api.node.stopWS() + api.node.http.log.Info("WebSocket endpoint opened", "url", api.node.WSEndpoint()) return true, nil } -// PublicAdminAPI is the collection of administrative API methods exposed over -// both secure and unsecure RPC channels. -type PublicAdminAPI struct { - node *Node // Node interfaced by this API -} - -// NewPublicAdminAPI creates a new API definition for the public admin methods -// of the node itself. -func NewPublicAdminAPI(node *Node) *PublicAdminAPI { - return &PublicAdminAPI{node: node} +// StopWS terminates all WebSocket servers. +func (api *adminAPI) StopWS() (bool, error) { + api.node.http.stopWS() + api.node.ws.stop() + return true, nil } // Peers retrieves all the information we know about each individual peer at the // protocol granularity. -func (api *PublicAdminAPI) Peers() ([]*p2p.PeerInfo, error) { +func (api *adminAPI) Peers() ([]*p2p.PeerInfo, error) { server := api.node.Server() if server == nil { return nil, ErrNodeStopped @@ -282,7 +299,7 @@ func (api *PublicAdminAPI) Peers() ([]*p2p.PeerInfo, error) { // NodeInfo retrieves all the information we know about the host node at the // protocol granularity. -func (api *PublicAdminAPI) NodeInfo() (*p2p.NodeInfo, error) { +func (api *adminAPI) NodeInfo() (*p2p.NodeInfo, error) { server := api.node.Server() if server == nil { return nil, ErrNodeStopped @@ -291,27 +308,22 @@ func (api *PublicAdminAPI) NodeInfo() (*p2p.NodeInfo, error) { } // Datadir retrieves the current data directory the node is using. -func (api *PublicAdminAPI) Datadir() string { +func (api *adminAPI) Datadir() string { return api.node.DataDir() } -// PublicWeb3API offers helper utils -type PublicWeb3API struct { +// web3API offers helper utils +type web3API struct { stack *Node } -// NewPublicWeb3API creates a new Web3Service instance -func NewPublicWeb3API(stack *Node) *PublicWeb3API { - return &PublicWeb3API{stack} -} - // ClientVersion returns the node name -func (s *PublicWeb3API) ClientVersion() string { +func (s *web3API) ClientVersion() string { return s.stack.Server().Name } // Sha3 applies the ethereum sha3 implementation on the input. // It assumes the input is hex encoded. -func (s *PublicWeb3API) Sha3(input hexutil.Bytes) hexutil.Bytes { +func (s *web3API) Sha3(input hexutil.Bytes) hexutil.Bytes { return crypto.Keccak256(input) } diff --git a/node/api_test.go b/node/api_test.go new file mode 100644 index 00000000..d76cb943 --- /dev/null +++ b/node/api_test.go @@ -0,0 +1,352 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +import ( + "bytes" + "io" + "net" + "net/http" + "net/url" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/rpc" + "github.com/stretchr/testify/assert" +) + +// This test uses the admin_startRPC and admin_startWS APIs, +// checking whether the HTTP server is started correctly. +func TestStartRPC(t *testing.T) { + type test struct { + name string + cfg Config + fn func(*testing.T, *Node, *adminAPI) + + // Checks. These run after the node is configured and all API calls have been made. + wantReachable bool // whether the HTTP server should be reachable at all + wantHandlers bool // whether RegisterHandler handlers should be accessible + wantRPC bool // whether JSON-RPC/HTTP should be accessible + wantWS bool // whether JSON-RPC/WS should be accessible + } + + tests := []test{ + { + name: "all off", + cfg: Config{}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "rpc enabled through config", + cfg: Config{HTTPHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: false, + }, + { + name: "rpc enabled through API", + cfg: Config{}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StartHTTP(sp("127.0.0.1"), ip(0), nil, nil, nil) + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: false, + }, + { + name: "rpc start again after failure", + cfg: Config{}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + // Listen on a random port. + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal("can't listen:", err) + } + defer listener.Close() + port := listener.Addr().(*net.TCPAddr).Port + + // Now try to start RPC on that port. This should fail. + _, err = api.StartHTTP(sp("127.0.0.1"), ip(port), nil, nil, nil) + if err == nil { + t.Fatal("StartHTTP should have failed on port", port) + } + + // Try again after unblocking the port. It should work this time. + listener.Close() + _, err = api.StartHTTP(sp("127.0.0.1"), ip(port), nil, nil, nil) + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: false, + }, + { + name: "rpc stopped through API", + cfg: Config{HTTPHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StopHTTP() + assert.NoError(t, err) + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "rpc stopped twice", + cfg: Config{HTTPHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StopHTTP() + assert.NoError(t, err) + + _, err = api.StopHTTP() + assert.NoError(t, err) + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "ws enabled through config", + cfg: Config{WSHost: "127.0.0.1"}, + wantReachable: true, + wantHandlers: false, + wantRPC: false, + wantWS: true, + }, + { + name: "ws enabled through API", + cfg: Config{}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StartWS(sp("127.0.0.1"), ip(0), nil, nil) + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: false, + wantRPC: false, + wantWS: true, + }, + { + name: "ws stopped through API", + cfg: Config{WSHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StopWS() + assert.NoError(t, err) + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "ws stopped twice", + cfg: Config{WSHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StopWS() + assert.NoError(t, err) + + _, err = api.StopWS() + assert.NoError(t, err) + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "ws enabled after RPC", + cfg: Config{HTTPHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + wsport := n.http.port + _, err := api.StartWS(sp("127.0.0.1"), ip(wsport), nil, nil) + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: true, + }, + { + name: "ws enabled after RPC then stopped", + cfg: Config{HTTPHost: "127.0.0.1"}, + fn: func(t *testing.T, n *Node, api *adminAPI) { + wsport := n.http.port + _, err := api.StartWS(sp("127.0.0.1"), ip(wsport), nil, nil) + assert.NoError(t, err) + + _, err = api.StopWS() + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: false, + }, + { + name: "rpc stopped with ws enabled", + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StartHTTP(sp("127.0.0.1"), ip(0), nil, nil, nil) + assert.NoError(t, err) + + wsport := n.http.port + _, err = api.StartWS(sp("127.0.0.1"), ip(wsport), nil, nil) + assert.NoError(t, err) + + _, err = api.StopHTTP() + assert.NoError(t, err) + }, + wantReachable: false, + wantHandlers: false, + wantRPC: false, + wantWS: false, + }, + { + name: "rpc enabled after ws", + fn: func(t *testing.T, n *Node, api *adminAPI) { + _, err := api.StartWS(sp("127.0.0.1"), ip(0), nil, nil) + assert.NoError(t, err) + + wsport := n.http.port + _, err = api.StartHTTP(sp("127.0.0.1"), ip(wsport), nil, nil, nil) + assert.NoError(t, err) + }, + wantReachable: true, + wantHandlers: true, + wantRPC: true, + wantWS: true, + }, + } + + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + // Apply some sane defaults. + config := test.cfg + // config.Logger = testlog.Logger(t, log.LvlDebug) + config.P2P.NoDiscovery = true + + // Create Node. + stack, err := New(&config) + if err != nil { + t.Fatal("can't create node:", err) + } + defer stack.Close() + + // Register the test handler. + stack.RegisterHandler("test", "/test", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("OK")) + })) + + if err := stack.Start(); err != nil { + t.Fatal("can't start node:", err) + } + + // Run the API call hook. + if test.fn != nil { + test.fn(t, stack, &adminAPI{stack}) + } + + // Check if the HTTP endpoints are available. + baseURL := stack.HTTPEndpoint() + reachable := checkReachable(baseURL) + handlersAvailable := checkBodyOK(baseURL + "/test") + rpcAvailable := checkRPC(baseURL) + wsAvailable := checkRPC(strings.Replace(baseURL, "http://", "ws://", 1)) + if reachable != test.wantReachable { + t.Errorf("HTTP server is %sreachable, want it %sreachable", not(reachable), not(test.wantReachable)) + } + if handlersAvailable != test.wantHandlers { + t.Errorf("RegisterHandler handlers %savailable, want them %savailable", not(handlersAvailable), not(test.wantHandlers)) + } + if rpcAvailable != test.wantRPC { + t.Errorf("HTTP RPC %savailable, want it %savailable", not(rpcAvailable), not(test.wantRPC)) + } + if wsAvailable != test.wantWS { + t.Errorf("WS RPC %savailable, want it %savailable", not(wsAvailable), not(test.wantWS)) + } + }) + } +} + +// checkReachable checks if the TCP endpoint in rawurl is open. +func checkReachable(rawurl string) bool { + u, err := url.Parse(rawurl) + if err != nil { + panic(err) + } + conn, err := net.Dial("tcp", u.Host) + if err != nil { + return false + } + conn.Close() + return true +} + +// checkBodyOK checks whether the given HTTP URL responds with 200 OK and body "OK". +func checkBodyOK(url string) bool { + resp, err := http.Get(url) + if err != nil { + return false + } + defer resp.Body.Close() + + if resp.StatusCode != 200 { + return false + } + buf := make([]byte, 2) + if _, err = io.ReadFull(resp.Body, buf); err != nil { + return false + } + return bytes.Equal(buf, []byte("OK")) +} + +// checkRPC checks whether JSON-RPC works against the given URL. +func checkRPC(url string) bool { + c, err := rpc.Dial(url) + if err != nil { + return false + } + defer c.Close() + + _, err = c.SupportedModules() + return err == nil +} + +// string/int pointer helpers. +func sp(s string) *string { return &s } +func ip(i int) *int { return &i } + +func not(ok bool) string { + if ok { + return "" + } + return "not " +} diff --git a/node/config.go b/node/config.go index 77985e2c..2047299f 100644 --- a/node/config.go +++ b/node/config.go @@ -19,28 +19,23 @@ package node import ( "crypto/ecdsa" "fmt" - "io/ioutil" "os" "path/filepath" "runtime" "strings" "sync" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/external" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/accounts/scwallet" - "github.com/cryptoecc/ETH-ECC/accounts/usbwallet" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rpc" ) const ( datadirPrivateKey = "nodekey" // Path within the datadir to the node's private key + datadirJWTKey = "jwtsecret" // Path within the datadir to the node's jwt secret datadirDefaultKeyStore = "keystore" // Path within the datadir to the keystore datadirStaticNodes = "static-nodes.json" // Path within the datadir to the static node list datadirTrustedNodes = "trusted-nodes.json" // Path within the datadir to the trusted node list @@ -83,7 +78,7 @@ type Config struct { KeyStoreDir string `toml:",omitempty"` // ExternalSigner specifies an external URI for a clef-type signer - ExternalSigner string `toml:"omitempty"` + ExternalSigner string `toml:",omitempty"` // UseLightweightKDF lowers the memory and CPU requirements of the key store // scrypt KDF at the expense of security. @@ -93,8 +88,12 @@ type Config struct { InsecureUnlockAllowed bool `toml:",omitempty"` // NoUSB disables hardware wallet monitoring and connectivity. + // Deprecated: USB monitoring is disabled by default and must be enabled explicitly. NoUSB bool `toml:",omitempty"` + // USB enables hardware wallet monitoring and connectivity. + USB bool `toml:",omitempty"` + // SmartCardDaemonPath is the path to the smartcard daemon's socket SmartCardDaemonPath string `toml:",omitempty"` @@ -102,11 +101,11 @@ type Config struct { // 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 // relative), then that specific path is enforced. An empty path disables IPC. - IPCPath string `toml:",omitempty"` + IPCPath string // HTTPHost is the host interface on which to start the HTTP RPC server. If this // field is empty, no HTTP API endpoint will be started. - HTTPHost string `toml:",omitempty"` + HTTPHost string // HTTPPort is the TCP port number on which to start the HTTP RPC server. The // default zero value is/ valid and will pick a port number randomly (useful @@ -130,21 +129,37 @@ type Config struct { // HTTPModules is a list of API modules to expose via the HTTP RPC interface. // If the module list is empty, all RPC API endpoints designated public will be // exposed. - HTTPModules []string `toml:",omitempty"` + HTTPModules []string // HTTPTimeouts allows for customization of the timeout values used by the HTTP RPC // interface. HTTPTimeouts rpc.HTTPTimeouts + // HTTPPathPrefix specifies a path prefix on which http-rpc is to be served. + HTTPPathPrefix string `toml:",omitempty"` + + // AuthAddr is the listening address on which authenticated APIs are provided. + AuthAddr string `toml:",omitempty"` + + // AuthPort is the port number on which authenticated APIs are provided. + AuthPort int `toml:",omitempty"` + + // AuthVirtualHosts is the list of virtual hostnames which are allowed on incoming requests + // for the authenticated api. This is by default {'localhost'}. + AuthVirtualHosts []string `toml:",omitempty"` + // WSHost is the host interface on which to start the websocket RPC server. If // this field is empty, no websocket API endpoint will be started. - WSHost string `toml:",omitempty"` + WSHost string // WSPort is the TCP port number on which to start the websocket RPC server. The // default zero value is/ valid and will pick a port number randomly (useful for // ephemeral nodes). WSPort int `toml:",omitempty"` + // WSPathPrefix specifies a path prefix on which ws-rpc is to be served. + WSPathPrefix string `toml:",omitempty"` + // WSOrigins is the list of domain to accept websocket requests from. Please be // aware that the server can only act upon the HTTP request the client sends and // cannot verify the validity of the request header. @@ -153,7 +168,7 @@ type Config struct { // WSModules is a list of API modules to expose via the websocket RPC interface. // If the module list is empty, all RPC API endpoints designated public will be // exposed. - WSModules []string `toml:",omitempty"` + WSModules []string // WSExposeAll exposes all API modules via the WebSocket RPC interface rather // than just the public ones. @@ -162,15 +177,6 @@ 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. @@ -191,6 +197,12 @@ type Config struct { staticNodesWarning bool trustedNodesWarning bool oldGethResourceWarning bool + + // AllowUnprotectedTxs allows non EIP-155 protected transactions to be send over RPC. + AllowUnprotectedTxs bool `toml:",omitempty"` + + // JWTSecret is the hex-encoded jwt secret. + JWTSecret string `toml:",omitempty"` } // IPCEndpoint resolves an IPC endpoint based on a configured value, taking into @@ -247,18 +259,9 @@ 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} + config := &Config{HTTPHost: DefaultHTTPHost, HTTPPort: DefaultHTTPPort, AuthPort: DefaultAuthPort} return config.HTTPEndpoint() } @@ -280,7 +283,7 @@ func DefaultWSEndpoint() string { // 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 != "" + return c.HTTPHost != "" || c.WSHost != "" } // NodeName returns the devp2p node identifier. @@ -435,15 +438,8 @@ func (c *Config) parsePersistentNodes(w *bool, path string) []*enode.Node { return nodes } -// AccountConfig determines the settings for scrypt and keydirectory -func (c *Config) AccountConfig() (int, int, string, error) { - scryptN := keystore.StandardScryptN - scryptP := keystore.StandardScryptP - if c.UseLightweightKDF { - scryptN = keystore.LightScryptN - scryptP = keystore.LightScryptP - } - +// KeyDirConfig determines the settings for keydirectory +func (c *Config) KeyDirConfig() (string, error) { var ( keydir string err error @@ -460,71 +456,31 @@ func (c *Config) AccountConfig() (int, int, string, error) { case c.KeyStoreDir != "": keydir, err = filepath.Abs(c.KeyStoreDir) } - return scryptN, scryptP, keydir, err + return keydir, err } -func makeAccountManager(conf *Config) (*accounts.Manager, string, error) { - scryptN, scryptP, keydir, err := conf.AccountConfig() - var ephemeral string +// getKeyStoreDir retrieves the key directory and will create +// and ephemeral one if necessary. +func getKeyStoreDir(conf *Config) (string, bool, error) { + keydir, err := conf.KeyDirConfig() + if err != nil { + return "", false, err + } + isEphemeral := false if keydir == "" { // There is no datadir. - keydir, err = ioutil.TempDir("", "go-ethereum-keystore") - ephemeral = keydir + keydir, err = os.MkdirTemp("", "go-ethereum-keystore") + isEphemeral = true } if err != nil { - return nil, "", err + return "", false, err } if err := os.MkdirAll(keydir, 0700); err != nil { - return nil, "", err - } - // Assemble the account manager and supported backends - 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 { - return nil, "", fmt.Errorf("error connecting to external signer: %v", err) - } - } - 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 "", false, err } - return accounts.NewManager(&accounts.Config{InsecureUnlockAllowed: conf.InsecureUnlockAllowed}, backends...), ephemeral, nil + return keydir, isEphemeral, nil } var warnLock sync.Mutex diff --git a/node/config_test.go b/node/config_test.go index 4bdb11c4..e8af8ddc 100644 --- a/node/config_test.go +++ b/node/config_test.go @@ -18,25 +18,20 @@ package node import ( "bytes" - "io/ioutil" "os" "path/filepath" "runtime" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p" ) // Tests that datadirs can be successfully created, be them manually configured // ones or automatically generated temporary ones. func TestDatadirCreation(t *testing.T) { // Create a temporary data dir and check that it can be used by a node - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("failed to create manual data dir: %v", err) - } - defer os.RemoveAll(dir) + dir := t.TempDir() node, err := New(&Config{DataDir: dir}) if err != nil { @@ -58,19 +53,19 @@ func TestDatadirCreation(t *testing.T) { t.Fatalf("freshly created datadir not accessible: %v", err) } // Verify that an impossible datadir fails creation - file, err := ioutil.TempFile("", "") + file, err := os.CreateTemp("", "") if err != nil { t.Fatalf("failed to create temporary file: %v", err) } - defer os.Remove(file.Name()) + defer func() { + file.Close() + os.Remove(file.Name()) + }() dir = filepath.Join(file.Name(), "invalid/path") - node, err = New(&Config{DataDir: dir}) + _, 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) - } } } @@ -109,11 +104,7 @@ func TestIPCPathResolution(t *testing.T) { // ephemeral. func TestNodeKeyPersistency(t *testing.T) { // Create a temporary folder and make sure no key is present - dir, err := ioutil.TempDir("", "node-test") - if err != nil { - t.Fatalf("failed to create temporary data directory: %v", err) - } - defer os.RemoveAll(dir) + dir := t.TempDir() keyfile := filepath.Join(dir, "unit-test", datadirPrivateKey) @@ -124,7 +115,7 @@ func TestNodeKeyPersistency(t *testing.T) { } config := &Config{Name: "unit-test", DataDir: dir, P2P: p2p.Config{PrivateKey: key}} config.NodeKey() - if _, err := os.Stat(filepath.Join(keyfile)); err == nil { + if _, err := os.Stat(keyfile); err == nil { t.Fatalf("one-shot node key persisted to data directory") } @@ -137,7 +128,7 @@ func TestNodeKeyPersistency(t *testing.T) { if _, err = crypto.LoadECDSA(keyfile); err != nil { t.Fatalf("failed to load freshly persisted node key: %v", err) } - blob1, err := ioutil.ReadFile(keyfile) + blob1, err := os.ReadFile(keyfile) if err != nil { t.Fatalf("failed to read freshly persisted node key: %v", err) } @@ -145,7 +136,7 @@ func TestNodeKeyPersistency(t *testing.T) { // Configure a new node and ensure the previously persisted key is loaded config = &Config{Name: "unit-test", DataDir: dir} config.NodeKey() - blob2, err := ioutil.ReadFile(filepath.Join(keyfile)) + blob2, err := os.ReadFile(keyfile) if err != nil { t.Fatalf("failed to read previously persisted node key: %v", err) } diff --git a/node/defaults.go b/node/defaults.go index 88107cd9..fd0277e2 100644 --- a/node/defaults.go +++ b/node/defaults.go @@ -22,9 +22,9 @@ import ( "path/filepath" "runtime" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/nat" + "github.com/ethereum/go-ethereum/rpc" ) const ( @@ -34,18 +34,30 @@ const ( DefaultWSPort = 8546 // Default TCP port for the websocket RPC server DefaultGraphQLHost = "localhost" // Default host interface for the GraphQL server DefaultGraphQLPort = 8547 // Default TCP port for the GraphQL server + DefaultAuthHost = "localhost" // Default host interface for the authenticated apis + DefaultAuthPort = 8551 // Default port for the authenticated apis +) + +var ( + DefaultAuthCors = []string{"localhost"} // Default cors domain for the authenticated apis + DefaultAuthVhosts = []string{"localhost"} // Default virtual hosts for the authenticated apis + DefaultAuthOrigins = []string{"localhost"} // Default origins for the authenticated apis + DefaultAuthPrefix = "" // Default prefix for the authenticated apis + DefaultAuthModules = []string{"eth", "engine"} ) // DefaultConfig contains reasonable default settings. var DefaultConfig = Config{ DataDir: DefaultDataDir(), HTTPPort: DefaultHTTPPort, + AuthAddr: DefaultAuthHost, + AuthPort: DefaultAuthPort, + AuthVirtualHosts: DefaultAuthVhosts, 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: ":30303", diff --git a/node/doc.go b/node/doc.go index e3cc58e5..b257f412 100644 --- a/node/doc.go +++ b/node/doc.go @@ -22,6 +22,43 @@ resources to provide RPC APIs. Services can also offer devp2p protocols, which a up to the devp2p network when the node instance is started. +Node Lifecycle + +The Node object has a lifecycle consisting of three basic states, INITIALIZING, RUNNING +and CLOSED. + + + ●───────┐ + New() + │ + ▼ + INITIALIZING ────Start()─┐ + │ │ + │ ▼ + Close() RUNNING + │ │ + ▼ │ + CLOSED ◀──────Close()─┘ + + +Creating a Node allocates basic resources such as the data directory and returns the node +in its INITIALIZING state. Lifecycle objects, RPC APIs and peer-to-peer networking +protocols can be registered in this state. Basic operations such as opening a key-value +database are permitted while initializing. + +Once everything is registered, the node can be started, which moves it into the RUNNING +state. Starting the node starts all registered Lifecycle objects and enables RPC and +peer-to-peer networking. Note that no additional Lifecycles, APIs or p2p protocols can be +registered while the node is running. + +Closing the node releases all held resources. The actions performed by Close depend on the +state it was in. When closing a node in INITIALIZING state, resources related to the data +directory are released. If the node was RUNNING, closing it also stops all Lifecycle +objects and shuts down RPC and peer-to-peer networking. + +You must always call Close on Node, even if the node was not started. + + Resources Managed By Node All file-system resources used by a node instance are located in a directory called the diff --git a/node/endpoints.go b/node/endpoints.go new file mode 100644 index 00000000..14c12fd1 --- /dev/null +++ b/node/endpoints.go @@ -0,0 +1,91 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +import ( + "net" + "net/http" + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" +) + +// StartHTTPEndpoint starts the HTTP RPC endpoint. +func StartHTTPEndpoint(endpoint string, timeouts rpc.HTTPTimeouts, handler http.Handler) (*http.Server, net.Addr, error) { + // start the HTTP listener + var ( + listener net.Listener + err error + ) + if listener, err = net.Listen("tcp", endpoint); err != nil { + return nil, nil, err + } + // make sure timeout values are meaningful + CheckTimeouts(&timeouts) + // Bundle and start the HTTP server + httpSrv := &http.Server{ + Handler: handler, + ReadTimeout: timeouts.ReadTimeout, + ReadHeaderTimeout: timeouts.ReadHeaderTimeout, + WriteTimeout: timeouts.WriteTimeout, + IdleTimeout: timeouts.IdleTimeout, + } + go httpSrv.Serve(listener) + return httpSrv, listener.Addr(), err +} + +// checkModuleAvailability checks that all names given in modules are actually +// available API services. It assumes that the MetadataApi module ("rpc") is always available; +// the registration of this "rpc" module happens in NewServer() and is thus common to all endpoints. +func checkModuleAvailability(modules []string, apis []rpc.API) (bad, available []string) { + availableSet := make(map[string]struct{}) + for _, api := range apis { + if _, ok := availableSet[api.Namespace]; !ok { + availableSet[api.Namespace] = struct{}{} + available = append(available, api.Namespace) + } + } + for _, name := range modules { + if _, ok := availableSet[name]; !ok { + if name != rpc.MetadataApi && name != rpc.EngineApi { + bad = append(bad, name) + } + } + } + return bad, available +} + +// CheckTimeouts ensures that timeout values are meaningful +func CheckTimeouts(timeouts *rpc.HTTPTimeouts) { + if timeouts.ReadTimeout < time.Second { + log.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadTimeout) + timeouts.ReadTimeout = rpc.DefaultHTTPTimeouts.ReadTimeout + } + if timeouts.ReadHeaderTimeout < time.Second { + log.Warn("Sanitizing invalid HTTP read header timeout", "provided", timeouts.ReadHeaderTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadHeaderTimeout) + timeouts.ReadHeaderTimeout = rpc.DefaultHTTPTimeouts.ReadHeaderTimeout + } + if timeouts.WriteTimeout < time.Second { + log.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", rpc.DefaultHTTPTimeouts.WriteTimeout) + timeouts.WriteTimeout = rpc.DefaultHTTPTimeouts.WriteTimeout + } + if timeouts.IdleTimeout < time.Second { + log.Warn("Sanitizing invalid HTTP idle timeout", "provided", timeouts.IdleTimeout, "updated", rpc.DefaultHTTPTimeouts.IdleTimeout) + timeouts.IdleTimeout = rpc.DefaultHTTPTimeouts.IdleTimeout + } +} diff --git a/node/errors.go b/node/errors.go index 2e0dadc4..67547bf6 100644 --- a/node/errors.go +++ b/node/errors.go @@ -39,17 +39,6 @@ func convertFileLockError(err error) error { return err } -// DuplicateServiceError is returned during Node startup if a registered service -// constructor returns a service of the same type that was already started. -type DuplicateServiceError struct { - Kind reflect.Type -} - -// Error generates a textual representation of the duplicate service error. -func (e *DuplicateServiceError) Error() string { - return fmt.Sprintf("duplicate service: %v", e.Kind) -} - // StopError is returned if a Node fails to stop either any of its registered // services or itself. type StopError struct { diff --git a/node/jwt_handler.go b/node/jwt_handler.go new file mode 100644 index 00000000..637ae196 --- /dev/null +++ b/node/jwt_handler.go @@ -0,0 +1,80 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +import ( + "net/http" + "strings" + "time" + + "github.com/golang-jwt/jwt/v4" +) + +const jwtExpiryTimeout = 60 * time.Second + +type jwtHandler struct { + keyFunc func(token *jwt.Token) (interface{}, error) + next http.Handler +} + +// newJWTHandler creates a http.Handler with jwt authentication support. +func newJWTHandler(secret []byte, next http.Handler) http.Handler { + return &jwtHandler{ + keyFunc: func(token *jwt.Token) (interface{}, error) { + return secret, nil + }, + next: next, + } +} + +// ServeHTTP implements http.Handler +func (handler *jwtHandler) ServeHTTP(out http.ResponseWriter, r *http.Request) { + var ( + strToken string + claims jwt.RegisteredClaims + ) + if auth := r.Header.Get("Authorization"); strings.HasPrefix(auth, "Bearer ") { + strToken = strings.TrimPrefix(auth, "Bearer ") + } + if len(strToken) == 0 { + http.Error(out, "missing token", http.StatusUnauthorized) + return + } + // We explicitly set only HS256 allowed, and also disables the + // claim-check: the RegisteredClaims internally requires 'iat' to + // be no later than 'now', but we allow for a bit of drift. + token, err := jwt.ParseWithClaims(strToken, &claims, handler.keyFunc, + jwt.WithValidMethods([]string{"HS256"}), + jwt.WithoutClaimsValidation()) + + switch { + case err != nil: + http.Error(out, err.Error(), http.StatusUnauthorized) + case !token.Valid: + http.Error(out, "invalid token", http.StatusUnauthorized) + case !claims.VerifyExpiresAt(time.Now(), false): // optional + http.Error(out, "token is expired", http.StatusUnauthorized) + case claims.IssuedAt == nil: + http.Error(out, "missing issued-at", http.StatusUnauthorized) + case time.Since(claims.IssuedAt.Time) > jwtExpiryTimeout: + http.Error(out, "stale token", http.StatusUnauthorized) + case time.Until(claims.IssuedAt.Time) > jwtExpiryTimeout: + http.Error(out, "future token", http.StatusUnauthorized) + default: + handler.next.ServeHTTP(out, r) + } +} diff --git a/node/lifecycle.go b/node/lifecycle.go new file mode 100644 index 00000000..0d5f9a06 --- /dev/null +++ b/node/lifecycle.go @@ -0,0 +1,31 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +// Lifecycle encompasses the behavior of services that can be started and stopped +// on the node. Lifecycle management is delegated to the node, but it is the +// responsibility of the service-specific package to configure and register the +// service on the node using the `RegisterLifecycle` method. +type Lifecycle interface { + // Start is called after all services have been constructed and the networking + // layer was also initialized to spawn any goroutines required by the service. + Start() error + + // Stop terminates all goroutines belonging to the service, blocking until they + // are all terminated. + Stop() error +} diff --git a/node/node.go b/node/node.go index c209f23f..b60e32f2 100644 --- a/node/node.go +++ b/node/node.go @@ -17,63 +17,62 @@ package node import ( + crand "crypto/rand" "errors" "fmt" - "net" + "hash/crc32" + "net/http" "os" "path/filepath" "reflect" "strings" "sync" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/internal/debug" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "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/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" "github.com/prometheus/tsdb/fileutil" ) // Node is a container on which services can be registered. type Node struct { - eventmux *event.TypeMux // Event multiplexer used between the services of a stack - config *Config - accman *accounts.Manager - - 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 - - serviceFuncs []ServiceConstructor // Service constructors (in dependency order) - services map[reflect.Type]Service // Currently running services - + eventmux *event.TypeMux + config *Config + accman *accounts.Manager + log log.Logger + keyDir string // key store directory + keyDirTemp bool // If true, key directory will be removed by Stop + dirLock fileutil.Releaser // prevents concurrent use of instance directory + stop chan struct{} // Channel to wait for termination notifications + server *p2p.Server // Currently running P2P networking layer + startStopLock sync.Mutex // Start/Stop are protected by an additional lock + state int // Tracks state of node lifecycle + + lock sync.Mutex + lifecycles []Lifecycle // All registered backends, services, and auxiliary services that have a lifecycle rpcAPIs []rpc.API // List of APIs currently provided by the node + http *httpServer // + ws *httpServer // + httpAuth *httpServer // + wsAuth *httpServer // + ipc *ipcServer // Stores information about the ipc http server inprocHandler *rpc.Server // In-process RPC request handler to process the API requests - ipcEndpoint string // IPC endpoint to listen at (empty = IPC disabled) - ipcListener net.Listener // IPC RPC listener socket to serve API requests - ipcHandler *rpc.Server // IPC RPC request handler to process the API requests - - httpEndpoint string // HTTP endpoint (interface + port) to listen at (empty = HTTP disabled) - httpWhitelist []string // HTTP RPC modules to allow through this endpoint - httpListener net.Listener // HTTP RPC listener socket to server API requests - httpHandler *rpc.Server // HTTP RPC request handler to process the API requests - - wsEndpoint string // Websocket endpoint (interface + port) to listen at (empty = websocket disabled) - wsListener net.Listener // Websocket RPC listener socket to server API requests - wsHandler *rpc.Server // Websocket RPC request handler to process the API requests - - stop chan struct{} // Channel to wait for termination notifications - lock sync.RWMutex - - log log.Logger + databases map[*closeTrackingDB]struct{} // All open databases } +const ( + initializingState = iota + runningState + closedState +) + // New creates a new P2P node, ready for protocol registration. func New(conf *Config) (*Node, error) { // Copy config and resolve the datadir so future changes to the current @@ -87,6 +86,10 @@ func New(conf *Config) (*Node, error) { } conf.DataDir = absdatadir } + if conf.Logger == nil { + conf.Logger = log.New() + } + // Ensure that the instance name doesn't cause weird conflicts with // other files in the data directory. if strings.ContainsAny(conf.Name, `/\`) { @@ -98,43 +101,161 @@ func New(conf *Config) (*Node, error) { if strings.HasSuffix(conf.Name, ".ipc") { return nil, errors.New(`Config.Name cannot end in ".ipc"`) } - // Ensure that the AccountManager method works before the node has started. - // We rely on this in cmd/geth. - am, ephemeralKeystore, err := makeAccountManager(conf) + + node := &Node{ + config: conf, + inprocHandler: rpc.NewServer(), + eventmux: new(event.TypeMux), + log: conf.Logger, + stop: make(chan struct{}), + server: &p2p.Server{Config: conf.P2P}, + databases: make(map[*closeTrackingDB]struct{}), + } + + // Register built-in APIs. + node.rpcAPIs = append(node.rpcAPIs, node.apis()...) + + // Acquire the instance directory lock. + if err := node.openDataDir(); err != nil { + return nil, err + } + keyDir, isEphem, err := getKeyStoreDir(conf) if err != nil { return nil, err } - if conf.Logger == nil { - conf.Logger = log.New() + node.keyDir = keyDir + node.keyDirTemp = isEphem + // Creates an empty AccountManager with no backends. Callers (e.g. cmd/geth) + // are required to add the backends later on. + node.accman = accounts.NewManager(&accounts.Config{InsecureUnlockAllowed: conf.InsecureUnlockAllowed}) + + // Initialize the p2p server. This creates the node key and discovery databases. + node.server.Config.PrivateKey = node.config.NodeKey() + node.server.Config.Name = node.config.NodeName() + node.server.Config.Logger = node.log + if node.server.Config.StaticNodes == nil { + node.server.Config.StaticNodes = node.config.StaticNodes() + } + if node.server.Config.TrustedNodes == nil { + node.server.Config.TrustedNodes = node.config.TrustedNodes() + } + if node.server.Config.NodeDatabase == "" { + node.server.Config.NodeDatabase = node.config.NodeDB() + } + + // Check HTTP/WS prefixes are valid. + if err := validatePrefix("HTTP", conf.HTTPPathPrefix); err != nil { + return nil, err + } + if err := validatePrefix("WebSocket", conf.WSPathPrefix); err != nil { + return nil, err + } + + // Configure RPC servers. + node.http = newHTTPServer(node.log, conf.HTTPTimeouts) + node.httpAuth = newHTTPServer(node.log, conf.HTTPTimeouts) + node.ws = newHTTPServer(node.log, rpc.DefaultHTTPTimeouts) + node.wsAuth = newHTTPServer(node.log, rpc.DefaultHTTPTimeouts) + node.ipc = newIPCServer(node.log, conf.IPCEndpoint()) + + return node, nil +} + +// Start starts all registered lifecycles, RPC services and p2p networking. +// Node can only be started once. +func (n *Node) Start() error { + n.startStopLock.Lock() + defer n.startStopLock.Unlock() + + n.lock.Lock() + switch n.state { + case runningState: + n.lock.Unlock() + return ErrNodeRunning + case closedState: + n.lock.Unlock() + return ErrNodeStopped } - // Note: any interaction with Config that would create/touch files - // in the data directory or instance directory is delayed until Start. - return &Node{ - accman: am, - ephemeralKeystore: ephemeralKeystore, - config: conf, - serviceFuncs: []ServiceConstructor{}, - ipcEndpoint: conf.IPCEndpoint(), - httpEndpoint: conf.HTTPEndpoint(), - wsEndpoint: conf.WSEndpoint(), - eventmux: new(event.TypeMux), - log: conf.Logger, - }, nil + n.state = runningState + // open networking and RPC endpoints + err := n.openEndpoints() + lifecycles := make([]Lifecycle, len(n.lifecycles)) + copy(lifecycles, n.lifecycles) + n.lock.Unlock() + + // Check if endpoint startup failed. + if err != nil { + n.doClose(nil) + return err + } + // Start all registered lifecycles. + var started []Lifecycle + for _, lifecycle := range lifecycles { + if err = lifecycle.Start(); err != nil { + break + } + started = append(started, lifecycle) + } + // Check if any lifecycle failed to start. + if err != nil { + n.stopServices(started) + n.doClose(nil) + } + return err } // Close stops the Node and releases resources acquired in // Node constructor New. func (n *Node) Close() error { - var errs []error + n.startStopLock.Lock() + defer n.startStopLock.Unlock() - // Terminate all subsystems and collect any errors - if err := n.Stop(); err != nil && err != ErrNodeStopped { - errs = append(errs, err) + n.lock.Lock() + state := n.state + n.lock.Unlock() + switch state { + case initializingState: + // The node was never started. + return n.doClose(nil) + case runningState: + // The node was started, release resources acquired by Start(). + var errs []error + if err := n.stopServices(n.lifecycles); err != nil { + errs = append(errs, err) + } + return n.doClose(errs) + case closedState: + return ErrNodeStopped + default: + panic(fmt.Sprintf("node is in unknown state %d", state)) } +} + +// doClose releases resources acquired by New(), collecting errors. +func (n *Node) doClose(errs []error) error { + // Close databases. This needs the lock because it needs to + // synchronize with OpenDatabase*. + n.lock.Lock() + n.state = closedState + errs = append(errs, n.closeDatabases()...) + n.lock.Unlock() + if err := n.accman.Close(); err != nil { errs = append(errs, err) } - // Report any errors that might have occurred + if n.keyDirTemp { + if err := os.RemoveAll(n.keyDir); err != nil { + errs = append(errs, err) + } + } + + // Release instance directory lock. + n.closeDataDir() + + // Unblock n.Wait. + close(n.stop) + + // Report any errors that might have occurred. switch len(errs) { case 0: return nil @@ -145,116 +266,54 @@ func (n *Node) Close() error { } } -// 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 { - n.lock.Lock() - defer n.lock.Unlock() - - if n.server != nil { - return ErrNodeRunning - } - n.serviceFuncs = append(n.serviceFuncs, constructor) - return nil -} - -// Start create a live P2P node and starts running it. -func (n *Node) Start() error { - n.lock.Lock() - defer n.lock.Unlock() - - // Short circuit if the node's already running - if n.server != nil { - return ErrNodeRunning +// openEndpoints starts all network and RPC endpoints. +func (n *Node) openEndpoints() error { + // start networking endpoints + n.log.Info("Starting peer-to-peer node", "instance", n.server.Name) + if err := n.server.Start(); err != nil { + return convertFileLockError(err) } - if err := n.openDataDir(); err != nil { - return err + // start RPC endpoints + err := n.startRPC() + if err != nil { + n.stopRPC() + n.server.Stop() } + return err +} - // Initialize the p2p server. This creates the node key and - // discovery databases. - n.serverConfig = n.config.P2P - n.serverConfig.PrivateKey = n.config.NodeKey() - n.serverConfig.Name = n.config.NodeName() - n.serverConfig.Logger = n.log - if n.serverConfig.StaticNodes == nil { - n.serverConfig.StaticNodes = n.config.StaticNodes() - } - if n.serverConfig.TrustedNodes == nil { - n.serverConfig.TrustedNodes = n.config.TrustedNodes() - } - if n.serverConfig.NodeDatabase == "" { - n.serverConfig.NodeDatabase = n.config.NodeDB() - } - running := &p2p.Server{Config: n.serverConfig} - n.log.Info("Starting peer-to-peer node", "instance", n.serverConfig.Name) - - // Otherwise copy and specialize the P2P configuration - services := make(map[reflect.Type]Service) - for _, constructor := range n.serviceFuncs { - // Create a new context for the particular service - ctx := &ServiceContext{ - config: n.config, - services: make(map[reflect.Type]Service), - EventMux: n.eventmux, - AccountManager: n.accman, - } - for kind, s := range services { // copy needed for threaded access - ctx.services[kind] = s - } - // Construct and save the service - service, err := constructor(ctx) - if err != nil { - return err +// containsLifecycle checks if 'lfs' contains 'l'. +func containsLifecycle(lfs []Lifecycle, l Lifecycle) bool { + for _, obj := range lfs { + if obj == l { + return true } - kind := reflect.TypeOf(service) - if _, exists := services[kind]; exists { - return &DuplicateServiceError{Kind: kind} - } - services[kind] = service - } - // Gather the protocols and start the freshly assembled P2P server - for _, service := range services { - running.Protocols = append(running.Protocols, service.Protocols()...) } - if err := running.Start(); err != nil { - return convertFileLockError(err) - } - // Start each of the services - 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 { - for _, kind := range started { - services[kind].Stop() - } - running.Stop() + return false +} - return err +// stopServices terminates running services, RPC and p2p networking. +// It is the inverse of Start. +func (n *Node) stopServices(running []Lifecycle) error { + n.stopRPC() + + // Stop running lifecycles in reverse order. + failure := &StopError{Services: make(map[reflect.Type]error)} + for i := len(running) - 1; i >= 0; i-- { + if err := running[i].Stop(); err != nil { + failure.Services[reflect.TypeOf(running[i])] = err } - // Mark the service started for potential cleanup - started = append(started, kind) } - // Lastly start the configured RPC interfaces - if err := n.startRPC(services); err != nil { - for _, service := range services { - service.Stop() - } - running.Stop() - return err + + // Stop p2p networking. + n.server.Stop() + + if len(failure.Services) > 0 { + return failure } - // Finish initializing the startup - 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 @@ -270,290 +329,305 @@ func (n *Node) openDataDir() error { if err != nil { return convertFileLockError(err) } - n.instanceDirLock = release + n.dirLock = release return nil } -// startRPC is a helper method to start all the various RPC endpoint during node -// startup. It's not meant to be called at any time afterwards as it makes certain -// assumptions about the state of the node. -func (n *Node) startRPC(services map[reflect.Type]Service) error { - // Gather all the possible APIs to surface - apis := n.apis() - for _, service := range services { - apis = append(apis, service.APIs()...) - } - // Start the various API endpoints, terminating all in case of errors - if err := n.startInProc(apis); err != nil { - return err +func (n *Node) closeDataDir() { + // Release instance directory lock. + if n.dirLock != nil { + if err := n.dirLock.Release(); err != nil { + n.log.Error("Can't release datadir lock", "err", err) + } + n.dirLock = nil } - if err := n.startIPC(apis); err != nil { - n.stopInProc() - return err +} + +// obtainJWTSecret loads the jwt-secret, either from the provided config, +// or from the default location. If neither of those are present, it generates +// a new secret and stores to the default location. +func (n *Node) obtainJWTSecret(cliParam string) ([]byte, error) { + fileName := cliParam + if len(fileName) == 0 { + // no path provided, use default + fileName = n.ResolvePath(datadirJWTKey) } - if err := n.startHTTP(n.httpEndpoint, apis, n.config.HTTPModules, n.config.HTTPCors, n.config.HTTPVirtualHosts, n.config.HTTPTimeouts); err != nil { - n.stopIPC() - n.stopInProc() - return err + // try reading from file + if data, err := os.ReadFile(fileName); err == nil { + jwtSecret := common.FromHex(strings.TrimSpace(string(data))) + if len(jwtSecret) == 32 { + log.Info("Loaded JWT secret file", "path", fileName, "crc32", fmt.Sprintf("%#x", crc32.ChecksumIEEE(jwtSecret))) + return jwtSecret, nil + } + log.Error("Invalid JWT secret", "path", fileName, "length", len(jwtSecret)) + return nil, errors.New("invalid JWT secret") + } + // Need to generate one + jwtSecret := make([]byte, 32) + crand.Read(jwtSecret) + // if we're in --dev mode, don't bother saving, just show it + if fileName == "" { + log.Info("Generated ephemeral JWT secret", "secret", hexutil.Encode(jwtSecret)) + return jwtSecret, nil + } + if err := os.WriteFile(fileName, []byte(hexutil.Encode(jwtSecret)), 0600); err != nil { + return nil, err } - if err := n.startWS(n.wsEndpoint, apis, n.config.WSModules, n.config.WSOrigins, n.config.WSExposeAll); err != nil { - n.stopHTTP() - n.stopIPC() - n.stopInProc() + log.Info("Generated JWT secret", "path", fileName) + return jwtSecret, nil +} + +// startRPC is a helper method to configure all the various RPC endpoints during node +// startup. It's not meant to be called at any time afterwards as it makes certain +// assumptions about the state of the node. +func (n *Node) startRPC() error { + if err := n.startInProc(); err != nil { return err } - // All API endpoints started successfully - n.rpcAPIs = apis - return nil -} -// startInProc initializes an in-process RPC endpoint. -func (n *Node) startInProc(apis []rpc.API) error { - // Register all the APIs exposed by the services - handler := rpc.NewServer() - for _, api := range apis { - if err := handler.RegisterName(api.Namespace, api.Service); err != nil { + // Configure IPC. + if n.ipc.endpoint != "" { + if err := n.ipc.start(n.rpcAPIs); err != nil { return err } - n.log.Debug("InProc registered", "namespace", api.Namespace) } - n.inprocHandler = handler - return nil -} + var ( + servers []*httpServer + open, all = n.GetAPIs() + ) -// stopInProc terminates the in-process RPC endpoint. -func (n *Node) stopInProc() { - if n.inprocHandler != nil { - n.inprocHandler.Stop() - n.inprocHandler = nil + initHttp := func(server *httpServer, apis []rpc.API, port int) error { + if err := server.setListenAddr(n.config.HTTPHost, port); err != nil { + return err + } + if err := server.enableRPC(apis, httpConfig{ + CorsAllowedOrigins: n.config.HTTPCors, + Vhosts: n.config.HTTPVirtualHosts, + Modules: n.config.HTTPModules, + prefix: n.config.HTTPPathPrefix, + }); err != nil { + return err + } + servers = append(servers, server) + return nil } -} -// startIPC initializes and starts the IPC RPC endpoint. -func (n *Node) startIPC(apis []rpc.API) error { - if n.ipcEndpoint == "" { - return nil // IPC disabled. - } - listener, handler, err := rpc.StartIPCEndpoint(n.ipcEndpoint, apis) - if err != nil { - return err + initWS := func(apis []rpc.API, port int) error { + server := n.wsServerForPort(port, false) + if err := server.setListenAddr(n.config.WSHost, port); err != nil { + return err + } + if err := server.enableWS(n.rpcAPIs, wsConfig{ + Modules: n.config.WSModules, + Origins: n.config.WSOrigins, + prefix: n.config.WSPathPrefix, + }); err != nil { + return err + } + servers = append(servers, server) + return nil } - n.ipcListener = listener - n.ipcHandler = handler - n.log.Info("IPC endpoint opened", "url", n.ipcEndpoint) - return nil -} -// stopIPC terminates the IPC RPC endpoint. -func (n *Node) stopIPC() { - if n.ipcListener != nil { - n.ipcListener.Close() - n.ipcListener = nil + initAuth := func(apis []rpc.API, port int, secret []byte) error { + // Enable auth via HTTP + server := n.httpAuth + if err := server.setListenAddr(n.config.AuthAddr, port); err != nil { + return err + } + if err := server.enableRPC(apis, httpConfig{ + CorsAllowedOrigins: DefaultAuthCors, + Vhosts: n.config.AuthVirtualHosts, + Modules: DefaultAuthModules, + prefix: DefaultAuthPrefix, + jwtSecret: secret, + }); err != nil { + return err + } + servers = append(servers, server) + // Enable auth via WS + server = n.wsServerForPort(port, true) + if err := server.setListenAddr(n.config.AuthAddr, port); err != nil { + return err + } + if err := server.enableWS(apis, wsConfig{ + Modules: DefaultAuthModules, + Origins: DefaultAuthOrigins, + prefix: DefaultAuthPrefix, + jwtSecret: secret, + }); err != nil { + return err + } + servers = append(servers, server) + return nil + } - n.log.Info("IPC endpoint closed", "url", n.ipcEndpoint) + // Set up HTTP. + if n.config.HTTPHost != "" { + // Configure legacy unauthenticated HTTP. + if err := initHttp(n.http, open, n.config.HTTPPort); err != nil { + return err + } } - if n.ipcHandler != nil { - n.ipcHandler.Stop() - n.ipcHandler = nil + // Configure WebSocket. + if n.config.WSHost != "" { + // legacy unauthenticated + if err := initWS(open, n.config.WSPort); err != nil { + return err + } } -} - -// startHTTP initializes and starts the HTTP RPC endpoint. -func (n *Node) startHTTP(endpoint string, apis []rpc.API, modules []string, cors []string, vhosts []string, timeouts rpc.HTTPTimeouts) error { - // Short circuit if the HTTP endpoint isn't being exposed - if endpoint == "" { - return nil + // Configure authenticated API + if len(open) != len(all) { + jwtSecret, err := n.obtainJWTSecret(n.config.JWTSecret) + if err != nil { + return err + } + if err := initAuth(all, n.config.AuthPort, jwtSecret); err != nil { + return err + } } - listener, handler, err := rpc.StartHTTPEndpoint(endpoint, apis, modules, cors, vhosts, timeouts) - if err != nil { - return err + // Start the servers + for _, server := range servers { + if err := server.start(); err != nil { + return err + } } - n.log.Info("HTTP endpoint opened", "url", fmt.Sprintf("http://%s", endpoint), "cors", strings.Join(cors, ","), "vhosts", strings.Join(vhosts, ",")) - // All listeners booted successfully - n.httpEndpoint = endpoint - n.httpListener = listener - n.httpHandler = handler - return nil } -// stopHTTP terminates the HTTP RPC endpoint. -func (n *Node) stopHTTP() { - if n.httpListener != nil { - n.httpListener.Close() - n.httpListener = nil - - n.log.Info("HTTP endpoint closed", "url", fmt.Sprintf("http://%s", n.httpEndpoint)) +func (n *Node) wsServerForPort(port int, authenticated bool) *httpServer { + httpServer, wsServer := n.http, n.ws + if authenticated { + httpServer, wsServer = n.httpAuth, n.wsAuth } - if n.httpHandler != nil { - n.httpHandler.Stop() - n.httpHandler = nil + if n.config.HTTPHost == "" || httpServer.port == port { + return httpServer } + return wsServer } -// startWS initializes and starts the websocket RPC endpoint. -func (n *Node) startWS(endpoint string, apis []rpc.API, modules []string, wsOrigins []string, exposeAll bool) error { - // Short circuit if the WS endpoint isn't being exposed - if endpoint == "" { - return nil - } - listener, handler, err := rpc.StartWSEndpoint(endpoint, apis, modules, wsOrigins, exposeAll) - if err != nil { - return err - } - n.log.Info("WebSocket endpoint opened", "url", fmt.Sprintf("ws://%s", listener.Addr())) - // All listeners booted successfully - n.wsEndpoint = endpoint - n.wsListener = listener - n.wsHandler = handler +func (n *Node) stopRPC() { + n.http.stop() + n.ws.stop() + n.httpAuth.stop() + n.wsAuth.stop() + n.ipc.stop() + n.stopInProc() +} +// startInProc registers all RPC APIs on the inproc server. +func (n *Node) startInProc() error { + for _, api := range n.rpcAPIs { + if err := n.inprocHandler.RegisterName(api.Namespace, api.Service); err != nil { + return err + } + } return nil } -// stopWS terminates the websocket RPC endpoint. -func (n *Node) stopWS() { - if n.wsListener != nil { - n.wsListener.Close() - n.wsListener = nil +// stopInProc terminates the in-process RPC endpoint. +func (n *Node) stopInProc() { + n.inprocHandler.Stop() +} - n.log.Info("WebSocket endpoint closed", "url", fmt.Sprintf("ws://%s", n.wsEndpoint)) - } - if n.wsHandler != nil { - n.wsHandler.Stop() - n.wsHandler = nil - } +// Wait blocks until the node is closed. +func (n *Node) Wait() { + <-n.stop } -// Stop terminates a running node along with all it's services. In the node was -// not started, an error is returned. -func (n *Node) Stop() error { +// RegisterLifecycle registers the given Lifecycle on the node. +func (n *Node) RegisterLifecycle(lifecycle Lifecycle) { n.lock.Lock() defer n.lock.Unlock() - // Short circuit if the node's not running - if n.server == nil { - return ErrNodeStopped - } - - // Terminate the API, services and the p2p server. - n.stopWS() - n.stopHTTP() - n.stopIPC() - n.rpcAPIs = nil - failure := &StopError{ - Services: make(map[reflect.Type]error), + if n.state != initializingState { + panic("can't register lifecycle on running/stopped node") } - for kind, service := range n.services { - if err := service.Stop(); err != nil { - failure.Services[kind] = err - } - } - n.server.Stop() - n.services = nil - n.server = nil - - // Release instance directory lock. - if n.instanceDirLock != nil { - if err := n.instanceDirLock.Release(); err != nil { - n.log.Error("Can't release datadir lock", "err", err) - } - n.instanceDirLock = nil + if containsLifecycle(n.lifecycles, lifecycle) { + panic(fmt.Sprintf("attempt to register lifecycle %T more than once", lifecycle)) } + n.lifecycles = append(n.lifecycles, lifecycle) +} - // unblock n.Wait - close(n.stop) +// RegisterProtocols adds backend's protocols to the node's p2p server. +func (n *Node) RegisterProtocols(protocols []p2p.Protocol) { + n.lock.Lock() + defer n.lock.Unlock() - // Remove the keystore if it was created ephemerally. - var keystoreErr error - if n.ephemeralKeystore != "" { - keystoreErr = os.RemoveAll(n.ephemeralKeystore) + if n.state != initializingState { + panic("can't register protocols on running/stopped node") } + n.server.Protocols = append(n.server.Protocols, protocols...) +} - if len(failure.Services) > 0 { - return failure - } - if keystoreErr != nil { - return keystoreErr +// RegisterAPIs registers the APIs a service provides on the node. +func (n *Node) RegisterAPIs(apis []rpc.API) { + n.lock.Lock() + defer n.lock.Unlock() + + if n.state != initializingState { + panic("can't register APIs on running/stopped node") } - return nil + n.rpcAPIs = append(n.rpcAPIs, apis...) } -// Wait blocks the thread until the node is stopped. If the node is not running -// at the time of invocation, the method immediately returns. -func (n *Node) Wait() { - n.lock.RLock() - if n.server == nil { - n.lock.RUnlock() - return +// GetAPIs return two sets of APIs, both the ones that do not require +// authentication, and the complete set +func (n *Node) GetAPIs() (unauthenticated, all []rpc.API) { + for _, api := range n.rpcAPIs { + if !api.Authenticated { + unauthenticated = append(unauthenticated, api) + } } - stop := n.stop - n.lock.RUnlock() - - <-stop + return unauthenticated, n.rpcAPIs } -// Restart terminates a running node and boots up a new one in its place. If the -// node isn't running, an error is returned. -func (n *Node) Restart() error { - if err := n.Stop(); err != nil { - return err - } - if err := n.Start(); err != nil { - return err +// RegisterHandler mounts a handler on the given path on the canonical HTTP server. +// +// The name of the handler is shown in a log message when the HTTP server starts +// and should be a descriptive term for the service provided by the handler. +func (n *Node) RegisterHandler(name, path string, handler http.Handler) { + n.lock.Lock() + defer n.lock.Unlock() + + if n.state != initializingState { + panic("can't register HTTP handler on running/stopped node") } - return nil + + n.http.mux.Handle(path, handler) + n.http.handlerNames[path] = name } // Attach creates an RPC client attached to an in-process API handler. func (n *Node) Attach() (*rpc.Client, error) { - n.lock.RLock() - defer n.lock.RUnlock() - - if n.server == nil { - return nil, ErrNodeStopped - } return rpc.DialInProc(n.inprocHandler), nil } // RPCHandler returns the in-process RPC request handler. func (n *Node) RPCHandler() (*rpc.Server, error) { - n.lock.RLock() - defer n.lock.RUnlock() + n.lock.Lock() + defer n.lock.Unlock() - if n.inprocHandler == nil { + if n.state == closedState { return nil, ErrNodeStopped } return n.inprocHandler, nil } +// Config returns the configuration of node. +func (n *Node) Config() *Config { + return n.config +} + // Server retrieves the currently running P2P network layer. This method is meant -// only to inspect fields of the currently running server, life cycle management -// should be left to this Node entity. +// only to inspect fields of the currently running server. Callers should not +// start or stop the returned server. func (n *Node) Server() *p2p.Server { - n.lock.RLock() - defer n.lock.RUnlock() + n.lock.Lock() + defer n.lock.Unlock() return n.server } -// Service retrieves a currently running service registered of a specific type. -func (n *Node) Service(service interface{}) error { - n.lock.RLock() - defer n.lock.RUnlock() - - // Short circuit if the node's not running - if n.server == nil { - return ErrNodeStopped - } - // Otherwise try to find the service to return - element := reflect.ValueOf(service).Elem() - if running, ok := n.services[element.Type()]; ok { - element.Set(reflect.ValueOf(running)) - return nil - } - return ErrServiceUnknown -} - // DataDir retrieves the current datadir used by the protocol stack. // Deprecated: No files should be stored in this directory, use InstanceDir instead. func (n *Node) DataDir() string { @@ -565,6 +639,11 @@ func (n *Node) InstanceDir() string { return n.config.instanceDir() } +// KeyStoreDir retrieves the key directory +func (n *Node) KeyStoreDir() string { + return n.keyDir +} + // AccountManager retrieves the account manager used by the protocol stack. func (n *Node) AccountManager() *accounts.Manager { return n.accman @@ -572,29 +651,21 @@ func (n *Node) AccountManager() *accounts.Manager { // IPCEndpoint retrieves the current IPC endpoint used by the protocol stack. func (n *Node) IPCEndpoint() string { - return n.ipcEndpoint + return n.ipc.endpoint } -// HTTPEndpoint retrieves the current HTTP endpoint used by the protocol stack. +// HTTPEndpoint returns the URL of the HTTP server. Note that this URL does not +// contain the JSON-RPC path prefix set by HTTPPathPrefix. func (n *Node) HTTPEndpoint() string { - n.lock.Lock() - defer n.lock.Unlock() - - if n.httpListener != nil { - return n.httpListener.Addr().String() - } - return n.httpEndpoint + return "http://" + n.http.listenAddr() } -// WSEndpoint retrieves the current WS endpoint used by the protocol stack. +// WSEndpoint returns the current JSON-RPC over WebSocket endpoint. func (n *Node) WSEndpoint() string { - n.lock.Lock() - defer n.lock.Unlock() - - if n.wsListener != nil { - return n.wsListener.Addr().String() + if n.http.wsAllowed() { + return "ws://" + n.http.listenAddr() + n.http.wsConfig.prefix } - return n.wsEndpoint + return "ws://" + n.ws.listenAddr() + n.ws.wsConfig.prefix } // EventMux retrieves the event multiplexer used by all the network services in @@ -606,11 +677,25 @@ 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, namespace string) (ethdb.Database, error) { +func (n *Node) OpenDatabase(name string, cache, handles int, namespace string, readonly bool) (ethdb.Database, error) { + n.lock.Lock() + defer n.lock.Unlock() + if n.state == closedState { + return nil, ErrNodeStopped + } + + var db ethdb.Database + var err error if n.config.DataDir == "" { - return rawdb.NewMemoryDatabase(), nil + db = rawdb.NewMemoryDatabase() + } else { + db, err = rawdb.NewLevelDBDatabase(n.ResolvePath(name), cache, handles, namespace, readonly) + } + + if err == nil { + db = n.wrapDatabase(db) } - return rawdb.NewLevelDBDatabase(n.config.ResolvePath(name), cache, handles, namespace) + return db, err } // OpenDatabaseWithFreezer opens an existing database with the given name (or @@ -618,19 +703,25 @@ func (n *Node) OpenDatabase(name string, cache, handles int, namespace string) ( // 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) { +func (n *Node) OpenDatabaseWithFreezer(name string, cache, handles int, ancient string, namespace string, readonly bool) (ethdb.Database, error) { + n.lock.Lock() + defer n.lock.Unlock() + if n.state == closedState { + return nil, ErrNodeStopped + } + + var db ethdb.Database + var err error if n.config.DataDir == "" { - return rawdb.NewMemoryDatabase(), nil + db = rawdb.NewMemoryDatabase() + } else { + db, err = rawdb.NewLevelDBDatabaseWithFreezer(n.ResolvePath(name), cache, handles, n.ResolveAncient(name, ancient), namespace, readonly) } - root := n.config.ResolvePath(name) - switch { - case freezer == "": - freezer = filepath.Join(root, "ancient") - case !filepath.IsAbs(freezer): - freezer = n.config.ResolvePath(freezer) + if err == nil { + db = n.wrapDatabase(db) } - return rawdb.NewLevelDBDatabaseWithFreezer(root, cache, handles, freezer, namespace) + return db, err } // ResolvePath returns the absolute path of a resource in the instance directory. @@ -638,27 +729,46 @@ func (n *Node) ResolvePath(x string) string { return n.config.ResolvePath(x) } -// apis returns the collection of RPC descriptors this node offers. -func (n *Node) apis() []rpc.API { - return []rpc.API{ - { - Namespace: "admin", - Version: "1.0", - Service: NewPrivateAdminAPI(n), - }, { - Namespace: "admin", - Version: "1.0", - Service: NewPublicAdminAPI(n), - Public: true, - }, { - Namespace: "debug", - Version: "1.0", - Service: debug.Handler, - }, { - Namespace: "web3", - Version: "1.0", - Service: NewPublicWeb3API(n), - Public: true, - }, +// ResolveAncient returns the absolute path of the root ancient directory. +func (n *Node) ResolveAncient(name string, ancient string) string { + switch { + case ancient == "": + ancient = filepath.Join(n.ResolvePath(name), "ancient") + case !filepath.IsAbs(ancient): + ancient = n.ResolvePath(ancient) + } + return ancient +} + +// closeTrackingDB wraps the Close method of a database. When the database is closed by the +// service, the wrapper removes it from the node's database map. This ensures that Node +// won't auto-close the database if it is closed by the service that opened it. +type closeTrackingDB struct { + ethdb.Database + n *Node +} + +func (db *closeTrackingDB) Close() error { + db.n.lock.Lock() + delete(db.n.databases, db) + db.n.lock.Unlock() + return db.Database.Close() +} + +// wrapDatabase ensures the database will be auto-closed when Node is closed. +func (n *Node) wrapDatabase(db ethdb.Database) ethdb.Database { + wrapper := &closeTrackingDB{db, n} + n.databases[wrapper] = struct{}{} + return wrapper +} + +// closeDatabases closes all open databases. +func (n *Node) closeDatabases() (errors []error) { + for db := range n.databases { + delete(n.databases, db) + if err := db.Database.Close(); err != nil { + errors = append(errors, err) + } } + return errors } diff --git a/node/node_example_test.go b/node/node_example_test.go index 323c65e6..d54fe030 100644 --- a/node/node_example_test.go +++ b/node/node_example_test.go @@ -20,27 +20,21 @@ import ( "fmt" "log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/node" ) -// SampleService is a trivial network service that can be attached to a node for +// SampleLifecycle is a trivial network service that can be attached to a node for // life cycle management. // -// The following methods are needed to implement a node.Service: -// - Protocols() []p2p.Protocol - devp2p protocols the service can communicate on -// - APIs() []rpc.API - api methods the service wants to expose on rpc channels +// The following methods are needed to implement a node.Lifecycle: // - Start() error - method invoked when the node is ready to start the service // - Stop() error - method invoked when the node terminates the service -type SampleService struct{} +type SampleLifecycle struct{} -func (s *SampleService) Protocols() []p2p.Protocol { return nil } -func (s *SampleService) APIs() []rpc.API { return nil } -func (s *SampleService) Start(*p2p.Server) error { fmt.Println("Service starting..."); return nil } -func (s *SampleService) Stop() error { fmt.Println("Service stopping..."); return nil } +func (s *SampleLifecycle) Start() error { fmt.Println("Service starting..."); return nil } +func (s *SampleLifecycle) Stop() error { fmt.Println("Service stopping..."); return nil } -func ExampleService() { +func ExampleLifecycle() { // Create a network node to run protocols with the default values. stack, err := node.New(&node.Config{}) if err != nil { @@ -48,29 +42,18 @@ func ExampleService() { } 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 - // individual implementations' support for such operations. - constructor := func(context *node.ServiceContext) (node.Service, error) { - return new(SampleService), nil - } - if err := stack.Register(constructor); err != nil { - log.Fatalf("Failed to register service: %v", err) - } + // Create and register a simple network Lifecycle. + service := new(SampleLifecycle) + stack.RegisterLifecycle(service) + // Boot up the entire protocol stack, do a restart and terminate if err := stack.Start(); err != nil { log.Fatalf("Failed to start the protocol stack: %v", err) } - if err := stack.Restart(); err != nil { - log.Fatalf("Failed to restart the protocol stack: %v", err) - } - if err := stack.Stop(); err != nil { + if err := stack.Close(); err != nil { log.Fatalf("Failed to stop the protocol stack: %v", err) } // Output: // Service starting... // Service stopping... - // Service starting... - // Service stopping... } diff --git a/node/node_test.go b/node/node_test.go index 7f710737..7c76e21f 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -18,15 +18,20 @@ package node import ( "errors" - "io/ioutil" - "os" + "fmt" + "io" + "net" + "net/http" "reflect" + "strings" "testing" - "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" + + "github.com/stretchr/testify/assert" ) var ( @@ -40,20 +45,28 @@ func testNodeConfig() *Config { } } -// Tests that an empty protocol stack can be started, restarted and stopped. -func TestNodeLifeCycle(t *testing.T) { +// Tests that an empty protocol stack can be closed more than once. +func TestNodeCloseMultipleTimes(t *testing.T) { stack, err := New(testNodeConfig()) if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } - defer stack.Close() + stack.Close() // Ensure that a stopped node can be stopped again for i := 0; i < 3; i++ { - if err := stack.Stop(); err != ErrNodeStopped { + if err := stack.Close(); err != ErrNodeStopped { t.Fatalf("iter %d: stop failure mismatch: have %v, want %v", i, err, ErrNodeStopped) } } +} + +func TestNodeStartMultipleTimes(t *testing.T) { + stack, err := New(testNodeConfig()) + if err != nil { + t.Fatalf("failed to create protocol stack: %v", err) + } + // Ensure that a node can be successfully started, but only once if err := stack.Start(); err != nil { t.Fatalf("failed to start node: %v", err) @@ -61,17 +74,11 @@ func TestNodeLifeCycle(t *testing.T) { if err := stack.Start(); err != ErrNodeRunning { t.Fatalf("start failure mismatch: have %v, want %v ", err, ErrNodeRunning) } - // Ensure that a node can be restarted arbitrarily many times - for i := 0; i < 3; i++ { - if err := stack.Restart(); err != nil { - t.Fatalf("iter %d: failed to restart node: %v", i, err) - } - } // Ensure that a node can be stopped, but only once - if err := stack.Stop(); err != nil { + if err := stack.Close(); err != nil { t.Fatalf("failed to stop node: %v", err) } - if err := stack.Stop(); err != ErrNodeStopped { + if err := stack.Close(); err != ErrNodeStopped { t.Fatalf("stop failure mismatch: have %v, want %v ", err, ErrNodeStopped) } } @@ -79,11 +86,7 @@ func TestNodeLifeCycle(t *testing.T) { // Tests that if the data dir is already in use, an appropriate error is returned. func TestNodeUsedDataDir(t *testing.T) { // Create a temporary folder to use as the data directory - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("failed to create temporary data directory: %v", err) - } - defer os.RemoveAll(dir) + dir := t.TempDir() // Create a new node based on the data directory original, err := New(&Config{DataDir: dir}) @@ -91,92 +94,152 @@ func TestNodeUsedDataDir(t *testing.T) { 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) } - defer original.Stop() // Create a second node based on the same data directory and ensure failure - duplicate, err := New(&Config{DataDir: dir}) - if err != nil { - t.Fatalf("failed to create duplicate protocol stack: %v", err) - } - defer duplicate.Close() - - if err := duplicate.Start(); err != ErrDatadirUsed { + _, err = New(&Config{DataDir: dir}) + if err != ErrDatadirUsed { t.Fatalf("duplicate datadir failure mismatch: have %v, want %v", err, ErrDatadirUsed) } } -// Tests whether services can be registered and duplicates caught. -func TestServiceRegistry(t *testing.T) { +// Tests whether a Lifecycle can be registered. +func TestLifecycleRegistry_Successful(t *testing.T) { stack, err := New(testNodeConfig()) 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 { - if err := stack.Register(constructor); err != nil { - t.Fatalf("service #%d: registration failed: %v", i, err) - } + noop := NewNoop() + stack.RegisterLifecycle(noop) + + if !containsLifecycle(stack.lifecycles, noop) { + t.Fatalf("lifecycle was not properly registered on the node, %v", err) } - if err := stack.Start(); err != nil { - t.Fatalf("failed to start original service stack: %v", err) +} + +// Tests whether a service's protocols can be registered properly on the node's p2p server. +func TestRegisterProtocols(t *testing.T) { + stack, err := New(testNodeConfig()) + if err != nil { + t.Fatalf("failed to create protocol stack: %v", err) } - if err := stack.Stop(); err != nil { - t.Fatalf("failed to stop original service stack: %v", err) + defer stack.Close() + + fs, err := NewFullService(stack) + if err != nil { + t.Fatalf("could not create full service: %v", err) } - // Duplicate one of the services and retry starting the node - if err := stack.Register(NewNoopServiceB); err != nil { - t.Fatalf("duplicate registration failed: %v", err) + + for _, protocol := range fs.Protocols() { + if !containsProtocol(stack.server.Protocols, protocol) { + t.Fatalf("protocol %v was not successfully registered", protocol) + } } - if err := stack.Start(); err == nil { - t.Fatalf("duplicate service started") - } else { - if _, ok := err.(*DuplicateServiceError); !ok { - t.Fatalf("duplicate error mismatch: have %v, want %v", err, DuplicateServiceError{}) + + for _, api := range fs.APIs() { + if !containsAPI(stack.rpcAPIs, api) { + t.Fatalf("api %v was not successfully registered", api) } } } -// Tests that registered services get started and stopped correctly. -func TestServiceLifeCycle(t *testing.T) { - stack, err := New(testNodeConfig()) +// This test checks that open databases are closed with node. +func TestNodeCloseClosesDB(t *testing.T) { + stack, _ := New(testNodeConfig()) + defer stack.Close() + + db, err := stack.OpenDatabase("mydb", 0, 0, "", false) if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) + t.Fatal("can't open DB:", err) + } + if err = db.Put([]byte{}, []byte{}); err != nil { + t.Fatal("can't Put on open DB:", err) } - defer stack.Close() - // Register a batch of life-cycle instrumented services - services := map[string]InstrumentingWrapper{ - "A": InstrumentedServiceMakerA, - "B": InstrumentedServiceMakerB, - "C": InstrumentedServiceMakerC, + stack.Close() + if err = db.Put([]byte{}, []byte{}); err == nil { + t.Fatal("Put succeeded after node is closed") } +} + +// This test checks that OpenDatabase can be used from within a Lifecycle Start method. +func TestNodeOpenDatabaseFromLifecycleStart(t *testing.T) { + stack, _ := New(testNodeConfig()) + defer stack.Close() + + var db ethdb.Database + var err error + stack.RegisterLifecycle(&InstrumentedService{ + startHook: func() { + db, err = stack.OpenDatabase("mydb", 0, 0, "", false) + if err != nil { + t.Fatal("can't open DB:", err) + } + }, + stopHook: func() { + db.Close() + }, + }) + + stack.Start() + stack.Close() +} + +// This test checks that OpenDatabase can be used from within a Lifecycle Stop method. +func TestNodeOpenDatabaseFromLifecycleStop(t *testing.T) { + stack, _ := New(testNodeConfig()) + defer stack.Close() + + stack.RegisterLifecycle(&InstrumentedService{ + stopHook: func() { + db, err := stack.OpenDatabase("mydb", 0, 0, "", false) + if err != nil { + t.Fatal("can't open DB:", err) + } + db.Close() + }, + }) + + stack.Start() + stack.Close() +} + +// Tests that registered Lifecycles get started and stopped correctly. +func TestLifecycleLifeCycle(t *testing.T) { + stack, _ := New(testNodeConfig()) + defer stack.Close() + started := make(map[string]bool) stopped := make(map[string]bool) - for id, maker := range services { - id := id // Closure for the constructor - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - startHook: func(*p2p.Server) { started[id] = true }, - stopHook: func() { stopped[id] = true }, - }, nil - } - if err := stack.Register(maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) - } + // Create a batch of instrumented services + lifecycles := map[string]Lifecycle{ + "A": &InstrumentedService{ + startHook: func() { started["A"] = true }, + stopHook: func() { stopped["A"] = true }, + }, + "B": &InstrumentedService{ + startHook: func() { started["B"] = true }, + stopHook: func() { stopped["B"] = true }, + }, + "C": &InstrumentedService{ + startHook: func() { started["C"] = true }, + stopHook: func() { stopped["C"] = true }, + }, + } + // register lifecycles on node + for _, lifecycle := range lifecycles { + stack.RegisterLifecycle(lifecycle) } // Start the node and check that all services are running if err := stack.Start(); err != nil { t.Fatalf("failed to start protocol stack: %v", err) } - for id := range services { + for id := range lifecycles { if !started[id] { t.Fatalf("service %s: freshly started service not running", id) } @@ -185,415 +248,389 @@ func TestServiceLifeCycle(t *testing.T) { } } // Stop the node and check that all services have been stopped - if err := stack.Stop(); err != nil { + if err := stack.Close(); err != nil { t.Fatalf("failed to stop protocol stack: %v", err) } - for id := range services { + for id := range lifecycles { if !stopped[id] { t.Fatalf("service %s: freshly terminated service still running", id) } } } -// Tests that services are restarted cleanly as new instances. -func TestServiceRestarts(t *testing.T) { +// Tests that if a Lifecycle fails to start, all others started before it will be +// shut down. +func TestLifecycleStartupError(t *testing.T) { stack, err := New(testNodeConfig()) 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 - started int - ) - constructor := func(*ServiceContext) (Service, error) { - running = false - - return &InstrumentedService{ - startHook: func(*p2p.Server) { - if running { - panic("already running") - } - running = true - started++ - }, - }, nil - } - // Register the service and start the protocol stack - if err := stack.Register(constructor); err != nil { - t.Fatalf("failed to register the service: %v", err) - } - if err := stack.Start(); err != nil { - t.Fatalf("failed to start protocol stack: %v", err) + started := make(map[string]bool) + stopped := make(map[string]bool) + + // Create a batch of instrumented services + lifecycles := map[string]Lifecycle{ + "A": &InstrumentedService{ + startHook: func() { started["A"] = true }, + stopHook: func() { stopped["A"] = true }, + }, + "B": &InstrumentedService{ + startHook: func() { started["B"] = true }, + stopHook: func() { stopped["B"] = true }, + }, + "C": &InstrumentedService{ + startHook: func() { started["C"] = true }, + stopHook: func() { stopped["C"] = true }, + }, + } + // register lifecycles on node + for _, lifecycle := range lifecycles { + stack.RegisterLifecycle(lifecycle) } - defer stack.Stop() - if !running || started != 1 { - t.Fatalf("running/started mismatch: have %v/%d, want true/1", running, started) + // Register a service that fails to construct itself + failure := errors.New("fail") + failer := &InstrumentedService{start: failure} + stack.RegisterLifecycle(failer) + + // Start the protocol stack and ensure all started services stop + if err := stack.Start(); err != failure { + t.Fatalf("stack startup failure mismatch: have %v, want %v", err, failure) } - // Restart the stack a few times and check successful service restarts - for i := 0; i < 3; i++ { - if err := stack.Restart(); err != nil { - t.Fatalf("iter %d: failed to restart stack: %v", i, err) + for id := range lifecycles { + if started[id] && !stopped[id] { + t.Fatalf("service %s: started but not stopped", id) } - } - if !running || started != 4 { - t.Fatalf("running/started mismatch: have %v/%d, want true/4", running, started) + delete(started, id) + delete(stopped, id) } } -// Tests that if a service fails to initialize itself, none of the other services -// will be allowed to even start. -func TestServiceConstructionAbortion(t *testing.T) { +// Tests that even if a registered Lifecycle fails to shut down cleanly, it does +// not influence the rest of the shutdown invocations. +func TestLifecycleTerminationGuarantee(t *testing.T) { stack, err := New(testNodeConfig()) 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, - "B": InstrumentedServiceMakerB, - "C": InstrumentedServiceMakerC, - } started := make(map[string]bool) - for id, maker := range services { - id := id // Closure for the constructor - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - startHook: func(*p2p.Server) { started[id] = true }, - }, nil - } - if err := stack.Register(maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) - } + stopped := make(map[string]bool) + + // Create a batch of instrumented services + lifecycles := map[string]Lifecycle{ + "A": &InstrumentedService{ + startHook: func() { started["A"] = true }, + stopHook: func() { stopped["A"] = true }, + }, + "B": &InstrumentedService{ + startHook: func() { started["B"] = true }, + stopHook: func() { stopped["B"] = true }, + }, + "C": &InstrumentedService{ + startHook: func() { started["C"] = true }, + stopHook: func() { stopped["C"] = true }, + }, + } + // register lifecycles on node + for _, lifecycle := range lifecycles { + stack.RegisterLifecycle(lifecycle) } - // Register a service that fails to construct itself + + // Register a service that fails to shot down cleanly failure := errors.New("fail") - failer := func(*ServiceContext) (Service, error) { - return nil, failure + failer := &InstrumentedService{stop: failure} + stack.RegisterLifecycle(failer) + + // Start the protocol stack, and ensure that a failing shut down terminates all + // Start the stack and make sure all is online + if err := stack.Start(); err != nil { + t.Fatalf("failed to start protocol stack: %v", err) } - if err := stack.Register(failer); err != nil { - t.Fatalf("failer registration failed: %v", err) + for id := range lifecycles { + if !started[id] { + t.Fatalf("service %s: service not running", id) + } + if stopped[id] { + t.Fatalf("service %s: service already stopped", id) + } } - // Start the protocol stack and ensure none of the services get started - for i := 0; i < 100; i++ { - if err := stack.Start(); err != failure { - t.Fatalf("iter %d: stack startup failure mismatch: have %v, want %v", i, err, failure) + // Stop the stack, verify failure and check all terminations + err = stack.Close() + if err, ok := err.(*StopError); !ok { + t.Fatalf("termination failure mismatch: have %v, want StopError", err) + } else { + failer := reflect.TypeOf(&InstrumentedService{}) + if err.Services[failer] != failure { + t.Fatalf("failer termination failure mismatch: have %v, want %v", err.Services[failer], failure) } - for id := range services { - if started[id] { - t.Fatalf("service %s: started should not have", id) - } - delete(started, id) + if len(err.Services) != 1 { + t.Fatalf("failure count mismatch: have %d, want %d", len(err.Services), 1) + } + } + for id := range lifecycles { + if !stopped[id] { + t.Fatalf("service %s: service not terminated", id) } + delete(started, id) + delete(stopped, id) } + + stack.server = &p2p.Server{} + stack.server.PrivateKey = testNodeKey } -// Tests that if a service fails to start, all others started before it will be -// shut down. -func TestServiceStartupAbortion(t *testing.T) { - stack, err := New(testNodeConfig()) +// Tests whether a handler can be successfully mounted on the canonical HTTP server +// on the given prefix +func TestRegisterHandler_Successful(t *testing.T) { + node := createNode(t, 7878, 7979) + defer node.Close() + // create and mount handler + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("success")) + }) + node.RegisterHandler("test", "/test", handler) + + // start node + if err := node.Start(); err != nil { + t.Fatalf("could not start node: %v", err) + } + + // create HTTP request + httpReq, err := http.NewRequest(http.MethodGet, "http://127.0.0.1:7878/test", nil) if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) + t.Error("could not issue new http request ", err) } - defer stack.Close() - // Register a batch of good services - services := map[string]InstrumentingWrapper{ - "A": InstrumentedServiceMakerA, - "B": InstrumentedServiceMakerB, - "C": InstrumentedServiceMakerC, + // check response + resp := doHTTPRequest(t, httpReq) + buf := make([]byte, 7) + _, err = io.ReadFull(resp.Body, buf) + if err != nil { + t.Fatalf("could not read response: %v", err) } - started := make(map[string]bool) - stopped := make(map[string]bool) + assert.Equal(t, "success", string(buf)) +} - for id, maker := range services { - id := id // Closure for the constructor - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - startHook: func(*p2p.Server) { started[id] = true }, - stopHook: func() { stopped[id] = true }, - }, nil - } - if err := stack.Register(maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) - } +// Tests that the given handler will not be successfully mounted since no HTTP server +// is enabled for RPC +func TestRegisterHandler_Unsuccessful(t *testing.T) { + node, err := New(&DefaultConfig) + if err != nil { + t.Fatalf("could not create new node: %v", err) } - // Register a service that fails to start - failure := errors.New("fail") - failer := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - start: failure, - }, nil + + // create and mount handler + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("success")) + }) + node.RegisterHandler("test", "/test", handler) +} + +// Tests whether websocket requests can be handled on the same port as a regular http server. +func TestWebsocketHTTPOnSamePort_WebsocketRequest(t *testing.T) { + node := startHTTP(t, 0, 0) + defer node.Close() + + ws := strings.Replace(node.HTTPEndpoint(), "http://", "ws://", 1) + + if node.WSEndpoint() != ws { + t.Fatalf("endpoints should be the same") } - if err := stack.Register(failer); err != nil { - t.Fatalf("failer registration failed: %v", err) + if !checkRPC(ws) { + t.Fatalf("ws request failed") } - // Start the protocol stack and ensure all started services stop - for i := 0; i < 100; i++ { - if err := stack.Start(); err != failure { - t.Fatalf("iter %d: stack startup failure mismatch: have %v, want %v", i, err, failure) - } - for id := range services { - if started[id] && !stopped[id] { - t.Fatalf("service %s: started but not stopped", id) - } - delete(started, id) - delete(stopped, id) - } + if !checkRPC(node.HTTPEndpoint()) { + t.Fatalf("http request failed") } } -// Tests that even if a registered service fails to shut down cleanly, it does -// not influece the rest of the shutdown invocations. -func TestServiceTerminationGuarantee(t *testing.T) { - stack, err := New(testNodeConfig()) +func TestWebsocketHTTPOnSeparatePort_WSRequest(t *testing.T) { + // try and get a free port + listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) + t.Fatal("can't listen:", err) } - defer stack.Close() + port := listener.Addr().(*net.TCPAddr).Port + listener.Close() - // Register a batch of good services - services := map[string]InstrumentingWrapper{ - "A": InstrumentedServiceMakerA, - "B": InstrumentedServiceMakerB, - "C": InstrumentedServiceMakerC, - } - started := make(map[string]bool) - stopped := make(map[string]bool) + node := startHTTP(t, 0, port) + defer node.Close() - for id, maker := range services { - id := id // Closure for the constructor - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - startHook: func(*p2p.Server) { started[id] = true }, - stopHook: func() { stopped[id] = true }, - }, nil - } - if err := stack.Register(maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) - } + wsOnHTTP := strings.Replace(node.HTTPEndpoint(), "http://", "ws://", 1) + ws := fmt.Sprintf("ws://127.0.0.1:%d", port) + + if node.WSEndpoint() == wsOnHTTP { + t.Fatalf("endpoints should not be the same") } - // Register a service that fails to shot down cleanly - failure := errors.New("fail") - failer := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - stop: failure, - }, nil + // ensure ws endpoint matches the expected endpoint + if node.WSEndpoint() != ws { + t.Fatalf("ws endpoint is incorrect: expected %s, got %s", ws, node.WSEndpoint()) } - if err := stack.Register(failer); err != nil { - t.Fatalf("failer registration failed: %v", err) + + if !checkRPC(ws) { + t.Fatalf("ws request failed") } - // Start the protocol stack, and ensure that a failing shut down terminates all - for i := 0; i < 100; i++ { - // Start the stack and make sure all is online - if err := stack.Start(); err != nil { - t.Fatalf("iter %d: failed to start protocol stack: %v", i, err) - } - for id := range services { - if !started[id] { - t.Fatalf("iter %d, service %s: service not running", i, id) - } - if stopped[id] { - t.Fatalf("iter %d, service %s: service already stopped", i, id) - } - } - // Stop the stack, verify failure and check all terminations - err := stack.Stop() - if err, ok := err.(*StopError); !ok { - t.Fatalf("iter %d: termination failure mismatch: have %v, want StopError", i, err) - } else { - failer := reflect.TypeOf(&InstrumentedService{}) - if err.Services[failer] != failure { - t.Fatalf("iter %d: failer termination failure mismatch: have %v, want %v", i, err.Services[failer], failure) + if !checkRPC(node.HTTPEndpoint()) { + t.Fatalf("http request failed") + } +} + +type rpcPrefixTest struct { + httpPrefix, wsPrefix string + // These lists paths on which JSON-RPC should be served / not served. + wantHTTP []string + wantNoHTTP []string + wantWS []string + wantNoWS []string +} + +func TestNodeRPCPrefix(t *testing.T) { + t.Parallel() + + tests := []rpcPrefixTest{ + // both off + { + httpPrefix: "", wsPrefix: "", + wantHTTP: []string{"/", "/?p=1"}, + wantNoHTTP: []string{"/test", "/test?p=1"}, + wantWS: []string{"/", "/?p=1"}, + wantNoWS: []string{"/test", "/test?p=1"}, + }, + // only http prefix + { + httpPrefix: "/testprefix", wsPrefix: "", + wantHTTP: []string{"/testprefix", "/testprefix?p=1", "/testprefix/x", "/testprefix/x?p=1"}, + wantNoHTTP: []string{"/", "/?p=1", "/test", "/test?p=1"}, + wantWS: []string{"/", "/?p=1"}, + wantNoWS: []string{"/testprefix", "/testprefix?p=1", "/test", "/test?p=1"}, + }, + // only ws prefix + { + httpPrefix: "", wsPrefix: "/testprefix", + wantHTTP: []string{"/", "/?p=1"}, + wantNoHTTP: []string{"/testprefix", "/testprefix?p=1", "/test", "/test?p=1"}, + wantWS: []string{"/testprefix", "/testprefix?p=1", "/testprefix/x", "/testprefix/x?p=1"}, + wantNoWS: []string{"/", "/?p=1", "/test", "/test?p=1"}, + }, + // both set + { + httpPrefix: "/testprefix", wsPrefix: "/testprefix", + wantHTTP: []string{"/testprefix", "/testprefix?p=1", "/testprefix/x", "/testprefix/x?p=1"}, + wantNoHTTP: []string{"/", "/?p=1", "/test", "/test?p=1"}, + wantWS: []string{"/testprefix", "/testprefix?p=1", "/testprefix/x", "/testprefix/x?p=1"}, + wantNoWS: []string{"/", "/?p=1", "/test", "/test?p=1"}, + }, + } + + for _, test := range tests { + test := test + name := fmt.Sprintf("http=%s ws=%s", test.httpPrefix, test.wsPrefix) + t.Run(name, func(t *testing.T) { + cfg := &Config{ + HTTPHost: "127.0.0.1", + HTTPPathPrefix: test.httpPrefix, + WSHost: "127.0.0.1", + WSPathPrefix: test.wsPrefix, } - if len(err.Services) != 1 { - t.Fatalf("iter %d: failure count mismatch: have %d, want %d", i, len(err.Services), 1) + node, err := New(cfg) + if err != nil { + t.Fatal("can't create node:", err) } - } - for id := range services { - if !stopped[id] { - t.Fatalf("iter %d, service %s: service not terminated", i, id) + defer node.Close() + if err := node.Start(); err != nil { + t.Fatal("can't start node:", err) } - delete(started, id) - delete(stopped, id) - } + test.check(t, node) + }) } } -// TestServiceRetrieval tests that individual services can be retrieved. -func TestServiceRetrieval(t *testing.T) { - // Create a simple stack and register two service types - stack, err := New(testNodeConfig()) - if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) - } - defer stack.Close() +func (test rpcPrefixTest) check(t *testing.T, node *Node) { + t.Helper() + httpBase := "http://" + node.http.listenAddr() + wsBase := "ws://" + node.http.listenAddr() - if err := stack.Register(NewNoopService); err != nil { - t.Fatalf("noop service registration failed: %v", err) + if node.WSEndpoint() != wsBase+test.wsPrefix { + t.Errorf("Error: node has wrong WSEndpoint %q", node.WSEndpoint()) } - if err := stack.Register(NewInstrumentedService); err != nil { - t.Fatalf("instrumented service registration failed: %v", err) + + for _, path := range test.wantHTTP { + resp := rpcRequest(t, httpBase+path) + if resp.StatusCode != 200 { + t.Errorf("Error: %s: bad status code %d, want 200", path, resp.StatusCode) + } } - // Make sure none of the services can be retrieved until started - var noopServ *NoopService - if err := stack.Service(&noopServ); err != ErrNodeStopped { - t.Fatalf("noop service retrieval mismatch: have %v, want %v", err, ErrNodeStopped) + for _, path := range test.wantNoHTTP { + resp := rpcRequest(t, httpBase+path) + if resp.StatusCode != 404 { + t.Errorf("Error: %s: bad status code %d, want 404", path, resp.StatusCode) + } } - var instServ *InstrumentedService - if err := stack.Service(&instServ); err != ErrNodeStopped { - t.Fatalf("instrumented service retrieval mismatch: have %v, want %v", err, ErrNodeStopped) + for _, path := range test.wantWS { + err := wsRequest(t, wsBase+path) + if err != nil { + t.Errorf("Error: %s: WebSocket connection failed: %v", path, err) + } } - // Start the stack and ensure everything is retrievable now - if err := stack.Start(); err != nil { - t.Fatalf("failed to start stack: %v", err) + for _, path := range test.wantNoWS { + err := wsRequest(t, wsBase+path) + if err == nil { + t.Errorf("Error: %s: WebSocket connection succeeded for path in wantNoWS", path) + } } - defer stack.Stop() +} - if err := stack.Service(&noopServ); err != nil { - t.Fatalf("noop service retrieval mismatch: have %v, want %v", err, nil) +func createNode(t *testing.T, httpPort, wsPort int) *Node { + conf := &Config{ + HTTPHost: "127.0.0.1", + HTTPPort: httpPort, + WSHost: "127.0.0.1", + WSPort: wsPort, } - if err := stack.Service(&instServ); err != nil { - t.Fatalf("instrumented service retrieval mismatch: have %v, want %v", err, nil) + node, err := New(conf) + if err != nil { + t.Fatalf("could not create a new node: %v", err) } + return node } -// Tests that all protocols defined by individual services get launched. -func TestProtocolGather(t *testing.T) { - stack, err := New(testNodeConfig()) +func startHTTP(t *testing.T, httpPort, wsPort int) *Node { + node := createNode(t, httpPort, wsPort) + err := node.Start() if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) + t.Fatalf("could not start http service on node: %v", err) } - defer stack.Close() - // Register a batch of services with some configured number of protocols - services := map[string]struct { - Count int - Maker InstrumentingWrapper - }{ - "zero": {0, InstrumentedServiceMakerA}, - "one": {1, InstrumentedServiceMakerB}, - "many": {10, InstrumentedServiceMakerC}, - } - for id, config := range services { - protocols := make([]p2p.Protocol, config.Count) - for i := 0; i < len(protocols); i++ { - protocols[i].Name = id - protocols[i].Version = uint(i) - } - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{ - protocols: protocols, - }, nil - } - if err := stack.Register(config.Maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) - } - } - // Start the services and ensure all protocols start successfully - if err := stack.Start(); err != nil { - t.Fatalf("failed to start protocol stack: %v", err) - } - defer stack.Stop() - - protocols := stack.Server().Protocols - if len(protocols) != 11 { - t.Fatalf("mismatching number of protocols launched: have %d, want %d", len(protocols), 26) - } - for id, config := range services { - for ver := 0; ver < config.Count; ver++ { - launched := false - for i := 0; i < len(protocols); i++ { - if protocols[i].Name == id && protocols[i].Version == uint(ver) { - launched = true - break - } - } - if !launched { - t.Errorf("configured protocol not launched: %s v%d", id, ver) - } - } - } + return node } -// Tests that all APIs defined by individual services get exposed. -func TestAPIGather(t *testing.T) { - stack, err := New(testNodeConfig()) +func doHTTPRequest(t *testing.T, req *http.Request) *http.Response { + client := http.DefaultClient + resp, err := client.Do(req) if err != nil { - t.Fatalf("failed to create protocol stack: %v", err) + t.Fatalf("could not issue a GET request to the given endpoint: %v", err) } - defer stack.Close() + return resp +} - // Register a batch of services with some configured APIs - calls := make(chan string, 1) - makeAPI := func(result string) *OneMethodAPI { - return &OneMethodAPI{fun: func() { calls <- result }} - } - services := map[string]struct { - APIs []rpc.API - Maker InstrumentingWrapper - }{ - "Zero APIs": { - []rpc.API{}, InstrumentedServiceMakerA}, - "Single API": { - []rpc.API{ - {Namespace: "single", Version: "1", Service: makeAPI("single.v1"), Public: true}, - }, InstrumentedServiceMakerB}, - "Many APIs": { - []rpc.API{ - {Namespace: "multi", Version: "1", Service: makeAPI("multi.v1"), Public: true}, - {Namespace: "multi.v2", Version: "2", Service: makeAPI("multi.v2"), Public: true}, - {Namespace: "multi.v2.nested", Version: "2", Service: makeAPI("multi.v2.nested"), Public: true}, - }, InstrumentedServiceMakerC}, - } - - for id, config := range services { - config := config - constructor := func(*ServiceContext) (Service, error) { - return &InstrumentedService{apis: config.APIs}, nil - } - if err := stack.Register(config.Maker(constructor)); err != nil { - t.Fatalf("service %s: registration failed: %v", id, err) +func containsProtocol(stackProtocols []p2p.Protocol, protocol p2p.Protocol) bool { + for _, a := range stackProtocols { + if reflect.DeepEqual(a, protocol) { + return true } } - // Start the services and ensure all API start successfully - if err := stack.Start(); err != nil { - t.Fatalf("failed to start protocol stack: %v", err) - } - defer stack.Stop() + return false +} - // Connect to the RPC server and verify the various registered endpoints - client, err := stack.Attach() - if err != nil { - t.Fatalf("failed to connect to the inproc API server: %v", err) - } - defer client.Close() - - tests := []struct { - Method string - Result string - }{ - {"single_theOneMethod", "single.v1"}, - {"multi_theOneMethod", "multi.v1"}, - {"multi.v2_theOneMethod", "multi.v2"}, - {"multi.v2.nested_theOneMethod", "multi.v2.nested"}, - } - for i, test := range tests { - if err := client.Call(nil, test.Method); err != nil { - t.Errorf("test %d: API request failed: %v", i, err) - } - select { - case result := <-calls: - if result != test.Result { - t.Errorf("test %d: result mismatch: have %s, want %s", i, result, test.Result) - } - case <-time.After(time.Second): - t.Fatalf("test %d: rpc execution timeout", i) +func containsAPI(stackAPIs []rpc.API, api rpc.API) bool { + for _, a := range stackAPIs { + if reflect.DeepEqual(a, api) { + return true } } + return false } diff --git a/node/rpcstack.go b/node/rpcstack.go new file mode 100644 index 00000000..5d411fa6 --- /dev/null +++ b/node/rpcstack.go @@ -0,0 +1,560 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +import ( + "compress/gzip" + "context" + "fmt" + "io" + "net" + "net/http" + "sort" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/rs/cors" +) + +// httpConfig is the JSON-RPC/HTTP configuration. +type httpConfig struct { + Modules []string + CorsAllowedOrigins []string + Vhosts []string + prefix string // path prefix on which to mount http handler + jwtSecret []byte // optional JWT secret +} + +// wsConfig is the JSON-RPC/Websocket configuration +type wsConfig struct { + Origins []string + Modules []string + prefix string // path prefix on which to mount ws handler + jwtSecret []byte // optional JWT secret +} + +type rpcHandler struct { + http.Handler + server *rpc.Server +} + +type httpServer struct { + log log.Logger + timeouts rpc.HTTPTimeouts + mux http.ServeMux // registered handlers go here + + mu sync.Mutex + server *http.Server + listener net.Listener // non-nil when server is running + + // HTTP RPC handler things. + + httpConfig httpConfig + httpHandler atomic.Value // *rpcHandler + + // WebSocket handler things. + wsConfig wsConfig + wsHandler atomic.Value // *rpcHandler + + // These are set by setListenAddr. + endpoint string + host string + port int + + handlerNames map[string]string +} + +const ( + shutdownTimeout = 5 * time.Second +) + +func newHTTPServer(log log.Logger, timeouts rpc.HTTPTimeouts) *httpServer { + h := &httpServer{log: log, timeouts: timeouts, handlerNames: make(map[string]string)} + + h.httpHandler.Store((*rpcHandler)(nil)) + h.wsHandler.Store((*rpcHandler)(nil)) + return h +} + +// setListenAddr configures the listening address of the server. +// The address can only be set while the server isn't running. +func (h *httpServer) setListenAddr(host string, port int) error { + h.mu.Lock() + defer h.mu.Unlock() + + if h.listener != nil && (host != h.host || port != h.port) { + return fmt.Errorf("HTTP server already running on %s", h.endpoint) + } + + h.host, h.port = host, port + h.endpoint = fmt.Sprintf("%s:%d", host, port) + return nil +} + +// listenAddr returns the listening address of the server. +func (h *httpServer) listenAddr() string { + h.mu.Lock() + defer h.mu.Unlock() + + if h.listener != nil { + return h.listener.Addr().String() + } + return h.endpoint +} + +// start starts the HTTP server if it is enabled and not already running. +func (h *httpServer) start() error { + h.mu.Lock() + defer h.mu.Unlock() + + if h.endpoint == "" || h.listener != nil { + return nil // already running or not configured + } + + // Initialize the server. + h.server = &http.Server{Handler: h} + if h.timeouts != (rpc.HTTPTimeouts{}) { + CheckTimeouts(&h.timeouts) + h.server.ReadTimeout = h.timeouts.ReadTimeout + h.server.ReadHeaderTimeout = h.timeouts.ReadHeaderTimeout + h.server.WriteTimeout = h.timeouts.WriteTimeout + h.server.IdleTimeout = h.timeouts.IdleTimeout + } + + // Start the server. + listener, err := net.Listen("tcp", h.endpoint) + if err != nil { + // If the server fails to start, we need to clear out the RPC and WS + // configuration so they can be configured another time. + h.disableRPC() + h.disableWS() + return err + } + h.listener = listener + go h.server.Serve(listener) + + if h.wsAllowed() { + url := fmt.Sprintf("ws://%v", listener.Addr()) + if h.wsConfig.prefix != "" { + url += h.wsConfig.prefix + } + h.log.Info("WebSocket enabled", "url", url) + } + // if server is websocket only, return after logging + if !h.rpcAllowed() { + return nil + } + // Log http endpoint. + h.log.Info("HTTP server started", + "endpoint", listener.Addr(), "auth", (h.httpConfig.jwtSecret != nil), + "prefix", h.httpConfig.prefix, + "cors", strings.Join(h.httpConfig.CorsAllowedOrigins, ","), + "vhosts", strings.Join(h.httpConfig.Vhosts, ","), + ) + + // Log all handlers mounted on server. + var paths []string + for path := range h.handlerNames { + paths = append(paths, path) + } + sort.Strings(paths) + logged := make(map[string]bool, len(paths)) + for _, path := range paths { + name := h.handlerNames[path] + if !logged[name] { + log.Info(name+" enabled", "url", "http://"+listener.Addr().String()+path) + logged[name] = true + } + } + return nil +} + +func (h *httpServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // check if ws request and serve if ws enabled + ws := h.wsHandler.Load().(*rpcHandler) + if ws != nil && isWebsocket(r) { + if checkPath(r, h.wsConfig.prefix) { + ws.ServeHTTP(w, r) + } + return + } + // if http-rpc is enabled, try to serve request + rpc := h.httpHandler.Load().(*rpcHandler) + if rpc != nil { + // First try to route in the mux. + // Requests to a path below root are handled by the mux, + // which has all the handlers registered via Node.RegisterHandler. + // These are made available when RPC is enabled. + muxHandler, pattern := h.mux.Handler(r) + if pattern != "" { + muxHandler.ServeHTTP(w, r) + return + } + + if checkPath(r, h.httpConfig.prefix) { + rpc.ServeHTTP(w, r) + return + } + } + w.WriteHeader(http.StatusNotFound) +} + +// checkPath checks whether a given request URL matches a given path prefix. +func checkPath(r *http.Request, path string) bool { + // if no prefix has been specified, request URL must be on root + if path == "" { + return r.URL.Path == "/" + } + // otherwise, check to make sure prefix matches + return len(r.URL.Path) >= len(path) && r.URL.Path[:len(path)] == path +} + +// validatePrefix checks if 'path' is a valid configuration value for the RPC prefix option. +func validatePrefix(what, path string) error { + if path == "" { + return nil + } + if path[0] != '/' { + return fmt.Errorf(`%s RPC path prefix %q does not contain leading "/"`, what, path) + } + if strings.ContainsAny(path, "?#") { + // This is just to avoid confusion. While these would match correctly (i.e. they'd + // match if URL-escaped into path), it's not easy to understand for users when + // setting that on the command line. + return fmt.Errorf("%s RPC path prefix %q contains URL meta-characters", what, path) + } + return nil +} + +// stop shuts down the HTTP server. +func (h *httpServer) stop() { + h.mu.Lock() + defer h.mu.Unlock() + h.doStop() +} + +func (h *httpServer) doStop() { + if h.listener == nil { + return // not running + } + + // Shut down the server. + httpHandler := h.httpHandler.Load().(*rpcHandler) + wsHandler := h.wsHandler.Load().(*rpcHandler) + if httpHandler != nil { + h.httpHandler.Store((*rpcHandler)(nil)) + httpHandler.server.Stop() + } + if wsHandler != nil { + h.wsHandler.Store((*rpcHandler)(nil)) + wsHandler.server.Stop() + } + ctx, cancel := context.WithTimeout(context.Background(), shutdownTimeout) + defer cancel() + err := h.server.Shutdown(ctx) + if err == ctx.Err() { + h.log.Warn("HTTP server graceful shutdown timed out") + h.server.Close() + } + h.listener.Close() + h.log.Info("HTTP server stopped", "endpoint", h.listener.Addr()) + + // Clear out everything to allow re-configuring it later. + h.host, h.port, h.endpoint = "", 0, "" + h.server, h.listener = nil, nil +} + +// enableRPC turns on JSON-RPC over HTTP on the server. +func (h *httpServer) enableRPC(apis []rpc.API, config httpConfig) error { + h.mu.Lock() + defer h.mu.Unlock() + + if h.rpcAllowed() { + return fmt.Errorf("JSON-RPC over HTTP is already enabled") + } + + // Create RPC server and handler. + srv := rpc.NewServer() + if err := RegisterApis(apis, config.Modules, srv); err != nil { + return err + } + h.httpConfig = config + h.httpHandler.Store(&rpcHandler{ + Handler: NewHTTPHandlerStack(srv, config.CorsAllowedOrigins, config.Vhosts, config.jwtSecret), + server: srv, + }) + return nil +} + +// disableRPC stops the HTTP RPC handler. This is internal, the caller must hold h.mu. +func (h *httpServer) disableRPC() bool { + handler := h.httpHandler.Load().(*rpcHandler) + if handler != nil { + h.httpHandler.Store((*rpcHandler)(nil)) + handler.server.Stop() + } + return handler != nil +} + +// enableWS turns on JSON-RPC over WebSocket on the server. +func (h *httpServer) enableWS(apis []rpc.API, config wsConfig) error { + h.mu.Lock() + defer h.mu.Unlock() + + if h.wsAllowed() { + return fmt.Errorf("JSON-RPC over WebSocket is already enabled") + } + // Create RPC server and handler. + srv := rpc.NewServer() + if err := RegisterApis(apis, config.Modules, srv); err != nil { + return err + } + h.wsConfig = config + h.wsHandler.Store(&rpcHandler{ + Handler: NewWSHandlerStack(srv.WebsocketHandler(config.Origins), config.jwtSecret), + server: srv, + }) + return nil +} + +// stopWS disables JSON-RPC over WebSocket and also stops the server if it only serves WebSocket. +func (h *httpServer) stopWS() { + h.mu.Lock() + defer h.mu.Unlock() + + if h.disableWS() { + if !h.rpcAllowed() { + h.doStop() + } + } +} + +// disableWS disables the WebSocket handler. This is internal, the caller must hold h.mu. +func (h *httpServer) disableWS() bool { + ws := h.wsHandler.Load().(*rpcHandler) + if ws != nil { + h.wsHandler.Store((*rpcHandler)(nil)) + ws.server.Stop() + } + return ws != nil +} + +// rpcAllowed returns true when JSON-RPC over HTTP is enabled. +func (h *httpServer) rpcAllowed() bool { + return h.httpHandler.Load().(*rpcHandler) != nil +} + +// wsAllowed returns true when JSON-RPC over WebSocket is enabled. +func (h *httpServer) wsAllowed() bool { + return h.wsHandler.Load().(*rpcHandler) != nil +} + +// isWebsocket checks the header of an http request for a websocket upgrade request. +func isWebsocket(r *http.Request) bool { + return strings.EqualFold(r.Header.Get("Upgrade"), "websocket") && + strings.Contains(strings.ToLower(r.Header.Get("Connection")), "upgrade") +} + +// NewHTTPHandlerStack returns wrapped http-related handlers +func NewHTTPHandlerStack(srv http.Handler, cors []string, vhosts []string, jwtSecret []byte) http.Handler { + // Wrap the CORS-handler within a host-handler + handler := newCorsHandler(srv, cors) + handler = newVHostHandler(vhosts, handler) + if len(jwtSecret) != 0 { + handler = newJWTHandler(jwtSecret, handler) + } + return newGzipHandler(handler) +} + +// NewWSHandlerStack returns a wrapped ws-related handler. +func NewWSHandlerStack(srv http.Handler, jwtSecret []byte) http.Handler { + if len(jwtSecret) != 0 { + return newJWTHandler(jwtSecret, srv) + } + return srv +} + +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 + } + c := cors.New(cors.Options{ + AllowedOrigins: allowedOrigins, + AllowedMethods: []string{http.MethodPost, http.MethodGet}, + AllowedHeaders: []string{"*"}, + MaxAge: 600, + }) + return c.Handler(srv) +} + +// virtualHostHandler is a handler which validates the Host-header of incoming requests. +// Using virtual hosts can help prevent DNS rebinding attacks, where a 'random' domain name points to +// the service ip address (but without CORS headers). By verifying the targeted virtual host, we can +// ensure that it's a destination that the node operator has defined. +type virtualHostHandler struct { + vhosts map[string]struct{} + next http.Handler +} + +func newVHostHandler(vhosts []string, next http.Handler) http.Handler { + vhostMap := make(map[string]struct{}) + for _, allowedHost := range vhosts { + vhostMap[strings.ToLower(allowedHost)] = struct{}{} + } + return &virtualHostHandler{vhostMap, next} +} + +// ServeHTTP serves JSON-RPC requests over HTTP, implements http.Handler +func (h *virtualHostHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // if r.Host is not set, we can continue serving since a browser would set the Host header + if r.Host == "" { + h.next.ServeHTTP(w, r) + return + } + host, _, err := net.SplitHostPort(r.Host) + if err != nil { + // Either invalid (too many colons) or no port specified + host = r.Host + } + if ipAddr := net.ParseIP(host); ipAddr != nil { + // It's an IP address, we can serve that + h.next.ServeHTTP(w, r) + return + } + // Not an IP address, but a hostname. Need to validate + if _, exist := h.vhosts["*"]; exist { + h.next.ServeHTTP(w, r) + return + } + if _, exist := h.vhosts[host]; exist { + h.next.ServeHTTP(w, r) + return + } + http.Error(w, "invalid host specified", http.StatusForbidden) +} + +var gzPool = sync.Pool{ + New: func() interface{} { + w := gzip.NewWriter(io.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) + }) +} + +type ipcServer struct { + log log.Logger + endpoint string + + mu sync.Mutex + listener net.Listener + srv *rpc.Server +} + +func newIPCServer(log log.Logger, endpoint string) *ipcServer { + return &ipcServer{log: log, endpoint: endpoint} +} + +// Start starts the httpServer's http.Server +func (is *ipcServer) start(apis []rpc.API) error { + is.mu.Lock() + defer is.mu.Unlock() + + if is.listener != nil { + return nil // already running + } + listener, srv, err := rpc.StartIPCEndpoint(is.endpoint, apis) + if err != nil { + is.log.Warn("IPC opening failed", "url", is.endpoint, "error", err) + return err + } + is.log.Info("IPC endpoint opened", "url", is.endpoint) + is.listener, is.srv = listener, srv + return nil +} + +func (is *ipcServer) stop() error { + is.mu.Lock() + defer is.mu.Unlock() + + if is.listener == nil { + return nil // not running + } + err := is.listener.Close() + is.srv.Stop() + is.listener, is.srv = nil, nil + is.log.Info("IPC endpoint closed", "url", is.endpoint) + return err +} + +// RegisterApis checks the given modules' availability, generates an allowlist based on the allowed modules, +// and then registers all of the APIs exposed by the services. +func RegisterApis(apis []rpc.API, modules []string, srv *rpc.Server) error { + if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 { + log.Error("Unavailable modules in HTTP API list", "unavailable", bad, "available", available) + } + // Generate the allow list based on the allowed modules + allowList := make(map[string]bool) + for _, module := range modules { + allowList[module] = true + } + // Register all the APIs exposed by the services + for _, api := range apis { + if allowList[api.Namespace] || len(allowList) == 0 { + if err := srv.RegisterName(api.Namespace, api.Service); err != nil { + return err + } + } + } + return nil +} diff --git a/node/rpcstack_test.go b/node/rpcstack_test.go new file mode 100644 index 00000000..ebc25380 --- /dev/null +++ b/node/rpcstack_test.go @@ -0,0 +1,423 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package node + +import ( + "bytes" + "fmt" + "net/http" + "net/url" + "strconv" + "strings" + "testing" + "time" + + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/golang-jwt/jwt/v4" + "github.com/gorilla/websocket" + "github.com/stretchr/testify/assert" +) + +// TestCorsHandler makes sure CORS are properly handled on the http server. +func TestCorsHandler(t *testing.T) { + srv := createAndStartServer(t, &httpConfig{CorsAllowedOrigins: []string{"test", "test.com"}}, false, &wsConfig{}) + defer srv.stop() + url := "http://" + srv.listenAddr() + + resp := rpcRequest(t, url, "origin", "test.com") + assert.Equal(t, "test.com", resp.Header.Get("Access-Control-Allow-Origin")) + + resp2 := rpcRequest(t, url, "origin", "bad") + assert.Equal(t, "", resp2.Header.Get("Access-Control-Allow-Origin")) +} + +// TestVhosts makes sure vhosts are properly handled on the http server. +func TestVhosts(t *testing.T) { + srv := createAndStartServer(t, &httpConfig{Vhosts: []string{"test"}}, false, &wsConfig{}) + defer srv.stop() + url := "http://" + srv.listenAddr() + + resp := rpcRequest(t, url, "host", "test") + assert.Equal(t, resp.StatusCode, http.StatusOK) + + resp2 := rpcRequest(t, url, "host", "bad") + assert.Equal(t, resp2.StatusCode, http.StatusForbidden) +} + +type originTest struct { + spec string + expOk []string + expFail []string +} + +// splitAndTrim splits input separated by a comma +// and trims excessive white space from the substrings. +// Copied over from flags.go +func splitAndTrim(input string) (ret []string) { + l := strings.Split(input, ",") + for _, r := range l { + r = strings.TrimSpace(r) + if len(r) > 0 { + ret = append(ret, r) + } + } + return ret +} + +// TestWebsocketOrigins makes sure the websocket origins are properly handled on the websocket server. +func TestWebsocketOrigins(t *testing.T) { + tests := []originTest{ + { + spec: "*", // allow all + expOk: []string{"", "http://test", "https://test", "http://test:8540", "https://test:8540", + "http://test.com", "https://foo.test", "http://testa", "http://atestb:8540", "https://atestb:8540"}, + }, + { + spec: "test", + expOk: []string{"http://test", "https://test", "http://test:8540", "https://test:8540"}, + expFail: []string{"http://test.com", "https://foo.test", "http://testa", "http://atestb:8540", "https://atestb:8540"}, + }, + // scheme tests + { + spec: "https://test", + expOk: []string{"https://test", "https://test:9999"}, + expFail: []string{ + "test", // no scheme, required by spec + "http://test", // wrong scheme + "http://test.foo", "https://a.test.x", // subdomain variations + "http://testx:8540", "https://xtest:8540"}, + }, + // ip tests + { + spec: "https://12.34.56.78", + expOk: []string{"https://12.34.56.78", "https://12.34.56.78:8540"}, + expFail: []string{ + "http://12.34.56.78", // wrong scheme + "http://12.34.56.78:443", // wrong scheme + "http://1.12.34.56.78", // wrong 'domain name' + "http://12.34.56.78.a", // wrong 'domain name' + "https://87.65.43.21", "http://87.65.43.21:8540", "https://87.65.43.21:8540"}, + }, + // port tests + { + spec: "test:8540", + expOk: []string{"http://test:8540", "https://test:8540"}, + expFail: []string{ + "http://test", "https://test", // spec says port required + "http://test:8541", "https://test:8541", // wrong port + "http://bad", "https://bad", "http://bad:8540", "https://bad:8540"}, + }, + // scheme and port + { + spec: "https://test:8540", + expOk: []string{"https://test:8540"}, + expFail: []string{ + "https://test", // missing port + "http://test", // missing port, + wrong scheme + "http://test:8540", // wrong scheme + "http://test:8541", "https://test:8541", // wrong port + "http://bad", "https://bad", "http://bad:8540", "https://bad:8540"}, + }, + // several allowed origins + { + spec: "localhost,http://127.0.0.1", + expOk: []string{"localhost", "http://localhost", "https://localhost:8443", + "http://127.0.0.1", "http://127.0.0.1:8080"}, + expFail: []string{ + "https://127.0.0.1", // wrong scheme + "http://bad", "https://bad", "http://bad:8540", "https://bad:8540"}, + }, + } + for _, tc := range tests { + srv := createAndStartServer(t, &httpConfig{}, true, &wsConfig{Origins: splitAndTrim(tc.spec)}) + url := fmt.Sprintf("ws://%v", srv.listenAddr()) + for _, origin := range tc.expOk { + if err := wsRequest(t, url, "Origin", origin); err != nil { + t.Errorf("spec '%v', origin '%v': expected ok, got %v", tc.spec, origin, err) + } + } + for _, origin := range tc.expFail { + if err := wsRequest(t, url, "Origin", origin); err == nil { + t.Errorf("spec '%v', origin '%v': expected not to allow, got ok", tc.spec, origin) + } + } + srv.stop() + } +} + +// TestIsWebsocket tests if an incoming websocket upgrade request is handled properly. +func TestIsWebsocket(t *testing.T) { + r, _ := http.NewRequest("GET", "/", nil) + + assert.False(t, isWebsocket(r)) + r.Header.Set("upgrade", "websocket") + assert.False(t, isWebsocket(r)) + r.Header.Set("connection", "upgrade") + assert.True(t, isWebsocket(r)) + r.Header.Set("connection", "upgrade,keep-alive") + assert.True(t, isWebsocket(r)) + r.Header.Set("connection", " UPGRADE,keep-alive") + assert.True(t, isWebsocket(r)) +} + +func Test_checkPath(t *testing.T) { + tests := []struct { + req *http.Request + prefix string + expected bool + }{ + { + req: &http.Request{URL: &url.URL{Path: "/test"}}, + prefix: "/test", + expected: true, + }, + { + req: &http.Request{URL: &url.URL{Path: "/testing"}}, + prefix: "/test", + expected: true, + }, + { + req: &http.Request{URL: &url.URL{Path: "/"}}, + prefix: "/test", + expected: false, + }, + { + req: &http.Request{URL: &url.URL{Path: "/fail"}}, + prefix: "/test", + expected: false, + }, + { + req: &http.Request{URL: &url.URL{Path: "/"}}, + prefix: "", + expected: true, + }, + { + req: &http.Request{URL: &url.URL{Path: "/fail"}}, + prefix: "", + expected: false, + }, + { + req: &http.Request{URL: &url.URL{Path: "/"}}, + prefix: "/", + expected: true, + }, + { + req: &http.Request{URL: &url.URL{Path: "/testing"}}, + prefix: "/", + expected: true, + }, + } + + for i, tt := range tests { + t.Run(strconv.Itoa(i), func(t *testing.T) { + assert.Equal(t, tt.expected, checkPath(tt.req, tt.prefix)) + }) + } +} + +func createAndStartServer(t *testing.T, conf *httpConfig, ws bool, wsConf *wsConfig) *httpServer { + t.Helper() + + srv := newHTTPServer(testlog.Logger(t, log.LvlDebug), rpc.DefaultHTTPTimeouts) + assert.NoError(t, srv.enableRPC(nil, *conf)) + if ws { + assert.NoError(t, srv.enableWS(nil, *wsConf)) + } + assert.NoError(t, srv.setListenAddr("localhost", 0)) + assert.NoError(t, srv.start()) + return srv +} + +// wsRequest attempts to open a WebSocket connection to the given URL. +func wsRequest(t *testing.T, url string, extraHeaders ...string) error { + t.Helper() + //t.Logf("checking WebSocket on %s (origin %q)", url, browserOrigin) + + headers := make(http.Header) + // Apply extra headers. + if len(extraHeaders)%2 != 0 { + panic("odd extraHeaders length") + } + for i := 0; i < len(extraHeaders); i += 2 { + key, value := extraHeaders[i], extraHeaders[i+1] + headers.Set(key, value) + } + conn, _, err := websocket.DefaultDialer.Dial(url, headers) + if conn != nil { + conn.Close() + } + return err +} + +// rpcRequest performs a JSON-RPC request to the given URL. +func rpcRequest(t *testing.T, url string, extraHeaders ...string) *http.Response { + t.Helper() + + // Create the request. + body := bytes.NewReader([]byte(`{"jsonrpc":"2.0","id":1,"method":"rpc_modules","params":[]}`)) + req, err := http.NewRequest("POST", url, body) + if err != nil { + t.Fatal("could not create http request:", err) + } + req.Header.Set("content-type", "application/json") + + // Apply extra headers. + if len(extraHeaders)%2 != 0 { + panic("odd extraHeaders length") + } + for i := 0; i < len(extraHeaders); i += 2 { + key, value := extraHeaders[i], extraHeaders[i+1] + if strings.EqualFold(key, "host") { + req.Host = value + } else { + req.Header.Set(key, value) + } + } + + // Perform the request. + t.Logf("checking RPC/HTTP on %s %v", url, extraHeaders) + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + return resp +} + +type testClaim map[string]interface{} + +func (testClaim) Valid() error { + return nil +} + +func TestJWT(t *testing.T) { + var secret = []byte("secret") + issueToken := func(secret []byte, method jwt.SigningMethod, input map[string]interface{}) string { + if method == nil { + method = jwt.SigningMethodHS256 + } + ss, _ := jwt.NewWithClaims(method, testClaim(input)).SignedString(secret) + return ss + } + srv := createAndStartServer(t, &httpConfig{jwtSecret: []byte("secret")}, + true, &wsConfig{Origins: []string{"*"}, jwtSecret: []byte("secret")}) + wsUrl := fmt.Sprintf("ws://%v", srv.listenAddr()) + htUrl := fmt.Sprintf("http://%v", srv.listenAddr()) + + expOk := []func() string{ + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix() + 4})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix() - 4})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{ + "iat": time.Now().Unix(), + "exp": time.Now().Unix() + 2, + })) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{ + "iat": time.Now().Unix(), + "bar": "baz", + })) + }, + } + for i, tokenFn := range expOk { + token := tokenFn() + if err := wsRequest(t, wsUrl, "Authorization", token); err != nil { + t.Errorf("test %d-ws, token '%v': expected ok, got %v", i, token, err) + } + token = tokenFn() + if resp := rpcRequest(t, htUrl, "Authorization", token); resp.StatusCode != 200 { + t.Errorf("test %d-http, token '%v': expected ok, got %v", i, token, resp.StatusCode) + } + } + + expFail := []func() string{ + // future + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix() + int64(jwtExpiryTimeout.Seconds()) + 1})) + }, + // stale + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix() - int64(jwtExpiryTimeout.Seconds()) - 1})) + }, + // wrong algo + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, jwt.SigningMethodHS512, testClaim{"iat": time.Now().Unix() + 4})) + }, + // expired + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix(), "exp": time.Now().Unix()})) + }, + // missing mandatory iat + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{})) + }, + // wrong secret + func() string { + return fmt.Sprintf("Bearer %v", issueToken([]byte("wrong"), nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken([]byte{}, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(nil, nil, testClaim{"iat": time.Now().Unix()})) + }, + // Various malformed syntax + func() string { + return fmt.Sprintf("%v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("bearer %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer: %v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer:%v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer\t%v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + func() string { + return fmt.Sprintf("Bearer \t%v", issueToken(secret, nil, testClaim{"iat": time.Now().Unix()})) + }, + } + for i, tokenFn := range expFail { + token := tokenFn() + if err := wsRequest(t, wsUrl, "Authorization", token); err == nil { + t.Errorf("tc %d-ws, token '%v': expected not to allow, got ok", i, token) + } + + token = tokenFn() + resp := rpcRequest(t, htUrl, "Authorization", token) + if resp.StatusCode != http.StatusUnauthorized { + t.Errorf("tc %d-http, token '%v': expected not to allow, got %v", i, token, resp.StatusCode) + } + } + srv.stop() +} diff --git a/node/service.go b/node/service.go deleted file mode 100644 index 3e037f88..00000000 --- a/node/service.go +++ /dev/null @@ -1,122 +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 node - -import ( - "path/filepath" - "reflect" - - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" -) - -// ServiceContext is a collection of service independent options inherited from -// the protocol stack, that is passed to all constructors to be optionally used; -// as well as utility methods to operate on the service environment. -type ServiceContext struct { - config *Config - services map[reflect.Type]Service // Index of the already constructed services - EventMux *event.TypeMux // Event multiplexer used for decoupled notifications - AccountManager *accounts.Manager // Account manager created by the node. -} - -// 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, namespace string) (ethdb.Database, error) { - if ctx.config.DataDir == "" { - return rawdb.NewMemoryDatabase(), nil - } - return rawdb.NewLevelDBDatabase(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 - } - root := ctx.config.ResolvePath(name) - - switch { - case freezer == "": - freezer = filepath.Join(root, "ancient") - case !filepath.IsAbs(freezer): - freezer = ctx.config.ResolvePath(freezer) - } - return rawdb.NewLevelDBDatabaseWithFreezer(root, cache, handles, freezer, namespace) -} - -// ResolvePath resolves a user path into the data directory if that was relative -// and if the user actually uses persistent storage. It will return an empty string -// for emphemeral storage and the user's own input for absolute paths. -func (ctx *ServiceContext) ResolvePath(path string) string { - return ctx.config.ResolvePath(path) -} - -// Service retrieves a currently running service registered of a specific type. -func (ctx *ServiceContext) Service(service interface{}) error { - element := reflect.ValueOf(service).Elem() - if running, ok := ctx.services[element.Type()]; ok { - element.Set(reflect.ValueOf(running)) - return nil - } - 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) - -// Service is an individual protocol that can be registered into a node. -// -// Notes: -// -// • Service life-cycle management is delegated to the node. The service is allowed to -// initialize itself upon creation, but no goroutines should be spun up outside of the -// Start method. -// -// • Restart logic is not required as the node will create a fresh instance -// every time a service is started. -type Service interface { - // Protocols retrieves the P2P protocols the service wishes to start. - Protocols() []p2p.Protocol - - // APIs retrieves the list of RPC descriptors the service provides - APIs() []rpc.API - - // Start is called after all services have been constructed and the networking - // layer was also initialized to spawn any goroutines required by the service. - Start(server *p2p.Server) error - - // Stop terminates all goroutines belonging to the service, blocking until they - // are all terminated. - Stop() error -} diff --git a/node/service_test.go b/node/service_test.go deleted file mode 100644 index 63004a51..00000000 --- a/node/service_test.go +++ /dev/null @@ -1,98 +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 node - -import ( - "fmt" - "io/ioutil" - "os" - "path/filepath" - "testing" -) - -// Tests that databases are correctly created persistent or ephemeral based on -// the configured service context. -func TestContextDatabases(t *testing.T) { - // Create a temporary folder and ensure no database is contained within - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("failed to create temporary data directory: %v", err) - } - defer os.RemoveAll(dir) - - if _, err := os.Stat(filepath.Join(dir, "database")); err == nil { - t.Fatalf("non-created database already exists") - } - // 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, "") - if err != nil { - t.Fatalf("failed to open persistent database: %v", err) - } - db.Close() - - if _, err := os.Stat(filepath.Join(dir, "unit-test", "persistent")); err != nil { - t.Fatalf("persistent database doesn't exists: %v", err) - } - // 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, "") - if err != nil { - t.Fatalf("failed to open ephemeral database: %v", err) - } - db.Close() - - if _, err := os.Stat(filepath.Join(dir, "ephemeral")); err == nil { - t.Fatalf("ephemeral database exists") - } -} - -// Tests that already constructed services can be retrieves by later ones. -func TestContextServices(t *testing.T) { - stack, err := New(testNodeConfig()) - 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 - if ctx.Service(&objA) != nil { - return nil, fmt.Errorf("former service not found") - } - var objB *NoopServiceB - if err := ctx.Service(&objB); err != ErrServiceUnknown { - return nil, fmt.Errorf("latters lookup error mismatch: have %v, want %v", err, ErrServiceUnknown) - } - return new(NoopService), nil - } - // Register the collection of services - if err := stack.Register(NewNoopServiceA); err != nil { - t.Fatalf("former failed to register service: %v", err) - } - if err := stack.Register(verifier); err != nil { - t.Fatalf("failed to register service verifier: %v", err) - } - if err := stack.Register(NewNoopServiceB); err != nil { - t.Fatalf("latter failed to register service: %v", err) - } - // Start the protocol stack and ensure services are constructed in order - if err := stack.Start(); err != nil { - t.Fatalf("failed to start stack: %v", err) - } - defer stack.Stop() -} diff --git a/node/utils_test.go b/node/utils_test.go index 62c7bc90..681f3a8b 100644 --- a/node/utils_test.go +++ b/node/utils_test.go @@ -20,61 +20,38 @@ package node import ( - "reflect" - - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" ) -// NoopService is a trivial implementation of the Service interface. -type NoopService struct{} +// NoopLifecycle is a trivial implementation of the Service interface. +type NoopLifecycle struct{} -func (s *NoopService) Protocols() []p2p.Protocol { return nil } -func (s *NoopService) APIs() []rpc.API { return nil } -func (s *NoopService) Start(*p2p.Server) error { return nil } -func (s *NoopService) Stop() error { return nil } +func (s *NoopLifecycle) Start() error { return nil } +func (s *NoopLifecycle) Stop() error { return nil } -func NewNoopService(*ServiceContext) (Service, error) { return new(NoopService), nil } +func NewNoop() *Noop { + noop := new(Noop) + return noop +} -// Set of services all wrapping the base NoopService resulting in the same method +// Set of services all wrapping the base NoopLifecycle resulting in the same method // signatures but different outer types. -type NoopServiceA struct{ NoopService } -type NoopServiceB struct{ NoopService } -type NoopServiceC struct{ NoopService } +type Noop struct{ NoopLifecycle } -func NewNoopServiceA(*ServiceContext) (Service, error) { return new(NoopServiceA), nil } -func NewNoopServiceB(*ServiceContext) (Service, error) { return new(NoopServiceB), nil } -func NewNoopServiceC(*ServiceContext) (Service, error) { return new(NoopServiceC), nil } - -// InstrumentedService is an implementation of Service for which all interface +// InstrumentedService is an implementation of Lifecycle for which all interface // methods can be instrumented both return value as well as event hook wise. type InstrumentedService struct { - protocols []p2p.Protocol - apis []rpc.API - start error - stop error - - protocolsHook func() - startHook func(*p2p.Server) - stopHook func() -} - -func NewInstrumentedService(*ServiceContext) (Service, error) { return new(InstrumentedService), nil } - -func (s *InstrumentedService) Protocols() []p2p.Protocol { - if s.protocolsHook != nil { - s.protocolsHook() - } - return s.protocols -} + start error + stop error -func (s *InstrumentedService) APIs() []rpc.API { - return s.apis + startHook func() + stopHook func() } -func (s *InstrumentedService) Start(server *p2p.Server) error { +func (s *InstrumentedService) Start() error { if s.startHook != nil { - s.startHook(server) + s.startHook() } return s.start } @@ -86,48 +63,44 @@ func (s *InstrumentedService) Stop() error { return s.stop } -// InstrumentingWrapper is a method to specialize a service constructor returning -// a generic InstrumentedService into one returning a wrapping specific one. -type InstrumentingWrapper func(base ServiceConstructor) ServiceConstructor +type FullService struct{} -func InstrumentingWrapperMaker(base ServiceConstructor, kind reflect.Type) ServiceConstructor { - return func(ctx *ServiceContext) (Service, error) { - obj, err := base(ctx) - if err != nil { - return nil, err - } - wrapper := reflect.New(kind) - wrapper.Elem().Field(0).Set(reflect.ValueOf(obj).Elem()) +func NewFullService(stack *Node) (*FullService, error) { + fs := new(FullService) - return wrapper.Interface().(Service), nil - } + stack.RegisterProtocols(fs.Protocols()) + stack.RegisterAPIs(fs.APIs()) + stack.RegisterLifecycle(fs) + return fs, nil } -// Set of services all wrapping the base InstrumentedService resulting in the -// same method signatures but different outer types. -type InstrumentedServiceA struct{ InstrumentedService } -type InstrumentedServiceB struct{ InstrumentedService } -type InstrumentedServiceC struct{ InstrumentedService } - -func InstrumentedServiceMakerA(base ServiceConstructor) ServiceConstructor { - return InstrumentingWrapperMaker(base, reflect.TypeOf(InstrumentedServiceA{})) -} +func (f *FullService) Start() error { return nil } -func InstrumentedServiceMakerB(base ServiceConstructor) ServiceConstructor { - return InstrumentingWrapperMaker(base, reflect.TypeOf(InstrumentedServiceB{})) -} +func (f *FullService) Stop() error { return nil } -func InstrumentedServiceMakerC(base ServiceConstructor) ServiceConstructor { - return InstrumentingWrapperMaker(base, reflect.TypeOf(InstrumentedServiceC{})) -} - -// OneMethodAPI is a single-method API handler to be returned by test services. -type OneMethodAPI struct { - fun func() +func (f *FullService) Protocols() []p2p.Protocol { + return []p2p.Protocol{ + { + Name: "test1", + Version: uint(1), + }, + { + Name: "test2", + Version: uint(2), + }, + } } -func (api *OneMethodAPI) TheOneMethod() { - if api.fun != nil { - api.fun() +func (f *FullService) APIs() []rpc.API { + return []rpc.API{ + { + Namespace: "admin", + }, + { + Namespace: "debug", + }, + { + Namespace: "net", + }, } } diff --git a/oss-fuzz.sh b/oss-fuzz.sh new file mode 100644 index 00000000..745a5ba7 --- /dev/null +++ b/oss-fuzz.sh @@ -0,0 +1,129 @@ +#/bin/bash -eu +# Copyright 2020 Google 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. +# +################################################################################ + +# This file is for integration with Google OSS-Fuzz. +# The following ENV variables are available when executing on OSS-fuzz: +# +# /out/ $OUT Directory to store build artifacts (fuzz targets, dictionaries, options files, seed corpus archives). +# /src/ $SRC Directory to checkout source files. +# /work/ $WORK Directory to store intermediate files. +# +# $CC, $CXX, $CCC The C and C++ compiler binaries. +# $CFLAGS, $CXXFLAGS C and C++ compiler flags. +# $LIB_FUZZING_ENGINE C++ compiler argument to link fuzz target against the prebuilt engine library (e.g. libFuzzer). + +# This sets the -coverpgk for the coverage report when the corpus is executed through go test +coverpkg="github.com/ethereum/go-ethereum/..." + +function coverbuild { + path=$1 + function=$2 + fuzzer=$3 + tags="" + + if [[ $# -eq 4 ]]; then + tags="-tags $4" + fi + cd $path + fuzzed_package=`pwd | rev | cut -d'/' -f 1 | rev` + cp $GOPATH/ossfuzz_coverage_runner.go ./"${function,,}"_test.go + sed -i -e 's/FuzzFunction/'$function'/' ./"${function,,}"_test.go + sed -i -e 's/mypackagebeingfuzzed/'$fuzzed_package'/' ./"${function,,}"_test.go + sed -i -e 's/TestFuzzCorpus/Test'$function'Corpus/' ./"${function,,}"_test.go + +cat << DOG > $OUT/$fuzzer +#/bin/sh + + cd $OUT/$path + go test -run Test${function}Corpus -v $tags -coverprofile \$1 -coverpkg $coverpkg + +DOG + + chmod +x $OUT/$fuzzer + #echo "Built script $OUT/$fuzzer" + #cat $OUT/$fuzzer + cd - +} + +function compile_fuzzer { + # Inputs: + # $1: The package to fuzz, within go-ethereum + # $2: The name of the fuzzing function + # $3: The name to give to the final fuzzing-binary + + path=$GOPATH/src/github.com/ethereum/go-ethereum/$1 + func=$2 + fuzzer=$3 + + echo "Building $fuzzer" + + # Do a coverage-build or a regular build + if [[ $SANITIZER = *coverage* ]]; then + coverbuild $path $func $fuzzer $coverpkg + else + (cd $path && \ + go-fuzz -func $func -o $WORK/$fuzzer.a . && \ + $CXX $CXXFLAGS $LIB_FUZZING_ENGINE $WORK/$fuzzer.a -o $OUT/$fuzzer) + fi + + ## Check if there exists a seed corpus file + corpusfile="${path}/testdata/${fuzzer}_seed_corpus.zip" + if [ -f $corpusfile ] + then + cp $corpusfile $OUT/ + echo "Found seed corpus: $corpusfile" + fi +} + +compile_fuzzer tests/fuzzers/bitutil Fuzz fuzzBitutilCompress +compile_fuzzer tests/fuzzers/bn256 FuzzAdd fuzzBn256Add +compile_fuzzer tests/fuzzers/bn256 FuzzMul fuzzBn256Mul +compile_fuzzer tests/fuzzers/bn256 FuzzPair fuzzBn256Pair +compile_fuzzer tests/fuzzers/runtime Fuzz fuzzVmRuntime +compile_fuzzer tests/fuzzers/keystore Fuzz fuzzKeystore +compile_fuzzer tests/fuzzers/txfetcher Fuzz fuzzTxfetcher +compile_fuzzer tests/fuzzers/rlp Fuzz fuzzRlp +compile_fuzzer tests/fuzzers/trie Fuzz fuzzTrie +compile_fuzzer tests/fuzzers/stacktrie Fuzz fuzzStackTrie +compile_fuzzer tests/fuzzers/difficulty Fuzz fuzzDifficulty +compile_fuzzer tests/fuzzers/abi Fuzz fuzzAbi +compile_fuzzer tests/fuzzers/les Fuzz fuzzLes +compile_fuzzer tests/fuzzers/secp256k1 Fuzz fuzzSecp256k1 +compile_fuzzer tests/fuzzers/vflux FuzzClientPool fuzzClientPool + +compile_fuzzer tests/fuzzers/bls12381 FuzzG1Add fuzz_g1_add +compile_fuzzer tests/fuzzers/bls12381 FuzzG1Mul fuzz_g1_mul +compile_fuzzer tests/fuzzers/bls12381 FuzzG1MultiExp fuzz_g1_multiexp +compile_fuzzer tests/fuzzers/bls12381 FuzzG2Add fuzz_g2_add +compile_fuzzer tests/fuzzers/bls12381 FuzzG2Mul fuzz_g2_mul +compile_fuzzer tests/fuzzers/bls12381 FuzzG2MultiExp fuzz_g2_multiexp +compile_fuzzer tests/fuzzers/bls12381 FuzzPairing fuzz_pairing +compile_fuzzer tests/fuzzers/bls12381 FuzzMapG1 fuzz_map_g1 +compile_fuzzer tests/fuzzers/bls12381 FuzzMapG2 fuzz_map_g2 + +compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG1Add fuzz_cross_g1_add +compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG1MultiExp fuzz_cross_g1_multiexp +compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG2Add fuzz_cross_g2_add +compile_fuzzer tests/fuzzers/bls12381 FuzzCrossPairing fuzz_cross_pairing + +compile_fuzzer tests/fuzzers/snap FuzzARange fuzz_account_range +compile_fuzzer tests/fuzzers/snap FuzzSRange fuzz_storage_range +compile_fuzzer tests/fuzzers/snap FuzzByteCodes fuzz_byte_codes +compile_fuzzer tests/fuzzers/snap FuzzTrieNodes fuzz_trie_nodes + +#TODO: move this to tests/fuzzers, if possible +compile_fuzzer crypto/blake2b Fuzz fuzzBlake2b diff --git a/p2p/dial.go b/p2p/dial.go index 79a06d47..0d70e6f4 100644 --- a/p2p/dial.go +++ b/p2p/dial.go @@ -17,14 +17,20 @@ package p2p import ( + "context" + crand "crypto/rand" + "encoding/binary" "errors" "fmt" + mrand "math/rand" "net" + "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/netutil" ) const ( @@ -33,13 +39,9 @@ const ( // private networks. dialHistoryExpiration = inboundThrottleTime + 5*time.Second - // Discovery lookups are throttled and can only run - // once every few seconds. - lookupInterval = 4 * time.Second - - // If no peers are found for this amount of time, the initial bootnodes are - // attempted to be connected. - fallbackInterval = 20 * time.Second + // Config for the "Looking for peers" message. + dialStatsLogInterval = 10 * time.Second // printed at most this often + dialStatsPeerLimit = 3 // but not if more than this many dialed peers // Endpoint resolution is throttled with bounded backoff. initialResolveDelay = 60 * time.Second @@ -47,302 +49,499 @@ const ( ) // NodeDialer is used to connect to nodes in the network, typically by using -// an underlying net.Dialer but also using net.Pipe in tests +// an underlying net.Dialer but also using net.Pipe in tests. type NodeDialer interface { - Dial(*enode.Node) (net.Conn, error) + Dial(context.Context, *enode.Node) (net.Conn, error) } -// TCPDialer implements the NodeDialer interface by using a net.Dialer to -// create TCP connections to nodes in the network -type TCPDialer struct { - *net.Dialer +type nodeResolver interface { + Resolve(*enode.Node) *enode.Node } -// Dial creates a TCP connection to the node -func (t TCPDialer) Dial(dest *enode.Node) (net.Conn, error) { - addr := &net.TCPAddr{IP: dest.IP(), Port: dest.TCP()} - return t.Dialer.Dial("tcp", addr.String()) +// tcpDialer implements NodeDialer using real TCP connections. +type tcpDialer struct { + d *net.Dialer } -// dialstate schedules dials and discovery lookups. -// 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 expHeap +func (t tcpDialer) Dial(ctx context.Context, dest *enode.Node) (net.Conn, error) { + return t.d.DialContext(ctx, "tcp", nodeAddr(dest).String()) } -type discoverTable interface { - Close() - Resolve(*enode.Node) *enode.Node - LookupRandom() []*enode.Node - ReadRandomNodes([]*enode.Node) int +func nodeAddr(n *enode.Node) net.Addr { + return &net.TCPAddr{IP: n.IP(), Port: n.TCP()} } -type task interface { - Do(*Server) -} +// checkDial errors: +var ( + errSelf = errors.New("is self") + errAlreadyDialing = errors.New("already dialing") + errAlreadyConnected = errors.New("already connected") + errRecentlyDialed = errors.New("recently dialed") + errNetRestrict = errors.New("not contained in netrestrict list") + errNoPort = errors.New("node does not provide TCP port") +) -// A dialTask is generated for each node that is dialed. Its -// fields cannot be accessed while the task is running. -type dialTask struct { - flags connFlag - dest *enode.Node - lastResolved time.Time - resolveDelay time.Duration +// dialer creates outbound connections and submits them into Server. +// Two types of peer connections can be created: +// +// - static dials are pre-configured connections. The dialer attempts +// keep these nodes connected at all times. +// +// - dynamic dials are created from node discovery results. The dialer +// continuously reads candidate nodes from its input iterator and attempts +// to create peer connections to nodes arriving through the iterator. +// +type dialScheduler struct { + dialConfig + setupFunc dialSetupFunc + wg sync.WaitGroup + cancel context.CancelFunc + ctx context.Context + nodesIn chan *enode.Node + doneCh chan *dialTask + addStaticCh chan *enode.Node + remStaticCh chan *enode.Node + addPeerCh chan *conn + remPeerCh chan *conn + + // Everything below here belongs to loop and + // should only be accessed by code on the loop goroutine. + dialing map[enode.ID]*dialTask // active tasks + peers map[enode.ID]struct{} // all connected peers + dialPeers int // current number of dialed peers + + // The static map tracks all static dial tasks. The subset of usable static dial tasks + // (i.e. those passing checkDial) is kept in staticPool. The scheduler prefers + // launching random static tasks from the pool over launching dynamic dials from the + // iterator. + static map[enode.ID]*dialTask + staticPool []*dialTask + + // The dial history keeps recently dialed nodes. Members of history are not dialed. + history expHeap + historyTimer mclock.Timer + historyTimerTime mclock.AbsTime + + // for logStats + lastStatsLog mclock.AbsTime + doneSinceLastLog int } -// discoverTask runs discovery table operations. -// Only one discoverTask is active at any time. -// discoverTask.Do performs a random lookup. -type discoverTask struct { - results []*enode.Node +type dialSetupFunc func(net.Conn, connFlag, *enode.Node) error + +type dialConfig struct { + self enode.ID // our own ID + maxDialPeers int // maximum number of dialed peers + maxActiveDials int // maximum number of active dials + netRestrict *netutil.Netlist // IP netrestrict list, disabled if nil + resolver nodeResolver + dialer NodeDialer + log log.Logger + clock mclock.Clock + rand *mrand.Rand } -// A waitExpireTask is generated if there are no other tasks -// to keep the loop in Server.run ticking. -type waitExpireTask struct { - time.Duration +func (cfg dialConfig) withDefaults() dialConfig { + if cfg.maxActiveDials == 0 { + cfg.maxActiveDials = defaultMaxPendingPeers + } + if cfg.log == nil { + cfg.log = log.Root() + } + if cfg.clock == nil { + cfg.clock = mclock.System{} + } + if cfg.rand == nil { + seedb := make([]byte, 8) + crand.Read(seedb) + seed := int64(binary.BigEndian.Uint64(seedb)) + cfg.rand = mrand.New(mrand.NewSource(seed)) + } + return cfg } -func newDialState(self enode.ID, ntab discoverTable, maxdyn int, cfg *Config) *dialstate { - s := &dialstate{ - maxDynDials: maxdyn, - ntab: ntab, - self: self, - netrestrict: cfg.NetRestrict, - log: cfg.Logger, +func newDialScheduler(config dialConfig, it enode.Iterator, setupFunc dialSetupFunc) *dialScheduler { + d := &dialScheduler{ + dialConfig: config.withDefaults(), + setupFunc: setupFunc, + dialing: make(map[enode.ID]*dialTask), static: make(map[enode.ID]*dialTask), - dialing: make(map[enode.ID]connFlag), - bootnodes: make([]*enode.Node, len(cfg.BootstrapNodes)), - randomNodes: make([]*enode.Node, maxdyn/2), + peers: make(map[enode.ID]struct{}), + doneCh: make(chan *dialTask), + nodesIn: make(chan *enode.Node), + addStaticCh: make(chan *enode.Node), + remStaticCh: make(chan *enode.Node), + addPeerCh: make(chan *conn), + remPeerCh: make(chan *conn), } - copy(s.bootnodes, cfg.BootstrapNodes) - if s.log == nil { - s.log = log.Root() - } - for _, n := range cfg.StaticNodes { - s.addStatic(n) - } - return s + d.lastStatsLog = d.clock.Now() + d.ctx, d.cancel = context.WithCancel(context.Background()) + d.wg.Add(2) + go d.readNodes(it) + go d.loop(it) + return d } -func (s *dialstate) addStatic(n *enode.Node) { - // This overwrites the task instead of updating an existing - // entry, giving users the opportunity to force a resolve operation. - s.static[n.ID()] = &dialTask{flags: staticDialedConn, dest: n} +// stop shuts down the dialer, canceling all current dial tasks. +func (d *dialScheduler) stop() { + d.cancel() + d.wg.Wait() } -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()) +// addStatic adds a static dial candidate. +func (d *dialScheduler) addStatic(n *enode.Node) { + select { + case d.addStaticCh <- n: + case <-d.ctx.Done(): + } } -func (s *dialstate) newTasks(nRunning int, peers map[enode.ID]*Peer, now time.Time) []task { - if s.start.IsZero() { - s.start = now +// removeStatic removes a static dial candidate. +func (d *dialScheduler) removeStatic(n *enode.Node) { + select { + case d.remStaticCh <- n: + case <-d.ctx.Done(): } +} - var newtasks []task - addDial := func(flag connFlag, n *enode.Node) bool { - if err := s.checkDial(n, peers); err != nil { - 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 - newtasks = append(newtasks, &dialTask{flags: flag, dest: n}) - return true +// peerAdded updates the peer set. +func (d *dialScheduler) peerAdded(c *conn) { + select { + case d.addPeerCh <- c: + case <-d.ctx.Done(): } +} - // Compute number of dynamic dials necessary at this point. - needDynDials := s.maxDynDials - for _, p := range peers { - if p.rw.is(dynDialedConn) { - needDynDials-- - } +// peerRemoved updates the peer set. +func (d *dialScheduler) peerRemoved(c *conn) { + select { + case d.remPeerCh <- c: + case <-d.ctx.Done(): } - for _, flag := range s.dialing { - if flag&dynDialedConn != 0 { - needDynDials-- +} + +// loop is the main loop of the dialer. +func (d *dialScheduler) loop(it enode.Iterator) { + var ( + nodesCh chan *enode.Node + historyExp = make(chan struct{}, 1) + ) + +loop: + for { + // Launch new dials if slots are available. + slots := d.freeDialSlots() + slots -= d.startStaticDials(slots) + if slots > 0 { + nodesCh = d.nodesIn + } else { + nodesCh = nil } - } + d.rearmHistoryTimer(historyExp) + d.logStats() + + select { + case node := <-nodesCh: + if err := d.checkDial(node); err != nil { + d.log.Trace("Discarding dial candidate", "id", node.ID(), "ip", node.IP(), "reason", err) + } else { + d.startDial(newDialTask(node, dynDialedConn)) + } + + case task := <-d.doneCh: + id := task.dest.ID() + delete(d.dialing, id) + d.updateStaticPool(id) + d.doneSinceLastLog++ + + case c := <-d.addPeerCh: + if c.is(dynDialedConn) || c.is(staticDialedConn) { + d.dialPeers++ + } + id := c.node.ID() + d.peers[id] = struct{}{} + // Remove from static pool because the node is now connected. + task := d.static[id] + if task != nil && task.staticPoolIndex >= 0 { + d.removeFromStaticPool(task.staticPoolIndex) + } + // TODO: cancel dials to connected peers + + case c := <-d.remPeerCh: + if c.is(dynDialedConn) || c.is(staticDialedConn) { + d.dialPeers-- + } + delete(d.peers, c.node.ID()) + d.updateStaticPool(c.node.ID()) + + case node := <-d.addStaticCh: + id := node.ID() + _, exists := d.static[id] + d.log.Trace("Adding static node", "id", id, "ip", node.IP(), "added", !exists) + if exists { + continue loop + } + task := newDialTask(node, staticDialedConn) + d.static[id] = task + if d.checkDial(node) == nil { + d.addToStaticPool(task) + } - // Expire the dial history on every invocation. - s.hist.expire(now) + case node := <-d.remStaticCh: + id := node.ID() + task := d.static[id] + d.log.Trace("Removing static node", "id", id, "ok", task != nil) + if task != nil { + delete(d.static, id) + if task.staticPoolIndex >= 0 { + d.removeFromStaticPool(task.staticPoolIndex) + } + } + + case <-historyExp: + d.expireHistory() - // Create dials for static nodes if they are not connected. - for id, t := range s.static { - err := s.checkDial(t.dest, peers) - switch err { - case errNotWhitelisted, errSelf: - 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 - newtasks = append(newtasks, t) + case <-d.ctx.Done(): + it.Close() + break loop } } - // If we don't have any peers whatsoever, try to dial a random bootnode. This - // scenario is useful for the testnet (and private networks) where the discovery - // table might be full of mostly bad peers, making it hard to find good ones. - if len(peers) == 0 && len(s.bootnodes) > 0 && needDynDials > 0 && now.Sub(s.start) > fallbackInterval { - bootnode := s.bootnodes[0] - s.bootnodes = append(s.bootnodes[:0], s.bootnodes[1:]...) - s.bootnodes = append(s.bootnodes, bootnode) - if addDial(dynDialedConn, bootnode) { - needDynDials-- - } + d.stopHistoryTimer(historyExp) + for range d.dialing { + <-d.doneCh } - // Use random nodes from the table for half of the necessary - // dynamic dials. - randomCandidates := needDynDials / 2 - if randomCandidates > 0 { - n := s.ntab.ReadRandomNodes(s.randomNodes) - for i := 0; i < randomCandidates && i < n; i++ { - if addDial(dynDialedConn, s.randomNodes[i]) { - needDynDials-- - } + d.wg.Done() +} + +// readNodes runs in its own goroutine and delivers nodes from +// the input iterator to the nodesIn channel. +func (d *dialScheduler) readNodes(it enode.Iterator) { + defer d.wg.Done() + + for it.Next() { + select { + case d.nodesIn <- it.Node(): + case <-d.ctx.Done(): } } - // Create dynamic dials from random lookup results, removing tried - // items from the result buffer. - i := 0 - for ; i < len(s.lookupBuf) && needDynDials > 0; i++ { - if addDial(dynDialedConn, s.lookupBuf[i]) { - needDynDials-- - } +} + +// logStats prints dialer statistics to the log. The message is suppressed when enough +// peers are connected because users should only see it while their client is starting up +// or comes back online. +func (d *dialScheduler) logStats() { + now := d.clock.Now() + if d.lastStatsLog.Add(dialStatsLogInterval) > now { + return } - s.lookupBuf = s.lookupBuf[:copy(s.lookupBuf, s.lookupBuf[i:])] - // Launch a discovery lookup if more candidates are needed. - if len(s.lookupBuf) < needDynDials && !s.lookupRunning { - s.lookupRunning = true - newtasks = append(newtasks, &discoverTask{}) + if d.dialPeers < dialStatsPeerLimit && d.dialPeers < d.maxDialPeers { + d.log.Info("Looking for peers", "peercount", len(d.peers), "tried", d.doneSinceLastLog, "static", len(d.static)) } + d.doneSinceLastLog = 0 + d.lastStatsLog = now +} - // Launch a timer to wait for the next node to expire if all - // candidates have been tried and no task is currently active. - // 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.nextExpiry().Sub(now)} - newtasks = append(newtasks, t) +// rearmHistoryTimer configures d.historyTimer to fire when the +// next item in d.history expires. +func (d *dialScheduler) rearmHistoryTimer(ch chan struct{}) { + if len(d.history) == 0 || d.historyTimerTime == d.history.nextExpiry() { + return } - return newtasks + d.stopHistoryTimer(ch) + d.historyTimerTime = d.history.nextExpiry() + timeout := time.Duration(d.historyTimerTime - d.clock.Now()) + d.historyTimer = d.clock.AfterFunc(timeout, func() { ch <- struct{}{} }) } -var ( - errSelf = errors.New("is self") - errAlreadyDialing = errors.New("already dialing") - errAlreadyConnected = errors.New("already connected") - errRecentlyDialed = errors.New("recently dialed") - errNotWhitelisted = errors.New("not contained in netrestrict whitelist") -) +// stopHistoryTimer stops the timer and drains the channel it sends on. +func (d *dialScheduler) stopHistoryTimer(ch chan struct{}) { + if d.historyTimer != nil && !d.historyTimer.Stop() { + <-ch + } +} + +// expireHistory removes expired items from d.history. +func (d *dialScheduler) expireHistory() { + d.historyTimer.Stop() + d.historyTimer = nil + d.historyTimerTime = 0 + d.history.expire(d.clock.Now(), func(hkey string) { + var id enode.ID + copy(id[:], hkey) + d.updateStaticPool(id) + }) +} + +// freeDialSlots returns the number of free dial slots. The result can be negative +// when peers are connected while their task is still running. +func (d *dialScheduler) freeDialSlots() int { + slots := (d.maxDialPeers - d.dialPeers) * 2 + if slots > d.maxActiveDials { + slots = d.maxActiveDials + } + free := slots - len(d.dialing) + return free +} -func (s *dialstate) checkDial(n *enode.Node, peers map[enode.ID]*Peer) error { - _, dialing := s.dialing[n.ID()] - switch { - case dialing: +// checkDial returns an error if node n should not be dialed. +func (d *dialScheduler) checkDial(n *enode.Node) error { + if n.ID() == d.self { + return errSelf + } + if n.IP() != nil && n.TCP() == 0 { + // This check can trigger if a non-TCP node is found + // by discovery. If there is no IP, the node is a static + // node and the actual endpoint will be resolved later in dialTask. + return errNoPort + } + if _, ok := d.dialing[n.ID()]; ok { return errAlreadyDialing - case peers[n.ID()] != nil: + } + if _, ok := d.peers[n.ID()]; ok { return errAlreadyConnected - case n.ID() == s.self: - return errSelf - case s.netrestrict != nil && !s.netrestrict.Contains(n.IP()): - return errNotWhitelisted - case s.hist.contains(string(n.ID().Bytes())): + } + if d.netRestrict != nil && !d.netRestrict.Contains(n.IP()) { + return errNetRestrict + } + if d.history.contains(string(n.ID().Bytes())) { return errRecentlyDialed } return nil } -func (s *dialstate) taskDone(t task, now time.Time) { - switch t := t.(type) { - case *dialTask: - s.hist.add(string(t.dest.ID().Bytes()), now.Add(dialHistoryExpiration)) - delete(s.dialing, t.dest.ID()) - case *discoverTask: - s.lookupRunning = false - s.lookupBuf = append(s.lookupBuf, t.results...) +// startStaticDials starts n static dial tasks. +func (d *dialScheduler) startStaticDials(n int) (started int) { + for started = 0; started < n && len(d.staticPool) > 0; started++ { + idx := d.rand.Intn(len(d.staticPool)) + task := d.staticPool[idx] + d.startDial(task) + d.removeFromStaticPool(idx) } + return started } -func (t *dialTask) Do(srv *Server) { - if t.dest.Incomplete() { - if !t.resolve(srv) { - return - } +// updateStaticPool attempts to move the given static dial back into staticPool. +func (d *dialScheduler) updateStaticPool(id enode.ID) { + task, ok := d.static[id] + if ok && task.staticPoolIndex < 0 && d.checkDial(task.dest) == nil { + d.addToStaticPool(task) } - err := t.dial(srv, t.dest) +} + +func (d *dialScheduler) addToStaticPool(task *dialTask) { + if task.staticPoolIndex >= 0 { + panic("attempt to add task to staticPool twice") + } + d.staticPool = append(d.staticPool, task) + task.staticPoolIndex = len(d.staticPool) - 1 +} + +// removeFromStaticPool removes the task at idx from staticPool. It does that by moving the +// current last element of the pool to idx and then shortening the pool by one. +func (d *dialScheduler) removeFromStaticPool(idx int) { + task := d.staticPool[idx] + end := len(d.staticPool) - 1 + d.staticPool[idx] = d.staticPool[end] + d.staticPool[idx].staticPoolIndex = idx + d.staticPool[end] = nil + d.staticPool = d.staticPool[:end] + task.staticPoolIndex = -1 +} + +// startDial runs the given dial task in a separate goroutine. +func (d *dialScheduler) startDial(task *dialTask) { + d.log.Trace("Starting p2p dial", "id", task.dest.ID(), "ip", task.dest.IP(), "flag", task.flags) + hkey := string(task.dest.ID().Bytes()) + d.history.add(hkey, d.clock.Now().Add(dialHistoryExpiration)) + d.dialing[task.dest.ID()] = task + go func() { + task.run(d) + d.doneCh <- task + }() +} + +// A dialTask generated for each node that is dialed. +type dialTask struct { + staticPoolIndex int + flags connFlag + // These fields are private to the task and should not be + // accessed by dialScheduler while the task is running. + dest *enode.Node + lastResolved mclock.AbsTime + resolveDelay time.Duration +} + +func newDialTask(dest *enode.Node, flags connFlag) *dialTask { + return &dialTask{dest: dest, flags: flags, staticPoolIndex: -1} +} + +type dialError struct { + error +} + +func (t *dialTask) run(d *dialScheduler) { + if t.needResolve() && !t.resolve(d) { + return + } + + err := t.dial(d, t.dest) if err != nil { - srv.log.Trace("Dial error", "task", t, "err", err) - // Try resolving the ID of static nodes if dialing failed. + // For static nodes, resolve one more time if dialing fails. if _, ok := err.(*dialError); ok && t.flags&staticDialedConn != 0 { - if t.resolve(srv) { - t.dial(srv, t.dest) + if t.resolve(d) { + t.dial(d, t.dest) } } } } +func (t *dialTask) needResolve() bool { + return t.flags&staticDialedConn != 0 && t.dest.IP() == nil +} + // resolve attempts to find the current endpoint for the destination // using discovery. // // Resolve operations are throttled with backoff to avoid flooding the // discovery network with useless queries for nodes that don't exist. // The backoff delay resets when the node is found. -func (t *dialTask) resolve(srv *Server) bool { - if srv.ntab == nil { - srv.log.Debug("Can't resolve node", "id", t.dest.ID, "err", "discovery is disabled") +func (t *dialTask) resolve(d *dialScheduler) bool { + if d.resolver == nil { return false } if t.resolveDelay == 0 { t.resolveDelay = initialResolveDelay } - if time.Since(t.lastResolved) < t.resolveDelay { + if t.lastResolved > 0 && time.Duration(d.clock.Now()-t.lastResolved) < t.resolveDelay { return false } - resolved := srv.ntab.Resolve(t.dest) - t.lastResolved = time.Now() + resolved := d.resolver.Resolve(t.dest) + t.lastResolved = d.clock.Now() if resolved == nil { t.resolveDelay *= 2 if t.resolveDelay > maxResolveDelay { t.resolveDelay = maxResolveDelay } - srv.log.Debug("Resolving node failed", "id", t.dest.ID, "newdelay", t.resolveDelay) + d.log.Debug("Resolving node failed", "id", t.dest.ID(), "newdelay", t.resolveDelay) return false } // The node was found. t.resolveDelay = initialResolveDelay t.dest = resolved - srv.log.Debug("Resolved node", "id", t.dest.ID, "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}) + d.log.Debug("Resolved node", "id", t.dest.ID(), "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}) return true } -type dialError struct { - error -} - // dial performs the actual connection attempt. -func (t *dialTask) dial(srv *Server, dest *enode.Node) error { - fd, err := srv.Dialer.Dial(dest) +func (t *dialTask) dial(d *dialScheduler, dest *enode.Node) error { + fd, err := d.dialer.Dial(d.ctx, t.dest) if err != nil { + d.log.Trace("Dial error", "id", t.dest.ID(), "addr", nodeAddr(t.dest), "conn", t.flags, "err", cleanupDialErr(err)) return &dialError{err} } - mfd := newMeteredConn(fd, false, dest.IP()) - return srv.SetupConn(mfd, t.flags, dest) + mfd := newMeteredConn(fd, false, &net.TCPAddr{IP: dest.IP(), Port: dest.TCP()}) + return d.setupFunc(mfd, t.flags, dest) } func (t *dialTask) String() string { @@ -350,29 +549,9 @@ func (t *dialTask) String() string { return fmt.Sprintf("%v %x %v:%d", t.flags, id[:8], t.dest.IP(), t.dest.TCP()) } -func (t *discoverTask) Do(srv *Server) { - // newTasks generates a lookup task whenever dynamic dials are - // necessary. Lookups need to take some time, otherwise the - // event loop spins too fast. - next := srv.lastLookup.Add(lookupInterval) - if now := time.Now(); now.Before(next) { - time.Sleep(next.Sub(now)) +func cleanupDialErr(err error) error { + if netErr, ok := err.(*net.OpError); ok && netErr.Op == "dial" { + return netErr.Err } - srv.lastLookup = time.Now() - t.results = srv.ntab.LookupRandom() -} - -func (t *discoverTask) String() string { - s := "discovery lookup" - if len(t.results) > 0 { - s += fmt.Sprintf(" (%d results)", len(t.results)) - } - return s -} - -func (t waitExpireTask) Do(*Server) { - time.Sleep(t.Duration) -} -func (t waitExpireTask) String() string { - return fmt.Sprintf("wait for dial hist expire (%v)", t.Duration) + return err } diff --git a/p2p/dial_test.go b/p2p/dial_test.go index 4fa27a6f..cd8dedff 100644 --- a/p2p/dial_test.go +++ b/p2p/dial_test.go @@ -17,667 +17,656 @@ package p2p import ( - "encoding/binary" + "context" + "errors" + "fmt" + "math/rand" "net" "reflect" - "strings" + "sync" "testing" "time" - "github.com/cryptoecc/ETH-ECC/internal/testlog" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" - "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common/mclock" + "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/netutil" ) -func init() { - spew.Config.Indent = "\t" -} - -type dialtest struct { - init *dialstate // state before and after the test. - rounds []round -} - -type round struct { - peers []*Peer // current peer set - done []task // tasks that got done this round - new []task // the result must match this one -} - -func runDialTest(t *testing.T, test dialtest) { - var ( - vtime time.Time - running int - ) - pm := func(ps []*Peer) map[enode.ID]*Peer { - m := make(map[enode.ID]*Peer) - for _, p := range ps { - m[p.ID()] = p - } - return m - } - for i, round := range test.rounds { - for _, task := range round.done { - running-- - if running < 0 { - panic("running task counter underflow") - } - test.init.taskDone(task, vtime) - } - - new := test.init.newTasks(running, pm(round.peers), vtime) - if !sametasks(new, round.new) { - 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.Logf("round %d new tasks: %s", i, strings.TrimSpace(spew.Sdump(new))) +// This test checks that dynamic dials are launched from discovery results. +func TestDialSchedDynDial(t *testing.T) { + t.Parallel() - // Time advances by 16 seconds on every round. - vtime = vtime.Add(16 * time.Second) - running += len(new) + config := dialConfig{ + maxActiveDials: 5, + maxDialPeers: 4, } -} + runDialTest(t, config, []dialTestRound{ + // 3 out of 4 peers are connected, leaving 2 dial slots. + // 9 nodes are discovered, but only 2 are dialed. + { + peersAdded: []*conn{ + {flags: staticDialedConn, node: newNode(uintID(0x00), "")}, + {flags: dynDialedConn, node: newNode(uintID(0x01), "")}, + {flags: dynDialedConn, node: newNode(uintID(0x02), "")}, + }, + discovered: []*enode.Node{ + newNode(uintID(0x00), "127.0.0.1:30303"), // not dialed because already connected as static peer + newNode(uintID(0x02), "127.0.0.1:30303"), // ... + newNode(uintID(0x03), "127.0.0.1:30303"), + newNode(uintID(0x04), "127.0.0.1:30303"), + newNode(uintID(0x05), "127.0.0.1:30303"), // not dialed because there are only two slots + newNode(uintID(0x06), "127.0.0.1:30303"), // ... + newNode(uintID(0x07), "127.0.0.1:30303"), // ... + newNode(uintID(0x08), "127.0.0.1:30303"), // ... + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.1:30303"), + newNode(uintID(0x04), "127.0.0.1:30303"), + }, + }, -type fakeTable []*enode.Node + // One dial completes, freeing one dial slot. + { + failed: []enode.ID{ + uintID(0x04), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x05), "127.0.0.1:30303"), + }, + }, -func (t fakeTable) Self() *enode.Node { return new(enode.Node) } -func (t fakeTable) Close() {} -func (t fakeTable) LookupRandom() []*enode.Node { return nil } -func (t fakeTable) Resolve(*enode.Node) *enode.Node { return nil } -func (t fakeTable) ReadRandomNodes(buf []*enode.Node) int { return copy(buf, t) } + // Dial to 0x03 completes, filling the last remaining peer slot. + { + succeeded: []enode.ID{ + uintID(0x03), + }, + failed: []enode.ID{ + uintID(0x05), + }, + discovered: []*enode.Node{ + newNode(uintID(0x09), "127.0.0.1:30303"), // not dialed because there are no free slots + }, + }, -// 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{}, fakeTable{}, 5, config), - rounds: []round{ - // A discovery query is launched. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - }, - new: []task{&discoverTask{}}, - }, - // Dynamic dials are launched when it completes. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - }, - done: []task{ - &discoverTask{results: []*enode.Node{ - newNode(uintID(2), nil), // this one is already connected and not dialed. - newNode(uintID(3), nil), - newNode(uintID(4), nil), - newNode(uintID(5), nil), - newNode(uintID(6), nil), // these are not tried because max dyn dials is 5 - newNode(uintID(7), nil), // ... - }}, - }, - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - }, - }, - // Some of the dials complete but no new ones are launched yet because - // the sum of active dial count and dynamic peer count is == maxDynDials. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(3), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(4), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - }, - }, - // No new dial tasks are launched in the this round because - // maxDynDials has been reached. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(3), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(4), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(5), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - }, - new: []task{ - &waitExpireTask{Duration: 19 * time.Second}, - }, - }, - // In this round, the peer with id 2 drops off. The query - // results from last discovery lookup are reused. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(3), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(4), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(5), nil)}}, - }, - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(6), nil)}, - }, - }, - // More peers (3,4) drop off and dial for ID 6 completes. - // The last query result from the discovery lookup is reused - // and a new one is spawned because more candidates are needed. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(5), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(6), nil)}, - }, - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(7), nil)}, - &discoverTask{}, - }, - }, - // Peer 7 is connected, but there still aren't enough dynamic peers - // (4 out of 5). However, a discovery is already running, so ensure - // no new is started. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(5), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(7), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(7), nil)}, - }, - }, - // Finish the running node discovery with an empty set. A new lookup - // should be immediately requested. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(0), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(5), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(7), nil)}}, - }, - done: []task{ - &discoverTask{}, - }, - new: []task{ - &discoverTask{}, - }, + // 3 peers drop off, creating 6 dial slots. Check that 5 of those slots + // (i.e. up to maxActiveDialTasks) are used. + { + peersRemoved: []enode.ID{ + uintID(0x00), + uintID(0x01), + uintID(0x02), + }, + discovered: []*enode.Node{ + newNode(uintID(0x0a), "127.0.0.1:30303"), + newNode(uintID(0x0b), "127.0.0.1:30303"), + newNode(uintID(0x0c), "127.0.0.1:30303"), + newNode(uintID(0x0d), "127.0.0.1:30303"), + newNode(uintID(0x0f), "127.0.0.1:30303"), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x06), "127.0.0.1:30303"), + newNode(uintID(0x07), "127.0.0.1:30303"), + newNode(uintID(0x08), "127.0.0.1:30303"), + newNode(uintID(0x09), "127.0.0.1:30303"), + newNode(uintID(0x0a), "127.0.0.1:30303"), }, }, }) } -// Tests that bootnodes are dialed if no peers are connectd, but not otherwise. -func TestDialStateDynDialBootnode(t *testing.T) { - config := &Config{ - BootstrapNodes: []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), - }, - Logger: testlog.Logger(t, log.LvlTrace), +// This test checks that candidates that do not match the netrestrict list are not dialed. +func TestDialSchedNetRestrict(t *testing.T) { + t.Parallel() + + nodes := []*enode.Node{ + newNode(uintID(0x01), "127.0.0.1:30303"), + newNode(uintID(0x02), "127.0.0.2:30303"), + newNode(uintID(0x03), "127.0.0.3:30303"), + newNode(uintID(0x04), "127.0.0.4:30303"), + newNode(uintID(0x05), "127.0.2.5:30303"), + newNode(uintID(0x06), "127.0.2.6:30303"), + newNode(uintID(0x07), "127.0.2.7:30303"), + newNode(uintID(0x08), "127.0.2.8:30303"), } - table := fakeTable{ - newNode(uintID(4), nil), - newNode(uintID(5), nil), - newNode(uintID(6), nil), - newNode(uintID(7), nil), - newNode(uintID(8), nil), + config := dialConfig{ + netRestrict: new(netutil.Netlist), + maxActiveDials: 10, + maxDialPeers: 10, } - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, table, 5, config), - rounds: []round{ - // 2 dynamic dials attempted, bootnodes pending fallback interval - { - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - &discoverTask{}, - }, - }, - // No dials succeed, bootnodes still pending fallback interval - { - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - }, - }, - // No dials succeed, bootnodes still pending fallback interval - {}, - // No dials succeed, 2 dynamic dials attempted and 1 bootnode too as fallback interval was reached - { - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - }, - }, - // No dials succeed, 2nd bootnode is attempted - { - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), 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)}, - }, - }, - // No dials succeed, 1st bootnode is attempted again, expired random nodes retried - { - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), 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)}, - }, + config.netRestrict.Add("127.0.2.0/24") + runDialTest(t, config, []dialTestRound{ + { + discovered: nodes, + wantNewDials: nodes[4:8], + }, + { + succeeded: []enode.ID{ + nodes[4].ID(), + nodes[5].ID(), + nodes[6].ID(), + nodes[7].ID(), }, }, }) } -func TestDialStateDynDialFromTable(t *testing.T) { - // This table always returns the same random nodes - // in the order given below. - table := fakeTable{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), - newNode(uintID(4), nil), - newNode(uintID(5), nil), - newNode(uintID(6), nil), - newNode(uintID(7), nil), - newNode(uintID(8), nil), - } +// This test checks that static dials work and obey the limits. +func TestDialSchedStaticDial(t *testing.T) { + t.Parallel() - runDialTest(t, dialtest{ - 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. - { - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(2), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - &discoverTask{}, - }, - }, - // Dialing nodes 1,2 succeeds. Dials from the lookup are launched. - { - peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(2), nil)}, - &discoverTask{results: []*enode.Node{ - newNode(uintID(10), nil), - newNode(uintID(11), nil), - newNode(uintID(12), nil), - }}, - }, - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(10), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(11), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(12), nil)}, - &discoverTask{}, - }, - }, - // Dialing nodes 3,4,5 fails. The dials from the lookup succeed. - { - peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(10), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(11), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(12), nil)}}, - }, - done: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(10), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(11), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(12), nil)}, - }, - }, - // Waiting for expiry. No waitExpireTask is launched because the - // discovery query is still running. - { - peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(10), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(11), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(12), nil)}}, - }, - }, - // Nodes 3,4 are not tried again because only the first two - // returned random nodes (nodes 1,2) are tried and they're - // already connected. - { - peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(10), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(11), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(12), nil)}}, - }, + config := dialConfig{ + maxActiveDials: 5, + maxDialPeers: 4, + } + runDialTest(t, config, []dialTestRound{ + // Static dials are launched for the nodes that + // aren't yet connected. + { + peersAdded: []*conn{ + {flags: dynDialedConn, node: newNode(uintID(0x01), "127.0.0.1:30303")}, + {flags: dynDialedConn, node: newNode(uintID(0x02), "127.0.0.2:30303")}, + }, + update: func(d *dialScheduler) { + // These two are not dialed because they're already connected + // as dynamic peers. + d.addStatic(newNode(uintID(0x01), "127.0.0.1:30303")) + d.addStatic(newNode(uintID(0x02), "127.0.0.2:30303")) + // These nodes will be dialed: + d.addStatic(newNode(uintID(0x03), "127.0.0.3:30303")) + d.addStatic(newNode(uintID(0x04), "127.0.0.4:30303")) + d.addStatic(newNode(uintID(0x05), "127.0.0.5:30303")) + d.addStatic(newNode(uintID(0x06), "127.0.0.6:30303")) + d.addStatic(newNode(uintID(0x07), "127.0.0.7:30303")) + d.addStatic(newNode(uintID(0x08), "127.0.0.8:30303")) + d.addStatic(newNode(uintID(0x09), "127.0.0.9:30303")) + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), + newNode(uintID(0x04), "127.0.0.4:30303"), + newNode(uintID(0x05), "127.0.0.5:30303"), + newNode(uintID(0x06), "127.0.0.6:30303"), + }, + }, + // Dial to 0x03 completes, filling a peer slot. One slot remains, + // two dials are launched to attempt to fill it. + { + succeeded: []enode.ID{ + uintID(0x03), + }, + failed: []enode.ID{ + uintID(0x04), + uintID(0x05), + uintID(0x06), + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x04): nil, + uintID(0x05): nil, + uintID(0x06): nil, + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x08), "127.0.0.8:30303"), + newNode(uintID(0x09), "127.0.0.9:30303"), + }, + }, + // Peer 0x01 drops and 0x07 connects as inbound peer. + // Only 0x01 is dialed. + { + peersAdded: []*conn{ + {flags: inboundConn, node: newNode(uintID(0x07), "127.0.0.7:30303")}, + }, + peersRemoved: []enode.ID{ + uintID(0x01), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x01), "127.0.0.1:30303"), }, }, }) } -func newNode(id enode.ID, ip net.IP) *enode.Node { - var r enr.Record - if ip != nil { - r.Set(enr.IP(ip)) - } - return enode.SignNull(&r, id) -} +// This test checks that removing static nodes stops connecting to them. +func TestDialSchedRemoveStatic(t *testing.T) { + t.Parallel() -// This test checks that candidates that do not match the netrestrict list are not dialed. -func TestDialStateNetRestrict(t *testing.T) { - // This table always returns the same random nodes - // in the order given below. - table := fakeTable{ - newNode(uintID(1), net.ParseIP("127.0.0.1")), - newNode(uintID(2), net.ParseIP("127.0.0.2")), - newNode(uintID(3), net.ParseIP("127.0.0.3")), - newNode(uintID(4), net.ParseIP("127.0.0.4")), - newNode(uintID(5), net.ParseIP("127.0.2.5")), - newNode(uintID(6), net.ParseIP("127.0.2.6")), - newNode(uintID(7), net.ParseIP("127.0.2.7")), - newNode(uintID(8), net.ParseIP("127.0.2.8")), + config := dialConfig{ + maxActiveDials: 1, + maxDialPeers: 1, } - restrict := new(netutil.Netlist) - restrict.Add("127.0.2.0/24") - - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, table, 10, &Config{NetRestrict: restrict}), - rounds: []round{ - { - new: []task{ - &dialTask{flags: dynDialedConn, dest: table[4]}, - &discoverTask{}, - }, + runDialTest(t, config, []dialTestRound{ + // Add static nodes. + { + update: func(d *dialScheduler) { + d.addStatic(newNode(uintID(0x01), "127.0.0.1:30303")) + d.addStatic(newNode(uintID(0x02), "127.0.0.2:30303")) + d.addStatic(newNode(uintID(0x03), "127.0.0.3:30303")) + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x01), "127.0.0.1:30303"), + }, + }, + // Dial to 0x01 fails. + { + failed: []enode.ID{ + uintID(0x01), + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x01): nil, + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x02), "127.0.0.2:30303"), + }, + }, + // All static nodes are removed. 0x01 is in history, 0x02 is being + // dialed, 0x03 is in staticPool. + { + update: func(d *dialScheduler) { + d.removeStatic(newNode(uintID(0x01), "127.0.0.1:30303")) + d.removeStatic(newNode(uintID(0x02), "127.0.0.2:30303")) + d.removeStatic(newNode(uintID(0x03), "127.0.0.3:30303")) + }, + failed: []enode.ID{ + uintID(0x02), + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x02): nil, }, }, + // Since all static nodes are removed, they should not be dialed again. + {}, {}, {}, }) } -// This test checks that static dials are launched. -func TestDialStateStaticDial(t *testing.T) { - 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), +// This test checks that static dials are selected at random. +func TestDialSchedManyStaticNodes(t *testing.T) { + t.Parallel() + + config := dialConfig{maxDialPeers: 2} + runDialTest(t, config, []dialTestRound{ + { + peersAdded: []*conn{ + {flags: dynDialedConn, node: newNode(uintID(0xFFFE), "")}, + {flags: dynDialedConn, node: newNode(uintID(0xFFFF), "")}, + }, + update: func(d *dialScheduler) { + for id := uint16(0); id < 2000; id++ { + n := newNode(uintID(id), "127.0.0.1:30303") + d.addStatic(n) + } + }, }, - Logger: testlog.Logger(t, log.LvlTrace), - } - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, fakeTable{}, 0, config), - rounds: []round{ - // Static dials are launched for the nodes that - // aren't yet connected. - { - peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, - }, - new: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(3), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(5), nil)}, - }, - }, - // No new tasks are launched in this round because all static - // nodes are either connected or still being dialed. - { - 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(3), nil)}}, - }, - done: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(3), nil)}, - }, - }, - // No new dial tasks are launched because all static - // nodes are now connected. - { - 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(3), nil)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(4), nil)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(5), nil)}}, - }, - done: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(5), nil)}, - }, - new: []task{ - &waitExpireTask{Duration: 19 * time.Second}, - }, - }, - // Wait a round for dial history to expire, no new tasks should spawn. - { - 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(3), nil)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(4), nil)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(5), nil)}}, - }, - }, - // 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)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(5), nil)}}, - }, - new: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(2), nil)}, - }, + { + peersRemoved: []enode.ID{ + uintID(0xFFFE), + uintID(0xFFFF), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x0085), "127.0.0.1:30303"), + newNode(uintID(0x02dc), "127.0.0.1:30303"), + newNode(uintID(0x0285), "127.0.0.1:30303"), + newNode(uintID(0x00cb), "127.0.0.1:30303"), }, }, }) } // This test checks that past dials are not retried for some time. -func TestDialStateCache(t *testing.T) { - config := &Config{ - StaticNodes: []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), +func TestDialSchedHistory(t *testing.T) { + t.Parallel() + + config := dialConfig{ + maxActiveDials: 3, + maxDialPeers: 3, + } + runDialTest(t, config, []dialTestRound{ + { + update: func(d *dialScheduler) { + d.addStatic(newNode(uintID(0x01), "127.0.0.1:30303")) + d.addStatic(newNode(uintID(0x02), "127.0.0.2:30303")) + d.addStatic(newNode(uintID(0x03), "127.0.0.3:30303")) + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x01), "127.0.0.1:30303"), + newNode(uintID(0x02), "127.0.0.2:30303"), + newNode(uintID(0x03), "127.0.0.3:30303"), + }, + }, + // No new tasks are launched in this round because all static + // nodes are either connected or still being dialed. + { + succeeded: []enode.ID{ + uintID(0x01), + uintID(0x02), + }, + failed: []enode.ID{ + uintID(0x03), + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x03): nil, + }, + }, + // Nothing happens in this round because we're waiting for + // node 0x3's history entry to expire. + {}, + // The cache entry for node 0x03 has expired and is retried. + { + wantNewDials: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), + }, }, - Logger: testlog.Logger(t, log.LvlTrace), + }) +} + +func TestDialSchedResolve(t *testing.T) { + t.Parallel() + + config := dialConfig{ + maxActiveDials: 1, + maxDialPeers: 1, } - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, fakeTable{}, 0, config), - 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)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(3), nil)}, - }, - }, - // No new tasks are launched in this round because all static - // nodes are either connected or still being dialed. - { - 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)}, - }, - }, - // A salvage task is launched to wait for node 3's history - // entry to expire. - { - 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(3), nil)}, - }, - new: []task{ - &waitExpireTask{Duration: 19 * time.Second}, - }, - }, - // Still waiting for node 3's entry to expire in the cache. - { - peers: []*Peer{ - {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: 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)}, - }, + node := newNode(uintID(0x01), "") + resolved := newNode(uintID(0x01), "127.0.0.1:30303") + resolved2 := newNode(uintID(0x01), "127.0.0.55:30303") + runDialTest(t, config, []dialTestRound{ + { + update: func(d *dialScheduler) { + d.addStatic(node) + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x01): resolved, + }, + wantNewDials: []*enode.Node{ + resolved, + }, + }, + { + failed: []enode.ID{ + uintID(0x01), + }, + wantResolves: map[enode.ID]*enode.Node{ + uintID(0x01): resolved2, + }, + wantNewDials: []*enode.Node{ + resolved2, }, }, }) } -func TestDialResolve(t *testing.T) { - config := &Config{ - Logger: testlog.Logger(t, log.LvlTrace), - Dialer: TCPDialer{&net.Dialer{Deadline: time.Now().Add(-5 * time.Minute)}}, +// ------- +// Code below here is the framework for the tests above. + +type dialTestRound struct { + peersAdded []*conn + peersRemoved []enode.ID + update func(*dialScheduler) // called at beginning of round + discovered []*enode.Node // newly discovered nodes + succeeded []enode.ID // dials which succeed this round + failed []enode.ID // dials which fail this round + wantResolves map[enode.ID]*enode.Node + wantNewDials []*enode.Node // dials that should be launched in this round +} + +func runDialTest(t *testing.T, config dialConfig, rounds []dialTestRound) { + var ( + clock = new(mclock.Simulated) + iterator = newDialTestIterator() + dialer = newDialTestDialer() + resolver = new(dialTestResolver) + peers = make(map[enode.ID]*conn) + setupCh = make(chan *conn) + ) + + // Override config. + config.clock = clock + config.dialer = dialer + config.resolver = resolver + config.log = testlog.Logger(t, log.LvlTrace) + config.rand = rand.New(rand.NewSource(0x1111)) + + // Set up the dialer. The setup function below runs on the dialTask + // goroutine and adds the peer. + var dialsched *dialScheduler + setup := func(fd net.Conn, f connFlag, node *enode.Node) error { + conn := &conn{flags: f, node: node} + dialsched.peerAdded(conn) + setupCh <- conn + return nil } - resolved := newNode(uintID(1), net.IP{127, 0, 55, 234}) - table := &resolveMock{answer: resolved} - state := newDialState(enode.ID{}, table, 0, config) - - // Check that the task is generated with an incomplete ID. - dest := newNode(uintID(1), nil) - state.addStatic(dest) - tasks := state.newTasks(0, nil, time.Time{}) - if !reflect.DeepEqual(tasks, []task{&dialTask{flags: staticDialedConn, dest: dest}}) { - t.Fatalf("expected dial task, got %#v", tasks) + dialsched = newDialScheduler(config, iterator, setup) + defer dialsched.stop() + + for i, round := range rounds { + // Apply peer set updates. + for _, c := range round.peersAdded { + if peers[c.node.ID()] != nil { + t.Fatalf("round %d: peer %v already connected", i, c.node.ID()) + } + dialsched.peerAdded(c) + peers[c.node.ID()] = c + } + for _, id := range round.peersRemoved { + c := peers[id] + if c == nil { + t.Fatalf("round %d: can't remove non-existent peer %v", i, id) + } + dialsched.peerRemoved(c) + } + + // Init round. + t.Logf("round %d (%d peers)", i, len(peers)) + resolver.setAnswers(round.wantResolves) + if round.update != nil { + round.update(dialsched) + } + iterator.addNodes(round.discovered) + + // Unblock dialTask goroutines. + if err := dialer.completeDials(round.succeeded, nil); err != nil { + t.Fatalf("round %d: %v", i, err) + } + for range round.succeeded { + conn := <-setupCh + peers[conn.node.ID()] = conn + } + if err := dialer.completeDials(round.failed, errors.New("oops")); err != nil { + t.Fatalf("round %d: %v", i, err) + } + + // Wait for new tasks. + if err := dialer.waitForDials(round.wantNewDials); err != nil { + t.Fatalf("round %d: %v", i, err) + } + if !resolver.checkCalls() { + t.Fatalf("unexpected calls to Resolve: %v", resolver.calls) + } + + clock.Run(16 * time.Second) } +} + +// dialTestIterator is the input iterator for dialer tests. This works a bit like a channel +// with infinite buffer: nodes are added to the buffer with addNodes, which unblocks Next +// and returns them from the iterator. +type dialTestIterator struct { + cur *enode.Node + + mu sync.Mutex + buf []*enode.Node + cond *sync.Cond + closed bool +} - // Now run the task, it should resolve the ID once. - 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) +func newDialTestIterator() *dialTestIterator { + it := &dialTestIterator{} + it.cond = sync.NewCond(&it.mu) + return it +} + +// addNodes adds nodes to the iterator buffer and unblocks Next. +func (it *dialTestIterator) addNodes(nodes []*enode.Node) { + it.mu.Lock() + defer it.mu.Unlock() + + it.buf = append(it.buf, nodes...) + it.cond.Signal() +} + +// Node returns the current node. +func (it *dialTestIterator) Node() *enode.Node { + return it.cur +} + +// Next moves to the next node. +func (it *dialTestIterator) Next() bool { + it.mu.Lock() + defer it.mu.Unlock() + + it.cur = nil + for len(it.buf) == 0 && !it.closed { + it.cond.Wait() } + if it.closed { + return false + } + it.cur = it.buf[0] + copy(it.buf[:], it.buf[1:]) + it.buf = it.buf[:len(it.buf)-1] + return true +} + +// Close ends the iterator, unblocking Next. +func (it *dialTestIterator) Close() { + it.mu.Lock() + defer it.mu.Unlock() + + it.closed = true + it.buf = nil + it.cond.Signal() +} + +// dialTestDialer is the NodeDialer used by runDialTest. +type dialTestDialer struct { + init chan *dialTestReq + blocked map[enode.ID]*dialTestReq +} + +type dialTestReq struct { + n *enode.Node + unblock chan error +} - // Report it as done to the dialer, which should update the static node record. - state.taskDone(tasks[0], time.Now()) - if state.static[uintID(1)].dest != resolved { - t.Fatalf("state.dest not updated") +func newDialTestDialer() *dialTestDialer { + return &dialTestDialer{ + init: make(chan *dialTestReq), + blocked: make(map[enode.ID]*dialTestReq), } } -// compares task lists but doesn't care about the order. -func sametasks(a, b []task) bool { - if len(a) != len(b) { - return false +// Dial implements NodeDialer. +func (d *dialTestDialer) Dial(ctx context.Context, n *enode.Node) (net.Conn, error) { + req := &dialTestReq{n: n, unblock: make(chan error, 1)} + select { + case d.init <- req: + select { + case err := <-req.unblock: + pipe, _ := net.Pipe() + return pipe, err + case <-ctx.Done(): + return nil, ctx.Err() + } + case <-ctx.Done(): + return nil, ctx.Err() } -next: - for _, ta := range a { - for _, tb := range b { - if reflect.DeepEqual(ta, tb) { - continue next +} + +// waitForDials waits for calls to Dial with the given nodes as argument. +// Those calls will be held blocking until completeDials is called with the same nodes. +func (d *dialTestDialer) waitForDials(nodes []*enode.Node) error { + waitset := make(map[enode.ID]*enode.Node) + for _, n := range nodes { + waitset[n.ID()] = n + } + timeout := time.NewTimer(1 * time.Second) + defer timeout.Stop() + + for len(waitset) > 0 { + select { + case req := <-d.init: + want, ok := waitset[req.n.ID()] + if !ok { + return fmt.Errorf("attempt to dial unexpected node %v", req.n.ID()) + } + if !reflect.DeepEqual(req.n, want) { + return fmt.Errorf("ENR of dialed node %v does not match test", req.n.ID()) + } + delete(waitset, req.n.ID()) + d.blocked[req.n.ID()] = req + case <-timeout.C: + var waitlist []enode.ID + for id := range waitset { + waitlist = append(waitlist, id) } + return fmt.Errorf("timed out waiting for dials to %v", waitlist) } - return false } - return true + + return d.checkUnexpectedDial() } -func uintID(i uint32) enode.ID { - var id enode.ID - binary.BigEndian.PutUint32(id[:], i) - return id +func (d *dialTestDialer) checkUnexpectedDial() error { + select { + case req := <-d.init: + return fmt.Errorf("attempt to dial unexpected node %v", req.n.ID()) + case <-time.After(150 * time.Millisecond): + return nil + } } -// implements discoverTable for TestDialResolve -type resolveMock struct { - resolveCalls []*enode.Node - answer *enode.Node +// completeDials unblocks calls to Dial for the given nodes. +func (d *dialTestDialer) completeDials(ids []enode.ID, err error) error { + for _, id := range ids { + req := d.blocked[id] + if req == nil { + return fmt.Errorf("can't complete dial to %v", id) + } + req.unblock <- err + } + return nil +} + +// dialTestResolver tracks calls to resolve. +type dialTestResolver struct { + mu sync.Mutex + calls []enode.ID + answers map[enode.ID]*enode.Node } -func (t *resolveMock) Resolve(n *enode.Node) *enode.Node { - t.resolveCalls = append(t.resolveCalls, n) - return t.answer +func (t *dialTestResolver) setAnswers(m map[enode.ID]*enode.Node) { + t.mu.Lock() + defer t.mu.Unlock() + + t.answers = m + t.calls = nil } -func (t *resolveMock) Self() *enode.Node { return new(enode.Node) } -func (t *resolveMock) Close() {} -func (t *resolveMock) LookupRandom() []*enode.Node { return nil } -func (t *resolveMock) ReadRandomNodes(buf []*enode.Node) int { return 0 } +func (t *dialTestResolver) checkCalls() bool { + t.mu.Lock() + defer t.mu.Unlock() + + for _, id := range t.calls { + if _, ok := t.answers[id]; !ok { + return false + } + } + return true +} + +func (t *dialTestResolver) Resolve(n *enode.Node) *enode.Node { + t.mu.Lock() + defer t.mu.Unlock() + + t.calls = append(t.calls, n.ID()) + return t.answers[n.ID()] +} diff --git a/p2p/discover/common.go b/p2p/discover/common.go index 248017b1..e389821f 100644 --- a/p2p/discover/common.go +++ b/p2p/discover/common.go @@ -20,11 +20,14 @@ import ( "crypto/ecdsa" "net" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/common/mclock" + "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" ) +// UDPConn is a network connection on which discovery can operate. type UDPConn interface { ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) WriteToUDP(b []byte, addr *net.UDPAddr) (n int, err error) @@ -32,16 +35,31 @@ type UDPConn interface { LocalAddr() net.Addr } -// Config holds Table-related settings. +// Config holds settings for the discovery listener. 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 + NetRestrict *netutil.Netlist // list of allowed IP networks + 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 + ValidSchemes enr.IdentityScheme // allowed identity schemes + Clock mclock.Clock +} + +func (cfg Config) withDefaults() Config { + if cfg.Log == nil { + cfg.Log = log.Root() + } + if cfg.ValidSchemes == nil { + cfg.ValidSchemes = enode.ValidSchemes + } + if cfg.Clock == nil { + cfg.Clock = mclock.System{} + } + return cfg } // ListenUDP starts listening for discovery packets on the given UDP socket. @@ -55,3 +73,10 @@ type ReadPacket struct { Data []byte Addr *net.UDPAddr } + +func min(x, y int) int { + if x > y { + return y + } + return x +} diff --git a/p2p/discover/lookup.go b/p2p/discover/lookup.go new file mode 100644 index 00000000..b8d97b44 --- /dev/null +++ b/p2p/discover/lookup.go @@ -0,0 +1,227 @@ +// 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 ( + "context" + "errors" + "time" + + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// 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. +type lookup struct { + tab *Table + queryfunc func(*node) ([]*node, error) + replyCh chan []*node + cancelCh <-chan struct{} + asked, seen map[enode.ID]bool + result nodesByDistance + replyBuffer []*node + queries int +} + +type queryFunc func(*node) ([]*node, error) + +func newLookup(ctx context.Context, tab *Table, target enode.ID, q queryFunc) *lookup { + it := &lookup{ + tab: tab, + queryfunc: q, + asked: make(map[enode.ID]bool), + seen: make(map[enode.ID]bool), + result: nodesByDistance{target: target}, + replyCh: make(chan []*node, alpha), + cancelCh: ctx.Done(), + queries: -1, + } + // Don't query further if we hit ourself. + // Unlikely to happen often in practice. + it.asked[tab.self().ID()] = true + return it +} + +// run runs the lookup to completion and returns the closest nodes found. +func (it *lookup) run() []*enode.Node { + for it.advance() { + } + return unwrapNodes(it.result.entries) +} + +// advance advances the lookup until any new nodes have been found. +// It returns false when the lookup has ended. +func (it *lookup) advance() bool { + for it.startQueries() { + select { + case nodes := <-it.replyCh: + it.replyBuffer = it.replyBuffer[:0] + for _, n := range nodes { + if n != nil && !it.seen[n.ID()] { + it.seen[n.ID()] = true + it.result.push(n, bucketSize) + it.replyBuffer = append(it.replyBuffer, n) + } + } + it.queries-- + if len(it.replyBuffer) > 0 { + return true + } + case <-it.cancelCh: + it.shutdown() + } + } + return false +} + +func (it *lookup) shutdown() { + for it.queries > 0 { + <-it.replyCh + it.queries-- + } + it.queryfunc = nil + it.replyBuffer = nil +} + +func (it *lookup) startQueries() bool { + if it.queryfunc == nil { + return false + } + + // The first query returns nodes from the local table. + if it.queries == -1 { + closest := it.tab.findnodeByID(it.result.target, bucketSize, false) + // Avoid finishing the lookup too quickly if table is empty. It'd be better to wait + // for the table to fill in this case, but there is no good mechanism for that + // yet. + if len(closest.entries) == 0 { + it.slowdown() + } + it.queries = 1 + it.replyCh <- closest.entries + return true + } + + // Ask the closest nodes that we haven't asked yet. + for i := 0; i < len(it.result.entries) && it.queries < alpha; i++ { + n := it.result.entries[i] + if !it.asked[n.ID()] { + it.asked[n.ID()] = true + it.queries++ + go it.query(n, it.replyCh) + } + } + // The lookup ends when no more nodes can be asked. + return it.queries > 0 +} + +func (it *lookup) slowdown() { + sleep := time.NewTimer(1 * time.Second) + defer sleep.Stop() + select { + case <-sleep.C: + case <-it.tab.closeReq: + } +} + +func (it *lookup) query(n *node, reply chan<- []*node) { + fails := it.tab.db.FindFails(n.ID(), n.IP()) + r, err := it.queryfunc(n) + if errors.Is(err, errClosed) { + // Avoid recording failures on shutdown. + reply <- nil + return + } else if len(r) == 0 { + fails++ + it.tab.db.UpdateFindFails(n.ID(), n.IP(), fails) + // Remove the node from the local table if it fails to return anything useful too + // many times, but only if there are enough other nodes in the bucket. + dropped := false + if fails >= maxFindnodeFailures && it.tab.bucketLen(n.ID()) >= bucketSize/2 { + dropped = true + it.tab.delete(n) + } + it.tab.log.Trace("FINDNODE failed", "id", n.ID(), "failcount", fails, "dropped", dropped, "err", err) + } else if fails > 0 { + // Reset failure counter because it counts _consecutive_ failures. + it.tab.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 { + it.tab.addSeenNode(n) + } + reply <- r +} + +// lookupIterator performs lookup operations and iterates over all seen nodes. +// When a lookup finishes, a new one is created through nextLookup. +type lookupIterator struct { + buffer []*node + nextLookup lookupFunc + ctx context.Context + cancel func() + lookup *lookup +} + +type lookupFunc func(ctx context.Context) *lookup + +func newLookupIterator(ctx context.Context, next lookupFunc) *lookupIterator { + ctx, cancel := context.WithCancel(ctx) + return &lookupIterator{ctx: ctx, cancel: cancel, nextLookup: next} +} + +// Node returns the current node. +func (it *lookupIterator) Node() *enode.Node { + if len(it.buffer) == 0 { + return nil + } + return unwrapNode(it.buffer[0]) +} + +// Next moves to the next node. +func (it *lookupIterator) Next() bool { + // Consume next node in buffer. + if len(it.buffer) > 0 { + it.buffer = it.buffer[1:] + } + // Advance the lookup to refill the buffer. + for len(it.buffer) == 0 { + if it.ctx.Err() != nil { + it.lookup = nil + it.buffer = nil + return false + } + if it.lookup == nil { + it.lookup = it.nextLookup(it.ctx) + continue + } + if !it.lookup.advance() { + it.lookup = nil + continue + } + it.buffer = it.lookup.replyBuffer + } + return true +} + +// Close ends the iterator. +func (it *lookupIterator) Close() { + it.cancel() +} diff --git a/p2p/discover/node.go b/p2p/discover/node.go index 1b3fed2a..9ffe101c 100644 --- a/p2p/discover/node.go +++ b/p2p/discover/node.go @@ -18,14 +18,15 @@ package discover import ( "crypto/ecdsa" + "crypto/elliptic" "errors" "math/big" "net" "time" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" ) // node represents a host on the network. @@ -45,13 +46,16 @@ func encodePubkey(key *ecdsa.PublicKey) encPubkey { return e } -func decodePubkey(e encPubkey) (*ecdsa.PublicKey, error) { - p := &ecdsa.PublicKey{Curve: crypto.S256(), X: new(big.Int), Y: new(big.Int)} +func decodePubkey(curve elliptic.Curve, e []byte) (*ecdsa.PublicKey, error) { + if len(e) != len(encPubkey{}) { + return nil, errors.New("wrong size public key data") + } + p := &ecdsa.PublicKey{Curve: curve, X: new(big.Int), Y: new(big.Int)} half := len(e) / 2 p.X.SetBytes(e[:half]) p.Y.SetBytes(e[half:]) if !p.Curve.IsOnCurve(p.X, p.Y) { - return nil, errors.New("invalid secp256k1 curve point") + return nil, errors.New("invalid curve point") } return p, nil } @@ -60,17 +64,6 @@ func (e encPubkey) id() enode.ID { return enode.ID(crypto.Keccak256Hash(e[:])) } -// 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 := crypto.Ecrecover(hash, sig) - if err != nil { - return key, err - } - copy(key[:], pubkey[1:]) - return key, nil -} - func wrapNode(n *enode.Node) *node { return &node{Node: *n} } diff --git a/p2p/discover/ntp.go b/p2p/discover/ntp.go index 686d8051..48ceffe9 100644 --- a/p2p/discover/ntp.go +++ b/p2p/discover/ntp.go @@ -25,7 +25,7 @@ import ( "sort" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) const ( @@ -108,7 +108,7 @@ func sntpDrift(measurements int) (time.Duration, error) { // Calculate the drift based on an assumed answer time of RRT/2 drifts = append(drifts, sent.Sub(t)+elapsed/2) } - // Calculate average drif (drop two extremities to avoid outliers) + // Calculate average drift (drop two extremities to avoid outliers) sort.Sort(durationSlice(drifts)) drift := time.Duration(0) diff --git a/p2p/discover/table.go b/p2p/discover/table.go index 92fafde2..d08f8a6c 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -32,10 +32,10 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/netutil" ) const ( @@ -377,7 +377,7 @@ func (tab *Table) nextRevalidateTime() time.Duration { } // copyLiveNodes adds nodes from the table to the database if they have been in the table -// longer then minTableTime. +// longer than seedMinTableTime. func (tab *Table) copyLiveNodes() { tab.mutex.Lock() defer tab.mutex.Unlock() @@ -392,22 +392,35 @@ 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, 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} +// findnodeByID returns the n nodes in the table that are closest to the given id. +// This is used by the FINDNODE/v4 handler. +// +// The preferLive parameter says whether the caller wants liveness-checked results. If +// preferLive is true and the table contains any verified nodes, the result will not +// contain unverified nodes. However, if there are no verified nodes at all, the result +// will contain unverified nodes. +func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) *nodesByDistance { + tab.mutex.Lock() + defer tab.mutex.Unlock() + + // Scan all buckets. There might be a better way to do this, but there aren't that many + // buckets, so this solution should be fine. The worst-case complexity of this loop + // is O(tab.len() * nresults). + nodes := &nodesByDistance{target: target} + liveNodes := &nodesByDistance{target: target} for _, b := range &tab.buckets { for _, n := range b.entries { - if checklive && n.livenessChecks == 0 { - continue + nodes.push(n, nresults) + if preferLive && n.livenessChecks > 0 { + liveNodes.push(n, nresults) } - close.push(n, nresults) } } - return close + + if preferLive && len(liveNodes.entries) > 0 { + return liveNodes + } + return nodes } // len returns the number of nodes in the table. @@ -421,9 +434,21 @@ func (tab *Table) len() (n int) { return n } +// bucketLen returns the number of nodes in the bucket for the given ID. +func (tab *Table) bucketLen(id enode.ID) int { + tab.mutex.Lock() + defer tab.mutex.Unlock() + + return len(tab.bucket(id).entries) +} + // bucket returns the bucket for the given node ID hash. func (tab *Table) bucket(id enode.ID) *bucket { d := enode.LogDist(tab.self().ID(), id) + return tab.bucketAtDistance(d) +} + +func (tab *Table) bucketAtDistance(d int) *bucket { if d <= bucketMinDistance { return tab.buckets[0] } @@ -516,6 +541,9 @@ func (tab *Table) delete(node *node) { } func (tab *Table) addIP(b *bucket, ip net.IP) bool { + if len(ip) == 0 { + return false // Nodes without IP cannot be added. + } if netutil.IsLAN(ip) { return true } diff --git a/p2p/discover/table_test.go b/p2p/discover/table_test.go index 8fcef4a6..5f40c967 100644 --- a/p2p/discover/table_test.go +++ b/p2p/discover/table_test.go @@ -27,10 +27,10 @@ import ( "testing/quick" "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "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/p2p/netutil" ) func TestTable_pingReplace(t *testing.T) { @@ -58,7 +58,7 @@ func testPingReplace(t *testing.T, newNodeIsResponding, lastInBucketIsResponding // Fill up the sender's bucket. pingKey, _ := crypto.HexToECDSA("45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8") - pingSender := wrapNode(enode.NewV4(&pingKey.PublicKey, net.IP{}, 99, 99)) + pingSender := wrapNode(enode.NewV4(&pingKey.PublicKey, net.IP{127, 0, 0, 1}, 99, 99)) last := fillBucket(tab, pingSender) // Add the sender as if it just pinged us. Revalidate should replace the last node in @@ -190,7 +190,7 @@ func checkIPLimitInvariant(t *testing.T, tab *Table) { } } -func TestTable_closest(t *testing.T) { +func TestTable_findnodeByID(t *testing.T) { t.Parallel() test := func(test *closeTest) bool { @@ -202,7 +202,7 @@ func TestTable_closest(t *testing.T) { fillTable(tab, test.All) // check that closest(Target, N) returns nodes - result := tab.closest(test.Target, test.N, false).entries + result := tab.findnodeByID(test.Target, test.N, false).entries if hasDuplicates(result) { t.Errorf("result contains duplicates") return false diff --git a/p2p/discover/table_util_test.go b/p2p/discover/table_util_test.go index 7be595d9..77e03ca9 100644 --- a/p2p/discover/table_util_test.go +++ b/p2p/discover/table_util_test.go @@ -17,18 +17,20 @@ package discover import ( + "bytes" "crypto/ecdsa" "encoding/hex" + "errors" "fmt" "math/rand" "net" "sort" "sync" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" + "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" ) var nullNode *enode.Node @@ -53,6 +55,23 @@ func nodeAtDistance(base enode.ID, ld int, ip net.IP) *node { return wrapNode(enode.SignNull(&r, idAtDistance(base, ld))) } +// nodesAtDistance creates n nodes for which enode.LogDist(base, node.ID()) == ld. +func nodesAtDistance(base enode.ID, ld int, n int) []*enode.Node { + results := make([]*enode.Node, n) + for i := range results { + results[i] = unwrapNode(nodeAtDistance(base, ld, intIP(i))) + } + return results +} + +func nodesToRecords(nodes []*enode.Node) []*enr.Record { + records := make([]*enr.Record, len(nodes)) + for i := range nodes { + records[i] = nodes[i].Record() + } + return records +} + // idAtDistance returns a random hash such that enode.LogDist(a, b) == n func idAtDistance(a enode.ID, n int) (b enode.ID) { if n == 0 { @@ -115,8 +134,8 @@ func newPingRecorder() *pingRecorder { } } -// setRecord updates a node record. Future calls to ping and -// requestENR will return this record. +// updateRecord 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() @@ -127,7 +146,6 @@ func (t *pingRecorder) updateRecord(n *enode.Node) { 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() {} // ping simulates a ping request. func (t *pingRecorder) ping(n *enode.Node) (seq uint64, err error) { @@ -144,7 +162,7 @@ func (t *pingRecorder) ping(n *enode.Node) (seq uint64, err error) { return seq, nil } -// requestENR simulates an ENR request. +// RequestENR simulates an ENR request. func (t *pingRecorder) RequestENR(n *enode.Node) (*enode.Node, error) { t.mu.Lock() defer t.mu.Unlock() @@ -169,12 +187,47 @@ func hasDuplicates(slice []*node) bool { return false } +// checkNodesEqual checks whether the two given node lists contain the same nodes. +func checkNodesEqual(got, want []*enode.Node) error { + if len(got) == len(want) { + for i := range got { + if !nodeEqual(got[i], want[i]) { + goto NotEqual + } + } + } + return nil + +NotEqual: + output := new(bytes.Buffer) + fmt.Fprintf(output, "got %d nodes:\n", len(got)) + for _, n := range got { + fmt.Fprintf(output, " %v %v\n", n.ID(), n) + } + fmt.Fprintf(output, "want %d:\n", len(want)) + for _, n := range want { + fmt.Fprintf(output, " %v %v\n", n.ID(), n) + } + return errors.New(output.String()) +} + +func nodeEqual(n1 *enode.Node, n2 *enode.Node) bool { + return n1.ID() == n2.ID() && n1.IP().Equal(n2.IP()) +} + +func sortByID(nodes []*enode.Node) { + sort.Slice(nodes, func(i, j int) bool { + return string(nodes[i].ID().Bytes()) < string(nodes[j].ID().Bytes()) + }) +} + func sortedByDistanceTo(distbase enode.ID, slice []*node) bool { return sort.SliceIsSorted(slice, func(i, j int) bool { return enode.DistCmp(distbase, slice[i].ID(), slice[j].ID()) < 0 }) } +// hexEncPrivkey decodes h as a private key. func hexEncPrivkey(h string) *ecdsa.PrivateKey { b, err := hex.DecodeString(h) if err != nil { @@ -187,6 +240,7 @@ func hexEncPrivkey(h string) *ecdsa.PrivateKey { return key } +// hexEncPubkey decodes h as a public key. func hexEncPubkey(h string) (ret encPubkey) { b, err := hex.DecodeString(h) if err != nil { diff --git a/p2p/discover/v4_udp_lookup_test.go b/p2p/discover/v4_lookup_test.go similarity index 63% rename from p2p/discover/v4_udp_lookup_test.go rename to p2p/discover/v4_lookup_test.go index b55a2aad..a00de9ca 100644 --- a/p2p/discover/v4_udp_lookup_test.go +++ b/p2p/discover/v4_lookup_test.go @@ -20,12 +20,13 @@ import ( "crypto/ecdsa" "fmt" "net" - "reflect" "sort" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/discover/v4wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" ) func TestUDPv4_Lookup(t *testing.T) { @@ -33,7 +34,7 @@ func TestUDPv4_Lookup(t *testing.T) { test := newUDPTest(t) // Lookup on empty table returns no nodes. - targetKey, _ := decodePubkey(lookupTestnet.target) + targetKey, _ := decodePubkey(crypto.S256(), lookupTestnet.target[:]) if results := test.udp.LookupPubkey(targetKey); len(results) > 0 { t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results) } @@ -49,19 +50,7 @@ func TestUDPv4_Lookup(t *testing.T) { }() // 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}) - } - }) - } + serveTestnet(test, lookupTestnet) // Verify result nodes. results := <-resultC @@ -72,14 +61,112 @@ func TestUDPv4_Lookup(t *testing.T) { if len(results) != bucketSize { t.Errorf("wrong number of results: got %d, want %d", len(results), bucketSize) } + checkLookupResults(t, lookupTestnet, results) +} + +func TestUDPv4_LookupIterator(t *testing.T) { + t.Parallel() + test := newUDPTest(t) + defer test.close() + + // Seed table with initial nodes. + bootnodes := make([]*node, len(lookupTestnet.dists[256])) + for i := range lookupTestnet.dists[256] { + bootnodes[i] = wrapNode(lookupTestnet.node(256, i)) + } + fillTable(test.table, bootnodes) + go serveTestnet(test, lookupTestnet) + + // Create the iterator and collect the nodes it yields. + iter := test.udp.RandomNodes() + seen := make(map[enode.ID]*enode.Node) + for limit := lookupTestnet.len(); iter.Next() && len(seen) < limit; { + seen[iter.Node().ID()] = iter.Node() + } + iter.Close() + + // Check that all nodes in lookupTestnet were seen by the iterator. + results := make([]*enode.Node, 0, len(seen)) + for _, n := range seen { + results = append(results, n) + } + sortByID(results) + want := lookupTestnet.nodes() + if err := checkNodesEqual(results, want); err != nil { + t.Fatal(err) + } +} + +// TestUDPv4_LookupIteratorClose checks that lookupIterator ends when its Close +// method is called. +func TestUDPv4_LookupIteratorClose(t *testing.T) { + t.Parallel() + test := newUDPTest(t) + defer test.close() + + // Seed table with initial nodes. + bootnodes := make([]*node, len(lookupTestnet.dists[256])) + for i := range lookupTestnet.dists[256] { + bootnodes[i] = wrapNode(lookupTestnet.node(256, i)) + } + fillTable(test.table, bootnodes) + go serveTestnet(test, lookupTestnet) + + it := test.udp.RandomNodes() + if ok := it.Next(); !ok || it.Node() == nil { + t.Fatalf("iterator didn't return any node") + } + + it.Close() + + ncalls := 0 + for ; ncalls < 100 && it.Next(); ncalls++ { + if it.Node() == nil { + t.Error("iterator returned Node() == nil node after Next() == true") + } + } + t.Logf("iterator returned %d nodes after close", ncalls) + if it.Next() { + t.Errorf("Next() == true after close and %d more calls", ncalls) + } + if n := it.Node(); n != nil { + t.Errorf("iterator returned non-nil node after close and %d more calls", ncalls) + } +} + +func serveTestnet(test *udpTest, testnet *preminedTestnet) { + for done := false; !done; { + done = test.waitPacketOut(func(p v4wire.Packet, to *net.UDPAddr, hash []byte) { + n, key := testnet.nodeByAddr(to) + switch p.(type) { + case *v4wire.Ping: + test.packetInFrom(nil, key, to, &v4wire.Pong{Expiration: futureExp, ReplyTok: hash}) + case *v4wire.Findnode: + dist := enode.LogDist(n.ID(), testnet.target.id()) + nodes := testnet.nodesAtDistance(dist - 1) + test.packetInFrom(nil, key, to, &v4wire.Neighbors{Expiration: futureExp, Nodes: nodes}) + } + }) + } +} + +// checkLookupResults verifies that the results of a lookup are the closest nodes to +// the testnet's target. +func checkLookupResults(t *testing.T, tn *preminedTestnet, results []*enode.Node) { + t.Helper() + t.Logf("results:") + for _, e := range results { + t.Logf(" ld=%d, %x", enode.LogDist(tn.target.id(), e.ID()), e.ID().Bytes()) + } if hasDuplicates(wrapNodes(results)) { t.Errorf("result set contains duplicate entries") } - if !sortedByDistanceTo(lookupTestnet.target.id(), wrapNodes(results)) { + if !sortedByDistanceTo(tn.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) + wantNodes := tn.closest(len(results)) + if err := checkNodesEqual(results, wantNodes); err != nil { + t.Error(err) } } @@ -148,10 +235,33 @@ type preminedTestnet struct { dists [hashBits + 1][]*ecdsa.PrivateKey } +func (tn *preminedTestnet) len() int { + n := 0 + for _, keys := range tn.dists { + n += len(keys) + } + return n +} + +func (tn *preminedTestnet) nodes() []*enode.Node { + result := make([]*enode.Node, 0, tn.len()) + for dist, keys := range tn.dists { + for index := range keys { + result = append(result, tn.node(dist, index)) + } + } + sortByID(result) + return result +} + 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) + rec := new(enr.Record) + rec.Set(enr.IP{127, byte(dist >> 8), byte(dist), byte(index)}) + rec.Set(enr.UDP(5000)) + enode.SignV4(rec, key) + n, _ := enode.New(enode.ValidSchemes, rec) + return n } func (tn *preminedTestnet) nodeByAddr(addr *net.UDPAddr) (*enode.Node, *ecdsa.PrivateKey) { @@ -161,14 +271,31 @@ func (tn *preminedTestnet) nodeByAddr(addr *net.UDPAddr) (*enode.Node, *ecdsa.Pr return tn.node(dist, index), key } -func (tn *preminedTestnet) nodesAtDistance(dist int) []rpcNode { - result := make([]rpcNode, len(tn.dists[dist])) +func (tn *preminedTestnet) nodesAtDistance(dist int) []v4wire.Node { + result := make([]v4wire.Node, len(tn.dists[dist])) for i := range result { result[i] = nodeToRPC(wrapNode(tn.node(dist, i))) } return result } +func (tn *preminedTestnet) neighborsAtDistances(base *enode.Node, distances []uint, elems int) []*enode.Node { + var result []*enode.Node + for d := range lookupTestnet.dists { + for i := range lookupTestnet.dists[d] { + n := lookupTestnet.node(d, i) + d := enode.LogDist(base.ID(), n.ID()) + if containsUint(uint(d), distances) { + result = append(result, n) + if len(result) >= elems { + return result + } + } + } + } + return result +} + func (tn *preminedTestnet) closest(n int) (nodes []*enode.Node) { for d := range tn.dists { for i := range tn.dists[d] { diff --git a/p2p/discover/v4_udp.go b/p2p/discover/v4_udp.go index 05d3a2f1..67cd2c00 100644 --- a/p2p/discover/v4_udp.go +++ b/p2p/discover/v4_udp.go @@ -19,6 +19,7 @@ package discover import ( "bytes" "container/list" + "context" "crypto/ecdsa" crand "crypto/rand" "errors" @@ -28,24 +29,22 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/discover/v4wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/netutil" ) // Errors var ( - errPacketTooSmall = errors.New("too small") - errBadHash = errors.New("bad hash") errExpired = errors.New("expired") errUnsolicitedReply = errors.New("unsolicited reply") errUnknownNode = errors.New("unknown node") errTimeout = errors.New("RPC timeout") errClockWarp = errors.New("reply deadline too far in the future") errClosed = errors.New("socket closed") + errLowPort = errors.New("low port") ) const ( @@ -64,135 +63,6 @@ const ( maxPacketSize = 1280 ) -// RPC packet types -const ( - p_pingV4 = iota + 1 // zero is 'reserved' - p_pongV4 - p_findnodeV4 - p_neighborsV4 - p_enrRequestV4 - p_enrResponseV4 -) - -// RPC request structures -type ( - pingV4 struct { - senderKey *ecdsa.PublicKey // filled in by preverify - - Version uint - From, To rpcEndpoint - Expiration uint64 - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // 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). - To rpcEndpoint - - ReplyTok []byte // This contains the hash of the ping packet. - Expiration uint64 // Absolute timestamp at which the packet becomes invalid. - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // 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"` - } - - // 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 - TCP uint16 // for RLPx protocol - ID encPubkey - } - - rpcEndpoint struct { - IP net.IP // len 4 for IPv4 or 16 for IPv6 - UDP uint16 // for discovery protocol - TCP uint16 // for RLPx protocol - } -) - -// 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 { - ip = ip4 - } else if ip6 := addr.IP.To16(); ip6 != nil { - ip = ip6 - } - return rpcEndpoint{IP: ip, UDP: uint16(addr.Port), TCP: tcpPort} -} - -func (t *UDPv4) nodeFromRPC(sender *net.UDPAddr, rn rpcNode) (*node, error) { - if rn.UDP <= 1024 { - return nil, errors.New("low port") - } - if err := netutil.CheckRelayIP(sender.IP, rn.IP); err != nil { - return nil, err - } - if t.netrestrict != nil && !t.netrestrict.Contains(rn.IP) { - return nil, errors.New("not contained in netrestrict whitelist") - } - key, err := decodePubkey(rn.ID) - if err != nil { - return nil, err - } - n := wrapNode(enode.NewV4(key, rn.IP, int(rn.TCP), int(rn.UDP))) - err = n.ValidateComplete() - return n, err -} - -func nodeToRPC(n *node) rpcNode { - var key ecdsa.PublicKey - var ekey encPubkey - if err := n.Load((*enode.Secp256k1)(&key)); err == nil { - ekey = encodePubkey(&key) - } - return rpcNode{ID: ekey, IP: n.IP(), UDP: uint16(n.UDP()), TCP: uint16(n.TCP())} -} - // UDPv4 implements the v4 wire protocol. type UDPv4 struct { conn UDPConn @@ -207,7 +77,8 @@ type UDPv4 struct { addReplyMatcher chan *replyMatcher gotreply chan reply - closing chan struct{} + closeCtx context.Context + cancelCloseCtx context.CancelFunc } // replyMatcher represents a pending reply. @@ -240,36 +111,37 @@ type replyMatcher struct { // reply contains the most recent reply. This field is safe for reading after errc has // received a value. - reply packetV4 + reply v4wire.Packet } -type replyMatchFunc func(interface{}) (matched bool, requestDone bool) +type replyMatchFunc func(v4wire.Packet) (matched bool, requestDone bool) // reply is a reply packet from a certain node. type reply struct { from enode.ID ip net.IP - data packetV4 + data v4wire.Packet // loop indicates whether there was // a matching request by sending on this channel. matched chan<- bool } func ListenV4(c UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv4, error) { + cfg = cfg.withDefaults() + closeCtx, cancel := context.WithCancel(context.Background()) t := &UDPv4{ conn: c, priv: cfg.PrivateKey, netrestrict: cfg.NetRestrict, localNode: ln, db: ln.Database(), - closing: make(chan struct{}), gotreply: make(chan reply), addReplyMatcher: make(chan *replyMatcher), + closeCtx: closeCtx, + cancelCloseCtx: cancel, log: cfg.Log, } - if t.log == nil { - t.log = log.Root() - } + tab, err := newTable(t, ln.Database(), cfg.Bootnodes, t.log) if err != nil { return nil, err @@ -291,126 +163,13 @@ func (t *UDPv4) Self() *enode.Node { // Close shuts down the socket and aborts any running queries. func (t *UDPv4) Close() { t.closeOnce.Do(func() { - close(t.closing) + t.cancelCloseCtx() 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 -} - // 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 { @@ -441,10 +200,10 @@ func (t *UDPv4) Resolve(n *enode.Node) *enode.Node { return n } -func (t *UDPv4) ourEndpoint() rpcEndpoint { +func (t *UDPv4) ourEndpoint() v4wire.Endpoint { n := t.Self() a := &net.UDPAddr{IP: n.IP(), Port: n.UDP()} - return makeEndpoint(a, uint16(n.TCP())) + return v4wire.NewEndpoint(a, uint16(n.TCP())) } // Ping sends a ping message to the given node. @@ -457,7 +216,7 @@ func (t *UDPv4) Ping(n *enode.Node) error { 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) + seq = rm.reply.(*v4wire.Pong).ENRSeq } return seq, err } @@ -466,7 +225,7 @@ func (t *UDPv4) ping(n *enode.Node) (seq uint64, err error) { // when the reply arrives. 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) + packet, hash, err := v4wire.Encode(t.priv, req) if err != nil { errc := make(chan error, 1) errc <- err @@ -474,8 +233,8 @@ func (t *UDPv4) sendPing(toid enode.ID, toaddr *net.UDPAddr, callback func()) *r } // Add a matcher for the reply to the pending reply queue. Pongs are matched if they // reference the ping we're about to send. - rm := t.pending(toid, toaddr.IP, p_pongV4, func(p interface{}) (matched bool, requestDone bool) { - matched = bytes.Equal(p.(*pongV4).ReplyTok, hash) + rm := t.pending(toid, toaddr.IP, v4wire.PongPacket, func(p v4wire.Packet) (matched bool, requestDone bool) { + matched = bytes.Equal(p.(*v4wire.Pong).ReplyTok, hash) if matched && callback != nil { callback() } @@ -483,32 +242,71 @@ func (t *UDPv4) sendPing(toid enode.ID, toaddr *net.UDPAddr, callback func()) *r }) // Send the packet. t.localNode.UDPContact(toaddr) - t.write(toaddr, toid, req.name(), packet) + t.write(toaddr, toid, req.Name(), packet) return rm } -func (t *UDPv4) makePing(toaddr *net.UDPAddr) *pingV4 { - seq, _ := rlp.EncodeToBytes(t.localNode.Node().Seq()) - return &pingV4{ +func (t *UDPv4) makePing(toaddr *net.UDPAddr) *v4wire.Ping { + return &v4wire.Ping{ Version: 4, From: t.ourEndpoint(), - To: makeEndpoint(toaddr, 0), + To: v4wire.NewEndpoint(toaddr, 0), Expiration: uint64(time.Now().Add(expiration).Unix()), - Rest: []rlp.RawValue{seq}, + ENRSeq: t.localNode.Node().Seq(), + } +} + +// LookupPubkey finds the closest nodes to the given public key. +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 t.newLookup(t.closeCtx, encodePubkey(key)).run() +} + +// RandomNodes is an iterator yielding nodes from a random walk of the DHT. +func (t *UDPv4) RandomNodes() enode.Iterator { + return newLookupIterator(t.closeCtx, t.newRandomLookup) +} + +// lookupRandom implements transport. +func (t *UDPv4) lookupRandom() []*enode.Node { + return t.newRandomLookup(t.closeCtx).run() +} + +// lookupSelf implements transport. +func (t *UDPv4) lookupSelf() []*enode.Node { + return t.newLookup(t.closeCtx, encodePubkey(&t.priv.PublicKey)).run() +} + +func (t *UDPv4) newRandomLookup(ctx context.Context) *lookup { + var target encPubkey + crand.Read(target[:]) + return t.newLookup(ctx, target) +} + +func (t *UDPv4) newLookup(ctx context.Context, targetKey encPubkey) *lookup { + target := enode.ID(crypto.Keccak256Hash(targetKey[:])) + ekey := v4wire.Pubkey(targetKey) + it := newLookup(ctx, t.tab, target, func(n *node) ([]*node, error) { + return t.findnode(n.ID(), n.addr(), ekey) + }) + return it } // findnode sends a findnode request to the given node and waits until // the node has sent up to k neighbors. -func (t *UDPv4) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ([]*node, error) { +func (t *UDPv4) findnode(toid enode.ID, toaddr *net.UDPAddr, target v4wire.Pubkey) ([]*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 - rm := t.pending(toid, toaddr.IP, p_neighborsV4, func(r interface{}) (matched bool, requestDone bool) { - reply := r.(*neighborsV4) + rm := t.pending(toid, toaddr.IP, v4wire.NeighborsPacket, func(r v4wire.Packet) (matched bool, requestDone bool) { + reply := r.(*v4wire.Neighbors) for _, rn := range reply.Nodes { nreceived++ n, err := t.nodeFromRPC(toaddr, rn) @@ -520,38 +318,48 @@ func (t *UDPv4) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ( } return true, nreceived >= bucketSize }) - t.send(toaddr, toid, &findnodeV4{ + t.send(toaddr, toid, &v4wire.Findnode{ Target: target, Expiration: uint64(time.Now().Add(expiration).Unix()), }) - return nodes, <-rm.errc + // Ensure that callers don't see a timeout if the node actually responded. Since + // findnode can receive more than one neighbors response, the reply matcher will be + // active until the remote node sends enough nodes. If the remote end doesn't have + // enough nodes the reply matcher will time out waiting for the second reply, but + // there's no need for an error in that case. + err := <-rm.errc + if errors.Is(err, errTimeout) && rm.reply != nil { + err = nil + } + return nodes, err } -// RequestENR sends enrRequest to the given node and waits for a response. +// 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{ + req := &v4wire.ENRRequest{ Expiration: uint64(time.Now().Add(expiration).Unix()), } - packet, hash, err := t.encode(t.priv, req) + packet, hash, err := v4wire.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) + rm := t.pending(n.ID(), addr.IP, v4wire.ENRResponsePacket, func(r v4wire.Packet) (matched bool, requestDone bool) { + matched = bytes.Equal(r.(*v4wire.ENRResponse).ReplyTok, hash) return matched, matched }) // Send the packet and wait for the reply. - t.write(addr, n.ID(), req.name(), packet) + 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) + respN, err := enode.New(enode.ValidSchemes, &rm.reply.(*v4wire.ENRResponse).Record) if err != nil { return nil, err } @@ -575,7 +383,7 @@ func (t *UDPv4) pending(id enode.ID, ip net.IP, ptype byte, callback replyMatchF select { case t.addReplyMatcher <- p: // loop will handle it - case <-t.closing: + case <-t.closeCtx.Done(): ch <- errClosed } return p @@ -583,13 +391,13 @@ func (t *UDPv4) pending(id enode.ID, ip net.IP, ptype byte, callback replyMatchF // handleReply dispatches a reply packet, invoking reply matchers. It returns // whether any matcher considered the packet acceptable. -func (t *UDPv4) handleReply(from enode.ID, fromIP net.IP, req packetV4) bool { +func (t *UDPv4) handleReply(from enode.ID, fromIP net.IP, req v4wire.Packet) bool { matched := make(chan bool, 1) select { case t.gotreply <- reply{from, fromIP, req, matched}: // loop will handle it return <-matched - case <-t.closing: + case <-t.closeCtx.Done(): return false } } @@ -635,7 +443,7 @@ func (t *UDPv4) loop() { resetTimeout() select { - case <-t.closing: + case <-t.closeCtx.Done(): for el := plist.Front(); el != nil; el = el.Next() { el.Value.(*replyMatcher).errc <- errClosed } @@ -649,12 +457,12 @@ func (t *UDPv4) 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.data.kind() && 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 + p.reply = r.data // Remove the matcher if callback indicates that all replies have been received. if requestDone { - p.reply = r.data p.errc <- nil plist.Remove(el) } @@ -688,44 +496,12 @@ func (t *UDPv4) loop() { } } -const ( - macSize = 256 / 8 - sigSize = 520 / 8 - headSize = macSize + sigSize // space of packet frame data -) - -var ( - headSpace = make([]byte, headSize) - - // Neighbors replies are sent across multiple packets to - // 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 := 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) - size, _, err := rlp.EncodeToReader(p) - if err != nil { - // If this ever happens, it will be caught by the unit tests. - panic("cannot encode: " + err.Error()) - } - if headSize+size+1 >= maxPacketSize { - maxNeighbors = n - break - } - } -} - -func (t *UDPv4) send(toaddr *net.UDPAddr, toid enode.ID, req packetV4) ([]byte, error) { - packet, hash, err := t.encode(t.priv, req) +func (t *UDPv4) send(toaddr *net.UDPAddr, toid enode.ID, req v4wire.Packet) ([]byte, error) { + packet, hash, err := v4wire.Encode(t.priv, req) if err != nil { return hash, err } - return hash, t.write(toaddr, toid, req.name(), packet) + return hash, t.write(toaddr, toid, req.Name(), packet) } func (t *UDPv4) write(toaddr *net.UDPAddr, toid enode.ID, what string, packet []byte) error { @@ -734,30 +510,6 @@ func (t *UDPv4) write(toaddr *net.UDPAddr, toid enode.ID, what string, packet [] return err } -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(req.kind()) - if err := rlp.Encode(b, req); err != nil { - 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 { - t.log.Error(fmt.Sprintf("Can't sign %s packet", name), "err", err) - return nil, nil, err - } - copy(packet[macSize:], sig) - // add the hash to the front. Note: this doesn't protect the - // packet in any way. Our public key will be part of this hash in - // The future. - hash = crypto.Keccak256(packet[macSize:]) - copy(packet, hash) - return packet, hash, nil -} - // readLoop runs in its own goroutine. it handles incoming UDP packets. func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) { defer t.wg.Done() @@ -773,8 +525,8 @@ func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) { t.log.Debug("Temporary UDP read error", "err", err) continue } else if err != nil { - // Shut down the loop for permament errors. - if err != io.EOF { + // Shut down the loop for permanent errors. + if !errors.Is(err, io.EOF) { t.log.Debug("UDP read error", "err", err) } return @@ -789,58 +541,23 @@ func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) { } func (t *UDPv4) handlePacket(from *net.UDPAddr, buf []byte) error { - packet, fromKey, hash, err := decodeV4(buf) + rawpacket, fromKey, hash, err := v4wire.Decode(buf) if err != nil { 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) + packet := t.wrapPacket(rawpacket) + fromID := fromKey.ID() + if err == nil && packet.preverify != nil { + err = packet.preverify(packet, from, fromID, fromKey) } - t.log.Trace("<< "+packet.name(), "id", fromID, "addr", from, "err", err) - if err == nil { - packet.handle(t, from, fromID, hash) + t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", from, "err", err) + if err == nil && packet.handle != nil { + packet.handle(packet, from, fromID, hash) } return err } -func decodeV4(buf []byte) (packetV4, encPubkey, []byte, error) { - if len(buf) < headSize+1 { - return nil, encPubkey{}, nil, errPacketTooSmall - } - hash, sig, sigdata := buf[:macSize], buf[macSize:headSize], buf[headSize:] - shouldhash := crypto.Keccak256(buf[macSize:]) - if !bytes.Equal(hash, shouldhash) { - return nil, encPubkey{}, nil, errBadHash - } - fromKey, err := recoverNodeKey(crypto.Keccak256(buf[headSize:]), sig) - if err != nil { - return nil, fromKey, hash, err - } - - var req packetV4 - switch ptype := sigdata[0]; ptype { - 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) - } - s := rlp.NewStream(bytes.NewReader(sigdata[1:]), 0) - err = s.Decode(req) - return req, fromKey, hash, err -} - // 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 @@ -858,49 +575,98 @@ func (t *UDPv4) ensureBond(toid enode.ID, toaddr *net.UDPAddr) { } } -// 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 (t *UDPv4) nodeFromRPC(sender *net.UDPAddr, rn v4wire.Node) (*node, error) { + if rn.UDP <= 1024 { + return nil, errLowPort + } + if err := netutil.CheckRelayIP(sender.IP, rn.IP); err != nil { + return nil, err + } + if t.netrestrict != nil && !t.netrestrict.Contains(rn.IP) { + return nil, errors.New("not contained in netrestrict list") + } + key, err := v4wire.DecodePubkey(crypto.S256(), rn.ID) + if err != nil { + return nil, err + } + n := wrapNode(enode.NewV4(key, rn.IP, int(rn.TCP), int(rn.UDP))) + err = n.ValidateComplete() + return n, err } -func seqFromTail(tail []rlp.RawValue) uint64 { - if len(tail) == 0 { - return 0 - } - var seq uint64 - rlp.DecodeBytes(tail[0], &seq) - return seq +func nodeToRPC(n *node) v4wire.Node { + var key ecdsa.PublicKey + var ekey v4wire.Pubkey + if err := n.Load((*enode.Secp256k1)(&key)); err == nil { + ekey = v4wire.EncodePubkey(&key) + } + return v4wire.Node{ID: ekey, IP: n.IP(), UDP: uint16(n.UDP()), TCP: uint16(n.TCP())} +} + +// wrapPacket returns the handler functions applicable to a packet. +func (t *UDPv4) wrapPacket(p v4wire.Packet) *packetHandlerV4 { + var h packetHandlerV4 + h.Packet = p + switch p.(type) { + case *v4wire.Ping: + h.preverify = t.verifyPing + h.handle = t.handlePing + case *v4wire.Pong: + h.preverify = t.verifyPong + case *v4wire.Findnode: + h.preverify = t.verifyFindnode + h.handle = t.handleFindnode + case *v4wire.Neighbors: + h.preverify = t.verifyNeighbors + case *v4wire.ENRRequest: + h.preverify = t.verifyENRRequest + h.handle = t.handleENRRequest + case *v4wire.ENRResponse: + h.preverify = t.verifyENRResponse + } + return &h +} + +// packetHandlerV4 wraps a packet with handler functions. +type packetHandlerV4 struct { + v4wire.Packet + senderKey *ecdsa.PublicKey // used for ping + + // preverify checks whether the packet is valid and should be handled at all. + preverify func(p *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error + // handle handles the packet. + handle func(req *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, mac []byte) } // PING/v4 -func (req *pingV4) name() string { return "PING/v4" } -func (req *pingV4) kind() byte { return p_pingV4 } +func (t *UDPv4) verifyPing(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + req := h.Packet.(*v4wire.Ping) -func (req *pingV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { - if expired(req.Expiration) { - return errExpired - } - key, err := decodePubkey(fromKey) + senderKey, err := v4wire.DecodePubkey(crypto.S256(), fromKey) if err != nil { - return errors.New("invalid public key") + return err + } + if v4wire.Expired(req.Expiration) { + return errExpired } - req.senderKey = key + h.senderKey = senderKey return nil } -func (req *pingV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (t *UDPv4) handlePing(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, mac []byte) { + req := h.Packet.(*v4wire.Ping) + // Reply. - seq, _ := rlp.EncodeToBytes(t.localNode.Node().Seq()) - t.send(from, fromID, &pongV4{ - To: makeEndpoint(from, req.From.TCP), + t.send(from, fromID, &v4wire.Pong{ + To: v4wire.NewEndpoint(from, req.From.TCP), ReplyTok: mac, Expiration: uint64(time.Now().Add(expiration).Unix()), - Rest: []rlp.RawValue{seq}, + ENRSeq: t.localNode.Node().Seq(), }) // Ping back if our last pong on file is too far in the past. - n := wrapNode(enode.NewV4(req.senderKey, from.IP, int(req.From.TCP), from.Port)) + n := wrapNode(enode.NewV4(h.senderKey, from.IP, int(req.From.TCP), from.Port)) if time.Since(t.db.LastPongReceived(n.ID(), from.IP)) > bondExpiration { t.sendPing(fromID, from, func() { t.tab.addVerifiedNode(n) @@ -916,31 +682,26 @@ func (req *pingV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []by // PONG/v4 -func (req *pongV4) name() string { return "PONG/v4" } -func (req *pongV4) kind() byte { return p_pongV4 } +func (t *UDPv4) verifyPong(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + req := h.Packet.(*v4wire.Pong) -func (req *pongV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { - if expired(req.Expiration) { + if v4wire.Expired(req.Expiration) { return errExpired } if !t.handleReply(fromID, from.IP, req) { return errUnsolicitedReply } - return nil -} - -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()) + return nil } // FINDNODE/v4 -func (req *findnodeV4) name() string { return "FINDNODE/v4" } -func (req *findnodeV4) kind() byte { return p_findnodeV4 } +func (t *UDPv4) verifyFindnode(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + req := h.Packet.(*v4wire.Findnode) -func (req *findnodeV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { - if expired(req.Expiration) { + if v4wire.Expired(req.Expiration) { return errExpired } if !t.checkBond(fromID, from.IP) { @@ -955,22 +716,22 @@ func (req *findnodeV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, f return nil } -func (req *findnodeV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (t *UDPv4) handleFindnode(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, mac []byte) { + req := h.Packet.(*v4wire.Findnode) + // Determine closest nodes. target := enode.ID(crypto.Keccak256Hash(req.Target[:])) - t.tab.mutex.Lock() - closest := t.tab.closest(target, bucketSize, true).entries - t.tab.mutex.Unlock() + closest := t.tab.findnodeByID(target, bucketSize, true).entries // Send neighbors in chunks with at most maxNeighbors per packet // to stay below the packet size limit. - p := neighborsV4{Expiration: uint64(time.Now().Add(expiration).Unix())} + p := v4wire.Neighbors{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 { + if len(p.Nodes) == v4wire.MaxNeighbors { t.send(from, fromID, &p) p.Nodes = p.Nodes[:0] sent = true @@ -983,29 +744,24 @@ func (req *findnodeV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac // NEIGHBORS/v4 -func (req *neighborsV4) name() string { return "NEIGHBORS/v4" } -func (req *neighborsV4) kind() byte { return p_neighborsV4 } +func (t *UDPv4) verifyNeighbors(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + req := h.Packet.(*v4wire.Neighbors) -func (req *neighborsV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { - if expired(req.Expiration) { + if v4wire.Expired(req.Expiration) { return errExpired } - if !t.handleReply(fromID, from.IP, req) { + if !t.handleReply(fromID, from.IP, h.Packet) { return errUnsolicitedReply } return nil } -func (req *neighborsV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { -} - // ENRREQUEST/v4 -func (req *enrRequestV4) name() string { return "ENRREQUEST/v4" } -func (req *enrRequestV4) kind() byte { return p_enrRequestV4 } +func (t *UDPv4) verifyENRRequest(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + req := h.Packet.(*v4wire.ENRRequest) -func (req *enrRequestV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { - if expired(req.Expiration) { + if v4wire.Expired(req.Expiration) { return errExpired } if !t.checkBond(fromID, from.IP) { @@ -1014,8 +770,8 @@ func (req *enrRequestV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, return nil } -func (req *enrRequestV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { - t.send(from, fromID, &enrResponseV4{ +func (t *UDPv4) handleENRRequest(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, mac []byte) { + t.send(from, fromID, &v4wire.ENRResponse{ ReplyTok: mac, Record: *t.localNode.Node().Record(), }) @@ -1023,15 +779,9 @@ func (req *enrRequestV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, ma // 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) { +func (t *UDPv4) verifyENRResponse(h *packetHandlerV4, from *net.UDPAddr, fromID enode.ID, fromKey v4wire.Pubkey) error { + if !t.handleReply(fromID, from.IP, h.Packet) { 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_test.go b/p2p/discover/v4_udp_test.go index 8ff439d2..e00bf278 100644 --- a/p2p/discover/v4_udp_test.go +++ b/p2p/discover/v4_udp_test.go @@ -21,8 +21,8 @@ import ( "crypto/ecdsa" crand "crypto/rand" "encoding/binary" - "encoding/hex" "errors" + "fmt" "io" "math/rand" "net" @@ -31,27 +31,20 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/internal/testlog" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" - "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/discover/v4wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" ) -func init() { - spew.Config.DisableMethods = true -} - // shared test variables var ( futureExp = uint64(time.Now().Add(10 * time.Hour).Unix()) - testTarget = encPubkey{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1} - testRemote = rpcEndpoint{IP: net.ParseIP("1.1.1.1").To4(), UDP: 1, TCP: 2} - testLocalAnnounced = rpcEndpoint{IP: net.ParseIP("2.2.2.2").To4(), UDP: 3, TCP: 4} - testLocal = rpcEndpoint{IP: net.ParseIP("3.3.3.3").To4(), UDP: 5, TCP: 6} + testTarget = v4wire.Pubkey{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1} + testRemote = v4wire.Endpoint{IP: net.ParseIP("1.1.1.1").To4(), UDP: 1, TCP: 2} + testLocalAnnounced = v4wire.Endpoint{IP: net.ParseIP("2.2.2.2").To4(), UDP: 3, TCP: 4} + testLocal = v4wire.Endpoint{IP: net.ParseIP("3.3.3.3").To4(), UDP: 5, TCP: 6} ) type udpTest struct { @@ -92,19 +85,19 @@ func (test *udpTest) close() { } // handles a packet as if it had been sent to the transport. -func (test *udpTest) packetIn(wantError error, data packetV4) { +func (test *udpTest) packetIn(wantError error, data v4wire.Packet) { 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, data packetV4) { +func (test *udpTest) packetInFrom(wantError error, key *ecdsa.PrivateKey, addr *net.UDPAddr, data v4wire.Packet) { test.t.Helper() - enc, _, err := test.udp.encode(key, data) + enc, _, err := v4wire.Encode(key, data) if err != nil { - test.t.Errorf("%s encode error: %v", data.name(), 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 { @@ -117,11 +110,14 @@ func (test *udpTest) packetInFrom(wantError error, key *ecdsa.PrivateKey, addr * func (test *udpTest) waitPacketOut(validate interface{}) (closed bool) { test.t.Helper() - dgram, ok := test.pipe.receive() - if !ok { + dgram, err := test.pipe.receive() + if err == errClosed { return true + } else if err != nil { + test.t.Error("packet receive error:", err) + return false } - p, _, hash, err := decodeV4(dgram.data) + p, _, hash, err := v4wire.Decode(dgram.data) if err != nil { test.t.Errorf("sent packet decode error: %v", err) return false @@ -140,10 +136,10 @@ func TestUDPv4_packetErrors(t *testing.T) { test := newUDPTest(t) defer test.close() - 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}) + test.packetIn(errExpired, &v4wire.Ping{From: testRemote, To: testLocalAnnounced, Version: 4}) + test.packetIn(errUnsolicitedReply, &v4wire.Pong{ReplyTok: []byte{}, Expiration: futureExp}) + test.packetIn(errUnknownNode, &v4wire.Findnode{Expiration: futureExp}) + test.packetIn(errUnsolicitedReply, &v4wire.Neighbors{Expiration: futureExp}) } func TestUDPv4_pingTimeout(t *testing.T) { @@ -161,13 +157,8 @@ func TestUDPv4_pingTimeout(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 (req testPacket) Kind() byte { return byte(req) } +func (req testPacket) Name() string { return "" } func TestUDPv4_responseTimeouts(t *testing.T) { t.Parallel() @@ -192,7 +183,7 @@ func TestUDPv4_responseTimeouts(t *testing.T) { // within the timeout window. p := &replyMatcher{ ptype: byte(rand.Intn(255)), - callback: func(interface{}) (bool, bool) { return true, true }, + callback: func(v4wire.Packet) (bool, bool) { return true, true }, } binary.BigEndian.PutUint64(p.from[:], uint64(i)) if p.ptype <= 128 { @@ -248,7 +239,7 @@ func TestUDPv4_findnodeTimeout(t *testing.T) { toaddr := &net.UDPAddr{IP: net.ParseIP("1.2.3.4"), Port: 2222} toid := enode.ID{1, 2, 3, 4} - target := encPubkey{4, 5, 6, 7} + target := v4wire.Pubkey{4, 5, 6, 7} result, err := test.udp.findnode(toid, toaddr, target) if err != errTimeout { t.Error("expected timeout error, got", err) @@ -265,7 +256,7 @@ func TestUDPv4_findnode(t *testing.T) { // put a few nodes into the table. their exact // distribution shouldn't matter much, although we need to // take care not to overflow any bucket. - nodes := &nodesByDistance{target: testTarget.id()} + nodes := &nodesByDistance{target: testTarget.ID()} live := make(map[enode.ID]bool) numCandidates := 2 * bucketSize for i := 0; i < numCandidates; i++ { @@ -283,32 +274,33 @@ func TestUDPv4_findnode(t *testing.T) { // ensure there's a bond with the test node, // findnode won't be accepted otherwise. - remoteID := encodePubkey(&test.remotekey.PublicKey).id() + remoteID := v4wire.EncodePubkey(&test.remotekey.PublicKey).ID() test.table.db.UpdateLastPongReceived(remoteID, test.remoteaddr.IP, time.Now()) // check that closest neighbors are returned. - expected := test.table.closest(testTarget.id(), bucketSize, true) - test.packetIn(nil, &findnodeV4{Target: testTarget, Expiration: futureExp}) + expected := test.table.findnodeByID(testTarget.ID(), bucketSize, true) + test.packetIn(nil, &v4wire.Findnode{Target: testTarget, Expiration: futureExp}) waitNeighbors := func(want []*node) { - test.waitPacketOut(func(p *neighborsV4, to *net.UDPAddr, hash []byte) { + test.waitPacketOut(func(p *v4wire.Neighbors, 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) + return } for i, n := range p.Nodes { - if n.ID.id() != want[i].ID() { + if n.ID.ID() != want[i].ID() { t.Errorf("result mismatch at %d:\n got: %v\n want: %v", i, n, expected.entries[i]) } - if !live[n.ID.id()] { - t.Errorf("result includes dead node %v", n.ID.id()) + if !live[n.ID.ID()] { + t.Errorf("result includes dead node %v", n.ID.ID()) } } }) } // Receive replies. want := expected.entries - if len(want) > maxNeighbors { - waitNeighbors(want[:maxNeighbors]) - want = want[maxNeighbors:] + if len(want) > v4wire.MaxNeighbors { + waitNeighbors(want[:v4wire.MaxNeighbors]) + want = want[v4wire.MaxNeighbors:] } waitNeighbors(want) } @@ -334,7 +326,7 @@ func TestUDPv4_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 *findnodeV4, to *net.UDPAddr, hash []byte) { + test.waitPacketOut(func(p *v4wire.Findnode, to *net.UDPAddr, hash []byte) { if p.Target != testTarget { t.Errorf("wrong target: got %v, want %v", p.Target, testTarget) } @@ -347,12 +339,12 @@ func TestUDPv4_findnodeMultiReply(t *testing.T) { 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)) + rpclist := make([]v4wire.Node, len(list)) for i := range list { rpclist[i] = nodeToRPC(list[i]) } - test.packetIn(nil, &neighborsV4{Expiration: futureExp, Nodes: rpclist[:2]}) - test.packetIn(nil, &neighborsV4{Expiration: futureExp, Nodes: rpclist[2:]}) + test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[:2]}) + test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[2:]}) // check that the sent neighbors are all returned by findnode select { @@ -376,10 +368,10 @@ func TestUDPv4_pingMatch(t *testing.T) { randToken := make([]byte, 32) crand.Read(randToken) - 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}) + test.packetIn(nil, &v4wire.Ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + test.waitPacketOut(func(*v4wire.Pong, *net.UDPAddr, []byte) {}) + test.waitPacketOut(func(*v4wire.Ping, *net.UDPAddr, []byte) {}) + test.packetIn(errUnsolicitedReply, &v4wire.Pong{ReplyTok: randToken, To: testLocalAnnounced, Expiration: futureExp}) } // This test checks that reply matching of pong verifies the sender IP address. @@ -387,12 +379,12 @@ func TestUDPv4_pingMatchIP(t *testing.T) { test := newUDPTest(t) defer test.close() - test.packetIn(nil, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) - test.waitPacketOut(func(*pongV4, *net.UDPAddr, []byte) {}) + test.packetIn(nil, &v4wire.Ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + test.waitPacketOut(func(*v4wire.Pong, *net.UDPAddr, []byte) {}) - test.waitPacketOut(func(p *pingV4, to *net.UDPAddr, hash []byte) { + test.waitPacketOut(func(p *v4wire.Ping, to *net.UDPAddr, hash []byte) { wrongAddr := &net.UDPAddr{IP: net.IP{33, 44, 1, 2}, Port: 30000} - test.packetInFrom(errUnsolicitedReply, test.remotekey, wrongAddr, &pongV4{ + test.packetInFrom(errUnsolicitedReply, test.remotekey, wrongAddr, &v4wire.Pong{ ReplyTok: hash, To: testLocalAnnounced, Expiration: futureExp, @@ -407,15 +399,15 @@ func TestUDPv4_successfulPing(t *testing.T) { defer test.close() // The remote side sends a ping packet to initiate the exchange. - go test.packetIn(nil, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + go test.packetIn(nil, &v4wire.Ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) // The ping is replied to. - test.waitPacketOut(func(p *pongV4, to *net.UDPAddr, hash []byte) { - pinghash := test.sent[0][:macSize] + test.waitPacketOut(func(p *v4wire.Pong, to *net.UDPAddr, hash []byte) { + pinghash := test.sent[0][:32] if !bytes.Equal(p.ReplyTok, pinghash) { t.Errorf("got pong.ReplyTok %x, want %x", p.ReplyTok, pinghash) } - wantTo := rpcEndpoint{ + wantTo := v4wire.Endpoint{ // The mirrored UDP address is the UDP packet sender IP: test.remoteaddr.IP, UDP: uint16(test.remoteaddr.Port), // The mirrored TCP port is the one from the ping packet @@ -427,11 +419,11 @@ func TestUDPv4_successfulPing(t *testing.T) { }) // Remote is unknown, the table pings back. - test.waitPacketOut(func(p *pingV4, to *net.UDPAddr, hash []byte) { + test.waitPacketOut(func(p *v4wire.Ping, 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()) } - wantTo := rpcEndpoint{ + wantTo := v4wire.Endpoint{ // The mirrored UDP address is the UDP packet sender. IP: test.remoteaddr.IP, UDP: uint16(test.remoteaddr.Port), @@ -440,7 +432,7 @@ func TestUDPv4_successfulPing(t *testing.T) { if !reflect.DeepEqual(p.To, wantTo) { t.Errorf("got ping.To %v, want %v", p.To, wantTo) } - test.packetIn(nil, &pongV4{ReplyTok: hash, Expiration: futureExp}) + test.packetIn(nil, &v4wire.Pong{ReplyTok: hash, Expiration: futureExp}) }) // The node should be added to the table shortly after getting the @@ -474,145 +466,120 @@ func TestUDPv4_EIP868(t *testing.T) { wantNode := test.udp.localNode.Node() // ENR requests aren't allowed before endpoint proof. - test.packetIn(errUnknownNode, &enrRequestV4{Expiration: futureExp}) + test.packetIn(errUnknownNode, &v4wire.ENRRequest{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.packetIn(nil, &v4wire.Ping{Expiration: futureExp}) + test.waitPacketOut(func(p *v4wire.Pong, addr *net.UDPAddr, hash []byte) { + if p.ENRSeq != wantNode.Seq() { + t.Errorf("wrong sequence number in pong: %d, want %d", p.ENRSeq, 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.waitPacketOut(func(p *v4wire.Ping, addr *net.UDPAddr, hash []byte) { + if p.ENRSeq != wantNode.Seq() { + t.Errorf("wrong sequence number in ping: %d, want %d", p.ENRSeq, wantNode.Seq()) } - test.packetIn(nil, &pongV4{Expiration: futureExp, ReplyTok: hash}) + test.packetIn(nil, &v4wire.Pong{Expiration: futureExp, ReplyTok: hash}) }) // Request should work now. - test.packetIn(nil, &enrRequestV4{Expiration: futureExp}) - test.waitPacketOut(func(p *enrResponseV4, addr *net.UDPAddr, hash []byte) { + test.packetIn(nil, &v4wire.ENRRequest{Expiration: futureExp}) + test.waitPacketOut(func(p *v4wire.ENRResponse, 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) + t.Fatalf("wrong node in ENRResponse: %v", n) } }) } -// EIP-8 test vectors. -var testPackets = []struct { - input string - wantPacket interface{} -}{ - { - input: "71dbda3a79554728d4f94411e42ee1f8b0d561c10e1e5f5893367948c6a7d70bb87b235fa28a77070271b6c164a2dce8c7e13a5739b53b5e96f2e5acb0e458a02902f5965d55ecbeb2ebb6cabb8b2b232896a36b737666c55265ad0a68412f250001ea04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a355", - wantPacket: &pingV4{ - Version: 4, - From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, - To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, - Expiration: 1136239445, - Rest: []rlp.RawValue{}, - }, - }, - { - input: "e9614ccfd9fc3e74360018522d30e1419a143407ffcce748de3e22116b7e8dc92ff74788c0b6663aaa3d67d641936511c8f8d6ad8698b820a7cf9e1be7155e9a241f556658c55428ec0563514365799a4be2be5a685a80971ddcfa80cb422cdd0101ec04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a3550102", - wantPacket: &pingV4{ - Version: 4, - From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, - To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x01}, {0x02}}, - }, - }, - { - input: "577be4349c4dd26768081f58de4c6f375a7a22f3f7adda654d1428637412c3d7fe917cadc56d4e5e7ffae1dbe3efffb9849feb71b262de37977e7c7a44e677295680e9e38ab26bee2fcbae207fba3ff3d74069a50b902a82c9903ed37cc993c50001f83e82022bd79020010db83c4d001500000000abcdef12820cfa8215a8d79020010db885a308d313198a2e037073488208ae82823a8443b9a355c5010203040531b9019afde696e582a78fa8d95ea13ce3297d4afb8ba6433e4154caa5ac6431af1b80ba76023fa4090c408f6b4bc3701562c031041d4702971d102c9ab7fa5eed4cd6bab8f7af956f7d565ee1917084a95398b6a21eac920fe3dd1345ec0a7ef39367ee69ddf092cbfe5b93e5e568ebc491983c09c76d922dc3", - 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}, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0xC5, 0x01, 0x02, 0x03, 0x04, 0x05}}, - }, - }, - { - input: "09b2428d83348d27cdf7064ad9024f526cebc19e4958f0fdad87c15eb598dd61d08423e0bf66b2069869e1724125f820d851c136684082774f870e614d95a2855d000f05d1648b2d5945470bc187c2d2216fbe870f43ed0909009882e176a46b0102f846d79020010db885a308d313198a2e037073488208ae82823aa0fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c9548443b9a355c6010203c2040506a0c969a58f6f9095004c0177a6b47f451530cab38966a25cca5cb58f055542124e", - wantPacket: &pongV4{ - To: rpcEndpoint{net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), 2222, 33338}, - ReplyTok: common.Hex2Bytes("fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c954"), - Expiration: 1136239445, - Rest: []rlp.RawValue{{0xC6, 0x01, 0x02, 0x03, 0xC2, 0x04, 0x05}, {0x06}}, - }, - }, - { - input: "c7c44041b9f7c7e41934417ebac9a8e1a4c6298f74553f2fcfdcae6ed6fe53163eb3d2b52e39fe91831b8a927bf4fc222c3902202027e5e9eb812195f95d20061ef5cd31d502e47ecb61183f74a504fe04c51e73df81f25c4d506b26db4517490103f84eb840ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f8443b9a35582999983999999280dc62cc8255c73471e0a61da0c89acdc0e035e260add7fc0c04ad9ebf3919644c91cb247affc82b69bd2ca235c71eab8e49737c937a2c396", - wantPacket: &findnodeV4{ - Target: hexEncPubkey("ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f"), - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x82, 0x99, 0x99}, {0x83, 0x99, 0x99, 0x99}}, - }, - }, - { - input: "c679fc8fe0b8b12f06577f2e802d34f6fa257e6137a995f6f4cbfc9ee50ed3710faf6e66f932c4c8d81d64343f429651328758b47d3dbc02c4042f0fff6946a50f4a49037a72bb550f3a7872363a83e1b9ee6469856c24eb4ef80b7535bcf99c0004f9015bf90150f84d846321163782115c82115db8403155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32f84984010203040101b840312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069dbf8599020010db83c4d001500000000abcdef12820d05820d05b84038643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aacf8599020010db885a308d313198a2e037073488203e78203e8b8408dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df738443b9a355010203b525a138aa34383fec3d2719a0", - wantPacket: &neighborsV4{ - Nodes: []rpcNode{ - { - ID: hexEncPubkey("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), - IP: net.ParseIP("99.33.22.55").To4(), - UDP: 4444, - TCP: 4445, - }, - { - ID: hexEncPubkey("312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069db"), - IP: net.ParseIP("1.2.3.4").To4(), - UDP: 1, - TCP: 1, - }, - { - ID: hexEncPubkey("38643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aac"), - IP: net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), - UDP: 3333, - TCP: 3333, - }, - { - ID: hexEncPubkey("8dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df73"), - IP: net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), - UDP: 999, - TCP: 1000, - }, - }, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x01}, {0x02}, {0x03}}, - }, - }, -} - -func TestUDPv4_forwardCompatibility(t *testing.T) { - testkey, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - wantNodeKey := encodePubkey(&testkey.PublicKey) +// This test verifies that a small network of nodes can boot up into a healthy state. +func TestUDPv4_smallNetConvergence(t *testing.T) { + t.Parallel() - for _, test := range testPackets { - input, err := hex.DecodeString(test.input) - if err != nil { - t.Fatalf("invalid hex: %s", test.input) - } - packet, nodekey, _, err := decodeV4(input) - if err != nil { - t.Errorf("did not accept packet %s\n%v", test.input, err) - continue + // Start the network. + nodes := make([]*UDPv4, 4) + for i := range nodes { + var cfg Config + if i > 0 { + bn := nodes[0].Self() + cfg.Bootnodes = []*enode.Node{bn} } - if !reflect.DeepEqual(packet, test.wantPacket) { - t.Errorf("got %s\nwant %s", spew.Sdump(packet), spew.Sdump(test.wantPacket)) - } - if nodekey != wantNodeKey { - t.Errorf("got id %v\nwant id %v", nodekey, wantNodeKey) + nodes[i] = startLocalhostV4(t, cfg) + defer nodes[i].Close() + } + + // Run through the iterator on all nodes until + // they have all found each other. + status := make(chan error, len(nodes)) + for i := range nodes { + node := nodes[i] + go func() { + found := make(map[enode.ID]bool, len(nodes)) + it := node.RandomNodes() + for it.Next() { + found[it.Node().ID()] = true + if len(found) == len(nodes) { + status <- nil + return + } + } + status <- fmt.Errorf("node %s didn't find all nodes", node.Self().ID().TerminalString()) + }() + } + + // Wait for all status reports. + timeout := time.NewTimer(30 * time.Second) + defer timeout.Stop() + for received := 0; received < len(nodes); { + select { + case <-timeout.C: + for _, node := range nodes { + node.Close() + } + case err := <-status: + received++ + if err != nil { + t.Error("ERROR:", err) + return + } } } } +func startLocalhostV4(t *testing.T, cfg Config) *UDPv4 { + t.Helper() + + cfg.PrivateKey = newkey() + db, _ := enode.OpenDB("") + ln := enode.NewLocalNode(db, cfg.PrivateKey) + + // Prefix logs with node ID. + lprefix := fmt.Sprintf("(%s)", ln.ID().TerminalString()) + lfmt := log.TerminalFormat(false) + cfg.Log = testlog.Logger(t, log.LvlTrace) + cfg.Log.SetHandler(log.FuncHandler(func(r *log.Record) error { + t.Logf("%s %s", lprefix, lfmt.Format(r)) + return nil + })) + + // Listen. + socket, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IP{127, 0, 0, 1}}) + if err != nil { + t.Fatal(err) + } + realaddr := socket.LocalAddr().(*net.UDPAddr) + ln.SetStaticIP(realaddr.IP) + ln.SetFallbackUDP(realaddr.Port) + udp, err := ListenV4(socket, ln, cfg) + if err != nil { + t.Fatal(err) + } + return udp +} + // dgramPipe is a fake UDP socket. It queues all sent datagrams. type dgramPipe struct { mu *sync.Mutex @@ -671,17 +638,30 @@ func (c *dgramPipe) LocalAddr() net.Addr { return &net.UDPAddr{IP: testLocal.IP, Port: int(testLocal.UDP)} } -func (c *dgramPipe) receive() (dgram, bool) { +func (c *dgramPipe) receive() (dgram, error) { c.mu.Lock() defer c.mu.Unlock() - for len(c.queue) == 0 && !c.closed { + + var timedOut bool + timer := time.AfterFunc(3*time.Second, func() { + c.mu.Lock() + timedOut = true + c.mu.Unlock() + c.cond.Broadcast() + }) + defer timer.Stop() + + for len(c.queue) == 0 && !c.closed && !timedOut { c.cond.Wait() } if c.closed { - return dgram{}, false + return dgram{}, errClosed + } + if timedOut { + return dgram{}, errTimeout } p := c.queue[0] copy(c.queue, c.queue[1:]) c.queue = c.queue[:len(c.queue)-1] - return p, true + return p, nil } diff --git a/p2p/discover/v4wire/v4wire.go b/p2p/discover/v4wire/v4wire.go new file mode 100644 index 00000000..02ee459d --- /dev/null +++ b/p2p/discover/v4wire/v4wire.go @@ -0,0 +1,293 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package v4wire implements the Discovery v4 Wire Protocol. +package v4wire + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "errors" + "fmt" + "math/big" + "net" + "time" + + "github.com/ethereum/go-ethereum/common/math" + "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" +) + +// RPC packet types +const ( + PingPacket = iota + 1 // zero is 'reserved' + PongPacket + FindnodePacket + NeighborsPacket + ENRRequestPacket + ENRResponsePacket +) + +// RPC request structures +type ( + Ping struct { + Version uint + From, To Endpoint + Expiration uint64 + ENRSeq uint64 `rlp:"optional"` // Sequence number of local record, added by EIP-868. + + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // Pong is the reply to ping. + Pong struct { + // This field should mirror the UDP envelope address + // of the ping packet, which provides a way to discover the + // external address (after NAT). + To Endpoint + ReplyTok []byte // This contains the hash of the ping packet. + Expiration uint64 // Absolute timestamp at which the packet becomes invalid. + ENRSeq uint64 `rlp:"optional"` // Sequence number of local record, added by EIP-868. + + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // Findnode is a query for nodes close to the given target. + Findnode struct { + Target Pubkey + Expiration uint64 + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // Neighbors is the reply to findnode. + Neighbors struct { + Nodes []Node + Expiration uint64 + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // ENRRequest queries for the remote node's record. + ENRRequest struct { + Expiration uint64 + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // ENRResponse is the reply to ENRRequest. + ENRResponse struct { + ReplyTok []byte // Hash of the ENRRequest packet. + Record enr.Record + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } +) + +// This number is the maximum number of neighbor nodes in a Neighbors packet. +const MaxNeighbors = 12 + +// This code computes the MaxNeighbors constant value. + +// func init() { +// var maxNeighbors int +// p := Neighbors{Expiration: ^uint64(0)} +// maxSizeNode := Node{IP: make(net.IP, 16), UDP: ^uint16(0), TCP: ^uint16(0)} +// for n := 0; ; n++ { +// p.Nodes = append(p.Nodes, maxSizeNode) +// size, _, err := rlp.EncodeToReader(p) +// if err != nil { +// // If this ever happens, it will be caught by the unit tests. +// panic("cannot encode: " + err.Error()) +// } +// if headSize+size+1 >= 1280 { +// maxNeighbors = n +// break +// } +// } +// fmt.Println("maxNeighbors", maxNeighbors) +// } + +// Pubkey represents an encoded 64-byte secp256k1 public key. +type Pubkey [64]byte + +// ID returns the node ID corresponding to the public key. +func (e Pubkey) ID() enode.ID { + return enode.ID(crypto.Keccak256Hash(e[:])) +} + +// Node represents information about a node. +type Node struct { + IP net.IP // len 4 for IPv4 or 16 for IPv6 + UDP uint16 // for discovery protocol + TCP uint16 // for RLPx protocol + ID Pubkey +} + +// Endpoint represents a network endpoint. +type Endpoint struct { + IP net.IP // len 4 for IPv4 or 16 for IPv6 + UDP uint16 // for discovery protocol + TCP uint16 // for RLPx protocol +} + +// NewEndpoint creates an endpoint. +func NewEndpoint(addr *net.UDPAddr, tcpPort uint16) Endpoint { + ip := net.IP{} + if ip4 := addr.IP.To4(); ip4 != nil { + ip = ip4 + } else if ip6 := addr.IP.To16(); ip6 != nil { + ip = ip6 + } + return Endpoint{IP: ip, UDP: uint16(addr.Port), TCP: tcpPort} +} + +type Packet interface { + // packet name and type for logging purposes. + Name() string + Kind() byte +} + +func (req *Ping) Name() string { return "PING/v4" } +func (req *Ping) Kind() byte { return PingPacket } + +func (req *Pong) Name() string { return "PONG/v4" } +func (req *Pong) Kind() byte { return PongPacket } + +func (req *Findnode) Name() string { return "FINDNODE/v4" } +func (req *Findnode) Kind() byte { return FindnodePacket } + +func (req *Neighbors) Name() string { return "NEIGHBORS/v4" } +func (req *Neighbors) Kind() byte { return NeighborsPacket } + +func (req *ENRRequest) Name() string { return "ENRREQUEST/v4" } +func (req *ENRRequest) Kind() byte { return ENRRequestPacket } + +func (req *ENRResponse) Name() string { return "ENRRESPONSE/v4" } +func (req *ENRResponse) Kind() byte { return ENRResponsePacket } + +// 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()) +} + +// Encoder/decoder. + +const ( + macSize = 32 + sigSize = crypto.SignatureLength + headSize = macSize + sigSize // space of packet frame data +) + +var ( + ErrPacketTooSmall = errors.New("too small") + ErrBadHash = errors.New("bad hash") + ErrBadPoint = errors.New("invalid curve point") +) + +var headSpace = make([]byte, headSize) + +// Decode reads a discovery v4 packet. +func Decode(input []byte) (Packet, Pubkey, []byte, error) { + if len(input) < headSize+1 { + return nil, Pubkey{}, nil, ErrPacketTooSmall + } + hash, sig, sigdata := input[:macSize], input[macSize:headSize], input[headSize:] + shouldhash := crypto.Keccak256(input[macSize:]) + if !bytes.Equal(hash, shouldhash) { + return nil, Pubkey{}, nil, ErrBadHash + } + fromKey, err := recoverNodeKey(crypto.Keccak256(input[headSize:]), sig) + if err != nil { + return nil, fromKey, hash, err + } + + var req Packet + 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 ENRRequestPacket: + req = new(ENRRequest) + case ENRResponsePacket: + req = new(ENRResponse) + default: + return nil, fromKey, hash, fmt.Errorf("unknown type: %d", ptype) + } + s := rlp.NewStream(bytes.NewReader(sigdata[1:]), 0) + err = s.Decode(req) + return req, fromKey, hash, err +} + +// Encode encodes a discovery packet. +func Encode(priv *ecdsa.PrivateKey, req Packet) (packet, hash []byte, err error) { + b := new(bytes.Buffer) + b.Write(headSpace) + b.WriteByte(req.Kind()) + if err := rlp.Encode(b, req); err != nil { + return nil, nil, err + } + packet = b.Bytes() + sig, err := crypto.Sign(crypto.Keccak256(packet[headSize:]), priv) + if err != nil { + return nil, nil, err + } + copy(packet[macSize:], sig) + // Add the hash to the front. Note: this doesn't protect the packet in any way. + hash = crypto.Keccak256(packet[macSize:]) + copy(packet, hash) + return packet, hash, nil +} + +// recoverNodeKey computes the public key used to sign the given hash from the signature. +func recoverNodeKey(hash, sig []byte) (key Pubkey, err error) { + pubkey, err := crypto.Ecrecover(hash, sig) + if err != nil { + return key, err + } + copy(key[:], pubkey[1:]) + return key, nil +} + +// EncodePubkey encodes a secp256k1 public key. +func EncodePubkey(key *ecdsa.PublicKey) Pubkey { + var e Pubkey + math.ReadBits(key.X, e[:len(e)/2]) + math.ReadBits(key.Y, e[len(e)/2:]) + return e +} + +// DecodePubkey reads an encoded secp256k1 public key. +func DecodePubkey(curve elliptic.Curve, e Pubkey) (*ecdsa.PublicKey, error) { + p := &ecdsa.PublicKey{Curve: curve, X: new(big.Int), Y: new(big.Int)} + half := len(e) / 2 + p.X.SetBytes(e[:half]) + p.Y.SetBytes(e[half:]) + if !p.Curve.IsOnCurve(p.X, p.Y) { + return nil, ErrBadPoint + } + return p, nil +} diff --git a/p2p/discover/v4wire/v4wire_test.go b/p2p/discover/v4wire/v4wire_test.go new file mode 100644 index 00000000..38820f3b --- /dev/null +++ b/p2p/discover/v4wire/v4wire_test.go @@ -0,0 +1,132 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v4wire + +import ( + "encoding/hex" + "net" + "reflect" + "testing" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" +) + +// EIP-8 test vectors. +var testPackets = []struct { + input string + wantPacket interface{} +}{ + { + input: "71dbda3a79554728d4f94411e42ee1f8b0d561c10e1e5f5893367948c6a7d70bb87b235fa28a77070271b6c164a2dce8c7e13a5739b53b5e96f2e5acb0e458a02902f5965d55ecbeb2ebb6cabb8b2b232896a36b737666c55265ad0a68412f250001ea04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a355", + wantPacket: &Ping{ + Version: 4, + From: Endpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, + To: Endpoint{net.ParseIP("::1"), 2222, 3333}, + Expiration: 1136239445, + }, + }, + { + input: "e9614ccfd9fc3e74360018522d30e1419a143407ffcce748de3e22116b7e8dc92ff74788c0b6663aaa3d67d641936511c8f8d6ad8698b820a7cf9e1be7155e9a241f556658c55428ec0563514365799a4be2be5a685a80971ddcfa80cb422cdd0101ec04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a3550102", + wantPacket: &Ping{ + Version: 4, + From: Endpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, + To: Endpoint{net.ParseIP("::1"), 2222, 3333}, + Expiration: 1136239445, + ENRSeq: 1, + Rest: []rlp.RawValue{{0x02}}, + }, + }, + { + input: "c7c44041b9f7c7e41934417ebac9a8e1a4c6298f74553f2fcfdcae6ed6fe53163eb3d2b52e39fe91831b8a927bf4fc222c3902202027e5e9eb812195f95d20061ef5cd31d502e47ecb61183f74a504fe04c51e73df81f25c4d506b26db4517490103f84eb840ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f8443b9a35582999983999999280dc62cc8255c73471e0a61da0c89acdc0e035e260add7fc0c04ad9ebf3919644c91cb247affc82b69bd2ca235c71eab8e49737c937a2c396", + wantPacket: &Findnode{ + Target: hexPubkey("ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f"), + Expiration: 1136239445, + Rest: []rlp.RawValue{{0x82, 0x99, 0x99}, {0x83, 0x99, 0x99, 0x99}}, + }, + }, + { + input: "c679fc8fe0b8b12f06577f2e802d34f6fa257e6137a995f6f4cbfc9ee50ed3710faf6e66f932c4c8d81d64343f429651328758b47d3dbc02c4042f0fff6946a50f4a49037a72bb550f3a7872363a83e1b9ee6469856c24eb4ef80b7535bcf99c0004f9015bf90150f84d846321163782115c82115db8403155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32f84984010203040101b840312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069dbf8599020010db83c4d001500000000abcdef12820d05820d05b84038643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aacf8599020010db885a308d313198a2e037073488203e78203e8b8408dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df738443b9a355010203b525a138aa34383fec3d2719a0", + wantPacket: &Neighbors{ + Nodes: []Node{ + { + ID: hexPubkey("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), + IP: net.ParseIP("99.33.22.55").To4(), + UDP: 4444, + TCP: 4445, + }, + { + ID: hexPubkey("312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069db"), + IP: net.ParseIP("1.2.3.4").To4(), + UDP: 1, + TCP: 1, + }, + { + ID: hexPubkey("38643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aac"), + IP: net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), + UDP: 3333, + TCP: 3333, + }, + { + ID: hexPubkey("8dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df73"), + IP: net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), + UDP: 999, + TCP: 1000, + }, + }, + Expiration: 1136239445, + Rest: []rlp.RawValue{{0x01}, {0x02}, {0x03}}, + }, + }, +} + +// This test checks that the decoder accepts packets according to EIP-8. +func TestForwardCompatibility(t *testing.T) { + testkey, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + wantNodeKey := EncodePubkey(&testkey.PublicKey) + + for _, test := range testPackets { + input, err := hex.DecodeString(test.input) + if err != nil { + t.Fatalf("invalid hex: %s", test.input) + } + packet, nodekey, _, err := Decode(input) + if err != nil { + t.Errorf("did not accept packet %s\n%v", test.input, err) + continue + } + if !reflect.DeepEqual(packet, test.wantPacket) { + t.Errorf("got %s\nwant %s", spew.Sdump(packet), spew.Sdump(test.wantPacket)) + } + if nodekey != wantNodeKey { + t.Errorf("got id %v\nwant id %v", nodekey, wantNodeKey) + } + } +} + +func hexPubkey(h string) (ret Pubkey) { + b, err := hex.DecodeString(h) + if err != nil { + panic(err) + } + if len(b) != len(ret) { + panic("invalid length") + } + copy(ret[:], b) + return ret +} diff --git a/p2p/discover/v5_udp.go b/p2p/discover/v5_udp.go new file mode 100644 index 00000000..071ed65a --- /dev/null +++ b/p2p/discover/v5_udp.go @@ -0,0 +1,861 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "context" + "crypto/ecdsa" + crand "crypto/rand" + "errors" + "fmt" + "io" + "math" + "net" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/discover/v5wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/netutil" +) + +const ( + lookupRequestLimit = 3 // max requests against a single node during lookup + findnodeResultLimit = 16 // applies in FINDNODE handler + totalNodesResponseLimit = 5 // applies in waitForNodes + nodesResponseItemLimit = 3 // applies in sendNodes + + respTimeoutV5 = 700 * time.Millisecond +) + +// codecV5 is implemented by v5wire.Codec (and testCodec). +// +// The UDPv5 transport is split into two objects: the codec object deals with +// encoding/decoding and with the handshake; the UDPv5 object handles higher-level concerns. +type codecV5 interface { + // Encode encodes a packet. + Encode(enode.ID, string, v5wire.Packet, *v5wire.Whoareyou) ([]byte, v5wire.Nonce, error) + + // decode decodes a packet. It returns a *v5wire.Unknown packet if decryption fails. + // The *enode.Node return value is non-nil when the input contains a handshake response. + Decode([]byte, string) (enode.ID, *enode.Node, v5wire.Packet, error) +} + +// UDPv5 is the implementation of protocol version 5. +type UDPv5 struct { + // static fields + conn UDPConn + tab *Table + netrestrict *netutil.Netlist + priv *ecdsa.PrivateKey + localNode *enode.LocalNode + db *enode.DB + log log.Logger + clock mclock.Clock + validSchemes enr.IdentityScheme + + // talkreq handler registry + trlock sync.Mutex + trhandlers map[string]TalkRequestHandler + + // channels into dispatch + packetInCh chan ReadPacket + readNextCh chan struct{} + callCh chan *callV5 + callDoneCh chan *callV5 + respTimeoutCh chan *callTimeout + + // state of dispatch + codec codecV5 + activeCallByNode map[enode.ID]*callV5 + activeCallByAuth map[v5wire.Nonce]*callV5 + callQueue map[enode.ID][]*callV5 + + // shutdown stuff + closeOnce sync.Once + closeCtx context.Context + cancelCloseCtx context.CancelFunc + wg sync.WaitGroup +} + +// TalkRequestHandler callback processes a talk request and optionally returns a reply +type TalkRequestHandler func(enode.ID, *net.UDPAddr, []byte) []byte + +// callV5 represents a remote procedure call against another node. +type callV5 struct { + node *enode.Node + packet v5wire.Packet + responseType byte // expected packet type of response + reqid []byte + ch chan v5wire.Packet // responses sent here + err chan error // errors sent here + + // Valid for active calls only: + nonce v5wire.Nonce // nonce of request packet + handshakeCount int // # times we attempted handshake for this call + challenge *v5wire.Whoareyou // last sent handshake challenge + timeout mclock.Timer +} + +// callTimeout is the response timeout event of a call. +type callTimeout struct { + c *callV5 + timer mclock.Timer +} + +// ListenV5 listens on the given connection. +func ListenV5(conn UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv5, error) { + t, err := newUDPv5(conn, ln, cfg) + if err != nil { + return nil, err + } + go t.tab.loop() + t.wg.Add(2) + go t.readLoop() + go t.dispatch() + return t, nil +} + +// newUDPv5 creates a UDPv5 transport, but doesn't start any goroutines. +func newUDPv5(conn UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv5, error) { + closeCtx, cancelCloseCtx := context.WithCancel(context.Background()) + cfg = cfg.withDefaults() + t := &UDPv5{ + // static fields + conn: conn, + localNode: ln, + db: ln.Database(), + netrestrict: cfg.NetRestrict, + priv: cfg.PrivateKey, + log: cfg.Log, + validSchemes: cfg.ValidSchemes, + clock: cfg.Clock, + trhandlers: make(map[string]TalkRequestHandler), + // channels into dispatch + packetInCh: make(chan ReadPacket, 1), + readNextCh: make(chan struct{}, 1), + callCh: make(chan *callV5), + callDoneCh: make(chan *callV5), + respTimeoutCh: make(chan *callTimeout), + // state of dispatch + codec: v5wire.NewCodec(ln, cfg.PrivateKey, cfg.Clock), + activeCallByNode: make(map[enode.ID]*callV5), + activeCallByAuth: make(map[v5wire.Nonce]*callV5), + callQueue: make(map[enode.ID][]*callV5), + // shutdown + closeCtx: closeCtx, + cancelCloseCtx: cancelCloseCtx, + } + tab, err := newTable(t, t.db, cfg.Bootnodes, cfg.Log) + if err != nil { + return nil, err + } + t.tab = tab + return t, nil +} + +// Self returns the local node record. +func (t *UDPv5) Self() *enode.Node { + return t.localNode.Node() +} + +// Close shuts down packet processing. +func (t *UDPv5) Close() { + t.closeOnce.Do(func() { + t.cancelCloseCtx() + t.conn.Close() + t.wg.Wait() + t.tab.close() + }) +} + +// Ping sends a ping message to the given node. +func (t *UDPv5) Ping(n *enode.Node) error { + _, err := t.ping(n) + return err +} + +// 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 *UDPv5) Resolve(n *enode.Node) *enode.Node { + if intable := t.tab.getNode(n.ID()); intable != nil && intable.Seq() > n.Seq() { + n = intable + } + // Try asking directly. This works if the node is still responding on the endpoint we have. + if resp, err := t.RequestENR(n); err == nil { + return resp + } + // Otherwise do a network lookup. + result := t.Lookup(n.ID()) + for _, rn := range result { + if rn.ID() == n.ID() && rn.Seq() > n.Seq() { + return rn + } + } + return n +} + +// AllNodes returns all the nodes stored in the local table. +func (t *UDPv5) AllNodes() []*enode.Node { + t.tab.mutex.Lock() + defer t.tab.mutex.Unlock() + nodes := make([]*enode.Node, 0) + + for _, b := range &t.tab.buckets { + for _, n := range b.entries { + nodes = append(nodes, unwrapNode(n)) + } + } + return nodes +} + +// LocalNode returns the current local node running the +// protocol. +func (t *UDPv5) LocalNode() *enode.LocalNode { + return t.localNode +} + +// RegisterTalkHandler adds a handler for 'talk requests'. The handler function is called +// whenever a request for the given protocol is received and should return the response +// data or nil. +func (t *UDPv5) RegisterTalkHandler(protocol string, handler TalkRequestHandler) { + t.trlock.Lock() + defer t.trlock.Unlock() + t.trhandlers[protocol] = handler +} + +// TalkRequest sends a talk request to n and waits for a response. +func (t *UDPv5) TalkRequest(n *enode.Node, protocol string, request []byte) ([]byte, error) { + req := &v5wire.TalkRequest{Protocol: protocol, Message: request} + resp := t.call(n, v5wire.TalkResponseMsg, req) + defer t.callDone(resp) + select { + case respMsg := <-resp.ch: + return respMsg.(*v5wire.TalkResponse).Message, nil + case err := <-resp.err: + return nil, err + } +} + +// RandomNodes returns an iterator that finds random nodes in the DHT. +func (t *UDPv5) RandomNodes() enode.Iterator { + 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 newLookupIterator(t.closeCtx, t.newRandomLookup) +} + +// Lookup performs a recursive lookup for the given target. +// It returns the closest nodes to target. +func (t *UDPv5) Lookup(target enode.ID) []*enode.Node { + return t.newLookup(t.closeCtx, target).run() +} + +// lookupRandom looks up a random target. +// This is needed to satisfy the transport interface. +func (t *UDPv5) lookupRandom() []*enode.Node { + return t.newRandomLookup(t.closeCtx).run() +} + +// lookupSelf looks up our own node ID. +// This is needed to satisfy the transport interface. +func (t *UDPv5) lookupSelf() []*enode.Node { + return t.newLookup(t.closeCtx, t.Self().ID()).run() +} + +func (t *UDPv5) newRandomLookup(ctx context.Context) *lookup { + var target enode.ID + crand.Read(target[:]) + return t.newLookup(ctx, target) +} + +func (t *UDPv5) newLookup(ctx context.Context, target enode.ID) *lookup { + return newLookup(ctx, t.tab, target, func(n *node) ([]*node, error) { + return t.lookupWorker(n, target) + }) +} + +// lookupWorker performs FINDNODE calls against a single node during lookup. +func (t *UDPv5) lookupWorker(destNode *node, target enode.ID) ([]*node, error) { + var ( + dists = lookupDistances(target, destNode.ID()) + nodes = nodesByDistance{target: target} + err error + ) + var r []*enode.Node + r, err = t.findnode(unwrapNode(destNode), dists) + if errors.Is(err, errClosed) { + return nil, err + } + for _, n := range r { + if n.ID() != t.Self().ID() { + nodes.push(wrapNode(n), findnodeResultLimit) + } + } + return nodes.entries, err +} + +// lookupDistances computes the distance parameter for FINDNODE calls to dest. +// It chooses distances adjacent to logdist(target, dest), e.g. for a target +// with logdist(target, dest) = 255 the result is [255, 256, 254]. +func lookupDistances(target, dest enode.ID) (dists []uint) { + td := enode.LogDist(target, dest) + dists = append(dists, uint(td)) + for i := 1; len(dists) < lookupRequestLimit; i++ { + if td+i < 256 { + dists = append(dists, uint(td+i)) + } + if td-i > 0 { + dists = append(dists, uint(td-i)) + } + } + return dists +} + +// ping calls PING on a node and waits for a PONG response. +func (t *UDPv5) ping(n *enode.Node) (uint64, error) { + req := &v5wire.Ping{ENRSeq: t.localNode.Node().Seq()} + resp := t.call(n, v5wire.PongMsg, req) + defer t.callDone(resp) + + select { + case pong := <-resp.ch: + return pong.(*v5wire.Pong).ENRSeq, nil + case err := <-resp.err: + return 0, err + } +} + +// RequestENR requests n's record. +func (t *UDPv5) RequestENR(n *enode.Node) (*enode.Node, error) { + nodes, err := t.findnode(n, []uint{0}) + if err != nil { + return nil, err + } + if len(nodes) != 1 { + return nil, fmt.Errorf("%d nodes in response for distance zero", len(nodes)) + } + return nodes[0], nil +} + +// findnode calls FINDNODE on a node and waits for responses. +func (t *UDPv5) findnode(n *enode.Node, distances []uint) ([]*enode.Node, error) { + resp := t.call(n, v5wire.NodesMsg, &v5wire.Findnode{Distances: distances}) + return t.waitForNodes(resp, distances) +} + +// waitForNodes waits for NODES responses to the given call. +func (t *UDPv5) waitForNodes(c *callV5, distances []uint) ([]*enode.Node, error) { + defer t.callDone(c) + + var ( + nodes []*enode.Node + seen = make(map[enode.ID]struct{}) + received, total = 0, -1 + ) + for { + select { + case responseP := <-c.ch: + response := responseP.(*v5wire.Nodes) + for _, record := range response.Nodes { + node, err := t.verifyResponseNode(c, record, distances, seen) + if err != nil { + t.log.Debug("Invalid record in "+response.Name(), "id", c.node.ID(), "err", err) + continue + } + nodes = append(nodes, node) + } + if total == -1 { + total = min(int(response.Total), totalNodesResponseLimit) + } + if received++; received == total { + return nodes, nil + } + case err := <-c.err: + return nodes, err + } + } +} + +// verifyResponseNode checks validity of a record in a NODES response. +func (t *UDPv5) verifyResponseNode(c *callV5, r *enr.Record, distances []uint, seen map[enode.ID]struct{}) (*enode.Node, error) { + node, err := enode.New(t.validSchemes, r) + if err != nil { + return nil, err + } + if err := netutil.CheckRelayIP(c.node.IP(), node.IP()); err != nil { + return nil, err + } + if t.netrestrict != nil && !t.netrestrict.Contains(node.IP()) { + return nil, errors.New("not contained in netrestrict list") + } + if c.node.UDP() <= 1024 { + return nil, errLowPort + } + if distances != nil { + nd := enode.LogDist(c.node.ID(), node.ID()) + if !containsUint(uint(nd), distances) { + return nil, errors.New("does not match any requested distance") + } + } + if _, ok := seen[node.ID()]; ok { + return nil, fmt.Errorf("duplicate record") + } + seen[node.ID()] = struct{}{} + return node, nil +} + +func containsUint(x uint, xs []uint) bool { + for _, v := range xs { + if x == v { + return true + } + } + return false +} + +// call sends the given call and sets up a handler for response packets (of message type +// responseType). Responses are dispatched to the call's response channel. +func (t *UDPv5) call(node *enode.Node, responseType byte, packet v5wire.Packet) *callV5 { + c := &callV5{ + node: node, + packet: packet, + responseType: responseType, + reqid: make([]byte, 8), + ch: make(chan v5wire.Packet, 1), + err: make(chan error, 1), + } + // Assign request ID. + crand.Read(c.reqid) + packet.SetRequestID(c.reqid) + // Send call to dispatch. + select { + case t.callCh <- c: + case <-t.closeCtx.Done(): + c.err <- errClosed + } + return c +} + +// callDone tells dispatch that the active call is done. +func (t *UDPv5) callDone(c *callV5) { + // This needs a loop because further responses may be incoming until the + // send to callDoneCh has completed. Such responses need to be discarded + // in order to avoid blocking the dispatch loop. + for { + select { + case <-c.ch: + // late response, discard. + case <-c.err: + // late error, discard. + case t.callDoneCh <- c: + return + case <-t.closeCtx.Done(): + return + } + } +} + +// dispatch runs in its own goroutine, handles incoming packets and deals with calls. +// +// For any destination node there is at most one 'active call', stored in the t.activeCall* +// maps. A call is made active when it is sent. The active call can be answered by a +// matching response, in which case c.ch receives the response; or by timing out, in which case +// c.err receives the error. When the function that created the call signals the active +// call is done through callDone, the next call from the call queue is started. +// +// Calls may also be answered by a WHOAREYOU packet referencing the call packet's authTag. +// When that happens the call is simply re-sent to complete the handshake. We allow one +// handshake attempt per call. +func (t *UDPv5) dispatch() { + defer t.wg.Done() + + // Arm first read. + t.readNextCh <- struct{}{} + + for { + select { + case c := <-t.callCh: + id := c.node.ID() + t.callQueue[id] = append(t.callQueue[id], c) + t.sendNextCall(id) + + case ct := <-t.respTimeoutCh: + active := t.activeCallByNode[ct.c.node.ID()] + if ct.c == active && ct.timer == active.timeout { + ct.c.err <- errTimeout + } + + case c := <-t.callDoneCh: + id := c.node.ID() + active := t.activeCallByNode[id] + if active != c { + panic("BUG: callDone for inactive call") + } + c.timeout.Stop() + delete(t.activeCallByAuth, c.nonce) + delete(t.activeCallByNode, id) + t.sendNextCall(id) + + case p := <-t.packetInCh: + t.handlePacket(p.Data, p.Addr) + // Arm next read. + t.readNextCh <- struct{}{} + + case <-t.closeCtx.Done(): + close(t.readNextCh) + for id, queue := range t.callQueue { + for _, c := range queue { + c.err <- errClosed + } + delete(t.callQueue, id) + } + for id, c := range t.activeCallByNode { + c.err <- errClosed + delete(t.activeCallByNode, id) + delete(t.activeCallByAuth, c.nonce) + } + return + } + } +} + +// startResponseTimeout sets the response timer for a call. +func (t *UDPv5) startResponseTimeout(c *callV5) { + if c.timeout != nil { + c.timeout.Stop() + } + var ( + timer mclock.Timer + done = make(chan struct{}) + ) + timer = t.clock.AfterFunc(respTimeoutV5, func() { + <-done + select { + case t.respTimeoutCh <- &callTimeout{c, timer}: + case <-t.closeCtx.Done(): + } + }) + c.timeout = timer + close(done) +} + +// sendNextCall sends the next call in the call queue if there is no active call. +func (t *UDPv5) sendNextCall(id enode.ID) { + queue := t.callQueue[id] + if len(queue) == 0 || t.activeCallByNode[id] != nil { + return + } + t.activeCallByNode[id] = queue[0] + t.sendCall(t.activeCallByNode[id]) + if len(queue) == 1 { + delete(t.callQueue, id) + } else { + copy(queue, queue[1:]) + t.callQueue[id] = queue[:len(queue)-1] + } +} + +// sendCall encodes and sends a request packet to the call's recipient node. +// This performs a handshake if needed. +func (t *UDPv5) sendCall(c *callV5) { + // The call might have a nonce from a previous handshake attempt. Remove the entry for + // the old nonce because we're about to generate a new nonce for this call. + if c.nonce != (v5wire.Nonce{}) { + delete(t.activeCallByAuth, c.nonce) + } + + addr := &net.UDPAddr{IP: c.node.IP(), Port: c.node.UDP()} + newNonce, _ := t.send(c.node.ID(), addr, c.packet, c.challenge) + c.nonce = newNonce + t.activeCallByAuth[newNonce] = c + t.startResponseTimeout(c) +} + +// sendResponse sends a response packet to the given node. +// This doesn't trigger a handshake even if no keys are available. +func (t *UDPv5) sendResponse(toID enode.ID, toAddr *net.UDPAddr, packet v5wire.Packet) error { + _, err := t.send(toID, toAddr, packet, nil) + return err +} + +// send sends a packet to the given node. +func (t *UDPv5) send(toID enode.ID, toAddr *net.UDPAddr, packet v5wire.Packet, c *v5wire.Whoareyou) (v5wire.Nonce, error) { + addr := toAddr.String() + enc, nonce, err := t.codec.Encode(toID, addr, packet, c) + if err != nil { + t.log.Warn(">> "+packet.Name(), "id", toID, "addr", addr, "err", err) + return nonce, err + } + _, err = t.conn.WriteToUDP(enc, toAddr) + t.log.Trace(">> "+packet.Name(), "id", toID, "addr", addr) + return nonce, err +} + +// readLoop runs in its own goroutine and reads packets from the network. +func (t *UDPv5) readLoop() { + defer t.wg.Done() + + buf := make([]byte, maxPacketSize) + for range t.readNextCh { + nbytes, from, err := t.conn.ReadFromUDP(buf) + if netutil.IsTemporaryError(err) { + // Ignore temporary read errors. + t.log.Debug("Temporary UDP read error", "err", err) + continue + } else if err != nil { + // Shut down the loop for permanent errors. + if !errors.Is(err, io.EOF) { + t.log.Debug("UDP read error", "err", err) + } + return + } + t.dispatchReadPacket(from, buf[:nbytes]) + } +} + +// dispatchReadPacket sends a packet into the dispatch loop. +func (t *UDPv5) dispatchReadPacket(from *net.UDPAddr, content []byte) bool { + select { + case t.packetInCh <- ReadPacket{content, from}: + return true + case <-t.closeCtx.Done(): + return false + } +} + +// handlePacket decodes and processes an incoming packet from the network. +func (t *UDPv5) handlePacket(rawpacket []byte, fromAddr *net.UDPAddr) error { + addr := fromAddr.String() + fromID, fromNode, packet, err := t.codec.Decode(rawpacket, addr) + if err != nil { + t.log.Debug("Bad discv5 packet", "id", fromID, "addr", addr, "err", err) + return err + } + if fromNode != nil { + // Handshake succeeded, add to table. + t.tab.addSeenNode(wrapNode(fromNode)) + } + if packet.Kind() != v5wire.WhoareyouPacket { + // WHOAREYOU logged separately to report errors. + t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", addr) + } + t.handle(packet, fromID, fromAddr) + return nil +} + +// handleCallResponse dispatches a response packet to the call waiting for it. +func (t *UDPv5) handleCallResponse(fromID enode.ID, fromAddr *net.UDPAddr, p v5wire.Packet) bool { + ac := t.activeCallByNode[fromID] + if ac == nil || !bytes.Equal(p.RequestID(), ac.reqid) { + t.log.Debug(fmt.Sprintf("Unsolicited/late %s response", p.Name()), "id", fromID, "addr", fromAddr) + return false + } + if !fromAddr.IP.Equal(ac.node.IP()) || fromAddr.Port != ac.node.UDP() { + t.log.Debug(fmt.Sprintf("%s from wrong endpoint", p.Name()), "id", fromID, "addr", fromAddr) + return false + } + if p.Kind() != ac.responseType { + t.log.Debug(fmt.Sprintf("Wrong discv5 response type %s", p.Name()), "id", fromID, "addr", fromAddr) + return false + } + t.startResponseTimeout(ac) + ac.ch <- p + return true +} + +// getNode looks for a node record in table and database. +func (t *UDPv5) getNode(id enode.ID) *enode.Node { + if n := t.tab.getNode(id); n != nil { + return n + } + if n := t.localNode.Database().Node(id); n != nil { + return n + } + return nil +} + +// handle processes incoming packets according to their message type. +func (t *UDPv5) handle(p v5wire.Packet, fromID enode.ID, fromAddr *net.UDPAddr) { + switch p := p.(type) { + case *v5wire.Unknown: + t.handleUnknown(p, fromID, fromAddr) + case *v5wire.Whoareyou: + t.handleWhoareyou(p, fromID, fromAddr) + case *v5wire.Ping: + t.handlePing(p, fromID, fromAddr) + case *v5wire.Pong: + if t.handleCallResponse(fromID, fromAddr, p) { + t.localNode.UDPEndpointStatement(fromAddr, &net.UDPAddr{IP: p.ToIP, Port: int(p.ToPort)}) + } + case *v5wire.Findnode: + t.handleFindnode(p, fromID, fromAddr) + case *v5wire.Nodes: + t.handleCallResponse(fromID, fromAddr, p) + case *v5wire.TalkRequest: + t.handleTalkRequest(p, fromID, fromAddr) + case *v5wire.TalkResponse: + t.handleCallResponse(fromID, fromAddr, p) + } +} + +// handleUnknown initiates a handshake by responding with WHOAREYOU. +func (t *UDPv5) handleUnknown(p *v5wire.Unknown, fromID enode.ID, fromAddr *net.UDPAddr) { + challenge := &v5wire.Whoareyou{Nonce: p.Nonce} + crand.Read(challenge.IDNonce[:]) + if n := t.getNode(fromID); n != nil { + challenge.Node = n + challenge.RecordSeq = n.Seq() + } + t.sendResponse(fromID, fromAddr, challenge) +} + +var ( + errChallengeNoCall = errors.New("no matching call") + errChallengeTwice = errors.New("second handshake") +) + +// handleWhoareyou resends the active call as a handshake packet. +func (t *UDPv5) handleWhoareyou(p *v5wire.Whoareyou, fromID enode.ID, fromAddr *net.UDPAddr) { + c, err := t.matchWithCall(fromID, p.Nonce) + if err != nil { + t.log.Debug("Invalid "+p.Name(), "addr", fromAddr, "err", err) + return + } + + // Resend the call that was answered by WHOAREYOU. + t.log.Trace("<< "+p.Name(), "id", c.node.ID(), "addr", fromAddr) + c.handshakeCount++ + c.challenge = p + p.Node = c.node + t.sendCall(c) +} + +// matchWithCall checks whether a handshake attempt matches the active call. +func (t *UDPv5) matchWithCall(fromID enode.ID, nonce v5wire.Nonce) (*callV5, error) { + c := t.activeCallByAuth[nonce] + if c == nil { + return nil, errChallengeNoCall + } + if c.handshakeCount > 0 { + return nil, errChallengeTwice + } + return c, nil +} + +// handlePing sends a PONG response. +func (t *UDPv5) handlePing(p *v5wire.Ping, fromID enode.ID, fromAddr *net.UDPAddr) { + remoteIP := fromAddr.IP + // Handle IPv4 mapped IPv6 addresses in the + // event the local node is binded to an + // ipv6 interface. + if remoteIP.To4() != nil { + remoteIP = remoteIP.To4() + } + t.sendResponse(fromID, fromAddr, &v5wire.Pong{ + ReqID: p.ReqID, + ToIP: remoteIP, + ToPort: uint16(fromAddr.Port), + ENRSeq: t.localNode.Node().Seq(), + }) +} + +// handleFindnode returns nodes to the requester. +func (t *UDPv5) handleFindnode(p *v5wire.Findnode, fromID enode.ID, fromAddr *net.UDPAddr) { + nodes := t.collectTableNodes(fromAddr.IP, p.Distances, findnodeResultLimit) + for _, resp := range packNodes(p.ReqID, nodes) { + t.sendResponse(fromID, fromAddr, resp) + } +} + +// collectTableNodes creates a FINDNODE result set for the given distances. +func (t *UDPv5) collectTableNodes(rip net.IP, distances []uint, limit int) []*enode.Node { + var nodes []*enode.Node + var processed = make(map[uint]struct{}) + for _, dist := range distances { + // Reject duplicate / invalid distances. + _, seen := processed[dist] + if seen || dist > 256 { + continue + } + + // Get the nodes. + var bn []*enode.Node + if dist == 0 { + bn = []*enode.Node{t.Self()} + } else if dist <= 256 { + t.tab.mutex.Lock() + bn = unwrapNodes(t.tab.bucketAtDistance(int(dist)).entries) + t.tab.mutex.Unlock() + } + processed[dist] = struct{}{} + + // Apply some pre-checks to avoid sending invalid nodes. + for _, n := range bn { + // TODO livenessChecks > 1 + if netutil.CheckRelayIP(rip, n.IP()) != nil { + continue + } + nodes = append(nodes, n) + if len(nodes) >= limit { + return nodes + } + } + } + return nodes +} + +// packNodes creates NODES response packets for the given node list. +func packNodes(reqid []byte, nodes []*enode.Node) []*v5wire.Nodes { + if len(nodes) == 0 { + return []*v5wire.Nodes{{ReqID: reqid, Total: 1}} + } + + total := uint8(math.Ceil(float64(len(nodes)) / 3)) + var resp []*v5wire.Nodes + for len(nodes) > 0 { + p := &v5wire.Nodes{ReqID: reqid, Total: total} + items := min(nodesResponseItemLimit, len(nodes)) + for i := 0; i < items; i++ { + p.Nodes = append(p.Nodes, nodes[i].Record()) + } + nodes = nodes[items:] + resp = append(resp, p) + } + return resp +} + +// handleTalkRequest runs the talk request handler of the requested protocol. +func (t *UDPv5) handleTalkRequest(p *v5wire.TalkRequest, fromID enode.ID, fromAddr *net.UDPAddr) { + t.trlock.Lock() + handler := t.trhandlers[p.Protocol] + t.trlock.Unlock() + + var response []byte + if handler != nil { + response = handler(fromID, fromAddr, p.Message) + } + resp := &v5wire.TalkResponse{ReqID: p.ReqID, Message: response} + t.sendResponse(fromID, fromAddr, resp) +} diff --git a/p2p/discover/v5_udp_test.go b/p2p/discover/v5_udp_test.go new file mode 100644 index 00000000..30d610a4 --- /dev/null +++ b/p2p/discover/v5_udp_test.go @@ -0,0 +1,809 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "crypto/ecdsa" + "encoding/binary" + "fmt" + "math/rand" + "net" + "reflect" + "sort" + "testing" + "time" + + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/discover/v5wire" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" +) + +// Real sockets, real crypto: this test checks end-to-end connectivity for UDPv5. +func TestUDPv5_lookupE2E(t *testing.T) { + t.Parallel() + + const N = 5 + var nodes []*UDPv5 + for i := 0; i < N; i++ { + var cfg Config + if len(nodes) > 0 { + bn := nodes[0].Self() + cfg.Bootnodes = []*enode.Node{bn} + } + node := startLocalhostV5(t, cfg) + nodes = append(nodes, node) + defer node.Close() + } + last := nodes[N-1] + target := nodes[rand.Intn(N-2)].Self() + + // It is expected that all nodes can be found. + expectedResult := make([]*enode.Node, len(nodes)) + for i := range nodes { + expectedResult[i] = nodes[i].Self() + } + sort.Slice(expectedResult, func(i, j int) bool { + return enode.DistCmp(target.ID(), expectedResult[i].ID(), expectedResult[j].ID()) < 0 + }) + + // Do the lookup. + results := last.Lookup(target.ID()) + if err := checkNodesEqual(results, expectedResult); err != nil { + t.Fatalf("lookup returned wrong results: %v", err) + } +} + +func startLocalhostV5(t *testing.T, cfg Config) *UDPv5 { + cfg.PrivateKey = newkey() + db, _ := enode.OpenDB("") + ln := enode.NewLocalNode(db, cfg.PrivateKey) + + // Prefix logs with node ID. + lprefix := fmt.Sprintf("(%s)", ln.ID().TerminalString()) + lfmt := log.TerminalFormat(false) + cfg.Log = testlog.Logger(t, log.LvlTrace) + cfg.Log.SetHandler(log.FuncHandler(func(r *log.Record) error { + t.Logf("%s %s", lprefix, lfmt.Format(r)) + return nil + })) + + // Listen. + socket, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IP{127, 0, 0, 1}}) + if err != nil { + t.Fatal(err) + } + realaddr := socket.LocalAddr().(*net.UDPAddr) + ln.SetStaticIP(realaddr.IP) + ln.Set(enr.UDP(realaddr.Port)) + udp, err := ListenV5(socket, ln, cfg) + if err != nil { + t.Fatal(err) + } + return udp +} + +// This test checks that incoming PING calls are handled correctly. +func TestUDPv5_pingHandling(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + test.packetIn(&v5wire.Ping{ReqID: []byte("foo")}) + test.waitPacketOut(func(p *v5wire.Pong, addr *net.UDPAddr, _ v5wire.Nonce) { + if !bytes.Equal(p.ReqID, []byte("foo")) { + t.Error("wrong request ID in response:", p.ReqID) + } + if p.ENRSeq != test.table.self().Seq() { + t.Error("wrong ENR sequence number in response:", p.ENRSeq) + } + }) +} + +// This test checks that incoming 'unknown' packets trigger the handshake. +func TestUDPv5_unknownPacket(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + nonce := v5wire.Nonce{1, 2, 3} + check := func(p *v5wire.Whoareyou, wantSeq uint64) { + t.Helper() + if p.Nonce != nonce { + t.Error("wrong nonce in WHOAREYOU:", p.Nonce, nonce) + } + if p.IDNonce == ([16]byte{}) { + t.Error("all zero ID nonce") + } + if p.RecordSeq != wantSeq { + t.Errorf("wrong record seq %d in WHOAREYOU, want %d", p.RecordSeq, wantSeq) + } + } + + // Unknown packet from unknown node. + test.packetIn(&v5wire.Unknown{Nonce: nonce}) + test.waitPacketOut(func(p *v5wire.Whoareyou, addr *net.UDPAddr, _ v5wire.Nonce) { + check(p, 0) + }) + + // Make node known. + n := test.getNode(test.remotekey, test.remoteaddr).Node() + test.table.addSeenNode(wrapNode(n)) + + test.packetIn(&v5wire.Unknown{Nonce: nonce}) + test.waitPacketOut(func(p *v5wire.Whoareyou, addr *net.UDPAddr, _ v5wire.Nonce) { + check(p, n.Seq()) + }) +} + +// This test checks that incoming FINDNODE calls are handled correctly. +func TestUDPv5_findnodeHandling(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + // Create test nodes and insert them into the table. + nodes253 := nodesAtDistance(test.table.self().ID(), 253, 10) + nodes249 := nodesAtDistance(test.table.self().ID(), 249, 4) + nodes248 := nodesAtDistance(test.table.self().ID(), 248, 10) + fillTable(test.table, wrapNodes(nodes253)) + fillTable(test.table, wrapNodes(nodes249)) + fillTable(test.table, wrapNodes(nodes248)) + + // Requesting with distance zero should return the node's own record. + test.packetIn(&v5wire.Findnode{ReqID: []byte{0}, Distances: []uint{0}}) + test.expectNodes([]byte{0}, 1, []*enode.Node{test.udp.Self()}) + + // Requesting with distance > 256 shouldn't crash. + test.packetIn(&v5wire.Findnode{ReqID: []byte{1}, Distances: []uint{4234098}}) + test.expectNodes([]byte{1}, 1, nil) + + // Requesting with empty distance list shouldn't crash either. + test.packetIn(&v5wire.Findnode{ReqID: []byte{2}, Distances: []uint{}}) + test.expectNodes([]byte{2}, 1, nil) + + // This request gets no nodes because the corresponding bucket is empty. + test.packetIn(&v5wire.Findnode{ReqID: []byte{3}, Distances: []uint{254}}) + test.expectNodes([]byte{3}, 1, nil) + + // This request gets all the distance-253 nodes. + test.packetIn(&v5wire.Findnode{ReqID: []byte{4}, Distances: []uint{253}}) + test.expectNodes([]byte{4}, 4, nodes253) + + // This request gets all the distance-249 nodes and some more at 248 because + // the bucket at 249 is not full. + test.packetIn(&v5wire.Findnode{ReqID: []byte{5}, Distances: []uint{249, 248}}) + var nodes []*enode.Node + nodes = append(nodes, nodes249...) + nodes = append(nodes, nodes248[:10]...) + test.expectNodes([]byte{5}, 5, nodes) +} + +func (test *udpV5Test) expectNodes(wantReqID []byte, wantTotal uint8, wantNodes []*enode.Node) { + nodeSet := make(map[enode.ID]*enr.Record) + for _, n := range wantNodes { + nodeSet[n.ID()] = n.Record() + } + + for { + test.waitPacketOut(func(p *v5wire.Nodes, addr *net.UDPAddr, _ v5wire.Nonce) { + if !bytes.Equal(p.ReqID, wantReqID) { + test.t.Fatalf("wrong request ID %v in response, want %v", p.ReqID, wantReqID) + } + if len(p.Nodes) > 3 { + test.t.Fatalf("too many nodes in response") + } + if p.Total != wantTotal { + test.t.Fatalf("wrong total response count %d, want %d", p.Total, wantTotal) + } + for _, record := range p.Nodes { + n, _ := enode.New(enode.ValidSchemesForTesting, record) + want := nodeSet[n.ID()] + if want == nil { + test.t.Fatalf("unexpected node in response: %v", n) + } + if !reflect.DeepEqual(record, want) { + test.t.Fatalf("wrong record in response: %v", n) + } + delete(nodeSet, n.ID()) + } + }) + if len(nodeSet) == 0 { + return + } + } +} + +// This test checks that outgoing PING calls work. +func TestUDPv5_pingCall(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + remote := test.getNode(test.remotekey, test.remoteaddr).Node() + done := make(chan error, 1) + + // This ping times out. + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, _ v5wire.Nonce) {}) + if err := <-done; err != errTimeout { + t.Fatalf("want errTimeout, got %q", err) + } + + // This ping works. + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, _ v5wire.Nonce) { + test.packetInFrom(test.remotekey, test.remoteaddr, &v5wire.Pong{ReqID: p.ReqID}) + }) + if err := <-done; err != nil { + t.Fatal(err) + } + + // This ping gets a reply from the wrong endpoint. + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, _ v5wire.Nonce) { + wrongAddr := &net.UDPAddr{IP: net.IP{33, 44, 55, 22}, Port: 10101} + test.packetInFrom(test.remotekey, wrongAddr, &v5wire.Pong{ReqID: p.ReqID}) + }) + if err := <-done; err != errTimeout { + t.Fatalf("want errTimeout for reply from wrong IP, got %q", err) + } +} + +// This test checks that outgoing FINDNODE calls work and multiple NODES +// replies are aggregated. +func TestUDPv5_findnodeCall(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + // Launch the request: + var ( + distances = []uint{230} + remote = test.getNode(test.remotekey, test.remoteaddr).Node() + nodes = nodesAtDistance(remote.ID(), int(distances[0]), 8) + done = make(chan error, 1) + response []*enode.Node + ) + go func() { + var err error + response, err = test.udp.findnode(remote, distances) + done <- err + }() + + // Serve the responses: + test.waitPacketOut(func(p *v5wire.Findnode, addr *net.UDPAddr, _ v5wire.Nonce) { + if !reflect.DeepEqual(p.Distances, distances) { + t.Fatalf("wrong distances in request: %v", p.Distances) + } + test.packetIn(&v5wire.Nodes{ + ReqID: p.ReqID, + Total: 2, + Nodes: nodesToRecords(nodes[:4]), + }) + test.packetIn(&v5wire.Nodes{ + ReqID: p.ReqID, + Total: 2, + Nodes: nodesToRecords(nodes[4:]), + }) + }) + + // Check results: + if err := <-done; err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !reflect.DeepEqual(response, nodes) { + t.Fatalf("wrong nodes in response") + } + + // TODO: check invalid IPs + // TODO: check invalid/unsigned record +} + +// This test checks that pending calls are re-sent when a handshake happens. +func TestUDPv5_callResend(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + remote := test.getNode(test.remotekey, test.remoteaddr).Node() + done := make(chan error, 2) + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + + // Ping answered by WHOAREYOU. + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, nonce v5wire.Nonce) { + test.packetIn(&v5wire.Whoareyou{Nonce: nonce}) + }) + // Ping should be re-sent. + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, _ v5wire.Nonce) { + test.packetIn(&v5wire.Pong{ReqID: p.ReqID}) + }) + // Answer the other ping. + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, _ v5wire.Nonce) { + test.packetIn(&v5wire.Pong{ReqID: p.ReqID}) + }) + if err := <-done; err != nil { + t.Fatalf("unexpected ping error: %v", err) + } + if err := <-done; err != nil { + t.Fatalf("unexpected ping error: %v", err) + } +} + +// This test ensures we don't allow multiple rounds of WHOAREYOU for a single call. +func TestUDPv5_multipleHandshakeRounds(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + remote := test.getNode(test.remotekey, test.remoteaddr).Node() + done := make(chan error, 1) + go func() { + _, err := test.udp.ping(remote) + done <- err + }() + + // Ping answered by WHOAREYOU. + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, nonce v5wire.Nonce) { + test.packetIn(&v5wire.Whoareyou{Nonce: nonce}) + }) + // Ping answered by WHOAREYOU again. + test.waitPacketOut(func(p *v5wire.Ping, addr *net.UDPAddr, nonce v5wire.Nonce) { + test.packetIn(&v5wire.Whoareyou{Nonce: nonce}) + }) + if err := <-done; err != errTimeout { + t.Fatalf("unexpected ping error: %q", err) + } +} + +// This test checks that calls with n replies may take up to n * respTimeout. +func TestUDPv5_callTimeoutReset(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + // Launch the request: + var ( + distance = uint(230) + remote = test.getNode(test.remotekey, test.remoteaddr).Node() + nodes = nodesAtDistance(remote.ID(), int(distance), 8) + done = make(chan error, 1) + ) + go func() { + _, err := test.udp.findnode(remote, []uint{distance}) + done <- err + }() + + // Serve two responses, slowly. + test.waitPacketOut(func(p *v5wire.Findnode, addr *net.UDPAddr, _ v5wire.Nonce) { + time.Sleep(respTimeout - 50*time.Millisecond) + test.packetIn(&v5wire.Nodes{ + ReqID: p.ReqID, + Total: 2, + Nodes: nodesToRecords(nodes[:4]), + }) + + time.Sleep(respTimeout - 50*time.Millisecond) + test.packetIn(&v5wire.Nodes{ + ReqID: p.ReqID, + Total: 2, + Nodes: nodesToRecords(nodes[4:]), + }) + }) + if err := <-done; err != nil { + t.Fatalf("unexpected error: %q", err) + } +} + +// This test checks that TALKREQ calls the registered handler function. +func TestUDPv5_talkHandling(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + var recvMessage []byte + test.udp.RegisterTalkHandler("test", func(id enode.ID, addr *net.UDPAddr, message []byte) []byte { + recvMessage = message + return []byte("test response") + }) + + // Successful case: + test.packetIn(&v5wire.TalkRequest{ + ReqID: []byte("foo"), + Protocol: "test", + Message: []byte("test request"), + }) + test.waitPacketOut(func(p *v5wire.TalkResponse, addr *net.UDPAddr, _ v5wire.Nonce) { + if !bytes.Equal(p.ReqID, []byte("foo")) { + t.Error("wrong request ID in response:", p.ReqID) + } + if string(p.Message) != "test response" { + t.Errorf("wrong talk response message: %q", p.Message) + } + if string(recvMessage) != "test request" { + t.Errorf("wrong message received in handler: %q", recvMessage) + } + }) + + // Check that empty response is returned for unregistered protocols. + recvMessage = nil + test.packetIn(&v5wire.TalkRequest{ + ReqID: []byte("2"), + Protocol: "wrong", + Message: []byte("test request"), + }) + test.waitPacketOut(func(p *v5wire.TalkResponse, addr *net.UDPAddr, _ v5wire.Nonce) { + if !bytes.Equal(p.ReqID, []byte("2")) { + t.Error("wrong request ID in response:", p.ReqID) + } + if string(p.Message) != "" { + t.Errorf("wrong talk response message: %q", p.Message) + } + if recvMessage != nil { + t.Errorf("handler was called for wrong protocol: %q", recvMessage) + } + }) +} + +// This test checks that outgoing TALKREQ calls work. +func TestUDPv5_talkRequest(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + remote := test.getNode(test.remotekey, test.remoteaddr).Node() + done := make(chan error, 1) + + // This request times out. + go func() { + _, err := test.udp.TalkRequest(remote, "test", []byte("test request")) + done <- err + }() + test.waitPacketOut(func(p *v5wire.TalkRequest, addr *net.UDPAddr, _ v5wire.Nonce) {}) + if err := <-done; err != errTimeout { + t.Fatalf("want errTimeout, got %q", err) + } + + // This request works. + go func() { + _, err := test.udp.TalkRequest(remote, "test", []byte("test request")) + done <- err + }() + test.waitPacketOut(func(p *v5wire.TalkRequest, addr *net.UDPAddr, _ v5wire.Nonce) { + if p.Protocol != "test" { + t.Errorf("wrong protocol ID in talk request: %q", p.Protocol) + } + if string(p.Message) != "test request" { + t.Errorf("wrong message talk request: %q", p.Message) + } + test.packetInFrom(test.remotekey, test.remoteaddr, &v5wire.TalkResponse{ + ReqID: p.ReqID, + Message: []byte("test response"), + }) + }) + if err := <-done; err != nil { + t.Fatal(err) + } +} + +// This test checks that lookup works. +func TestUDPv5_lookup(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + + // Lookup on empty table returns no nodes. + if results := test.udp.Lookup(lookupTestnet.target.id()); len(results) > 0 { + t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results) + } + + // Ensure the tester knows all nodes in lookupTestnet by IP. + for d, nn := range lookupTestnet.dists { + for i, key := range nn { + n := lookupTestnet.node(d, i) + test.getNode(key, &net.UDPAddr{IP: n.IP(), Port: n.UDP()}) + } + } + + // Seed table with initial node. + initialNode := lookupTestnet.node(256, 0) + fillTable(test.table, []*node{wrapNode(initialNode)}) + + // Start the lookup. + resultC := make(chan []*enode.Node, 1) + go func() { + resultC <- test.udp.Lookup(lookupTestnet.target.id()) + test.close() + }() + + // Answer lookup packets. + asked := make(map[enode.ID]bool) + for done := false; !done; { + done = test.waitPacketOut(func(p v5wire.Packet, to *net.UDPAddr, _ v5wire.Nonce) { + recipient, key := lookupTestnet.nodeByAddr(to) + switch p := p.(type) { + case *v5wire.Ping: + test.packetInFrom(key, to, &v5wire.Pong{ReqID: p.ReqID}) + case *v5wire.Findnode: + if asked[recipient.ID()] { + t.Error("Asked node", recipient.ID(), "twice") + } + asked[recipient.ID()] = true + nodes := lookupTestnet.neighborsAtDistances(recipient, p.Distances, 16) + t.Logf("Got FINDNODE for %v, returning %d nodes", p.Distances, len(nodes)) + for _, resp := range packNodes(p.ReqID, nodes) { + test.packetInFrom(key, to, resp) + } + } + }) + } + + // Verify result nodes. + results := <-resultC + checkLookupResults(t, lookupTestnet, results) +} + +// This test checks the local node can be utilised to set key-values. +func TestUDPv5_LocalNode(t *testing.T) { + t.Parallel() + var cfg Config + node := startLocalhostV5(t, cfg) + defer node.Close() + localNd := node.LocalNode() + + // set value in node's local record + testVal := [4]byte{'A', 'B', 'C', 'D'} + localNd.Set(enr.WithEntry("testing", &testVal)) + + // retrieve the value from self to make sure it matches. + outputVal := [4]byte{} + if err := node.Self().Load(enr.WithEntry("testing", &outputVal)); err != nil { + t.Errorf("Could not load value from record: %v", err) + } + if testVal != outputVal { + t.Errorf("Wanted %#x to be retrieved from the record but instead got %#x", testVal, outputVal) + } +} + +func TestUDPv5_PingWithIPV4MappedAddress(t *testing.T) { + t.Parallel() + test := newUDPV5Test(t) + defer test.close() + + rawIP := net.IPv4(0xFF, 0x12, 0x33, 0xE5) + test.remoteaddr = &net.UDPAddr{ + IP: rawIP.To16(), + Port: 0, + } + remote := test.getNode(test.remotekey, test.remoteaddr).Node() + done := make(chan struct{}, 1) + + // This handler will truncate the ipv4-mapped in ipv6 address. + go func() { + test.udp.handlePing(&v5wire.Ping{ENRSeq: 1}, remote.ID(), test.remoteaddr) + done <- struct{}{} + }() + test.waitPacketOut(func(p *v5wire.Pong, addr *net.UDPAddr, _ v5wire.Nonce) { + if len(p.ToIP) == net.IPv6len { + t.Error("Received untruncated ip address") + } + if len(p.ToIP) != net.IPv4len { + t.Errorf("Received ip address with incorrect length: %d", len(p.ToIP)) + } + if !p.ToIP.Equal(rawIP) { + t.Errorf("Received incorrect ip address: wanted %s but received %s", rawIP.String(), p.ToIP.String()) + } + }) + <-done +} + +// udpV5Test is the framework for all tests above. +// It runs the UDPv5 transport on a virtual socket and allows testing outgoing packets. +type udpV5Test struct { + t *testing.T + pipe *dgramPipe + table *Table + db *enode.DB + udp *UDPv5 + localkey, remotekey *ecdsa.PrivateKey + remoteaddr *net.UDPAddr + nodesByID map[enode.ID]*enode.LocalNode + nodesByIP map[string]*enode.LocalNode +} + +// testCodec is the packet encoding used by protocol tests. This codec does not perform encryption. +type testCodec struct { + test *udpV5Test + id enode.ID + ctr uint64 +} + +type testCodecFrame struct { + NodeID enode.ID + AuthTag v5wire.Nonce + Ptype byte + Packet rlp.RawValue +} + +func (c *testCodec) Encode(toID enode.ID, addr string, p v5wire.Packet, _ *v5wire.Whoareyou) ([]byte, v5wire.Nonce, error) { + c.ctr++ + var authTag v5wire.Nonce + binary.BigEndian.PutUint64(authTag[:], c.ctr) + + penc, _ := rlp.EncodeToBytes(p) + frame, err := rlp.EncodeToBytes(testCodecFrame{c.id, authTag, p.Kind(), penc}) + return frame, authTag, err +} + +func (c *testCodec) Decode(input []byte, addr string) (enode.ID, *enode.Node, v5wire.Packet, error) { + frame, p, err := c.decodeFrame(input) + if err != nil { + return enode.ID{}, nil, nil, err + } + return frame.NodeID, nil, p, nil +} + +func (c *testCodec) decodeFrame(input []byte) (frame testCodecFrame, p v5wire.Packet, err error) { + if err = rlp.DecodeBytes(input, &frame); err != nil { + return frame, nil, fmt.Errorf("invalid frame: %v", err) + } + switch frame.Ptype { + case v5wire.UnknownPacket: + dec := new(v5wire.Unknown) + err = rlp.DecodeBytes(frame.Packet, &dec) + p = dec + case v5wire.WhoareyouPacket: + dec := new(v5wire.Whoareyou) + err = rlp.DecodeBytes(frame.Packet, &dec) + p = dec + default: + p, err = v5wire.DecodeMessage(frame.Ptype, frame.Packet) + } + return frame, p, err +} + +func newUDPV5Test(t *testing.T) *udpV5Test { + test := &udpV5Test{ + t: t, + pipe: newpipe(), + localkey: newkey(), + remotekey: newkey(), + remoteaddr: &net.UDPAddr{IP: net.IP{10, 0, 1, 99}, Port: 30303}, + nodesByID: make(map[enode.ID]*enode.LocalNode), + nodesByIP: make(map[string]*enode.LocalNode), + } + test.db, _ = enode.OpenDB("") + ln := enode.NewLocalNode(test.db, test.localkey) + ln.SetStaticIP(net.IP{10, 0, 0, 1}) + ln.Set(enr.UDP(30303)) + test.udp, _ = ListenV5(test.pipe, ln, Config{ + PrivateKey: test.localkey, + Log: testlog.Logger(t, log.LvlTrace), + ValidSchemes: enode.ValidSchemesForTesting, + }) + test.udp.codec = &testCodec{test: test, id: ln.ID()} + test.table = test.udp.tab + test.nodesByID[ln.ID()] = ln + // Wait for initial refresh so the table doesn't send unexpected findnode. + <-test.table.initDone + return test +} + +// handles a packet as if it had been sent to the transport. +func (test *udpV5Test) packetIn(packet v5wire.Packet) { + test.t.Helper() + test.packetInFrom(test.remotekey, test.remoteaddr, packet) +} + +// handles a packet as if it had been sent to the transport by the key/endpoint. +func (test *udpV5Test) packetInFrom(key *ecdsa.PrivateKey, addr *net.UDPAddr, packet v5wire.Packet) { + test.t.Helper() + + ln := test.getNode(key, addr) + codec := &testCodec{test: test, id: ln.ID()} + enc, _, err := codec.Encode(test.udp.Self().ID(), addr.String(), packet, nil) + if err != nil { + test.t.Errorf("%s encode error: %v", packet.Name(), err) + } + if test.udp.dispatchReadPacket(addr, enc) { + <-test.udp.readNextCh // unblock UDPv5.dispatch + } +} + +// getNode ensures the test knows about a node at the given endpoint. +func (test *udpV5Test) getNode(key *ecdsa.PrivateKey, addr *net.UDPAddr) *enode.LocalNode { + id := encodePubkey(&key.PublicKey).id() + ln := test.nodesByID[id] + if ln == nil { + db, _ := enode.OpenDB("") + ln = enode.NewLocalNode(db, key) + ln.SetStaticIP(addr.IP) + ln.Set(enr.UDP(addr.Port)) + test.nodesByID[id] = ln + } + test.nodesByIP[string(addr.IP)] = ln + return ln +} + +// waitPacketOut waits for the next output packet and handles it using the given 'validate' +// function. The function must be of type func (X, *net.UDPAddr, v5wire.Nonce) where X is +// assignable to packetV5. +func (test *udpV5Test) waitPacketOut(validate interface{}) (closed bool) { + test.t.Helper() + + fn := reflect.ValueOf(validate) + exptype := fn.Type().In(0) + + dgram, err := test.pipe.receive() + if err == errClosed { + return true + } + if err == errTimeout { + test.t.Fatalf("timed out waiting for %v", exptype) + return false + } + ln := test.nodesByIP[string(dgram.to.IP)] + if ln == nil { + test.t.Fatalf("attempt to send to non-existing node %v", &dgram.to) + return false + } + codec := &testCodec{test: test, id: ln.ID()} + frame, p, err := codec.decodeFrame(dgram.data) + if err != nil { + test.t.Errorf("sent packet decode error: %v", err) + return false + } + if !reflect.TypeOf(p).AssignableTo(exptype) { + test.t.Errorf("sent packet type mismatch, got: %v, want: %v", reflect.TypeOf(p), exptype) + return false + } + fn.Call([]reflect.Value{reflect.ValueOf(p), reflect.ValueOf(&dgram.to), reflect.ValueOf(frame.AuthTag)}) + return false +} + +func (test *udpV5Test) close() { + test.t.Helper() + + test.udp.Close() + test.db.Close() + for id, n := range test.nodesByID { + if id != test.udp.Self().ID() { + n.Database().Close() + } + } + if len(test.pipe.queue) != 0 { + test.t.Fatalf("%d unmatched UDP packets in queue", len(test.pipe.queue)) + } +} diff --git a/p2p/discover/v5wire/crypto.go b/p2p/discover/v5wire/crypto.go new file mode 100644 index 00000000..fc0a0ede --- /dev/null +++ b/p2p/discover/v5wire/crypto.go @@ -0,0 +1,180 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/ecdsa" + "crypto/elliptic" + "errors" + "fmt" + "hash" + + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" + "golang.org/x/crypto/hkdf" +) + +const ( + // Encryption/authentication parameters. + aesKeySize = 16 + gcmNonceSize = 12 +) + +// Nonce represents a nonce used for AES/GCM. +type Nonce [gcmNonceSize]byte + +// EncodePubkey encodes a public key. +func EncodePubkey(key *ecdsa.PublicKey) []byte { + switch key.Curve { + case crypto.S256(): + return crypto.CompressPubkey(key) + default: + panic("unsupported curve " + key.Curve.Params().Name + " in EncodePubkey") + } +} + +// DecodePubkey decodes a public key in compressed format. +func DecodePubkey(curve elliptic.Curve, e []byte) (*ecdsa.PublicKey, error) { + switch curve { + case crypto.S256(): + if len(e) != 33 { + return nil, errors.New("wrong size public key data") + } + return crypto.DecompressPubkey(e) + default: + return nil, fmt.Errorf("unsupported curve %s in DecodePubkey", curve.Params().Name) + } +} + +// idNonceHash computes the ID signature hash used in the handshake. +func idNonceHash(h hash.Hash, challenge, ephkey []byte, destID enode.ID) []byte { + h.Reset() + h.Write([]byte("discovery v5 identity proof")) + h.Write(challenge) + h.Write(ephkey) + h.Write(destID[:]) + return h.Sum(nil) +} + +// makeIDSignature creates the ID nonce signature. +func makeIDSignature(hash hash.Hash, key *ecdsa.PrivateKey, challenge, ephkey []byte, destID enode.ID) ([]byte, error) { + input := idNonceHash(hash, challenge, ephkey, destID) + switch key.Curve { + case crypto.S256(): + idsig, err := crypto.Sign(input, key) + if err != nil { + return nil, err + } + return idsig[:len(idsig)-1], nil // remove recovery ID + default: + return nil, fmt.Errorf("unsupported curve %s", key.Curve.Params().Name) + } +} + +// s256raw is an unparsed secp256k1 public key ENR entry. +type s256raw []byte + +func (s256raw) ENRKey() string { return "secp256k1" } + +// verifyIDSignature checks that signature over idnonce was made by the given node. +func verifyIDSignature(hash hash.Hash, sig []byte, n *enode.Node, challenge, ephkey []byte, destID enode.ID) error { + switch idscheme := n.Record().IdentityScheme(); idscheme { + case "v4": + var pubkey s256raw + if n.Load(&pubkey) != nil { + return errors.New("no secp256k1 public key in record") + } + input := idNonceHash(hash, challenge, ephkey, destID) + if !crypto.VerifySignature(pubkey, input, sig) { + return errInvalidNonceSig + } + return nil + default: + return fmt.Errorf("can't verify ID nonce signature against scheme %q", idscheme) + } +} + +type hashFn func() hash.Hash + +// deriveKeys creates the session keys. +func deriveKeys(hash hashFn, priv *ecdsa.PrivateKey, pub *ecdsa.PublicKey, n1, n2 enode.ID, challenge []byte) *session { + const text = "discovery v5 key agreement" + var info = make([]byte, 0, len(text)+len(n1)+len(n2)) + info = append(info, text...) + info = append(info, n1[:]...) + info = append(info, n2[:]...) + + eph := ecdh(priv, pub) + if eph == nil { + return nil + } + kdf := hkdf.New(hash, eph, challenge, info) + sec := session{writeKey: make([]byte, aesKeySize), readKey: make([]byte, aesKeySize)} + kdf.Read(sec.writeKey) + kdf.Read(sec.readKey) + for i := range eph { + eph[i] = 0 + } + return &sec +} + +// ecdh creates a shared secret. +func ecdh(privkey *ecdsa.PrivateKey, pubkey *ecdsa.PublicKey) []byte { + secX, secY := pubkey.ScalarMult(pubkey.X, pubkey.Y, privkey.D.Bytes()) + if secX == nil { + return nil + } + sec := make([]byte, 33) + sec[0] = 0x02 | byte(secY.Bit(0)) + math.ReadBits(secX, sec[1:]) + return sec +} + +// encryptGCM encrypts pt using AES-GCM with the given key and nonce. The ciphertext is +// appended to dest, which must not overlap with plaintext. The resulting ciphertext is 16 +// bytes longer than plaintext because it contains an authentication tag. +func encryptGCM(dest, key, nonce, plaintext, authData []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + panic(fmt.Errorf("can't create block cipher: %v", err)) + } + aesgcm, err := cipher.NewGCMWithNonceSize(block, gcmNonceSize) + if err != nil { + panic(fmt.Errorf("can't create GCM: %v", err)) + } + return aesgcm.Seal(dest, nonce, plaintext, authData), nil +} + +// decryptGCM decrypts ct using AES-GCM with the given key and nonce. +func decryptGCM(key, nonce, ct, authData []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, fmt.Errorf("can't create block cipher: %v", err) + } + if len(nonce) != gcmNonceSize { + return nil, fmt.Errorf("invalid GCM nonce size: %d", len(nonce)) + } + aesgcm, err := cipher.NewGCMWithNonceSize(block, gcmNonceSize) + if err != nil { + return nil, fmt.Errorf("can't create GCM: %v", err) + } + pt := make([]byte, 0, len(ct)) + return aesgcm.Open(pt, nonce, ct, authData) +} diff --git a/p2p/discover/v5wire/crypto_test.go b/p2p/discover/v5wire/crypto_test.go new file mode 100644 index 00000000..72169b43 --- /dev/null +++ b/p2p/discover/v5wire/crypto_test.go @@ -0,0 +1,124 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/sha256" + "reflect" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestVector_ECDH(t *testing.T) { + var ( + staticKey = hexPrivkey("0xfb757dc581730490a1d7a00deea65e9b1936924caaea8f44d476014856b68736") + publicKey = hexPubkey(crypto.S256(), "0x039961e4c2356d61bedb83052c115d311acb3a96f5777296dcf297351130266231") + want = hexutil.MustDecode("0x033b11a2a1f214567e1537ce5e509ffd9b21373247f2a3ff6841f4976f53165e7e") + ) + result := ecdh(staticKey, publicKey) + check(t, "shared-secret", result, want) +} + +func TestVector_KDF(t *testing.T) { + var ( + ephKey = hexPrivkey("0xfb757dc581730490a1d7a00deea65e9b1936924caaea8f44d476014856b68736") + cdata = hexutil.MustDecode("0x000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000000") + net = newHandshakeTest() + ) + defer net.close() + + destKey := &testKeyB.PublicKey + s := deriveKeys(sha256.New, ephKey, destKey, net.nodeA.id(), net.nodeB.id(), cdata) + t.Logf("ephemeral-key = %#x", ephKey.D) + t.Logf("dest-pubkey = %#x", EncodePubkey(destKey)) + t.Logf("node-id-a = %#x", net.nodeA.id().Bytes()) + t.Logf("node-id-b = %#x", net.nodeB.id().Bytes()) + t.Logf("challenge-data = %#x", cdata) + check(t, "initiator-key", s.writeKey, hexutil.MustDecode("0xdccc82d81bd610f4f76d3ebe97a40571")) + check(t, "recipient-key", s.readKey, hexutil.MustDecode("0xac74bb8773749920b0d3a8881c173ec5")) +} + +func TestVector_IDSignature(t *testing.T) { + var ( + key = hexPrivkey("0xfb757dc581730490a1d7a00deea65e9b1936924caaea8f44d476014856b68736") + destID = enode.HexID("0xbbbb9d047f0488c0b5a93c1c3f2d8bafc7c8ff337024a55434a0d0555de64db9") + ephkey = hexutil.MustDecode("0x039961e4c2356d61bedb83052c115d311acb3a96f5777296dcf297351130266231") + cdata = hexutil.MustDecode("0x000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000000") + ) + + sig, err := makeIDSignature(sha256.New(), key, cdata, ephkey, destID) + if err != nil { + t.Fatal(err) + } + t.Logf("static-key = %#x", key.D) + t.Logf("challenge-data = %#x", cdata) + t.Logf("ephemeral-pubkey = %#x", ephkey) + t.Logf("node-id-B = %#x", destID.Bytes()) + expected := "0x94852a1e2318c4e5e9d422c98eaf19d1d90d876b29cd06ca7cb7546d0fff7b484fe86c09a064fe72bdbef73ba8e9c34df0cd2b53e9d65528c2c7f336d5dfc6e6" + check(t, "id-signature", sig, hexutil.MustDecode(expected)) +} + +func TestDeriveKeys(t *testing.T) { + t.Parallel() + + var ( + n1 = enode.ID{1} + n2 = enode.ID{2} + cdata = []byte{1, 2, 3, 4} + ) + sec1 := deriveKeys(sha256.New, testKeyA, &testKeyB.PublicKey, n1, n2, cdata) + sec2 := deriveKeys(sha256.New, testKeyB, &testKeyA.PublicKey, n1, n2, cdata) + if sec1 == nil || sec2 == nil { + t.Fatal("key agreement failed") + } + if !reflect.DeepEqual(sec1, sec2) { + t.Fatalf("keys not equal:\n %+v\n %+v", sec1, sec2) + } +} + +func check(t *testing.T, what string, x, y []byte) { + t.Helper() + + if !bytes.Equal(x, y) { + t.Errorf("wrong %s: %#x != %#x", what, x, y) + } else { + t.Logf("%s = %#x", what, x) + } +} + +func hexPrivkey(input string) *ecdsa.PrivateKey { + key, err := crypto.HexToECDSA(strings.TrimPrefix(input, "0x")) + if err != nil { + panic(err) + } + return key +} + +func hexPubkey(curve elliptic.Curve, input string) *ecdsa.PublicKey { + key, err := DecodePubkey(curve, hexutil.MustDecode(input)) + if err != nil { + panic(err) + } + return key +} diff --git a/p2p/discover/v5wire/encoding.go b/p2p/discover/v5wire/encoding.go new file mode 100644 index 00000000..45f2f088 --- /dev/null +++ b/p2p/discover/v5wire/encoding.go @@ -0,0 +1,648 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/ecdsa" + crand "crypto/rand" + "crypto/sha256" + "encoding/binary" + "errors" + "fmt" + "hash" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" +) + +// TODO concurrent WHOAREYOU tie-breaker +// TODO rehandshake after X packets + +// Header represents a packet header. +type Header struct { + IV [sizeofMaskingIV]byte + StaticHeader + AuthData []byte + + src enode.ID // used by decoder +} + +// StaticHeader contains the static fields of a packet header. +type StaticHeader struct { + ProtocolID [6]byte + Version uint16 + Flag byte + Nonce Nonce + AuthSize uint16 +} + +// Authdata layouts. +type ( + whoareyouAuthData struct { + IDNonce [16]byte // ID proof data + RecordSeq uint64 // highest known ENR sequence of requester + } + + handshakeAuthData struct { + h struct { + SrcID enode.ID + SigSize byte // ignature data + PubkeySize byte // offset of + } + // Trailing variable-size data. + signature, pubkey, record []byte + } + + messageAuthData struct { + SrcID enode.ID + } +) + +// Packet header flag values. +const ( + flagMessage = iota + flagWhoareyou + flagHandshake +) + +// Protocol constants. +const ( + version = 1 + minVersion = 1 + sizeofMaskingIV = 16 + + minMessageSize = 48 // this refers to data after static headers + randomPacketMsgSize = 20 +) + +var protocolID = [6]byte{'d', 'i', 's', 'c', 'v', '5'} + +// Errors. +var ( + errTooShort = errors.New("packet too short") + errInvalidHeader = errors.New("invalid packet header") + errInvalidFlag = errors.New("invalid flag value in header") + errMinVersion = errors.New("version of packet header below minimum") + errMsgTooShort = errors.New("message/handshake packet below minimum size") + errAuthSize = errors.New("declared auth size is beyond packet length") + errUnexpectedHandshake = errors.New("unexpected auth response, not in handshake") + errInvalidAuthKey = errors.New("invalid ephemeral pubkey") + errNoRecord = errors.New("expected ENR in handshake but none sent") + errInvalidNonceSig = errors.New("invalid ID nonce signature") + errMessageTooShort = errors.New("message contains no data") + errMessageDecrypt = errors.New("cannot decrypt message") +) + +// Public errors. +var ( + ErrInvalidReqID = errors.New("request ID larger than 8 bytes") +) + +// Packet sizes. +var ( + sizeofStaticHeader = binary.Size(StaticHeader{}) + sizeofWhoareyouAuthData = binary.Size(whoareyouAuthData{}) + sizeofHandshakeAuthData = binary.Size(handshakeAuthData{}.h) + sizeofMessageAuthData = binary.Size(messageAuthData{}) + sizeofStaticPacketData = sizeofMaskingIV + sizeofStaticHeader +) + +// Codec encodes and decodes Discovery v5 packets. +// This type is not safe for concurrent use. +type Codec struct { + sha256 hash.Hash + localnode *enode.LocalNode + privkey *ecdsa.PrivateKey + sc *SessionCache + + // encoder buffers + buf bytes.Buffer // whole packet + headbuf bytes.Buffer // packet header + msgbuf bytes.Buffer // message RLP plaintext + msgctbuf []byte // message data ciphertext + + // decoder buffer + reader bytes.Reader +} + +// NewCodec creates a wire codec. +func NewCodec(ln *enode.LocalNode, key *ecdsa.PrivateKey, clock mclock.Clock) *Codec { + c := &Codec{ + sha256: sha256.New(), + localnode: ln, + privkey: key, + sc: NewSessionCache(1024, clock), + } + return c +} + +// Encode encodes a packet to a node. 'id' and 'addr' specify the destination node. The +// 'challenge' parameter should be the most recently received WHOAREYOU packet from that +// node. +func (c *Codec) Encode(id enode.ID, addr string, packet Packet, challenge *Whoareyou) ([]byte, Nonce, error) { + // Create the packet header. + var ( + head Header + session *session + msgData []byte + err error + ) + switch { + case packet.Kind() == WhoareyouPacket: + head, err = c.encodeWhoareyou(id, packet.(*Whoareyou)) + case challenge != nil: + // We have an unanswered challenge, send handshake. + head, session, err = c.encodeHandshakeHeader(id, addr, challenge) + default: + session = c.sc.session(id, addr) + if session != nil { + // There is a session, use it. + head, err = c.encodeMessageHeader(id, session) + } else { + // No keys, send random data to kick off the handshake. + head, msgData, err = c.encodeRandom(id) + } + } + if err != nil { + return nil, Nonce{}, err + } + + // Generate masking IV. + if err := c.sc.maskingIVGen(head.IV[:]); err != nil { + return nil, Nonce{}, fmt.Errorf("can't generate masking IV: %v", err) + } + + // Encode header data. + c.writeHeaders(&head) + + // Store sent WHOAREYOU challenges. + if challenge, ok := packet.(*Whoareyou); ok { + challenge.ChallengeData = bytesCopy(&c.buf) + c.sc.storeSentHandshake(id, addr, challenge) + } else if msgData == nil { + headerData := c.buf.Bytes() + msgData, err = c.encryptMessage(session, packet, &head, headerData) + if err != nil { + return nil, Nonce{}, err + } + } + + enc, err := c.EncodeRaw(id, head, msgData) + return enc, head.Nonce, err +} + +// EncodeRaw encodes a packet with the given header. +func (c *Codec) EncodeRaw(id enode.ID, head Header, msgdata []byte) ([]byte, error) { + c.writeHeaders(&head) + + // Apply masking. + masked := c.buf.Bytes()[sizeofMaskingIV:] + mask := head.mask(id) + mask.XORKeyStream(masked[:], masked[:]) + + // Write message data. + c.buf.Write(msgdata) + return c.buf.Bytes(), nil +} + +func (c *Codec) writeHeaders(head *Header) { + c.buf.Reset() + c.buf.Write(head.IV[:]) + binary.Write(&c.buf, binary.BigEndian, &head.StaticHeader) + c.buf.Write(head.AuthData) +} + +// makeHeader creates a packet header. +func (c *Codec) makeHeader(toID enode.ID, flag byte, authsizeExtra int) Header { + var authsize int + switch flag { + case flagMessage: + authsize = sizeofMessageAuthData + case flagWhoareyou: + authsize = sizeofWhoareyouAuthData + case flagHandshake: + authsize = sizeofHandshakeAuthData + default: + panic(fmt.Errorf("BUG: invalid packet header flag %x", flag)) + } + authsize += authsizeExtra + if authsize > int(^uint16(0)) { + panic(fmt.Errorf("BUG: auth size %d overflows uint16", authsize)) + } + return Header{ + StaticHeader: StaticHeader{ + ProtocolID: protocolID, + Version: version, + Flag: flag, + AuthSize: uint16(authsize), + }, + } +} + +// encodeRandom encodes a packet with random content. +func (c *Codec) encodeRandom(toID enode.ID) (Header, []byte, error) { + head := c.makeHeader(toID, flagMessage, 0) + + // Encode auth data. + auth := messageAuthData{SrcID: c.localnode.ID()} + if _, err := crand.Read(head.Nonce[:]); err != nil { + return head, nil, fmt.Errorf("can't get random data: %v", err) + } + c.headbuf.Reset() + binary.Write(&c.headbuf, binary.BigEndian, auth) + head.AuthData = c.headbuf.Bytes() + + // Fill message ciphertext buffer with random bytes. + c.msgctbuf = append(c.msgctbuf[:0], make([]byte, randomPacketMsgSize)...) + crand.Read(c.msgctbuf) + return head, c.msgctbuf, nil +} + +// encodeWhoareyou encodes a WHOAREYOU packet. +func (c *Codec) encodeWhoareyou(toID enode.ID, packet *Whoareyou) (Header, error) { + // Sanity check node field to catch misbehaving callers. + if packet.RecordSeq > 0 && packet.Node == nil { + panic("BUG: missing node in whoareyou with non-zero seq") + } + + // Create header. + head := c.makeHeader(toID, flagWhoareyou, 0) + head.AuthData = bytesCopy(&c.buf) + head.Nonce = packet.Nonce + + // Encode auth data. + auth := &whoareyouAuthData{ + IDNonce: packet.IDNonce, + RecordSeq: packet.RecordSeq, + } + c.headbuf.Reset() + binary.Write(&c.headbuf, binary.BigEndian, auth) + head.AuthData = c.headbuf.Bytes() + return head, nil +} + +// encodeHandshakeHeader encodes the handshake message packet header. +func (c *Codec) encodeHandshakeHeader(toID enode.ID, addr string, challenge *Whoareyou) (Header, *session, error) { + // Ensure calling code sets challenge.node. + if challenge.Node == nil { + panic("BUG: missing challenge.Node in encode") + } + + // Generate new secrets. + auth, session, err := c.makeHandshakeAuth(toID, addr, challenge) + if err != nil { + return Header{}, nil, err + } + + // Generate nonce for message. + nonce, err := c.sc.nextNonce(session) + if err != nil { + return Header{}, nil, fmt.Errorf("can't generate nonce: %v", err) + } + + // TODO: this should happen when the first authenticated message is received + c.sc.storeNewSession(toID, addr, session) + + // Encode the auth header. + var ( + authsizeExtra = len(auth.pubkey) + len(auth.signature) + len(auth.record) + head = c.makeHeader(toID, flagHandshake, authsizeExtra) + ) + c.headbuf.Reset() + binary.Write(&c.headbuf, binary.BigEndian, &auth.h) + c.headbuf.Write(auth.signature) + c.headbuf.Write(auth.pubkey) + c.headbuf.Write(auth.record) + head.AuthData = c.headbuf.Bytes() + head.Nonce = nonce + return head, session, err +} + +// makeHandshakeAuth creates the auth header on a request packet following WHOAREYOU. +func (c *Codec) makeHandshakeAuth(toID enode.ID, addr string, challenge *Whoareyou) (*handshakeAuthData, *session, error) { + auth := new(handshakeAuthData) + auth.h.SrcID = c.localnode.ID() + + // Create the ephemeral key. This needs to be first because the + // key is part of the ID nonce signature. + var remotePubkey = new(ecdsa.PublicKey) + if err := challenge.Node.Load((*enode.Secp256k1)(remotePubkey)); err != nil { + return nil, nil, fmt.Errorf("can't find secp256k1 key for recipient") + } + ephkey, err := c.sc.ephemeralKeyGen() + if err != nil { + return nil, nil, fmt.Errorf("can't generate ephemeral key") + } + ephpubkey := EncodePubkey(&ephkey.PublicKey) + auth.pubkey = ephpubkey[:] + auth.h.PubkeySize = byte(len(auth.pubkey)) + + // Add ID nonce signature to response. + cdata := challenge.ChallengeData + idsig, err := makeIDSignature(c.sha256, c.privkey, cdata, ephpubkey[:], toID) + if err != nil { + return nil, nil, fmt.Errorf("can't sign: %v", err) + } + auth.signature = idsig + auth.h.SigSize = byte(len(auth.signature)) + + // Add our record to response if it's newer than what remote side has. + ln := c.localnode.Node() + if challenge.RecordSeq < ln.Seq() { + auth.record, _ = rlp.EncodeToBytes(ln.Record()) + } + + // Create session keys. + sec := deriveKeys(sha256.New, ephkey, remotePubkey, c.localnode.ID(), challenge.Node.ID(), cdata) + if sec == nil { + return nil, nil, fmt.Errorf("key derivation failed") + } + return auth, sec, err +} + +// encodeMessageHeader encodes an encrypted message packet. +func (c *Codec) encodeMessageHeader(toID enode.ID, s *session) (Header, error) { + head := c.makeHeader(toID, flagMessage, 0) + + // Create the header. + nonce, err := c.sc.nextNonce(s) + if err != nil { + return Header{}, fmt.Errorf("can't generate nonce: %v", err) + } + auth := messageAuthData{SrcID: c.localnode.ID()} + c.buf.Reset() + binary.Write(&c.buf, binary.BigEndian, &auth) + head.AuthData = bytesCopy(&c.buf) + head.Nonce = nonce + return head, err +} + +func (c *Codec) encryptMessage(s *session, p Packet, head *Header, headerData []byte) ([]byte, error) { + // Encode message plaintext. + c.msgbuf.Reset() + c.msgbuf.WriteByte(p.Kind()) + if err := rlp.Encode(&c.msgbuf, p); err != nil { + return nil, err + } + messagePT := c.msgbuf.Bytes() + + // Encrypt into message ciphertext buffer. + messageCT, err := encryptGCM(c.msgctbuf[:0], s.writeKey, head.Nonce[:], messagePT, headerData) + if err == nil { + c.msgctbuf = messageCT + } + return messageCT, err +} + +// Decode decodes a discovery packet. +func (c *Codec) Decode(input []byte, addr string) (src enode.ID, n *enode.Node, p Packet, err error) { + // Unmask the static header. + if len(input) < sizeofStaticPacketData { + return enode.ID{}, nil, nil, errTooShort + } + var head Header + copy(head.IV[:], input[:sizeofMaskingIV]) + mask := head.mask(c.localnode.ID()) + staticHeader := input[sizeofMaskingIV:sizeofStaticPacketData] + mask.XORKeyStream(staticHeader, staticHeader) + + // Decode and verify the static header. + c.reader.Reset(staticHeader) + binary.Read(&c.reader, binary.BigEndian, &head.StaticHeader) + remainingInput := len(input) - sizeofStaticPacketData + if err := head.checkValid(remainingInput); err != nil { + return enode.ID{}, nil, nil, err + } + + // Unmask auth data. + authDataEnd := sizeofStaticPacketData + int(head.AuthSize) + authData := input[sizeofStaticPacketData:authDataEnd] + mask.XORKeyStream(authData, authData) + head.AuthData = authData + + // Delete timed-out handshakes. This must happen before decoding to avoid + // processing the same handshake twice. + c.sc.handshakeGC() + + // Decode auth part and message. + headerData := input[:authDataEnd] + msgData := input[authDataEnd:] + switch head.Flag { + case flagWhoareyou: + p, err = c.decodeWhoareyou(&head, headerData) + case flagHandshake: + n, p, err = c.decodeHandshakeMessage(addr, &head, headerData, msgData) + case flagMessage: + p, err = c.decodeMessage(addr, &head, headerData, msgData) + default: + err = errInvalidFlag + } + return head.src, n, p, err +} + +// decodeWhoareyou reads packet data after the header as a WHOAREYOU packet. +func (c *Codec) decodeWhoareyou(head *Header, headerData []byte) (Packet, error) { + if len(head.AuthData) != sizeofWhoareyouAuthData { + return nil, fmt.Errorf("invalid auth size %d for WHOAREYOU", len(head.AuthData)) + } + var auth whoareyouAuthData + c.reader.Reset(head.AuthData) + binary.Read(&c.reader, binary.BigEndian, &auth) + p := &Whoareyou{ + Nonce: head.Nonce, + IDNonce: auth.IDNonce, + RecordSeq: auth.RecordSeq, + ChallengeData: make([]byte, len(headerData)), + } + copy(p.ChallengeData, headerData) + return p, nil +} + +func (c *Codec) decodeHandshakeMessage(fromAddr string, head *Header, headerData, msgData []byte) (n *enode.Node, p Packet, err error) { + node, auth, session, err := c.decodeHandshake(fromAddr, head) + if err != nil { + c.sc.deleteHandshake(auth.h.SrcID, fromAddr) + return nil, nil, err + } + + // Decrypt the message using the new session keys. + msg, err := c.decryptMessage(msgData, head.Nonce[:], headerData, session.readKey) + if err != nil { + c.sc.deleteHandshake(auth.h.SrcID, fromAddr) + return node, msg, err + } + + // Handshake OK, drop the challenge and store the new session keys. + c.sc.storeNewSession(auth.h.SrcID, fromAddr, session) + c.sc.deleteHandshake(auth.h.SrcID, fromAddr) + return node, msg, nil +} + +func (c *Codec) decodeHandshake(fromAddr string, head *Header) (n *enode.Node, auth handshakeAuthData, s *session, err error) { + if auth, err = c.decodeHandshakeAuthData(head); err != nil { + return nil, auth, nil, err + } + + // Verify against our last WHOAREYOU. + challenge := c.sc.getHandshake(auth.h.SrcID, fromAddr) + if challenge == nil { + return nil, auth, nil, errUnexpectedHandshake + } + // Get node record. + n, err = c.decodeHandshakeRecord(challenge.Node, auth.h.SrcID, auth.record) + if err != nil { + return nil, auth, nil, err + } + // Verify ID nonce signature. + sig := auth.signature + cdata := challenge.ChallengeData + err = verifyIDSignature(c.sha256, sig, n, cdata, auth.pubkey, c.localnode.ID()) + if err != nil { + return nil, auth, nil, err + } + // Verify ephemeral key is on curve. + ephkey, err := DecodePubkey(c.privkey.Curve, auth.pubkey) + if err != nil { + return nil, auth, nil, errInvalidAuthKey + } + // Derive sesssion keys. + session := deriveKeys(sha256.New, c.privkey, ephkey, auth.h.SrcID, c.localnode.ID(), cdata) + session = session.keysFlipped() + return n, auth, session, nil +} + +// decodeHandshakeAuthData reads the authdata section of a handshake packet. +func (c *Codec) decodeHandshakeAuthData(head *Header) (auth handshakeAuthData, err error) { + // Decode fixed size part. + if len(head.AuthData) < sizeofHandshakeAuthData { + return auth, fmt.Errorf("header authsize %d too low for handshake", head.AuthSize) + } + c.reader.Reset(head.AuthData) + binary.Read(&c.reader, binary.BigEndian, &auth.h) + head.src = auth.h.SrcID + + // Decode variable-size part. + var ( + vardata = head.AuthData[sizeofHandshakeAuthData:] + sigAndKeySize = int(auth.h.SigSize) + int(auth.h.PubkeySize) + keyOffset = int(auth.h.SigSize) + recOffset = keyOffset + int(auth.h.PubkeySize) + ) + if len(vardata) < sigAndKeySize { + return auth, errTooShort + } + auth.signature = vardata[:keyOffset] + auth.pubkey = vardata[keyOffset:recOffset] + auth.record = vardata[recOffset:] + return auth, nil +} + +// decodeHandshakeRecord verifies the node record contained in a handshake packet. The +// remote node should include the record if we don't have one or if ours is older than the +// latest sequence number. +func (c *Codec) decodeHandshakeRecord(local *enode.Node, wantID enode.ID, remote []byte) (*enode.Node, error) { + node := local + if len(remote) > 0 { + var record enr.Record + if err := rlp.DecodeBytes(remote, &record); err != nil { + return nil, err + } + if local == nil || local.Seq() < record.Seq() { + n, err := enode.New(enode.ValidSchemes, &record) + if err != nil { + return nil, fmt.Errorf("invalid node record: %v", err) + } + if n.ID() != wantID { + return nil, fmt.Errorf("record in handshake has wrong ID: %v", n.ID()) + } + node = n + } + } + if node == nil { + return nil, errNoRecord + } + return node, nil +} + +// decodeMessage reads packet data following the header as an ordinary message packet. +func (c *Codec) decodeMessage(fromAddr string, head *Header, headerData, msgData []byte) (Packet, error) { + if len(head.AuthData) != sizeofMessageAuthData { + return nil, fmt.Errorf("invalid auth size %d for message packet", len(head.AuthData)) + } + var auth messageAuthData + c.reader.Reset(head.AuthData) + binary.Read(&c.reader, binary.BigEndian, &auth) + head.src = auth.SrcID + + // Try decrypting the message. + key := c.sc.readKey(auth.SrcID, fromAddr) + msg, err := c.decryptMessage(msgData, head.Nonce[:], headerData, key) + if errors.Is(err, errMessageDecrypt) { + // It didn't work. Start the handshake since this is an ordinary message packet. + return &Unknown{Nonce: head.Nonce}, nil + } + return msg, err +} + +func (c *Codec) decryptMessage(input, nonce, headerData, readKey []byte) (Packet, error) { + msgdata, err := decryptGCM(readKey, nonce, input, headerData) + if err != nil { + return nil, errMessageDecrypt + } + if len(msgdata) == 0 { + return nil, errMessageTooShort + } + return DecodeMessage(msgdata[0], msgdata[1:]) +} + +// checkValid performs some basic validity checks on the header. +// The packetLen here is the length remaining after the static header. +func (h *StaticHeader) checkValid(packetLen int) error { + if h.ProtocolID != protocolID { + return errInvalidHeader + } + if h.Version < minVersion { + return errMinVersion + } + if h.Flag != flagWhoareyou && packetLen < minMessageSize { + return errMsgTooShort + } + if int(h.AuthSize) > packetLen { + return errAuthSize + } + return nil +} + +// mask returns a cipher for 'masking' / 'unmasking' packet headers. +func (h *Header) mask(destID enode.ID) cipher.Stream { + block, err := aes.NewCipher(destID[:16]) + if err != nil { + panic("can't create cipher") + } + return cipher.NewCTR(block, h.IV[:]) +} + +func bytesCopy(r *bytes.Buffer) []byte { + b := make([]byte, r.Len()) + copy(b, r.Bytes()) + return b +} diff --git a/p2p/discover/v5wire/encoding_test.go b/p2p/discover/v5wire/encoding_test.go new file mode 100644 index 00000000..18aa1db1 --- /dev/null +++ b/p2p/discover/v5wire/encoding_test.go @@ -0,0 +1,632 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "bytes" + "crypto/ecdsa" + "encoding/hex" + "errors" + "flag" + "fmt" + "net" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// To regenerate discv5 test vectors, run +// +// go test -run TestVectors -write-test-vectors +// +var writeTestVectorsFlag = flag.Bool("write-test-vectors", false, "Overwrite discv5 test vectors in testdata/") + +var ( + testKeyA, _ = crypto.HexToECDSA("eef77acb6c6a6eebc5b363a475ac583ec7eccdb42b6481424c60f59aa326547f") + testKeyB, _ = crypto.HexToECDSA("66fb62bfbd66b9177a138c1e5cddbe4f7c30c343e94e68df8769459cb1cde628") + testEphKey, _ = crypto.HexToECDSA("0288ef00023598499cb6c940146d050d2b1fb914198c327f76aad590bead68b6") + testIDnonce = [16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} +) + +// This test checks that the minPacketSize and randomPacketMsgSize constants are well-defined. +func TestMinSizes(t *testing.T) { + var ( + gcmTagSize = 16 + emptyMsg = sizeofMessageAuthData + gcmTagSize + ) + t.Log("static header size", sizeofStaticPacketData) + t.Log("whoareyou size", sizeofStaticPacketData+sizeofWhoareyouAuthData) + t.Log("empty msg size", sizeofStaticPacketData+emptyMsg) + if want := emptyMsg; minMessageSize != want { + t.Fatalf("wrong minMessageSize %d, want %d", minMessageSize, want) + } + if sizeofMessageAuthData+randomPacketMsgSize < minMessageSize { + t.Fatalf("randomPacketMsgSize %d too small", randomPacketMsgSize) + } +} + +// This test checks the basic handshake flow where A talks to B and A has no secrets. +func TestHandshake(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + // A -> B RANDOM PACKET + packet, _ := net.nodeA.encode(t, net.nodeB, &Findnode{}) + resp := net.nodeB.expectDecode(t, UnknownPacket, packet) + + // A <- B WHOAREYOU + challenge := &Whoareyou{ + Nonce: resp.(*Unknown).Nonce, + IDNonce: testIDnonce, + RecordSeq: 0, + } + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // A -> B FINDNODE (handshake packet) + findnode, _ := net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecode(t, FindnodeMsg, findnode) + if len(net.nodeB.c.sc.handshakes) > 0 { + t.Fatalf("node B didn't remove handshake from challenge map") + } + + // A <- B NODES + nodes, _ := net.nodeB.encode(t, net.nodeA, &Nodes{Total: 1}) + net.nodeA.expectDecode(t, NodesMsg, nodes) +} + +// This test checks that handshake attempts are removed within the timeout. +func TestHandshake_timeout(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + // A -> B RANDOM PACKET + packet, _ := net.nodeA.encode(t, net.nodeB, &Findnode{}) + resp := net.nodeB.expectDecode(t, UnknownPacket, packet) + + // A <- B WHOAREYOU + challenge := &Whoareyou{ + Nonce: resp.(*Unknown).Nonce, + IDNonce: testIDnonce, + RecordSeq: 0, + } + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // A -> B FINDNODE (handshake packet) after timeout + net.clock.Run(handshakeTimeout + 1) + findnode, _ := net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecodeErr(t, errUnexpectedHandshake, findnode) +} + +// This test checks handshake behavior when no record is sent in the auth response. +func TestHandshake_norecord(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + // A -> B RANDOM PACKET + packet, _ := net.nodeA.encode(t, net.nodeB, &Findnode{}) + resp := net.nodeB.expectDecode(t, UnknownPacket, packet) + + // A <- B WHOAREYOU + nodeA := net.nodeA.n() + if nodeA.Seq() == 0 { + t.Fatal("need non-zero sequence number") + } + challenge := &Whoareyou{ + Nonce: resp.(*Unknown).Nonce, + IDNonce: testIDnonce, + RecordSeq: nodeA.Seq(), + Node: nodeA, + } + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // A -> B FINDNODE + findnode, _ := net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecode(t, FindnodeMsg, findnode) + + // A <- B NODES + nodes, _ := net.nodeB.encode(t, net.nodeA, &Nodes{Total: 1}) + net.nodeA.expectDecode(t, NodesMsg, nodes) +} + +// In this test, A tries to send FINDNODE with existing secrets but B doesn't know +// anything about A. +func TestHandshake_rekey(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + session := &session{ + readKey: []byte("BBBBBBBBBBBBBBBB"), + writeKey: []byte("AAAAAAAAAAAAAAAA"), + } + net.nodeA.c.sc.storeNewSession(net.nodeB.id(), net.nodeB.addr(), session) + + // A -> B FINDNODE (encrypted with zero keys) + findnode, authTag := net.nodeA.encode(t, net.nodeB, &Findnode{}) + net.nodeB.expectDecode(t, UnknownPacket, findnode) + + // A <- B WHOAREYOU + challenge := &Whoareyou{Nonce: authTag, IDNonce: testIDnonce} + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // Check that new keys haven't been stored yet. + sa := net.nodeA.c.sc.session(net.nodeB.id(), net.nodeB.addr()) + if !bytes.Equal(sa.writeKey, session.writeKey) || !bytes.Equal(sa.readKey, session.readKey) { + t.Fatal("node A stored keys too early") + } + if s := net.nodeB.c.sc.session(net.nodeA.id(), net.nodeA.addr()); s != nil { + t.Fatal("node B stored keys too early") + } + + // A -> B FINDNODE encrypted with new keys + findnode, _ = net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecode(t, FindnodeMsg, findnode) + + // A <- B NODES + nodes, _ := net.nodeB.encode(t, net.nodeA, &Nodes{Total: 1}) + net.nodeA.expectDecode(t, NodesMsg, nodes) +} + +// In this test A and B have different keys before the handshake. +func TestHandshake_rekey2(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + initKeysA := &session{ + readKey: []byte("BBBBBBBBBBBBBBBB"), + writeKey: []byte("AAAAAAAAAAAAAAAA"), + } + initKeysB := &session{ + readKey: []byte("CCCCCCCCCCCCCCCC"), + writeKey: []byte("DDDDDDDDDDDDDDDD"), + } + net.nodeA.c.sc.storeNewSession(net.nodeB.id(), net.nodeB.addr(), initKeysA) + net.nodeB.c.sc.storeNewSession(net.nodeA.id(), net.nodeA.addr(), initKeysB) + + // A -> B FINDNODE encrypted with initKeysA + findnode, authTag := net.nodeA.encode(t, net.nodeB, &Findnode{Distances: []uint{3}}) + net.nodeB.expectDecode(t, UnknownPacket, findnode) + + // A <- B WHOAREYOU + challenge := &Whoareyou{Nonce: authTag, IDNonce: testIDnonce} + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // A -> B FINDNODE (handshake packet) + findnode, _ = net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecode(t, FindnodeMsg, findnode) + + // A <- B NODES + nodes, _ := net.nodeB.encode(t, net.nodeA, &Nodes{Total: 1}) + net.nodeA.expectDecode(t, NodesMsg, nodes) +} + +func TestHandshake_BadHandshakeAttack(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + // A -> B RANDOM PACKET + packet, _ := net.nodeA.encode(t, net.nodeB, &Findnode{}) + resp := net.nodeB.expectDecode(t, UnknownPacket, packet) + + // A <- B WHOAREYOU + challenge := &Whoareyou{ + Nonce: resp.(*Unknown).Nonce, + IDNonce: testIDnonce, + RecordSeq: 0, + } + whoareyou, _ := net.nodeB.encode(t, net.nodeA, challenge) + net.nodeA.expectDecode(t, WhoareyouPacket, whoareyou) + + // A -> B FINDNODE + incorrect_challenge := &Whoareyou{ + IDNonce: [16]byte{5, 6, 7, 8, 9, 6, 11, 12}, + RecordSeq: challenge.RecordSeq, + Node: challenge.Node, + sent: challenge.sent, + } + incorrect_findnode, _ := net.nodeA.encodeWithChallenge(t, net.nodeB, incorrect_challenge, &Findnode{}) + incorrect_findnode2 := make([]byte, len(incorrect_findnode)) + copy(incorrect_findnode2, incorrect_findnode) + + net.nodeB.expectDecodeErr(t, errInvalidNonceSig, incorrect_findnode) + + // Reject new findnode as previous handshake is now deleted. + net.nodeB.expectDecodeErr(t, errUnexpectedHandshake, incorrect_findnode2) + + // The findnode packet is again rejected even with a valid challenge this time. + findnode, _ := net.nodeA.encodeWithChallenge(t, net.nodeB, challenge, &Findnode{}) + net.nodeB.expectDecodeErr(t, errUnexpectedHandshake, findnode) +} + +// This test checks some malformed packets. +func TestDecodeErrorsV5(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + net.nodeA.expectDecodeErr(t, errTooShort, []byte{}) + // TODO some more tests would be nice :) + // - check invalid authdata sizes + // - check invalid handshake data sizes +} + +// This test checks that all test vectors can be decoded. +func TestTestVectorsV5(t *testing.T) { + var ( + idA = enode.PubkeyToIDV4(&testKeyA.PublicKey) + idB = enode.PubkeyToIDV4(&testKeyB.PublicKey) + addr = "127.0.0.1" + session = &session{ + writeKey: hexutil.MustDecode("0x00000000000000000000000000000000"), + readKey: hexutil.MustDecode("0x01010101010101010101010101010101"), + } + challenge0A, challenge1A, challenge0B Whoareyou + ) + + // Create challenge packets. + c := Whoareyou{ + Nonce: Nonce{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, + IDNonce: testIDnonce, + } + challenge0A, challenge1A, challenge0B = c, c, c + challenge1A.RecordSeq = 1 + net := newHandshakeTest() + challenge0A.Node = net.nodeA.n() + challenge0B.Node = net.nodeB.n() + challenge1A.Node = net.nodeA.n() + net.close() + + type testVectorTest struct { + name string // test vector name + packet Packet // the packet to be encoded + challenge *Whoareyou // handshake challenge passed to encoder + prep func(*handshakeTest) // called before encode/decode + } + tests := []testVectorTest{ + { + name: "v5.1-whoareyou", + packet: &challenge0B, + }, + { + name: "v5.1-ping-message", + packet: &Ping{ + ReqID: []byte{0, 0, 0, 1}, + ENRSeq: 2, + }, + prep: func(net *handshakeTest) { + net.nodeA.c.sc.storeNewSession(idB, addr, session) + net.nodeB.c.sc.storeNewSession(idA, addr, session.keysFlipped()) + }, + }, + { + name: "v5.1-ping-handshake-enr", + packet: &Ping{ + ReqID: []byte{0, 0, 0, 1}, + ENRSeq: 1, + }, + challenge: &challenge0A, + prep: func(net *handshakeTest) { + // Update challenge.Header.AuthData. + net.nodeA.c.Encode(idB, "", &challenge0A, nil) + net.nodeB.c.sc.storeSentHandshake(idA, addr, &challenge0A) + }, + }, + { + name: "v5.1-ping-handshake", + packet: &Ping{ + ReqID: []byte{0, 0, 0, 1}, + ENRSeq: 1, + }, + challenge: &challenge1A, + prep: func(net *handshakeTest) { + // Update challenge data. + net.nodeA.c.Encode(idB, "", &challenge1A, nil) + net.nodeB.c.sc.storeSentHandshake(idA, addr, &challenge1A) + }, + }, + } + + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + net := newHandshakeTest() + defer net.close() + + // Override all random inputs. + net.nodeA.c.sc.nonceGen = func(counter uint32) (Nonce, error) { + return Nonce{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, nil + } + net.nodeA.c.sc.maskingIVGen = func(buf []byte) error { + return nil // all zero + } + net.nodeA.c.sc.ephemeralKeyGen = func() (*ecdsa.PrivateKey, error) { + return testEphKey, nil + } + + // Prime the codec for encoding/decoding. + if test.prep != nil { + test.prep(net) + } + + file := filepath.Join("testdata", test.name+".txt") + if *writeTestVectorsFlag { + // Encode the packet. + d, nonce := net.nodeA.encodeWithChallenge(t, net.nodeB, test.challenge, test.packet) + comment := testVectorComment(net, test.packet, test.challenge, nonce) + writeTestVector(file, comment, d) + } + enc := hexFile(file) + net.nodeB.expectDecode(t, test.packet.Kind(), enc) + }) + } +} + +// testVectorComment creates the commentary for discv5 test vector files. +func testVectorComment(net *handshakeTest, p Packet, challenge *Whoareyou, nonce Nonce) string { + o := new(strings.Builder) + printWhoareyou := func(p *Whoareyou) { + fmt.Fprintf(o, "whoareyou.challenge-data = %#x\n", p.ChallengeData) + fmt.Fprintf(o, "whoareyou.request-nonce = %#x\n", p.Nonce[:]) + fmt.Fprintf(o, "whoareyou.id-nonce = %#x\n", p.IDNonce[:]) + fmt.Fprintf(o, "whoareyou.enr-seq = %d\n", p.RecordSeq) + } + + fmt.Fprintf(o, "src-node-id = %#x\n", net.nodeA.id().Bytes()) + fmt.Fprintf(o, "dest-node-id = %#x\n", net.nodeB.id().Bytes()) + switch p := p.(type) { + case *Whoareyou: + // WHOAREYOU packet. + printWhoareyou(p) + case *Ping: + fmt.Fprintf(o, "nonce = %#x\n", nonce[:]) + fmt.Fprintf(o, "read-key = %#x\n", net.nodeA.c.sc.session(net.nodeB.id(), net.nodeB.addr()).writeKey) + fmt.Fprintf(o, "ping.req-id = %#x\n", p.ReqID) + fmt.Fprintf(o, "ping.enr-seq = %d\n", p.ENRSeq) + if challenge != nil { + // Handshake message packet. + fmt.Fprint(o, "\nhandshake inputs:\n\n") + printWhoareyou(challenge) + fmt.Fprintf(o, "ephemeral-key = %#x\n", testEphKey.D.Bytes()) + fmt.Fprintf(o, "ephemeral-pubkey = %#x\n", crypto.CompressPubkey(&testEphKey.PublicKey)) + } + default: + panic(fmt.Errorf("unhandled packet type %T", p)) + } + return o.String() +} + +// This benchmark checks performance of handshake packet decoding. +func BenchmarkV5_DecodeHandshakePingSecp256k1(b *testing.B) { + net := newHandshakeTest() + defer net.close() + + var ( + idA = net.nodeA.id() + challenge = &Whoareyou{Node: net.nodeB.n()} + message = &Ping{ReqID: []byte("reqid")} + ) + enc, _, err := net.nodeA.c.Encode(net.nodeB.id(), "", message, challenge) + if err != nil { + b.Fatal("can't encode handshake packet") + } + challenge.Node = nil // force ENR signature verification in decoder + b.ResetTimer() + + input := make([]byte, len(enc)) + for i := 0; i < b.N; i++ { + copy(input, enc) + net.nodeB.c.sc.storeSentHandshake(idA, "", challenge) + _, _, _, err := net.nodeB.c.Decode(input, "") + if err != nil { + b.Fatal(err) + } + } +} + +// This benchmark checks how long it takes to decode an encrypted ping packet. +func BenchmarkV5_DecodePing(b *testing.B) { + net := newHandshakeTest() + defer net.close() + + session := &session{ + readKey: []byte{233, 203, 93, 195, 86, 47, 177, 186, 227, 43, 2, 141, 244, 230, 120, 17}, + writeKey: []byte{79, 145, 252, 171, 167, 216, 252, 161, 208, 190, 176, 106, 214, 39, 178, 134}, + } + net.nodeA.c.sc.storeNewSession(net.nodeB.id(), net.nodeB.addr(), session) + net.nodeB.c.sc.storeNewSession(net.nodeA.id(), net.nodeA.addr(), session.keysFlipped()) + addrB := net.nodeA.addr() + ping := &Ping{ReqID: []byte("reqid"), ENRSeq: 5} + enc, _, err := net.nodeA.c.Encode(net.nodeB.id(), addrB, ping, nil) + if err != nil { + b.Fatalf("can't encode: %v", err) + } + b.ResetTimer() + + input := make([]byte, len(enc)) + for i := 0; i < b.N; i++ { + copy(input, enc) + _, _, packet, _ := net.nodeB.c.Decode(input, addrB) + if _, ok := packet.(*Ping); !ok { + b.Fatalf("wrong packet type %T", packet) + } + } +} + +var pp = spew.NewDefaultConfig() + +type handshakeTest struct { + nodeA, nodeB handshakeTestNode + clock mclock.Simulated +} + +type handshakeTestNode struct { + ln *enode.LocalNode + c *Codec +} + +func newHandshakeTest() *handshakeTest { + t := new(handshakeTest) + t.nodeA.init(testKeyA, net.IP{127, 0, 0, 1}, &t.clock) + t.nodeB.init(testKeyB, net.IP{127, 0, 0, 1}, &t.clock) + return t +} + +func (t *handshakeTest) close() { + t.nodeA.ln.Database().Close() + t.nodeB.ln.Database().Close() +} + +func (n *handshakeTestNode) init(key *ecdsa.PrivateKey, ip net.IP, clock mclock.Clock) { + db, _ := enode.OpenDB("") + n.ln = enode.NewLocalNode(db, key) + n.ln.SetStaticIP(ip) + n.c = NewCodec(n.ln, key, clock) +} + +func (n *handshakeTestNode) encode(t testing.TB, to handshakeTestNode, p Packet) ([]byte, Nonce) { + t.Helper() + return n.encodeWithChallenge(t, to, nil, p) +} + +func (n *handshakeTestNode) encodeWithChallenge(t testing.TB, to handshakeTestNode, c *Whoareyou, p Packet) ([]byte, Nonce) { + t.Helper() + + // Copy challenge and add destination node. This avoids sharing 'c' among the two codecs. + var challenge *Whoareyou + if c != nil { + challengeCopy := *c + challenge = &challengeCopy + challenge.Node = to.n() + } + // Encode to destination. + enc, nonce, err := n.c.Encode(to.id(), to.addr(), p, challenge) + if err != nil { + t.Fatal(fmt.Errorf("(%s) %v", n.ln.ID().TerminalString(), err)) + } + t.Logf("(%s) -> (%s) %s\n%s", n.ln.ID().TerminalString(), to.id().TerminalString(), p.Name(), hex.Dump(enc)) + return enc, nonce +} + +func (n *handshakeTestNode) expectDecode(t *testing.T, ptype byte, p []byte) Packet { + t.Helper() + + dec, err := n.decode(p) + if err != nil { + t.Fatal(fmt.Errorf("(%s) %v", n.ln.ID().TerminalString(), err)) + } + t.Logf("(%s) %#v", n.ln.ID().TerminalString(), pp.NewFormatter(dec)) + if dec.Kind() != ptype { + t.Fatalf("expected packet type %d, got %d", ptype, dec.Kind()) + } + return dec +} + +func (n *handshakeTestNode) expectDecodeErr(t *testing.T, wantErr error, p []byte) { + t.Helper() + if _, err := n.decode(p); !errors.Is(err, wantErr) { + t.Fatal(fmt.Errorf("(%s) got err %q, want %q", n.ln.ID().TerminalString(), err, wantErr)) + } +} + +func (n *handshakeTestNode) decode(input []byte) (Packet, error) { + _, _, p, err := n.c.Decode(input, "127.0.0.1") + return p, err +} + +func (n *handshakeTestNode) n() *enode.Node { + return n.ln.Node() +} + +func (n *handshakeTestNode) addr() string { + return n.ln.Node().IP().String() +} + +func (n *handshakeTestNode) id() enode.ID { + return n.ln.ID() +} + +// hexFile reads the given file and decodes the hex data contained in it. +// Whitespace and any lines beginning with the # character are ignored. +func hexFile(file string) []byte { + fileContent, err := os.ReadFile(file) + if err != nil { + panic(err) + } + + // Gather hex data, ignore comments. + var text []byte + for _, line := range bytes.Split(fileContent, []byte("\n")) { + line = bytes.TrimSpace(line) + if len(line) > 0 && line[0] == '#' { + continue + } + text = append(text, line...) + } + + // Parse the hex. + if bytes.HasPrefix(text, []byte("0x")) { + text = text[2:] + } + data := make([]byte, hex.DecodedLen(len(text))) + if _, err := hex.Decode(data, text); err != nil { + panic("invalid hex in " + file) + } + return data +} + +// writeTestVector writes a test vector file with the given commentary and binary data. +func writeTestVector(file, comment string, data []byte) { + fd, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + panic(err) + } + defer fd.Close() + + if len(comment) > 0 { + for _, line := range strings.Split(strings.TrimSpace(comment), "\n") { + fmt.Fprintf(fd, "# %s\n", line) + } + fmt.Fprintln(fd) + } + for len(data) > 0 { + var chunk []byte + if len(data) < 32 { + chunk = data + } else { + chunk = data[:32] + } + data = data[len(chunk):] + fmt.Fprintf(fd, "%x\n", chunk) + } +} diff --git a/p2p/discover/v5wire/msg.go b/p2p/discover/v5wire/msg.go new file mode 100644 index 00000000..2f387b40 --- /dev/null +++ b/p2p/discover/v5wire/msg.go @@ -0,0 +1,249 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "fmt" + "net" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" +) + +// Packet is implemented by all message types. +type Packet interface { + Name() string // Name returns a string corresponding to the message type. + Kind() byte // Kind returns the message type. + RequestID() []byte // Returns the request ID. + SetRequestID([]byte) // Sets the request ID. +} + +// Message types. +const ( + PingMsg byte = iota + 1 + PongMsg + FindnodeMsg + NodesMsg + TalkRequestMsg + TalkResponseMsg + RequestTicketMsg + TicketMsg + RegtopicMsg + RegconfirmationMsg + TopicQueryMsg + + UnknownPacket = byte(255) // any non-decryptable packet + WhoareyouPacket = byte(254) // the WHOAREYOU packet +) + +// Protocol messages. +type ( + // Unknown represents any packet that can't be decrypted. + Unknown struct { + Nonce Nonce + } + + // WHOAREYOU contains the handshake challenge. + Whoareyou struct { + ChallengeData []byte // Encoded challenge + Nonce Nonce // Nonce of request packet + IDNonce [16]byte // Identity proof data + RecordSeq uint64 // ENR sequence number of recipient + + // Node is the locally known node record of recipient. + // This must be set by the caller of Encode. + Node *enode.Node + + sent mclock.AbsTime // for handshake GC. + } + + // PING is sent during liveness checks. + Ping struct { + ReqID []byte + ENRSeq uint64 + } + + // PONG is the reply to PING. + Pong struct { + ReqID []byte + ENRSeq uint64 + ToIP net.IP // These fields should mirror the UDP envelope address of the ping + ToPort uint16 // packet, which provides a way to discover the external address (after NAT). + } + + // FINDNODE is a query for nodes in the given bucket. + Findnode struct { + ReqID []byte + Distances []uint + } + + // NODES is the reply to FINDNODE and TOPICQUERY. + Nodes struct { + ReqID []byte + Total uint8 + Nodes []*enr.Record + } + + // TALKREQ is an application-level request. + TalkRequest struct { + ReqID []byte + Protocol string + Message []byte + } + + // TALKRESP is the reply to TALKREQ. + TalkResponse struct { + ReqID []byte + Message []byte + } + + // REQUESTTICKET requests a ticket for a topic queue. + RequestTicket struct { + ReqID []byte + Topic []byte + } + + // TICKET is the response to REQUESTTICKET. + Ticket struct { + ReqID []byte + Ticket []byte + } + + // REGTOPIC registers the sender in a topic queue using a ticket. + Regtopic struct { + ReqID []byte + Ticket []byte + ENR *enr.Record + } + + // REGCONFIRMATION is the reply to REGTOPIC. + Regconfirmation struct { + ReqID []byte + Registered bool + } + + // TOPICQUERY asks for nodes with the given topic. + TopicQuery struct { + ReqID []byte + Topic []byte + } +) + +// DecodeMessage decodes the message body of a packet. +func DecodeMessage(ptype byte, body []byte) (Packet, error) { + var dec Packet + switch ptype { + case PingMsg: + dec = new(Ping) + case PongMsg: + dec = new(Pong) + case FindnodeMsg: + dec = new(Findnode) + case NodesMsg: + dec = new(Nodes) + case TalkRequestMsg: + dec = new(TalkRequest) + case TalkResponseMsg: + dec = new(TalkResponse) + case RequestTicketMsg: + dec = new(RequestTicket) + case TicketMsg: + dec = new(Ticket) + case RegtopicMsg: + dec = new(Regtopic) + case RegconfirmationMsg: + dec = new(Regconfirmation) + case TopicQueryMsg: + dec = new(TopicQuery) + default: + return nil, fmt.Errorf("unknown packet type %d", ptype) + } + if err := rlp.DecodeBytes(body, dec); err != nil { + return nil, err + } + if dec.RequestID() != nil && len(dec.RequestID()) > 8 { + return nil, ErrInvalidReqID + } + return dec, nil +} + +func (*Whoareyou) Name() string { return "WHOAREYOU/v5" } +func (*Whoareyou) Kind() byte { return WhoareyouPacket } +func (*Whoareyou) RequestID() []byte { return nil } +func (*Whoareyou) SetRequestID([]byte) {} + +func (*Unknown) Name() string { return "UNKNOWN/v5" } +func (*Unknown) Kind() byte { return UnknownPacket } +func (*Unknown) RequestID() []byte { return nil } +func (*Unknown) SetRequestID([]byte) {} + +func (*Ping) Name() string { return "PING/v5" } +func (*Ping) Kind() byte { return PingMsg } +func (p *Ping) RequestID() []byte { return p.ReqID } +func (p *Ping) SetRequestID(id []byte) { p.ReqID = id } + +func (*Pong) Name() string { return "PONG/v5" } +func (*Pong) Kind() byte { return PongMsg } +func (p *Pong) RequestID() []byte { return p.ReqID } +func (p *Pong) SetRequestID(id []byte) { p.ReqID = id } + +func (*Findnode) Name() string { return "FINDNODE/v5" } +func (*Findnode) Kind() byte { return FindnodeMsg } +func (p *Findnode) RequestID() []byte { return p.ReqID } +func (p *Findnode) SetRequestID(id []byte) { p.ReqID = id } + +func (*Nodes) Name() string { return "NODES/v5" } +func (*Nodes) Kind() byte { return NodesMsg } +func (p *Nodes) RequestID() []byte { return p.ReqID } +func (p *Nodes) SetRequestID(id []byte) { p.ReqID = id } + +func (*TalkRequest) Name() string { return "TALKREQ/v5" } +func (*TalkRequest) Kind() byte { return TalkRequestMsg } +func (p *TalkRequest) RequestID() []byte { return p.ReqID } +func (p *TalkRequest) SetRequestID(id []byte) { p.ReqID = id } + +func (*TalkResponse) Name() string { return "TALKRESP/v5" } +func (*TalkResponse) Kind() byte { return TalkResponseMsg } +func (p *TalkResponse) RequestID() []byte { return p.ReqID } +func (p *TalkResponse) SetRequestID(id []byte) { p.ReqID = id } + +func (*RequestTicket) Name() string { return "REQTICKET/v5" } +func (*RequestTicket) Kind() byte { return RequestTicketMsg } +func (p *RequestTicket) RequestID() []byte { return p.ReqID } +func (p *RequestTicket) SetRequestID(id []byte) { p.ReqID = id } + +func (*Regtopic) Name() string { return "REGTOPIC/v5" } +func (*Regtopic) Kind() byte { return RegtopicMsg } +func (p *Regtopic) RequestID() []byte { return p.ReqID } +func (p *Regtopic) SetRequestID(id []byte) { p.ReqID = id } + +func (*Ticket) Name() string { return "TICKET/v5" } +func (*Ticket) Kind() byte { return TicketMsg } +func (p *Ticket) RequestID() []byte { return p.ReqID } +func (p *Ticket) SetRequestID(id []byte) { p.ReqID = id } + +func (*Regconfirmation) Name() string { return "REGCONFIRMATION/v5" } +func (*Regconfirmation) Kind() byte { return RegconfirmationMsg } +func (p *Regconfirmation) RequestID() []byte { return p.ReqID } +func (p *Regconfirmation) SetRequestID(id []byte) { p.ReqID = id } + +func (*TopicQuery) Name() string { return "TOPICQUERY/v5" } +func (*TopicQuery) Kind() byte { return TopicQueryMsg } +func (p *TopicQuery) RequestID() []byte { return p.ReqID } +func (p *TopicQuery) SetRequestID(id []byte) { p.ReqID = id } diff --git a/p2p/discover/v5wire/session.go b/p2p/discover/v5wire/session.go new file mode 100644 index 00000000..d52b5c11 --- /dev/null +++ b/p2p/discover/v5wire/session.go @@ -0,0 +1,142 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package v5wire + +import ( + "crypto/ecdsa" + crand "crypto/rand" + "encoding/binary" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/hashicorp/golang-lru/simplelru" +) + +const handshakeTimeout = time.Second + +// The SessionCache keeps negotiated encryption keys and +// state for in-progress handshakes in the Discovery v5 wire protocol. +type SessionCache struct { + sessions *simplelru.LRU + handshakes map[sessionID]*Whoareyou + clock mclock.Clock + + // hooks for overriding randomness. + nonceGen func(uint32) (Nonce, error) + maskingIVGen func([]byte) error + ephemeralKeyGen func() (*ecdsa.PrivateKey, error) +} + +// sessionID identifies a session or handshake. +type sessionID struct { + id enode.ID + addr string +} + +// session contains session information +type session struct { + writeKey []byte + readKey []byte + nonceCounter uint32 +} + +// keysFlipped returns a copy of s with the read and write keys flipped. +func (s *session) keysFlipped() *session { + return &session{s.readKey, s.writeKey, s.nonceCounter} +} + +func NewSessionCache(maxItems int, clock mclock.Clock) *SessionCache { + cache, err := simplelru.NewLRU(maxItems, nil) + if err != nil { + panic("can't create session cache") + } + return &SessionCache{ + sessions: cache, + handshakes: make(map[sessionID]*Whoareyou), + clock: clock, + nonceGen: generateNonce, + maskingIVGen: generateMaskingIV, + ephemeralKeyGen: crypto.GenerateKey, + } +} + +func generateNonce(counter uint32) (n Nonce, err error) { + binary.BigEndian.PutUint32(n[:4], counter) + _, err = crand.Read(n[4:]) + return n, err +} + +func generateMaskingIV(buf []byte) error { + _, err := crand.Read(buf) + return err +} + +// nextNonce creates a nonce for encrypting a message to the given session. +func (sc *SessionCache) nextNonce(s *session) (Nonce, error) { + s.nonceCounter++ + return sc.nonceGen(s.nonceCounter) +} + +// session returns the current session for the given node, if any. +func (sc *SessionCache) session(id enode.ID, addr string) *session { + item, ok := sc.sessions.Get(sessionID{id, addr}) + if !ok { + return nil + } + return item.(*session) +} + +// readKey returns the current read key for the given node. +func (sc *SessionCache) readKey(id enode.ID, addr string) []byte { + if s := sc.session(id, addr); s != nil { + return s.readKey + } + return nil +} + +// storeNewSession stores new encryption keys in the cache. +func (sc *SessionCache) storeNewSession(id enode.ID, addr string, s *session) { + sc.sessions.Add(sessionID{id, addr}, s) +} + +// getHandshake gets the handshake challenge we previously sent to the given remote node. +func (sc *SessionCache) getHandshake(id enode.ID, addr string) *Whoareyou { + return sc.handshakes[sessionID{id, addr}] +} + +// storeSentHandshake stores the handshake challenge sent to the given remote node. +func (sc *SessionCache) storeSentHandshake(id enode.ID, addr string, challenge *Whoareyou) { + challenge.sent = sc.clock.Now() + sc.handshakes[sessionID{id, addr}] = challenge +} + +// deleteHandshake deletes handshake data for the given node. +func (sc *SessionCache) deleteHandshake(id enode.ID, addr string) { + delete(sc.handshakes, sessionID{id, addr}) +} + +// handshakeGC deletes timed-out handshakes. +func (sc *SessionCache) handshakeGC() { + deadline := sc.clock.Now().Add(-handshakeTimeout) + for key, challenge := range sc.handshakes { + if challenge.sent < deadline { + delete(sc.handshakes, key) + } + } +} diff --git a/p2p/discover/v5wire/testdata/v5.1-ping-handshake-enr.txt b/p2p/discover/v5wire/testdata/v5.1-ping-handshake-enr.txt new file mode 100644 index 00000000..477f9e15 --- /dev/null +++ b/p2p/discover/v5wire/testdata/v5.1-ping-handshake-enr.txt @@ -0,0 +1,27 @@ +# src-node-id = 0xaaaa8419e9f49d0083561b48287df592939a8d19947d8c0ef88f2a4856a69fbb +# dest-node-id = 0xbbbb9d047f0488c0b5a93c1c3f2d8bafc7c8ff337024a55434a0d0555de64db9 +# nonce = 0xffffffffffffffffffffffff +# read-key = 0x53b1c075f41876423154e157470c2f48 +# ping.req-id = 0x00000001 +# ping.enr-seq = 1 +# +# handshake inputs: +# +# whoareyou.challenge-data = 0x000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000000 +# whoareyou.request-nonce = 0x0102030405060708090a0b0c +# whoareyou.id-nonce = 0x0102030405060708090a0b0c0d0e0f10 +# whoareyou.enr-seq = 0 +# ephemeral-key = 0x0288ef00023598499cb6c940146d050d2b1fb914198c327f76aad590bead68b6 +# ephemeral-pubkey = 0x039a003ba6517b473fa0cd74aefe99dadfdb34627f90fec6362df85803908f53a5 + +00000000000000000000000000000000088b3d4342774649305f313964a39e55 +ea96c005ad539c8c7560413a7008f16c9e6d2f43bbea8814a546b7409ce783d3 +4c4f53245d08da4bb23698868350aaad22e3ab8dd034f548a1c43cd246be9856 +2fafa0a1fa86d8e7a3b95ae78cc2b988ded6a5b59eb83ad58097252188b902b2 +1481e30e5e285f19735796706adff216ab862a9186875f9494150c4ae06fa4d1 +f0396c93f215fa4ef524e0ed04c3c21e39b1868e1ca8105e585ec17315e755e6 +cfc4dd6cb7fd8e1a1f55e49b4b5eb024221482105346f3c82b15fdaae36a3bb1 +2a494683b4a3c7f2ae41306252fed84785e2bbff3b022812d0882f06978df84a +80d443972213342d04b9048fc3b1d5fcb1df0f822152eced6da4d3f6df27e70e +4539717307a0208cd208d65093ccab5aa596a34d7511401987662d8cf62b1394 +71 diff --git a/p2p/discover/v5wire/testdata/v5.1-ping-handshake.txt b/p2p/discover/v5wire/testdata/v5.1-ping-handshake.txt new file mode 100644 index 00000000..b3f30476 --- /dev/null +++ b/p2p/discover/v5wire/testdata/v5.1-ping-handshake.txt @@ -0,0 +1,23 @@ +# src-node-id = 0xaaaa8419e9f49d0083561b48287df592939a8d19947d8c0ef88f2a4856a69fbb +# dest-node-id = 0xbbbb9d047f0488c0b5a93c1c3f2d8bafc7c8ff337024a55434a0d0555de64db9 +# nonce = 0xffffffffffffffffffffffff +# read-key = 0x4f9fac6de7567d1e3b1241dffe90f662 +# ping.req-id = 0x00000001 +# ping.enr-seq = 1 +# +# handshake inputs: +# +# whoareyou.challenge-data = 0x000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000001 +# whoareyou.request-nonce = 0x0102030405060708090a0b0c +# whoareyou.id-nonce = 0x0102030405060708090a0b0c0d0e0f10 +# whoareyou.enr-seq = 1 +# ephemeral-key = 0x0288ef00023598499cb6c940146d050d2b1fb914198c327f76aad590bead68b6 +# ephemeral-pubkey = 0x039a003ba6517b473fa0cd74aefe99dadfdb34627f90fec6362df85803908f53a5 + +00000000000000000000000000000000088b3d4342774649305f313964a39e55 +ea96c005ad521d8c7560413a7008f16c9e6d2f43bbea8814a546b7409ce783d3 +4c4f53245d08da4bb252012b2cba3f4f374a90a75cff91f142fa9be3e0a5f3ef +268ccb9065aeecfd67a999e7fdc137e062b2ec4a0eb92947f0d9a74bfbf44dfb +a776b21301f8b65efd5796706adff216ab862a9186875f9494150c4ae06fa4d1 +f0396c93f215fa4ef524f1eadf5f0f4126b79336671cbcf7a885b1f8bd2a5d83 +9cf8 diff --git a/p2p/discover/v5wire/testdata/v5.1-ping-message.txt b/p2p/discover/v5wire/testdata/v5.1-ping-message.txt new file mode 100644 index 00000000..f82b99c3 --- /dev/null +++ b/p2p/discover/v5wire/testdata/v5.1-ping-message.txt @@ -0,0 +1,10 @@ +# src-node-id = 0xaaaa8419e9f49d0083561b48287df592939a8d19947d8c0ef88f2a4856a69fbb +# dest-node-id = 0xbbbb9d047f0488c0b5a93c1c3f2d8bafc7c8ff337024a55434a0d0555de64db9 +# nonce = 0xffffffffffffffffffffffff +# read-key = 0x00000000000000000000000000000000 +# ping.req-id = 0x00000001 +# ping.enr-seq = 2 + +00000000000000000000000000000000088b3d4342774649325f313964a39e55 +ea96c005ad52be8c7560413a7008f16c9e6d2f43bbea8814a546b7409ce783d3 +4c4f53245d08dab84102ed931f66d1492acb308fa1c6715b9d139b81acbdcc diff --git a/p2p/discover/v5wire/testdata/v5.1-whoareyou.txt b/p2p/discover/v5wire/testdata/v5.1-whoareyou.txt new file mode 100644 index 00000000..1a75f525 --- /dev/null +++ b/p2p/discover/v5wire/testdata/v5.1-whoareyou.txt @@ -0,0 +1,9 @@ +# src-node-id = 0xaaaa8419e9f49d0083561b48287df592939a8d19947d8c0ef88f2a4856a69fbb +# dest-node-id = 0xbbbb9d047f0488c0b5a93c1c3f2d8bafc7c8ff337024a55434a0d0555de64db9 +# whoareyou.challenge-data = 0x000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000000 +# whoareyou.request-nonce = 0x0102030405060708090a0b0c +# whoareyou.id-nonce = 0x0102030405060708090a0b0c0d0e0f10 +# whoareyou.enr-seq = 0 + +00000000000000000000000000000000088b3d434277464933a1ccc59f5967ad +1d6035f15e528627dde75cd68292f9e6c27d6b66c8100a873fcbaed4e16b8d diff --git a/p2p/discv5/database.go b/p2p/discv5/database.go deleted file mode 100644 index 04b109ae..00000000 --- a/p2p/discv5/database.go +++ /dev/null @@ -1,411 +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 . - -// Contains the node database, storing previously seen nodes and any collected -// metadata about them for QoS purposes. - -package discv5 - -import ( - "bytes" - "crypto/rand" - "encoding/binary" - "fmt" - "os" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - nodeDBNilNodeID = NodeID{} // Special node ID to use as a nil element. - nodeDBNodeExpiration = 24 * time.Hour // Time after which an unseen node should be dropped. - nodeDBCleanupCycle = time.Hour // Time period for running the expiration task. -) - -// nodeDB stores all nodes we know about. -type nodeDB struct { - lvl *leveldb.DB // Interface to the database itself - self NodeID // Own node id to prevent adding it into the database - runner sync.Once // Ensures we can start at most one expirer - quit chan struct{} // Channel to signal the expiring thread to stop -} - -// Schema layout for the node database -var ( - nodeDBVersionKey = []byte("version") // Version of the database to flush if changes - nodeDBItemPrefix = []byte("n:") // Identifier to prefix node entries with - - nodeDBDiscoverRoot = ":discover" - nodeDBDiscoverPing = nodeDBDiscoverRoot + ":lastping" - nodeDBDiscoverPong = nodeDBDiscoverRoot + ":lastpong" - nodeDBDiscoverFindFails = nodeDBDiscoverRoot + ":findfail" - nodeDBDiscoverLocalEndpoint = nodeDBDiscoverRoot + ":localendpoint" - nodeDBTopicRegTickets = ":tickets" -) - -// newNodeDB creates a new node database for storing and retrieving infos about -// known peers in the network. If no path is given, an in-memory, temporary -// database is constructed. -func newNodeDB(path string, version int, self NodeID) (*nodeDB, error) { - if path == "" { - return newMemoryNodeDB(self) - } - return newPersistentNodeDB(path, version, self) -} - -// newMemoryNodeDB creates a new in-memory node database without a persistent -// backend. -func newMemoryNodeDB(self NodeID) (*nodeDB, error) { - db, err := leveldb.Open(storage.NewMemStorage(), nil) - if err != nil { - return nil, err - } - return &nodeDB{ - lvl: db, - self: self, - quit: make(chan struct{}), - }, nil -} - -// newPersistentNodeDB creates/opens a leveldb backed persistent node database, -// also flushing its contents in case of a version mismatch. -func newPersistentNodeDB(path string, version int, self NodeID) (*nodeDB, error) { - opts := &opt.Options{OpenFilesCacheCapacity: 5} - db, err := leveldb.OpenFile(path, opts) - if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted { - db, err = leveldb.RecoverFile(path, nil) - } - if err != nil { - return nil, err - } - // The nodes contained in the cache correspond to a certain protocol version. - // Flush all nodes if the version doesn't match. - currentVer := make([]byte, binary.MaxVarintLen64) - currentVer = currentVer[:binary.PutVarint(currentVer, int64(version))] - - blob, err := db.Get(nodeDBVersionKey, nil) - switch err { - case leveldb.ErrNotFound: - // Version not found (i.e. empty cache), insert it - if err := db.Put(nodeDBVersionKey, currentVer, nil); err != nil { - db.Close() - return nil, err - } - - case nil: - // Version present, flush if different - if !bytes.Equal(blob, currentVer) { - db.Close() - if err = os.RemoveAll(path); err != nil { - return nil, err - } - return newPersistentNodeDB(path, version, self) - } - } - return &nodeDB{ - lvl: db, - self: self, - quit: make(chan struct{}), - }, nil -} - -// makeKey generates the leveldb key-blob from a node id and its particular -// field of interest. -func makeKey(id NodeID, field string) []byte { - if bytes.Equal(id[:], nodeDBNilNodeID[:]) { - return []byte(field) - } - return append(nodeDBItemPrefix, append(id[:], field...)...) -} - -// splitKey tries to split a database key into a node id and a field part. -func splitKey(key []byte) (id NodeID, field string) { - // If the key is not of a node, return it plainly - if !bytes.HasPrefix(key, nodeDBItemPrefix) { - return NodeID{}, string(key) - } - // Otherwise split the id and field - item := key[len(nodeDBItemPrefix):] - copy(id[:], item[:len(id)]) - field = string(item[len(id):]) - - return id, field -} - -// fetchInt64 retrieves an integer instance associated with a particular -// database key. -func (db *nodeDB) fetchInt64(key []byte) int64 { - blob, err := db.lvl.Get(key, nil) - if err != nil { - return 0 - } - val, read := binary.Varint(blob) - if read <= 0 { - return 0 - } - return val -} - -// storeInt64 update a specific database entry to the current time instance as a -// unix timestamp. -func (db *nodeDB) storeInt64(key []byte, n int64) error { - blob := make([]byte, binary.MaxVarintLen64) - blob = blob[:binary.PutVarint(blob, n)] - return db.lvl.Put(key, blob, nil) -} - -func (db *nodeDB) storeRLP(key []byte, val interface{}) error { - blob, err := rlp.EncodeToBytes(val) - if err != nil { - return err - } - return db.lvl.Put(key, blob, nil) -} - -func (db *nodeDB) fetchRLP(key []byte, val interface{}) error { - blob, err := db.lvl.Get(key, nil) - if err != nil { - return err - } - err = rlp.DecodeBytes(blob, val) - if err != nil { - log.Warn(fmt.Sprintf("key %x (%T) %v", key, val, err)) - } - return err -} - -// node retrieves a node with a given id from the database. -func (db *nodeDB) node(id NodeID) *Node { - var node Node - if err := db.fetchRLP(makeKey(id, nodeDBDiscoverRoot), &node); err != nil { - return nil - } - node.sha = crypto.Keccak256Hash(node.ID[:]) - return &node -} - -// updateNode inserts - potentially overwriting - a node into the peer database. -func (db *nodeDB) updateNode(node *Node) error { - return db.storeRLP(makeKey(node.ID, nodeDBDiscoverRoot), node) -} - -// deleteNode deletes all information/keys associated with a node. -func (db *nodeDB) deleteNode(id NodeID) error { - deleter := db.lvl.NewIterator(util.BytesPrefix(makeKey(id, "")), nil) - for deleter.Next() { - if err := db.lvl.Delete(deleter.Key(), nil); err != nil { - return err - } - } - return nil -} - -// ensureExpirer is a small helper method ensuring that the data expiration -// mechanism is running. If the expiration goroutine is already running, this -// method simply returns. -// -// The goal is to start the data evacuation only after the network successfully -// bootstrapped itself (to prevent dumping potentially useful seed nodes). Since -// it would require significant overhead to exactly trace the first successful -// convergence, it's simpler to "ensure" the correct state when an appropriate -// condition occurs (i.e. a successful bonding), and discard further events. -func (db *nodeDB) ensureExpirer() { - db.runner.Do(func() { go db.expirer() }) -} - -// expirer should be started in a go routine, and is responsible for looping ad -// infinitum and dropping stale data from the database. -func (db *nodeDB) expirer() { - tick := time.NewTicker(nodeDBCleanupCycle) - defer tick.Stop() - for { - select { - case <-tick.C: - if err := db.expireNodes(); err != nil { - log.Error(fmt.Sprintf("Failed to expire nodedb items: %v", err)) - } - case <-db.quit: - return - } - } -} - -// expireNodes iterates over the database and deletes all nodes that have not -// been seen (i.e. received a pong from) for some allotted time. -func (db *nodeDB) expireNodes() error { - threshold := time.Now().Add(-nodeDBNodeExpiration) - - // Find discovered nodes that are older than the allowance - it := db.lvl.NewIterator(nil, nil) - defer it.Release() - - for it.Next() { - // Skip the item if not a discovery node - id, field := splitKey(it.Key()) - if field != nodeDBDiscoverRoot { - continue - } - // Skip the node if not expired yet (and not self) - if !bytes.Equal(id[:], db.self[:]) { - if seen := db.lastPong(id); seen.After(threshold) { - continue - } - } - // Otherwise delete all associated information - db.deleteNode(id) - } - return nil -} - -// lastPing retrieves the time of the last ping packet send to a remote node, -// requesting binding. -func (db *nodeDB) lastPing(id NodeID) time.Time { - return time.Unix(db.fetchInt64(makeKey(id, nodeDBDiscoverPing)), 0) -} - -// updateLastPing updates the last time we tried contacting a remote node. -func (db *nodeDB) updateLastPing(id NodeID, instance time.Time) error { - return db.storeInt64(makeKey(id, nodeDBDiscoverPing), instance.Unix()) -} - -// lastPong retrieves the time of the last successful contact from remote node. -func (db *nodeDB) lastPong(id NodeID) time.Time { - return time.Unix(db.fetchInt64(makeKey(id, nodeDBDiscoverPong)), 0) -} - -// updateLastPong updates the last time a remote node successfully contacted. -func (db *nodeDB) updateLastPong(id NodeID, instance time.Time) error { - return db.storeInt64(makeKey(id, nodeDBDiscoverPong), instance.Unix()) -} - -// findFails retrieves the number of findnode failures since bonding. -func (db *nodeDB) findFails(id NodeID) int { - return int(db.fetchInt64(makeKey(id, nodeDBDiscoverFindFails))) -} - -// updateFindFails updates the number of findnode failures since bonding. -func (db *nodeDB) updateFindFails(id NodeID, fails int) error { - return db.storeInt64(makeKey(id, nodeDBDiscoverFindFails), int64(fails)) -} - -// localEndpoint returns the last local endpoint communicated to the -// given remote node. -func (db *nodeDB) localEndpoint(id NodeID) *rpcEndpoint { - var ep rpcEndpoint - if err := db.fetchRLP(makeKey(id, nodeDBDiscoverLocalEndpoint), &ep); err != nil { - return nil - } - return &ep -} - -func (db *nodeDB) updateLocalEndpoint(id NodeID, ep rpcEndpoint) error { - return db.storeRLP(makeKey(id, nodeDBDiscoverLocalEndpoint), &ep) -} - -// querySeeds retrieves random nodes to be used as potential seed nodes -// for bootstrapping. -func (db *nodeDB) querySeeds(n int, maxAge time.Duration) []*Node { - var ( - now = time.Now() - nodes = make([]*Node, 0, n) - it = db.lvl.NewIterator(nil, nil) - id NodeID - ) - defer it.Release() - -seek: - for seeks := 0; len(nodes) < n && seeks < n*5; seeks++ { - // Seek to a random entry. The first byte is incremented by a - // random amount each time in order to increase the likelihood - // of hitting all existing nodes in very small databases. - ctr := id[0] - rand.Read(id[:]) - id[0] = ctr + id[0]%16 - it.Seek(makeKey(id, nodeDBDiscoverRoot)) - - n := nextNode(it) - if n == nil { - id[0] = 0 - continue seek // iterator exhausted - } - if n.ID == db.self { - continue seek - } - if now.Sub(db.lastPong(n.ID)) > maxAge { - continue seek - } - for i := range nodes { - if nodes[i].ID == n.ID { - continue seek // duplicate - } - } - nodes = append(nodes, n) - } - return nodes -} - -func (db *nodeDB) fetchTopicRegTickets(id NodeID) (issued, used uint32) { - key := makeKey(id, nodeDBTopicRegTickets) - blob, _ := db.lvl.Get(key, nil) - if len(blob) != 8 { - return 0, 0 - } - issued = binary.BigEndian.Uint32(blob[0:4]) - used = binary.BigEndian.Uint32(blob[4:8]) - return -} - -func (db *nodeDB) updateTopicRegTickets(id NodeID, issued, used uint32) error { - key := makeKey(id, nodeDBTopicRegTickets) - blob := make([]byte, 8) - binary.BigEndian.PutUint32(blob[0:4], issued) - binary.BigEndian.PutUint32(blob[4:8], used) - return db.lvl.Put(key, blob, nil) -} - -// reads the next node record from the iterator, skipping over other -// database entries. -func nextNode(it iterator.Iterator) *Node { - for end := false; !end; end = !it.Next() { - id, field := splitKey(it.Key()) - if field != nodeDBDiscoverRoot { - continue - } - var n Node - if err := rlp.DecodeBytes(it.Value(), &n); err != nil { - log.Warn(fmt.Sprintf("invalid node %x: %v", id, err)) - continue - } - return &n - } - return nil -} - -// close flushes and closes the database files. -func (db *nodeDB) close() { - close(db.quit) - db.lvl.Close() -} diff --git a/p2p/discv5/database_test.go b/p2p/discv5/database_test.go deleted file mode 100644 index 2b86dc9c..00000000 --- a/p2p/discv5/database_test.go +++ /dev/null @@ -1,380 +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 discv5 - -import ( - "bytes" - "io/ioutil" - "net" - "os" - "path/filepath" - "reflect" - "testing" - "time" -) - -var nodeDBKeyTests = []struct { - id NodeID - field string - key []byte -}{ - { - id: NodeID{}, - field: "version", - key: []byte{0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e}, // field - }, - { - id: MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - field: ":discover", - key: []byte{0x6e, 0x3a, // prefix - 0x1d, 0xd9, 0xd6, 0x5c, 0x45, 0x52, 0xb5, 0xeb, // node id - 0x43, 0xd5, 0xad, 0x55, 0xa2, 0xee, 0x3f, 0x56, // - 0xc6, 0xcb, 0xc1, 0xc6, 0x4a, 0x5c, 0x8d, 0x65, // - 0x9f, 0x51, 0xfc, 0xd5, 0x1b, 0xac, 0xe2, 0x43, // - 0x51, 0x23, 0x2b, 0x8d, 0x78, 0x21, 0x61, 0x7d, // - 0x2b, 0x29, 0xb5, 0x4b, 0x81, 0xcd, 0xef, 0xb9, // - 0xb3, 0xe9, 0xc3, 0x7d, 0x7f, 0xd5, 0xf6, 0x32, // - 0x70, 0xbc, 0xc9, 0xe1, 0xa6, 0xf6, 0xa4, 0x39, // - 0x3a, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, // field - }, - }, -} - -func TestNodeDBKeys(t *testing.T) { - for i, tt := range nodeDBKeyTests { - if key := makeKey(tt.id, tt.field); !bytes.Equal(key, tt.key) { - t.Errorf("make test %d: key mismatch: have 0x%x, want 0x%x", i, key, tt.key) - } - id, field := splitKey(tt.key) - if !bytes.Equal(id[:], tt.id[:]) { - t.Errorf("split test %d: id mismatch: have 0x%x, want 0x%x", i, id, tt.id) - } - if field != tt.field { - t.Errorf("split test %d: field mismatch: have 0x%x, want 0x%x", i, field, tt.field) - } - } -} - -var nodeDBInt64Tests = []struct { - key []byte - value int64 -}{ - {key: []byte{0x01}, value: 1}, - {key: []byte{0x02}, value: 2}, - {key: []byte{0x03}, value: 3}, -} - -func TestNodeDBInt64(t *testing.T) { - db, _ := newNodeDB("", Version, NodeID{}) - defer db.close() - - tests := nodeDBInt64Tests - for i := 0; i < len(tests); i++ { - // Insert the next value - if err := db.storeInt64(tests[i].key, tests[i].value); err != nil { - t.Errorf("test %d: failed to store value: %v", i, err) - } - // Check all existing and non existing values - for j := 0; j < len(tests); j++ { - num := db.fetchInt64(tests[j].key) - switch { - case j <= i && num != tests[j].value: - t.Errorf("test %d, item %d: value mismatch: have %v, want %v", i, j, num, tests[j].value) - case j > i && num != 0: - t.Errorf("test %d, item %d: value mismatch: have %v, want %v", i, j, num, 0) - } - } - } -} - -func TestNodeDBFetchStore(t *testing.T) { - node := NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{192, 168, 0, 1}, - 30303, - 30303, - ) - inst := time.Now() - num := 314 - - db, _ := newNodeDB("", Version, NodeID{}) - defer db.close() - - // Check fetch/store operations on a node ping object - if stored := db.lastPing(node.ID); stored.Unix() != 0 { - t.Errorf("ping: non-existing object: %v", stored) - } - if err := db.updateLastPing(node.ID, inst); err != nil { - t.Errorf("ping: failed to update: %v", err) - } - if stored := db.lastPing(node.ID); stored.Unix() != inst.Unix() { - t.Errorf("ping: value mismatch: have %v, want %v", stored, inst) - } - // Check fetch/store operations on a node pong object - if stored := db.lastPong(node.ID); stored.Unix() != 0 { - t.Errorf("pong: non-existing object: %v", stored) - } - if err := db.updateLastPong(node.ID, inst); err != nil { - t.Errorf("pong: failed to update: %v", err) - } - if stored := db.lastPong(node.ID); stored.Unix() != inst.Unix() { - t.Errorf("pong: value mismatch: have %v, want %v", stored, inst) - } - // Check fetch/store operations on a node findnode-failure object - if stored := db.findFails(node.ID); stored != 0 { - t.Errorf("find-node fails: non-existing object: %v", stored) - } - if err := db.updateFindFails(node.ID, num); err != nil { - t.Errorf("find-node fails: failed to update: %v", err) - } - if stored := db.findFails(node.ID); stored != num { - t.Errorf("find-node fails: value mismatch: have %v, want %v", stored, num) - } - // Check fetch/store operations on an actual node object - if stored := db.node(node.ID); stored != nil { - t.Errorf("node: non-existing object: %v", stored) - } - if err := db.updateNode(node); err != nil { - t.Errorf("node: failed to update: %v", err) - } - if stored := db.node(node.ID); stored == nil { - t.Errorf("node: not found") - } else if !reflect.DeepEqual(stored, node) { - t.Errorf("node: data mismatch: have %v, want %v", stored, node) - } -} - -var nodeDBSeedQueryNodes = []struct { - node *Node - pong time.Time -}{ - // This one should not be in the result set because its last - // pong time is too far in the past. - { - node: NewNode( - MustHexID("0x84d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 3}, - 30303, - 30303, - ), - pong: time.Now().Add(-3 * time.Hour), - }, - // This one shouldn't be in the result set because its - // nodeID is the local node's ID. - { - node: NewNode( - MustHexID("0x57d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 3}, - 30303, - 30303, - ), - pong: time.Now().Add(-4 * time.Second), - }, - - // These should be in the result set. - { - node: NewNode( - MustHexID("0x22d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 1}, - 30303, - 30303, - ), - pong: time.Now().Add(-2 * time.Second), - }, - { - node: NewNode( - MustHexID("0x44d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 2}, - 30303, - 30303, - ), - pong: time.Now().Add(-3 * time.Second), - }, - { - node: NewNode( - MustHexID("0xe2d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 3}, - 30303, - 30303, - ), - pong: time.Now().Add(-1 * time.Second), - }, -} - -func TestNodeDBSeedQuery(t *testing.T) { - db, _ := newNodeDB("", Version, nodeDBSeedQueryNodes[1].node.ID) - defer db.close() - - // Insert a batch of nodes for querying - for i, seed := range nodeDBSeedQueryNodes { - if err := db.updateNode(seed.node); err != nil { - t.Fatalf("node %d: failed to insert: %v", i, err) - } - if err := db.updateLastPong(seed.node.ID, seed.pong); err != nil { - t.Fatalf("node %d: failed to insert lastPong: %v", i, err) - } - } - - // Retrieve the entire batch and check for duplicates - seeds := db.querySeeds(len(nodeDBSeedQueryNodes)*2, time.Hour) - have := make(map[NodeID]struct{}) - for _, seed := range seeds { - have[seed.ID] = struct{}{} - } - want := make(map[NodeID]struct{}) - for _, seed := range nodeDBSeedQueryNodes[2:] { - want[seed.node.ID] = struct{}{} - } - if len(seeds) != len(want) { - t.Errorf("seed count mismatch: have %v, want %v", len(seeds), len(want)) - } - for id := range have { - if _, ok := want[id]; !ok { - t.Errorf("extra seed: %v", id) - } - } - for id := range want { - if _, ok := have[id]; !ok { - t.Errorf("missing seed: %v", id) - } - } -} - -func TestNodeDBPersistency(t *testing.T) { - root, err := ioutil.TempDir("", "nodedb-") - if err != nil { - t.Fatalf("failed to create temporary data folder: %v", err) - } - defer os.RemoveAll(root) - - var ( - testKey = []byte("somekey") - testInt = int64(314) - ) - - // Create a persistent database and store some values - db, err := newNodeDB(filepath.Join(root, "database"), Version, NodeID{}) - if err != nil { - t.Fatalf("failed to create persistent database: %v", err) - } - if err := db.storeInt64(testKey, testInt); err != nil { - t.Fatalf("failed to store value: %v.", err) - } - db.close() - - // Reopen the database and check the value - db, err = newNodeDB(filepath.Join(root, "database"), Version, NodeID{}) - if err != nil { - t.Fatalf("failed to open persistent database: %v", err) - } - if val := db.fetchInt64(testKey); val != testInt { - t.Fatalf("value mismatch: have %v, want %v", val, testInt) - } - db.close() - - // Change the database version and check flush - db, err = newNodeDB(filepath.Join(root, "database"), Version+1, NodeID{}) - if err != nil { - t.Fatalf("failed to open persistent database: %v", err) - } - if val := db.fetchInt64(testKey); val != 0 { - t.Fatalf("value mismatch: have %v, want %v", val, 0) - } - db.close() -} - -var nodeDBExpirationNodes = []struct { - node *Node - pong time.Time - exp bool -}{ - { - node: NewNode( - MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 1}, - 30303, - 30303, - ), - pong: time.Now().Add(-nodeDBNodeExpiration + time.Minute), - exp: false, - }, { - node: NewNode( - MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{127, 0, 0, 2}, - 30303, - 30303, - ), - pong: time.Now().Add(-nodeDBNodeExpiration - time.Minute), - exp: true, - }, -} - -func TestNodeDBExpiration(t *testing.T) { - db, _ := newNodeDB("", Version, NodeID{}) - defer db.close() - - // Add all the test nodes and set their last pong time - for i, seed := range nodeDBExpirationNodes { - if err := db.updateNode(seed.node); err != nil { - t.Fatalf("node %d: failed to insert: %v", i, err) - } - if err := db.updateLastPong(seed.node.ID, seed.pong); err != nil { - t.Fatalf("node %d: failed to update pong: %v", i, err) - } - } - // Expire some of them, and check the rest - if err := db.expireNodes(); err != nil { - t.Fatalf("failed to expire nodes: %v", err) - } - for i, seed := range nodeDBExpirationNodes { - node := db.node(seed.node.ID) - if (node == nil && !seed.exp) || (node != nil && seed.exp) { - t.Errorf("node %d: expiration mismatch: have %v, want %v", i, node, seed.exp) - } - } -} - -func TestNodeDBSelfExpiration(t *testing.T) { - // Find a node in the tests that shouldn't expire, and assign it as self - var self NodeID - for _, node := range nodeDBExpirationNodes { - if !node.exp { - self = node.node.ID - break - } - } - db, _ := newNodeDB("", Version, self) - defer db.close() - - // Add all the test nodes and set their last pong time - for i, seed := range nodeDBExpirationNodes { - if err := db.updateNode(seed.node); err != nil { - t.Fatalf("node %d: failed to insert: %v", i, err) - } - if err := db.updateLastPong(seed.node.ID, seed.pong); err != nil { - t.Fatalf("node %d: failed to update pong: %v", i, err) - } - } - // Expire the nodes and make sure self has been evacuated too - if err := db.expireNodes(); err != nil { - t.Fatalf("failed to expire nodes: %v", err) - } - node := db.node(self) - if node != nil { - t.Errorf("self not evacuated") - } -} diff --git a/p2p/discv5/net.go b/p2p/discv5/net.go deleted file mode 100644 index 82477fc7..00000000 --- a/p2p/discv5/net.go +++ /dev/null @@ -1,1271 +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 discv5 - -import ( - "bytes" - "crypto/ecdsa" - "errors" - "fmt" - "net" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" - "github.com/cryptoecc/ETH-ECC/rlp" - "golang.org/x/crypto/sha3" -) - -var ( - errInvalidEvent = errors.New("invalid in current state") - errNoQuery = errors.New("no pending query") -) - -const ( - autoRefreshInterval = 1 * time.Hour - bucketRefreshInterval = 1 * time.Minute - seedCount = 30 - seedMaxAge = 5 * 24 * time.Hour - lowPort = 1024 -) - -const testTopic = "foo" - -const ( - printTestImgLogs = false -) - -// Network manages the table and all protocol interaction. -type Network struct { - db *nodeDB // database of known nodes - conn transport - netrestrict *netutil.Netlist - - closed chan struct{} // closed when loop is done - closeReq chan struct{} // 'request to close' - refreshReq chan []*Node // lookups ask for refresh on this channel - refreshResp chan (<-chan struct{}) // ...and get the channel to block on from this one - read chan ingressPacket // ingress packets arrive here - timeout chan timeoutEvent - queryReq chan *findnodeQuery // lookups submit findnode queries on this channel - tableOpReq chan func() - tableOpResp chan struct{} - topicRegisterReq chan topicRegisterReq - topicSearchReq chan topicSearchReq - - // State of the main loop. - tab *Table - topictab *topicTable - ticketStore *ticketStore - nursery []*Node - nodes map[NodeID]*Node // tracks active nodes with state != known - timeoutTimers map[timeoutEvent]*time.Timer - - // Revalidation queues. - // Nodes put on these queues will be pinged eventually. - slowRevalidateQueue []*Node - fastRevalidateQueue []*Node - - // Buffers for state transition. - sendBuf []*ingressPacket -} - -// 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. -type transport interface { - sendPing(remote *Node, remoteAddr *net.UDPAddr, topics []Topic) (hash []byte) - sendNeighbours(remote *Node, nodes []*Node) - sendFindnodeHash(remote *Node, target common.Hash) - sendTopicRegister(remote *Node, topics []Topic, topicIdx int, pong []byte) - sendTopicNodes(remote *Node, queryHash common.Hash, nodes []*Node) - - send(remote *Node, ptype nodeEvent, p interface{}) (hash []byte) - - localAddr() *net.UDPAddr - Close() -} - -type findnodeQuery struct { - remote *Node - target common.Hash - reply chan<- []*Node - nresults int // counter for received nodes -} - -type topicRegisterReq struct { - add bool - topic Topic -} - -type topicSearchReq struct { - topic Topic - found chan<- *Node - lookup chan<- bool - delay time.Duration -} - -type topicSearchResult struct { - target lookupInfo - nodes []*Node -} - -type timeoutEvent struct { - ev nodeEvent - node *Node -} - -func newNetwork(conn transport, ourPubkey ecdsa.PublicKey, dbPath string, netrestrict *netutil.Netlist) (*Network, error) { - ourID := PubkeyID(&ourPubkey) - - var db *nodeDB - if dbPath != "" { - var err error - if db, err = newNodeDB(dbPath, Version, ourID); err != nil { - return nil, err - } - } - - tab := newTable(ourID, conn.localAddr()) - net := &Network{ - db: db, - conn: conn, - netrestrict: netrestrict, - tab: tab, - topictab: newTopicTable(db, tab.self), - ticketStore: newTicketStore(), - refreshReq: make(chan []*Node), - refreshResp: make(chan (<-chan struct{})), - closed: make(chan struct{}), - closeReq: make(chan struct{}), - read: make(chan ingressPacket, 100), - timeout: make(chan timeoutEvent), - timeoutTimers: make(map[timeoutEvent]*time.Timer), - tableOpReq: make(chan func()), - tableOpResp: make(chan struct{}), - queryReq: make(chan *findnodeQuery), - topicRegisterReq: make(chan topicRegisterReq), - topicSearchReq: make(chan topicSearchReq), - nodes: make(map[NodeID]*Node), - } - go net.loop() - return net, nil -} - -// Close terminates the network listener and flushes the node database. -func (net *Network) Close() { - net.conn.Close() - select { - case <-net.closed: - case net.closeReq <- struct{}{}: - <-net.closed - } -} - -// Self returns the local node. -// The returned node should not be modified by the caller. -func (net *Network) Self() *Node { - return net.tab.self -} - -// ReadRandomNodes fills the given slice with random nodes from the -// table. It will not write the same node more than once. The nodes in -// the slice are copies and can be modified by the caller. -func (net *Network) ReadRandomNodes(buf []*Node) (n int) { - net.reqTableOp(func() { n = net.tab.readRandomNodes(buf) }) - return n -} - -// SetFallbackNodes sets the initial points of contact. These nodes -// are used to connect to the network if the table is empty and there -// are no known nodes in the database. -func (net *Network) SetFallbackNodes(nodes []*Node) error { - nursery := make([]*Node, 0, len(nodes)) - for _, n := range nodes { - if err := n.validateComplete(); err != nil { - return fmt.Errorf("bad bootstrap/fallback node %q (%v)", n, err) - } - // Recompute cpy.sha because the node might not have been - // created by NewNode or ParseNode. - cpy := *n - cpy.sha = crypto.Keccak256Hash(n.ID[:]) - nursery = append(nursery, &cpy) - } - net.reqRefresh(nursery) - return nil -} - -// Resolve searches for a specific node with the given ID. -// It returns nil if the node could not be found. -func (net *Network) Resolve(targetID NodeID) *Node { - result := net.lookup(crypto.Keccak256Hash(targetID[:]), true) - for _, n := range result { - if n.ID == targetID { - return n - } - } - return nil -} - -// 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. -// -// The local node may be included in the result. -func (net *Network) Lookup(targetID NodeID) []*Node { - return net.lookup(crypto.Keccak256Hash(targetID[:]), false) -} - -func (net *Network) lookup(target common.Hash, stopOnMatch bool) []*Node { - var ( - asked = make(map[NodeID]bool) - seen = make(map[NodeID]bool) - reply = make(chan []*Node, alpha) - result = nodesByDistance{target: target} - pendingQueries = 0 - ) - // Get initial answers from the local node. - result.push(net.tab.self, bucketSize) - for { - // Ask the α 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++ - net.reqQueryFindnode(n, target, reply) - } - } - if pendingQueries == 0 { - // We have asked all closest nodes, stop the search. - break - } - // Wait for the next reply. - select { - case nodes := <-reply: - for _, n := range nodes { - if n != nil && !seen[n.ID] { - seen[n.ID] = true - result.push(n, bucketSize) - if stopOnMatch && n.sha == target { - return result.entries - } - } - } - pendingQueries-- - case <-time.After(respTimeout): - // forget all pending requests, start new ones - pendingQueries = 0 - reply = make(chan []*Node, alpha) - } - } - return result.entries -} - -func (net *Network) RegisterTopic(topic Topic, stop <-chan struct{}) { - select { - case net.topicRegisterReq <- topicRegisterReq{true, topic}: - case <-net.closed: - return - } - select { - case <-net.closed: - case <-stop: - select { - case net.topicRegisterReq <- topicRegisterReq{false, topic}: - case <-net.closed: - } - } -} - -func (net *Network) SearchTopic(topic Topic, setPeriod <-chan time.Duration, found chan<- *Node, lookup chan<- bool) { - for { - select { - case <-net.closed: - return - case delay, ok := <-setPeriod: - select { - case net.topicSearchReq <- topicSearchReq{topic: topic, found: found, lookup: lookup, delay: delay}: - case <-net.closed: - return - } - if !ok { - return - } - } - } -} - -func (net *Network) reqRefresh(nursery []*Node) <-chan struct{} { - select { - case net.refreshReq <- nursery: - return <-net.refreshResp - case <-net.closed: - return net.closed - } -} - -func (net *Network) reqQueryFindnode(n *Node, target common.Hash, reply chan []*Node) bool { - q := &findnodeQuery{remote: n, target: target, reply: reply} - select { - case net.queryReq <- q: - return true - case <-net.closed: - return false - } -} - -func (net *Network) reqReadPacket(pkt ingressPacket) { - select { - case net.read <- pkt: - case <-net.closed: - } -} - -func (net *Network) reqTableOp(f func()) (called bool) { - select { - case net.tableOpReq <- f: - <-net.tableOpResp - return true - case <-net.closed: - return false - } -} - -// TODO: external address handling. - -type topicSearchInfo struct { - lookupChn chan<- bool - period time.Duration -} - -const maxSearchCount = 5 - -func (net *Network) loop() { - var ( - refreshTimer = time.NewTicker(autoRefreshInterval) - bucketRefreshTimer = time.NewTimer(bucketRefreshInterval) - refreshDone chan struct{} // closed when the 'refresh' lookup has ended - ) - - // Tracking the next ticket to register. - var ( - nextTicket *ticketRef - nextRegisterTimer *time.Timer - nextRegisterTime <-chan time.Time - ) - defer func() { - if nextRegisterTimer != nil { - nextRegisterTimer.Stop() - } - }() - resetNextTicket := func() { - ticket, timeout := net.ticketStore.nextFilteredTicket() - if nextTicket != ticket { - nextTicket = ticket - if nextRegisterTimer != nil { - nextRegisterTimer.Stop() - nextRegisterTime = nil - } - if ticket != nil { - nextRegisterTimer = time.NewTimer(timeout) - nextRegisterTime = nextRegisterTimer.C - } - } - } - - // Tracking registration and search lookups. - var ( - topicRegisterLookupTarget lookupInfo - topicRegisterLookupDone chan []*Node - topicRegisterLookupTick = time.NewTimer(0) - searchReqWhenRefreshDone []topicSearchReq - searchInfo = make(map[Topic]topicSearchInfo) - activeSearchCount int - ) - topicSearchLookupDone := make(chan topicSearchResult, 100) - topicSearch := make(chan Topic, 100) - <-topicRegisterLookupTick.C - - statsDump := time.NewTicker(10 * time.Second) - -loop: - for { - resetNextTicket() - - select { - case <-net.closeReq: - log.Trace("<-net.closeReq") - break loop - - // Ingress packet handling. - case pkt := <-net.read: - //fmt.Println("read", pkt.ev) - log.Trace("<-net.read") - n := net.internNode(&pkt) - prestate := n.state - status := "ok" - if err := net.handle(n, pkt.ev, &pkt); err != nil { - status = err.Error() - } - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprintf("<<< (%d) %v from %x@%v: %v -> %v (%v)", - net.tab.count, pkt.ev, pkt.remoteID[:8], pkt.remoteAddr, prestate, n.state, status) - }}) - // TODO: persist state if n.state goes >= known, delete if it goes <= known - - // State transition timeouts. - case timeout := <-net.timeout: - log.Trace("<-net.timeout") - if net.timeoutTimers[timeout] == nil { - // Stale timer (was aborted). - continue - } - delete(net.timeoutTimers, timeout) - prestate := timeout.node.state - status := "ok" - if err := net.handle(timeout.node, timeout.ev, nil); err != nil { - status = err.Error() - } - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprintf("--- (%d) %v for %x@%v: %v -> %v (%v)", - net.tab.count, timeout.ev, timeout.node.ID[:8], timeout.node.addr(), prestate, timeout.node.state, status) - }}) - - // Querying. - case q := <-net.queryReq: - log.Trace("<-net.queryReq") - if !q.start(net) { - q.remote.deferQuery(q) - } - - // Interacting with the table. - case f := <-net.tableOpReq: - log.Trace("<-net.tableOpReq") - f() - net.tableOpResp <- struct{}{} - - // Topic registration stuff. - case req := <-net.topicRegisterReq: - log.Trace("<-net.topicRegisterReq") - if !req.add { - net.ticketStore.removeRegisterTopic(req.topic) - continue - } - net.ticketStore.addTopic(req.topic, true) - // If we're currently waiting idle (nothing to look up), give the ticket store a - // chance to start it sooner. This should speed up convergence of the radius - // determination for new topics. - // if topicRegisterLookupDone == nil { - if topicRegisterLookupTarget.target == (common.Hash{}) { - log.Trace("topicRegisterLookupTarget == null") - if topicRegisterLookupTick.Stop() { - <-topicRegisterLookupTick.C - } - target, delay := net.ticketStore.nextRegisterLookup() - topicRegisterLookupTarget = target - topicRegisterLookupTick.Reset(delay) - } - - case nodes := <-topicRegisterLookupDone: - log.Trace("<-topicRegisterLookupDone") - net.ticketStore.registerLookupDone(topicRegisterLookupTarget, nodes, func(n *Node) []byte { - net.ping(n, n.addr()) - return n.pingEcho - }) - target, delay := net.ticketStore.nextRegisterLookup() - topicRegisterLookupTarget = target - topicRegisterLookupTick.Reset(delay) - topicRegisterLookupDone = nil - - case <-topicRegisterLookupTick.C: - log.Trace("<-topicRegisterLookupTick") - if (topicRegisterLookupTarget.target == common.Hash{}) { - target, delay := net.ticketStore.nextRegisterLookup() - topicRegisterLookupTarget = target - topicRegisterLookupTick.Reset(delay) - topicRegisterLookupDone = nil - } else { - topicRegisterLookupDone = make(chan []*Node) - target := topicRegisterLookupTarget.target - go func() { topicRegisterLookupDone <- net.lookup(target, false) }() - } - - case <-nextRegisterTime: - log.Trace("<-nextRegisterTime") - net.ticketStore.ticketRegistered(*nextTicket) - //fmt.Println("sendTopicRegister", nextTicket.t.node.addr().String(), nextTicket.t.topics, nextTicket.idx, nextTicket.t.pong) - net.conn.sendTopicRegister(nextTicket.t.node, nextTicket.t.topics, nextTicket.idx, nextTicket.t.pong) - - case req := <-net.topicSearchReq: - if refreshDone == nil { - log.Trace("<-net.topicSearchReq") - info, ok := searchInfo[req.topic] - if ok { - if req.delay == time.Duration(0) { - delete(searchInfo, req.topic) - net.ticketStore.removeSearchTopic(req.topic) - } else { - info.period = req.delay - searchInfo[req.topic] = info - } - continue - } - if req.delay != time.Duration(0) { - var info topicSearchInfo - info.period = req.delay - info.lookupChn = req.lookup - searchInfo[req.topic] = info - net.ticketStore.addSearchTopic(req.topic, req.found) - topicSearch <- req.topic - } - } else { - searchReqWhenRefreshDone = append(searchReqWhenRefreshDone, req) - } - - case topic := <-topicSearch: - if activeSearchCount < maxSearchCount { - activeSearchCount++ - target := net.ticketStore.nextSearchLookup(topic) - go func() { - nodes := net.lookup(target.target, false) - topicSearchLookupDone <- topicSearchResult{target: target, nodes: nodes} - }() - } - period := searchInfo[topic].period - if period != time.Duration(0) { - go func() { - time.Sleep(period) - topicSearch <- topic - }() - } - - case res := <-topicSearchLookupDone: - activeSearchCount-- - if lookupChn := searchInfo[res.target.topic].lookupChn; lookupChn != nil { - lookupChn <- net.ticketStore.radius[res.target.topic].converged - } - net.ticketStore.searchLookupDone(res.target, res.nodes, func(n *Node, topic Topic) []byte { - if n.state != nil && n.state.canQuery { - return net.conn.send(n, topicQueryPacket, topicQuery{Topic: topic}) // TODO: set expiration - } - if n.state == unknown { - net.ping(n, n.addr()) - } - return nil - }) - - case <-statsDump.C: - log.Trace("<-statsDump.C") - /*r, ok := net.ticketStore.radius[testTopic] - if !ok { - fmt.Printf("(%x) no radius @ %v\n", net.tab.self.ID[:8], time.Now()) - } else { - topics := len(net.ticketStore.tickets) - tickets := len(net.ticketStore.nodes) - rad := r.radius / (maxRadius/10000+1) - fmt.Printf("(%x) topics:%d radius:%d tickets:%d @ %v\n", net.tab.self.ID[:8], topics, rad, tickets, time.Now()) - }*/ - - tm := mclock.Now() - for topic, r := range net.ticketStore.radius { - if printTestImgLogs { - rad := r.radius / (maxRadius/1000000 + 1) - minrad := r.minRadius / (maxRadius/1000000 + 1) - fmt.Printf("*R %d %v %016x %v\n", tm/1000000, topic, net.tab.self.sha[:8], rad) - fmt.Printf("*MR %d %v %016x %v\n", tm/1000000, topic, net.tab.self.sha[:8], minrad) - } - } - for topic, t := range net.topictab.topics { - wp := t.wcl.nextWaitPeriod(tm) - if printTestImgLogs { - fmt.Printf("*W %d %v %016x %d\n", tm/1000000, topic, net.tab.self.sha[:8], wp/1000000) - } - } - - // Periodic / lookup-initiated bucket refresh. - case <-refreshTimer.C: - log.Trace("<-refreshTimer.C") - // TODO: ideally we would start the refresh timer after - // fallback nodes have been set for the first time. - if refreshDone == nil { - refreshDone = make(chan struct{}) - net.refresh(refreshDone) - } - case <-bucketRefreshTimer.C: - target := net.tab.chooseBucketRefreshTarget() - go func() { - net.lookup(target, false) - bucketRefreshTimer.Reset(bucketRefreshInterval) - }() - case newNursery := <-net.refreshReq: - log.Trace("<-net.refreshReq") - if newNursery != nil { - net.nursery = newNursery - } - if refreshDone == nil { - refreshDone = make(chan struct{}) - net.refresh(refreshDone) - } - net.refreshResp <- refreshDone - case <-refreshDone: - log.Trace("<-net.refreshDone", "table size", net.tab.count) - if net.tab.count != 0 { - refreshDone = nil - list := searchReqWhenRefreshDone - searchReqWhenRefreshDone = nil - go func() { - for _, req := range list { - net.topicSearchReq <- req - } - }() - } else { - refreshDone = make(chan struct{}) - net.refresh(refreshDone) - } - } - } - log.Trace("loop stopped") - - log.Debug(fmt.Sprintf("shutting down")) - if net.conn != nil { - net.conn.Close() - } - if refreshDone != nil { - // TODO: wait for pending refresh. - //<-refreshResults - } - // Cancel all pending timeouts. - for _, timer := range net.timeoutTimers { - timer.Stop() - } - if net.db != nil { - net.db.close() - } - close(net.closed) -} - -// Everything below runs on the Network.loop goroutine -// and can modify Node, Table and Network at any time without locking. - -func (net *Network) refresh(done chan<- struct{}) { - var seeds []*Node - if net.db != nil { - seeds = net.db.querySeeds(seedCount, seedMaxAge) - } - if len(seeds) == 0 { - seeds = net.nursery - } - if len(seeds) == 0 { - log.Trace("no seed nodes found") - time.AfterFunc(time.Second*10, func() { close(done) }) - return - } - for _, n := range seeds { - log.Debug("", "msg", log.Lazy{Fn: func() string { - var age string - if net.db != nil { - age = time.Since(net.db.lastPong(n.ID)).String() - } else { - age = "unknown" - } - return fmt.Sprintf("seed node (age %s): %v", age, n) - }}) - n = net.internNodeFromDB(n) - if n.state == unknown { - net.transition(n, verifyinit) - } - // Force-add the seed node so Lookup does something. - // It will be deleted again if verification fails. - net.tab.add(n) - } - // Start self lookup to fill up the buckets. - go func() { - net.Lookup(net.tab.self.ID) - close(done) - }() -} - -// Node Interning. - -func (net *Network) internNode(pkt *ingressPacket) *Node { - if n := net.nodes[pkt.remoteID]; n != nil { - n.IP = pkt.remoteAddr.IP - n.UDP = uint16(pkt.remoteAddr.Port) - n.TCP = uint16(pkt.remoteAddr.Port) - return n - } - n := NewNode(pkt.remoteID, pkt.remoteAddr.IP, uint16(pkt.remoteAddr.Port), uint16(pkt.remoteAddr.Port)) - n.state = unknown - net.nodes[pkt.remoteID] = n - return n -} - -func (net *Network) internNodeFromDB(dbn *Node) *Node { - if n := net.nodes[dbn.ID]; n != nil { - return n - } - n := NewNode(dbn.ID, dbn.IP, dbn.UDP, dbn.TCP) - n.state = unknown - net.nodes[n.ID] = n - return n -} - -func (net *Network) internNodeFromNeighbours(sender *net.UDPAddr, rn rpcNode) (n *Node, err error) { - if rn.ID == net.tab.self.ID { - return nil, errors.New("is self") - } - if rn.UDP <= lowPort { - return nil, errors.New("low port") - } - n = net.nodes[rn.ID] - if n == nil { - // We haven't seen this node before. - n, err = nodeFromRPC(sender, rn) - if net.netrestrict != nil && !net.netrestrict.Contains(n.IP) { - return n, errors.New("not contained in netrestrict whitelist") - } - if err == nil { - n.state = unknown - net.nodes[n.ID] = n - } - return n, err - } - if !n.IP.Equal(rn.IP) || n.UDP != rn.UDP || n.TCP != rn.TCP { - if n.state == known { - // reject address change if node is known by us - err = fmt.Errorf("metadata mismatch: got %v, want %v", rn, n) - } else { - // accept otherwise; this will be handled nicer with signed ENRs - n.IP = rn.IP - n.UDP = rn.UDP - n.TCP = rn.TCP - } - } - return n, err -} - -// nodeNetGuts is embedded in Node and contains fields. -type nodeNetGuts struct { - // This is a cached copy of sha3(ID) which is used for node - // distance calculations. This is part of Node in order to make it - // possible to write tests that need a node at a certain distance. - // In those tests, the content of sha will not actually correspond - // with ID. - sha common.Hash - - // State machine fields. Access to these fields - // is restricted to the Network.loop goroutine. - state *nodeState - pingEcho []byte // hash of last ping sent by us - pingTopics []Topic // topic set sent by us in last ping - deferredQueries []*findnodeQuery // queries that can't be sent yet - pendingNeighbours *findnodeQuery // current query, waiting for reply - queryTimeouts int -} - -func (n *nodeNetGuts) deferQuery(q *findnodeQuery) { - n.deferredQueries = append(n.deferredQueries, q) -} - -func (n *nodeNetGuts) startNextQuery(net *Network) { - if len(n.deferredQueries) == 0 { - return - } - nextq := n.deferredQueries[0] - if nextq.start(net) { - n.deferredQueries = append(n.deferredQueries[:0], n.deferredQueries[1:]...) - } -} - -func (q *findnodeQuery) start(net *Network) bool { - // Satisfy queries against the local node directly. - if q.remote == net.tab.self { - closest := net.tab.closest(q.target, bucketSize) - q.reply <- closest.entries - return true - } - if q.remote.state.canQuery && q.remote.pendingNeighbours == nil { - net.conn.sendFindnodeHash(q.remote, q.target) - net.timedEvent(respTimeout, q.remote, neighboursTimeout) - q.remote.pendingNeighbours = q - return true - } - // If the node is not known yet, it won't accept queries. - // Initiate the transition to known. - // The request will be sent later when the node reaches known state. - if q.remote.state == unknown { - net.transition(q.remote, verifyinit) - } - return false -} - -// Node Events (the input to the state machine). - -type nodeEvent uint - -//go:generate stringer -type=nodeEvent - -const ( - - // Packet type events. - // These correspond to packet types in the UDP protocol. - pingPacket = iota + 1 - pongPacket - findnodePacket - neighborsPacket - findnodeHashPacket - topicRegisterPacket - topicQueryPacket - topicNodesPacket - - // Non-packet events. - // Event values in this category are allocated outside - // the packet type range (packet types are encoded as a single byte). - pongTimeout nodeEvent = iota + 256 - pingTimeout - neighboursTimeout -) - -// Node State Machine. - -type nodeState struct { - name string - handle func(*Network, *Node, nodeEvent, *ingressPacket) (next *nodeState, err error) - enter func(*Network, *Node) - canQuery bool -} - -func (s *nodeState) String() string { - return s.name -} - -var ( - unknown *nodeState - verifyinit *nodeState - verifywait *nodeState - remoteverifywait *nodeState - known *nodeState - contested *nodeState - unresponsive *nodeState -) - -func init() { - unknown = &nodeState{ - name: "unknown", - enter: func(net *Network, n *Node) { - net.tab.delete(n) - n.pingEcho = nil - // Abort active queries. - for _, q := range n.deferredQueries { - q.reply <- nil - } - n.deferredQueries = nil - if n.pendingNeighbours != nil { - n.pendingNeighbours.reply <- nil - n.pendingNeighbours = nil - } - n.queryTimeouts = 0 - }, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - net.ping(n, pkt.remoteAddr) - return verifywait, nil - default: - return unknown, errInvalidEvent - } - }, - } - - verifyinit = &nodeState{ - name: "verifyinit", - enter: func(net *Network, n *Node) { - net.ping(n, n.addr()) - }, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - return verifywait, nil - case pongPacket: - err := net.handleKnownPong(n, pkt) - return remoteverifywait, err - case pongTimeout: - return unknown, nil - default: - return verifyinit, errInvalidEvent - } - }, - } - - verifywait = &nodeState{ - name: "verifywait", - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - return verifywait, nil - case pongPacket: - err := net.handleKnownPong(n, pkt) - return known, err - case pongTimeout: - return unknown, nil - default: - return verifywait, errInvalidEvent - } - }, - } - - remoteverifywait = &nodeState{ - name: "remoteverifywait", - enter: func(net *Network, n *Node) { - net.timedEvent(respTimeout, n, pingTimeout) - }, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - return remoteverifywait, nil - case pingTimeout: - return known, nil - default: - return remoteverifywait, errInvalidEvent - } - }, - } - - known = &nodeState{ - name: "known", - canQuery: true, - enter: func(net *Network, n *Node) { - n.queryTimeouts = 0 - n.startNextQuery(net) - // Insert into the table and start revalidation of the last node - // in the bucket if it is full. - last := net.tab.add(n) - if last != nil && last.state == known { - // TODO: do this asynchronously - net.transition(last, contested) - } - }, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - return known, nil - case pongPacket: - err := net.handleKnownPong(n, pkt) - return known, err - default: - return net.handleQueryEvent(n, ev, pkt) - } - }, - } - - contested = &nodeState{ - name: "contested", - canQuery: true, - enter: func(net *Network, n *Node) { - net.ping(n, n.addr()) - }, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pongPacket: - // Node is still alive. - err := net.handleKnownPong(n, pkt) - return known, err - case pongTimeout: - net.tab.deleteReplace(n) - return unresponsive, nil - case pingPacket: - net.handlePing(n, pkt) - return contested, nil - default: - return net.handleQueryEvent(n, ev, pkt) - } - }, - } - - unresponsive = &nodeState{ - name: "unresponsive", - canQuery: true, - handle: func(net *Network, n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case pingPacket: - net.handlePing(n, pkt) - return known, nil - case pongPacket: - err := net.handleKnownPong(n, pkt) - return known, err - default: - return net.handleQueryEvent(n, ev, pkt) - } - }, - } -} - -// handle processes packets sent by n and events related to n. -func (net *Network) handle(n *Node, ev nodeEvent, pkt *ingressPacket) error { - //fmt.Println("handle", n.addr().String(), n.state, ev) - if pkt != nil { - if err := net.checkPacket(n, ev, pkt); err != nil { - //fmt.Println("check err:", err) - return err - } - // Start the background expiration goroutine after the first - // successful communication. Subsequent calls have no effect if it - // is already running. We do this here instead of somewhere else - // so that the search for seed nodes also considers older nodes - // that would otherwise be removed by the expirer. - if net.db != nil { - net.db.ensureExpirer() - } - } - if n.state == nil { - n.state = unknown //??? - } - next, err := n.state.handle(net, n, ev, pkt) - net.transition(n, next) - //fmt.Println("new state:", n.state) - return err -} - -func (net *Network) checkPacket(n *Node, ev nodeEvent, pkt *ingressPacket) error { - // Replay prevention checks. - switch ev { - case pingPacket, findnodeHashPacket, neighborsPacket: - // TODO: check date is > last date seen - // TODO: check ping version - case pongPacket: - if !bytes.Equal(pkt.data.(*pong).ReplyTok, n.pingEcho) { - // fmt.Println("pong reply token mismatch") - return fmt.Errorf("pong reply token mismatch") - } - n.pingEcho = nil - } - // Address validation. - // TODO: Ideally we would do the following: - // - reject all packets with wrong address except ping. - // - for ping with new address, transition to verifywait but keep the - // previous node (with old address) around. if the new one reaches known, - // swap it out. - return nil -} - -func (net *Network) transition(n *Node, next *nodeState) { - if n.state != next { - n.state = next - if next.enter != nil { - next.enter(net, n) - } - } - - // TODO: persist/unpersist node -} - -func (net *Network) timedEvent(d time.Duration, n *Node, ev nodeEvent) { - timeout := timeoutEvent{ev, n} - net.timeoutTimers[timeout] = time.AfterFunc(d, func() { - select { - case net.timeout <- timeout: - case <-net.closed: - } - }) -} - -func (net *Network) abortTimedEvent(n *Node, ev nodeEvent) { - timer := net.timeoutTimers[timeoutEvent{ev, n}] - if timer != nil { - timer.Stop() - delete(net.timeoutTimers, timeoutEvent{ev, n}) - } -} - -func (net *Network) ping(n *Node, addr *net.UDPAddr) { - //fmt.Println("ping", n.addr().String(), n.ID.String(), n.sha.Hex()) - if n.pingEcho != nil || n.ID == net.tab.self.ID { - //fmt.Println(" not sent") - return - } - log.Trace("Pinging remote node", "node", n.ID) - n.pingTopics = net.ticketStore.regTopicSet() - n.pingEcho = net.conn.sendPing(n, addr, n.pingTopics) - net.timedEvent(respTimeout, n, pongTimeout) -} - -func (net *Network) handlePing(n *Node, pkt *ingressPacket) { - log.Trace("Handling remote ping", "node", n.ID) - ping := pkt.data.(*ping) - n.TCP = ping.From.TCP - t := net.topictab.getTicket(n, ping.Topics) - - pong := &pong{ - To: makeEndpoint(n.addr(), n.TCP), // TODO: maybe use known TCP port from DB - ReplyTok: pkt.hash, - Expiration: uint64(time.Now().Add(expiration).Unix()), - } - ticketToPong(t, pong) - net.conn.send(n, pongPacket, pong) -} - -func (net *Network) handleKnownPong(n *Node, pkt *ingressPacket) error { - log.Trace("Handling known pong", "node", n.ID) - net.abortTimedEvent(n, pongTimeout) - now := mclock.Now() - ticket, err := pongToTicket(now, n.pingTopics, n, pkt) - if err == nil { - // fmt.Printf("(%x) ticket: %+v\n", net.tab.self.ID[:8], pkt.data) - net.ticketStore.addTicket(now, pkt.data.(*pong).ReplyTok, ticket) - } else { - log.Trace("Failed to convert pong to ticket", "err", err) - } - n.pingEcho = nil - n.pingTopics = nil - return err -} - -func (net *Network) handleQueryEvent(n *Node, ev nodeEvent, pkt *ingressPacket) (*nodeState, error) { - switch ev { - case findnodePacket: - target := crypto.Keccak256Hash(pkt.data.(*findnode).Target[:]) - results := net.tab.closest(target, bucketSize).entries - net.conn.sendNeighbours(n, results) - return n.state, nil - case neighborsPacket: - err := net.handleNeighboursPacket(n, pkt) - return n.state, err - case neighboursTimeout: - if n.pendingNeighbours != nil { - n.pendingNeighbours.reply <- nil - n.pendingNeighbours = nil - } - n.queryTimeouts++ - if n.queryTimeouts > maxFindnodeFailures && n.state == known { - return contested, errors.New("too many timeouts") - } - return n.state, nil - - // v5 - - case findnodeHashPacket: - results := net.tab.closest(pkt.data.(*findnodeHash).Target, bucketSize).entries - net.conn.sendNeighbours(n, results) - return n.state, nil - case topicRegisterPacket: - //fmt.Println("got topicRegisterPacket") - regdata := pkt.data.(*topicRegister) - pong, err := net.checkTopicRegister(regdata) - if err != nil { - //fmt.Println(err) - return n.state, fmt.Errorf("bad waiting ticket: %v", err) - } - net.topictab.useTicket(n, pong.TicketSerial, regdata.Topics, int(regdata.Idx), pong.Expiration, pong.WaitPeriods) - return n.state, nil - case topicQueryPacket: - // TODO: handle expiration - topic := pkt.data.(*topicQuery).Topic - results := net.topictab.getEntries(topic) - if _, ok := net.ticketStore.tickets[topic]; ok { - results = append(results, net.tab.self) // we're not registering in our own table but if we're advertising, return ourselves too - } - if len(results) > 10 { - results = results[:10] - } - var hash common.Hash - copy(hash[:], pkt.hash) - net.conn.sendTopicNodes(n, hash, results) - return n.state, nil - case topicNodesPacket: - p := pkt.data.(*topicNodes) - if net.ticketStore.gotTopicNodes(n, p.Echo, p.Nodes) { - n.queryTimeouts++ - if n.queryTimeouts > maxFindnodeFailures && n.state == known { - return contested, errors.New("too many timeouts") - } - } - return n.state, nil - - default: - return n.state, errInvalidEvent - } -} - -func (net *Network) checkTopicRegister(data *topicRegister) (*pong, error) { - var pongpkt ingressPacket - if err := decodePacket(data.Pong, &pongpkt); err != nil { - return nil, err - } - if pongpkt.ev != pongPacket { - return nil, errors.New("is not pong packet") - } - if pongpkt.remoteID != net.tab.self.ID { - return nil, errors.New("not signed by us") - } - // check that we previously authorised all topics - // that the other side is trying to register. - if rlpHash(data.Topics) != pongpkt.data.(*pong).TopicHash { - return nil, errors.New("topic hash mismatch") - } - if data.Idx >= uint(len(data.Topics)) { - return nil, errors.New("topic index out of range") - } - return pongpkt.data.(*pong), nil -} - -func rlpHash(x interface{}) (h common.Hash) { - hw := sha3.NewLegacyKeccak256() - rlp.Encode(hw, x) - hw.Sum(h[:0]) - return h -} - -func (net *Network) handleNeighboursPacket(n *Node, pkt *ingressPacket) error { - if n.pendingNeighbours == nil { - return errNoQuery - } - net.abortTimedEvent(n, neighboursTimeout) - - req := pkt.data.(*neighbors) - nodes := make([]*Node, len(req.Nodes)) - for i, rn := range req.Nodes { - nn, err := net.internNodeFromNeighbours(pkt.remoteAddr, rn) - if err != nil { - log.Debug(fmt.Sprintf("invalid neighbour (%v) from %x@%v: %v", rn.IP, n.ID[:8], pkt.remoteAddr, err)) - continue - } - nodes[i] = nn - // Start validation of query results immediately. - // This fills the table quickly. - // TODO: generates way too many packets, maybe do it via queue. - if nn.state == unknown { - net.transition(nn, verifyinit) - } - } - // TODO: don't ignore second packet - n.pendingNeighbours.reply <- nodes - n.pendingNeighbours = nil - // Now that this query is done, start the next one. - n.startNextQuery(net) - return nil -} diff --git a/p2p/discv5/net_test.go b/p2p/discv5/net_test.go deleted file mode 100644 index 2a46f552..00000000 --- a/p2p/discv5/net_test.go +++ /dev/null @@ -1,374 +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 discv5 - -import ( - "fmt" - "net" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -func TestNetwork_Lookup(t *testing.T) { - key, _ := crypto.GenerateKey() - network, err := newNetwork(lookupTestnet, key.PublicKey, "", nil) - if err != nil { - t.Fatal(err) - } - lookupTestnet.net = network - defer network.Close() - - // lookup on empty table returns no nodes - // if results := network.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) - seeds := []*Node{NewNode(lookupTestnet.dists[256][0], net.IP{10, 0, 2, 99}, lowPort+256, 999)} - if err := network.SetFallbackNodes(seeds); err != nil { - t.Fatal(err) - } - time.Sleep(3 * time.Second) - - results := network.Lookup(lookupTestnet.target) - t.Logf("results:") - for _, e := range results { - t.Logf(" ld=%d, %x", logdist(lookupTestnet.targetSha, e.sha), e.sha[:]) - } - 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 -} - -// 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: MustHexID("166aea4f556532c6d34e8b740e5d314af7e9ac0ca79833bd751d6b665f12dfd38ec563c363b32f02aef4a80b44fd3def94612d497b99cb5f17fd24de454927ec"), - targetSha: common.Hash{0x5c, 0x94, 0x4e, 0xe5, 0x1c, 0x5a, 0xe9, 0xf7, 0x2a, 0x95, 0xec, 0xcb, 0x8a, 0xed, 0x3, 0x74, 0xee, 0xcb, 0x51, 0x19, 0xd7, 0x20, 0xcb, 0xea, 0x68, 0x13, 0xe8, 0xe0, 0xd6, 0xad, 0x92, 0x61}, - dists: [257][]NodeID{ - 240: { - MustHexID("2001ad5e3e80c71b952161bc0186731cf5ffe942d24a79230a0555802296238e57ea7a32f5b6f18564eadc1c65389448481f8c9338df0a3dbd18f708cbc2cbcb"), - MustHexID("6ba3f4f57d084b6bf94cc4555b8c657e4a8ac7b7baf23c6874efc21dd1e4f56b7eb2721e07f5242d2f1d8381fc8cae535e860197c69236798ba1ad231b105794"), - }, - 244: { - MustHexID("696ba1f0a9d55c59246f776600542a9e6432490f0cd78f8bb55a196918df2081a9b521c3c3ba48e465a75c10768807717f8f689b0b4adce00e1c75737552a178"), - }, - 246: { - MustHexID("d6d32178bdc38416f46ffb8b3ec9e4cb2cfff8d04dd7e4311a70e403cb62b10be1b447311b60b4f9ee221a8131fc2cbd45b96dd80deba68a949d467241facfa8"), - MustHexID("3ea3d04a43a3dfb5ac11cffc2319248cf41b6279659393c2f55b8a0a5fc9d12581a9d97ef5d8ff9b5abf3321a290e8f63a4f785f450dc8a672aba3ba2ff4fdab"), - MustHexID("2fc897f05ae585553e5c014effd3078f84f37f9333afacffb109f00ca8e7a3373de810a3946be971cbccdfd40249f9fe7f322118ea459ac71acca85a1ef8b7f4"), - }, - 247: { - MustHexID("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), - MustHexID("312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069db"), - MustHexID("38643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aac"), - MustHexID("8dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df73"), - MustHexID("8b58c6073dd98bbad4e310b97186c8f822d3a5c7d57af40e2136e88e315afd115edb27d2d0685a908cfe5aa49d0debdda6e6e63972691d6bd8c5af2d771dd2a9"), - MustHexID("2cbb718b7dc682da19652e7d9eb4fefaf7b7147d82c1c2b6805edf77b85e29fde9f6da195741467ff2638dc62c8d3e014ea5686693c15ed0080b6de90354c137"), - MustHexID("e84027696d3f12f2de30a9311afea8fbd313c2360daff52bb5fc8c7094d5295758bec3134e4eef24e4cdf377b40da344993284628a7a346eba94f74160998feb"), - MustHexID("f1357a4f04f9d33753a57c0b65ba20a5d8777abbffd04e906014491c9103fb08590e45548d37aa4bd70965e2e81ddba94f31860348df01469eec8c1829200a68"), - MustHexID("4ab0a75941b12892369b4490a1928c8ca52a9ad6d3dffbd1d8c0b907bc200fe74c022d011ec39b64808a39c0ca41f1d3254386c3e7733e7044c44259486461b6"), - MustHexID("d45150a72dc74388773e68e03133a3b5f51447fe91837d566706b3c035ee4b56f160c878c6273394daee7f56cc398985269052f22f75a8057df2fe6172765354"), - }, - 248: { - MustHexID("6aadfce366a189bab08ac84721567483202c86590642ea6d6a14f37ca78d82bdb6509eb7b8b2f6f63c78ae3ae1d8837c89509e41497d719b23ad53dd81574afa"), - MustHexID("a605ecfd6069a4cf4cf7f5840e5bc0ce10d23a3ac59e2aaa70c6afd5637359d2519b4524f56fc2ca180cdbebe54262f720ccaae8c1b28fd553c485675831624d"), - MustHexID("29701451cb9448ca33fc33680b44b840d815be90146eb521641efbffed0859c154e8892d3906eae9934bfacee72cd1d2fa9dd050fd18888eea49da155ab0efd2"), - MustHexID("3ed426322dee7572b08592e1e079f8b6c6b30e10e6243edd144a6a48fdbdb83df73a6e41b1143722cb82604f2203a32758610b5d9544f44a1a7921ba001528c1"), - MustHexID("b2e2a2b7fdd363572a3256e75435fab1da3b16f7891a8bd2015f30995dae665d7eabfd194d87d99d5df628b4bbc7b04e5b492c596422dd8272746c7a1b0b8e4f"), - MustHexID("0c69c9756162c593e85615b814ce57a2a8ca2df6c690b9c4e4602731b61e1531a3bbe3f7114271554427ffabea80ad8f36fa95a49fa77b675ae182c6ccac1728"), - MustHexID("8d28be21d5a97b0876442fa4f5e5387f5bf3faad0b6f13b8607b64d6e448c0991ca28dd7fe2f64eb8eadd7150bff5d5666aa6ed868b84c71311f4ba9a38569dd"), - MustHexID("2c677e1c64b9c9df6359348a7f5f33dc79e22f0177042486d125f8b6ca7f0dc756b1f672aceee5f1746bcff80aaf6f92a8dc0c9fbeb259b3fa0da060de5ab7e8"), - MustHexID("3994880f94a8678f0cd247a43f474a8af375d2a072128da1ad6cae84a244105ff85e94fc7d8496f639468de7ee998908a91c7e33ef7585fff92e984b210941a1"), - MustHexID("b45a9153c08d002a48090d15d61a7c7dad8c2af85d4ff5bd36ce23a9a11e0709bf8d56614c7b193bc028c16cbf7f20dfbcc751328b64a924995d47b41e452422"), - MustHexID("057ab3a9e53c7a84b0f3fc586117a525cdd18e313f52a67bf31798d48078e325abe5cfee3f6c2533230cb37d0549289d692a29dd400e899b8552d4b928f6f907"), - MustHexID("0ddf663d308791eb92e6bd88a2f8cb45e4f4f35bb16708a0e6ff7f1362aa6a73fedd0a1b1557fb3365e38e1b79d6918e2fae2788728b70c9ab6b51a3b94a4338"), - MustHexID("f637e07ff50cc1e3731735841c4798411059f2023abcf3885674f3e8032531b0edca50fd715df6feb489b6177c345374d64f4b07d257a7745de393a107b013a5"), - MustHexID("e24ec7c6eec094f63c7b3239f56d311ec5a3e45bc4e622a1095a65b95eea6fe13e29f3b6b7a2cbfe40906e3989f17ac834c3102dd0cadaaa26e16ee06d782b72"), - MustHexID("b76ea1a6fd6506ef6e3506a4f1f60ed6287fff8114af6141b2ff13e61242331b54082b023cfea5b3083354a4fb3f9eb8be01fb4a518f579e731a5d0707291a6b"), - MustHexID("9b53a37950ca8890ee349b325032d7b672cab7eced178d3060137b24ef6b92a43977922d5bdfb4a3409a2d80128e02f795f9dae6d7d99973ad0e23a2afb8442f"), - }, - 249: { - MustHexID("675ae65567c3c72c50c73bc0fd4f61f202ea5f93346ca57b551de3411ccc614fad61cb9035493af47615311b9d44ee7a161972ee4d77c28fe1ec029d01434e6a"), - MustHexID("8eb81408389da88536ae5800392b16ef5109d7ea132c18e9a82928047ecdb502693f6e4a4cdd18b54296caf561db937185731456c456c98bfe7de0baf0eaa495"), - MustHexID("2adba8b1612a541771cb93a726a38a4b88e97b18eced2593eb7daf82f05a5321ca94a72cc780c306ff21e551a932fc2c6d791e4681907b5ceab7f084c3fa2944"), - MustHexID("b1b4bfbda514d9b8f35b1c28961da5d5216fe50548f4066f69af3b7666a3b2e06eac646735e963e5c8f8138a2fb95af15b13b23ff00c6986eccc0efaa8ee6fb4"), - MustHexID("d2139281b289ad0e4d7b4243c4364f5c51aac8b60f4806135de06b12b5b369c9e43a6eb494eab860d115c15c6fbb8c5a1b0e382972e0e460af395b8385363de7"), - MustHexID("4a693df4b8fc5bdc7cec342c3ed2e228d7c5b4ab7321ddaa6cccbeb45b05a9f1d95766b4002e6d4791c2deacb8a667aadea6a700da28a3eea810a30395701bbc"), - MustHexID("ab41611195ec3c62bb8cd762ee19fb182d194fd141f4a66780efbef4b07ce916246c022b841237a3a6b512a93431157edd221e854ed2a259b72e9c5351f44d0c"), - MustHexID("68e8e26099030d10c3c703ae7045c0a48061fb88058d853b3e67880014c449d4311014da99d617d3150a20f1a3da5e34bf0f14f1c51fe4dd9d58afd222823176"), - MustHexID("3fbcacf546fb129cd70fc48de3b593ba99d3c473798bc309292aca280320e0eacc04442c914cad5c4cf6950345ba79b0d51302df88285d4e83ee3fe41339eee7"), - MustHexID("1d4a623659f7c8f80b6c3939596afdf42e78f892f682c768ad36eb7bfba402dbf97aea3a268f3badd8fe7636be216edf3d67ee1e08789ebbc7be625056bd7109"), - MustHexID("a283c474ab09da02bbc96b16317241d0627646fcc427d1fe790b76a7bf1989ced90f92101a973047ae9940c92720dffbac8eff21df8cae468a50f72f9e159417"), - MustHexID("dbf7e5ad7f87c3dfecae65d87c3039e14ed0bdc56caf00ce81931073e2e16719d746295512ff7937a15c3b03603e7c41a4f9df94fcd37bb200dd8f332767e9cb"), - MustHexID("caaa070a26692f64fc77f30d7b5ae980d419b4393a0f442b1c821ef58c0862898b0d22f74a4f8c5d83069493e3ec0b92f17dc1fe6e4cd437c1ec25039e7ce839"), - MustHexID("874cc8d1213beb65c4e0e1de38ef5d8165235893ac74ab5ea937c885eaab25c8d79dad0456e9fd3e9450626cac7e107b004478fb59842f067857f39a47cee695"), - MustHexID("d94193f236105010972f5df1b7818b55846592a0445b9cdc4eaed811b8c4c0f7c27dc8cc9837a4774656d6b34682d6d329d42b6ebb55da1d475c2474dc3dfdf4"), - MustHexID("edd9af6aded4094e9785637c28fccbd3980cbe28e2eb9a411048a23c2ace4bd6b0b7088a7817997b49a3dd05fc6929ca6c7abbb69438dbdabe65e971d2a794b2"), - }, - 250: { - MustHexID("53a5bd1215d4ab709ae8fdc2ced50bba320bced78bd9c5dc92947fb402250c914891786db0978c898c058493f86fc68b1c5de8a5cb36336150ac7a88655b6c39"), - MustHexID("b7f79e3ab59f79262623c9ccefc8f01d682323aee56ffbe295437487e9d5acaf556a9c92e1f1c6a9601f2b9eb6b027ae1aeaebac71d61b9b78e88676efd3e1a3"), - MustHexID("d374bf7e8d7ffff69cc00bebff38ef5bc1dcb0a8d51c1a3d70e61ac6b2e2d6617109254b0ac224354dfbf79009fe4239e09020c483cc60c071e00b9238684f30"), - MustHexID("1e1eac1c9add703eb252eb991594f8f5a173255d526a855fab24ae57dc277e055bc3c7a7ae0b45d437c4f47a72d97eb7b126f2ba344ba6c0e14b2c6f27d4b1e6"), - MustHexID("ae28953f63d4bc4e706712a59319c111f5ff8f312584f65d7436b4cd3d14b217b958f8486bad666b4481fe879019fb1f767cf15b3e3e2711efc33b56d460448a"), - MustHexID("934bb1edf9c7a318b82306aca67feb3d6b434421fa275d694f0b4927afd8b1d3935b727fd4ff6e3d012e0c82f1824385174e8c6450ade59c2a43281a4b3446b6"), - MustHexID("9eef3f28f70ce19637519a0916555bf76d26de31312ac656cf9d3e379899ea44e4dd7ffcce923b4f3563f8a00489a34bd6936db0cbb4c959d32c49f017e07d05"), - MustHexID("82200872e8f871c48f1fad13daec6478298099b591bb3dbc4ef6890aa28ebee5860d07d70be62f4c0af85085a90ae8179ee8f937cf37915c67ea73e704b03ee7"), - MustHexID("6c75a5834a08476b7fc37ff3dc2011dc3ea3b36524bad7a6d319b18878fad813c0ba76d1f4555cacd3890c865438c21f0e0aed1f80e0a157e642124c69f43a11"), - MustHexID("995b873742206cb02b736e73a88580c2aacb0bd4a3c97a647b647bcab3f5e03c0e0736520a8b3600da09edf4248991fb01091ec7ff3ec7cdc8a1beae011e7aae"), - MustHexID("c773a056594b5cdef2e850d30891ff0e927c3b1b9c35cd8e8d53a1017001e237468e1ece3ae33d612ca3e6abb0a9169aa352e9dcda358e5af2ad982b577447db"), - MustHexID("2b46a5f6923f475c6be99ec6d134437a6d11f6bb4b4ac6bcd94572fa1092639d1c08aeefcb51f0912f0a060f71d4f38ee4da70ecc16010b05dd4a674aab14c3a"), - MustHexID("af6ab501366debbaa0d22e20e9688f32ef6b3b644440580fd78de4fe0e99e2a16eb5636bbae0d1c259df8ddda77b35b9a35cbc36137473e9c68fbc9d203ba842"), - MustHexID("c9f6f2dd1a941926f03f770695bda289859e85fabaf94baaae20b93e5015dc014ba41150176a36a1884adb52f405194693e63b0c464a6891cc9cc1c80d450326"), - MustHexID("5b116f0751526868a909b61a30b0c5282c37df6925cc03ddea556ef0d0602a9595fd6c14d371f8ed7d45d89918a032dcd22be4342a8793d88fdbeb3ca3d75bd7"), - MustHexID("50f3222fb6b82481c7c813b2172e1daea43e2710a443b9c2a57a12bd160dd37e20f87aa968c82ad639af6972185609d47036c0d93b4b7269b74ebd7073221c10"), - }, - 251: { - MustHexID("9b8f702a62d1bee67bedfeb102eca7f37fa1713e310f0d6651cc0c33ea7c5477575289ccd463e5a2574a00a676a1fdce05658ba447bb9d2827f0ba47b947e894"), - MustHexID("b97532eb83054ed054b4abdf413bb30c00e4205545c93521554dbe77faa3cfaa5bd31ef466a107b0b34a71ec97214c0c83919720142cddac93aa7a3e928d4708"), - MustHexID("2f7a5e952bfb67f2f90b8441b5fadc9ee13b1dcde3afeeb3dd64bf937f86663cc5c55d1fa83952b5422763c7df1b7f2794b751c6be316ebc0beb4942e65ab8c1"), - MustHexID("42c7483781727051a0b3660f14faf39e0d33de5e643702ae933837d036508ab856ce7eec8ec89c4929a4901256e5233a3d847d5d4893f91bcf21835a9a880fee"), - MustHexID("873bae27bf1dc854408fba94046a53ab0c965cebe1e4e12290806fc62b88deb1f4a47f9e18f78fc0e7913a0c6e42ac4d0fc3a20cea6bc65f0c8a0ca90b67521e"), - MustHexID("a7e3a370bbd761d413f8d209e85886f68bf73d5c3089b2dc6fa42aab1ecb5162635497eed95dee2417f3c9c74a3e76319625c48ead2e963c7de877cd4551f347"), - MustHexID("528597534776a40df2addaaea15b6ff832ce36b9748a265768368f657e76d58569d9f30dbb91e91cf0ae7efe8f402f17aa0ae15f5c55051ba03ba830287f4c42"), - MustHexID("461d8bd4f13c3c09031fdb84f104ed737a52f630261463ce0bdb5704259bab4b737dda688285b8444dbecaecad7f50f835190b38684ced5e90c54219e5adf1bc"), - MustHexID("6ec50c0be3fd232737090fc0111caaf0bb6b18f72be453428087a11a97fd6b52db0344acbf789a689bd4f5f50f79017ea784f8fd6fe723ad6ae675b9e3b13e21"), - MustHexID("12fc5e2f77a83fdcc727b79d8ae7fe6a516881138d3011847ee136b400fed7cfba1f53fd7a9730253c7aa4f39abeacd04f138417ba7fcb0f36cccc3514e0dab6"), - MustHexID("4fdbe75914ccd0bce02101606a1ccf3657ec963e3b3c20239d5fec87673fe446d649b4f15f1fe1a40e6cfbd446dda2d31d40bb602b1093b8fcd5f139ba0eb46a"), - MustHexID("3753668a0f6281e425ea69b52cb2d17ab97afbe6eb84cf5d25425bc5e53009388857640668fadd7c110721e6047c9697803bd8a6487b43bb343bfa32ebf24039"), - MustHexID("2e81b16346637dec4410fd88e527346145b9c0a849dbf2628049ac7dae016c8f4305649d5659ec77f1e8a0fac0db457b6080547226f06283598e3740ad94849a"), - MustHexID("802c3cc27f91c89213223d758f8d2ecd41135b357b6d698f24d811cdf113033a81c38e0bdff574a5c005b00a8c193dc2531f8c1fa05fa60acf0ab6f2858af09f"), - MustHexID("fcc9a2e1ac3667026ff16192876d1813bb75abdbf39b929a92863012fe8b1d890badea7a0de36274d5c1eb1e8f975785532c50d80fd44b1a4b692f437303393f"), - MustHexID("6d8b3efb461151dd4f6de809b62726f5b89e9b38e9ba1391967f61cde844f7528fecf821b74049207cee5a527096b31f3ad623928cd3ce51d926fa345a6b2951"), - }, - 252: { - MustHexID("f1ae93157cc48c2075dd5868fbf523e79e06caf4b8198f352f6e526680b78ff4227263de92612f7d63472bd09367bb92a636fff16fe46ccf41614f7a72495c2a"), - MustHexID("587f482d111b239c27c0cb89b51dd5d574db8efd8de14a2e6a1400c54d4567e77c65f89c1da52841212080b91604104768350276b6682f2f961cdaf4039581c7"), - MustHexID("e3f88274d35cefdaabdf205afe0e80e936cc982b8e3e47a84ce664c413b29016a4fb4f3a3ebae0a2f79671f8323661ed462bf4390af94c424dc8ace0c301b90f"), - MustHexID("0ddc736077da9a12ba410dc5ea63cbcbe7659dd08596485b2bff3435221f82c10d263efd9af938e128464be64a178b7cd22e19f400d5802f4c9df54bf89f2619"), - MustHexID("784aa34d833c6ce63fcc1279630113c3272e82c4ae8c126c5a52a88ac461b6baeed4244e607b05dc14e5b2f41c70a273c3804dea237f14f7a1e546f6d1309d14"), - MustHexID("f253a2c354ee0e27cfcae786d726753d4ad24be6516b279a936195a487de4a59dbc296accf20463749ff55293263ed8c1b6365eecb248d44e75e9741c0d18205"), - MustHexID("a1910b80357b3ad9b4593e0628922939614dc9056a5fbf477279c8b2c1d0b4b31d89a0c09d0d41f795271d14d3360ef08a3f821e65e7e1f56c07a36afe49c7c5"), - MustHexID("f1168552c2efe541160f0909b0b4a9d6aeedcf595cdf0e9b165c97e3e197471a1ee6320e93389edfba28af6eaf10de98597ad56e7ab1b504ed762451996c3b98"), - MustHexID("b0c8e5d2c8634a7930e1a6fd082e448c6cf9d2d8b7293558b59238815a4df926c286bf297d2049f14e8296a6eb3256af614ec1812c4f2bbe807673b58bf14c8c"), - MustHexID("0fb346076396a38badc342df3679b55bd7f40a609ab103411fe45082c01f12ea016729e95914b2b5540e987ff5c9b133e85862648e7f36abdfd23100d248d234"), - MustHexID("f736e0cc83417feaa280d9483f5d4d72d1b036cd0c6d9cbdeb8ac35ceb2604780de46dddaa32a378474e1d5ccdf79b373331c30c7911ade2ae32f98832e5de1f"), - MustHexID("8b02991457602f42b38b342d3f2259ae4100c354b3843885f7e4e07bd644f64dab94bb7f38a3915f8b7f11d8e3f81c28e07a0078cf79d7397e38a7b7e0c857e2"), - MustHexID("9221d9f04a8a184993d12baa91116692bb685f887671302999d69300ad103eb2d2c75a09d8979404c6dd28f12362f58a1a43619c493d9108fd47588a23ce5824"), - MustHexID("652797801744dada833fff207d67484742eea6835d695925f3e618d71b68ec3c65bdd85b4302b2cdcb835ad3f94fd00d8da07e570b41bc0d2bcf69a8de1b3284"), - MustHexID("d84f06fe64debc4cd0625e36d19b99014b6218375262cc2209202bdbafd7dffcc4e34ce6398e182e02fd8faeed622c3e175545864902dfd3d1ac57647cddf4c6"), - MustHexID("d0ed87b294f38f1d741eb601020eeec30ac16331d05880fe27868f1e454446de367d7457b41c79e202eaf9525b029e4f1d7e17d85a55f83a557c005c68d7328a"), - }, - 253: { - MustHexID("ad4485e386e3cc7c7310366a7c38fb810b8896c0d52e55944bfd320ca294e7912d6c53c0a0cf85e7ce226e92491d60430e86f8f15cda0161ed71893fb4a9e3a1"), - MustHexID("36d0e7e5b7734f98c6183eeeb8ac5130a85e910a925311a19c4941b1290f945d4fc3996b12ef4966960b6fa0fb29b1604f83a0f81bd5fd6398d2e1a22e46af0c"), - MustHexID("7d307d8acb4a561afa23bdf0bd945d35c90245e26345ec3a1f9f7df354222a7cdcb81339c9ed6744526c27a1a0c8d10857e98df942fa433602facac71ac68a31"), - MustHexID("d97bf55f88c83fae36232661af115d66ca600fc4bd6d1fb35ff9bb4dad674c02cf8c8d05f317525b5522250db58bb1ecafb7157392bf5aa61b178c61f098d995"), - MustHexID("7045d678f1f9eb7a4613764d17bd5698796494d0bf977b16f2dbc272b8a0f7858a60805c022fc3d1fe4f31c37e63cdaca0416c0d053ef48a815f8b19121605e0"), - MustHexID("14e1f21418d445748de2a95cd9a8c3b15b506f86a0acabd8af44bb968ce39885b19c8822af61b3dd58a34d1f265baec30e3ae56149dc7d2aa4a538f7319f69c8"), - MustHexID("b9453d78281b66a4eac95a1546017111eaaa5f92a65d0de10b1122940e92b319728a24edf4dec6acc412321b1c95266d39c7b3a5d265c629c3e49a65fb022c09"), - MustHexID("e8a49248419e3824a00d86af422f22f7366e2d4922b304b7169937616a01d9d6fa5abf5cc01061a352dc866f48e1fa2240dbb453d872b1d7be62bdfc1d5e248c"), - MustHexID("bebcff24b52362f30e0589ee573ce2d86f073d58d18e6852a592fa86ceb1a6c9b96d7fb9ec7ed1ed98a51b6743039e780279f6bb49d0a04327ac7a182d9a56f6"), - MustHexID("d0835e5a4291db249b8d2fca9f503049988180c7d247bedaa2cf3a1bad0a76709360a85d4f9a1423b2cbc82bb4d94b47c0cde20afc430224834c49fe312a9ae3"), - MustHexID("6b087fe2a2da5e4f0b0f4777598a4a7fb66bf77dbd5bfc44e8a7eaa432ab585a6e226891f56a7d4f5ed11a7c57b90f1661bba1059590ca4267a35801c2802913"), - MustHexID("d901e5bde52d1a0f4ddf010a686a53974cdae4ebe5c6551b3c37d6b6d635d38d5b0e5f80bc0186a2c7809dbf3a42870dd09643e68d32db896c6da8ba734579e7"), - MustHexID("96419fb80efae4b674402bb969ebaab86c1274f29a83a311e24516d36cdf148fe21754d46c97688cdd7468f24c08b13e4727c29263393638a3b37b99ff60ebca"), - MustHexID("7b9c1889ae916a5d5abcdfb0aaedcc9c6f9eb1c1a4f68d0c2d034fe79ac610ce917c3abc670744150fa891bfcd8ab14fed6983fca964de920aa393fa7b326748"), - MustHexID("7a369b2b8962cc4c65900be046482fbf7c14f98a135bbbae25152c82ad168fb2097b3d1429197cf46d3ce9fdeb64808f908a489cc6019725db040060fdfe5405"), - MustHexID("47bcae48288da5ecc7f5058dfa07cf14d89d06d6e449cb946e237aa6652ea050d9f5a24a65efdc0013ccf232bf88670979eddef249b054f63f38da9d7796dbd8"), - }, - 254: { - MustHexID("099739d7abc8abd38ecc7a816c521a1168a4dbd359fa7212a5123ab583ffa1cf485a5fed219575d6475dbcdd541638b2d3631a6c7fce7474e7fe3cba1d4d5853"), - MustHexID("c2b01603b088a7182d0cf7ef29fb2b04c70acb320fccf78526bf9472e10c74ee70b3fcfa6f4b11d167bd7d3bc4d936b660f2c9bff934793d97cb21750e7c3d31"), - MustHexID("20e4d8f45f2f863e94b45548c1ef22a11f7d36f263e4f8623761e05a64c4572379b000a52211751e2561b0f14f4fc92dd4130410c8ccc71eb4f0e95a700d4ca9"), - MustHexID("27f4a16cc085e72d86e25c98bd2eca173eaaee7565c78ec5a52e9e12b2211f35de81b5b45e9195de2ebfe29106742c59112b951a04eb7ae48822911fc1f9389e"), - MustHexID("55db5ee7d98e7f0b1c3b9d5be6f2bc619a1b86c3cdd513160ad4dcf267037a5fffad527ac15d50aeb32c59c13d1d4c1e567ebbf4de0d25236130c8361f9aac63"), - MustHexID("883df308b0130fc928a8559fe50667a0fff80493bc09685d18213b2db241a3ad11310ed86b0ef662b3ce21fc3d9aa7f3fc24b8d9afe17c7407e9afd3345ae548"), - MustHexID("c7af968cc9bc8200c3ee1a387405f7563be1dce6710a3439f42ea40657d0eae9d2b3c16c42d779605351fcdece4da637b9804e60ca08cfb89aec32c197beffa6"), - MustHexID("3e66f2b788e3ff1d04106b80597915cd7afa06c405a7ae026556b6e583dca8e05cfbab5039bb9a1b5d06083ffe8de5780b1775550e7218f5e98624bf7af9a0a8"), - MustHexID("4fc7f53764de3337fdaec0a711d35d3a923e72fa65025444d12230b3552ed43d9b2d1ad08ccb11f2d50c58809e6dd74dde910e195294fca3b47ae5a3967cc479"), - MustHexID("bafdfdcf6ccaa989436752fa97c77477b6baa7deb374b16c095492c529eb133e8e2f99e1977012b64767b9d34b2cf6d2048ed489bd822b5139b523f6a423167b"), - MustHexID("7f5d78008a4312fe059104ce80202c82b8915c2eb4411c6b812b16f7642e57c00f2c9425121f5cbac4257fe0b3e81ef5dea97ea2dbaa98f6a8b6fd4d1e5980bb"), - MustHexID("598c37fe78f922751a052f463aeb0cb0bc7f52b7c2a4cf2da72ec0931c7c32175d4165d0f8998f7320e87324ac3311c03f9382a5385c55f0407b7a66b2acd864"), - MustHexID("f758c4136e1c148777a7f3275a76e2db0b2b04066fd738554ec398c1c6cc9fb47e14a3b4c87bd47deaeab3ffd2110514c3855685a374794daff87b605b27ee2e"), - MustHexID("0307bb9e4fd865a49dcf1fe4333d1b944547db650ab580af0b33e53c4fef6c789531110fac801bbcbce21fc4d6f61b6d5b24abdf5b22e3030646d579f6dca9c2"), - MustHexID("82504b6eb49bb2c0f91a7006ce9cefdbaf6df38706198502c2e06601091fc9dc91e4f15db3410d45c6af355bc270b0f268d3dff560f956985c7332d4b10bd1ed"), - MustHexID("b39b5b677b45944ceebe76e76d1f051de2f2a0ec7b0d650da52135743e66a9a5dba45f638258f9a7545d9a790c7fe6d3fdf82c25425c7887323e45d27d06c057"), - }, - 255: { - MustHexID("5c4d58d46e055dd1f093f81ee60a675e1f02f54da6206720adee4dccef9b67a31efc5c2a2949c31a04ee31beadc79aba10da31440a1f9ff2a24093c63c36d784"), - MustHexID("ea72161ffdd4b1e124c7b93b0684805f4c4b58d617ed498b37a145c670dbc2e04976f8785583d9c805ffbf343c31d492d79f841652bbbd01b61ed85640b23495"), - MustHexID("51caa1d93352d47a8e531692a3612adac1e8ac68d0a200d086c1c57ae1e1a91aa285ab242e8c52ef9d7afe374c9485b122ae815f1707b875569d0433c1c3ce85"), - MustHexID("c08397d5751b47bd3da044b908be0fb0e510d3149574dff7aeab33749b023bb171b5769990fe17469dbebc100bc150e798aeda426a2dcc766699a225fddd75c6"), - MustHexID("0222c1c194b749736e593f937fad67ee348ac57287a15c7e42877aa38a9b87732a408bca370f812efd0eedbff13e6d5b854bf3ba1dec431a796ed47f32552b09"), - MustHexID("03d859cd46ef02d9bfad5268461a6955426845eef4126de6be0fa4e8d7e0727ba2385b78f1a883a8239e95ebb814f2af8379632c7d5b100688eebc5841209582"), - MustHexID("64d5004b7e043c39ff0bd10cb20094c287721d5251715884c280a612b494b3e9e1c64ba6f67614994c7d969a0d0c0295d107d53fc225d47c44c4b82852d6f960"), - MustHexID("b0a5eefb2dab6f786670f35bf9641eefe6dd87fd3f1362bcab4aaa792903500ab23d88fae68411372e0813b057535a601d46e454323745a948017f6063a47b1f"), - MustHexID("0cc6df0a3433d448b5684d2a3ffa9d1a825388177a18f44ad0008c7bd7702f1ec0fc38b83506f7de689c3b6ecb552599927e29699eed6bb867ff08f80068b287"), - MustHexID("50772f7b8c03a4e153355fbbf79c8a80cf32af656ff0c7873c99911099d04a0dae0674706c357e0145ad017a0ade65e6052cb1b0d574fcd6f67da3eee0ace66b"), - MustHexID("1ae37829c9ef41f8b508b82259ebac76b1ed900d7a45c08b7970f25d2d48ddd1829e2f11423a18749940b6dab8598c6e416cef0efd47e46e51f29a0bc65b37cd"), - MustHexID("ba973cab31c2af091fc1644a93527d62b2394999e2b6ccbf158dd5ab9796a43d408786f1803ef4e29debfeb62fce2b6caa5ab2b24d1549c822a11c40c2856665"), - MustHexID("bc413ad270dd6ea25bddba78f3298b03b8ba6f8608ac03d06007d4116fa78ef5a0cfe8c80155089382fc7a193243ee5500082660cb5d7793f60f2d7d18650964"), - MustHexID("5a6a9ef07634d9eec3baa87c997b529b92652afa11473dfee41ef7037d5c06e0ddb9fe842364462d79dd31cff8a59a1b8d5bc2b810dea1d4cbbd3beb80ecec83"), - MustHexID("f492c6ee2696d5f682f7f537757e52744c2ae560f1090a07024609e903d334e9e174fc01609c5a229ddbcac36c9d21adaf6457dab38a25bfd44f2f0ee4277998"), - MustHexID("459e4db99298cb0467a90acee6888b08bb857450deac11015cced5104853be5adce5b69c740968bc7f931495d671a70cad9f48546d7cd203357fe9af0e8d2164"), - }, - 256: { - MustHexID("a8593af8a4aef7b806b5197612017951bac8845a1917ca9a6a15dd6086d608505144990b245785c4cd2d67a295701c7aac2aa18823fb0033987284b019656268"), - MustHexID("d2eebef914928c3aad77fc1b2a495f52d2294acf5edaa7d8a530b540f094b861a68fe8348a46a7c302f08ab609d85912a4968eacfea0740847b29421b4795d9e"), - MustHexID("b14bfcb31495f32b650b63cf7d08492e3e29071fdc73cf2da0da48d4b191a70ba1a65f42ad8c343206101f00f8a48e8db4b08bf3f622c0853e7323b250835b91"), - MustHexID("7feaee0d818c03eb30e4e0bf03ade0f3c21ca38e938a761aa1781cf70bda8cc5cd631a6cc53dd44f1d4a6d3e2dae6513c6c66ee50cb2f0e9ad6f7e319b309fd9"), - MustHexID("4ca3b657b139311db8d583c25dd5963005e46689e1317620496cc64129c7f3e52870820e0ec7941d28809311df6db8a2867bbd4f235b4248af24d7a9c22d1232"), - MustHexID("1181defb1d16851d42dd951d84424d6bd1479137f587fa184d5a8152be6b6b16ed08bcdb2c2ed8539bcde98c80c432875f9f724737c316a2bd385a39d3cab1d8"), - MustHexID("d9dd818769fa0c3ec9f553c759b92476f082817252a04a47dc1777740b1731d280058c66f982812f173a294acf4944a85ba08346e2de153ba3ba41ce8a62cb64"), - MustHexID("bd7c4f8a9e770aa915c771b15e107ca123d838762da0d3ffc53aa6b53e9cd076cffc534ec4d2e4c334c683f1f5ea72e0e123f6c261915ed5b58ac1b59f003d88"), - MustHexID("3dd5739c73649d510456a70e9d6b46a855864a4a3f744e088fd8c8da11b18e4c9b5f2d7da50b1c147b2bae5ca9609ae01f7a3cdea9dce34f80a91d29cd82f918"), - MustHexID("f0d7df1efc439b4bcc0b762118c1cfa99b2a6143a9f4b10e3c9465125f4c9fca4ab88a2504169bbcad65492cf2f50da9dd5d077c39574a944f94d8246529066b"), - MustHexID("dd598b9ba441448e5fb1a6ec6c5f5aa9605bad6e223297c729b1705d11d05f6bfd3d41988b694681ae69bb03b9a08bff4beab5596503d12a39bffb5cd6e94c7c"), - MustHexID("3fce284ac97e567aebae681b15b7a2b6df9d873945536335883e4bbc26460c064370537f323fd1ada828ea43154992d14ac0cec0940a2bd2a3f42ec156d60c83"), - MustHexID("7c8dfa8c1311cb14fb29a8ac11bca23ecc115e56d9fcf7b7ac1db9066aa4eb39f8b1dabf46e192a65be95ebfb4e839b5ab4533fef414921825e996b210dd53bd"), - MustHexID("cafa6934f82120456620573d7f801390ed5e16ed619613a37e409e44ab355ef755e83565a913b48a9466db786f8d4fbd590bfec474c2524d4a2608d4eafd6abd"), - MustHexID("9d16600d0dd310d77045769fed2cb427f32db88cd57d86e49390c2ba8a9698cfa856f775be2013237226e7bf47b248871cf865d23015937d1edeb20db5e3e760"), - MustHexID("17be6b6ba54199b1d80eff866d348ea11d8a4b341d63ad9a6681d3ef8a43853ac564d153eb2a8737f0afc9ab320f6f95c55aa11aaa13bbb1ff422fd16bdf8188"), - }, - }, -} - -type preminedTestnet struct { - target NodeID - targetSha common.Hash // sha3(target) - dists [hashBits + 1][]NodeID - net *Network -} - -func (tn *preminedTestnet) sendFindnode(to *Node, target NodeID) { - panic("sendFindnode called") -} - -func (tn *preminedTestnet) sendFindnodeHash(to *Node, target common.Hash) { - // current log distance is encoded in port number - // fmt.Println("findnode query at dist", toaddr.Port) - if to.UDP <= lowPort { - panic("query to node at or below distance 0") - } - next := to.UDP - 1 - var result []rpcNode - for i, id := range tn.dists[to.UDP-lowPort] { - result = append(result, nodeToRPC(NewNode(id, net.ParseIP("10.0.2.99"), next, uint16(i)+1+lowPort))) - } - injectResponse(tn.net, to, neighborsPacket, &neighbors{Nodes: result}) -} - -func (tn *preminedTestnet) sendPing(to *Node, addr *net.UDPAddr, topics []Topic) []byte { - injectResponse(tn.net, to, pongPacket, &pong{ReplyTok: []byte{1}}) - return []byte{1} -} - -func (tn *preminedTestnet) send(to *Node, ptype nodeEvent, data interface{}) (hash []byte) { - switch ptype { - case pingPacket: - injectResponse(tn.net, to, pongPacket, &pong{ReplyTok: []byte{1}}) - case pongPacket: - // ignored - case findnodeHashPacket: - // current log distance is encoded in port number - // fmt.Println("findnode query at dist", toaddr.Port-lowPort) - if to.UDP <= lowPort { - panic("query to node at or below distance 0") - } - next := to.UDP - 1 - var result []rpcNode - for i, id := range tn.dists[to.UDP-lowPort] { - result = append(result, nodeToRPC(NewNode(id, net.ParseIP("10.0.2.99"), next, uint16(i)+1+lowPort))) - } - injectResponse(tn.net, to, neighborsPacket, &neighbors{Nodes: result}) - default: - panic("send(" + ptype.String() + ")") - } - return []byte{2} -} - -func (tn *preminedTestnet) sendNeighbours(to *Node, nodes []*Node) { - panic("sendNeighbours called") -} - -func (tn *preminedTestnet) sendTopicQuery(to *Node, topic Topic) { - panic("sendTopicQuery called") -} - -func (tn *preminedTestnet) sendTopicNodes(to *Node, queryHash common.Hash, nodes []*Node) { - panic("sendTopicNodes called") -} - -func (tn *preminedTestnet) sendTopicRegister(to *Node, topics []Topic, idx int, pong []byte) { - panic("sendTopicRegister called") -} - -func (*preminedTestnet) Close() {} - -func (*preminedTestnet) localAddr() *net.UDPAddr { - return &net.UDPAddr{IP: net.ParseIP("10.0.1.1"), Port: 40000} -} - -// mine generates a testnet struct literal with nodes at -// various distances to the given target. -func (tn *preminedTestnet) mine(target NodeID) { - tn.target = target - tn.targetSha = crypto.Keccak256Hash(tn.target[:]) - found := 0 - for found < bucketSize*10 { - k := newkey() - id := PubkeyID(&k.PublicKey) - sha := crypto.Keccak256Hash(id[:]) - ld := logdist(tn.targetSha, sha) - if len(tn.dists[ld]) < bucketSize { - tn.dists[ld] = append(tn.dists[ld], id) - 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][]NodeID{\n", len(tn.dists)) - for ld, ns := range &tn.dists { - if len(ns) == 0 { - continue - } - fmt.Printf(" %d: []NodeID{\n", ld) - for _, n := range ns { - fmt.Printf(" MustHexID(\"%x\"),\n", n[:]) - } - fmt.Println(" },") - } - fmt.Println(" },") - fmt.Println("}") -} - -func injectResponse(net *Network, from *Node, ev nodeEvent, packet interface{}) { - go net.reqReadPacket(ingressPacket{remoteID: from.ID, remoteAddr: from.addr(), ev: ev, data: packet}) -} diff --git a/p2p/discv5/node.go b/p2p/discv5/node.go deleted file mode 100644 index 111fc60c..00000000 --- a/p2p/discv5/node.go +++ /dev/null @@ -1,438 +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 discv5 - -import ( - "crypto/ecdsa" - "crypto/elliptic" - "encoding/hex" - "errors" - "fmt" - "math/big" - "math/rand" - "net" - "net/url" - "regexp" - "strconv" - "strings" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -// Node represents a host on the network. -// The public fields of Node may not be modified. -type Node struct { - IP net.IP // len 4 for IPv4 or 16 for IPv6 - UDP, TCP uint16 // port numbers - ID NodeID // the node's public key - - // Network-related fields are contained in nodeNetGuts. - // These fields are not supposed to be used off the - // Network.loop goroutine. - nodeNetGuts -} - -// NewNode creates a new node. It is mostly meant to be used for -// testing purposes. -func NewNode(id NodeID, ip net.IP, udpPort, tcpPort uint16) *Node { - if ipv4 := ip.To4(); ipv4 != nil { - ip = ipv4 - } - return &Node{ - IP: ip, - UDP: udpPort, - TCP: tcpPort, - ID: id, - nodeNetGuts: nodeNetGuts{sha: crypto.Keccak256Hash(id[:])}, - } -} - -func (n *Node) addr() *net.UDPAddr { - return &net.UDPAddr{IP: n.IP, Port: int(n.UDP)} -} - -func (n *Node) setAddr(a *net.UDPAddr) { - n.IP = a.IP - if ipv4 := a.IP.To4(); ipv4 != nil { - n.IP = ipv4 - } - n.UDP = uint16(a.Port) -} - -// compares the given address against the stored values. -func (n *Node) addrEqual(a *net.UDPAddr) bool { - ip := a.IP - if ipv4 := a.IP.To4(); ipv4 != nil { - ip = ipv4 - } - return n.UDP == uint16(a.Port) && n.IP.Equal(ip) -} - -// Incomplete returns true for nodes with no IP address. -func (n *Node) Incomplete() bool { - return n.IP == nil -} - -// checks whether n is a valid complete node. -func (n *Node) validateComplete() error { - if n.Incomplete() { - return errors.New("incomplete node") - } - if n.UDP == 0 { - return errors.New("missing UDP port") - } - if n.TCP == 0 { - return errors.New("missing TCP port") - } - if n.IP.IsMulticast() || n.IP.IsUnspecified() { - return errors.New("invalid IP (multicast/unspecified)") - } - _, err := n.ID.Pubkey() // validate the key (on curve, etc.) - return err -} - -// The string representation of a Node is a URL. -// Please see ParseNode for a description of the format. -func (n *Node) String() string { - u := url.URL{Scheme: "enode"} - if n.Incomplete() { - u.Host = fmt.Sprintf("%x", n.ID[:]) - } else { - addr := net.TCPAddr{IP: n.IP, Port: int(n.TCP)} - u.User = url.User(fmt.Sprintf("%x", n.ID[:])) - u.Host = addr.String() - if n.UDP != n.TCP { - u.RawQuery = "discport=" + strconv.Itoa(int(n.UDP)) - } - } - return u.String() -} - -var incompleteNodeURL = regexp.MustCompile("(?i)^(?:enode://)?([0-9a-f]+)$") - -// ParseNode parses a node designator. -// -// There are two basic forms of node designators -// - incomplete nodes, which only have the public key (node ID) -// - complete nodes, which contain the public key and IP/Port information -// -// For incomplete nodes, the designator must look like one of these -// -// enode:// -// -// -// For complete nodes, the node ID is encoded in the username portion -// of the URL, separated from the host by an @ sign. The hostname can -// only be given as an IP address, DNS domain names are not allowed. -// The port in the host name section is the TCP listening port. If the -// TCP and UDP (discovery) ports differ, the UDP port is specified as -// query parameter "discport". -// -// In the following example, the node URL describes -// a node with IP address 10.3.58.6, TCP listening port 30303 -// and UDP discovery port 30301. -// -// enode://@10.3.58.6:30303?discport=30301 -func ParseNode(rawurl string) (*Node, error) { - if m := incompleteNodeURL.FindStringSubmatch(rawurl); m != nil { - id, err := HexID(m[1]) - if err != nil { - return nil, fmt.Errorf("invalid node ID (%v)", err) - } - return NewNode(id, nil, 0, 0), nil - } - return parseComplete(rawurl) -} - -func parseComplete(rawurl string) (*Node, error) { - var ( - id NodeID - ip net.IP - tcpPort, udpPort uint64 - ) - u, err := url.Parse(rawurl) - if err != nil { - return nil, err - } - if u.Scheme != "enode" { - return nil, errors.New("invalid URL scheme, want \"enode\"") - } - // Parse the Node ID from the user portion. - if u.User == nil { - return nil, errors.New("does not contain node ID") - } - if id, err = HexID(u.User.String()); err != nil { - return nil, fmt.Errorf("invalid node ID (%v)", err) - } - // Parse the IP address. - host, port, err := net.SplitHostPort(u.Host) - 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") - } - // 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 { - return nil, errors.New("invalid port") - } - udpPort = tcpPort - qv := u.Query() - if qv.Get("discport") != "" { - udpPort, err = strconv.ParseUint(qv.Get("discport"), 10, 16) - if err != nil { - return nil, errors.New("invalid discport in query") - } - } - return NewNode(id, ip, uint16(udpPort), uint16(tcpPort)), nil -} - -// MustParseNode parses a node URL. It panics if the URL is not valid. -func MustParseNode(rawurl string) *Node { - n, err := ParseNode(rawurl) - if err != nil { - panic("invalid node URL: " + err.Error()) - } - return n -} - -// MarshalText implements encoding.TextMarshaler. -func (n *Node) MarshalText() ([]byte, error) { - return []byte(n.String()), nil -} - -// UnmarshalText implements encoding.TextUnmarshaler. -func (n *Node) UnmarshalText(text []byte) error { - dec, err := ParseNode(string(text)) - if err == nil { - *n = *dec - } - return err -} - -// type nodeQueue []*Node -// -// // pushNew adds n to the end if it is not present. -// func (nl *nodeList) appendNew(n *Node) { -// for _, entry := range n { -// if entry == n { -// return -// } -// } -// *nq = append(*nq, n) -// } -// -// // popRandom removes a random node. Nodes closer to -// // to the head of the beginning of the have a slightly higher probability. -// func (nl *nodeList) popRandom() *Node { -// ix := rand.Intn(len(*nq)) -// //TODO: probability as mentioned above. -// nl.removeIndex(ix) -// } -// -// func (nl *nodeList) removeIndex(i int) *Node { -// slice = *nl -// if len(*slice) <= i { -// return nil -// } -// *nl = append(slice[:i], slice[i+1:]...) -// } - -const nodeIDBits = 512 - -// NodeID is a unique identifier for each node. -// The node identifier is a marshaled elliptic curve public key. -type NodeID [nodeIDBits / 8]byte - -// NodeID prints as a long hexadecimal number. -func (n NodeID) String() string { - return fmt.Sprintf("%x", n[:]) -} - -// The Go syntax representation of a NodeID is a call to HexID. -func (n NodeID) GoString() string { - return fmt.Sprintf("discover.HexID(\"%x\")", n[:]) -} - -// TerminalString returns a shortened hex string for terminal logging. -func (n NodeID) TerminalString() string { - return hex.EncodeToString(n[:8]) -} - -// HexID converts a hex string to a NodeID. -// The string may be prefixed with 0x. -func HexID(in string) (NodeID, error) { - var id NodeID - b, err := hex.DecodeString(strings.TrimPrefix(in, "0x")) - if err != nil { - return id, err - } else if len(b) != len(id) { - return id, fmt.Errorf("wrong length, want %d hex chars", len(id)*2) - } - copy(id[:], b) - return id, nil -} - -// MustHexID converts a hex string to a NodeID. -// It panics if the string is not a valid NodeID. -func MustHexID(in string) NodeID { - id, err := HexID(in) - if err != nil { - panic(err) - } - return id -} - -// PubkeyID returns a marshaled representation of the given public key. -func PubkeyID(pub *ecdsa.PublicKey) NodeID { - var id NodeID - pbytes := elliptic.Marshal(pub.Curve, pub.X, pub.Y) - if len(pbytes)-1 != len(id) { - panic(fmt.Errorf("need %d bit pubkey, got %d bits", (len(id)+1)*8, len(pbytes))) - } - copy(id[:], pbytes[1:]) - return id -} - -// Pubkey returns the public key represented by the node ID. -// It returns an error if the ID is not a point on the curve. -func (n NodeID) Pubkey() (*ecdsa.PublicKey, error) { - p := &ecdsa.PublicKey{Curve: crypto.S256(), X: new(big.Int), Y: new(big.Int)} - half := len(n) / 2 - p.X.SetBytes(n[:half]) - p.Y.SetBytes(n[half:]) - if !p.Curve.IsOnCurve(p.X, p.Y) { - return nil, errors.New("id is invalid secp256k1 curve point") - } - return p, nil -} - -func (id NodeID) mustPubkey() ecdsa.PublicKey { - pk, err := id.Pubkey() - if err != nil { - panic(err) - } - return *pk -} - -// recoverNodeID computes the public key used to sign the -// given hash from the signature. -func recoverNodeID(hash, sig []byte) (id NodeID, err error) { - pubkey, err := crypto.Ecrecover(hash, sig) - if err != nil { - return id, err - } - if len(pubkey)-1 != len(id) { - return id, fmt.Errorf("recovered pubkey has %d bits, want %d bits", len(pubkey)*8, (len(id)+1)*8) - } - for i := range id { - id[i] = pubkey[i+1] - } - return id, nil -} - -// distcmp 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 distcmp(target, a, b common.Hash) int { - for i := range target { - da := a[i] ^ target[i] - db := b[i] ^ target[i] - if da > db { - return 1 - } else if da < db { - return -1 - } - } - return 0 -} - -// table of leading zero counts for bytes [0..255] -var lzcount = [256]int{ - 8, 7, 6, 6, 5, 5, 5, 5, - 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 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, 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, 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, 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, 0, 0, 0, 0, -} - -// logdist returns the logarithmic distance between a and b, log2(a ^ b). -func logdist(a, b common.Hash) int { - lz := 0 - for i := range a { - x := a[i] ^ b[i] - if x == 0 { - lz += 8 - } else { - lz += lzcount[x] - break - } - } - return len(a)*8 - lz -} - -// hashAtDistance returns a random hash such that logdist(a, b) == n -func hashAtDistance(a common.Hash, n int) (b common.Hash) { - if n == 0 { - return a - } - // flip bit at position n, fill the rest with random bits - b = a - pos := len(a) - n/8 - 1 - bit := byte(0x01) << (byte(n%8) - 1) - if bit == 0 { - pos++ - bit = 0x80 - } - b[pos] = a[pos]&^bit | ^a[pos]&bit // TODO: randomize end bits - for i := pos + 1; i < len(a); i++ { - b[i] = byte(rand.Intn(255)) - } - return b -} diff --git a/p2p/discv5/node_test.go b/p2p/discv5/node_test.go deleted file mode 100644 index fd7945ad..00000000 --- a/p2p/discv5/node_test.go +++ /dev/null @@ -1,305 +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 discv5 - -import ( - "fmt" - "math/big" - "math/rand" - "net" - "reflect" - "strings" - "testing" - "testing/quick" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -func ExampleNewNode() { - id := MustHexID("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439") - - // Complete nodes contain UDP and TCP endpoints: - n1 := NewNode(id, net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), 52150, 30303) - fmt.Println("n1:", n1) - fmt.Println("n1.Incomplete() ->", n1.Incomplete()) - - // An incomplete node can be created by passing zero values - // for all parameters except id. - n2 := NewNode(id, nil, 0, 0) - fmt.Println("n2:", n2) - fmt.Println("n2.Incomplete() ->", n2.Incomplete()) - - // Output: - // n1: enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[2001:db8:3c4d:15::abcd:ef12]:30303?discport=52150 - // n1.Incomplete() -> false - // n2: enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439 - // n2.Incomplete() -> true -} - -var parseNodeTests = []struct { - rawurl string - wantError string - wantResult *Node -}{ - { - rawurl: "http://foobar", - wantError: `invalid URL scheme, want "enode"`, - }, - { - rawurl: "enode://01010101@123.124.125.126:3", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, - }, - // Complete nodes with IP address. - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@hostname:3", - wantError: `invalid IP address`, - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo", - wantError: `invalid port`, - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:3?discport=foo", - wantError: `invalid discport in query`, - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{0x7f, 0x0, 0x0, 0x1}, - 52150, - 52150, - ), - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[::]:52150", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.ParseIP("::"), - 52150, - 52150, - ), - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[2001:db8:3c4d:15::abcd:ef12]:52150", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), - 52150, - 52150, - ), - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150?discport=22334", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{0x7f, 0x0, 0x0, 0x1}, - 22334, - 52150, - ), - }, - // Incomplete nodes with no address. - { - rawurl: "1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - nil, 0, 0, - ), - }, - { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", - wantResult: NewNode( - MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - nil, 0, 0, - ), - }, - // Invalid URLs - { - rawurl: "01010101", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, - }, - { - rawurl: "enode://01010101", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, - }, - { - // This test checks that errors from url.Parse are handled. - rawurl: "://foo", - wantError: `parse ://foo: missing protocol scheme`, - }, -} - -func TestParseNode(t *testing.T) { - for _, test := range parseNodeTests { - n, err := ParseNode(test.rawurl) - if test.wantError != "" { - if err == nil { - t.Errorf("test %q:\n got nil error, expected %#q", test.rawurl, test.wantError) - continue - } 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 - } - } else { - if err != nil { - t.Errorf("test %q:\n unexpected error: %v", test.rawurl, err) - continue - } - if !reflect.DeepEqual(n, test.wantResult) { - t.Errorf("test %q:\n result mismatch:\ngot: %#v, want: %#v", test.rawurl, n, test.wantResult) - } - } - } -} - -func TestNodeString(t *testing.T) { - for i, test := range parseNodeTests { - if test.wantError == "" && strings.HasPrefix(test.rawurl, "enode://") { - str := test.wantResult.String() - if str != test.rawurl { - t.Errorf("test %d: Node.String() mismatch:\ngot: %s\nwant: %s", i, str, test.rawurl) - } - } - } -} - -func TestHexID(t *testing.T) { - ref := NodeID{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, 0, 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 := MustHexID("0x000000000000000000000000000000000000000000000000000000000000000000000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") - id2 := MustHexID("000000000000000000000000000000000000000000000000000000000000000000000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") - - 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 TestNodeID_recover(t *testing.T) { - prv := newkey() - hash := make([]byte, 32) - sig, err := crypto.Sign(hash, prv) - if err != nil { - t.Fatalf("signing error: %v", err) - } - - pub := PubkeyID(&prv.PublicKey) - recpub, err := recoverNodeID(hash, sig) - if err != nil { - t.Fatalf("recovery error: %v", err) - } - if pub != recpub { - t.Errorf("recovered wrong pubkey:\ngot: %v\nwant: %v", recpub, pub) - } - - ecdsa, err := pub.Pubkey() - if err != nil { - t.Errorf("Pubkey error: %v", err) - } - if !reflect.DeepEqual(ecdsa, &prv.PublicKey) { - t.Errorf("Pubkey mismatch:\n got: %#v\n want: %#v", ecdsa, &prv.PublicKey) - } -} - -func TestNodeID_pubkeyBad(t *testing.T) { - ecdsa, err := NodeID{}.Pubkey() - if err == nil { - t.Error("expected error for zero ID") - } - if ecdsa != nil { - t.Error("expected nil result") - } -} - -func TestNodeID_distcmp(t *testing.T) { - distcmpBig := func(target, a, b common.Hash) 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, quickcfg()); err != nil { - t.Error(err) - } -} - -// the random tests is likely to miss the case where they're equal. -func TestNodeID_distcmpEqual(t *testing.T) { - base := common.Hash{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} - x := common.Hash{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 common.Hash) 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, quickcfg()); err != nil { - t.Error(err) - } -} - -// the random tests is likely to miss the case where they're equal. -func TestNodeID_logdistEqual(t *testing.T) { - x := common.Hash{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") - } -} - -func TestNodeID_hashAtDistance(t *testing.T) { - // we don't use quick.Check here because its output isn't - // very helpful when the test fails. - cfg := quickcfg() - for i := 0; i < cfg.MaxCount; i++ { - a := gen(common.Hash{}, cfg.Rand).(common.Hash) - dist := cfg.Rand.Intn(len(common.Hash{}) * 8) - result := hashAtDistance(a, dist) - actualdist := logdist(result, a) - - if dist != actualdist { - t.Log("a: ", a) - t.Log("result:", result) - t.Fatalf("#%d: distance of result is %d, want %d", i, actualdist, dist) - } - } -} - -func quickcfg() *quick.Config { - return &quick.Config{ - MaxCount: 5000, - Rand: rand.New(rand.NewSource(time.Now().Unix())), - } -} - -// TODO: The Generate method can be dropped when we require Go >= 1.5 -// because testing/quick learned to generate arrays in 1.5. - -func (NodeID) Generate(rand *rand.Rand, size int) reflect.Value { - var id NodeID - m := rand.Intn(len(id)) - for i := len(id) - 1; i > m; i-- { - id[i] = byte(rand.Uint32()) - } - return reflect.ValueOf(id) -} diff --git a/p2p/discv5/nodeevent_string.go b/p2p/discv5/nodeevent_string.go deleted file mode 100644 index 38c1993b..00000000 --- a/p2p/discv5/nodeevent_string.go +++ /dev/null @@ -1,17 +0,0 @@ -// Code generated by "stringer -type=nodeEvent"; DO NOT EDIT. - -package discv5 - -import "strconv" - -const _nodeEvent_name = "pongTimeoutpingTimeoutneighboursTimeout" - -var _nodeEvent_index = [...]uint8{0, 11, 22, 39} - -func (i nodeEvent) String() string { - i -= 264 - if i >= nodeEvent(len(_nodeEvent_index)-1) { - return "nodeEvent(" + strconv.FormatInt(int64(i+264), 10) + ")" - } - return _nodeEvent_name[_nodeEvent_index[i]:_nodeEvent_index[i+1]] -} diff --git a/p2p/discv5/ntp.go b/p2p/discv5/ntp.go deleted file mode 100644 index cab89155..00000000 --- a/p2p/discv5/ntp.go +++ /dev/null @@ -1,126 +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 . - -// Contains the NTP time drift detection via the SNTP protocol: -// https://tools.ietf.org/html/rfc4330 - -package discv5 - -import ( - "fmt" - "net" - "sort" - "strings" - "time" - - "github.com/cryptoecc/ETH-ECC/log" -) - -const ( - ntpPool = "pool.ntp.org" // ntpPool is the NTP server to query for the current time - ntpChecks = 3 // Number of measurements to do against the NTP server -) - -// durationSlice attaches the methods of sort.Interface to []time.Duration, -// sorting in increasing order. -type durationSlice []time.Duration - -func (s durationSlice) Len() int { return len(s) } -func (s durationSlice) Less(i, j int) bool { return s[i] < s[j] } -func (s durationSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// checkClockDrift queries an NTP server for clock drifts and warns the user if -// one large enough is detected. -func checkClockDrift() { - drift, err := sntpDrift(ntpChecks) - if err != nil { - return - } - if drift < -driftThreshold || drift > driftThreshold { - warning := fmt.Sprintf("System clock seems off by %v, which can prevent network connectivity", drift) - howtofix := fmt.Sprintf("Please enable network time synchronisation in system settings") - separator := strings.Repeat("-", len(warning)) - - log.Warn(separator) - log.Warn(warning) - log.Warn(howtofix) - log.Warn(separator) - } else { - log.Debug(fmt.Sprintf("Sanity NTP check reported %v drift, all ok", drift)) - } -} - -// sntpDrift does a naive time resolution against an NTP server and returns the -// measured drift. This method uses the simple version of NTP. It's not precise -// but should be fine for these purposes. -// -// Note, it executes two extra measurements compared to the number of requested -// ones to be able to discard the two extremes as outliers. -func sntpDrift(measurements int) (time.Duration, error) { - // Resolve the address of the NTP server - addr, err := net.ResolveUDPAddr("udp", ntpPool+":123") - if err != nil { - return 0, err - } - // Construct the time request (empty package with only 2 fields set): - // Bits 3-5: Protocol version, 3 - // Bits 6-8: Mode of operation, client, 3 - request := make([]byte, 48) - request[0] = 3<<3 | 3 - - // Execute each of the measurements - drifts := []time.Duration{} - for i := 0; i < measurements+2; i++ { - // Dial the NTP server and send the time retrieval request - conn, err := net.DialUDP("udp", nil, addr) - if err != nil { - return 0, err - } - defer conn.Close() - - sent := time.Now() - if _, err = conn.Write(request); err != nil { - return 0, err - } - // Retrieve the reply and calculate the elapsed time - conn.SetDeadline(time.Now().Add(5 * time.Second)) - - reply := make([]byte, 48) - if _, err = conn.Read(reply); err != nil { - return 0, err - } - elapsed := time.Since(sent) - - // Reconstruct the time from the reply data - sec := uint64(reply[43]) | uint64(reply[42])<<8 | uint64(reply[41])<<16 | uint64(reply[40])<<24 - frac := uint64(reply[47]) | uint64(reply[46])<<8 | uint64(reply[45])<<16 | uint64(reply[44])<<24 - - nanosec := sec*1e9 + (frac*1e9)>>32 - - t := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC).Add(time.Duration(nanosec)).Local() - - // Calculate the drift based on an assumed answer time of RRT/2 - drifts = append(drifts, sent.Sub(t)+elapsed/2) - } - // Calculate average drif (drop two extremities to avoid outliers) - sort.Sort(durationSlice(drifts)) - - drift := time.Duration(0) - for i := 1; i < len(drifts)-1; i++ { - drift += drifts[i] - } - return drift / time.Duration(measurements), nil -} diff --git a/p2p/discv5/sim_run_test.go b/p2p/discv5/sim_run_test.go deleted file mode 100644 index bded0cc0..00000000 --- a/p2p/discv5/sim_run_test.go +++ /dev/null @@ -1,126 +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 discv5 - -import ( - "bufio" - "bytes" - "encoding/binary" - "errors" - "fmt" - "io" - "os" - "os/exec" - "runtime" - "strings" - "testing" -) - -func getnacl() (string, error) { - switch runtime.GOARCH { - case "amd64": - _, err := exec.LookPath("sel_ldr_x86_64") - return "amd64p32", err - case "i386": - _, err := exec.LookPath("sel_ldr_i386") - return "i386", err - default: - return "", errors.New("nacl is not supported on " + runtime.GOARCH) - } -} - -// runWithPlaygroundTime executes the caller -// in the NaCl sandbox with faketime enabled. -// -// This function must be called from a Test* function -// and the caller must skip the actual test when isHost is true. -func runWithPlaygroundTime(t *testing.T) (isHost bool) { - if runtime.GOOS == "nacl" { - return false - } - - // Get the caller. - callerPC, _, _, ok := runtime.Caller(1) - if !ok { - panic("can't get caller") - } - callerFunc := runtime.FuncForPC(callerPC) - if callerFunc == nil { - panic("can't get caller") - } - callerName := callerFunc.Name()[strings.LastIndexByte(callerFunc.Name(), '.')+1:] - if !strings.HasPrefix(callerName, "Test") { - panic("must be called from witin a Test* function") - } - testPattern := "^" + callerName + "$" - - // Unfortunately runtime.faketime (playground time mode) only works on NaCl. The NaCl - // SDK must be installed and linked into PATH for this to work. - arch, err := getnacl() - if err != nil { - t.Skip(err) - } - - // Compile and run the calling test using NaCl. - // The extra tag ensures that the TestMain function in sim_main_test.go is used. - cmd := exec.Command("go", "test", "-v", "-tags", "faketime_simulation", "-timeout", "100h", "-run", testPattern, ".") - cmd.Env = append([]string{"GOOS=nacl", "GOARCH=" + arch}, os.Environ()...) - stdout, _ := cmd.StdoutPipe() - stderr, _ := cmd.StderrPipe() - go skipPlaygroundOutputHeaders(os.Stdout, stdout) - go skipPlaygroundOutputHeaders(os.Stderr, stderr) - if err := cmd.Run(); err != nil { - t.Error(err) - } - - // Ensure that the test function doesn't run in the (non-NaCl) host process. - return true -} - -func skipPlaygroundOutputHeaders(out io.Writer, in io.Reader) { - // Additional output can be printed without the headers - // before the NaCl binary starts running (e.g. compiler error messages). - bufin := bufio.NewReader(in) - output, err := bufin.ReadBytes(0) - output = bytes.TrimSuffix(output, []byte{0}) - if len(output) > 0 { - out.Write(output) - } - if err != nil { - return - } - bufin.UnreadByte() - - // Playback header: 0 0 P B <8-byte time> <4-byte data length> - head := make([]byte, 4+8+4) - for { - if _, err := io.ReadFull(bufin, head); err != nil { - if err != io.EOF { - fmt.Fprintln(out, "read error:", err) - } - return - } - if !bytes.HasPrefix(head, []byte{0x00, 0x00, 'P', 'B'}) { - fmt.Fprintf(out, "expected playback header, got %q\n", head) - io.Copy(out, bufin) - return - } - // Copy data until next header. - size := binary.BigEndian.Uint32(head[12:]) - io.CopyN(out, bufin, int64(size)) - } -} diff --git a/p2p/discv5/sim_test.go b/p2p/discv5/sim_test.go deleted file mode 100644 index 86101088..00000000 --- a/p2p/discv5/sim_test.go +++ /dev/null @@ -1,456 +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 discv5 - -import ( - "crypto/ecdsa" - "encoding/binary" - "fmt" - "math/rand" - "net" - "strconv" - "sync" - "sync/atomic" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" -) - -// In this test, nodes try to randomly resolve each other. -func TestSimRandomResolve(t *testing.T) { - t.Skip("boring") - if runWithPlaygroundTime(t) { - return - } - - sim := newSimulation() - bootnode := sim.launchNode(false) - - // A new node joins every 10s. - launcher := time.NewTicker(10 * time.Second) - go func() { - for range launcher.C { - net := sim.launchNode(false) - go randomResolves(t, sim, net) - if err := net.SetFallbackNodes([]*Node{bootnode.Self()}); err != nil { - panic(err) - } - t.Logf("launched @ %v: %x\n", time.Now(), net.Self().ID[:16]) - } - }() - - time.Sleep(3 * time.Hour) - launcher.Stop() - sim.shutdown() - sim.printStats() -} - -func TestSimTopics(t *testing.T) { - t.Skip("NaCl test") - if runWithPlaygroundTime(t) { - return - } - sim := newSimulation() - bootnode := sim.launchNode(false) - - go func() { - nets := make([]*Network, 1024) - for i := range nets { - net := sim.launchNode(false) - nets[i] = net - if err := net.SetFallbackNodes([]*Node{bootnode.Self()}); err != nil { - panic(err) - } - time.Sleep(time.Second * 5) - } - - for i, net := range nets { - if i < 256 { - stop := make(chan struct{}) - go net.RegisterTopic(testTopic, stop) - go func() { - //time.Sleep(time.Second * 36000) - time.Sleep(time.Second * 40000) - close(stop) - }() - time.Sleep(time.Millisecond * 100) - } - // time.Sleep(time.Second * 10) - //time.Sleep(time.Second) - /*if i%500 == 499 { - time.Sleep(time.Second * 9501) - } else { - time.Sleep(time.Second) - }*/ - } - }() - - // A new node joins every 10s. - /* launcher := time.NewTicker(5 * time.Second) - cnt := 0 - var printNet *Network - go func() { - for range launcher.C { - cnt++ - if cnt <= 1000 { - log := false //(cnt == 500) - net := sim.launchNode(log) - if log { - printNet = net - } - if cnt > 500 { - go net.RegisterTopic(testTopic, nil) - } - if err := net.SetFallbackNodes([]*Node{bootnode.Self()}); err != nil { - panic(err) - } - } - //fmt.Printf("launched @ %v: %x\n", time.Now(), net.Self().ID[:16]) - } - }() - */ - time.Sleep(55000 * time.Second) - //launcher.Stop() - sim.shutdown() - //sim.printStats() - //printNet.log.printLogs() -} - -/*func testHierarchicalTopics(i int) []Topic { - digits := strconv.FormatInt(int64(256+i/4), 4) - res := make([]Topic, 5) - for i, _ := range res { - res[i] = Topic("foo" + digits[1:i+1]) - } - return res -}*/ - -func testHierarchicalTopics(i int) []Topic { - digits := strconv.FormatInt(int64(128+i/8), 2) - res := make([]Topic, 8) - for i := range res { - res[i] = Topic("foo" + digits[1:i+1]) - } - return res -} - -func TestSimTopicHierarchy(t *testing.T) { - t.Skip("NaCl test") - if runWithPlaygroundTime(t) { - return - } - sim := newSimulation() - bootnode := sim.launchNode(false) - - go func() { - nets := make([]*Network, 1024) - for i := range nets { - net := sim.launchNode(false) - nets[i] = net - if err := net.SetFallbackNodes([]*Node{bootnode.Self()}); err != nil { - panic(err) - } - time.Sleep(time.Second * 5) - } - - stop := make(chan struct{}) - for i, net := range nets { - //if i < 256 { - for _, topic := range testHierarchicalTopics(i)[:5] { - //fmt.Println("reg", topic) - go net.RegisterTopic(topic, stop) - } - time.Sleep(time.Millisecond * 100) - //} - } - time.Sleep(time.Second * 90000) - close(stop) - }() - - time.Sleep(100000 * time.Second) - sim.shutdown() -} - -func randomResolves(t *testing.T, s *simulation, net *Network) { - randtime := func() time.Duration { - return time.Duration(rand.Intn(50)+20) * time.Second - } - lookup := func(target NodeID) bool { - result := net.Resolve(target) - return result != nil && result.ID == target - } - - timer := time.NewTimer(randtime()) - for { - select { - case <-timer.C: - target := s.randomNode().Self().ID - if !lookup(target) { - t.Errorf("node %x: target %x not found", net.Self().ID[:8], target[:8]) - } - timer.Reset(randtime()) - case <-net.closed: - return - } - } -} - -type simulation struct { - mu sync.RWMutex - nodes map[NodeID]*Network - nodectr uint32 -} - -func newSimulation() *simulation { - return &simulation{nodes: make(map[NodeID]*Network)} -} - -func (s *simulation) shutdown() { - s.mu.RLock() - alive := make([]*Network, 0, len(s.nodes)) - for _, n := range s.nodes { - alive = append(alive, n) - } - defer s.mu.RUnlock() - - for _, n := range alive { - n.Close() - } -} - -func (s *simulation) printStats() { - s.mu.Lock() - defer s.mu.Unlock() - fmt.Println("node counter:", s.nodectr) - fmt.Println("alive nodes:", len(s.nodes)) - - // for _, n := range s.nodes { - // fmt.Printf("%x\n", n.tab.self.ID[:8]) - // transport := n.conn.(*simTransport) - // fmt.Println(" joined:", transport.joinTime) - // fmt.Println(" sends:", transport.hashctr) - // fmt.Println(" table size:", n.tab.count) - // } - - /*for _, n := range s.nodes { - fmt.Println() - fmt.Printf("*** Node %x\n", n.tab.self.ID[:8]) - n.log.printLogs() - }*/ - -} - -func (s *simulation) randomNode() *Network { - s.mu.Lock() - defer s.mu.Unlock() - - n := rand.Intn(len(s.nodes)) - for _, net := range s.nodes { - if n == 0 { - return net - } - n-- - } - return nil -} - -func (s *simulation) launchNode(log bool) *Network { - var ( - num = s.nodectr - key = newkey() - id = PubkeyID(&key.PublicKey) - ip = make(net.IP, 4) - ) - s.nodectr++ - binary.BigEndian.PutUint32(ip, num) - ip[0] = 10 - addr := &net.UDPAddr{IP: ip, Port: 30303} - - transport := &simTransport{joinTime: time.Now(), sender: id, senderAddr: addr, sim: s, priv: key} - net, err := newNetwork(transport, key.PublicKey, "", nil) - if err != nil { - panic("cannot launch new node: " + err.Error()) - } - - s.mu.Lock() - s.nodes[id] = net - s.mu.Unlock() - - return net -} - -func (s *simulation) dropNode(id NodeID) { - s.mu.Lock() - n := s.nodes[id] - delete(s.nodes, id) - s.mu.Unlock() - - n.Close() -} - -type simTransport struct { - joinTime time.Time - sender NodeID - senderAddr *net.UDPAddr - sim *simulation - hashctr uint64 - priv *ecdsa.PrivateKey -} - -func (st *simTransport) localAddr() *net.UDPAddr { - return st.senderAddr -} - -func (st *simTransport) Close() {} - -func (st *simTransport) send(remote *Node, ptype nodeEvent, data interface{}) (hash []byte) { - hash = st.nextHash() - var raw []byte - if ptype == pongPacket { - var err error - raw, _, err = encodePacket(st.priv, byte(ptype), data) - if err != nil { - panic(err) - } - } - - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: hash, - ev: ptype, - data: data, - rawData: raw, - }) - return hash -} - -func (st *simTransport) sendPing(remote *Node, remoteAddr *net.UDPAddr, topics []Topic) []byte { - hash := st.nextHash() - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: hash, - ev: pingPacket, - data: &ping{ - Version: 4, - From: rpcEndpoint{IP: st.senderAddr.IP, UDP: uint16(st.senderAddr.Port), TCP: 30303}, - To: rpcEndpoint{IP: remoteAddr.IP, UDP: uint16(remoteAddr.Port), TCP: 30303}, - Expiration: uint64(time.Now().Unix() + int64(expiration)), - Topics: topics, - }, - }) - return hash -} - -func (st *simTransport) sendPong(remote *Node, pingHash []byte) { - raddr := remote.addr() - - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: st.nextHash(), - ev: pongPacket, - data: &pong{ - To: rpcEndpoint{IP: raddr.IP, UDP: uint16(raddr.Port), TCP: 30303}, - ReplyTok: pingHash, - Expiration: uint64(time.Now().Unix() + int64(expiration)), - }, - }) -} - -func (st *simTransport) sendFindnodeHash(remote *Node, target common.Hash) { - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: st.nextHash(), - ev: findnodeHashPacket, - data: &findnodeHash{ - Target: target, - Expiration: uint64(time.Now().Unix() + int64(expiration)), - }, - }) -} - -func (st *simTransport) sendTopicRegister(remote *Node, topics []Topic, idx int, pong []byte) { - //fmt.Println("send", topics, pong) - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: st.nextHash(), - ev: topicRegisterPacket, - data: &topicRegister{ - Topics: topics, - Idx: uint(idx), - Pong: pong, - }, - }) -} - -func (st *simTransport) sendTopicNodes(remote *Node, queryHash common.Hash, nodes []*Node) { - rnodes := make([]rpcNode, len(nodes)) - for i := range nodes { - rnodes[i] = nodeToRPC(nodes[i]) - } - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: st.nextHash(), - ev: topicNodesPacket, - data: &topicNodes{Echo: queryHash, Nodes: rnodes}, - }) -} - -func (st *simTransport) sendNeighbours(remote *Node, nodes []*Node) { - // TODO: send multiple packets - rnodes := make([]rpcNode, len(nodes)) - for i := range nodes { - rnodes[i] = nodeToRPC(nodes[i]) - } - st.sendPacket(remote.ID, ingressPacket{ - remoteID: st.sender, - remoteAddr: st.senderAddr, - hash: st.nextHash(), - ev: neighborsPacket, - data: &neighbors{ - Nodes: rnodes, - Expiration: uint64(time.Now().Unix() + int64(expiration)), - }, - }) -} - -func (st *simTransport) nextHash() []byte { - v := atomic.AddUint64(&st.hashctr, 1) - var hash common.Hash - binary.BigEndian.PutUint64(hash[:], v) - return hash[:] -} - -const packetLoss = 0 // 1/1000 - -func (st *simTransport) sendPacket(remote NodeID, p ingressPacket) { - if rand.Int31n(1000) >= packetLoss { - st.sim.mu.RLock() - recipient := st.sim.nodes[remote] - st.sim.mu.RUnlock() - - time.AfterFunc(200*time.Millisecond, func() { - recipient.reqReadPacket(p) - }) - } -} diff --git a/p2p/discv5/table.go b/p2p/discv5/table.go deleted file mode 100644 index 309871d1..00000000 --- a/p2p/discv5/table.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 discv5 implements the RLPx v5 Topic Discovery Protocol. -// -// The Topic Discovery protocol provides a way to find RLPx nodes that -// can be connected to. It uses a Kademlia-like protocol to maintain a -// distributed database of the IDs and endpoints of all listening -// nodes. -package discv5 - -import ( - "crypto/rand" - "encoding/binary" - "fmt" - "net" - "sort" - - "github.com/cryptoecc/ETH-ECC/common" -) - -const ( - alpha = 3 // Kademlia concurrency factor - bucketSize = 16 // Kademlia bucket size - hashBits = len(common.Hash{}) * 8 - nBuckets = hashBits + 1 // Number of buckets - - maxFindnodeFailures = 5 -) - -type Table struct { - count int // number of nodes - buckets [nBuckets]*bucket // index of known nodes by distance - nodeAddedHook func(*Node) // for testing - self *Node // metadata of the local node -} - -// bucket contains nodes, ordered by their last activity. the entry -// that was most recently active is the first element in entries. -type bucket struct { - entries []*Node - replacements []*Node -} - -func newTable(ourID NodeID, ourAddr *net.UDPAddr) *Table { - self := NewNode(ourID, ourAddr.IP, uint16(ourAddr.Port), uint16(ourAddr.Port)) - tab := &Table{self: self} - for i := range tab.buckets { - tab.buckets[i] = new(bucket) - } - return tab -} - -const printTable = false - -// chooseBucketRefreshTarget selects random refresh targets to keep all Kademlia -// buckets filled with live connections and keep the network topology healthy. -// This requires selecting addresses closer to our own with a higher probability -// in order to refresh closer buckets too. -// -// This algorithm approximates the distance distribution of existing nodes in the -// table by selecting a random node from the table and selecting a target address -// with a distance less than twice of that of the selected node. -// This algorithm will be improved later to specifically target the least recently -// used buckets. -func (tab *Table) chooseBucketRefreshTarget() common.Hash { - entries := 0 - if printTable { - fmt.Println() - } - for i, b := range &tab.buckets { - entries += len(b.entries) - if printTable { - for _, e := range b.entries { - fmt.Println(i, e.state, e.addr().String(), e.ID.String(), e.sha.Hex()) - } - } - } - - prefix := binary.BigEndian.Uint64(tab.self.sha[0:8]) - dist := ^uint64(0) - entry := int(randUint(uint32(entries + 1))) - for _, b := range &tab.buckets { - if entry < len(b.entries) { - n := b.entries[entry] - dist = binary.BigEndian.Uint64(n.sha[0:8]) ^ prefix - break - } - entry -= len(b.entries) - } - - ddist := ^uint64(0) - if dist+dist > dist { - ddist = dist - } - targetPrefix := prefix ^ randUint64n(ddist) - - var target common.Hash - binary.BigEndian.PutUint64(target[0:8], targetPrefix) - rand.Read(target[8:]) - return target -} - -// readRandomNodes fills the given slice with random nodes from the -// table. It will not write the same node more than once. The nodes in -// the slice are copies and can be modified by the caller. -func (tab *Table) readRandomNodes(buf []*Node) (n int) { - // TODO: tree-based buckets would help here - // Find all non-empty buckets and get a fresh slice of their entries. - var buckets [][]*Node - for _, b := range &tab.buckets { - if len(b.entries) > 0 { - buckets = append(buckets, b.entries) - } - } - if len(buckets) == 0 { - return 0 - } - // Shuffle the buckets. - for i := uint32(len(buckets)) - 1; i > 0; i-- { - j := randUint(i) - 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] = &(*b[0]) - buckets[j] = b[1:] - if len(b) == 1 { - buckets = append(buckets[:j], buckets[j+1:]...) - } - if len(buckets) == 0 { - break - } - } - return i + 1 -} - -func randUint(max uint32) uint32 { - if max < 2 { - return 0 - } - var b [4]byte - rand.Read(b[:]) - return binary.BigEndian.Uint32(b[:]) % max -} - -func randUint64n(max uint64) uint64 { - if max < 2 { - return 0 - } - var b [8]byte - rand.Read(b[:]) - return binary.BigEndian.Uint64(b[:]) % max -} - -// 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 common.Hash, nresults int) *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 { - close.push(n, nresults) - } - } - return close -} - -// add attempts to add the given node its corresponding bucket. If the -// bucket has space available, adding the node succeeds immediately. -// Otherwise, the node is added to the replacement cache for the bucket. -func (tab *Table) add(n *Node) (contested *Node) { - //fmt.Println("add", n.addr().String(), n.ID.String(), n.sha.Hex()) - if n.ID == tab.self.ID { - return - } - b := tab.buckets[logdist(tab.self.sha, n.sha)] - switch { - case b.bump(n): - // n exists in b. - return nil - case len(b.entries) < bucketSize: - // b has space available. - b.addFront(n) - tab.count++ - if tab.nodeAddedHook != nil { - tab.nodeAddedHook(n) - } - return nil - default: - // b has no space left, add to replacement cache - // and revalidate the last entry. - // TODO: drop previous node - b.replacements = append(b.replacements, n) - if len(b.replacements) > bucketSize { - copy(b.replacements, b.replacements[1:]) - b.replacements = b.replacements[:len(b.replacements)-1] - } - return b.entries[len(b.entries)-1] - } -} - -// stuff adds nodes the table to the end of their corresponding bucket -// if the bucket is not full. -func (tab *Table) stuff(nodes []*Node) { -outer: - for _, n := range nodes { - if n.ID == tab.self.ID { - continue // don't add self - } - bucket := tab.buckets[logdist(tab.self.sha, n.sha)] - for i := range bucket.entries { - if bucket.entries[i].ID == n.ID { - continue outer // already in bucket - } - } - if len(bucket.entries) < bucketSize { - bucket.entries = append(bucket.entries, n) - tab.count++ - if tab.nodeAddedHook != nil { - tab.nodeAddedHook(n) - } - } - } -} - -// delete removes an entry from the node table (used to evacuate -// failed/non-bonded discovery peers). -func (tab *Table) delete(node *Node) { - //fmt.Println("delete", node.addr().String(), node.ID.String(), node.sha.Hex()) - bucket := tab.buckets[logdist(tab.self.sha, node.sha)] - for i := range bucket.entries { - if bucket.entries[i].ID == node.ID { - bucket.entries = append(bucket.entries[:i], bucket.entries[i+1:]...) - tab.count-- - return - } - } -} - -func (tab *Table) deleteReplace(node *Node) { - b := tab.buckets[logdist(tab.self.sha, node.sha)] - i := 0 - for i < len(b.entries) { - if b.entries[i].ID == node.ID { - b.entries = append(b.entries[:i], b.entries[i+1:]...) - tab.count-- - } else { - i++ - } - } - // refill from replacement cache - // TODO: maybe use random index - if len(b.entries) < bucketSize && len(b.replacements) > 0 { - ri := len(b.replacements) - 1 - b.addFront(b.replacements[ri]) - tab.count++ - b.replacements[ri] = nil - b.replacements = b.replacements[:ri] - } -} - -func (b *bucket) addFront(n *Node) { - b.entries = append(b.entries, nil) - copy(b.entries[1:], b.entries) - b.entries[0] = n -} - -func (b *bucket) bump(n *Node) bool { - for i := range b.entries { - if b.entries[i].ID == n.ID { - // move it to the front - copy(b.entries[1:], b.entries[:i]) - b.entries[0] = n - return true - } - } - return false -} - -// nodesByDistance is a list of nodes, ordered by -// distance to target. -type nodesByDistance struct { - entries []*Node - target common.Hash -} - -// push adds the given node to the list, keeping the total size below maxElems. -func (h *nodesByDistance) push(n *Node, maxElems int) { - ix := sort.Search(len(h.entries), func(i int) bool { - return distcmp(h.target, h.entries[i].sha, n.sha) > 0 - }) - if len(h.entries) < maxElems { - h.entries = append(h.entries, n) - } - if ix == len(h.entries) { - // farther away than all nodes we already have. - // if there was room for it, the node is now the last element. - } else { - // slide existing entries down to make room - // this will overwrite the entry we just appended. - copy(h.entries[ix+1:], h.entries[ix:]) - h.entries[ix] = n - } -} diff --git a/p2p/discv5/table_test.go b/p2p/discv5/table_test.go deleted file mode 100644 index 632f8a6d..00000000 --- a/p2p/discv5/table_test.go +++ /dev/null @@ -1,337 +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 discv5 - -import ( - "crypto/ecdsa" - "fmt" - "math/rand" - - "net" - "reflect" - "testing" - "testing/quick" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" -) - -type nullTransport struct{} - -func (nullTransport) sendPing(remote *Node, remoteAddr *net.UDPAddr) []byte { return []byte{1} } -func (nullTransport) sendPong(remote *Node, pingHash []byte) {} -func (nullTransport) sendFindnode(remote *Node, target NodeID) {} -func (nullTransport) sendNeighbours(remote *Node, nodes []*Node) {} -func (nullTransport) localAddr() *net.UDPAddr { return new(net.UDPAddr) } -func (nullTransport) Close() {} - -// func TestTable_pingReplace(t *testing.T) { -// doit := func(newNodeIsResponding, lastInBucketIsResponding bool) { -// transport := newPingRecorder() -// tab, _ := newTable(transport, NodeID{}, &net.UDPAddr{}) -// defer tab.Close() -// pingSender := NewNode(MustHexID("a502af0f59b2aab7746995408c79e9ca312d2793cc997e44fc55eda62f0150bbb8c59a6f9269ba3a081518b62699ee807c7c19c20125ddfccca872608af9e370"), net.IP{}, 99, 99) -// -// // fill up the sender's bucket. -// last := fillBucket(tab, 253) -// -// // this call to bond should replace the last node -// // in its bucket if the node is not responding. -// transport.responding[last.ID] = lastInBucketIsResponding -// transport.responding[pingSender.ID] = newNodeIsResponding -// tab.bond(true, pingSender.ID, &net.UDPAddr{}, 0) -// -// // first ping goes to sender (bonding pingback) -// if !transport.pinged[pingSender.ID] { -// t.Error("table did not ping back sender") -// } -// if newNodeIsResponding { -// // second ping goes to oldest node in bucket -// // to see whether it is still alive. -// if !transport.pinged[last.ID] { -// t.Error("table did not ping last node in bucket") -// } -// } -// -// tab.mutex.Lock() -// defer tab.mutex.Unlock() -// if l := len(tab.buckets[253].entries); l != bucketSize { -// t.Errorf("wrong bucket size after bond: got %d, want %d", l, bucketSize) -// } -// -// if lastInBucketIsResponding || !newNodeIsResponding { -// if !contains(tab.buckets[253].entries, last.ID) { -// t.Error("last entry was removed") -// } -// if contains(tab.buckets[253].entries, pingSender.ID) { -// t.Error("new entry was added") -// } -// } else { -// if contains(tab.buckets[253].entries, last.ID) { -// t.Error("last entry was not removed") -// } -// if !contains(tab.buckets[253].entries, pingSender.ID) { -// t.Error("new entry was not added") -// } -// } -// } -// -// doit(true, true) -// doit(false, true) -// doit(true, false) -// doit(false, false) -// } - -func TestBucket_bumpNoDuplicates(t *testing.T) { - t.Parallel() - cfg := &quick.Config{ - MaxCount: 1000, - Rand: rand.New(rand.NewSource(time.Now().Unix())), - Values: func(args []reflect.Value, rand *rand.Rand) { - // generate a random list of nodes. this will be the content of the bucket. - n := rand.Intn(bucketSize-1) + 1 - nodes := make([]*Node, n) - for i := range nodes { - nodes[i] = nodeAtDistance(common.Hash{}, 200) - } - args[0] = reflect.ValueOf(nodes) - // generate random bump positions. - bumps := make([]int, rand.Intn(100)) - for i := range bumps { - bumps[i] = rand.Intn(len(nodes)) - } - args[1] = reflect.ValueOf(bumps) - }, - } - - prop := func(nodes []*Node, bumps []int) (ok bool) { - b := &bucket{entries: make([]*Node, len(nodes))} - copy(b.entries, nodes) - for i, pos := range bumps { - b.bump(b.entries[pos]) - if hasDuplicates(b.entries) { - t.Logf("bucket has duplicates after %d/%d bumps:", i+1, len(bumps)) - for _, n := range b.entries { - t.Logf(" %p", n) - } - return false - } - } - return true - } - if err := quick.Check(prop, cfg); err != nil { - t.Error(err) - } -} - -// fillBucket inserts nodes into the given bucket until -// it is full. The node's IDs dont correspond to their -// hashes. -func fillBucket(tab *Table, ld int) (last *Node) { - b := tab.buckets[ld] - for len(b.entries) < bucketSize { - b.entries = append(b.entries, nodeAtDistance(tab.self.sha, ld)) - } - return b.entries[bucketSize-1] -} - -// nodeAtDistance creates a node for which logdist(base, n.sha) == ld. -// The node's ID does not correspond to n.sha. -func nodeAtDistance(base common.Hash, ld int) (n *Node) { - n = new(Node) - n.sha = hashAtDistance(base, ld) - copy(n.ID[:], n.sha[:]) // ensure the node still has a unique ID - return n -} - -type pingRecorder struct{ responding, pinged map[NodeID]bool } - -func newPingRecorder() *pingRecorder { - return &pingRecorder{make(map[NodeID]bool), make(map[NodeID]bool)} -} - -func (t *pingRecorder) findnode(toid NodeID, toaddr *net.UDPAddr, target NodeID) ([]*Node, error) { - panic("findnode called on pingRecorder") -} -func (t *pingRecorder) close() {} -func (t *pingRecorder) waitping(from NodeID) error { - return nil // remote always pings -} -func (t *pingRecorder) ping(toid NodeID, toaddr *net.UDPAddr) error { - t.pinged[toid] = true - if t.responding[toid] { - return nil - } else { - return errTimeout - } -} - -func TestTable_closest(t *testing.T) { - t.Parallel() - - test := func(test *closeTest) bool { - // for any node table, Target and N - tab := newTable(test.Self, &net.UDPAddr{}) - tab.stuff(test.All) - - // check that doClosest(Target, N) returns nodes - result := tab.closest(test.Target, test.N).entries - if hasDuplicates(result) { - t.Errorf("result contains duplicates") - return false - } - if !sortedByDistanceTo(test.Target, result) { - t.Errorf("result is not sorted by distance to target") - return false - } - - // check that the number of results is min(N, tablen) - wantN := test.N - if tab.count < test.N { - wantN = tab.count - } - if len(result) != wantN { - t.Errorf("wrong number of nodes: got %d, want %d", len(result), wantN) - return false - } else if len(result) == 0 { - return true // no need to check distance - } - - // check that the result nodes have minimum distance to target. - for _, b := range tab.buckets { - for _, n := range b.entries { - if contains(result, n.ID) { - continue // don't run the check below for nodes in result - } - farthestResult := result[len(result)-1].sha - if distcmp(test.Target, n.sha, farthestResult) < 0 { - t.Errorf("table contains node that is closer to target but it's not in result") - t.Logf(" Target: %v", test.Target) - t.Logf(" Farthest Result: %v", farthestResult) - t.Logf(" ID: %v", n.ID) - return false - } - } - } - return true - } - if err := quick.Check(test, quickcfg()); err != nil { - t.Error(err) - } -} - -func TestTable_ReadRandomNodesGetAll(t *testing.T) { - cfg := &quick.Config{ - MaxCount: 200, - Rand: rand.New(rand.NewSource(time.Now().Unix())), - Values: func(args []reflect.Value, rand *rand.Rand) { - args[0] = reflect.ValueOf(make([]*Node, rand.Intn(1000))) - }, - } - test := func(buf []*Node) bool { - tab := newTable(NodeID{}, &net.UDPAddr{}) - for i := 0; i < len(buf); i++ { - ld := cfg.Rand.Intn(len(tab.buckets)) - tab.stuff([]*Node{nodeAtDistance(tab.self.sha, ld)}) - } - gotN := tab.readRandomNodes(buf) - if gotN != tab.count { - t.Errorf("wrong number of nodes, got %d, want %d", gotN, tab.count) - return false - } - if hasDuplicates(buf[:gotN]) { - t.Errorf("result contains duplicates") - return false - } - return true - } - if err := quick.Check(test, cfg); err != nil { - t.Error(err) - } -} - -type closeTest struct { - Self NodeID - Target common.Hash - All []*Node - N int -} - -func (*closeTest) Generate(rand *rand.Rand, size int) reflect.Value { - t := &closeTest{ - Self: gen(NodeID{}, rand).(NodeID), - Target: gen(common.Hash{}, rand).(common.Hash), - N: rand.Intn(bucketSize), - } - for _, id := range gen([]NodeID{}, rand).([]NodeID) { - t.All = append(t.All, &Node{ID: id}) - } - return reflect.ValueOf(t) -} - -func hasDuplicates(slice []*Node) bool { - seen := make(map[NodeID]bool) - for i, e := range slice { - if e == nil { - panic(fmt.Sprintf("nil *Node at %d", i)) - } - if seen[e.ID] { - return true - } - seen[e.ID] = true - } - return false -} - -func sortedByDistanceTo(distbase common.Hash, slice []*Node) bool { - var last common.Hash - for i, e := range slice { - if i > 0 && distcmp(distbase, e.sha, last) < 0 { - return false - } - last = e.sha - } - return true -} - -func contains(ns []*Node, id NodeID) bool { - for _, n := range ns { - if n.ID == id { - return true - } - } - return false -} - -// gen wraps quick.Value so it's easier to use. -// it generates a random value of the given value's type. -func gen(typ interface{}, rand *rand.Rand) interface{} { - v, ok := quick.Value(reflect.TypeOf(typ), rand) - if !ok { - panic(fmt.Sprintf("couldn't generate random value of type %T", typ)) - } - return v.Interface() -} - -func newkey() *ecdsa.PrivateKey { - key, err := crypto.GenerateKey() - if err != nil { - panic("couldn't generate key: " + err.Error()) - } - return key -} diff --git a/p2p/discv5/ticket.go b/p2p/discv5/ticket.go deleted file mode 100644 index c0e57bcb..00000000 --- a/p2p/discv5/ticket.go +++ /dev/null @@ -1,954 +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 discv5 - -import ( - "bytes" - "encoding/binary" - "fmt" - "math" - "math/rand" - "sort" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" -) - -const ( - ticketTimeBucketLen = time.Minute - timeWindow = 10 // * ticketTimeBucketLen - wantTicketsInWindow = 10 - collectFrequency = time.Second * 30 - registerFrequency = time.Second * 60 - maxCollectDebt = 10 - maxRegisterDebt = 5 - keepTicketConst = time.Minute * 10 - keepTicketExp = time.Minute * 5 - targetWaitTime = time.Minute * 10 - topicQueryTimeout = time.Second * 5 - topicQueryResend = time.Minute - // topic radius detection - maxRadius = 0xffffffffffffffff - radiusTC = time.Minute * 20 - radiusBucketsPerBit = 8 - minSlope = 1 - minPeakSize = 40 - maxNoAdjust = 20 - lookupWidth = 8 - minRightSum = 20 - searchForceQuery = 4 -) - -// timeBucket represents absolute monotonic time in minutes. -// It is used as the index into the per-topic ticket buckets. -type timeBucket int - -type ticket struct { - topics []Topic - regTime []mclock.AbsTime // Per-topic local absolute time when the ticket can be used. - - // The serial number that was issued by the server. - serial uint32 - // Used by registrar, tracks absolute time when the ticket was created. - issueTime mclock.AbsTime - - // Fields used only by registrants - node *Node // the registrar node that signed this ticket - refCnt int // tracks number of topics that will be registered using this ticket - pong []byte // encoded pong packet signed by the registrar -} - -// ticketRef refers to a single topic in a ticket. -type ticketRef struct { - t *ticket - idx int // index of the topic in t.topics and t.regTime -} - -func (ref ticketRef) topic() Topic { - return ref.t.topics[ref.idx] -} - -func (ref ticketRef) topicRegTime() mclock.AbsTime { - return ref.t.regTime[ref.idx] -} - -func pongToTicket(localTime mclock.AbsTime, topics []Topic, node *Node, p *ingressPacket) (*ticket, error) { - wps := p.data.(*pong).WaitPeriods - if len(topics) != len(wps) { - return nil, fmt.Errorf("bad wait period list: got %d values, want %d", len(topics), len(wps)) - } - if rlpHash(topics) != p.data.(*pong).TopicHash { - return nil, fmt.Errorf("bad topic hash") - } - t := &ticket{ - issueTime: localTime, - node: node, - topics: topics, - pong: p.rawData, - regTime: make([]mclock.AbsTime, len(wps)), - } - // Convert wait periods to local absolute time. - for i, wp := range wps { - t.regTime[i] = localTime + mclock.AbsTime(time.Second*time.Duration(wp)) - } - return t, nil -} - -func ticketToPong(t *ticket, pong *pong) { - pong.Expiration = uint64(t.issueTime / mclock.AbsTime(time.Second)) - pong.TopicHash = rlpHash(t.topics) - pong.TicketSerial = t.serial - pong.WaitPeriods = make([]uint32, len(t.regTime)) - for i, regTime := range t.regTime { - pong.WaitPeriods[i] = uint32(time.Duration(regTime-t.issueTime) / time.Second) - } -} - -type ticketStore struct { - // radius detector and target address generator - // exists for both searched and registered topics - radius map[Topic]*topicRadius - - // Contains buckets (for each absolute minute) of tickets - // that can be used in that minute. - // This is only set if the topic is being registered. - tickets map[Topic]*topicTickets - - regQueue []Topic // Topic registration queue for round robin attempts - regSet map[Topic]struct{} // Topic registration queue contents for fast filling - - nodes map[*Node]*ticket - nodeLastReq map[*Node]reqInfo - - lastBucketFetched timeBucket - nextTicketCached *ticketRef - nextTicketReg mclock.AbsTime - - searchTopicMap map[Topic]searchTopic - nextTopicQueryCleanup mclock.AbsTime - queriesSent map[*Node]map[common.Hash]sentQuery -} - -type searchTopic struct { - foundChn chan<- *Node -} - -type sentQuery struct { - sent mclock.AbsTime - lookup lookupInfo -} - -type topicTickets struct { - buckets map[timeBucket][]ticketRef - nextLookup mclock.AbsTime - nextReg mclock.AbsTime -} - -func newTicketStore() *ticketStore { - return &ticketStore{ - radius: make(map[Topic]*topicRadius), - tickets: make(map[Topic]*topicTickets), - regSet: make(map[Topic]struct{}), - nodes: make(map[*Node]*ticket), - nodeLastReq: make(map[*Node]reqInfo), - searchTopicMap: make(map[Topic]searchTopic), - queriesSent: make(map[*Node]map[common.Hash]sentQuery), - } -} - -// addTopic starts tracking a topic. If register is true, -// the local node will register the topic and tickets will be collected. -func (s *ticketStore) addTopic(topic Topic, register bool) { - log.Trace("Adding discovery topic", "topic", topic, "register", register) - if s.radius[topic] == nil { - s.radius[topic] = newTopicRadius(topic) - } - if register && s.tickets[topic] == nil { - s.tickets[topic] = &topicTickets{buckets: make(map[timeBucket][]ticketRef)} - } -} - -func (s *ticketStore) addSearchTopic(t Topic, foundChn chan<- *Node) { - s.addTopic(t, false) - if s.searchTopicMap[t].foundChn == nil { - s.searchTopicMap[t] = searchTopic{foundChn: foundChn} - } -} - -func (s *ticketStore) removeSearchTopic(t Topic) { - if st := s.searchTopicMap[t]; st.foundChn != nil { - delete(s.searchTopicMap, t) - } -} - -// removeRegisterTopic deletes all tickets for the given topic. -func (s *ticketStore) removeRegisterTopic(topic Topic) { - log.Trace("Removing discovery topic", "topic", topic) - if s.tickets[topic] == nil { - log.Warn("Removing non-existent discovery topic", "topic", topic) - return - } - for _, list := range s.tickets[topic].buckets { - for _, ref := range list { - ref.t.refCnt-- - if ref.t.refCnt == 0 { - delete(s.nodes, ref.t.node) - delete(s.nodeLastReq, ref.t.node) - } - } - } - delete(s.tickets, topic) -} - -func (s *ticketStore) regTopicSet() []Topic { - topics := make([]Topic, 0, len(s.tickets)) - for topic := range s.tickets { - topics = append(topics, topic) - } - return topics -} - -// nextRegisterLookup returns the target of the next lookup for ticket collection. -func (s *ticketStore) nextRegisterLookup() (lookupInfo, time.Duration) { - // Queue up any new topics (or discarded ones), preserving iteration order - for topic := range s.tickets { - if _, ok := s.regSet[topic]; !ok { - s.regQueue = append(s.regQueue, topic) - s.regSet[topic] = struct{}{} - } - } - // Iterate over the set of all topics and look up the next suitable one - for len(s.regQueue) > 0 { - // Fetch the next topic from the queue, and ensure it still exists - topic := s.regQueue[0] - s.regQueue = s.regQueue[1:] - delete(s.regSet, topic) - - if s.tickets[topic] == nil { - continue - } - // If the topic needs more tickets, return it - if s.tickets[topic].nextLookup < mclock.Now() { - next, delay := s.radius[topic].nextTarget(false), 100*time.Millisecond - log.Trace("Found discovery topic to register", "topic", topic, "target", next.target, "delay", delay) - return next, delay - } - } - // No registration topics found or all exhausted, sleep - delay := 40 * time.Second - log.Trace("No topic found to register", "delay", delay) - return lookupInfo{}, delay -} - -func (s *ticketStore) nextSearchLookup(topic Topic) lookupInfo { - tr := s.radius[topic] - target := tr.nextTarget(tr.radiusLookupCnt >= searchForceQuery) - if target.radiusLookup { - tr.radiusLookupCnt++ - } else { - tr.radiusLookupCnt = 0 - } - return target -} - -// ticketsInWindow returns the tickets of a given topic in the registration window. -func (s *ticketStore) ticketsInWindow(topic Topic) []ticketRef { - // Sanity check that the topic still exists before operating on it - if s.tickets[topic] == nil { - log.Warn("Listing non-existing discovery tickets", "topic", topic) - return nil - } - // Gather all the tickers in the next time window - var tickets []ticketRef - - buckets := s.tickets[topic].buckets - for idx := timeBucket(0); idx < timeWindow; idx++ { - tickets = append(tickets, buckets[s.lastBucketFetched+idx]...) - } - log.Trace("Retrieved discovery registration tickets", "topic", topic, "from", s.lastBucketFetched, "tickets", len(tickets)) - return tickets -} - -func (s *ticketStore) removeExcessTickets(t Topic) { - tickets := s.ticketsInWindow(t) - if len(tickets) <= wantTicketsInWindow { - return - } - sort.Sort(ticketRefByWaitTime(tickets)) - for _, r := range tickets[wantTicketsInWindow:] { - s.removeTicketRef(r) - } -} - -type ticketRefByWaitTime []ticketRef - -// Len is the number of elements in the collection. -func (s ticketRefByWaitTime) Len() int { - return len(s) -} - -func (ref ticketRef) waitTime() mclock.AbsTime { - return ref.t.regTime[ref.idx] - ref.t.issueTime -} - -// Less reports whether the element with -// index i should sort before the element with index j. -func (s ticketRefByWaitTime) Less(i, j int) bool { - return s[i].waitTime() < s[j].waitTime() -} - -// Swap swaps the elements with indexes i and j. -func (s ticketRefByWaitTime) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s *ticketStore) addTicketRef(r ticketRef) { - topic := r.t.topics[r.idx] - tickets := s.tickets[topic] - if tickets == nil { - log.Warn("Adding ticket to non-existent topic", "topic", topic) - return - } - bucket := timeBucket(r.t.regTime[r.idx] / mclock.AbsTime(ticketTimeBucketLen)) - tickets.buckets[bucket] = append(tickets.buckets[bucket], r) - r.t.refCnt++ - - min := mclock.Now() - mclock.AbsTime(collectFrequency)*maxCollectDebt - if tickets.nextLookup < min { - tickets.nextLookup = min - } - tickets.nextLookup += mclock.AbsTime(collectFrequency) - - //s.removeExcessTickets(topic) -} - -func (s *ticketStore) nextFilteredTicket() (*ticketRef, time.Duration) { - now := mclock.Now() - for { - ticket, wait := s.nextRegisterableTicket() - if ticket == nil { - return ticket, wait - } - log.Trace("Found discovery ticket to register", "node", ticket.t.node, "serial", ticket.t.serial, "wait", wait) - - regTime := now + mclock.AbsTime(wait) - topic := ticket.t.topics[ticket.idx] - if s.tickets[topic] != nil && regTime >= s.tickets[topic].nextReg { - return ticket, wait - } - s.removeTicketRef(*ticket) - } -} - -func (s *ticketStore) ticketRegistered(ref ticketRef) { - now := mclock.Now() - - topic := ref.t.topics[ref.idx] - tickets := s.tickets[topic] - min := now - mclock.AbsTime(registerFrequency)*maxRegisterDebt - if min > tickets.nextReg { - tickets.nextReg = min - } - tickets.nextReg += mclock.AbsTime(registerFrequency) - s.tickets[topic] = tickets - - s.removeTicketRef(ref) -} - -// nextRegisterableTicket returns the next ticket that can be used -// to register. -// -// If the returned wait time <= zero the ticket can be used. For a positive -// wait time, the caller should requery the next ticket later. -// -// A ticket can be returned more than once with <= zero wait time in case -// the ticket contains multiple topics. -func (s *ticketStore) nextRegisterableTicket() (*ticketRef, time.Duration) { - now := mclock.Now() - if s.nextTicketCached != nil { - return s.nextTicketCached, time.Duration(s.nextTicketCached.topicRegTime() - now) - } - - for bucket := s.lastBucketFetched; ; bucket++ { - var ( - empty = true // true if there are no tickets - nextTicket ticketRef // uninitialized if this bucket is empty - ) - for _, tickets := range s.tickets { - //s.removeExcessTickets(topic) - if len(tickets.buckets) != 0 { - empty = false - - list := tickets.buckets[bucket] - for _, ref := range list { - //debugLog(fmt.Sprintf(" nrt bucket = %d node = %x sn = %v wait = %v", bucket, ref.t.node.ID[:8], ref.t.serial, time.Duration(ref.topicRegTime()-now))) - if nextTicket.t == nil || ref.topicRegTime() < nextTicket.topicRegTime() { - nextTicket = ref - } - } - } - } - if empty { - return nil, 0 - } - if nextTicket.t != nil { - s.nextTicketCached = &nextTicket - return &nextTicket, time.Duration(nextTicket.topicRegTime() - now) - } - s.lastBucketFetched = bucket - } -} - -// removeTicket removes a ticket from the ticket store -func (s *ticketStore) removeTicketRef(ref ticketRef) { - log.Trace("Removing discovery ticket reference", "node", ref.t.node.ID, "serial", ref.t.serial) - - // Make nextRegisterableTicket return the next available ticket. - s.nextTicketCached = nil - - topic := ref.topic() - tickets := s.tickets[topic] - - if tickets == nil { - log.Trace("Removing tickets from unknown topic", "topic", topic) - return - } - bucket := timeBucket(ref.t.regTime[ref.idx] / mclock.AbsTime(ticketTimeBucketLen)) - list := tickets.buckets[bucket] - idx := -1 - for i, bt := range list { - if bt.t == ref.t { - idx = i - break - } - } - if idx == -1 { - panic(nil) - } - list = append(list[:idx], list[idx+1:]...) - if len(list) != 0 { - tickets.buckets[bucket] = list - } else { - delete(tickets.buckets, bucket) - } - ref.t.refCnt-- - if ref.t.refCnt == 0 { - delete(s.nodes, ref.t.node) - delete(s.nodeLastReq, ref.t.node) - } -} - -type lookupInfo struct { - target common.Hash - topic Topic - radiusLookup bool -} - -type reqInfo struct { - pingHash []byte - lookup lookupInfo - time mclock.AbsTime -} - -// returns -1 if not found -func (t *ticket) findIdx(topic Topic) int { - for i, tt := range t.topics { - if tt == topic { - return i - } - } - return -1 -} - -func (s *ticketStore) registerLookupDone(lookup lookupInfo, nodes []*Node, ping func(n *Node) []byte) { - now := mclock.Now() - for i, n := range nodes { - if i == 0 || (binary.BigEndian.Uint64(n.sha[:8])^binary.BigEndian.Uint64(lookup.target[:8])) < s.radius[lookup.topic].minRadius { - if lookup.radiusLookup { - if lastReq, ok := s.nodeLastReq[n]; !ok || time.Duration(now-lastReq.time) > radiusTC { - s.nodeLastReq[n] = reqInfo{pingHash: ping(n), lookup: lookup, time: now} - } - } else { - if s.nodes[n] == nil { - s.nodeLastReq[n] = reqInfo{pingHash: ping(n), lookup: lookup, time: now} - } - } - } - } -} - -func (s *ticketStore) searchLookupDone(lookup lookupInfo, nodes []*Node, query func(n *Node, topic Topic) []byte) { - now := mclock.Now() - for i, n := range nodes { - if i == 0 || (binary.BigEndian.Uint64(n.sha[:8])^binary.BigEndian.Uint64(lookup.target[:8])) < s.radius[lookup.topic].minRadius { - if lookup.radiusLookup { - if lastReq, ok := s.nodeLastReq[n]; !ok || time.Duration(now-lastReq.time) > radiusTC { - s.nodeLastReq[n] = reqInfo{pingHash: nil, lookup: lookup, time: now} - } - } // else { - if s.canQueryTopic(n, lookup.topic) { - hash := query(n, lookup.topic) - if hash != nil { - s.addTopicQuery(common.BytesToHash(hash), n, lookup) - } - } - //} - } - } -} - -func (s *ticketStore) adjustWithTicket(now mclock.AbsTime, targetHash common.Hash, t *ticket) { - for i, topic := range t.topics { - if tt, ok := s.radius[topic]; ok { - tt.adjustWithTicket(now, targetHash, ticketRef{t, i}) - } - } -} - -func (s *ticketStore) addTicket(localTime mclock.AbsTime, pingHash []byte, ticket *ticket) { - log.Trace("Adding discovery ticket", "node", ticket.node.ID, "serial", ticket.serial) - - lastReq, ok := s.nodeLastReq[ticket.node] - if !(ok && bytes.Equal(pingHash, lastReq.pingHash)) { - return - } - s.adjustWithTicket(localTime, lastReq.lookup.target, ticket) - - if lastReq.lookup.radiusLookup || s.nodes[ticket.node] != nil { - return - } - - topic := lastReq.lookup.topic - topicIdx := ticket.findIdx(topic) - if topicIdx == -1 { - return - } - - bucket := timeBucket(localTime / mclock.AbsTime(ticketTimeBucketLen)) - if s.lastBucketFetched == 0 || bucket < s.lastBucketFetched { - s.lastBucketFetched = bucket - } - - if _, ok := s.tickets[topic]; ok { - wait := ticket.regTime[topicIdx] - localTime - rnd := rand.ExpFloat64() - if rnd > 10 { - rnd = 10 - } - if float64(wait) < float64(keepTicketConst)+float64(keepTicketExp)*rnd { - // use the ticket to register this topic - //fmt.Println("addTicket", ticket.node.ID[:8], ticket.node.addr().String(), ticket.serial, ticket.pong) - s.addTicketRef(ticketRef{ticket, topicIdx}) - } - } - - if ticket.refCnt > 0 { - s.nextTicketCached = nil - s.nodes[ticket.node] = ticket - } -} - -func (s *ticketStore) getNodeTicket(node *Node) *ticket { - if s.nodes[node] == nil { - log.Trace("Retrieving node ticket", "node", node.ID, "serial", nil) - } else { - log.Trace("Retrieving node ticket", "node", node.ID, "serial", s.nodes[node].serial) - } - return s.nodes[node] -} - -func (s *ticketStore) canQueryTopic(node *Node, topic Topic) bool { - qq := s.queriesSent[node] - if qq != nil { - now := mclock.Now() - for _, sq := range qq { - if sq.lookup.topic == topic && sq.sent > now-mclock.AbsTime(topicQueryResend) { - return false - } - } - } - return true -} - -func (s *ticketStore) addTopicQuery(hash common.Hash, node *Node, lookup lookupInfo) { - now := mclock.Now() - qq := s.queriesSent[node] - if qq == nil { - qq = make(map[common.Hash]sentQuery) - s.queriesSent[node] = qq - } - qq[hash] = sentQuery{sent: now, lookup: lookup} - s.cleanupTopicQueries(now) -} - -func (s *ticketStore) cleanupTopicQueries(now mclock.AbsTime) { - if s.nextTopicQueryCleanup > now { - return - } - exp := now - mclock.AbsTime(topicQueryResend) - for n, qq := range s.queriesSent { - for h, q := range qq { - if q.sent < exp { - delete(qq, h) - } - } - if len(qq) == 0 { - delete(s.queriesSent, n) - } - } - s.nextTopicQueryCleanup = now + mclock.AbsTime(topicQueryTimeout) -} - -func (s *ticketStore) gotTopicNodes(from *Node, hash common.Hash, nodes []rpcNode) (timeout bool) { - now := mclock.Now() - //fmt.Println("got", from.addr().String(), hash, len(nodes)) - qq := s.queriesSent[from] - if qq == nil { - return true - } - q, ok := qq[hash] - if !ok || now > q.sent+mclock.AbsTime(topicQueryTimeout) { - return true - } - inside := float64(0) - if len(nodes) > 0 { - inside = 1 - } - s.radius[q.lookup.topic].adjust(now, q.lookup.target, from.sha, inside) - chn := s.searchTopicMap[q.lookup.topic].foundChn - if chn == nil { - //fmt.Println("no channel") - return false - } - for _, node := range nodes { - ip := node.IP - if ip.IsUnspecified() || ip.IsLoopback() { - ip = from.IP - } - n := NewNode(node.ID, ip, node.UDP, node.TCP) - select { - case chn <- n: - default: - return false - } - } - return false -} - -type topicRadius struct { - topic Topic - topicHashPrefix uint64 - radius, minRadius uint64 - buckets []topicRadiusBucket - converged bool - radiusLookupCnt int -} - -type topicRadiusEvent int - -const ( - trOutside topicRadiusEvent = iota - trInside - trNoAdjust - trCount -) - -type topicRadiusBucket struct { - weights [trCount]float64 - lastTime mclock.AbsTime - value float64 - lookupSent map[common.Hash]mclock.AbsTime -} - -func (b *topicRadiusBucket) update(now mclock.AbsTime) { - if now == b.lastTime { - return - } - exp := math.Exp(-float64(now-b.lastTime) / float64(radiusTC)) - for i, w := range b.weights { - b.weights[i] = w * exp - } - b.lastTime = now - - for target, tm := range b.lookupSent { - if now-tm > mclock.AbsTime(respTimeout) { - b.weights[trNoAdjust] += 1 - delete(b.lookupSent, target) - } - } -} - -func (b *topicRadiusBucket) adjust(now mclock.AbsTime, inside float64) { - b.update(now) - if inside <= 0 { - b.weights[trOutside] += 1 - } else { - if inside >= 1 { - b.weights[trInside] += 1 - } else { - b.weights[trInside] += inside - b.weights[trOutside] += 1 - inside - } - } -} - -func newTopicRadius(t Topic) *topicRadius { - topicHash := crypto.Keccak256Hash([]byte(t)) - topicHashPrefix := binary.BigEndian.Uint64(topicHash[0:8]) - - return &topicRadius{ - topic: t, - topicHashPrefix: topicHashPrefix, - radius: maxRadius, - minRadius: maxRadius, - } -} - -func (r *topicRadius) getBucketIdx(addrHash common.Hash) int { - prefix := binary.BigEndian.Uint64(addrHash[0:8]) - var log2 float64 - if prefix != r.topicHashPrefix { - log2 = math.Log2(float64(prefix ^ r.topicHashPrefix)) - } - bucket := int((64 - log2) * radiusBucketsPerBit) - max := 64*radiusBucketsPerBit - 1 - if bucket > max { - return max - } - if bucket < 0 { - return 0 - } - return bucket -} - -func (r *topicRadius) targetForBucket(bucket int) common.Hash { - min := math.Pow(2, 64-float64(bucket+1)/radiusBucketsPerBit) - max := math.Pow(2, 64-float64(bucket)/radiusBucketsPerBit) - a := uint64(min) - b := randUint64n(uint64(max - min)) - xor := a + b - if xor < a { - xor = ^uint64(0) - } - prefix := r.topicHashPrefix ^ xor - var target common.Hash - binary.BigEndian.PutUint64(target[0:8], prefix) - globalRandRead(target[8:]) - return target -} - -// package rand provides a Read function in Go 1.6 and later, but -// we can't use it yet because we still support Go 1.5. -func globalRandRead(b []byte) { - pos := 0 - val := 0 - for n := 0; n < len(b); n++ { - if pos == 0 { - val = rand.Int() - pos = 7 - } - b[n] = byte(val) - val >>= 8 - pos-- - } -} - -func (r *topicRadius) isInRadius(addrHash common.Hash) bool { - nodePrefix := binary.BigEndian.Uint64(addrHash[0:8]) - dist := nodePrefix ^ r.topicHashPrefix - return dist < r.radius -} - -func (r *topicRadius) chooseLookupBucket(a, b int) int { - if a < 0 { - a = 0 - } - if a > b { - return -1 - } - c := 0 - for i := a; i <= b; i++ { - if i >= len(r.buckets) || r.buckets[i].weights[trNoAdjust] < maxNoAdjust { - c++ - } - } - if c == 0 { - return -1 - } - rnd := randUint(uint32(c)) - for i := a; i <= b; i++ { - if i >= len(r.buckets) || r.buckets[i].weights[trNoAdjust] < maxNoAdjust { - if rnd == 0 { - return i - } - rnd-- - } - } - panic(nil) // should never happen -} - -func (r *topicRadius) needMoreLookups(a, b int, maxValue float64) bool { - var max float64 - if a < 0 { - a = 0 - } - if b >= len(r.buckets) { - b = len(r.buckets) - 1 - if r.buckets[b].value > max { - max = r.buckets[b].value - } - } - if b >= a { - for i := a; i <= b; i++ { - if r.buckets[i].value > max { - max = r.buckets[i].value - } - } - } - return maxValue-max < minPeakSize -} - -func (r *topicRadius) recalcRadius() (radius uint64, radiusLookup int) { - maxBucket := 0 - maxValue := float64(0) - now := mclock.Now() - v := float64(0) - for i := range r.buckets { - r.buckets[i].update(now) - v += r.buckets[i].weights[trOutside] - r.buckets[i].weights[trInside] - r.buckets[i].value = v - //fmt.Printf("%v %v | ", v, r.buckets[i].weights[trNoAdjust]) - } - //fmt.Println() - slopeCross := -1 - for i, b := range r.buckets { - v := b.value - if v < float64(i)*minSlope { - slopeCross = i - break - } - if v > maxValue { - maxValue = v - maxBucket = i + 1 - } - } - - minRadBucket := len(r.buckets) - sum := float64(0) - for minRadBucket > 0 && sum < minRightSum { - minRadBucket-- - b := r.buckets[minRadBucket] - sum += b.weights[trInside] + b.weights[trOutside] - } - r.minRadius = uint64(math.Pow(2, 64-float64(minRadBucket)/radiusBucketsPerBit)) - - lookupLeft := -1 - if r.needMoreLookups(0, maxBucket-lookupWidth-1, maxValue) { - lookupLeft = r.chooseLookupBucket(maxBucket-lookupWidth, maxBucket-1) - } - lookupRight := -1 - if slopeCross != maxBucket && (minRadBucket <= maxBucket || r.needMoreLookups(maxBucket+lookupWidth, len(r.buckets)-1, maxValue)) { - for len(r.buckets) <= maxBucket+lookupWidth { - r.buckets = append(r.buckets, topicRadiusBucket{lookupSent: make(map[common.Hash]mclock.AbsTime)}) - } - lookupRight = r.chooseLookupBucket(maxBucket, maxBucket+lookupWidth-1) - } - if lookupLeft == -1 { - radiusLookup = lookupRight - } else { - if lookupRight == -1 { - radiusLookup = lookupLeft - } else { - if randUint(2) == 0 { - radiusLookup = lookupLeft - } else { - radiusLookup = lookupRight - } - } - } - - //fmt.Println("mb", maxBucket, "sc", slopeCross, "mrb", minRadBucket, "ll", lookupLeft, "lr", lookupRight, "mv", maxValue) - - if radiusLookup == -1 { - // no more radius lookups needed at the moment, return a radius - r.converged = true - rad := maxBucket - if minRadBucket < rad { - rad = minRadBucket - } - radius = ^uint64(0) - if rad > 0 { - radius = uint64(math.Pow(2, 64-float64(rad)/radiusBucketsPerBit)) - } - r.radius = radius - } - - return -} - -func (r *topicRadius) nextTarget(forceRegular bool) lookupInfo { - if !forceRegular { - _, radiusLookup := r.recalcRadius() - if radiusLookup != -1 { - target := r.targetForBucket(radiusLookup) - r.buckets[radiusLookup].lookupSent[target] = mclock.Now() - return lookupInfo{target: target, topic: r.topic, radiusLookup: true} - } - } - - radExt := r.radius / 2 - if radExt > maxRadius-r.radius { - radExt = maxRadius - r.radius - } - rnd := randUint64n(r.radius) + randUint64n(2*radExt) - if rnd > radExt { - rnd -= radExt - } else { - rnd = radExt - rnd - } - - prefix := r.topicHashPrefix ^ rnd - var target common.Hash - binary.BigEndian.PutUint64(target[0:8], prefix) - globalRandRead(target[8:]) - return lookupInfo{target: target, topic: r.topic, radiusLookup: false} -} - -func (r *topicRadius) adjustWithTicket(now mclock.AbsTime, targetHash common.Hash, t ticketRef) { - wait := t.t.regTime[t.idx] - t.t.issueTime - inside := float64(wait)/float64(targetWaitTime) - 0.5 - if inside > 1 { - inside = 1 - } - if inside < 0 { - inside = 0 - } - r.adjust(now, targetHash, t.t.node.sha, inside) -} - -func (r *topicRadius) adjust(now mclock.AbsTime, targetHash, addrHash common.Hash, inside float64) { - bucket := r.getBucketIdx(addrHash) - //fmt.Println("adjust", bucket, len(r.buckets), inside) - if bucket >= len(r.buckets) { - return - } - r.buckets[bucket].adjust(now, inside) - delete(r.buckets[bucket].lookupSent, targetHash) -} diff --git a/p2p/discv5/topic.go b/p2p/discv5/topic.go deleted file mode 100644 index 28f5d6a8..00000000 --- a/p2p/discv5/topic.go +++ /dev/null @@ -1,407 +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 discv5 - -import ( - "container/heap" - "fmt" - "math" - "math/rand" - "time" - - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/log" -) - -const ( - maxEntries = 10000 - maxEntriesPerTopic = 50 - - fallbackRegistrationExpiry = 1 * time.Hour -) - -type Topic string - -type topicEntry struct { - topic Topic - fifoIdx uint64 - node *Node - expire mclock.AbsTime -} - -type topicInfo struct { - entries map[uint64]*topicEntry - fifoHead, fifoTail uint64 - rqItem *topicRequestQueueItem - wcl waitControlLoop -} - -// removes tail element from the fifo -func (t *topicInfo) getFifoTail() *topicEntry { - for t.entries[t.fifoTail] == nil { - t.fifoTail++ - } - tail := t.entries[t.fifoTail] - t.fifoTail++ - return tail -} - -type nodeInfo struct { - entries map[Topic]*topicEntry - lastIssuedTicket, lastUsedTicket uint32 - // you can't register a ticket newer than lastUsedTicket before noRegUntil (absolute time) - noRegUntil mclock.AbsTime -} - -type topicTable struct { - db *nodeDB - self *Node - nodes map[*Node]*nodeInfo - topics map[Topic]*topicInfo - globalEntries uint64 - requested topicRequestQueue - requestCnt uint64 - lastGarbageCollection mclock.AbsTime -} - -func newTopicTable(db *nodeDB, self *Node) *topicTable { - if printTestImgLogs { - fmt.Printf("*N %016x\n", self.sha[:8]) - } - return &topicTable{ - db: db, - nodes: make(map[*Node]*nodeInfo), - topics: make(map[Topic]*topicInfo), - self: self, - } -} - -func (t *topicTable) getOrNewTopic(topic Topic) *topicInfo { - ti := t.topics[topic] - if ti == nil { - rqItem := &topicRequestQueueItem{ - topic: topic, - priority: t.requestCnt, - } - ti = &topicInfo{ - entries: make(map[uint64]*topicEntry), - rqItem: rqItem, - } - t.topics[topic] = ti - heap.Push(&t.requested, rqItem) - } - return ti -} - -func (t *topicTable) checkDeleteTopic(topic Topic) { - ti := t.topics[topic] - if ti == nil { - return - } - if len(ti.entries) == 0 && ti.wcl.hasMinimumWaitPeriod() { - delete(t.topics, topic) - heap.Remove(&t.requested, ti.rqItem.index) - } -} - -func (t *topicTable) getOrNewNode(node *Node) *nodeInfo { - n := t.nodes[node] - if n == nil { - //fmt.Printf("newNode %016x %016x\n", t.self.sha[:8], node.sha[:8]) - var issued, used uint32 - if t.db != nil { - issued, used = t.db.fetchTopicRegTickets(node.ID) - } - n = &nodeInfo{ - entries: make(map[Topic]*topicEntry), - lastIssuedTicket: issued, - lastUsedTicket: used, - } - t.nodes[node] = n - } - return n -} - -func (t *topicTable) checkDeleteNode(node *Node) { - if n, ok := t.nodes[node]; ok && len(n.entries) == 0 && n.noRegUntil < mclock.Now() { - //fmt.Printf("deleteNode %016x %016x\n", t.self.sha[:8], node.sha[:8]) - delete(t.nodes, node) - } -} - -func (t *topicTable) storeTicketCounters(node *Node) { - n := t.getOrNewNode(node) - if t.db != nil { - t.db.updateTopicRegTickets(node.ID, n.lastIssuedTicket, n.lastUsedTicket) - } -} - -func (t *topicTable) getEntries(topic Topic) []*Node { - t.collectGarbage() - - te := t.topics[topic] - if te == nil { - return nil - } - nodes := make([]*Node, len(te.entries)) - i := 0 - for _, e := range te.entries { - nodes[i] = e.node - i++ - } - t.requestCnt++ - t.requested.update(te.rqItem, t.requestCnt) - return nodes -} - -func (t *topicTable) addEntry(node *Node, topic Topic) { - n := t.getOrNewNode(node) - // clear previous entries by the same node - for _, e := range n.entries { - t.deleteEntry(e) - } - // *** - n = t.getOrNewNode(node) - - tm := mclock.Now() - te := t.getOrNewTopic(topic) - - if len(te.entries) == maxEntriesPerTopic { - t.deleteEntry(te.getFifoTail()) - } - - if t.globalEntries == maxEntries { - t.deleteEntry(t.leastRequested()) // not empty, no need to check for nil - } - - fifoIdx := te.fifoHead - te.fifoHead++ - entry := &topicEntry{ - topic: topic, - fifoIdx: fifoIdx, - node: node, - expire: tm + mclock.AbsTime(fallbackRegistrationExpiry), - } - if printTestImgLogs { - fmt.Printf("*+ %d %v %016x %016x\n", tm/1000000, topic, t.self.sha[:8], node.sha[:8]) - } - te.entries[fifoIdx] = entry - n.entries[topic] = entry - t.globalEntries++ - te.wcl.registered(tm) -} - -// removes least requested element from the fifo -func (t *topicTable) leastRequested() *topicEntry { - for t.requested.Len() > 0 && t.topics[t.requested[0].topic] == nil { - heap.Pop(&t.requested) - } - if t.requested.Len() == 0 { - return nil - } - return t.topics[t.requested[0].topic].getFifoTail() -} - -// entry should exist -func (t *topicTable) deleteEntry(e *topicEntry) { - if printTestImgLogs { - fmt.Printf("*- %d %v %016x %016x\n", mclock.Now()/1000000, e.topic, t.self.sha[:8], e.node.sha[:8]) - } - ne := t.nodes[e.node].entries - delete(ne, e.topic) - if len(ne) == 0 { - t.checkDeleteNode(e.node) - } - te := t.topics[e.topic] - delete(te.entries, e.fifoIdx) - if len(te.entries) == 0 { - t.checkDeleteTopic(e.topic) - } - t.globalEntries-- -} - -// It is assumed that topics and waitPeriods have the same length. -func (t *topicTable) useTicket(node *Node, serialNo uint32, topics []Topic, idx int, issueTime uint64, waitPeriods []uint32) (registered bool) { - log.Trace("Using discovery ticket", "serial", serialNo, "topics", topics, "waits", waitPeriods) - //fmt.Println("useTicket", serialNo, topics, waitPeriods) - t.collectGarbage() - - n := t.getOrNewNode(node) - if serialNo < n.lastUsedTicket { - return false - } - - tm := mclock.Now() - if serialNo > n.lastUsedTicket && tm < n.noRegUntil { - return false - } - if serialNo != n.lastUsedTicket { - n.lastUsedTicket = serialNo - n.noRegUntil = tm + mclock.AbsTime(noRegTimeout()) - t.storeTicketCounters(node) - } - - currTime := uint64(tm / mclock.AbsTime(time.Second)) - regTime := issueTime + uint64(waitPeriods[idx]) - relTime := int64(currTime - regTime) - if relTime >= -1 && relTime <= regTimeWindow+1 { // give clients a little security margin on both ends - if e := n.entries[topics[idx]]; e == nil { - t.addEntry(node, topics[idx]) - } else { - // if there is an active entry, don't move to the front of the FIFO but prolong expire time - e.expire = tm + mclock.AbsTime(fallbackRegistrationExpiry) - } - return true - } - - return false -} - -func (t *topicTable) getTicket(node *Node, topics []Topic) *ticket { - t.collectGarbage() - - now := mclock.Now() - n := t.getOrNewNode(node) - n.lastIssuedTicket++ - t.storeTicketCounters(node) - - tic := &ticket{ - issueTime: now, - topics: topics, - serial: n.lastIssuedTicket, - regTime: make([]mclock.AbsTime, len(topics)), - } - for i, topic := range topics { - var waitPeriod time.Duration - if topic := t.topics[topic]; topic != nil { - waitPeriod = topic.wcl.waitPeriod - } else { - waitPeriod = minWaitPeriod - } - - tic.regTime[i] = now + mclock.AbsTime(waitPeriod) - } - return tic -} - -const gcInterval = time.Minute - -func (t *topicTable) collectGarbage() { - tm := mclock.Now() - if time.Duration(tm-t.lastGarbageCollection) < gcInterval { - return - } - t.lastGarbageCollection = tm - - for node, n := range t.nodes { - for _, e := range n.entries { - if e.expire <= tm { - t.deleteEntry(e) - } - } - - t.checkDeleteNode(node) - } - - for topic := range t.topics { - t.checkDeleteTopic(topic) - } -} - -const ( - minWaitPeriod = time.Minute - regTimeWindow = 10 // seconds - avgnoRegTimeout = time.Minute * 10 - // target average interval between two incoming ad requests - wcTargetRegInterval = time.Minute * 10 / maxEntriesPerTopic - // - wcTimeConst = time.Minute * 10 -) - -// initialization is not required, will set to minWaitPeriod at first registration -type waitControlLoop struct { - lastIncoming mclock.AbsTime - waitPeriod time.Duration -} - -func (w *waitControlLoop) registered(tm mclock.AbsTime) { - w.waitPeriod = w.nextWaitPeriod(tm) - w.lastIncoming = tm -} - -func (w *waitControlLoop) nextWaitPeriod(tm mclock.AbsTime) time.Duration { - period := tm - w.lastIncoming - wp := time.Duration(float64(w.waitPeriod) * math.Exp((float64(wcTargetRegInterval)-float64(period))/float64(wcTimeConst))) - if wp < minWaitPeriod { - wp = minWaitPeriod - } - return wp -} - -func (w *waitControlLoop) hasMinimumWaitPeriod() bool { - return w.nextWaitPeriod(mclock.Now()) == minWaitPeriod -} - -func noRegTimeout() time.Duration { - e := rand.ExpFloat64() - if e > 100 { - e = 100 - } - return time.Duration(float64(avgnoRegTimeout) * e) -} - -type topicRequestQueueItem struct { - topic Topic - priority uint64 - index int -} - -// A topicRequestQueue implements heap.Interface and holds topicRequestQueueItems. -type topicRequestQueue []*topicRequestQueueItem - -func (tq topicRequestQueue) Len() int { return len(tq) } - -func (tq topicRequestQueue) Less(i, j int) bool { - return tq[i].priority < tq[j].priority -} - -func (tq topicRequestQueue) Swap(i, j int) { - tq[i], tq[j] = tq[j], tq[i] - tq[i].index = i - tq[j].index = j -} - -func (tq *topicRequestQueue) Push(x interface{}) { - n := len(*tq) - item := x.(*topicRequestQueueItem) - item.index = n - *tq = append(*tq, item) -} - -func (tq *topicRequestQueue) Pop() interface{} { - old := *tq - n := len(old) - item := old[n-1] - item.index = -1 - *tq = old[0 : n-1] - return item -} - -func (tq *topicRequestQueue) update(item *topicRequestQueueItem, priority uint64) { - item.priority = priority - heap.Fix(tq, item.index) -} diff --git a/p2p/discv5/topic_test.go b/p2p/discv5/topic_test.go deleted file mode 100644 index 173772b8..00000000 --- a/p2p/discv5/topic_test.go +++ /dev/null @@ -1,71 +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 discv5 - -import ( - "encoding/binary" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" -) - -func TestTopicRadius(t *testing.T) { - now := mclock.Now() - topic := Topic("qwerty") - rad := newTopicRadius(topic) - targetRad := (^uint64(0)) / 100 - - waitFn := func(addr common.Hash) time.Duration { - prefix := binary.BigEndian.Uint64(addr[0:8]) - dist := prefix ^ rad.topicHashPrefix - relDist := float64(dist) / float64(targetRad) - relTime := (1 - relDist/2) * 2 - if relTime < 0 { - relTime = 0 - } - return time.Duration(float64(targetWaitTime) * relTime) - } - - bcnt := 0 - cnt := 0 - var sum float64 - for cnt < 100 { - addr := rad.nextTarget(false).target - wait := waitFn(addr) - ticket := &ticket{ - topics: []Topic{topic}, - regTime: []mclock.AbsTime{mclock.AbsTime(wait)}, - node: &Node{nodeNetGuts: nodeNetGuts{sha: addr}}, - } - rad.adjustWithTicket(now, addr, ticketRef{ticket, 0}) - if rad.radius != maxRadius { - cnt++ - sum += float64(rad.radius) - } else { - bcnt++ - if bcnt > 500 { - t.Errorf("Radius did not converge in 500 iterations") - } - } - } - avgRel := sum / float64(cnt) / float64(targetRad) - if avgRel > 1.05 || avgRel < 0.95 { - t.Errorf("Average/target ratio is too far from 1 (%v)", avgRel) - } -} diff --git a/p2p/discv5/udp.go b/p2p/discv5/udp.go deleted file mode 100644 index bac810f6..00000000 --- a/p2p/discv5/udp.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 . - -package discv5 - -import ( - "bytes" - "crypto/ecdsa" - "errors" - "fmt" - "net" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" - "github.com/cryptoecc/ETH-ECC/rlp" -) - -const Version = 4 - -// Errors -var ( - errPacketTooSmall = errors.New("too small") - errBadPrefix = errors.New("bad prefix") - errTimeout = errors.New("RPC timeout") -) - -// Timeouts -const ( - respTimeout = 500 * time.Millisecond - expiration = 20 * time.Second - - driftThreshold = 10 * time.Second // Allowed clock drift before warning user -) - -// RPC request structures -type ( - ping struct { - Version uint - From, To rpcEndpoint - Expiration uint64 - - // v5 - Topics []Topic - - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // pong is the reply to ping. - pong 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). - To rpcEndpoint - - ReplyTok []byte // This contains the hash of the ping packet. - Expiration uint64 // Absolute timestamp at which the packet becomes invalid. - - // v5 - TopicHash common.Hash - TicketSerial uint32 - WaitPeriods []uint32 - - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // findnode is a query for nodes close to the given target. - findnode struct { - Target NodeID // doesn't need to be an actual public key - Expiration uint64 - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // findnode is a query for nodes close to the given target. - findnodeHash struct { - Target common.Hash - Expiration uint64 - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - // reply to findnode - neighbors struct { - Nodes []rpcNode - Expiration uint64 - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` - } - - topicRegister struct { - Topics []Topic - Idx uint - Pong []byte - } - - topicQuery struct { - Topic Topic - Expiration uint64 - } - - // reply to topicQuery - topicNodes struct { - Echo common.Hash - Nodes []rpcNode - } - - rpcNode struct { - IP net.IP // len 4 for IPv4 or 16 for IPv6 - UDP uint16 // for discovery protocol - TCP uint16 // for RLPx protocol - ID NodeID - } - - rpcEndpoint struct { - IP net.IP // len 4 for IPv4 or 16 for IPv6 - UDP uint16 // for discovery protocol - TCP uint16 // for RLPx protocol - } -) - -var ( - versionPrefix = []byte("temporary discovery v5") - versionPrefixSize = len(versionPrefix) - sigSize = 520 / 8 - headSize = versionPrefixSize + sigSize // space of packet frame data -) - -// Neighbors replies are sent across multiple packets to -// stay below the 1280 byte limit. We compute the maximum number -// of entries by stuffing a packet until it grows too large. -var maxNeighbors = func() int { - p := neighbors{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) - size, _, err := rlp.EncodeToReader(p) - if err != nil { - // If this ever happens, it will be caught by the unit tests. - panic("cannot encode: " + err.Error()) - } - if headSize+size+1 >= 1280 { - return n - } - } -}() - -var maxTopicNodes = func() int { - p := topicNodes{} - maxSizeNode := rpcNode{IP: make(net.IP, 16), UDP: ^uint16(0), TCP: ^uint16(0)} - for n := 0; ; n++ { - p.Nodes = append(p.Nodes, maxSizeNode) - size, _, err := rlp.EncodeToReader(p) - if err != nil { - // If this ever happens, it will be caught by the unit tests. - panic("cannot encode: " + err.Error()) - } - if headSize+size+1 >= 1280 { - return n - } - } -}() - -func makeEndpoint(addr *net.UDPAddr, tcpPort uint16) rpcEndpoint { - ip := addr.IP.To4() - if ip == nil { - ip = addr.IP.To16() - } - return rpcEndpoint{IP: ip, UDP: uint16(addr.Port), TCP: tcpPort} -} - -func (e1 rpcEndpoint) equal(e2 rpcEndpoint) bool { - return e1.UDP == e2.UDP && e1.TCP == e2.TCP && e1.IP.Equal(e2.IP) -} - -func nodeFromRPC(sender *net.UDPAddr, rn rpcNode) (*Node, error) { - if err := netutil.CheckRelayIP(sender.IP, rn.IP); err != nil { - return nil, err - } - n := NewNode(rn.ID, rn.IP, rn.UDP, rn.TCP) - err := n.validateComplete() - return n, err -} - -func nodeToRPC(n *Node) rpcNode { - return rpcNode{ID: n.ID, IP: n.IP, UDP: n.UDP, TCP: n.TCP} -} - -type ingressPacket struct { - remoteID NodeID - remoteAddr *net.UDPAddr - ev nodeEvent - hash []byte - data interface{} // one of the RPC structs - rawData []byte -} - -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 RPC protocol. -type udp struct { - conn conn - priv *ecdsa.PrivateKey - ourEndpoint rpcEndpoint - nat nat.Interface - net *Network -} - -// ListenUDP returns a new table that listens for UDP packets on laddr. -func ListenUDP(priv *ecdsa.PrivateKey, conn conn, nodeDBPath string, netrestrict *netutil.Netlist) (*Network, error) { - realaddr := conn.LocalAddr().(*net.UDPAddr) - transport, err := listenUDP(priv, conn, realaddr) - if err != nil { - return nil, err - } - net, err := newNetwork(transport, priv.PublicKey, nodeDBPath, netrestrict) - if err != nil { - return nil, err - } - log.Info("UDP listener up", "net", net.tab.self) - transport.net = net - go transport.readLoop() - return net, nil -} - -func listenUDP(priv *ecdsa.PrivateKey, conn conn, realaddr *net.UDPAddr) (*udp, error) { - return &udp{conn: conn, priv: priv, ourEndpoint: makeEndpoint(realaddr, uint16(realaddr.Port))}, nil -} - -func (t *udp) localAddr() *net.UDPAddr { - return t.conn.LocalAddr().(*net.UDPAddr) -} - -func (t *udp) Close() { - t.conn.Close() -} - -func (t *udp) send(remote *Node, ptype nodeEvent, data interface{}) (hash []byte) { - hash, _ = t.sendPacket(remote.ID, remote.addr(), byte(ptype), data) - return hash -} - -func (t *udp) sendPing(remote *Node, toaddr *net.UDPAddr, topics []Topic) (hash []byte) { - hash, _ = t.sendPacket(remote.ID, toaddr, byte(pingPacket), ping{ - Version: Version, - From: t.ourEndpoint, - To: makeEndpoint(toaddr, uint16(toaddr.Port)), // TODO: maybe use known TCP port from DB - Expiration: uint64(time.Now().Add(expiration).Unix()), - Topics: topics, - }) - return hash -} - -func (t *udp) sendFindnode(remote *Node, target NodeID) { - t.sendPacket(remote.ID, remote.addr(), byte(findnodePacket), findnode{ - Target: target, - Expiration: uint64(time.Now().Add(expiration).Unix()), - }) -} - -func (t *udp) sendNeighbours(remote *Node, results []*Node) { - // 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())} - for i, result := range results { - p.Nodes = append(p.Nodes, nodeToRPC(result)) - if len(p.Nodes) == maxNeighbors || i == len(results)-1 { - t.sendPacket(remote.ID, remote.addr(), byte(neighborsPacket), p) - p.Nodes = p.Nodes[:0] - } - } -} - -func (t *udp) sendFindnodeHash(remote *Node, target common.Hash) { - t.sendPacket(remote.ID, remote.addr(), byte(findnodeHashPacket), findnodeHash{ - Target: target, - Expiration: uint64(time.Now().Add(expiration).Unix()), - }) -} - -func (t *udp) sendTopicRegister(remote *Node, topics []Topic, idx int, pong []byte) { - t.sendPacket(remote.ID, remote.addr(), byte(topicRegisterPacket), topicRegister{ - Topics: topics, - Idx: uint(idx), - Pong: pong, - }) -} - -func (t *udp) sendTopicNodes(remote *Node, queryHash common.Hash, nodes []*Node) { - p := topicNodes{Echo: queryHash} - var sent bool - for _, result := range nodes { - if result.IP.Equal(t.net.tab.self.IP) || netutil.CheckRelayIP(remote.IP, result.IP) == nil { - p.Nodes = append(p.Nodes, nodeToRPC(result)) - } - if len(p.Nodes) == maxTopicNodes { - t.sendPacket(remote.ID, remote.addr(), byte(topicNodesPacket), p) - p.Nodes = p.Nodes[:0] - sent = true - } - } - if !sent || len(p.Nodes) > 0 { - t.sendPacket(remote.ID, remote.addr(), byte(topicNodesPacket), p) - } -} - -func (t *udp) sendPacket(toid NodeID, toaddr *net.UDPAddr, ptype byte, req interface{}) (hash []byte, err error) { - //fmt.Println("sendPacket", nodeEvent(ptype), toaddr.String(), toid.String()) - packet, hash, err := encodePacket(t.priv, ptype, req) - if err != nil { - //fmt.Println(err) - return hash, err - } - log.Trace(fmt.Sprintf(">>> %v to %x@%v", nodeEvent(ptype), toid[:8], toaddr)) - if nbytes, err := t.conn.WriteToUDP(packet, toaddr); err != nil { - log.Trace(fmt.Sprint("UDP send failed:", err)) - } else { - egressTrafficMeter.Mark(int64(nbytes)) - } - //fmt.Println(err) - return hash, err -} - -// zeroed padding space for encodePacket. -var headSpace = make([]byte, headSize) - -func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) (p, hash []byte, err error) { - b := new(bytes.Buffer) - b.Write(headSpace) - b.WriteByte(ptype) - if err := rlp.Encode(b, req); err != nil { - log.Error(fmt.Sprint("error encoding packet:", err)) - return nil, nil, err - } - packet := b.Bytes() - sig, err := crypto.Sign(crypto.Keccak256(packet[headSize:]), priv) - if err != nil { - log.Error(fmt.Sprint("could not sign packet:", err)) - return nil, nil, err - } - copy(packet, versionPrefix) - copy(packet[versionPrefixSize:], sig) - hash = crypto.Keccak256(packet[versionPrefixSize:]) - return packet, hash, nil -} - -// readLoop runs in its own goroutine. it injects ingress UDP packets -// into the network loop. -func (t *udp) readLoop() { - defer t.conn.Close() - // 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) - for { - nbytes, from, err := t.conn.ReadFromUDP(buf) - ingressTrafficMeter.Mark(int64(nbytes)) - if netutil.IsTemporaryError(err) { - // Ignore temporary read errors. - log.Debug(fmt.Sprintf("Temporary read error: %v", err)) - continue - } else if err != nil { - // Shut down the loop for permament errors. - log.Debug(fmt.Sprintf("Read error: %v", err)) - return - } - t.handlePacket(from, buf[:nbytes]) - } -} - -func (t *udp) handlePacket(from *net.UDPAddr, buf []byte) error { - pkt := ingressPacket{remoteAddr: from} - if err := decodePacket(buf, &pkt); err != nil { - log.Debug(fmt.Sprintf("Bad packet from %v: %v", from, err)) - //fmt.Println("bad packet", err) - return err - } - t.net.reqReadPacket(pkt) - return nil -} - -func decodePacket(buffer []byte, pkt *ingressPacket) error { - if len(buffer) < headSize+1 { - return errPacketTooSmall - } - buf := make([]byte, len(buffer)) - copy(buf, buffer) - prefix, sig, sigdata := buf[:versionPrefixSize], buf[versionPrefixSize:headSize], buf[headSize:] - if !bytes.Equal(prefix, versionPrefix) { - return errBadPrefix - } - fromID, err := recoverNodeID(crypto.Keccak256(buf[headSize:]), sig) - if err != nil { - return err - } - pkt.rawData = buf - pkt.hash = crypto.Keccak256(buf[versionPrefixSize:]) - pkt.remoteID = fromID - switch pkt.ev = nodeEvent(sigdata[0]); pkt.ev { - case pingPacket: - pkt.data = new(ping) - case pongPacket: - pkt.data = new(pong) - case findnodePacket: - pkt.data = new(findnode) - case neighborsPacket: - pkt.data = new(neighbors) - case findnodeHashPacket: - pkt.data = new(findnodeHash) - case topicRegisterPacket: - pkt.data = new(topicRegister) - case topicQueryPacket: - pkt.data = new(topicQuery) - case topicNodesPacket: - pkt.data = new(topicNodes) - default: - return fmt.Errorf("unknown packet type: %d", sigdata[0]) - } - s := rlp.NewStream(bytes.NewReader(sigdata[1:]), 0) - err = s.Decode(pkt.data) - return err -} diff --git a/p2p/discv5/udp_test.go b/p2p/discv5/udp_test.go deleted file mode 100644 index 139e20bc..00000000 --- a/p2p/discv5/udp_test.go +++ /dev/null @@ -1,450 +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 discv5 - -import ( - "encoding/hex" - "errors" - "io" - "net" - "reflect" - "sync" - "testing" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/davecgh/go-spew/spew" -) - -func init() { - spew.Config.DisableMethods = true -} - -// shared test variables -var ( - testLocal = rpcEndpoint{IP: net.ParseIP("3.3.3.3").To4(), UDP: 5, TCP: 6} -) - -// type udpTest struct { -// t *testing.T -// pipe *dgramPipe -// table *Table -// udp *udp -// sent [][]byte -// localkey, remotekey *ecdsa.PrivateKey -// remoteaddr *net.UDPAddr -// } -// -// func newUDPTest(t *testing.T) *udpTest { -// test := &udpTest{ -// t: t, -// pipe: newpipe(), -// localkey: newkey(), -// remotekey: newkey(), -// remoteaddr: &net.UDPAddr{IP: net.IP{1, 2, 3, 4}, Port: 30303}, -// } -// test.table, test.udp, _ = newUDP(test.localkey, test.pipe, nil, "") -// return test -// } -// -// // handles a packet as if it had been sent to the transport. -// func (test *udpTest) packetIn(wantError error, ptype byte, data packet) error { -// enc, err := encodePacket(test.remotekey, ptype, data) -// if err != nil { -// return test.errorf("packet (%d) encode error: %v", ptype, err) -// } -// test.sent = append(test.sent, enc) -// if err = test.udp.handlePacket(test.remoteaddr, enc); err != wantError { -// return test.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{}) error { -// dgram := test.pipe.waitPacketOut() -// p, _, _, err := decodePacket(dgram) -// if err != nil { -// return test.errorf("sent packet decode error: %v", err) -// } -// fn := reflect.ValueOf(validate) -// exptype := fn.Type().In(0) -// if reflect.TypeOf(p) != exptype { -// return test.errorf("sent packet type mismatch, got: %v, want: %v", reflect.TypeOf(p), exptype) -// } -// fn.Call([]reflect.Value{reflect.ValueOf(p)}) -// return 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 -// } -// err := fmt.Errorf(format, args...) -// fmt.Printf("\t%s:%d: %v\n", file, line, err) -// test.t.Fail() -// return err -// } -// -// func TestUDP_packetErrors(t *testing.T) { -// test := newUDPTest(t) -// defer test.table.Close() -// -// test.packetIn(errExpired, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: Version}) -// test.packetIn(errUnsolicitedReply, pongPacket, &pong{ReplyTok: []byte{}, Expiration: futureExp}) -// test.packetIn(errUnknownNode, findnodePacket, &findnode{Expiration: futureExp}) -// test.packetIn(errUnsolicitedReply, neighborsPacket, &neighbors{Expiration: futureExp}) -// } -// -// func TestUDP_findnode(t *testing.T) { -// test := newUDPTest(t) -// defer test.table.Close() -// -// // put a few nodes into the table. their exact -// // distribution shouldn't matter much, although we need to -// // take care not to overflow any bucket. -// targetHash := crypto.Keccak256Hash(testTarget[:]) -// nodes := &nodesByDistance{target: targetHash} -// for i := 0; i < bucketSize; i++ { -// nodes.push(nodeAtDistance(test.table.self.sha, i+2), bucketSize) -// } -// test.table.stuff(nodes.entries) -// -// // ensure there's a bond with the test node, -// // findnode won't be accepted otherwise. -// test.table.db.updateNode(NewNode( -// PubkeyID(&test.remotekey.PublicKey), -// test.remoteaddr.IP, -// uint16(test.remoteaddr.Port), -// 99, -// )) -// // check that closest neighbors are returned. -// test.packetIn(nil, findnodePacket, &findnode{Target: testTarget, Expiration: futureExp}) -// expected := test.table.closest(targetHash, bucketSize) -// -// waitNeighbors := func(want []*Node) { -// test.waitPacketOut(func(p *neighbors) { -// if len(p.Nodes) != len(want) { -// t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize) -// } -// for i := range p.Nodes { -// if p.Nodes[i].ID != want[i].ID { -// t.Errorf("result mismatch at %d:\n got: %v\n want: %v", i, p.Nodes[i], expected.entries[i]) -// } -// } -// }) -// } -// waitNeighbors(expected.entries[:maxNeighbors]) -// waitNeighbors(expected.entries[maxNeighbors:]) -// } -// -// func TestUDP_findnodeMultiReply(t *testing.T) { -// test := newUDPTest(t) -// defer test.table.Close() -// -// // queue a pending findnode request -// resultc, errc := make(chan []*Node), make(chan error) -// go func() { -// rid := PubkeyID(&test.remotekey.PublicKey) -// ns, err := test.udp.findnode(rid, test.remoteaddr, testTarget) -// if err != nil && len(ns) == 0 { -// errc <- err -// } else { -// resultc <- ns -// } -// }() -// -// // wait for the findnode to be sent. -// // after it is sent, the transport is waiting for a reply -// test.waitPacketOut(func(p *findnode) { -// if p.Target != testTarget { -// t.Errorf("wrong target: got %v, want %v", p.Target, testTarget) -// } -// }) -// -// // send the reply as two packets. -// list := []*Node{ -// MustParseNode("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:30303?discport=30304"), -// MustParseNode("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:30303"), -// MustParseNode("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17"), -// MustParseNode("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:]}) -// -// // check that the sent neighbors are all returned by findnode -// select { -// case result := <-resultc: -// if !reflect.DeepEqual(result, list) { -// t.Errorf("neighbors mismatch:\n got: %v\n want: %v", result, list) -// } -// case err := <-errc: -// t.Errorf("findnode error: %v", err) -// case <-time.After(5 * time.Second): -// t.Error("findnode did not return within 5 seconds") -// } -// } -// -// func TestUDP_successfulPing(t *testing.T) { -// test := newUDPTest(t) -// added := make(chan *Node, 1) -// test.table.nodeAddedHook = func(n *Node) { added <- n } -// defer test.table.Close() -// -// // The remote side sends a ping packet to initiate the exchange. -// go test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: Version, Expiration: futureExp}) -// -// // the ping is replied to. -// test.waitPacketOut(func(p *pong) { -// pinghash := test.sent[0][:macSize] -// if !bytes.Equal(p.ReplyTok, pinghash) { -// t.Errorf("got pong.ReplyTok %x, want %x", p.ReplyTok, pinghash) -// } -// wantTo := rpcEndpoint{ -// // The mirrored UDP address is the UDP packet sender -// IP: test.remoteaddr.IP, UDP: uint16(test.remoteaddr.Port), -// // The mirrored TCP port is the one from the ping packet -// TCP: testRemote.TCP, -// } -// if !reflect.DeepEqual(p.To, wantTo) { -// t.Errorf("got pong.To %v, want %v", p.To, wantTo) -// } -// }) -// -// // remote is unknown, the table pings back. -// test.waitPacketOut(func(p *ping) error { -// if !reflect.DeepEqual(p.From, test.udp.ourEndpoint) { -// t.Errorf("got ping.From %v, want %v", p.From, test.udp.ourEndpoint) -// } -// wantTo := rpcEndpoint{ -// // The mirrored UDP address is the UDP packet sender. -// IP: test.remoteaddr.IP, UDP: uint16(test.remoteaddr.Port), -// TCP: 0, -// } -// if !reflect.DeepEqual(p.To, wantTo) { -// t.Errorf("got ping.To %v, want %v", p.To, wantTo) -// } -// return nil -// }) -// test.packetIn(nil, pongPacket, &pong{Expiration: futureExp}) -// -// // the node should be added to the table shortly after getting the -// // pong packet. -// select { -// case n := <-added: -// rid := PubkeyID(&test.remotekey.PublicKey) -// if n.ID != rid { -// t.Errorf("node has wrong ID: got %v, want %v", n.ID, rid) -// } -// if !bytes.Equal(n.IP, 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 { -// t.Errorf("node has wrong UDP port: got %v, want: %v", n.UDP, test.remoteaddr.Port) -// } -// if n.TCP != testRemote.TCP { -// t.Errorf("node has wrong TCP port: got %v, want: %v", n.TCP, testRemote.TCP) -// } -// case <-time.After(2 * time.Second): -// t.Errorf("node was not added within 2 seconds") -// } -// } - -var testPackets = []struct { - input string - wantPacket interface{} -}{ - { - input: "71dbda3a79554728d4f94411e42ee1f8b0d561c10e1e5f5893367948c6a7d70bb87b235fa28a77070271b6c164a2dce8c7e13a5739b53b5e96f2e5acb0e458a02902f5965d55ecbeb2ebb6cabb8b2b232896a36b737666c55265ad0a68412f250001ea04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a355", - wantPacket: &ping{ - Version: 4, - From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, - To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, - Expiration: 1136239445, - Rest: []rlp.RawValue{}, - }, - }, - { - input: "e9614ccfd9fc3e74360018522d30e1419a143407ffcce748de3e22116b7e8dc92ff74788c0b6663aaa3d67d641936511c8f8d6ad8698b820a7cf9e1be7155e9a241f556658c55428ec0563514365799a4be2be5a685a80971ddcfa80cb422cdd0101ec04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a3550102", - wantPacket: &ping{ - Version: 4, - From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, - To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x01}, {0x02}}, - }, - }, - { - input: "577be4349c4dd26768081f58de4c6f375a7a22f3f7adda654d1428637412c3d7fe917cadc56d4e5e7ffae1dbe3efffb9849feb71b262de37977e7c7a44e677295680e9e38ab26bee2fcbae207fba3ff3d74069a50b902a82c9903ed37cc993c50001f83e82022bd79020010db83c4d001500000000abcdef12820cfa8215a8d79020010db885a308d313198a2e037073488208ae82823a8443b9a355c5010203040531b9019afde696e582a78fa8d95ea13ce3297d4afb8ba6433e4154caa5ac6431af1b80ba76023fa4090c408f6b4bc3701562c031041d4702971d102c9ab7fa5eed4cd6bab8f7af956f7d565ee1917084a95398b6a21eac920fe3dd1345ec0a7ef39367ee69ddf092cbfe5b93e5e568ebc491983c09c76d922dc3", - wantPacket: &ping{ - 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}, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0xC5, 0x01, 0x02, 0x03, 0x04, 0x05}}, - }, - }, - { - input: "09b2428d83348d27cdf7064ad9024f526cebc19e4958f0fdad87c15eb598dd61d08423e0bf66b2069869e1724125f820d851c136684082774f870e614d95a2855d000f05d1648b2d5945470bc187c2d2216fbe870f43ed0909009882e176a46b0102f846d79020010db885a308d313198a2e037073488208ae82823aa0fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c9548443b9a355c6010203c2040506a0c969a58f6f9095004c0177a6b47f451530cab38966a25cca5cb58f055542124e", - wantPacket: &pong{ - To: rpcEndpoint{net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), 2222, 33338}, - ReplyTok: common.Hex2Bytes("fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c954"), - Expiration: 1136239445, - Rest: []rlp.RawValue{{0xC6, 0x01, 0x02, 0x03, 0xC2, 0x04, 0x05}, {0x06}}, - }, - }, - { - input: "c7c44041b9f7c7e41934417ebac9a8e1a4c6298f74553f2fcfdcae6ed6fe53163eb3d2b52e39fe91831b8a927bf4fc222c3902202027e5e9eb812195f95d20061ef5cd31d502e47ecb61183f74a504fe04c51e73df81f25c4d506b26db4517490103f84eb840ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f8443b9a35582999983999999280dc62cc8255c73471e0a61da0c89acdc0e035e260add7fc0c04ad9ebf3919644c91cb247affc82b69bd2ca235c71eab8e49737c937a2c396", - wantPacket: &findnode{ - Target: MustHexID("ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f"), - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x82, 0x99, 0x99}, {0x83, 0x99, 0x99, 0x99}}, - }, - }, - { - input: "c679fc8fe0b8b12f06577f2e802d34f6fa257e6137a995f6f4cbfc9ee50ed3710faf6e66f932c4c8d81d64343f429651328758b47d3dbc02c4042f0fff6946a50f4a49037a72bb550f3a7872363a83e1b9ee6469856c24eb4ef80b7535bcf99c0004f9015bf90150f84d846321163782115c82115db8403155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32f84984010203040101b840312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069dbf8599020010db83c4d001500000000abcdef12820d05820d05b84038643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aacf8599020010db885a308d313198a2e037073488203e78203e8b8408dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df738443b9a355010203b525a138aa34383fec3d2719a0", - wantPacket: &neighbors{ - Nodes: []rpcNode{ - { - ID: MustHexID("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), - IP: net.ParseIP("99.33.22.55").To4(), - UDP: 4444, - TCP: 4445, - }, - { - ID: MustHexID("312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069db"), - IP: net.ParseIP("1.2.3.4").To4(), - UDP: 1, - TCP: 1, - }, - { - ID: MustHexID("38643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aac"), - IP: net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), - UDP: 3333, - TCP: 3333, - }, - { - ID: MustHexID("8dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df73"), - IP: net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), - UDP: 999, - TCP: 1000, - }, - }, - Expiration: 1136239445, - Rest: []rlp.RawValue{{0x01}, {0x02}, {0x03}}, - }, - }, -} - -func TestForwardCompatibility(t *testing.T) { - t.Skip("skipped while working on discovery v5") - - testkey, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - wantNodeID := PubkeyID(&testkey.PublicKey) - - for _, test := range testPackets { - input, err := hex.DecodeString(test.input) - if err != nil { - t.Fatalf("invalid hex: %s", test.input) - } - var pkt ingressPacket - if err := decodePacket(input, &pkt); err != nil { - t.Errorf("did not accept packet %s\n%v", test.input, err) - continue - } - if !reflect.DeepEqual(pkt.data, test.wantPacket) { - t.Errorf("got %s\nwant %s", spew.Sdump(pkt.data), spew.Sdump(test.wantPacket)) - } - if pkt.remoteID != wantNodeID { - t.Errorf("got id %v\nwant id %v", pkt.remoteID, wantNodeID) - } - } -} - -// dgramPipe is a fake UDP socket. It queues all sent datagrams. -type dgramPipe struct { - mu *sync.Mutex - cond *sync.Cond - closing chan struct{} - closed bool - queue [][]byte -} - -func newpipe() *dgramPipe { - mu := new(sync.Mutex) - return &dgramPipe{ - closing: make(chan struct{}), - cond: &sync.Cond{L: mu}, - mu: mu, - } -} - -// WriteToUDP queues a datagram. -func (c *dgramPipe) WriteToUDP(b []byte, to *net.UDPAddr) (n int, err error) { - msg := make([]byte, len(b)) - copy(msg, b) - c.mu.Lock() - defer c.mu.Unlock() - if c.closed { - return 0, errors.New("closed") - } - c.queue = append(c.queue, msg) - c.cond.Signal() - return len(b), nil -} - -// ReadFromUDP just hangs until the pipe is closed. -func (c *dgramPipe) ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) { - <-c.closing - return 0, nil, io.EOF -} - -func (c *dgramPipe) Close() error { - c.mu.Lock() - defer c.mu.Unlock() - if !c.closed { - close(c.closing) - c.closed = true - } - return nil -} - -func (c *dgramPipe) LocalAddr() net.Addr { - return &net.UDPAddr{IP: testLocal.IP, Port: int(testLocal.UDP)} -} - -func (c *dgramPipe) waitPacketOut() []byte { - c.mu.Lock() - defer c.mu.Unlock() - for len(c.queue) == 0 { - c.cond.Wait() - } - p := c.queue[0] - copy(c.queue, c.queue[1:]) - c.queue = c.queue[:len(c.queue)-1] - return p -} diff --git a/p2p/dnsdisc/client.go b/p2p/dnsdisc/client.go new file mode 100644 index 00000000..3f914d6e --- /dev/null +++ b/p2p/dnsdisc/client.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 dnsdisc + +import ( + "bytes" + "context" + "errors" + "fmt" + "math/rand" + "net" + "strings" + "sync" + "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" + "golang.org/x/sync/singleflight" + "golang.org/x/time/rate" +) + +// Client discovers nodes by querying DNS servers. +type Client struct { + cfg Config + clock mclock.Clock + entries *lru.Cache + ratelimit *rate.Limiter + singleflight singleflight.Group +} + +// 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) + RateLimit float64 // maximum DNS requests / second (default 3) + 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 + defaultRateLimit = 3 + 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.RateLimit == 0 { + cfg.RateLimit = defaultRateLimit + } + 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) *Client { + cfg = cfg.withDefaults() + cache, err := lru.New(cfg.CacheLimit) + if err != nil { + panic(err) + } + rlimit := rate.NewLimiter(rate.Limit(cfg.RateLimit), 10) + return &Client{ + cfg: cfg, + entries: cache, + clock: mclock.System{}, + ratelimit: rlimit, + } +} + +// SyncTree downloads the entire node tree at the given URL. +func (c *Client) SyncTree(url string) (*Tree, error) { + le, err := parseLink(url) + if err != nil { + return nil, fmt.Errorf("invalid enrtree URL: %v", err) + } + ct := newClientTree(c, new(linkCache), 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 +} + +// NewIterator creates an iterator that visits all nodes at the +// given tree URLs. +func (c *Client) NewIterator(urls ...string) (enode.Iterator, error) { + it := c.newRandomIterator() + for _, url := range urls { + if err := it.addTree(url); err != nil { + return nil, err + } + } + return it, nil +} + +// resolveRoot retrieves a root entry via DNS. +func (c *Client) resolveRoot(ctx context.Context, loc *linkEntry) (rootEntry, error) { + e, err, _ := c.singleflight.Do(loc.str, func() (interface{}, 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} + }) + return e.(rootEntry), err +} + +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) { + // The rate limit always applies, even when the result might be cached. This is + // important because it avoids hot-spinning in consumers of node iterators created on + // this client. + if err := c.ratelimit.Wait(ctx); err != nil { + return nil, err + } + cacheKey := truncateHash(hash) + if e, ok := c.entries.Get(cacheKey); ok { + return e.(entry), nil + } + + ei, err, _ := c.singleflight.Do(cacheKey, func() (interface{}, error) { + e, err := c.doResolveEntry(ctx, domain, hash) + if err != nil { + return nil, err + } + c.entries.Add(cacheKey, e) + return e, nil + }) + e, _ := ei.(entry) + return e, err +} + +// 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 errors.Is(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} +} + +// randomIterator traverses a set of trees and returns nodes found in them. +type randomIterator struct { + cur *enode.Node + ctx context.Context + cancelFn context.CancelFunc + c *Client + + mu sync.Mutex + lc linkCache // tracks tree dependencies + trees map[string]*clientTree // all trees + // buffers for syncableTrees + syncableList []*clientTree + disabledList []*clientTree +} + +func (c *Client) newRandomIterator() *randomIterator { + ctx, cancel := context.WithCancel(context.Background()) + return &randomIterator{ + c: c, + ctx: ctx, + cancelFn: cancel, + trees: make(map[string]*clientTree), + } +} + +// Node returns the current node. +func (it *randomIterator) Node() *enode.Node { + return it.cur +} + +// Close closes the iterator. +func (it *randomIterator) Close() { + it.cancelFn() + + it.mu.Lock() + defer it.mu.Unlock() + it.trees = nil +} + +// Next moves the iterator to the next node. +func (it *randomIterator) Next() bool { + it.cur = it.nextNode() + return it.cur != nil +} + +// addTree adds an enrtree:// URL to the iterator. +func (it *randomIterator) addTree(url string) error { + le, err := parseLink(url) + if err != nil { + return fmt.Errorf("invalid enrtree URL: %v", err) + } + it.lc.addLink("", le.str) + return nil +} + +// nextNode syncs random tree entries until it finds a node. +func (it *randomIterator) nextNode() *enode.Node { + for { + ct := it.pickTree() + if ct == nil { + return nil + } + n, err := ct.syncRandom(it.ctx) + if err != nil { + if errors.Is(err, it.ctx.Err()) { + return nil // context canceled. + } + it.c.cfg.Logger.Debug("Error in DNS random node sync", "tree", ct.loc.domain, "err", err) + continue + } + if n != nil { + return n + } + } +} + +// pickTree returns a random tree to sync from. +func (it *randomIterator) pickTree() *clientTree { + it.mu.Lock() + defer it.mu.Unlock() + + // First check if iterator was closed. + // Need to do this here to avoid nil map access in rebuildTrees. + if it.trees == nil { + return nil + } + + // Rebuild the trees map if any links have changed. + if it.lc.changed { + it.rebuildTrees() + it.lc.changed = false + } + + for { + canSync, trees := it.syncableTrees() + switch { + case canSync: + // Pick a random tree. + return trees[rand.Intn(len(trees))] + case len(trees) > 0: + // No sync action can be performed on any tree right now. The only meaningful + // thing to do is waiting for any root record to get updated. + if !it.waitForRootUpdates(trees) { + // Iterator was closed while waiting. + return nil + } + default: + // There are no trees left, the iterator was closed. + return nil + } + } +} + +// syncableTrees finds trees on which any meaningful sync action can be performed. +func (it *randomIterator) syncableTrees() (canSync bool, trees []*clientTree) { + // Resize tree lists. + it.syncableList = it.syncableList[:0] + it.disabledList = it.disabledList[:0] + + // Partition them into the two lists. + for _, ct := range it.trees { + if ct.canSyncRandom() { + it.syncableList = append(it.syncableList, ct) + } else { + it.disabledList = append(it.disabledList, ct) + } + } + if len(it.syncableList) > 0 { + return true, it.syncableList + } + return false, it.disabledList +} + +// waitForRootUpdates waits for the closest scheduled root check time on the given trees. +func (it *randomIterator) waitForRootUpdates(trees []*clientTree) bool { + var minTree *clientTree + var nextCheck mclock.AbsTime + for _, ct := range trees { + check := ct.nextScheduledRootCheck() + if minTree == nil || check < nextCheck { + minTree = ct + nextCheck = check + } + } + + sleep := nextCheck.Sub(it.c.clock.Now()) + it.c.cfg.Logger.Debug("DNS iterator waiting for root updates", "sleep", sleep, "tree", minTree.loc.domain) + timeout := it.c.clock.NewTimer(sleep) + defer timeout.Stop() + select { + case <-timeout.C(): + return true + case <-it.ctx.Done(): + return false // Iterator was closed. + } +} + +// rebuildTrees rebuilds the 'trees' map. +func (it *randomIterator) rebuildTrees() { + // Delete removed trees. + for loc := range it.trees { + if !it.lc.isReferenced(loc) { + delete(it.trees, loc) + } + } + // Add new trees. + for loc := range it.lc.backrefs { + if it.trees[loc] == nil { + link, _ := parseLink(linkPrefix + loc) + it.trees[loc] = newClientTree(it.c, &it.lc, link) + } + } +} diff --git a/p2p/dnsdisc/client_test.go b/p2p/dnsdisc/client_test.go new file mode 100644 index 00000000..0a9a96e6 --- /dev/null +++ b/p2p/dnsdisc/client_test.go @@ -0,0 +1,459 @@ +// 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" + "errors" + "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{ + "n": "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA", + "C7HRFPF3BLGF3YR4DY5KX3SMBE.n": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", + "JWXYDBPXYWG6FX3GMDIBFA6CJ4.n": "enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24", + "2XS2367YHAXJFGLZHVAWLQD4ZY.n": "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA", + "H4FHT4B454P6UXFD7JCYQ5PWDY.n": "enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI", + "MHTDO6TMUBRIA2XWG5LUDACK24.n": "enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o", + } + 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()) + } +} + +// In this test, syncing the tree fails because it contains an invalid ENR entry. +func TestClientSyncTreeBadNode(t *testing.T) { + // var b strings.Builder + // b.WriteString(enrPrefix) + // b.WriteString("-----") + // badHash := subdomain(&b) + // tree, _ := MakeTree(3, nil, []string{"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org"}) + // tree.entries[badHash] = &b + // tree.root.eroot = badHash + // url, _ := tree.Sign(testKey(signingKeySeed), "n") + // fmt.Println(url) + // fmt.Printf("%#v\n", tree.ToTXT("n")) + + r := mapResolver{ + "n": "enrtree-root:v1 e=INDMVBZEEQ4ESVYAKGIYU74EAA l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=3 sig=Vl3AmunLur0JZ3sIyJPSH6A3Vvdp4F40jWQeCmkIhmcgwE4VC5U9wpK8C_uL_CMY29fd6FAhspRvq2z_VysTLAA", + "C7HRFPF3BLGF3YR4DY5KX3SMBE.n": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", + "INDMVBZEEQ4ESVYAKGIYU74EAA.n": "enr:-----", + } + c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) + _, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n") + wantErr := nameError{name: "INDMVBZEEQ4ESVYAKGIYU74EAA.n", err: entryError{typ: "enr", err: errInvalidENR}} + if err != wantErr { + t.Fatalf("expected sync error %q, got %q", wantErr, err) + } +} + +// This test checks that randomIterator finds all entries. +func TestIterator(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), + RateLimit: 500, + }) + it, err := c.NewIterator(url) + if err != nil { + t.Fatal(err) + } + + checkIterator(t, it, nodes) +} + +func TestIteratorCloseWithoutNext(t *testing.T) { + tree1, url1 := makeTestTree("t1", nil, nil) + c := NewClient(Config{Resolver: newMapResolver(tree1.ToTXT("t1"))}) + it, err := c.NewIterator(url1) + if err != nil { + t.Fatal(err) + } + + it.Close() + ok := it.Next() + if ok { + t.Fatal("Next returned true after Close") + } +} + +// This test checks if closing randomIterator races. +func TestIteratorClose(t *testing.T) { + nodes := testNodes(nodesSeed1, 500) + tree1, url1 := makeTestTree("t1", nodes, nil) + c := NewClient(Config{Resolver: newMapResolver(tree1.ToTXT("t1"))}) + it, err := c.NewIterator(url1) + if err != nil { + t.Fatal(err) + } + + done := make(chan struct{}) + go func() { + for it.Next() { + _ = it.Node() + } + close(done) + }() + + time.Sleep(50 * time.Millisecond) + it.Close() + <-done +} + +// This test checks that randomIterator traverses linked trees as well as explicitly added trees. +func TestIteratorLinks(t *testing.T) { + nodes := testNodes(nodesSeed1, 40) + tree1, url1 := makeTestTree("t1", nodes[:10], nil) + tree2, url2 := makeTestTree("t2", nodes[10:], []string{url1}) + c := NewClient(Config{ + Resolver: newMapResolver(tree1.ToTXT("t1"), tree2.ToTXT("t2")), + Logger: testlog.Logger(t, log.LvlTrace), + RateLimit: 500, + }) + it, err := c.NewIterator(url2) + if err != nil { + t.Fatal(err) + } + + checkIterator(t, it, nodes) +} + +// This test verifies that randomIterator re-checks the root of the tree to catch +// updates to nodes. +func TestIteratorNodeUpdates(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 30) + resolver = newMapResolver() + c = NewClient(Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + RateLimit: 500, + }) + ) + c.clock = clock + tree1, url := makeTestTree("n", nodes[:25], nil) + it, err := c.NewIterator(url) + if err != nil { + t.Fatal(err) + } + + // Sync the original tree. + resolver.add(tree1.ToTXT("n")) + checkIterator(t, it, nodes[:25]) + + // Ensure RandomNode returns the new nodes after the tree is updated. + updateSomeNodes(nodesSeed1, nodes) + tree2, _ := makeTestTree("n", nodes, nil) + resolver.clear() + resolver.add(tree2.ToTXT("n")) + t.Log("tree updated") + + clock.Run(c.cfg.RecheckInterval + 1*time.Second) + checkIterator(t, it, nodes) +} + +// This test checks that the tree root is rechecked when a couple of leaf +// requests have failed. The test is just like TestIteratorNodeUpdates, but +// without advancing the clock by recheckInterval after the tree update. +func TestIteratorRootRecheckOnFail(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 30) + resolver = newMapResolver() + c = NewClient(Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + RateLimit: 500, + // Disabling the cache is required for this test because the client doesn't + // notice leaf failures if all records are cached. + CacheLimit: 1, + }) + ) + c.clock = clock + tree1, url := makeTestTree("n", nodes[:25], nil) + it, err := c.NewIterator(url) + if err != nil { + t.Fatal(err) + } + + // Sync the original tree. + resolver.add(tree1.ToTXT("n")) + checkIterator(t, it, nodes[:25]) + + // Ensure RandomNode returns the new nodes after the tree is updated. + updateSomeNodes(nodesSeed1, nodes) + tree2, _ := makeTestTree("n", nodes, nil) + resolver.clear() + resolver.add(tree2.ToTXT("n")) + t.Log("tree updated") + + checkIterator(t, it, nodes) +} + +// This test checks that the iterator works correctly when the tree is initially empty. +func TestIteratorEmptyTree(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 1) + resolver = newMapResolver() + c = NewClient(Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + RateLimit: 500, + }) + ) + c.clock = clock + tree1, url := makeTestTree("n", nil, nil) + tree2, _ := makeTestTree("n", nodes, nil) + resolver.add(tree1.ToTXT("n")) + + // Start the iterator. + node := make(chan *enode.Node) + it, err := c.NewIterator(url) + if err != nil { + t.Fatal(err) + } + go func() { + it.Next() + node <- it.Node() + }() + + // Wait for the client to get stuck in waitForRootUpdates. + clock.WaitForTimers(1) + + // Now update the root. + resolver.add(tree2.ToTXT("n")) + + // Wait for it to pick up the root change. + clock.Run(c.cfg.RecheckInterval) + select { + case n := <-node: + if n.ID() != nodes[0].ID() { + t.Fatalf("wrong node returned") + } + case <-time.After(5 * time.Second): + t.Fatal("it.Next() did not unblock within 5s of real time") + } +} + +// updateSomeNodes applies ENR updates to some of the given nodes. +func updateSomeNodes(keySeed int64, nodes []*enode.Node) { + 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 + } +} + +// This test verifies that randomIterator re-checks the root of the tree to catch +// updates to links. +func TestIteratorLinkUpdates(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 30) + resolver = newMapResolver() + c = NewClient(Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + RateLimit: 500, + }) + ) + 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")) + + it, err := c.NewIterator(url1) + if err != nil { + t.Fatal(err) + } + + // Sync tree1 using RandomNode. + checkIterator(t, it, nodes[:20]) + + // Add link to tree3, remove link to tree2. + tree1, _ = makeTestTree("t1", nodes[:10], []string{url3}) + resolver.add(tree1.ToTXT("t1")) + t.Log("tree1 updated") + + clock.Run(c.cfg.RecheckInterval + 1*time.Second) + + var wantNodes []*enode.Node + wantNodes = append(wantNodes, tree1.Nodes()...) + wantNodes = append(wantNodes, tree3.Nodes()...) + checkIterator(t, it, wantNodes) + + // Check that linked trees are GCed when they're no longer referenced. + knownTrees := it.(*randomIterator).trees + if len(knownTrees) != 2 { + t.Errorf("client knows %d trees, want 2", len(knownTrees)) + } +} + +func checkIterator(t *testing.T, it enode.Iterator, wantNodes []*enode.Node) { + t.Helper() + + var ( + want = make(map[enode.ID]*enode.Node) + maxCalls = len(wantNodes) * 3 + calls = 0 + ) + for _, n := range wantNodes { + want[n.ID()] = n + } + for ; len(want) > 0 && calls < maxCalls; calls++ { + if !it.Next() { + t.Fatalf("Next returned false (call %d)", calls) + } + n := it.Node() + delete(want, n.ID()) + } + t.Logf("checkIterator called Next %d times to find %d nodes", calls, len(wantNodes)) + for _, n := range want { + t.Errorf("iterator 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, errors.New("not found") +} diff --git a/core/vm/int_pool_verifier_empty.go b/p2p/dnsdisc/doc.go similarity index 87% rename from core/vm/int_pool_verifier_empty.go rename to p2p/dnsdisc/doc.go index a5f1dc02..cfd81cc1 100644 --- a/core/vm/int_pool_verifier_empty.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 !VERIFY_EVM_INTEGER_POOL - -package vm - -const verifyPool = false - -func verifyIntegerPool(ip *intPool) {} +// 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 00000000..39955cab --- /dev/null +++ b/p2p/dnsdisc/error.go @@ -0,0 +1,63 @@ +// 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 ( + "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 00000000..073547c9 --- /dev/null +++ b/p2p/dnsdisc/sync.go @@ -0,0 +1,329 @@ +// 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" + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// This is the number of consecutive leaf requests that may fail before +// we consider re-resolving the tree root. +const rootRecheckFailCount = 5 + +// clientTree is a full tree being synced. +type clientTree struct { + c *Client + loc *linkEntry // link to this tree + + lastRootCheck mclock.AbsTime // last revalidation of root + leafFailCount int + rootFailCount int + + root *rootEntry + enrs *subtreeSync + links *subtreeSync + + lc *linkCache // tracks all links between all trees + curLinks map[string]struct{} // links contained in this tree + linkGCRoot string // root on which last link GC has run +} + +func newClientTree(c *Client, lc *linkCache, loc *linkEntry) *clientTree { + return &clientTree{c: c, lc: lc, loc: loc} +} + +// syncAll retrieves all entries of the tree. +func (ct *clientTree) syncAll(dest map[string]entry) error { + if err := ct.updateRoot(context.Background()); 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) (n *enode.Node, err error) { + if ct.rootUpdateDue() { + if err := ct.updateRoot(ctx); err != nil { + return nil, err + } + } + + // Update fail counter for leaf request errors. + defer func() { + if err != nil { + ct.leafFailCount++ + } + }() + + // Link tree sync has priority, run it to completion before syncing ENRs. + if !ct.links.done() { + err := ct.syncNextLink(ctx) + return nil, err + } + ct.gcLinks() + + // Sync next random entry in ENR tree. Once every node has been visited, we simply + // start over. This is fine because entries are cached internally by the client LRU + // also by DNS resolvers. + if ct.enrs.done() { + ct.enrs = newSubtreeSync(ct.c, ct.loc, ct.root.eroot, false) + } + return ct.syncNextRandomENR(ctx) +} + +// canSyncRandom checks if any meaningful action can be performed by syncRandom. +func (ct *clientTree) canSyncRandom() bool { + // Note: the check for non-zero leaf count is very important here. + // If we're done syncing all nodes, and no leaves were found, the tree + // is empty and we can't use it for sync. + return ct.rootUpdateDue() || !ct.links.done() || !ct.enrs.done() || ct.enrs.leaves != 0 +} + +// gcLinks removes outdated links from the global link cache. GC runs once +// when the link sync finishes. +func (ct *clientTree) gcLinks() { + if !ct.links.done() || ct.root.lroot == ct.linkGCRoot { + return + } + ct.lc.resetLinks(ct.loc.str, ct.curLinks) + ct.linkGCRoot = ct.root.lroot +} + +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 dest, ok := e.(*linkEntry); ok { + ct.lc.addLink(ct.loc.str, dest.str) + ct.curLinks[dest.str] = struct{}{} + } + 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.String() +} + +// 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(ctx context.Context) error { + if !ct.slowdownRootUpdate(ctx) { + return ctx.Err() + } + + ct.lastRootCheck = ct.c.clock.Now() + ctx, cancel := context.WithTimeout(ctx, ct.c.cfg.Timeout) + defer cancel() + root, err := ct.c.resolveRoot(ctx, ct.loc) + if err != nil { + ct.rootFailCount++ + return err + } + ct.root = &root + ct.rootFailCount = 0 + ct.leafFailCount = 0 + + // Invalidate subtrees if changed. + if ct.links == nil || root.lroot != ct.links.root { + ct.links = newSubtreeSync(ct.c, ct.loc, root.lroot, true) + ct.curLinks = make(map[string]struct{}) + } + 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 { + tooManyFailures := ct.leafFailCount > rootRecheckFailCount + scheduledCheck := ct.c.clock.Now() >= ct.nextScheduledRootCheck() + return ct.root == nil || tooManyFailures || scheduledCheck +} + +func (ct *clientTree) nextScheduledRootCheck() mclock.AbsTime { + return ct.lastRootCheck.Add(ct.c.cfg.RecheckInterval) +} + +// slowdownRootUpdate applies a delay to root resolution if is tried +// too frequently. This avoids busy polling when the client is offline. +// Returns true if the timeout passed, false if sync was canceled. +func (ct *clientTree) slowdownRootUpdate(ctx context.Context) bool { + var delay time.Duration + switch { + case ct.rootFailCount > 20: + delay = 10 * time.Second + case ct.rootFailCount > 5: + delay = 5 * time.Second + default: + return true + } + timeout := ct.c.clock.NewTimer(delay) + defer timeout.Stop() + select { + case <-timeout.C(): + return true + case <-ctx.Done(): + return false + } +} + +// 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 + leaves int // counter of synced leaves +} + +func newSubtreeSync(c *Client, loc *linkEntry, root string, link bool) *subtreeSync { + return &subtreeSync{c, loc, root, []string{root}, link, 0} +} + +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 + } + ts.leaves++ + case *linkEntry: + if !ts.link { + return nil, errLinkInENRTree + } + ts.leaves++ + case *branchEntry: + ts.missing = append(ts.missing, e.children...) + } + return e, nil +} + +// linkCache tracks links between trees. +type linkCache struct { + backrefs map[string]map[string]struct{} + changed bool +} + +func (lc *linkCache) isReferenced(r string) bool { + return len(lc.backrefs[r]) != 0 +} + +func (lc *linkCache) addLink(from, to string) { + if _, ok := lc.backrefs[to][from]; ok { + return + } + + if lc.backrefs == nil { + lc.backrefs = make(map[string]map[string]struct{}) + } + if _, ok := lc.backrefs[to]; !ok { + lc.backrefs[to] = make(map[string]struct{}) + } + lc.backrefs[to][from] = struct{}{} + lc.changed = true +} + +// resetLinks clears all links of the given tree. +func (lc *linkCache) resetLinks(from string, keep map[string]struct{}) { + stk := []string{from} + for len(stk) > 0 { + item := stk[len(stk)-1] + stk = stk[:len(stk)-1] + + for r, refs := range lc.backrefs { + if _, ok := keep[r]; ok { + continue + } + if _, ok := refs[item]; !ok { + continue + } + lc.changed = true + delete(refs, item) + if len(refs) == 0 { + delete(lc.backrefs, r) + stk = append(stk, r) + } + } + } +} diff --git a/p2p/dnsdisc/sync_test.go b/p2p/dnsdisc/sync_test.go new file mode 100644 index 00000000..ce1cb90b --- /dev/null +++ b/p2p/dnsdisc/sync_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 dnsdisc + +import ( + "math/rand" + "strconv" + "testing" +) + +func TestLinkCache(t *testing.T) { + var lc linkCache + + // Check adding links. + lc.addLink("1", "2") + if !lc.changed { + t.Error("changed flag not set") + } + lc.changed = false + lc.addLink("1", "2") + if lc.changed { + t.Error("changed flag set after adding link that's already present") + } + lc.addLink("2", "3") + lc.addLink("3", "1") + lc.addLink("2", "4") + lc.changed = false + + if !lc.isReferenced("3") { + t.Error("3 not referenced") + } + if lc.isReferenced("6") { + t.Error("6 is referenced") + } + + lc.resetLinks("1", nil) + if !lc.changed { + t.Error("changed flag not set") + } + if len(lc.backrefs) != 0 { + t.Logf("%+v", lc) + t.Error("reference maps should be empty") + } +} + +func TestLinkCacheRandom(t *testing.T) { + tags := make([]string, 1000) + for i := range tags { + tags[i] = strconv.Itoa(i) + } + + // Create random links. + var lc linkCache + var remove []string + for i := 0; i < 100; i++ { + a, b := tags[rand.Intn(len(tags))], tags[rand.Intn(len(tags))] + lc.addLink(a, b) + remove = append(remove, a) + } + + // Remove all the links. + for _, s := range remove { + lc.resetLinks(s, nil) + } + if len(lc.backrefs) != 0 { + t.Logf("%+v", lc) + t.Error("reference maps should be empty") + } +} diff --git a/p2p/dnsdisc/tree.go b/p2p/dnsdisc/tree.go new file mode 100644 index 00000000..7d11e07e --- /dev/null +++ b/p2p/dnsdisc/tree.go @@ -0,0 +1,423 @@ +// 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 ( + "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 := newLinkEntry(domain, &key.PublicKey) + return link.String(), 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.String()) + } + } + 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 +} + +/* +We want to keep the UDP size below 512 bytes. The UDP size is roughly: +UDP length = 8 + UDP payload length ( 229 ) +UPD Payload length: + - dns.id 2 + - dns.flags 2 + - dns.count.queries 2 + - dns.count.answers 2 + - dns.count.auth_rr 2 + - dns.count.add_rr 2 + - queries (query-size + 6) + - answers : + - dns.resp.name 2 + - dns.resp.type 2 + - dns.resp.class 2 + - dns.resp.ttl 4 + - dns.resp.len 2 + - dns.txt.length 1 + - dns.txt resp_data_size + +So the total size is roughly a fixed overhead of `39`, and the size of the +query (domain name) and response. +The query size is, for example, FVY6INQ6LZ33WLCHO3BPR3FH6Y.snap.mainnet.ethdisco.net (52) + +We also have some static data in the response, such as `enrtree-branch:`, and potentially +splitting the response up with `" "`, leaving us with a size of roughly `400` that we need +to stay below. + +The number `370` is used to have some margin for extra overhead (for example, the dns query +may be larger - more subdomains). +*/ +const ( + hashAbbrevSize = 1 + 16*13/8 // Size of an encoded hash (plus comma) + maxChildren = 370 / hashAbbrevSize // 13 children + minHashLength = 12 +) + +// 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 := parseLink(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 &branchEntry{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 + } + branchEntry struct { + children []string + } + enrEntry struct { + node *enode.Node + } + linkEntry struct { + str string + domain string + pubkey *ecdsa.PublicKey + } +) + +// Entry Encoding + +var ( + b32format = base32.StdEncoding.WithPadding(base32.NoPadding) + b64format = base64.RawURLEncoding +) + +const ( + rootPrefix = "enrtree-root:v1" + linkPrefix = "enrtree://" + branchPrefix = "enrtree-branch:" + enrPrefix = "enr:" +) + +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 + enckey := crypto.FromECDSAPub(pubkey) + return crypto.VerifySignature(enckey, e.sigHash(), sig) +} + +func (e *branchEntry) String() string { + return branchPrefix + strings.Join(e.children, ",") +} + +func (e *enrEntry) String() string { + return e.node.String() +} + +func (e *linkEntry) String() string { + return linkPrefix + e.str +} + +func newLinkEntry(domain string, pubkey *ecdsa.PublicKey) *linkEntry { + key := b32format.EncodeToString(crypto.CompressPubkey(pubkey)) + str := key + "@" + domain + return &linkEntry{str, domain, pubkey} +} + +// Entry Parsing + +func parseEntry(e string, validSchemes enr.IdentityScheme) (entry, error) { + switch { + case strings.HasPrefix(e, linkPrefix): + return parseLinkEntry(e) + case strings.HasPrefix(e, branchPrefix): + return parseBranch(e) + case strings.HasPrefix(e, enrPrefix): + return parseENR(e, 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 parseLinkEntry(e string) (entry, error) { + le, err := parseLink(e) + if err != nil { + return nil, err + } + return le, nil +} + +func parseLink(e string) (*linkEntry, error) { + if !strings.HasPrefix(e, linkPrefix) { + return nil, fmt.Errorf("wrong/missing scheme 'enrtree' in URL") + } + e = e[len(linkPrefix):] + 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{e, domain, key}, nil +} + +func parseBranch(e string) (entry, error) { + e = e[len(branchPrefix):] + if e == "" { + return &branchEntry{}, nil // empty entry is OK + } + hashes := make([]string, 0, strings.Count(e, ",")) + for _, c := range strings.Split(e, ",") { + if !isValidHash(c) { + return nil, entryError{"branch", errInvalidChild} + } + hashes = append(hashes, c) + } + return &branchEntry{hashes}, nil +} + +func parseENR(e string, validSchemes enr.IdentityScheme) (entry, error) { + e = e[len(enrPrefix):] + 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 := parseLink(url) + if err != nil { + return "", nil, err + } + return le.domain, le.pubkey, nil +} diff --git a/p2p/dnsdisc/tree_test.go b/p2p/dnsdisc/tree_test.go new file mode 100644 index 00000000..461b9ec4 --- /dev/null +++ b/p2p/dnsdisc/tree_test.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 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-branch:1,2", + err: entryError{"branch", errInvalidChild}, + }, + { + input: "enrtree-branch:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + err: entryError{"branch", errInvalidChild}, + }, + { + input: "enrtree-branch:", + e: &branchEntry{}, + }, + { + input: "enrtree-branch:AAAAAAAAAAAAAAAAAAAA", + e: &branchEntry{[]string{"AAAAAAAAAAAAAAAAAAAA"}}, + }, + { + input: "enrtree-branch:AAAAAAAAAAAAAAAAAAAA,BBBBBBBBBBBBBBBBBBBB", + e: &branchEntry{[]string{"AAAAAAAAAAAAAAAAAAAA", "BBBBBBBBBBBBBBBBBBBB"}}, + }, + // Links + { + input: "enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org", + e: &linkEntry{"AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org", "nodes.example.org", &testkey.PublicKey}, + }, + { + input: "enrtree://nodes.example.org", + err: entryError{"link", errNoPubkey}, + }, + { + input: "enrtree://AP62DT7WOTEQZGQZOU474PP3KMEGVTTE7A7NPRXKX3DUD57@nodes.example.org", + err: entryError{"link", errBadPubkey}, + }, + { + input: "enrtree://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/idscheme.go b/p2p/enode/idscheme.go index 60e87553..c1834f06 100644 --- a/p2p/enode/idscheme.go +++ b/p2p/enode/idscheme.go @@ -21,10 +21,10 @@ import ( "fmt" "io" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) diff --git a/p2p/enode/idscheme_test.go b/p2p/enode/idscheme_test.go index a9b93d85..0910e6e8 100644 --- a/p2p/enode/idscheme_test.go +++ b/p2p/enode/idscheme_test.go @@ -23,9 +23,9 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/p2p/enode/iter.go b/p2p/enode/iter.go new file mode 100644 index 00000000..664964f5 --- /dev/null +++ b/p2p/enode/iter.go @@ -0,0 +1,288 @@ +// 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 enode + +import ( + "sync" + "time" +) + +// Iterator represents a sequence of nodes. The Next method moves to the next node in the +// sequence. It returns false when the sequence has ended or the iterator is closed. Close +// may be called concurrently with Next and Node, and interrupts Next if it is blocked. +type Iterator interface { + Next() bool // moves to next node + Node() *Node // returns current node + Close() // ends the iterator +} + +// ReadNodes reads at most n nodes from the given iterator. The return value contains no +// duplicates and no nil values. To prevent looping indefinitely for small repeating node +// sequences, this function calls Next at most n times. +func ReadNodes(it Iterator, n int) []*Node { + seen := make(map[ID]*Node, n) + for i := 0; i < n && it.Next(); i++ { + // Remove duplicates, keeping the node with higher seq. + node := it.Node() + prevNode, ok := seen[node.ID()] + if ok && prevNode.Seq() > node.Seq() { + continue + } + seen[node.ID()] = node + } + result := make([]*Node, 0, len(seen)) + for _, node := range seen { + result = append(result, node) + } + return result +} + +// IterNodes makes an iterator which runs through the given nodes once. +func IterNodes(nodes []*Node) Iterator { + return &sliceIter{nodes: nodes, index: -1} +} + +// CycleNodes makes an iterator which cycles through the given nodes indefinitely. +func CycleNodes(nodes []*Node) Iterator { + return &sliceIter{nodes: nodes, index: -1, cycle: true} +} + +type sliceIter struct { + mu sync.Mutex + nodes []*Node + index int + cycle bool +} + +func (it *sliceIter) Next() bool { + it.mu.Lock() + defer it.mu.Unlock() + + if len(it.nodes) == 0 { + return false + } + it.index++ + if it.index == len(it.nodes) { + if it.cycle { + it.index = 0 + } else { + it.nodes = nil + return false + } + } + return true +} + +func (it *sliceIter) Node() *Node { + it.mu.Lock() + defer it.mu.Unlock() + if len(it.nodes) == 0 { + return nil + } + return it.nodes[it.index] +} + +func (it *sliceIter) Close() { + it.mu.Lock() + defer it.mu.Unlock() + + it.nodes = nil +} + +// Filter wraps an iterator such that Next only returns nodes for which +// the 'check' function returns true. +func Filter(it Iterator, check func(*Node) bool) Iterator { + return &filterIter{it, check} +} + +type filterIter struct { + Iterator + check func(*Node) bool +} + +func (f *filterIter) Next() bool { + for f.Iterator.Next() { + if f.check(f.Node()) { + return true + } + } + return false +} + +// FairMix aggregates multiple node iterators. The mixer itself is an iterator which ends +// only when Close is called. Source iterators added via AddSource are removed from the +// mix when they end. +// +// The distribution of nodes returned by Next is approximately fair, i.e. FairMix +// attempts to draw from all sources equally often. However, if a certain source is slow +// and doesn't return a node within the configured timeout, a node from any other source +// will be returned. +// +// It's safe to call AddSource and Close concurrently with Next. +type FairMix struct { + wg sync.WaitGroup + fromAny chan *Node + timeout time.Duration + cur *Node + + mu sync.Mutex + closed chan struct{} + sources []*mixSource + last int +} + +type mixSource struct { + it Iterator + next chan *Node + timeout time.Duration +} + +// NewFairMix creates a mixer. +// +// The timeout specifies how long the mixer will wait for the next fairly-chosen source +// before giving up and taking a node from any other source. A good way to set the timeout +// is deciding how long you'd want to wait for a node on average. Passing a negative +// timeout makes the mixer completely fair. +func NewFairMix(timeout time.Duration) *FairMix { + m := &FairMix{ + fromAny: make(chan *Node), + closed: make(chan struct{}), + timeout: timeout, + } + return m +} + +// AddSource adds a source of nodes. +func (m *FairMix) AddSource(it Iterator) { + m.mu.Lock() + defer m.mu.Unlock() + + if m.closed == nil { + return + } + m.wg.Add(1) + source := &mixSource{it, make(chan *Node), m.timeout} + m.sources = append(m.sources, source) + go m.runSource(m.closed, source) +} + +// Close shuts down the mixer and all current sources. +// Calling this is required to release resources associated with the mixer. +func (m *FairMix) Close() { + m.mu.Lock() + defer m.mu.Unlock() + + if m.closed == nil { + return + } + for _, s := range m.sources { + s.it.Close() + } + close(m.closed) + m.wg.Wait() + close(m.fromAny) + m.sources = nil + m.closed = nil +} + +// Next returns a node from a random source. +func (m *FairMix) Next() bool { + m.cur = nil + + var timeout <-chan time.Time + if m.timeout >= 0 { + timer := time.NewTimer(m.timeout) + timeout = timer.C + defer timer.Stop() + } + for { + source := m.pickSource() + if source == nil { + return m.nextFromAny() + } + select { + case n, ok := <-source.next: + if ok { + m.cur = n + source.timeout = m.timeout + return true + } + // This source has ended. + m.deleteSource(source) + case <-timeout: + source.timeout /= 2 + return m.nextFromAny() + } + } +} + +// Node returns the current node. +func (m *FairMix) Node() *Node { + return m.cur +} + +// nextFromAny is used when there are no sources or when the 'fair' choice +// doesn't turn up a node quickly enough. +func (m *FairMix) nextFromAny() bool { + n, ok := <-m.fromAny + if ok { + m.cur = n + } + return ok +} + +// pickSource chooses the next source to read from, cycling through them in order. +func (m *FairMix) pickSource() *mixSource { + m.mu.Lock() + defer m.mu.Unlock() + + if len(m.sources) == 0 { + return nil + } + m.last = (m.last + 1) % len(m.sources) + return m.sources[m.last] +} + +// deleteSource deletes a source. +func (m *FairMix) deleteSource(s *mixSource) { + m.mu.Lock() + defer m.mu.Unlock() + + for i := range m.sources { + if m.sources[i] == s { + copy(m.sources[i:], m.sources[i+1:]) + m.sources[len(m.sources)-1] = nil + m.sources = m.sources[:len(m.sources)-1] + break + } + } +} + +// runSource reads a single source in a loop. +func (m *FairMix) runSource(closed chan struct{}, s *mixSource) { + defer m.wg.Done() + defer close(s.next) + for s.it.Next() { + n := s.it.Node() + select { + case s.next <- n: + case m.fromAny <- n: + case <-closed: + return + } + } +} diff --git a/p2p/enode/iter_test.go b/p2p/enode/iter_test.go new file mode 100644 index 00000000..5014346a --- /dev/null +++ b/p2p/enode/iter_test.go @@ -0,0 +1,291 @@ +// 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 enode + +import ( + "encoding/binary" + "runtime" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum/p2p/enr" +) + +func TestReadNodes(t *testing.T) { + nodes := ReadNodes(new(genIter), 10) + checkNodes(t, nodes, 10) +} + +// This test checks that ReadNodes terminates when reading N nodes from an iterator +// which returns less than N nodes in an endless cycle. +func TestReadNodesCycle(t *testing.T) { + iter := &callCountIter{ + Iterator: CycleNodes([]*Node{ + testNode(0, 0), + testNode(1, 0), + testNode(2, 0), + }), + } + nodes := ReadNodes(iter, 10) + checkNodes(t, nodes, 3) + if iter.count != 10 { + t.Fatalf("%d calls to Next, want %d", iter.count, 100) + } +} + +func TestFilterNodes(t *testing.T) { + nodes := make([]*Node, 100) + for i := range nodes { + nodes[i] = testNode(uint64(i), uint64(i)) + } + + it := Filter(IterNodes(nodes), func(n *Node) bool { + return n.Seq() >= 50 + }) + for i := 50; i < len(nodes); i++ { + if !it.Next() { + t.Fatal("Next returned false") + } + if it.Node() != nodes[i] { + t.Fatalf("iterator returned wrong node %v\nwant %v", it.Node(), nodes[i]) + } + } + if it.Next() { + t.Fatal("Next returned true after underlying iterator has ended") + } +} + +func checkNodes(t *testing.T, nodes []*Node, wantLen int) { + if len(nodes) != wantLen { + t.Errorf("slice has %d nodes, want %d", len(nodes), wantLen) + return + } + seen := make(map[ID]bool) + for i, e := range nodes { + if e == nil { + t.Errorf("nil node at index %d", i) + return + } + if seen[e.ID()] { + t.Errorf("slice has duplicate node %v", e.ID()) + return + } + seen[e.ID()] = true + } +} + +// This test checks fairness of FairMix in the happy case where all sources return nodes +// within the context's deadline. +func TestFairMix(t *testing.T) { + for i := 0; i < 500; i++ { + testMixerFairness(t) + } +} + +func testMixerFairness(t *testing.T) { + mix := NewFairMix(1 * time.Second) + mix.AddSource(&genIter{index: 1}) + mix.AddSource(&genIter{index: 2}) + mix.AddSource(&genIter{index: 3}) + defer mix.Close() + + nodes := ReadNodes(mix, 500) + checkNodes(t, nodes, 500) + + // Verify that the nodes slice contains an approximately equal number of nodes + // from each source. + d := idPrefixDistribution(nodes) + for _, count := range d { + if approxEqual(count, len(nodes)/3, 30) { + t.Fatalf("ID distribution is unfair: %v", d) + } + } +} + +// This test checks that FairMix falls back to an alternative source when +// the 'fair' choice doesn't return a node within the timeout. +func TestFairMixNextFromAll(t *testing.T) { + mix := NewFairMix(1 * time.Millisecond) + mix.AddSource(&genIter{index: 1}) + mix.AddSource(CycleNodes(nil)) + defer mix.Close() + + nodes := ReadNodes(mix, 500) + checkNodes(t, nodes, 500) + + d := idPrefixDistribution(nodes) + if len(d) > 1 || d[1] != len(nodes) { + t.Fatalf("wrong ID distribution: %v", d) + } +} + +// This test ensures FairMix works for Next with no sources. +func TestFairMixEmpty(t *testing.T) { + var ( + mix = NewFairMix(1 * time.Second) + testN = testNode(1, 1) + ch = make(chan *Node) + ) + defer mix.Close() + + go func() { + mix.Next() + ch <- mix.Node() + }() + + mix.AddSource(CycleNodes([]*Node{testN})) + if n := <-ch; n != testN { + t.Errorf("got wrong node: %v", n) + } +} + +// This test checks closing a source while Next runs. +func TestFairMixRemoveSource(t *testing.T) { + mix := NewFairMix(1 * time.Second) + source := make(blockingIter) + mix.AddSource(source) + + sig := make(chan *Node) + go func() { + <-sig + mix.Next() + sig <- mix.Node() + }() + + sig <- nil + runtime.Gosched() + source.Close() + + wantNode := testNode(0, 0) + mix.AddSource(CycleNodes([]*Node{wantNode})) + n := <-sig + + if len(mix.sources) != 1 { + t.Fatalf("have %d sources, want one", len(mix.sources)) + } + if n != wantNode { + t.Fatalf("mixer returned wrong node") + } +} + +type blockingIter chan struct{} + +func (it blockingIter) Next() bool { + <-it + return false +} + +func (it blockingIter) Node() *Node { + return nil +} + +func (it blockingIter) Close() { + close(it) +} + +func TestFairMixClose(t *testing.T) { + for i := 0; i < 20 && !t.Failed(); i++ { + testMixerClose(t) + } +} + +func testMixerClose(t *testing.T) { + mix := NewFairMix(-1) + mix.AddSource(CycleNodes(nil)) + mix.AddSource(CycleNodes(nil)) + + done := make(chan struct{}) + go func() { + defer close(done) + if mix.Next() { + t.Error("Next returned true") + } + }() + // This call is supposed to make it more likely that NextNode is + // actually executing by the time we call Close. + runtime.Gosched() + + mix.Close() + select { + case <-done: + case <-time.After(3 * time.Second): + t.Fatal("Next didn't unblock on Close") + } + + mix.Close() // shouldn't crash +} + +func idPrefixDistribution(nodes []*Node) map[uint32]int { + d := make(map[uint32]int) + for _, node := range nodes { + id := node.ID() + d[binary.BigEndian.Uint32(id[:4])]++ + } + return d +} + +func approxEqual(x, y, ε int) bool { + if y > x { + x, y = y, x + } + return x-y > ε +} + +// genIter creates fake nodes with numbered IDs based on 'index' and 'gen' +type genIter struct { + node *Node + index, gen uint32 +} + +func (s *genIter) Next() bool { + index := atomic.LoadUint32(&s.index) + if index == ^uint32(0) { + s.node = nil + return false + } + s.node = testNode(uint64(index)<<32|uint64(s.gen), 0) + s.gen++ + return true +} + +func (s *genIter) Node() *Node { + return s.node +} + +func (s *genIter) Close() { + atomic.StoreUint32(&s.index, ^uint32(0)) +} + +func testNode(id, seq uint64) *Node { + var nodeID ID + binary.BigEndian.PutUint64(nodeID[:], id) + r := new(enr.Record) + r.SetSeq(seq) + return SignNull(r, nodeID) +} + +// callCountIter counts calls to NextNode. +type callCountIter struct { + Iterator + count int +} + +func (it *callCountIter) Next() bool { + it.count++ + return it.Iterator.Next() +} diff --git a/p2p/enode/localnode.go b/p2p/enode/localnode.go index 8e52fd77..a18204e7 100644 --- a/p2p/enode/localnode.go +++ b/p2p/enode/localnode.go @@ -26,9 +26,9 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/netutil" ) const ( @@ -36,20 +36,25 @@ const ( iptrackMinStatements = 10 iptrackWindow = 5 * time.Minute iptrackContactWindow = 10 * time.Minute + + // time needed to wait between two updates to the local ENR + recordUpdateThrottle = time.Millisecond ) // LocalNode produces the signed node record of a local node, i.e. a node run in the // current process. Setting ENR entries via the Set method updates the record. A new version // of the record is signed on demand when the Node method is called. type LocalNode struct { - cur atomic.Value // holds a non-nil node pointer while the record is up-to-date. + cur atomic.Value // holds a non-nil node pointer while the record is up-to-date + id ID key *ecdsa.PrivateKey db *DB // everything below is protected by a lock - mu sync.Mutex + mu sync.RWMutex seq uint64 + update time.Time // timestamp when the record was last updated entries map[string]enr.Entry endpoint4 lnEndpoint endpoint6 lnEndpoint @@ -58,7 +63,7 @@ type LocalNode struct { type lnEndpoint struct { track *netutil.IPTracker staticIP, fallbackIP net.IP - fallbackUDP int + fallbackUDP uint16 // port } // NewLocalNode creates a local node. @@ -76,7 +81,8 @@ func NewLocalNode(db *DB, key *ecdsa.PrivateKey) *LocalNode { }, } ln.seq = db.localSeq(ln.id) - ln.invalidate() + ln.update = time.Now() + ln.cur.Store((*Node)(nil)) return ln } @@ -87,14 +93,34 @@ func (ln *LocalNode) Database() *DB { // Node returns the current version of the local node record. func (ln *LocalNode) Node() *Node { + // If we have a valid record, return that n := ln.cur.Load().(*Node) if n != nil { return n } + // Record was invalidated, sign a new copy. ln.mu.Lock() defer ln.mu.Unlock() + + // Double check the current record, since multiple goroutines might be waiting + // on the write mutex. + if n = ln.cur.Load().(*Node); n != nil { + return n + } + + // The initial sequence number is the current timestamp in milliseconds. To ensure + // that the initial sequence number will always be higher than any previous sequence + // number (assuming the clock is correct), we want to avoid updating the record faster + // than once per ms. So we need to sleep here until the next possible update time has + // arrived. + lastChange := time.Since(ln.update) + if lastChange < recordUpdateThrottle { + time.Sleep(recordUpdateThrottle - lastChange) + } + ln.sign() + ln.update = time.Now() return ln.cur.Load().(*Node) } @@ -114,6 +140,10 @@ func (ln *LocalNode) ID() ID { // 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. +// +// Since node record updates are throttled to one per second, Set is asynchronous. +// Any update will be queued up and published when at least one second passes from +// the last change. func (ln *LocalNode) Set(e enr.Entry) { ln.mu.Lock() defer ln.mu.Unlock() @@ -178,8 +208,8 @@ func (ln *LocalNode) SetFallbackUDP(port int) { ln.mu.Lock() defer ln.mu.Unlock() - ln.endpoint4.fallbackUDP = port - ln.endpoint6.fallbackUDP = port + ln.endpoint4.fallbackUDP = uint16(port) + ln.endpoint6.fallbackUDP = uint16(port) ln.updateEndpoints() } @@ -231,7 +261,7 @@ func (ln *LocalNode) updateEndpoints() { } // get returns the endpoint with highest precedence. -func (e *lnEndpoint) get() (newIP net.IP, newPort int) { +func (e *lnEndpoint) get() (newIP net.IP, newPort uint16) { newPort = e.fallbackUDP if e.fallbackIP != nil { newIP = e.fallbackIP @@ -247,15 +277,18 @@ func (e *lnEndpoint) get() (newIP net.IP, newPort int) { // predictAddr wraps IPTracker.PredictEndpoint, converting from its string-based // endpoint representation to IP and port types. -func predictAddr(t *netutil.IPTracker) (net.IP, int) { +func predictAddr(t *netutil.IPTracker) (net.IP, uint16) { ep := t.PredictEndpoint() if ep == "" { return nil, 0 } ipString, portString, _ := net.SplitHostPort(ep) ip := net.ParseIP(ipString) - port, _ := strconv.Atoi(portString) - return ip, port + port, err := strconv.ParseUint(portString, 10, 16) + if err != nil { + return nil, 0 + } + return ip, uint16(port) } func (ln *LocalNode) invalidate() { @@ -288,3 +321,12 @@ func (ln *LocalNode) bumpSeq() { ln.seq++ ln.db.storeLocalSeq(ln.id, ln.seq) } + +// nowMilliseconds gives the current timestamp at millisecond precision. +func nowMilliseconds() uint64 { + ns := time.Now().UnixNano() + if ns < 0 { + return 0 + } + return uint64(ns / 1000 / 1000) +} diff --git a/p2p/enode/localnode_test.go b/p2p/enode/localnode_test.go index 1709a888..312df813 100644 --- a/p2p/enode/localnode_test.go +++ b/p2p/enode/localnode_test.go @@ -21,8 +21,8 @@ import ( "net" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enr" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/stretchr/testify/assert" ) @@ -49,32 +49,39 @@ func TestLocalNode(t *testing.T) { } } +// This test checks that the sequence number is persisted between restarts. func TestLocalNodeSeqPersist(t *testing.T) { + timestamp := nowMilliseconds() + ln, db := newLocalNodeForTesting() defer db.Close() - if s := ln.Node().Seq(); s != 1 { - t.Fatalf("wrong initial seq %d, want 1", s) + initialSeq := ln.Node().Seq() + if initialSeq < timestamp { + t.Fatalf("wrong initial seq %d, want at least %d", initialSeq, timestamp) } + ln.Set(enr.WithEntry("x", uint(1))) - if s := ln.Node().Seq(); s != 2 { - t.Fatalf("wrong seq %d after set, want 2", s) + if s := ln.Node().Seq(); s != initialSeq+1 { + t.Fatalf("wrong seq %d after set, want %d", s, initialSeq+1) } // Create a new instance, it should reload the sequence number. // The number increases just after that because a new record is // created without the "x" entry. ln2 := NewLocalNode(db, ln.key) - if s := ln2.Node().Seq(); s != 3 { - t.Fatalf("wrong seq %d on new instance, want 3", s) + if s := ln2.Node().Seq(); s != initialSeq+2 { + t.Fatalf("wrong seq %d on new instance, want %d", s, initialSeq+2) } + finalSeq := ln2.Node().Seq() + // Create a new instance with a different node key on the same database. // This should reset the sequence number. key, _ := crypto.GenerateKey() ln3 := NewLocalNode(db, key) - if s := ln3.Node().Seq(); s != 1 { - t.Fatalf("wrong seq %d on instance with changed key, want 1", s) + if s := ln3.Node().Seq(); s < finalSeq { + t.Fatalf("wrong seq %d on instance with changed key, want >= %d", s, finalSeq) } } @@ -91,20 +98,20 @@ func TestLocalNodeEndpoint(t *testing.T) { // 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()) + initialSeq := 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()) + assert.Equal(t, initialSeq+1, 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()) + assert.Equal(t, initialSeq+1, ln.Node().Seq()) from := &net.UDPAddr{IP: make(net.IP, 4), Port: 90} rand.Read(from.IP) @@ -112,11 +119,11 @@ func TestLocalNodeEndpoint(t *testing.T) { } assert.Equal(t, predicted.IP, ln.Node().IP()) assert.Equal(t, predicted.Port, ln.Node().UDP()) - assert.Equal(t, uint64(3), ln.Node().Seq()) + assert.Equal(t, initialSeq+2, 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()) + assert.Equal(t, initialSeq+3, ln.Node().Seq()) } diff --git a/p2p/enode/node.go b/p2p/enode/node.go index 9a5445eb..d747ca33 100644 --- a/p2p/enode/node.go +++ b/p2p/enode/node.go @@ -23,12 +23,11 @@ import ( "errors" "fmt" "math/bits" - "math/rand" "net" "strings" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" ) var errMissingPrefix = errors.New("missing 'enr:' prefix for base64-encoded record") @@ -122,7 +121,7 @@ func (n *Node) UDP() int { return int(port) } -// UDP returns the TCP port of the node. +// TCP returns the TCP port of the node. func (n *Node) TCP() int { var port enr.TCP n.Load(&port) @@ -217,7 +216,7 @@ func (n ID) MarshalText() ([]byte, error) { // UnmarshalText implements the encoding.TextUnmarshaler interface. func (n *ID) UnmarshalText(text []byte) error { - id, err := parseID(string(text)) + id, err := ParseID(string(text)) if err != nil { return err } @@ -229,14 +228,14 @@ func (n *ID) UnmarshalText(text []byte) error { // The string may be prefixed with 0x. // It panics if the string is not a valid ID. func HexID(in string) ID { - id, err := parseID(in) + id, err := ParseID(in) if err != nil { panic(err) } return id } -func parseID(in string) (ID, error) { +func ParseID(in string) (ID, error) { var id ID b, err := hex.DecodeString(strings.TrimPrefix(in, "0x")) if err != nil { @@ -278,23 +277,3 @@ func LogDist(a, b ID) int { } return len(a)*8 - lz } - -// RandomID returns a random ID b such that logdist(a, b) == n. -func RandomID(a ID, n int) (b ID) { - if n == 0 { - return a - } - // flip bit at position n, fill the rest with random bits - b = a - pos := len(a) - n/8 - 1 - bit := byte(0x01) << (byte(n%8) - 1) - if bit == 0 { - pos++ - bit = 0x80 - } - b[pos] = a[pos]&^bit | ^a[pos]&bit // TODO: randomize end bits - for i := pos + 1; i < len(a); i++ { - b[i] = byte(rand.Intn(255)) - } - return b -} diff --git a/p2p/enode/node_test.go b/p2p/enode/node_test.go index d5a8bfeb..d15859c4 100644 --- a/p2p/enode/node_test.go +++ b/p2p/enode/node_test.go @@ -24,8 +24,8 @@ import ( "testing" "testing/quick" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" "github.com/stretchr/testify/assert" ) diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index 8c269b08..d1712f75 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -26,7 +26,7 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/rlp" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/iterator" @@ -41,6 +41,7 @@ const ( dbNodePrefix = "n:" // Identifier to prefix node entries with dbLocalPrefix = "local:" dbDiscoverRoot = "v4" + dbDiscv5Root = "v5" // These fields are stored per ID and IP, the full key is "n::v4::findfail". // Use nodeItemKey to create those keys. @@ -60,6 +61,10 @@ const ( dbVersion = 9 ) +var ( + errInvalidIP = errors.New("invalid IP") +) + var zeroIP = make(net.IP, 16) // DB is the node database, storing previously seen nodes and any collected metadata about @@ -162,7 +167,7 @@ func splitNodeItemKey(key []byte) (id ID, ip net.IP, field string) { } key = key[len(dbDiscoverRoot)+1:] // Split out the IP. - ip = net.IP(key[:16]) + ip = key[:16] if ip4 := ip.To4(); ip4 != nil { ip = ip4 } @@ -172,6 +177,16 @@ func splitNodeItemKey(key []byte) (id ID, ip net.IP, field string) { return id, ip, field } +func v5Key(id ID, ip net.IP, field string) []byte { + return bytes.Join([][]byte{ + []byte(dbNodePrefix), + id[:], + []byte(dbDiscv5Root), + ip.To16(), + []byte(field), + }, []byte{':'}) +} + // localItemKey returns the key of a local node item. func localItemKey(id ID, field string) []byte { key := append([]byte(dbLocalPrefix), id[:]...) @@ -348,16 +363,25 @@ func (db *DB) expireNodes() { // LastPingReceived retrieves the time of the last ping packet received from // a remote node. func (db *DB) LastPingReceived(id ID, ip net.IP) time.Time { + if ip = ip.To16(); ip == nil { + return time.Time{} + } return time.Unix(db.fetchInt64(nodeItemKey(id, ip, dbNodePing)), 0) } // UpdateLastPingReceived updates the last time we tried contacting a remote node. func (db *DB) UpdateLastPingReceived(id ID, ip net.IP, instance time.Time) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodePing), instance.Unix()) } // LastPongReceived retrieves the time of the last successful pong from remote node. func (db *DB) LastPongReceived(id ID, ip net.IP) time.Time { + if ip = ip.To16(); ip == nil { + return time.Time{} + } // Launch expirer db.ensureExpirer() return time.Unix(db.fetchInt64(nodeItemKey(id, ip, dbNodePong)), 0) @@ -365,22 +389,52 @@ func (db *DB) LastPongReceived(id ID, ip net.IP) time.Time { // UpdateLastPongReceived updates the last pong time of a node. func (db *DB) UpdateLastPongReceived(id ID, ip net.IP, instance time.Time) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodePong), instance.Unix()) } // FindFails retrieves the number of findnode failures since bonding. func (db *DB) FindFails(id ID, ip net.IP) int { + if ip = ip.To16(); ip == nil { + return 0 + } return int(db.fetchInt64(nodeItemKey(id, ip, dbNodeFindFails))) } // UpdateFindFails updates the number of findnode failures since bonding. func (db *DB) UpdateFindFails(id ID, ip net.IP, fails int) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } return db.storeInt64(nodeItemKey(id, ip, dbNodeFindFails), int64(fails)) } -// LocalSeq retrieves the local record sequence counter. +// FindFailsV5 retrieves the discv5 findnode failure counter. +func (db *DB) FindFailsV5(id ID, ip net.IP) int { + if ip = ip.To16(); ip == nil { + return 0 + } + return int(db.fetchInt64(v5Key(id, ip, dbNodeFindFails))) +} + +// UpdateFindFailsV5 stores the discv5 findnode failure counter. +func (db *DB) UpdateFindFailsV5(id ID, ip net.IP, fails int) error { + if ip = ip.To16(); ip == nil { + return errInvalidIP + } + return db.storeInt64(v5Key(id, ip, dbNodeFindFails), int64(fails)) +} + +// localSeq retrieves the local record sequence counter, defaulting to the current +// timestamp if no previous exists. This ensures that wiping all data associated +// with a node (apart from its key) will not generate already used sequence nums. func (db *DB) localSeq(id ID) uint64 { - return db.fetchUint64(localItemKey(id, dbLocalSeq)) + if seq := db.fetchUint64(localItemKey(id, dbLocalSeq)); seq > 0 { + return seq + } + return nowMilliseconds() } // storeLocalSeq stores the local record sequence counter. diff --git a/p2p/enode/nodedb_test.go b/p2p/enode/nodedb_test.go index 2adb1414..ba3f8c76 100644 --- a/p2p/enode/nodedb_test.go +++ b/p2p/enode/nodedb_test.go @@ -19,9 +19,7 @@ package enode import ( "bytes" "fmt" - "io/ioutil" "net" - "os" "path/filepath" "reflect" "testing" @@ -300,11 +298,7 @@ func testSeedQuery() error { } func TestDBPersistency(t *testing.T) { - root, err := ioutil.TempDir("", "nodedb-") - if err != nil { - t.Fatalf("failed to create temporary data folder: %v", err) - } - defer os.RemoveAll(root) + root := t.TempDir() var ( testKey = []byte("somekey") @@ -462,3 +456,14 @@ func TestDBExpiration(t *testing.T) { } } } + +// This test checks that expiration works when discovery v5 data is present +// in the database. +func TestDBExpireV5(t *testing.T) { + db, _ := OpenDB("") + defer db.Close() + + ip := net.IP{127, 0, 0, 1} + db.UpdateFindFailsV5(ID{}, ip, 4) + db.expireNodes() +} diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go index 56d59b09..c4450491 100644 --- a/p2p/enode/urlv4.go +++ b/p2p/enode/urlv4.go @@ -26,12 +26,15 @@ import ( "regexp" "strconv" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enr" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" ) -var incompleteNodeURL = regexp.MustCompile("(?i)^(?:enode://)?([0-9a-f]+)$") +var ( + incompleteNodeURL = regexp.MustCompile("(?i)^(?:enode://)?([0-9a-f]+)$") + lookupIPFunc = net.LookupIP +) // MustParseV4 parses a node URL. It panics if the URL is not valid. func MustParseV4(rawurl string) *Node { @@ -56,7 +59,7 @@ func MustParseV4(rawurl string) *Node { // // For complete nodes, the node ID is encoded in the username portion // of the URL, separated from the host by an @ sign. The hostname can -// only be given as an IP address, DNS domain names are not allowed. +// only be given as an IP address or using DNS domain name. // The port in the host name section is the TCP listening port. If the // TCP and UDP (discovery) ports differ, the UDP port is specified as // query parameter "discport". @@ -107,7 +110,6 @@ func isNewV4(n *Node) bool { func parseComplete(rawurl string) (*Node, error) { var ( id *ecdsa.PublicKey - ip net.IP tcpPort, udpPort uint64 ) u, err := url.Parse(rawurl) @@ -125,11 +127,14 @@ func parseComplete(rawurl string) (*Node, error) { return nil, fmt.Errorf("invalid public key (%v)", err) } // Parse the IP address. - ips, err := net.LookupIP(u.Hostname()) - if err != nil { - return nil, err + ip := net.ParseIP(u.Hostname()) + if ip == nil { + ips, err := lookupIPFunc(u.Hostname()) + if err != nil { + return nil, err + } + ip = ips[0] } - ip = ips[0] // Ensure the IP is 4 bytes long for IPv4 addresses. if ipv4 := ip.To4(); ipv4 != nil { ip = ipv4 diff --git a/p2p/enode/urlv4_test.go b/p2p/enode/urlv4_test.go index 1444fcce..33de96cc 100644 --- a/p2p/enode/urlv4_test.go +++ b/p2p/enode/urlv4_test.go @@ -18,15 +18,25 @@ package enode import ( "crypto/ecdsa" + "errors" "net" "reflect" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/p2p/enr" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" ) +func init() { + lookupIPFunc = func(name string) ([]net.IP, error) { + if name == "node.example.org" { + return []net.IP{{33, 44, 55, 66}}, nil + } + return nil, errors.New("no such host") + } +} + var parseNodeTests = []struct { input string wantError string diff --git a/p2p/enr/enr.go b/p2p/enr/enr.go index babab02e..15891813 100644 --- a/p2p/enr/enr.go +++ b/p2p/enr/enr.go @@ -40,7 +40,7 @@ import ( "io" "sort" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/rlp" ) const SizeLimit = 300 // maximum encoded size of a node record in bytes @@ -50,6 +50,7 @@ var ( errNotSorted = errors.New("record key/value pairs are not sorted by key") errDuplicateKey = errors.New("record contains duplicate key") errIncompletePair = errors.New("record contains incomplete k/v pair") + errIncompleteList = errors.New("record contains less than two list elements") errTooBig = fmt.Errorf("record bigger than %d bytes", SizeLimit) errEncodeUnsigned = errors.New("can't encode unsigned record") errNotFound = errors.New("no such key in record") @@ -209,9 +210,15 @@ func decodeRecord(s *rlp.Stream) (dec Record, raw []byte, err error) { return dec, raw, err } if err = s.Decode(&dec.signature); err != nil { + if err == rlp.EOL { + err = errIncompleteList + } return dec, raw, err } if err = s.Decode(&dec.seq); err != nil { + if err == rlp.EOL { + err = errIncompleteList + } return dec, raw, err } // The rest of the record contains sorted k/v pairs. @@ -297,7 +304,7 @@ func (r *Record) AppendElements(list []interface{}) []interface{} { } func (r *Record) encode(sig []byte) (raw []byte, err error) { - list := make([]interface{}, 1, 2*len(r.pairs)+1) + list := make([]interface{}, 1, 2*len(r.pairs)+2) list[0] = sig list = r.AppendElements(list) if raw, err = rlp.EncodeToBytes(list); err != nil { diff --git a/p2p/enr/enr_test.go b/p2p/enr/enr_test.go index 074e8548..bf3f1047 100644 --- a/p2p/enr/enr_test.go +++ b/p2p/enr/enr_test.go @@ -24,7 +24,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/rlp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -231,6 +231,29 @@ func TestRecordTooBig(t *testing.T) { require.NoError(t, signTest([]byte{5}, &r)) } +// This checks that incomplete RLP inputs are handled correctly. +func TestDecodeIncomplete(t *testing.T) { + type decTest struct { + input []byte + err error + } + tests := []decTest{ + {[]byte{0xC0}, errIncompleteList}, + {[]byte{0xC1, 0x1}, errIncompleteList}, + {[]byte{0xC2, 0x1, 0x2}, nil}, + {[]byte{0xC3, 0x1, 0x2, 0x3}, errIncompletePair}, + {[]byte{0xC4, 0x1, 0x2, 0x3, 0x4}, nil}, + {[]byte{0xC5, 0x1, 0x2, 0x3, 0x4, 0x5}, errIncompletePair}, + } + for _, test := range tests { + var r Record + err := rlp.DecodeBytes(test.input, &r) + if err != test.err { + t.Errorf("wrong error for %X: %v", test.input, err) + } + } +} + // TestSignEncodeAndDecodeRandom tests encoding/decoding of records containing random key/value pairs. func TestSignEncodeAndDecodeRandom(t *testing.T) { var r Record diff --git a/p2p/enr/entries.go b/p2p/enr/entries.go index 1bd71468..a8b0a383 100644 --- a/p2p/enr/entries.go +++ b/p2p/enr/entries.go @@ -17,11 +17,12 @@ package enr import ( + "errors" "fmt" "io" "net" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/rlp" ) // Entry is implemented by known node record entry types. @@ -180,9 +181,16 @@ func (err *KeyError) Error() string { return fmt.Sprintf("ENR key %q: %v", err.Key, err.Err) } +func (err *KeyError) Unwrap() error { + return err.Err +} + // IsNotFound reports whether the given error means that a key/value pair is // missing from a record. func IsNotFound(err error) bool { - kerr, ok := err.(*KeyError) - return ok && kerr.Err == errNotFound + var ke *KeyError + if errors.As(err, &ke) { + return ke.Err == errNotFound + } + return false } diff --git a/p2p/message.go b/p2p/message.go index ffe33ccc..7cbe0f1d 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -21,13 +21,12 @@ import ( "errors" "fmt" "io" - "io/ioutil" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" ) // Msg defines the structure of a p2p message. @@ -39,9 +38,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 @@ -62,10 +65,14 @@ func (msg Msg) String() string { // Discard reads any remaining payload data into a black hole. func (msg Msg) Discard() error { - _, err := io.Copy(ioutil.Discard, msg.Payload) + _, err := io.Copy(io.Discard, msg.Payload) return err } +func (msg Msg) Time() time.Time { + return msg.ReceivedAt +} + type MsgReader interface { ReadMsg() (Msg, error) } @@ -237,7 +244,7 @@ func ExpectMsg(r MsgReader, code uint64, content interface{}) error { if int(msg.Size) != len(contentEnc) { return fmt.Errorf("message size mismatch: got %d, want %d", msg.Size, len(contentEnc)) } - actualContent, err := ioutil.ReadAll(msg.Payload) + actualContent, err := io.ReadAll(msg.Payload) if err != nil { return err } diff --git a/p2p/message_test.go b/p2p/message_test.go index a01f7555..e575c5d9 100644 --- a/p2p/message_test.go +++ b/p2p/message_test.go @@ -18,11 +18,9 @@ package p2p import ( "bytes" - "encoding/hex" "fmt" "io" "runtime" - "strings" "testing" "time" ) @@ -141,12 +139,3 @@ func TestEOFSignal(t *testing.T) { default: } } - -func unhex(str string) []byte { - r := strings.NewReplacer("\t", "", " ", "", "\n", "") - b, err := hex.DecodeString(r.Replace(str)) - if err != nil { - panic(fmt.Sprintf("invalid hex string: %q", str)) - } - return b -} diff --git a/p2p/metrics.go b/p2p/metrics.go index c481de8f..1bb505cd 100644 --- a/p2p/metrics.go +++ b/p2p/metrics.go @@ -19,118 +19,52 @@ package p2p import ( - "fmt" "net" - "sync" - "sync/atomic" - "time" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/metrics" ) const ( - 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 + // ingressMeterName is the prefix of the per-packet inbound metrics. + ingressMeterName = "p2p/ingress" - MeteredPeerLimit = 1024 // This amount of peers are individually metered -) - -var ( - ingressConnectMeter = metrics.NewRegisteredMeter(MetricsInboundConnects, nil) // Meter counting the ingress connections - 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 - activePeerCounter = metrics.NewRegisteredCounter("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 + // egressMeterName is the prefix of the per-packet outbound metrics. + egressMeterName = "p2p/egress" - meteredPeerFeed event.Feed // Event feed for peer metrics - meteredPeerCount int32 // Actually stored peer connection count + // HandleHistName is the prefix of the per-packet serving time histograms. + HandleHistName = "p2p/handle" ) -// MeteredPeerEventType is the type of peer events emitted by a metered connection. -type MeteredPeerEventType int - -const ( - // PeerConnected is the type of event emitted when a peer successfully - // made the handshake. - PeerConnected MeteredPeerEventType = iota - - // PeerDisconnected is the type of event emitted when a peer disconnects. - PeerDisconnected - - // PeerHandshakeFailed is the type of event emitted when a peer fails to - // make the handshake or disconnects before the handshake. - PeerHandshakeFailed +var ( + ingressConnectMeter = metrics.NewRegisteredMeter("p2p/serves", nil) + ingressTrafficMeter = metrics.NewRegisteredMeter(ingressMeterName, nil) + egressConnectMeter = metrics.NewRegisteredMeter("p2p/dials", nil) + egressTrafficMeter = metrics.NewRegisteredMeter(egressMeterName, nil) + activePeerGauge = metrics.NewRegisteredGauge("p2p/peers", nil) ) -// MeteredPeerEvent is an event emitted when peers connect or disconnect. -type MeteredPeerEvent struct { - Type MeteredPeerEventType // Type of peer event - IP net.IP // IP address of the peer - ID enode.ID // NodeID of the peer - Elapsed time.Duration // Time elapsed between the connection and the handshake/disconnection - Ingress uint64 // Ingress count at the moment of the event - Egress uint64 // Egress count at the moment of the event -} - -// SubscribeMeteredPeerEvent registers a subscription for peer life-cycle events -// if metrics collection is enabled. -func SubscribeMeteredPeerEvent(ch chan<- MeteredPeerEvent) event.Subscription { - return meteredPeerFeed.Subscribe(ch) -} - // meteredConn is a wrapper around a net.Conn that meters both the // inbound and outbound network traffic. type meteredConn struct { - net.Conn // Network connection to wrap with metering - - connected time.Time // Connection time of the peer - ip net.IP // IP address of the peer - id enode.ID // NodeID of the peer - - // trafficMetered denotes if the peer is registered in the traffic registries. - // Its value is true if the metered peer count doesn't reach the limit in the - // moment of the peer's connection. - trafficMetered bool - ingressMeter metrics.Meter // Meter for the read bytes of the peer - egressMeter metrics.Meter // Meter for the written bytes of the peer - - lock sync.RWMutex // Lock protecting the metered connection's internals + net.Conn } // newMeteredConn creates a new metered connection, bumps the ingress or egress // connection meter and also increases the metered peer count. If the metrics -// system is disabled or the IP address is unspecified, this function returns -// the original object. -func newMeteredConn(conn net.Conn, ingress bool, ip net.IP) net.Conn { +// system is disabled, function returns the original connection. +func newMeteredConn(conn net.Conn, ingress bool, addr *net.TCPAddr) net.Conn { // Short circuit if metrics are disabled if !metrics.Enabled { return conn } - if ip.IsUnspecified() { - log.Warn("Peer IP is unspecified") - return conn - } // Bump the connection counters and wrap the connection if ingress { ingressConnectMeter.Mark(1) } else { egressConnectMeter.Mark(1) } - activePeerCounter.Inc(1) - - return &meteredConn{ - Conn: conn, - ip: ip, - connected: time.Now(), - } + activePeerGauge.Inc(1) + return &meteredConn{Conn: conn} } // Read delegates a network read to the underlying connection, bumping the common @@ -138,11 +72,6 @@ func newMeteredConn(conn net.Conn, ingress bool, ip net.IP) net.Conn { func (c *meteredConn) Read(b []byte) (n int, err error) { n, err = c.Conn.Read(b) ingressTrafficMeter.Mark(int64(n)) - c.lock.RLock() - if c.trafficMetered { - c.ingressMeter.Mark(int64(n)) - } - c.lock.RUnlock() return n, err } @@ -151,88 +80,15 @@ func (c *meteredConn) Read(b []byte) (n int, err error) { func (c *meteredConn) Write(b []byte) (n int, err error) { n, err = c.Conn.Write(b) egressTrafficMeter.Mark(int64(n)) - c.lock.RLock() - if c.trafficMetered { - c.egressMeter.Mark(int64(n)) - } - c.lock.RUnlock() return n, err } -// handshakeDone is called when a peer handshake is done. Registers the peer to -// 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) - c.lock.Lock() - c.id, c.trafficMetered = id, false - c.lock.Unlock() - log.Warn("Metered peer count reached the limit") - } else { - key := fmt.Sprintf("%s/%s", c.ip, id.String()) - c.lock.Lock() - c.id, c.trafficMetered = id, true - c.ingressMeter = metrics.NewRegisteredMeter(key, PeerIngressRegistry) - c.egressMeter = metrics.NewRegisteredMeter(key, PeerEgressRegistry) - c.lock.Unlock() - } - meteredPeerFeed.Send(MeteredPeerEvent{ - Type: PeerConnected, - IP: c.ip, - ID: id, - Elapsed: time.Since(c.connected), - }) -} - // Close delegates a close operation to the underlying connection, unregisters // the peer from the traffic registries and emits close event. func (c *meteredConn) Close() error { err := c.Conn.Close() - c.lock.RLock() - if c.id == (enode.ID{}) { - // If the peer disconnects before the handshake. - c.lock.RUnlock() - meteredPeerFeed.Send(MeteredPeerEvent{ - Type: PeerHandshakeFailed, - IP: c.ip, - Elapsed: time.Since(c.connected), - }) - activePeerCounter.Dec(1) - return err - } - id := c.id - if !c.trafficMetered { - // If the peer isn't registered in the traffic registries. - c.lock.RUnlock() - meteredPeerFeed.Send(MeteredPeerEvent{ - Type: PeerDisconnected, - IP: c.ip, - ID: id, - }) - activePeerCounter.Dec(1) - return err + if err == nil { + activePeerGauge.Dec(1) } - ingress, egress := uint64(c.ingressMeter.Count()), uint64(c.egressMeter.Count()) - c.lock.RUnlock() - - // Decrement the metered peer count - atomic.AddInt32(&meteredPeerCount, -1) - - // Unregister the peer from the traffic registries - key := fmt.Sprintf("%s/%s", c.ip, id) - PeerIngressRegistry.Unregister(key) - PeerEgressRegistry.Unregister(key) - - meteredPeerFeed.Send(MeteredPeerEvent{ - Type: PeerDisconnected, - IP: c.ip, - ID: id, - Ingress: ingress, - Egress: egress, - }) - activePeerCounter.Dec(1) return err } diff --git a/p2p/msgrate/msgrate.go b/p2p/msgrate/msgrate.go new file mode 100644 index 00000000..d4e0eb8b --- /dev/null +++ b/p2p/msgrate/msgrate.go @@ -0,0 +1,466 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package msgrate allows estimating the throughput of peers for more balanced syncs. +package msgrate + +import ( + "errors" + "math" + "sort" + "sync" + "time" + + "github.com/ethereum/go-ethereum/log" +) + +// measurementImpact is the impact a single measurement has on a peer's final +// capacity value. A value closer to 0 reacts slower to sudden network changes, +// but it is also more stable against temporary hiccups. 0.1 worked well for +// most of Ethereum's existence, so might as well go with it. +const measurementImpact = 0.1 + +// capacityOverestimation is the ratio of items to over-estimate when retrieving +// a peer's capacity to avoid locking into a lower value due to never attempting +// to fetch more than some local stable value. +const capacityOverestimation = 1.01 + +// qosTuningPeers is the number of best peers to tune round trip times based on. +// An Ethereum node doesn't need hundreds of connections to operate correctly, +// so instead of lowering our download speed to the median of potentially many +// bad nodes, we can target a smaller set of vey good nodes. At worse this will +// result in less nodes to sync from, but that's still better than some hogging +// the pipeline. +const qosTuningPeers = 5 + +// rttMinEstimate is the minimal round trip time to target requests for. Since +// every request entails a 2 way latency + bandwidth + serving database lookups, +// it should be generous enough to permit meaningful work to be done on top of +// the transmission costs. +const rttMinEstimate = 2 * time.Second + +// rttMaxEstimate is the maximal round trip time to target requests for. Although +// the expectation is that a well connected node will never reach this, certain +// special connectivity ones might experience significant delays (e.g. satellite +// uplink with 3s RTT). This value should be low enough to forbid stalling the +// pipeline too long, but large enough to cover the worst of the worst links. +const rttMaxEstimate = 20 * time.Second + +// rttPushdownFactor is a multiplier to attempt forcing quicker requests than +// what the message rate tracker estimates. The reason is that message rate +// tracking adapts queries to the RTT, but multiple RTT values can be perfectly +// valid, they just result in higher packet sizes. Since smaller packets almost +// always result in stabler download streams, this factor hones in on the lowest +// RTT from all the functional ones. +const rttPushdownFactor = 0.9 + +// rttMinConfidence is the minimum value the roundtrip confidence factor may drop +// to. Since the target timeouts are based on how confident the tracker is in the +// true roundtrip, it's important to not allow too huge fluctuations. +const rttMinConfidence = 0.1 + +// ttlScaling is the multiplier that converts the estimated roundtrip time to a +// timeout cap for network requests. The expectation is that peers' response time +// will fluctuate around the estimated roundtrip, but depending in their load at +// request time, it might be higher than anticipated. This scaling factor ensures +// that we allow remote connections some slack but at the same time do enforce a +// behavior similar to our median peers. +const ttlScaling = 3 + +// ttlLimit is the maximum timeout allowance to prevent reaching crazy numbers +// if some unforeseen network events shappen. As much as we try to hone in on +// the most optimal values, it doesn't make any sense to go above a threshold, +// even if everything is slow and screwy. +const ttlLimit = time.Minute + +// tuningConfidenceCap is the number of active peers above which to stop detuning +// the confidence number. The idea here is that once we hone in on the capacity +// of a meaningful number of peers, adding one more should ot have a significant +// impact on things, so just ron with the originals. +const tuningConfidenceCap = 10 + +// tuningImpact is the influence that a new tuning target has on the previously +// cached value. This number is mostly just an out-of-the-blue heuristic that +// prevents the estimates from jumping around. There's no particular reason for +// the current value. +const tuningImpact = 0.25 + +// Tracker estimates the throughput capacity of a peer with regard to each data +// type it can deliver. The goal is to dynamically adjust request sizes to max +// out network throughput without overloading either the peer or th elocal node. +// +// By tracking in real time the latencies and bandiwdths peers exhibit for each +// packet type, it's possible to prevent overloading by detecting a slowdown on +// one type when another type is pushed too hard. +// +// Similarly, real time measurements also help avoid overloading the local net +// connection if our peers would otherwise be capable to deliver more, but the +// local link is saturated. In that case, the live measurements will force us +// to reduce request sizes until the throughput gets stable. +// +// Lastly, message rate measurements allows us to detect if a peer is unusually +// slow compared to other peers, in which case we can decide to keep it around +// or free up the slot so someone closer. +// +// Since throughput tracking and estimation adapts dynamically to live network +// conditions, it's fine to have multiple trackers locally track the same peer +// in different subsystem. The throughput will simply be distributed across the +// two trackers if both are highly active. +type Tracker struct { + // capacity is the number of items retrievable per second of a given type. + // It is analogous to bandwidth, but we deliberately avoided using bytes + // as the unit, since serving nodes also spend a lot of time loading data + // from disk, which is linear in the number of items, but mostly constant + // in their sizes. + // + // Callers of course are free to use the item counter as a byte counter if + // or when their protocol of choice if capped by bytes instead of items. + // (eg. eth.getHeaders vs snap.getAccountRange). + capacity map[uint64]float64 + + // roundtrip is the latency a peer in general responds to data requests. + // This number is not used inside the tracker, but is exposed to compare + // peers to each other and filter out slow ones. Note however, it only + // makes sense to compare RTTs if the caller caters request sizes for + // each peer to target the same RTT. There's no need to make this number + // the real networking RTT, we just need a number to compare peers with. + roundtrip time.Duration + + lock sync.RWMutex +} + +// NewTracker creates a new message rate tracker for a specific peer. An initial +// RTT is needed to avoid a peer getting marked as an outlier compared to others +// right after joining. It's suggested to use the median rtt across all peers to +// init a new peer tracker. +func NewTracker(caps map[uint64]float64, rtt time.Duration) *Tracker { + if caps == nil { + caps = make(map[uint64]float64) + } + return &Tracker{ + capacity: caps, + roundtrip: rtt, + } +} + +// Capacity calculates the number of items the peer is estimated to be able to +// retrieve within the allotted time slot. The method will round up any division +// errors and will add an additional overestimation ratio on top. The reason for +// overshooting the capacity is because certain message types might not increase +// the load proportionally to the requested items, so fetching a bit more might +// still take the same RTT. By forcefully overshooting by a small amount, we can +// avoid locking into a lower-that-real capacity. +func (t *Tracker) Capacity(kind uint64, targetRTT time.Duration) int { + t.lock.RLock() + defer t.lock.RUnlock() + + // Calculate the actual measured throughput + throughput := t.capacity[kind] * float64(targetRTT) / float64(time.Second) + + // Return an overestimation to force the peer out of a stuck minima, adding + // +1 in case the item count is too low for the overestimator to dent + return roundCapacity(1 + capacityOverestimation*throughput) +} + +// roundCapacity gives the integer value of a capacity. +// The result fits int32, and is guaranteed to be positive. +func roundCapacity(cap float64) int { + const maxInt32 = float64(1<<31 - 1) + return int(math.Min(maxInt32, math.Max(1, math.Ceil(cap)))) +} + +// Update modifies the peer's capacity values for a specific data type with a new +// measurement. If the delivery is zero, the peer is assumed to have either timed +// out or to not have the requested data, resulting in a slash to 0 capacity. This +// avoids assigning the peer retrievals that it won't be able to honour. +func (t *Tracker) Update(kind uint64, elapsed time.Duration, items int) { + t.lock.Lock() + defer t.lock.Unlock() + + // If nothing was delivered (timeout / unavailable data), reduce throughput + // to minimum + if items == 0 { + t.capacity[kind] = 0 + return + } + // Otherwise update the throughput with a new measurement + if elapsed <= 0 { + elapsed = 1 // +1 (ns) to ensure non-zero divisor + } + measured := float64(items) / (float64(elapsed) / float64(time.Second)) + + t.capacity[kind] = (1-measurementImpact)*(t.capacity[kind]) + measurementImpact*measured + t.roundtrip = time.Duration((1-measurementImpact)*float64(t.roundtrip) + measurementImpact*float64(elapsed)) +} + +// Trackers is a set of message rate trackers across a number of peers with the +// goal of aggregating certain measurements across the entire set for outlier +// filtering and newly joining initialization. +type Trackers struct { + trackers map[string]*Tracker + + // roundtrip is the current best guess as to what is a stable round trip time + // across the entire collection of connected peers. This is derived from the + // various trackers added, but is used as a cache to avoid recomputing on each + // network request. The value is updated once every RTT to avoid fluctuations + // caused by hiccups or peer events. + roundtrip time.Duration + + // confidence represents the probability that the estimated roundtrip value + // is the real one across all our peers. The confidence value is used as an + // impact factor of new measurements on old estimates. As our connectivity + // stabilizes, this value gravitates towards 1, new measurements havinng + // almost no impact. If there's a large peer churn and few peers, then new + // measurements will impact it more. The confidence is increased with every + // packet and dropped with every new connection. + confidence float64 + + // tuned is the time instance the tracker recalculated its cached roundtrip + // value and confidence values. A cleaner way would be to have a heartbeat + // goroutine do it regularly, but that requires a lot of maintenance to just + // run every now and again. + tuned time.Time + + // The fields below can be used to override certain default values. Their + // purpose is to allow quicker tests. Don't use them in production. + OverrideTTLLimit time.Duration + + log log.Logger + lock sync.RWMutex +} + +// NewTrackers creates an empty set of trackers to be filled with peers. +func NewTrackers(log log.Logger) *Trackers { + return &Trackers{ + trackers: make(map[string]*Tracker), + roundtrip: rttMaxEstimate, + confidence: 1, + tuned: time.Now(), + OverrideTTLLimit: ttlLimit, + log: log, + } +} + +// Track inserts a new tracker into the set. +func (t *Trackers) Track(id string, tracker *Tracker) error { + t.lock.Lock() + defer t.lock.Unlock() + + if _, ok := t.trackers[id]; ok { + return errors.New("already tracking") + } + t.trackers[id] = tracker + t.detune() + + return nil +} + +// Untrack stops tracking a previously added peer. +func (t *Trackers) Untrack(id string) error { + t.lock.Lock() + defer t.lock.Unlock() + + if _, ok := t.trackers[id]; !ok { + return errors.New("not tracking") + } + delete(t.trackers, id) + return nil +} + +// MedianRoundTrip returns the median RTT across all known trackers. The purpose +// of the median RTT is to initialize a new peer with sane statistics that it will +// hopefully outperform. If it seriously underperforms, there's a risk of dropping +// the peer, but that is ok as we're aiming for a strong median. +func (t *Trackers) MedianRoundTrip() time.Duration { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.medianRoundTrip() +} + +// medianRoundTrip is the internal lockless version of MedianRoundTrip to be used +// by the QoS tuner. +func (t *Trackers) medianRoundTrip() time.Duration { + // Gather all the currently measured round trip times + rtts := make([]float64, 0, len(t.trackers)) + for _, tt := range t.trackers { + tt.lock.RLock() + rtts = append(rtts, float64(tt.roundtrip)) + tt.lock.RUnlock() + } + sort.Float64s(rtts) + + median := rttMaxEstimate + if qosTuningPeers <= len(rtts) { + median = time.Duration(rtts[qosTuningPeers/2]) // Median of our best few peers + } else if len(rtts) > 0 { + median = time.Duration(rtts[len(rtts)/2]) // Median of all out connected peers + } + // Restrict the RTT into some QoS defaults, irrelevant of true RTT + if median < rttMinEstimate { + median = rttMinEstimate + } + if median > rttMaxEstimate { + median = rttMaxEstimate + } + return median +} + +// MeanCapacities returns the capacities averaged across all the added trackers. +// The purpos of the mean capacities are to initialize a new peer with some sane +// starting values that it will hopefully outperform. If the mean overshoots, the +// peer will be cut back to minimal capacity and given another chance. +func (t *Trackers) MeanCapacities() map[uint64]float64 { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.meanCapacities() +} + +// meanCapacities is the internal lockless version of MeanCapacities used for +// debug logging. +func (t *Trackers) meanCapacities() map[uint64]float64 { + capacities := make(map[uint64]float64) + for _, tt := range t.trackers { + tt.lock.RLock() + for key, val := range tt.capacity { + capacities[key] += val + } + tt.lock.RUnlock() + } + for key, val := range capacities { + capacities[key] = val / float64(len(t.trackers)) + } + return capacities +} + +// TargetRoundTrip returns the current target round trip time for a request to +// complete in.The returned RTT is slightly under the estimated RTT. The reason +// is that message rate estimation is a 2 dimensional problem which is solvable +// for any RTT. The goal is to gravitate towards smaller RTTs instead of large +// messages, to result in a stabler download stream. +func (t *Trackers) TargetRoundTrip() time.Duration { + // Recalculate the internal caches if it's been a while + t.tune() + + // Caches surely recent, return target roundtrip + t.lock.RLock() + defer t.lock.RUnlock() + + return time.Duration(float64(t.roundtrip) * rttPushdownFactor) +} + +// TargetTimeout returns the timeout allowance for a single request to finish +// under. The timeout is proportional to the roundtrip, but also takes into +// consideration the tracker's confidence in said roundtrip and scales it +// accordingly. The final value is capped to avoid runaway requests. +func (t *Trackers) TargetTimeout() time.Duration { + // Recalculate the internal caches if it's been a while + t.tune() + + // Caches surely recent, return target timeout + t.lock.RLock() + defer t.lock.RUnlock() + + return t.targetTimeout() +} + +// targetTimeout is the internal lockless version of TargetTimeout to be used +// during QoS tuning. +func (t *Trackers) targetTimeout() time.Duration { + timeout := time.Duration(ttlScaling * float64(t.roundtrip) / t.confidence) + if timeout > t.OverrideTTLLimit { + timeout = t.OverrideTTLLimit + } + return timeout +} + +// tune gathers the individual tracker statistics and updates the estimated +// request round trip time. +func (t *Trackers) tune() { + // Tune may be called concurrently all over the place, but we only want to + // periodically update and even then only once. First check if it was updated + // recently and abort if so. + t.lock.RLock() + dirty := time.Since(t.tuned) > t.roundtrip + t.lock.RUnlock() + if !dirty { + return + } + // If an update is needed, obtain a write lock but make sure we don't update + // it on all concurrent threads one by one. + t.lock.Lock() + defer t.lock.Unlock() + + if dirty := time.Since(t.tuned) > t.roundtrip; !dirty { + return // A concurrent request beat us to the tuning + } + // First thread reaching the tuning point, update the estimates and return + t.roundtrip = time.Duration((1-tuningImpact)*float64(t.roundtrip) + tuningImpact*float64(t.medianRoundTrip())) + t.confidence = t.confidence + (1-t.confidence)/2 + + t.tuned = time.Now() + t.log.Debug("Recalculated msgrate QoS values", "rtt", t.roundtrip, "confidence", t.confidence, "ttl", t.targetTimeout(), "next", t.tuned.Add(t.roundtrip)) + t.log.Trace("Debug dump of mean capacities", "caps", log.Lazy{Fn: t.meanCapacities}) +} + +// detune reduces the tracker's confidence in order to make fresh measurements +// have a larger impact on the estimates. It is meant to be used during new peer +// connections so they can have a proper impact on the estimates. +func (t *Trackers) detune() { + // If we have a single peer, confidence is always 1 + if len(t.trackers) == 1 { + t.confidence = 1 + return + } + // If we have a ton of peers, don't drop the confidence since there's enough + // remaining to retain the same throughput + if len(t.trackers) >= tuningConfidenceCap { + return + } + // Otherwise drop the confidence factor + peers := float64(len(t.trackers)) + + t.confidence = t.confidence * (peers - 1) / peers + if t.confidence < rttMinConfidence { + t.confidence = rttMinConfidence + } + t.log.Debug("Relaxed msgrate QoS values", "rtt", t.roundtrip, "confidence", t.confidence, "ttl", t.targetTimeout()) +} + +// Capacity is a helper function to access a specific tracker without having to +// track it explicitly outside. +func (t *Trackers) Capacity(id string, kind uint64, targetRTT time.Duration) int { + t.lock.RLock() + defer t.lock.RUnlock() + + tracker := t.trackers[id] + if tracker == nil { + return 1 // Unregister race, don't return 0, it's a dangerous number + } + return tracker.Capacity(kind, targetRTT) +} + +// Update is a helper function to access a specific tracker without having to +// track it explicitly outside. +func (t *Trackers) Update(id string, kind uint64, elapsed time.Duration, items int) { + t.lock.RLock() + defer t.lock.RUnlock() + + if tracker := t.trackers[id]; tracker != nil { + tracker.Update(kind, elapsed, items) + } +} diff --git a/p2p/msgrate/msgrate_test.go b/p2p/msgrate/msgrate_test.go new file mode 100644 index 00000000..a5c8dd05 --- /dev/null +++ b/p2p/msgrate/msgrate_test.go @@ -0,0 +1,28 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package msgrate + +import "testing" + +func TestCapacityOverflow(t *testing.T) { + tracker := NewTracker(nil, 1) + tracker.Update(1, 1, 100000) + cap := tracker.Capacity(1, 10000000) + if int32(cap) < 0 { + t.Fatalf("Negative: %v", int32(cap)) + } +} diff --git a/p2p/nat/nat.go b/p2p/nat/nat.go index b3550dd9..9d5519b9 100644 --- a/p2p/nat/nat.go +++ b/p2p/nat/nat.go @@ -25,8 +25,8 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/jackpal/go-nat-pmp" + "github.com/ethereum/go-ethereum/log" + natpmp "github.com/jackpal/go-nat-pmp" ) // An implementation of nat.Interface can map local ports to ports @@ -91,15 +91,14 @@ func Parse(spec string) (Interface, error) { } const ( - mapTimeout = 20 * time.Minute - mapUpdateInterval = 15 * time.Minute + mapTimeout = 10 * time.Minute ) // Map adds a port mapping on m and keeps it alive until c is closed. // This function is typically invoked in its own goroutine. -func Map(m Interface, c chan struct{}, protocol string, extport, intport int, name string) { +func Map(m Interface, c <-chan struct{}, protocol string, extport, intport int, name string) { log := log.New("proto", protocol, "extport", extport, "intport", intport, "interface", m) - refresh := time.NewTimer(mapUpdateInterval) + refresh := time.NewTimer(mapTimeout) defer func() { refresh.Stop() log.Debug("Deleting port mapping") @@ -121,7 +120,7 @@ func Map(m Interface, c chan struct{}, protocol string, extport, intport int, na if err := m.AddMapping(protocol, extport, intport, name, mapTimeout); err != nil { log.Debug("Couldn't add port mapping", "err", err) } - refresh.Reset(mapUpdateInterval) + refresh.Reset(mapTimeout) } } } @@ -220,9 +219,8 @@ func (n *autodisc) String() string { defer n.mu.Unlock() if n.found == nil { return n.what - } else { - return n.found.String() } + return n.found.String() } // wait blocks until auto-discovery has been performed. diff --git a/p2p/nat/natpmp.go b/p2p/nat/natpmp.go index 8ba97147..7f85543f 100644 --- a/p2p/nat/natpmp.go +++ b/p2p/nat/natpmp.go @@ -22,7 +22,7 @@ import ( "strings" "time" - "github.com/jackpal/go-nat-pmp" + natpmp "github.com/jackpal/go-nat-pmp" ) // natPMPClient adapts the NAT-PMP protocol implementation so it conforms to diff --git a/p2p/nat/natupnp.go b/p2p/nat/natupnp.go index 029143b7..a8de00e9 100644 --- a/p2p/nat/natupnp.go +++ b/p2p/nat/natupnp.go @@ -21,6 +21,7 @@ import ( "fmt" "net" "strings" + "sync" "time" "github.com/huin/goupnp" @@ -28,12 +29,17 @@ import ( "github.com/huin/goupnp/dcps/internetgateway2" ) -const soapRequestTimeout = 3 * time.Second +const ( + soapRequestTimeout = 3 * time.Second + rateLimit = 200 * time.Millisecond +) type upnp struct { - dev *goupnp.RootDevice - service string - client upnpClient + dev *goupnp.RootDevice + service string + client upnpClient + mu sync.Mutex + lastReqTime time.Time } type upnpClient interface { @@ -43,8 +49,23 @@ type upnpClient interface { GetNATRSIPStatus() (sip bool, nat bool, err error) } +func (n *upnp) natEnabled() bool { + var ok bool + var err error + n.withRateLimit(func() error { + _, ok, err = n.client.GetNATRSIPStatus() + return err + }) + return err == nil && ok +} + func (n *upnp) ExternalIP() (addr net.IP, err error) { - ipString, err := n.client.GetExternalIPAddress() + var ipString string + n.withRateLimit(func() error { + ipString, err = n.client.GetExternalIPAddress() + return err + }) + if err != nil { return nil, err } @@ -58,12 +79,15 @@ func (n *upnp) ExternalIP() (addr net.IP, err error) { func (n *upnp) AddMapping(protocol string, extport, intport int, desc string, lifetime time.Duration) error { ip, err := n.internalAddress() if err != nil { - return nil + return nil // TODO: Shouldn't we return the error? } protocol = strings.ToUpper(protocol) lifetimeS := uint32(lifetime / time.Second) n.DeleteMapping(protocol, extport, intport) - return n.client.AddPortMapping("", uint16(extport), protocol, uint16(intport), ip.String(), true, desc, lifetimeS) + + return n.withRateLimit(func() error { + return n.client.AddPortMapping("", uint16(extport), protocol, uint16(intport), ip.String(), true, desc, lifetimeS) + }) } func (n *upnp) internalAddress() (net.IP, error) { @@ -90,36 +114,51 @@ func (n *upnp) internalAddress() (net.IP, error) { } func (n *upnp) DeleteMapping(protocol string, extport, intport int) error { - return n.client.DeletePortMapping("", uint16(extport), strings.ToUpper(protocol)) + return n.withRateLimit(func() error { + return n.client.DeletePortMapping("", uint16(extport), strings.ToUpper(protocol)) + }) } func (n *upnp) String() string { return "UPNP " + n.service } +func (n *upnp) withRateLimit(fn func() error) error { + n.mu.Lock() + defer n.mu.Unlock() + + lastreq := time.Since(n.lastReqTime) + if lastreq < rateLimit { + time.Sleep(rateLimit - lastreq) + } + err := fn() + n.lastReqTime = time.Now() + return err +} + // discoverUPnP searches for Internet Gateway Devices // and returns the first one it can find on the local network. func discoverUPnP() Interface { found := make(chan *upnp, 2) // IGDv1 - go discover(found, internetgateway1.URN_WANConnectionDevice_1, func(dev *goupnp.RootDevice, sc goupnp.ServiceClient) *upnp { + go discover(found, internetgateway1.URN_WANConnectionDevice_1, func(sc goupnp.ServiceClient) *upnp { switch sc.Service.ServiceType { case internetgateway1.URN_WANIPConnection_1: - return &upnp{dev, "IGDv1-IP1", &internetgateway1.WANIPConnection1{ServiceClient: sc}} + return &upnp{service: "IGDv1-IP1", client: &internetgateway1.WANIPConnection1{ServiceClient: sc}} case internetgateway1.URN_WANPPPConnection_1: - return &upnp{dev, "IGDv1-PPP1", &internetgateway1.WANPPPConnection1{ServiceClient: sc}} + return &upnp{service: "IGDv1-PPP1", client: &internetgateway1.WANPPPConnection1{ServiceClient: sc}} } return nil }) // IGDv2 - go discover(found, internetgateway2.URN_WANConnectionDevice_2, func(dev *goupnp.RootDevice, sc goupnp.ServiceClient) *upnp { + go discover(found, internetgateway2.URN_WANConnectionDevice_2, func(sc goupnp.ServiceClient) *upnp { switch sc.Service.ServiceType { case internetgateway2.URN_WANIPConnection_1: - return &upnp{dev, "IGDv2-IP1", &internetgateway2.WANIPConnection1{ServiceClient: sc}} + return &upnp{service: "IGDv2-IP1", client: &internetgateway2.WANIPConnection1{ServiceClient: sc}} case internetgateway2.URN_WANIPConnection_2: - return &upnp{dev, "IGDv2-IP2", &internetgateway2.WANIPConnection2{ServiceClient: sc}} + return &upnp{service: "IGDv2-IP2", client: &internetgateway2.WANIPConnection2{ServiceClient: sc}} case internetgateway2.URN_WANPPPConnection_1: - return &upnp{dev, "IGDv2-PPP1", &internetgateway2.WANPPPConnection1{ServiceClient: sc}} + return &upnp{service: "IGDv2-PPP1", client: &internetgateway2.WANPPPConnection1{ServiceClient: sc}} } return nil }) @@ -134,7 +173,7 @@ func discoverUPnP() Interface { // finds devices matching the given target and calls matcher for all // advertised services of each device. The first non-nil service found // is sent into out. If no service matched, nil is sent. -func discover(out chan<- *upnp, target string, matcher func(*goupnp.RootDevice, goupnp.ServiceClient) *upnp) { +func discover(out chan<- *upnp, target string, matcher func(goupnp.ServiceClient) *upnp) { devs, err := goupnp.DiscoverDevices(target) if err != nil { out <- nil @@ -157,16 +196,17 @@ func discover(out chan<- *upnp, target string, matcher func(*goupnp.RootDevice, Service: service, } sc.SOAPClient.HTTPClient.Timeout = soapRequestTimeout - upnp := matcher(devs[i].Root, sc) + upnp := matcher(sc) if upnp == nil { return } + upnp.dev = devs[i].Root + // check whether port mapping is enabled - if _, nat, err := upnp.client.GetNATRSIPStatus(); err != nil || !nat { - return + if upnp.natEnabled() { + out <- upnp + found = true } - out <- upnp - found = true }) } if !found { diff --git a/p2p/nat/natupnp_test.go b/p2p/nat/natupnp_test.go index 79f6d25a..9072451d 100644 --- a/p2p/nat/natupnp_test.go +++ b/p2p/nat/natupnp_test.go @@ -21,6 +21,7 @@ import ( "io" "net" "net/http" + "os" "runtime" "strings" "testing" @@ -162,7 +163,11 @@ func TestUPNP_DDWRT(t *testing.T) { // Attempt to discover the fake device. discovered := discoverUPnP() if discovered == nil { - t.Fatalf("not discovered") + if os.Getenv("CI") != "" { + t.Fatalf("not discovered") + } else { + t.Skipf("UPnP not discovered (known issue, see https://github.com/ethereum/go-ethereum/issues/21476)") + } } upnp, _ := discovered.(*upnp) if upnp.service != "IGDv1-IP1" { @@ -218,7 +223,7 @@ func (dev *fakeIGD) ServeHTTP(w http.ResponseWriter, r *http.Request) { } func (dev *fakeIGD) replaceListenAddr(resp string) string { - return strings.Replace(resp, "{{listenAddr}}", dev.listener.Addr().String(), -1) + return strings.ReplaceAll(resp, "{{listenAddr}}", dev.listener.Addr().String()) } func (dev *fakeIGD) listen() (err error) { diff --git a/p2p/netutil/error.go b/p2p/netutil/error.go index cb21b9cd..5d3d9bfd 100644 --- a/p2p/netutil/error.go +++ b/p2p/netutil/error.go @@ -23,3 +23,11 @@ func IsTemporaryError(err error) bool { }) return ok && tempErr.Temporary() || isPacketTooBig(err) } + +// IsTimeout checks whether the given error is a timeout. +func IsTimeout(err error) bool { + timeoutErr, ok := err.(interface { + Timeout() bool + }) + return ok && timeoutErr.Timeout() +} diff --git a/p2p/netutil/error_test.go b/p2p/netutil/error_test.go index 645e48f8..84d5c2c2 100644 --- a/p2p/netutil/error_test.go +++ b/p2p/netutil/error_test.go @@ -66,7 +66,6 @@ func TestIsPacketTooBig(t *testing.T) { for i := range buf { if buf[i] != byte(i) { t.Fatalf("error in pattern") - break } } } diff --git a/p2p/netutil/iptrack.go b/p2p/netutil/iptrack.go index e195ed99..b9cbd5e1 100644 --- a/p2p/netutil/iptrack.go +++ b/p2p/netutil/iptrack.go @@ -19,7 +19,7 @@ package netutil import ( "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) // IPTracker predicts the external endpoint, i.e. IP address and port, of the local host diff --git a/p2p/netutil/iptrack_test.go b/p2p/netutil/iptrack_test.go index baff5593..a9a2998a 100644 --- a/p2p/netutil/iptrack_test.go +++ b/p2p/netutil/iptrack_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" + "github.com/ethereum/go-ethereum/common/mclock" ) const ( diff --git a/p2p/netutil/net.go b/p2p/netutil/net.go index 656abb68..d5da3c69 100644 --- a/p2p/netutil/net.go +++ b/p2p/netutil/net.go @@ -212,7 +212,7 @@ func sameNet(bits uint, ip, other net.IP) bool { if mask != 0 && nb < len(ip) && ip[nb]&mask != other[nb]&mask { return false } - return nb <= len(ip) && bytes.Equal(ip[:nb], other[:nb]) + return nb <= len(ip) && ip[:nb].Equal(other[:nb]) } // DistinctNetSet tracks IPs, ensuring that at most N of them diff --git a/p2p/netutil/toobig_notwindows.go b/p2p/netutil/toobig_notwindows.go index 47b64385..f9f936ae 100644 --- a/p2p/netutil/toobig_notwindows.go +++ b/p2p/netutil/toobig_notwindows.go @@ -14,7 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//+build !windows +//go:build !windows +// +build !windows package netutil diff --git a/p2p/netutil/toobig_windows.go b/p2p/netutil/toobig_windows.go index dfbb6d44..652903e8 100644 --- a/p2p/netutil/toobig_windows.go +++ b/p2p/netutil/toobig_windows.go @@ -14,7 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//+build windows +//go:build windows +// +build windows package netutil diff --git a/p2p/nodestate/nodestate.go b/p2p/nodestate/nodestate.go new file mode 100644 index 00000000..2af0d0a6 --- /dev/null +++ b/p2p/nodestate/nodestate.go @@ -0,0 +1,1023 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package nodestate + +import ( + "errors" + "reflect" + "sync" + "time" + "unsafe" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb" + "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" +) + +var ( + ErrInvalidField = errors.New("invalid field type") + ErrClosed = errors.New("already closed") +) + +type ( + // NodeStateMachine implements a network node-related event subscription system. + // It can assign binary state flags and fields of arbitrary type to each node and allows + // subscriptions to flag/field changes which can also modify further flags and fields, + // potentially triggering further subscriptions. An operation includes an initial change + // and all resulting subsequent changes and always ends in a consistent global state. + // It is initiated by a "top level" SetState/SetField call that blocks (also blocking other + // top-level functions) until the operation is finished. Callbacks making further changes + // should use the non-blocking SetStateSub/SetFieldSub functions. The tree of events + // resulting from the initial changes is traversed in a breadth-first order, ensuring for + // each subscription callback that all other callbacks caused by the same change triggering + // the current callback are processed before anything is triggered by the changes made in the + // current callback. In practice this logic ensures that all subscriptions "see" events in + // the logical order, callbacks are never called concurrently and "back and forth" effects + // are also possible. The state machine design should ensure that infinite event cycles + // cannot happen. + // The caller can also add timeouts assigned to a certain node and a subset of state flags. + // If the timeout elapses, the flags are reset. If all relevant flags are reset then the timer + // is dropped. State flags with no timeout are persisted in the database if the flag + // descriptor enables saving. If a node has no state flags set at any moment then it is discarded. + // Note: in order to avoid mutex deadlocks the callbacks should never lock a mutex that + // might be locked when the top level SetState/SetField functions are called. If a function + // potentially performs state/field changes then it is recommended to mention this fact in the + // function description, along with whether it should run inside an operation callback. + NodeStateMachine struct { + started, closed bool + lock sync.Mutex + clock mclock.Clock + db ethdb.KeyValueStore + dbNodeKey []byte + nodes map[enode.ID]*nodeInfo + offlineCallbackList []offlineCallback + opFlag bool // an operation has started + opWait *sync.Cond // signaled when the operation ends + opPending []func() // pending callback list of the current operation + + // Registered state flags or fields. Modifications are allowed + // only when the node state machine has not been started. + setup *Setup + fields []*fieldInfo + saveFlags bitMask + + // Installed callbacks. Modifications are allowed only when the + // node state machine has not been started. + stateSubs []stateSub + + // Testing hooks, only for testing purposes. + saveNodeHook func(*nodeInfo) + } + + // Flags represents a set of flags from a certain setup + Flags struct { + mask bitMask + setup *Setup + } + + // Field represents a field from a certain setup + Field struct { + index int + setup *Setup + } + + // flagDefinition describes a node state flag. Each registered instance is automatically + // mapped to a bit of the 64 bit node states. + // If persistent is true then the node is saved when state machine is shutdown. + flagDefinition struct { + name string + persistent bool + } + + // fieldDefinition describes an optional node field of the given type. The contents + // of the field are only retained for each node as long as at least one of the + // state flags is set. + fieldDefinition struct { + name string + ftype reflect.Type + encode func(interface{}) ([]byte, error) + decode func([]byte) (interface{}, error) + } + + // stateSetup contains the list of flags and fields used by the application + Setup struct { + Version uint + flags []flagDefinition + fields []fieldDefinition + } + + // bitMask describes a node state or state mask. It represents a subset + // of node flags with each bit assigned to a flag index (LSB represents flag 0). + bitMask uint64 + + // StateCallback is a subscription callback which is called when one of the + // state flags that is included in the subscription state mask is changed. + // Note: oldState and newState are also masked with the subscription mask so only + // the relevant bits are included. + StateCallback func(n *enode.Node, oldState, newState Flags) + + // FieldCallback is a subscription callback which is called when the value of + // a specific field is changed. + FieldCallback func(n *enode.Node, state Flags, oldValue, newValue interface{}) + + // nodeInfo contains node state, fields and state timeouts + nodeInfo struct { + node *enode.Node + state bitMask + timeouts []*nodeStateTimeout + fields []interface{} + fieldCount int + db, dirty bool + } + + nodeInfoEnc struct { + Enr enr.Record + Version uint + State bitMask + Fields [][]byte + } + + stateSub struct { + mask bitMask + callback StateCallback + } + + nodeStateTimeout struct { + mask bitMask + timer mclock.Timer + } + + fieldInfo struct { + fieldDefinition + subs []FieldCallback + } + + offlineCallback struct { + node *nodeInfo + state bitMask + fields []interface{} + } +) + +// offlineState is a special state that is assumed to be set before a node is loaded from +// the database and after it is shut down. +const offlineState = bitMask(1) + +// NewFlag creates a new node state flag +func (s *Setup) NewFlag(name string) Flags { + if s.flags == nil { + s.flags = []flagDefinition{{name: "offline"}} + } + f := Flags{mask: bitMask(1) << uint(len(s.flags)), setup: s} + s.flags = append(s.flags, flagDefinition{name: name}) + return f +} + +// NewPersistentFlag creates a new persistent node state flag +func (s *Setup) NewPersistentFlag(name string) Flags { + if s.flags == nil { + s.flags = []flagDefinition{{name: "offline"}} + } + f := Flags{mask: bitMask(1) << uint(len(s.flags)), setup: s} + s.flags = append(s.flags, flagDefinition{name: name, persistent: true}) + return f +} + +// OfflineFlag returns the system-defined offline flag belonging to the given setup +func (s *Setup) OfflineFlag() Flags { + return Flags{mask: offlineState, setup: s} +} + +// NewField creates a new node state field +func (s *Setup) NewField(name string, ftype reflect.Type) Field { + f := Field{index: len(s.fields), setup: s} + s.fields = append(s.fields, fieldDefinition{ + name: name, + ftype: ftype, + }) + return f +} + +// NewPersistentField creates a new persistent node field +func (s *Setup) NewPersistentField(name string, ftype reflect.Type, encode func(interface{}) ([]byte, error), decode func([]byte) (interface{}, error)) Field { + f := Field{index: len(s.fields), setup: s} + s.fields = append(s.fields, fieldDefinition{ + name: name, + ftype: ftype, + encode: encode, + decode: decode, + }) + return f +} + +// flagOp implements binary flag operations and also checks whether the operands belong to the same setup +func flagOp(a, b Flags, trueIfA, trueIfB, trueIfBoth bool) Flags { + if a.setup == nil { + if a.mask != 0 { + panic("Node state flags have no setup reference") + } + a.setup = b.setup + } + if b.setup == nil { + if b.mask != 0 { + panic("Node state flags have no setup reference") + } + b.setup = a.setup + } + if a.setup != b.setup { + panic("Node state flags belong to a different setup") + } + res := Flags{setup: a.setup} + if trueIfA { + res.mask |= a.mask & ^b.mask + } + if trueIfB { + res.mask |= b.mask & ^a.mask + } + if trueIfBoth { + res.mask |= a.mask & b.mask + } + return res +} + +// And returns the set of flags present in both a and b +func (a Flags) And(b Flags) Flags { return flagOp(a, b, false, false, true) } + +// AndNot returns the set of flags present in a but not in b +func (a Flags) AndNot(b Flags) Flags { return flagOp(a, b, true, false, false) } + +// Or returns the set of flags present in either a or b +func (a Flags) Or(b Flags) Flags { return flagOp(a, b, true, true, true) } + +// Xor returns the set of flags present in either a or b but not both +func (a Flags) Xor(b Flags) Flags { return flagOp(a, b, true, true, false) } + +// HasAll returns true if b is a subset of a +func (a Flags) HasAll(b Flags) bool { return flagOp(a, b, false, true, false).mask == 0 } + +// HasNone returns true if a and b have no shared flags +func (a Flags) HasNone(b Flags) bool { return flagOp(a, b, false, false, true).mask == 0 } + +// Equals returns true if a and b have the same flags set +func (a Flags) Equals(b Flags) bool { return flagOp(a, b, true, true, false).mask == 0 } + +// IsEmpty returns true if a has no flags set +func (a Flags) IsEmpty() bool { return a.mask == 0 } + +// MergeFlags merges multiple sets of state flags +func MergeFlags(list ...Flags) Flags { + if len(list) == 0 { + return Flags{} + } + res := list[0] + for i := 1; i < len(list); i++ { + res = res.Or(list[i]) + } + return res +} + +// String returns a list of the names of the flags specified in the bit mask +func (f Flags) String() string { + if f.mask == 0 { + return "[]" + } + s := "[" + comma := false + for index, flag := range f.setup.flags { + if f.mask&(bitMask(1)< 8*int(unsafe.Sizeof(bitMask(0))) { + panic("Too many node state flags") + } + ns := &NodeStateMachine{ + db: db, + dbNodeKey: dbKey, + clock: clock, + setup: setup, + nodes: make(map[enode.ID]*nodeInfo), + fields: make([]*fieldInfo, len(setup.fields)), + } + ns.opWait = sync.NewCond(&ns.lock) + stateNameMap := make(map[string]int) + for index, flag := range setup.flags { + if _, ok := stateNameMap[flag.name]; ok { + panic("Node state flag name collision: " + flag.name) + } + stateNameMap[flag.name] = index + if flag.persistent { + ns.saveFlags |= bitMask(1) << uint(index) + } + } + fieldNameMap := make(map[string]int) + for index, field := range setup.fields { + if _, ok := fieldNameMap[field.name]; ok { + panic("Node field name collision: " + field.name) + } + ns.fields[index] = &fieldInfo{fieldDefinition: field} + fieldNameMap[field.name] = index + } + return ns +} + +// stateMask checks whether the set of flags belongs to the same setup and returns its internal bit mask +func (ns *NodeStateMachine) stateMask(flags Flags) bitMask { + if flags.setup != ns.setup && flags.mask != 0 { + panic("Node state flags belong to a different setup") + } + return flags.mask +} + +// fieldIndex checks whether the field belongs to the same setup and returns its internal index +func (ns *NodeStateMachine) fieldIndex(field Field) int { + if field.setup != ns.setup { + panic("Node field belongs to a different setup") + } + return field.index +} + +// SubscribeState adds a node state subscription. The callback is called while the state +// machine mutex is not held and it is allowed to make further state updates using the +// non-blocking SetStateSub/SetFieldSub functions. All callbacks of an operation are running +// from the thread/goroutine of the initial caller and parallel operations are not permitted. +// Therefore the callback is never called concurrently. It is the responsibility of the +// implemented state logic to avoid deadlocks and to reach a stable state in a finite amount +// of steps. +// State subscriptions should be installed before loading the node database or making the +// first state update. +func (ns *NodeStateMachine) SubscribeState(flags Flags, callback StateCallback) { + ns.lock.Lock() + defer ns.lock.Unlock() + + if ns.started { + panic("state machine already started") + } + ns.stateSubs = append(ns.stateSubs, stateSub{ns.stateMask(flags), callback}) +} + +// SubscribeField adds a node field subscription. Same rules apply as for SubscribeState. +func (ns *NodeStateMachine) SubscribeField(field Field, callback FieldCallback) { + ns.lock.Lock() + defer ns.lock.Unlock() + + if ns.started { + panic("state machine already started") + } + f := ns.fields[ns.fieldIndex(field)] + f.subs = append(f.subs, callback) +} + +// newNode creates a new nodeInfo +func (ns *NodeStateMachine) newNode(n *enode.Node) *nodeInfo { + return &nodeInfo{node: n, fields: make([]interface{}, len(ns.fields))} +} + +// checkStarted checks whether the state machine has already been started and panics otherwise. +func (ns *NodeStateMachine) checkStarted() { + if !ns.started { + panic("state machine not started yet") + } +} + +// Start starts the state machine, enabling state and field operations and disabling +// further subscriptions. +func (ns *NodeStateMachine) Start() { + ns.lock.Lock() + if ns.started { + panic("state machine already started") + } + ns.started = true + if ns.db != nil { + ns.loadFromDb() + } + + ns.opStart() + ns.offlineCallbacks(true) + ns.opFinish() + ns.lock.Unlock() +} + +// Stop stops the state machine and saves its state if a database was supplied +func (ns *NodeStateMachine) Stop() { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if !ns.opStart() { + panic("already closed") + } + for _, node := range ns.nodes { + fields := make([]interface{}, len(node.fields)) + copy(fields, node.fields) + ns.offlineCallbackList = append(ns.offlineCallbackList, offlineCallback{node, node.state, fields}) + } + if ns.db != nil { + ns.saveToDb() + } + ns.offlineCallbacks(false) + ns.closed = true + ns.opFinish() +} + +// loadFromDb loads persisted node states from the database +func (ns *NodeStateMachine) loadFromDb() { + it := ns.db.NewIterator(ns.dbNodeKey, nil) + for it.Next() { + var id enode.ID + if len(it.Key()) != len(ns.dbNodeKey)+len(id) { + log.Error("Node state db entry with invalid length", "found", len(it.Key()), "expected", len(ns.dbNodeKey)+len(id)) + continue + } + copy(id[:], it.Key()[len(ns.dbNodeKey):]) + ns.decodeNode(id, it.Value()) + } +} + +type dummyIdentity enode.ID + +func (id dummyIdentity) Verify(r *enr.Record, sig []byte) error { return nil } +func (id dummyIdentity) NodeAddr(r *enr.Record) []byte { return id[:] } + +// decodeNode decodes a node database entry and adds it to the node set if successful +func (ns *NodeStateMachine) decodeNode(id enode.ID, data []byte) { + var enc nodeInfoEnc + if err := rlp.DecodeBytes(data, &enc); err != nil { + log.Error("Failed to decode node info", "id", id, "error", err) + return + } + n, _ := enode.New(dummyIdentity(id), &enc.Enr) + node := ns.newNode(n) + node.db = true + + if enc.Version != ns.setup.Version { + log.Debug("Removing stored node with unknown version", "current", ns.setup.Version, "stored", enc.Version) + ns.deleteNode(id) + return + } + if len(enc.Fields) > len(ns.setup.fields) { + log.Error("Invalid node field count", "id", id, "stored", len(enc.Fields)) + return + } + // Resolve persisted node fields + for i, encField := range enc.Fields { + if len(encField) == 0 { + continue + } + if decode := ns.fields[i].decode; decode != nil { + if field, err := decode(encField); err == nil { + node.fields[i] = field + node.fieldCount++ + } else { + log.Error("Failed to decode node field", "id", id, "field name", ns.fields[i].name, "error", err) + return + } + } else { + log.Error("Cannot decode node field", "id", id, "field name", ns.fields[i].name) + return + } + } + // It's a compatible node record, add it to set. + ns.nodes[id] = node + node.state = enc.State + fields := make([]interface{}, len(node.fields)) + copy(fields, node.fields) + ns.offlineCallbackList = append(ns.offlineCallbackList, offlineCallback{node, node.state, fields}) + log.Debug("Loaded node state", "id", id, "state", Flags{mask: enc.State, setup: ns.setup}) +} + +// saveNode saves the given node info to the database +func (ns *NodeStateMachine) saveNode(id enode.ID, node *nodeInfo) error { + if ns.db == nil { + return nil + } + + storedState := node.state & ns.saveFlags + for _, t := range node.timeouts { + storedState &= ^t.mask + } + enc := nodeInfoEnc{ + Enr: *node.node.Record(), + Version: ns.setup.Version, + State: storedState, + Fields: make([][]byte, len(ns.fields)), + } + log.Debug("Saved node state", "id", id, "state", Flags{mask: enc.State, setup: ns.setup}) + lastIndex := -1 + for i, f := range node.fields { + if f == nil { + continue + } + encode := ns.fields[i].encode + if encode == nil { + continue + } + blob, err := encode(f) + if err != nil { + return err + } + enc.Fields[i] = blob + lastIndex = i + } + if storedState == 0 && lastIndex == -1 { + if node.db { + node.db = false + ns.deleteNode(id) + } + node.dirty = false + return nil + } + enc.Fields = enc.Fields[:lastIndex+1] + data, err := rlp.EncodeToBytes(&enc) + if err != nil { + return err + } + if err := ns.db.Put(append(ns.dbNodeKey, id[:]...), data); err != nil { + return err + } + node.dirty, node.db = false, true + + if ns.saveNodeHook != nil { + ns.saveNodeHook(node) + } + return nil +} + +// deleteNode removes a node info from the database +func (ns *NodeStateMachine) deleteNode(id enode.ID) { + ns.db.Delete(append(ns.dbNodeKey, id[:]...)) +} + +// saveToDb saves the persistent flags and fields of all nodes that have been changed +func (ns *NodeStateMachine) saveToDb() { + for id, node := range ns.nodes { + if node.dirty { + err := ns.saveNode(id, node) + if err != nil { + log.Error("Failed to save node", "id", id, "error", err) + } + } + } +} + +// updateEnode updates the enode entry belonging to the given node if it already exists +func (ns *NodeStateMachine) updateEnode(n *enode.Node) (enode.ID, *nodeInfo) { + id := n.ID() + node := ns.nodes[id] + if node != nil && n.Seq() > node.node.Seq() { + node.node = n + node.dirty = true + } + return id, node +} + +// Persist saves the persistent state and fields of the given node immediately +func (ns *NodeStateMachine) Persist(n *enode.Node) error { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if id, node := ns.updateEnode(n); node != nil && node.dirty { + err := ns.saveNode(id, node) + if err != nil { + log.Error("Failed to save node", "id", id, "error", err) + } + return err + } + return nil +} + +// SetState updates the given node state flags and blocks until the operation is finished. +// If a flag with a timeout is set again, the operation removes or replaces the existing timeout. +func (ns *NodeStateMachine) SetState(n *enode.Node, setFlags, resetFlags Flags, timeout time.Duration) error { + ns.lock.Lock() + defer ns.lock.Unlock() + + if !ns.opStart() { + return ErrClosed + } + ns.setState(n, setFlags, resetFlags, timeout) + ns.opFinish() + return nil +} + +// SetStateSub updates the given node state flags without blocking (should be called +// from a subscription/operation callback). +func (ns *NodeStateMachine) SetStateSub(n *enode.Node, setFlags, resetFlags Flags, timeout time.Duration) { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.opCheck() + ns.setState(n, setFlags, resetFlags, timeout) +} + +func (ns *NodeStateMachine) setState(n *enode.Node, setFlags, resetFlags Flags, timeout time.Duration) { + ns.checkStarted() + set, reset := ns.stateMask(setFlags), ns.stateMask(resetFlags) + id, node := ns.updateEnode(n) + if node == nil { + if set == 0 { + return + } + node = ns.newNode(n) + ns.nodes[id] = node + } + oldState := node.state + newState := (node.state & (^reset)) | set + changed := oldState ^ newState + node.state = newState + + // Remove the timeout callbacks for all reset and set flags, + // even they are not existent(it's noop). + ns.removeTimeouts(node, set|reset) + + // Register the timeout callback if required + if timeout != 0 && set != 0 { + ns.addTimeout(n, set, timeout) + } + if newState == oldState { + return + } + if newState == 0 && node.fieldCount == 0 { + delete(ns.nodes, id) + if node.db { + ns.deleteNode(id) + } + } else { + if changed&ns.saveFlags != 0 { + node.dirty = true + } + } + callback := func() { + for _, sub := range ns.stateSubs { + if changed&sub.mask != 0 { + sub.callback(n, Flags{mask: oldState & sub.mask, setup: ns.setup}, Flags{mask: newState & sub.mask, setup: ns.setup}) + } + } + } + ns.opPending = append(ns.opPending, callback) +} + +// opCheck checks whether an operation is active +func (ns *NodeStateMachine) opCheck() { + if !ns.opFlag { + panic("Operation has not started") + } +} + +// opStart waits until other operations are finished and starts a new one +func (ns *NodeStateMachine) opStart() bool { + for ns.opFlag { + ns.opWait.Wait() + } + if ns.closed { + return false + } + ns.opFlag = true + return true +} + +// opFinish finishes the current operation by running all pending callbacks. +// Callbacks resulting from a state/field change performed in a previous callback are always +// put at the end of the pending list and therefore processed after all callbacks resulting +// from the previous state/field change. +func (ns *NodeStateMachine) opFinish() { + for len(ns.opPending) != 0 { + list := ns.opPending + ns.lock.Unlock() + for _, cb := range list { + cb() + } + ns.lock.Lock() + ns.opPending = ns.opPending[len(list):] + } + ns.opPending = nil + ns.opFlag = false + ns.opWait.Broadcast() +} + +// Operation calls the given function as an operation callback. This allows the caller +// to start an operation with multiple initial changes. The same rules apply as for +// subscription callbacks. +func (ns *NodeStateMachine) Operation(fn func()) error { + ns.lock.Lock() + started := ns.opStart() + ns.lock.Unlock() + if !started { + return ErrClosed + } + fn() + ns.lock.Lock() + ns.opFinish() + ns.lock.Unlock() + return nil +} + +// offlineCallbacks calls state update callbacks at startup or shutdown +func (ns *NodeStateMachine) offlineCallbacks(start bool) { + for _, cb := range ns.offlineCallbackList { + cb := cb + callback := func() { + for _, sub := range ns.stateSubs { + offState := offlineState & sub.mask + onState := cb.state & sub.mask + if offState == onState { + continue + } + if start { + sub.callback(cb.node.node, Flags{mask: offState, setup: ns.setup}, Flags{mask: onState, setup: ns.setup}) + } else { + sub.callback(cb.node.node, Flags{mask: onState, setup: ns.setup}, Flags{mask: offState, setup: ns.setup}) + } + } + for i, f := range cb.fields { + if f == nil || ns.fields[i].subs == nil { + continue + } + for _, fsub := range ns.fields[i].subs { + if start { + fsub(cb.node.node, Flags{mask: offlineState, setup: ns.setup}, nil, f) + } else { + fsub(cb.node.node, Flags{mask: offlineState, setup: ns.setup}, f, nil) + } + } + } + } + ns.opPending = append(ns.opPending, callback) + } + ns.offlineCallbackList = nil +} + +// AddTimeout adds a node state timeout associated to the given state flag(s). +// After the specified time interval, the relevant states will be reset. +func (ns *NodeStateMachine) AddTimeout(n *enode.Node, flags Flags, timeout time.Duration) error { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if ns.closed { + return ErrClosed + } + ns.addTimeout(n, ns.stateMask(flags), timeout) + return nil +} + +// addTimeout adds a node state timeout associated to the given state flag(s). +func (ns *NodeStateMachine) addTimeout(n *enode.Node, mask bitMask, timeout time.Duration) { + _, node := ns.updateEnode(n) + if node == nil { + return + } + mask &= node.state + if mask == 0 { + return + } + ns.removeTimeouts(node, mask) + t := &nodeStateTimeout{mask: mask} + t.timer = ns.clock.AfterFunc(timeout, func() { + ns.lock.Lock() + defer ns.lock.Unlock() + + if !ns.opStart() { + return + } + ns.setState(n, Flags{}, Flags{mask: t.mask, setup: ns.setup}, 0) + ns.opFinish() + }) + node.timeouts = append(node.timeouts, t) + if mask&ns.saveFlags != 0 { + node.dirty = true + } +} + +// removeTimeout removes node state timeouts associated to the given state flag(s). +// If a timeout was associated to multiple flags which are not all included in the +// specified remove mask then only the included flags are de-associated and the timer +// stays active. +func (ns *NodeStateMachine) removeTimeouts(node *nodeInfo, mask bitMask) { + for i := 0; i < len(node.timeouts); i++ { + t := node.timeouts[i] + match := t.mask & mask + if match == 0 { + continue + } + t.mask -= match + if t.mask != 0 { + continue + } + t.timer.Stop() + node.timeouts[i] = node.timeouts[len(node.timeouts)-1] + node.timeouts = node.timeouts[:len(node.timeouts)-1] + i-- + if match&ns.saveFlags != 0 { + node.dirty = true + } + } +} + +// GetField retrieves the given field of the given node. Note that when used in a +// subscription callback the result can be out of sync with the state change represented +// by the callback parameters so extra safety checks might be necessary. +func (ns *NodeStateMachine) GetField(n *enode.Node, field Field) interface{} { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if ns.closed { + return nil + } + if _, node := ns.updateEnode(n); node != nil { + return node.fields[ns.fieldIndex(field)] + } + return nil +} + +// GetState retrieves the current state of the given node. Note that when used in a +// subscription callback the result can be out of sync with the state change represented +// by the callback parameters so extra safety checks might be necessary. +func (ns *NodeStateMachine) GetState(n *enode.Node) Flags { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if ns.closed { + return Flags{} + } + if _, node := ns.updateEnode(n); node != nil { + return Flags{mask: node.state, setup: ns.setup} + } + return Flags{} +} + +// SetField sets the given field of the given node and blocks until the operation is finished +func (ns *NodeStateMachine) SetField(n *enode.Node, field Field, value interface{}) error { + ns.lock.Lock() + defer ns.lock.Unlock() + + if !ns.opStart() { + return ErrClosed + } + err := ns.setField(n, field, value) + ns.opFinish() + return err +} + +// SetFieldSub sets the given field of the given node without blocking (should be called +// from a subscription/operation callback). +func (ns *NodeStateMachine) SetFieldSub(n *enode.Node, field Field, value interface{}) error { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.opCheck() + return ns.setField(n, field, value) +} + +func (ns *NodeStateMachine) setField(n *enode.Node, field Field, value interface{}) error { + ns.checkStarted() + id, node := ns.updateEnode(n) + if node == nil { + if value == nil { + return nil + } + node = ns.newNode(n) + ns.nodes[id] = node + } + fieldIndex := ns.fieldIndex(field) + f := ns.fields[fieldIndex] + if value != nil && reflect.TypeOf(value) != f.ftype { + log.Error("Invalid field type", "type", reflect.TypeOf(value), "required", f.ftype) + return ErrInvalidField + } + oldValue := node.fields[fieldIndex] + if value == oldValue { + return nil + } + if oldValue != nil { + node.fieldCount-- + } + if value != nil { + node.fieldCount++ + } + node.fields[fieldIndex] = value + if node.state == 0 && node.fieldCount == 0 { + delete(ns.nodes, id) + if node.db { + ns.deleteNode(id) + } + } else { + if f.encode != nil { + node.dirty = true + } + } + state := node.state + callback := func() { + for _, cb := range f.subs { + cb(n, Flags{mask: state, setup: ns.setup}, oldValue, value) + } + } + ns.opPending = append(ns.opPending, callback) + return nil +} + +// ForEach calls the callback for each node having all of the required and none of the +// disabled flags set. +// Note that this callback is not an operation callback but ForEach can be called from an +// Operation callback or Operation can also be called from a ForEach callback if necessary. +func (ns *NodeStateMachine) ForEach(requireFlags, disableFlags Flags, cb func(n *enode.Node, state Flags)) { + ns.lock.Lock() + ns.checkStarted() + type callback struct { + node *enode.Node + state bitMask + } + require, disable := ns.stateMask(requireFlags), ns.stateMask(disableFlags) + var callbacks []callback + for _, node := range ns.nodes { + if node.state&require == require && node.state&disable == 0 { + callbacks = append(callbacks, callback{node.node, node.state & (require | disable)}) + } + } + ns.lock.Unlock() + for _, c := range callbacks { + cb(c.node, Flags{mask: c.state, setup: ns.setup}) + } +} + +// GetNode returns the enode currently associated with the given ID +func (ns *NodeStateMachine) GetNode(id enode.ID) *enode.Node { + ns.lock.Lock() + defer ns.lock.Unlock() + + ns.checkStarted() + if node := ns.nodes[id]; node != nil { + return node.node + } + return nil +} + +// AddLogMetrics adds logging and/or metrics for nodes entering, exiting and currently +// being in a given set specified by required and disabled state flags +func (ns *NodeStateMachine) AddLogMetrics(requireFlags, disableFlags Flags, name string, inMeter, outMeter metrics.Meter, gauge metrics.Gauge) { + var count int64 + ns.SubscribeState(requireFlags.Or(disableFlags), func(n *enode.Node, oldState, newState Flags) { + oldMatch := oldState.HasAll(requireFlags) && oldState.HasNone(disableFlags) + newMatch := newState.HasAll(requireFlags) && newState.HasNone(disableFlags) + if newMatch == oldMatch { + return + } + + if newMatch { + count++ + if name != "" { + log.Debug("Node entered", "set", name, "id", n.ID(), "count", count) + } + if inMeter != nil { + inMeter.Mark(1) + } + } else { + count-- + if name != "" { + log.Debug("Node left", "set", name, "id", n.ID(), "count", count) + } + if outMeter != nil { + outMeter.Mark(1) + } + } + if gauge != nil { + gauge.Update(count) + } + }) +} diff --git a/p2p/nodestate/nodestate_test.go b/p2p/nodestate/nodestate_test.go new file mode 100644 index 00000000..d06ad755 --- /dev/null +++ b/p2p/nodestate/nodestate_test.go @@ -0,0 +1,407 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package nodestate + +import ( + "errors" + "fmt" + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" +) + +func testSetup(flagPersist []bool, fieldType []reflect.Type) (*Setup, []Flags, []Field) { + setup := &Setup{} + flags := make([]Flags, len(flagPersist)) + for i, persist := range flagPersist { + if persist { + flags[i] = setup.NewPersistentFlag(fmt.Sprintf("flag-%d", i)) + } else { + flags[i] = setup.NewFlag(fmt.Sprintf("flag-%d", i)) + } + } + fields := make([]Field, len(fieldType)) + for i, ftype := range fieldType { + switch ftype { + case reflect.TypeOf(uint64(0)): + fields[i] = setup.NewPersistentField(fmt.Sprintf("field-%d", i), ftype, uint64FieldEnc, uint64FieldDec) + case reflect.TypeOf(""): + fields[i] = setup.NewPersistentField(fmt.Sprintf("field-%d", i), ftype, stringFieldEnc, stringFieldDec) + default: + fields[i] = setup.NewField(fmt.Sprintf("field-%d", i), ftype) + } + } + return setup, flags, fields +} + +func testNode(b byte) *enode.Node { + r := &enr.Record{} + r.SetSig(dummyIdentity{b}, []byte{42}) + n, _ := enode.New(dummyIdentity{b}, r) + return n +} + +func TestCallback(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, _ := testSetup([]bool{false, false, false}, nil) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + set0 := make(chan struct{}, 1) + set1 := make(chan struct{}, 1) + set2 := make(chan struct{}, 1) + ns.SubscribeState(flags[0], func(n *enode.Node, oldState, newState Flags) { set0 <- struct{}{} }) + ns.SubscribeState(flags[1], func(n *enode.Node, oldState, newState Flags) { set1 <- struct{}{} }) + ns.SubscribeState(flags[2], func(n *enode.Node, oldState, newState Flags) { set2 <- struct{}{} }) + + ns.Start() + + ns.SetState(testNode(1), flags[0], Flags{}, 0) + ns.SetState(testNode(1), flags[1], Flags{}, time.Second) + ns.SetState(testNode(1), flags[2], Flags{}, 2*time.Second) + + for i := 0; i < 3; i++ { + select { + case <-set0: + case <-set1: + case <-set2: + case <-time.After(time.Second): + t.Fatalf("failed to invoke callback") + } + } +} + +func TestPersistentFlags(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, _ := testSetup([]bool{true, true, true, false}, nil) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + saveNode := make(chan *nodeInfo, 5) + ns.saveNodeHook = func(node *nodeInfo) { + saveNode <- node + } + + ns.Start() + + ns.SetState(testNode(1), flags[0], Flags{}, time.Second) // state with timeout should not be saved + ns.SetState(testNode(2), flags[1], Flags{}, 0) + ns.SetState(testNode(3), flags[2], Flags{}, 0) + ns.SetState(testNode(4), flags[3], Flags{}, 0) + ns.SetState(testNode(5), flags[0], Flags{}, 0) + ns.Persist(testNode(5)) + select { + case <-saveNode: + case <-time.After(time.Second): + t.Fatalf("Timeout") + } + ns.Stop() + + for i := 0; i < 2; i++ { + select { + case <-saveNode: + case <-time.After(time.Second): + t.Fatalf("Timeout") + } + } + select { + case <-saveNode: + t.Fatalf("Unexpected saveNode") + case <-time.After(time.Millisecond * 100): + } +} + +func TestSetField(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, fields := testSetup([]bool{true}, []reflect.Type{reflect.TypeOf("")}) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + saveNode := make(chan *nodeInfo, 1) + ns.saveNodeHook = func(node *nodeInfo) { + saveNode <- node + } + + ns.Start() + + // Set field before setting state + ns.SetField(testNode(1), fields[0], "hello world") + field := ns.GetField(testNode(1), fields[0]) + if field == nil { + t.Fatalf("Field should be set before setting states") + } + ns.SetField(testNode(1), fields[0], nil) + field = ns.GetField(testNode(1), fields[0]) + if field != nil { + t.Fatalf("Field should be unset") + } + // Set field after setting state + ns.SetState(testNode(1), flags[0], Flags{}, 0) + ns.SetField(testNode(1), fields[0], "hello world") + field = ns.GetField(testNode(1), fields[0]) + if field == nil { + t.Fatalf("Field should be set after setting states") + } + if err := ns.SetField(testNode(1), fields[0], 123); err == nil { + t.Fatalf("Invalid field should be rejected") + } + // Dirty node should be written back + ns.Stop() + select { + case <-saveNode: + case <-time.After(time.Second): + t.Fatalf("Timeout") + } +} + +func TestSetState(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, _ := testSetup([]bool{false, false, false}, nil) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + type change struct{ old, new Flags } + set := make(chan change, 1) + ns.SubscribeState(flags[0].Or(flags[1]), func(n *enode.Node, oldState, newState Flags) { + set <- change{ + old: oldState, + new: newState, + } + }) + + ns.Start() + + check := func(expectOld, expectNew Flags, expectChange bool) { + if expectChange { + select { + case c := <-set: + if !c.old.Equals(expectOld) { + t.Fatalf("Old state mismatch") + } + if !c.new.Equals(expectNew) { + t.Fatalf("New state mismatch") + } + case <-time.After(time.Second): + } + return + } + select { + case <-set: + t.Fatalf("Unexpected change") + case <-time.After(time.Millisecond * 100): + return + } + } + ns.SetState(testNode(1), flags[0], Flags{}, 0) + check(Flags{}, flags[0], true) + + ns.SetState(testNode(1), flags[1], Flags{}, 0) + check(flags[0], flags[0].Or(flags[1]), true) + + ns.SetState(testNode(1), flags[2], Flags{}, 0) + check(Flags{}, Flags{}, false) + + ns.SetState(testNode(1), Flags{}, flags[0], 0) + check(flags[0].Or(flags[1]), flags[1], true) + + ns.SetState(testNode(1), Flags{}, flags[1], 0) + check(flags[1], Flags{}, true) + + ns.SetState(testNode(1), Flags{}, flags[2], 0) + check(Flags{}, Flags{}, false) + + ns.SetState(testNode(1), flags[0].Or(flags[1]), Flags{}, time.Second) + check(Flags{}, flags[0].Or(flags[1]), true) + clock.Run(time.Second) + check(flags[0].Or(flags[1]), Flags{}, true) +} + +func uint64FieldEnc(field interface{}) ([]byte, error) { + if u, ok := field.(uint64); ok { + enc, err := rlp.EncodeToBytes(&u) + return enc, err + } + return nil, errors.New("invalid field type") +} + +func uint64FieldDec(enc []byte) (interface{}, error) { + var u uint64 + err := rlp.DecodeBytes(enc, &u) + return u, err +} + +func stringFieldEnc(field interface{}) ([]byte, error) { + if s, ok := field.(string); ok { + return []byte(s), nil + } + return nil, errors.New("invalid field type") +} + +func stringFieldDec(enc []byte) (interface{}, error) { + return string(enc), nil +} + +func TestPersistentFields(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, fields := testSetup([]bool{true}, []reflect.Type{reflect.TypeOf(uint64(0)), reflect.TypeOf("")}) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + ns.Start() + ns.SetState(testNode(1), flags[0], Flags{}, 0) + ns.SetField(testNode(1), fields[0], uint64(100)) + ns.SetField(testNode(1), fields[1], "hello world") + ns.Stop() + + ns2 := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + ns2.Start() + field0 := ns2.GetField(testNode(1), fields[0]) + if !reflect.DeepEqual(field0, uint64(100)) { + t.Fatalf("Field changed") + } + field1 := ns2.GetField(testNode(1), fields[1]) + if !reflect.DeepEqual(field1, "hello world") { + t.Fatalf("Field changed") + } + + s.Version++ + ns3 := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + ns3.Start() + if ns3.GetField(testNode(1), fields[0]) != nil { + t.Fatalf("Old field version should have been discarded") + } +} + +func TestFieldSub(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, fields := testSetup([]bool{true}, []reflect.Type{reflect.TypeOf(uint64(0))}) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + var ( + lastState Flags + lastOldValue, lastNewValue interface{} + ) + ns.SubscribeField(fields[0], func(n *enode.Node, state Flags, oldValue, newValue interface{}) { + lastState, lastOldValue, lastNewValue = state, oldValue, newValue + }) + check := func(state Flags, oldValue, newValue interface{}) { + if !lastState.Equals(state) || lastOldValue != oldValue || lastNewValue != newValue { + t.Fatalf("Incorrect field sub callback (expected [%v %v %v], got [%v %v %v])", state, oldValue, newValue, lastState, lastOldValue, lastNewValue) + } + } + ns.Start() + ns.SetState(testNode(1), flags[0], Flags{}, 0) + ns.SetField(testNode(1), fields[0], uint64(100)) + check(flags[0], nil, uint64(100)) + ns.Stop() + check(s.OfflineFlag(), uint64(100), nil) + + ns2 := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + ns2.SubscribeField(fields[0], func(n *enode.Node, state Flags, oldValue, newValue interface{}) { + lastState, lastOldValue, lastNewValue = state, oldValue, newValue + }) + ns2.Start() + check(s.OfflineFlag(), nil, uint64(100)) + ns2.SetState(testNode(1), Flags{}, flags[0], 0) + ns2.SetField(testNode(1), fields[0], nil) + check(Flags{}, uint64(100), nil) + ns2.Stop() +} + +func TestDuplicatedFlags(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, _ := testSetup([]bool{true}, nil) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + type change struct{ old, new Flags } + set := make(chan change, 1) + ns.SubscribeState(flags[0], func(n *enode.Node, oldState, newState Flags) { + set <- change{oldState, newState} + }) + + ns.Start() + defer ns.Stop() + + check := func(expectOld, expectNew Flags, expectChange bool) { + if expectChange { + select { + case c := <-set: + if !c.old.Equals(expectOld) { + t.Fatalf("Old state mismatch") + } + if !c.new.Equals(expectNew) { + t.Fatalf("New state mismatch") + } + case <-time.After(time.Second): + } + return + } + select { + case <-set: + t.Fatalf("Unexpected change") + case <-time.After(time.Millisecond * 100): + return + } + } + ns.SetState(testNode(1), flags[0], Flags{}, time.Second) + check(Flags{}, flags[0], true) + ns.SetState(testNode(1), flags[0], Flags{}, 2*time.Second) // extend the timeout to 2s + check(Flags{}, flags[0], false) + + clock.Run(2 * time.Second) + check(flags[0], Flags{}, true) +} + +func TestCallbackOrder(t *testing.T) { + mdb, clock := rawdb.NewMemoryDatabase(), &mclock.Simulated{} + + s, flags, _ := testSetup([]bool{false, false, false, false}, nil) + ns := NewNodeStateMachine(mdb, []byte("-ns"), clock, s) + + ns.SubscribeState(flags[0], func(n *enode.Node, oldState, newState Flags) { + if newState.Equals(flags[0]) { + ns.SetStateSub(n, flags[1], Flags{}, 0) + ns.SetStateSub(n, flags[2], Flags{}, 0) + } + }) + ns.SubscribeState(flags[1], func(n *enode.Node, oldState, newState Flags) { + if newState.Equals(flags[1]) { + ns.SetStateSub(n, flags[3], Flags{}, 0) + } + }) + lastState := Flags{} + ns.SubscribeState(MergeFlags(flags[1], flags[2], flags[3]), func(n *enode.Node, oldState, newState Flags) { + if !oldState.Equals(lastState) { + t.Fatalf("Wrong callback order") + } + lastState = newState + }) + + ns.Start() + defer ns.Stop() + + ns.SetState(testNode(1), flags[0], Flags{}, 0) +} diff --git a/p2p/peer.go b/p2p/peer.go index 1af4cea2..469a1b79 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -25,12 +25,13 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rlp" + "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" ) var ( @@ -114,19 +115,37 @@ type Peer struct { disc chan DiscReason // events receives message send / receive events if set - events *event.Feed + events *event.Feed + testPipe *MsgPipeRW // for testing } // NewPeer returns a peer for testing purposes. func NewPeer(id enode.ID, name string, caps []Cap) *Peer { + // Generate a fake set of local protocols to match as running caps. Almost + // no fields needs to be meaningful here as we're only using it to cross- + // check with the "remote" caps array. + protos := make([]Protocol, len(caps)) + for i, cap := range caps { + protos[i].Name = cap.Name + protos[i].Version = cap.Version + } pipe, _ := net.Pipe() node := enode.SignNull(new(enr.Record), id) conn := &conn{fd: pipe, transport: nil, node: node, caps: caps, name: name} - peer := newPeer(log.Root(), conn, nil) + peer := newPeer(log.Root(), conn, protos) close(peer.closed) // ensures Disconnect doesn't block return peer } +// NewPeerPipe creates a peer for testing purposes. +// The message pipe given as the last parameter is closed when +// Disconnect is called on the peer. +func NewPeerPipe(id enode.ID, name string, caps []Cap, pipe *MsgPipeRW) *Peer { + p := NewPeer(id, name, caps) + p.testPipe = pipe + return p +} + // ID returns the node's public key. func (p *Peer) ID() enode.ID { return p.rw.node.ID() @@ -137,8 +156,17 @@ func (p *Peer) Node() *enode.Node { return p.rw.node } -// Name returns the node name that the remote node advertised. +// Name returns an abbreviated form of the name func (p *Peer) Name() string { + s := p.rw.name + if len(s) > 20 { + return s[:20] + "..." + } + return s +} + +// Fullname returns the node name that the remote node advertised. +func (p *Peer) Fullname() string { return p.rw.name } @@ -148,6 +176,20 @@ func (p *Peer) Caps() []Cap { return p.rw.caps } +// RunningCap returns true if the peer is actively connected using any of the +// enumerated versions of a specific protocol, meaning that at least one of the +// versions is supported by both this node and the peer p. +func (p *Peer) RunningCap(protocol string, versions []uint) bool { + if proto, ok := p.running[protocol]; ok { + for _, ver := range versions { + if proto.Version == ver { + return true + } + } + } + return false +} + // RemoteAddr returns the remote address of the network connection. func (p *Peer) RemoteAddr() net.Addr { return p.rw.fd.RemoteAddr() @@ -161,6 +203,10 @@ func (p *Peer) LocalAddr() net.Addr { // Disconnect terminates the peer connection with the given reason. // It returns immediately and does not wait until the connection is closed. func (p *Peer) Disconnect(reason DiscReason) { + if p.testPipe != nil { + p.testPipe.Close() + } + select { case p.disc <- reason: case <-p.closed: @@ -286,11 +332,11 @@ func (p *Peer) handle(msg Msg) error { msg.Discard() go SendItems(p.rw, pongMsg) case msg.Code == discMsg: - var reason [1]DiscReason // This is the last message. We don't need to discard or // check errors because, the connection will be closed after it. - rlp.Decode(msg.Payload, &reason) - return reason[0] + var m struct{ R DiscReason } + rlp.Decode(msg.Payload, &m) + return m.R case msg.Code < baseProtocolLength: // ignore other base protocol messages return msg.Discard() @@ -300,6 +346,11 @@ func (p *Peer) handle(msg Msg) error { if err != nil { return fmt.Errorf("msg code out of range: %v", msg.Code) } + if metrics.Enabled { + m := fmt.Sprintf("%s/%s/%d/%#02x", ingressMeterName, proto.Name, proto.Version, msg.Code-proto.offset) + metrics.GetOrRegisterMeter(m, nil).Mark(int64(msg.meterSize)) + metrics.GetOrRegisterMeter(m+"/packets", nil).Mark(1) + } select { case proto.in <- msg: return nil @@ -360,15 +411,15 @@ func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error) } p.log.Trace(fmt.Sprintf("Starting protocol %s/%d", proto.Name, proto.Version)) go func() { + defer p.wg.Done() err := proto.Run(p, rw) if err == nil { p.log.Trace(fmt.Sprintf("Protocol %s/%d returned", proto.Name, proto.Version)) err = errProtocolReturned - } else if err != io.EOF { + } else if !errors.Is(err, io.EOF) { p.log.Trace(fmt.Sprintf("Protocol %s/%d failed", proto.Name, proto.Version), "err", err) } p.protoErr <- err - p.wg.Done() }() } } @@ -398,7 +449,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) @@ -453,7 +508,7 @@ func (p *Peer) Info() *PeerInfo { info := &PeerInfo{ Enode: p.Node().URLv4(), ID: p.ID().String(), - Name: p.Name(), + Name: p.Fullname(), Caps: caps, Protocols: make(map[string]interface{}), } diff --git a/p2p/peer_error.go b/p2p/peer_error.go index ab61bfef..ebc59de2 100644 --- a/p2p/peer_error.go +++ b/p2p/peer_error.go @@ -54,7 +54,7 @@ func (pe *peerError) Error() string { var errProtocolReturned = errors.New("protocol returned") -type DiscReason uint +type DiscReason uint8 const ( DiscRequested DiscReason = iota @@ -69,7 +69,7 @@ const ( DiscUnexpectedIdentity DiscSelf DiscReadTimeout - DiscSubprotocolError = 0x10 + DiscSubprotocolError = DiscReason(0x10) ) var discReasonToString = [...]string{ @@ -89,7 +89,7 @@ var discReasonToString = [...]string{ } func (d DiscReason) String() string { - if len(discReasonToString) < int(d) { + if len(discReasonToString) <= int(d) { return fmt.Sprintf("unknown disconnect reason %d", d) } return discReasonToString[d] @@ -103,7 +103,7 @@ func discReasonForError(err error) DiscReason { if reason, ok := err.(DiscReason); ok { return reason } - if err == errProtocolReturned { + if errors.Is(err, errProtocolReturned) { return DiscQuitting } peerError, ok := err.(*peerError) diff --git a/p2p/peer_test.go b/p2p/peer_test.go index dc69e7f9..4308bbd2 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -17,15 +17,20 @@ package p2p import ( + "encoding/binary" "errors" "fmt" "math/rand" "net" "reflect" + "strconv" + "strings" "testing" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" ) var discard = Protocol{ @@ -45,10 +50,51 @@ var discard = Protocol{ }, } +// uintID encodes i into a node ID. +func uintID(i uint16) enode.ID { + var id enode.ID + binary.BigEndian.PutUint16(id[:], i) + return id +} + +// newNode creates a node record with the given address. +func newNode(id enode.ID, addr string) *enode.Node { + var r enr.Record + if addr != "" { + // Set the port if present. + if strings.Contains(addr, ":") { + hs, ps, err := net.SplitHostPort(addr) + if err != nil { + panic(fmt.Errorf("invalid address %q", addr)) + } + port, err := strconv.Atoi(ps) + if err != nil { + panic(fmt.Errorf("invalid port in %q", addr)) + } + r.Set(enr.TCP(port)) + r.Set(enr.UDP(port)) + addr = hs + } + // Set the IP. + ip := net.ParseIP(addr) + if ip == nil { + panic(fmt.Errorf("invalid IP %q", addr)) + } + r.Set(enr.IP(ip)) + } + return enode.SignNull(&r, id) +} + func testPeer(protos []Protocol) (func(), *conn, *Peer, <-chan error) { - fd1, fd2 := net.Pipe() - c1 := &conn{fd: fd1, node: newNode(randomID(), nil), transport: newTestTransport(&newkey().PublicKey, fd1)} - c2 := &conn{fd: fd2, node: newNode(randomID(), nil), transport: newTestTransport(&newkey().PublicKey, fd2)} + var ( + fd1, fd2 = net.Pipe() + key1, key2 = newkey(), newkey() + t1 = newTestTransport(&key2.PublicKey, fd1, nil) + t2 = newTestTransport(&key1.PublicKey, fd2, &key1.PublicKey) + ) + + c1 := &conn{fd: fd1, node: newNode(uintID(1), ""), transport: t1} + c2 := &conn{fd: fd2, node: newNode(uintID(2), ""), transport: t2} for _, p := range protos { c1.caps = append(c1.caps, p.cap()) c2.caps = append(c2.caps, p.cap()) @@ -133,9 +179,12 @@ func TestPeerPing(t *testing.T) { } } +// This test checks that a disconnect message sent by a peer is returned +// as the error from Peer.run. func TestPeerDisconnect(t *testing.T) { closer, rw, _, disc := testPeer(nil) defer closer() + if err := SendItems(rw, discMsg, DiscQuitting); err != nil { t.Fatal(err) } @@ -152,7 +201,7 @@ func TestPeerDisconnect(t *testing.T) { // This test is supposed to verify that Peer can reliably handle // multiple causes of disconnection occurring at the same time. func TestPeerDisconnectRace(t *testing.T) { - maybe := func() bool { return rand.Intn(1) == 1 } + maybe := func() bool { return rand.Intn(2) == 1 } for i := 0; i < 1000; i++ { protoclose := make(chan error) diff --git a/p2p/protocol.go b/p2p/protocol.go index 5ed36f82..fa23a087 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -19,8 +19,8 @@ package p2p import ( "fmt" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" ) // Protocol represents a P2P subprotocol implementation. @@ -54,6 +54,11 @@ type Protocol struct { // but returns nil, it is assumed that the protocol handshake is still running. PeerInfo func(id enode.ID) interface{} + // DialCandidates, if non-nil, is a way to tell Server about protocol-specific nodes + // that should be dialed. The server continuously reads nodes from the iterator and + // attempts to create connections to them. + DialCandidates enode.Iterator + // Attributes contains protocol specific information for the node record. Attributes []enr.Entry } diff --git a/p2p/rlpx.go b/p2p/rlpx.go deleted file mode 100644 index 1ac8d219..00000000 --- a/p2p/rlpx.go +++ /dev/null @@ -1,733 +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 p2p - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/hmac" - "crypto/rand" - "encoding/binary" - "errors" - "fmt" - "hash" - "io" - "io/ioutil" - mrand "math/rand" - "net" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/common/bitutil" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/crypto/ecies" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/golang/snappy" - "golang.org/x/crypto/sha3" -) - -const ( - maxUint24 = ^uint32(0) >> 8 - - 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 - - eciesOverhead = 65 /* pubkey */ + 16 /* IV */ + 32 /* MAC */ - - encAuthMsgLen = authMsgLen + eciesOverhead // size of encrypted pre-EIP-8 initiator handshake - encAuthRespLen = authRespLen + eciesOverhead // size of encrypted pre-EIP-8 handshake reply - - // total timeout for encryption handshake and protocol - // handshake in both directions. - handshakeTimeout = 5 * time.Second - - // This is the timeout for sending the disconnect reason. - // This is shorter than the usual timeout because we don't want - // to wait if the connection is known to be bad anyway. - discWriteTimeout = 1 * time.Second -) - -// errPlainMessageTooLarge is returned if a decompressed message length exceeds -// the allowed 24 bits (i.e. length >= 16MB). -var errPlainMessageTooLarge = errors.New("message length >= 16MB") - -// rlpx is the transport protocol used by actual (non-test) connections. -// It wraps the frame encoder with locks and read/write deadlines. -type rlpx struct { - fd net.Conn - - rmu, wmu sync.Mutex - rw *rlpxFrameRW -} - -func newRLPX(fd net.Conn) transport { - fd.SetDeadline(time.Now().Add(handshakeTimeout)) - return &rlpx{fd: fd} -} - -func (t *rlpx) ReadMsg() (Msg, error) { - t.rmu.Lock() - defer t.rmu.Unlock() - t.fd.SetReadDeadline(time.Now().Add(frameReadTimeout)) - return t.rw.ReadMsg() -} - -func (t *rlpx) WriteMsg(msg Msg) error { - t.wmu.Lock() - defer t.wmu.Unlock() - t.fd.SetWriteDeadline(time.Now().Add(frameWriteTimeout)) - return t.rw.WriteMsg(msg) -} - -func (t *rlpx) close(err error) { - t.wmu.Lock() - defer t.wmu.Unlock() - // Tell the remote end why we're disconnecting if possible. - if t.rw != nil { - if r, ok := err.(DiscReason); ok && r != DiscNetworkError { - // rlpx tries to send DiscReason to disconnected peer - // if the connection is net.Pipe (in-memory simulation) - // it hangs forever, since net.Pipe does not implement - // a write deadline. Because of this only try to send - // the disconnect reason message if there is no error. - if err := t.fd.SetWriteDeadline(time.Now().Add(discWriteTimeout)); err == nil { - SendItems(t.rw, discMsg, r) - } - } - } - t.fd.Close() -} - -func (t *rlpx) doProtoHandshake(our *protoHandshake) (their *protoHandshake, err error) { - // Writing our handshake happens concurrently, we prefer - // returning the handshake read error. If the remote side - // disconnects us early with a valid reason, we should return it - // 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); err != nil { - <-werr // make sure the write terminates too - return nil, err - } - if err := <-werr; err != nil { - return nil, fmt.Errorf("write error: %v", err) - } - // If the protocol version supports Snappy encoding, upgrade immediately - t.rw.snappy = their.Version >= snappyProtocolVersion - - return their, nil -} - -func readProtocolHandshake(rw MsgReader) (*protoHandshake, error) { - msg, err := rw.ReadMsg() - if err != nil { - return nil, err - } - if msg.Size > baseProtocolMaxMsgSize { - return nil, fmt.Errorf("message too big") - } - if msg.Code == discMsg { - // Disconnect before protocol handshake is valid according to the - // spec and we send it ourself if the post-handshake checks fail. - // We can't return the reason directly, though, because it is echoed - // back otherwise. Wrap it in a string instead. - var reason [1]DiscReason - rlp.Decode(msg.Payload, &reason) - return nil, reason[0] - } - if msg.Code != handshakeMsg { - return nil, fmt.Errorf("expected handshake, got %x", msg.Code) - } - var hs protoHandshake - if err := msg.Decode(&hs); err != nil { - return nil, err - } - if len(hs.ID) != 64 || !bitutil.TestBytes(hs.ID) { - return nil, DiscInvalidIdentity - } - return &hs, nil -} - -// doEncHandshake runs the protocol handshake using authenticated -// messages. the protocol handshake is the first authenticated message -// and also verifies whether the encryption handshake 'worked' and the -// remote side actually provided the right public key. -func (t *rlpx) doEncHandshake(prv *ecdsa.PrivateKey, dial *ecdsa.PublicKey) (*ecdsa.PublicKey, error) { - var ( - sec secrets - err error - ) - if dial == nil { - sec, err = receiverEncHandshake(t.fd, prv) - } else { - sec, err = initiatorEncHandshake(t.fd, prv, dial) - } - if err != nil { - return nil, err - } - t.wmu.Lock() - t.rw = newRLPXFrameRW(t.fd, sec) - t.wmu.Unlock() - return sec.Remote.ExportECDSA(), nil -} - -// encHandshake contains the state of the encryption handshake. -type encHandshake struct { - initiator bool - remote *ecies.PublicKey // remote-pubk - initNonce, respNonce []byte // nonce - randomPrivKey *ecies.PrivateKey // ecdhe-random - remoteRandomPub *ecies.PublicKey // ecdhe-random-pubk -} - -// secrets represents the connection secrets -// which are negotiated during the encryption handshake. -type secrets struct { - Remote *ecies.PublicKey - AES, MAC []byte - EgressMAC, IngressMAC hash.Hash - Token []byte -} - -// RLPx v4 handshake auth (defined in EIP-8). -type authMsgV4 struct { - gotPlain bool // whether read packet had plain format. - - Signature [sigLen]byte - InitiatorPubkey [pubLen]byte - Nonce [shaLen]byte - Version uint - - // Ignore additional fields (forward-compatibility) - Rest []rlp.RawValue `rlp:"tail"` -} - -// RLPx v4 handshake response (defined in EIP-8). -type authRespV4 struct { - RandomPubkey [pubLen]byte - Nonce [shaLen]byte - Version uint - - // Ignore additional fields (forward-compatibility) - Rest []rlp.RawValue `rlp:"tail"` -} - -// secrets is called after the handshake is completed. -// It extracts the connection secrets from the handshake values. -func (h *encHandshake) secrets(auth, authResp []byte) (secrets, error) { - ecdheSecret, err := h.randomPrivKey.GenerateShared(h.remoteRandomPub, sskLen, sskLen) - if err != nil { - return secrets{}, err - } - - // derive base secrets from ephemeral key agreement - sharedSecret := crypto.Keccak256(ecdheSecret, crypto.Keccak256(h.respNonce, h.initNonce)) - aesSecret := crypto.Keccak256(ecdheSecret, sharedSecret) - s := secrets{ - Remote: h.remote, - AES: aesSecret, - MAC: crypto.Keccak256(ecdheSecret, aesSecret), - } - - // setup sha3 instances for the MACs - mac1 := sha3.NewLegacyKeccak256() - mac1.Write(xor(s.MAC, h.respNonce)) - mac1.Write(auth) - mac2 := sha3.NewLegacyKeccak256() - mac2.Write(xor(s.MAC, h.initNonce)) - mac2.Write(authResp) - if h.initiator { - s.EgressMAC, s.IngressMAC = mac1, mac2 - } else { - s.EgressMAC, s.IngressMAC = mac2, mac1 - } - - return s, nil -} - -// staticSharedSecret returns the static shared secret, the result -// of key agreement between the local and remote static node key. -func (h *encHandshake) staticSharedSecret(prv *ecdsa.PrivateKey) ([]byte, error) { - return ecies.ImportECDSA(prv).GenerateShared(h.remote, sskLen, sskLen) -} - -// initiatorEncHandshake negotiates a session token on conn. -// it should be called on the dialing side of the connection. -// -// prv is the local client's private key. -func initiatorEncHandshake(conn io.ReadWriter, prv *ecdsa.PrivateKey, remote *ecdsa.PublicKey) (s secrets, err error) { - h := &encHandshake{initiator: true, remote: ecies.ImportECDSAPublic(remote)} - authMsg, err := h.makeAuthMsg(prv) - if err != nil { - return s, err - } - authPacket, err := sealEIP8(authMsg, h) - if err != nil { - return s, err - } - if _, err = conn.Write(authPacket); err != nil { - return s, err - } - - authRespMsg := new(authRespV4) - authRespPacket, err := readHandshakeMsg(authRespMsg, encAuthRespLen, prv, conn) - if err != nil { - return s, err - } - if err := h.handleAuthResp(authRespMsg); err != nil { - return s, err - } - return h.secrets(authPacket, authRespPacket) -} - -// makeAuthMsg creates the initiator handshake message. -func (h *encHandshake) makeAuthMsg(prv *ecdsa.PrivateKey) (*authMsgV4, error) { - // Generate random initiator nonce. - h.initNonce = make([]byte, shaLen) - _, err := rand.Read(h.initNonce) - if err != nil { - return nil, err - } - // Generate random keypair to for ECDH. - h.randomPrivKey, err = ecies.GenerateKey(rand.Reader, crypto.S256(), nil) - if err != nil { - return nil, err - } - - // Sign known message: static-shared-secret ^ nonce - token, err := h.staticSharedSecret(prv) - if err != nil { - return nil, err - } - signed := xor(token, h.initNonce) - signature, err := crypto.Sign(signed, h.randomPrivKey.ExportECDSA()) - if err != nil { - return nil, err - } - - msg := new(authMsgV4) - copy(msg.Signature[:], signature) - copy(msg.InitiatorPubkey[:], crypto.FromECDSAPub(&prv.PublicKey)[1:]) - copy(msg.Nonce[:], h.initNonce) - msg.Version = 4 - return msg, nil -} - -func (h *encHandshake) handleAuthResp(msg *authRespV4) (err error) { - h.respNonce = msg.Nonce[:] - h.remoteRandomPub, err = importPublicKey(msg.RandomPubkey[:]) - return err -} - -// receiverEncHandshake negotiates a session token on conn. -// it should be called on the listening side of the connection. -// -// prv is the local client's private key. -func receiverEncHandshake(conn io.ReadWriter, prv *ecdsa.PrivateKey) (s secrets, err error) { - authMsg := new(authMsgV4) - authPacket, err := readHandshakeMsg(authMsg, encAuthMsgLen, prv, conn) - if err != nil { - return s, err - } - h := new(encHandshake) - if err := h.handleAuthMsg(authMsg, prv); err != nil { - return s, err - } - - authRespMsg, err := h.makeAuthResp() - if err != nil { - return s, err - } - var authRespPacket []byte - if authMsg.gotPlain { - authRespPacket, err = authRespMsg.sealPlain(h) - } else { - authRespPacket, err = sealEIP8(authRespMsg, h) - } - if err != nil { - return s, err - } - if _, err = conn.Write(authRespPacket); err != nil { - return s, err - } - return h.secrets(authPacket, authRespPacket) -} - -func (h *encHandshake) handleAuthMsg(msg *authMsgV4, prv *ecdsa.PrivateKey) error { - // Import the remote identity. - rpub, err := importPublicKey(msg.InitiatorPubkey[:]) - if err != nil { - return err - } - h.initNonce = msg.Nonce[:] - h.remote = rpub - - // Generate random keypair for ECDH. - // If a private key is already set, use it instead of generating one (for testing). - if h.randomPrivKey == nil { - h.randomPrivKey, err = ecies.GenerateKey(rand.Reader, crypto.S256(), nil) - if err != nil { - return err - } - } - - // Check the signature. - token, err := h.staticSharedSecret(prv) - if err != nil { - return err - } - signedMsg := xor(token, h.initNonce) - remoteRandomPub, err := crypto.Ecrecover(signedMsg, msg.Signature[:]) - if err != nil { - return err - } - h.remoteRandomPub, _ = importPublicKey(remoteRandomPub) - return nil -} - -func (h *encHandshake) makeAuthResp() (msg *authRespV4, err error) { - // Generate random nonce. - h.respNonce = make([]byte, shaLen) - if _, err = rand.Read(h.respNonce); err != nil { - return nil, err - } - - msg = new(authRespV4) - copy(msg.Nonce[:], h.respNonce) - copy(msg.RandomPubkey[:], exportPubkey(&h.randomPrivKey.PublicKey)) - msg.Version = 4 - return msg, nil -} - -func (msg *authMsgV4) sealPlain(h *encHandshake) ([]byte, error) { - buf := make([]byte, authMsgLen) - n := copy(buf, msg.Signature[:]) - n += copy(buf[n:], crypto.Keccak256(exportPubkey(&h.randomPrivKey.PublicKey))) - n += copy(buf[n:], msg.InitiatorPubkey[:]) - n += copy(buf[n:], msg.Nonce[:]) - buf[n] = 0 // token-flag - return ecies.Encrypt(rand.Reader, h.remote, buf, nil, nil) -} - -func (msg *authMsgV4) decodePlain(input []byte) { - n := copy(msg.Signature[:], input) - n += shaLen // skip sha3(initiator-ephemeral-pubk) - n += copy(msg.InitiatorPubkey[:], input[n:]) - copy(msg.Nonce[:], input[n:]) - msg.Version = 4 - msg.gotPlain = true -} - -func (msg *authRespV4) sealPlain(hs *encHandshake) ([]byte, error) { - buf := make([]byte, authRespLen) - n := copy(buf, msg.RandomPubkey[:]) - copy(buf[n:], msg.Nonce[:]) - return ecies.Encrypt(rand.Reader, hs.remote, buf, nil, nil) -} - -func (msg *authRespV4) decodePlain(input []byte) { - n := copy(msg.RandomPubkey[:], input) - copy(msg.Nonce[:], input[n:]) - msg.Version = 4 -} - -var padSpace = make([]byte, 300) - -func sealEIP8(msg interface{}, h *encHandshake) ([]byte, error) { - buf := new(bytes.Buffer) - if err := rlp.Encode(buf, msg); err != nil { - return nil, err - } - // pad with random amount of data. the amount needs to be at least 100 bytes to make - // the message distinguishable from pre-EIP-8 handshakes. - pad := padSpace[:mrand.Intn(len(padSpace)-100)+100] - buf.Write(pad) - prefix := make([]byte, 2) - binary.BigEndian.PutUint16(prefix, uint16(buf.Len()+eciesOverhead)) - - enc, err := ecies.Encrypt(rand.Reader, h.remote, buf.Bytes(), nil, prefix) - return append(prefix, enc...), err -} - -type plainDecoder interface { - decodePlain([]byte) -} - -func readHandshakeMsg(msg plainDecoder, plainSize int, prv *ecdsa.PrivateKey, r io.Reader) ([]byte, error) { - buf := make([]byte, plainSize) - if _, err := io.ReadFull(r, buf); err != nil { - return buf, err - } - // Attempt decoding pre-EIP-8 "plain" format. - key := ecies.ImportECDSA(prv) - if dec, err := key.Decrypt(buf, nil, nil); err == nil { - msg.decodePlain(dec) - return buf, nil - } - // Could be EIP-8 format, try that. - prefix := buf[:2] - size := binary.BigEndian.Uint16(prefix) - if size < uint16(plainSize) { - return buf, fmt.Errorf("size underflow, need at least %d bytes", plainSize) - } - buf = append(buf, make([]byte, size-uint16(plainSize)+2)...) - if _, err := io.ReadFull(r, buf[plainSize:]); err != nil { - return buf, err - } - dec, err := key.Decrypt(buf[2:], nil, prefix) - if err != nil { - return buf, err - } - // Can't use rlp.DecodeBytes here because it rejects - // trailing data (forward-compatibility). - s := rlp.NewStream(bytes.NewReader(dec), 0) - return buf, s.Decode(msg) -} - -// importPublicKey unmarshals 512 bit public keys. -func importPublicKey(pubKey []byte) (*ecies.PublicKey, error) { - var pubKey65 []byte - switch len(pubKey) { - case 64: - // add 'uncompressed key' flag - pubKey65 = append([]byte{0x04}, pubKey...) - case 65: - pubKey65 = pubKey - default: - return nil, fmt.Errorf("invalid public key length %v (expect 64/65)", len(pubKey)) - } - // TODO: fewer pointless conversions - pub, err := crypto.UnmarshalPubkey(pubKey65) - if err != nil { - return nil, err - } - return ecies.ImportECDSAPublic(pub), nil -} - -func exportPubkey(pub *ecies.PublicKey) []byte { - if pub == nil { - panic("nil pubkey") - } - return elliptic.Marshal(pub.Curve, pub.X, pub.Y)[1:] -} - -func xor(one, other []byte) (xor []byte) { - xor = make([]byte, len(one)) - for i := 0; i < len(one); i++ { - xor[i] = one[i] ^ other[i] - } - return xor -} - -var ( - // this is used in place of actual frame header data. - // TODO: replace this when Msg contains the protocol type code. - zeroHeader = []byte{0xC2, 0x80, 0x80} - // sixteen zero bytes - zero16 = make([]byte, 16) -) - -// rlpxFrameRW implements a simplified version of RLPx framing. -// chunked messages are not supported and all headers are equal to -// zeroHeader. -// -// rlpxFrameRW is not safe for concurrent use from multiple goroutines. -type rlpxFrameRW struct { - conn io.ReadWriter - enc cipher.Stream - dec cipher.Stream - - macCipher cipher.Block - egressMAC hash.Hash - ingressMAC hash.Hash - - snappy bool -} - -func newRLPXFrameRW(conn io.ReadWriter, s secrets) *rlpxFrameRW { - macc, err := aes.NewCipher(s.MAC) - if err != nil { - panic("invalid MAC secret: " + err.Error()) - } - encc, err := aes.NewCipher(s.AES) - if err != nil { - panic("invalid AES secret: " + err.Error()) - } - // we use an all-zeroes IV for AES because the key used - // for encryption is ephemeral. - iv := make([]byte, encc.BlockSize()) - return &rlpxFrameRW{ - conn: conn, - enc: cipher.NewCTR(encc, iv), - dec: cipher.NewCTR(encc, iv), - macCipher: macc, - egressMAC: s.EgressMAC, - ingressMAC: s.IngressMAC, - } -} - -func (rw *rlpxFrameRW) WriteMsg(msg Msg) error { - ptype, _ := rlp.EncodeToBytes(msg.Code) - - // if snappy is enabled, compress message now - if rw.snappy { - if msg.Size > maxUint24 { - return errPlainMessageTooLarge - } - payload, _ := ioutil.ReadAll(msg.Payload) - payload = snappy.Encode(nil, payload) - - msg.Payload = bytes.NewReader(payload) - msg.Size = uint32(len(payload)) - } - // write header - headbuf := make([]byte, 32) - fsize := uint32(len(ptype)) + msg.Size - if fsize > maxUint24 { - return errors.New("message size overflows uint24") - } - putInt24(fsize, headbuf) // TODO: check overflow - copy(headbuf[3:], zeroHeader) - rw.enc.XORKeyStream(headbuf[:16], headbuf[:16]) // first half is now encrypted - - // write header MAC - copy(headbuf[16:], updateMAC(rw.egressMAC, rw.macCipher, headbuf[:16])) - if _, err := rw.conn.Write(headbuf); err != nil { - return err - } - - // write encrypted frame, updating the egress MAC hash with - // the data written to conn. - tee := cipher.StreamWriter{S: rw.enc, W: io.MultiWriter(rw.conn, rw.egressMAC)} - if _, err := tee.Write(ptype); err != nil { - return err - } - if _, err := io.Copy(tee, msg.Payload); err != nil { - return err - } - if padding := fsize % 16; padding > 0 { - if _, err := tee.Write(zero16[:16-padding]); err != nil { - return err - } - } - - // write frame MAC. egress MAC hash is up to date because - // frame content was written to it as well. - fmacseed := rw.egressMAC.Sum(nil) - mac := updateMAC(rw.egressMAC, rw.macCipher, fmacseed) - _, err := rw.conn.Write(mac) - return err -} - -func (rw *rlpxFrameRW) ReadMsg() (msg Msg, err error) { - // read the header - headbuf := make([]byte, 32) - if _, err := io.ReadFull(rw.conn, headbuf); err != nil { - return msg, err - } - // verify header mac - shouldMAC := updateMAC(rw.ingressMAC, rw.macCipher, headbuf[:16]) - if !hmac.Equal(shouldMAC, headbuf[16:]) { - return msg, errors.New("bad header MAC") - } - rw.dec.XORKeyStream(headbuf[:16], headbuf[:16]) // first half is now decrypted - fsize := readInt24(headbuf) - // ignore protocol type for now - - // read the frame content - var rsize = fsize // frame size rounded up to 16 byte boundary - if padding := fsize % 16; padding > 0 { - rsize += 16 - padding - } - framebuf := make([]byte, rsize) - if _, err := io.ReadFull(rw.conn, framebuf); err != nil { - return msg, err - } - - // read and validate frame MAC. we can re-use headbuf for that. - rw.ingressMAC.Write(framebuf) - fmacseed := rw.ingressMAC.Sum(nil) - if _, err := io.ReadFull(rw.conn, headbuf[:16]); err != nil { - return msg, err - } - shouldMAC = updateMAC(rw.ingressMAC, rw.macCipher, fmacseed) - if !hmac.Equal(shouldMAC, headbuf[:16]) { - return msg, errors.New("bad frame MAC") - } - - // decrypt frame content - rw.dec.XORKeyStream(framebuf, framebuf) - - // decode message code - content := bytes.NewReader(framebuf[:fsize]) - if err := rlp.Decode(content, &msg.Code); err != nil { - return msg, err - } - msg.Size = uint32(content.Len()) - msg.Payload = content - - // if snappy is enabled, verify and decompress message - if rw.snappy { - payload, err := ioutil.ReadAll(msg.Payload) - if err != nil { - return msg, err - } - size, err := snappy.DecodedLen(payload) - if err != nil { - return msg, err - } - if size > int(maxUint24) { - return msg, errPlainMessageTooLarge - } - payload, err = snappy.Decode(nil, payload) - if err != nil { - return msg, err - } - msg.Size, msg.Payload = uint32(size), bytes.NewReader(payload) - } - return msg, nil -} - -// updateMAC reseeds the given hash with encrypted seed. -// it returns the first 16 bytes of the hash sum after seeding. -func updateMAC(mac hash.Hash, block cipher.Block, seed []byte) []byte { - aesbuf := make([]byte, aes.BlockSize) - block.Encrypt(aesbuf, mac.Sum(nil)) - for i := range aesbuf { - aesbuf[i] ^= seed[i] - } - mac.Write(aesbuf) - return mac.Sum(nil)[:16] -} - -func readInt24(b []byte) uint32 { - return uint32(b[2]) | uint32(b[1])<<8 | uint32(b[0])<<16 -} - -func putInt24(v uint32, b []byte) { - b[0] = byte(v >> 16) - b[1] = byte(v >> 8) - b[2] = byte(v) -} diff --git a/p2p/rlpx/buffer.go b/p2p/rlpx/buffer.go new file mode 100644 index 00000000..bb38e105 --- /dev/null +++ b/p2p/rlpx/buffer.go @@ -0,0 +1,127 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlpx + +import ( + "io" +) + +// readBuffer implements buffering for network reads. This type is similar to bufio.Reader, +// with two crucial differences: the buffer slice is exposed, and the buffer keeps all +// read data available until reset. +// +// How to use this type: +// +// Keep a readBuffer b alongside the underlying network connection. When reading a packet +// from the connection, first call b.reset(). This empties b.data. Now perform reads +// through b.read() until the end of the packet is reached. The complete packet data is +// now available in b.data. +type readBuffer struct { + data []byte + end int +} + +// reset removes all processed data which was read since the last call to reset. +// After reset, len(b.data) is zero. +func (b *readBuffer) reset() { + unprocessed := b.end - len(b.data) + copy(b.data[:unprocessed], b.data[len(b.data):b.end]) + b.end = unprocessed + b.data = b.data[:0] +} + +// read reads at least n bytes from r, returning the bytes. +// The returned slice is valid until the next call to reset. +func (b *readBuffer) read(r io.Reader, n int) ([]byte, error) { + offset := len(b.data) + have := b.end - len(b.data) + + // If n bytes are available in the buffer, there is no need to read from r at all. + if have >= n { + b.data = b.data[:offset+n] + return b.data[offset : offset+n], nil + } + + // Make buffer space available. + need := n - have + b.grow(need) + + // Read. + rn, err := io.ReadAtLeast(r, b.data[b.end:cap(b.data)], need) + if err != nil { + return nil, err + } + b.end += rn + b.data = b.data[:offset+n] + return b.data[offset : offset+n], nil +} + +// grow ensures the buffer has at least n bytes of unused space. +func (b *readBuffer) grow(n int) { + if cap(b.data)-b.end >= n { + return + } + need := n - (cap(b.data) - b.end) + offset := len(b.data) + b.data = append(b.data[:cap(b.data)], make([]byte, need)...) + b.data = b.data[:offset] +} + +// writeBuffer implements buffering for network writes. This is essentially +// a convenience wrapper around a byte slice. +type writeBuffer struct { + data []byte +} + +func (b *writeBuffer) reset() { + b.data = b.data[:0] +} + +func (b *writeBuffer) appendZero(n int) []byte { + offset := len(b.data) + b.data = append(b.data, make([]byte, n)...) + return b.data[offset : offset+n] +} + +func (b *writeBuffer) Write(data []byte) (int, error) { + b.data = append(b.data, data...) + return len(data), nil +} + +const maxUint24 = int(^uint32(0) >> 8) + +func readUint24(b []byte) uint32 { + return uint32(b[2]) | uint32(b[1])<<8 | uint32(b[0])<<16 +} + +func putUint24(v uint32, b []byte) { + b[0] = byte(v >> 16) + b[1] = byte(v >> 8) + b[2] = byte(v) +} + +// growslice ensures b has the wanted length by either expanding it to its capacity +// or allocating a new slice if b has insufficient capacity. +func growslice(b []byte, wantLength int) []byte { + if len(b) >= wantLength { + return b + } + if cap(b) >= wantLength { + return b[:cap(b)] + } + return make([]byte, wantLength) +} diff --git a/p2p/rlpx/buffer_test.go b/p2p/rlpx/buffer_test.go new file mode 100644 index 00000000..9fee4172 --- /dev/null +++ b/p2p/rlpx/buffer_test.go @@ -0,0 +1,51 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlpx + +import ( + "bytes" + "testing" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/stretchr/testify/assert" +) + +func TestReadBufferReset(t *testing.T) { + reader := bytes.NewReader(hexutil.MustDecode("0x010202030303040505")) + var b readBuffer + + s1, _ := b.read(reader, 1) + s2, _ := b.read(reader, 2) + s3, _ := b.read(reader, 3) + + assert.Equal(t, []byte{1}, s1) + assert.Equal(t, []byte{2, 2}, s2) + assert.Equal(t, []byte{3, 3, 3}, s3) + + b.reset() + + s4, _ := b.read(reader, 1) + s5, _ := b.read(reader, 2) + + assert.Equal(t, []byte{4}, s4) + assert.Equal(t, []byte{5, 5}, s5) + + s6, err := b.read(reader, 2) + + assert.EqualError(t, err, "EOF") + assert.Nil(t, s6) +} diff --git a/p2p/rlpx/rlpx.go b/p2p/rlpx/rlpx.go new file mode 100644 index 00000000..8bd6f64b --- /dev/null +++ b/p2p/rlpx/rlpx.go @@ -0,0 +1,676 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package rlpx implements the RLPx transport protocol. +package rlpx + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/hmac" + "crypto/rand" + "encoding/binary" + "errors" + "fmt" + "hash" + "io" + mrand "math/rand" + "net" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/ecies" + "github.com/ethereum/go-ethereum/rlp" + "github.com/golang/snappy" + "golang.org/x/crypto/sha3" +) + +// Conn is an RLPx network connection. It wraps a low-level network connection. The +// underlying connection should not be used for other activity when it is wrapped by Conn. +// +// Before sending messages, a handshake must be performed by calling the Handshake method. +// This type is not generally safe for concurrent use, but reading and writing of messages +// may happen concurrently after the handshake. +type Conn struct { + dialDest *ecdsa.PublicKey + conn net.Conn + session *sessionState + + // These are the buffers for snappy compression. + // Compression is enabled if they are non-nil. + snappyReadBuffer []byte + snappyWriteBuffer []byte +} + +// sessionState contains the session keys. +type sessionState struct { + enc cipher.Stream + dec cipher.Stream + + egressMAC hashMAC + ingressMAC hashMAC + rbuf readBuffer + wbuf writeBuffer +} + +// hashMAC holds the state of the RLPx v4 MAC contraption. +type hashMAC struct { + cipher cipher.Block + hash hash.Hash + aesBuffer [16]byte + hashBuffer [32]byte + seedBuffer [32]byte +} + +func newHashMAC(cipher cipher.Block, h hash.Hash) hashMAC { + m := hashMAC{cipher: cipher, hash: h} + if cipher.BlockSize() != len(m.aesBuffer) { + panic(fmt.Errorf("invalid MAC cipher block size %d", cipher.BlockSize())) + } + if h.Size() != len(m.hashBuffer) { + panic(fmt.Errorf("invalid MAC digest size %d", h.Size())) + } + return m +} + +// NewConn wraps the given network connection. If dialDest is non-nil, the connection +// behaves as the initiator during the handshake. +func NewConn(conn net.Conn, dialDest *ecdsa.PublicKey) *Conn { + return &Conn{ + dialDest: dialDest, + conn: conn, + } +} + +// SetSnappy enables or disables snappy compression of messages. This is usually called +// after the devp2p Hello message exchange when the negotiated version indicates that +// compression is available on both ends of the connection. +func (c *Conn) SetSnappy(snappy bool) { + if snappy { + c.snappyReadBuffer = []byte{} + c.snappyWriteBuffer = []byte{} + } else { + c.snappyReadBuffer = nil + c.snappyWriteBuffer = nil + } +} + +// SetReadDeadline sets the deadline for all future read operations. +func (c *Conn) SetReadDeadline(time time.Time) error { + return c.conn.SetReadDeadline(time) +} + +// SetWriteDeadline sets the deadline for all future write operations. +func (c *Conn) SetWriteDeadline(time time.Time) error { + return c.conn.SetWriteDeadline(time) +} + +// SetDeadline sets the deadline for all future read and write operations. +func (c *Conn) SetDeadline(time time.Time) error { + return c.conn.SetDeadline(time) +} + +// Read reads a message from the connection. +// The returned data buffer is valid until the next call to Read. +func (c *Conn) Read() (code uint64, data []byte, wireSize int, err error) { + if c.session == nil { + panic("can't ReadMsg before handshake") + } + + frame, err := c.session.readFrame(c.conn) + if err != nil { + return 0, nil, 0, err + } + code, data, err = rlp.SplitUint64(frame) + if err != nil { + return 0, nil, 0, fmt.Errorf("invalid message code: %v", err) + } + wireSize = len(data) + + // If snappy is enabled, verify and decompress message. + if c.snappyReadBuffer != nil { + var actualSize int + actualSize, err = snappy.DecodedLen(data) + if err != nil { + return code, nil, 0, err + } + if actualSize > maxUint24 { + return code, nil, 0, errPlainMessageTooLarge + } + c.snappyReadBuffer = growslice(c.snappyReadBuffer, actualSize) + data, err = snappy.Decode(c.snappyReadBuffer, data) + } + return code, data, wireSize, err +} + +func (h *sessionState) readFrame(conn io.Reader) ([]byte, error) { + h.rbuf.reset() + + // Read the frame header. + header, err := h.rbuf.read(conn, 32) + if err != nil { + return nil, err + } + + // Verify header MAC. + wantHeaderMAC := h.ingressMAC.computeHeader(header[:16]) + if !hmac.Equal(wantHeaderMAC, header[16:]) { + return nil, errors.New("bad header MAC") + } + + // Decrypt the frame header to get the frame size. + h.dec.XORKeyStream(header[:16], header[:16]) + fsize := readUint24(header[:16]) + // Frame size rounded up to 16 byte boundary for padding. + rsize := fsize + if padding := fsize % 16; padding > 0 { + rsize += 16 - padding + } + + // Read the frame content. + frame, err := h.rbuf.read(conn, int(rsize)) + if err != nil { + return nil, err + } + + // Validate frame MAC. + frameMAC, err := h.rbuf.read(conn, 16) + if err != nil { + return nil, err + } + wantFrameMAC := h.ingressMAC.computeFrame(frame) + if !hmac.Equal(wantFrameMAC, frameMAC) { + return nil, errors.New("bad frame MAC") + } + + // Decrypt the frame data. + h.dec.XORKeyStream(frame, frame) + return frame[:fsize], nil +} + +// Write writes a message to the connection. +// +// Write returns the written size of the message data. This may be less than or equal to +// len(data) depending on whether snappy compression is enabled. +func (c *Conn) Write(code uint64, data []byte) (uint32, error) { + if c.session == nil { + panic("can't WriteMsg before handshake") + } + if len(data) > maxUint24 { + return 0, errPlainMessageTooLarge + } + if c.snappyWriteBuffer != nil { + // Ensure the buffer has sufficient size. + // Package snappy will allocate its own buffer if the provided + // one is smaller than MaxEncodedLen. + c.snappyWriteBuffer = growslice(c.snappyWriteBuffer, snappy.MaxEncodedLen(len(data))) + data = snappy.Encode(c.snappyWriteBuffer, data) + } + + wireSize := uint32(len(data)) + err := c.session.writeFrame(c.conn, code, data) + return wireSize, err +} + +func (h *sessionState) writeFrame(conn io.Writer, code uint64, data []byte) error { + h.wbuf.reset() + + // Write header. + fsize := rlp.IntSize(code) + len(data) + if fsize > maxUint24 { + return errPlainMessageTooLarge + } + header := h.wbuf.appendZero(16) + putUint24(uint32(fsize), header) + copy(header[3:], zeroHeader) + h.enc.XORKeyStream(header, header) + + // Write header MAC. + h.wbuf.Write(h.egressMAC.computeHeader(header)) + + // Encode and encrypt the frame data. + offset := len(h.wbuf.data) + h.wbuf.data = rlp.AppendUint64(h.wbuf.data, code) + h.wbuf.Write(data) + if padding := fsize % 16; padding > 0 { + h.wbuf.appendZero(16 - padding) + } + framedata := h.wbuf.data[offset:] + h.enc.XORKeyStream(framedata, framedata) + + // Write frame MAC. + h.wbuf.Write(h.egressMAC.computeFrame(framedata)) + + _, err := conn.Write(h.wbuf.data) + return err +} + +// computeHeader computes the MAC of a frame header. +func (m *hashMAC) computeHeader(header []byte) []byte { + sum1 := m.hash.Sum(m.hashBuffer[:0]) + return m.compute(sum1, header) +} + +// computeFrame computes the MAC of framedata. +func (m *hashMAC) computeFrame(framedata []byte) []byte { + m.hash.Write(framedata) + seed := m.hash.Sum(m.seedBuffer[:0]) + return m.compute(seed, seed[:16]) +} + +// compute computes the MAC of a 16-byte 'seed'. +// +// To do this, it encrypts the current value of the hash state, then XORs the ciphertext +// with seed. The obtained value is written back into the hash state and hash output is +// taken again. The first 16 bytes of the resulting sum are the MAC value. +// +// This MAC construction is a horrible, legacy thing. +func (m *hashMAC) compute(sum1, seed []byte) []byte { + if len(seed) != len(m.aesBuffer) { + panic("invalid MAC seed") + } + + m.cipher.Encrypt(m.aesBuffer[:], sum1) + for i := range m.aesBuffer { + m.aesBuffer[i] ^= seed[i] + } + m.hash.Write(m.aesBuffer[:]) + sum2 := m.hash.Sum(m.hashBuffer[:0]) + return sum2[:16] +} + +// Handshake performs the handshake. This must be called before any data is written +// or read from the connection. +func (c *Conn) Handshake(prv *ecdsa.PrivateKey) (*ecdsa.PublicKey, error) { + var ( + sec Secrets + err error + h handshakeState + ) + if c.dialDest != nil { + sec, err = h.runInitiator(c.conn, prv, c.dialDest) + } else { + sec, err = h.runRecipient(c.conn, prv) + } + if err != nil { + return nil, err + } + c.InitWithSecrets(sec) + c.session.rbuf = h.rbuf + c.session.wbuf = h.wbuf + return sec.remote, err +} + +// InitWithSecrets injects connection secrets as if a handshake had +// been performed. This cannot be called after the handshake. +func (c *Conn) InitWithSecrets(sec Secrets) { + if c.session != nil { + panic("can't handshake twice") + } + macc, err := aes.NewCipher(sec.MAC) + if err != nil { + panic("invalid MAC secret: " + err.Error()) + } + encc, err := aes.NewCipher(sec.AES) + if err != nil { + panic("invalid AES secret: " + err.Error()) + } + // we use an all-zeroes IV for AES because the key used + // for encryption is ephemeral. + iv := make([]byte, encc.BlockSize()) + c.session = &sessionState{ + enc: cipher.NewCTR(encc, iv), + dec: cipher.NewCTR(encc, iv), + egressMAC: newHashMAC(macc, sec.EgressMAC), + ingressMAC: newHashMAC(macc, sec.IngressMAC), + } +} + +// Close closes the underlying network connection. +func (c *Conn) Close() error { + return c.conn.Close() +} + +// Constants for the handshake. +const ( + 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) + + eciesOverhead = 65 /* pubkey */ + 16 /* IV */ + 32 /* MAC */ +) + +var ( + // this is used in place of actual frame header data. + // TODO: replace this when Msg contains the protocol type code. + zeroHeader = []byte{0xC2, 0x80, 0x80} + + // errPlainMessageTooLarge is returned if a decompressed message length exceeds + // the allowed 24 bits (i.e. length >= 16MB). + errPlainMessageTooLarge = errors.New("message length >= 16MB") +) + +// Secrets represents the connection secrets which are negotiated during the handshake. +type Secrets struct { + AES, MAC []byte + EgressMAC, IngressMAC hash.Hash + remote *ecdsa.PublicKey +} + +// handshakeState contains the state of the encryption handshake. +type handshakeState struct { + initiator bool + remote *ecies.PublicKey // remote-pubk + initNonce, respNonce []byte // nonce + randomPrivKey *ecies.PrivateKey // ecdhe-random + remoteRandomPub *ecies.PublicKey // ecdhe-random-pubk + + rbuf readBuffer + wbuf writeBuffer +} + +// RLPx v4 handshake auth (defined in EIP-8). +type authMsgV4 struct { + Signature [sigLen]byte + InitiatorPubkey [pubLen]byte + Nonce [shaLen]byte + Version uint + + // Ignore additional fields (forward-compatibility) + Rest []rlp.RawValue `rlp:"tail"` +} + +// RLPx v4 handshake response (defined in EIP-8). +type authRespV4 struct { + RandomPubkey [pubLen]byte + Nonce [shaLen]byte + Version uint + + // Ignore additional fields (forward-compatibility) + Rest []rlp.RawValue `rlp:"tail"` +} + +// runRecipient negotiates a session token on conn. +// it should be called on the listening side of the connection. +// +// prv is the local client's private key. +func (h *handshakeState) runRecipient(conn io.ReadWriter, prv *ecdsa.PrivateKey) (s Secrets, err error) { + authMsg := new(authMsgV4) + authPacket, err := h.readMsg(authMsg, prv, conn) + if err != nil { + return s, err + } + if err := h.handleAuthMsg(authMsg, prv); err != nil { + return s, err + } + + authRespMsg, err := h.makeAuthResp() + if err != nil { + return s, err + } + authRespPacket, err := h.sealEIP8(authRespMsg) + if err != nil { + return s, err + } + if _, err = conn.Write(authRespPacket); err != nil { + return s, err + } + + return h.secrets(authPacket, authRespPacket) +} + +func (h *handshakeState) handleAuthMsg(msg *authMsgV4, prv *ecdsa.PrivateKey) error { + // Import the remote identity. + rpub, err := importPublicKey(msg.InitiatorPubkey[:]) + if err != nil { + return err + } + h.initNonce = msg.Nonce[:] + h.remote = rpub + + // Generate random keypair for ECDH. + // If a private key is already set, use it instead of generating one (for testing). + if h.randomPrivKey == nil { + h.randomPrivKey, err = ecies.GenerateKey(rand.Reader, crypto.S256(), nil) + if err != nil { + return err + } + } + + // Check the signature. + token, err := h.staticSharedSecret(prv) + if err != nil { + return err + } + signedMsg := xor(token, h.initNonce) + remoteRandomPub, err := crypto.Ecrecover(signedMsg, msg.Signature[:]) + if err != nil { + return err + } + h.remoteRandomPub, _ = importPublicKey(remoteRandomPub) + return nil +} + +// secrets is called after the handshake is completed. +// It extracts the connection secrets from the handshake values. +func (h *handshakeState) secrets(auth, authResp []byte) (Secrets, error) { + ecdheSecret, err := h.randomPrivKey.GenerateShared(h.remoteRandomPub, sskLen, sskLen) + if err != nil { + return Secrets{}, err + } + + // derive base secrets from ephemeral key agreement + sharedSecret := crypto.Keccak256(ecdheSecret, crypto.Keccak256(h.respNonce, h.initNonce)) + aesSecret := crypto.Keccak256(ecdheSecret, sharedSecret) + s := Secrets{ + remote: h.remote.ExportECDSA(), + AES: aesSecret, + MAC: crypto.Keccak256(ecdheSecret, aesSecret), + } + + // setup sha3 instances for the MACs + mac1 := sha3.NewLegacyKeccak256() + mac1.Write(xor(s.MAC, h.respNonce)) + mac1.Write(auth) + mac2 := sha3.NewLegacyKeccak256() + mac2.Write(xor(s.MAC, h.initNonce)) + mac2.Write(authResp) + if h.initiator { + s.EgressMAC, s.IngressMAC = mac1, mac2 + } else { + s.EgressMAC, s.IngressMAC = mac2, mac1 + } + + return s, nil +} + +// staticSharedSecret returns the static shared secret, the result +// of key agreement between the local and remote static node key. +func (h *handshakeState) staticSharedSecret(prv *ecdsa.PrivateKey) ([]byte, error) { + return ecies.ImportECDSA(prv).GenerateShared(h.remote, sskLen, sskLen) +} + +// runInitiator negotiates a session token on conn. +// it should be called on the dialing side of the connection. +// +// prv is the local client's private key. +func (h *handshakeState) runInitiator(conn io.ReadWriter, prv *ecdsa.PrivateKey, remote *ecdsa.PublicKey) (s Secrets, err error) { + h.initiator = true + h.remote = ecies.ImportECDSAPublic(remote) + + authMsg, err := h.makeAuthMsg(prv) + if err != nil { + return s, err + } + authPacket, err := h.sealEIP8(authMsg) + if err != nil { + return s, err + } + + if _, err = conn.Write(authPacket); err != nil { + return s, err + } + + authRespMsg := new(authRespV4) + authRespPacket, err := h.readMsg(authRespMsg, prv, conn) + if err != nil { + return s, err + } + if err := h.handleAuthResp(authRespMsg); err != nil { + return s, err + } + + return h.secrets(authPacket, authRespPacket) +} + +// makeAuthMsg creates the initiator handshake message. +func (h *handshakeState) makeAuthMsg(prv *ecdsa.PrivateKey) (*authMsgV4, error) { + // Generate random initiator nonce. + h.initNonce = make([]byte, shaLen) + _, err := rand.Read(h.initNonce) + if err != nil { + return nil, err + } + // Generate random keypair to for ECDH. + h.randomPrivKey, err = ecies.GenerateKey(rand.Reader, crypto.S256(), nil) + if err != nil { + return nil, err + } + + // Sign known message: static-shared-secret ^ nonce + token, err := h.staticSharedSecret(prv) + if err != nil { + return nil, err + } + signed := xor(token, h.initNonce) + signature, err := crypto.Sign(signed, h.randomPrivKey.ExportECDSA()) + if err != nil { + return nil, err + } + + msg := new(authMsgV4) + copy(msg.Signature[:], signature) + copy(msg.InitiatorPubkey[:], crypto.FromECDSAPub(&prv.PublicKey)[1:]) + copy(msg.Nonce[:], h.initNonce) + msg.Version = 4 + return msg, nil +} + +func (h *handshakeState) handleAuthResp(msg *authRespV4) (err error) { + h.respNonce = msg.Nonce[:] + h.remoteRandomPub, err = importPublicKey(msg.RandomPubkey[:]) + return err +} + +func (h *handshakeState) makeAuthResp() (msg *authRespV4, err error) { + // Generate random nonce. + h.respNonce = make([]byte, shaLen) + if _, err = rand.Read(h.respNonce); err != nil { + return nil, err + } + + msg = new(authRespV4) + copy(msg.Nonce[:], h.respNonce) + copy(msg.RandomPubkey[:], exportPubkey(&h.randomPrivKey.PublicKey)) + msg.Version = 4 + return msg, nil +} + +// readMsg reads an encrypted handshake message, decoding it into msg. +func (h *handshakeState) readMsg(msg interface{}, prv *ecdsa.PrivateKey, r io.Reader) ([]byte, error) { + h.rbuf.reset() + h.rbuf.grow(512) + + // Read the size prefix. + prefix, err := h.rbuf.read(r, 2) + if err != nil { + return nil, err + } + size := binary.BigEndian.Uint16(prefix) + + // Read the handshake packet. + packet, err := h.rbuf.read(r, int(size)) + if err != nil { + return nil, err + } + dec, err := ecies.ImportECDSA(prv).Decrypt(packet, nil, prefix) + if err != nil { + return nil, err + } + // Can't use rlp.DecodeBytes here because it rejects + // trailing data (forward-compatibility). + s := rlp.NewStream(bytes.NewReader(dec), 0) + err = s.Decode(msg) + return h.rbuf.data[:len(prefix)+len(packet)], err +} + +// sealEIP8 encrypts a handshake message. +func (h *handshakeState) sealEIP8(msg interface{}) ([]byte, error) { + h.wbuf.reset() + + // Write the message plaintext. + if err := rlp.Encode(&h.wbuf, msg); err != nil { + return nil, err + } + // Pad with random amount of data. the amount needs to be at least 100 bytes to make + // the message distinguishable from pre-EIP-8 handshakes. + h.wbuf.appendZero(mrand.Intn(100) + 100) + + prefix := make([]byte, 2) + binary.BigEndian.PutUint16(prefix, uint16(len(h.wbuf.data)+eciesOverhead)) + + enc, err := ecies.Encrypt(rand.Reader, h.remote, h.wbuf.data, nil, prefix) + return append(prefix, enc...), err +} + +// importPublicKey unmarshals 512 bit public keys. +func importPublicKey(pubKey []byte) (*ecies.PublicKey, error) { + var pubKey65 []byte + switch len(pubKey) { + case 64: + // add 'uncompressed key' flag + pubKey65 = append([]byte{0x04}, pubKey...) + case 65: + pubKey65 = pubKey + default: + return nil, fmt.Errorf("invalid public key length %v (expect 64/65)", len(pubKey)) + } + // TODO: fewer pointless conversions + pub, err := crypto.UnmarshalPubkey(pubKey65) + if err != nil { + return nil, err + } + return ecies.ImportECDSAPublic(pub), nil +} + +func exportPubkey(pub *ecies.PublicKey) []byte { + if pub == nil { + panic("nil pubkey") + } + return elliptic.Marshal(pub.Curve, pub.X, pub.Y)[1:] +} + +func xor(one, other []byte) (xor []byte) { + xor = make([]byte, len(one)) + for i := 0; i < len(one); i++ { + xor[i] = one[i] ^ other[i] + } + return xor +} diff --git a/p2p/rlpx/rlpx_test.go b/p2p/rlpx/rlpx_test.go new file mode 100644 index 00000000..28759f2b --- /dev/null +++ b/p2p/rlpx/rlpx_test.go @@ -0,0 +1,453 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlpx + +import ( + "bytes" + "crypto/ecdsa" + "encoding/hex" + "fmt" + "io" + "math/rand" + "net" + "reflect" + "strings" + "testing" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/ecies" + "github.com/ethereum/go-ethereum/p2p/simulations/pipes" + "github.com/ethereum/go-ethereum/rlp" + "github.com/stretchr/testify/assert" +) + +type message struct { + code uint64 + data []byte + err error +} + +func TestHandshake(t *testing.T) { + p1, p2 := createPeers(t) + p1.Close() + p2.Close() +} + +// This test checks that messages can be sent and received through WriteMsg/ReadMsg. +func TestReadWriteMsg(t *testing.T) { + peer1, peer2 := createPeers(t) + defer peer1.Close() + defer peer2.Close() + + testCode := uint64(23) + testData := []byte("test") + checkMsgReadWrite(t, peer1, peer2, testCode, testData) + + t.Log("enabling snappy") + peer1.SetSnappy(true) + peer2.SetSnappy(true) + checkMsgReadWrite(t, peer1, peer2, testCode, testData) +} + +func checkMsgReadWrite(t *testing.T, p1, p2 *Conn, msgCode uint64, msgData []byte) { + // Set up the reader. + ch := make(chan message, 1) + go func() { + var msg message + msg.code, msg.data, _, msg.err = p1.Read() + ch <- msg + }() + + // Write the message. + _, err := p2.Write(msgCode, msgData) + if err != nil { + t.Fatal(err) + } + + // Check it was received correctly. + msg := <-ch + assert.Equal(t, msgCode, msg.code, "wrong message code returned from ReadMsg") + assert.Equal(t, msgData, msg.data, "wrong message data returned from ReadMsg") +} + +func createPeers(t *testing.T) (peer1, peer2 *Conn) { + conn1, conn2 := net.Pipe() + key1, key2 := newkey(), newkey() + peer1 = NewConn(conn1, &key2.PublicKey) // dialer + peer2 = NewConn(conn2, nil) // listener + doHandshake(t, peer1, peer2, key1, key2) + return peer1, peer2 +} + +func doHandshake(t *testing.T, peer1, peer2 *Conn, key1, key2 *ecdsa.PrivateKey) { + keyChan := make(chan *ecdsa.PublicKey, 1) + go func() { + pubKey, err := peer2.Handshake(key2) + if err != nil { + t.Errorf("peer2 could not do handshake: %v", err) + } + keyChan <- pubKey + }() + + pubKey2, err := peer1.Handshake(key1) + if err != nil { + t.Errorf("peer1 could not do handshake: %v", err) + } + pubKey1 := <-keyChan + + // Confirm the handshake was successful. + if !reflect.DeepEqual(pubKey1, &key1.PublicKey) || !reflect.DeepEqual(pubKey2, &key2.PublicKey) { + t.Fatal("unsuccessful handshake") + } +} + +// This test checks the frame data of written messages. +func TestFrameReadWrite(t *testing.T) { + conn := NewConn(nil, nil) + hash := fakeHash([]byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) + conn.InitWithSecrets(Secrets{ + AES: crypto.Keccak256(), + MAC: crypto.Keccak256(), + IngressMAC: hash, + EgressMAC: hash, + }) + h := conn.session + + golden := unhex(` + 00828ddae471818bb0bfa6b551d1cb42 + 01010101010101010101010101010101 + ba628a4ba590cb43f7848f41c4382885 + 01010101010101010101010101010101 + `) + msgCode := uint64(8) + msg := []uint{1, 2, 3, 4} + msgEnc, _ := rlp.EncodeToBytes(msg) + + // Check writeFrame. The frame that's written should be equal to the test vector. + buf := new(bytes.Buffer) + if err := h.writeFrame(buf, msgCode, msgEnc); err != nil { + t.Fatalf("WriteMsg error: %v", err) + } + if !bytes.Equal(buf.Bytes(), golden) { + t.Fatalf("output mismatch:\n got: %x\n want: %x", buf.Bytes(), golden) + } + + // Check readFrame on the test vector. + content, err := h.readFrame(bytes.NewReader(golden)) + if err != nil { + t.Fatalf("ReadMsg error: %v", err) + } + wantContent := unhex("08C401020304") + if !bytes.Equal(content, wantContent) { + t.Errorf("frame content mismatch:\ngot %x\nwant %x", content, wantContent) + } +} + +type fakeHash []byte + +func (fakeHash) Write(p []byte) (int, error) { return len(p), nil } +func (fakeHash) Reset() {} +func (fakeHash) BlockSize() int { return 0 } +func (h fakeHash) Size() int { return len(h) } +func (h fakeHash) Sum(b []byte) []byte { return append(b, h...) } + +type handshakeAuthTest struct { + input string + wantVersion uint + wantRest []rlp.RawValue +} + +var eip8HandshakeAuthTests = []handshakeAuthTest{ + // (Auth₂) EIP-8 encoding + { + input: ` + 01b304ab7578555167be8154d5cc456f567d5ba302662433674222360f08d5f1534499d3678b513b + 0fca474f3a514b18e75683032eb63fccb16c156dc6eb2c0b1593f0d84ac74f6e475f1b8d56116b84 + 9634a8c458705bf83a626ea0384d4d7341aae591fae42ce6bd5c850bfe0b999a694a49bbbaf3ef6c + da61110601d3b4c02ab6c30437257a6e0117792631a4b47c1d52fc0f8f89caadeb7d02770bf999cc + 147d2df3b62e1ffb2c9d8c125a3984865356266bca11ce7d3a688663a51d82defaa8aad69da39ab6 + d5470e81ec5f2a7a47fb865ff7cca21516f9299a07b1bc63ba56c7a1a892112841ca44b6e0034dee + 70c9adabc15d76a54f443593fafdc3b27af8059703f88928e199cb122362a4b35f62386da7caad09 + c001edaeb5f8a06d2b26fb6cb93c52a9fca51853b68193916982358fe1e5369e249875bb8d0d0ec3 + 6f917bc5e1eafd5896d46bd61ff23f1a863a8a8dcd54c7b109b771c8e61ec9c8908c733c0263440e + 2aa067241aaa433f0bb053c7b31a838504b148f570c0ad62837129e547678c5190341e4f1693956c + 3bf7678318e2d5b5340c9e488eefea198576344afbdf66db5f51204a6961a63ce072c8926c + `, + wantVersion: 4, + wantRest: []rlp.RawValue{}, + }, + // (Auth₃) RLPx v4 EIP-8 encoding with version 56, additional list elements + { + input: ` + 01b8044c6c312173685d1edd268aa95e1d495474c6959bcdd10067ba4c9013df9e40ff45f5bfd6f7 + 2471f93a91b493f8e00abc4b80f682973de715d77ba3a005a242eb859f9a211d93a347fa64b597bf + 280a6b88e26299cf263b01b8dfdb712278464fd1c25840b995e84d367d743f66c0e54a586725b7bb + f12acca27170ae3283c1073adda4b6d79f27656993aefccf16e0d0409fe07db2dc398a1b7e8ee93b + cd181485fd332f381d6a050fba4c7641a5112ac1b0b61168d20f01b479e19adf7fdbfa0905f63352 + bfc7e23cf3357657455119d879c78d3cf8c8c06375f3f7d4861aa02a122467e069acaf513025ff19 + 6641f6d2810ce493f51bee9c966b15c5043505350392b57645385a18c78f14669cc4d960446c1757 + 1b7c5d725021babbcd786957f3d17089c084907bda22c2b2675b4378b114c601d858802a55345a15 + 116bc61da4193996187ed70d16730e9ae6b3bb8787ebcaea1871d850997ddc08b4f4ea668fbf3740 + 7ac044b55be0908ecb94d4ed172ece66fd31bfdadf2b97a8bc690163ee11f5b575a4b44e36e2bfb2 + f0fce91676fd64c7773bac6a003f481fddd0bae0a1f31aa27504e2a533af4cef3b623f4791b2cca6 + d490 + `, + wantVersion: 56, + wantRest: []rlp.RawValue{{0x01}, {0x02}, {0xC2, 0x04, 0x05}}, + }, +} + +type handshakeAckTest struct { + input string + wantVersion uint + wantRest []rlp.RawValue +} + +var eip8HandshakeRespTests = []handshakeAckTest{ + // (Ack₂) EIP-8 encoding + { + input: ` + 01ea0451958701280a56482929d3b0757da8f7fbe5286784beead59d95089c217c9b917788989470 + b0e330cc6e4fb383c0340ed85fab836ec9fb8a49672712aeabbdfd1e837c1ff4cace34311cd7f4de + 05d59279e3524ab26ef753a0095637ac88f2b499b9914b5f64e143eae548a1066e14cd2f4bd7f814 + c4652f11b254f8a2d0191e2f5546fae6055694aed14d906df79ad3b407d94692694e259191cde171 + ad542fc588fa2b7333313d82a9f887332f1dfc36cea03f831cb9a23fea05b33deb999e85489e645f + 6aab1872475d488d7bd6c7c120caf28dbfc5d6833888155ed69d34dbdc39c1f299be1057810f34fb + e754d021bfca14dc989753d61c413d261934e1a9c67ee060a25eefb54e81a4d14baff922180c395d + 3f998d70f46f6b58306f969627ae364497e73fc27f6d17ae45a413d322cb8814276be6ddd13b885b + 201b943213656cde498fa0e9ddc8e0b8f8a53824fbd82254f3e2c17e8eaea009c38b4aa0a3f306e8 + 797db43c25d68e86f262e564086f59a2fc60511c42abfb3057c247a8a8fe4fb3ccbadde17514b7ac + 8000cdb6a912778426260c47f38919a91f25f4b5ffb455d6aaaf150f7e5529c100ce62d6d92826a7 + 1778d809bdf60232ae21ce8a437eca8223f45ac37f6487452ce626f549b3b5fdee26afd2072e4bc7 + 5833c2464c805246155289f4 + `, + wantVersion: 4, + wantRest: []rlp.RawValue{}, + }, + // (Ack₃) EIP-8 encoding with version 57, additional list elements + { + input: ` + 01f004076e58aae772bb101ab1a8e64e01ee96e64857ce82b1113817c6cdd52c09d26f7b90981cd7 + ae835aeac72e1573b8a0225dd56d157a010846d888dac7464baf53f2ad4e3d584531fa203658fab0 + 3a06c9fd5e35737e417bc28c1cbf5e5dfc666de7090f69c3b29754725f84f75382891c561040ea1d + dc0d8f381ed1b9d0d4ad2a0ec021421d847820d6fa0ba66eaf58175f1b235e851c7e2124069fbc20 + 2888ddb3ac4d56bcbd1b9b7eab59e78f2e2d400905050f4a92dec1c4bdf797b3fc9b2f8e84a482f3 + d800386186712dae00d5c386ec9387a5e9c9a1aca5a573ca91082c7d68421f388e79127a5177d4f8 + 590237364fd348c9611fa39f78dcdceee3f390f07991b7b47e1daa3ebcb6ccc9607811cb17ce51f1 + c8c2c5098dbdd28fca547b3f58c01a424ac05f869f49c6a34672ea2cbbc558428aa1fe48bbfd6115 + 8b1b735a65d99f21e70dbc020bfdface9f724a0d1fb5895db971cc81aa7608baa0920abb0a565c9c + 436e2fd13323428296c86385f2384e408a31e104670df0791d93e743a3a5194ee6b076fb6323ca59 + 3011b7348c16cf58f66b9633906ba54a2ee803187344b394f75dd2e663a57b956cb830dd7a908d4f + 39a2336a61ef9fda549180d4ccde21514d117b6c6fd07a9102b5efe710a32af4eeacae2cb3b1dec0 + 35b9593b48b9d3ca4c13d245d5f04169b0b1 + `, + wantVersion: 57, + wantRest: []rlp.RawValue{{0x06}, {0xC2, 0x07, 0x08}, {0x81, 0xFA}}, + }, +} + +var ( + keyA, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + keyB, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") +) + +func TestHandshakeForwardCompatibility(t *testing.T) { + var ( + pubA = crypto.FromECDSAPub(&keyA.PublicKey)[1:] + pubB = crypto.FromECDSAPub(&keyB.PublicKey)[1:] + ephA, _ = crypto.HexToECDSA("869d6ecf5211f1cc60418a13b9d870b22959d0c16f02bec714c960dd2298a32d") + ephB, _ = crypto.HexToECDSA("e238eb8e04fee6511ab04c6dd3c89ce097b11f25d584863ac2b6d5b35b1847e4") + ephPubA = crypto.FromECDSAPub(&ephA.PublicKey)[1:] + ephPubB = crypto.FromECDSAPub(&ephB.PublicKey)[1:] + nonceA = unhex("7e968bba13b6c50e2c4cd7f241cc0d64d1ac25c7f5952df231ac6a2bda8ee5d6") + nonceB = unhex("559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd") + _, _, _, _ = pubA, pubB, ephPubA, ephPubB + authSignature = unhex("299ca6acfd35e3d72d8ba3d1e2b60b5561d5af5218eb5bc182045769eb4226910a301acae3b369fffc4a4899d6b02531e89fd4fe36a2cf0d93607ba470b50f7800") + _ = authSignature + ) + makeAuth := func(test handshakeAuthTest) *authMsgV4 { + msg := &authMsgV4{Version: test.wantVersion, Rest: test.wantRest} + copy(msg.Signature[:], authSignature) + copy(msg.InitiatorPubkey[:], pubA) + copy(msg.Nonce[:], nonceA) + return msg + } + makeAck := func(test handshakeAckTest) *authRespV4 { + msg := &authRespV4{Version: test.wantVersion, Rest: test.wantRest} + copy(msg.RandomPubkey[:], ephPubB) + copy(msg.Nonce[:], nonceB) + return msg + } + + // check auth msg parsing + for _, test := range eip8HandshakeAuthTests { + var h handshakeState + r := bytes.NewReader(unhex(test.input)) + msg := new(authMsgV4) + ciphertext, err := h.readMsg(msg, keyB, r) + if err != nil { + t.Errorf("error for input %x:\n %v", unhex(test.input), err) + continue + } + if !bytes.Equal(ciphertext, unhex(test.input)) { + t.Errorf("wrong ciphertext for input %x:\n %x", unhex(test.input), ciphertext) + } + want := makeAuth(test) + if !reflect.DeepEqual(msg, want) { + t.Errorf("wrong msg for input %x:\ngot %s\nwant %s", unhex(test.input), spew.Sdump(msg), spew.Sdump(want)) + } + } + + // check auth resp parsing + for _, test := range eip8HandshakeRespTests { + var h handshakeState + input := unhex(test.input) + r := bytes.NewReader(input) + msg := new(authRespV4) + ciphertext, err := h.readMsg(msg, keyA, r) + if err != nil { + t.Errorf("error for input %x:\n %v", input, err) + continue + } + if !bytes.Equal(ciphertext, input) { + t.Errorf("wrong ciphertext for input %x:\n %x", input, err) + } + want := makeAck(test) + if !reflect.DeepEqual(msg, want) { + t.Errorf("wrong msg for input %x:\ngot %s\nwant %s", input, spew.Sdump(msg), spew.Sdump(want)) + } + } + + // check derivation for (Auth₂, Ack₂) on recipient side + var ( + hs = &handshakeState{ + initiator: false, + respNonce: nonceB, + randomPrivKey: ecies.ImportECDSA(ephB), + } + authCiphertext = unhex(eip8HandshakeAuthTests[0].input) + authRespCiphertext = unhex(eip8HandshakeRespTests[0].input) + authMsg = makeAuth(eip8HandshakeAuthTests[0]) + wantAES = unhex("80e8632c05fed6fc2a13b0f8d31a3cf645366239170ea067065aba8e28bac487") + wantMAC = unhex("2ea74ec5dae199227dff1af715362700e989d889d7a493cb0639691efb8e5f98") + wantFooIngressHash = unhex("0c7ec6340062cc46f5e9f1e3cf86f8c8c403c5a0964f5df0ebd34a75ddc86db5") + ) + if err := hs.handleAuthMsg(authMsg, keyB); err != nil { + t.Fatalf("handleAuthMsg: %v", err) + } + derived, err := hs.secrets(authCiphertext, authRespCiphertext) + if err != nil { + t.Fatalf("secrets: %v", err) + } + if !bytes.Equal(derived.AES, wantAES) { + t.Errorf("aes-secret mismatch:\ngot %x\nwant %x", derived.AES, wantAES) + } + if !bytes.Equal(derived.MAC, wantMAC) { + t.Errorf("mac-secret mismatch:\ngot %x\nwant %x", derived.MAC, wantMAC) + } + io.WriteString(derived.IngressMAC, "foo") + fooIngressHash := derived.IngressMAC.Sum(nil) + if !bytes.Equal(fooIngressHash, wantFooIngressHash) { + t.Errorf("ingress-mac('foo') mismatch:\ngot %x\nwant %x", fooIngressHash, wantFooIngressHash) + } +} + +func BenchmarkHandshakeRead(b *testing.B) { + var input = unhex(eip8HandshakeAuthTests[0].input) + + for i := 0; i < b.N; i++ { + var ( + h handshakeState + r = bytes.NewReader(input) + msg = new(authMsgV4) + ) + if _, err := h.readMsg(msg, keyB, r); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkThroughput(b *testing.B) { + pipe1, pipe2, err := pipes.TCPPipe() + if err != nil { + b.Fatal(err) + } + + var ( + conn1, conn2 = NewConn(pipe1, nil), NewConn(pipe2, &keyA.PublicKey) + handshakeDone = make(chan error, 1) + msgdata = make([]byte, 1024) + rand = rand.New(rand.NewSource(1337)) + ) + rand.Read(msgdata) + + // Server side. + go func() { + defer conn1.Close() + // Perform handshake. + _, err := conn1.Handshake(keyA) + handshakeDone <- err + if err != nil { + return + } + conn1.SetSnappy(true) + // Keep sending messages until connection closed. + for { + if _, err := conn1.Write(0, msgdata); err != nil { + return + } + } + }() + + // Set up client side. + defer conn2.Close() + if _, err := conn2.Handshake(keyB); err != nil { + b.Fatal("client handshake error:", err) + } + conn2.SetSnappy(true) + if err := <-handshakeDone; err != nil { + b.Fatal("server hanshake error:", err) + } + + // Read N messages. + b.SetBytes(int64(len(msgdata))) + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _, _, err := conn2.Read() + if err != nil { + b.Fatal("read error:", err) + } + } +} + +func unhex(str string) []byte { + r := strings.NewReplacer("\t", "", " ", "", "\n", "") + b, err := hex.DecodeString(r.Replace(str)) + if err != nil { + panic(fmt.Sprintf("invalid hex string: %q", str)) + } + return b +} + +func newkey() *ecdsa.PrivateKey { + key, err := crypto.GenerateKey() + if err != nil { + panic("couldn't generate key: " + err.Error()) + } + return key +} diff --git a/p2p/rlpx_test.go b/p2p/rlpx_test.go deleted file mode 100644 index 3e0f2496..00000000 --- a/p2p/rlpx_test.go +++ /dev/null @@ -1,600 +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 p2p - -import ( - "bytes" - "crypto/ecdsa" - "crypto/rand" - "errors" - "fmt" - "io" - "io/ioutil" - "net" - "reflect" - "strings" - "sync" - "testing" - "time" - - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/crypto/ecies" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/pipes" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/davecgh/go-spew/spew" - "golang.org/x/crypto/sha3" -) - -func TestSharedSecret(t *testing.T) { - prv0, _ := crypto.GenerateKey() // = ecdsa.GenerateKey(crypto.S256(), rand.Reader) - pub0 := &prv0.PublicKey - prv1, _ := crypto.GenerateKey() - pub1 := &prv1.PublicKey - - ss0, err := ecies.ImportECDSA(prv0).GenerateShared(ecies.ImportECDSAPublic(pub1), sskLen, sskLen) - if err != nil { - return - } - ss1, err := ecies.ImportECDSA(prv1).GenerateShared(ecies.ImportECDSAPublic(pub0), sskLen, sskLen) - if err != nil { - return - } - t.Logf("Secret:\n%v %x\n%v %x", len(ss0), ss0, len(ss0), ss1) - if !bytes.Equal(ss0, ss1) { - t.Errorf("dont match :(") - } -} - -func TestEncHandshake(t *testing.T) { - for i := 0; i < 10; i++ { - start := time.Now() - if err := testEncHandshake(nil); err != nil { - t.Fatalf("i=%d %v", i, err) - } - t.Logf("(without token) %d %v\n", i+1, time.Since(start)) - } - for i := 0; i < 10; i++ { - tok := make([]byte, shaLen) - rand.Reader.Read(tok) - start := time.Now() - if err := testEncHandshake(tok); err != nil { - t.Fatalf("i=%d %v", i, err) - } - t.Logf("(with token) %d %v\n", i+1, time.Since(start)) - } -} - -func testEncHandshake(token []byte) error { - type result struct { - side string - pubkey *ecdsa.PublicKey - err error - } - var ( - prv0, _ = crypto.GenerateKey() - prv1, _ = crypto.GenerateKey() - fd0, fd1 = net.Pipe() - c0, c1 = newRLPX(fd0).(*rlpx), newRLPX(fd1).(*rlpx) - output = make(chan result) - ) - - go func() { - r := result{side: "initiator"} - defer func() { output <- r }() - defer fd0.Close() - - r.pubkey, r.err = c0.doEncHandshake(prv0, &prv1.PublicKey) - if r.err != nil { - return - } - if !reflect.DeepEqual(r.pubkey, &prv1.PublicKey) { - r.err = fmt.Errorf("remote pubkey mismatch: got %v, want: %v", r.pubkey, &prv1.PublicKey) - } - }() - go func() { - r := result{side: "receiver"} - defer func() { output <- r }() - defer fd1.Close() - - r.pubkey, r.err = c1.doEncHandshake(prv1, nil) - if r.err != nil { - return - } - if !reflect.DeepEqual(r.pubkey, &prv0.PublicKey) { - r.err = fmt.Errorf("remote ID mismatch: got %v, want: %v", r.pubkey, &prv0.PublicKey) - } - }() - - // wait for results from both sides - r1, r2 := <-output, <-output - if r1.err != nil { - return fmt.Errorf("%s side error: %v", r1.side, r1.err) - } - if r2.err != nil { - return fmt.Errorf("%s side error: %v", r2.side, r2.err) - } - - // compare derived secrets - if !reflect.DeepEqual(c0.rw.egressMAC, c1.rw.ingressMAC) { - return fmt.Errorf("egress mac mismatch:\n c0.rw: %#v\n c1.rw: %#v", c0.rw.egressMAC, c1.rw.ingressMAC) - } - if !reflect.DeepEqual(c0.rw.ingressMAC, c1.rw.egressMAC) { - return fmt.Errorf("ingress mac mismatch:\n c0.rw: %#v\n c1.rw: %#v", c0.rw.ingressMAC, c1.rw.egressMAC) - } - if !reflect.DeepEqual(c0.rw.enc, c1.rw.enc) { - return fmt.Errorf("enc cipher mismatch:\n c0.rw: %#v\n c1.rw: %#v", c0.rw.enc, c1.rw.enc) - } - if !reflect.DeepEqual(c0.rw.dec, c1.rw.dec) { - return fmt.Errorf("dec cipher mismatch:\n c0.rw: %#v\n c1.rw: %#v", c0.rw.dec, c1.rw.dec) - } - return nil -} - -func TestProtocolHandshake(t *testing.T) { - var ( - prv0, _ = crypto.GenerateKey() - pub0 = crypto.FromECDSAPub(&prv0.PublicKey)[1:] - hs0 = &protoHandshake{Version: 3, ID: pub0, Caps: []Cap{{"a", 0}, {"b", 2}}} - - prv1, _ = crypto.GenerateKey() - pub1 = crypto.FromECDSAPub(&prv1.PublicKey)[1:] - hs1 = &protoHandshake{Version: 3, ID: pub1, Caps: []Cap{{"c", 1}, {"d", 3}}} - - wg sync.WaitGroup - ) - - fd0, fd1, err := pipes.TCPPipe() - if err != nil { - t.Fatal(err) - } - - wg.Add(2) - go func() { - defer wg.Done() - defer fd0.Close() - rlpx := newRLPX(fd0) - rpubkey, err := rlpx.doEncHandshake(prv0, &prv1.PublicKey) - if err != nil { - t.Errorf("dial side enc handshake failed: %v", err) - return - } - if !reflect.DeepEqual(rpubkey, &prv1.PublicKey) { - t.Errorf("dial side remote pubkey mismatch: got %v, want %v", rpubkey, &prv1.PublicKey) - return - } - - phs, err := rlpx.doProtoHandshake(hs0) - if err != nil { - t.Errorf("dial side proto handshake error: %v", err) - return - } - phs.Rest = nil - if !reflect.DeepEqual(phs, hs1) { - t.Errorf("dial side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs1)) - return - } - rlpx.close(DiscQuitting) - }() - go func() { - defer wg.Done() - defer fd1.Close() - rlpx := newRLPX(fd1) - rpubkey, err := rlpx.doEncHandshake(prv1, nil) - if err != nil { - t.Errorf("listen side enc handshake failed: %v", err) - return - } - if !reflect.DeepEqual(rpubkey, &prv0.PublicKey) { - t.Errorf("listen side remote pubkey mismatch: got %v, want %v", rpubkey, &prv0.PublicKey) - return - } - - phs, err := rlpx.doProtoHandshake(hs1) - if err != nil { - t.Errorf("listen side proto handshake error: %v", err) - return - } - phs.Rest = nil - if !reflect.DeepEqual(phs, hs0) { - t.Errorf("listen side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs0)) - return - } - - if err := ExpectMsg(rlpx, discMsg, []DiscReason{DiscQuitting}); err != nil { - t.Errorf("error receiving disconnect: %v", err) - } - }() - wg.Wait() -} - -func TestProtocolHandshakeErrors(t *testing.T) { - tests := []struct { - code uint64 - msg interface{} - err error - }{ - { - code: discMsg, - msg: []DiscReason{DiscQuitting}, - err: DiscQuitting, - }, - { - code: 0x989898, - msg: []byte{1}, - err: errors.New("expected handshake, got 989898"), - }, - { - code: handshakeMsg, - msg: make([]byte, baseProtocolMaxMsgSize+2), - err: errors.New("message too big"), - }, - { - code: handshakeMsg, - msg: []byte{1, 2, 3}, - err: newPeerError(errInvalidMsg, "(code 0) (size 4) rlp: expected input list for p2p.protoHandshake"), - }, - { - code: handshakeMsg, - msg: &protoHandshake{Version: 3}, - err: DiscInvalidIdentity, - }, - } - - for i, test := range tests { - p1, p2 := MsgPipe() - go Send(p1, test.code, test.msg) - _, err := readProtocolHandshake(p2) - if !reflect.DeepEqual(err, test.err) { - t.Errorf("test %d: error mismatch: got %q, want %q", i, err, test.err) - } - } -} - -func TestRLPXFrameFake(t *testing.T) { - buf := new(bytes.Buffer) - hash := fakeHash([]byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) - rw := newRLPXFrameRW(buf, secrets{ - AES: crypto.Keccak256(), - MAC: crypto.Keccak256(), - IngressMAC: hash, - EgressMAC: hash, - }) - - golden := unhex(` -00828ddae471818bb0bfa6b551d1cb42 -01010101010101010101010101010101 -ba628a4ba590cb43f7848f41c4382885 -01010101010101010101010101010101 -`) - - // Check WriteMsg. This puts a message into the buffer. - if err := Send(rw, 8, []uint{1, 2, 3, 4}); err != nil { - t.Fatalf("WriteMsg error: %v", err) - } - written := buf.Bytes() - if !bytes.Equal(written, golden) { - t.Fatalf("output mismatch:\n got: %x\n want: %x", written, golden) - } - - // Check ReadMsg. It reads the message encoded by WriteMsg, which - // is equivalent to the golden message above. - msg, err := rw.ReadMsg() - if err != nil { - t.Fatalf("ReadMsg error: %v", err) - } - if msg.Size != 5 { - t.Errorf("msg size mismatch: got %d, want %d", msg.Size, 5) - } - if msg.Code != 8 { - t.Errorf("msg code mismatch: got %d, want %d", msg.Code, 8) - } - payload, _ := ioutil.ReadAll(msg.Payload) - wantPayload := unhex("C401020304") - if !bytes.Equal(payload, wantPayload) { - t.Errorf("msg payload mismatch:\ngot %x\nwant %x", payload, wantPayload) - } -} - -type fakeHash []byte - -func (fakeHash) Write(p []byte) (int, error) { return len(p), nil } -func (fakeHash) Reset() {} -func (fakeHash) BlockSize() int { return 0 } - -func (h fakeHash) Size() int { return len(h) } -func (h fakeHash) Sum(b []byte) []byte { return append(b, h...) } - -func TestRLPXFrameRW(t *testing.T) { - var ( - aesSecret = make([]byte, 16) - macSecret = make([]byte, 16) - egressMACinit = make([]byte, 32) - ingressMACinit = make([]byte, 32) - ) - for _, s := range [][]byte{aesSecret, macSecret, egressMACinit, ingressMACinit} { - rand.Read(s) - } - conn := new(bytes.Buffer) - - s1 := secrets{ - AES: aesSecret, - MAC: macSecret, - EgressMAC: sha3.NewLegacyKeccak256(), - IngressMAC: sha3.NewLegacyKeccak256(), - } - s1.EgressMAC.Write(egressMACinit) - s1.IngressMAC.Write(ingressMACinit) - rw1 := newRLPXFrameRW(conn, s1) - - s2 := secrets{ - AES: aesSecret, - MAC: macSecret, - EgressMAC: sha3.NewLegacyKeccak256(), - IngressMAC: sha3.NewLegacyKeccak256(), - } - s2.EgressMAC.Write(ingressMACinit) - s2.IngressMAC.Write(egressMACinit) - rw2 := newRLPXFrameRW(conn, s2) - - // send some messages - for i := 0; i < 10; i++ { - // write message into conn buffer - wmsg := []interface{}{"foo", "bar", strings.Repeat("test", i)} - err := Send(rw1, uint64(i), wmsg) - if err != nil { - t.Fatalf("WriteMsg error (i=%d): %v", i, err) - } - - // read message that rw1 just wrote - msg, err := rw2.ReadMsg() - if err != nil { - t.Fatalf("ReadMsg error (i=%d): %v", i, err) - } - if msg.Code != uint64(i) { - t.Fatalf("msg code mismatch: got %d, want %d", msg.Code, i) - } - payload, _ := ioutil.ReadAll(msg.Payload) - wantPayload, _ := rlp.EncodeToBytes(wmsg) - if !bytes.Equal(payload, wantPayload) { - t.Fatalf("msg payload mismatch:\ngot %x\nwant %x", payload, wantPayload) - } - } -} - -type handshakeAuthTest struct { - input string - isPlain bool - wantVersion uint - wantRest []rlp.RawValue -} - -var eip8HandshakeAuthTests = []handshakeAuthTest{ - // (Auth₁) RLPx v4 plain encoding - { - input: ` - 048ca79ad18e4b0659fab4853fe5bc58eb83992980f4c9cc147d2aa31532efd29a3d3dc6a3d89eaf - 913150cfc777ce0ce4af2758bf4810235f6e6ceccfee1acc6b22c005e9e3a49d6448610a58e98744 - ba3ac0399e82692d67c1f58849050b3024e21a52c9d3b01d871ff5f210817912773e610443a9ef14 - 2e91cdba0bd77b5fdf0769b05671fc35f83d83e4d3b0b000c6b2a1b1bba89e0fc51bf4e460df3105 - c444f14be226458940d6061c296350937ffd5e3acaceeaaefd3c6f74be8e23e0f45163cc7ebd7622 - 0f0128410fd05250273156d548a414444ae2f7dea4dfca2d43c057adb701a715bf59f6fb66b2d1d2 - 0f2c703f851cbf5ac47396d9ca65b6260bd141ac4d53e2de585a73d1750780db4c9ee4cd4d225173 - a4592ee77e2bd94d0be3691f3b406f9bba9b591fc63facc016bfa8 - `, - isPlain: true, - wantVersion: 4, - }, - // (Auth₂) EIP-8 encoding - { - input: ` - 01b304ab7578555167be8154d5cc456f567d5ba302662433674222360f08d5f1534499d3678b513b - 0fca474f3a514b18e75683032eb63fccb16c156dc6eb2c0b1593f0d84ac74f6e475f1b8d56116b84 - 9634a8c458705bf83a626ea0384d4d7341aae591fae42ce6bd5c850bfe0b999a694a49bbbaf3ef6c - da61110601d3b4c02ab6c30437257a6e0117792631a4b47c1d52fc0f8f89caadeb7d02770bf999cc - 147d2df3b62e1ffb2c9d8c125a3984865356266bca11ce7d3a688663a51d82defaa8aad69da39ab6 - d5470e81ec5f2a7a47fb865ff7cca21516f9299a07b1bc63ba56c7a1a892112841ca44b6e0034dee - 70c9adabc15d76a54f443593fafdc3b27af8059703f88928e199cb122362a4b35f62386da7caad09 - c001edaeb5f8a06d2b26fb6cb93c52a9fca51853b68193916982358fe1e5369e249875bb8d0d0ec3 - 6f917bc5e1eafd5896d46bd61ff23f1a863a8a8dcd54c7b109b771c8e61ec9c8908c733c0263440e - 2aa067241aaa433f0bb053c7b31a838504b148f570c0ad62837129e547678c5190341e4f1693956c - 3bf7678318e2d5b5340c9e488eefea198576344afbdf66db5f51204a6961a63ce072c8926c - `, - wantVersion: 4, - wantRest: []rlp.RawValue{}, - }, - // (Auth₃) RLPx v4 EIP-8 encoding with version 56, additional list elements - { - input: ` - 01b8044c6c312173685d1edd268aa95e1d495474c6959bcdd10067ba4c9013df9e40ff45f5bfd6f7 - 2471f93a91b493f8e00abc4b80f682973de715d77ba3a005a242eb859f9a211d93a347fa64b597bf - 280a6b88e26299cf263b01b8dfdb712278464fd1c25840b995e84d367d743f66c0e54a586725b7bb - f12acca27170ae3283c1073adda4b6d79f27656993aefccf16e0d0409fe07db2dc398a1b7e8ee93b - cd181485fd332f381d6a050fba4c7641a5112ac1b0b61168d20f01b479e19adf7fdbfa0905f63352 - bfc7e23cf3357657455119d879c78d3cf8c8c06375f3f7d4861aa02a122467e069acaf513025ff19 - 6641f6d2810ce493f51bee9c966b15c5043505350392b57645385a18c78f14669cc4d960446c1757 - 1b7c5d725021babbcd786957f3d17089c084907bda22c2b2675b4378b114c601d858802a55345a15 - 116bc61da4193996187ed70d16730e9ae6b3bb8787ebcaea1871d850997ddc08b4f4ea668fbf3740 - 7ac044b55be0908ecb94d4ed172ece66fd31bfdadf2b97a8bc690163ee11f5b575a4b44e36e2bfb2 - f0fce91676fd64c7773bac6a003f481fddd0bae0a1f31aa27504e2a533af4cef3b623f4791b2cca6 - d490 - `, - wantVersion: 56, - wantRest: []rlp.RawValue{{0x01}, {0x02}, {0xC2, 0x04, 0x05}}, - }, -} - -type handshakeAckTest struct { - input string - wantVersion uint - wantRest []rlp.RawValue -} - -var eip8HandshakeRespTests = []handshakeAckTest{ - // (Ack₁) RLPx v4 plain encoding - { - input: ` - 049f8abcfa9c0dc65b982e98af921bc0ba6e4243169348a236abe9df5f93aa69d99cadddaa387662 - b0ff2c08e9006d5a11a278b1b3331e5aaabf0a32f01281b6f4ede0e09a2d5f585b26513cb794d963 - 5a57563921c04a9090b4f14ee42be1a5461049af4ea7a7f49bf4c97a352d39c8d02ee4acc416388c - 1c66cec761d2bc1c72da6ba143477f049c9d2dde846c252c111b904f630ac98e51609b3b1f58168d - dca6505b7196532e5f85b259a20c45e1979491683fee108e9660edbf38f3add489ae73e3dda2c71b - d1497113d5c755e942d1 - `, - wantVersion: 4, - }, - // (Ack₂) EIP-8 encoding - { - input: ` - 01ea0451958701280a56482929d3b0757da8f7fbe5286784beead59d95089c217c9b917788989470 - b0e330cc6e4fb383c0340ed85fab836ec9fb8a49672712aeabbdfd1e837c1ff4cace34311cd7f4de - 05d59279e3524ab26ef753a0095637ac88f2b499b9914b5f64e143eae548a1066e14cd2f4bd7f814 - c4652f11b254f8a2d0191e2f5546fae6055694aed14d906df79ad3b407d94692694e259191cde171 - ad542fc588fa2b7333313d82a9f887332f1dfc36cea03f831cb9a23fea05b33deb999e85489e645f - 6aab1872475d488d7bd6c7c120caf28dbfc5d6833888155ed69d34dbdc39c1f299be1057810f34fb - e754d021bfca14dc989753d61c413d261934e1a9c67ee060a25eefb54e81a4d14baff922180c395d - 3f998d70f46f6b58306f969627ae364497e73fc27f6d17ae45a413d322cb8814276be6ddd13b885b - 201b943213656cde498fa0e9ddc8e0b8f8a53824fbd82254f3e2c17e8eaea009c38b4aa0a3f306e8 - 797db43c25d68e86f262e564086f59a2fc60511c42abfb3057c247a8a8fe4fb3ccbadde17514b7ac - 8000cdb6a912778426260c47f38919a91f25f4b5ffb455d6aaaf150f7e5529c100ce62d6d92826a7 - 1778d809bdf60232ae21ce8a437eca8223f45ac37f6487452ce626f549b3b5fdee26afd2072e4bc7 - 5833c2464c805246155289f4 - `, - wantVersion: 4, - wantRest: []rlp.RawValue{}, - }, - // (Ack₃) EIP-8 encoding with version 57, additional list elements - { - input: ` - 01f004076e58aae772bb101ab1a8e64e01ee96e64857ce82b1113817c6cdd52c09d26f7b90981cd7 - ae835aeac72e1573b8a0225dd56d157a010846d888dac7464baf53f2ad4e3d584531fa203658fab0 - 3a06c9fd5e35737e417bc28c1cbf5e5dfc666de7090f69c3b29754725f84f75382891c561040ea1d - dc0d8f381ed1b9d0d4ad2a0ec021421d847820d6fa0ba66eaf58175f1b235e851c7e2124069fbc20 - 2888ddb3ac4d56bcbd1b9b7eab59e78f2e2d400905050f4a92dec1c4bdf797b3fc9b2f8e84a482f3 - d800386186712dae00d5c386ec9387a5e9c9a1aca5a573ca91082c7d68421f388e79127a5177d4f8 - 590237364fd348c9611fa39f78dcdceee3f390f07991b7b47e1daa3ebcb6ccc9607811cb17ce51f1 - c8c2c5098dbdd28fca547b3f58c01a424ac05f869f49c6a34672ea2cbbc558428aa1fe48bbfd6115 - 8b1b735a65d99f21e70dbc020bfdface9f724a0d1fb5895db971cc81aa7608baa0920abb0a565c9c - 436e2fd13323428296c86385f2384e408a31e104670df0791d93e743a3a5194ee6b076fb6323ca59 - 3011b7348c16cf58f66b9633906ba54a2ee803187344b394f75dd2e663a57b956cb830dd7a908d4f - 39a2336a61ef9fda549180d4ccde21514d117b6c6fd07a9102b5efe710a32af4eeacae2cb3b1dec0 - 35b9593b48b9d3ca4c13d245d5f04169b0b1 - `, - wantVersion: 57, - wantRest: []rlp.RawValue{{0x06}, {0xC2, 0x07, 0x08}, {0x81, 0xFA}}, - }, -} - -func TestHandshakeForwardCompatibility(t *testing.T) { - var ( - keyA, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - keyB, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - pubA = crypto.FromECDSAPub(&keyA.PublicKey)[1:] - pubB = crypto.FromECDSAPub(&keyB.PublicKey)[1:] - ephA, _ = crypto.HexToECDSA("869d6ecf5211f1cc60418a13b9d870b22959d0c16f02bec714c960dd2298a32d") - ephB, _ = crypto.HexToECDSA("e238eb8e04fee6511ab04c6dd3c89ce097b11f25d584863ac2b6d5b35b1847e4") - ephPubA = crypto.FromECDSAPub(&ephA.PublicKey)[1:] - ephPubB = crypto.FromECDSAPub(&ephB.PublicKey)[1:] - nonceA = unhex("7e968bba13b6c50e2c4cd7f241cc0d64d1ac25c7f5952df231ac6a2bda8ee5d6") - nonceB = unhex("559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd") - _, _, _, _ = pubA, pubB, ephPubA, ephPubB - authSignature = unhex("299ca6acfd35e3d72d8ba3d1e2b60b5561d5af5218eb5bc182045769eb4226910a301acae3b369fffc4a4899d6b02531e89fd4fe36a2cf0d93607ba470b50f7800") - _ = authSignature - ) - makeAuth := func(test handshakeAuthTest) *authMsgV4 { - msg := &authMsgV4{Version: test.wantVersion, Rest: test.wantRest, gotPlain: test.isPlain} - copy(msg.Signature[:], authSignature) - copy(msg.InitiatorPubkey[:], pubA) - copy(msg.Nonce[:], nonceA) - return msg - } - makeAck := func(test handshakeAckTest) *authRespV4 { - msg := &authRespV4{Version: test.wantVersion, Rest: test.wantRest} - copy(msg.RandomPubkey[:], ephPubB) - copy(msg.Nonce[:], nonceB) - return msg - } - - // check auth msg parsing - for _, test := range eip8HandshakeAuthTests { - r := bytes.NewReader(unhex(test.input)) - msg := new(authMsgV4) - ciphertext, err := readHandshakeMsg(msg, encAuthMsgLen, keyB, r) - if err != nil { - t.Errorf("error for input %x:\n %v", unhex(test.input), err) - continue - } - if !bytes.Equal(ciphertext, unhex(test.input)) { - t.Errorf("wrong ciphertext for input %x:\n %x", unhex(test.input), ciphertext) - } - want := makeAuth(test) - if !reflect.DeepEqual(msg, want) { - t.Errorf("wrong msg for input %x:\ngot %s\nwant %s", unhex(test.input), spew.Sdump(msg), spew.Sdump(want)) - } - } - - // check auth resp parsing - for _, test := range eip8HandshakeRespTests { - input := unhex(test.input) - r := bytes.NewReader(input) - msg := new(authRespV4) - ciphertext, err := readHandshakeMsg(msg, encAuthRespLen, keyA, r) - if err != nil { - t.Errorf("error for input %x:\n %v", input, err) - continue - } - if !bytes.Equal(ciphertext, input) { - t.Errorf("wrong ciphertext for input %x:\n %x", input, err) - } - want := makeAck(test) - if !reflect.DeepEqual(msg, want) { - t.Errorf("wrong msg for input %x:\ngot %s\nwant %s", input, spew.Sdump(msg), spew.Sdump(want)) - } - } - - // check derivation for (Auth₂, Ack₂) on recipient side - var ( - hs = &encHandshake{ - initiator: false, - respNonce: nonceB, - randomPrivKey: ecies.ImportECDSA(ephB), - } - authCiphertext = unhex(eip8HandshakeAuthTests[1].input) - authRespCiphertext = unhex(eip8HandshakeRespTests[1].input) - authMsg = makeAuth(eip8HandshakeAuthTests[1]) - wantAES = unhex("80e8632c05fed6fc2a13b0f8d31a3cf645366239170ea067065aba8e28bac487") - wantMAC = unhex("2ea74ec5dae199227dff1af715362700e989d889d7a493cb0639691efb8e5f98") - wantFooIngressHash = unhex("0c7ec6340062cc46f5e9f1e3cf86f8c8c403c5a0964f5df0ebd34a75ddc86db5") - ) - if err := hs.handleAuthMsg(authMsg, keyB); err != nil { - t.Fatalf("handleAuthMsg: %v", err) - } - derived, err := hs.secrets(authCiphertext, authRespCiphertext) - if err != nil { - t.Fatalf("secrets: %v", err) - } - if !bytes.Equal(derived.AES, wantAES) { - t.Errorf("aes-secret mismatch:\ngot %x\nwant %x", derived.AES, wantAES) - } - if !bytes.Equal(derived.MAC, wantMAC) { - t.Errorf("mac-secret mismatch:\ngot %x\nwant %x", derived.MAC, wantMAC) - } - io.WriteString(derived.IngressMAC, "foo") - fooIngressHash := derived.IngressMAC.Sum(nil) - if !bytes.Equal(fooIngressHash, wantFooIngressHash) { - t.Errorf("ingress-mac('foo') mismatch:\ngot %x\nwant %x", fooIngressHash, wantFooIngressHash) - } -} diff --git a/p2p/server.go b/p2p/server.go index 8cda2eb1..19f7935f 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -29,24 +29,27 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/mclock" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/discover" - "github.com/cryptoecc/ETH-ECC/p2p/discv5" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/p2p/nat" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/nat" + "github.com/ethereum/go-ethereum/p2p/netutil" ) const ( defaultDialTimeout = 15 * time.Second + // This is the fairness knob for the discovery mixer. When looking for peers, we'll + // wait this long for a single source of candidates before moving on and trying other + // sources. + discmixTimeout = 5 * time.Second + // Connectivity defaults. - maxActiveDialTasks = 16 defaultMaxPendingPeers = 50 defaultDialRatio = 3 @@ -101,7 +104,7 @@ type Config struct { // BootstrapNodesV5 are used to establish connectivity // with the rest of the network using the V5 discovery // protocol. - BootstrapNodesV5 []*discv5.Node `toml:",omitempty"` + BootstrapNodesV5 []*enode.Node `toml:",omitempty"` // Static nodes are used as pre-configured connections which are always // maintained and re-connected on disconnects. @@ -123,7 +126,7 @@ type Config struct { // Protocols should contain the protocols supported // by the server. Matching protocols are launched for // each peer. - Protocols []Protocol `toml:"-"` + Protocols []Protocol `toml:"-" json:"-"` // If ListenAddr is set to a non-nil address, the server // will listen for incoming connections. @@ -133,6 +136,10 @@ type Config struct { // the server is started. ListenAddr string + // If DiscAddr is set to a non-nil value, the server will use ListenAddr + // for TCP and DiscAddr for the UDP discovery protocol. + DiscAddr string + // If set to a non-nil value, the given NAT port mapper // is used to make the listening port available to the // Internet. @@ -151,6 +158,8 @@ type Config struct { // Logger is a custom logger to use with the p2p.Server. Logger log.Logger `toml:",omitempty"` + + clock mclock.Clock } // Server manages all peer connections. @@ -160,27 +169,28 @@ type Server struct { // Hooks for testing. These are useful because we can inhibit // the whole protocol stack. - newTransport func(net.Conn) transport + newTransport func(net.Conn, *ecdsa.PublicKey) transport newPeerHook func(*Peer) listenFunc func(network, addr string) (net.Listener, error) lock sync.Mutex // protects running running bool - nodedb *enode.DB - localnode *enode.LocalNode - ntab discoverTable listener net.Listener ourHandshake *protoHandshake - DiscV5 *discv5.Network loopWG sync.WaitGroup // loop, listenLoop peerFeed event.Feed log log.Logger + nodedb *enode.DB + localnode *enode.LocalNode + ntab *discover.UDPv4 + DiscV5 *discover.UDPv5 + discmix *enode.FairMix + dialsched *dialScheduler + // 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 @@ -190,7 +200,6 @@ type Server struct { checkpointAddPeer chan *conn // State of run loop and listenLoop. - lastLookup time.Time inboundHistory expHeap } @@ -225,7 +234,7 @@ type conn struct { type transport interface { // The two handshakes. - doEncHandshake(prv *ecdsa.PrivateKey, dialDest *ecdsa.PublicKey) (*ecdsa.PublicKey, error) + doEncHandshake(prv *ecdsa.PrivateKey) (*ecdsa.PublicKey, error) doProtoHandshake(our *protoHandshake) (*protoHandshake, error) // The MsgReadWriter can only be used after the encryption // handshake has completed. The code uses conn.id to track this @@ -294,51 +303,61 @@ func (srv *Server) LocalNode() *enode.LocalNode { // Peers returns all connected peers. func (srv *Server) Peers() []*Peer { var ps []*Peer - select { - // Note: We'd love to put this function into a variable but - // that seems to cause a weird compiler error in some - // environments. - case srv.peerOp <- func(peers map[enode.ID]*Peer) { + srv.doPeerOp(func(peers map[enode.ID]*Peer) { for _, p := range peers { ps = append(ps, p) } - }: - <-srv.peerOpDone - case <-srv.quit: - } + }) return ps } // PeerCount returns the number of connected peers. func (srv *Server) PeerCount() int { var count int - select { - case srv.peerOp <- func(ps map[enode.ID]*Peer) { count = len(ps) }: - <-srv.peerOpDone - case <-srv.quit: - } + srv.doPeerOp(func(ps map[enode.ID]*Peer) { + count = len(ps) + }) return count } -// AddPeer connects to the given node and maintains the connection until the -// server is shut down. If the connection fails for any reason, the server will -// attempt to reconnect the peer. +// AddPeer adds the given node to the static node set. When there is room in the peer set, +// the server will connect to the node. If the connection fails for any reason, the server +// will attempt to reconnect the peer. func (srv *Server) AddPeer(node *enode.Node) { - select { - case srv.addstatic <- node: - case <-srv.quit: - } + srv.dialsched.addStatic(node) } -// RemovePeer disconnects from the given node +// RemovePeer removes a node from the static node set. It also disconnects from the given +// node if it is currently connected as a peer. +// +// This method blocks until all protocols have exited and the peer is removed. Do not use +// RemovePeer in protocol implementations, call Disconnect on the Peer instead. func (srv *Server) RemovePeer(node *enode.Node) { - select { - case srv.removestatic <- node: - case <-srv.quit: + var ( + ch chan *PeerEvent + sub event.Subscription + ) + // Disconnect the peer on the main loop. + srv.doPeerOp(func(peers map[enode.ID]*Peer) { + srv.dialsched.removeStatic(node) + if peer := peers[node.ID()]; peer != nil { + ch = make(chan *PeerEvent, 1) + sub = srv.peerFeed.Subscribe(ch) + peer.Disconnect(DiscRequested) + } + }) + // Wait for the peer connection to end. + if ch != nil { + defer sub.Unsubscribe() + for ev := range ch { + if ev.Peer == node.ID() && ev.Type == PeerEventTypeDrop { + return + } + } } } -// AddTrustedPeer adds the given node to a reserved whitelist which allows the +// AddTrustedPeer adds the given node to a reserved trusted list which allows the // node to always connect, even if the slot are full. func (srv *Server) AddTrustedPeer(node *enode.Node) { select { @@ -355,7 +374,7 @@ func (srv *Server) RemoveTrustedPeer(node *enode.Node) { } } -// SubscribePeers subscribes the given channel to peer events +// SubscribeEvents subscribes the given channel to peer events func (srv *Server) SubscribeEvents(ch chan *PeerEvent) event.Subscription { return srv.peerFeed.Subscribe(ch) } @@ -397,11 +416,11 @@ type sharedUDPConn struct { unhandled chan discover.ReadPacket } -// ReadFromUDP implements discv5.conn +// ReadFromUDP implements discover.UDPConn func (s *sharedUDPConn) ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) { packet, ok := <-s.unhandled if !ok { - return 0, nil, errors.New("Connection was closed") + return 0, nil, errors.New("connection was closed") } l := len(packet.Data) if l > len(b) { @@ -411,7 +430,7 @@ func (s *sharedUDPConn) ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err err return l, packet.Addr, nil } -// Close implements discv5.conn +// Close implements discover.UDPConn func (s *sharedUDPConn) Close() error { return nil } @@ -429,6 +448,9 @@ func (srv *Server) Start() (err error) { if srv.log == nil { srv.log = log.Root() } + if srv.clock == nil { + srv.clock = mclock.System{} + } if srv.NoDial && srv.ListenAddr == "" { srv.log.Warn("P2P server will be useless, neither dialing nor listening") } @@ -443,15 +465,10 @@ func (srv *Server) Start() (err error) { 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.delpeer = make(chan peerDrop) 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) srv.removetrusted = make(chan *enode.Node) srv.peerOp = make(chan peerOpFunc) @@ -468,11 +485,10 @@ func (srv *Server) Start() (err error) { if err := srv.setupDiscovery(); err != nil { return err } + srv.setupDialScheduler() - dynPeers := srv.maxDialedConns() - dialer := newDialState(srv.localnode.ID(), srv.ntab, dynPeers, &srv.Config) srv.loopWG.Add(1) - go srv.run(dialer) + go srv.run() return nil } @@ -521,11 +537,31 @@ func (srv *Server) setupLocalNode() error { } func (srv *Server) setupDiscovery() error { + srv.discmix = enode.NewFairMix(discmixTimeout) + + // Add protocol-specific discovery sources. + added := make(map[string]bool) + for _, proto := range srv.Protocols { + if proto.DialCandidates != nil && !added[proto.Name] { + srv.discmix.AddSource(proto.DialCandidates) + added[proto.Name] = true + } + } + + // Don't listen on UDP endpoint if DHT is disabled. if srv.NoDiscovery && !srv.DiscoveryV5 { return nil } - addr, err := net.ResolveUDPAddr("udp", srv.ListenAddr) + listenAddr := srv.ListenAddr + + // Use an alternate listening address for UDP if + // a custom discovery address is configured. + if srv.DiscAddr != "" { + listenAddr = srv.DiscAddr + } + + addr, err := net.ResolveUDPAddr("udp", listenAddr) if err != nil { return err } @@ -537,7 +573,11 @@ func (srv *Server) setupDiscovery() error { srv.log.Debug("UDP listener up", "addr", realaddr) if srv.NAT != nil { if !realaddr.IP.IsLoopback() { - go nat.Map(srv.NAT, srv.quit, "udp", realaddr.Port, realaddr.Port, "ethereum discovery") + srv.loopWG.Add(1) + go func() { + nat.Map(srv.NAT, srv.quit, "udp", realaddr.Port, realaddr.Port, "ethereum discovery") + srv.loopWG.Done() + }() } } srv.localnode.SetFallbackUDP(realaddr.Port) @@ -557,32 +597,76 @@ func (srv *Server) setupDiscovery() error { Unhandled: unhandled, Log: srv.log, } - ntab, err := discover.ListenUDP(conn, srv.localnode, cfg) + ntab, err := discover.ListenV4(conn, srv.localnode, cfg) if err != nil { return err } srv.ntab = ntab + srv.discmix.AddSource(ntab.RandomNodes()) } + // Discovery V5 if srv.DiscoveryV5 { - var ntab *discv5.Network + cfg := discover.Config{ + PrivateKey: srv.PrivateKey, + NetRestrict: srv.NetRestrict, + Bootnodes: srv.BootstrapNodesV5, + Log: srv.log, + } var err error if sconn != nil { - ntab, err = discv5.ListenUDP(srv.PrivateKey, sconn, "", srv.NetRestrict) + srv.DiscV5, err = discover.ListenV5(sconn, srv.localnode, cfg) } else { - ntab, err = discv5.ListenUDP(srv.PrivateKey, conn, "", srv.NetRestrict) + srv.DiscV5, err = discover.ListenV5(conn, srv.localnode, cfg) } if err != nil { return err } - if err := ntab.SetFallbackNodes(srv.BootstrapNodesV5); err != nil { - return err - } - srv.DiscV5 = ntab } return nil } +func (srv *Server) setupDialScheduler() { + config := dialConfig{ + self: srv.localnode.ID(), + maxDialPeers: srv.maxDialedConns(), + maxActiveDials: srv.MaxPendingPeers, + log: srv.Logger, + netRestrict: srv.NetRestrict, + dialer: srv.Dialer, + clock: srv.clock, + } + if srv.ntab != nil { + config.resolver = srv.ntab + } + if config.dialer == nil { + config.dialer = tcpDialer{&net.Dialer{Timeout: defaultDialTimeout}} + } + srv.dialsched = newDialScheduler(config, srv.discmix, srv.SetupConn) + for _, n := range srv.StaticNodes { + srv.dialsched.addStatic(n) + } +} + +func (srv *Server) maxInboundConns() int { + return srv.MaxPeers - srv.maxDialedConns() +} + +func (srv *Server) maxDialedConns() (limit int) { + if srv.NoDial || srv.MaxPeers == 0 { + return 0 + } + if srv.DialRatio == 0 { + limit = srv.MaxPeers / defaultDialRatio + } else { + limit = srv.MaxPeers / srv.DialRatio + } + if limit == 0 { + limit = 1 + } + return limit +} + func (srv *Server) setupListening() error { // Launch the listener. listener, err := srv.listenFunc("tcp", srv.ListenAddr) @@ -609,25 +693,27 @@ func (srv *Server) setupListening() error { return nil } -type dialer interface { - newTasks(running int, peers map[enode.ID]*Peer, now time.Time) []task - taskDone(task, time.Time) - addStatic(*enode.Node) - removeStatic(*enode.Node) +// doPeerOp runs fn on the main loop. +func (srv *Server) doPeerOp(fn peerOpFunc) { + select { + case srv.peerOp <- fn: + <-srv.peerOpDone + case <-srv.quit: + } } -func (srv *Server) run(dialstate dialer) { +// run is the main loop of the server. +func (srv *Server) run() { srv.log.Info("Started P2P networking", "self", srv.localnode.Node().URLv4()) defer srv.loopWG.Done() defer srv.nodedb.Close() + defer srv.discmix.Close() + defer srv.dialsched.stop() var ( peers = make(map[enode.ID]*Peer) inboundCount = 0 trusted = make(map[enode.ID]bool, len(srv.TrustedNodes)) - taskdone = make(chan task, maxActiveDialTasks) - runningTasks []task - queuedTasks []task // tasks that can't run yet ) // Put trusted nodes into a map to speed up checks. // Trusted peers are loaded on startup or added via AddTrustedPeer RPC. @@ -635,79 +721,27 @@ func (srv *Server) run(dialstate dialer) { trusted[n.ID()] = true } - // removes t from runningTasks - delTask := func(t task) { - for i := range runningTasks { - if runningTasks[i] == t { - runningTasks = append(runningTasks[:i], runningTasks[i+1:]...) - break - } - } - } - // starts until max number of active tasks is satisfied - startTasks := func(ts []task) (rest []task) { - i := 0 - for ; len(runningTasks) < maxActiveDialTasks && i < len(ts); i++ { - t := ts[i] - srv.log.Trace("New dial task", "task", t) - go func() { t.Do(srv); taskdone <- t }() - runningTasks = append(runningTasks, t) - } - return ts[i:] - } - scheduleTasks := func() { - // Start from queue first. - queuedTasks = append(queuedTasks[:0], startTasks(queuedTasks)...) - // Query dialer for new tasks and start as many as possible now. - if len(runningTasks) < maxActiveDialTasks { - nt := dialstate.newTasks(len(runningTasks)+len(queuedTasks), peers, time.Now()) - queuedTasks = append(queuedTasks, startTasks(nt)...) - } - } - running: for { - scheduleTasks() - select { 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 - // stop keeping the node connected. - srv.log.Trace("Removing static node", "node", n) - dialstate.removeStatic(n) - if p, ok := peers[n.ID()]; ok { - p.Disconnect(DiscRequested) - } - case n := <-srv.addtrusted: - // This channel is used by AddTrustedPeer to add an enode + // This channel is used by AddTrustedPeer to add a node // to the trusted node set. srv.log.Trace("Adding trusted node", "node", n) trusted[n.ID()] = true - // Mark any already-connected peer as trusted 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 + // This channel is used by RemoveTrustedPeer to remove a node // from the trusted node set. srv.log.Trace("Removing trusted node", "node", n) delete(trusted, n.ID()) - - // Unmark any already-connected peer as trusted if p, ok := peers[n.ID()]; ok { p.rw.set(trustedConn, false) } @@ -717,14 +751,6 @@ running: 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 - // tasks list. - srv.log.Trace("Dial task done", "task", t) - dialstate.taskDone(t, time.Now()) - delTask(t) - case c := <-srv.checkpointPostHandshake: // A connection has passed the encryption handshake so // the remote identity is known (but hasn't been verified yet). @@ -741,30 +767,22 @@ running: err := srv.addPeerChecks(peers, inboundCount, c) if err == nil { // The handshakes are done and it passed all checks. - 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) - p.log.Debug("Adding p2p peer", "addr", p.RemoteAddr(), "peers", len(peers)+1, "name", name) - go srv.runPeer(p) + p := srv.launchPeer(c) peers[c.node.ID()] = p + srv.log.Debug("Adding p2p peer", "peercount", len(peers), "id", p.ID(), "conn", c.flags, "addr", p.RemoteAddr(), "name", p.Name()) + srv.dialsched.peerAdded(c) if p.Inbound() { inboundCount++ } } - // The dialer logic relies on the assumption that - // dial tasks complete after the peer has been added or - // discarded. Unblock the task last. c.cont <- err case pd := <-srv.delpeer: // A peer disconnected. d := common.PrettyDuration(mclock.Now() - pd.created) - 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()) + srv.log.Debug("Removing p2p peer", "peercount", len(peers), "id", pd.ID(), "duration", d, "req", pd.requested, "err", pd.err) + srv.dialsched.peerRemoved(pd.rw) if pd.Inbound() { inboundCount-- } @@ -789,14 +807,14 @@ running: // is closed. for len(peers) > 0 { p := <-srv.delpeer - p.log.Trace("<-delpeer (spindown)", "remainingTasks", len(runningTasks)) + p.log.Trace("<-delpeer (spindown)") delete(peers, p.ID()) } } func (srv *Server) postHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error { switch { - case !c.is(trustedConn|staticDialedConn) && len(peers) >= srv.MaxPeers: + case !c.is(trustedConn) && len(peers) >= srv.MaxPeers: return DiscTooManyPeers case !c.is(trustedConn) && c.is(inboundConn) && inboundCount >= srv.maxInboundConns(): return DiscTooManyPeers @@ -819,27 +837,12 @@ func (srv *Server) addPeerChecks(peers map[enode.ID]*Peer, inboundCount int, c * 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 - } - r := srv.DialRatio - if r == 0 { - r = defaultDialRatio - } - return srv.MaxPeers / r -} - // listenLoop runs in its own goroutine and accepts // inbound connections. func (srv *Server) listenLoop() { - defer srv.loopWG.Done() srv.log.Debug("TCP listener up", "addr", srv.listener.Addr()) + // The slots channel limits accepts of new connections. tokens := defaultMaxPendingPeers if srv.MaxPendingPeers > 0 { tokens = srv.MaxPendingPeers @@ -849,37 +852,56 @@ func (srv *Server) listenLoop() { slots <- struct{}{} } + // Wait for slots to be returned on exit. This ensures all connection goroutines + // are down before listenLoop returns. + defer srv.loopWG.Done() + defer func() { + for i := 0; i < cap(slots); i++ { + <-slots + } + }() + for { // Wait for a free slot before accepting. <-slots var ( - fd net.Conn - err error + fd net.Conn + err error + lastLog time.Time ) for { fd, err = srv.listener.Accept() if netutil.IsTemporaryError(err) { - srv.log.Debug("Temporary read error", "err", err) + if time.Since(lastLog) > 1*time.Second { + srv.log.Debug("Temporary read error", "err", err) + lastLog = time.Now() + } + time.Sleep(time.Millisecond * 200) continue } else if err != nil { srv.log.Debug("Read error", "err", err) + slots <- struct{}{} return } break } remoteIP := netutil.AddrIP(fd.RemoteAddr()) - if err := srv.checkInboundConn(fd, remoteIP); err != nil { - srv.log.Debug("Rejected inbound connnection", "addr", fd.RemoteAddr(), "err", err) + if err := srv.checkInboundConn(remoteIP); err != nil { + srv.log.Debug("Rejected inbound connection", "addr", fd.RemoteAddr(), "err", err) fd.Close() slots <- struct{}{} continue } if remoteIP != nil { - fd = newMeteredConn(fd, true, remoteIP) + var addr *net.TCPAddr + if tcp, ok := fd.RemoteAddr().(*net.TCPAddr); ok { + addr = tcp + } + fd = newMeteredConn(fd, true, addr) + srv.log.Trace("Accepted connection", "addr", fd.RemoteAddr()) } - srv.log.Trace("Accepted connection", "addr", fd.RemoteAddr()) go func() { srv.SetupConn(fd, inboundConn, nil) slots <- struct{}{} @@ -887,19 +909,21 @@ 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)) +func (srv *Server) checkInboundConn(remoteIP net.IP) error { + if remoteIP == nil { + return nil + } + // Reject connections that do not match NetRestrict. + if srv.NetRestrict != nil && !srv.NetRestrict.Contains(remoteIP) { + return fmt.Errorf("not in netrestrict list") } + // Reject Internet peers that try too often. + now := srv.clock.Now() + srv.inboundHistory.expire(now, nil) + if !netutil.IsLAN(remoteIP) && srv.inboundHistory.contains(remoteIP.String()) { + return fmt.Errorf("too many attempts") + } + srv.inboundHistory.add(remoteIP.String(), now.Add(inboundThrottleTime)) return nil } @@ -907,11 +931,16 @@ func (srv *Server) checkInboundConn(fd net.Conn, remoteIP net.IP) error { // as a peer. It returns when the connection has been added as a peer // or the handshakes have failed. func (srv *Server) SetupConn(fd net.Conn, flags connFlag, dialDest *enode.Node) error { - c := &conn{fd: fd, transport: srv.newTransport(fd), flags: flags, cont: make(chan error)} + c := &conn{fd: fd, flags: flags, cont: make(chan error)} + if dialDest == nil { + c.transport = srv.newTransport(fd, nil) + } else { + c.transport = srv.newTransport(fd, dialDest.Pubkey()) + } + err := srv.setupConn(c, flags, dialDest) if err != nil { c.close(err) - srv.log.Trace("Setting up connection failed", "addr", fd.RemoteAddr(), "err", err) } return err } @@ -926,32 +955,26 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro } // If dialing, figure out the remote public key. - var dialPubkey *ecdsa.PublicKey if dialDest != nil { - dialPubkey = new(ecdsa.PublicKey) + dialPubkey := new(ecdsa.PublicKey) if err := dialDest.Load((*enode.Secp256k1)(dialPubkey)); err != nil { - return errors.New("dial destination doesn't have a secp256k1 public key") + err = errors.New("dial destination doesn't have a secp256k1 public key") + srv.log.Trace("Setting up connection failed", "addr", c.fd.RemoteAddr(), "conn", c.flags, "err", err) + return err } } // Run the RLPx handshake. - remotePubkey, err := c.doEncHandshake(srv.PrivateKey, dialPubkey) + remotePubkey, err := c.doEncHandshake(srv.PrivateKey) if err != nil { srv.log.Trace("Failed RLPx handshake", "addr", c.fd.RemoteAddr(), "conn", c.flags, "err", err) return err } if dialDest != nil { - // For dialed connections, check that the remote public key matches. - if dialPubkey.X.Cmp(remotePubkey.X) != 0 || dialPubkey.Y.Cmp(remotePubkey.Y) != 0 { - return DiscUnexpectedIdentity - } c.node = dialDest } else { c.node = nodeFromConn(remotePubkey, c.fd) } - if conn, ok := c.fd.(*meteredConn); ok { - 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.checkpointPostHandshake) if err != nil { @@ -962,7 +985,7 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro // Run the capability negotiation handshake. phs, err := c.doProtoHandshake(srv.ourHandshake) if err != nil { - clog.Trace("Failed proto handshake", "err", err) + clog.Trace("Failed p2p handshake", "err", err) return err } if id := c.node.ID(); !bytes.Equal(crypto.Keccak256(phs.ID), id[:]) { @@ -976,9 +999,6 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro return err } - // 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 } @@ -992,13 +1012,6 @@ func nodeFromConn(pubkey *ecdsa.PublicKey, conn net.Conn) *enode.Node { return enode.NewV4(pubkey, ip, port, port) } -func truncateName(s string) string { - if len(s) > 20 { - return s[:20] + "..." - } - return s -} - // checkpoint sends the conn to run, which performs the // post-handshake checks for the stage (posthandshake, addpeer). func (srv *Server) checkpoint(c *conn, stage chan<- *conn) error { @@ -1010,15 +1023,22 @@ func (srv *Server) checkpoint(c *conn, stage chan<- *conn) error { return <-c.cont } +func (srv *Server) launchPeer(c *conn) *Peer { + p := newPeer(srv.log, c, srv.Protocols) + if srv.EnableMsgEvents { + // If message events are enabled, pass the peerFeed + // to the peer. + p.events = &srv.peerFeed + } + go srv.runPeer(p) + return p +} + // runPeer runs in its own goroutine for each peer. -// it waits until the Peer logic returns and removes -// the peer. func (srv *Server) runPeer(p *Peer) { if srv.newPeerHook != nil { srv.newPeerHook(p) } - - // broadcast peer add srv.peerFeed.Send(&PeerEvent{ Type: PeerEventTypeAdd, Peer: p.ID(), @@ -1026,10 +1046,18 @@ func (srv *Server) runPeer(p *Peer) { LocalAddress: p.LocalAddr().String(), }) - // run the protocol + // Run the per-peer main loop. remoteRequested, err := p.run() - // broadcast peer drop + // Announce disconnect on the main loop to update the peer set. + // The main loop waits for existing peers to be sent on srv.delpeer + // before returning, so this send should not select on srv.quit. + srv.delpeer <- peerDrop{p, err, remoteRequested} + + // Broadcast peer drop to external subscribers. This needs to be + // after the send to delpeer so subscribers have a consistent view of + // the peer set (i.e. Server.Peers() doesn't include the peer when the + // event is received. srv.peerFeed.Send(&PeerEvent{ Type: PeerEventTypeDrop, Peer: p.ID(), @@ -1037,10 +1065,6 @@ func (srv *Server) runPeer(p *Peer) { RemoteAddress: p.RemoteAddr().String(), LocalAddress: p.LocalAddr().String(), }) - - // Note: run waits for existing peers to be sent on srv.delpeer - // before returning, so this send should not select on srv.quit. - srv.delpeer <- peerDrop{p, err, remoteRequested} } // NodeInfo represents a short summary of the information known about the host. diff --git a/p2p/server_test.go b/p2p/server_test.go index bacf3da9..f6f5700c 100644 --- a/p2p/server_test.go +++ b/p2p/server_test.go @@ -18,6 +18,7 @@ package p2p import ( "crypto/ecdsa" + "crypto/sha256" "errors" "io" "math/rand" @@ -26,37 +27,32 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/internal/testlog" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "golang.org/x/crypto/sha3" + "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/p2p/rlpx" ) -// func init() { -// log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) -// } - type testTransport struct { - rpub *ecdsa.PublicKey - *rlpx - + *rlpxTransport + rpub *ecdsa.PublicKey closeErr error } -func newTestTransport(rpub *ecdsa.PublicKey, fd net.Conn) transport { - wrapped := newRLPX(fd).(*rlpx) - wrapped.rw = newRLPXFrameRW(fd, secrets{ - MAC: zero16, - AES: zero16, - IngressMAC: sha3.NewLegacyKeccak256(), - EgressMAC: sha3.NewLegacyKeccak256(), +func newTestTransport(rpub *ecdsa.PublicKey, fd net.Conn, dialDest *ecdsa.PublicKey) transport { + wrapped := newRLPX(fd, dialDest).(*rlpxTransport) + wrapped.conn.InitWithSecrets(rlpx.Secrets{ + AES: make([]byte, 16), + MAC: make([]byte, 16), + EgressMAC: sha256.New(), + IngressMAC: sha256.New(), }) - return &testTransport{rpub: rpub, rlpx: wrapped} + return &testTransport{rpub: rpub, rlpxTransport: wrapped} } -func (c *testTransport) doEncHandshake(prv *ecdsa.PrivateKey, dialDest *ecdsa.PublicKey) (*ecdsa.PublicKey, error) { +func (c *testTransport) doEncHandshake(prv *ecdsa.PrivateKey) (*ecdsa.PublicKey, error) { return c.rpub, nil } @@ -66,22 +62,25 @@ func (c *testTransport) doProtoHandshake(our *protoHandshake) (*protoHandshake, } func (c *testTransport) close(err error) { - c.rlpx.fd.Close() + c.conn.Close() c.closeErr = err } func startTestServer(t *testing.T, remoteKey *ecdsa.PublicKey, pf func(*Peer)) *Server { config := Config{ - Name: "test", - MaxPeers: 10, - ListenAddr: "127.0.0.1:0", - PrivateKey: newkey(), - Logger: testlog.Logger(t, log.LvlTrace), + Name: "test", + MaxPeers: 10, + ListenAddr: "127.0.0.1:0", + NoDiscovery: true, + PrivateKey: newkey(), + Logger: testlog.Logger(t, log.LvlTrace), } server := &Server{ - Config: config, - newPeerHook: pf, - newTransport: func(fd net.Conn) transport { return newTestTransport(remoteKey, fd) }, + Config: config, + newPeerHook: pf, + newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { + return newTestTransport(remoteKey, fd, dialDest) + }, } if err := server.Start(); err != nil { t.Fatalf("Could not start server: %v", err) @@ -131,11 +130,10 @@ func TestServerDial(t *testing.T) { t.Fatalf("could not setup listener: %v", err) } defer listener.Close() - accepted := make(chan net.Conn) + accepted := make(chan net.Conn, 1) go func() { conn, err := listener.Accept() if err != nil { - t.Error("accept error:", err) return } accepted <- conn @@ -205,155 +203,38 @@ func TestServerDial(t *testing.T) { } } -// This test checks that tasks generated by dialstate are -// actually executed and taskdone is called for them. -func TestServerTaskScheduling(t *testing.T) { - var ( - done = make(chan *testTask) - quit, returned = make(chan struct{}), make(chan struct{}) - tc = 0 - tg = taskgen{ - newFunc: func(running int, peers map[enode.ID]*Peer) []task { - tc++ - return []task{&testTask{index: tc - 1}} - }, - doneFunc: func(t task) { - select { - case done <- t.(*testTask): - case <-quit: - } - }, - } - ) +// This test checks that RemovePeer disconnects the peer if it is connected. +func TestServerRemovePeerDisconnect(t *testing.T) { + srv1 := &Server{Config: Config{ + PrivateKey: newkey(), + MaxPeers: 1, + NoDiscovery: true, + Logger: testlog.Logger(t, log.LvlTrace).New("server", "1"), + }} + srv2 := &Server{Config: Config{ + PrivateKey: newkey(), + MaxPeers: 1, + NoDiscovery: true, + NoDial: true, + ListenAddr: "127.0.0.1:0", + Logger: testlog.Logger(t, log.LvlTrace).New("server", "2"), + }} + srv1.Start() + defer srv1.Stop() + srv2.Start() + defer srv2.Stop() - // The Server in this test isn't actually running - // because we're only interested in what run does. - db, _ := enode.OpenDB("") - srv := &Server{ - Config: Config{MaxPeers: 10}, - localnode: enode.NewLocalNode(db, newkey()), - nodedb: db, - quit: make(chan struct{}), - ntab: fakeTable{}, - running: true, - log: log.New(), - } - srv.loopWG.Add(1) - go func() { - srv.run(tg) - close(returned) - }() - - var gotdone []*testTask - for i := 0; i < 100; i++ { - gotdone = append(gotdone, <-done) - } - for i, task := range gotdone { - if task.index != i { - t.Errorf("task %d has wrong index, got %d", i, task.index) - break - } - if !task.called { - t.Errorf("task %d was not called", i) - break - } + if !syncAddPeer(srv1, srv2.Self()) { + t.Fatal("peer not connected") } - - close(quit) - srv.Stop() - select { - case <-returned: - case <-time.After(500 * time.Millisecond): - t.Error("Server.run did not return within 500ms") + srv1.RemovePeer(srv2.Self()) + if srv1.PeerCount() > 0 { + t.Fatal("removed peer still connected") } } -// This test checks that Server doesn't drop tasks, -// even if newTasks returns more than the maximum number of tasks. -func TestServerManyTasks(t *testing.T) { - alltasks := make([]task, 300) - for i := range alltasks { - alltasks[i] = &testTask{index: i} - } - - var ( - db, _ = enode.OpenDB("") - srv = &Server{ - quit: make(chan struct{}), - localnode: enode.NewLocalNode(db, newkey()), - nodedb: db, - ntab: fakeTable{}, - running: true, - log: log.New(), - } - done = make(chan *testTask) - start, end = 0, 0 - ) - defer srv.Stop() - srv.loopWG.Add(1) - go srv.run(taskgen{ - newFunc: func(running int, peers map[enode.ID]*Peer) []task { - start, end = end, end+maxActiveDialTasks+10 - if end > len(alltasks) { - end = len(alltasks) - } - return alltasks[start:end] - }, - doneFunc: func(tt task) { - done <- tt.(*testTask) - }, - }) - - doneset := make(map[int]bool) - timeout := time.After(2 * time.Second) - for len(doneset) < len(alltasks) { - select { - case tt := <-done: - if doneset[tt.index] { - t.Errorf("task %d got done more than once", tt.index) - } else { - doneset[tt.index] = true - } - case <-timeout: - t.Errorf("%d of %d tasks got done within 2s", len(doneset), len(alltasks)) - for i := 0; i < len(alltasks); i++ { - if !doneset[i] { - t.Logf("task %d not done", i) - } - } - return - } - } -} - -type taskgen struct { - newFunc func(running int, peers map[enode.ID]*Peer) []task - doneFunc func(task) -} - -func (tg taskgen) newTasks(running int, peers map[enode.ID]*Peer, now time.Time) []task { - return tg.newFunc(running, peers) -} -func (tg taskgen) taskDone(t task, now time.Time) { - tg.doneFunc(t) -} -func (tg taskgen) addStatic(*enode.Node) { -} -func (tg taskgen) removeStatic(*enode.Node) { -} - -type testTask struct { - index int - called bool -} - -func (t *testTask) Do(srv *Server) { - t.called = true -} - -// This test checks that connections are disconnected -// just after the encryption handshake when the server is -// at capacity. Trusted connections should still be accepted. +// This test checks that connections are disconnected just after the encryption handshake +// when the server is at capacity. Trusted connections should still be accepted. func TestServerAtCap(t *testing.T) { trustedNode := newkey() trustedID := enode.PubkeyToIDV4(&trustedNode.PublicKey) @@ -363,7 +244,8 @@ func TestServerAtCap(t *testing.T) { MaxPeers: 10, NoDial: true, NoDiscovery: true, - TrustedNodes: []*enode.Node{newNode(trustedID, nil)}, + TrustedNodes: []*enode.Node{newNode(trustedID, "")}, + Logger: testlog.Logger(t, log.LvlTrace), }, } if err := srv.Start(); err != nil { @@ -373,7 +255,7 @@ func TestServerAtCap(t *testing.T) { newconn := func(id enode.ID) *conn { fd, _ := net.Pipe() - tx := newTestTransport(&trustedNode.PublicKey, fd) + tx := newTestTransport(&trustedNode.PublicKey, fd, nil) node := enode.SignNull(new(enr.Record), id) return &conn{fd: fd, transport: tx, flags: inboundConn, node: node, cont: make(chan error)} } @@ -401,14 +283,14 @@ func TestServerAtCap(t *testing.T) { } // Remove from trusted set and try again - srv.RemoveTrustedPeer(newNode(trustedID, nil)) + srv.RemoveTrustedPeer(newNode(trustedID, "")) c = newconn(trustedID) 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)) + srv.AddTrustedPeer(newNode(anotherID, "")) c = newconn(anotherID) if err := srv.checkpoint(c, srv.checkpointPostHandshake); err != nil { t.Error("unexpected error for trusted conn @posthandshake:", err) @@ -439,9 +321,9 @@ func TestServerPeerLimits(t *testing.T) { NoDial: true, NoDiscovery: true, Protocols: []Protocol{discard}, + Logger: testlog.Logger(t, log.LvlTrace), }, - newTransport: func(fd net.Conn) transport { return tp }, - log: log.New(), + newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { return tp }, } if err := srv.Start(); err != nil { t.Fatalf("couldn't start server: %v", err) @@ -488,6 +370,8 @@ func TestServerSetupConn(t *testing.T) { clientkey, srvkey = newkey(), newkey() clientpub = &clientkey.PublicKey srvpub = &srvkey.PublicKey + fooErr = errors.New("foo") + readErr = errors.New("read error") ) tests := []struct { dontstart bool @@ -505,17 +389,10 @@ func TestServerSetupConn(t *testing.T) { wantCloseErr: errServerStopped, }, { - tt: &setupTransport{pubkey: clientpub, encHandshakeErr: errors.New("read error")}, + tt: &setupTransport{pubkey: clientpub, encHandshakeErr: readErr}, flags: inboundConn, wantCalls: "doEncHandshake,close,", - wantCloseErr: errors.New("read error"), - }, - { - tt: &setupTransport{pubkey: clientpub}, - dialDest: enode.NewV4(&newkey().PublicKey, nil, 0, 0), - flags: dynDialedConn, - wantCalls: "doEncHandshake,close,", - wantCloseErr: DiscUnexpectedIdentity, + wantCloseErr: readErr, }, { tt: &setupTransport{pubkey: clientpub, phs: protoHandshake{ID: randomID().Bytes()}}, @@ -525,11 +402,11 @@ func TestServerSetupConn(t *testing.T) { wantCloseErr: DiscUnexpectedIdentity, }, { - tt: &setupTransport{pubkey: clientpub, protoHandshakeErr: errors.New("foo")}, + tt: &setupTransport{pubkey: clientpub, protoHandshakeErr: fooErr}, dialDest: enode.NewV4(clientpub, nil, 0, 0), flags: dynDialedConn, wantCalls: "doEncHandshake,doProtoHandshake,close,", - wantCloseErr: errors.New("foo"), + wantCloseErr: fooErr, }, { tt: &setupTransport{pubkey: srvpub, phs: protoHandshake{ID: crypto.FromECDSAPub(srvpub)[1:]}}, @@ -557,7 +434,7 @@ func TestServerSetupConn(t *testing.T) { } srv := &Server{ Config: cfg, - newTransport: func(fd net.Conn) transport { return test.tt }, + newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { return test.tt }, log: cfg.Logger, } if !test.dontstart { @@ -568,7 +445,7 @@ func TestServerSetupConn(t *testing.T) { } p1, _ := net.Pipe() srv.SetupConn(p1, test.flags, test.dialDest) - if !reflect.DeepEqual(test.tt.closeErr, test.wantCloseErr) { + if !errors.Is(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 { @@ -588,7 +465,7 @@ type setupTransport struct { closeErr error } -func (c *setupTransport) doEncHandshake(prv *ecdsa.PrivateKey, dialDest *ecdsa.PublicKey) (*ecdsa.PublicKey, error) { +func (c *setupTransport) doEncHandshake(prv *ecdsa.PrivateKey) (*ecdsa.PublicKey, error) { c.calls += "doEncHandshake," return c.pubkey, c.encHandshakeErr } @@ -642,9 +519,9 @@ func TestServerInboundThrottle(t *testing.T) { Protocols: []Protocol{discard}, Logger: testlog.Logger(t, log.LvlTrace), }, - newTransport: func(fd net.Conn) transport { + newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { newTransportCalled <- struct{}{} - return newRLPX(fd) + return newRLPX(fd, dialDest) }, listenFunc: func(network, laddr string) (net.Listener, error) { fakeAddr := &net.TCPAddr{IP: net.IP{95, 33, 21, 2}, Port: 4444} @@ -670,7 +547,7 @@ func TestServerInboundThrottle(t *testing.T) { conn.Close() // Dial again. This time the server should close the connection immediately. - connClosed := make(chan struct{}) + connClosed := make(chan struct{}, 1) conn, err = net.DialTimeout("tcp", srv.ListenAddr, timeout) if err != nil { t.Fatalf("could not dial: %v", err) @@ -724,3 +601,23 @@ func (l *fakeAddrListener) Accept() (net.Conn, error) { func (c *fakeAddrConn) RemoteAddr() net.Addr { return c.remoteAddr } + +func syncAddPeer(srv *Server, node *enode.Node) bool { + var ( + ch = make(chan *PeerEvent) + sub = srv.SubscribeEvents(ch) + timeout = time.After(2 * time.Second) + ) + defer sub.Unsubscribe() + srv.AddPeer(node) + for { + select { + case ev := <-ch: + if ev.Type == PeerEventTypeAdd && ev.Peer == node.ID() { + return true + } + case <-timeout: + return false + } + } +} diff --git a/p2p/simulations/README.md b/p2p/simulations/README.md index 871d71b2..023f73a0 100644 --- a/p2p/simulations/README.md +++ b/p2p/simulations/README.md @@ -1,7 +1,7 @@ # devp2p Simulations -The `p2p/simulations` package implements a simulation framework which supports -creating a collection of devp2p nodes, connecting them together to form a +The `p2p/simulations` package implements a simulation framework that supports +creating a collection of devp2p nodes, connecting them to form a simulation network, performing simulation actions in that network and then extracting useful information. @@ -65,10 +65,10 @@ localhost ports. ## Network -A simulation network is created with an ID and default service (which is used -if a node is created without an explicit service), exposes methods for -creating, starting, stopping, connecting and disconnecting nodes, and emits -events when certain actions occur. +A simulation network is created with an ID and default service. The default +service is used if a node is created without an explicit service. The +network has exposed methods for creating, starting, stopping, connecting +and disconnecting nodes. It also emits events when certain actions occur. ### Events @@ -80,7 +80,7 @@ A simulation network emits the following events: The events have a "control" flag which when set indicates that the event is the outcome of a controlled simulation action (e.g. creating a node or explicitly -connecting two nodes together). +connecting two nodes). This is in contrast to a non-control event, otherwise called a "live" event, which is the outcome of something happening in the network as a result of a @@ -98,12 +98,12 @@ network and then wait for expectations to be met. With a running simulation network, the `Simulation.Run` method can be called with a `Step` which has the following fields: -* `Action` - a function which performs some action in the network +* `Action` - a function that performs some action in the network * `Expect` - an expectation function which returns whether or not a given node meets the expectation -* `Trigger` - a channel which receives node IDs which then trigger a check +* `Trigger` - a channel that receives node IDs which then trigger a check of the expectation function to be performed against that node As a concrete example, consider a simulated network of Ethereum nodes. An @@ -116,7 +116,7 @@ the expectation and what network events were emitted during the step run. ## HTTP API -The simulation framework includes a HTTP API which can be used to control the +The simulation framework includes a HTTP API that can be used to control the simulation. The API is initialised with a particular node adapter and has the following diff --git a/p2p/simulations/adapters/exec.go b/p2p/simulations/adapters/exec.go index 7751d726..7bfa8aab 100644 --- a/p2p/simulations/adapters/exec.go +++ b/p2p/simulations/adapters/exec.go @@ -19,7 +19,6 @@ package adapters import ( "bytes" "context" - "crypto/ecdsa" "encoding/json" "errors" "fmt" @@ -35,13 +34,13 @@ import ( "syscall" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/rpc" "github.com/docker/docker/pkg/reexec" - "golang.org/x/net/websocket" + "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/rpc" + "github.com/gorilla/websocket" ) func init() { @@ -76,11 +75,11 @@ func (e *ExecAdapter) Name() string { // NewNode returns a new ExecNode using the given config func (e *ExecAdapter) NewNode(config *NodeConfig) (Node, error) { - if len(config.Services) == 0 { - return nil, errors.New("node must have at least one service") + if len(config.Lifecycles) == 0 { + return nil, errors.New("node must have at least one service lifecycle") } - for _, service := range config.Services { - if _, exists := serviceFuncs[service]; !exists { + for _, service := range config.Lifecycles { + if _, exists := lifecycleConstructorFuncs[service]; !exists { return nil, fmt.Errorf("unknown node service %q", service) } } @@ -116,9 +115,8 @@ func (e *ExecAdapter) NewNode(config *NodeConfig) (Node, error) { conf.Stack.P2P.EnableMsgEvents = config.EnableMsgEvents conf.Stack.P2P.NoDiscovery = true conf.Stack.P2P.NAT = nil - conf.Stack.NoUSB = true - // listen on a localhost port, which we set when we + // Listen on a localhost port, which we set when we // initialise NodeConfig (usually a random port) conf.Stack.P2P.ListenAddr = fmt.Sprintf(":%d", config.Port) @@ -146,7 +144,6 @@ type ExecNode struct { client *rpc.Client wsAddr string newCmd func() *exec.Cmd - key *ecdsa.PrivateKey } // Addr returns the node's enode URL @@ -186,7 +183,19 @@ func (n *ExecNode) Start(snapshots map[string][]byte) (err error) { if err != nil { return fmt.Errorf("error generating node config: %s", err) } - + // expose the admin namespace via websocket if it's not enabled + exposed := confCopy.Stack.WSExposeAll + if !exposed { + for _, api := range confCopy.Stack.WSModules { + if api == "admin" { + exposed = true + break + } + } + } + if !exposed { + confCopy.Stack.WSModules = append(confCopy.Stack.WSModules, "admin") + } // start the one-shot server that waits for startup information ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -205,17 +214,17 @@ func (n *ExecNode) Start(snapshots map[string][]byte) (err error) { } n.Cmd = cmd - // read the WebSocket address from the stderr logs + // Wait for the node to start. status := <-statusC if status.Err != "" { return errors.New(status.Err) } - client, err := rpc.DialWebsocket(ctx, status.WSEndpoint, "http://localhost") + client, err := rpc.DialWebsocket(ctx, status.WSEndpoint, "") if err != nil { return fmt.Errorf("can't connect to RPC server: %v", err) } - // node ready :) + // Node ready :) n.client = client n.wsAddr = status.WSEndpoint n.Info = status.NodeInfo @@ -265,7 +274,7 @@ func (n *ExecNode) waitForStartupJSON(ctx context.Context) (string, chan nodeSta func (n *ExecNode) execCommand() *exec.Cmd { return &exec.Cmd{ Path: reexec.Self(), - Args: []string{"p2p-node", strings.Join(n.Config.Node.Services, ","), n.ID.String()}, + Args: []string{"p2p-node", strings.Join(n.Config.Node.Lifecycles, ","), n.ID.String()}, } } @@ -289,7 +298,7 @@ func (n *ExecNode) Stop() error { if err := n.Cmd.Process.Signal(syscall.SIGTERM); err != nil { return n.Cmd.Process.Kill() } - waitErr := make(chan error) + waitErr := make(chan error, 1) go func() { waitErr <- n.Cmd.Wait() }() @@ -314,31 +323,37 @@ func (n *ExecNode) NodeInfo() *p2p.NodeInfo { // ServeRPC serves RPC requests over the given connection by dialling the // node's WebSocket address and joining the two connections -func (n *ExecNode) ServeRPC(clientConn net.Conn) error { - conn, err := websocket.Dial(n.wsAddr, "", "http://localhost") +func (n *ExecNode) ServeRPC(clientConn *websocket.Conn) error { + conn, _, err := websocket.DefaultDialer.Dial(n.wsAddr, nil) if err != nil { return err } var wg sync.WaitGroup wg.Add(2) - join := func(src, dst net.Conn) { - defer wg.Done() - io.Copy(dst, src) - // close the write end of the destination connection - if cw, ok := dst.(interface { - CloseWrite() error - }); ok { - cw.CloseWrite() - } else { - dst.Close() - } - } - go join(conn, clientConn) - go join(clientConn, conn) + go wsCopy(&wg, conn, clientConn) + go wsCopy(&wg, clientConn, conn) wg.Wait() + conn.Close() return nil } +func wsCopy(wg *sync.WaitGroup, src, dst *websocket.Conn) { + defer wg.Done() + for { + msgType, r, err := src.NextReader() + if err != nil { + return + } + w, err := dst.NextWriter(msgType) + if err != nil { + return + } + if _, err = io.Copy(w, r); err != nil { + return + } + } +} + // Snapshots creates snapshots of the services by calling the // simulation_snapshot RPC method func (n *ExecNode) Snapshots() (map[string][]byte, error) { @@ -358,13 +373,44 @@ type execNodeConfig struct { PeerAddrs map[string]string `json:"peer_addrs,omitempty"` } +func initLogging() { + // Initialize the logging by default first. + glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.LogfmtFormat())) + glogger.Verbosity(log.LvlInfo) + log.Root().SetHandler(glogger) + + confEnv := os.Getenv(envNodeConfig) + if confEnv == "" { + return + } + var conf execNodeConfig + if err := json.Unmarshal([]byte(confEnv), &conf); err != nil { + return + } + var writer = os.Stderr + if conf.Node.LogFile != "" { + logWriter, err := os.Create(conf.Node.LogFile) + if err != nil { + return + } + writer = logWriter + } + var verbosity = log.LvlInfo + if conf.Node.LogVerbosity <= log.LvlTrace && conf.Node.LogVerbosity >= log.LvlCrit { + verbosity = conf.Node.LogVerbosity + } + // Reinitialize the logger + glogger = log.NewGlogHandler(log.StreamHandler(writer, log.TerminalFormat(true))) + glogger.Verbosity(verbosity) + log.Root().SetHandler(glogger) +} + // execP2PNode starts a simulation node when the current binary is executed with // argv[0] being "p2p-node", reading the service / ID from argv[1] / argv[2] // and the node config from an environment variable. func execP2PNode() { - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.LogfmtFormat())) - glogger.Verbosity(log.LvlInfo) - log.Root().SetHandler(glogger) + initLogging() + statusURL := os.Getenv(envStatusURL) if statusURL == "" { log.Crit("missing " + envStatusURL) @@ -376,7 +422,7 @@ func execP2PNode() { if stackErr != nil { status.Err = stackErr.Error() } else { - status.WSEndpoint = "ws://" + stack.WSEndpoint() + status.WSEndpoint = stack.WSEndpoint() status.NodeInfo = stack.Server().NodeInfo() } @@ -396,7 +442,7 @@ func execP2PNode() { defer signal.Stop(sigc) <-sigc log.Info("Received SIGTERM, shutting down...") - stack.Stop() + stack.Close() }() stack.Wait() // Wait for the stack to exit. } @@ -430,44 +476,34 @@ func startExecNodeStack() (*node.Node, error) { return nil, fmt.Errorf("error creating node stack: %v", err) } - // register the services, collecting them into a map so we can wrap - // them in a snapshot service - services := make(map[string]node.Service, len(serviceNames)) + // Register the services, collecting them into a map so they can + // be accessed by the snapshot API. + services := make(map[string]node.Lifecycle, len(serviceNames)) for _, name := range serviceNames { - serviceFunc, exists := serviceFuncs[name] + lifecycleFunc, exists := lifecycleConstructorFuncs[name] if !exists { return nil, fmt.Errorf("unknown node service %q", err) } - constructor := func(nodeCtx *node.ServiceContext) (node.Service, error) { - ctx := &ServiceContext{ - RPCDialer: &wsRPCDialer{addrs: conf.PeerAddrs}, - NodeContext: nodeCtx, - Config: conf.Node, - } - if conf.Snapshots != nil { - ctx.Snapshot = conf.Snapshots[name] - } - service, err := serviceFunc(ctx) - if err != nil { - return nil, err - } - services[name] = service - return service, nil + ctx := &ServiceContext{ + RPCDialer: &wsRPCDialer{addrs: conf.PeerAddrs}, + Config: conf.Node, + } + if conf.Snapshots != nil { + ctx.Snapshot = conf.Snapshots[name] } - if err := stack.Register(constructor); err != nil { - return stack, fmt.Errorf("error registering service %q: %v", name, err) + service, err := lifecycleFunc(ctx, stack) + if err != nil { + return nil, err } + services[name] = service } - // register the snapshot service - err = stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { - return &snapshotService{services}, nil - }) - if err != nil { - return stack, fmt.Errorf("error starting snapshot service: %v", err) - } + // Add the snapshot API. + stack.RegisterAPIs([]rpc.API{{ + Namespace: "simulation", + Service: SnapshotAPI{services}, + }}) - // start the stack if err = stack.Start(); err != nil { err = fmt.Errorf("error starting stack: %v", err) } @@ -486,35 +522,9 @@ type nodeStartupJSON struct { NodeInfo *p2p.NodeInfo } -// snapshotService is a node.Service which wraps a list of services and -// exposes an API to generate a snapshot of those services -type snapshotService struct { - services map[string]node.Service -} - -func (s *snapshotService) APIs() []rpc.API { - return []rpc.API{{ - Namespace: "simulation", - Version: "1.0", - Service: SnapshotAPI{s.services}, - }} -} - -func (s *snapshotService) Protocols() []p2p.Protocol { - return nil -} - -func (s *snapshotService) Start(*p2p.Server) error { - return nil -} - -func (s *snapshotService) Stop() error { - return nil -} - // SnapshotAPI provides an RPC method to create snapshots of services type SnapshotAPI struct { - services map[string]node.Service + services map[string]node.Lifecycle } func (api SnapshotAPI) Snapshot() (map[string][]byte, error) { diff --git a/p2p/simulations/adapters/inproc.go b/p2p/simulations/adapters/inproc.go index 956f4e72..1cb26a8e 100644 --- a/p2p/simulations/adapters/inproc.go +++ b/p2p/simulations/adapters/inproc.go @@ -17,47 +17,41 @@ package adapters import ( + "context" "errors" "fmt" "math" "net" "sync" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/pipes" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/event" + "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/pipes" + "github.com/ethereum/go-ethereum/rpc" + "github.com/gorilla/websocket" ) // SimAdapter is a NodeAdapter which creates in-memory simulation nodes and // connects them using net.Pipe type SimAdapter struct { - pipe func() (net.Conn, net.Conn, error) - mtx sync.RWMutex - nodes map[enode.ID]*SimNode - services map[string]ServiceFunc + pipe func() (net.Conn, net.Conn, error) + mtx sync.RWMutex + nodes map[enode.ID]*SimNode + lifecycles LifecycleConstructors } // NewSimAdapter creates a SimAdapter which is capable of running in-memory // simulation nodes running any of the given services (the services to run on a // particular node are passed to the NewNode function in the NodeConfig) // the adapter uses a net.Pipe for in-memory simulated network connections -func NewSimAdapter(services map[string]ServiceFunc) *SimAdapter { +func NewSimAdapter(services LifecycleConstructors) *SimAdapter { return &SimAdapter{ - pipe: pipes.NetPipe, - nodes: make(map[enode.ID]*SimNode), - services: services, - } -} - -func NewTCPAdapter(services map[string]ServiceFunc) *SimAdapter { - return &SimAdapter{ - pipe: pipes.TCPPipe, - nodes: make(map[enode.ID]*SimNode), - services: services, + pipe: pipes.NetPipe, + nodes: make(map[enode.ID]*SimNode), + lifecycles: services, } } @@ -83,11 +77,11 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { } // check the services are valid - if len(config.Services) == 0 { + if len(config.Lifecycles) == 0 { return nil, errors.New("node must have at least one service") } - for _, service := range config.Services { - if _, exists := s.services[service]; !exists { + for _, service := range config.Lifecycles { + if _, exists := s.lifecycles[service]; !exists { return nil, fmt.Errorf("unknown node service %q", service) } } @@ -105,8 +99,8 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { Dialer: s, EnableMsgEvents: config.EnableMsgEvents, }, - NoUSB: true, - Logger: log.New("node.id", id.String()), + ExternalSigner: config.ExternalSigner, + Logger: log.New("node.id", id.String()), }) if err != nil { return nil, err @@ -117,7 +111,7 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { config: config, node: n, adapter: s, - running: make(map[string]node.Service), + running: make(map[string]node.Lifecycle), } s.nodes[id] = simNode return simNode, nil @@ -125,7 +119,7 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { // Dial implements the p2p.NodeDialer interface by connecting to the node using // an in-memory net.Pipe -func (s *SimAdapter) Dial(dest *enode.Node) (conn net.Conn, err error) { +func (s *SimAdapter) Dial(ctx context.Context, dest *enode.Node) (conn net.Conn, err error) { node, ok := s.GetNode(dest.ID()) if !ok { return nil, fmt.Errorf("unknown node: %s", dest.ID()) @@ -153,11 +147,7 @@ func (s *SimAdapter) DialRPC(id enode.ID) (*rpc.Client, error) { if !ok { return nil, fmt.Errorf("unknown node: %s", id) } - handler, err := node.node.RPCHandler() - if err != nil { - return nil, err - } - return rpc.DialInProc(handler), nil + return node.node.Attach() } // GetNode returns the node with the given ID if it exists @@ -177,7 +167,7 @@ type SimNode struct { config *NodeConfig adapter *SimAdapter node *node.Node - running map[string]node.Service + running map[string]node.Lifecycle client *rpc.Client registerOnce sync.Once } @@ -210,13 +200,14 @@ func (sn *SimNode) Client() (*rpc.Client, error) { } // ServeRPC serves RPC requests over the given connection by creating an -// in-memory client to the node's RPC server -func (sn *SimNode) ServeRPC(conn net.Conn) error { +// in-memory client to the node's RPC server. +func (sn *SimNode) ServeRPC(conn *websocket.Conn) error { handler, err := sn.node.RPCHandler() if err != nil { return err } - handler.ServeCodec(rpc.NewJSONCodec(conn), rpc.OptionMethodInvocation|rpc.OptionSubscriptions) + codec := rpc.NewFuncCodec(conn, conn.WriteJSON, conn.ReadJSON) + handler.ServeCodec(codec, 0) return nil } @@ -224,7 +215,7 @@ func (sn *SimNode) ServeRPC(conn net.Conn) error { // simulation_snapshot RPC method func (sn *SimNode) Snapshots() (map[string][]byte, error) { sn.lock.RLock() - services := make(map[string]node.Service, len(sn.running)) + services := make(map[string]node.Lifecycle, len(sn.running)) for name, service := range sn.running { services[name] = service } @@ -249,35 +240,29 @@ func (sn *SimNode) Snapshots() (map[string][]byte, error) { // Start registers the services and starts the underlying devp2p node func (sn *SimNode) Start(snapshots map[string][]byte) error { - newService := func(name string) func(ctx *node.ServiceContext) (node.Service, error) { - return func(nodeCtx *node.ServiceContext) (node.Service, error) { + // ensure we only register the services once in the case of the node + // being stopped and then started again + var regErr error + sn.registerOnce.Do(func() { + for _, name := range sn.config.Lifecycles { ctx := &ServiceContext{ - RPCDialer: sn.adapter, - NodeContext: nodeCtx, - Config: sn.config, + RPCDialer: sn.adapter, + Config: sn.config, } if snapshots != nil { ctx.Snapshot = snapshots[name] } - serviceFunc := sn.adapter.services[name] - service, err := serviceFunc(ctx) + serviceFunc := sn.adapter.lifecycles[name] + service, err := serviceFunc(ctx, sn.node) if err != nil { - return nil, err - } - sn.running[name] = service - return service, nil - } - } - - // ensure we only register the services once in the case of the node - // being stopped and then started again - var regErr error - sn.registerOnce.Do(func() { - for _, name := range sn.config.Services { - if err := sn.node.Register(newService(name)); err != nil { regErr = err break } + // if the service has already been registered, don't register it again. + if _, ok := sn.running[name]; ok { + continue + } + sn.running[name] = service } }) if regErr != nil { @@ -289,13 +274,12 @@ func (sn *SimNode) Start(snapshots map[string][]byte) error { } // create an in-process RPC client - handler, err := sn.node.RPCHandler() + client, err := sn.node.Attach() if err != nil { return err } - sn.lock.Lock() - sn.client = rpc.DialInProc(handler) + sn.client = client sn.lock.Unlock() return nil @@ -309,21 +293,21 @@ func (sn *SimNode) Stop() error { sn.client = nil } sn.lock.Unlock() - return sn.node.Stop() + return sn.node.Close() } // Service returns a running service by name -func (sn *SimNode) Service(name string) node.Service { +func (sn *SimNode) Service(name string) node.Lifecycle { sn.lock.RLock() defer sn.lock.RUnlock() return sn.running[name] } // Services returns a copy of the underlying services -func (sn *SimNode) Services() []node.Service { +func (sn *SimNode) Services() []node.Lifecycle { sn.lock.RLock() defer sn.lock.RUnlock() - services := make([]node.Service, 0, len(sn.running)) + services := make([]node.Lifecycle, 0, len(sn.running)) for _, service := range sn.running { services = append(services, service) } @@ -331,10 +315,10 @@ func (sn *SimNode) Services() []node.Service { } // ServiceMap returns a map by names of the underlying services -func (sn *SimNode) ServiceMap() map[string]node.Service { +func (sn *SimNode) ServiceMap() map[string]node.Lifecycle { sn.lock.RLock() defer sn.lock.RUnlock() - services := make(map[string]node.Service, len(sn.running)) + services := make(map[string]node.Lifecycle, len(sn.running)) for name, service := range sn.running { services[name] = service } diff --git a/p2p/simulations/adapters/inproc_test.go b/p2p/simulations/adapters/inproc_test.go index a0760f4c..2a61508f 100644 --- a/p2p/simulations/adapters/inproc_test.go +++ b/p2p/simulations/adapters/inproc_test.go @@ -20,10 +20,10 @@ import ( "bytes" "encoding/binary" "fmt" + "sync" "testing" - "time" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/pipes" + "github.com/ethereum/go-ethereum/p2p/simulations/pipes" ) func TestTCPPipe(t *testing.T) { @@ -32,42 +32,26 @@ func TestTCPPipe(t *testing.T) { t.Fatal(err) } - done := make(chan struct{}) - - go func() { - msgs := 50 - size := 1024 - for i := 0; i < msgs; i++ { - msg := make([]byte, size) - _ = binary.PutUvarint(msg, uint64(i)) - - _, err := c1.Write(msg) - if err != nil { - t.Fatal(err) - } + msgs := 50 + size := 1024 + for i := 0; i < msgs; i++ { + msg := make([]byte, size) + binary.PutUvarint(msg, uint64(i)) + if _, err := c1.Write(msg); err != nil { + t.Fatal(err) } + } - for i := 0; i < msgs; i++ { - msg := make([]byte, size) - _ = binary.PutUvarint(msg, uint64(i)) - - out := make([]byte, size) - _, err := c2.Read(out) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(msg, out) { - t.Fatalf("expected %#v, got %#v", msg, out) - } + for i := 0; i < msgs; i++ { + msg := make([]byte, size) + binary.PutUvarint(msg, uint64(i)) + out := make([]byte, size) + if _, err := c2.Read(out); err != nil { + t.Fatal(err) + } + if !bytes.Equal(msg, out) { + t.Fatalf("expected %#v, got %#v", msg, out) } - done <- struct{}{} - }() - - select { - case <-done: - case <-time.After(5 * time.Second): - t.Fatal("test timeout") } } @@ -77,60 +61,41 @@ func TestTCPPipeBidirections(t *testing.T) { t.Fatal(err) } - done := make(chan struct{}) - - go func() { - msgs := 50 - size := 7 - for i := 0; i < msgs; i++ { - msg := []byte(fmt.Sprintf("ping %02d", i)) - - _, err := c1.Write(msg) - if err != nil { - t.Fatal(err) - } + msgs := 50 + size := 7 + for i := 0; i < msgs; i++ { + msg := []byte(fmt.Sprintf("ping %02d", i)) + if _, err := c1.Write(msg); err != nil { + t.Fatal(err) } + } - for i := 0; i < msgs; i++ { - expected := []byte(fmt.Sprintf("ping %02d", i)) - - out := make([]byte, size) - _, err := c2.Read(out) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(expected, out) { - t.Fatalf("expected %#v, got %#v", out, expected) - } else { - msg := []byte(fmt.Sprintf("pong %02d", i)) - _, err := c2.Write(msg) - if err != nil { - t.Fatal(err) - } - } + for i := 0; i < msgs; i++ { + expected := []byte(fmt.Sprintf("ping %02d", i)) + out := make([]byte, size) + if _, err := c2.Read(out); err != nil { + t.Fatal(err) } - for i := 0; i < msgs; i++ { - expected := []byte(fmt.Sprintf("pong %02d", i)) - - out := make([]byte, size) - _, err := c1.Read(out) - if err != nil { + if !bytes.Equal(expected, out) { + t.Fatalf("expected %#v, got %#v", out, expected) + } else { + msg := []byte(fmt.Sprintf("pong %02d", i)) + if _, err := c2.Write(msg); err != nil { t.Fatal(err) } - - if !bytes.Equal(expected, out) { - t.Fatalf("expected %#v, got %#v", out, expected) - } } - done <- struct{}{} - }() + } - select { - case <-done: - case <-time.After(5 * time.Second): - t.Fatal("test timeout") + for i := 0; i < msgs; i++ { + expected := []byte(fmt.Sprintf("pong %02d", i)) + out := make([]byte, size) + if _, err := c1.Read(out); err != nil { + t.Fatal(err) + } + if !bytes.Equal(expected, out) { + t.Fatalf("expected %#v, got %#v", out, expected) + } } } @@ -140,46 +105,35 @@ func TestNetPipe(t *testing.T) { t.Fatal(err) } - done := make(chan struct{}) + msgs := 50 + size := 1024 + var wg sync.WaitGroup + defer wg.Wait() + // netPipe is blocking, so writes are emitted asynchronously + wg.Add(1) go func() { - msgs := 50 - size := 1024 - // netPipe is blocking, so writes are emitted asynchronously - go func() { - for i := 0; i < msgs; i++ { - msg := make([]byte, size) - _ = binary.PutUvarint(msg, uint64(i)) - - _, err := c1.Write(msg) - if err != nil { - t.Fatal(err) - } - } - }() + defer wg.Done() for i := 0; i < msgs; i++ { msg := make([]byte, size) - _ = binary.PutUvarint(msg, uint64(i)) - - out := make([]byte, size) - _, err := c2.Read(out) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(msg, out) { - t.Fatalf("expected %#v, got %#v", msg, out) + binary.PutUvarint(msg, uint64(i)) + if _, err := c1.Write(msg); err != nil { + t.Error(err) } } - - done <- struct{}{} }() - select { - case <-done: - case <-time.After(5 * time.Second): - t.Fatal("test timeout") + for i := 0; i < msgs; i++ { + msg := make([]byte, size) + binary.PutUvarint(msg, uint64(i)) + out := make([]byte, size) + if _, err := c2.Read(out); err != nil { + t.Error(err) + } + if !bytes.Equal(msg, out) { + t.Errorf("expected %#v, got %#v", msg, out) + } } } @@ -189,71 +143,60 @@ func TestNetPipeBidirections(t *testing.T) { t.Fatal(err) } - done := make(chan struct{}) + msgs := 1000 + size := 8 + pingTemplate := "ping %03d" + pongTemplate := "pong %03d" + var wg sync.WaitGroup + defer wg.Wait() + // netPipe is blocking, so writes are emitted asynchronously + wg.Add(1) go func() { - msgs := 1000 - size := 8 - pingTemplate := "ping %03d" - pongTemplate := "pong %03d" - - // netPipe is blocking, so writes are emitted asynchronously - go func() { - for i := 0; i < msgs; i++ { - msg := []byte(fmt.Sprintf(pingTemplate, i)) + defer wg.Done() - _, err := c1.Write(msg) - if err != nil { - t.Fatal(err) - } - } - }() - - // netPipe is blocking, so reads for pong are emitted asynchronously - go func() { - for i := 0; i < msgs; i++ { - expected := []byte(fmt.Sprintf(pongTemplate, i)) - - out := make([]byte, size) - _, err := c1.Read(out) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(expected, out) { - t.Fatalf("expected %#v, got %#v", expected, out) - } + for i := 0; i < msgs; i++ { + msg := []byte(fmt.Sprintf(pingTemplate, i)) + if _, err := c1.Write(msg); err != nil { + t.Error(err) } + } + }() - done <- struct{}{} - }() + // netPipe is blocking, so reads for pong are emitted asynchronously + wg.Add(1) + go func() { + defer wg.Done() - // expect to read pings, and respond with pongs to the alternate connection for i := 0; i < msgs; i++ { - expected := []byte(fmt.Sprintf(pingTemplate, i)) - + expected := []byte(fmt.Sprintf(pongTemplate, i)) out := make([]byte, size) - _, err := c2.Read(out) - if err != nil { - t.Fatal(err) + if _, err := c1.Read(out); err != nil { + t.Error(err) } - if !bytes.Equal(expected, out) { - t.Fatalf("expected %#v, got %#v", expected, out) - } else { - msg := []byte(fmt.Sprintf(pongTemplate, i)) - - _, err := c2.Write(msg) - if err != nil { - t.Fatal(err) - } + t.Errorf("expected %#v, got %#v", expected, out) } } }() - select { - case <-done: - case <-time.After(5 * time.Second): - t.Fatal("test timeout") + // expect to read pings, and respond with pongs to the alternate connection + for i := 0; i < msgs; i++ { + expected := []byte(fmt.Sprintf(pingTemplate, i)) + + out := make([]byte, size) + _, err := c2.Read(out) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(expected, out) { + t.Errorf("expected %#v, got %#v", expected, out) + } else { + msg := []byte(fmt.Sprintf(pongTemplate, i)) + if _, err := c2.Write(msg); err != nil { + t.Fatal(err) + } + } } } diff --git a/p2p/simulations/adapters/types.go b/p2p/simulations/adapters/types.go index d4e89896..aeb8ef77 100644 --- a/p2p/simulations/adapters/types.go +++ b/p2p/simulations/adapters/types.go @@ -25,14 +25,15 @@ import ( "os" "strconv" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rpc" "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" + "github.com/gorilla/websocket" ) // Node represents a node in a simulation network which is created by a @@ -51,7 +52,7 @@ type Node interface { Client() (*rpc.Client, error) // ServeRPC serves RPC requests over the given connection - ServeRPC(net.Conn) error + ServeRPC(*websocket.Conn) error // Start starts the node with the given snapshots Start(snapshots map[string][]byte) error @@ -95,11 +96,19 @@ type NodeConfig struct { // 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 + // Lifecycles are the names of the service lifecycles which should be run when + // starting the node (for SimNodes it should be the names of service lifecycles + // contained in SimAdapter.lifecycles, for other nodes it should be + // service lifecycles registered by calling the RegisterLifecycle function) + Lifecycles []string + + // Properties are the names of the properties this node should hold + // within running services (e.g. "bootnode", "lightnode" or any custom values) + // These values need to be checked and acted upon by node Services + Properties []string + + // ExternalSigner specifies an external URI for a clef-type signer + ExternalSigner string // Enode node *enode.Node @@ -111,6 +120,17 @@ type NodeConfig struct { Reachable func(id enode.ID) bool Port uint16 + + // LogFile is the log file name of the p2p node at runtime. + // + // The default value is empty so that the default log writer + // is the system standard output. + LogFile string + + // LogVerbosity is the log verbosity of the p2p node at runtime. + // + // The default verbosity is INFO. + LogVerbosity log.Lvl } // nodeConfigJSON is used to encode and decode NodeConfig as JSON by encoding @@ -119,9 +139,12 @@ type nodeConfigJSON struct { ID string `json:"id"` PrivateKey string `json:"private_key"` Name string `json:"name"` - Services []string `json:"services"` + Lifecycles []string `json:"lifecycles"` + Properties []string `json:"properties"` EnableMsgEvents bool `json:"enable_msg_events"` Port uint16 `json:"port"` + LogFile string `json:"logfile"` + LogVerbosity int `json:"log_verbosity"` } // MarshalJSON implements the json.Marshaler interface by encoding the config @@ -130,9 +153,12 @@ func (n *NodeConfig) MarshalJSON() ([]byte, error) { confJSON := nodeConfigJSON{ ID: n.ID.String(), Name: n.Name, - Services: n.Services, + Lifecycles: n.Lifecycles, + Properties: n.Properties, Port: n.Port, EnableMsgEvents: n.EnableMsgEvents, + LogFile: n.LogFile, + LogVerbosity: int(n.LogVerbosity), } if n.PrivateKey != nil { confJSON.PrivateKey = hex.EncodeToString(crypto.FromECDSA(n.PrivateKey)) @@ -167,9 +193,12 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) error { } n.Name = confJSON.Name - n.Services = confJSON.Services + n.Lifecycles = confJSON.Lifecycles + n.Properties = confJSON.Properties n.Port = confJSON.Port n.EnableMsgEvents = confJSON.EnableMsgEvents + n.LogFile = confJSON.LogFile + n.LogVerbosity = log.Lvl(confJSON.LogVerbosity) return nil } @@ -199,6 +228,7 @@ func RandomNodeConfig() *NodeConfig { Name: fmt.Sprintf("node_%s", enodId.String()), Port: port, EnableMsgEvents: true, + LogVerbosity: log.LvlInfo, } } @@ -212,7 +242,7 @@ func assignTCPPort() (uint16, error) { if err != nil { return 0, err } - p, err := strconv.ParseInt(port, 10, 32) + p, err := strconv.ParseUint(port, 10, 16) if err != nil { return 0, err } @@ -224,9 +254,8 @@ func assignTCPPort() (uint16, error) { type ServiceContext struct { RPCDialer - NodeContext *node.ServiceContext - Config *NodeConfig - Snapshot []byte + Config *NodeConfig + Snapshot []byte } // RPCDialer is used when initialising services which need to connect to @@ -236,27 +265,29 @@ type RPCDialer interface { DialRPC(id enode.ID) (*rpc.Client, error) } -// Services is a collection of services which can be run in a simulation -type Services map[string]ServiceFunc +// LifecycleConstructor allows a Lifecycle to be constructed during node start-up. +// While the service-specific package usually takes care of Lifecycle creation and registration, +// for testing purposes, it is useful to be able to construct a Lifecycle on spot. +type LifecycleConstructor func(ctx *ServiceContext, stack *node.Node) (node.Lifecycle, error) -// ServiceFunc returns a node.Service which can be used to boot a devp2p node -type ServiceFunc func(ctx *ServiceContext) (node.Service, error) +// LifecycleConstructors stores LifecycleConstructor functions to call during node start-up. +type LifecycleConstructors map[string]LifecycleConstructor -// serviceFuncs is a map of registered services which are used to boot devp2p +// lifecycleConstructorFuncs is a map of registered services which are used to boot devp2p // nodes -var serviceFuncs = make(Services) +var lifecycleConstructorFuncs = make(LifecycleConstructors) -// RegisterServices registers the given Services which can then be used to +// RegisterLifecycles registers the given Services which can then be used to // start devp2p nodes using either the Exec or Docker adapters. // // It should be called in an init function so that it has the opportunity to // execute the services before main() is called. -func RegisterServices(services Services) { - for name, f := range services { - if _, exists := serviceFuncs[name]; exists { +func RegisterLifecycles(lifecycles LifecycleConstructors) { + for name, f := range lifecycles { + if _, exists := lifecycleConstructorFuncs[name]; exists { panic(fmt.Sprintf("node service already exists: %q", name)) } - serviceFuncs[name] = f + lifecycleConstructorFuncs[name] = f } // now we have registered the services, run reexec.Init() which will @@ -291,5 +322,5 @@ func (n *NodeConfig) initEnode(ip net.IP, tcpport int, udpport int) error { } func (n *NodeConfig) initDummyEnode() error { - return n.initEnode(net.IPv4(127, 0, 0, 1), 0, 0) + return n.initEnode(net.IPv4(127, 0, 0, 1), int(n.Port), 0) } diff --git a/p2p/simulations/connect.go b/p2p/simulations/connect.go index f96fe500..ede96b34 100644 --- a/p2p/simulations/connect.go +++ b/p2p/simulations/connect.go @@ -20,7 +20,7 @@ import ( "errors" "strings" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enode" ) var ( diff --git a/p2p/simulations/connect_test.go b/p2p/simulations/connect_test.go index 5d429b8d..0154a18b 100644 --- a/p2p/simulations/connect_test.go +++ b/p2p/simulations/connect_test.go @@ -19,15 +19,15 @@ package simulations import ( "testing" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" ) func newTestNetwork(t *testing.T, nodeCount int) (*Network, []enode.ID) { t.Helper() - adapter := adapters.NewSimAdapter(adapters.Services{ - "noopwoop": func(ctx *adapters.ServiceContext) (node.Service, error) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "noopwoop": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { return NewNoopService(nil), nil }, }) diff --git a/p2p/simulations/events.go b/p2p/simulations/events.go index 984c2e08..d0d03794 100644 --- a/p2p/simulations/events.go +++ b/p2p/simulations/events.go @@ -73,8 +73,7 @@ func NewEvent(v interface{}) *Event { switch v := v.(type) { case *Node: event.Type = EventTypeNode - node := *v - event.Node = &node + event.Node = v.copy() case *Conn: event.Type = EventTypeConn conn := *v diff --git a/p2p/simulations/examples/ping-pong.go b/p2p/simulations/examples/ping-pong.go index 15b12256..2f4c5605 100644 --- a/p2p/simulations/examples/ping-pong.go +++ b/p2p/simulations/examples/ping-pong.go @@ -19,19 +19,18 @@ package main import ( "flag" "fmt" - "io/ioutil" + "io" "net/http" "os" "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" - "github.com/cryptoecc/ETH-ECC/rpc" + "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" ) var adapterType = flag.String("adapter", "sim", `node adapter to use (one of "sim", "exec" or "docker")`) @@ -45,12 +44,14 @@ func main() { log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) // register a single ping-pong service - services := map[string]adapters.ServiceFunc{ - "ping-pong": func(ctx *adapters.ServiceContext) (node.Service, error) { - return newPingPongService(ctx.Config.ID), nil + services := map[string]adapters.LifecycleConstructor{ + "ping-pong": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { + pps := newPingPongService(ctx.Config.ID) + stack.RegisterProtocols(pps.Protocols()) + return pps, nil }, } - adapters.RegisterServices(services) + adapters.RegisterLifecycles(services) // create the NodeAdapter var adapter adapters.NodeAdapter @@ -62,7 +63,7 @@ func main() { adapter = adapters.NewSimAdapter(services) case "exec": - tmpdir, err := ioutil.TempDir("", "p2p-example") + tmpdir, err := os.MkdirTemp("", "p2p-example") if err != nil { log.Crit("error creating temp dir", "err", err) } @@ -110,11 +111,7 @@ func (p *pingPongService) Protocols() []p2p.Protocol { }} } -func (p *pingPongService) APIs() []rpc.API { - return nil -} - -func (p *pingPongService) Start(server *p2p.Server) error { +func (p *pingPongService) Start() error { p.log.Info("ping-pong service starting") return nil } @@ -159,7 +156,7 @@ func (p *pingPongService) Run(peer *p2p.Peer, rw p2p.MsgReadWriter) error { errC <- err return } - payload, err := ioutil.ReadAll(msg.Payload) + payload, err := io.ReadAll(msg.Payload) if err != nil { errC <- err return diff --git a/p2p/simulations/examples/ping-pong.sh b/p2p/simulations/examples/ping-pong.sh old mode 100755 new mode 100644 diff --git a/p2p/simulations/http.go b/p2p/simulations/http.go index 136145d7..b221a059 100644 --- a/p2p/simulations/http.go +++ b/p2p/simulations/http.go @@ -21,21 +21,22 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" + "html" "io" - "io/ioutil" "net/http" "strconv" "strings" "sync" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/rpc" + "github.com/gorilla/websocket" "github.com/julienschmidt/httprouter" - "golang.org/x/net/websocket" ) // DefaultClient is the default simulation API client which expects the API @@ -111,7 +112,7 @@ func (c *Client) SubscribeNetwork(events chan *Event, opts SubscribeOpts) (event return nil, err } if res.StatusCode != http.StatusOK { - response, _ := ioutil.ReadAll(res.Body) + response, _ := io.ReadAll(res.Body) res.Body.Close() return nil, fmt.Errorf("unexpected HTTP status: %s: %s", res.Status, response) } @@ -251,7 +252,7 @@ func (c *Client) Send(method, path string, in, out interface{}) error { } defer res.Body.Close() if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusCreated { - response, _ := ioutil.ReadAll(res.Body) + response, _ := io.ReadAll(res.Body) return fmt.Errorf("unexpected HTTP status: %s: %s", res.Status, response) } if out != nil { @@ -336,7 +337,7 @@ func (s *Server) StartMocker(w http.ResponseWriter, req *http.Request) { mockerType := req.FormValue("mocker-type") mockerFn := LookupMocker(mockerType) if mockerFn == nil { - http.Error(w, fmt.Sprintf("unknown mocker type %q", mockerType), http.StatusBadRequest) + http.Error(w, fmt.Sprintf("unknown mocker type %q", html.EscapeString(mockerType)), http.StatusBadRequest) return } nodeCount, err := strconv.Atoi(req.FormValue("node-count")) @@ -366,7 +367,6 @@ func (s *Server) StopMocker(w http.ResponseWriter, req *http.Request) { // GetMockerList returns a list of available mockers func (s *Server) GetMockers(w http.ResponseWriter, req *http.Request) { - list := GetMockerList() s.JSON(w, http.StatusOK, list) } @@ -384,12 +384,6 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) { sub := s.network.events.Subscribe(events) defer sub.Unsubscribe() - // stop the stream if the client goes away - var clientGone <-chan bool - if cn, ok := w.(http.CloseNotifier); ok { - clientGone = cn.CloseNotify() - } - // write writes the given event and data to the stream like: // // event: @@ -447,6 +441,7 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) { } } for _, conn := range snap.Conns { + conn := conn event := NewEvent(&conn) if err := writeEvent(event); err != nil { writeErr(err) @@ -455,6 +450,7 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) { } } + clientGone := req.Context().Done() for { select { case event := <-events: @@ -564,7 +560,7 @@ func (s *Server) CreateNode(w http.ResponseWriter, req *http.Request) { config := &adapters.NodeConfig{} err := json.NewDecoder(req.Body).Decode(config) - if err != nil && err != io.EOF { + if err != nil && !errors.Is(err, io.EOF) { http.Error(w, err.Error(), http.StatusBadRequest) return } @@ -654,16 +650,20 @@ func (s *Server) Options(w http.ResponseWriter, req *http.Request) { w.WriteHeader(http.StatusOK) } +var wsUpgrade = websocket.Upgrader{ + CheckOrigin: func(*http.Request) bool { return true }, +} + // NodeRPC forwards RPC requests to a node in the network via a WebSocket // connection func (s *Server) NodeRPC(w http.ResponseWriter, req *http.Request) { - node := req.Context().Value("node").(*Node) - - handler := func(conn *websocket.Conn) { - node.ServeRPC(conn) + conn, err := wsUpgrade.Upgrade(w, req, nil) + if err != nil { + return } - - websocket.Server{Handler: handler}.ServeHTTP(w, req) + defer conn.Close() + node := req.Context().Value("node").(*Node) + node.ServeRPC(conn) } // ServeHTTP implements the http.Handler interface by delegating to the @@ -699,14 +699,14 @@ func (s *Server) JSON(w http.ResponseWriter, status int, data interface{}) { json.NewEncoder(w).Encode(data) } -// wrapHandler returns a httprouter.Handle which wraps a http.HandlerFunc by +// wrapHandler returns an httprouter.Handle which wraps an http.HandlerFunc by // populating request.Context with any objects from the URL params func (s *Server) wrapHandler(handler http.HandlerFunc) httprouter.Handle { return func(w http.ResponseWriter, req *http.Request, params httprouter.Params) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") - ctx := context.Background() + ctx := req.Context() if id := params.ByName("nodeid"); id != "" { var nodeID enode.ID diff --git a/p2p/simulations/http_test.go b/p2p/simulations/http_test.go index 0d490d8c..5775977a 100644 --- a/p2p/simulations/http_test.go +++ b/p2p/simulations/http_test.go @@ -22,31 +22,30 @@ import ( "fmt" "math/rand" "net/http/httptest" + "os" "reflect" "sync" "sync/atomic" "testing" "time" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/event" + "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/adapters" + "github.com/ethereum/go-ethereum/rpc" "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 @@ -65,12 +64,15 @@ type testService struct { state atomic.Value } -func newTestService(ctx *adapters.ServiceContext) (node.Service, error) { +func newTestService(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { svc := &testService{ id: ctx.Config.ID, peers: make(map[enode.ID]*testPeer), } svc.state.Store(ctx.Snapshot) + + stack.RegisterProtocols(svc.Protocols()) + stack.RegisterAPIs(svc.APIs()) return svc, nil } @@ -127,7 +129,7 @@ func (t *testService) APIs() []rpc.API { }} } -func (t *testService) Start(server *p2p.Server) error { +func (t *testService) Start() error { return nil } @@ -139,7 +141,7 @@ func (t *testService) Stop() error { // message with the given code func (t *testService) handshake(rw p2p.MsgReadWriter, code uint64) error { errc := make(chan error, 2) - go func() { errc <- p2p.Send(rw, code, struct{}{}) }() + go func() { errc <- p2p.SendItems(rw, code) }() go func() { errc <- p2p.ExpectMsg(rw, code, struct{}{}) }() for i := 0; i < 2; i++ { if err := <-errc; err != nil { @@ -289,7 +291,7 @@ func (t *TestAPI) Events(ctx context.Context) (*rpc.Subscription, error) { return rpcSub, nil } -var testServices = adapters.Services{ +var testServices = adapters.LifecycleConstructors{ "test": newTestService, } @@ -421,16 +423,8 @@ type expectEvents struct { } func (t *expectEvents) nodeEvent(id string, up bool) *Event { - node := Node{ - Config: &adapters.NodeConfig{ - ID: enode.HexID(id), - }, - up: up, - } - return &Event{ - Type: EventTypeNode, - Node: &node, - } + config := &adapters.NodeConfig{ID: enode.HexID(id)} + return &Event{Type: EventTypeNode, Node: newNode(nil, config, up)} } func (t *expectEvents) connEvent(one, other string, up bool) *Event { @@ -451,7 +445,7 @@ loop: for { select { case event := <-t.events: - t.Logf("received %s event: %s", event.Type, event) + t.Logf("received %s event: %v", event.Type, event) if event.Type != EventTypeMsg || event.Msg.Received { continue loop @@ -487,7 +481,7 @@ func (t *expectEvents) expect(events ...*Event) { for { select { case event := <-t.events: - t.Logf("received %s event: %s", event.Type, event) + t.Logf("received %s event: %v", event.Type, event) expected := events[i] if event.Type != expected.Type { @@ -495,7 +489,6 @@ func (t *expectEvents) expect(events ...*Event) { } switch expected.Type { - case EventTypeNode: if event.Node == nil { t.Fatal("expected event.Node to be set") @@ -520,7 +513,6 @@ func (t *expectEvents) expect(events ...*Event) { if event.Conn.Up != expected.Conn.Up { t.Fatalf("expected conn event %d to have up=%t, got up=%t", i, expected.Conn.Up, event.Conn.Up) } - } i++ diff --git a/p2p/simulations/mocker.go b/p2p/simulations/mocker.go index cd4f52b6..5a74b02c 100644 --- a/p2p/simulations/mocker.go +++ b/p2p/simulations/mocker.go @@ -24,9 +24,9 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" ) //a map of mocker names to its function @@ -123,20 +123,12 @@ func probabilistic(net *Network, quit chan struct{}, nodeCount int) { randWait := time.Duration(rand.Intn(5000)+1000) * time.Millisecond rand1 := rand.Intn(nodeCount - 1) rand2 := rand.Intn(nodeCount - 1) - if rand1 < rand2 { + if rand1 <= rand2 { lowid = rand1 highid = rand2 } else if rand1 > rand2 { highid = rand1 lowid = rand2 - } else { - if rand1 == 0 { - rand2 = 9 - } else if rand1 == 9 { - rand1 = 0 - } - lowid = rand1 - highid = rand2 } var steps = highid - lowid wg.Add(steps) @@ -165,7 +157,6 @@ func probabilistic(net *Network, quit chan struct{}, nodeCount int) { } wg.Wait() } - } //connect nodeCount number of nodes in a ring diff --git a/p2p/simulations/mocker_test.go b/p2p/simulations/mocker_test.go index 3db48238..56d81942 100644 --- a/p2p/simulations/mocker_test.go +++ b/p2p/simulations/mocker_test.go @@ -27,7 +27,7 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enode" ) func TestMocker(t *testing.T) { @@ -80,14 +80,17 @@ func TestMocker(t *testing.T) { var opts SubscribeOpts sub, err := client.SubscribeNetwork(events, opts) defer sub.Unsubscribe() - //wait until all nodes are started and connected - //store every node up event in a map (value is irrelevant, mimic Set datatype) + + // wait until all nodes are started and connected + // store every node up event in a map (value is irrelevant, mimic Set datatype) nodemap := make(map[enode.ID]bool) - wg.Add(1) nodesComplete := false connCount := 0 + wg.Add(1) go func() { - for { + defer wg.Done() + + for connCount < (nodeCount-1)*2 { select { case event := <-events: if isNodeUp(event) { @@ -99,14 +102,10 @@ func TestMocker(t *testing.T) { } } else if event.Conn != nil && nodesComplete { connCount += 1 - if connCount == (nodeCount-1)*2 { - wg.Done() - return - } } case <-time.After(30 * time.Second): - wg.Done() - t.Fatalf("Timeout waiting for nodes being started up!") + t.Errorf("Timeout waiting for nodes being started up!") + return } } }() diff --git a/p2p/simulations/network.go b/p2p/simulations/network.go index 85d72b3d..d6c5aca7 100644 --- a/p2p/simulations/network.go +++ b/p2p/simulations/network.go @@ -22,16 +22,15 @@ import ( "encoding/json" "errors" "fmt" - "io" "math/rand" "sync" "time" - "github.com/cryptoecc/ETH-ECC/event" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/event" + "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/simulations/adapters" ) var DialBanTimeout = 200 * time.Millisecond @@ -56,6 +55,9 @@ type Network struct { Nodes []*Node `json:"nodes"` nodeMap map[enode.ID]int + // Maps a node property string to node indexes of all nodes that hold this property + propertyMap map[string][]int + Conns []*Conn `json:"conns"` connMap map[string]int @@ -71,6 +73,7 @@ func NewNetwork(nodeAdapter adapters.NodeAdapter, conf *NetworkConfig) *Network NetworkConfig: *conf, nodeAdapter: nodeAdapter, nodeMap: make(map[enode.ID]int), + propertyMap: make(map[string][]int), connMap: make(map[string]int), quitc: make(chan struct{}), } @@ -106,8 +109,8 @@ func (net *Network) NewNodeWithConfig(conf *adapters.NodeConfig) (*Node, error) } // if no services are configured, use the default service - if len(conf.Services) == 0 { - conf.Services = []string{net.DefaultService} + if len(conf.Lifecycles) == 0 { + conf.Lifecycles = []string{net.DefaultService} } // use the NodeAdapter to create the node @@ -115,14 +118,18 @@ func (net *Network) NewNodeWithConfig(conf *adapters.NodeConfig) (*Node, error) if err != nil { return nil, err } - node := &Node{ - Node: adapterNode, - Config: conf, - } + node := newNode(adapterNode, conf, false) log.Trace("Node created", "id", conf.ID) - net.nodeMap[conf.ID] = len(net.Nodes) + + nodeIndex := len(net.Nodes) + net.nodeMap[conf.ID] = nodeIndex net.Nodes = append(net.Nodes, node) + // Register any node properties with the network-level propertyMap + for _, property := range conf.Properties { + net.propertyMap[property] = append(net.propertyMap[property], nodeIndex) + } + // emit a "control" event net.events.Send(ControlEvent(node)) @@ -228,7 +235,6 @@ func (net *Network) watchPeerEvents(id enode.ID, events chan *p2p.PeerEvent, sub } peer := event.Peer switch event.Type { - case p2p.PeerEventTypeAdd: net.DidConnect(id, peer) @@ -240,7 +246,6 @@ func (net *Network) watchPeerEvents(id enode.ID, events chan *p2p.PeerEvent, sub case p2p.PeerEventTypeMsgRecv: net.DidReceive(peer, id, event.Protocol, *event.MsgCode) - } case err := <-sub.Err(): @@ -410,7 +415,7 @@ func (net *Network) getNode(id enode.ID) *Node { return net.Nodes[i] } -// GetNode gets the node with the given name, returning nil if the node does +// GetNodeByName gets the node with the given name, returning nil if the node does // not exist func (net *Network) GetNodeByName(name string) *Node { net.lock.RLock() @@ -427,19 +432,102 @@ func (net *Network) getNodeByName(name string) *Node { return nil } -// GetNodes returns the existing nodes -func (net *Network) GetNodes() (nodes []*Node) { +// GetNodeIDs returns the IDs of all existing nodes +// Nodes can optionally be excluded by specifying their enode.ID. +func (net *Network) GetNodeIDs(excludeIDs ...enode.ID) []enode.ID { + net.lock.RLock() + defer net.lock.RUnlock() + + return net.getNodeIDs(excludeIDs) +} + +func (net *Network) getNodeIDs(excludeIDs []enode.ID) []enode.ID { + // Get all current nodeIDs + nodeIDs := make([]enode.ID, 0, len(net.nodeMap)) + for id := range net.nodeMap { + nodeIDs = append(nodeIDs, id) + } + + if len(excludeIDs) > 0 { + // Return the difference of nodeIDs and excludeIDs + return filterIDs(nodeIDs, excludeIDs) + } + return nodeIDs +} + +// GetNodes returns the existing nodes. +// Nodes can optionally be excluded by specifying their enode.ID. +func (net *Network) GetNodes(excludeIDs ...enode.ID) []*Node { + net.lock.RLock() + defer net.lock.RUnlock() + + return net.getNodes(excludeIDs) +} + +func (net *Network) getNodes(excludeIDs []enode.ID) []*Node { + if len(excludeIDs) > 0 { + nodeIDs := net.getNodeIDs(excludeIDs) + return net.getNodesByID(nodeIDs) + } + return net.Nodes +} + +// GetNodesByID returns existing nodes with the given enode.IDs. +// If a node doesn't exist with a given enode.ID, it is ignored. +func (net *Network) GetNodesByID(nodeIDs []enode.ID) []*Node { + net.lock.RLock() + defer net.lock.RUnlock() + + return net.getNodesByID(nodeIDs) +} + +func (net *Network) getNodesByID(nodeIDs []enode.ID) []*Node { + nodes := make([]*Node, 0, len(nodeIDs)) + for _, id := range nodeIDs { + node := net.getNode(id) + if node != nil { + nodes = append(nodes, node) + } + } + + return nodes +} + +// GetNodesByProperty returns existing nodes that have the given property string registered in their NodeConfig +func (net *Network) GetNodesByProperty(property string) []*Node { net.lock.RLock() defer net.lock.RUnlock() - return net.getNodes() + return net.getNodesByProperty(property) } -func (net *Network) getNodes() (nodes []*Node) { - nodes = append(nodes, net.Nodes...) +func (net *Network) getNodesByProperty(property string) []*Node { + nodes := make([]*Node, 0, len(net.propertyMap[property])) + for _, nodeIndex := range net.propertyMap[property] { + nodes = append(nodes, net.Nodes[nodeIndex]) + } + return nodes } +// GetNodeIDsByProperty returns existing node's enode IDs that have the given property string registered in the NodeConfig +func (net *Network) GetNodeIDsByProperty(property string) []enode.ID { + net.lock.RLock() + defer net.lock.RUnlock() + + return net.getNodeIDsByProperty(property) +} + +func (net *Network) getNodeIDsByProperty(property string) []enode.ID { + nodeIDs := make([]enode.ID, 0, len(net.propertyMap[property])) + for _, nodeIndex := range net.propertyMap[property] { + node := net.Nodes[nodeIndex] + nodeIDs = append(nodeIDs, node.ID()) + } + + return nodeIDs +} + // GetRandomUpNode returns a random node on the network, which is running. func (net *Network) GetRandomUpNode(excludeIDs ...enode.ID) *Node { net.lock.RLock() @@ -469,7 +557,7 @@ func (net *Network) GetRandomDownNode(excludeIDs ...enode.ID) *Node { } func (net *Network) getDownNodeIDs() (ids []enode.ID) { - for _, node := range net.getNodes() { + for _, node := range net.Nodes { if !node.Up() { ids = append(ids, node.ID()) } @@ -477,6 +565,13 @@ func (net *Network) getDownNodeIDs() (ids []enode.ID) { return ids } +// GetRandomNode returns a random node on the network, regardless of whether it is running or not +func (net *Network) GetRandomNode(excludeIDs ...enode.ID) *Node { + net.lock.RLock() + defer net.lock.RUnlock() + return net.getRandomNode(net.getNodeIDs(nil), excludeIDs) // no need to exclude twice +} + func (net *Network) getRandomNode(ids []enode.ID, excludeIDs []enode.ID) *Node { filtered := filterIDs(ids, excludeIDs) @@ -597,12 +692,6 @@ 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) } @@ -616,6 +705,7 @@ func (net *Network) Reset() { //re-initialize the maps net.connMap = make(map[string]int) net.nodeMap = make(map[enode.ID]int) + net.propertyMap = make(map[string][]int) net.Nodes = nil net.Conns = nil @@ -631,15 +721,26 @@ type Node struct { // up tracks whether or not the node is running up bool - upMu sync.RWMutex + upMu *sync.RWMutex +} + +func newNode(an adapters.Node, ac *adapters.NodeConfig, up bool) *Node { + return &Node{Node: an, Config: ac, up: up, upMu: new(sync.RWMutex)} +} + +func (n *Node) copy() *Node { + configCpy := *n.Config + return newNode(n.Node, &configCpy, n.Up()) } +// Up returns whether the node is currently up (online) func (n *Node) Up() bool { n.upMu.RLock() defer n.upMu.RUnlock() return n.up } +// SetUp sets the up (online) status of the nodes with the given value func (n *Node) SetUp(up bool) { n.upMu.Lock() defer n.upMu.Unlock() @@ -681,22 +782,19 @@ func (n *Node) MarshalJSON() ([]byte, error) { }) } -// UnmarshalJSON implements json.Unmarshaler interface so that we don't lose -// Node.up status. IMPORTANT: The implementation is incomplete; we lose -// p2p.NodeInfo. +// UnmarshalJSON implements json.Unmarshaler interface so that we don't lose Node.up +// status. IMPORTANT: The implementation is incomplete; we lose p2p.NodeInfo. func (n *Node) UnmarshalJSON(raw []byte) error { // TODO: How should we turn back NodeInfo into n.Node? // Ticket: https://github.com/ethersphere/go-ethereum/issues/1177 - node := struct { + var node struct { Config *adapters.NodeConfig `json:"config,omitempty"` Up bool `json:"up"` - }{} + } if err := json.Unmarshal(raw, &node); err != nil { return err } - - n.SetUp(node.Up) - n.Config = node.Config + *n = *newNode(nil, node.Config, node.Up) return nil } @@ -793,7 +891,7 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn Nodes: make([]NodeSnapshot, len(net.Nodes)), } for i, node := range net.Nodes { - snap.Nodes[i] = NodeSnapshot{Node: *node} + snap.Nodes[i] = NodeSnapshot{Node: *node.copy()} if !node.Up() { continue } @@ -804,19 +902,19 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn snap.Nodes[i].Snapshots = snapshots for _, addSvc := range addServices { haveSvc := false - for _, svc := range snap.Nodes[i].Node.Config.Services { + for _, svc := range snap.Nodes[i].Node.Config.Lifecycles { if svc == addSvc { haveSvc = true break } } if !haveSvc { - snap.Nodes[i].Node.Config.Services = append(snap.Nodes[i].Node.Config.Services, addSvc) + snap.Nodes[i].Node.Config.Lifecycles = append(snap.Nodes[i].Node.Config.Lifecycles, addSvc) } } if len(removeServices) > 0 { var cleanedServices []string - for _, svc := range snap.Nodes[i].Node.Config.Services { + for _, svc := range snap.Nodes[i].Node.Config.Lifecycles { haveSvc := false for _, rmSvc := range removeServices { if rmSvc == svc { @@ -827,9 +925,8 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn if !haveSvc { cleanedServices = append(cleanedServices, svc) } - } - snap.Nodes[i].Node.Config.Services = cleanedServices + snap.Nodes[i].Node.Config.Lifecycles = cleanedServices } } for _, conn := range net.Conns { @@ -921,7 +1018,6 @@ func (net *Network) Load(snap *Snapshot) error { // Start connecting. for _, conn := range snap.Conns { - if !net.GetNode(conn.One).Up() || !net.GetNode(conn.Other).Up() { //in this case, at least one of the nodes of a connection is not up, //so it would result in the snapshot `Load` to fail @@ -989,7 +1085,6 @@ func (net *Network) executeNodeEvent(e *Event) error { func (net *Network) executeConnEvent(e *Event) error { if e.Conn.Up { return net.Connect(e.Conn.One, e.Conn.Other) - } else { - return net.Disconnect(e.Conn.One, e.Conn.Other) } + return net.Disconnect(e.Conn.One, e.Conn.Other) } diff --git a/p2p/simulations/network_test.go b/p2p/simulations/network_test.go index 0930b349..ab8cf194 100644 --- a/p2p/simulations/network_test.go +++ b/p2p/simulations/network_test.go @@ -17,6 +17,7 @@ package simulations import ( + "bytes" "context" "encoding/json" "fmt" @@ -26,22 +27,21 @@ import ( "testing" "time" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" + "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" ) // Tests that a created snapshot with a minimal service only contains the expected connections // and that a network when loaded with this snapshot only contains those same connections func TestSnapshot(t *testing.T) { - // PART I // create snapshot from ring network // this is a minimal service, whose protocol will take exactly one message OR close of connection before quitting - adapter := adapters.NewSimAdapter(adapters.Services{ - "noopwoop": func(ctx *adapters.ServiceContext) (node.Service, error) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "noopwoop": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { return NewNoopService(nil), nil }, }) @@ -80,11 +80,13 @@ func TestSnapshot(t *testing.T) { // connect nodes in a ring // spawn separate thread to avoid deadlock in the event listeners + connectErr := make(chan error, 1) go func() { for i, id := range ids { peerID := ids[(i+1)%len(ids)] if err := network.Connect(id, peerID); err != nil { - t.Fatal(err) + connectErr <- err + return } } }() @@ -99,9 +101,10 @@ OUTER: select { case <-ctx.Done(): t.Fatal(ctx.Err()) + case err := <-connectErr: + t.Fatal(err) case ev := <-evC: if ev.Type == EventTypeConn && !ev.Control { - // fail on any disconnect if !ev.Conn.Up { t.Fatalf("unexpected disconnect: %v -> %v", ev.Conn.One, ev.Conn.Other) @@ -161,8 +164,8 @@ OUTER: // PART II // load snapshot and verify that exactly same connections are formed - adapter = adapters.NewSimAdapter(adapters.Services{ - "noopwoop": func(ctx *adapters.ServiceContext) (node.Service, error) { + adapter = adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "noopwoop": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { return NewNoopService(nil), nil }, }) @@ -200,7 +203,6 @@ OuterTwo: t.Fatal(ctx.Err()) case ev := <-evC: if ev.Type == EventTypeConn && !ev.Control { - // fail on any disconnect if !ev.Conn.Up { t.Fatalf("unexpected disconnect: %v -> %v", ev.Conn.One, ev.Conn.Other) @@ -252,8 +254,8 @@ OuterTwo: t.Run("conns after load", func(t *testing.T) { // Create new network. n := NewNetwork( - adapters.NewSimAdapter(adapters.Services{ - "noopwoop": func(ctx *adapters.ServiceContext) (node.Service, error) { + adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "noopwoop": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { return NewNoopService(nil), nil }, }), @@ -284,7 +286,7 @@ OuterTwo: // with each other and that a snapshot fully represents the desired topology func TestNetworkSimulation(t *testing.T) { // create simulation network with 20 testService nodes - adapter := adapters.NewSimAdapter(adapters.Services{ + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ "test": newTestService, }) network := NewNetwork(adapter, &NetworkConfig{ @@ -393,6 +395,275 @@ func TestNetworkSimulation(t *testing.T) { } } +func createTestNodes(count int, network *Network) (nodes []*Node, err error) { + for i := 0; i < count; i++ { + nodeConf := adapters.RandomNodeConfig() + node, err := network.NewNodeWithConfig(nodeConf) + if err != nil { + return nil, err + } + if err := network.Start(node.ID()); err != nil { + return nil, err + } + + nodes = append(nodes, node) + } + + return nodes, nil +} + +func createTestNodesWithProperty(property string, count int, network *Network) (propertyNodes []*Node, err error) { + for i := 0; i < count; i++ { + nodeConf := adapters.RandomNodeConfig() + nodeConf.Properties = append(nodeConf.Properties, property) + + node, err := network.NewNodeWithConfig(nodeConf) + if err != nil { + return nil, err + } + if err := network.Start(node.ID()); err != nil { + return nil, err + } + + propertyNodes = append(propertyNodes, node) + } + + return propertyNodes, nil +} + +// TestGetNodeIDs creates a set of nodes and attempts to retrieve their IDs,. +// It then tests again whilst excluding a node ID from being returned. +// If a node ID is not returned, or more node IDs than expected are returned, the test fails. +func TestGetNodeIDs(t *testing.T) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "test": newTestService, + }) + network := NewNetwork(adapter, &NetworkConfig{ + DefaultService: "test", + }) + defer network.Shutdown() + + numNodes := 5 + nodes, err := createTestNodes(numNodes, network) + if err != nil { + t.Fatalf("Could not create test nodes %v", err) + } + + gotNodeIDs := network.GetNodeIDs() + if len(gotNodeIDs) != numNodes { + t.Fatalf("Expected %d nodes, got %d", numNodes, len(gotNodeIDs)) + } + + for _, node1 := range nodes { + match := false + for _, node2ID := range gotNodeIDs { + if bytes.Equal(node1.ID().Bytes(), node2ID.Bytes()) { + match = true + break + } + } + + if !match { + t.Fatalf("A created node was not returned by GetNodes(), ID: %s", node1.ID().String()) + } + } + + excludeNodeID := nodes[3].ID() + gotNodeIDsExcl := network.GetNodeIDs(excludeNodeID) + if len(gotNodeIDsExcl) != numNodes-1 { + t.Fatalf("Expected one less node ID to be returned") + } + for _, nodeID := range gotNodeIDsExcl { + if bytes.Equal(excludeNodeID.Bytes(), nodeID.Bytes()) { + t.Fatalf("GetNodeIDs returned the node ID we excluded, ID: %s", nodeID.String()) + } + } +} + +// TestGetNodes creates a set of nodes and attempts to retrieve them again. +// It then tests again whilst excluding a node from being returned. +// If a node is not returned, or more nodes than expected are returned, the test fails. +func TestGetNodes(t *testing.T) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "test": newTestService, + }) + network := NewNetwork(adapter, &NetworkConfig{ + DefaultService: "test", + }) + defer network.Shutdown() + + numNodes := 5 + nodes, err := createTestNodes(numNodes, network) + if err != nil { + t.Fatalf("Could not create test nodes %v", err) + } + + gotNodes := network.GetNodes() + if len(gotNodes) != numNodes { + t.Fatalf("Expected %d nodes, got %d", numNodes, len(gotNodes)) + } + + for _, node1 := range nodes { + match := false + for _, node2 := range gotNodes { + if bytes.Equal(node1.ID().Bytes(), node2.ID().Bytes()) { + match = true + break + } + } + + if !match { + t.Fatalf("A created node was not returned by GetNodes(), ID: %s", node1.ID().String()) + } + } + + excludeNodeID := nodes[3].ID() + gotNodesExcl := network.GetNodes(excludeNodeID) + if len(gotNodesExcl) != numNodes-1 { + t.Fatalf("Expected one less node to be returned") + } + for _, node := range gotNodesExcl { + if bytes.Equal(excludeNodeID.Bytes(), node.ID().Bytes()) { + t.Fatalf("GetNodes returned the node we excluded, ID: %s", node.ID().String()) + } + } +} + +// TestGetNodesByID creates a set of nodes and attempts to retrieve a subset of them by ID +// If a node is not returned, or more nodes than expected are returned, the test fails. +func TestGetNodesByID(t *testing.T) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "test": newTestService, + }) + network := NewNetwork(adapter, &NetworkConfig{ + DefaultService: "test", + }) + defer network.Shutdown() + + numNodes := 5 + nodes, err := createTestNodes(numNodes, network) + if err != nil { + t.Fatalf("Could not create test nodes: %v", err) + } + + numSubsetNodes := 2 + subsetNodes := nodes[0:numSubsetNodes] + var subsetNodeIDs []enode.ID + for _, node := range subsetNodes { + subsetNodeIDs = append(subsetNodeIDs, node.ID()) + } + + gotNodesByID := network.GetNodesByID(subsetNodeIDs) + if len(gotNodesByID) != numSubsetNodes { + t.Fatalf("Expected %d nodes, got %d", numSubsetNodes, len(gotNodesByID)) + } + + for _, node1 := range subsetNodes { + match := false + for _, node2 := range gotNodesByID { + if bytes.Equal(node1.ID().Bytes(), node2.ID().Bytes()) { + match = true + break + } + } + + if !match { + t.Fatalf("A created node was not returned by GetNodesByID(), ID: %s", node1.ID().String()) + } + } +} + +// TestGetNodesByProperty creates a subset of nodes with a property assigned. +// GetNodesByProperty is then checked for correctness by comparing the nodes returned to those initially created. +// If a node with a property is not found, or more nodes than expected are returned, the test fails. +func TestGetNodesByProperty(t *testing.T) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "test": newTestService, + }) + network := NewNetwork(adapter, &NetworkConfig{ + DefaultService: "test", + }) + defer network.Shutdown() + + numNodes := 3 + _, err := createTestNodes(numNodes, network) + if err != nil { + t.Fatalf("Failed to create nodes: %v", err) + } + + numPropertyNodes := 3 + propertyTest := "test" + propertyNodes, err := createTestNodesWithProperty(propertyTest, numPropertyNodes, network) + if err != nil { + t.Fatalf("Failed to create nodes with property: %v", err) + } + + gotNodesByProperty := network.GetNodesByProperty(propertyTest) + if len(gotNodesByProperty) != numPropertyNodes { + t.Fatalf("Expected %d nodes with a property, got %d", numPropertyNodes, len(gotNodesByProperty)) + } + + for _, node1 := range propertyNodes { + match := false + for _, node2 := range gotNodesByProperty { + if bytes.Equal(node1.ID().Bytes(), node2.ID().Bytes()) { + match = true + break + } + } + + if !match { + t.Fatalf("A created node with property was not returned by GetNodesByProperty(), ID: %s", node1.ID().String()) + } + } +} + +// TestGetNodeIDsByProperty creates a subset of nodes with a property assigned. +// GetNodeIDsByProperty is then checked for correctness by comparing the node IDs returned to those initially created. +// If a node ID with a property is not found, or more nodes IDs than expected are returned, the test fails. +func TestGetNodeIDsByProperty(t *testing.T) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "test": newTestService, + }) + network := NewNetwork(adapter, &NetworkConfig{ + DefaultService: "test", + }) + defer network.Shutdown() + + numNodes := 3 + _, err := createTestNodes(numNodes, network) + if err != nil { + t.Fatalf("Failed to create nodes: %v", err) + } + + numPropertyNodes := 3 + propertyTest := "test" + propertyNodes, err := createTestNodesWithProperty(propertyTest, numPropertyNodes, network) + if err != nil { + t.Fatalf("Failed to created nodes with property: %v", err) + } + + gotNodeIDsByProperty := network.GetNodeIDsByProperty(propertyTest) + if len(gotNodeIDsByProperty) != numPropertyNodes { + t.Fatalf("Expected %d nodes with a property, got %d", numPropertyNodes, len(gotNodeIDsByProperty)) + } + + for _, node1 := range propertyNodes { + match := false + id1 := node1.ID() + for _, id2 := range gotNodeIDsByProperty { + if bytes.Equal(id1.Bytes(), id2.Bytes()) { + match = true + break + } + } + + if !match { + t.Fatalf("Not all nodes IDs were returned by GetNodeIDsByProperty(), ID: %s", id1.String()) + } + } +} + func triggerChecks(ctx context.Context, ids []enode.ID, trigger chan enode.ID, interval time.Duration) { tick := time.NewTicker(interval) defer tick.Stop() @@ -420,7 +691,6 @@ func BenchmarkMinimalService(b *testing.B) { } func benchmarkMinimalServiceTmp(b *testing.B) { - // stop timer to discard setup time pollution args := strings.Split(b.Name(), "/") nodeCount, err := strconv.ParseInt(args[2], 10, 16) @@ -432,8 +702,8 @@ func benchmarkMinimalServiceTmp(b *testing.B) { // this is a minimal service, whose protocol will close a channel upon run of protocol // making it possible to bench the time it takes for the service to start and protocol actually to be run protoCMap := make(map[enode.ID]map[enode.ID]chan struct{}) - adapter := adapters.NewSimAdapter(adapters.Services{ - "noopwoop": func(ctx *adapters.ServiceContext) (node.Service, error) { + adapter := adapters.NewSimAdapter(adapters.LifecycleConstructors{ + "noopwoop": func(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { protoCMap[ctx.Config.ID] = make(map[enode.ID]chan struct{}) svc := NewNoopService(protoCMap[ctx.Config.ID]) return svc, nil @@ -488,27 +758,22 @@ func benchmarkMinimalServiceTmp(b *testing.B) { } func TestNode_UnmarshalJSON(t *testing.T) { - t.Run( - "test unmarshal of Node up field", - func(t *testing.T) { - runNodeUnmarshalJSON(t, casesNodeUnmarshalJSONUpField()) - }, - ) - t.Run( - "test unmarshal of Node Config field", - func(t *testing.T) { - runNodeUnmarshalJSON(t, casesNodeUnmarshalJSONConfigField()) - }, - ) + t.Run("up_field", func(t *testing.T) { + runNodeUnmarshalJSON(t, casesNodeUnmarshalJSONUpField()) + }) + t.Run("config_field", func(t *testing.T) { + runNodeUnmarshalJSON(t, casesNodeUnmarshalJSONConfigField()) + }) } func runNodeUnmarshalJSON(t *testing.T, tests []nodeUnmarshalTestCase) { t.Helper() for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var got Node - if err := got.UnmarshalJSON([]byte(tt.marshaled)); err != nil { + var got *Node + if err := json.Unmarshal([]byte(tt.marshaled), &got); err != nil { expectErrorMessageToContain(t, err, tt.wantErr) + got = nil } expectNodeEquality(t, got, tt.want) }) @@ -518,7 +783,7 @@ func runNodeUnmarshalJSON(t *testing.T, tests []nodeUnmarshalTestCase) { type nodeUnmarshalTestCase struct { name string marshaled string - want Node + want *Node wantErr string } @@ -542,7 +807,7 @@ func expectErrorMessageToContain(t *testing.T, got error, want string) { } } -func expectNodeEquality(t *testing.T, got Node, want Node) { +func expectNodeEquality(t *testing.T, got, want *Node) { t.Helper() if !reflect.DeepEqual(got, want) { t.Errorf("Node.UnmarshalJSON() = %v, want %v", got, want) @@ -554,23 +819,17 @@ func casesNodeUnmarshalJSONUpField() []nodeUnmarshalTestCase { { name: "empty json", marshaled: "{}", - want: Node{ - up: false, - }, + want: newNode(nil, nil, false), }, { name: "a stopped node", marshaled: "{\"up\": false}", - want: Node{ - up: false, - }, + want: newNode(nil, nil, false), }, { name: "a running node", marshaled: "{\"up\": true}", - want: Node{ - up: true, - }, + want: newNode(nil, nil, true), }, { name: "invalid JSON value on valid key", @@ -597,26 +856,17 @@ func casesNodeUnmarshalJSONConfigField() []nodeUnmarshalTestCase { { name: "Config field is omitted", marshaled: "{}", - want: Node{ - Config: nil, - }, + want: newNode(nil, nil, false), }, { name: "Config field is nil", - marshaled: "{\"config\": nil}", - want: Node{ - Config: nil, - }, + marshaled: "{\"config\": null}", + want: newNode(nil, nil, false), }, { name: "a non default Config field", marshaled: "{\"config\":{\"name\":\"node_ecdd0\",\"port\":44665}}", - want: Node{ - Config: &adapters.NodeConfig{ - Name: "node_ecdd0", - Port: 44665, - }, - }, + want: newNode(nil, &adapters.NodeConfig{Name: "node_ecdd0", Port: 44665}, false), }, } } diff --git a/p2p/simulations/simulation.go b/p2p/simulations/simulation.go index 64bca810..ae62c42b 100644 --- a/p2p/simulations/simulation.go +++ b/p2p/simulations/simulation.go @@ -20,7 +20,7 @@ import ( "context" "time" - "github.com/cryptoecc/ETH-ECC/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enode" ) // Simulation provides a framework for running actions in a simulated network diff --git a/p2p/simulations/test.go b/p2p/simulations/test.go index 1f61b5ca..0edb07b1 100644 --- a/p2p/simulations/test.go +++ b/p2p/simulations/test.go @@ -19,10 +19,10 @@ package simulations import ( "testing" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/enr" - "github.com/cryptoecc/ETH-ECC/rpc" + "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" ) // NoopService is the service that does not do anything @@ -66,7 +66,7 @@ func (t *NoopService) APIs() []rpc.API { return []rpc.API{} } -func (t *NoopService) Start(server *p2p.Server) error { +func (t *NoopService) Start() error { return nil } diff --git a/p2p/testing/peerpool.go b/p2p/testing/peerpool.go deleted file mode 100644 index 70cadbd2..00000000 --- a/p2p/testing/peerpool.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 testing - -import ( - "fmt" - "sync" - - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/enode" -) - -type TestPeer interface { - ID() enode.ID - Drop() -} - -// TestPeerPool is an example peerPool to demonstrate registration of peer connections -type TestPeerPool struct { - lock sync.Mutex - peers map[enode.ID]TestPeer -} - -func NewTestPeerPool() *TestPeerPool { - return &TestPeerPool{peers: make(map[enode.ID]TestPeer)} -} - -func (p *TestPeerPool) Add(peer TestPeer) { - p.lock.Lock() - defer p.lock.Unlock() - log.Trace(fmt.Sprintf("pp add peer %v", peer.ID())) - p.peers[peer.ID()] = peer - -} - -func (p *TestPeerPool) Remove(peer TestPeer) { - p.lock.Lock() - defer p.lock.Unlock() - delete(p.peers, peer.ID()) -} - -func (p *TestPeerPool) Has(id enode.ID) bool { - p.lock.Lock() - defer p.lock.Unlock() - _, ok := p.peers[id] - return ok -} - -func (p *TestPeerPool) Get(id enode.ID) TestPeer { - p.lock.Lock() - defer p.lock.Unlock() - return p.peers[id] -} diff --git a/p2p/testing/protocolsession.go b/p2p/testing/protocolsession.go deleted file mode 100644 index 785011fa..00000000 --- a/p2p/testing/protocolsession.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 testing - -import ( - "errors" - "fmt" - "sync" - "time" - - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" -) - -var errTimedOut = errors.New("timed out") - -// ProtocolSession is a quasi simulation of a pivot node running -// a service and a number of dummy peers that can send (trigger) or -// receive (expect) messages -type ProtocolSession struct { - Server *p2p.Server - Nodes []*enode.Node - adapter *adapters.SimAdapter - events chan *p2p.PeerEvent -} - -// Exchange is the basic units of protocol tests -// the triggers and expects in the arrays are run immediately and asynchronously -// thus one cannot have multiple expects for the SAME peer with DIFFERENT message types -// because it's unpredictable which expect will receive which message -// (with expect #1 and #2, messages might be sent #2 and #1, and both expects will complain about wrong message code) -// an exchange is defined on a session -type Exchange struct { - Label string - Triggers []Trigger - Expects []Expect - Timeout time.Duration -} - -// Trigger is part of the exchange, incoming message for the pivot node -// sent by a peer -type Trigger struct { - Msg interface{} // type of message to be sent - Code uint64 // code of message is given - Peer enode.ID // the peer to send the message to - Timeout time.Duration // timeout duration for the sending -} - -// Expect is part of an exchange, outgoing message from the pivot node -// received by a peer -type Expect struct { - Msg interface{} // type of message to expect - Code uint64 // code of message is now given - Peer enode.ID // the peer that expects the message - Timeout time.Duration // timeout duration for receiving -} - -// Disconnect represents a disconnect event, used and checked by TestDisconnected -type Disconnect struct { - Peer enode.ID // discconnected peer - Error error // disconnect reason -} - -// trigger sends messages from peers -func (s *ProtocolSession) trigger(trig Trigger) error { - simNode, ok := s.adapter.GetNode(trig.Peer) - if !ok { - return fmt.Errorf("trigger: peer %v does not exist (1- %v)", trig.Peer, len(s.Nodes)) - } - mockNode, ok := simNode.Services()[0].(*mockNode) - if !ok { - return fmt.Errorf("trigger: peer %v is not a mock", trig.Peer) - } - - errc := make(chan error) - - go func() { - log.Trace(fmt.Sprintf("trigger %v (%v)....", trig.Msg, trig.Code)) - errc <- mockNode.Trigger(&trig) - log.Trace(fmt.Sprintf("triggered %v (%v)", trig.Msg, trig.Code)) - }() - - t := trig.Timeout - if t == time.Duration(0) { - t = 1000 * time.Millisecond - } - select { - case err := <-errc: - return err - case <-time.After(t): - return fmt.Errorf("timout expecting %v to send to peer %v", trig.Msg, trig.Peer) - } -} - -// expect checks an expectation of a message sent out by the pivot node -func (s *ProtocolSession) expect(exps []Expect) error { - // construct a map of expectations for each node - peerExpects := make(map[enode.ID][]Expect) - for _, exp := range exps { - if exp.Msg == nil { - return errors.New("no message to expect") - } - peerExpects[exp.Peer] = append(peerExpects[exp.Peer], exp) - } - - // construct a map of mockNodes for each node - mockNodes := make(map[enode.ID]*mockNode) - for nodeID := range peerExpects { - simNode, ok := s.adapter.GetNode(nodeID) - if !ok { - return fmt.Errorf("trigger: peer %v does not exist (1- %v)", nodeID, len(s.Nodes)) - } - mockNode, ok := simNode.Services()[0].(*mockNode) - if !ok { - return fmt.Errorf("trigger: peer %v is not a mock", nodeID) - } - mockNodes[nodeID] = mockNode - } - - // done chanell cancels all created goroutines when function returns - done := make(chan struct{}) - defer close(done) - // errc catches the first error from - errc := make(chan error) - - wg := &sync.WaitGroup{} - wg.Add(len(mockNodes)) - for nodeID, mockNode := range mockNodes { - nodeID := nodeID - mockNode := mockNode - go func() { - defer wg.Done() - - // Sum all Expect timeouts to give the maximum - // time for all expectations to finish. - // mockNode.Expect checks all received messages against - // a list of expected messages and timeout for each - // of them can not be checked separately. - var t time.Duration - for _, exp := range peerExpects[nodeID] { - if exp.Timeout == time.Duration(0) { - t += 2000 * time.Millisecond - } else { - t += exp.Timeout - } - } - alarm := time.NewTimer(t) - defer alarm.Stop() - - // expectErrc is used to check if error returned - // from mockNode.Expect is not nil and to send it to - // errc only in that case. - // done channel will be closed when function - expectErrc := make(chan error) - go func() { - select { - case expectErrc <- mockNode.Expect(peerExpects[nodeID]...): - case <-done: - case <-alarm.C: - } - }() - - select { - case err := <-expectErrc: - if err != nil { - select { - case errc <- err: - case <-done: - case <-alarm.C: - errc <- errTimedOut - } - } - case <-done: - case <-alarm.C: - errc <- errTimedOut - } - - }() - } - - go func() { - wg.Wait() - // close errc when all goroutines finish to return nill err from errc - close(errc) - }() - - return <-errc -} - -// TestExchanges tests a series of exchanges against the session -func (s *ProtocolSession) TestExchanges(exchanges ...Exchange) error { - for i, e := range exchanges { - if err := s.testExchange(e); err != nil { - return fmt.Errorf("exchange #%d %q: %v", i, e.Label, err) - } - log.Trace(fmt.Sprintf("exchange #%d %q: run successfully", i, e.Label)) - } - return nil -} - -// testExchange tests a single Exchange. -// Default timeout value is 2 seconds. -func (s *ProtocolSession) testExchange(e Exchange) error { - errc := make(chan error) - done := make(chan struct{}) - defer close(done) - - go func() { - for _, trig := range e.Triggers { - err := s.trigger(trig) - if err != nil { - errc <- err - return - } - } - - select { - case errc <- s.expect(e.Expects): - case <-done: - } - }() - - // time out globally or finish when all expectations satisfied - t := e.Timeout - if t == 0 { - t = 2000 * time.Millisecond - } - alarm := time.NewTimer(t) - select { - case err := <-errc: - return err - case <-alarm.C: - return errTimedOut - } -} - -// TestDisconnected tests the disconnections given as arguments -// the disconnect structs describe what disconnect error is expected on which peer -func (s *ProtocolSession) TestDisconnected(disconnects ...*Disconnect) error { - expects := make(map[enode.ID]error) - for _, disconnect := range disconnects { - expects[disconnect.Peer] = disconnect.Error - } - - timeout := time.After(time.Second) - for len(expects) > 0 { - select { - case event := <-s.events: - if event.Type != p2p.PeerEventTypeDrop { - continue - } - expectErr, ok := expects[event.Peer] - if !ok { - continue - } - - if !(expectErr == nil && event.Error == "" || expectErr != nil && expectErr.Error() == event.Error) { - return fmt.Errorf("unexpected error on peer %v. expected '%v', got '%v'", event.Peer, expectErr, event.Error) - } - delete(expects, event.Peer) - case <-timeout: - return fmt.Errorf("timed out waiting for peers to disconnect") - } - } - return nil -} diff --git a/p2p/testing/protocoltester.go b/p2p/testing/protocoltester.go deleted file mode 100644 index 808d0c38..00000000 --- a/p2p/testing/protocoltester.go +++ /dev/null @@ -1,284 +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 . - -/* -the p2p/testing package provides a unit test scheme to check simple -protocol message exchanges with one pivot node and a number of dummy peers -The pivot test node runs a node.Service, the dummy peers run a mock node -that can be used to send and receive messages -*/ - -package testing - -import ( - "bytes" - "crypto/ecdsa" - "fmt" - "io" - "io/ioutil" - "strings" - "sync" - - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/node" - "github.com/cryptoecc/ETH-ECC/p2p" - "github.com/cryptoecc/ETH-ECC/p2p/enode" - "github.com/cryptoecc/ETH-ECC/p2p/simulations" - "github.com/cryptoecc/ETH-ECC/p2p/simulations/adapters" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/rpc" -) - -// ProtocolTester is the tester environment used for unit testing protocol -// message exchanges. It uses p2p/simulations framework -type ProtocolTester struct { - *ProtocolSession - network *simulations.Network -} - -// 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(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 - }, - "mock": func(ctx *adapters.ServiceContext) (node.Service, error) { - return newMockNode(), nil - }, - } - adapter := adapters.NewSimAdapter(services) - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{}) - nodeConfig := &adapters.NodeConfig{ - PrivateKey: prvkey, - EnableMsgEvents: true, - Services: []string{"test"}, - } - if _, err := net.NewNodeWithConfig(nodeConfig); err != nil { - panic(err.Error()) - } - if err := net.Start(nodeConfig.ID); err != nil { - panic(err.Error()) - } - - 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) - node.SubscribeEvents(events) - ps := &ProtocolSession{ - Server: node.Server(), - Nodes: nodes, - adapter: adapter, - events: events, - } - self := &ProtocolTester{ - ProtocolSession: ps, - network: net, - } - - self.Connect(nodeConfig.ID, peers...) - - return self -} - -// Stop stops the p2p server -func (t *ProtocolTester) Stop() { - t.Server.Stop() - 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("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)) - } - } - -} - -// testNode wraps a protocol run function and implements the node.Service -// interface -type testNode struct { - run func(*p2p.Peer, p2p.MsgReadWriter) error -} - -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 -} - -// mockNode is a testNode which doesn't actually run a protocol, instead -// exposing channels so that tests can manually trigger and expect certain -// messages -type mockNode struct { - testNode - - trigger chan *Trigger - expect chan []Expect - err chan error - stop chan struct{} - stopOnce sync.Once -} - -func newMockNode() *mockNode { - mock := &mockNode{ - trigger: make(chan *Trigger), - expect: make(chan []Expect), - err: make(chan error), - stop: make(chan struct{}), - } - mock.testNode.run = mock.Run - return mock -} - -// Run is a protocol run function which just loops waiting for tests to -// instruct it to either trigger or expect a message from the peer -func (m *mockNode) Run(peer *p2p.Peer, rw p2p.MsgReadWriter) error { - for { - select { - case trig := <-m.trigger: - wmsg := Wrap(trig.Msg) - m.err <- p2p.Send(rw, trig.Code, wmsg) - case exps := <-m.expect: - m.err <- expectMsgs(rw, exps) - case <-m.stop: - return nil - } - } -} - -func (m *mockNode) Trigger(trig *Trigger) error { - m.trigger <- trig - return <-m.err -} - -func (m *mockNode) Expect(exp ...Expect) error { - m.expect <- exp - return <-m.err -} - -func (m *mockNode) Stop() error { - m.stopOnce.Do(func() { close(m.stop) }) - return nil -} - -func expectMsgs(rw p2p.MsgReadWriter, exps []Expect) error { - matched := make([]bool, len(exps)) - for { - msg, err := rw.ReadMsg() - if err != nil { - if err == io.EOF { - break - } - return err - } - actualContent, err := ioutil.ReadAll(msg.Payload) - if err != nil { - return err - } - var found bool - for i, exp := range exps { - if exp.Code == msg.Code && bytes.Equal(actualContent, mustEncodeMsg(Wrap(exp.Msg))) { - if matched[i] { - return fmt.Errorf("message #%d received two times", i) - } - matched[i] = true - found = true - break - } - } - if !found { - expected := make([]string, 0) - for i, exp := range exps { - if matched[i] { - continue - } - expected = append(expected, fmt.Sprintf("code %d payload %x", exp.Code, mustEncodeMsg(Wrap(exp.Msg)))) - } - return fmt.Errorf("unexpected message code %d payload %x, expected %s", msg.Code, actualContent, strings.Join(expected, " or ")) - } - done := true - for _, m := range matched { - if !m { - done = false - break - } - } - if done { - return nil - } - } - for i, m := range matched { - if !m { - return fmt.Errorf("expected message #%d not received", i) - } - } - return nil -} - -// mustEncodeMsg uses rlp to encode a message. -// In case of error it panics. -func mustEncodeMsg(msg interface{}) []byte { - contentEnc, err := rlp.EncodeToBytes(msg) - if err != nil { - panic("content encode error: " + err.Error()) - } - return contentEnc -} - -type WrappedMsg struct { - Context []byte - Size uint32 - Payload []byte -} - -func Wrap(msg interface{}) interface{} { - data, _ := rlp.EncodeToBytes(msg) - return &WrappedMsg{ - Size: uint32(len(data)), - Payload: data, - } -} diff --git a/p2p/tracker/tracker.go b/p2p/tracker/tracker.go new file mode 100644 index 00000000..6a733b9b --- /dev/null +++ b/p2p/tracker/tracker.go @@ -0,0 +1,205 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracker + +import ( + "container/list" + "fmt" + "sync" + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" +) + +const ( + // trackedGaugeName is the prefix of the per-packet request tracking. + trackedGaugeName = "p2p/tracked" + + // lostMeterName is the prefix of the per-packet request expirations. + lostMeterName = "p2p/lost" + + // staleMeterName is the prefix of the per-packet stale responses. + staleMeterName = "p2p/stale" + + // waitHistName is the prefix of the per-packet (req only) waiting time histograms. + waitHistName = "p2p/wait" + + // maxTrackedPackets is a huge number to act as a failsafe on the number of + // pending requests the node will track. It should never be hit unless an + // attacker figures out a way to spin requests. + maxTrackedPackets = 100000 +) + +// request tracks sent network requests which have not yet received a response. +type request struct { + peer string + version uint // Protocol version + + reqCode uint64 // Protocol message code of the request + resCode uint64 // Protocol message code of the expected response + + time time.Time // Timestamp when the request was made + expire *list.Element // Expiration marker to untrack it +} + +// Tracker is a pending network request tracker to measure how much time it takes +// a remote peer to respond. +type Tracker struct { + protocol string // Protocol capability identifier for the metrics + timeout time.Duration // Global timeout after which to drop a tracked packet + + pending map[uint64]*request // Currently pending requests + expire *list.List // Linked list tracking the expiration order + wake *time.Timer // Timer tracking the expiration of the next item + + lock sync.Mutex // Lock protecting from concurrent updates +} + +// New creates a new network request tracker to monitor how much time it takes to +// fill certain requests and how individual peers perform. +func New(protocol string, timeout time.Duration) *Tracker { + return &Tracker{ + protocol: protocol, + timeout: timeout, + pending: make(map[uint64]*request), + expire: list.New(), + } +} + +// Track adds a network request to the tracker to wait for a response to arrive +// or until the request it cancelled or times out. +func (t *Tracker) Track(peer string, version uint, reqCode uint64, resCode uint64, id uint64) { + if !metrics.Enabled { + return + } + t.lock.Lock() + defer t.lock.Unlock() + + // If there's a duplicate request, we've just random-collided (or more probably, + // we have a bug), report it. We could also add a metric, but we're not really + // expecting ourselves to be buggy, so a noisy warning should be enough. + if _, ok := t.pending[id]; ok { + log.Error("Network request id collision", "protocol", t.protocol, "version", version, "code", reqCode, "id", id) + return + } + // If we have too many pending requests, bail out instead of leaking memory + if pending := len(t.pending); pending >= maxTrackedPackets { + log.Error("Request tracker exceeded allowance", "pending", pending, "peer", peer, "protocol", t.protocol, "version", version, "code", reqCode) + return + } + // Id doesn't exist yet, start tracking it + t.pending[id] = &request{ + peer: peer, + version: version, + reqCode: reqCode, + resCode: resCode, + time: time.Now(), + expire: t.expire.PushBack(id), + } + g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, version, reqCode) + metrics.GetOrRegisterGauge(g, nil).Inc(1) + + // If we've just inserted the first item, start the expiration timer + if t.wake == nil { + t.wake = time.AfterFunc(t.timeout, t.clean) + } +} + +// clean is called automatically when a preset time passes without a response +// being delivered for the first network request. +func (t *Tracker) clean() { + t.lock.Lock() + defer t.lock.Unlock() + + // Expire anything within a certain threshold (might be no items at all if + // we raced with the delivery) + for t.expire.Len() > 0 { + // Stop iterating if the next pending request is still alive + var ( + head = t.expire.Front() + id = head.Value.(uint64) + req = t.pending[id] + ) + if time.Since(req.time) < t.timeout+5*time.Millisecond { + break + } + // Nope, dead, drop it + t.expire.Remove(head) + delete(t.pending, id) + + g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, req.version, req.reqCode) + metrics.GetOrRegisterGauge(g, nil).Dec(1) + + m := fmt.Sprintf("%s/%s/%d/%#02x", lostMeterName, t.protocol, req.version, req.reqCode) + metrics.GetOrRegisterMeter(m, nil).Mark(1) + } + t.schedule() +} + +// schedule starts a timer to trigger on the expiration of the first network +// packet. +func (t *Tracker) schedule() { + if t.expire.Len() == 0 { + t.wake = nil + return + } + t.wake = time.AfterFunc(time.Until(t.pending[t.expire.Front().Value.(uint64)].time.Add(t.timeout)), t.clean) +} + +// Fulfil fills a pending request, if any is available, reporting on various metrics. +func (t *Tracker) Fulfil(peer string, version uint, code uint64, id uint64) { + if !metrics.Enabled { + return + } + t.lock.Lock() + defer t.lock.Unlock() + + // If it's a non existing request, track as stale response + req, ok := t.pending[id] + if !ok { + m := fmt.Sprintf("%s/%s/%d/%#02x", staleMeterName, t.protocol, version, code) + metrics.GetOrRegisterMeter(m, nil).Mark(1) + return + } + // If the response is funky, it might be some active attack + if req.peer != peer || req.version != version || req.resCode != code { + log.Warn("Network response id collision", + "have", fmt.Sprintf("%s:%s/%d:%d", peer, t.protocol, version, code), + "want", fmt.Sprintf("%s:%s/%d:%d", peer, t.protocol, req.version, req.resCode), + ) + return + } + // Everything matches, mark the request serviced and meter it + t.expire.Remove(req.expire) + delete(t.pending, id) + if req.expire.Prev() == nil { + if t.wake.Stop() { + t.schedule() + } + } + g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, req.version, req.reqCode) + metrics.GetOrRegisterGauge(g, nil).Dec(1) + + h := fmt.Sprintf("%s/%s/%d/%#02x", waitHistName, t.protocol, req.version, req.reqCode) + sampler := func() metrics.Sample { + return metrics.ResettingSample( + metrics.NewExpDecaySample(1028, 0.015), + ) + } + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(time.Since(req.time).Microseconds()) +} diff --git a/p2p/transport.go b/p2p/transport.go new file mode 100644 index 00000000..4f6bb569 --- /dev/null +++ b/p2p/transport.go @@ -0,0 +1,182 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "crypto/ecdsa" + "fmt" + "io" + "net" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/bitutil" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p/rlpx" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + // total timeout for encryption handshake and protocol + // handshake in both directions. + handshakeTimeout = 5 * time.Second + + // This is the timeout for sending the disconnect reason. + // This is shorter than the usual timeout because we don't want + // to wait if the connection is known to be bad anyway. + discWriteTimeout = 1 * time.Second +) + +// rlpxTransport is the transport used by actual (non-test) connections. +// It wraps an RLPx connection with locks and read/write deadlines. +type rlpxTransport struct { + rmu, wmu sync.Mutex + wbuf bytes.Buffer + conn *rlpx.Conn +} + +func newRLPX(conn net.Conn, dialDest *ecdsa.PublicKey) transport { + return &rlpxTransport{conn: rlpx.NewConn(conn, dialDest)} +} + +func (t *rlpxTransport) ReadMsg() (Msg, error) { + t.rmu.Lock() + defer t.rmu.Unlock() + + var msg Msg + t.conn.SetReadDeadline(time.Now().Add(frameReadTimeout)) + code, data, wireSize, err := t.conn.Read() + if err == nil { + // Protocol messages are dispatched to subprotocol handlers asynchronously, + // but package rlpx may reuse the returned 'data' buffer on the next call + // to Read. Copy the message data to avoid this being an issue. + data = common.CopyBytes(data) + msg = Msg{ + ReceivedAt: time.Now(), + Code: code, + Size: uint32(len(data)), + meterSize: uint32(wireSize), + Payload: bytes.NewReader(data), + } + } + return msg, err +} + +func (t *rlpxTransport) WriteMsg(msg Msg) error { + t.wmu.Lock() + defer t.wmu.Unlock() + + // Copy message data to write buffer. + t.wbuf.Reset() + if _, err := io.CopyN(&t.wbuf, msg.Payload, int64(msg.Size)); err != nil { + return err + } + + // Write the message. + t.conn.SetWriteDeadline(time.Now().Add(frameWriteTimeout)) + size, err := t.conn.Write(msg.Code, t.wbuf.Bytes()) + if err != nil { + return err + } + + // Set metrics. + msg.meterSize = size + if metrics.Enabled && msg.meterCap.Name != "" { // don't meter non-subprotocol messages + m := fmt.Sprintf("%s/%s/%d/%#02x", egressMeterName, msg.meterCap.Name, msg.meterCap.Version, msg.meterCode) + metrics.GetOrRegisterMeter(m, nil).Mark(int64(msg.meterSize)) + metrics.GetOrRegisterMeter(m+"/packets", nil).Mark(1) + } + return nil +} + +func (t *rlpxTransport) close(err error) { + t.wmu.Lock() + defer t.wmu.Unlock() + + // Tell the remote end why we're disconnecting if possible. + // We only bother doing this if the underlying connection supports + // setting a timeout tough. + if t.conn != nil { + if r, ok := err.(DiscReason); ok && r != DiscNetworkError { + deadline := time.Now().Add(discWriteTimeout) + if err := t.conn.SetWriteDeadline(deadline); err == nil { + // Connection supports write deadline. + t.wbuf.Reset() + rlp.Encode(&t.wbuf, []DiscReason{r}) + t.conn.Write(discMsg, t.wbuf.Bytes()) + } + } + } + t.conn.Close() +} + +func (t *rlpxTransport) doEncHandshake(prv *ecdsa.PrivateKey) (*ecdsa.PublicKey, error) { + t.conn.SetDeadline(time.Now().Add(handshakeTimeout)) + return t.conn.Handshake(prv) +} + +func (t *rlpxTransport) doProtoHandshake(our *protoHandshake) (their *protoHandshake, err error) { + // Writing our handshake happens concurrently, we prefer + // returning the handshake read error. If the remote side + // disconnects us early with a valid reason, we should return it + // as the error so it can be tracked elsewhere. + werr := make(chan error, 1) + go func() { werr <- Send(t, handshakeMsg, our) }() + if their, err = readProtocolHandshake(t); err != nil { + <-werr // make sure the write terminates too + return nil, err + } + if err := <-werr; err != nil { + return nil, fmt.Errorf("write error: %v", err) + } + // If the protocol version supports Snappy encoding, upgrade immediately + t.conn.SetSnappy(their.Version >= snappyProtocolVersion) + + return their, nil +} + +func readProtocolHandshake(rw MsgReader) (*protoHandshake, error) { + msg, err := rw.ReadMsg() + if err != nil { + return nil, err + } + if msg.Size > baseProtocolMaxMsgSize { + return nil, fmt.Errorf("message too big") + } + if msg.Code == discMsg { + // Disconnect before protocol handshake is valid according to the + // spec and we send it ourself if the post-handshake checks fail. + // We can't return the reason directly, though, because it is echoed + // back otherwise. Wrap it in a string instead. + var reason [1]DiscReason + rlp.Decode(msg.Payload, &reason) + return nil, reason[0] + } + if msg.Code != handshakeMsg { + return nil, fmt.Errorf("expected handshake, got %x", msg.Code) + } + var hs protoHandshake + if err := msg.Decode(&hs); err != nil { + return nil, err + } + if len(hs.ID) != 64 || !bitutil.TestBytes(hs.ID) { + return nil, DiscInvalidIdentity + } + return &hs, nil +} diff --git a/p2p/transport_test.go b/p2p/transport_test.go new file mode 100644 index 00000000..24e06c5a --- /dev/null +++ b/p2p/transport_test.go @@ -0,0 +1,148 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "errors" + "reflect" + "sync" + "testing" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/simulations/pipes" +) + +func TestProtocolHandshake(t *testing.T) { + var ( + prv0, _ = crypto.GenerateKey() + pub0 = crypto.FromECDSAPub(&prv0.PublicKey)[1:] + hs0 = &protoHandshake{Version: 3, ID: pub0, Caps: []Cap{{"a", 0}, {"b", 2}}} + + prv1, _ = crypto.GenerateKey() + pub1 = crypto.FromECDSAPub(&prv1.PublicKey)[1:] + hs1 = &protoHandshake{Version: 3, ID: pub1, Caps: []Cap{{"c", 1}, {"d", 3}}} + + wg sync.WaitGroup + ) + + fd0, fd1, err := pipes.TCPPipe() + if err != nil { + t.Fatal(err) + } + + wg.Add(2) + go func() { + defer wg.Done() + defer fd0.Close() + frame := newRLPX(fd0, &prv1.PublicKey) + rpubkey, err := frame.doEncHandshake(prv0) + if err != nil { + t.Errorf("dial side enc handshake failed: %v", err) + return + } + if !reflect.DeepEqual(rpubkey, &prv1.PublicKey) { + t.Errorf("dial side remote pubkey mismatch: got %v, want %v", rpubkey, &prv1.PublicKey) + return + } + + phs, err := frame.doProtoHandshake(hs0) + if err != nil { + t.Errorf("dial side proto handshake error: %v", err) + return + } + phs.Rest = nil + if !reflect.DeepEqual(phs, hs1) { + t.Errorf("dial side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs1)) + return + } + frame.close(DiscQuitting) + }() + go func() { + defer wg.Done() + defer fd1.Close() + rlpx := newRLPX(fd1, nil) + rpubkey, err := rlpx.doEncHandshake(prv1) + if err != nil { + t.Errorf("listen side enc handshake failed: %v", err) + return + } + if !reflect.DeepEqual(rpubkey, &prv0.PublicKey) { + t.Errorf("listen side remote pubkey mismatch: got %v, want %v", rpubkey, &prv0.PublicKey) + return + } + + phs, err := rlpx.doProtoHandshake(hs1) + if err != nil { + t.Errorf("listen side proto handshake error: %v", err) + return + } + phs.Rest = nil + if !reflect.DeepEqual(phs, hs0) { + t.Errorf("listen side proto handshake mismatch:\ngot: %s\nwant: %s\n", spew.Sdump(phs), spew.Sdump(hs0)) + return + } + + if err := ExpectMsg(rlpx, discMsg, []DiscReason{DiscQuitting}); err != nil { + t.Errorf("error receiving disconnect: %v", err) + } + }() + wg.Wait() +} + +func TestProtocolHandshakeErrors(t *testing.T) { + tests := []struct { + code uint64 + msg interface{} + err error + }{ + { + code: discMsg, + msg: []DiscReason{DiscQuitting}, + err: DiscQuitting, + }, + { + code: 0x989898, + msg: []byte{1}, + err: errors.New("expected handshake, got 989898"), + }, + { + code: handshakeMsg, + msg: make([]byte, baseProtocolMaxMsgSize+2), + err: errors.New("message too big"), + }, + { + code: handshakeMsg, + msg: []byte{1, 2, 3}, + err: newPeerError(errInvalidMsg, "(code 0) (size 4) rlp: expected input list for p2p.protoHandshake"), + }, + { + code: handshakeMsg, + msg: &protoHandshake{Version: 3}, + err: DiscInvalidIdentity, + }, + } + + for i, test := range tests { + p1, p2 := MsgPipe() + go Send(p1, test.code, test.msg) + _, 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/util.go b/p2p/util.go index 2a6edf5c..3c5f6b85 100644 --- a/p2p/util.go +++ b/p2p/util.go @@ -18,7 +18,8 @@ package p2p import ( "container/heap" - "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) // expHeap tracks strings and their expiry time. @@ -27,30 +28,19 @@ type expHeap []expItem // expItem is an entry in addrHistory. type expItem struct { item string - exp time.Time + exp mclock.AbsTime } // nextExpiry returns the next expiry time. -func (h *expHeap) nextExpiry() time.Time { +func (h *expHeap) nextExpiry() mclock.AbsTime { return (*h)[0].exp } // add adds an item and sets its expiry time. -func (h *expHeap) add(item string, exp time.Time) { +func (h *expHeap) add(item string, exp mclock.AbsTime) { 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 { @@ -62,15 +52,18 @@ func (h expHeap) contains(item string) bool { } // 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) +func (h *expHeap) expire(now mclock.AbsTime, onExp func(string)) { + for h.Len() > 0 && h.nextExpiry() < now { + item := heap.Pop(h) + if onExp != nil { + onExp(item.(expItem).item) + } } } // 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) Less(i, j int) bool { return h[i].exp < 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{} { diff --git a/p2p/util_test.go b/p2p/util_test.go index c9f2648d..cc0d2b21 100644 --- a/p2p/util_test.go +++ b/p2p/util_test.go @@ -19,30 +19,32 @@ package p2p import ( "testing" "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) func TestExpHeap(t *testing.T) { var h expHeap var ( - basetime = time.Unix(4000, 0) + basetime = mclock.AbsTime(10) 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("a", exptimeA) h.add("c", exptimeC) - if !h.nextExpiry().Equal(exptimeA) { + if h.nextExpiry() != 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) { + h.expire(exptimeA.Add(1), nil) + if h.nextExpiry() != exptimeB { t.Fatal("wrong nextExpiry") } if h.contains("a") { diff --git a/params/bootnodes.go b/params/bootnodes.go index df0782f6..b8099777 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -16,39 +16,40 @@ package params +import "github.com/ethereum/go-ethereum/common" + // MainnetBootnodes are the enode URLs of the P2P bootstrap nodes running on // the main Ethereum network. var MainnetBootnodes = []string{ // Ethereum Foundation Go Bootnodes "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 Go Bootnodes (legacy) - "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 - - // Ethereum Foundation C++ Bootnodes - "enode://979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9@5.1.83.226:30303", // DE + "enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", // bootnode-hetzner-hel + "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn } -// TestnetBootnodes are the enode URLs of the P2P bootstrap nodes running on the +// RopstenBootnodes are the enode URLs of the P2P bootstrap nodes running on the // Ropsten test network. -var TestnetBootnodes = []string{ +var RopstenBootnodes = []string{ "enode://30b7ab30a01c124a6cceca36863ece12c4f5fa68e3ba9b0b51407ccc002eeed3b3102d20a88f1c1d3c3154e2449317b8ef95090e77b312d5cc39354f86d5d606@52.176.7.10:30303", // US-Azure geth "enode://865a63255b3bb68023b6bffd5095118fcc13e79dcf014fe4e47e065c350c7cc72af2e53eff895f11ba1bbb6a2b33271c1116ee870f266618eadfc2e78aa7349c@52.176.100.77:30303", // US-Azure parity "enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303", // Parity "enode://94c15d1b9e2fe7ce56e458b9a3b672ef11894ddedd0c6f247e0f1d3487f52b66208fb4aeb8179fce6e3a749ea93ed147c37976d67af557508d199d9594c35f09@192.81.208.223:30303", // @gpip } +// SepoliaBootnodes are the enode URLs of the P2P bootstrap nodes running on the +// Sepolia test network. +var SepoliaBootnodes = []string{ + // geth + "enode://9246d00bc8fd1742e5ad2428b80fc4dc45d786283e05ef6edbd9002cbc335d40998444732fbe921cb88e1d2c73d1b1de53bae6a2237996e9bfe14f871baf7066@18.168.182.86:30303", + // besu + "enode://ec66ddcf1a974950bd4c782789a7e04f8aa7110a72569b6e65fcd51e937e74eed303b1ea734e4d19cfaec9fbff9b6ee65bf31dcb50ba79acce9dd63a6aca61c7@52.14.151.177:30303", +} + // RinkebyBootnodes are the enode URLs of the P2P bootstrap nodes running on the // Rinkeby test network. var RinkebyBootnodes = []string{ @@ -64,31 +65,61 @@ var GoerliBootnodes = []string{ "enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303", "enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303", "enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313", - "enode://c1f8b7c2ac4453271fa07d8e9ecf9a2e8285aa0bd0c07df0131f47153306b0736fd3db8924e7a9bf0bed6b1d8d4f87362a71b033dc7c64547728d953e43e59b2@52.64.155.147:30303", - "enode://f4a9c6ee28586009fb5a96c8af13a58ed6d8315a9eee4772212c1d4d9cebe5a8b8a78ea4434f318726317d04a3f531a1ef0420cf9752605a562cfe858c46e263@213.186.16.82:30303", + "enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303", // Ethereum Foundation bootnode - "enode://573b6607cd59f241e30e4c4943fd50e99e2b6f42f9bd5ca111659d309c06741247f4f1e93843ad3e8c8c18b6e2d94c161b7ef67479b3938780a97134b618b5ce@52.56.136.200:30303", -} + "enode://a61215641fb8714a373c80edbfa0ea8878243193f57c96eeb44d0bc019ef295abd4e044fd619bfc4c59731a73fb79afe84e9ab6da0c743ceb479cbb6d263fa91@3.11.147.67:30303", -// LveBootnodes are the enode URLs of the P2P bootstrap nodes running on the -// Lve network. -var LveBootnodes = []string{ - "enode://cf4760feb2d6bc0f5622b301a7917b9ccae2aa46c20b03af4da20190c988a76557a7d6bfdcebd0361463019bd39a4fc9b017a974e0d7384ee23f76ddc25fe329@3.1.96.244:30301", + // Goerli Initiative bootnodes + "enode://d4f764a48ec2a8ecf883735776fdefe0a3949eb0ca476bd7bc8d0954a9defe8fea15ae5da7d40b5d2d59ce9524a99daedadf6da6283fca492cc80b53689fb3b3@46.4.99.122:32109", + "enode://d2b720352e8216c9efc470091aa91ddafc53e222b32780f505c817ceef69e01d5b0b0797b69db254c586f493872352f5a022b4d8479a00fc92ec55f9ad46a27e@88.99.70.182:30303", } -// LvetestBootnodes are the enode URLs of the P2P bootstrap nodes running on the -// Lve test network. -var LvetestBootnodes = []string{ +var KilnBootnodes = []string{ + "enode://c354db99124f0faf677ff0e75c3cbbd568b2febc186af664e0c51ac435609badedc67a18a63adb64dacc1780a28dcefebfc29b83fd1a3f4aa3c0eb161364cf94@164.92.130.5:30303", + "enode://d41af1662434cad0a88fe3c7c92375ec5719f4516ab6d8cb9695e0e2e815382c767038e72c224e04040885157da47422f756c040a9072676c6e35c5b1a383cce@138.68.66.103:30303", + "enode://91a745c3fb069f6b99cad10b75c463d527711b106b622756e9ef9f12d2631b6cb885f831d1c8731b9bc7177cae5e1ea1f1be087f86d7d30b590a91f22bc041b0@165.232.180.230:30303", + "enode://b74bd2e8a9f0c53f0c93bcce80818f2f19439fd807af5c7fbc3efb10130c6ee08be8f3aaec7dc0a057ad7b2a809c8f34dc62431e9b6954b07a6548cc59867884@164.92.140.200:30303", +} +var V5Bootnodes = []string{ + // Teku team's bootnode + "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", + "enr:-KG4QDyytgmE4f7AnvW-ZaUOIi9i79qX4JwjRAiXBZCU65wOfBu-3Nb5I7b_Rmg3KCOcZM_C3y5pg7EBU5XGrcLTduQEhGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQ2_DUbiXNlY3AyNTZrMaEDKnz_-ps3UUOfHWVYaskI5kWYO_vtYMGYCQRAR3gHDouDdGNwgiMog3VkcIIjKA", + // Prylab team's bootnodes + "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", + "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", + "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", + // Lighthouse team's bootnodes + "enr:-IS4QLkKqDMy_ExrpOEWa59NiClemOnor-krjp4qoeZwIw2QduPC-q7Kz4u1IOWf3DDbdxqQIgC4fejavBOuUPy-HE4BgmlkgnY0gmlwhCLzAHqJc2VjcDI1NmsxoQLQSJfEAHZApkm5edTCZ_4qps_1k_ub2CxHFxi-gr2JMIN1ZHCCIyg", + "enr:-IS4QDAyibHCzYZmIYZCjXwU9BqpotWmv2BsFlIq1V31BwDDMJPFEbox1ijT5c2Ou3kvieOKejxuaCqIcjxBjJ_3j_cBgmlkgnY0gmlwhAMaHiCJc2VjcDI1NmsxoQJIdpj_foZ02MXz4It8xKD7yUHTBx7lVFn3oeRP21KRV4N1ZHCCIyg", + // EF bootnodes + "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", + "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", + "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", + "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", } +const dnsPrefix = "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@" -// DiscoveryV5Bootnodes are the enode URLs of the P2P bootstrap nodes for the -// experimental RLPx v5 topic-discovery network. -var DiscoveryV5Bootnodes = []string{ - "enode://06051a5573c81934c9554ef2898eb13b33a34b94cf36b202b69fde139ca17a85051979867720d4bdae4323d4943ddf9aeeb6643633aa656e0be843659795007a@35.177.226.168:30303", - "enode://0cc5f5ffb5d9098c8b8c62325f3797f56509bff942704687b6530992ac706e2cb946b90a34f1f19548cd3c7baccbcaea354531e5983c7d1bc0dee16ce4b6440b@40.118.3.223:30304", - "enode://1c7a64d76c0334b0418c004af2f67c50e36a3be60b5e4790bdac0439d21603469a85fad36f2473c9a80eb043ae60936df905fa28f1ff614c3e5dc34f15dcd2dc@40.118.3.223:30306", - "enode://85c85d7143ae8bb96924f2b54f1b3e70d8c4d367af305325d30a61385a432f247d2c75c45c6b4a60335060d072d7f5b35dd1d4c45f76941f62a4f83b6e75daaf@40.118.3.223:30307", +// KnownDNSNetwork returns the address of a public DNS-based node list for the given +// genesis hash and protocol. See https://github.com/ethereum/discv4-dns-lists for more +// information. +func KnownDNSNetwork(genesis common.Hash, protocol string) string { + var net string + switch genesis { + case MainnetGenesisHash: + net = "mainnet" + case RopstenGenesisHash: + net = "ropsten" + case RinkebyGenesisHash: + net = "rinkeby" + case GoerliGenesisHash: + net = "goerli" + case SepoliaGenesisHash: + net = "sepolia" + default: + return "" + } + return dnsPrefix + protocol + "." + net + ".ethdisco.net" } diff --git a/params/config.go b/params/config.go index ab064871..d535d230 100644 --- a/params/config.go +++ b/params/config.go @@ -21,70 +21,71 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" + "github.com/ethereum/go-ethereum/common" + "golang.org/x/crypto/sha3" ) // Genesis hashes to enforce below configs on. var ( MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") - TestnetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") + RopstenGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") + SepoliaGenesisHash = common.HexToHash("0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9") RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") - - //need to update - LveGenesisHash = common.HexToHash("0x7c5cb1a45d2424a2be1155c22979bbe384aff07810260041d5609a87bc3c58cc") - LvetestGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") + KilnGenesisHash = common.HexToHash("0x51c7fe41be669f69c45c33a56982cbde405313342d9e2b00d7c91a7b284dd4f8") ) // 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, + RopstenGenesisHash: RopstenTrustedCheckpoint, + SepoliaGenesisHash: SepoliaTrustedCheckpoint, RinkebyGenesisHash: RinkebyTrustedCheckpoint, GoerliGenesisHash: GoerliTrustedCheckpoint, - //update - LveGenesisHash: LveTrustedCheckpoint, - LvetestGenesisHash: LvetestTrustedCheckpoint, } // 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, + RopstenGenesisHash: RopstenCheckpointOracle, RinkebyGenesisHash: RinkebyCheckpointOracle, GoerliGenesisHash: GoerliCheckpointOracle, - //update - LveGenesisHash: LveCheckpointOracle, - LvetestGenesisHash: LvetestCheckpointOracle, } var ( + MainnetTerminalTotalDifficulty, _ = new(big.Int).SetString("58_750_000_000_000_000_000_000", 0) + // MainnetChainConfig is the chain parameters to run a node on the main network. MainnetChainConfig = &ChainConfig{ - ChainID: big.NewInt(1), - HomesteadBlock: big.NewInt(1150000), - DAOForkBlock: big.NewInt(1920000), - DAOForkSupport: true, - EIP150Block: big.NewInt(2463000), - EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), - EIP155Block: big.NewInt(2675000), - EIP158Block: big.NewInt(2675000), - ByzantiumBlock: big.NewInt(4370000), - ConstantinopleBlock: big.NewInt(7280000), - PetersburgBlock: big.NewInt(7280000), - IstanbulBlock: nil, - Ethash: new(EthashConfig), + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(1_150_000), + DAOForkBlock: big.NewInt(1_920_000), + DAOForkSupport: true, + EIP150Block: big.NewInt(2_463_000), + EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), + EIP155Block: big.NewInt(2_675_000), + EIP158Block: big.NewInt(2_675_000), + ByzantiumBlock: big.NewInt(4_370_000), + ConstantinopleBlock: big.NewInt(7_280_000), + PetersburgBlock: big.NewInt(7_280_000), + IstanbulBlock: big.NewInt(9_069_000), + MuirGlacierBlock: big.NewInt(9_200_000), + BerlinBlock: big.NewInt(12_244_000), + LondonBlock: big.NewInt(12_965_000), + ArrowGlacierBlock: big.NewInt(13_773_000), + GrayGlacierBlock: big.NewInt(15_050_000), + TerminalTotalDifficulty: MainnetTerminalTotalDifficulty, // 58_750_000_000_000_000_000_000 + Ethash: new(EthashConfig), } // MainnetTrustedCheckpoint contains the light client trusted checkpoint for the main network. MainnetTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 253, - SectionHead: common.HexToHash("0xf35fabd036e2030196183bb70ae194f6ce1ea7b58559e3825c168f1df9c0a258"), - CHTRoot: common.HexToHash("0x8992849e2be3390696eaf66312626e484045501cd3ec207922c27a6a80a7bb07"), - BloomRoot: common.HexToHash("0xcc510b51ca4d73fb3fdf43208d73286f8f23817cdc31b8ea9f4de8d645f07df4"), + SectionIndex: 451, + SectionHead: common.HexToHash("0xe47f84b9967eb2ad2afff74d59901b63134660011822fdababaf8fdd18a75aa6"), + CHTRoot: common.HexToHash("0xc31e0462ca3d39a46111bb6b63ac4e1cac84089472b7474a319d582f72b3f0c0"), + BloomRoot: common.HexToHash("0x7c9f25ce3577a3ab330d52a7343f801899cf9d4980c69f81de31ccc1a055c809"), } // MainnetCheckpointOracle contains a set of configs for the main network oracle. @@ -100,33 +101,38 @@ var ( Threshold: 2, } - // TestnetChainConfig contains the chain parameters to run a node on the Ropsten test network. - TestnetChainConfig = &ChainConfig{ - ChainID: big.NewInt(3), - HomesteadBlock: big.NewInt(0), - DAOForkBlock: nil, - DAOForkSupport: true, - EIP150Block: big.NewInt(0), - EIP150Hash: common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"), - EIP155Block: big.NewInt(10), - EIP158Block: big.NewInt(10), - ByzantiumBlock: big.NewInt(1700000), - ConstantinopleBlock: big.NewInt(4230000), - PetersburgBlock: big.NewInt(4939394), - IstanbulBlock: nil, - Ethash: new(EthashConfig), - } - - // TestnetTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network. - TestnetTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 187, - SectionHead: common.HexToHash("0x7d6db64d8ec43303e4392fb726d2346f7231b246decca3d8140dd7e2c0d0b07d"), - CHTRoot: common.HexToHash("0xa5095e1a004a8642fb93ca682eb91e8f20ef5bce151e47404fbb68772d17705b"), - BloomRoot: common.HexToHash("0x90b28050f948ec6fb35b23a91d9aed38ce0c92d3cdd6e1d383c1bddf8b4071cf"), - } - - // TestnetCheckpointOracle contains a set of configs for the Ropsten test network oracle. - TestnetCheckpointOracle = &CheckpointOracleConfig{ + // RopstenChainConfig contains the chain parameters to run a node on the Ropsten test network. + RopstenChainConfig = &ChainConfig{ + ChainID: big.NewInt(3), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + EIP150Block: big.NewInt(0), + EIP150Hash: common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"), + EIP155Block: big.NewInt(10), + EIP158Block: big.NewInt(10), + ByzantiumBlock: big.NewInt(1_700_000), + ConstantinopleBlock: big.NewInt(4_230_000), + PetersburgBlock: big.NewInt(4_939_394), + IstanbulBlock: big.NewInt(6_485_846), + MuirGlacierBlock: big.NewInt(7_117_117), + BerlinBlock: big.NewInt(9_812_189), + LondonBlock: big.NewInt(10_499_401), + TerminalTotalDifficulty: new(big.Int).SetUint64(50_000_000_000_000_000), + TerminalTotalDifficultyPassed: true, + Ethash: new(EthashConfig), + } + + // RopstenTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network. + RopstenTrustedCheckpoint = &TrustedCheckpoint{ + SectionIndex: 346, + SectionHead: common.HexToHash("0xafa0384ebd13a751fb7475aaa7fc08ac308925c8b2e2195bca2d4ab1878a7a84"), + CHTRoot: common.HexToHash("0x522ae1f334bfa36033b2315d0b9954052780700b69448ecea8d5877e0f7ee477"), + BloomRoot: common.HexToHash("0x4093fd53b0d2cc50181dca353fe66f03ae113e7cb65f869a4dfb5905de6a0493"), + } + + // RopstenCheckpointOracle contains a set of configs for the Ropsten test network oracle. + RopstenCheckpointOracle = &CheckpointOracleConfig{ Address: common.HexToAddress("0xEF79475013f154E6A65b54cB2742867791bf0B84"), Signers: []common.Address{ common.HexToAddress("0x32162F3581E88a5f62e8A61892B42C46E2c18f7b"), // Peter @@ -138,6 +144,36 @@ var ( Threshold: 2, } + // SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network. + SepoliaChainConfig = &ChainConfig{ + ChainID: big.NewInt(11155111), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + TerminalTotalDifficulty: big.NewInt(17_000_000_000_000_000), + TerminalTotalDifficultyPassed: true, + MergeNetsplitBlock: big.NewInt(1735371), + Ethash: new(EthashConfig), + } + + // SepoliaTrustedCheckpoint contains the light client trusted checkpoint for the Sepolia test network. + SepoliaTrustedCheckpoint = &TrustedCheckpoint{ + SectionIndex: 34, + SectionHead: common.HexToHash("0xe361400fcbc468d641e7bdd0b0946a3548e97c5d2703b124f04a3f1deccec244"), + CHTRoot: common.HexToHash("0xea6768fd288dce7d84f590884908ec39e4de78e6e1a38de5c5419b0f49a42f91"), + BloomRoot: common.HexToHash("0x06d32f35d5a611bfd0333ad44e39c619449824167d8ef2913edc48a8112be2cd"), + } + // RinkebyChainConfig contains the chain parameters to run a node on the Rinkeby test network. RinkebyChainConfig = &ChainConfig{ ChainID: big.NewInt(4), @@ -148,10 +184,14 @@ var ( EIP150Hash: common.HexToHash("0x9b095b36c15eaf13044373aef8ee0bd3a382a5abb92e402afa44b8249c3a90e9"), EIP155Block: big.NewInt(3), EIP158Block: big.NewInt(3), - ByzantiumBlock: big.NewInt(1035301), - ConstantinopleBlock: big.NewInt(3660663), - PetersburgBlock: big.NewInt(4321234), - IstanbulBlock: nil, + ByzantiumBlock: big.NewInt(1_035_301), + ConstantinopleBlock: big.NewInt(3_660_663), + PetersburgBlock: big.NewInt(4_321_234), + IstanbulBlock: big.NewInt(5_435_345), + MuirGlacierBlock: nil, + BerlinBlock: big.NewInt(8_290_928), + LondonBlock: big.NewInt(8_897_988), + ArrowGlacierBlock: nil, Clique: &CliqueConfig{ Period: 15, Epoch: 30000, @@ -160,10 +200,10 @@ var ( // RinkebyTrustedCheckpoint contains the light client trusted checkpoint for the Rinkeby test network. RinkebyTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 148, - SectionHead: common.HexToHash("0x45918f4686732c2a3e80827e1bc39cdb6a27fa362ddfe1fdfb61c69a7f1df1a9"), - CHTRoot: common.HexToHash("0x8ac7046391fec14834a2a0183513937c0b5f696666545991477d24b067008961"), - BloomRoot: common.HexToHash("0xfe4b852517612d7da54bf7e9fc18861a83171a93c72583bb6a61893b74422168"), + SectionIndex: 326, + SectionHead: common.HexToHash("0x941a41a153b0e36cb15d9d193d1d0f9715bdb2435efd1c95119b64168667ce00"), + CHTRoot: common.HexToHash("0xe2331e00d579cf4093091dee35bef772e63c2341380c276041dc22563c8aba2e"), + BloomRoot: common.HexToHash("0x595206febcf118958c2bc1218ea71d01fd04b8f97ad71813df4be0af5b36b0e5"), } // RinkebyCheckpointOracle contains a set of configs for the Rinkeby test network oracle. @@ -180,17 +220,23 @@ var ( // GoerliChainConfig contains the chain parameters to run a node on the Görli test network. GoerliChainConfig = &ChainConfig{ - ChainID: big.NewInt(5), - HomesteadBlock: big.NewInt(0), - DAOForkBlock: nil, - DAOForkSupport: true, - 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: nil, + ChainID: big.NewInt(5), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + 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(1_561_651), + MuirGlacierBlock: nil, + BerlinBlock: big.NewInt(4_460_644), + LondonBlock: big.NewInt(5_062_605), + ArrowGlacierBlock: nil, + TerminalTotalDifficulty: big.NewInt(10_790_000), + TerminalTotalDifficultyPassed: true, Clique: &CliqueConfig{ Period: 15, Epoch: 30000, @@ -199,10 +245,10 @@ var ( // GoerliTrustedCheckpoint contains the light client trusted checkpoint for the Görli test network. GoerliTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 32, - SectionHead: common.HexToHash("0x50eaedd8361fa9edd0ac2dec410310b9bdf67b963b60f3b1dce47f84b30670f9"), - CHTRoot: common.HexToHash("0x6504db73139f75ffa9102ae980e41b361cf3d5b66cea06c79cde9f457368820c"), - BloomRoot: common.HexToHash("0x7551ae027bb776252a20ded51ee2ff0cbfbd1d8d57261b9161cc1f2f80237001"), + SectionIndex: 210, + SectionHead: common.HexToHash("0xbb11eaf551a6c06f74a6c7bbfe1699cbf64b8f248b64691da916dd443176db2f"), + CHTRoot: common.HexToHash("0x9934ae326d00d9c7de2e074c0e51689efb7fa7fcba18929ff4279c27259c45e6"), + BloomRoot: common.HexToHash("0x7fe3bd4fd45194aa8a5cfe5ac590edff1f870d3d98d3c310494e7f67613a87ff"), } // GoerliCheckpointOracle contains a set of configs for the Goerli test network oracle. @@ -218,98 +264,34 @@ var ( Threshold: 2, } - // LveChainConfig contains the chain parameters to run a node on the Görli test network. - LveChainConfig = &ChainConfig{ - ChainID: big.NewInt(12345), - HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), - EIP150Hash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - EccPoW: new(EccPoWConfig), - } - - // LveTrustedCheckpoint contains the light client trusted checkpoint for the Görli test network. - LveTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 32, - SectionHead: common.HexToHash("0x50eaedd8361fa9edd0ac2dec410310b9bdf67b963b60f3b1dce47f84b30670f9"), - CHTRoot: common.HexToHash("0x6504db73139f75ffa9102ae980e41b361cf3d5b66cea06c79cde9f457368820c"), - BloomRoot: common.HexToHash("0x7551ae027bb776252a20ded51ee2ff0cbfbd1d8d57261b9161cc1f2f80237001"), - } - - // LveCheckpointOracle contains a set of configs for the Lve test network oracle. - LveCheckpointOracle = &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, - } - - // LvetestChainConfig contains the chain parameters to run a node on the Görli test network. - LvetestChainConfig = &ChainConfig{ - ChainID: big.NewInt(12346), - HomesteadBlock: big.NewInt(0), - DAOForkBlock: nil, - DAOForkSupport: true, - 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: nil, - EccPoW: new(EccPoWConfig), - } - - // LvetestTrustedCheckpoint contains the light client trusted checkpoint for the Görli test network. - LvetestTrustedCheckpoint = &TrustedCheckpoint{ - SectionIndex: 32, - SectionHead: common.HexToHash("0x50eaedd8361fa9edd0ac2dec410310b9bdf67b963b60f3b1dce47f84b30670f9"), - CHTRoot: common.HexToHash("0x6504db73139f75ffa9102ae980e41b361cf3d5b66cea06c79cde9f457368820c"), - BloomRoot: common.HexToHash("0x7551ae027bb776252a20ded51ee2ff0cbfbd1d8d57261b9161cc1f2f80237001"), - } - - // LvetestCheckpointOracle contains a set of configs for the Lve test network oracle. - LvetestCheckpointOracle = &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 // and accepted by the Ethereum core developers into the Ethash consensus. // // 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, nil, new(EthashConfig), nil, 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, false, 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, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil} - AllEccPoWProtocolChanges = &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, nil, nil, new(EccPoWConfig)} - 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, nil, new(EthashConfig), nil, nil} - TestEccChainConfig = &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, nil, nil, nil, new(EccPoWConfig)} - TestRules = TestChainConfig.Rules(new(big.Int)) + 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, nil, false, 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), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, false, new(EthashConfig), nil} + NonActivatedConfig = &ChainConfig{big.NewInt(1), nil, nil, false, nil, common.Hash{}, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, false, new(EthashConfig), nil} + TestRules = TestChainConfig.Rules(new(big.Int), false) ) +// NetworkNames are user friendly names to use in the chain spec banner. +var NetworkNames = map[string]string{ + MainnetChainConfig.ChainID.String(): "mainnet", + RopstenChainConfig.ChainID.String(): "ropsten", + RinkebyChainConfig.ChainID.String(): "rinkeby", + GoerliChainConfig.ChainID.String(): "goerli", + SepoliaChainConfig.ChainID.String(): "sepolia", +} + // TrustedCheckpoint represents a set of post-processed trie roots (CHT and // BloomTrie) associated with the appropriate section index and head hash. It is // used to start light syncing from this checkpoint and avoid downloading the @@ -331,12 +313,18 @@ func (c *TrustedCheckpoint) HashEqual(hash common.Hash) bool { // 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) + var sectionIndex [8]byte + binary.BigEndian.PutUint64(sectionIndex[:], c.SectionIndex) + + w := sha3.NewLegacyKeccak256() + w.Write(sectionIndex[:]) + w.Write(c.SectionHead[:]) + w.Write(c.CHTRoot[:]) + w.Write(c.BloomRoot[:]) + + var h common.Hash + w.Sum(h[:0]) + return h } // Empty returns an indicator whether the checkpoint is regarded as empty. @@ -365,7 +353,7 @@ type ChainConfig struct { DAOForkBlock *big.Int `json:"daoForkBlock,omitempty"` // TheDAO hard-fork switch block (nil = no fork) DAOForkSupport bool `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork - // EIP150 implements the Gas price changes (https://github.com/Onther-Tech/EIPs/issues/150) + // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork) EIP150Hash common.Hash `json:"eip150Hash,omitempty"` // EIP150 HF hash (needed for header only clients as only gas pricing changed) @@ -376,28 +364,37 @@ type ChainConfig struct { 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) + MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) + BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin) + LondonBlock *big.Int `json:"londonBlock,omitempty"` // London switch block (nil = no fork, 0 = already on london) + ArrowGlacierBlock *big.Int `json:"arrowGlacierBlock,omitempty"` // Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated) + GrayGlacierBlock *big.Int `json:"grayGlacierBlock,omitempty"` // Eip-5133 (bomb delay) switch block (nil = no fork, 0 = already activated) + MergeNetsplitBlock *big.Int `json:"mergeNetsplitBlock,omitempty"` // Virtual fork after The Merge to use as a network splitter + ShanghaiBlock *big.Int `json:"shanghaiBlock,omitempty"` // Shanghai switch block (nil = no fork, 0 = already on shanghai) + CancunBlock *big.Int `json:"cancunBlock,omitempty"` // Cancun switch block (nil = no fork, 0 = already on cancun) + + // TerminalTotalDifficulty is the amount of total difficulty reached by + // the network that triggers the consensus upgrade. + TerminalTotalDifficulty *big.Int `json:"terminalTotalDifficulty,omitempty"` + + // TerminalTotalDifficultyPassed is a flag specifying that the network already + // passed the terminal total difficulty. Its purpose is to disable legacy sync + // even without having seen the TTD locally (safer long term). + TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed,omitempty"` // Various consensus engines Ethash *EthashConfig `json:"ethash,omitempty"` Clique *CliqueConfig `json:"clique,omitempty"` - EccPoW *EccPoWConfig `json:"eccpow,omitempty"` } // EthashConfig is the consensus engine configs for proof-of-work based sealing. type EthashConfig struct{} -type EccPoWConfig struct{} - // String implements the stringer interface, returning the consensus engine details. func (c *EthashConfig) String() string { return "ethash" } -func (c *EccPoWConfig) String() string { - return "eccpow" -} - // CliqueConfig is the consensus engine configs for proof-of-authority based sealing. type CliqueConfig struct { Period uint64 `json:"period"` // Number of seconds between blocks to enforce @@ -411,31 +408,82 @@ func (c *CliqueConfig) String() string { // String implements the fmt.Stringer interface. func (c *ChainConfig) String() string { - var engine interface{} + var banner string + + // Create some basinc network config output + network := NetworkNames[c.ChainID.String()] + if network == "" { + network = "unknown" + } + banner += fmt.Sprintf("Chain ID: %v (%s)\n", c.ChainID, network) switch { case c.Ethash != nil: - engine = c.Ethash + if c.TerminalTotalDifficulty == nil { + banner += "Consensus: Ethash (proof-of-work)\n" + } else if !c.TerminalTotalDifficultyPassed { + banner += "Consensus: Beacon (proof-of-stake), merging from Ethash (proof-of-work)\n" + } else { + banner += "Consensus: Beacon (proof-of-stake), merged from Ethash (proof-of-work)\n" + } case c.Clique != nil: - engine = c.Clique - case c.EccPoW != nil: - engine = c.EccPoW + if c.TerminalTotalDifficulty == nil { + banner += "Consensus: Clique (proof-of-authority)\n" + } else if !c.TerminalTotalDifficultyPassed { + banner += "Consensus: Beacon (proof-of-stake), merging from Clique (proof-of-authority)\n" + } else { + banner += "Consensus: Beacon (proof-of-stake), merged from Clique (proof-of-authority)\n" + } default: - engine = "unknown" - } - 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, - c.DAOForkSupport, - c.EIP150Block, - c.EIP155Block, - c.EIP158Block, - c.ByzantiumBlock, - c.ConstantinopleBlock, - c.PetersburgBlock, - c.IstanbulBlock, - engine, - ) + banner += "Consensus: unknown\n" + } + banner += "\n" + + // Create a list of forks with a short description of them. Forks that only + // makes sense for mainnet should be optional at printing to avoid bloating + // the output for testnets and private networks. + banner += "Pre-Merge hard forks:\n" + banner += fmt.Sprintf(" - Homestead: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)\n", c.HomesteadBlock) + if c.DAOForkBlock != nil { + banner += fmt.Sprintf(" - DAO Fork: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)\n", c.DAOForkBlock) + } + banner += fmt.Sprintf(" - Tangerine Whistle (EIP 150): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)\n", c.EIP150Block) + banner += fmt.Sprintf(" - Spurious Dragon/1 (EIP 155): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)\n", c.EIP155Block) + banner += fmt.Sprintf(" - Spurious Dragon/2 (EIP 158): %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)\n", c.EIP155Block) + banner += fmt.Sprintf(" - Byzantium: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)\n", c.ByzantiumBlock) + banner += fmt.Sprintf(" - Constantinople: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)\n", c.ConstantinopleBlock) + banner += fmt.Sprintf(" - Petersburg: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)\n", c.PetersburgBlock) + banner += fmt.Sprintf(" - Istanbul: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)\n", c.IstanbulBlock) + if c.MuirGlacierBlock != nil { + banner += fmt.Sprintf(" - Muir Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)\n", c.MuirGlacierBlock) + } + banner += fmt.Sprintf(" - Berlin: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)\n", c.BerlinBlock) + banner += fmt.Sprintf(" - London: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)\n", c.LondonBlock) + if c.ArrowGlacierBlock != nil { + banner += fmt.Sprintf(" - Arrow Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/arrow-glacier.md)\n", c.ArrowGlacierBlock) + } + if c.GrayGlacierBlock != nil { + banner += fmt.Sprintf(" - Gray Glacier: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/gray-glacier.md)\n", c.GrayGlacierBlock) + } + if c.ShanghaiBlock != nil { + banner += fmt.Sprintf(" - Shanghai: %-8v (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md)\n", c.ShanghaiBlock) + } + if c.CancunBlock != nil { + banner += fmt.Sprintf(" - Cancun: %-8v\n", c.CancunBlock) + } + banner += "\n" + + // Add a special section for the merge as it's non-obvious + if c.TerminalTotalDifficulty == nil { + banner += "The Merge is not yet available for this network!\n" + banner += " - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md" + } else { + banner += "Merge configured:\n" + banner += " - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md\n" + banner += fmt.Sprintf(" - Network known to be merged: %v\n", c.TerminalTotalDifficultyPassed) + banner += fmt.Sprintf(" - Total terminal difficulty: %v\n", c.TerminalTotalDifficulty) + banner += fmt.Sprintf(" - Merge netsplit block: %-8v", c.MergeNetsplitBlock) + } + return banner } // IsHomestead returns whether num is either equal to the homestead block or greater. @@ -473,6 +521,11 @@ func (c *ChainConfig) IsConstantinople(num *big.Int) bool { return isForked(c.ConstantinopleBlock, num) } +// IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater. +func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool { + return isForked(c.MuirGlacierBlock, num) +} + // IsPetersburg returns whether num is either // - equal to or greater than the PetersburgBlock fork block, // - OR is nil, and Constantinople is active @@ -485,9 +538,42 @@ 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) +// IsBerlin returns whether num is either equal to the Berlin fork block or greater. +func (c *ChainConfig) IsBerlin(num *big.Int) bool { + return isForked(c.BerlinBlock, num) +} + +// IsLondon returns whether num is either equal to the London fork block or greater. +func (c *ChainConfig) IsLondon(num *big.Int) bool { + return isForked(c.LondonBlock, num) +} + +// IsArrowGlacier returns whether num is either equal to the Arrow Glacier (EIP-4345) fork block or greater. +func (c *ChainConfig) IsArrowGlacier(num *big.Int) bool { + return isForked(c.ArrowGlacierBlock, num) +} + +// IsGrayGlacier returns whether num is either equal to the Gray Glacier (EIP-5133) fork block or greater. +func (c *ChainConfig) IsGrayGlacier(num *big.Int) bool { + return isForked(c.GrayGlacierBlock, num) +} + +// IsTerminalPoWBlock returns whether the given block is the last block of PoW stage. +func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *big.Int) bool { + if c.TerminalTotalDifficulty == nil { + return false + } + return parentTotalDiff.Cmp(c.TerminalTotalDifficulty) < 0 && totalDiff.Cmp(c.TerminalTotalDifficulty) >= 0 +} + +// IsShanghai returns whether num is either equal to the Shanghai fork block or greater. +func (c *ChainConfig) IsShanghai(num *big.Int) bool { + return isForked(c.ShanghaiBlock, num) +} + +// IsCancun returns whether num is either equal to the Cancun fork block or greater. +func (c *ChainConfig) IsCancun(num *big.Int) bool { + return isForked(c.CancunBlock, num) } // CheckCompatible checks whether scheduled fork transitions have been imported @@ -508,6 +594,55 @@ func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64) *Confi return lasterr } +// CheckConfigForkOrder checks that we don't "skip" any forks, geth isn't pluggable enough +// to guarantee that forks can be implemented in a different order than on official networks +func (c *ChainConfig) CheckConfigForkOrder() error { + type fork struct { + name string + block *big.Int + optional bool // if true, the fork may be nil and next fork is still allowed + } + var lastFork fork + for _, cur := range []fork{ + {name: "homesteadBlock", block: c.HomesteadBlock}, + {name: "daoForkBlock", block: c.DAOForkBlock, optional: true}, + {name: "eip150Block", block: c.EIP150Block}, + {name: "eip155Block", block: c.EIP155Block}, + {name: "eip158Block", block: c.EIP158Block}, + {name: "byzantiumBlock", block: c.ByzantiumBlock}, + {name: "constantinopleBlock", block: c.ConstantinopleBlock}, + {name: "petersburgBlock", block: c.PetersburgBlock}, + {name: "istanbulBlock", block: c.IstanbulBlock}, + {name: "muirGlacierBlock", block: c.MuirGlacierBlock, optional: true}, + {name: "berlinBlock", block: c.BerlinBlock}, + {name: "londonBlock", block: c.LondonBlock}, + {name: "arrowGlacierBlock", block: c.ArrowGlacierBlock, optional: true}, + {name: "grayGlacierBlock", block: c.GrayGlacierBlock, optional: true}, + {name: "mergeNetsplitBlock", block: c.MergeNetsplitBlock, optional: true}, + {name: "shanghaiBlock", block: c.ShanghaiBlock, optional: true}, + {name: "cancunBlock", block: c.CancunBlock, optional: true}, + } { + if lastFork.name != "" { + // Next one must be higher number + if lastFork.block == nil && cur.block != nil { + return fmt.Errorf("unsupported fork ordering: %v not enabled, but %v enabled at %v", + lastFork.name, cur.name, cur.block) + } + if lastFork.block != nil && cur.block != nil { + if lastFork.block.Cmp(cur.block) > 0 { + return fmt.Errorf("unsupported fork ordering: %v enabled at %v, but %v enabled at %v", + lastFork.name, lastFork.block, cur.name, cur.block) + } + } + } + // If it was optional and not set, then ignore it + if !cur.optional || cur.block != nil { + lastFork = cur + } + } + return nil +} + func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *ConfigCompatError { if isForkIncompatible(c.HomesteadBlock, newcfg.HomesteadBlock, head) { return newCompatError("Homestead fork block", c.HomesteadBlock, newcfg.HomesteadBlock) @@ -537,13 +672,38 @@ 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("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock) + // the only case where we allow Petersburg to be set in the past is if it is equal to Constantinople + // mainly to satisfy fork ordering requirements which state that Petersburg fork be set if Constantinople fork is set + if isForkIncompatible(c.ConstantinopleBlock, newcfg.PetersburgBlock, head) { + 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) + if isForkIncompatible(c.MuirGlacierBlock, newcfg.MuirGlacierBlock, head) { + return newCompatError("Muir Glacier fork block", c.MuirGlacierBlock, newcfg.MuirGlacierBlock) + } + if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) { + return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock) + } + if isForkIncompatible(c.LondonBlock, newcfg.LondonBlock, head) { + return newCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock) + } + if isForkIncompatible(c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock, head) { + return newCompatError("Arrow Glacier fork block", c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock) + } + if isForkIncompatible(c.GrayGlacierBlock, newcfg.GrayGlacierBlock, head) { + return newCompatError("Gray Glacier fork block", c.GrayGlacierBlock, newcfg.GrayGlacierBlock) + } + if isForkIncompatible(c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock, head) { + return newCompatError("Merge netsplit fork block", c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock) + } + if isForkIncompatible(c.ShanghaiBlock, newcfg.ShanghaiBlock, head) { + return newCompatError("Shanghai fork block", c.ShanghaiBlock, newcfg.ShanghaiBlock) + } + if isForkIncompatible(c.CancunBlock, newcfg.CancunBlock, head) { + return newCompatError("Cancun fork block", c.CancunBlock, newcfg.CancunBlock) } return nil } @@ -612,10 +772,12 @@ type Rules struct { ChainID *big.Int IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool + IsBerlin, IsLondon bool + IsMerge, IsShanghai, isCancun bool } // Rules ensures c's ChainID is not nil. -func (c *ChainConfig) Rules(num *big.Int) Rules { +func (c *ChainConfig) Rules(num *big.Int, isMerge bool) Rules { chainID := c.ChainID if chainID == nil { chainID = new(big.Int) @@ -630,5 +792,10 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { IsConstantinople: c.IsConstantinople(num), IsPetersburg: c.IsPetersburg(num), IsIstanbul: c.IsIstanbul(num), + IsBerlin: c.IsBerlin(num), + IsLondon: c.IsLondon(num), + IsMerge: isMerge, + IsShanghai: c.IsShanghai(num), + isCancun: c.IsCancun(num), } } diff --git a/params/config_test.go b/params/config_test.go index 02c5fe29..3c8ebaf4 100644 --- a/params/config_test.go +++ b/params/config_test.go @@ -70,6 +70,23 @@ func TestCheckCompatible(t *testing.T) { RewindTo: 9, }, }, + { + stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)}, + new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(30)}, + head: 40, + wantErr: nil, + }, + { + stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)}, + new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(31)}, + head: 40, + wantErr: &ConfigCompatError{ + What: "Petersburg fork block", + StoredConfig: nil, + NewConfig: big.NewInt(31), + RewindTo: 30, + }, + }, } for _, test := range tests { diff --git a/params/dao.go b/params/dao.go index 3ec76a91..da3c8dfc 100644 --- a/params/dao.go +++ b/params/dao.go @@ -19,7 +19,7 @@ package params import ( "math/big" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // DAOForkBlockExtra is the block header extra-data field to set for the DAO fork diff --git a/params/network_params.go b/params/network_params.go index bba24721..9311b5e2 100644 --- a/params/network_params.go +++ b/params/network_params.go @@ -53,9 +53,15 @@ const ( // CheckpointProcessConfirmations is the number before a checkpoint is generated CheckpointProcessConfirmations = 256 - // ImmutabilityThreshold is the number of blocks after which a chain segment is + // FullImmutabilityThreshold 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 + // the freezer as the cutoff threshold and by clique as the snapshot trust limit. + FullImmutabilityThreshold = 90000 + + // LightImmutabilityThreshold is the number of blocks after which a header chain + // segment is considered immutable for light client(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 light pruner as the pruning validity guarantee. + LightImmutabilityThreshold = 30000 ) diff --git a/params/protocol_params.go b/params/protocol_params.go index 11b858a6..5f154597 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -19,9 +19,10 @@ package params import "math/big" const ( - GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. - MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. - GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. + GasLimitBoundDivisor uint64 = 1024 // The bound divisor of the gas limit, used in update calculations. + MinGasLimit uint64 = 5000 // Minimum the gas limit may ever be. + MaxGasLimit uint64 = 0x7fffffffffffffff // Maximum the gas limit (2^63-1). + GenesisGasLimit uint64 = 4712388 // Gas limit of the Genesis block. MaximumExtraDataSize uint64 = 32 // Maximum size extra data may be after Genesis. ExpByteGas uint64 = 10 // Times ceil(log256(exponent)) for the EXP instruction. @@ -35,10 +36,10 @@ const ( LogDataGas uint64 = 8 // Per byte in a LOG* operation's data. CallStipend uint64 = 2300 // Free gas given at beginning of call. - Sha3Gas uint64 = 30 // Once per SHA3 operation. - Sha3WordGas uint64 = 6 // Once per word of the SHA3 operation's data. + Keccak256Gas uint64 = 30 // Once per KECCAK256 operation. + Keccak256WordGas uint64 = 6 // Once per word of the KECCAK256 operation's data. - SstoreSetGas uint64 = 20000 // Once per SLOAD operation. + SstoreSetGas uint64 = 20000 // Once per SSTORE operation. SstoreResetGas uint64 = 5000 // Once per SSTORE operation if the zeroness changes from zero. SstoreClearGas uint64 = 5000 // Once per SSTORE operation if the zeroness doesn't change. SstoreRefundGas uint64 = 15000 // Once per SSTORE operation if the zeroness changes to zero. @@ -52,32 +53,41 @@ 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 - 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 + SstoreSentryGasEIP2200 uint64 = 2300 // Minimum gas required to be present for an SSTORE call, not consumed + SstoreSetGasEIP2200 uint64 = 20000 // Once per SSTORE operation from clean zero to non-zero + SstoreResetGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else + SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot + + ColdAccountAccessCostEIP2929 = uint64(2600) // COLD_ACCOUNT_ACCESS_COST + ColdSloadCostEIP2929 = uint64(2100) // COLD_SLOAD_COST + WarmStorageReadCostEIP2929 = uint64(100) // WARM_STORAGE_READ_COST + + // In EIP-2200: SstoreResetGas was 5000. + // In EIP-2929: SstoreResetGas was changed to '5000 - COLD_SLOAD_COST'. + // In EIP-3529: SSTORE_CLEARS_SCHEDULE is defined as SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST + // Which becomes: 5000 - 2100 + 1900 = 4800 + SstoreClearsScheduleRefundEIP3529 uint64 = SstoreResetGasEIP2200 - ColdSloadCostEIP2929 + TxAccessListStorageKeyGas 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) + 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) + TxAccessListAddressGas uint64 = 2400 // Per address specified in EIP 2930 access list + TxAccessListStorageKeyGas uint64 = 1900 // Per storage key specified in EIP 2930 access list // These have been changed during the course of the chain CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction. @@ -90,6 +100,7 @@ const ( SloadGasFrontier uint64 = 50 SloadGasEIP150 uint64 = 200 SloadGasEIP1884 uint64 = 800 // Cost of SLOAD after EIP 1884 (part of Istanbul) + SloadGasEIP2200 uint64 = 800 // Cost of SLOAD after EIP 2200 (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) @@ -108,6 +119,10 @@ const ( // Introduced in Tangerine Whistle (Eip 150) CreateBySelfdestructGas uint64 = 25000 + BaseFeeChangeDenominator = 8 // Bounds the amount the base fee can change between blocks. + ElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have. + InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks. + MaxCodeSize = 24576 // Maximum bytecode to permit for a contract // Precompiled contract gas prices @@ -119,7 +134,6 @@ const ( 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 @@ -129,8 +143,25 @@ const ( 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 + + Bls12381G1AddGas uint64 = 600 // Price for BLS12-381 elliptic curve G1 point addition + Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication + Bls12381G2AddGas uint64 = 4500 // Price for BLS12-381 elliptic curve G2 point addition + Bls12381G2MulGas uint64 = 55000 // Price for BLS12-381 elliptic curve G2 point scalar multiplication + Bls12381PairingBaseGas uint64 = 115000 // Base gas price for BLS12-381 elliptic curve pairing check + Bls12381PairingPerPairGas uint64 = 23000 // Per-point pair gas price for BLS12-381 elliptic curve pairing check + Bls12381MapG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation + Bls12381MapG2Gas uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation + + // The Refund Quotient is the cap on how much of the used gas can be refunded. Before EIP-3529, + // up to half the consumed gas could be refunded. Redefined as 1/5th in EIP-3529 + RefundQuotient uint64 = 2 + RefundQuotientEIP3529 uint64 = 5 ) +// Gas discount table for BLS12-381 G1 and G2 multi exponentiation operations +var Bls12381MultiExpDiscountTable = [128]uint64{1200, 888, 764, 641, 594, 547, 500, 453, 438, 423, 408, 394, 379, 364, 349, 334, 330, 326, 322, 318, 314, 310, 306, 302, 298, 294, 289, 285, 281, 277, 273, 269, 268, 266, 265, 263, 262, 260, 259, 257, 256, 254, 253, 251, 250, 248, 247, 245, 244, 242, 241, 239, 238, 236, 235, 233, 232, 231, 229, 228, 226, 225, 223, 222, 221, 220, 219, 219, 218, 217, 216, 216, 215, 214, 213, 213, 212, 211, 211, 210, 209, 208, 208, 207, 206, 205, 205, 204, 203, 202, 202, 201, 200, 199, 199, 198, 197, 196, 196, 195, 194, 193, 193, 192, 191, 191, 190, 189, 188, 188, 187, 186, 185, 185, 184, 183, 182, 182, 181, 180, 179, 179, 178, 177, 176, 176, 175, 174} + var ( DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations. GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block. diff --git a/params/version.go b/params/version.go index 94386f53..31724153 100644 --- a/params/version.go +++ b/params/version.go @@ -22,8 +22,8 @@ import ( const ( VersionMajor = 1 // Major version component of the current release - VersionMinor = 9 // Minor version component of the current release - VersionPatch = 3 // Patch version component of the current release + VersionMinor = 11 // Minor version component of the current release + VersionPatch = 0 // Patch version component of the current release VersionMeta = "unstable" // Version metadata to append to the version string ) @@ -41,9 +41,9 @@ var VersionWithMeta = func() string { return v }() -// ArchiveVersion holds the textual version string used for Geth archives. -// e.g. "1.8.11-dea1ce05" for stable releases, or -// "1.8.13-unstable-21c059b6" for unstable releases +// ArchiveVersion holds the textual version string used for Geth archives. e.g. +// "1.8.11-dea1ce05" for stable releases, or "1.8.13-unstable-21c059b6" for unstable +// releases. func ArchiveVersion(gitCommit string) string { vsn := Version if VersionMeta != "stable" { diff --git a/rlp/decode.go b/rlp/decode.go index 4f29f2fb..9214dbfb 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -27,14 +27,17 @@ import ( "reflect" "strings" "sync" + + "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct" ) -var ( - // EOL is returned when the end of the current list - // has been reached during streaming. - EOL = errors.New("rlp: end of list") +//lint:ignore ST1012 EOL is not an error. + +// EOL is returned when the end of the current list +// has been reached during streaming. +var EOL = errors.New("rlp: end of list") - // Actual Errors +var ( ErrExpectedString = errors.New("rlp: expected String or Byte") ErrExpectedList = errors.New("rlp: expected List") ErrCanonInt = errors.New("rlp: non-canonical integer format") @@ -55,81 +58,23 @@ var ( } ) -// 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. -// -// 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. -// -// 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, Decode stores one of these -// in the value: +// 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. // -// []interface{}, for RLP lists -// []byte, for RLP strings +// If r does not implement ByteReader, Decode will do its own buffering. // -// Non-empty interface types are not supported, nor are 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 { @@ -140,9 +85,8 @@ func Decode(r io.Reader, val interface{}) error { 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 { r := bytes.NewReader(b) @@ -206,19 +150,19 @@ var ( bigInt = reflect.TypeOf(big.Int{}) ) -func makeDecoder(typ reflect.Type, tags tags) (dec decoder, err error) { +func makeDecoder(typ reflect.Type, tags rlpstruct.Tags) (dec decoder, err error) { kind := typ.Kind() 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: @@ -229,11 +173,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: @@ -283,24 +222,20 @@ func decodeBigIntNoPtr(s *Stream, val reflect.Value) error { } func decodeBigInt(s *Stream, val reflect.Value) error { - b, err := s.Bytes() - if err != nil { - return wrapStreamError(err, val.Type()) - } i := val.Interface().(*big.Int) if i == nil { i = new(big.Int) val.Set(reflect.ValueOf(i)) } - // Reject leading zero bytes - if len(b) > 0 && b[0] == 0 { - return wrapStreamError(ErrCanonInt, val.Type()) + + err := s.decodeBigInt(i) + if err != nil { + return wrapStreamError(err, val.Type()) } - i.SetBytes(b) return nil } -func makeListDecoder(typ reflect.Type, tag tags) (decoder, error) { +func makeListDecoder(typ reflect.Type, tag rlpstruct.Tags) (decoder, error) { etype := typ.Elem() if etype.Kind() == reflect.Uint8 && !reflect.PtrTo(etype).Implements(decoderInterface) { if typ.Kind() == reflect.Array { @@ -308,7 +243,7 @@ func makeListDecoder(typ reflect.Type, tag tags) (decoder, error) { } return decodeByteSlice, nil } - etypeinfo := cachedTypeInfo1(etype, tags{}) + etypeinfo := theTC.infoWhileGenerating(etype, rlpstruct.Tags{}) if etypeinfo.decoderErr != nil { return nil, etypeinfo.decoderErr } @@ -318,7 +253,7 @@ func makeListDecoder(typ reflect.Type, tag tags) (decoder, error) { dec = func(s *Stream, val reflect.Value) error { return decodeListArray(s, val, etypeinfo.decoder) } - case tag.tail: + case tag.Tail: // A slice with "tail" tag can occur as the last field // of a struct and is supposed to swallow all remaining // list elements. The struct decoder already called s.List, @@ -411,25 +346,23 @@ func decodeByteArray(s *Stream, val reflect.Value) error { if err != nil { return err } - vlen := val.Len() + slice := byteArrayBytes(val, val.Len()) switch kind { case Byte: - if vlen == 0 { + if len(slice) == 0 { return &decodeError{msg: "input string too long", typ: val.Type()} - } - if vlen > 1 { + } else if len(slice) > 1 { return &decodeError{msg: "input string too short", typ: val.Type()} } - bv, _ := s.Uint() - val.Index(0).SetUint(bv) + slice[0] = s.byteval + s.kind = -1 case String: - if uint64(vlen) < size { + if uint64(len(slice)) < size { return &decodeError{msg: "input string too long", typ: val.Type()} } - if uint64(vlen) > size { + if uint64(len(slice)) > size { return &decodeError{msg: "input string too short", typ: val.Type()} } - slice := val.Slice(0, vlen).Interface().([]byte) if err := s.readFull(slice); err != nil { return err } @@ -448,13 +381,25 @@ 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) } - for _, f := range fields { + for i, f := range fields { err := f.info.decoder(s, val.Field(f.index)) if err == EOL { + if f.optional { + // The field is optional, so reaching the end of the list before + // reaching the last field is acceptable. All remaining undecoded + // fields are zeroed. + zeroFields(val, fields[i:]) + break + } return &decodeError{msg: "too few elements", typ: typ} } else if err != nil { return addErrorContext(err, "."+typ.Field(f.index).Name) @@ -465,15 +410,29 @@ 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) { +func zeroFields(structval reflect.Value, fields []field) { + for _, f := range fields { + fv := structval.Field(f.index) + fv.Set(reflect.Zero(fv.Type())) + } +} + +// makePtrDecoder creates a decoder that decodes into the pointer's element type. +func makePtrDecoder(typ reflect.Type, tag rlpstruct.Tags) (decoder, error) { etype := typ.Elem() - etypeinfo := cachedTypeInfo1(etype, tags{}) - if etypeinfo.decoderErr != nil { + etypeinfo := theTC.infoWhileGenerating(etype, rlpstruct.Tags{}) + switch { + case etypeinfo.decoderErr != nil: return nil, etypeinfo.decoderErr + case !tag.NilOK: + return makeSimplePtrDecoder(etype, etypeinfo), nil + default: + return makeNilPtrDecoder(etype, etypeinfo, tag), 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) @@ -483,30 +442,39 @@ 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 := cachedTypeInfo1(etype, tags{}) - if etypeinfo.decoderErr != nil { - return nil, etypeinfo.decoderErr - } - dec := func(s *Stream, val reflect.Value) (err error) { +func makeNilPtrDecoder(etype reflect.Type, etypeinfo *typeinfo, ts rlpstruct.Tags) decoder { + typ := reflect.PtrTo(etype) + nilPtr := reflect.Zero(typ) + + // Determine the value kind that results in nil pointer. + nilKind := typeNilKind(etype, ts) + + 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() { @@ -517,7 +485,6 @@ func makeOptionalPtrDecoder(typ reflect.Type) (decoder, error) { } return err } - return dec, nil } var ifsliceType = reflect.TypeOf([]interface{}{}) @@ -546,25 +513,12 @@ 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. -type Kind int +type Kind int8 const ( Byte Kind = iota @@ -607,22 +561,16 @@ type ByteReader interface { type Stream struct { r ByteReader - // number of bytes remaining to be read from r. - remaining uint64 - limited bool - - // auxiliary buffer for integer decoding - uintbuf []byte - - kind Kind // kind of value ahead - size uint64 // size of value ahead - byteval byte // value of single byte in type tag - kinderr error // error from last readKind - stack []listpos + remaining uint64 // number of bytes remaining to be read from r + size uint64 // size of value ahead + kinderr error // error from last readKind + stack []uint64 // list sizes + uintbuf [32]byte // auxiliary buffer for integer decoding + kind Kind // kind of value ahead + byteval byte // value of single byte in type tag + limited bool // true if input limit is in effect } -type listpos struct{ pos, size uint64 } - // NewStream creates a new decoding stream reading from r. // // If r implements the ByteReader interface, Stream will @@ -682,6 +630,37 @@ func (s *Stream) Bytes() ([]byte, error) { } } +// ReadBytes decodes the next RLP value and stores the result in b. +// The value size must match len(b) exactly. +func (s *Stream) ReadBytes(b []byte) error { + kind, size, err := s.Kind() + if err != nil { + return err + } + switch kind { + case Byte: + if len(b) != 1 { + return fmt.Errorf("input value has wrong size 1, want %d", len(b)) + } + b[0] = s.byteval + s.kind = -1 // rearm Kind + return nil + case String: + if uint64(len(b)) != size { + return fmt.Errorf("input value has wrong size %d, want %d", size, len(b)) + } + if err = s.readFull(b); err != nil { + return err + } + if size == 1 && b[0] < 128 { + return ErrCanonSize + } + return nil + default: + return ErrExpectedString + } +} + // Raw reads a raw encoded value including RLP type information. func (s *Stream) Raw() ([]byte, error) { kind, size, err := s.Kind() @@ -692,8 +671,8 @@ func (s *Stream) Raw() ([]byte, error) { s.kind = -1 // rearm Kind return []byte{s.byteval}, nil } - // the original header has already been read and is no longer - // available. read content and put a new header in front of it. + // The original header has already been read and is no longer + // available. Read content and put a new header in front of it. start := headsize(size) buf := make([]byte, uint64(start)+size) if err := s.readFull(buf[start:]); err != nil { @@ -710,10 +689,31 @@ func (s *Stream) Raw() ([]byte, error) { // Uint reads an RLP string of up to 8 bytes and returns its contents // as an unsigned integer. If the input does not contain an RLP string, the // returned error will be ErrExpectedString. +// +// Deprecated: use s.Uint64 instead. func (s *Stream) Uint() (uint64, error) { return s.uint(64) } +func (s *Stream) Uint64() (uint64, error) { + return s.uint(64) +} + +func (s *Stream) Uint32() (uint32, error) { + i, err := s.uint(32) + return uint32(i), err +} + +func (s *Stream) Uint16() (uint16, error) { + i, err := s.uint(16) + return uint16(i), err +} + +func (s *Stream) Uint8() (uint8, error) { + i, err := s.uint(8) + return uint8(i), err +} + func (s *Stream) uint(maxbits int) (uint64, error) { kind, size, err := s.Kind() if err != nil { @@ -776,7 +776,14 @@ func (s *Stream) List() (size uint64, err error) { if kind != List { return 0, ErrExpectedList } - s.stack = append(s.stack, listpos{0, size}) + + // Remove size of inner list from outer list before pushing the new size + // onto the stack. This ensures that the remaining outer list size will + // be correct after the matching call to ListEnd. + if inList, limit := s.listLimit(); inList { + s.stack[len(s.stack)-1] = limit - size + } + s.stack = append(s.stack, size) s.kind = -1 s.size = 0 return size, nil @@ -785,22 +792,77 @@ func (s *Stream) List() (size uint64, err error) { // ListEnd returns to the enclosing list. // The input reader must be positioned at the end of a list. func (s *Stream) ListEnd() error { - if len(s.stack) == 0 { + // Ensure that no more data is remaining in the current list. + if inList, listLimit := s.listLimit(); !inList { return errNotInList - } - tos := s.stack[len(s.stack)-1] - if tos.pos != tos.size { + } else if listLimit > 0 { return errNotAtEOL } s.stack = s.stack[:len(s.stack)-1] // pop - if len(s.stack) > 0 { - s.stack[len(s.stack)-1].pos += tos.size - } s.kind = -1 s.size = 0 return nil } +// MoreDataInList reports whether the current list context contains +// more data to be read. +func (s *Stream) MoreDataInList() bool { + _, listLimit := s.listLimit() + return listLimit > 0 +} + +// BigInt decodes an arbitrary-size integer value. +func (s *Stream) BigInt() (*big.Int, error) { + i := new(big.Int) + if err := s.decodeBigInt(i); err != nil { + return nil, err + } + return i, nil +} + +func (s *Stream) decodeBigInt(dst *big.Int) error { + var buffer []byte + kind, size, err := s.Kind() + switch { + case err != nil: + return err + case kind == List: + return ErrExpectedString + case kind == Byte: + buffer = s.uintbuf[:1] + buffer[0] = s.byteval + s.kind = -1 // re-arm Kind + case size == 0: + // Avoid zero-length read. + s.kind = -1 + case size <= uint64(len(s.uintbuf)): + // For integers smaller than s.uintbuf, allocating a buffer + // can be avoided. + buffer = s.uintbuf[:size] + if err := s.readFull(buffer); err != nil { + return err + } + // Reject inputs where single byte encoding should have been used. + if size == 1 && buffer[0] < 128 { + return ErrCanonSize + } + default: + // For large integers, a temporary buffer is needed. + buffer = make([]byte, size) + if err := s.readFull(buffer); err != nil { + return err + } + } + + // Reject leading zero bytes. + if len(buffer) > 0 && buffer[0] == 0 { + return ErrCanonInt + } + // Set the integer bytes. + dst.SetBytes(buffer) + return nil +} + // Decode decodes a value and stores the result in the value pointed // to by val. Please see the documentation for the Decode function // to learn about the decoding rules. @@ -823,7 +885,7 @@ func (s *Stream) Decode(val interface{}) error { 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 + // Add decode target type to error so context has more meaning. decErr.ctx = append(decErr.ctx, fmt.Sprint("(", rtyp.Elem(), ")")) } return err @@ -846,6 +908,9 @@ func (s *Stream) Reset(r io.Reader, inputLimit uint64) { case *bytes.Reader: s.remaining = uint64(br.Len()) s.limited = true + case *bytes.Buffer: + s.remaining = uint64(br.Len()) + s.limited = true case *strings.Reader: s.remaining = uint64(br.Len()) s.limited = true @@ -864,10 +929,8 @@ func (s *Stream) Reset(r io.Reader, inputLimit uint64) { s.size = 0 s.kind = -1 s.kinderr = nil - if s.uintbuf == nil { - s.uintbuf = make([]byte, 8) - } s.byteval = 0 + s.uintbuf = [32]byte{} } // Kind returns the kind and size of the next value in the @@ -882,35 +945,29 @@ func (s *Stream) Reset(r io.Reader, inputLimit uint64) { // the value. Subsequent calls to Kind (until the value is decoded) // will not advance the input reader and return cached information. func (s *Stream) Kind() (kind Kind, size uint64, err error) { - var tos *listpos - if len(s.stack) > 0 { - tos = &s.stack[len(s.stack)-1] - } - if s.kind < 0 { - s.kinderr = nil - // Don't read further if we're at the end of the - // innermost list. - if tos != nil && tos.pos == tos.size { - return 0, 0, EOL - } - s.kind, s.size, s.kinderr = s.readKind() - if s.kinderr == nil { - if tos == nil { - // At toplevel, check that the value is smaller - // than the remaining input length. - if s.limited && s.size > s.remaining { - s.kinderr = ErrValueTooLarge - } - } else { - // Inside a list, check that the value doesn't overflow the list. - if s.size > tos.size-tos.pos { - s.kinderr = ErrElemTooLarge - } - } + if s.kind >= 0 { + return s.kind, s.size, s.kinderr + } + + // Check for end of list. This needs to be done here because readKind + // checks against the list size, and would return the wrong error. + inList, listLimit := s.listLimit() + if inList && listLimit == 0 { + return 0, 0, EOL + } + // Read the actual size tag. + s.kind, s.size, s.kinderr = s.readKind() + if s.kinderr == nil { + // Check the data size of the value ahead against input limits. This + // is done here because many decoders require allocating an input + // buffer matching the value size. Checking it here protects those + // decoders from inputs declaring very large value size. + if inList && s.size > listLimit { + s.kinderr = ErrElemTooLarge + } else if s.limited && s.size > s.remaining { + s.kinderr = ErrValueTooLarge } } - // Note: this might return a sticky error generated - // by an earlier call to readKind. return s.kind, s.size, s.kinderr } @@ -937,37 +994,35 @@ func (s *Stream) readKind() (kind Kind, size uint64, err error) { s.byteval = b return Byte, 0, nil case b < 0xB8: - // Otherwise, if a string is 0-55 bytes long, - // the RLP encoding consists of a single byte with value 0x80 plus the - // length of the string followed by the string. The range of the first - // byte is thus [0x80, 0xB7]. + // Otherwise, if a string is 0-55 bytes long, the RLP encoding consists + // of a single byte with value 0x80 plus the length of the string + // followed by the string. The range of the first byte is thus [0x80, 0xB7]. return String, uint64(b - 0x80), nil case b < 0xC0: - // If a string is more than 55 bytes long, the - // RLP encoding consists of a single byte with value 0xB7 plus the length - // of the length of the string in binary form, followed by the length of - // the string, followed by the string. For example, a length-1024 string - // would be encoded as 0xB90400 followed by the string. The range of - // the first byte is thus [0xB8, 0xBF]. + // If a string is more than 55 bytes long, the RLP encoding consists of a + // single byte with value 0xB7 plus the length of the length of the + // string in binary form, followed by the length of the string, followed + // by the string. For example, a length-1024 string would be encoded as + // 0xB90400 followed by the string. The range of the first byte is thus + // [0xB8, 0xBF]. size, err = s.readUint(b - 0xB7) if err == nil && size < 56 { err = ErrCanonSize } return String, size, err case b < 0xF8: - // If the total payload of a list - // (i.e. the combined length of all its items) is 0-55 bytes long, the - // RLP encoding consists of a single byte with value 0xC0 plus the length - // of the list followed by the concatenation of the RLP encodings of the - // items. The range of the first byte is thus [0xC0, 0xF7]. + // If the total payload of a list (i.e. the combined length of all its + // items) is 0-55 bytes long, the RLP encoding consists of a single byte + // with value 0xC0 plus the length of the list followed by the + // concatenation of the RLP encodings of the items. The range of the + // first byte is thus [0xC0, 0xF7]. return List, uint64(b - 0xC0), nil default: - // If the total payload of a list is more than 55 bytes long, - // the RLP encoding consists of a single byte with value 0xF7 - // plus the length of the length of the payload in binary - // form, followed by the length of the payload, followed by - // the concatenation of the RLP encodings of the items. The - // range of the first byte is thus [0xF8, 0xFF]. + // If the total payload of a list is more than 55 bytes long, the RLP + // encoding consists of a single byte with value 0xF7 plus the length of + // the length of the payload in binary form, followed by the length of + // the payload, followed by the concatenation of the RLP encodings of + // the items. The range of the first byte is thus [0xF8, 0xFF]. size, err = s.readUint(b - 0xF7) if err == nil && size < 56 { err = ErrCanonSize @@ -985,23 +1040,24 @@ func (s *Stream) readUint(size byte) (uint64, error) { b, err := s.readByte() return uint64(b), err default: - start := int(8 - size) - for i := 0; i < start; i++ { - s.uintbuf[i] = 0 + buffer := s.uintbuf[:8] + for i := range buffer { + buffer[i] = 0 } - if err := s.readFull(s.uintbuf[start:]); err != nil { + start := int(8 - size) + if err := s.readFull(buffer[start:]); err != nil { return 0, err } - if s.uintbuf[start] == 0 { - // Note: readUint is also used to decode integer - // values. The error needs to be adjusted to become - // ErrCanonInt in this case. + if buffer[start] == 0 { + // Note: readUint is also used to decode integer values. + // The error needs to be adjusted to become ErrCanonInt in this case. return 0, ErrCanonSize } - return binary.BigEndian.Uint64(s.uintbuf), nil + return binary.BigEndian.Uint64(buffer[:]), nil } } +// readFull reads into buf from the underlying stream. func (s *Stream) readFull(buf []byte) (err error) { if err := s.willRead(uint64(len(buf))); err != nil { return err @@ -1012,11 +1068,18 @@ func (s *Stream) readFull(buf []byte) (err error) { n += nn } if err == io.EOF { - err = io.ErrUnexpectedEOF + if n < len(buf) { + err = io.ErrUnexpectedEOF + } else { + // Readers are allowed to give EOF even though the read succeeded. + // In such cases, we discard the EOF, like io.ReadFull() does. + err = nil + } } return err } +// readByte reads a single byte from the underlying stream. func (s *Stream) readByte() (byte, error) { if err := s.willRead(1); err != nil { return 0, err @@ -1028,16 +1091,16 @@ func (s *Stream) readByte() (byte, error) { return b, err } +// willRead is called before any read from the underlying stream. It checks +// n against size limits, and updates the limits if n doesn't overflow them. func (s *Stream) willRead(n uint64) error { s.kind = -1 // rearm Kind - if len(s.stack) > 0 { - // check list overflow - tos := s.stack[len(s.stack)-1] - if n > tos.size-tos.pos { + if inList, limit := s.listLimit(); inList { + if n > limit { return ErrElemTooLarge } - s.stack[len(s.stack)-1].pos += n + s.stack[len(s.stack)-1] = limit - n } if s.limited { if n > s.remaining { @@ -1047,3 +1110,11 @@ func (s *Stream) willRead(n uint64) error { } return nil } + +// listLimit returns the amount of data remaining in the innermost list. +func (s *Stream) listLimit() (inList bool, limit uint64) { + if len(s.stack) == 0 { + return false, 0 + } + return true, s.stack[len(s.stack)-1] +} diff --git a/rlp/decode_test.go b/rlp/decode_test.go index fa57182c..00722f84 100644 --- a/rlp/decode_test.go +++ b/rlp/decode_test.go @@ -26,6 +26,8 @@ import ( "reflect" "strings" "testing" + + "github.com/ethereum/go-ethereum/common/math" ) func TestStreamKind(t *testing.T) { @@ -284,6 +286,47 @@ func TestStreamRaw(t *testing.T) { } } +func TestStreamReadBytes(t *testing.T) { + tests := []struct { + input string + size int + err string + }{ + // kind List + {input: "C0", size: 1, err: "rlp: expected String or Byte"}, + // kind Byte + {input: "04", size: 0, err: "input value has wrong size 1, want 0"}, + {input: "04", size: 1}, + {input: "04", size: 2, err: "input value has wrong size 1, want 2"}, + // kind String + {input: "820102", size: 0, err: "input value has wrong size 2, want 0"}, + {input: "820102", size: 1, err: "input value has wrong size 2, want 1"}, + {input: "820102", size: 2}, + {input: "820102", size: 3, err: "input value has wrong size 2, want 3"}, + } + + for _, test := range tests { + test := test + name := fmt.Sprintf("input_%s/size_%d", test.input, test.size) + t.Run(name, func(t *testing.T) { + s := NewStream(bytes.NewReader(unhex(test.input)), 0) + b := make([]byte, test.size) + err := s.ReadBytes(b) + if test.err == "" { + if err != nil { + t.Errorf("unexpected error %q", err) + } + } else { + if err == nil { + t.Errorf("expected error, got nil") + } else if err.Error() != test.err { + t.Errorf("wrong error %q", err) + } + } + }) + } +} + func TestDecodeErrors(t *testing.T) { r := bytes.NewReader(nil) @@ -327,6 +370,15 @@ type recstruct struct { Child *recstruct `rlp:"nil"` } +type bigIntStruct struct { + I *big.Int + B string +} + +type invalidNilTag struct { + X []byte `rlp:"nil"` +} + type invalidTail1 struct { A uint `rlp:"tail"` B string @@ -350,22 +402,62 @@ type tailUint struct { type tailPrivateFields struct { A uint Tail []uint `rlp:"tail"` - x, y bool + x, y bool //lint:ignore U1000 unused fields required for testing purposes. } -var ( - veryBigInt = big.NewInt(0).Add( - big.NewInt(0).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16), - big.NewInt(0xFFFF), - ) -) +type nilListUint struct { + X *uint `rlp:"nilList"` +} -type hasIgnoredField struct { +type nilStringSlice struct { + X *[]uint `rlp:"nilString"` +} + +type intField struct { + X int +} + +type optionalFields struct { + A uint + B uint `rlp:"optional"` + C uint `rlp:"optional"` +} + +type optionalAndTailField struct { + A uint + B uint `rlp:"optional"` + Tail []uint `rlp:"tail"` +} + +type optionalBigIntField struct { + A uint + B *big.Int `rlp:"optional"` +} + +type optionalPtrField struct { + A uint + B *[3]byte `rlp:"optional"` +} + +type optionalPtrFieldNil struct { + A uint + B *[3]byte `rlp:"optional,nil"` +} + +type ignoredField struct { A uint B uint `rlp:"-"` C uint } +var ( + veryBigInt = new(big.Int).Add( + new(big.Int).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16), + big.NewInt(0xFFFF), + ) + veryVeryBigInt = new(big.Int).Exp(veryBigInt, big.NewInt(8), nil) +) + var decodeTests = []decodeTest{ // booleans {input: "01", ptr: new(bool), value: true}, @@ -434,12 +526,15 @@ var decodeTests = []decodeTest{ {input: "C0", ptr: new(string), error: "rlp: expected input string or byte for string"}, // big ints + {input: "80", ptr: new(*big.Int), value: big.NewInt(0)}, {input: "01", ptr: new(*big.Int), value: big.NewInt(1)}, {input: "89FFFFFFFFFFFFFFFFFF", ptr: new(*big.Int), value: veryBigInt}, + {input: "B848FFFFFFFFFFFFFFFFF800000000000000001BFFFFFFFFFFFFFFFFC8000000000000000045FFFFFFFFFFFFFFFFC800000000000000001BFFFFFFFFFFFFFFFFF8000000000000000001", ptr: new(*big.Int), value: veryVeryBigInt}, {input: "10", ptr: new(big.Int), value: *big.NewInt(16)}, // non-pointer also works {input: "C0", ptr: new(*big.Int), error: "rlp: expected input string or byte for *big.Int"}, - {input: "820001", ptr: new(big.Int), error: "rlp: non-canonical integer (leading zero bytes) for *big.Int"}, - {input: "8105", ptr: new(big.Int), error: "rlp: non-canonical size information for *big.Int"}, + {input: "00", ptr: new(*big.Int), error: "rlp: non-canonical integer (leading zero bytes) for *big.Int"}, + {input: "820001", ptr: new(*big.Int), error: "rlp: non-canonical integer (leading zero bytes) for *big.Int"}, + {input: "8105", ptr: new(*big.Int), error: "rlp: non-canonical size information for *big.Int"}, // structs { @@ -452,6 +547,13 @@ var decodeTests = []decodeTest{ ptr: new(recstruct), value: recstruct{1, &recstruct{2, &recstruct{3, nil}}}, }, + { + // This checks that empty big.Int works correctly in struct context. It's easy to + // miss the update of s.kind for this case, so it needs its own test. + input: "C58083343434", + ptr: new(bigIntStruct), + value: bigIntStruct{new(big.Int), "444"}, + }, // struct errors { @@ -485,20 +587,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" { @@ -521,12 +623,163 @@ var decodeTests = []decodeTest{ 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 "-" { input: "C20102", - ptr: new(hasIgnoredField), - value: hasIgnoredField{A: 1, C: 2}, + ptr: new(ignoredField), + value: ignoredField{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}}, + }, + + // struct tag "optional" + { + input: "C101", + ptr: new(optionalFields), + value: optionalFields{1, 0, 0}, + }, + { + input: "C20102", + ptr: new(optionalFields), + value: optionalFields{1, 2, 0}, + }, + { + input: "C3010203", + ptr: new(optionalFields), + value: optionalFields{1, 2, 3}, + }, + { + input: "C401020304", + ptr: new(optionalFields), + error: "rlp: input list has too many elements for rlp.optionalFields", + }, + { + input: "C101", + ptr: new(optionalAndTailField), + value: optionalAndTailField{A: 1}, + }, + { + input: "C20102", + ptr: new(optionalAndTailField), + value: optionalAndTailField{A: 1, B: 2, Tail: []uint{}}, + }, + { + input: "C401020304", + ptr: new(optionalAndTailField), + value: optionalAndTailField{A: 1, B: 2, Tail: []uint{3, 4}}, + }, + { + input: "C101", + ptr: new(optionalBigIntField), + value: optionalBigIntField{A: 1, B: nil}, + }, + { + input: "C20102", + ptr: new(optionalBigIntField), + value: optionalBigIntField{A: 1, B: big.NewInt(2)}, + }, + { + input: "C101", + ptr: new(optionalPtrField), + value: optionalPtrField{A: 1}, + }, + { + input: "C20180", // not accepted because "optional" doesn't enable "nil" + ptr: new(optionalPtrField), + error: "rlp: input string too short for [3]uint8, decoding into (rlp.optionalPtrField).B", + }, + { + input: "C20102", + ptr: new(optionalPtrField), + error: "rlp: input string too short for [3]uint8, decoding into (rlp.optionalPtrField).B", + }, + { + input: "C50183010203", + ptr: new(optionalPtrField), + value: optionalPtrField{A: 1, B: &[3]byte{1, 2, 3}}, + }, + { + input: "C101", + ptr: new(optionalPtrFieldNil), + value: optionalPtrFieldNil{A: 1}, + }, + { + input: "C20180", // accepted because "nil" tag allows empty input + ptr: new(optionalPtrFieldNil), + value: optionalPtrFieldNil{A: 1}, + }, + { + input: "C20102", + ptr: new(optionalPtrFieldNil), + error: "rlp: input string too short for [3]uint8, decoding into (rlp.optionalPtrFieldNil).B", + }, + + // struct tag "optional" field clearing + { + input: "C101", + ptr: &optionalFields{A: 9, B: 8, C: 7}, + value: optionalFields{A: 1, B: 0, C: 0}, + }, + { + input: "C20102", + ptr: &optionalFields{A: 9, B: 8, C: 7}, + value: optionalFields{A: 1, B: 2, C: 0}, + }, + { + input: "C20102", + ptr: &optionalAndTailField{A: 9, B: 8, Tail: []uint{7, 6, 5}}, + value: optionalAndTailField{A: 1, B: 2, Tail: []uint{}}, + }, + { + input: "C101", + ptr: &optionalPtrField{A: 9, B: &[3]byte{8, 7, 6}}, + value: optionalPtrField{A: 1}, }, // RawValue @@ -602,6 +855,26 @@ func TestDecodeWithByteReader(t *testing.T) { }) } +func testDecodeWithEncReader(t *testing.T, n int) { + s := strings.Repeat("0", n) + _, r, _ := EncodeToReader(s) + var decoded string + err := Decode(r, &decoded) + if err != nil { + t.Errorf("Unexpected decode error with n=%v: %v", n, err) + } + if decoded != s { + t.Errorf("Decode mismatch with n=%v", n) + } +} + +// This is a regression test checking that decoding from encReader +// works for RLP values of size 8192 bytes or more. +func TestDecodeWithEncReader(t *testing.T) { + testDecodeWithEncReader(t, 8188) // length with header is 8191 + testDecodeWithEncReader(t, 8189) // length with header is 8192 +} + // plainReader reads from a byte slice but does not // implement ReadByte. It is also not recognized by the // size validation. This is useful to test how the decoder @@ -672,6 +945,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 { @@ -723,13 +1012,45 @@ func TestDecoderFunc(t *testing.T) { x() } +// This tests the validity checks for fields with struct tag "optional". +func TestInvalidOptionalField(t *testing.T) { + type ( + invalid1 struct { + A uint `rlp:"optional"` + B uint + } + invalid2 struct { + T []uint `rlp:"tail,optional"` + } + invalid3 struct { + T []uint `rlp:"optional,tail"` + } + ) + + tests := []struct { + v interface{} + err string + }{ + {v: new(invalid1), err: `rlp: invalid struct tag "" for rlp.invalid1.B (must be optional because preceding field "A" is optional)`}, + {v: new(invalid2), err: `rlp: invalid struct tag "optional" for rlp.invalid2.T (also has "tail" tag)`}, + {v: new(invalid3), err: `rlp: invalid struct tag "tail" for rlp.invalid3.T (also has "optional" tag)`}, + } + for _, test := range tests { + err := DecodeBytes(unhex("C20102"), test.v) + if err == nil { + t.Errorf("no error for %T", test.v) + } else if err.Error() != test.err { + t.Errorf("wrong error for %T: %v", test.v, err.Error()) + } + } +} + func ExampleDecode() { input, _ := hex.DecodeString("C90A1486666F6F626172") type example struct { - A, B uint - private uint // private fields are ignored - String string + A, B uint + String string } var s example @@ -740,7 +1061,7 @@ func ExampleDecode() { fmt.Printf("Decoded value: %#v\n", s) } // Output: - // Decoded value: rlp.example{A:0xa, B:0x14, private:0x0, String:"foobar"} + // Decoded value: rlp.example{A:0xa, B:0x14, String:"foobar"} } func ExampleDecode_structTagNil() { @@ -800,7 +1121,7 @@ func ExampleStream() { // [102 111 111 98 97 114] } -func BenchmarkDecode(b *testing.B) { +func BenchmarkDecodeUints(b *testing.B) { enc := encodeTestSlice(90000) b.SetBytes(int64(len(enc))) b.ReportAllocs() @@ -815,7 +1136,7 @@ func BenchmarkDecode(b *testing.B) { } } -func BenchmarkDecodeIntSliceReuse(b *testing.B) { +func BenchmarkDecodeUintsReused(b *testing.B) { enc := encodeTestSlice(100000) b.SetBytes(int64(len(enc))) b.ReportAllocs() @@ -830,6 +1151,44 @@ func BenchmarkDecodeIntSliceReuse(b *testing.B) { } } +func BenchmarkDecodeByteArrayStruct(b *testing.B) { + enc, err := EncodeToBytes(&byteArrayStruct{}) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(enc))) + b.ReportAllocs() + b.ResetTimer() + + var out byteArrayStruct + for i := 0; i < b.N; i++ { + if err := DecodeBytes(enc, &out); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkDecodeBigInts(b *testing.B) { + ints := make([]*big.Int, 200) + for i := range ints { + ints[i] = math.BigPow(2, int64(i)) + } + enc, err := EncodeToBytes(ints) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(enc))) + b.ReportAllocs() + b.ResetTimer() + + var out []*big.Int + for i := 0; i < b.N; i++ { + if err := DecodeBytes(enc, &out); err != nil { + b.Fatal(err) + } + } +} + func encodeTestSlice(n uint) []byte { s := make([]uint, n) for i := uint(0); i < n; i++ { @@ -843,7 +1202,7 @@ func encodeTestSlice(n uint) []byte { } func unhex(str string) []byte { - b, err := hex.DecodeString(strings.Replace(str, " ", "", -1)) + b, err := hex.DecodeString(strings.ReplaceAll(str, " ", "")) if err != nil { panic(fmt.Sprintf("invalid hex string: %q", str)) } diff --git a/rlp/doc.go b/rlp/doc.go index b3a81fe2..e4404c97 100644 --- a/rlp/doc.go +++ b/rlp/doc.go @@ -17,17 +17,145 @@ /* 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 +element 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 + +As with other encoding packages, the "-" tag ignores fields. + + type StructWithIgnoredField struct{ + Ignored uint `rlp:"-"` + Field uint + } + +Go struct values encode/decode as RLP lists. There are two ways of influencing the mapping +of fields to list elements. The "tail" tag, which may only be used on the last exported +struct field, allows slurping up any excess list elements into a slice. + + type StructWithTail struct{ + Field uint + Tail []string `rlp:"tail"` + } + +The "optional" tag says that the field may be omitted if it is zero-valued. If this tag is +used on a struct field, all subsequent public fields must also be declared optional. + +When encoding a struct with optional fields, the output RLP list contains all values up to +the last non-zero optional field. + +When decoding into a struct, optional fields may be omitted from the end of the input +list. For the example below, this means input lists of one, two, or three elements are +accepted. + + type StructWithOptionalFields struct{ + Required uint + Optional1 uint `rlp:"optional"` + Optional2 uint `rlp:"optional"` + } + +The "nil", "nilList" and "nilString" tags apply to pointer-typed fields only, and change +the decoding rules for the field type. For regular pointer fields without the "nil" tag, +input values must always match the required input length exactly and the decoder does not +produce nil values. When the "nil" tag is set, input values of size zero decode as a nil +pointer. This is especially useful for recursive types. + + type StructWithNilField struct { + Field *[3]byte `rlp:"nil"` + } + +In the example above, Field allows two possible input sizes. For input 0xC180 (a list +containing an empty string) Field is set to nil after decoding. For input 0xC483000000 (a +list containing a 3-byte string), Field is set to a non-nil array pointer. + +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 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 empty RLP value kind +defined by the tag. */ package rlp diff --git a/rlp/encbuffer.go b/rlp/encbuffer.go new file mode 100644 index 00000000..687949c0 --- /dev/null +++ b/rlp/encbuffer.go @@ -0,0 +1,398 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlp + +import ( + "io" + "math/big" + "reflect" + "sync" +) + +type encBuffer struct { + str []byte // string data, contains everything except list headers + lheads []listhead // all list headers + lhsize int // sum of sizes of all encoded list headers + sizebuf [9]byte // auxiliary buffer for uint encoding +} + +// The global encBuffer pool. +var encBufferPool = sync.Pool{ + New: func() interface{} { return new(encBuffer) }, +} + +func getEncBuffer() *encBuffer { + buf := encBufferPool.Get().(*encBuffer) + buf.reset() + return buf +} + +func (buf *encBuffer) reset() { + buf.lhsize = 0 + buf.str = buf.str[:0] + buf.lheads = buf.lheads[:0] +} + +// size returns the length of the encoded data. +func (buf *encBuffer) size() int { + return len(buf.str) + buf.lhsize +} + +// makeBytes creates the encoder output. +func (w *encBuffer) makeBytes() []byte { + out := make([]byte, w.size()) + w.copyTo(out) + return out +} + +func (w *encBuffer) copyTo(dst []byte) { + strpos := 0 + pos := 0 + for _, head := range w.lheads { + // write string data before header + n := copy(dst[pos:], w.str[strpos:head.offset]) + pos += n + strpos += n + // write the header + enc := head.encode(dst[pos:]) + pos += len(enc) + } + // copy string data after the last list header + copy(dst[pos:], w.str[strpos:]) +} + +// writeTo writes the encoder output to w. +func (buf *encBuffer) writeTo(w io.Writer) (err error) { + strpos := 0 + for _, head := range buf.lheads { + // write string data before header + if head.offset-strpos > 0 { + n, err := w.Write(buf.str[strpos:head.offset]) + strpos += n + if err != nil { + return err + } + } + // write the header + enc := head.encode(buf.sizebuf[:]) + if _, err = w.Write(enc); err != nil { + return err + } + } + if strpos < len(buf.str) { + // write string data after the last list header + _, err = w.Write(buf.str[strpos:]) + } + return err +} + +// Write implements io.Writer and appends b directly to the output. +func (buf *encBuffer) Write(b []byte) (int, error) { + buf.str = append(buf.str, b...) + return len(b), nil +} + +// writeBool writes b as the integer 0 (false) or 1 (true). +func (buf *encBuffer) writeBool(b bool) { + if b { + buf.str = append(buf.str, 0x01) + } else { + buf.str = append(buf.str, 0x80) + } +} + +func (buf *encBuffer) writeUint64(i uint64) { + if i == 0 { + buf.str = append(buf.str, 0x80) + } else if i < 128 { + // fits single byte + buf.str = append(buf.str, byte(i)) + } else { + s := putint(buf.sizebuf[1:], i) + buf.sizebuf[0] = 0x80 + byte(s) + buf.str = append(buf.str, buf.sizebuf[:s+1]...) + } +} + +func (buf *encBuffer) writeBytes(b []byte) { + if len(b) == 1 && b[0] <= 0x7F { + // fits single byte, no string header + buf.str = append(buf.str, b[0]) + } else { + buf.encodeStringHeader(len(b)) + buf.str = append(buf.str, b...) + } +} + +func (buf *encBuffer) writeString(s string) { + buf.writeBytes([]byte(s)) +} + +// wordBytes is the number of bytes in a big.Word +const wordBytes = (32 << (uint64(^big.Word(0)) >> 63)) / 8 + +// writeBigInt writes i as an integer. +func (w *encBuffer) writeBigInt(i *big.Int) { + bitlen := i.BitLen() + if bitlen <= 64 { + w.writeUint64(i.Uint64()) + return + } + // Integer is larger than 64 bits, encode from i.Bits(). + // The minimal byte length is bitlen rounded up to the next + // multiple of 8, divided by 8. + length := ((bitlen + 7) & -8) >> 3 + w.encodeStringHeader(length) + w.str = append(w.str, make([]byte, length)...) + index := length + buf := w.str[len(w.str)-length:] + for _, d := range i.Bits() { + for j := 0; j < wordBytes && index > 0; j++ { + index-- + buf[index] = byte(d) + d >>= 8 + } + } +} + +// list adds a new list header to the header stack. It returns the index of the header. +// Call listEnd with this index after encoding the content of the list. +func (buf *encBuffer) list() int { + buf.lheads = append(buf.lheads, listhead{offset: len(buf.str), size: buf.lhsize}) + return len(buf.lheads) - 1 +} + +func (buf *encBuffer) listEnd(index int) { + lh := &buf.lheads[index] + lh.size = buf.size() - lh.offset - lh.size + if lh.size < 56 { + buf.lhsize++ // length encoded into kind tag + } else { + buf.lhsize += 1 + intsize(uint64(lh.size)) + } +} + +func (buf *encBuffer) encode(val interface{}) error { + rval := reflect.ValueOf(val) + writer, err := cachedWriter(rval.Type()) + if err != nil { + return err + } + return writer(rval, buf) +} + +func (buf *encBuffer) encodeStringHeader(size int) { + if size < 56 { + buf.str = append(buf.str, 0x80+byte(size)) + } else { + sizesize := putint(buf.sizebuf[1:], uint64(size)) + buf.sizebuf[0] = 0xB7 + byte(sizesize) + buf.str = append(buf.str, buf.sizebuf[:sizesize+1]...) + } +} + +// encReader is the io.Reader returned by EncodeToReader. +// It releases its encbuf at EOF. +type encReader struct { + buf *encBuffer // the buffer we're reading from. this is nil when we're at EOF. + lhpos int // index of list header that we're reading + strpos int // current position in string buffer + piece []byte // next piece to be read +} + +func (r *encReader) Read(b []byte) (n int, err error) { + for { + if r.piece = r.next(); r.piece == nil { + // Put the encode buffer back into the pool at EOF when it + // is first encountered. Subsequent calls still return EOF + // as the error but the buffer is no longer valid. + if r.buf != nil { + encBufferPool.Put(r.buf) + r.buf = nil + } + return n, io.EOF + } + nn := copy(b[n:], r.piece) + n += nn + if nn < len(r.piece) { + // piece didn't fit, see you next time. + r.piece = r.piece[nn:] + return n, nil + } + r.piece = nil + } +} + +// next returns the next piece of data to be read. +// it returns nil at EOF. +func (r *encReader) next() []byte { + switch { + case r.buf == nil: + return nil + + case r.piece != nil: + // There is still data available for reading. + return r.piece + + case r.lhpos < len(r.buf.lheads): + // We're before the last list header. + head := r.buf.lheads[r.lhpos] + sizebefore := head.offset - r.strpos + if sizebefore > 0 { + // String data before header. + p := r.buf.str[r.strpos:head.offset] + r.strpos += sizebefore + return p + } + r.lhpos++ + return head.encode(r.buf.sizebuf[:]) + + case r.strpos < len(r.buf.str): + // String data at the end, after all list headers. + p := r.buf.str[r.strpos:] + r.strpos = len(r.buf.str) + return p + + default: + return nil + } +} + +func encBufferFromWriter(w io.Writer) *encBuffer { + switch w := w.(type) { + case EncoderBuffer: + return w.buf + case *EncoderBuffer: + return w.buf + case *encBuffer: + return w + default: + return nil + } +} + +// EncoderBuffer is a buffer for incremental encoding. +// +// The zero value is NOT ready for use. To get a usable buffer, +// create it using NewEncoderBuffer or call Reset. +type EncoderBuffer struct { + buf *encBuffer + dst io.Writer + + ownBuffer bool +} + +// NewEncoderBuffer creates an encoder buffer. +func NewEncoderBuffer(dst io.Writer) EncoderBuffer { + var w EncoderBuffer + w.Reset(dst) + return w +} + +// Reset truncates the buffer and sets the output destination. +func (w *EncoderBuffer) Reset(dst io.Writer) { + if w.buf != nil && !w.ownBuffer { + panic("can't Reset derived EncoderBuffer") + } + + // If the destination writer has an *encBuffer, use it. + // Note that w.ownBuffer is left false here. + if dst != nil { + if outer := encBufferFromWriter(dst); outer != nil { + *w = EncoderBuffer{outer, nil, false} + return + } + } + + // Get a fresh buffer. + if w.buf == nil { + w.buf = encBufferPool.Get().(*encBuffer) + w.ownBuffer = true + } + w.buf.reset() + w.dst = dst +} + +// Flush writes encoded RLP data to the output writer. This can only be called once. +// If you want to re-use the buffer after Flush, you must call Reset. +func (w *EncoderBuffer) Flush() error { + var err error + if w.dst != nil { + err = w.buf.writeTo(w.dst) + } + // Release the internal buffer. + if w.ownBuffer { + encBufferPool.Put(w.buf) + } + *w = EncoderBuffer{} + return err +} + +// ToBytes returns the encoded bytes. +func (w *EncoderBuffer) ToBytes() []byte { + return w.buf.makeBytes() +} + +// AppendToBytes appends the encoded bytes to dst. +func (w *EncoderBuffer) AppendToBytes(dst []byte) []byte { + size := w.buf.size() + out := append(dst, make([]byte, size)...) + w.buf.copyTo(out[len(dst):]) + return out +} + +// Write appends b directly to the encoder output. +func (w EncoderBuffer) Write(b []byte) (int, error) { + return w.buf.Write(b) +} + +// WriteBool writes b as the integer 0 (false) or 1 (true). +func (w EncoderBuffer) WriteBool(b bool) { + w.buf.writeBool(b) +} + +// WriteUint64 encodes an unsigned integer. +func (w EncoderBuffer) WriteUint64(i uint64) { + w.buf.writeUint64(i) +} + +// WriteBigInt encodes a big.Int as an RLP string. +// Note: Unlike with Encode, the sign of i is ignored. +func (w EncoderBuffer) WriteBigInt(i *big.Int) { + w.buf.writeBigInt(i) +} + +// WriteBytes encodes b as an RLP string. +func (w EncoderBuffer) WriteBytes(b []byte) { + w.buf.writeBytes(b) +} + +// WriteBytes encodes s as an RLP string. +func (w EncoderBuffer) WriteString(s string) { + w.buf.writeString(s) +} + +// List starts a list. It returns an internal index. Call EndList with +// this index after encoding the content to finish the list. +func (w EncoderBuffer) List() int { + return w.buf.list() +} + +// ListEnd finishes the given list. +func (w EncoderBuffer) ListEnd(index int) { + w.buf.listEnd(index) +} diff --git a/core/types/derive_sha.go b/rlp/encbuffer_example_test.go similarity index 61% rename from core/types/derive_sha.go rename to rlp/encbuffer_example_test.go index 1e0c624b..ee15d82a 100644 --- a/core/types/derive_sha.go +++ b/rlp/encbuffer_example_test.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2022 The go-ethereum 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,32 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package types +package rlp_test import ( "bytes" + "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/trie" + "github.com/ethereum/go-ethereum/rlp" ) -type DerivableList interface { - Len() int - GetRlp(i int) []byte -} +func ExampleEncoderBuffer() { + var w bytes.Buffer + + // Encode [4, [5, 6]] to w. + buf := rlp.NewEncoderBuffer(&w) + l1 := buf.List() + buf.WriteUint64(4) + l2 := buf.List() + buf.WriteUint64(5) + buf.WriteUint64(6) + buf.ListEnd(l2) + buf.ListEnd(l1) -func DeriveSha(list DerivableList) common.Hash { - keybuf := new(bytes.Buffer) - trie := new(trie.Trie) - for i := 0; i < list.Len(); i++ { - keybuf.Reset() - rlp.Encode(keybuf, uint(i)) - trie.Update(keybuf.Bytes(), list.GetRlp(i)) + if err := buf.Flush(); err != nil { + panic(err) } - return trie.Hash() + fmt.Printf("%X\n", w.Bytes()) + // Output: + // C404C20506 } diff --git a/rlp/encode.go b/rlp/encode.go index f255c38a..b96505f5 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -17,11 +17,13 @@ package rlp import ( + "errors" "fmt" "io" "math/big" "reflect" - "sync" + + "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct" ) var ( @@ -31,6 +33,8 @@ var ( EmptyList = []byte{0xC0} ) +var ErrNegativeBigInt = errors.New("rlp: cannot encode negative big.Int") + // Encoder is implemented by types that require custom // encoding rules or want to encode private fields. type Encoder interface { @@ -49,61 +53,31 @@ 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. -// -// Boolean values are encoded as unsigned integers zero (false) and one (true). -// -// An interface value encodes as the value contained in the interface. -// -// Signed integers are not supported, nor are 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. - // Avoid copying by writing to the outer encbuf directly. - return outer.encode(val) + // Optimization: reuse *encBuffer when called by EncodeRLP. + if buf := encBufferFromWriter(w); buf != nil { + return buf.encode(val) } - eb := encbufPool.Get().(*encbuf) - defer encbufPool.Put(eb) - eb.reset() - if err := eb.encode(val); err != nil { + + buf := getEncBuffer() + defer encBufferPool.Put(buf) + if err := buf.encode(val); err != nil { return err } - return eb.toWriter(w) + return buf.writeTo(w) } // 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) - eb.reset() - if err := eb.encode(val); err != nil { + buf := getEncBuffer() + defer encBufferPool.Put(buf) + + if err := buf.encode(val); err != nil { return nil, err } - return eb.toBytes(), nil + return buf.makeBytes(), nil } // EncodeToReader returns a reader from which the RLP encoding of val @@ -112,19 +86,15 @@ func EncodeToBytes(val interface{}) ([]byte, error) { // // Please see the documentation of Encode for the encoding rules. func EncodeToReader(val interface{}) (size int, r io.Reader, err error) { - eb := encbufPool.Get().(*encbuf) - eb.reset() - if err := eb.encode(val); err != nil { + buf := getEncBuffer() + if err := buf.encode(val); err != nil { + encBufferPool.Put(buf) return 0, nil, err } - return eb.size(), &encReader{buf: eb}, nil -} - -type encbuf struct { - str []byte // string data, contains everything except list headers - lheads []*listhead // all list headers - lhsize int // sum of sizes of all encoded list headers - sizebuf []byte // 9-byte auxiliary buffer for uint encoding + // Note: can't put the reader back into the pool here + // because it is held by encReader. The reader puts it + // back when it has been fully consumed. + return buf.size(), &encReader{buf: buf}, nil } type listhead struct { @@ -159,206 +129,22 @@ func puthead(buf []byte, smalltag, largetag byte, size uint64) int { return sizesize + 1 } -// encbufs are pooled. -var encbufPool = sync.Pool{ - New: func() interface{} { return &encbuf{sizebuf: make([]byte, 9)} }, -} - -func (w *encbuf) reset() { - w.lhsize = 0 - if w.str != nil { - w.str = w.str[:0] - } - if w.lheads != nil { - w.lheads = w.lheads[:0] - } -} - -// encbuf implements io.Writer so it can be passed it into EncodeRLP. -func (w *encbuf) Write(b []byte) (int, error) { - w.str = append(w.str, b...) - return len(b), nil -} - -func (w *encbuf) encode(val interface{}) error { - rval := reflect.ValueOf(val) - writer, err := cachedWriter(rval.Type()) - if err != nil { - return err - } - return writer(rval, w) -} - -func (w *encbuf) encodeStringHeader(size int) { - if size < 56 { - w.str = append(w.str, 0x80+byte(size)) - } else { - // TODO: encode to w.str directly - sizesize := putint(w.sizebuf[1:], uint64(size)) - w.sizebuf[0] = 0xB7 + byte(sizesize) - w.str = append(w.str, w.sizebuf[:sizesize+1]...) - } -} - -func (w *encbuf) encodeString(b []byte) { - if len(b) == 1 && b[0] <= 0x7F { - // fits single byte, no string header - w.str = append(w.str, b[0]) - } else { - w.encodeStringHeader(len(b)) - w.str = append(w.str, b...) - } -} - -func (w *encbuf) list() *listhead { - lh := &listhead{offset: len(w.str), size: w.lhsize} - w.lheads = append(w.lheads, lh) - return lh -} - -func (w *encbuf) listEnd(lh *listhead) { - lh.size = w.size() - lh.offset - lh.size - if lh.size < 56 { - w.lhsize++ // length encoded into kind tag - } else { - w.lhsize += 1 + intsize(uint64(lh.size)) - } -} - -func (w *encbuf) size() int { - return len(w.str) + w.lhsize -} - -func (w *encbuf) toBytes() []byte { - out := make([]byte, w.size()) - strpos := 0 - pos := 0 - for _, head := range w.lheads { - // write string data before header - n := copy(out[pos:], w.str[strpos:head.offset]) - pos += n - strpos += n - // write the header - enc := head.encode(out[pos:]) - pos += len(enc) - } - // copy string data after the last list header - copy(out[pos:], w.str[strpos:]) - return out -} - -func (w *encbuf) toWriter(out io.Writer) (err error) { - strpos := 0 - for _, head := range w.lheads { - // write string data before header - if head.offset-strpos > 0 { - n, err := out.Write(w.str[strpos:head.offset]) - strpos += n - if err != nil { - return err - } - } - // write the header - enc := head.encode(w.sizebuf) - if _, err = out.Write(enc); err != nil { - return err - } - } - if strpos < len(w.str) { - // write string data after the last list header - _, err = out.Write(w.str[strpos:]) - } - return err -} - -// encReader is the io.Reader returned by EncodeToReader. -// It releases its encbuf at EOF. -type encReader struct { - buf *encbuf // the buffer we're reading from. this is nil when we're at EOF. - lhpos int // index of list header that we're reading - strpos int // current position in string buffer - piece []byte // next piece to be read -} - -func (r *encReader) Read(b []byte) (n int, err error) { - for { - if r.piece = r.next(); r.piece == nil { - // Put the encode buffer back into the pool at EOF when it - // is first encountered. Subsequent calls still return EOF - // as the error but the buffer is no longer valid. - if r.buf != nil { - encbufPool.Put(r.buf) - r.buf = nil - } - return n, io.EOF - } - nn := copy(b[n:], r.piece) - n += nn - if nn < len(r.piece) { - // piece didn't fit, see you next time. - r.piece = r.piece[nn:] - return n, nil - } - r.piece = nil - } -} - -// next returns the next piece of data to be read. -// it returns nil at EOF. -func (r *encReader) next() []byte { - switch { - case r.buf == nil: - return nil - - case r.piece != nil: - // There is still data available for reading. - return r.piece - - case r.lhpos < len(r.buf.lheads): - // We're before the last list header. - head := r.buf.lheads[r.lhpos] - sizebefore := head.offset - r.strpos - if sizebefore > 0 { - // String data before header. - p := r.buf.str[r.strpos:head.offset] - r.strpos += sizebefore - return p - } - r.lhpos++ - return head.encode(r.buf.sizebuf) - - case r.strpos < len(r.buf.str): - // String data at the end, after all list headers. - p := r.buf.str[r.strpos:] - r.strpos = len(r.buf.str) - return p - - default: - return nil - } -} - -var ( - encoderInterface = reflect.TypeOf(new(Encoder)).Elem() - big0 = big.NewInt(0) -) +var encoderInterface = reflect.TypeOf(new(Encoder)).Elem() // makeWriter creates a writer function for the given type. -func makeWriter(typ reflect.Type, ts tags) (writer, error) { +func makeWriter(typ reflect.Type, ts rlpstruct.Tags) (writer, error) { kind := typ.Kind() 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: @@ -368,97 +154,100 @@ func makeWriter(typ reflect.Type, ts tags) (writer, error) { case kind == reflect.Slice && isByte(typ.Elem()): return writeBytes, nil case kind == reflect.Array && isByte(typ.Elem()): - return writeByteArray, nil + return makeByteArrayWriter(typ), nil case kind == reflect.Slice || kind == reflect.Array: 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) } } -func isByte(typ reflect.Type) bool { - return typ.Kind() == reflect.Uint8 && !typ.Implements(encoderInterface) -} - -func writeRawValue(val reflect.Value, w *encbuf) error { +func writeRawValue(val reflect.Value, w *encBuffer) error { w.str = append(w.str, val.Bytes()...) return nil } -func writeUint(val reflect.Value, w *encbuf) error { - i := val.Uint() - if i == 0 { - w.str = append(w.str, 0x80) - } else if i < 128 { - // fits single byte - w.str = append(w.str, byte(i)) - } else { - // TODO: encode int to w.str directly - s := putint(w.sizebuf[1:], i) - w.sizebuf[0] = 0x80 + byte(s) - w.str = append(w.str, w.sizebuf[:s+1]...) - } +func writeUint(val reflect.Value, w *encBuffer) error { + w.writeUint64(val.Uint()) return nil } -func writeBool(val reflect.Value, w *encbuf) error { - if val.Bool() { - w.str = append(w.str, 0x01) - } else { - w.str = append(w.str, 0x80) - } +func writeBool(val reflect.Value, w *encBuffer) error { + w.writeBool(val.Bool()) return nil } -func writeBigIntPtr(val reflect.Value, w *encbuf) error { +func writeBigIntPtr(val reflect.Value, w *encBuffer) error { ptr := val.Interface().(*big.Int) if ptr == nil { w.str = append(w.str, 0x80) return nil } - return writeBigInt(ptr, w) + if ptr.Sign() == -1 { + return ErrNegativeBigInt + } + w.writeBigInt(ptr) + return nil } -func writeBigIntNoPtr(val reflect.Value, w *encbuf) error { +func writeBigIntNoPtr(val reflect.Value, w *encBuffer) error { i := val.Interface().(big.Int) - return writeBigInt(&i, w) + if i.Sign() == -1 { + return ErrNegativeBigInt + } + w.writeBigInt(&i) + return nil } -func writeBigInt(i *big.Int, w *encbuf) error { - if cmp := i.Cmp(big0); cmp == -1 { - return fmt.Errorf("rlp: cannot encode negative *big.Int") - } else if cmp == 0 { - w.str = append(w.str, 0x80) - } else { - w.encodeString(i.Bytes()) - } +func writeBytes(val reflect.Value, w *encBuffer) error { + w.writeBytes(val.Bytes()) return nil } -func writeBytes(val reflect.Value, w *encbuf) error { - w.encodeString(val.Bytes()) +func makeByteArrayWriter(typ reflect.Type) writer { + switch typ.Len() { + case 0: + return writeLengthZeroByteArray + case 1: + return writeLengthOneByteArray + default: + length := typ.Len() + return func(val reflect.Value, w *encBuffer) error { + if !val.CanAddr() { + // Getting the byte slice of val requires it to be addressable. Make it + // addressable by copying. + copy := reflect.New(val.Type()).Elem() + copy.Set(val) + val = copy + } + slice := byteArrayBytes(val, length) + w.encodeStringHeader(len(slice)) + w.str = append(w.str, slice...) + return nil + } + } +} + +func writeLengthZeroByteArray(val reflect.Value, w *encBuffer) error { + w.str = append(w.str, 0x80) return nil } -func writeByteArray(val reflect.Value, w *encbuf) error { - if !val.CanAddr() { - // Slice requires the value to be addressable. - // Make it addressable by copying. - copy := reflect.New(val.Type()).Elem() - copy.Set(val) - val = copy +func writeLengthOneByteArray(val reflect.Value, w *encBuffer) error { + b := byte(val.Index(0).Uint()) + if b <= 0x7f { + w.str = append(w.str, b) + } else { + w.str = append(w.str, 0x81, b) } - size := val.Len() - slice := val.Slice(0, size).Bytes() - w.encodeString(slice) return nil } -func writeString(val reflect.Value, w *encbuf) error { +func writeString(val reflect.Value, w *encBuffer) error { s := val.String() if len(s) == 1 && s[0] <= 0x7f { // fits single byte, no string header @@ -470,27 +259,7 @@ 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 { +func writeInterface(val reflect.Value, w *encBuffer) error { if val.IsNil() { // Write empty list. This is consistent with the previous RLP // encoder that we had and should therefore avoid any @@ -506,24 +275,44 @@ func writeInterface(val reflect.Value, w *encbuf) error { return writer(eval, w) } -func makeSliceWriter(typ reflect.Type, ts tags) (writer, error) { - etypeinfo := cachedTypeInfo1(typ.Elem(), tags{}) +func makeSliceWriter(typ reflect.Type, ts rlpstruct.Tags) (writer, error) { + etypeinfo := theTC.infoWhileGenerating(typ.Elem(), rlpstruct.Tags{}) if etypeinfo.writerErr != nil { return nil, etypeinfo.writerErr } - writer := func(val reflect.Value, w *encbuf) error { - if !ts.tail { - defer w.listEnd(w.list()) + + var wfn writer + if ts.Tail { + // This is for struct tail slices. + // w.list is not called for them. + wfn = func(val reflect.Value, w *encBuffer) error { + vlen := val.Len() + for i := 0; i < vlen; i++ { + if err := etypeinfo.writer(val.Index(i), w); err != nil { + return err + } + } + return nil } - vlen := val.Len() - for i := 0; i < vlen; i++ { - if err := etypeinfo.writer(val.Index(i), w); err != nil { - return err + } else { + // This is for regular slices and arrays. + wfn = func(val reflect.Value, w *encBuffer) error { + vlen := val.Len() + if vlen == 0 { + w.str = append(w.str, 0xC0) + return nil + } + listOffset := w.list() + for i := 0; i < vlen; i++ { + if err := etypeinfo.writer(val.Index(i), w); err != nil { + return err + } } + w.listEnd(listOffset) + return nil } - return nil } - return writer, nil + return wfn, nil } func makeStructWriter(typ reflect.Type) (writer, error) { @@ -531,55 +320,86 @@ func makeStructWriter(typ reflect.Type) (writer, error) { if err != nil { return nil, err } - writer := func(val reflect.Value, w *encbuf) error { - lh := w.list() - for _, f := range fields { - if err := f.info.writer(val.Field(f.index), w); err != nil { - return err + for _, f := range fields { + if f.info.writerErr != nil { + return nil, structFieldError{typ, f.index, f.info.writerErr} + } + } + + var writer writer + firstOptionalField := firstOptionalField(fields) + if firstOptionalField == len(fields) { + // This is the writer function for structs without any optional fields. + writer = func(val reflect.Value, w *encBuffer) error { + lh := w.list() + for _, f := range fields { + if err := f.info.writer(val.Field(f.index), w); err != nil { + return err + } } + w.listEnd(lh) + return nil + } + } else { + // If there are any "optional" fields, the writer needs to perform additional + // checks to determine the output list length. + writer = func(val reflect.Value, w *encBuffer) error { + lastField := len(fields) - 1 + for ; lastField >= firstOptionalField; lastField-- { + if !val.Field(fields[lastField].index).IsZero() { + break + } + } + lh := w.list() + for i := 0; i <= lastField; i++ { + if err := fields[i].info.writer(val.Field(fields[i].index), w); err != nil { + return err + } + } + w.listEnd(lh) + return nil } - w.listEnd(lh) - return nil } return writer, nil } -func makePtrWriter(typ reflect.Type) (writer, error) { - etypeinfo := cachedTypeInfo1(typ.Elem(), tags{}) +func makePtrWriter(typ reflect.Type, ts rlpstruct.Tags) (writer, error) { + nilEncoding := byte(0xC0) + if typeNilKind(typ.Elem(), ts) == String { + nilEncoding = 0x80 + } + + etypeinfo := theTC.infoWhileGenerating(typ.Elem(), rlpstruct.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) + writer := func(val reflect.Value, w *encBuffer) error { + if ev := val.Elem(); ev.IsValid() { + return etypeinfo.writer(ev, w) } + w.str = append(w.str, nilEncoding) + return nil } + return writer, nil +} - writer := func(val reflect.Value, w *encbuf) error { - if val.IsNil() { - return nilfunc(w) +func makeEncoderWriter(typ reflect.Type) writer { + if typ.Implements(encoderInterface) { + return func(val reflect.Value, w *encBuffer) error { + return val.Interface().(Encoder).EncodeRLP(w) } - return etypeinfo.writer(val.Elem(), w) } - return writer, nil + w := func(val reflect.Value, w *encBuffer) 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 6e49b89a..58ddc0d1 100644 --- a/rlp/encode_test.go +++ b/rlp/encode_test.go @@ -21,10 +21,12 @@ import ( "errors" "fmt" "io" - "io/ioutil" "math/big" + "runtime" "sync" "testing" + + "github.com/ethereum/go-ethereum/common/math" ) type testEncoder struct { @@ -33,12 +35,19 @@ 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}) } + w.Write([]byte{0, 1, 0, 1, 0, 1, 0, 1, 0, 1}) + return nil +} + +type testEncoderValueMethod struct{} + +func (e testEncoderValueMethod) EncodeRLP(w io.Writer) error { + w.Write([]byte{0xFA, 0xFE, 0xF0}) return nil } @@ -52,8 +61,8 @@ func (e byteEncoder) EncodeRLP(w io.Writer) error { type undecodableEncoder func() func (f undecodableEncoder) EncodeRLP(w io.Writer) error { - _, err := w.Write(EmptyList) - return err + w.Write([]byte{0xF5, 0xF5, 0xF5}) + return nil } type encodableReader struct { @@ -110,35 +119,71 @@ var encTests = []encTest{ {val: big.NewInt(0xFFFFFFFFFFFF), output: "86FFFFFFFFFFFF"}, {val: big.NewInt(0xFFFFFFFFFFFFFF), output: "87FFFFFFFFFFFFFF"}, { - val: big.NewInt(0).SetBytes(unhex("102030405060708090A0B0C0D0E0F2")), + val: new(big.Int).SetBytes(unhex("102030405060708090A0B0C0D0E0F2")), output: "8F102030405060708090A0B0C0D0E0F2", }, { - val: big.NewInt(0).SetBytes(unhex("0100020003000400050006000700080009000A000B000C000D000E01")), + val: new(big.Int).SetBytes(unhex("0100020003000400050006000700080009000A000B000C000D000E01")), output: "9C0100020003000400050006000700080009000A000B000C000D000E01", }, { - val: big.NewInt(0).SetBytes(unhex("010000000000000000000000000000000000000000000000000000000000000000")), + val: new(big.Int).SetBytes(unhex("010000000000000000000000000000000000000000000000000000000000000000")), output: "A1010000000000000000000000000000000000000000000000000000000000000000", }, + { + val: veryBigInt, + output: "89FFFFFFFFFFFFFFFFFF", + }, + { + val: veryVeryBigInt, + output: "B848FFFFFFFFFFFFFFFFF800000000000000001BFFFFFFFFFFFFFFFFC8000000000000000045FFFFFFFFFFFFFFFFC800000000000000001BFFFFFFFFFFFFFFFFF8000000000000000001", + }, // non-pointer big.Int {val: *big.NewInt(0), output: "80"}, {val: *big.NewInt(0xFFFFFF), output: "83FFFFFF"}, // negative ints are not supported - {val: big.NewInt(-1), error: "rlp: cannot encode negative *big.Int"}, - - // byte slices, strings + {val: big.NewInt(-1), error: "rlp: cannot encode negative big.Int"}, + {val: *big.NewInt(-1), error: "rlp: cannot encode negative big.Int"}, + + // byte arrays + {val: [0]byte{}, output: "80"}, + {val: [1]byte{0}, output: "00"}, + {val: [1]byte{1}, output: "01"}, + {val: [1]byte{0x7F}, output: "7F"}, + {val: [1]byte{0x80}, output: "8180"}, + {val: [1]byte{0xFF}, output: "81FF"}, + {val: [3]byte{1, 2, 3}, output: "83010203"}, + {val: [57]byte{1, 2, 3}, output: "B839010203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, + + // named byte type arrays + {val: [0]namedByteType{}, output: "80"}, + {val: [1]namedByteType{0}, output: "00"}, + {val: [1]namedByteType{1}, output: "01"}, + {val: [1]namedByteType{0x7F}, output: "7F"}, + {val: [1]namedByteType{0x80}, output: "8180"}, + {val: [1]namedByteType{0xFF}, output: "81FF"}, + {val: [3]namedByteType{1, 2, 3}, output: "83010203"}, + {val: [57]namedByteType{1, 2, 3}, output: "B839010203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, + + // byte slices {val: []byte{}, output: "80"}, + {val: []byte{0}, output: "00"}, {val: []byte{0x7E}, output: "7E"}, {val: []byte{0x7F}, output: "7F"}, {val: []byte{0x80}, output: "8180"}, {val: []byte{1, 2, 3}, output: "83010203"}, + // named byte type slices + {val: []namedByteType{}, output: "80"}, + {val: []namedByteType{0}, output: "00"}, + {val: []namedByteType{0x7E}, output: "7E"}, + {val: []namedByteType{0x7F}, output: "7F"}, + {val: []namedByteType{0x80}, output: "8180"}, {val: []namedByteType{1, 2, 3}, output: "83010203"}, - {val: [...]namedByteType{1, 2, 3}, output: "83010203"}, + // strings {val: "", output: "80"}, {val: "\x7E", output: "7E"}, {val: "\x7F", output: "7F"}, @@ -221,11 +266,30 @@ var encTests = []encTest{ {val: simplestruct{A: 3, B: "foo"}, output: "C50383666F6F"}, {val: &recstruct{5, nil}, output: "C205C0"}, {val: &recstruct{5, &recstruct{4, &recstruct{3, nil}}}, output: "C605C404C203C0"}, + {val: &intField{X: 3}, error: "rlp: type int is not RLP-serializable (struct field rlp.intField.X)"}, + + // struct tag "-" + {val: &ignoredField{A: 1, B: 2, C: 3}, output: "C20103"}, + + // struct tag "tail" {val: &tailRaw{A: 1, Tail: []RawValue{unhex("02"), unhex("03")}}, output: "C3010203"}, {val: &tailRaw{A: 1, Tail: []RawValue{unhex("02")}}, output: "C20102"}, {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"}, + + // struct tag "optional" + {val: &optionalFields{}, output: "C180"}, + {val: &optionalFields{A: 1}, output: "C101"}, + {val: &optionalFields{A: 1, B: 2}, output: "C20102"}, + {val: &optionalFields{A: 1, B: 2, C: 3}, output: "C3010203"}, + {val: &optionalFields{A: 1, B: 0, C: 3}, output: "C3018003"}, + {val: &optionalAndTailField{A: 1}, output: "C101"}, + {val: &optionalAndTailField{A: 1, B: 2}, output: "C20102"}, + {val: &optionalAndTailField{A: 1, Tail: []uint{5, 6}}, output: "C401800506"}, + {val: &optionalAndTailField{A: 1, Tail: []uint{5, 6}}, output: "C401800506"}, + {val: &optionalBigIntField{A: 1}, output: "C101"}, + {val: &optionalPtrField{A: 1}, output: "C101"}, + {val: &optionalPtrFieldNil{A: 1}, output: "C101"}, // nil {val: (*uint)(nil), output: "80"}, @@ -239,22 +303,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 the Encoder interface works for unsupported types like func(). - {val: undecodableEncoder(func() {}), output: "C0"}, - // 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"}, } @@ -290,13 +398,28 @@ func TestEncodeToBytes(t *testing.T) { runEncTests(t, EncodeToBytes) } +func TestEncodeAppendToBytes(t *testing.T) { + buffer := make([]byte, 20) + runEncTests(t, func(val interface{}) ([]byte, error) { + w := NewEncoderBuffer(nil) + defer w.Flush() + + err := Encode(w, val) + if err != nil { + return nil, err + } + output := w.AppendToBytes(buffer[:0]) + return output, nil + }) +} + func TestEncodeToReader(t *testing.T) { runEncTests(t, func(val interface{}) ([]byte, error) { _, r, err := EncodeToReader(val) if err != nil { return nil, err } - return ioutil.ReadAll(r) + return io.ReadAll(r) }) } @@ -337,7 +460,7 @@ func TestEncodeToReaderReturnToPool(t *testing.T) { go func() { for i := 0; i < 1000; i++ { _, r, _ := EncodeToReader("foo") - ioutil.ReadAll(r) + io.ReadAll(r) r.Read(buf) r.Read(buf) r.Read(buf) @@ -348,3 +471,115 @@ func TestEncodeToReaderReturnToPool(t *testing.T) { } wg.Wait() } + +var sink interface{} + +func BenchmarkIntsize(b *testing.B) { + for i := 0; i < b.N; i++ { + sink = intsize(0x12345678) + } +} + +func BenchmarkPutint(b *testing.B) { + buf := make([]byte, 8) + for i := 0; i < b.N; i++ { + putint(buf, 0x12345678) + sink = buf + } +} + +func BenchmarkEncodeBigInts(b *testing.B) { + ints := make([]*big.Int, 200) + for i := range ints { + ints[i] = math.BigPow(2, int64(i)) + } + out := bytes.NewBuffer(make([]byte, 0, 4096)) + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + out.Reset() + if err := Encode(out, ints); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkEncodeConcurrentInterface(b *testing.B) { + type struct1 struct { + A string + B *big.Int + C [20]byte + } + value := []interface{}{ + uint(999), + &struct1{A: "hello", B: big.NewInt(0xFFFFFFFF)}, + [10]byte{1, 2, 3, 4, 5, 6}, + []string{"yeah", "yeah", "yeah"}, + } + + var wg sync.WaitGroup + for cpu := 0; cpu < runtime.NumCPU(); cpu++ { + wg.Add(1) + go func() { + defer wg.Done() + + var buffer bytes.Buffer + for i := 0; i < b.N; i++ { + buffer.Reset() + err := Encode(&buffer, value) + if err != nil { + panic(err) + } + } + }() + } + wg.Wait() +} + +type byteArrayStruct struct { + A [20]byte + B [32]byte + C [32]byte +} + +func BenchmarkEncodeByteArrayStruct(b *testing.B) { + var out bytes.Buffer + var value byteArrayStruct + + b.ReportAllocs() + for i := 0; i < b.N; i++ { + out.Reset() + if err := Encode(&out, &value); err != nil { + b.Fatal(err) + } + } +} + +type structSliceElem struct { + X uint64 + Y uint64 + Z uint64 +} + +type structPtrSlice []*structSliceElem + +func BenchmarkEncodeStructPtrSlice(b *testing.B) { + var out bytes.Buffer + var value = structPtrSlice{ + &structSliceElem{1, 1, 1}, + &structSliceElem{2, 2, 2}, + &structSliceElem{3, 3, 3}, + &structSliceElem{5, 5, 5}, + &structSliceElem{6, 6, 6}, + &structSliceElem{7, 7, 7}, + } + + b.ReportAllocs() + for i := 0; i < b.N; i++ { + out.Reset() + if err := Encode(&out, &value); err != nil { + b.Fatal(err) + } + } +} diff --git a/rlp/encoder_example_test.go b/rlp/encoder_example_test.go index 1cffa241..4cd3cb86 100644 --- a/rlp/encoder_example_test.go +++ b/rlp/encoder_example_test.go @@ -14,11 +14,13 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rlp +package rlp_test import ( "fmt" "io" + + "github.com/ethereum/go-ethereum/rlp" ) type MyCoolType struct { @@ -28,27 +30,19 @@ 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 rlp.Encode(w, []uint{x.a, x.b}) } func ExampleEncoder() { var t *MyCoolType // t is nil pointer to MyCoolType - bytes, _ := EncodeToBytes(t) + bytes, _ := rlp.EncodeToBytes(t) fmt.Printf("%v → %X\n", t, bytes) t = &MyCoolType{Name: "foobar", a: 5, b: 6} - bytes, _ = EncodeToBytes(t) + bytes, _ = rlp.EncodeToBytes(t) fmt.Printf("%v → %X\n", t, bytes) // Output: - // → C28080 + // → C0 // &{foobar 5 6} → C20506 } diff --git a/rlp/internal/rlpstruct/rlpstruct.go b/rlp/internal/rlpstruct/rlpstruct.go new file mode 100644 index 00000000..1edead96 --- /dev/null +++ b/rlp/internal/rlpstruct/rlpstruct.go @@ -0,0 +1,213 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package rlpstruct implements struct processing for RLP encoding/decoding. +// +// In particular, this package handles all rules around field filtering, +// struct tags and nil value determination. +package rlpstruct + +import ( + "fmt" + "reflect" + "strings" +) + +// Field represents a struct field. +type Field struct { + Name string + Index int + Exported bool + Type Type + Tag string +} + +// Type represents the attributes of a Go type. +type Type struct { + Name string + Kind reflect.Kind + IsEncoder bool // whether type implements rlp.Encoder + IsDecoder bool // whether type implements rlp.Decoder + Elem *Type // non-nil for Kind values of Ptr, Slice, Array +} + +// defaultNilValue determines whether a nil pointer to t encodes/decodes +// as an empty string or empty list. +func (t Type) DefaultNilValue() NilKind { + k := t.Kind + if isUint(k) || k == reflect.String || k == reflect.Bool || isByteArray(t) { + return NilKindString + } + return NilKindList +} + +// NilKind is the RLP value encoded in place of nil pointers. +type NilKind uint8 + +const ( + NilKindString NilKind = 0x80 + NilKindList NilKind = 0xC0 +) + +// Tags represents struct tags. +type Tags struct { + // rlp:"nil" controls whether empty input results in a nil pointer. + // nilKind is the kind of empty value allowed for the field. + NilKind NilKind + NilOK bool + + // rlp:"optional" allows for a field to be missing in the input list. + // If this is set, all subsequent fields must also be optional. + Optional bool + + // 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 +} + +// TagError is raised for invalid struct tags. +type TagError struct { + StructType string + + // These are set by this package. + Field string + Tag string + Err string +} + +func (e TagError) Error() string { + field := "field " + e.Field + if e.StructType != "" { + field = e.StructType + "." + e.Field + } + return fmt.Sprintf("rlp: invalid struct tag %q for %s (%s)", e.Tag, field, e.Err) +} + +// ProcessFields filters the given struct fields, returning only fields +// that should be considered for encoding/decoding. +func ProcessFields(allFields []Field) ([]Field, []Tags, error) { + lastPublic := lastPublicField(allFields) + + // Gather all exported fields and their tags. + var fields []Field + var tags []Tags + for _, field := range allFields { + if !field.Exported { + continue + } + ts, err := parseTag(field, lastPublic) + if err != nil { + return nil, nil, err + } + if ts.Ignored { + continue + } + fields = append(fields, field) + tags = append(tags, ts) + } + + // Verify optional field consistency. If any optional field exists, + // all fields after it must also be optional. Note: optional + tail + // is supported. + var anyOptional bool + var firstOptionalName string + for i, ts := range tags { + name := fields[i].Name + if ts.Optional || ts.Tail { + if !anyOptional { + firstOptionalName = name + } + anyOptional = true + } else { + if anyOptional { + msg := fmt.Sprintf("must be optional because preceding field %q is optional", firstOptionalName) + return nil, nil, TagError{Field: name, Err: msg} + } + } + } + return fields, tags, nil +} + +func parseTag(field Field, lastPublic int) (Tags, error) { + name := field.Name + tag := reflect.StructTag(field.Tag) + var ts Tags + for _, t := range strings.Split(tag.Get("rlp"), ",") { + switch t = strings.TrimSpace(t); t { + case "": + // empty tag is allowed for some reason + case "-": + ts.Ignored = true + case "nil", "nilString", "nilList": + ts.NilOK = true + if field.Type.Kind != reflect.Ptr { + return ts, TagError{Field: name, Tag: t, Err: "field is not a pointer"} + } + switch t { + case "nil": + ts.NilKind = field.Type.Elem.DefaultNilValue() + case "nilString": + ts.NilKind = NilKindString + case "nilList": + ts.NilKind = NilKindList + } + case "optional": + ts.Optional = true + if ts.Tail { + return ts, TagError{Field: name, Tag: t, Err: `also has "tail" tag`} + } + case "tail": + ts.Tail = true + if field.Index != lastPublic { + return ts, TagError{Field: name, Tag: t, Err: "must be on last field"} + } + if ts.Optional { + return ts, TagError{Field: name, Tag: t, Err: `also has "optional" tag`} + } + if field.Type.Kind != reflect.Slice { + return ts, TagError{Field: name, Tag: t, Err: "field type is not slice"} + } + default: + return ts, TagError{Field: name, Tag: t, Err: "unknown tag"} + } + } + return ts, nil +} + +func lastPublicField(fields []Field) int { + last := 0 + for _, f := range fields { + if f.Exported { + last = f.Index + } + } + return last +} + +func isUint(k reflect.Kind) bool { + return k >= reflect.Uint && k <= reflect.Uintptr +} + +func isByte(typ Type) bool { + return typ.Kind == reflect.Uint8 && !typ.IsEncoder +} + +func isByteArray(typ Type) bool { + return (typ.Kind == reflect.Slice || typ.Kind == reflect.Array) && isByte(*typ.Elem) +} diff --git a/rlp/iterator.go b/rlp/iterator.go new file mode 100644 index 00000000..6be57457 --- /dev/null +++ b/rlp/iterator.go @@ -0,0 +1,60 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlp + +type listIterator struct { + data []byte + next []byte + err error +} + +// NewListIterator creates an iterator for the (list) represented by data +// TODO: Consider removing this implementation, as it is no longer used. +func NewListIterator(data RawValue) (*listIterator, error) { + k, t, c, err := readKind(data) + if err != nil { + return nil, err + } + if k != List { + return nil, ErrExpectedList + } + it := &listIterator{ + data: data[t : t+c], + } + return it, nil +} + +// Next forwards the iterator one step, returns true if it was not at end yet +func (it *listIterator) Next() bool { + if len(it.data) == 0 { + return false + } + _, t, c, err := readKind(it.data) + it.next = it.data[:t+c] + it.data = it.data[t+c:] + it.err = err + return true +} + +// Value returns the current value +func (it *listIterator) Value() []byte { + return it.next +} + +func (it *listIterator) Err() error { + return it.err +} diff --git a/rlp/iterator_test.go b/rlp/iterator_test.go new file mode 100644 index 00000000..a22aaec8 --- /dev/null +++ b/rlp/iterator_test.go @@ -0,0 +1,59 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rlp + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common/hexutil" +) + +// TestIterator tests some basic things about the ListIterator. A more +// comprehensive test can be found in core/rlp_test.go, where we can +// use both types and rlp without dependency cycles +func TestIterator(t *testing.T) { + bodyRlpHex := "0xf902cbf8d6f869800182c35094000000000000000000000000000000000000aaaa808a000000000000000000001ba01025c66fad28b4ce3370222624d952c35529e602af7cbe04f667371f61b0e3b3a00ab8813514d1217059748fd903288ace1b4001a4bc5fbde2790debdc8167de2ff869010182c35094000000000000000000000000000000000000aaaa808a000000000000000000001ca05ac4cf1d19be06f3742c21df6c49a7e929ceb3dbaf6a09f3cfb56ff6828bd9a7a06875970133a35e63ac06d360aa166d228cc013e9b96e0a2cae7f55b22e1ee2e8f901f0f901eda0c75448377c0e426b8017b23c5f77379ecf69abc1d5c224284ad3ba1c46c59adaa00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808080808080a00000000000000000000000000000000000000000000000000000000000000000880000000000000000" + bodyRlp := hexutil.MustDecode(bodyRlpHex) + + it, err := NewListIterator(bodyRlp) + if err != nil { + t.Fatal(err) + } + // Check that txs exist + if !it.Next() { + t.Fatal("expected two elems, got zero") + } + txs := it.Value() + // Check that uncles exist + if !it.Next() { + t.Fatal("expected two elems, got one") + } + txit, err := NewListIterator(txs) + if err != nil { + t.Fatal(err) + } + var i = 0 + for txit.Next() { + if txit.err != nil { + t.Fatal(txit.err) + } + i++ + } + if exp := 2; i != exp { + t.Errorf("count wrong, expected %d got %d", i, exp) + } +} diff --git a/rlp/raw.go b/rlp/raw.go index 2b3f328f..f355efc1 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -34,6 +34,14 @@ func ListSize(contentSize uint64) uint64 { return uint64(headsize(contentSize)) + contentSize } +// IntSize returns the encoded size of the integer x. +func IntSize(x uint64) int { + if x < 0x80 { + return 1 + } + return 1 + intsize(x) +} + // Split returns the content of first RLP value and any // bytes after the value as subslices of b. func Split(b []byte) (k Kind, content, rest []byte, err error) { @@ -57,6 +65,32 @@ func SplitString(b []byte) (content, rest []byte, err error) { return content, rest, nil } +// SplitUint64 decodes an integer at the beginning of b. +// It also returns the remaining data after the integer in 'rest'. +func SplitUint64(b []byte) (x uint64, rest []byte, err error) { + content, rest, err := SplitString(b) + if err != nil { + return 0, b, err + } + switch { + case len(content) == 0: + return 0, rest, nil + case len(content) == 1: + if content[0] == 0 { + return 0, b, ErrCanonInt + } + return uint64(content[0]), rest, nil + case len(content) > 8: + return 0, b, errUintOverflow + default: + x, err = readSize(content, byte(len(content))) + if err != nil { + return 0, b, ErrCanonInt + } + return x, rest, nil + } +} + // SplitList splits b into the content of a list and any remaining // bytes after the list. func SplitList(b []byte) (content, rest []byte, err error) { @@ -154,3 +188,74 @@ func readSize(b []byte, slen byte) (uint64, error) { } return s, nil } + +// AppendUint64 appends the RLP encoding of i to b, and returns the resulting slice. +func AppendUint64(b []byte, i uint64) []byte { + if i == 0 { + return append(b, 0x80) + } else if i < 128 { + return append(b, byte(i)) + } + switch { + case i < (1 << 8): + return append(b, 0x81, byte(i)) + case i < (1 << 16): + return append(b, 0x82, + byte(i>>8), + byte(i), + ) + case i < (1 << 24): + return append(b, 0x83, + byte(i>>16), + byte(i>>8), + byte(i), + ) + case i < (1 << 32): + return append(b, 0x84, + byte(i>>24), + byte(i>>16), + byte(i>>8), + byte(i), + ) + case i < (1 << 40): + return append(b, 0x85, + byte(i>>32), + byte(i>>24), + byte(i>>16), + byte(i>>8), + byte(i), + ) + + case i < (1 << 48): + return append(b, 0x86, + byte(i>>40), + byte(i>>32), + byte(i>>24), + byte(i>>16), + byte(i>>8), + byte(i), + ) + case i < (1 << 56): + return append(b, 0x87, + byte(i>>48), + byte(i>>40), + byte(i>>32), + byte(i>>24), + byte(i>>16), + byte(i>>8), + byte(i), + ) + + default: + return append(b, 0x88, + byte(i>>56), + byte(i>>48), + byte(i>>40), + byte(i>>32), + byte(i>>24), + byte(i>>16), + byte(i>>8), + byte(i), + ) + } +} diff --git a/rlp/raw_test.go b/rlp/raw_test.go index 2aad0421..46adff22 100644 --- a/rlp/raw_test.go +++ b/rlp/raw_test.go @@ -18,9 +18,10 @@ package rlp import ( "bytes" + "errors" "io" - "reflect" "testing" + "testing/quick" ) func TestCountValues(t *testing.T) { @@ -53,7 +54,7 @@ func TestCountValues(t *testing.T) { if count != test.count { t.Errorf("test %d: count mismatch, got %d want %d\ninput: %s", i, count, test.count, test.input) } - if !reflect.DeepEqual(err, test.err) { + if !errors.Is(err, test.err) { t.Errorf("test %d: err mismatch, got %q want %q\ninput: %s", i, err, test.err, test.input) } } @@ -71,6 +72,49 @@ func TestSplitTypes(t *testing.T) { } } +func TestSplitUint64(t *testing.T) { + tests := []struct { + input string + val uint64 + rest string + err error + }{ + {"01", 1, "", nil}, + {"7FFF", 0x7F, "FF", nil}, + {"80FF", 0, "FF", nil}, + {"81FAFF", 0xFA, "FF", nil}, + {"82FAFAFF", 0xFAFA, "FF", nil}, + {"83FAFAFAFF", 0xFAFAFA, "FF", nil}, + {"84FAFAFAFAFF", 0xFAFAFAFA, "FF", nil}, + {"85FAFAFAFAFAFF", 0xFAFAFAFAFA, "FF", nil}, + {"86FAFAFAFAFAFAFF", 0xFAFAFAFAFAFA, "FF", nil}, + {"87FAFAFAFAFAFAFAFF", 0xFAFAFAFAFAFAFA, "FF", nil}, + {"88FAFAFAFAFAFAFAFAFF", 0xFAFAFAFAFAFAFAFA, "FF", nil}, + + // errors + {"", 0, "", io.ErrUnexpectedEOF}, + {"00", 0, "00", ErrCanonInt}, + {"81", 0, "81", ErrValueTooLarge}, + {"8100", 0, "8100", ErrCanonSize}, + {"8200FF", 0, "8200FF", ErrCanonInt}, + {"8103FF", 0, "8103FF", ErrCanonSize}, + {"89FAFAFAFAFAFAFAFAFAFF", 0, "89FAFAFAFAFAFAFAFAFAFF", errUintOverflow}, + } + + for i, test := range tests { + val, rest, err := SplitUint64(unhex(test.input)) + if val != test.val { + t.Errorf("test %d: val mismatch: got %x, want %x (input %q)", i, val, test.val, test.input) + } + if !bytes.Equal(rest, unhex(test.rest)) { + t.Errorf("test %d: rest mismatch: got %x, want %s (input %q)", i, rest, test.rest, test.input) + } + if err != test.err { + t.Errorf("test %d: error mismatch: got %q, want %q", i, err, test.err) + } + } +} + func TestSplit(t *testing.T) { tests := []struct { input string @@ -78,7 +122,9 @@ func TestSplit(t *testing.T) { val, rest string err error }{ + {input: "00FFFF", kind: Byte, val: "00", rest: "FFFF"}, {input: "01FFFF", kind: Byte, val: "01", rest: "FFFF"}, + {input: "7FFFFF", kind: Byte, val: "7F", rest: "FFFF"}, {input: "80FFFF", kind: String, val: "", rest: "FFFF"}, {input: "C3010203", kind: List, val: "010203"}, @@ -194,3 +240,46 @@ func TestReadSize(t *testing.T) { } } } + +func TestAppendUint64(t *testing.T) { + tests := []struct { + input uint64 + slice []byte + output string + }{ + {0, nil, "80"}, + {1, nil, "01"}, + {2, nil, "02"}, + {127, nil, "7F"}, + {128, nil, "8180"}, + {129, nil, "8181"}, + {0xFFFFFF, nil, "83FFFFFF"}, + {127, []byte{1, 2, 3}, "0102037F"}, + {0xFFFFFF, []byte{1, 2, 3}, "01020383FFFFFF"}, + } + + for _, test := range tests { + x := AppendUint64(test.slice, test.input) + if !bytes.Equal(x, unhex(test.output)) { + t.Errorf("AppendUint64(%v, %d): got %x, want %s", test.slice, test.input, x, test.output) + } + + // Check that IntSize returns the appended size. + length := len(x) - len(test.slice) + if s := IntSize(test.input); s != length { + t.Errorf("IntSize(%d): got %d, want %d", test.input, s, length) + } + } +} + +func TestAppendUint64Random(t *testing.T) { + fn := func(i uint64) bool { + enc, _ := EncodeToBytes(i) + encAppend := AppendUint64(nil, i) + return bytes.Equal(enc, encAppend) + } + config := quick.Config{MaxCountScale: 50} + if err := quick.Check(fn, &config); err != nil { + t.Fatal(err) + } +} diff --git a/rlp/rlpgen/gen.go b/rlp/rlpgen/gen.go new file mode 100644 index 00000000..1deb5a93 --- /dev/null +++ b/rlp/rlpgen/gen.go @@ -0,0 +1,751 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "fmt" + "go/format" + "go/types" + "sort" + + "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct" +) + +// buildContext keeps the data needed for make*Op. +type buildContext struct { + topType *types.Named // the type we're creating methods for + + encoderIface *types.Interface + decoderIface *types.Interface + rawValueType *types.Named + + typeToStructCache map[types.Type]*rlpstruct.Type +} + +func newBuildContext(packageRLP *types.Package) *buildContext { + enc := packageRLP.Scope().Lookup("Encoder").Type().Underlying() + dec := packageRLP.Scope().Lookup("Decoder").Type().Underlying() + rawv := packageRLP.Scope().Lookup("RawValue").Type() + return &buildContext{ + typeToStructCache: make(map[types.Type]*rlpstruct.Type), + encoderIface: enc.(*types.Interface), + decoderIface: dec.(*types.Interface), + rawValueType: rawv.(*types.Named), + } +} + +func (bctx *buildContext) isEncoder(typ types.Type) bool { + return types.Implements(typ, bctx.encoderIface) +} + +func (bctx *buildContext) isDecoder(typ types.Type) bool { + return types.Implements(typ, bctx.decoderIface) +} + +// typeToStructType converts typ to rlpstruct.Type. +func (bctx *buildContext) typeToStructType(typ types.Type) *rlpstruct.Type { + if prev := bctx.typeToStructCache[typ]; prev != nil { + return prev // short-circuit for recursive types. + } + + // Resolve named types to their underlying type, but keep the name. + name := types.TypeString(typ, nil) + for { + utype := typ.Underlying() + if utype == typ { + break + } + typ = utype + } + + // Create the type and store it in cache. + t := &rlpstruct.Type{ + Name: name, + Kind: typeReflectKind(typ), + IsEncoder: bctx.isEncoder(typ), + IsDecoder: bctx.isDecoder(typ), + } + bctx.typeToStructCache[typ] = t + + // Assign element type. + switch typ.(type) { + case *types.Array, *types.Slice, *types.Pointer: + etype := typ.(interface{ Elem() types.Type }).Elem() + t.Elem = bctx.typeToStructType(etype) + } + return t +} + +// genContext is passed to the gen* methods of op when generating +// the output code. It tracks packages to be imported by the output +// file and assigns unique names of temporary variables. +type genContext struct { + inPackage *types.Package + imports map[string]struct{} + tempCounter int +} + +func newGenContext(inPackage *types.Package) *genContext { + return &genContext{ + inPackage: inPackage, + imports: make(map[string]struct{}), + } +} + +func (ctx *genContext) temp() string { + v := fmt.Sprintf("_tmp%d", ctx.tempCounter) + ctx.tempCounter++ + return v +} + +func (ctx *genContext) resetTemp() { + ctx.tempCounter = 0 +} + +func (ctx *genContext) addImport(path string) { + if path == ctx.inPackage.Path() { + return // avoid importing the package that we're generating in. + } + // TODO: renaming? + ctx.imports[path] = struct{}{} +} + +// importsList returns all packages that need to be imported. +func (ctx *genContext) importsList() []string { + imp := make([]string, 0, len(ctx.imports)) + for k := range ctx.imports { + imp = append(imp, k) + } + sort.Strings(imp) + return imp +} + +// qualify is the types.Qualifier used for printing types. +func (ctx *genContext) qualify(pkg *types.Package) string { + if pkg.Path() == ctx.inPackage.Path() { + return "" + } + ctx.addImport(pkg.Path()) + // TODO: renaming? + return pkg.Name() +} + +type op interface { + // genWrite creates the encoder. The generated code should write v, + // which is any Go expression, to the rlp.EncoderBuffer 'w'. + genWrite(ctx *genContext, v string) string + + // genDecode creates the decoder. The generated code should read + // a value from the rlp.Stream 'dec' and store it to dst. + genDecode(ctx *genContext) (string, string) +} + +// basicOp handles basic types bool, uint*, string. +type basicOp struct { + typ types.Type + writeMethod string // calle write the value + writeArgType types.Type // parameter type of writeMethod + decMethod string + decResultType types.Type // return type of decMethod + decUseBitSize bool // if true, result bit size is appended to decMethod +} + +func (*buildContext) makeBasicOp(typ *types.Basic) (op, error) { + op := basicOp{typ: typ} + kind := typ.Kind() + switch { + case kind == types.Bool: + op.writeMethod = "WriteBool" + op.writeArgType = types.Typ[types.Bool] + op.decMethod = "Bool" + op.decResultType = types.Typ[types.Bool] + case kind >= types.Uint8 && kind <= types.Uint64: + op.writeMethod = "WriteUint64" + op.writeArgType = types.Typ[types.Uint64] + op.decMethod = "Uint" + op.decResultType = typ + op.decUseBitSize = true + case kind == types.String: + op.writeMethod = "WriteString" + op.writeArgType = types.Typ[types.String] + op.decMethod = "String" + op.decResultType = types.Typ[types.String] + default: + return nil, fmt.Errorf("unhandled basic type: %v", typ) + } + return op, nil +} + +func (*buildContext) makeByteSliceOp(typ *types.Slice) op { + if !isByte(typ.Elem()) { + panic("non-byte slice type in makeByteSliceOp") + } + bslice := types.NewSlice(types.Typ[types.Uint8]) + return basicOp{ + typ: typ, + writeMethod: "WriteBytes", + writeArgType: bslice, + decMethod: "Bytes", + decResultType: bslice, + } +} + +func (bctx *buildContext) makeRawValueOp() op { + bslice := types.NewSlice(types.Typ[types.Uint8]) + return basicOp{ + typ: bctx.rawValueType, + writeMethod: "Write", + writeArgType: bslice, + decMethod: "Raw", + decResultType: bslice, + } +} + +func (op basicOp) writeNeedsConversion() bool { + return !types.AssignableTo(op.typ, op.writeArgType) +} + +func (op basicOp) decodeNeedsConversion() bool { + return !types.AssignableTo(op.decResultType, op.typ) +} + +func (op basicOp) genWrite(ctx *genContext, v string) string { + if op.writeNeedsConversion() { + v = fmt.Sprintf("%s(%s)", op.writeArgType, v) + } + return fmt.Sprintf("w.%s(%s)\n", op.writeMethod, v) +} + +func (op basicOp) genDecode(ctx *genContext) (string, string) { + var ( + resultV = ctx.temp() + result = resultV + method = op.decMethod + ) + if op.decUseBitSize { + // Note: For now, this only works for platform-independent integer + // sizes. makeBasicOp forbids the platform-dependent types. + var sizes types.StdSizes + method = fmt.Sprintf("%s%d", op.decMethod, sizes.Sizeof(op.typ)*8) + } + + // Call the decoder method. + var b bytes.Buffer + fmt.Fprintf(&b, "%s, err := dec.%s()\n", resultV, method) + fmt.Fprintf(&b, "if err != nil { return err }\n") + if op.decodeNeedsConversion() { + conv := ctx.temp() + fmt.Fprintf(&b, "%s := %s(%s)\n", conv, types.TypeString(op.typ, ctx.qualify), resultV) + result = conv + } + return result, b.String() +} + +// byteArrayOp handles [...]byte. +type byteArrayOp struct { + typ types.Type + name types.Type // name != typ for named byte array types (e.g. common.Address) +} + +func (bctx *buildContext) makeByteArrayOp(name *types.Named, typ *types.Array) byteArrayOp { + nt := types.Type(name) + if name == nil { + nt = typ + } + return byteArrayOp{typ, nt} +} + +func (op byteArrayOp) genWrite(ctx *genContext, v string) string { + return fmt.Sprintf("w.WriteBytes(%s[:])\n", v) +} + +func (op byteArrayOp) genDecode(ctx *genContext) (string, string) { + var resultV = ctx.temp() + + var b bytes.Buffer + fmt.Fprintf(&b, "var %s %s\n", resultV, types.TypeString(op.name, ctx.qualify)) + fmt.Fprintf(&b, "if err := dec.ReadBytes(%s[:]); err != nil { return err }\n", resultV) + return resultV, b.String() +} + +// bigIntNoPtrOp handles non-pointer big.Int. +// This exists because big.Int has it's own decoder operation on rlp.Stream, +// but the decode method returns *big.Int, so it needs to be dereferenced. +type bigIntOp struct { + pointer bool +} + +func (op bigIntOp) genWrite(ctx *genContext, v string) string { + var b bytes.Buffer + + fmt.Fprintf(&b, "if %s.Sign() == -1 {\n", v) + fmt.Fprintf(&b, " return rlp.ErrNegativeBigInt\n") + fmt.Fprintf(&b, "}\n") + dst := v + if !op.pointer { + dst = "&" + v + } + fmt.Fprintf(&b, "w.WriteBigInt(%s)\n", dst) + + // Wrap with nil check. + if op.pointer { + code := b.String() + b.Reset() + fmt.Fprintf(&b, "if %s == nil {\n", v) + fmt.Fprintf(&b, " w.Write(rlp.EmptyString)") + fmt.Fprintf(&b, "} else {\n") + fmt.Fprint(&b, code) + fmt.Fprintf(&b, "}\n") + } + + return b.String() +} + +func (op bigIntOp) genDecode(ctx *genContext) (string, string) { + var resultV = ctx.temp() + + var b bytes.Buffer + fmt.Fprintf(&b, "%s, err := dec.BigInt()\n", resultV) + fmt.Fprintf(&b, "if err != nil { return err }\n") + + result := resultV + if !op.pointer { + result = "(*" + resultV + ")" + } + return result, b.String() +} + +// encoderDecoderOp handles rlp.Encoder and rlp.Decoder. +// In order to be used with this, the type must implement both interfaces. +// This restriction may be lifted in the future by creating separate ops for +// encoding and decoding. +type encoderDecoderOp struct { + typ types.Type +} + +func (op encoderDecoderOp) genWrite(ctx *genContext, v string) string { + return fmt.Sprintf("if err := %s.EncodeRLP(w); err != nil { return err }\n", v) +} + +func (op encoderDecoderOp) genDecode(ctx *genContext) (string, string) { + // DecodeRLP must have pointer receiver, and this is verified in makeOp. + etyp := op.typ.(*types.Pointer).Elem() + var resultV = ctx.temp() + + var b bytes.Buffer + fmt.Fprintf(&b, "%s := new(%s)\n", resultV, types.TypeString(etyp, ctx.qualify)) + fmt.Fprintf(&b, "if err := %s.DecodeRLP(dec); err != nil { return err }\n", resultV) + return resultV, b.String() +} + +// ptrOp handles pointer types. +type ptrOp struct { + elemTyp types.Type + elem op + nilOK bool + nilValue rlpstruct.NilKind +} + +func (bctx *buildContext) makePtrOp(elemTyp types.Type, tags rlpstruct.Tags) (op, error) { + elemOp, err := bctx.makeOp(nil, elemTyp, rlpstruct.Tags{}) + if err != nil { + return nil, err + } + op := ptrOp{elemTyp: elemTyp, elem: elemOp} + + // Determine nil value. + if tags.NilOK { + op.nilOK = true + op.nilValue = tags.NilKind + } else { + styp := bctx.typeToStructType(elemTyp) + op.nilValue = styp.DefaultNilValue() + } + return op, nil +} + +func (op ptrOp) genWrite(ctx *genContext, v string) string { + // Note: in writer functions, accesses to v are read-only, i.e. v is any Go + // expression. To make all accesses work through the pointer, we substitute + // v with (*v). This is required for most accesses including `v`, `call(v)`, + // and `v[index]` on slices. + // + // For `v.field` and `v[:]` on arrays, the dereference operation is not required. + var vv string + _, isStruct := op.elem.(structOp) + _, isByteArray := op.elem.(byteArrayOp) + if isStruct || isByteArray { + vv = v + } else { + vv = fmt.Sprintf("(*%s)", v) + } + + var b bytes.Buffer + fmt.Fprintf(&b, "if %s == nil {\n", v) + fmt.Fprintf(&b, " w.Write([]byte{0x%X})\n", op.nilValue) + fmt.Fprintf(&b, "} else {\n") + fmt.Fprintf(&b, " %s", op.elem.genWrite(ctx, vv)) + fmt.Fprintf(&b, "}\n") + return b.String() +} + +func (op ptrOp) genDecode(ctx *genContext) (string, string) { + result, code := op.elem.genDecode(ctx) + if !op.nilOK { + // If nil pointers are not allowed, we can just decode the element. + return "&" + result, code + } + + // nil is allowed, so check the kind and size first. + // If size is zero and kind matches the nilKind of the type, + // the value decodes as a nil pointer. + var ( + resultV = ctx.temp() + kindV = ctx.temp() + sizeV = ctx.temp() + wantKind string + ) + if op.nilValue == rlpstruct.NilKindList { + wantKind = "rlp.List" + } else { + wantKind = "rlp.String" + } + var b bytes.Buffer + fmt.Fprintf(&b, "var %s %s\n", resultV, types.TypeString(types.NewPointer(op.elemTyp), ctx.qualify)) + fmt.Fprintf(&b, "if %s, %s, err := dec.Kind(); err != nil {\n", kindV, sizeV) + fmt.Fprintf(&b, " return err\n") + fmt.Fprintf(&b, "} else if %s != 0 || %s != %s {\n", sizeV, kindV, wantKind) + fmt.Fprint(&b, code) + fmt.Fprintf(&b, " %s = &%s\n", resultV, result) + fmt.Fprintf(&b, "}\n") + return resultV, b.String() +} + +// structOp handles struct types. +type structOp struct { + named *types.Named + typ *types.Struct + fields []*structField + optionalFields []*structField +} + +type structField struct { + name string + typ types.Type + elem op +} + +func (bctx *buildContext) makeStructOp(named *types.Named, typ *types.Struct) (op, error) { + // Convert fields to []rlpstruct.Field. + var allStructFields []rlpstruct.Field + for i := 0; i < typ.NumFields(); i++ { + f := typ.Field(i) + allStructFields = append(allStructFields, rlpstruct.Field{ + Name: f.Name(), + Exported: f.Exported(), + Index: i, + Tag: typ.Tag(i), + Type: *bctx.typeToStructType(f.Type()), + }) + } + + // Filter/validate fields. + fields, tags, err := rlpstruct.ProcessFields(allStructFields) + if err != nil { + return nil, err + } + + // Create field ops. + var op = structOp{named: named, typ: typ} + for i, field := range fields { + // Advanced struct tags are not supported yet. + tag := tags[i] + if err := checkUnsupportedTags(field.Name, tag); err != nil { + return nil, err + } + typ := typ.Field(field.Index).Type() + elem, err := bctx.makeOp(nil, typ, tags[i]) + if err != nil { + return nil, fmt.Errorf("field %s: %v", field.Name, err) + } + f := &structField{name: field.Name, typ: typ, elem: elem} + if tag.Optional { + op.optionalFields = append(op.optionalFields, f) + } else { + op.fields = append(op.fields, f) + } + } + return op, nil +} + +func checkUnsupportedTags(field string, tag rlpstruct.Tags) error { + if tag.Tail { + return fmt.Errorf(`field %s has unsupported struct tag "tail"`, field) + } + return nil +} + +func (op structOp) genWrite(ctx *genContext, v string) string { + var b bytes.Buffer + var listMarker = ctx.temp() + fmt.Fprintf(&b, "%s := w.List()\n", listMarker) + for _, field := range op.fields { + selector := v + "." + field.name + fmt.Fprint(&b, field.elem.genWrite(ctx, selector)) + } + op.writeOptionalFields(&b, ctx, v) + fmt.Fprintf(&b, "w.ListEnd(%s)\n", listMarker) + return b.String() +} + +func (op structOp) writeOptionalFields(b *bytes.Buffer, ctx *genContext, v string) { + if len(op.optionalFields) == 0 { + return + } + // First check zero-ness of all optional fields. + var zeroV = make([]string, len(op.optionalFields)) + for i, field := range op.optionalFields { + selector := v + "." + field.name + zeroV[i] = ctx.temp() + fmt.Fprintf(b, "%s := %s\n", zeroV[i], nonZeroCheck(selector, field.typ, ctx.qualify)) + } + // Now write the fields. + for i, field := range op.optionalFields { + selector := v + "." + field.name + cond := "" + for j := i; j < len(op.optionalFields); j++ { + if j > i { + cond += " || " + } + cond += zeroV[j] + } + fmt.Fprintf(b, "if %s {\n", cond) + fmt.Fprint(b, field.elem.genWrite(ctx, selector)) + fmt.Fprintf(b, "}\n") + } +} + +func (op structOp) genDecode(ctx *genContext) (string, string) { + // Get the string representation of the type. + // Here, named types are handled separately because the output + // would contain a copy of the struct definition otherwise. + var typeName string + if op.named != nil { + typeName = types.TypeString(op.named, ctx.qualify) + } else { + typeName = types.TypeString(op.typ, ctx.qualify) + } + + // Create struct object. + var resultV = ctx.temp() + var b bytes.Buffer + fmt.Fprintf(&b, "var %s %s\n", resultV, typeName) + + // Decode fields. + fmt.Fprintf(&b, "{\n") + fmt.Fprintf(&b, "if _, err := dec.List(); err != nil { return err }\n") + for _, field := range op.fields { + result, code := field.elem.genDecode(ctx) + fmt.Fprintf(&b, "// %s:\n", field.name) + fmt.Fprint(&b, code) + fmt.Fprintf(&b, "%s.%s = %s\n", resultV, field.name, result) + } + op.decodeOptionalFields(&b, ctx, resultV) + fmt.Fprintf(&b, "if err := dec.ListEnd(); err != nil { return err }\n") + fmt.Fprintf(&b, "}\n") + return resultV, b.String() +} + +func (op structOp) decodeOptionalFields(b *bytes.Buffer, ctx *genContext, resultV string) { + var suffix bytes.Buffer + for _, field := range op.optionalFields { + result, code := field.elem.genDecode(ctx) + fmt.Fprintf(b, "// %s:\n", field.name) + fmt.Fprintf(b, "if dec.MoreDataInList() {\n") + fmt.Fprint(b, code) + fmt.Fprintf(b, "%s.%s = %s\n", resultV, field.name, result) + fmt.Fprintf(&suffix, "}\n") + } + suffix.WriteTo(b) +} + +// sliceOp handles slice types. +type sliceOp struct { + typ *types.Slice + elemOp op +} + +func (bctx *buildContext) makeSliceOp(typ *types.Slice) (op, error) { + elemOp, err := bctx.makeOp(nil, typ.Elem(), rlpstruct.Tags{}) + if err != nil { + return nil, err + } + return sliceOp{typ: typ, elemOp: elemOp}, nil +} + +func (op sliceOp) genWrite(ctx *genContext, v string) string { + var ( + listMarker = ctx.temp() // holds return value of w.List() + iterElemV = ctx.temp() // iteration variable + elemCode = op.elemOp.genWrite(ctx, iterElemV) + ) + + var b bytes.Buffer + fmt.Fprintf(&b, "%s := w.List()\n", listMarker) + fmt.Fprintf(&b, "for _, %s := range %s {\n", iterElemV, v) + fmt.Fprint(&b, elemCode) + fmt.Fprintf(&b, "}\n") + fmt.Fprintf(&b, "w.ListEnd(%s)\n", listMarker) + return b.String() +} + +func (op sliceOp) genDecode(ctx *genContext) (string, string) { + var sliceV = ctx.temp() // holds the output slice + elemResult, elemCode := op.elemOp.genDecode(ctx) + + var b bytes.Buffer + fmt.Fprintf(&b, "var %s %s\n", sliceV, types.TypeString(op.typ, ctx.qualify)) + fmt.Fprintf(&b, "if _, err := dec.List(); err != nil { return err }\n") + fmt.Fprintf(&b, "for dec.MoreDataInList() {\n") + fmt.Fprintf(&b, " %s", elemCode) + fmt.Fprintf(&b, " %s = append(%s, %s)\n", sliceV, sliceV, elemResult) + fmt.Fprintf(&b, "}\n") + fmt.Fprintf(&b, "if err := dec.ListEnd(); err != nil { return err }\n") + return sliceV, b.String() +} + +func (bctx *buildContext) makeOp(name *types.Named, typ types.Type, tags rlpstruct.Tags) (op, error) { + switch typ := typ.(type) { + case *types.Named: + if isBigInt(typ) { + return bigIntOp{}, nil + } + if typ == bctx.rawValueType { + return bctx.makeRawValueOp(), nil + } + if bctx.isDecoder(typ) { + return nil, fmt.Errorf("type %v implements rlp.Decoder with non-pointer receiver", typ) + } + // TODO: same check for encoder? + return bctx.makeOp(typ, typ.Underlying(), tags) + case *types.Pointer: + if isBigInt(typ.Elem()) { + return bigIntOp{pointer: true}, nil + } + // Encoder/Decoder interfaces. + if bctx.isEncoder(typ) { + if bctx.isDecoder(typ) { + return encoderDecoderOp{typ}, nil + } + return nil, fmt.Errorf("type %v implements rlp.Encoder but not rlp.Decoder", typ) + } + if bctx.isDecoder(typ) { + return nil, fmt.Errorf("type %v implements rlp.Decoder but not rlp.Encoder", typ) + } + // Default pointer handling. + return bctx.makePtrOp(typ.Elem(), tags) + case *types.Basic: + return bctx.makeBasicOp(typ) + case *types.Struct: + return bctx.makeStructOp(name, typ) + case *types.Slice: + etyp := typ.Elem() + if isByte(etyp) && !bctx.isEncoder(etyp) { + return bctx.makeByteSliceOp(typ), nil + } + return bctx.makeSliceOp(typ) + case *types.Array: + etyp := typ.Elem() + if isByte(etyp) && !bctx.isEncoder(etyp) { + return bctx.makeByteArrayOp(name, typ), nil + } + return nil, fmt.Errorf("unhandled array type: %v", typ) + default: + return nil, fmt.Errorf("unhandled type: %v", typ) + } +} + +// generateDecoder generates the DecodeRLP method on 'typ'. +func generateDecoder(ctx *genContext, typ string, op op) []byte { + ctx.resetTemp() + ctx.addImport(pathOfPackageRLP) + + result, code := op.genDecode(ctx) + var b bytes.Buffer + fmt.Fprintf(&b, "func (obj *%s) DecodeRLP(dec *rlp.Stream) error {\n", typ) + fmt.Fprint(&b, code) + fmt.Fprintf(&b, " *obj = %s\n", result) + fmt.Fprintf(&b, " return nil\n") + fmt.Fprintf(&b, "}\n") + return b.Bytes() +} + +// generateEncoder generates the EncodeRLP method on 'typ'. +func generateEncoder(ctx *genContext, typ string, op op) []byte { + ctx.resetTemp() + ctx.addImport("io") + ctx.addImport(pathOfPackageRLP) + + var b bytes.Buffer + fmt.Fprintf(&b, "func (obj *%s) EncodeRLP(_w io.Writer) error {\n", typ) + fmt.Fprintf(&b, " w := rlp.NewEncoderBuffer(_w)\n") + fmt.Fprint(&b, op.genWrite(ctx, "obj")) + fmt.Fprintf(&b, " return w.Flush()\n") + fmt.Fprintf(&b, "}\n") + return b.Bytes() +} + +func (bctx *buildContext) generate(typ *types.Named, encoder, decoder bool) ([]byte, error) { + bctx.topType = typ + + pkg := typ.Obj().Pkg() + op, err := bctx.makeOp(nil, typ, rlpstruct.Tags{}) + if err != nil { + return nil, err + } + + var ( + ctx = newGenContext(pkg) + encSource []byte + decSource []byte + ) + if encoder { + encSource = generateEncoder(ctx, typ.Obj().Name(), op) + } + if decoder { + decSource = generateDecoder(ctx, typ.Obj().Name(), op) + } + + var b bytes.Buffer + fmt.Fprintf(&b, "package %s\n\n", pkg.Name()) + for _, imp := range ctx.importsList() { + fmt.Fprintf(&b, "import %q\n", imp) + } + if encoder { + fmt.Fprintln(&b) + b.Write(encSource) + } + if decoder { + fmt.Fprintln(&b) + b.Write(decSource) + } + + source := b.Bytes() + // fmt.Println(string(source)) + return format.Source(source) +} diff --git a/rlp/rlpgen/gen_test.go b/rlp/rlpgen/gen_test.go new file mode 100644 index 00000000..241c34b6 --- /dev/null +++ b/rlp/rlpgen/gen_test.go @@ -0,0 +1,107 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "fmt" + "go/ast" + "go/importer" + "go/parser" + "go/token" + "go/types" + "os" + "path/filepath" + "testing" +) + +// Package RLP is loaded only once and reused for all tests. +var ( + testFset = token.NewFileSet() + testImporter = importer.ForCompiler(testFset, "source", nil).(types.ImporterFrom) + testPackageRLP *types.Package +) + +func init() { + cwd, err := os.Getwd() + if err != nil { + panic(err) + } + testPackageRLP, err = testImporter.ImportFrom(pathOfPackageRLP, cwd, 0) + if err != nil { + panic(fmt.Errorf("can't load package RLP: %v", err)) + } +} + +var tests = []string{"uints", "nil", "rawvalue", "optional", "bigint"} + +func TestOutput(t *testing.T) { + for _, test := range tests { + test := test + t.Run(test, func(t *testing.T) { + inputFile := filepath.Join("testdata", test+".in.txt") + outputFile := filepath.Join("testdata", test+".out.txt") + bctx, typ, err := loadTestSource(inputFile, "Test") + if err != nil { + t.Fatal("error loading test source:", err) + } + output, err := bctx.generate(typ, true, true) + if err != nil { + t.Fatal("error in generate:", err) + } + + // Set this environment variable to regenerate the test outputs. + if os.Getenv("WRITE_TEST_FILES") != "" { + os.WriteFile(outputFile, output, 0644) + } + + // Check if output matches. + wantOutput, err := os.ReadFile(outputFile) + if err != nil { + t.Fatal("error loading expected test output:", err) + } + if !bytes.Equal(output, wantOutput) { + t.Fatal("output mismatch:\n", string(output)) + } + }) + } +} + +func loadTestSource(file string, typeName string) (*buildContext, *types.Named, error) { + // Load the test input. + content, err := os.ReadFile(file) + if err != nil { + return nil, nil, err + } + f, err := parser.ParseFile(testFset, file, content, 0) + if err != nil { + return nil, nil, err + } + conf := types.Config{Importer: testImporter} + pkg, err := conf.Check("test", testFset, []*ast.File{f}, nil) + if err != nil { + return nil, nil, err + } + + // Find the test struct. + bctx := newBuildContext(testPackageRLP) + typ, err := lookupStructType(pkg.Scope(), typeName) + if err != nil { + return nil, nil, fmt.Errorf("can't find type %s: %v", typeName, err) + } + return bctx, typ, nil +} diff --git a/rlp/rlpgen/main.go b/rlp/rlpgen/main.go new file mode 100644 index 00000000..25d4393c --- /dev/null +++ b/rlp/rlpgen/main.go @@ -0,0 +1,147 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "errors" + "flag" + "fmt" + "go/types" + "os" + + "golang.org/x/tools/go/packages" +) + +const pathOfPackageRLP = "github.com/ethereum/go-ethereum/rlp" + +func main() { + var ( + pkgdir = flag.String("dir", ".", "input package") + output = flag.String("out", "-", "output file (default is stdout)") + genEncoder = flag.Bool("encoder", true, "generate EncodeRLP?") + genDecoder = flag.Bool("decoder", false, "generate DecodeRLP?") + typename = flag.String("type", "", "type to generate methods for") + ) + flag.Parse() + + cfg := Config{ + Dir: *pkgdir, + Type: *typename, + GenerateEncoder: *genEncoder, + GenerateDecoder: *genDecoder, + } + code, err := cfg.process() + if err != nil { + fatal(err) + } + if *output == "-" { + os.Stdout.Write(code) + } else if err := os.WriteFile(*output, code, 0600); err != nil { + fatal(err) + } +} + +func fatal(args ...interface{}) { + fmt.Fprintln(os.Stderr, args...) + os.Exit(1) +} + +type Config struct { + Dir string // input package directory + Type string + + GenerateEncoder bool + GenerateDecoder bool +} + +// process generates the Go code. +func (cfg *Config) process() (code []byte, err error) { + // Load packages. + pcfg := &packages.Config{ + Mode: packages.NeedName | packages.NeedTypes | packages.NeedImports | packages.NeedDeps, + Dir: cfg.Dir, + BuildFlags: []string{"-tags", "norlpgen"}, + } + ps, err := packages.Load(pcfg, pathOfPackageRLP, ".") + if err != nil { + return nil, err + } + if len(ps) == 0 { + return nil, fmt.Errorf("no Go package found in %s", cfg.Dir) + } + packages.PrintErrors(ps) + + // Find the packages that were loaded. + var ( + pkg *types.Package + packageRLP *types.Package + ) + for _, p := range ps { + if len(p.Errors) > 0 { + return nil, fmt.Errorf("package %s has errors", p.PkgPath) + } + if p.PkgPath == pathOfPackageRLP { + packageRLP = p.Types + } else { + pkg = p.Types + } + } + bctx := newBuildContext(packageRLP) + + // Find the type and generate. + typ, err := lookupStructType(pkg.Scope(), cfg.Type) + if err != nil { + return nil, fmt.Errorf("can't find %s in %s: %v", cfg.Type, pkg, err) + } + code, err = bctx.generate(typ, cfg.GenerateEncoder, cfg.GenerateDecoder) + if err != nil { + return nil, err + } + + // Add build comments. + // This is done here to avoid processing these lines with gofmt. + var header bytes.Buffer + fmt.Fprint(&header, "// Code generated by rlpgen. DO NOT EDIT.\n\n") + fmt.Fprint(&header, "//go:build !norlpgen\n") + fmt.Fprint(&header, "// +build !norlpgen\n\n") + return append(header.Bytes(), code...), nil +} + +func lookupStructType(scope *types.Scope, name string) (*types.Named, error) { + typ, err := lookupType(scope, name) + if err != nil { + return nil, err + } + _, ok := typ.Underlying().(*types.Struct) + if !ok { + return nil, errors.New("not a struct type") + } + return typ, nil +} + +func lookupType(scope *types.Scope, name string) (*types.Named, error) { + obj := scope.Lookup(name) + if obj == nil { + return nil, errors.New("no such identifier") + } + typ, ok := obj.(*types.TypeName) + if !ok { + return nil, errors.New("not a type") + } + return typ.Type().(*types.Named), nil +} diff --git a/rlp/rlpgen/testdata/bigint.in.txt b/rlp/rlpgen/testdata/bigint.in.txt new file mode 100644 index 00000000..d23d84a2 --- /dev/null +++ b/rlp/rlpgen/testdata/bigint.in.txt @@ -0,0 +1,10 @@ +// -*- mode: go -*- + +package test + +import "math/big" + +type Test struct { + Int *big.Int + IntNoPtr big.Int +} diff --git a/rlp/rlpgen/testdata/bigint.out.txt b/rlp/rlpgen/testdata/bigint.out.txt new file mode 100644 index 00000000..f54d1faa --- /dev/null +++ b/rlp/rlpgen/testdata/bigint.out.txt @@ -0,0 +1,49 @@ +package test + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Test) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + if obj.Int == nil { + w.Write(rlp.EmptyString) + } else { + if obj.Int.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(obj.Int) + } + if obj.IntNoPtr.Sign() == -1 { + return rlp.ErrNegativeBigInt + } + w.WriteBigInt(&obj.IntNoPtr) + w.ListEnd(_tmp0) + return w.Flush() +} + +func (obj *Test) DecodeRLP(dec *rlp.Stream) error { + var _tmp0 Test + { + if _, err := dec.List(); err != nil { + return err + } + // Int: + _tmp1, err := dec.BigInt() + if err != nil { + return err + } + _tmp0.Int = _tmp1 + // IntNoPtr: + _tmp2, err := dec.BigInt() + if err != nil { + return err + } + _tmp0.IntNoPtr = (*_tmp2) + if err := dec.ListEnd(); err != nil { + return err + } + } + *obj = _tmp0 + return nil +} diff --git a/rlp/rlpgen/testdata/nil.in.txt b/rlp/rlpgen/testdata/nil.in.txt new file mode 100644 index 00000000..a28ff344 --- /dev/null +++ b/rlp/rlpgen/testdata/nil.in.txt @@ -0,0 +1,30 @@ +// -*- mode: go -*- + +package test + +type Aux struct{ + A uint32 +} + +type Test struct{ + Uint8 *byte `rlp:"nil"` + Uint8List *byte `rlp:"nilList"` + + Uint32 *uint32 `rlp:"nil"` + Uint32List *uint32 `rlp:"nilList"` + + Uint64 *uint64 `rlp:"nil"` + Uint64List *uint64 `rlp:"nilList"` + + String *string `rlp:"nil"` + StringList *string `rlp:"nilList"` + + ByteArray *[3]byte `rlp:"nil"` + ByteArrayList *[3]byte `rlp:"nilList"` + + ByteSlice *[]byte `rlp:"nil"` + ByteSliceList *[]byte `rlp:"nilList"` + + Struct *Aux `rlp:"nil"` + StructString *Aux `rlp:"nilString"` +} diff --git a/rlp/rlpgen/testdata/nil.out.txt b/rlp/rlpgen/testdata/nil.out.txt new file mode 100644 index 00000000..e0d5dceb --- /dev/null +++ b/rlp/rlpgen/testdata/nil.out.txt @@ -0,0 +1,289 @@ +package test + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Test) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + if obj.Uint8 == nil { + w.Write([]byte{0x80}) + } else { + w.WriteUint64(uint64((*obj.Uint8))) + } + if obj.Uint8List == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteUint64(uint64((*obj.Uint8List))) + } + if obj.Uint32 == nil { + w.Write([]byte{0x80}) + } else { + w.WriteUint64(uint64((*obj.Uint32))) + } + if obj.Uint32List == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteUint64(uint64((*obj.Uint32List))) + } + if obj.Uint64 == nil { + w.Write([]byte{0x80}) + } else { + w.WriteUint64((*obj.Uint64)) + } + if obj.Uint64List == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteUint64((*obj.Uint64List)) + } + if obj.String == nil { + w.Write([]byte{0x80}) + } else { + w.WriteString((*obj.String)) + } + if obj.StringList == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteString((*obj.StringList)) + } + if obj.ByteArray == nil { + w.Write([]byte{0x80}) + } else { + w.WriteBytes(obj.ByteArray[:]) + } + if obj.ByteArrayList == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteBytes(obj.ByteArrayList[:]) + } + if obj.ByteSlice == nil { + w.Write([]byte{0x80}) + } else { + w.WriteBytes((*obj.ByteSlice)) + } + if obj.ByteSliceList == nil { + w.Write([]byte{0xC0}) + } else { + w.WriteBytes((*obj.ByteSliceList)) + } + if obj.Struct == nil { + w.Write([]byte{0xC0}) + } else { + _tmp1 := w.List() + w.WriteUint64(uint64(obj.Struct.A)) + w.ListEnd(_tmp1) + } + if obj.StructString == nil { + w.Write([]byte{0x80}) + } else { + _tmp2 := w.List() + w.WriteUint64(uint64(obj.StructString.A)) + w.ListEnd(_tmp2) + } + w.ListEnd(_tmp0) + return w.Flush() +} + +func (obj *Test) DecodeRLP(dec *rlp.Stream) error { + var _tmp0 Test + { + if _, err := dec.List(); err != nil { + return err + } + // Uint8: + var _tmp2 *byte + if _tmp3, _tmp4, err := dec.Kind(); err != nil { + return err + } else if _tmp4 != 0 || _tmp3 != rlp.String { + _tmp1, err := dec.Uint8() + if err != nil { + return err + } + _tmp2 = &_tmp1 + } + _tmp0.Uint8 = _tmp2 + // Uint8List: + var _tmp6 *byte + if _tmp7, _tmp8, err := dec.Kind(); err != nil { + return err + } else if _tmp8 != 0 || _tmp7 != rlp.List { + _tmp5, err := dec.Uint8() + if err != nil { + return err + } + _tmp6 = &_tmp5 + } + _tmp0.Uint8List = _tmp6 + // Uint32: + var _tmp10 *uint32 + if _tmp11, _tmp12, err := dec.Kind(); err != nil { + return err + } else if _tmp12 != 0 || _tmp11 != rlp.String { + _tmp9, err := dec.Uint32() + if err != nil { + return err + } + _tmp10 = &_tmp9 + } + _tmp0.Uint32 = _tmp10 + // Uint32List: + var _tmp14 *uint32 + if _tmp15, _tmp16, err := dec.Kind(); err != nil { + return err + } else if _tmp16 != 0 || _tmp15 != rlp.List { + _tmp13, err := dec.Uint32() + if err != nil { + return err + } + _tmp14 = &_tmp13 + } + _tmp0.Uint32List = _tmp14 + // Uint64: + var _tmp18 *uint64 + if _tmp19, _tmp20, err := dec.Kind(); err != nil { + return err + } else if _tmp20 != 0 || _tmp19 != rlp.String { + _tmp17, err := dec.Uint64() + if err != nil { + return err + } + _tmp18 = &_tmp17 + } + _tmp0.Uint64 = _tmp18 + // Uint64List: + var _tmp22 *uint64 + if _tmp23, _tmp24, err := dec.Kind(); err != nil { + return err + } else if _tmp24 != 0 || _tmp23 != rlp.List { + _tmp21, err := dec.Uint64() + if err != nil { + return err + } + _tmp22 = &_tmp21 + } + _tmp0.Uint64List = _tmp22 + // String: + var _tmp26 *string + if _tmp27, _tmp28, err := dec.Kind(); err != nil { + return err + } else if _tmp28 != 0 || _tmp27 != rlp.String { + _tmp25, err := dec.String() + if err != nil { + return err + } + _tmp26 = &_tmp25 + } + _tmp0.String = _tmp26 + // StringList: + var _tmp30 *string + if _tmp31, _tmp32, err := dec.Kind(); err != nil { + return err + } else if _tmp32 != 0 || _tmp31 != rlp.List { + _tmp29, err := dec.String() + if err != nil { + return err + } + _tmp30 = &_tmp29 + } + _tmp0.StringList = _tmp30 + // ByteArray: + var _tmp34 *[3]byte + if _tmp35, _tmp36, err := dec.Kind(); err != nil { + return err + } else if _tmp36 != 0 || _tmp35 != rlp.String { + var _tmp33 [3]byte + if err := dec.ReadBytes(_tmp33[:]); err != nil { + return err + } + _tmp34 = &_tmp33 + } + _tmp0.ByteArray = _tmp34 + // ByteArrayList: + var _tmp38 *[3]byte + if _tmp39, _tmp40, err := dec.Kind(); err != nil { + return err + } else if _tmp40 != 0 || _tmp39 != rlp.List { + var _tmp37 [3]byte + if err := dec.ReadBytes(_tmp37[:]); err != nil { + return err + } + _tmp38 = &_tmp37 + } + _tmp0.ByteArrayList = _tmp38 + // ByteSlice: + var _tmp42 *[]byte + if _tmp43, _tmp44, err := dec.Kind(); err != nil { + return err + } else if _tmp44 != 0 || _tmp43 != rlp.String { + _tmp41, err := dec.Bytes() + if err != nil { + return err + } + _tmp42 = &_tmp41 + } + _tmp0.ByteSlice = _tmp42 + // ByteSliceList: + var _tmp46 *[]byte + if _tmp47, _tmp48, err := dec.Kind(); err != nil { + return err + } else if _tmp48 != 0 || _tmp47 != rlp.List { + _tmp45, err := dec.Bytes() + if err != nil { + return err + } + _tmp46 = &_tmp45 + } + _tmp0.ByteSliceList = _tmp46 + // Struct: + var _tmp51 *Aux + if _tmp52, _tmp53, err := dec.Kind(); err != nil { + return err + } else if _tmp53 != 0 || _tmp52 != rlp.List { + var _tmp49 Aux + { + if _, err := dec.List(); err != nil { + return err + } + // A: + _tmp50, err := dec.Uint32() + if err != nil { + return err + } + _tmp49.A = _tmp50 + if err := dec.ListEnd(); err != nil { + return err + } + } + _tmp51 = &_tmp49 + } + _tmp0.Struct = _tmp51 + // StructString: + var _tmp56 *Aux + if _tmp57, _tmp58, err := dec.Kind(); err != nil { + return err + } else if _tmp58 != 0 || _tmp57 != rlp.String { + var _tmp54 Aux + { + if _, err := dec.List(); err != nil { + return err + } + // A: + _tmp55, err := dec.Uint32() + if err != nil { + return err + } + _tmp54.A = _tmp55 + if err := dec.ListEnd(); err != nil { + return err + } + } + _tmp56 = &_tmp54 + } + _tmp0.StructString = _tmp56 + if err := dec.ListEnd(); err != nil { + return err + } + } + *obj = _tmp0 + return nil +} diff --git a/rlp/rlpgen/testdata/optional.in.txt b/rlp/rlpgen/testdata/optional.in.txt new file mode 100644 index 00000000..f1ac9f78 --- /dev/null +++ b/rlp/rlpgen/testdata/optional.in.txt @@ -0,0 +1,17 @@ +// -*- mode: go -*- + +package test + +type Aux struct { + A uint64 +} + +type Test struct { + Uint64 uint64 `rlp:"optional"` + Pointer *uint64 `rlp:"optional"` + String string `rlp:"optional"` + Slice []uint64 `rlp:"optional"` + Array [3]byte `rlp:"optional"` + NamedStruct Aux `rlp:"optional"` + AnonStruct struct{ A string } `rlp:"optional"` +} diff --git a/rlp/rlpgen/testdata/optional.out.txt b/rlp/rlpgen/testdata/optional.out.txt new file mode 100644 index 00000000..02df8e45 --- /dev/null +++ b/rlp/rlpgen/testdata/optional.out.txt @@ -0,0 +1,153 @@ +package test + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Test) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + _tmp1 := obj.Uint64 != 0 + _tmp2 := obj.Pointer != nil + _tmp3 := obj.String != "" + _tmp4 := len(obj.Slice) > 0 + _tmp5 := obj.Array != ([3]byte{}) + _tmp6 := obj.NamedStruct != (Aux{}) + _tmp7 := obj.AnonStruct != (struct{ A string }{}) + if _tmp1 || _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { + w.WriteUint64(obj.Uint64) + } + if _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { + if obj.Pointer == nil { + w.Write([]byte{0x80}) + } else { + w.WriteUint64((*obj.Pointer)) + } + } + if _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { + w.WriteString(obj.String) + } + if _tmp4 || _tmp5 || _tmp6 || _tmp7 { + _tmp8 := w.List() + for _, _tmp9 := range obj.Slice { + w.WriteUint64(_tmp9) + } + w.ListEnd(_tmp8) + } + if _tmp5 || _tmp6 || _tmp7 { + w.WriteBytes(obj.Array[:]) + } + if _tmp6 || _tmp7 { + _tmp10 := w.List() + w.WriteUint64(obj.NamedStruct.A) + w.ListEnd(_tmp10) + } + if _tmp7 { + _tmp11 := w.List() + w.WriteString(obj.AnonStruct.A) + w.ListEnd(_tmp11) + } + w.ListEnd(_tmp0) + return w.Flush() +} + +func (obj *Test) DecodeRLP(dec *rlp.Stream) error { + var _tmp0 Test + { + if _, err := dec.List(); err != nil { + return err + } + // Uint64: + if dec.MoreDataInList() { + _tmp1, err := dec.Uint64() + if err != nil { + return err + } + _tmp0.Uint64 = _tmp1 + // Pointer: + if dec.MoreDataInList() { + _tmp2, err := dec.Uint64() + if err != nil { + return err + } + _tmp0.Pointer = &_tmp2 + // String: + if dec.MoreDataInList() { + _tmp3, err := dec.String() + if err != nil { + return err + } + _tmp0.String = _tmp3 + // Slice: + if dec.MoreDataInList() { + var _tmp4 []uint64 + if _, err := dec.List(); err != nil { + return err + } + for dec.MoreDataInList() { + _tmp5, err := dec.Uint64() + if err != nil { + return err + } + _tmp4 = append(_tmp4, _tmp5) + } + if err := dec.ListEnd(); err != nil { + return err + } + _tmp0.Slice = _tmp4 + // Array: + if dec.MoreDataInList() { + var _tmp6 [3]byte + if err := dec.ReadBytes(_tmp6[:]); err != nil { + return err + } + _tmp0.Array = _tmp6 + // NamedStruct: + if dec.MoreDataInList() { + var _tmp7 Aux + { + if _, err := dec.List(); err != nil { + return err + } + // A: + _tmp8, err := dec.Uint64() + if err != nil { + return err + } + _tmp7.A = _tmp8 + if err := dec.ListEnd(); err != nil { + return err + } + } + _tmp0.NamedStruct = _tmp7 + // AnonStruct: + if dec.MoreDataInList() { + var _tmp9 struct{ A string } + { + if _, err := dec.List(); err != nil { + return err + } + // A: + _tmp10, err := dec.String() + if err != nil { + return err + } + _tmp9.A = _tmp10 + if err := dec.ListEnd(); err != nil { + return err + } + } + _tmp0.AnonStruct = _tmp9 + } + } + } + } + } + } + } + if err := dec.ListEnd(); err != nil { + return err + } + } + *obj = _tmp0 + return nil +} diff --git a/rlp/rlpgen/testdata/rawvalue.in.txt b/rlp/rlpgen/testdata/rawvalue.in.txt new file mode 100644 index 00000000..3a657bc9 --- /dev/null +++ b/rlp/rlpgen/testdata/rawvalue.in.txt @@ -0,0 +1,11 @@ +// -*- mode: go -*- + +package test + +import "github.com/ethereum/go-ethereum/rlp" + +type Test struct { + RawValue rlp.RawValue + PointerToRawValue *rlp.RawValue + SliceOfRawValue []rlp.RawValue +} diff --git a/rlp/rlpgen/testdata/rawvalue.out.txt b/rlp/rlpgen/testdata/rawvalue.out.txt new file mode 100644 index 00000000..3607c986 --- /dev/null +++ b/rlp/rlpgen/testdata/rawvalue.out.txt @@ -0,0 +1,64 @@ +package test + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Test) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + w.Write(obj.RawValue) + if obj.PointerToRawValue == nil { + w.Write([]byte{0x80}) + } else { + w.Write((*obj.PointerToRawValue)) + } + _tmp1 := w.List() + for _, _tmp2 := range obj.SliceOfRawValue { + w.Write(_tmp2) + } + w.ListEnd(_tmp1) + w.ListEnd(_tmp0) + return w.Flush() +} + +func (obj *Test) DecodeRLP(dec *rlp.Stream) error { + var _tmp0 Test + { + if _, err := dec.List(); err != nil { + return err + } + // RawValue: + _tmp1, err := dec.Raw() + if err != nil { + return err + } + _tmp0.RawValue = _tmp1 + // PointerToRawValue: + _tmp2, err := dec.Raw() + if err != nil { + return err + } + _tmp0.PointerToRawValue = &_tmp2 + // SliceOfRawValue: + var _tmp3 []rlp.RawValue + if _, err := dec.List(); err != nil { + return err + } + for dec.MoreDataInList() { + _tmp4, err := dec.Raw() + if err != nil { + return err + } + _tmp3 = append(_tmp3, _tmp4) + } + if err := dec.ListEnd(); err != nil { + return err + } + _tmp0.SliceOfRawValue = _tmp3 + if err := dec.ListEnd(); err != nil { + return err + } + } + *obj = _tmp0 + return nil +} diff --git a/rlp/rlpgen/testdata/uints.in.txt b/rlp/rlpgen/testdata/uints.in.txt new file mode 100644 index 00000000..8095da99 --- /dev/null +++ b/rlp/rlpgen/testdata/uints.in.txt @@ -0,0 +1,10 @@ +// -*- mode: go -*- + +package test + +type Test struct{ + A uint8 + B uint16 + C uint32 + D uint64 +} diff --git a/rlp/rlpgen/testdata/uints.out.txt b/rlp/rlpgen/testdata/uints.out.txt new file mode 100644 index 00000000..1a354956 --- /dev/null +++ b/rlp/rlpgen/testdata/uints.out.txt @@ -0,0 +1,53 @@ +package test + +import "github.com/ethereum/go-ethereum/rlp" +import "io" + +func (obj *Test) EncodeRLP(_w io.Writer) error { + w := rlp.NewEncoderBuffer(_w) + _tmp0 := w.List() + w.WriteUint64(uint64(obj.A)) + w.WriteUint64(uint64(obj.B)) + w.WriteUint64(uint64(obj.C)) + w.WriteUint64(obj.D) + w.ListEnd(_tmp0) + return w.Flush() +} + +func (obj *Test) DecodeRLP(dec *rlp.Stream) error { + var _tmp0 Test + { + if _, err := dec.List(); err != nil { + return err + } + // A: + _tmp1, err := dec.Uint8() + if err != nil { + return err + } + _tmp0.A = _tmp1 + // B: + _tmp2, err := dec.Uint16() + if err != nil { + return err + } + _tmp0.B = _tmp2 + // C: + _tmp3, err := dec.Uint32() + if err != nil { + return err + } + _tmp0.C = _tmp3 + // D: + _tmp4, err := dec.Uint64() + if err != nil { + return err + } + _tmp0.D = _tmp4 + if err := dec.ListEnd(); err != nil { + return err + } + } + *obj = _tmp0 + return nil +} diff --git a/rlp/rlpgen/types.go b/rlp/rlpgen/types.go new file mode 100644 index 00000000..19694262 --- /dev/null +++ b/rlp/rlpgen/types.go @@ -0,0 +1,114 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "go/types" + "reflect" +) + +// typeReflectKind gives the reflect.Kind that represents typ. +func typeReflectKind(typ types.Type) reflect.Kind { + switch typ := typ.(type) { + case *types.Basic: + k := typ.Kind() + if k >= types.Bool && k <= types.Complex128 { + // value order matches for Bool..Complex128 + return reflect.Bool + reflect.Kind(k-types.Bool) + } + if k == types.String { + return reflect.String + } + if k == types.UnsafePointer { + return reflect.UnsafePointer + } + panic(fmt.Errorf("unhandled BasicKind %v", k)) + case *types.Array: + return reflect.Array + case *types.Chan: + return reflect.Chan + case *types.Interface: + return reflect.Interface + case *types.Map: + return reflect.Map + case *types.Pointer: + return reflect.Ptr + case *types.Signature: + return reflect.Func + case *types.Slice: + return reflect.Slice + case *types.Struct: + return reflect.Struct + default: + panic(fmt.Errorf("unhandled type %T", typ)) + } +} + +// nonZeroCheck returns the expression that checks whether 'v' is a non-zero value of type 'vtyp'. +func nonZeroCheck(v string, vtyp types.Type, qualify types.Qualifier) string { + // Resolve type name. + typ := resolveUnderlying(vtyp) + switch typ := typ.(type) { + case *types.Basic: + k := typ.Kind() + switch { + case k == types.Bool: + return v + case k >= types.Uint && k <= types.Complex128: + return fmt.Sprintf("%s != 0", v) + case k == types.String: + return fmt.Sprintf(`%s != ""`, v) + default: + panic(fmt.Errorf("unhandled BasicKind %v", k)) + } + case *types.Array, *types.Struct: + return fmt.Sprintf("%s != (%s{})", v, types.TypeString(vtyp, qualify)) + case *types.Interface, *types.Pointer, *types.Signature: + return fmt.Sprintf("%s != nil", v) + case *types.Slice, *types.Map: + return fmt.Sprintf("len(%s) > 0", v) + default: + panic(fmt.Errorf("unhandled type %T", typ)) + } +} + +// isBigInt checks whether 'typ' is "math/big".Int. +func isBigInt(typ types.Type) bool { + named, ok := typ.(*types.Named) + if !ok { + return false + } + name := named.Obj() + return name.Pkg().Path() == "math/big" && name.Name() == "Int" +} + +// isByte checks whether the underlying type of 'typ' is uint8. +func isByte(typ types.Type) bool { + basic, ok := resolveUnderlying(typ).(*types.Basic) + return ok && basic.Kind() == types.Uint8 +} + +func resolveUnderlying(typ types.Type) types.Type { + for { + t := typ.Underlying() + if t == typ { + return t + } + typ = t + } +} diff --git a/rlp/safe.go b/rlp/safe.go new file mode 100644 index 00000000..3c910337 --- /dev/null +++ b/rlp/safe.go @@ -0,0 +1,27 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build nacl || js || !cgo +// +build nacl js !cgo + +package rlp + +import "reflect" + +// byteArrayBytes returns a slice of the byte array v. +func byteArrayBytes(v reflect.Value, length int) []byte { + return v.Slice(0, length).Bytes() +} diff --git a/rlp/typecache.go b/rlp/typecache.go index ab5ee3da..3e37c9d2 100644 --- a/rlp/typecache.go +++ b/rlp/typecache.go @@ -19,15 +19,13 @@ package rlp import ( "fmt" "reflect" - "strings" "sync" -) + "sync/atomic" -var ( - typeCacheMutex sync.RWMutex - typeCache = make(map[typekey]*typeinfo) + "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct" ) +// typeinfo is an entry in the type cache. type typeinfo struct { decoder decoder decoderErr error // error from makeDecoder @@ -35,131 +33,208 @@ type typeinfo struct { writerErr error // error from makeWriter } -// represents struct tags -type tags struct { - // rlp:"nil" controls whether empty input results in a nil pointer. - nilOK bool - // 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 + rlpstruct.Tags } type decoder func(*Stream, reflect.Value) error -type writer func(reflect.Value, *encbuf) error +type writer func(reflect.Value, *encBuffer) error + +var theTC = newTypeCache() + +type typeCache struct { + cur atomic.Value + + // This lock synchronizes writers. + mu sync.Mutex + next map[typekey]*typeinfo +} + +func newTypeCache() *typeCache { + c := new(typeCache) + c.cur.Store(make(map[typekey]*typeinfo)) + return c +} func cachedDecoder(typ reflect.Type) (decoder, error) { - info := cachedTypeInfo(typ, tags{}) + info := theTC.info(typ) return info.decoder, info.decoderErr } func cachedWriter(typ reflect.Type) (writer, error) { - info := cachedTypeInfo(typ, tags{}) + info := theTC.info(typ) 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 { +func (c *typeCache) info(typ reflect.Type) *typeinfo { + key := typekey{Type: typ} + if info := c.cur.Load().(map[typekey]*typeinfo)[key]; info != nil { return info } - // not in the cache, need to generate info for this type. - typeCacheMutex.Lock() - defer typeCacheMutex.Unlock() - return cachedTypeInfo1(typ, tags) + + // Not in the cache, need to generate info for this type. + return c.generate(typ, rlpstruct.Tags{}) } -func cachedTypeInfo1(typ reflect.Type, tags tags) *typeinfo { +func (c *typeCache) generate(typ reflect.Type, tags rlpstruct.Tags) *typeinfo { + c.mu.Lock() + defer c.mu.Unlock() + + cur := c.cur.Load().(map[typekey]*typeinfo) + if info := cur[typekey{typ, tags}]; info != nil { + return info + } + + // Copy cur to next. + c.next = make(map[typekey]*typeinfo, len(cur)+1) + for k, v := range cur { + c.next[k] = v + } + + // Generate. + info := c.infoWhileGenerating(typ, tags) + + // next -> cur + c.cur.Store(c.next) + c.next = nil + return info +} + +func (c *typeCache) infoWhileGenerating(typ reflect.Type, tags rlpstruct.Tags) *typeinfo { key := typekey{typ, tags} - info := typeCache[key] - if info != nil { - // another goroutine got the write lock first + if info := c.next[key]; info != nil { return info } - // put a dummy value into the cache before generating. - // if the generator tries to lookup itself, it will get + // 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. - info = new(typeinfo) - typeCache[key] = info + info := new(typeinfo) + c.next[key] = info info.generate(typ, tags) return info } type field struct { - index int - info *typeinfo + index int + info *typeinfo + optional bool } +// structFields resolves the typeinfo of all public fields in a struct type. func structFields(typ reflect.Type) (fields []field, err error) { - lastPublic := lastPublicField(typ) + // Convert fields to rlpstruct.Field. + var allStructFields []rlpstruct.Field for i := 0; i < typ.NumField(); i++ { - if f := typ.Field(i); f.PkgPath == "" { // exported - tags, err := parseStructTag(typ, i, lastPublic) - if err != nil { - return nil, err - } - if tags.ignored { - continue - } - info := cachedTypeInfo1(f.Type, tags) - fields = append(fields, field{i, info}) + rf := typ.Field(i) + allStructFields = append(allStructFields, rlpstruct.Field{ + Name: rf.Name, + Index: i, + Exported: rf.PkgPath == "", + Tag: string(rf.Tag), + Type: *rtypeToStructType(rf.Type, nil), + }) + } + + // Filter/validate fields. + structFields, structTags, err := rlpstruct.ProcessFields(allStructFields) + if err != nil { + if tagErr, ok := err.(rlpstruct.TagError); ok { + tagErr.StructType = typ.String() + return nil, tagErr } + return nil, err + } + + // Resolve typeinfo. + for i, sf := range structFields { + typ := typ.Field(sf.Index).Type + tags := structTags[i] + info := theTC.infoWhileGenerating(typ, tags) + fields = append(fields, field{sf.Index, info, tags.Optional}) } return fields, nil } -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"), ",") { - switch t = strings.TrimSpace(t); t { - case "": - case "-": - ts.ignored = true - case "nil": - ts.nilOK = true - case "tail": - ts.tail = true - if fi != lastPublic { - return ts, fmt.Errorf(`rlp: invalid struct tag "tail" for %v.%s (must be on last field)`, typ, f.Name) - } - 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) - } - default: - return ts, fmt.Errorf("rlp: unknown struct tag %q on %v.%s", t, typ, f.Name) +// firstOptionalField returns the index of the first field with "optional" tag. +func firstOptionalField(fields []field) int { + for i, f := range fields { + if f.optional { + return i } } - return ts, nil + return len(fields) } -func lastPublicField(typ reflect.Type) int { - last := 0 - for i := 0; i < typ.NumField(); i++ { - if typ.Field(i).PkgPath == "" { - last = i - } - } - return last +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) } -func (i *typeinfo) generate(typ reflect.Type, tags tags) { +func (i *typeinfo) generate(typ reflect.Type, tags rlpstruct.Tags) { i.decoder, i.decoderErr = makeDecoder(typ, tags) i.writer, i.writerErr = makeWriter(typ, tags) } +// rtypeToStructType converts typ to rlpstruct.Type. +func rtypeToStructType(typ reflect.Type, rec map[reflect.Type]*rlpstruct.Type) *rlpstruct.Type { + k := typ.Kind() + if k == reflect.Invalid { + panic("invalid kind") + } + + if prev := rec[typ]; prev != nil { + return prev // short-circuit for recursive types + } + if rec == nil { + rec = make(map[reflect.Type]*rlpstruct.Type) + } + + t := &rlpstruct.Type{ + Name: typ.String(), + Kind: k, + IsEncoder: typ.Implements(encoderInterface), + IsDecoder: typ.Implements(decoderInterface), + } + rec[typ] = t + if k == reflect.Array || k == reflect.Slice || k == reflect.Ptr { + t.Elem = rtypeToStructType(typ.Elem(), rec) + } + return t +} + +// typeNilKind gives the RLP value kind for nil pointers to 'typ'. +func typeNilKind(typ reflect.Type, tags rlpstruct.Tags) Kind { + styp := rtypeToStructType(typ, nil) + + var nk rlpstruct.NilKind + if tags.NilOK { + nk = tags.NilKind + } else { + nk = styp.DefaultNilValue() + } + switch nk { + case rlpstruct.NilKindString: + return String + case rlpstruct.NilKindList: + return List + default: + panic("invalid nil kind value") + } +} + func isUint(k reflect.Kind) bool { return k >= reflect.Uint && k <= reflect.Uintptr } + +func isByte(typ reflect.Type) bool { + return typ.Kind() == reflect.Uint8 && !typ.Implements(encoderInterface) +} diff --git a/rlp/unsafe.go b/rlp/unsafe.go new file mode 100644 index 00000000..2152ba35 --- /dev/null +++ b/rlp/unsafe.go @@ -0,0 +1,35 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build !nacl && !js && cgo +// +build !nacl,!js,cgo + +package rlp + +import ( + "reflect" + "unsafe" +) + +// byteArrayBytes returns a slice of the byte array v. +func byteArrayBytes(v reflect.Value, length int) []byte { + var s []byte + hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) + hdr.Data = v.UnsafeAddr() + hdr.Cap = length + hdr.Len = length + return s +} diff --git a/rpc/client.go b/rpc/client.go index c73aeab4..d3ce0297 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -17,7 +17,6 @@ package rpc import ( - "bytes" "context" "encoding/json" "errors" @@ -28,7 +27,7 @@ import ( "sync/atomic" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) var ( @@ -75,7 +74,7 @@ type BatchElem struct { // Client represents a connection to an RPC server. type Client struct { idgen func() ID // for subscriptions - isHTTP bool + isHTTP bool // connection type: http, ws or ipc services *serviceRegistry idCounter uint32 @@ -85,7 +84,7 @@ type Client struct { // 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. + // taken by sending on reqInit and released by sending on reqSent. writeConn jsonWriter // for dispatch @@ -110,14 +109,16 @@ type clientConn struct { } func (c *Client) newClientConn(conn ServerCodec) *clientConn { - ctx := context.WithValue(context.Background(), clientContextKey{}, c) + ctx := context.Background() + ctx = context.WithValue(ctx, clientContextKey{}, c) + ctx = context.WithValue(ctx, peerInfoContextKey{}, conn.peerInfo()) handler := newHandler(ctx, conn, c.idgen, c.services) return &clientConn{conn, handler} } func (cc *clientConn) close(err error, inflightReq *requestOp) { cc.handler.close(err, inflightReq) - cc.codec.Close() + cc.codec.close() } type readOp struct { @@ -185,7 +186,7 @@ func DialContext(ctx context.Context, rawurl string) (*Client, error) { } } -// Client retrieves the client from the context, if any. This can be used to perform +// ClientFromContext 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) @@ -205,8 +206,8 @@ func newClient(initctx context.Context, connect reconnectFunc) (*Client, error) func initClient(conn ServerCodec, idgen func() ID, services *serviceRegistry) *Client { _, isHTTP := conn.(*httpConn) c := &Client{ - idgen: idgen, isHTTP: isHTTP, + idgen: idgen, services: services, writeConn: conn, close: make(chan struct{}), @@ -260,6 +261,19 @@ func (c *Client) Close() { } } +// SetHeader adds a custom HTTP header to the client's requests. +// This method only works for clients using HTTP, it doesn't have +// any effect for clients using another transport. +func (c *Client) SetHeader(key, value string) { + if !c.isHTTP { + return + } + conn := c.writeConn.(*httpConn) + conn.mu.Lock() + conn.headers.Set(key, value) + conn.mu.Unlock() +} + // Call performs a JSON-RPC call with the given arguments and unmarshals into // result if no error occurred. // @@ -276,6 +290,9 @@ func (c *Client) Call(result interface{}, method string, args ...interface{}) er // The result must be a pointer so that package json can unmarshal into it. You // can also pass nil, in which case the result is ignored. func (c *Client) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error { + if result != nil && reflect.TypeOf(result).Kind() != reflect.Ptr { + return fmt.Errorf("call result parameter must be pointer or nil interface: %v", result) + } msg, err := c.newMessage(method, args...) if err != nil { return err @@ -316,7 +333,7 @@ func (c *Client) BatchCall(b []BatchElem) error { return c.BatchCallContext(ctx, b) } -// BatchCall sends all given requests as a single batch and waits for the server +// BatchCallContext sends all given requests as a single batch and waits for the server // to return a response for all of them. The wait duration is bounded by the // context's deadline. // @@ -326,7 +343,10 @@ func (c *Client) BatchCall(b []BatchElem) error { // // Note that batch calls may not be executed atomically on the server side. func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { - msgs := make([]*jsonrpcMessage, len(b)) + var ( + msgs = make([]*jsonrpcMessage, len(b)) + byID = make(map[string]int, len(b)) + ) op := &requestOp{ ids: make([]json.RawMessage, len(b)), resp: make(chan *jsonrpcMessage, len(b)), @@ -338,6 +358,7 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { } msgs[i] = msg op.ids[i] = msg.ID + byID[string(msg.ID)] = i } var err error @@ -357,13 +378,7 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { // Find the element corresponding to this response. // The element is guaranteed to be present because dispatch // only sends valid IDs to our channel. - var elem *BatchElem - for i := range msgs { - if bytes.Equal(msgs[i].ID, resp.ID) { - elem = &b[i] - break - } - } + elem := &b[byID[string(resp.ID)]] if resp.Error != nil { elem.Error = resp.Error continue @@ -388,17 +403,17 @@ func (c *Client) Notify(ctx context.Context, method string, args ...interface{}) if c.isHTTP { return c.sendHTTP(ctx, op, msg) - } else { - return c.send(ctx, op, msg) } + return c.send(ctx, op, msg) } -// EthSubscribe registers a subscripion under the "eth" namespace. +// EthSubscribe registers a subscription under the "eth" namespace. func (c *Client) EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) { return c.Subscribe(ctx, "eth", channel, args...) } -// ShhSubscribe registers a subscripion under the "shh" namespace. +// ShhSubscribe registers a subscription under the "shh" namespace. +// Deprecated: use Subscribe(ctx, "shh", ...). func (c *Client) ShhSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) { return c.Subscribe(ctx, "shh", channel, args...) } @@ -419,7 +434,7 @@ func (c *Client) Subscribe(ctx context.Context, namespace string, channel interf // Check type of channel first. chanVal := reflect.ValueOf(channel) if chanVal.Kind() != reflect.Chan || chanVal.Type().ChanDir()&reflect.SendDir == 0 { - panic("first argument to Subscribe must be a writable channel") + panic(fmt.Sprintf("channel argument of Subscribe has type %T, need writable channel", channel)) } if chanVal.IsNil() { panic("channel given to Subscribe must not be nil") @@ -465,7 +480,7 @@ func (c *Client) newMessage(method string, paramsIn ...interface{}) (*jsonrpcMes func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error { select { case c.reqInit <- op: - err := c.write(ctx, msg) + err := c.write(ctx, msg, false) c.reqSent <- err return err case <-ctx.Done(): @@ -477,16 +492,19 @@ func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error } } -func (c *Client) write(ctx context.Context, msg interface{}) error { - // The previous write failed. Try to establish a new connection. +func (c *Client) write(ctx context.Context, msg interface{}, retry bool) error { if c.writeConn == nil { + // The previous write failed. Try to establish a new connection. if err := c.reconnect(ctx); err != nil { return err } } - err := c.writeConn.Write(ctx, msg) + err := c.writeConn.writeJSON(ctx, msg) if err != nil { c.writeConn = nil + if !retry { + return c.write(ctx, msg, true) + } } return err } @@ -511,7 +529,7 @@ func (c *Client) reconnect(ctx context.Context) error { c.writeConn = newconn return nil case <-c.didClose: - newconn.Close() + newconn.close() return ErrClientQuit } } @@ -558,7 +576,7 @@ func (c *Client) dispatch(codec ServerCodec) { // Reconnect: case newcodec := <-c.reconnected: - log.Debug("RPC client reconnected", "reading", reading, "conn", newcodec.RemoteAddr()) + 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 which // happens if this loop isn't notified in time after the connection breaks. @@ -612,9 +630,9 @@ func (c *Client) drainRead() { // read decodes RPC messages from a codec, feeding them into dispatch. func (c *Client) read(codec ServerCodec) { for { - msgs, batch, err := codec.Read() + msgs, batch, err := codec.readBatch() if _, ok := err.(*json.SyntaxError); ok { - codec.Write(context.Background(), errorMessage(&parseError{err.Error()})) + codec.writeJSON(context.Background(), errorMessage(&parseError{err.Error()})) } if err != nil { c.readErr <- err diff --git a/rpc/client_example_test.go b/rpc/client_example_test.go index 511a31b9..044b57a9 100644 --- a/rpc/client_example_test.go +++ b/rpc/client_example_test.go @@ -19,10 +19,10 @@ package rpc_test import ( "context" "fmt" - "math/big" "time" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/rpc" ) // In this example, our client wishes to track the latest 'block number' @@ -31,16 +31,16 @@ import ( // eth_getBlockByNumber("latest", {}) // returns the latest block object. // -// eth_subscribe("newBlocks") +// eth_subscribe("newHeads") // creates a subscription which fires block objects when new blocks arrive. type Block struct { - Number *big.Int + Number *hexutil.Big } func ExampleClientSubscription() { // Connect the client. - client, _ := rpc.Dial("ws://127.0.0.1:8485") + client, _ := rpc.Dial("ws://127.0.0.1:8545") subch := make(chan Block) // Ensure that subch receives the latest block. @@ -75,7 +75,8 @@ func subscribeBlocks(client *rpc.Client, subch chan Block) { // The connection is established now. // Update the channel with the current block. var lastBlock Block - if err := client.CallContext(ctx, &lastBlock, "eth_getBlockByNumber", "latest"); err != nil { + err = client.CallContext(ctx, &lastBlock, "eth_getBlockByNumber", "latest", false) + if err != nil { fmt.Println("can't get latest block:", err) return } diff --git a/rpc/client_test.go b/rpc/client_test.go index a08b8f86..04c847d0 100644 --- a/rpc/client_test.go +++ b/rpc/client_test.go @@ -18,6 +18,7 @@ package rpc import ( "context" + "encoding/json" "fmt" "math/rand" "net" @@ -26,12 +27,13 @@ import ( "os" "reflect" "runtime" + "strings" "sync" "testing" "time" - "github.com/cryptoecc/ETH-ECC/log" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/log" ) func TestClientRequest(t *testing.T) { @@ -40,15 +42,59 @@ func TestClientRequest(t *testing.T) { client := DialInProc(server) defer client.Close() - var resp Result - if err := client.Call(&resp, "test_echo", "hello", 10, &Args{"world"}); err != nil { + var resp echoResult + if err := client.Call(&resp, "test_echo", "hello", 10, &echoArgs{"world"}); err != nil { t.Fatal(err) } - if !reflect.DeepEqual(resp, Result{"hello", 10, &Args{"world"}}) { + if !reflect.DeepEqual(resp, echoResult{"hello", 10, &echoArgs{"world"}}) { t.Errorf("incorrect result %#v", resp) } } +func TestClientResponseType(t *testing.T) { + server := newTestServer() + defer server.Stop() + client := DialInProc(server) + defer client.Close() + + if err := client.Call(nil, "test_echo", "hello", 10, &echoArgs{"world"}); err != nil { + t.Errorf("Passing nil as result should be fine, but got an error: %v", err) + } + var resultVar echoResult + // Note: passing the var, not a ref + err := client.Call(resultVar, "test_echo", "hello", 10, &echoArgs{"world"}) + if err == nil { + t.Error("Passing a var as result should be an error") + } +} + +// This test checks that server-returned errors with code and data come out of Client.Call. +func TestClientErrorData(t *testing.T) { + server := newTestServer() + defer server.Stop() + client := DialInProc(server) + defer client.Close() + + var resp interface{} + err := client.Call(&resp, "test_returnError") + if err == nil { + t.Fatal("expected error") + } + + // Check code. + if e, ok := err.(Error); !ok { + t.Fatalf("client did not return rpc.Error, got %#v", e) + } else if e.ErrorCode() != (testError{}.ErrorCode()) { + t.Fatalf("wrong error code %d, want %d", e.ErrorCode(), testError{}.ErrorCode()) + } + // Check data. + if e, ok := err.(DataError); !ok { + t.Fatalf("client did not return rpc.DataError, got %#v", e) + } else if e.ErrorData() != (testError{}.ErrorData()) { + t.Fatalf("wrong error data %#v, want %#v", e.ErrorData(), testError{}.ErrorData()) + } +} + func TestClientBatchRequest(t *testing.T) { server := newTestServer() defer server.Stop() @@ -58,13 +104,13 @@ func TestClientBatchRequest(t *testing.T) { batch := []BatchElem{ { Method: "test_echo", - Args: []interface{}{"hello", 10, &Args{"world"}}, - Result: new(Result), + Args: []interface{}{"hello", 10, &echoArgs{"world"}}, + Result: new(echoResult), }, { Method: "test_echo", - Args: []interface{}{"hello2", 11, &Args{"world"}}, - Result: new(Result), + Args: []interface{}{"hello2", 11, &echoArgs{"world"}}, + Result: new(echoResult), }, { Method: "no_such_method", @@ -78,13 +124,13 @@ func TestClientBatchRequest(t *testing.T) { wantResult := []BatchElem{ { Method: "test_echo", - Args: []interface{}{"hello", 10, &Args{"world"}}, - Result: &Result{"hello", 10, &Args{"world"}}, + Args: []interface{}{"hello", 10, &echoArgs{"world"}}, + Result: &echoResult{"hello", 10, &echoArgs{"world"}}, }, { Method: "test_echo", - Args: []interface{}{"hello2", 11, &Args{"world"}}, - Result: &Result{"hello2", 11, &Args{"world"}}, + Args: []interface{}{"hello2", 11, &echoArgs{"world"}}, + Result: &echoResult{"hello2", 11, &echoArgs{"world"}}, }, { Method: "no_such_method", @@ -104,7 +150,7 @@ func TestClientNotify(t *testing.T) { client := DialInProc(server) defer client.Close() - if err := client.Notify(context.Background(), "test_echo", "hello", 10, &Args{"world"}); err != nil { + if err := client.Notify(context.Background(), "test_echo", "hello", 10, &echoArgs{"world"}); err != nil { t.Fatal(err) } } @@ -162,7 +208,7 @@ func testClientCancel(transport string, t *testing.T) { var ( wg sync.WaitGroup nreqs = 10 - ncallers = 6 + ncallers = 10 ) caller := func(index int) { defer wg.Done() @@ -183,14 +229,16 @@ func testClientCancel(transport string, t *testing.T) { // deadline. ctx, cancel = context.WithTimeout(context.Background(), timeout) } + // Now perform a call with the context. // The key thing here is that no call will ever complete successfully. - 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 { - t.Errorf("no error for call with %v wait time", timeout) + err := client.CallContext(ctx, nil, "test_block") + switch { + case err == nil: + _, hasDeadline := ctx.Deadline() + t.Errorf("no error for call with %v wait time (deadline: %v)", timeout, hasDeadline) + // default: + // t.Logf("got expected error with %v wait time: %v", timeout, err) } cancel() } @@ -280,7 +328,7 @@ func TestClientSubscribeClose(t *testing.T) { var ( nc = make(chan int) - errc = make(chan error) + errc = make(chan error, 1) sub *ClientSubscription err error ) @@ -306,7 +354,7 @@ func TestClientSubscribeClose(t *testing.T) { } } -// This test reproduces https://github.com/cryptoecc/ETH-ECC/issues/17837 where the +// 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) { server := newTestServer() @@ -329,6 +377,93 @@ func TestClientCloseUnsubscribeRace(t *testing.T) { } } +// unsubscribeRecorder collects the subscription IDs of *_unsubscribe calls. +type unsubscribeRecorder struct { + ServerCodec + unsubscribes map[string]bool +} + +func (r *unsubscribeRecorder) readBatch() ([]*jsonrpcMessage, bool, error) { + if r.unsubscribes == nil { + r.unsubscribes = make(map[string]bool) + } + + msgs, batch, err := r.ServerCodec.readBatch() + for _, msg := range msgs { + if msg.isUnsubscribe() { + var params []string + if err := json.Unmarshal(msg.Params, ¶ms); err != nil { + panic("unsubscribe decode error: " + err.Error()) + } + r.unsubscribes[params[0]] = true + } + } + return msgs, batch, err +} + +// This checks that Client calls the _unsubscribe method on the server when Unsubscribe is +// called on a subscription. +func TestClientSubscriptionUnsubscribeServer(t *testing.T) { + t.Parallel() + + // Create the server. + srv := NewServer() + srv.RegisterName("nftest", new(notificationTestService)) + p1, p2 := net.Pipe() + recorder := &unsubscribeRecorder{ServerCodec: NewCodec(p1)} + go srv.ServeCodec(recorder, OptionMethodInvocation|OptionSubscriptions) + defer srv.Stop() + + // Create the client on the other end of the pipe. + client, _ := newClient(context.Background(), func(context.Context) (ServerCodec, error) { + return NewCodec(p2), nil + }) + defer client.Close() + + // Create the subscription. + ch := make(chan int) + sub, err := client.Subscribe(context.Background(), "nftest", ch, "someSubscription", 1, 1) + if err != nil { + t.Fatal(err) + } + + // Unsubscribe and check that unsubscribe was called. + sub.Unsubscribe() + if !recorder.unsubscribes[sub.subid] { + t.Fatal("client did not call unsubscribe method") + } + if _, open := <-sub.Err(); open { + t.Fatal("subscription error channel not closed after unsubscribe") + } +} + +// This checks that the subscribed channel can be closed after Unsubscribe. +// It is the reproducer for https://github.com/ethereum/go-ethereum/issues/22322 +func TestClientSubscriptionChannelClose(t *testing.T) { + t.Parallel() + + var ( + srv = NewServer() + httpsrv = httptest.NewServer(srv.WebsocketHandler(nil)) + wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") + ) + defer srv.Stop() + defer httpsrv.Close() + + srv.RegisterName("nftest", new(notificationTestService)) + client, _ := Dial(wsURL) + + for i := 0; i < 100; i++ { + ch := make(chan int, 100) + sub, err := client.Subscribe(context.Background(), "nftest", ch, "someSubscription", maxClientSubscriptionBuffer-1, 1) + if err != nil { + t.Fatal(err) + } + sub.Unsubscribe() + close(ch) + } +} + // This test checks that Client doesn't lock up when a single subscriber // doesn't read subscription events. func TestClientNotificationStorm(t *testing.T) { @@ -380,7 +515,43 @@ func TestClientNotificationStorm(t *testing.T) { } doTest(8000, false) - doTest(21000, true) + doTest(24000, true) +} + +func TestClientSetHeader(t *testing.T) { + var gotHeader bool + srv := newTestServer() + httpsrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("test") == "ok" { + gotHeader = true + } + srv.ServeHTTP(w, r) + })) + defer httpsrv.Close() + defer srv.Stop() + + client, err := Dial(httpsrv.URL) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + client.SetHeader("test", "ok") + if _, err := client.SupportedModules(); err != nil { + t.Fatal(err) + } + if !gotHeader { + t.Fatal("client did not set custom header") + } + + // Check that Content-Type can be replaced. + client.SetHeader("content-type", "application/x-garbage") + _, err = client.SupportedModules() + if err == nil { + t.Fatal("no error for invalid content-type header") + } else if !strings.Contains(err.Error(), "Unsupported Media Type") { + t.Fatalf("error is not related to content-type: %q", err) + } } func TestClientHTTP(t *testing.T) { @@ -393,16 +564,15 @@ func TestClientHTTP(t *testing.T) { // Launch concurrent requests. var ( - results = make([]Result, 100) - errc = make(chan error) - wantResult = Result{"a", 1, new(Args)} + results = make([]echoResult, 100) + errc = make(chan error, len(results)) + wantResult = echoResult{"a", 1, new(echoArgs)} ) defer client.Close() for i := range results { i := i go func() { - errc <- client.Call(&results[i], "test_echo", - wantResult.String, wantResult.Int, wantResult.Args) + errc <- client.Call(&results[i], "test_echo", wantResult.String, wantResult.Int, wantResult.Args) }() } @@ -448,9 +618,10 @@ func TestClientReconnect(t *testing.T) { if err != nil { t.Fatal("can't dial", err) } + defer client.Close() // Perform a call. This should work because the server is up. - var resp Result + var resp echoResult if err := client.CallContext(ctx, &resp, "test_echo", "", 1, nil); err != nil { t.Fatal(err) } @@ -478,7 +649,7 @@ func TestClientReconnect(t *testing.T) { for i := 0; i < cap(errors); i++ { go func() { <-start - var resp Result + var resp echoResult errors <- client.CallContext(ctx, &resp, "test_echo", "", 3, nil) }() } diff --git a/rpc/constants_unix.go b/rpc/constants_unix.go index 2f98d649..1f04d15d 100644 --- a/rpc/constants_unix.go +++ b/rpc/constants_unix.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || solaris // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris package rpc diff --git a/rpc/constants_unix_nocgo.go b/rpc/constants_unix_nocgo.go index ecb231f9..a62e4ee5 100644 --- a/rpc/constants_unix_nocgo.go +++ b/rpc/constants_unix_nocgo.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build !cgo && !windows // +build !cgo,!windows package rpc diff --git a/rpc/doc.go b/rpc/doc.go index 31afa76c..e0a63246 100644 --- a/rpc/doc.go +++ b/rpc/doc.go @@ -29,8 +29,6 @@ Methods that satisfy the following criteria are made available for remote access - 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: @@ -73,14 +71,9 @@ An example server which uses the JSON codec: calculator := new(CalculatorService) server := NewServer() - server.RegisterName("calculator", calculator") - + server.RegisterName("calculator", calculator) l, _ := net.ListenUnix("unix", &net.UnixAddr{Net: "unix", Name: "/tmp/calculator.sock"}) - for { - c, _ := l.AcceptUnix() - codec := v2.NewJSONCodec(c) - go server.ServeCodec(codec, 0) - } + server.ServeListener(l) Subscriptions @@ -90,7 +83,6 @@ criteria: - method must be exported - first method argument type must be context.Context - - method argument(s) must be exported or builtin types - method must have return types (rpc.Subscription, error) An example method: @@ -107,7 +99,7 @@ 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/cryptoecc/ETH-ECC/wiki/RPC-PUB-SUB. +For more information about subscriptions, see https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB. Reverse Calls diff --git a/rpc/endpoints.go b/rpc/endpoints.go index 536a8a2c..d78ebe28 100644 --- a/rpc/endpoints.go +++ b/rpc/endpoints.go @@ -18,80 +18,30 @@ package rpc import ( "net" + "strings" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) -// StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules -func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string, timeouts HTTPTimeouts) (net.Listener, *Server, error) { - // Generate the whitelist based on the allowed modules - whitelist := make(map[string]bool) - for _, module := range modules { - whitelist[module] = true - } - // Register all the APIs exposed by the services - handler := NewServer() - for _, api := range apis { - if whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { - if err := handler.RegisterName(api.Namespace, api.Service); err != nil { - return nil, nil, err - } - log.Debug("HTTP registered", "namespace", api.Namespace) - } - } - // All APIs registered, start the HTTP listener - var ( - listener net.Listener - err error - ) - if listener, err = net.Listen("tcp", endpoint); err != nil { - return nil, nil, err - } - go NewHTTPServer(cors, vhosts, timeouts, handler).Serve(listener) - return listener, handler, err -} - -// StartWSEndpoint starts a websocket endpoint -func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { - - // Generate the whitelist based on the allowed modules - whitelist := make(map[string]bool) - for _, module := range modules { - whitelist[module] = true - } - // Register all the APIs exposed by the services - handler := NewServer() - for _, api := range apis { - if exposeAll || whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { - if err := handler.RegisterName(api.Namespace, api.Service); err != nil { - return nil, nil, err - } - log.Debug("WebSocket registered", "service", api.Service, "namespace", api.Namespace) - } - } - // All APIs registered, start the HTTP listener - var ( - listener net.Listener - err error - ) - if listener, err = net.Listen("tcp", endpoint); err != nil { - return nil, nil, err - } - go NewWSServer(wsOrigins, handler).Serve(listener) - return listener, handler, err - -} - // StartIPCEndpoint starts an IPC endpoint. func StartIPCEndpoint(ipcEndpoint string, apis []API) (net.Listener, *Server, error) { // Register all the APIs exposed by the services. - handler := NewServer() + var ( + handler = NewServer() + regMap = make(map[string]struct{}) + registered []string + ) for _, api := range apis { if err := handler.RegisterName(api.Namespace, api.Service); err != nil { + log.Info("IPC registration failed", "namespace", api.Namespace, "error", err) return nil, nil, err } - log.Debug("IPC registered", "namespace", api.Namespace) + if _, ok := regMap[api.Namespace]; !ok { + registered = append(registered, api.Namespace) + regMap[api.Namespace] = struct{}{} + } } + log.Debug("IPCs registered", "namespaces", strings.Join(registered, ",")) // All APIs registered, start the IPC listener. listener, err := ipcListen(ipcEndpoint) if err != nil { diff --git a/rpc/errors.go b/rpc/errors.go index c3aa826c..4c06a745 100644 --- a/rpc/errors.go +++ b/rpc/errors.go @@ -18,6 +18,44 @@ package rpc import "fmt" +// HTTPError is returned by client operations when the HTTP status code of the +// response is not a 2xx status. +type HTTPError struct { + StatusCode int + Status string + Body []byte +} + +func (err HTTPError) Error() string { + if len(err.Body) == 0 { + return err.Status + } + return fmt.Sprintf("%v: %s", err.Status, err.Body) +} + +// Error wraps RPC errors, which contain an error code in addition to the message. +type Error interface { + Error() string // returns the message + ErrorCode() int // returns the code +} + +// A DataError contains some data in addition to the error message. +type DataError interface { + Error() string // returns the message + ErrorData() interface{} // returns the error data +} + +// Error types defined below are the built-in JSON-RPC errors. + +var ( + _ Error = new(methodNotFoundError) + _ Error = new(subscriptionNotFoundError) + _ Error = new(parseError) + _ Error = new(invalidRequestError) + _ Error = new(invalidMessageError) + _ Error = new(invalidParamsError) +) + const defaultErrorCode = -32000 type methodNotFoundError struct{ method string } diff --git a/rpc/gzip.go b/rpc/gzip.go deleted file mode 100644 index a14fd09d..00000000 --- a/rpc/gzip.go +++ /dev/null @@ -1,66 +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 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 index c47b44cc..cd95a067 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -25,7 +25,7 @@ import ( "sync" "time" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // handler handles JSON-RPC messages. There is one handler per connection. Note that @@ -85,8 +85,8 @@ func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg * serverSubs: make(map[ID]*Subscription), log: log.Root(), } - if conn.RemoteAddr() != "" { - h.log = h.log.New("conn", conn.RemoteAddr()) + if conn.remoteAddr() != "" { + h.log = h.log.New("conn", conn.remoteAddr()) } h.unsubscribeCb = newCallback(reflect.Value{}, reflect.ValueOf(h.unsubscribe)) return h @@ -97,7 +97,7 @@ 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"})) + h.conn.writeJSON(cp.ctx, errorMessage(&invalidRequestError{"empty batch"})) }) return } @@ -122,7 +122,7 @@ func (h *handler) handleBatch(msgs []*jsonrpcMessage) { } h.addSubscriptions(cp.notifiers) if len(answers) > 0 { - h.conn.Write(cp.ctx, answers) + h.conn.writeJSON(cp.ctx, answers) } for _, n := range cp.notifiers { n.activate() @@ -139,7 +139,7 @@ func (h *handler) handleMsg(msg *jsonrpcMessage) { answer := h.handleCallMsg(cp, msg) h.addSubscriptions(cp.notifiers) if answer != nil { - h.conn.Write(cp.ctx, answer) + h.conn.writeJSON(cp.ctx, answer) } for _, n := range cp.notifiers { n.activate() @@ -189,7 +189,7 @@ func (h *handler) cancelAllRequests(err error, inflightReq *requestOp) { } for id, sub := range h.clientSubs { delete(h.clientSubs, id) - sub.quitWithError(err, false) + sub.close(err) } } @@ -240,7 +240,7 @@ func (h *handler) handleImmediate(msg *jsonrpcMessage) bool { return false case msg.isResponse(): h.handleResponse(msg) - h.log.Trace("Handled RPC response", "reqid", idForLog{msg.ID}, "t", time.Since(start)) + h.log.Trace("Handled RPC response", "reqid", idForLog{msg.ID}, "duration", time.Since(start)) return true default: return false @@ -281,7 +281,7 @@ func (h *handler) handleResponse(msg *jsonrpcMessage) { return } if op.err = json.Unmarshal(msg.Result, &op.sub.subid); op.err == nil { - go op.sub.start() + go op.sub.run() h.clientSubs[op.sub.subid] = op.sub } } @@ -292,14 +292,20 @@ func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMess switch { case msg.isNotification(): h.handleCall(ctx, msg) - h.log.Debug("Served "+msg.Method, "t", time.Since(start)) + h.log.Debug("Served "+msg.Method, "duration", time.Since(start)) return nil case msg.isCall(): resp := h.handleCall(ctx, msg) + var ctx []interface{} + ctx = append(ctx, "reqid", idForLog{msg.ID}, "duration", time.Since(start)) if resp.Error != nil { - h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message) + ctx = append(ctx, "err", resp.Error.Message) + if resp.Error.Data != nil { + ctx = append(ctx, "errdata", resp.Error.Data) + } + h.log.Warn("Served "+msg.Method, ctx...) } else { - h.log.Debug("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start)) + h.log.Debug("Served "+msg.Method, ctx...) } return resp case msg.hasValidID(): @@ -327,8 +333,22 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage if err != nil { return msg.errorResponse(&invalidParamsError{err.Error()}) } - - return h.runMethod(cp.ctx, msg, callb, args) + start := time.Now() + answer := h.runMethod(cp.ctx, msg, callb, args) + + // Collect the statistics for RPC calls if metrics is enabled. + // We only care about pure rpc call. Filter out subscription. + if callb != h.unsubscribeCb { + rpcRequestGauge.Inc(1) + if answer.Error != nil { + failedRequestGauge.Inc(1) + } else { + successfulRequestGauge.Inc(1) + } + rpcServingTimer.UpdateSince(start) + updateServeTimeHistogram(msg.Method, answer.Error == nil, time.Since(start)) + } + return answer } // handleSubscribe processes *_subscribe method calls. diff --git a/rpc/http.go b/rpc/http.go index 8d4a77af..858d8085 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -23,16 +23,11 @@ import ( "errors" "fmt" "io" - "io/ioutil" "mime" - "net" "net/http" - "strings" + "net/url" "sync" "time" - - "github.com/cryptoecc/ETH-ECC/log" - "github.com/rs/cors" ) const ( @@ -45,31 +40,40 @@ var acceptedContentTypes = []string{contentType, "application/json-rpc", "applic type httpConn struct { client *http.Client - req *http.Request + url string closeOnce sync.Once - closed chan interface{} + closeCh chan interface{} + mu sync.Mutex // protects headers + headers http.Header +} + +// httpConn implements ServerCodec, but it is treated specially by Client +// and some methods don't work. The panic() stubs here exist to ensure +// this special treatment is correct. + +func (hc *httpConn) writeJSON(context.Context, interface{}) error { + panic("writeJSON called on httpConn") } -// httpConn is treated specially by Client. -func (hc *httpConn) Write(context.Context, interface{}) error { - panic("Write called on httpConn") +func (hc *httpConn) peerInfo() PeerInfo { + panic("peerInfo called on httpConn") } -func (hc *httpConn) RemoteAddr() string { - return hc.req.URL.String() +func (hc *httpConn) remoteAddr() string { + return hc.url } -func (hc *httpConn) Read() ([]*jsonrpcMessage, bool, error) { - <-hc.closed +func (hc *httpConn) readBatch() ([]*jsonrpcMessage, bool, error) { + <-hc.closeCh return nil, false, io.EOF } -func (hc *httpConn) Close() { - hc.closeOnce.Do(func() { close(hc.closed) }) +func (hc *httpConn) close() { + hc.closeOnce.Do(func() { close(hc.closeCh) }) } -func (hc *httpConn) Closed() <-chan interface{} { - return hc.closed +func (hc *httpConn) closed() <-chan interface{} { + return hc.closeCh } // HTTPTimeouts represents the configuration params for the HTTP RPC server. @@ -83,6 +87,14 @@ type HTTPTimeouts struct { // ReadHeaderTimeout. It is valid to use them both. ReadTimeout time.Duration + // ReadHeaderTimeout is the amount of time allowed to read + // request headers. The connection's read deadline is reset + // after reading the headers and the Handler can decide what + // is considered too slow for the body. If ReadHeaderTimeout + // is zero, the value of ReadTimeout is used. If both are + // zero, there is no timeout. + ReadHeaderTimeout time.Duration + // WriteTimeout is the maximum duration before timing out // writes of the response. It is reset whenever a new // request's header is read. Like ReadTimeout, it does not @@ -99,24 +111,33 @@ type HTTPTimeouts struct { // DefaultHTTPTimeouts represents the default timeout values used if further // configuration is not provided. var DefaultHTTPTimeouts = HTTPTimeouts{ - ReadTimeout: 30 * time.Second, - WriteTimeout: 30 * time.Second, - IdleTimeout: 120 * time.Second, + ReadTimeout: 30 * time.Second, + ReadHeaderTimeout: 30 * time.Second, + WriteTimeout: 30 * time.Second, + IdleTimeout: 120 * time.Second, } // DialHTTPWithClient creates a new RPC client that connects to an RPC server over HTTP // using the provided HTTP Client. func DialHTTPWithClient(endpoint string, client *http.Client) (*Client, error) { - req, err := http.NewRequest(http.MethodPost, endpoint, nil) + // Sanity check URL so we don't end up with a client that will fail every request. + _, err := url.Parse(endpoint) if err != nil { return nil, err } - req.Header.Set("Content-Type", contentType) - req.Header.Set("Accept", contentType) initctx := context.Background() + headers := make(http.Header, 2) + headers.Set("accept", contentType) + headers.Set("content-type", contentType) return newClient(initctx, func(context.Context) (ServerCodec, error) { - return &httpConn{client: client, req: req, closed: make(chan interface{})}, nil + hc := &httpConn{ + client: client, + headers: headers, + url: endpoint, + closeCh: make(chan interface{}), + } + return hc, nil }) } @@ -128,19 +149,11 @@ func DialHTTP(endpoint string) (*Client, error) { func (c *Client) sendHTTP(ctx context.Context, op *requestOp, msg interface{}) error { hc := c.writeConn.(*httpConn) respBody, err := hc.doRequest(ctx, msg) - if respBody != nil { - defer respBody.Close() - } - if err != nil { - if respBody != nil { - buf := new(bytes.Buffer) - if _, err2 := buf.ReadFrom(respBody); err2 == nil { - return fmt.Errorf("%v %v", err, buf.String()) - } - } return err } + defer respBody.Close() + var respmsg jsonrpcMessage if err := json.NewDecoder(respBody).Decode(&respmsg); err != nil { return err @@ -171,16 +184,35 @@ func (hc *httpConn) doRequest(ctx context.Context, msg interface{}) (io.ReadClos if err != nil { return nil, err } - req := hc.req.WithContext(ctx) - req.Body = ioutil.NopCloser(bytes.NewReader(body)) + req, err := http.NewRequestWithContext(ctx, "POST", hc.url, io.NopCloser(bytes.NewReader(body))) + if err != nil { + return nil, err + } req.ContentLength = int64(len(body)) + req.GetBody = func() (io.ReadCloser, error) { return io.NopCloser(bytes.NewReader(body)), nil } + // set headers + hc.mu.Lock() + req.Header = hc.headers.Clone() + hc.mu.Unlock() + + // do request resp, err := hc.client.Do(req) if err != nil { return nil, err } if resp.StatusCode < 200 || resp.StatusCode >= 300 { - return resp.Body, errors.New(resp.Status) + var buf bytes.Buffer + var body []byte + if _, err := buf.ReadFrom(resp.Body); err == nil { + body = buf.Bytes() + } + + return nil, HTTPError{ + Status: resp.Status, + StatusCode: resp.StatusCode, + Body: body, + } } return resp.Body, nil } @@ -195,7 +227,7 @@ type httpServerConn struct { 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) + return NewCodec(conn) } // Close does nothing and always returns nil. @@ -209,64 +241,33 @@ func (t *httpServerConn) RemoteAddr() string { // 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 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 { - log.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", DefaultHTTPTimeouts.ReadTimeout) - timeouts.ReadTimeout = DefaultHTTPTimeouts.ReadTimeout - } - if timeouts.WriteTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", DefaultHTTPTimeouts.WriteTimeout) - timeouts.WriteTimeout = DefaultHTTPTimeouts.WriteTimeout - } - if timeouts.IdleTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP idle timeout", "provided", timeouts.IdleTimeout, "updated", DefaultHTTPTimeouts.IdleTimeout) - timeouts.IdleTimeout = DefaultHTTPTimeouts.IdleTimeout - } - // Bundle and start the HTTP server - return &http.Server{ - Handler: handler, - ReadTimeout: timeouts.ReadTimeout, - WriteTimeout: timeouts.WriteTimeout, - IdleTimeout: timeouts.IdleTimeout, - } -} - // ServeHTTP serves JSON-RPC requests over HTTP. 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 == "" { + w.WriteHeader(http.StatusOK) return } if code, err := validateRequest(r); err != nil { http.Error(w, err.Error(), code) return } - // All checks passed, create a codec that reads direct from the request body - // untilEOF and writes the response to w and order the server to process a - // single request. + + // Create request-scoped context. + connInfo := PeerInfo{Transport: "http", RemoteAddr: r.RemoteAddr} + connInfo.HTTP.Version = r.Proto + connInfo.HTTP.Host = r.Host + connInfo.HTTP.Origin = r.Header.Get("Origin") + connInfo.HTTP.UserAgent = r.Header.Get("User-Agent") ctx := r.Context() - ctx = context.WithValue(ctx, "remote", r.RemoteAddr) - ctx = context.WithValue(ctx, "scheme", r.Proto) - ctx = context.WithValue(ctx, "local", r.Host) - if ua := r.Header.Get("User-Agent"); ua != "" { - ctx = context.WithValue(ctx, "User-Agent", ua) - } - if origin := r.Header.Get("Origin"); origin != "" { - ctx = context.WithValue(ctx, "Origin", origin) - } + ctx = context.WithValue(ctx, peerInfoContextKey{}, connInfo) + // All checks passed, create a codec that reads directly from the request body + // until EOF, writes the response to w, and orders the server to process a + // single request. w.Header().Set("content-type", contentType) codec := newHTTPServerConn(r, w) - defer codec.Close() + defer codec.close() s.serveSingleRequest(ctx, codec) } @@ -296,64 +297,3 @@ func validateRequest(r *http.Request) (int, error) { err := fmt.Errorf("invalid content type, only %s is supported", contentType) return http.StatusUnsupportedMediaType, err } - -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 - } - c := cors.New(cors.Options{ - AllowedOrigins: allowedOrigins, - AllowedMethods: []string{http.MethodPost, http.MethodGet}, - MaxAge: 600, - AllowedHeaders: []string{"*"}, - }) - return c.Handler(srv) -} - -// virtualHostHandler is a handler which validates the Host-header of incoming requests. -// The virtualHostHandler can prevent DNS rebinding attacks, which do not utilize CORS-headers, -// since they do in-domain requests against the RPC api. Instead, we can see on the Host-header -// which domain was used, and validate that against a whitelist. -type virtualHostHandler struct { - vhosts map[string]struct{} - next http.Handler -} - -// ServeHTTP serves JSON-RPC requests over HTTP, implements http.Handler -func (h *virtualHostHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // if r.Host is not set, we can continue serving since a browser would set the Host header - if r.Host == "" { - h.next.ServeHTTP(w, r) - return - } - host, _, err := net.SplitHostPort(r.Host) - if err != nil { - // Either invalid (too many colons) or no port specified - host = r.Host - } - if ipAddr := net.ParseIP(host); ipAddr != nil { - // It's an IP address, we can serve that - h.next.ServeHTTP(w, r) - return - - } - // Not an ip address, but a hostname. Need to validate - if _, exist := h.vhosts["*"]; exist { - h.next.ServeHTTP(w, r) - return - } - if _, exist := h.vhosts[host]; exist { - h.next.ServeHTTP(w, r) - return - } - http.Error(w, "invalid host specified", http.StatusForbidden) -} - -func newVHostHandler(vhosts []string, next http.Handler) http.Handler { - vhostMap := make(map[string]struct{}) - for _, allowedHost := range vhosts { - vhostMap[strings.ToLower(allowedHost)] = struct{}{} - } - return &virtualHostHandler{vhostMap, next} -} diff --git a/rpc/http_test.go b/rpc/http_test.go index b3f694d8..c84d7705 100644 --- a/rpc/http_test.go +++ b/rpc/http_test.go @@ -23,32 +23,178 @@ import ( "testing" ) +func confirmStatusCode(t *testing.T, got, want int) { + t.Helper() + if got == want { + return + } + if gotName := http.StatusText(got); len(gotName) > 0 { + if wantName := http.StatusText(want); len(wantName) > 0 { + t.Fatalf("response status code: got %d (%s), want %d (%s)", got, gotName, want, wantName) + } + } + t.Fatalf("response status code: got %d, want %d", got, want) +} + +func confirmRequestValidationCode(t *testing.T, method, contentType, body string, expectedStatusCode int) { + t.Helper() + request := httptest.NewRequest(method, "http://url.com", strings.NewReader(body)) + if len(contentType) > 0 { + request.Header.Set("Content-Type", contentType) + } + code, err := validateRequest(request) + if code == 0 { + if err != nil { + t.Errorf("validation: got error %v, expected nil", err) + } + } else if err == nil { + t.Errorf("validation: code %d: got nil, expected error", code) + } + confirmStatusCode(t, code, expectedStatusCode) +} + func TestHTTPErrorResponseWithDelete(t *testing.T) { - testHTTPErrorResponse(t, http.MethodDelete, contentType, "", http.StatusMethodNotAllowed) + confirmRequestValidationCode(t, http.MethodDelete, contentType, "", http.StatusMethodNotAllowed) } func TestHTTPErrorResponseWithPut(t *testing.T) { - testHTTPErrorResponse(t, http.MethodPut, contentType, "", http.StatusMethodNotAllowed) + confirmRequestValidationCode(t, http.MethodPut, contentType, "", http.StatusMethodNotAllowed) } func TestHTTPErrorResponseWithMaxContentLength(t *testing.T) { body := make([]rune, maxRequestContentLength+1) - testHTTPErrorResponse(t, + confirmRequestValidationCode(t, http.MethodPost, contentType, string(body), http.StatusRequestEntityTooLarge) } func TestHTTPErrorResponseWithEmptyContentType(t *testing.T) { - testHTTPErrorResponse(t, http.MethodPost, "", "", http.StatusUnsupportedMediaType) + confirmRequestValidationCode(t, http.MethodPost, "", "", http.StatusUnsupportedMediaType) } func TestHTTPErrorResponseWithValidRequest(t *testing.T) { - testHTTPErrorResponse(t, http.MethodPost, contentType, "", 0) + confirmRequestValidationCode(t, http.MethodPost, contentType, "", 0) } -func testHTTPErrorResponse(t *testing.T, method, contentType, body string, expected int) { - request := httptest.NewRequest(method, "http://url.com", strings.NewReader(body)) - request.Header.Set("content-type", contentType) - if code, _ := validateRequest(request); code != expected { - t.Fatalf("response code should be %d not %d", expected, code) +func confirmHTTPRequestYieldsStatusCode(t *testing.T, method, contentType, body string, expectedStatusCode int) { + t.Helper() + s := Server{} + ts := httptest.NewServer(&s) + defer ts.Close() + + request, err := http.NewRequest(method, ts.URL, strings.NewReader(body)) + if err != nil { + t.Fatalf("failed to create a valid HTTP request: %v", err) + } + if len(contentType) > 0 { + request.Header.Set("Content-Type", contentType) + } + resp, err := http.DefaultClient.Do(request) + if err != nil { + t.Fatalf("request failed: %v", err) + } + confirmStatusCode(t, resp.StatusCode, expectedStatusCode) +} + +func TestHTTPResponseWithEmptyGet(t *testing.T) { + confirmHTTPRequestYieldsStatusCode(t, http.MethodGet, "", "", http.StatusOK) +} + +// This checks that maxRequestContentLength is not applied to the response of a request. +func TestHTTPRespBodyUnlimited(t *testing.T) { + const respLength = maxRequestContentLength * 3 + + s := NewServer() + defer s.Stop() + s.RegisterName("test", largeRespService{respLength}) + ts := httptest.NewServer(s) + defer ts.Close() + + c, err := DialHTTP(ts.URL) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + var r string + if err := c.Call(&r, "test_largeResp"); err != nil { + t.Fatal(err) + } + if len(r) != respLength { + t.Fatalf("response has wrong length %d, want %d", len(r), respLength) + } +} + +// Tests that an HTTP error results in an HTTPError instance +// being returned with the expected attributes. +func TestHTTPErrorResponse(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "error has occurred!", http.StatusTeapot) + })) + defer ts.Close() + + c, err := DialHTTP(ts.URL) + if err != nil { + t.Fatal(err) + } + + var r string + err = c.Call(&r, "test_method") + if err == nil { + t.Fatal("error was expected") + } + + httpErr, ok := err.(HTTPError) + if !ok { + t.Fatalf("unexpected error type %T", err) + } + + if httpErr.StatusCode != http.StatusTeapot { + t.Error("unexpected status code", httpErr.StatusCode) + } + if httpErr.Status != "418 I'm a teapot" { + t.Error("unexpected status text", httpErr.Status) + } + if body := string(httpErr.Body); body != "error has occurred!\n" { + t.Error("unexpected body", body) + } + + if errMsg := httpErr.Error(); errMsg != "418 I'm a teapot: error has occurred!\n" { + t.Error("unexpected error message", errMsg) + } +} + +func TestHTTPPeerInfo(t *testing.T) { + s := newTestServer() + defer s.Stop() + ts := httptest.NewServer(s) + defer ts.Close() + + c, err := Dial(ts.URL) + if err != nil { + t.Fatal(err) + } + c.SetHeader("user-agent", "ua-testing") + c.SetHeader("origin", "origin.example.com") + + // Request peer information. + var info PeerInfo + if err := c.Call(&info, "test_peerInfo"); err != nil { + t.Fatal(err) + } + + if info.RemoteAddr == "" { + t.Error("RemoteAddr not set") + } + if info.Transport != "http" { + t.Errorf("wrong Transport %q", info.Transport) + } + if info.HTTP.Version != "HTTP/1.1" { + t.Errorf("wrong HTTP.Version %q", info.HTTP.Version) + } + if info.HTTP.UserAgent != "ua-testing" { + t.Errorf("wrong HTTP.UserAgent %q", info.HTTP.UserAgent) + } + if info.HTTP.Origin != "origin.example.com" { + t.Errorf("wrong HTTP.Origin %q", info.HTTP.UserAgent) } } diff --git a/rpc/inproc.go b/rpc/inproc.go index c4456cfc..fbe9a40c 100644 --- a/rpc/inproc.go +++ b/rpc/inproc.go @@ -26,8 +26,8 @@ func DialInProc(handler *Server) *Client { initctx := context.Background() c, _ := newClient(initctx, func(context.Context) (ServerCodec, error) { p1, p2 := net.Pipe() - go handler.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) - return NewJSONCodec(p2), nil + go handler.ServeCodec(NewCodec(p1), 0) + return NewCodec(p2), nil }) return c } diff --git a/rpc/ipc.go b/rpc/ipc.go index 39c1f0c9..07a211c6 100644 --- a/rpc/ipc.go +++ b/rpc/ipc.go @@ -20,8 +20,8 @@ import ( "context" "net" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/p2p/netutil" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/netutil" ) // ServeListener accepts connections on l, serving JSON-RPC on them. @@ -35,7 +35,7 @@ func (s *Server) ServeListener(l net.Listener) error { return err } log.Trace("Accepted RPC connection", "conn", conn.RemoteAddr()) - go s.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) + go s.ServeCodec(NewCodec(conn), 0) } } @@ -51,6 +51,6 @@ func DialIPC(ctx context.Context, endpoint string) (*Client, error) { if err != nil { return nil, err } - return NewJSONCodec(conn), err + return NewCodec(conn), err }) } diff --git a/rpc/ipc_js.go b/rpc/ipc_js.go index 7e7554a7..453a20bc 100644 --- a/rpc/ipc_js.go +++ b/rpc/ipc_js.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build js // +build js package rpc diff --git a/rpc/ipc_unix.go b/rpc/ipc_unix.go index bc569a09..249a9cf0 100644 --- a/rpc/ipc_unix.go +++ b/rpc/ipc_unix.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || solaris // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris package rpc @@ -25,7 +26,7 @@ import ( "os" "path/filepath" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) // ipcListen will create a Unix socket on the given endpoint. diff --git a/rpc/ipc_windows.go b/rpc/ipc_windows.go index ca56a3ce..adb1826f 100644 --- a/rpc/ipc_windows.go +++ b/rpc/ipc_windows.go @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +//go:build windows // +build windows package rpc diff --git a/rpc/json.go b/rpc/json.go index 75c22103..6024f1e7 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -115,6 +115,10 @@ func errorMessage(err error) *jsonrpcMessage { if ok { msg.Error.Code = ec.ErrorCode() } + de, ok := err.(DataError) + if ok { + msg.Error.Data = de.ErrorData() + } return msg } @@ -135,6 +139,10 @@ func (err *jsonError) ErrorCode() int { return err.Code } +func (err *jsonError) ErrorData() interface{} { + return err.Data +} + // Conn is a subset of the methods of net.Conn which are sufficient for ServerCodec. type Conn interface { io.ReadWriteCloser @@ -153,66 +161,71 @@ type ConnRemoteAddr interface { RemoteAddr() string } -// connWithRemoteAddr overrides the remote address of a connection. -type connWithRemoteAddr struct { - Conn - addr string -} - -func (c connWithRemoteAddr) RemoteAddr() string { return c.addr } - // 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 -} - -func newCodec(conn deadlineCloser, encode, decode func(v interface{}) error) ServerCodec { + remote string + closer sync.Once // close closed channel once + closeCh 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 +} + +// NewFuncCodec creates a codec which uses the given functions to read and write. If conn +// implements ConnRemoteAddr, log messages will use it to include the remote address of +// the connection. +func NewFuncCodec(conn deadlineCloser, encode, decode func(v interface{}) error) ServerCodec { codec := &jsonCodec{ - closed: make(chan interface{}), - encode: encode, - decode: decode, - conn: conn, + closeCh: make(chan interface{}), + encode: encode, + decode: decode, + conn: conn, } if ra, ok := conn.(ConnRemoteAddr); ok { - codec.remoteAddr = ra.RemoteAddr() + codec.remote = ra.RemoteAddr() } return codec } -// 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 { +// NewCodec creates a codec on the given connection. If conn implements ConnRemoteAddr, log +// messages will use it to include the remote address of the connection. +func NewCodec(conn Conn) ServerCodec { enc := json.NewEncoder(conn) dec := json.NewDecoder(conn) dec.UseNumber() - return newCodec(conn, enc.Encode, dec.Decode) + return NewFuncCodec(conn, enc.Encode, dec.Decode) +} + +func (c *jsonCodec) peerInfo() PeerInfo { + // This returns "ipc" because all other built-in transports have a separate codec type. + return PeerInfo{Transport: "ipc", RemoteAddr: c.remote} } -func (c *jsonCodec) RemoteAddr() string { - return c.remoteAddr +func (c *jsonCodec) remoteAddr() string { + return c.remote } -func (c *jsonCodec) Read() (msg []*jsonrpcMessage, batch bool, err error) { +func (c *jsonCodec) readBatch() (messages []*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 + messages, batch = parseMessage(rawmsg) + for i, msg := range messages { + if msg == nil { + // Message is JSON 'null'. Replace with zero value so it + // will be treated like any other invalid message. + messages[i] = new(jsonrpcMessage) + } + } + return messages, batch, nil } -// Write sends a message to client. -func (c *jsonCodec) Write(ctx context.Context, v interface{}) error { +func (c *jsonCodec) writeJSON(ctx context.Context, v interface{}) error { c.encMu.Lock() defer c.encMu.Unlock() @@ -224,17 +237,16 @@ func (c *jsonCodec) Write(ctx context.Context, v interface{}) error { return c.encode(v) } -// Close the underlying connection -func (c *jsonCodec) Close() { +func (c *jsonCodec) close() { c.closer.Do(func() { - close(c.closed) + close(c.closeCh) c.conn.Close() }) } // Closed returns a channel which will be closed when Close is called -func (c *jsonCodec) Closed() <-chan interface{} { - return c.closed +func (c *jsonCodec) closed() <-chan interface{} { + return c.closeCh } // parseMessage parses raw bytes as a (batch of) JSON-RPC message(s). There are no error diff --git a/rpc/metrics.go b/rpc/metrics.go new file mode 100644 index 00000000..b1f12845 --- /dev/null +++ b/rpc/metrics.go @@ -0,0 +1,50 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "time" + + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil) + successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil) + failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", nil) + + // serveTimeHistName is the prefix of the per-request serving time histograms. + serveTimeHistName = "rpc/duration" + + rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil) +) + +// updateServeTimeHistogram tracks the serving time of a remote RPC call. +func updateServeTimeHistogram(method string, success bool, elapsed time.Duration) { + note := "success" + if !success { + note = "failure" + } + h := fmt.Sprintf("%s/%s/%s", serveTimeHistName, method, note) + sampler := func() metrics.Sample { + return metrics.ResettingSample( + metrics.NewExpDecaySample(1028, 0.015), + ) + } + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Microseconds()) +} diff --git a/rpc/server.go b/rpc/server.go index 165641ba..bf1f71a2 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -21,11 +21,12 @@ import ( "io" "sync/atomic" - "github.com/cryptoecc/ETH-ECC/log" mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/log" ) const MetadataApi = "rpc" +const EngineApi = "engine" // CodecOption specifies which type of messages a codec supports. // @@ -36,7 +37,7 @@ const ( // OptionMethodInvocation is an indication that the codec supports RPC method calls OptionMethodInvocation CodecOption = 1 << iota - // OptionSubscriptions is an indication that the codec suports RPC notifications + // OptionSubscriptions is an indication that the codec supports RPC notifications OptionSubscriptions = 1 << iota // support pub sub ) @@ -72,7 +73,7 @@ func (s *Server) RegisterName(name string, receiver interface{}) error { // // Note that codec options are no longer supported. func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { - defer codec.Close() + defer codec.close() // Don't serve if server is stopped. if atomic.LoadInt32(&s.run) == 0 { @@ -84,7 +85,7 @@ func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { defer s.codecs.Remove(codec) c := initClient(codec, s.idgen, &s.services) - <-codec.Closed() + <-codec.closed() c.Close() } @@ -101,10 +102,10 @@ func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) { h.allowSubscribe = false defer h.close(io.EOF, nil) - reqs, batch, err := codec.Read() + reqs, batch, err := codec.readBatch() if err != nil { if err != io.EOF { - codec.Write(ctx, errorMessage(&invalidMessageError{"parse error"})) + codec.writeJSON(ctx, errorMessage(&invalidMessageError{"parse error"})) } return } @@ -122,7 +123,7 @@ func (s *Server) Stop() { if atomic.CompareAndSwapInt32(&s.run, 1, 0) { log.Debug("RPC server shutting down") s.codecs.Each(func(c interface{}) bool { - c.(ServerCodec).Close() + c.(ServerCodec).close() return true }) } @@ -145,3 +146,38 @@ func (s *RPCService) Modules() map[string]string { } return modules } + +// PeerInfo contains information about the remote end of the network connection. +// +// This is available within RPC method handlers through the context. Call +// PeerInfoFromContext to get information about the client connection related to +// the current method call. +type PeerInfo struct { + // Transport is name of the protocol used by the client. + // This can be "http", "ws" or "ipc". + Transport string + + // Address of client. This will usually contain the IP address and port. + RemoteAddr string + + // Additional information for HTTP and WebSocket connections. + HTTP struct { + // Protocol version, i.e. "HTTP/1.1". This is not set for WebSocket. + Version string + // Header values sent by the client. + UserAgent string + Origin string + Host string + } +} + +type peerInfoContextKey struct{} + +// PeerInfoFromContext returns information about the client's network connection. +// Use this with the context passed to RPC method handler functions. +// +// The zero value is returned if no connection info is present in ctx. +func PeerInfoFromContext(ctx context.Context) PeerInfo { + info, _ := ctx.Value(peerInfoContextKey{}).(PeerInfo) + return info +} diff --git a/rpc/server_test.go b/rpc/server_test.go index 39099546..d09d3163 100644 --- a/rpc/server_test.go +++ b/rpc/server_test.go @@ -20,8 +20,8 @@ import ( "bufio" "bytes" "io" - "io/ioutil" "net" + "os" "path/filepath" "strings" "testing" @@ -45,14 +45,14 @@ func TestServerRegisterName(t *testing.T) { t.Fatalf("Expected service calc to be registered") } - wantCallbacks := 7 + wantCallbacks := 10 if len(svc.callbacks) != wantCallbacks { t.Errorf("Expected %d callbacks for service 'service', got %d", wantCallbacks, len(svc.callbacks)) } } func TestServer(t *testing.T) { - files, err := ioutil.ReadDir("testdata") + files, err := os.ReadDir("testdata") if err != nil { t.Fatal("where'd my testdata go?") } @@ -70,14 +70,14 @@ func TestServer(t *testing.T) { func runTestScript(t *testing.T, file string) { server := newTestServer() - content, err := ioutil.ReadFile(file) + content, err := os.ReadFile(file) if err != nil { t.Fatal(err) } clientConn, serverConn := net.Pipe() defer clientConn.Close() - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) + go server.ServeCodec(NewCodec(serverConn), 0) readbuf := bufio.NewReader(clientConn) for _, line := range strings.Split(string(content), "\n") { line = strings.TrimSpace(line) @@ -134,7 +134,7 @@ func TestServerShortLivedConn(t *testing.T) { if err != nil { t.Fatal("can't dial:", err) } - defer conn.Close() + conn.SetDeadline(deadline) // Write the request, then half-close the connection so the server stops reading. conn.Write([]byte(request)) @@ -142,6 +142,8 @@ func TestServerShortLivedConn(t *testing.T) { // Now try to get the response. buf := make([]byte, 2000) n, err := conn.Read(buf) + conn.Close() + if err != nil { t.Fatal("read error:", err) } diff --git a/rpc/service.go b/rpc/service.go index 24fb963f..bef891ea 100644 --- a/rpc/service.go +++ b/rpc/service.go @@ -25,9 +25,8 @@ import ( "strings" "sync" "unicode" - "unicode/utf8" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) var ( @@ -139,16 +138,14 @@ func newCallback(receiver, fn reflect.Value) *callback { 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) { + if len(outs) > 2 { return nil } // If an error is returned, it must be the last returned value. @@ -218,27 +215,6 @@ func (c *callback) call(ctx context.Context, method string, args []reflect.Value 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 { diff --git a/rpc/stdio.go b/rpc/stdio.go index d5dc066c..be2bab1c 100644 --- a/rpc/stdio.go +++ b/rpc/stdio.go @@ -33,7 +33,7 @@ func DialStdIO(ctx context.Context) (*Client, error) { // 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{ + return NewCodec(stdioConn{ in: in, out: out, }), nil diff --git a/rpc/subscription.go b/rpc/subscription.go index c1e869b8..d7ba784f 100644 --- a/rpc/subscription.go +++ b/rpc/subscription.go @@ -17,7 +17,6 @@ package rpc import ( - "bufio" "container/list" "context" crand "crypto/rand" @@ -35,7 +34,7 @@ import ( var ( // ErrNotificationsUnsupported is returned when the connection doesn't support notifications ErrNotificationsUnsupported = errors.New("notifications not supported") - // ErrNotificationNotFound is returned when the notification for the given id is not found + // ErrSubscriptionNotFound is returned when the notification for the given id is not found ErrSubscriptionNotFound = errors.New("subscription not found") ) @@ -51,10 +50,14 @@ func NewID() ID { // randomIDGenerator returns a function generates a random IDs. func randomIDGenerator() func() ID { - seed, err := binary.ReadVarint(bufio.NewReader(crand.Reader)) - if err != nil { + var buf = make([]byte, 8) + var seed int64 + if _, err := crand.Read(buf); err == nil { + seed = int64(binary.BigEndian.Uint64(buf)) + } else { seed = int64(time.Now().Nanosecond()) } + var ( mu sync.Mutex rng = rand.New(rand.NewSource(seed)) @@ -141,7 +144,7 @@ func (n *Notifier) Notify(id ID, data interface{}) error { // 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() + return n.h.conn.closed() } // takeSubscription returns the subscription (if one has been created). No subscription can @@ -153,7 +156,7 @@ func (n *Notifier) takeSubscription() *Subscription { return n.sub } -// acticate is called after the subscription ID was sent to client. Notifications are +// activate 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 { @@ -172,14 +175,14 @@ func (n *Notifier) activate() error { 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{ + return n.h.conn.writeJSON(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 +// A Subscription is created by a notifier and tied 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 @@ -205,23 +208,37 @@ type ClientSubscription struct { 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 + // The in channel receives notification values from client dispatcher. + in chan json.RawMessage + + // The error channel receives the error from the forwarding loop. + // It is closed by Unsubscribe. + err chan error + errOnce sync.Once + + // Closing of the subscription is requested by sending on 'quit'. This is handled by + // the forwarding loop, which closes 'forwardDone' when it has stopped sending to + // sub.channel. Finally, 'unsubDone' is closed after unsubscribing on the server side. + quit chan error + forwardDone chan struct{} + unsubDone chan struct{} } +// This is the sentinel value sent on sub.quit when Unsubscribe is called. +var errUnsubscribed = errors.New("unsubscribed") + 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), + client: c, + namespace: namespace, + etype: channel.Type().Elem(), + channel: channel, + in: make(chan json.RawMessage), + quit: make(chan error), + forwardDone: make(chan struct{}), + unsubDone: make(chan struct{}), + err: make(chan error, 1), } return sub } @@ -229,9 +246,9 @@ func newClientSubscription(c *Client, namespace string, channel reflect.Value) * // 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 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 { @@ -241,49 +258,71 @@ func (sub *ClientSubscription) Err() <-chan error { // 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 + sub.errOnce.Do(func() { + select { + case sub.quit <- errUnsubscribed: + <-sub.unsubDone + case <-sub.unsubDone: } + close(sub.err) }) } +// deliver is called by the client's message dispatcher to send a notification value. func (sub *ClientSubscription) deliver(result json.RawMessage) (ok bool) { select { case sub.in <- result: return true - case <-sub.quit: + case <-sub.forwardDone: return false } } -func (sub *ClientSubscription) start() { - sub.quitWithError(sub.forward()) +// close is called by the client's message dispatcher when the connection is closed. +func (sub *ClientSubscription) close(err error) { + select { + case sub.quit <- err: + case <-sub.forwardDone: + } +} + +// run is the forwarding loop of the subscription. It runs in its own goroutine and +// is launched by the client's handler after the subscription has been created. +func (sub *ClientSubscription) run() { + defer close(sub.unsubDone) + + unsubscribe, err := sub.forward() + + // The client's dispatch loop won't be able to execute the unsubscribe call if it is + // blocked in sub.deliver() or sub.close(). Closing forwardDone unblocks them. + close(sub.forwardDone) + + // Call the unsubscribe method on the server. + if unsubscribe { + sub.requestUnsubscribe() + } + + // Send the error. + if err != nil { + if err == ErrClientQuit { + // ErrClientQuit gets here when Client.Close is called. This is reported as a + // nil error because it's not an error, but we can't close sub.err here. + err = nil + } + sub.err <- err + } } -func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { +// forward is the forwarding loop. It takes in RPC notifications and sends them +// on the subscription channel. +func (sub *ClientSubscription) forward() (unsubscribeServer bool, err error) { 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 @@ -298,16 +337,25 @@ func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { switch chosen { case 0: // <-sub.quit - return nil, false + if !recv.IsNil() { + err = recv.Interface().(error) + } + if err == errUnsubscribed { + // Exiting because Unsubscribe was called, unsubscribe on server. + return true, nil + } + return false, err + case 1: // <-sub.in val, err := sub.unmarshal(recv.Interface().(json.RawMessage)) if err != nil { - return err, true + return true, err } if buffer.Len() == maxClientSubscriptionBuffer { - return ErrSubscriptionQueueOverflow, true + return true, ErrSubscriptionQueueOverflow } buffer.PushBack(val) + case 2: // sub.channel<- cases[2].Send = reflect.Value{} // Don't hold onto the value. buffer.Remove(buffer.Front()) diff --git a/rpc/subscription_test.go b/rpc/subscription_test.go index eba19245..a920205c 100644 --- a/rpc/subscription_test.go +++ b/rpc/subscription_test.go @@ -48,7 +48,7 @@ func TestNewID(t *testing.T) { func TestSubscriptions(t *testing.T) { var ( - namespaces = []string{"eth", "shh", "bzz"} + namespaces = []string{"eth", "bzz"} service = ¬ificationTestService{} subCount = len(namespaces) notificationCount = 3 @@ -68,7 +68,7 @@ func TestSubscriptions(t *testing.T) { t.Fatalf("unable to register test service %v", err) } } - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) + go server.ServeCodec(NewCodec(serverConn), 0) defer server.Stop() // wait for message and write them to the given channels @@ -125,22 +125,25 @@ func TestSubscriptions(t *testing.T) { // This test checks that unsubscribing works. func TestServerUnsubscribe(t *testing.T) { + p1, p2 := net.Pipe() + defer p2.Close() + // Start the server. server := newTestServer() - service := ¬ificationTestService{unsubscribed: make(chan string)} + service := ¬ificationTestService{unsubscribed: make(chan string, 1)} server.RegisterName("nftest2", service) - p1, p2 := net.Pipe() - go server.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) - - p2.SetDeadline(time.Now().Add(10 * time.Second)) + go server.ServeCodec(NewCodec(p1), 0) // Subscribe. + p2.SetDeadline(time.Now().Add(10 * time.Second)) 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) + var ( + resps = make(chan subConfirmation) + notifications = make(chan subscriptionResult) + errors = make(chan error, 1) + ) go waitForMessages(json.NewDecoder(p2), resps, notifications, errors) // Receive the subscription ID. @@ -173,34 +176,45 @@ type subConfirmation struct { subid ID } +// waitForMessages reads RPC messages from 'in' and dispatches them into the given channels. +// It stops if there is an error. 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) + resp, notification, err := readAndValidateMessage(in) + if err != nil { + errors <- err return + } else if resp != nil { + successes <- *resp + } else { + notifications <- *notification } - 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 + } +} + +func readAndValidateMessage(in *json.Decoder) (*subConfirmation, *subscriptionResult, error) { + var msg jsonrpcMessage + if err := in.Decode(&msg); err != nil { + return nil, nil, fmt.Errorf("decode error: %v", err) + } + switch { + case msg.isNotification(): + var res subscriptionResult + if err := json.Unmarshal(msg.Params, &res); err != nil { + return nil, nil, fmt.Errorf("invalid subscription result: %v", err) + } + return nil, &res, nil + case msg.isResponse(): + var c subConfirmation + if msg.Error != nil { + return nil, nil, msg.Error + } else if err := json.Unmarshal(msg.Result, &c.subid); err != nil { + return nil, nil, fmt.Errorf("invalid response: %v", err) + } else { + json.Unmarshal(msg.ID, &c.reqid) + return &c, nil, nil } + default: + return nil, nil, fmt.Errorf("unrecognized message: %v", msg) } } diff --git a/rpc/testdata/invalid-batch.js b/rpc/testdata/invalid-batch.js index f470574f..768dbc83 100644 --- a/rpc/testdata/invalid-batch.js +++ b/rpc/testdata/invalid-batch.js @@ -10,5 +10,8 @@ --> [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"}}] +--> [null] +<-- [{"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-nonobj.js b/rpc/testdata/invalid-nonobj.js index 4b9f4d99..ffdd4a5b 100644 --- a/rpc/testdata/invalid-nonobj.js +++ b/rpc/testdata/invalid-nonobj.js @@ -2,3 +2,6 @@ --> 1 <-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} + +--> null +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/rpc/testservice_test.go b/rpc/testservice_test.go index 98871b5d..253e2632 100644 --- a/rpc/testservice_test.go +++ b/rpc/testservice_test.go @@ -20,6 +20,7 @@ import ( "context" "encoding/binary" "errors" + "strings" "sync" "time" ) @@ -53,34 +54,50 @@ func sequentialIDGenerator() func() ID { type testService struct{} -type Args struct { +type echoArgs struct { S string } -type Result struct { +type echoResult struct { String string Int int - Args *Args + Args *echoArgs } +type testError struct{} + +func (testError) Error() string { return "testError" } +func (testError) ErrorCode() int { return 444 } +func (testError) ErrorData() interface{} { return "testError data" } + func (s *testService) NoArgsRets() {} -func (s *testService) Echo(str string, i int, args *Args) Result { - return Result{str, i, args} +func (s *testService) Echo(str string, i int, args *echoArgs) echoResult { + return echoResult{str, i, args} +} + +func (s *testService) EchoWithCtx(ctx context.Context, str string, i int, args *echoArgs) echoResult { + return echoResult{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) PeerInfo(ctx context.Context) PeerInfo { + return PeerInfoFromContext(ctx) } func (s *testService) Sleep(ctx context.Context, duration time.Duration) { time.Sleep(duration) } +func (s *testService) Block(ctx context.Context) error { + <-ctx.Done() + return errors.New("context canceled in testservice_block") +} + func (s *testService) Rets() (string, error) { return "", nil } +//lint:ignore ST1008 returns error first on purpose. func (s *testService) InvalidRets1() (error, string) { return nil, "" } @@ -93,6 +110,10 @@ func (s *testService) InvalidRets3() (string, string, error) { return "", "", nil } +func (s *testService) ReturnError() error { + return testError{} +} + func (s *testService) CallMeBack(ctx context.Context, method string, args []interface{}) (interface{}, error) { c, ok := ClientFromContext(ctx) if !ok { @@ -178,3 +199,12 @@ func (s *notificationTestService) HangSubscription(ctx context.Context, val int) }() return subscription, nil } + +// largeRespService generates arbitrary-size JSON responses. +type largeRespService struct { + length int +} + +func (x largeRespService) LargeResp() string { + return strings.Repeat("x", x.length) +} diff --git a/rpc/types.go b/rpc/types.go index 2d58fdc3..e3d1a489 100644 --- a/rpc/types.go +++ b/rpc/types.go @@ -18,52 +18,54 @@ package rpc import ( "context" + "encoding/json" "fmt" "math" + "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/common/hexutil" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) // API describes the set of methods offered over the RPC interface type API struct { - Namespace string // namespace under which the rpc methods of Service are exposed - Version string // api version for DApp's - Service interface{} // receiver instance which holds the methods - Public bool // indication if the methods must be considered safe for public use -} - -// Error wraps RPC errors, which contain an error code in addition to the message. -type Error interface { - Error() string // returns the message - ErrorCode() int // returns the code + Namespace string // namespace under which the rpc methods of Service are exposed + Version string // deprecated - this field is no longer used, but retained for compatibility + Service interface{} // receiver instance which holds the methods + Public bool // deprecated - this field is no longer used, but retained for compatibility + Authenticated bool // whether the api should only be available behind authentication. } // ServerCodec implements reading, parsing and writing RPC messages for the server side of // a RPC session. Implementations must be go-routine safe since the codec can be called in // multiple go-routines concurrently. type ServerCodec interface { - Read() (msgs []*jsonrpcMessage, isBatch bool, err error) - Close() + peerInfo() PeerInfo + readBatch() (msgs []*jsonrpcMessage, isBatch bool, err error) + close() + 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 + writeJSON(context.Context, interface{}) error // Closed returns a channel which is closed when the connection is closed. - Closed() <-chan interface{} + closed() <-chan interface{} // RemoteAddr returns the peer address of the connection. - RemoteAddr() string + remoteAddr() string } type BlockNumber int64 const ( - PendingBlockNumber = BlockNumber(-2) - LatestBlockNumber = BlockNumber(-1) - EarliestBlockNumber = BlockNumber(0) + SafeBlockNumber = BlockNumber(-4) + FinalizedBlockNumber = BlockNumber(-3) + PendingBlockNumber = BlockNumber(-2) + LatestBlockNumber = BlockNumber(-1) + EarliestBlockNumber = BlockNumber(0) ) // UnmarshalJSON parses the given JSON fragment into a BlockNumber. It supports: @@ -88,6 +90,12 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error { case "pending": *bn = PendingBlockNumber return nil + case "finalized": + *bn = FinalizedBlockNumber + return nil + case "safe": + *bn = SafeBlockNumber + return nil } blckNum, err := hexutil.DecodeUint64(input) @@ -95,13 +103,162 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error { return err } if blckNum > math.MaxInt64 { - return fmt.Errorf("Blocknumber too high") + return fmt.Errorf("block number larger than int64") } - *bn = BlockNumber(blckNum) return nil } +// MarshalText implements encoding.TextMarshaler. It marshals: +// - "latest", "earliest" or "pending" as strings +// - other numbers as hex +func (bn BlockNumber) MarshalText() ([]byte, error) { + switch bn { + case EarliestBlockNumber: + return []byte("earliest"), nil + case LatestBlockNumber: + return []byte("latest"), nil + case PendingBlockNumber: + return []byte("pending"), nil + case FinalizedBlockNumber: + return []byte("finalized"), nil + case SafeBlockNumber: + return []byte("safe"), nil + default: + return hexutil.Uint64(bn).MarshalText() + } +} + 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 + case "finalized": + bn := FinalizedBlockNumber + bnh.BlockNumber = &bn + return nil + case "safe": + bn := SafeBlockNumber + 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) String() string { + if bnh.BlockNumber != nil { + return strconv.Itoa(int(*bnh.BlockNumber)) + } + if bnh.BlockHash != nil { + return bnh.BlockHash.String() + } + return "nil" +} + +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, + } +} + +// DecimalOrHex unmarshals a non-negative decimal or hex parameter into a uint64. +type DecimalOrHex uint64 + +// UnmarshalJSON implements json.Unmarshaler. +func (dh *DecimalOrHex) UnmarshalJSON(data []byte) error { + input := strings.TrimSpace(string(data)) + if len(input) >= 2 && input[0] == '"' && input[len(input)-1] == '"' { + input = input[1 : len(input)-1] + } + + value, err := strconv.ParseUint(input, 10, 64) + if err != nil { + value, err = hexutil.DecodeUint64(input) + } + if err != nil { + return err + } + *dh = DecimalOrHex(value) + return nil +} diff --git a/rpc/types_test.go b/rpc/types_test.go index 4ba9d153..f110dee7 100644 --- a/rpc/types_test.go +++ b/rpc/types_test.go @@ -18,9 +18,11 @@ package rpc import ( "encoding/json" + "reflect" "testing" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" ) func TestBlockNumberJSONUnmarshal(t *testing.T) { @@ -64,3 +66,90 @@ 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) + } + } +} + +func TestBlockNumberOrHash_WithNumber_MarshalAndUnmarshal(t *testing.T) { + tests := []struct { + name string + number int64 + }{ + {"max", math.MaxInt64}, + {"pending", int64(PendingBlockNumber)}, + {"latest", int64(LatestBlockNumber)}, + {"earliest", int64(EarliestBlockNumber)}, + } + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + bnh := BlockNumberOrHashWithNumber(BlockNumber(test.number)) + marshalled, err := json.Marshal(bnh) + if err != nil { + t.Fatal("cannot marshal:", err) + } + var unmarshalled BlockNumberOrHash + err = json.Unmarshal(marshalled, &unmarshalled) + if err != nil { + t.Fatal("cannot unmarshal:", err) + } + if !reflect.DeepEqual(bnh, unmarshalled) { + t.Fatalf("wrong result: expected %v, got %v", bnh, unmarshalled) + } + }) + } +} diff --git a/rpc/websocket.go b/rpc/websocket.go index cc66a71b..28380d8a 100644 --- a/rpc/websocket.go +++ b/rpc/websocket.go @@ -25,26 +25,24 @@ import ( "os" "strings" "sync" + "time" - "github.com/cryptoecc/ETH-ECC/log" mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/log" "github.com/gorilla/websocket" ) const ( - wsReadBuffer = 1024 - wsWriteBuffer = 1024 + wsReadBuffer = 1024 + wsWriteBuffer = 1024 + wsPingInterval = 60 * time.Second + wsPingWriteTimeout = 5 * time.Second + wsPongTimeout = 30 * time.Second + wsMessageSizeLimit = 15 * 1024 * 1024 ) var wsBufferPool = new(sync.Pool) -// NewWSServer creates a new websocket RPC server around an API provider. -// -// Deprecated: use Server.WebsocketHandler -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. @@ -62,8 +60,8 @@ func (s *Server) WebsocketHandler(allowedOrigins []string) http.Handler { log.Debug("WebSocket upgrade failed", "err", err) return } - codec := newWebsocketCodec(conn) - s.ServeCodec(codec, OptionMethodInvocation|OptionSubscriptions) + codec := newWebsocketCodec(conn, r.Host, r.Header) + s.ServeCodec(codec, 0) }) } @@ -79,14 +77,14 @@ func wsHandshakeValidator(allowedOrigins []string) func(*http.Request) bool { allowAllOrigins = true } if origin != "" { - origins.Add(strings.ToLower(origin)) + origins.Add(origin) } } // allow localhost if no allowedOrigins are specified. if len(origins.ToSlice()) == 0 { origins.Add("http://localhost") if hostname, err := os.Hostname(); err == nil { - origins.Add("http://" + strings.ToLower(hostname)) + origins.Add("http://" + hostname) } } log.Debug(fmt.Sprintf("Allowed origin(s) for WS RPC interface %v", origins.ToSlice())) @@ -99,9 +97,9 @@ func wsHandshakeValidator(allowedOrigins []string) func(*http.Request) bool { if _, ok := req.Header["Origin"]; !ok { return true } - // Verify origin against whitelist. + // Verify origin against allow list. origin := strings.ToLower(req.Header.Get("Origin")) - if allowAllOrigins || origins.Contains(origin) { + if allowAllOrigins || originIsAllowed(origins, origin) { return true } log.Warn("Rejected WebSocket connection", "origin", origin) @@ -124,21 +122,72 @@ func (e wsHandshakeError) Error() string { return s } -// DialWebsocket creates a new RPC client that communicates with a JSON-RPC server -// that is listening on the given endpoint. -// -// 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) { +func originIsAllowed(allowedOrigins mapset.Set, browserOrigin string) bool { + it := allowedOrigins.Iterator() + for origin := range it.C { + if ruleAllowsOrigin(origin.(string), browserOrigin) { + return true + } + } + return false +} + +func ruleAllowsOrigin(allowedOrigin string, browserOrigin string) bool { + var ( + allowedScheme, allowedHostname, allowedPort string + browserScheme, browserHostname, browserPort string + err error + ) + allowedScheme, allowedHostname, allowedPort, err = parseOriginURL(allowedOrigin) + if err != nil { + log.Warn("Error parsing allowed origin specification", "spec", allowedOrigin, "error", err) + return false + } + browserScheme, browserHostname, browserPort, err = parseOriginURL(browserOrigin) + if err != nil { + log.Warn("Error parsing browser 'Origin' field", "Origin", browserOrigin, "error", err) + return false + } + if allowedScheme != "" && allowedScheme != browserScheme { + return false + } + if allowedHostname != "" && allowedHostname != browserHostname { + return false + } + if allowedPort != "" && allowedPort != browserPort { + return false + } + return true +} + +func parseOriginURL(origin string) (string, string, string, error) { + parsedURL, err := url.Parse(strings.ToLower(origin)) + if err != nil { + return "", "", "", err + } + var scheme, hostname, port string + if strings.Contains(origin, "://") { + scheme = parsedURL.Scheme + hostname = parsedURL.Hostname() + port = parsedURL.Port() + } else { + scheme = "" + hostname = parsedURL.Scheme + port = parsedURL.Opaque + if hostname == "" { + hostname = origin + } + } + return scheme, hostname, port, nil +} + +// DialWebsocketWithDialer creates a new RPC client that communicates with a JSON-RPC server +// that is listening on the given endpoint using the provided dialer. +func DialWebsocketWithDialer(ctx context.Context, endpoint, origin string, dialer websocket.Dialer) (*Client, error) { endpoint, header, err := wsClientHeaders(endpoint, origin) if err != nil { return nil, err } - 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 { @@ -148,10 +197,24 @@ func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error } return nil, hErr } - return newWebsocketCodec(conn), nil + return newWebsocketCodec(conn, endpoint, header), nil }) } +// DialWebsocket creates a new RPC client that communicates with a JSON-RPC server +// that is listening on the given endpoint. +// +// 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) { + dialer := websocket.Dialer{ + ReadBufferSize: wsReadBuffer, + WriteBufferSize: wsWriteBuffer, + WriteBufferPool: wsBufferPool, + } + return DialWebsocketWithDialer(ctx, endpoint, origin, dialer) +} + func wsClientHeaders(endpoint, origin string) (string, http.Header, error) { endpointURL, err := url.Parse(endpoint) if err != nil { @@ -169,7 +232,83 @@ func wsClientHeaders(endpoint, origin string) (string, http.Header, error) { return endpointURL.String(), header, nil } -func newWebsocketCodec(conn *websocket.Conn) ServerCodec { - conn.SetReadLimit(maxRequestContentLength) - return newCodec(conn, conn.WriteJSON, conn.ReadJSON) +type websocketCodec struct { + *jsonCodec + conn *websocket.Conn + info PeerInfo + + wg sync.WaitGroup + pingReset chan struct{} +} + +func newWebsocketCodec(conn *websocket.Conn, host string, req http.Header) ServerCodec { + conn.SetReadLimit(wsMessageSizeLimit) + conn.SetPongHandler(func(appData string) error { + conn.SetReadDeadline(time.Time{}) + return nil + }) + wc := &websocketCodec{ + jsonCodec: NewFuncCodec(conn, conn.WriteJSON, conn.ReadJSON).(*jsonCodec), + conn: conn, + pingReset: make(chan struct{}, 1), + info: PeerInfo{ + Transport: "ws", + RemoteAddr: conn.RemoteAddr().String(), + }, + } + // Fill in connection details. + wc.info.HTTP.Host = host + wc.info.HTTP.Origin = req.Get("Origin") + wc.info.HTTP.UserAgent = req.Get("User-Agent") + // Start pinger. + wc.wg.Add(1) + go wc.pingLoop() + return wc +} + +func (wc *websocketCodec) close() { + wc.jsonCodec.close() + wc.wg.Wait() +} + +func (wc *websocketCodec) peerInfo() PeerInfo { + return wc.info +} + +func (wc *websocketCodec) writeJSON(ctx context.Context, v interface{}) error { + err := wc.jsonCodec.writeJSON(ctx, v) + if err == nil { + // Notify pingLoop to delay the next idle ping. + select { + case wc.pingReset <- struct{}{}: + default: + } + } + return err +} + +// pingLoop sends periodic ping frames when the connection is idle. +func (wc *websocketCodec) pingLoop() { + var timer = time.NewTimer(wsPingInterval) + defer wc.wg.Done() + defer timer.Stop() + + for { + select { + case <-wc.closed(): + return + case <-wc.pingReset: + if !timer.Stop() { + <-timer.C + } + timer.Reset(wsPingInterval) + case <-timer.C: + wc.jsonCodec.encMu.Lock() + wc.conn.SetWriteDeadline(time.Now().Add(wsPingWriteTimeout)) + wc.conn.WriteMessage(websocket.PingMessage, nil) + wc.conn.SetReadDeadline(time.Now().Add(wsPongTimeout)) + wc.jsonCodec.encMu.Unlock() + timer.Reset(wsPingInterval) + } + } } diff --git a/rpc/websocket_test.go b/rpc/websocket_test.go index 907f34b6..f74b7fd0 100644 --- a/rpc/websocket_test.go +++ b/rpc/websocket_test.go @@ -18,11 +18,15 @@ package rpc import ( "context" + "errors" + "io" "net" "net/http" "net/http/httptest" - "reflect" + "net/http/httputil" + "net/url" "strings" + "sync/atomic" "testing" "time" @@ -65,14 +69,14 @@ func TestWebsocketOriginCheck(t *testing.T) { t.Fatal("no error for wrong origin") } wantErr := wsHandshakeError{websocket.ErrBadHandshake, "403 Forbidden"} - if !reflect.DeepEqual(err, wantErr) { + if !errors.Is(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") + t.Fatalf("error for empty origin: %v", err) } client.Close() } @@ -96,7 +100,7 @@ func TestWebsocketLargeCall(t *testing.T) { defer client.Close() // This call sends slightly less than the limit and should work. - var result Result + var result echoResult 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) @@ -113,6 +117,41 @@ func TestWebsocketLargeCall(t *testing.T) { } } +func TestWebsocketPeerInfo(t *testing.T) { + var ( + s = newTestServer() + ts = httptest.NewServer(s.WebsocketHandler([]string{"origin.example.com"})) + tsurl = "ws:" + strings.TrimPrefix(ts.URL, "http:") + ) + defer s.Stop() + defer ts.Close() + + ctx := context.Background() + c, err := DialWebsocket(ctx, tsurl, "origin.example.com") + if err != nil { + t.Fatal(err) + } + + // Request peer information. + var connInfo PeerInfo + if err := c.Call(&connInfo, "test_peerInfo"); err != nil { + t.Fatal(err) + } + + if connInfo.RemoteAddr == "" { + t.Error("RemoteAddr not set") + } + if connInfo.Transport != "ws" { + t.Errorf("wrong Transport %q", connInfo.Transport) + } + if connInfo.HTTP.UserAgent != "Go-http-client/1.1" { + t.Errorf("wrong HTTP.UserAgent %q", connInfo.HTTP.UserAgent) + } + if connInfo.HTTP.Origin != "origin.example.com" { + t.Errorf("wrong HTTP.Origin %q", connInfo.HTTP.UserAgent) + } +} + // This test checks that client handles WebSocket ping frames correctly. func TestClientWebsocketPing(t *testing.T) { t.Parallel() @@ -129,19 +168,24 @@ func TestClientWebsocketPing(t *testing.T) { if err != nil { t.Fatalf("client dial error: %v", err) } + defer client.Close() + resultChan := make(chan int) sub, err := client.EthSubscribe(ctx, resultChan, "foo") if err != nil { t.Fatalf("client subscribe error: %v", err) } + // Note: Unsubscribe is not called on this subscription because the mockup + // server can't handle the request. // Wait for the context's deadline to be reached before proceeding. - // This is important for reproducing https://github.com/cryptoecc/ETH-ECC/issues/19798 + // 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) + defer timeout.Stop() for { select { case err := <-sub.Err(): @@ -156,6 +200,90 @@ func TestClientWebsocketPing(t *testing.T) { } } +// This checks that the websocket transport can deal with large messages. +func TestClientWebsocketLargeMessage(t *testing.T) { + var ( + srv = NewServer() + httpsrv = httptest.NewServer(srv.WebsocketHandler(nil)) + wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") + ) + defer srv.Stop() + defer httpsrv.Close() + + respLength := wsMessageSizeLimit - 50 + srv.RegisterName("test", largeRespService{respLength}) + + c, err := DialWebsocket(context.Background(), wsURL, "") + if err != nil { + t.Fatal(err) + } + + var r string + if err := c.Call(&r, "test_largeResp"); err != nil { + t.Fatal("call failed:", err) + } + if len(r) != respLength { + t.Fatalf("response has wrong length %d, want %d", len(r), respLength) + } +} + +func TestClientWebsocketSevered(t *testing.T) { + t.Parallel() + + var ( + server = wsPingTestServer(t, nil) + ctx = context.Background() + ) + defer server.Shutdown(ctx) + + u, err := url.Parse("http://" + server.Addr) + if err != nil { + t.Fatal(err) + } + rproxy := httputil.NewSingleHostReverseProxy(u) + var severable *severableReadWriteCloser + rproxy.ModifyResponse = func(response *http.Response) error { + severable = &severableReadWriteCloser{ReadWriteCloser: response.Body.(io.ReadWriteCloser)} + response.Body = severable + return nil + } + frontendProxy := httptest.NewServer(rproxy) + defer frontendProxy.Close() + + wsURL := "ws:" + strings.TrimPrefix(frontendProxy.URL, "http:") + client, err := DialWebsocket(ctx, wsURL, "") + if err != nil { + t.Fatalf("client dial error: %v", err) + } + defer client.Close() + + resultChan := make(chan int) + sub, err := client.EthSubscribe(ctx, resultChan, "foo") + if err != nil { + t.Fatalf("client subscribe error: %v", err) + } + + // sever the connection + severable.Sever() + + // Wait for subscription error. + timeout := time.NewTimer(3 * wsPingInterval) + defer timeout.Stop() + for { + select { + case err := <-sub.Err(): + t.Log("client subscription error:", err) + return + case result := <-resultChan: + t.Error("unexpected result:", result) + return + case <-timeout.C: + t.Error("didn't get any error within the test timeout") + return + } + } +} + // 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. @@ -227,9 +355,11 @@ func wsPingTestHandler(t *testing.T, conn *websocket.Conn, shutdown, sendPing <- // Write messages. var ( - sendResponse <-chan time.Time - wantPong string + wantPong string + timer = time.NewTimer(0) ) + defer timer.Stop() + <-timer.C for { select { case _, open := <-sendPing: @@ -246,14 +376,41 @@ func wsPingTestHandler(t *testing.T, conn *websocket.Conn, shutdown, sendPing <- t.Errorf("got pong with wrong data %q", data) } wantPong = "" - sendResponse = time.NewTimer(200 * time.Millisecond).C - case <-sendResponse: + timer.Reset(200 * time.Millisecond) + case <-timer.C: t.Logf("server sending response") conn.WriteMessage(websocket.TextMessage, []byte(subNotify)) - sendResponse = nil case <-shutdown: conn.Close() return } } } + +// severableReadWriteCloser wraps an io.ReadWriteCloser and provides a Sever() method to drop writes and read empty. +type severableReadWriteCloser struct { + io.ReadWriteCloser + severed int32 // atomic +} + +func (s *severableReadWriteCloser) Sever() { + atomic.StoreInt32(&s.severed, 1) +} + +func (s *severableReadWriteCloser) Read(p []byte) (n int, err error) { + if atomic.LoadInt32(&s.severed) > 0 { + return 0, nil + } + return s.ReadWriteCloser.Read(p) +} + +func (s *severableReadWriteCloser) Write(p []byte) (n int, err error) { + if atomic.LoadInt32(&s.severed) > 0 { + return len(p), nil + } + return s.ReadWriteCloser.Write(p) +} + +func (s *severableReadWriteCloser) Close() error { + return s.ReadWriteCloser.Close() +} diff --git a/signer/core/api.go b/signer/core/api.go index f0c6b1aa..f10f03d8 100644 --- a/signer/core/api.go +++ b/signer/core/api.go @@ -25,25 +25,26 @@ import ( "os" "reflect" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/accounts/scwallet" - "github.com/cryptoecc/ETH-ECC/accounts/usbwallet" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/signer/storage" + "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/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/signer/core/apitypes" + "github.com/ethereum/go-ethereum/signer/storage" ) const ( // numberOfAccountsToDerive For hardware wallets, the number of accounts to derive numberOfAccountsToDerive = 10 // ExternalAPIVersion -- see extapi_changelog.md - ExternalAPIVersion = "6.0.0" + ExternalAPIVersion = "6.1.0" // InternalAPIVersion -- see intapi_changelog.md - InternalAPIVersion = "7.0.0" + InternalAPIVersion = "7.0.1" ) // ExternalAPI defines the external API through which signing requests are made. @@ -53,15 +54,17 @@ type ExternalAPI interface { // New request to create a new account 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) + SignTransaction(ctx context.Context, args apitypes.SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, 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) + SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data apitypes.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) + // SignGnosisSafeTransaction signs/confirms a gnosis-safe multisig transaction + SignGnosisSafeTx(ctx context.Context, signerAddress common.MixedcaseAddress, gnosisTx GnosisSafeTx, methodSelector *string) (*GnosisSafeTx, error) } // UIClientAPI specifies what method a UI needs to implement to be able to be used as a @@ -103,7 +106,7 @@ 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) + ValidateTransaction(selector *string, tx *apitypes.SendTxArgs) (*apitypes.ValidationMessages, error) } // SignerAPI defines the actual implementation of ExternalAPI @@ -186,23 +189,24 @@ func StartClefAccountManager(ksLocation string, nousb, lightKDF bool, scpath str // MetadataFromContext extracts Metadata from a given context.Context func MetadataFromContext(ctx context.Context) Metadata { + info := rpc.PeerInfoFromContext(ctx) + m := Metadata{"NA", "NA", "NA", "", ""} // batman - if v := ctx.Value("remote"); v != nil { - m.Remote = v.(string) - } - if v := ctx.Value("scheme"); v != nil { - m.Scheme = v.(string) - } - if v := ctx.Value("local"); v != nil { - m.Local = v.(string) + if info.Transport != "" { + if info.Transport == "http" { + m.Scheme = info.HTTP.Version + } + m.Scheme = info.Transport } - if v := ctx.Value("Origin"); v != nil { - m.Origin = v.(string) + if info.RemoteAddr != "" { + m.Remote = info.RemoteAddr } - if v := ctx.Value("User-Agent"); v != nil { - m.UserAgent = v.(string) + if info.HTTP.Host != "" { + m.Local = info.HTTP.Host } + m.Origin = info.HTTP.Origin + m.UserAgent = info.HTTP.UserAgent return m } @@ -219,23 +223,24 @@ func (m Metadata) String() string { type ( // SignTxRequest contains info about a Transaction to sign SignTxRequest struct { - Transaction SendTxArgs `json:"transaction"` - Callinfo []ValidationInfo `json:"call_info"` - Meta Metadata `json:"meta"` + Transaction apitypes.SendTxArgs `json:"transaction"` + Callinfo []apitypes.ValidationInfo `json:"call_info"` + Meta Metadata `json:"meta"` } // SignTxResponse result from SignTxRequest SignTxResponse struct { //The UI may make changes to the TX - Transaction SendTxArgs `json:"transaction"` - Approved bool `json:"approved"` + Transaction apitypes.SendTxArgs `json:"transaction"` + Approved bool `json:"approved"` } SignDataRequest struct { - 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"` + ContentType string `json:"content_type"` + Address common.MixedcaseAddress `json:"address"` + Rawdata []byte `json:"raw_data"` + Messages []*apitypes.NameValueType `json:"messages"` + Callinfo []apitypes.ValidationInfo `json:"call_info"` + Hash hexutil.Bytes `json:"hash"` + Meta Metadata `json:"meta"` } SignDataResponse struct { Approved bool `json:"approved"` @@ -269,7 +274,7 @@ type ( } ) -var ErrRequestDenied = errors.New("Request denied") +var ErrRequestDenied = errors.New("request denied") // NewSignerAPI creates a new API that can be used for Account management. // ksLocation specifies the directory where to store the password protected private @@ -314,64 +319,77 @@ func (api *SignerAPI) openTrezor(url accounts.URL) { log.Warn("failed to open wallet", "wallet", url, "err", err) return } - } // startUSBListener starts a listener for USB events, for hardware wallet interaction func (api *SignerAPI) startUSBListener() { - events := make(chan accounts.WalletEvent, 16) + eventCh := make(chan accounts.WalletEvent, 16) am := api.am - am.Subscribe(events) - go func() { + am.Subscribe(eventCh) + // Open any wallets already attached + for _, wallet := range am.Wallets() { + if err := wallet.Open(""); err != nil { + log.Warn("Failed to open wallet", "url", wallet.URL(), "err", err) + if err == usbwallet.ErrTrezorPINNeeded { + go api.openTrezor(wallet.URL()) + } + } + } + go api.derivationLoop(eventCh) +} - // Open any wallets already attached - for _, wallet := range am.Wallets() { - if err := wallet.Open(""); err != nil { - log.Warn("Failed to open wallet", "url", wallet.URL(), "err", err) +// derivationLoop listens for wallet events +func (api *SignerAPI) derivationLoop(events chan accounts.WalletEvent) { + // Listen for wallet event till termination + for event := range events { + switch event.Kind { + case accounts.WalletArrived: + if err := event.Wallet.Open(""); err != nil { + log.Warn("New wallet appeared, failed to open", "url", event.Wallet.URL(), "err", err) if err == usbwallet.ErrTrezorPINNeeded { - go api.openTrezor(wallet.URL()) + go api.openTrezor(event.Wallet.URL()) } } - } - // Listen for wallet event till termination - for event := range events { - switch event.Kind { - case accounts.WalletArrived: - if err := event.Wallet.Open(""); err != nil { - log.Warn("New wallet appeared, failed to open", "url", event.Wallet.URL(), "err", err) - if err == usbwallet.ErrTrezorPINNeeded { - go api.openTrezor(event.Wallet.URL()) - } - } - case accounts.WalletOpened: - status, _ := event.Wallet.Status() - log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status) - + case accounts.WalletOpened: + status, _ := event.Wallet.Status() + log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status) + var derive = func(limit int, next func() accounts.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 { - log.Warn("account derivation failed", "error", err) + for i := 0; i < limit; i++ { + path := next() + if acc, err := event.Wallet.Derive(path, true); err != nil { + log.Warn("Account derivation failed", "error", err) } else { - log.Info("derived account", "address", acc.Address) + log.Info("Derived account", "address", acc.Address, "path", path) } - nextPath[len(nextPath)-1]++ } - case accounts.WalletDropped: - log.Info("Old wallet dropped", "url", event.Wallet.URL()) - event.Wallet.Close() } + log.Info("Deriving default paths") + derive(numberOfAccountsToDerive, accounts.DefaultIterator(accounts.DefaultBaseDerivationPath)) + if event.Wallet.URL().Scheme == "ledger" { + log.Info("Deriving ledger legacy paths") + derive(numberOfAccountsToDerive, accounts.DefaultIterator(accounts.LegacyLedgerBaseDerivationPath)) + log.Info("Deriving ledger live paths") + // For ledger live, since it's based off the same (DefaultBaseDerivationPath) + // as one we've already used, we need to step it forward one step to avoid + // hitting the same path again + nextFn := accounts.LedgerLiveIterator(accounts.DefaultBaseDerivationPath) + nextFn() + derive(numberOfAccountsToDerive, nextFn) + } + case accounts.WalletDropped: + log.Info("Old wallet dropped", "url", event.Wallet.URL()) + event.Wallet.Close() } - }() + } } // 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 []accounts.Account + var accs = make([]accounts.Account, 0) + // accs is initialized as empty list, not nil. We use 'nil' to signal + // rejection, as opposed to an empty list. for _, wallet := range api.am.Wallets() { accs = append(accs, wallet.Accounts()...) } @@ -381,13 +399,11 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { } if result.Accounts == nil { return nil, ErrRequestDenied - } addresses := make([]common.Address, 0) for _, acc := range result.Accounts { addresses = append(addresses, acc.Address) } - return addresses, nil } @@ -395,8 +411,7 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { // 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) (common.Address, error) { - be := api.am.Backends(keystore.KeyStoreType) - if len(be) == 0 { + if be := api.am.Backends(keystore.KeyStoreType); len(be) == 0 { return common.Address{}, errors.New("password based accounts not supported") } if resp, err := api.UI.ApproveNewAccount(&NewAccountRequest{MetadataFromContext(ctx)}); err != nil { @@ -404,7 +419,16 @@ func (api *SignerAPI) New(ctx context.Context) (common.Address, error) { } else if !resp.Approved { return common.Address{}, ErrRequestDenied } + return api.newAccount() +} +// newAccount is the internal method to create a new account. It should be used +// _after_ user-approval has been obtained +func (api *SignerAPI) newAccount() (common.Address, error) { + be := api.am.Backends(keystore.KeyStoreType) + if len(be) == 0 { + return common.Address{}, errors.New("password based accounts not supported") + } // Three retries to get a valid password for i := 0; i < 3; i++ { resp, err := api.UI.OnInputRequired(UserInputRequest{ @@ -416,7 +440,7 @@ func (api *SignerAPI) New(ctx context.Context) (common.Address, error) { continue } 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)) + api.UI.ShowError(fmt.Sprintf("Account creation attempt #%d failed due to password requirements: %v", i+1, pwErr)) } else { // No error acc, err := be[0].(*keystore.KeyStore).NewAccount(resp.Text) @@ -434,6 +458,16 @@ func (api *SignerAPI) New(ctx context.Context) (common.Address, error) { // it also returns 'true' if the transaction was modified, to make it possible to configure the signer not to allow // UI-modifications to requests func logDiff(original *SignTxRequest, new *SignTxResponse) bool { + var intPtrModified = func(a, b *hexutil.Big) bool { + aBig := (*big.Int)(a) + bBig := (*big.Int)(b) + if aBig != nil && bBig != nil { + return aBig.Cmp(bBig) != 0 + } + // One or both of them are nil + return a != b + } + modified := false if f0, f1 := original.Transaction.From, new.Transaction.From; !reflect.DeepEqual(f0, f1) { log.Info("Sender-account changed by UI", "was", f0, "is", f1) @@ -447,9 +481,17 @@ func logDiff(original *SignTxRequest, new *SignTxResponse) bool { modified = true log.Info("Gas changed by UI", "was", g0, "is", g1) } - if g0, g1 := big.Int(original.Transaction.GasPrice), big.Int(new.Transaction.GasPrice); g0.Cmp(&g1) != 0 { + if a, b := original.Transaction.GasPrice, new.Transaction.GasPrice; intPtrModified(a, b) { + log.Info("GasPrice changed by UI", "was", a, "is", b) + modified = true + } + if a, b := original.Transaction.MaxPriorityFeePerGas, new.Transaction.MaxPriorityFeePerGas; intPtrModified(a, b) { + log.Info("maxPriorityFeePerGas changed by UI", "was", a, "is", b) + modified = true + } + if a, b := original.Transaction.MaxFeePerGas, new.Transaction.MaxFeePerGas; intPtrModified(a, b) { + log.Info("maxFeePerGas changed by UI", "was", a, "is", b) modified = true - log.Info("GasPrice changed by UI", "was", g0, "is", g1) } if v0, v1 := big.Int(original.Transaction.Value), big.Int(new.Transaction.Value); v0.Cmp(&v1) != 0 { modified = true @@ -497,7 +539,7 @@ func (api *SignerAPI) lookupOrQueryPassword(address common.Address, title, promp } // 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) { +func (api *SignerAPI) SignTransaction(ctx context.Context, args apitypes.SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { var ( err error result SignTxResponse @@ -508,10 +550,18 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth } // If we are in 'rejectMode', then reject rather than show the user warnings if api.rejectMode { - if err := msgs.getWarnings(); err != nil { + if err := msgs.GetWarnings(); err != nil { return nil, err } } + if args.ChainID != nil { + requestedChainId := (*big.Int)(args.ChainID) + if api.chainID.Cmp(requestedChainId) != 0 { + log.Error("Signing request with wrong chain id", "requested", requestedChainId, "configured", api.chainID) + return nil, fmt.Errorf("requested chainid %d does not match the configuration of the signer", + requestedChainId) + } + } req := SignTxRequest{ Transaction: args, Meta: MetadataFromContext(ctx), @@ -537,7 +587,7 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth return nil, err } // Convert fields into a real transaction - var unsignedTx = result.Transaction.toTransaction() + 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())) @@ -551,14 +601,43 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth return nil, err } - rlpdata, err := rlp.EncodeToBytes(signedTx) - response := ethapi.SignTransactionResult{Raw: rlpdata, Tx: signedTx} + data, err := signedTx.MarshalBinary() + if err != nil { + return nil, err + } + response := ethapi.SignTransactionResult{Raw: data, Tx: signedTx} // Finally, send the signed tx to the UI api.UI.OnApprovedTx(response) // ...and to the external caller return &response, nil +} + +func (api *SignerAPI) SignGnosisSafeTx(ctx context.Context, signerAddress common.MixedcaseAddress, gnosisTx GnosisSafeTx, methodSelector *string) (*GnosisSafeTx, error) { + // Do the usual validations, but on the last-stage transaction + args := gnosisTx.ArgsForValidation() + msgs, err := api.validator.ValidateTransaction(methodSelector, args) + if err != nil { + return nil, err + } + // If we are in 'rejectMode', then reject rather than show the user warnings + if api.rejectMode { + if err := msgs.GetWarnings(); err != nil { + return nil, err + } + } + typedData := gnosisTx.ToTypedData() + signature, preimage, err := api.signTypedData(ctx, signerAddress, typedData, msgs) + if err != nil { + return nil, err + } + checkSummedSender, _ := common.NewMixedcaseAddressFromString(signerAddress.Address().Hex()) + + gnosisTx.Signature = signature + gnosisTx.SafeTxHash = common.BytesToHash(preimage) + gnosisTx.Sender = *checkSummedSender // Must be checksumed to be accepted by relay + return &gnosisTx, nil } // Returns the external api version. This method does not require user acceptance. Available methods are diff --git a/signer/core/api_test.go b/signer/core/api_test.go index 655a5867..6fa2af18 100644 --- a/signer/core/api_test.go +++ b/signer/core/api_test.go @@ -20,23 +20,23 @@ import ( "bytes" "context" "fmt" - "io/ioutil" "math/big" "os" "path/filepath" "testing" "time" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/cryptoecc/ETH-ECC/signer/core" - "github.com/cryptoecc/ETH-ECC/signer/fourbyte" - "github.com/cryptoecc/ETH-ECC/signer/storage" + "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/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/core/apitypes" + "github.com/ethereum/go-ethereum/signer/fourbyte" + "github.com/ethereum/go-ethereum/signer/storage" ) //Used for testing @@ -55,14 +55,13 @@ func (ui *headlessUi) RegisterUIServer(api *core.UIServerAPI) {} func (ui *headlessUi) OnApprovedTx(tx ethapi.SignTransactionResult) {} func (ui *headlessUi) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { - switch <-ui.approveCh { case "Y": 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)) + newVal := new(big.Int).Add(&old, big.NewInt(1)) request.Transaction.Value = hexutil.Big(*newVal) return core.SignTxResponse{request.Transaction, true}, nil default: @@ -71,7 +70,7 @@ func (ui *headlessUi) ApproveTx(request *core.SignTxRequest) (core.SignTxRespons } func (ui *headlessUi) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { - approved := "Y" == <-ui.approveCh + approved := (<-ui.approveCh == "Y") return core.SignDataResponse{approved}, nil } @@ -91,7 +90,7 @@ func (ui *headlessUi) ApproveListing(request *core.ListRequest) (core.ListRespon } func (ui *headlessUi) ApproveNewAccount(request *core.NewAccountRequest) (core.NewAccountResponse, error) { - if "Y" == <-ui.approveCh { + if <-ui.approveCh == "Y" { return core.NewAccountResponse{true}, nil } return core.NewAccountResponse{false}, nil @@ -108,11 +107,8 @@ func (ui *headlessUi) ShowInfo(message string) { } func tmpDirName(t *testing.T) string { - d, err := ioutil.TempDir("", "eth-keystore-test") - if err != nil { - t.Fatal(err) - } - d, err = filepath.EvalSymlinks(d) + d := t.TempDir() + d, err := filepath.EvalSymlinks(d) if err != nil { t.Fatal(err) } @@ -128,7 +124,6 @@ func setup(t *testing.T) (*core.SignerAPI, *headlessUi) { am := core.StartClefAccountManager(tmpDirName(t), true, true, "") api := core.NewSignerAPI(am, 1337, true, ui, db, true, &storage.NoStorage{}) return api, ui - } func createAccount(ui *headlessUi, api *core.SignerAPI, t *testing.T) { ui.approveCh <- "Y" @@ -142,7 +137,6 @@ func createAccount(ui *headlessUi, api *core.SignerAPI, t *testing.T) { } func failCreateAccountWithPassword(ui *headlessUi, api *core.SignerAPI, password string, t *testing.T) { - ui.approveCh <- "Y" // We will be asked three times to provide a suitable password ui.inputCh <- password @@ -172,7 +166,6 @@ func failCreateAccount(ui *headlessUi, api *core.SignerAPI, t *testing.T) { 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) { @@ -223,18 +216,18 @@ func TestNewAcc(t *testing.T) { } } -func mkTestTx(from common.MixedcaseAddress) core.SendTxArgs { +func mkTestTx(from common.MixedcaseAddress) apitypes.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 := core.SendTxArgs{ + tx := apitypes.SendTxArgs{ From: from, To: &to, Gas: gas, - GasPrice: gasPrice, + GasPrice: &gasPrice, Value: value, Data: &data, Nonce: nonce} @@ -255,6 +248,9 @@ func TestSignTx(t *testing.T) { if err != nil { t.Fatal(err) } + if len(list) == 0 { + t.Fatal("Unexpected empty list") + } a := common.NewMixedcaseAddress(list[0]) methodSig := "test(uint)" @@ -321,5 +317,4 @@ func TestSignTx(t *testing.T) { if bytes.Equal(res.Raw, res2.Raw) { t.Error("Expected tx to be modified by UI") } - } diff --git a/signer/core/apitypes/signed_data_internal_test.go b/signer/core/apitypes/signed_data_internal_test.go new file mode 100644 index 00000000..121cc00d --- /dev/null +++ b/signer/core/apitypes/signed_data_internal_test.go @@ -0,0 +1,145 @@ +// 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 apitypes + +import ( + "bytes" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common/hexutil" +) + +func TestBytesPadding(t *testing.T) { + tests := []struct { + Type string + Input []byte + Output []byte // nil => error + }{ + { + // Fail on wrong length + Type: "bytes20", + Input: []byte{}, + Output: nil, + }, + { + Type: "bytes1", + Input: []byte{1}, + Output: []byte{1, 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}, + }, + { + Type: "bytes1", + Input: []byte{1, 2}, + Output: nil, + }, + { + Type: "bytes7", + Input: []byte{1, 2, 3, 4, 5, 6, 7}, + Output: []byte{1, 2, 3, 4, 5, 6, 7, 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}, + }, + { + Type: "bytes32", + Input: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, + Output: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, + }, + { + Type: "bytes32", + Input: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}, + Output: nil, + }, + } + + d := TypedData{} + for i, test := range tests { + val, err := d.EncodePrimitiveValue(test.Type, test.Input, 1) + if test.Output == nil { + if err == nil { + t.Errorf("test %d: expected error, got no error (result %x)", i, val) + } + } else { + if err != nil { + t.Errorf("test %d: expected no error, got %v", i, err) + } + if len(val) != 32 { + t.Errorf("test %d: expected len 32, got %d", i, len(val)) + } + if !bytes.Equal(val, test.Output) { + t.Errorf("test %d: expected %x, got %x", i, test.Output, val) + } + } + } +} + +func TestParseBytes(t *testing.T) { + for i, tt := range []struct { + v interface{} + exp []byte + }{ + {"0x", []byte{}}, + {"0x1234", []byte{0x12, 0x34}}, + {[]byte{12, 34}, []byte{12, 34}}, + {hexutil.Bytes([]byte{12, 34}), []byte{12, 34}}, + {"1234", nil}, // not a proper hex-string + {"0x01233", nil}, // nibbles should be rejected + {"not a hex string", nil}, + {15, nil}, + {nil, nil}, + } { + out, ok := parseBytes(tt.v) + if tt.exp == nil { + if ok || out != nil { + t.Errorf("test %d: expected !ok, got ok = %v with out = %x", i, ok, out) + } + continue + } + if !ok { + t.Errorf("test %d: expected ok got !ok", i) + } + if !bytes.Equal(out, tt.exp) { + t.Errorf("test %d: expected %x got %x", i, tt.exp, out) + } + } +} + +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 + } + if tt.exp == nil && res != nil { + t.Errorf("test %d, got %v, expected nil", i, res) + continue + } + 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/apitypes/types.go b/signer/core/apitypes/types.go new file mode 100644 index 00000000..0652108f --- /dev/null +++ b/signer/core/apitypes/types.go @@ -0,0 +1,896 @@ +// 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 apitypes + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "math/big" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "unicode" + "unicode/utf8" + + "github.com/ethereum/go-ethereum/accounts" + "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/types" + "github.com/ethereum/go-ethereum/crypto" +) + +var typedDataReferenceTypeRegexp = regexp.MustCompile(`^[A-Z](\w*)(\[\])?$`) + +type ValidationInfo struct { + Typ string `json:"type"` + Message string `json:"message"` +} +type ValidationMessages struct { + Messages []ValidationInfo +} + +const ( + WARN = "WARNING" + CRIT = "CRITICAL" + INFO = "Info" +) + +func (vs *ValidationMessages) Crit(msg string) { + vs.Messages = append(vs.Messages, ValidationInfo{CRIT, msg}) +} +func (vs *ValidationMessages) Warn(msg string) { + vs.Messages = append(vs.Messages, ValidationInfo{WARN, msg}) +} +func (vs *ValidationMessages) Info(msg string) { + vs.Messages = append(vs.Messages, ValidationInfo{INFO, msg}) +} + +/// getWarnings returns an error with all messages of type WARN of above, or nil if no warnings were present +func (v *ValidationMessages) GetWarnings() error { + var messages []string + for _, msg := range v.Messages { + if msg.Typ == WARN || msg.Typ == CRIT { + messages = append(messages, msg.Message) + } + } + if len(messages) > 0 { + return fmt.Errorf("validation failed: %s", strings.Join(messages, ",")) + } + return nil +} + +// SendTxArgs represents the arguments to submit a transaction +// This struct is identical to ethapi.TransactionArgs, except for the usage of +// common.MixedcaseAddress in From and To +type SendTxArgs struct { + From common.MixedcaseAddress `json:"from"` + To *common.MixedcaseAddress `json:"to"` + Gas hexutil.Uint64 `json:"gas"` + GasPrice *hexutil.Big `json:"gasPrice"` + MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"` + MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"` + Value hexutil.Big `json:"value"` + Nonce hexutil.Uint64 `json:"nonce"` + + // We accept "data" and "input" for backwards-compatibility reasons. + // "input" is the newer name and should be preferred by clients. + // Issue detail: https://github.com/ethereum/go-ethereum/issues/15628 + Data *hexutil.Bytes `json:"data"` + Input *hexutil.Bytes `json:"input,omitempty"` + + // For non-legacy transactions + AccessList *types.AccessList `json:"accessList,omitempty"` + ChainID *hexutil.Big `json:"chainId,omitempty"` +} + +func (args SendTxArgs) String() string { + s, err := json.Marshal(args) + if err == nil { + return string(s) + } + return err.Error() +} + +// ToTransaction converts the arguments to a transaction. +func (args *SendTxArgs) ToTransaction() *types.Transaction { + // Add the To-field, if specified + var to *common.Address + if args.To != nil { + dstAddr := args.To.Address() + to = &dstAddr + } + + var input []byte + if args.Input != nil { + input = *args.Input + } else if args.Data != nil { + input = *args.Data + } + + var data types.TxData + switch { + case args.MaxFeePerGas != nil: + al := types.AccessList{} + if args.AccessList != nil { + al = *args.AccessList + } + data = &types.DynamicFeeTx{ + To: to, + ChainID: (*big.Int)(args.ChainID), + Nonce: uint64(args.Nonce), + Gas: uint64(args.Gas), + GasFeeCap: (*big.Int)(args.MaxFeePerGas), + GasTipCap: (*big.Int)(args.MaxPriorityFeePerGas), + Value: (*big.Int)(&args.Value), + Data: input, + AccessList: al, + } + case args.AccessList != nil: + data = &types.AccessListTx{ + To: to, + ChainID: (*big.Int)(args.ChainID), + Nonce: uint64(args.Nonce), + Gas: uint64(args.Gas), + GasPrice: (*big.Int)(args.GasPrice), + Value: (*big.Int)(&args.Value), + Data: input, + AccessList: *args.AccessList, + } + default: + data = &types.LegacyTx{ + To: to, + Nonce: uint64(args.Nonce), + Gas: uint64(args.Gas), + GasPrice: (*big.Int)(args.GasPrice), + Value: (*big.Int)(&args.Value), + Data: input, + } + } + return types.NewTx(data) +} + +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 +} + +// TypedData is a type to encapsulate EIP-712 typed messages +type TypedData struct { + Types Types `json:"types"` + PrimaryType string `json:"primaryType"` + Domain TypedDataDomain `json:"domain"` + Message TypedDataMessage `json:"message"` +} + +// Type is the inner type of an EIP-712 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 character + r, _ := utf8.DecodeRuneInString(t.Type) + return unicode.IsUpper(r) +} + +type Types map[string][]Type + +type TypePriority struct { + Type string + Value uint +} + +type TypedDataMessage = map[string]interface{} + +// TypedDataDomain represents the domain part of an EIP-712 message. +type TypedDataDomain struct { + Name string `json:"name"` + Version string `json:"version"` + ChainId *math.HexOrDecimal256 `json:"chainId"` + VerifyingContract string `json:"verifyingContract"` + Salt string `json:"salt"` +} + +// TypedDataAndHash is a helper function that calculates a hash for typed data conforming to EIP-712. +// This hash can then be safely used to calculate a signature. +// +// See https://eips.ethereum.org/EIPS/eip-712 for the full specification. +// +// This gives context to the signed typed data and prevents signing of transactions. +func TypedDataAndHash(typedData TypedData) ([]byte, string, 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 := fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash)) + return crypto.Keccak256([]byte(rawData)), rawData, 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 { + primaryType = strings.TrimSuffix(primaryType, "[]") + 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 exp, got := len(typedData.Types[primaryType]), len(data); exp < got { + return nil, fmt.Errorf("there is extra data provided in the message (%d < %d)", exp, got) + } + + // 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(crypto.Keccak256(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 +} + +// Attempt to parse bytes in different formats: byte array, hex string, hexutil.Bytes. +func parseBytes(encType interface{}) ([]byte, bool) { + switch v := encType.(type) { + case []byte: + return v, true + case hexutil.Bytes: + return v, true + case string: + bytes, err := hexutil.Decode(v) + if err != nil { + return nil, false + } + return bytes, true + default: + return nil, false + } +} + +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 := parseBytes(encValue) + 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 := parseBytes(encValue); !ok || len(byteValue) != length { + return nil, dataMismatchError(encType, encValue) + } else { + // Right-pad the bits + dst := make([]byte, 32) + copy(dst, byteValue) + return dst, nil + } + } + if strings.HasPrefix(encType, "int") || strings.HasPrefix(encType, "uint") { + b, err := parseInteger(encType, encValue) + if err != nil { + return nil, err + } + return math.U256Bytes(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) +} + +// 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 (%#x)", b, b), nil + } + } + return "", fmt.Errorf("unhandled type %v", encType) +} + +// 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 %q:%d: empty Type", typeKey, i) + } + if len(typeObj.Name) == 0 { + return fmt.Errorf("type %q:%d: empty Name", typeKey, i) + } + if typeKey == typeObj.Type { + return fmt.Errorf("type %q cannot reference itself", typeObj.Type) + } + if typeObj.isReferenceType() { + if _, exist := t[typeObj.typeName()]; !exist { + return fmt.Errorf("reference type %q is undefined", typeObj.Type) + } + if !typedDataReferenceTypeRegexp.MatchString(typeObj.Type) { + return fmt.Errorf("unknown reference type %q", typeObj.Type) + } + } else if !isPrimitiveTypeValid(typeObj.Type) { + return fmt.Errorf("unknown type %q", 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[]" || + primitiveType == "bytes32" || + primitiveType == "bytes32[]" { + return true + } + if primitiveType == "int" || + primitiveType == "int[]" || + primitiveType == "int8" || + primitiveType == "int8[]" || + primitiveType == "int16" || + primitiveType == "int16[]" || + primitiveType == "int32" || + primitiveType == "int32[]" || + primitiveType == "int64" || + primitiveType == "int64[]" || + primitiveType == "int96" || + primitiveType == "int96[]" || + 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 == "uint96" || + primitiveType == "uint96[]" || + 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 && 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 +} + +// 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 { + if nvt.Value != nil { + output.WriteString(fmt.Sprintf("%q\n", nvt.Value)) + } else { + output.WriteString("\n") + } + } + return output.String() +} diff --git a/signer/core/auditlog.go b/signer/core/auditlog.go index 2396cfbd..a0b292bf 100644 --- a/signer/core/auditlog.go +++ b/signer/core/auditlog.go @@ -18,11 +18,13 @@ package core import ( "context" + "encoding/json" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) type AuditLogger struct { @@ -42,7 +44,7 @@ func (l *AuditLogger) New(ctx context.Context) (common.Address, error) { return l.api.New(ctx) } -func (l *AuditLogger) SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { +func (l *AuditLogger) SignTransaction(ctx context.Context, args apitypes.SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { sel := "" if methodSelector != nil { sel = *methodSelector @@ -61,14 +63,33 @@ func (l *AuditLogger) SignTransaction(ctx context.Context, args SendTxArgs, meth } func (l *AuditLogger) SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) { + marshalledData, _ := json.Marshal(data) // can ignore error, marshalling what we just unmarshalled l.log.Info("SignData", "type", "request", "metadata", MetadataFromContext(ctx).String(), - "addr", addr.String(), "data", data, "content-type", contentType) + "addr", addr.String(), "data", marshalledData, "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) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data TypedData) (hexutil.Bytes, error) { +func (l *AuditLogger) SignGnosisSafeTx(ctx context.Context, addr common.MixedcaseAddress, gnosisTx GnosisSafeTx, methodSelector *string) (*GnosisSafeTx, error) { + sel := "" + if methodSelector != nil { + sel = *methodSelector + } + data, _ := json.Marshal(gnosisTx) // can ignore error, marshalling what we just unmarshalled + l.log.Info("SignGnosisSafeTx", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "addr", addr.String(), "data", string(data), "selector", sel) + res, e := l.api.SignGnosisSafeTx(ctx, addr, gnosisTx, methodSelector) + if res != nil { + data, _ := json.Marshal(res) // can ignore error, marshalling what we just unmarshalled + l.log.Info("SignGnosisSafeTx", "type", "response", "data", string(data), "error", e) + } else { + l.log.Info("SignGnosisSafeTx", "type", "response", "data", res, "error", e) + } + return res, e +} + +func (l *AuditLogger) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data apitypes.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) @@ -89,7 +110,6 @@ func (l *AuditLogger) Version(ctx context.Context) (string, error) { 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) { diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 6c8a104e..187eb139 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -24,10 +24,10 @@ import ( "strings" "sync" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "golang.org/x/crypto/ssh/terminal" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/console/prompt" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" ) type CommandlineUI struct { @@ -58,48 +58,18 @@ func (ui *CommandlineUI) readString() string { } } -// readPassword reads a single line from stdin, trimming it from the trailing new -// line and returns it. The input will not be echoed. -func (ui *CommandlineUI) readPassword() string { - fmt.Printf("Enter password to approve:\n") - fmt.Printf("> ") - - text, err := terminal.ReadPassword(int(os.Stdin.Fd())) - if err != nil { - log.Crit("Failed to read password", "err", err) - } - fmt.Println() - fmt.Println("-----------------------") - return string(text) -} - -// readPassword reads a single line from stdin, trimming it from the trailing new -// line and returns it. The input will not be echoed. -func (ui *CommandlineUI) readPasswordText(inputstring string) string { - fmt.Printf("Enter %s:\n", inputstring) - fmt.Printf("> ") - text, err := terminal.ReadPassword(int(os.Stdin.Fd())) - if err != nil { - log.Crit("Failed to read password", "err", err) - } - fmt.Println("-----------------------") - return string(text) -} - func (ui *CommandlineUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { - fmt.Printf("## %s\n\n%s\n", info.Title, info.Prompt) + defer fmt.Println("-----------------------") if info.IsPassword { - fmt.Printf("> ") - text, err := terminal.ReadPassword(int(os.Stdin.Fd())) + text, err := prompt.Stdin.PromptPassword("> ") if err != nil { - log.Error("Failed to read password", "err", err) + log.Error("Failed to read password", "error", err) + return UserInputResponse{}, err } - fmt.Println("-----------------------") - return UserInputResponse{string(text)}, err + return UserInputResponse{text}, nil } text := ui.readString() - fmt.Println("-----------------------") return UserInputResponse{text}, nil } @@ -113,10 +83,19 @@ func (ui *CommandlineUI) confirm() bool { return false } +// sanitize quotes and truncates 'txt' if longer than 'limit'. If truncated, +// and ellipsis is added after the quoted string +func sanitize(txt string, limit int) string { + if len(txt) > limit { + return fmt.Sprintf("%q...", txt[:limit]) + } + return fmt.Sprintf("%q", txt) +} + func showMetadata(metadata Metadata) { fmt.Printf("Request context:\n\t%v -> %v -> %v\n", metadata.Remote, metadata.Scheme, metadata.Local) fmt.Printf("\nAdditional HTTP header data, provided by the external caller:\n") - fmt.Printf("\tUser-Agent: %v\n\tOrigin: %v\n", metadata.UserAgent, metadata.Origin) + fmt.Printf("\tUser-Agent: %v\n\tOrigin: %v\n", sanitize(metadata.UserAgent, 200), sanitize(metadata.Origin, 100)) } // ApproveTx prompt the user for confirmation to request to sign Transaction @@ -133,15 +112,31 @@ func (ui *CommandlineUI) ApproveTx(request *SignTxRequest) (SignTxResponse, erro } else { fmt.Printf("to: \n") } - fmt.Printf("from: %v\n", request.Transaction.From.String()) - fmt.Printf("value: %v wei\n", weival) - fmt.Printf("gas: %v (%v)\n", request.Transaction.Gas, uint64(request.Transaction.Gas)) - fmt.Printf("gasprice: %v wei\n", request.Transaction.GasPrice.ToInt()) + fmt.Printf("from: %v\n", request.Transaction.From.String()) + fmt.Printf("value: %v wei\n", weival) + fmt.Printf("gas: %v (%v)\n", request.Transaction.Gas, uint64(request.Transaction.Gas)) + if request.Transaction.MaxFeePerGas != nil { + fmt.Printf("maxFeePerGas: %v wei\n", request.Transaction.MaxFeePerGas.ToInt()) + fmt.Printf("maxPriorityFeePerGas: %v wei\n", request.Transaction.MaxPriorityFeePerGas.ToInt()) + } else { + fmt.Printf("gasprice: %v wei\n", request.Transaction.GasPrice.ToInt()) + } fmt.Printf("nonce: %v (%v)\n", request.Transaction.Nonce, uint64(request.Transaction.Nonce)) + if chainId := request.Transaction.ChainID; chainId != nil { + fmt.Printf("chainid: %v\n", chainId) + } + if list := request.Transaction.AccessList; list != nil { + fmt.Printf("Accesslist\n") + for i, el := range *list { + fmt.Printf(" %d. %v\n", i, el.Address) + for j, slot := range el.StorageKeys { + fmt.Printf(" %d. %v\n", j, slot) + } + } + } if request.Transaction.Data != nil { d := *request.Transaction.Data if len(d) > 0 { - fmt.Printf("data: %v\n", hexutil.Encode(d)) } } @@ -151,7 +146,6 @@ func (ui *CommandlineUI) ApproveTx(request *SignTxRequest) (SignTxResponse, erro fmt.Printf(" * %s : %s\n", m.Typ, m.Message) } fmt.Println() - } fmt.Printf("\n") showMetadata(request.Meta) @@ -169,11 +163,18 @@ func (ui *CommandlineUI) ApproveSignData(request *SignDataRequest) (SignDataResp fmt.Printf("-------- Sign data request--------------\n") fmt.Printf("Account: %s\n", request.Address.String()) + if len(request.Callinfo) != 0 { + fmt.Printf("\nValidation messages:\n") + for _, m := range request.Callinfo { + fmt.Printf(" * %s : %s\n", m.Typ, m.Message) + } + fmt.Println() + } fmt.Printf("messages:\n") for _, nvt := range request.Messages { fmt.Printf("\u00a0\u00a0%v\n", strings.TrimSpace(nvt.Pprint(1))) } - fmt.Printf("raw data: \n%q\n", request.Rawdata) + fmt.Printf("raw data: \n\t%q\n", request.Rawdata) fmt.Printf("data hash: %v\n", request.Hash) fmt.Printf("-------------------------------------------\n") showMetadata(request.Meta) @@ -206,7 +207,6 @@ func (ui *CommandlineUI) ApproveListing(request *ListRequest) (ListResponse, err // ApproveNewAccount prompt the user for confirmation to create new Account, and reveal to caller func (ui *CommandlineUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { - ui.mu.Lock() defer ui.mu.Unlock() @@ -242,7 +242,6 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { - fmt.Printf("------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) diff --git a/signer/core/gnosis_safe.go b/signer/core/gnosis_safe.go new file mode 100644 index 00000000..01724e53 --- /dev/null +++ b/signer/core/gnosis_safe.go @@ -0,0 +1,117 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "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/signer/core/apitypes" +) + +// GnosisSafeTx is a type to parse the safe-tx returned by the relayer, +// it also conforms to the API required by the Gnosis Safe tx relay service. +// See 'SafeMultisigTransaction' on https://safe-transaction.mainnet.gnosis.io/ +type GnosisSafeTx struct { + // These fields are only used on output + Signature hexutil.Bytes `json:"signature"` + SafeTxHash common.Hash `json:"contractTransactionHash"` + Sender common.MixedcaseAddress `json:"sender"` + // These fields are used both on input and output + Safe common.MixedcaseAddress `json:"safe"` + To common.MixedcaseAddress `json:"to"` + Value math.Decimal256 `json:"value"` + GasPrice math.Decimal256 `json:"gasPrice"` + Data *hexutil.Bytes `json:"data"` + Operation uint8 `json:"operation"` + GasToken common.Address `json:"gasToken"` + RefundReceiver common.Address `json:"refundReceiver"` + BaseGas big.Int `json:"baseGas"` + SafeTxGas big.Int `json:"safeTxGas"` + Nonce big.Int `json:"nonce"` + InputExpHash common.Hash `json:"safeTxHash"` + ChainId *math.HexOrDecimal256 `json:"chainId,omitempty"` +} + +// ToTypedData converts the tx to a EIP-712 Typed Data structure for signing +func (tx *GnosisSafeTx) ToTypedData() apitypes.TypedData { + var data hexutil.Bytes + if tx.Data != nil { + data = *tx.Data + } + var domainType = []apitypes.Type{{Name: "verifyingContract", Type: "address"}} + if tx.ChainId != nil { + domainType = append([]apitypes.Type{{Name: "chainId", Type: "uint256"}}, domainType[0]) + } + + gnosisTypedData := apitypes.TypedData{ + Types: apitypes.Types{ + "EIP712Domain": domainType, + "SafeTx": []apitypes.Type{ + {Name: "to", Type: "address"}, + {Name: "value", Type: "uint256"}, + {Name: "data", Type: "bytes"}, + {Name: "operation", Type: "uint8"}, + {Name: "safeTxGas", Type: "uint256"}, + {Name: "baseGas", Type: "uint256"}, + {Name: "gasPrice", Type: "uint256"}, + {Name: "gasToken", Type: "address"}, + {Name: "refundReceiver", Type: "address"}, + {Name: "nonce", Type: "uint256"}, + }, + }, + Domain: apitypes.TypedDataDomain{ + VerifyingContract: tx.Safe.Address().Hex(), + ChainId: tx.ChainId, + }, + PrimaryType: "SafeTx", + Message: apitypes.TypedDataMessage{ + "to": tx.To.Address().Hex(), + "value": tx.Value.String(), + "data": data, + "operation": fmt.Sprintf("%d", tx.Operation), + "safeTxGas": fmt.Sprintf("%#d", &tx.SafeTxGas), + "baseGas": fmt.Sprintf("%#d", &tx.BaseGas), + "gasPrice": tx.GasPrice.String(), + "gasToken": tx.GasToken.Hex(), + "refundReceiver": tx.RefundReceiver.Hex(), + "nonce": fmt.Sprintf("%d", tx.Nonce.Uint64()), + }, + } + return gnosisTypedData +} + +// ArgsForValidation returns a SendTxArgs struct, which can be used for the +// common validations, e.g. look up 4byte destinations +func (tx *GnosisSafeTx) ArgsForValidation() *apitypes.SendTxArgs { + gp := hexutil.Big(tx.GasPrice) + args := &apitypes.SendTxArgs{ + From: tx.Safe, + To: &tx.To, + Gas: hexutil.Uint64(tx.SafeTxGas.Uint64()), + GasPrice: &gp, + Value: hexutil.Big(tx.Value), + Nonce: hexutil.Uint64(tx.Nonce.Uint64()), + Data: tx.Data, + Input: nil, + ChainID: (*hexutil.Big)(tx.ChainId), + } + return args +} diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go index e6d6fbbe..c0da22e6 100644 --- a/signer/core/signed_data.go +++ b/signer/core/signed_data.go @@ -17,116 +17,26 @@ package core import ( - "bytes" "context" "errors" "fmt" - "math/big" "mime" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - "unicode" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/clique" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "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" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) -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) { +func (api *SignerAPI) sign(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) @@ -137,7 +47,7 @@ func (api *SignerAPI) sign(addr common.MixedcaseAddress, req *SignDataRequest, l return nil, ErrRequestDenied } // Look up the wallet containing the requested signer - account := accounts.Account{Address: addr.Address()} + account := accounts.Account{Address: req.Address.Address()} wallet, err := api.am.Find(account) if err != nil { return nil, err @@ -168,7 +78,7 @@ func (api *SignerAPI) SignData(ctx context.Context, contentType string, addr com if err != nil { return nil, err } - signature, err := api.sign(addr, req, transformV) + signature, err := api.sign(req, transformV) if err != nil { api.UI.ShowError(err.Error()) return nil, err @@ -193,14 +103,14 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType } switch mediaType { - case IntendedValidator.Mime: + case apitypes.IntendedValidator.Mime: // Data with an intended validator validatorData, err := UnmarshalValidatorData(data) if err != nil { return nil, useEthereumV, err } sighash, msg := SignTextValidator(validatorData) - messages := []*NameValueType{ + messages := []*apitypes.NameValueType{ { Name: "This is a request to sign data intended for a particular validator (see EIP 191 version 0)", Typ: "description", @@ -219,15 +129,15 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType { Name: "Full message for signing", Typ: "hexdata", - Value: fmt.Sprintf("0x%x", msg), + Value: fmt.Sprintf("%#x", msg), }, } req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Messages: messages, Hash: sighash} - case ApplicationClique.Mime: + case apitypes.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) + return nil, useEthereumV, fmt.Errorf("input for %v must be an hex-encoded string", apitypes.ApplicationClique.Mime) } cliqueData, err := hexutil.Decode(stringData) if err != nil { @@ -237,23 +147,21 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType 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 - } + // Add space in the extradata to put the signature + 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{ + messages := []*apitypes.NameValueType{ { Name: "Clique header", Typ: "clique", - Value: fmt.Sprintf("clique header %d [0x%x]", header.Number, header.Hash()), + Value: fmt.Sprintf("clique header %d [%#x]", header.Number, header.Hash()), }, } // Clique uses V on the form 0 or 1 @@ -261,7 +169,7 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType 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}") + // hash = keccak256("\x19Ethereum 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") @@ -270,7 +178,7 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType return nil, useEthereumV, err } else { sighash, msg := accounts.TextAndHash(textData) - messages := []*NameValueType{ + messages := []*apitypes.NameValueType{ { Name: "message", Typ: accounts.MimetypeTextPlain, @@ -286,10 +194,10 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType return req, useEthereumV, nil } -// SignTextWithValidator signs the given message which can be further recovered +// SignTextValidator 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) { +func SignTextValidator(validatorData apitypes.ValidatorData) (hexutil.Bytes, string) { msg := fmt.Sprintf("\x19\x00%s%s", string(validatorData.Address.Bytes()), string(validatorData.Message)) return crypto.Keccak256([]byte(msg)), msg } @@ -313,290 +221,41 @@ func cliqueHeaderHashAndRlp(header *types.Header) (hash, rlp []byte, err error) // 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()) +// It returns +// - the signature, +// - and/or any error +func (api *SignerAPI) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, typedData apitypes.TypedData) (hexutil.Bytes, error) { + signature, _, err := api.signTypedData(ctx, addr, typedData, nil) + return signature, err +} + +// signTypedData is identical to the capitalized version, except that it also returns the hash (preimage) +// - the signature preimage (hash) +func (api *SignerAPI) signTypedData(ctx context.Context, addr common.MixedcaseAddress, + typedData apitypes.TypedData, validationMessages *apitypes.ValidationMessages) (hexutil.Bytes, hexutil.Bytes, error) { + sighash, rawData, err := apitypes.TypedDataAndHash(typedData) if err != nil { - return nil, err + return nil, 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) + return nil, nil, err + } + req := &SignDataRequest{ + ContentType: apitypes.DataTyped.Mime, + Rawdata: []byte(rawData), + Messages: messages, + Hash: sighash, + Address: addr} + if validationMessages != nil { + req.Callinfo = validationMessages.Messages + } + signature, err := api.sign(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 nil, 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) + return signature, sighash, nil } // EcRecover recovers the address associated with the given sig. @@ -606,13 +265,13 @@ func (api *SignerAPI) EcRecover(ctx context.Context, data hexutil.Bytes, sig hex // // 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}") + // hash = keccak256("\x19Ethereum 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. + // the V value must be 27 or 28 for legacy reasons. // - // https://github.com/cryptoecc/ETH-ECC/wiki/Management-APIs#personal_ecRecover + // 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") } @@ -629,374 +288,37 @@ func (api *SignerAPI) EcRecover(ctx context.Context, data hexutil.Bytes, sig hex } // UnmarshalValidatorData converts the bytes input to typed data -func UnmarshalValidatorData(data interface{}) (ValidatorData, error) { +func UnmarshalValidatorData(data interface{}) (apitypes.ValidatorData, error) { raw, ok := data.(map[string]interface{}) if !ok { - return ValidatorData{}, errors.New("validator input is not a map[string]interface{}") + return apitypes.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") + return apitypes.ValidatorData{}, errors.New("validator address is not sent as a string") } addrBytes, err := hexutil.Decode(addr) if err != nil { - return ValidatorData{}, err + return apitypes.ValidatorData{}, err } if !ok || len(addrBytes) == 0 { - return ValidatorData{}, errors.New("validator address is undefined") + return apitypes.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") + return apitypes.ValidatorData{}, errors.New("message is not sent as a string") } messageBytes, err := hexutil.Decode(message) if err != nil { - return ValidatorData{}, err + return apitypes.ValidatorData{}, err } if !ok || len(messageBytes) == 0 { - return ValidatorData{}, errors.New("message is undefined") + return apitypes.ValidatorData{}, errors.New("message is undefined") } - return ValidatorData{ + return apitypes.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/signer/core/signed_data_test.go b/signer/core/signed_data_test.go index 1aaa7c22..7d5661e7 100644 --- a/signer/core/signed_data_test.go +++ b/signer/core/signed_data_test.go @@ -17,23 +17,25 @@ package core_test import ( + "bytes" "context" "encoding/json" "fmt" - "io/ioutil" + "os" "path" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/signer/core" + "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" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) -var typesStandard = core.Types{ +var typesStandard = apitypes.Types{ "EIP712Domain": { { Name: "name", @@ -152,12 +154,12 @@ var jsonTypedData = ` const primaryType = "Mail" -var domainStandard = core.TypedDataDomain{ - "Ether Mail", - "1", - math.NewHexOrDecimal256(1), - "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", - "", +var domainStandard = apitypes.TypedDataDomain{ + Name: "Ether Mail", + Version: "1", + ChainId: math.NewHexOrDecimal256(1), + VerifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", + Salt: "", } var messageStandard = map[string]interface{}{ @@ -172,7 +174,7 @@ var messageStandard = map[string]interface{}{ "contents": "Hello, Bob!", } -var typedData = core.TypedData{ +var typedData = apitypes.TypedData{ Types: typesStandard, PrimaryType: primaryType, Domain: domainStandard, @@ -193,7 +195,7 @@ func TestSignData(t *testing.T) { control.approveCh <- "Y" control.inputCh <- "wrongpassword" - signature, err := api.SignData(context.Background(), core.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + signature, err := api.SignData(context.Background(), apitypes.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) if signature != nil { t.Errorf("Expected nil-data, got %x", signature) } @@ -201,7 +203,7 @@ func TestSignData(t *testing.T) { 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"))) + signature, err = api.SignData(context.Background(), apitypes.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) if signature != nil { t.Errorf("Expected nil-data, got %x", signature) } @@ -211,7 +213,7 @@ func TestSignData(t *testing.T) { // 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"))) + signature, err = api.SignData(context.Background(), apitypes.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) if err != nil { t.Fatal(err) } @@ -231,13 +233,13 @@ func TestSignData(t *testing.T) { } func TestDomainChainId(t *testing.T) { - withoutChainID := core.TypedData{ - Types: core.Types{ - "EIP712Domain": []core.Type{ + withoutChainID := apitypes.TypedData{ + Types: apitypes.Types{ + "EIP712Domain": []apitypes.Type{ {Name: "name", Type: "string"}, }, }, - Domain: core.TypedDataDomain{ + Domain: apitypes.TypedDataDomain{ Name: "test", }, } @@ -245,14 +247,18 @@ func TestDomainChainId(t *testing.T) { 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{ + // should encode successfully + if _, err := withoutChainID.HashStruct("EIP712Domain", withoutChainID.Domain.Map()); err != nil { + t.Errorf("Expected the typedData to encode the domain successfully, got %v", err) + } + withChainID := apitypes.TypedData{ + Types: apitypes.Types{ + "EIP712Domain": []apitypes.Type{ {Name: "name", Type: "string"}, {Name: "chainId", Type: "uint256"}, }, }, - Domain: core.TypedDataDomain{ + Domain: apitypes.TypedDataDomain{ Name: "test", ChainId: math.NewHexOrDecimal256(1), }, @@ -261,6 +267,10 @@ func TestDomainChainId(t *testing.T) { if _, ok := withChainID.Domain.Map()["chainId"]; !ok { t.Errorf("Expected the chainId key be present in the domain map") } + // should encode successfully + if _, err := withChainID.HashStruct("EIP712Domain", withChainID.Domain.Map()); err != nil { + t.Errorf("Expected the typedData to encode the domain successfully, got %v", err) + } } func TestHashStruct(t *testing.T) { @@ -314,7 +324,7 @@ func TestEncodeData(t *testing.T) { } func TestFormatter(t *testing.T) { - var d core.TypedData + var d apitypes.TypedData err := json.Unmarshal([]byte(jsonTypedData), &d) if err != nil { t.Fatalf("unmarshalling failed '%v'", err) @@ -328,7 +338,7 @@ func TestFormatter(t *testing.T) { t.Logf("'%v'\n", string(j)) } -func sign(typedData core.TypedData) ([]byte, []byte, error) { +func sign(typedData apitypes.TypedData) ([]byte, []byte, error) { domainSeparator, err := typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) if err != nil { return nil, nil, err @@ -343,7 +353,7 @@ func sign(typedData core.TypedData) ([]byte, []byte, error) { } func TestJsonFiles(t *testing.T) { - testfiles, err := ioutil.ReadDir("testdata/") + testfiles, err := os.ReadDir("testdata/") if err != nil { t.Fatalf("failed reading files: %v", err) } @@ -352,13 +362,13 @@ func TestJsonFiles(t *testing.T) { continue } expectedFailure := strings.HasPrefix(fInfo.Name(), "expfail") - data, err := ioutil.ReadFile(path.Join("testdata", fInfo.Name())) + data, err := os.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) + var typedData apitypes.TypedData + err = json.Unmarshal(data, &typedData) if err != nil { t.Errorf("Test %d, file %v, json unmarshalling failed: %v", i, fInfo.Name(), err) continue @@ -378,19 +388,19 @@ func TestJsonFiles(t *testing.T) { // crashes or hangs. func TestFuzzerFiles(t *testing.T) { corpusdir := path.Join("testdata", "fuzzing") - testfiles, err := ioutil.ReadDir(corpusdir) + testfiles, err := os.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())) + data, err := os.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) + var typedData apitypes.TypedData + err = json.Unmarshal(data, &typedData) if err != nil { t.Errorf("Test %d, file %v, json unmarshalling failed: %v", i, fInfo.Name(), err) continue @@ -406,3 +416,399 @@ func TestFuzzerFiles(t *testing.T) { typedData.Format() } } + +var gnosisTypedData = ` +{ + "types": { + "EIP712Domain": [ + { "type": "address", "name": "verifyingContract" } + ], + "SafeTx": [ + { "type": "address", "name": "to" }, + { "type": "uint256", "name": "value" }, + { "type": "bytes", "name": "data" }, + { "type": "uint8", "name": "operation" }, + { "type": "uint256", "name": "safeTxGas" }, + { "type": "uint256", "name": "baseGas" }, + { "type": "uint256", "name": "gasPrice" }, + { "type": "address", "name": "gasToken" }, + { "type": "address", "name": "refundReceiver" }, + { "type": "uint256", "name": "nonce" } + ] + }, + "domain": { + "verifyingContract": "0x25a6c4BBd32B2424A9c99aEB0584Ad12045382B3" + }, + "primaryType": "SafeTx", + "message": { + "to": "0x9eE457023bB3De16D51A003a247BaEaD7fce313D", + "value": "20000000000000000", + "data": "0x", + "operation": 0, + "safeTxGas": 27845, + "baseGas": 0, + "gasPrice": "0", + "gasToken": "0x0000000000000000000000000000000000000000", + "refundReceiver": "0x0000000000000000000000000000000000000000", + "nonce": 3 + } +}` + +var gnosisTx = ` +{ + "safe": "0x25a6c4BBd32B2424A9c99aEB0584Ad12045382B3", + "to": "0x9eE457023bB3De16D51A003a247BaEaD7fce313D", + "value": "20000000000000000", + "data": null, + "operation": 0, + "gasToken": "0x0000000000000000000000000000000000000000", + "safeTxGas": 27845, + "baseGas": 0, + "gasPrice": "0", + "refundReceiver": "0x0000000000000000000000000000000000000000", + "nonce": 3, + "executionDate": null, + "submissionDate": "2020-09-15T21:59:23.815748Z", + "modified": "2020-09-15T21:59:23.815748Z", + "blockNumber": null, + "transactionHash": null, + "safeTxHash": "0x28bae2bd58d894a1d9b69e5e9fde3570c4b98a6fc5499aefb54fb830137e831f", + "executor": null, + "isExecuted": false, + "isSuccessful": null, + "ethGasPrice": null, + "gasUsed": null, + "fee": null, + "origin": null, + "dataDecoded": null, + "confirmationsRequired": null, + "confirmations": [ + { + "owner": "0xAd2e180019FCa9e55CADe76E4487F126Fd08DA34", + "submissionDate": "2020-09-15T21:59:28.281243Z", + "transactionHash": null, + "confirmationType": "CONFIRMATION", + "signature": "0x5e562065a0cb15d766dac0cd49eb6d196a41183af302c4ecad45f1a81958d7797753f04424a9b0aa1cb0448e4ec8e189540fbcdda7530ef9b9d95dfc2d36cb521b", + "signatureType": "EOA" + } + ], + "signatures": null + } +` + +// TestGnosisTypedData tests the scenario where a user submits a full EIP-712 +// struct without using the gnosis-specific endpoint +func TestGnosisTypedData(t *testing.T) { + var td apitypes.TypedData + err := json.Unmarshal([]byte(gnosisTypedData), &td) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, sighash, err := sign(td) + if err != nil { + t.Fatal(err) + } + expSigHash := common.FromHex("0x28bae2bd58d894a1d9b69e5e9fde3570c4b98a6fc5499aefb54fb830137e831f") + if !bytes.Equal(expSigHash, sighash) { + t.Fatalf("Error, got %x, wanted %x", sighash, expSigHash) + } +} + +// TestGnosisCustomData tests the scenario where a user submits only the gnosis-safe +// specific data, and we fill the TypedData struct on our side +func TestGnosisCustomData(t *testing.T) { + var tx core.GnosisSafeTx + err := json.Unmarshal([]byte(gnosisTx), &tx) + if err != nil { + t.Fatal(err) + } + var td = tx.ToTypedData() + _, sighash, err := sign(td) + if err != nil { + t.Fatal(err) + } + expSigHash := common.FromHex("0x28bae2bd58d894a1d9b69e5e9fde3570c4b98a6fc5499aefb54fb830137e831f") + if !bytes.Equal(expSigHash, sighash) { + t.Fatalf("Error, got %x, wanted %x", sighash, expSigHash) + } +} + +var gnosisTypedDataWithChainId = ` +{ + "types": { + "EIP712Domain": [ + { "type": "uint256", "name": "chainId" }, + { "type": "address", "name": "verifyingContract" } + ], + "SafeTx": [ + { "type": "address", "name": "to" }, + { "type": "uint256", "name": "value" }, + { "type": "bytes", "name": "data" }, + { "type": "uint8", "name": "operation" }, + { "type": "uint256", "name": "safeTxGas" }, + { "type": "uint256", "name": "baseGas" }, + { "type": "uint256", "name": "gasPrice" }, + { "type": "address", "name": "gasToken" }, + { "type": "address", "name": "refundReceiver" }, + { "type": "uint256", "name": "nonce" } + ] + }, + "domain": { + "verifyingContract": "0x111dAE35D176A9607053e0c46e91F36AFbC1dc57", + "chainId": "4" + }, + "primaryType": "SafeTx", + "message": { + "to": "0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa", + "value": "0", + "data": "0xa9059cbb00000000000000000000000099d580d3a7fe7bd183b2464517b2cd7ce5a8f15a0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "operation": 0, + "safeTxGas": 0, + "baseGas": 0, + "gasPrice": "0", + "gasToken": "0x0000000000000000000000000000000000000000", + "refundReceiver": "0x0000000000000000000000000000000000000000", + "nonce": 15 + } +}` + +var gnosisTxWithChainId = ` +{ + "safe": "0x111dAE35D176A9607053e0c46e91F36AFbC1dc57", + "to": "0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa", + "value": "0", + "data": "0xa9059cbb00000000000000000000000099d580d3a7fe7bd183b2464517b2cd7ce5a8f15a0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "operation": 0, + "gasToken": "0x0000000000000000000000000000000000000000", + "safeTxGas": 0, + "baseGas": 0, + "gasPrice": "0", + "refundReceiver": "0x0000000000000000000000000000000000000000", + "nonce": 15, + "executionDate": "2022-01-10T20:00:12Z", + "submissionDate": "2022-01-10T19:59:59.689989Z", + "modified": "2022-01-10T20:00:31.903635Z", + "blockNumber": 9968802, + "transactionHash": "0xc9fef30499ee8984974ab9dddd9d15c2a97c1a4393935dceed5efc3af9fc41a4", + "safeTxHash": "0x6619dab5401503f2735256e12b898e69eb701d6a7e0d07abf1be4bb8aebfba29", + "executor": "0xbc2BB26a6d821e69A38016f3858561a1D80d4182", + "isExecuted": true, + "isSuccessful": true, + "ethGasPrice": "2500000009", + "gasUsed": 82902, + "fee": "207255000746118", + "chainId": "4", + "origin": null, + "dataDecoded": { + "method": "transfer", + "parameters": [ + { + "name": "to", + "type": "address", + "value": "0x99D580d3a7FE7BD183b2464517B2cD7ce5A8F15A" + }, + { + "name": "value", + "type": "uint256", + "value": "1000000000000000000" + } + ] + }, + "confirmationsRequired": 1, + "confirmations": [ + { + "owner": "0xbc2BB26a6d821e69A38016f3858561a1D80d4182", + "submissionDate": "2022-01-10T19:59:59.722500Z", + "transactionHash": null, + "signature": "0x5ca34641bcdee06e7b99143bfe34778195ca41022bd35837b96c204c7786be9d6dfa6dba43b53cd92da45ac728899e1561b232d28f38ba82df45f164caba38be1b", + "signatureType": "EOA" + } + ], + "signatures": "0x5ca34641bcdee06e7b99143bfe34778195ca41022bd35837b96c204c7786be9d6dfa6dba43b53cd92da45ac728899e1561b232d28f38ba82df45f164caba38be1b" +} +` + +func TestGnosisTypedDataWithChainId(t *testing.T) { + var td apitypes.TypedData + err := json.Unmarshal([]byte(gnosisTypedDataWithChainId), &td) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, sighash, err := sign(td) + if err != nil { + t.Fatal(err) + } + expSigHash := common.FromHex("0x6619dab5401503f2735256e12b898e69eb701d6a7e0d07abf1be4bb8aebfba29") + if !bytes.Equal(expSigHash, sighash) { + t.Fatalf("Error, got %x, wanted %x", sighash, expSigHash) + } +} + +// TestGnosisCustomData tests the scenario where a user submits only the gnosis-safe +// specific data, and we fill the TypedData struct on our side +func TestGnosisCustomDataWithChainId(t *testing.T) { + var tx core.GnosisSafeTx + err := json.Unmarshal([]byte(gnosisTxWithChainId), &tx) + if err != nil { + t.Fatal(err) + } + var td = tx.ToTypedData() + _, sighash, err := sign(td) + if err != nil { + t.Fatal(err) + } + expSigHash := common.FromHex("0x6619dab5401503f2735256e12b898e69eb701d6a7e0d07abf1be4bb8aebfba29") + if !bytes.Equal(expSigHash, sighash) { + t.Fatalf("Error, got %x, wanted %x", sighash, expSigHash) + } +} + +var complexTypedData = ` +{ + "types": { + "EIP712Domain": [ + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "verifyingContract", + "type": "address" + }, + { + "name": "version", + "type": "string" + } + ], + "Action": [ + { + "name": "action", + "type": "string" + }, + { + "name": "params", + "type": "string" + } + ], + "Cell": [ + { + "name": "capacity", + "type": "string" + }, + { + "name": "lock", + "type": "string" + }, + { + "name": "type", + "type": "string" + }, + { + "name": "data", + "type": "string" + }, + { + "name": "extraData", + "type": "string" + } + ], + "Transaction": [ + { + "name": "DAS_MESSAGE", + "type": "string" + }, + { + "name": "inputsCapacity", + "type": "string" + }, + { + "name": "outputsCapacity", + "type": "string" + }, + { + "name": "fee", + "type": "string" + }, + { + "name": "action", + "type": "Action" + }, + { + "name": "inputs", + "type": "Cell[]" + }, + { + "name": "outputs", + "type": "Cell[]" + }, + { + "name": "digest", + "type": "bytes32" + } + ] + }, + "primaryType": "Transaction", + "domain": { + "chainId": "56", + "name": "da.systems", + "verifyingContract": "0x0000000000000000000000000000000020210722", + "version": "1" + }, + "message": { + "DAS_MESSAGE": "SELL mobcion.bit FOR 100000 CKB", + "inputsCapacity": "1216.9999 CKB", + "outputsCapacity": "1216.9998 CKB", + "fee": "0.0001 CKB", + "digest": "0x53a6c0f19ec281604607f5d6817e442082ad1882bef0df64d84d3810dae561eb", + "action": { + "action": "start_account_sale", + "params": "0x00" + }, + "inputs": [ + { + "capacity": "218 CKB", + "lock": "das-lock,0x01,0x051c152f77f8efa9c7c6d181cc97ee67c165c506...", + "type": "account-cell-type,0x01,0x", + "data": "{ account: mobcion.bit, expired_at: 1670913958 }", + "extraData": "{ status: 0, records_hash: 0x55478d76900611eb079b22088081124ed6c8bae21a05dd1a0d197efcc7c114ce }" + } + ], + "outputs": [ + { + "capacity": "218 CKB", + "lock": "das-lock,0x01,0x051c152f77f8efa9c7c6d181cc97ee67c165c506...", + "type": "account-cell-type,0x01,0x", + "data": "{ account: mobcion.bit, expired_at: 1670913958 }", + "extraData": "{ status: 1, records_hash: 0x55478d76900611eb079b22088081124ed6c8bae21a05dd1a0d197efcc7c114ce }" + }, + { + "capacity": "201 CKB", + "lock": "das-lock,0x01,0x051c152f77f8efa9c7c6d181cc97ee67c165c506...", + "type": "account-sale-cell-type,0x01,0x", + "data": "0x1209460ef3cb5f1c68ed2c43a3e020eec2d9de6e...", + "extraData": "" + } + ] + } +} +` + +func TestComplexTypedData(t *testing.T) { + var td apitypes.TypedData + err := json.Unmarshal([]byte(complexTypedData), &td) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, sighash, err := sign(td) + if err != nil { + t.Fatal(err) + } + expSigHash := common.FromHex("0x42b1aca82bb6900ff75e90a136de550a58f1a220a071704088eabd5e6ce20446") + if !bytes.Equal(expSigHash, sighash) { + t.Fatalf("Error, got %x, wanted %x", sighash, expSigHash) + } +} diff --git a/signer/core/stdioui.go b/signer/core/stdioui.go index de31c293..6963a891 100644 --- a/signer/core/stdioui.go +++ b/signer/core/stdioui.go @@ -18,16 +18,14 @@ package core import ( "context" - "sync" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rpc" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" ) type StdIOUI struct { client rpc.Client - mu sync.Mutex } func NewStdIOUI() *StdIOUI { diff --git a/signer/core/types.go b/signer/core/types.go deleted file mode 100644 index e868480c..00000000 --- a/signer/core/types.go +++ /dev/null @@ -1,100 +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 core - -import ( - "encoding/json" - "fmt" - "math/big" - "strings" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" -) - -type ValidationInfo struct { - Typ string `json:"type"` - Message string `json:"message"` -} -type ValidationMessages struct { - Messages []ValidationInfo -} - -const ( - WARN = "WARNING" - CRIT = "CRITICAL" - INFO = "Info" -) - -func (vs *ValidationMessages) Crit(msg string) { - vs.Messages = append(vs.Messages, ValidationInfo{CRIT, msg}) -} -func (vs *ValidationMessages) Warn(msg string) { - vs.Messages = append(vs.Messages, ValidationInfo{WARN, msg}) -} -func (vs *ValidationMessages) Info(msg string) { - vs.Messages = append(vs.Messages, ValidationInfo{INFO, msg}) -} - -/// getWarnings returns an error with all messages of type WARN of above, or nil if no warnings were present -func (v *ValidationMessages) getWarnings() error { - var messages []string - for _, msg := range v.Messages { - if msg.Typ == WARN || msg.Typ == CRIT { - messages = append(messages, msg.Message) - } - } - if len(messages) > 0 { - return fmt.Errorf("Validation failed: %s", strings.Join(messages, ",")) - } - return nil -} - -// SendTxArgs represents the arguments to submit a transaction -type SendTxArgs struct { - From common.MixedcaseAddress `json:"from"` - To *common.MixedcaseAddress `json:"to"` - Gas hexutil.Uint64 `json:"gas"` - GasPrice hexutil.Big `json:"gasPrice"` - Value hexutil.Big `json:"value"` - Nonce hexutil.Uint64 `json:"nonce"` - // We accept "data" and "input" for backwards-compatibility reasons. - Data *hexutil.Bytes `json:"data"` - Input *hexutil.Bytes `json:"input,omitempty"` -} - -func (args SendTxArgs) String() string { - s, err := json.Marshal(args) - if err == nil { - return string(s) - } - return err.Error() -} - -func (args *SendTxArgs) toTransaction() *types.Transaction { - var input []byte - if args.Data != nil { - input = *args.Data - } else if args.Input != nil { - input = *args.Input - } - if args.To == nil { - return types.NewContractCreation(uint64(args.Nonce), (*big.Int)(&args.Value), uint64(args.Gas), (*big.Int)(&args.GasPrice), input) - } - return types.NewTransaction(uint64(args.Nonce), args.To.Address(), (*big.Int)(&args.Value), (uint64)(args.Gas), (*big.Int)(&args.GasPrice), input) -} diff --git a/signer/core/uiapi.go b/signer/core/uiapi.go index 385cd629..59466d8f 100644 --- a/signer/core/uiapi.go +++ b/signer/core/uiapi.go @@ -21,14 +21,14 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "math/big" + "os" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/accounts/keystore" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/crypto" + "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 @@ -109,7 +109,7 @@ func (s *UIServerAPI) DeriveAccount(url string, path string, pin *bool) (account return wallet.Derive(derivPath, *pin) } -// fetchKeystore retrives the encrypted keystore from the account manager. +// fetchKeystore retrieves the encrypted keystore from the account manager. func fetchKeystore(am *accounts.Manager) *keystore.KeyStore { return am.Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) } @@ -173,9 +173,9 @@ func (s *UIServerAPI) Export(ctx context.Context, addr common.Address) (json.Raw return nil, err } if wallet.URL().Scheme != keystore.KeyStoreScheme { - return nil, fmt.Errorf("Account is not a keystore-account") + return nil, fmt.Errorf("account is not a keystore-account") } - return ioutil.ReadFile(wallet.URL().Path) + return os.ReadFile(wallet.URL().Path) } // Import tries to import the given keyJSON in the local keystore. The keyJSON data is expected to be @@ -195,6 +195,16 @@ func (api *UIServerAPI) Import(ctx context.Context, keyJSON json.RawMessage, old return be[0].(*keystore.KeyStore).Import(keyJSON, oldPassphrase, newPassphrase) } +// 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 that was specified when this API was created. +// This method is the same as New on the external API, the difference being that +// this implementation does not ask for confirmation, since it's initiated by +// the user +func (api *UIServerAPI) New(ctx context.Context) (common.Address, error) { + return api.extApi.newAccount() +} + // 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 af858862..7639dbf6 100644 --- a/signer/core/validation.go +++ b/signer/core/validation.go @@ -21,7 +21,7 @@ import ( "regexp" ) -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 diff --git a/signer/core/validation_test.go b/signer/core/validation_test.go index 7105691d..6adaa21a 100644 --- a/signer/core/validation_test.go +++ b/signer/core/validation_test.go @@ -38,7 +38,6 @@ func TestPasswordValidation(t *testing.T) { if err == nil && test.shouldFail { t.Errorf("password '%v' should fail validation", test.pw) } else if err != nil && !test.shouldFail { - t.Errorf("password '%v' shound not fail validation, but did: %v", test.pw, err) } } diff --git a/signer/fourbyte/4byte.go b/signer/fourbyte/4byte.go deleted file mode 100644 index 2f7b2479..00000000 --- a/signer/fourbyte/4byte.go +++ /dev/null @@ -1,147088 +0,0 @@ -// 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 index 31d0e171..00f2658f 100644 --- a/signer/fourbyte/4byte.json +++ b/signer/fourbyte/4byte.json @@ -1,10 +1,13 @@ { +"00000000": "buyAndFree22457070633(uint256)", "00000001": "account_info_rotate_tine(uint256)", "00000002": "razor_balance(bool)", +"00000007": "mintToSell9630191(uint256)", "0000000c": "gumXZCZ()", "00000033": "matchTokenOrderByAdmin_k44j(uint256[])", "00000039": "XXX_unrecognized_adapter(string)", "0000003a": "good_mirror(uint256,uint32)", +"00000056": "mintToSellTo25630722(uint256,address)", "00000063": "math_rotate(uint256,uint256,uint64,uint64)", "0000006e": "display_allow(uint256,uint256,uint256,uint32)", "00000080": "conduct_auto(uint256,uint256,uint256)", @@ -17,43 +20,75 @@ "000000da": "muscle_teach(uint256,uint64,uint8)", "000000db": "viable_print(uint256,uint256,uint64)", "000000de": "pledge_future(uint256,uint32,uint8)", +"000000e2": "fullExit(uint32,address)", "000000ed": "access_coconut_alarm(uint256)", "000000f5": "cherry_tomorrow(uint256,uint64,bool)", "000000f8": "required_strconv(string,string)", +"000000fb": "buyTokens_hdd()", +"0000021b": "mint_and_sell_4bY(uint256,uint256,uint256,address[],bool)", +"00000983": "multiTransferEqual_L1R(address[],uint256)", +"00003a37": "buy_and_redeem_tc_(uint256,uint256,address[],bool)", +"00004f8a": "multiTransferTokenEqual_71p(address,address[],uint256)", +"000055be": "multiTransfer_OST(address[],uint256[])", +"000088bb": "stakeQty()", "00008962": "token(string,uint8,string)", +"0000aa67": "fee_J5y(uint256)", "0000aeb3": "migrateByAdmin_DQV(uint256[])", +"0000e2a7": "multiTransferToken_a4A(address,address[],uint256[],uint256)", "00012f8b": "LatiumX()", "00014502": "totalInfected()", +"00014fd6": "profitPercentMT()", "000150a0": "DEV_TEAM_STAKE()", +"0001bc48": "bproDiscToBtc(uint256)", +"0001c93f": "move(bytes,bytes,bytes)", +"0001e862": "balanceOfAt(uint256,address)", "0001fd01": "PamToken()", "00020a28": "HaltTokenAllOperation()", +"0002293b": "setData1(uint256,uint256,uint256)", +"000237f0": "acceptDebt(address)", "000267a4": "getUint()", "00026e13": "checkAtkBossQuest(address)", "00027737": "aicontract()", +"000287cc": "getPotAmounts()", "0002aa37": "richtestkk(uint256,string,uint8,string)", "0002c1dc": "Johnsonville()", +"00033a14": "pendingTransaction(bytes32)", +"0003d885": "mintERC20FromL1(address,address,address,uint256,uint8,bytes)", +"0004586c": "token_Id()", "00046c1f": "totalDragons()", "000525fd": "robCoin()", +"00055881": "TranscoderEvicted(address)", +"000560a9": "couponExpirationForAccount(address,uint256)", "0005a533": "CoalichainToken()", "0005bfb7": "gemmyMusicLockTime()", +"0006c402": "deployShelf()", +"0006fdaa": "futureSale()", "000713fe": "Initiate(address,uint256,uint256,uint256,bool)", "000751b8": "LogExtendSale(uint256)", "00076943": "unlocker()", "00076de7": "disableSellerCancel(uint16,address,address)", +"0007fa19": "updateCollateral(address,uint8)", "00085d25": "round3()", "0008f8df": "changeIcoFinish(uint256)", +"00093054": "Biden_Index()", "00094161": "TERMS_AND_CONDITIONS()", +"0009543c": "countRemoveForSale()", "00096469": "AuctionCreated(uint256,address,uint256,uint256,uint256,uint256)", +"000974b0": "setXCHFContractAddress(address)", "0009803b": "makeProject(address,string,uint256,uint256)", "00099cdf": "withdrawTokens3(uint256)", +"000a094a": "SubdomainCreated(address,address,string,string)", "000a4a7a": "backAtIndex(uint256,uint256,uint256)", +"000a74be": "userReward(address)", "000ac1ff": "addparts(bytes32,uint256,uint256,uint256)", "000adc67": "buy_the_tokens(string)", +"000b494b": "RegisterLottery(uint256,address,uint8,string)", "000b66d3": "setIcoStartTime(uint256)", "000b9726": "MintingContract()", "000be356": "expiredBlock()", "000c12af": "TOTAL_TOKENs_SUPPLY()", "000c65c3": "withdrawVNET(address,uint256)", +"000c7019": "getRemainingDays()", "000ca58e": "refundRequestTimelock()", "000dae5c": "claimantConvicted(uint256)", "000e02d0": "fiveHundredThousand()", @@ -61,101 +96,174 @@ "000e2f3a": "totalLBSold_GENERAL_1()", "000e60f8": "pendingBetsBalance()", "000e7fa8": "presalePrice()", +"000e92a0": "getOwnerOfList(uint256)", +"000ef2b2": "setrot(address)", "000f0ded": "doAirdrop(address,uint256)", +"000f6a94": "awardTAC(address,address,address)", "000f71f8": "recieveNegReq(uint256,uint256,uint256,uint256,string)", +"000fa9fb": "withdrawFunds(address,address)", "00100a18": "NewPoll(string,string,uint256,uint256)", +"0010d14b": "testTracker(uint256)", "0010ed99": "getBraggerAtIndex(uint256)", +"0010f763": "receiveaddr()", +"00110a41": "updateBlockRate(uint256)", "00113e08": "getBalances()", "00115cba": "UpdateSellAgentBounty(address)", +"00119f34": "getObjBattleInfo(uint64)", +"001236bf": "getDdaListAssetInfo(address)", "001246eb": "availableFlg()", "0012d90a": "BNB_HARD_CAP()", +"001333a7": "setMine(address)", "001339b0": "prizePoolTotal(bytes4)", +"00136bb8": "le(int256,int256)", "00137d6e": "peculAdress()", +"0013b4fc": "ethToAsset(uint256,address,uint256)", "0013da50": "delList(string,uint256,uint256)", "0013eb4b": "isExist(address)", "0014f956": "getResourcesInfo(address)", +"0015264b": "setERC721Controlled(address,address)", "00152924": "setSelfContractAddress(address)", +"001534d5": "applyGovernanceForDelistWhitelist(bytes32)", "0015be71": "executiveOfficerAddress()", +"0015e5a1": "startContractChange(bytes32,address)", +"0015f229": "getGroupContentFirstLevel(uint256)", +"00162420": "trades(bytes32)", "001667bb": "getPI_edit_34()", +"00172ddf": "SetFee(uint256)", "00173d65": "getShouldGenerateDna()", +"00173e83": "employeesFund()", "001773e6": "convertMetToEth(uint256,uint256)", "0017cd8b": "PRIME()", "0017e1cf": "getTeamNameForAddress(address)", +"0018a116": "setUnstakeFee(uint256)", "0018b1d3": "pps()", "0018b665": "killTokenContract()", +"0018dff9": "itisnecessary()", +"0018eaa8": "initializeWithX(uint256)", "0018fe0b": "changeInGameFee(uint256)", "00190f64": "getStatusLogs()", "00199b79": "_updateList(address[],address,address[])", "0019a46b": "gen0CutieCreatedCount()", "0019c97d": "redeemPop(uint256)", +"001a1779": "estimateDividendsOf(address,bool)", "001a4f5e": "createNewRevision(bytes32,bytes32)", "001aa026": "withdrawMarginPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"001ab189": "WithdrawStaking(uint256,uint256)", "001ab1cd": "setAsBurner(address,bool)", "001ab993": "VTestDistribution(address,uint256,uint256)", "001b1441": "Ethernext()", "001b1cf0": "DualMintableToken(address,address)", +"001b3127": "managerMaxCount()", "001b3fe6": "card_blue_first()", +"001b5db5": "loanIdsOfPendingRequests(uint256)", "001ba7ea": "signWitness()", "001baa89": "createdBy(uint256)", "001bc69a": "getGratitudesOf(address)", +"001bf8f6": "getRemainingBalance(address)", "001cf577": "wcOnCrowdsaleFailure()", "001d7bf6": "getInvestmentArray()", "001db74d": "FreeLove()", "001dbe8a": "getSoftwareExecRecordLength()", +"001dee24": "getEstimatedETHforEVN(uint256)", +"001e4150": "jurisdictionHaltsUntil(uint256)", +"001ecf1d": "BetPlaced(address,uint256,uint256)", "001ed012": "previousBurners()", +"001ed41f": "capitalize(uint256,uint256)", "001ee6b2": "participateGame(uint32,uint32,uint32,uint32)", "001f0479": "getResultMask(uint256,uint256)", "001f4701": "Examples()", +"001f6697": "reservesContracts(uint256)", "001f8d11": "removePackage(bytes32,string)", "001f91ce": "curatorAddress()", "001f9bc0": "set_arbits_presale_open(address,bool)", +"001fa8b9": "updateVars(uint256,uint256,uint256,bool,bool)", "00201e33": "BONUS_6_DAYS()", "00203116": "endGame(address,uint8)", +"0020311b": "repayBorrow(address,address,uint256)", "00203385": "getTotalBorrowingItem()", +"00205aea": "presaleRunning()", "00212667": "m_Creator()", "0021b6cb": "getElementOfBoughtTicketList(uint256)", "0021d364": "getNOVotesByEntity(uint256)", "00226eb5": "getDepositNum()", "0022771f": "numAdviserDeposits()", +"0022d6bd": "UnLockAllTokens(bool)", +"0022ec35": "manualSaleFlag()", "002338ef": "TLSC()", "0023de29": "tokensReceived(address,address,address,uint256,bytes,bytes)", +"0023f2ac": "getLockTokenNum(address)", "00245220": "HAJDToken(string,uint8,string)", "0024eb4b": "getCompanyAllocation(uint256)", +"00250ee4": "msgDataPayables(uint256)", +"00257612": "mint(bytes,uint256)", +"00259002": "_burnPercentAll()", +"00260dbd": "LogPreparePaymentReferrer(address,uint256,uint256,uint256)", +"002639bd": "TortugaTaller()", +"0026be32": "setPriceOfOneTicket(uint256)", +"0026ff55": "divideIHaveArgsReturn(int256,int256)", "00277883": "TeamTokensHolder(address,address,address)", +"0027d8d1": "getUserAmountWithInterest(address)", +"002854de": "addNewReservContract(address)", "0028b91f": "Distributor(address,address)", +"00292419": "getClaimAmount(uint32,address[])", +"00292526": "ownerRevenue()", "0029514f": "PROCESSBY()", +"0029640f": "preBalances(address)", "00297671": "cancelOneSell()", +"0029c0b4": "withdrawal(address,address,uint256)", +"002a01f7": "fourthCliff()", "002a2133": "createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", "002a228c": "initSeed(uint256)", "002a4b14": "Nine()", "002a5cc9": "getTicketHolders(uint256)", +"002b1329": "totalLPTokensMinted()", +"002b20d8": "CMOTransferred(address,address)", +"002b89c9": "claimPendingGriffin(uint256)", "002beece": "unfroze(uint256,address)", "002c1a9e": "percent(uint256,uint256,uint256)", +"002c6c41": "erc20Balances(address,address)", "002c8456": "toOpenVote()", "002ce636": "settrusteeVaultAddr(address)", +"002ceebc": "delegatorStakeSnapshot(address,address,uint256)", "002d7c9d": "concludeFirstAuction()", "002dc7f1": "ChangePeriod()", +"002dcfb9": "setRewardReferral(address)", "002e0ae7": "transferTokenOut(address,uint256)", "002e1316": "maxInvestment()", "002e1d7e": "LCOpenTimeout(bytes32)", +"002e31d1": "approve_254(address,uint256)", +"002efab7": "checkICOTokenAvailableBalance(address)", "002f15ca": "isExistInvestor(address)", "002f9569": "allocatedTokens()", "002fd07c": "_approve(address,uint256,uint256)", +"002fd3fd": "EtherPay(uint256,address[],uint256[])", +"00300a45": "period_token()", +"003013cb": "setLiqudityAddress(address)", +"00302e72": "Published(bytes12)", +"003058a2": "brisket()", "003074ff": "getFrontend()", "003078b0": "unlockTo(address,string)", "00310e16": "sellWolk(uint256)", +"0031310e": "_buyerToken()", +"003146fe": "ViewReceiving(address)", +"00318d91": "myB()", "00319aad": "_transferadvanced(address,address,uint256)", "0031a48e": "myICO()", +"0031c6b7": "balanceByTokenIdOf(uint256,address)", "00322bb6": "sendPlatformMaintenance()", "003259ea": "voteResult()", "003271d5": "checkStateProof(bytes32,bytes,uint256[],bytes,bytes)", +"00328cbb": "indexOfAirDropAddress(address)", "00333375": "minimumMainSaleRaise()", "003338a0": "DrawOp()", +"003379d7": "getMetadataContractAddress()", "0034451c": "_buildInternalSalt(uint128,address,address,uint256,uint64)", "00346b57": "setHodlerStake(address,uint256)", +"0034715e": "easyMode(address)", "003495a4": "getHighestBidder()", "0034b5fd": "withrawFundTeacher(uint256)", "0034f529": "_requestExists(address,uint32)", +"00351191": "_trLaunchVestingStages()", "003538c5": "TestRegistrar(address,bytes32)", "00354975": "VRYCoin()", "00359e08": "presaleFinishedAt()", @@ -166,120 +274,224 @@ "0036242d": "Power2X()", "00362509": "LogWin(address,uint256,uint256,uint256)", "00362a95": "donate(address)", +"003649bd": "getTxn(string)", "00364ceb": "bountyManagementWalletAddress()", "0036624a": "AmountReceived(address,uint256)", +"00368297": "FreezeEthHxyfLP(uint256)", +"0036d2d3": "isExchange(address)", "003705bc": "getTotalUSDInTokens()", +"0037902c": "showUINT()", "0037dd47": "addUniqueSaleTokens(address,uint256)", "00383d0a": "maxSignup()", +"00383d2f": "ospfrozen()", +"003848f1": "buscarCertificado(string,string)", "00387733": "setGameResult(uint256,uint8)", +"0038c4d8": "termSheetsNum()", "0039522c": "emergencyWithdrawal(uint256)", "003958e2": "LogOperatorAdd(address)", "00397647": "addToFreelancerTotalEarned(address,address,uint256)", "0039ad6d": "ROUNDS_KEPT()", +"0039c481": "getDiscountRatiosForBooster(uint256)", +"0039d6ec": "withdrawVault(address,uint256,address)", "0039d9db": "getNextStageStartTime()", "003a3d80": "GetSale()", +"003a458f": "breakthebank()", +"003a475f": "getAmountTokens(address,address,uint256)", "003a5b06": "getRoundEndBlock(uint32)", "003a661d": "renounceOwnedOwnership(address)", "003ab1ff": "timereum()", +"003acb71": "flpToken()", +"003aea81": "NewVersion(uint256,uint16[3])", "003b0a3f": "getFreeDino()", "003b9d88": "setLowerFeePercentage(uint8)", "003ba1ed": "setRoot(address)", +"003ba82e": "addSuperUser(address)", +"003bc888": "approve_330(address,uint256)", "003bcb34": "Received(address,bytes,uint256)", +"003bdc74": "claimTreasury()", +"003c0627": "changeMinAcceptParticipationPct(uint64)", +"003cc7f7": "updateAddressType(address,uint256)", "003cdf26": "Lima()", "003cee5a": "HLCToken(address,string,string,uint256,uint8)", "003db783": "Purchase(uint256,uint256,uint256,uint256)", "003de230": "participantClawbackEther(uint256)", +"003e1a36": "getAuthorityIDs(address)", "003e9d5b": "FillOrder(uint256,uint256)", "003ead5f": "setPVEBattleFee(uint256)", "003f07fa": "isValidAddress(address)", +"003f37c6": "checkmessagePrefixed(address,uint256,uint256)", "003fd35a": "CONTINUE_MINTING()", "00404930": "CryptoRiyal()", "00405351": "getWarriorChestAvailable()", "004056c7": "validateNameInternalET(string)", +"004073b8": "purchaseaOHM(uint256)", "004079b6": "CheckExec(string)", +"0040c766": "_isStarted()", +"0040e050": "reserveMax()", "0040ff6c": "changeFee()", +"00410ae7": "unlockHeightOfPriIEO()", +"0041c52c": "withdrawnFundsOf(address)", "0041edee": "preSaleTokensLimit()", +"0041f648": "editLEXScriptWrapper(uint256,string,address)", +"00420883": "deployAndNotifyRewardAmount(address,address,address,address,uint256,uint256,uint256)", +"004221f0": "tokenMaxSupply(uint256)", +"004225b8": "currentHolder()", +"00423870": "regUserViaContract(uint256,uint256,uint256,uint256)", "004240e3": "startTransaction(address,address,uint256)", +"0042410e": "getAvailablevPURE()", +"004246a7": "cumulateBalanceInternal(address)", "004264c3": "overflow()", +"00427c0f": "WithdrawnEther(address,uint256)", +"00427ce6": "_withdrawC(uint256)", "0042a3be": "isPublish(bytes32)", "00432cf3": "getCurrentMarginAmount(address,address,address,uint256,uint256,uint256)", +"0043c6ff": "redeem_SFI(uint256)", "0043cce7": "technologyShare()", "00442a07": "getLoanConfig(uint256)", +"0044b019": "can(uint256,address)", +"0044c659": "toBuyTokenPercent()", "00452636": "GxManagedWallet(address)", "0045626f": "returnETHByOwner()", +"00456379": "totalNFT()", +"00456d6b": "computeSum(uint256,uint256)", "0045a4d4": "isPointerExpired(uint8)", +"00462d38": "arbUniAndSushi(uint256,uint256,address[],address[])", +"0046b777": "getGasCostOfMostSignificantBit(uint256)", +"00477067": "OracleAdded(address)", "0047850a": "getOfferCountByToken(address)", +"00478c5b": "getEstimatedContinuousMintReward(uint256)", "00478f87": "TIC()", +"0047bd1b": "getPresaleTime()", +"0047c229": "approve_698(address,uint256)", +"00481816": "changeGSTTokenHolder(address)", "0048236b": "setOrganName(string)", "0048d680": "testTransferVotes()", "00498257": "maxWeiTier2()", "0049f068": "onContribute(uint256,address,uint256)", +"004a8803": "validatorsToBeFinalized()", +"004aca6e": "tokenMap(address)", +"004afe40": "e(bytes32,uint8,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", "004b1e75": "actionAuthorisedBy()", +"004b62d6": "setBytes32Value(bytes32,bytes32,bytes32)", +"004bd531": "NewReci()", "004bd9a5": "setRate5(uint256)", +"004c92ca": "mintDenominator()", "004c942e": "Request_Dividends()", +"004cd0ce": "VoteGranted(address)", +"004d0d52": "addVotes(uint256,uint8,uint256)", +"004d0f6c": "increaseLockAmount(bytes32,uint256,address)", "004d39b1": "HavvenGold()", "004d4ed9": "setRegion(uint256,uint256)", "004db370": "DawnCoin()", "004dcd1c": "changeBrick(uint256,string,string,string,bytes32[],uint256)", +"004dee47": "referenceAddresses(bytes32,uint256)", +"004e6c51": "updateTokenAdapterName(bytes32,bytes32)", +"004e8793": "countAMT()", +"004ead40": "setExpansionPercents(uint256,uint256,uint256,uint256)", "004ebaa8": "silo_timer()", +"004ecf21": "computeInitialState()", "004ef6c6": "book(uint256,uint256)", "004f3e86": "forceCancel()", "004f4042": "takeAllPossible(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", "004f4803": "raise(uint256)", +"004f6f83": "changeMediationService(address)", "004fba00": "addAdminAddress(address)", "00501553": "subHours(uint256,uint256)", "005016a3": "checkReturnValue(bool)", "0050945d": "referrerLevel2Ether()", "0050a315": "getCreationTs(uint256)", "0050b3df": "newAlex(address)", +"00517f62": "collateralRateStored(address)", +"0051f109": "TransferFromData(bytes)", "0052992e": "buyForInvestor(address,uint256,string)", +"0052e0b8": "SetLusdTokenAddress(address)", "00530933": "BuyAsset(uint256)", +"00535175": "miningByStakingAddress(address)", +"005383cb": "buyBitcashPayAgainstEther(address,uint256)", "00541756": "jackPotB()", +"0054314d": "getAllOptionIds(address)", +"00543ed2": "permitEIP2612AndDepositUnlimited(uint256,uint256,uint8,bytes32,bytes32)", "0054438d": "validateResale(address,uint256,uint256)", +"0054957e": "newAction(uint256,uint256,address,bytes)", "00549c2b": "mintNonFungibles(uint256,address[])", +"005572c7": "_getTokenDecimals(address)", "0055bc9c": "withdrawAtOnce(uint256)", +"00566f23": "mintDevelopmentPart2(uint256)", "0056c4c2": "getTokensForWei(uint256,uint256,uint256,uint32)", "0056ce89": "getCryptoPicture(uint256)", "005733e6": "EMISSION_FOR_SALESTAGELAST()", "00573858": "setrateIco(uint256)", +"00574599": "preDeposit(uint256,address)", +"00578fba": "pull(uint256,uint256[])", "0057e18f": "setPlatformMaintenance(address)", "0057e8d4": "restoreToColdWallet(uint256)", +"00583a34": "hatcherySnake(address)", "00599e65": "getTokenOrder(address,address)", "005a7d9a": "forFund()", "005ab803": "LogRegister(address,address)", +"005b31f7": "setAirdropSupply(address,uint256)", "005b42cb": "MainSalePrice()", "005b4487": "totalPayments()", "005b7ce8": "SIGMA_EXTRACTION_BASE()", "005b9b48": "sellAnimal(uint32)", "005bb714": "BlocksToken()", +"005bc76a": "addMARKETPLACE(address)", "005c0541": "_totalActiveBets()", "005c33e1": "receiveFunds()", +"005c8bc3": "setProviderRewardData(address,address,address[],uint256[],uint256[],uint256[],uint256[],uint256[],uint32[])", +"005d0d6b": "_sellHoldersFee()", "005d204d": "dataIdentifiers()", +"005ddac1": "changeBuyingTokenFee(uint16)", "005e885e": "getSigners(uint256,uint16)", +"005edd37": "transferCoupons(address,address,uint256,uint256)", +"005ee99b": "_poolInfo(uint256)", "005ef4ec": "setReservedTokensList(address,uint256,uint256,uint256)", +"005f4100": "addAdvisoryBoardAddress(address)", "005f41cc": "create(address,uint256,uint256,uint256,bool)", +"005f9193": "_deviceRootCount()", +"005f98d1": "unitCoinProductionIncreases(address,uint256)", "00601801": "setCCH_edit_4(string)", "00601d6c": "board(uint256,uint8,uint8)", "00603126": "computeNodeId(bytes32,bytes32)", "00604854": "FreePPCoin()", "0060c778": "removeCompany(bytes32)", +"0060d67b": "withTokenFrom(address,uint256)", +"00613b1c": "BiometricLocked(address,bytes32)", "00613e27": "register(address,uint8,uint16,address)", +"0061ac8c": "messageValue(bytes32)", "0061c78e": "PayoutIncreased(uint256,uint256)", "0061ebed": "TransactionFeeChanged(uint256)", "0062c8cb": "canCallWithNoOne()", +"00632258": "SWAP_ETH_for_TOKEN(address,uint256)", "00634064": "Lescoin(address,address)", +"0063750c": "withdrawInterest()", "00639319": "Milestone_BankLicenseSuccessful(string)", +"0063f2fb": "setPrimaryUSDCRecipient(address)", "006409c4": "Signed(address,uint256,uint8,bytes16,bytes)", +"00640c2e": "nextEpochBlock()", "0064575f": "shiva()", +"006499ff": "modifyCat(uint256,bool,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"00649cb6": "preSignDeposit(address,uint256,uint8,bytes32,bytes32,address,uint256,uint256)", "0064b1f8": "gameNum()", "0064d618": "add_referral(address,string,uint256)", "0065318b": "dividendsOf(address)", +"00654b3f": "velocity()", +"0065b1b1": "setUsdtSwapingContract(address)", "0065d700": "getTileFromBattleboard(uint16,uint8)", +"0065e405": "setNeedWhitelisting(bool)", "0066753e": "removeCertifier(address)", +"00667842": "updateCardsPerTier(uint256[],uint256)", +"0066d090": "setLiquidationRatios(address[],uint256[])", +"00674f63": "setDepositSelector(address,string,bool)", "00675149": "isGroupExist(uint256,uint256)", "0067a9fb": "BrokerImp(address,address,uint256,address,uint256)", "0067ba69": "FT_TOKEN_SALE_CAP()", +"0067c24c": "getLpPowah(address,address,address,address)", +"0067d71b": "checkreference(uint64)", +"00684fd1": "updateWETHAddress(address)", "00686741": "registerProxyFor(address)", +"00687cd0": "createShard(address,uint256,string,string,uint256,address)", +"0068bdbb": "removeFromWhiteListEvent(address)", "00691967": "SUPER_HERO_MULTIPLIER()", "006932bb": "whitelistAllAddresses()", "0069a132": "AshenVoid()", @@ -287,120 +499,223 @@ "006a6ef6": "create(address,address,address,address,address,address,address,uint256)", "006ac4bf": "findNextMonth(uint256,bytes2)", "006ae9d5": "HopeToken()", +"006b04fa": "_formatAggregatorAnswer(bytes32,int256)", "006b1fd1": "purchasedCount()", "006bcb71": "witness(bytes32,address)", +"006beea9": "_totalStrength()", "006c10e8": "trackPurchase(uint256,uint256)", "006c2abc": "privateSaleEndDate()", "006c81d3": "isAllocated()", +"006cd6ee": "getLevelUpCost(address)", "006cfea8": "_delegateAssetOwnerAdded(bytes32,address)", +"006d6cae": "requestId()", +"006d755d": "getHeatToConsume()", "006d96e0": "hasVaultAccess(address,address)", "006ddae3": "changevotePrice(uint256)", +"006dfe96": "ThreeMoonJackpot(address,uint256)", +"006e0c97": "Started(uint256)", +"006e1194": "updateVerifierRegistry(address,string)", "006e3a1d": "exitOverPlayer()", +"006f0231": "updateEndBlock(uint256)", +"006f2770": "loadController(address)", +"006f6ad0": "withdrawableTokens(address)", "006f91d2": "RiskPrice(uint128,uint128,uint128,uint128)", "006fbd88": "changeSellGenesPrice(uint256,uint256)", +"006fda35": "securityWindow()", "00703d48": "crearCelda(uint256,uint256,uint256,uint256,uint256,uint8)", +"007058be": "totalAmountForDev()", +"00707c75": "AddSonmValidator(address)", "0070c3b3": "Proxy(address)", "0070c537": "increaseBid(uint256)", +"0070ccd2": "devDividendWeight()", +"00717542": "FREEZE_GRACE_PERIOD()", "007188d3": "FAOC()", +"00719226": "createOrSignManagerChange(string,address[],address[],uint8,bytes)", +"0072056d": "setNewCustomer(address)", "0072615c": "claimedBoards(uint256)", "00728f76": "vestingAmount()", "0072d7b5": "addressAdded(address)", +"0072fbf2": "LogMakeOrder(uint256,address,uint256,address,address,uint256,uint256)", "00732113": "setHolderInformation(address)", "00739f2a": "changeStartDate(uint256)", +"0073c51c": "_swapEmelieToMerel(uint256)", "0073c769": "disableTime()", "0074477d": "listMultipleItems(uint256[],uint256,address,bytes32)", +"0074530a": "isTrue()", +"0074df52": "getAddressClaims(address,uint8)", +"0074fc39": "GetAttributeValue(address,uint256)", +"00752bfa": "getLRCFeeForRegisteringOneMoreToken()", +"00753585": "cancelGrantRequest(address)", "0075a317": "mintTo(address,string)", +"007611c6": "addGiverAndDonate(uint64,address,address,uint256)", "00761731": "createContract(bytes32,uint256,uint256,uint256)", +"0076e428": "amountTest(address)", +"00772bfa": "isLastConditionInChain(uint256)", "00774360": "deploy(bytes)", +"00788d52": "updateGenesAndTalents(uint256,uint256,uint256)", +"0078e67a": "GameError(address,string)", +"00796b84": "removeLowerDigits(uint256,uint8)", +"007979cd": "fees_wallet_swiss()", "00797f77": "has_donated(address)", "0079efb0": "withdraw1()", +"007a2232": "changeUnstakePercent(uint256)", +"007a2ae3": "token1ToEarnedPath(uint256)", "007aa091": "san_whitelist(address)", "007aaac9": "sisterCheckPrice(uint256)", "007b2a03": "GoldTokenERC20()", +"007b6643": "distribution(address[])", +"007bb003": "ADD_PROTECTED_TOKEN_ROLE()", "007bd509": "generalTerms()", +"007beb1a": "willbuy(uint256,address,uint256,uint256)", "007c197d": "ISE()", "007cb3fb": "updateOraclizeGasPrice(uint256)", "007cc224": "RESERVED_TOKENS_FOR_PLATFORM_OPERATIONS()", "007d8051": "issueAndFreeze(address,uint256,uint256)", +"007dc6ab": "Register(address,uint256)", "007e3dd2": "isComptroller()", "007e5d08": "updateAvailable()", +"007e922d": "CONTRACT_LP_ELEMENT_TOKEN()", "007e9355": "GetAllChallengesByAUser(address)", +"007ed058": "minimumTokensToVote()", +"007f545f": "ccotc()", +"007fa4f0": "updatePrice(uint8,uint256)", "008000d6": "configSale(uint256,uint256,uint256,uint256)", +"008009a3": "permits(address)", +"0080522b": "progressiveFibExAdress()", "008066b6": "doftManaged()", +"00814a06": "isApproved(address,address,address,bytes32)", +"00817992": "flushPool()", +"0081d2ed": "recommended_number(address,uint256)", "0081d6e5": "updateGravatarImage(string)", +"0081f472": "calcMaxAmountOut(address,address,uint256)", "008201e7": "TokenSold(uint256,uint256,uint256,address,address,string)", "00821b81": "bonusCalculation(uint256)", "00821de3": "parentAddress()", "00822599": "deleteMasternode(uint256)", "008250e5": "fortune_new()", +"0082a36d": "challengePeriodDuration()", +"0082c154": "_start_time()", "00837b15": "balanceEth(address)", +"00838172": "deposit(uint8,address,uint256)", +"00839f12": "danger()", +"0083b156": "setWithdrawFeeTimeout(uint256)", +"0083bd54": "ParityOwnershipTransferred(address,address)", +"0083c8f0": "mintKunNFT()", "00849f88": "changeFundCollection(address)", "0084dbf5": "ProofOfEtherDelta()", "0084fe51": "Exercise(uint256,uint256)", "00851303": "tokensForSiteReg()", "008557d2": "Buy(uint32,bool,bool,address)", +"0085aafa": "withdrawForUser(address,uint256,address)", "0085c647": "setPreICOEndDate(uint256)", "00862c3c": "areTokensUnlocked()", "00865f92": "parseJsonArrayAndGetFirstElementAsNumber(string)", +"0086786e": "inBlacklist(address)", +"00867dcb": "swapCountOf(address)", "0086969f": "dissalowFreezing(address)", "0086bb3e": "teamUnlockedAfterCliff()", "0086ce4d": "LogUpdatedLimitPerDay(uint8,uint256)", +"0086f48f": "vaultOfOrder(address,address,address,address,bytes)", "00873367": "comparisonchr(string)", "00873c97": "CLPContractToken()", +"0087a39c": "testPerBlock()", +"0088160f": "betBear()", "00882097": "EtherDeltaDeposit(uint256)", "00886980": "LogClaimReward(address,uint256)", +"0088f429": "buyMineSilver()", "0088fca8": "start_go_quiz(string,string)", "0088fed7": "addIndex(address,address)", +"0089356f": "churnedInCount()", +"00895232": "isSafe(bytes32,address)", +"00895858": "_splitInterestLoanPayment(uint256,uint256,uint256)", +"00897ad3": "lpStakingAddress()", "008a3ca1": "reverseSplit(uint8,bytes6,uint8,uint32)", "008a5c23": "getCurEarlyIncomeByAddressRound(address,uint256)", "008a706b": "Primal()", "008a745d": "claimDividendShare(uint256)", +"008a7926": "stack(address,uint256)", +"008a81a6": "_getResultFromOrder(uint256)", "008ad306": "changeLockCostPerHour(uint256)", "008bdd13": "isWithinSaleTimeLimit()", "008bed3e": "getAgreementCount()", "008c1b28": "POSTSALE_START()", "008c3215": "addReplies(address,address[],string,string)", +"008c7025": "approveAndTransferFundsToDistributionContracts()", "008c8920": "currentType()", "008ca816": "isSalePaused()", "008cbc8c": "oraclize_query(uint256,string,bytes[4])", +"008cc262": "earned(address)", +"008dd581": "viewMintRandomNewPosition(uint128,int24,uint24,int24)", "008df454": "ratio(uint256)", +"008df797": "setState(bytes32)", +"008e0b65": "_addressUser(uint256)", "008e0f1b": "getTeam(uint256)", +"008e2df6": "getRewardInfo(address,address)", +"008e5c2a": "checkIfNFTInCirculation(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)", +"008ff8cd": "parentReferrerOf(address)", "00903c69": "Kether()", +"00905ffb": "setBurnFeeBps(uint256)", "0090e9c2": "transferBonuses(address)", "00918c7b": "icoPeriodTime()", +"0091a446": "reserveDeposit(uint256)", "0091d862": "Minaxis()", "00922db6": "secondWeekBonusInWeek()", +"009230a5": "setMaxJurorsPerDraftBatch(uint64)", "00923f9e": "tokenExists(uint256)", +"009303b1": "setMinimumEntry(uint256)", "0093703c": "bankConfirm(address,uint256)", "0094151b": "setPurchasable(uint256)", "0095716b": "crownBalanceOf(address)", +"00958f9b": "depositsInPreviousBlock()", +"0095d589": "setXSushi(address)", "00961320": "stringToUint()", +"0096ca2a": "yourStakedIYF(address)", +"0096f46a": "openAMM()", +"0096f6dd": "seizes(address[])", "0097130e": "_realBalanceOnEther()", "00971a30": "court()", "00975ba6": "_sendP3D(address,uint256)", +"00975d86": "importAddressFromBetaUser()", +"0097944c": "withdraw_bal(uint256,address)", "0097b607": "validRareId(uint256)", +"0097ee24": "addLifeEthPair()", "00983401": "setAuthor(string,string,address,uint256)", +"00983987": "getUserUnusedBalance(address)", "00987265": "migrateThroughAllForks()", "0098728f": "buyXaddrForContract(address,uint256)", "009888ce": "calcNextPrize()", "00988a16": "EthMinContributionUpdated(uint256,uint256)", +"00989e85": "openToSales()", +"0098fa22": "configs(uint256)", "0098fe2b": "refundWhite(uint256,uint256,uint256,uint256)", +"009919c0": "rateIsStale(bytes32)", "00991d8e": "setMakeFee(uint256)", +"00994836": "cakeLiquidityAddingTime()", +"00996e1b": "setBurntAmount(uint256)", "0099d386": "enableTrade()", "009a1faf": "getSumOfGamblingPartiesBonusPool(uint256)", +"009a8130": "setCallerRewardDivisior(uint256)", +"009a9b7b": "currentTokenId()", "009af857": "setnextRoundId(uint256)", +"009b1452": "commitSwapWaifus(uint256[])", "009b38fa": "canBeFinalizedNow(uint256)", +"009b41a0": "deleteData(address)", "009b9369": "getVoteNumber(uint256)", +"009bb12d": "CalculateKiDisperse(uint256,uint256)", "009ca5e8": "maxTokenWinValue()", +"009ced1d": "totalDepositedDividend_T(address)", "009e2297": "SetFreeDCT(uint256)", +"009e328b": "addBasset(address,address,bool)", +"009ebb10": "getActive()", "009f9262": "setEthPrice(uint256)", "00a0190e": "BIDDING_DURATION()", "00a051ca": "FiCoinFundDeposit()", +"00a05dc3": "suspendUser(uint256)", "00a09a7a": "devTokensToken()", "00a0d28f": "batchExecute(uint256[])", "00a13901": "burnRemains()", @@ -408,61 +723,99 @@ "00a18b30": "setTeamAddress(address,address,address,address,address)", "00a219f4": "payForDemocracy(bytes32)", "00a22ee4": "EXOToken(address,address,address,address,address)", +"00a2c50a": "enableInvestorTransfers()", +"00a2e661": "getArrayEntryIndex(string)", "00a3216c": "getNextDepositBlockIndex()", "00a32af6": "AIRDROP_WALLET()", +"00a341c8": "ownerSetPokerAddress(address)", "00a35aa2": "deleteBoolValue(bytes32)", +"00a3c456": "OperatorsTotalPopping()", +"00a3c841": "removeBgNftTypes(uint256,uint256,uint256[])", +"00a3d2d8": "getRarityValue(uint8)", "00a470d0": "doInvite(uint256,uint256,uint256)", +"00a47ddd": "userRewardPerTokenPaid(uint256,address)", "00a4b146": "SDCToken()", "00a53598": "emergencyToggle()", "00a58a2a": "Coffee()", "00a5e715": "TripCoinTeamSupply()", "00a626f6": "getACLRole7123909213907581092()", +"00a634f6": "UnfreezeEthHxyfLP()", "00a676f9": "getExists(bytes32)", "00a6dec6": "setPayerPercent(uint256,uint256)", +"00a7029b": "sig()", "00a70e03": "priceOfTicket()", +"00a718a9": "liquidationCall(address,address,address,uint256,bool)", "00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", "00a7fdfc": "bids_count()", "00a81ef6": "emitRoleRemoved(address,uint8)", +"00a85e12": "sporeToWbnbRoute(uint256)", +"00a8a270": "instroduce()", "00a8efc7": "subBalance(uint256)", "00a8f276": "last_transfer_state()", +"00a8ffd3": "onEventUnlock(address)", "00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", +"00a9a76b": "subscription(bytes32)", "00a9f0d4": "getDayRestDepositLimit(uint256)", "00aa21e6": "transferFromVault(bytes32,address,address,uint256)", "00aa25b2": "_isValidAddress(address)", +"00aa6ffb": "gaftBuyGSD(address)", "00aac98b": "Griefing(uint256)", +"00aae5e0": "getIter(bytes32)", +"00ab3179": "intMaxC()", +"00ab73e2": "finalizeParticipants(uint8)", +"00abaee7": "_rebaseJackpotRewardDivisor()", +"00ac227e": "EventBuySpaceshipUpgrade(address,uint256,uint16,uint8)", "00ac4663": "getWarrantyQuote(string,address,uint256,uint256,uint256)", "00ac77a0": "ownerSetCanBurn(bool)", +"00acd22b": "confirmationNodes(address)", "00ad3a23": "RELEASE_PERIODS()", "00ad800c": "name(uint256)", "00ad8035": "SwingerTokenSPICO()", "00ad861f": "README()", "00ad8b69": "releaseVestingAllocation()", "00adc382": "addressHash(address)", +"00ae3676": "isClone(address)", +"00ae3bf8": "rescueTokens(address)", "00aea59b": "reviewAudit(uint256)", "00aec05d": "BEECASHBACKHOME()", "00aeef8a": "deposit(uint256,uint256,uint256)", +"00af0f5d": "airDropTratok(address[],uint256[])", "00af4274": "getTokensForEther(uint256,uint8)", "00af9811": "checkRedemptionFulfilled(bytes32)", +"00af9dfd": "editRewardProject(uint256,bytes[])", "00afd295": "getAllCellInfoFrom_To(uint256,uint256)", "00afdcef": "ELink()", +"00afeb9e": "setProtocolCapEnabled(bool)", "00b08526": "GXCH()", "00b172d7": "buyTokensForProposal(uint256,address)", "00b23740": "VersusArenaToken()", "00b2516d": "vetoMotion(uint256)", +"00b26712": "parametersSet()", +"00b27108": "_changeMinAcceptQuorumPct(uint64)", +"00b2899f": "startArbUsingEthReserve(uint256,address)", "00b34747": "contractInitialized()", "00b37044": "totalDonated()", +"00b38b75": "_directedBitmap(address)", "00b3c619": "VoteSvp001(address,uint256,uint256)", "00b3c91b": "purgePack(uint256,uint256)", "00b44750": "acceptMembership(address,uint8,uint256,address,uint256)", +"00b469c6": "getPaymentsSum()", +"00b50e2b": "setStableAdress(address)", "00b5152b": "VibeXChainToken()", "00b526e4": "_sendTokensManually(address,uint256,uint256)", "00b5277a": "checkSell(uint256)", "00b55554": "emergencyDropEth()", "00b56aa7": "emitSynthRemoved(bytes4,address)", +"00b56b7a": "joinCollateral(address,uint256,uint256,bytes32)", +"00b5735c": "free_premium()", "00b5988e": "lockTournament(uint256,bool)", "00b5b223": "computeResponse(uint256,uint16)", +"00b5ec6b": "init(string,string,string,address)", +"00b60885": "heroLeveledUp(address,uint32)", +"00b61dd9": "getTransferableAmount(address)", "00b6849f": "airDrop(address[])", "00b6b707": "accept(uint256,address,uint256)", +"00b70eb7": "uniswapRoutes(address,uint256)", "00b76307": "ChangePrivilege(address,bool,bool)", "00b767fa": "EventAddAdmin(address,address)", "00b79dd9": "taxlvlEconomy(string,string,string,string,string)", @@ -471,65 +824,125 @@ "00b9189d": "setPreIcoContract(address)", "00b9840a": "DBDHToken()", "00b99f8c": "view28()", +"00b9add7": "settleEmergencyShutdown()", "00b9eb8b": "Coinchangex(address,address,uint256)", "00ba092c": "is_current()", "00ba3e50": "setProductAttributes(string,uint256,uint256,string)", +"00bab7ca": "aurNum()", "00badc85": "getcvotesid(string)", "00baea15": "pastOneDay()", +"00bb9876": "ID_TO_MODEL()", +"00bbd649": "openLandRegistry()", "00bbec1c": "payServiceProvider()", "00bc83a9": "xToken(address,string,string,uint8,uint256)", "00bca785": "state_of(address)", "00bcb883": "ProposalAdded(uint256,address,string,uint256)", +"00bcba21": "capTable()", "00bd35b8": "EventAddToBattle(address,uint64)", "00bd6f4c": "transferToAddress(address,uint256,bytes,bool)", "00bde030": "getDurationS()", "00bdfbcd": "installed()", +"00bea9f9": "subAgicFundPoolWhiteList(address)", +"00beada4": "shouldDraw()", +"00bec571": "aOwner()", +"00bece85": "newAdminToo()", +"00bee54f": "showfund()", +"00bf26f4": "TRANSFER_TYPEHASH()", +"00bf32ca": "oracleDeduction(uint256)", +"00bfabcd": "setConfig(bytes32,bytes32,bytes32)", "00c023da": "revokeAttribute(address,bytes32,bytes)", +"00c045f0": "isNonPayableAddr(address)", +"00c0f916": "tokenPools(uint256)", +"00c11862": "getAmount1Delta(uint160,uint160,int128)", +"00c1789e": "divPerShare()", "00c17ee4": "setConfig(uint256,uint256,string,string,uint256,uint256)", "00c1e956": "addressFundBounty()", +"00c2378f": "userNFT(address)", "00c2943c": "declareWinner(uint256)", "00c2b78e": "voteFor(uint256,uint256)", +"00c2d143": "getATokenBalance()", +"00c2e49a": "withdrawalHouseReserve(uint256,uint256)", +"00c2f35e": "initialDistributionAddress()", "00c33731": "prepair(address)", "00c42173": "winnerDeterminedDate()", "00c43503": "totalReturns()", "00c4cefa": "toKeyValue(int256,string)", +"00c5492c": "noahark()", "00c56675": "setNegativeGrowth(int256)", +"00c56916": "delAmount(address,address)", +"00c58634": "SOGNO3()", "00c5f509": "preICOSupply()", "00c61e93": "hRCoin()", +"00c64484": "setChestTypePricing(uint256,uint256)", +"00c6a8f4": "LogContributorsContributed(address,uint256,uint256)", "00c721ab": "setHand(uint256)", "00c822fb": "oraclize_query(string,bytes[2],uint256)", +"00c882bb": "UnFreeze(address,bool)", "00c8bb45": "addMeleeParts(uint8[])", +"00c8fbd4": "TokenSymbol()", "00c90ac8": "AutoCoinICO(uint256,uint256,uint256,address)", +"00c95c85": "setGsnForwarder(address)", "00c988e8": "crowdsaleConcluded()", "00c99206": "setIdentifier(bytes32)", +"00c9bd29": "resourceIndexWrappedResource(uint256)", "00c9c8e7": "_emitFeeSet(uint256,address)", +"00caae5b": "startpresale(uint256,uint256,string)", "00cab8b1": "lockAddressValue(address,uint256)", "00cae5df": "solve(uint256,bytes32)", "00cb1ae4": "methodThatThrows(bool)", "00cb41e3": "getWithdrawableDates()", "00cb527f": "miningFive()", +"00cbf8ab": "alloy()", "00cc15b0": "lengthEncode(uint256)", "00cc48a6": "updateNameIP(string,string)", +"00cc8ad8": "withdrawnAmountOf(address)", +"00cc9e6d": "Slots(uint256)", "00ccbc68": "firstRedemptionRequest()", "00ccfdab": "removeForgivedChar(uint256,string)", +"00cd22dd": "vMap(bytes32,uint256)", "00cdbc1f": "changeHash(bytes32)", +"00cdcc47": "_currentSupplyCars()", "00cde2bb": "releaseAccount(address,address)", +"00cdf601": "custLockPercent()", "00ce2057": "triggerPayment()", +"00ce2ae8": "DSHSContractAddress()", "00ce4462": "register_with_node()", "00ce8e3e": "getUsers()", "00ce9f8a": "getPeggedTokenValue(address,address,address)", +"00cea78e": "rePolkaQuacksPaused()", +"00cf3cef": "dividendPayingSDVDSupplyAt(uint256)", +"00cf5db4": "setPriceFeedAddress(address)", +"00cf632d": "setFlash(uint256,uint256,uint256)", +"00cf8aa1": "numClaimers(uint256)", +"00cf9021": "RemoveOffer(uint256)", +"00cfec60": "migrateProxy()", +"00d0578c": "Client_Registeration_and_Provisioning_Request(string)", +"00d0c633": "twin0SupplyTotal()", +"00d0fb1e": "setNewRouterContract(address)", "00d11245": "Mallory(address)", +"00d1666d": "mintRateOffset()", +"00d16a43": "init0(address,address,uint256)", "00d17799": "defaultCreatedCount()", +"00d19089": "addAsgard(address[])", +"00d272fc": "attributeRegistry()", "00d2c31d": "getHashSignatures(uint256)", +"00d2d89e": "getRevocationReasonId(bytes32)", "00d30eb9": "firstWeekPreICOBonusRate()", "00d32a75": "TransferDFN(address,address,uint256)", +"00d34411": "PROVIDER()", "00d357d1": "CustomcoinCrowdsale(address)", "00d3f51a": "VirtualRealityChain()", "00d4b768": "currentMideTokenTime()", "00d4b959": "ico1total()", +"00d50988": "getCardPaymentToken(uint256)", "00d52342": "loseGame()", "00d56d71": "StageTwoEnable()", +"00d59587": "Vested(address,uint256)", +"00d5ce6b": "SupplyBurn(uint256)", "00d5da02": "setTokenDescription(string)", +"00d624c1": "lastid()", +"00d74970": "_getDPRequest(uint256)", +"00d79dd1": "EmergencyERC20DrainWasCalled(address,uint256)", "00d7b3a9": "Exoso()", "00d7e9cf": "landPricePrevious()", "00d7f5d8": "Human1StandardToken(uint256,string,uint8,string)", @@ -537,64 +950,104 @@ "00d84fd8": "remove(uint32)", "00d9694c": "setBonusRound3(uint256)", "00d9f24e": "UpdateNumPlayers(uint256)", +"00dace6f": "buyArtwork(uint256[7],address[2],uint8[2],bytes32[4])", +"00db0421": "setDataComtrct(address)", +"00db1a18": "getInvited(address)", "00db90d1": "setCanWithdrawBeforeEnd(bool)", "00dba80c": "mineableTokenStorageContract()", "00dba864": "TOKENOPSPLATFORM_JOINTTOKENS()", "00dbeb31": "getPromoCodeForEther(bytes16)", +"00dd4e54": "unstakeAtIndexQuery(uint256)", +"00dd6eef": "normalize(uint256)", +"00dd87b9": "log(bool,uint256,uint256,address)", "00de1eb4": "cofoundersSupplyRemaining()", "00de8393": "SetLimit(uint256,uint256)", +"00ded57f": "calcRate(uint256,uint256)", "00dee43f": "initMinting()", "00df415e": "preSaleZxcCap()", +"00df41bf": "fnxPerFreeClaimUser()", +"00df5161": "valueB()", +"00df7b23": "delayExecution(address,bytes,uint256)", "00dfafa4": "addMarket(address,uint256,uint256,uint256,uint256)", "00dfd21a": "getUserDocId(address,uint32)", "00dff399": "Fibonzi()", "00dff60a": "partnerPreICOBonus(address)", "00e063bc": "AddressQuery(address)", +"00e0c3b1": "_getValueOffMillipercent(uint256,uint256)", "00e0c53f": "hold()", +"00e0d089": "getShardAddress()", "00e11919": "setClamTax(uint8)", +"00e175ae": "poolClosingTimestamp()", "00e1986d": "grantVestedTokens(address,uint256,uint64,uint64,uint64)", "00e29488": "selfRegisterDINWithResolver(address)", "00e31614": "modifyGuess(uint32,uint64,uint64)", +"00e33f32": "handtestPerBlock()", +"00e35488": "domain(bytes32)", "00e37634": "batchRefundzFixed(address[],uint256)", "00e38410": "getVotingMetadata(uint256)", +"00e3b393": "_mid()", +"00e3d2b6": "list_arbitrators()", +"00e3e600": "ALDPerBlock()", "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)", +"00e58cac": "trancheLevel()", +"00e5beb0": "availableStakingROI(address)", +"00e5ede3": "setMoveBurnRate(uint256)", +"00e5f5c8": "pendingKst(uint256,address)", "00e5fc5f": "rawVotes(address)", "00e610fc": "passwordMint(address,uint256,bytes32)", "00e62620": "zoDailyLimit()", "00e64f6d": "regularDonations()", "00e6abbe": "EggFactory(address)", +"00e6b48e": "AirDropClose()", "00e6b9f8": "MetalToken()", +"00e6e553": "PERIOD_EDITOR_REWARD_RATIO()", "00e756cc": "roleAddressAliaser()", +"00e763f7": "ERC20TokensWithdrawn(address,address,uint256)", +"00e77aa6": "peggedToken()", "00e7d289": "registerListening(address)", +"00e7e81b": "InitiateTransaction(uint256,uint256,uint256)", "00e8516a": "buySamples(uint256,address)", "00e85279": "ownerLock()", "00e893ce": "crowdsaleTokenPriceDenominator()", "00e97827": "percentRake()", +"00e9b174": "approveFarming(uint8,uint256)", "00e9c006": "deleteTransaction(uint256)", "00ea11ec": "calcCakAmount(uint256)", "00ea3146": "postGood(bytes32,uint256)", +"00ea803d": "payoutAndReset1(uint256)", "00ea81c0": "mint(address,uint256,string,string,bytes32[],bytes32[])", "00ea8737": "myTickets()", +"00ea9216": "RemoveERC20Maincoin(address)", "00ead724": "Ticket(uint256,address,bytes3)", "00eaedc8": "retrieveVanityForWallet(address)", "00eb52f2": "setIsActivated(bool)", "00ebc96e": "setCrowdsaleEndTime(uint256)", +"00ec11c3": "totalLiquidityLockedByPair(address)", +"00ec44de": "teamTokenHolder(address)", +"00ecd311": "firstHandInfo(address)", "00ed015b": "setETH(address,uint256)", "00ed2592": "sendEvents(address,uint256,uint256)", +"00efa895": "cancel(uint256,uint256)", "00efaa75": "tokenFinishMinting(address,address)", +"00efe12f": "rajaTransfer(address,address,uint256,uint256)", "00f052f6": "getBidByBidder(address,uint256,address)", +"00f06a6a": "integrityFee()", +"00f08d36": "userinfos(address)", "00f12159": "SpectrumNetworkNetwork()", +"00f1682e": "zgetFix()", "00f17754": "accountAt(int256)", "00f1c7ec": "setAllocationFee(bytes32,uint256)", +"00f27e38": "acceptFulfillment(address,uint256,uint256,uint256,uint256[])", "00f29d55": "isOrdered(address,bytes32)", "00f2c41b": "calculateTotalPayoutAmountAndCommission()", "00f31e76": "isPresent(bytes32)", "00f380f4": "communityFund()", +"00f38791": "VersionExists(uint256)", "00f3e717": "mrate()", "00f40839": "LogTowncrierCallback(uint64,uint64,bytes32)", "00f43f6d": "Simple_Claimable_Temporized_Stake()", @@ -604,7 +1057,10 @@ "00f54f0a": "Wallet2()", "00f5544f": "openGame(uint256)", "00f55d9d": "destroy(address)", +"00f56bc9": "logBytes19(bytes19)", +"00f575c4": "startVotingForTransferWeiFromExchangeToPayment(bool,uint256)", "00f5822c": "changePinakion(address)", +"00f60181": "processExternalMain(uint256,uint256,uint256,uint256,uint256,uint256,bool)", "00f62717": "setMockedBlockTime(uint32)", "00f64e66": "StakePoolICO()", "00f666d4": "QueueManager()", @@ -613,112 +1069,196 @@ "00f733e9": "pieceForSale()", "00f784a4": "OrderAdded(address,address,uint256,uint256,uint256)", "00f7c5be": "unregisterAddress(address)", +"00f7d3c4": "totalStackAmount()", +"00f7fa8c": "pairOtherBalance(uint256)", "00f821a7": "addMintContract(address)", +"00f86ac7": "getKeccak256(string)", +"00f8e2c1": "getStreamId(address,uint256)", +"00f93dbd": "Buy(address,address,uint256,uint256,uint256)", +"00f945cc": "setRewardCal(address)", "00f9ac78": "setVoteFactory(address)", "00fa081a": "multiplicator()", +"00fa3d50": "updateCommissionRate(uint256)", "00fa7be5": "EnterToken()", +"00faaa48": "OrderCancel(address,address,uint256,address,uint256,uint256)", "00fac74a": "salesdeadline()", "00faf4dd": "getTokenDivisor()", +"00fb39ce": "ownerOf(uint48)", +"00fb40c2": "vestingCompletePeriod()", +"00fb6bec": "isPrizetime()", +"00fb6edb": "farmRateWinner()", +"00fbd01e": "onWithdrawAndDistribute(address,uint256,address,uint256,uint256,uint256)", +"00fc763d": "GiverAdded(uint64)", "00fca46f": "initialAuctionEndTime()", +"00fd1c0d": "currentSamuraiId()", +"00fd6a61": "getBalanceTAI()", "00fdc73f": "currentMinPurchase()", "00fdd58e": "balanceOf(address,uint256)", "00fe03e3": "icoSoftCapInWei()", +"00fe0e12": "TokenPurchase(address,address,uint256,uint256,uint256)", +"00fe282b": "creatPowerPool(uint256,uint256,uint256,uint8,uint256,uint256)", "00fe4789": "batchFillOrKillOrders(uint256[],bytes[])", "00fe9590": "getMaxInt64()", "00fec4ba": "afterForkBlockNumber()", "00fece08": "giveDown(address,address)", "00ff2fb1": "log_2(uint256)", "00ff6262": "DefensorWallet(uint256,string,string,uint8)", +"00ff815b": "isUserStaking(address)", +"00fffc2d": "ProxyCreated(address)", +"010035af": "option()", "010066ad": "joinWhiteList(address)", "01008275": "addPersonalCap(address,uint256)", +"0100a555": "resourceToFeeRate(bytes32)", "0102305b": "logGameData(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", "01024700": "OnePhaseAuction()", +"010262b4": "getReward(string)", +"0102d772": "isBlockDisputed(uint64,uint64)", "0102fcfc": "distributeOwnership()", "010342f4": "averageSalePrice()", "0103c92b": "userBalance(address)", +"0103ca8f": "userTenDays()", "01044632": "setDevelopersTokens(uint256)", "0104855f": "mctTotalSupply()", +"01048eee": "synTotal()", +"0104cb77": "recoverRewards(address)", +"0104db1b": "STAKING_PERIOD()", +"010556a0": "transferAirdrop(address,uint256)", "01056361": "setupFunding(uint256,uint256,address)", "0106172a": "invalidEarlyPurchaseIndexes()", "01061ae1": "removeArtworksByString(string,uint32)", +"0106395f": "stakeTokenAddress()", "010648ca": "setDocument(bytes32,string,bytes32)", "01067543": "getParentCount(address)", "01068767": "ABL(address,address)", +"01069692": "pancakeswapRouterV2()", "0106bc8f": "PVE()", "010731c0": "sendCryptedHand(bytes32)", +"01073bf5": "buyPool1()", "0107a4eb": "XRRfrozen()", "0107a8df": "withdraw_bonus()", +"0107f15b": "blacklistable()", "01080c6f": "activateTokensForArbitration(uint256)", +"010887dc": "addResolversFor(uint256,address[])", "0109057e": "WIZISHOPPINGCOIN()", "01090c4e": "_removeProxyManager(address)", "01090c9e": "PowerOfPutin()", "01095962": "oraclize_setCustomGasPrice(uint256)", "0109f22e": "CrowdSale()", +"0109fb82": "crowdsaleFinalized(address)", +"010a00bb": "circulationToken()", "010a38f5": "getTokenId()", "010a7d65": "tryTransfer(address,uint256)", "010abbd0": "getCardOwner(uint256)", "010ae545": "creditTokens()", +"010ae757": "user_point_epoch(address)", "010afc20": "claimWrappedContractAdmin()", +"010b435d": "setNWhitelistedStatus(address[],bool)", "010b66de": "mainSale_Cap()", +"010b6b42": "aliaMultiplier()", +"010b7b69": "convertUni(uint256,uint256,uint256,address)", "010b8701": "hasSubstring(string,string)", "010ba4e2": "balanc()", +"010bc33c": "allocations(address,uint256)", "010bd255": "DPNToken(address,address)", +"010c1b69": "comprarBoleto(bytes1,bytes1,bytes1)", +"010c5c97": "isAirlineRegistered(address)", "010cbd30": "_triggerPVPSignUp(uint32,uint256)", "010cc97c": "transferMarketIncentivesFund(address,uint256)", "010d214e": "WithdrawProfit(address,uint256)", "010d2446": "getProblem(uint256)", "010d3bf6": "buyUsingRefBonus(address,address)", +"010d79a8": "stakesWeekly(address)", +"010d89e3": "approve_299(address,uint256)", "010dbfec": "sell(uint256,bool)", +"010dfa58": "reserveRateMantissa(address)", "010e3964": "mintTokenForPreCrowdsale(address,uint256)", "010e3c1c": "setInflationChange(uint256)", "010e8209": "admin(address,uint8)", +"010ec441": "reporter()", +"010ecfae": "LootboxAddress()", +"010f3237": "exitExcessPie()", +"010f5888": "atmPaused(address)", "010f7735": "burnToken(uint256,string)", +"01105fe9": "settleParts(address)", +"0110da10": "takeDividends(uint256)", +"0110da29": "getCommand()", "0110ea76": "TanterX(uint256,string,uint8,string)", "01114d74": "getCCH_edit_33()", +"011150b5": "purchaseBonds(uint256)", "0111ae8a": "maximumValueAfterGuaranteedPeriod()", "01122ddb": "BonusEnrolled(address,uint256,uint256)", "011285da": "multiplication()", "0112e2c4": "CotteToken()", +"01130dd0": "resetDelay()", +"0113122c": "changePixel(string,uint256,uint256,bool)", "01132b70": "setXTVNetworkEndorser(address,bool)", "0113b261": "getNumberOfShareHolders(uint256)", +"0113f86e": "getHasVoteForCurrentMilestoneRelease(address)", +"011448c0": "g_taker()", "01146844": "loadFund()", +"0114a05e": "bzrxRewardsPerTokenPaid(address)", "0114af17": "investment_address()", +"011515e0": "setSimulator(address)", +"01157ca5": "tokenVoteSupply()", +"0115a04f": "lockDayLength()", "0115a2f2": "_packAddressAndFunctionId(address,address,bytes4)", +"01163730": "callWithdrawTRX()", +"0116934e": "updateReward(address[],uint256[])", "01169399": "createEthTknDelegation(address,address,address)", +"0116af1c": "getClaimeReturn(address)", "0116bc53": "CostChip(uint32)", "0116bfc0": "BuyUpgrade(uint256)", "01172005": "affiliateContract()", "011721ad": "getValidation(address,uint256)", +"01173672": "spendERC20(address,address,uint256,uint8[],bytes32[],bytes32[])", "01173a74": "mintToken(address)", "0117b324": "addTestimonial()", "0118251c": "getHighWinPercent(uint256)", "011847a2": "inviteReward()", "011857d0": "bntConverter()", +"011875b5": "claimWpc(address,address[])", "011879db": "createAuction(uint256,uint128,uint128,uint128)", "0118895c": "reservations(address,uint256)", +"0118b7a5": "setIsTransferLocked(bool)", +"0118cf41": "StatusUpdate(uint8,uint8)", "0118e662": "SiekechuCoin()", "0118e686": "isCrowdsaleActive()", "0118fa49": "create(uint256,string)", +"011912f8": "changeMortgageRate(address,uint256)", +"01193ad7": "updateIntervalDays(uint256[])", +"011966f9": "IsMemberEligibleToWithdrawCapital(uint256,address)", "0119ada7": "eliminate(address)", "011a44bf": "isAllFrozen()", "011a8eb7": "DrawPrepareEvent(uint256)", "011aab02": "Oculta(uint256,string,string)", "011afdd7": "hello2()", "011b1a7b": "setCrowdsalePrice(uint256,string)", +"011b2174": "lastBatchNonce(address)", "011b29e3": "changeCourse(uint256)", "011bc2e1": "calculateWinners()", +"011c2360": "_lockInBalances(address)", "011c3d06": "getCurrentStats(uint256)", "011ce353": "OwnerRecall(address,uint256)", +"011ce8bf": "BurnAndReturnAfterEnded(uint256,uint256)", +"011cee36": "LPToken()", "011d07c0": "getMyIdeas()", "011d0b58": "buyListing(bytes5)", +"011d22d2": "getLostProfit_day_1()", "011d79ca": "CrowdsaleEnabled()", "011db570": "calculateObtained(uint256)", "011de7aa": "intervalAtTime(uint256)", "011e0162": "Flercoin()", "011e6492": "checkSuccess()", +"011e6beb": "updatev2(address)", +"011e940e": "_systemStatus()", "011eb18c": "removeAddressFromOperators(address)", +"011f78c0": "MAX_RETRY_COUNT()", "01201c0b": "getTheTokens()", +"01206113": "editNoFeeRecipentList(address,bool)", +"01208597": "token2Bars(uint256,uint256)", "01209d09": "updateVaults(address,address)", +"0120be33": "totalSynthsInKey(address,bytes32)", +"01210838": "getBonusToken(address)", "0121683f": "createAuction(uint256,uint256)", "01216f05": "calcEthReceived(uint256)", "0121b93f": "vote(uint256)", @@ -727,30 +1267,58 @@ "012397ff": "firstroundprice()", "01239adf": "maxPos()", "0123aff4": "BurnCoinToken()", +"01240c37": "getPrfReward()", +"01240eef": "changedOwners(address)", "0124188d": "CAIRToken()", +"01243fce": "candidate1()", "01250e4d": "CraigGrantEatDick()", +"01252d02": "gameToCrypto(uint256,bytes32)", "01253fbf": "threshold1()", +"012565ae": "contributeToTentative(uint256[],uint256,string)", +"0125a944": "pendingSushi(address)", "0125ae62": "setMeterPoint(int256,address,int256)", +"0125bb32": "emergencyRecoverERC20(address,uint256)", "0125d7c8": "IPAYTOKEN()", +"0125f566": "isTeamOrAdvisorsOrFounder(address)", +"01267951": "propose(address)", "0126b8b6": "batchAllocateTokensBeforeOffering(address[],uint256[])", "01272c2c": "canExecute(uint32)", "0127eb0d": "angelAdminAddress()", +"0127f142": "tokenToTrxTransferInput(uint256,uint256,uint256,address)", +"0127fe9d": "recalculatePayoutValue()", "01281641": "OfferCanceled(uint256,bytes,address)", "01281867": "keccak256calc(address)", +"0128423d": "update(uint256,string,string,uint8)", "01284ad4": "removeAddressFromPrivateWhiteList(address)", +"01286e00": "Setfeeaddrlog(address)", "012874a3": "EthsMePresale(address,address)", "01289e3a": "AvenceToken()", +"0128ae2f": "mintMonster(string,address,uint256,string)", +"0128aee8": "TokenAdd(address,uint256)", "01293b5c": "defaultURIEnd()", +"0129660f": "kebabFarmingPoolLpPairAddress()", +"01297890": "withdrawNoLocked(uint256,uint256,address)", +"0129df11": "setIncentive(uint256)", "012a08f8": "_vote(uint256,bool,address)", +"012a33aa": "getUnitPrice()", +"012a590c": "tokenPoolAmount()", "012aa25e": "releaseTokens(string,address,uint256)", "012aa809": "InvalidCoinUsage(string)", +"012ab429": "_updateAvailableBalanceOf(address,uint256,bool)", "012b1f73": "announceEndOfGame()", "012bac23": "addCoinAllowance(address,address,uint256)", "012beac9": "vendorRegistry()", +"012c7643": "set_trading_burning_rate(uint256)", +"012cb207": "_stakeTokenAddress()", +"012cb3e0": "ethDecimal()", +"012cc91d": "__PancakeSwapV2_init()", "012cd104": "LoveCrowdsale()", +"012ce501": "emergencyUnstake(uint256)", "012d61e1": "buyRedirect()", "012defec": "harvests(bytes32)", "012ea37c": "arrangeFreePoints(uint256,uint256,uint256,uint256)", +"012f1d67": "divd(uint256,uint256)", +"012f4e30": "faartToken()", "012f52ee": "escrows(uint256)", "012fd089": "EscrowAccountCrowdsale()", "012fec73": "KakushinToken()", @@ -758,100 +1326,188 @@ "01303778": "refreshMonarchyGamesReward()", "013054c2": "redeemToken(uint256)", "01307338": "dispatchRewardToken()", +"01308ac1": "index2sideService(uint256)", +"0130a33b": "updateMintAuthority(address)", "013130c0": "maximalInvestmentTimeTreshold()", +"0131c667": "controlTicket(uint256)", +"0131e815": "balancePow()", "01326c34": "clearAddresses()", "0132cc82": "tokenFounderLockTime()", "0133311b": "deleteLockTime(address)", +"01333f06": "topBidder()", "01339c21": "launch()", "0133db3a": "nameOf(uint256,address)", "0133e1fa": "RunchuToken(uint256,string,uint8,string)", "01340592": "MAX_CONTRIBUTION_USD()", "01345514": "BJLToken()", "013459ca": "getTokensForGraphenePower()", +"01345d85": "challenges_length()", +"0134ba41": "receivedRand(address,uint256)", "013512e3": "CABtoken()", +"0135cfbf": "MaltMarketCapChanged()", +"0135e278": "changeAmountPerBlock(uint256)", +"0135f740": "_feeAddress()", "0136356d": "unregisterAddresses(address[])", "01365406": "deathData_f19()", "01367751": "PryzeSale(address)", +"0136a306": "fatMaster()", +"0136d0be": "getSGRToken()", +"01370233": "setProtocolFactory(address,uint8,uint8,uint8)", "01372911": "throwsWhenActivatingBeforeDeployingANT()", +"01378f46": "burnAdd()", "0138aac1": "getUserBalanceOnToken(address,address)", +"0138b6ea": "burningArb(address,address,address,uint256)", "0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", +"0139430e": "landlordMaliciousCount(address)", "013953a6": "amountForRefundIfSoftCapNotReached()", "01395d33": "tokenPriceInWeiForDay(uint256)", "0139caad": "payout(address,uint256,uint256,bool,uint256)", +"0139e437": "STATS_TYPE_INVITE_1ST_REWARD_AMOUNT()", +"0139e6c4": "registerRoles(address,address)", +"0139f5df": "robotReturnFund(address,uint256,uint256)", "013a0e9b": "pairwiseOr(uint64)", "013a83f1": "beat(uint256,bool,uint8)", "013a9c50": "updateWallet(uint256,uint256)", "013b490c": "updateDaoAddress(address)", +"013b5c90": "Leer()", +"013b618c": "getSpacetimeUnits(address)", +"013b80af": "aandq(uint256,bytes32,bytes32)", +"013bbc1e": "IncreaseAmount()", +"013bcbfc": "developerFeeRate()", +"013c03a1": "removeCompoundMarket(address)", +"013cc15f": "changeAuctionParameters(uint256,uint256,uint256)", "013cf08b": "proposals(uint256)", "013d48bd": "getGuessStatus(uint256)", "013d64bd": "setCanCall(address,address,string,bool)", +"013d7c15": "mLuckyDog(uint256)", +"013d8f01": "liquidate(address,address,bool)", +"013da420": "multipleWinnersProxyFactory()", "013dbf17": "crowdsaleProgress()", +"013de9ae": "MessageBoard()", +"013e00c5": "setSimplePool(uint256,uint256,uint256)", +"013e4559": "_setConfirmationTime(uint256,uint256)", "013e5415": "getGoldDataInitialized()", "013e7c35": "getUrlCountOf(address,address)", +"013eb177": "ERC1820_REGISTRY()", +"013eba92": "lastClaimed(address)", "013ed428": "author1()", "013eebd7": "getmaxcardcount()", "013efd8b": "tokenToEthSwapOutput(uint256,uint256,uint256)", +"013f0377": "claimableUSD()", "013f83c9": "createTeam(address,uint32[])", "013f84fa": "getAllNumberOfBets()", "013fc2a3": "SmillesCoin()", +"01405531": "getProfitWallet(address)", "0140e359": "stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32)", "0140ea82": "setNormalRoomMin(uint256)", +"01415d8d": "uniToken(address)", +"01416904": "addRewardPoolLiquidity()", +"01418132": "setMaxDai(uint256)", +"01418205": "totalYield()", "0141e90a": "ICOaddress(address)", +"014231a8": "feeStake()", +"01424b2c": "excuteVote(uint256)", "01429244": "getVendorApplicationsCount(string)", "0142b8d1": "makeMerkle(bytes,uint256,uint256)", "0142c8de": "currentPeriodRate()", "0142c9ae": "isSoleout()", "0142d43e": "notHungry(uint256)", "0142d7b4": "authorizedBurnTokens(address,uint256)", +"0142eb11": "__Ownable_init()", "0142f904": "CalculatePriceofRigs(uint256,uint256,uint256)", "0143279c": "whitelistTicket(address)", "014345c8": "SENDER_BALANCE()", +"01437cc3": "eSMTX()", "01447eba": "disableCrowdsale()", +"0144cf1b": "getBaseInterestRate(uint256,uint256,uint256)", +"01451518": "LockTimeSetted(address,uint256,uint256)", +"01453b7f": "award_badge(uint16,address)", "0145e333": "init(address,address,address,uint256,uint256)", +"0146081f": "virtualDecayPeriod()", "014647f4": "approve(address,bytes)", "0146705b": "approvedRatio(string)", "0146d0ca": "sendVote(string)", +"01471a80": "setMaxTouchedOrders(uint256)", +"01488284": "DelegateAdded(uint64)", +"01488c05": "_exchanger()", +"0148fbc0": "fixRetW2_(uint256)", "01491f09": "baseRateInCents()", "01492a0b": "matchingEnabled()", +"01495c1c": "bids(address,uint256)", "0149ae4b": "finalizeExit(uint256,bytes32)", "0149eea0": "view_get_Treasure()", +"014a19f4": "LogContractDestroyed(address,bytes30)", "014a7453": "getPI_edit_22()", +"014a8231": "passiveInvestorIndex()", "014a897d": "Token_2()", +"014a8a49": "getPenalty(address)", "014b0732": "validateTrade(address,address,address)", +"014b6e14": "callSelfDestroy()", "014bed81": "setAmountToKoikeToken(uint256)", +"014c16fd": "changeFeeRatio(uint256)", "014c3dbc": "current_external_block()", +"014c6966": "startTrading(uint256,uint256,uint256)", +"014c6ddf": "calculateWrapperAddress(address)", "014c8ac0": "CBToken()", +"014cb63d": "challengeTransferBond(bytes32)", +"014ce4e1": "MarketFinalized(address,address)", "014d0f68": "hardCapHighUsd()", "014d36f4": "Afroin()", +"014d4115": "_tokenSupply(uint256)", +"014e2817": "initParams(uint64)", +"014e317a": "mintTokenPermissioned(address,uint256,uint256,uint256,uint256,string,uint256)", "014e5fde": "ARKController_1_00()", "014e6996": "ZTF()", "014e95ba": "rateBase()", +"014ea80a": "totalReduxMinted()", +"014ec7b3": "getMappingUserToAddress(string)", +"014ee259": "activeTranscoderSetDEPRECATED(uint256)", +"014f3aff": "GetPozTimer()", "014f7f22": "joinCount()", "014fc169": "setLockToAccount(address,address)", "015008b1": "reLoadXaddr(address,uint256)", "01500a97": "getTokenForCommunity(address,uint256)", "01501347": "disableRefund()", "01502460": "freezeTransfers()", +"0150841c": "loopIncrementBalance(uint256)", "01509730": "userdynamicprofis2()", "0150b530": "addressesLength()", "015129a1": "sellPriceEth()", "01512db1": "removeIntervalCoefficient(bytes2,uint256)", "01515a7b": "weiToReceive()", "01518d76": "sendQuery(uint256)", +"01519ed4": "raffleActivation(address,address)", "0151cf1d": "setVotingWinner(address)", +"0151fbf6": "SaleSucceeded()", +"01526a43": "setMaxMultiplier(uint256)", +"0152c792": "autoPoolIndex(address,uint128)", "01538868": "_setTokenURI(uint256,string)", +"01541ac6": "handleBC(bool)", "015493b4": "setFoundationWallet(address)", +"0154b817": "createERC721Controlled(string,string,string)", "0154d3ea": "notexistdept(string)", +"015579d9": "getNumLicenseOwners()", +"0155afb7": "cheetah()", +"0155ff16": "addMintLog(address,uint256,string,string,bytes32)", "01567739": "beneficiaries(address)", "015689c6": "testControlCreateWithParentsParentSameItemId()", "0156b323": "destroyTokensFrom(uint256,address)", "015773b6": "set_private_sale_total(uint256)", "015854f8": "quoteBid()", +"01587889": "withdrawFundraisingPart(address,uint256)", +"0158b0ed": "_doGasRefund(address,uint256)", +"0158d723": "claimTeamBNB()", "0159a91d": "concatenate(string,string,string,string)", +"015a0488": "passTo(uint256,uint256[],uint8,bytes32,bytes32,address)", +"015a0da0": "data_union_mainnet_template()", +"015a133a": "GetAthleteByTeamId(uint256)", "015a18ed": "start(bytes32)", "015a4ead": "unfollow(address)", +"015adb80": "tokenHxyFrozenBalances(address)", "015aeda7": "setAttribute(address,bytes32,uint256,bytes32)", "015afa55": "winnerIsB()", +"015b59da": "cosine(uint256)", +"015b6652": "setTokenSaleEndTime(uint256)", "015bf264": "depositTokens(uint256,address,uint256)", "015c1c7a": "toTokenAmount(address,uint256)", "015cb3ff": "pauseTime()", @@ -861,132 +1517,260 @@ "015def53": "priceFactorC()", "015e4f3a": "getConfigUint(int256,bytes)", "015e52c6": "getPool(uint32,int256)", +"015e63f5": "runDeposit()", +"015ed1eb": "inc_post()", +"015ed4c0": "goku()", +"015ee744": "getTokenUSDTPrice()", "015f32f9": "cappedSaleStartTime()", "015fa6c1": "setWeiCap(uint256)", +"015fb54e": "proposedBountyUnlockHeight()", +"015fe65d": "setAppIdExt(bytes32)", "015ff39f": "GNOSIS()", +"015ffb41": "ownerAUTOReward()", +"0160303c": "tempArray(uint256)", "0160751c": "setDepositary_function(uint256)", "01608f5f": "amountOf(address)", +"0160e036": "ScriptSigned(address,address)", "0160e2f6": "cancelOptionOrder(address[3],uint256[3],bool)", "01612def": "additionalInternal(bytes32,uint256[])", +"0161ca79": "setFundsContract(address)", "0161d5f0": "createCampaign(address,uint256,bytes32,bytes32,bytes32,bytes32)", "016211b5": "bonusAllocation()", "01621527": "destEthDevs()", "01623ee4": "basicRate()", +"01625cc2": "exp_two(uint256)", "0162827c": "bonus02End()", "0162f799": "getPrivatePresaleFundersCount()", "01637ff4": "getAccessory(uint256)", "0163d8ff": "MostValuableCoin()", +"0163e41f": "mint_TFI(address,uint256)", "01644ea7": "getSimple()", "016474ce": "withdrawalRound(address,uint256)", +"0164959b": "_in(address,uint256,uint256)", +"0164ee96": "functionByIndex(uint256)", +"01651028": "processAccumulatedPayout()", "01655e31": "CollectibleBidEntered(uint256,uint256,uint256,address)", +"01657bcb": "hatchingBRDCost(uint256,uint256)", "01659863": "_0xBitcoincashToken()", +"01664f66": "gemJoin()", "01665393": "BLOCKRADIO()", +"01670ba9": "lock(bytes32)", "016774e9": "donatetokens(uint256)", "0167eb85": "stone()", "01681a62": "sweep(address)", +"0168605e": "breedingAuction()", "016899de": "depot()", +"0168aef8": "init(uint256,uint256,address,address,address)", "0168e2e3": "JonsCoin()", +"0168e812": "initMixinSchedulerTest(uint256)", "0168f063": "tokenAmountOf()", +"0169d163": "TOKENS_ROUND_2()", +"016a3738": "destroyContract(address)", +"016a4284": "principle()", "016a8cf6": "topUp(address,uint32,uint192)", "016aba15": "setDividendTransactionNumber(uint256)", "016b0882": "Cst()", +"016bb8b3": "setBURN(uint256)", "016c6601": "_receiveDeposit()", +"016c738c": "requestedRand(address,uint256)", +"016ca842": "retrieveExcessIceTokens(uint256)", +"016d0a4c": "getAllRealBalance(address[])", +"016d0a6a": "checkMaker(address)", +"016d3221": "antiJeet()", +"016d4bfd": "withdraw10()", "016d5807": "_mint(address,uint256,uint256,uint256)", "016d60b3": "buyStoreCore(uint256,uint256,uint256)", "016d7c83": "pauseLottery(uint8)", "016deccc": "createContractSpecial(string)", "016e03b1": "getItemIdToTokenId(uint256)", "016e128b": "ProfitWithdrawn(address,uint256)", +"016ea765": "removeFunctions(string)", "016ea771": "isNotCommittee(address)", "016eb8a8": "percentage(uint256,uint256)", "016f34ad": "callgSoftCap()", "016fa018": "getPartnerBalance(address)", +"0170016b": "setEndParam(uint256)", +"01707182": "setBnbmarketPerBlock(uint256)", +"0170937a": "userCap()", +"0170a887": "getDust()", +"01717bfc": "addToMappingOfArray(uint256)", "01725a0b": "demo()", +"01728bdf": "slink()", +"0172f8a4": "_decode_sol_uint8(uint256,bytes)", +"01730a65": "mrTotalDeposit()", "01738ecd": "setCurrent(uint256)", +"0173977b": "batch(address,uint256,bytes32[])", "0173e3f4": "addCoins(uint256)", +"0174ce5d": "loadder()", +"0174db35": "bettersForFighter(address,uint256)", "0174e12b": "myx()", "01750152": "isNode(address)", +"0175bb28": "ChangeTransBurnrate(uint256)", "01769b37": "sendTokensToSeven(address,address,address,address,address,address,address,uint256)", "0176b596": "DreamBit()", +"0177081c": "setMinimumStaking(address,uint256)", "01770e0c": "NKTToken()", "01775f23": "_closeBooks()", "01778b6d": "Ynfiniti()", +"01779c9d": "stakingOfferRaise()", +"0177c42d": "playerRoundwithdrawAmountFlag(uint256,address)", "0178090c": "toSHA256(string)", "01788d1d": "Decabes()", "01788d56": "balanceOfTranche(bytes32,address)", "0178b8bf": "resolver(bytes32)", +"0178be5f": "ClaimRewards(address)", "0178fe3f": "getData(uint256)", "017945ba": "changeDollarPrice(uint256)", "017972af": "getNumbersFromHash(bytes32)", +"017a9105": "states(uint256)", "017b0d00": "highestBidForEdition(uint256)", "017b39a7": "getMiniPoolEdit_1()", "017bef67": "addExplorationByShip(uint256,uint256,uint256)", +"017bf9b4": "unset(string)", +"017def57": "updateDepositFee(uint256)", "017e322c": "getCurrentGameSteps()", "017e6f5f": "reOrganizeAuthorities()", +"017e7e58": "feeTo()", +"017ecc83": "setIntent(address,address,uint256,bytes32)", +"017f2626": "BuyAtMacroansyExchg(address,address,uint256,uint256)", "017f27fc": "saleIsClosed()", +"017f3987": "crvMintr()", "017fa10b": "returnUint128(uint128)", "017fa51d": "shouldRevertPure(bool)", +"017fc984": "getExpectedEth(address,uint256)", +"017fd445": "OCDividendClaim(address,uint256)", "017fe809": "getPower(uint256)", +"01809a32": "ethLiquidity()", +"0180e6b4": "RemainingSupply()", +"0181390c": "tstamp()", +"01821027": "setEnded()", "01828e61": "Quecoin()", "01836037": "foundationBoard()", "01838f01": "addAnimal(uint8,address)", +"0183c197": "pendingUNIFARM(uint256,address)", "0183f310": "potMembers(uint256)", +"01841924": "addDegens(address[],uint256[])", +"01841944": "EQUITY_TOKEN_SYMBOL()", "0184e952": "award(uint256)", "0184fc35": "crowdSaleAddress()", +"01857529": "dividendFeeBuyAlert_()", +"0185dce2": "createAndPayInvoice(uint256,string,address,uint256,address,uint256)", "0185f409": "getInvestorAddress(uint256)", +"0185fcbe": "BSCX_PER_TICKET()", "01863f79": "thisContactsTokens()", "0186aa16": "OxBioToken()", "0186c36e": "getCurrentExchageETH()", +"0186ff33": "lockTill()", +"018763ed": "totalReflections()", "0187699c": "VerixChain()", +"01877020": "setLiquidityPool(address)", "0187a677": "bbodServiceRegistry()", +"0187aea0": "maxMultiplier()", "0187e973": "PricingStrategy(uint256,uint256,uint256,uint256)", +"018892ac": "depositPendingFundsPermit(uint256,uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", "0188c09f": "altList(uint256)", "0188fdef": "setMaximumBuy(uint256)", "01890840": "MilestonePricing(uint256[])", +"01890df6": "ethereumChainId()", +"0189454c": "enableInterestForToken(address,bool)", +"01897eff": "MaximumETHInPublicSale()", "0189bd41": "getProofOfPerfBlockStateState(bytes32)", "018a25e8": "getBuyPrice()", +"018a2fc5": "withDistribution()", "018aba3f": "createPledge(address,uint256,uint256)", +"018af5a7": "levelsVaultAddress()", "018b06ff": "isWinner(address,bool)", +"018b2ba3": "x_adminSubmitAirdropElements(bytes26[])", "018b64b6": "AuctionCancelled(address,uint256)", +"018b6e00": "creditsOfOwner(address)", +"018b6ff4": "WinningTeamDetermined(bytes32,string,bytes)", +"018bbf9c": "add(address,uint16)", +"018c6c55": "setMaxAccountMergingWindow(uint256)", +"018c84c2": "log(address,address,address)", +"018cc90d": "buyCar(uint256,uint256)", "018d3490": "assignOracles(uint256,address[])", "018d6f7a": "showethconf(address)", +"018d8f4d": "getLatestSppId()", +"018dc8ab": "_getRateAndUpdatedTime(bytes32)", "018de5c5": "distributeCBC(address[],uint256,uint256)", "018dfaa0": "calcCount(uint256)", +"018e0d06": "lessThanFiveThousand()", "018e13d0": "numOfCurrentEpoch()", +"018e38b7": "BLFI_PROVENANCE()", "018ed439": "_getTokenForType(address,uint256)", +"018ee9b7": "harvest(address,uint256)", +"018ef872": "FinalizeSuccess(uint256,address,uint32,uint32,uint8,uint256,uint8)", +"018f003e": "memberAddress2index(address)", "018f5472": "isAUser(address)", "018fa360": "getDeposits(address,address)", "018fbf9f": "hashAt(uint16)", +"01901558": "cloudDoRound2(string,uint256)", "01909317": "_storeSettingDataState(uint256,address,uint8,string,address,address,string)", "0190b805": "editEarlyParicipantWhitelist(address,bool)", "0190e84f": "Bitscorone()", +"0191768d": "addFunder(uint32,uint256)", +"01918c99": "_updateTotalSupplySnapshot()", "0191903e": "setBlogregistry(address)", +"0191b66c": "DEFLATE_ROLE()", +"0191c597": "lgn()", "0191d35c": "summFounders2()", "0191dc92": "numOfAdmins()", +"01920b2c": "freeze(string,uint256)", +"019294cd": "setPairAddress(address,address)", +"0192f743": "getAccountBalanceLimit(address)", "01930b6e": "darknodeDeregisteredAt(address)", "01933c43": "TOWN_START_PRICE()", +"01935a34": "checkAddressETH(bytes32)", +"0193635d": "resonance(address)", +"0193aaf8": "LogChangeSTRAddress(address,address)", +"0193aea2": "unitShares()", +"0194497f": "DENOMINATION_ASSET()", "0194abaf": "prolong()", "0194ac16": "BlockchainFUN(uint256,string,string)", "0194db8e": "sum(uint256[])", +"01952aea": "mintZTokens(address,address,uint256)", +"019562e6": "setMaxRankNumber(uint256)", +"0195d2dc": "usdtsacLPPool()", "01968a56": "mintAllocation(address,uint256)", +"0196b8f5": "freeCommunityTokens()", +"0196c38f": "generateKey(uint64,uint8)", "01970353": "setStepOneTime(uint256,uint256)", "01970c6b": "team_funds()", +"0197243e": "valueIOUsScalingFactor()", +"019747b3": "getContractBalanceToken()", +"01977133": "getEthToDaiOrders(uint256)", "0197d972": "VESTING_PERIOD()", "01984892": "name(address)", "019859bb": "changeMembershipContractAddr(address)", "0198632a": "getPurchasedProducts()", +"019885cd": "getCoefficientList()", "0198aa74": "firstsaleOpen()", +"0198f8bb": "adminSetUser(address,string,uint256)", "01991313": "scheduleCall(address,bytes4,uint256)", +"01991a23": "updateAddress(string)", "01996951": "ethPerTransactionLimit()", "01998ad4": "GlobalAdminChanged(address)", "0199c7b2": "numberOfHolders()", +"019a8e5b": "getFinalShare()", "019b1576": "backupAddress()", "019b32ad": "transferToSalesPartner(address)", +"019b417a": "withdrawNft(uint256,uint256,uint256)", +"019b47e8": "getRecommander()", +"019b4a16": "makerdaoHasCdp()", "019c3f52": "newCollectible(uint256,string,uint256,uint256,uint256,int256,string,uint256,string)", "019c5675": "BatchComplete(uint256)", "019c920c": "setcompany(uint256,string,string)", +"019cb110": "balancdeOf(address)", "019d2729": "approve(bytes)", +"019d7c7a": "LAYER_DIFFICULTIES(uint256)", +"019e2729": "initialize(uint256,uint256,address,address)", +"019e2f73": "setkKushPairAddress(address)", +"019e4d53": "BAKE_RATE()", "019e56fd": "findCurrentFor(address)", +"019e6579": "MAX_WITHDRAWAL_PER_DAY()", +"019e963d": "dollarDecimal()", +"019eaf8f": "BRONZE_SNOWBOARD()", +"019ed8b2": "getTokenToReserveInputPrice(address,uint256)", "019f232a": "getTask(address)", "019f5c5b": "narcoCore()", "019f64cc": "payBack()", @@ -997,71 +1781,137 @@ "01a01551": "getApprovers(string,string)", "01a048c3": "mintLockTeamTokens(address)", "01a08a8b": "getWorkerPool(address,uint256)", +"01a0a52c": "setTransactionExecuted(bytes32)", +"01a0b1ab": "setComp(uint256,uint256,uint256)", "01a0dee1": "investorsSupply()", +"01a0fbf5": "choice1ETHPot()", +"01a104bd": "setMaxTicketPrice(uint64)", "01a12fd3": "removeAlerter(address)", "01a15ee9": "mintTokensLocked(uint256,int256,address,uint256,uint256)", "01a1b778": "battleId()", +"01a2125d": "totalPartnersReleased()", +"01a265f7": "BinanceCoinPriceChanged(uint256,uint256)", "01a2789e": "transferPreSignedBulk(address[],address[],uint256[],uint256[],uint256[],uint8[],bytes32[],bytes32[])", "01a2f48a": "changeAssetPackPrice(uint256,uint256)", "01a2f75c": "createContract(address,uint256,uint256,uint256)", "01a340a5": "totalBoughtColor()", +"01a354a3": "addPoolProgram(address,address[2],uint32[2],uint256,uint256)", +"01a382d7": "toERC1155Ids(uint256)", +"01a3bd60": "DelegateUpdated(uint64)", +"01a3c30b": "init(address,address,address,address,uint256,address,uint256,uint256,bool)", "01a413b9": "bankrollAvailable()", +"01a45e5b": "bulkLock(address,uint256[],uint256[],address[],uint256[],uint8)", +"01a48e21": "jian(uint256,uint256)", "01a50001": "rewardEvery100000Draw7(uint256)", "01a521d6": "getSellerBalancesOfCurrentAuctions(address[],address[],address)", "01a53d3b": "maximumBuyBackPriceInCents()", +"01a56383": "claimingFeePercent()", "01a5e3fe": "isWhitelisted(bytes32)", +"01a65f76": "hunterToken(uint256,string,string)", "01a682c1": "createTeam(string,string)", "01a68a94": "donkeyCoin()", "01a6ab93": "PassedGateway(address,uint256)", +"01a74a08": "isFactory()", "01a77625": "_subEth(uint256,address)", "01a7a8c0": "batFundDeposit()", +"01a7ec9a": "purpleWireCutters(address)", "01a80669": "createInvestorWallet(uint256,address,uint256)", +"01a855a2": "endfourthround()", "01a88f7d": "buySeeds()", +"01a89819": "maxLeval()", +"01a8b288": "getRewordForSecond(address)", +"01a8cae2": "cleanToken(address)", "01a8d07f": "addBidder(uint256,address,uint256,uint256)", +"01a93783": "boardroomAllocateSeigniorage(uint256)", "01a93f1c": "giveAwayOwnership(address)", "01a96b94": "set_stage_Discount(uint256)", +"01a9f1bf": "transferFeesToGovernor(uint256)", +"01aa5efe": "remainingValueRedeemed(uint256)", +"01aa8a6e": "loanRates(uint256)", +"01aab26c": "sendPrizeToWinner()", "01ab2a66": "getPlayer1()", "01ab2f14": "Manus()", "01ab9806": "BUY()", "01ab9f19": "_safeCall(address,bytes)", +"01ac145b": "vaultFee()", +"01ac4fb2": "getPairs(address[])", +"01ad176b": "S_PRINCIPAL_AMOUNT()", +"01ad22f9": "RemoveAddress(uint256,address[])", "01ad35e3": "mintTokensForCommand(address,uint256)", "01ad3936": "assignedAmountToDevelopmentTeam()", "01ad62a3": "getBackendWallet()", +"01ad68fe": "addTotalSpentPerDay(address,uint256,uint256)", +"01ad7e03": "changeLockTimeEpochs(uint256)", +"01adcce7": "setbaseMeta(string)", "01ae19d6": "LogLOTTransfer(address,uint256,uint256,uint256,uint256)", +"01ae27e4": "TransactionsWithBurnModeOn()", "01aef755": "setBestProbability(uint8)", +"01af3830": "setChainJobId(string)", +"01af6fd0": "setPause(uint8,bool)", "01afd5f3": "allBalancesForManyAccounts(address[],address[])", "01afebac": "ICOopen()", +"01b05336": "addBarkeeper(address)", "01b057b1": "isAdminSet()", "01b07f75": "adjustValue()", +"01b0809b": "team_amount_1()", +"01b09217": "LENDING_POOL_CONFIGURATOR()", "01b0c649": "collect(address,address,uint256,uint256)", "01b11792": "toggleLocked()", "01b125e6": "resetTimer(string)", "01b14149": "getFcontracts(address)", "01b2320e": "getStartBlock(uint256)", "01b2a413": "baseVerifierFee()", +"01b2c698": "record(address,string)", +"01b2db7c": "increasePositionWithOwnFunds(address,uint256,address,uint256)", +"01b2e8eb": "getEventStatus(uint64,uint64)", +"01b37626": "ClaimFunds()", +"01b38af5": "whitelist(address[],bool)", +"01b48e34": "estimateRemainingBlocksToPrize(uint256)", "01b490ed": "CAIDToken()", +"01b4e7d9": "Set_Limit_Amount(uint256)", +"01b521d6": "getInterestAccrued()", "01b54744": "setLLV_edit_24(string)", "01b5990c": "getCreatedOn(address,uint256)", +"01b5ebe4": "OneWeth()", "01b5ffcf": "addVesting(address,address,uint256,uint256,uint256,uint256,bool)", +"01b6844c": "btsToLp1Route(uint256)", +"01b689c0": "lockUpdate(uint256)", +"01b6965a": "setStakeContractAddress(address)", +"01b6a802": "getLiquidationRatio()", "01b6b523": "viewMyContribution(bool)", +"01b6d61b": "UNKNOWN_ERROR_MESSAGE()", +"01b7037c": "redeemPositions(address,bytes32,bytes32,uint256[])", +"01b71ed8": "dayUnblock()", "01b74d73": "TEAM_SHARE_PERCENTAGE()", "01b78b12": "BitcoinMoon()", +"01b7cff4": "_disputeManager()", +"01b7dcb4": "Complete()", +"01b84d05": "exchangePartners(uint256)", "01b852c9": "MetadollarCrw()", "01b869f1": "release(uint32,uint32,uint32,bytes)", "01b8a0b9": "createTestingEnvironment()", +"01b8df8f": "forwardAll(uint256,uint256)", +"01b90111": "zzzV2token()", "01b96aaf": "waveCap2()", +"01b98339": "removeResource(uint256)", "01b98853": "assetFreeze()", +"01b99e56": "enableBool1()", +"01b99eba": "withdrawDust(address)", "01b9a397": "setDescriptor(address)", "01b9fe59": "testMint(int256)", +"01ba03fd": "getcurrentTokenAmounts(uint256)", "01ba2bd5": "Request_Airdrop()", +"01ba4a36": "getFinalizedStatus(uint256)", "01ba6805": "loseEth(address,uint256)", "01baa2e7": "validateCap()", "01bb4edf": "RAIOCO(uint256,string,string)", "01bb67a8": "InvestCancelEvent(address,uint256)", "01bb7e5a": "getLockerDetails(address,uint256)", "01bb85a4": "__startBlock(string)", +"01bba338": "getSeats_SideB()", "01bbb8fa": "verifyTimelock(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", "01bbc3f5": "stopWhitelistReservetion()", +"01bbecde": "swapEthToDai(uint256,uint256,uint256)", "01bc237d": "researchers(address)", "01bc43a0": "sha(uint128,bytes32)", "01bc45c9": "_admin()", @@ -1071,52 +1921,88 @@ "01bea2bd": "Mountain()", "01beb7cf": "setBadgeLevel(bytes32,uint256,string,string,bytes)", "01bebf36": "updateAirdropStageState(string,bool)", +"01bec1cc": "thirdPartyTokenAddress()", "01bf6648": "removeFromWhiteList(address)", +"01bf7c92": "FundraiseDefined(uint256,uint256)", +"01c03a87": "updateContractAbstract(uint256,string)", +"01c0954b": "createTokenTransfer(address,address,uint256)", +"01c09f14": "contractsActive(address)", "01c0c6bc": "_processRefund(bytes32)", "01c11d96": "MAX_PRICE()", +"01c11f15": "hashHead()", +"01c1a583": "stakesWeekly(uint256)", "01c1c877": "setChampion(uint256)", "01c1de96": "fechVoteInfoForVoterByStage(address,uint256)", +"01c234a8": "PERCENTS_DIVIDER()", +"01c23ef4": "exchangeAccountsMap(address)", "01c24a90": "minimum_balance()", "01c28786": "date_end()", "01c2b6f5": "commitDeadline(bytes32)", +"01c2d987": "onepointfiveperc()", "01c355df": "appSelectors(bytes4)", "01c432ce": "wrongClaimerOrUnsetInManager()", +"01c43f92": "abis(address)", "01c4a07e": "convertDeposit100to70(address)", +"01c4b316": "_whitelisted(address)", +"01c4e094": "cevaWhitelistFounderDeveloper(address,bool)", +"01c4f575": "getPoolInfoByTokens(address,address)", "01c516b1": "crowdsale_end()", "01c543c2": "claimOreOnlyFromAssetId(uint256)", +"01c58c34": "setBlackList(bool,address)", "01c5b2f0": "compressBoard(uint256[81])", "01c64ce8": "maxTxGas()", +"01c67203": "winPercentage()", "01c68b4e": "addSrNumberOfbook(uint256,uint256,uint256,uint256,uint256)", "01c69452": "brandAccounts(uint256)", "01c6adc3": "transferFrom(address,uint256)", "01c6f167": "auctionsRunByUser(address,address)", +"01c76f81": "setLiquidator(address)", +"01c79b52": "secureHealth()", +"01c79bee": "takeBonus(uint8)", "01c7cb58": "migrateMileageLeader(uint8,address,uint256)", +"01c7f541": "takeBack(uint256[],uint16[],bytes32,uint8,bytes32,bytes32)", "01c835e5": "returnRemainRewardToken()", "01c8c9d4": "getCurrentBonus(bool)", +"01c9605b": "removeCandidate(string)", "01c96df6": "ZeusShieldCoin()", +"01c9a751": "getLastBlockWithdrawn(uint8)", "01ca1d72": "getTransformRate()", +"01cabdb1": "_onDisputableChallenged(uint256)", "01cb0261": "getWeightedVote(bytes20,uint256)", "01cb3b20": "checkGoalReached()", "01cb63e8": "arrayIndexOutOfBoundsDynamic(uint256)", "01cceb38": "setExpiry(uint256)", +"01cd4d2b": "setFeeTotal(uint256,uint256)", "01cdc371": "getCBATransactionMessageLength(address)", +"01ce5e0d": "setRuggiessPerDay(uint256,uint256)", "01ce5e75": "fundsCombinedValue()", "01ce616f": "setMaxweiAmount(uint256)", +"01cf6cd7": "isRunningElection()", "01cff174": "getNumberOfAvailableStartTickets()", "01cffa17": "getTokenWithBonus(uint256)", "01d09a3c": "setCallbackGas(uint256)", "01d0ac0b": "requestAccess(address,address)", +"01d0e2b5": "i(uint256[])", "01d1c7fd": "BTCS_ETHER_CAP()", +"01d1c810": "oneSidedCommit(uint256,uint256,bytes32)", +"01d1f0a4": "toadPerBlock()", "01d223c1": "set_modified_weth_address(address)", +"01d22ccd": "rebalancer()", +"01d2b8c4": "mintTeamToken(address,uint256)", "01d2db89": "isValidKyc(address)", +"01d353f0": "partialAmount()", "01d37b0c": "changeHiddenValue(string)", "01d4277c": "thisisalsofind(uint256)", "01d42a9c": "closeChannel(address,uint256)", +"01d43945": "getCastleObjInfo(uint32)", +"01d4576b": "minimumOrder()", "01d490fd": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256)", "01d4fb7c": "fundsKeeper()", +"01d5062a": "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", "01d511f1": "request(string,string)", "01d5c488": "gemCriticalRateConversion()", "01d6e35b": "unfreezeTeamTokens(address)", +"01d74a55": "addLiquidity(uint256,uint256,address,uint256)", "01d78a8b": "alterTotalSupply(uint256)", "01d81121": "allocateCreationInvestmentingToken(address[],uint256[])", "01d81a50": "slice(bytes,uint8,uint8)", @@ -1125,46 +2011,93 @@ "01d90bbc": "getCurrentUserMaxPurchase()", "01d92dc8": "unsoldAllocatonScheduled()", "01d97f08": "setMapping(bytes32,bytes32)", +"01d9873a": "gamePlayers(address,address)", "01d98d44": "changesDenied()", +"01d9a8a7": "wagers(string,uint256)", +"01d9be30": "transferGAMEtoCFO()", +"01d9da57": "getUid(uint256,uint256,bool,uint256)", +"01d9e1d4": "ForgeNdaoOutput(uint256,uint256,uint256,address,address)", +"01d9fd54": "addDeal(uint256,uint256,uint256,bytes32,bytes32,string,address,address)", "01da31ad": "_setPermission(address,address,bytes4,address,bool)", +"01da5bf5": "universeShare()", "01da73ff": "isValidChannel(bytes)", "01da7b31": "getBankName(address)", +"01da99bc": "getEarnRatePerBlock()", +"01db5553": "SetMinReward(uint256)", "01db61e0": "HARD_CAP_EUR()", +"01db84ec": "_dsvbalance(address)", +"01dba76b": "workable_fake()", +"01dbbc21": "LogTriggerQuery(bytes32,uint64,address,uint8)", "01dbdf44": "priceAt(uint256,uint256)", +"01dc2c2b": "basicMax()", +"01dcf1a7": "LOG_PolicyExpired(uint256)", +"01dd15e8": "basisGold()", +"01dd4c36": "updateArtworkEditions(uint256,uint256)", "01dd91c0": "force_received()", "01dda205": "updateSoftCap(uint256)", "01ddc95e": "getTargetBlockLength()", "01ddfa9d": "referalFundBalance()", "01de7a1c": "updateVendorName(uint256,string)", +"01dea771": "liquidityLock()", "01dee025": "getTombDetail(uint256)", +"01df2ff1": "enterStaking(uint256,bool)", "01df6885": "getTokenDetails(uint64)", +"01df7b6f": "createAsset(string,string,string,string,uint8,string)", "01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", +"01e0047c": "regCustomer(address)", +"01e04e4e": "poolBalanceOf(address)", +"01e086e1": "revokeGame(address)", +"01e089cb": "_twapUpdate()", "01e0ba3a": "bonusAccountIndex(uint256)", "01e11c29": "SellToken()", +"01e13b51": "fulfillAlarm(bytes32,uint256)", +"01e15b52": "setERC20Parent(address)", "01e1bcf7": "rateIcoPreICO()", "01e1c861": "minWeiValue()", "01e1d114": "totalAssets()", "01e1ecb4": "releaseTokensAndEtherForEmergencyFund()", +"01e28d84": "removeExchangeAddress(address)", +"01e28e09": "addClaimant(address,uint256,bool)", "01e30a7f": "bigContributionBound()", "01e33667": "withdrawToken(address,address,uint256)", "01e343db": "setOffset(uint256)", +"01e375c6": "consensus(string,bytes32,bytes32,uint256,uint256,uint256)", "01e3d346": "create(bytes1,bytes32,uint256)", "01e3d718": "transto(address,uint256)", "01e40f5b": "getFeeWindowBurnTargetValue()", +"01e4218a": "proposeToken(address,string,uint256,address)", +"01e45f27": "topSellers(uint256)", "01e4741c": "Ebets()", +"01e492df": "boostLevelOneCost()", +"01e4a5c1": "_overnightFeePeriod()", "01e4abc1": "setWhiteList(address,address,uint32)", +"01e4f53a": "relayTokens(address,uint256)", "01e5691c": "createTransaction(uint256,address,uint256,uint256,address)", "01e56c77": "stopPayouts()", "01e57a37": "dth()", "01e5aa3e": "getIssuerArray(bytes32)", +"01e5e717": "votePeriodActive(uint256)", +"01e625fc": "migrateBalances(address[],uint256[])", +"01e64725": "records(bytes32)", "01e68cbb": "timestamp_msg()", "01e6a70e": "EthlanceInvoice(address)", +"01e6b407": "viewSingleDividendByIndex(address,uint256)", +"01e6f521": "minBuyWei()", "01e73b73": "bulkVote(uint256[])", +"01e769e2": "LockFunds(address,bool)", +"01e7d1cb": "projectPoolAddress()", "01e7fefe": "addParticipant(address,uint256)", "01e88208": "permissions(address)", "01e8b608": "TOKEN_SECOND_EXCHANGE_RATE()", "01e91872": "DECToken(uint256,string,string)", +"01e953a7": "nkcmList(uint256,address,uint256)", +"01e980d4": "set_new_affiliateSplit(uint256)", +"01e9d757": "minMintAmount()", +"01e9ed42": "toKeyValue(address,string)", "01ea6270": "setTeamTokenAddress(address,address)", +"01eaa6ed": "cutForBurn(uint256)", +"01eadcfa": "canAdvertiseOnBlocks(address,uint16[])", +"01eb572c": "getAirdropVersion()", "01eb6fdd": "max(uint32,uint32)", "01ebc88e": "pingReading(uint256)", "01ebccb9": "activeNameOf(address)", @@ -1172,129 +2105,246 @@ "01ebebf2": "myTulips()", "01ec0793": "profitsOf(address)", "01ec16ef": "RulesChangedEvent(uint256,uint256,uint256,uint256)", +"01ec6807": "distributeToken_95T(address,address[],uint256[],uint64)", "01eca37c": "medalDataContract()", "01ecaca5": "changeOVCPerEther(uint256)", +"01ecb65c": "LeftCommunity(string,address)", "01ed7f8b": "distribute(address,address,address)", +"01edb0c6": "assign(bytes16,address,uint256,uint256)", "01edb1ea": "dayIdx()", +"01ee9de0": "getMatchID(uint256)", +"01ef1e3c": "EtherRefund(address,uint256)", "01ef6cad": "addJobContractFeedback(uint256,string,uint8)", "01ef74f1": "tokens_rewards_available()", "01efb6c8": "getOrderInfo()", +"01f009ae": "presaleGrantId()", +"01f07db5": "isTokenMappedAndIsErc721(address)", +"01f0b564": "pastaPerBlock()", +"01f16a3a": "totalPlow()", +"01f27907": "drawerBonusRate()", "01f2a2c5": "buyForBtc(address,uint256,uint256,uint256,uint256)", +"01f2bb16": "totalMintCurrent()", "01f40a85": "issuePurchase(address,uint256)", +"01f46348": "FAILURE_USER_TRANSFER_LIMIT_MESSAGE()", +"01f47471": "transferAmount(address,address,uint256)", +"01f4c3aa": "ipfsDataHashes()", +"01f4c4c7": "setSwapAddressv1(address)", +"01f4e6d0": "Create(uint256,address,string,uint256,string,string,string,string)", +"01f53ac4": "setB(bool)", "01f59d16": "maxFee()", +"01f5ad65": "updateSignedReservedAmount(int256)", "01f5af30": "addJobSponsorship(uint256,string,string)", +"01f5d7c3": "Trade(address,address,uint256,uint256,uint256,uint256,uint256)", +"01f60217": "JACKPOT_MODULO()", "01f6dad0": "remaining_for_sale()", "01f6e6d5": "asignarDni(uint256)", "01f78f43": "getFreeCHICKEN()", +"01f79fb6": "initialize(address,address,address,address,address,bytes)", "01f7e49a": "removeFromPresaleWhitelist(address)", +"01f7f299": "counter1()", "01f81649": "claimBrokerFee()", "01f865c3": "setWinPercent(uint256)", "01f89de0": "purchaseSharesOfArtwork(uint256)", +"01f8a976": "updateRewardPerBlock(uint256)", "01f99ad7": "left9(uint256)", "01f9a0aa": "setOraclizeQueryMaxTime(uint256)", +"01f9f5b9": "createBet(address,address,uint256)", "01fa3e53": "addSocial(address[],uint256[])", +"01fa497b": "showmonitor()", "01fabd75": "addArbitrator(address)", "01fae3b6": "setTokenState(uint8)", +"01fb557c": "g_interestRates(address)", +"01fb5645": "emergencyBEP20Drain(address,uint256)", "01fbaf99": "totalLareSold()", +"01fc20e2": "members(uint256,uint256)", +"01fc3252": "tokenBalances(uint8)", +"01fc3326": "refundTradeOnlyTransaction(address,address,uint256,uint256)", "01fc59e1": "checkId(bytes32)", +"01fcb535": "upkeepRegistry()", +"01fcc1d3": "setExecutionMaxPerTx(address,uint256)", "01fce27e": "getQueue()", "01fd1b1d": "finalizationFailHook()", +"01fd4b89": "constantK()", "01fd89a4": "getFlags(bytes20)", +"01fe2907": "getnovel()", +"01fe2b0c": "minMintRate()", +"01fe2b58": "CreatItem2Contract(string)", "01fe34e3": "EWCertificationCenter(string,string,string)", +"01fe3e0f": "buyUserName(string,uint256)", +"01fe84c2": "getUserBiddedAuctionCount(address,address)", +"01fec108": "BetFinalized(uint256)", "01feeef4": "getTitleDeeds(bytes32)", "01ff62ab": "isConcerned(uint256,address)", "01ff8961": "getPortfolio(uint256,address)", +"01ff9f24": "mintWithWerewolf(address,string,uint256,uint256)", "01ffc9a7": "supportsInterface(bytes4)", +"02009900": "_roundOpenTimestamps(uint256)", "0200b10d": "collectedEthers()", +"02011bf9": "sign_up(string,string)", "0201b5d5": "transferOverBalanceFunds(address,address,uint256)", "0201e253": "WhoHoldsPatentFor(bytes32)", "0202f3ea": "allowTransfersTo(address)", "020331dd": "getFact(bytes16)", "0203596d": "purchaseKingdom(string,string,bool)", +"0203bc8d": "deposit(bytes32,address,address,uint256,uint256,uint8)", +"0203e0fd": "__transferGuardianship(address)", +"02049825": "setAddrETHUSDpriceFeed(address)", "0204c163": "maxFadeoutPromille()", "0204d0f8": "unlockOwnerDate()", +"02050be6": "_getRatePerBlock()", "02055186": "Alexa()", "02063d93": "calcMaxDeposit()", "0206432d": "FlexionCoin()", +"02064abc": "changeAllOperationKeysWithoutDelay(address,address[])", "02064b42": "consul_price()", "02065fb8": "isLoanFunded()", "02067e6a": "add(uint8)", +"0206a115": "initChickenPerBlock()", +"0206b53c": "setFsgAddress(address)", +"0206d932": "set_referrer(address)", "0206deb5": "unitsLimitForCurrentSaleStage()", "0206e79d": "decodeParamId(uint256)", "02072579": "controllerSet()", +"02075874": "EthTradeCancelled(uint256,uint8,uint8,uint256,address)", "02078166": "unburnedTypeTokens()", "0207eda6": "NOVA(uint256,string,uint8,string)", "02083e27": "REET()", "02093ee2": "finalize2()", "02096a8e": "amountsByCurrency(uint256)", +"020972b8": "uni_frax_usdc()", "02099186": "totalRise()", +"02099d7e": "GorgonaAddr()", +"0209b0b1": "removeInvestors(address)", "0209f982": "reminder()", "020a0ff5": "setClaimLimit(uint256)", "020acb6a": "round1Bonus()", +"020b0fe5": "keyHolderFees_()", +"020b2e32": "orcl(address)", +"020bb98e": "_playerRoundsInfo(address,uint256,uint256)", +"020bcc9e": "withdrawDAI()", "020bdf54": "getFreeStrippers()", "020d308d": "removeDelegate(address,address)", "020d4786": "OmmerToken()", +"020dd3b7": "ethToToken(uint256,address,uint256,uint256)", "020de876": "setTakerFeeRate(uint256)", "020df04b": "createBarCode(bytes32)", "020df957": "setAirdropReceiver(address)", "020e2d48": "getArrayHashLibry(bytes32)", "020eb6e1": "createWorkOrder(address,uint128)", +"020ecff4": "approveSupplier(address)", +"020ed8d3": "setAlgorithm(uint8,address)", "020f899a": "hybridizationPrice(uint256)", +"020fdf5b": "startFundingBool()", +"020fe6e5": "used(uint256)", +"020feb06": "taxSingleAndModifyParameters(address,address,address,bytes32,bytes32,uint256)", +"02101899": "minRebaseTimeIntervalSec()", +"02106a63": "zeroFeeReciever(address)", "0210d751": "getMyGames()", +"021127b5": "tokenUserLastName(uint256)", "02114111": "allowTimelock()", +"02119242": "calculateDecay(uint256)", "0211c4bb": "MessageToken()", +"021233d0": "investInEthereumMoney()", +"02124e64": "TreeList(address)", "0212d0b9": "payByTokens(uint256)", +"0212e78a": "accPwdrPerShare()", "0212fd1f": "InternationalRapidAsset()", "0213443c": "changeZombieCreator(address)", "02135534": "getNinja(uint256)", "02138563": "buyOre()", "02140adf": "CryptoHuntersToken()", +"02143aa9": "run(bool,uint256)", +"02147b83": "yieldn()", "0214e9cf": "preIcoFinishTimestamp()", +"02150afa": "approveUSDC()", +"0215b1a2": "AuctionSuccessful(uint256,address,uint256,uint256,address)", +"0216830f": "singleStorage()", +"0216c519": "lpFeeAddress(address)", +"0216e304": "MAX_NUMBER_OF_TOKENS()", +"0216f202": "Mycar()", "0216f544": "transferExecutor(address)", "02171e7c": "largeConstant()", "02172276": "triggerEvent(string,string)", +"021724c3": "PrintingLocked(bytes32,address,uint256)", "02175beb": "setOzr(address)", +"0217b7fe": "addrBeenSupporter(address)", +"0217f38f": "setModuleProtocolFactories(bytes32[],address[],uint8,uint8,uint8)", +"02186fa4": "myFounder_PID(address)", "0218a1c3": "setString(bytes32,bytes32,string,bool)", "02190a52": "allowRecurringBillingInternal(address,uint256,uint256,uint256,uint256)", +"02191980": "pauseDeposits()", "021979c3": "wlcontract()", "021991e7": "getBetsLocked()", "021a11d0": "setContractICO(address,address)", +"021b0699": "burnSignature(string,address,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"021b58d2": "riskAssetAddress()", "021ba8f8": "CLAWBACK_PERIOD()", "021bb947": "burnAfterIco()", "021bc974": "checkPoolBalance()", "021c309a": "solveBet(address,uint8,bool,uint8)", "021c43b4": "NBY()", +"021c56c7": "createProxyAndCDP(address,address,address,address,bytes32,uint256,address)", "021c7bd7": "setInspectorId(address)", "021da58e": "initCrowdsale(uint256,uint256,uint256,address,address)", "021dc2fc": "tokenExchangeRateInWei()", "021dd82c": "checkNotLocked(address,uint256)", +"021de13f": "expensesMultiplier()", +"021de77f": "rebateTwo_(uint256,uint256)", +"021e63c1": "YFMSToken()", +"021e6b69": "INITAL_BLOCK_PRICE()", "021e7f85": "CONTRACT_ALLOWANCE()", +"021e9ee3": "minContributionInUSDCents()", +"021ea05c": "isValuePct(uint256,uint256,uint256)", "021ea45e": "claimTilesForExistingUser(uint16[],uint256,bool)", "021efe49": "getPawnOwner(uint256)", "021f0376": "_addAssetTo(address,uint256)", "021f36a4": "changeResource(bytes32)", +"021f71cf": "pyloneth()", +"021fc748": "setSafetyBag(uint256)", "021fe51f": "VUPRefundedForWei(address,uint256)", +"0220526f": "setTeamProfitReceiver(address)", "0220611a": "timeOfLastPublish()", "022079d9": "ecmulVerify(uint256,uint256,uint256,uint256,uint256)", +"02209d96": "addList(string)", "0220a5b4": "terminate(string)", "0220f662": "addPolicyAttribute(uint8,uint256,uint8)", "0221038a": "payOut(address,uint256)", "02218ad6": "desBan(address)", +"02218bc5": "getLocality(uint256)", +"0221e716": "calcBondPremium(uint256,uint256)", "0221f2fb": "Beneficial()", +"0221fb42": "pendingTao(uint256,address)", +"02220f57": "numberBids(uint256)", +"02226815": "accessProposals(uint256)", +"0222ed78": "Trade(address,uint256,address,uint256,address,uint256)", "0222f96e": "Poppy()", +"0223024e": "setIinC(address)", "02238cbd": "_activateDevice(bytes32)", "02238e43": "launchnewround()", +"022466b5": "LAUNCH_TIME()", +"02249d9b": "finalEth()", "0224dc18": "TOKEN_SALE1_PRE()", "0224e9a7": "devFees()", +"0224f654": "depositMine(uint256)", "02258730": "nodeRegistration()", "02259b07": "setPBTTForGas(uint256)", "02262ced": "setBackendOperator(address)", +"0226393f": "depositFXB(uint256)", "0226401d": "ownerTestValue()", "02264b63": "private_withdraw(uint256,address)", +"02264cdf": "onRoundEnded1(uint256,uint256,uint256)", +"02266147": "getPriceInUSD(address)", "0226a5c9": "petOnLeaderboard(uint64)", +"0226cb84": "getPowerConsumptionBTCInWeiPerSec()", "0226ed48": "changeGlobalAdmin(address)", +"02274b4a": "newDigitalDollarRetainer(address,address,string,string,uint256,uint256,uint256)", +"0227914a": "indivCap()", +"02279438": "exchangeEtherForSNX()", +"0227efa2": "exitDsr(address,uint256)", "02285548": "FarmHopeProjectToken()", "0228e05a": "walletFromData(bytes)", +"0228e168": "transactionsExecuted(bytes32)", +"0228ec57": "robotIndexToApproved(uint256)", "022914a7": "owners(address)", "02299496": "updateICOStatus()", "0229ae31": "CosmoCoin()", @@ -1304,60 +2354,101 @@ "022b7433": "add(bytes32,uint8,uint8)", "022b8a7f": "getIdProject()", "022b9735": "GetMyBalance()", +"022ba18d": "rewardLockupEpochs()", +"022baddf": "PartnerAddressQuota(address,uint256)", "022bc71f": "getNextCallSibling(bytes32)", "022bd24c": "hypes(uint256)", +"022c0d99": "onTokenPurchase(address,uint256,uint256,address)", +"022c0d9f": "swap(uint256,uint256,address,bytes)", "022c254a": "pendingChanges(address)", "022cabac": "CoinViewToken()", +"022cbbe8": "transferAllAdjudicatorOnly(bytes32,bytes)", +"022d1fd7": "Claimed(uint256,uint256,address,uint256,uint16,uint16)", +"022d2623": "setNodeCreationWindowSeconds(uint256)", "022e1e59": "USBEEF()", +"022e3468": "claimTimestamp()", "022e9c95": "getinverstinterval()", +"022ec095": "instance()", "022ec936": "updatePeriod(uint256,uint256)", "022edd35": "getActiveContracts()", +"022f488a": "decreaseArtUpdateTickets(uint256,uint256)", +"022f710e": "createBundle(uint256[10])", "022fc88b": "approveToken(address,uint256)", "02300cbb": "DepositReleased()", "0230a07c": "releaseDeed(bytes32)", "0230d870": "tierThreeRate()", +"0231c02c": "verifyBlock(uint32,uint256[],bytes)", +"02323a73": "addTime(address,uint256)", +"023245d7": "withdrawNFT(uint256)", "02329a29": "pause(bool)", +"02329e10": "transferProxyForDeprecated()", "02337657": "documentIPFSHash()", "0233d94d": "getEscrowsByTaker(address)", +"0233fe1b": "getCastleBattleList(uint32)", "02340ad6": "deleteVisaOffering(uint256,uint256)", +"02346b05": "_getChainId()", +"0234940f": "ActivationFeeUpdated(address,uint256)", +"02355def": "getPoolETH()", "023569aa": "MoniCoin()", "02356ec0": "returnCoupon(address,bytes32)", "02358773": "XFL(uint256,string,string)", "02359fdd": "OfferingCloses(uint256,uint256)", +"0235e4e0": "investorsEarned(uint256)", "02361dbc": "totalAllStage()", +"02362a82": "setMyInt1(uint256)", +"023664a1": "__test__shake__maker__matched(uint256,uint256)", "0236bb5a": "isAdminAddress(address)", +"02370b16": "resetDailySpent(address)", +"0237907e": "updateYear(uint256,uint256,uint256,uint256)", "0237ef12": "contributionInWei()", +"0237fda2": "getMaxCollateral()", "0238777f": "preCrowdsaleContractAddress()", +"02387a7b": "withdraw(uint128)", "0238b5aa": "testToAddress()", "0238b770": "endDateICO()", "02394872": "getLastBlockHeight()", "02395e9b": "lpc()", +"02399125": "EMPTY()", "023a624a": "right11(uint256)", "023b011e": "getRateEth()", +"023b04b2": "source(uint256)", "023bb74d": "DATE_PRESALE_START()", "023c19ce": "MyWishChain()", "023c23db": "getSize(uint256)", "023c6042": "tokencap()", "023c61ca": "price_agent()", "023c8be2": "setWithdrawalAddress(address,address)", +"023caef4": "addReceipt(uint256,uint256)", +"023cd51c": "settleRecommend(uint256,uint256,uint256)", "023d44df": "RNBlock()", "023d6c03": "REPO_APP_NAME()", "023e1c34": "communityContributionPercentage()", "023e36d8": "nVotesCast()", +"023e7d90": "ProposalsById(uint256)", "023eff9f": "airdrop(uint8,bytes32,bytes32)", +"023f21de": "removeFromSupportedAssets(bytes32)", "023f4147": "totalContributed()", "023f4a66": "issueToReserve(uint256)", +"023f8fca": "estimateRewardExtra(address)", +"023f8fd1": "getWalletAt(uint256)", "023fadda": "getRedeemedList()", +"023fee2f": "getBarsMiningStrength(uint256,address)", "02400845": "publish(bytes12)", +"024025d6": "HDUD()", +"024026f4": "WPPercentage()", "02404bee": "crowdsaleCount()", "02404fcb": "buyBanana()", +"02405343": "getUserWalletBalances(address,address)", +"0240966c": "mkat()", "0240ab3f": "finishRetrieving()", +"0240c3e9": "__curve()", "0240db33": "summFounders4()", "02410cf6": "isFundReleased()", "0241747f": "ReceivedBTC(address,uint256)", "024187a5": "window0TotalSupply()", "0241fb82": "returnChildForParentNew(address)", "02421ca7": "SaddleFS(uint256)", +"0242241d": "collectRewardToken()", "0242622b": "changeMultisigAddress(address)", "0242a5fc": "testRecovery(bytes32,uint8,bytes32,bytes32)", "0242ba2a": "FOToken()", @@ -1371,35 +2462,72 @@ "02437982": "adjustRate(uint256,uint256,uint256)", "0243aa1b": "getCurrentNbVote()", "02443111": "oneTrancheAmount()", +"0244accf": "globalShutdown()", +"0244b1f5": "canBuyErc20(address)", "0244ba4a": "Hubble()", +"0244e557": "totalVariants()", "0244eb3f": "testFundsAreLockedDuringSale()", +"0244f2fd": "fund_token_wallet()", +"02458b87": "newEndDate(uint256)", +"02459966": "observations(address,uint256)", +"0245bce8": "setSafetyVars(bool,bool,uint112,address)", "0245c5c8": "importSequence()", "02460d1e": "_emitHolderRegistered(bytes32,uint256,uint256)", +"0246b721": "approve_189(address,uint256)", +"02472594": "externalTotalSupply()", "02474718": "paydayFrequencyInDays()", "02474c59": "myPledgeTo(address)", "0247e02a": "subFromAddressBalancesInfo(address,uint256)", +"0247f4a9": "debased(uint256)", "024800ff": "presaleWeiSold()", +"024801f0": "tknLocked()", +"0248184d": "ownerPermissions(address,bool)", +"0248545c": "uriAuthorityRegistry(uint16)", "024858b1": "createTrade(bytes32,uint256,uint256,address,address)", +"0248a8ad": "auctionList(uint256,address,uint256,uint256)", "02491bd5": "CryptoLottoCoin()", "0249e64a": "CodeMailStamp()", "024a56a4": "testIsData(bytes)", +"024a5e53": "subExt(uint64,uint64)", +"024ac13c": "thisBalance(address)", +"024ad024": "sayMore()", "024adb25": "LogStateSwitch(uint8)", +"024b62a9": "_setTaxReciever(address)", "024bb1fd": "changeName(uint256)", +"024c0c5d": "settesraApiaddr(address)", +"024c2ddd": "_allowances(address,address)", "024c4199": "addListener(address,address)", +"024c5597": "setOracleHeartbeatPeriod(uint256)", +"024c60ed": "getExpectedReturnCreate(address,uint256)", "024c6def": "BONUS_ICO_WEEK_TWO()", +"024c7359": "seedAndPrivateSaleFunds(uint256)", "024c764f": "setChallengeCooldownTime(uint256)", +"024c7ec7": "restrictRegistryUpdate(bool)", +"024c9e3b": "terminatedService()", +"024ca336": "onlyMultisig()", "024cc06d": "updateRecipientInfo(bytes32,string,string,address)", +"024ce2ab": "settleMarketByRoundId(uint256,uint80)", +"024dd44a": "fundingHolders(uint256)", "024ddebe": "Error(bool)", +"024e7499": "getUplines(uint256)", +"024eb2e3": "calcPoolInGivenSingleOut(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "024edd75": "buyHero(uint256)", +"024f023b": "toUnderlyingForIssue(uint256)", +"024fbbcb": "_capSupply()", "024fcc6c": "enableService()", "024fd650": "tokenData()", "024fd912": "GoToken()", "02500824": "buyDentacoinsAgainstEther()", "025026d5": "updateEmployee(uint256,uint256)", "02502787": "FDT(uint256,string,uint8,string)", +"02506804": "parameters(bytes32)", +"0250ad84": "sChicCap()", "0250bd2d": "unregisterName(string)", +"0250e3d2": "_rateSupply()", +"0251e03e": "Bids(address)", "02521b16": "saveTxt(string)", "0252607e": "bitcoinPublicKey(uint256)", +"02527753": "lastDepositTime(address)", "0252b995": "gameStartTime()", "025313a2": "proxyOwner()", "0253a95a": "getMaxMerge()", @@ -1407,19 +2535,34 @@ "0253fbd1": "momFab()", "025404d4": "amountRaisedUSD()", "02543238": "setDiscountValueOff()", +"02545842": "returnSpecifiedAddressTokens(address)", +"025468f2": "_setBuyFee(uint256)", +"02546ffc": "basetoken()", +"025485b3": "changeRootnodeTTL(uint64)", "02548866": "TOTAL_CAP()", +"0254a513": "setMinPlanPrice(uint256)", "0254aa41": "CommonEth()", +"0254d355": "compoundToMcdMigrate(uint256,uint256,uint256,bool)", "0254e687": "GodlyCoin()", "0254ef0f": "enterMedium()", "02550e4d": "profit(address)", +"025527c7": "main2V2(uint256,uint256,uint256,uint256)", "02556de3": "updateMajorTree(bytes32)", +"02556fff": "removeSuperUser(address)", +"02557b33": "auto_send_amount()", +"0255a03b": "setPlatformToken(address)", "02565633": "buriedSupply()", +"02567b25": "Stake(uint256,address,uint256)", "0256c7f5": "Afin()", +"0256d5f8": "getTotalStat()", "0256e827": "enablePurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"02571792": "ERC721Token(address,uint256)", "02571be3": "owner(bytes32)", "0257210f": "ForgeCDN()", "02573fc2": "resetStellarInvestor()", +"02575069": "triggerContract2(address)", "0257a0c0": "onLotteryCompleted(uint32)", +"0257ad1f": "resetJackpot()", "0257c48c": "meta(bytes32,bytes32)", "02581ab3": "offerIndexedPieceForSaleByAddress(address,uint256,uint256)", "02581cde": "refundExpiredBet(bytes32)", @@ -1429,67 +2572,131 @@ "025932fd": "bitikzikToken()", "0259371c": "TTTTokenSell()", "02593c2b": "_Split()", +"025a3881": "usd_to_alicoins()", +"025a4046": "unlockCapacity()", +"025a6edb": "LogResponseReceived(bytes32,string)", "025a6f02": "OsmiumCrowdsale()", "025abd58": "getTokenBalance(string)", +"025ad7f8": "addAMM(address,address,uint256)", "025b22bc": "updateImplementation(address)", "025b97bd": "getProviderAdmin(uint256)", +"025bac43": "guardCounter()", "025bbbe5": "newSale(bytes16,uint256,uint256)", +"025c126e": "setAuthorization(address)", +"025c2b91": "approve_307(address,uint256)", +"025cb46b": "checkContractAdmin(address)", "025cce45": "AMULETS()", +"025cd387": "getPurchaseorder(string)", "025cf89f": "setMigrationManager(address)", "025dd017": "OnReceive(uint64)", "025e029b": "buyStar(uint256,uint8,uint256)", "025e56d3": "NeuroDAO()", "025e7c27": "owners(uint256)", "025e8095": "transferCell(address,uint256)", +"025e8880": "getUserWithdrawLength()", "025ec81a": "getBytes32Value(bytes32)", +"025f3bf0": "mintAnimal(uint256,address)", "025f9bc1": "updateTokenInformation(string,string)", "025ff12f": "airdrop(address,address[],uint256[])", +"02605ea8": "raisedICO()", +"02610c50": "numActiveMarkets()", "026164ad": "sunset()", "026189ec": "BitRecord()", "02618eb2": "AltCurrency(uint256,string,string)", "0261a403": "issueDID(address,uint256)", +"0261bf8b": "getLendingPool()", "0261edec": "getContractByID(string)", +"02620ed6": "extendFarmingPeriod()", +"02622c60": "twerk()", "0262dc13": "claimOne(address)", "0263379b": "bringBackTokens()", "026345b6": "ledgerContract()", +"0263b858": "addToWhitelist(address,uint8)", +"02643f07": "Depositors(address)", +"026492e8": "depositAllWithDetail(string,string,string,uint8)", "0264ba24": "sendValueToJackpot()", "0265190c": "b66ReserveTokens()", "026654bf": "PoolManager(address)", "02667e9b": "killPay()", "0266ba02": "list(address[])", "0266f044": "reservePool()", +"02673ca9": "getNoOfWithdrawals(uint256)", +"02677e7c": "swaped(address)", +"02682217": "getNClaimRecords(bytes32)", "02682ab3": "setNewWallets(address,address,address)", +"02683fa9": "claimTreasuryFeePercent()", "026858ea": "getRateModifierInPermilles()", +"02689663": "checkPresale()", "0268ec43": "MyEtherTeller()", +"0268ff0b": "netBalanceLent()", "02690ef0": "setICOElePrice(uint256)", +"0269247d": "__Offering_init(address,address,address,uint256,address,uint256,uint256)", +"02693ef8": "privateSaleSupply()", "026993e0": "Midas(address,address)", +"02699df8": "calcAirdrop()", +"0269d190": "gotKNIFEUniswapPair()", +"026a0dd0": "profitSharingDenominator()", "026a308a": "_checkWhitelistContract(address)", "026a9cdd": "getPotato(uint256)", +"026a9f93": "squanderMyEthForWorthlessBeans(address)", +"026ad492": "mintTo(address,bytes32,bytes32,bytes32)", +"026b0539": "assetChain()", "026b1d5f": "getPool()", +"026b5ae5": "_staking()", "026bb254": "upVoteHouse(address)", "026c0d8f": "RHP()", +"026c4207": "totalShare()", +"026ccfba": "upgradeHopeNonTradable(uint256)", "026d0e1c": "grantUserLicense(address,string)", "026d19d5": "WeTestToken(address,string,string,uint256,uint256)", "026d6a67": "setStartStopBlocks(uint256,uint256)", +"026db21d": "minorPot()", +"026dd90d": "ico1StartTime()", +"026e3eb1": "numRecruited(address)", "026e402b": "delegate(address,uint256)", +"026e5bc5": "mintNonFungible(string,address[])", +"026ea779": "reflist(address,uint256,address)", +"026ebe2d": "convertETHtoDAI(uint256,uint256)", "026eca12": "createTapPoll(uint8)", +"026f197a": "withdrawTaxRate()", "026f9d56": "SOT()", "026fcf83": "setSaleFinish()", "026ff05e": "deleteUser()", +"027031e4": "SELL_MINIMUM_TOKEN_REQUIREMENT()", +"02704256": "lastPayoff()", +"0270429f": "c_priceChangeDates(uint256)", "02704a4d": "COIN_SUPPLY_ICO_PHASE_3()", "027116f7": "approveNewOwnersCount()", +"027145db": "_internalBurn(address,uint256)", +"0271c3c8": "intakeNumeraire(int128)", +"0271cd80": "NOIA_VAULT_ADDRESS()", +"0271fa68": "getLiveRate(address,address)", +"02720bb7": "setMaggotAddress(address)", +"0272a9b7": "scheduleReleaseStart()", "027391bf": "sendMoneyBeforeEnd(uint256)", +"0273d5e3": "configDays(uint256)", +"02741ccc": "ownerPMPReward()", "02742425": "preFundingtokens()", "027471b0": "roundActive()", "0274d5ff": "soulIsOwnedBy(address)", "0274ea81": "jadd(uint256,uint256,uint256,uint256,uint256,uint256)", +"02751cec": "removeLiquidityETH(address,uint256,uint256,uint256,address,uint256)", +"027521ce": "getCancel(uint256)", +"02756ddc": "marketplacePercentage()", +"02759c37": "controlledTransferFrom(address,address,uint256)", +"0275dd82": "setEtherReward(uint256)", +"027618b9": "KeyValueArrayOptionIDOnCreation(uint256,uint256)", +"027652db": "decisionsCount()", "0276650b": "individualCap()", "027681ab": "setJackPotInfo(uint256,uint256)", +"027748f3": "withdrawSysProfitCb(address,uint256)", +"02775240": "MINT_LIMIT()", "02780677": "LN2()", "0278199e": "StandardToken(uint256)", "0278bde1": "ask(address,uint256,uint256,uint256)", "0278fa20": "TeambrellaWallet()", "027903ef": "setReservedTokens(uint256)", +"02792b2d": "salesDonePerUser(address)", "02795b3a": "tokenMarket(address)", "027a4425": "EthereumDiamond()", "027a5e3f": "getLastVersion(bytes)", @@ -1503,72 +2710,136 @@ "027cb7c6": "clearing()", "027e7a0f": "getTotalGamePot()", "027ec848": "setDurationOfLock(uint256)", +"027ee858": "_mint(uint256,address,uint256,string,string[],uint256,uint256,uint256,string)", +"027ef3eb": "spendLimitPending()", "027efe2b": "makeOperation(uint32,string)", +"027f37db": "setSessionDurationMinutes(uint256)", "0280052d": "setKing()", +"028089e5": "pendingWithdrawalEvent(address,uint256)", +"0280b6b1": "transferToken2(address,address[],uint256)", +"0280efa6": "land2IsPrivate(uint256)", "028118a1": "PREBUY_PORTION_MAX()", "02814b86": "maxETH()", +"0281939d": "privateSaleMinimumTokens()", "0281b752": "admin_set_ExchangeRateInWei(uint256)", +"02820eb1": "get_top_shareholder(uint256)", +"0282563b": "ThingSold(uint256,uint256,uint256,address,address)", "02825adc": "gvOptionToken30()", +"02825d11": "burnFXS(uint256)", +"02831651": "tokenPointer()", "02836f24": "upgrading()", +"02838079": "Inflat(address,uint256)", +"0283e758": "addAuthorizedProxy(address)", "0283f4b4": "addPropertyForUser(bytes32,address)", "02846858": "removeBurner(address)", +"0284a8d0": "addTeam()", +"0284c3f5": "deposit(address,address,address,uint256)", +"028534ad": "uniswapTokenExchange()", +"0285cc65": "priceToOpen(address,uint256,uint256,uint256,uint256)", "0285d554": "transferWithEvent(address,address,uint256)", +"0285eb3c": "TransferLottery(address,address,uint256,bytes)", +"02865629": "renounceModerator()", +"028667d3": "UpdateDebt(address,uint256,uint256)", +"0286d274": "setCrossDomainMessageGasLimit(uint256)", +"02874300": "withdrawOrders(uint256)", +"02874a38": "multiSendLimit()", "028780e4": "ownerWithdrawZth(address)", "02879f9c": "addProduct(string,uint256,string,string,string)", +"0287e6e1": "setPaddress(address)", "02884909": "authorizedLogicContractAddress()", +"02885097": "minterAddresses(uint256)", "02889f26": "getCustodianChangeReq(bytes32)", "0288a39c": "withdrawDelay()", "0288ab5d": "TCC()", "0288c0a0": "TransferDomain(string,address)", "0289e966": "newVersionReleased()", +"028a08da": "unlockAngelAccounts(address[])", "028a582e": "findEndpointByAddress(address)", +"028a91a9": "checkAdvanceIncentive()", "028a95a0": "lockRemainingTokens()", +"028aa396": "tokenUniswapPairForFORK()", "028ab3b1": "__get(address,uint256)", "028ae3b7": "setAffiliateList(address)", "028af743": "getServerCurrentMatch(uint256)", "028b7854": "throwsSaleWalletIncorrectBlock()", +"028bbf53": "DecreasePreSaleSupply(uint256)", +"028c4ce9": "getDataStaking()", +"028d45d9": "Uniswap_Router_Address()", +"028d5d81": "setETHFeeAddress(address)", "028e10ac": "BidaCoin(uint256)", "028e3731": "getUsersByDocHash(bytes)", +"028e55a4": "streamBoosted(address)", "028e6c67": "intOrRevert(uint256,uint256)", "028ebc44": "setRegistryContract(address)", +"028f7d55": "orchestrate(address,bytes4)", "028fb6b8": "deleteRef(bytes32)", "029043a4": "removeBlacklistSpender(address)", +"0290cbc8": "redeemAndTransferAll(address)", "02911cfe": "distribute(address,uint256,uint8,uint256)", +"02912524": "getRefundable()", +"029148f3": "balanceOfYYCRVinWant()", "02917f4a": "issuePatrons(address,uint256)", "0291b9b1": "judgeIsReachDailyLimit(uint256,int256,uint256)", +"0291dbbc": "do_direct_call(uint256,address,bytes)", +"029206c3": "burnaddr()", +"029275c4": "calcRedeemAmountAndFee(bool,uint256)", "02927d20": "setupEventsHistory(address)", +"0292f434": "getActiveTillByNick(string)", "0292f88a": "setBaseDenominationAddress(address)", "02931e59": "getUserPower(address)", "02932f56": "totalCampaigns()", +"02939dfe": "cancellationAnnouncements(bytes32)", "0293a772": "get_sale_owner(address,address)", "0293fafc": "ADBToken()", "02940dbb": "Decenturuon()", "02942724": "preservedTokens()", +"029489a9": "getRepRewardPerBatch(uint256)", +"029496b5": "setwUNIv2(address)", "02949bff": "CampaignToken()", +"0294cf15": "HasTicket(address)", +"0294eea3": "clickTracked(address,address)", +"02957d53": "getWorkingGroupById(uint256)", "0295d71b": "currentDepositLimit()", "02965297": "update_height(uint256)", +"0296ab50": "POOL_PRECISION_DECIMALS()", "0296b3a8": "STARLIGHT()", "02978be8": "gameHostAddress()", "0297abe5": "getLimitMaxGame()", "02981cfe": "transferedToPool()", "02987db8": "priceInWeiPerSatoshi()", "02989d9f": "SellOrder(uint256,uint256,address)", +"0298ad47": "withdrawOverBalanceWEI(address)", +"0298b26b": "setPutPrice(uint256,uint256)", "0298d557": "isValidSignatureAndData(address,address,bytes)", +"0299c694": "doRateValidation()", +"0299d7d3": "setTokenRateForETHMachine(uint256,uint256,uint256)", "029a258a": "claimDonations(address[2],uint256[8],uint8,bytes32[2])", "029a8bf7": "multiAsset()", "029ad03e": "get_nb(address)", +"029b2f34": "add_liquidity(uint256[4],uint256)", "029bca78": "isPremium(uint256)", "029c19aa": "getCreditBondAddress()", +"029c25ca": "swap(address,address,uint256,bytes,uint256)", +"029c3d4b": "setCompoundYield(uint256,uint256,uint256)", +"029c954d": "SetUniAddr(address)", +"029d06ff": "Freeze(address,uint256,uint256)", "029d1ecd": "ownerApprove(address,uint256)", +"029d3040": "sellVoucher(uint256,uint256)", "029d4b2d": "isTimestampInsideRange(uint256,uint256,uint256)", +"029d5607": "katMan()", "029da1c4": "walletFounder2()", "029dc6d2": "piggyToWallet()", "029deeb0": "updateUportInfoFromOracle(string,address,address)", +"029e8cd4": "Trump_Index()", "029eabcb": "contributions()", +"029f1841": "withdrawById(uint32)", "029f1d0e": "userName(uint256)", +"02a01dc2": "setPoolDuration(uint256)", "02a10d87": "getPreSaleEndDate()", "02a182d1": "setInvestmentCapIcoPhaseTwoPounds(uint32)", "02a1a7a8": "isReachCapped()", +"02a1cdaf": "getParametersHash(address,uint256,bool)", +"02a22337": "states(address)", "02a251a3": "votingPeriod()", "02a2680c": "getUserWalletByID(uint256)", "02a2c88f": "kycLevelOf(address)", @@ -1576,84 +2847,176 @@ "02a2e105": "RYANTOKEN()", "02a2f06e": "GetMyBet()", "02a3036d": "init1_block_height()", +"02a3bfe0": "getETHaddress()", +"02a4db1f": "debug_pending_length()", "02a4e488": "decreaseAllowanceProxy(address,address,uint256)", "02a4e849": "getMiniPoolEdit_9()", "02a566bd": "Woyager()", "02a59ea3": "isEntitledForCluster(address)", "02a5c0be": "CryptoSagaArenaRecord(address,address,uint8,uint8)", "02a63c28": "consumeMarketOrderAsk(uint256,address,address)", +"02a6a2be": "Reward(address,uint256,uint256)", +"02a6e8d1": "setEthItem(address)", "02a6f266": "Presale(address,address,address,address)", +"02a71bde": "totalEthDistributed()", "02a72a4c": "tokenGrantsCount(address)", +"02a76135": "createNewUser(string,bool)", +"02a764e8": "MyContract(address)", +"02a79454": "burnReward()", "02a86781": "authorAddress()", "02a8a406": "setBurnPolicy(bool,bool)", +"02a936fb": "A8(bytes)", +"02a992b0": "getEnabled(address,uint256)", +"02a9c43f": "setDydxOperator(bool)", "02aa26f6": "buySeatForEvent(uint256)", "02aa274b": "setForward(bytes4,address)", "02aa6318": "getDistributions()", "02aa9be2": "unvote(address,uint256)", +"02aa9cf6": "updateAccountLockType2(address,bytes1)", +"02aaaa58": "courtJester()", "02ab4781": "reservedCoins(address)", +"02ab5675": "_convertChaiToDaiAmount(uint256)", "02abb4c5": "Miner()", +"02abca75": "_getSetting(uint256)", +"02abf9d5": "addExt(uint8,uint8)", +"02ac7d3c": "jgdengjibdceth()", "02ac8168": "Launch()", "02acbaa3": "CrowdsaleMinter()", "02acc6b6": "GNTTokenERC20(uint256,string,string)", +"02acc94b": "mint(uint256,uint256,uint256)", "02acdb44": "setAnyoneCanCall(address,bytes4,bool)", +"02aceecf": "_txExist(bytes32)", +"02ad4d2a": "isCollateralized(address)", "02ae832f": "trashTokens(address,uint256)", "02ae8cdc": "tokenProduct(uint256)", "02aec20d": "PrintableToken(string,uint256,string,uint256,int256)", +"02aedefe": "_setProtocolFeeCollectorAddress(address)", +"02af0899": "setInToken(address)", "02af2095": "massTransfer(address[],uint256[])", +"02af55da": "userRewardsPaid(address,uint256)", +"02aff14f": "bfmPerProfitBNB()", +"02b0038b": "OFFER_TYPEHASH()", "02b04384": "AIRDROP_ADDRESS()", +"02b06930": "numApplication()", +"02b06ec6": "approve_671(address,uint256)", +"02b08d6a": "LockerStatus()", "02b09ac5": "charityVault()", +"02b15803": "multiSignForMapping(uint256)", +"02b1720c": "setAllocPoint(address,uint256)", +"02b2464d": "GodPaused()", "02b32af5": "greenToken()", "02b33929": "SMTToken(uint256,uint256)", "02b3b3da": "Divium()", +"02b40186": "waffleTicketHolder(uint256,uint256)", "02b40d11": "tokenSetMarketMaker(address,address,address,address)", +"02b421ed": "_RGPTokenReceiver()", +"02b42f46": "airDropMultiple(address[],uint256[])", +"02b43e8f": "nftArtistSignature(uint256)", "02b4b52c": "isLogoInitied()", "02b518fd": "callback(address,address,uint256,uint256,uint256)", +"02b543b4": "transferTokens(address[],uint256[],address[],address[],bytes[],uint256[])", "02b5ecc8": "rateAngelsDayEnd()", +"02b62159": "set_best_adapter(address)", +"02b6780c": "viewSalex()", "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[])", +"02b7f451": "_setRule(address,address,uint256,uint256,uint256)", +"02b8230c": "hasClaimedFree(address)", +"02b82b85": "computeMerkle()", "02b857f3": "unlockMintDate1()", +"02b8b587": "defaultTokenAddr()", +"02b9446c": "deposit(address,address,address,uint256,uint256)", "02b985d3": "arr(uint256,uint256,uint256,uint256)", +"02b9e978": "transferTokenForced(address,address,uint256)", "02ba302b": "nextPrice1Of(uint256)", +"02ba3a47": "setIUniswapV2Router01(address)", "02ba6f8d": "getHistoryEntry(uint256,uint256)", "02ba742b": "extendMembership(address,uint256)", "02ba8742": "sendCoins(address,uint256)", "02baaf40": "lastInitTimestamp()", +"02baf1b0": "totalSupplyByAsset(address)", "02bb2929": "etherToDustPrice()", "02bb5d6e": "setEOMarketToken(address)", "02bb8465": "setContent(uint8,string,string)", +"02bbce46": "getPriceInToken()", +"02bbcfae": "checkInspecial()", +"02bc2cdb": "takeOutLoan(uint256,uint256)", "02bc54bf": "companySite()", +"02bcb2d8": "testGetMinFunction()", +"02bcdd7b": "rugPull(uint256[])", +"02bcee7a": "setChainLinkAggregators(address[],address[])", +"02bdd9cd": "updateFarmYeidRate(uint256)", +"02bde2fb": "admin_remove_employee(address)", +"02be07de": "tradeTokenForEtherWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256)", +"02be5421": "players_(address)", "02be8e4e": "changeOwnerShip(address)", +"02bea7ca": "attack(address,bytes8)", "02beee07": "_getElement(uint8[],uint8)", +"02befd24": "depositPaused()", +"02bf007d": "PaymentedInOtherCurrency(uint256,uint256)", "02bf3165": "auctionUnpause()", "02bf7fe7": "JumpCoin()", "02bf9e7f": "verifySignature(address,bytes32,uint8,bytes32,bytes32)", +"02bfbb20": "_tcoreToken()", "02bfeeb8": "totalPicoUSD()", "02c06bcd": "prevTokenAddress()", +"02c0a78f": "set_Invest2FulcrumContract(address)", +"02c0fba4": "deployBytecode(bytes)", +"02c151e7": "DestructToken()", +"02c1927c": "withdrawToken(address,address,uint256,string,bytes32)", "02c1d7cf": "iSportNews()", "02c1ecbf": "returnStateChange()", +"02c256eb": "updateRewardParams(address,bool)", +"02c25b54": "flashLoan(address,uint256,address)", "02c28410": "getPublicAllocation()", "02c29349": "fixWithdrawalAddress(address)", "02c2a74d": "episodeManager()", +"02c37ddc": "renounceEventMinter(uint256)", +"02c3bcbb": "supplyCaps(address)", "02c3d7f6": "end_ICO()", +"02c4678b": "wpcSupplierIndex(address,address)", "02c4897b": "getAutorPicture(bytes32)", +"02c48c3b": "set_serviceChargeRate(uint256)", "02c4960e": "InsufficientFee(address,uint256)", "02c4980c": "BOC()", +"02c49961": "mintAUTH5()", +"02c4eea4": "UNICORE_Migrated()", +"02c4feba": "availableSLTD()", +"02c5115b": "tradeId()", +"02c5b75f": "fromUint256Hex(uint256)", +"02c5c2d4": "availableNominCount()", +"02c5e92a": "deputeAdmin(address)", +"02c602da": "getNonUpgradableContractAddressFromTwoKeySingletonRegistry(string)", "02c63852": "TokenVesting(address,address,uint256,uint256,uint256)", +"02c6883d": "ethtoddt(uint256,address)", "02c6d827": "getgamecardpos2(address,address)", "02c6f427": "PRESALE_LEVEL_4()", "02c71d92": "newClonedRepo()", +"02c72dcc": "PaymentMade(uint128[2])", "02c76d45": "mintCoolDown()", "02c7e7af": "sold()", "02c85991": "distributeMinting(address[],uint256[])", +"02c87ea1": "totalCardInsurance()", +"02c891c5": "setMetaEvidence(string)", "02c90584": "userAddressExists(address)", "02c95d2d": "setHaltIco(bool)", +"02c96748": "exitswapExternAmountOut(address,uint256,uint256)", "02c9972c": "TICK_TIME()", "02c9e537": "cresusAddress()", "02ca5994": "registerToken(address,uint256)", +"02cac05c": "getCurrentPlayers()", +"02cb3a88": "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)", +"02cba741": "transferErc20(address,address,uint256)", +"02cbcb58": "getMaxGasLeft(uint8)", +"02cc250d": "isSolver(address)", +"02cc6b15": "setMaxOldBetsAmountToClear(uint256)", +"02ccb6d4": "getSorts(uint256)", +"02ccecb8": "forecastStakeHolderRewards(address,uint256)", +"02cced4e": "buyPixel(uint16,uint16,uint8,uint8,uint8)", "02ccee02": "getNoteLine(uint256)", "02cd0f96": "Deadline(uint256)", "02cdc1ee": "setSendGodz(uint256)", @@ -1661,54 +3024,90 @@ "02ce5fc4": "generateMintEvents(address,uint256)", "02ce728f": "updateExchangeRate()", "02ce8ac9": "withdrawSale(uint256)", +"02ce8c4d": "futuresContracts(address)", +"02cea278": "ERC20_INITIAL_SUPPLY()", +"02cf0881": "incentivizedTwapCooldownPeriod()", +"02cfd56f": "WordValue()", +"02cff44f": "accountLastClearTime(address)", +"02cffad3": "invCurId()", "02d0181c": "HamidToken()", "02d05531": "getUriCount()", "02d05d3f": "creator()", "02d06d05": "bytesToUint(bytes)", +"02d08db2": "Received(address,uint256,uint256,uint256)", +"02d0aec3": "decodeOrderStatusError(bytes)", +"02d1003b": "getSellPriceById(uint32)", "02d19fe5": "testApproveWillNotModifyAllowance()", "02d1c1e6": "sendOwnerBalance(address,address,uint256)", "02d1d5fe": "getDesign()", +"02d2003e": "donator()", +"02d21410": "init(address,address,address,address,uint256,string)", "02d23cef": "sendWithFreeze(address,uint256,uint256)", +"02d24d94": "getNFTBalance(uint256)", +"02d2838b": "executeTrade(uint256)", "02d2f349": "lastPeriodChange()", +"02d35a59": "deposit(address,address,uint256,address,address,uint256)", "02d3b339": "drawColors(uint256[],uint256[],address)", "02d3bd16": "circulatingSupply_()", "02d3fdc9": "burnMin()", "02d44e57": "_getBetTimestamp(bytes32)", +"02d45457": "usdcAddress()", "02d49d0b": "_createHiveInternal(address)", +"02d4c7a3": "PAYOUT_INTERVAL()", +"02d4ebb2": "getPeriodNumber(uint256)", +"02d50b6d": "withdrawLAYERx(uint256)", "02d52fa4": "createProposal(uint256,string)", "02d596d8": "getUserFromAddr(address)", "02d66fc2": "hasSchema(bytes32)", "02d6e7f4": "tokenXchangeRate()", "02d6f730": "getFreezing(address,uint256)", "02d77954": "getVoteOf(uint256)", +"02d7a3fc": "immediateReleaseRatio()", "02d7ccef": "UP_winRate()", "02d800ec": "deactivateKey(string)", "02d8146e": "tokensWallet()", +"02d87450": "callG11(address)", "02d947ef": "vote(uint256,address)", "02d99637": "BlockClaimedEvent(address,address,uint256,uint256)", +"02d9cb3c": "cumulativeYes()", "02da667b": "createProject(uint256,uint256)", "02da6d06": "lastDao()", +"02da8989": "AddBNBLiquidity()", "02dadf8e": "registerCitizen(bytes32,address)", +"02daf12f": "venues(uint256)", "02db2d8a": "myRefund(address)", "02dbf3c8": "CGE()", "02dc2e1d": "queuePayment(bytes)", +"02dc2f59": "revealClose()", +"02dcdef2": "calcLiquidityDesiredByAdd(uint256)", "02dcfc8e": "setAssetFees(address,uint256,uint256)", +"02dd19d9": "callerRewardDivisor()", "02dd6731": "disableApiAccess(bool)", "02dd92c4": "crowdsaleOn()", +"02dda028": "executeLimitOrder(address,uint256)", "02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", "02df0b61": "deprecateById(bytes32)", "02df45a8": "closeActive(uint256)", +"02dfec13": "cancelSwap(address[4],uint256[4],bytes32,uint256)", +"02e028f3": "priceAtLastSlippageBlocks()", +"02e05efd": "closeTier1()", "02e0a2ff": "getAvailableBlance()", "02e0b293": "LogVote(address,uint256,uint256,uint256,uint256)", "02e0c14a": "get(bytes12)", "02e0d5a5": "AquaToken()", "02e1033a": "monsterFleeTime()", "02e132f6": "recalcInvestorsFee(address,uint256)", +"02e1c990": "getStopSell()", +"02e1e140": "depositedTime(address)", +"02e1e1c3": "StartPublicSale(uint256)", +"02e23884": "setIcoStatus(bool)", "02e26c38": "richest()", "02e2c3b7": "setRefererPercent(uint256)", "02e2f0b6": "Erc20TokenMarket()", "02e32144": "precentDecimal()", "02e33d25": "HydroToken()", +"02e3588f": "setResource(bytes32,address,uint256,uint256)", +"02e3cb0b": "totalProvided()", "02e4879d": "setProposalDuration(uint64)", "02e49bd9": "publicityAddress()", "02e4af01": "generateRandom()", @@ -1716,75 +3115,119 @@ "02e4f63b": "doExchange(address,address,address,uint256)", "02e635e6": "AID()", "02e650b6": "DigitalMoney(uint256,string,string)", +"02e65b8a": "updateContractAdmin(address)", "02e6a5dc": "LIC(uint256,string,string,uint8)", "02e6a951": "PayableContract()", "02e7491e": "ERC165ID()", "02e8243e": "WeiCoin(address,uint256,uint256,uint256)", "02e8d8c0": "scheduleTransaction(address,uint256,uint256)", +"02e8fe13": "isValidBid(uint256,uint256)", +"02e93ee3": "ownerbyvotetoreplace(address)", "02e97770": "InfinitiEstate()", "02e98e0d": "diffMinutes(uint256,uint256)", "02e99e16": "SplitAmount(address,address,uint256)", "02e9ad65": "dispatchTo(address,uint256)", +"02e9d43b": "requestList(uint256)", "02e9d5e4": "acceptBid(uint256,uint256)", +"02ea3a8c": "sso()", +"02eb19fe": "NUM_PAYOUT_DAYS()", "02eb4759": "RightAndRoles(address[])", +"02eb4b88": "saleInfo(uint256)", "02eba8a7": "auditContract(bytes32,bool)", +"02ec2e73": "setWithdrawMinTrc20(uint256)", "02ec77d2": "joinPot(string)", +"02ec8f9e": "setQuorumVotes(uint256)", +"02ed0217": "totalPerResponse(uint256)", "02ed26d1": "startTokensSale(uint256,uint256,uint256)", "02ed292b": "receiverSpend(bytes32,uint256,bytes32,address,address)", "02ed4d2d": "Purox(uint256,string,uint8,string)", +"02ed9513": "getAdditionByTokenId(uint256)", "02edcbfb": "proposeAmendment(uint256[],uint256[],bytes32)", "02ee3275": "setSatoShi()", "02ee3a52": "getAllProducts()", "02ee50e0": "EliteToken()", "02ee6a6b": "RegisterEvent(address,address)", +"02eec568": "farmingContract()", "02eef456": "UK()", "02eef7c3": "MassivelyMultiplayerOnlineGame()", +"02ef0fb9": "burnToCollateral(address,uint256)", "02ef3844": "getBountiesByCreator(address)", "02ef43c3": "recordPurchase(address,uint256,uint256,string,uint256)", "02ef521e": "registerEtherToken(address,bool)", "02ef6c86": "calculateWithdraw(address)", +"02efba76": "checkClaimParams(uint256,address,uint256,uint256,address,bytes,address,bytes,uint256)", "02efbde5": "batchApproveWhitelist(address[])", +"02efda2f": "getminerInfo(address,address)", "02f050e4": "getWinningDetails(uint256)", "02f08568": "lockController()", +"02f09ed6": "updateCryptoGamerPrice(uint256,uint256)", "02f0c937": "buyItem(uint256,address,string,string)", "02f1bfad": "setupTimeWindow(uint256)", "02f1ed99": "putOnInitialSale(uint256)", "02f2008d": "hintURL(bytes32,string)", "02f20b9c": "getReport(string,uint256)", +"02f25270": "Withdraw(address,uint256,uint256,uint256)", +"02f2d2fd": "bonuses_(uint256)", +"02f32770": "addTokenURI(string)", "02f41314": "continueDistribution(uint256)", +"02f45f91": "LogMining(address,uint256)", "02f48c8b": "transferAvailableBalances(address,address,uint256)", "02f58015": "claim_bounty()", "02f65096": "executeBid(uint256,uint256,uint256)", "02f652a3": "setTransferAgent(address,bool)", +"02f6fd09": "batchPairTokens(bytes32[],address[],address[])", +"02f76f5b": "growthRemaining(address,string,uint8)", +"02f813fe": "liqBugFixed()", "02f83a56": "withdrawBonusToken()", +"02f950df": "available_token_count()", +"02f994b3": "transferToOffical(address)", "02f9fd84": "HHGTTG()", "02faabb3": "fetchOrderByIdWithMerchant(string,address)", +"02fab424": "usedNonce(uint256,uint256)", "02fac967": "ownerHasCard(address,address)", "02faf1e2": "revokeAccessFromAddress(address,address)", "02fb0c5e": "active()", "02fb4d85": "slash(address,uint256)", "02fbe0d5": "getKittyGetOrNot(address)", +"02fbfc93": "proportion(uint256,address,address)", +"02fc0139": "DAI_JOIN()", "02fc1f85": "ownedNumbers(address)", "02fc28c4": "TAP_POLL_DURATION()", "02fc2a8a": "_buy(address,uint256)", "02fc3127": "tokenSaleBalanceOf(address)", +"02fc44be": "transferToken(address,address,uint256,uint256,address,bytes4)", "02fd9dd8": "market_DeclareForSaleToAddress(uint256,uint256,address)", +"02fe5305": "setURI(string)", +"02febc89": "setBscsInfo(address,uint256,uint256,uint256,uint256,address)", "02ff1fac": "changeDevevoperAccont(address)", "02ffc0b0": "getApprovedAddressesOfList(address[])", +"0300b59d": "leisureManualBuy(uint8)", +"0300e128": "transformActivate(bool)", +"03013b43": "updatePoolAmount(uint256)", "03015ea3": "registerArbiter(uint256,uint256)", +"03020e33": "checkPaymentAvailable()", "03021c87": "setMaxInterval(uint256)", +"03021d11": "participatePool5()", "0302263a": "getPendingManager()", "0302c688": "prod()", "03031960": "VestingVault(address,address,uint256)", +"03031f1f": "eNonIssueDeposits(address,uint256)", "030326ad": "pushAddr(address)", +"0303583c": "CHI_TOKEN()", "0303f694": "_getBonusPercent()", "0304363a": "fetchAllVoteResult()", "030481d5": "changePreseller(address)", "03048590": "ratePresale()", "03048a42": "createRequest(address,uint256,string,bytes,bytes)", +"0304b213": "setUpdateAssetFee(uint256)", "0304de3b": "setFeeRecieverValue(uint256,address)", +"0305001b": "swapTokensForERC1155Art(address,uint256)", +"03052cc7": "_swapRewardFee()", +"030581a7": "aEth()", "03058aad": "getLatestManifest(address)", +"0305b996": "getMissingArbitratorFees(uint256)", "0305bdfe": "Trongold()", +"03060818": "getFund(uint256,uint256)", "03060b68": "getCoreSupply()", "03062183": "getVisaLeft(address,uint256,uint256)", "03068d57": "setMinimumTextDonation(uint256)", @@ -1798,30 +3241,52 @@ "0307acae": "copy(uint256[],uint256)", "0307f82a": "SoldToken(address,uint256,string)", "03083883": "compose(uint256[],uint256)", +"0308afdf": "getSuppyBalance(address,address)", +"0308cd3c": "getSenderInfo()", +"0308f379": "Suggestions(address)", "03090958": "_transferAct(address,address,uint256)", "03096e92": "proposedMilestones()", "0309922f": "icoMaxAmount()", "0309c7f8": "payLastSixteenWinner(uint256)", "030a78aa": "MAX_SITE_TOKEN_ID()", +"030afb31": "stakeT()", +"030b0f8d": "Voted(uint256,address)", "030b1776": "ROPE()", +"030b237f": "approve_68(address,uint256)", "030ba25d": "withdraw(uint256,bytes)", +"030ba6bf": "listToken()", +"030bc7c3": "setBasAddress(address)", "030bccb0": "QLANCE2()", +"030c2bbf": "sysAddr()", "030c3631": "dungeonPlayerCount(uint256)", "030cc118": "depositSuccessful_()", "030cecc7": "decode(string,bytes32)", "030d406b": "entryPayout(uint256)", "030d945c": "PMHToken(uint256,string,uint8,string)", "030e30df": "super_transferFrom(address,address,uint256)", +"030e3422": "period2()", "030e6b98": "testFinalizingBeforeCapChangesHardCap()", +"030e8fd2": "getSgaTotal()", "030e9080": "returnAllCoke()", +"030e9a3c": "contributeStartTime()", +"030ea074": "marketingFundSharedPercent()", "030eafa0": "endThisContact()", +"030eb719": "possibleToCharge(uint256)", +"030efcfc": "startSaleAPE(uint256,uint256,uint256,uint256,uint256)", "030f5702": "returnAmount(uint256)", "03101f46": "setDistributionMinimum(address,uint256)", +"03105b04": "approveToken(address,address)", +"03108b04": "getAmountOutForUniswapValue(address,uint256,bool)", "03110f23": "returnKitty(uint256)", +"03111a42": "setMaxAmountToTrade(uint256,uint256,uint256)", "031122ef": "exhaustChibis(uint256,uint256)", "031126e1": "_approx(uint256)", +"03115084": "calculateValueWithInterest(uint256)", +"0311709d": "register(address[],uint256[],uint8[],bytes32[],bytes32[],address,bytes)", "0311904c": "investAmount()", "0311a8f0": "getUploadNames(uint256)", +"0312015c": "initialize(bytes32[],address[],address,address,address,address)", +"03120506": "removeTrustee(address)", "03122043": "setCompte_40(string)", "031324fa": "_transferDivis(address,uint256)", "03137d43": "test_insert_findWithHintPrevRemovedUpdateHead(int256)", @@ -1829,24 +3294,56 @@ "0313953d": "indexBalance()", "03141fcd": "listPairForReserve(address,address,address,bool)", "03145ac2": "WildFurToken()", +"031474df": "clientQuitsTransport(uint256)", +"03147f39": "checkBalanceOf(address)", "03149252": "everyoneDisabled()", "0314bcfb": "FUND_SUPPLY()", +"0314f02e": "wksaPerBlock()", "03152429": "newAccount(address)", "031578af": "bytes32Storage(bytes32)", "0315a513": "getDigitalAsset()", +"0315dea2": "rampToken()", +"0315f0ec": "setFeeRapids(uint256)", +"03161026": "SetBonusVault(address)", +"03167516": "SpeedTester()", +"0316b592": "AllInfoForAddress(address)", "0316bdb0": "CofounditToken(address)", +"03170581": "claimedTo(address)", "03178d05": "getB3()", +"0317b390": "WEEK3()", "0317c06e": "isAllowedBalance(address,uint256)", "0317fb71": "asmApprove(address,address,uint256)", +"031845c2": "setDefaultReservationChange(uint256)", +"0318ca50": "recreated(uint256)", +"03199f74": "testUpgradeableToken()", +"0319a0a8": "Triger_Initialize(address,address,uint256,uint256,uint256,uint256,address,address,uint256,uint256)", +"0319b627": "ERC20sApproved(address)", +"0319f11a": "lastSnapshotIndex(address)", "031a36f1": "EBBToken(address,uint256)", +"031a4cd3": "rateLevels(uint256)", "031a8161": "convertDecimalBack(uint256)", "031adff0": "whitelistingAddress()", "031b3677": "funders(address)", +"031b4938": "raresupply1()", +"031b905c": "FEATURE_VERSION()", +"031bc1ba": "setExtension(address,bool)", "031bd4c4": "TOKEN_LIMIT()", +"031c0619": "vestingDeadline(address)", +"031c903c": "setBlockPart(uint64,uint64,bytes)", +"031cf1d9": "withdrawProposal()", +"031d1133": "withdrawFromController()", +"031d2db8": "setDemandCurve(uint256,uint256,uint256,uint256,uint256,uint256)", +"031d4053": "addTimelocker(address)", +"031d41f0": "refundValue(uint256)", "031d5d01": "readMessage()", +"031d64bd": "setLatestData(bytes32,uint256,uint256,uint256)", +"031d6840": "unreleasedAmount(address)", "031d7421": "createRegistry(address,address)", +"031d769f": "walletUnlockDate()", "031d973e": "closeMarket(bytes32)", +"031dcaf5": "admAddress()", "031e1b65": "sendFounderAndTeamToken(address,uint256)", +"031e9a7b": "GoldHold(address,string,uint256)", "031ee1c8": "contribute(address,bytes32,bytes32,uint8,bytes32,bytes32)", "031f22e7": "PRICE_STAGE_TWO()", "031f273c": "getMixerCountByType(bytes32)", @@ -1854,162 +3351,321 @@ "031f74d4": "bugDiscovered()", "031f9d7b": "buyCore(address,uint256,uint256)", "031fce17": "listBackers(uint256)", +"031fe08f": "canWithdrawBeforeEnd()", +"031ff892": "findListTeam(string)", +"03202021": "tokenSupplyQuota()", +"03203ed7": "test_SET_EMISSION(uint256)", +"03205053": "safuDevFeesExempted()", +"0320eb2b": "getAllInfoFor(address)", "0320fead": "getUsedBySoftware(uint256)", "03216695": "monthlyWithdrawLimitInWei()", "0321f836": "namiMultiSigWallet()", +"03223207": "Reapped(address,uint256)", +"03223d0a": "scheduleRates(uint256)", +"03225f4c": "StartSale()", +"03226601": "numDIDRequiredToApproveVotePullRequestParameter()", "03228d0f": "changeSendingBanPeriod(uint256)", +"032290ed": "setMiMiContract2(address)", +"0322c064": "flashSwap(address,uint256,address,bytes)", +"0323a8b0": "broadcast(bytes)", "0323aa55": "isValidDeletion(uint8,bytes32,bytes32,string,address,address)", +"0323aac7": "getMinterLength()", "0323cc33": "getKnowledgeSinceLastUse(address)", "0323e576": "INITIAL_CARD_PRICE()", "0323f64a": "removeSubDivision(uint256)", "03240775": "getActiveEntryById(bytes32)", +"03240b6d": "viewSaleCNDAO()", "0324149a": "marketGolds()", "0324d0d9": "calculatVotePrice()", +"0324f573": "govUpdateTokenURI(uint256,string)", "03251a08": "setMin(uint256,uint256)", +"03254263": "OrderCancelled(bytes32,uint256,address,address)", +"0325ada8": "approve_495(address,uint256)", "0325be06": "biathlon_transfer(address,address,uint256)", +"0325d4a4": "getDelegatedStakeByPoolIdSlot(bytes32)", +"0325ea37": "getClaimStatusNumber(uint256)", "03261030": "Time_call()", "03267c60": "CITY_START_PRICE()", "0326be45": "Permission()", "0326c06b": "utfStringLength(string)", +"0326d98d": "lookups(address,uint256)", "0327194a": "startPublicsale(uint256,uint256,uint256)", +"03277a44": "nameTracking(bytes32)", +"03280e15": "PrivateSaleIssue(address)", "03282473": "AcceptedApplication(address,uint256,string)", +"03287e68": "isTopStaker(address)", +"03291315": "castVoteERC271(uint256,uint256,uint256)", "03291893": "issueAndActivateTokenBounty(address,uint256,string,uint256,address,bool,address,uint256,address)", "03294614": "buyPickaxes(address)", +"0329612c": "init(uint256,uint256,uint256,address,address,address,address,address,uint256,uint256)", +"0329ab23": "hasDoubler(address)", +"0329cf4a": "payoutERC20(address)", "032a0af7": "adIds()", +"032a0e0e": "gasTokenPayer()", +"032a6505": "increaseSupply(address,uint256,bool)", +"032a67a2": "AssignAdminship(address,uint8)", "032a8838": "withdrawOnBehalfOf(address)", +"032a9078": "year1_limit_date()", +"032a9668": "reApproveTokens(address)", "032aabf0": "has_presale_time_ended()", +"032aefb9": "_addressXId(address)", "032b0824": "updateLatestRevision(bytes32,bytes32)", +"032b09a8": "burnTokensAndWithdrawNfts(uint256[],address[])", "032b13da": "fourthChainETC()", "032b3400": "end_Time()", +"032b5a73": "factoryManager()", "032b642d": "changeStartAndEndDate(uint256,uint256)", +"032b7445": "getuserD(uint256)", +"032bb443": "instances(address)", "032bc66b": "Locked(uint256)", "032be08b": "ticketCountMax()", "032c05aa": "maximalParticipationAmount()", +"032c1a8a": "getKeyPurpose(bytes32)", +"032c49ed": "getAssetType(address)", +"032cac34": "getLocked_list(address)", "032cbc5f": "chainStartBlock()", "032ccf33": "dayPot()", +"032cd8bd": "joinPoolBySplitting(address,address,address,uint256,uint256)", "032cfa5c": "comelBabyCoin()", +"032d0961": "inv()", "032dbae5": "setTiers(uint256,uint256)", "032e0868": "getAllStaff()", +"032e1cee": "uniLiquidityAddingTime()", "032eb997": "CCXTokenERC20(uint256,string,string)", +"032edcb6": "setEthXLockBP(uint256)", +"032f2d48": "removeRole(string,address)", +"032f3449": "buyAllAmountPayEth(uint256,address,uint256,address)", +"032f3b09": "getTokenStakingStartTimeById(uint256)", +"032f693f": "maxPerTx(address)", "032fa796": "SVCoin()", "032fc13b": "whatRound()", +"03308b48": "MasterNodeBought(address,uint256)", +"0330f18c": "transferNoFee(address,address,uint256,uint256,uint256,bytes)", "03314efa": "shares()", +"0332bc38": "ceateTX(string,uint256,address,address)", "0332c6d4": "advertisementPayment()", +"03334304": "removeEth(address,uint256)", "03335d04": "ethGoal()", +"03337fd8": "minerInfo(address)", "03339af5": "getRobotCountForUser(address)", +"0333c464": "investmentsLevelOne(address)", +"0333ce24": "addCountryRestriction(uint16)", "0333d499": "getOwnedPoints(address)", "0333d4a2": "ZilleriumPresaleToken()", +"03345203": "rewardDays(uint256)", "03347d75": "findOrderIndexForAddress(uint256,address)", +"033484c5": "fragmentToBigg(uint256)", "0334e725": "FALCON(uint256,uint256)", +"0334f651": "oracleRoundStateSuggestRound(address)", +"03354faa": "approveProposal(address)", +"0335c7c1": "permit_mode()", "0335d533": "USER_GET_CROWDSALE_TOKEN()", "0335e18f": "timeComplete()", +"03361c29": "setNewSmartFundETHFactory(address)", +"03365787": "g(bool,uint256,uint256)", +"0336fd90": "parseInputs(bytes[])", "03379e7f": "Initialize(string,string,uint256,uint256)", "0337aa74": "systemAuctionDuration()", +"0337b3aa": "totalTokenAmount()", "0337e379": "releaseTokenOwnership()", +"03386ba3": "_setAndInitializeImplementation(address,bytes)", +"0338aa3b": "ReferrerPayed(address,address,uint256,uint256,uint256)", "0338e3a5": "getArrIntField2()", "03395ba5": "AUCTION_TOKENS()", "033988a1": "Pollen()", +"0339d81c": "endIco(address)", "0339f300": "revise(uint256,bytes32)", "033a010b": "adminClaimAirdropMultiple2(address[],uint256)", "033a38b0": "vehreqexist(uint256,address)", "033a6cab": "admin_redeem(address)", +"033b074c": "migrateToStakingAddresses()", "033b8675": "ICOCREED()", "033ba5d1": "getWillData()", +"033c2a1d": "getUserSummedTotal(address)", "033c44c3": "m_totalInvested()", "033c6ee6": "countHolders()", "033c8477": "mined()", +"033ca171": "WithdrawByDev(uint256,uint256,uint256,uint256)", +"033cf249": "fundContribute(uint256)", "033d62ee": "is2D(bool)", +"033d6bdb": "startBorrowing(address,address,uint256)", +"033d7238": "levelComission(uint256)", +"033d9c37": "updateManagementPosition(address,uint8)", "033da70b": "setLogicContractAddress(address)", "033df9cb": "stepOneStartTime()", "033e7ef4": "registerVoteToken(bytes32,bytes32)", "033e86d4": "PurchaseLocked()", +"033e87aa": "__Offering_init_unchained(address,address,address,address,uint256[5])", +"033f10bf": "RESALE_ARTIST_SHARE_NUMERATOR()", +"033f608e": "transferMeAvailableBeneficiaryETHBalance()", "033f7bc9": "testEmergencyStop()", +"034012ca": "withdrawUnknownToken(address)", "0340249e": "HotelloadTokenERC20(uint256,string,string)", "03402a9a": "ClubTransferContract()", "03406e76": "getOptionSellOrders(uint256,uint256)", +"0340752f": "addCOO(address)", +"03410241": "setStatLuck(uint256)", +"03413181": "exchangeEtherForDET()", +"034138f6": "pendingMfrm(uint256,address)", +"0341557c": "_changeOverruleWindow(uint64)", "034187fd": "setEthToCents(uint256)", +"0341c3fd": "_withdrawDaiFees(uint256)", +"03422b93": "ReconnewOwner()", "03427656": "getDefaultSoftResolutionBlocks()", +"0342a6ba": "burnFees(uint256)", +"0342e122": "getDepositRate(uint256,uint256)", "03432744": "disputesWithoutJurors()", +"03438dd0": "swap(address)", "0343d550": "getApprovalCount()", "0343dfa0": "checkInvariants()", "03440022": "setAsSeller(address,bool)", +"03441006": "finalizeRequest(uint256)", +"0344248b": "getBrokerToken(address)", +"03446b18": "verifyTicket(uint256,uint256)", "0344a36f": "draw(address,bytes32,uint256)", +"0344d0d0": "changeTokenNameAndSymbol(address,string,string)", +"034601ec": "safeBatchTransferFrom(address,address,uint256[])", +"0346030b": "setGiga(address)", "03460f6c": "airdropAllowed()", "0346a4ad": "MAXIMAL_PARTICIPATION()", +"0346fb2e": "discountTradeAMMtoAMM(address[],address,address,uint256,bytes,bytes,uint256[])", +"03472be5": "stakeAsset(uint256,string)", +"03472d4f": "setKeyAddressWithKeyAddress(uint256,address,uint8,bytes32,bytes32)", +"03472fa4": "transferIn()", "034741a8": "patformWithdraw(uint256)", +"03475655": "_lockeTime()", +"03476530": "transferFromOutAll(address,address)", "03487513": "SIGToken(uint256)", "034889ff": "unFollow(address)", "0348946d": "mintedTokensCap()", +"034899bc": "getSelector()", +"03490ba5": "pixelInitialLiq()", +"03493f23": "NewVote(address,bytes32,address,uint256)", "034a7bce": "saosao4()", +"034aa244": "LogMangeWhile(address,bool)", "034ac7a3": "ROLE_GRADE_PROVIDER()", +"034b0f8f": "flash(address,address,uint256,uint256,uint256,uint256)", +"034b873b": "getMyUid()", +"034bc21a": "setTronGoContract(address)", +"034bfa5a": "bulkUnGreyListAccount(address[])", "034cb28e": "addressOf(address,bytes)", +"034cbe04": "delegatedWithdrawAll(address)", "034cd0b0": "buyTokensGrowthLife()", "034cf8bc": "transferClub(address,uint256)", +"034d078d": "getCombCardInfo(uint256)", "034d0834": "NoBsCrypto()", +"034d21e4": "getGasCostOfGetNextSqrtPriceFromInput(uint160,uint128,uint256,bool)", "034d3b0d": "withdrawTipForDeveloper()", +"034d4ab4": "SetUSDC(address)", +"034dc84c": "grandPot()", "034de540": "_getEthAmount(uint256)", +"034ed7be": "Print(address,uint256)", +"034ef2ea": "mintWithTokenObjectData(address,uint256,string,string,string,string)", +"034efaeb": "createConverter(address,address,uint32,address,uint32)", "034f55d2": "calculateSum(uint256[])", "034f9774": "setWhitelistWallet(address)", "034fcf55": "updCouponConsumed(string,bool)", +"03502519": "changeMintDropOwner(address)", "0350bcd9": "toSendLeft()", "0350d085": "Sign(string,string)", "035186d6": "increasePrizePool(bytes4)", "0351947f": "claimFine()", +"035196d5": "ProjectUpdated(uint64)", "0352017b": "getInvestmentRecord(uint256)", "03520535": "getPI_edit_10()", "03526ff0": "LFDNetwork()", +"0353324c": "NOAS()", "035340f1": "Bitether()", "03547e53": "ownedBalance(address)", "0354d6c5": "accountslength()", "035502f2": "addCategory(string,uint256)", "03553835": "calculateTokenAmount(uint256,uint256)", +"0355ac38": "removeFarmPoolWithoutClaim()", "0355b70a": "getSpaceshipTotalSold()", +"0355db30": "getMaxIncome(address)", "03562dbb": "changeEmissionContractAddress(address)", "0356948e": "previousstagedata()", "0356fe3a": "genesisBlockNumber()", "0357088b": "trancheByIndex(address,uint256)", +"0357359c": "bAssetPersonal(uint256)", "0357371d": "release(address,uint256)", +"0357e370": "pause(uint64)", "03580712": "executeDueToInactivity(bool)", "03582fc5": "setReferralBonusPercent(uint256)", "0358395d": "DominionCoin()", "0358c295": "testInitialBalanceWithNewRGXBonus()", "0358d965": "addPayout(uint256)", +"035928c5": "allow_list(address)", +"0359fea9": "rewardsPool()", +"035a2005": "getStateManagerAddress()", "035ac814": "lastTimeUpdate()", "035cf142": "getMinimumDeposit()", "035d0880": "_requireQuePayment(uint256)", "035d37a8": "setMinContribAmount(uint256)", +"035dcfe5": "TokenBuyRequest(address,string,uint256,uint256,uint256)", +"035e3b6f": "userRewardPerTokenPaidForDynamic(address)", "035e898a": "getStellarInvestor()", "035e902d": "Set_EmergencyCode(uint256,uint256)", "035f057d": "multiIncreaseApproval(address[],uint256[])", "03602e9e": "getPrivAddress()", "03606b30": "setStopFunding(bool)", +"036082da": "setFXSETHOracle(address,address)", +"036096b8": "addCommonPetIds(uint256)", "03611ec7": "Finside()", "03612cb5": "settle(bytes32[],uint256[],uint256[])", +"036147e9": "adminSetMarket(address)", +"036186f9": "updatePlayerCardPicture(uint256,string)", +"036277eb": "smash()", +"03627b71": "airDropETH(address[],uint256)", "03627e70": "countStudent()", "0362d1f6": "getGamblerBet(address,uint256)", +"03631697": "WithdrawalDisabled(address)", "03635100": "bizcoin()", "0363b1e1": "trade(address,uint256,address,address,bool)", +"0363ea1e": "increaseYear()", +"036412cb": "newInstance(address,string,address,address,uint64,uint64,uint256[5])", +"036429e0": "freeze(uint256,address)", +"036459c0": "isProviderInitialized(address,address)", "036478c1": "GlobalAmountCapSoft()", +"03649d45": "_payFees(uint256,bytes32)", "0364a254": "getStringValue(bytes3)", "03652c4e": "ICOStartTime()", "03656d07": "exchangeMethodIsAllowed(address,bytes4)", +"03656f71": "getBalances(address,address[],address,address)", "036648b7": "TokenRateUpdated(uint256)", +"03666756": "xstakeAddress()", "036723a2": "Payout_intern(uint256)", "0367f96d": "setHardCapValue(uint256)", +"036811f0": "dcdc(address)", "036896ab": "getERC20TokenBalance(address,address)", +"03690224": "getPooledBalance6(address)", +"036954f6": "final_buy_refund_reject(uint256,uint256)", +"0369ab51": "LogContractBalance(address,int256)", +"0369fc8e": "strictTokens(address)", "036a131d": "setPI_edit_28(string)", +"036a1c22": "credits(uint256)", +"036a2395": "wipeAll(address,address,uint256)", "036a66eb": "GetProductionPerSecond(address)", +"036a9f2a": "getIPOpurchases(uint256)", +"036aa8e2": "getBytesSequence(bytes32,bytes32)", "036ae645": "deleteMessage(uint16)", +"036b14dd": "FRT()", "036b3a81": "partnerSupply()", +"036b4ee1": "addContractBNBBalance(uint256)", "036bd387": "totalEthInWeiForFirstIco()", "036c36eb": "relaySellerRequestCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"036c8781": "swapAndMakeOffer(address,address,bytes,address,bytes,address,uint256)", "036dd086": "createGame(string,string,uint256,uint256,string,string,string,string,bool)", "036e05b0": "CreatePHX(address,uint256)", "036e4220": "changeMinAcceptQuorumPct(uint256)", +"036eccee": "addCountryCities(uint256,uint256[])", "036ecf84": "dDownInsSplit()", "036ee850": "votingDeadline()", "036f60ec": "setSupplyAdjuster(address)", +"0370036c": "getCollFactors(address,address[])", +"03701f78": "usdcBuy(address)", "037051eb": "startRound(address)", +"03709893": "stakeLPToken(uint256,uint256)", "0370c0d9": "_repayLoan(uint256,uint256)", "0370ca41": "contractStage()", "0370e65c": "preSaleEndedAt()", @@ -2017,14 +3673,31 @@ "03710668": "callContract(address,bytes)", "0371193b": "getEmployeeAllInformation(uint256)", "03714af7": "burnApproveReset(address,address)", +"03715645": "getLast3(address)", +"03718916": "voteForServicePoolsCount()", +"0371ddf2": "ReceivedChild(address,uint256,address,uint256)", +"03723885": "WithdrawToken(address,address,uint256)", +"03726357": "burnfee()", +"03730c02": "freezeFrom(address,bool,uint256)", +"0373a364": "totalToBeMinted()", "0373e649": "Withdrawal(address,address,uint256,uint256,uint256)", "03741040": "get_presale_arbits_total()", "0374fc6f": "getBestOffer(address,address)", "03750d94": "serverSeed(address,bytes32)", +"0375e839": "ccStateHash(bytes32[10],uint256[4])", +"0376612b": "SetTex(address)", +"03770046": "getPromiseDepositSe(bytes32)", "03771327": "HardcapGoalReached(uint256,uint256,uint256,uint256)", "03771f2f": "numOfInflatableTokens()", +"03773b83": "_addDefi99Markets(address[])", +"03776d47": "setInterestFeeMasterBeneficiary(address)", +"0377df6f": "multiplierSToken()", "0377ebe8": "itemKindCount()", +"03783901": "decrIIStats(uint256,uint256)", +"037859af": "stakingOf(address)", +"03787ce5": "affiliateList(uint256)", "0378f83f": "destroyFashion(uint256,uint16)", +"037902de": "showBestOffers1(bool,uint256)", "03792d52": "lastSubTokenBuyerOf(uint256)", "037933dd": "calcSTQAmount(uint256,uint256)", "0379565f": "EIP165Implementer()", @@ -2032,86 +3705,145 @@ "037a9d30": "isDataSource()", "037ae882": "reLoadKey(uint256,uint256)", "037b5fdc": "burn_balance(address)", +"037b7d79": "globalSettlement()", +"037bf652": "stakedT1ByUser(address,address,uint256)", "037c68b2": "disagreeCount()", +"037c83be": "registerAdminWithReferrer(address,address)", "037c983a": "resumeCrowdSale()", "037c99b0": "setBonus(uint256,uint256)", "037ca5fc": "HubCrowdsale(uint256,address,address)", "037ca6c4": "allAgingTimesAdded()", +"037cd2fe": "addToValidUser(address)", "037cf465": "has_token_sale_time_ended()", +"037d2bfe": "publicInjectLiquidity()", "037d4ff8": "get_pre_kyc_bonus_denominator()", "037e2e91": "Insureum()", "037ed3e2": "executeClaim(address,address,uint256)", +"037ef40c": "rebalance_AMM_liquidity_to_price(uint256)", "037ef916": "CaterToken(address,address)", +"037f41a1": "setVIVIDAddress(address)", "037f8f8f": "_getDefaultTranchesForAmount(address,uint256)", "037f9cf0": "rewardDistributionStarted()", +"03807ee5": "burnPercent()", "0380e2f3": "getHashOfTheSignedDocument()", "0380fd03": "newExchange()", +"038103f2": "addTokenList(address[],uint256)", +"03815e7b": "calculateTradeDecrements(uint256[],uint256)", +"0381a212": "setUser(address,uint256,uint256,uint256,uint256,uint256,uint256)", "0381c260": "getYearlyUSDSalary(address,address)", "0381cb3b": "setRowcol(uint256,uint256[2])", "03824f76": "hasSoldOut()", +"03826727": "Unlock(string,bytes32,address,bytes32,bytes32)", "03828729": "coordinatesToAddresses(uint32)", +"0382ad26": "checkClaim(address,uint256)", "0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", "038339ab": "publicGetDeposit(uint256)", "03833bae": "ValidContributionCheck(uint256,bool)", "0383966b": "testCanFinalizeOnCap()", "0383a6f0": "CheckLimTransferDay(address)", +"03840c6c": "repRewardConstB()", "038424c3": "maxEarningsClaimsRounds()", "038461ea": "getCertifiedStudentsCount()", "0384899b": "OwnershipChanged(address,address)", "03850848": "saleAuctionContract()", +"03854e7c": "withdrawTeamActivationGain(uint256)", "03856d15": "BalanceOnlyOwner()", "03866aad": "transferCrc(address)", "0386a016": "closeProposal(uint256)", +"0386f6f0": "createItem(address,string,string,bool,uint256[4],uint8[5],uint16[2])", "03872547": "setarg_1_input(uint256)", +"038728a3": "maxScheduledTransactions()", "0387b0a2": "saleCounter()", +"0387d7e6": "incentivizers(uint256)", "03880bab": "deal(uint256[2],bytes32,bytes32,uint8)", +"0388e4a6": "setMaxTokenWad(uint256)", +"03892125": "getPreviousTimestamp(uint256)", "03894922": "allocateTokens()", +"03896de4": "bulkReward(address)", +"038a7a08": "totalHxyTransformed()", +"038abb09": "approve_217(address,uint256)", "038b117b": "onlyAdminAndNotFinal()", +"038b4642": "setGasRefund(address,uint256)", +"038bd44c": "LaunchIncentiveWallet()", +"038cc938": "AutoPaySet()", "038ccee8": "createNew(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"038cf882": "setRoleForDataType(uint256,uint256)", +"038d09e1": "transferReservesOnUpgrade(address)", "038d71ee": "switchOff()", +"038defd7": "registry(address)", +"038e26d2": "whiteListReferrers(address)", +"038e47fe": "crossDomainMessageGasLimit(uint8)", "038e666f": "ethereumSaleRate()", "038e7577": "setConfigUint(bytes32,uint256)", "038f1845": "returnFunding()", "038f21a6": "mapToRange(uint16)", "038f5ed6": "drawDown(uint256)", +"038f6230": "setStakeRatio(uint256)", "038f8b64": "batchFillOrdersNoThrow(uint256[],bytes[])", "038fa9cb": "getRomms()", "03901913": "DLBToken(uint256,string,uint8,string)", "03905f10": "scoreKnockouts(bytes32,bytes32,bytes12)", "03906217": "SaddleNotForSale(uint256)", "0390d190": "YouDealToken()", +"0390eb65": "decimal_factor()", +"039209af": "getCurrentDesiredTokens()", +"0392854a": "updateTeamSecondaryAddress(address)", "0392d2b4": "isManagerAllowed(address,string)", "039314b1": "VotingEnded(address,bool)", +"03931e81": "getAllowedErc721Contracts(uint256)", +"039363c9": "otherConfig()", +"039396f1": "createMarkets(address,string,uint256[],address[],string)", "03941cc5": "onwerName()", +"03948e47": "MAX_HALVING_ERA()", "0394b9ce": "getWeaponList()", "03959bb7": "setDataContract(address)", +"0395dedb": "getUnlockableOptionsCount(address,uint256)", +"0395ed6a": "WithAss(address,uint256)", "03960631": "raindropAddress()", +"03966a32": "monsterClass(uint32)", +"03966c91": "getMyInvitedLength(address)", +"039672c4": "withdraw(uint32,bytes)", "03969758": "SetDurationOfLock(address)", +"0396bc29": "isForRent(uint16)", +"0396bd0a": "balanceOfKCRVkTUSD()", "0396dcb0": "purchaseByEMONT(uint16,uint256,address)", +"0396ec10": "executeProposal(bytes32,address,uint256)", "0396ece5": "SetupReserve(address)", "0396f60a": "Invested(address,uint256,uint256,uint128)", "03975d1f": "_validateBetOrRefund(uint8)", "03976b0e": "setBattleProviderAddress(address,address)", +"0397b652": "salary()", "03980ac4": "prophetize(string,string,string,bytes32,bytes)", +"0398275f": "singleAirdropAmountForReferrer()", "03985426": "getMode(bytes32)", +"03988f84": "deals(uint256)", +"0398a613": "mintOptionsThenFlashCloseLong(address,uint256,uint256)", "03991aea": "getReleasableFunds()", "0399247a": "isVotingProxy(uint32,int256,address)", "0399321e": "set(bytes)", "03995b2d": "holdingsOf(address)", "03999795": "rouletteOwner()", +"0399ab5f": "HopMarketCapChanged()", "0399c357": "assignFreeReadings(address,uint8)", "0399f881": "ART_DECIMALSFACTOR()", +"039a0f71": "patientIds()", "039a21b8": "tryExecute(address,bytes,uint256)", +"039ab887": "INITIAL_SAVING_ASSET_CONVERSION_RATE()", "039af9eb": "tiers(uint256)", "039b267d": "mdtFoundationAddress()", +"039b5768": "getListResons()", "039b6c34": "assign(uint16,address,uint256)", +"039b90a5": "FrozenAccount(address,uint256)", "039ba6be": "getPriceETH()", +"039bcf8e": "getSwapPool(address)", "039bd55a": "constrctor()", +"039beb0c": "icoRounds(uint256)", "039c84c1": "Add(uint32)", "039c9a21": "refundTransactionInternal(uint256)", "039c9d84": "getOpenNum(bytes32)", "039d0bfa": "setSelfOn()", "039d8751": "GOX()", +"039da706": "_deployNewKeyRing(address)", "039de01d": "unregisterScheme(address,address)", "039e4e2a": "situation_challenge()", "039e9e00": "acceptOwnershipAPI()", @@ -2119,27 +3851,57 @@ "039f0156": "withdrawNxc(address,uint256)", "039f0e9c": "_createPuppy(uint256,uint256,uint256,uint256,address,uint16,uint16,uint16,uint16)", "039f6b28": "QuadrantAssets()", +"039f711c": "Requested(address)", "039fb41c": "get_description_hash()", +"03a00b6e": "getSupplierMachineHoursAvailible(address)", +"03a033d6": "airDrop(address[],address[])", "03a0d68f": "expiry_date()", +"03a0e405": "decreaseBEP20Supply(address,uint256)", "03a168e0": "jackpotLastWinner()", "03a19a4f": "maxDropsPerTx()", "03a1b87d": "manageInvestors(address,uint256)", "03a1bdc3": "walletLockBoth(address,uint256)", +"03a1fb2b": "changeTimeLine(uint256,uint256)", "03a250f9": "startWork(uint256)", +"03a29adf": "createMultipleLocks(address,address,uint256[],uint256[])", "03a3053b": "reserveFundManager()", +"03a34b0d": "add_acc(address)", "03a47b58": "tyms(uint256)", +"03a499a0": "alternateOwner()", +"03a4c84d": "ReverseSupply(uint256)", "03a503a4": "addHorseIndex(bytes32)", +"03a53d6b": "getBlockMinted(uint256)", +"03a576cf": "TreasuryWithdrawn(bytes32,uint256)", "03a5c8e7": "tdeActive()", +"03a61303": "getCollateralMedianPrice()", +"03a61bfc": "totalowners()", "03a68d1d": "REBToken()", "03a6981b": "StateUpdate(uint128,int128,int256,uint256,address,uint128)", +"03a74dc2": "PREFER_FIRE()", "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)", +"03a7c9e4": "checkLicense(address)", +"03a82138": "purgeDeployer()", +"03a82712": "getTimeInterval()", +"03a8f117": "startpreSale()", +"03a93c0c": "getUserDownlineCount(address)", +"03aa07e7": "transferEthSame(address[],uint256)", +"03aa731e": "updateRequirement(uint256,uint256)", +"03aaad15": "InsufficientAllowance(string,address,uint256,uint256)", +"03aaf37f": "getUserMark(address)", +"03aafa25": "pendingIncentives()", +"03ab168b": "tkvn()", "03ab614d": "testTranferOneToken()", +"03ab7c7e": "minimumBalanceRewardsApplicable(address)", +"03ab98f7": "setStrategyFarmingPoolConfig(address,address,uint256,uint256,address[])", "03ac58d7": "deathData_f8()", "03ac7215": "setTotalSupply(uint256,bool)", +"03ac8bee": "createVestingContract(address[])", "03aca792": "pendingList(uint256)", +"03acb448": "disregardProposeOwner()", +"03ad0d63": "getBoundedTargetPrice()", "03ad4be3": "updatetoken(uint256,string)", "03adaee6": "applyForCertification(string,string,string,string,address,uint128)", "03adcbd2": "walkBook(uint16)", @@ -2152,41 +3914,70 @@ "03aeeba6": "_setClientSupply(address,uint256)", "03af2cda": "createMultiple(uint256[],uint256[],uint256[],uint256[],uint8[],uint256[],address[])", "03af73d3": "sendCollectedEther(address)", +"03afe314": "createpaymentRequest(uint256,address,address)", "03b05c73": "maxIssuedTokensPerIco()", +"03b05f44": "refVault(address)", +"03b07af7": "WHITELIST_TRANSFER_ROLE()", "03b0a55c": "icoPvtEnded()", +"03b0d562": "_createClaimMessage(address,bytes32,uint8)", "03b0e428": "_unpackRarityBonusValue(uint256)", "03b103ea": "Vote(uint256,string,bytes32[])", +"03b1f20c": "EscrowPlaced(address,address,bytes32,uint256,bytes32[],bytes32)", +"03b22cd1": "feesDuration()", "03b25050": "CGCToken()", +"03b275ae": "createCampaign(address,uint32,uint256)", +"03b3160f": "slotProgress()", "03b4e20c": "removeAddressFromAccountFor(address,address)", "03b59255": "withdrawForeignTokensTo(address,address,uint256)", "03b5af0f": "incomingRandomNumber(address,uint8)", "03b5d494": "takeBet()", "03b5ddbe": "_usdMinAmountValidate(uint256)", +"03b61746": "totalRewardPTY()", "03b62931": "proveInConfirmedGblock(bytes,bytes32,bytes32)", "03b62e10": "lowestDiff()", +"03b641a2": "grant(address[],uint256)", "03b6eb88": "note(address,uint256)", +"03b713b9": "setMetaMintAmount(uint256)", "03b718ee": "getCityBuildings(uint256,bool)", "03b753dd": "tokenPurchase(address,uint256)", +"03b773e8": "issuer_burn_from(address,uint256)", +"03b7cd5d": "payoutTokens(uint256,address[],address[])", +"03b8283d": "refreshTokenAddr(address)", +"03b82da9": "remainingFlappsforSale()", "03b8a24e": "ritual(uint256)", "03b918dc": "allow_contributions()", +"03b91f6b": "triggerBirth(address)", +"03b98b70": "isInitialSupplyFinished()", "03b98c0e": "pauseable()", "03b9b4f9": "releaseTokens(bytes32,uint256)", "03b9f0b2": "referrerBonusRate()", "03ba27f6": "withdrawToWallet()", "03ba3a88": "notifyContract(address,address,uint256,bytes)", +"03ba5c34": "setMonthlyGainManually(uint256)", "03bad56e": "transferERC223(address,uint256,bytes)", "03bb5d8a": "openGameResultAndNewGame(uint256,string,bytes32)", "03bbba93": "incentiveDistributionStarted()", +"03bbc88d": "eUpdateStartEndTime(uint256,uint256,address)", "03bc1e19": "changeOneBet(uint256)", +"03bc20e3": "internalRequireFunction(uint256,uint256)", +"03bc4a27": "getBuyOrderBook(string)", "03bc6d0d": "amendFee(uint256)", +"03bcc72d": "isCloned()", "03bcebea": "initOneChance(address)", "03bcf11d": "abortSale()", "03bcf514": "finishedCrowdsourcingDisputeBond()", +"03bd2dfe": "signal(bool,uint256)", "03bda14e": "raiseMaxNumBets(uint256)", +"03bdeafb": "bloqueActual()", "03bdecf5": "right69(uint256)", +"03bdff67": "Capatl()", "03bec188": "ChangeMinAmount(uint256,uint256)", +"03bf08b6": "EvWithdraw(address,uint256,uint256)", +"03bf1f6c": "put(uint256,uint256[])", +"03bf492e": "pageVokenSum(uint256)", "03bf4fb7": "setTradersContract(address)", "03bf8e70": "birthKitty()", +"03bf997b": "TransferSold(address,uint256)", "03bfee9e": "_getBidId()", "03c0bfb5": "getOwnUserState()", "03c13148": "setReceiver1(address)", @@ -2194,55 +3985,89 @@ "03c1d1df": "collectERC20(address,uint256)", "03c2d5b6": "nextGameDeveloperMiningPower()", "03c327f0": "changingMilestones()", +"03c346ff": "bouunty(address)", +"03c3b1f9": "AirdropPerETH(uint256)", +"03c3ff25": "mintSeries(uint256,address)", "03c401e3": "ADDR_TKG_VC()", "03c411d3": "MOMToken()", "03c41c04": "NewUpgradedAmount(uint256,uint256,address)", +"03c438f0": "CreatedRegulatorProxy(address,uint256)", "03c45305": "foundersSupply()", "03c49580": "priceOfElement(uint256)", "03c4d93a": "payWithGold(uint256)", +"03c50c9a": "updateValueAfter(uint256)", "03c5b1dc": "setPeriod(uint256,uint256)", +"03c5b30b": "getNumberOfPresaleOwners()", "03c5f26a": "PublicCheckGameStart()", "03c5faf4": "s12(bytes1)", "03c63869": "resumePlayer(address)", "03c6c8f9": "TheExcelToken()", +"03c6d8e0": "balanceOfPickle()", +"03c6ed21": "setQualifierToken(address)", "03c7bce1": "_addMinter(address)", "03c7da39": "mintMarketingTokens()", "03c83302": "distributeDividends()", +"03c8e7bd": "getserialnumbers(uint256)", "03c94ca6": "tokenSoftCapReached()", +"03c9e721": "getFirstObservationInWindow(address)", "03ca0a95": "performSetTokenControlInfo()", "03ca0eed": "requireCustomerId()", "03ca0f6c": "advisors(address)", "03ca30e0": "changePreMine(address)", +"03ca4106": "maxDailyPerUser()", "03ca558a": "read_i8()", "03ca71d6": "setSecurityCheck(string)", "03ca7bcc": "debug_last_approved()", +"03cb351c": "setPerBlockAllowance(address,address,uint256)", +"03cb8204": "setKittyETHpid(uint256)", "03cba01e": "bonusEndTime250()", +"03cbcb6f": "fireUsesLibraryEvent(uint256)", "03cbcf57": "getBetAmountAtLayer(uint16)", +"03cbdd2f": "acceptedTokensBySymbol(string)", "03cc1e32": "addFundingRound(uint256,uint256,uint256,address[])", "03cc5597": "wrestle()", "03cc5e4d": "setTechnicalAdmin(address)", "03cc7b85": "num_tokens_auctioned()", "03cc8efb": "BethingWorldCup()", "03cd3e47": "transferRecovery(address,address,uint256)", +"03cd8d13": "mintCat(address,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"03cda667": "setOwnerNonPayable(address)", +"03cdc017": "setUIntValues(bytes32,bytes32[],uint256[])", +"03cdc856": "xcorlibriPerBlock()", "03cddb2c": "capitalAllocated()", +"03ce6adc": "getProposalNameByElector()", "03ce6c55": "roundUp(uint256,uint256)", "03ce9c00": "AcceptsTokens(address)", +"03cea158": "setclaimedusers(address[])", +"03ceac7d": "thirm()", "03cf0678": "bigBang()", "03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", "03cf678b": "vitToken()", +"03cf8a20": "w2()", "03cfe12d": "benefactorsKeys()", +"03d03877": "getieoCoinSallInfo(address)", +"03d07a9f": "mWinner()", +"03d07ca9": "birthTime()", "03d08f3b": "nextLotteryTTWTokenId4()", "03d0b7d2": "minimumFeePlusDividends()", "03d0cecd": "getLx()", +"03d0cf94": "setTotalAllowance(address,address,address,address,uint256)", +"03d12da7": "setiGOVFeeCollector(address)", +"03d19637": "changetradingFee(uint256)", "03d2107f": "getSender(bytes32)", "03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", "03d231b5": "signerFlag(address)", "03d258c4": "set_prices(uint256)", "03d285fd": "nameok(string)", +"03d2862b": "getCompoundData(address,address[])", "03d2e963": "zint_now()", +"03d3690e": "sponsoredContract()", "03d37d78": "showPoolNumber(address)", "03d38296": "indexSuperInvestor(uint256)", "03d3a6b7": "shutForETH(uint256)", +"03d3b618": "CreateApp(address,address,string,uint256,string)", +"03d41e0e": "burners(address)", +"03d41e66": "votingRegister(address,uint256)", "03d41eb6": "reserveSupply()", "03d499ef": "totalEthereumICOReceived()", "03d4e98a": "getProposalVote(uint256,uint256,uint256)", @@ -2250,65 +4075,119 @@ "03d51a0c": "transfer_ether_to_owner(uint256)", "03d5aa0c": "PigChain()", "03d5f483": "founderTokenVesting()", +"03d6576f": "Obliterate(uint256)", +"03d67bd4": "updateMyBTokenAmount()", +"03d68185": "protectedTokens(address)", "03d699da": "YggdrashCrowd(address,address,address,uint256,uint256,uint256,uint256)", "03d6b6b4": "EpigenCareCrowdsale(uint256,uint256,uint256,address,address,address)", "03d6d7b6": "getCallMaxCost(bytes32)", +"03d6e81e": "rejectJob()", "03d7244f": "dice_game(uint256)", "03d756cb": "ethealToken()", "03d75937": "setUIntValue(string,uint256)", "03d76547": "addressFin()", +"03d7ece7": "individualcap()", +"03d81aac": "lockoutEndTime()", "03d83c4d": "stopTge()", +"03d90d98": "ID2P2Hex(string)", +"03d93868": "addLiquidityExactIn(address,uint256,uint256,uint256)", +"03d9b44c": "DidNotFinishYet(uint256,uint256)", "03d9d253": "unlock(uint256,address,address,bytes)", "03da04d7": "BRN()", +"03da1ea1": "getproposalVoteTotal(uint256)", +"03da3582": "getDaysPassed()", "03da8902": "transfearDBOwner(address)", +"03daa959": "ovmSLOAD(bytes32)", +"03db3632": "getPlatformA()", +"03db6fc0": "refundFrac()", +"03db86a3": "deposit(address,uint256,uint256,uint256,uint256,uint256,uint8,address)", +"03dba0a6": "exAss(uint256)", "03dc0532": "getLableRecords(bytes32)", +"03dc5326": "closeEvent()", "03dc6340": "AdminTokenSent(address,uint256)", "03dcead2": "directDebitOf(address,address)", "03dcf6bc": "truToken()", +"03dcfe6a": "initialize(uint256,uint256,uint256,address,address,bool)", "03dd5a18": "testSimpleArray()", "03dd88f8": "getAssTotal()", +"03ddbe89": "nullCardToken()", "03ddc104": "ownerClaimOverride(uint256)", +"03ddc726": "expectedReturnDataSize()", "03ddcae9": "checkTradeSignature(bytes32,uint256[],bytes32[])", +"03dec009": "averageFeesPerBlockEpoch()", "03dec463": "getRentOwed(address)", "03defdc5": "jobHunterWithdrawal()", "03df1550": "ECR20HoneycombToken()", +"03df4868": "epochController()", "03df6106": "setNewReleasePeriod(address,uint256,uint256,uint256)", "03e07b2f": "getMinRefEthPurchase()", +"03e0d50a": "IncreaseSoldSaleSupply(uint256)", +"03e1001e": "last6EthDivPoints(address)", +"03e1b127": "returnStatusIco(address)", "03e1b3c6": "sellAllAmountBuyEth(address,address,uint256,address,uint256)", "03e20503": "localManualEntry(bytes32,bytes32,uint256,uint256,address)", "03e28366": "playerNum()", +"03e2b643": "crossWithdraw(address,address,uint256,bool)", "03e2b9f5": "syncDate()", +"03e32fa1": "processingReward()", "03e337d1": "SEPCToken()", +"03e33b53": "GetMessage()", "03e39113": "BeggarToken()", "03e3b1ed": "applicationApproved(address,address)", "03e3f677": "setICOStart(uint256)", +"03e3f687": "schainCreationTimeStamp()", "03e3fa51": "editScores(uint256[],uint256[])", "03e4d9f5": "getDayIndex(uint256)", +"03e4e1eb": "approve_123(address,uint256)", +"03e553a5": "arAsset_coef3(uint256)", "03e55f1c": "lockEscrow(bytes32,address,uint256)", "03e5affd": "add(string,int256,int256)", +"03e5cb76": "getTypeIds(address,uint256[])", +"03e68a21": "SOAKToken()", +"03e6b021": "checkFirstAction()", "03e6c117": "getIcoAddrListByIcoRuleId(uint256,uint256)", +"03e77ab1": "setExtensionContracts(address,address,address,address,address)", +"03e78103": "farmName()", "03e7b4e9": "getEmission(uint256)", +"03e7f837": "Universidades(address)", +"03e8361d": "view_tuple()", "03e83b6a": "MyToken(uint256,string,string)", "03e864fa": "TestableMarketContractOraclize(string,address,address,uint256[5],string,string)", +"03e871d1": "setHostClaimsRent(bytes32)", "03e8837c": "getUserCount(address)", +"03e88b3e": "getCollectibleData(uint256)", +"03e8c9fa": "open(bytes32,address,uint256,address,uint256)", "03e9287a": "Tacoin(uint256,string,string)", +"03e92fd1": "_reqNumber()", "03e93b2e": "changeStarbitWallet(address)", "03e9598c": "updateClientVersion(bytes32)", "03e96fe3": "getAllTickets()", +"03e9b45e": "setGameWin(uint256,uint256)", "03e9e609": "getRecord(uint256)", +"03eadcfc": "adapter()", +"03eb00af": "fulfillments(address)", +"03eb880f": "yieldJun(uint128)", "03ec1bbe": "tokenIssuedTotal()", +"03ed19b3": "MDG()", "03ed9d21": "setMaxContribution(uint256)", "03edae57": "withdrawFounderFunds(uint256)", "03edf914": "placeBet(uint256,uint8)", +"03ee438c": "metadataURI()", +"03ee8d90": "getPlayerLaffAddress(address)", "03ee8f08": "getCoeff(uint16)", "03eea024": "issueTreasury(address,address)", "03eeb40e": "AngelsvsRedSox419()", +"03eee678": "Longitud_Array_Alta()", "03ef03b4": "buyBulkMidGradeCar(address,uint256[],address)", "03ef2a2c": "tryExecuteProposal(uint256,bytes)", "03efb5c4": "book(address,uint256)", +"03f0427e": "BidWithdrawn(address,uint256)", +"03f048b0": "getRatesAndTime(uint256)", "03f0cc64": "affiliateCodes(address)", +"03f10993": "increaseReward(uint256)", "03f10bff": "IDMONEY()", "03f11878": "casino(uint256,uint256)", +"03f123e7": "getLotNftMintRewards(uint32)", "03f14886": "add_new_hash(string)", "03f14be9": "updateEmployeeWallet(address,address,address)", "03f14e96": "currentAirdrop()", @@ -2316,71 +4195,139 @@ "03f17336": "BOPs(uint256)", "03f187ea": "registerFee()", "03f21bda": "privateOfferingTokens()", +"03f24814": "cakeswapPair()", +"03f257aa": "TRUSTEDADDRESSES(address)", +"03f2cd05": "exitTokenCollateral(address,address,uint256,uint256)", +"03f30b29": "syncActionEXR()", +"03f34010": "PERCENT_STEP1()", +"03f375a5": "stakingTimePassed()", +"03f38fa4": "ethereumTotoken(uint256)", "03f3b07f": "setUserScore(address,uint32)", "03f3cea1": "requiresHardCap()", "03f3e275": "getRatioList()", "03f3e7c8": "setICOWeek4Bonus(uint256)", "03f4864d": "XXXXXXXX05()", "03f499b8": "refundState()", +"03f5d28d": "_setAFIRate(uint256)", "03f6477d": "setBonusSetter(address,address)", "03f67e1b": "changelp2(address)", "03f73f08": "start_ICO2(uint256)", "03f744b0": "JessieEducationToken()", +"03f771ae": "EndStage(uint256,uint256)", "03f7d4ff": "BitpaintingStorage(uint8)", +"03f7e646": "newPayable()", "03f8008c": "getUserDAOsCount(address)", +"03f81e4b": "askForRegistration(uint256[2],bytes32)", +"03f860d9": "contractTemplateAddresses(uint256)", +"03f868f7": "getStakedAmount(address,address,address,bytes2)", +"03f96bf6": "revokeTokensByPurchaseId(uint256,bytes32)", "03f979c8": "saleEndTokenCreationRate()", "03f9b456": "LockupTokensWithdrawn()", "03f9c793": "invest(address)", +"03f9c795": "EthToFiatEvent(uint256,uint256,uint256)", +"03fa9729": "onAirdrop(address,uint256)", "03fad66e": "settokenCap(uint256)", +"03faecc1": "INX_TransferFrom(address,address,address,uint256)", "03fb3f63": "currentMigrationSource()", "03fba444": "_receiveBuyNextRank(address)", "03fce7ef": "approveEscrow(uint256)", "03fd8c65": "withdrawBalanceHashing(address,address,uint256)", +"03feb821": "_usdtBuySwitch(bool)", "03ff20a1": "crowdfundEndTime()", +"03ff4a55": "getTokenImbalanceData(address)", "03ff5e73": "stopTime()", +"03ff6018": "migrateMarkets(address,bool,address[])", "03ff8590": "random2(uint256,uint256)", "03ff90f6": "minApproval()", "03ffae3b": "FlightDelayDatabase(address)", +"03ffca71": "commissionDrawing()", +"03ffe79e": "getSellerBalance(uint256)", +"0400228d": "earlyPurchasedAmountBy(address)", +"04005044": "AdminlockWithdrawl()", +"0400bac4": "leffft()", +"040111dd": "changeFPDeployerAddress(address)", +"040141e5": "WETH_ADDRESS()", +"04017315": "devFundLastClaimed()", "040177b7": "previousDungeonId()", +"0401a199": "getLPTokenPerBnbUnit(uint256)", +"0401d512": "setManualCycle(int256)", "0401d897": "setVestingCliffDateTime(uint256)", "04021ba8": "_increaseBalance(address,uint256)", +"04024248": "scamSupply()", "04029f23": "_setBugFixVersion(string,uint32,bytes32,uint32)", +"0403669b": "set_retain(uint256)", +"040377b4": "setZZZV2andNAPV2address(address,address)", "040425d1": "protectedSupply()", +"0404c105": "DaoDefiJo()", +"0404d171": "mintSecondaryFromDeposit(address,uint256)", "040502e4": "EmmiumCoin()", "04053d21": "checkCourse(uint256)", "0405440c": "secureMode()", +"04058d19": "add_employee(uint64,address,uint256,uint256,uint256,address)", +"04061d8e": "getLendingPoolParametersProvider()", "040622a9": "UNITPaymentGatewayList()", +"04064f0a": "SC_AUTHORS()", "040677f1": "sentFirst()", "0406870c": "SupplyManagementChainSolutions()", +"04068ae2": "NUM_ORDERS()", "04072322": "GetEventData()", +"04073614": "approve_64(address,uint256)", "0407dc78": "medalBalanceOf(address)", +"040821fc": "testTransfer(uint256)", "04089c7d": "ALTnextCoin()", +"0408c216": "setMinDonCoin(uint256)", +"0409b157": "calcRPBFromPercentage(uint256)", +"040a4f42": "feeDiscounts(address)", "040a772e": "getUserDividends(address)", +"040aab82": "createCause(address,string,string)", +"040b4c30": "choice2ETHBet(address)", +"040b6583": "enableWhitelist(bool)", +"040b6c74": "setInitialNumberOfShares(uint256)", +"040ba625": "tradeLockSeconds(uint256)", +"040bbca6": "communityClaimed()", "040c014b": "_changeName(string)", "040c3a53": "maxRacers()", +"040cb859": "startDelay()", "040cf020": "withdraw(bytes32,uint256)", +"040d3494": "setLegacyTreasury(address)", +"040d3cb0": "set_min_amount_of_eth_transfer(uint256)", "040d54ce": "addFile(bytes32,string,uint256,string,string)", "040d5e82": "partialFlip(bytes32)", "040d70bd": "GetSeries0()", "040da8f4": "jackpotBalance()", +"040e1834": "exchangePynthsForSNXAtRate(uint256,uint256)", "040e33f0": "SHRToken()", "040e55f5": "getTransferCount()", +"040e5f85": "setStabilizingFee(uint256)", "040ea2f4": "ownerSetPriviledgedAddress(address)", "040f9a5e": "transferRemainingTokens(address)", "040fa051": "isPendingRegistration(address)", "04106c8b": "startGeneration()", +"0410808e": "totalFrozenTokenBalance()", "0410ec85": "randomReward(uint256[])", "0410fac7": "adminRemoveTrustedCurrencyContract(address)", "04115187": "initTime()", +"0411b252": "transfer(address,address,uint256,uint256)", "0411bca8": "getChallengeAnswerResult(uint256)", +"041256a0": "makeBuyOrder(address,uint256,uint256)", "041257ef": "setWhitelistControllerAddress(address)", "04126ce5": "getHashSubmissionEnd()", +"0412d390": "teacherName()", +"04133097": "AdmindlockStaking()", "04143865": "dec_multiple()", "04148f7e": "createGame(uint256,uint256,string,address)", +"0414916f": "feePercentMax()", +"0414be80": "entrySet(bytes32)", +"0414fe1f": "handlePointer(uint256,uint256)", "04150694": "airdropBSupply()", +"04150e8f": "getTradingInfo(uint64)", "04153ac9": "inflateActiveSupply(uint256)", "04155727": "dcntrpls(uint256,uint256,uint256,uint256,uint256,bool)", "04157752": "withdrawRed_(uint256,uint256)", +"041584e8": "trade(uint128[8],uint128[8],address[6],uint8[2],bytes32[4])", +"041593e3": "IsFinalized(uint256)", +"0415a732": "LogOraclizeQuery(string)", +"0415af81": "totalTokensVested()", "0415bd13": "create(uint256,uint256,int256,address)", "04165443": "gatherAllOldBalanceOf(address[])", "0416c10c": "_getBytes(address,bytes32)", @@ -2388,13 +4335,19 @@ "0418945a": "addStablecoin(address)", "0418ac09": "unFreezeTransfer()", "04194636": "bulkTokenSend(address[],uint256[])", +"0419548d": "uniswapPrice(address,uint256,uint256)", "04198675": "setHitPrice(uint256)", +"0419b45a": "withdrawAdminFees()", "0419c814": "isExistedOwner(address)", +"0419d0e4": "calculateLockAmountFor(address,uint256)", "0419eca5": "createChild(uint256)", +"041ab0b5": "setBidPeriod(uint64)", "041abd9f": "timestampEnd()", "041ae880": "funder()", "041b1406": "checkPoDs(address[])", "041b8c3e": "group(address,uint256)", +"041bacd2": "depoist()", +"041be19a": "extractTokenIfStuck(address,uint256)", "041c3ade": "punkIndexToAddress()", "041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", "041d15c9": "getPurchaseTimestamp(uint32)", @@ -2402,138 +4355,265 @@ "041dad49": "incrementpostId()", "041dd0f9": "ValueToken()", "041dd3f6": "testControlCreateWithParentsParentNotInUse()", +"041df8d1": "GetCurrentPriceForETH()", "041e3929": "getInvitationCreatedOn(address,uint256)", "041e6b8b": "rejectUpgrades()", +"041e7adb": "getLastDistributionTimestamp()", +"041f023d": "addPwdrReward(address,uint256)", "041f173f": "blacklist(address[])", "041fa8aa": "times9()", "041fe13d": "onEtherandomSeed(bytes32,bytes32)", +"04209f48": "yearn(address,address,uint256)", +"0420e39a": "withdrawFundReverse()", "04213a59": "setServiceDuration(uint256)", +"042140ac": "insuranceSum()", "0421a94c": "sendSpecialTasterPackage(address,uint256)", +"0421d7f2": "getQuoteLimitFor(address,uint256)", "042228db": "adminUpdateArrayInvite(uint256,uint256,address,address)", +"0422b3f9": "arquivoAtos(bytes32)", "0422ddf3": "isGamePaused()", +"042324b6": "getAgentId(address)", +"04238994": "getAllStakes(address)", +"04238ab2": "alternateReceiverBridge()", "04239743": "lastGrantedIndex()", +"0423a132": "bar(uint256)", +"0423c02c": "getLastInvestAddress()", "0424b6fe": "ContentChanged(bytes32,bytes32)", "0424d979": "removeDepositCreator(address)", +"04254b27": "areSubmissionsLocked()", "0425b5e9": "initialLockAddress(address)", "0425c357": "submitVote(uint256,bytes32,bytes)", "0425c4bf": "updateProduct(address,string,string,uint256,string,bool)", "0425ccba": "DoubleETH()", "0425e6ff": "SEXNTestToken()", +"0425f52f": "checkStateOfEmergency()", "04267892": "koth()", "04269bc2": "ICO_SUPPLY()", "0426c697": "changePayoutAddress(address)", +"0426cbc6": "userGetPendingTxByAddress(address)", "0426dcef": "unlockBalance(address,uint256)", +"0426e02a": "AccountListed(address,bool)", +"04272424": "genRatio()", "04275375": "MCToken()", +"04279ed9": "KLAN()", +"042803d2": "x_adminUpdateRouterAddress(address)", +"04288dba": "setClosed(bool)", "0428c6aa": "earlyBirds(uint256)", "0428ca27": "WalletAddressUpdated(address)", "04293236": "m_owner80()", +"04297477": "getDeviceByVendor(address)", +"0429a2f0": "bigPotFrequency()", +"0429ae46": "getBloclNumber()", "0429b880": "confirmationPeriod()", "0429b9ca": "totalEthAmount()", +"0429e372": "getInstructor(address)", +"042a2077": "redeemBond(uint256)", +"042ab9b3": "getTokenTemplate(uint256)", "042abdf8": "PRE_ICO_MIN_CAP()", "042ae62b": "killAborted()", "042b5fed": "placeBet(bytes32)", +"042b8f7d": "set_contract2address(address)", +"042bbe3a": "vaultDeposit(address,uint256)", "042c71f5": "DevsmartCoinFour()", "042cb150": "batchSend(uint256,address[])", +"042d5932": "dccusdtInitialBalance()", "042d65ab": "getTokenAwarded()", +"042da115": "setBanState(address,bool)", +"042e0688": "issueSynths(address,uint256)", +"042e1ac9": "registerMultiOwnableFunction(bytes4)", "042e58c8": "receiveResults(string,uint256)", +"042e67e0": "changeToPremium(uint256,uint256)", +"042e80a7": "milesimal()", "042e9a43": "propose(bytes32,string)", +"042eabff": "getAmountDue(bytes32)", +"042eb600": "_setTokenRegistrationMessageId(address,bytes32)", +"042ec6fd": "INDEX_BY_DURATION(uint256)", +"042f2b65": "fulfill(bytes32,bytes32)", "042f3b34": "DesafioStone()", +"042f8e6d": "neutralTokens(address)", +"042ff632": "purchaseMultiplier(uint256)", +"043004be": "getCustomersDepositsLength()", +"043014e7": "getDifficulty(address)", +"04302fe1": "startTheGame(bytes32,uint256,uint256)", "04304b55": "getUSDEth()", "04306d69": "MOOSToken()", "0430e405": "gameStopped()", +"0430fb4b": "bonuses(address)", "043106c0": "deleteAddressValue(bytes32)", "043122bb": "minimumParticipation()", "04318794": "giveTimeToDemoc(bytes32,uint256,bytes32)", +"0431d5d3": "setpro(bytes32,uint256,uint256)", "0431dd86": "TokenNedCoin(uint256,string,uint8,string)", +"0431e405": "isTokenLE(uint256)", +"04324af8": "minCompToSell()", +"0432c0a1": "addSubmissionManually(address[],string[],string[],string[])", "0432ff56": "START_WEEK_4()", "043331ee": "addOnCount()", +"0433462a": "engine2_index_winner()", "04336615": "hashLoop(uint256,bytes32)", "04338def": "maxAmountPreICO()", "04339140": "setCloneFeePercentage(uint256)", "04339582": "buyAndTransfer(uint256,address,address,bytes,uint8)", +"0433d1ce": "MetadataExpiryDate(uint256)", +"0433df85": "remainEther(address)", +"04342479": "IoT_to_Resource_Policy_Verification(uint256)", "04343722": "addUsers(address)", "0434a44d": "codeSize()", +"0434ccd2": "groupToPick()", "0434e5a6": "changeWalletForETH(address)", "0434fe0b": "heal()", "043531b1": "setFeeDivisor(uint256)", +"0435886f": "allEventStructs(address)", "0435a745": "stat()", +"04360d54": "eth_rate_uint()", "04362c2d": "getEsgoTXCount()", +"04368e6d": "buyTmr(address)", +"04369c63": "getLimitOfAction()", +"0436cab5": "getSubIDs(address,bool)", "043728b4": "initBet(bool)", "043753ba": "makeDecision(uint256,bool)", "043799e3": "inquire_domain_id(uint16,uint16)", +"04384b74": "checkSenderIs1()", +"04385610": "addMais(string,string)", "0438ebce": "getPlayerBetForPlayRound(address,uint256)", +"0438f8fe": "soak()", "043996c2": "setUseAmountBasedBonus(bool)", +"0439f51d": "UnPauseMinting()", "0439f7d4": "getProviderSupply(uint256,uint256,uint256)", +"043a3c07": "converterRegistry()", +"043a9761": "cancel_to_buy(uint256)", +"043ad469": "tokenUserLiq(address)", "043aea8b": "CrypthubtTokenTest()", +"043b524a": "icoCoinReceived(address)", "043b743f": "investor_getShortInfo(address)", "043bb5e7": "getIdentities(address[])", +"043bd50a": "setMaximumTolerance(uint256)", +"043c41d4": "MAX_UINT_MINUS_ONE()", "043c8816": "INM()", +"043cad13": "_unitsOnSupply()", "043cf01a": "addCourse(string,uint256,uint256,uint256,string)", "043cf343": "CreditIDENTITY(address)", "043d0258": "changePriceLimits(uint256,uint256)", +"043d520b": "MCWhitelistId()", "043d5f1a": "ENCSToken(uint256,string,uint8,string)", +"043d695f": "move(address,uint128)", "043d9aaa": "verifiersPerShard()", "043da739": "getNextBid()", +"043de8c0": "payDevidendsPerYears()", "043eabd0": "RUVI()", +"043f5e7b": "depositHashes(uint48)", +"043fa2fd": "calcAssets(uint256,uint256)", +"043fa39e": "addApprove(address[])", +"043fb511": "dailyInterest()", "0440187e": "hostingProfitAddress()", "04403b30": "TokenSaleSucceed()", +"04408fbd": "batchReject(address[],uint256[],uint256[],string)", "0440c8e4": "_unpackRarityValue(uint256)", "044166ec": "PollManagedFund(address,address,address,address,address,address,address,address,address[])", +"044190de": "showCoefs()", "044215c6": "token(uint256)", +"04424009": "buyNewMatrix(uint8)", +"0442545d": "getAddressOfTicketIssuer(uint256)", +"04426d70": "sponserCount()", +"04426db4": "getAmountForUserMining(address)", +"0442ad71": "getReceiversLength()", +"0442c1b8": "changeBerryContract(address)", "044337ca": "setPortfolio(address)", "04433bbc": "getContractAddress(string)", +"04436921": "approve_203(address,uint256)", +"04436d5e": "blocksPerTranche()", +"0443d299": "put4()", "044431f0": "setRefundEnabled(bool)", "0444c5db": "SSPRegistryReplaced(address,address)", "0445154c": "PRIVATESALE_USD_PER_MSENC()", "044553ae": "configureBoard(address)", "04455e95": "testIsList(bytes)", "04461f4d": "XaurumAmountMelted()", +"044641eb": "withdraw(address,uint8,uint256)", "0446e187": "buyDonation(address,uint8)", +"0446f8a3": "g9(uint256)", "04474181": "JixoCoin(uint256,string,uint8,string)", +"044794d4": "flagIfNotVerifiedStorage(address,bytes32)", +"0448b47b": "totalMibBUSD()", +"0448e51a": "auctionInfo(address)", "0448e936": "setSite(string)", "0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", +"0449015a": "redeem(uint256,uint256,bytes)", +"04491fa7": "repayLUSD(uint256,address,address)", "0449aa40": "allowedToBeSold()", +"044a0ca8": "getMemberProposalVote(address,uint256)", "044a3038": "_changeResolverAllowances(string,address[],uint256[])", "044a5f97": "mgmtDistribute()", +"044a9377": "setPublisherCut(uint256)", +"044ae227": "getNumContractsByOwner(address)", "044aed7c": "removeEmployee(address,uint256)", "044b1b02": "addProblem(string,string,string,string,string)", +"044b3e98": "isTheSkyGraey()", "044bf6c2": "getSpinnerData(address,uint256)", "044c1d4d": "clientVersion()", +"044c5769": "timestampOfPossibleExit(address)", "044c9366": "privateCrowdsale(address,uint256)", "044c96e4": "startGame(string,string)", +"044ca5d0": "submitUpdatePendingTime(uint256)", +"044cb613": "isMarketInitialized(address)", "044ce308": "refundBuyer(uint256,uint256)", "044d0b06": "oraclize_query(string,string[2])", +"044e1a64": "yarnPerBlock()", +"044e8fc6": "ToDo()", "044ec699": "get_mail(uint256)", "044f19bd": "InfiniteCorridor()", "044f53ee": "OPC(string,string,address)", "044f9ac8": "findThroneCalled(bytes)", +"044f9afe": "setEthPriceInCents(uint256)", +"0450608a": "mouse()", +"04506480": "PurchageToken()", "04509918": "scheduleCall(address)", +"0450a1cf": "MAXIMUM_ALLOCATION()", "04514185": "ShortBlog(string)", +"04515e2c": "schoolStudent(uint256)", "04517225": "transferlock()", +"0451f520": "balanceUnlocked(address)", "04520116": "centsPerEther()", +"0452107d": "amount(uint256,uint256,uint256,uint256)", +"04521be3": "getLastUSDBack()", "045236b4": "getChainyData(string)", "0452396c": "subtrInvestorBalance(address,uint256)", "04532035": "settleEth(address,uint32,uint32)", +"04535172": "sendThreshold(uint256)", "0453a7d2": "computeBonus()", +"0453cf89": "HNT()", +"0453d906": "getLoanDurationAndInterest()", "0453e3b1": "ITIX()", +"04546f1f": "ownerUpdateMinimumRentalPrice(uint256)", +"045492a0": "balanceOfFreeClaimAirDrop(address,address)", "04549d6f": "presaleStarted()", +"0454f8e6": "getEffectiveOverworkTax()", "04550e70": "MyTestToken2()", "04554443": "lockDuration()", +"04556da7": "hookupInsuranceToken(address)", "045585a4": "priceList(uint256)", +"04563409": "calcBuy(address,uint256)", "0456860a": "acceptAtCommunity(address,uint256)", "04571211": "setTokenReward(address,address,uint256)", +"04577562": "lastAttenuationBlock()", "04578f90": "JTC(uint256,string,string)", +"0457ab8c": "setStarttime(uint256)", "0457d76b": "Mesa(bytes32[],uint256,address)", "045820b3": "Player()", +"04587c1c": "FundingEvent(address,address,bytes32,address,uint256)", "045894ab": "getCreate()", "0458996a": "CBTSToken()", "04590a28": "EtherWithdrawn(uint256)", "04599012": "balanceToken(address)", +"0459bdf4": "approve_676(address,uint256)", +"0459e9c5": "voteForEvent(uint256)", "045a1796": "upgraderSet()", "045aceb9": "useResolver(string)", "045b1a0c": "isBreakingInvestorCap(address,uint256)", +"045b5cf8": "MATCHING_PERCENTS(uint256)", "045b7dca": "mintSupply()", "045b9c72": "START_TIME_PRESALE()", +"045c08d5": "oneInch()", "045c123a": "sponsorDAI(uint256,uint256)", "045c6ce0": "voteForProposal(uint256)", "045cc8ec": "_createZodiacWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", @@ -2543,87 +4623,151 @@ "045d4503": "TeamDeleted(uint256,uint256[])", "045d465f": "setDataFactory(address)", "045d46c2": "getBalances(address,address)", +"045d84ed": "isGoblin(address)", "045e240f": "getAvailableTokensToWithdraw()", "045e7dd7": "ContractEdited(string,address)", "045ea88a": "fishySalmonToken()", "045eb3b5": "expLimited(int128,int256,int256)", "045ec563": "rndInc_()", "045eea7d": "changeSelfName(string)", +"045f01dd": "HiddenMessages(address,address,bool)", "045f2593": "getRoot2(uint256)", "045f7850": "airDrop(address,uint256)", "045f8aad": "CONUNToken(uint256,string,uint8,string)", "045f91ea": "getCurrentWallet()", "045f955b": "buyPets(uint256,uint256)", +"045f9c97": "winnerAddresses(uint256)", +"045ff1bb": "stopRewardPool(uint256)", "045ff49a": "TIER2END()", +"04607ed4": "bscsStakingPool()", "0460b206": "Bxcoin()", "046111e9": "addVip(bytes32,string)", "04612d20": "minionAdd(address)", +"04619b98": "_userStakes(address,uint256)", "0461ac58": "dteamVaultAddr3()", +"04622c2e": "NAME_HASH()", +"0462e0f9": "BONUS_BASE_RATE()", +"046335d0": "canClaimReward(address)", +"04635cf1": "_vestedAmount()", +"04638711": "MINIMUM_SVIP_INVEST()", "04638e1a": "getBalanceOf(address,address,address)", "0463cd73": "getSuperManager()", "0463e4af": "releaseDividendsRights_(address,uint256)", +"046436c3": "maxMintTime()", "0464f4b2": "InitialPriceEnable()", "0464f8d0": "getCatsCount()", "04651a1e": "firstRoundICOEnd()", +"04655614": "getcontractpause()", "0465832e": "modifyTransFee(uint256)", "04658ad8": "NonIssueDeposits()", "04659819": "capUsd()", "0465a76d": "airdrop_cnt()", +"0465f072": "migrate(uint256,uint8,uint8)", +"04662427": "updateAll(bytes32[],address[])", +"0466281c": "dydxLoan(address,uint256,uint256[],address[])", "0466450e": "getUserByAddress(address,address)", +"04667005": "availableEtheralTest0Token()", "046672cc": "batchTransfer(bytes32[],uint64)", +"0466b27b": "badoichayduongdainhat()", "0466c7ab": "executeComputation()", "04670c9d": "nextStage(uint256,uint256)", "04673368": "getCurrentPrice(uint256,uint256)", "04676af4": "getCompte_7()", +"04678a3f": "migratorowner()", "0467c3ff": "ThirdBonus()", "04684ba3": "convertTokens(address,address,uint256,uint256)", "0469756a": "MintAuthority(int256,address)", "04699a72": "tipbot()", "0469d644": "storeSecretVote(bytes32,uint256)", +"046a360e": "getModelPoolRate(uint256,uint256)", "046a3d91": "distributePrizze(uint256)", "046ae3c2": "YourPyramid()", +"046b72c4": "setPoolManagerFeeNumerator(address,uint256)", +"046b90b6": "last_payed_id()", "046c472f": "IOU()", +"046c6307": "setupSniper(address)", "046c82e4": "GraceFund()", +"046c93c3": "hxyfApy()", +"046ccd56": "GetTimeNow()", +"046ccf1b": "_encode_bool(bool,uint256,bytes)", "046ce030": "isFactoryApproved(address)", "046d30c7": "_random(uint256)", "046d5c53": "setMintAmountApproval(address,address,uint256)", +"046d9368": "governanceT()", +"046da22c": "councilVoterNumber(string)", "046dc166": "setSignerAddress(address)", "046e85f9": "getLastPendingTransaction()", +"046ef2bf": "bulkSendToken(address,address[],uint256[])", +"046ef9a5": "claimPresale()", +"046f756a": "approve_231(address,uint256)", "046f7da2": "resume()", +"046fa5c9": "withdrawCrumbsUni(uint256)", +"046faf74": "rh()", +"046ff0d3": "checkRewards(address)", +"046ffefa": "requestRevision(uint256,uint256,string)", "04706fdf": "giveContributionsBackProfitBugged()", +"04707715": "CONTRACT_LP_SOIL_ERC20_TOKEN()", "047087cc": "getTotalTokenSupply()", "04710a23": "toSgaAmount(uint256)", "04719030": "manualSendTokens(address,uint256)", +"0471d28d": "peopleFund()", "04729a8d": "tokensToEthereumAtSupply_(uint256,uint256)", "0472a3bf": "doCrowdsaleMinting(address,uint256,uint256)", "0472f549": "ran()", "0472f72c": "_allocation(address,uint256)", +"04738f59": "checkPropertyIDOf(address)", +"0473dffe": "getWarsHouses(uint256,uint256)", "0473e09c": "setConfigUint(bytes,uint256)", "047408aa": "getAngelByIndex(address,uint256)", +"04741cde": "accABlockPerShareMultiple()", +"0474a68e": "bet(address)", "0474b484": "AllyICO()", "0474d4a4": "isInitialAllocated()", "04751333": "getRevForecast()", "047564b7": "revokeValidator(address)", +"04759f6c": "artIndexToOwner(uint256)", +"0475db5a": "getUnadjustedPosition(address,address)", +"04761396": "getAddressParameters(bytes8)", +"04763c42": "updateManagerFee(uint256)", +"04769930": "MAX_SYNC_GLOBAL()", +"04769a03": "send2User(address,uint256)", +"0476f4da": "totalRegisteredPairs()", +"047701e4": "migrate(address,address[])", "0477d647": "setSalary(uint256,uint256,uint256,uint256)", "04780570": "ERC223Token_STB()", +"047825c7": "getDisputeThresholdForDisputePacing()", +"0478510a": "BANK_FOR_ADVERTISING()", +"04786130": "solt2()", "04787d83": "winBidDekla(address,address,uint256,uint256)", "047956cf": "assign(address,uint256,bool)", +"04797930": "getBorrowAmountForDeposit(uint256,uint256,address)", +"0479bf4e": "updateUserSigningKey(address,address,address,address,uint256,bytes,bytes)", "0479fcd0": "setPopNameOriginal(uint256,string)", +"047a3a91": "claimBirdPlus(address,address[])", "047a7ef1": "transferrable()", "047a8dcb": "JetwingToken(address)", +"047acfaf": "isMarginSetup(address)", +"047b6b17": "getTokenBalanceOfAddrv1(address,address)", "047ba641": "LowerStartingPrice(uint256)", "047c738e": "wdivfloor(uint128,uint128)", +"047cfb9f": "setStaticConfig(uint256,address)", "047cfed9": "hasOwnership(uint256)", +"047d414d": "BuyToken(address,uint256,uint256,uint256)", "047d6649": "getUpdateByID(uint256)", +"047d928e": "depositeMaxAmount()", "047da93f": "testInvariantOverflow()", "047de1f3": "drawerFee()", +"047e0004": "addressDoctors()", "047e2b27": "setDataStorage(address)", +"047e4086": "withdrawBEP20(address)", "047f9651": "make(uint256,uint256[4])", "047f993d": "_vote(bytes32,uint8)", "047fc9aa": "supply()", "047fe8b3": "getUnsoldTokensBack()", "047febbe": "admin_renewLockedAddress(address,address,uint256)", +"04803501": "setPoolsForPairs(address[],address[],address[])", "04803c2a": "addSales(uint16,uint128,uint16,uint16,uint64,uint64,uint16,uint8)", +"048046c1": "file(address)", "04804ee8": "sell(string,uint256,uint256)", "0480c975": "setUnicornContract(address)", "0480e58b": "maximumSupply()", @@ -2631,10 +4775,18 @@ "0481559b": "getLockDataFromMerkleTree(bytes,uint256)", "04819507": "ICO_START4()", "0481cb1b": "tokensAlreadyClaimed(bytes32,address)", +"04822143": "GameStopInitiated(uint256)", "048259e6": "UTCToken()", +"0482a787": "commitTokens(uint256)", "0482cfa8": "investorDividends(address)", "04830ddd": "getVotersAt(uint256,uint256,uint256)", +"04836c4a": "buyCover(address,address,uint256,uint16,uint8,bytes)", "0483a7f6": "lockedBalances(address)", +"048450bd": "migrateBalance(address,uint256)", +"048460c9": "removeDefaultRestriction()", +"0484a22f": "getUserTickets(address)", +"0484b4f4": "saiFlip()", +"0484c728": "tokenETHPair()", "0484c7cf": "AppSupply(address,uint256)", "0485066e": "addReading(uint8,uint256,uint256)", "04858fef": "StartQuiz(string,string)", @@ -2643,73 +4795,136 @@ "0486529b": "boardMemberApply(uint256)", "04865327": "PlayerBet(address,uint256,uint256)", "04869083": "auctionCreated(uint256,address,uint128,uint128,uint64)", +"0486916d": "BEES_COUNT()", +"04870c9a": "rewardsCircle(uint256)", +"04872617": "canIssueFor(address,address)", "0487b7e9": "Unity3d()", "0487eed2": "restrictionsAllow(uint64,uint8)", +"0488411f": "userInitialLockinPeriod(address)", "0488781a": "teamOwnerOfPlayer(uint256)", +"048898b7": "totalInStakePool()", "0488dbfb": "getConfirmRefund(address,address,uint256)", +"0488e414": "getExecutableOrdersList()", +"0488f882": "setTMCPerBlock(uint256)", "048911a6": "createRandomZombie_ZOB_smallpack()", "048926ac": "updateMaxPhase1(uint256)", "04892c9f": "BASE_MIN_CONTRIBUTION()", +"04894174": "quaint()", +"04894412": "feeBasisPoints(address)", "048957d8": "sideBetPayToken(bytes32)", "048986ae": "activityCore()", "0489882e": "totalAdminsMapping()", +"0489cf6e": "wlStart()", "0489fa70": "removePermittedContracts(address[])", "048a5fed": "getSelfBalance()", +"048a94bc": "currentCatnipPulled()", +"048a9c45": "gy_a(uint256)", +"048ac199": "Issue(uint16,address,uint256)", "048ae1bb": "addAssetPartOwner(bytes32,address)", "048b0bcc": "addCustomerNReqACC(address,address,address)", "048b3918": "messageNumber()", +"048b5736": "_numeroGanador()", +"048b87ba": "liquidityPercentage()", "048bbc72": "CIR_SUPPLY()", "048c35ca": "debug_is_recipient()", +"048c9728": "getOvmTransaction(bytes32)", "048ca698": "trackTotalVolume(address,uint256,uint256)", "048cb8e0": "CarlosMatos()", "048cc4a2": "BurnToken(address,address,uint256)", +"048ce98c": "extractLiquidity()", "048cf8ed": "serviceDecreaseBalance(address,uint256)", +"048d886c": "clientRegistry()", +"048dc990": "pushBurnedTokens(address,uint256,uint256)", "048de56d": "setName(bytes2)", "048dec38": "changeMarketingAddress(address)", "048e2e94": "getAccountSize(address,uint256)", +"048e62ca": "moveToken(address,uint256,address)", "048e8c3a": "FidgetSpinner(uint256,uint256)", "048e927b": "Checked(string,bool,uint256,bool,uint256)", "048eb854": "_sortTopQuestions()", +"048ec101": "approve_310(address,uint256)", "048f06f2": "setRoot(uint256,bytes32)", +"048f413b": "SkinTransfer(address,address,uint256)", +"0490044d": "cleanEth()", "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)", +"04911e43": "FUNC_1FA224BF(uint256)", +"04918ca3": "checkIfCharityExpired()", +"0491bb7b": "base26Percent()", +"0491d81f": "mySteam(address)", "0491eda0": "isCertainProduct(uint256,address,uint256,uint256,uint256,bool)", "0492600e": "Issue(address,address,uint256,string)", "04937cf9": "DoremiXToken()", +"04938384": "getFivePercent(uint256)", +"0493e90d": "getRealEth()", "0494630f": "oraclize_query(uint256,string,string[4],uint256)", +"049476df": "changeBouncerAdmin(address)", "04950f45": "KWHForGas()", +"04951891": "claim(uint32)", +"04952631": "getKeep(uint256)", "049540c5": "structurePreIco(uint256)", +"0495bb9b": "sety(uint256)", "0495cad9": "motionPasses(uint256)", +"0495de50": "pairOfPid(address)", +"049641bd": "KYCLimit(address)", +"04967702": "childChainManagerAddress()", +"0496bd0b": "extraInfo(uint256,address,uint256)", "0496e9ae": "triggerRequireError()", "0496ee77": "checkPosition(address,uint256)", "049766a8": "CleariumToken()", +"04981a70": "Lock(uint256,address,uint256,uint256)", +"049842b1": "depositvSPYCounterVault(uint256)", "049878f3": "join(uint256)", "04990162": "newChain(address[])", +"0499123f": "assetValue(bytes32)", "04994883": "ustAddress()", "049948b0": "getMyGrapes()", "0499ed13": "TOKEN_PRICE_WEI()", "049a2dd1": "claimPartnerTokens()", +"049a3fd6": "toggleWhitelistStatus(address,bool)", +"049a8170": "proposeChangeUpgradingScheme(address,address,bytes32)", +"049aacfe": "automate()", +"049aae62": "StakeDestroyed(bytes32,address,uint256)", "049abf89": "queryUserContractCount(address)", "049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", "049b7852": "getElevations()", +"049c9279": "getLimitAdjustedDebtToCover(bytes32,address)", "049c9bf2": "addExchangeAccount(address)", "049cac16": "tokensUnvested()", "049cc8b1": "soldForSecond()", +"049ce525": "getNbrOfAllocations(address)", +"049d2515": "_idRewardPerWeightPaid(uint256)", +"049e4177": "limitValidatorsPerDelegator()", "049e63ee": "defaultClaimPercentage()", "049eb289": "submitBuyOrder(bytes32,uint256,uint256)", +"049efcbe": "TokenReservationConfirmation(address,uint256)", "049efcc7": "startReleasing()", +"049f7874": "updateOrderStatus(int256,string)", +"049f85b8": "getShipPrice()", "049fb520": "countTickets()", +"049ffdc7": "disperseOneToken(address,uint256,address[],uint256[])", +"04a01abe": "updateTenderStatusToDeployed(address)", +"04a06f68": "_cifiBalances(address)", "04a077a4": "MyPasswordHint()", "04a0c67e": "EagorNetwork()", +"04a0fb17": "FACTORY_ROLE()", +"04a153ab": "approvedOperator(address,address)", +"04a1548a": "transferOnlyGovernance(address,uint256)", "04a1c63c": "token_a_amount()", "04a1eb6b": "lastBlock_f16Hash_uint256()", +"04a20f09": "ORIGIN_ADDR()", "04a23be0": "isAddressInWhiteList(string,address)", +"04a2516d": "setReceiver(address,address[],uint256[])", "04a2b2c2": "testOwnerCanBreach()", +"04a2cdf4": "drawingPublishReceivers(uint256)", "04a2eaa5": "getTimeBonusPercent(uint256)", +"04a36722": "swapExactTokensAndAddLiquidity(address,address,uint256,uint256,address,uint256)", "04a3693c": "applyFee(address,uint256,uint256)", "04a373cc": "s20(bytes1)", +"04a373f8": "addBeneficiary(address[],uint256[])", +"04a377b8": "onReveal(uint256,address,uint256,uint256,uint256,uint256,uint256)", "04a3c21f": "maybeNewRound()", "04a3ddd2": "_addToValueHeld(address,uint256)", "04a48c27": "setActivityCoreAddress(address,address)", @@ -2717,79 +4932,171 @@ "04a4a0ec": "TOTAL_XB_TOKEN_FOR_PRE_SALE()", "04a4b776": "updateOpeningTime(uint256)", "04a5288a": "stepcode()", +"04a5618a": "decodeERC721AssetData(bytes)", "04a6021d": "getByTypeNameVersion(string,string,string)", +"04a624c6": "optionableBenefit()", +"04a67878": "approve_505(address,uint256)", +"04a683eb": "CONTRACT_GEGO_ERC721_TOKEN()", "04a7137e": "controlledMint(address,uint256)", "04a782ee": "addRecordByAdmin(bytes32,address,address,string,string)", "04a79e9a": "spendDeposit(address,address,uint256)", +"04a7b94c": "reassignOwner(address)", "04a7ca0e": "BonusUpdated(uint256)", "04a7ff18": "totalNum()", +"04a82897": "beginFarmingSeason(uint256)", "04a82adf": "privateReservedUFT()", "04a84938": "avaliableSupply()", +"04a86034": "getAUTOv2()", +"04a8964e": "riskFundAddress()", +"04a89e57": "setChef(address)", +"04a8c10f": "Userinfo()", +"04aa0801": "createTokenMapped(address)", +"04aa1fec": "sorts(uint256,uint256)", +"04ab22e5": "getTrancheBExchangeRate(uint256,uint256,bool)", +"04aba091": "getRatios(address[])", +"04aba910": "ChainLinkETHUSD()", +"04abc1fa": "PingPongGameName()", +"04abdef8": "recoveryKeyHash()", +"04abe44d": "uniETHHXP()", "04ac3b80": "addReceivedTrade(address,bytes32)", "04ac75b0": "withdrawMulti(uint256,address[])", "04aca4bc": "getClout(address)", +"04aca4be": "removeLiquidityInETH(address,uint256)", +"04ad965f": "withdraw_from_curve(uint256)", +"04adc2bd": "contractTransfer(uint256)", +"04ae930d": "BuyEvent(address,uint256,uint256,uint256,uint256,uint256)", +"04aed8ab": "getUserClaimedRewardByPID(uint256,address)", "04af7a20": "setDividendAndPayOut(uint32,uint32,uint32)", +"04af95b5": "setOpeartor(address)", +"04afb15b": "balancesForSacco(bytes32)", "04afd2ce": "Multisended(uint256,address)", +"04b00768": "resetClaimableBalance()", "04b02ed6": "times_()", "04b07a5e": "removeUpdater(address)", +"04b0bdb3": "claimJackpot(uint256,uint256,bytes32)", +"04b107a2": "getUserReferrals(address,uint256)", "04b1142c": "getGuessCount(address)", +"04b19581": "bry()", "04b1af75": "buy20()", +"04b1b0ca": "ascensionDivisor()", "04b1c6f0": "ICO_CAP()", +"04b1e9cf": "testCalculateInterestIndex_LargeInterest()", +"04b2116f": "purchaseData(address)", "04b2bf99": "stateControl()", "04b370ab": "icoOver4()", "04b43c5a": "withdrawZOB(uint256)", "04b47e21": "isSignedWithEnc(uint16)", +"04b4b8c5": "bountyHunter()", +"04b4c205": "financialDetailsHash()", "04b4e7e5": "awardsReservations()", +"04b51183": "addrHasInvested(address)", +"04b57191": "allow(address,uint8)", "04b5723d": "disableNewStakes()", +"04b59749": "setCpi(uint256)", "04b5b5b6": "pointToToken(uint256,address,uint256)", "04b64260": "tmpShuffleSeed(uint256,uint256)", +"04b64527": "liquidityAddedAt()", "04b65e74": "checkSTAGE()", +"04b65ef5": "_burndiv()", "04b69fa0": "jockeyNotForSale(uint256)", "04b6ae61": "failedVotingCount()", "04b6d39e": "_transferCroupier(address)", "04b70576": "resetAgent(address)", +"04b70770": "holders(string)", "04b7dcde": "hashData(string)", +"04b80002": "transferToPotofgold4Upline(address)", +"04b8c471": "changeAdminRole(address)", "04b8ca98": "MAYTotalSupply()", +"04b8d66c": "demandPayment(address,uint256,address)", +"04b92984": "DepositFarm(uint256,uint256)", "04b92b7d": "overdraftAllocation()", "04b94ec5": "MyToken30(uint256,string,string)", +"04baa00b": "kind()", "04badade": "get_hub_addr()", "04bb1e3d": "updateActive(uint256,bool)", "04bb754c": "TradeFinancing()", "04bb89d5": "saveNick(string)", "04bbc255": "isPricingStrategy()", +"04bc1afb": "getAllPrices(uint256)", +"04bc52f8": "foo(uint256,uint256)", +"04bccf7a": "lotteryPicker()", "04bd05d5": "getPeriodicalPnL()", +"04bd11e5": "updateDebtCacheValidity(bool)", "04bd85f0": "getCapTab(uint256)", +"04bd974a": "areaLength()", +"04bda17f": "getBucketNBPro(bytes32)", +"04be2716": "registerPayment(uint32,uint64,uint64,bytes,uint256,bytes32,bytes32,bytes32)", +"04be2b87": "mydeadline()", "04be2f50": "isInvalid()", +"04bf1117": "oneBond()", "04bf1ee2": "JtoA(uint256[3])", "04bf2a7f": "getScriptExecutor(bytes)", +"04bf8627": "clearTokens()", +"04bfb3f6": "sig(address)", +"04c00851": "setGlobalRewardTotalAmount(uint256)", +"04c02045": "dbBalance(address)", +"04c02c0e": "assetIntroducerProxy()", "04c07569": "getBlock(uint256)", "04c08fbd": "borrowFunds(uint256)", "04c181f5": "beneficiars(address)", +"04c2320b": "tokens(string)", +"04c271f6": "confirmPledge(uint256,string)", "04c2a0ae": "DonateToLosers()", "04c2a4a0": "computeKeyConstant(uint256)", +"04c2eafe": "setSashimiswapToken(address,bool)", +"04c3033f": "addNewAsset(string,string,uint8)", "04c313f4": "setAirdropGameInterface(address)", +"04c36551": "randomlog(address,uint16)", +"04c37447": "shabu()", +"04c3a8a3": "withdrawStakeAndInterest(uint256)", "04c402f4": "set(int256,int256)", "04c49f2c": "setFeePeriodDuration(uint256)", +"04c5cbab": "addTrade(string,uint256,string,string,string)", "04c64e25": "revealMyVote(address,bytes32,bytes32,uint256,uint256)", "04c6a9c5": "startIcoForOptionsHolders()", "04c6ff7c": "devTeamTokenAddress()", "04c76899": "sellerApprove(uint256,bytes)", "04c76af0": "withdrawAdmin()", +"04c783c2": "setTransientAssetOwner(address,uint256)", "04c80c3c": "TOKEN_HODL_6M()", +"04c814c3": "removeFDDurationAndInterest(uint256)", +"04c81eb2": "checkpointForMultiAndCall(uint256[],uint256[],uint256[],bytes,address,bytes)", "04c8384d": "trivialThreshold()", +"04c846e4": "getPooledTokens(address)", +"04c87b3d": "isAccreditedInvestor(address)", +"04c88e89": "minBnbLimit()", +"04c8a7b9": "_ReparameterizationProposal(string,uint256,bytes32,uint256,uint256)", +"04c8df85": "ORDER_SIGNATURE()", +"04c8e5e6": "add_score(uint256)", "04c97ada": "setThirdRoundPricing(uint256)", +"04c9805c": "AUTOMATIC_SERVICE_FEE()", "04c98a2a": "validatePurchase()", "04c98b2b": "startPresale()", +"04c9d8e4": "EventInputPaymentReceived(address,uint256)", +"04ca0680": "vaults_earn()", "04ca2775": "saleActive(uint256)", "04caa6dd": "pauseReason()", +"04caad10": "airTransfer(address[],address,address)", "04cb17ad": "returnPeriodExpired()", +"04cb6d1f": "getSignatureNoId(address,uint256,uint256,uint256,bytes)", +"04cbb139": "BookingCanceled(string,uint256[],uint256,address,bytes32)", "04cbc791": "getSellerOption()", +"04cc26ee": "CONTRACT_USER_POINTS()", +"04cc3118": "gradeOneCount()", "04cc734b": "VoxelTransferred(address,uint8,uint8,uint8)", "04ccf60e": "WrapperLockEth(string,string,uint256,address)", "04cd1819": "disableVoting()", +"04cd4fda": "buyStarsFromAdmin(uint256)", "04cd5294": "getRefundAmount(uint256)", +"04cdb776": "CarAdded(uint256,uint256)", "04ce1a61": "tokensWithdrawal(address,uint256)", +"04ce89ba": "initateAaveFlashLoan(address,uint256)", +"04ceaf41": "getSmartTokens()", +"04cef778": "multiSignForDelegate(address)", "04cf447d": "estimatesellvalue(uint256)", +"04cf8682": "getSellBurn(uint256)", +"04d00d21": "burnParktoken(uint256)", +"04d08347": "removeGameLiqudity()", "04d092c7": "claimPoints()", "04d0a647": "getWallet(address)", "04d0ac48": "tokensPending()", @@ -2797,68 +5104,127 @@ "04d0fefe": "HoneyPot()", "04d10f1c": "isValidChainyJson(string)", "04d1290b": "getAlamat()", +"04d152eb": "keepBAS()", "04d16482": "strConcat4(string,string,string,string)", +"04d17031": "sdfgtbrth2()", "04d1809c": "validateJoinSplit()", "04d1b108": "_computeOwnerCut(uint128)", +"04d245a0": "transferC(address,uint256)", "04d2cdbf": "setAcceptable(address)", "04d2dec6": "getWalletAddress()", "04d332a2": "setRefereeRewards(uint256[])", +"04d3c094": "hashString()", "04d41474": "totalNormalContributorIdsAllocated()", +"04d420ea": "withdrawOn()", +"04d4415e": "upgradeContract(address[],uint256[],uint256)", +"04d506c1": "_getUSDPCurPriceOfLUCAX()", "04d58b3f": "MrwToken()", "04d5c2c5": "toEGR(uint256)", +"04d5e991": "pendingRam(uint256,address)", +"04d63089": "changeSystemAddress(address)", +"04d6728a": "AddTeamBonusBalance(address,uint256)", +"04d681ab": "maximumDailyFee()", "04d6878f": "closeMicroWallet(uint256)", "04d68a2b": "transferMoreThanBalanceTest(address)", "04d69a11": "SoldToken(address,uint256,bytes32)", "04d6db05": "startSale(address,uint256,uint256,uint256,uint256)", "04d742dc": "startSale(uint256,uint256,uint256)", +"04d745bb": "setFeeder(address)", +"04d7aef2": "adm()", +"04d7f182": "PassportAccts(uint256)", +"04d8063d": "totalGainToWithdraw(address)", "04d84108": "SWAP()", "04d88bce": "DDJETH()", +"04d88db5": "getEarlyWithdrawal()", +"04d88e08": "_decode_sol_bytes14(uint256,bytes)", "04d91c6a": "testFail()", +"04dab996": "deputeBoss5(address)", +"04dad983": "getAirDropByInvitation(address)", +"04db1518": "trueDistributor()", +"04db31b3": "setSwapCost(uint256)", +"04db6e68": "changeRouterAddress(address)", +"04dba622": "OwnershipTransferred(address)", "04dbd2d3": "LogInvestorProfit(address,uint256)", +"04dbd403": "activeRoomNumber()", +"04dbd66e": "updateMinStakeDurationDays(uint256)", +"04dc53f7": "custodian(uint256)", +"04dc96eb": "retreiveTime()", "04dcad85": "testDifferentTokenPrice()", "04dcc44a": "getTip(address,bytes32)", "04dd2dea": "getCardDivShare(uint256)", +"04dd5212": "balancerToPi(address,address)", "04dd69fa": "getGenerationIdForCall(address)", "04de40ea": "AnnoToken()", +"04de5a73": "getRedeemExactBassetsOutput(address[],uint256[])", "04de76cf": "VisualChain()", +"04de8ba9": "approval_burn_from(address,uint256)", "04deaeb5": "retrieveEth(uint256,address)", +"04deb07e": "REWARD_LOCKED_PERIOD()", "04dee65f": "contractBatchTransfer(address[],uint256[])", +"04dee89f": "updateProtocolRewardTokens(address)", "04def102": "getRemainReleaseTimeOfStage(address,uint256)", +"04df017d": "removeBridge(address)", "04df0a1d": "kudosByMember()", "04df48ef": "ICO_LEVEL_4()", +"04df7a62": "usdtAlreadyWithdraw(address)", "04dfe14e": "LandmarkCoinTestF()", +"04dffe94": "usedNoncePosition(address,uint256)", "04e15de5": "issues(uint256)", "04e1805a": "setFreezeForAngel(uint256,address,uint256)", "04e1826c": "getNumTransactions(address,address,uint256)", +"04e1a786": "hatcheryFranklin(address)", "04e262b8": "wlStartBlock()", +"04e37e57": "readings(address)", +"04e4a07c": "poolTransferred(uint256)", +"04e4c741": "manualWithdrawTokens(address,uint256)", "04e5a069": "registerUBetCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", +"04e5a43b": "mintWithTokenURIop(address,uint256,string)", "04e639b6": "fetchSlot(uint256,uint256)", "04e6a9a1": "teamLock(address,uint256)", +"04e6ad19": "permissionCounts(address)", "04e6adf8": "serHoldTime(address,address,uint256)", "04e75fda": "Contribution(uint256,address)", "04e78a30": "stakingMintAmount()", +"04e799bd": "refund(uint8)", "04e7dfcf": "getAssetRaised(address)", "04e80e90": "getMasterCopy()", +"04e8389f": "futuresLiquidationFee()", +"04e867dc": "updateMeloettaPerBlock(uint256)", "04e86e15": "calctime(uint256)", "04e88f2d": "SayaToken(uint256)", +"04e8ceab": "giveQue(address,string)", +"04e9048e": "getOutTokenBalance()", +"04e95e91": "deposit_fee_ratio()", +"04e960d7": "validateSignature(bytes32,uint256[2],uint256[2])", "04e98568": "withdrawBalanceCut(uint256)", "04ea23bf": "FLUXBlockToken()", "04ea4a57": "getDisputedPayoutDistributionHash()", +"04ea97b0": "setLatestAnswer(int256)", "04eab1e1": "gvpe_per_Keos()", +"04eb580c": "quality(bytes,bytes,uint256,bytes32,bytes32)", "04eb7d83": "setFirstPeriodEndDate(uint256)", "04ebb1d9": "commonWithdraw(address,address,uint256,uint256)", "04ebfc52": "userCount_()", "04ec70a7": "determineAttackingOrDefendingOutcomeForAttributes(uint256,uint256,uint256,uint256,uint256)", "04ecdaac": "rateSecondRound()", +"04ecffeb": "getRewardDistributedIndex(address)", "04ed02f6": "getCards(uint256)", +"04ed1655": "round2ClosingTime()", "04ed3f6a": "canStartSale2()", +"04ed604e": "approve_643(address,uint256)", "04ed6fbc": "minCDTToParticipate()", "04edad4d": "YouLose(address,uint256)", +"04edc6fb": "setTheForceToken(address)", +"04ee27c6": "_claimStakeCommission(uint256,address)", "04ee54d2": "revokeInitiator(address)", "04ee9748": "storeWinnerShare()", +"04eec3bd": "BCStakingProxyAddr()", "04ef1353": "setTokenWithoutFee(address,bool)", "04ef161b": "findSeed(address)", +"04ef898d": "registryId()", "04efa227": "feeMakeExporter()", +"04efca8e": "withdrawClose(uint256)", +"04f005d6": "getPreSoldier(uint256)", "04f016c9": "transferMulti(address[],uint256)", "04f03b6a": "getSomeVar()", "04f041b5": "BtcEthRateChange(uint256)", @@ -2870,65 +5236,118 @@ "04f14090": "setBlacklist(address,bool,string)", "04f17b11": "PriceChanged(uint256,address)", "04f182f4": "icoPhase1End()", +"04f1dc4c": "CancelVote(uint256,uint256)", "04f1e4e2": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", "04f24897": "PlanetagroExchange(address)", +"04f2f88d": "last_mint_time()", +"04f3051e": "_setBirdPlusRate(uint256)", "04f30b37": "getFutureTransIdxByAddress(address)", "04f31a47": "confirmICOSpec()", "04f342f6": "_addToAging(address,address,uint256,uint256)", +"04f3455c": "sendEthAmountToWallet(uint256,address)", +"04f36f59": "timedState()", +"04f3832a": "lockPerBlock()", "04f3bcec": "resolver()", +"04f468a7": "mainAddr()", +"04f46aae": "isCurrentPhaseAllowed(address)", "04f49a3a": "addressStorage(bytes32)", "04f4d425": "toEthFunction()", "04f4f7ab": "KYRO()", "04f5222c": "setEthMinContribution(uint256)", +"04f52871": "getSymbolsDetailsAndSTData(string[])", "04f53231": "SendEth()", +"04f55d12": "finishedWithdrawalBlock()", +"04f5c2a2": "tcontributed()", "04f65288": "AK47Coin()", "04f65590": "preSaleWeiRaised()", "04f68d49": "dataSourceGetFinals()", +"04f696bc": "submitTransactionToken(address,address,string,string,uint8[],bytes32[],bytes32[],uint256)", "04f6aa30": "forwardETHtoSTCcontract(uint256)", +"04f6d646": "getRefInfo(address)", +"04f6dacf": "STAKER_ADMIN_ROLE()", +"04f6e19c": "enableDistributeRepayBorrowWpc()", "04f74b59": "make(address[],uint256[],address,bool)", +"04f79da8": "enableDistributeMintWpc()", "04f7a69d": "baseSummonPrice()", +"04f7c749": "commitTimelock()", "04f7e87c": "issueBounty(address,uint256)", "04f80977": "setBattleContract(address,address)", "04f88d71": "testFailHardLimit()", "04f8aa9b": "IoTeXNetwork(uint256)", +"04f8bcdf": "mythicTradable(uint16)", "04f92405": "icoTokensLeft()", "04f9d030": "test_interface_call()", "04fad28d": "instanceId()", +"04fae9cf": "UniSwapMKRContract()", +"04fb0b16": "UpdaterTransferred(address,address)", +"04fb14d3": "hadDispute(uint256)", +"04fb3344": "getAllUsers(uint256)", "04fb82cc": "_deliverTokens(address,uint256,uint256,uint256,address)", "04fb9e81": "closeRequested()", "04fc11d5": "getActual()", "04fc7c6d": "updateJoinedCrowdsalesMultiple(address[])", "04fcadf1": "totalZTHWagered()", +"04fcbe0e": "lpStakingIncomeWeight(address)", "04fd295c": "WOLF2()", "04fd9f78": "variationsOfOwner(address)", "04fda0d8": "_trade(address,uint256,address,uint256,address,uint256,bytes32)", +"04fe1e8d": "abiencodePackedStringLiteral()", +"04fe2b34": "createTask(string,uint256)", "04fe947c": "mapToNewRange(uint256,uint256,uint256)", +"04fed917": "buyCountOf(address)", +"04ff7d3f": "pendingPrintMap(bytes32)", +"04ffb580": "claimStakeTokens()", "04ffb5b9": "registerToken(address,string,string,uint256)", +"04ffb84c": "_withdrawalPublisher()", "05009f0a": "_createBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", "0500de3e": "interestResolution(uint8,uint8,uint8,bool)", "0500fe3e": "getRegionCurrentPixelPrice(uint256)", "05010105": "stakeRequired()", +"050150d9": "deposit_cETH_beta(uint256)", "05015e79": "coldAdmin()", +"0501710f": "_mimi3()", "05018d91": "objectPants()", +"05018ee7": "_recentFeePeriodsStorage(uint256)", "0501b79f": "getBlocktime()", "0501d556": "setEmergency(bool)", "05021ce9": "_trade(address,uint256,address,uint256,address,uint256)", "050225ea": "giveaway(address,uint256)", +"05024fff": "totalMar()", "05026317": "bitcoinSaleRate()", +"0502697f": "changeSale(uint256)", "0502ca6b": "addTime(uint256)", +"0502cddc": "debtAuctionBidSize()", "050394ec": "minGasPriceForDrawing()", "0503a3bb": "transferCharity(address)", +"050408b1": "burnLeftover()", +"050412bb": "withdraw8()", "050414bb": "addWhitelist(address[],uint256[])", +"050493c3": "deed5()", +"0504a20d": "AccessDenied(address)", +"0504a298": "reserveWiseWithToken(address,uint256,uint8[],address)", +"0504c814": "payoutNumerators(bytes32,uint256)", "0505140c": "totalSupplyWithDecimals()", +"05053eef": "nextminTickets()", +"0505c8c9": "policy()", +"0505dad0": "Useramount()", +"0505e94d": "setRoute(address,address)", "05062247": "blocknumber()", "050642f2": "exchangeTokenRate()", "0506689a": "omegaPerEther()", +"05069afd": "renderTop25()", +"05075d6e": "getReserveIsActive(address)", +"0507fea1": "get_retain()", +"05085ad8": "addAvailable(uint256)", "050895ff": "backEndOperator()", "0508ed90": "contribute(uint256,address,address,uint256)", "050906ea": "_computeDamage(uint256,uint256,uint8)", +"0509732a": "updateTokenTimestamp(address,string,uint64)", +"0509fe28": "tempPlayer(uint256)", +"050a17b7": "ListAddress(address,uint256,uint256)", "050a2eb4": "diceRollAddress()", "050a3250": "ArithLib()", "050b8c66": "drainStrayTokens(address,uint256)", +"050bcdef": "sendMessageToL2(bytes)", "050c09ee": "founderWithdraw(uint256)", "050c0fd6": "AmmbrToken()", "050c8803": "getAmountFida(uint256)", @@ -2936,9 +5355,14 @@ "050d6a15": "setSellPrice()", "050df9f7": "PoolJoined(uint8,address,uint256,uint256)", "050e25a0": "getHash(address,uint256,address,uint256,uint256,uint256)", +"050e5eac": "mkrActive()", +"050eab57": "getExtData()", "050eb8c0": "BuyableCourt(address[],uint256[])", +"050f1f0b": "UNICORE_Reactor_Token()", "050f2f3e": "updateBools(bytes32[],bool[])", +"05105b56": "mems_sc(address)", "051064c6": "lighthouseFee()", +"051080ef": "RecordedPendingTransaction(address,address,uint256,uint256,address,uint256)", "051097ef": "addProposal(uint256,string)", "0510e186": "getSncTokenAddress()", "05111c1e": "getItemHolder(uint256)", @@ -2946,153 +5370,305 @@ "05117e0d": "validateTokenPurchase(address,int256[],int256[])", "0511a431": "addOns(uint16)", "05120ba6": "getTokensReleased()", +"05121bd3": "oracleGasLimit()", +"05122371": "techReleaseByDay()", "05128716": "sale(string)", +"05132b1a": "canPerformChallenge(uint256,address)", "0513fc8b": "onBurn(uint256)", "0514be3b": "ownedTemplates()", "0514c275": "REALPlaceHolder(address,address,address)", +"0514e665": "updateGracePeriodInSeconds(uint256)", +"0514f647": "unstakeLP(address[])", +"0515f7ba": "attest(string,string,string)", "05160860": "initialDayWithdrawCount(uint256)", +"0516666e": "getERC20Available(address,address)", +"05166eff": "setMmToken(address)", "0516af06": "getMonsterId(uint256)", +"0516b180": "openEnvelope(uint256)", "0516c9f0": "frozenToken(address,uint256)", +"05172311": "getPriceXAU()", "0517431e": "_teamSupply()", "05175786": "announceWinnerManually(uint256)", "051847d5": "childTokenByIndex(address,uint256,uint256)", "0518afdc": "tokenToReward(uint256)", +"0518b466": "_feesCollector()", "0519adad": "largestLoaner()", "0519b873": "heroLottery()", "0519bb83": "getVoteStatus(uint256)", "0519ce79": "cfoAddress()", "051a2664": "nameOf(uint256)", +"051a34f2": "allowXIO()", +"051a4861": "numBC()", "051a65dd": "deal_cancel_rate()", "051a86cc": "mintApprove(uint256,int256)", +"051aa4b1": "getRaffleUserTicketBalance(uint256,address)", +"051af15d": "minEther()", "051b044f": "_sell(uint256,address)", "051b4e6c": "getSurveyInfo(bytes32)", +"051b5621": "boosterOf(uint256)", "051ba270": "getLogCancelArguments()", "051c4ab6": "AddPlayer(uint8,address)", +"051c6c58": "ForeignBuy(address,uint256,string)", "051c8a8d": "tradeUserAsset(address,address,address,address,uint256,uint256,uint256)", "051cb630": "mintRandomCards(address,uint8,uint8)", "051d9955": "confirmCustodianChangeProxy(bytes32)", +"051e04d7": "DEFAULT_ISSURANCE_AMOUNT()", "051e5c45": "fiatPerEth()", +"051eed78": "cappedBuyerList(address)", +"051f25e3": "v1Reward()", +"051f3981": "checkOfferBlockMining(uint256)", +"051f403f": "isUniverseBalance()", "051f4f6f": "transferAll()", +"051fd584": "globalcull()", "05204231": "setPermission(address,address,uint8)", +"05204e0e": "userAccounts()", +"0520a77c": "p5(uint256)", +"0520b81f": "initBalances(address[])", +"0520db11": "mFILAddress()", +"0520e491": "getSumElements32()", "0520ed4a": "LYT(uint256,string,string)", +"0520f6a0": "totalFORKContributed()", +"05211de8": "getReservedAddr()", "05215b2f": "createStandardToken(uint256)", +"05215ca2": "pendingPlume(uint256,address)", +"0521914f": "swapTokenContract(address,address)", +"05221575": "last_deploy()", "0522345a": "blackListFreezeTime()", "052369a6": "submitLocation(uint256,uint8)", "052424f5": "recordPromoterBonus(address,uint256)", +"0524adbe": "g_givers(address)", "052534e7": "VerificationEvent(address,address,uint32)", +"05259891": "increaseCirculation(uint256)", "0525ca77": "packParams(address,uint16,uint32)", +"0525d7a7": "StartGame(address)", +"052613a8": "getErc20Addr()", "0526179e": "getSoilTempControlLimits(bytes32)", "05261aea": "finalize(uint256)", +"0526679c": "pauseDuration()", +"05268cff": "govToken()", +"0526d4c0": "approve_718(address,uint256)", +"05271f9e": "cCap()", +"0527c8e7": "cancelApprove(address,uint256,bool,bool)", "0527da64": "_openGamePlayNos(uint256[])", +"0528517f": "issueInvoice(string,string,string)", "0528bb57": "isSubscriptionProduct(uint256)", +"05293137": "notBeforeBlock()", +"05293efc": "GetCampaignStatus(uint24)", +"052950fc": "poof2()", "05297781": "MintToken(uint256)", "05298d37": "setWhiteListERC20(address)", "0529be17": "circulateTokensForSale(uint256)", "0529de04": "getCertificateExpires()", "052a076f": "disablePresale(bool)", "052a6849": "tokenStartPrice()", +"052a697a": "POP1(uint256)", "052a829c": "notSoldTokens()", "052ab49c": "bytesToUint1(bytes)", +"052ae933": "getTickLiquidityVars(int24,int24)", +"052b143b": "IncompleteFillErrorSelector()", "052b2aa7": "getRegistrants()", "052b81c7": "releaseBadges()", +"052c30bc": "lockedLiquidityAmount()", "052ca699": "end_()", +"052cfa4b": "brpt()", +"052d2579": "ClaimBonus()", "052d5707": "JYToken()", "052d9e7e": "setWhitelistEnabled(bool)", +"052da9db": "checkUserCollatteralExternal(address,uint256)", +"052dc714": "changePropertyValuation(address,uint256)", +"052dd94e": "getAirdrop(uint256)", "052deec5": "investorsIter(uint256)", +"052e3bce": "bullishBaseAssetAllocation()", "052f1a7a": "BGXToken()", +"052f6283": "crowdPrice(uint256)", "052f6557": "setExtraLimit(uint256)", "052f72d7": "getIsGlobalOperator(address)", "052f7d11": "freezeAccountSend(address,bool)", +"05300b28": "priceDecimals()", "053011b7": "authenticate(uint256,uint256,uint256)", +"05305829": "g_fillArgs()", +"05308b9f": "closeFactor()", +"0530a780": "_validConversionFee(uint32)", "0530abf0": "SwingTradeToken()", +"053118b5": "_removeLiquidationEntry(address)", +"0531b2ad": "CDAI_ADDRESS()", +"053273d9": "endPresaleEvent()", "0533073c": "publishingOwner()", "0533f57b": "RAISED_AMOUNT()", +"0534758d": "_getAgreement()", "0534ab04": "setCapsMerkleRoot(bytes32)", +"0534e74e": "poolFeeInBips()", "0535020d": "payTokens(uint256)", "05354bed": "etherPricesAreClose(uint256,uint256)", +"053571e1": "medianizer()", "05357c69": "isAssigned(uint256,address)", "0535ec77": "initialDistributionDone()", +"0536142c": "transferFrom_u(address,address,address,uint256)", +"053658ec": "buyvalue()", "05365bb0": "presale1()", +"0536fbe9": "transferRMPLOwner(address)", "0537665d": "setOutcome()", +"0537fd7b": "citiesCountries(uint256)", +"05381112": "pendingTMCForTamag(uint256,address,uint256)", +"0538c58d": "participatedAddressLength()", "053902f6": "DTCC_ILOW_4()", "0539272a": "startDay()", +"05393262": "cachedDebt()", "05398302": "destroyFrom(address)", "05398d45": "setNewMiner(address)", "0539c6d6": "num_squares()", +"0539dee8": "isEqualLength(uint256[],uint256[])", "0539eba9": "setAllowBuying(bool)", +"053ab182": "reflect(uint256)", "053abd3c": "createShareToken(uint8)", "053ae2ca": "getHairColorValue(uint256)", "053b8d2f": "deleteBackgroundImage(uint256)", "053c351b": "oraclize_getPrice(string)", "053c5d59": "e_Purchase(address,uint256)", +"053cbdec": "TransferEvent(address,address,uint256,bytes)", +"053d1aad": "isCapTableLocked()", +"053d4679": "changeBasetokenUri(string)", "053db3a9": "testSetPresaleTokens()", +"053db7c0": "AllowStart(bool)", +"053dffd6": "block_gap()", "053e3169": "openSaleStartTime()", "053e3253": "window3EndTime()", "053e71a6": "getTotalNumberOfTokensForWinningOption(uint256)", "053f14da": "lastPrice()", "053f598a": "policyActiveNum()", "053f7492": "minimumPriceInDailyAuction()", +"053f9040": "buyBack(uint256)", +"053ff9ee": "receiveReward(address,uint256)", "05401284": "debundle(uint256,address,address)", +"05404a6f": "setNumsStructPayable(uint256)", +"0540cd92": "LogLoanClosed(address,address,address,bool,bytes32)", "0541b0f8": "acceptPayment(bytes8)", +"0542061e": "updateQualityLevel()", +"05424669": "changeOwner(uint8,address)", +"0542631b": "userWithdraw(address)", +"0542975c": "ADDRESSES_PROVIDER()", "0542b61b": "snt_claimed()", "05433a26": "GetNumbersFromHash(bytes)", "054348d6": "icoIsOver()", +"0543982b": "sell(bool,address,address,uint256,uint256,uint256,address,uint256)", +"05441afe": "_posts(uint256)", +"05441d09": "swapWUsd(uint256)", "0544587f": "getCRYPTON_CUT()", +"05447d25": "getDepositorsList(uint256,uint256)", +"0544ce5e": "allPlayers(uint256)", +"05454616": "commitAndPersistEncryptedVote(bytes32,uint256,bytes32,bytes)", "054550f3": "assertEq8(bytes8,bytes8,bytes32)", "05459f42": "WeeklyLotteryB(address)", "0545a03b": "getGroupManagement(uint256)", +"0545c0bb": "MinedBalancesUnlocked(address,uint256)", "0545f8ba": "changeExchangeAdmin(address)", "054604a2": "miniToken()", +"054611c5": "secondBoardRoomFundSharedPercent()", "05468c26": "addToBond(address,uint256)", "0546a746": "restrictedTokensOf(address)", +"0547104d": "getHarvestable()", "054726cb": "MNTOKEN()", "0547bf4d": "DEFROST_MONTHLY_PERCENT_OWNER()", +"05487a68": "withdrawBoosterAndAutoPoolGain(uint32,uint8)", +"0548e5a2": "setContributor(address,bool,uint16,uint16,address)", +"0548fb2f": "SEED_AMOUNT()", "054909aa": "_addNewOwnerHoldingsToToken(address,uint256,uint256)", +"0549d9c3": "_removeManufacturer(address)", "0549f150": "getAdministrator(address)", "054a8c02": "getGirl(uint256)", "054a9f11": "shopGloves()", +"054ab01a": "getHatByAddress(address)", +"054ac133": "frang(uint8,uint256)", +"054ae3f3": "getBCCountByCardName(string)", +"054b2771": "m_Referer_Info_Address()", "054ba658": "delete_key(uint256,uint256)", "054baaf2": "jan()", "054be0b7": "setIssuanceRatio(uint256)", +"054c0af8": "readAllBalances(address)", +"054c1a75": "get1()", "054c3c71": "getBetsOnTimestamp(uint256)", +"054c5409": "transferReddo(address,address,uint256)", +"054cacaf": "isValidBeneficiary(address)", "054d2a7e": "ChuCunLingAIGO(uint256,string,uint8,string)", +"054d50d4": "getAmountOut(uint256,uint256,uint256)", "054dcbb5": "AdvisorsTokensHolder(address,address,address)", "054ded2b": "registrazione_candidato(string)", "054e9507": "lastEventId()", +"054ea7d1": "transferLockBatch(address[],uint256[])", +"054ec364": "setFaucetContractAddress(address)", "054f268e": "getDCategoriesN(bytes32)", "054f381b": "entrepreneur()", +"054f505a": "setTradeFeeRatio(uint32)", "054f7d9c": "frozen()", +"054fbb84": "updateTimelockStatus(address,address)", "054fce82": "ZipperWithdrawalRight(address)", +"054ff08b": "mint_dts(uint32)", +"054ffab6": "getTotalMoney()", +"054ffd32": "pairIdentifier(address,address)", "05502a62": "BONUS_PRESALE()", +"05503763": "isItemTokenSupported(address)", +"0550b266": "stopStaking()", "0550f92f": "setMintAddress(int256,address)", "05514a3e": "winBonusArray(uint256)", +"0551a7e8": "updateTraderOperators(address)", +"0551e25e": "socialistMode()", +"055227a1": "setPath(address,address,address[])", +"055273c9": "approveAddr(address)", +"05528715": "changeLoserMultiplier(uint256)", "05529d94": "addMultipleParticipants(address[])", +"0552a3e2": "lastProposeStartBlock()", "0552ce3e": "MonthToken()", +"0553260a": "Donate(address,uint256)", +"0553286b": "startSyncSnapshot(uint32)", "05533ce1": "setSettings(address,uint256)", +"055365c8": "internalFn()", +"0553701a": "RemoveSonmValidator(address)", "0553b805": "transferStorage(address)", "0553e156": "finalize(address,uint256)", "0553fd5b": "incSupply(uint256)", "05540534": "setMultisigAddress(address)", +"05543091": "usageFeeAddress()", +"0554b784": "ReserveParamsSet(address,address,address,address,address,uint256)", "0554bb48": "depositToLock(bytes32)", +"0555381f": "LogFinishRoundC(address,address,address,address)", +"0555c5e2": "initialValidatorStake(uint256)", +"0555e291": "TokenSaleClosed()", "0556369e": "tokenToReserve()", "055680f0": "purchaseCounter()", "0556a66f": "deliverPresale(address,uint256)", "0556fcd0": "setIcoFinish(uint256)", +"05572969": "rollback(address,address)", +"05579450": "identityKeyIsRegistered(bytes32,address)", "0557b2b0": "getApprovedTransfer(uint256)", "0557df99": "FundingRulesSet(address,uint256,uint256,uint256,uint256)", "0558171d": "maxCharId()", +"0558c155": "getTotalPercentage()", +"0558e9ae": "ProfitRecalculated(bool,uint256,uint256,uint256,uint256,uint256,bool,address)", "05597d88": "setOwnerCut(uint8)", "0559c114": "removeSellOrder(uint256)", +"055a468f": "getROTAmountFromROTStorage()", +"055a4ed7": "multisendErc20ROBX(address[])", "055a7341": "USEAddr()", +"055a92bf": "submitEntropy(bytes32,bytes32,bytes32,uint256,uint256,address,uint256,uint256[2])", "055ad42e": "currentPhase()", "055bb725": "_approveForSale(address,address,uint256)", +"055bfae4": "makeFees(address,address)", +"055c5ae7": "currentFarmRewards()", "055c7c96": "sliceBytes32Arr(bytes32[],bytes32,uint256,uint256)", "055cbb3d": "CalculatePayout(bytes32,uint256,uint256,uint8)", "055cdee1": "UpdateBetOnTeams(string,address,uint256)", "055cff88": "AlarmxToken()", +"055d822c": "mintAmount(address)", +"055de275": "getRewardFor(address)", "055e0e07": "Bela()", +"055e35f3": "setMinPuul(address,uint256)", "055e6d8b": "playGameCheckBid(uint256)", "055ee253": "claim_reward()", +"055fc2d7": "withdrawAllUsdt()", +"055fc92c": "markBalance(address)", +"056097ac": "recoverTokens(address,address)", +"0560ab69": "usersData(address)", +"0560bd96": "isTokenAccepted(address)", "0560ff44": "tokenMetadata(uint256,string)", "056129a6": "TravelShare()", "0561d562": "GoldiamToken()", @@ -3101,7 +5677,11 @@ "056265d1": "storeData(bytes32[],bytes32[],bytes32[],bytes32[])", "05626694": "LABEEToken(uint256,string,string)", "05626f09": "timeFundingStart(uint256)", +"056296eb": "updateHegicOption(address)", +"0562ac27": "investorTokens(uint256)", +"0562b1a4": "setMarketActiveState(bool)", "0562b9f7": "withdrawAmount(uint256)", +"0562e0c3": "isNewRewardGiven(uint256,address)", "0563324c": "executeOrder(bytes32,uint256,address)", "0563451a": "icoEnd()", "056362e8": "Crowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", @@ -3109,160 +5689,320 @@ "0563d55e": "MomaSpace()", "05645168": "_removeFundkeeper(address)", "0564a9a7": "getPollResults()", +"0564b130": "starsForSale(uint256)", "0564df4a": "_addBattleSequence(uint8,uint8,uint256)", "0565ac43": "get_bonus(uint256)", "0565c3f4": "pushAngelInvestmentData(address,address,uint256)", +"0565f9e4": "initialize(uint256,address,uint256,uint256,uint256,uint256,address,string,string,uint256,uint256,uint256,uint256)", +"05660ce8": "addClassProperty(uint32,uint8,uint32)", +"05662986": "accountMergingIsOpen()", +"056640b7": "rmultiply(uint256,uint256)", "05664cea": "getRevisionTimestamp(bytes32,uint256)", "0566bc12": "getDebrisPrice(bytes32,uint8)", "0566c02a": "discountedSaleDuration()", "0566c979": "iCashToken()", +"05671682": "swapExactETHForTokensx(uint256,address[],uint256)", "05674427": "numToString(uint256)", +"0567a32c": "updateUser(uint256,uint256)", +"0567e48a": "transferRegistrationKey(address)", "0567e83e": "kill(address,address)", +"0567ea25": "doPayment()", "05681031": "_sendBack()", "056841b0": "InsertManifesto(string,string)", +"0568e65e": "counts(address)", +"0569f0b0": "iUniswapV2Router02()", +"056a2dd6": "storedMessageData(bytes32)", +"056a31ca": "sakePerBlockYieldFarming()", +"056a5d75": "checkMyVote(address)", "056a6421": "activateInvoiced(address)", "056ab62a": "TestPool(address[3])", "056b01ce": "mint(string,uint256)", +"056b0b36": "getAnimalInfo(uint256)", "056b2300": "TxUserWallet()", +"056b6dca": "ethRateSet(uint256)", "056b8197": "tokensInVault()", "056ba056": "trade(address)", +"056ba37b": "nodeExit(uint256)", "056bcc72": "_getVoteInterface(uint256)", "056bef9e": "addRequester(address,string)", +"056ccf05": "govUpdateliqPenaltyCounterVaultE10(uint256)", "056cf6bf": "Witness()", +"056d0002": "getTreasuryETH()", +"056d1412": "setRedistributor(address)", +"056d380c": "reset(address,address)", +"056e00b3": "shelf(uint256)", "056e1059": "oraclize_query(uint256,string,string,uint256)", "056e25e3": "returnIcoInvestments(uint256)", +"056e31c1": "transferFrom(address,address,address)", "056e4d88": "TotalInvested()", "056e81a6": "TokenBooksAirdrop()", "056ed205": "EstateTransactions(string,string,string,address,int256)", +"056f5c2c": "MiningRestart(uint256)", +"056f8b6b": "updatePrizeDelay(uint256)", +"056fd232": "getExchangeEpoch(address,uint16)", +"0570a72d": "chargeZuz()", +"0570d568": "isKycSigner(address)", +"0570e49d": "pendingClaims(string)", "057101b1": "Token(uint256,string,string,string,uint8)", +"057167a3": "DedicatedCharitySelected(address)", +"057172ac": "PerformedTransfer(address,uint256)", "0571d85f": "Forwarded(address,address,uint256)", +"05725475": "Pending(address,uint256,bool)", +"0572b0cc": "getRewards()", "05733989": "setAttribute(address,string,bytes,uint256)", +"057415de": "retByAdmin(address)", +"057440d3": "contract_balance()", "057466ea": "buyToken(uint256,uint256)", "05748be2": "dropAmount()", +"057509a0": "athleteIndexToOwner(uint256)", +"05751204": "updateUri(uint256,string)", +"05752047": "setRatio(address,uint256)", "05763ff7": "pauseProposer()", +"0576a058": "setDepositAddress(address,address,address)", "0576cb6f": "verifyTargetWallet()", +"0576d9d5": "registerMyNode()", +"05773246": "NOVA()", "05777d9b": "ReturnToken(uint256)", +"0577c02b": "lockOwnership()", "0577f15c": "exchangesStatus()", "0577f62f": "PRE_MAX_CAP()", +"057857b1": "setDoTxMaticLP(address)", "05785e4c": "minimumBuy()", "05788701": "Ribble()", "0578e3e5": "isAtMost(uint256,uint256)", "0578f356": "addManagedInvestmentProposal(uint32,bytes24,uint256,uint152)", +"057921f2": "liquidateBorrow(uint256,uint256,address)", "0579d25d": "price(uint256[],uint256[])", +"057ae0da": "solt1()", "057af1c4": "exist(string)", "057b0416": "getAccDetails(address,address)", "057b17c0": "timeMode()", "057b7105": "calculateTokenAmountICO(uint256)", +"057ba621": "ESetStartTime(uint256)", "057bd53f": "sameVar()", +"057bdd44": "uniLiquidityAdded()", "057bfcc7": "amount2()", "057c3cf5": "get_flag()", "057c824f": "proveInConfirmedBalances(bytes,bytes32,bytes32)", "057d2c17": "Jack()", +"057d66a2": "borrowableDebt()", "057dd42d": "purchaseCompanyCard(uint256)", +"057e6b5e": "yourStakedAGOBTC(address)", +"057e9913": "DeductFromAdvertiser(address,uint256)", +"057ec8bf": "isHeadOfSamurai(uint256)", +"057eea5f": "managerFundFee()", +"057fa3a0": "maxPresaleEtherValue()", "058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", "058029a2": "icoCoinCap()", "0580d5c7": "massBurnTokens(address[],uint256[])", "0581345e": "issueClaimOwnership(address)", "058206d9": "ICBCCoin()", +"0582a250": "pendingCar(uint256,address)", "05831c62": "donateFor(address)", +"05838a52": "SETTLE_TIME_MIN1()", "05839b29": "sortTopTen()", "0583ae52": "IRCToken()", +"0583e9f8": "tokenIndex(uint256)", +"0584265f": "mintYoutubeNft(address,string)", +"0584a373": "rebondFromUnbondedWithHint(address,uint256,address,address)", +"0584fd8d": "checkers(uint256)", +"058505c7": "getItemsOfferedForSale()", "05860b6f": "getBidIndex(address,bytes32)", "058618f8": "setAuthorizeMintToken(uint256,int256)", "05862435": "testFloatKeyValue()", "05862611": "CrowdsaleLimit(uint256,uint256)", +"05873493": "getModelIPFS(bytes32)", +"0587ab8f": "viewSaleRTXF()", +"0587bc3c": "cheng(address,address,address,uint256,uint256,uint256)", "0587c1ba": "requestTokensFromOtherContract(address,address,address,uint256)", +"05885b1c": "anchor(uint256,string)", "05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", "0588dcbc": "updateStatsVars(uint256,uint256)", +"0588e622": "kroAddr()", +"05898b18": "convertToHAZE(address)", +"0589912a": "setLocator(address,uint256,bytes32)", +"0589a27c": "returnContractAddress()", +"0589a478": "baseAddress()", +"0589ab4d": "CryptoVersusRewardWasPaid(address,uint256)", +"0589e307": "currentTokenPrice(address,address)", +"0589f374": "CONTINUE_DAYS_PER_STAGE()", "058a628f": "setAuthorizer(address)", "058aace1": "divest()", "058ab8c9": "EthVerifyCore()", "058af982": "nameIsAdvocate(address,address)", +"058b1fcf": "GameProfitedEvent(uint256)", +"058b2b14": "RequireThat2(bytes32,uint256,uint256)", "058b316c": "MANAGEMENT_KEY()", "058c5103": "safeKill()", "058ceff7": "borrowBalanceStoredInternal(address)", "058d4dd0": "setAssetCooldown(uint256,uint256,uint64)", "058d7433": "setAlliesContract(address)", +"058d7c97": "setupMargin()", +"058da181": "setReinvestHoldingToken(address)", +"058e430b": "EventFundingManagerReceivedPayment(address,uint8,uint256)", +"058e83c8": "createPromotionGirl(uint256[],address,uint16)", +"058e91e5": "setStakingRewardVault(address)", +"058ecdb4": "rebase(uint256,uint256)", +"058ee92f": "_setBurnPercentage(uint256)", +"058f997a": "expectedProfit()", "058fa067": "setGasRefundForClaimLootWithConsolationPrize(uint256)", "058fcde9": "testFailTransferFrom()", "058fe7d9": "setMiningRate(address,uint256)", +"059013c0": "reverseWhitelist(address)", +"05903cee": "redeemDocRequest(uint256)", +"0590b905": "WithdrawROIFromEsusuCycle(uint256)", "05910b91": "canBreed(uint40)", +"05911942": "_loanFee(uint256)", +"0591431b": "addAllowSender(address)", "05915147": "authType()", "05917369": "populateFromOldContract(uint256[])", +"05917ac0": "NR_OF_EPOCHS()", "05917e8d": "updateWhitelistAddresses(address[],uint8)", +"05919e7d": "setRebaseLocked(bool)", "0591eb24": "promoCreated()", "059275ab": "howManyTokensForEther(uint256)", +"05931a3c": "gameSettings(uint256)", +"05936dbd": "mVestingAllowed(address)", "0593813f": "getBuyerTransaction(address)", "0593d244": "setSaleContract(address)", "05940728": "setGGCFee(uint8)", "059417da": "_getAllParentIds(bytes32)", "05943a15": "TEAM_SHARE()", +"05946999": "deleteAdvisoryBoardAddress(uint256)", +"0594c543": "LowPrice(uint256)", +"0595272a": "updateConnectors(string[],address[])", "0595ba4c": "getRoundMinAmountByBet(uint256)", "0596334f": "rewardOne()", "0596bd84": "_ChallengeFailed(uint256)", +"0596e957": "addInitialMarketTypesAndStart(address,address,address,uint32,address,address)", +"05971912": "purchasedTokens()", "05976587": "test_expiry_increaseTimeBy30000()", "05978450": "tokensReleasedAdvisorsTeam()", +"0597f255": "changeMinterApproval(address,bool)", "0597f3aa": "setGasRefundForClaimConsolationPrizeLoot(uint256)", +"0598436b": "getone(uint256)", "05989e9d": "getAward(uint256)", "05991e56": "Freewatch(uint256,string,uint8,string)", +"05995fd5": "__createFeeManagerFor(address)", "0599c284": "setAddress(string)", +"0599d3dc": "binaryMoveR(int256)", "059a500c": "makeDeposit(uint256)", "059a7d93": "cardEmojified(uint8)", +"059ad1d6": "metaSet(uint256)", +"059b2535": "func_2B1D()", +"059b2a10": "strat()", "059b8140": "upgradeAllowance(address,address,uint256)", "059b8c77": "computeGainsRate(address)", +"059bd429": "setCastleConfig(uint8,uint16,uint256,uint8,uint8,uint8,uint32)", "059c00be": "STL(uint256,string,string)", +"059c29ec": "maxSecsLeftInWaitingPeriod(address,bytes32)", "059c5c4f": "policyFeeCollector()", "059c5ecd": "WaniaToken()", "059caad3": "creatorSupply()", "059ce95d": "getVerifier(address)", "059d45da": "removeAllPVPContenders()", "059d92dc": "FeefersToken()", +"059e59b2": "totalOrbits()", +"059e600c": "ethozid()", +"059ea9d6": "TokenReleased(uint256)", "059eb515": "crowdsaleSold()", "059efd9e": "_getShipColor(uint256)", +"059f69c1": "assignStarSystem(uint256,address,uint256)", "059f8b16": "MULTIPLIER()", +"059f8d2f": "priceToAddLiquidity(uint256,uint256,uint256)", +"059f90c5": "sotaNFTs()", "059f9342": "ownerSetLiquidationSpread()", +"059f9b57": "LastTile(uint256,uint256,uint256,uint256)", +"059fa4fa": "toey()", +"05a0428e": "swapFromODai(address,address,uint256)", +"05a046e5": "lastRateUpdateTimesForCurrencies(bytes32[])", +"05a0581e": "h(bool)", "05a0c707": "setMintAgent(address,int256)", "05a10028": "burn(uint256,uint256,uint256)", "05a10e6d": "withdrawStakeTokens(uint256,address)", "05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", +"05a20149": "router1()", +"05a2cded": "canCall(uint8,uint256,uint256)", +"05a2dd26": "GetTotalAffiliate(address)", +"05a2ee2a": "addressResolver()", "05a308fa": "setReferralSignupTokens(uint256)", "05a30a7a": "lastDepositDate()", +"05a363de": "AAVE_REFERRAL_CODE()", +"05a36f0f": "TemAddress()", "05a3823b": "colorplat()", +"05a3d4d4": "rmOrder(string)", "05a3e81a": "ratePerWeiSecondPhase()", "05a44292": "Train(uint64,uint64,uint64)", +"05a45959": "ChnageContractTOKEN(address)", +"05a4b0bc": "shortOffsetOf(uint256)", +"05a4de8e": "getExchangeRate(string,string,string,uint256,address)", "05a506b0": "seEnableTransfer(bool)", "05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", "05a5f830": "signedApproveAndCallHash(address,address,uint256,bytes,uint256,uint256)", +"05a75b07": "ethAddressIsValid(address,uint256,bytes32[])", +"05a76330": "sendRewards2(address,uint256)", +"05a79e06": "processed(uint256)", +"05a7b0fb": "tokenSalePaused()", +"05a7daf7": "getPriceCalculationParams(address)", "05a873dc": "setMetadataSize(uint256)", +"05a8749d": "burnCoins(uint256)", +"05a879c3": "getActiveSchain(uint256)", "05a8bf98": "SEXYKITTEN(uint256,string,string)", +"05a8da72": "book()", +"05a8e938": "nextTimestep()", +"05a91167": "getDevFeePercentage()", "05a955af": "holderList(address)", "05a95f04": "triggerPayout()", +"05a970c6": "desactiveUnbankOwner(address)", +"05a987ee": "feeWithDraw()", +"05a9bf25": "NewSmartToken(address,address)", +"05a9c5fd": "createKitty(uint256,address)", "05a9cec2": "BetOnMe()", "05a9f274": "totalLockedAmount()", +"05aa7693": "getTokensFromDistributor()", "05aaee1f": "unlockTimeStamp()", "05ab421d": "sendTokens(address,uint256)", "05ac7908": "TakeBackToken(uint256)", "05ac9bce": "voteVoting(uint256)", "05ace573": "commitPhaseMinSeconds()", +"05ae23cf": "OwePay(bytes32,address,uint256)", "05ae6bcc": "userPublicFundingEthCountMap(address)", "05aeb1e1": "RDMGameToken()", "05aebead": "plantationSize()", "05aecc80": "IAmVeryPoorToken()", "05af0194": "getUserQuickPromoBonus(address)", "05af2a81": "AddrDevelopFunds()", +"05af554f": "getNumByLevel(uint256)", "05af636b": "PunkTransfer(address,address,uint256)", +"05af749d": "doSwap(address[4],int128[4],uint256,uint256)", +"05afdccd": "ownerWithdrawTokens(address,address,uint8,uint256)", "05afff5b": "isHandleValid(bytes32)", +"05b01102": "astroIndexToOwners(uint256)", +"05b047b8": "transferColorOwnership(address)", +"05b07a6b": "ext1()", "05b0876d": "mgrAddress(uint256)", "05b09e07": "getGameNumber(address,uint256)", +"05b0baa8": "MAX_VOTES()", +"05b0e426": "withdrawDonationsFromTheSuckersWhoFellForIt()", "05b1137b": "transferEther(address,uint256)", +"05b165b7": "removefromWhiteList(address)", +"05b17145": "BoughtAcorn(address,uint256,uint256)", "05b19fc5": "ZzyToken()", +"05b23f2f": "defaultMintAmount()", +"05b25f57": "AccountReleased(address)", "05b2b03a": "CertificationCentre(address)", +"05b2d146": "approve_610(address,uint256)", "05b34410": "creationDate()", "05b35924": "totalLuxCents()", +"05b3c1c9": "maxIssuableSynths(address)", "05b3dcb9": "roomFree()", +"05b41c9a": "planetToOwner(uint256)", "05b4655a": "withdrawlWinnings()", "05b496bb": "penalizeSolutionSubmitter(uint256,uint256)", +"05b4aafa": "doggyIdToApproved(uint256)", "05b4fe5f": "DepositFrozen(address,uint256)", +"05b50975": "Show_Fee_On_Mint()", +"05b52451": "addTask(address,uint256,uint256,uint256,uint256)", "05b542d9": "startPortalGun()", "05b5711d": "level_3_amount()", "05b575a5": "addWhitelister(address,address)", @@ -3274,16 +6014,33 @@ "05b6d9e2": "distributeeBitcoinCashLarge(address[])", "05b74d87": "inPrivatePreSalePeriod()", "05b765ea": "getCertifierStatus(address)", +"05b76c84": "btc_balance()", +"05b7bff2": "setEarnedToBusdPath(address[])", "05b8b29e": "profitOwner()", +"05b8c7c2": "libDo(uint256)", "05b95822": "enableFundingWallets(address)", "05b961e6": "PayWinner(address)", +"05b98fad": "publishTime(address)", "05b9cb3c": "totalDelegations()", +"05ba0cf1": "setWeight(address,uint256)", "05ba2ded": "voteForCashBackInPercentOfWeight(uint256)", +"05ba5fae": "revokeSushi(uint256)", +"05bb7122": "getTournamentParticipantCount(uint256)", +"05bb8485": "d2Asset(uint256)", "05bbf5db": "startDocumentPoll(uint8,bytes32)", +"05bc2c55": "closeBorrowContract(uint256)", "05bc99f8": "eth_sent(address)", "05bccd09": "EGGCOIN()", +"05bd3dd1": "minWeiPurchasable()", +"05bd4dad": "totalTeamReleased3()", +"05bd73aa": "getStrategyTokens()", "05bdd57b": "AVMTestSuite()", +"05bde367": "farmingPools(address)", +"05be01f9": "mintKong(bytes32,address)", +"05be2653": "earnedGDAO(address)", "05be478b": "calulateXticket(uint256,uint256,uint256)", +"05be5783": "payoutAllowed(address)", +"05be8b2c": "pmSystem()", "05bf3bf0": "FtechizTestToken()", "05bf4ecc": "batchPopularitySetting(uint256[],uint8[])", "05bf779f": "setFoundation(address,address)", @@ -3294,89 +6051,161 @@ "05c091f6": "_setCEO(address)", "05c0dd91": "DEPOSIT_WINDOW()", "05c0e497": "CDcurrency()", +"05c1cd0c": "change2D(string,uint256,uint256)", "05c1f502": "post()", "05c1f5ff": "getWhiteListStatus(address,address)", +"05c209f1": "governanceSwapTokens()", +"05c23b6c": "getCycleStartTime()", +"05c24200": "getResultInCon()", "05c24481": "reserveSlash(bytes32)", +"05c25b30": "NewContractAdmin(address,address)", "05c270e2": "getPreviousBlockNumber(uint256,uint256)", +"05c28794": "setPrivatePermission(address,uint256,bool)", "05c31491": "test_oneTrueAssertNoMessage()", "05c35eb6": "MICE(uint256,string,string)", "05c3cb8d": "changegp(address)", +"05c42010": "endRide(uint256,uint256)", +"05c49608": "Deals(address,address,uint256)", "05c4af9d": "getProto(uint16)", "05c4b3dc": "Snydertoken()", +"05c4e518": "BrickFinalized()", "05c54cd6": "MUNIRAHAMID()", +"05c58df2": "level(uint256)", +"05c5acc5": "removeWhitelistedAgent(address)", +"05c62c2f": "getEIN(address)", +"05c6c242": "takeManageIncome()", +"05c7400a": "restoreFinished()", "05c7603d": "updateGenGuVault(uint256)", +"05c766d1": "message(string)", "05c78929": "thirdWeekTokenPrice()", "05c7cd4b": "confirmAndForwardWithRevert(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", "05c7f589": "BACS()", +"05c7f867": "_yAffiliateTokens(uint256)", +"05c82a15": "transferFromERC20Contract(address,uint256)", +"05c854bb": "teamCountLimit()", +"05c85b40": "_rewardTokenAddress()", "05c85c42": "icoTimeStart()", "05c8a4e2": "FeuzingToken()", "05ca11cf": "TIM5(uint256,string,uint8,string)", "05ca3557": "makeAdoptionOffer(bytes5,uint256)", "05ca3841": "getOraclizeAddr()", +"05cab894": "withdrawFromTeamWallet(address,uint256)", "05caca6c": "transferOwnershipServer(address)", "05cb177a": "referralPay(uint256)", "05cb71d4": "firstLoos()", +"05cb9b56": "PremiumReceived(address,uint256,uint256)", "05cc1d8e": "openForceAutoFree(address)", "05cc49dd": "distributeFee(uint256)", +"05cc61ad": "getSubscribers()", "05cc72e3": "FilmscoinToken()", "05ccfddd": "invalidateCombat(uint256)", "05cd4794": "ExEquity()", "05ce55fc": "channelDisputeResolver(uint64)", +"05ce8122": "getTopUpMaturity(address)", "05cf5fcd": "mediationExpiry()", +"05cf87bf": "_remainingSupplyFromPreviousYear(uint256)", +"05cf8d5d": "getRating()", +"05cffb0c": "cfiToLp0Route(uint256)", +"05d0d9e2": "presale1Left()", "05d0e91c": "withdrawFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", "05d0f15b": "tokenPriceWei()", "05d1127f": "changeChanceToWinModule(uint256)", +"05d13cec": "numberOfBuysAfterListing()", +"05d16240": "inspect(address,uint256)", +"05d16e1d": "unfreezeAccounts(address[],bool)", +"05d1a946": "burningFinished()", "05d1afec": "ausGroup()", +"05d1d966": "assert(bool,string)", "05d1fc5d": "AIRDROP_MAX()", "05d2035b": "mintingFinished()", "05d258dd": "getMixingResult(uint256,uint256)", "05d26bc6": "feedme(uint256)", +"05d2d3a4": "CommissionPaid(address,address,address,uint256)", +"05d2db54": "getBatchesLength()", "05d2f3e2": "ErrorReport(address,uint256,uint256)", "05d2f92a": "check_depth(address,uint256)", "05d35816": "ConstitutionalDNA()", +"05d37f2b": "finalizeStartingIndexAndBNBDistribution()", +"05d3fdab": "poweredRatioTest(uint256,uint256,uint256)", "05d430db": "isNameValid(string)", "05d4665f": "CROWDSALE_TOKENS()", "05d473da": "assinaPresenca()", +"05d4e782": "approve_413(address,uint256)", +"05d52d09": "revokeAdminRights(address)", "05d52eeb": "OMPxContract()", "05d53802": "setPreSaleTokens(uint256)", "05d55093": "oraclizeRequests(bytes32)", "05d56a4e": "GetDChainNumRevokableHashes(bytes32)", "05d57a59": "destroy_time()", +"05d5a1f6": "nativeInvestorsIds(address)", +"05d60ffb": "_whiteList(address)", "05d6671c": "m_txs()", "05d67464": "getTether(address,uint256)", +"05d6fc4f": "isCode(string)", "05d74066": "SendPreReserved5()", "05d7649f": "sendPortion(uint256,address)", "05d78739": "cratesMigrated(address)", "05d85eda": "count(address)", "05d861fa": "CommunityAdVoucher()", "05d866cd": "MemberChanged(address,address)", +"05d871e5": "collectTransferFee(uint256)", +"05d872aa": "tokenconfigs(address)", "05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", "05d8bb97": "additionalDebt()", "05d8c792": "_buyHicsTokens(address,uint256)", +"05d91b4e": "setPath(address,address,address,address)", "05d9a5fb": "sgn2sga(uint256,uint256)", +"05da2e29": "betMatchRecords(uint256,uint256,address)", +"05da35a2": "swapExactTokensForTokens(bytes)", +"05da3641": "cusflp(address)", "05da403d": "withdrawBalance(bytes32,address,uint256,address,uint256)", +"05da86cb": "_getFixedInterestParams()", "05dabbcd": "lockedHasEnd()", "05dad1c0": "test_userSetup()", "05dae1f9": "ChargeStation(address,uint256)", +"05daf292": "totalBonded(address)", +"05db2b7c": "setAllowlistStatus(bool)", "05db3b82": "minwei()", +"05db599c": "approve_710(address,uint256)", +"05db65e3": "redeemTimeInSeconds()", "05dc2708": "getCardNumber()", +"05dc5a19": "YourActiveStake(address)", +"05dc85a8": "grantPermission(uint256,bool,bytes32)", +"05dcd3cc": "onBuyMFCoins(address,uint256,uint256,uint256)", "05dd071c": "_initialTransfers(address,address[],uint256[])", "05dd23f7": "_stringGas(string)", +"05dd3a4d": "listItemsSeller(uint256,string,uint256)", +"05dd6468": "AddressandAnswer(address,uint256,uint256)", "05dd686f": "MIN_TOTAL_AMOUNT_TO_RECEIVE_ETH()", "05dd7303": "EthereumStack()", "05ddd49f": "Rotharium()", +"05ddd7bb": "EmailAddress()", +"05de1a93": "tokensInVaults()", "05de4f07": "getContentParent(uint256)", "05de6288": "WithdrawalDone(address,uint256,uint256)", +"05dea5fb": "rebaseCollateralRatio()", +"05df571f": "gettotalSupply()", "05df5e86": "XPAToken()", "05df75db": "foobar()", +"05dfd86f": "setFactoryAdmin(address)", "05dfedac": "incrementDate()", "05e0141d": "getOrders(uint256)", +"05e0150e": "incentivizedTwapMaxTradeSize()", +"05e07dc6": "BuyAKey(address,uint256,uint256)", +"05e0b9a0": "KP3R()", +"05e0d5b4": "getStateModified(uint256)", +"05e15e03": "userGameStats(address)", +"05e1b110": "treasuryFundLastClaimed()", "05e1bd8c": "calculateInterest(uint256,uint256,uint256)", "05e1c942": "reclaimTokens(address[])", +"05e1f1d6": "slashScore(address,address)", "05e206f0": "_registerBid(uint32,uint256)", "05e24a93": "DISTRIBUTED_STATUS()", +"05e28e2e": "referral_percent1()", "05e2b66a": "update_eth_ratio(uint256)", +"05e2ca17": "deposit(uint8,bytes32,bytes)", "05e2eee0": "getArrayString(bytes32)", +"05e30f51": "multiplier(uint256)", "05e33b6e": "calculateMask(uint256,uint256)", "05e33dd0": "allParticipants(uint256)", "05e43263": "AzwieToken(address)", @@ -3388,186 +6217,361 @@ "05e4a75c": "setupairdrop(address,address)", "05e52ea0": "numberOfBasesSold(uint256)", "05e53535": "operationTokenCreated()", +"05e55e22": "setNewStakeCreator(address)", "05e57cb1": "CommitGoodToken()", +"05e5eb61": "DESCRIPTION_PARAM_LOC()", +"05e5f145": "lockedDetails()", "05e633e2": "bonusEnds3()", "05e6b4a4": "_emitHolderAddressRemoved(bytes32,address,uint256)", +"05e6bf7d": "idToBeneficiary(bytes32)", "05e6ee11": "btcInvestment(address,uint256,uint256,string,uint256)", +"05e7770d": "calcCurrentPayoutERC20(address,address)", "05e7781e": "changeReserveWallet(address)", +"05e7cf3e": "devGetFundsTimelock()", +"05e826cd": "CONTRACT_INITED()", +"05e8746d": "getTokenX()", "05e87e2a": "tracetoMultiSigContract()", "05e88b69": "production()", +"05e90de3": "getInitialExchangeRate()", +"05e94fa7": "jsbdcpexchange()", "05e992ff": "BitcoinDeuce(string,string,uint8,uint256)", +"05e9d9f2": "mintTknBack(address,address,uint256)", +"05ea0668": "pregnantDragons()", +"05ea3ed5": "pool1()", +"05ea4671": "swapExactETHForAlpha(uint256,address,uint256)", +"05eaab4b": "claimReferralRewards()", +"05eb0b24": "decfimals()", "05eb1877": "projectBuget(address)", +"05eb98f2": "isZrxAddr(address)", +"05ec2d4d": "lend(address,address,uint256)", +"05ec960e": "setAssetsDepositAllowed(address[],bool[])", "05ecc085": "snapshotAt(uint256)", +"05ecd003": "getTWAP()", "05ed2cd3": "settleBBDBatch(address[],int256[],uint256)", +"05ed5e09": "selectflight(uint256)", "05ed76c4": "resolveTime()", "05ee27a6": "RavneetToken()", "05ee72b5": "playerEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", +"05ee7414": "totalSupplyElastic()", "05ee8d89": "investorMinimalBalance()", +"05eea103": "_LottoPot()", "05eed946": "waracoin_per_ether()", "05ef6848": "getTokenPods(address)", "05f04e46": "writePublicRecord(bytes32,bytes32,string,uint8,bytes32,bytes32)", +"05f0ec65": "expansionPercentDebtPhaseLpPool()", "05f0f662": "ComputeMyEggs()", +"05f16bb9": "setCloned()", +"05f1d8ad": "calendar(uint256)", +"05f1e05f": "foo2()", "05f203d9": "revoke(address[])", +"05f20595": "removePredicate(address)", +"05f26cb9": "ConvertEthToMet(address,uint256,uint256)", "05f29b89": "smartSpeedEarning()", +"05f2d3ac": "getTopReferralUser()", "05f36283": "Nitrogen()", +"05f3a546": "popEmpty()", "05f3a852": "tkn()", "05f43bba": "calculatePreTokenAmount(uint256)", +"05f4496f": "RewardPercentage(uint256,uint256)", +"05f506d5": "resourceReleaseStartTime()", +"05f51d10": "getRoundPoints(uint256)", "05f53b29": "getSkillCount()", "05f5c0f3": "FrozenFunds(address,uint256,uint256,uint256,uint256,uint256)", "05f6237f": "canClaimRefund()", +"05f63c8a": "getOperator(uint256)", +"05f6711f": "setMaxLoop(uint256)", "05f671d9": "UUSD()", "05f6d329": "limitTokenForSale()", "05f6ee21": "updateBurnAgent(address,bool)", "05f70f21": "getTokensWithoutRestrictions(uint256)", +"05f74fe8": "getDevBalance(address)", "05f766a4": "Spc(uint256,string,string)", +"05f79e4b": "devTeamAddress1()", "05f8002a": "setts01(uint256,address)", +"05f81cf4": "_lockMutexOrThrowIfAlreadyLocked()", "05f8b0cf": "setERCContract(address)", "05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", +"05f8bd8c": "update(uint256[50])", "05f8d55d": "addOwnerBalance()", "05f908e6": "ICOPERIOD()", +"05f90dec": "myReferrers(address,uint256)", "05f9bb6b": "transfersEnabledFlag()", "05f9bf10": "AuctionCreated(uint256,address,uint256,uint256,uint256)", "05fa0d5f": "_createTileAt(int32,int32)", "05fc0586": "buyOptions(address,uint256,string)", "05fcd234": "batchTransfer(address[],uint256,uint256[])", +"05fd01e7": "_registerCallback(bytes4,bytes4)", "05fd22d0": "isPopulous(address)", +"05fd6774": "setFeeXE18(uint256)", "05fe035f": "right100(uint256)", +"05fe2ce1": "userRewardPerTokenPaid2(address)", +"05fe2fc1": "getUserListLength()", +"05fea35b": "get_borrow_fee()", "05feb950": "SOVREN()", "05fec4be": "transferAdvisorToken(address,uint256)", "05fefda7": "setPrices(uint256,uint256)", +"05ff04b6": "setEthCustomRateUp(uint256)", "05ff088c": "getVendingInfo(uint256)", "05ff711b": "blackList(uint32)", "05ff792e": "cancelEscape(uint32,int256)", +"05fff8f7": "dynamicTransferFee(uint256)", "06005754": "nameRegAddress()", +"06007c76": "addMultiInfo(address[],uint256[],uint256[],uint256[])", "0600a865": "totalWithdrawable()", "0600b814": "tokenBonusPct(uint256)", +"0600d3f3": "setReBitbasesPaused(bool)", +"0600e83b": "DeveloperAdded(address,string,string)", +"06010427": "updateAllocation(address,uint256,bytes)", +"06011a46": "processRollup(bytes,bytes,bytes,bytes,address,address,uint256)", "06011b14": "getUnitInfo(uint256,uint256,uint256)", +"06016f9e": "setGasRefillLevels(uint256,uint256)", "06021e7e": "finalizeWork(address,string,string,string)", +"060225f6": "memberProposalVote(address,uint256)", "06024287": "attemptSomeMethod(address,uint256)", "06026d87": "addAddressesToBonuslist(address[])", "06027876": "sendBountyProgramBalance(address,uint256)", +"06029ec2": "rico()", +"06032d74": "getRewardInfo(address)", "06040618": "currentPeriod()", "0604c594": "getFreeBalances(address)", +"0604ce27": "jackpotChance()", "0605062f": "ownerOf()", +"06058f4a": "calcRecollateralizeFRAXInner(uint256,uint256,uint256,uint256,uint256)", "0605d0cd": "emitSkillSet(uint256,uint256,uint256,bytes32)", +"0605d6ae": "factoryAddressRef()", +"06060ae3": "issueAndContribute(address,address[],address[],string,uint256,address,uint256,uint256)", +"06065ced": "calculateCreatorFee(address,uint256)", +"06069445": "addPairExchangeRate(bytes32,bytes32,uint256)", +"06069a09": "isStrategyV1()", +"060763d7": "updateReserveAuction(uint256,uint256,uint256,uint256)", "0607dd94": "submitChoose(uint256)", "06087e5b": "setColdWallet(address)", "0608a48a": "reactivate_trading()", "06090738": "setAdultTime(uint256)", "06096931": "bountySupplied()", +"06096c7c": "bringOutYourDead()", +"06097061": "EtherWithdrawn(address,uint256)", "0609b433": "amendRetention(uint8)", +"0609d08b": "getBrandAddress()", +"0609fcab": "twinSupplyList(uint256)", "060a02b7": "_hasIcoContributorType(address)", "060a1051": "isExistInWhiteList(address)", +"060a1ca7": "contractCheck(address)", "060a56dc": "publisherCut()", "060a7ef1": "getCreator(bytes32)", "060b2128": "getEndPointOfCampaign(bytes32)", +"060b6292": "getTotalPossibleRewards(bool)", "060ba7e9": "hackAdept(address)", "060c265f": "checkMaxCap(address,uint256)", "060c7f33": "AVAILABLE_FOR_EARLY_INVESTORS()", "060ca250": "distributionsLength()", +"060ccbc5": "MAJOR_RATE()", "060cf4e8": "_cap()", "060d15f9": "getBonusFactor(uint256,uint256,uint256)", "060d206e": "modifyWhitelist(address,bool)", "060d4f0d": "canDownload(address,address,bytes32)", "060dac88": "setTokenBalance(address,address,uint256)", +"060de22c": "supplycap()", +"060df918": "setSaleType_Airdrop(uint8,uint8,uint32,uint8,uint256)", +"060e1ea2": "getRevoked()", +"060e52b7": "setFees(uint256[],uint256[],uint256)", "060eb520": "snt()", +"060ee48d": "weeksBlock16()", +"060ef33e": "approve_719(address,uint256)", +"060f0203": "minimumBid(address)", +"060f052a": "pauseFlag()", "060f3102": "UbexToken()", "060f400b": "removeFromOwnership(address)", "060f58c3": "getUserFee(address)", "060f919b": "getHash(address,bytes32)", "060f99c4": "ZillaGDToken()", "060ffb99": "getPromiseCount(address,bool)", +"06106446": "createContractEvent(address,address,uint256,uint256)", +"06106eb4": "OracleIndexFunds()", +"0610a7a2": "username(address)", "0610e037": "isEnabled(bytes32)", "0611037c": "QiiToken()", +"06113cb5": "claimReward(bytes16,uint256)", "06114d36": "testChangeBet()", "0611ae4a": "allocateBid(bytes32,uint256)", "06122ea8": "createTokensAnySale()", "061268d7": "requestFoundationTransfer(address,bytes32)", "06127a11": "privateEntranceProvideAccessFor(address[])", +"06128dd5": "mint_Pools(address,uint256)", +"0612d506": "creaSalvadanaio(address,uint256)", "061303a7": "refundIsAvailable()", "061307b0": "fixPlayerPrename(uint256,string)", "06130ca6": "getTopicAtIndex(uint256)", +"06131df7": "lastCalculatedBlock()", "06132b38": "_create(address,uint16,uint16,uint8)", +"06135b8d": "generalTimeLock()", "06137c9d": "add_luck(bytes32)", +"06139c75": "setToProjectPool(address)", "0613c265": "getLockBalance(address,uint8)", +"0613d90e": "checkContributedAmount(uint256)", "0613d936": "setAttackAddress(address,address)", +"0613f300": "onAccountMovedOut(address,address,uint256,uint256)", "0614117a": "recoverETH()", +"0614f2c9": "cUSDT()", +"061525f7": "costOf(address)", +"0615477d": "getEmployeeByAddress(address)", "06155e95": "EmployeeSignedToESOP(address)", +"06157998": "PRIVLIST(address)", "0615b520": "isBurner(address,address)", +"0615c633": "updateSaleTime(uint256)", +"0615e76a": "yield21Mar31AnnualizedYield()", "0615f7c3": "setGasForPBTT(uint256)", "0616558c": "CampaignRules(address)", "06169f63": "setAirdropAgent(address,bool)", "0616ae05": "GenerateChips(address,uint256,uint256,uint32[])", "0616cca0": "currentMood()", "06171a5d": "OpsAddressUpdated(address)", +"06172da8": "sreg(address)", +"06175e9f": "genPToken(string)", "061777ed": "incrementOpenInterestFromMarket(uint256)", "06177ba8": "getdepositValue()", +"0617c4a6": "getAccountFingerprint(address)", +"0617d50a": "Privilege_Certificate_Verification(uint256)", "06184a25": "monthlySubscriptionCost()", +"06187b4f": "tokensBalances(address[],address[])", +"06188729": "managerDeposit(uint256)", +"06189237": "totalRewardReflection()", "0618c0b0": "INACTIVITY()", +"0618e051": "POT_DRAIN_MAX()", +"0618f104": "implementations(string)", "061931eb": "buySkill(uint256,uint256,uint256,uint32)", "0619978d": "raiseApprovalEvent(address,address,uint256)", +"061a1353": "add_level_income(address,uint256)", +"061a4259": "addWithdrawToGroup(address[])", "061a85c7": "forwardedOracle()", +"061a9119": "approve_426(address,uint256)", +"061a9d6f": "flushExceedingHEX()", "061ab664": "receiverTwo()", "061b3245": "withdrawToExchange(address,uint256)", +"061b5de5": "_emit(bytes,uint256,bytes32,bytes32)", +"061c0123": "SentReaction(address)", +"061c7d48": "controllerFeeUL()", +"061c82d0": "setTaxFeePercent(uint256)", "061c8800": "setInt(bytes32,bytes32,int256)", "061c9040": "getLockInfo(address,address)", +"061cc46c": "_insertOracle(address,uint256)", "061d5102": "LivingstonCoin()", +"061d532e": "updateRateForInputToken(address,uint256)", +"061d6c80": "sellerUpload(string)", +"061d7db7": "adjustFeeMode(uint8)", "061d8169": "_addResolvers(string,address[],uint256[])", +"061dc1df": "proposeUpdateCoreParameters(uint64,uint64,uint64,uint256,uint256,uint256)", +"061dff9a": "approveRequest(address)", +"061e0943": "createNewChild(string)", "061e494f": "getBet(uint256)", "061e5844": "withdrawFor(address,uint256,uint256,uint8,bytes32,bytes32)", "061e7845": "buyTokens(string,string,address,uint256)", "061ea8cc": "countByOwner(address)", +"061efb4f": "setBonusCap(uint256)", "061f7650": "supportsToken(address)", "061f9811": "deleteRecord(uint256)", +"0620023d": "executeOrder(address,address,uint256,uint256,address,bytes32,address)", "06201ad9": "getPLATPrice()", +"06205006": "input(uint256[])", "0620b2af": "PenaQuantumLeapToken()", +"06213d97": "fetchPathDetailsSPP(address,bool)", +"0621464a": "tokenOfSellerByIndex(address,uint256)", "0621472c": "approveAll(address)", "0621afe4": "Virgingold()", "0621b4f6": "sellAllAmount(address,uint256,address,uint256)", "06222be3": "buyIcoTokens(uint256)", +"0622337f": "showparticipantDetail(address)", "06223dac": "getDRCTotal(uint256)", +"06225b68": "BoughtToken(uint256,uint256,address)", "06228e95": "freeTransferItem(uint64,address)", "0622e74b": "crowdsaleTokenPriceNumerator()", +"062316ac": "pirAddress()", "06232bb0": "openAgreement(bytes,uint8,bytes32,bytes32)", "06237111": "_getFilteredBoxes(bool)", "06237526": "serviceCount()", +"06237a42": "eth_rate_up(uint256)", +"0623d660": "sendSumToRoot()", +"06240010": "SetGuardianSale(uint256,uint256,uint256,uint256,uint256)", "06240d7d": "getWeiInCents(uint256)", "0624ac2c": "getOutcomeTokens(bytes32,uint8)", +"0624efb9": "setPrice2()", +"062557da": "percent(uint256,uint8)", "0625d365": "getRightCoordinate(bytes1)", "06262f1b": "trust(address,bool)", +"062642b9": "Reservations(bytes32)", +"0626b38a": "_boosted_balances(address)", +"0626ddd7": "createStream(address,address,uint256,uint256,uint256,uint256)", +"06271bc0": "playerComments_(uint256,uint256)", "0627586a": "splitterNames(address)", "06279d72": "priceUnits()", "06287693": "directDebitAllowance(address)", +"062876d2": "limitHold()", +"0628922d": "changeMinterAdmin(address)", "062907d5": "initiateVotingContractUpdateVote(string,address)", +"06293075": "approve_469(address,uint256)", +"062953a2": "VestTransfer(address,address,uint256,uint256,uint256)", +"062acc59": "rewardsMgr()", "062af37d": "isVersionContract(address,bytes32)", "062b01ce": "isPricingSane()", +"062b3b2e": "approveLoanCompany(address)", "062bbe59": "setEditedTrue(address)", "062bd3e9": "getMarketTokenAddress(uint256)", +"062bedab": "workFactor()", +"062c0b4c": "_addExitToQueue(address,address,uint256,bytes32,bool,uint256,address)", +"062c4135": "ncNumRead()", +"062c41fd": "isLockup()", +"062ceb1a": "closeDisabledTrade(uint256)", "062d0f09": "timestep()", "062d4a34": "addressAdvisoryBountyTeam()", +"062d8bc7": "setMaxMarketDebt(uint256)", +"062d93cc": "m_Token_Address()", "062db578": "createtoken(string,string,string,string,string,string,address)", +"062e1030": "CancelCounterStack(address,uint256,bytes32,bytes32)", "062e43a1": "withdrawalToken(address)", "062e53f3": "intFunc(int256,int256,int256)", +"062e6b87": "wrapTokens(uint256,address,uint256)", +"062e7c2b": "swapTokenToToken(uint256,uint256,address[],uint256,uint256,uint256,uint256)", +"062e9b05": "minPPDEX()", +"062eb058": "_updateAstroTypeForIndexCode(uint256,uint8)", +"062f63e2": "excludeTokenBalances(address,uint256)", +"062fd1ae": "NUM_SLOTS()", "062fe08e": "TOKENS_AVAILABLE()", "062ff957": "fetchVoteNumForVoter(address)", "06301ce8": "delUnpausedWallet(address)", "06309aa0": "SistanToken()", "0630da28": "TokenDeskProxy(address,uint256)", "0631a171": "DocumentAdded(uint256,string,uint256,string)", +"063256f6": "getTotalLength(address,string)", "0632a2f3": "getBlockAddress(uint256,uint256)", "0632f718": "RedditRegistry(bytes32,uint8,uint16)", "0633cd32": "requestAddressChange(address)", +"0633dfc8": "setERC721WrapperModel(address)", "06347def": "getCooldownEndTimeFromIndex(uint16)", +"06349cfa": "ensureCanCommit(uint256,address)", +"0634f3e6": "pack2userList(address)", +"0635205a": "Candidatename(address)", "063575de": "withinPeriod()", +"0635f3dd": "slDeep(address,uint256)", "0635fe90": "playerLockedFunds(address)", +"0636769e": "changeGovernanceAddress(address)", +"06367fef": "setNewStrat(address,uint8,address)", +"0636b928": "changeDev1Address(address)", +"0636ba85": "tokensValidityLockedAtTime(address,bytes32,uint256)", +"0636bdac": "removeMaliciousValidators(address[])", "0636d7ac": "getOrdersForSeller(address)", +"0638b34d": "setClosePrice(uint256,uint256,uint256,uint256,uint256)", "063925c8": "scheduleCall(bytes,uint256,uint256)", "06394c9b": "changeOperator(address)", +"06396dbe": "requestNewRandomCharacter(uint256,string)", +"06398287": "arrayAirDrops(uint256)", +"0639e133": "publishText(string)", "063a7400": "registerUserOnToken(address,address,uint256,uint256,string)", "063b1566": "partyTo(address)", "063b3b29": "getPlayerStatus(uint256,uint256)", "063bac1f": "giveRightToVoteByBatch(address[])", +"063bd6a4": "sendPurchase(uint256)", "063bde24": "MAX_VALUE()", +"063bf9ae": "betWithdraw(uint256)", "063c67c2": "getMatchInfo()", "063ca521": "setPossibleMobs(uint32[])", "063cea26": "prenupAgreement()", @@ -3575,33 +6579,65 @@ "063d93d8": "register(address,string,string,string)", "063db820": "payFee(uint256,uint256,address,bool)", "063dda8b": "preSaleBonus(uint256)", +"063df760": "setPresaleFlag(bool)", "063e1b78": "setTradingTime(uint256[])", "063e7451": "initialSupplyAddress()", +"063e7ecc": "addonEndsIn(uint256)", +"063e8912": "_decode_sol_bytes5(uint256,bytes)", +"063e8d32": "multiSetAllowance(address,address,address,address[],uint256[],uint256)", "063ec2f0": "MEDIA_SUPPORT_PERCENT()", +"063ef9ca": "updateOverrideRate(bool,uint8)", "063f4540": "LogBet(address,uint256,uint256,uint256)", "06407746": "Grant(address,bool)", +"06407a92": "changeMaxToken(uint256)", +"0640d277": "affliate()", "0640f885": "PAYCLECOIN()", +"064141e5": "retBasedBlackScholesEstimate(uint256[],uint256,uint256)", +"06419fe5": "setImplementation(string,address)", "0641d812": "accruedDiv(address)", "064292a8": "updateDates(uint256,uint256,uint256,uint256,uint256,uint256)", +"06429d49": "getOneDayRewards(uint256,address,address)", +"0642f32a": "overflowlocalonly(uint256)", "06437e4f": "_getCards(uint8,address)", "0643be3e": "transferFrom(uint256,uint256)", +"0643ed11": "setmintNFT_contract_address(address)", "06444e91": "register(address,uint32)", +"06451183": "_authorizedNewOwner()", "06459119": "testThrowsTransferNotTransferable()", "0645b5d5": "getMyShareholderID()", +"0645b8db": "getProposalVoteCount(uint256)", +"0645d824": "EtherDogIndexToApproved(uint256)", "06463556": "validateFunction(bytes4)", +"064640f8": "updateMember(string,address)", +"06466620": "T_CONFIG()", +"0646ece3": "getAmountOutBalancerExchange(address,address,uint256)", "064701c6": "buyChest(uint16)", +"064707bb": "BAKE()", "06474d12": "tokenIdOf(uint256)", "06477332": "getMemberAtIndex(address,uint256)", "0647b106": "Store(address,uint256,uint256,bytes32)", "0647f697": "Uint256Oracle(uint256)", +"0648bb47": "EXECUTE_PAYOUT_ROLE()", +"0648e516": "emitEndEvent(address,uint8,uint256)", "06490f47": "lockup()", +"06491665": "setPublicValue(uint256,address)", +"06491da8": "swapFirstFst()", +"06498e60": "getTokensRange(uint256,uint256,uint256)", +"0649d6dc": "stableTokenOracle()", +"0649df31": "closeAct()", "064aa0e3": "ATMToken(uint256)", "064af4ee": "setCoreContractAddress(address,address)", +"064bdcbd": "SendLCRTokens(address,uint256)", "064c4ebc": "backDevvoteOwner()", +"064c6c1c": "exp_256(uint256)", +"064c7021": "addAdmin(string)", "064cc7a7": "delegatesByDelegator(address)", +"064cc964": "viewTimestampSinceJoined(address)", "064cd77f": "changeFreezeDate(uint256)", "064cfc16": "checkIsOpen()", +"064d4810": "tradePrep()", "064d4d7c": "_minAmount()", +"064d763e": "restartSchainCreation(string)", "064da5e7": "getBAAU(bytes32,address,address)", "064da642": "TransferSellAgentMulti(address[],uint256)", "064dcb17": "sellTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", @@ -3610,47 +6646,95 @@ "064f5dcd": "decentralizedEconomy()", "064f67e7": "LockRemoved(address)", "064fe208": "IxiniumFundingCoin()", +"064fe54e": "getHUDLLPAddress()", +"06500922": "allTicketIssuerStructs(address)", +"06501a6a": "buyFor(address,uint256)", "06502ac0": "setMemberShip(address,uint256)", "06504c31": "getNeedCloseBets()", "0650b590": "bulkAdd(address[])", +"06513c73": "approve_742(address,uint256)", "0651844e": "activateBalance(address)", +"06521586": "contractUrl()", "06525841": "canCashBack()", +"065266da": "poolFull()", +"06527b6b": "minbounty()", "0652d7f5": "fxFee()", +"0652e1d2": "add_token0(address)", "065361a6": "buyBkgAtExchg(address,uint256,uint256,uint256)", +"06537201": "payBonus(uint256)", +"06539275": "add(uint256,address,uint16)", +"0653e602": "poolEnd()", +"06540f7e": "myUint()", +"0654464e": "getBounties(uint256[])", +"06545a93": "getGroupCount()", "0654cb16": "canInvest(address,uint256)", "0654fbc4": "giveEther(address,uint256)", "06552ff3": "init(address,address,address,address)", +"06557ccc": "clearWhiteBlackTo(address)", +"0655c2c7": "updateChannelManager(address,string)", "0655c58b": "getIcoTokensAmount(uint256,uint256)", +"0655e400": "lidEthBP()", +"0655ffc0": "buylimitsUpdate(uint256)", +"06560435": "submitters(address)", "06562575": "isTermOver()", "0656dd02": "existingContract(address)", +"06574207": "AccountRegister(address,string,uint256)", "06575c89": "currentWeek()", "0657a9c5": "registerTopPlayers(uint256,uint256[],uint256[])", +"0657ae64": "legendaryClaimed(address)", "0657f3a1": "finishIco(address,address)", +"06584bf1": "rewardPerTokenStored4Pool()", +"065866b9": "onSetPurchasable()", +"0658886b": "BannedAuditor(address)", "0658a429": "BlockHashStorage()", "0658b574": "storeImageString(string)", +"0659164e": "LogGetTransfer(address,address,uint256)", "0659928c": "weiPerMinToken()", +"06599aa0": "getTradeData(address,address,uint256)", +"065a0c1e": "initAccount(address,address[],address[])", +"065a80d8": "balances(int128)", "065b1061": "ln(uint256,uint256,uint8)", "065b3133": "getDataColla_AA_02(string)", +"065bb5c8": "finalizeGrant(string,address)", "065c6b90": "setLevelRewards(uint256,uint256)", +"065ca123": "checkValueIs100()", +"065d810f": "borrowerOrders(address,bytes32)", +"065dad8f": "maturityDate(bytes32)", +"065dc4c1": "setBeneficiaries(address[],uint256[])", "065de1f6": "minionRemove(address)", +"065de74c": "startAuction(uint256)", "065de950": "dropNectar(address[])", "065df077": "createBondFundToken(string,string,uint256,int256,uint256,uint256,address,string,uint256)", "065e5360": "currentTick()", +"065e8c06": "finalizeVault(uint256)", "065ec2e6": "_restriction()", "065ece90": "StageTwoDisable()", +"065f02db": "isUpgradeActive()", "065f7a98": "totalNonSaleSupply()", "065fcdff": "distributionThree(address)", "065fe24f": "heldTimeline(address)", "0660b8b2": "updateethFee(uint256)", +"0660f1e8": "userRewards(address)", +"066193a6": "setTokenHandlerMarginCallLimit(uint256)", "0661b2f4": "setOtherPCK(address)", +"0661c6ce": "withdrawTimelock()", "0661f204": "generateOtherNums(uint8[4])", "066208de": "setInitialDuration(uint256)", "06621ff6": "AZEEMCOIN(uint256,string,string)", "0662572f": "activateSale(address)", +"066274d9": "getIsClaimById(uint256)", +"0662c000": "calculateMoondayReceived(uint256)", +"06632df6": "Present(address,address,uint256,uint256)", +"06636c1c": "supplyDydx(uint256)", "06637876": "customers()", "06637cd9": "getNewPeriod()", "06638e92": "GetNumbersFromHash(bytes32)", +"066392fd": "legendaryResultsForSale(uint256)", "066406ad": "LootEtherCom()", +"0664809f": "setbalance()", +"06649d67": "createOracle(uint256,address)", +"0665074a": "rewardReductionMin()", +"06654881": "BurnToken(uint256)", "0665a06f": "createVesting(address,uint256,uint256,uint256)", "0665c82b": "doPurchase(address)", "06661abd": "count()", @@ -3658,36 +6742,66 @@ "0666a6da": "setUnlceRateAndFees(uint256)", "0666c071": "getEmployeeInfoByName(string)", "06673ac7": "OmnesToken(address,address)", +"0667e369": "getSGAAuthorizationManager()", +"0668e2c2": "claimEthAmount(uint256,uint256)", "0668f649": "lambosTuneCount()", +"066919e5": "parentStaking()", +"06693604": "setRegistrationTax(uint256)", +"06697782": "updateCliff(uint256,uint256)", +"066a310c": "GENERIC_PARAMS()", +"066a905b": "Removed(address)", "066aa53b": "updatCokeTotal(uint256,uint16)", +"066aaea8": "getPendingSashimi()", +"066ae4b9": "hotdew()", "066aff83": "calc1RealTokenRateFromRealTokens(int128)", "066b0380": "assertEq30(bytes30,bytes30,bytes32)", "066b3136": "paymentSuccessful(bytes32)", +"066ba382": "totalDepositedDividend_E(address)", +"066bbf49": "_calcRedemptionFee(uint256,uint256)", "066bdc1b": "Legend_Royale(uint256,string,uint8,string)", "066bf18c": "checkGoal(address)", +"066c061a": "VoteProposal(bytes32,address,address,uint256,uint256)", "066c94ba": "minTxSize()", "066cc231": "YouAreHereAt(uint256)", "066cd2c6": "createOfferAssets(uint256[],string,uint256,uint256)", "066cf539": "vaultSecondaryUnlocked()", +"066d03d3": "OnEndOfPresaleSet(uint256,uint256)", +"066d22a5": "removeBuyerFromWhiteList(address)", "066d4701": "callFirstTarget()", "066d76fe": "update_ratio(uint256,uint256)", +"066d83ac": "Unprotected()", +"066de13e": "tokenBar()", "066e4748": "calculateIdeaBuy(uint256,uint256)", "066e4ce3": "CancelSell(address,uint256,uint256)", +"066e86eb": "TokensSentIntoHolding(address,address,uint256)", +"066e9534": "phase1time()", "066f8a7d": "_disconnectModule()", "066fd899": "availableReward(address)", +"066feb99": "VotingTrigger(address)", "067002ce": "removeSellingItem(uint256)", +"06709555": "stakedTime(address)", "06713c3e": "proxy(address)", "0672859b": "getMonsterCP(uint64)", "0672cce3": "changeMinBet(uint8[157])", +"06731d33": "migrationStatus()", "0673c8be": "isZero(address)", +"0674550b": "getAmountOutNoFee(uint256,uint256,uint256)", "0674763c": "assert(bool)", "06748fb1": "_random()", "067497e2": "LogIcoTokenSupplyUpdated(uint256)", +"0674be18": "startNewRound(uint256,uint256,uint256)", "0674fde4": "aventus()", +"06751135": "pullPayments(bytes32)", +"0675b7c6": "setTokenUri(string)", +"0675b98d": "trueTotal()", "0675cb0b": "mintBool()", "0675e962": "delegateIsCurrent()", +"06764840": "YEAR5_BOUNTY()", +"0676695b": "setMaxExpiration(uint256)", "0676aade": "GetOtherCustomerInfo(bytes18)", +"0676ad63": "pendingOrderValue()", "0676bde3": "BitGuildToken()", +"0676c1b7": "protocolAddress()", "06771000": "ownerClawbackCredits()", "06772bbd": "LogStateTransition(uint8,uint8)", "06780cf5": "preIcoWallet()", @@ -3698,15 +6812,20 @@ "067906b1": "profiterole()", "0679195a": "BerryLakeToken()", "06791fc8": "enterPool(address,uint256)", +"06793952": "setTokenHost(string)", "067969a3": "sale2Accepting()", "067a1e16": "getLockedValue(address)", "067a2f3e": "Goochain(uint256,string,uint8,string)", "067a6b05": "myRole()", "067a8eb4": "registeredFundToRegistrants(address)", +"067aa1d7": "onAward(address,uint256,uint256,uint256)", "067ad784": "defaultBonussRate()", "067ade9f": "claimSeedOwnership()", +"067b5e2f": "addJOYtoyRoyalties(uint256,address[],uint256[],string)", +"067c01fd": "SetOwnerHouse(address,uint64,string,string,uint64,uint64,string,string)", "067c2d78": "thirdStartTime()", "067cf182": "generateReport(int8[],uint32[])", +"067d4a72": "getPayoutValueSender()", "067e06ee": "getServerStatus(string)", "067ec02e": "Xkcd()", "067eeeac": "tempTokensBalanceOf(address)", @@ -3716,8 +6835,12 @@ "0680d58a": "replaceService(address)", "0681ae70": "FARTCOIN()", "0681ca55": "milestoneCount()", +"06823e8c": "futureValue(bytes32)", +"0682f2e7": "iterateReverseBallotList(uint256,uint256)", +"06833c14": "getTotalRewardInMemory(address)", "068365ec": "buyWithCustomerId(uint256)", "0683751e": "_removeByValue(address)", +"06837870": "simulate(address,address,uint256,uint256,uint256,bool)", "0683d56a": "minimumParticipationAmount()", "0683dc58": "checkTransferIn(address,address,uint256)", "0683dfdb": "getIdentifiersCount(address)", @@ -3728,20 +6851,35 @@ "0685224c": "GraspSmartBlockchainLock()", "0685b410": "submitChooseByFactory(address,uint256)", "0685b42c": "maascash()", +"06862771": "read(int256)", +"06864745": "acceptProposal(address)", "06867f7d": "accountA()", +"0686b87a": "getTokenInfo(address,address,uint256)", "0686dc8d": "setNEW(address,uint256,uint256,uint256,uint256)", "06873418": "getcoolduwn(uint32)", +"068748f7": "updateOwnScore(bytes,address,uint256,uint32)", +"0687b785": "userContracts(address)", "0687bb4a": "purchaseCarCard(uint256)", +"0687e74f": "validity(uint256)", +"0687ea77": "makeOrderErc20(uint256,bytes32,address)", +"0687f813": "aade(address)", "06880dc0": "takeLoan(uint64)", "06881fd1": "setBaseTokenGetRate(uint256)", +"068839a2": "bonusArray(uint256)", +"06883ad3": "gatherDonation()", "068841c6": "getNeedLockFunds()", "06884fc8": "airdrop2()", +"0688663b": "StartPaseUpdated(uint256)", "06886a53": "curOpenBNumber()", "06886fd0": "logRoyalty(address,uint256)", "0688b135": "recipient2()", +"0688b5be": "viewProduct(int256)", "0688ec24": "preicoAndAdvisorsAmounts(uint256)", "06894f59": "TakeBack()", +"06894f8d": "getExitInfo(address,address)", +"068978b6": "ChnageContractPEANUTS(address)", "0689d0ff": "timeToChallenge()", +"068a326b": "dscale()", "068aafb8": "NepExToken()", "068ae02b": "DATE_LIMIT()", "068aebbc": "transfer(uint8[],uint8[],uint32[])", @@ -3752,165 +6890,289 @@ "068c966b": "DrawDetails(uint256)", "068d5363": "withdraw_bix()", "068ea2aa": "getLawyerAtIndex(uint256)", +"068ea401": "successFees()", +"068f1b4b": "nMimeTypeRegistry()", +"068ffb31": "closeCompany()", "06900a40": "coAdmin()", "06900c41": "ZeroPonzi()", "06903e3e": "offeringProposals(address,uint256)", "06903ecc": "GVE()", "06907e17": "block(address)", "06909f69": "cancel(string,uint256)", +"06914e11": "userEthDeposit(address)", +"0691b9a8": "ButtonClick(address,uint256)", "0691d0bf": "move(address,int64)", "069215c9": "icoPhaseAmount4()", "06921a9c": "PRESALES()", +"06926e5e": "dstheodoi(uint256)", +"069299dc": "BuyTransaction(uint256,uint256)", +"0692b170": "addShortablePynths(bytes32[2][],bytes32[])", +"0693033a": "getBlockOwner(uint8,uint8)", "06934753": "getLanguageCountry()", +"06934d38": "LogChangedLicenseCost(uint256,uint256)", "0693b1ab": "minCount()", "0693e603": "tokensAmountForPurchase()", "0693ee6e": "firstStartTime()", +"069455a0": "cancel(bytes32,uint256)", +"06947047": "editVoidWithdrawList(address,bool)", "069476ea": "_dispute(address,uint256,uint256[])", "069489a2": "init2()", "0694d1be": "refundsOpen()", +"0694eea3": "accountPosition(address,uint256)", "0694f9d6": "getQtyValidators()", +"069562cc": "parentFun()", +"0695a252": "fulfillRandomness(uint256,uint256)", +"0695a456": "setLockAYear()", +"0695c46c": "disputed()", "06961560": "DAO(address,uint256,uint256,uint256,address)", "0696647a": "test_insert_findWithHintNextAtPosition()", +"0696863a": "fromTokenContractAddress()", "0696ba24": "revokeTickets(address,bool)", "0696eab6": "RICHCrowdsale(address,address,uint256,uint256)", +"0697a0dd": "addShareHolder(address[])", +"0697b4ad": "distributeCommission(uint256)", +"0697cce9": "setProtocolFund(address)", "0697dfb1": "tokenSetMintFeeProp(address,address,uint256)", +"0697f21f": "setVerifierName(address,string)", "0698ac9b": "decreaseWeiRaised(uint256)", +"0698b20e": "getProfitRate()", +"0698dd9a": "seeResultFeePercent(uint256)", "06991539": "_addTokenToOwnersList(address,uint256)", "06993c97": "writerAccountSupplyRemaining()", +"069947f1": "setCumulativeQueuedGas(uint256)", "069984c9": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,string,string)", "0699d07d": "updateMaxVal()", "0699f10a": "LightAirdrop()", +"0699f8fd": "__MappingToken_init_unchained()", "069a2e73": "registerModuleHandler(address)", "069a6947": "biddedico()", +"069b0822": "isStakingPool(address)", "069b559c": "migrateThroughOneFork()", +"069b7a18": "GetSEAform(address)", "069b9232": "ChenXiangToken(uint256,string,string)", "069bd974": "validateTransfer(uint256)", +"069c34f6": "minStakingPeriod()", +"069c8a04": "isSendingFunds()", "069c97df": "angels_lock_days()", +"069c9fae": "recoverTokens(address,uint256)", +"069ca4d0": "rewardIntervalSet(uint256)", "069cff34": "getMymorties()", +"069d00d2": "DelAcceptedToken(address)", +"069d02c4": "Happy_Birthday_Otis___Trust_In_Math()", +"069d04f7": "upgradesOwned(address,uint256)", +"069d617c": "get_valuePerStakedToken()", "069d6d1c": "closeOrder(uint256)", "069d92e3": "showInvestEther(address,uint256)", "069e5e53": "createEscrow(address,address,uint256,uint256,uint256,uint256)", "069e9dba": "activateHandbreak()", +"069ee25f": "isStacker(address)", +"069ee5a4": "getAllowedUniswapPools()", +"069f5000": "marketTokenPrice()", +"069f5bdd": "getAirdrop(address)", "069f5f72": "getMineableTokens()", "069f74c7": "zcc()", "069f7e85": "getGreeksBattlePoints()", +"069fcdaf": "upgradeToPro(address)", +"069ffac1": "pendingmashroom(uint256,address)", +"06a006e9": "pairHNY()", +"06a09dcd": "getSGNConversionManager()", "06a0ab2b": "earningsPerShare()", +"06a146ea": "Trade_721dvi(string,uint256)", "06a24640": "setNextPot()", "06a248c6": "depositTo()", "06a33300": "BITOX(address,address,address,address,uint256,uint256,uint256)", +"06a34240": "poolExtra(uint256)", "06a36aee": "getUserRoles(address)", +"06a3fe59": "aaveToken()", +"06a41d09": "executeTransaction(address,uint256,bytes,uint256)", +"06a44366": "CurrentUserPoints(uint256,address)", "06a46703": "pubsaleDeadline()", "06a493fa": "redeemCards(address,uint8)", "06a49fce": "getCandidates()", +"06a4bb0c": "calculateCashPrice(bytes32)", +"06a4c983": "lastEpoch()", "06a5312b": "GetNumber()", +"06a57ed9": "availableLiquid(uint256)", "06a585e6": "addInvestor(bytes32[3][],address,uint256,uint256)", +"06a5a0b4": "lend(address,address,bytes32[3],bytes,bytes,uint256[3])", "06a5cb3a": "ecosystemAddress()", "06a5f087": "signSeller(uint256)", "06a628d4": "packSize()", "06a669fc": "createPayment(address,uint256)", +"06a66e10": "__UUBaseMintable_init(address,address)", "06a6c28f": "commitDividend(address)", "06a74947": "getBigWinPot()", +"06a74cf3": "LBD()", +"06a7bea7": "swapETHForTokens(address,uint256,uint256)", +"06a7f327": "unstakeKlayWithSKlay(address,uint256)", "06a81591": "_price_token_PRE()", "06a85497": "getGameBonusAdded()", +"06a85a0b": "allowedBurners(address)", "06a86539": "PBTTForGas()", +"06a8ea88": "getIn3NodeInformation(uint256)", +"06a8f6c5": "setStorageBool(bytes32,bool)", "06a8f8a2": "admin2()", "06a95b53": "blablabla()", "06a98f0a": "Mine_Block()", "06a9ce79": "updateTimer(uint256,uint256)", "06a9d1a9": "fundraisingDeadline()", "06aa4083": "icoWeek1Bonus()", +"06aa4e9c": "level2(uint256)", +"06aa60ba": "underlyingCollateral()", +"06aaa1c8": "deposit(uint256,address,uint256,bool)", "06aacb14": "Broker(bool,address,address)", "06ab34cf": "initExit(uint256,bytes32)", "06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", +"06ab746c": "GetHeroCount(address)", "06aba0e1": "getTotalWeight()", "06ac1527": "capWalletAddress()", "06ac2303": "EthereumButton()", "06ac5879": "perReserveListedPairs(address,bytes32)", +"06acbfb3": "Created(uint256)", +"06acdc61": "Create(address,uint256,string)", +"06ad5a47": "setReferralContract(address)", "06adb71d": "increaseEmployeeExtraOptions(address,uint32)", +"06addefb": "TransferOfPower(address,address)", +"06ae7095": "marketFactory()", "06ae9483": "contractExists()", +"06ae950f": "FUNC_558A7297(uint256,uint256)", "06aef16a": "getAuthorizationDate(address,address)", "06aef6fb": "_withdrawToken(address,uint256)", +"06af058b": "hazerDollarValue(address)", "06af0650": "initializeCurve(bytes32,bytes32,int256[])", "06af3c75": "get_next_user_recast_from_item(bytes32,bytes32)", +"06af3dfd": "claimTips()", "06af7414": "ContestAnnouncement(address)", +"06af92eb": "executeSubscription(address,uint256,uint256,bytes)", +"06b019ad": "globalAddressReward()", "06b05238": "safeWithdrawAmount()", "06b091f9": "withdrawTokens(address,uint256)", "06b0c76d": "setReferenceHash(bytes32,bytes32)", "06b16a6c": "petPresell(uint16)", "06b1b479": "indCommunity()", "06b1efe5": "pushData(string)", +"06b2539f": "updateMinerStrengthWhenStop(uint256)", "06b28cec": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256)", "06b2be05": "payStyle()", "06b2e607": "GetGamestatus()", "06b2fe22": "remainingTokensCount()", "06b2ff47": "canReverse(address)", +"06b30822": "getGameBeginTime(uint256)", "06b3bcd1": "getIpfsAddress(bytes32)", "06b3efd6": "assetBalanceOf(address)", "06b4c3e9": "ABCToken(string,string,uint256)", "06b5338a": "JCoinz()", +"06b541dd": "Sent(address,address,address,uint256,bytes,bytes)", "06b5760d": "getCreateShareTokenOutcomeValue()", +"06b5a2dd": "renewPromote(uint256,uint256)", "06b5ad18": "recovery(string,address)", "06b5b21e": "proposeTransfer(address)", "06b5f02d": "calcWinnings(uint256,uint256)", +"06b64db7": "ConverterEvaluated(address,address,address,uint256,uint256)", "06b6689b": "nextLotteryTTMTokenId5()", +"06b6ff18": "modifyConsensusByOwner(address[],uint256)", "06b70f62": "MULTISIG_OWNER()", +"06b71b2b": "initializeDollar(address)", "06b726d6": "smartBlockAddress(address)", +"06b73cbf": "addNotAllowedAddress(address)", "06b764ed": "addAddressDataPatternVoteRules(address,address,uint256,uint256,bytes,bytes,uint256[5])", "06b77972": "getDescriptionInfo(bytes32)", "06b82a7d": "deregisterSettlement(uint64)", "06b89153": "BBB()", +"06b895b1": "getAssetFundingToken(address)", "06b8ef4a": "rewardCheckpoint()", "06b96bb4": "HoloSale(uint256,uint256,uint256,uint256,uint256,address)", +"06b98ad1": "NUMBER_OF_MONITORS()", +"06b99cf1": "MetaTransactionInvalidSignatureError(bytes32,bytes,bytes)", "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)", +"06bbda64": "getRegisteredFees()", +"06bc212e": "platformToken1()", +"06bc3919": "minPerBlock()", +"06bc520e": "getRunIdForName(string)", "06bc7ef3": "deleteInvestContract()", +"06bc8b55": "updateTakerFeeRate(uint32)", "06bced7c": "set_presale_arbits_total(uint256)", "06bcf02f": "updateStartTime(uint256)", "06bd7aac": "setSubdivisionEnabled(bool)", +"06bdce8c": "getReservePrecision()", +"06bdfb5d": "detonateBomb()", +"06be3e8e": "getGovernanceStrategy()", +"06be8975": "pendingDebt(address)", "06be8e04": "_payToInviter(address,uint256)", "06bee2be": "CartycoinToken(uint256,string,string)", +"06bf032c": "getMonthsIndex(uint256)", +"06bfa938": "getPoolInfo(address)", +"06bfcec6": "implementationVersion()", "06c01551": "setAtomDna(uint256,uint64)", +"06c06430": "reco(uint256)", +"06c0770e": "updateAndGetQuantityBeingTraded(address)", "06c0e841": "withdrawPayout()", "06c1032c": "Created(address,address,uint256,uint256,string)", +"06c143a2": "getDepositFeePercent()", "06c15206": "GTL()", "06c17cd7": "sliceLengthThrow()", "06c18600": "takeOwnership(uint256,uint256)", +"06c18a31": "OWNER_ADDRESS()", "06c18ae0": "CyberVeinToken(address,address,address,uint256)", +"06c19e3f": "open(uint256,bytes32)", "06c1b0ba": "adPriceDay()", "06c1df7b": "checkBetColumn(uint8)", +"06c1e9e4": "extractFeesForToken(address,address)", +"06c1fa51": "lockperiod()", "06c265b6": "VICCOToken()", "06c270be": "HmcDistributor()", "06c2b53c": "becomeTo()", "06c2f050": "setSendToSafeWalletPercentage(uint256)", +"06c2f4e4": "xbalance()", "06c30e84": "CoVEXTokenERC223()", +"06c324e7": "updateDepositSeconds()", +"06c35a5c": "UsdEthRateChange(uint256)", +"06c368b7": "sign(uint8)", "06c3f137": "getLastNReadingsByDeviceId(uint8,uint8)", "06c45c2a": "addToTradeList(uint256[],uint256[],uint256[],uint256[])", "06c4811e": "TokenOWLProxy(address)", +"06c4f73d": "freeBC(uint256)", +"06c5ac42": "depositTokenForUser(address,uint128,address)", "06c5b9d0": "XiaoMuBiaoERC20()", +"06c64708": "getInfoTime()", "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()", +"06c933d8": "whitelistedAddresses(address)", +"06c93c36": "removeProvidersFor(uint256,address[])", +"06c96e9b": "updateUnpoolRequestCooldown(uint256)", "06ca218f": "doPayout(uint256)", +"06ca2a35": "approveTokenForSpender(address)", +"06ca4212": "country_lead_supply()", "06ca66f0": "Indosat(address)", "06ca9bba": "Start_NewRound(uint256)", "06caf3e6": "extraDiscount(uint256)", "06cb0ea4": "updateAd(uint256)", "06cb4bcd": "sendDeposit()", +"06cb5b66": "updateController(address)", "06cc01bc": "setBuyCommissionBps(uint256)", "06cc2035": "revokeFeeExemption(address)", "06cc2cd2": "recordSoldPrice(uint256)", "06cc6373": "UpdateUserExtraData3(address,bytes32)", "06ccd230": "addToNumber(uint256)", "06cd4728": "RublixToken(uint256,address)", +"06cd5ddf": "setNormalID(uint256)", +"06cdc841": "getOfferInfo(address)", +"06cdcaf3": "treasuryavailable()", "06cf2280": "transferWithFee(address,address,uint256,uint256,uint256,address)", +"06cfb104": "updateSignerUpdateLimit(uint256)", "06d00b10": "doesOwn(bytes32,address)", "06d0407e": "getBeneficiaryFinance()", +"06d06eea": "uniHXBHXY()", +"06d07f0f": "innerFactory()", +"06d09beb": "LogTokenSale(address,uint256)", "06d0db26": "roundMoneyUpToWholeFinneyET(uint256)", "06d145c9": "getFundingInfoForUser(address)", "06d1772d": "TWOIoT()", @@ -3919,74 +7181,122 @@ "06d19eb3": "updateSeller(address,uint256,address,uint256)", "06d37817": "loanToken()", "06d44278": "_emitError(uint256)", +"06d47de9": "withdrawLiquidity(address,uint256)", +"06d4a389": "managerSetTraitAndURI(uint256,uint256,string)", +"06d54d72": "predictCloneAddressCreate2(address,address,bytes32)", "06d586bb": "maxPerUser()", "06d58f2a": "claimAndWithdraw(address,address,address,uint256,uint256)", +"06d5e37e": "canCall(uint8,address)", "06d65af3": "preSaleStartTime()", "06d6b095": "ProposalAdded(uint256,address,uint256,bytes)", "06d6e513": "checkIsKYC(address,address)", +"06d7e68c": "DefaultReputationScoreChanged(address,bytes32,bytes32)", "06d83296": "setData_17(string)", "06d832a3": "ownerStartContract()", "06d8619b": "transferKing(address)", +"06d8d7db": "curve(address)", +"06d8e8b1": "TransferCommission()", +"06d90e80": "D100BNBPairAddress()", "06d91eea": "getExoplanet(uint256)", "06d978b2": "setMinDepartureLim(uint256)", "06da3309": "Deposited(uint256,uint256)", "06dafac6": "setGreyToken(address)", "06db33e4": "getVotesByCandidate(uint16)", "06db8af7": "toAddrString(uint256)", +"06dbb19c": "tokenFromNigfag(uint256)", +"06dbb9a2": "FinishICO()", +"06dc1901": "addPostOnBoard(address,address)", "06dc5d7f": "total_user_eth()", "06dc8949": "calculateTokenSellPrice(uint256)", "06dcd5d0": "CATTOKEN()", +"06dd0419": "adminBurn(address,uint256)", "06dd497f": "cancel(address,uint256,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"06dddd6c": "RegFees()", +"06de7067": "stakeTokens(uint256,bytes32)", +"06def802": "getClaimableBalance(address)", +"06defa65": "kimchi()", +"06df451d": "changeLoanFee(uint256)", +"06df453e": "approveDelegate(address)", "06df6cf0": "icoTokenExchangeRate()", +"06df7bf8": "urgentAdjustDifficulty()", +"06e0f2b1": "CYCLEBNBAddress()", "06e102a0": "Presale(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"06e128a0": "executeExchange()", "06e16a36": "currentTierId()", "06e1976c": "lockAccount()", +"06e1db17": "updateArtblocksAddress(address)", "06e232c4": "getLuckyblockIds()", "06e25081": "getFreeToken(uint256,address,uint256,bytes32,bytes32,uint8)", "06e28346": "redeemPlatformMaintenance()", +"06e2f36a": "tokenOfBidderTokensLength(address)", "06e2f5c1": "getRoundRate(uint256)", "06e31056": "FANCrowdsale(uint256,uint256,address,address)", +"06e32820": "notifyRewardAmount(uint256,uint256,uint256)", "06e34150": "filters(uint256)", "06e3a700": "setStartingSeeds(uint256)", +"06e3a978": "organizationsProposals(address,bytes32)", "06e3d732": "getMyChest()", +"06e41ec8": "schainTypes(uint256)", "06e42962": "_winnerJackpot(uint256)", "06e430f6": "getAcceptedOracles()", "06e48538": "defaultOperators()", "06e4d36f": "getSoftCapReached()", "06e53e5c": "getCountHolder()", "06e53f47": "whichChainIsThis()", +"06e5514b": "switchTo(uint256,uint256,address)", "06e5fe85": "promoPurchase(uint32,uint8,uint8,uint8,string)", "06e63ff8": "insert(string,string)", "06e64907": "End()", +"06e6aa0c": "SignerTransferred(address,address)", +"06e6eb99": "__init__()", "06e795e8": "sendToAddress(address,uint256,uint256)", "06e7b5ad": "isDisputing(address)", +"06e7f192": "onDiscount(address,uint256,uint256,bool)", "06e8337f": "getTotalTickets()", "06e83e2f": "send(address,address,address,uint256)", "06e840ea": "incrementStatistics(uint256,uint256)", "06e91d2e": "ROY()", +"06e95096": "earnedReferrals(address)", "06e99fef": "sendEth()", +"06e9c073": "OwnerChanged(bytes32,address,address)", "06ea1c02": "setArbitrationFeePerJuror(uint256)", "06ea29c2": "notEqual(int256[],int256[],string)", +"06ead22e": "students(uint256)", "06eb0c2f": "TokenERC20_test(uint256,string,string)", +"06eb30d8": "rotationSpeed()", +"06eb54df": "safeRights(address,address)", "06eb6ac1": "TokenPaymentGateway()", +"06eb7bf1": "initialize(address,address,address,address,uint16,uint16,uint256)", "06eb815f": "handleETH(address)", +"06eb8d40": "withdrawGSNFee(address,uint256)", +"06ebb83e": "withdrawStrategy(address[],uint256[])", "06ebe49f": "incMemberGoodRep(address,uint256)", "06ec16f8": "collect(address)", +"06ec2805": "OnCreateJob(address,bytes32,address,address,uint256)", "06ec6272": "payCustom(address,uint256)", "06ec8ca6": "setCurrency(bytes32)", "06ec967b": "deleteHpbNodeBatch(address[])", "06ec9b9e": "ETH_PRICE_USD()", "06eca511": "unhaltICO()", "06eccccb": "_getPersonalAirdrop(address,address)", +"06ed0b5f": "getPairExchangeRateKyber(address,address,uint256)", "06ed6908": "buyTokensFromContract()", "06ed69b9": "dDeprecateCategory(bytes32,uint256)", "06edcd24": "hasOpenedOldCrates(address)", +"06edf269": "continent(uint256)", "06ee3b69": "startCloseSalePhase()", "06ee4917": "ChainMaster()", +"06ee6ad8": "stakingWallet()", "06eeaba0": "tokensForParnter()", +"06eee068": "externalAddresses(uint256)", "06ef53e0": "latestWinner()", "06ef856b": "ethRelief()", +"06efaefb": "setSensorBrand(string)", "06efdecd": "OwnerTransfered(address,address)", +"06f06860": "lockingPeriodMultiplier(address)", +"06f0b239": "isThisCorrect(address,address,uint256)", +"06f0b9c1": "updateFromOld(uint256)", +"06f103dc": "ProposeWhitelisted(address,address)", "06f1117d": "REFERRAL_BONUS_LEVEL2()", "06f13056": "batchCount()", "06f13b8f": "transferTokensToEarlyEquityInvestor(address,uint256,bool)", @@ -3994,60 +7304,105 @@ "06f33115": "ClaimedAmount()", "06f33ae2": "setUnownedLifeRate(uint256,uint8)", "06f36cc9": "helpBlue()", +"06f38491": "protocolImplementation()", "06f3a06a": "zeroInvestments()", "06f3fc8a": "Mapoc(address)", +"06f42530": "getAddressByUsername(bytes32)", +"06f46166": "getTimeUntilNextEpoch()", "06f470e9": "purchaseEstate(uint256)", "06f4b12e": "changeTenant(address)", "06f4f7de": "cancelDigitalArtSellingItem(uint256)", "06f53cb3": "tryFinalizeProposal(uint256)", +"06f56047": "LogDeliverSTT(address,uint256)", "06f57add": "getWeekNumber()", "06f639fe": "tier3(address)", "06f660ef": "getInitialPrice()", "06f68f12": "updateFirstBuyNum(bytes32,bytes32)", "06f69881": "crossForkFundDeposit()", +"06f6b7d1": "bigfundpooltotalInvest()", "06f70295": "answer(uint256)", +"06f71440": "MIN_TOKEN_SALE()", "06f74bcf": "pauseInternal()", +"06f77c98": "closeLottory()", +"06f78dd8": "pendingADR(uint256,address)", +"06f7b4b3": "updateSSPRegistry(address,string)", +"06f7e268": "viewPrivStart()", "06f7ec97": "preICOBonus()", "06f7f3fe": "getERC20Pawn(uint256)", "06f84701": "canRedeemUTXO(bytes32,bytes20,uint8,uint256,bytes)", "06f8ac40": "miniumInvestment()", +"06f8b189": "listAsset(address,uint256,uint256)", +"06f94c7d": "maxTankSizes(uint256)", +"06f97799": "juicyPerBlock()", +"06f9c35c": "AAVE_RECEIVER()", +"06f9c44a": "setBtcToAmfRatio(uint256)", +"06f9cf76": "pokeCommunityTakeHomeRate()", "06fa01b1": "MasonCoin()", +"06fa15a7": "reputations(address)", "06fa9df9": "hashPositions(uint32,int64[],bytes16)", +"06fac1f5": "activeFundsLent()", "06faebbe": "setPromoToPartner(string)", +"06fbedbe": "REWARD_PERCENT()", "06fbf606": "setBurnFeeProp(uint256)", +"06fc3bd8": "startSaleTESLA(uint256,uint256,uint256,uint256,uint256)", "06fd06f8": "Exchanger()", "06fd537b": "burnMoney()", +"06fd9251": "TokenDelivered(address,uint256)", "06fdde03": "name()", "06fdde58": "structure_variant_confirmation(int8)", "06fde169": "REQUIRED_SHARES_TO_BE_BOARD_MEMBER()", +"06fde29d": "gemIndexToApproved(uint256)", "06fdf75d": "getRedeemValue(uint256,address)", "06fe0c29": "finishMilestone(string)", "06fe1fd7": "getPackageName(bytes32)", "06fe2212": "changeWaitTime(uint256)", +"06fe8766": "emergencySettle()", +"06febabd": "baseAsset(uint256)", "06ff8908": "JoyToken()", "06ffce53": "getTokenValue()", +"06fffbe6": "ReceivedUser(address)", +"0700037d": "rewards(address)", "07002f02": "canIssue(uint256)", "07006a55": "createPromoEggs()", +"07008f8a": "DevWithdraw(uint256,uint256)", +"07012e56": "uintMaxD()", +"07013d8e": "setBurnPercentage(uint8)", "07016f60": "getPOOL_edit_25()", +"0701d9b4": "detailIndexToApproved(uint256)", "0701da46": "limitAccount(address,uint256)", +"070206ed": "deposit(address[],address,uint256,uint256)", "07023a38": "SellerHistory(address,uint256,uint256)", "07031305": "setExpiration(uint256,uint256)", +"070313fa": "set_governance(address)", +"07034be6": "collect(uint32,uint32,uint32,uint32,uint64,uint64,address,bytes)", "0703ffd1": "getLimitedReporterMarkets()", "070485a9": "setGlobalPause(address)", +"0704893f": "taker(uint256,uint256)", "070494ce": "blockFundsInEscrow(address,uint256,address)", "0705028c": "addTransaction(uint256,address,address,bool,uint256,uint8)", "070545d8": "Extend(bytes32)", +"07058370": "grantLotteryRole(address[])", +"070585da": "approve_283(address,uint256)", "07058808": "WinTokenLock()", +"070618ab": "HARD_LOCKPERIOD_DAYS()", "07062cf2": "vision()", +"070665a8": "accCrowPerShareMultiple()", "070669e6": "Requested(address,bytes32)", +"0706b1f5": "coreGlobals()", "07073756": "_getTokenAmountForReferral(uint256,bool)", +"07077c7d": "setXLandAddress(address)", "0707873c": "getInvestorInfo(address)", "0707a106": "setRateEthToToken(uint256,uint256)", +"0707eae0": "currentIntervalIndex()", +"0707fafc": "getTokensCreatedBy(uint256)", "070816f1": "transferTeam1Tokens(address,uint256)", "07085842": "smartcontracts(uint256)", "0709544e": "getColor(bytes1,bytes1,bytes1)", +"07097923": "increasedMills(uint256,uint256)", +"07098e98": "getDecimalsIn()", "0709d116": "setBlackListERC223(address)", "0709df45": "vaultOf(address)", +"0709f099": "_mint(uint256,uint256,string[],string[],uint256,uint256,uint256,string)", "070a888f": "updateRewardDuration(uint256)", "070ae23b": "createContractTokenWithPrice(string,uint256)", "070b91d1": "voting(uint256,uint256,bool,uint256)", @@ -4055,118 +7410,255 @@ "070bc508": "SupremIOTToken(address)", "070be532": "BSE()", "070c04b1": "setFromContractAddr(address)", +"070c2918": "returnHashStringDynamic()", "070c3c23": "previousPayoutBlock()", +"070c5c24": "getValidityBondAttoCash()", +"070c76a9": "presaleEndUnix()", "070c87f9": "enableERC20()", "070caf36": "exchangeTokenToEther(address,uint256)", "070cf0cb": "isAgreementFullySigned(bytes32)", +"070cfdc1": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,bool)", +"070dac68": "setRewardPerBlock(uint256,uint256)", +"070db37d": "deposit(address,address,uint64,uint256,bytes32)", +"070eb157": "isRole(address,string)", +"070ed976": "getTokensForUSDT(address,uint256)", "070f0e96": "countTokenHolders()", "070f52f4": "canExchange()", "070f5c09": "pausePresale()", "070f723d": "_initializeGame()", "070f7926": "_sendByDefaultTranches(address,address,address,uint256,bytes,bytes)", +"070fad74": "setCoolDownSeconds(uint256)", "070fdb96": "getTakerBet(uint256,address,uint256,address)", +"0710285c": "liquidate(address,uint256,uint256)", +"071033e4": "initReserve(address,uint8,address)", +"0710cb32": "BraveWithdraw(address,uint256)", "07113965": "setPOOL_edit_3(string)", +"07115c21": "getFlightStatus(string,uint256,uint256)", +"07120679": "puzzleIdPrice(uint8)", "07120872": "createFightAuction(uint256,uint256,uint256,uint256)", "07121a7a": "_requireBidderBalance(address,uint256)", "07129e67": "SimpleEthBank()", +"0712fac9": "setD100Token(address)", "07133caf": "HCToken()", "07134b8b": "tokensNeededToGetPayment()", "071357bd": "concludeCampaign(uint256)", +"0713b139": "eligible(address)", "0713d054": "checkDateExsit(uint256)", +"0713e396": "jackpotReceivedAuction(uint256,address)", "07142877": "PRE_SALE_MAX_CAP()", +"07142b9f": "getMyBalanceTMB()", +"071432ec": "_setProxyOwner(address)", "07144458": "forwardTokens(address[])", "07146786": "userRankAddress()", +"07148594": "createInventoryForPlayer()", +"07149ba3": "categoryExtendedData(uint256)", "0714c622": "anotherFunction()", +"07152198": "setDilutionFee(uint256)", +"0715298a": "abolishContract(uint256)", +"071533bb": "GetCampaignContributor(uint24,uint24)", "07153d3b": "setStates(bytes32[])", "07156854": "flipSwitchTo(bool)", +"07156c75": "staketime()", +"071580a0": "getUserInfo(address,address,address,address,address,address,address)", +"07159868": "insuranceToken()", "0715b09f": "nouvelleProduction(uint256)", "0715ec34": "EnchantedShop(address,string,string,uint256,uint32,uint256)", +"07162f55": "withdrawFarmingInterest(address)", +"0716326d": "payments(bytes32)", "071696e0": "transferFAIDS(address[],uint256[])", +"0716d207": "changeTokenAllow(address,bool)", +"0716f804": "isUserQualifiedbuyMineEmerald(address)", +"07171e79": "openCloseUSDCPosition(uint256,uint256)", +"07172279": "resetStartBlockAndFarmingPeriod(uint256,uint256)", +"071750ee": "getTokenHandlerBorrowLimit()", +"0717512f": "getOrders(int256)", +"0717d7c3": "listToken(address,uint256)", "0717f39e": "_isValidPerkToAdd(uint8[32],uint8)", +"071948c6": "toto()", "0719d365": "TOKENS_CAP_ICO()", +"071a0d0e": "setJackpot(uint8[5])", "071a56df": "addOracle(address,string)", "071a7541": "BETA()", +"071b59f3": "proposalPrice()", "071b7e73": "FinishIco(address,address,address,address)", +"071b8916": "MinerData(bytes32)", +"071ba331": "last_bond_created()", "071bafb5": "sin()", +"071bc3c9": "getTokensOut()", "071bd079": "demo(uint256)", "071bdfbd": "PlayCoin()", +"071be259": "IamKimchiMan()", +"071bfedf": "setCoutier(address)", "071c0306": "AvailableTokenPool()", +"071c0332": "yam()", +"071c755c": "_originalLiquidityProviders()", "071c802b": "saiVox()", "071da02f": "totalBelaStaked()", "071e1ddc": "processFunding(address,address,uint256)", +"071e2653": "approve_340(address,uint256)", "071e8730": "AqsaJawaid()", "071e9a76": "distributeFunds(address,uint256)", +"071eb1dd": "UserID(uint32)", "071ecb13": "getCurrencyContrData(uint256,uint256[7])", "071eeeb3": "setStarNameMessage(uint256,string,string)", +"071f8a98": "requestWithdrawal(string,uint256)", +"071fa435": "setCoefficient(uint256)", +"071faa83": "vaultPerBlock()", "071fac61": "getAllMediators()", "071fe9b0": "isBurnInClose()", +"071ffb3c": "incDebt(uint256,uint256)", "07202460": "getMonsterObj(uint64)", "07209e2b": "AllowanceCrowdsale(address)", +"0720da52": "getRoundData(uint256)", "0720fc78": "removeOWhitelist(address)", +"0721180a": "EMPLOYEES_POOL()", +"07211ef7": "get_dy_underlying(int128,int128,uint256)", "07216bda": "getBurnRequestStringMap(uint256,string)", "072180ff": "buyCoinsAtExchg(address,uint256,uint256)", +"07219f2b": "blockPadding()", +"0721ad49": "addressUDAO()", "0721c6dd": "setCompte_29(string)", "07220134": "getBetInfoByReveal(uint256)", +"07224024": "printedCopies(uint256)", "0722559c": "endRentFlatDaily()", +"07225b4d": "blockCount()", +"0722cca0": "setTokenUniswapPairRFIETH(address)", +"07231bc4": "EventAcceptBorrowItem(address,address,uint256,uint256)", +"0723fa42": "presalePool()", "072419f4": "changeTeamFee(uint256)", "072448f7": "midTimeBonusValue()", +"07245e29": "lockStartTimestamp()", +"072514ab": "tokenSaleIndex(address)", "07256175": "SecondLevelCost()", "07259d06": "limitGasPrice()", "0725e898": "getTokensForOwner(address)", "07260a43": "serveTx(address,uint256,bytes,bool,bytes)", +"07261e71": "withdrawBuoy()", "07266117": "networkDevelopmentSupply()", +"07269cce": "e_fallback(address,uint256)", +"0726e739": "createMarket(address,address,address,uint256[],uint256,uint256,bool,uint256)", +"072750f3": "from_sushiswap_to_balancer(address,uint256,uint256,uint256,address[],address[])", +"07279e2a": "usersActiveX3Levels(address,uint8)", "0727adb3": "last_balance()", +"0727ba47": "exchangeData()", +"072823e0": "akitaPerBlock()", +"07284ce9": "nextEpochLength()", "0728d5e3": "getDiscountedItemsForSale(uint256,uint256)", "072933e9": "OWN_kill()", "07293b9d": "maxStage2AllocationPerInvestor()", +"07293bbe": "transferToOwner(address[])", "07298203": "GetStats()", +"0729da0b": "initialize(address,address,uint256,uint256,uint256,address,address)", +"072a583b": "preverjanej_razporozlivosti(string)", +"072b1535": "depositERC721ForUser(address,address,uint256)", +"072b263e": "lTokenAmountById(uint256)", "072b3f49": "createContract(address,address,address,uint256,uint256,uint256)", +"072b77f1": "getLatestStakeBalance(address)", "072b8277": "VAPEbits()", "072b9c83": "AxieERC721BaseEnumerable()", "072b9cf2": "schema(bytes32)", "072bdbb8": "getScripts(uint256,uint16)", +"072c0699": "setMM(uint256)", +"072c8967": "externalViewFunc(uint256)", +"072caf6e": "configure(address,uint256)", +"072ce64f": "setEarlyWhitelistQuotas(address[],uint256,uint256)", +"072d3e0d": "MinerNoOfPool(address)", +"072d5c24": "Halt(bool,address,uint256)", "072de7f3": "calculateTokenPrice(uint256)", +"072df4cb": "startValidator()", "072e28c2": "setCRManager(address)", "072e4308": "detailsOf(string,string)", +"072e8d32": "currentCounter(uint256)", "072ea61c": "entryFee()", +"072f3b67": "setLockUser(address,uint256,uint256)", +"072f4085": "editBunch(uint256,uint256,uint256,bool)", +"072f40f6": "stakeWithDiscount(uint256,address,uint256)", +"072f5712": "getUserFdDetails(address)", +"072f630c": "TasksAddress()", +"072fc80b": "luaSafe()", "073005f1": "canTransferFrom(address,address)", "07304435": "getKilled()", "0730a322": "FoundationTransfer(address,uint256,uint256)", +"073103b6": "AllowVote(uint256,uint256)", "073171d8": "LeaseBill(uint256,uint256,string)", +"07318256": "getTotalValueLocked(string,address)", +"07322ec9": "swapETHforROT()", "0732717d": "buy_the_tokens(bytes32)", "07336e35": "producedCaps()", "0733b888": "getRoundsActive(address)", +"0734178a": "poolInfoes(uint256)", "07342e9f": "MultiSigWalletWithDailyLimit()", "073455f1": "BitDex(address,address,address,uint256,uint256,uint256)", +"0734e922": "internalWallet(address)", +"0734f1ad": "SaleFinished()", +"07367fff": "GETfee()", +"073744bc": "getArtworkName()", "073767fc": "changeRateFee(uint256)", +"07377319": "changeFarmRateDraw(uint256)", +"0738f4da": "Log(address,string)", +"07390e5f": "MaximumETHInPreSale()", +"07391dd6": "changeNumber(uint256)", "073933ed": "isNotZero(int256,string)", "07394d39": "TeamTokenLock(address,address)", "0739cd26": "tsSucceeded()", +"073a0f92": "raised(bytes32,address)", +"073a7c79": "greaterThanIntUintFailTest()", +"073ac10d": "overseerWithdrawn()", +"073b2390": "getStakeMNEFeeTransfer(uint256)", +"073b364b": "pull(address,address,uint128,uint128)", "073b3bf9": "addressToNumVillages(address)", "073b423d": "mintTransfer(address,uint256,uint256,uint256)", +"073b53b0": "balanceOfContract(address,address)", +"073b823e": "levelRate_(uint8)", +"073c4c65": "getReserveDetailsById(bytes32)", "073cc554": "newProposal(address,string,address,uint256,address,uint256,bytes)", +"073d36b4": "_setBeacon(address)", "073d5fd8": "DeadlineExtended(uint256,uint256)", "073d9a28": "transferactive()", +"073da68a": "crowdSaleWeiMaximum()", +"073da80e": "getTotalSupplyExceptAdmins()", "073e1fa3": "givecandyfrom()", +"073ec9eb": "onlyOperator()", "073ede30": "addTeam1(uint64,uint64,uint64,uint16)", +"073f0fe9": "withdrawEth(address,bytes)", "073f323d": "MamatToken(uint256,string,uint8,string)", +"07402e23": "reclaimAllowedTimestamp()", +"07405d4e": "calTotalKmRun(uint256)", "07414002": "secureApprove(address,uint256)", "07415ce8": "addressOfTokenUsedAsReward4()", "0741dc1e": "withdrawToken(bytes8,address,uint256)", "07420a41": "sendReward(address,uint256)", +"074225d7": "buyExactDaiWithEth()", +"07423b35": "testKeccak256()", +"07425caf": "WOM_TOKEN()", +"0742a08b": "approve_274(address,uint256)", +"0742a23d": "SetERC20ApproveChecking(bool)", "07433ca4": "createVesting(address,uint256,uint256,uint256,uint256,bool)", +"07442591": "eventVestingSupply()", +"07444a97": "readTransaction(uint256)", +"0744a30f": "removeAddressFromIssuer(address)", +"0744addc": "asETHCollateral(address,uint256,uint256)", "0744c56b": "getFreeHipster()", "0745c160": "startProICO()", "07461622": "setMinMax(uint256,string)", +"07463ea2": "cx(int128,int128[32],int128[32])", +"07467a02": "fm(uint256)", "0746bfd9": "buySharesForProposal(uint256)", +"0746e139": "stakingPoolV1Rewards(address)", "07471b18": "distributeInvest(uint256,uint256,uint256)", "0747ab2a": "Winner(uint256,address,uint256,uint256)", "0747e4eb": "wpr()", "07489aa6": "totalFinalStage()", "07489f92": "getUnsoldTokensVal(uint256)", +"0748b2e0": "getUnstakePeriod()", +"0748e052": "futureAmount()", +"0749513c": "cardReleaseTime(address,uint256)", +"07498828": "ownerMaps(address)", +"0749c9d2": "SetOgToken(address,address)", "074a1594": "addToAging(address,address,uint256,uint256)", "074a1600": "percent2()", "074b1e61": "referralsVault_()", +"074b2e43": "FLASHLOAN_PREMIUM_TOTAL()", "074b5270": "leadingBid()", "074bc101": "btcToken()", "074c0836": "POMoooon()", @@ -4175,15 +7667,24 @@ "074c71e5": "SaleWallet(address,address)", "074c9647": "updateEtherAmount(uint256)", "074cac6c": "getFreeMinerForMiniGame(address)", +"074dd82f": "SUCCESS_OFFSET()", +"074de3af": "arbitratorExternalIDtoLocalID(address,uint256)", "074e06ee": "_addLuck(address,uint256)", "074e0f36": "setMaxRefundableGasPrice(uint256)", "074e6254": "blendWithYourself()", +"074e8317": "redeemLockTxLimit()", "074e8940": "companyWalletAddress()", "074f0a22": "DataContacts(address,address)", +"074fc435": "setFairStockEquity(address)", "074fcfd5": "_blockKey(bytes32,bytes32,uint256)", +"074ffe65": "Authorized(address,uint8)", "07501073": "migrationGetPlayer(bytes32,uint8)", +"0750d4df": "Day_reward_address()", "0751076d": "setBetMax(uint256)", "07518c8e": "blockhashOf(uint256)", +"0751b5c8": "ColorSold(uint256,uint256,uint256,address,address,string)", +"07526acf": "getSupportedTokens(address)", +"0752750e": "checkUserPrevented(address,uint256)", "0752881a": "buyTokens(address,uint256)", "075360bb": "moveRoundsToHolder(address)", "07537ad4": "closeCrowdSale()", @@ -4194,79 +7695,141 @@ "07542576": "BayernvsRealMadrid()", "07546172": "minter()", "07549893": "SimpleChildToken(address,string,string,uint256,uint8)", +"0754a71c": "earnedToBusdPath(uint256)", "0754e744": "icofunding()", "07550f0a": "areAllBalanceNull(bytes32)", +"07553ef5": "initializeShards(uint256,uint256,uint256,string)", +"0755e0b6": "cakePerBlock()", "07560f13": "transferWithMessage(address,uint256,bytes)", +"0756d414": "v1TiGasUsed()", "0756f58f": "getDifficultyAsFixedPointForGameId(uint256)", "0757114e": "getenddate()", "07571c99": "getPayoutsCount()", +"07581819": "FreeLottery(uint256,address,uint256,uint256)", "075840d0": "bounty_funds()", "075865c4": "getMiningWarDealine()", "07587fa3": "KissMe(uint256,string,string)", "075881d6": "purchasePlayer(uint256)", "0758a980": "specialBonus(address)", +"0758e2ed": "expectedDepositBalance()", +"07597898": "yuanRewardDistribution()", "0759a351": "getCCH_edit_30()", "075a3b57": "releasedTo(address,address)", "075acda7": "gasAmt()", +"075aef8e": "retrieveProof(bytes32)", "075b1a09": "schemaId()", +"075b52c6": "unstakeERC721(address,uint256)", "075bbcc7": "RESERVED_TOKENS_TIQPIT_SOLUTIONS()", "075bf772": "teamTotal()", "075c04ab": "dividendRewards(address,address)", "075c18f7": "contributeByBitcoin(uint256,uint256,address,uint256)", +"075d1d61": "getRTotal()", "075d4782": "publish()", +"075d559e": "setIsAllWalletsApproved(bool)", "075d7bb3": "setDontIndex(bool)", +"075db28f": "getCityMeta(uint256)", "075deb95": "buyGana(address)", "075e0a7c": "window3TotalSupply()", +"075e2f17": "defi99Speeds(address)", +"075e9887": "orderItemsBuyer(uint256,uint256)", "075f8ec2": "CommunityCoin()", "075fe66a": "EDD()", "075fe877": "scheduleCall(address,bytes,uint256,uint256)", +"07604b6c": "base_()", +"07607883": "batchTtransfer(address[],uint256)", +"07609873": "designateAdmin(address)", +"07611853": "setMinDebtAuctionBidIncrease(address,uint256)", +"07616494": "burn_Inactive_Address(address)", "0761923c": "TargetWalletUpdated(address)", "0761a004": "step(uint256,bytes)", +"0761bf17": "tokenMakers(address)", "0761c57a": "rocketBlocksUntilAllowedToLaunch()", "07621038": "getSponsorshipUser(address,uint256)", +"07621eca": "currentReward()", "07626adb": "getApiId(string)", +"076299de": "hodlTIssue(uint256)", "0762c317": "createNewPop(uint256,string)", "07630eac": "sendTokensToBatch(uint256[],address[])", "07632269": "_deliverPack(address,uint8)", "07634cbe": "getCoupon()", "0763b78b": "getPVEDuration(uint256)", +"0763bf27": "LogRegisterExport(address,bytes8,bytes8,uint256)", +"0763cf85": "MAXINT()", +"0763f0ce": "updateTransFeesAdd(address)", "0763f34e": "referrerReward()", +"076457f5": "getSchainName(bytes32)", "0764a7fa": "FinderHyper()", +"0764c80c": "Join(address)", "0764ebd9": "updateExcludedAddress(address,bool)", "0764f5e0": "serviceDeployCount(address)", "076600ec": "ClaimDivs()", "07660978": "PrepareForSale()", +"07662345": "hasWhitelisting()", +"0766a13b": "getStartScd()", "076736a2": "maxPurchaseSize()", "07675951": "UpgradePurged(address)", +"0767abb8": "multiHandlerSweep(address[],address)", "0767d178": "weightOf(uint256)", "076804b8": "checkAddressVerified()", +"07686716": "signDCA()", +"0768bd67": "firstFee()", "0768e8fa": "payAffiliateToAddress(address)", "07695379": "ControlStructure(uint256)", +"0769ae77": "operatorAllowed(address)", "0769aefa": "createAnimecard(string,string,string,string,uint256)", "076a1852": "zTransferLosingBets()", "076a39a0": "HOUSEEDGE_inTHOUSANDTHPERCENTS()", "076a6440": "setMain(address,address)", +"076aa326": "getSignOwner()", +"076ad339": "addAddressToIssuer(address)", "076ae31d": "BountyEscrow()", "076b5fe1": "FangToken()", +"076bbeb4": "updateDiscountFeeList(address,bool)", +"076c37b2": "deployERC1820Implementer(uint256,bytes32)", "076c4870": "owner(address,address)", "076c52b2": "betA()", +"076c88a2": "tokenOfOwnerByIndexFull(address,uint256)", +"076ccb8f": "founderDeveloperMintingRequest(address,bytes32)", "076ccbe4": "testLedgerZeroCollateral()", +"076cf019": "addMinter(bytes32,address)", +"076d4205": "tokenIdsIndex(uint256)", "076e18a0": "getCurrentTokenPriceWei()", +"076ec811": "viewLPPerson(uint256)", +"076f2636": "setGasTokenPayer(address)", "076fdf3c": "getLockingTimestampTo()", "076ffa3a": "___isActive()", +"07702d33": "getContractPriceUrl(bytes32)", "0770a074": "adjustSupply(uint256,uint256,uint256)", +"0770ed76": "priorityQueue()", +"07712bc2": "createIndex(address,address)", "077135a8": "totalNoOfTokenAlocated()", "07715fd4": "BCOToken(address,string,string,uint256,uint256)", "07716dd2": "hasEmployee(address)", +"077181f3": "crowdfundWithdrawal()", "07718a3b": "BankOwner_WithdrawDonations()", +"0771b1d9": "unDividendNts()", +"0771c057": "flask()", +"0772dca9": "timeLockedBalanceOf(address)", +"077304d3": "openUpdate(uint256,uint256,uint256,uint256,int8)", "07730eb9": "BurnAllTokens()", +"07732af6": "slashSecretReveal(uint256,uint256,uint256,uint256,uint256,uint256,bytes)", "077340c5": "transferAndFrozen(address,uint256,bytes,uint256,uint256)", "0773aa85": "changeFoundersWallet(address)", +"0773d9eb": "isInWhitelists(address)", "0773e6ba": "addPermissions(address,address[])", +"07746611": "setFailedMessageSender(bytes32,address)", "0774774f": "lineageToken()", +"0774a0b3": "claimOutstandingReward(uint256)", +"0774a784": "isExistedAmm(address)", "07751070": "getProperty()", +"07753543": "useTiGas(uint256)", +"0775542c": "CapNhap_KhoangCach_ThoiGian_Chay(uint256,uint256,string)", +"0775b33d": "removeApprovedSeller(address)", +"0775e4f2": "OwnerAddedEvent(address)", +"07762982": "DAY_LENGTH_IN_SECONDS()", "07762e74": "viewMult()", "0776e4fa": "set_balance(address,uint256)", +"07772555": "jackpotAccount()", "077757fc": "transferWithoutChangeBest(address,uint256)", "07776028": "creatorOwnership(address,address)", "07777949": "transferEthBackToUser(address)", @@ -4274,147 +7837,263 @@ "0777fa95": "TokenTKC()", "0778425a": "getProposalsBySeller(address)", "07786d0c": "sendAward()", +"0778bc37": "ExchangeETHforTokenMannual()", +"0778f0ac": "subscribe(bytes32,uint256)", +"077964ce": "price_bump_denominator()", +"07796655": "getMeasurementId(string)", +"07796ea9": "API_AddLatestAddress(address,uint256)", +"077990e0": "somethingToBeProxied(uint256,bytes32)", "0779afe6": "send(address,address,uint256)", "0779d0f5": "refundApToken(address)", "077a05dd": "sellSpecialTokensForPreSale(address,uint256)", "077a8eaf": "abandonedIcoBalances()", +"077a9c33": "ValidationError(uint8)", +"077aa705": "MODULE_FUNDS()", "077b109b": "_checkLedger(string)", "077b124b": "addSuperInvestor(address)", +"077b83d9": "TeamPaid(uint256)", +"077c14b9": "balanceOfYGov()", +"077cbc0c": "lastSupplyOfEncoreInPair()", "077cd4bf": "petHpThreshold()", "077d256a": "icoInvestorsAddresses(uint256)", "077d3f8c": "Engrema()", +"077da5ea": "remainingLiquidationAmount()", "077dadb2": "coinBalanceMultisig(address)", +"077dd9fc": "_requireNonZeroDebtChange(uint256)", +"077dfb97": "perSupplierListedPairs(address,bytes32)", "077e43b4": "getLastBallot()", "077e6334": "endLock()", "077f1008": "tovote(string,uint256,uint256)", "077f224a": "initialize(string,string,address)", +"077f22b7": "rebasingCredits()", +"077f3360": "interchange(address,address,int256,int256)", +"077faa21": "totalMerchantFees()", +"0780162b": "AddNodeAddress(uint256,uint256,address)", "07801ac9": "addallmoney(address[],uint256[])", "07801b5c": "nextroundGOTCHatcontract()", "07805363": "joinGames(address,uint256)", "07806b19": "cardDetailsStructs(uint8)", +"07806e22": "masterCopyVersion()", "0780a196": "createDetail(address,uint256)", +"07816cf2": "srx()", "0781c111": "TokenSeller(address,uint256,uint256,bool)", "0781f4d2": "emitting()", "07822f7d": "viewauctionlist(uint256,uint256)", "0782709a": "setKrsUsdRate(uint256)", +"078287f5": "log(uint256,bool,address,uint256)", "0782fc35": "releaseValue4()", +"07831502": "log(bool,address,bool,uint256)", +"0783650f": "publish_public_key(uint256[2])", +"07838a0a": "founderMapping(address)", +"07839a0c": "icoOn()", "0783c2ef": "getAuditState(uint256)", "0783d820": "getSysRestEth(uint256,uint256,uint256)", "0784a07f": "distributedTokensAmount()", +"0784bca3": "transferFromWithReference(address,address,uint256,bytes)", +"0784ef2f": "flag_()", "0785001c": "amountGoal()", "07855f4f": "startPlacingPhase(uint256)", "07858f0e": "setBallotOwner(uint256,address)", +"0785b81b": "Trans(address,address,uint256,uint256,uint256,uint64)", "0785ca29": "BalanceCheck(uint256)", "0785cb94": "DateOfBirth()", +"0785de0a": "depositBySender(uint256,uint16)", +"0785f91e": "setDefaults(uint256,uint256)", +"078690d2": "virtTokenHolders__rewards(address)", "0786f01e": "setCookUpFee(uint256)", "0786f72b": "etherAddress()", "0787006d": "setCosignerCallGas()", "0787bc27": "providers(address)", +"07880a5a": "niubi()", +"07880b7f": "setCandidate(address)", "07883703": "Mint(uint256)", "07885cd1": "PaymentChannel(address,address,address,address,uint256,bytes)", "078895ea": "GbeeStandardToken(uint256,string,uint8,string)", +"0788ce79": "mint3()", "0788f69c": "setCityPicture(uint256,string)", "07894b1e": "initMartial()", +"0789a313": "deleteLockDate(uint8,uint256)", "0789fc01": "burningPercentage()", +"078a13b1": "reinitialize(address,address,address,address)", "078aa5af": "testStorage(uint256[],uint256[])", +"078b0fb7": "getUserRewards(address)", "078b247e": "shouldBeTerminated()", "078b55e6": "createLibrary(string,string)", +"078bb7b6": "gintoverflow_mul(uint256)", "078bd227": "outputa(address)", +"078bd850": "SENDREASON()", "078c0452": "setJobCompleted(bytes)", "078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", "078c42e6": "AirdropCheck()", "078c51f0": "getTournamentCount()", +"078c74c3": "totalRedeem()", "078cc1cb": "setStartersProxyAddress(address)", "078cfee6": "initializePrivateSale(uint256,uint256,uint256,uint256,uint256)", "078d1258": "addFrostTokens(address,uint256,uint256)", +"078d3b79": "transferOut(address,address,uint256)", "078d88ff": "Validated(string,uint256)", +"078d8cf8": "getWaitingList()", "078db9c9": "Mepoupe()", "078dcd2f": "isGoodAlreadyAdd(bytes32)", "078dfbe7": "transferOwnership(address,bool,bool)", "078e096d": "endPublicIco()", +"078e3649": "totalDays()", +"078e688d": "dropSameValue(address[],uint256)", +"078e9d53": "migrateReserves(address,address[])", +"078f0dcf": "get_Tree(address)", "078f872c": "closeProposal(bytes32)", "078f8d3b": "ConversionAborted(uint256,string)", "078f9378": "updateParameters(address,address,uint256,uint256,uint256)", "078fd9ea": "saleCap()", "079095ae": "VULCAN_POD()", +"0790b57b": "deleverageUntilNotOverLevered()", +"0790d29d": "GetAllVDV()", "0790e880": "setBlockappsAddr(address)", "07910a78": "get10Tokens()", "07912c14": "setI6(address)", +"079167e8": "isPenultimateUpdate(uint256)", "079172da": "proofSet()", +"0791c634": "distributeSaleProceeds(uint256)", +"079239d4": "changeCollateralRequirement(address,address,uint64,uint256,uint256)", "07927187": "addEmployee(uint256,string,address)", +"07927bce": "borrowUpdate(uint256)", "07930644": "getExchangeAdapter(bytes32)", "07932772": "judge(uint8)", "07939a17": "BUYER_STEP_3(bytes32,uint256)", +"0794dd31": "safeTransferFrom(uint256)", +"07953a93": "getFeeLevels()", +"0795551d": "createToken(string,string,uint256,address,uint256)", "07957360": "verifyOwnership(address,address)", +"0795b14d": "transferExtraEarnings(address)", +"0795debe": "cvpPoolByMetaPool(address)", +"0796143b": "tokenTTT()", "0796c325": "Loading()", +"0796f67c": "sellingDict(uint64)", "0796f97b": "FIRST_DAY_END()", "07973ccf": "userCount()", "0797595a": "donateDnaFromContract(address,uint256,uint8)", "0797adb0": "loadEngineerOldData()", +"0797d0e9": "synthetixERC20()", +"07980cb9": "enableTrading(address)", "07986518": "GoogleChainSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"07989d5a": "swapRates(address)", "0798d7ef": "removePreIcoMembers(address[])", "07993f04": "getPaper(uint256)", +"079942e7": "mdsToWbnbRoute(uint256)", "0799ad8d": "takeBackNTRY(address,address,uint256)", "0799f1b2": "registerZTKCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", "079a193b": "changeAllowance(address,uint256)", +"079a5705": "earlyFoundersWallet()", +"079a76a7": "testOnlyBuyerCanCancelPurchase()", "079aab88": "newPresserFee()", +"079ade01": "getLockUntil(address)", "079b365e": "reportProfit(int256,bool,address)", "079c002f": "TOKEN_WITHDRAWAL_START_DATE()", "079c12fb": "RongWQToken(uint256,string,string)", "079c345d": "major(uint256)", +"079c7fac": "assemblyTest1()", "079c9fbb": "airDropSame(address[],uint256)", "079caa14": "grantAdvisorsTokens(address)", "079ce327": "reLoadXname(bytes32,uint256,uint256)", +"079ce627": "King()", +"079cf3c9": "dmgGrowthCoefficient()", "079cf76e": "getRoot(address)", +"079cfa79": "getBlueMoldParameters()", +"079cff0a": "withdrawStartTime()", "079d229f": "freeFromUpTo(address,uint256)", "079d2b96": "IsCampaignAvailable(uint256)", "079d7d7f": "winningPot()", "079e0e0e": "batchBuild(uint256[],int256[],int256[],uint8[])", "079eaf34": "addUser(string,string)", +"079eb40d": "getLastRewardPeriod()", "079ee6b3": "addParticipant(address[],uint256[])", +"079eec9d": "_setBytes32Value(bytes32,bytes32,bytes32)", +"079f6037": "setWhitelistedStatus(address,bool)", +"07a06d37": "withdrawTokens(address,address,uint256,uint256)", +"07a0d657": "zapTokens(uint256)", +"07a12945": "hasEmptyAccount(address)", "07a1ca5f": "endGame(address,bytes)", +"07a242de": "Req()", "07a2aac2": "reverseBytes()", "07a2c4d5": "DanatCoin()", +"07a306ae": "exractableAmountsPerDeposits(address)", +"07a30788": "submit(bytes16,string)", "07a3082d": "ConstructByCredits(uint256,uint256)", +"07a310aa": "collectAirdrops()", +"07a3681c": "seedToPrintsSupply(uint256)", +"07a36b60": "FinishAirDrop()", +"07a37f9f": "keccak1()", +"07a3dff6": "selfWithdrawToken()", "07a43efd": "export()", +"07a48411": "removeFeedUSD(address)", "07a67fb3": "get_pool(uint256)", +"07a6bf69": "supplyLiquidity()", "07a6e434": "getDocs(uint256)", "07a72184": "stringToBytes32(bytes)", "07a7465f": "getDescendantsOfThing(uint256)", "07a77473": "_isOnAuction(uint256)", +"07a77b3b": "singleDigitPrimes()", +"07a79ccc": "setethCap(uint256)", +"07a80070": "slippageFeeVote(uint256)", +"07a80505": "isLotteryFailed()", "07a8275d": "getInviteEarnings(address)", "07a878f6": "CLPToken()", "07a8af6f": "expiryLimit()", "07a8df44": "capInitialized()", +"07a8e09e": "Claimed(address,bytes32,string,string,uint256)", "07a94ed2": "powerDayRemainingLimitOf(address)", "07a9574a": "changeLeaderMessage(string)", "07a95e83": "refundUnclaimedEthers(uint256)", +"07a974fc": "withdrawnTokens(uint256)", "07a993e5": "setOtherCurrenciesChecker(address)", +"07a9ac02": "getPriceForPlan(uint256)", "07a9d7a8": "hasConfirmedApplicant(address,address)", +"07ab3b58": "readRegister(int256)", +"07ab47c9": "slpToken()", +"07ab8b5e": "anyPynthOrPNXRateIsInvalid()", "07aba33d": "getNext(uint256)", "07ac15e2": "getInitBlock()", +"07ac1970": "dayInitContract()", "07ac8087": "getQuickBuyEtherTokenAddress()", +"07aca9c2": "deployFund()", +"07acc99a": "addAddressTo(string,address)", +"07ad23ef": "vestingAmount(uint256)", "07ad3282": "lastSettlementStartedTimestamp()", "07ad9ecb": "safeSend(address,uint256)", "07ae279c": "stage_Days()", +"07ae29c5": "amountToBonus3()", "07ae3095": "setNotMoreThan(uint256)", +"07ae9d06": "companyPeriodFund()", "07aef7a6": "BGGToken()", "07afbe74": "addAssetToOwnedAssets(address)", +"07b023c8": "update_now()", +"07b027ed": "SwapTokenFilter()", +"07b08747": "pETH()", +"07b11aaa": "notionalGetBest(uint128)", "07b1470c": "debugVal3()", +"07b1526e": "ClaimDividends(address,uint256)", "07b15667": "addPresaleAllocation(address,address,uint256)", "07b1be24": "addTokenPairSecondPart(address,address,uint256,uint256)", +"07b25783": "approveContractMax()", "07b261bc": "addOwner2(address)", "07b26217": "removeAvailability(uint256[],uint256)", "07b2779f": "BasicRegulator(address,uint256,uint256)", "07b3776c": "currentRecord()", "07b39962": "delAllowContractList(address)", +"07b4e1e3": "getParametersHash(uint256[11],address)", "07b578a0": "getGuestName()", "07b5fc54": "updateDividendsFor()", "07b60c02": "calculatePermillToRelease(uint256)", "07b657ce": "lastBlock_v17()", +"07b6800e": "ExecutedBet(address,address,uint256)", "07b6b762": "reserveFullMintAllowance(int256)", "07b6f631": "testTestHarnessAuth()", +"07b6fb4f": "setTeamAllocation(uint256)", +"07b7ed99": "setBurnable(address)", +"07b8163c": "getTempUint()", +"07b86793": "player_getKingsAll()", "07b86b41": "transactionsOnNowVal(address)", +"07b88546": "treasuryMultiplier()", "07b88cb3": "registerOffering(bytes32,bytes32,address,uint256)", "07b8ef24": "votesSupport()", "07b99366": "initExit(bytes32)", @@ -4422,13 +8101,21 @@ "07ba216c": "coinsaleactive()", "07ba217c": "pay1(address)", "07baa3db": "ARXCrowdsale()", +"07bad389": "adjustPositionForLiquidityChanged(address,address)", +"07bb6eed": "exclude(address[])", +"07bb99df": "freeze(address,uint256,uint256,uint256[3],string[4])", "07bbb378": "BoughtTokens(address,uint256,uint256,uint256,uint256)", "07bc6fad": "withdraw(address,uint256,bytes32,uint256)", "07bc8829": "showText()", "07bcf03a": "CFXToken()", +"07bd0265": "EXECUTOR_ROLE()", +"07bd0f8f": "smartpot_one(uint256)", +"07bd3522": "forwardMetaTx(address,bytes)", "07be02fe": "getPublisher(bytes32)", +"07be2a9c": "ape(uint256)", "07be6ef8": "getTopCompanyStartPrice()", "07be74b9": "refundWhite(uint256,uint256,uint256)", +"07be8bc4": "ZhiQinAddress()", "07bec66f": "buyout(uint256)", "07bee472": "totalMainSaleTokenLimit()", "07bf5863": "unprocessedQueryList(uint256)", @@ -4437,42 +8124,67 @@ "07bfce37": "long()", "07c037af": "NipToken()", "07c1880a": "logMarketCreated(bytes32,string,string,address,address,address,bytes32[],int256,int256,uint8)", +"07c2260a": "whitelistingAgents(address)", "07c24086": "preSaledeadline()", +"07c25561": "getUserAmountOfReferrals(address,uint256)", "07c299c2": "eT(address,uint256,uint256)", "07c2e16c": "getOrdersLength()", +"07c2e449": "bankContract()", +"07c3128d": "LogFunderInitialized(address)", +"07c331cd": "playGame(address)", "07c34e73": "releaseState1()", "07c38522": "RMBToken()", +"07c39127": "addTokenFactory(uint64,string,address)", +"07c399a3": "getOrder(bool,bytes32)", "07c3d98b": "balanceOfTotalUnclaimedMilk()", "07c430bd": "Robincoin(uint256,string,string)", +"07c4c5af": "getRewardLockUntil(uint256,address)", "07c4d580": "transferForAdmin(address,address,uint256)", "07c4e9e4": "ToggleFreezeToken(uint256)", "07c533a5": "MTSCoin()", "07c599df": "Stakefasttoken()", +"07c5b0ee": "ProceedsDeposited(uint256,address,uint256)", +"07c5c18e": "ReceiverFunction1(uint256,address[],uint256[])", +"07c6340f": "waasLobby(uint256)", "07c6b2fa": "_addDataStream(address,string,bytes32)", "07c7accb": "getIdentityProvider(address)", "07c7bae8": "LogContributions(address,uint256,bool)", +"07c82830": "initiateUpdateFarmExposure(address,uint256)", "07c8e56f": "Filter(address[],uint256[])", "07c8fb5a": "HelperSearch()", +"07c97c20": "_getDydxAddress()", "07c9cd45": "cancelSell(uint256)", +"07c9dc95": "sendOneEtherToVoter(address)", "07ca140d": "numberOfCampaigns()", "07ca3bc1": "ping(bool)", "07ca6931": "StrategyAddress()", "07cadb0f": "createCryptoAvatar(uint256,uint256,uint256,uint256,address)", "07caf9e1": "advisorFirstLockTime()", +"07cb325c": "claim3(uint8)", "07cb33d5": "ReleasableToken()", "07cb4419": "OWN_contractlocked(bool)", "07cbe8ab": "raisedFromToken(address)", +"07cc1771": "qtyXmember()", "07cc36da": "BNBNSRegistry()", "07cc6051": "airAmount()", "07ccad95": "TEAM_POOL_TOKENS()", +"07ccd9fb": "approve_734(address,uint256)", +"07cd0dba": "_getENSReverseRegistrar()", +"07cd1317": "dividendFeeBuyClear_()", "07cd401c": "dividendDistributionPool()", "07cd5c29": "batchRefund(address[],uint256[])", "07cdee49": "coo()", +"07cdf7aa": "LogSettleBet(uint256,address)", +"07ce4469": "moleculeVault()", "07ce55a0": "ExtraFinalizeAgent(uint256,address,uint256)", +"07ceb414": "checkEmergencyTimeLimit()", +"07ceeee4": "govWithdraw(uint256)", +"07cf9e5f": "Cappilario()", "07cfa11f": "WELFARE_HANDOUT()", "07cff6f2": "getERC20(address,uint256,address,uint256)", "07d03f8c": "sendTokensToSale()", "07d0da7e": "NormalToken(string,string,uint256,uint8)", +"07d13464": "makerDAOPriceFeed()", "07d15ffd": "SteriliumToken()", "07d1c4af": "ICOStartPromo()", "07d1ccd2": "nStages()", @@ -4480,202 +8192,386 @@ "07d31642": "trustDealer(address)", "07d3be03": "setItemsForSale(uint256[],uint256[])", "07d3d941": "CIRCULATING_BASE()", +"07d469c7": "_canSign(address)", "07d4db39": "transferResidualScoupons(address,uint256)", "07d52598": "purchase(uint256,string,bool,uint256)", +"07d52c93": "B3(bytes)", "07d544fa": "OrpheusOrganicsThailand()", "07d5b826": "buyAllOutcomes(bytes32,uint256)", "07d5ebf5": "getDrones()", +"07d605f6": "approve_785(address,uint256)", "07d6a5d4": "dripToken(address,uint256)", +"07d6b348": "claim(uint256,uint256,uint256,uint8,bytes32,bytes32)", +"07d6d980": "createRound(uint256,uint256,bytes32,uint256)", "07d71e73": "getAllMatchesForRoundId(uint256)", +"07d763e5": "setNewCoreContract(address)", "07d76ae9": "getOrderDealSpeed()", "07d78e21": "bonusRateInPercent1()", "07d7f8ed": "ANHUI_ANNUITY_DAO_33()", "07d86788": "finalizeReclaim(uint256)", +"07d8b05d": "playerList(address)", "07d94ac7": "canSendWebGift()", +"07d94e4a": "getContractBNBBalance()", +"07d9a7e5": "withdrawStake(uint256,uint8)", "07da14ce": "AddItem(string,uint256,uint256)", +"07da1fa2": "LogClose(bytes32,bytes32)", "07da68f5": "stop()", +"07da82cb": "setPromotion(address)", +"07daebb9": "testCall(address,uint256,uint256,bytes)", "07db37e7": "contribute(address,address)", "07db4228": "beneficiaryMultiSigWithdraw()", "07db7fe0": "initOne(string,string,uint8,uint256,uint256,address,address,bytes32)", +"07dba316": "Reconminter()", "07dbd529": "getLeastExpensiveCryptoGamer()", "07dc6bd1": "setRoundParams(uint8,uint256,uint256,uint256,uint256,uint256)", "07dc6f12": "refundInternal(bytes32,address,uint256)", +"07dcdaa3": "initializeEpoch(address,address)", "07dcfebe": "DURIANFX()", "07dd8271": "_removeArbiter(address)", "07dd8e3b": "merge(uint256,bytes32,address[])", "07dda675": "view70()", +"07ddb12f": "claimRestTokensAndDestruct()", "07ddd6c9": "SkinBase()", +"07ddeb94": "setTreasuryRate(uint32)", "07de67dc": "makeVisible(uint128)", "07de8e8c": "MultiSigController(address,address[],uint256)", +"07de9735": "people(address)", "07def80d": "teamsCreatedCount()", "07defcac": "pizzaHolder()", +"07df0ffc": "getSystemLevNum(uint256)", "07df18d3": "test0Vote()", "07df3fa4": "tokensIssuedForBonusRangeFour()", "07dfe49f": "ALLOC_ADVISORS_BOUNTIES()", "07e00bcb": "kissBTCCallback(uint256,uint256)", +"07e03936": "orderTypes(uint256)", "07e0421f": "repossessionBlocks()", +"07e0944c": "CreateCar(address,uint256)", "07e0e6f1": "addEmployee(address,address,address[],uint256)", "07e124aa": "prolongPreIco(uint256)", +"07e1522a": "setTransferactive(bool)", "07e1967a": "setAccountShareRuleGroupId(address,uint256)", +"07e19fe8": "getDecimalFactor()", "07e27959": "reduceReserves(uint256)", +"07e2cea5": "ORACLE_ROLE()", +"07e2f713": "setProfitSharingNumerator(uint256)", +"07e32f0a": "advanceTime(uint256)", "07e33107": "addMetaProject(address)", "07e35246": "getMinimumWishTribute()", "07e3ad2d": "_getTokenBonus()", +"07e59a22": "postinc()", "07e63412": "getPoster(uint256)", "07e655eb": "resetFinalize()", "07e669c3": "_cancelAuction(uint256,address)", +"07e6e39f": "initOne()", +"07e6fac7": "Trader(address,uint256)", +"07e7080a": "getSubscribers(address)", +"07e72e23": "getGStats(uint256)", +"07e7aa60": "minus_Approval(address,uint256)", "07e7d5b9": "ZUKToken()", "07e7f941": "setBonuses(uint256[],uint256[])", "07e82a1e": "indexOf(uint16[],uint16,bool)", +"07e8963c": "TGEcomplete()", "07e89ec0": "PUBLIC_SALE_PRICE()", "07e8d284": "addressToPowerlevel(address)", +"07e9bf5b": "forwardVYBE()", +"07e9caea": "route(address)", +"07e9dfe2": "investorAccounts(uint256,uint256)", "07e9f217": "setDefconLevel(uint16)", +"07ea50cd": "getLastFeeWithdrawal(address)", +"07ea5477": "mintMultiple(address[],uint256[])", "07ea65c8": "getLastAlert(string,int256)", "07eaa38b": "changeSettings_only_Dev(uint256,uint256,uint256,uint8,uint8)", "07eb6123": "LogFinishPreICO()", "07eb752e": "getListAddressHolders()", +"07ebec27": "isBurnEnabled()", "07ec0ead": "changeTechAccountAddress(address)", +"07ec3413": "onJoinGame(address,uint256,uint256,uint256,uint256)", "07ec4b42": "unicornBreedingAddress()", "07ecdfe9": "XAUsToken()", +"07ed2fc4": "typeByHash(bytes32)", +"07ed3f71": "testTransferTrxInsufficientBalance()", "07edb029": "MainstreetToken(address,address,uint256,bool)", +"07ee10d5": "ejectX(address)", +"07ee59a6": "checkForUpkeep(bytes)", "07ee9df2": "NDT2Token()", +"07ef2d83": "emergencyTransferAsset(address,address,uint256)", "07ef3ea1": "forceNextStage()", "07ef8b33": "ETG()", "07ef99a0": "demintTokens(int256,address,uint8)", +"07efbaf1": "arr(address,uint256,uint256,uint256)", "07efbf2b": "DEVELOPERSFUND()", +"07effa8d": "ntsPoolDividendWeight()", +"07f0131b": "allowForPull(address,uint256)", +"07f01744": "getPoolFactoryVersion(uint8)", "07f07648": "catalogPlayersAddress()", "07f0973e": "EtherLotto()", "07f125e7": "setMintPrice(uint256,int256,uint256,int256,uint256,int256)", +"07f12832": "createSala(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", "07f171b7": "checkGoalandPrice()", +"07f18b9c": "ownerCrySolObjectsCount(address)", +"07f19eba": "setSettler(address)", +"07f1af44": "replaceMinter(address)", +"07f1c9b1": "upgradePackage(address)", "07f1eb0d": "setMinimumTokenAmountForUpdate(uint256)", +"07f22162": "writeUint(uint8,uint16,uint32,uint256,uint256)", +"07f24906": "removeShortLiquidityThenCloseOptions(address,uint256,uint256,uint256,address,uint256)", +"07f309e1": "createPromoCard(uint256)", "07f30f6a": "owner2OK()", +"07f3b8bb": "Pool()", +"07f3ce89": "lastestBlock()", "07f3f764": "godMode(address,address,uint256)", +"07f3ff68": "setWeightFeeder(address)", "07f442c4": "fightAlphaMonster()", +"07f442e1": "addKyberProxy(address,uint256)", "07f4556f": "KIA()", "07f4eace": "preSaleAmount()", "07f4f3f4": "assertToken(address)", "07f5888b": "vote02YesCount()", "07f5b7a2": "TokenSale(address,address,address)", "07f64725": "gotParticipants()", +"07f6a6c2": "add(uint256,uint256,bool)", +"07f71149": "withdrawBenefit(address,uint256,uint256)", "07f79d38": "presaleOpeningTime()", "07f7aafb": "approveContract(address)", +"07f89031": "setValidOk()", +"07f89d5a": "snatchFood()", "07f8f100": "startSell()", +"07f908cb": "reservedUsernamesMerkleRoot()", "07f90e5d": "lotteries()", +"07f94421": "editPropertyInfo(address,uint64,string,string,string,string,uint64)", "07f95fc2": "mintParticularPart(int256,uint8[4],address)", "07f9f7ba": "StandardBounties(address)", "07fa40e4": "withdrawEtherTo(address)", +"07faa7f5": "meat()", +"07fb28e2": "AdminList(address)", "07fb363a": "cap_()", "07fb37d4": "ChangePrice()", "07fb462c": "SCEscrow()", "07fb7c60": "getKudosSentFromTo(address,address)", +"07fb8ea6": "testPure(uint256,uint256)", +"07fbc85f": "receipt(address,uint256)", +"07fbfa1e": "Granted(address)", +"07fc14b1": "viewEndSales()", +"07fc6d85": "Attack(address,address,uint256)", +"07fd23ec": "amount_str()", "07fd3687": "Seller()", +"07fe0d28": "withdraw_fake()", "07fe178b": "HLCoin()", +"07fe4955": "CommissionAddedToWithdrawals(uint32,uint256)", "07fee2a6": "presaleStartedAt()", "07fee501": "getNumberOfFirstBuyer()", "07ff1413": "multiBatchSafeTransferFrom(uint256[],address[],address[])", +"07ff567d": "DiceRollResult_failedSend(bytes32,address,uint256,uint256,uint256)", "07fffa9d": "privateDiscountPrice()", "08003f78": "burnTokens()", "0800a05f": "cryptoStorage()", +"0800a727": "approve_191(address,uint256)", "0800b89e": "setCategoriesCreator(address)", "0800e300": "getComment(uint256)", +"080158bc": "e_participate_in_arbits_presale_crypto(address,uint256)", "08016f6d": "firstRefundRoundRateNumerator()", +"0801b654": "schedule(address,bytes,uint256[8])", "0801baca": "talkToWorld(string)", "08020361": "distributeFixed(uint256,address[],uint256)", +"08021fe1": "CutsPaidValue(uint256,uint256,uint256,uint256,uint256,uint256)", "0802350d": "testThrowExecuteSellOrderChecksAmount()", "08029105": "InvestFund()", +"0802f3b5": "tk_resetTokenList()", +"080310be": "lcfperson(uint256)", "08038a29": "createCarToken(string)", +"0803c61f": "_hal9kToken()", +"0803fac0": "hasInitialized()", +"08043ddd": "clientRegistrations(address,uint256)", "0804d013": "ProcessedInvestment(address,uint256,uint256)", "08051004": "AddNewPhase(uint256,uint256,uint256,uint256,uint256,uint256)", "08054fd5": "RevokeBid()", "080571eb": "mintAndTransfer(address,uint256)", +"0805cf07": "withdrawTCOREInCaseStuck()", "0806506e": "bigId()", +"080677e8": "_getCurrentContent()", "080692bd": "setEtherPriceInUSD(string)", "08071c05": "addit(uint256,uint256)", "08081302": "clearClaims(uint32,int256)", "08083039": "isSponsor(uint32,uint32)", +"0808343e": "createBurnedPermission(address,bytes32)", +"08087179": "_unlockMutex()", +"0808ee6e": "deposit(address,address,bool)", "0808f3eb": "canBuy(address)", "08093ff6": "post(string,address[],uint256[])", "08098336": "balanceWinPoolToTeam()", "080991e4": "Trustless_Transfer(uint256,address,address,uint256)", +"08099717": "roomNightVendors(address)", +"08099b5d": "getGroupIndexerByName(string)", "0809f95d": "Asset(string)", +"080a15a9": "approve_833(address,uint256)", "080a57f9": "whitelistAddr(address)", +"080a771c": "issueERC20(address,uint256,address)", +"080a906e": "usePrice0()", +"080ad64e": "isActionRejected(uint256,address)", "080b2356": "AirEX(uint256)", "080b2a86": "getTicketsCount()", "080b3713": "createWinner()", "080bdfa8": "brokerVerifierContract()", "080bfdeb": "kindCount()", +"080c279a": "minimumDepositAmount()", +"080c501e": "setTokenFeeMin(uint256)", "080c8a83": "unlock(bytes,bytes,bytes32)", +"080c97ed": "CertificateRedeemed(string,uint256,address,uint256,address)", +"080c98da": "verifications(address)", "080ca381": "totalDivided()", +"080ce2eb": "initPool()", +"080d1ade": "returnAnyToken(address)", "080d840c": "getRandomValue(bytes32)", +"080d9e48": "lastBlockRewardApplicable(address)", +"080de15c": "invested(uint256,address)", "080e74f7": "lotById(bytes32)", "080f27f3": "view_readyTime()", +"080f775f": "pool5currUserID()", +"080f7f51": "sup(bytes32)", "080fbebf": "setup(uint256,uint256,address)", +"080fc4b9": "setLockedRewards(address,uint256)", "080fd28a": "regulatorApprovedKycProvider()", +"0810b102": "enterdate(uint256)", +"0810be01": "getDeflationaryMultiplier()", +"0810d91a": "getMediationService()", +"0811d3c3": "pairsToLiquidate(uint256)", "0811dda0": "SolarEclipseToken()", "0812226e": "approveOrderHash_(bytes32)", "0812cfbf": "registerInvestorAccount(address)", +"0813071c": "effectiveDebtRatioForPeriod(address,uint256)", +"08131951": "allocTotal()", +"08135a93": "getCurrentTermId()", +"0813970c": "func_00001D33(uint256,uint256)", +"0813cc8f": "disburseTokens()", +"0813ce5c": "DUEL(address,address,bool,uint256)", +"0813dbd7": "lastSuccesfulDKG(bytes32)", +"08142035": "mintNFT_contract_address()", +"0814288e": "CreatedUserWallet(address)", "08148f7a": "timeout(uint256)", "0814931a": "canTake(address)", +"0814d3dd": "tokenTemplate()", +"0815141c": "Set_Period_Span(uint256,uint256)", "08151de1": "attack(uint256,uint256,bytes)", +"0815326c": "syncUniswapPairs()", "0815711a": "hmultiply(uint256,uint256)", +"081579a5": "remove_liquidity_one_coin(uint256,int128,uint256,address)", +"0815e75d": "ethPurchaseAmount()", "08165230": "TarynToken()", "08167a4e": "getJsonToValue(string,uint256,uint256)", "08171d30": "numOfFinishedPromotions()", "081780f4": "clearRecord(bytes32)", +"0817a060": "totalXtkDistribution()", "0817e5c1": "upgradeM5(address,address)", "081812fc": "getApproved(uint256)", +"08186ecf": "exchangeRateAfter(uint256)", "0818d1da": "VestingCreated(address,address,address,uint256,uint256,uint256)", "08190cda": "HT()", "08195e10": "makerFeeRateE4()", "0819815e": "addressPositions(address,address,uint256)", +"0819ba74": "changeExecutionAdmin(address)", +"0819fc45": "machineUri()", +"081b1e4e": "ManagerDeleted(address)", +"081b314e": "sponsorDisputeRewardPercentage()", +"081b3827": "mangasFor1Eth()", "081b8bb4": "refreshVoteForAllByIndex(uint256)", "081bde95": "buyTrack(address,bytes32)", "081bf263": "isOOB(uint8,uint8)", "081ce187": "disallowAddressToSendMoney(address,address)", +"081d1549": "approve_703(address,uint256)", "081d203e": "plantedRate()", +"081d2b3c": "uniswapV2router()", "081d5380": "sendFundsToManager(uint256)", +"081d627e": "decodeReserveBalances(uint256,uint256,uint256)", +"081dad4d": "startChangeMaximumPoolSize(uint256)", +"081dc9c6": "deposit(string,address,uint256,address)", "081e1b12": "giveEther()", "081e21b4": "allowancePaillier(address,address)", +"081e3eda": "poolLength()", +"081e444e": "burned_volume()", "081e806d": "PayOut(uint256)", +"081e9d13": "HEADER_RELAYER_REWARD_RATE_MOLECULE()", +"081f582e": "getPersonalStakeTotalAmount(address)", "081f74c6": "ArchiveCreation()", "081f9190": "DiscToken()", +"08204ea3": "SAVINGS_LOGGER_ADDRESS()", "0820b7c9": "activePresale(uint256)", +"0821015d": "ActiveVaultUpdated(address)", "082104e3": "boxChoice(uint256)", "082152b4": "toB32(uint256,bytes,bytes)", "08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", "08218c98": "trade(address[3],uint256[4],bytes,uint256)", "0821c87e": "sanMaxFree()", +"08227acb": "setGameConfigContract(address)", +"0822c069": "getStakeAmountOfAccount(address)", +"08232628": "select_best_adapter(address)", "082346d9": "recoverAllFunds(bytes32,uint64,bytes32[],uint256[],uint256[2])", "0823b38d": "calculateAveragePixelPrice(address[16],uint256,uint256)", "0823d3a7": "Voted(address,bool,string)", +"0823ea19": "ContributionEdited(address,uint256,uint256,uint256,uint256)", "082442f5": "feePayee()", +"08245b82": "ApprovalEvent(address,address,uint256)", "08245f90": "testAbsMin()", "08252f03": "CodeFundToken()", +"0825c8ab": "addETHBonus()", +"0825f38f": "executeTransaction(address,uint256,string,bytes,uint256)", "0827940f": "quitArbitrator()", "0827ab43": "tokenRate10()", +"082827fa": "_secondRewardPeriod()", +"08286e12": "calculateStorageFees(address)", "0828799b": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[4])", +"08288ade": "addToNoFeeList(address)", +"0828baa2": "createAgreementSet(uint256[])", +"0828c085": "forceVoteEnd()", "08290dc5": "setMaxSale(uint256)", +"08297846": "removeClaimTopic(uint256)", +"0829a034": "convertDaiToEth(uint256,uint256)", +"0829ca90": "playerCount_()", +"0829d713": "refundTokensTransferredDirectly(address,uint256)", "082a4513": "releaseAllOnceLock()", "082a7e60": "ODD()", "082a8c4e": "arenaContract()", +"082ad6ac": "leverageRatio()", +"082b3aec": "ArbitrageKyberUniswap(address,address,address,address,uint256,uint256,address)", +"082b4235": "balanceOfAt(address,uint64)", "082b57e9": "TIER4_PRICE()", "082b7c57": "FeesPayout(uint256)", +"082bc0ab": "updateCompSupplyIndex(address)", "082bd485": "BLAINetworkToken()", +"082c086f": "approve_151(address,uint256)", "082c250c": "MDD()", +"082c6e64": "withdrawToken(address,bool)", +"082cc2d0": "curDays()", +"082cd386": "createLP(address,address,address)", +"082d4965": "calculateWeiAmountForDAI(uint256,uint256,uint256)", "082d7187": "mintFish(address[],uint32[],uint8[],uint8[],uint8[],bytes16[])", "082d8f49": "left41(uint256)", "082e0f6f": "makeupLegendary(uint256)", "082e2814": "startDividendsPeriod()", +"082e58bd": "UPGRADE(address,uint256)", "082e6d81": "receivePriceFromOracle(uint256)", +"082ed05c": "lastBlockUpdate()", "082f699e": "tokenReleaseAtStart()", "082fa708": "tokensPerTrunche()", +"082fef45": "LetsInvest()", +"0830538d": "generateToken(string)", "0830602b": "registerName(string)", +"083061fa": "BuyOfferCancelled(uint32,address,uint256)", "08306af3": "PAYOUT_FRAC_BOT()", +"08308e1e": "startSalef(uint256,uint256,uint256,uint256,uint256)", +"0830e833": "rewardTokenLocked(address)", +"083132c4": "getFee(uint8)", "08314798": "setTokenSeed(uint256,string)", +"0831ad92": "myBetsInLap(uint256)", "0831fb6c": "getWinnerListLength()", +"08322b0b": "showparticipants()", +"0832519b": "exitSwappedLiquidity(address,uint256)", +"0832872f": "ndao()", "0832b925": "allowance(address,bytes32,address,address)", "0832cf68": "FTNTCoin()", +"0832e470": "unwrapConversionFactor()", "0832ff59": "Mentoscoin()", +"0833ce88": "aspfrozen()", +"08345fbf": "setNonce(address,uint256,address,uint256)", "0834ab44": "cancelWagerOfCard(address)", "0834d1e7": "getBetsSumByAgentId(uint256)", "0834fe80": "LitecoinOne()", @@ -4683,67 +8579,103 @@ "0835e754": "sendToRST(address)", "08366c9d": "removeCZRLock(address,uint256)", "0836d160": "WithdrawDividends(address,uint256)", +"083759e0": "updateMinBidIncrement(uint256)", "08378040": "dayStartTime()", +"08381fb0": "MINING_LAYERS(uint256)", +"083863f9": "addSchainForNode(uint256,bytes32)", +"083893e1": "withdrawInventory(uint256)", "083903de": "setExchangeRateAgent(address)", +"08390a9d": "underlyingDecimals(address)", +"0839589d": "breedNameToID(bytes32)", "0839e0fb": "migrationReceiver_setup()", "0839f2ee": "WinbitToken(uint256,string,string)", "083a0436": "getSentTransactionData(uint256)", "083a3a74": "returnTokensToExchange()", +"083a9593": "_addToLockedInPendingDelegations(address,uint256)", "083ab393": "bonusTokenRateLevelThree()", +"083aded7": "areBidsActive()", "083ae00e": "postWish(bytes,bytes)", "083ae1fe": "setPackage(string)", "083b2732": "callback()", +"083b548f": "_unlockAccount(address)", "083baf15": "get_participant_arbits(address)", +"083c3825": "swapLunaToErc20(address,uint256)", +"083c518b": "removeRestaking(uint256,bool)", "083c6323": "endBlock()", "083cadf0": "approveInternal(address,uint256)", "083ccc8a": "_forwardFunds(address,uint256,uint256,uint256)", "083d13c4": "returnTokenDepositState(address[2],uint256[8],uint8,bytes32[2])", +"083d24ae": "balanceOfWithoutReceived(address)", "083d4aa5": "QoToken()", +"083d7db4": "checkVote(uint256,uint256[2],uint256[2],uint256,uint256)", "083d9e6d": "period4End()", "083eb6f8": "icoSaleHardCap()", +"083ed0d2": "UNIAPPPerBlock()", "083ed817": "getEmployerJobsForFreelancerInvite(address,address)", "083eea12": "Unfrozen(uint256)", "08404ac8": "ERC20dex()", +"08405166": "ERC223_ID()", +"0840605a": "registration(address)", "0840972b": "setClue(string)", +"08416904": "gracePeriodInSeconds()", +"0841a43d": "rewardVisitorBatch(uint256,address[])", "0841abd2": "verifyNextTurn(uint256,uint256[3],uint256[3],uint8[176])", "08421645": "changePresaleTimeRange(uint256,uint256)", "08421e7f": "paymentsByAddress(address)", "08434ef5": "updateRequestSeed(bytes32,bytes32)", "08436588": "getUsersAwaitingForTokensTop150()", +"08439582": "getFullTokensInfo(address[])", "08447aef": "KudosTokenLockup(address,address)", "08447c9f": "SilverWhitelist(address,bool)", +"084490b9": "getHash(bytes,address,uint256,uint256)", +"08449ddb": "changeSettings(string,string,uint256,uint256,address,address,uint256)", +"08455231": "decreaseTokenAmount(uint256)", "0845817c": "resetCommission()", "084592cb": "turnon()", "0845e2d8": "SingularityTest2()", "08464b68": "changeAREFWallet(address)", +"0846ad87": "cancleBuy(uint8,uint8)", "0846c0ee": "invalidate(string)", "0846ca3c": "deleteAccounts(address[])", "08474d2a": "judgeReleaseRecordExist(uint256)", "084794f8": "_devFeesAddr()", +"0847c7a2": "rabbitSirePrice(uint32)", "0847e9fa": "numDarknodesNextEpoch()", +"0849478e": "getAPROptionsAdjusted(address,uint256)", +"0849508b": "getLatestDAIPrice()", "084992a6": "closeChannel(address,uint8)", "0849a197": "EventUpgradeCar(address,uint32,uint8,uint8)", "0849cc99": "getArrayLength()", "084a4011": "whitelistBonusSent()", +"084a4faf": "endCycle()", "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)", +"084c4088": "setSaleState(uint256)", "084ccb41": "cBAListLength()", "084ce708": "pay(address[],uint256[])", "084d113b": "addMerkleTreeRoot(uint8,bytes,bytes)", "084d72f4": "getWinningOutcome(uint256)", +"084da848": "tokenByURI(string)", "084ee60f": "convertWeiToTokens(uint256)", "084fa898": "Raffle(uint64,uint32,uint256)", +"085005d6": "wobbuffet()", "08508b8f": "hasBeenDeployed(address)", "0850de0c": "_setUserInfo(address,uint256,uint256,address,address)", "0850e4c3": "Sunny2()", +"08510ce2": "isServicePoolAccepted(address)", "0851762a": "transferLockedToken(address,uint256,uint256)", "0851d08c": "setChainType(string)", +"0851d46c": "creamDeposit_FRAX(uint256)", +"0851e729": "StakesSale(address,uint256,uint256,uint256,uint256)", +"08523168": "LOG_exchange(address,uint256)", "08528190": "changeRegulator(address)", +"0852a6e3": "proposalRejectedByAB(uint256,address)", "0852aa9d": "maafakaToken()", +"0852ab64": "getNecroNameOfTokenId(uint256)", "08534888": "privateSaleReleased(address)", "0853b015": "lastBetUser()", "0853e875": "adjustTradeRange(uint256,uint256)", @@ -4752,60 +8684,101 @@ "08540812": "removeContractFromTokenFallbackWhiteList(address,address)", "085431f4": "getGameProprietaryData(uint256)", "085487a5": "Shiva()", +"0854a4ea": "unavailableTokenArray(uint256)", "0854f856": "getPoolInformation(address)", "08551a53": "seller()", "08551d34": "haltPurchases()", "085554a4": "DHUB()", "08555a0a": "secondStageRaisedInWei()", +"0855b6d4": "pixelByCoordinate(uint256,uint256)", "085634ec": "changeStatus()", "08567a87": "removePoliceNode(address)", +"0856ffce": "getFeatures(uint256,uint256)", "08573a0b": "reservePunksForOwner(uint256)", +"08577924": "LogCrossFork(uint64,address,uint256,uint8)", +"0857e69c": "bountyInfo(uint256)", "08587a76": "_scheduleCall()", "08595e5e": "puppySports()", "0859e844": "getEthRate(uint256)", "085a1daa": "startCollection()", "085a3600": "_exchangeMatronSireId(uint256,uint256)", +"085a400e": "ancestors(address,uint256)", "085a4705": "issueAsset(bytes32,uint256,string,string,uint8,bool)", +"085a596d": "BlockTime()", +"085a7264": "setOwnersLock_open(bool)", +"085a83e4": "DailyEarning(address)", +"085abcef": "onBuyKeyFailure(uint256,uint256,uint256,uint256,uint256)", +"085b1d84": "creatorDestroyValidator(address,uint256)", +"085b59ec": "bskPerBlock()", +"085b8700": "getTop3MarathonersByDistance(uint256)", "085ba55b": "getRoundStageEndInfo(uint256)", "085bcb34": "getSamplesForJingle(uint256)", +"085bea3c": "users_ids(uint256)", "085c1cee": "teamTokenBonus()", +"085c728d": "croPerBlock()", +"085c7b9b": "getBallotAllowedVoters()", "085ca4e3": "preIcoEndBlock()", "085ca679": "setAirDropShadowTag(bool,uint256)", "085ca94e": "payFiat(address,uint256,uint256)", +"085ce489": "stakeGego(uint256)", "085ceb30": "tokensCap()", "085d1973": "getContributorByIndex(uint256)", "085d4883": "provider()", "085d9335": "participantBonus(address)", "085dedf1": "init(uint256,uint256,address,uint256,address,uint256,uint256,uint256,address,uint256)", +"085e2c5b": "getExpectedReturn(address,address,uint256,uint256,uint256)", "085e658c": "setSpecialWallet(address)", "085e9579": "getCompte_35()", "085f8ebb": "transform(uint64,uint64,uint64,uint64)", +"085f95cd": "MAX_LIQUIDATION_PENALTY()", "085fa50a": "changeMainContractInCoin(address,address)", "085fd114": "o3Address()", "085ff39a": "getPremiumCarsForVariant(uint256)", "086013c0": "stackOwner(bytes32)", +"08602201": "getProtocolAdapterAddress(bytes32)", "08604366": "nextPayeeIndex()", "0860a902": "ownerBurnUnsoldTokens()", +"086126d3": "loanRate()", "08612c35": "getReservedTokens(uint8)", "08614362": "donateTokens(address)", "086146d2": "getCurrentPeriod()", +"08615e55": "addCounter()", +"086174dd": "expansionPercentDebtPhaseStakePool()", +"0861bf4a": "mostEntryAddress()", +"08626fca": "distance(uint256,uint256,uint256,uint256,uint256,bool)", +"086272bf": "stepUnlockInfo(uint8)", "086282b9": "getIpfsHashToTokenId(string,string)", "0862fdf3": "plantToken()", "08637d20": "bountyPool()", +"0863812f": "pauseMarketCreation()", +"0863b7ac": "swapOnUniswapFork(address,bytes32,uint256,uint256,address[],uint8)", +"0864287d": "availablebMxxAmt()", +"0864e17c": "proveInConfirmedWithdrawals(bytes,uint32,bytes32)", "08658523": "FraCoinAuct(string,uint256,uint256,address)", "0865dadc": "setAdminContract(address,bool)", +"0866093c": "setDefaultMediatorFee(uint256)", "086610d2": "currPicHash()", "086677de": "personalMaxcap()", "08669aab": "withdrawInterest(uint256)", +"0866ce58": "Burn(address,uint32)", "0866efcc": "FineArtCoin()", +"08677d7e": "mintIdleToken(uint256)", +"0867b5dc": "getPoolProtocol(uint256)", "0867ecf3": "SimpleCustodian()", "08681a74": "timeOfLastOwnerWithdrawal()", +"086825df": "__MappableToken_init(address,string,string,uint8)", +"08689dac": "setDepositedAt(address,address)", +"0868b932": "BankAgent()", +"0868c0d6": "poolDelegatorIndex(address,address)", +"0868cf25": "versusRewards()", "086914c3": "saleDateStart()", "086949b7": "get7()", "0869b302": "setBeneficiaryAddress(uint256,address)", +"0869cfbc": "patients(address)", "0869db30": "emergencyWithdrawalActivated()", "086a1b86": "walletForBounty()", "086a9cd8": "AddMultipleItems(uint256,uint8)", +"086a9e4e": "rewardDistributionPercent()", "086ac6d7": "setDeprecated(uint256)", "086ae9e4": "getCallGasUsed(bytes32)", "086af728": "moveUnsoldTokensToICO()", @@ -4813,40 +8786,79 @@ "086b60dd": "contributionAmount(address)", "086b8331": "requiredLockedForColorRegistration()", "086ba261": "deleteIssuer(address)", +"086ba4b0": "calculatePossiblePayout(uint256)", +"086bb51c": "addAccessor(address,address,uint256,address,string,uint32,string,string,bytes32,bytes32,uint8)", +"086bd617": "addTransferBurnAddress(address)", "086bdf2d": "nameArt(uint256,string)", +"086c1989": "Accident(uint256)", "086c2e09": "drawEther()", "086c875b": "NewCloneToken(address,uint256)", +"086dabd1": "requireSystemActive()", +"086dc755": "lowerLagBreakpoints(uint256)", "086df89e": "withdrawPowhDivs()", "086e4e52": "setCompte_23(string)", +"086eec3e": "initialize(address[3],uint256,uint256,uint256)", +"086ef3f6": "marker5()", +"086f6f56": "setBorrowAmount(uint256)", +"086fadbe": "icoLevel5()", "086fb1f8": "setFirstLogEntry()", +"086fc0c7": "IMPLEMENTATION_SLOT()", "086fd46b": "getAgreementsCount()", +"086ffc03": "KeyPurchase(address,uint256,uint256)", +"0870035f": "createNewAccount()", "08700f0b": "MonaLease(string,uint256,uint256,address)", "087038db": "switchLiquidity(bool)", "0870607b": "addSubUser(address)", +"08706b6d": "C19(bytes)", "08707031": "setCryptoCupTokenContractAddress(address)", "0870803d": "TermsOfUSe()", +"08709513": "_newAction(uint256,uint64,address,bytes)", +"0870c2f1": "checkAndTriggerPreemptive()", "0870f1ff": "FundingProposalAdded(uint256,uint256,bool,uint256,address,uint256,uint256,uint256)", "08714bfa": "TestContract()", "0871968b": "isOverBalanceLimitHolder(address)", +"08719b49": "ceresTest()", +"0871b548": "MintLockedProposed(address,uint256)", "087205f0": "getTokenByID(uint256)", "08722e78": "ethVerify()", +"08723e32": "ZodiacIndexToApproved(uint256)", +"0872a00e": "PublisherRegistered(address)", "0872c813": "closeBeta()", +"087317f0": "sdrTotal()", "087380ca": "setSpecialAttack(uint256,uint8)", +"0873f150": "peekInterest()", +"08742d88": "freeze(address[2],uint256[4])", +"0874533d": "BTOKEN()", "0874ba06": "player5Timestamp()", +"0874ddbc": "setYeaHammerContract(address)", "0875029e": "POXToken(address,address)", "08752869": "buyXname(uint256,bytes32)", "08753085": "MAT_TEAM_SUPPLY_LIMIT()", +"08756c40": "tokensIcoInOtherCrypto(address)", +"0875ab8e": "WithdrawBalance(address,uint256)", "08761432": "onReceive(address,address,uint256,bytes)", +"08763b8c": "NewOracle(address,address)", +"08763c67": "ReferralBonusIncomplete(address,uint256)", "08768c04": "setFundsCreditBondContract(address)", "0876eb00": "ownerMigration(address)", +"08772226": "_rewardPerToken()", +"08772af1": "gov(address)", "08774410": "changeBridge(address)", +"0877ce5b": "writeb(uint256)", +"0877f99f": "airdrop(address[],address,uint256,uint256,uint256)", "08782469": "Akilos()", "0878424f": "vota(bytes32,bytes32)", +"087874ae": "tokenICOWithdraw()", "0878833d": "fourth_whitelistSupplier()", "08789521": "revokeRole(address,string)", "0878bc51": "getAttachesto(uint8)", "087905c9": "getMiningEpoch()", +"08793b9a": "myVerifiedContractors()", +"08796cd4": "partnerReferRewardPercent()", "08796ea0": "deployBTTSTokenContract(string,string,uint8,uint256,bool,bool)", +"087991bc": "rrdata(uint16,bytes)", +"087a3778": "readyToSellTokenTo(uint256,uint256,address)", +"087aafe9": "is_not_solved()", "087b230c": "getNextStageStartTime(int256)", "087bb610": "USDXGE()", "087c0055": "setIcoLockUntil(uint256)", @@ -4858,60 +8870,119 @@ "087da715": "removeStorage(string)", "087ded64": "ChildChains()", "087e055a": "getConfigBool(bytes)", +"087e0d79": "batchRemoveWhiteListAddress(uint256,address[])", "087e5b5f": "ShiftContract()", "087e926c": "setId()", +"087ea91f": "twapResult(uint256)", "087ee4c6": "random(uint8,uint256)", "087f4ece": "limitTeamType()", +"087fad41": "lock(address,bytes32,uint256,uint256)", "087fc48b": "claimLoanToken()", +"0880193c": "INITIAL_THRESHOLD()", +"08802374": "isActiveTranscoder(address)", "088061bd": "momentSenderOf(uint256,uint256)", "0880fb66": "transferOwnershipReceive()", +"088116fe": "changeVotingRules(address,uint256,uint256,uint256)", +"088171fb": "pendingRemit(uint256,address)", "0881acd3": "getWeiCollected()", +"0881cffb": "initialize(address,address[],uint256,uint256)", "0881fa0d": "shop()", "08824fb7": "createCitizen(uint256,address)", +"0882519f": "addCandidate(string,uint256,uint256,uint256)", "088266b5": "isClearTime()", "088322ef": "tradeWithHint(address,address,uint256,address,address,uint256,uint256,address,bytes)", "0883cb04": "ERC20Batch(address,address)", "0884e5d6": "RocketCoin()", +"08852653": "WorldCupTokenWereSold(address,uint256,uint256,uint256,address,uint256)", "08853525": "round6TokensRemaning()", +"08857e9b": "setDebtAuctionBidDuration(address,uint256)", +"08859879": "Drop(address,uint256)", +"0885b744": "CONTRACT_LP_ELEMENT_ERC20_TOKEN()", +"0885bfdc": "includeJack(address)", +"088672c3": "RefundsClosed()", "08867fc2": "REFUND_POLL_DURATION()", "088787a3": "getMultiLedgerValue(string,address,address)", +"08880d82": "totalColorBonds()", "0888ad41": "PFCCContribution()", +"0888b9bb": "Timd()", +"088903b8": "set_percentage(uint256)", +"08891a32": "submitHash(bytes32)", "08891c0a": "addVoter(address,address,bytes32)", "088947a0": "universalexchangertoken()", +"0889d1f0": "crossOut(string,uint256,address)", +"0889e14c": "changeRegistryAddress(address)", +"088a4ed0": "setMaxMintAmount(uint256)", +"088a56ed": "setLimitEndDate(uint256)", +"088a91f5": "getOne(address)", +"088ab8ce": "changeRewardToken(address)", "088ae6e5": "releaseCreatedCount()", +"088b183a": "setIlkStabilityFee(address,bytes32,uint256,bool)", "088b513e": "getAffiliateSender(bytes32)", +"088b8b37": "contributionAmtOf(address)", +"088ba778": "NewProtection(uint32,uint8)", "088c20de": "IcxToken(uint256,address)", +"088c35fd": "ethFeeToBuyLevel1Set(uint256)", "088cbf7e": "incrementRate()", "088df612": "cancelTokenSale(uint256,bool)", "088e3595": "GoldVein(string,string,uint256)", +"088e5840": "changeWBNB(address)", "088ee7ec": "bountyTokenIssuedTotal()", +"088ef9d2": "log(bool,uint256,address)", +"088f0dc2": "quote(string)", "088f11f3": "punksOfferedForSale(uint256)", +"088f18ec": "UpgradeDepot(address,uint256)", "088f5e58": "mergeCard(uint256,uint256)", +"088f6aae": "gameIdsByAdminAddress(address,uint256)", "088f87e0": "refundAlienDeposit(address)", "088fc1a8": "movePendingToSetting(uint256)", "08901fce": "expand(uint256[])", "08908579": "KAL2Token()", +"0890d80c": "setMetadata(string,string,string)", "0890e86e": "icoMinimumWei()", "08910fe6": "getSpinResults(uint256,address,uint256)", "08911cd5": "settokenDeployer(address)", +"089135b0": "rewardPerDay(uint256)", +"08915145": "LIFEclaimed(address)", "0891f387": "getPaintedPixelsCountByAddress(address,address,uint32)", +"0891f6ea": "maxDoc(bytes32)", +"08920330": "changeDeviationFromScale(uint256)", +"089208d8": "renounceManagement()", +"089217f5": "controlCirculationSupply(uint256)", +"08923b72": "AllowToParticipate(address,bool)", "08927a67": "Jcoin()", +"089282c4": "getCollateralizedBalance(address)", +"0892b205": "approve_379(address,uint256)", "089327de": "MyToken()", +"089328de": "getCrewAddress()", "08933d11": "getJoinBlock(address)", "08936ac0": "_removeContract(address,uint256)", "08937f62": "transferChildToParent(uint256,address,uint256,address,uint256,bytes)", +"08938979": "getPostUrlWithInviter(string,string,address)", +"08939d24": "gkey()", +"0893bd85": "payment_address()", "08941307": "getParametersHash(uint256[12])", "0894183d": "priceof()", "08946081": "setSalesFinished()", +"08948408": "_exchange(address,bytes32,uint256,bytes32,address,bool)", +"08948805": "setTokenDeposit(address)", "08949a76": "getNumberTwo()", "0894bdf2": "setBehalfer(address)", "0894c6c1": "queryDataInternal(address)", +"0895547d": "supplyUnderlying(address,uint256)", +"089558cb": "queryAddressCount()", "08956746": "erotixFundMultiplier()", "08956ff8": "syncFunds()", "089587cd": "getServer()", +"0896161e": "Set_TokenReward(uint256)", "089620fc": "transferGrantJoinAddr(uint256,uint256)", +"08967015": "PurchaseInvalidated(uint256)", "08968426": "unfreezeDeposit(address,uint256)", +"089684ee": "setAudit(address)", +"08968f7b": "decimalsSet(address)", "0896937e": "MultiTransfer(address[],uint256[])", +"0896ee4e": "getIPFS(address)", +"0896ff22": "knight()", +"0897821f": "depositBondPrinciple(uint256)", "0897bf6f": "releasedRecordsCount()", "089854fe": "LLG(uint256,string,string)", "08988822": "RareAsset(bytes,uint256,bytes,bytes,address)", @@ -4922,89 +8993,151 @@ "08998c93": "activeBalance()", "0899a99c": "canIssue()", "089a15e4": "songTitle()", +"089a8aa7": "popPatient(uint256)", "089aa819": "weiPerInitialHONG()", +"089aa997": "AdminAddressAdded(address)", "089ac36f": "distributeCards(uint256)", "089ae962": "EOSGOLD()", "089af913": "endNumber()", "089b4d46": "totalCookieProduction()", +"089b4db4": "Finish(string,string,uint256,string,uint256,uint256)", "089bb99a": "changeNameAndSymbol(string,string)", "089bead1": "changeOuts(address,address)", "089c22ad": "recoveryAfterPeriod()", "089c9964": "setFriend(address)", +"089cec3b": "_cacheStale(uint256)", "089d1239": "Ssnc()", "089d5200": "WILLTOKEN(uint256,string,uint8,string)", "089d5c4a": "repr()", +"089dc92c": "idToAuction(uint256)", "089dc937": "markAsReceived()", +"089df3ac": "isUserQualifiedbuyMineDiamond(address)", "089e0ad0": "buildDSMap()", +"089eae7e": "addVersion(bytes32,bytes32,string)", "089ee2d6": "likeVoting(uint256)", +"089f7dbd": "giveLavaUNIv2Reward(address,uint256)", "089f7f85": "hasRisk(address,address,address,uint256,uint256)", +"089f7fb4": "accountOpenLoanCounter(address)", "089fa8b1": "trySolution(uint8[])", +"089fe6aa": "poolFee()", "08a0f32f": "buyNow(uint256)", "08a10ffe": "allRewPaid()", +"08a1100f": "tokenToBPool(address)", "08a12b9a": "getBuyerFunded(address)", "08a1360a": "publicSaleCapReached()", +"08a17149": "adminFeeAddress()", "08a1b574": "getTokenProposalDetails()", +"08a1eee1": "burn(bytes32)", +"08a294cd": "loan(bytes32)", +"08a29cc5": "ContractUpdated(bytes4,address,bytes32,string)", "08a2a386": "addProof(address,bytes32)", +"08a2ff3c": "lpBpt()", "08a36a1c": "totalAmountWagered()", +"08a37f31": "finishStake()", +"08a3809d": "rebaseTimestamp()", +"08a38187": "LogDestruction(address,uint256)", "08a47243": "LCCToken()", "08a47c32": "setVestingType(uint8)", +"08a4b575": "G_NUM_MATURITIES()", "08a4f072": "getParams(uint256)", +"08a59b94": "multipleSafeMint(uint256[],address,bytes)", "08a60004": "LSDToken(uint256)", "08a6077c": "tokenDistribution()", "08a62d0a": "stopThrowing()", "08a65591": "BUYGOODSWITHCRYPTODOTCOM()", "08a6fb88": "setAdminsContract(address)", "08a71396": "tokenRecovery(address)", +"08a749ff": "getTeamAvailable()", "08a80ff5": "transferAdminOwnership(address)", +"08a89bb6": "buyPrice(bytes32)", +"08a8bc25": "mintedRewardToken()", "08a8ce1f": "setFactories(address[],bool)", +"08a90642": "pynthetixReceivedForPynths(uint256)", "08a91751": "getMyFairy()", "08a9ba84": "setSourcePrice(address)", "08a9dd29": "setEndEdit()", "08a9ec7a": "startDApp(bytes32)", +"08aa2884": "nyanV2LPStaked(uint256,address)", "08aa3567": "BMPre_ICO()", "08aa62c4": "industry()", "08aa6a7e": "ContractorAdded(uint256,address,uint256)", +"08aa7ba2": "_executePaymentAtLeastOnce(uint256)", "08ab4097": "instruct_3()", "08aba5aa": "setAccountBalance(uint256)", +"08abb4ab": "myWishBasePercent()", "08abd7ff": "addArrayToWhitelist(address[])", +"08abdeba": "reclaimPAXG()", +"08abe2a7": "userTenDaysResult()", "08ac184b": "finishCurrentLimit()", +"08ac28a2": "processGST(uint256)", "08ac320e": "getAllGameAmount()", "08ac5256": "maxValidators()", "08ac782c": "lockTokens(uint256,uint256,bytes32)", +"08acece2": "transferWithFee(address,uint256)", +"08adad00": "automaticLockupRemove(address)", "08adf7b1": "transferFromMarketplace(address,address,uint256)", +"08ae4b0c": "members(address)", "08ae8677": "pIDIndex_()", "08aeda8b": "getEggPhaseList()", "08af4d88": "allowAddress(address)", "08af6ebc": "getEtherMonsterNumber()", "08af723e": "calculateSha3(string)", "08af84f0": "setAmountForPlayer(address,uint256)", +"08af8dd0": "getVerifierEnabled(address)", "08aff933": "hasConfirmed(uint256,address)", "08b0e909": "initialExchangeRateForETH()", "08b140dc": "Emergence()", +"08b18698": "DefaultFunctionWethContractOnlyError(address)", "08b1adf3": "RestoredInvestment(address,uint256)", +"08b1c3f6": "nameAddress(bytes32)", +"08b237b5": "maxCards()", +"08b254a7": "curRoundId()", "08b27e3e": "transferAnyERC20Token(address)", +"08b2ea5e": "getWrapped1155(address,uint256,bytes)", +"08b30363": "marketAuctionClaim(uint256)", "08b309e3": "final_price()", "08b3479c": "calcIOHash(bytes32[10])", "08b370cf": "childExists(bytes32)", +"08b38bb5": "whitemap(address)", +"08b3c91a": "EMERGENCY_WITHDRAW_WINDOW_PERIOD()", +"08b407c3": "k5(uint256)", "08b407da": "emergency(uint256,address)", "08b40dc6": "CPGPEREGRINE()", "08b4312b": "maximumRedeemable()", "08b490f0": "EARLY_INVESTOR_AMOUNT()", +"08b4c982": "getNFTInfos(uint256[])", +"08b4ce75": "batchSameValue(address,uint256,address[])", "08b4fa40": "GetClickPrice()", +"08b51513": "approve_433(address,uint256)", +"08b547c0": "DailyTokensReceived(address,uint256)", "08b591a5": "revealOpen(uint256)", "08b5a85a": "registerEndpoint(string)", +"08b61958": "setNft(uint256)", +"08b659ac": "_exitPot(uint256)", "08b6808c": "assignPartition(address,uint256,uint256)", +"08b68837": "transferdefikalis(address)", +"08b692b1": "rebaseC()", "08b6bb56": "playerTransactionList(address)", "08b73b31": "setBurnAfterSoldAmount(uint256)", "08b74d3c": "LogPolicyExpired(uint256)", "08b7c13b": "getExists(bytes20)", +"08b7c740": "Order(address,uint256,address,uint256,uint256,uint256,address,bytes32)", "08b7c837": "withdrawJackPot(address)", "08b7fa31": "PriceFeed()", "08b83b08": "appealOpen()", +"08b89dac": "salt(address,address,uint256)", "08b8d60f": "setAffiliateProgramAddress(address,address)", +"08b9a761": "myInfo(address)", "08ba7ee7": "setParties(address,address,address,address,address)", "08bad193": "acceptSolution(uint256,uint256)", +"08bb7309": "logMarketRepBondTransferred(address,address,address)", +"08bbb824": "delegate(uint256,address)", +"08bbbc9c": "moviesCount()", "08bbd947": "globalTransferLock()", +"08bbe7c0": "recordHistoryNeeded()", +"08bc072f": "getRemainUnlockAmount(address)", +"08bc0ad5": "drawerToNotYetSendNum(uint256,address)", +"08bc0e11": "getModuleIssuanceHooks(address)", "08bca566": "allocateTo(address,uint256)", "08bd4d29": "ICO_CAP3()", "08bd6e4e": "_activenessUpgrade(uint256,uint256)", @@ -5012,11 +9145,19 @@ "08bde7d4": "setMyContractt(address)", "08be5bf3": "_doTransferFrom(address,address,uint256,bytes,bool)", "08be8700": "increaseJackpot(uint256,uint256)", +"08bea36d": "pool_contest_add()", +"08bee642": "add(uint256,address,bool,uint16,uint256)", "08bf2d0d": "getOrderBook(uint256,uint256)", "08bfdd76": "refuseInvestment(address[])", "08c01e5b": "Scicoins()", +"08c07bd0": "muteContract()", +"08c0f795": "getLiquidityForAmount1(uint160,uint160,uint256)", "08c1090b": "getReferralAddress(bytes8)", +"08c1b768": "balancerPoolEthTokensSum(address)", +"08c1c66e": "issueGeneralInformation(string,string)", +"08c2de95": "checkCEVA(address)", "08c2e0a6": "refundToBuyersIfSoftCapNotReached(uint256)", +"08c36d9e": "bproTecPrice()", "08c36eb0": "s30(bytes1)", "08c372c3": "investSteps(uint256)", "08c379a0": "Error(string)", @@ -5024,70 +9165,126 @@ "08c409bb": "numberOfCellsBought()", "08c572b8": "PreIcoSupply()", "08c5780a": "DU30()", +"08c57c35": "last_draw()", +"08c5a7e6": "setdecimals(uint8)", +"08c6b0aa": "getRecommander(address,address)", +"08c76625": "issueIndex(uint256)", +"08c7a8dd": "changeTrustedForwarder(address)", "08c7cf22": "Redeem(uint256,uint256,bool,address,uint256)", "08c7e75c": "fechStageIndexByBlockNum(uint256)", "08c87809": "maxFirstRoundTokenLimit()", "08c8b880": "bonussale_EndDate()", "08c8ba00": "BonusCalcPos()", +"08c90c74": "upcomingRound()", "08c977e7": "setMaxDexSize(uint256)", +"08c985bf": "minteradmin()", "08c9ac21": "doubleBalances(address)", "08caaa46": "UploadMusic(uint256,string,address,bool,uint256,uint256)", "08cad05c": "bookerAddress()", +"08cb26ff": "isFollower(address)", "08cb2e7e": "AJDToken()", "08cb3b54": "GetUnpaid(uint256)", "08cb4cb5": "releaseAmountPerDay()", +"08cb5893": "CustomerInsert(string,address,string)", +"08cca77b": "canReproduce()", +"08ccf6c0": "modifyStartNum(uint256)", +"08cdc2a8": "updatePaused(bool)", +"08cdc7ed": "isEmptyAddress(address)", "08ce2136": "pricePreICO()", +"08ce5e5a": "invoiceHasExpired(bytes32)", "08ce9790": "updateOraclizeGas(uint256)", +"08cff21c": "setDevaluationPeriods(address[],uint256[])", +"08d0099e": "updateAndCheckPriceList(address,uint256)", "08d067bc": "indVestingDeposit()", "08d0a7cf": "changeWhitelist(address)", "08d0ca62": "TUINETWORK()", "08d10c91": "TokenUnionToken()", +"08d10e62": "resumePynthExchange(bytes32)", +"08d18169": "smithFee()", +"08d1dd8a": "_limitTimestamp()", "08d233dc": "checkFunds()", "08d299ba": "_setOutstandingPower(uint256)", "08d317dd": "sellCrystal(uint256,uint256)", +"08d33a96": "getMemberPGPfingerprint(uint256)", "08d33e4c": "setAllocations(bytes32)", +"08d37f6b": "setSommaiPerBlock(uint256)", "08d39380": "stageFourStart()", "08d4073d": "startPreSale(uint256,uint256,uint256,uint256)", "08d40e9c": "InvestorRefunded(address,uint256)", +"08d4475d": "resetTasks(bytes32)", +"08d45a92": "changeFarmRateTeam(uint256)", +"08d474da": "TransferOut(address,address,uint256,uint256)", "08d49d1f": "parseNewOrder(uint224,uint8,uint256[],uint256)", "08d4ca92": "isImageOnSale(uint256)", "08d4db14": "getBuyPrice(uint256)", "08d50eb3": "_CAP()", +"08d5bc58": "allAggregators(address,address)", "08d605f2": "TrueToken()", +"08d668bc": "changeModuleRegistry(address)", +"08d688a9": "DividendsWithdrawn(address,uint256)", "08d68b97": "_getBlockCost(uint8,uint64,uint8)", "08d6b4b9": "goldName()", +"08d6e4cf": "forceReborrow(address)", "08d7557a": "totalUsdReceived()", "08d79718": "TilcoinStorage()", "08d7aa9c": "houseTopUp()", "08d7bd23": "toToken(uint256,uint256,uint256)", +"08d7d469": "maxIndex(uint256)", "08d84b82": "ReleasedChanged(bool,bool)", +"08d8587d": "l3l8users()", +"08d85f94": "setRERC20Impl(address)", "08d90dc1": "BAHACAN(uint256,string,string)", +"08d922c0": "getHolderPc(address)", +"08d95cd5": "debtLedger(uint256)", +"08d98d10": "socialbiwinnerList(uint256)", +"08d9a771": "_isValidEstimate(uint256,uint256,uint256)", "08d9a77b": "addSaleWallet(address)", +"08d9b467": "setBackAddr(address)", "08daaf4a": "_premine()", +"08dabfb8": "setPriceAddr(address)", +"08db8a5b": "setWinThreshold(uint256,uint256)", "08dbb18e": "getQuorumState(uint256)", +"08dbbb03": "MINIMUM_STAKE()", "08dc615c": "getWarrantyByIndex(uint256)", +"08dc9f42": "mint(uint256,uint256,bytes)", +"08dcaa47": "percentWithdrawnPure(address)", +"08dcb40c": "removeBlackListAdmin(address)", "08dcf4f1": "setRollAddress(address)", "08dd14fc": "defaultIcoStart()", +"08dd4a33": "sendRoad(uint256,uint256,uint8,address)", +"08de18c3": "register(uint256[2],uint256[3],uint256)", "08de68cc": "FootballerAccessControl()", "08de795d": "testGetReceiptDetails(bytes)", "08debacb": "ensureLoanBalance(uint256)", "08def058": "mintme()", +"08defdee": "getUniswapProxy()", +"08df2f19": "Disqualified(uint256,address,bytes32,uint256,bytes32)", "08df8602": "Futarchy()", +"08dfaa0a": "removeReceivedToken(address)", "08dfef4c": "upsertAll(address[],uint256,bool,bool,uint256)", +"08e0225c": "venusBorrowerIndex(address,address)", "08e05b85": "instantTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"08e0d29d": "authenticate(address)", "08e12ad3": "addressOfERC20OldToken()", "08e130c9": "setStables(address)", "08e1438c": "everToken()", "08e150db": "LogInvest(address,uint256)", +"08e169d9": "setAaveReferralCode(uint16)", "08e2287c": "getPlayerVaultsHelper(uint256)", +"08e2b95d": "getERC20TokenTo()", "08e2cd00": "testFailTransferBeforeFinalize()", +"08e33660": "swapItNormal()", "08e3399f": "hashes(address)", "08e34e7f": "endBounty()", +"08e3c578": "HFLYAddress()", +"08e45dc1": "recover(uint256,address,uint256)", "08e46cea": "processAndCheckParam(address,string,uint8[],bytes32[],bytes32[])", "08e484a8": "doEscape(uint32,int256)", "08e496ea": "vaultPercentOfTotal()", +"08e59ca6": "earnPool()", "08e6b41c": "claimLegacy()", "08e8000c": "transferSecurityDeposit(address,address)", +"08e871de": "depositForWithReferral(address,address)", "08e88aa1": "newPackage(address,uint256[])", "08e88ab9": "giveMultipleItems(address,uint256[])", "08e8ac38": "hexStrToBytes(string)", @@ -5096,22 +9293,34 @@ "08e9988b": "airDropAmount()", "08e9daa5": "countries(uint256)", "08e9f758": "GenericCrowdsale(address,address,address)", +"08eaae4d": "heapEntry(uint256)", +"08eb17f5": "updateRateAndModifyParameters(address,bytes32,uint256)", +"08eb386f": "givePrices(address[])", "08eb4e98": "cancel(address[5],uint256[6],uint256)", +"08eba921": "approve_798(address,uint256)", "08ebbfc4": "AdminAccessTransferred(address,address)", +"08ebd144": "epRwdPerBlks(uint256)", "08ebd3d3": "KBKToken()", "08ec17a2": "testDeductCoin()", "08ec6164": "colonyMultiSig()", "08ec651f": "createDeklaBidAuction(uint256,uint256,uint16)", "08ed0236": "setAirdropStatus(bool)", +"08ed2c71": "uniswapContractAddress()", "08ed8d16": "setTesting(bool)", "08ed8e0c": "minimumBidAllowed()", "08edf505": "claimH1()", +"08ee290e": "getPegged()", "08ee33af": "getRdFee()", "08ee7325": "tokensPerCentsWeekOne()", "08ee76a7": "dickbutt()", +"08ef2424": "GIVETH_ADDRESS()", "08ef59ff": "setBonusSystem(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "08efde8b": "DXYToken()", +"08f00733": "DsVDVTheoDoi(uint256)", +"08f00e34": "exitETH(address,address,uint256,uint256)", +"08f0a590": "enableOpenTransfer(bool)", "08f0b1b0": "PRE_WIN_MULTIPLE_PER()", +"08f0cd34": "supplyIndex(address,address)", "08f10999": "beatGame()", "08f12470": "getLockById(uint256)", "08f14dd8": "ComputeMyDivs()", @@ -5119,54 +9328,95 @@ "08f235ec": "getDefaultPayment()", "08f2e24c": "setFreelancerJobIndex(address,uint256,address,uint256)", "08f2e704": "MBCash()", +"08f2ec06": "MAXIMUM_WEIGHT()", +"08f31857": "anchorAdmin()", "08f46b0a": "LeapCoin()", "08f48256": "StorageEnabled(address)", +"08f4ac92": "profitingOf(address)", "08f53f44": "setAllowanceAddress(address)", +"08f55ce0": "maxDailyJackpot()", +"08f579b6": "TradeBalancingAlgorithm()", +"08f62349": "burnOut(address,uint8)", "08f68b90": "SetsecondTTax(uint256)", +"08f69214": "totalGiftedAmount()", "08f6e3b4": "BOUNTY_EXCHANGE_RATE()", "08f7349a": "_addDistribution(uint256)", "08f75d17": "move_reveal(bytes32,uint8)", +"08f7b8dc": "DmexOracleContract()", "08f7d570": "incrementalInverse(uint256,uint256,uint256,uint256)", +"08f802cc": "getLockedTokensValidity(address,bytes32)", "08f9732b": "ForwarderTarget()", "08f978c6": "migrationInfo()", +"08f996a3": "switchNetwork(bytes32)", "08fa0e92": "canTrade(address[3],uint256[4],bytes)", +"08fa13ef": "people1(string)", "08fa3b51": "approveCorrespondent(uint256)", "08fae7db": "ICO_PHASE1_BONUS_PERCENTAGE()", +"08fb4d9f": "setCurrentCoef(uint256)", +"08fb6939": "totalPaidOf(address)", "08fb8a88": "changeServer(address)", "08fc299b": "presaleMaxSupply()", "08fc9ec8": "chunk6IsAdded()", "08fcec89": "setNoteReportingGasPrice(bool)", +"08fd6322": "setWhitelistedDeployer(address,bool)", "08fd866c": "deleteAllCoverImages()", +"08fdd8ec": "getBXHBlockRewardV(uint256)", "08fe23ca": "sq(uint256)", "08ff597a": "tier_cap_3()", +"08ff5bbf": "_daiToken()", +"08ffbc35": "registerStaker()", "08ffce24": "predecessorAddress()", "090015d8": "CONFIG_MAX_VALUE()", +"09004aef": "A19(bytes)", "09004eb1": "getCard(uint8)", "09007804": "getEOSKeyFor(address,address)", +"09008563": "startNextRound(uint256)", "0900f010": "upgrade(address)", +"0900f013": "ETHUSDPriceFeed()", "09010e53": "changeTransfer(bool)", +"09011cb9": "guardianListed(address)", "09019ca0": "enter(bytes32,bytes8,uint32)", "0901a3f1": "currentAllocations(uint256)", +"0902517b": "getBuyAmount(address,address,uint256,uint256,uint256,uint256)", +"09028a8f": "gtoken()", "0902b25d": "maxEther()", "0902c6d7": "testToUint(bytes)", "0902f1ac": "getReserves()", "0902f72f": "addOrder(bytes32)", +"0903891f": "canSellErc20(address)", "090399fd": "announceWinner(address,uint256)", +"0903f558": "testIn(uint256[5],uint256)", +"0903f70e": "getSafePrice(bytes32)", +"0903fb8b": "MessageReceiveSta(address,uint256,uint256)", "0904603e": "FTFNExchangeToken()", "0904cb57": "gameStarted(uint256)", +"0905213e": "govGuard()", +"09052679": "registrations(address,uint256)", +"09058dea": "addUniPair(address,address)", +"09058df8": "Send0GiveBase()", "0905aa5c": "withdrawnTokens()", +"0905c9f9": "propose(uint256,bytes32,address,address,address)", "0905f560": "emergencyMode()", "090637a1": "GetPart(bytes,uint256)", +"09063eb4": "withdrawETH_fake()", +"09069465": "emergencyRemoveFromFarm(address)", +"09078613": "pegged()", +"09080945": "getGroupMembersDeepIndexer(uint256,address)", "0908178f": "NoFeePonzi()", "09081c51": "TCEToken()", "0909338a": "emitHeartBeat(bytes32,int256,int256)", "09094f7a": "ethWallet()", +"090954ec": "registeredShares()", "0909981a": "Created(address,address,bytes)", +"0909a30e": "StoreClaimSeed(address,uint256,uint256)", +"0909e45f": "setDmmEtherFactory(address)", "0909e8f7": "SafeModeActivated(address)", "090a1f92": "RapidChain()", +"090b58ca": "randomLucky()", "090b78e9": "setTrustedTokenHandler(address)", "090b8d18": "SPIDER_BASE_REQ()", "090bb93f": "mtcRate()", +"090bbb01": "nextEraTime()", "090bf3b7": "left29(uint256)", "090c01d0": "editLimits(uint256,uint256)", "090cebff": "unDelegate(uint8,bytes32,bytes32)", @@ -5176,36 +9426,57 @@ "090d94cc": "WithdrawalsOpen(address)", "090d993a": "updateParticipantCapTier1(uint256)", "090e5465": "trainFee()", +"090e7a71": "setBookAddress(address)", "090e871f": "createNewSubtoken(uint256,address,uint256)", "090ea6f3": "setProxyManagementAddress(address)", "090f4465": "payoutDate()", +"090f725b": "_newVote(bytes,string,bool)", "090f92f7": "kittensRemainingForSale()", +"091030c3": "stakersCooldowns(address)", +"0910a510": "getLiquidity()", +"0910c6a5": "changeGreeting()", "0910c715": "bringKydyHome(uint256)", +"0910d1b0": "TokenDecimals()", "091157cb": "getSerializedEmployee(address)", "0911bdf7": "cancelTokenTransaction(address)", "0911def1": "QoppaCoin()", +"0912126f": "maxSwapGodKimchi()", +"0912ae6d": "minRedeemAmount()", "0912d306": "TokensReceived(uint256,address,uint256)", "0912fabd": "canWrite(address,bytes32)", "09130ba1": "getEtherToBuy(uint256,uint256,bool)", "09130f5d": "getAllMyTokensForAllEtherOnContract()", +"0913348f": "updateIpfsHash(string)", "091356c5": "hasPrestige(address)", "0913fc3a": "leekStealPot_()", "09146664": "_burn(string,address)", "0914a363": "cofoundersSupply()", +"09151cb6": "etherToCom(uint256)", "09151f2d": "checkTotalPrizesWaiting()", "09153f57": "unsoldVestingAddress()", "0915db6d": "End9()", +"0915dd8f": "setcappedSupply(uint256)", "091621bd": "getHeadWalletList()", +"091638ec": "addSingleCollaborator(uint256,address)", +"09164f9c": "transferSnowflakeBalanceFrom(uint256,uint256,uint256)", "091691c5": "AgriChainNextData()", "0916a263": "showLockTimes(address,address)", "091734e0": "ROBEthExchangeRate()", +"0917a84f": "setRegistar(address)", +"0917e776": "getTotalStaked()", "0917f827": "JoannaToken()", +"0918992b": "setLaunchTimestamp(uint256)", +"0919001b": "_sellerRewardDandy()", "09194fe8": "hasSponsor(uint32,int256)", +"091954cd": "transferGuardian(address)", "091a79b2": "getVoteAndTime(uint256,uint256)", "091a7a4b": "OperatorAdded(address,bool)", +"091aada7": "TwoMoonPrize(address,uint256)", "091ac806": "getGuestNotesInfo(bytes32)", "091b3e6d": "transferMilestone()", "091ba3da": "storeDataAndValue(bytes)", +"091c1d22": "getterGlobal()", +"091cd10f": "safeinterval()", "091cde0b": "DisbursementHandler(address)", "091d2788": "GAS_LIMIT()", "091d709b": "createVisa(address,uint256,bytes32,uint256)", @@ -5214,23 +9485,34 @@ "091dbfd2": "enterBidForPunk(uint256)", "091dffca": "withdrawFromVault()", "091e3f60": "getSponsorshipsAmounts(address,uint256[])", +"091e9775": "startingBidOf(uint256)", "091e97f9": "sellnode(uint256)", "091e9a60": "buyCoin()", "091eea8f": "withdrawChildDao()", "091f2f11": "getChildren(bytes32,bytes32)", +"091ffaf5": "log(uint256,address,address,bool)", +"09206af3": "toBQueenERC1155Id()", "0920829b": "adminGetPastShopFund()", "0920d32c": "CardsRaffle()", "0920d9a0": "getNumTokensForContributorInternal(uint256,uint256,uint8)", "09214a07": "switchStage()", +"09216018": "setPromoToken(address)", "09218e91": "position()", +"092193ab": "distributeReward(address)", +"0922482c": "bondRewardPool()", "0922e596": "paymentController(address,uint256)", +"0922f9c5": "RESERVES()", "09231602": "setGasPriceLimit(uint256)", +"092338cc": "maxPurchasableInOneTx()", +"0923390e": "ExternalTokenPurchase(address,uint256,uint256)", "09236161": "Craftmelon()", "09241200": "wasSuccessful()", +"09244c9c": "vips(address)", "0924da5c": "resetHealthAndManaTimestamp(uint256)", "0924fbba": "Imdex()", "092501a0": "setCommission(uint32)", "092518a7": "SecurityDeposit(address,address,uint256)", +"09251b6b": "claimNotTaken(uint256)", "09260db7": "cut(uint256)", "092626a7": "Bitcoin_address()", "09262f71": "is_signed(address,address,bytes32)", @@ -5239,148 +9521,290 @@ "0926b32a": "getTokenSizes(uint256)", "0926e6a2": "joinTeam(uint256)", "09270ef4": "set_address(address)", +"09274cbb": "famers(uint256)", "09276ea4": "notifier()", +"0927a78f": "OPTIMAL_LOAD_PERCENTAGE()", +"0927c3bb": "alcx()", "092854e5": "cry()", +"0928b798": "getCampaignInfo(string)", +"09291623": "announceWithdraw(address,uint256)", +"092956a8": "UserData(uint256)", +"09295ff4": "get123()", +"0929b472": "userDatas(address,address)", +"092a1820": "person(uint256)", "092a2e37": "multiAccessAddOwnerD(address,address)", +"092a5781": "CETHER()", "092a5cce": "destroyContract()", "092a5fcd": "Devolver_Tickets(uint256)", +"092a902f": "changeBucketSize(uint256)", "092ac9e5": "approveByB(uint256,string)", "092b25e9": "setOwner(string,address)", "092c506e": "maxSGTSupply()", +"092c5b3b": "CONTROLLER_ROLE()", +"092c5cb3": "viewActivationFee()", +"092c6084": "setGoaldOwner(uint256)", +"092d0afc": "itemsForSale(uint256)", "092d3de4": "closeAnyGame(uint256)", "092dde45": "BteCoinToken()", +"092ea04d": "getWeddingDateTime()", +"092eb81b": "dgmPerUSDT()", "092ecf1c": "raffleRewardAmount()", +"092f00ce": "setOpenPrice(uint256,uint256,uint256)", "092f3623": "setBlockDotBlockHash(uint256,bytes32)", "092f9d79": "DONATION_WALLET()", "092fe5c5": "sendFirst(address,uint256)", "093077ee": "calcRewardPool(uint256,uint256)", "0930907b": "zeroAddress()", +"0930dbf7": "provisionLiquidity()", "0930f27b": "QVT(address)", "0930f6db": "getFunderContribution(address)", +"0930fdc0": "_canProceedAgreementAction(uint256)", "09310c61": "MinutemanToken()", "0931ce67": "getAnimalsCount()", "09320100": "addAllCandidates()", +"09322fce": "removeCertificate(bytes32)", +"09327c56": "totalRewardPerBond()", "0932c3c6": "setPriceLocked(bool)", "093376fe": "getOrders(address)", +"09338701": "CreatedUser(bytes32)", +"09338b52": "extractETHIfStruck()", "09339f2e": "lastSignedTimestamp()", "0933a670": "offerOff(uint256)", "0933b939": "renewMembership()", +"0933c1ed": "delegateToImplementation(bytes)", "0933e3a7": "setRandomContract(address)", +"09342d6f": "addChainBid(string,string,string,string,address[],uint256[],string[],bytes[])", +"093472db": "adminAddRewardsExtraToken(address,uint256,address)", +"0934a6df": "logStartAuction(uint256,uint256,uint256)", +"0934ad9e": "MrAddonTokenFunc()", +"0935530e": "updateFixedAmount(uint256)", "09357344": "setBuyExchangeRate(uint256)", +"09358479": "accept(uint256,uint256)", "09358584": "stageSupply()", "0935fced": "Bhinneka(address)", "09362a6a": "changeOwnerTwo(address)", +"0936305e": "TransferTileFromOwner(uint16,address,address,uint256)", "09366ed2": "downdoot(uint256)", +"0936dfc3": "getLastSent()", +"093706e6": "changeAcceptAny(bool)", +"0937b025": "changeFunctionStatus(uint32,bool)", "0937be1a": "createFixedPeriodVpfFactory(string,bytes32,uint256,int256[],uint256,uint256,uint256)", "0937e68a": "paymentCount()", +"0937eb54": "accountedBalance()", "0937fb36": "getEventOutcome(uint256,uint256)", +"09382758": "_supply(uint256)", +"09382993": "getAgricoltore(string)", "09386cc6": "leggiMsg(uint256)", +"0938b1e7": "BorrowLiquidated(address,address,uint256,uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256)", "0938be6e": "RockScissorPaper(address)", +"0938ee40": "serviceFees(address)", "09390af1": "getPercentageAmount(uint256,uint256)", +"09397287": "TEAM_RESERVED_AMOUNT2()", +"093983bd": "orderLender(bytes32)", +"09399715": "merkleRoot(bytes32)", "0939e863": "shareholder()", "0939f6f4": "ContractFunded(address,uint256)", "093a86d3": "gateways()", +"093a9fbc": "FEG()", +"093aa52a": "finalizeNewManager()", +"093abad0": "block(address,uint256)", "093ac512": "MINCAP_TOKENS_ICO()", "093ae918": "ETH_EURCENT()", +"093af74f": "TEAM(address)", +"093ba8e6": "exec(address,bool,uint256,string,bytes)", "093c16db": "getActualTierIndex()", "093c4ee6": "getChannelBalance(bytes32)", "093c5284": "migrateFrom()", "093d11a1": "getLocksAmount(address,uint256)", +"093d43e0": "applyGovernanceForUpdateIncentive(bytes32)", "093d5fd4": "getOperationsLength()", "093db6ff": "fetchOrderByIdWithWithPayer(string)", +"093e461c": "linkToGateway(address,bytes32)", +"093e58ba": "totalAxiesAdopted(uint8)", "093e9633": "getNewDefaultPrice(address)", +"093ed8ba": "setPairToken(address)", +"093f2fc4": "CALLER_COMPENSATION_DENOMINATOR()", "093f5198": "make(address,address,uint128,uint128)", +"093f6cc6": "AddedExchange(bytes32)", +"09400707": "integrate_fraction(address)", +"09400b28": "selfDestructToken(address)", "09405164": "getOpenCandidates()", +"0940f760": "rolloverWithGasToken(bytes32,address,bytes)", "094111be": "FCMCOIN(uint256,string,string)", "09412b53": "delBot(address,address)", +"09413ce2": "_pendingWpcBorrowIndex(address,address)", "09417110": "signatureBurnStatus(bytes32)", "0942adbd": "getPetCardSeries(uint64)", +"09431da0": "baseEther()", "09442d66": "getCurrentInvestments()", +"09444a4c": "getFullScale()", "094455c4": "addProduct(string,uint256,uint256,uint256)", "094493b9": "getAPAddresses()", +"0944db16": "propose(address[],uint256[],string[],bytes[],string,uint256)", "0944e35d": "TimedCrowdsale(uint256,uint256)", +"09451cb2": "direct_drop_withdraw_address()", +"09452608": "CountTodoWork()", "09453628": "TokenERC20(uint256,uint8,string,string)", +"09453fb3": "TransferAllowed(bool)", "0945f04f": "completeWhiteList(address[])", +"0946e7b7": "FLASH_CONTRACT()", +"0946e807": "getRegistrationFee()", "09478fb7": "_totalEtherDonated()", +"0947d0d0": "job(address)", +"0948eb7a": "USD_VALUE_FACTOR()", "09491490": "smsVerifiedBonusBps()", "0949fcfe": "setInviteCollateralizer(address)", +"094a5c65": "addSyncPairs(address[])", +"094ab162": "slashDuplicatePrecommit(uint256,uint256,bytes,bytes,bytes,bytes)", +"094adfbd": "preICOprivate()", +"094aef3e": "withdraw(string,uint256,bytes32,bytes)", +"094b7415": "feeToSetter()", "094b94c7": "BROKER_RESERVE_SUPPLY()", +"094c23b3": "ROUND_3_TOKENSALE_LIMIT_PER_DAY()", "094c2919": "performWrite2()", +"094c303b": "getProductWithId(string)", +"094c3612": "pendingNodeTail()", "094c491b": "rewardFiboken()", "094c6f98": "TokenSaleFail()", +"094c7e19": "IMPROVEMENT_DENOMINATOR()", "094c8bee": "unlockSales()", +"094ca4b0": "zHegic()", "094ca5f2": "RemoveAuthority(address)", +"094cc0db": "extraAmounts(address)", "094cd5ee": "deletePost(uint256)", +"094d0fc7": "numToVotes(uint8)", "094d583b": "_newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", "094db54b": "private_setMaxMultiRolls(uint256)", +"094dc1c6": "l2l7users()", +"094e503e": "setRewardConstant(uint256)", +"094ed15e": "getNextEthForDaiActionID(uint256,uint256,address,bytes,uint256)", +"094f81f8": "getDisputeResolutionParams()", "094fb864": "getCampaignBudgetById(bytes32)", +"094fdc89": "getSoldier(uint256)", +"094feeb4": "unlock(uint8)", +"09500c17": "brrrEvent()", +"09504be8": "passwordOwner()", "09508ce4": "getReportedMatches()", +"0950d515": "fixFailedMessage(bytes32)", "0950e4ad": "_getNextPrice(uint256)", +"0950f44e": "withdrawCollg(uint256)", "0950fe78": "setSoftCapCHF(uint256)", "09518753": "calculateTokenBuyPrice(uint256)", +"0951877e": "extractBTHAmount(string)", "0951b3ac": "receivedDividends()", +"0951d33b": "LOCK_WITH_EIGHT_WEEKS()", +"09521530": "swapTokenToToken(address,uint256,address,uint256,uint256)", "095228b5": "unfrozenType(string)", "09522d7f": "reservedAllocation()", +"0952680f": "pauseNewLoans()", +"0952ad24": "WHITELIST_PROXY_ADDRESS()", "0952c504": "requestOwnershipTransfer(address)", +"0952e27d": "LogWhitelistAdded(address,uint256)", +"0952f69e": "peopleDetails(uint256)", +"09531333": "CWGContractAddress()", +"095314a8": "burnPynths(address,uint256)", +"095329e1": "test_indicies(uint256)", "09533303": "setWhitelistedUser(address)", "095408a7": "addCustomSecurityToken(string,string,address,address,string,bytes32)", "09541d48": "disqualifyBid(address)", +"09546da4": "masterChefMinted()", "0954896e": "MultivestUnset(address)", +"09549769": "getDouYeaTransferFeeAddress()", +"0954ecd0": "getStickerList(address)", "09553b28": "addressDev()", "0955ae99": "getAds()", +"0955d91d": "INX_SetCEx(address)", +"0956e5a6": "numberOfStrategies()", "09574810": "getOperationsNumber()", +"0957a4b6": "setMetaContract(address)", "0957c807": "setToForking()", "0957de9a": "unsoldTokensWallet()", +"0958a9f3": "coinvest()", "0958ab50": "isInvestAllowed()", "0958f83d": "registerName(bytes32,address,uint16)", +"09596616": "addClient(address,uint256)", "09598dfd": "finalizeBet(uint8)", "0959bd1a": "redeem(uint256,address[])", "095a9983": "ETUex()", +"095ad116": "addPack(uint256,uint256[],uint256[][])", "095b697b": "setClearingPriceCode(bytes)", +"095b6d4c": "TARGET_DIVISOR()", +"095ba373": "createSubscription(address,uint256,uint256,uint256)", "095bbe59": "findContractByModText(string)", "095bcdb6": "transfer(address,uint256,uint256)", "095c075e": "guessAnswer(uint256)", +"095c343c": "alterAddonBlock(uint256)", "095cf5c6": "setTeam(address)", "095d5a70": "approveRound(address)", "095daeb1": "getVoterProposal(address,uint256)", +"095db925": "jRewardPercent()", "095dc5cf": "removeVIP(address)", +"095dcccc": "pushPoolShareFromLib(address,uint256)", "095e360e": "getMiningWarRound()", "095e596f": "AccountVoid(address)", "095e89ac": "setTranslatorRate(uint256)", "095ea7b3": "approve(address,uint256)", "095f2f16": "tech()", +"095f77e6": "godKimchi()", +"095fc84c": "main2v1(uint256,uint256,uint256,bool,uint256)", "0960002f": "registerAff()", +"096015b0": "setWithdrawFeeRate(uint256)", "09603109": "Vote_Customly(address)", "09607679": "changeTest(uint256)", "0960db7c": "finalizeExit(bytes32)", +"0960f638": "curChainID()", +"09615662": "amt(address)", "096191dd": "executeBeneficiary(uint256)", +"09622642": "weiDebtCounterVault(address)", +"09629656": "NewItem(bytes32,uint16,uint16)", +"0962c4f9": "periodFinished()", +"0962ef79": "claimRewards(uint256)", "0962f869": "_getList()", "0963415c": "getSPBalance(address)", "09639373": "createZombie(string,uint256)", "0963b12d": "tokenChanged(address,uint256)", "0963d4b7": "mintMonster(uint32,address,string)", "096437bc": "TokenTes()", +"09646cfe": "pendingLotus(uint256,address)", +"0964737a": "writeToCounts(uint256)", "09648181": "refundDeadlineTime()", +"0964876b": "matrixLevelPrice(uint8)", "09648a9d": "getState(bytes32)", +"0964fc91": "POOL_MINT_POWER()", +"09650440": "_removeFromDelegatedByHolder(address,uint256,uint256)", +"096508ac": "incomeWithdraw(uint256)", +"09653674": "setRewardPercentage(uint256)", "0965b0b7": "fechAllForCandidateByStage(uint256)", "0965be64": "managerETHbonus()", "0965bf7d": "processProposals()", "0965c4b2": "collectedNDAO()", "0965f6ac": "superPrivilegeCost()", "0965fd36": "LaxmiCoin(uint256,string,uint8,string)", +"09660427": "olyToken()", "09660513": "getGameById(uint256)", "09663cef": "getTotalPetCardSeries()", +"09664427": "FreeExtension(bytes32)", +"09664afe": "setRewardAddr(address)", +"09670ae7": "updateItemLocation(uint256,string,string,string)", "09671f79": "tokensCount(uint256)", "0967417b": "getExpectedRate(uint256)", +"09675401": "_lastAccountingTimestampSec()", "0967cff0": "setCrowdsaleStartTime(uint256)", +"0968112b": "fnxAddress()", "096835e3": "NewOraclizeQuery(string)", "09688000": "makePurchaseForClient(address,address,uint32)", +"0968c3d8": "signalTokenLock(address,uint256,uint256,uint256)", +"0968e3d4": "main_wallet_amount()", "0968f264": "withdraw(bytes)", "096908f9": "_adeptToken()", +"09693c49": "bonusLastUpdateTime()", "09696f1a": "tokenHardCapReached()", "09699581": "setPI_edit_13(string)", +"09699ff5": "burnPermissionManager(address,bytes32)", "0969a71f": "POCG()", +"0969e8db": "quotePrice(address,address,uint256,uint256,uint256)", "096a113d": "getCipher(uint256,address)", +"096a2e32": "pauseTrigger()", "096a3778": "placeBet(bool)", "096a8ab7": "setTransactionFee(uint256)", "096aadce": "ownershipTransferCounter()", @@ -5389,158 +9813,286 @@ "096c0c27": "amountOfLovers()", "096c45b1": "setGasUsed(uint256)", "096c9d6f": "getStartHourglass(bytes32)", +"096caf97": "VerifyClaim(address,uint256,uint256)", +"096cc317": "checkStock()", "096cf33f": "onlyDeves()", "096d740b": "stopWork()", "096e27d9": "isBeneficiary(address,address)", "096e47ca": "SetConfirmRound(address,uint8,bool)", +"096f1b39": "propose_transfer(address,uint256,bytes32,bytes)", "096f4090": "minecoin()", "096f4a49": "CrowdSaleFinished(address,string)", +"096fcf75": "repayInternal(address,address,uint256,uint256)", +"096fe179": "testSetMarketInterestRateModel_Success()", +"09702cdc": "getWerewolfAssetByOwner(address)", +"0970f9e6": "LogNFTMintedForSale(uint256,uint256,address)", +"09710649": "gemLPAddress()", +"09715fb9": "product(int256)", +"09716d60": "coinSavingsAccount()", +"097205e1": "forLater(address)", +"09724264": "printSupplies(uint256)", +"097267ad": "tokenHUSD()", "097284b2": "maxSupply_()", +"0972bf8b": "cTokenBalancesAll(address[],address)", +"0972c4f8": "_collectPatronageAndSettleBenefactor(uint256)", +"0972c845": "collectFreedomDividendFromSender()", "09738d25": "preSaleHardCap()", +"09740979": "provable_setCustomGasPrice(uint256)", "09745c5b": "ShariqCoin()", +"0974b706": "sellIt(uint256)", "0974f94c": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256)", +"0975b097": "HTK_tokensSold()", "0975c338": "DKK_Omnidollar()", +"0976160a": "GiveTokenPerm(address,bytes32)", +"097616a3": "__BaseUpgradeablePausable__init(address)", +"097663a5": "setValidationOracle(address)", "097694e1": "getFileByIndex(uint256)", "0976e9a7": "catchMonster(uint256,uint32,string)", "09772f8f": "getMembersCount()", +"09777aa6": "minLength()", "097788d7": "ADPOWER()", "09779838": "changeKeeper(address)", +"09779a26": "v2Rewardd()", +"0977a59a": "GetMaxDuration()", +"0977aefc": "logBytes24(bytes24)", +"097851c5": "calculateDepositAmount(uint256)", "09787a2c": "newComment(uint256,string)", +"0978e84d": "swapTokenAmountForBonusThreshold()", +"0978ec67": "getKeyNonce(address)", "09798e2f": "currentpreicobonus()", "09799c01": "stopDate()", "09799ead": "recoveryToString(uint256)", "0979f7f2": "wagerCardForAmount(address,uint256)", +"097a23b8": "rate_forReward()", "097b36dd": "createUser(bytes32,string)", +"097b3b8d": "claimWSZOReward(address)", "097b4eea": "addToReferrals(address,address)", "097b557f": "cancelAuction(uint64)", "097b94d1": "mediaTokensInitialSupply(address)", +"097ba333": "purchasePriceFor(address,address,bytes)", +"097bb9e0": "beneficiaryAddresses(uint256)", "097bcf7b": "getEtherOrdersLength()", +"097c0347": "donorSignup(string,uint8,uint256,bool,bool,bool,bool)", +"097c1304": "SetParticipantRole(address,uint8)", "097c3ead": "AddGift(string,uint256,uint32[],uint256[])", +"097c8108": "willPerform(bytes4,address,bytes)", +"097cf2b3": "setDataProviderMode(bool)", "097cf31c": "MengToken()", +"097d2604": "set_close_apply_envoy()", "097d44a8": "setNFTAddress(address,uint256)", "097d5155": "holdTime()", "097d8376": "request(address,bytes,bytes)", +"097da5fb": "addSet(address,uint256)", +"097da764": "onBuyOrder()", "097dced0": "updateLawyer(uint256,address)", "097dfa2f": "placePurchaseOrder(bytes32)", "097e8fad": "getTheInvestor()", "097f1192": "Miners()", "0980150f": "payInternal(address,address,uint256,address)", "09801707": "DOWN_winRate()", +"09810e3f": "itemsDelete_without_gap(uint256)", +"09812fe2": "reward(address,address,uint256,bytes32,bytes32,bool)", +"09813482": "getStakeInfo(uint256)", "09821095": "setDailyVolumeCap(uint256)", "09824a80": "registerToken(address)", +"0982658c": "spotInrate()", "09828a47": "promoPause()", +"0982d5b0": "transfer(address,address,uint256,uint256,uint256,bytes)", +"0982daf1": "onAffiliatePayout(uint256,address,bytes32,uint256,uint256,uint256,uint8,uint256)", +"0982e405": "updatePartialReward(address,address,uint8,uint256)", "098300bb": "goldDecimals()", +"09836829": "diamondHandsFromToken(uint256,bool)", "09838bd9": "maxTokensRaised()", +"09839b52": "isSToken()", "0984f0c1": "sendMessage(bytes,bytes,bytes,bytes)", "09850495": "minusFreezeEndTime(uint256,uint256)", +"098525c7": "synthEx(uint256,bytes32,bytes32)", "09857955": "recordRoundProfit(uint256,uint256)", +"098589fe": "pendinganon(uint256,address)", +"0985b66d": "setTma(address)", +"098604bc": "aaveCooldown_Time_Left()", "09861b81": "flooredSub(uint256,uint256)", +"09866f61": "getOutExactIn(address,address,uint256,int256,int256)", "0986e647": "getLength(uint256)", +"0986e733": "tokensAddress()", "09879962": "namehash(string)", +"0987df03": "onTransfer(address,address,address,uint256)", +"0987e1ad": "getProposedOwners()", "09886649": "transfer(address,string)", "0988ca8c": "checkRole(address,string)", "09894422": "TokensIssuedOwner(address,uint256,bool)", "098956a8": "getOldRecordInHistoryRecord(uint256)", +"098956ee": "currentMarketPrice()", +"0989d589": "globalReplace()", +"0989d71d": "exchangeEthForTokens(uint256)", "098a7259": "addAfterValidId(address,uint32,uint128,uint128,uint32)", "098a7321": "firstDueDate()", "098ab6a1": "snapshotCount()", "098ae858": "ReverseConfirmed(string,address)", +"098b6cde": "matchDonor(uint256,uint256)", "098b939a": "isEnoughConfirmed(bytes,uint256)", "098bf5de": "requestTransferOfETH(address,uint256)", +"098c2ab6": "addToTokenOffset(uint256)", "098c83fe": "notContractPred(address,address[],uint256)", +"098c9ff4": "setEthDepositAddress(address)", +"098d3228": "MAX_INT()", +"098dbba4": "withdrawMaster(address,uint256)", "098dbf5c": "executeTransfer(address,uint256,address)", "098deeb5": "startScoring()", "098e349a": "currentRoundParameters()", +"098e6232": "testSubstring()", "098e652b": "batchCreateAsset(uint8[],uint256[],uint256[],uint256[],address[])", "098e8fc4": "setOffer(address,uint256,uint256)", "098eb040": "contributeFiat(address,uint256)", "098ed807": "productAccountsLength()", "098f076e": "isRejected(uint256)", +"098f8e24": "__Offering_init(address,address,address,uint256,uint256,address,uint256,uint256)", "098fb45c": "setFeeDistributionsAndStatusThresholds()", "098fc010": "LylToken(uint256,string,string)", "098fe7da": "MYSLF()", "099015d9": "totalBurnedOfType(uint256)", "09904c00": "depositWallet()", "09905bdb": "priceForVerificationInWei()", +"0990ba51": "trade(address,uint256,address,uint256,bytes32[],uint256[],bytes,bool)", +"0990e247": "C_COMP_ADDR()", "0991bb09": "makeSperm(address)", "0991f5a6": "closingTimeForCloning()", +"0992084f": "secondsPerSupplyBlock()", "099224e9": "TrexToken()", "09929628": "Contractbalance()", "0992e4c3": "contributorMaxCap(address,uint256)", "09931e00": "QWoodDAOToken(uint256,uint256,uint256)", "09936cd6": "FLescoin(address,address)", +"0993b1c0": "addDJ(address)", +"0993b789": "threeBlock()", "0993e87f": "setSellingPrice(uint256)", +"0994050d": "minDeltaBasisPoints()", "0994257a": "BitcoinSamaritanSupply()", "0994a0a0": "DSTokenTest()", +"099526bc": "total_destroyed()", +"09953d8f": "setGasClaim(uint256)", +"09956f66": "getReservePoolBps()", "09957e69": "newSale(bytes,uint256,uint256)", "099583de": "PRESALE_TOKEN_IN_WEI()", +"09958e4c": "getChildStatus(uint256)", "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()", +"0996eebe": "unlockByQuantity(address,uint256,uint256)", +"0997147d": "getLoanData(address)", +"0997a83a": "computeTally()", +"0997f577": "getUsertotalInvest(address)", +"099837b7": "userRegistrations(address)", "09987f3c": "checkAllRewPaid()", +"09989518": "UnlockRecordAdd(uint256,bytes32,string,string,uint256)", "09989c8b": "getCfiEstimation(address)", "09990611": "weiPerBtc()", +"099963f4": "swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256,bool)", +"09997289": "setNewIFeed(address)", "09999404": "subLoan(address,uint256)", "099a019d": "getBid()", "099a5ab8": "lastBlock_v2Hash_uint256()", "099ae6bc": "flowerAuction()", "099aea0a": "isWorking()", +"099af44a": "premiumUsers(uint256)", "099b9531": "contractownsthismanyP3D()", "099ba954": "eSwitchToken()", +"099bd978": "getViaBase()", +"099bf456": "war()", "099c00b9": "GWCoin_v3(address,address)", +"099c3c98": "activeLCPAddress()", +"099c47bc": "requestGovernorChange(address)", "099c4c7e": "setCaps(address[],uint256[])", "099c7ab2": "freePeriodEndTime()", +"099cc88f": "aKimBapEBlock()", +"099cd7c3": "registerPartner(bytes32,uint8,address)", +"099ce9c7": "waive(uint256,uint256)", +"099d25a3": "_getDrawDart(address,address,address,bytes32,uint256)", +"099d2900": "drmVolumeCap()", +"099db017": "hasMinterRole(address)", "099dccc8": "getTeamMemberAddres()", "099dde07": "maxTarget()", "099e0a26": "listPairs()", "099e4133": "backend()", +"099e7f6c": "TOTALCAP()", +"099eb425": "StartOnlyMinPrizesChanged(bool)", "099f40a9": "throwsWhenFinalizingNotEndedSale()", "09a00fb1": "IcoToken()", "09a02562": "getCensored(address,uint256)", "09a0307d": "tipLockCheck(bytes32)", +"09a07fd2": "claimingFeeNumerator()", +"09a08af4": "penalizeRelayManager(address,address,uint256)", "09a0cfe4": "changeChampsName(uint256,string,address)", +"09a1068c": "metaInfo(uint256)", "09a14f2e": "linkSelf()", +"09a29df0": "_rateOrInverted(bytes32,uint256,uint256)", "09a2b4ad": "asmSymbol(address)", +"09a2ba10": "addLiquidityToUniswapCORExWETHPair()", +"09a3367d": "submitTransaction(address,uint256,uint256,address,uint256,uint256,uint256)", +"09a34f00": "citizens(uint256)", +"09a36a99": "allowance(address,uint256,address)", "09a38873": "purchaseTokens(uint256,address,uint256)", "09a38f26": "feed100AndPay(uint256)", "09a39777": "projectWorkStarted()", "09a399a7": "personAdd(string,int256,int256,string)", +"09a3bbe4": "MAX_TOTAL_WEIGHT()", "09a3beef": "setTokenURI(string,uint256)", "09a44334": "changeElection(uint256,uint256,uint256)", "09a547bd": "approveAndCall(address,uint256,bytes,string)", +"09a54e1e": "receiveUnlock()", "09a555c0": "setIcoStart(uint256,uint256)", "09a55b65": "votePreProposal(uint256)", +"09a5fca3": "withdraw(address,uint256,uint256,address,uint256)", +"09a6400b": "removeJoinPartAgent(address)", "09a69f57": "getRewardAmount()", "09a71a00": "addTask(bytes,uint256,uint256,address,uint256,uint256,uint256)", "09a71ffb": "feesProfitDeposit()", +"09a74aff": "ecoIssue(address)", +"09a753af": "AppendOwner(string,string)", +"09a7718c": "prevVotingProposals(uint256)", "09a7dbb4": "CollectReturns()", "09a7dd17": "PRE_ICO_SINCE()", +"09a8acb0": "setDirectPrice(address,uint256)", "09a8d3f5": "oneEth()", "09a94a3d": "_initiateClaim(string,bytes32)", +"09a9597a": "parcelsSold()", "09a97b6f": "_getCategoryIdx(uint256)", +"09a9d76c": "getWhiteList()", "09aa3dcf": "maxTokenPurchase()", "09aa69c2": "cancelFlight()", "09aa7b67": "_mint(address)", "09ab5008": "ISeeVoiceToken()", +"09ab73bd": "sendFundsToExternalAccount(address,address,address,uint256)", "09ab8a03": "privateEndTime()", "09ab8bba": "delegateAllowance(address,address)", "09aba9ab": "ETHWalletCreated(address)", +"09abb4f4": "addStorage(address)", +"09ac2953": "updateStateOnFlashLoan(address,uint256,uint256,uint256)", "09ac3b00": "remainderWallet()", +"09ac86d3": "updateRandomness(uint256[2])", "09ad1c47": "getUserPayoutBalance(address)", "09ad8eef": "TBSTK1()", "09ad8f7e": "getNumChildOperation(bytes32,uint8)", "09ad9dd3": "BASE_PRICE_IN_WEI()", +"09ae1844": "BurnGenesisAddresses(address[])", "09ae2943": "stage_3_TokensSold()", +"09ae4d2c": "userDelta(uint256)", +"09ae8382": "periodOfPledge()", "09ae9452": "PreICOProxyBuyer(address,uint256,uint256,uint256,uint256)", "09aea85f": "getMaxTradeAmount()", +"09aeb59e": "setParentReferral(address,address,uint256)", "09af014f": "refillBalance()", "09af4b1e": "IoexCoin()", "09af8ffe": "guessAnswer(bytes32)", +"09afb4a7": "addInvestorToWhitelist(address)", "09b0245f": "Long()", +"09b04a47": "Retreat(uint256,bytes32,uint256)", +"09b0a2a4": "testTimesFunction()", "09b0ce3c": "DCVToken()", +"09b0d73d": "createProposal(address,bytes32,uint256,string,string,bytes)", "09b13db0": "fundraisingReservation()", "09b17085": "___proxyOwner()", "09b22a4d": "allowAirdrop()", @@ -5548,16 +10100,27 @@ "09b258f7": "exchangeRateIco()", "09b2996a": "originalRate()", "09b30ed5": "afterExecute(address)", +"09b392dd": "MOON_PER_ETH_WHITE()", +"09b3b266": "approve_839(address,uint256)", +"09b3bc11": "migrationenabled()", +"09b44fd4": "createLicense(address,string,uint256,uint256,uint256)", "09b481b0": "LIABILITIES()", +"09b4bed6": "usdcERC20Address()", +"09b4c4c7": "ownerbyvotetosend(address)", +"09b50a7c": "setProtocolCap(address,uint256)", "09b565f3": "updateTicketSum(address,uint256)", "09b5e4ad": "ProxyBuy(bytes32,address,uint256)", "09b637bc": "_founder()", "09b70ad0": "sellGenes(uint256,uint256)", +"09b7ab16": "getlevelOwner(uint256)", "09b7c704": "addIdArrayItem(address,uint256,string,string,address)", "09b86f84": "getPonziFriend(address)", "09b8e3cc": "ValidateExec(string)", "09b8f77a": "proposedRecoveryKey()", +"09b9258a": "createSwap(bytes)", +"09ba46af": "getGSNMode()", "09ba4a4a": "registerEmail(string)", +"09ba654b": "get2X()", "09bb03b4": "isChemistry()", "09bb317d": "FredToken()", "09bb7162": "createGateway()", @@ -5569,58 +10132,101 @@ "09bc90a4": "PerlToken()", "09bd1d41": "testF1(uint256)", "09bd3894": "SendTokens(address,uint256)", +"09bd4c31": "buyTo(address,uint256)", "09bd5a60": "hash()", "09bd98a4": "getNumAds()", +"09be58d5": "decimalsForeign()", "09beb01b": "feed50(uint256)", "09bf284c": "unanchor()", +"09bf2e75": "getAmountStakedByUser(address,address,address)", +"09bf55cb": "setFundingParameters(uint256,uint256,uint256)", "09bf6e42": "futureSaleVault()", +"09bff852": "donCoin()", "09c0f771": "getScoringMask(bytes8)", "09c110a1": "gzeFromEth(uint256,uint256)", "09c12ccb": "getNextPaymentDate()", +"09c198f7": "create(address[],string,string)", +"09c1a2bc": "getTokenToEthOutputAmounts(address,uint256)", "09c1a4b9": "totalIssuanceData()", +"09c1a71a": "getPEG()", +"09c20c07": "createSale(uint256,uint256,uint256,uint256,uint256)", "09c25e6c": "FinishedExporting()", "09c2b7f8": "MINCONTRIBUTION()", +"09c2d64e": "_assertOnlyStaker(uint256)", +"09c34544": "changeEmergencyTimeLimit(uint256)", +"09c34969": "VotingActivated()", "09c38bc8": "isAuctionManager()", +"09c39acb": "getDefaultAccountBalanceLimit()", "09c4a273": "isVetted(address)", "09c4bb2b": "releaseTime(uint256)", "09c4f8be": "GetContractStateTerminatedOK()", "09c51b4e": "assertSaneHTLC(uint256,int256)", +"09c5a317": "changeCollateral(bytes32,address)", "09c5eabe": "execute(bytes)", "09c5eb76": "getBalanceOfLogicContract()", "09c62a1b": "ONECToken()", "09c62c5c": "vanbexTeamAddress()", +"09c6e169": "depositBifi()", +"09c70bcf": "saleRates(address,address)", "09c71690": "tokenFallbackBuyer(address,uint256,address)", "09c72b26": "bonusInPhase6()", "09c76571": "operationAt(uint256)", +"09c8367c": "setUnitJadeStealingIncreases(address,uint256,uint256,bool)", "09c8d173": "claim(bytes32,uint8,bytes32,bytes32)", "09c922e6": "setOracleGasLimit(uint256)", "09c95e10": "isPlayer(address)", "09c975df": "getCallContractAddress(bytes32)", "09c99d10": "_stalemateTransfer()", +"09ca4866": "isCompleteExits(uint32,uint16)", "09ca4b76": "getCurrentPriceAuction(uint32)", "09ca60c1": "createLambo(uint256,address,uint64)", +"09cae2c8": "withdrawAll(address,address)", +"09cb1f2c": "transferRewards(uint256[])", "09cb22d5": "betFeePerMil()", +"09cb3a4e": "getPrices(uint256[])", +"09cba0f7": "unlockLPTokens()", "09cc4f95": "increaseTS(uint256)", "09cc5551": "topUp(string)", +"09cce06f": "setEthToUsdPriceOracle(address)", +"09ccf433": "_swapTokenForETH(address,uint256,address)", +"09cd5d57": "OMGItIsJackPot(address)", +"09cdcf9b": "setB(uint256)", +"09ce07c1": "setMinExpirationOnAcoPool(uint256[],address[])", "09ce4a91": "RLCPerSATOSHI()", +"09ce4c39": "wordvalue()", +"09ce6547": "allowCommissions()", +"09ce91ad": "setERC(address)", "09ceb7be": "icoAmountBonus2()", +"09cf00f2": "investActivated()", "09cf0329": "StarterKit(address,address,address,address,address)", +"09cf6091": "TOTAL_REWARDS()", +"09cf7fa2": "submitProposal(address,uint256,bytes,uint8[2])", +"09cf81c7": "firstMinter()", "09cf8766": "grantPrivatePurchaserToken()", +"09cfc447": "setMintFeePercentage(uint256,uint256)", "09d02b74": "getRamdomness()", "09d03d90": "FounderUnlock(address,uint256)", +"09d08a0c": "secondHouseClose(bytes32,uint256)", +"09d09885": "stakeForDynamic(address)", "09d0b12e": "ViewMyTokens(address)", "09d0bb66": "NeodiumNetwork()", "09d11c1d": "ZhangToken()", +"09d1d0b6": "setLpFactor(uint256,address,uint256,bool)", "09d2100d": "ADEToken(uint256,uint256)", +"09d22c8e": "approveTokenAndCallContract(address,address,address,uint256,bytes)", "09d256fe": "getPresaleRate()", "09d2d0b9": "setServiceAccount(address,bool)", "09d31d8d": "addPerson(bytes32,address)", "09d33f1d": "addRequest(address,uint256)", +"09d367f1": "getBarItem(uint256,uint256)", "09d37704": "pushIssuer(address)", +"09d38033": "mediaAddress()", "09d3cbda": "setUpdateDelay(uint256)", +"09d3ef31": "twice(uint256,uint256)", "09d451ab": "calculateEthersAmount(uint256)", "09d45f1d": "_deleteString(bytes32)", "09d46057": "IcoStageStarted(uint256)", +"09d495fd": "employee(address)", "09d54b21": "checkAddressTransfer(address,uint256,address)", "09d60069": "trade(int256,int256)", "09d60db1": "claimedTokensWallet()", @@ -5628,6 +10234,8 @@ "09d6796f": "our_transferFrom(address,address,uint256)", "09d6b0a3": "transfer(address,uint256[],uint256[])", "09d6d33a": "NewCup(address,bytes32)", +"09d73442": "getENSReverseRegistrar()", +"09d745af": "adjustForDecimalPrecision(uint160,uint8,uint8)", "09d74cc5": "createJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "09d77ad3": "Next(bool)", "09d78e32": "ETCLocking(address,address)", @@ -5635,37 +10243,69 @@ "09d7ab7a": "convertGene(uint8[7])", "09d7e9ca": "decodedAsset()", "09d84fc4": "bindingSmartIdentity(bytes32)", +"09d86893": "setReservePercent(uint256)", "09d87ab5": "isAddressAuthorized(address,address)", "09d89784": "TradeNetCoin()", "09d8da2e": "isLock()", +"09d8ef27": "updateSaleTimes(uint256,uint256)", "09d929d6": "releaseLockFounders1()", +"09d9e150": "getTokenErc20Txn(uint256)", "09d9f95e": "WinnerTakesAll()", "09da52a2": "greet(address,string)", "09da56c1": "getBoardBalance(uint256)", +"09dac390": "purchaseOrder_counter()", +"09daf0d5": "setNFT()", +"09db4b0c": "Contractt()", "09db5d29": "notUsedToken()", "09dba083": "GC()", +"09dba5ed": "downloaders(uint256)", +"09dc04eb": "topCommissionIndex()", "09dc66af": "GT(uint256,string,string)", +"09dc6fd9": "baseFunction(uint256)", +"09dce1a7": "getAmountOutByBalance(address,address)", "09dd0e81": "getBlockchainHead()", "09dd1761": "attachPreOrder(address)", +"09dd4eea": "holded(address)", "09dd7b3e": "paySize()", +"09ddaa97": "endTimeSale()", "09ddc583": "getPropertyData(uint16)", +"09ddd882": "startChange(address)", "09de4148": "getWinPercent()", +"09de68c5": "unstakeDailyProfits()", +"09de87d7": "onBoardUSDT()", "09de92d0": "RENEE()", "09df06b7": "TIE()", +"09df29f9": "claimRewardsFromVesting()", "09df3248": "publicGetParticipants(uint256)", "09df5060": "logoutUser(address)", "09dfdc71": "currentPyramidBalanceApproximately()", "09dfe330": "_checkItemId(uint256)", "09e0a77c": "totalIco()", "09e0a9eb": "batchBid(uint256[])", +"09e1340f": "consensusThresholdPercentage()", +"09e1474c": "AddAdvisor(address,uint256,uint256)", +"09e15c72": "setShouldNotRefund(bool)", "09e1a1f7": "PresalePurchase(address,address,uint256)", "09e1c751": "CDPer()", +"09e1d969": "mulCeil(uint256,uint256)", +"09e201cc": "lastPayoutWeekByGame(uint256)", "09e24516": "ZepCloud()", "09e25141": "bidInAuction()", +"09e25353": "startReward(uint256,uint256)", +"09e28f4d": "addressProof(address)", +"09e2d5e2": "uint_min()", "09e2f193": "addVerificatorAddress(address)", +"09e32741": "AllocateTokensForAdvisor(address,uint256,uint256)", +"09e3de41": "boostFees()", "09e419d1": "withdrawLongTermFoundationBudget()", +"09e48df7": "Deployed(address,address)", +"09e4e6a2": "blocksPerReveal()", +"09e5071b": "lockLiquidityContract()", "09e587a5": "homicide()", +"09e5f66c": "liquidationAllowed()", +"09e69ede": "participants(address)", "09e6a0ed": "EASTADScredits()", +"09e6fdd8": "mint_with_receipt(address,uint256,uint256,uint8,bytes32,bytes32)", "09e76161": "getVideoGameDetails(uint256)", "09e785e1": "payoutInterval()", "09e7d837": "reachGoal()", @@ -5673,59 +10313,90 @@ "09e8046a": "fullfillAdvisors()", "09e91cfb": "tokenUnits()", "09e979e6": "getSquarePriceAuction()", +"09e98b30": "rxp_received()", "09e9976d": "MetadataUpdated(address,uint256,string)", "09e9c325": "createBooking(uint128,uint128,uint32,uint32,uint256,address)", +"09e9d78f": "getRequestAccessData(string,string)", "09e9d7e2": "removeCandidate(uint256)", "09e9e85b": "readAllUsers()", +"09ea14aa": "proposeModule(bytes32,address)", +"09ea330a": "pool5users(address)", "09ea63e3": "recoverPreSigned(bytes,bytes4,address,uint256,bytes,uint256,uint256)", +"09eba1cf": "collectedBalances(address)", "09ebcd64": "getLockedUserInfo(address,address)", +"09ebea96": "NewWhiteLister(address)", +"09ec1d8c": "transferFromOut(address,address,uint256)", "09ec6b6b": "supplyInterestRate()", "09ec6cc7": "cancelTrade(uint256)", "09ece618": "initiatable(bytes32)", +"09ecf09f": "usersp7Matrix(address,uint8)", "09ecf413": "updateFoundAddress(address)", "09ed1782": "withdrawCredits(uint256)", +"09ed2a4b": "minVoteThreshold()", "09ed4607": "clone()", "09ed5022": "checkFileNamespace(string,bytes32)", "09ed5673": "getScouponTransferCost()", +"09ed8355": "setDelay(address,address,uint256)", "09edf3ca": "x_Header()", "09ee3e2a": "Global_Currency_Reserve()", "09ee75a2": "documentIt(uint128,uint64,bytes32[],string,string,string)", +"09eea4ef": "setParams(uint256,uint256,uint256,uint256,uint256,address,uint256,uint256)", +"09eeb152": "MergedMinerValidatorSet(address)", "09eecdd7": "isValidBet(uint8,uint256,uint256)", "09eef43e": "hasVoted(address)", "09ef7085": "is_name_used(bytes32)", +"09ef91d1": "Authorization(address,address)", +"09efb8ff": "integer()", "09efcb8d": "fiatDeposits()", "09f03da2": "getCurrentTimeRate()", "09f0fe0d": "lamdenTau()", "09f14a20": "addBuyerSig(string,string)", "09f14e7e": "ownerSetExchangeRateInWei(uint256)", +"09f21f6a": "withDrawAll(address)", "09f28927": "Crowdsale(address,address,address,address,uint256,uint256,uint256)", "09f29d1b": "retrieveTokens(uint256)", +"09f2a983": "removeBasset(address)", "09f2b6a9": "TokenBCC(uint256,string,string)", +"09f2c019": "getPoolInfo(bytes32)", +"09f2e13e": "claim6(uint8)", "09f30eac": "unitTestSetRewardLevels()", "09f32957": "lastCreditorPayedOut()", +"09f33a70": "destructJob()", "09f3ad26": "calcBonus(uint256)", "09f41822": "batchVoteByIndex(uint256,address[],uint256[])", "09f4614d": "product1()", +"09f49bf5": "unpauseRebase()", "09f4fc61": "addReferral(address,uint256)", "09f580b0": "Bolivar()", +"09f5b226": "setCurrencyToken(address)", "09f5ca99": "GLBToken()", +"09f6442c": "redeemFeeBps()", "09f64d2e": "isIcoPaused()", "09f68e96": "setPrivateSale(address)", "09f6c607": "currentEthBlock()", +"09f6d5b4": "destroyBot(uint256)", "09f70d2e": "getRequestHash(bytes,address[],uint256)", "09f767e0": "deathFactor_iv()", +"09f77e77": "pendingCoreFinanceBit(uint256,address)", +"09f7ca32": "useDefaultRebaseLag()", "09f80dd9": "feerate()", "09f8477a": "getRandom(uint128,uint256)", +"09f8ab44": "inputAddresses(uint256)", "09f8cc58": "upgradeAgentLocked()", "09f90127": "fallback(address,bytes)", "09f92a6a": "wordSize(string)", "09f9630f": "BETHToken(address)", "09f9b3c5": "getGrantBalance()", +"09f9c87c": "setNewPauser(address)", +"09fa31bf": "zapDepositToken(uint256,uint256)", "09fa6f96": "wpTokensBaskets()", "09fa90b3": "globalLocked()", +"09fb0cb9": "airdopped(address)", "09fb1668": "changeMaxBetCoinDice(uint256)", +"09fb61f5": "transactionHashes(bytes32)", "09fba360": "alreadyHarvestedTokens()", "09fbb22c": "decreaseGlobalInterestAmount(uint256)", +"09fc0215": "NewBuy(address,uint256,uint256,uint256,uint256)", "09fc1ae0": "getCallTable(uint256)", "09fc3c53": "burnWarrior(uint256)", "09fc7046": "bytesToBytes2(bytes)", @@ -5734,69 +10405,127 @@ "09fca951": "accumulated_from()", "09fcda87": "PayPerView()", "09fd018e": "setClaimer(uint256,address,uint256)", +"09fd01ba": "pool3userList(uint256)", +"09fd3f6e": "jury()", "09fd8212": "isInWhitelist(address)", "09fe5fbd": "CoinPaws()", "09fe89c8": "privateBuyer()", +"09fe9d39": "getOracleAtIndex(uint256)", +"09ff18f0": "nextImplementation()", "09ff453a": "PFS()", +"09ff48b3": "TWAP1Day(address)", "09ff4b75": "Redenom()", +"09ffa630": "calculateEthereumToToken(uint256)", "09fffec0": "transferToAdmin(uint256)", +"0a006151": "tracksCount()", +"0a006de3": "choice2WARPot()", "0a0078bc": "unSet(address,address)", "0a00840c": "challenge_period()", +"0a009097": "coordinator()", "0a0092bf": "LakersvsRockets()", "0a00ee41": "INNOToken()", +"0a014fbc": "presaleGeneratorAtIndex(uint256)", "0a0155e5": "passed(uint256)", "0a01ad4d": "processWinner()", "0a01ae41": "Supernova()", "0a01bc2f": "WhitelistAddressisListed(address)", "0a02037b": "girlOps()", "0a0209d0": "soldTokensOnPreIco()", +"0a02728b": "current_staked()", "0a027825": "currentUnit()", "0a0279f8": "determineDiscountTranche()", +"0a02a1c5": "SendTokensAfterBuy(address,uint256)", +"0a02c5e8": "setTotalBonusUSDT(uint256)", "0a0313a9": "iterateValid(uint256)", +"0a031eb1": "buyAssetIntroducerSlotViaStaking(uint256,uint256)", "0a0352d5": "_getOwnerNFTCount(address)", +"0a038eb7": "dnaPizzaExists(uint256)", "0a04dde8": "ThanosXToken(uint256,string,uint8,string)", "0a0513da": "IEOEnded()", +"0a05c1d4": "updateStreak(uint256)", +"0a065f6f": "startAirdropSHD(uint256,uint256,uint256,uint256)", "0a06f35e": "setBonusesForAmounts(uint128[],uint32[])", +"0a06feb1": "ST1OPAGAS(address,uint256,address,uint256)", +"0a074d3e": "_doBurn(address,uint256,uint256)", "0a075a32": "spawnNewZeroCard()", "0a07eadd": "systemWalletsMint(uint256)", "0a07f3d8": "contains(uint8,uint8)", "0a084473": "tokenPerEth()", +"0a087903": "sushi()", "0a08de75": "isContruibuteOpen()", "0a0900a1": "buyXname(bytes32,uint256,bytes32)", "0a09284a": "endsAt()", +"0a0932da": "newVote(bytes,bytes)", +"0a0976b1": "mds()", "0a09815c": "presaleTokens()", +"0a099606": "constant_getLength()", +"0a0a05e6": "setDestination(address)", +"0a0a268d": "setLockPrice(uint256)", "0a0a2876": "killVesting()", +"0a0a6c47": "addFreeCurrency(string,address,bytes32)", "0a0a876f": "stopSetPrice()", +"0a0a96e1": "validmember(address)", "0a0b3139": "testFailOnFailedTransfer()", "0a0c5e0d": "addSignature(string,string)", "0a0c75aa": "setEmployeeSalary(uint256,uint256)", +"0a0c7753": "getEventId(bytes32)", "0a0cd8c8": "setupDone()", "0a0d5509": "computeTimeBonus(uint256)", +"0a0d6db2": "votePropogationBlocks()", "0a0e3c76": "nextMintFeeProp(uint256)", +"0a0e5c9d": "open(address,uint256)", "0a0e7883": "nDelegations(bytes32)", "0a0e78e3": "addNOSPackage(uint256,uint256)", +"0a0ee036": "addPool(uint256,address,bool,bool)", +"0a0f5dbb": "getGrantStartTime(address)", "0a0f8168": "ceoAddress()", "0a0fac2b": "isProxyOrSender(address)", "0a0fb66b": "transferPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", +"0a0fd24f": "setDaysToSettlement(uint256)", +"0a0fd6ac": "requiredReserve(uint256)", +"0a100fb0": "creditsToTokens(uint256)", +"0a1028c4": "getMessageHash(bytes)", "0a10376f": "newReplyEvent(uint256,uint256,string,string,uint256)", "0a107ac3": "setPI_edit_19(string)", +"0a1086ec": "safeaccumulatednegetivereabase()", "0a10df7c": "bookingId()", +"0a10ec49": "setDepositableExt(bool)", "0a114a70": "extendExpiration(uint256)", +"0a11da1e": "addLoss(uint256)", +"0a11e945": "balance_at_allowance_time(address,address)", +"0a11fd07": "findTokenIndex(address)", +"0a1289ad": "pauser(address)", +"0a12a6ac": "OrderFill(address,address,uint64,uint64,uint256,uint32,uint256,uint256,uint256)", "0a12a7a0": "LogContribute(address,uint256)", "0a12c89e": "BTImint(address,uint256)", "0a12c90f": "AddNewChallenge(uint256,uint256,uint256,uint256,bool,string)", +"0a13351d": "openCSP(address,address,uint32,uint32,uint256)", +"0a137a4c": "investWithCustomerId(address,uint256)", +"0a139a72": "forwardCall(address,address,address,uint256,uint256,uint8,bytes32,bytes32,address)", +"0a13e460": "opP(uint256,uint256)", +"0a140e9d": "finalizePresale(uint256)", "0a1432f7": "openResult(uint256,uint8[])", +"0a144391": "approvers(address)", "0a14504c": "participate(bytes32)", "0a14849e": "setOpenBetIndex(uint256)", +"0a14978d": "PoolLocked(string,uint256)", +"0a14e2e0": "stakedAssets(address)", "0a15299b": "TourCash(uint256,string,string)", +"0a153c97": "collateralRedeemed(bytes32,uint256)", "0a15a07f": "removeUnicorn(address,uint256)", +"0a15d12c": "numberEnvelopes()", "0a15d3a8": "ETFT(uint256,string,string)", +"0a165869": "collectCTokens(address)", +"0a165940": "bFactory()", "0a16605e": "receiveSpendingDeposit(address,uint256)", "0a16697a": "targetBlock()", "0a16916a": "RESERVE_POOL_TOKENS()", "0a16a53f": "setCitizen(address)", "0a16e225": "getrestrict(address)", "0a16efc0": "_addCommittedValidator(uint256,address)", +"0a177cc6": "publicsalewhitelist(address)", +"0a1792cc": "buyerApproval()", +"0a17befa": "kbrfToken()", "0a17d422": "isZero(uint256,string)", "0a1856db": "Billing(address,address)", "0a18c334": "Denar()", @@ -5805,13 +10534,24 @@ "0a19283c": "_createCryptsy(uint32,uint32,uint32,address)", "0a1930b7": "LogDonation(address,uint256,uint256)", "0a193612": "setCountry(address)", +"0a19a0cd": "harvestContractEth()", "0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"0a19df8b": "createArticolo(bytes,bytes,bytes10,bytes10,bytes)", "0a1a677e": "searchtickets()", "0a1a802e": "MatchPay()", +"0a1ab6f0": "verifyNextPrice(uint256,bytes32)", "0a1ab7fc": "arrayOfAccountsThatHaveClaimed(uint256)", +"0a1b10e1": "addNewAdmin(address)", +"0a1b9e9f": "enlarge(uint256)", +"0a1bbc72": "Registered_Devices()", +"0a1bd996": "ethFutureProfit()", +"0a1c1f4b": "mintToMultipleAddresses(address[],uint256)", "0a1ceb0e": "usableBalances(address)", +"0a1d7c5f": "retrieveNFT(uint256)", "0a1dfb5a": "nextNextBid()", +"0a1e187d": "exchange(address,bytes32,uint256,bytes32,address)", "0a1e3a2c": "publishExecution(string,string,string,string,string,string)", +"0a1e6a9f": "transferProxyOwner(address)", "0a1e71de": "isIco(uint256)", "0a1e7701": "AtraOwner()", "0a1e7a89": "getStudentRequest()", @@ -5820,19 +10560,31 @@ "0a1f194f": "removeTrader(address)", "0a1f5862": "minedTokenCap()", "0a1f868c": "fuint256a(uint256[])", +"0a201bec": "dusd_step()", +"0a2039e5": "stakingPoolV1()", "0a20aba4": "investOtherCrypto(address,uint256)", "0a213e5b": "TWIMToken()", +"0a21f56f": "changePowerLuckPrice(uint256,uint256)", "0a2282ae": "JackPot()", "0a22ee73": "accountExists(address,uint8)", +"0a23b33b": "IS_TOKEN_SUPPORTED(address)", "0a24c5bb": "yearlyMintCap()", +"0a2535d3": "refFeeRatio()", "0a2557d5": "wasInvestorWithdrawn(bytes32,address)", "0a262f48": "setPreActiveTime(uint256)", +"0a2642bf": "allocations(uint256)", +"0a264c6a": "_totalMiners()", "0a26ccb1": "putBool(bytes32,bool)", +"0a26e4e4": "accountToSummonNum(address)", "0a276680": "transferOwnership(address,uint256)", "0a27813d": "finalizedHoldingsAndTeamTokens()", +"0a286520": "myNumbers(address)", +"0a288223": "burnSpecial(address,uint256)", "0a28c664": "tokensOfWithData(address,uint256)", "0a298034": "getFreeBulls()", +"0a29bb37": "grantControlPermission(uint256,address)", "0a29f508": "uploadSignedString(string)", +"0a29f8de": "superInvestor(address)", "0a2a9a01": "addWallet(address,uint256)", "0a2ad0f3": "resetState(address)", "0a2c0c65": "getAvailableVolume(bytes)", @@ -5841,82 +10593,164 @@ "0a2d7629": "month12Unlock()", "0a2d967b": "stopThisIco(bool)", "0a2df1ed": "callSender(bytes4)", +"0a2e5c75": "unstakeBurnFeePercent()", "0a2eb301": "isAdministrator(address)", "0a2ebc39": "NVISIONCASH()", +"0a2ee1f9": "transferEthInPool(address,address,address,uint256)", +"0a2eeb17": "_tokenprice_in_cents()", +"0a2f09e6": "updatePatient(uint256,string)", +"0a2f5ef9": "createAnswer(string,string)", "0a2fd551": "ValidateKey(address,bytes32)", +"0a301d29": "REIGAI20()", +"0a30c217": "setAlpacaFarmContract(address)", +"0a3142d1": "pl1AvailAmount()", "0a323fd0": "Boardcoin()", +"0a3254b7": "incrAIStats(address,uint256)", +"0a32e91e": "devCommission()", +"0a336521": "_validateRecoverAddress(address)", "0a33cd41": "seIcoAddress(address)", +"0a345805": "set_commission_fee(uint256)", +"0a347f1a": "marketsForAssets(bytes32[])", +"0a34e3d4": "EtherReceived(uint256)", +"0a354537": "arShieldCover(address)", +"0a354fce": "landIdEstate(uint256)", +"0a355d7d": "vaultDebtVal()", "0a35a7b1": "saleTierList()", +"0a36530f": "halvingCounter()", "0a36645f": "getShopOwnerProductList(string)", +"0a36dc4c": "ISSUE_ASSET_ROLE()", +"0a370cab": "uniPools(uint256)", +"0a375b58": "SetMinETHInvest(uint256)", "0a377f3a": "reserveKNCWallet(address)", +"0a37a357": "GS_commissionType()", +"0a37b72b": "BuyTokens(address,uint256,uint256)", +"0a3822e6": "fEMA()", +"0a382906": "hasConfirmedPurchase(address)", "0a384665": "maxTokensAmount()", "0a38b400": "intermediadorAprovaDevolucao(bool)", +"0a38b8b1": "balanceOfp3crv()", "0a394245": "doesReferralCodeValid(string)", "0a39e222": "transferFromReserve(uint256,address)", "0a3a0531": "manualContribution(address,uint256)", +"0a3a4b75": "OriginalAddress(address)", "0a3b0a4f": "add(address)", "0a3b1cd2": "setHotwallet(address)", +"0a3b4cca": "challengeLiquidation(uint256)", "0a3b7d9b": "TokenMacroansy()", +"0a3ba026": "totalWhiteListAirdrop()", "0a3c000d": "buyerSymbol()", "0a3c3088": "ARIZONE()", +"0a3c3295": "startSales()", "0a3c34fb": "successfulTransactions_()", "0a3c4dbe": "merculetPrice()", +"0a3c5299": "OnInitialize(address,address)", +"0a3c7512": "returnFromPush()", +"0a3c8a78": "getAllAllowlistedInvestors()", "0a3cb663": "freezePeriod()", +"0a3cb80f": "approve_496(address,uint256)", +"0a3d1af6": "changeVoting(address)", +"0a3d1ca4": "emitWorkAccepted(uint256,uint256)", "0a3d7cce": "assertEq27(bytes27,bytes27,bytes32)", +"0a3d9987": "upgradeProtocol(uint256,address,uint256,uint256,uint256)", "0a3dfba7": "giftCharacter(address,uint8)", "0a3dfd10": "KittenTalked(string)", +"0a3e533c": "pendingBM(uint256,address)", "0a3e5712": "revokeWithdrawConfirmation(uint256)", "0a3ecdfe": "drawNumbers(uint32)", "0a3f013f": "releaseTimestamp()", +"0a3f162a": "trade(address,uint256,address,uint256,address)", +"0a3f3fa6": "reconciliationAccount()", "0a3f5897": "placeBetEth()", +"0a3f7338": "_beta()", +"0a3fa24a": "resourceCount()", "0a401086": "operational()", "0a402742": "allocateNormalTimeMints(address,uint256,uint256,uint256,uint256)", "0a402a32": "LadaToken(uint256,string,string,uint8,address)", +"0a4050a5": "registerPolicy(address)", +"0a406ada": "set_Invest2_sETHContract(address)", "0a40878a": "EXSCoinSeller()", "0a40f15f": "fundDeal(string,address)", +"0a40f3ef": "daiDebt(bytes32,address)", "0a40fb8c": "permissionMarker(address,bool)", "0a412ae4": "aboveMinimumPurchase()", "0a41442f": "setNewWallet1(address)", "0a41dfee": "cancel_face_proof_request()", +"0a41fce1": "migrateFund(address,address[])", "0a425a33": "getTreeIds(address)", +"0a42727f": "heroTracker(uint256)", +"0a429aba": "Transfer(uint256,address,address)", "0a42f86f": "getFrequency()", +"0a4449e3": "setAllowClaimUser(address)", +"0a44ab82": "setTokenBunny(uint32,uint32,uint256,uint256,uint256,uint256,address,uint256)", "0a44b9cf": "amountIAmOwed()", +"0a450b09": "userExchangeRecord(address)", "0a4543ec": "MonoretoToken(uint256)", +"0a457520": "Contadmin()", +"0a45f666": "releaseEdf()", "0a4625af": "totalEthers()", "0a4655dd": "insert(bytes32,address)", "0a46706b": "toCom(uint256)", +"0a46e3e9": "puppets(uint256)", "0a47185d": "calcNav(uint256,uint256)", "0a4740ff": "disableSale()", +"0a47469d": "containsPlayer_SideA(address)", "0a47a7a6": "mutiTransfer(address,address[],uint256[])", +"0a486f30": "externalSafeSub(uint256,uint256)", +"0a48bdbb": "getPastRoundStats(uint256)", "0a48dcb3": "appendUint8ToString(string,uint8)", +"0a48eb8c": "startChangeTaxRate(uint256)", +"0a495360": "jgn()", +"0a49569f": "_unlock(address,uint256)", "0a49646b": "CreationRate()", +"0a499ad3": "isWithoutFee(address)", "0a49dece": "getDevelopmentFundBalance()", "0a49e536": "getPoolAmounts(uint256)", "0a4a3f0a": "GetConfirmRound(uint32,uint8)", "0a4a57bc": "contain(uint256[],uint256)", +"0a4b323e": "setinterestrate(uint256)", "0a4bb260": "buyItemAndApply(string,uint256)", "0a4bfa6d": "IMDEXwithdrawToken(address,uint256)", +"0a4c1072": "setStakingAddress(address,address)", "0a4c374a": "birthPerTen()", "0a4c6a45": "TEAM_UNFREEZE()", "0a4caed0": "getChannelByRank(address,uint256)", +"0a4cb939": "setMiningDifficulty(uint256)", +"0a4cbdbb": "purchase_token()", +"0a4cd6c9": "initiateAuction(address,address,uint256,uint256,uint96,uint96,uint256,uint256,bool,address,bytes)", "0a4d564c": "TieUpLooseEnds()", "0a4d7cd7": "setUserIdentityDocs(string)", "0a4da2d4": "MyAdvancedTokenV2(uint256,string,string)", "0a4dea01": "VETRI(uint256,string,string)", +"0a4f6de2": "EventMove(address,uint256,uint256,uint256,uint256)", "0a4fa201": "View_TrustlessTransaction_Status(uint256)", "0a50e361": "generateNumberWinner()", +"0a50f398": "multisendErcPUMPS(address[])", "0a513bc7": "CMBUpgradeableToken(address)", "0a516805": "takerArguments(address)", "0a518754": "periodICOStage4()", +"0a51e104": "addressSeek(address[],int256[])", "0a52d194": "payCommission(address,uint256,uint256)", +"0a5311bd": "Birth(address,uint256,uint256,uint256,uint256)", +"0a558681": "setDestruction(address)", +"0a5590ff": "canSubmitEvidence(uint256)", "0a55fbfe": "getMember(address,address)", "0a56094d": "AriesToken()", +"0a560b3e": "announcesSessionResultAndPay()", "0a56293d": "lockTokens()", "0a564a03": "rateRound2()", "0a569e8a": "currShares(address)", "0a56a5f3": "nfsPoolLeft()", +"0a56b8c2": "Hype_Bet()", +"0a57336a": "withdrawStakedTokens(uint256)", +"0a57a1b3": "errorMessage(string)", +"0a58590d": "setAccounts(address[],uint72[],uint72[],uint72[],uint16[],uint16[])", +"0a5894a3": "validateOffer(uint256)", +"0a58f47a": "setStopper(address)", +"0a594332": "WonEvent(address)", +"0a596822": "ReleaseToken(address,bool)", "0a597da7": "impl_additionalRewards()", "0a5988a8": "Term()", +"0a59a98c": "subject()", "0a59b81b": "mesasCreated()", "0a59bf2d": "setPersonalisationCost(uint256)", "0a59c66e": "AuctusTokenVesting(address,uint256,uint256,uint256)", @@ -5924,52 +10758,102 @@ "0a5a1e9a": "withDrawTips()", "0a5a4e17": "AMBASSADOR_STAKE()", "0a5a5b11": "releaseSecond()", +"0a5a96f9": "updateProviderLastClaimTime(address)", "0a5ab11d": "vestingWallet()", +"0a5ade45": "MetaTransactionInsufficientEthError(bytes32,uint256,uint256)", +"0a5b0c7d": "transFer(address,uint256)", +"0a5cb529": "trade(address,string,address,uint256,address,uint256,bytes)", "0a5ccb2a": "reclear(address,uint256,uint256,uint256,uint256,bool)", "0a5cced2": "bookRoom(string,uint256[],uint256,address,bytes32,uint256,bool)", "0a5cf9bb": "NeuralControl()", +"0a5cfb15": "getBuyPrices(uint256,uint256[])", +"0a5d24d8": "approve_228(address,uint256)", +"0a5dbab1": "lendWeiCounterVault(uint256)", "0a5dc24d": "getAuthorisationStatus(address)", "0a5dc5a9": "blockMessagesFrom(address)", "0a5de7bb": "midOf(uint256)", +"0a5e692b": "birdToken()", +"0a5ea466": "claimTokens(address,address,address,uint256)", "0a5ee9b0": "StakeReleased(uint256,uint256,address,bytes32,uint256)", +"0a5f54d2": "uint256_uint256_to_string(uint256,uint256)", "0a5f558e": "mintInitialSupply(uint256[],address,address,address)", "0a5f80f4": "publicAddDeposit(address,uint256)", +"0a6005da": "monthlyLimit()", +"0a606163": "setBuyHoldersFee(uint256)", "0a6076b3": "SellableFund(uint256)", +"0a608b84": "setAcoPoolStrategyPermission(address,bool)", "0a612095": "replaceToken(address[])", +"0a613890": "directPayoutDist(uint256)", "0a6184ce": "oneHundred()", +"0a61c59f": "setSunTokenAddress(address)", "0a623a11": "determineOutcome(uint8[],uint8[],uint8[],bool[],uint256)", "0a62db33": "YToken(uint256,string,string)", +"0a62e58a": "setPowerPrice(uint256)", +"0a632b05": "withdrawAllTokenByOwner(string)", +"0a63361c": "pa()", "0a639726": "oldPriceChangeBlock()", "0a639ed1": "safeDiv_dec(uint256,uint256)", "0a63ae38": "NukeContract(address)", "0a64143a": "totalWithdrawn(address)", "0a642d00": "retrait_3()", +"0a643cf1": "getPlanById(uint256)", "0a64bdb1": "_verifyOptionPoolDefray(address)", +"0a64c5df": "burnFromUniV2Pool(uint256)", +"0a64f94d": "VOTE_MAG()", +"0a65ed19": "secondWith()", +"0a6687fd": "setParameters(bytes32,bytes32,address)", +"0a669bf4": "getIssuedInvoices()", "0a66d698": "isSealed(address)", +"0a678893": "startStaking(address,uint256,address[],uint256[])", "0a67d2c7": "withDraw(address)", +"0a67d518": "PERCENT_FOR_LP()", "0a67dfbb": "setTeamTokenHolder(address)", +"0a681c59": "getCapital(address,uint256)", "0a681f7f": "NEXT_POT_FRAC_BOT()", "0a68f374": "getATitty(uint256)", +"0a68f631": "arguments(uint256)", +"0a692290": "decimalWrappedTokens(address)", "0a692347": "withdrawBack()", "0a6a3f00": "B3nsToken()", "0a6aec63": "cloneActiveToPlayed()", +"0a6b11b7": "deboardBlocker(address,address)", "0a6b378c": "pushTokenId(uint256)", +"0a6b433f": "userClaim(address)", +"0a6bbeb3": "announceStrategyUpdate(address)", "0a6be0e7": "BalancedPonzi()", "0a6bea46": "principle(string)", "0a6c0642": "frozenPortions(uint256)", +"0a6c52cf": "Cheez()", +"0a6d41b0": "getexpirationTimestampsAndName(address)", +"0a6d55d8": "_resourceIDToTokenContractAddress(bytes32)", +"0a6d6ef2": "FreezeTokens(address,uint256)", +"0a6d96a5": "totalTaskEscrow()", +"0a6e04cb": "getOrderbook(address,address)", +"0a6e1282": "owner_killswitch()", +"0a6e1323": "_addCompMarketInternal(address)", +"0a6e59e6": "switchAutoDistribution()", +"0a6eccd0": "subOwners(address)", "0a6ee71a": "VISTACrowdSaleP1(address,address)", "0a6ee947": "lockupContract()", "0a6f2fbb": "setAllowDrawETH(bool)", "0a6f5d8e": "_jackpotTax(uint256)", +"0a6f93e6": "lastUpdated(address)", "0a6fbb05": "SetPass(bytes32)", +"0a6fd2f1": "totalSupplyYieldToken()", +"0a6fe278": "daiposit(address)", +"0a7000f0": "saveIADetailsOracalise(uint256)", "0a703549": "__forward(uint256)", +"0a709a0f": "getGemOverview(uint256)", "0a70c0fd": "getTogglePrice(uint256)", "0a70cae0": "getBalance2()", +"0a7107d1": "addPlayer1(address)", "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)", +"0a72b1ab": "setPartners(address,address,address,address,address)", +"0a7314b5": "pendingASTR(uint256,address)", "0a732dac": "getCrowdsaleAddress()", "0a7354d9": "getOwnedShipsByAddress(address)", "0a738326": "Whitelist(uint256,address,bool)", @@ -5978,30 +10862,56 @@ "0a740f74": "checkDatesPayment(address,uint256)", "0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", "0a74a181": "updatefundendtime(uint256)", +"0a750573": "select(bool,uint256)", "0a751225": "shutDownDAO()", +"0a7529d8": "BNY_AssetDesolidification(address,uint256)", +"0a7545e9": "seeAmountIn(uint256,uint256,uint256)", +"0a756983": "disableAccessCheck()", "0a756f09": "StorageFund()", "0a762b42": "PROMETHEUS_VOUCHER_PRICE()", "0a766cfa": "sellCommission()", +"0a76aec9": "LP_TOKEN_ADDRESS()", +"0a76cff5": "myswapTokensForExactETH(address,address,uint256)", +"0a771c25": "getOwedFeesDetails(address)", "0a77b078": "Exchange()", "0a77c3ed": "saleDuringRefundPeriod()", +"0a77c581": "deactivateJob(uint64)", "0a781bf4": "iCASH()", +"0a787f31": "userlastWithdrawTime(address)", +"0a789602": "coins(string)", +"0a78a91a": "TransactionAborted(uint256,string)", "0a78e560": "PlayerNeedRefresh(address,uint256)", "0a790e19": "MAX_ATHENIANS()", "0a790eb7": "services(bytes32)", +"0a792802": "ggePoolAddr()", +"0a79309b": "retrieve(address)", +"0a793398": "sample(address,uint256,address,uint256,uint256)", "0a798f24": "openChannel(address,address,uint256)", "0a799557": "setStartRefund(bool)", +"0a79a978": "_getAppFee(bytes32)", +"0a79c399": "swapFeeForDex()", "0a7a0807": "evaluateBet()", "0a7a1c4d": "action()", "0a7a2fef": "emitCapabilityRemoved(address,bytes4,uint8)", +"0a7a3346": "configure(address,address,uint256,uint256,uint256,uint256)", "0a7a37bc": "setMonkey(string)", "0a7a783a": "addOrg(address,address,string,string,string,string,uint8)", "0a7a8c0a": "ItemMarket()", +"0a7ab0fa": "transferSushiOwnership(address)", +"0a7af3a1": "nextUpdateAt(address)", "0a7c1922": "bitexlive()", "0a7c1c35": "mItems(uint256)", "0a7c1e9f": "NebeusToken()", +"0a7c3c69": "approve_525(address,uint256)", "0a7cf2aa": "weiHardCap()", "0a7d29aa": "checkFunding()", +"0a7d2e1d": "whitelistCToken(address)", +"0a7d36d1": "anyRateIsInvalid(bytes32[])", +"0a7d8486": "getMedianizerPrice()", +"0a7dd1de": "_maxClaimDestrata()", +"0a7e62da": "Dividends(uint256,uint256)", "0a7ead50": "_processPresalePurchase(address)", +"0a7ec644": "reservationfee()", "0a7f4239": "getAccountFundContract(address)", "0a7f565f": "Intermediary()", "0a7f734e": "_processTx(address,uint256)", @@ -6010,65 +10920,126 @@ "0a80e725": "isReserveSupplyAssigned()", "0a80ef45": "getIsClosed()", "0a811fcc": "DigitalPesoCoin()", +"0a8141ce": "collectPlatformFee(uint256)", +"0a81ac03": "noclaimCovTokenWeight()", +"0a81d3ae": "profitPercentBonus()", +"0a826219": "referEarned(address)", +"0a82697b": "updateProfile(address,uint256)", "0a82f06b": "deleteCoverImage(uint256)", "0a82fd1c": "deletePortfolio(uint256)", "0a834ac0": "START_TGE()", +"0a842433": "canUnlockAmount(address,uint256)", +"0a84cc75": "increaseCount(address[])", +"0a84dbe7": "tokenTypeIds(uint256)", +"0a84fbbb": "deploy(bytes32,address[8],uint256[5])", "0a85107a": "LogTransfer(address,address,uint256)", +"0a854b6d": "setVirginAddress(address)", "0a857040": "withdrawTrx(uint256)", "0a85bb25": "isAuthorized(address,address,bytes)", +"0a85e1c1": "nextRebalance()", +"0a85e945": "initialize(address[],uint8,uint8,address[],uint256[],uint256[],address,uint256[],uint256[],uint256[],uint256)", +"0a861b47": "TokenApproveMax(address,address)", +"0a861f2a": "withdrawLiquidity(uint256)", "0a864240": "TMBCStandardToken(uint256,string,uint8,string)", "0a866f3a": "addThing(string,bytes32,bytes32,string)", +"0a86b2ab": "supportChainIds(uint256)", "0a86f644": "test_0_testBasicTxExecution()", +"0a8724e9": "ntrump()", "0a87391c": "investorsAccounts()", "0a874df6": "lookup(uint256)", "0a875313": "createFunded(address,uint256,bytes32,bytes32,bytes1)", "0a87557c": "ICO_END_TIME()", +"0a87d621": "SetZoo(address)", +"0a87dcee": "moveToStake(address,uint64)", +"0a881082": "totalPendingDeposits()", "0a883790": "payrollCount()", "0a888a63": "operation_address(uint256)", +"0a891ac3": "openLockETHAndDraw(bytes32,uint256)", +"0a894ccf": "cryptonIndexToProtected(uint256)", "0a8972f9": "LoveAirCoffee(uint256)", "0a898428": "nodesVars()", +"0a89884f": "EventPlaceSellOrder(address,uint256,uint256)", "0a89e0aa": "switchModeSoOnlyEmergencyStopsAndEscapeHatchesCanBeUsed()", "0a8a2485": "invite(address,bytes)", +"0a8b5d08": "startPreSales(uint256)", +"0a8b670a": "SetFarming(address)", "0a8b88f6": "SECOND_VOLUME_BONUS()", +"0a8b8b6b": "theLastSamuraiEndTime()", "0a8bcdb9": "withdrawFromReserve(uint256)", +"0a8be35a": "LP_LASTLEVEL()", "0a8c138e": "NAABHAToken()", "0a8c1551": "EtherAsset()", "0a8d032d": "QuantumToken()", +"0a8d1be2": "updateRewardPerBlock(uint256,uint256)", +"0a8d416f": "voteV2(uint256,bool)", +"0a8d51c7": "getPassiveInvestmentTerm(uint256)", "0a8d5fb8": "techProvider()", +"0a8daacb": "middleBalanceBonus()", "0a8e891f": "Medcash()", "0a8e8e01": "test3()", +"0a8eafe2": "toEth(address,uint256,uint256)", "0a8ed3db": "grantPermission(address,address,bytes32)", "0a8f8fb9": "advisersReserve()", "0a8fed89": "setup(uint256,uint256)", "0a90011f": "setStatus(address,uint256,uint8)", +"0a902650": "freezeBalance(uint256,uint256)", +"0a90462e": "setPerms(address,string)", "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()", +"0a91b601": "assetProtectionRole()", "0a91cad0": "nextReleaseDate()", "0a91f2a5": "get_owner_of(address)", "0a9254e4": "setUp()", +"0a92802c": "load(address,uint256,uint256)", +"0a92af8b": "pendingRubin(uint256,address)", +"0a92afd2": "no(address,uint256)", "0a92b264": "getRandom(address,uint256,uint256,uint256)", +"0a92f495": "test_uint256()", +"0a9306d7": "depositToken(uint256,address,uint256)", "0a934b9d": "mainSaleAllocations(address)", +"0a93f12f": "FIRST_PHASE_CAP()", "0a94031c": "GigaProfitIn(uint256,string,string)", +"0a940868": "withdrawMTFTokens(address)", +"0a94109b": "autoCompoundAddress(uint256)", +"0a946eb0": "totalWeeklyRewards()", "0a94ece7": "nextUpgradeAgent()", "0a95011e": "getCreateMarketNumTicksValue()", "0a95c49d": "closeOutSweeps()", "0a95dbfa": "approveUser(address,bytes32)", +"0a95eac7": "stakeWithETH(address)", "0a9626ba": "setLiqPrice(uint256)", +"0a964a37": "createMarket(string,string,address,address,uint256,uint256,uint256)", "0a968d5e": "issueFirstRoundToken()", +"0a96b2e3": "poolTokenReserves()", +"0a96fa20": "dbetTeam()", +"0a974c34": "Predemption()", "0a979511": "gcExchangeRate()", +"0a9847d5": "r(bytes4)", "0a9848ac": "setAdminlist(address,bool)", "0a986540": "chinainc()", "0a988892": "saveCurrentArbitrationFees(address,bytes32)", +"0a98bdb1": "getIssue(bytes32,uint256)", +"0a9a2963": "f(int8)", "0a9a70c0": "changeDevFeesAddr(address)", "0a9a7842": "logAllStop()", +"0a9a877b": "publicSellWithLimit(address,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint256)", "0a9aa521": "callAMethod1(uint256,uint256,uint256,uint256)", +"0a9ab063": "LOG_PolicyRevoked(uint256)", "0a9ac3d0": "getMarketerAddress(bytes32)", +"0a9adcc3": "placementBonusPercentageSlabs(uint256)", "0a9ae69d": "bb()", +"0a9af1c5": "setIndustry(string)", +"0a9b920a": "calcRedeem1t1FRAX(uint256,uint256,uint256)", +"0a9c29c5": "entityOfUser(address)", +"0a9c84e5": "testSetRiskParameters_Success()", "0a9d4e95": "_buy(uint8,bytes6,uint32,uint32)", +"0a9d822b": "Top3team()", +"0a9dbfd9": "depositToVswapPool(uint256,uint256)", "0a9de288": "distributeTokens(address,address,address,address,address,address)", "0a9e24c1": "addBurnWallet(address)", +"0a9ed626": "artemBorrowerIndex(address,address)", "0a9ef927": "newTimeLockedWallet(address,uint256)", "0a9fc06f": "verifyProposal(bytes32,address,address,uint256,bytes32,string)", "0a9fec36": "sPeriodSoldTokensLimit()", @@ -6081,85 +11052,152 @@ "0aa1ae29": "SMCT()", "0aa1ee4c": "membersWhiteList()", "0aa20e73": "multiTransfer(address,address[],uint256)", +"0aa225f6": "unimplmentedFn()", +"0aa237bb": "lowestSlotPrice()", "0aa24f50": "adjustInvestorCount(address,address,uint256)", +"0aa28714": "increaseLimit(uint256)", "0aa28f09": "splitInService()", "0aa2b673": "cumReqMarbles()", "0aa2bbaa": "lastWillAccount()", "0aa2bf7f": "test_26_assertGasUsage2000Boards()", +"0aa30e66": "unLock(bytes4)", "0aa34c7c": "updateJMAmount(uint256)", +"0aa39daa": "godSetBoardContract(address)", "0aa3ae7e": "refill(address,uint256)", +"0aa3eb15": "MintedToCUSD(address,uint256)", +"0aa43533": "setDailyReward(uint256)", +"0aa44a2b": "setWinningMarble(uint8,uint64,string)", "0aa46c12": "testClearBitFailIndexOOB()", +"0aa4b3be": "buyerBalance(address,address,address)", +"0aa4c889": "editConnection(address,address,bytes32,uint8,bool,bytes32,uint256)", +"0aa4f3e2": "raiseUserShares(uint256)", "0aa5418f": "IrfanFr()", "0aa56368": "claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", +"0aa57dfe": "_numTokensWrapped()", "0aa59fe3": "miningFivePlat()", "0aa5aa2d": "transferAndNotify(address,uint256,uint256)", +"0aa5ec5f": "WhitelistSet(address,bool)", +"0aa5f4e3": "updateServicePoolClaimingFee(address,uint256,uint256)", +"0aa68eab": "funcNotCalled2()", "0aa6d45d": "oraclize_randomDS_proofVerify__main(bytes,bytes32,bytes,string)", +"0aa729d2": "getReserveToTokenOutputPrice(address,uint256)", +"0aa75ef3": "AxieSpawned(uint256,address,uint256)", "0aa7881a": "MintableToken(int256,uint256)", "0aa79fc6": "refundParticipant(address)", +"0aa7faab": "_wbnb()", "0aa83f5a": "consume(uint32,uint32)", +"0aa844de": "REMOVE_ISSUES_ROLE()", "0aa86791": "NujaBattle()", +"0aa8bfe7": "total6EthDivPoints()", +"0aa9002a": "buyTx()", "0aa93fff": "updateBytes32s(bytes32[],bytes32[])", +"0aa96cf0": "setAirdroper(address)", +"0aa9a227": "set_UniSNXLiquidityContract(address)", "0aa9a4fb": "payPrize(address,uint256,uint8,uint256,uint256,uint256)", "0aa9c58b": "fillOrKillOrder(uint256,bytes)", +"0aaa570c": "newItem(string,string,string)", "0aaa9e46": "TNT()", +"0aaab1a5": "getForcedTradeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"0aab5ff5": "LGE3()", "0aaba432": "salesVolume()", "0aac1073": "getSwapOutgoing(uint256)", "0aac5dfd": "getAssetsCount()", "0aac8034": "prizeWinners()", "0aad1f3b": "fechSumNumForCandidateByStage(address,uint256)", +"0aad80cc": "registrationUser(uint256)", "0aad8ef9": "removeTypeAddressById(uint256,address,address,uint256)", +"0aadbd16": "BURN_PCT()", +"0aaddb50": "devaluationPeriod(address)", +"0aae105d": "boostLevelFourCost()", "0aae7a6b": "info(address)", +"0aaea7ac": "reserveSize()", "0aaef916": "addManyWhitelist(address[])", +"0aaf3832": "getLeftCollateral()", "0aafa40e": "IOVOToken()", +"0aafcd97": "startHouseSale(uint256,uint256,uint256)", +"0aafefa2": "rewardTask_arr(uint256)", "0aafefb8": "QPay()", +"0aaffd2a": "updateBeneficiary(address)", "0ab03e1b": "testControlRegisterContractAgain()", "0ab0c6c8": "getWinnablePot(uint256)", "0ab0df87": "timeStamp()", +"0ab114f9": "rebase(int256)", +"0ab14d8a": "randomId()", "0ab174a3": "untrack(uint256)", +"0ab19975": "getLastOpenLuckCodeList()", +"0ab1b3c1": "grantedLocks(address,uint256)", +"0ab1cbe2": "DirectMessage(uint8,uint8,string)", "0ab21db7": "sencEthRate()", "0ab2a9b8": "modifyJurySize(uint256)", +"0ab32624": "addProtocol(uint8,address)", +"0ab3861e": "PresaleStart(uint256)", "0ab3bb1b": "totalFundingGoalInIBC()", "0ab41690": "_forfeitShares(address,uint256)", "0ab44f74": "AllNewsCash()", "0ab4846c": "rewardLast7Draw(uint256)", +"0ab49e54": "alertTime2()", "0ab4c065": "subdomainOwner(string,string,string)", "0ab4ca55": "registerNameXaddr(string,address,bool,uint8)", "0ab4debd": "shortBuy()", +"0ab505b8": "changeClaimHandler(address)", "0ab51bac": "aum()", +"0ab5555d": "setAccountCreationFee(uint256)", "0ab58ead": "SingularDTVFund()", "0ab5bed4": "platformWithdrawAccount()", +"0ab5cb64": "totalBets(address)", "0ab66be3": "paySubscription(address)", +"0ab6839a": "emitReceivedTokensAsModerator(address,uint256)", "0ab68776": "addDiscount(uint256,uint256)", "0ab6ead5": "Ended(address,uint256)", "0ab6fb36": "capitalPoolOf(address)", "0ab6ff19": "addFullFundTX(uint256,uint256)", +"0ab7529e": "updateOrder(uint256,uint256,uint256,string,string,string,string,uint256,uint256)", "0ab757df": "withdrawEIP777(address,address,uint256)", "0ab763d0": "polyCustomersAddress()", "0ab77095": "assignUnitRafflePrize(address)", +"0ab7a7a5": "getRandomNumberStatus()", "0ab7ec3a": "rejectProject(address)", "0ab84ed9": "pivx()", "0ab85a10": "getTotalRewards(uint32)", "0ab880e5": "resumeBuy()", +"0ab88e5a": "getSwapData(address,uint256)", "0ab8afac": "auctionContract()", "0ab9059c": "OrphanToken(address)", "0ab93971": "GetCount()", "0ab9419d": "addint256(int256,int256)", "0ab9db5b": "banker()", "0aba73d7": "getDealById(uint256)", +"0aba89d1": "userbalanceOf(address)", "0aba8ec2": "brokerImp()", "0aba980f": "unblockFundsInEscrow(address,uint256,address)", +"0abaad7a": "newAuthorityAddress()", +"0abb3e0b": "priceCumulative()", +"0abb6035": "setPendingGovernance(address)", "0abb691b": "buynode(uint256)", "0abb8409": "getPoolETHBalance()", "0abbf2de": "TeamLocker(address,address[],uint256[],uint256)", +"0abc92cb": "pendingReward(uint256,uint256,address)", "0abcbbcd": "makeShitClone(address)", +"0abcdf86": "getBNBPriceForUSDP()", +"0abcdf94": "getGameStates()", "0abd171b": "setinfo(string,string,string,address)", "0abd2ba8": "tokenPause()", "0abe293d": "addRefiller(address)", +"0abe469a": "getFeeFor(uint256)", +"0abfd514": "setPrivateStatePayable(uint256)", +"0ac045d5": "calculateAmountToFixCollateral(uint256,uint256)", "0ac0b31f": "calculateMultiplierAndBonus(uint256)", "0ac10c0d": "createVesting(address,address,uint256,uint64,uint64,uint64)", "0ac153ac": "lockMax()", "0ac168a1": "blockReward()", +"0ac17053": "getTotalDODO()", +"0ac180fa": "lastUpdateByGeohash(string)", "0ac1a281": "CapRevealed(uint256,uint256,address)", +"0ac1c313": "transactionHash()", +"0ac1d64f": "uni_mis_usdt_lp()", +"0ac1ff80": "minReturn(address)", +"0ac239e5": "bidIncrease()", +"0ac255e8": "getReferralAmount()", "0ac25e1a": "createPromoClown(uint256,address,bool)", "0ac28725": "requestTradeDeal(uint256,uint256,string)", "0ac298dc": "get_owner()", @@ -6167,418 +11205,794 @@ "0ac2ae27": "MarketContractOraclize(string,address,address,uint256[5],string,string)", "0ac2ffc5": "getMiniByOwner(address)", "0ac313e0": "setPlatAuction(address)", +"0ac395bf": "hasPermissionToBreedAsSire(address,uint256)", "0ac3ccc4": "calcBUYoffer(uint256,uint256)", "0ac42534": "isCancellable(address)", +"0ac436a4": "isLockedAccount(address)", +"0ac44e02": "claimReferralCommission()", +"0ac4b4cb": "getInstantRewards(uint256)", +"0ac4c5c7": "thiss()", "0ac50a6e": "CPCToken(uint256,string,uint8,string)", "0ac51bd7": "getTimestampsFromPublishers(address[],string[],int256[],int256)", "0ac5a67f": "paymentGateways()", +"0ac5c36a": "updateAvailableQty(uint256,uint256)", +"0ac5d82e": "approve_826(address,uint256)", "0ac5f441": "paySellerForBuyer(uint256,address)", "0ac62e02": "emergencyStop(bool)", "0ac67e2f": "getLowPrice()", +"0ac6b5a1": "foam()", +"0ac6edec": "getChallengeFees(uint256)", "0ac7366b": "IRONtokenSale(uint256,uint256)", "0ac799ff": "_transferXToken(address,address,uint256)", "0ac7c7ba": "getBalanceMessage(address,uint32,uint192)", "0ac8dc61": "GetLandId(uint256,uint256)", +"0ac8e5df": "WhitelistedPrivateStatusChanged(address,bool)", +"0ac8fc1c": "imcToken()", +"0ac91638": "converterFeedObservations(uint256)", "0ac924a0": "Minter(uint256,address)", "0ac94000": "executeRequest(uint32)", "0ac96103": "getBaseUrl()", "0ac9bb29": "nextSeedHashed()", "0ac9d35f": "_getRandomNumber(uint256)", +"0ac9f6f2": "getTokenSaleEndTime(uint256)", "0aca08ca": "closeGiveAway()", +"0aca2e11": "stakingPoolDateAdd()", +"0aca339a": "MotherMoney(uint32,uint32,uint256)", +"0aca582e": "registrationTax()", "0aca7403": "process_swap(address,address,uint256)", +"0aca7f95": "adr()", "0aca9de0": "placeLong(address[2],uint256[7],uint8,bytes32[2])", "0acaad4c": "getWeiContributed(address)", +"0acac942": "tokenStatus(address)", +"0acac95e": "setMinimumRefreshTime(uint256)", "0acae9a7": "publicEnd()", "0acb4c28": "activateOracle()", +"0acbd5f6": "lockHashProxy(address,bytes32,uint8,bytes32,bytes32)", +"0acbda75": "setTrusteeFeeBps(uint256)", "0acc4382": "getMinDailyWithdrawLimit()", +"0acc8cd1": "setFunder(address)", +"0acd4ce5": "changeAvatarTransferState(bool)", "0acdc3ef": "_Doihave(uint8)", "0acdd69f": "TOTAL_SOLD_TOKEN_SUPPLY_LIMIT()", "0ace8c9a": "addPackage(string)", "0ace9469": "setmaxContribution(uint256)", +"0ace9ca0": "vaultName()", +"0aceff79": "getUserStageEndTime(address,uint256)", "0acf0b8e": "admin_add_modify(address,uint8)", "0acf473b": "AdminCloseContract()", "0acf4b0b": "createPromoToken(address,string,uint256)", +"0ad024e0": "LootClaimed(address,uint256)", +"0ad035cc": "setImageHash(uint256,bytes,string,uint256,string)", +"0ad08b86": "PENALTY_RATE()", "0ad0a0f3": "setPurchaseValues(uint256,uint256,address,bool)", +"0ad125de": "getCountryOwner(uint256)", "0ad137c4": "Provide(address,address,address,address)", "0ad182bc": "getTickets(address)", +"0ad19aeb": "withdrawMoney(address,uint64)", +"0ad1b016": "_randRange(uint256,uint256)", +"0ad1b72a": "evalRootHashFromSlice(bytes32[],bytes32)", "0ad1c2fa": "getContract(address)", +"0ad1cb64": "referralFeesLength()", "0ad2074c": "logFailedSweep(address,address,uint256)", "0ad20914": "getRequestByRequesterAddress(address)", +"0ad2239d": "strategyTimeLock()", +"0ad22679": "hasContractStorage(address,bytes32)", +"0ad23273": "approve_237(address,uint256)", "0ad23aad": "getNumberOfRatingForAddress(address)", "0ad24528": "end(uint256)", "0ad27798": "depositPresale(address,uint256)", +"0ad2ae9b": "cevaBurnRequestId(address,bytes32,uint256)", +"0ad2f2a6": "freeLock(address)", +"0ad39a1c": "pikaPerBlock()", +"0ad3c765": "totalCompounding()", "0ad40377": "KYCPresale(address,uint256,uint256,uint256)", "0ad40df1": "setConfiguration(uint256)", +"0ad42543": "nonEthPurchase(address,uint256)", "0ad43eaa": "enterMessage(string)", "0ad4b97b": "fibonacciIndex()", "0ad50c02": "buyPropertyInETH(uint16)", +"0ad54033": "proxyRegisty()", "0ad54c03": "playerRefundBet(bytes32)", +"0ad58d2f": "withdraw(uint256,uint256,address)", "0ad59fa2": "CocaCola()", +"0ad5a865": "fundBalance(address)", "0ad63730": "virtuePlayerPoints()", "0ad65128": "logPresaleResults(uint256,uint256)", "0ad6aa28": "currentstagedata()", "0ad6ac85": "pay(uint256,uint256,address)", +"0ad6e8f7": "ropeMaker()", +"0ad703ee": "test_add()", "0ad7cf3c": "BitCloud()", +"0ad7ef2e": "setLiftoffInsurance(address)", +"0ad7ef51": "isFullyCollateralized()", "0ad7f29f": "CampaignManagerContract(address,address)", "0ad80f41": "WorldTrade(uint256,string,string)", +"0ad8ad66": "isSubscriptionReady(address,address,address,uint256,uint256,uint256,bytes)", +"0ad8e54a": "RemoveUser(address)", "0ad95b44": "bribery()", "0ad98d71": "showTotal()", +"0ad9ad9f": "hasVerifiedMinterRole(address)", "0ad9cf6f": "_resetTransferredCoinFees(address,address,uint256)", "0ad9d052": "model()", +"0ad9e7bf": "frozenBalances(address)", +"0ada8904": "GetADRform(address)", "0adaa7bf": "expireAssociate(address)", "0adae972": "detailsOf(address)", "0adb1354": "RimuoviProfessore(address)", +"0adb3e88": "halfvalue(uint256)", +"0adb5129": "sushimine()", +"0adbf743": "initiateTrade(address,address,uint256,uint256,address)", "0adcaddc": "iterate_valid(uint256)", "0adcdbaa": "redeemRate()", "0add0baa": "maxInvestments()", +"0add6ef2": "b2()", "0add8140": "pendingProxyOwner()", +"0adda9c0": "twin0Address()", "0adde487": "getPurchaseLimit()", +"0addec08": "turnOut(uint256,address)", "0ade4942": "tokenPriceProvider()", "0ade7142": "terminateDirectDebit(address)", "0ade9429": "getNext(uint256,address,uint256,uint256,uint256)", +"0adeb312": "FrozenStatus(address,bool)", "0adeb700": "changeQuarterlyRate(bytes32,uint256)", +"0adef86c": "SetOracleAddress(address)", +"0adf03a7": "fetchItemDetails(uint256)", +"0adf1be8": "debaseBoolean()", "0adf331b": "stateSuccess(uint256)", "0adf7912": "TokenDestroyed(uint256,address)", "0adfb4e2": "Elemental()", "0adfba60": "callSelf()", "0adfdc4b": "setAwardedInitialWaitSeconds(uint256)", +"0ae08581": "setRouterAdd(address)", "0ae08793": "confirmAndCheck(bytes32)", +"0ae0c6e2": "transEth(uint256)", "0ae100d8": "addOrganFunction(address,string)", +"0ae11c93": "goldBoardsReserved()", "0ae1b13d": "post(string,string)", +"0ae1cc8e": "getFlashLoanParams(bytes)", "0ae1fac0": "startICOStage4()", "0ae25ca3": "withdrawToTeamStep4(uint256)", "0ae31fbd": "setDistrictAddress(address,address)", "0ae32e72": "ZhangHongBinToken()", +"0ae3de3a": "testDataTypeInt256()", "0ae41574": "logOrderCreated(uint8,uint256,uint256,address,uint256,uint256,bytes32,bytes32,address,address)", +"0ae417bc": "pay(address,address,address,uint256,uint256,address[],bytes,uint256[],uint256[],uint256)", +"0ae41c6d": "creditProfiles(uint256)", +"0ae46df5": "deleteParticipent()", +"0ae4b86d": "withdrawAllEthAsBase(address)", "0ae50a39": "GetOwner()", +"0ae553ef": "WithdrawDeklaSuccessful(uint256,address)", +"0ae56c73": "totalNinjaSold()", +"0ae58085": "changeSwapState(bool)", "0ae5e739": "grantAccess(address)", +"0ae5f3f7": "kID_()", +"0ae61a91": "sell(uint256,address,address,uint256,uint256,uint256,uint256,address)", +"0ae628c1": "getBebAmountzl()", +"0ae6425a": "checkoutWithETH(address,address,address,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes32,bytes)", "0ae66820": "getBuyCost(uint256)", +"0ae699ca": "_checkChallenge(uint256,uint256)", +"0ae6d02b": "addScore(uint256,address)", +"0ae6d46b": "guid()", +"0ae70adc": "FreezeDateChanged(string,uint256)", +"0ae72fce": "addGritz(string,string)", "0ae75eb8": "amountOfBRAsold()", "0ae7a310": "tokenMeta(uint256)", "0ae80c37": "kickStartMiniICO(address)", "0ae870bd": "Mjolnir()", +"0ae8816f": "SmartContractRewardToSolver(uint256,address,address)", +"0ae883a0": "AVAILABLE_DISTRIBUTION_SUPPLY()", +"0ae8c4dc": "cBTC()", "0ae8f28f": "getProposalTextArrayLength()", +"0ae909e7": "handleChildren(address,uint256[],uint256[],uint256)", +"0ae91c63": "startEvent(uint256,uint256,uint256,address[])", +"0ae941e1": "setCollateralReward(address,uint256)", "0aea47bc": "getTimer(uint256)", +"0aea8188": "getConversionRates(address,uint256,address)", "0aeacb5e": "getTotalRecords()", "0aeb0f79": "UserCategorySet(address,uint256)", "0aeb1552": "insertStrategy(bytes15,address,uint256,string)", "0aeb4b26": "WorldCupControl()", +"0aeb4ddf": "exploit(address)", "0aeb6b40": "register(address,bytes,uint256)", "0aebeb4e": "close(uint256)", "0aeccc9c": "setScribe(address,address,string,string)", "0aece23c": "getFeeAmount(int256)", +"0aed2942": "onEndTx(uint256,address,uint256,uint256,uint256,uint256,uint256)", "0aed3c36": "testIsCase()", "0aed3ca1": "getLoans(uint256)", +"0aed3f76": "maxBattlePerDay()", +"0aed4c56": "ReconCashinB2B()", "0aed5a21": "NamiExchange(address)", "0aed80f2": "secondSellPrice()", "0aed8e72": "rotate(uint256,bool)", "0aed9c45": "TicketsSoldForThisGame()", +"0aee0499": "RandomSuccess(bytes,uint256)", +"0aee8372": "TESTO()", +"0aee8dec": "safeWipeAll(address,address,uint256,address)", +"0aeec29a": "connectorConstructor(address,address)", "0aef8500": "amountFundAirdrop()", "0aef8655": "PXLProperty(address)", "0aefc573": "KyberHandler(address,address)", "0aeffa65": "ETH_MIN_GOAL()", +"0af06a02": "sudoRetrieveFrom(address,uint256)", +"0af13a24": "setMarginCode(address)", "0af15f6e": "stopSellingGenes(uint256)", "0af179d7": "setDNSRecords(bytes32,bytes)", "0af1fe11": "getAllPRS()", +"0af210a1": "doHardWork(address)", +"0af214b8": "seizeTOKENtoAddress(address,address)", +"0af228e4": "RealizeFToken(uint256,uint256)", "0af23be2": "ETHERREDSupply()", +"0af28392": "setMinGasPrice(address,bytes4,uint256)", +"0af2b3e5": "addressAt(uint256)", +"0af2b50f": "updateRelayer(bytes32,bytes,bytes[],bytes32)", +"0af2c6ca": "nftCount()", "0af39032": "testMintThis()", "0af3e660": "getHolderId(address)", "0af4187d": "getAllowance(address,address)", "0af4626d": "testRetract()", +"0af46ab0": "orderBrokerRegistryAddress()", "0af4cd61": "setHalted(uint256)", +"0af54fe8": "rayPow(uint256,uint256)", +"0af563eb": "_setChainIds(uint256,uint256)", +"0af5ca78": "investorBalances(address,uint256)", +"0af5f123": "mssToWbnbRoute(uint256)", "0af658ca": "personUpdateActivity(uint256,bool)", "0af6c9ff": "setColdWallet(address,uint256,uint256)", "0af6f6fe": "changeAgentPermission(address,uint8)", "0af72ad0": "isStrategy()", +"0af7586c": "LogPlayerBet(address,bytes32,uint256,uint256)", +"0af76482": "getContractByOwner(address,uint256)", +"0af77eb1": "activate(bytes,uint256,uint256,uint256)", +"0af7d3ae": "receiveAmounts(address)", +"0af80135": "tokentoEth(uint256)", +"0af809cf": "denormalize(uint256)", "0af825da": "_transferInternal(address,address,uint256,bytes)", +"0af88b24": "WETHAddress()", +"0af8a87c": "filterAthleteByTeamName(string)", +"0af8b27f": "mulDivRoundingUp(uint256,uint256,uint256)", "0af8bd95": "TIDAChain()", "0af95750": "deactivateProject(address)", +"0af96800": "clearingHouse()", "0af9d89c": "getPaintingGeneration(uint256)", "0afa371d": "XMAX()", +"0afa44b0": "isERC721TGContract(address)", "0afa6dde": "getAddressLost(address)", "0afa9fb9": "contains(int256,address)", +"0afad5c4": "keepUNIMax()", "0afb0409": "refresh(address)", +"0afb4ddc": "multipleGeneratorByScalar(uint256)", "0afb9f1f": "getProposalByIdIteration(uint256,uint256)", +"0afbcda5": "totalQuarterlyCBONDS()", "0afc0a59": "computeTokens(uint256,uint256)", +"0afc50fe": "refreshDefi99Speeds()", "0afd21d2": "failSale(uint256)", "0afd2778": "changeFundOwnerWalletAddress(address)", "0afd548d": "setOperationContracts(address,address,address)", +"0afdb4ea": "f(int256,int256)", +"0afdbaed": "DistenseAddress()", "0afdca95": "impl_batchTransferMSM(address,address[],uint256[])", +"0aff0e11": "deploy(string,address,address)", "0aff2076": "getLastAuctionId()", +"0aff6a86": "checkIfAddressIsWhitelisted(address)", "0b009517": "YourToken()", "0b00a111": "WhitelistUpdated(address,address)", "0b00de8d": "unregisterWorkerAffectation(address,address)", "0b00fd54": "TEAM_ADDR()", +"0b011bad": "SuccessIco()", +"0b012e15": "drinkIdToApproved(uint256)", "0b01517c": "getPlayerBalance()", +"0b015216": "UsdLockAccountThresholdUpdated(uint256,uint256)", +"0b01625e": "approve_776(address,uint256)", "0b01856d": "startPreICOTimestamp()", +"0b01e1c1": "CardClaimCompleted(uint256,address,address,address)", "0b02177f": "testnetWithdrawn(uint256)", +"0b031d44": "isPrincipleDepositor(address)", +"0b033c50": "changePositiveSlippageToUser(bool)", +"0b0376a1": "UserCreated(address)", +"0b0387f7": "setQuantityMax(uint256)", "0b03ad11": "unregisterToken(address,string)", +"0b040aec": "upgradeClaimControl(address)", +"0b04a16e": "calculateTimeClaim(uint256)", +"0b04fffe": "balanceBNB()", "0b0608db": "LolaCoin()", +"0b066dbb": "redeemTknAndTransfer(address,address,uint256)", +"0b06bbda": "eth_rate_direct()", "0b070845": "Dagt()", "0b073865": "share3()", "0b0740ae": "getItemIndexToOwner(uint256)", +"0b076557": "applyPendingRewards(address)", +"0b07681c": "withdrawInfo()", "0b077fe7": "Whales()", "0b0788dc": "assertEq27(bytes27,bytes27)", +"0b07a6ff": "process(bytes16)", +"0b08a614": "increaseBidSize(address,uint256,uint256)", +"0b0909ce": "withdrawTenDays()", +"0b099ee8": "maxDepositsInOneTx()", +"0b09ef27": "getReward3ForDuration()", "0b0a4b17": "askHash()", +"0b0ab0c1": "fallbackTrigged(address,uint256,bytes)", +"0b0ab776": "REGISTERED()", +"0b0ad508": "init(bytes32,bytes32,bytes32)", "0b0b6d5b": "supportImpeachment()", "0b0bbd65": "addrToAsciiString(address)", +"0b0bcae7": "getOverallSantas()", +"0b0c061f": "increaseFeeGrowthGlobal0X128(uint256)", +"0b0c1493": "asks(uint256)", "0b0c2e80": "test_basicWithTwoAssertThrow()", "0b0c564d": "Enter(uint256,uint256,bool,address)", "0b0c8f1f": "initSmartToken(address,address,uint256)", "0b0c92bd": "_isOperatorFor(address,address,bool)", "0b0d031a": "fetchCreatedOrdersForPayer()", "0b0d0eb7": "transferToBeneficiaries()", +"0b0d2173": "NODE_DEPOSIT()", +"0b0dbcfa": "isOnCurve(uint256,uint256)", "0b0e13d6": "closeStageTwo()", "0b0edad3": "getBooking(address,uint256)", +"0b0f54c3": "calcDevTreasuryPercentage()", "0b0f7743": "issuedCount()", "0b100a5a": "policiesCount()", +"0b102d1a": "setNftAddress(address)", "0b107904": "authorizeOne(address)", "0b10bd1b": "HiroyukiCoinDark()", +"0b1107cb": "increaseLpStake(uint256)", +"0b11804a": "create(uint256,uint256,bool,bool)", "0b11a6e3": "ERGOIN()", +"0b11ce77": "blockTimestampLast(uint256)", "0b11ed63": "getGenerationForWindow(uint256,uint256)", "0b1200da": "setWalletContractAddress(address)", "0b121c04": "createIssue(uint256,uint256,uint256)", "0b12a148": "_distributeNewSaleInput(address)", +"0b12b6ac": "isValidSignatureAndMethod(address,bytes)", "0b12e7e2": "soowhat()", +"0b1336aa": "bfclToken()", "0b1350cf": "assetProxy()", +"0b138fe6": "getPartCount()", +"0b139194": "set(address,uint256,bool)", +"0b13a57f": "getLpStakedEthTotal()", +"0b140fc0": "getUrit()", "0b1414c1": "oneStaIsStb()", "0b14331f": "getExpiration(uint256,uint256)", +"0b14408f": "saiJoin()", +"0b144226": "uniLPComponentToken1()", +"0b14939f": "__ProvenanceRegistry_init()", +"0b14afd1": "transferAvailable()", "0b151811": "getBonusByDate(uint256,uint256)", +"0b151fa7": "setResellerOnDistributionContract(address,address)", "0b15650b": "randInt(uint256,uint256)", "0b1573b8": "setRoundLockAmount(uint256)", +"0b15822a": "transferPoolOwnership(uint256,address)", +"0b15a94c": "lockAddon(uint256)", +"0b161f3e": "update_address(uint8,address)", +"0b16bab8": "setanonPerBlock(uint256)", +"0b1714fd": "approvedForAll(address,address)", "0b181567": "exceed()", +"0b183bfa": "withDrawl(uint256)", "0b1851a9": "Billionscoin()", +"0b19f06c": "func_00001871(uint256,uint256,uint256,uint256,uint256,uint256)", "0b1a3144": "pushToApproved(address,uint8)", +"0b1a3554": "bondMakerAddress()", "0b1a8e1e": "setMasterServer(uint32)", "0b1a94e7": "validPurchasePresale()", +"0b1ad18d": "transferCryptoRomeWalletOwnership(address)", "0b1aff48": "extendTDE(uint256)", "0b1b62fa": "transferBackMANAMany(address[],uint256[])", "0b1b92dd": "FACTOR_11()", "0b1b9aa5": "getluckyuser()", "0b1ba852": "changeDepositCell(address,uint256)", "0b1bf3e2": "Galleass(string)", +"0b1bf8a2": "safeSendKsj(address,uint256)", "0b1c45c9": "getPhiladelphiaBets(address)", "0b1c4a75": "subFees(uint256,uint256)", "0b1c5b76": "fetchVoteMainInfoBySnapshotBlock(uint256)", +"0b1c7182": "setUniPair(address,bool)", "0b1ca49a": "removeMember(address)", +"0b1d07de": "discount(uint256)", "0b1d366d": "getLastAwardInfo(uint256)", +"0b1dc17c": "getStockVolume(bytes4)", "0b1dcc88": "buyCountry(uint8)", "0b1dfa26": "fxpDiv(uint256,uint256,uint256)", "0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", "0b1e5acc": "roleHas(string,address,address)", +"0b1e70ef": "editLGETime(uint256,bool)", "0b1e7f83": "posts(uint256)", "0b1ec92e": "RoundCreated(uint256,uint256,uint256,uint256)", +"0b1eebb5": "addMultiplier(uint256)", "0b1f3850": "num_hosts_revealed()", +"0b1f5d80": "capAddress(address)", "0b1fc3c0": "getVendingAmountLeft(uint256)", +"0b1fe1ca": "isMigrateComplete()", +"0b1ffa14": "retireBid(uint256)", +"0b201eb1": "setCRVRouter(bool,address[])", +"0b20818c": "setUserEXR(address,uint256,uint256)", "0b210a72": "getDrugInfo(uint256)", "0b2140ab": "buyUSD(address,uint256)", "0b214493": "_stageValidation(uint256,uint256,bool)", +"0b217cd0": "previousDivisors(address)", +"0b2196f3": "LIST_TOKEN_FAILURE_BURN_PRECENT()", "0b21d446": "setValidBwCaller(address)", +"0b21f279": "approve_219(address,uint256)", "0b225b42": "PHASE4_START_TIME()", +"0b22ae1c": "masterPot()", +"0b22b76a": "RinghashSubmitted(address,bytes32)", +"0b234183": "getMappingMsg(uint256)", +"0b237afe": "ConfirmationTimeSet(uint256,uint256)", +"0b2392f5": "participantsCount(uint8)", +"0b239b14": "takeOut(address,address,uint256)", "0b2478b3": "getSaleIsOn()", "0b247b1b": "CreateACI(address,uint256)", +"0b255037": "run(bool,uint32,uint64)", +"0b2583c8": "originSwap(address,address,uint256,uint256,uint256)", "0b25cbb2": "Ftechiz()", "0b261340": "marbleBalance(address)", +"0b262d02": "fundList(uint256)", +"0b2679b3": "advisersTokens()", "0b269898": "setPricing(uint256[])", +"0b26cf66": "setBridgeContract(address)", +"0b272bed": "getUid(uint256,uint8,bool,uint32)", "0b274f2e": "passPhase()", "0b27fa51": "noOfTokenAlocatedForPresaleRound()", "0b280a29": "isBatchActive(uint256)", +"0b285b1f": "_isExcluded(address)", "0b2909e6": "addOwed(address,uint256)", +"0b2916d3": "transferEths(address[],uint256[])", "0b294bdf": "GetPlayerDetails(address,address)", "0b299630": "addItem(string,address,uint256,address,uint128)", "0b2a6c70": "marketWine()", +"0b2a72f1": "shuffleToken()", +"0b2a9b00": "convertOddToCvpAndSendToPayout(address[])", "0b2acb3f": "add(address,bytes)", "0b2accb2": "getPercentage()", +"0b2b26cc": "affiliatePot()", +"0b2bcd67": "productImplementations(bytes32)", "0b2c588c": "setAdventureHandler(address)", +"0b2cbb05": "feedDev()", +"0b2cff5e": "___referinit_unchained(address,address,address)", +"0b2d239f": "fulfillAnswerQuestion(string,uint256)", "0b2d25ca": "calculateCharityFee(uint256)", +"0b2d3bf1": "recompose(uint256,uint256[],uint256[],uint256[],uint256[],uint256)", +"0b2d45aa": "zeroExExchange()", +"0b2d46c0": "bullCallSpread(uint256,uint256,uint256,uint256,uint256,uint256)", +"0b2d4f10": "ADDRESS(address,uint256)", +"0b2d8501": "setBasketWeights(address[],uint256[])", +"0b2dc4f6": "shl_2()", "0b2e02c7": "migrateAgent()", +"0b2e4855": "_lotteryPaidOut()", "0b2e7423": "maxSecurityGuardDelay()", "0b2ee7e9": "create(uint256,uint256,uint256,bool)", +"0b2eeb49": "setD(uint256)", +"0b2efb4c": "tokenAuctionBeginTimestamp(uint256)", +"0b2f25e9": "getTotalXethClaimable(uint256,uint256,uint256,uint256)", "0b2f6a7e": "_mintPlayer(uint32,uint32,address)", "0b2f6cef": "m_hodlers()", +"0b2f6e5e": "aapl()", "0b2fce74": "addGardener(uint256,uint256)", "0b305c62": "playerEndGameConflict(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", "0b305ce9": "destFoundation()", "0b309c93": "Timer()", +"0b30a8d7": "getLocators(address,uint256)", "0b30ab4f": "bubbleSort()", +"0b30dcc6": "Candatevote(address)", "0b30fc7b": "pastValues(uint256)", "0b317697": "investorToken(address)", "0b31fc3a": "DiamondToken()", +"0b32e757": "getSectorVolumeByRarity(uint16)", +"0b3308a3": "getExchangeEpochByUser(address,uint16,address)", +"0b337be6": "vouches(address,address)", "0b341245": "activityAddress()", +"0b3429a2": "getVariableRateSlope1()", "0b3464c3": "activeHeroGenome(address)", "0b34f78c": "MintProposalAdded(uint256,address,uint256)", "0b3532b3": "balanceSellingOf(address)", "0b354090": "SimpleConstructorBool(bool,bool)", "0b3598c6": "_sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", +"0b359f4e": "NewUser(bytes32)", "0b35ea61": "stopGuess(uint256,bool)", "0b35fe44": "VerifyEd25519(bytes32,bytes,bytes)", +"0b3629f2": "ChangeMin(uint256)", +"0b36586c": "daysLimit()", "0b368627": "releaseOldData()", +"0b36e034": "isFactoryATGenerated(address)", +"0b3735cc": "erc721Rewards(address,uint256,address,uint256)", +"0b373b4f": "updateServiceMinMineDays(uint256)", "0b377a8f": "setNumIncorrectDesignatedReportMarkets(uint256)", +"0b379b18": "withdrawExcessExecutorStake(uint256)", +"0b37b48d": "stakeTime(address,uint256)", "0b38bae2": "_totalSupplyLeft()", +"0b392942": "SellEvent(address,address,uint256)", "0b393a9d": "MANHATTANPROXY1STAVE()", "0b395d1e": "_addUserExperience(address,int32)", "0b39aaa9": "privateEquityClaimed()", "0b39c3e1": "requestLoan(address,address,bytes16,uint256,uint128,uint128,uint16,uint64,uint64,string)", "0b39f18e": "setCardTokenAddress(address)", +"0b39f420": "setFunctionDelay(bytes4,uint256)", +"0b3a2d21": "registerTokenAdmin(address)", "0b3a2ffd": "setRoyaltyInformationContract(address)", "0b3af901": "proposePlatformWithdrawal(address)", "0b3b2222": "TokenDistribution(address,address)", +"0b3b5af7": "_closeFee()", "0b3bb024": "getTenant()", "0b3bc259": "funderCount()", +"0b3bdc41": "log(string,uint32)", +"0b3c57d8": "unclaimedProfit(address)", +"0b3cb9d2": "referDepth()", +"0b3cbe36": "stepOne()", "0b3cd070": "multiBet(uint256[],uint256[],uint256[])", "0b3d7174": "prev_week_ID()", +"0b3dca05": "setpurchaseTokenAmount(uint256)", +"0b3dda05": "YieldMasterPerBlock()", +"0b3e29b8": "contingencyFunds()", "0b3e9c7b": "userEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address)", +"0b3ec3c5": "sXAU()", "0b3ed536": "claimDonations(uint256)", "0b3f191a": "disableChanging(bool)", +"0b3fd63c": "setGOD(address,bool)", "0b3fe32d": "setHalfTimeAtkBoss(uint256)", +"0b3ffd1d": "deactivateWallet(address)", +"0b40495b": "ratio(address)", "0b407022": "migrateV1Upgrades(address[],uint256[],uint256[])", "0b40ab43": "setBankAddress(address,address)", +"0b40d570": "getModuleInfo()", +"0b40fb50": "ActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2],uint256)", +"0b40ffe7": "setFeeDestinationOnAcoPool(address[],address[])", "0b4130f2": "GenomaToken()", "0b424b66": "HHDCToken(uint256,string,string)", "0b42d1de": "BejonesStandardToken(uint256,string,uint8,string)", +"0b433679": "order(address,string)", "0b43c6e6": "CryptonCoin()", "0b440f33": "initCrowdsale(uint256,uint256,uint256,address)", "0b4438e5": "spinAll()", +"0b447394": "stopPaying(uint256)", +"0b4491e6": "testedPerson()", +"0b44d6fe": "reward_per_block()", +"0b44fde8": "transferToMany(address[],address[],uint256[])", +"0b45260e": "burnLP()", +"0b453389": "signaturedrops(address)", "0b45e8db": "SALE_CAP()", "0b464bf6": "blocksSinceLastBid()", "0b4650a0": "FiatContract()", "0b467b9b": "revoke(bytes)", +"0b46c4e0": "compound(address,address,address,uint256)", "0b47459b": "LAARToken()", "0b480095": "teamAddressThreeTokens()", "0b483f6e": "toAllow()", "0b48af0b": "interestOf(address,address)", "0b4964a8": "addDungeonNewFloor(uint256,uint256,uint256)", +"0b4977de": "getGetMinMiddle16()", "0b4a1ece": "VisibilityDerived()", "0b4aca45": "__formatDecimals(uint256)", "0b4b5d5e": "GamityToken()", +"0b4bb602": "getUSDPAddress()", "0b4bb61f": "burnPercentage1000m()", "0b4c72a9": "rejectProvider(address)", +"0b4c7e4d": "add_liquidity(uint256[2],uint256)", "0b4ca1cd": "doResult(uint256,bytes32,bytes32,uint256)", +"0b4ce60f": "keyprice()", "0b4cf825": "getRandomColorType()", "0b4da628": "IsPlayer()", +"0b4da9a9": "personalPercent()", "0b4db63a": "Tratok()", +"0b4dceab": "transferToUplineTwentyfourK(address,address,address,address,address,address)", "0b4dfc77": "contractMint(address,string,bytes32,bytes32,uint256)", "0b4e0513": "reserveTokenFund()", +"0b4e1ff6": "typeOfAddress(address)", "0b4efd9a": "RobotBTC(uint256,string,string)", "0b4f12f6": "updateUser(string)", "0b4f3f3d": "cancel(string)", "0b4f79a1": "RejekiKita()", +"0b4f8858": "returnBalanceERC20(uint64)", +"0b4fb708": "TFCEToken()", +"0b4fe10a": "_slash(address,address,uint256)", +"0b501ae7": "debugClearLeaders()", +"0b509007": "depositToStrategy()", "0b509e1d": "getCountOfCell()", +"0b50cd3e": "updateReward(uint256,uint256)", "0b513828": "parseChannel(bytes)", "0b513ce9": "PonziBet()", "0b51989a": "setData(address,string)", +"0b51f0d8": "approve_171(address,uint256)", "0b520ad5": "freePeriodDuration()", "0b522abf": "closeCrowdsale(address)", +"0b52457e": "CAVEname()", +"0b5256af": "underlyingPriceAdjustPercentage()", +"0b52a0fe": "_mintingOpen()", +"0b530c85": "SetOperator()", +"0b53a1a6": "addRewardNftFixedBulk(uint32,uint128,uint128[])", +"0b543f43": "changeHardWorker(address)", +"0b54817c": "CHILD_CHAIN_ID_BYTES()", "0b549884": "matingPrice(uint256)", +"0b54cb00": "setMyEnergy(uint256)", "0b54cbfb": "setType(uint8)", +"0b54d0f7": "setLEGTimeAndLPTime(uint256,uint256)", +"0b54e765": "rewards_for2(address)", +"0b54f998": "promoCodes(string)", "0b5608f2": "PackageCoinPresaleOne(uint256,uint256)", "0b566f33": "unlockedCollateral(address)", +"0b569f18": "hasInviter()", +"0b569f8b": "updateDailyReward()", +"0b56d157": "setMaxUnlentPerc(uint256)", "0b56d4c6": "airdropNum()", +"0b56db31": "EXCHANGE_RATE_IN_PRIVATE_SALE()", "0b56f01c": "createAmountFromEXORForAddress(uint256,address)", "0b573638": "ethToTokenTransferOutput(uint256,uint256,address)", "0b57adc0": "Transwave()", "0b57c487": "COVERCOINToken(string,string,uint8,uint256)", +"0b57d5fb": "setLucaxPriceForBTCB(uint256)", "0b583982": "getUserProductCount(bytes32)", +"0b584040": "getDayNow()", "0b586f1a": "_emitWorkResumed(uint256,uint256)", +"0b58d24e": "defaultBidData()", "0b58dc38": "SetNewBlockchainEnabled()", "0b590c6b": "SingularDTVToken()", "0b591195": "largestPenis()", +"0b593934": "sfi()", "0b5945ec": "setTokenURL(address,string)", "0b597135": "onHardCapReached(uint256)", "0b5982f0": "payOutDividend()", "0b59a5c4": "purchasedCoins()", "0b59df68": "withdrawEscrow(uint64)", "0b5a006b": "currentYear()", +"0b5a1019": "operatorAddressesByGameId(uint256,uint256)", "0b5ab3d5": "destroyDeed()", "0b5ad1c1": "UpdateSellAgentCreators(address)", "0b5adfff": "getNumTickets()", +"0b5b2e76": "pieToBalancer(address,uint256,address,uint256,uint256,uint256)", +"0b5b630d": "constructor(address,address,bytes)", "0b5ba082": "stagesManager()", "0b5c2307": "globChanceOwner(uint256)", "0b5c3f87": "addReferral(address,address)", +"0b5c8983": "isFirstMinter()", "0b5ca8db": "issuedBounty()", +"0b5ca8ee": "PresaleFinished()", +"0b5cc4c2": "UINT_AUTOBIRTH_FEE()", +"0b5d1a54": "balanceIncludingUniswapPairs(address)", "0b5d1c3d": "testLessThanOrEqual()", +"0b5d5795": "reserveToTokenTransferOutput(address,uint256,uint256,uint256,address)", "0b5d69ab": "UpdateMaxBalance(uint256)", "0b5d94f6": "getOrderPrice(address,address,uint256,uint256)", "0b5e19b0": "getInvestSum()", "0b5e2232": "HunxuHappyToken()", +"0b5e4dbb": "collectLeftover()", "0b5e89f4": "icoStarted()", "0b5ee006": "setContractName(string)", "0b5f2efd": "setCurrentRate(uint256)", "0b5f5ef1": "setAvatar(uint256,bytes)", "0b5faf97": "claimWin(bytes32)", "0b5fcf81": "enableAutoDividends(uint256)", +"0b5feb8a": "miningEndBlock()", "0b604085": "setBombletAddress(address)", "0b605fcd": "tokensTo0xbtc_(uint256)", "0b60ca88": "raisedSale2USD()", "0b611241": "ieoStorageVault()", +"0b612856": "LGEDurationDays()", "0b6142fc": "breach()", +"0b61ba85": "commitHash(bytes32,bytes)", "0b620b81": "withdraw(address,address,address,uint256)", +"0b628395": "setCloverMoves(uint256,bytes28[2])", +"0b62f0f3": "betterNumWinning(address)", "0b6386d4": "KyberNetworkCrystal(uint256,uint256,uint256,address)", "0b63b114": "freeTokens(address)", +"0b63c271": "fetchAmountFromUniswapFORKxWETHPool()", +"0b63c855": "ROLE_ADVERTISER()", +"0b63fb62": "cdpAllow(uint256,address,uint256)", "0b63fe95": "processPayment(address,uint256)", "0b642d72": "recoverLostEth(address,uint256)", +"0b64394b": "andsjiuinf()", +"0b646c2a": "ethSentToGandhiji()", +"0b64e824": "kMPLContract()", +"0b65092d": "lpBalances(address)", "0b65108b": "merge()", "0b654e7d": "finishedRaceCount()", +"0b663395": "negativerebase(uint256,uint256)", "0b663e63": "promoCount()", "0b66c247": "scoreTeams(uint32,uint32[],int32[],uint32[],uint32,uint32)", +"0b66f3b6": "TERMINATION_TIME()", "0b66f3f5": "multisendToken(address,address[],uint256[])", "0b6700d6": "getLogo()", "0b6780aa": "extendSaleEndDate(uint256)", +"0b67824d": "initMill(uint256,uint256,uint256,uint256,uint256[3],bytes32)", "0b679d2c": "REQUEST_CANCELED_BY_CREATOR()", +"0b67dd65": "pendingTransfers()", +"0b67f7f1": "reduceFreezingTo(address,uint256,uint64,uint64)", +"0b68134d": "nodeRewardsRatio()", "0b6826ca": "payDividend()", "0b682cb8": "Quhabitat()", "0b684de6": "CitizenOneCoin(uint256)", +"0b687d2b": "claimReserveTokens(uint256)", +"0b688f40": "uidOf(address)", +"0b689417": "isPaired(uint256)", "0b695449": "MiningUpgrade(address,uint256,uint256)", "0b697362": "withdrawFromSubRound(uint256)", +"0b69c882": "LogClosedBet(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"0b6ab2f0": "divPrecisely(uint256,uint256)", +"0b6ad791": "max_withdrawal_period_amount()", "0b6b80b2": "sampleRegistry()", +"0b6bb30b": "setOnlyGov(bool)", "0b6bd1b0": "GetAcorn(address)", "0b6bf29f": "partner1_will()", "0b6c754b": "isSuccess()", "0b6c9ac7": "airdroppedAmount()", +"0b6cd37e": "addSavingsProxy(address)", "0b6d3017": "overflow_upper()", +"0b6d621c": "tokenAllocations(address)", "0b6d715b": "createGame(string,uint256,uint256)", "0b6d8d52": "createDAO(address,uint256,uint256)", +"0b6dfc69": "roiPayoutOfInvestment(uint256,address)", "0b6e01db": "total_bet_available()", +"0b6e2f29": "newAddressForAddrAndNonce(address,uint8)", "0b6e46fe": "enableController(address)", "0b6e6511": "convertToELIX(uint256,address)", +"0b6eb270": "RateChange(uint256)", +"0b6eb429": "uniswap_rate()", "0b6ebf86": "KWHTokenAddress()", "0b6f0530": "test_twoInvalidEqBytes32Message()", +"0b6f2df8": "getAdvisors()", "0b6f2fad": "HashCoin(uint256,string,string)", "0b6f46ed": "isPresaled(address)", "0b6f5b3d": "ShrimpFarmer()", "0b6f6e0d": "CanYaCoinToken()", +"0b6fbdde": "tokensAPData()", "0b6fc163": "claimSignerAddress()", "0b6fcdb0": "getEnforceRevisions(bytes32)", +"0b700698": "ipfsHash(uint256)", +"0b7062c5": "onInjectEtherToDividend(address,uint256,uint256)", +"0b70b812": "succeed(address)", "0b70ce55": "Betfunding()", "0b714b17": "AddHash()", +"0b71a4a7": "setCustomTokenAddressPair(address,address)", +"0b71b95c": "badd(uint256,uint256)", +"0b71f116": "WHITELISTED()", "0b71ff6a": "MTDCERC20()", +"0b722bbb": "bid(uint256,uint256,bytes32)", "0b72396c": "validateContractWithCode(address,string)", +"0b73012c": "OracleAccepted(address,address,uint256,bytes)", "0b730fae": "ICOadvisor2()", "0b731652": "Ethbet(address,address,address,uint256,uint256)", +"0b734141": "setCapAndFee(uint256,uint256,address)", "0b7373d6": "giveAllBack()", +"0b73771f": "upperSystemCoinMedianDeviation()", +"0b73a8c7": "FundsLeftInContract()", "0b73aad0": "msgsWaitingDone(uint256)", "0b74074b": "startPayouts()", "0b743021": "TOKENS_TOTAL()", "0b745a01": "setLockup(address)", +"0b746641": "IMPOSS09()", "0b747d91": "randomSeed()", +"0b749269": "denormalizeRate(address,address,uint256,uint256)", +"0b749937": "registerMining(address)", "0b74b620": "getChannelsParticipants()", "0b74edc6": "testFinalHash()", "0b74f633": "getTradeParameters(uint256,address,address,uint256,uint256,uint256,uint256)", "0b7507ae": "getTaskAtIndex(uint256)", +"0b758fd2": "oneBlock()", "0b7623ba": "abs(int8)", "0b76619b": "staked()", +"0b772e7c": "getPriceByID(bytes32)", +"0b775fd5": "setupFromDeposits(address)", "0b779363": "checkVotingForChangeAdminAddress()", +"0b77939b": "k_reward_accumulated()", +"0b77a715": "auctionEndVoucherSubmitted(bytes32)", +"0b77f98d": "getIssuedsalesSupply()", "0b77fa28": "generateThemedSpinners(uint256,uint256,uint256)", "0b781385": "nextCampaignBalance()", +"0b7872dd": "iniciarnuevaRONDA()", "0b78f9c0": "setFees(uint256,uint256)", +"0b791430": "events(uint256)", +"0b791f25": "SELL_MIN_RATE()", "0b7abf77": "TOTAL_TOKENS()", "0b7ad54c": "getContent(uint256)", +"0b7b3eb7": "m_cosignersApprovedDisband(uint256)", +"0b7b5700": "approve_562(address,uint256)", +"0b7b925b": "updateOffer(uint256,uint256)", "0b7d1de1": "proofOfSMS()", +"0b7d61f1": "_tokenUSD()", "0b7d6320": "crowdsaleAgent()", "0b7d796e": "loop(uint256)", "0b7ddd25": "setRaisedAmount(uint256)", "0b7e4e7f": "substractNumber(uint256)", +"0b7e7346": "betItems(uint256)", "0b7e9c44": "payout(address)", +"0b7edea3": "clearOne(address,uint256)", "0b7ef89b": "contributeToCampaign(uint256)", "0b8021c4": "getPublishedTokens(address)", "0b803b6b": "transferApprovedBalance(address)", @@ -6587,75 +12001,138 @@ "0b811cb6": "executeProposal(uint256,bytes32)", "0b816045": "getRequestInfo(uint256)", "0b81e216": "setAllowTransfer(bool)", +"0b828fb6": "percentToLock()", "0b82a541": "setIcoEndTime()", "0b82d33d": "withdrawBalanceDifference()", "0b83284e": "MinterFunction(address,uint256)", "0b834864": "publicTransfers(address,address,uint256)", +"0b839ab2": "glock()", +"0b83a727": "claimAllRewards()", +"0b83af38": "requestERC20(address,uint256,address)", "0b83de20": "ABI(bytes32)", +"0b83f017": "whiteListAddr(address,uint256)", "0b841433": "agentApproval(address,uint256)", +"0b842663": "changeTermPeriods(uint32,uint32,uint32,uint32)", "0b8440ec": "bonusTokenRateLevelTwo()", "0b84cc4a": "Committees(uint256)", +"0b850a1e": "regularFactor()", "0b8514b9": "exit(bytes32,bytes,bytes32)", "0b851937": "year4Unlock()", "0b85877f": "isICAP(address,address)", "0b85881c": "ceilLog2(uint256,uint256)", +"0b85b74c": "nyanV2LPUnstaked(uint256,address)", +"0b86071a": "setUSDPPriceForCALETAS(uint256)", +"0b86273a": "withdrawETHGainToTrove(address)", +"0b86366b": "curveCompoundExchange()", "0b869824": "CeoAddress()", "0b87572b": "communityDevelopmentSupply()", "0b8762d1": "Block18Token()", +"0b87c1e0": "getFile(address)", "0b87cf10": "crowdsaleActive()", +"0b87f144": "coinRelease()", +"0b882447": "DeflationToken()", +"0b887dae": "removeSynth(bytes32)", +"0b88ca09": "addItem(uint256,address,uint256)", "0b88e06b": "testTokenBalance()", "0b892e3f": "celebs(uint256)", "0b897f64": "invert(address,uint256,address)", +"0b898c9e": "create(address,address,address,bytes,bytes32,uint32)", +"0b898cf8": "pendingBold(uint256,address)", +"0b89f318": "_isAllowedTrader(address)", +"0b8a1a8b": "OneMethodsToBuy(uint256)", "0b8a7bf8": "coinbaseWallet()", +"0b8a8932": "testOwnerCanWithdrawFunds()", "0b8b709d": "_createDroneInternal(address)", "0b8ba87d": "UnilotBonusTailEther(address)", "0b8bbd5b": "webGiftEtherAmount()", +"0b8bdfff": "putDividendOnHold_(address,bool)", +"0b8c7420": "sellSupra(uint256)", +"0b8c759a": "uniEthDeusUni(uint256,address[],address[],uint256)", "0b8d0a28": "wallet2()", +"0b8d611f": "get_staked_LP(uint256)", "0b8d9d94": "createSportsBet(string,uint256)", +"0b8dbe4f": "startVotingForSendWeiFromExchange(address,uint256)", +"0b8e039b": "getRewardByPID(uint256)", "0b8e845a": "burnFeeFlat()", "0b8eebde": "gameEnd()", "0b8f0b61": "sendCoinsToBeneficiary()", "0b8f0e0a": "LIWUC()", "0b901c82": "totalRepaidQuantity()", +"0b905028": "register(address,address,address,string,bytes)", +"0b9052cf": "hashCash()", +"0b90f172": "toggleWhitelistedFreeze(bool)", "0b910f86": "PRESALE_MIN_INVEST()", +"0b917540": "ethPricePerToken(address)", +"0b91e28d": "getCourse(uint256)", "0b91eaf9": "isValidated(address)", +"0b9201e2": "returnMultiplier(uint256,address)", +"0b921df6": "lastCloseAt()", "0b926ecd": "validStoreVal()", "0b927666": "order(address,uint256,address,uint256,uint256,uint256)", +"0b92880e": "_transactions(uint256)", +"0b92d1fb": "balanceCollateral(address)", +"0b92f747": "Get_Gift(uint256)", +"0b9320e8": "getStartingBlock()", "0b93381b": "success()", "0b936a77": "DuanZiToken(address)", "0b93bf0d": "setRecruitHeroFee(uint256)", +"0b93cd3c": "approve_584(address,uint256)", +"0b93eec0": "setTest(address)", +"0b945b7d": "lpTokenPID(address)", "0b948684": "delegatedTransfer(bytes,address,uint256,uint256,uint256)", +"0b94de9c": "claimETH(address,uint256)", +"0b94df4c": "escrow(string,address,bytes32,address,uint256)", +"0b94e4f7": "foo(uint256,uint256,uint256)", "0b95c8ae": "aggiungiMsg(string)", "0b962e8f": "AlphaChainConstructor()", "0b96406a": "vestingMappingSize(address)", +"0b9663db": "endEpoch()", "0b96740c": "changeMinimumContributionForAllPhases(uint256)", "0b967584": "voteForCandidate(uint256,address)", "0b967fd2": "remove_master(address)", "0b967fe7": "assertEq18(bytes18,bytes18)", +"0b96c632": "A15(bytes)", "0b96e72e": "setBAS(bytes32,address,string)", +"0b9714ca": "referrerIsValid(address)", "0b972ff6": "weiPreCollected()", +"0b973ab8": "initProposer(address,uint256,address,address)", +"0b975991": "getAndUpdateForbiddenForDelegationAmount(address)", "0b97bc86": "startDate()", "0b97fc8d": "WeiPerTicket()", "0b98107c": "dateFrom()", "0b9830ba": "tokensIndexOf(address,bool)", "0b9835cf": "pvpContenderRemoved(uint32)", "0b9849ab": "WEChainCommunity()", +"0b986a50": "netBalanceOf(address)", +"0b986d5d": "CityForSale(uint16,uint256)", +"0b98956a": "getAssetManager(address)", "0b98f975": "setBonus(uint256)", "0b9902d0": "WithdrawPerformed(uint256)", +"0b9962ed": "sellLots(uint256,uint256)", +"0b99c9c4": "createPromoAllStar(address,string,uint256)", "0b99ccee": "ico2Ended()", +"0b9a80b0": "PayoutStaking(uint256,address)", "0b9aa067": "isVerified(address,address)", +"0b9aa358": "transferChainlinkLessGas(address,address,address,uint256)", "0b9ac851": "getCurveUnset(address,bytes32,int256)", "0b9adc57": "deleteBytes32(bytes32)", "0b9b0e7d": "highRate()", +"0b9b6e8b": "nameUsed(string)", "0b9b8130": "registerMintedToken(address,string)", "0b9b9602": "SalesWalletUpdated(address,address)", "0b9bfa6c": "inCommunity(address,address)", +"0b9c073b": "ownedDomainsCount(address)", +"0b9c0c00": "ipfsAddresses(bytes32)", +"0b9c4c43": "compoundAll(uint256[])", "0b9cae77": "KinetiQ()", "0b9d5847": "getExchange(uint256)", "0b9d98e9": "getTotalVolume()", +"0b9dc2d5": "SlashedStake(uint256,address)", +"0b9e31c9": "suspendSynthWithInvalidRate(bytes32)", "0b9e9817": "CanaryV7FastTestnet()", "0b9ea6c8": "getCurrentSold()", "0b9ea95d": "configureSaleClockAuction(address,uint256)", +"0b9ed879": "NewFeeCoeff(address,uint8,uint128,uint256)", "0b9f1e76": "wphcToken()", "0b9f2816": "nowwww()", "0b9f2ca6": "getCountBuildings(uint256,uint256,bool)", @@ -6665,198 +12142,356 @@ "0ba0a3a1": "TakerSoldAsset(address,uint256,uint256,uint256)", "0ba12c83": "commitUpgrade()", "0ba1772d": "callDistributed()", +"0ba19b45": "defim()", +"0ba1b376": "ResolverAdded(string,address,uint256)", +"0ba1e9fa": "goodWill()", "0ba1f7ad": "getImpactCount(string)", "0ba234d6": "cancelRecovery()", "0ba24e4c": "customers(address,address)", +"0ba25f7d": "Log0(bytes)", "0ba27775": "fondToken()", "0ba2e8a8": "allowFunding()", +"0ba31589": "setSimpleContrat(address)", +"0ba36d05": "getUpdateUriClaim(uint256,string,uint256)", +"0ba36dcd": "userDeposits(address)", "0ba3aa55": "setdoctor(string,uint256,string)", "0ba46624": "setBountyAgent(address,bool)", +"0ba4758b": "promoAddr_()", +"0ba4897e": "burneFAME(uint256)", "0ba4d242": "s43(bytes1)", +"0ba54df6": "ambBridge()", "0ba5890a": "noteBallotDeployed(bytes32)", +"0ba6b6fd": "getCardBasePrice(uint256)", "0ba6d271": "updateFunds(address,uint256)", "0ba7ebe2": "changeAll(address)", +"0ba81959": "getAPrecise()", +"0ba84cd2": "updateEmissionRate(uint256)", +"0ba86a7b": "SnowflakeTransfer(string,string,uint256)", +"0ba86f05": "setTeamRewardRate(uint256)", "0ba8916f": "updateMeterKey(address)", "0ba8d735": "purch(address,uint256)", "0ba8ebec": "lockance(address)", +"0ba8ec14": "projectPartyAddress()", "0ba92878": "delOrganizationCertificate(string)", "0ba95909": "getMaxAmount()", +"0ba9c655": "maxFlashAmount(address)", +"0ba9d8ca": "rate(address)", +"0baa05f6": "cal_intrest(uint256)", +"0baa56e6": "totalUsersShares()", "0baaaed9": "setConfigBytes(bytes,bytes)", +"0baac66f": "drainEth()", "0bab4d84": "setClearingPriceSubmissionDeposit(uint256)", "0bab718f": "updateCurs(uint256)", "0bab7ff6": "messiCommunity()", "0bac0312": "TryUnLockBalance(address)", +"0bac06bd": "addLiquidityETH(uint256,address,uint256,uint256,uint256,address,uint256)", +"0bac06cb": "delegatorWithdrawable(address,address)", "0bac15ae": "PUBLICSALE()", +"0bac2320": "set_base_asset(address)", "0bac2850": "setFunctionFourPrice(uint256)", "0bac3c01": "isDeferred(address)", +"0bac4540": "sendToEveryone(address,uint256,address[])", "0bac9fe7": "getUsernameByIndex(uint256)", +"0baccd75": "kitty()", +"0bace186": "flashloan(address,uint256,address,address,address,address,address)", +"0bacec21": "getReward(uint256,uint256,uint256)", "0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", +"0bad4201": "getPersonbyId(uint8)", "0bad4481": "setupRegion(address[16],uint256,uint256,uint256[],bool,uint8[128])", +"0bada3e8": "Get_Reward_Interval_Array()", "0bae2129": "affiliateTree()", "0bae3288": "getSale()", "0bae461c": "KomicaToken()", +"0baebca4": "winnerPercent()", "0baf0bcc": "lockDateTimeOf(address)", +"0bafd60e": "nextVersion()", +"0bb00eab": "log(bool,bool,uint256,uint256)", "0bb0482f": "concatBytes(bytes,bytes)", "0bb0e827": "add_addys(address[],uint256[])", "0bb15acc": "GoldeaToken(uint256)", +"0bb17975": "inviteePID_inviteReward1_(uint256)", "0bb18da2": "saveRefundJoinId(uint256,uint256)", +"0bb1d23d": "_computeCharge(uint256,uint256,uint256)", "0bb24375": "ITX_Token()", "0bb25901": "freezeSupply(uint256)", "0bb2cd6b": "mintAndFreeze(address,uint256,uint64)", "0bb2cdef": "operatorManager(address,uint8)", +"0bb3386f": "fsgAddress()", "0bb3a066": "unsetAdministrator(address[])", "0bb4bbaf": "testInitialNumberOfVoters()", "0bb4e6f4": "getTotalWei()", "0bb536a2": "fightMix(uint256,uint256)", "0bb563d6": "logString(string)", +"0bb57dfd": "Events(uint256)", "0bb5e62b": "EGC()", +"0bb6842d": "addPriceFeed(address)", +"0bb687e3": "getUint256(string)", +"0bb69401": "addAddressToLockerList(address,string,uint256,uint256)", "0bb700dc": "getStats(bytes32)", +"0bb71302": "getapplyCoinAddress(uint256)", +"0bb7663a": "decisionPeriods(address)", +"0bb78ec1": "_tokenURIs(uint256)", "0bb7a81a": "ZhuhuaToken()", "0bb8b9c3": "zint_convert(string)", +"0bb94066": "setSupply(uint256,string)", +"0bb953e5": "targetBorrowLimitHysteresis()", "0bb954c9": "WithdrawAndTransferToBankroll()", +"0bb9596e": "xsdPerBlock()", "0bb9ee71": "createRepository(bytes32,bytes)", "0bb9f21e": "SCAMERC20()", "0bba3065": "AuthorityFilter()", "0bba662d": "oneCoin()", "0bbaa27a": "seedSourceB()", "0bbad618": "setupReclaim()", +"0bbb0c58": "dsec_token_addresses(uint256,uint256)", +"0bbb8442": "_isDAO()", +"0bbba50c": "acceptBidForLegendaryResult(uint256,uint256)", +"0bbc98ba": "getNFTMarketplaceContract()", +"0bbc9d80": "Cat9(address,uint256)", +"0bbcb788": "printBalance()", "0bbd4e38": "defrostReserveAndTeamTokens()", "0bbd501e": "NewEtherPrice(uint256)", "0bbdb469": "getLuckyblockSpend(bytes32)", +"0bbdd444": "ReturnValue(address,address,uint256)", "0bbe0ee3": "transferAllFrom(address,address,uint256[])", +"0bbea0d9": "GetNetRevenue()", +"0bbebba4": "PRESALE_SETTINGS()", "0bbed2b7": "secondsaleopeningTime()", "0bbf2768": "infrastruct(uint256)", "0bbf709a": "validHolder(address)", "0bbf8f38": "setMinBid()", +"0bbfab7c": "mintAndAttemptSwap(address,uint256,uint256)", +"0bbfd8a9": "callstradd()", "0bbfdbec": "setUsdAmount(uint256)", +"0bbfeedd": "price1TWAP(address)", "0bc09cfe": "buy(uint256[6][])", "0bc0c61f": "destroyOwner(address,uint256)", +"0bc0c92a": "totalDollarSupplyAt(uint256)", "0bc1236e": "getTokenAmount(uint256,uint256)", "0bc16f1b": "presell()", "0bc1734c": "addPermissions(address[])", +"0bc1a005": "pendingGOLD(uint256,address)", +"0bc1ad2d": "swapExactTokensToETH(uint256,uint256,uint256,address,address[],bool[],address)", +"0bc1e0fb": "createFolderTransferProof(address,address,address,bytes32)", "0bc217d9": "setCastleSale(uint256,uint256)", "0bc23901": "WalletAddressesSet(address,address,address)", +"0bc24f30": "resetOperator(address)", "0bc2a3b7": "Showercoin()", +"0bc2aad2": "feeThousandthsPercent()", +"0bc2fda5": "LoanRepayed(uint256,address)", "0bc30aa0": "getTicketWinnings(uint256,uint256)", "0bc311ea": "addFound(address)", "0bc32570": "_sendTokenReward(address,uint64)", "0bc32ab6": "tokenToPointBySkcContract(uint256,address,uint256)", "0bc33b22": "addressJenkins()", "0bc3a268": "KelvinToken()", +"0bc3ae82": "allDeposits_(address)", +"0bc3b1c0": "claimLPToken()", "0bc43490": "yesVotes(uint256,address)", "0bc4ec45": "FirstDropToken()", "0bc59a8e": "date15Nov2018()", "0bc5b2c5": "stage_2_tokens_scaled()", "0bc5e51e": "endTimeSale3()", "0bc5f216": "kgtToken()", +"0bc5f5e2": "ExcludedFromTokenUnlocks(address,bool)", +"0bc605ad": "isAllowedToSend(address)", +"0bc67c2b": "leak(uint256,address,uint8,bytes32)", "0bc69912": "createICO(bytes,bytes)", +"0bc6b2f2": "amountOfTokens(address)", "0bc6b708": "placeBetTESTONLY(uint256)", "0bc6b89c": "dailySpent()", "0bc6c96e": "failSafe()", +"0bc6d369": "rati()", +"0bc74ec5": "Solved(address)", "0bc7760c": "crowdsaleSet()", "0bc785df": "ACTToken()", "0bc7fd93": "toTuis(uint256)", +"0bc87268": "coinData(uint16)", +"0bc8852d": "getCdpData(uint256,uint256,address,uint256)", "0bc8982f": "getBQL()", "0bc8b4c2": "getMintRequestUintMap(uint256,int256,string)", "0bc954dc": "addEgg(uint64,uint32,address,uint256)", "0bc9c89c": "removeMessage()", +"0bc9d230": "getCeresBalance()", +"0bca089a": "del(string)", "0bca1704": "setHardcupTrue()", "0bca441b": "BETHERTokenSale(uint256,address)", "0bca5903": "claimMedals(uint16)", "0bcab28a": "verifyReceiverAddress(address,address,address,uint8,bytes32,bytes32)", +"0bcaeb38": "GetTotalStakeAmount_single(uint256)", +"0bcb106a": "addWhiteListedAddresses(address[])", "0bcb8a23": "getBondDivShare(uint256)", "0bcbad90": "WLMTPrice()", "0bcbbd21": "r2()", +"0bcbc9d7": "getTeamAddr(address)", "0bcbe35b": "lastBlock_f19()", +"0bcbe8a7": "tokenBlacklistSwitch(address)", "0bcbfe1c": "withdraw_Eth(uint256)", +"0bcc1f79": "DocCreated(bytes20)", +"0bcc4c97": "Fill(address,address,address,address,uint256,uint256,uint256,uint256,bytes32,bytes,bytes)", +"0bcc7568": "getPackageIDByIndexM(uint256)", +"0bcc8c17": "removeRewardsContract(address)", +"0bccd5e9": "updateDefaultScore(uint8)", +"0bccfdba": "forAirdropv1(address)", "0bcd0694": "getUserCities(address)", +"0bcd07fe": "StoreDistanceHHS(uint256)", "0bcd3b33": "getBytes()", +"0bcd4ebb": "isRegisteredModule(address)", "0bcd87ed": "dashboardAddress()", "0bce62ea": "isPreICOPublicOpened()", +"0bce846a": "g_approvedSender(address,address)", "0bce8cdf": "getContributorInfo(address)", "0bcef54c": "Eticket4Sale(address,address,uint256,uint256,uint256)", +"0bcf5036": "PoolLocator(address)", "0bcf963b": "getDocumentsCount()", +"0bd021fb": "yourStake(address)", +"0bd036d0": "activityAdded(uint256,address,address)", +"0bd05b69": "activateTrading()", +"0bd075a1": "setRewardMultiplier(uint256)", "0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", +"0bd0dba8": "onWithdrawAndDistribute(address,bytes32,uint256,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256)", "0bd11894": "addBuilder(uint256,address)", "0bd12120": "MMCC()", +"0bd16007": "clientMinTokens(address)", "0bd18d7a": "investment(address)", "0bd263ff": "registerPID(address)", "0bd2ae1c": "ERW()", "0bd38767": "testCanClone()", "0bd3ae61": "EARLY_BIRD_SUPPLY()", "0bd3cf7e": "Timebomb()", +"0bd4a73e": "SAI_ADDRESS()", +"0bd4fa58": "playerBlock(address)", +"0bd55c80": "BankrollInvest(uint256)", "0bd58493": "sellMyApple(uint256)", +"0bd59ad3": "getDepositsByWithdrawalAddress(address)", "0bd5b493": "payPostDrawRef(address,address,uint256)", "0bd601df": "setLockEndTime(uint256)", "0bd61e79": "_finalRoundLosersFight()", "0bd62ad5": "FantasySportsCoin()", "0bd64dbf": "BsToken(string,string,uint256,address)", +"0bd672f4": "handOverContract(address)", "0bd6a40f": "setWorkerAdress(address)", "0bd6c769": "Load(address,uint256,uint256)", +"0bd77000": "bidReferrer(uint32,uint256,uint256,uint8,bytes32,bytes32,address)", "0bd7abde": "setMaxWinRate(uint256,uint256)", "0bd7b6b8": "computed_fundraise()", +"0bd7e9c0": "NewGenerator(uint256)", "0bd85158": "setUInt8Value(bytes32,uint8)", "0bd8599e": "countUp()", +"0bd868e1": "ethToDeployer()", +"0bd87a68": "setInsurancePayout(uint8)", "0bd8a1d0": "auctionFinalized()", "0bd8a3eb": "SaleEnded()", +"0bd92b3b": "memberRoles()", "0bd934c3": "UPEXCoin()", "0bd93738": "updateShareTimeGap(uint256)", "0bd9c534": "right43(uint256)", "0bda4dbf": "refundCount()", +"0bda5091": "removeCOO(address)", +"0bda736a": "eleConsumptionPerSec()", "0bdaaaf5": "getAllOperations()", +"0bdab5c7": "_Paused()", "0bdab855": "distributeHNC(address[],uint256,uint256)", +"0bdac74f": "LockStarted(uint256,uint256)", +"0bdb0163": "PurchasedWithFiat(uint256)", +"0bdbec81": "linkRegistry(bytes32)", "0bdc0031": "STARTBLOCKTM()", "0bdc7953": "multiBuy(address[],bytes32[])", +"0bdc85d5": "approveBorrower(address,uint256,address)", "0bdc9c35": "CalculateReward(uint256,uint256,uint256)", +"0bddab0f": "SetOneDayBehind(uint256)", "0bddb83b": "bonusPresale()", "0bdddb73": "stampOut(address,uint256,uint256)", "0bdde107": "balanceOfme()", "0bde1d36": "changeAllowanceToMint(address,address,int256)", +"0bde4266": "getVaultCollAddr(address)", +"0bde6eb7": "burnToToken(address,address,uint256,uint256)", +"0bdf2de5": "ArrayHolders(uint256)", "0bdf3dae": "CryptoRoboticsToken()", "0bdf5300": "TOKEN_ADDRESS()", +"0bdf953f": "stableRateSlope1()", "0be0453b": "StringDemo()", "0be0713d": "gcSupply()", +"0be0875a": "airdropActivation(address,uint256,address,bytes)", +"0be0b6ef": "real(address,uint256,bytes)", "0be0f677": "log(bytes32,string)", +"0be1cbfc": "init(address,address,address,uint256,string)", "0be21ea9": "MAX_TIME_EXPLORE()", "0be23ace": "RealMoney()", +"0be24121": "BuyDeklaSuccessful(uint256,address)", "0be2858e": "multipleTransfer(address[],uint256[])", +"0be2e977": "lockedKeys(uint256)", +"0be2ea76": "getGame(string,uint256)", +"0be441cc": "blockbidAdmin()", "0be48491": "personalMax()", +"0be4bc0d": "getUnlockedRewards()", +"0be51bdb": "swapParticipants(uint256)", +"0be536d4": "cashOutHalf()", "0be5430f": "DroneTokenSale(address,address)", "0be560be": "NarniaUSDT()", +"0be56d34": "getLendingRate()", +"0be5962a": "presaleRatePerEth()", +"0be5967b": "contractList(address)", "0be5ca05": "privatePresaleTokenReservation(address,uint256,uint256)", "0be5efa6": "year2LockAddress()", +"0be66bd1": "overloadedSet(bytes32,uint256)", +"0be67d37": "encodeStakeId(address,uint256,uint256)", "0be6ba2b": "addRestricedAccount(address,uint256)", +"0be6dd87": "approve_775(address,uint256)", "0be702bf": "_v4()", "0be72b6d": "allOfferingQuota()", "0be76f80": "memberData(uint256)", "0be77485": "Unlock(address)", "0be77f56": "log(bytes)", +"0be7ebd7": "getVoteCastersWeight(uint256)", +"0be7ed4f": "recordSubmission(int256,uint32)", +"0be7f9e4": "LogNFTSetNotForSale(uint256,address)", +"0be809ff": "getStakingTimes(address)", "0be80f39": "setComission(uint256)", "0be80fa9": "changeVisitLengths(uint256,uint256,uint256,uint256,uint256,uint256)", "0be8287e": "getJackpotInfo()", +"0be8fffc": "getQueue(uint256)", "0be9189d": "showInvestorVault(address,uint256)", "0be924ef": "tier_rate_4()", "0be96fbd": "MAX_TOKENS_SALE()", "0be9f930": "REL(uint256,string,uint8,string)", +"0bea440d": "stakeTokens(uint256,address)", +"0bea6bd1": "buyFragments(address,uint256,uint256,address)", "0beb90d3": "icoLimit()", +"0bebac86": "pie(address)", "0bebd0f9": "addAddressToGeneration(address,uint256)", +"0bebd5d4": "titanRewardAmount()", +"0bebebda": "setPoolTokenAddr(address)", +"0bec1577": "pixelToApproved(uint256)", "0bec3231": "GalaxyChain()", "0bece492": "setPhaseBonusAddress(address,address)", "0bed63c7": "_isActive(uint256)", "0bee1c3e": "availableICO_w2()", +"0bee3800": "setMaxContributionForRound(uint8,uint256)", +"0bee7a67": "ERROR_FAIL_DECODE()", +"0bee83a1": "addAssetMarketSetting(address,bytes32,uint256)", "0beeb0af": "getValue(address,bytes32,address)", "0beedbd4": "AdoptionRequested(bytes5,uint256,address)", +"0bef0670": "getUserLoa(address)", "0befe82b": "AddBankerPrincipal(uint8,uint256)", "0befeeb0": "lastCreatedGame()", +"0bf00ddc": "withdrawFromKebabPool(uint256)", +"0bf0225b": "KSCTransferToBounty(address,address,address,uint256,uint256,uint256,string)", "0bf05c99": "DraftPlayer(address,uint256)", +"0bf064dc": "secured()", "0bf09985": "openRound(uint256,uint256)", "0bf0e4e4": "myProfit(address)", +"0bf18f85": "deployToken(uint256,address)", "0bf1c747": "destructed()", +"0bf25c91": "lockTKNContractAddress()", "0bf2c50d": "setCFO(address,bytes)", "0bf2ee8d": "addPerson(string)", +"0bf2f52f": "TREASURE_CHEST_CLASSIC()", +"0bf2f915": "metaDecreaseAllowanceHash(uint256,address,uint256,uint256)", "0bf318a3": "finalizeCrowdsale()", "0bf34d54": "CVToken()", "0bf36806": "Bivacoin()", +"0bf37818": "getCoordinates(uint256)", "0bf474a9": "claimDonations(address[2],uint256[7],uint8,bytes32[2])", "0bf5035d": "secondYearEnd()", "0bf51f36": "updateTime(uint64)", @@ -6865,72 +12500,119 @@ "0bf61fd4": "t_Slava()", "0bf63c60": "setBasicCentsPricePer30Days(uint256)", "0bf6898e": "DPSToken(uint256,string,string)", +"0bf6cc08": "vaultBalance()", "0bf6dbfd": "VanityToken(address)", +"0bf73cc7": "addBNBScore(uint256,uint256,address)", "0bf75567": "voteSuperQuorum(uint256,bool)", "0bf757e5": "HopiumToken()", "0bf77989": "debug_coinbaseTxSha(bytes,uint256)", +"0bf79099": "mint(address,uint32,uint32,uint32,uint32)", "0bf7fb57": "getUserMilestone(address)", "0bf82810": "removePartnerAddress(address)", "0bf84797": "RATE_FOR_WEEK1()", "0bf867c2": "Zemana()", +"0bf88f94": "updateAmountA(uint256)", +"0bf8ad00": "forfeitSuspendedSynthsAndWithdraw(uint256)", +"0bf90f61": "blockStart(uint64,uint64)", "0bf9236a": "KillContracts()", +"0bf99bd9": "deployedFundsLength()", +"0bf9aa4c": "getCallData()", "0bf9c50f": "calcNextNBonuses(uint256)", "0bf9fd52": "wasPaid(bytes32)", "0bfa1191": "setPriceStorageInternal(address,uint256)", +"0bfb7059": "getVotingList()", +"0bfb82a1": "getMyEth()", +"0bfbe027": "swapTokenContract(address,address,uint256)", +"0bfc803d": "claim(string,bytes)", "0bfd1271": "confirmErc20TransactionRequest()", "0bfd7b62": "getBonusesAmountAvailable(bytes32,uint256)", +"0bfe16f9": "endTrading(uint256,uint256,uint256)", +"0bfe8b92": "recoverStuck(bytes,uint256,bytes32,bytes)", "0bfefed4": "createUser(address,string,bool,bool,bool)", +"0bff230a": "getCampaignVoteCountData(uint256)", "0bff2ac2": "NewBatch()", "0bffa8b4": "changeMigrationInfoSetter(address)", +"0bffe152": "InitialReportSubmitted(address,address,address,uint256,bool,uint256[],bool)", "0c0075a3": "getBallotOptions()", "0c0078e8": "RESERVED_TOKENS_ANGLE()", +"0c00e0ba": "retreiveWallet()", +"0c0102d0": "_totalStaked()", "0c012834": "ARS()", "0c0174a4": "escapeRequest(uint256)", "0c01b2ae": "setConfiguration(string,string,uint256,address[],uint256)", "0c02159f": "HavEtherToken(uint256,string,uint8,string)", "0c022933": "highTimeBonusValue()", +"0c02e130": "oraclePayment()", "0c031f45": "TokenBuy(address,uint256)", "0c03348d": "getIntel(uint256)", +"0c034968": "mockFunctionRevertsReason()", "0c0399a4": "iteration()", "0c03f24a": "parseDate(string)", "0c03fbd7": "getNumPassingTokens(address,uint256)", +"0c051135": "chiToken()", +"0c0512e9": "proposalCounter()", +"0c056a31": "getRewardRates()", +"0c058d8f": "_burnSynthsForLiquidation(address,address,uint256,uint256,uint256)", +"0c05b3c5": "getHolder()", "0c0615a7": "evaluate(address,string,string)", +"0c066084": "setCardVisibility(uint256,bool)", "0c0662a8": "getLastWithdrawal()", "0c06c3ee": "viewHouseFee()", "0c06fda1": "AVINCOIN()", "0c07fa56": "ICO_END()", +"0c083da5": "getAllEth(uint256)", +"0c086463": "curIteration()", "0c087782": "PXLProperty()", "0c087bc5": "stage1Start()", "0c08bf88": "terminate()", +"0c08e549": "adminToo()", "0c08ec49": "importTokensToSidechain(address,address,uint256,bytes32)", "0c099133": "ERC20TokenFactory()", "0c0a5c55": "cancelAuth(address,address)", +"0c0a769b": "supply(address,address,uint256)", "0c0a7a68": "Stars()", +"0c0aa027": "FOUNDERS_RESERVE()", "0c0ad299": "removeProject(address)", +"0c0b6b00": "setBountyInvalidity(uint256,bool)", "0c0b86ca": "currentAuctionId()", +"0c0b92b4": "rateAfterBonus()", +"0c0bddf5": "tryYourLuck(uint8)", "0c0bea5c": "FinalTokenToken()", "0c0c13c8": "query2_fnc()", +"0c0c91a2": "isWalletLocked(address)", "0c0cde7c": "ZIBToken(uint256,string,string)", +"0c0d2696": "userNormalNodes(address)", "0c0d6caa": "newDrawer(address)", "0c0e5f0d": "calculateGrapeBuy(uint256,uint256)", "0c0e6dea": "publicAllocationEnabled()", "0c0ef2b0": "isGameActive()", +"0c0f261e": "authQuotaOf(address)", +"0c0f6b71": "asInteroperable(uint256)", +"0c102cf5": "convertEthToExactToken(address,uint256,uint256)", "0c103837": "votedHarvest(address)", +"0c1047b3": "_transferETHToThisContractByValue()", "0c112598": "fun(bytes32)", "0c119354": "rateMain()", "0c11dedd": "pay(address)", "0c11f32e": "milestoneShares(uint256)", +"0c12b55f": "_transferToStaking(address,uint256)", "0c12fe41": "redeemResearchAndDevelopmentBal()", "0c131629": "RDFToken()", "0c14080b": "bonusSale()", +"0c14a4a0": "statistics(address)", "0c15b963": "againAttack(address,uint256)", "0c15f601": "meltTokens(address,uint256)", "0c16683e": "SCLToken()", "0c1688f7": "IstriumToken(address,address)", +"0c16e935": "lastUpdateTimeSpan()", "0c1754f0": "BitcoinXToken()", +"0c17b2a7": "addConnectors(string[],address[])", "0c17d023": "dungeonTokenContract()", "0c17d42c": "setAlpha(uint256)", "0c1838e9": "importAmountForAddresses(uint256[],address[])", +"0c18a30d": "ecosystemFunds()", +"0c18c9ac": "paids(address)", +"0c18d4ce": "startBlockTime()", "0c18e1c9": "balanceInSpecificTranche(uint256)", "0c1925f3": "stock(string,string,uint256,string)", "0c192fe5": "RBCToken()", @@ -6945,50 +12627,103 @@ "0c1c3c14": "registerNameXID(string)", "0c1c972a": "startPublicSale()", "0c1ca1ba": "withdrawOwnerEth()", +"0c1cc3d5": "gaftNFTBalance(address)", "0c1cd8cd": "endPvtSale()", "0c1d4af7": "LogTokenAssigned(address,address)", +"0c1d7419": "totalBurntSFR()", +"0c1d7cb6": "crowdSaleRoundThreeLimit()", "0c1db532": "getPI_edit_28()", +"0c1dbe63": "highestBidderFromRound(uint256)", "0c1e3fd4": "submitWithdrawTransaction(address,uint256,bytes)", "0c1e3fea": "previousState()", +"0c1e4663": "getTotalBurnPoolReward()", "0c1e517f": "bytes16ToStr(bytes16,bytes16,uint8,uint8)", +"0c1ea85c": "marketSummariesForAssets(bytes32[])", +"0c1eef4a": "createPolicyManager()", +"0c1f1c56": "MultiSigChanged(address)", "0c1f679f": "WithdrawalTokensAfterDeadLine()", +"0c1f9b3c": "createCryptoSharesContract(string,string,string,uint256,uint256)", +"0c1fa0d4": "LoanCompletedWithFinalPortion(uint256,uint256)", "0c1fad51": "setSeedSourceA(address)", "0c1fe4b1": "showTransaction()", +"0c1feb40": "returnToERC20(address,uint256,address)", +"0c20027e": "NewDemoc(bytes32)", +"0c2002a4": "_decode_sol_bytes16(uint256,bytes)", +"0c202651": "_amountRaisedTier1()", +"0c202741": "createGroupMember(uint256,address)", "0c204dbc": "getF()", "0c2073e4": "LemonSelfDrop2()", +"0c20766a": "changeSwitchContractAddress(address)", +"0c219f15": "collg()", "0c21a2f1": "nextGameMinBlock()", +"0c21e6e3": "claimedFees()", "0c21e754": "setLLV_edit_9(string)", +"0c22a39f": "getHolder(string)", +"0c22acbd": "ConfirmTransaction(uint256)", +"0c235d96": "searchBestRate(address,address,uint256,bool)", +"0c237288": "balanceOfCouponsV2(address,uint256)", "0c237dde": "servusTokensAllocated()", "0c23cf4b": "buyCardXid(uint256,uint256)", +"0c241466": "reserveMap(uint256)", "0c241b2d": "generateSeedA()", +"0c247387": "swapExactAmountIn(address,address,uint256,address,uint256,address,uint256)", "0c250dcd": "logUnsigned(bytes32)", +"0c25333e": "getGameAdmin()", +"0c254d63": "makeDeposit(address,uint256,uint256,bool)", "0c255c94": "max256(uint256,uint256)", +"0c257454": "_fundpool()", +"0c259388": "emitEvent(string,bytes,bytes,bytes)", "0c25c6c1": "getBonusUsersCount()", +"0c25e0e0": "set_OneSplitInterfaceAddress(address)", +"0c25e87a": "yourStakedUNIAPP(address)", "0c26a816": "pvpMaxIncentiveCut()", "0c26ac30": "closeEarlyAdopters()", "0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", "0c270f44": "recleared(address)", "0c2737d2": "incrementCounters(uint256,uint256)", "0c27677a": "getCRaddress()", +"0c278a8d": "govSetWhitelistBaseAmt(uint256)", +"0c27ca77": "ApproveData(bytes)", +"0c289f8d": "updateUser(address,string,string,uint256)", +"0c28d13e": "borrow(uint256,address,uint256)", "0c28e291": "Prout()", +"0c294ae8": "pool4Amount()", "0c294f51": "getAllCounts()", "0c29e589": "createMyEntity(uint256,bytes32,bool,uint256,uint256)", +"0c2a215d": "participantClaims(address)", "0c2a48e2": "realitycheck()", +"0c2a7dd4": "updateETHV()", +"0c2a9eba": "hasOpenedAnyEnvelope(address)", "0c2ab324": "SAN()", +"0c2abd35": "feeSystem()", "0c2ad9e3": "battle(uint64,uint64)", "0c2b14fe": "buyCostume(uint256,uint256)", "0c2b3eda": "TeacherCoin()", +"0c2b4752": "selfLobbyExit(uint256,uint256)", +"0c2b4b35": "addToWhiteListEvent(address)", "0c2b4b85": "addGames(bytes32[],bytes32[])", +"0c2b5deb": "Regulator_Registeration(address)", "0c2b663c": "SDR22(uint256,string,string)", +"0c2b8b59": "lpWeekAmount()", "0c2bc34d": "indexOf(uint256[],uint256,bool)", +"0c2c0476": "_qualifierToken()", "0c2c5add": "contribute(address,uint256,uint8,bytes32,bytes32)", "0c2c81ed": "platformFundingSupply()", "0c2cb820": "setDebug(bool)", +"0c2cd9fa": "getBasicCount()", "0c2d71b1": "docStore()", +"0c2df5de": "WAIFUS_PROVENANCE()", +"0c2e1b6e": "ICO_tokens()", "0c2e4bf4": "icoStartAt()", "0c2ec050": "isCurrentRoundFinishing()", +"0c2ecfb6": "marketTerms(uint256)", "0c2edc1c": "setExchangeAddresss(address,address)", +"0c2eee7a": "approve_215(address,uint256)", "0c2f6f48": "crowdSalePeriodInit()", +"0c2fc197": "removeFromTransferFromBlacklist(address)", +"0c2fec92": "challengeRequest(uint256,string)", +"0c30ccf9": "safeTransferFrom(uint256,address,address,address,uint256)", +"0c3129fe": "claimStdTokens(uint64,address,address)", "0c31309e": "getPrivatePurchaserStatus(address)", "0c316d6a": "DTOToken(address)", "0c319d80": "BidiumToken(address,address,address,address)", @@ -6996,30 +12731,52 @@ "0c326330": "_isICO()", "0c3304d1": "mintMAN()", "0c333556": "Vault(address[],address,address[],address[])", +"0c336306": "isSatellitePool(address)", +"0c33c522": "jobList(uint256)", "0c340a24": "governor()", +"0c34490d": "weaponClaimFee()", "0c345385": "RenaS()", "0c34644c": "getInstructor(address,address)", "0c3499ca": "_setSkills(address,uint256,uint256,uint256)", "0c34f8a5": "addAddressesToWhitelist(bool,address[])", +"0c358e65": "operatorExists(address)", +"0c35a776": "Unlock(address,bytes32,uint256)", "0c367f63": "DAEXToken(address)", "0c36add8": "issue(uint256,uint256,address,address,uint256,address)", +"0c36edb9": "getAsksByUserDesc(address)", +"0c36efa0": "onDestroyTokens(address,address,uint256)", "0c37348d": "buyPreSaleTokens(address,uint256,uint256,string)", "0c376ee6": "setPvtTokens(uint256)", +"0c379520": "seeAnimalDna(uint256)", +"0c37a2aa": "getReadyForVAX(address)", +"0c37c996": "CORETokenAddress()", "0c38708b": "get_all_project_information(uint256)", +"0c3876c6": "buyPresale1(string,string,uint256)", "0c3890b7": "addThing(string,string,string,bytes32)", +"0c3894bb": "cleanMapToken(address,address)", +"0c38d0d3": "l2_swap_numbers(string,int256,uint256,address,uint256)", "0c3980ef": "NextRewardHalving()", "0c3a9658": "MTUV1()", +"0c3b2b8e": "nextStakingPool()", +"0c3b37ac": "returnLiquidity(address[])", "0c3b3b70": "Unihorns(uint256,string,string)", "0c3b7b96": "minTokensToCreate()", +"0c3b823f": "IllegalReentrancyError()", +"0c3bdc65": "liquidationRoute(uint256)", +"0c3be38d": "defaultCapSetter()", "0c3c450e": "icoHashedPass()", +"0c3c55cf": "minETHExchange()", "0c3c92a3": "finishHardcap()", +"0c3ce24c": "__WhitelistUpgradeable_init()", "0c3cebfa": "issueTo(bytes32,uint256)", "0c3d5157": "contractStartTime()", +"0c3daf07": "validatorNum(address)", "0c3dbf43": "removeMarket()", "0c3dfa0e": "SLoader()", "0c3e2d2d": "getTotalFundsRaised()", "0c3e3c58": "getAdministerList()", "0c3e4004": "GraceCoin()", +"0c3e4b54": "add_liquidity(uint256[2],uint256,address)", "0c3e564a": "airDeliverMulti(address[],uint256)", "0c3f08c6": "newGame(uint8,string,string,bytes32,uint256)", "0c3f0cac": "getLastPlayer(string)", @@ -7027,20 +12784,36 @@ "0c3f64bf": "isDev(address)", "0c3f6acf": "currentState()", "0c402ed8": "confirmMinting(uint256)", +"0c415ca9": "safeInfo(uint256)", +"0c4192cf": "polkaCitizens()", "0c424284": "setWhitelistStatus(address,bool)", +"0c42492e": "Creation(address,uint256,uint256)", +"0c42b264": "isRandomStored()", +"0c42e8df": "priceBooks(address,address)", +"0c430da4": "changeMedianV(uint256)", "0c4326a0": "getMajorMinorPatch(bytes32)", "0c432c8d": "calcJadeReceived(uint256,uint256)", "0c432f1f": "handleLastRef(address)", +"0c433c1c": "modifySlogan(uint256,string)", "0c433edf": "receiptUsed(address,address,uint256)", "0c437aa7": "setMandateInBlocks(uint256)", +"0c4395b9": "win(uint8,uint8)", +"0c447941": "hashRedemptionIntent(bytes32,address,uint256,address,uint256,uint256)", "0c44ba40": "getMyTicketAddresses(address)", +"0c44c4b1": "alterarEstadoCertificado(bytes32)", +"0c44e15d": "dang_ky_vdv_Cau_1(string,uint256,uint256,uint256)", +"0c4517a0": "createOptions(address,uint256[])", "0c45361f": "creators_count()", "0c45453c": "_feed(uint256,bytes32)", "0c45e8d7": "roomsAvailable(string,uint256[])", +"0c462a36": "_createBlock()", "0c4641d3": "BJCToken()", +"0c465307": "lambertPos3(uint256)", "0c46fc92": "deliverLastMilestone(bytes32)", +"0c4863b5": "setEventsNonce(uint256)", "0c486a96": "requestPayment(uint256,uint256)", "0c486c00": "CNRToken()", +"0c48ae99": "sendHash(string,string)", "0c48ae9e": "createAdSlot(string,uint256,uint256,uint256[])", "0c48c6bd": "getBonusMultiplierAt(uint256)", "0c48e582": "updateVendor(address,address)", @@ -7051,26 +12824,52 @@ "0c4a5153": "commitStageActive(uint256)", "0c4a8d94": "STAGE_3_FINISH()", "0c4a9869": "unregisterContract(bytes32)", +"0c4a9e49": "sashimiswapRouter()", "0c4ada17": "cards_gold(uint256)", "0c4ae1ca": "cancelBooking(address,address)", +"0c4b56bf": "isApprovedSeller(address)", "0c4bfa94": "left13(uint256)", "0c4c4285": "setHash(bytes32)", +"0c4d01c5": "aggregatedNormalizedStake()", "0c4d6bdf": "EarlyBirdsFinalized(uint256)", "0c4dd1d9": "totalUsdAmount()", +"0c4e167d": "marginly()", +"0c4eafbc": "ContractRemoved(string)", +"0c4ebcf5": "lastTradingFeeDistributionDefi()", "0c4ecab4": "confirmations(bytes32,address)", +"0c4f5d81": "CommunityRoundStarted(uint256)", "0c4f65bd": "getOwnerAddress()", "0c4f8f6f": "regularTransfer(bytes32,bytes32)", +"0c4f95ae": "univ2Pair()", +"0c50150b": "who(uint256)", +"0c506e96": "withdrawStuckToken(address,uint256)", "0c50b116": "BTHPoint()", "0c51015d": "adjustTap(uint256)", "0c51171d": "getTokensSold(address,bytes32)", +"0c5128d4": "RazInstanceInformation(uint256,uint256)", "0c516283": "freezeHybridizationsCount(uint256)", +"0c5176fa": "holdFarming(uint256)", +"0c51b88f": "stake(address,uint256,uint256)", +"0c51dde4": "notifyRewardAmount()", +"0c51ff04": "getPartnerInfo()", "0c5241fa": "LOL6()", +"0c524973": "baeContract()", "0c525571": "arraySum(uint16[])", +"0c526103": "TokenBurned(uint256)", "0c52780d": "unCertifyDelegate(address)", "0c52bb4c": "auditorsList(uint256)", +"0c52c1eb": "lay3doichaynhieunhat(uint256)", +"0c52fa67": "stackSoFar()", +"0c5386ee": "setUnstakingTaxRate(uint256)", +"0c539fed": "drawDailypool()", +"0c53c51c": "executeMetaTransaction(address,bytes,bytes32,bytes32,uint8)", +"0c5467be": "userTotalStakes(address)", "0c547097": "goldenTicketOwner()", "0c549dd9": "getCET6ByAddr(address)", +"0c54c3f5": "getPayoutDescription(uint64,uint64)", +"0c54c67d": "appendExchange(address,bytes32,uint256,bytes32,uint256,uint256)", "0c54ce44": "ProofOfRipple()", +"0c55309c": "CRET()", "0c5532bf": "singleValueAirdrop(address,address,address[],uint256)", "0c55699c": "x()", "0c5589b8": "DecreaseWithdrawalAmount(uint256)", @@ -7079,25 +12878,44 @@ "0c55d9a4": "confirmStaking()", "0c55f818": "CTU_ADDRESS()", "0c560c64": "USD(uint256)", +"0c56ae3b": "stakingPool()", +"0c57133f": "isTimelocker(address)", +"0c57a57d": "totalMdxTokens()", +"0c57a5d4": "LogIncome(address,uint256,string)", +"0c57af6c": "addLiquidityETHOnly(address,bool)", "0c58062b": "teamLockPeriodInSec()", "0c584803": "SGTMock(address)", +"0c586312": "prevTimestampMap(bytes32)", "0c58bcb8": "EthLendToken(address,address,address)", "0c58e23c": "ZClassicGold()", +"0c598220": "registerPredicate(bytes32,address)", "0c59b556": "viewCoinsKarmaBySymbol(string)", "0c59c570": "CashTron()", +"0c59dccc": "addAllowCallers(address)", +"0c5a212c": "maxLandFree()", "0c5a534e": "allowBuying()", "0c5a97a6": "getProviderName(uint256)", +"0c5aed57": "isVaultActive(address)", "0c5c2ca3": "getIndexName(bytes)", +"0c5c9fa8": "flashloan(address,uint256,bytes)", "0c5ce593": "open(address,bytes32,uint256,uint256)", +"0c5d18b2": "OwnershipOfferCreatedEvent(address,address)", +"0c5d8b94": "getMaxDeposit(address)", "0c5d919d": "totalsuplly()", +"0c5df13d": "pendingNATIVE(uint256,address)", "0c5e3f11": "nestedFirstManyToSome(uint256,uint256)", "0c5ebb1a": "userForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", "0c5ed9d5": "REB()", +"0c5f367a": "pendingBBNO(uint256,address)", "0c5f9a60": "allocationFee(bytes32)", "0c5fd414": "preOrder(address,address,address,address,bytes32,uint256,uint256,uint256)", "0c5fd4b2": "minttoken(address,uint256)", +"0c601c2c": "get_dy(int128,int128,uint256,address)", "0c60223e": "withdrawAuctionBalance(address)", +"0c611244": "LogDiscountUpdated(uint256,uint256,address)", +"0c611a6a": "addToCategorie1(address)", "0c61257e": "WartegToken()", +"0c615ee9": "setTradingFeePercent(uint256)", "0c620494": "changeAllowTransferWallet(address)", "0c62b816": "minableSupply()", "0c62bfbb": "_calcNextRate()", @@ -7105,186 +12923,330 @@ "0c646fbd": "get_entity_count()", "0c64a739": "price_exponent()", "0c64a7f2": "remainingTime(uint256)", +"0c6577bd": "setCRP(address)", "0c657eb0": "bankroll()", "0c65829b": "_setSkills(address,uint256,uint256[],uint256[])", +"0c65d08c": "setCourse(string,uint256,string)", "0c65e229": "startICOPhaseThree()", +"0c66107a": "setPriceDiscount(uint256,uint256)", "0c662943": "_lockup(address,uint256,uint256)", "0c66adf8": "getCurrentRoundInfo(uint256)", +"0c66c088": "getHiRiskApyForBalance(address,uint256)", +"0c66d1be": "log(bool,address,address,uint256)", "0c68194f": "getCourseIdOfStudent(address)", +"0c68987d": "downForecastPrice(uint256,uint256)", "0c68a104": "fundingMaxInEth()", "0c68ba21": "isGuardian(address)", +"0c68ed79": "_decode_sol_bytes30(uint256,bytes)", "0c68f917": "cancelOfferingProposal(address,uint256)", "0c693110": "getVoted(address,uint256)", "0c6940ea": "addMeToAllGames()", +"0c697df0": "claimedsubscribers(address)", "0c69b189": "claimCrystal()", "0c6a3161": "RESERVE_ADDRESS()", +"0c6a475d": "getDepositByAddress(address,uint256)", +"0c6a595a": "totalSeries()", "0c6a5be4": "Arexium(uint256,string,uint8,string)", "0c6a62dd": "updateCurator(address)", "0c6b1324": "Etherboard()", +"0c6b3b1d": "claimBirdPlus(address[],address[],bool,bool)", +"0c6b6408": "actualizarPorcentajeHeredero(address,int256)", +"0c6b6737": "sellCount()", +"0c6b8705": "pId()", "0c6bfdd0": "openTheRabbitHole()", +"0c6c3856": "uniRewardAddresses(address)", "0c6cbf92": "lastPayOut()", "0c6cd73a": "issueCard(uint256,uint256,uint256)", "0c6d1efb": "releaseEachTokens()", +"0c6d70df": "presaleEndAndCreateLiquidity(address)", +"0c6d7489": "REI09()", +"0c6da19f": "testLog(address,uint256)", +"0c6dd9fd": "transferSuperAdmin(address)", "0c6ddc0d": "getUserAllowance(address)", "0c6de527": "addToBonusSeed()", "0c6df351": "doBondBonusTransfer(address,address)", "0c6e29e3": "subscribeToPool()", +"0c6f0e5d": "customCollateralAddress()", +"0c6f9ab0": "deFiat_Gov(address)", "0c6fc9b2": "processTakerOrder(uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"0c6fd498": "updateStake(address,address,uint256)", "0c6fe674": "getPresaleTotal(uint256)", "0c700183": "listGlobalAuditDocuments(uint256,bool)", "0c7013c1": "send(address,address[],address,uint256[])", +"0c7013ca": "is_successful(int256)", +"0c706e0f": "_updateEmployeeAccountingBasedOnPaidSalary(uint256,uint256)", "0c70f055": "getRandomRarity(uint32,uint256)", "0c71614c": "divsforall()", "0c717036": "colourID(uint8,uint8,uint8)", "0c71b48c": "BTCTransactions(bytes16)", +"0c71bbca": "depositsRoot(uint32)", +"0c71cd23": "rateAndInvalid(bytes32)", +"0c727da4": "setMulti(uint256,string[],string[])", +"0c72a835": "investorListed(address)", "0c72bf39": "ArtToujourToken()", "0c72fe56": "_payBidAllocationFee(bytes32)", +"0c730584": "gulper()", "0c736e04": "refundForValidPartners(uint256)", "0c73a392": "getLogSize()", +"0c73e51f": "depositTRC10(uint64,uint64)", "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)", +"0c75a30f": "slatevote(uint256,uint256)", +"0c75d575": "returnTokenSupply()", +"0c76218a": "getPrincipleToken()", "0c76316d": "withdrawPot()", "0c763fef": "showContractMsgSender(address)", +"0c76982c": "view_portfolio_mix_value()", +"0c76db95": "withP(uint256)", "0c77a697": "claimFounders()", "0c77b44e": "setLedger(address,address)", +"0c77db80": "ignored()", +"0c78a4f8": "stakeDeposit(address,uint256)", "0c790369": "maxMessageChars()", "0c798c81": "SCCToken(address,address)", +"0c799114": "flashloan(string,address,address,uint256)", "0c79af3d": "witrhdraw(uint256)", +"0c79b4d2": "_transferAndTopUp(address,uint256,uint256)", "0c79e3e6": "setCrydrStorage(address)", "0c7ac7b6": "arbitratorExtraData()", "0c7b5616": "Time_Start_Crowdsale()", +"0c7b7fe0": "husbandName()", "0c7befb2": "_tokenLayersExist(uint256)", "0c7bf731": "pendingRemain()", +"0c7c1c84": "ref_withdraw()", +"0c7c6f32": "EscrowAccepted(uint8)", "0c7ca61e": "ArrAccountIsFrozenByDate(uint256)", "0c7caded": "destroyMe()", +"0c7d1782": "getdTokenDetails(bytes32)", +"0c7d5cd8": "reserveRatio()", +"0c7d6763": "farmingDuration()", "0c7d8c20": "_register(bytes32,address)", +"0c7de4e9": "CORE_REVISION()", "0c7de59d": "edit(address,bytes,bool)", "0c7e30b7": "getUsdCentsFromWei(uint256)", "0c7eca6e": "setCurs(uint8)", "0c7ef39b": "HUBTToken()", +"0c7ef932": "Claim(address)", "0c7f076e": "advisoryReserveTokensDistributed()", "0c7f27ba": "COE()", +"0c7fa420": "returnINJ()", +"0c7fa6e0": "liquidateTokens(address,address,uint256)", +"0c8001f6": "_deflationFeeTotal()", "0c8004b5": "buyTokens_Address(address,uint256,bytes8)", +"0c80447a": "scheduleUpgrade(address)", +"0c8066bc": "balanceOfBase(address)", +"0c80d691": "getRealBalance(address)", "0c80d6dd": "view_last_result(address,address)", "0c8114d3": "_forwardFunds(address,uint256)", "0c8135a7": "getTeamOwner(uint256)", +"0c81d511": "isDepositedTokenSale()", +"0c8207e0": "setOperationsContract(address)", "0c8209b6": "manualWithdrawEtherAll()", "0c823abe": "importedTokens()", "0c828c42": "getTxIndex(uint256)", +"0c829084": "GameStarted(uint256,address,uint256)", +"0c829315": "stakePermillage(address)", "0c82b942": "whitelistRemove(address[])", +"0c82ed84": "verifyLinkPrivateKey(address,address,address,uint8,bytes32,bytes32)", "0c832ef0": "restoreOwner()", "0c8367fb": "HALAL()", "0c83700a": "divCutPool()", +"0c8471df": "_getTotalRewardsToBeAccredited()", "0c8496cc": "getReturnByPath(address[],uint256)", +"0c84b3bc": "PynthToInversePynth(bytes32)", +"0c851e3c": "pool1userList(uint256)", +"0c857805": "recentBlocks()", "0c857b25": "getLoveLock(uint64)", "0c85b18c": "SetBuildingData(address,uint256,uint256,uint256,uint256,uint256)", "0c85feea": "matchOrders(uint64,uint64)", "0c861d4b": "Aeron()", +"0c863f73": "teamtokens_mint(address,uint256)", +"0c8640a4": "setUserRewardInfo(address,uint256,uint256,uint256)", +"0c864562": "removeRewardSupply(uint256)", +"0c865e7c": "tokenDetailsOfOwnerByIndex(address,uint256,uint256)", +"0c869ebe": "activeBonus()", +"0c870f91": "proxyImplementation()", "0c87355e": "BANCOR_CONVERTER_UPGRADER()", "0c875c8d": "Withdrawn(uint256,uint256)", +"0c886370": "pendingCid(uint256,address)", +"0c886389": "withdrawBidForLegendaryResult(uint256)", +"0c88b7f1": "usersswap(uint256)", +"0c88cff3": "FundMe(address,uint256)", "0c898482": "getShare(address,address)", "0c89a0df": "transferTokens(address)", +"0c89a0f0": "lastOracleTime()", "0c89b766": "randomSource()", "0c89ef35": "hasEnoughAllowance(address,address,uint256)", "0c89ef67": "PXMCCoin(uint256,string,uint8,string)", "0c8a611f": "getInvestorsETH(address)", "0c8ac6f7": "transferAnyTokens(address,address,uint256)", +"0c8ac847": "setNFT(uint256,uint256,uint256)", +"0c8b28c3": "vaultETH()", "0c8b29ae": "hodlTillBlock()", +"0c8b2d58": "taxFreeReceiver(address,bool)", "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()", +"0c8c920b": "setMinTopupBps(uint256)", +"0c8cae50": "ponziFriendToLevel3Ref(uint256)", "0c8dfeda": "maxLinkedWalletCount()", "0c8e3166": "assignAtheniansToBattle(uint256)", "0c8e9977": "whitelist_pool(address,address,uint256)", +"0c8f0adf": "getApproved(address,address,string)", "0c8f167e": "TOKENS_SOLD()", +"0c8f35ba": "numberofholders()", "0c8f78fb": "setGasAmount(uint256)", "0c9066dd": "getZodiac(uint256)", "0c90da51": "End2()", "0c915c74": "releaseWithStage(address,address)", +"0c9188ad": "lastCost()", "0c91af81": "IGTUSD()", +"0c91b691": "calk(uint256)", "0c91e624": "Winner(string,address)", "0c91f2d0": "rewardForWork(address,address,uint256,bool)", +"0c9229ca": "totalTokensOutstanding()", +"0c928bc2": "exchangeEtherForSynthsAtRate(uint256)", +"0c928f05": "synthsReceivedForEther(uint256)", "0c92b17b": "checkBurnTokens()", +"0c92eb56": "WOKrtAirdropWOK(uint256,uint256,uint256,uint256)", +"0c92ff83": "getPoolAllocPoints(uint256)", +"0c930a4b": "bonusBalances(address)", +"0c930fb8": "getTeamReward(uint256)", "0c932e77": "ritualFee()", +"0c933ab3": "revokeGameMinter(address)", "0c938c3f": "changeSubscriptionFee(uint256)", "0c939ae1": "KYROInv()", +"0c93b9ea": "Unlock(uint256,address,uint256,uint256)", "0c93c981": "playBatch(uint256[],uint256[])", +"0c94cd2a": "chainMediators(uint256)", +"0c954d16": "admincontr()", +"0c961dc4": "addAccountsforCompensation()", "0c96526b": "getRateUsd()", "0c96c4ea": "triggerRelease()", "0c97200a": "getLoansCount()", +"0c972b09": "rewardedBoostsOf(uint256)", "0c975447": "lowBonusRate()", "0c976ace": "existenceApproveTest(address)", +"0c9780d1": "quote(address,address,uint256,uint8)", "0c97bb77": "curConfig()", +"0c97fb8a": "getBtcxTmax()", "0c98048d": "transferFromAdmin(address,uint256)", "0c981d58": "closeGame(address)", +"0c9871bc": "getAvailableRewards(uint256)", "0c987501": "EtheraffleFreeLOT(address,uint256)", "0c990004": "createToken(uint256,address,bytes32,uint256,uint256,bytes32)", +"0c994cb3": "boolAllowPlayer()", +"0c999929": "newAddressWaitPeriod()", +"0c99b26e": "_totalActiveBalanceAt(uint64)", "0c99d807": "_isValidBlock(uint8)", +"0c9a0c78": "disbursePercentX100()", +"0c9a49f0": "level1Holding_(address)", "0c9a6c24": "getUserCoinMarketValue(uint16,uint256)", "0c9b016c": "expItemClass()", "0c9b5777": "Erc20()", +"0c9ba803": "mbasToken()", "0c9bb7d2": "denyByPassword(bytes8,bytes)", "0c9bc2c0": "calculateNonVestedTokens(uint256,uint256,uint256,uint256,uint256)", "0c9be46d": "setCharityAddress(address)", "0c9c1c58": "setAltFundAddress(address)", +"0c9c6301": "maxSwingMantissa()", +"0c9c81a1": "setBaseBorrowRate(uint256)", +"0c9cbf0e": "claimed(address,address)", "0c9cbfee": "moveProduct(address,address,uint256)", +"0c9cd9c1": "log(uint256,address,uint256,uint256)", +"0c9d5224": "filter(uint256)", "0c9daf45": "vcxWallet()", "0c9dc2b8": "checkEthFundDepositAddress()", "0c9dd381": "RewardTransfered(uint256,address,uint256,uint256,uint256)", +"0c9e2a1e": "MIN_VALIDATOR_AMOUNT()", +"0c9effd0": "getDepositManagerAddress()", "0c9f6ed8": "ZEXCoin()", "0c9f88c0": "Zignal()", "0c9f980f": "isCSO(address)", "0c9fcec9": "setApproval(address,address,uint256)", "0c9fd581": "assertTrue(bool)", +"0c9fe527": "tokenByIdFull(uint256)", "0c9fe5eb": "PIXEL_COUNT()", "0c9ff620": "listINF()", "0ca09e1e": "XoudCoin()", +"0ca0aa79": "string2()", +"0ca18438": "lockedAddressesAfterITO(address)", "0ca1988b": "getnum(address)", "0ca1c5c9": "getTotalMinted()", +"0ca29be7": "updateClaimableAmount(uint256)", "0ca2bda2": "isAllowedTransferDuringICO()", "0ca2f2fd": "MultiBonusCrowdsaleMock()", "0ca35682": "recover(uint256)", "0ca35c22": "setScouponTransferCost(uint256)", "0ca36263": "exit(bytes32)", +"0ca3a075": "immigrate()", "0ca40865": "capRound2()", "0ca413a4": "getDateRanges()", "0ca435a6": "grabBooty()", +"0ca44eaf": "SetWhitelister(address)", "0ca4f838": "BetCommunity()", +"0ca556ea": "setLinkOracle(address)", +"0ca59801": "PriceUpdated(bytes32,string)", "0ca5bdb4": "novaBurn()", +"0ca5c504": "buy(string,uint256)", +"0ca5cace": "setdripRate(uint32)", "0ca5f72f": "rewardPercentageDecimals()", +"0ca60d55": "mintCard(string,string,address)", +"0ca60f86": "failedAuctionWithdrawComponents(uint256)", "0ca621a8": "updateSplitandEmit()", +"0ca69ffa": "ConcludeCrowdsale()", "0ca6afa7": "EtfToken()", +"0ca6b89d": "stakeForGoldenNFT()", "0ca6d310": "setNamePiture(uint256,string)", +"0ca6de03": "MIN_UNSTAKE()", "0ca72e82": "testGetLawyerCount()", "0ca7395f": "returnFund(address,uint256)", +"0ca75044": "getLibraryVersion()", "0ca78923": "updateConnector(address,uint32,bool,uint256)", +"0ca7e7b0": "setAssetConverterOnAcoPool(address[],address[])", "0ca8fe1e": "burnCoins()", "0ca9183c": "icoFundingRatePredictionBonusInPercentage()", +"0ca9462d": "gamefee()", +"0ca957c6": "vatNumber()", +"0ca95e2e": "TradingLock()", "0ca97903": "emergency(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "0ca9897c": "citePaper(address)", "0ca99ca8": "hardCapInWei()", "0ca9c14e": "PryvCn()", +"0ca9dcca": "transferFrom721(address,address,address,uint256)", "0caa1d84": "isUserGranted(address,string)", "0caa5d91": "UserDestroy(address,address)", "0caa8605": "getStage3End()", "0caaa284": "PresaleClosed(uint256,uint256)", "0caab83a": "poolBounty()", +"0caae7e7": "nerdBalance()", "0cab068c": "isVestingRevoked()", +"0cab2070": "unsetOracles(address[])", +"0cab37d3": "HL_WEAPON()", +"0cac088b": "MAX_MATCHES()", +"0cac22a4": "mediate(uint256,address,string)", +"0cac4e60": "tokensCurrent()", "0cac54ed": "claimTransfer(address,address)", "0cacbf21": "getSponsorshipsSortedByAmount(address,uint256)", +"0cadb5e3": "FOUNDING_FATHER()", +"0cadb9b2": "_setIdleRate(uint256)", "0cadc5b3": "deliverBonus()", +"0cae0442": "buyReserveAndTransfer(uint256)", "0cae3cbb": "checkStageCondition()", "0caeb350": "upgradeValue(uint256)", "0caee2ca": "calculatePayout(uint256,uint256,uint256)", "0caf10b2": "GreenEnergy()", +"0caf4121": "callEmergencyShutdown(address)", +"0caf7ebf": "DURATION_CALC_LOOPS(uint256)", "0caf9d39": "testFailTooManyMembers()", +"0cafa7f2": "issuerHash()", "0cafabd8": "getTPrice()", "0cafef9c": "Clen(uint256,string,uint8,string)", "0cb08716": "airdropDynamic(address[],uint256[])", @@ -7292,11 +13254,21 @@ "0cb09309": "ArysumToken()", "0cb0a44b": "enableInvestment()", "0cb0c7f0": "forceOwnerChange(address)", +"0cb175e3": "computeAvailableDiscountFor(address,uint256)", "0cb1982b": "updateNAV(uint256)", +"0cb1b1f5": "initiateArb(address,address)", "0cb1d243": "ICT(uint256,string,string)", "0cb1d6b4": "fourthWeek()", +"0cb1d857": "initiateBountyAmountChange(uint256)", +"0cb282c6": "numberEnd()", +"0cb285e2": "lockToUpdate(uint256)", +"0cb28a53": "fetchProduct(uint256)", "0cb296ae": "Gemstones()", "0cb335c4": "setMissedVerificationSlashAmount(uint256)", +"0cb405dd": "REBASE_AT_ONCE()", +"0cb52010": "kiboRewards(address)", +"0cb5503b": "rewardPerBlock(address)", +"0cb59c6a": "getClaimBackPercent(address)", "0cb5f653": "newUser(address)", "0cb60443": "minRate()", "0cb61d7a": "setCurrentBonusPercent(uint256)", @@ -7306,7 +13278,11 @@ "0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", "0cb795e8": "getDividendInfo(uint256)", "0cb7eb4c": "getReleaseTime(address)", +"0cb7f065": "fillPrescription(uint256,bool)", +"0cb7fd72": "ineligible(bytes32)", +"0cb80321": "sakePerBlockTradeMining()", "0cb812d3": "openWithoutCounterparty(address[4],uint256[3],uint32[4])", +"0cb8150f": "receivers(address)", "0cb9208a": "JorgeCoin()", "0cb97f57": "advisorsTotal()", "0cb9da1b": "RedemptionContract(address,uint256)", @@ -7314,125 +13290,250 @@ "0cb9ee4b": "getAllPlayerObjectLen()", "0cba5853": "angelCollection(uint64)", "0cba6d27": "getSocialAccountsLength()", +"0cba7d2c": "calculateCollateralMintAmount(address,uint256)", +"0cbab4f7": "calculatePlatformFee(uint256)", "0cbb0f83": "entryCount()", +"0cbb8371": "viewDelgated(address)", +"0cbbf1a0": "adminClose(address)", "0cbc90d8": "makeProposal(address,uint8,uint256,address)", +"0cbc9112": "team_hkj()", "0cbc9ce7": "sendToToteLiquidatorWallet()", +"0cbd0e19": "_userrewards(address)", +"0cbda11c": "yFarm(address)", "0cbe1eb8": "USDDOWNLOADPRICE()", +"0cbe28d6": "endStake(uint256)", +"0cbe5b57": "LogAuditFinished(uint256,address,uint8,string)", +"0cbe5e97": "z(address,address)", +"0cbe69a1": "respondBytes32Array(uint256,bytes32[])", "0cbf0601": "numMessagesSigned(bytes32)", "0cbf54c8": "auctionDuration()", +"0cbf5954": "minTokenHoldRewardsMultiplier2()", "0cbf711a": "LogClosed()", "0cbf7ec0": "startPrivateIco()", "0cbfe979": "updatePrivateSaleWithMonthlyLockupByIndex(address,uint256,uint256,uint256)", +"0cc00766": "MembershipUpdate(address,uint256)", "0cc00bc9": "MarketPlace(address,uint256)", "0cc03e7a": "claimShare(uint256)", "0cc04b55": "adminUnregister(string)", "0cc06221": "getUserAccountInfo(address)", +"0cc08e69": "updateCarrierData(bytes32,uint256)", +"0cc09277": "presale(uint256,uint256,uint256,uint256)", +"0cc0d762": "publicContributors(address)", "0cc10550": "BIToken()", +"0cc1d5da": "roadsCancelRoadSale(uint256,uint256,uint8)", "0cc2001c": "TastToken()", "0cc20a0c": "getHoldEarningsInRound(address,uint256)", +"0cc29d29": "getRankResourcesCountByRarity(uint256)", +"0cc315f9": "buyBondsWithDiscount(uint256,uint256,address,uint256)", +"0cc36c36": "draws(uint256)", "0cc3ad77": "verdictExecuted(address,bool,uint256)", +"0cc3b1c8": "resetVote(uint256)", +"0cc3be27": "icoContributions(address)", +"0cc3be2f": "adminSetPrice(uint256)", "0cc3db97": "_createToken(uint256,uint256,uint256,uint256,address)", +"0cc41374": "depositStaking(address)", "0cc4330c": "visit()", +"0cc4681e": "toUint8(uint256)", +"0cc4a5c8": "changeAccountAddressForSponseeAddress(address)", +"0cc4cb85": "bullsTotal(uint256)", +"0cc4e2f9": "selfLobbyExit(uint256)", "0cc4fb87": "changeGeneralSaleEndDate(uint256)", +"0cc5515b": "updateTierDayRate(uint256,uint256)", +"0cc57169": "getBeyondTokenValue()", "0cc6373f": "tokenExchangeRateMile3()", "0cc69a27": "Marketplace(address,address)", "0cc69b5b": "NOKIA()", +"0cc6e019": "allocateDistribution(uint256)", "0cc7086b": "canBurnUtility(address,uint256)", "0cc73b6a": "BLOCKS_PER_ROUND()", +"0cc76d30": "ownerRetreiveEth()", "0cc79a85": "getEnded()", +"0cc7bac7": "_getSurplus()", +"0cc7bf9c": "getVerifiedOfficersCount()", +"0cc7e750": "stakingAllocations(uint256)", +"0cc81ffa": "Pause(address,uint256)", "0cc8299b": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()", +"0cc835a3": "setBuyFee(uint256)", "0cc87b1c": "soldPreSaleTokens()", "0cc88021": "hasPlayer(address)", +"0cc8b868": "bettingDetails(uint256,uint256)", "0cc8c9af": "getOrCreateNextFeeWindow()", "0cc91bb9": "setEarlyParicipantWhitelist(address,bool,uint256,uint256)", "0cc966fa": "buy(address,address,uint256,uint256,uint256,bool)", +"0cc997bc": "getDaiSplitThreshold()", +"0cc9df5c": "setRefund(uint256)", +"0cc9fff3": "depositAll(uint256[4],uint256,bool)", +"0cca0f29": "HolderSetted(address,address,address)", +"0ccaa97e": "excludedFromStaking(address)", +"0ccaf04f": "getSellFactor()", +"0ccbf352": "toFixedUnsigned(uint256,uint256)", +"0ccc1a1e": "revokeDC(uint256)", "0ccc642e": "emergencyFlagAndHiddenCap()", "0ccc68bb": "_create_mineral(bytes32,address,uint256,uint256)", "0ccc88b1": "BurnupGameBase()", +"0ccccaf5": "getBalanceOfState()", "0cccfc58": "auctionPeriod()", +"0ccd2874": "liked(address,uint256)", +"0ccd397e": "setBPrice(uint256)", "0ccde0b1": "initialSupplyPerAddress()", +"0cce06b6": "floorSqrt(uint256)", +"0cce0b97": "blueWireCutters(address)", +"0cce5be6": "receiveCommission()", "0ccec396": "getNumReleases()", +"0ccf2156": "marketFee()", +"0ccf2e4b": "referrerBook()", "0ccf30f1": "setRentTime(uint256)", "0ccf5af4": "_prizeAmount()", +"0ccfd11a": "get_now_balance()", +"0ccfd52d": "addCollateralToken(address,uint256,uint256,uint32)", "0ccfdd8b": "potentiallyCirculatingPop()", +"0ccfe3e2": "ADDRESS_BOOK()", +"0cd0345a": "splitLPTokens(address,uint256)", "0cd0563b": "broadcast(string)", +"0cd0a66c": "updateIgnoreOfBakery(address,address)", +"0cd0ac19": "lockMintDropWithdraw()", "0cd0c3d7": "resetRental()", +"0cd0e530": "RESALE_OWNER_SHARE_NUMERATOR()", "0cd1812f": "sendFundsTo(address,uint256)", "0cd205bb": "CrowdsaleContract(uint256,uint256,address,uint256,uint256)", +"0cd2338d": "investor3()", "0cd28e9d": "getRoundPlayerList(uint256)", "0cd2b327": "approveSponsorableJob(address,uint256,address)", +"0cd2da38": "addStakingPoolInitial(address)", "0cd30783": "getcompany(uint256)", +"0cd31dad": "resolveSafetyChecker()", "0cd3c7f7": "ransom()", "0cd3fad2": "_base64decode(bytes)", +"0cd41587": "FundsMigrated(address,address)", +"0cd44fe1": "getOutboxActiveProcess(address)", "0cd4700a": "NT()", +"0cd48d81": "madicineRecievedAtPharma(address,address)", "0cd522da": "returnStartBlock(uint256)", "0cd55abf": "nextNonce(address)", "0cd5ea83": "earlyBirdDuration()", +"0cd62551": "contractNo3()", +"0cd63006": "revokePayoutOperator(address)", "0cd641b2": "tokenForComunity()", "0cd64ad0": "changeEthDailyLimit(uint256)", +"0cd666a0": "addLockedBalances(address[],uint256[],uint256[])", +"0cd68a18": "suggest(string)", "0cd6ceb3": "Boldman()", +"0cd738c9": "Settle(bytes32,uint256,uint256)", "0cd74cd9": "etherWallet()", +"0cd7546a": "sendMessage(address,bytes32,bytes)", +"0cd78e9d": "gamesByDayOfYear(uint256,uint256)", "0cd7d0f2": "DestlerDoubloons()", +"0cd85ece": "frequencyOverride(address)", "0cd865ec": "recover(address)", +"0cd8b5ad": "setrunEndTime(uint256)", +"0cd8bbc5": "emissionCap()", "0cd8dd0b": "setXPTokenAddress(address)", +"0cd8e965": "GovernerContract()", +"0cd95bd8": "includeExchange(address)", "0cd9aec6": "testFailTrustWhenStopped()", "0cd9f271": "buy10()", +"0cda45c8": "getfee()", "0cda88ce": "mul256By256(uint256,uint256)", +"0cda9983": "changeNominee(address)", +"0cdb245e": "getVaultETHBalance()", +"0cdb43c4": "rewardReferral()", "0cdbf3dd": "setReferralsMap(address[],address[])", +"0cdc1fc5": "linkTwitter()", "0cdc92ea": "canBeCanceled(uint256)", +"0cdd1c65": "setMinCratio(uint256)", "0cdd4234": "mainAddress()", +"0cdd53f6": "donate(uint256,uint256)", "0cddb437": "CNDTPrivate()", "0cde0e7d": "solve(int256,int256,int256,int256)", "0cde6009": "KinTokenSale(address,uint256)", "0cded5f0": "migratePool()", +"0cdf1870": "redeploy()", +"0cdfebfa": "checkpoints(address,uint256)", +"0ce02d8f": "getNodeInfromationBySigner(address)", "0ce08a49": "refundAmount(uint256)", "0ce10cbd": "changeOwnerToZero()", "0ce11049": "setBCoinContractAddress(address,address)", "0ce11a77": "registrarAddress()", "0ce11ded": "updateMthEthRate(uint256)", +"0ce12654": "Alphabet()", +"0ce1499f": "sendEthToAdmin(uint256)", "0ce18afc": "TabToken()", "0ce1f4b7": "toB32(bytes,uint256,bytes)", +"0ce27925": "bspCap()", "0ce3151c": "personUpdateRelation(uint256,string)", +"0ce3610e": "Created(address,uint256)", +"0ce37246": "blockTimeFrozen()", "0ce38276": "setColorYellow()", "0ce3d998": "fetchCancelledOrdersForMerchant()", "0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", "0ce4c990": "minRevenueToDeliver()", "0ce4e104": "bnbTokenWallet()", +"0ce4f2ef": "burnPynthsToTargetOnBehalf(address)", +"0ce51179": "setLists(address,address,address,address)", "0ce52e25": "time_on_trademarket()", +"0ce57b46": "toogleNominee(uint256,address,bool)", +"0ce59008": "redBlueAttempted(address)", "0ce5a098": "getWordCount()", +"0ce5c7cb": "NewBuyer(address,uint256,uint256,uint256,uint256)", +"0ce6286a": "HGBIUNiom(address,uint256)", "0ce64868": "setPendingValue(uint256,string)", +"0ce65b6d": "getTimeRemainingOnLock(address)", "0ce6bd26": "EtherCarbon()", "0ce71356": "canPropose(address,uint256)", +"0ce7f8d8": "CreateGame(uint256,address,uint256)", "0ce84479": "Wallet10()", "0ce8544a": "Ethlyte()", +"0ce87ef1": "buyExtraSpin(address,uint256)", "0ce90ec2": "levelUp(uint256)", "0ce96e71": "removeAddressFromQueue(uint256)", "0cea64a0": "callSomeFunctionViaOuter()", "0cea7534": "withdrawMargin(uint256)", "0ceaeb5a": "ecosystemSupplyRemaining()", +"0ceb2cef": "setEpoch(uint256)", +"0ceb4011": "getArtworkData(uint256,uint256)", +"0ceb9386": "partitioned()", "0cec1ecd": "getPixelDistributor()", +"0cec2a76": "getUserDepositAmount(address)", "0cecf728": "ListingCancelled(bytes5,uint256)", +"0ced3d05": "updateNonce(address,uint256,uint256)", "0ced5b02": "buyTokens(uint128)", +"0ced8c69": "generatedBy()", "0cedd0bd": "_getDestinationPartition(bytes32,bytes)", "0cee1725": "withdrawFund(uint256)", "0cee22e9": "testSetBalanceSetsSupply()", +"0cee5a3f": "pendingTarget(uint256,address)", +"0cef2198": "openLongBlockElapse()", "0cef7d5a": "WBW(uint256,string,uint8,string)", "0cef9a27": "add2MarketPlace(uint256,uint256,uint256)", "0cefa4de": "minPersonalCap()", +"0cefc2f0": "changeblacklistingStatus()", "0ceff204": "withdrawRevenue(uint256)", +"0ceff545": "superUnLock(address,uint256)", "0cf01051": "startFunding()", "0cf039e3": "setBuyRequestLimitInterval(uint256)", "0cf044ee": "enable_exploration()", +"0cf0ac1d": "getBounties()", +"0cf1022a": "setPinCode(uint256)", +"0cf1b3cc": "tokenTimeLock(address,uint256)", "0cf1d050": "withdrawAllToExchange(address,uint256)", "0cf1dafc": "refreshRate(uint256)", "0cf1dd6e": "BattleOfThermopylae(uint256,uint256,uint8,address,address,address,address)", "0cf20cc9": "withdrawBalance(address,uint256)", +"0cf2487c": "waiver()", +"0cf28b11": "unlockTimeTeamAdvisors()", +"0cf352b3": "_ensureTermConfig(uint64)", +"0cf3939f": "viewAmountOwed(address,address)", "0cf3da77": "ELCToken()", +"0cf45247": "kickoffRandomOnCondition()", "0cf45ba5": "updateFirstDuel2(uint256)", +"0cf491ad": "ContractStaking()", "0cf56f3f": "addBetWithReferrer(uint256,address,address)", "0cf59cc6": "changeScientistForElement(uint256,uint256)", +"0cf60175": "getBondDiscountRate()", +"0cf6821b": "getUserEXR(address)", "0cf6d879": "getARInvTable()", "0cf7193d": "Tradex()", +"0cf7866a": "testMethodInputsMisc(address,bool,string)", "0cf79e0a": "transfer(uint256,uint256)", "0cf7f3b5": "changePrice(uint256,uint64)", "0cf820e0": "lengthOfRecord(uint256)", @@ -7440,6 +13541,9 @@ "0cf85c4c": "stateMask()", "0cf868bf": "_airdropLimit()", "0cf8bcab": "setItemTransferable(uint256,bool)", +"0cf8f7f6": "unlock(bytes,bytes,bytes,bytes,bytes)", +"0cf90edb": "isReserveParticipating(address,address)", +"0cf9349d": "MIN_JACKPOT_BET()", "0cf935c0": "getDegreeCount()", "0cf93a60": "ICOweek1End()", "0cf94990": "checkMD(address)", @@ -7447,37 +13551,59 @@ "0cfa0318": "approveBurn(address,uint256)", "0cfa1d12": "rndExtra_()", "0cfa8af4": "deleteCandidateByStage(address,uint256)", +"0cfacb57": "claimItemResource(address,uint256)", +"0cfb0a0c": "newIndex()", "0cfb37a7": "revealProofOfPerfBlock(uint32,bytes32,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", "0cfbf6c6": "lockConfiguration()", +"0cfbf981": "updateMatrixLastLevels(uint8)", +"0cfc15f9": "_rOwned(address)", +"0cfcc0df": "getfarmingdeposit()", "0cfccc83": "SUPPLY_CAP()", "0cfd0a0d": "INDI()", +"0cfd2622": "RequiredUpdate(uint256)", "0cfd2c6a": "RecreationCultureMassMediaCoin()", +"0cfdc864": "unblockClaims()", +"0cfde139": "_getMid()", "0cfed2a2": "pauseSale(bool)", +"0cfee408": "COVER_REWARDS()", "0cff4058": "AacharyaToken()", +"0d00889a": "setPermTokenId(uint256,uint256,uint256)", "0d009297": "initOwner(address)", +"0d009cea": "timeToWithdrawTeamTokens()", +"0d00f200": "GetAccountIsNotLockForReturnCount()", "0d011088": "convert2(string,string,address)", "0d015e4b": "get_depositLock()", "0d01c1ae": "set_Area_name(string)", +"0d01e5a0": "mainnetContract()", "0d02369b": "takeSellOrder(address,uint256,uint256,address)", "0d024f83": "DownStats(uint256,uint256,uint256,uint256)", "0d02e05c": "setBuyStatus(bool)", +"0d030733": "multisendErcRhino(address[])", "0d032623": "getRemainingCompanyTokensAllocation()", +"0d0353c9": "GetEsusuAdapterAddress()", +"0d03d126": "createAppeal(uint256,uint256,uint8)", "0d043a60": "getRewardsWithdrawn(uint32,address,address)", "0d047c5b": "NewFounderAddress(address,address)", "0d047d49": "getFashionsAttrs(uint256[])", "0d051c52": "clearCrowdsaleCloseTimer()", "0d052f39": "getBurnAdminApproval(address,address)", +"0d055475": "rebaseTimeInfo()", "0d055d1e": "sendBill(uint256)", "0d0567ae": "latestAddress()", "0d058fe3": "create(uint256,string,address)", +"0d061e75": "secondaryPayoutAddress()", "0d062959": "FXTOKEN(address,uint256,uint256)", "0d06a2ee": "setBenefeciar(address)", +"0d070be2": "convertBackUni(uint256,uint256,uint256,address)", +"0d08caa0": "GetPoolStatus(uint256)", "0d0a1901": "secondReserveAllocation()", "0d0a6bf2": "investor_clearRefBonus(address)", "0d0abf52": "matureBalanceOf(address)", "0d0b0c74": "loadN(uint8[],uint256,uint256)", "0d0b86c6": "CryptaurDepository()", "0d0b8825": "weiPerRtc()", +"0d0b9391": "LogFill(address,address,address,address,address,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"0d0bf67a": "activateAssetIntroducerByTokenId(uint256)", "0d0bfb2f": "ba2cbor(bytes[])", "0d0c0c51": "LogParticipation(address,uint256,uint256)", "0d0c2008": "TwoAndAHalfPonzi()", @@ -7485,137 +13611,264 @@ "0d0c529a": "getacttslen()", "0d0cd4f4": "allWalletBalances(address)", "0d0d0554": "ARMYToken()", +"0d0d2b01": "getLatestPriceTimestamp()", +"0d0d4d1b": "AddShare(address,uint256,uint256)", "0d0d7dc9": "raiseEvent2()", +"0d0d81e5": "jmining(uint256,uint256)", +"0d0dcf10": "init_TWAP()", +"0d0e1ff6": "setGemT(bool)", +"0d0e55f4": "WithdrawSale(address,uint256)", +"0d0e96da": "totalNFTs()", +"0d0ea9f8": "doRebalance(address)", +"0d0eb352": "balanceC(address)", +"0d0ecd6e": "initialize(address,uint256,uint256,uint256,bool,address)", "0d0ed6b9": "fetchAllCandidatesByIndex(uint256)", +"0d0eec09": "getOngoingContracts(uint256)", +"0d0f691d": "movetoNewBond(address)", +"0d0f71c6": "getCardLoyaltyPrice(uint256,uint256,uint256)", +"0d0f9df4": "getBalance(address[])", +"0d101366": "WalletCreated(address,address[])", "0d1017d6": "EnterRentCrowdsale()", +"0d105f91": "updateDPOAddressForSell(address)", +"0d10e398": "deployCSPManager()", "0d10e842": "weiAmount()", "0d1118ce": "burnTokens(address,uint256)", +"0d112ec1": "getTokenGroupTotalBalance(uint256)", "0d117d16": "chunk1IsAdded()", "0d11dd70": "currentRefundInvestorsBallot()", "0d121337": "transferOperatorRole(address)", +"0d1234da": "BCHIPTOKEN()", "0d126bc4": "getCurso()", +"0d12bbdb": "setCommunityFee(uint256)", "0d1352cf": "marketAnts()", +"0d13ab65": "GP_statusGame()", "0d13bec6": "SellAcorns(uint256)", "0d13d85e": "transferMintTokens(address,uint256)", "0d13ea7d": "BONUS_2_DAYS()", +"0d13fd7b": "challengeDeposit()", "0d145d16": "RegisteredPlayer(address,uint256)", +"0d14ae7c": "boolFunc(bool)", "0d14ed4f": "midgradeOpen()", +"0d1563c1": "createDrill(uint16,uint16,uint16,uint16,uint16,address)", "0d157352": "ForkiToken()", +"0d15c07d": "doesGroupMemberExist(uint256,address)", +"0d15d79c": "oneKeyAddLiquidity(address,uint256,uint256)", "0d15fd77": "totalVotes()", +"0d164237": "grandFund(address,uint256,address)", +"0d1657e8": "activities(uint256)", +"0d16a45a": "_nftInvalidated(uint256)", +"0d16adc7": "getRevolution(string)", "0d16b6ca": "setBTCRate(uint256)", "0d16cba5": "addMessage(address,address,address,string)", +"0d170673": "updateProjectName(uint256,string)", "0d172a01": "transferTokenTo(address,address,uint256)", "0d174c24": "setWithdrawer(address)", "0d17ace0": "currentDiscountPercentage()", "0d17bc2e": "_disallow()", "0d17c576": "_deliverBonusTokens(address)", +"0d184dce": "sendRewardToMany(address[],uint256[],uint256)", +"0d187fd6": "_maintenanceMarginRatio()", "0d18952b": "UpdateReleasePrice(uint32,uint256)", +"0d18e43c": "getID(uint256)", "0d1946df": "MasterToken()", +"0d1972f3": "testNumber()", "0d1a0c62": "setPackSize(uint256)", "0d1a0d5e": "TokensPurchased(address,uint256,uint256,uint256)", +"0d1a1281": "sqrtEnable()", "0d1a94de": "SeriesCreated(uint256)", +"0d1adfc6": "_dono()", +"0d1ae151": "mir()", +"0d1af103": "operatorTransfer(address,address,uint256)", +"0d1b38ff": "bytesarrayhash(bytes32[])", +"0d1c2fe9": "updateAccountLockType(address,bytes1)", +"0d1c876b": "FlipStarted(bytes32,address,uint256)", "0d1ce2d2": "activateToken(address)", "0d1cf200": "muscFund()", "0d1d38aa": "info(uint256,bytes32)", +"0d1d468c": "createLockedTokenCor(address,uint256)", "0d1d6ffd": "checkTransferIn(address,uint256)", "0d1d8d6d": "listTeams()", "0d1dcd74": "foundersRewardsMinted()", +"0d1e027d": "balanceVault()", +"0d1e676e": "batchAddPairs(address[])", +"0d1ed437": "call(address,address)", "0d1edad1": "Start8()", +"0d1ede5b": "ethUnlockAll(uint256[])", "0d1ee029": "add(string,int256)", "0d1efd7d": "getDistrictCode()", "0d1f3471": "deleteRecord(address)", +"0d1f6857": "tokenCCrv()", +"0d1f8c37": "CT_out_share()", "0d1f9bb6": "isBetLocked()", "0d1fce42": "getBankroll()", +"0d2020dd": "getContractAddress(bytes32)", +"0d205645": "setLiquidityProviderToken(address)", +"0d207769": "icecream()", +"0d208765": "fatSafe()", +"0d20916e": "deporToken()", "0d20a889": "getRegistrantId(address)", +"0d20bc89": "createFixedPool(string,address,uint256,uint256,uint256,uint32,bool)", +"0d21076f": "_transferReq(uint256)", "0d213d31": "migrateTo(address,uint256)", +"0d21c47b": "ABTokenDataContract()", +"0d21fff3": "finalizedAnswer()", "0d2218d6": "millRaised()", +"0d2232f2": "Admin_1(address,address,uint256)", +"0d2241bf": "updateRateByOwner(uint256)", "0d229be7": "priceTokenWei()", +"0d22c997": "setAlpaContract(address)", +"0d22ff16": "updateClearOwner(address)", +"0d2305f4": "epochSeniorTokenPrice()", +"0d235817": "lpProvider()", +"0d23a17b": "totalUnspentETH()", "0d24317d": "_getTotalHp(int256,int256,int256,int256)", "0d244d68": "setNotRetractable(bytes32)", +"0d2481fe": "withdrawPartialYCRVShares(uint256)", +"0d248b11": "setBadTotalSupplyTokenAddress(address)", "0d25320c": "distributedAmount()", "0d2560ee": "addMe()", "0d25b6f2": "getMonsterName(uint64)", +"0d25e56f": "getCollGlobalScore(address,uint256)", "0d260b60": "_sendTranche(bytes32,address,address,uint256,bytes,bytes)", "0d2646d4": "switchNodes()", "0d26c879": "getTotalFundationTokens()", +"0d26f7f8": "setBonusAmount(uint128[8])", "0d271720": "transferFromAdmin(address,address,uint256)", "0d274929": "getChannelName(uint256)", "0d27864f": "TokenSwapOver()", "0d278a8b": "Technology3GCrowdsale(uint256,address,address)", +"0d27d014": "sendAwardBySelf()", +"0d27fcaa": "newBonusCoins()", "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()", +"0d296b8f": "Buy(bytes32,address,uint256)", "0d298318": "heapSort(uint128[])", +"0d29d2f4": "sellTokensInUniswap(address,uint256)", "0d2a1fa7": "mintAfterIcoPeriod()", "0d2a246e": "tokenDividend()", "0d2a25bb": "tentimes()", +"0d2adb90": "setTokenAddresses(address)", "0d2bd1ac": "changeFact(string)", "0d2be064": "buyToken(address,uint256,uint256,bool)", +"0d2bfcd1": "TokenFallback(address,uint256,bytes)", +"0d2c1104": "lockCADays()", "0d2cbe13": "settleBet(uint256,uint256)", "0d2cc54a": "rebirthAxie(uint256,uint256)", "0d2ce376": "submitVote(bytes32,bytes32)", +"0d2d76a2": "depositStake()", +"0d2d7c28": "getPynthExchangeSuspensions(bytes32[])", +"0d2dcc02": "addIterationToken(address)", "0d2e017b": "getGamers()", +"0d2e4752": "priceIssue(uint256)", "0d2e677a": "getHotels()", +"0d2edde2": "transferGovernorship()", +"0d2f0b2e": "setTaxer(address)", "0d2f2971": "authorized_recordFailedOldOwnerTransfer(address)", +"0d2f8e8b": "releaseTimeLockTokens(uint256)", "0d2f99d0": "removeChild(address,bytes32,bytes32)", "0d2fc226": "createTokenUri(uint8,uint8,uint64,uint64,uint64)", "0d3016bf": "_getIPFSHash(address,bytes32)", "0d301c75": "removeFromGoldList(address)", +"0d3041d0": "getLockupAmounts(address)", +"0d30a726": "createMine(address,uint256,uint256,string)", "0d30afb0": "CONFIG_DICE_SIDES()", +"0d30e929": "set_new_DAI_TOKEN_ADDRESS(address)", "0d310998": "DataContacts(address,address,address,address)", "0d3167da": "BarmatzTestToken()", +"0d31faab": "swapForWrapper(uint256)", "0d325b29": "setTokenApproval(uint256,address,bool)", "0d329d14": "ICOtotalSupply()", +"0d331908": "addProposerBonus(uint256,uint256)", "0d334130": "m_callbackGas()", +"0d33bcb5": "AuthenticateEvent(uint256,address,uint256)", "0d33cfa0": "meltAddress(address)", +"0d340c4a": "expireNode(uint256)", +"0d341404": "_subtractFromAllStatistics(uint256)", +"0d34225c": "getLucaxPriceForBNB()", "0d342cab": "autoTransfer()", "0d3471f9": "sumHardCapICOStage5()", "0d349aea": "updatePaid(address,address,uint256)", +"0d3596e1": "rewardThreshold(address,address)", +"0d35d750": "swapExactTokenToETH(uint256,uint256,address,uint256,uint256)", "0d35f64c": "teamReservedBalanceOf(address)", +"0d362163": "countByStatus(address,address,bool[8],uint256)", "0d3665b5": "IloveYou()", "0d368fee": "deverify(address)", +"0d36a170": "renewLocktime(uint256,uint256)", "0d36c02c": "BACKUP_TWO()", "0d3737b0": "mintAgent()", +"0d374786": "JackpotPayment(uint256,address,uint256,uint256)", "0d37ac7f": "toggleFunding(bool)", +"0d37fc34": "getAstroInfoByIdx(uint256,uint8)", "0d381a28": "tokensByOwner(address)", "0d381cad": "addJobContract(uint256,string,bool)", +"0d3830dd": "interimWithdraw(uint256)", "0d38a077": "affRegister()", +"0d38c596": "estimateToUSDT(address,uint256)", "0d38ea48": "ethreceived()", "0d38ffcd": "donationRate()", "0d392cd9": "updateWhitelist(address,bool)", "0d39820c": "preInvestStart()", "0d39968c": "funderSmartToken()", "0d3a557e": "_allowance(uint256,uint256,bytes32)", +"0d3a6aee": "changed()", "0d3ade73": "adjustNextTranche(uint8,uint8)", +"0d3afe4c": "updateSelectorHash(bytes32)", +"0d3b3937": "addJOYCollector(uint256,uint256,uint256,bool)", "0d3b7901": "withdrawBonus(address[])", +"0d3b80bb": "testUserCanInvest()", "0d3c1b45": "addLayer(address,uint256,string,string)", +"0d3c1f6f": "updateReward(address,address,uint8,uint256,uint256)", "0d3c7519": "distribute_NRT()", "0d3cb409": "getAdjudicatorAddress()", +"0d3cf6fc": "TIMELOCK_ADMIN_ROLE()", +"0d3d0fd8": "LockAmount(address,address,uint256,uint256)", +"0d3db377": "moveIsEnabled()", "0d3e4044": "binary_search(uint256,bytes32)", +"0d3e86fe": "tokenInAuctionByIndex(uint256)", "0d3f5cb5": "findCliPendTAndSetPrfm(address,address)", "0d3fbdf8": "getPI_edit_8()", "0d40022a": "_buildShip(uint16,uint16,uint8,bytes32)", +"0d40c04f": "getBorderATokenAmount()", +"0d40d0cf": "maxEntriesInQueue()", "0d40e8d6": "supportHarvestQuorum()", "0d41117f": "calculateFee(uint256,uint256,uint256,bytes32,bool,bool)", +"0d4202ce": "getPendingMerkleData()", "0d42240a": "isWhiteListedAddress(address)", "0d425559": "ownerSetMiningProfit(uint256)", +"0d427b72": "vestingAddresses(uint256)", +"0d42e82f": "updateTKNContractAddress(address)", +"0d42fe2b": "withdrawToFoundation(uint256)", +"0d438c32": "addPlan(address,uint256,uint256,uint256,uint256,uint256,bool)", +"0d43e8ad": "feeDistributor()", +"0d4403da": "pendingGhost(uint256,address)", "0d441f8c": "totalNacInPool()", +"0d44625b": "delegates(address,bytes32,address)", "0d44cf79": "lastDelayedSetStake()", +"0d451c8f": "getSnapshotLen()", +"0d453efb": "hasVault(address)", +"0d45ffac": "syncReward(address,uint256,uint256,uint256,bool)", "0d465263": "assessFees()", +"0d466ef9": "setStepTimeSale(uint256)", "0d469483": "fiatToWei(uint256)", "0d46f410": "getProposalParent(bytes32,bytes32)", "0d46f877": "irucoin()", "0d46f91a": "kycCertifier()", "0d472f5f": "airdrop_byadmin(address,uint256)", +"0d474ed3": "nextRoundTime()", "0d4766a3": "STARTING_SHITCLONE()", "0d480993": "getFoundersTokens(uint256)", "0d483442": "NO()", +"0d48669a": "authorized(uint256)", +"0d487c31": "setMinCurrency(uint256)", "0d4891ad": "signalDoneDistributing(uint256)", "0d48a771": "claim(address,uint256,uint256,uint8,bytes32,bytes32)", "0d48e8d0": "doBalance()", +"0d4906e5": "getProms(bytes32)", "0d494a05": "isICOUp()", "0d498b1e": "setTokenSPUsdCentPrice(uint256)", "0d49a0f0": "addProofOfPerfBlock(uint32,bytes32,bytes32,bytes32,bytes32)", @@ -7623,137 +13876,246 @@ "0d4a690a": "KopiToken()", "0d4a8b3b": "wadmin_freezeAccount(address,bool)", "0d4b8208": "convertCarbonDollar(address,uint256)", +"0d4bb250": "_plyr(uint256)", +"0d4c43be": "erase(bytes32,address)", "0d4c8f62": "setPayouts(uint256,uint256,uint256)", +"0d4c967b": "setDoTxNft(address)", "0d4d1513": "mint(address,uint256,address)", "0d4d389f": "POOL_EDIT_4()", "0d4e03e1": "changeTargetWallet(address)", +"0d4e4eed": "setIsRewardSellerDandy(bool)", +"0d4e57a4": "monthCount()", +"0d4e8fd1": "handleDelegationRemoving(address,uint256,uint256)", "0d4ea316": "buyLandWithTokens(bytes32,int256[],int256[])", +"0d4eec8f": "_WETH_()", "0d4faa05": "acheter()", +"0d4fb803": "addTeam(string,string)", "0d50266c": "TEAM_PERCENT_GZE()", "0d505d54": "GDX()", +"0d50c1b6": "r(bytes4,uint256)", +"0d51533e": "approvesub(address,address,uint256)", "0d5260e7": "setGasReserve(uint256)", "0d5269ab": "distributeInviteReward(uint256,uint256,uint256,uint256,uint256)", +"0d52ff6d": "blocksUntilMkbPoolCanBeActivated()", "0d5302c4": "DEVCLASS_EXTRACTION_BASE()", +"0d53272e": "buyTokenOrders(uint64)", "0d533e99": "UnlockEvent(address)", "0d53b406": "recordEscrowOnBid(uint64,uint64)", "0d543862": "sigBountyProgramEDUSupply()", +"0d548a17": "calculateBuy(uint256)", "0d54c49e": "processEndGame(uint256)", "0d550b75": "allowance(uint256,address,address)", +"0d550fd9": "tckAddress()", "0d55af64": "AFRIHUBcredits()", +"0d5608b0": "eventid()", "0d5624b3": "preSaleStart()", +"0d563e33": "balanceOfStrat()", +"0d56562c": "setaddr(address)", "0d567f38": "setStartRound(uint256)", "0d571742": "setGenesisAddress(address,uint256)", "0d57a47f": "setTokenCountFromPreIco(uint256)", +"0d57c54d": "queue1ActiveUser()", +"0d57dd9c": "noVisibility()", "0d582f13": "addOwnerWithThreshold(address,uint256)", "0d5866e2": "setDeprecated(address)", +"0d588b5a": "burnFromDaico(address)", +"0d596cdf": "setStrategistReward(uint256)", "0d59b564": "submitTransaction(address,uint256,bytes,uint256)", "0d59c736": "Gavsino()", +"0d5a0dba": "LogEvent(uint256,string)", "0d5a13f4": "BitdealCoin(address)", +"0d5a536d": "getPartyB()", "0d5a5c32": "CROWDSALE_OPENING_TIME()", "0d5a621b": "childContractByIndex(uint256,uint256)", +"0d5b21c0": "setWhiteListStatus(bytes32,uint8)", +"0d5b54a4": "OneYearBondBuiltCount()", +"0d5b8c6b": "LogEvent(uint256)", "0d5be2df": "ballotLog(address,uint256)", +"0d5c0c56": "burnSaleAddresses(address)", +"0d5c71d3": "USDT_Contract()", +"0d5cda70": "priceChange(uint256,uint256)", "0d5d6f7a": "BitEyeExchange(address)", "0d5defa4": "escrowAddress()", "0d5dfdd8": "debugVal4()", "0d5e1e82": "redeemReputation(bytes32,address)", +"0d5e2053": "_admins(address)", "0d5e4c8d": "initialPrizeWeiValue()", "0d5e87f4": "calcTokenAmountByZWC(address,address,uint256)", +"0d5f0854": "getBallotDetails(uint256,address,address)", +"0d5f095a": "getAddrById(uint256)", +"0d5f2659": "cashChequeBeneficiary(address,uint256,bytes)", +"0d5f3f54": "depositToken(address,uint256,uint8)", +"0d5f856f": "bonus_total()", "0d5f8f17": "setXWinContractAddress(address)", "0d5fced3": "CHAJING()", +"0d605482": "addTimeLock(address,uint256,uint256)", "0d605c4a": "NUM_RESERVED_AXIE()", "0d60889c": "Thanks(address,address,uint8,uint8)", "0d609939": "setParameters(uint256,uint256,uint256,uint256,address,address)", +"0d60a727": "ownersLock_open()", +"0d60cb83": "prizeName()", "0d60e231": "migrationRewardTotal()", +"0d60fcd8": "updateGoal()", "0d6103a1": "unsoldTokensBack()", "0d616d20": "withdrawContribution()", "0d61a4ff": "HUT34_VEST_ADDR()", "0d61b519": "executeProposal(uint256)", "0d61cd5d": "mintICD(address,uint256)", "0d623e10": "oracleType()", +"0d631d2a": "openProfitOf(address)", +"0d63aca7": "singleTransferERC20(address,address,uint256,uint256,uint256,bytes32[])", "0d63e87d": "setIntervalTime(uint256)", "0d63fdbe": "parseOutputScript(bytes,uint256,uint256)", "0d6495ef": "View_MediatedTransaction_Status(uint256)", "0d649f90": "getVisaIdentifier(address,uint256,uint256)", +"0d64ca03": "setBidStartTime(uint256,uint64)", +"0d650dbe": "addMeterPoint(address)", "0d65d50b": "TIER3()", "0d65e3e7": "IS_SIGNATORY(address)", "0d66343c": "getPaintingOwner(uint256)", "0d668087": "lockTime()", "0d668818": "dataContract()", "0d66a3ec": "ApisCrowdSale(uint256,uint256,uint256,address,address,address,address)", +"0d675c46": "initiateFlashLoan(uint256,uint256,uint256,address,address,address)", +"0d6791fc": "ownerHold()", "0d679531": "soldedSupply()", "0d6798e2": "userFinalize()", "0d67d01b": "GradeBook()", +"0d683dd9": "lotteryStatus()", +"0d68b761": "setRewardDistribution(address)", "0d68ddeb": "setBUUU(bytes32,uint256,uint256,uint256)", +"0d68e580": "yah(uint256)", "0d694114": "addressPremineBounty()", +"0d6a5bbb": "safeBatchMint(address,uint256[],uint256[],bytes)", "0d6a5c75": "ComputeHarvest()", +"0d6a8822": "setVPUREAddress(address)", +"0d6a8b86": "NewOwnershipAccept()", +"0d6b44eb": "getNumberOfLockedAddressesCurrently()", +"0d6bc895": "roundsTargetedFees(uint256,uint256)", +"0d6c03fa": "unclaimedReturns()", "0d6c66a1": "safesub(uint256,uint256)", +"0d6ceef2": "totalRewardsAmount()", "0d6d1437": "changeMemberName(address,string)", "0d6d1e64": "EricToken(uint256,string,uint8,string)", "0d6dcab3": "getProofOfStakeReward(address)", +"0d6dd8a8": "minTermLength()", +"0d6e0231": "burnUpgradeCosts(uint8,address)", "0d6e548e": "getAgentsNum()", "0d6ec16f": "isMyDrone(uint256)", +"0d6ee702": "isAllDataReceived(bytes32,uint256)", "0d6f6f0b": "summTeam()", "0d6f72aa": "DLXV()", +"0d6f7539": "calculateHealthFactor(uint256,uint256,uint256)", "0d6f7ca3": "maxgas()", "0d6f849b": "minAmountPresale()", "0d6f8563": "withdrawWei(uint256)", +"0d6fdb5f": "podeStartTimestamp()", "0d6fef5f": "MoonBook()", +"0d7017fc": "updateDirect(uint256,uint256,uint256[],string[])", +"0d707df8": "applyMinter()", "0d70e29c": "isAuthorizedToTransfer(address,address)", "0d70e7e3": "getRate(uint256,uint256)", "0d71212f": "robotLiabilityLib()", "0d7128d8": "setGoalETH(uint256)", +"0d712c40": "setTicketInfo(uint256,uint8,uint8,uint8,uint8)", "0d7172f4": "canMakeUnrefusableOffer()", "0d71aba5": "getRace(uint256)", +"0d720bbc": "PPM()", "0d729abc": "setStopDay(uint256)", +"0d72a49e": "unix_time()", "0d72d57f": "backendAddress()", "0d730a1a": "updateMerchant(string,string)", "0d73a44a": "_collectFee(address,uint256)", "0d73c10e": "totalWeiRaisedDuringICO2()", +"0d741577": "implementation(bytes4)", +"0d746873": "ethVig()", +"0d749cec": "balanceOfPool(uint256)", "0d7519a9": "initialTokenSupply(address,uint256,bool)", "0d7548f7": "seeEthPrice()", +"0d7570e6": "trustedSubmitters(address)", +"0d75a9cf": "collectForgottenBtc(address)", "0d75d68e": "_canDownload(bytes32,uint8,bytes32,bytes32)", "0d75f659": "TemperatureMeasurementA2(address,int8,int8,uint16,string)", "0d7714e2": "PiedPiperCoin(uint256,string,uint8,string)", +"0d778c8f": "getTotalSaleAmountBySaleID(uint256)", +"0d77f564": "maxIronBankLeverage()", +"0d7834fb": "getGetMinMiddle8()", "0d78573e": "releaseManager()", "0d78bc17": "importCustomer(address,address,uint256)", +"0d78ceb4": "balanceOfCouponUnderlying(address,uint256)", +"0d78da25": "Author(uint256,uint256)", "0d7982ad": "lockMinting()", "0d799734": "setMinSet(uint256)", "0d7a90c8": "maxSeedStage()", "0d7af726": "addGame(address,string,string)", "0d7b4ac4": "setLLV_edit_27(string)", "0d7b69e2": "fiatCurrency()", +"0d7b7d76": "getBalanceAndAssetProxyAllowance(address,bytes)", "0d7bca61": "withdrawSuccessful(bytes32)", +"0d7bd213": "etherRejected(address)", "0d7bf53c": "getBlockHash(uint256,uint256)", "0d7c064f": "setMinStandingBalance(uint256)", +"0d7cdc48": "setMinimumPurchase(uint256)", +"0d7cf2ad": "keyOf(address,address,address,address,bytes)", "0d7cffb0": "PrizePool()", +"0d7d94f3": "totalcollectedfee()", "0d7dc36a": "setManagement(address,address,bool)", +"0d7def95": "toggleShouldBurn()", +"0d7e0592": "StakeHex(uint256,uint256,address)", +"0d7e149f": "timelocks(uint256)", "0d7eaa8b": "FudgeCucks()", +"0d7f132b": "changeForArtistRate(uint256)", "0d7f7eff": "TokenDestructible()", +"0d7faadf": "lockerUnlockCount(address)", +"0d7ff1b6": "getEndDayOfStakeInUnixTime(address,uint256,uint256)", "0d8053ca": "getBetLength()", "0d806df7": "setXaurCoined(uint256)", +"0d80a248": "MatchElections(uint64)", +"0d80af9b": "ROLE_SUPERVISOR()", "0d80b84b": "crowdSaleTime()", "0d80bf64": "whitelist(string)", +"0d80ceb7": "emitUserWithdrawnNetworkEarnings(address,uint256)", "0d80fcdb": "distributeBonuses(uint256)", +"0d80fefd": "messages(uint256)", "0d81057e": "multiplierOnWin()", +"0d818789": "setIncubatorChef(address)", "0d81a570": "migrationDone()", +"0d81ee98": "teamMarketing(uint256)", "0d826264": "phaseThreeLimit()", +"0d82b4c9": "NAPboostLevelOneCost()", "0d82cb3a": "setHeir(address,uint8,uint256)", "0d830190": "getCharacterInfo(uint256)", +"0d83066a": "forArtistRate()", "0d831d09": "forwardUpdateFeesTo()", "0d83304c": "getSales()", "0d83a371": "unprocessedQueryBytes32s(uint256)", "0d83dd8a": "recordNewAddress(address)", +"0d84e0da": "minSharingThreshold(address)", +"0d84e2a9": "_linearInterpolation100(uint256,uint256)", +"0d8542c6": "pool2(uint256)", "0d854646": "magic()", "0d85ef17": "ZombiewCreator()", "0d8693bd": "sBitcoin()", "0d869ada": "immortals()", +"0d869fe7": "Year()", +"0d86ed47": "mneContract()", +"0d870b7f": "emptyCreditors()", "0d873644": "addToken(uint256,uint256,uint256,uint256,bytes)", +"0d874f7a": "RefundWaitingLine(uint256)", +"0d87513b": "Create(bytes32,address,address)", "0d87a7c0": "WLBDrawsDB()", +"0d87cedb": "getNumLocks()", "0d8814ae": "cardOwnerOf(uint256)", "0d882848": "BTNSold()", "0d883bdf": "generateN()", +"0d88ed89": "uniswapComputeAmountOut(uint256,uint256,uint256,uint256)", "0d88fb04": "removePatternUserIndex(address,bytes32)", +"0d890c09": "getLpPowah(uint256,address,address,address,address)", "0d895ee1": "setBurner(address,bool)", +"0d89a776": "glueBEP20(address)", +"0d89e2b7": "makerDaoOracle()", +"0d8aa993": "checkIfFrozen(address)", +"0d8aee87": "isAddressUniswapAddress(address)", "0d8b2708": "functionFour(uint256,uint256,uint256,uint256)", "0d8b5fa2": "testControllerValidTransferFrom()", "0d8b70bf": "grantAccessMint(address,address)", @@ -7762,13 +14124,22 @@ "0d8c2f67": "_logSendWebGiftAndSendEther(address,uint256)", "0d8c3c2f": "calculator(address,uint256,uint256)", "0d8cba74": "PublicMiningSupply()", +"0d8cd469": "setNyanNFTAddress(address)", +"0d8da216": "cipher()", "0d8e6e2c": "getVersion()", +"0d8ea778": "updateModelOperator(bytes32,address)", +"0d8f8a90": "getRawFundBalancesAndPrices()", "0d8f9cee": "disableToken(address,address)", +"0d8f9f7f": "getContinuousMintReward(uint256)", "0d8fbe23": "getDigitFromUint(uint256,uint256,uint8)", "0d8fd836": "ExeniumToken()", "0d9019e1": "RECIPIENT()", "0d9029ea": "Cryptodraw()", "0d9049f2": "createOffer(uint256,uint256,string,uint256[])", +"0d90a0f2": "fauct(uint256)", +"0d90b10a": "prev(bool,bytes32)", +"0d912442": "isERC1155TokenReceiver()", +"0d926f7a": "licenceShop(bytes2)", "0d927924": "XPCoin()", "0d92b691": "transferDefaultPercentsOfInvested(uint256)", "0d92d381": "ElectricQueue()", @@ -7776,22 +14147,45 @@ "0d92e3e8": "claimedTokens()", "0d9332e2": "setMinContractBalance(uint256)", "0d93afef": "revokePermissionBatch(address[],string)", +"0d93e609": "ticketPrice(uint256)", +"0d94a0c2": "PayoutEvent(uint256)", +"0d94a7c3": "vSPYToken()", +"0d94b174": "transferMintFeas(uint256)", +"0d94d50b": "getVolumeTrendData()", "0d9543c5": "donateAs(address)", +"0d95508d": "nuke(uint256)", "0d955209": "ARTWORK_STARTING_PRICE()", "0d95ccc9": "setPreSale(bool)", +"0d95e054": "operatorApprovals(address,address)", +"0d95e3c6": "viewLoanRequests(uint256,uint256)", "0d963235": "setGrowthBump(uint256)", +"0d9639ba": "getReserved()", +"0d96cc30": "froms(uint256)", "0d973d2e": "getTimestampProposal(bytes32)", +"0d979791": "Play(uint256,uint256,address,uint256,uint256,uint256,uint256)", "0d97f395": "redeem(string,bytes32)", +"0d981ef3": "shareTokenOracle()", +"0d9824f0": "payPegDistribution(address,uint256)", +"0d98baf2": "getNextPatchTime(uint8,address,uint256)", "0d98dcb1": "getTransferPreSignedHash(address,address,uint256,uint256,uint256)", +"0d9979e2": "registerMon(uint256,bytes,bool)", "0d997dc3": "setdivsforall(bool)", "0d99bbec": "calculateUSDWithBonus(uint256)", "0d99edbf": "presaleWeiLimit()", "0d99f40a": "setInvestors(address)", +"0d9a5219": "_burnFeeTotal()", "0d9b2730": "FireXToken()", +"0d9b5651": "FrozenFundsSend(address,bool)", "0d9b71cc": "setParter(address,uint256)", +"0d9be7dd": "auction__startStake()", +"0d9c71aa": "smoothingFactor()", +"0d9cc275": "mintSingle(address,string)", +"0d9cdf4f": "testApproveChangeFunction()", +"0d9cfce9": "_setTokenAddressPair(address,address)", "0d9d19b9": "joinMatch(uint256,uint256,string)", "0d9db3f1": "VertesCoin()", "0d9e16d1": "Alphonic()", +"0d9e7fbe": "totalTokensUnlockedAt(uint256)", "0d9e8cab": "winnerLast(uint256,uint256)", "0d9ec228": "_price_token_ICO3()", "0d9f2817": "getJobSkillsCategory(uint256)", @@ -7800,9 +14194,14 @@ "0d9fcb03": "juegoSillaConsensys01(address)", "0da03197": "_build(uint256,int256,int256,uint8)", "0da04fa6": "Smrtoken()", +"0da06b62": "requestVoucher_ETH_TKN_WithPermit(uint256,address,uint256,uint256,uint8,bytes32,bytes32)", "0da072a8": "newMediaTokenCreated(string,address,string)", +"0da10548": "withdrawExtraFund(uint256)", "0da108ff": "JointICOBonusAmount()", +"0da1157d": "withdrawFinalGain(address,address)", +"0da13bec": "minOut(address)", "0da1eb03": "deleteHiddenPosition(uint32,int64,bytes16)", +"0da24229": "_getDisputeManager()", "0da24421": "bytesMemoryArray(bytes)", "0da2c5f0": "setBuyLimits(uint256,uint256)", "0da2e088": "upgradedContractAddress()", @@ -7811,59 +14210,116 @@ "0da304b0": "AssetToken()", "0da3bec6": "addToCategorie1(address,address)", "0da3e613": "EthFactory()", +"0da449d1": "ovmSETNONCE(uint256)", +"0da45188": "availableToClaim(address)", +"0da4698b": "addEth(address,uint256,uint256,uint256)", +"0da47e0a": "stableCoinRewards(address)", +"0da48c4d": "requestAsyncExchangeRateResult(string,string,string,uint256,string)", +"0da4f339": "withdrawAllDeposits()", +"0da4f717": "getPizza(uint256)", "0da4f991": "createContinuousSaleContract()", "0da4fc46": "unMutex()", "0da590d4": "withdrawDevFees()", "0da5f845": "unBlacklistAccount(address)", +"0da61ed2": "unlock(uint256,address,bytes32)", +"0da665a4": "set_num(uint256)", +"0da685f2": "findListDistance(int256)", +"0da6d8c1": "getDivdLoad()", "0da719ec": "onERC998Removed(address,address,uint256,bytes)", "0da76f1c": "externalDecline(uint256,bytes32)", "0da84bc1": "newIntegrityFeeProposal(uint256,string)", "0da86f7f": "JUSTed()", "0da877d3": "getWeis(uint256,uint256)", "0da8ba5d": "checkRecentInvestments(address)", +"0da9137d": "stakeMythic(uint256)", +"0da930b7": "allocatedStakingRewards()", "0da95761": "upgrade(string)", "0da97716": "isSignedByAlex()", "0da9e3d7": "tokenIcoAllocated()", +"0daa02c5": "isPoolDeployed(string,address,uint8,address)", +"0daa2e66": "AMBASSADOR_ROLE()", +"0daa4206": "paint(uint256[],uint256,string)", "0daa431a": "currentstageplayer1()", +"0daa5095": "setDapps(uint256,string,string)", "0daa5703": "set(bytes32,bool)", "0dab6e08": "getallowedContracts(uint256)", +"0dabef49": "changeDomainOwner(bytes32,address)", +"0dabfef3": "setPerpetualAltruismCut(uint256)", "0dac3d99": "deadlineTwo()", +"0dac9962": "setNftFactory(address)", +"0dacf047": "predictionEndTimes(uint256)", +"0dad1d97": "setAllAdresses(address,address,address,address,address)", +"0dadf073": "clearPool(uint256)", "0dae2a63": "DTXToken()", +"0daef321": "onlyGov()", "0daf233b": "agingTimeByStage(uint256)", "0daf37e6": "Sales(address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", +"0daf4151": "gen0Config(uint32)", +"0daf680c": "Transfer(address,address,uint32)", "0daf7a8c": "setBlacklistInternal(address,bool)", "0daf96f9": "ThaiBahtDigital()", "0daf999a": "heroContract()", "0dafc58f": "Compound_now_Accrued_interest()", +"0dafd57d": "setFLReceiverImpl(address)", +"0dafea56": "checkStart(uint8)", "0db02622": "ownerCount()", "0db03955": "fundingProcessed()", "0db0624a": "z_Determinations()", +"0db063b0": "canModifyVault(address)", +"0db065f4": "verified(address)", +"0db0b3f2": "minimumPriceIncrementInBasisPoints()", +"0db0bc37": "bottomCommissionIndex()", +"0db0ca29": "withdrawTokenPool(address)", +"0db12470": "thisFunctionWillHardRevert()", +"0db12fad": "withoutReturnValue(address)", "0db14e95": "getStakedAmount(address,address)", +"0db1a483": "withdraw_ETH(uint256)", "0db1b335": "getNextMaximumPlayers()", +"0db1d138": "epochBaseRate(uint256)", "0db293cb": "depositDekla(uint256,uint256,bytes,uint256)", +"0db319d5": "UserTipped(address,bytes32,uint256)", "0db38253": "DEFAULT_CLIFF()", "0db38f66": "BetChampion(uint256)", +"0db3971b": "MAX_VESTINGS_PER_ADDRESS()", "0db3be6a": "decrementOpenInterestFromMarket(uint256)", +"0db3ff45": "versionOf(address)", +"0db43968": "innerTransfer(address,uint256)", +"0db494ec": "maximumMultiplier()", "0db49c84": "TokensSold(address,uint256,uint256,uint256,uint256,uint256)", +"0db4b4e5": "minReleaseAmount()", "0db4bad0": "claimDate()", "0db5db26": "weiToOwner(address,uint256)", +"0db60f37": "redeemFeeNumerator()", "0db6a786": "SALES_DEADLINE()", "0db6ba9b": "debugGetNumPendingSubmissions()", +"0db6dff7": "setBattleContract(address)", "0db71d53": "createCrowdsale(uint256,uint256,uint256,uint256)", "0db73c72": "noevent()", "0db74aaa": "getInvestorBalance(uint256)", "0db75ab9": "UsingAVirtualStruct()", "0db79003": "addWineryOperationByRegulator(string,string,string,string,uint256,uint16,string)", +"0db7eb0b": "getBondPremiumRate()", "0db81580": "purchaseAd(uint256,string,string)", +"0db8d01e": "userShares()", +"0db97020": "setSharePayout(uint256)", "0db9d891": "icoEndOfStageA()", "0dba2400": "addToMidnightPrize()", +"0dba3c89": "subBalanceOf(address,uint256)", +"0dbb4afc": "FPContractsList(uint256)", "0dbb78ce": "showPoolMembers(uint256)", +"0dbbc0aa": "v2Token()", "0dbbc14c": "endOfROSCARetrieveSurplus()", +"0dbc27eb": "findOnePercentb(uint256)", +"0dbc6b3e": "SAFU()", +"0dbc6c55": "PROPOSERS_INCREASER()", +"0dbc8497": "boldPerBlock()", +"0dbc8afa": "icv()", "0dbcca89": "computeinterval(uint256,uint256)", "0dbce4dd": "registerCandidate(string,string)", "0dbd5270": "numberOfBackers()", "0dbd5e81": "Send_Data(uint16)", "0dbda70b": "angelOnLeaderboards(uint64)", +"0dbde3e3": "maxDeptRatioPercent()", "0dbe671f": "a()", "0dbea6d0": "robotRefund(address)", "0dbedee7": "getNFTbyTokenId(uint256)", @@ -7874,8 +14330,10 @@ "0dc03ec7": "INFLIV(uint256,string,uint8,string)", "0dc06e50": "postTX(address,uint256,uint256)", "0dc081c5": "tokenTransferOwnership(address)", +"0dc0ab4c": "getAsyncEventResult(string,string,string)", "0dc10a60": "advisorsAddress()", "0dc115c8": "coinanxtemp()", +"0dc167a5": "_undelegateStake(bytes32,address,uint256)", "0dc16a56": "getDepotEth(address)", "0dc174bd": "track(address)", "0dc1819f": "purchase_tokens()", @@ -7885,215 +14343,406 @@ "0dc26492": "bankPercent()", "0dc2e439": "setBZxAddresses(address,address,address,address)", "0dc30397": "counterAppeal(uint256)", +"0dc32299": "InviterWithDraw(address,uint256)", "0dc3279d": "maxnumber()", "0dc32b72": "EtherStopLoss()", +"0dc36467": "addPPIE(address)", +"0dc36b91": "mintNonFungible(address,uint256)", "0dc36f2a": "migrationAgentCandidate()", +"0dc50f7c": "startCrowdsale(uint256,uint256,uint256,uint256)", "0dc5bffb": "crowdsaleTokenAmount()", +"0dc6787b": "accountToPayLevel(address)", "0dc6bae5": "allowFreezeBypass(address)", "0dc6c392": "Puttu()", +"0dc6c948": "SetSell(uint256[],uint256[])", +"0dc6d81e": "politicianIndexToApproved(uint256)", +"0dc6f69c": "burnallow()", +"0dc6f847": "numberOfMembers(uint256)", +"0dc6ff08": "PLEDGE_RATE()", +"0dc716c8": "JLP()", "0dc7bd07": "testBurnAuth()", +"0dc7faa2": "memberWithdrawDividends(uint8)", +"0dc85f54": "maximumContributionAmount()", "0dc8b5a8": "shortenPreIco(uint256)", +"0dc8c810": "TokenSaleStart()", "0dc8f435": "Party(address,uint256)", +"0dc93285": "odsPerBlock()", "0dc96015": "getVotes()", +"0dc98bb8": "sashimiBorrowerIndex(address,address)", "0dc9c838": "changeSaleTimes(uint256,uint256)", +"0dc9da02": "inforValidator()", +"0dc9de85": "affilliateWithdraw(address[])", "0dc9ebfe": "FoundationAddr_()", +"0dc9fac4": "verifyXtokenSwapSynMint(uint256)", "0dca59c1": "debt()", "0dca7ed8": "winningOption(uint256)", "0dcad340": "getCitizenLocation(address)", "0dcaf3e2": "test_setupSucceeded()", "0dcb4627": "_addPendingRequestId(uint32)", +"0dcba2d1": "kol()", +"0dcc1dc6": "BBNOPerBlock()", "0dcc59e6": "DEFROST_INITIAL_PERCENT_OWNER()", +"0dccc9ad": "_uri()", "0dccca72": "showFPLocktime()", +"0dcce021": "storeT2TransactionIdAndRoot(uint256,bytes32)", "0dccfde4": "WithdrawProfitFunds(uint256,address)", +"0dcd404b": "artblocksContract()", "0dcd772c": "AmountSent(address,uint256)", "0dcd7a6c": "sendMultiSigToken(address,uint256,address,uint256,uint256,bytes)", "0dcd9759": "PPToken(uint256,string,string)", +"0dcdbc82": "is_expired(bytes32)", +"0dcdd285": "setword(string)", +"0dcde5f5": "getReportingFeeDivisor()", "0dcdefa8": "playThreeDiceTotal(uint256,uint256)", "0dce06c1": "goalOfState(uint256)", +"0dceab8a": "changeTradingWallet(address)", "0dcec63d": "updateEtherPrice(uint256)", +"0dcef01e": "setTokenA(address)", +"0dcf1417": "withdrawRate()", "0dcf298b": "pollExists(bytes32)", "0dcf38a9": "FirstPaySend(uint256,address)", "0dcf4b8f": "totalContribution()", +"0dcfa3f0": "pricepertoken()", +"0dcfb018": "_xor(bytes32,bytes32)", +"0dcfbbaf": "setMinimumCoolingSeconds(uint256,uint256)", +"0dcfd2fe": "getRewardsMultiplier(address,uint256)", +"0dd06d83": "yveCrv()", +"0dd09200": "refreshOpen(bool)", "0dd0a042": "lock(bool)", "0dd0cf9e": "founderAdress()", "0dd12d38": "moderatorTransferFrom(address,address,uint256)", +"0dd16fd5": "setCreatorFee(uint256)", +"0dd1c828": "_isValidKey(bytes32)", "0dd1d147": "ActionCompose(address)", +"0dd1e679": "canChangeAccountants()", +"0dd22103": "setOmssToken(address,uint256)", +"0dd262ff": "setEVMChainID(uint256)", "0dd27120": "exchangeState()", "0dd2d96c": "doFinalize()", "0dd2d9c0": "Rookcont()", "0dd30c81": "toB32(uint256,bytes,uint256)", "0dd327fe": "FundsKeeper(address)", "0dd32910": "welcomeMsg()", +"0dd35701": "getDelegation(uint256)", +"0dd3968d": "setDataLabel(string)", "0dd3e1b1": "CNT_Crowdsale()", "0dd3fd03": "buySpins(uint256)", +"0dd4c9ff": "CrowdDistribute(address,address,uint256)", +"0dd4cf9a": "getPrimeByTokenId(uint256)", +"0dd4e3db": "tokenOfOwnerLatest(address)", +"0dd5127d": "round(bytes32)", +"0dd57750": "issueRewards(address)", +"0dd5b3c5": "stars()", +"0dd5d2f4": "getUserInvitarionDta(address)", "0dd5db48": "startPreSale1()", "0dd5e582": "masterTransferFrom(address,address,uint256)", "0dd5ee1b": "verify(address,bytes32)", "0dd636ef": "setBuyDividendPercentageFee(uint8)", "0dd63ba3": "setIntArrayIndex(bytes32,uint256,int256)", +"0dd664a1": "TokenSet(address,address)", "0dd6a4ad": "addOversight(address)", "0dd6eae1": "setCourse(uint256)", +"0dd72a79": "metaFulfillAndAccept(bytes,uint256,address[],string,uint256,uint256[],uint256)", +"0dd73b5e": "payToken(address,address,address,uint256)", +"0dd7531a": "ROOT_CHAIN_ID_BYTES()", +"0dd75b57": "isSupplyCapped()", +"0dd75fa2": "usdt_decimals()", +"0dd7ea1d": "setPairAddresses(address,address)", "0dd84392": "setAllowance(address,address,uint256,uint256)", "0dd8cdbb": "initRegistryData(address,address,address)", "0dd93b56": "restartAuction()", +"0dd94b96": "tokenExchange(address)", "0dda20d1": "sellCrystalDemand(uint256,uint256,string,string)", "0dda350f": "dumpdivs()", "0dda507e": "manualFinish()", +"0dda60cc": "DYDX_MARGIN()", +"0dda7299": "totalBoostedSupply()", +"0ddb3aae": "setWhitelistingMode(bool)", "0ddc4a94": "WHOLESALE_TOKENS()", +"0ddc5223": "approve_490(address,uint256)", "0ddcc528": "Testable(bool)", +"0ddcecf0": "unsetLocator(address)", "0ddcfe8e": "checkAddress(address)", "0ddd0824": "checkHash(bytes32,bytes32,uint256)", +"0ddd4c87": "stickerType()", +"0ddeaa5c": "transmute(uint256)", "0ddeb632": "buy(bytes32,uint256)", +"0dded952": "getOrderRoot()", "0ddeeb4f": "tokenSaleUpperLimit()", "0ddef58d": "isUnfrozen(address)", "0ddf0bfd": "Cryptogs()", "0ddf0c41": "updateCandidate(address,string,string)", "0ddf78c2": "divForEthertoteDevelopmentWallet()", +"0ddfaaef": "_newVote(bytes,string)", "0de0271e": "paymentReceived(address,uint256)", +"0de02e6d": "getMarketingAndSalesAddress()", +"0de0355f": "pendingHDO(uint256,address)", +"0de040a9": "minBetLevel1_2()", "0de04691": "testCreateWithParentForeign()", "0de0b1bc": "giveBirthByUser()", +"0de15fd9": "collateralCurrency()", +"0de1e6fd": "convertRTKIntoRTKLX(address,uint256,uint256)", "0de1f4c1": "CreateCodeToken(uint256,string,string)", +"0de2178c": "getUnstakingFee(address)", +"0de217b5": "VoteRevoked(address)", +"0de26707": "unregisterAddressesProvider(address)", "0de2b2d8": "openPosition(address[11],uint256[10],uint32[4],bool,bytes,bytes)", "0de3513a": "test_validRuleChange()", +"0de371e2": "eETH()", "0de39733": "activateFlat(address,uint256)", "0de3b100": "VoteForProposal(uint256)", "0de41aa4": "checkIfAddressIsWhitelisted(address,address)", "0de41e45": "lockBegunAtBlock()", +"0de51d35": "totalPresaleContributed()", "0de54c08": "setUpgradeController(address)", +"0de58615": "feesAvailable(address)", +"0de5d89d": "uni_mir_ust_lp()", +"0de5dc13": "hazers(address)", "0de607c3": "makeSubscriptionID(address,uint256)", +"0de62527": "findPercentToBurn(uint256)", +"0de631ba": "PAYOUT_DIVIDER()", "0de6aa7f": "getOneTimeCostsPaid()", +"0de73577": "roadRealtyContract()", "0de78a7f": "removeEggFromSale(uint256)", +"0de7bf52": "pendingBRD(address)", +"0de7e440": "ExternalAllowdContractGen0(uint256)", +"0de8364a": "Freezed(address)", +"0de839e1": "adminWithdrawBASE(address,uint256)", +"0de8c0ac": "rigel()", +"0de907a5": "BurnT808(uint256)", +"0de92ba2": "OwnershipChange(address,address,bytes32)", "0de94e4a": "HodlEth(address,uint256)", "0de96dff": "giveBack()", +"0de974fc": "refundAll(uint256,uint256)", +"0de99491": "shareProfit(address)", +"0de9a892": "calculateSTYKReward(address)", +"0de9ae7a": "matchingHouseBonusRollUp(address,uint256,address[])", "0de9b825": "sellShip(uint256,bytes32)", +"0de9c1a4": "ContractCreated(address,address,uint256,string)", "0de9cacd": "reCalc()", "0dea35bf": "playerBet(uint256)", "0dea38b6": "VESTING_TIME()", +"0dea8f0c": "Own3r()", "0deaf3f8": "claimNextReward(address,uint256)", +"0deb866e": "getVoteDisputable(uint256)", +"0debe1d5": "AAVE_ADDR()", "0dec1c23": "requestDetachment(uint256)", "0dec5d85": "initializeCrowdsale()", +"0decb014": "pendingMany(uint256,address)", "0ded195e": "freezeTokensOfOneUser(address)", +"0ded3e60": "votingSignatures(address,bytes4)", "0ded7f62": "secondBonusEnds()", +"0dedb40e": "profilePictureExists(bytes32)", "0dedffb8": "feedAndMultiply(uint256,uint256)", "0dee302e": "transferToRef(address,uint256)", "0dee34ed": "tokensaleStageAt(uint256)", "0dee3863": "nameEntriesCount(bytes32,uint16,bytes32)", "0dee4af0": "doThrow(uint256)", +"0deed0c5": "homet(address,uint256,address)", +"0deed6a6": "saleMode()", +"0deef44f": "setUnbaseUniswapLPContract(address)", "0def3866": "updateChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"0defebeb": "poolMap(bytes32)", +"0df01ced": "AirmoonPerBlock()", "0df04802": "_7_russkayaRuletka()", "0df07980": "secondLevelPrice()", "0df0de11": "ownerChangeBuyerfee(uint256)", "0df104d7": "EtheeraToken(address)", +"0df12189": "setFunder(address,bool)", "0df12532": "setpricefactor(uint256)", "0df18942": "hsub(uint128,uint128)", "0df19d35": "lockup(address)", "0df22268": "CryptoSanguoToken()", "0df23e5b": "saleCounterThisPhase()", +"0df2981f": "ctoken1()", "0df2dcd2": "OdinToken()", "0df3a342": "_coldStorage()", "0df4135a": "CMCT()", "0df428f0": "GoldenFleeceToken(uint256)", +"0df51441": "approve_458(address,uint256)", +"0df5202f": "nrtManager()", +"0df5a651": "divCheck()", "0df62a33": "Lilbank()", "0df63210": "DOMAIN_SEPERATOR()", +"0df69338": "governanceVote(uint256,uint256,uint256,bool)", +"0df6ed13": "getUnstakeRequestsLength(uint256)", "0df71602": "setWinner(uint256)", +"0df72cf9": "transferFrom_multi(address,address,address,uint256)", "0df76370": "createInvoicingAddress(string,string)", +"0df7649e": "lockedAddress()", +"0df813b9": "page()", "0df8cbfe": "isCluster()", "0df8e481": "setassetPrice(uint256)", "0df9178f": "LimeEyes()", +"0df94764": "submitProposal(address,bytes,uint256)", +"0df94ef2": "userAvgPrices(address)", +"0df96ef6": "removeBorrowAssets(address,address[])", +"0df99ff1": "periodNumber()", +"0df9b488": "subBFun()", "0df9d568": "CentraWhiteList()", "0dfa1140": "_RaffleDraw()", "0dfa71ae": "salesAgent()", +"0dfab4db": "deviation(address)", "0dfad849": "TokenSale(address,address,address,address)", "0dfb0297": "changePriceSelectFight2Death(uint256)", "0dfb6615": "user(bytes32)", +"0dfbbab3": "Transaction_Item(address,uint256,uint256)", +"0dfbcff6": "getBlockBlockhash(uint64)", "0dfbdcc5": "lethalBonusAtHits()", +"0dfc09cb": "setGroupSize(uint256)", +"0dfc216d": "rewardEscrowV2()", "0dfc2bcd": "originalFunds()", "0dfce266": "setCovman(address)", +"0dfcf67d": "LogReferrerBanned(address,address,string)", "0dfd085a": "ICOBeginsAt()", +"0dfd0e73": "tokensInOneDollar()", "0dfd45f9": "removeHelper(address)", "0dfd799c": "SponsoredLink(string)", "0dfdcb76": "setAuctionWinnerMessageHash(bytes32)", +"0dfe1681": "token0()", +"0dfe22d5": "configure(address,uint256,uint256)", +"0dfe2a83": "_burnPercent()", +"0dfec796": "faucetStatus()", "0dff5cb9": "bop()", +"0dff8114": "_addTroveOwnerToArray(address)", +"0e001b38": "lastMove()", "0e001ec0": "balanceOfContractFeeToken()", +"0e005dfc": "founderTwo()", +"0e00d3a2": "networkIdCount()", "0e011262": "mockWhiteList()", +"0e01198b": "flap()", "0e014cf8": "viewBalance(address,address)", +"0e01bff8": "getAndUpdateEffectiveDelegatedByHolderToValidator(address,uint256,uint256)", +"0e023215": "tokenOutput(address)", "0e0280d0": "bookRoom(string,uint256[],uint256,address,bytes32)", "0e0290a4": "_3_orientation()", "0e037cc0": "bulkRemove(address[])", +"0e038813": "devWalletAddress()", +"0e039916": "clones(uint256)", +"0e03de65": "approve_268(address,uint256)", "0e03f276": "setLLV_edit_7(string)", +"0e03feee": "allTokenDeposits_(address)", +"0e040739": "withdrawFromPool(uint8,string,uint256)", +"0e043fc9": "addTokenPrice(uint256)", "0e04a7d8": "isGameOver()", +"0e0538b5": "isSecondaryOwner(address)", "0e05a512": "superVoteAgree(address)", +"0e05ae75": "OracleChanged(address)", "0e0643ae": "EvTokenAdd(uint256,uint256)", +"0e06725e": "unlock(string,uint256,uint8)", "0e06e7ef": "NFOCoin(uint256,string,string)", +"0e06f2e7": "setNestPrice(uint256)", "0e0701be": "test_oneValidEqStringUint(int256)", "0e07419c": "ConversionStarted(uint256)", "0e07658b": "eliminate(uint256)", +"0e07ebf5": "lastGame(address)", "0e07ef81": "registerNameXname(string,bytes32)", "0e088c98": "cancelChainlinkRequest(bytes32,uint256,bytes4,uint256)", +"0e08b0e3": "totalClients()", +"0e094434": "SaleContribution(address,address,uint256)", +"0e09461d": "approveCodeUpgrade(address)", +"0e099348": "swapETHForERC20Token2()", +"0e09a64c": "ownerDoAccounting()", "0e0a0d74": "getAmount(bytes32)", +"0e0a217b": "EndTimestampUpdated(address,uint256,uint256)", +"0e0a5968": "updateFor(address)", "0e0a6f0c": "getHours()", "0e0ac84c": "QBASE()", +"0e0ad6cd": "managementCompany()", "0e0afb86": "getKYCVerificationContractAddress()", "0e0b3519": "rateTierHigher()", +"0e0b5de1": "BUY_SELL_DELAY()", +"0e0b6eb5": "takeWithBlock()", +"0e0ba84b": "unstakeMUNAndReceiveMUS(uint256)", "0e0bc104": "computeNextGen0Price()", +"0e0bfb49": "swapRatio()", "0e0c3f58": "super_transfer(address,uint256)", "0e0c8241": "MAXIMUM_LOOP_BOUND()", "0e0d3567": "highestAddressReserving()", +"0e0d8cda": "checkBlockReward()", "0e0d946b": "CyberPayToken()", "0e0dbd72": "updateToSendFromStorage(address)", +"0e0ddbe3": "getDowntimeCostLRC(uint256)", "0e0e26da": "getRemainShareAmount()", "0e0e4acc": "LIANG(uint256,string,string)", "0e0e73a8": "next_round_players()", +"0e0efa94": "isGloballyTrustedProxy(address)", "0e0f05a5": "executeRaiseCapital(uint256)", "0e0f1f00": "allocationAddressPreICO()", "0e0f55d0": "RewardOrder(uint256,uint256)", "0e0fec9f": "Arbitrage()", +"0e0ff0f8": "EventTransform(address,uint64,uint64)", "0e1087c3": "getMarketMakerFunds()", "0e10e99d": "Vault(bytes32)", "0e10f1ae": "X2()", +"0e10fc29": "testGetAccountValues_SupplySummationOverflow()", "0e114c89": "setBonusAffiliate(uint256,uint256)", "0e11624b": "crowdsaleBalances(address)", +"0e1211ea": "toJSON(uint256,uint256)", "0e136b19": "deprecated()", "0e137368": "getBorrowInfo(uint256)", "0e13af5d": "lockedTokensWallet()", "0e13b9af": "getValue(uint8,uint8)", +"0e13e4c0": "callDoEmit(string)", +"0e141493": "allowbuy()", +"0e1421f1": "getTokenSaleProjectDev(uint256)", +"0e1424b5": "descendOrderList(uint8,uint256,bytes32)", "0e1456c0": "maxPreSale2Token()", "0e149b52": "RBRToken()", "0e14a376": "deleteAddress(bytes32)", +"0e14c0ff": "sm_lastBalance()", "0e14f955": "readyTobreed(uint256,bool,uint256,bool)", "0e153d48": "MarketStake(address,address,address,address)", "0e15561a": "totalRewards()", "0e1565c2": "getClaims(string)", "0e15dc89": "sizeOf()", "0e169119": "grantAccess(bytes32,address,string)", +"0e169edf": "withdrawFromExtension(uint32,bytes,uint256)", +"0e16cd12": "pepToken()", +"0e16e88a": "CertificateRedeemed(string,uint256,address)", +"0e174391": "getPoolShareAssym(address,uint256,bool)", +"0e18b681": "acceptAdmin()", "0e18d11e": "changeFunder(address,address)", "0e18ea3c": "fuoco()", +"0e1908ad": "approveOperator(address,address,uint256)", "0e19bac1": "MOBILINK()", "0e19f74f": "makeDeposit(uint256,address,address,address)", "0e1a0217": "boolOrRevert(bool,uint256)", "0e1a0399": "calculateWithdrawalAmount(uint256)", +"0e1a5e90": "tokenSupplies(address[])", "0e1a9e3f": "getJobSkillsArea(uint256)", +"0e1aba8f": "presaleParticipantWhitelist(address)", "0e1ac81f": "natecoin(uint256,string,string)", "0e1ae0e4": "RateUpdated(uint32)", "0e1af57b": "getScore(uint256)", +"0e1b26c6": "activePhase()", "0e1b39fb": "Wallet()", +"0e1b8db4": "requiredVerifications()", +"0e1b9b0e": "ANIMATION_COUNT()", +"0e1bc0ee": "getReferrerAddress(uint256)", "0e1c0188": "errorTickerQueryError(string,bytes32)", "0e1c2d46": "deliveryVSpayment(bytes32,uint8,bytes32,bytes32)", "0e1c6491": "getTotalBettersForFighter(address,address)", "0e1ca8a5": "Oraclize()", "0e1cdd2d": "getStandardComponent(uint256)", "0e1cfd97": "tokensub(address,uint256)", +"0e1d0e67": "getActivateAtBlock()", "0e1d2ec8": "isUpdatable()", "0e1d88fc": "addTender(uint256,uint256,address,uint256)", "0e1da6c3": "claimTimeout()", "0e1e1d0f": "removeAuthorized(address,address)", "0e1e3914": "coreSupply()", "0e1e56f7": "Tix()", +"0e1f5372": "getUserLastWithdraw(address)", "0e1f6d3b": "DIGC(address[],uint256[])", +"0e1f90f5": "acceptPendingReporter()", "0e1fa28f": "containMinValueFromOther(uint256,address)", "0e1fd315": "changeWhitelistStatus(address[],uint256[])", +"0e1ff22e": "getAllNFTTokens()", +"0e202827": "lastsent()", "0e20ebe2": "right96(uint256)", "0e213129": "ZestCoin()", +"0e213a3d": "getRewardForDuration(uint256)", "0e216954": "ReturnEthToEtherhero()", "0e21750f": "setFund(address)", "0e219339": "getContractHash(string)", @@ -8101,196 +14750,357 @@ "0e21c886": "OWNERS_TOKENS_AMOUNT()", "0e21f784": "getCoverImage(address,uint256)", "0e21fce3": "Suggest(string)", +"0e228384": "fundingGoalInToken(uint256)", "0e2286d3": "rdiv(uint256,uint256)", +"0e2289a1": "setProtester(address,address,address)", "0e22dc5b": "getAllCommentIdsByAd(uint256)", +"0e22feef": "isValidOrder(uint256[5],address[2],uint8,bytes32[2])", "0e2318cb": "BonumFinancialTokenPreSale(uint256,uint256,address,address,uint256)", +"0e2334a3": "setMintHelper(address)", "0e234cd4": "countBonus(uint256)", "0e2350ba": "TopCoinSaleClosed()", +"0e2379f7": "getTotalTokensRemaining()", +"0e237e42": "current_pool()", "0e239679": "SputnikToken(address)", "0e2451c7": "Lilith()", "0e24c52c": "register(string,string,string,string)", "0e24c810": "calcAmountWithBonus(uint256,uint8)", +"0e250842": "getBnbToTokenInputPrice(uint256)", "0e2562d9": "getAccountAddress()", +"0e256a5e": "addWhitelistAddresses(address[])", "0e25b620": "addFreeze(address)", +"0e260016": "registerProvider(address)", +"0e262eda": "withdrawZILD(uint256)", +"0e2636a3": "CLOSED()", "0e263906": "transferToBranch(address,uint256)", +"0e2659d1": "batchCollect(address,address,address[],uint256[])", +"0e26bb1c": "isAddressWhitelistedTo(address)", "0e26fb41": "SeniumSupply()", "0e27324d": "approveKYC(address)", "0e274eab": "pullTokens()", "0e275b49": "artworkSaleCount()", +"0e27675f": "toFP(int256)", +"0e27a385": "destroyBlockedFunds(address)", +"0e27b279": "setUniswapPathsToUsdc(address,address[])", "0e27e3df": "removeConsumer(address)", "0e2833eb": "random(uint8,uint8)", "0e288064": "setManyBonusExtra(address[],uint256)", "0e28bc4a": "CanceledAuctionEvent(address,address,uint256,uint256)", "0e2916e1": "requestClosingChannel(uint256)", +"0e297b45": "registerOnly(uint256,address,uint256)", "0e2984d1": "Cancel(uint64,address,address,uint256,int256)", +"0e299487": "withdrawUniswap(address,address)", "0e29df22": "sendEther()", "0e2a05c8": "delayOfICO2()", "0e2a273f": "getCandidateIndexArrayLength()", +"0e2a451a": "updatePrescription(uint256,uint256,uint256)", "0e2a9237": "r15Backers()", +"0e2a9c02": "motOwner()", "0e2ae77c": "addVesterManager(address)", "0e2b75cc": "setWhitelistedMemberTypes(uint256[])", +"0e2c5844": "depositUSDTWithSeller(uint256,address)", "0e2cfe93": "getPercent(uint8,uint256)", +"0e2d1482": "RigelRemainingForSaleInICO()", "0e2d1a2a": "vestedBalanceOf(address)", "0e2d27cd": "claimUnsoldCoins()", "0e2dc949": "TIER_3_BUYIN()", "0e2dce69": "Play()", +"0e2de696": "lockallcheck()", "0e2df9aa": "Withdraw(address,uint256,int256)", "0e2e4037": "removeOwnersConfirmations(address)", +"0e2e44e8": "checkExists(uint256)", "0e2e4ce8": "maximumLockYears()", "0e2ebe6c": "GetPoolInformation(address)", "0e2f0a0f": "weiReceive()", +"0e2f2d99": "BitwordsCutChanged(address,uint256)", "0e2f5fb3": "getThree()", +"0e2f6e41": "planetPerBlock()", "0e2f8058": "setBCFContractAddress(address,address)", "0e2f94a6": "RegionsToken()", +"0e2fb031": "Paused(bool)", "0e2fb51f": "addinverst(address,uint256)", +"0e2feb05": "uniswapAddress()", "0e30643f": "MemberChanged(address,uint256)", +"0e3088ea": "transferWETH()", +"0e30963c": "exchangeWithVirtual(bytes32,uint256,bytes32,bytes32)", +"0e30adb4": "exerciseACOToken(address)", "0e30cda7": "getTotalCoinsAvailable()", +"0e311bff": "NoteCreated(address,uint256,uint256)", +"0e313e98": "nftBalanceOf(address)", "0e316ab7": "removeSigner(address)", +"0e31f07b": "Lock(address,uint256,uint256,uint256)", +"0e31f6c2": "maxVotingPeriod()", +"0e327ee8": "getRewardAddress(address)", "0e32a720": "sendMarketByOwner(address,uint256)", +"0e330106": "setbountyWallet(address)", "0e336f00": "getSeedsSinceLastHatch(address)", +"0e337219": "FXS_FRAX_UNI_LP()", +"0e339631": "AIRDROP_TOKEN_COUNT()", "0e33e181": "get_modulo_value(bytes32,uint32,uint32)", +"0e343648": "CampaignAdded(uint256,address,uint32,uint96,uint16,uint16,uint256)", +"0e343b57": "removeAdress(address)", "0e3484c1": "DelGift(string)", +"0e34c01b": "getMinDevFeeInWei()", +"0e34ce8b": "setDeviationThresholds(uint256,uint256)", "0e34df82": "openTicket()", "0e351605": "transfer_token(address[],uint256)", +"0e35191b": "get_athletes_by_range(uint256,uint256)", "0e3589d9": "DAILY_FUNDS_RELEASE()", +"0e359f16": "migrated(uint256)", +"0e35dc57": "interestInterval()", +"0e363c92": "depositTokenContract()", "0e366cbf": "ourLastJackpotWinner()", +"0e367cb4": "C(uint256,uint256)", +"0e368e36": "repeaters(uint256)", +"0e36b8b4": "thirmLP()", +"0e376d3d": "whitelisted_Private(address)", +"0e378994": "log(address,address,address,bool)", +"0e37d36f": "updateRewards(address,address)", "0e3802e9": "addRewardToken(address,uint256)", +"0e38069c": "availableEther()", +"0e385cd4": "OffChainPurchaseMade(address,uint256)", +"0e387de6": "SEND_MESSAGE_EVENT_SIG()", "0e388774": "setContractorImpl(address)", "0e38901a": "unvault(uint256)", +"0e389a77": "refundBountyReward(uint256,uint256[],address,uint256,address[],bytes[],uint256[])", +"0e38c32b": "setStakingPercentage(uint256)", +"0e391b5e": "SILVER_SNOWBOARD()", "0e39b210": "founders_1()", "0e3a04a7": "digitalcashToken()", "0e3a23db": "mineMany(address[],uint8[],bytes32[],bytes32[])", +"0e3a43c3": "ethPoolUsage()", "0e3a997e": "countPartnerPlayers()", "0e3ab61d": "startSale(uint256)", +"0e3aef00": "unlockERC777Tokens(address,uint256,bytes)", "0e3b70fd": "month48Allocated()", "0e3bc6ca": "BLOCKLAND()", +"0e3bc974": "tokenBalances()", "0e3be37d": "ToggleTransferAllowanceFor(address,bool)", "0e3c8068": "BotpyToken(uint256,string,string)", "0e3c9563": "privateIssue(address,uint256)", "0e3d2202": "feeFixed()", "0e3db9f2": "startNow()", "0e3e9a67": "FundsMigrated(address)", +"0e3ecf44": "GetProjectStatus(uint256)", "0e3f732a": "TheGame()", "0e3fd8c2": "getSolid(uint256)", +"0e402acd": "openBoxFromServer(address,uint256,uint256[],uint256)", "0e407bdd": "soldTokensMainSale()", +"0e4094b0": "collect_token(address,address,uint256)", +"0e40e8fa": "getAllocation(address,bytes32,bytes32)", +"0e40ee5c": "greaterThanUintPassTest()", +"0e412f5c": "getIARankDetailsByDate(uint64)", "0e414500": "setClaimingStart(uint256)", "0e417055": "address5()", "0e41c63b": "addHistory(uint256,address,uint8)", "0e420f42": "setEventResult(string,uint64,uint8)", +"0e4230a0": "addTokenConfig(address,address,string,uint256,bool,address[],uint8[])", +"0e423e24": "setWithdrawalFeeAddress(address)", "0e429ecc": "providerValue()", "0e4355d4": "validFactories(address)", "0e43806a": "Rental(address)", +"0e438373": "CreatePool(address,uint256,uint256,uint256,uint256,bool,address,bool)", "0e438ee5": "withdrawTeamToken()", "0e43d7c3": "getUserRoleBitmask(address)", "0e449cf9": "foundersTokens()", +"0e44b0cf": "govVault()", +"0e45a1b2": "isPeggedToEth(uint256)", "0e4649fd": "LogProcessedInterval(uint64,uint64)", "0e46695e": "sumHardCapICO2()", "0e468245": "pledgeEth(uint256)", +"0e471a77": "NewChallenge(address,uint256,address,string)", "0e473722": "volumeType4()", "0e4739b1": "_refulshFrozenInfo(address)", "0e476e27": "getten(string)", +"0e478b01": "claimTokenBehalf(address,address,address,uint256)", "0e479dc7": "getShop(address)", "0e47c259": "evolveByAtom(uint256)", "0e47c76f": "rotate(uint64,uint256)", +"0e49072d": "redirectInterestStream(address)", "0e496d25": "VICETOKEN_ICO_IS_FAKE()", "0e4983ff": "setSecondsAfter(uint256)", +"0e49a92e": "bid(uint32,uint256,uint256,uint8,bytes32,bytes32)", +"0e49dee8": "allowThirdpartyExecution(bool)", "0e4a4e8c": "fechVoteNumForCandidateByStage(address,uint256)", "0e4aed3f": "yearlyRewardPercentage()", "0e4b0ba8": "account2Address()", +"0e4b0c88": "rewardsMultiplier(address,uint256)", "0e4b10b6": "totalETHLimit()", "0e4b8389": "getEstKeyBlockNr(uint256)", "0e4c3aa6": "OrangeCirculateChain()", +"0e4c93fa": "getBYN(address)", +"0e4cf876": "durationOfMinTokenGetAmount()", +"0e4cfe97": "unbid(uint256)", +"0e4d2265": "claimBnbDivs()", +"0e4d22c2": "minterForOptionID(uint256)", +"0e4d4731": "pauseCapital(address)", "0e4d5919": "PHASE1_START_TIME()", +"0e4dc3df": "claimWRNandBonus(address)", "0e4debbc": "SHIT()", "0e4e0054": "isIcoFinshed()", +"0e4e411c": "setBurnFees(uint256,uint256,uint256)", "0e4e47cb": "claimAfter90days()", "0e4e5d93": "_bidERC20(address,address,uint256,uint256)", +"0e4e84ab": "_reInvestDividendPlan()", +"0e4fae5f": "depositCardsAndMintTokens(uint256[],address)", "0e5004e6": "_calcPhasesPassed()", "0e501834": "emergencyTransfer(address)", +"0e5042b0": "levRatio(uint256)", +"0e508e59": "whiteListFrom(address)", +"0e50c818": "newAccount(string,address,bool,uint256)", "0e5112a4": "get_dividend()", "0e51574f": "endGameRound()", "0e51c00d": "getPawnStatus(uint256)", +"0e520ba3": "compDeposit(address,uint256)", "0e5229b0": "addOwner(address,uint8)", "0e5263fa": "discountedTokensPerDollar()", +"0e52c876": "toggleRedeemable(address)", +"0e52ed86": "numDailyTraders(uint256,uint256)", "0e5356ec": "testEvents()", "0e536ff4": "ratifyMint(uint256,address,uint256)", "0e5376d6": "vars()", +"0e538bde": "getExchangeStates(address)", +"0e539254": "_III_()", "0e53aae9": "connectors(address)", "0e53bf67": "producedDiamondCaps()", "0e541185": "pauseBet(uint256)", "0e542f82": "refundOptions(address)", "0e54316f": "setSantaClaus(address)", +"0e546a1b": "stepLockend(uint8)", +"0e54a19b": "arePynthsAndCurrenciesSet(bytes32[],bytes32[])", "0e54a883": "setPublicSaleDate(uint256)", "0e54b872": "registerUser(string,address)", "0e54d1fc": "pruneShareholders(address,uint256)", "0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", +"0e5559dc": "pendingBSTForToken(address,address)", +"0e557a58": "setUpline(address)", +"0e55f043": "addAura(uint256)", +"0e5665e6": "submitPrices(address[],uint128[])", "0e5689bc": "getBidsNum(address,uint256)", "0e56f529": "guardarDocumento(string,bytes32,bytes32)", +"0e57d4ce": "recipients()", +"0e57e74e": "viewSaleCN()", "0e58369f": "registrator(address)", "0e583df0": "GEN0_STARTING_PRICE()", +"0e584512": "activateNftToken(uint256)", "0e587aee": "set_presale_arbits_per_ether(address,uint256)", +"0e588f40": "last_epoch_rewards()", "0e58d08c": "setInvestmentGateway(address)", "0e597ed9": "PreCrowdsale(address,address)", +"0e59b61a": "transferBountyReserveTokens(address,uint256)", "0e5a6c70": "peep()", +"0e5a7d81": "DissallowFreeze(address)", +"0e5a8c8a": "token_data_sources(uint256)", "0e5aaace": "initIcoRule()", "0e5aaffc": "getSellingItemByObjId(uint64)", "0e5c011e": "harvest(address)", +"0e5c1d0a": "claimBNB(uint256)", "0e5c6a3d": "_withdrawTo(address)", +"0e5c6f42": "unlockedTime()", +"0e5caf7e": "investmentsInEth(address)", "0e5ceb47": "register(bytes32,bytes32,string)", "0e5d095d": "codepointsOf(uint256)", "0e5d4b99": "fechVoteMainInfoForVoter(address)", +"0e5d99aa": "canExecuteOrder(address,address,uint256,uint256,address,bytes32)", +"0e5ddcb9": "setStopOrderr(int256)", "0e5e36fb": "TCH(uint256,string,uint8,string)", +"0e5e4ace": "bidderPower(address)", "0e5e4d72": "createAndExecuteTransaction(address[],uint256[],uint256)", +"0e5e739c": "isOwned()", +"0e5f8bdf": "_encode_uint64(uint64,uint256,bytes)", "0e5fc721": "addUserBalance(uint32,uint64)", "0e5fdad4": "releaseTeamTokenTransfer()", "0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", +"0e602ba7": "NORMAL_MINING_RATE()", +"0e608366": "closeElection(uint64)", "0e60de7a": "rinkeby3()", "0e620d70": "MultiSend()", +"0e620e23": "LockedToken()", +"0e6245ef": "sendMany(address,address[],uint256[])", "0e62fde6": "getAttributeTypeID(uint256)", "0e6436d2": "TokenChange(address)", "0e64780d": "distribute(address,uint256,uint256,uint256,uint256,uint256,uint256)", "0e64ff0e": "tradeWalletTokens(address,uint256)", "0e655432": "adventureItemContract()", +"0e65d719": "Top3Team()", "0e65e5d9": "ETBSToken(address)", +"0e662512": "multiplierDenom()", "0e662cf0": "buyTokens(uint16)", "0e662ff9": "oddEven(uint8,address)", "0e666e49": "userExists(address)", +"0e66fe14": "CrowdSaleStarted(string,address)", "0e67cf6c": "GetWageredWei(bytes32)", "0e67f4bb": "ReferrerRegistered(address,address)", +"0e682e9f": "washer()", +"0e683abe": "_trade(address,address,address,address,uint256,uint256,uint256)", "0e6848cc": "massNotify(address[])", +"0e685839": "UNIROUTER_ADDRESS()", "0e686170": "changeTotalAirdrop(uint256)", "0e687501": "OpticalNetwork(address)", +"0e68b72f": "pendingHmstr(uint256,address)", "0e68c2f0": "finishPurse(uint256)", +"0e68d31a": "MonthlyEarningPercent()", +"0e68ec95": "config(address)", +"0e690566": "lastMonitor()", "0e69782b": "BCTT()", "0e698493": "transferFounderTokens(address,uint256)", "0e69890f": "withdrawATN()", +"0e69bbc0": "bulkProcessGST(uint256[])", "0e69d16b": "testToSliceB32()", +"0e69f9d6": "DepositDai(address,uint256)", +"0e6a54aa": "OG1_BONUS()", "0e6ae3fb": "bid(string,string,uint256)", "0e6b0afc": "adminContractSettings(uint32,address,uint256)", +"0e6b123f": "buyToken(address,uint256,uint256,string)", "0e6b5823": "changeMaxBet(uint8[157])", +"0e6b7560": "isLevel1SetForOwnershipSale(address)", "0e6bc36c": "OkeToken()", +"0e6be7bd": "certifiedSymbols(uint256)", "0e6c04db": "icoThreshold1()", "0e6c5f93": "changeAddr(address)", "0e6ce30d": "createNew(uint256)", "0e6d1de9": "getLatestVersion()", "0e6d3a89": "mintingState()", +"0e6d5b0d": "rewardExtraToken(address,uint256)", +"0e6de612": "getBalanceOfBonded()", "0e6dfcd5": "redeem(address,address,uint256)", +"0e6e15f0": "lentTotalAssets()", "0e6e1b3e": "addSubject(bytes32)", "0e6e4f3e": "lockPlayerFunds(address)", "0e6f21f2": "sendBatches(address[],uint256)", "0e6f2cf8": "game_withdraw()", +"0e6f8c42": "debugNewManager(uint256,uint256)", +"0e6fbf9c": "CancelledByContractor(bytes32,address)", +"0e703426": "updateUSDWeiRate(uint256)", +"0e704d50": "closeTrove()", "0e708203": "rewardAccount()", +"0e70a033": "getDydxMakerAllowance(address,address,address)", "0e70ab11": "addEthBonusToBuy(address,uint256,uint256)", "0e70f147": "immediateRefund()", +"0e7116fa": "Winner1(address,uint256,uint256,uint256)", "0e713a50": "_preValidatePreICOPurchase(address,uint256)", "0e714202": "returnContributionsToTheSponsors()", +"0e71983c": "_privateSeedTokensUnlocked()", +"0e71d1b9": "get_dx_underlying(int128,int128,uint256)", +"0e71e6f9": "fourVaultLimit()", "0e7238f1": "setNormalRoomMax(uint256)", +"0e72ca7a": "addDocument(string,string,string,string)", +"0e735b19": "uniddTransfer(address,uint256)", "0e741a36": "generateVoteSecret(string,uint256)", +"0e742317": "orgWallet()", "0e7470cb": "getFullProfit(uint256,uint256,uint256)", +"0e74bfb0": "matchBytes32Prefix(bytes32,bytes,uint256)", "0e752702": "repayBorrow(uint256)", +"0e755974": "rVolWeeklyRecent(address,address)", "0e757191": "finalizeRound(bytes32,uint8,bytes4)", "0e757a2e": "testSetAndGet()", +"0e758d0a": "releasedPESales(address)", +"0e763112": "internalPaymentTicket(address)", +"0e76d128": "handlerViewProxy(bytes)", +"0e775274": "ratio_base()", +"0e781350": "testStrLenOne()", "0e78501f": "ChangeStart(uint256)", +"0e787c1c": "updateDGASImpl(address)", "0e787cce": "predict(bytes32)", "0e792536": "removeGlobalConstraint(int256,address,int256,address)", "0e7938ec": "tokenCreateFunction()", @@ -8300,159 +15110,273 @@ "0e7b592a": "Halo()", "0e7b8e07": "Sleipnir()", "0e7b9f10": "hasBuyerLotteryBonusWon(address)", +"0e7bb707": "daiBalance()", "0e7bda18": "addAddressListItem(bool,address,address,uint256,address)", +"0e7be674": "confirm_payment()", "0e7c0f80": "masterCopyCountdown()", "0e7c1cb5": "originalToken()", +"0e7c3d6f": "pushedHexDivs()", "0e7c5d2b": "test_validEmptyEqEmpty256()", +"0e7ca5b4": "updateUniswapV2(address)", +"0e7ce914": "getPairFor(address,address,address)", "0e7ce976": "owner_bonusSend()", +"0e7d0fff": "getOvmContractNonce(address)", "0e7d490d": "numberOfVotes()", +"0e7dd1e6": "updatePendingInfo(address[],uint16[])", +"0e7dfb73": "claimReward(uint256,address,address,address)", +"0e7eb310": "register(address,bytes32,address)", "0e7ebce4": "min_bid()", "0e7f2be7": "DecreaseAllowance(address,uint256)", "0e7f756a": "totalAssetUnits()", "0e801d7a": "ticket(address,bool,uint256)", +"0e807d6e": "setAdress(address)", "0e80d8b9": "PRICE_SALE()", "0e8162ba": "totalBurntCoins()", "0e816f66": "payForYourGladiator(uint256)", "0e830e49": "setEngine(address)", +"0e8310d6": "deleteClover(uint256)", +"0e832273": "isExcludedFromRewards(address)", "0e8354b9": "CreateOOG(address,uint256)", +"0e839ccd": "DEFLCTContributedForTokens()", "0e83afbb": "approveTokens(bytes32,address,uint256)", +"0e83bd55": "checkNumberOfPrints(uint256)", "0e83d92b": "playerPull()", "0e840284": "LMDA()", "0e848c1d": "NeoBitToken()", +"0e84c0dc": "allowanceView(address)", +"0e84c2b3": "isHealthy(uint256,uint256,uint256)", "0e850239": "scheduleCall(bytes4,bytes)", +"0e854068": "migrateCSaiToCDai()", "0e856588": "getScheduledTimelockCount(address)", "0e858b64": "setBridgeValidatorsOwner(address)", +"0e85ba19": "changeNAPboostLevels(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"0e85d277": "UPDATE_FORMULA_ROLE()", +"0e8612db": "stakedLPTotal()", "0e8670e0": "highestPrice()", "0e86b63e": "calcLevel2Bonus(uint256)", "0e86ec01": "doConfirmDeath()", +"0e86f1ae": "ownedPacks(address,uint256)", "0e870871": "rateOfZLT()", "0e87457b": "ZincElement()", +"0e879e07": "MintTransfer(address,address,uint256,uint256,uint256)", +"0e87eeed": "rewardWeight(bytes32)", +"0e87f8c8": "initializeStrategy(address,address,address,address,address)", +"0e882129": "order(uint256,uint256,uint256)", +"0e883cff": "maxRewardable()", "0e887cda": "getUserMoney(address)", +"0e887d79": "jigouethlimit()", +"0e889c5b": "suggestCandidate(address,uint256)", "0e88aace": "contractErc20Token()", "0e88c4a4": "RegisterMine(string,uint256,address)", "0e89341c": "uri(uint256)", "0e89439b": "stake(uint256,bytes)", +"0e8a47b5": "trade(uint256,address,uint256,address,uint256)", "0e8a4ac7": "getPositionPrincipal(bytes32)", +"0e8a6d67": "certifierSignatureOne()", +"0e8b372c": "changeWeiCostOfToken(uint256,uint256,uint256)", "0e8b3971": "mintTap()", "0e8bf00e": "ReleaseOfAccount(address,uint256)", "0e8c0cdd": "_mineableSupply()", "0e8ca718": "transferCurationRights(address)", +"0e8cbb4b": "finishChangeClaimer()", +"0e8d533b": "BidIncremented(uint256,address)", "0e8da019": "getInitRound(uint256)", "0e8de473": "getDividendBalance(address,address)", +"0e8e4031": "write(uint256[])", +"0e8e640f": "x_adminSetTokenPrice(uint256)", +"0e8edd86": "getSpenderAddress(address)", "0e8ef0c1": "systemOnSaleCount()", +"0e8ef96a": "WORK_REVIEW_ROLE()", "0e8f0a95": "commonDiscount()", +"0e8f274f": "currentPatron(uint256)", +"0e8f7f31": "userInformation(address,uint256,uint256)", +"0e8fc4f3": "emergencyMigrationStatusChange(uint256)", +"0e912f8a": "clearDEFIA()", "0e91f4b3": "removeBadToken(address)", "0e923d3b": "submitEther(address)", "0e9279a0": "BountyManager()", "0e929611": "AdminRemoval(address)", "0e92eb6d": "sellMyTokens(uint256)", "0e934447": "createPromoPlayer(address,string,uint256,uint256)", +"0e936776": "Cat8(address,uint256)", "0e940fd8": "CELL_ADD_SPACE()", "0e94869e": "ArJoust(uint256,uint256)", "0e94a0ee": "proofToken()", +"0e94a3a2": "unlockDate7()", +"0e959f6c": "setPoolDepositable(uint256,bool)", "0e95e127": "readpriceXname(string)", "0e96127a": "transferEther(address,address,uint256)", "0e96938c": "matchExistingBids(bool,bytes32)", +"0e969a05": "SUCCESS_CODE()", +"0e96db0a": "purchasingLog()", "0e972421": "isSpawningAllowed(uint256,address)", "0e975f73": "FirstPeriodEndDateUpdated(uint256,uint256)", "0e978e81": "AgriChainDocumentContract()", "0e97cfdf": "placeOrder(uint256,uint256,uint256)", +"0e97d626": "sellToken(uint256,uint256,address,uint256)", +"0e97df1d": "setRefundOk(bool)", "0e97e3d3": "validateAuthentication(address,uint256,uint256)", "0e97fa7a": "setEarlyParticipantsWhitelist(address[],bool[],uint256[],uint256[])", +"0e980602": "mintWithURI(address,string)", +"0e9848bd": "EthTxOrderDependenceMinimal()", "0e98f811": "reservedTotalSupply()", +"0e990575": "setYax(address)", "0e995ff5": "cd()", "0e997ce3": "IPMCoin()", +"0e99b2f9": "exceedLoadText()", "0e99b380": "getCoinAddress(bytes4)", "0e99f5e6": "claimBonus(address)", "0e9a9dbb": "signature(string,address,bytes32)", "0e9aa208": "getAddressAdmixture()", +"0e9af3ec": "pendingSyrup(uint256,address)", +"0e9b5d25": "defaultScore()", "0e9b6281": "setSubsidy(uint256)", +"0e9bb0a3": "stopEmission()", +"0e9bb163": "cancel_sale(uint256)", +"0e9bf4e4": "calcTokenPrices()", "0e9cbbad": "PurchaseFailed(address,uint8)", "0e9ccb94": "Boboho()", "0e9d02cc": "setTokensPerKEther(uint256)", "0e9d56a2": "getTotalEth()", +"0e9db168": "enterBidForGlyph(uint256)", +"0e9e11d3": "updateAccumulatedRate(bytes32,address,int256)", "0e9e543a": "collectableTokenOf(address)", +"0e9ebf08": "flashBeamOrbiterTokens(address,uint256,address,address)", "0e9ecedd": "mEtherInvalid()", +"0e9ed68b": "getStakingAddress()", "0e9ef902": "join_voter()", "0e9f0816": "getContractHash(uint256)", "0e9f9f86": "isMinimalReached()", "0e9fb0ed": "getOptionAddress(address,uint256,address,uint256,uint256,bool)", "0e9fd199": "licenseAffiliate(uint256)", +"0e9fdb1e": "emblema()", "0ea008c8": "bonuscalpre()", +"0ea03cdf": "getGasCost(uint256,uint256,address)", "0ea04562": "requestRandom(uint256)", +"0ea06941": "transferLessGasV3Link(address,address,address,uint256)", +"0ea0783c": "withdrawVested()", +"0ea0ffc4": "withdrawOpenDeposit(uint256)", "0ea12558": "girlIdToOwner(uint256)", "0ea126f9": "registerUser(address,string)", +"0ea12c18": "ConstructionDateChanged(uint256,uint256)", "0ea17a76": "safe_mul(uint256,uint256)", "0ea1f459": "DVCToken()", +"0ea20a4a": "test_str()", +"0ea2105b": "WithdrawRewardPool(address,uint256)", "0ea227e7": "StarTravelLane()", +"0ea22918": "msgVal()", +"0ea2d98c": "_setVotingPeriod(uint256)", +"0ea303eb": "TransferBonus(address,uint256,uint256)", "0ea317a9": "SUNCOIN()", "0ea37c64": "repost(uint256)", "0ea412ab": "_setPrice(uint256)", +"0ea44a56": "targetLeverageRatio()", +"0ea474c7": "stakerReward(address)", "0ea49bc1": "changeRental(address)", "0ea4eef0": "getMaxGroupBalance(uint256)", "0ea51122": "decreaseMarketCreatorSettlementFeeInAttoethPerEth(uint256)", +"0ea5d952": "despoitId()", +"0ea5e419": "updateEmail(address,string)", "0ea5edea": "payTodayReward(address,uint256)", +"0ea638a3": "viewNFTProfileDetails(uint32)", +"0ea658fd": "setUserTranche(address,uint256,uint256,uint256,uint256)", "0ea662ea": "hourPot()", +"0ea70ad3": "RANKING_AWARD_PERCENT(uint256)", "0ea733bf": "setmyPrice(uint256,uint256)", "0ea7a110": "getEmployee(address,uint256)", "0ea7c8cd": "airDeliver(address,uint256)", "0ea7ee82": "testRegisterAndVerified()", +"0ea8004f": "underlyingDebtOf(address)", +"0ea80f8e": "rayStorage()", "0ea81cf9": "initialPokemonInfo()", +"0ea86ad8": "cUSDToken()", +"0ea8737b": "usersp7MatrixRefferalsCount(address,uint8)", +"0ea8b3bf": "getMaxLeverage()", +"0ea8df78": "Transferred(uint256,address,address)", "0ea8e5ac": "tokenPriceIncremental_()", +"0ea9c984": "changeDependentContractAddress()", "0ea9e4f1": "doInitialReport(uint256[],bool)", +"0eaa7f51": "flpToLp0Route(uint256)", "0eaac106": "TokensAdded(address,uint256)", "0eaadd04": "_addBurner(address)", "0eaaf4c8": "withdrawBid(uint256)", "0eaaf5ac": "auction_start_time()", +"0eab191f": "assetToUsd(address,uint256,uint256)", "0eab31b1": "initAuctions(uint256,uint256,uint256,uint256)", "0eaba26a": "getCurrentValidatorsLength()", +"0eabaf31": "checkpointProtocol()", "0eabdab6": "removeOracles(bytes4[],address[])", +"0eabeed0": "addGasSome()", "0eabeffe": "sendMessage(string,string,string)", "0eac6ae7": "getClientAtIndex(uint256)", "0eac7a0e": "transferToAnotherAddr(address,address,uint256,string)", +"0eace95d": "ThemVDV(string,uint256,uint256,uint8)", "0eacecd2": "getEquipTokens(address)", "0eacf634": "BKCToken()", +"0ead252e": "random8(uint8,uint8)", +"0ead3e72": "payJoiningFee(address)", "0ead3ec8": "payeePricePerPart()", "0eada49f": "standingOrdersByPayee(address,uint256)", "0eae2f86": "initAccount(address,uint256)", "0eae73dd": "stringToAddr(string)", "0eaee52c": "setGrantsUnlock(uint256,bool)", +"0eaf2bf6": "converterOf(address,address)", +"0eaf43f2": "initialize(address,address,address,address,uint256,address,address)", "0eaf94c3": "secondDueDate()", "0eaf9fa4": "ownerSetMinBorrowedValue()", "0eafb6da": "getCapInWei()", "0eafe473": "balanceOfCoin(address)", "0eb05d49": "viewGoldList(address)", "0eb0afa6": "createDebt(address,address,uint256)", +"0eb12180": "getClaimPayoutAddress(address)", "0eb14edb": "Mondo()", "0eb15f0f": "claimRewardWithBlockData(uint256,bytes)", "0eb1947f": "changeGatewayAddr(address)", +"0eb19ccd": "betOnCondition(uint256,uint8)", +"0eb1d57d": "transferETHFunds()", +"0eb24d3f": "ConverterNotAvailable(address,address,address,address,uint256)", "0eb288f1": "executeTransaction()", +"0eb2a267": "balanceFulcrum()", "0eb34740": "lockedTokens()", "0eb3f5a0": "sweepCommission(uint256)", "0eb3f993": "getAreaQualityByDay(uint32,uint32)", "0eb40426": "IncPreSupply(uint256)", "0eb40916": "EthernautsStorage()", "0eb43fe3": "SaleClockAuctionERC20(address,uint256)", +"0eb44fb9": "BXTBContract()", "0eb495c2": "pushCity()", +"0eb4b6d0": "myswapExactETHForTokens(address,address)", "0eb4c7d6": "checkTeamUnlockedTokens(address)", "0eb4d170": "setLockup_dakehus(address,uint256,uint256)", +"0eb4f661": "deployReserve()", "0eb51018": "getProductOperation(string,address,uint256,uint256)", "0eb523ac": "PRIVATE_STAGE_FINISH()", "0eb524d4": "block1()", +"0eb5295f": "oraclesIndex()", +"0eb59c97": "addCollateral(address,uint256,address,uint256)", "0eb5a167": "XCloudRoc()", +"0eb62699": "getClaim(address,address,bytes32,bytes32)", "0eb6f543": "hodlerTotalValue6M()", +"0eb7a49a": "DeviceRegistered(address,uint256,bytes32,bytes32,bytes32)", "0eb82c13": "updateHpbNode(address,bytes32,bytes32,bytes32)", "0eb8d153": "AICoreCoin()", +"0eb8e519": "newInstance(string,address[],uint256[],uint64[3],uint64,bool)", "0eb8ed07": "transferEnable(bytes32)", "0eb8fe7a": "getChannelCount()", "0eb944d5": "PiperToken()", +"0eb9c795": "minerV2()", "0eba6b06": "getChannelInfo(address,address,uint32)", "0eba7f2d": "SomeCoin(string,string,uint8,uint256)", +"0ebaad46": "getCrowdsaleDeadline(address)", "0ebb0d30": "getSummaryReferralProfit(address)", +"0ebb1089": "updateLockedAmount(address,uint256)", "0ebb172a": "WITHDRAWAL_DELAY()", +"0ebb3078": "getFundedCampaignFunds()", "0ebbe5d6": "firstPrivateLockTime()", "0ebbf213": "AddPauser(address)", "0ebc1568": "viewTokenName(uint8)", +"0ebc4fdc": "removeStream(address)", +"0ebd4c7f": "getFeeBps(uint256)", "0ebdc43a": "IsSaleEnabled()", "0ebe0f32": "HacToken()", "0ebe31c8": "getCountTrack()", @@ -8460,56 +15384,101 @@ "0ebf0bcb": "FAID(uint256,string,uint8,string)", "0ebf3886": "CryptoLandmarks()", "0ebf5f27": "Reservation2(address,uint256)", +"0ebf69cd": "setLpToShareRatio(uint256)", +"0ec05448": "listOfKU(uint256)", "0ec0692a": "prizeEth()", +"0ec076f9": "buyTank1()", "0ec0786d": "tb()", +"0ec08b00": "tokenWhiteList(uint256)", "0ec08b29": "getLoopLimit(uint256,uint256)", +"0ec095ef": "getBalanceOfThisContract()", +"0ec0de9f": "approve_633(address,uint256)", +"0ec0e514": "_greyList(address)", "0ec0fce5": "setPercentage(uint256,uint256,uint256,uint256)", "0ec1268c": "_freezeFunds(address,address,uint256,uint256)", "0ec12782": "internet()", +"0ec1632e": "getter1()", "0ec173d0": "changeTreshold(uint16)", "0ec1b057": "verify(bytes32,string,string)", +"0ec1b8e8": "CUSDAddressChanged(address,address)", "0ec1ce16": "_getCurrentRate()", "0ec1e7ac": "claimBalanceByOwner(address)", "0ec2c379": "_getJYPCBonus(uint256)", "0ec2c5d7": "loik()", +"0ec2e821": "setDepositContract(address)", +"0ec377e8": "db_price()", "0ec3b247": "testControlSetEnforceRevisionsNotOwner()", "0ec3f62e": "NITRONEUMERC20(uint256,string,string)", +"0ec45dc0": "editionCounts(uint256,uint8)", "0ec48a42": "quater4()", +"0ec497a8": "LogWithdrawal(address,address,uint256)", +"0ec49aef": "view_player(uint256)", +"0ec4dcc2": "createTestimony(bytes32,bytes32[],bytes32[])", "0ec4fb0a": "WHITELIST_PERIOD()", "0ec52541": "unshelf(string)", "0ec55d6d": "SprinkleCoin(uint256,string,string)", "0ec59606": "addPlayerTxHistory(address,uint256,uint256,uint256,uint256)", +"0ec5a50c": "setPool(uint256,uint256,uint256,bool)", "0ec5c49a": "changeEthToTokenRation(uint8)", "0ec6688d": "intrepidSoldCount()", "0ec66924": "getStudentRequestsLength()", "0ec6b08d": "validIdentifier(uint256)", +"0ec72366": "test_compound_token(int128,int128,uint256,uint256)", "0ec78d9e": "setup(address[],uint256,address,bytes)", "0ec843d1": "setMinAmount3Round(uint256)", "0ec852f2": "QuranToken()", +"0ec89140": "fastTrack(address,address,address,address,address,address,address,address)", "0ec89f2b": "requiredProgressOfPreviousDungeon()", "0ec8c387": "getContractRates(bytes32)", +"0ec8c7d2": "xmlPerBlock()", "0ec8e2b4": "Moneyplant()", +"0ec9daa2": "pendingValues(address)", +"0eca1d89": "phase2EndBlockNumber()", "0eca4c92": "CryptoPunksMarket()", +"0ecab232": "CancelVoting(bytes32,address,address)", "0ecae7d3": "wager(bool,uint256,uint256,uint8,bytes32,bytes32)", "0ecaea73": "create(address,uint256)", +"0ecb59de": "sellByOwner(address)", "0ecb93c0": "addBlackList(address)", +"0ecba04e": "LogWalletDeposit(address,address,uint256,uint256)", "0ecba3f8": "BusinessAutomationUnion()", +"0ecbcdab": "borrow(uint256,uint256)", +"0ecbd65a": "setjsyongjing(uint64,uint64,uint64,uint64,uint64,uint64)", +"0ecbf118": "WithdrawFToken(uint256)", +"0ecc535f": "userStates(address)", +"0ecc6897": "substringOf(string,string)", "0ecd0424": "decompressPoint(uint256,uint8)", "0ecda113": "freezeEndTime(uint256)", "0ecdbfd4": "DesingCoin()", "0ecdd94f": "goldFeeDataUpdatedAtBlock()", +"0ece1a5f": "aTokenAmountToUnderlyingAmount(uint256)", +"0ece9314": "chooseTalent(string)", "0ecea92c": "allowInvestor(address)", +"0ecef775": "assetMin()", "0ecf19e5": "balanceWithoutFreezedBonus(address)", +"0ecf2fb7": "primaryMint(address,address,address,string)", +"0ed06862": "getMinPrize()", "0ed0b19f": "resetBonusPool(uint256,uint8)", +"0ed105e3": "balanceOf(address,uint256,bool)", +"0ed15cb0": "getAllowedErc1155Contracts(uint256)", "0ed15d23": "dInit(address)", +"0ed16a28": "setDynamicBaseURI(string)", +"0ed17632": "takerOpenCancel(address,uint256)", "0ed21029": "getIssueAssignee(uint256,bytes32)", +"0ed2cd0b": "setSmall(uint8)", +"0ed2dff0": "stimulusOracle()", "0ed2fc95": "exchange(address,address,uint256,uint256)", "0ed387c1": "getSpinsContainer(bytes32)", "0ed3909c": "startBonusCompaign(uint256)", "0ed3d5b9": "passed(address[])", "0ed40dff": "resetAppendDecryptedBids(uint256)", +"0ed45108": "getMemberReferrers(address)", "0ed469b8": "houseFee()", +"0ed47978": "removeDataUser(address,string)", +"0ed4d456": "transferMintFeeAddress(address)", +"0ed4efd1": "UpdateNote(string,uint256)", "0ed5410a": "endOfRewards(bool)", +"0ed57b3a": "setPTokenAddress(address,address)", "0ed59a60": "releaseProof(bytes32,string)", "0ed5a933": "isCanceled()", "0ed61407": "makePick(uint8,uint256)", @@ -8519,185 +15488,382 @@ "0ed74c08": "func_0C2C()", "0ed7a0f2": "Predatex()", "0ed7c905": "FantomToken()", +"0ed7ce42": "generalPercents()", "0ed86f04": "withdrawDivis()", +"0ed8a6a6": "RoleAdded(address,uint8)", +"0ed8c59a": "liquidityStartTime()", "0ed9b97b": "buy_fromContract()", +"0eda7ff6": "PrivateSaleSupply()", +"0eda85ee": "guests(address)", "0edaf441": "lockAddressRegistration(address)", +"0edb7149": "setCRTAddress(address)", "0edc1923": "changeMaximumHodlDuration(uint256)", "0edc4737": "SEED()", "0edc54a8": "holdTokens(address)", +"0edc63dc": "inputTokens(uint256)", +"0edc7717": "orderProduct(uint256,string)", +"0edd172a": "AddPrize(string)", "0edd2ffc": "penalty()", +"0edd5cad": "loopStarts()", "0edddd3e": "lstFunc(uint256[])", +"0ede0343": "_team()", "0ede050b": "ico3Max()", +"0ede3642": "ICO_LOCKUP_PERIOD()", "0edf2134": "deathData_a17()", "0edfb0f7": "withdrawCollectedInterest()", "0edfe7ec": "setBackendWallet(address)", +"0ee00472": "AllotAwardEvent(bool)", "0ee02d9d": "getHash(address,address,uint256,bytes,address,uint256)", +"0ee0599c": "supportedToken()", "0ee07836": "adjustDifficulty(uint256)", +"0ee08f7b": "DyDxActive()", +"0ee09a10": "getRedistributor()", +"0ee0c1f8": "reserve(address,address,uint256,address,uint256,int256,uint16)", +"0ee1265f": "calculateExchangeRate(uint256)", +"0ee13c1e": "BizarreEvent(address,string,uint256)", +"0ee13ced": "startCrowdSaleRoundFour()", "0ee21ddc": "setEtherPriceUSDWEI(uint256)", "0ee2b0e6": "commissionToWithdraw()", "0ee2cb10": "getCreator()", "0ee2ce58": "VKNToEth()", +"0ee2f39c": "platform_commission()", "0ee33128": "RequestRefund()", "0ee33c70": "claimed_blocks()", "0ee36dbc": "setParamsStopSale(bool)", "0ee3c31d": "getUserIndexOnEther(address)", "0ee4229c": "grantReservedToken(address,uint256)", "0ee454dc": "getBUB(bytes32,uint256)", +"0ee4951b": "rateStalePeriod()", +"0ee4d6a9": "sceneIndexToApproved(uint256)", "0ee526e0": "enableMintToken()", +"0ee54a1d": "issueSynths(bytes32,uint256)", +"0ee574b0": "UniLP()", "0ee5ca1f": "secondsLeftPublic()", +"0ee61919": "calBonusRefer(address,uint256,uint256)", "0ee62c77": "getStageVolumeBonuses(uint256)", +"0ee62eb5": "createMarket(address,address,address,uint256[],uint256,uint256,bool,uint256,uint256,uint256)", +"0ee6f5e0": "golOfferedForSale(uint256)", "0ee75f6b": "TOKEN_THIRD_PRICE_RATE()", "0ee7968e": "REWARD_NUM()", "0ee79fb3": "closeReferendums()", "0ee7c858": "beatMartialOwner()", +"0ee7d6b3": "setE(address)", +"0ee7ddd8": "stakeLP(address,address,uint256)", "0ee7f045": "TransferSellAgent(address,uint256)", "0ee85800": "getCFOHashing(address,uint256)", +"0ee899cf": "Distrust(address)", +"0ee8be1b": "_extendSelf(bytes4,address)", "0ee8e338": "testFailCreateWithParentsForeignNotInUse0()", +"0ee8e52b": "nextL1FillingQueue()", +"0ee94a97": "Deposit(address,uint64)", "0ee95ecf": "getNextPrice(bytes32)", +"0ee96953": "addAddress()", "0eea10b1": "sysPer()", +"0eea4284": "executionHash(bytes,uint256)", "0eeb63b9": "getUserAccountTokenBalance(address,address)", +"0eeb71b8": "receivedTokens(address,uint256,address,bytes)", "0eebd59b": "log_recast(address,uint256)", "0eebdb04": "AprilAirdrop(address,address)", "0eecae21": "draw()", "0eecc2a3": "updateRequiredTimeBetweenDraws(uint256)", "0eeccb84": "removeAdvisor(address)", +"0eed262f": "CreatePresaleDep(string[10],address,uint256[4],uint256[6],uint256[3])", "0eed49d0": "_createFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"0eed8548": "open(bytes32,address,bytes32,uint256)", "0eedc7b5": "voteDescription(uint256)", "0eedc9d9": "payAffiliate1Address(address)", +"0eeea367": "getStakeStartTime(address)", +"0eeee5c1": "nodeToGroupIdList(address,uint256)", "0eefdbad": "tokenTransferProxy()", +"0eefdc97": "changeDepositFeePercent(uint256)", +"0eefeebd": "phaseTwoEndTime()", +"0ef096ed": "approveStake(uint8,uint256)", +"0ef0a41c": "evolutionDuration()", +"0ef0d391": "getCategoryIdsValue(uint64,uint256)", +"0ef10da4": "getEpochTotalStakedAmount(uint256)", "0ef12aa9": "getUserID(address)", "0ef14b98": "viewFirstLotOfClauses()", +"0ef14cbc": "removeApprovalStakingPool()", +"0ef189a8": "updateFlagOneAddress(address)", +"0ef20704": "Dec31LPgetFYDaiReserves()", +"0ef21afe": "ACTION_ADD_PLUGIN()", +"0ef23eaa": "paymentFee(bytes32)", "0ef25f8b": "TicTacToeRules(address,address,address,address,uint256)", "0ef26743": "height()", "0ef270d5": "CreateNewAccount()", "0ef2d7af": "bonusDeadline()", +"0ef31813": "anyPynthOrSNXRateIsInvalid()", +"0ef359b4": "getBuyLimit(uint256)", +"0ef3d14f": "ELECTION_DEADLINE()", +"0ef4284f": "jobs(bytes16)", "0ef43cbd": "confirmerNouveauProprio()", "0ef486d1": "revisions(uint256)", +"0ef4b248": "pendingClaim(address)", "0ef504ae": "preSaleHalted()", "0ef524ff": "setDefaultMint(uint256)", +"0ef52e51": "TransferChild(uint256,address,address,uint256)", +"0ef53b78": "team_addresses_idx(uint256)", "0ef5a7e0": "allocateToCrowdsalePurchaser(address,uint256)", "0ef60e48": "setRubusOrangeAddress(address,address)", "0ef67887": "Balance()", +"0ef6caa0": "SetmessiDevAddress(address,address)", +"0ef6e2a7": "withdrawalStorage(uint256)", "0ef6eb9c": "getCompte_33()", "0ef71d79": "privatized(bytes32,bytes32)", "0ef72880": "DADXChainERC20()", +"0ef75fb6": "minsPastFreezeTime(address,address)", "0ef76243": "withdraw_Arina(uint256)", "0ef7cc8e": "metadataOf(uint256)", "0ef845df": "propose(address,string,string,string,string,string,uint256,uint256,uint256,uint256)", +"0ef88dac": "changeRaiseOperatorsContract(address)", +"0ef8e550": "convertEthToHodl(uint256)", +"0ef94440": "get_db(uint256)", "0ef96356": "stakeFor(address,uint256,bytes)", +"0ef9b3e1": "setGenPerAdjustment(address,uint256)", +"0efa49c1": "_updateCdIdxForCode(uint48,uint256)", +"0efae5f4": "getActiveAddresses(bytes32)", "0efafc03": "SaleClockAuction(address,uint256)", "0efafd01": "getPlayerGainLossOnLastFlip()", +"0efb8dbd": "get_epoch_end(uint256)", +"0efc8865": "winners(uint256,uint256)", "0efc9d03": "minEthToRaise()", +"0efca185": "detachProtocolFeeCollector()", "0efcf295": "deleteAnyProposal(bytes32)", +"0efcf3fe": "liquidityBp()", "0efd0973": "club()", "0efd2cca": "postICO()", "0efd3d5b": "getPrice(string,string,uint256)", +"0efd4665": "activeCommunityPoll()", "0efd4989": "numAdmins()", +"0efdcc59": "calculateSumOnChildChain(uint256)", +"0efe1c70": "sendTokensManyToOne(address[],address[],address,uint256[])", "0efe5fb7": "addToCart(uint256,string)", "0efe6a8b": "deposit(address,uint256,uint256)", "0efe7f62": "objectShoes()", +"0eff759c": "levelBonus()", +"0f001aca": "doctorRegister(uint256)", "0f00dfdb": "NonOperationalWithdrawManager(address)", +"0f0126eb": "removeFarmPool()", +"0f0132b8": "delegateAddress(string)", +"0f0175e1": "mrTimestamp(address)", +"0f018c50": "tokenPriceOracleUpdate()", +"0f02307b": "safeMint(uint256,address,bytes)", +"0f0245ad": "getProtocolFee(uint256)", "0f027c67": "membersLength()", +"0f02b334": "logicPerBlock()", "0f0308fb": "upgradeGems()", +"0f034ceb": "addMinterAdmin()", +"0f0356d0": "registerModule(address,bytes32)", "0f03be37": "mimax(uint64,uint64)", +"0f03d565": "manualMinting(address,uint256)", "0f03e4c3": "numberOfAccounts()", "0f041cef": "KitFutureToken()", "0f0433c4": "_getDroneAbility(uint256)", +"0f043958": "convertBackUniAll(address)", +"0f04ba42": "_gamma()", +"0f04ba67": "isFactory(address)", "0f050dce": "getBitcoinAddress(bytes32,int256,bytes32,int256)", +"0f0519ab": "GodUnpaused()", "0f052173": "invest2017()", "0f059913": "vested(address,uint256)", "0f06670a": "didWin(bytes32)", +"0f06c478": "getUserEstimatedCurrentFee(address,uint256)", +"0f0785c4": "DPC()", +"0f07aa62": "inboundContracts(uint256)", +"0f081ac2": "test_upgrade()", +"0f08b387": "setBfmForDevPercentage(uint256)", +"0f08d5db": "contract_link()", "0f092c44": "MIDGRADE_TYPE3()", "0f096163": "Chainy()", +"0f0a09a0": "getVideoGameItemCurrentPrice(uint256)", +"0f0a3d13": "rates(uint64)", +"0f0b0b85": "reclaimIn(address,uint256)", +"0f0b37d4": "_setNonce(uint64)", +"0f0b424d": "getRequestIdByTimestamp(uint256)", "0f0ba766": "removeChild(uint256,address,uint256)", +"0f0bc5b5": "Unlocked(address,uint256)", "0f0c27ad": "HashRegistered(bytes32,address,uint256,uint256)", +"0f0ca6ed": "PepemonFactory()", +"0f0cb966": "my()", +"0f0d4bb6": "depositTodo(address,address,uint256,uint256,bool)", +"0f0d7280": "setEscrowPercentage(uint256)", +"0f0dad9d": "getUniOutput(address,uint256)", +"0f0db437": "RemoveUSDT()", +"0f0dc9ea": "setMinMMToSwap(uint256)", +"0f0dccc0": "DelHolder(address)", +"0f0e8cf7": "batchCancelPairRfqOrders(address[],address[],uint256[])", +"0f0e92ca": "startAirdropKHM(uint256,uint256,uint256,uint256)", +"0f0e98de": "allowances(address,address[],address[])", "0f0ed39e": "EthealPromoToken(address)", +"0f0f30b2": "getPriceFeedAddress()", "0f0f3f24": "addOwnerAddress(address)", +"0f1026e9": "Ping(int256)", +"0f1031ec": "intern()", "0f106e0a": "encodePacketCommit(uint256,uint256)", +"0f10d353": "onEndRound(uint256,address,bytes32,uint256,uint256)", +"0f1139cf": "updateClaimingFee(uint256)", "0f120fc3": "toggleTrading()", +"0f121113": "claimChannelClosure(address)", "0f122a6c": "_setSealableProperty(uint256,bytes32,bytes32)", "0f12354d": "updateStateBasedOnContributions()", +"0f1244d3": "tokenSymbolIndex(string)", "0f12b32a": "Garcut()", "0f12d8f8": "RoundWinner(uint256,uint256,address,uint256)", "0f12ffac": "weiToFNU(uint256)", +"0f134288": "availablePersonID()", "0f134bee": "payPreviousOwner(address,uint256)", +"0f134f4e": "_sellFeeTimestamp()", "0f1354f3": "burnFrom(bytes32,uint256)", "0f136527": "getShareIndex(address)", +"0f13a678": "executeSwap(address,uint256,address,address)", "0f13af83": "setCurrentCoin(address)", "0f13dbde": "inRankList(address)", "0f14212b": "transferFromOwner(address,uint256,uint256)", +"0f144a48": "reclaimETH()", "0f145dca": "Ethbet(address,address)", +"0f149cce": "depositStatus()", "0f149d0a": "changeBurnPaused(uint256)", "0f14a7e4": "ModeratorRemoved(address,address,bool)", +"0f14b234": "FourX()", "0f14b900": "setTimeStampStatus(uint256,uint256,string)", +"0f14d0ae": "currentRoundxType_(uint256)", +"0f15023b": "unlockProtocol()", +"0f1530e4": "fraction(uint256,uint256)", "0f15573b": "setLLV_edit_2(string)", "0f15f4c0": "activate()", +"0f160bf6": "getImtyBalance()", +"0f16383a": "setLiquidityContract(address)", "0f166ad4": "local()", +"0f1698d0": "contributeOf(address)", "0f183119": "vote_for_candidate_D_for_Free()", +"0f1833bb": "gemstones(uint256)", "0f188e1d": "studioLevel(address)", "0f18a530": "chemistry()", "0f18ac07": "transferFromOwner(address,uint256)", "0f191524": "fillOrder(uint256,bytes)", "0f19f92a": "isIcoOver()", "0f1a6444": "cliffTime()", +"0f1af35d": "withrawUnclaimed(uint256)", "0f1bf454": "getGameStatus(uint256)", +"0f1c014a": "getSuperSecretMessage()", +"0f1c1b3f": "remitFor(address)", "0f1ca0d9": "sethToken()", +"0f1ca7ec": "changeDynFix(uint256,uint256,uint256)", +"0f1cf1b3": "getCommittedCapital()", +"0f1d5c98": "totalGovernanceFeeInMKR(bytes32,address)", "0f1df574": "WithdrawETH()", "0f1e3b5b": "getHousePayout()", "0f1e8c24": "commitTeam(address,uint256,uint256[])", "0f1ed0c6": "setOwner(address,bytes32,address)", +"0f1fb037": "preSaleContractAddress()", "0f1fd654": "ELearningCoinERC()", "0f2004a1": "Bob(address)", "0f201ca6": "reportConvertTokens(uint256,address)", +"0f208beb": "userInfo(address,address)", "0f20b9df": "crowdsaleContracts(address)", +"0f210714": "isGluwa(address)", +"0f212b1b": "BIND_STATUS_ALREADY_BOUND_TOKEN()", "0f215afb": "paySeller(uint256,uint256)", "0f21a046": "WithdrawMonethaBuyerUtility()", +"0f21c7b1": "purchasePack(uint256,uint256)", +"0f21f0e5": "layerLOCK()", "0f226a31": "getServiceUpdateAddress(address,uint32)", +"0f226b6c": "interestBasePercent()", "0f228087": "transferTokens(address[],address)", "0f2284cc": "SbuyToken(address,address)", "0f22a95d": "deleteCountry(uint256)", +"0f22c610": "NODE_SHARE_LV2_PCT()", "0f23a104": "burnAssetOperator(uint256)", "0f23b047": "getPlayNumber()", "0f23cbaa": "recycle()", "0f246780": "ZJF()", +"0f247206": "DONUT_MAG()", +"0f24d883": "init(bytes32,string)", "0f24f5c8": "doTransfer(address,uint256)", +"0f24f9f7": "BuyStore(address,address,uint256)", "0f250780": "AKCToken()", +"0f261586": "A3(bytes)", "0f2636bd": "getStockSellOrderPrices(uint256)", "0f264e1a": "farmerRequestCertificate(address,uint256,string,string,string,uint256)", +"0f2688c7": "CRV_VARIABLE_DEBT_TOKEN()", +"0f274ce6": "setNewOneInch(address)", +"0f275838": "pendingHal9k(uint256,address)", +"0f280e27": "getWaitingPeriodSecs()", +"0f28c97d": "getCurrentBlockTimestamp()", +"0f28fd9b": "changeword(string)", "0f2905f7": "verifyStage()", "0f29eb73": "revokeStaking(address)", +"0f2a555a": "adminClaimProfitAndInternalSwapToDAI(uint256,address[])", +"0f2aaec5": "getBurnPercentage()", +"0f2acc3e": "hashLeaf(bytes,bytes)", +"0f2b6fae": "MintReopend()", +"0f2b7cc9": "poolUsers(uint256,uint256)", "0f2bc56d": "fixTokenCalcBug()", "0f2c9329": "split(address,address)", +"0f2cc599": "delayedConfirmations(uint256)", +"0f2d0bfc": "queueList(uint256)", "0f2da195": "LimitSet(uint256,uint256,uint256,uint256,uint256)", "0f2dabca": "punchIn(address,uint64)", +"0f2e3ea6": "roomAddrList(uint256)", "0f2e5b6c": "Locked()", +"0f2e92d3": "viewMyReward(address)", +"0f2e9bee": "unstakeLocked(uint256)", +"0f2eee42": "SUB_MIN_INDEX_VALUE()", +"0f2f73f1": "getLatestTimestamp(bytes32,bytes32)", "0f2f9bb7": "getNextWhitelistedNode(address)", "0f2fa473": "test_already_paid()", +"0f304b88": "burn(address,uint256[],uint256)", +"0f308c94": "driverArrived(uint256)", "0f3092fb": "EasyHomes()", +"0f30bbc7": "initialize(string,uint256[],address[],string)", "0f30c971": "TheGambler()", +"0f312c3c": "checkTotalLp(address)", +"0f31859a": "setupState()", +"0f31932b": "tokenSaleSMTX(address)", +"0f31c632": "Withdraw_Eth()", +"0f328e24": "getmatchAdv(bytes32)", +"0f32f1dc": "Bakar(uint256)", +"0f34dc16": "canAcceptTokens_(address)", +"0f352f8e": "startNewSampling(address)", "0f3554ad": "addBoolListItem(bool,address,address,uint256,bool)", +"0f35881a": "setAirDropManager(address)", +"0f35d01d": "bet_succeeded(address,uint256,uint256,uint256,bytes32)", "0f36f691": "getLockStatus(address)", +"0f36f9ac": "MinWeiLimitReached(address,uint256)", +"0f37c673": "WalletUpdated(address,address)", +"0f37d654": "isUpdateRequired(address)", "0f37e79a": "transferClockmaker(address)", "0f37fd4a": "HexelErc20Token(string,string)", +"0f385ee6": "protestWindowAvailable(address,bytes32,bytes)", "0f391236": "ethRateMax()", "0f39c6ab": "removeVotersVote(address)", "0f3a00d5": "CreateCOR(address,uint256)", "0f3a0533": "extraReceiverAmount(address)", "0f3a1412": "getArrlist(uint256,uint256)", "0f3a31d6": "SymbolChange(string)", +"0f3a85d8": "setGasTopUpLimit(uint256)", "0f3a9f65": "setPeriod(uint256)", "0f3ae419": "PreferentialRateChange(address,uint256)", +"0f3afcbe": "setAutoSendAdminFee(bool)", "0f3afeec": "Nodelist()", "0f3b305e": "getPawnPackageId(uint256)", +"0f3ba220": "phase5EndBlockNumber()", +"0f3ba4ac": "google()", "0f3bd3fd": "teamJust()", +"0f3beee4": "timeLastayment()", "0f3c92f3": "calculateFLCCore(address,uint256)", "0f3cb8bc": "setCardUpgradeLevels(uint256,uint256,uint256)", +"0f3d51c5": "setForThreshold(uint256)", "0f3d7c3e": "release(string,uint32[3],string,string,string)", "0f3d8803": "getMinPurchase()", "0f3de489": "newAuction(uint256,uint64)", +"0f3e56c9": "holdingsRemove(uint256,uint256)", "0f3e7027": "clearTransferValueby(address)", +"0f3e740f": "migrateDebt(uint256)", "0f3e9438": "frontRunner()", "0f3eb785": "add(string,uint256,uint256,uint256)", +"0f3edad8": "approve_token(address)", +"0f3ee36f": "onePriceHi()", "0f3f0e42": "allowTotalMintAmount()", "0f3f53c1": "dappsBonusCalc(address,uint256)", "0f3fb52a": "LogSetState(uint256,uint8,uint256,bytes32)", @@ -8705,122 +15871,216 @@ "0f40593e": "ViewMyBet()", "0f40988e": "contributorsShare()", "0f40d645": "demander(uint256)", +"0f411cd8": "TotalPhasesChanged(uint256)", "0f4170f2": "BaseICO(address,address,uint256,uint256,uint256,uint256)", +"0f41b452": "calcRedeem1t1FRAX(uint256,uint256)", "0f41ba4b": "bid(address,uint256,uint256)", +"0f41e0d2": "breaker()", "0f420113": "_calculateCurrentRate()", "0f42fdfb": "recoveryModeTriggerTime()", +"0f436129": "updatePrice(uint256,uint256,uint256)", "0f4391f5": "setPauseMaster(address)", "0f43a677": "validatorCount()", +"0f43bc3f": "liquidityClaim()", "0f43c196": "setTournamentAddress(address,address)", +"0f443ebb": "RewardDistributed(uint256,uint256,address,address,uint256)", +"0f44d6bd": "totalOnAuctionDebt()", "0f45368c": "checkTransferHash(address,uint256,address,address,uint256,uint256,bytes)", +"0f453856": "removeProtocolAdapters(bytes32,uint256[])", +"0f45684a": "globalDecimals()", +"0f45ad43": "mainChainId()", "0f45c3e1": "transferFromAny(address,address,uint256)", +"0f45cc81": "lockedToken()", +"0f45db91": "getPlayerStatus(address)", "0f45f528": "getTknOfferor(uint256)", "0f4665aa": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address,address,uint256)", +"0f467f98": "vote_user_slopes(address,address)", "0f47165e": "managePlayer(address)", "0f473d72": "_calculateDiscount(uint8,address)", "0f47435b": "pvt_inv_Pool()", +"0f477425": "ERR_MAX_RESERVE()", +"0f479f87": "depositMibWBNB(uint256)", +"0f47e9e5": "RefundVoted(address,bool)", "0f481bf7": "postTransfer(address,address,address,uint256)", "0f482da1": "unblockSpending(address)", "0f482e64": "LikeCoin(uint256,address,address)", +"0f484e95": "uni_bas_dai_lp()", +"0f49a051": "zapETHtoROTtoMAGGOTtoHFLY()", +"0f49ba04": "UNILAYER()", +"0f49bdd8": "getSignature(address,bytes32)", +"0f4a34e0": "ethozslots(uint256)", +"0f4a834d": "getSkippedContracts()", +"0f4a9c70": "Sale(address,uint256,uint256)", "0f4acfcd": "charToByte(bytes1)", +"0f4ae692": "bonus(address,uint256)", "0f4b1cfc": "setGovernment(address)", "0f4bbdf2": "registerBuyer(string,string,string,string,address,string)", +"0f4c5fac": "start(address,address,uint256,uint256)", "0f4cf692": "numMessages()", +"0f4d0357": "stopPool(uint256)", "0f4d14e9": "depositEth(uint256)", +"0f4d1e73": "fetchArbitrable(address)", +"0f4d2998": "decimal(address)", "0f4df754": "Gladiethers()", "0f4dfc17": "ICOTokenDelivery(address,uint256)", +"0f4e9ef4": "noclaimSwapFee()", +"0f4eea03": "view_struct()", "0f4ef8a6": "rewardManager()", +"0f4f668c": "MIGRATION_1_SIZE()", "0f4f8184": "bancorRegistry()", "0f4fd9cc": "log_event(string)", "0f4ff474": "_openGameResult(uint256,uint256,uint256,string)", "0f501d07": "saveInfoAboutInvestors(address,address,uint256,uint256,bool)", +"0f5024a7": "claimOnBehalf(address,bytes4)", "0f505a01": "sealDataStream(address,uint256,bytes32,uint256,bytes32)", +"0f507bb6": "fromMemory()", +"0f508d65": "Unfreeze_amount(address,uint256)", +"0f50b9bc": "awardedReward(uint256)", +"0f50eda8": "_pollDeposits(address,uint256)", "0f5127f5": "Ariston()", "0f5137f9": "sellOrderBalances(bytes32)", "0f522614": "Shufflix()", "0f527200": "SimpleCoin()", "0f529ba2": "D()", +"0f52be68": "isAdmin(address,bytes)", +"0f52e6b6": "genesisRate()", "0f52fb0a": "searchFreelancers(address,uint256,uint256[],uint256[],uint8,uint256,uint256[],uint256[],uint256[],uint256)", +"0f532d18": "MSG_SENDER_KEY()", +"0f536f84": "burn_from(address,uint256)", "0f5381f1": "testUserCanIncreaseVersionNumber()", "0f53a470": "getProfile(address)", "0f53b7ee": "communityTokensAddress()", "0f53ba51": "appWasMade(string)", "0f53e2a8": "NewToken(address)", +"0f53fa55": "mibBUSD()", "0f555b46": "MicroCoins()", +"0f559407": "Birth(uint256,uint256,string,address)", +"0f55e8d0": "wantToWbnbRoute(uint256)", "0f560cd7": "list()", +"0f56107e": "lpSupplyOfPair(address)", +"0f566526": "transferUploadedFund(address,uint256)", "0f56e460": "Shitcoin()", "0f574ba7": "subscribe(uint256)", +"0f574be2": "getRewardAvailableByUser(address)", +"0f574e89": "mintNewCoins(uint256)", "0f577d97": "getCompte_16()", "0f57b9d9": "removeFromPrivileged(address)", "0f57eb79": "minboc()", "0f581aed": "MinimumBitcoinInvestmentUpdated(uint256,uint256)", +"0f583ba6": "isZTreasury()", +"0f58bb82": "ChangedTreasurer(address,bool)", "0f58d28f": "weightOf(string)", "0f590c36": "emergencyFixGameResult(uint64,uint256)", +"0f599392": "feeReviewExpress()", "0f59a638": "totalWeiCommitted()", +"0f59c6eb": "PublicSale()", "0f59eb95": "ownerUpdateOthers(uint256,bool,uint256,uint256,bool)", "0f59f83a": "go()", "0f5a5466": "claimWithResolver(address,address)", +"0f5a6fef": "ReceiveLoot(address,uint256,address[],uint256[])", +"0f5a89c8": "getPercentageBased()", "0f5a8d9c": "raiseDollarsFunded(address,uint160,int160)", "0f5aa9f3": "setAuthorization(address,address)", "0f5ad969": "node_index(address)", "0f5b807d": "cuddleData()", +"0f5b9312": "_stakeArea(uint8)", +"0f5ba1f5": "MainSaleStart(uint256)", "0f5bab7c": "countManagers()", "0f5c8c0a": "balancesDB()", +"0f5c96d2": "max_withdrawal_period()", +"0f5e17be": "buyNewCall(uint256)", "0f5e41c8": "_getDestinationPartition(bytes)", "0f5e7348": "getCommunityBallotCentsPrice()", +"0f5e7c65": "Deploy2(uint256,bytes)", "0f5ea100": "price(address,uint256,uint8)", +"0f5ea589": "originCoach(uint256)", "0f5eacf6": "EndStage()", "0f5ed9e9": "escrowAllowed(address)", "0f5ee138": "userSignupCount()", "0f5f0151": "GxTradersProxy(address)", "0f5f1dbc": "operationsAccount()", "0f5f4c53": "unpause2()", +"0f5f6638": "getKstBlockReward(uint256)", "0f5f8593": "MetaBall(uint256,string,string)", "0f601679": "balanceOwner(address)", +"0f6032a0": "rewardTotal(uint256)", "0f60e3d9": "resetAddTokenData()", +"0f6104fc": "devPerBlock()", "0f610c06": "getValidatedLiability()", "0f61280e": "nutzAddr()", +"0f615167": "migrateSnapshotsAndRewards(address)", +"0f6213bb": "unitAttackMultiplier(address,uint256)", +"0f621c25": "deTokenizationFee()", "0f62562f": "pregnantNinjas()", +"0f628bf8": "closeFuturesPositionForUser(bytes32,bool,address,address,uint256)", +"0f62c195": "e_withdraw_some_amount(address,uint256)", "0f62c3e3": "releaseEscrow(bytes32,address,uint256)", +"0f631c07": "reserveListingStage(address)", "0f632fd3": "onMint(address,uint256)", +"0f636256": "takeCurrentCashOnBehalf(address,uint32,uint128,uint32)", +"0f636bd3": "current_shares()", +"0f63cf0a": "vaultPool()", "0f63d864": "addOwners(address[],uint256[],uint256[])", +"0f63e42c": "mockFunctionNonPayable()", "0f6413b7": "batchAssignStopped()", "0f64864d": "transferTokensAndDividends(address,address)", "0f6521e2": "FROZEN_TOKENS()", +"0f6556c4": "MaddDeathEthPair()", +"0f65a459": "mintCardForUser(uint256,uint256,uint256)", +"0f65b4f3": "emergencyRecoveryIfLiquidityGenerationEventFails()", +"0f65e079": "flashPayback(address,uint256,uint256)", +"0f664e6c": "cancelAccountRecovery(address,address)", "0f66791c": "setHTML(string)", "0f66acd1": "EcosystemEthereum()", "0f66d082": "gauntletTypeOf(address)", "0f670da6": "destroyLogicContract()", +"0f6795f2": "processExits(address)", "0f6798a5": "Mint(address,uint256)", "0f67f3f7": "distributeToDev(address,uint256)", "0f683fd1": "Token(string,string,address)", "0f69cdbe": "approvespender(address,uint256)", "0f6a1734": "Crowdsale(address,uint256)", +"0f6aa5ca": "LogAuditNodePriceHigherThanRequests(address,uint256)", "0f6b6756": "tokenSaleIsPaused()", "0f6bb3c3": "doSpawn(uint32,int256,address,bool,address)", +"0f6bd9b2": "country_countStandingCountriesForContinent(uint256,bool)", +"0f6bec23": "rejectBanner(uint256)", "0f6c2a33": "setMaxStage2AllocationPerInvestor(uint256)", +"0f6cfee2": "doomBalances(address)", +"0f6d1673": "testCalculateBorrowAmountWithFee()", "0f6d37d6": "supportAddress()", "0f6d6236": "setIssueDividendReward(uint256)", +"0f6d6667": "concludedGames(uint256)", "0f6d9f00": "ERA_PERIOD()", "0f6e40c3": "startRound(bytes32,bytes32)", "0f6ea4fc": "MISCELLANEOUS_TOKENS_SUPPLY()", "0f6f5f98": "setAndFixTokenPriceInWei(uint256)", "0f6f72a8": "getClosingTimeValue()", +"0f6fb1a0": "withdrawNew(address,address,uint256,uint256)", +"0f70305c": "calcSwapEthToLunaInputs(uint256,address[],uint256)", +"0f706e7b": "ContractCreated(address,uint256,uint256,address)", "0f710616": "TRSToken()", "0f710e32": "CryptoFinexToken()", +"0f7151dc": "getOfficers()", "0f71590c": "setPOLYUSD(uint256)", +"0f721c88": "paysou(address,uint256)", "0f732bdc": "getEncryptionAlgorithmCount()", "0f73b4f4": "setStartingPrice(uint256)", +"0f73d0b4": "expireContract()", "0f73d212": "addLog(string,string,bytes32)", +"0f74174f": "genesisLockOnce()", +"0f74459f": "bund()", "0f74a5cc": "cancelCenturionSale(uint256)", "0f74e527": "RenmiCoin()", "0f74e689": "registerNewPubKeyForHash(bytes28,string)", "0f7503c9": "baseStartTime()", +"0f751e60": "icoSales()", "0f75806f": "GraphenePowerCrowdsale()", "0f75c82e": "getObjClassExp(uint64)", "0f75e81f": "issue(bytes32)", "0f762cfe": "emission(address,address,uint256,uint256,uint256)", "0f76496a": "returnTokens3(address,uint256,uint256)", +"0f769644": "winner_horse(bytes32)", "0f76b651": "unlockDate5()", "0f76c114": "getCurrentValue()", "0f76de0d": "left45(uint256)", @@ -8829,136 +16089,240 @@ "0f774931": "administrativePayouts(address,uint256)", "0f776fb2": "PutDiv(address)", "0f77c1d3": "addUsersWhitelistB(address[])", +"0f77d8b5": "profitPercentPJ()", "0f784943": "mintable(uint256)", "0f78628e": "allowedToBurn()", "0f7875c6": "startblock()", +"0f78b023": "BulkTransfer(address[],uint256)", "0f78d408": "JuvToken()", +"0f78dac3": "add_liquidity(uint256,uint8)", "0f78ee7c": "payoutLockedToken()", +"0f79a51c": "setRoyalDecks(address)", "0f79cfa2": "addReferrer(bytes32)", "0f79e120": "nrFailures()", "0f79e1c7": "createRandomDeveloper(string,uint256)", +"0f79e34a": "sixMonthReward()", "0f7a4590": "goalAchieved()", "0f7a8971": "buildBoolMapping()", +"0f7b1e3e": "setCommunityFeeAndReceiver(uint256,uint256,uint256,address)", +"0f7b9c50": "getWithdrawTime(address)", "0f7bd1dd": "enterRaffle(uint256[],uint256)", "0f7bff76": "getHeroDBZHeroAddress(uint256)", +"0f7c1466": "ZREETHLimit()", +"0f7c5fa9": "BCInfoByCardName(string)", "0f7c9085": "addToAdmin(address,bool)", "0f7c932a": "getReservedTokensListValInPercentageDecimals(address)", +"0f7ca577": "BuyTokenAllowed()", "0f7d6673": "Channel()", +"0f7d8e39": "getSignerAddress(bytes32,bytes)", +"0f7dae17": "writeCall(uint256,uint256,uint256,uint256)", "0f7e1653": "OpenGame()", +"0f7e5970": "ERC712_VERSION()", +"0f7ee1ec": "receipts(uint256)", "0f7f97c8": "calcNewSkinAppearance(uint128,uint128,uint128)", "0f7fa72f": "addOperator(address,uint256)", "0f809adb": "changeTokenOwner(address)", "0f80fc58": "exponent(uint256)", "0f8143f6": "discardRejectedProposal()", "0f819fe8": "disableTuneOption(uint256)", +"0f81aef4": "setUniswapRouter02(address)", "0f81d248": "endPeriodC()", "0f822b78": "admin_transfer(address,uint256)", +"0f825199": "glbDebtShare()", "0f825673": "deleteCoupon(string)", "0f82b42f": "userAccountTokenBalances(address)", +"0f82c53e": "localNode()", +"0f831a8f": "shuffleCount()", "0f832bc6": "testIsLawyer()", "0f832f18": "_nextLoanInterestRate(uint256)", "0f83f112": "CanTransferChecked(bool,address,bool,bool)", "0f8410e3": "getPresellToKenAmount()", +"0f847985": "_rejectPR(uint256)", +"0f856267": "smgRelease(bytes32,bytes32,uint256,uint256,address,address,bytes,bytes32)", "0f85751e": "change_p5(uint256)", +"0f8587b6": "omgPerBlock()", +"0f85cb5a": "mintCollectible(address,string,uint8)", "0f861127": "argl(uint256,uint256)", "0f861ca3": "ownerUnpause()", "0f86abc1": "modifyStakerLimit(uint256)", "0f86e3eb": "denaToken()", +"0f86e4e7": "updateDecimal(uint256)", "0f86f702": "compatible223()", +"0f8708c0": "crossBridge()", "0f87a044": "withdraw1(uint256)", +"0f884f73": "createNFT(address[],string,string,string,uint256[],string[])", "0f88aa81": "emitRecord(bytes32,uint256,uint256,uint256)", +"0f88d30c": "swapExactTokensForBNB(uint256,uint256,address[],address)", "0f88f1a5": "collectBounty(address,uint256,uint256)", +"0f895497": "changePeriodByMCWS(uint256)", +"0f898ed8": "voterLookup(address)", +"0f89a172": "extendsTime(uint256)", "0f89c305": "removePendingArray(address)", +"0f89dfa4": "LogResult(address,uint256,uint256,uint256,bool)", +"0f89ef5f": "setRewardHalvingInterval(uint256)", "0f89fa28": "OrganizationRegister()", +"0f8a3ced": "removeMinter(bytes32,address)", +"0f8a72ea": "approveBacForUniswap(uint256)", "0f8a771e": "skr()", "0f8a8887": "rocketSetResourcePrice(uint256,uint256,uint256)", +"0f8b48f2": "PurchaseTokens01()", "0f8b70c9": "getBotContract()", "0f8bca8c": "getStage0Start()", "0f8c04e2": "create(address[],uint256[],uint256[],address,address,bytes)", +"0f8cda20": "getTransactions(address)", +"0f8d3b81": "unsetRule(address,address)", "0f8d4030": "totalShareholders()", "0f8d598a": "decayedPriceOfSocialIdentity(uint256,uint256)", +"0f8d8914": "magnetionFromToken(uint256,bool)", "0f8dc272": "ComputeAcornPrice()", "0f8ea4f3": "addSomeOfManyLine(uint256,string,uint256,string)", "0f8eaa74": "addToPreSaleRefunds(address,uint256)", "0f8ef9f8": "getBoosterRaiseValue(uint256)", +"0f8f80a0": "starSystems()", "0f8f8b83": "spendableBalanceOf(address)", "0f8fcb74": "_setInt(bytes32,int256)", "0f8fd363": "getRepPriceInAttoEth()", "0f900587": "addBonusPerShare()", "0f902bc2": "delayedTransferFrom(address,address,uint256)", "0f907ba3": "failCar(string)", +"0f909486": "BTCT_ADDR()", "0f90b83a": "deployTokenContract(uint256)", +"0f913de7": "newGame(address,address,bytes32,uint256)", "0f917e31": "transferAndDonateTo(address,uint256,address)", "0f917f9e": "totalSupplyTeamTokens()", "0f91c8a5": "setCap(string,uint256)", "0f91cce1": "releaseVanbexTeamTokens()", +"0f920953": "listUnderlyings()", "0f92f38f": "changeMartial(uint256)", "0f9302c8": "LogEvent(string)", +"0f932116": "GENERAL_VOTING_DURATION()", +"0f933ce8": "weiToOwner(address)", +"0f935000": "checkAdd(uint256,uint256)", +"0f93ab47": "resyncWeight(address)", +"0f943c91": "daysParticipatedGet(address)", "0f95378f": "MerchantWallet(address,string)", "0f953b97": "getCmcAddress()", +"0f955dce": "getLockTypeInterval()", "0f960644": "addClaim(address,bytes32,string,string,uint256)", +"0f960e01": "viewLoanDetails(address)", +"0f969b87": "setDebtThreshold(uint256)", +"0f96cf34": "addressArray(uint256)", "0f96dd39": "maxTokenCap()", +"0f96ffc2": "getClientKey(address)", "0f973874": "MiniMeTokenSimple(address,address,uint256,string,uint8,string,bool)", "0f974ef2": "PasserBy(address)", "0f977561": "getUserEvents()", +"0f97b58d": "buyPrice(address)", +"0f97e2fe": "OPEN_TRADING_ROLE()", "0f97f2f1": "managePlayer(uint256,uint256)", +"0f9898fe": "Deactive()", "0f98a9cc": "lockTokens(address,uint256,address,uint256)", +"0f98c918": "uniswapPercentage()", "0f98c91a": "TOKENS_PER_ETHER_EARLYSALE()", +"0f98e029": "withdrawFor(address,address[],uint256[])", +"0f99710a": "tickToString(int24)", "0f99da4a": "getBoosterAmount(uint256)", "0f99fab2": "allowWrite(uint256,uint256)", +"0f9a6fb8": "endfourthroundtime()", +"0f9a9878": "isla()", "0f9ad6b8": "GGPOKoFToken()", "0f9aea56": "last_release_date()", "0f9b481a": "TokenFinalized()", +"0f9b4955": "exchangeFeeRate()", "0f9b5129": "maxSellRateInPrecision()", +"0f9b7965": "enableTAXMode()", "0f9b87be": "transferToDestination(bytes32)", "0f9bac2d": "ADVISORS_ADDRESS()", "0f9bb8b3": "getCurrentUserQuickPromoBonus()", +"0f9c54a9": "getSAV3XRPBalance()", +"0f9c7e81": "changeComission(uint256)", "0f9c95da": "GDCAcc04()", "0f9ce471": "Ether2Gen()", +"0f9d2001": "frax_pools_array(uint256)", +"0f9dad71": "wethTokenAddress()", "0f9e144d": "changeMaxMin(uint256,uint256)", "0f9e39bf": "minBidMultiplier()", "0f9e42da": "drawToken()", "0f9e5bbd": "createShares(address,uint256)", +"0f9e7636": "GameAdded(address,uint256,address)", +"0f9f2387": "cashPriceFloor()", +"0f9f4387": "ChangeBidId(uint256,uint256)", +"0f9f9612": "getUniswapPriceReverse()", +"0f9fa24c": "ReturnsWithdrawn(address,uint256)", "0f9fb983": "lastBetTimeSEC()", "0fa01949": "yearOfProduction()", +"0fa082c5": "LogPayDividendsReInvested(address,uint256,uint256,uint256)", +"0fa1e89e": "referrLevelCount()", +"0fa1eeab": "feeOnTransfer()", +"0fa27102": "_getSecondTokenLPDifficulty()", "0fa2b5d4": "Interestv3(address,address)", "0fa2d864": "block4()", +"0fa309cc": "approvedMintAddr(address,bool)", +"0fa356bd": "Eligibility_Group_1(address,address,uint256)", +"0fa3d26c": "total_depositcount()", +"0fa3d306": "confirmNewSubscriptionPrice(address,uint256)", +"0fa42b81": "getNameSignUp()", "0fa45298": "getRoundAhead(uint256,uint256)", +"0fa47497": "withdrawRewardFee()", +"0fa47501": "dragonTail()", "0fa48688": "calculateItemId(bytes32)", +"0fa4e01e": "lastEarnBlock()", "0fa53db8": "divideDecimalRound(uint256,uint256)", +"0fa54f4d": "parjar()", +"0fa57ced": "setAllFlagPairs(string[2][])", "0fa6002e": "sellCharacter(uint32)", +"0fa683d3": "getTransactionDetails(uint256)", "0fa6e84d": "SouYingToken()", +"0fa76d0f": "startChangeMinSTBZ(uint256)", "0fa7a798": "getOpenRequestPublicKey(uint256,uint256)", "0fa7b7b3": "totalRefunded(uint256)", "0fa803e8": "SetCategoryName(string)", "0fa85ab0": "claimTokensForUser(address)", "0fa87b15": "closeMyGame(uint256)", "0fa8beb3": "claimBonus(address,uint256)", +"0fa8c7ce": "NUMBER_OF_CHOICES_FOR_ARBITRATOR()", "0fa8f516": "getPosition(address,bytes32)", +"0fa910c5": "_setOrbsAddress(address)", +"0fa92d03": "m_userStakeInfos(uint256,address)", "0fa95aee": "etherToTokens(uint256,uint256)", "0fa9ced4": "emergencyFuneral()", "0fa9e486": "registerCoin(string,string,address)", +"0fa9eb67": "FROZEN_STAKING_TIME()", "0faa2aae": "amountOfBSTRequired(address)", +"0faa3d22": "NewProject(string,string,uint256)", "0faaa357": "nCanOpenRewardMinEth()", +"0faac0e2": "addressToPlayRecord(address)", +"0faad6f0": "getAlpacaVaultPricePerFullShare()", "0fab0f6a": "minimumWitcoins()", "0fab14e8": "agencyOwner()", "0fab459c": "transferSoldTokens(address,uint256)", "0fab7539": "getIssuanceCount(bool,bool,bool,bool)", +"0fabd9e7": "token_to_token_networks(address)", "0fac20e1": "dev1Wallet2Pct()", "0fac8dc5": "update(string,string,bool,string,address,uint256,uint256)", +"0fac9100": "totalPoints(address)", "0fac960e": "sellTokensForWaves(string,address,uint256,uint256)", "0fadb5c7": "getWHaddress()", "0fae42cd": "pricePreSale()", +"0faee324": "exitDai(uint256,uint256,uint256,uint256)", "0faf0904": "set_creator(address)", "0faf2775": "newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"0fafd034": "AuthorizedRemoved(address)", +"0fb04ec7": "FinishedCrowdsale()", "0fb0a8d3": "manageOperable(address,bool)", "0fb0cf2d": "changeLockupDuration(uint64)", +"0fb10780": "changeMinTokenSum(uint256)", "0fb125ac": "transferTokens(uint256,address[])", +"0fb1ef0a": "coinsig(uint256)", "0fb26f0b": "switchTransfers()", "0fb2e692": "buyMCTTokenProxy(address,uint256,uint256)", +"0fb2fde3": "calcPoolBuyerCount(address)", "0fb35574": "SCC()", "0fb3844c": "_status()", +"0fb38465": "cachedSynthDebt(bytes32)", "0fb411e8": "evc()", +"0fb44411": "nestNodeVote(address,uint256)", +"0fb4ac2f": "synthsUSD()", "0fb4b070": "tokensMintedForSale()", "0fb4ecdf": "complained(address,address)", "0fb524ce": "castVote()", @@ -8966,6 +16330,8 @@ "0fb553ba": "FLC()", "0fb59f95": "buy(uint256,string,uint256,uint16)", "0fb5a6b4": "duration()", +"0fb5adce": "investedUnderlyingBalance(address)", +"0fb5def8": "setXToken(uint256)", "0fb65f10": "authorizeMintRequester(address)", "0fb66557": "trustedTransfer(address,address,uint256)", "0fb66da3": "getMessageOfVisit(address)", @@ -8974,115 +16340,194 @@ "0fb7a5e6": "getCensuredBy(uint16)", "0fb7cb1d": "addToKycTeam(address)", "0fb7e602": "startEmergency()", +"0fb91195": "confirmCurveAddress(address)", "0fb9398f": "getProductBuyers(uint256)", +"0fb96b21": "componentIssueHook(address,uint256,address,bool)", "0fb9d85e": "buyIndex(uint256,address,bool)", "0fb9dcd5": "getTokensAtCurrentRate(uint256)", "0fba34a4": "has(bytes12)", "0fba4ca1": "accept(string)", +"0fba694b": "addTokenMeta(address,uint16,uint112)", "0fba80de": "pickValues(bytes32)", "0fbad611": "setTimeFrame(uint256)", "0fbb3b6b": "shittyRandom()", "0fbbeceb": "PostCompleted(address,address)", "0fbc0cd1": "bounty_solve(address,bytes32)", "0fbc0f82": "LotterySymbol()", +"0fbdbfaa": "numTokensByOwner(address)", +"0fbdc689": "total_user_rxp_cap()", "0fbe333a": "getLastBidder()", "0fbe3e40": "returnLast()", +"0fbe9e56": "addInstancesOfCoin(string,address)", "0fbed9fe": "EFAFCOIN()", +"0fbeec47": "newStableFee()", +"0fbf0a93": "stake(uint256[])", +"0fbf3f6a": "participant2EtherCount()", +"0fbf6571": "BASE_DECREASE_PERCENT()", "0fbf7151": "startsWith()", +"0fbff868": "ggcPoolAddr()", "0fc03687": "Booko()", +"0fc0a430": "getEtherForBonds(uint256)", "0fc0e9a8": "_addWithdrawal(address,address,uint256)", "0fc10026": "CALLER_EXCHANGE_RATE()", "0fc12b1a": "isGetWhiteList()", "0fc1b08b": "setValue(string,string,string)", "0fc1c83d": "minimumTokenCommission()", "0fc24c03": "ZarFundsToken()", +"0fc273f9": "stakeEndDate()", +"0fc2cbd4": "NewDAOContract(address,address)", "0fc33bb7": "lrcBalance()", "0fc3866f": "isSoftCapGoalReached()", "0fc38daa": "CSToken()", +"0fc3b4c4": "assetToPToken(address)", "0fc3c5e8": "shipMedicine(address,string,string,string,string)", "0fc4af53": "cloneTokens(uint256,uint256)", "0fc4f262": "updateSubdivsFor(address)", "0fc55d1e": "ENTS()", "0fc55fd1": "bid(uint256,string)", "0fc63d10": "tokenA()", +"0fc65407": "initialize(uint256,uint256,uint256,address,address,address,address)", "0fc66f45": "PO24()", "0fc69407": "BidPlaced(uint256,uint256)", +"0fc6c23e": "newbCash()", "0fc6ed30": "Satum()", "0fc709e5": "setDistribution(uint256,uint256,uint256,uint256)", "0fc72f4e": "purchaseCallback(string)", +"0fc77e2d": "contractMarketData()", "0fc783d1": "SacToken(address)", +"0fc7ad42": "getDepositMsg(uint256)", +"0fc7bfd6": "stakeAmountFromVswapPool()", "0fc7c15e": "getUnapprovedUsersTop150()", +"0fc7c39d": "getPools(string,address,uint8)", "0fc81bdc": "editEventResult(string,uint64,uint8)", "0fc85c7f": "INAYCOIN()", "0fc8a393": "transferUpdater(address)", "0fc8afbd": "getFreeSnake()", +"0fc8e15b": "ChangePerBlock(uint256)", "0fc92096": "isValid(address,bytes32[])", "0fc958dd": "tMemberSolId(uint256,address)", +"0fca8843": "transferMultiple(address,address,address[],uint256[])", "0fcac452": "addToRakePool()", "0fcaed94": "restartLottery()", "0fcb5984": "getprice()", +"0fcb7f9c": "sameDistance(uint256)", "0fcb83f2": "SancojTokenContract()", "0fcbb5b9": "getSubscriberType()", "0fcbbc8e": "_lookupOwnerIdentityCount(address)", "0fcc0c28": "deprecate()", "0fcc1e47": "_grantAccess(bytes32,address,address,string)", +"0fcc56f7": "forceWithdraw(uint256)", +"0fcce384": "processCommitment(address)", "0fccf22e": "ban_user(address)", "0fcd1cab": "killInstance(address,address)", "0fcda174": "getAccountTokenBalance(address,address)", "0fcddd06": "CreateCRC(address,uint256)", +"0fcdefb7": "accountMergingStartTime()", "0fce00ed": "calculatedPaymentInterval()", +"0fce2857": "getLatestMarketPrice(address)", "0fce349e": "popularitySetting(uint256,uint8)", +"0fce7230": "DepositTokens(uint256)", "0fce887b": "transferLockedFrom(address,address,uint256[],uint256[])", +"0fceb28a": "novel()", +"0fceb9ab": "closeBox(uint256)", +"0fcf3b3e": "TransferAdapterContractOwnership(address)", +"0fcf41ae": "swapTokens(address)", +"0fcfb24a": "set1(uint256,uint256,bool)", +"0fcfc6a8": "NUMBER_EPOCHS()", "0fd02fc1": "isValidUnbondingLock(address,uint256)", +"0fd07ea4": "init(address,address,address,address,address,uint256,uint256)", "0fd0aa67": "Parties()", "0fd0ae10": "insert(address,uint256)", "0fd0e440": "uniq(uint8[])", +"0fd15f09": "rien()", "0fd1ed1f": "setMarginForVictoryPercent(uint8)", "0fd1ed78": "LOG_EmergencyWithdrawalFailed(address)", "0fd1f94e": "firstClaimBlock()", "0fd2ce17": "funcArrayInArguments(address[])", +"0fd2f491": "submitRing(address[3][],uint256[7][],uint8[1][],bool[],uint8[],bytes32[],bytes32[],uint256,uint16)", +"0fd331b8": "cheetahPerBlock()", "0fd3d758": "WWAMPricingStrategy(uint256,uint256,uint256)", "0fd3ee83": "__redeemTokens(address,uint256)", +"0fd4b0b7": "initiateFlashLoan(address,uint256,address[],address[],uint256,uint256)", "0fd4d286": "BlueSkyDragon()", "0fd5084a": "validOrigins(uint256)", +"0fd50f07": "testHack(address)", "0fd548ef": "myShareToken()", "0fd56202": "addressToNumCities(address)", "0fd57f3e": "seatPrice()", "0fd58d07": "expectedWinnersCount()", "0fd62f57": "adminCharge_p2()", "0fd68e3f": "newRaffle()", +"0fd6e498": "proposeGlobalConstraint(address,address,bytes32,bytes32)", "0fd6fc49": "IntelliShareEco()", "0fd7410c": "in_finalization_phase()", "0fd7b03d": "HackDivs()", "0fd8a8fb": "setAnonymousCap(uint256)", +"0fd8ee17": "pauseUntilBlock()", +"0fd9384a": "lockAdditionalCollateral(uint256)", +"0fd95db5": "getMin(uint256,uint256)", +"0fd979f9": "editItemsSalesData(uint256[],uint256[],address[])", "0fd9d5bf": "Matrexcoin(uint256,string,uint8,string)", +"0fda7448": "getDeployedAssets(uint256)", "0fda890e": "changeGenRNGcontractAddress(address)", "0fdb1c10": "withDraw()", "0fdb468f": "fee(uint64)", +"0fdb60df": "transferSodaTokens(uint256)", +"0fdbd105": "getPowerPoolPriceNDAOToToken(uint256)", +"0fdbf59e": "_reserviorFee()", "0fdc3609": "changeDeposit(address)", "0fdc7956": "unlockAllTokens(bool)", "0fde0f8e": "ROLE_VENDOR()", "0fde5686": "setBUB(bytes32,uint256,bytes)", +"0fde9c05": "calculateUniswapPoolAddress()", +"0fdea0bc": "NewDanPanAddress(address)", +"0fdecfac": "callChainId()", +"0fdef78c": "privateSaleEnded(uint256)", +"0fdf80ed": "reAssignStorageOracle(address)", "0fdfa5ee": "preBuy3()", +"0fe06a1b": "addLiquidityToUniswapPORNxWETHPair()", +"0fe081ea": "dataSourceGetBonusResults()", +"0fe09c1f": "lockStatusOf(address)", "0fe1dfa8": "lastRoundLengthUpdateRound()", "0fe1f548": "getTokenSCADARequiresHardCap()", +"0fe21264": "setDepositFee(uint16)", "0fe234ed": "testSetController()", +"0fe26ff3": "TGEC()", "0fe2abcf": "exchange(uint256,address)", "0fe2c5d1": "BTSMToken()", +"0fe2f495": "isCreatorApprover(address)", "0fe3152e": "airdropEnd()", +"0fe31c0f": "partiallyLiquidate(address,address,uint112)", +"0fe31eb1": "vaultWithdraw(address,uint256)", +"0fe32aeb": "_existsAction(uint256)", "0fe3c10d": "MANHATTANPROXY4THST()", +"0fe3c771": "cancelMilestone(uint64)", "0fe41fd5": "acquisitionsTokens()", "0fe433db": "reallocate(uint256)", "0fe43e1f": "foundersAdvisorsPartnersTokensVault()", +"0fe48b36": "recurringPaymentCycleInBlocks()", +"0fe48c5c": "checkMul(uint256,uint256)", "0fe4ea72": "killDragonDeathContract(address,uint256,uint256)", +"0fe5672c": "setLockduration(uint256)", +"0fe5ac88": "mintDevelopmentPart(uint256)", +"0fe5f30d": "DepositZILDAmount(address)", +"0fe600d9": "coinReturn()", +"0fe62707": "_burnMyPrf(uint256)", +"0fe67277": "exitVswapPool()", +"0fe6c2a9": "lsd()", +"0fe6f82d": "addToPartner(address,uint256)", +"0fe711e4": "minVoterBSCSBalance()", "0fe793aa": "studioHandler(address,uint256)", "0fe7c250": "DaoRulesProposals()", "0fe7db9c": "MedSupplyToken()", +"0fe7eec0": "InstanceInspector()", "0fe83bb8": "preSaleTokens()", "0fe8c788": "addCertificate(string,address)", "0fe961da": "_getCurrentRoundTeamCos()", +"0fea4e66": "isFeeRecipient(address)", "0fea657f": "totalExch()", "0fea81fe": "setComisionInETH()", +"0fea8fc7": "testGetSortedSpot()", "0fea9be6": "ChinhCoin(uint256,string,uint8,string)", "0feacc42": "CommonToken(address,address)", "0feaf627": "_safeStaticCall(address,bytes)", @@ -9090,49 +16535,100 @@ "0feb172f": "buyTeam(uint256)", "0feb376b": "AMOUNT_ICO()", "0febb8b7": "setSaleInfo(uint8,uint256,uint256,uint256,uint256)", +"0febdd49": "safeTransferFrom(address,address,uint256,uint256)", +"0febeed9": "termSheet(uint256)", +"0febf479": "deploy(address,uint256,uint256,address[],uint256[],address,uint256,uint256)", +"0fec1dec": "voteTallyData(uint256,uint256)", +"0fec3fff": "mintDevelopmentTeamTokens(address,uint256)", "0feca6d5": "releaseAdvisorsTokensForPercentage(uint256)", "0fecef48": "getProductsByOwner(address)", "0fed240b": "dAdd(bytes32,address,bool)", "0fed5dc8": "setSendAllow(bool)", +"0fee1a20": "migrationContract()", "0fee32bb": "setAuctionIndex(address,address)", "0fee5a40": "getProviderCurve(address,bytes32,int256)", +"0fee74ad": "fromDouble(bytes8)", +"0fee8a5c": "gameFinishing()", +"0fef9b51": "enlist(address)", +"0fefbc09": "getUnits(address)", +"0ff05681": "noVisibility1()", +"0ff05e40": "getSeedInvestment()", +"0ff08d9d": "getClaimLPTokenAcceptState()", "0ff0a4df": "reFund()", "0ff188c7": "transferPixel(uint16,uint16,address)", +"0ff19aaf": "spdr()", +"0ff1a40d": "availDepositShares(uint256)", +"0ff1c1b8": "multiTransferWithWhiteListAdd(address[],uint256)", "0ff244b2": "transferByAddress(address,uint256,address)", +"0ff24ec1": "recollateralizeAmount(uint256,uint256,uint256)", +"0ff261cf": "setVvotedPerformanceFee(uint256)", "0ff2e4b2": "assignCEO(address)", +"0ff3628d": "setCurrentIssuanceKindsData(address,uint256,uint256)", "0ff3687b": "remainingGenesisCats()", "0ff39daa": "generateDepositAddress()", "0ff3d57e": "addMasterWallet(address)", "0ff3d5ea": "getCastleSale(uint256)", +"0ff3f6c6": "totalNotCompounding()", "0ff4009c": "getLotteryInfo(address)", +"0ff40b94": "getAllRoundBets(uint256)", "0ff42eab": "setProofAddr(string)", "0ff43cfd": "IFCNBToken()", "0ff4c916": "getValue(uint256)", "0ff4d239": "HashRushICO()", "0ff4f160": "oraclize_query(uint256,string,string[1])", +"0ff50b3d": "requireBranches(uint256,bool,bool,bool,bool)", +"0ff55ae2": "strategyLastHarvest(address)", "0ff58f40": "month24Allocated()", +"0ff5fd1a": "mintStakingAndFarmingYear2(uint256)", +"0ff62a87": "burnSwap(uint256,string)", +"0ff78186": "nextUntradeTime()", +"0ff7b8a4": "withdrawDepositRewardById(uint32)", "0ff7bb07": "refundClient(address,uint32)", +"0ff7da6a": "totalReferralIDs()", "0ff88a8d": "getChar(uint256)", "0ff88baa": "RoyalTransfer()", "0ff89c2b": "divide(int256,int256,uint256)", +"0ff8b333": "Set_Token_Address(address,address)", "0ff8cf9b": "dividend()", +"0ff8d8a5": "withdrawMoneyTo(address)", +"0ff8f4e7": "appealForVotingRights()", "0ff92e7b": "burnDead(address,uint256)", +"0ff95df2": "pendingMoon(uint256,address)", "0ff9aafe": "updateMinimumBond(uint256)", +"0ffa7af7": "getUsersAmount()", "0ffb1d8b": "whitelistToken(address,bool)", "0ffbe43b": "initializeOfferChannel(uint128,address,address,uint256)", +"0ffd3aef": "LogOwnerSetAllocation(address,uint256)", "0ffdbd42": "feePoolShare(uint256,bool)", +"0ffe0f1e": "initializeModule()", +"0ffe5427": "isSeeded()", +"0ffe6252": "calcSwapPiptToErc20Inputs(address,uint256,address[],bool)", +"0fff105d": "reflectFees()", +"0fff5eeb": "playerBetInfoOf(uint256)", "0fff6e06": "totalAvailableGames()", "0fffbb54": "changeRankingSize(uint256)", "10001fdd": "setPublicSaleParams(uint256,uint256,uint256,bool)", +"10002701": "getTokenByNfc(string)", "10002f39": "WorthlessEthereumTokens()", +"100063ec": "setBootstrapStartThreshold(uint256)", +"10007b2c": "_shiftUint(uint256,int256)", +"1000d278": "wetrustSigner()", +"10011741": "AnionCapt()", "100153b6": "blocksByDay()", +"10019e73": "setXXX()", "1001c39c": "tokensReleasedToIco()", +"10025501": "colonyAddr()", "100278d8": "startPreSale2()", +"1002f7d3": "lockDexReward()", "100349fa": "Good_Bye_World()", +"100356ff": "upgradeProvider(address)", "10038099": "isPuppySports()", "1003ac0c": "customFallback(address,uint256,bytes)", +"1003c1b5": "addWin(uint256)", "1003e2d2": "add(uint256)", "10042e10": "remainingPublicSupply()", +"100485d2": "PreSaleFinished()", +"10054e37": "addWBNBPair(address)", "10055c1d": "role()", "100565f4": "setTurnover(uint256)", "10059be0": "do_redemption()", @@ -9140,101 +16636,181 @@ "10072af7": "SetupRaffle(string,uint256)", "1007f753": "erase(uint256)", "10082bff": "getActorBillXdetail(address,uint256,bool)", +"10082c75": "assetPair()", "1008737d": "test_oneValidEqBytes32()", +"10087fb1": "stake(uint256,uint8)", "1008a2a5": "getTotalLendingItem(address)", +"1008be78": "verifyNone(uint256)", +"10092867": "tokenComprado(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)", +"100ac47c": "bondPriceOnONC()", "100ac510": "addRx(address,address,uint256,uint256,bool)", "100aca47": "totalFund()", "100acefc": "_storeProof(string)", +"100ad9f1": "subscriberCount(bytes32)", "100af203": "reserveETH()", +"100b2783": "dragonAssets(uint256)", +"100b7816": "LogGroupDataArrived(uint256,uint8,uint8)", +"100b7ea5": "NewWinner(address,uint256,uint256,uint256,uint256)", "100b815d": "loadData()", "100bce92": "toHex(string)", "100be094": "setRefundRate(uint256)", "100c6cfd": "ipoPlatformPercentage()", "100c8ada": "setCAmodulus(bytes)", "100c98fe": "SaleFailed()", +"100cd71d": "userHistory(address)", "100cdd91": "burnAll(uint256[])", +"100d3f74": "computeSwapStep(uint160,uint160,uint128,int256,uint24)", "100d7e30": "FuckFacebookCoin()", "100e187a": "transferHolds(address,address,uint256)", "100e4b94": "every_day_im_shufflin()", "100ed0fc": "preallocateFirstStage(address,uint256,uint256)", +"100f07be": "countPassports()", "100f23fd": "cancelWhitelistAddition(bytes32)", +"100f2c00": "get_pool_info(address)", "100f2e78": "determineSalaryTokens(address)", +"100f650e": "log(address,uint256,address,uint256)", "100f759f": "EDU_PER_ETH_SALE()", "100f7a79": "registerBounty(address,uint256)", "100fd02f": "isAbove(int256,int256,string)", "101005bd": "releaseReserve(uint256)", "10103122": "totalDurationInDays()", "1010a515": "MONOGRAM()", +"101114cf": "rewardDistribution()", "101175e8": "BONUS_DATES(uint256)", +"101185a4": "ovmL1QUEUEORIGIN()", "10119521": "TokenBurnt(address,uint256)", +"101197c7": "buyback_fee()", "1011a635": "changeCommissionFeeRate(uint256)", +"1011cd12": "cachedTotalSupply(address)", +"1012c9e8": "changeMintingRecipient(address)", +"1012dc79": "qz()", "1013ad53": "KairosToken()", +"1013c56b": "totalTransferredMoney()", "10142785": "assign(bytes,uint256,bytes1)", "1014a29e": "firstRefundRoundRateDenominator()", "1015295c": "ClaimMyBet()", "10154bad": "addWhitelisted(address)", +"101574ed": "canVoteOnBehalfOf(uint256,address,address)", +"10163b67": "getContractors()", "1016774e": "period3End()", "1016ad94": "Baliv()", "1016eadb": "Epilepsy()", "10174967": "God()", +"10177a67": "BLOCK_STEP()", +"10178d9c": "checkRewards(uint256,address)", "1017a357": "HeirOwnershipClaimed(address,address)", +"1017bf56": "getNodeAddrs()", "101817ba": "getLastEmissionNum()", +"10187f65": "getDirectRegisterCount()", +"10188aef": "setConnector(address)", "1018f294": "getRandom16(uint16,uint16)", +"10192457": "syncUniswapPairHFLYROT()", "1019635d": "assignReserved(address,uint8,uint256)", "10196bf7": "pendingRefs(uint256)", +"101999ba": "rewardDisp()", "1019dc59": "setSale(address,bool)", "101a3fec": "setIsTokenTransactionOpen(bool)", "101a889b": "LogBeneficiaryPaid(address)", "101a917e": "makeTradeDetail(address,address,uint256,uint256,address,uint256)", +"101aab78": "addCanTransfer(address)", "101af16b": "countriesTokens()", +"101af8fa": "RecordedPendingTransaction(address,address,uint256,uint256,address)", "101b6106": "RevokeEntity(bytes32,bytes)", "101b7e7c": "vbtToken()", "101b94f1": "setRightOfGroup(string,string,bool)", +"101bae56": "togglePayToAcceptOffer()", +"101c5422": "ncdf(uint256)", +"101c5767": "upgradePool(uint8)", +"101c88fb": "BlockSizeForTC()", "101ca1b9": "YoobaBatchTransfer()", +"101ce772": "getWithdrawToGroup()", "101d1135": "ANNA(uint8)", +"101d168e": "claimBulk(address[])", +"101d4579": "indexs(uint256)", "101d52d2": "checkStoredFileName(string)", "101d990c": "hmul(uint128,uint128)", +"101dde7d": "CurrencyExchangeRateSet(address,uint256,uint256,uint256)", +"101dec40": "chestCap(uint8)", +"101df3a9": "openVoteToken(uint256)", "101e1f2c": "initLottery(uint256,uint256,uint256,uint256,int256)", +"101e2c3b": "Winner(address,uint256,uint256,uint256,uint256,uint256,uint256)", "101e359b": "reviveFee()", "101e5a32": "setSoftcap(uint256)", "101e652e": "presaleUnlimitedStartTime()", +"101e6e68": "BELT()", "101e8952": "forward(address)", "101f13e2": "verifyProof(bytes,bytes32,bytes32)", "102046db": "townPrice()", +"10213447": "ray(uint256)", +"10214dfe": "maxExitFee()", "1021688f": "changeAdminAddress(address)", +"10216e36": "LogFinishMintingIssuer(uint256)", +"102225ad": "deputeBoss3(address)", +"10224a98": "TASKDONE()", "1022b30b": "proposalResult(uint256)", +"1022cfbb": "canLoanGoToEOA(uint256)", +"10231d12": "setOutstandingCoinSupply()", +"1023afa6": "getFintech()", "1023d597": "priceDecraseTime2Action()", +"10242590": "removeMiner(address)", "102455a5": "sanity_check()", +"1024913a": "_luckyWallet()", +"10249edc": "CancelProposalEvent(address,uint256)", "10253fec": "election(string,string,string,string)", +"10254fd7": "passiveAirdropTokensAllocation()", "10258bfd": "Payment(address,address,uint256,uint256)", +"10258de0": "Do_Update()", +"10265693": "setAuthAddress(address)", +"10266c1c": "totalLoanTaken(uint256)", +"102680e3": "repayBorrower(uint256,address)", +"1026bf58": "salecutoff()", "10271334": "receiveICOcoins(uint256,uint256)", +"10277967": "getvPUREBalance(address)", "1027853f": "withdrawShare(address)", "10278bc8": "setBytes32Value(string,bytes32)", +"1027a425": "BuyEvent(address,uint256)", "1027e242": "getBoosterStrength(uint256)", +"10280683": "nestedDisableRefundUntilEndFunction()", "10282b61": "payoutcount()", "10286952": "parseKeys(bytes32[])", "10288c4b": "startIco(uint256,uint256,uint256)", +"1028a90a": "ethSendFee()", "1028e4a8": "theCyberMemberUtilities()", "1028f980": "getAssertDowntimeCost()", "10290e51": "computeProfit(uint256,uint256,uint256)", +"10292f28": "requirePermissions(address,uint32,uint32)", +"1029ce93": "usersCLMatrix(address,uint8)", +"102a8e70": "ethereumOf(address)", +"102aa42f": "decayedEntitlementAtTime(uint256,uint256,bool)", "102accc1": "fireEventLog2()", "102b5cc5": "check_address_share_and_transfer_bond_token(uint256,uint256,address,address)", "102b61f7": "setMinimumWeiAmount(uint256)", +"102c0917": "changeDivsFeeWallet(address)", +"102c0ffe": "toggleChief(address)", +"102c5003": "getBurnedSupply()", "102c920a": "allRefunded()", +"102cb3d4": "triggerChangeAllOperationKeys(address,address[])", "102ce658": "setRule(address,string)", +"102d25c4": "Created(bytes32)", +"102d32c0": "getBidPrice(address,uint256)", +"102d9c1f": "OrderFilled(uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32,uint256,uint256,uint256,uint256)", "102deb9c": "changeMonethaVault(address)", "102e58d0": "timeoutAt()", "102e8b94": "sellnow()", +"102e8bf9": "kfcstrategy()", +"102fdfbd": "_subscriptions()", +"102fe30f": "finish(address,bool,uint256,uint256)", "102ff0b3": "amountToken()", "10309781": "createdTimestamp()", "1030adea": "change_king_name(string)", "1030c539": "setCreditbit(address)", +"1030d852": "nameToRecord(bytes32)", "1030e227": "TroyToken(address,address)", "1030f288": "releaseState2()", "10314b07": "GOX(uint256,string,string)", @@ -9242,66 +16818,122 @@ "10319417": "returnHost(uint256)", "1031e34e": "raisedFromToken()", "1031e36e": "pauseTrading()", +"1031ec31": "lastWithdrawTime(address)", +"10324d4d": "getFullSetsOfAddress(address)", +"103260c4": "PlaceBet(uint256,uint256,uint256,uint256,uint256)", "10328e89": "CoinhiToken()", +"1032a3c8": "redemptionDeadline(bytes32)", +"1033125f": "updateTokenCommHolder(address)", "103359ce": "sendToIco()", +"1033910e": "storePriceOfAllCountries(uint256,uint256)", +"1033cd1b": "FreezershipTransferred(address,address)", +"1033d8af": "setAllocation(address[],uint8[])", +"1033e893": "setNumberFactor(uint256)", +"1033ee4d": "getBillTokenAddress()", "10340069": "tokenDistributionPool()", +"10342040": "nctPerBlock()", "10342d02": "endSaleCarProduct(uint32)", +"10344a6f": "accountToSides(address,uint256)", "10347a2c": "lockSymbol()", "10348938": "setRankDynamic(uint256)", +"103555c7": "DMEX_contract()", +"103616e8": "proposalExecuted(uint256)", "10361bf2": "transferLog(address,address)", "10369540": "icoPhaseAmount2()", "1036bbe2": "MAX_PERCENT()", "1036cde8": "allocateCustomer(address,uint256)", +"1036d549": "setIsReserved(uint256,uint256[],bool)", +"1036e0a8": "onlyOwner()", "103728a3": "FundingFueled(uint256,uint256)", "10375a67": "getRemainingTokens(address)", "1037706d": "uploadSignedString(string,int256,bytes20,int256,string)", "1037a5f4": "getPrev(uint256)", "10388809": "setTransferPrice(uint256)", +"103894d6": "FAILURE_PURCHASE_TRANSFER_LIMIT()", +"1038a54e": "activeHero(address)", +"1038c188": "getUsdcEthRate()", +"1038dca6": "UserRegistered(address,string,uint256,uint256,uint256,string,bool)", +"103915e3": "bdcamount()", +"10391d25": "percentageDevTreasury()", "1039cf3c": "isIcoStopped()", +"103a246a": "YourTotalStakingTillToday(address)", "103aeda7": "isContractAuthorized(address)", "103b0506": "preter(uint256)", "103b5dad": "computeIndexId(address,bytes32)", "103bf0bd": "tSLDToken(address,address,address,address)", +"103c8856": "valuePoolsWeights(uint256)", +"103cb785": "setAddressWhitelist(address)", "103cbb7f": "ethpyramid()", +"103cd44f": "metaUpdateFulfillment(bytes,uint256,uint256,address[],string,uint256)", "103cfacf": "CryptovationX(address)", "103d26ac": "getRareItemsPrice(uint256)", +"103d44e1": "govAllow()", "103e8154": "sellComissionUnits()", "103ed140": "_getSkill(uint16)", "103ef9e1": "authorizeOperatorByPartition(bytes32,address)", "103f3a83": "getAuraColor(uint64)", +"103f4df8": "setNumsStructNonPayable(uint256)", +"103f5457": "auctionCancel()", +"103f765c": "claimTotalWeight()", "103f9251": "transferFrom(address,address)", "10400446": "setMaxAppeals(uint256)", "10402040": "createSaiCollectorsEdition(uint256,address)", "1040233f": "LevelUp(address,uint256,uint32)", "1040762d": "setExchangeRates(uint256)", +"10407f2f": "setFeeHolder(address)", "1040dc27": "getSTODetails()", "1040e5a5": "showBal()", +"10413000": "timeAdjusted()", +"1041921c": "getReferenceAmount(uint256,address)", +"10420bff": "currentPayout(address,bool)", "10422c24": "releaseAngelVested()", +"104241c2": "BonusRateChanged()", "1042604f": "isTrue(bool,string)", +"1042620b": "totalData()", "1042876d": "getDisplayName(address)", "1042ca73": "getWeekIdx()", +"10432db3": "reAddCollateralToken(address,uint256,uint256,uint32)", +"10435188": "b4sePerBlock()", +"104393b4": "emergencyETHWithdrawal()", +"1043a489": "useManagerETH(address,uint256,address)", "1043dcdf": "LastIsMe(uint256,uint256)", +"10440961": "accessoriesClaimedZeronium(uint64)", "10442a1b": "GetMainAddress()", "10443ab3": "setLotteryTokensWallet(address)", "10445a16": "_joinGame(address,uint256)", +"10445d12": "setGrainBuybackRatio(uint256,uint256)", "1044bbe6": "unLockTokens()", +"1044c66b": "changeSuperOwner(address)", "1045290e": "Boocoin()", +"10455673": "setBitwordsWithdrawalAddress(address)", "10458684": "GBCCoin()", +"10458ddf": "DFEE()", "1045a889": "buildContract(string,string)", "1045de72": "isEndOffer()", +"104652f1": "superWorldCoin()", "1046bc68": "deleteContact(address)", "1046d078": "transferItemFrom(uint256,address,uint256,uint256)", "1046e2ab": "Flood_Standard_Ethereum_Coin(uint256,string,string,uint256)", +"1046f163": "setMintBounds(uint256,uint256)", "1047456e": "userTransfer(address,address,uint256)", +"1047600d": "cpi()", "10476aa9": "_activateIfUserIsNew(address)", +"10479280": "countExchangeTokens()", +"1047a857": "isStakePool(address)", "1047d79e": "freezTime()", "10482f57": "getWhitelistedResolvers()", "1048a25c": "view_random(address,address)", +"1049095d": "inBlockWindow()", "1049334f": "tokenBalance(address,address)", +"104978ba": "testBytes4(bytes4)", "1049f742": "terminateEscrow(address)", +"104a1322": "forHAPYFholders()", +"104a41a7": "setLpStakingIncomeWeight(address,uint256)", "104a5963": "targetDiscountValue9()", "104a5e75": "getRareItemsPLATPrice(uint256)", "104ace02": "register(string,string,string,string,string,string)", +"104aeef8": "currentMaxSupply()", +"104b29e9": "cTokenMapping(address)", "104b6704": "currentManager()", "104b78bd": "amountRaised(bytes32)", "104bb708": "GetStatusCount(string)", @@ -9310,71 +16942,154 @@ "104bff92": "HasBooster(address,uint256)", "104c9cff": "releaseDividendsRights(uint256)", "104ce199": "Launcher()", +"104d2614": "beginMigration(address)", "104d5fdd": "getPriceProxy()", "104d7bbb": "LuzCoin()", "104de5a1": "setPromoted(bool)", +"104e13da": "SealedOrderRevealed(address,uint256,address,uint256)", "104e81ff": "_approve(address,address,uint256)", "104e9929": "tokenPool()", "104f2d8f": "_approve(uint256,uint256,bytes32,uint256)", "104fea4c": "activeCrowdsalePhase2(uint256)", +"10500e79": "reInit(address,uint8,address,address)", +"105036ae": "nctToken()", +"1050f4e8": "setBancorConverterFactory(address)", +"1050ff23": "unsafeAdditionShouldOverflow()", "10510ec1": "payToken(address,uint256)", +"10516905": "_rebaseJackpotLevel()", "10518aeb": "removeOldFirst(address)", +"10518e1b": "orderEarned(address,uint256)", "10519ff4": "WestCoin()", "1051db34": "implementsERC721()", +"1051f696": "getMatchedAmount(uint256)", "10523af3": "getPokemonCD(uint256)", "1052506f": "isSignedBy(bytes32,string,address)", "10525660": "setConsumeToken(address)", +"10530815": "DelegatedTransfer(address,address,address,uint256,uint256)", +"10534eb0": "writeOffs(uint256)", +"10537d3e": "isBattleDone()", +"10545aed": "exitArb(address,uint256)", +"1054761c": "checkOk()", "10549874": "tokenRate1()", "1054d657": "divestETH()", +"1054d793": "replaceCreditProfileAtId(uint32,string,uint8,address,uint256,uint256,uint256)", "105541ae": "returnPtSafeSmall()", +"1055a0db": "approve_273(address,uint256)", +"1055a49b": "sellUnderlyingAndRepayBorrow(address,uint256)", "10561361": "logDisputeCrowdsourcerTokensBurned(address,address,uint256)", +"105643c8": "_ethSignedHash(bytes32)", +"10567b8a": "evix()", "105689a0": "doLockdown()", +"1056983e": "supplyErc20ToCompound(address,uint256)", +"1056c689": "validateSignature(bytes32,address,uint8,bytes32,bytes32,bool)", +"1056cc71": "addBalanceOf(address,uint256)", "10570116": "newGroup(string,uint32,uint256,uint32,uint32,uint32,uint32,uint32,uint8)", +"1057b2d2": "fSLP()", "1057ce8c": "create3DoggiesTokens()", +"1058468f": "updateServicePoolRequestFeeInWei(address,uint256)", +"105846e3": "NormalPeriod()", +"10586858": "StakeOBELIX(uint256)", +"1058854d": "buyLevel(uint32,uint32)", +"10588581": "printMoney(address,uint256,uint256,address[],uint256)", +"10588e49": "diceRolled(address)", +"1058d281": "leaveStaking(uint256)", +"1059171e": "enable(bytes32)", "10594e19": "JPGProject()", "1059c492": "CROWDSALE_WALLET()", "105a6356": "minimalSuccessUSD()", +"105a88e3": "isVaultRegistered(address)", +"105ae03a": "token_balance(address)", "105ae3bf": "getRoundIsEnded(uint32)", +"105aeafe": "getTargetWeight(address)", "105b2645": "CheToken()", "105b6f00": "Fructus()", +"105b9154": "setBloodlineWeight(bytes32,uint256)", +"105bc546": "myOrders()", "105c287b": "lockPeriod1()", +"105c9353": "metaReplaceIssuers(bytes,uint256,uint256,address[],uint256)", +"105c955a": "roundOneTime()", +"105ccc65": "yu()", "105d3e0f": "cryptogs()", "105d9e37": "disputeLength()", +"105dacdf": "addWhiteLists(address[])", +"105dbcce": "claim(uint256,address,uint256,bytes32[],string)", +"105df46e": "externalSafeMul(uint256,uint256)", "105e029f": "JSONpath_string(string,string,string)", "105e68f0": "allBankers()", "105e87a1": "redeemaAt(bytes32)", "105ea540": "minimumToRaise()", +"105ebe2c": "vaultAdjust(uint256)", "105edd83": "toTheTop()", "105ee9a7": "endFight(uint256,uint256,bool)", +"105f7b7c": "issueTokens(address[],bytes32[])", +"105f7d72": "prizelevelmans(uint256)", +"105f951b": "_getWethFromCollateral(address,address,address,uint256,uint256,bool)", "105fc4e8": "REQUEST_FOUNDATION_AMOUNT()", +"105fd5fb": "createOption(uint256,uint256,uint256,uint8)", "105ff033": "redeemReward(address,uint256)", +"10602ef9": "poolIdsOf(address)", +"10603023": "setTradeFee(uint256)", +"10603dad": "tokenAddresses(uint16)", "10609902": "sendFundsToBorrower()", "1060c965": "ZILLION()", "106109c9": "RandiveBhToken()", +"10616759": "voitingRatio()", "10618776": "setETHUSDdemon(address)", "10619300": "lockAccount(bytes32)", +"10622ee8": "renounceAdministrator()", "106233e8": "addAltOracle(address)", "106259c8": "getNonEtherController()", +"1062b39a": "amb()", +"1062dea0": "ccowner_uorder(address,uint256)", "10639ea0": "cancelMigration()", "106524a5": "multisendEth(address[],uint256[])", +"1065295f": "totalRewardforTC(string)", +"1065cf73": "commission(uint256)", +"106638b8": "investorAtAccount(address)", "106639ba": "getOwnAssets()", +"10664e26": "getRecentWolfingBets()", +"10665519": "isTestAccount(address)", +"10665aa2": "getRewardsByGroup(uint256,uint256)", +"1066951a": "together()", "1066cd3c": "voteFor(uint16,address,bytes32,bytes)", +"1067ca92": "referralCodeMappingIndexedByAddress(address)", "1067f077": "setCompte_41(string)", "1067f361": "totalTokenToSale()", "10680b84": "getShareTokenAddress()", "106812c9": "setPI_edit_18(string)", "106858cb": "getRemainingPreSalesAmount()", "1068d056": "getaddress0()", +"1069143a": "options()", +"10693a39": "safe128(uint256)", +"10693fcd": "lockToken(address)", +"1069f3b5": "getUserInfo(uint256,address)", "106a182b": "getLambosCount()", +"106a44b7": "StageGoalReached(uint8)", +"106a5f18": "_reportingAllowed()", +"106aac37": "Donation(address,uint256,uint256)", +"106ac57b": "clearLockUserInfo(address)", +"106b0339": "changeIndex()", "106b291f": "ethUsdRateInCent()", +"106b9ca1": "lastRebalance()", +"106ba60e": "approve_331(address,uint256)", "106bd2da": "initiateEscrow(uint64,uint256,address,address,address,address)", "106be310": "getNameByNumber(uint256)", +"106be689": "addExt(uint64,uint64)", "106c0a45": "collectOriginalBetERC20(address)", "106c5511": "create(address,string,string,uint8,uint256)", "106c6441": "removeReinforcedWhitelist(address[])", +"106c8005": "priceSecond()", "106c9da1": "mine(uint256,uint256,uint256)", +"106ca3c3": "setMaxDelay(uint256)", +"106cdceb": "transfersAreFrozenAfterRebase()", +"106d08df": "scheduleUnstake(uint256)", "106d2813": "setCreditGameAddress(address)", +"106da3c7": "setMaintenanceModeMintr(bool)", "106e6290": "withdraw(address,uint256,bytes32)", +"106e9a4b": "getReserveId(address)", +"106f09f2": "companyPercentage()", +"106f3449": "curve_creators(bytes32)", +"106f3b6e": "minBurnPercent()", "106f6a3d": "TOKEN_FIRST_EXCHANGE_RATE()", "106f6f33": "bountyTokensCount()", "106f77a7": "multiMint(uint256,uint256[],uint256)", @@ -9383,72 +17098,117 @@ "106fd2d5": "setSaleAddress(address,address)", "106ffbd3": "withdrawBatchTokenToInvestor()", "107046bd": "projects(uint256)", +"10706798": "referTree(address)", +"1070771e": "setToDecimals(uint256)", "1070eb4f": "calculateInterestDue()", "1070f410": "convertToBytes(uint8[],bytes1)", +"10711244": "CoreToken()", "10711911": "BONUS_TIER_5_LIMIT()", "107169c5": "allLinesWrong()", +"10716b25": "companySignsInvestmentAgreement(string)", "10717a2e": "switchCompatible223(bool)", "10718655": "contributeFor(address)", +"1071a290": "withdrawUnderlying(uint256)", +"1071a8d6": "writeOption(string,uint256,uint256,uint256,uint256)", +"10722e06": "increentCount()", +"107253ca": "defaultCallValue()", "1072cbea": "transferToken(address,uint256)", +"1072f8bc": "LAYER_DEFAULT_POWER()", +"1072fda2": "validateJoinPackage(address,address,uint8,uint256,uint256)", +"1073019f": "setPublicPermission(address,uint256,bool)", "10731a65": "claimTokenOwnership()", +"10735060": "Provisioned_Clients()", "10735089": "readteamXaddr(address)", +"10735d6b": "changeMinWeiPurchasable(uint256)", +"10739744": "setExtSettingInterface(address)", +"1073b375": "govSetWhitelistToken(address,uint256)", "1073c4a9": "exploreBuilding(uint8,uint8[176])", "1073d1f8": "releaseTprFund()", +"107431d9": "price_queries(bytes32)", "10745f7e": "getMinAmountToWager(uint256)", "1074c619": "flushEthers()", "1075153f": "multiPartySend(address[],uint256[])", +"10751cf6": "WBNBtokenAddress()", +"1075afb1": "beyondExProx()", "1075f186": "fundingPoCEndTime()", "10764268": "salvageOtherTokensFromContract(address,address,address,uint256)", +"107679dd": "PerformedApprove(address,uint256)", "10768bdd": "myUsingOracalize()", "10769e01": "POOL_EDIT_2()", "1076c2d7": "StreamXOnline()", "1077135a": "oraclizeSetWinner(uint256)", +"10775238": "withinLimit(address,uint256)", "1077666e": "unmined()", "1077f06c": "makeClaim(uint256)", "10780cce": "grantsStartTimestamp()", "107853a9": "Spacoin()", +"10786deb": "SECONDS_PER_MONTH()", "10787d58": "checkfriend(address)", +"107899d1": "checkTimeToCancel(uint256,uint256)", "1078ad80": "makeContractPermanent(string)", +"1078b39d": "_FPTAColPool()", +"1078f68d": "log(bool,bool,address)", "107925bb": "viewCustomer(string)", "10793b50": "m_contributionHistory()", "10796a47": "staticCall(address,bytes,bytes)", "10797bab": "runtoeth(uint256)", "1079b859": "finalRewardPeriodPercent()", "1079ed67": "getChildByAddress(address)", +"107a1b86": "autoDeltaBalance()", "107a2c5e": "betEvents(uint256)", "107a69e8": "WithdrawResult(uint256,bytes32,uint256)", "107a77d0": "finalizeVestingAllocation(uint256)", "107a83e2": "prizesAwarded()", "107b1f8c": "debug_verifyShare(bytes,uint256[],uint256[],bytes,uint256,uint256)", +"107b6b0c": "changeENS(address)", "107bf304": "withdrawEthToOwner(uint256)", +"107c279f": "getWeth()", +"107c64ae": "operatingBudgetAllocation()", +"107cba0f": "_payFees(address,uint256,bytes32)", +"107cfe51": "getMatch(uint256,uint256)", "107d1d55": "startPeriod(uint256,uint256)", "107d4b23": "Bitcan()", "107d8a90": "COBA()", "107e1a29": "setEndTimeIco(uint256)", +"107e2d03": "totalBurntMEDAL()", +"107e4a8a": "updateKyberAddress(address)", +"107e65a4": "SWAP_TOKEN_for_ETH(address)", "107e7b1f": "setBroker(address,uint256)", "107e8b24": "setTimeSale(uint256,uint256)", "107f3f6a": "setExeStatus(uint64,uint64)", +"107f5111": "agree(address,uint256)", "107f587c": "deactivateEmergencyProtectedMode()", "107f76c5": "cancelOrder(bytes32,uint64)", +"10801101": "addPack(uint256,uint256[],uint256[],uint256)", "10802749": "maxPlayerNum()", +"10803b72": "getOwnersByPage(uint256,uint256)", +"10806174": "_depositETHBalances(address)", "1080b7b1": "token4DivsOwing(address)", "1080f251": "ownerOfLand(int256,int256)", +"1081259e": "deployContracts()", "10814c37": "bot()", "10816757": "crowdsaleClosingTime()", +"1081a47e": "diseasesbyIds(bytes32)", "1081dc8a": "contractIndex(uint256)", "10828bcc": "noOpenGameResult()", "1082a128": "SaveRickAndMorty()", "1082cda1": "Register(bytes32,address)", "1082d51e": "COINESIA()", +"108329f8": "getUserbyIndex(uint256)", "1083d2fe": "technicalAmount()", "1083f761": "assetToken()", "10840303": "alterAdmin(address,bool)", +"10844489": "earnedByReferral(address,address)", +"10844526": "reqc()", "108456b4": "FIRST_AUCTIONS_MINIMUM_RAISE()", "10848ddf": "getDaysInMonth(uint256)", "1084a1fb": "transferToAccount(bytes32,uint256)", "1084bc90": "farmSingle(address,address,uint256)", "1084cc51": "canDoubleDown()", "10855269": "setProxyStorage(address)", +"10855e28": "balances(bytes3)", +"108568f1": "basicRewardEndBlock()", +"10859ff8": "getNFTMouldData(uint256)", "10861f40": "wasDelegate(address,address,uint256)", "108623f2": "checkProofOfWork(uint256,uint256,uint256)", "10867877": "eatUnicornWithoutCorn()", @@ -9456,17 +17216,23 @@ "1087452c": "signatureOwner()", "10875ac0": "getMembershipExpiryDate(address)", "10878ea1": "REGISTRY_INTERFACE_REQUIREMENT()", +"1087c237": "buck()", +"10881166": "addToken(address[])", "10888f2f": "admin_exFeeRate(uint256)", "1088996b": "_newOutgoingTransaction(address,address,uint256,string)", +"1088e619": "convertDai(uint256)", "1088f03f": "crowdsaleCompleted()", "10895087": "DDJXRP()", "1089843c": "OAKTokenCrowdsale(uint256,uint256,uint256,address)", "10898a3e": "currentStateStartTime()", +"1089994c": "unlockTPT()", "1089b16e": "setPod(address,uint8)", "1089f215": "ex(uint256)", "108a101b": "hasEmptyEditionSlots(uint256)", +"108a244e": "ethWithdrawn(address)", "108a936b": "_initGame(uint256,bytes32,bytes32,bytes32,uint256)", "108afb9f": "getBonusAmount(address,uint256,uint256,uint32)", +"108b54b9": "setMaxRedeemableCouponPercentPerEpoch(uint256)", "108b77ad": "tokenPresaleSold()", "108c3708": "paoContactAddress()", "108c8ae4": "completeTask(uint256,uint256)", @@ -9474,95 +17240,177 @@ "108d0c84": "enableDefinedGame(uint256,bool,bool)", "108d40f8": "PutGift(address)", "108d6f94": "ProjectOwner()", +"108d79fb": "cToken(address)", +"108d8059": "newTransactionFee(address)", "108d995b": "getContinuityNumber(uint32)", +"108da80d": "getAddressAndBidPriceArray(address,uint256)", +"108ded1f": "createLoanContract(address,uint256,uint256,uint256,uint256)", "108e161b": "isBallotSealed(uint32)", +"108e184d": "lST(address)", "108e4bdb": "isKycTeam(address)", +"108ea6cf": "setValidStableCoin(address,uint256)", "108eaa4e": "resolver(uint256)", "108f69f8": "verifyTetherLoss(address,uint256,uint256)", "108fa161": "newEnglandBets()", +"108fb415": "prizePercent()", "108fe10c": "advisers(uint256)", +"10900686": "reserveDays(uint256)", +"10904042": "getGlobalMarket(address)", "109050bc": "jackpotLastQualified()", "1090a638": "presaleGoalReached()", "10922cc1": "testTransferCost()", "1092735d": "Created(address,uint256,uint8,uint256,string)", +"1092e683": "exchange(string,address[],uint256)", "10937b5a": "adminAddMoney()", "1094252e": "reconciliationDate()", "109447e1": "createHash(uint8[5],bytes32)", "10947164": "changeCEO(address)", +"1094acba": "tokensList(uint8)", +"1094ae5a": "openTier2()", "1094d009": "LowGasAmount()", +"1094fa57": "limitStorage()", "10950708": "setInvoicePaid(address,address,uint256,uint256)", +"10951a06": "mintCommunityTokens(address)", "109538ca": "transferAdeptTokenOwnership(address)", "10953c22": "ChangeChallengeAdditionFee(uint256)", "1095b6d7": "withdrawFee(address,address,uint256)", +"1095b908": "func_27D6()", "1095f211": "PushInvestorList(address)", "10961935": "Bionic()", +"10969523": "setProvenanceHash(string)", +"10969dbd": "suggest(bytes32,string)", +"1096f88b": "startChangePercentAndAmountSold(uint256,uint256)", "10970fbb": "convertTransferredTokensToMny(uint256,address,address,uint256)", "10971bee": "bonusDayPercent()", "10972704": "getCurrentAward()", +"10973edc": "unstakeTRY()", +"10976a4b": "MintRestarted(string)", "10978594": "depositSoul(uint256)", "1097b9ee": "sellingPrice(bool)", "1097c929": "episodePurchase(address,uint256)", "1097d54a": "addMaster(address)", "1097e579": "Enter()", +"1098e948": "initiateFlashLoan(address[],uint256[],uint256,bytes)", "1099107b": "apSaleIssue(address,uint256)", +"109916fe": "verifyBlocks(uint256[],uint256[])", +"10994e11": "calculateTenPercent(uint256)", "1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", "1099f6fa": "disablePOSReward(address,bool)", "109a9dbc": "bulletAddress(address)", +"109aa7ef": "BNBAddress()", "109ac462": "safebalance(uint256)", +"109b1ee6": "_mints(address,uint256)", +"109b3d59": "convertUniLS(uint256,address,uint256,uint256)", "109b678a": "immortals(address,uint256)", +"109bd255": "REIGAI11()", +"109bf6a9": "alocationRnD()", +"109c1107": "onFinishCollectRound()", "109c2032": "LotteryToken()", +"109d0af8": "comp()", "109d42d3": "addTokenSale(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"109db143": "pendingHotc(uint256,address)", "109df68e": "rotateBitsRight(bytes,uint256)", +"109e46a2": "getLastRoundIdBeforeElapsedSecs(bytes32,uint256,uint256,uint256)", "109e591a": "SchmecklelToken()", "109e8b21": "addOldMayors(uint256[],uint256[],address[])", "109e94cf": "client()", "109e9de6": "getMaxBuy(uint256)", "109ef276": "newDutchPriceRate(uint256,uint256)", +"109f60e3": "setFundingRateProvider(address)", "10a03b22": "PHASE1_SUPPLY()", "10a0d2f1": "startOfCrowdsale()", "10a101df": "getKeyData(bytes32,bytes32)", +"10a161d0": "callFunc(address,uint256)", +"10a1c573": "addBoard(address)", "10a20b4c": "testMintGuy()", "10a2f7cb": "createOption(uint256,string)", "10a31091": "createRadar(uint256)", "10a37c26": "getWinnerAddress()", +"10a3bae9": "weiToIncomeTokenValue(uint256)", "10a3ec4f": "test_fiveAssertTrue()", +"10a4538f": "availableMxxAmt()", +"10a46ed5": "ForeignTokenTransfer(address,address,uint256)", "10a4fd08": "Platinum()", +"10a56d5d": "walletTokenAllowance(address)", +"10a57bdf": "buyTicketWithVault(uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "10a5bbdb": "changeCharPrice(uint256,uint256)", +"10a5d828": "checkBurnRequestIDOf(address)", "10a64976": "ARLCToken(uint256,string,string)", +"10a65b54": "doLockUp(address,uint256,uint8)", +"10a676ae": "viewBurnRandomPositionIdx(uint128,uint128)", "10a6fdc2": "updateEtherPrice(uint256,uint256)", "10a73f5e": "jackpotrate()", "10a78f4a": "playerTwoReveal(bytes32,bytes32)", +"10a7a31b": "_maxFunding()", "10a7a5f5": "secondStageWallet()", +"10a7a659": "setShouldTransferChecker(address)", +"10a7e201": "addSupportedIdentifier(bytes32)", +"10a7ee29": "returnSend(address)", +"10a7fd7b": "ledger(uint256)", "10a80397": "addBudget(uint256,uint256,uint256)", "10a82579": "lockTokensAddress()", "10a86088": "getIntField3()", "10a942b4": "withdrawCoindropsToken()", +"10a96c0d": "buybfiToken(uint256)", +"10a9c794": "initialize(string,string,uint8,address[])", "10a9de60": "getOracle(uint256)", "10aa3d8c": "VirsymCoin(string,string,uint256,address)", +"10ab7691": "counterDeposits()", "10ab96e1": "LYNDO()", "10abda2b": "leaderAddress()", "10abdb0a": "Dealer_HitOrStand(uint256,bool)", +"10ac9f0b": "AuctionCancelled(uint256,address)", +"10ace70b": "marsPerBlock()", "10acec5d": "_save(address,uint256,uint256,uint256,string,string,address,uint256,uint256)", +"10acfb9b": "RWD()", +"10ad95cc": "getRec10()", "10adb0ea": "sanMaxLength()", "10adda0e": "feesAvailable(address,bytes4)", "10ae4a73": "presaleAllocation(address,uint256,uint8)", +"10ae4ca4": "getGegevens()", "10ae4ce2": "setReleaseValidator(address)", +"10af0486": "_pIDxName(bytes32)", +"10af2560": "createOrder(address,address,uint256,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", "10af92ba": "eachCandy()", +"10b0624a": "paymentPeriod()", +"10b089ed": "TEAM_RESERVED_AMOUNT1()", "10b0a4cb": "updateServiceMaxCreditsPerProvision(address,uint32,uint256)", "10b0b5d5": "add(uint256[])", +"10b1219e": "checkpresaleLastSupply()", "10b1bf2c": "LongPlace(address[2],uint256[8],uint256,uint256)", +"10b20139": "withdrawnAmount(address)", "10b23ceb": "isAdjacent(uint8,uint8,uint8,uint8)", +"10b23f1a": "luckyGroups(uint8)", +"10b2dbe1": "putOnAuction(uint256,uint256,uint256,uint256)", +"10b3b8a0": "getPoolStakingBalance(uint256)", "10b3d502": "ICO_BONUS2_RATE()", +"10b41735": "WhitelistAdd(address,address)", "10b44094": "LogUserRegistered(address,address)", +"10b53b81": "getUserTrades(bytes32)", +"10b5549b": "getlastRouterAndNewsageAddress()", "10b60e65": "SimpleTrade(address,address,uint256,uint256)", +"10b62500": "approve_324(address,uint256)", +"10b68901": "importContracts(address[])", +"10b6f3be": "getFundBalances()", "10b787d1": "evaluate_model(uint256)", "10b798d9": "countRef(address)", "10b7d9ae": "view_get_maintenanceMode()", +"10b7e40e": "setCldrn(address)", "10b8b441": "PrediksiToken()", +"10b8cb84": "modifyParameters(address,address,address,bytes32,bytes32,uint256)", +"10b928b4": "globalInvested()", "10b9e583": "shutDown()", +"10b9f28e": "deployed_by(bytes32)", +"10ba10df": "sellback(uint256)", +"10bace8c": "indexPrice()", +"10bad4cf": "decreaseAllowance(uint256)", +"10bb080e": "crowdsaleUserCaps(uint256)", +"10bba864": "POINTS_DECIMALS()", "10bc044f": "setUserLanguages(address,address,uint256[])", "10bc3c75": "getCurrentMiner()", +"10bca5a0": "tuna()", "10bd0d9e": "LegendsToken(address,address,uint256,bool)", +"10bd1f16": "calculateSystemBurnRate(address)", "10bd6d2b": "__address2__()", "10bdc6cc": "joingames(uint256)", "10be0ab0": "getDaoist(address)", @@ -9570,81 +17418,161 @@ "10beb070": "getRaffleStats()", "10bebe64": "OneExchangeToken()", "10bf5068": "setProposalFee(uint256)", +"10c04caa": "LUNIVERSE_ADMIN_ROLE()", "10c067d2": "setPriceForProtectedCrypton(uint256,uint256)", +"10c089c6": "setOraclesTo(address[],address)", "10c0afaa": "balanceForReward()", +"10c0c0b4": "tokenRecords(address,address)", +"10c0ee64": "setBufferBlocks(uint256)", "10c1181d": "memberId()", "10c12917": "calculateWinnings(uint256,uint256)", +"10c172c6": "cancelContractChange(bytes32)", "10c193b9": "total_tokenwei()", "10c19421": "born()", "10c1952f": "setLocked()", "10c1b414": "moveTokens(address,uint256)", +"10c1c103": "stakedAmounts(address)", "10c1de19": "GeneratedNumber(uint256)", "10c1ff21": "crowdsaleSuccess()", +"10c2366d": "winningPoints()", +"10c24daf": "setMinBPriceTime(uint256)", +"10c27402": "txMinted(string)", "10c2a365": "PreICO()", "10c2c1c1": "setArbiter(uint256,address)", +"10c30b65": "rejectAgreement()", "10c36365": "SetExchanger(address,bool)", +"10c395bf": "contractLockStatus()", "10c3b15f": "calculateAmountToRelease()", +"10c405e8": "getSampleType(address)", "10c452ef": "deactivate_trading()", "10c4610b": "exporterBanker()", +"10c47c99": "startOfPresale()", "10c49b78": "CarlosCoin()", "10c4b19a": "minMakerBetFund()", +"10c4df74": "setMaxInflationRate(uint256)", "10c4e8b0": "all()", +"10c4f434": "setPenaltyFee(uint256)", +"10c51c1b": "equity_in_usd(address)", +"10c53e7e": "GamePlaySlot(uint256)", +"10c55f2b": "BUYERS(address)", "10c5b269": "orderMatchSell(uint256,uint256,uint256,uint256,uint256)", "10c5b328": "mintTokens(uint256,address)", +"10c5d848": "_voteExists(uint256)", +"10c5dd88": "mint(string,string,address,uint256)", "10c70801": "setMaxAddresses(uint256)", "10c74fc6": "setGlobal(uint256,uint256)", "10c7868f": "sessionNumber()", +"10c82ddf": "basePure()", +"10c8b404": "APPROVE_WITH_AUTHORIZATION_TYPEHASH()", "10c9135e": "getTime3(address)", +"10c97409": "ggx()", +"10c9a47a": "finalPricesBuffer(address,uint256)", "10c9ab39": "makeTrans(address,uint256)", +"10c9bef0": "betaUserContractAddress()", "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)", +"10cb6efd": "changeTotalAirdropAmount(uint256)", +"10cb818c": "transfer_multisig(uint64,address)", "10cb954c": "members_push(address,address)", +"10cbbc0b": "buySigil(uint16)", "10cbe445": "applyMC()", +"10cc0faa": "NMP_DEPOSIT_PERCENT()", +"10cc2870": "workTimeList(uint256)", "10cc6e21": "Dappster()", "10cc969b": "sumbitForElection()", "10ccbbdb": "_checkVotes(address)", "10ccbe66": "setAltCapitalization(uint256)", +"10ccbea0": "fragmentsEarned(address)", +"10ccd626": "_swapETHForExactTokens(uint256,address[],address,uint256)", +"10cd0599": "getUserInfoFromPersonId(address)", "10ce0516": "canSwap()", +"10ce204a": "fulfillSp500Price(bytes32,uint256)", "10ce2f3f": "buy3(address[],address[],uint256[],bytes,bytes,bytes)", +"10ce4a2c": "getSquidPerBlock()", "10ce6452": "set_deposit_fee(uint256)", +"10cf3851": "PaidLoan(address,uint256,uint256)", "10cf5d47": "awaitingPayout()", +"10cf854b": "getSwapAndFeeAmounts()", "10cfcc19": "left17(uint256)", +"10cfe906": "underlyingContract()", "10d0059c": "removeLock(uint256)", "10d07e27": "_lotteryCard(uint256,address)", "10d08ef4": "_check_winner()", "10d0ffdd": "calculateTokensReceived(uint256)", +"10d1e85c": "uniswapV2Call(address,uint256,uint256,bytes)", "10d26354": "greaterThan(bytes32,bytes32)", +"10d26c9b": "allocateTokens(address,bytes16,uint256)", +"10d2b440": "registerDevice(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint256,uint256,bool)", "10d2f2e5": "set_whitelist_enabled(bool)", "10d3bd2a": "transferMoneyMoney(address,uint256)", "10d426f2": "_remove(address)", +"10d47867": "claimUnlock(uint256,address,uint256,uint256,address,bytes,address,bytes,address)", "10d48cd3": "verificationAddressOn(address)", "10d5105d": "offlineTransfer(address,address[],uint256[],uint8[],bytes32[],bytes32[])", "10d58506": "transFeeCut()", "10d5e276": "maxAttempt()", +"10d5e590": "oTokenKey()", +"10d68f18": "EventBattleRemove(address,uint256)", "10d6a13a": "tokenSaleClosingTime()", "10d72742": "removeFailedGame()", +"10d76460": "tunePrice(uint256,uint256,uint256)", "10d7b903": "DIALSSPUN()", +"10d7c25e": "updatePropertyContract(address)", +"10d82287": "joyContractAddress()", +"10d8614c": "Buy(uint256[],string,uint256[],uint256[],string,string)", +"10d86b1f": "banUser(address)", "10d89d37": "isExchangeUser()", "10d8d74d": "setPrice(bytes32,uint256)", "10d92060": "requiredGasPrice()", +"10d974ae": "swapOut(address,uint256)", "10d979f6": "tokenDivsOwing(address)", +"10d9a3fa": "poolAmount(uint256,uint256,uint256)", "10da9f75": "StayBitContractFactory()", +"10db3cf8": "setMaxICO(uint256,uint256)", +"10db48be": "pIDAddr_(address)", +"10dbc913": "RequiredSignaturesChanged(uint256)", "10dc0e3c": "decimalOfPrice()", +"10dc7f47": "setRewardVelocity(uint256,uint256)", +"10dc97c0": "burnTotal()", +"10dcf64c": "setLiquidityLockDivisors(uint256)", +"10dd70e6": "delWhitelist(address[])", +"10dda040": "depositBlockNumberOf(address)", "10ddaa87": "_setCurve(uint256[],uint256[])", "10ddd6fc": "_onPromo(address,uint256)", +"10de27b9": "wadToRay(uint256)", +"10de8152": "getStakedLPBalanceFrom(address,uint256)", +"10de89bd": "viewAirdropZ00M()", "10debdf8": "isAuditFinished(uint256)", +"10debe33": "redeemSharesQuantity(uint256)", +"10dec431": "lastMatches(uint256)", +"10df6c7a": "OnSuccessBuy(address,uint256,uint256,uint256)", +"10dfea72": "stopDay()", "10dff452": "getStatsData(uint256)", +"10dff60e": "claimedPoints(address)", "10e04dcb": "BONUS_500()", +"10e06a76": "roundSequence()", +"10e06e7e": "chageAirdropAllocationAmount(uint256)", "10e0ebb3": "callStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"10e1b59d": "getContractTotalInvestment()", "10e1c5e5": "getKrsFromApproved(address,uint256)", +"10e1cdcb": "return500PaymentsByDates(uint256,uint256,uint256)", "10e1d6db": "payoutEscrow(uint256)", +"10e1d8ca": "partyA()", +"10e1e6c7": "dataLog(uint256)", +"10e20760": "terminateEarly()", "10e22d41": "receivedWei()", +"10e24db5": "showValue(address)", +"10e29cf9": "decline(address)", "10e2b914": "setTargetDiscountValue6(uint256)", +"10e2d492": "joysWeapon()", "10e3a28b": "iEther()", +"10e45d55": "MaxPrizeShareAltered(uint256)", +"10e51e14": "initialize(uint256,uint256,address,address,address,address)", +"10e55698": "assetToUsd(address,uint256)", "10e56973": "keyPrice()", "10e5bff8": "setSuccessor(address)", "10e6913e": "upDate()", @@ -9653,25 +17581,37 @@ "10e6d3c9": "teamReservation()", "10e6d746": "_mint(address,string)", "10e6e06c": "vote(bool,uint256)", +"10e71a02": "setNFTToken(address)", "10e776ed": "lockBalanceOf(address)", +"10e7830d": "atomized()", "10e7a9ce": "countMonths()", +"10e7b9f2": "saveTime()", "10e7e89f": "getLockingTimestampfrom()", "10e80ded": "accumulate_to()", "10e82384": "airdropAdmins(address)", +"10e8717c": "saveValueAndTransferProxyAddr()", "10e89b22": "remove_deal(uint32)", +"10e8e57b": "GetMilkEvent(uint32,uint32)", +"10e95b6c": "couponsExpiration(uint256)", "10e96b3c": "createMorePaymentChannels(uint256)", "10e9f2eb": "_getFetchVoteInterface(uint256)", "10ea13df": "totalInvestment()", +"10ea6217": "LRK_TITLE()", "10ea6b34": "setReadOnly(bool)", +"10ea759f": "bonusPercentPreSale()", "10eae945": "wdToken(address,address,uint256)", "10eaf707": "getWarehouseByAddress(address)", "10eb3a32": "getContinuityNumber(uint32,int256)", "10eb5a8c": "transferAndCallFST(address,uint256,bytes)", "10ebb38d": "ASFBToken()", "10ebf103": "getPokemonBet(uint256)", +"10ec070e": "approve_359(address,uint256)", "10ec5d2c": "funeralAndBirth(bytes32,int256,bytes32)", "10eca945": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256)", +"10eccb51": "setRewPerBLock(uint256)", "10ece9c6": "correctedHeroContract()", +"10ecf84e": "bitdPerBlock()", +"10ed2df9": "removeAdmin(string)", "10ed5dfe": "_emitActiveChanged(bool)", "10ee1910": "submitGameResultAndTriggerPayout(uint256)", "10ee51ca": "GXVCSentByEther(uint256,address,uint256)", @@ -9680,120 +17620,238 @@ "10ef1976": "getEpmBalance(address)", "10f01eba": "pIDxAddr_(address)", "10f0c4da": "maximalInvestment()", +"10f0c595": "erc20BonusBalance()", "10f13a8c": "setText(bytes32,string,string)", "10f169e8": "disputeStatus(uint256)", "10f1726d": "isDayTokenActivated()", "10f1a274": "setMinWei(uint256)", +"10f21723": "professorsListOfAdresses(uint256)", "10f226df": "addAction(bytes32,int256,int256,bytes32[],bytes32[],bool)", +"10f230dc": "BEES_PRICES(uint256)", "10f2bf3e": "closeSale2()", "10f2e11c": "PrometheusX(address,address)", +"10f2f61d": "createOrder(string,uint256,address)", "10f32982": "GetQueueLength()", +"10f3a6d8": "getCurrentAllocationStrategy()", "10f3ac24": "EmergencyWithdrawNoAccountedTokens()", "10f40804": "alottMainSaleToken(address[])", "10f41715": "updateMintingData(uint256,uint256)", "10f444ac": "ChinaInvestmentToken(uint256,string,uint8,string)", +"10f44658": "getCryptodiamondWatchAddressById(uint256)", +"10f448f0": "viewAmountIfIMintNow(uint256)", +"10f4593d": "transferDeposits(address)", +"10f49cb2": "moveAmountIn(address,uint256)", +"10f4b4dd": "processWithdraw(uint256,address,uint256,uint256,uint256,uint256,bytes32,bytes)", +"10f54166": "setProtocolTokenEthPrice(uint256)", +"10f552cc": "Deployed(uint256,uint256,uint256,uint256,uint256)", "10f5f1b3": "get_participant_arbits_kyc_whitelist(address)", "10f5f6b6": "free_vote_for_candidate_A()", +"10f61e66": "claimLoanDeposit(uint256)", "10f66c54": "AirdropOne(address,uint256)", +"10f67d23": "contractEthBalance(address)", "10f6e2a6": "setCountWinnerByPlace(uint256,uint256,uint256)", "10f6fd02": "GetAllChallengeIDs()", "10f74467": "kycRegisteredContributors(address)", +"10f7ad8a": "revertToPreviousAddress(bytes32)", +"10f7b023": "withdrawerInfo(address,address)", "10f7cf32": "statuses(bytes32)", +"10f7ea60": "KAFIR()", +"10f811a8": "lastDepositId()", +"10f82d20": "transactionOffset(string)", "10f85f44": "EAACoin()", "10f88546": "declareCheater(address)", +"10f90cf7": "minContributionInEther()", "10f91e39": "walesaDawajMojeStoMilionow()", +"10f92f45": "doRepay(address,uint256)", "10f945c7": "withdrawToPoolOwner(uint256)", +"10f9b5d8": "BurnLong()", "10fa01e6": "isBattleCreator(string,address)", +"10fa79e2": "maxTradeSize()", "10fa85c6": "HybridToken(string,string,uint8)", "10fab6c7": "addReceivedMessage(address,address,uint256)", "10fae6f4": "futureFundingWalletAddress()", +"10fb06d6": "hxpRatio()", "10fb3c85": "addDelayedBonus(address,uint256,uint256)", "10fb52bf": "createSaiFoundersEdition(uint256,address)", "10fc0a6e": "RigCraftPresalePackageManager()", "10fc0d39": "transferToMultisig()", "10fc31ce": "balancesForPreICO(address)", +"10fc936f": "tokenPrimeByIndex(uint256)", +"10fcc92c": "Presale(address,uint256)", "10fccbf0": "presaleBurnPaused()", "10fcda55": "DDFToken(uint256,string,uint8,string)", "10fcdecc": "fechVoteInfoForVoter(address,uint256)", +"10fd03c2": "RefreshReputation(bytes32,address,address,uint256)", +"10fd341a": "getVoteIndex(address,address)", +"10fdf217": "getJobDefaultPay(uint256)", +"10fe04a8": "eatSausages(bool)", "10fe42b8": "getBdpControllerHelper(address[16])", "10fe5a2a": "rateEarlyStage3()", "10fe7c48": "placeBet(uint256)", +"10fe8e71": "setInsurancePeriod(uint256)", "10fe9ae8": "getTokenAddress()", "10feb0e5": "setPowerToken(address)", +"10ff1a71": "tokenInitialSupply(uint256)", "10ff4a1b": "lockedTokenBalance()", +"10ffb5dc": "verifyOfficer(address,address)", "1100482d": "attach()", +"11005b07": "debtBalance(address)", +"11009b42": "mutant()", "1100a9d8": "endGame(uint256,uint256,address)", "1101a0fd": "claimWinnings(bytes32,bytes32[],address[],uint256[],bytes32[])", "1101eaaf": "purchaserCount()", +"1101eb41": "unbondLiquidityFromJob(address,address,uint256)", "1101fa06": "WhaleChain(uint256,string,uint8,string)", "1102610e": "setMarketplaceContract(address)", +"110371ac": "isGameAdmin(uint256,address)", +"1103a904": "setReferalShared(uint256)", +"1103f0c0": "ethOpts(uint256)", "110466ed": "setOperatingStatus(bool)", +"11046bcf": "HoldBonus()", "110496e5": "allow(address,bool)", +"1104ad85": "getTotalDmgLocked()", +"1104bef1": "__CVaultETHLPStorage_init()", "1104e09e": "SaddleShopSaleFee()", +"1104ed2f": "pendingFruit(uint256,address)", "110506f0": "createCard(uint256,uint256)", +"11051d9b": "airdropGroup(address[],uint256[])", +"11053595": "stakingDistributor()", "11056874": "finishDApp(bytes32)", +"110588a7": "BonusVault()", +"1105b229": "V2swapROTforMAGGOTwithROTAmount(uint256)", "1105efe2": "_setExtraReceiverAmount(uint256,address)", "11063eb1": "updateUnlockDate(uint256)", +"11066718": "winners(string,uint256)", +"1106b76a": "TokenProposed(uint256,address,uint256)", +"1106fe18": "sweepNuts(uint256,uint256,uint256)", "11071cb3": "CratesPurchased(address,uint8)", "1107c3f7": "orderConfirmer(bytes32)", +"1107d537": "onBRLxReceivedForRepay(address,uint256,uint256)", "1107e77c": "removeRequester(address)", +"1107f175": "addSecondOwner(address)", "1107fa00": "thirdStageMintingDate()", +"11080226": "computeSearchRandomBalances(bytes32,uint256,uint256,uint256,uint256,uint256)", +"11085fff": "deactivatedOwnerCounter()", +"1108af75": "closeMatch(uint256,uint256,uint256,uint256)", +"110963bb": "FreezeIn(address[],bool)", "1109a0a8": "blocksProducers(uint256)", "1109ef92": "transferFromCrowdsale(address,uint256)", +"110a1c9b": "setAntPercentage(uint8)", "110ae711": "checkReferral(bytes8)", +"110afc49": "lowBalance()", "110b5f76": "ApprovalDenied(address,address)", "110b8a6d": "changePlatformFlag()", +"110bb26c": "getTokenRates(address,uint256[])", +"110bcd45": "mintItem(address,string)", +"110c118c": "FPGARegister(string)", "110c478b": "uintRound(uint256,uint256,uint256)", +"110c47fc": "LONGESTSTAKINGPOOLTIME()", +"110c56b9": "STANDARD_VOTE_DURATION()", +"110cd56e": "checkExists(string)", "110cee6b": "FlightDelayPayout(address)", "110d35b8": "buyAsset(uint256)", +"110d559a": "snapshotCurrentRound(bytes)", "110d9e68": "insert(bytes32,uint256,uint256,address,address)", +"110dbc73": "_createTeam(string,uint256)", "110dc7a6": "doInvest(address[3])", "110df916": "getChannelID(uint256)", +"110e584c": "setChainLinkOracleAddress(address)", +"110ea389": "stakingAddr()", +"110f30f4": "Document_New()", "110f8874": "withdrawRefund()", "110fd65f": "toBeRaised()", "111002aa": "createTask(string)", "11102d4d": "devRatio()", "11103599": "Token_Offer(address,address,uint16)", +"111070e4": "isRngRequested()", "1110b13a": "getWinningPosition(uint32)", +"11114af1": "print(string)", "11115e38": "controlTime()", +"11117fc8": "adminList(uint256)", "1111cd24": "getBuyReturn(uint256)", +"11124fc8": "phase3EndBlockNumber()", "11125497": "setCodename(string)", +"11128fea": "provableTime()", "1112b124": "setBuyPrice(address,uint256)", +"1113519d": "tokenOracleType(address)", "11136747": "_init(uint256)", "1113ed0d": "KERNEL_APP_ID()", +"1113ef52": "salvage(address,address,uint256)", "1113f2e6": "_addEth(uint256,address)", +"11146c8a": "marketingSupplyAddress()", "1114811a": "FACTOR_9()", "111485ef": "individual_cap()", +"11148f44": "changePVault(address)", "11149ada": "getProof(uint256)", +"1114b5be": "writeBoolean(bool)", +"1114d7c0": "buyPerSellEvent(uint16,bytes32,uint256)", "1114fce5": "clearAdmins()", +"111589cf": "stakeAllBas()", +"11160ff1": "offerLegendaryResultForSaleToAddress(uint256,uint256,address)", "1116cba9": "WWNCoin()", "1116f631": "setFunctionSevenPrice(uint256)", +"1116fd04": "book(uint256)", "111723ed": "getShipDetails(uint256,uint256)", +"11175706": "contractedValueRatio()", +"11176c03": "pickleToken()", "1118069c": "enforceKyc(bool,address)", "111839d5": "rushTimeFloorCount()", "11184392": "registrationDeadline()", +"11186eeb": "gemlyMinters(address)", +"11187749": "createTulip(uint256,bytes32)", "111878f6": "addBonus(uint256)", +"111897ab": "Punish(address,address,uint256)", "11191186": "setReservingPercentage(uint256)", "11196117": "setGameStateFCF(bool)", "11196cc2": "tournamentFinished(uint256[])", "11199872": "setSignatureChecker(address)", +"1119aae7": "_raiseToken()", "1119e8a6": "increaseNumber(uint256)", +"1119f034": "currentSpeed()", +"111a18d3": "burnByOwner(address,uint256)", +"111a1ea3": "_mintingEpoch()", "111a1fe9": "dividendsBuffer()", "111a7427": "setNewAttributes(string,string)", "111b30a7": "setFundariaTokenBuyAddress(address)", "111b63ab": "CoinparkToken()", "111b72c3": "accountCreated(address,bytes32,int256)", +"111bbeed": "proposeUpgradeGovernance(address,address)", "111bc51a": "VibeCoin()", +"111c0aef": "cBakerySwapRouter()", +"111c1760": "allowLockAnytime()", +"111c4724": "approveAs(address,address,uint256)", +"111c83fb": "getPlatformPercentage()", +"111cb258": "highestBids(uint256)", +"111cca65": "lockupPhase2(address)", "111cf909": "setIntegerVaule(uint256)", +"111cfc51": "makerdaoCdp()", +"111d0498": "inRebaseWindow()", +"111d54c4": "juice()", "111d7241": "tournaments()", "111d8171": "getNews()", +"111d9482": "borrow(uint256,uint256,uint256,uint256)", "111da3a7": "popFirstFromArray(address[])", +"111e0376": "excludeFromRewards(address)", +"111e28a9": "setCallPrice(uint256,uint256)", +"111e4b60": "ichi()", "111e73ff": "SetAlias(uint256,bytes32)", "111eaba0": "updateOwners(address,address[],uint256,uint8[],bytes32[],bytes32[])", +"111ec138": "submitAnswerFor(bytes32,bytes32,uint256,address)", +"111f3f04": "burnAndDeploy(address,address,bytes)", "111fba02": "NETM()", +"11201543": "eveUpdate(uint256,uint32,uint256,uint256)", +"112045ba": "rebased()", +"11208415": "showbase()", +"1120a776": "bancorX()", "1120ba47": "ApolloSeptemCrowdsaleExtended(address,address)", +"1120e655": "setCrossInGas(uint256)", +"11212d66": "feeVote(uint256)", +"11216a32": "obsoleteExit()", +"1121ef40": "securityISIN()", "112227ae": "TIER3_BONUS()", "11223a2f": "phasePublicSale1_From()", +"11236ca0": "getLastSettleTime(uint256)", +"11237a2d": "fluB()", "1123adb1": "currentDividendPeriodNo()", "1123cdd9": "decideSplit(uint256,uint256,string)", "1123e608": "LogMigrate(address,uint256)", @@ -9802,37 +17860,69 @@ "11247233": "changeArrangerFeeRecipient(address)", "1124c05a": "getLogs(uint256)", "1124e9ea": "setfocuscardid(address,address,uint256)", +"1125a018": "crowdsaleTokenAllocated()", "11262105": "getLog(address,uint256,uint256)", +"112666b7": "lens()", "11269de6": "setFreezeForCoreTeam(uint256,address,uint256)", +"1126ca5e": "amountWithdrawable(bytes32,address,uint256)", +"1127724f": "getBreedTypes()", +"112783b2": "containerHash(bytes32,bytes32)", +"112794f2": "_buildDomainSeparator(bytes32,bytes32,bytes32)", +"1127b57e": "WALLET_VERSION()", "1127be97": "recomputeLastAverageBalance()", "1128798f": "isCrowdSale()", "1128b59e": "bonusStage2FirstDay()", "1128bbfd": "getProposalAddress(uint256)", +"1128c045": "df9()", +"1128d7cb": "setIndirectThreshold(uint256)", "112940f9": "addConsumer(address)", +"1129753f": "setGovernanceContract(address)", "1129f644": "STAKE_START_TIME()", "112a19af": "Enlisted(address)", +"112b24c9": "fastCount()", +"112b2b07": "setGame(bool)", "112b3c52": "MuxeToken()", "112b4495": "_appendTagged(string,string,string)", "112b466e": "btcraised()", +"112b5717": "makeprivate()", +"112c5cde": "ADVISORS_POOL()", "112c7075": "ManualDeposit()", +"112c7e6a": "advisorIssue(address)", +"112c9ea6": "callToAllowed(address)", "112cc015": "ROLE_CRO()", +"112cdab9": "aggregators(address)", +"112d26a9": "getCandidateVotes(uint256,uint256)", "112d6b34": "getRefBalSended()", "112d761c": "addAnimal(uint8,address,uint32)", +"112d8dfe": "claimTeamFeeMulti(address,uint256)", "112dd4fd": "foundation_coins()", +"112df32f": "createOracle()", "112e39a8": "scheduleCall(uint256)", "112e40b5": "setBalanceOfETH(address,uint256)", "112ea262": "authorizeProvider(address)", "112ed3f5": "resetWeiBalance(address)", +"112efdf0": "switchEthBuy(bool)", +"112f21df": "buyThresh()", "112f5eb8": "airdropCall(address,address,uint256)", "112fb7c9": "finishGenerating(bool)", "112fbe9b": "transferMinimumFee(address)", +"112ffd0a": "regme(address)", +"113004b1": "internal2()", "11302818": "addRefBonus(address,uint256)", +"11302e51": "NewStaker(address,uint256,uint256)", +"11305a9d": "CurrentPoolPoints(uint256)", "11308d66": "freeLandsOf(address)", +"1131bd94": "NewMintRequestCanceled()", +"1131cb36": "setEnableStake(uint256)", +"1132d55a": "anubis()", "1132fae4": "_utoa(uint8)", +"113311fa": "checkNoLiquidationsView(address)", "113353a8": "changeMember(uint256,address,address)", "1133f89d": "sendToGrowthContract()", "11340c21": "getEGTTotalSupply()", "1134269a": "convertForPrioritized(address[],uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"11347861": "getAllRewardDebt()", +"1134918a": "calculateUserDailyYield(uint256)", "11349a6d": "dispute_end()", "1134b7da": "emptyBody(uint256)", "11355585": "setBlockLimit(uint256)", @@ -9840,35 +17930,68 @@ "113642e5": "getConfirmationCount(bytes32)", "11367b26": "destroyer()", "1136aa64": "rocketTravelTime(uint256)", +"11376314": "permissionedAddresses(address)", +"11377394": "getMaxHoldingBaseAsset()", +"1137aedf": "remainingIssuableSynths(address)", "1138001c": "lenghtenFrozenState(uint256,uint256)", +"11380533": "sendTokensToSale(uint256,address)", +"11386310": "collateralPoolAddress()", +"1138a87e": "addProposalWithNonce(string,bytes32[],uint256)", +"1138f0d4": "listOrderbookContract(address)", "11390441": "logic(address)", +"11396f67": "getregisterAmount()", "113990b8": "PRICE_MULTIPLIER()", "1139a355": "releaseForTransfer()", +"1139e9be": "GameData(address,bytes32[],bytes32[],int256[],uint256)", +"113a0cfe": "iot()", +"113a589a": "setUserCapEnabled(bool)", "113a8ed5": "Film()", +"113aa502": "forkContributed(address)", +"113aa8b1": "setLendingPool(address)", +"113b0ab2": "hasSmartContractRole(address)", "113b2eff": "_userRefund(address)", +"113b4417": "approve_699(address,uint256)", "113b5cf2": "checkBonus(address)", "113bb8db": "EventTransfer(address,address,uint32)", +"113bdec5": "panel_1(address)", +"113bdf9c": "tmpUsdGetCount()", "113c589f": "SmartBillions()", +"113c8dca": "vBUSD()", "113ca356": "ticket(address,bool)", "113ce458": "winnerBidValue()", "113d1975": "totalTokensForSaleDuringICO4()", "113d32d0": "TournamentCreated(uint256)", +"113d590c": "request(uint8,uint8,string)", +"113d5fb9": "switchRequiringOfRef()", "113d8938": "addBytesSetting(string,bytes32,address,address,string)", +"113e1a67": "activateStrat(address)", "113e2088": "votingData()", "113e5b93": "dayToDate()", "113e6b66": "fipsAddToLedger(bytes20,address)", +"113e6c0c": "adminKillTrustedAgent(uint256)", "113e9d4f": "DigitalKeyCoin()", "113ee583": "aliceClaimsPayment(bytes32,uint256,bytes32,address,address)", "113ee964": "transferFromByDate(address,address,uint256[],uint256[])", +"113f055d": "_pushUnderlying(address,address,uint256)", +"113f7fdc": "answerAmount(address,uint256)", "11400d8e": "priv_fastGetBlockHash__(int256,int256)", +"11416648": "tokensForpancake()", +"1141bb63": "launchLock(address,bool)", "1141d7de": "URI()", "11420f90": "MYINITIALSUPPLY()", "11424eac": "implementInterface(string)", "11428ce8": "DTXToken(address)", +"1142916b": "points_total(uint256)", "1142d47f": "spentFunds()", +"1142f021": "getUnverifiedOfficers(uint256)", "114385a0": "AddReward(uint256,string,string,string,uint256)", "1143c026": "disableICOSwapLock()", +"1143dc17": "addTicket(string[],string[],string[])", +"1143fcee": "collateralizationCalculator()", +"114412eb": "list2string(uint256[])", "11448a56": "scuttle()", +"1144c066": "discountPhases(uint256)", +"11452e28": "jgbdcexchange()", "11456b47": "addName(string)", "11459f9c": "viewFinalScore(uint8)", "1145a20f": "scheduleCall(address,bytes4,bytes32,uint256,uint8)", @@ -9882,56 +18005,106 @@ "1146eedd": "Referrer(address)", "114719c5": "getLongGap()", "11471e17": "tokensPerEther2()", +"114760bd": "getUserInfoTamagIdAtIndex(uint256,address,uint256)", "1147b142": "MercatusDeals()", +"114810f6": "IcoDeposit()", +"1148a213": "sushi_usdt_poolId()", "1148d93e": "initializedRatify()", "1148da2f": "proposeWrittenContract(string)", "11497c69": "PlayChapToken()", +"11498334": "getImages()", +"1149a81a": "sendReward()", "1149b5f5": "PendingManager(address)", "1149f736": "unpackPrice(uint16)", +"114a0e22": "get_token_status(address,uint256)", +"114a38a1": "SCALINGFUNDS_AGENT()", +"114aa3d8": "NominUpdated(address)", +"114b0d95": "minSize()", +"114b338b": "bonusEndCommonDifference()", "114b4f1c": "howManyGuaranteed()", +"114b73bc": "getInfoDelistWhitelist(bytes32)", +"114b8a4d": "removeRepo(bytes32)", +"114bbbbe": "AppAdded(address,uint32,uint32,uint256)", +"114be584": "hashNegative()", "114beab3": "availableTokensforPreICO()", +"114c152f": "pendingSnip(uint256,address)", +"114c3bcd": "unstakeExecutor()", +"114c68f4": "BALANCE_STEP()", "114d081d": "markHours(bytes32,bytes32,int256)", +"114d2224": "verifyMintableHardwareHash(bytes32,bytes32,bytes32,bytes32)", "114d38a0": "notExceedingSaleCap(uint256)", +"114d41f6": "promotion_wallet()", "114d69b2": "setCRLaddr(address)", "114d8be1": "addNewOwner(address)", "114da3e3": "mintWithEvent(address,uint256)", "114de05e": "addMultipleRecords(uint256[])", "114e4802": "congratulationsText()", "114e6b37": "setDependencies(address,address,address,address,address,address)", +"114e6e14": "onInitialize(uint256)", +"114ec1f4": "lockedCrimeCash()", "114f0e49": "player4()", +"114f4c9b": "burnBlacklistedFunds(address)", +"114f7ef4": "funnelWaifus(uint256)", "114f9511": "pay(bytes32,uint256,address,bytes)", +"114fa9bd": "IsValidToken(address)", +"11505f72": "initialize(address,address[],address,address[],address[])", +"11506480": "gm(uint256)", "11506970": "freezeTokensAmount()", "11506d4b": "forgiveThis(address)", +"11511e35": "renounceCOO()", "11513ba5": "setTTWTokenAddress(address)", +"1152420c": "ESCHToken()", +"11527dac": "batchStakeOnBehalf(uint256[],uint256[],address[],bytes32[],uint256[],uint256[])", +"115387f2": "setBuyBackProfitPercent(uint256)", +"11538f29": "guthaben(address)", +"1153b779": "changeETHMax(uint256)", +"1154d78e": "getGameFeePercent()", "11552212": "Hodl(address,uint256)", "1155d042": "accumulateFee()", "1155f60f": "RoundBetStarted(uint256,uint256)", +"115621b2": "eventStartTimestamp()", "11563b04": "ETokenAirdrop()", "11566dd7": "fundingMax()", "11567f95": "readnameXaddress(address)", +"11568e68": "BurningRate()", +"11574a25": "PenultimateTileTimeout(uint256,uint256)", "115793d4": "newClockmaker()", +"1157a414": "getTradingEnable()", +"1157edf9": "getGiveAddress()", "1158183a": "isPreIcoActive()", +"11586620": "testCalculateInterestIndex_MoreComplicatedCalculation()", +"11588086": "balanceOfPool()", "11589260": "_createProxy(address,address)", "1158f696": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes32)", +"1159222a": "isVotable(address,address,uint256)", "115976c4": "admin1()", "1159f39b": "transferFromCroupier(address,uint256)", "1159fd53": "isAContract(address)", "115a43e9": "getWarriorOwners(uint256[])", +"115b2d18": "submitGuildKickProposal(address,string)", +"115b7489": "HALVING_MULTIPLIER_1()", "115b7fa8": "setOverBalanceLimitHolder(address,bool)", +"115bc936": "listingPrice(uint256)", "115bd3f8": "rejectInvestmentWithdrawal()", "115bdfe7": "currencyMap(address)", +"115cce2b": "setUnirouterPath(address,address,address[])", "115ce332": "isAddressMember(address)", "115d5376": "passPeriod(uint256)", +"115dd1ab": "createNewMonster(string,address)", "115e397e": "getTotalchannels()", +"115e6316": "getWinnerPercent()", "115e9375": "getUint256Min()", "115ecc58": "fundStorageVault()", "115ece4c": "getTokenAmount(address,uint256)", "115f2be2": "customBuyerLimit(address)", "115f2f2f": "tokensPerUSD()", +"115f4fee": "synth()", "115f6795": "cratesSold()", "115fd072": "PowerStandardToken(uint256,string,uint8,string)", +"116037cc": "approveRoot(bytes32,bytes32,uint256)", "1160a807": "addWinTickets(uint256,uint256)", "1160b93b": "calculatePayrollRunwayInMonths()", +"1160f1d0": "binaryOptions()", "11610c25": "bet()", "116134ee": "mask()", "11613fc9": "godBank()", @@ -9939,55 +18112,106 @@ "1161a5c8": "registMyHns(string,address)", "1161d226": "_participateIsAllowed(uint256)", "1162247e": "lastTwoAmbassadorsAdded()", +"1162748b": "elitePackPrice()", +"1162d81d": "proposal(address,uint256,string)", +"1162d952": "bdayPerBlock()", +"1163c3eb": "setTaxDestination(address)", "11642134": "produceEmeralds(address,uint256)", "1164e11e": "getPurchaserAddressCount()", "1165214d": "NotToRent(uint256,uint256,address)", "1165dce2": "getTeamList()", +"1166073a": "registerRelay(uint256,string)", "11667335": "adminRetrieveContractConfig3()", +"11671514": "depositWeis()", +"1167501e": "Medusa()", "1167ecb2": "finishPreICO()", +"1168222b": "isMainAdmin()", "116877cc": "changeAuthority(address)", +"11691c1f": "sendWithVesting(address,address,uint256,uint256,uint256)", "116a6f6c": "BONUS_TIER_7_LIMIT()", +"116a7352": "getAuctionCount(address)", "116a8221": "airFropTracker_()", +"116ac4a3": "weightedApr()", +"116b1d5e": "newRC(string,uint256,string)", +"116b2f7f": "modifyTwoParameters(address,address,address,address,bytes32,bytes32,uint256,uint256,uint256)", "116b556b": "founder1()", "116b7aa9": "setGameGiftOnceAmount(uint256)", +"116bb929": "getBoolArray(bytes32)", +"116c2549": "refreshSashimiSpeeds()", "116c347a": "_withdrawTokensTo(address)", "116c6eab": "getProfitShare(address)", +"116c6fb2": "minBetValue()", "116c92b7": "addAccount(address,uint8,bool,address)", +"116d62d4": "getTokenAtt(uint256)", "116d816b": "assetManagement(address)", +"116d872b": "_totalUnlocked()", "116e4ca9": "flag_is_Online_Solidity_Decompiler_NB()", +"116e54c5": "maximumPlayers()", +"116e5a38": "setBreedTypesAddress(address)", "116e8726": "crowdsaleDasTokensChangeBeneficiary()", "116ea900": "createETHCardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"116eb6ac": "PolicyOut(address,uint256,uint256)", +"116ed561": "createToFarm(uint256,string,bytes,uint256,uint256,uint256)", +"116f1bbe": "clearZOOMEN()", +"116f6c04": "randomNumber(uint256,uint256)", +"116fae8f": "shardAudit(uint256,bool)", "116fb2a8": "setTokensPerETH(uint256)", "116fe01b": "ClipperCoin(uint256,string,uint8,string)", +"117003fe": "bundNFT()", +"117036d1": "referralShareVotes(address)", "11704f52": "tradingLive()", "1170a759": "withdrawalCoolingPeriod()", +"1170fccc": "_getGstAddress()", "11715316": "CorpCoin(address,uint256)", "11715c94": "getBonusRateForAmountBased(uint256)", "11717501": "IEFBR14Contract()", "11719d7e": "getCrowdsalesForUser(address)", +"1171bda9": "recoverERC20(address,address,uint256)", +"1172485a": "disableMint(uint256)", "11725ac5": "Determine_FiveLinkGame_Result(uint32)", +"11726f43": "setBASEAddress(address)", +"11728e29": "permitAndDepositTo(address,address,uint256,uint256,bool,uint8,bytes32,bytes32,address,address,uint256,address,address)", "11728ecf": "toKey(address,uint256)", +"117322d2": "want_dai()", "117328b9": "LogBidReturned(address,uint256,uint256)", "11737d7b": "getFreeTime()", "11738735": "bnbWithdrawEnabled()", "1173ca7d": "CashBackToken()", +"1173d403": "linkBuyback()", +"1174076a": "setStabilityFees(address[],uint256[])", +"11746088": "totalPurchasedGfce()", "11746e5e": "getSpaceshipProductCount()", "1174ca26": "totalLossValue()", "117546c5": "lastParentBlock()", +"117574f5": "allowance_multi(address,address,address)", +"1175a1dd": "pendingCake(uint256,address)", +"1175c049": "set(uint8,uint8,uint8,uint8,uint8)", +"1175e077": "registerGauge(uint256,uint256)", "1176205e": "setMaxRequestQuota(uint256)", +"11762430": "authorToIds(string,uint256)", +"11765b9b": "removeFarmPool(address)", +"11766564": "getCurrentPrices(uint256)", +"1176a0f0": "changeOTCAddress(address)", +"1176d33f": "Transaction(address,string,uint256,uint256,uint256,uint256,bool)", +"1176d564": "giveRight(address)", "1176f5f7": "setDisputeData(uint256[2])", +"1176fde2": "chalToken()", "1177275e": "ZferToken(address,uint256,uint256)", "117735f0": "NewQuest(string,bytes32)", "1177645b": "set_devContract(address)", "11776737": "CrowdServe(address,uint256,uint256)", "11777af7": "refundVault()", "1177892f": "getBalanceByAdress(address)", +"1177a799": "nameXaddress(address)", +"1177cdf4": "ubcusdtPool()", "1177dc34": "nullFace(address)", "117803e3": "OWNER()", "11780a01": "erc20tk()", +"1178791c": "setPrivateSellLength(uint256)", "11789bec": "njbToken()", "1178f51a": "ubiatarPlayVault()", "11791368": "removeCurrentIcoRound()", +"117968c4": "getBoardInfo(address)", "1179778b": "setBasePremium(uint256)", "1179cf71": "lowEtherBonusValue()", "117a0a22": "CosmoToken()", @@ -9996,163 +18220,305 @@ "117b198e": "soldTokensLimit()", "117b4705": "retract(bytes32)", "117b652b": "rewardinterval()", +"117c572d": "MIN_TIER_2()", "117cae9a": "editStartlist(uint256[],uint256[])", +"117cbf1e": "updateMinimumBidIncreasePercent(uint256)", +"117cceee": "setInvestTypeTwo(address)", +"117cd68d": "userCanWithdrawEpoch(address,uint256,uint256)", +"117d3c37": "Released(uint256,uint256,address,uint256)", "117d4128": "getOrder(uint128)", "117d82d6": "playCount1()", "117d94f5": "sendFundsToWallet()", +"117da1ee": "setSlippageTolerance(uint256)", "117ddaf9": "weiRaisedInPreICO()", "117de2fd": "payout(address,uint256)", "117df088": "withdrawDeposit()", "117e1ebb": "lastRoundWinnerInfo()", +"117e1f15": "stopMintable()", +"117e3210": "UnBlacklisted(address)", "117e62fd": "getLastAuctionsWinningBid()", +"117f5a55": "dexBurn(uint256)", +"117f84bb": "get3vdv(uint256)", "117f8684": "changeBZxVault(address)", +"1180508d": "getActivationEnds(address)", "1180788e": "searchString()", +"1180b553": "getSigner(address)", "1180d67e": "angelFoundationShareNumerator()", +"1180ded4": "UnfreezeUpgrade()", "1180f83b": "changeFMPcontractAddress(address)", "1181324b": "updater(address)", "11815312": "grantTeamAdvisorSupply()", "1181a459": "freezeAdministrationContract()", +"1181f90f": "getTotalRealPooled()", "11822cb7": "UTPL()", "11823d43": "OCMarket()", "11823e04": "advisorAllocation()", +"118292e6": "equipNoChangeGif(address,uint256,uint256,uint256)", +"1182b875": "handleSynPackage(uint8,bytes)", "1182c796": "debug_is_dry()", "11831234": "testFailPullWhenStopped()", "1183429a": "removeAddressesFromWhitelist(uint256,address[])", +"11839064": "getConvertibleTokenAnchors(address)", "11844aae": "period2End()", +"1184721f": "changeNeonAddress(address)", +"1184e5f8": "withdrawLUSD(uint256,uint256,address,address)", "11851b5e": "BOARD_3()", +"1185718f": "oracul()", "11857ed7": "spendAdvertising(uint256,uint256)", "1185a6b9": "getBBFarm(uint8)", "118644f6": "OxBtcDex(address,address,address,uint256,uint256,uint256)", "118654f1": "XinXianToken(address,uint256)", "1186560e": "increaseEthRaised(uint256)", +"1186a5c0": "teamTimelock7()", +"1186c725": "getPricevPUREinETH()", "11873ee7": "SetGuestName(string)", "1187497e": "updateContractState(uint256,uint8)", +"11875008": "configureAutomation(address,address,address,address,address,uint256)", "1187648b": "testInstant(uint256[3])", "11878333": "InitialToken(string,address,uint256)", "1187d66e": "votedNo()", +"1187d9b3": "delgate(address,uint256)", +"1187f75a": "MigratedCrates(address,uint16,bool)", "1188189e": "storeSomething()", "1188263c": "MBOTCOIN()", "1188324b": "soldCWC(address,uint256,bytes32)", "11883c6d": "make_hash(uint256,uint256,address,address,uint256,uint256)", "11886bd4": "view36()", +"11891dab": "sendTokensPerWeiToList(address[],uint256)", "118934cc": "ownerCommission()", +"11894fd2": "TEST_DRIVE_INVEST()", "118a0aae": "addHero(string,address,address,uint256,uint256)", "118a9db3": "revenueShare(uint256)", "118aa5a1": "convertToRate(bytes32)", "118b0f04": "santToken()", +"118b381e": "checkRefundState()", "118b53ec": "LogTeamTokensTransferred(address,uint256)", +"118b9535": "userMapping(address)", +"118c4f13": "BURNER()", "118cbccb": "etherWeiRate()", +"118ce205": "GuardianVendAccept(uint256,address,uint256)", "118ceab6": "lastAdjust()", +"118d2191": "setTokenMinterContract(address)", "118da6fb": "getGameCompleted(uint256)", "118dd8fc": "bonusesAfterClose(uint256)", "118e1f2e": "globalOrderSerial()", "118e31b7": "getBorrowBalance(address,address)", "118e4575": "get_branch(uint256)", +"118e5e23": "harvestLP()", +"118ebbf9": "redeemBonds(uint256,uint256)", +"118ee8db": "addBonusToken(string,address,uint256,uint256)", +"118fc88c": "lt(uint256,uint256)", +"118fe752": "globalLockedBitcoin()", +"1190016c": "MAX_RESERVE_RATIO()", +"11902160": "_getTValues(uint256)", "1190516d": "GetByte(uint256,uint256)", +"1190615d": "accNfyPerShare()", "1190647c": "buyerHistory(address,address,uint256,uint256)", +"1190de5d": "DAI2cDAI(uint256)", +"1190f27e": "distributedBalances(address)", +"11915a08": "addAudit(string)", "11916ce7": "moveIcoTokens(address,address,uint256)", +"1191be70": "backoName()", +"1191c7c3": "customDefrostingRate(address)", +"119220a5": "getFactoryAmountsOut(address,address,address,uint256,address[])", +"11923dc3": "_modInv(uint256,uint256)", +"1192da4d": "cfiPerBlock()", "11933e4b": "Transmuted(address,address,address,uint256,uint256)", "11937ccd": "adminUpdateStartEndTime(uint256,uint256)", "1193e38e": "setPercent3(address,uint256)", +"1193fabb": "FeedingFailed(uint256)", +"11946833": "editJob(address,uint256,uint256,uint256,uint256,uint256)", +"11946b98": "isWhitelistedOtoken(address)", "1194ed46": "payerString()", "11952369": "onRemove()", +"1195aab9": "isItTottalySafe()", "1196004f": "newCycle()", +"11960ec1": "press_F()", "1196245b": "registerDIN()", "1196493c": "getJobContracts(uint256,uint8)", "119669cb": "GiveChipGitf()", +"1196b9c7": "decreaseAllowance(address[2],uint256[2])", "1196deda": "sendTeamTokens(address,uint256)", "1196fb60": "contributeToPrizePool(string,string,string)", "119739ff": "privatesaleEnds()", +"1197e734": "addProducer(string,string)", +"119849cf": "getMintOutput(address,uint256)", +"11991ddc": "lastFixProfit()", +"11995f08": "redeemProportional(uint256)", +"11996cdb": "setYFS(address)", "11997dc6": "BASE_DURATION()", +"1199aa5b": "userPromote(address)", +"119a2138": "pure_named()", +"119a5e96": "getTimeLock()", "119aa5c8": "checkForward(bytes)", "119b22b3": "roundNum()", "119c1c23": "tokenAllowance(address,address)", +"119c2ae6": "getUserReferralWithdraw(address)", "119cb2ff": "tokenPriceDivides(uint256)", "119cbed6": "rtm_contract()", "119cc328": "setFoundersWallet(address)", "119ce91b": "voteInfo(bytes32,address)", "119d0cb5": "DumbCoin()", +"119d4792": "TwoZSymbols(address,uint256)", +"119d4ddb": "approveVoter(address)", "119d97ee": "team4Address()", "119d9bfe": "KudosTokenFactory()", +"119d9eed": "controlBurnedSupply(uint256)", +"119dc748": "secondBeneficiary()", "119dd1b0": "presaleLimitReached()", +"119df25f": "_msgSender()", "119e045b": "checkMaintenanceTime()", +"119e2ad6": "substractValuesFromBucket(bytes32,uint256,uint256,uint256)", "119e5cdf": "creationUnit()", +"119e783d": "_minBetAmount()", "119ebe89": "getExternalCurrencyProcessor()", "119ecb35": "tokensaleStageNow()", "119ee4ab": "batchCancelAuctions(uint256[])", "119eeb9c": "darx()", +"119f0ef8": "equipmentContract()", "119f118d": "ethToCash()", +"119f1bd5": "altFundAddress()", "119f1edb": "claimPlatinum(uint64)", "119f2546": "distributeEBTC(address[])", "119f2c9f": "transferCard(address,uint256,uint256)", "119f32dd": "adminIsDead()", "119f8747": "support()", +"119fbbd4": "incr()", "119fdee2": "sha256ofString(string,string)", +"119ff938": "flipTGE()", "11a00327": "deleteOrder(uint256)", "11a09ae7": "airDropTracker_()", "11a0c16c": "dsquare(uint256,uint256)", "11a10508": "switchToNextSale(address)", "11a10698": "ERC223Token(uint256,string,uint8,string)", "11a153df": "getBlockNumSinceInit()", +"11a17bc2": "pendingAbx(uint256,address)", "11a1b31e": "commandGetBonusTime()", +"11a1db3c": "rewardsPerAddress(address)", +"11a2e50b": "daysToSettlement()", +"11a34f38": "startTransaction(address,uint256)", +"11a3d247": "getOrderBalance(uint32)", +"11a3fca6": "LogConstructorInitiated(string)", +"11a4c03a": "expirationDuration()", "11a4c710": "buyRecipient(address)", +"11a4cbee": "safeLockETH(uint256,address,address)", "11a5a793": "percentageToKill()", "11a5b9bc": "migrateBlock(string,uint256,uint256,uint256,address)", +"11a5c361": "UserLock(address,bool)", +"11a5e409": "ERC1271_INTERFACE_ID()", +"11a5ef78": "taswap(uint256,address,address,address)", +"11a69404": "nornalTrasnferFrom(address,uint256)", +"11a6a59a": "REI05()", +"11a6a59e": "distributePackageRelayerReward()", +"11a6af0c": "refundDos()", "11a76729": "transferFromInBatch(address,address,uint256[])", "11a76f37": "addStakeHolder(address)", +"11a7a4c0": "ads(uint256)", +"11a7a8c8": "notifyController(address)", "11a800bc": "addressOf(uint256)", "11a881e8": "setFee(uint256,uint16,uint256)", "11a88e05": "preSale2()", "11a8f413": "latestRoundId()", +"11a94a2e": "stepUp()", "11a98193": "ETHfund()", +"11a9b128": "minKeep()", "11a9c3c2": "sellDOTCH(uint256)", "11a9f10a": "noToken()", "11aa2722": "assignOldUserFunds(address[],uint256[])", +"11aa4c81": "maxTokenPerEth()", +"11aa595b": "_setMaximumManagerFee(uint256,uint256)", "11aa7e26": "setKevin(uint256)", +"11aa9ba8": "deadlineForRedeem()", +"11aabfec": "sendRewards2()", "11aaf884": "HCPToken()", "11ab19f8": "addTokenToTotalSupply(uint256)", "11ab27d2": "HydroCoinPresale()", "11ab31ed": "rejectProposal(bytes32)", +"11ab6d35": "card1()", +"11abc10f": "oneTwoBlock()", "11ac20c0": "cancelLottery(uint32)", +"11ac9a92": "proposeTransfer(address,uint256)", "11adbaad": "getListOfAddresses()", +"11adce1a": "hotdewPerBlock()", "11ae40b2": "Presale(uint256,uint256,uint256,uint256)", "11ae6aee": "_mint(int256,uint256,uint256,uint256)", +"11ae9ed2": "getPending()", "11aee380": "memberCount()", "11af07e2": "create_event(string)", +"11af110c": "contract_users(address)", "11af3c68": "divest(address)", "11af6564": "getCurrentGasPrice()", +"11af9a4b": "setReserveTracker(address)", "11affa5c": "setEggTable(uint16,uint32[])", +"11b00617": "video()", +"11b04cfa": "setUnderlying(address,address)", "11b059c6": "mintableProperties(uint256,bytes32)", +"11b09380": "certificados(bytes32)", +"11b1a2c1": "_decodeVoteId(uint256)", +"11b1ba6b": "getPOOLToken()", +"11b1d828": "vipPoolInfo(uint256)", +"11b1ee23": "agreeChangeManager()", +"11b1f790": "testAndSetAccountChanged(address)", +"11b23c23": "reInvestIn()", +"11b29d1c": "setUSDSymbol(string)", "11b2b22a": "FRKT()", +"11b2e10e": "AAVE_ADDRESSES_PROVIDER()", "11b35c48": "AGSCoin()", +"11b3840e": "totalTokensForPresale()", +"11b3d224": "SellPutToClose(address,uint256,uint256,uint256,uint256)", +"11b405c7": "hashPackedArray()", +"11b42b1e": "EXIT_ZERO_FEE()", +"11b46426": "PushDebtFactor(uint256)", +"11b49a4a": "addApprovedOBOWhenNotMainnet(address)", "11b4bbdb": "mintTokens2(int256,address,uint256,uint256)", +"11b51672": "bidOnToken(uint256,uint256,uint256)", "11b546f6": "firstWeekTokenPrice()", +"11b60ad3": "getPlayerSlot_SideA(uint256,address)", "11b639d9": "currentTokenCount()", "11b63a17": "CROWDSALE_TOKENS_NUMS()", "11b70018": "bookingList(address,uint256)", "11b7702a": "ImportTestA()", +"11b78da0": "epochDay()", +"11b7bda7": "strikeAssetSymbol()", "11b7d483": "addressGains(address,address)", +"11b87bfa": "_getConfigFor(uint64,uint64)", "11b8f957": "dayAfterDeadline()", +"11b92f80": "_numWeeksRoundedDown(uint256)", +"11b93606": "erc20Cache(address)", +"11b95d87": "requestAirdrop(uint256)", "11b97324": "participateCrowdsaleSelected(address[])", "11b98e12": "isMainSaleTokenRaised(uint256)", +"11b9d613": "getTradeCost(uint256,uint256,bytes)", "11b9fee8": "ForkChecker(uint256,bytes32)", +"11ba1741": "CREATE_TYPEHASH()", +"11ba23df": "SwapClosed(bytes32)", "11ba65e5": "_setUpgradeabilityOwner(address)", +"11baa30f": "queryUsersIDMax()", "11baae84": "Contribution(address,address,uint256,uint256)", "11bab044": "getCreditFundAddress()", +"11bae04f": "boostsUntilNextHalving()", "11bb20da": "withdrawBattleValue(address,uint256)", "11bbb155": "goLong()", "11bbdf53": "maxOpenAttacks()", "11bc0a34": "BuyOrder(uint256,address,uint256,uint256,uint256,uint256)", +"11bc5311": "bootstrapStartThreshold()", "11bc5315": "drawer()", "11bcd573": "SetTest(address)", "11bcd830": "MinDeposit()", +"11bd4507": "participationFactor()", +"11bd8100": "newWalker(address,string)", "11bd85ad": "Owned2()", +"11bde407": "getieoUserInfo(address,address)", "11bdfe19": "revertBet(uint256)", "11be40e0": "transfer(address,address,address[],uint256[])", "11bec062": "EVT()", "11bed352": "eip20Approve(address,address,uint256)", "11bf68cf": "_issue(bytes32,address,address,uint256,bytes,bytes)", +"11bf8314": "blacklistTxFee()", +"11bf857a": "TotalInvestors()", +"11bfa699": "setCryptozContract(address)", "11bfe017": "playerWinItems(address)", +"11c065b7": "registerPresale(address)", "11c07649": "getMainAccount(uint256)", "11c09100": "calculateNumWeiToIssue(uint256,uint256)", "11c0b024": "_setDamgeValue22(uint256)", @@ -10160,32 +18526,65 @@ "11c12715": "LCToken()", "11c134e1": "sumPreICO()", "11c15dcc": "purchaseBalances(address)", +"11c167cc": "CategoryCreated(uint256,string)", "11c19d3c": "SpiderFarm()", +"11c1b74f": "setGenerationHatchingFeeMultiplier(uint256)", "11c1dc82": "monakojima001()", "11c1ddd9": "addMedalBurned(uint16)", +"11c1e960": "requestState(address,uint32)", +"11c25a39": "ICOStagePeriod(uint256)", +"11c26b25": "_fallbackMaxDepositIncluded()", +"11c28c99": "startMisere(address,address,uint256[])", "11c28e1a": "initial_tokens()", +"11c2c37d": "getHouse(uint256,string)", +"11c2e55d": "setTreasuryPercentage(uint256)", +"11c2f398": "getLatestDeployerAddress()", "11c33625": "royaltyInformationContract()", +"11c33f56": "dao_agent()", "11c3a62f": "GetLuckyResults()", "11c3fec5": "CreateLand(uint256,address)", +"11c45991": "OfferDisputed(address,uint256,uint256,bytes32)", "11c4d4f4": "communityAddr()", "11c4dbf4": "auctionReputationReward()", "11c4e123": "rootHashOf(bytes32)", +"11c4f6da": "KycPending()", "11c52ec0": "setMaxWagerWei(uint256)", +"11c565df": "buybackHandler()", "11c57757": "tixPromoDeposit()", "11c5a234": "logResult(int8,string)", +"11c5b3f4": "provideLiquidityToRouter(uint256)", +"11c5eea1": "communityTaxEachDay(uint64)", "11c60418": "remAdmin(address)", +"11c66016": "_getStorageArraySlot(uint256,uint256)", +"11c67028": "initializeTimelock(address)", +"11c67c52": "withdrawEthBatch(address[])", +"11c76624": "minExecutorStake()", +"11c7a53b": "getLeftoverWasabi()", +"11c7b720": "AssetProxyExistsError(bytes4,address)", "11c7d6bd": "issueNewSeries()", +"11c80311": "getDecimalsMultiplier()", +"11c84120": "setFeeAddresses(address,address)", "11c8efac": "lifeA(uint256)", "11c911d9": "unreserve(address,uint256)", +"11c91275": "burnFromVesting(uint256)", "11c91914": "isUnderLimit(uint256)", +"11c9248f": "initialDiscountPercentage()", "11c93d03": "crowdsale_eth_refund()", "11c94362": "COMMUNITY_RESERVE()", +"11c98512": "getSubmissionsByTimestamp(uint256,uint256)", "11c98718": "getMsgDataBefore()", "11c99f3b": "FundsWallet()", +"11c9adc8": "ethTokenAddr()", +"11c9be22": "provideliquidity_all_1()", "11c9ccf6": "deleteCustomer(address)", "11ca3c63": "satoshiRaised()", "11cb0bcf": "getParticipantOriginWithIndex(uint256)", +"11cb5217": "lootboxTokenId()", +"11cb7c5f": "verifyXtokenSwapMint(uint256)", +"11cc66b2": "setVaultName(string)", +"11cceaf6": "prizes()", "11ccf822": "beneficial()", +"11cd13ac": "donateToFund(uint256)", "11cd98ed": "convertToAllTable(uint256,string)", "11cda415": "peer()", "11cdf27a": "addVersion(address)", @@ -10193,24 +18592,42 @@ "11ce3d24": "postMonForMon(uint64,uint64)", "11ce3d2c": "GQHToken(uint256,string,uint8,string)", "11ce4556": "TOKEN_TO_CREATOR()", +"11ce7a65": "getOffers(address,address,address)", "11ceb21c": "ZigZagSupply()", "11cec8f0": "getTradeByIndex(uint256)", +"11cf8537": "usdt_polyn()", +"11cf9bce": "EtherGet()", "11cfb19d": "freezedTokenOf(address)", +"11d0b656": "maxBetPoolRatio()", "11d12402": "testEasyPropose()", "11d15e17": "freeReadings(address)", "11d17e78": "Blocker_destroy()", +"11d27455": "Fac_name()", "11d295bf": "_getShipName(uint256)", +"11d2b8db": "pendingXoxo(uint256,address)", +"11d2c211": "ContractSymbol(address)", +"11d2dcf6": "OwnershipTransfered(bytes12,address,address)", "11d36bf5": "reservedSaleEther()", "11d36c4f": "setBoolF1F2F3(bool,bool,bool)", +"11d37c6a": "settleMarket(address,uint256,uint256[])", +"11d3e6c4": "maxScalingFactor()", +"11d3f0c8": "last_block_num()", "11d40001": "EthernautsVendingMachine()", "11d414af": "changeIcoStatus(uint8)", +"11d41a5e": "participatePool4()", +"11d44611": "startAddActivePool(uint256)", +"11d46036": "For_co_owner()", +"11d4af84": "YFOS()", "11d4f314": "setBounties(address[],uint256[])", +"11d571ac": "_stakedSoldier(address,uint256)", "11d60664": "ethtoeth(address,uint256,uint256)", "11d62de9": "ownerShip(address,address)", "11d634ac": "HamsterMarketplaceToken()", +"11d7771f": "HouseSaleCancelled(uint256,uint256,address)", "11d7b2fe": "unlockAccount()", "11d817f2": "getUsers(address,bytes32)", "11d8657a": "finalizeAndPayoutForHopeful(uint256,uint256,uint256,uint256)", +"11d865fe": "isPaired(address,address)", "11d87c4e": "initGame(uint256,bytes32,bytes32,bytes32)", "11d89f3a": "setResearchAndDevelopment(address)", "11d8cac7": "view_state()", @@ -10220,68 +18637,115 @@ "11daa2d0": "jpPercentage()", "11daa7a0": "gamessage(address,address)", "11daca81": "joinPot()", +"11dae267": "approve_202(address,uint256)", "11daea9c": "removeExchangeTestAccounts(address,address)", "11daf56a": "MainFabric()", "11db0176": "unLockFreeze(uint256)", +"11db0574": "zeroPar()", "11db3be7": "invokeVerification(uint256,uint256,uint256,string,bytes32[2])", +"11db6574": "workingGroupIdsLength()", "11db6e0e": "ownsSouls(address)", +"11db785a": "total_account()", "11db8d1b": "burner(uint256)", +"11db8dd6": "AddressAllowed(address,address)", "11dbb12e": "removePolicyRule(bytes4,address,bytes32)", "11dc273d": "currentBalances(address)", "11dc45c9": "withdrawPrize(address)", "11dc4703": "removeUser(uint256)", "11dc6816": "getAllowanceOwnerValue()", +"11dc7335": "prizePercentage()", "11dcee2f": "priceCallback(bytes32,uint256,bool)", +"11dd0a46": "recipientListLocked()", "11dd2837": "_updateCurrentStage()", "11dd39b4": "cancelApprove(bytes32)", "11dd46b4": "calVoteResult()", "11dd576d": "userCheck(bytes32)", "11dd8845": "getRecord(string)", +"11dd8f1e": "setMaxDebtRate(uint256)", +"11dd9fb0": "setIPAddress(bytes32,bytes32)", +"11dda748": "TimestampSet(uint256)", +"11ddb00b": "ItemHandleEvent(address,uint256,uint8)", +"11dddca4": "getReservePriceETH(address)", +"11dde7e4": "interestPool(address)", "11ddf693": "debug_changeOwner(address)", +"11de70e7": "MaxEthPerAddressChanged(uint256)", +"11df11f0": "KSCApproval(address,address,uint256,string)", "11df19f7": "_medalTotalSupply()", "11df9995": "coin()", +"11e056c5": "pendingWst(uint256,address)", +"11e0693a": "saleConfirmed(address)", "11e0de8b": "tickets10kprice()", "11e13c32": "BONUS_ICO_STAGE1_PRE_SALE4()", "11e14b2e": "employees()", +"11e1634e": "WethToToken(uint256,uint256,address[],address,uint256,address,address)", "11e21245": "weiSoftCap()", +"11e2b94a": "queue3CurrentUser()", +"11e330b2": "increaseAllowance(uint256)", +"11e334ae": "getByteSecret()", +"11e3351c": "getHasTranscoderRewardFeePool()", +"11e346b5": "rewardTickers(uint256,uint256)", "11e3655f": "updateInstantToken(address)", +"11e37ed0": "lastUserData()", +"11e37fd1": "setTotalNum(uint256)", "11e38468": "MarketboardListingComplete(address,uint256,uint256,uint256,uint256)", "11e3d606": "min_investment_eth()", +"11e42065": "initialize(address,address,uint256,uint8,address,address)", +"11e453f9": "liquidityUnlock()", "11e48cdf": "tokensAllocatedTotal()", +"11e4ebf1": "munFeePrice()", +"11e53008": "siteSummary()", "11e5b955": "Order_sell(address,uint256,uint256)", "11e5ea57": "teamsWallet()", +"11e601ff": "last_epoch_remaining_rewards()", +"11e64598": "editAsset(uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8[10],uint16)", "11e67c57": "totalBuyOrders()", "11e6a0fd": "getProviderDetails(uint256)", +"11e776fe": "setMaxTokens(uint256)", "11e847b6": "HATCHBACK()", "11e84c71": "claim(bytes32,string)", +"11e86a94": "WETHierc20()", +"11e91b9a": "propose(address[],string[],bytes[],string)", "11e956c8": "isMasterNode()", "11e96ab6": "LockCredits(address,uint256,uint256)", "11e99c22": "arrival()", +"11e9d9f7": "Withdrawed(uint256)", +"11eb33ec": "setERC721Parent(address)", "11eb6d4b": "GxAuth()", "11ebbf24": "createWallet()", +"11ebe4aa": "LAST_FLUSHED_DAY()", "11ec76cb": "LogClaimHalvingSubsidy(address,uint256,uint256,uint256)", "11ec7b4a": "balancePrivateSale()", "11ed1bf6": "artworkIndex()", "11ed7b42": "thirdItemWrong()", "11ee0ec5": "getZone(uint256)", +"11ee39d7": "approve_548(address,uint256)", +"11ef0f9c": "currentGiftAmount(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)", +"11f0b23d": "HouseCards(uint256)", "11f0b806": "getDutchAuctionToCraftAddress()", +"11f0e23c": "setOutToken(address)", "11f11b9c": "editName(string,uint256)", "11f1507e": "getAssetToken(uint256)", +"11f151b5": "initLPStaking(address,address,address,address)", "11f15380": "clientKeysCount(uint256)", +"11f186e0": "Send(uint256,uint256)", "11f1fc99": "withdrawTreasury(uint256)", "11f217c7": "getNodeAddress(address)", +"11f2928b": "enableFailTrigger()", "11f29729": "setsymbol(string)", "11f2a395": "finalWithdraw()", "11f2eed1": "convertEthToMet(uint256,int256)", +"11f33dee": "l_l1()", "11f37ceb": "get_price()", "11f3eecd": "sellTokens(uint8)", "11f43157": "openCrates()", +"11f4325a": "__calcSrcQtyForExpectedRateLookup(address)", +"11f45e9c": "getMapping(string)", "11f45f23": "buyVIBET()", "11f48166": "IntroToken()", "11f4a9ce": "KernelProxy(address)", @@ -10290,303 +18754,574 @@ "11f58e99": "maxTokensSold()", "11f598cd": "editPersonalNote(string,uint256)", "11f6649b": "authorizers(uint256)", +"11f6935b": "swapedTokens(address)", "11f6ad2b": "lastWinnerId()", +"11f71e97": "whitelistedBurn(address)", "11f72496": "testT()", +"11f78cc4": "walletBonus()", +"11f7d48b": "getUserLpAmounts(uint256,address)", "11f82a2b": "_getPolishingPrice(uint256)", +"11f87b19": "mintNft(address,string)", +"11f8d30a": "setRecord(bytes32,uint256)", +"11f8edd9": "getProviderMinFee(address)", +"11f9c74d": "storeduint1()", "11fa3d14": "LeekCoinCrowdsale(uint256,uint256,address,address)", "11fa3f4f": "weiUsdExchangeRate()", +"11fa7cd5": "currentEcosystemPool()", "11fa7da2": "getInvestmentsInfo(address)", "11fa9ea6": "narrowCyclePrize()", "11facae2": "setValidatorCount(uint256)", +"11fad209": "SetPOZFee(uint16)", +"11fb3de1": "claimsForPubkey(bytes32,uint256)", "11fb57e2": "TokenManager(address[],uint256)", "11fb584a": "BloccaConto(address)", "11fbad62": "_rejectTransfer(uint256,uint256)", +"11fbc309": "priceOverdue()", +"11fc8138": "playerEarned_(address,uint256)", +"11fcc881": "pyrmontDepositContractAddress()", +"11fd8a83": "rebaser()", +"11fda32c": "getDocumentsByTag(string)", +"11fddd8a": "updateMaster(string,string,uint256)", "11fdff0c": "advisorPool()", "11fe12b3": "isRecovery(address,address)", "11fe773d": "memcpy(uint256,uint256,uint256)", +"11fed5f5": "depositFarmingToken(uint256,uint256)", +"11fee2f7": "timeUntilRelease()", "11ffb1d4": "deleteMember(address)", "11ffe7c9": "getUserDocCount(address)", +"11fff0cb": "maxEthLimitTotal()", +"12000b2c": "insertToPendingNodeListTail(address)", +"120054c6": "chains(address)", "12005e53": "alexToken()", "1200617f": "auction(uint256)", "12007984": "addBalanceToGame(uint256)", +"12007e72": "Increase(address,uint256)", +"1201460d": "ponziFriendsToId(address)", "120149a1": "readCube(bytes32)", "120184fa": "gvCF()", +"1201cbd0": "setBlacklistEnabled(bool)", +"1201ebf2": "setminAPOOLTWAPIntervalSec(uint256)", +"1202960f": "bonusEscrow()", "1202be01": "eth2mnt()", +"1202e979": "Defi99PlusInitialIndex()", "12032e52": "getSecondaryRecord(string)", "12035ca6": "setData_3(uint256)", "12038a01": "totalDevelopmentFundEarned()", "12039fed": "mintMedal(uint256)", +"1203e573": "bonusFirstDeposit()", +"12042682": "freezes(address)", +"12042d32": "isOpiumSpender(address)", "12045d3f": "VKTToken(uint256,address)", "1204bab4": "popcount(uint64)", +"1204be59": "randomGeneratorAddr()", "1204ce91": "Debug(bytes32,uint256)", "1204d27c": "coinIssuedBurn()", +"12050a1b": "betting(uint256,uint256,uint256,uint256)", +"12053f26": "setVipUser(address,address,bool)", "12055758": "checkOwner(address,uint32[11])", +"1205764b": "MIN_START_ETH_NUM()", "12058764": "lockBalanceGroup(address,uint256)", "12059f68": "LoversAdded(string,string)", +"12064c34": "rawBalanceOf(address)", "12065fe0": "getBalance()", +"12069874": "getStakingTierChange(address)", "1206dc5f": "transferMarketplaceOwnership(address)", "12074a46": "getUserBets()", "1207bb8e": "crowdsalePrice()", "1207f0c1": "issueTo(address,uint256)", +"1208333a": "_withdraw(address,address,uint256)", +"12089f83": "setSellPercent(uint256)", "1208a256": "getLock(address,uint256)", "1209073c": "updateBalances(uint256)", "120960de": "depositInPot()", +"1209a849": "betsAll(uint32,uint32)", "1209b1f6": "ticketPrice()", "1209f7ed": "withdrawPledge()", +"120a0612": "setDevWalletAddress(address)", +"120a390c": "ActiveHeroChanged(address,uint256)", +"120a85ac": "setMaximumOpenAco(uint256)", +"120aa877": "claimed(uint256,address)", +"120ac7e6": "getMaxPresaleLength()", +"120aecd7": "pickPoolToExtract(uint256)", +"120b2a57": "setOneSplitFlags(uint256)", +"120b3327": "accountAmount(address)", "120bd501": "approves(address,uint256)", "120bd8f5": "setMinimumBetValue(uint256)", "120c5194": "getCollectReporterAddress()", "120c52ef": "calculateDemurrage(uint256,uint256)", "120c7efd": "certifier()", +"120cb15c": "receiptAccountOf(address)", "120cc993": "isEmptyOwner()", "120cf351": "bitdietecToken()", "120dae83": "setMinimalContribution(uint256)", +"120e53d6": "_bonusWins()", "120e6c16": "_finneyToWei(uint32)", "120e8f05": "calculateMintAmount()", +"120ea2a7": "approve_693(address,uint256)", +"120ec1b2": "RFIaddress()", +"120f2eda": "LPAddress()", "120fe731": "Tropycoin()", "120fe89b": "getPolls()", +"12101021": "defaultHardDepositTimeout()", +"12111168": "tknUserPending(address)", "121114e1": "SuperTicketCoin(uint256,string,string)", +"121127dd": "execute(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", "1211540c": "withdrawPartial(uint256)", "121166ef": "clearTrade(bytes,address,bytes32,address,uint256,int256,string)", +"12119df4": "LogMixerDead(bytes32)", +"1211d956": "computeBorrowerFee(uint256)", +"12121208": "setPairFees(address,uint256)", +"121212ef": "patientSignup(string,string,string,uint8,bool)", +"1212668c": "returnLastReabse(bool)", "1212c12f": "RecordManager()", +"12133f56": "blockExpired()", "12136918": "setMaxTranferLimit(uint256,uint256,uint256)", "12136e57": "ERC777ERC20BaseToken(string,string,uint256,address[])", "12146222": "highSupport(address)", +"12148a8b": "linkExternalNft(uint256,address,uint256)", +"1214a833": "addQ()", "1214ab82": "Lightning()", +"121544b9": "_rewardPerTokenStored()", "121557a3": "Avatarium()", "121563ae": "Axioms()", "12156c66": "snowflakeCall(address,string,string,uint256,bytes,bytes)", +"1215b531": "setTestReservior(address)", +"1215ca9b": "systemDistPart()", "1215f8ef": "releaseValue3()", +"12160c25": "forceClaim(address)", +"12161a61": "dailyLottoEvt(address,uint256)", +"12161c86": "betstatus(uint256,uint256)", +"1216906b": "changeAddressByEmployee(address)", +"12169725": "airdropcap()", "1216e771": "expiration(uint64)", +"1216fc7b": "getMarketParameters(address)", "12179a2d": "pendingReferals(address)", "1217b6ff": "TransactionConfirmedByMediator(uint256,uint256)", +"1217b7a6": "getNumberOfChallengeableTimeSlots()", "121839f6": "addConfirmationNode(string)", +"1218c598": "poolInfoMap(address)", "1218d6bf": "decree()", +"12192182": "ReleaseToNode(address,uint256)", +"12192384": "setNoFeeSender(address,bool)", "12192649": "countOfParticipants()", "12192b00": "getInitialHP(uint64,uint64,uint64)", "1219bcfc": "MolToken()", "1219d5c8": "APM_APP_NAME()", +"121a42c0": "identifierAt(uint256)", "121a47ac": "nonceForPublicKeyX(uint256)", "121a496b": "Lupecoin(address,address)", +"121a4bb7": "take20Rewards(address,uint256,address)", "121ab65b": "LogChangeSponseeAddress(address)", +"121ab80d": "mintHero(address,uint256,bytes32)", +"121aee99": "ALLOWED_MAX_SERVICE_FEE()", "121af083": "DFSCrowdsale(uint256,uint256,uint256)", "121b5a25": "calculateCompensation()", "121b68c1": "ERC223Received(address,uint256)", +"121c1a65": "eth_price_oracle()", "121c2b35": "burnPXLRewardPXLx2(address,uint256,address,uint256,address,uint256)", "121c5e91": "putOnSale(uint256,uint256,uint256)", +"121cdcc2": "isUnlockInProgress(address)", "121d6426": "senderWeiBalance()", "121dbc31": "changeMax(uint256)", +"121dbf1a": "PROTECOINS(address)", +"121de94a": "parseTokenId(uint256)", "121e0d4e": "godPause()", "121e6832": "frozenDaysForPartner()", "121e8122": "unQuarantineAddress(address)", "121eb9e2": "createMintRequest(address,uint256,string)", +"121ee837": "percentageOfSoldTokensForFounders()", "121ef243": "createUser(string,uint256)", "121f0a10": "resolve(uint256,uint256,string,bool)", "121f2081": "testCreateWithForeignParent()", "121fb72f": "ownerSetInterestSetter(uint256,address)", +"12203a27": "buyTickets(uint256,uint256,bool)", "1220c6ed": "registerOwner(address)", +"1220d68d": "setUniversePlanetExplorationAddress(address,address)", +"1220e2ff": "setDefaultRelayHub()", +"12210e8a": "refundETH()", +"122132de": "netValue(address,uint256)", "12217378": "oldTokenTotalSupply()", "1221a071": "cmctcybermovie()", +"1221d660": "sushiroute()", "1222c25a": "redeem(string)", "1222e789": "isPublicSaleWithBonus()", "122366fd": "PACCOIN(uint256,string,string)", "1223716a": "masterHas()", "1223f208": "withdrawadm(address,uint256,uint256)", +"1223f290": "redeemPreSale(address)", +"12241473": "DIE()", "12243b67": "deletePlayer(address)", "12247a57": "IncentCoffeeToken()", "12253a6c": "stopContract()", "12263017": "setBool82(bool,bool)", "122636b1": "getRemainingDaysToThirdPhase()", +"12265409": "getInvestmentAssetMaxHoldingPerc(bytes4)", "12267abc": "PRICE_6()", "1226afde": "numtickets()", "1226be3e": "NotifyMe(address,address)", +"1226ccbf": "setRastaPerBlock(uint256)", "1226cd98": "allocate(uint128,uint256)", "1226f5f8": "wei_per_token()", "12278825": "Git(uint256)", +"1227ba65": "Stake(address,uint32,uint256)", "1227d0f4": "gameListOf()", "122809dc": "deposits_refunded()", "12285576": "Donated()", "12286715": "SimpleSavingsWallet(uint256)", "12287629": "consultantsKey()", +"1228cbee": "getPoolAddress(address)", +"12298abd": "usersstorage(address)", "1229987d": "collectProfitERC20(address)", "1229af09": "FreshROI(uint256,uint256)", "122a1949": "Group_1()", +"122a4aa5": "validateNetworkTrades(uint256[],bytes32[],address[],address)", "122a7723": "GetPriceMultiple()", "122b0e85": "getVerificationLevel()", +"122b15c3": "dusd_pools_array(uint256)", +"122b5818": "WC()", +"122b6481": "logClaimFee(address,uint256)", +"122bae6f": "RemoveServerAddress(address)", "122bdc32": "ThemKhoaHoc(string,uint256,string,string,string,string)", +"122c7fbf": "claimon()", "122d34d9": "returnToken(string,uint256)", +"122d42c3": "dUSDC()", "122d9a8d": "piEndTime()", +"122db57d": "pullAndSendTokens(address,uint256)", "122e04a8": "WITHDRAW_ADDRESS()", +"122e3721": "decodeLeafToFloat(bytes)", "122e74f4": "getWeiLeft()", +"122e846b": "RewardWasPaid(address,uint256)", +"122eb575": "canTransferFrom(address,address,uint256,bytes)", +"122ee095": "migrateToMCD()", +"122f94bf": "_setBaseMetadataURI(string)", +"122fb255": "changeSLCAddress(address)", "122fe685": "presaleAddress()", +"122fe6ab": "whiteListVault(address)", +"122fea3b": "currentRouter()", "122ff73a": "_getStrengthDexterityVitality(uint256,uint256,uint256)", "12302932": "reinvestAffiliate()", +"1230a98a": "addNewGrainContract(string,string,uint256)", +"1230e161": "addBackground(uint8)", "123119cd": "payer()", +"1231651f": "importVestingSchedule(address[],uint256[],uint256[])", +"123170aa": "calculateBridgedERC777Address(address)", "12317402": "betMinAmount()", "123180a2": "testInitialBalanceWithNew()", +"1231d334": "lptFarmingEndBlock()", +"1231ece9": "myErc20RepayBorrow(address,address,uint256)", +"12320591": "payBorrowBack(address,address,uint256)", +"12325de8": "_setMediatorContractOnOtherSide(address)", +"1232e42c": "newB()", "12333b32": "StartGame(uint256)", "123398aa": "johnnycoin()", +"1233e4b6": "_orca()", "1233f543": "distribute55M(address[])", "12342248": "CreditleetToken()", +"12348e96": "setCloseFactor(uint256)", +"1234c4df": "getTweetDetail(uint256)", +"1235fda7": "referRewardPercent(uint256)", "12360151": "dayPotLeader()", "123702e2": "profitAddress()", "123731c4": "addressPositions(address,uint256)", +"12379c1e": "darkUSD()", +"1237ad12": "NewRound(uint256,uint256)", "1237b2a6": "TotalPot()", +"1237c418": "create(string,uint8[2],uint16[3],uint8[4],uint8[2],uint8,address,uint256)", +"1237cfba": "approveWeapon(address,uint256,uint256)", "1237dd9a": "decimalMul(uint256,uint256)", "123802e1": "forceRefundState()", "123807b2": "markParticipantIdentifiend(address)", "123841cf": "MintedGreen(address,uint256)", +"12384c88": "getLiquidityAddress()", "12386471": "sumExpOffset(int256,int256[],uint256,uint8)", +"12387669": "WOOCoin()", +"123974da": "_toLiquidPoolChargeAddress()", +"1239c271": "claimInsurance(address)", "1239ec8c": "batchTransfer(address,address[],uint256[])", +"123a8708": "addressKYC(address)", "123b06d5": "currentPendingParticipants()", "123b1dae": "accountOfP(address)", +"123b4876": "pieAccrued(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)", +"123ca7b9": "uncertaintyPeriod()", "123cc082": "setJoinedCrowdsales(address)", +"123cf278": "yGov()", +"123d5a2d": "doBalancerV1Sell(address,uint256,uint256)", "123d997a": "removeAllowCnsContract(address,bytes32,address,bytes32)", +"123dda3f": "_coolDownTime()", "123e4112": "arrayToCrabPartData(uint256[])", +"123eb342": "rewardsWithdrawalPaused()", +"123f389b": "_mimi()", "123f513c": "testDeadChickenCnt()", +"124055c8": "validateAccess(address,bytes32)", +"12405d70": "unlock_futureSale(address)", "12407f98": "toSaleWallet()", +"12408859": "myRewardsBalanceLP(address)", +"1240a0dc": "loadPercentage()", "1240adc8": "stoppCrowdsale(uint256)", "1240b381": "PermarektToken()", +"1240c76a": "taco()", "1240de76": "testUnexpiredBalance()", "124135c9": "exit(bytes,bytes,uint256,bytes,bytes,uint256,bytes)", +"124154ca": "isReserveDepositor(address)", +"12416898": "totalSupplyInterestRate(uint256)", +"124196da": "balanceChecked(address)", "1241d7a7": "setEnableRecord(bool)", "1241ee7d": "profit(uint256)", "1242031a": "ZhaoGuCoin()", "12424e3f": "approve()", +"124258c6": "doVote(uint256)", "124279a7": "activeSignersCount()", +"124288b8": "swapSimple(uint256,uint256,address,uint256,address,address,uint256,address,uint8,bytes32,bytes32)", "1242e96d": "updateMarketPhase()", "12432fee": "canSendWebGifAmount()", +"1243f658": "GatewayChangedTo(address)", "124442be": "approveIncrease(address,uint256)", "1244861e": "addTokenData(uint256,string,string)", +"12448c32": "rabbitMother(uint32,uint256)", "1245c653": "currentDrop()", "1245e347": "teamWalletAddress()", "1245f45e": "getRunningAuctions()", "12460fdd": "confirmCeilingRaise(bytes32)", "12468cc5": "getWifiPwd(string)", +"1246af89": "mineForVotesOnly(uint256)", +"12470e37": "numDistributionUnits(address)", "12474435": "unfreezeAwardedTokens(address)", +"1247ae58": "filled_subtrees()", "1247caf4": "ChangeFounderMulSigAddress(address,uint256)", +"12480f6e": "bondDeadline(uint256)", +"12482d8a": "TokenSellRequest(address,string,uint256,uint256,uint256)", +"1248454c": "transferRecipient()", +"12488c70": "jgdengjibdeth()", +"1248a166": "getTotalEpochPoints(uint256)", "1248b101": "claimDay(uint256)", +"1248ec5f": "getTaskDetails(bytes32,address,uint32)", +"1248edd1": "upvoteEffect(bytes32,uint256)", "12491ad9": "ReverseRemoved(string,address)", "1249209e": "returnExcess(address)", "12494160": "isHolder()", +"12494f48": "ecrecoverDecode(bytes32,bytes)", "12495a5d": "ContributionWallet(address,uint256,address)", +"124977b1": "stateContractAddress()", +"1249a258": "getActualSellFee(address)", "1249c58b": "mint()", "1249d3b8": "isEcoAllocated3()", +"1249e2e2": "setCertificate(string,uint256)", +"124a0eab": "removeNeutralToken(address)", +"124a319c": "interfaceImplementer(bytes32,bytes4)", +"124a894c": "govUpdateinitialLTVCounterVaultE10(uint256)", +"124a98ca": "hsuAddress()", "124abb0a": "_checkAndCallSafeTransfer(address,address,uint256,uint256,bytes)", "124b0939": "afterCallBack()", +"124b65b4": "getTerm()", "124c27a9": "addPrize(uint16,address,uint256,uint256,uint256)", "124c2dde": "executeBet(address,address,uint256)", "124c32a1": "enter(bytes32,bytes8)", +"124c696f": "partialAddress()", +"124c96ac": "BRR_REWARD()", +"124cce71": "getTotalRewardCollectedByUser(uint256,address)", +"124cde6f": "addInvestorLock(address,uint256)", "124cf830": "isSecondaryOperator(address)", "124cfc8c": "beneficiaryOf(uint256)", "124d3396": "releaseICO()", +"124d69b9": "get_contrct_balance()", +"124d81fa": "lgeEndTime()", +"124d83d8": "ethFeeForSellerLevel1Set(uint256)", +"124d91e5": "burnFrom(address,uint256,uint256)", "124eaee6": "Identity()", "124f0b31": "rewardDecimalPercentByTime(uint256)", "124f2418": "deleteBytes32Value(bytes32)", "124fc7e0": "increaseSupply(uint256,address)", "124ff29b": "getAyantDroitEconomique_Compte_5()", +"125009cc": "balanceSavingsInToken()", "12504109": "getLast24hSendingValue(address)", "12508ea4": "play(uint256,bool)", "1250ca3d": "getUserPaybackRate()", "12511c14": "transferEnable(bytes20)", "12514bba": "transfer(uint256)", +"125172a2": "BurnPoolTokens(address,uint256)", +"12525cd2": "swapCost()", "12529d22": "getRank10()", "1252aadb": "EightBitToken()", +"1252cb48": "createPost(string,uint256)", "1252cc33": "processTickets()", +"12536135": "getUserAmountOfReferrals(address)", "125385f2": "COLOR_GREEN()", +"12539cc3": "rr()", "1253b82f": "travelPrice()", +"1253c546": "uris(uint256)", "1254e64d": "transferEthers(address,uint256)", "1254f0dc": "startRate()", "12555df2": "zasxzasxqaqq()", +"125596fe": "authorizeCasino(address,address,uint8,bytes32,bytes32)", +"12561421": "minerLeaguePercentage()", "12568c24": "blanceOf(address)", +"1256ddf2": "setReferralBonus(uint32)", "125716d6": "getContractStatus(address)", "12571a33": "migrateInternal(address)", +"12573331": "getOldQuotaMap(uint256,bytes32)", +"125747b3": "UniversidadesBaja(uint256)", "12582c1a": "setAdminMode(bool)", +"12588d0e": "minNetworkTokenLiquidityForMinting()", "12592381": "incomeAllocation()", "12599d3f": "GlobalEnergyDigitalChain()", "1259c00d": "stampIndextodissolved(uint256)", +"1259ee72": "swapOnMStableMUSD(address,uint256,address)", +"125a6eb6": "toggleBuying()", +"125b0b34": "addProduct(string,uint256,uint256)", +"125b0c6f": "adminCancel(address,address,uint256,address,uint256,address,uint256,uint256,uint256)", "125b8f06": "isInNextGeneration()", +"125ba819": "pendingTiger(uint256,address)", +"125bb6a9": "mintPositionTokens(address,uint256,bool)", "125bfb66": "claimToken(address,address,uint256)", +"125c4a33": "freezePartialTokens(address,uint256)", +"125c86dd": "to32(uint256)", +"125c88b5": "setNumOfPlayers(uint256)", +"125ceb8e": "getSharesReturn(address,address,uint256)", +"125d4b68": "amountEthToBuyBLK()", "125d5d71": "startEpochTimestamp()", +"125d7020": "getElapsedTime()", +"125d9f8e": "disableSoloDeposit()", +"125e44c3": "WISE_CONTRACT()", +"125e4cfb": "handleBridgedTokens(address,address,uint256)", "125e527e": "Ether()", +"125f15e9": "RewardToken(address,uint256,uint256)", "125f67e7": "SunriseCoin()", +"125f7dd1": "withdrawMass(address,address[],uint256[])", +"125f8974": "totalRecords()", +"125f9e33": "rewardTokenAddress()", "126004b8": "deleteRole()", "12600aa3": "concatStrings(string,string)", +"126082cf": "BASIS_POINTS_DIVISOR()", +"1260a780": "movieIndexToOwner(uint256)", "1260c19a": "showInterval()", +"1260dc8d": "updateBet(address,uint256,uint256)", "12610b5b": "pendingEditionsOf(address)", +"12610e92": "decreaseTroveDebt(address,uint256)", "1261795d": "withdrawGas()", +"1261c1e5": "aplfi()", "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)", +"1263e56f": "createDweller(bytes32)", "1264299a": "endPresaleTime()", +"12646ca9": "lpPairAddress(address)", "126596e7": "ownerSetCallbackGasPrice(uint256)", +"1265e848": "setFreelancer(address)", +"1265f652": "userDividends(address)", "12660306": "getLogos()", "1266cae2": "setCrowdsale()", "1266d5f9": "getWitnessesCount()", +"1266fb94": "AUCTION_HOUSE_TYPE()", "126702a0": "DOW_TUE()", +"126711a4": "_FPTB()", "12671fb4": "balanceAirDropToken(address,address)", "12675713": "getTestekTokenIssuance(uint256,uint256)", +"126779c2": "getImports()", "1267961b": "ERC777BaseToken(string,string,uint256,address[])", +"1267fadb": "pendingUnit()", "12686aae": "transferLocked()", +"1268754f": "withdrawWithReBalance(address,uint256)", +"12688d2f": "onGameCancelled(uint256,string,uint256)", +"1268ac4b": "tradesStats(bytes32)", "1268cb71": "XBPToken()", "1269359a": "enableWallet(address)", "126a04b5": "transferFromSGNToken(address,uint256)", +"126a0d2f": "totalProfitOf(address)", "126a710e": "dnsrr(bytes32)", +"126aa3cd": "add(bytes16,bytes16)", "126af4af": "tokensContractBalance()", "126b12e7": "initICO()", "126b6e17": "downX(uint256)", "126b85e7": "addLevelQuest(address,uint256)", +"126b8cc7": "profitTeamReserveReceiver()", +"126bd1cb": "RefundedToInvestor(address,uint256)", "126c1232": "addPanelist(address,address)", "126c13c8": "toldYouSo(bytes32)", "126c27b5": "setETHAssets(address)", +"126cbe60": "checkTokenBalance(address)", +"126cc312": "swapEtherToToken(address,address,uint256)", +"126d1e77": "setAdminOnce()", "126d20f1": "getBestPromouter()", +"126d2945": "re_regUser(uint256)", "126d5b83": "getPoolAmounts()", "126d9882": "updateLogoFee(uint256)", +"126dbe43": "getPropertyDetails(uint256)", +"126e19be": "addTransaction(address,bytes)", "126eac43": "getContribution(address,address)", +"126ed93e": "betOnFighter(uint256)", +"126f0f86": "burnCoins(uint256,uint256)", +"126f854d": "setVestingStart(uint256)", "126f992c": "forceOff()", "126fb2a3": "getCurrentRoundPrizePot()", "126fbb3a": "removeFunds(uint256,uint256,uint256,uint256)", +"126ff6f6": "getApprovedContracts(address)", "127043c3": "feesRate()", "12706ccd": "NIGIZ()", "12709b90": "SuddenDecayingTokenFunction()", "1270a4d3": "setMinSale(uint256)", "12711ae3": "wtech2()", +"12712f7c": "ERC721Composable_ValidateFingerprint()", "127157c3": "activateDevice(address)", "1271bd53": "upgradeContract(string,address)", "1271f09a": "approve(address,uint256,address)", "12724689": "addToTokenTransferDisallowedList(address)", +"1272a913": "acceptedTokenSymbols(uint256)", +"1272d8d4": "EARTH_SECONDS_IN_MONTH()", +"12737c33": "calculateCollateralNeededInETH(address,uint256,uint256,uint256,uint256,uint256)", +"1273a666": "getCombinedCurrentSetUnits(address)", +"1273b0c6": "getDODO(address,address)", "1273f6e7": "BIGSELL()", "12746e9f": "changeParam(uint256,uint256,uint256)", "1274c3f3": "announcementHash()", +"127564dd": "NewMintRequestUpdate(address,uint8,bool)", "127616f9": "releaseMultiWithStage(address[],address)", +"12763967": "setRewardProductName(string)", "127714c7": "getBudget()", "12778e8d": "addDistributionContract(address)", "1277b0c9": "createBid(bytes32,uint256)", "1277b4f1": "createCandy(string,uint256)", "1277e24f": "payOneTimeFee()", +"1277fb61": "viewSaleZ00M()", "127810bc": "getCompany()", "12783f2f": "VESTING_TIMES()", "12788f97": "B0xPresale(address,address,address)", +"1278c0e8": "_PoolStakingStartAt()", "1278cec4": "WinnerPaidEvent(address,string)", +"12791638": "lotteryPayout(address,uint256)", +"1279178b": "setRefBackPercent(uint256)", "12795d7f": "putSaveData(string)", +"12798972": "ClaimRewards()", +"1279ae2d": "roboPercentageForLiquidity()", "127a0dd9": "setJypcBonus(uint256)", +"127a30f1": "preciseUnitInt()", +"127a5298": "tokenEvent(uint256)", +"127a7732": "provideLiquidityStake(address,address,address,uint256,uint256[2])", "127afec6": "MakerTransferredAsset(address,uint256)", "127b0901": "delayAutorelease()", "127b0efd": "gauntletRequirement(address,uint256,uint256)", "127b4da5": "getAmountForCharger(uint256)", +"127be9b6": "propertiesMapping(address,uint256)", +"127c0290": "whitelistList(uint256)", +"127c2d73": "applySuceed(uint256)", "127c3d45": "getUserLibrary()", "127cc6bf": "medalTotalSupply()", "127cf0b9": "multiInvokeWith3Args(address,string,address[],address[],uint256[])", +"127d2103": "factorN()", +"127d34b2": "getComputedChildToken(address)", +"127d679c": "baseReg()", +"127dcbd3": "time_cursor()", "127dd730": "donationNum()", +"127e1e6a": "Bought(bytes6,bytes6,uint32,uint32,uint256)", "127e499c": "firstBonus()", +"127e9ac3": "swap1(address,uint256,address)", "127eca3f": "totalDividendPayments()", "127ecfa9": "getMinReward(string)", "127effb2": "operatorAddress()", @@ -10594,40 +19329,62 @@ "127f1068": "pieceprice()", "127f2d2c": "shutForDai(uint256)", "127f3374": "calculateselfOdd()", +"127f4b2e": "withdrawBNB(uint256)", "127f902f": "addressFundReserve()", +"127fcac7": "BEES_LEVELS_PRICES(uint256)", +"127ffda0": "setUnderlyingPrice(address,uint256)", "12800751": "determineWinner(uint256,uint256)", +"12800c3f": "swap_address()", +"128016b6": "getUnderlyingPrice(address,address)", "12806653": "setMaxContributionPhase2(uint256)", "1280db73": "donate(address,string,string)", +"1280f984": "LogFundsSent(address,uint256)", "12810fd8": "Lesson_6(address,uint256)", "1281311d": "buy(uint256,uint256,uint256,uint256)", "1281619b": "SeeleTokenLock(address,address,address)", "12818f0c": "withdrawNac(uint256)", "12819817": "setXauForGasCurrator(address)", +"1281be27": "setKOTH()", "1281d056": "test_threeValidEqBool()", "12821b5e": "sellingPrice()", "1282467d": "checkTip(uint8)", "12826f30": "isEthereumBased(address)", "1282cc2a": "getNumContributionsDID(address,address)", "1283c377": "FixedCapSampleCoin()", +"1283d0a0": "residents(uint256)", "1283e328": "bonusOf(address)", "128424a7": "sort(address[])", +"1284822c": "UnlockedAccount(address)", "1284c8f5": "transferSafety()", +"1284fac4": "iFriend()", "1286d9e8": "setRowColors(uint16,uint8,uint256,uint256)", "1286e393": "removePartOwner(address)", +"12871647": "noFarming(uint256,address)", "12874688": "setMinBid(uint256)", +"1287758d": "EnableRound()", +"1287e922": "superApprovePool(address)", "12883df0": "lcSold()", "12889639": "settleFeePub(address,address,uint256,address,uint256)", +"1288a8e9": "contributionsToken(address)", "1288c42a": "Prism()", +"1289155b": "flashloanFeeBips()", "12892b7f": "setblnpereth(uint256)", "128952e4": "addElements(bytes32[])", "128a0b2c": "approveFund(address,bytes)", "128a1c74": "createUpdateRisk(bytes32,bytes32,uint256)", "128a3765": "clearTransferInsToken(address)", +"128a4ead": "transferPool(uint256)", +"128a8b05": "uniswapAddr()", +"128acb08": "swap(address,bool,int256,uint160,bytes)", +"128aec6e": "_setDistributeWpcPaused(bool)", "128b265f": "addBridgeTokenFeeReceivers(uint256)", "128b3bc0": "_withdrawFunds(address,uint256)", +"128b8c5d": "_rateOrInverted(bytes32,uint256)", "128bad8d": "MFL()", "128bfcae": "startStake(uint256,uint256)", +"128c127e": "removeFromWhitelistInBulk(address[])", "128c785f": "ICACOIN()", +"128cb458": "valueRouter()", "128cf7c5": "SEC_PER_ETHER()", "128d7215": "addRequest(string)", "128d9281": "checkTransferFunction(address,address,uint256)", @@ -10637,45 +19394,84 @@ "128e3761": "firstTeamContributorId()", "128e87e0": "tokensAfterCrowdsale()", "128eb401": "expiredCrates(address)", +"128ee161": "benefactors(uint256)", "128ef181": "ticketMag()", "128f04e7": "importPresaleBalances(address[],uint256[])", "128f060a": "perETH(address)", +"128f72c5": "doMessage(string,string)", "128f8e04": "admin_active_payable()", +"128fb930": "loadMNEStaking(address)", "12901f26": "purchaseTokens(uint256,address,address,address,address,address)", "12907e08": "lastBlock_f6Hash_uint256()", "1290a2b4": "rightSharePriceRateOfIncrease()", "1290aed9": "AcornPotSplit(uint256)", +"1290b213": "voteStatus(bytes32)", +"1290c175": "globalAdmins(address)", +"1290fab4": "createStream(address,address,uint256,uint256,uint256,uint256,bool)", +"12911e49": "getSettleResult()", +"12914595": "governanceLevels(address)", +"12917395": "RCNequivalent()", "12919d90": "setMoneyManager(address)", "1291ebdd": "getAllowedTokenAt(uint256)", +"12923b65": "purchasers(uint256)", +"1292d8df": "wallet_99_strong_hand()", "1292de0b": "sendTokensTo(uint256,address)", +"1293092e": "messageCost()", +"1293e732": "vbswap()", "129441cf": "_cMoney(uint256,uint256,uint256,uint256)", "129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", +"1294bdf4": "setI(uint256)", "1294d4db": "assignReferral(address,address)", "12950877": "setOrCacheValidityBond(uint256)", +"12950c46": "headerRelayerRewardRateMolecule()", +"12951723": "resumeStrategy()", "12958f1c": "getUserName()", +"12967182": "getNumContributionsDID(address)", "1296830d": "transferPreSigned(bytes,address,uint256,uint256,uint256)", +"129693c2": "getOwnScoreQuery(bytes32)", "1296aef3": "timeInvestInMinute()", "1296d47d": "signedApproveHash(address,address,uint256,uint256,uint256)", "1296ee62": "transferAndCall(address,uint256)", +"12970eac": "chi0()", +"12971d66": "setSubmv1(uint256)", "12973afd": "isNotDuplicateTreasure(bytes32)", "12974218": "tokensRemainingForSale()", "12975687": "mediaTokensDecimalUnits(address)", +"1297f077": "inceptionTimestamp()", "12987c98": "large()", "129893dc": "ParameterizedToken(string,string,uint256,uint256)", "129932d5": "_spto(uint256,uint256,uint256,uint256,address)", +"12994dd1": "PurchaseAmended(uint256)", +"1299745a": "buyMineRubi()", +"1299754d": "getFullMaturity()", +"12997847": "getAvalanche()", +"12999f55": "registerReference(address)", "1299c8fe": "GetAccountIsFrozenByDateCount()", "1299f11e": "updateNextWindowAdjustmentRatio(int256,bool)", +"1299fbd7": "nkcmToken()", "129a1a37": "Dissolved(address,uint256)", "129a5b99": "getPropertyStatus(bytes32,address)", "129a75a7": "viewSecondBatchOfContractState()", +"129a847b": "max(int128[32])", "129a8d25": "LogKYCConfirmation(address)", "129a9e99": "enterEvent(uint256[12])", "129b873b": "addVote(uint256,address)", "129bc044": "unlockAccount(bytes32)", +"129bc715": "pay(address[],uint256[],address[],address[],string[])", +"129c386d": "getIdHash()", +"129c4208": "supported_token_factory_names(uint256)", +"129c5456": "SHARELP_POOL_REWARD_ALLOCATION()", "129caa18": "haltICO()", "129cf7cb": "ForeignBridge(uint256,address[],uint256)", +"129d94a4": "withdrawedAmounts(address)", +"129de5bf": "getUnlockedBalance(address)", +"129e05e6": "LAST_ISSUE_EVENT()", +"129e77be": "whitelistA(address)", +"129eb6e3": "reduceLPAmount(address,uint256)", "129ed395": "accountLock(address)", +"129ee21a": "setConfig(uint256,uint256,uint256)", "129f80fb": "rewardAirdropMany(address[],uint256[])", +"129fc1c0": "setJobId(string)", "12a00b21": "calculate_base_mining_reward(uint256)", "12a0421c": "safeWithdrawal2(address)", "12a06c35": "NFF()", @@ -10684,61 +19480,107 @@ "12a12106": "setPayoutAmount()", "12a15b91": "BlocktorialTestToken()", "12a187f3": "toggleTransfer(bool)", +"12a193e3": "pendingOther(uint256,address)", "12a1c2f2": "Mether()", +"12a1cf4c": "getTheLastSamuraiInfo()", "12a203c3": "getFinalAnswerIfMatches(bytes32,bytes32,address,uint32,uint256)", "12a2716d": "affirmations()", +"12a29198": "removeRecipient(address)", +"12a2adc7": "refreshVenusSpeeds()", "12a3234c": "unlockAdvertisement(uint256)", "12a3bbaf": "_addHorse(bytes32)", +"12a3bbe3": "batchIncrementTokenOwner(address[],address,uint256[])", "12a3cda2": "TokenOMG(uint256)", "12a3ff95": "endPrivatesale()", "12a49007": "p_setInvestorFundPercent(uint256,uint256)", "12a4b899": "claimPresaleTokens()", +"12a56b50": "l3ReferralShare()", +"12a5948c": "updateBet(uint256,uint8,uint256)", "12a63964": "Releaseable(address,uint256)", "12a71ee0": "setBiddingAuctionAddress(address,address)", +"12a72d02": "checkPropertyBalanceOf(address,bytes32)", "12a77dbd": "getLockedToken(address,uint256)", "12a7b914": "getBool()", "12a837b4": "transfer(address,address,uint256,bytes)", "12a8c1ed": "testAllocatesTokensInSale()", +"12a90c8a": "whitelistedMasterContracts(address)", +"12a91054": "setPromoPrice(uint256)", "12a916f9": "getPlayerWallet()", +"12a91e83": "getMediationServiceFee()", +"12a9d350": "airDefiTransfer(address)", "12aa2c0d": "getMinBal()", "12aa5360": "addAlpha(string,string,bytes32)", +"12aa5dc6": "collateralDebt(address)", "12aaac70": "getKey(bytes32)", "12aaafa7": "amount_milestone()", +"12aabe3d": "main(uint256,string,string)", +"12ab65b9": "setDefaultCommissionRatio(uint32)", "12ab7242": "setupStackDepthLib(address)", "12abbaaf": "WhosItGonnaBe()", "12ac18ff": "About()", "12ac4a2e": "bonuscal()", "12ac5bad": "GetContractStateCancelledByTenant()", "12ac9b46": "_escrow(address,uint256)", +"12ace5a2": "collectRedemption()", +"12ad0ec1": "trialStatus(address)", "12ad8bfc": "registerSecret(bytes32)", +"12ad8d1d": "exchangeAforLoanAsset()", "12ad8d20": "CryptoElections()", +"12ada8de": "servers(address)", "12addb94": "saleEnd4()", "12ade015": "oneTokenInFiatWei()", +"12ae00f9": "NewLoveBlock(string,bool,uint256)", +"12ae4ebb": "freeLostToken(address)", +"12ae6397": "assign()", +"12aeedbe": "FeeAddressChanged(address,address)", "12aef8c3": "tokensForSale()", "12afbc78": "getOwnedPointCount(address)", "12afef2e": "Reservation(address,address,address,uint256,uint256,uint256,uint256)", "12b0b3ca": "transferFromToICAPCallGas()", "12b0b627": "splitStr(string,string)", "12b0d309": "restrictTokenTransfer(address)", +"12b10c2c": "companionsList(uint256)", +"12b160fd": "MinAmount2Round()", "12b1cc95": "createHash(uint256)", "12b1f8a9": "removeLand(address,uint256)", +"12b246dd": "oneSplitSwap(address,address,uint256,uint256,uint256[])", +"12b24786": "requestPayout(uint256,address)", "12b27e3e": "miningActive()", "12b2ecc6": "init_bounty_program(address)", +"12b32156": "hasStaked(address,address)", +"12b3368d": "updateClaim(uint256)", "12b392ee": "admin_profit()", +"12b3a2c0": "fundAppeal(uint256,uint8)", "12b3a445": "getERC721Nfts(uint256,address)", +"12b486a9": "partialLiquidationUserReward(address,uint256,address)", "12b48d3c": "CountryCoin()", "12b495a8": "delta()", "12b4ba71": "emitTokenStateUpdated(address)", +"12b4d20c": "implementationMaster()", "12b58349": "getTotalBalance()", +"12b5ea3a": "setMaxVotingPeriod(uint256)", +"12b61913": "ob()", "12b62a07": "playerWinHeroes(address)", +"12b6705f": "processNetworkFees()", "12b68263": "creditDragon(address,uint256)", "12b68286": "whitelistMinTok(uint256,address)", +"12b69b5d": "_userlock(address)", +"12b6d860": "modifyAdmins(address[],address[])", "12b6ef5c": "Decision(uint256,address,address[],uint256[])", +"12b6ffb8": "VendingDisciple(uint256,address)", "12b706a7": "buyPreSale(uint256)", +"12b741c7": "phase3TokenPerBlock()", +"12b7bf58": "ownerLockedValue()", +"12b7d59b": "set_teamWallet(address)", "12b8854b": "redeemNewTalentsAndPartnerships()", "12b8ca5e": "_isDiamondOutside(string)", +"12b8e294": "mixedRefundModifierFunction()", +"12b8f0ec": "removeReaderFromOSMWhitelist(address,address)", +"12b9199c": "BetSuccess(uint256,address,uint32,uint256,uint256)", "12b93ec6": "ChallengeContract(uint256,string,uint256,address,address)", +"12b94bc1": "setInitialUserCredit(uint32)", "12b97812": "addOffering(address,bytes32,address,uint256)", +"12b9a346": "acceptBidForMask(uint256,uint256)", "12bae48d": "StartDate()", "12bb05ff": "claim1Ply(uint64,uint64,uint64,uint64,uint64)", "12bb65ca": "MANHATTANPROXY7THAVE()", @@ -10747,195 +19589,386 @@ "12bc74e2": "withdrawBondReward(address)", "12bcc858": "claimTokensInBulk(address[],uint256[])", "12bd2cea": "setImageDataCloud(uint256,uint256,string)", +"12bd6f49": "provideliquidity_all_2()", +"12bd8cd0": "isClaimTester(address)", "12bdc81b": "freedWinPoolForThirdStage()", "12bddc9c": "changeRules(bool,bool,bool,bool,bool)", +"12bde514": "SECTION_SYSTEM()", +"12be1501": "getPathForETHtoDAI()", "12be78d1": "freeze_pool(bool)", "12bea6eb": "kickStartICO(address,uint256,int256)", +"12bec7b1": "getXc(address)", "12bff72f": "doTransferOwnership(address)", +"12c05835": "_cifi()", +"12c0710c": "withdrawAllToken(uint256)", "12c0af96": "getVoterOnElection(address,address,uint256,address,address)", "12c0d1ea": "changeLuck(uint32)", +"12c0dfc3": "myuint8()", +"12c0f0b1": "approve_295(address,uint256)", "12c1083d": "distributing()", +"12c1c1d6": "minimumWait()", "12c2302e": "DocumentRegistered(uint256,string)", +"12c23565": "whitelistingMode()", "12c24128": "FootStarCrowdsale()", "12c27c64": "contrp3d()", +"12c2aca4": "hasETHReserve()", +"12c2fdfa": "addApprovedTokenContract(address)", +"12c393e0": "salvage(address,address)", "12c3ee37": "setStorageControllerContractAddress(address,address)", "12c3f754": "modificationFee()", "12c3f757": "soldiersinfo(address)", +"12c3fe63": "write(int256)", +"12c4208a": "updateTokenFee(address,uint256)", +"12c44999": "HARD_CAP_LIQUIDITY_EVENT()", "12c45f64": "maximumTokenSupply()", "12c55a9b": "openDeposit()", "12c59488": "setAddress(address,address,address,address,address)", +"12c5ca3b": "getNoOfSeats(string)", "12c61a20": "initambassadorsbags()", "12c6651c": "MoralityAI()", +"12c67102": "getWinningSlate(uint256,address)", "12c6ac16": "Reconcile(address,uint256,uint256)", +"12c70153": "declareLimit(uint256)", "12c723e1": "createDeposit(uint256,uint256,bytes)", "12c77207": "getLLV_edit_1()", +"12c7851e": "setsaleActive(bool)", "12c7df73": "rewardValue()", +"12c7f982": "migrate_and_destroy()", "12c8052f": "won()", "12c82894": "compute(string,string,uint256,uint256)", "12c82bcc": "sendRobust(address,uint256)", "12c85095": "getRestrictedTokens(uint8)", +"12c86a6d": "getTokenIndex(address,uint256)", +"12c87c2d": "allowInterestRedirectionTo(address)", "12c89869": "getHeroCurrentPrice(uint256)", +"12c8ba90": "isBankOpened()", +"12c8c408": "MAGGOTROTPair()", +"12c8d234": "mintWithTokenId(uint256,address,uint8[7],uint8,bytes32)", +"12c8f3b5": "roundGap_()", +"12c93f59": "onDeposit()", "12c96f5f": "ZAYAToken()", "12c99005": "startPREICO()", +"12ca57dd": "onBuyShare(address,uint256,uint32,uint256,uint32,uint32)", +"12ca91d7": "ethInvestorFunds(address)", +"12cab768": "approveFor(uint256)", "12cacbb5": "inPresaleMode()", +"12caee70": "selectPhase(bytes32,uint256)", +"12cb296a": "decreasePositionWithFlashLoan(address,address,uint256,address,uint256,address,uint256,bytes,bytes)", +"12cb4648": "Purchase(address,uint256,uint256)", +"12cb46c1": "swapOut(uint256,uint256)", +"12cb70c7": "transfer(string,uint256)", "12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", "12cc1abc": "set_exchange_rate_in_eth(uint256)", +"12cc40ce": "multitokenChangeProportion(address,address,address,uint256,uint256,uint256)", +"12cc63dc": "STAKING_POOL_ROLE()", +"12cc97a2": "renounceOwnerFees()", "12cc9dd3": "usdId()", "12ccb421": "payPlatformIncomingTransactionCommission(address)", +"12cd090c": "pendingCNT(uint256,address)", "12cd2101": "transfered(address,uint256,bytes32[])", "12cd24be": "funder(address)", "12cd57c9": "inputauction(uint256,address,uint256,string)", +"12cd7d38": "setPoolCollectedFee(address,uint256)", "12cdc37a": "OrderTake(uint256)", +"12ce3525": "changeSharedStakeMultiplier(uint256)", +"12ce62c1": "prevOwnerFeeOf(uint256)", "12ce73dc": "callFor(address,uint256,bytes)", "12cef27a": "secondWallet()", "12cf0ec8": "balanceOfAt(address,uint256,int256)", "12cf85c8": "s26(bytes1)", "12cf8a10": "getType(uint32)", +"12d00223": "getCardCosts(uint256[])", "12d00c2e": "soloWithdraw(uint256)", "12d0e65a": "changeBeneficiaryAddress(address)", +"12d1441e": "tssThreshold()", "12d1456f": "requiredExpIncreaseFactor()", "12d1612a": "closeContest(string)", "12d1b19a": "poissonData()", +"12d1d410": "shw()", +"12d24131": "setSyntheticAggregator(address)", "12d2c9a5": "isWhitelistedInvestor(address)", +"12d320c5": "castVote(address,uint256,bool)", +"12d327c3": "eth2daiAddr()", +"12d36171": "createPool(address,uint256)", +"12d3ace4": "mintPOOH()", +"12d42835": "hasMember(address)", "12d43a51": "gov()", +"12d4ffed": "secondaryPool()", +"12d500c4": "SpudRnG(address,uint256)", +"12d58e2b": "fundDisabled()", +"12d5f4bd": "indexOfAudit(string)", "12d60f86": "fillUpAllowance()", "12d6468d": "mathTransfer(address[],uint256[])", +"12d66d91": "ratePerSecond(address,uint256)", "12d67c5f": "getLastDataLength()", "12d69389": "maxUint32()", +"12d6b524": "checkACToken(address)", "12d6c704": "getTMul(uint256)", +"12d6eebb": "getOneCfoCoin()", "12d72e99": "deregisterProduct(uint256)", +"12d93656": "adminSetBridgeCounterContract(address)", "12d96887": "getRollUnder()", +"12d974d1": "createMasterFee()", +"12d98f24": "removeNft(address)", +"12d9e1a5": "dayIndexToPrice(uint16)", "12da6e2b": "fourthTime()", +"12da7de8": "multisendErcCAKEX(address[])", +"12dbd7dc": "setPreYieldDivisor(uint256)", +"12dbff6a": "HouseCutPercentageChanged(uint256)", "12dc006a": "racer_index()", +"12dc25f4": "removeRiskyStakeholder(address)", "12dc34a0": "disableSetTransferable()", "12dc5ca0": "CrowdsaleToken(address,string,string,uint8,uint256,bool)", "12dc6449": "test_remove_head()", +"12dc84d4": "ListingData(address,uint256,bytes32)", "12dc8c4b": "InitialTokensAllocated(uint256)", +"12dc9013": "appointments(uint256)", "12dc9a5b": "assert(bool,bytes)", "12dcb676": "remainPackage()", "12dd4763": "_transItem(address,address,uint256)", "12dd8700": "CevacFund()", "12dd9b94": "addBet(address,address)", +"12ddadbc": "setSwapPath(address[])", +"12ddb805": "whitelistTx(address)", "12de10fd": "setMinimumFundingLimit(uint256)", +"12de7d70": "getBlockNumberExt()", +"12de7e2c": "roomCreateIFace()", "12de8a12": "addReferenceParentWineryOperationByRegulator(string,string,uint256,string,string,int256)", +"12dea160": "bancorContractRegistry()", "12df172d": "setScale(uint256,uint256)", "12df2f49": "serviceStation()", "12df9b63": "AddContact(bytes32,address)", +"12e01363": "getCardContract(uint256)", +"12e0519b": "blocks2Finish()", +"12e0a8da": "getReleaseDateOf(address)", +"12e0c430": "getOrderCancelled(bytes32)", "12e135a0": "setBuyCommission(uint256)", +"12e1c745": "addRoles(address[],string[])", +"12e1f4d0": "updateStaticPricesMapping(string,uint256)", "12e228fd": "investorAddress()", "12e26673": "maxMSC()", +"12e2cb6b": "FreezeTokens(uint256,uint256)", +"12e35720": "disableWhitelistVerification()", "12e36530": "addMerkleTreeRoot(bytes32,bytes)", "12e382b4": "lockFunds(address,uint256)", +"12e40b05": "hiRiskPool()", +"12e41a77": "kyberNetworkProxyAddress()", "12e43d92": "AVAILABLE_PRESALE_SUPPLY()", "12e43da5": "kycConfirmer()", +"12e47189": "ClaimX(uint256)", "12e530aa": "Hacksig(uint256)", "12e56faf": "activeTransfer()", "12e57fdc": "MONEYTREETOKEN()", "12e5b7fa": "GetOwnertName()", +"12e5d9e1": "BOP(address,address,uint256,uint256)", +"12e615eb": "proposals2(uint256)", "12e6414e": "getCampaignStartDateById(bytes32)", +"12e69e02": "inCaseDAIgetsStuck()", +"12e6bf6a": "callAny(address,uint256,bytes)", +"12e6ce39": "batchCredit(address[],uint256[],uint256[],address,bytes32[])", "12e753e1": "modifyContact(address,string)", "12e7b2ba": "vanilAddress()", +"12e800f1": "reportDelaySec()", +"12e81dbe": "takeRepayment(uint256,address)", "12e8e2c3": "setPlatformFee(uint256)", "12e8ebdf": "unpauseWithdrawal(address,address)", "12e905b0": "selfAddress()", +"12e9332d": "addrUniswap()", "12e9d888": "removeSkillFromSale(uint256)", "12e9db2d": "get_deposit_balance(address,uint256)", +"12e9df59": "BUND()", "12ea0b0e": "INV()", "12ea7d20": "BoSToken()", "12ea965d": "icoStartBlock()", "12eabe7e": "approuver(address,uint256)", "12eacf4b": "fundInsurance()", +"12eb4f9a": "withdrawPeriod()", "12eba773": "isAdvisorsTokensFirstReleased()", "12ebca9c": "get_admin_list()", "12ecaa62": "freezeAccountOf(address)", +"12ed2fc7": "batchRefundTokens(uint64[])", +"12ed3b10": "uni_CRV2WBTC(uint256)", +"12ed7153": "swap2TokenRouting(uint256)", +"12edde5e": "initiateWithdrawal(uint256)", +"12eeff7e": "withdraw(address,uint256,address,bool)", +"12ef080d": "approveToken(address,address,address,uint256)", +"12ef7fe2": "unarchiveModule(address)", "12ef900b": "getMaxLoanAmountAllowedByLtd()", "12ef934b": "nCryptClubShare(address,address,address,address)", +"12efdd7e": "updateProxyRegistry(address)", "12efe5ad": "minDonationInWei()", +"12eff661": "updateUniswapFactory(address)", "12effc32": "rejectTransfer(uint256)", +"12f05148": "balanceOfcrvpla()", "12f05418": "campaignCanceled()", +"12f0d6bd": "mintBasicNFT()", +"12f0dea7": "liquidateBorrow(address)", "12f0f9df": "createBountyContract(address)", "12f11ed3": "getDenyPremium(bytes32)", +"12f12573": "ownerXname(bytes32)", "12f17735": "calculateEntryHash(address[],uint256[])", +"12f1dbc8": "signatureNonce(uint256)", "12f20e2a": "withdrawFundsToOwner(uint256)", +"12f21602": "log(bool,bool,uint256)", "12f26140": "setWhitelistContract(address)", "12f2b838": "updateReservedWei()", "12f31b5f": "firstTeamWithdrawal()", +"12f31f72": "addState(uint256,uint256,uint256,bool)", +"12f337d8": "startSaleDOGS(uint256,uint256,uint256,uint256,uint256)", "12f3d1e0": "discoverResources(uint256)", +"12f4465d": "checkUserCapital(address)", +"12f4533b": "TokensTransferred(address,uint256)", +"12f4bc96": "bnbs()", +"12f4c3da": "callUniswapRouter(address,address,uint256,uint256,address,uint8)", "12f4cbd9": "Vote(uint8)", +"12f510f2": "tradeHistoryAddress()", "12f53950": "refunded()", "12f58b43": "RATE_CHANGE_THRESHOLD()", +"12f5a86d": "balanceController()", "12f62bd6": "updateProperties(uint256,bytes)", "12f63d96": "lockedByUser(address,address)", +"12f69b21": "hxpUnlocked()", +"12f69cf5": "startAirdrop(uint256,uint256)", +"12f6b163": "getTokenHandlerExist(uint256)", "12f6e641": "okamiMaxPurchase_()", +"12f77332": "rc()", +"12f7a55d": "doTransmit(address,uint256)", +"12f7c47b": "releasedAngelPESales(address)", "12f7cf74": "approve(address,uint8,uint8)", +"12f7e818": "createNode(bytes32,bytes32,bytes32)", "12f7fb6f": "RocketCoins()", +"12f82cbc": "Earned(address)", +"12f8acb5": "getLastPrice(string)", "12f8ae31": "getRedeemEst(address,uint256)", "12f8b3db": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", +"12f8ed30": "userRegister(bytes32)", "12f95b16": "GIC()", +"12f9b48e": "investorList(uint256)", +"12f9d8f8": "getBidRequest()", "12fa6feb": "ended()", "12fa769f": "paidAmount()", +"12fab4b6": "OffChainBuy(address,bytes32)", "12fb5b67": "purchaseTokensInICO(uint256,address)", +"12fb9ece": "pixel_limit()", "12fc41a1": "MyScheme()", +"12fc425a": "baseInterestPerBlock()", "12fc848e": "_randomLucyAddr()", "12fca967": "contract6function2()", +"12fd415a": "tradeTokenForEtherUsingReservesWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", +"12fd5ef1": "decodeReserveBalance(uint256,uint256)", "12fd67ba": "getValidations()", +"12fde4b7": "getFeeCollector()", "12fdf767": "FuseaNetwork()", +"12fe7111": "hopers(address,uint256,uint256)", +"12fefa28": "challengeStarted()", "12ff2ad9": "Consent(address,address)", "12ff658f": "DmitryCoin()", "12ffb59b": "checkIcoStatus()", +"12ffbeee": "initializeThatFails(uint256)", "12ffe4df": "_decreaseApprovalAllArgs(address,uint256,address)", +"13005cc8": "getETHForTokens(address,uint256)", "130067ca": "updateCostContract(address)", "1300a6d1": "timeLeft()", +"1300aff0": "ACCOUNT_CREATION_HASH()", "1300cc41": "freezeTransferToken()", "13012a3b": "doMap(address,string)", "13019a5e": "EtherTool()", "1301b876": "EmbiggenToken(uint256,uint256,string,string,uint8)", "1301c4aa": "CryptoniumCoin()", +"1301cf27": "depositOnBalance(uint32)", "1301ee02": "transferringETC(address)", +"1301fd66": "setNewWeight(bytes)", "1302188c": "getLastDataHash()", +"130244ff": "approveRefund(address)", +"1302804a": "checkSurveyResult(address)", "13028f44": "addUserRewardPayouts(address,address,uint256)", +"1302973a": "minSell()", +"1302a533": "wrapsRelativePathMethod()", "1302d03a": "setWhitelist(address,uint256)", +"1302d09b": "beamKyber(address,uint256,address)", "130346d2": "icostart()", "13037d22": "xioniCoin()", "1303a484": "commitment()", "13040bc1": "tokensFinalized()", "13045155": "MONTHLY_INTERNAL_VAULT_CAP()", +"13046876": "isOldRecover()", "130497ac": "getCountryList()", +"1304a512": "setNextDayRewardPool(uint256)", +"1304bd76": "sessionDataOf(address,uint256)", "1305413e": "BetMade()", +"13055444": "validatorDataContractAddress()", +"1305cc02": "rhinoSafe()", "1305d2de": "changeAllCosigners2(uint256,address[],bytes,bytes,bytes,bytes)", "13063180": "doEscape(uint32)", +"130656cf": "getRatingByAddressString(string)", "13065fed": "MoneroClassic()", +"1306f36e": "setTransportResults(bytes,int256,int256)", +"13073009": "BurnEvent(address,uint256,uint256)", "130766c5": "enterLarge()", "1307d2d7": "EARLY_CONTRIBUTOR_STAKE()", +"1307d805": "GiveCertificate(uint64,string)", +"1307f003": "Construct(address,uint256,uint8,uint8,uint8,uint8,uint8,uint8,string)", +"1307f3ab": "flipperMom()", +"1308bee6": "approve_258(address,uint256)", "1308c324": "setAddrForPrivilege(address)", "1308d2c2": "gauntletRemovable(address)", "1308e82d": "L19_PALToken()", "1308e9e0": "startSweepStake()", +"13097b4b": "getAddressWETH()", "130985f4": "GetcrowdsaleContract()", "1309a563": "IsPaused()", +"1309d2e5": "revokeTransferAdmin(address)", "1309d3bd": "RAVI_ALLOCATION()", +"1309ec43": "apps(address)", +"1309fb99": "causexDon(uint256)", +"130a24d0": "govTribute(string)", "130a39b1": "removePersonalTokenLock(address)", +"130a75fe": "completeDeposit(address,uint256)", +"130a8292": "tradeWallet()", +"130aeef9": "ReconVaultNextStock()", +"130b85ae": "redeemPack(uint256,uint256)", +"130bbce0": "setLimit(int256)", "130bcaa2": "removePersonalLockMultiple(address[])", "130c0e88": "advisoryVUPDestination()", +"130c32d9": "createPromoNumber(address,string,uint256)", "130d04d0": "companyHolding2y()", "130d7906": "register(uint32)", "130d993d": "lifeFactor_iii()", +"130dd420": "userClaimLock(address)", +"130e197e": "addi5()", +"130e2fdd": "setLockType2(uint256,uint8)", "130e54a1": "prizeshow(address)", +"130e81f3": "gangBadges(uint256)", +"130fafdb": "KycComplete()", "130fbba4": "setPixelToken(uint24,uint256,uint24)", +"130fc851": "getUnstakeTreasuryFee(uint256)", +"13101a0a": "__LnFeeSystemTest_init(address)", +"13105b0b": "ownedTicketsLeft(address)", +"1310730c": "smartFundETHFactory()", "13110199": "twentyEndTime()", "13110874": "preSaleFirstEtherCap()", "1311457c": "transferToken(address[],address,address,uint256)", "13114a9d": "totalFees()", "1311b45e": "setGasForCMT(uint256)", "1311c860": "KCoin()", +"13120a4e": "paybackOnBehalf(address,address,uint256,bool,address)", +"13123d52": "pickWinners(uint256)", +"13126bae": "burningMode()", +"1312761e": "testOnlyOwnerCanRefuseInvestment()", "131284c8": "FUNDING_START_TIMESTAMP()", +"1312e059": "getdoi()", "13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", +"1313b53a": "transferLockBalance_1(address,uint256)", "1313c739": "getBidForAuctionByIdx(uint256,uint256)", "1313f631": "Register(bytes4,bytes32,bytes32[8])", +"13149e87": "setOG1_BONUS(uint256)", "1314e272": "addAddressesToOperators(address[])", "13151981": "to()", "13155455": "legacyToken()", +"1315570f": "getInviteCount(address)", "13163d53": "CTO_Signature()", +"1316529d": "getRevision()", +"13168724": "transferAndCallWithSignature(string,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "13169ab7": "rewardManual(address,uint256)", "131719e1": "testtop()", "13174093": "bountyAccount()", @@ -10943,25 +19976,42 @@ "13178704": "ContributeToPool()", "1317b559": "buyshares()", "1318b88c": "GetPlayer_FromID(uint32,uint8)", +"1318c2fd": "toUInt(bytes16)", +"1318c71f": "SetTavernContract(address)", "1318cd2d": "NameInt()", +"13190139": "CloseCampaign(uint24)", "13193936": "GEMERAToken(address[50])", "13194658": "MossCoin(uint256)", +"1319649d": "getStakerCount()", "1319b880": "borrowToken(uint256,uint256,address,address,bool)", "131a0680": "store(string)", "131ad118": "avaliableBets()", "131ad146": "getWorksStatus(bytes32)", "131b0563": "EITARD()", +"131b0ae7": "setIntegrationProxy(address)", +"131b592c": "verifyProposalDocuments(address)", "131b81ad": "transferExecutorOwnership(address)", +"131b8552": "safeEarnTransfer(address,uint256)", "131b9c04": "getEarnings(address)", "131bb0d6": "ethCostTotal()", "131be36c": "preICOregulations()", +"131c1789": "getDownlinePayout(address)", "131c4305": "SoundcoinsAddress()", +"131d0b57": "burnMessage(string,uint256)", "131d2873": "isContractFrozen()", +"131d9a27": "getBids(uint256)", "131de517": "getKeyBlockNr(uint256)", "131e03ba": "withdrawOtherEDEX(address)", "131e1816": "setRetiro(address)", +"131e26b9": "getRequiredComponentIssuanceUnits(address,uint256)", +"131e62db": "canOpen(uint256)", +"131e64d6": "smartFundERC20LightFactory()", +"131f2e53": "rewardsBalance()", +"131f4104": "preSale(uint256)", "131fa183": "createBoard(address)", "132002fc": "votingDuration()", +"13205ed0": "ownerbyaddress(address)", +"1320da8b": "userTotalStaking(address,address)", "1320f614": "callServer(string,uint256)", "1320f838": "modify_ICOStartDate(uint256)", "1321d291": "enact_liquidation_greater_equal(address,uint256,uint256)", @@ -10970,50 +20020,84 @@ "13222d0a": "payoutsETH(address)", "1322311b": "LoanBit()", "13224fc5": "missingTokensFallback()", +"1322bd19": "writeLEXScriptWrapper(string,uint256,address)", "1322e9d0": "checkPayoutReadyState()", "13233cd9": "appointAgent(address)", +"13234d48": "mpool()", +"13238dd6": "lastBuyer(uint256)", +"1323a4ff": "setFarmLimit(uint256,uint256)", +"132414eb": "testSingleResult(uint32)", "13242733": "getRoundOfSixteenTeams(uint256)", +"13243885": "plotValue(uint256)", "1325c502": "debugSetNow(uint256)", +"132684f6": "changeXEuroContractAddress(address)", "13270bb8": "authorizedCount()", "1327290d": "isAddressActivated(address)", +"13272dda": "initialize(string,string,uint256,uint256,address,address,address,address,address)", "1327487f": "activation(uint256,address)", +"13279dba": "getLengthRemunerationQueue()", "1327d383": "hybridizations(uint256)", "1327d3d8": "setValidator(address)", +"1327d5a5": "fiveReserveWallet()", "1327fbe5": "getPanda(uint256)", +"132816bd": "timeGaps()", +"13284652": "parliamentInquest(address)", +"13285df2": "getJoinVerifier()", +"13288f01": "addStakingToken(address[],uint256[])", +"1328ad5d": "stakerActiveTotal()", "1328ec9b": "getAvatar(uint256)", +"1328ed3c": "migrateSingle(address,address)", "1328fd8f": "getDetails(string)", +"13293522": "setV1address(address)", +"13296941": "totalAttacks()", "13299604": "getWallet()", "132ac1dd": "itemsForSaleCount()", +"132adcd9": "moonETHToken()", "132ae5e9": "numInvestors()", +"132b4194": "unaccountedTokens()", +"132c2614": "depositeETH()", "132c3bea": "setContractPrice(uint256)", +"132c4feb": "totalLP()", "132c8641": "given()", +"132c8c9b": "findFreeReferrer(address)", "132d05e5": "_distributeJackpot()", "132d807e": "upgradeTo(address,address)", "132df661": "isPrePreSale()", +"132e09ce": "doWhile_2()", "132e4f3c": "fail(uint256)", "132e63ba": "PRICE_8()", "132e8bee": "batchWithdraw(uint16[])", +"132eeaa7": "seigniorageOracle()", "132ff514": "SQUAD_SIZE()", "133086a5": "SphereTokenFactory()", "1330a21f": "calulateRate()", +"13320962": "dailySaleLimitPercent()", "1332143c": "getGoldTransactionsCount(string)", "133252a6": "grantToken(uint256,address)", "13326f43": "transferTokenToSender(address,uint256)", +"1332a42f": "eliminateSDCC(address,uint256)", "1332dd07": "_isFreezeList()", "13331391": "buyPreIco()", "133323c8": "setLevToken(address)", "13332c6c": "myVoteFactory()", "133369c6": "GetRigData(uint256)", +"133374bd": "absoluteMaxDoc()", +"1333f011": "sendGloryAward(address[],uint256[],uint256)", +"1334903f": "entranceFeeFactor()", "1334a5e2": "eventCallback(uint8,address,address,uint256)", +"133518ba": "getNumberOfUpPredictors(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)", +"133663f9": "pooledStaking()", "13368364": "getMarketPriceOracle(uint256)", "1336a756": "previousPeriodRate()", +"1336c024": "EvSellStatusToken(address,uint256,uint256)", "1336cff6": "isAccountFreeze(address)", +"1336dc0d": "getFeeCollectorAddress(address,bytes32,bytes32)", "13373786": "powerBalanceOf(address)", "1337d6ed": "sendFlower(address,bytes32,string,bytes16,uint256)", "13381fbf": "registrantsPaid(address)", @@ -11024,47 +20108,77 @@ "133922ad": "setCompanyURI(string)", "13392662": "totalTokensOfThisContract()", "1339305f": "createRandomZombie_FreeZombie()", +"1339324b": "MINTER_ADMIN_ROLE()", "1339870e": "GetOrderBookScreen(address,uint256)", "13399d10": "INCRYPT(uint256,string,string)", "1339cba2": "getRemainingDaysToSecondPhase()", "133a473e": "sleep()", +"133a7a48": "pendingENCORE(uint256,address)", +"133adab6": "removeMerchant(address)", +"133adbb3": "UpdatedIsVerified(address,bool)", "133ae30b": "transferFunds(uint256)", +"133af456": "scoreOf(address)", "133af8b3": "getIcoTokenHoldersAddressesCount()", +"133b2eab": "setOpenLoan(bool)", "133b5ba9": "honestisFort()", +"133bee5e": "getAddressVars(bytes32)", "133c5ff5": "getAdminAccounts()", +"133c6588": "getBPollInfo()", "133cbe3a": "setLatestToNow(address)", "133d10e6": "HPCToken()", +"133d214c": "tradeTokenForToken(address,address,uint256,uint256,uint256,bool)", "133d27e1": "partner1_address()", "133d2afe": "myfast(address,uint256)", "133d5d4e": "setMultisignWallet(address)", "133d8555": "withdrawTokenFromElc(address,uint256)", "133e3f71": "getOld_BalanceOfr(address)", +"133e7bc3": "BonusPaidGet(address)", +"133f1389": "isSuperOwner(address)", "133f44dc": "removeVerifiedInvestor(address)", "133f50f5": "checkUserExists(address)", "133f6ac0": "earlyExchangeRate()", "133f8a2f": "getStockReleaseTime(address,uint256)", "133fe629": "calculateCuts(uint256,uint256)", "134000c0": "getGrid()", +"134008d3": "execute(address,uint256,bytes,bytes32,bytes32)", +"13401551": "governancePending()", "134087a2": "gameLogic()", +"13409262": "MintReserveLog(uint256)", "1340d09a": "isPoint(uint256,uint256)", +"1340f1a8": "WithdrawStake(address,uint256,uint256,uint256)", "13413858": "isFreelancerAvailable(address,address)", "13414a4e": "doDisputeMemoryWrite(uint256,bytes32,uint256)", +"13416a73": "NewEOSHate(address,string)", "13419be3": "LifeFactor_v()", "1341b33c": "releasableViewOrSend(address,bool)", +"1341e725": "addSsToLiquidate(address,address,int128)", +"134216c0": "s(uint256,uint256,uint256,uint256)", "13424bf0": "unpause_4()", "13426d87": "addEmitter(bytes4,address)", "13429e31": "newPrice(uint256,uint256)", "1342c0e8": "VZT_WALLET()", +"13432b75": "UniSwapMKRExchangeContractAddress()", "1343a35f": "sendLoan(address,uint256)", "1343ed05": "isStoreSet(string)", +"1344355a": "getCompoundData(address,uint256)", "134538f3": "testRemoveGains()", "134562a6": "SimpleToken(uint256)", +"13456851": "confirmVestInChain(uint256)", +"13458047": "UnstakeEthUbaseLp()", +"13459358": "getXLocker()", +"1345b8a5": "snapshotPoolValidatorStakeAmount(uint256,address)", "13463751": "ThroneClaimedEvent(uint256)", "13468929": "signedApproveCheck(address,address,address,uint256,uint256,uint256,bytes,address)", "1346c20e": "canBuy(address,uint256)", +"1346f0c4": "invoiceCount()", +"13472dad": "grantGame(address)", "134741f7": "SimpleERC20Token(uint256)", "1347b972": "setICOWeek2Bonus(uint256)", "1347b9ae": "CommonToken(address)", +"13484ca8": "bcTakeReleased()", +"13484ff2": "migrationLock()", +"13486beb": "mintArbitrary(address,uint256)", +"13488d88": "withdrawAward(uint8)", "1348ab3a": "setRequiredTotal(uint256)", "1348fdcc": "changeStarttime(uint256)", "1349c273": "ClearExpiredFreezingEvent(address)", @@ -11072,25 +20186,56 @@ "134a04ea": "breedingDB()", "134a153a": "buyVirtTokens(address)", "134a5330": "updateTokenPrice(int128)", +"134a73c6": "selfDesturctor()", +"134abb08": "a_b4()", "134abf66": "sendVesting(uint256)", +"134b3aee": "generateLoan(uint256,uint256)", "134b684f": "SafeGiftTokens(uint256,string,string)", +"134b6edb": "getRewardToken(uint256)", +"134bb284": "setBalancerToken(address)", +"134bc3fb": "SetMinWeiForDInit(uint256)", "134c021b": "divForTransfer()", "134c1a28": "L2Cash(address,address)", +"134c1abc": "calcRateLBT2ERC20(bytes32,bytes32,uint256)", +"134c23d1": "EMPLOYEES_POOL_AMOUNT()", +"134c85c8": "setEpochAdvanceTime(uint256)", +"134c9150": "Change(bytes32,uint256)", "134c91be": "setFile(string,string,uint256,string,string)", "134ccdfb": "IBIZACASH()", "134dc5ad": "setManagerAddress(address,address)", +"134dfcd8": "recoverETH(address)", +"134e18f4": "identityRegistry()", +"134e3405": "Balance(address,uint256)", "134e3917": "setM2(address)", +"134f032b": "pendingMilk(uint256,address)", "134f1893": "goWiner()", +"134f6d3a": "soloMargin()", "134fd7d0": "_convertToWei(uint256)", +"134fdd64": "Canceled(bytes32)", "134ff97e": "startGame(uint32,bytes32)", "1350a997": "AccessGrant(address)", "1350acbd": "PRESALE_MAX_ETH()", "135128c2": "CounterPartyDeposit()", +"13513125": "approve_583(address,uint256)", "13517fea": "maxCost()", +"1351ba18": "getParticipantCountBySaleId(uint256)", "1351cf51": "setAuthorizedAddress(address,bool)", +"13520658": "DISTRIBUTION_BASE()", "135217e7": "requires_depth()", +"1352301b": "regOrg(string,uint256)", +"13526929": "getFallback(string)", +"1352d11d": "_src20()", +"1352f717": "FSERandom()", "1352faec": "setReleaseDate(uint256)", +"13533b55": "hasValidPrice(address)", +"135390f9": "withdraw(bytes,uint256,address)", +"1353a5ef": "createSDC(address,uint256,uint256)", "1353e7b3": "purchaseMetal(uint256,uint256)", +"1354839d": "contractStakers(address,uint256)", +"1355c7b7": "claimProxyFunds(address)", +"13560cac": "allCoins(uint256)", +"13562e2f": "addmintermap(address)", +"13565b2c": "getLimitAndDailySpent(address)", "1356c5dd": "raceBet(uint8)", "13574cd2": "calculateKnowledgeBuy(uint256,uint256)", "1357b862": "contractSolidStamp()", @@ -11100,115 +20245,203 @@ "135892bf": "FundUpdated(address)", "1358937f": "TEAM_HOLDER()", "13590153": "ManualChangeEndDate(uint256,uint256)", +"13590aa3": "pendingMouse(uint256,address)", +"135930d4": "depositToGauge(uint256)", +"135973fb": "setPreviousProposer(address)", "1359844a": "winNetworkFeeBasisPoints()", "13598b71": "LightningEthereum()", +"1359b0d1": "tokenFromShares(uint256)", "1359cb2c": "getCommissionWithdrawn(uint32)", "1359fc91": "setPublicKey(bytes32,bytes32,bytes32,bytes32)", "135a2474": "joysoWallet()", +"135a317f": "max_withdrawal_allowed()", +"135aa6fd": "setSigners(address[],bool)", "135bada6": "setDungeonStatus(uint256,uint256)", "135bf431": "gamerun()", "135c0701": "purgeAccount(address)", +"135c63a3": "minkV1()", +"135ca124": "manufacturerRewards(bytes32)", +"135d083d": "setTreasuryMultiplier(uint256)", +"135d1db2": "removeBnbLiq(uint256)", +"135d3fac": "buildPortfolio()", "135da3c2": "getBal(bytes32,address)", "135da767": "LennartCoin()", +"135dc726": "totalWithDraw(address)", +"135e563d": "traders(uint256)", "135e9ad6": "fulFillTX(uint256)", "135ec4bd": "AddAppraise(address,string)", "135ed7bd": "priceRound1()", +"135eeb8f": "getUSDPPriceForLUCAX()", +"135efc71": "sdfgbrth1()", "135f01df": "addDocument(bytes16,bytes32,uint8,bytes32,bytes32)", +"135f8aa7": "phase(uint256)", "135fae64": "getOwnerProprietaryData(uint256)", "135fc676": "loseHandler(address,uint8)", "13601234": "checkRejectionRatio()", "136047ab": "ticketTransferers(address,uint256)", "13612119": "distribToken(address)", "136125a7": "GoldFiatFee(string)", +"13614792": "withdrawService()", "13618756": "readnationnameXteam()", +"1361f08a": "addUserDetails(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"136208b7": "getModifySelfWeight(uint256,uint256,address[])", "1362180e": "setItemName(uint256,bytes32)", "13622274": "prealocateCoins()", "1362dd32": "testinx()", +"13632802": "raisePower(uint256,uint256)", +"1363bdd3": "balanceToShare(uint256)", "1364326c": "countVotes(uint256,uint256)", "13643605": "crowdsaleTarget()", "136439dd": "pause(uint256)", +"13646d58": "confirmWhitelistContract()", +"13647194": "twin1SupplyTotal()", +"13647dc8": "setTaxAllocations(uint256,uint256,uint256)", "13651124": "WithdrawAmountFromBankAccount(uint256)", "136512c9": "_checkPixelRight(uint256)", "13653b24": "RECFToken(uint256)", +"1365937b": "calculateStakingPoolV1BalanceAndExpectedLockedSyntheticAmount()", "1365e6a3": "REBELCOINSupply()", +"13665359": "apps(uint32)", "1366b970": "test_transfer_token_to_contract()", "1367641e": "releaseAdvisorTokens()", +"13677f94": "ROI(address)", "1367944b": "getIdByName(string)", +"136827a4": "Get_Owner_balance()", "13683532": "getAccountCap(uint256)", +"13683cae": "getAppartment(uint256)", +"13692a10": "depositETHForLP()", +"13692d02": "MANAGER_ADDR()", +"136963b6": "openLastPoolReward()", "1369f6fd": "getCurrentOwnerBallence()", "136aa762": "Remmittance(uint256,uint256)", "136ac4bf": "WillTestament()", +"136ad9d4": "_asSingletonArray(uint256)", "136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"136b05dd": "log(bool,address,uint256,address)", +"136b27c7": "participantPut(uint256)", "136b4fea": "getActiveFish(uint256,uint256)", +"136bbc38": "createDrill(uint16,address)", "136bcbab": "Windlord()", "136c545c": "transferToProjectWallet()", +"136c8670": "onTokenSold(uint256,uint256,address,address,string)", "136c8744": "WBSToken()", "136cf5c1": "deleteVestingFromStorage(address)", +"136cfbdf": "sumOfSchainsResources()", "136d1057": "accountBalanceCount()", "136d5a59": "giveKudos(bytes32,uint256)", "136d6a39": "getBalanceByAddress(address)", "136dbbab": "revenueFraction()", "136e1949": "buyFunderSmartToken(string,string)", "136e1c45": "suspendGame()", +"136eb583": "minAcceptableWei()", "136ede68": "verifyCopieExecutoire(bytes32)", "136ef18a": "allowTransfers(address[])", "136f1016": "hasBet(address)", +"136f1b58": "tokenUniswapPairDEFLCTCRB()", "136f2bf4": "allowToken(address[])", "136f5b5a": "ordersCanMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", "136fa2d7": "rateSeedStage()", "1370128e": "free()", +"1370c980": "createBatchForProduct(address,bytes32,bytes32,address)", "13711a31": "presale_allocation()", +"13712c9f": "swapTokenToToken(address,address,uint256)", "13714545": "GATEL()", "137157c0": "changeBlock(bool)", +"1371b2bd": "swapBLOT(address,address,uint256)", "1371dab9": "whitelisters(address)", +"13721dbd": "_removeLoanOrder(bytes32,address)", "13730838": "getCanvasPainters(uint32)", "13734a9f": "setClaimDividendPercentage(uint256)", "13737db2": "TiValueToken()", +"1373a94a": "uni_()", "13740cf3": "isTrigger()", "13748a40": "Withdraw_2()", "1374b22d": "proposalExists(uint256)", +"1374dbe9": "findEligibleRef(address,uint256)", +"1374df0b": "padding()", "1374eb6f": "getLockByIndex(address,uint256)", "1375111e": "returnrandom()", "13754f9a": "notUpgradableInStore()", +"13757c74": "modifySigningRights(address,bool)", +"137588f2": "skinColor()", +"1375923e": "withdrawMTCallback(address,uint256,uint256)", +"13760897": "approve_176(address,uint256)", +"13761243": "C5(bytes)", "13765838": "deposit(uint64)", "13767204": "AirDropRedeemAFTK()", +"1376e95d": "govMarketWhitelist(address,uint256)", "1376f2ce": "setCrowdsaleStartDate(uint32)", "137759df": "ammendReceivedLand(uint256,uint256)", "13776ba1": "buyPLATCards(address,uint256,uint256,uint256)", "1377900b": "PreICODayOneCents()", +"137791f8": "executeCompoundRedeem()", "1377ae65": "_getEarnings(address,address,uint256,uint256,uint256)", +"1377ebb7": "loyaltyTranches(uint256)", +"137817e5": "UnsoldTokensAllocationEvent(address,uint256)", "13788651": "test_oneValidEqBytesNoLog()", "137935d5": "totalGuaranteedCollected()", "1379c6e0": "getICOEndDate()", +"137a0365": "libraryIndexToFounder(uint256)", "137a1464": "ifEmergencyStop()", "137a3fa7": "transferPayment(uint256,address)", +"137a40df": "getAddressStr(uint256)", +"137b2954": "tokensForTokenSale()", "137b3bcd": "getBounsByAmount(uint256,uint256)", +"137b4203": "getCurrentStage(address)", "137b763d": "SetReferrer(address,address)", "137b8721": "getTierWhitelist(address,bytes32,uint256)", "137baa2a": "BigToken()", +"137bde4d": "tokentoCollateral(address,uint256)", +"137be33e": "updateLockForMonths(uint8)", +"137bf939": "mock_deposit_eth(uint256)", "137c1feb": "buyCommonTTMByETH(uint256,address)", "137c638b": "getExtraGas()", +"137cb58e": "getEndAt(address)", "137ce088": "TokenReserveMinted(uint256)", "137ce8e3": "HARD_CAP_USD()", +"137d35e9": "areaPrice(uint8,uint8,uint8,uint8)", "137d7026": "abiEncode(bytes,bytes,address[])", "137db23c": "updateWhitelist(address,address,bool)", +"137df7e3": "MAX_INDIVIDUAL_CAP()", +"137e1ba8": "cardShieldUpgradeLevel(uint256)", +"137e2377": "currentVotingStartBlock()", "137e37d9": "accountGet(address)", +"137e7116": "lastReapingTimeStamp()", +"137ee36e": "pendingReward()", +"138002e6": "donorChanges(string,bool)", "13801995": "getHopefulId(address)", +"13814ca4": "getRequiredCollateralByParams(bytes32,uint256)", +"13814e9e": "fetchUserInBundle(uint256)", +"13814edd": "view_account_balance(uint256)", "13819313": "OTTToken()", +"1381ba4d": "setExecutionManager(address)", +"1381bc9f": "getQueryPrice(uint256,uint256)", "1381e400": "cancel(uint32)", "13823365": "setOneTokenInWei(uint256)", "13827950": "getShareholderDB()", "1382a652": "isTrustedShop(address)", +"1382d8c2": "tokenV2()", "1382e75e": "addUser(uint256,string,string,uint256)", "13831693": "getLevitatingUnicorns(bytes32,uint64)", +"138387a4": "forceInclusionPeriodBlocks()", +"1383e891": "setswapaddress(address)", "13844e60": "totalOVCSold()", "13845d2f": "creation()", "138495de": "SimpleToken(string,string,uint256,uint256)", "1384dc12": "endTx(uint256,uint256,uint256)", +"1384dc1d": "DoExchange(uint256)", +"1384f359": "avatarsMinted()", +"1384f9be": "fillOrder(address)", "1385053e": "FlyCareTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,uint64[5])", +"13852f3c": "setHarvesterReward(uint256)", +"13853dff": "DetachRequest(address,uint256,uint256)", +"13854285": "updateLockTime(address,uint256)", "1385625d": "MintTimelocked(address,uint256)", +"13856431": "releaTeamAddBonus()", "13857c1a": "foundersFundMultiplier()", +"13858845": "setMaximumPurchase(uint256)", "13859f46": "_metadata(uint256)", +"1385a6f2": "vendor()", "1385d24c": "toggleContractActive()", "138665ff": "testJoin()", "13869333": "RealityCheck()", @@ -11217,85 +20450,146 @@ "138716e8": "root_domain()", "13872f8d": "test_againstFor()", "13877deb": "FBLFund()", +"1387c4fd": "getDeposited()", "1387c80b": "test_invalidRuleChange()", +"1387e5cc": "isStateChangeApprovedContract(address)", +"1387f310": "retrieveInfo(uint256)", +"1387fbab": "getTotalSubscriptions()", "1388483d": "BLING()", "13887592": "multilocked()", "13888565": "surplus()", "13889727": "setHeroName(uint16,string)", +"138966ed": "changeReward(uint256,address)", "138a7084": "_4_owner()", "138a886e": "testGetTransactionDetails(bytes)", "138acb80": "View_MediatedTransaction_Info(uint256)", "138b3ab1": "numPlots()", "138b806c": "addMultipleAddresseseToWhitelist(address[])", +"138ba7e1": "isxwinFund(address)", "138bdf1b": "simpleTest(address)", +"138c0a9e": "calculateDividendsByBundle(uint256)", +"138c2709": "_1Token()", "138cc941": "testErrorTransferToRejectAuthority()", +"138d194c": "accessList()", +"138dbc84": "Transfer(address,uint256,address)", "138e2317": "IcoTokenMock(address)", "138e8da1": "getIncreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", "138efd00": "_createTot(string,address,uint256)", +"138f251c": "getMeasurementFee(address)", +"138fbe71": "depositsBalance()", "139020d1": "deedByIndex(uint256)", "13902e9f": "initBonusPeriod(uint256,uint256,uint256,uint256)", +"13904e08": "setGovAddr(address)", "13905905": "addWhiteListedAddressesInBatch(address[])", "13907d22": "abrirDoacoes()", "1390b247": "getNbSellOrder()", "1390df6c": "oldXPAAssets()", "1391697d": "weiRound1()", "13916c2e": "bidOnCraftAuction(uint256,uint256)", +"1391abc7": "liquidityToken(address)", "1391c5f8": "EnddateICO()", "1391fd60": "raised(address)", "1391ff43": "fetchVoteInfoForVoter(address)", +"13927127": "priceAlgoBuy(uint256)", +"13928082": "removeLiquidity(address,uint256,uint256,uint256,uint256)", "1392c495": "updateItemPrice(bytes32,uint256)", "13930cf6": "setCurrentVersion(string)", "13932337": "highTimeBonusLimit()", +"13936c0a": "mintWithTokenURI(uint256,address,uint256,string)", "13943033": "RBOC()", "1394f216": "addProjectManager(address)", +"13950334": "callThisEvent()", +"13954647": "allowAndCallDelegated(address,uint256,bytes,address,uint8,bytes32,bytes32)", +"1395824e": "Bid(address,uint32)", +"13964055": "updateUserTotal(address,uint256,uint256)", "139654e0": "window2StartTime()", +"13965ad4": "approve_471(address,uint256)", "13966db5": "mintFee()", +"13966de4": "updateOnFlyMintedAmount(uint256,bool)", +"1396a254": "transferTokenProportionToOrigin(address,uint256,uint256)", +"1396a58a": "stakedTerm(address)", +"1396bac7": "commitBlock(uint256)", +"1396f857": "transferToNative(bytes32,uint256)", "1397d7ae": "setPI_edit_24(string)", "1397fdbd": "getShares(address,bytes,int256[])", "139818a1": "setFrozen(address,uint256)", +"13982e37": "INITIAL_AMOUNT()", +"1398a5f6": "getRequired()", "1398bbf7": "getRanking()", "1398e076": "lotteries(uint256)", "139949fa": "sAssert(bool)", +"13996532": "gaspriceMax()", +"1399ab08": "topThreeKudoers()", "1399cc5b": "UWC()", +"1399e363": "getAllUnverifiedDocuments(string)", +"139a5628": "inFYDai(bytes32,uint256,uint256)", "139a667a": "_calcNextPrice(uint256)", "139b3752": "_batch1_rate()", +"139c0977": "boardSpot(uint256)", +"139c259d": "withdrawHSUFromPool()", "139c7048": "generateTokenAmount(uint256)", "139ccd1e": "stopCollectSignatures()", "139cd9d3": "drawnTokens(address,uint256,uint256)", +"139cea1c": "getBuildingName(uint256)", +"139cfab1": "tournaments(bytes32)", +"139d6289": "setIntercoinAddress(address)", "139ddefe": "ProposeProposal(bytes32,bytes32,uint256,uint256,uint256)", "139df200": "getAllMarketsInfo()", "139e23b5": "getDividendInfo()", +"139e3132": "_assertNewOperatorShare(bytes32,uint32,uint32)", "139f1838": "NoBonustimer()", "13a070b7": "add_admin(address)", "13a0c990": "BearTrap()", +"13a0e1fb": "CT_swap_ETH(uint256)", "13a110b4": "getMin(uint64[])", "13a19e1b": "initialCoach(uint256,uint256,uint8,uint256)", "13a1da40": "tgrSettingsMinimalContribution()", +"13a1e9fb": "breakCard(uint256)", "13a22af9": "latest_buy_time()", "13a24744": "BurnupGameAccessControl()", "13a2852d": "setICOEndTime(uint256)", "13a30010": "refund2(address)", "13a396d8": "getRequiredDeposit(bytes)", "13a3d9a1": "registerDocument(string,string,string)", +"13a401c2": "getRedeemFees()", "13a460b7": "tourisToken()", "13a46425": "getNumberOfDisputedStepsProDoctor()", "13a46827": "fund(address,address,uint256,uint256,uint256)", +"13a4a119": "updateReferralInfos(address,address,uint256,uint256,uint256,uint256)", "13a4b3bc": "OwnershipRequested(address,address)", +"13a4d9e9": "setInviterXAddr(address)", +"13a4de85": "softCapTokenPerEth()", "13a4fd37": "soldTokensIco()", "13a517bf": "eighthTeamWithdrawal()", +"13a55fd2": "adminWithdrawLBD(address,uint256)", +"13a567e4": "getDappHandled()", "13a5aac7": "paymentRegularTokensPriority(uint256,uint256)", "13a5d9e4": "remaingNTRY()", "13a666a6": "hasReachedSoftCap()", +"13a671eb": "addAutoPool(uint256,uint256,uint256)", "13a7070f": "withdrawDeveloperCut()", +"13a73ee6": "_rule()", +"13a76c4c": "depositEth(bytes)", +"13a7e54e": "changeFee(uint8,uint256)", "13a7f56e": "internalAllocate(address,uint256)", +"13a82df5": "buyTicketTen()", +"13a86924": "doHardWork(address,uint256,uint256,uint256)", "13a8a080": "TokenDemo(uint256,address,address,address,address)", +"13a8be9d": "rewardUpdateOfInAction(address,uint256)", +"13a8d186": "setMinVoterBSCSBalance(uint256)", "13a91cc8": "getVlsTokenAddress()", "13a927c7": "toggleMatchStartEnd(uint256,uint256)", "13a92f02": "frozenAccountForLogic(address)", "13a931dc": "gasForOraclizedQuery()", "13a9589c": "getSalt()", +"13a96a18": "allowedCover(address,uint256)", +"13a97b85": "setRoundDuringTime(uint256,uint256,uint256)", +"13a99dc0": "disableFeeAccountChange()", "13a9cd8d": "lastDETCWC()", +"13a9e381": "getForwarderAddresses()", +"13a9fd3b": "ListOfProjects(uint256)", "13aa48bf": "minePepe(uint256,address)", +"13aa7090": "Referral(address,uint256,address)", "13aa7b6f": "viewUnclaimedDepositDividends()", "13aa8133": "resolveChallenge(uint256,bytes32)", "13abdd75": "ecosystemSupply()", @@ -11303,25 +20597,39 @@ "13ac58bb": "increaseCredits(string,uint256,uint8,address)", "13acb45b": "calcDoubleBindedBlindHash3(string,address,address)", "13ad41d8": "getSkill(uint32)", +"13ad7a7c": "DiscipleVendToBidder(uint256)", "13ad9ce1": "getRepMarketCapInAttoeth()", "13adc129": "MIGG()", "13ae4522": "token3MstepCAP()", "13ae457d": "mainCapInUSD()", +"13aecab1": "virtualTotalSupply()", "13af4035": "setOwner(address)", "13afa97a": "readMarketplaceConfigs()", +"13b0cc39": "mint(uint256,uint256[],uint256)", +"13b0e0f8": "addCalculator(address,uint256)", "13b15b24": "setRoundGap(uint256)", "13b18640": "participate(uint256,address)", +"13b1afce": "monthlyRewards(address,uint256)", +"13b1b6f7": "noOfBuyer()", +"13b1cae4": "getStakedBMI(address)", "13b222ba": "getMyPoohs()", "13b2663b": "cash_received(string)", "13b2807e": "setCampaignEndPointById(bytes32,string,int256)", +"13b2c5f3": "getGradeValue(uint256)", "13b2e657": "unfreezeAccount(uint256)", +"13b37577": "platformVolumeUsedInETH(address)", +"13b377d4": "RemoveTrusted(address)", "13b37a83": "getRandomUuid()", "13b39b9c": "approveMint(address,uint256)", "13b3cd91": "collectForREQBurning(uint256)", "13b3cdf6": "ownersLUT(uint256)", "13b3fffc": "updateChannelManagerContract(address,string)", "13b4312f": "transferCollectedFees(string,address,uint256,bytes)", +"13b4590e": "Mint(address,uint256,bytes)", +"13b46ae1": "PlayerWithdraw(address,uint256)", "13b499ce": "PRE_ICO_TIER_FIRST()", +"13b4a72b": "INFLATE_ROLE()", +"13b4d186": "recipientUpdates(bytes32,uint256)", "13b53153": "isFunding()", "13b57686": "self_last_result()", "13b5a19e": "GBPsToken()", @@ -11332,25 +20640,50 @@ "13b7423a": "setFundraiserCallData(string)", "13b796f4": "getMilestoneTimeAndRate(uint256)", "13b84004": "gameTokenAmount(address)", +"13b857b4": "setSlip(uint256)", +"13b882af": "contractSwitch()", +"13b8ad31": "membersList(uint256)", "13b96a9e": "numOfSamples()", +"13b9f0c7": "setOwnerMain()", "13ba350a": "Whales_group()", "13bac8f2": "updateStorage(string,string)", +"13baec32": "calcDaiAmount(bool,uint256,uint256,uint256)", "13baf1e6": "removeToken(address,uint256)", "13bb7b0d": "PreICO(address,uint256,address)", "13bbae9b": "addProxyManager(address)", +"13bbe5b9": "transferFromStake(address,address,uint256)", +"13bc2635": "is_address_exist(address)", "13bc33ca": "CryptonHotels()", "13bc4bda": "operatorSendTo(address,address,uint256,bytes,bytes)", +"13bc6d4b": "isSystemContract(address)", +"13bc9f20": "isOperationReady(bytes32)", "13bd05e4": "silo_addr()", +"13bd06b4": "addTeamContract(address,uint24)", +"13bd4b3d": "rewardDistribution_v1(address)", +"13bd4b95": "devFundMax()", "13bd4e2c": "_prepareAndSendReward()", +"13bd5010": "exploit(address,uint256)", "13bd53e6": "applySettings(uint8,uint256,uint256,uint256,uint256)", "13bd9e3c": "fundFoundation()", +"13bda5a1": "resultVotes(address)", +"13bdb6e3": "getUserPreETHPropotion(address)", "13bdbb19": "getCustomer(address,address)", +"13bdd91c": "_gameon()", +"13bdeab2": "assemblIndexToOwner(uint256)", "13bdfacd": "print()", "13be31ae": "preSaleDeposit()", +"13be377d": "REVPOP_COMPANY_PERIODS()", +"13be54ff": "chainlinkBridge()", +"13be61c7": "acceptanceAmount(string,address,uint256)", +"13befbb9": "getPairs(address)", +"13bf83c5": "timeToFinish()", "13bfabf0": "isCurrentOrPastAccountReader(address)", +"13bfc709": "getSystemInvestInfo(uint256)", "13bfcd2c": "growthContract()", +"13c01368": "contractAddress(uint256)", "13c03159": "payPlayers(uint256,uint256)", "13c04769": "submitBallot(bytes32,bytes32)", +"13c0a8e2": "updatingStakingRewardLP(address)", "13c10e44": "attackerExpAdjustment()", "13c13d6b": "updateMarketContract(address)", "13c1629c": "_getBlockIndexAtYear(uint256,uint256,uint256)", @@ -11358,130 +20691,271 @@ "13c25ba6": "subtr(uint256,uint256)", "13c2beff": "processWithdrawalForAccount(address)", "13c32148": "_computeFee(uint256)", +"13c33384": "changeActiveStatus()", +"13c38d1c": "ubu()", "13c3922f": "Aborted(address)", +"13c3dc34": "winnersETH(uint256)", "13c42ca1": "getPrice(bytes1)", +"13c461eb": "OwnerWithdraw(address,uint256)", +"13c477de": "excludedBalanceRebalance(uint256,address)", "13c4f953": "getTime(address,address)", "13c52111": "amountOfTokens()", +"13c5314e": "hatchingDuration()", "13c58cbb": "countNoClients()", +"13c5c8cf": "totalBondRedeemable()", +"13c5cd0f": "mintERC777FromL1(address,address,address,uint256,uint8,bytes)", +"13c5dbad": "dollarAddress()", +"13c60177": "sourceCode()", "13c667d1": "calculateAmountBoughtICO(uint256,uint256)", "13c68344": "Verto()", "13c709d4": "transferToGame(address,address)", +"13c71d01": "safePlugExitStrategy(uint256)", +"13c72608": "getExpiry(uint256)", +"13c738a1": "setDELTAToken(address,bool)", +"13c755c6": "withdrawBidForHat(uint256)", +"13c7569e": "playBigOrSmall(uint8,uint256)", "13c7db1a": "limitOfBranch()", +"13c7f2ee": "enablesDeactivation()", "13c82b0b": "setIsForkingMarketFinalized(bool)", "13c89a8f": "getAllowedTime(bytes32)", "13c8a376": "recovered(uint256)", "13c8e60d": "getCurrentDebt(uint256)", +"13c90b25": "DS_PAUSE_TYPE()", "13c9134b": "setcoinfee(uint256)", +"13c9e8f5": "freePusher(address,string,uint256,bool)", "13ca1464": "getDHandRank(uint32)", "13ca18ac": "WatermelonBlockToken(address,address,address)", +"13ca42e8": "fragmentsToShares(uint256)", "13ca43a0": "teamWallet1()", +"13ca6e32": "superPlayers_(uint256)", +"13ca6ec3": "collectMilestonePayment(uint256)", +"13cadbb8": "deleteChannel(address,address)", +"13cc02af": "token1amount()", "13cc22ea": "createController(address)", +"13cc4d54": "doesContractExist(address)", +"13cc555c": "YongHengAddress()", +"13cc55e4": "repayDebtAndFreeTokenCollateral(address,address,address,uint256,uint256,uint256)", +"13cc91e5": "NewWayfarer(address)", +"13cc986f": "closeBidding(uint256,address,uint256)", "13ccca96": "limitbreak_RELEASE()", "13cceb21": "getHolderWithdrawIndex()", "13cd528a": "miadd(uint64,uint64)", "13ce15a9": "left67(uint256)", +"13ce19e3": "preview(address,uint256)", "13ce401b": "getPlayerRecommond(address)", "13ceb89b": "getCopaMarketAddress()", +"13ceedb7": "pong(uint256)", +"13cf5efd": "mintCard(address,address,uint256)", +"13cf9e8f": "pendingClaim()", "13cfed7f": "deposits_until_jackpot()", "13d033c0": "cliff()", +"13d0386f": "oneRouterView()", "13d073d0": "Sign(uint256,address,uint256,uint8,uint256,string)", +"13d0c71c": "zion()", +"13d101d7": "executeSwap(address[],string[],uint256,uint256[])", +"13d13125": "BinancePunksMarket()", +"13d14bb3": "setOTable(uint256[])", "13d19950": "stringsEqual(string,string)", "13d1aa2e": "f(uint256,uint256)", "13d1bdfb": "priceForMateAdvertisement()", +"13d1e350": "underlyingStablecoinToYToken(address)", +"13d21b01": "getItemFromBlockchain(uint256)", +"13d21cdf": "getPoolData(address)", +"13d23b66": "Withdrawal(uint256,address,uint256,uint256)", +"13d302f7": "tokenLockedAddresses(address)", +"13d3e0e3": "spinSlot(uint256)", "13d40e71": "RefundableCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"13d41640": "GST2_TOKEN()", +"13d444b8": "copiesSpecialNFT()", +"13d47a8d": "setEntitledRebatePerReserveType(bool,bool,bool,bool,bool,bool)", "13d4bc24": "buyTokenProxy(address)", "13d4c63a": "_purchaseWhaleCard()", +"13d5328f": "abondGain()", "13d53ca9": "check(bytes32,uint256,uint256,uint256)", "13d5469d": "periodICOStage7()", "13d557bc": "operatorRedeemByPartition(bytes32,address,uint256,bytes,bytes)", "13d567ca": "isApprovedTAAddress(address)", "13d59ca9": "upgradeAddr()", "13d5d4fe": "test_insert_findWithHintNextRemoved()", +"13d5d8be": "ethToTransfer()", +"13d5e846": "redeemableCounter()", "13d5ee74": "accPartner()", +"13d5ef98": "queuedContracts(address)", "13d5f1fe": "durationOfStatusSell()", +"13d61c8a": "oracle_prev()", "13d65cd9": "test_34_assertGasUsage700Boards()", +"13d6f493": "setAllowedStrategies(bool,bool)", +"13d71f6e": "claimPauser()", "13d73a08": "AMOUNTWAGERED()", "13d769de": "auctionCreated(uint256,uint256,uint256)", +"13d7c324": "AIRDROP_Mint1(address)", "13d8867c": "mint(string,uint256,string,uint8,string)", "13d8c840": "tail()", +"13d8f3e4": "trades(address,uint256)", +"13d8fdbc": "forceD(uint256)", "13d9028b": "Remain_burn(uint256)", +"13d98d13": "deposit(address,bytes32,bytes)", +"13da30b2": "enableStaticCall(address,bytes4)", +"13db3868": "removeDynFix(uint256,uint256)", +"13db8825": "transferOperatership(address)", "13dc01bb": "BKBK()", +"13dc0ce8": "userUnlocksAmount(address,uint256)", +"13dc989f": "SWORD()", +"13dcc452": "fundsDeposit()", "13dce04f": "updateRoutingPreference(string,string)", +"13dcf555": "PresaleCapSupply()", "13dcfa08": "AmountClaimed(address,uint256)", +"13dd0989": "unclaimedTokensWithdraw(address)", +"13dd2eb8": "UserProdMap(address,uint256)", +"13dd39b1": "initializeCryptoAvatars()", +"13dd7dcf": "grantCredits()", "13ddb69a": "CROWDSALE_START()", "13ddd3ae": "getTokePerWei()", "13ddecd5": "withdrawICOReserve()", "13de214e": "minimalSuccessUSDWEI()", +"13de4b0b": "_totalBids()", "13debf7c": "_getPersonalAirdropAmount(address,address)", "13defbd9": "getMyCrabs()", "13df20fd": "createTimeBasedVesting(address,uint256)", "13df35d1": "publicTGEStartBlockTimeStamp()", +"13df55cf": "Commission(uint256,uint256)", +"13df6ccd": "getStuckEth()", "13df7091": "mintAll(int256)", "13e003dd": "ASStoken(string,string,uint8,uint256,uint256)", +"13e026f9": "estimateSwap(uint256,uint256,uint256)", +"13e02842": "nameToIds(string,uint256)", +"13e083a9": "hashRateDecimals()", "13e0e70d": "ownerRegistry(address)", +"13e10fe7": "newDoc(bytes32,address)", "13e1d1d2": "multiCancelVoteForCandidate(address[],uint256[])", +"13e1e78d": "setPOOL(uint256)", "13e1f2b0": "DATToken(address)", +"13e2222a": "totalFrozenToken()", +"13e23e41": "receivedLoanOf(address)", "13e26d58": "minRequired()", "13e28415": "ownerSetMarginRatio()", "13e2cae1": "revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", "13e2dfc1": "depositDividend(uint256)", "13e3151b": "MyEPPToken()", +"13e32ef5": "setIncentivizedCooldownPeriod(uint256)", "13e33fb6": "calculateBonus(uint96)", +"13e3a4bc": "totalGooProductionSnapshots(uint256)", +"13e3dcf2": "claimFinalized(uint256,uint256[])", +"13e3fb9e": "epochMaxSupply(uint256)", +"13e4172c": "maxAllowedTotalSupply()", "13e41971": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "13e468b3": "getVotingToChangeProxy()", "13e4b51f": "putHash()", +"13e4d00e": "OfferAdd(uint256,uint256,uint256)", "13e50ca4": "totalFiatValue()", +"13e5471a": "_shipMetalPrice()", "13e5a3b1": "SetUp(uint256,address)", "13e5d8b6": "icoStartsAt()", "13e5e26e": "recirculateLateFees(uint256)", "13e60074": "OwnerRetireHodl(uint256)", +"13e66ceb": "timePooled_Stake(address)", "13e7323e": "fundingEnd()", +"13e73e51": "withdrawIntitate(uint256)", "13e75206": "getParentOf(uint256)", "13e7a234": "getAccessor(bytes32,uint256)", +"13e7c9d8": "operators(address)", "13e7d076": "STERNIUMHUGEELLIGENCECOIN()", "13e81119": "purchaseTicketsWithReferral(uint256[],uint256)", "13e8360d": "commissionerAuctionComplete(uint32,uint128)", "13e8e5d2": "address2a()", "13e8e74b": "IexecHub()", "13e8fdea": "TxExecuted(uint32)", +"13ea5d29": "setMaintainer(address)", +"13eaa296": "withdrawReservedBNB(address,uint256)", +"13eaabb8": "bonusAddr()", +"13eac132": "LogBountyUserMultiple(uint256)", +"13eac83e": "oneSwap(address,address,uint256,uint256[])", +"13ead562": "createAndInitializePoolIfNecessary(address,address,uint24,uint160)", +"13eb6c88": "EPOCH_REWARD()", +"13ec2428": "drainBalance()", +"13eca8db": "su(uint256)", +"13ecb1ca": "working_balances(address)", "13ecfbfa": "lastBuyer()", "13ed0846": "calculateReward(uint256,uint256)", "13ed5f31": "getTransactionConfirmerInfo(uint256,address,address)", +"13ed6165": "calcSignatureHash(uint256,bytes32)", "13ee4bc5": "pay(bytes32,address[],uint256[])", +"13ef395c": "totalMines()", +"13efb074": "getuserDataName(address)", "13f06abc": "balanceFrozenTokens(address)", "13f07317": "enableStaticLogic(address)", "13f0790c": "tokensSoldWithBonus()", "13f07f6f": "Object()", "13f0ec1f": "withdrawDekla(uint256,bytes)", +"13f19926": "buyItem(string)", +"13f1998c": "pendingPorn(uint256,address)", "13f20d76": "fundDigitalMarket()", "13f233c2": "ethReceiveMainSale()", "13f25eb6": "NinjaToken(address,address)", +"13f263b6": "originalJOYOwner(uint256)", "13f29768": "addUnsoldAllocationOrder(bytes32)", +"13f39083": "convertRewardFees(address,address,uint256[],uint256[])", "13f4318e": "SetSubscriptionTo(address,int256)", +"13f43a57": "minAmountToSwap()", "13f44d10": "isAddressWhitelisted(address)", "13f46d3e": "SponBToken(address,uint256)", +"13f47357": "fundHistory(uint256)", "13f47f24": "lockedDelegatingTokens(address)", +"13f48af6": "approves(address[],address[],uint256[])", +"13f4a0ea": "getWhitelist(address,address)", "13f4b42c": "pixelsPerCell()", "13f4c7a5": "INVESTOR_LOCK_DURATION()", "13f4e977": "minimumFundingGoal()", "13f52533": "capitalLedger()", +"13f55e39": "transferExternalERC20(address,address,uint256)", "13f56f73": "changeMinInvestment(uint256)", +"13f57c3e": "update(bytes32,bytes32)", +"13f59381": "Deliver(address,uint256,string)", +"13f5e4f6": "getSamuraiWallet(uint256)", "13f5ef00": "Main(string,bytes)", +"13f60dd2": "CommissionUpdated(uint256)", +"13f6321b": "killFactor(address,uint256)", "13f652fe": "getText(string)", +"13f6686d": "claimer(address)", +"13f66b9c": "openStrainzTrade(uint256,uint256)", +"13f6a252": "sharesOfDown(uint256,address)", "13f6ee53": "cliffAdvisorsTokens()", "13f73570": "manualyAddReferralPayer(address,address,uint256)", +"13f7c893": "f2(uint256,uint256,uint256,uint256)", +"13f7cea1": "_setEnableDistributeMintWpc(bool)", +"13f7ee52": "manualBuybackReserve()", +"13f8522c": "BetStructs(uint256)", +"13f8bf67": "AAVE_ORACLE()", +"13f8c578": "addAuthKey(address)", +"13f8cc4a": "disableDapp(bool)", "13f94a43": "getSiteTokenIds(uint256)", +"13f95dfc": "crytic_failing_test_must_revert()", +"13f995ec": "zuniTreasury()", +"13f9cca2": "updateStabilityFee(uint256)", "13f9cf76": "disableBundlingMultitoken(uint256)", +"13f9e601": "DToken(uint256)", "13fa095f": "setDestinationWallet(address)", +"13fa1368": "reward_integral_for(address)", +"13fa675f": "SetClaimFee(uint256)", "13fac256": "xem()", "13faede6": "cost()", "13fb2324": "EndEvent()", +"13fb976f": "setAllowanceOne(address,address)", +"13fbc444": "P2_REWARD_PERCENTAGE()", +"13fc29d6": "payBackCollateral(uint256)", "13fc5ace": "depositForMySelf(uint256)", "13fc6ac2": "getEventData(bytes32)", "13fcaf54": "getDepositCount(address)", +"13fcf24d": "IMPOSS08()", +"13fd3c56": "adminFeesWithdrawable()", "13fdcbec": "developer_Coin_Character(string)", "13fdd2b4": "TilexSupply()", "13fe2de0": "releaseLockedFund(address,uint256)", +"13fe8ce4": "secondPartyActiveBetsIndexes(address,uint256)", +"13feefc2": "wallets(bytes32)", +"13fef03e": "SingleWithdrawToken(address,address,uint256,uint256,uint256)", +"13ff271b": "lostMoney(address,uint256)", +"13ff2eac": "MessageExchangeStaStb(address,uint256,uint256)", "13ff962a": "privatesaleSupply()", "13ffdbfc": "gameCountOf(address)", "13fff718": "doBet()", @@ -11490,149 +20964,271 @@ "14007c6d": "nextState()", "1400d1e4": "checkName(string)", "14012549": "isMainSaleTime()", +"140131da": "refPayout()", +"1401ad89": "createArtifact(uint256,address,uint256,uint256,uint256,uint8,uint8)", "14025dcd": "cancelFee()", +"140271ac": "verifyWithdrawSignature(address,address,bytes)", "14029756": "setaddress(address)", "1402c310": "NEWSOKUCOIN()", "1402f031": "triggerAttackManually(uint32)", "1402f80d": "selectTemplate(uint8)", "1403041b": "PegasusToken()", +"14035bce": "leverageFromCoverage(uint256)", "14036f62": "Vboom()", +"14037068": "premint(address)", "1403835f": "_isExpired(uint256)", +"1403a131": "getAccessors()", "140420a9": "isRateValid(uint256)", +"140459bf": "countAthlete(uint256)", +"14052288": "future_A_time()", "140529c2": "YCoin()", "140575af": "LogTokenPriceChange(uint256,string)", +"14059075": "test_allowance_withAllocatedBalance()", "140604cc": "getInitialState(uint256)", "14061862": "setIcoMin(uint256)", +"14066c7c": "_saleEndTime()", "14069b12": "MXMPDMToken()", "1406b921": "vent()", "1406d3be": "lowestGameWithoutQuorum()", +"1406dfc1": "showVersion()", +"1406f612": "take4Team()", +"1407264b": "changeAuthQuoteEngine(address)", "14074135": "dividendsRightsOf(address)", "140758a9": "disableServiceProvider(address,bytes)", +"1407c664": "_periodFinish()", +"1407df4b": "mintHistories(uint256)", +"1407e8c4": "balanceOfRewards(address)", "1408073e": "GangnamToken()", "14081570": "addEpisode(string,uint256)", "14081e39": "setEscrowFee(uint256)", +"140828d3": "SetRebuyThreshold(uint256,uint256)", "14082cd2": "findProductById(uint256)", +"14083532": "depositVoteTokens(uint256)", +"1408910a": "registerBuyer(string,string,string)", +"1408f345": "getInt16(int16)", "1409b88f": "getManualByAddress(address)", "140a681a": "_getVersion()", "140a7ac6": "getFinalScore(int256[])", +"140a84db": "AuthorizedAddressMismatchError(address,address)", "140ad293": "spitnetwork()", "140aee46": "_0xDogecoinToken()", +"140af9de": "_contributeToken(uint256)", +"140aff6c": "USEaddr()", "140b1706": "maxHLPMTMarkup()", "140b2cdd": "calculateMyRewardDecreased(uint256,uint256)", "140b4465": "executeSpendingRequests()", +"140c1ca1": "FundTransfer(uint256)", +"140c6bd2": "IsValidMember(address)", "140cc562": "isCollectSignatureCorrect(address,address,uint256,bytes32,bytes32,uint8)", "140cd7af": "issueToken(address,address,uint256,uint256,uint256)", +"140d188d": "onPurchase(address,uint256,uint256,uint256,uint256)", "140d3e95": "changeFiatFeeContract(address)", +"140d9c9f": "ASSETS_KEY()", "140da6b7": "getAddressField1()", "140dcec4": "right23(uint256)", +"140e9d62": "cEtherContract()", +"140eb9f8": "SetPause(bool)", "140f64b4": "GoyanToken()", "140f7f8d": "Staged()", +"140fba75": "getDeveloperUrl(address)", "14102159": "presaleLimit(address)", +"14102eb0": "updateVenusFactors()", "14106b49": "JustifyClaim(address)", "14107f3c": "buy(uint8)", +"1410c18b": "unimex_factory()", "14111a43": "isValidService(bytes32)", +"1411387a": "SlotsResult(uint256,address,uint256,uint256,uint256,uint256,uint256[])", "1411539d": "multiSend(address[],uint256[],address[])", "14116c3c": "SetPeriodPreITO_startTime(uint256)", "14117228": "getNoteKeyByIndex(uint256)", "1411d713": "licenseIssuedTime(uint256)", +"1411dab0": "setYieldRate(uint256)", "1412409a": "whitelistSetterAddress()", +"14127a3b": "retrieveToken(address)", "14127f13": "setOrderFill_(bytes32,uint256)", "141283f1": "setNewWallets(address,address)", "14131611": "setChibiForFusion(uint256,uint256)", +"14132d3f": "addDestList(address[])", "14133a7c": "setSaleAgent(address)", +"14135a26": "claimProfitFromMarkets(uint64,uint256,uint8,bytes32,bytes32,uint256,uint8,bytes32,bytes32)", "14139904": "directorB()", +"1413dc7d": "CUBE_COUNTER_KEY()", +"141432a9": "initialize(string,string,uint256,address,address,address,address,address)", "14143c91": "TotalSpecialFeeTakes()", "1414a506": "falangiToken()", "1414ef78": "createInvoice(uint256)", +"14151f7f": "calDynamicProfit(uint256,uint256)", +"1415be01": "crowdsaleWeiAvailableLevels(uint256)", "14162e8d": "IouRootsReservationToken(string,string,uint8)", "14163a83": "setCrowdsaleContractAddress(address)", +"14165aed": "getReferrerId(uint256)", "14167bf0": "oraclize_query(string,string[])", "1416a6eb": "ROMAKELAPA()", "14174f33": "withDraw(uint256)", "14177dbf": "setLockTokensAddress(address)", +"14178dda": "tokenToTrxTransferOutput(uint256,uint256,uint256,address)", "14179865": "logos(uint256)", "1417b946": "adminOwner()", "1417c845": "Mortal()", +"1417cef8": "setApproval(address,uint256)", +"141806a5": "setProvnance(string)", +"141833dc": "ownerDeposit(uint256)", "14189a7e": "outstandingValue()", +"1418ceb7": "slateRequests(uint256)", "141926fa": "updateAccount(string)", "14193456": "MainSaleEnd(uint256)", "141961bc": "campaigns(uint256)", +"1419841d": "setUniswapV2Router(address)", +"14198ab4": "roll(address)", +"14198b2d": "getBNBStakingAddressById(uint256)", +"141993fa": "setModuleDeployer(address)", "1419c3f3": "grand_factory()", +"1419fc91": "ManoContractRegistered(address,bool)", +"141a2a3f": "PERCENTS_DAILY()", +"141a3cff": "checkinterests()", "141a8dd8": "approver()", +"141aa6c2": "getTodoed()", +"141ac951": "emergencyRemove(uint256)", +"141b2dc8": "getDocumentKey(address,uint256)", +"141b3073": "pullStables()", "141bd92a": "getBallotInfo(uint256)", "141c4306": "AbroToken()", "141c4e60": "challenge(uint256,address)", +"141c6b8f": "getFirstEscrowPosition()", +"141c7068": "completeAcquisition()", "141c9422": "listingDate()", "141ca2c7": "reservedIcoCrowdsale()", +"141cdd65": "p11()", "141d717b": "OC()", "141dbe66": "distributeBTCB(uint256,address[])", +"141ddca7": "TokenPrice()", +"141dfc18": "DisputeCreation(uint256,address)", "141e26a5": "setEditionMaxSales(uint8,uint256)", +"141ecf46": "applyRequestInChildChain(bool,uint256,address,bytes32,bytes)", "141edaa1": "manufacture(address,address,address)", "141f211c": "snapshotStakeAmount(uint256,address,address)", +"141f32ff": "callcodeSetN(address,uint256)", "141f6800": "fundingMinimumTargetInUsd()", +"141f710f": "cancelAllTransactions()", +"141fbf5b": "ResultSubmitted(uint256,uint256[])", "141fd3cf": "channelResultTimeout(uint64)", +"1420334a": "_sharesPerDEBASE()", +"14204816": "_minereum()", "14204ca9": "QZG001TOKEN()", +"14205e28": "getContractTokenBalance(address)", "1420765a": "isBuyLocked(address)", +"1420f669": "ComplianceSensorType()", "14211803": "hasBuyTotal()", +"14216eeb": "initiation()", "14219ff9": "sq(uint64)", "1421c1a4": "vote_for_candidate_C_for_free()", +"1421e44c": "setBaseAdminAddr(address)", +"1421f6b0": "setExchangeData(bytes)", "14225b9b": "token_ratio1()", +"1422d08d": "BSpare()", "1423113a": "fluxFeed(uint256,bool,bool)", "142359f4": "fillOrder(bytes32[],bytes32[])", "1423649b": "cofounderApproveSwitchRequest(address,bytes32)", "1423c40e": "setBudgetOfCampaign(bytes32,uint256)", +"14242b37": "getValidatorAddress(uint256)", +"14245ee1": "InvestStart()", "1424c182": "recordDeposit(uint256)", "14253887": "certify(address)", "1425d2fa": "getBalanceToken()", +"14261944": "_transactionID()", "14263f0c": "Dadice()", +"14269687": "reserveBalance(uint256)", "1427407f": "NINECOINTOKEN()", +"14274ad9": "poolRedeem(address,uint256)", "142769aa": "requestNumber(address,uint256,uint8)", "14279086": "getIndividualCount(uint32)", +"1427993b": "DomainConfigured(bytes32)", +"1427a693": "internalCall()", "1427f168": "log2Bounds(uint256)", +"1427fdb1": "getCirculatedSupply()", "14280bb8": "getBodyColorValue(uint256)", "14287a07": "playerPrizeClaim()", "1429a36b": "getOrCreateFeeWindowByMarketEndTime(uint256)", +"1429baba": "initialsupply()", "1429e26c": "User()", +"142a391e": "getIntValues(bytes32,bytes32[])", +"142ad6d6": "zTransferFundsToOtherContract(uint256)", "142b353d": "MultiTransferETH(address[],uint256[])", +"142b90ee": "_deleteHorseFromStud(uint256)", "142bc2ae": "latestData()", +"142c69b3": "withdrawFinalSettlement()", "142c99d2": "closingSettle(bytes32,address,uint256,address,uint256)", +"142c9ec1": "deleteTokne(address)", "142d239a": "canPurchaseAmount(address,uint256)", "142dc95d": "testAmount(uint256)", "142e0bdf": "LogAllocate(address,uint256,uint256)", "142e133f": "totalBalanceDown()", +"142e4db4": "ETHToToken(address)", "142e8e25": "setAdmin(uint256,address)", "142e9ab8": "setTrade(bool)", "142e9bc9": "weaponToOwner(uint256)", +"142ee8d8": "buyOrder(uint256,uint256)", "142f328e": "fundDao()", "142f53c2": "sendInitialTokens(address)", +"142fce0f": "totalWithdrawnDividendSingle(address)", +"14301341": "LogError(uint8,bytes32,bytes32)", +"14302387": "setAddressResolver(address)", "14307c48": "addHpbBallotAddress(address)", "143085c3": "updateRankBoard(uint256,uint256)", "1430990a": "bidTransfer(uint256,address,uint256)", +"1431006c": "main1ValidV2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1431023c": "_addReservesInternal(uint256)", +"143189bf": "authorizeChannels(address[])", "1431b23a": "getData(bytes)", "143211ec": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,uint256)", "14325458": "calculateTokensFrom(uint256,uint256)", "1432621a": "getPeakSupply()", +"1432c281": "claimDeposits()", +"1432e810": "setCollateralOracle(address,address)", "14332c93": "SetConfirmRound(uint32,uint8,bool)", +"143489d0": "proposalProposer(uint256)", +"1434bc5a": "getPoolReturn(address,address,address,uint256)", "14350c24": "changeMinimumMakerProtocolFee(uint256)", "143551e4": "timeExtension()", "143580d0": "PGDA()", "14359466": "NBTV()", +"1435cf82": "findBestBid(address,uint256)", "1435e397": "setAllocation(address,uint256,uint8)", "14361fd1": "singleWithdrawMin()", "14363e65": "setPeriod(uint256[])", "14367652": "revealStageActive(uint256)", +"14368088": "swapWallet(address)", +"1436ee18": "totalDepositSeconds()", +"1436f4c7": "setBlockNumberPerMonth(uint256)", "1436fb39": "_isVotingAddress(address)", "14371c33": "someMethod5(uint256,uint256,uint256)", "14373817": "rateSoft()", +"143765dd": "commitTimeStamp(address)", +"1437931a": "_unstake(uint256,uint256)", "1437f9a3": "Set_your_game_number(uint16)", +"143817bc": "getStringa()", "14386a74": "saleToggle(bool)", +"1438c211": "migrateAssetProxy(address,address,address[])", +"143964ae": "_declareFinishers()", "143a1a2f": "pilfer(uint256)", +"143ad356": "deposit(uint256[2])", +"143af907": "consecutiveWins(address)", +"143b8f27": "isVoteOpenForVoting(uint256)", +"143ba4f3": "distributeRewards(address[],uint256[])", "143bb3e6": "StartRollDice(uint32)", +"143c2830": "getAgreementSetById(uint256)", "143c56cf": "disprove()", "143c6d4f": "TokenTransferTo(address,uint256)", "143c7a3f": "OPAY()", +"143d4acf": "setMerchantStakingAddress(address)", +"143dd129": "getReceivedRequestCount()", +"143dde04": "cxesch(address)", +"143e3f5b": "testImpl()", "143e55e0": "era()", "143e6209": "setImagePartsCount(uint256,uint16)", +"143ee5b9": "vesting(address,uint256)", +"143ee5ed": "PROOF_WHITELISTED()", +"143f338c": "getMintersInfo()", "143f68c9": "getRedemptionBalance()", "143f9d1f": "week4Price()", "143fb46d": "setRemainingTokensWallet(address)", @@ -11644,43 +21240,76 @@ "144138c8": "removeGlobalConstraintPre(address,int256,address)", "1441a5a9": "referral()", "1441c288": "showUnpaidInterest(address)", +"1441d227": "actionFee()", "14423381": "GameConfig()", +"14423650": "setOracleProxy(address)", "144267e0": "refundSecurity(address,uint256,uint256)", "1442b548": "ZTST()", "14432f6e": "Received(address,address,uint256,uint256)", "144344b9": "setEth(uint256)", +"14434fa5": "minus()", +"144381c0": "updateApprovalsNeeded(uint256)", +"1444133a": "setKnowledgeBase(address)", "14442f54": "VERSION_NAME()", "14447e11": "checkGamesReadyForSpinning()", "14449c92": "finishRoundB()", +"14455d1b": "getBurnRatePerThousandth()", +"1445852a": "PrintingConfirmed(bytes32,address,uint256)", "14459309": "price_constant2()", +"1445c381": "_buybackTotal()", "1445c6da": "increasePosition(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", "1445f713": "hexstrToBytes(string)", "14462b93": "findWhichCTD(address)", +"144630dd": "burnUSDbToReleaseCollateral(address,uint256)", "14468d32": "nextBidExpireBlockLength()", +"1446a7ff": "getSpotPriceSansFee(address,address)", +"1446f500": "maxPerContributor()", "1447431e": "setCCH_edit_24(string)", +"1447b19b": "balanceStake(address)", "1448b3ca": "tokenSaleAddress()", "1449757d": "annulCertificate(address,address)", +"14499454": "MaxPrizeAltered(uint256)", +"1449abf2": "Created(address)", +"1449c1cf": "wraptMissEther()", "1449c321": "view_get_gameStates()", "1449c6dd": "Staked(address,uint256,uint256)", +"144a03b3": "startExitWithDepositedTokens(uint256,address,uint256)", "144a2752": "getBuyAmount(address,address,uint256)", "144a3260": "createWithDeposit(address,address,uint256)", "144a3472": "inMaintenance()", +"144a3769": "updateManyUsersExternal(uint256[],uint256,bool)", "144a88a0": "updatePlayerPoint(uint32,uint32,uint32,uint32,int256)", +"144a8d6a": "getDistributedFundsOfNotYesSoldTokens()", +"144b0919": "isCollaborator(string,address)", +"144b1250": "userDepositMap(uint256,address,uint256)", +"144b13c9": "testAllowanceFunction()", "144b2a82": "transferICO(address,uint256)", "144be7eb": "totalNumberOfCards()", +"144bfec7": "getStakedRank()", +"144c06c3": "Register(bytes12,address)", "144c7e40": "CRYPTOKEN(uint256,string,uint8,string)", +"144c9d4c": "awardItem(address,uint256)", "144cbdfd": "NobeToken()", +"144d0154": "Betfromvault(uint256)", +"144d7f8e": "pendingMinMintAmount()", +"144dc0e1": "instrumentPosition(address,uint256)", +"144e7914": "_swapTokenForWethOut(address,uint256)", "144f2f94": "_burn()", +"144f86c2": "withdrawNodeOds(uint256)", +"144f9cc6": "getInfo2(address,uint256)", "144fa6d7": "setToken(address)", "145000ab": "PRICE_2()", +"1451952b": "setRootAddress(address)", "14525b6b": "auctionFee()", "14525bce": "INITIAL_BALANCE()", "14526f8c": "Buy(string,address,uint256,uint256)", "14534ad0": "LogCertifierAdded(address)", "14534ba7": "ballotEncryptionPubkey()", "1453671d": "changeWithdrawAddress(address)", +"1453a299": "batchFetchManagers(address[])", "1453bfb3": "visitingUnicorns()", "1453d756": "bytes64ToString(bytes32,bytes32)", +"14542e65": "flag(address,bool)", "145538ea": "phase1StartBlock()", "145671aa": "getValidations(address,bytes32)", "14567b8b": "setSelfAsContributor(string)", @@ -11689,78 +21318,123 @@ "14572dff": "incrementUniquenessIndex()", "14576a49": "NewSophonToken(address)", "14577c55": "accountLevels(address)", +"1457e323": "totalFarmings()", "14584a9d": "getAuctionIndex(address,address)", +"14588182": "testTokensBurn(address,uint256,uint256)", "1458ffb3": "VREO_SALE_PHASE_1_END_TIME()", "1459457a": "initialize(address,address,address,address,address)", +"1459ad59": "inSdcForAdmin(address,uint256,uint256)", "1459cef4": "balanceOfMine()", "1459ecc4": "lastrecordindex()", "145a0adc": "setDataLink(uint256,string)", "145a7f92": "social(address)", "145af145": "getAllCardsLowestPrice()", "145b2ab2": "CocoToken()", +"145b532e": "nextspotnr()", "145ba84c": "_payAwardOwner(uint256)", "145c03f2": "TransferFromCompanyInventory(address,uint256,bytes32)", +"145ca088": "mktIssue(address)", "145ca0b3": "UnLockTokens(address,uint256,string)", "145cb459": "showCertificate()", "145ccb0f": "planWithdraw(uint256)", "145cf0c2": "decrementTokenIdsLength()", "145d82d6": "setKingdomFactoryRP()", +"145d8686": "TGX()", +"145dc4af": "approval_burn(address,uint256)", +"145e18a9": "createProduct(string,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "145e1944": "buy(bytes,int256)", +"145e2ff6": "Purchase(uint256,uint256,address,uint256)", "145e6701": "SteemitFund()", "145e818f": "BALVINDER()", +"145e8a81": "rejectedInvestmentWithdrawals(address)", "145e8f5e": "HVB()", +"145ead75": "mintViaEther()", "145eb4ee": "HuaTuoToken()", "145ee04c": "pendingFeesWithdrawals()", "145f3143": "releaseTime1()", +"145f695f": "setDNodeAddress(address)", "145f8ba2": "getPainting(uint256)", +"145f9bdc": "providedBy(address)", "145fa890": "setWhiteListDuration(uint256)", "145fd87a": "getTotalHashRateOf(address)", "145ff9cb": "terminateShortPosition()", "146008e3": "grid(uint256,uint256)", +"1460142c": "approve_138(address,uint256)", "14606109": "cap1(address)", "14607fc2": "dispute(bool,address)", "146091f1": "removeFromAllocationList(address)", "1460b505": "setWeights(uint256[])", +"1460d473": "Privilege_Certificate_Issuance(uint256,string,string,uint256)", +"1460e1c2": "_core()", "1460e603": "numDarknodes()", +"1460fa87": "stakedBalances(address)", +"1461082c": "setPancakeFarmingPool(address,uint256,address,address)", "146124f9": "totalDistributedr()", +"146131db": "rewardsionFromToken(uint256,bool)", "146155bf": "createUserByEmailVerify(bytes32,bytes32,uint256)", "14619c7f": "setContractAdmin(address,bool,uint256)", "14627834": "GOVERNANCE()", "14633039": "VanityToken_v3()", +"1463ae06": "address2UID(address)", "146483f9": "setCreateUnicornPrice(uint256,uint256)", "1464bc45": "walletFacebook()", +"1464c45a": "setFeeRatio(uint8)", "1464f516": "votosTotales()", +"14650e47": "getCurShare18()", "14653f87": "SHIP(uint256,uint256,uint256)", "14656957": "PeculiumToken()", +"14658d45": "TEAMS(uint256)", "1465aa97": "testingContract()", +"1465abb2": "totalMaker()", "1466724a": "subUserBattleValue(address,uint256,bool)", +"14667e48": "GetDyHistory(uint256,uint256)", +"1466c771": "pushForeignMessage(bytes,uint256)", "14670850": "test_33_assertGasUsage200Boards()", "14673d31": "setReserveAddress(address)", "146740ee": "bulkAddMake(address[],uint256[],uint256[])", "14679957": "GenesMarket()", +"1467ce3c": "bids_decrypted(uint256)", +"1467cfae": "decreaseCount(uint32)", +"146816ff": "isGameMinter(address)", +"146862cc": "_totalBatches()", "14686ac2": "puntAmount()", "1468d9cb": "Latium()", "1468fc26": "changeSharedExpenseAllocation(uint256)", "146901db": "setFailed()", "14690be7": "TransactionSucceededICAP(bytes32,uint256,string,address)", +"1469492b": "distance50(uint256)", "14697cc8": "claimHalvingsSubsidies(uint256)", "14698895": "Certification()", +"1469d5d4": "walletAddresses(uint256)", +"146aaf25": "autoPoolDist(uint256)", +"146ae569": "auditorContracts(address,uint256)", "146b4955": "RICHERC20(uint256,string,string)", "146b58df": "getInvestment(address)", +"146b5966": "getBNB(uint256)", +"146b9f70": "addCToken(address,address)", "146bea7b": "nextYear()", +"146c1b5e": "motherCount(uint32)", +"146c3ec9": "InitialRelease(uint256)", "146c8710": "addressOf(address,uint256)", "146ca531": "round()", +"146ceaa3": "sendGifts(address[],uint256)", "146d2148": "setReaderId(address,bytes32,bytes32)", +"146d369a": "distributeBinaryBonus(address)", "146dd227": "BLTToken()", "146dd8e0": "BestEther()", +"146de06d": "LogPausePreICO()", "146e3cb5": "getDroidsIds()", +"146e689a": "createWrapper(address,uint8)", "146e7eea": "soulsForSale()", "146e91b5": "signContract(bytes32,string,bool)", "146e9329": "summJenkins()", +"146e9b75": "initializeUniswapTwap()", "146ee571": "requestFreeDistribution()", "146ef27d": "balancePreSale2()", "147035ba": "processPublicPurchase(uint256,address)", "14704d91": "getCCH_edit_26()", +"1470714d": "AIRDROP_FUND()", +"14707538": "setTokenB(address)", "14709544": "BetCoin()", "1470dfa8": "closeWindow(uint8)", "1470fc6f": "approveRejectOrg(string,string,string,string,string)", @@ -11769,92 +21443,191 @@ "147288fb": "test_insert_findWithHint(int256)", "1472d56a": "assertEq1(bytes1,bytes1)", "1473248d": "SampleContract()", +"14732b71": "pow(uint256,uint256,uint256)", +"1473b0fd": "calcTokensForAmount(uint256,uint8)", "14743e7e": "activateRound(uint256)", +"1474b279": "accountLoanLimit()", "1474b789": "burnXPTokens(address,uint256)", +"147506d7": "pool_slots_2(uint256)", +"1475d12f": "registerAddress(uint256)", "1475e751": "game_token()", "1476e40f": "multiCall(address[],uint256[])", +"14773b4f": "getLicenses(address)", +"14774b4a": "tokenSalenETH(address)", +"14775a3a": "clearbADR()", +"147859d1": "resetRoot(uint32,bytes32)", +"147872b5": "viewCustomerDeposit(address,uint256)", "1478b6af": "abortUpdate()", "1479290e": "removeBouncer(address)", "14793058": "createPhoenixes()", +"147936ba": "initialize(string,string,uint8,address,address,address,address)", "14794702": "withdrawWinnings(uint256)", +"14794b8e": "disapprove(uint32)", +"14797de7": "_artItemIds()", "147a5640": "_getAllRevisionIpfsHashes(bytes20)", +"147a583e": "benzWinner()", "147aaa8d": "giveTokensTo(address,uint256)", +"147af583": "getInputBits(uint256,address)", +"147b0966": "RealmOfferSubmit(uint256,uint256,address,uint256)", +"147b3aea": "tokensSoldInPeriod(uint256)", +"147bf902": "setMaxCyclePlayersConsidered(uint256)", "147bfd66": "GuardedBeercoinICO()", "147c9f6d": "updateWallets(address,address,address)", +"147ccfb5": "yvault()", +"147ce580": "vaultUserInfoOf(address,address)", "147d57b0": "send_bounty_token(address,uint256)", +"147d5b8d": "reclaimPAX()", "147d959a": "setUSDPrice(uint256)", "147da3c9": "newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", "147e14a4": "retrieveTokens(address,address,address)", "147e51f4": "freezeTheMoment()", +"147e54eb": "setPee(string)", +"147e7e66": "budgets(address)", "14807045": "flipCapSwitchTo(bool)", "148105ab": "addBankroll()", +"1481254d": "transferTokenFrom(address)", "148174cd": "ownerSetCasino(address)", "1481c04a": "getTXSValue(uint256)", "1481d439": "deleteUserClaimInBulk(address[])", "148222cf": "donateSkin(uint128,address)", +"14826c07": "B14(bytes)", "1482bd40": "bountyBalanceMap(address)", "148303a7": "SafePower(uint256,uint256)", "14838617": "DEV_PORTION()", "1483fc8c": "addBlockData(uint256,bytes)", +"14840295": "set_new_UNI(address)", "14841164": "extraBalanceWallet()", "1484abf4": "whitelistApplication(uint256)", "1484cd32": "getWinners(uint16,uint8)", "1484e9ad": "startICOStage2()", "14852606": "setAccompliceBContract(address)", +"148526c8": "HardCapChanged()", +"1485ff78": "remainReward()", "1485ffc4": "finalizeTDE()", +"1486a276": "getRandomValue()", "14870a57": "setMonthClose(uint256,bool)", "14870d2c": "withdrawAllToken()", "14887c58": "isEntity(address)", "1488f983": "LogFinalized(address)", +"14892372": "getuserContributions(address)", +"148931bc": "setCorporate(address)", +"148a95ea": "getBaseData()", "148ab04e": "balance_in()", "148ab078": "MEW_RESERVE_FUND()", +"148abbae": "platformFirstSalePercentages(uint256)", +"148b7ff8": "lpEthAmount()", +"148bd911": "_safeEndRound(uint256,int256)", "148bea6b": "gamblerlist(uint256)", +"148c3b24": "l1l8users()", +"148c641b": "prizeBreakdown(uint256)", "148cd939": "transferBecauseOf(address,uint256,address,uint32,uint256)", "148ce4a4": "test_claimShare_isTranscoder()", +"148ceca0": "calculateVIDYAReceived(uint256)", "148d3e7b": "FQCoin()", +"148d7717": "setReAP3LsPaused(bool)", +"148da362": "RemoveAdmin(address,address)", "148da7f6": "disableInvestment()", +"148dbe94": "getAllowedToValidate(uint256,uint256)", +"148dcf4c": "changeOwnerSnipe(address)", "148dd101": "thirdChangeBlock()", +"148e8938": "Kaos()", +"148ea1a4": "lastActionTimestamp(address)", +"148ec9ab": "setMaxRecipients(uint256)", +"148f224a": "setExchange()", "148f2e5e": "sendWei(address)", "148fa780": "just10Send()", +"148fdaae": "removeSupportCurrency(address)", "14900396": "changeRaceOwnership(address,address)", +"14904b66": "proposalVoterHasVoted(uint256,address)", "149148e0": "getCityPlanAddres()", "1491858e": "calculateSetupAllowedUntil(address[16],uint256)", "14918f5e": "performInitialWithdrawal()", +"14920438": "newScheduledPayment(address,address,uint256,uint64,uint64,uint64,string)", +"149281c0": "transferFromContract()", "14930d7e": "transferResidualBcoupons(address,uint256)", "14941e80": "getFreeAmount()", +"149433dd": "switchstart()", "14946a97": "CoreToken(uint256,string,string,uint8)", +"1494b9c5": "setUserRate(uint32)", +"1494ec61": "riskyaccumulatednegetiverebase()", "1494ecfc": "SentosaX()", +"1494f1d7": "setEpochEndBlock(uint8,uint256)", "14950f64": "RevokeAddressChanged(address)", +"14951afb": "approve_8(address,uint256)", "14959741": "UserMessage(address,string)", +"1495bf9a": "StakeAxiaTokens(uint256)", "149607d3": "EtherollToken()", +"149632bc": "renderTop50()", "149679b9": "GOE()", +"14969851": "OnBuyToken(address,uint256,address,address,uint256,uint256,uint256)", +"14969f03": "iQ()", +"1496baf8": "claimRefundChunk(uint256,uint256)", +"1496c8a1": "eth_usd_pricer_decimals()", +"1496e0bf": "setAmountOutMin(uint256)", "1496fc4c": "Telcoin()", +"1497008a": "FightStarted(uint256,uint256)", +"149709a4": "RECOM()", "14975cc7": "hardCapPrice()", +"14977389": "Recieved()", +"14978616": "getOptionDetails()", +"1498037a": "claimPFarmTokens(bytes)", "14986f5b": "setCooldowns(uint32[100])", +"1498882c": "saleMaxAmount()", "1498970a": "getDeployedblockbytesMarriages()", +"14990ace": "custodianDepositAddress(address)", "149947fd": "finding(address,bytes8,uint8[])", +"14995cd1": "newWeeklyExec(string,address)", +"1499ad98": "getDeveloperName(address)", +"1499b1c8": "addManyBeneficiary(address[])", "1499c592": "setParent(address)", +"1499fdf5": "salfToken()", +"149a4ae4": "aprAfterDeposit(uint256)", "149acf9a": "daoCreator()", +"149af869": "getTrackerBalance()", +"149b38dd": "getAPROptionsInc(address)", "149b8690": "supplyInCirculation()", +"149c24d0": "delegateDRclient(uint256,address)", +"149c3266": "orbAddress()", "149c5066": "ChanceOfWinning(uint256)", +"149c650f": "setStateHolderAddress(address)", +"149c839e": "bunnyFactoryV2()", "149cc1f6": "_finalizeBet(bytes32,address,uint256,uint256)", +"149ccff4": "interestBalance_(address)", "149cd0be": "alterCreatePetitionFee(uint256)", +"149d14d9": "getMiniRelayFee()", +"149d755a": "suspendManyUsersExternal(uint256[])", +"149dfec2": "blockHashNow()", "149dffc8": "numCancelledRequests()", "149e6788": "heroClasses(uint32)", "149e685a": "getFundById(uint256)", +"149ee283": "drug(uint256)", "149eead5": "master_contract()", "149f2fdb": "sellExchangeRate()", "149fc918": "_rejectMint(uint256,uint256)", +"149ff278": "_getCollChange(uint256,uint256)", +"14a00101": "roiAllClaimed(address)", "14a0069a": "getVoter(string)", "14a03e7c": "concludedGameIndex()", +"14a0450a": "DEV_DIVISOR()", "14a06710": "TokenRelease(address,uint256)", +"14a06ff6": "setAdmixture(address)", "14a091a9": "createLockTokenHistory(address,uint256)", +"14a0f1ea": "updatePool2(uint256)", "14a1231f": "guardian2Vote()", +"14a13d74": "OracleGasLimitChange(uint256)", +"14a1b75a": "arNXMVault()", +"14a1c32d": "totalDebts()", +"14a1d84f": "sharesOfUp(uint256,address)", +"14a1fe02": "treasuryMax()", "14a26806": "setPreUri1(string)", "14a2d99f": "Grant(address)", "14a34ebd": "getMilestones(uint256,uint256)", "14a3557b": "intrepidVoucherSoldCount()", +"14a38f9b": "LogSetManualOverride(bool,uint256)", +"14a39ded": "depositDone(uint256)", "14a3b19a": "transferIndexedByAddress(address,uint256,address)", +"14a3da1f": "approve_99(address,uint256)", +"14a3db2d": "interests()", "14a47046": "add_blockedAddress(address,address)", "14a4a273": "penalizationOpen()", "14a528f2": "HasGift(string)", @@ -11862,40 +21635,81 @@ "14a57db7": "LogPreparePreContribution(address,uint256,uint256,uint256)", "14a59e9d": "getStakeholderConfirmationCount(uint256)", "14a5cd29": "getAssetEmitter(uint256)", +"14a627df": "exchangeLevel(uint256)", +"14a660f3": "getCommissionAdmin()", +"14a6a05e": "ethUsedPurchasing()", "14a6a1a5": "REQUESTED_STATUS()", +"14a6bf0f": "getDebt()", +"14a754d0": "totalStakedBotg()", "14a7945a": "redeemAllOwnedAssets(uint256)", +"14a7a631": "collectFrom(address[],uint256[],address)", "14a7c57d": "getData_26()", +"14a7eecc": "BlocksOwners(uint256)", +"14a80b0e": "wbnbToCfiRoute(uint256)", "14a89904": "rollDie(address,uint256)", "14a8bd0d": "EXCHANGE_RATE()", "14a8ca20": "fromPercentage(uint256,uint256)", +"14a94dbc": "Halted(uint256)", +"14a9e993": "sendBTCPToken(address,uint256)", "14aa0eaa": "claimBountyToken()", +"14aa1039": "addrByID(uint256)", +"14aa164f": "calcTop3Reward(uint256,uint256)", +"14aa2c3b": "transferAllTokensOfGateway(address)", +"14aa2ff7": "ovmCREATE(bytes)", +"14aa320a": "createUseablePasswords(bytes32[])", +"14aabd01": "startChangeStakingPool(address)", "14ab260e": "retrieveCompletedProof(bytes32)", +"14ab5a4c": "updateChallenge(uint256,address,uint256)", "14ab9038": "setTTL(bytes32,uint64)", "14aba0db": "MineAD(address,uint256)", "14ac1102": "get_total_items_in_state(bytes32)", +"14acc95f": "resumePynthsExchange(bytes32[])", +"14ad3fe0": "getRateApprover()", "14ad47eb": "SwapToken()", +"14adab1d": "orangeWireCutters(address)", +"14ade4a6": "stakingPoolStop()", "14ae1229": "setRightForInterest(uint256,uint256,bool)", +"14ae9f2e": "removeKeeper(address)", "14aedbee": "TokenFactoryAirdrop()", "14af0908": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256,uint256)", +"14af13cf": "getFirstTimeBuying()", "14af1e92": "MinterGaveCWC(address,address,uint256)", +"14af3380": "giveCollatBack(uint256)", "14af35c3": "MyToken(string,string,uint256)", +"14af8700": "test_num()", "14afd79e": "ownerOf(address)", "14b0519d": "AltExtraHolderContract(address)", +"14b0818a": "_tokenWETHPair()", "14b08b4d": "getAllDepositors(uint256)", +"14b08d7f": "pendingChocofi(uint256,address)", "14b0e266": "addBid(uint256)", "14b11606": "BONUS_ICO_STAGE2()", "14b11651": "setPoolAndAmount(address,uint256)", "14b11875": "verifyProposal(address,address,uint256,string)", +"14b12cfc": "threadNr()", +"14b19c5a": "epochCounter()", "14b1e1f8": "setRefer50x50(address)", +"14b21814": "currentLotteryRound()", "14b24209": "multiGuess(int256[])", +"14b2457b": "EnabledTransfers()", +"14b2b3fb": "sendPrizes(uint256[],address[])", "14b2cd55": "LightPool()", "14b2d6dc": "isValidDate(uint256,uint256,uint256)", +"14b2e1c5": "SecondStageEndsAtChanged(uint256)", +"14b3b077": "changeWallet1(address)", +"14b3d47a": "EvInvestorsPayout(uint256,uint256,uint256[],bool[])", "14b419c9": "getAllUsers(address)", +"14b43ca4": "WithDraw(address,uint256)", "14b49c36": "Police_5()", +"14b50042": "getDecryptedUserVoteByIndex(uint256)", +"14b50c8c": "updateMelterPrice()", "14b5202c": "stage_Discount()", "14b546b4": "FreePublicity()", "14b577ab": "addIdArrayItem(address,address,string,string,uint256)", +"14b5b0e4": "IMPOSS14()", +"14b5f8d1": "supplyBalMin()", "14b72000": "txFeeCapInWei()", +"14b74b72": "standCash()", "14b77798": "unsetMany(address[])", "14b78abb": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,uint256)", "14b79e21": "_depositTransferCredits(uint256,uint256)", @@ -11903,44 +21717,72 @@ "14b80402": "isStateDestructed()", "14b85c1b": "removeSalesAgent()", "14b87862": "getParticipant()", +"14b8cb1e": "calcContractStakeAndInterest(uint256)", "14b8e9a4": "checkpointLevel()", +"14b8fecc": "LPGenerationCompleted()", "14b92721": "loveMessage()", "14b933e1": "getWeiPerSatoshi()", +"14b9c75a": "add(string,uint16,uint16,uint16,bool,uint16,address[],uint256[],uint256[])", +"14b9d440": "getMinSignAmount()", "14ba5c09": "getDay()", +"14bab5ae": "_trPresaleStages()", "14bafeab": "getMessage2()", +"14bb3895": "getfreezeAccount(address)", "14bb4dd9": "WavesTransfer(address,string,uint256)", "14bba4b8": "setDiscount(uint256,uint256,uint256,uint256,uint256)", "14bba8a2": "updateRequestExpired()", "14bbe21c": "transferBeneficiary(address)", "14bc3efc": "endBorrowAgreement(string,string,uint256,uint256)", +"14bcaaad": "setAddOwnerSignatureThreshold(uint256)", +"14bcec9f": "lastUpdateTimestamp()", "14bd0c21": "getServiceAddress(bytes)", "14bd3d87": "acceptOffer(string)", +"14bd63e6": "unPaidFees(address)", "14bd8acd": "massApproval(bool,uint256,uint256)", +"14bda58b": "_setMinSupply(uint256)", "14be4ecc": "setWETHContract(address)", "14be5169": "releaseLockAgencyLock2()", "14be7793": "isPrivateSale()", +"14be8260": "_getOwner(address)", +"14beac2c": "enforceDepositLimits()", "14beb3a3": "latestParams()", "14befc70": "parkingOff(address)", +"14bf2497": "getCurrentHalvFactor()", +"14bf9d2b": "withdrawalOf(address)", "14bfd6d0": "admins(uint256)", "14c01fb4": "_checkPixelAbove(uint256)", +"14c098d9": "ERC20Moved(address,uint256)", "14c0a37a": "stateBorrowerDefaulted(uint256)", "14c0bc27": "EtherBalanceOf(address)", +"14c0d740": "transferOwnershipNew(address)", +"14c0e7ff": "_getAndUpdateDelegatedToValidator(uint256,uint256)", "14c0ffdc": "formula(uint256)", "14c15569": "getAccountOutputSdcslength()", "14c16f41": "updateStageWithInvested()", +"14c20d57": "buy(uint256,uint8[4])", +"14c21a66": "feeInvitorPercent()", "14c239a9": "_cappedReward(uint256)", +"14c23faa": "updateCertificate(string,string,string,string,string)", "14c259eb": "white_duration()", "14c292ca": "finishITO()", +"14c2a390": "toyPerBlock()", "14c2d2e0": "handleRef(address,uint256,uint256,uint256)", "14c33c24": "setSystemEndingPrice(uint256)", "14c3512d": "adminSetFeeUsdDialNumber(uint256)", +"14c36c21": "SentRoad(uint256,uint256,uint256,address,address)", +"14c3d8fa": "mintExtension(address,uint256,bytes32)", "14c3e29f": "NONEC()", +"14c4099e": "ignite(uint256,address,uint256)", "14c411c7": "releaseTeamTokens()", "14c44e09": "registrationFee()", "14c485c9": "getMartialListInfo()", +"14c55af6": "ProofOfAuthenticityEmited(uint256,address)", +"14c56e59": "yieldMarSelect()", "14c588de": "setPromoGen0(uint256)", "14c5f158": "callModifiedTransfer(address,uint256)", "14c65687": "_getWeightUntil(uint256,uint256)", +"14c67060": "zeroProj()", +"14c6fe41": "finishDeleveraging()", "14c72e9e": "_getFirstIndex(uint256,uint256[])", "14c74834": "setHeir(address,uint256)", "14c7763b": "MINTING_LIMIT()", @@ -11948,29 +21790,48 @@ "14c7bddf": "manualRefund()", "14c888da": "setFeeParams(uint16,uint256,uint256)", "14c8e5f4": "requestHangingDividends()", +"14c8ec6e": "Book_hotel(uint256)", "14c9035e": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"14c92791": "attackIdToInfo(bytes32)", "14c9b8a5": "closeEarly(uint256)", "14c9eed0": "onlyadmin()", +"14ca3c7c": "getLastSender()", "14ca5200": "MiningRewardTransfer(address,address,uint256)", "14ca5398": "submitFullBlock(bytes,uint256[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,uint256)", "14ca6e01": "setBleachPrice(uint256)", "14ca8e01": "validPlayer2(uint256,address)", +"14ca9780": "safeBoldTransfer(address,uint256)", +"14ca9b44": "deposit9(uint256)", +"14caba34": "transferProofState(address,uint256,string)", "14cabddb": "joinProof(uint256)", +"14cafd84": "depositAndRevert(address)", "14cb1ae4": "ContractOwnable()", "14cba002": "_forwardTransferFromWithReference(address,address,uint256,string,address)", "14cbb90d": "yea()", +"14cbc46a": "withdrawRequest(address)", "14cbd993": "getRegisteredTokens()", "14cbdb54": "EspCoin()", +"14cc32b2": "PauseEvent()", "14cc3cf9": "FOUNDERS_LOCK_PERIOD()", +"14cc8ac7": "swapAllTokensForWETH(address,uint256,address)", +"14cd345d": "maxRewardMintAfterBlocks(uint256)", +"14cd5a81": "sporeToken()", "14cd70bc": "FakeOwner(address)", +"14cd70e4": "withdrawTo(uint256,uint256,address)", +"14cd826c": "removeAccessor(address,address,uint256,address,string,uint32,string,string,bytes32,bytes32,uint8)", "14cddf9e": "whiteListMinAmount()", "14ce2f61": "MappingDone(address,uint256)", "14ce4059": "owner_fee()", "14cf12d5": "softCapTime()", "14cf19fe": "TIER1_PRICE()", +"14cf1bd8": "saleAmt(address)", +"14cf2f08": "pharmacyCount()", "14cf588f": "LBA()", "14cf6983": "getBalanceCell(address)", +"14cf7e4c": "startDeFi(address,address,uint256)", +"14cf93c0": "createOrder(address,address,uint256,uint256,bool)", "14cfb977": "minFinneyPerSaleMoreThan()", +"14cfd6e9": "registerNodeFor(string,uint192,address,uint64,address,uint256,uint256)", "14cffda2": "synertreeToken()", "14d03ea6": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256)", "14d04e06": "FooozCrowdsale(address,address)", @@ -11978,90 +21839,187 @@ "14d07a3e": "left28(uint256)", "14d0f1ba": "moderators(address)", "14d10920": "BetstreakToken()", +"14d12e0a": "getAttributionByGeneration(uint8)", "14d140b0": "communityPool()", +"14d167db": "changeAMM(address)", +"14d1e62f": "approveByPartition(bytes32,address,uint256)", "14d20606": "devTeamPrecent()", +"14d22542": "cryptographIssue()", +"14d23b82": "getImpactTotalValue(bytes32)", "14d23c8b": "MaliciousSeller()", "14d296f4": "getPremiums()", "14d2d59d": "_approve(uint40,address)", "14d30335": "assignInitialDays(address,uint256,uint256)", "14d33a30": "addCandidateBatch(address[])", "14d36f53": "checkVerifyAccess()", +"14d39bad": "setPlatformPercentage(uint256)", "14d3df67": "getSMPTokensAmountPerEthInternal(uint256)", "14d47bc9": "registerBeneficiaries(address[])", "14d4ecd9": "defineCurrentPeriod(uint256,uint256)", +"14d512ce": "initEnvForPri(uint256,uint256,uint256,uint256)", "14d547aa": "returnInvestments(address)", +"14d5af9f": "setEth_Mininmum_Contribution(uint256)", "14d5d892": "changeMemberAddress(uint256,address)", +"14d5db8c": "Created(address,address,address,uint256,uint256,uint256)", +"14d5f171": "PoARegistered(bytes32,string,uint64[],uint64[],string,bytes2)", +"14d5f6e8": "totalPurchasers()", "14d67848": "setClass(uint256,uint256)", "14d6c2b1": "_maint_updateOwner(address)", "14d72106": "nextNumberOfWagersToFinalTimeout()", "14d75e9d": "createProduct()", "14d79e37": "GetRed(address)", +"14d7f47c": "geticostatus()", +"14d8b821": "recoveryTimeout()", "14d8c981": "getItem(address)", +"14d9862f": "getPlayerBalance(uint256)", +"14d9c80c": "minersArray(uint256)", "14d9d2e5": "getCostForUprade(uint256,uint256,uint256)", +"14d9d3e4": "_calculateDelegationEndMonth(uint256)", +"14d9dcd0": "controlledTokenBuilder()", +"14d9f69a": "lotus()", +"14da43af": "lockUser(address,uint256)", "14dacf5b": "disableWhiteUserList()", +"14db658a": "initialization(uint256,uint256)", +"14db6615": "addressOfBountyMembers(uint256)", "14db6d58": "hasUserPermission(address,bytes4)", "14db8c7d": "getGladiatorPower(address)", +"14db9d19": "withdrawMegaPoolGain(uint32)", "14dba3ba": "PPToken(uint256,uint256)", "14dbb508": "Project(string)", +"14dc64ee": "PlayerIndexToOwner(uint256)", "14dcd58f": "derpcoin()", "14dcfd55": "vendorWallet()", +"14dcffaa": "changeTxtPrice(uint256)", +"14dd1879": "approve_260(address,uint256)", +"14dd79a3": "getLockedTokenAtIndex(uint256)", +"14de327f": "submit(address,uint256,bytes)", +"14de72d4": "community(uint256)", "14de9cc2": "tokenGenerated()", "14dea8e7": "onCancel(bytes32,uint256,address)", "14deb0ac": "addressAt(address,bytes,uint256)", +"14dee4b3": "updateDescription(uint256,string)", +"14df2767": "burnFlask(uint256)", +"14df5448": "getRewardDataByAddress(address,uint256,uint256)", +"14df85e9": "currentBidDetailsOfToken(address,uint256)", "14df96ee": "isRoundingError(uint256,uint256,uint256)", "14dfad27": "_emergencyLoop()", +"14dfe792": "marginTrade(bytes32,uint256,uint256,uint256,address,address,bytes)", "14e0246a": "setMintSigner(address,int256)", +"14e0c71f": "withdrawByAdmin(bytes)", +"14e243d0": "setIsUniswapWay(bool)", +"14e2584f": "getCycleInfoById(uint256)", +"14e28887": "releaseClaim(uint256,uint256)", "14e2bc2a": "finishMinting(uint256)", +"14e2c3d0": "inCasemDEFStuck()", +"14e2c7bf": "primeMap(uint256)", +"14e32da4": "getStableRateSlope2()", +"14e37b26": "Trade_1155eth(string,uint256)", +"14e3af41": "PermissionsUpgraded(address,address)", "14e3fad3": "extra_bonus_amount()", +"14e4082e": "hasMostProfitableStrat()", "14e4a723": "SafePromo()", +"14e4ce12": "entrydetails(string)", +"14e52291": "_calculateRewards(address,uint256)", "14e580ab": "LogIdentityCreated(address,address,address,address)", "14e604b6": "EXPLOSION_DENOMINATOR()", "14e6a86d": "doCheckBounds(bytes32)", +"14e6ac09": "setDevFundFee(uint256)", +"14e6e899": "isTokenDead()", +"14e7b1dc": "getPledgeDelegate(uint64,uint256)", +"14e7c977": "approveAll(address,address[7],uint256)", "14e8093f": "clientWithdrawAll()", "14e887e8": "transactionCounter()", +"14e8e860": "curriculum4()", "14e904e8": "LogBidCompleted(uint256,bytes32,bytes32)", +"14e97838": "councilNumber()", +"14e9caec": "Payoff(address,uint256,uint256,address,uint256)", +"14e9f384": "_addResultToOrder(uint256,string)", +"14e9f5c6": "discountTo(address)", "14eaa43b": "withdrawToken(address,uint256,string)", +"14eaec14": "getAtomical(address,address,uint256)", +"14eb172c": "pctDIDRequiredToMergePullRequestTitle()", +"14eb3f24": "uniSyncPairs(uint256)", +"14eb55d4": "claimFromForeign(uint256,bytes)", "14eb75bb": "assignRoles()", "14eb76ac": "updateTeamAddress(address)", "14eba026": "removeTeamMember(address)", "14eba5d8": "affiliateList()", +"14ec272a": "transferOperatingBudgetAllocation(address,uint256)", "14ec4106": "createAuction(address,uint256,address,uint256,uint256,uint256)", +"14ed5afc": "rcvrpricefeed()", "14eda32c": "COZE()", +"14edb54d": "k1()", +"14ee81cf": "foo2(address,int256)", "14eea0dc": "IND()", +"14eee5e1": "mtsToken()", +"14ef8b42": "SetMinAllowedReservingPercentage(uint256)", "14efaf86": "ChangedPaymentDestination(address,address)", +"14f07b3c": "pushUnlockableBeforeLastBurnTokens(address,uint256,uint256)", +"14f09b91": "tokenLotsOf(address,uint256)", +"14f0d25c": "closeTestContract()", "14f0ff32": "FUNK()", "14f1244c": "reclaimDeposit(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"14f12797": "map_id_members(uint256)", "14f1586a": "objective()", +"14f1737e": "totalUserDeposit(address)", +"14f1cf0c": "rabbitToOwner(uint32)", "14f1dcac": "setFreeCoins(uint256)", +"14f1f448": "helmet(uint256,uint256)", "14f2979f": "getTickets(uint256)", +"14f326a1": "getAccountsLength()", "14f36e17": "getTokenIssued()", +"14f3aedd": "totalDpassCustV(address)", "14f3f491": "preICOContract()", +"14f43f7e": "refract(uint256)", +"14f47dcc": "stakeReward()", "14f52c07": "Blogcoin()", +"14f5a395": "questionCooldown()", "14f604b8": "deposit_asset_to_session(uint32,uint32,uint64)", "14f60881": "getJobClient(uint256)", +"14f62ea9": "allStakePoolsLength()", "14f64d6c": "PRESALE_START_WEEK1()", +"14f66a88": "devWalletBalance()", "14f685a8": "Etherumble()", "14f6c3be": "getETH()", +"14f6c8da": "lockProducts(uint256)", +"14f710fe": "mintNFT()", "14f72e50": "EightStandardToken(uint256,string,uint8,string)", +"14f74b8c": "nextFeeFraction()", "14f7731b": "getAllowedAmount(uint256)", "14f7789d": "GRAChain(uint256,string,string,string)", "14f796ca": "changeStageAndReleaseETH()", "14f80083": "setMultisigVault(address)", "14f8917a": "initialSupplyPreSale()", "14f8b424": "roundID()", +"14f8d1ac": "CTxAddr()", "14f8f160": "hasIssue(address,bytes32)", +"14f98cc1": "setCloseEvidencePeriodFailure(bool)", "14f99533": "changeAuthorisedContract(address)", "14f9e35b": "groom()", "14fa0b45": "NenasChain()", "14fa274c": "MigrationInfoSet(string)", +"14fa498a": "NewMasternode(address,uint256)", +"14fb0996": "_getTransferFailureMessage()", +"14fb3df1": "deployChild(address,uint256)", +"14fb5646": "createIdentityDelegated(address,address,address[],address[],uint8,bytes32,bytes32,uint256)", +"14fb6d42": "swaave()", "14fbc22b": "createHero(uint256,address)", +"14fbeba9": "liquidityGenerationUniswapAPEXxWETHPair()", "14fc2812": "setAuthorized(address)", "14fc7b9d": "AscToken(address)", "14fcb95c": "ubiatarPlayWallet()", +"14fceb5b": "burnFreezed(address)", "14fd0c14": "deadlineVoting()", +"14fd235a": "governanceShareVote(uint256)", "14fd24f0": "updateIndividualCap(uint256)", +"14fd5884": "stakingAddr(uint256)", +"14fd6da0": "submitEthToTokenOrderWHint(uint128,uint128,uint32)", "14fddb71": "devTeamBalance()", "14fdecca": "getPromotion(uint256)", +"14fe6af9": "destroyBlock()", +"14fea12a": "harvestDonations(address)", +"14feaa9d": "user(address,uint256)", +"14fec86c": "dividendsForPercents(address,uint256)", "14fefca1": "set_hp(uint256)", "14ff5ea3": "getTokenId(uint256)", "14ff5f99": "punterAddress()", @@ -12069,14 +22027,23 @@ "14ffbafc": "startEthGet()", "1500214e": "calcPercent(uint256,uint256)", "15003368": "withdrawEMONT()", +"15009d03": "TokenTypeCreated(address,uint256,uint256)", "1500c257": "startTimePre()", +"1501b06d": "callBack(uint256[3],uint256)", "1501bf03": "transferFunds(address,address,uint256)", +"1501ea1c": "vesters(address)", "15020cb0": "commandTookAway()", +"150228f4": "BOSS_DEF_DEFFAULT()", "1502906d": "timeStep()", +"15035892": "disputeAction(uint256)", "15036fa2": "update_dividend(address,uint256,uint256,uint256)", +"150426c8": "shroom()", "1504460f": "poke(bytes32)", +"1504484c": "getCurrent(address)", "150455a4": "HOTCASH()", "15045c3e": "GenieToken()", +"150465b0": "UnfreezeAddress(address)", +"1504ade6": "setStakingDistributor(address)", "1504ce95": "payout(string)", "1504d8f0": "createSnapshot()", "1504e40b": "RoundEnded(address,uint256)", @@ -12084,31 +22051,60 @@ "15067c4e": "p_setRoundDuration(uint256)", "15070401": "getSymbol()", "150727ff": "getSecondAddressBalance()", +"15072c68": "testKyberV1ExpectedSellRate(address,uint256)", +"1507fd0d": "initialValueShouldBe200()", +"15087515": "Setup(address,uint256,uint256)", +"150876f4": "advisorsFund()", "15087f7d": "cancelBet(uint256,bool,uint256)", +"15088241": "setLockTimeSeconds(uint256)", "15093e03": "minimumAllowedWei()", +"1509a372": "validateWithdraw(string,address,uint256,uint256[2])", "1509c42a": "pr()", "150a5655": "giveVote(string,uint8)", "150a6480": "allowMinter(address)", "150aaf74": "BHB(uint256,string,string,uint8)", "150ad280": "review(uint256,bool)", "150ad2a8": "owner_transfer_ownership(address)", +"150afc5b": "getTop1Team()", +"150b0119": "DEFAULT_MAX_EXERCISED_ACCOUNTS()", "150b52db": "removeAddressFromPartnerWhiteList(address)", "150b60e6": "MAYNILAD()", "150b6885": "genaroDevMultisig()", "150b7a02": "onERC721Received(address,address,uint256,bytes)", +"150bbb0a": "poolYearPercentages(uint256)", "150bc419": "unitMythGrowth()", "150c3e8b": "getIdxArray(uint256)", +"150c6137": "lpts(uint256)", +"150c6e71": "reclaimSystemFees()", +"150d283d": "buyWithETH()", "150d6277": "setMinBetPerSpin(uint256)", "150d7163": "UnfreezeTokensOfOneUser(address)", +"150dc1fd": "addNFTType(string,address)", +"150df561": "mint_Approvals(address,uint256)", +"150e5fec": "removeSuperWhitelisted(address)", +"150e611f": "GetCampaignTags(uint24)", +"150e8386": "setddt(address)", "150eb4d9": "releaseTeam(uint32)", +"150edb34": "unstakeNow()", "150f16ac": "stoppedPresale()", +"150f803f": "getClaimHistory()", "150fa89f": "FirstUser()", "15105fa8": "clearCreator(uint256)", +"1510bc01": "safeMintURI(address,string,bytes)", "1510ca79": "MAX_CROWDSALE_TIME()", "151110b0": "releaseLockedBalance(uint256)", +"15116c20": "whitelistedPool(uint256)", +"151230e3": "orderExpired(uint64)", +"15124476": "approveERC20(address,address)", "1512cfc1": "_preValidateInvest(address,uint256)", +"1512e31a": "TMTG_DeleteInvestor(address)", +"1512f01f": "weiDeposite()", +"151359b4": "discardDefaultFeeVote()", "15136fb5": "ChiTrader()", "15139f09": "ExaGBP()", +"1513bb37": "stakeNow(address,uint256,uint256)", +"1513c0f8": "locA(address)", +"1513ed33": "serialAddr(address)", "15142ed4": "shutDownVersion(uint256)", "15143d6a": "buyOx()", "1514617e": "vestingDuration()", @@ -12117,16 +22113,34 @@ "1514bc48": "tokensForPurchase(address,uint256)", "1514ea54": "getLossesShare(address)", "15154aff": "ITO()", +"151553be": "initialize(address,address,bytes32[],uint256[],uint256,address,uint256,address,uint256)", +"151577bd": "tokenWalletsWhitelist(address)", "15158a10": "numberOfTokensToAvail25percentDiscount()", "1515bc2b": "hasClosed()", +"1515fa6e": "setSaleEnd(uint256)", +"1515fade": "compAsset()", "151682a5": "HASH_RATE_MULTIPLIER()", "1516bbc4": "setTeamVault(address)", "1516db09": "allOwners(uint256)", "1516def7": "multiSigAddress()", +"151726cf": "changeMinCap(uint256)", +"151754e0": "sweepeth(uint256)", +"15179b04": "getSmallJackpot()", "1517d107": "totalNormalCollected()", +"1517d62e": "addVesting(uint256,uint256)", "15183e2f": "twitterBotAddress()", +"1518498c": "newMostLovedCountry(uint256,uint256)", +"15184aff": "actionDetailCampaign(string,uint256)", +"1518ad5c": "send2(address,uint256)", "15191c98": "hibernate(uint256)", "15194a9f": "init(uint256,string,string,uint8)", +"15195493": "setBlacklistForShardPool(uint256,bool)", +"1519b783": "externalCallWithPrivate()", +"151a2c97": "getMyKi()", +"151a3fe8": "blokkoToken()", +"151a67b4": "getFinalStakerSlots(address)", +"151a7b6a": "opinionIndexToApproved(uint256)", +"151b03c1": "getReferAmount(address,uint256)", "151b0bed": "getSponsorshipsBalance(address,uint256)", "151b2342": "getOraclizeCallbackFee()", "151bc167": "Control()", @@ -12134,43 +22148,88 @@ "151c0d40": "crowdsaleEther()", "151c3b12": "store(address,bytes)", "151c61b6": "setUSDExchangeRate(uint256)", +"151cc983": "platformFeesDeservedInEth(address)", "151d7d32": "flushDividends()", +"151d9e2e": "editItemsMetadata(uint256[],string[])", "151e2a0a": "check_ptc_num(address)", +"151e428a": "yourPLMBalance(address)", +"151e4674": "hope(uint256,address)", +"151e6aa5": "reservoir()", "151eeb55": "transferAllowed(address)", +"151f87ca": "mith_rewards()", "151fa6be": "delegateIsDeleted()", +"15204528": "getDydxUserData(address,uint256[])", +"1520f984": "rewardsPerPoolPerWeek()", +"152111f7": "depositRewards()", +"15216539": "maxDateDeposits()", +"1521d23c": "GetArrNameTeam()", +"1521e7f1": "grainImmediateBuyback()", +"1522177a": "creditController()", "15226b54": "getReserveBalance(address)", "1522f110": "preregvills(address)", +"152381f4": "mapValue(uint256)", +"1523d085": "_transferFeesToGovernor()", "15248362": "buy_bounty()", "152583de": "getAttributes()", "152592b0": "WALLET_ALLOCATION()", "1525b4f5": "mintLockedTokens(address,uint256,uint256)", "1525d680": "MainToken(address)", +"1525ee4e": "burnAllowance(address,address)", "1525ff7d": "setTeamWallet(address)", "15263ef7": "VHW()", +"15265d39": "LogMinterAdd(address)", +"152697bb": "buytoken(address)", +"1526fe27": "poolInfo(uint256)", "15270ace": "distribute(address,address[],uint256[])", "152713b3": "sumAcceptedVirtualContrib()", "152744ea": "BondInfoById(uint32)", +"152761f1": "setGatekeeperOne(address)", +"15277788": "RecordAdded(bytes32,bytes32,bool)", "1527d657": "returnHowMuchMoreETHNeeded(uint256)", "152826e9": "cashoutable()", "15285aa3": "EventBid(uint256,address)", +"1528c4a8": "tokenPoolLength()", +"1528cbb6": "exec_recvmsg(uint256)", "1528f43c": "getPOOL_edit_10()", +"15292f53": "productions(uint256)", +"152936c2": "LogCreateGameSuccessed(uint256,uint256)", +"15294c40": "repay(address,bool,uint256)", +"15298b5e": "availableDrawDownAmount(address)", "152993a8": "addContract(string,bytes)", "1529a639": "getCollateralBalance()", +"1529e631": "decodeCallDataUint()", "152a3f28": "getSponsorships(address,uint256)", +"152af653": "checkICOTokenBalance(address)", "152af8f9": "acceptFoundationTransfer()", "152afab4": "adicionarAssinatura(string,string)", +"152b36e0": "arShields(address)", "152b6f9a": "hasDNN(address)", +"152bf6c8": "transferMax()", +"152c04d9": "info_BidInfoByIndex(uint256)", +"152c1f17": "BALANCER_REGISTRY()", +"152c4918": "_decode_sol_bytesN_lower(uint8,uint256,bytes)", +"152c8c24": "payoutsTo(address)", "152cf3af": "ethPayment(bytes32,address,bytes20,uint64)", "152cf9db": "getDataPoint(int256,uint256,uint256)", +"152e4e28": "setPrivateValue(address,uint256,address)", "152e84a7": "tokensDistributed()", +"152e907c": "updateInterestRate(address,uint256,uint256)", +"152e9c5e": "getmyflight_reservation(uint256)", +"152f05b7": "getFailedDetail(uint256)", +"152f11cc": "checkIsExistingPool(address)", "152fb125": "SimpleMixer()", "152fb5fd": "period_count()", "15303771": "updateUnsold(string,uint256,uint256)", +"15304c05": "CURVE_ADDRESS()", +"15308542": "getParentStakedEthTotal()", +"1530fb50": "initUnlock(uint256)", "1531076c": "getAgonArray(uint64,uint64)", "15312b50": "SimpleTokenVesting(address,uint256)", "153154fd": "getRecommender(address)", "1531c267": "fipsRegisterMulti(uint256,address,bytes)", "1531dfdb": "ethtosend()", +"1531f016": "getTimer(address)", +"1531f472": "setUniqueNames(bytes32,bool)", "15328109": "parentAddr()", "153345ce": "changePrice(uint256,uint256,uint256,uint256)", "15334b77": "setGameStarterDividendPercentage(uint256)", @@ -12180,188 +22239,352 @@ "1533ba50": "EMBCToken()", "1534180f": "_transfer(address,uint256,bytes,string)", "15347380": "priceInWeiToken(uint256)", +"15349501": "newRequest(string,address)", "1534b1fc": "getPlayerDepositData(address)", "1534b392": "getNumLockers(address)", +"1534c58b": "launchEnd()", +"1534dcdf": "POOL_PRICE()", "1534e8d2": "multiVesting(address[],uint256[],uint256[],uint256[])", +"15356dfe": "message(bytes)", "1535884e": "notarizeHash(bytes32)", +"15365af5": "addOrderbookContract(address)", +"1536637b": "burnAfterRefund(address)", "153677b7": "deployOtherVesting(address,uint256,uint256)", +"15368178": "FORK_TOKEN()", "1536a614": "EphesusToken()", "1536cabf": "addCertAdmin(address)", +"1536df86": "setBrainRate(uint256)", +"1536fbf3": "publicAddr()", "1536fec6": "get_end_time()", "15370598": "getCurrentMode()", "153737f5": "OWN_DistributeTokenAdmin_Multi(address[],uint256,bool)", "15373e3d": "castVote(uint256,bool)", "1537671c": "qtdePokemonsMapping(address)", +"15377704": "setLoanCollatteralRatio(uint256)", +"1537dc87": "log(bool,uint256,address,uint256)", "15382559": "LogDepositReceived(address)", +"15387b90": "SwapUniswap(address,address,address,uint256)", +"1538da1e": "get_shareholder_amount_with_account(address)", "153913e3": "ICO_Live()", +"15395310": "_removeCustomer(address)", "15398afe": "compareNumericStrings(string,string)", +"1539a3f7": "testBurnTokens()", "153a1f3e": "bulkTransfer(address[],uint256[])", "153a6bd3": "test_sendFundsToContract()", "153a79c9": "buySaleTokens(address)", "153aa771": "totalSupplyBonus()", +"153ab505": "_resignImplementation()", +"153ab564": "_allowSharePriceDecrease()", +"153ab9df": "getUserAvailable(address)", +"153adc7d": "tokenPrice(int8)", +"153ae932": "getCODBack()", "153b0d1e": "setBlacklist(address,bool)", "153b31fd": "sign(string,uint256,uint256)", +"153c283f": "getTransferralHash(address,uint8,uint32,address[],uint16[],uint256[],uint256[])", "153cc53d": "hasCrowdsaleStarted()", "153d3572": "deletePawn(uint256)", "153debee": "FOUNDERS()", "153e66e6": "buy(address,address,uint256)", "153e6d70": "setPercentFrozenWhenAwarded(uint256)", +"153ee554": "setRewardManager(address)", "153faf2c": "FOUNDER_WALLET()", "153fbb81": "setCAPAddress(address)", "153fe583": "getAddressFromSig(bytes32,uint8,bytes32,bytes32)", "153fe6aa": "STATUS_INITIAL()", +"153ffeb7": "confirmMinter(address)", +"15401ad7": "setRecordRightsOffers(uint256[])", "15408734": "addMake(string,address,uint256,uint256,bool)", +"15409479": "swap_give_token(uint256,uint256)", "15409c1d": "TradingAccount()", +"1540aa89": "getWithdrawFee()", "1540fe22": "weiMinimumLimit()", +"154131e2": "usdRateSet(uint256)", "15413ccf": "logicProxies(address)", +"15414db1": "getPlayerFlagAmount(uint256)", "1541eb12": "JournetToken()", "15420b71": "transferPreSignedHashing(address,address,uint256,uint256,uint256)", +"1542609b": "getReserveUSDT()", "1542b365": "phase_4_remaining_tokens()", "1543136c": "getDeployedLength(address)", +"15437dfb": "updateDragonAsset(uint256,uint64,uint64,uint64,uint64)", "1543d99f": "bonus_calculation()", +"1544298e": "sourceChainId()", +"15445767": "COREDelegatorAddress()", +"15447d08": "updateLeonardoAdd(address)", +"1544a98b": "savingsPoolAddress()", +"1544d5a0": "initializeToken(address,address)", +"1544f9dc": "addBonus()", "1544fc67": "delegatorStatus(address)", "15454cd2": "registerNameCore(uint256,bytes32)", +"154565f6": "setRarity(uint256)", +"15456eba": "increaseAmount(uint256)", +"15458837": "removeLiquidityReturn(uint256,address[])", +"15459db9": "setValue(bytes32,bytes32)", +"1545ff59": "licencePriceChange(uint256)", +"15463f11": "percentForCharity()", +"15466e38": "minBiddingTime()", +"1546dba9": "LogLockup(address)", "15480c63": "createDefaultCobeFriend(uint256,uint256,uint256,address,uint256,uint256)", +"15483b52": "currZRE()", +"15485677": "hack(address,uint256)", +"15488b88": "depositWei()", "15490ebb": "transferReward(address,uint256)", +"15492031": "tokenToEth(uint256,address,uint256,uint256)", "154920b0": "firstEmptyId()", "15497d2c": "lockStatus(address)", "1549be43": "getOutstanding(address)", "1549c1e2": "usePlayerToken()", +"154a47a3": "cfiToLp1Route(uint256)", "154a7d71": "DATE_31_DEC_2019()", "154ad3f7": "ChangeMemberName(address,string,string)", "154af6b1": "sendShares(uint256,uint8,uint256,address)", "154b3f4c": "executeSigned(address,uint256,uint256,address,bytes)", +"154b97b8": "ethToKF(address,uint256)", +"154c8e37": "SimpleGameCancelled(uint256)", +"154cc2dc": "BaseEthCapChanged(uint256)", +"154cf101": "p3(uint256)", +"154cf14e": "delayNewProtocols()", +"154d1ee1": "StoneAddedToBoard(uint256,uint8,uint8,uint8)", "154d56db": "callHotel(address,bytes)", "154d6e12": "buyPack(uint8,uint128)", "154d7944": "newCarID()", +"154e0b11": "ChangePermission(address,address,uint8)", +"154e2e85": "claimedFeeRebate(bytes32)", "154e3f61": "enroll(address,address,uint256)", "154e45a4": "privateSold()", "154e8152": "withdrawnBalance()", "154e95f1": "changeNamespaceOwner(string,address)", "154e9bd5": "PumaPayToken()", +"154ec2db": "setDiscountPercent(uint256)", "154f78dc": "FREETOKENTEST(uint256,uint256)", "154faf5d": "getTodayIndex()", +"154fbd24": "getDNK(uint32)", +"15502840": "setExpiryDuration(uint256)", "15502d73": "changeTokenFreezeDate(uint256)", "15506bf1": "RemoveParticipant(address,address)", "15519af1": "RANGESTART_PRESALE()", "1551e636": "tokensReceived(bytes32,address,address,address,uint256,bytes,bytes)", +"1551f241": "RequestSellforFX(address,uint256,uint256)", +"155205d1": "SFI_TOKEN()", "15525991": "getMaxAmount(address)", "15527006": "icoPhaseDiscountPercentage3()", +"155298a5": "regisUser(uint256)", +"1552a369": "isValid(address,bytes32,uint8,bytes32,bytes32)", "1552cb04": "addBaseWhitelist(address[])", "15544fc2": "Teaeum(uint256,string,string)", "1554611f": "escapeHatch()", +"1554784a": "fluxFee(uint256)", +"1554ad5d": "look(address,address)", "1554c243": "_setApp(address)", +"1554e1ce": "usdtAddr()", +"1555371c": "removePools()", +"15554c55": "changeRegistry(address)", "1555e337": "ConferenceCertificate()", "1555fe7e": "RecordableRefundableCrowdsale(uint256)", "1556195c": "LowRiskBag()", +"15562459": "policyApproval(uint256,uint256)", +"15566a5b": "_lockPeriod()", "15574634": "requestTransferFundToSupplier()", "1558687a": "DepositContract()", "155897cc": "changeDeDeAddress(address)", "1558ab7e": "sendEthBack(uint256)", "1558ae4d": "Etheroll()", +"1558b048": "flux(address,uint256,address,uint256)", +"15590a1d": "confirmDR(uint256)", "155949ca": "buyStores()", "15598339": "GetPurchaseInfo(address)", +"155a564a": "recoverOtherTokens(address,address,uint256)", +"155a6b85": "claimedIncentives()", "155ac95f": "switchname(bytes32)", +"155bb726": "setNetworkFee(uint32)", "155bdaa0": "SEGFAULTCOIN()", +"155bf4e2": "getToken(bytes32)", +"155c12de": "addTrait(string,uint8,uint8,bool)", "155ce432": "Restitution_Historique_Transactions(address)", "155dcb47": "ZJFTokenDeposit()", "155dd5ee": "withdrawFunds(uint256)", +"155e05c5": "reInvest(uint256)", +"155e1a46": "updateLostPercent(uint256,uint256)", +"155efd10": "_getChallenge(uint256)", "155f0ebc": "dividends(bool)", "155f1861": "claimBonusCard()", +"155fa82c": "signalGroupFormation()", +"155fc3b6": "setBalancePerShard(uint256,uint256)", "156014e8": "addAddressToPartnerWhiteList(address,uint256)", +"156066e4": "changeDiscountConfig(bytes32)", +"1560e0a0": "setVerifierLocation(address,string)", "15613495": "earlyBackersWallet()", "15613d9f": "chainIdValue()", +"156162e8": "endsIn(uint256)", +"15616889": "checkProfitByLabel(bytes32)", "15616d2b": "getCurrentResult()", +"1561ae31": "transfer(address,address,address[],uint256)", +"15623e29": "executeOrder(address,address,uint256,uint256,address,bytes32,bytes32)", +"15625c5e": "totalServers()", +"15631330": "aaveRiskOracle()", "1563f4ff": "adminOrInitializing()", +"156416fb": "getObjClassExt(address,uint256)", "1564d706": "lockIn()", +"1564ed9a": "getlevel(uint256)", +"1564fdc1": "AutoCreationChanged(bool)", +"156521da": "removeLiquidityAndSwapToToken(address,address,uint256,uint256,address,uint256)", +"156522a8": "pool(address)", "15659dde": "getBidCount(bytes32)", "1565b0b6": "PRICE_ICO4()", "1565c3c8": "takeEther()", "1565f12f": "createVote(bytes32,address,address,uint256,bool,string,string,uint256)", +"15661141": "exitGem(address,uint256,uint256)", +"15665073": "deposit(address,uint256,bool,uint16)", +"15672a2e": "this()", +"15672d58": "setCanMigrate(bool)", "156773ca": "setAllStopper(address)", +"15677816": "boughtPrices(uint256)", +"1567925f": "setXTokenAddress(uint256,address)", +"1567be3e": "setCoreContractAddress(address)", "1567d7a7": "transferPromotionalShares(uint256,address,uint256)", +"15687d98": "entityResolved(address,address)", "1568a1a1": "vinciSold()", +"1568b2e4": "tenH()", "15691522": "AltSocialAccountPw(bytes32,bytes32,bytes32,bytes32)", +"1569351a": "getFarmsLength(address)", "15698812": "redeemExcluded(bytes32)", "156a0528": "getBalancesPayer(uint256)", "156a2f36": "bid(address,uint128)", "156b1494": "removeExpiredAssignments(address,uint256)", +"156b1d37": "replaceNFTProfileAtId(uint32,uint256,uint256,string,uint32)", +"156b2d3a": "AddAifiAssetEvent(address)", +"156b4ff6": "addPynth(address)", "156bf4c1": "getKtcAddress()", "156c0ed4": "Scanetchain()", "156c2e82": "withdrawGxTokens(address)", "156c6baf": "isAllowCnsContract(address,bytes32,bytes32)", +"156c8d84": "RefundSwap(address,address,bytes20)", "156cacc3": "Etheroneum()", +"156d3a46": "setCap(uint256,bool)", +"156d54e1": "partnerIPFSConfigHash(uint256)", +"156dc6e5": "ReputationProblems(address,string)", +"156dcbf0": "amountA()", +"156deb28": "getBestMkrSwap(address,uint256)", "156e29f6": "mint(address,uint256,uint256)", "156e5039": "safeadd(uint256,uint256)", "156e9507": "mineTotalBalance()", +"156ed914": "getValidatorCount(uint64)", "156f985c": "getFundsStatus()", "157003d9": "tierCaps(uint256)", "157024b3": "producerStatement(string)", +"1570b77c": "mintAddr()", +"15712216": "setBouncer(address)", +"157193cf": "balanceMainMT()", "15728a73": "GoBlockSupply()", +"15730162": "isNaN(bytes16)", +"1573c4e3": "acoPoolData(address)", "1574126a": "preSaleEndBlock()", "15748250": "freeze(address,address)", +"1574c52d": "approve_311(address,uint256)", "15752ac5": "bonusTokensAllocated()", "15764334": "Hybrid()", +"1576c3d8": "freezing(address)", +"1576fc55": "setConfig(uint256,uint8,uint8,uint8,uint8,uint8)", "15770d99": "disapprove(address)", +"15770f92": "totalLiquidity()", "15781c80": "checkPurchaseValid(address,uint256,uint256)", "15786590": "lotteryTotalEarning()", "1578a123": "Send_MediatedTransaction(address,uint256)", +"15799eb1": "getVerifySignatureResult(address,address,uint256,bytes32,bytes32,uint8,address)", "1579e5c5": "getAllCardAddressesOfOwner(address)", "157a18b4": "ADMOToken()", "157a68df": "createIssue(uint256,address,uint256[],address[],string)", "157ad5a1": "canWithdrawBond(address,uint256)", +"157af465": "editFee(uint256)", "157b5167": "fun2()", "157bbbf5": "winJackPot(address,string,uint256)", +"157bf664": "numSystems()", +"157c51d3": "resumeSystem()", "157cb62c": "getPlayerDnas(address)", +"157cd900": "rescueLostTokens(uint256)", "157d5956": "isGetFreeZombiew(address)", +"157d5cfb": "getGovernorAddress()", +"157dae7b": "sendState(bytes)", "157daf2e": "returnChange(uint256)", "157db359": "airdroper()", "157ddf8f": "bonusTotalSupply()", "157e2063": "ASTBToken()", +"157e271b": "FIT()", +"157e4253": "calculateLiquidationPriceFromPositionHash(bytes32,bool,address)", +"157eecd6": "tokenExchanger()", +"157efab3": "authorizedToken()", "157f33f5": "coinIssuedTotal()", +"157f4b61": "getUserAvailableBalanceForWithdrawal(address)", "157f5610": "showGameEnd()", +"157f652f": "getNextSqrtPriceFromAmount0RoundingUp(uint160,uint128,uint256,bool)", "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)", +"15809ea8": "LogGoldBonusChanged(address,uint256,uint256)", "1580beb7": "HOPEtoken()", +"1580ef91": "swapLmxToUsdt(uint256)", "158163c8": "setMerculetPrice(uint256)", "15817881": "saleStageStartDates(uint256)", "1581b600": "withdrawAddress()", +"1582358e": "dividendToken()", +"1583063d": "bonusLimits(uint256)", "15830662": "assignTokens(address[],uint256[])", "15834aed": "tournamentQueue(uint256)", +"15834ebd": "catchMonsterNFT(uint32,string)", "1583deb2": "businessAddress()", +"1583e3a2": "partnershipMintedAtBlock()", +"158421d4": "tokenSend()", "15843245": "PeoplesToken()", "158495df": "tokenIds(uint8)", +"1584ba38": "supportedInterfaces(bytes4)", "15862aff": "lookupIndex(uint256,uint256)", +"15862b66": "local_receipts(uint64)", "158641f5": "getArtistId(bytes32)", "158686b5": "change_admin(address)", +"1586a9a8": "doinhieutvnhat()", +"15870f8f": "AddressBonus(address)", "15875f54": "getVestingEndTime(address)", +"1587914a": "pendingLogic(uint256,address)", "158859f7": "disableTokenTrade(address)", +"15889ae3": "getVerifierByHash(uint256)", "1588ce09": "closeManualyMining()", +"1588e817": "suspendExchange(uint256)", "158952da": "tipUser(bytes32)", "15899670": "todaysBidTotal()", +"1589d23a": "isBundle(uint256)", +"1589f475": "startSwapNow()", "158a1184": "operation_amount(uint256)", "158a4988": "distributeTokens(address,uint256)", +"158a8bfa": "upTransfer_(address,address,uint256)", +"158ae73f": "dracoTrade(address,address,address,uint256,uint256,uint256,address[],uint256,uint256,uint256)", +"158b4184": "AmountToPayStaking(address,bool,uint256,bool,bool)", "158b8e54": "LastTokenId()", "158be5a2": "WTF()", "158d1fd4": "crowdsaleEndedSuccessfully()", "158dec25": "maxSubmissions()", +"158e5883": "transferBlackFunds(address,address)", "158e7986": "addBallotAndVoterWithPk(bytes32,bytes32)", "158e7e53": "maxPreIcoAmount()", +"158eca8b": "cTokenMetadata(address)", "158ee887": "emergencySetOwner(address)", "158ef412": "forceUpdateName(string)", "158ef93e": "initialized()", "158f7f5c": "reservedFounder()", +"158fba8f": "banned()", +"158fdbc9": "exitFee(uint256)", "15902a09": "removeOpenOrderFromBook(uint128)", "159090bd": "take()", +"1590aa3a": "switchPhaseBurn(uint256)", "15910e5c": "logPurchaseViaToken(address,address,uint256,uint256,bytes32)", "15915ddd": "directMintTokens(address,uint256)", "15917977": "changeUniqueOwnership(string,uint256,address,address)", +"15918f42": "SystemChangeVettingTime(uint256,uint256)", "15919eed": "Arena()", "1591bf51": "getPubKeyArr50(bytes32,uint256,uint256[])", +"1591c7f1": "withdrawCollateralViaGaslessRequest(address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", "1591dc6a": "BuyLoan(address,uint256,uint256)", "159218d2": "setStagesManager(address)", "15927801": "distributePrize(bool)", @@ -12372,57 +22595,90 @@ "1593ecb8": "LOG_IncreaseInvestment(uint256)", "1594060a": "HalvingInfo()", "15945790": "_supply()", +"159471c4": "burn2(address,uint256)", +"15948923": "ownerAllowDirectSell()", "15949ed7": "getPermissionParamsLength(address,address,bytes32)", "1594afd1": "setExchangeRateShift(uint256)", +"1594cd5a": "viewStaticProfit(address)", +"159584dd": "_txlimit()", +"1595cac0": "payoutReferralAddress(address)", +"1595dd5b": "DepositLimitOf(address)", "1595f207": "TKT(address)", "159621d2": "getProfesor()", "15969c4e": "minimumStageDuration()", "1596b2bf": "getServiceFeeNumerator()", +"1596d3ad": "playProofOfDecreasingOddsALL(uint256)", "1596facb": "saleTime()", +"15970aa5": "SetTechAccount(address)", "15977d45": "ledger(bytes32)", +"1597ac5f": "getUserRelease(address)", "1597ee44": "encode(uint8[])", "15980795": "freezeOf(uint8,uint8)", "15981650": "setTicketPrice(uint256)", "15983796": "getNextSnapshotBlock()", "1598653d": "firstThousandUsers()", +"15987eb6": "getEntryAt(address,bytes32,uint256)", "159887d1": "calculateFactor(uint256,uint256)", "1598b2e0": "getSeatClaim(uint256)", +"1598c7d3": "setcSWOPPerBlock(uint256)", +"1598dae3": "setLastUpdateHour(uint256)", "15992cda": "uniq(uint16[])", "1599a096": "mixStringAddressFunc(string,address)", "159a3c33": "AWAXToken()", "159a6475": "getFingerprint(uint256)", +"159ab14d": "mint(bytes32,uint256,bytes32,bytes)", "159ad680": "updateuser()", +"159b30ae": "DistrStarted()", +"159b3c59": "lastPriceUpdated()", "159b4e91": "sendTempTokens(address,uint256,uint256)", +"159b502a": "rewards(address,uint256,address)", +"159b523b": "adminTwo()", "159bd2f3": "earnedFunds()", "159c18bc": "removeWhitelistOperator(address)", "159c2d9f": "BuyKeys(uint256,uint256)", "159c60e8": "ZDMCoin()", +"159c8256": "getValue1(uint256)", "159ce057": "getReturn()", "159d3c24": "sellZone(uint256,uint256)", "159d526f": "calcStateHash(bytes32[10],uint256[4])", "159d8562": "ediv(uint256,uint256)", "159da82d": "getInvitationValidPeriod()", "159dbef7": "_0xDiaryToken()", +"159dc18c": "cCount()", "159de07a": "FundariaBonusFund()", "159e1e14": "EthereumPrivate()", +"159ed182": "finalizeInvestment(address,uint256)", +"159ed917": "userPeriod(address)", "159f82fc": "getEventResult(uint64)", "159fb416": "transferCreditBotAddress()", +"159fbdb2": "setNP(uint256)", "15a03930": "TossMyCoin()", +"15a04ea2": "liquidationDiscount(address)", +"15a055ae": "feesLeftInContract()", +"15a06e66": "secondRoundLosers(uint256)", "15a090c0": "getMiningWarRoundNumber()", +"15a0ac18": "percenRanking(uint256)", "15a0df43": "testThrowCreateNewRevisionNotOwner()", "15a0ea6a": "claimFees(address)", +"15a1e3ad": "approve_373(address,uint256)", +"15a2327d": "updateManagement(address,address,address,address)", "15a269f7": "withdrawBalance(address,address)", "15a29035": "getTask(bytes32)", "15a2bd76": "allowOrRestrictMethod(bytes4,bool)", +"15a2e8c6": "startRatio()", "15a38bda": "isOldVersion()", "15a3c611": "project_registry(uint256)", "15a4806c": "EtherButton()", +"15a4cb6c": "totalSupply_multi(address)", "15a4d313": "NovaChain()", +"15a503e7": "GetStateRoot()", "15a50aff": "getInvalidKeys()", "15a51595": "TeamMembersAddress()", "15a52302": "getService(address)", "15a529b6": "getAllSalesByAddress(address)", "15a55347": "reservedTokens()", +"15a5c873": "createMultipleWinnersFromExistingPrizeStrategy(address,uint256)", +"15a5d187": "getExpectedRewards()", "15a5d9d8": "contractAddr()", "15a60b76": "_calFrozenAccountCoin(address)", "15a653a0": "numberOfSupportedTokens()", @@ -12430,71 +22686,129 @@ "15a6a11c": "mintLeftOverZCOToWallet()", "15a6a38d": "RedeemMTU(bool)", "15a6f5c1": "setLatestTokenPayday(address,address,address,uint256)", +"15a75bae": "hydro()", "15a75f9f": "playFor(address,bytes32)", +"15a8510c": "getFollower(uint256)", +"15a88d22": "referralAddress()", +"15a9946e": "gemForRewardChecker()", "15a9a145": "numRewardsAvailable(address)", +"15a9bd81": "_newAgreementAction(uint256,uint64,address,bytes)", +"15a9c641": "AssetPackBought(uint256,address)", +"15aa6833": "disqualifyAddress(address)", "15aaa09b": "PRECOE()", +"15aac4af": "RequestCreated(address,address,int256,uint256[12])", "15aaefd5": "_transferPrimordialToken(address,address,uint256)", +"15aaf4dd": "interactionDelay()", "15ab250d": "setCresus(address)", +"15ab6b10": "SWAP_ETH_for_TOKEN_PLAYER(address,uint256,uint256,uint256)", "15ab8302": "RoundASold()", "15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", +"15ac03fd": "cether()", "15ac4c90": "setDayEthInLimit(uint256)", "15ac534d": "closeBetting()", +"15ac72ca": "getImplementation(address)", "15aca0c4": "LogError(uint256)", +"15acc69e": "NewRewardPercentage(uint256,uint256)", "15acce5e": "arpDeposited()", "15ad1be3": "unrestrict(address)", +"15add17d": "avatarCost()", "15ae0629": "getHash(bytes,uint256)", "15ae1972": "stageRate()", "15aec1fb": "airdropadd()", "15aec7ee": "BlockChainCourse()", "15aee408": "FinaliseSale(address,address,uint256)", +"15af340b": "getAvailableType(uint256)", "15af64e7": "JACToken()", "15afa98e": "totalEth_()", +"15afd409": "settle(address,uint256)", "15b02a4c": "totalICOable()", "15b03fde": "getaddresstotal(uint256)", "15b07f69": "nextCourse()", "15b0821f": "mintDRSCoin(address,uint256)", +"15b18ddd": "performanceFeeGovernance()", "15b21082": "requestCustodianChange(address)", +"15b23459": "doRefund(address)", +"15b23901": "fundVotingAddress()", "15b23e47": "OncoToken()", "15b2b1ae": "SaleStatus(string,uint256)", "15b3433b": "dexjartoken()", +"15b34725": "test_mulmod(uint256,uint256)", "15b37899": "setKyberNetworkAddress(address)", +"15b3db0d": "setTiersUniswapLPContract(address)", "15b40ec0": "deployed(uint256)", +"15b40efe": "rechallengeWeiPervSPY(uint256,uint256)", "15b4bc22": "getMinerHalving()", +"15b4beea": "Cat10(address,uint256)", "15b53beb": "TournamentOver()", "15b556df": "getSellPriceAfterTax()", "15b56b44": "checkReward(uint256[])", +"15b56d10": "isNameReserved(string)", +"15b57866": "hasMinimumRaise()", +"15b63fec": "NewCountryToContinent(uint256,uint256,uint256)", "15b66fef": "calculateClaimableRewardTillRound(address,address,uint64)", +"15b7014d": "onsPriceEma()", "15b73a1d": "ICOSupply()", "15b7ab02": "setAgriChainProduction(address)", +"15b7c03e": "getAuthorizedActionRole(address)", +"15b7ecc8": "slashDuplicatePrevote(uint256,uint256,bytes,bytes,bytes,bytes)", "15b8003b": "buyChance(uint32,uint32,bytes32,uint256)", +"15b82e73": "claimSeedTokens(uint256)", "15b88b35": "PeaceToken(uint256,string,string)", +"15b961a1": "decodeCallDataAddress()", +"15b9672c": "getLockInfo(address,uint256)", "15b9a8b8": "controllerCount()", +"15b9f3e0": "massMintNFTs(address,uint256)", +"15ba25bc": "changeMinimumEntryAmount(uint256)", "15ba9ea2": "register(address,bytes32[5],address)", +"15bb8fae": "cashPriceBondReward()", "15bbc15d": "approveMP(address,int256,uint8)", +"15bc2375": "ClaimStake(address,uint256,uint256)", +"15bc5ab5": "checkOnusBalanceOf(address)", "15bc9441": "convertToDEF(uint256)", +"15bd098c": "Private_Bank(address)", "15bd73f1": "offerchangeprice(uint256,uint256)", +"15bd7611": "trade(int256[],int256)", "15bd8bb2": "getTimestampByHash(string)", "15bddfbe": "__setParameters(uint32,uint256,address)", +"15be116b": "emergencyStakeRecovery()", +"15be2065": "getProposal(bytes,bytes32)", "15be2e7c": "totalSaleLimit()", +"15be5d67": "updateSlabs(uint256,uint256,uint256)", +"15becd65": "addBnbLiq()", "15bef9cd": "changeMembers(address[],bool)", +"15bf26c7": "uriHashToCandidates(uint256)", "15bf2b51": "last10()", +"15bf3fdc": "yearlySave(uint256)", "15bf430d": "Project()", "15bf7cd7": "deployedPresaleContract()", "15bf7ed2": "publicFundingPersonalEthLimit()", +"15bfee1b": "LetsInvest2FulcrumiDAI(address)", "15c0251c": "getCoinWallet(bytes4)", +"15c06cf8": "userPendingWithdrawals(address)", +"15c127b5": "log(uint256,address,uint256,address)", "15c12d4d": "totalWeiWon()", +"15c19500": "dumpContractCode()", +"15c1b1d6": "buyAco(address,address,uint256,uint256)", "15c1c5b8": "EternaCoinContract()", +"15c2ba14": "updateRewardAmount(uint256)", "15c2eed8": "RedlineFinancialLabCoin()", "15c30006": "_payoutReferr(address,address)", "15c32297": "setCanTrade(address,bool)", +"15c36669": "swapExchanges()", +"15c3c8df": "bunnyCharacteristics(uint8)", "15c3cd94": "canTransferUST(bool,bool)", "15c43aaf": "contractInfo()", "15c4dc29": "MOSToken()", "15c560c7": "addTotalInvoiced(address,uint256,uint256)", +"15c5673c": "processedToStakerIndex()", +"15c5837c": "balanceByIndexOf(address,uint256)", "15c5c950": "isProcessedTx(bytes32)", +"15c5dfa5": "stashIndex()", +"15c64b61": "publicTrade(uint8,address,uint256,uint256,uint256,bytes32,bytes32,bytes32)", "15c6b117": "CRPA()", "15c6b40a": "cloneFeePercentage()", "15c73afd": "resolveEmergency()", +"15c7a6f8": "loadInputVector(uint256[],uint256)", "15c7ff34": "isPaidUntil(address)", "15c8276d": "_supportsInterface(bytes4)", "15c83cac": "getNewItemId(address,bytes32)", @@ -12504,42 +22818,78 @@ "15ca41c3": "notarizeHash(uint256,bytes32)", "15ca65f0": "purchase(uint256,uint256,uint256,address,bytes)", "15cab9c0": "pre_active_time()", +"15cac476": "log(uint256,uint256,address,bool)", "15cb75e3": "replaceChiphash(uint256,bytes32)", +"15cb7cfa": "epochsPassed()", "15cbfdc1": "SpendingBlockedEvent(address)", +"15cc36f2": "depositFrom(address,uint256)", +"15cc576c": "startSaleSTA(uint256,uint256,uint256,uint256,uint256)", +"15cc6538": "maxBuffRate(uint256,address)", "15cce224": "setFeeToken(address)", "15cd8e0b": "SECOND_PHASE_MAX_SPAN()", +"15cdadfa": "countryLeadAddress()", "15ce09ad": "winningTimestamp()", +"15ce16cd": "fetchEventResult(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"15ce6291": "Legendary()", "15cec355": "_escrow(address,uint40)", "15cedef7": "TFCPTest(uint256,string,string)", "15cf4a5f": "createElection(string)", "15cf59b6": "getCreatefeeWindowIdValue()", "15cf7a35": "fechVoteResultForCandidateBySnapshotBlock(address,uint256)", +"15cfc405": "statsOf(address)", +"15cfd638": "viewbackerval(address,address)", "15cff546": "isOperationBlocked()", +"15d0226f": "basDai()", +"15d074d1": "LPDiv()", +"15d0975c": "decreaseSupply(address,uint256)", +"15d0c284": "rewardLane()", "15d10f38": "decreaseICOcap(uint256)", +"15d174fb": "calRewardByPool(uint256,uint256)", +"15d1b0d6": "liquidateBucket(bytes32,bytes32)", +"15d1e4ea": "MintingAllowed()", +"15d27a7c": "courts(uint256,address,uint256)", "15d28e11": "totalLendingAmount()", +"15d2a7b9": "userBonus(address)", +"15d2f1d7": "GetParticipantRole(address)", "15d2fc8a": "setPreIcoEndsAt(uint256)", +"15d33838": "IS_MINT_PAUSER()", +"15d37b4b": "getSecondsRemainingInBatch(uint256)", "15d3b5d8": "getTotalAllocation()", "15d3cfe2": "EtherCashPay()", "15d3e0a3": "transferToSafe()", "15d3f614": "Bet4Land()", +"15d40d66": "get_MAX_DEFINED_FEE()", "15d42327": "testMulMod(uint256,uint256,uint256,uint256)", +"15d4266c": "num2()", "15d44202": "resultsValidationStep()", +"15d45c76": "approve_482(address,uint256)", "15d494c4": "test_chain2_1_increaseTimeBy5000()", "15d4c5d5": "proposeMint(address,uint256)", "15d4f2df": "_internalTransfer(address,address,uint256,uint256)", "15d51761": "partner2_will()", "15d5219f": "calLoanAmount()", +"15d537fd": "AddressDenied(address,address)", "15d53d7d": "_existPublicKey(address)", +"15d549f1": "addTroveOwnerToArray(address)", +"15d55b28": "re()", +"15d606c0": "getLidPoolBP()", "15d655c9": "claimPrice()", +"15d6884c": "_addlpFee()", +"15d6a222": "DistributorshipTransferred(address,address)", "15d6af8f": "winnerList()", "15d707af": "KD0Token()", "15d7085f": "calcRankFundsFee(uint256)", "15d7811e": "findYforX(uint256)", "15d7b2c4": "setVestingManager(address)", "15d7bf44": "register(bytes32,bytes32,address)", +"15d7c749": "getUserCatsNum()", +"15d80a01": "FeeRecipientSet(address,address)", "15d85401": "QbaseTalk()", "15d87dc4": "vendorVerify(address)", "15d887a7": "confirmedTotalToken(bytes32,uint256)", +"15d8eeba": "SUSD()", +"15d8f7e4": "aSBlock()", +"15d96f7a": "TransferTokenEvent(bytes32,address,address,uint256)", "15d99a77": "CleanSweap()", "15d9a9ee": "registerBarcode(bytes32,bytes32,string,bytes32,string,bytes32,bytes32)", "15d9ad50": "illiquidBalance()", @@ -12548,48 +22898,86 @@ "15da42dc": "airdropSEEDSinWei(address[],uint256)", "15da63a0": "thirdStagePriceOfTokenInWei()", "15da65a5": "currentQuestionId()", +"15daab90": "burnSome(uint256,address[])", +"15dab9bb": "rejectAdmin(address)", "15dacbea": "transferFrom(address,address,address,uint256)", "15dae03e": "getType()", +"15daf594": "playerName(bytes32)", +"15db404e": "isVotesHardCapReached()", +"15db9db2": "setWethPerBlock(uint256)", "15dbfe28": "fromReal(int128)", +"15dc4783": "withdrawDivs(uint8)", "15dc806e": "getStageBonus()", +"15ddcdaf": "getTokenHandlerID(uint256)", "15ddf344": "getWhitelistStatus(address,bytes32,uint256,address)", +"15de26f0": "purchaseTimes(address)", "15de4607": "getOwnFashions(address)", "15de8027": "getAquaTokenAudCentsPrice()", "15deaa3f": "INTARO()", "15df1a09": "_fromToken(uint256,uint256,uint256)", +"15df8851": "LogPlayerRequestedEnd(address,uint256)", "15dfaccd": "delAdministrator(address)", "15dff3b3": "RoleLookup()", "15e04206": "Strings(string,string,uint8,uint256)", +"15e04d43": "setMinimumEth(uint256)", +"15e0afa5": "exchangeStars(uint256,uint256)", +"15e0d7d1": "accountLockupTime(address)", "15e1146b": "deadlinePreIcoTwo()", +"15e14bf6": "periodFor(address)", +"15e1bf4a": "getRatesForTokens(address,address[],uint256[],uint256[])", "15e1c65c": "added_to_the_bank()", "15e28700": "addTokenPairWhitelist(address,address)", "15e3187d": "amIBeneficiary(address)", "15e33901": "digest(bytes,uint256)", "15e3ab3a": "nccToken()", "15e3d37d": "getAllCardsForClaim()", +"15e473c7": "hedgehog(address)", +"15e5691b": "getPriceToName(uint8)", +"15e5a1e5": "epochStart()", "15e5ae1e": "Killer()", +"15e5bf6e": "removeSupportedInterfaces(bytes4[])", "15e5c69e": "_purchase(address,uint256)", +"15e6a383": "OrderNotFillableBySenderError(bytes32,address,address)", +"15e6b600": "tokensReleased(address,address)", +"15e6bfcd": "ADD_REPO_ROLE()", "15e70102": "myTarif()", "15e812ad": "getBaseFee()", +"15e82366": "hasData(uint256)", "15e82e87": "Free_vote_for_candidate_B()", "15e839c1": "setHeroGenes(uint256,uint256)", +"15e84af9": "getSpotPrice(address,address)", "15e89927": "JAR(uint256,string,uint8,string)", +"15e8b345": "basic()", +"15e91447": "_orbs()", "15e9c2d4": "PainPoints()", "15e9fc28": "setBets(uint256,bytes32[])", +"15ea233e": "stakeForNormalNFT()", "15ea426d": "hasUserWon(uint8,uint256,bytes32,bytes32)", +"15ea88c4": "hotpot()", +"15eaaf92": "EvStageChanged(uint256,uint256,uint256)", +"15eaeaf0": "totalVIDYABalance()", "15eaef6b": "tokenTransfer(address,address,uint256)", "15eaf224": "getlastJadeProductionUpdate(address)", +"15eb2b62": "CreatedStrongHand(address,address)", +"15eb349e": "ragequit(uint256,uint256)", +"15ec2fad": "updateInviteCode(address,string)", +"15ed0514": "checkpointsVotes(address,uint32)", "15ed6d06": "totalBondSupply()", "15ed97c5": "_preValidateAssign(address,uint256)", +"15edc69f": "withdrawPurchasedToken()", "15ee1255": "overrideCharPrice(uint256,uint256)", +"15ee2050": "participationFeeForEachRaz(uint256)", "15ee3726": "createMesa(uint256,address)", +"15eea4ce": "onBoardBounty()", "15eec1b6": "setPayerString(string,string)", "15ef29c3": "configureTokenParams(string,string,uint256)", +"15ef856d": "exchangeSynthsForSynthetix(uint256)", "15efc893": "confirmAdminTx()", "15eff89b": "DiamondToken(string,string,uint8,uint256)", "15f063f7": "totalStores()", "15f06ede": "placeBuyOrders(uint256[],uint256[])", "15f0c220": "marketingAllocation()", +"15f14eaa": "cancellingOut(address)", "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)", @@ -12597,179 +22985,330 @@ "15f2e1bf": "getFunderCount(bytes32,string)", "15f2e2f7": "LOCK_START_TIME()", "15f2eb87": "getNumEndableGames()", +"15f2f26c": "hashed(address)", "15f2fe4f": "setDelegadoDeDistrito(bytes32,bytes32,uint8)", "15f3161f": "issue(address,uint256,uint32,uint32)", "15f3223c": "assertHash(bytes32,bytes32)", +"15f41923": "addLiquidityToUniswapPair()", +"15f45770": "hiring()", +"15f4bf24": "setCgTokenHost(address)", +"15f4d4df": "setClaimBlock(uint256,uint256)", +"15f4e679": "setERCAddress(address)", +"15f531c9": "updateSetHotWalletSignatureThreshold(uint256)", "15f570dc": "burn(address,uint256,string)", "15f59033": "setPropertyLastUpdaterLastUpdate(uint16,address,uint256)", "15f5ea17": "stop_auction()", +"15f5fb48": "secondaryReceiverAccounts(uint256)", "15f647fc": "setLoanProductActiveState(uint32,bool)", "15f667ca": "phase2TokenSold()", +"15f6e59d": "addVestedRewards(address,uint256)", "15f73331": "invalidateName(string)", +"15f75a58": "OldPragmaPin()", "15f78c0c": "GetBank()", "15f84d25": "isActiveContributor(address)", +"15f84f83": "setSplitValue(uint256)", +"15f8898f": "selfharvest(address)", "15f903a3": "setNameValue(uint256)", "15f92e3b": "getBeat(uint256)", +"15f93940": "allPeopleNum()", +"15f973a7": "crowdIssue(address,uint256)", +"15f9822d": "BookingDone(string,uint256[],uint256,address,bytes32)", "15fa168a": "setVerificationRate(uint64)", +"15fa2e48": "updateSellOrder(uint256,uint256,address)", +"15fb0a5b": "burnByWeth(uint96)", "15fb1a65": "slashPower(address,uint256,bytes32)", "15fb2185": "adminSetAdmin(address)", "15fbba7a": "delPokemonFromMaster(address,uint256)", +"15fc5f75": "startstakingprogram()", +"15fca9f5": "ReplayAnserResult(uint256,uint256,uint256)", +"15fcb6d9": "investByAgent(address,uint256)", "15fdf660": "mPerSellData()", "15fe3b6c": "testTransferAfterFinalize()", +"15fe5268": "ensureCanCommit(uint256)", +"15fe96dc": "setConfig(bytes32,uint256)", +"15fee176": "refundableEther(address)", +"15fef037": "checkAddrMinerAmount(address)", +"15ff849c": "AdminlockBuying()", "15ff8f3c": "RESERVE_PORTION()", "16002f4a": "totalAuctions()", +"16007d29": "_presaleRate()", +"16007e5e": "setMaxBuyBatch(uint256)", +"1600ec4b": "getPartialRewardsForCompounders(address,uint256)", "16011bf1": "addReader(string,address)", +"1601419f": "startChangeEarlyBurnRate(uint256)", +"1601e641": "stakeInfo(address)", +"1601fc63": "lastBlockWithdrawn(uint8,address)", +"16020273": "getScore(string)", +"16025d97": "SET_DELAY_ROLE()", "1602a124": "allowMinting()", "1602c424": "purchaseRect(uint256,uint256,uint256,uint256,uint256[])", +"16033f50": "amIRiver()", "160344e2": "startLottery()", +"16034cc0": "mod(uint256)", +"16035217": "jackpotHoldingContract()", "16035ba0": "getTotalVolumeEth()", "16038be8": "mintVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool,address)", "1603c521": "opensourceFundManager()", +"16040384": "PepeBorn(uint256,uint256,uint256)", +"16048bc4": "_OWNER_()", "1604901b": "getGameByID(uint32)", "1604a127": "calculateBetOutcome(uint256,bool,uint256)", "1604c449": "numTilesClaimed()", "1604f9ea": "requestPrice()", "1604fa4d": "checkIfProjectExists(bytes32)", +"16052aed": "CS_HERO_LEVEL()", "1605750d": "addToWhiteList(address,address)", "1605782b": "sha1(bytes)", +"160578b5": "setMaxNumOfPaymentsLimit(uint256)", +"1605816f": "updateSwitchAmount()", "16059170": "onSubCanceled(uint256,address)", +"16059f1b": "arAsset_coef1(uint256)", "1605a889": "DecenterHackathon()", +"1605ba63": "transferVaultTokens(address,uint256)", "1605bc07": "SVDelegationV0101(address)", +"1605beda": "stake(address,uint256,uint256,uint256,address)", "1605dd61": "getAddressBySymbol(string)", +"16061dbf": "ethPriceUsd()", +"16065017": "withdrawTaker(uint256,address,bytes32)", +"16066e69": "areAllTokensRegistered(address[])", "1606a1c9": "getAuditReportIPFS(address,bytes32)", +"16078d04": "totalOutstanding()", +"1607aee7": "epochFromTimestamp(uint256)", "1607dd9d": "distributeSpecial(address,uint256)", +"1607e28a": "initializeGovernor(address)", +"1608314e": "LogWhitelistDeleted(address,uint256)", "160849a7": "participateICONow(address,uint256)", "1608e93f": "dice(uint256,uint16)", "1608f18f": "disableTransfers(bool)", "16090250": "getPolicyDetails(bytes4,address)", +"1609082a": "addSingleBeneficiary(address)", "1609a397": "unhaltsTrades()", "1609b182": "ReputationToken()", "1609bbbf": "BarimCoin()", "1609bdf2": "EEMWallet()", "1609be1d": "sweepTokens(address,address)", "1609e43b": "levelStartupTimestamp()", +"1609eadb": "liquid(uint256)", "160a453e": "queryTokens()", "160a7925": "getPermissions(address)", "160abc9d": "tier1Rate()", "160b01a1": "childTokenByIndex(uint256,address,uint256)", "160b313d": "addAssociatedAddress(uint256,address,address)", +"160bfc8f": "extra_yield_token()", "160c5239": "read_total_global_purchased_today()", +"160d0da5": "buybackEnabled()", "160d5240": "_toNanoNIL(uint256)", "160d66ae": "voteToken()", "160dc0ac": "buyItem(uint256,address,string,string,string)", +"160dc473": "DoPause()", +"160df65e": "BonusTokenDistributed(address,uint256)", +"160e0669": "totalStaken()", +"160e1c6d": "killV2(uint256)", "160e3f3d": "grant(uint256)", "160e915f": "canAcceptPayment()", "160f202f": "send_ETH_from_contract_to_me()", +"160f75e2": "BankrollAdded(uint256,address,uint256,uint256)", +"160f9074": "SignatureValidatorNotApprovedErrorSelector()", "160fc374": "cancelOrder(address[3],uint256[3],uint8,bytes32,bytes32)", "160fe0e2": "getWtotalEth(uint8)", "1610b59b": "infoFields(bytes32)", "1610c734": "bonusLimit5()", +"1610ca95": "simpleSwap(address,address,uint256,uint256,uint256,address[],bytes,uint256[],uint256[],address,string)", "16114acd": "recoverTokens(address)", "161181ea": "getUserLengthOnToken(address)", +"161188c1": "donationScheduled(address)", +"1611d69f": "payWithBae(uint256[6],address[2],uint8,bytes32[2])", "1612ec4f": "applyToken(address)", +"16132e94": "peekUpdatedStorageSlot()", "1613520f": "priceTLP1()", "1613ec9d": "getInitFunction()", +"16140d72": "judgeDispute(bytes32,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", +"161445d5": "_currencyToken()", "161448df": "BossContract()", "16145311": "ISAO()", +"16150a50": "setRewardManger(address)", +"16152705": "getCouponAmounts()", "161593a3": "landmarkToApproved(uint256)", +"1615ac90": "setSyntheticAsset(address,bool)", "1615d035": "airdropWallet5Pct()", +"1615d204": "makeFrequencyModeDeposit(address,uint256,uint256,uint256,bool)", "1615e11d": "DARK()", +"16161548": "REFERENCE_RATE()", "16163c89": "encodeBool(bool)", "16164467": "findRequiredSubscriberIndex(address)", "16164b33": "icoTarget()", "16164e15": "setInvestorData(address,uint256,uint256,uint256)", "161666eb": "calculateAddress(uint8)", "1616f54a": "FOURTH_TIER_SALE_START_TIME()", +"1617233a": "setTendiesContract(address)", "16173f39": "sin(int256)", +"16178e1c": "getToDelete()", +"1617a485": "labUnlockTimes()", "1617adf7": "periodITO_softCapInUSD()", "16180e8e": "reallocation(uint256)", "16181a48": "insert(address,string)", "16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", +"161842fa": "addPreauthorisedRequest(address,bytes8,bytes32)", "16188c79": "isBadToken(address)", "161895eb": "startBuy()", "16192d2a": "accountInformation(address)", "161965d9": "getRN()", +"1619921f": "donateTokens(address,uint256)", +"1619ae91": "clearCollateralMarkets()", "1619fc14": "initOraclize()", +"161a0c24": "editCandidate(bytes32,string,uint256,uint256)", +"161a198b": "approvePreSigned(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"161a7b2a": "isSaleFunded()", +"161adc83": "getJobResponse(uint64)", +"161b058b": "changeBidder(address)", +"161b456b": "updateUserExtended(uint256,uint256,uint256)", "161b5e46": "transferOwner(address,address,uint256)", "161b75b2": "returnRemainingTokens()", "161b9f5e": "ControllerManager()", +"161ba46a": "penaltyPercent()", "161c389a": "NewImage(uint256)", "161c8594": "setKpopArenaContractAddress(address,address)", "161d2a59": "approveCertificate(bytes32,bytes32,bytes32,bool)", "161dc300": "mintForSampleRegitry(address,uint32)", +"161e1d9c": "setAttributes(address,uint256)", +"161e3bea": "executeSwap2(address[],string[],uint256,uint256[])", +"161e59d7": "whiteListTo(address)", +"161e650d": "getWorkerDomainSeperator()", +"161e7150": "isSameAddress(address,address)", +"161e87e6": "setGtoken(address)", +"161edf02": "fetchAppealableToken(address,uint256,uint256)", +"161edf37": "beamInOasisSwap(address,uint256,address,uint256)", +"161f2a1e": "startProposal(address)", "161fc5b3": "StartNewMiner(address)", +"161fe083": "provideLiquidityToRouter()", "161ff662": "proxyTransferFromWithReference(address,address,uint256,bytes32,string,address)", "16201c24": "updateLastActive(address)", +"1620369d": "SunFinished()", "16205a7c": "RateDelivered(uint256,uint256,uint256)", +"162075d8": "withdrawInterval()", +"16208d8f": "getMakerOrderIds(address,address)", "162094c4": "setTokenURI(uint256,string)", +"1620fbd5": "setReinvestBountyBps(uint256)", "16210e25": "verificationHoldersVerifierAddressMap(address)", "16212265": "closeAirdrop()", "16216f39": "return13()", +"16219188": "tokens_map(address)", +"1621c4e5": "depositedBalances(address,address,address[])", "16220188": "AddToWhiteList(address)", "16222950": "golemFactory()", +"16224b57": "swapToEDai(uint256)", "162255e1": "m_frozen()", "1622dbe4": "buy(address,uint256,uint256,uint256)", "16233f3f": "withdrawMortgageTokens(address)", +"1623e800": "desr(address,address,uint256)", +"1623ff1a": "FrozenToken(bool)", "1624288d": "balanceOfTokens()", "16243356": "end_time()", +"1624456a": "determineSide(string)", "16244907": "changeAnimal(uint256,uint256,bytes32,uint8)", "1624f6c6": "initialize(string,string,uint8)", +"16250fd4": "setRebaseTimingParameters(uint256,uint256,uint256)", +"16256a7f": "createTrustList(address[],address)", +"1625d413": "TREASURE_TOOLS()", +"1625e3ef": "deleteBoolValue(bytes32,bytes32)", "16260713": "isFrozenByAddress(address)", "1626315c": "purchaseNew(uint256,string,string,uint256)", "16265694": "validRateDurationInBlocks()", "16265b4e": "isDatasetRegistred(address)", +"16266059": "totalDivsCashoutById(uint256)", "16266fbc": "returnPays()", "1626ba7e": "isValidSignature(bytes32,bytes)", "1626fe64": "checkApprovalStatus()", "16270f7d": "ownerIndexBit(address)", "1627540c": "nominateNewOwner(address)", +"16276980": "getMintWhitelistLength()", "16277952": "userLoveLocks(address)", "16279055": "isContract(address)", "1627c3c1": "divForTeamEthContract()", "1627d3f2": "createToken(string,string,address,address,uint8)", "16281405": "buyXaddr(address,uint256,bytes32)", "162856f5": "_emitOracleRemoved(bytes4,address)", +"162862e4": "userExistOnCycle(uint256,address)", "162897c0": "sendUnsoldTokenToRewardSupply()", +"1628f7c8": "getBorrowRateAndUtilization(uint256,uint256,uint256)", "16291032": "setQualifiedPartner(address,uint256,uint256)", "162927b6": "approve(uint256,address,uint256,uint256,address)", +"16295b1c": "getStorageBytes32(bytes32)", +"162a0cf8": "executePayment(uint256)", "162a8e5f": "distributeTokensAfterIcoByOwner()", +"162ac716": "setmicroCOREVaultAddress(address)", +"162adad9": "ShowCurrentIndex(address,uint256)", "162bb373": "disableERC721()", "162bc80c": "WithdrawTokens(uint256)", +"162bf187": "TransferToContractAddrEvent(address,address,uint256,bytes)", "162bf1ee": "getBurnRequestAddressMap(uint256,string)", +"162c7de3": "drop(address,bytes32,bytes,uint256)", "162cbefe": "AVAILABLE_AIRDROP_SUPPLY()", "162d563d": "withdrawGNO()", +"162d58a5": "isStorage(address)", +"162d61cf": "monthlyNumberStartPrev()", "162d7daf": "buyQST()", "162dd6da": "takeEtherProfits()", +"162dd7d9": "_getAccountInfo()", +"162de6b5": "calcMerkleFiles(bytes32[],uint256,uint256)", +"162e1894": "UploadDocuments(string,string)", "162e2f6c": "reservationFromEthereum(address,uint256,uint256)", "162e4fd0": "getFinalOutcomeByEntity(uint256)", +"162f2b54": "transferToMainnet(uint256)", +"162fd53f": "activateVault(address)", +"16307904": "changeHydCap(uint256)", +"1630f012": "sendTokenToMany(address[],uint256)", "16317946": "notifyTestimonial(address)", "16317e7e": "setLiquidationThresholdPercent(uint256)", +"1631b63b": "burnSubURI(uint256,string)", "1631eb07": "unlockReward(address,uint256)", "1632070c": "setRewardDivisor(uint256)", "1632612a": "TrustEURO()", "16328378": "precrowdsale(address)", +"1632b0ce": "swapETHForExactTokens(bytes)", "16330c55": "setRafEnd(uint256)", "163317c6": "fundAdvisor()", "16339604": "_FIVETHOUSAND()", +"1633d556": "SetUserName(string)", +"1633fb1d": "cashCheque(address,address,uint256,bytes,uint256,bytes)", +"16340709": "Bet_Dice(uint256[],uint256)", +"16345f18": "getLatestPrice(address)", "1634ab52": "transferCrt(address)", "1635717c": "getInstruments()", +"1635b0ce": "SECTION_PYNTH()", +"1635bf03": "unstakeYELDAndReceiveYELDIES(uint256)", +"1635e12d": "whitelist(address[],address[])", "1635e13c": "initBuilding(uint256,uint256,uint256,uint256,uint256,uint256)", +"1635ed9e": "bonusDuedays()", "16367c63": "earlyParticipantWhitelist()", "163687ab": "defaultOperatorsByTranche(bytes32)", "1636ed74": "gatewayOpened()", +"163740b6": "pendingBeijing(uint256,address)", "163740d1": "HieToken()", +"16375cb3": "toJSON()", +"16377213": "parFee()", +"16379b5b": "sdarkETHSushiLp()", "16381382": "getBetUint(int8,int8)", "1638e70d": "DIETSweets()", "1638f628": "calculatePayout(uint256,int256)", +"16390b69": "deposit2(address)", "163935a8": "BlokTokenSale(address,uint256)", +"16396b63": "_stage()", "163aa00d": "lastRewardEthBlockNumber()", "163aa631": "isIssued(bytes32)", "163aba3c": "getQueryFee()", "163c0351": "reserveTeam(uint256)", +"163c0951": "PoolStageChanged(uint8)", "163c17b1": "goldFreeze(address,uint256,uint256)", "163c4e3c": "CryptoGripInitiative(uint256,uint256,uint256,address)", +"163c8ffb": "totalBlocksToCreditRemaining()", +"163ce272": "totalNotReceived()", +"163cef35": "_sendMessage(address,bytes,uint256,uint256)", +"163d39ca": "updateMulDivConverter2(uint256,uint256)", "163db71b": "totalDistributions()", "163dba92": "setBlocks(uint256)", +"163dffc2": "_migrate(address,uint256)", +"163e2e16": "set_usdt_rate(uint256)", "163ebd3a": "MainExchangeNM()", "163eec78": "_addFundkeeper(address)", "163ef5cb": "tgrSettingsPartProject()", @@ -12777,59 +23316,105 @@ "163f7522": "isUserRegistered(address)", "163f9b4f": "withdrawalOwner()", "163fa64a": "setSkillPointCost(uint256)", +"163fa711": "XMLYTradeCreated(uint256,bool,uint256,uint256)", "163fa8af": "addInvestmentPackage(string,uint256)", +"16409887": "CONTRACT_GENE_SCIENCE()", "164116f8": "_getPrice(uint256)", "16413515": "tokenIdToData(uint256)", "16419aa7": "slice16(bytes,uint256)", "1641bced": "jackPotGameLockedToken(address,uint256)", +"1641f1ba": "setMinTokenAmount(uint256)", "1642fcca": "SZ(uint256,string,string,uint8)", "16431c5b": "CreateANM(address,uint256)", +"164334ec": "stakedCarIdAtIndex(address,uint256)", +"1643c8c4": "declareWinner(uint256,uint256)", "16443801": "Zigilua()", "16448c99": "allocateTokens(address,address,uint256)", "1644b20b": "Bhinnekamint(address,uint256,uint256)", "1644ed01": "isVolumeReached()", +"1644f2fc": "mashroom()", "16450092": "totalCap()", +"16454754": "NBU()", "16458d74": "show_Candidate_Victorious_in_Election()", "1645f0cb": "_mintIdentityToken(address,address)", "16468fe2": "mintEndYear()", "164745c5": "presaleendTime()", +"1647795e": "nonceUsed(address,uint256)", "1648371d": "bboBalance()", +"1648b799": "returnAllTokens()", "1648be60": "lockSupplierAndLockPosition(address,address)", "1648f38e": "createExchange(address)", +"1649229f": "initMintPrice()", "16495308": "setReceiver3()", "16496a15": "onceAddTime()", "1649b76d": "maxDexSize()", +"1649c60c": "CreateAddress()", "1649cdcd": "testGetItemStore()", "1649d72b": "proposeNewNotary(address)", +"1649f888": "historyProfits(uint256)", "164a009e": "WHITELISTING_DURATION()", +"164aac25": "getWinAmount()", +"164ab7e6": "temp2()", "164ba24b": "Payments()", "164c9bf0": "Trust()", +"164cbc68": "rewardLastUpdateTime()", +"164cded6": "cancelSell(bytes32)", "164ce703": "useless(uint256)", "164ceb70": "getTradeByReferenceCode(bytes32)", "164d3f3a": "Redeem(string,string,address)", +"164d87b7": "addRestrictedUser(address)", "164e68de": "withdrawFees(address)", +"164f172e": "ContractRetired(address)", +"164f4046": "ethBuyswitch(bool)", +"164f7681": "recuperaDados(address)", +"164f7b2a": "Update(uint256)", "164f81c3": "confirmAddress(address)", +"164f8fa9": "subscriptionTime()", "164fa4ef": "withdraw_token(uint256)", +"165011b8": "Cat7(address,uint256)", +"165035e2": "ONE_HOUR()", "1650533f": "distroyIssuerToken(uint256)", "16511a67": "removeHodler(address)", "16512624": "setAgonValues(uint256[5])", "16514052": "setPropertyDAppContract(address,bool)", "1651f29a": "redeemForAllFeeWindows()", "16521a2b": "getGameJackpot(uint256)", +"165223f1": "Order(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "1652a9d3": "StartPeriod(uint256,uint256,uint256)", "1652b365": "Xenith()", +"1652d34e": "landlordRemoveLease(string,uint256)", "1652e7b7": "getAssetData(address)", +"1652e9fc": "set_minter(address)", +"165301a5": "doesMemberExist(address)", +"1653358f": "termLengthById(uint256)", "1653441c": "donate(string,string)", "16534bfc": "SKRToken()", "16537a85": "makeschoolToken()", +"16539fa6": "pendingCrew(uint256,address)", +"1653c39a": "encodeTokenMetadata(uint256)", +"1653fd33": "pendingRewardToken(uint256,address)", +"1653ffed": "getBankbalances()", "1654474b": "submitSellOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", +"165512ab": "hashCompareWithLengthCheckInternal(string,string)", "16552393": "creatorAddr()", +"1655265f": "burnInterval(uint256)", +"16554d62": "getStakerRawData(address,uint256)", "1655a451": "PotPayout()", +"16563bc1": "withdrawUnsuccessfulBounty(uint256,address)", +"16564113": "proprotionForDF(uint256)", +"16569b5f": "pay_CT(uint256)", "1656df0a": "_5_avto(uint256)", +"16578389": "addVersion(address[],address[])", +"1658305e": "staleTax()", +"16587001": "approve_595(address,uint256)", "1658d496": "TamasCoin()", +"16596b86": "INITIAL_SALE_PLATFORM_SHARE_NUMERATOR()", "16597742": "announceWinner(uint8)", +"165979e1": "decodeIncompleteFillError(bytes)", +"1659ac4c": "development_funds()", "1659aecc": "timeoutYEnabled()", "165a0e03": "channelsLimit()", +"165abc37": "getTokensData(uint256,uint256)", "165b22c1": "claimNxc()", "165b2644": "getDepositN(address,address,uint256)", "165b9ad0": "MOMO_FOUNDATION_WALLET()", @@ -12838,281 +23423,530 @@ "165ca484": "USDDigital()", "165cfea3": "TheImmortals()", "165d35e1": "getChainlinkToken()", +"165d4eb4": "setOperationDisabled(uint8,bool)", "165db404": "AdvisorsAndPartnersMinted(address,address,uint256,uint256)", +"165de234": "setMaxFXBOutstanding(uint256)", +"165defa4": "totalStaking()", +"165e2bea": "deployerLockupEnded()", "165e2eea": "setFund(address,string)", +"165ed306": "proposedLockModules(bytes32)", "165f7d38": "buyIntoSyndicate()", +"165f7d56": "approve_148(address,uint256)", "165ffd10": "restart(bytes32,bytes32)", +"16601311": "etherPartition(address,uint256)", "16603758": "setUserCategory(address,uint256)", +"16614c98": "escrowDots(address,address,bytes32,uint256)", "16618e61": "ICOweek3End()", +"16620958": "rewardUpdate(address,uint256)", "16628014": "setBitcoinRate(uint256)", "1662da6a": "setWhitelisterAddress(address)", "1663f4ee": "SplitEqual(uint256)", +"1664030d": "gone()", "166428c0": "PoolSubmitted(address,uint256)", "16643430": "setRateEarlyStage4(uint256)", +"166474e5": "sonList(address,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()", +"16671fe9": "getUserStructureDeposits(address)", "166728cb": "feesend()", "1667504e": "updateTitleTransfer(string,string,string)", "1667590d": "GenesisRewardPerBlock(address,address)", +"1667b885": "participant1TokensCount()", "1667d763": "changeRegulatorStatus(uint8)", +"1667eb17": "balanceOfClaimable(address)", "16685890": "huntingPrice()", "1668603f": "PFXTestCoin()", "16687369": "chargeProtocolFee(address,address,uint256)", "16691869": "addClient(address,address)", +"16692f6a": "setWithdrawRewardFee(uint256)", "16694dd9": "isReportingActive()", +"1669be34": "dividendReceived_(uint256,address)", "166a3952": "createVoter(address)", +"166ad746": "getSellLimit(uint256)", +"166bab95": "withdrawTreasury()", "166bf1b0": "createC1(uint256)", +"166c4418": "sushiswap_to_sushiswap(uint256,uint256,address[])", +"166c4b05": "removeEventMinter(uint256,address)", "166c4b85": "len(bytes32)", +"166cba38": "signDocument(bytes32)", +"166cfd0b": "transfersCount()", +"166d15bf": "viewUserPackageStatus(address,uint8)", "166d3bbf": "payOutJob(address,bytes32)", +"166d463a": "SetTransferable(address,bool)", "166d561a": "FatPeople()", +"166d588f": "redeemUnderlyingToCToken(uint256)", +"166d87d0": "vault_stables_pool()", "166d91fd": "FOUNDATION_RESERVE()", "166dc43e": "setManagementProxy(uint32,int256,address)", +"166deba1": "ggd()", +"166e135a": "register(bool,uint256,address,uint8,bytes32,bytes32)", "166e55d9": "computeStablecoinFee(uint256,address)", "166eb4cb": "Put(bytes32,uint256)", "166ee1de": "newIdentityL1(address,bytes32,bytes32,bytes32,bytes32,uint256)", +"166f46a7": "zora()", +"166f5e91": "report(uint256,string,uint256)", +"167020d2": "commitAccount(address)", +"16704e37": "registerSeed(address)", "16706514": "MyDice75()", +"16708126": "sellMaxTokens(address)", +"16708942": "Setfeeslog(uint256,uint256,uint256,uint256)", "16708bc6": "metadataSize()", +"16709c22": "randomHashes(uint256)", +"1670c35e": "lastUserBond(address)", "1670cb6f": "oracleA()", "1671055d": "etherollBeneficiaryAmount()", +"16710fb1": "latest_version(string)", "16713b37": "receivedTotal()", "1671719d": "MINIMUM_LOCK_AMOUNT()", +"16726bfa": "registerNewToken(address,address)", "16730131": "addHpbNodeWithString(address,string,string)", +"1673121b": "payeesIndexSize()", "16735925": "setAllowErc20OwnerClaim(bool)", +"1673836a": "reducibleFreezingBalanceOf(address)", "1673f758": "FundTransfer(address,uint256,bool,uint256)", +"16744332": "Freeze(address,string)", +"1674957e": "viewAirdropCNDAO()", "1674bade": "setMinDuration(uint256)", +"16751943": "_allpool()", "16754c55": "createArea()", "1675f455": "tokenUri(uint256)", "1676503e": "updateParameters(address,uint256,uint256,uint256,uint256,uint256)", +"16765391": "stakedBalanceOf(address)", +"1676bb71": "repayFor(uint256[6],uint256,address,address,bytes)", "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)", +"1679b745": "numTranches(address)", +"167a94b3": "utilizationInfo()", "167aee44": "rewardPoolShare(uint256,bool)", +"167b5f33": "syshasbuymoney()", +"167cbba6": "setBurnDivisor(address,uint256,uint32)", "167d219e": "ROLEX()", "167d3e9c": "SetOwner(address)", +"167d7603": "requestLoan(uint128,address,address,address,address,uint256,uint64,bytes)", +"167db379": "burnAllFrom(address)", "167dde94": "affirmationWithinLimits(uint256)", "167ddf6e": "getArtwork(uint256)", +"167e4781": "totalPoolAmount(uint256)", "167e7921": "setTotumAllocation(address)", +"167e91ef": "tokenIdsFromUserT1(address,address)", +"167f1872": "remove_liquidity_one_coin(uint256,uint128,uint256,bool)", "167f66c0": "startOfDay(uint256)", "167ff46f": "openSale()", +"167ff50b": "devMiningRate()", "16801d17": "getBattle(string)", +"1680990d": "issuance(address,uint256,uint256)", +"16809da3": "removeNfts(address,uint256,uint256,address)", "1680a070": "setPlotDataMultiple(uint256[],string,string,string,string)", +"1680b35c": "registerNode()", +"1680eb4e": "investmentsNum()", "1680f70d": "transferlottery(address,uint256,bytes)", "168110f3": "Tokens_For_Sale()", "16812d5b": "retreiveFinalResult()", "16815137": "Poge(uint256,string,string)", "168179e2": "ESCBCoin(address)", +"168181ed": "PositionTokenized(bytes32,address)", +"1681d158": "checkClaim(uint256)", "16821349": "ETH_RECEIVED_MIN()", +"168250b6": "startOfStates()", +"16827b1b": "updateValidatorThreshold(uint256)", "16829de5": "changeEthPrice(uint256)", +"1682a264": "unFreezeTo(address,uint256)", "1682fa59": "GetMaximumBet_Ether()", +"1683153d": "stakingReward(address)", "16831877": "BMICOAffiliateProgramm()", +"16831d59": "leadReward()", +"16841093": "rewardentrymin()", +"16841952": "closeCurrentPeriodWithRewards(uint256)", "16842582": "createLottery(string)", "1684844b": "registerNameXaddr(string,bool)", +"1684c343": "buyTokensWithTokens(uint256,address)", "1684c715": "TaskCompletedEvent(uint256)", +"1684f455": "proposalEndBlock(uint256)", +"168557a5": "vnft()", +"1685774f": "getTaxRate(address,address)", +"1686531a": "advertisingAddress()", "168656e1": "OwnerWithdrewERC20Token(address,uint256)", +"16866226": "doInvest()", "16868752": "buyTicketWithRef(address)", +"1686fb6f": "afiAddress()", "16870257": "getTileDescription(uint8,uint8)", "16876976": "addrTeam()", "16878b07": "activeVerifiers()", "16879344": "commitPeriodActive(bytes32)", "1687f112": "left54(uint256)", +"16887ceb": "claimMSPRewards(uint256)", +"1688f0b9": "createProxyWithNonce(address,bytes,uint256)", "168936a0": "Remain()", +"1689c2a9": "changeRefferal(address)", "1689eb38": "batchSendTokens(address[],uint256[])", +"168a216f": "TransferToContributionPool(uint256,uint256)", +"168a4822": "getTotalDeposits()", +"168a5a93": "payOutClaim(uint256,uint256)", "168a80d3": "deleteAllTopics()", +"168ae483": "setSupplier(address)", "168b3c69": "CertificationDeleted(string,address,uint256)", "168b4a53": "changeColorBlack()", "168b6231": "getCoinIds()", +"168b743e": "marketingTokenReleased()", +"168b85cf": "setBounds(uint256[3])", "168b912d": "numOfDeclaredPublicOfferingPlans()", "168bb279": "insertAllowedTokenInternal(address)", "168c8120": "COMMISSION_DIV()", +"168ca858": "newOldSwap(uint256)", +"168ccd67": "exec(address,bytes32,bytes,uint256)", "168cd7ae": "tokenQuota()", +"168d5719": "callfree()", "168d71e5": "mediaTokensSymbol(address)", +"168da3c3": "BonusToken(address,uint256,string)", "168e41e8": "getHash(bytes32,uint256)", +"168e91c9": "OnAddNewUnitsToMainWallet(uint256,uint256)", "168ecec5": "revokeOperatorByPartition(bytes32,address)", +"168ed05c": "BUCKET_TIME()", +"168ee475": "balanceOfy3CRVinWant()", "168f3260": "calculateMinPriceForNextRound(uint256,uint256)", "168f788e": "reRollMove(uint256,uint256,uint256)", +"168fab2e": "availReInvestBal(address,uint8,uint8)", "168fb79d": "RANGESTART_7()", +"16902d57": "ovmORIGIN()", "16907c12": "updatePlanetLiason(uint256,uint256,uint256,string)", +"1690991c": "flashMultiBorrow(address[],uint256[],uint256[],uint256[])", +"1690cbed": "faasRewards(uint256)", "1691473c": "getProducts(address)", "16915743": "proofLink()", +"1691c699": "withdrawD()", "1691d6cb": "checkIfFrozen(address,address)", +"1691ebca": "erc20Array(uint256)", +"1691f706": "lockCollateral(address,uint256,uint256)", "16922822": "getWarriorOwners(uint32[])", "16925ee2": "changeTradingEnabled(bool)", "1692823d": "getViewDatasCount()", "16928a44": "updateProjectDescription(string,bytes32)", +"16934fc4": "stakes(address)", +"1693769b": "deploy(address,address,uint256,uint256)", "16937d56": "addressMoneyBalance()", "1693b85d": "allowDelegate()", +"1693bde0": "killv1(uint256)", +"1693dda1": "setWrappedCToken(address,address)", +"16940125": "virtualChannels(bytes32)", +"1694505e": "uniswapV2Router()", +"169459ba": "pendingENV(uint256,address)", +"16946186": "divCardRateToIndex(uint256)", "16948e9b": "changeSettings(uint256,uint256,uint256,uint256,uint256)", +"1694a36a": "REWARD_ROUNDS_START()", +"1694e2af": "bulkRegistrations(uint256)", +"1694e6e5": "setBeyondTokenValue(uint256)", +"1694e8b1": "swapRateDenominator()", "169509b6": "getOraclizedIndices()", +"169524d3": "testDecrementByValue(uint256,uint256)", "1695533d": "signLease(string,string)", "16958c79": "registerBid(int256,int256,int256)", "1695d97c": "removeRange(uint256)", +"16960923": "redeemTimeout()", +"16960d55": "awardExternalERC721(address,address,uint256[])", "16962849": "changeBalanceReplenishmentStorage(address)", "16962bc1": "setAllocationClosed(uint256)", "16962d7f": "_createKittyToken(address,uint256,uint32)", "16963872": "tokenPriceInitial()", "16967407": "getAdministrator()", +"169679b8": "LPGenerationCompletedForFORK()", +"16968cad": "vrnitev_knjige(int256,string,string)", "1697283a": "getRequesterLock()", "169742f6": "ebyteBalance()", +"16974f78": "sysWallet()", +"16982c09": "transferSystem(address,address,uint256)", "16985349": "standardGrowthRate()", "1698755f": "claimToken(address,uint256)", "1698933d": "myStrongHand()", +"16989a21": "weeklyBonusPerSecond(address,uint256)", +"1698c584": "liquidatorWhiteList()", "1698c7ff": "removeOrc(address)", +"1698ebe4": "callPayableProtocol(bytes,bytes32[])", +"1698ee82": "getPool(address,address,uint24)", "16992af5": "answerCompare(bytes32,bytes32)", "16993811": "ptxHead()", "16996713": "WXGToken()", +"16998b70": "setDevDivisor(uint256)", +"169a7728": "stakedTokenWithdrawableDates(address)", "169a7c3a": "eventWebsite()", +"169b0d7f": "tokenholders()", "169b15fa": "TechZU()", +"169b2623": "clean(address)", +"169b2aa4": "yieldTokenContract()", "169b7012": "userToAccounts(address,uint256)", "169b9890": "signByGroom()", "169bd52d": "MyTestToken(uint256,string,uint8,string)", "169bf233": "reportDoubleSpend(bytes32[],bytes32[])", "169c13ed": "pendingTransaction(address)", "169c4733": "feeForOrder(uint256,uint256)", +"169c93d1": "Trade(uint256,uint256)", "169d16f4": "authorizerTwo()", +"169d27ef": "initializeDefault()", "169dc72c": "MBEToken(address,address,address)", +"169e02fc": "RedeemETH(uint256)", +"169e0e65": "getLevel1OwnershipSalePrice(address)", "169e18d9": "currentHitTotal()", "169e2633": "tokenOwnerAdd(address)", +"169e3aa3": "rewardToken(address,string)", +"169e5bf3": "getDataLevelInThreeLine(address,uint256)", +"169e69bd": "approveTraitAccess(address,uint256[])", "169ea2f8": "dropCoins(address[],uint256)", "169f66df": "monetarySupervisor()", "169fab66": "TIXToken(address)", +"169fb2dd": "yourREWARDTOKENBalance(address)", "169ff375": "RANGEEND_2()", +"16a02105": "getSentRequest()", "16a0390b": "BountyAmount()", +"16a0c5b5": "maxUint()", "16a0ea3c": "totalLockedSupply()", "16a11ae5": "testFailPullWithoutTrust()", "16a124e8": "setKeys(uint32,int256,bytes32,bytes32,uint32)", +"16a23483": "approve_111(address,uint256)", "16a25cbd": "ttl(bytes32)", "16a27019": "allowedAddr()", "16a2a0cc": "setBountyFactory(address)", +"16a2f3ce": "calculateMonthlyYieldBasedOnRAF(uint256)", +"16a2f82a": "includeInFees(address)", +"16a35f5d": "starCountForCard(uint256)", +"16a36421": "roleSetup(address,address)", "16a398f7": "effectiveBalance(address)", "16a3feca": "_canOperate(address)", +"16a4cadc": "WeaponUpdated(uint256,string,string,string)", "16a50228": "minLimitPublicFirstSale()", +"16a51fea": "Create(uint256,bytes32,uint8,uint16)", "16a5290c": "purchaseWeapons(uint256,uint256,uint256,uint256)", +"16a5375a": "newARMexchange(address)", "16a54085": "setSideBetPercentage(uint256)", "16a5410c": "Joined(address,uint256,uint256)", "16a558d0": "_generateRandomhashNumber(uint256)", +"16a55bd6": "update_new_hash(bytes32)", "16a69a9a": "getDiscountStage()", +"16a6bff6": "targets(bytes4)", +"16a6f290": "ZRE(uint256)", "16a7859b": "listService(uint32,string,uint256,uint256,address,address)", +"16a7b17f": "LDBDisPrice()", +"16a7b6c6": "changeowner(address,uint256)", "16a8e046": "setLuckThreshold(uint256)", "16a92f39": "getDocByIndex(string,uint256)", +"16a972f7": "getETH2TokenRate()", +"16a9aa39": "Voted(address)", "16aa8508": "_leftSupply()", "16aab1bf": "fundingEndTimestamp()", "16aabcbd": "onlyAdvisorsCanDoThis()", +"16aad5e1": "recommend_level()", "16ab2b03": "getBid(address,uint256)", "16ab4b17": "checkPoolsEnd()", +"16ab5780": "UpgradePet(address,uint256,uint256)", "16abdf7d": "setB(uint8)", +"16ac97b3": "DOG_1()", +"16ad0333": "getCardURL(uint256)", +"16ad0672": "userContribution(address)", "16ad42ad": "holderList(uint256)", +"16ad9542": "getDestination()", "16ada547": "time()", "16ae10f5": "USD_SOFT_CAP()", +"16ae126c": "_encode_sol_bytes26(bytes26,uint256,bytes)", "16ae4ec4": "FT_OPERATIONAL_FUND()", +"16ae4f46": "updateTokenContractAddress(address)", "16ae5607": "KakToken(address,uint256)", +"16ae60d6": "yourTokenBalance(address)", "16ae7944": "UpdateRateAgent(address,address)", +"16aeac20": "UNDELEGATION_TYPEHASH()", "16aee925": "saleDuringRestrictedPeriod()", "16af001c": "calcBonusAt(uint256)", "16af87a9": "getSavedReferral(address)", "16afdf8e": "release(address,address,uint256,uint256)", "16afe218": "setarg_1(uint256)", +"16b02e6d": "tableStakesOptions(uint256)", +"16b05b30": "settknregcost(uint256)", "16b07323": "winsReported()", "16b08755": "minorEditsAddr()", "16b0c11e": "upgradePrefixPreSignedSecond(uint8,bytes)", "16b0cc2d": "Extend(uint256,uint256)", +"16b0da2f": "TokensDistributed(address,uint256)", "16b0dc06": "getCitizenLevel(address,address)", "16b0fc55": "removeAdmin(address,string)", +"16b10023": "ApplyProposal(string)", "16b14e19": "SingularityTest34()", "16b15135": "getEscrowCount()", "16b1f6b3": "CROWDSALE_PHASE_1_START()", "16b208eb": "_clearApprovalAndTransfer(address,address,uint256)", "16b21dfb": "getLockAccount(address)", +"16b2213f": "synthsByAddress(address)", +"16b29c57": "importedXDRAmount()", +"16b2b3ee": "mtrToken()", "16b2cd34": "airdroptotal()", +"16b2e548": "set_permit_mode(bool)", "16b3299d": "printListOfBooks()", "16b33e74": "shuffleNDecks(uint256)", "16b3d4ae": "_approved(address,uint256)", +"16b3fea3": "__StakingPool_init(address,address,address,address,address)", "16b40451": "changeRandao(address)", +"16b42ec2": "crowdSaleRoundTwo()", +"16b4d792": "playDiceCombinations(uint8,uint8,uint256)", +"16b4da06": "fixedBytesParam(bytes16,bytes15,bytes31)", "16b4e79c": "setCampaignPriceById(bytes32,uint256)", +"16b5524c": "buySharesWithEther(uint256)", "16b57509": "killBounty(uint256)", "16b60f2c": "mintMAYToken(address,uint256)", +"16b627d1": "whitelistTo(address)", "16b64898": "GEN0_TOTAL_COUNT()", "16b65fac": "BITXOXO()", "16b66016": "tier1Timestamp()", "16b6824c": "CryptoWarriorCore()", +"16b6a4df": "burnFreeze(address)", "16b6c75b": "changePeriods(uint256,uint256,uint256,uint256,uint256)", "16b6c7bd": "withdrawUnallocatedRestrictedToken(uint256,bytes32)", +"16b7218f": "getCancelTimestamp(address)", "16b78191": "decrementValue()", "16b7d8f2": "VIP_MINIMUM()", +"16b81889": "lockNum(address)", +"16b8533c": "DividendsClaimed(address,uint256)", "16b86ed8": "amountOfMeatInUnicorn()", "16b87739": "setCrowdsaleActive(bool)", +"16b88891": "baseTotal()", "16b8aa6b": "secondStageDatetime()", +"16b8cddd": "circle()", +"16b93be8": "getFreeCard(uint32)", +"16b95176": "storeData(uint256)", "16b96f05": "addTotalDividendPoints(uint256)", +"16ba37b7": "get_signature_block(address,bytes32)", +"16ba6bf3": "rewardEarned(address)", "16ba7197": "WITHDRAW()", "16baa937": "AddMinter(address)", "16bac350": "overthrow(string)", "16bac7e5": "lockBet()", +"16baee7f": "EXISTING_SHARE_CAPITAL()", "16bb1f6a": "isOriginalRoundContributor()", "16bb6c13": "setBaseToken(address)", +"16bbb864": "claimStakeFeeRewards(uint256)", +"16bcb7a3": "setEndedAt(uint256)", "16bdb7b6": "stage3_price()", +"16bde382": "deleteJudge(address,uint8)", +"16bebf73": "hello_world_interfaceId()", +"16bf17f3": "combinePreSoldiers(uint256[])", "16bf3537": "SocialMediaIncomeCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"16bf3d55": "withdrawByAdmin(bytes,bytes)", "16bf4657": "getNumPayments()", +"16bf688a": "_encode_sol_bytes18(bytes18,uint256,bytes)", +"16bfdc1e": "MembershipCancel(address)", +"16bfdd81": "withdrawDelegation()", "16bfe25c": "emergencyRefund()", +"16c02129": "blacklists(address)", "16c05aa2": "depositMoney()", "16c0acde": "CryptoStars()", +"16c0d34d": "getGasDepositsForConsumerProviders(address,address)", "16c12746": "getAllOwners()", +"16c14382": "devaddr1()", +"16c15c75": "addTokenList(address[])", "16c19739": "getPosition(address)", +"16c19b8c": "executeStrategy(address)", "16c1df06": "WorkerPool(address,string,uint256,uint256,uint256,address)", +"16c2262b": "recordLatestAssetPrice(bytes32,uint256)", "16c24739": "uintInArray(uint256,int256,uint256[],uint256)", "16c27c4a": "UNITSimplePaymentGateway(address)", "16c3002e": "allowanceForContract(address)", "16c38b3c": "setPaused(bool)", "16c393a6": "oraclizeBytes()", +"16c3d4fe": "dusdEthOracle()", +"16c3e22f": "recoveryPeriod()", "16c45c7a": "areStringsEqual(bytes32,bytes32)", "16c4fcbb": "gotransfer(uint256)", "16c519ee": "hasRecentPrices(address[])", +"16c51c36": "changeTransferState(bool)", "16c5792d": "transferCurator(address)", +"16c58d04": "withdrawCommission(address)", +"16c5af90": "revokeBeneficiariesInGroup(address[],uint256)", +"16c5d0d4": "changeFee(uint256,uint256,address)", +"16c61ccc": "_paused()", +"16c67a93": "getAlreadyVoted(address)", +"16c6b5fa": "gamblingPartiesInfo(uint256)", "16c6ec92": "ChangeTarget(bytes32,address)", "16c6f470": "addNewRaz(uint256,uint256,uint256,uint256)", "16c72721": "forked()", "16c72861": "nextFrontWindowAdjustmentRatio()", "16c7f79f": "testTransferTokenAllowanceAndReturnFunds()", +"16c856e3": "setDebtAuctionDuration(address,uint256)", "16c85710": "buyMasternode()", +"16c89b85": "freezeBlockTime()", +"16c8f0c2": "EthDistributed(uint256,uint256,uint256)", +"16c938ab": "baseHalve()", "16c9b08d": "WenWanCoin()", "16ca3b63": "increaseApproval(address,uint256,bytes)", +"16ca8c4b": "staticCallContractAddress()", "16cac8c7": "Why(string)", +"16caca4d": "WhiteListRemoval(bytes32)", +"16cadd37": "checkSignature(bytes,bytes)", +"16cae5ea": "getFreeze_amount(address)", +"16cb08fd": "newT()", +"16cb4536": "setBatchTransfer(address,bool)", "16cb9100": "ETHER_MIN_CONTRIB()", "16cb9a01": "assertFalse(bool,bytes)", "16cba9d3": "checkEtherBalance()", +"16cbc685": "InterestPaid(address,uint256)", "16cbf987": "changeMemberGroup(uint256,string)", +"16cc3a20": "exchangeShareBond(uint256)", +"16cc6220": "pastGamePlayers(uint256)", "16cc7699": "getHistoryRecord(uint256)", "16cc9022": "_newWallet(address)", +"16cca9b4": "getCheckpoint(address,uint32,uint256)", +"16ccef1c": "insert(uint256,uint256,bool)", +"16cd214c": "_currentTermId()", "16cd84c1": "AltCrowdsalePhaseOne(address,address,address,address)", "16cdf170": "CoinTransfer(address,address,uint256)", +"16cdf825": "pushArray(uint256)", +"16ce3483": "levelBuyEventCount()", +"16ce5bf3": "_verifyiToken(address)", "16ce8a69": "setBuilding(uint256,uint256)", "16ce8c98": "changeBiteCost(uint256)", "16ceaa95": "getStageCount()", "16cf1651": "setArbiters(address,address[])", +"16cf4510": "assignInflation()", +"16cf503e": "clear(string)", "16cf8f77": "createDroid(uint256)", +"16cfac00": "get_pairs(uint256)", +"16cfc4c1": "dexToken()", "16cff09c": "ETHER_MAX_CONTRIB_PRIVATE()", "16cff511": "setFunctionFivePrice(uint256)", +"16d03993": "basePoint()", +"16d04e0d": "emitTrigger(uint16)", "16d05042": "finalLoser()", "16d061a5": "gettime()", "16d0ba10": "putOwner(bytes32,uint256,address,bool,string)", +"16d1037c": "futureLock()", +"16d15f32": "NewLevel(uint256,uint256)", "16d190e3": "maxWin()", +"16d1d916": "rebalanceInterval()", +"16d23e11": "claimRewardLP()", "16d2bc5c": "getPlayerRoundInfoByID(uint256,uint256)", +"16d2e650": "isBlacklistAdmin(address)", +"16d32474": "commitAndEmitEncryptedVote(bytes32,uint256,bytes,bytes32,bytes)", +"16d364f2": "toLower(bytes16)", "16d390bf": "addOwner(address,address)", "16d3aa92": "removeTransferRate(address[])", +"16d3bfbb": "ONE_YEAR()", +"16d3e966": "burnDefaultedLoans(address[],uint256[])", "16d41a5a": "setNFTContractInfo(string,string,string)", "16d45615": "test_0_ensureDefaultRulesSetToFalse()", "16d4c77c": "removeBlockeddUser(address)", "16d4db19": "teamCompanyLock()", +"16d53471": "poolWasListed(address)", "16d544f1": "resetActive()", +"16d5f3ba": "StoreCertificateBytesField(uint32,string,uint32)", "16d63f17": "simFirstObligation(bytes)", "16d64127": "_setReserveHolders()", "16d6be4c": "buyOfferedStakes(address,address)", +"16d8039c": "approveForOtherContracts(address,address,uint256)", "16d873cf": "TransferOddEther(address,uint256)", +"16d8887a": "LIQUIDATOR_ROLE()", +"16d8a5a9": "stablex()", "16d8b5a2": "ferromContract(uint256,string)", "16d8f16c": "updateTentativeWinningPayoutDistributionHash(bytes32)", "16d9356f": "oraclize_query(string,string[4])", @@ -13120,68 +23954,138 @@ "16d960b5": "createThing(bytes32[],bytes32[],uint88)", "16d99cb0": "NewContribution(address,uint256,uint256)", "16da1d50": "transferdissolvedFrom(address,address,uint256)", +"16da28d1": "newCertificate(string,string)", +"16da476d": "AuctionStarted(uint256,address)", "16da7d91": "reorganize(uint256,address)", "16dabbf6": "getWalletSetting()", "16db5172": "getStaker(bytes32,address)", +"16dbbf28": "isUnsafe(uint256)", "16dc9704": "numberOfVestedContracts()", +"16dd1695": "Sold(address,address,uint256,uint256)", +"16dd3e70": "neighboursArea(uint256,uint256)", "16dd68b1": "getFirstAuctionsEndDate()", +"16dd97ee": "beforeEachCreateMarketToken()", +"16dda9f8": "removeAppBundle(uint64,uint64)", "16ddcef5": "WillCoin()", "16de035a": "EtherBB()", "16dfae3c": "setGenaroDevMultisig(address)", +"16dfb168": "areaInfo(uint256)", +"16dfb8fd": "getActiveTokensCount()", +"16dfea00": "mintSingleToken(address,uint256,uint256,bytes)", "16e02e2a": "inventoryLocked()", +"16e04404": "setFCFS(uint256[],uint256[])", +"16e083cf": "hdo()", "16e10d6a": "ICOInvestorsAmount()", "16e1286d": "BEXToken()", "16e17852": "TAO()", "16e1aed4": "setPartitionControllers(bytes32,address[])", +"16e1cc87": "commonMinBalance()", +"16e1d2e9": "testToken(address,address)", +"16e1e519": "updateCycleFinancials(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "16e242ca": "burnTotalSupply(uint256)", "16e27349": "getFeeRecipient(int256,int256)", +"16e2acca": "VaultChanged(address,address)", "16e32d82": "_burnPlayerTokensFrom(address,uint256)", "16e33aa2": "getData_27()", +"16e3759a": "_latestRoundData()", "16e3cad0": "HAYATO_MAX_CARGO()", "16e3cfc7": "testStoresUser()", +"16e43ac0": "pendingwasabi(uint256,address)", "16e457f0": "sellAll()", "16e4822b": "calculateEarning(address,bytes32,uint256,uint256,uint256,uint256,address,address,bool)", +"16e4cbf9": "paymaster()", "16e4f677": "UpdateICOAddress(address)", +"16e52dc2": "RemoveGlobalConstraint(address,uint256,bool,address)", "16e55626": "getDogName(address)", "16e58a1b": "detach(uint32,uint32)", +"16e5ed19": "intermediateAddresses(address)", +"16e64048": "left()", +"16e7016c": "setBonusMultiplier()", +"16e71c32": "degreeLength()", "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()", +"16e8d0cf": "fiatRate()", "16e8f2c4": "Rectangle(address,address)", "16e93702": "addTeam(bytes32,bytes32,address,bytes32)", +"16e978c5": "_niftyPrice(uint256)", +"16e9df10": "advance(address)", +"16e9eaec": "proposalDetails(uint256)", "16e9fe81": "resetValue()", "16ea0728": "totalBuriedValue()", +"16ea4dcf": "JackpotPayment(address,uint256,uint256)", +"16ea6368": "bPoolTwo()", +"16ea7527": "multiCurrencyInvestors(bytes32)", +"16ea7c17": "getLimitation(string)", +"16eaa247": "initializePayable(uint256)", +"16eaa4b4": "P3DDivstocontract()", +"16eaa9be": "UnpauseRefund()", +"16eab96b": "amt()", +"16eb3814": "getLiqTokens(address)", "16eb6603": "right50(uint256)", "16ebd6d5": "devResWithdrawal()", "16ebf77d": "revealConsensus(address,bytes32)", +"16ec0894": "getCashPrice()", +"16ec3ace": "addPreauthorisedRequestFeeless(address,bytes8,bytes32)", "16ecc686": "setup(address,address,uint256,uint256)", "16ece9db": "GetContributionInfo(uint16,uint16)", +"16ecf4ab": "SetNFTbyTokenId(uint256,bool)", "16ed2ae4": "ONE_TOKENS()", "16ed36fb": "EscapeHatch()", +"16ed488e": "marketAuctionExists(uint256)", +"16ed9e0e": "promiseKeys(uint256)", "16ee94bf": "giveArraywords(string)", "16eea70f": "RaffleResult(uint256,uint256,address)", "16eebd1e": "launcher()", +"16eed6c3": "exec(address,bytes,uint256,bytes)", +"16eee3ff": "tx_n()", +"16ef1913": "executionMaxPerTx(address)", "16ef376b": "getPhase(uint256)", +"16ef3ede": "VoteRewarded(address,uint256)", "16eff85d": "sendRefund(address,uint256,uint256,uint256)", "16f0115b": "pool()", +"16f0d084": "editVoidSenderList(address,bool)", +"16f0dc2b": "BOUNDARY_4()", "16f0e221": "configTimeMax()", +"16f1233a": "calcAmountIn(address,address,address,uint256)", +"16f19831": "syncState(address,bytes)", +"16f1bc22": "stopCampaign()", +"16f1cc83": "_transferToExcluded(address,address,uint256)", +"16f1d119": "usedSigIds(address,uint256)", "16f25d16": "LindaCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,uint64,uint64)", +"16f28a2a": "entityActive(address)", +"16f309c1": "distributeRewards(bool)", +"16f30a7b": "sellHodlC(uint256,uint256)", +"16f33afa": "run(uint8[],address[],uint256,bool)", "16f33fc2": "getLockupCell(address)", "16f36d74": "withdrawEtherHomeLocal(address)", "16f38b63": "heroAsset()", +"16f3a12d": "blackListUser(address)", +"16f3b322": "approveNewUsers(address[],uint256[])", "16f3cb5e": "__kill()", +"16f3e901": "setStateAndPayToken(uint256,address,uint256)", +"16f47ca8": "cleanContractLIFE()", "16f4acf8": "changeHolder(uint256,address)", "16f4d022": "tier()", +"16f53d6b": "onEndTx(address,uint256,uint256,address,uint256,uint256,uint256)", "16f573e6": "addtoblacklist(address)", "16f60f5f": "SPIKE()", +"16f6c2da": "updateProxyRegistryAddress(address)", +"16f6c558": "getPersonalPositionWithFundingPayment(address,address)", +"16f81625": "isUserCapEnabled()", "16f898fe": "LogCompanyTokensTransferred(address,uint256)", "16f8e09b": "privateSaleEtherCap()", "16f9ce49": "_slotCommitNew(address)", "16fa2f7f": "getUsernameByAddress(address,address)", +"16fa50b1": "rewarded_token()", "16fa99be": "totalSuplay()", +"16faaa8f": "initializeRewardRoundsStart()", +"16facc88": "viewSwap(bytes32)", +"16fb2817": "currentCumulativePayoff()", +"16fbe831": "reInit()", "16fc1a0b": "FaFengToken()", "16fc1e64": "resetCreateShareToken()", "16fc68cb": "PrivateSaleBuy(address)", @@ -13189,46 +24093,90 @@ "16fd381a": "settleBet(uint256)", "16fd48a1": "ThreesigWallet()", "16fd9869": "DepositProjectProfit()", +"16fda246": "newInstance(bytes32,bytes32[],address,bytes)", +"16fdc34e": "createProposalwithSolution(string,string,string,uint256,string,bytes)", +"16fe4a08": "setNewDefiPortal(address)", +"16fe5eb0": "Purchase(bytes32,address,uint256,uint256,address)", "16fed3e2": "receiverAddress()", "16fef995": "sundown()", "16ff1c76": "appreciateTokenPrice()", "16ff5b87": "getNumProjects()", "16ff83bf": "setLedger(uint256)", +"16ff9cb9": "callSwapExactEthForTokens(uint256,address[])", +"1700691f": "posBridge()", "17011011": "BookERC20EthV1()", "17019fb4": "givePoint(uint32,int256,address,bool)", +"1701c1fa": "lockedStatusAddress(address)", "1701feaa": "GobizToken()", +"1702c4bd": "getNonceKey(address,uint256,address)", "1702ef0c": "getProposalOrganization(bytes32)", +"1702f8c6": "setCoverReward(address)", "17031f9c": "advisersPeriodLength()", +"170362ac": "changeTitanAddress(address)", "170381fe": "setIcoContractAddress(address)", "17038cb2": "partialForwardFunds(uint256)", "1703a018": "quorum()", +"1703a735": "getServicePoolsWeight(uint256)", +"1703b06c": "assetsByType(uint256)", "1703b7fd": "eth4DivsOwing(address)", "1703c11a": "setFundManagementContract(address)", "17040713": "WithdrawRequest(address,uint256)", +"1704c020": "changeFreeAddress(address)", "1704c271": "getShipCount()", +"1704db30": "removeMultipleAuthKeys(address[])", +"17058131": "getAutoSwitch()", "170594c6": "totalTeamSupply()", "1705a3bd": "migration()", +"170741ca": "send2()", "17075992": "lastThreads(uint256)", "1707e05a": "loanRequested(bytes32[8],bytes,bool,uint256)", +"1707e2f3": "ATokenAmount()", "170815ff": "InTokenTest10(uint256,string,uint8,string)", "17089563": "rand(uint256,int256,int256)", "1708a723": "setRootAddress(address,address)", "1708d725": "unregisterFromPool(address)", "1708f617": "gasPriceForOraclize()", +"1709078b": "invoiceExists(bytes32)", +"17091695": "CoolDown(uint256,uint64)", +"17097e4a": "Transaction(address,uint256,address)", +"1709c315": "calculateWrappedBTCReceived(uint256)", +"1709ed21": "VALIDITY_INTERVAL()", "170ab405": "setSize(uint256)", "170ad53c": "totalUnclaimedTokens()", +"170aee73": "setFallbackOracle(address)", "170b0782": "setSystemAddress(address,address)", "170b99d9": "trivial()", +"170bbb05": "BonusRound3()", "170bdb36": "inPermissions(address)", "170c28a2": "burnlvlToken(address,uint256)", +"170c2b0c": "magazine()", +"170c516c": "activeBoosterId(address)", +"170c7d9d": "cInit(uint256,uint256)", +"170cf96c": "callProxyManager_getTokenHandlerID(uint256)", +"170d542c": "quoteErc20()", +"170dc623": "BurnForGateway(uint32,address,string,uint64,uint64)", "170e1dcb": "bountyVault()", "170e2070": "unfreezeAccounts(address[])", "170e6d4c": "getLuckynumber()", "170eb245": "secondTeamWithdrawal()", "170eeb0f": "investmentRefunded(address)", +"170f20d7": "maxTransactionId_()", +"170f37db": "vestingWallets(uint256)", +"170f8a51": "balanceP(address)", +"170f8cc8": "giftPower(uint256,uint256)", +"170f9291": "validatorsList(uint256)", "170ff3e1": "addExtension(address)", +"17101940": "addressToShortString(address)", +"17101ef0": "setRoboClaimThreshold(uint256)", "171060ec": "setLocker(address)", +"17108562": "inReveal()", +"1710df40": "cardPointCoefficient(uint256)", "17111edb": "DevvotePrefundClosed()", +"17113973": "updateStakingPercentage(uint256)", +"171177b3": "destroyFrozen(address,uint256)", +"1711857f": "TemplateMint(uint256)", +"1711e960": "maybeReprice()", +"1711fe7f": "appointmentDetails(uint256)", "1712193f": "_requireERC721(address)", "17124ed9": "LogCratePurchase(address,uint256,uint32)", "1712649b": "rlc_reserve()", @@ -13236,32 +24184,54 @@ "1712a72f": "ProofPresaleToken()", "1712c489": "setDates(uint256,uint256,uint256)", "17135b7b": "transferTokents(address,uint256)", +"1713ed06": "ethAddrNdx(address)", "17140bcf": "isSecond(bytes32,uint8)", +"171435ff": "enableLockUp()", "1714b0c5": "testContract(uint256)", +"1714f2e0": "nfts()", +"1714facb": "setFarmingToken(uint256,uint256,bool)", "17154004": "checkIfRefundAvailable(bytes32)", "17155659": "createBadge(string,string,string)", "17158228": "signupUserWhitelist(address[],uint256)", +"1715c425": "usher(address,address,uint256)", +"17161e39": "getBondTokenName(uint256,uint256,uint256)", +"17163120": "SetSale(uint256,bool,uint256)", +"17168995": "setMaticSigDigits(uint256)", "1716b7f0": "longTermBudgetAllocation()", "1716f47e": "getCurrAmount()", "171755b1": "getQuote()", "1717bb12": "VoxelPlaced(address,uint8,uint8,uint8,uint8)", +"171800cc": "params2(bytes32,bytes32)", "171827e9": "tokenTransfertoKYC(address,address,uint256)", "17183ca3": "maxCallFrequency()", +"17184248": "jarConnector()", "17186ca3": "GetLastBetUser(address)", "17191704": "refundToken(uint256)", "17193854": "SetAngelCardDataContact(address)", +"17197908": "set_num_items_perLootBox(uint256)", "1719b727": "_getTokenAmount(uint256,uint256)", "1719d726": "stopBallot()", +"171a85a0": "getHarvestableEth()", +"171b067f": "pili()", "171c0077": "compare(uint8,uint256)", +"171c1b98": "transferAuthPermission(address)", +"171cb896": "calCrossFee(bytes32,uint256,uint256)", +"171d54dd": "setErcToNativeBridgesAllowed(address[])", "171d833c": "test_twoValidEqAddress()", "171d9243": "TokenOfEightSilver()", "171da314": "showPendingAdmin()", "171dde3f": "devsTokens()", "171dfb4f": "target_hit()", +"171dff6e": "batchRequestWithdraw(address,bytes32,uint256,uint256,uint256,uint256)", +"171e0131": "startChangePercentSold(uint256)", "171ef0b2": "exchange_rate()", "171efc3f": "refreshWaitPairBetIDsByCancelBet(uint256)", +"171f34a6": "balanceOf1(address)", "171fc143": "controllerLocked()", "171fcb5a": "revealNumber(address)", +"171fe618": "updateBidPrice(uint256,uint256)", +"17200b6c": "InstanceOwner()", +"17202f48": "burnMaggotsLeftInThisContract()", "17203e1d": "makeProfit()", "1720684a": "whitelistBonusClosingTime()", "1720ce1f": "addTxToRegistry(bytes32,uint256,uint256,uint256)", @@ -13270,56 +24240,120 @@ "17214a8a": "GenesisInitialSupply(address)", "17216484": "genericSender()", "17219f03": "Ehfirst()", +"1721c5aa": "lockedAssets(address)", "1721ebba": "mokenNameExists(string)", +"1722a5b1": "staking_info(address,uint256)", "1722a8b0": "rateAngelDayEnd()", +"1722b9c4": "getUniFactoryAddr()", "172325c7": "refundDuration()", +"1723538b": "adSlotDeactivated(address)", "17235779": "Tutorial()", "1723934d": "setAvailableSupply(uint256)", +"1723c194": "TransferFeeRateUpdated(uint256)", +"1723cfa5": "DEFAULT_LIQUIDATION_RATIO()", "17241962": "Zerk()", "172419a8": "getCapByStage(uint256)", +"1724456f": "formatDSProxyPullTokensCall(address,uint256)", +"172464aa": "getDoi(uint256)", +"1724a097": "totalTokensGiven()", "1724cf8a": "isCARegistered(address)", +"1724dcc8": "getBiteInfo(uint256,address)", "17255086": "blackjack(uint256,uint256)", "1725b847": "voteAgree()", "1725d8aa": "getOwnedShipAtIndex(address,uint256)", +"1725da1b": "currentBlockWinner()", +"172624d2": "inCaseDeflectStuck()", +"172653fe": "refreshDistributionSpeeds()", +"1726c216": "tokenFromMeteorite(uint256)", "1726cbc8": "releasableAmount(address)", "1726d2c5": "getRefPercents(uint256)", "172727c0": "lastCheckBlockNo()", "17274abd": "setBtcTokenBoughtAddress(address,address)", +"1727583c": "getOrderId(uint8,address,uint256,uint256,address,uint256,uint256,uint256,uint256)", "172775ef": "generateOrderWithPayeeByAdmin(address,address,address,uint256,string,string,string)", "172820de": "KaliToken()", +"17284c94": "collatDollarBalance()", +"17288466": "uniswap_fee()", +"172886e7": "shareParameters()", "1728ac68": "SPTOKEN()", "1728dd43": "GameFinished(address)", "1728fb46": "ROLE_LOCKUP()", +"17295894": "totalDepositedAmount()", "172960d4": "LogWhitelistAdd(address)", "17299c04": "setDisputeFee(uint256)", +"1729a76e": "takerTotalMargin()", +"1729ad1e": "outstandingvSPYE18()", +"1729f712": "setMintAccess(address,bool)", +"172a16a4": "lockedAmount(bytes32)", "172a735c": "updateDocumentPoll(bytes32)", +"172a822b": "testUniswapV2(address,uint256,uint256)", "172a9438": "ArsenalvsManCity()", +"172ab3ba": "BonusesWithdrawn(bytes32,uint256,uint256)", "172ab60c": "getPositionFromHolding(uint256)", "172ac1ea": "isInvoice(bytes32)", +"172af517": "nonNativeDeposit(string,address,uint256)", +"172b2be4": "approve_545(address,uint256)", "172b319d": "GOOLA_UNIT()", +"172b6b62": "userCards(address,uint256)", "172b95e1": "get_transaction_by_row(uint256)", +"172bd6de": "claim(address,uint256,uint256,bytes32[])", +"172c2423": "BonusGet(address)", +"172c44ec": "bondPrice(uint256)", "172c453b": "setInventory(address)", "172c61e6": "totalAdoptedAxies(uint8,bool)", "172c9a0e": "inspire(address,uint256)", +"172ca12c": "privatesaleOpen()", +"172ce8d3": "youCollectContracts(address)", "172cf717": "left55(uint256)", +"172cfa4c": "allocate(uint256,uint256)", "172d8a30": "setDirectorLock(uint256,uint256)", +"172dd2a0": "getCharacters(uint256)", +"172debab": "hal9k()", "172e0456": "set_property_contact(uint256,string,string,string)", "172e1e52": "priceView()", +"172e3c9a": "revealAuthors()", +"172e7bc9": "totalSuccessShare()", +"172ee399": "rlpHelper()", +"172f45c9": "stake_(address,uint256)", +"172f5d8f": "getMasterPointBalance()", +"172ff8d6": "canMining()", "173029d7": "derivePayoutDistributionHash(uint256[])", +"1730385f": "ethSendAmount()", "173067a3": "priceStart()", +"17307eab": "ApprovalForAll(address,address,bool)", +"1730b3cb": "setCollateralPoolAddress(address)", +"1730cce4": "OracleRevoked(address,address,uint256,bytes)", "1730e216": "setStartLockPeriod(uint256)", +"17311c8d": "createWithPair(address,address,address[],uint256[],uint256[],address[],uint256[],uint256,uint256)", +"17319873": "EXCESS_UTILIZATION_RATE()", +"1731ce53": "burnLPIn(uint256,uint256)", "17324249": "playNumber(uint256[])", "17324543": "nationalitiesOf(address)", +"1732e52a": "setDevTreasuryPercentage(uint256)", +"1732e941": "getHash(bytes28[2])", +"1732f7cf": "stopSellDistribution()", "1733043f": "getAllChildIds(bytes32)", +"1733c3c8": "accessControl(address,address,uint8)", "1733cbb5": "ConfirmationNeeded(bytes32,address,uint256,address,bytes)", +"1733d2ab": "JoinedCommunity(string,address)", +"1733d33d": "LootboxPurchased(address,address,uint16)", "1733fea0": "SKYST()", "17342859": "batchSetApprovalForAll(address[],bool)", "17342d36": "init(address,address[],uint256[],address,string)", +"1734523c": "maxSecTurboDuration()", "17349ad5": "TokenDecimals(uint256)", +"17349b5b": "psalePrice()", +"1734d7fe": "hqBase()", "17356c22": "getVirusLength()", +"1735b300": "getRecordIndexLengthForCycleMembersByDepositor(address)", +"173652b0": "calculateTransferFee(address,uint256)", "17367bc8": "VDN(uint256,string,uint8,string)", +"17376938": "rawNameOf(address)", +"17379fbd": "showPlayerAddress(address)", "173817b6": "checkSellerOffer(address)", "173825d9": "removeOwner(address)", +"1738568c": "mulSupport2()", +"173865ad": "swapAndLiquify(uint256)", "1738c3ff": "removeVendorById(uint256)", "17393f04": "PURCHASE_DIVIDER()", "173975aa": "SetENGCommunityAddress(address,address)", @@ -13329,40 +24363,65 @@ "173a48a4": "distributeFUDD(address[],uint256,uint256)", "173a4b70": "newProposal(address,uint256,bytes32,string)", "173a705f": "transmitStatus()", +"173a8c35": "tvlReward()", +"173b9904": "reserveFactorMantissa()", +"173bb69d": "Rewards(bytes32)", +"173c0c1d": "suancai()", +"173c5df5": "shardPoolIdCount()", "173c9d27": "batchTransferForDifferentValues(address[],uint256[])", "173cb7de": "getNumReleasesForNameHash(bytes32)", "173d2795": "train1(uint256)", "173d6ca2": "tier1Reached()", +"173d8346": "burnGasAndFreeFrom(address,uint256)", +"173d9e1c": "purchaseMANYTokens()", +"173dbbe9": "viewPublickey(bytes32)", "173dbd4e": "GoCryptobotCoinCore()", "173dc741": "addBonusToUser(address,uint256,uint256,uint256)", +"173df829": "isCarWorld()", +"173e40d0": "ICOOpened()", "173e49b7": "BoomstarterToken(address[],uint256)", "173ea238": "changeBtcOracle(address)", "173ea341": "isPrivilegeAddress(address)", +"173ec703": "LogSetQuestionFee(uint256)", "173f22f0": "rmin(uint128,uint128)", +"173f61e4": "creditGas(address,address,uint256)", +"173f8e6b": "Nhom14(uint256)", "173fc012": "preSignedCheck(bytes8,address,address,uint256,uint256,uint256,uint8,bytes)", +"173fcb41": "shortRates(bytes32,uint256)", +"173fd1db": "pairCount()", "173febeb": "Send69Wei()", "17409b42": "registrarAlumno(uint256,string,string,string)", "1740b479": "gameManagerSecondary()", +"1741519d": "PresaleOpen()", "1741526f": "getContractPayout()", "17415d50": "_deleteRequest(address,address)", "1741c48e": "getNextPoliceNode(address)", "17421c8c": "withdrawAmountToken(address,uint256)", "17431634": "LevelUp(uint256,uint32)", "17436b1e": "RoundOpen(uint256,uint256,uint256)", +"174389a5": "updateBetRules(bool,uint256,uint256,uint256,uint256)", +"1743fd4f": "sushiswap_swapTokensForExactTokens(uint256,uint256,address[])", "1744215a": "EIP20()", "1744cfe4": "GetLoansLenght(bool)", "1744d5a5": "StageBonusUpdated(uint256,uint256)", +"1745145e": "setOperatorsContract(address)", "17453358": "date01Oct2018()", +"1745399d": "extractFee(address)", "1745422c": "addTx(address,uint256,string)", "174609f8": "UNC()", "17462891": "proofOfShit()", +"1746a2b4": "multiReassignProviders(address[],address)", "1746bd1b": "getGameInfo()", +"17470959": "protocolConnected()", +"174714cd": "testAll()", "17473975": "breakDurationBetweenPresaleAndICO()", "1747af0d": "AdminOwnershipTransferred(address,address)", "1747b48b": "Reveal(uint256)", "1747dfd4": "ContractPlay()", "17484b0c": "RSOC()", +"1748f1ca": "signatureIsValid(bytes,address,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "17490da8": "modifyTrialDeadline(uint256)", +"17499265": "divs(uint256)", "1749bdf1": "getClassRank(uint32)", "1749c16f": "isEnded(uint16)", "1749e462": "getOwnersTokenList(address)", @@ -13370,403 +24429,750 @@ "174a6277": "getTxDataBlockNumber(address,bytes32)", "174a84d8": "BetComplete(bool,uint256,uint256,uint256,address)", "174b0093": "createDefaultGen0Zodiac(uint256,address,uint256,uint256,uint256)", +"174b216c": "LogPausePreSaleRound()", +"174b6fed": "policyId2Index(bytes32)", +"174b7a6a": "showSysInfo()", "174b9fa4": "getCurrentDayDepositLimit()", +"174bbc94": "donVi(uint256)", "174c2002": "burnAndDist()", +"174cbf97": "aaiStats(address,address)", "174cd9b3": "lastBlock_a19()", +"174d988a": "getAccountCreator()", +"174db7bb": "queryMintToken(address)", "174dcea8": "getBalanceAndHolderByIndex(uint256,address)", +"174e015b": "leftover()", +"174e31c4": "claimReward(address,uint256)", +"174e3efc": "getFrostPool()", +"174e4408": "setFeePoolLimit(uint256,uint256)", +"174e6832": "getValidatorId(address)", +"174e6c98": "text(string)", "174e7d55": "isReadyToAction(uint256)", +"174ea0f7": "tokensInThisPool()", "174efd12": "minBidValue()", "174f51eb": "winOdd()", +"174f57af": "mintReward()", +"174f7094": "totalUnlockedLP()", "174fa48e": "distributeBTCG(uint256,address[])", +"17503a77": "invitePrepare(bytes,bytes)", +"1750832b": "positionInfo(bytes32)", +"1750c908": "getBuyOrderID(address)", "1750f564": "newProposal(bytes32,address,uint256,uint8,uint256,bytes)", +"1751186c": "syncrapids()", +"175188e8": "removeStrategy(address)", "1751dc90": "createMultiplePhoenixes(uint256[],uint256[],uint256[])", "175207b7": "_readBlockBeneficiary(uint256,bytes)", +"175209de": "setStatusByID(uint16,uint8)", "17528c7f": "ReceiverAddressSet(address)", +"1752c065": "HELD_TOKEN()", "175323a8": "contributeETH()", +"175360a1": "calcSwapErc20ToPiptInputs(address,uint256,address[],uint256,bool)", +"17539b1e": "_setBorrowAllowed(bool)", "1753a655": "singBy(address)", "1753d61c": "AirdropToken()", +"1753f37d": "swapTT(uint256,uint256,uint64,uint8,uint8,uint8,bytes32)", "175466ee": "proofVerifyFailed()", "17548962": "SPTI()", +"17548b79": "logicTargets(bytes4)", +"17549d48": "removeWalletandToken()", "17549ff0": "lovelock_price_LOV()", "1754bd8e": "minerState(uint256)", "1754de57": "sendleftmoney(address,uint256)", "1755ff21": "poolAddress()", +"17569c1d": "getSecondsRemainingInBatch()", "1756ffd9": "addMonsterClassBasic(uint32,uint8,uint256,uint256,uint8,uint8,uint8,uint8,uint8,uint8)", "17570e80": "logReportingParticipantDisavowed(address,address)", +"17575430": "__curvePool()", "1758078b": "trader()", +"17583104": "_setMarketMintCaps(address[],uint256[])", "175892b4": "previligedSubApproval(address,address,uint256)", "17597b0f": "getLockedAmount_contributors(address)", +"17599cc5": "answers(uint256)", +"1759be33": "usdtMsUniContract()", +"1759fe3f": "nuke(uint24,uint24)", "175a0061": "install()", "175a8bf4": "MigrationAgent(address)", "175b0284": "closeChannel(uint256)", +"175b2304": "makeBid(uint256)", "175b859d": "Bitwincoins(uint256,string,string)", "175baaf1": "accrual(uint256,address)", +"175bbecf": "isOn()", "175beead": "advisoryTokens()", +"175c5189": "getPeriodIsClaimable(uint256)", +"175c5577": "wrappedResource(uint256)", "175c6709": "TransferStatus(address,bool)", "175c8640": "ZEEX()", "175c9885": "POSSCOIN()", +"175d1157": "propose(string,address)", "175d27e0": "MONTH_IN_SEC()", +"175e9523": "_supplies(uint256)", "175ebfc7": "AdoptionOffered(bytes5,uint256,address)", "175f6d9c": "JustAnIndex1()", +"175f9e53": "getDefaultACLAppId()", +"175fd589": "newUpgradeCard(uint256,uint256,uint256,uint256,uint256,uint256)", "17602ddf": "isFlowerAuction()", +"17604f71": "agentxName_(bytes32)", "1760705f": "setAssetContract(address)", +"176193dc": "test_imin()", +"1761a4dd": "_accept(uint256)", "1761af6d": "upgrade(address,address,address,address,address)", "1761eab4": "buyLong(address[2],uint256[5],uint8,bytes32[3])", "17623c41": "isAllowedToParticipateNow()", "17623e5b": "unauthorizeManager(address)", +"176279c0": "mintCToken(address,address,uint256)", "17634514": "creationBlock()", "17634ec8": "freezeAccounts(address,bool)", +"17641426": "BonusCreditGranted(address,uint256)", "176416ed": "getVotesBetween(uint256,uint256,uint256)", "1764250a": "verifyWithdrawSignatures(uint256,address,address,uint256,bytes,bytes)", +"1764299f": "payService(string,address,uint256)", +"176446af": "closeProjectWithdrawTokens(uint256)", "17645315": "migrate_participant(address)", +"1764d247": "opinionIndexToOwner(uint256)", "1764dc3d": "GiveTokenPerm(address,address,bytes32)", +"1764e7e6": "withdraw(string,uint8)", "17653b6e": "setChainRoot(address)", "17655f6c": "transferOtherERC20Assets(address,uint256)", +"176578b1": "btcToDoc(uint256)", "17659a1d": "Undelegate(address,uint256)", +"1765ae1a": "getappoinment(uint256,uint256,string,uint256)", +"1765bd9b": "_pornToken()", +"17664023": "ConsolationRewardsClaimed(uint256,address,uint256)", +"1766486d": "timeLockedUpgrades(bytes32)", "1766f424": "unsoldAllocationDelay()", "17671962": "calcTotalWinnerKeys(uint256)", +"17673db9": "_tradeWithOracle(address,address,address,uint256,uint256)", "17674544": "deleteEntry(string)", "17674e4d": "logMarketMigrated(address,address)", "17676e4c": "valueSet(string,bytes)", "1767da08": "addBalanceForOraclize()", +"1767f81f": "liveUsersStatistics()", +"176835e4": "exitPending(address,uint256)", "176854f6": "setLastJadeSaveTime(address)", "176898c9": "setRefundStatus(bool)", +"1768af96": "consentRecord(uint256,address)", "1768b436": "ETCSurvey()", "1768fd6f": "getMaxLockAmountAllowedByLtd()", "1769511c": "fidaTokenAddress()", +"17695afc": "safeGenTransfer(address,uint256)", "1769af29": "removeFromOwnerlist(address)", "1769d552": "indexextend()", "1769f049": "fee_balance()", +"176b02bb": "Minted(uint256)", "176b0eac": "gcStartTime()", +"176b5d02": "depositedCards(uint256)", "176b63f4": "seedSourceA()", "176b6742": "EtherFlip()", "176b866f": "alterBankBalance(address,uint256,bool)", +"176bba01": "disableBurningAddress(address,bool)", "176cd40a": "PUBLIC_OFFER_SUPPLY()", "176d0780": "createMicroWallet(uint256,uint256)", +"176d5fb0": "validatestudent(string)", +"176d875d": "__getVault()", "176e5f32": "withDrawMoney()", +"176e8dbb": "mortgageByLandId(uint256)", +"176eb7d0": "cancelOrders(address,uint16[],uint256,bytes)", +"176f0c47": "brew()", "17700f01": "disableTrading()", "17701ee6": "mission()", "1770616c": "tier3LOT()", +"17706f8c": "getUpperBoundAmount()", +"17707c4c": "getHoneyNumOfLevel(address,uint256,uint256)", +"17707d9b": "dfx()", +"1770b6d8": "getPublicKey(uint64)", "17711a46": "setTokenTimelockFactory(address)", "1771b7dc": "bids_burned_count()", "1771d4d4": "setAliasPrice(uint256)", "1771ece6": "updateHouseFee(uint8)", +"17720118": "AIOToEth()", "17727a00": "withdrawCapital()", "1773234b": "kscBatchBurnWhenUseInSidechain(address[],uint256[],string)", "17733eac": "yank(address[],address[])", +"17734cc9": "NMP_RANDOM_BASE()", "177378f0": "testRegularBuy()", "17738cef": "placeEMONTBid(address,uint8,uint256)", "177413da": "bet(bytes32)", "1774218e": "CRAToken(address)", "17743338": "MakeClaim(address)", +"17743c04": "lunaBP()", "17749a16": "adminRefund(address,address)", +"1774cb57": "cardOwners(uint256)", "1774df3e": "distributeMAGGIE(address[],uint256,uint256)", "1774e646": "setUint8(uint8)", "1774f6c6": "confirmPurchase(uint256,address,address)", +"1775089d": "pendingOrai(uint256,address)", +"17753bfe": "newLLCToken(string,string,uint256,address)", "17753c44": "DIGTREX()", +"1775765f": "liquidationRatio()", "17759493": "TotalPoSRequests()", +"17764782": "unclaimedTreasuryFund()", "1776683e": "payDev(address)", "1776b437": "countInvestorsRefundedInCrowdsale()", +"1776dee3": "initiateChangeAllowed()", "177766e6": "getOptionChain(uint256)", "17776b86": "ExhibitToken()", +"1777f7a6": "bindCoreParent(address,address)", +"17785c0c": "stuckBank(address)", "1778f1df": "ICOStartDate()", +"1778fcf7": "maxDiff()", +"1778ff46": "producerOffer(address,uint256)", +"17792678": "getMinRate()", "177a9e9d": "refundFor(uint256)", "177b3010": "registerProject(string,string)", "177b979e": "initiatecontract()", "177bd86e": "syncSubscriptions(address[],string[],uint256[])", +"177bd971": "retireCredits(address,uint256)", +"177c359c": "tokenUniswapPairASTR()", "177c75ae": "offerIndexedPieceForSale(uint256,uint256)", "177cf218": "UNIX_DAY()", "177cfaa2": "teamTwoShares()", +"177d2a74": "addAuthorizedUser(address)", +"177d4507": "dchf()", "177d8ee4": "emitSkillsSet(address,uint256,uint256,uint256)", "177dc9e5": "getCompte_15()", "177dcde9": "_transferTokens(address,uint256)", +"177de89c": "fortune()", "177e0f71": "setLockedWalletReleased(address,bool)", +"177e48d0": "UpgradeOthersToLevel2FromLevel1(address[])", "177e6ae4": "ETHERFLEXCrowdsale(address,address)", "177ea52d": "buyTokensSigned(address,bytes,uint256,uint8,bytes32,bytes32)", +"177eebb0": "globalConstraintsRegisterPre(address)", +"177f1295": "issuedSynthsByERC(address,bytes32)", +"177f5ed3": "NewRequest(uint8,address,string,uint256,uint256,uint256,uint256)", "178003e1": "BCTopCraftCannabis()", "178021e3": "saleFee()", +"1780ab98": "getTokenSafeName(address)", "1780eb18": "charityFundations(uint256)", +"1781261f": "affiliateBalance(address,address)", +"17813027": "rewardsGdao(address)", "17813d37": "BitGCoin(uint256,string,uint8,string)", +"1781f1a0": "totalUSDTInvested()", +"1782207d": "allAgreements(uint256)", "178228f1": "enterGame(address,uint256)", +"178261d4": "VerificationNodesWallet()", "1782a789": "removeContact(bytes32)", "17834d36": "isReachedHardCap(uint256)", +"17837baa": "unstakingFrozenTime()", "178394bd": "LockedUnsoldTokens(uint256,address)", +"1783f025": "getTwaPerBlock(uint256)", "178407ca": "Board(address)", "178450bd": "EbocoinToken()", +"17849646": "totalDonationAmount()", +"17849bb8": "deposit(address,uint8,uint256,uint256,uint256)", +"1784cfb6": "Destroy(address)", +"178524e3": "viewLottoDetails()", +"17852f2d": "setUSDCentsExchangeRate(uint8)", "1785478c": "_preValidatePurchase(address)", +"178574ec": "eth_rate_gate()", "1785f53c": "removeAdmin(address)", "1785f8dd": "PreTgeDisable()", +"1785feab": "popPerBlockCycleOne()", "1786351b": "AllbesticoContract()", +"178658e0": "updateAndClaim(address)", +"1786ba33": "submit(uint32,bytes32,bytes32,bytes32,uint256)", "1786e362": "orderTokensOf(address)", +"178704b6": "_tokenQuote()", "1787119c": "spendlarge(uint256,uint256,uint256)", +"1787787b": "s(address,uint256)", "17880b67": "getTotalBorrowingMonsters()", "17888efc": "projectTokens()", "1788de80": "enableTokenTransfers()", +"1788e3db": "sm(address,uint256)", +"1788f06f": "proxyPayable(address,string)", +"17890d1a": "FundClosed()", +"17896e12": "getTranscoderRewardPool()", "17897fcd": "RedRabbitToken()", +"1789ebfb": "isValidWrapper(address)", +"178a329b": "getFileTransferProofWithTDateTime(bytes32,uint256)", +"178a42ed": "setSATOPolicy(address)", "178a8c8d": "accountsHolding(uint256)", +"178a8d07": "buyBackRate()", "178a8f34": "lotIdsByAddress(address)", "178a9e2e": "tixGenerationContract()", "178a9ffb": "HarborCrowdsale(uint256,uint256,address,uint256,uint256)", "178ab6bb": "startICOStage8()", +"178ac923": "operationProfit(uint256)", "178af534": "createTokensWithoutReffer()", "178afb39": "setSalesState(bool)", "178b6de6": "getAllTokens(address)", "178b8baf": "printCoins(uint256)", +"178b9929": "manualyMintTokens(uint256,address,uint256)", "178b9d1a": "closeTicket()", "178c02e9": "prometheusSoldCount()", "178c17f0": "_createRandomNumber(bytes32,uint256)", +"178c2c83": "unjail(uint256)", "178c4e40": "proof_of_public_key1()", +"178c5655": "startMergingWindow()", +"178ce4ec": "_rateIsFrozen(bytes32)", "178cec5c": "setBAU(bytes32,address,uint256)", +"178d341f": "mAsset()", +"178d46aa": "getValidatorContractAddress(uint256)", +"178d680d": "isRegister(string)", +"178daa54": "addressBelongsToAccount(address)", +"178db12f": "getStickerListWithSeason(uint256,address)", +"178ddf1b": "isAllowed(uint256,address,uint256)", "178e6079": "APP_ADDR_NAMESPACE()", +"178ee9d9": "CS_CLAIMED()", "178ef307": "numberOfTokenHolders()", +"178f7b40": "calculateFeeAmount(uint256)", +"178f9993": "totalUniqueUsers()", +"1790181d": "ClaimCompTwo(address,address[],uint256)", +"1790187b": "pumpNative()", +"17901de3": "virtualReferralShare()", "17904743": "bitpaintingStorage()", "17905b2a": "Taur()", +"17908139": "pauseGameEvt(bool)", +"17908e77": "getAllocatedLP(address)", +"179091a4": "_updateDarknodeRegistry(address)", "1790bd17": "contributorIndexes(uint256)", +"1790da96": "isTokenPaused()", +"1790ebd5": "termEndBlock()", "179101a6": "DECoin()", +"179158d8": "approve_608(address,uint256)", +"17915e8d": "getCluster(address)", "17916537": "clearDistributionDetail()", "179194e1": "Bitnova()", "1791cf01": "arr(uint256,uint256,uint256,uint256,uint256)", "1791db21": "tokenMult()", +"17924f65": "IdentityNotUpgradable(string,address,string)", "1792b0bc": "transferTokens()", "1792cc61": "tokenDecimalPlaces()", +"1792d473": "_allocPointForSwapReward()", "1793140a": "setO1(address)", +"17933ff2": "setPercentageFeeRewardsBps(uint256)", +"17937a07": "makeFundedCall(address)", "179381d8": "setICOController(address)", "1793b0f2": "addRecord(bytes32,string)", "1793c314": "lastChance(address,address)", +"17941469": "MINT_DECREASE_TERM()", "1794164b": "killcontract()", +"1794614b": "getERC20BalanceTo()", +"17948fde": "setBtcPrice()", "1794a463": "changeDevFees(address)", "1794bb3c": "initialize(address,address,uint256)", "17958e75": "omegaToken()", +"1795c052": "createEscrow_relayed(address,uint256,uint256,uint256,address,string,string,string)", "17961d0f": "ord()", "17968fc9": "doPurchase(address,uint256)", +"1796a16a": "balances_freez_one(address)", "1796b2ca": "unspent_supply()", "17974399": "changeWithRef(address,address,uint256,uint256,address)", +"179750ec": "setTokenAndPrice(address,uint256)", "1797552b": "approveansCall(address,uint256,bytes)", +"17977c61": "latestProposalIds(address)", "1797814e": "IADOWR()", +"1797b583": "setTakerValueLimit(uint256)", +"1797c84c": "unlockTime(uint256)", "1797ec8a": "totalCrabTraded()", "17986d83": "setRefferalFee(uint256)", +"1798de81": "initialize(address,uint64)", +"17991ad5": "totalUserLocks(address)", "17993e2f": "IREC()", "17997878": "totalOwned()", +"17999ff4": "bonusIsActive()", +"1799ce1a": "checkIsPastEvent(bytes32)", "179a5480": "masterresellercontract()", "179ac197": "setOraclizeContract(address,address)", "179b1b70": "LogFinalize(uint256)", "179b51b1": "lotteries(int256)", "179b73da": "killBoardProposal(uint256,address)", +"179c15de": "ExternalTokenTransferFrom(address,address,address,uint256)", +"179c4055": "removeFundManager(address)", "179c537e": "setSaleContractDepositAddressVerified(address)", "179d375c": "addToken(uint256)", "179dd216": "calculateMarketPixelPrice(uint256)", "179dfbf3": "getBettingStatus()", "179e91f1": "tokensLockedAtTime(address,bytes32,uint256)", +"179ea2dd": "dividendMonthCounter()", "179ee8bb": "acceptLoan(address,address)", "179ef331": "nameRegistered(bytes32,address,uint256)", +"179f9889": "setAffiliateAccount(address)", +"179fc6fb": "CalculateDistributeProfitsOBELIX(address)", "179fc99f": "etherBalanceOf(address)", "179ffe76": "getMovie(uint256)", "17a081bf": "queryTimestamp(uint40)", +"17a09fb7": "burnTokensAndWithdrawKitties(uint256[],address[])", +"17a0e7ca": "isValidLeaf(uint256,uint256,bytes32,bytes32[])", +"17a12950": "getTotalReputation()", +"17a1d012": "curve3pool()", "17a23ec6": "TOKEN_scaleDown(uint256,uint256)", +"17a263f2": "orderTimestampOf(address,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)", +"17a45b59": "blockedBalances(uint32)", "17a523c1": "useInsurance(uint256)", +"17a5a6ee": "signups(address)", "17a5d4df": "minTransactionAmount()", +"17a5f197": "Register(address,string,address,uint256)", "17a5f8cc": "createRatePlan(string,bytes32)", "17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", "17a650cc": "enter_square(uint256)", "17a66006": "stageBaseRate()", +"17a66c24": "getChannelManager()", "17a689f3": "SuperSkyNet()", +"17a7191f": "maxStep()", "17a7cd10": "weeksFromCreation()", +"17a7d336": "calcValueInTokenWithPool(address,uint256)", "17a7eb4c": "vote02NoCount()", "17a7f4cc": "feedOnKitty(uint256,uint256)", +"17a7f4d6": "setTicketSupply(uint64)", "17a7f53e": "PriceHKGChange(uint256,uint256,uint256)", "17a7f9b2": "countOfAddresses()", "17a87b80": "changeInitialPrice(uint256,uint256)", +"17a933f1": "ProposalRaised(address,string)", +"17a94347": "OXS()", "17a950ac": "actualBalanceOf(address)", "17a96982": "pullBounty(uint256)", "17aa2899": "toB32(address,bytes)", +"17aa451b": "setLockPercent(uint256)", +"17aa7fcb": "newRecord(uint256,string,string,string,uint256)", "17aaaea7": "BaseAltCrowdsale(address,address,address,address,bool,uint256,uint256,uint256,uint256,uint256)", "17aad447": "FOUNDERS_LOCK_START_TIME()", +"17ab06e1": "MIN_POOL_AMOUNT()", "17ab6cbb": "getRedCards()", +"17ac0919": "USERS(uint256)", +"17ac10db": "addDepositer(address)", "17ac195a": "devTokensWallet()", "17ac410f": "mintedtokens()", +"17ac413a": "creditsTokenPriceInCents()", +"17ac56b6": "CONTRACT_DURATION()", "17ac896c": "GlobalBusinessSystemToken()", +"17ad7155": "getUserLoanDetails(uint256,uint256)", "17adeb7c": "setClientProviderUID(address,uint256)", "17adfa08": "confirmOneBuy()", "17ae1f6c": "commission1()", "17ae1fc5": "getIsActive(address)", "17ae5d88": "unPreIco()", +"17ae97b5": "Candidats(address)", "17af4d8a": "removeRoleAll(string)", "17afa8a3": "set_refererPercent(uint256)", +"17afc1c6": "OnTransferDisallowedAddressesChanged(string,address)", "17afd19a": "decrementDID(address,address,uint256)", +"17b18c89": "stakeLocked(uint256,uint256)", +"17b278bc": "Invertir_Ahora()", +"17b2a081": "CSTStartPrice()", "17b2e350": "deletePermissions(address,address[])", +"17b38db4": "updateCachedSynthDebtsWithRates(bytes32[],uint256[])", "17b3a34b": "_addIdentities(uint256,bytes32[])", "17b3c7ea": "getAllProposalVotersAndVotes(uint256)", +"17b47cc4": "Items(uint256)", +"17b4a6d9": "OwnerProtectedCrypton(uint256,uint256)", +"17b4a9c9": "setMentions(uint256,string)", "17b4c4d3": "META()", "17b54069": "setRoundOne(bool)", +"17b576c6": "erc721WrapperModel()", +"17b58b02": "getCashback(uint256)", "17b591e5": "closeContract(bytes32,bytes8,uint256,uint32,string,uint32,uint32,uint64,uint64,bytes32)", "17b5f729": "_getAuctionIdArray(uint64,uint64)", "17b65ae6": "hasEmployerMinRating(address,address,uint256)", +"17b6ad5b": "testSuicideNonexistentTarget(address)", +"17b6c47e": "ManuallyAddedBallot(bytes32,uint256,uint256)", "17b75be6": "setBigICOStopped(bool)", +"17b7a728": "finance(uint256,uint256)", "17b7c328": "OpenPollCoin()", +"17b7cf2b": "isRegisted(address)", "17b83aa6": "getSaleContractDepositEtherMax(address)", +"17b857dd": "renouncePauzer()", "17b88dd7": "NEC(address,address)", "17b98723": "isAuraSet(uint256,uint256)", "17b9a28e": "calcWinner(uint256,uint256,uint256,uint256)", "17b9e89c": "sumHardCapPreICO3()", "17ba169a": "HybridEXToken(address,uint256)", +"17ba1b8b": "_setProposalThreshold(uint256)", +"17ba3a31": "unwrap(address,address,uint256,uint256)", "17ba86af": "OpenContentIndex()", +"17baf66a": "setAssetsMinimumDeposit(address[],uint256[])", "17bb0532": "AdminAddressChanged(address)", +"17bb7272": "swap2YFIIRouting(uint256)", "17bbcb6f": "newInvest(address,uint256)", +"17bcc98e": "wdEther(address,uint256)", +"17bcd9a9": "disableFuturesContractChange(address)", "17bd1251": "txsThreshold(uint256)", "17bd5956": "withdraw_token(address,address,uint256,uint256)", "17bd927c": "testNewCounterValueAfterADecrease()", "17be3fa5": "lockToken(address,uint256)", "17be85c3": "getEntries()", "17be89f0": "createTradeContract(address,uint256,uint256,bool)", +"17bf0ec1": "setfarmingcontract(uint256)", "17bf2671": "PDOne()", +"17bf370b": "shareholderPointOf(address)", +"17bf4375": "setOrderAnalytic(uint256,uint256,uint256)", "17bf8f50": "sendTokenFromDex(address,uint256)", +"17bfdd57": "getEthereumAddress()", "17bfdfbc": "borrowBalanceCurrent(address)", +"17c06b34": "pairOwners(address)", "17c0b0f9": "Escrow(address,uint256,address)", +"17c0ee31": "falseTotal()", +"17c113c2": "moveExtraFundsToBucket(bytes32,bytes32,uint256,uint256)", "17c163e9": "ROLE_STATE_LOCK_PROVIDER()", +"17c1b296": "init(address,address,string,string,uint8,uint256,uint256,uint256,address)", "17c201a1": "getRemainingMineSupply()", "17c208a0": "EtherGirls()", +"17c2338e": "lesserThanUintIntPassTest()", +"17c23cec": "ROBXrtAirdropROBX(uint256,uint256,uint256,uint256)", "17c24891": "completeInternal()", +"17c2a781": "feeAccum()", +"17c2a98c": "sidechainAddress(address)", +"17c2b2ef": "investContractsIndices(address)", +"17c2b910": "accountStateRoot()", "17c2d98b": "minSizeInvest()", "17c2f390": "getNumberOfSuccessfulSteps()", "17c3119b": "TeamAndAdvisors()", "17c32a58": "latestPhaseNumber()", +"17c33381": "PresaleStarted()", "17c35e88": "deedName(uint256)", +"17c38700": "isNodeBroadcasted(bytes32,uint256)", "17c3925f": "encodeBillingMetadata(uint256,uint256,uint256,uint256)", "17c39286": "getCars()", +"17c444be": "whitelistMultipleMembers(address[])", "17c4c7bb": "getShipPriceById(uint256)", +"17c4ecfb": "matchs(uint256)", "17c4f0a0": "autoReleaseTokenSaleJM()", "17c4fcbf": "getExpectedGameSize()", +"17c50818": "isOneOf(bytes32[],address)", +"17c50bdf": "paint(bytes)", "17c51080": "getMyLockedFundsReleaseTime()", "17c520f9": "CerttifyToken(uint256)", "17c5838a": "stopMinting(string)", "17c59204": "determinateWinners(uint256,string,int256,int256[],uint256,string,string)", +"17c5b5cb": "requiresRebase()", "17c5fed8": "emergencyWithdrawalRatio()", "17c63141": "getCountSenderCities(address)", "17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", +"17c65e12": "forceRedeem(address)", "17c6ee4f": "PaidOut(address,address)", "17c70de4": "initiationTime()", "17c73612": "ItlyCoin()", "17c73ff0": "COMMISSION_WALLET()", +"17c81c1d": "taxer()", "17c83ed4": "getBindAddressAccount(address)", +"17c8790f": "setSlowCancelDelay(uint256)", +"17c8db56": "MilestonePostponingHash(bytes32)", +"17c8f297": "fundsInContract()", +"17c91429": "query(bytes32,uint256,uint256,uint256)", +"17c931bd": "refundGas(uint256)", +"17c9c64d": "addLiquidityToUniswapHAL9KxWETHPair()", "17ca1a6d": "getCrystalsSummary(address)", "17ca2e41": "addBlacklist(address,bool)", "17ca7f63": "getMintMarketMakerApproval(address,address)", +"17ca9305": "migrateWallet(address,address,bool,bool,bool,uint256,uint256,address[])", +"17cab596": "setAPIBaseUrl(string,string,string)", "17cacc1e": "_beingVIP(address)", +"17cae2fe": "getURIs(address,address)", +"17caf6f1": "totalAllocPoint()", +"17cb500b": "postdecr_u8(uint8)", "17cb6426": "totalPaidOut(address)", +"17cbb4b9": "setPoll(uint256,uint256)", "17cbe981": "ChangeShipSellMaster(address)", "17cc4138": "lastUETCWC()", "17cc67b9": "firstRoundICOStart()", +"17cc6ed2": "withdrawByCToken(uint256)", +"17cc862d": "resetLastEmissionBlock()", +"17cc915c": "nullifierHashes(bytes32)", "17ccf6a0": "rate5()", +"17cd0210": "store(uint256,string,string)", "17cd4d5a": "setEtherPriceInEuroCent(uint256)", +"17cd6278": "mint(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"17cd69ff": "balanceMaintained(address,uint256)", +"17cd732c": "bucketSize()", "17cd802d": "repayment()", "17cdb812": "TEAM_VESTING_AMOUNT()", "17cdbac0": "usedvalue()", "17ce42bd": "addEntry(string)", +"17ce7ed3": "proposeProposal(address,address)", "17ce9aae": "getIsSecondPhaseByTime()", "17ce9d68": "getMeshPointByName(string)", +"17ceea23": "sendTokenFromContract(address,uint256)", +"17ceff50": "P2pUnlocker(address)", +"17cf31d8": "getAttributeValidator(address,uint256)", +"17cf5391": "vestedAmount(address,uint256)", "17cfd0d6": "house_edge()", "17cfde55": "onSubUnHold(uint256,address,bool)", "17d01716": "unregisterPair(address,address)", "17d077af": "NamiPool(address,address,address)", "17d0aa13": "TXOtoken(address)", +"17d14942": "isWHITELIST(address)", +"17d1734f": "increaseWeight(address,address)", "17d18cd6": "_capOwO()", "17d28620": "toggleTransferFor(address)", +"17d2a9ef": "slrs()", +"17d2c784": "_calculateEngageQuantities()", +"17d2d3a8": "calculateWithdrawInStrategy(uint256)", +"17d2dc94": "LUCAX()", "17d2e4e4": "realDevRewardWeight()", +"17d33845": "stimulusDecimals()", "17d35f47": "setLocked(uint256)", +"17d36896": "BehalfBet(address,uint256,uint256,uint256)", "17d3953f": "tmed()", "17d48fc7": "getMigrationAccount(address)", +"17d4a491": "isManufacturer(address)", "17d4e24c": "EXT_COMPANY_STAKE_THREE()", "17d51877": "cancelLine(uint256)", +"17d5430a": "getNumMembers()", "17d55d13": "timeLeftToBid(address)", "17d5e4be": "testDrip(address,address,uint256)", "17d60394": "Briant2Token()", +"17d69bc8": "strikeAsset()", "17d6de15": "setSnapshotBalanceBatch(address[],uint256[])", "17d70f7c": "tokenId()", "17d7a154": "getShipTotalEarned(uint32)", "17d7a47d": "sendOtherTokens(uint8,address,uint256)", "17d7de7c": "getName()", "17d8405a": "setUserAccount(bytes32,address)", +"17d85020": "_0_shouldBeGreaterThan_neg_1()", "17d86154": "setStartPrice(uint256)", +"17d8ec7f": "factoryAdmin()", "17d8fd7a": "acceptedBookingfc(uint256)", "17d928a7": "ClaimNFT(uint256,uint256,uint256)", +"17d92cff": "getRevokedDefaultOperator(address,address)", "17d94ad3": "isMinterAllowed(address)", +"17d960eb": "verifyIds(uint256[],uint8)", +"17d97dae": "getConfigValue(address,bytes32,string)", +"17d987a1": "update(bytes32,uint256,uint256)", +"17d999f0": "CheckHash(bytes32)", "17d9adb7": "stage_3_tokens_scaled()", "17d9b4ab": "checkPromo(string)", "17d9bfcb": "withdrawAndTransfer(uint256,address)", "17d9c090": "isCharged()", +"17da255e": "setMinLoanCollateralSize(uint256)", "17da485f": "getMiningDifficulty()", "17db59a4": "dEthereumlotteryNet(address,address,address)", "17dba48c": "GRAC2Coin()", "17dbaf9b": "unlockFirst()", +"17dbd763": "setCRateOnce(uint256)", "17dbe4f1": "burnPassportToken(address,uint256)", "17dc86c5": "minWeiContribution()", +"17dc90d6": "saletotal()", "17dc92f5": "cash(uint256)", +"17dcecf7": "payinterest(uint256,uint256,address)", "17dd0873": "Winner(address,uint256,uint256,int256,string)", +"17dd2c23": "getIjinData(uint256)", "17dd4cc1": "getPreviousPrice(bytes32)", +"17dd9406": "savingsIndex()", +"17ddd25d": "amountToTake(uint256)", "17de15ad": "GreHackCoin()", "17de2f1f": "defaultOwner()", "17dec7af": "distributionFixed()", "17df1773": "StopIco()", "17df5696": "finishPreSale4()", +"17df5f91": "calculateUSDLForLGCY(uint256)", "17df74f9": "availablePercent(uint256)", "17df9a73": "findBid(address,uint256,bytes32)", +"17dfb5af": "_goToNextEpoch()", +"17dfd295": "isVipUser(address)", +"17dff6e9": "TOKEN_REWARD_RATE_MULTIPLIER()", "17e01c95": "isClientBlocked(address)", +"17e04b8e": "_registerNameXaddr(string,address,bool)", "17e04e55": "PoSatoshi()", +"17e0ab89": "minerPoolFeeNumerator()", "17e0aeb8": "setPropertyEarnUntil(uint16,uint256)", +"17e0d8eb": "Lf()", "17e0dfb2": "backAtIndex(uint256,uint256)", +"17e1307b": "B15(bytes)", "17e139a7": "lockedTokenHolder()", +"17e190fa": "getNumbers(address)", "17e1b09b": "minimumDeposit(uint256)", "17e1bfb7": "addInstitution(address,string)", +"17e1ccf2": "toggleAccessStatus()", +"17e1d3f2": "setMaxBreedCostMultiplier(uint16)", "17e22621": "joinGameWithInviterID(uint256)", +"17e28089": "working_supply()", "17e2912f": "Amount_of_AOC_for_One_ETH()", +"17e30091": "supplyAirpoolETH(uint256,uint256,uint256)", "17e30f6b": "TimeChainToken(uint256,string,string,address)", +"17e363c9": "priceAssetUSDRedeem(address)", "17e398a5": "seizedTokensWallet()", +"17e3a3d5": "ycrv()", "17e3f5fa": "callModifiedContractBalance()", "17e49dc9": "ETH033()", +"17e4b6fc": "tokenToInitialOwner(address)", +"17e4e954": "computeVkx(uint256,uint256)", "17e50791": "FundsReceived(address,uint256,uint256,uint256,uint256)", +"17e5123b": "getETHConstant()", "17e51f21": "CrowdsaleController(address,uint256)", "17e5259e": "ETH_MAX_LIMIT()", +"17e5a762": "GroupActivated(bytes32)", +"17e5a9a4": "yUSDT()", "17e63b79": "centsPerMonth()", "17e63bff": "setupICOPeriod(uint256,uint256)", "17e6a087": "markFunding(address,uint256)", +"17e6cd78": "setTxtFee(uint256)", "17e72721": "VLToken()", "17e760bb": "votingAllowed()", +"17e76ebe": "tokenBuyersMapping(address)", +"17e78b6c": "withdraw(address[],uint256[],string)", "17e7dd22": "getBooleanValue(bytes32)", "17e875e3": "Transparancy()", "17e95fbc": "releaseAdvisorsAccount()", "17e9884d": "OG()", +"17e9fcd5": "getExternalUnderlying(uint256)", "17ea0a46": "getalldeatil(uint256,uint256)", +"17ea1e34": "rewardsOfEveryDay(uint256)", +"17ea3117": "changeBSCVault(address)", "17ea4a79": "Took(address,uint256,uint256,uint256)", +"17ea875d": "confirmTransferRoot(bytes32,uint256)", +"17eaccf7": "LogExceededRestDepositPerDay(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"17eae258": "LogDiscountSet(uint256[],uint256[],uint256)", "17eb85e3": "contractBoost(uint256)", "17eba34d": "MIN_PRICE_IN_CENTS()", +"17ebc164": "testMoveMoney()", +"17ec83ca": "allowanceByPartition(bytes32,address,address)", +"17ed05e5": "joinMembership()", +"17ed0ca5": "withdrawTargetFromSavings(address,address)", "17ed31f4": "TIACOIN()", +"17edaa89": "workerBuyCollectible(bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "17edfb06": "trade(uint256,uint256,string)", +"17ee3c61": "_getPositionCount()", +"17ee6995": "rewardEnabled()", "17ee9c1d": "agreeProposal(address)", "17eef4cd": "setTotalTokensForPublicSale(uint256)", +"17ef3488": "newFactory()", "17ef67c6": "setContract1(address)", "17efa370": "SmartTokenController()", +"17f00662": "starterUsers(uint256)", +"17f0088d": "withdraw(uint256,uint256,uint8)", +"17f03ce5": "cancelProposal(uint8,uint64,bytes32)", +"17f11b1e": "stakingTokensAdded(address)", +"17f121cd": "userLockUps(address,address)", +"17f12b85": "getHolderWonTokens(uint256,address)", "17f143e1": "supplyExponent()", "17f19efb": "ZoarToken()", +"17f1bdf0": "exchange(int128,int128,uint256,uint256,uint256)", "17f1d65b": "hasIcoPhaseOneEnded(uint256)", "17f1ee05": "paySecurityPool()", +"17f1f499": "initTokenAndReleaseTime(address,uint256)", +"17f27c80": "LP_INITIAL_LOCKED_PERIOD()", "17f3679f": "testGetMixItemStore()", +"17f41418": "EMPTY_ALPACA_ENERGY()", +"17f421d7": "rebaseWindowOffsetmin()", "17f46c15": "getVoucher()", +"17f49fc5": "f2(bytes32)", +"17f4b8ee": "feeTokenStatus()", +"17f5759d": "makeWeiPrice(uint256)", "17f5de95": "MAX_TOKENS_SOLD()", "17f5f53a": "XYTTEST()", "17f6252f": "PRESALE_PERCENTAGE_4()", +"17f69ae1": "ThreeHSymbols(address,uint256)", "17f6c712": "ObjectPurchase(address,address,uint256,uint256)", "17f708fb": "removeWhitelist()", +"17f7182a": "future_admin()", +"17f7225c": "createProject(uint256,uint32,string)", "17f7a530": "_computeNextMinerPrice()", +"17f7dad8": "product(address)", "17f80c13": "releaseJoyToken()", "17f8252e": "tokenOwnerNumber()", +"17f85470": "getInfo4(address)", +"17f9211a": "mint_arg()", "17f95eac": "approveCloser(address,bool)", "17f992ab": "SECOND_VOLUME_EXTRA_BONUS()", +"17f9a6f7": "getOrComputeTobinTax()", +"17fa0807": "OnSetGameBanker(uint256,address,bool,uint256,uint256,uint256)", +"17fa1f47": "updateQuantity(uint256)", +"17fa61ee": "pendingKiwi(uint256,address)", "17fa664f": "callerDel(address)", +"17fa7787": "_getConfigAt(uint64,uint64)", "17faa66f": "transferOwnershipWithBalance(address)", "17fab0a0": "info(string)", "17face84": "withdrawCommission(uint256)", @@ -13777,23 +25183,32 @@ "17fb6c6e": "approveRequest(uint256,bool,string)", "17fc01bf": "LegendsCrowdfund(address,uint256,uint256)", "17fc3f55": "angelGoal()", +"17fc7dbf": "next_turbo()", "17fc91f8": "holdAmount()", "17fccb47": "erc20TokensContractAddress()", +"17fcfe22": "setForSale(uint256,uint256)", +"17fd06a2": "setWorkingHashRate(uint256)", +"17fd1d80": "tokenSymbol(uint256)", "17fd9cc5": "tradeWithInputFixed(address,address,address,uint256)", "17fe375f": "getComments(address)", "17fe5b79": "apolloSpecialTransfer(address,uint256)", "17fe6185": "log(address,address,uint256)", "17fe72bb": "setEnabled(address,bool)", +"17fecf00": "priceConsumerDAI()", "17ff0caa": "WeatherBet(uint256,address,address,address)", "17ffa830": "tixFounders()", "17ffc320": "reclaimToken(address)", "17ffd225": "KittyTrained(uint256,uint256,uint256,uint256[5])", "17ffe171": "lock(address,address)", +"17ffef34": "stakeAccount(uint256)", +"17fffcff": "group_pools(uint256)", +"180004fd": "TrigReward()", "18004bba": "transferArrayBalanceForPreSale(address[],uint256[])", "18005d93": "JinuToken()", "1800c0fe": "extraTime()", "1800e68e": "calculateTokens()", "1800ed8e": "manager_address()", +"18012bb1": "C4(bytes)", "18015191": "transactions()", "1801db43": "ExaCHF()", "1801f00f": "newProposal(uint256,uint256)", @@ -13801,64 +25216,116 @@ "1801fbe5": "mint(uint256,bytes32)", "1801ff10": "getAllContact(bytes32)", "18024acc": "voteStartTime()", +"1802bb35": "x(address,uint256,address,uint256)", "1802f969": "PokeCentral(address,address)", +"180346a2": "getBalancesByToken(address)", +"18037045": "removeItem(bytes32)", "18037b78": "issuerJurisdiction()", "18039230": "getPlayerGoodList(address)", +"18043ad0": "hatcheryDino(address)", "180489ed": "Withdrawal(address,uint256,bytes)", +"1804cb04": "tokenTransferFeeDivisor()", "18051c4a": "targetWei()", +"18051e88": "knightCheckpoint_enter(address)", "18054275": "executeSpins(bytes32,bytes)", "180603eb": "registrationFee_()", "1806874a": "amountLockedInVestings()", +"180692d0": "inflation_rate()", +"1806b1cc": "initialContractNyanHeld()", "1806be68": "CompanyReserve(address,address)", "1806cb4e": "getGiftSoldFromType(uint256)", +"18076e4f": "HALVING_WEI()", "180773de": "MAXIMUM_CONTRIBUTION_WHITELIST_PERIOD_USD()", +"18088786": "_FOMOTokenBalances(address)", "1808c6b6": "setDividendsDistributor(address)", "1808eeb8": "pending(bytes32)", "180941f0": "setPredictions(int16,string)", "1809549f": "updateAllComponents()", +"18095e0c": "askLiquidationFromCVaultETH(address,address,address)", "1809ced7": "sendEther(string)", +"1809e128": "flipPriceInBNB(address)", +"1809f1ff": "acoPoolImplementation()", "180a3277": "sendDiary(address,bytes)", "180a351b": "getByteFromByte8(bytes8,uint8)", "180a42a3": "LifeSet_006()", "180aadb7": "underLimit(uint256)", +"180aedf3": "jobs(uint256)", "180afbf6": "DaxtherCrowdsale()", "180b0d7e": "feeDenominator()", "180b2607": "lastRelease()", "180c0da6": "GlobalAssentToken()", "180c0dfe": "maxBuyTokenAmount()", +"180c253e": "total_staked_token_amount()", "180c9309": "hasOracle(address)", "180ca180": "CooperativeToken()", "180cb47f": "GOV()", +"180d41f3": "approve_487(address,uint256)", "180da450": "addTierRateAndTokens(uint256,uint256,uint256)", "180db1b4": "getErrno()", "180dc318": "owners(uint32)", "180ee30d": "forgivedChars(uint256)", "180eebba": "accumulatedGasFees()", +"180f0afd": "ARTIST_PRINTS()", "180f4c2c": "submitTotalBuyOrder(bytes32,uint256,uint256)", +"180f5842": "bToken()", "180f8f4f": "nextPrice2Of(uint256)", +"180fbccc": "kittyCoreContractAddress()", +"18103f2c": "registerDataProfile(string,address,bool,int256,uint8)", +"18103ffb": "confirmChangeRequest(uint8)", +"1810f4d3": "internalMutableFunc(uint256)", "18117abb": "changeOwnerWallet(address)", +"1811a6a6": "openRate()", +"1811c086": "CompanyTransferred(bytes32,uint256,address,address)", "18126325": "getOrganBlog()", +"18126dce": "maxT()", +"181285c2": "getBzbPerBlockForSwapReward()", "18128ec7": "buyMorty()", "1812982c": "fechAllForCandidate(uint256)", +"1812b1be": "garbageFees()", "1812d2aa": "setBonusToken(address,uint256,uint256)", "1812d996": "signature(bytes32,uint256)", +"18131ce0": "DROIInfo(uint256)", +"1813481e": "createRefCode()", +"1813aea5": "CHECK_POINT_HOUR()", "1813b684": "preIcoEnded()", +"1813f215": "openLock(address)", +"1814ac44": "remainingSheepRefundPool()", +"1814f5ee": "setUnlockValueMultiplier(uint256)", "18158e6b": "BdpController(bytes8)", "18159bf3": "_addSGCUsers(address)", +"1815c208": "ownerTransfer(address)", "1815ce7d": "setBackendAddress(address)", "18160ddd": "totalSupply()", +"1816467f": "updateDevWallet(address)", +"18165d70": "betCycles_(uint256)", +"18165f94": "initTimes(address)", "181670e6": "isApprovedOnceFor(address,address)", "18167416": "officialGameUrl()", +"1816a5e1": "LOG()", "1816e794": "getMainsale()", +"1816f314": "epoch_cycle()", +"1816fedc": "adminwithdrawal(address)", +"181731dc": "settlementFeeRecipient()", +"18177497": "proposers(address)", "18178358": "poke()", "1817c5a7": "revokeGrant(address)", +"1818006b": "allAttackInfo()", +"181815a3": "revokeAllMultiSignatures()", +"1818b1e3": "total_participants()", +"18190817": "setLastCompletedStakeCommissionIndex(address,uint256)", +"1819e206": "afterAll()", +"1819fb5c": "approveAny(address,address)", "181a916b": "getKeys(address,uint256,uint256)", "181aa1fd": "takeFee()", "181b3bb3": "functionOne()", "181b591a": "phase_4_bonus()", +"181b5fec": "triggerRenatus()", "181be00d": "getValue(uint8)", +"181c7a56": "change_subordinate_period(address,uint256)", "181c8ef9": "enter(bytes8,address)", +"181cd74d": "totalPresaleTokenBalance()", "181d85eb": "internalRedeem(address,uint256)", +"181d989b": "authorizedOperators(address)", "181da773": "EosPizzaSliceDonationraiser(address)", "181dcbcd": "setMaxConfig(uint256,uint256)", "181e0124": "getRemainingTime(uint256)", @@ -13866,156 +25333,280 @@ "181f1965": "fillSellOrderPartially(uint256,uint256,uint256)", "181f4456": "setAuctionStart(uint256)", "181f4477": "getLockedStructStartTime(address,address,uint256)", +"181f599f": "last_stake_id()", +"181f90a4": "_calcBorrowingFee(uint256,uint256)", "181fd85b": "cancelSale(address,bytes32)", "181ffc5f": "GetGift(bytes)", +"1820433f": "inject(uint256)", +"18206bb6": "oracleUpdateweiPervSPACEXSecondary(uint256)", +"1820783d": "setCacheSize(uint256)", "182092a8": "ChangeSymbol(string)", +"1820b47f": "swapExactAmountOut(address,address,uint256,uint256,uint256)", "1820b575": "Team(uint256,address,uint256)", +"1820cabb": "LOCK_PERIOD()", +"1820d739": "earnedA(address)", "1821cd93": "jackPotFunds()", +"1821d696": "assessor()", "1821e7c6": "acceptOffer(address,address,uint256)", "1822b886": "createTradeOffer(bytes32,bytes32)", "1822cbc5": "mintingIsAllowed()", "1822f8db": "finishSafe(address)", +"18232c77": "uStats(address,uint256)", "18237476": "getAccountTotal(address)", "18237e0c": "enableBuyback(uint256)", +"1823fbbc": "isValidMoveSet(bytes32)", +"18240359": "WhitelistAllocationIncreased(address,uint16,bool)", "182439de": "claim_PreICOTokens(address)", "1824461d": "administror()", "18248f2a": "sendToken(address,uint256,address)", "182493f2": "plantedOf(address)", "182499fe": "ico_address()", "1824a46b": "onUpgrade()", +"1824cb19": "openTransferTime()", "18253234": "ticketsAvailable()", "182575f1": "authorizeFloor(uint32,address)", "1825d0e8": "_mintCUSD(address,uint256)", "18264f33": "startMigration()", +"182659c3": "blockNumbers(address)", +"18267f42": "depositsInCurrentBlock()", +"1826c119": "distribute(address[],uint256)", "1826fb35": "_calculateShards(int256,uint256)", +"1827040f": "setSakeLockSwitch(uint256,bool,bool)", +"18274dd6": "removeLiquidityImbalanceThenBurn(bytes,address,uint256[3],uint256)", +"18276bec": "ArbitrageUniswapKyber(address,address,address,address,uint256,uint256,address)", "1827caf4": "getInfoB(uint256)", "1827edbc": "Reaper11()", +"18280ff7": "getGetMaxMiddle256()", +"182815b0": "setFraction(uint256)", "18285e6b": "secondPlay(bytes32,uint8,bytes32,bytes32,uint256)", +"18285fe2": "disableActivity(bytes32)", "18287ef2": "executeOption(address,uint256)", "18289482": "currentIcoPeriodStartDate()", "1828983a": "authorizedUsers(address)", "1828b254": "nextTicketPrice()", "1828db82": "ownerPayout(address)", "182930ce": "AddedToWhiteList(address,uint256,uint8,uint8)", +"18299a77": "getGetMaxMiddle8()", "1829b73f": "buyoutAmount()", +"182a15ad": "setRebaseStep(uint256)", +"182a5415": "init2(address[],uint256[],string,string,uint8)", "182a7506": "setMinimumFee(uint256)", +"182a7f72": "blocksTillSemiShoot(address)", +"182aa0d8": "readPosition(uint256)", +"182aac32": "curricularECO()", "182ae5f2": "getVotesForItem(uint256)", "182af96b": "regularEndGame(address,uint32,int256,uint256,address)", "182b0b00": "checkChangeToReceive()", "182b144c": "incrementBatch(address[])", "182b434b": "newRequest(address,uint256,bytes32)", +"182c70df": "sale_token()", +"182cd701": "removeAuthority(address,address,address,address,uint256)", +"182d2b76": "_getAmountReceivedForExchange(uint256,uint256)", "182d326e": "getTeamAddress()", "182d709a": "scaleWeights(uint256)", +"182d7665": "cancleSell(uint256)", "182db370": "getWhatHappened()", "182df0f5": "exchangeRateStored()", +"182e0133": "_beth()", "182e0c49": "totalUnrestrictedAssignments()", +"182e133a": "estAssetOut(uint256)", +"182e1c0b": "NewRecipient(address,uint256)", "182e7533": "getBetResult(bytes32,bytes32,bytes32,uint256)", +"182e8593": "ZTHJackpot(address,uint256)", "182e8a67": "changeGroupActiveStatus(bytes32,bool)", +"182e9673": "pendingPega(uint256,address)", "182e9a1e": "getOwnerVehicleDetails(address)", "182ee07f": "setDistributionMinimum(uint256)", "182ef78e": "getTMul()", "182f67a3": "reservedWei()", +"182fa528": "Deposit(bytes32,address,uint256)", "18300c1a": "CappedMintableToken(uint256)", +"1830b4e2": "acceptCreator()", +"1830d22c": "onRegistryRefresh()", "1830d69d": "IsGot(uint256[],uint256[])", "1830f493": "getPermission(bytes4)", "1832425f": "registerAddress()", "1833198f": "makeMemChange2(uint256,uint256,uint256,int256)", +"18332ff6": "checkLimits(address,address,uint256)", +"18337012": "getRecipientAddress(uint256)", "1833a548": "changeGas(uint256)", "1833b7c6": "changeMyAddress(address)", +"1833e001": "TIMESTAMP_OF_20211101000001()", "1833fa4c": "update(uint256,string,uint256,uint256,uint256,uint256)", "18342c9c": "BettingCore()", "1834906c": "thisContractAddress()", "1834ef4e": "addMoneyToContract()", +"1835b89d": "setminTickets(uint256)", "1835e57d": "VESTING_DURATION_4Y()", +"1836012b": "__AccessControlGET_init()", +"1836092b": "Claim(address,address)", +"183636c5": "parentUniverse()", "183651d9": "tokenApprovalWithSignature(bool,address,address,address,uint256,uint256,uint256,bytes32,bytes)", +"1836672c": "createGameSlot(uint256,uint256,uint256,uint256,uint256)", +"18367518": "balanceOfLeasor(address)", "18369a2a": "initialBalance()", "183718d1": "getCheckoutTime()", +"18373189": "MyString()", +"183767da": "transferFeeBasisPoints()", "18384df2": "getMetadataOf(uint256)", +"18387876": "setWeight(address[],uint256[],bool)", "1838daab": "getRealmSale(uint256)", "1839a417": "_cancelEthOffer(address)", "1839babf": "zGetGameBalance()", +"1839e42b": "get_sender_balance()", +"183a3379": "referralBalance(uint32)", "183a7947": "pregnantKitties()", "183abe66": "testRewardSB(string)", "183b3159": "getAssetBalance()", +"183b468a": "solve(bytes32)", +"183bc5a5": "purchase(uint256,uint256,uint256,bytes32,bytes)", "183bfb4f": "AddBankerProfit(uint8,uint256)", +"183bfc81": "getDevTreasuryPercent()", +"183c5365": "setRemoveAide(address)", "183c5901": "DigitalGold()", +"183c5a9d": "testaToken()", +"183c86b7": "getIntervalIterator()", +"183ccb74": "getReserveToTokenInputPrice(address,uint256)", "183d255e": "SetWhat(uint256)", "183d4cf7": "CNT_address()", +"183dcad9": "skimmable()", +"183df4a2": "partnerKYC(address,bytes32)", "183df5ef": "test_invalidSuicide()", +"183eb2e4": "validBalance()", +"183f3444": "_assetPrices(address)", +"183f66b6": "sellerApproval()", "183f9bcf": "isQuorum(address[3])", "183ff085": "checkIn()", "184018c6": "awardHighScore()", "1840f0ca": "countVotes(uint256)", "184188f2": "setStopTransfer(address,bool)", +"18421450": "multisendErcSMTX(address[])", "18423074": "ShowerToken()", +"1842847b": "changeDustCollector(address)", +"18431ec9": "getDeadTokenBalance()", "18433bb7": "DrawPrepare()", "1844fef1": "roundTotalWinnings(address)", +"18452cd8": "hasReferrer(address)", "18456048": "auctusTokenAddress()", +"18456a6a": "daoAddr(address)", +"1845f0db": "defaultDecayPeriod()", +"18467b4c": "changeCoolOff(uint256)", "18469491": "lastPlayerPaid()", "18469dfe": "canStartDispute(bytes32)", "1846d125": "isGroupExists(bytes32)", +"1846f51a": "withdrawLeftOver()", +"184753d5": "affiliateWithdraw(address[])", "18476db4": "newRandomValue(uint256,address,uint256,uint256)", "18477799": "Touch()", +"1847b35b": "userATokenOf(address)", "1847c06b": "ids(address)", +"18482f9d": "TokenCap()", "18489f50": "thingExist(bytes32[])", +"18490a2f": "initializeToken(uint256,address)", +"18491807": "weiPervSPY()", "18494108": "doPayout()", +"1849b38d": "currentCashtofCashJuly()", "1849bd6a": "ExecuteTrade(address,address,address,uint256,uint256)", "1849cb5a": "get(uint80)", +"1849d8ea": "stakings(address,uint256)", +"184a0ae9": "proposalTime()", "184a9ce1": "Log2_fnc(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", "184ad5ff": "VjuCoin()", "184b1912": "minimum_goal()", +"184b22a4": "findOportunityAdvanced(address[],uint256[],uint256[],address[])", +"184b3c76": "approve_255(address,uint256)", "184b9559": "init(address,address,address)", "184bd394": "changeSaleAddress(address)", +"184c4de5": "firstPool()", "184c703d": "LogVoteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", "184d009b": "teamNameIndex(string)", "184d1a77": "acceptBid(int256,int256,int256,int256)", "184d69ab": "isWhitelistEnabled()", +"184d82b9": "primaryMint(address,address,uint256,bytes32)", +"184d894e": "_reflectFee(uint256,uint256)", +"184d99fe": "setTokenProperties(uint256,uint16,uint8)", "184db3bf": "initErc20Deal(bytes32,uint256,address,bytes20,bytes20,address)", +"184e2d36": "CapToEtz()", +"184e44ca": "presaleStarts()", "184e8549": "getPI_edit_31()", +"184ecb57": "pendingMeloetta(uint256,address)", +"184f8ed1": "initSetting()", "184fb2bd": "signOwnerCount(uint256)", "184fd65e": "addMomRelation(address)", "184ffd9d": "RATE_CROWDSALE_S2()", "18501714": "clearJackpotParticipantsAfterDistribution()", +"185025ef": "STRATEGY()", "185061da": "undoIt()", "18507210": "templatesOfOwner(address)", +"1850c07e": "INITIAL_EPOCH_SUPPLY()", +"1850f9bc": "withdrawFromVswapPool(uint256)", "185190f6": "addCustomerwithETH(address,uint256,uint256)", "1851e59e": "Omnidollar()", "18520be5": "EventBid(uint32)", "18520de3": "sendFrom(address,address,address,uint256,uint256)", "1852e8d9": "calculateReward(address,uint256)", +"18539c3c": "submitSolution(string,string)", "1853d033": "GetAskingTokenBought()", +"1853f0a8": "IntervalsPeriodsCounter()", "1854229a": "REFERRAL_BONUS_LEVEL1()", +"18559e19": "setNumber(uint8)", "1855e405": "managerOff(address)", +"1855eb43": "calcSwapUniverseToEthInputs(uint256,address[])", +"18568783": "discretLogarithme(uint256[2])", "1856a6df": "coupleImageIPFShash()", "1856bc0f": "BuyGenesis(address)", "1856c1dc": "main_sale()", +"1856c595": "tokenDrop(address)", "1856e01b": "setVotingController(address)", +"18573bc5": "setMfsTokenAddr(address,address)", "18573bf9": "calculeReward(uint256,uint256)", "18577f8d": "calVote(address)", "18579ece": "clearances(address)", +"1857aca0": "getPrices(uint256,address)", +"1857c831": "priceAverageSell()", "18584a5d": "hasAlreadyPlayed(address)", "185870f9": "developerWallet()", +"1858c77d": "minus(int256,int256)", "1858cb5b": "verifyProof(bytes,bytes32)", "185917c5": "distributeToFound(address,uint256)", +"1859736e": "racer_index(address)", +"18599d82": "burntFries()", "1859b2d7": "getDStructData(address,uint256)", "1859c8e2": "getUserTicket(uint256)", "185a5671": "setTransferAddress(address)", "185a6284": "discountedMiningTarget(address)", "185a7daf": "FundingRules(uint256)", "185b9067": "QuadCoin()", +"185bc395": "uniAddress()", "185c4279": "hardCapCHF()", +"185cb559": "curveDepositEURS()", "185cc751": "loan(address,uint256)", "185d1af6": "setUncirculatedSupplyCount(uint256)", +"185d374c": "_tBurnTotal()", +"185d84c0": "bonusTokensAllocated(address)", "185d9e79": "AOL(uint256,string,uint8,string)", +"185db4e7": "providerWas(address)", "185e00fd": "getDisputeStateText(uint256)", "185e4a00": "getCurrCanRefund()", "185e9969": "getContractDetails(bytes32)", +"185eb12f": "registerValidator(uint64,address)", +"185ed831": "isDelegator()", "185f23c4": "_arbitrationPercent()", +"185f5c5c": "sliceOverflowStart1Throw()", +"185fc2a4": "blocksToReleaseCompound()", +"185fde7e": "submissionPeriod()", +"18609324": "RateChangedLog(uint256)", "1861355b": "transferMintOwnership(address)", +"18613604": "_tokenIsProtected(address)", +"18618878": "getDaysSinceBuy(address)", "1861cb28": "getNowVestingType()", "1861e523": "testOwnerToken()", "1862c10b": "withdrawBalancesToLogic()", "1862caec": "firstStageMinting()", +"1862f918": "Supply(uint256)", +"186361c6": "updateOrder(bool,uint32,uint128,uint128,uint32)", +"186388e5": "_getDrawDart(address,uint256)", +"186393ee": "Resources(address,uint256,uint256,uint256,uint256,uint256)", "186415c0": "releasesollidaTeamTokens()", "18643d37": "raffleLimit()", "1864db71": "getCompetitionInfo(uint256)", @@ -14026,20 +25617,29 @@ "1866191a": "editDiscount(uint256,uint256,uint256)", "186690b0": "broadcastMessage(string)", "1866ae7d": "PayRollHistory(address)", +"1866dc97": "notes()", "1866f761": "ConstantaToken()", +"186704b4": "_createMarket(address,uint256,bytes32,uint256,uint256,uint256,bytes32)", "18671d23": "Auditor(address,address,address)", "1867b937": "_bytesToBytes32(bytes)", +"1867bed6": "isInvestorExist(address)", "1868291f": "getIp(string)", "1868516d": "KMEToken()", +"186854b9": "cardBasePoint(uint256)", "1868c2a1": "computeSeed(uint64,address)", "18695c4d": "DSToken(bytes32,uint256)", "1869a084": "releaseLockedBalance(address,uint256)", +"186a1a62": "currentTokensPerEth()", +"186b31cb": "govUpdateliqPenaltyE10(uint256)", "186b6f05": "updateFallbackDeposit()", "186b79c9": "isProviderInitiated(address)", +"186b9c43": "winnerLength()", "186ba9de": "lastUnlockMineBalanceTime()", "186bbb05": "getAppCode(bytes32)", "186bcaf0": "ontology()", +"186bd42c": "calcArbToEth(uint256)", "186c9b11": "issueTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"186cab76": "ETH_ILK()", "186cd7d2": "card_black_first()", "186d9ce8": "allowAvatarCreation()", "186d9d88": "unblockAddress(address)", @@ -14048,24 +25648,37 @@ "186e4297": "charityCut()", "186e7047": "forceAdvance()", "186eb86b": "cnt_per_eos()", +"186ee8a4": "activeVaults()", "186f0354": "safe()", "1870082d": "inviteCollateralizer()", "187047b5": "LogUserAdded(address)", "1870a73a": "totalNTD()", "1870ad14": "setAddress(string,address,bool)", "1870c10f": "donateAndCreateGiver(address,uint64,address,uint256)", +"1870d9ea": "remainingTokens2()", +"1870db6f": "delDepositWallet(address)", "18714bc8": "purchaseWithFiat(uint256)", "18718656": "XENCToken()", +"1872361e": "increaseTax(address)", "1873355e": "Emoji()", "18737e07": "Redeemed(uint256,address,address,uint256)", +"18738003": "SOGNO4()", +"1874af18": "rechargeTime()", +"187521a2": "isVotingSenderAllowed(address,address)", "18758480": "worldContract()", "1875aa22": "transferWhiteList()", +"1875b74c": "RefundSuccessful(address,bytes32)", "1875ccf3": "setGlobalCompositionFee(uint256)", "18760eb3": "RequiringAuthorization()", "18764471": "ANTDToken()", +"1876b6b6": "setBasicMax(uint256)", "1876d0a9": "astutelandToken()", +"187739a4": "tokenDailyDistribution(address,address)", +"18773c25": "playerRoundData(uint256,uint256)", +"1877bb5c": "share(address)", "1877fc8a": "quickSort(address[21],int256,int256)", "1878265a": "Rent()", +"18784a5f": "systemPause()", "1878d1f1": "ETH_TOKEN_ADDRESS()", "187958ac": "VOCToken()", "18797499": "ENTERED_MASK()", @@ -14073,130 +25686,234 @@ "1879c2da": "NewSale(address,uint256)", "1879dcf3": "MIN_TOKEN_PRICE()", "187a62d5": "voteEmergencyWithdrawal(bool)", +"187ab7a2": "setDailyRate(uint256)", "187ac4cb": "migrationManager()", +"187ad915": "withdrawEarly(address)", "187adf2e": "failsafe_subtract(uint256,uint256)", "187b1f2a": "VOZToken()", "187cba25": "issueNomins(uint256)", "187cbdd2": "subWallets()", "187d2371": "LOG_MaxInvestorsChanged(uint256)", "187d3954": "getClaimableBalanceFor(address)", +"187d67ae": "createFuturesAsset(string,address,string,string,uint256,uint256)", "187d8803": "updateKoCommissionAccount(address)", +"187dc37c": "multisendErc20(address,address[])", +"187e29dc": "approve_822(address,uint256)", +"187e576b": "buyIdo(address,uint256)", +"187ebbc9": "getOpening()", "187ecd37": "Open(bytes)", "187ed86e": "ROE()", +"187ed963": "approve_789(address,uint256)", +"187f3d98": "checkTranAddition()", +"187f451f": "Donation(address)", "187f707b": "AdvertisementFinance(address)", +"187f7935": "repository(bytes32)", +"187f9daa": "setDevelopmentTreasury(address)", "187fac20": "setStartStage1(uint256)", "187fd079": "MINI_GAME_TIME_DEFAULT()", +"18800219": "initializeAdapter(address,bytes)", "18804b0d": "setDescriptionHash(bytes32)", "1880692f": "getPublicKeyCount()", "1881656b": "canSpend(address,uint256)", "1881b0f0": "kycVerify(address)", "1881f980": "read_i64()", +"188207e5": "bscsToken()", "18821400": "TOKEN_NAME()", +"1882923f": "commissionPart()", +"188296ea": "getAdminPayments()", +"1882d090": "GetUserDebtBalanceInUsd(address)", "1882d267": "liquidityFundAddress()", "18836994": "get_allowance(address,address)", +"18838f8a": "InputUniLP(address)", +"1883b274": "apeRate()", +"1883c7cc": "getBillCount()", "1883d2a4": "IUPToken()", "1884c517": "registerWorkerAffectation(address,address)", "18856694": "deny(bytes8)", +"18879d81": "sendPendingBalance(uint256)", +"1887a4d0": "pepeContract()", "1887af2b": "LogicBase(address,address)", +"1888153d": "revenueSplitFeeOnStrategy()", "18886657": "purchaseLimit()", "1889500c": "marketplaceManager()", "18896972": "isBuyFull()", "18898452": "saleMinimum()", +"18898985": "CreatedCarbonDollarProxy(address,uint256)", "18899745": "AffiliateMarketing(address,uint256)", +"1889e08e": "setGenerationBreedingFeeMultiplier(uint256)", "1889fc0a": "_preValidateReserve(address,uint256,address)", "188a1d68": "getOuverture_des_droits()", +"188a840f": "addApprovedWithdrawAddressAfterDeploy(address)", "188af657": "generateWinner()", +"188b05ba": "changeUmiTokenAddr(address)", +"188b21d5": "createAttendance(address)", +"188b36c5": "rebalanceFailPeriod()", "188b5372": "generateToken(address,uint256)", "188b81b4": "getGameEnd(uint256)", +"188b85b4": "sum(uint256)", +"188c2d9c": "AssignmentStopped()", +"188c38fe": "pausedTransfers()", "188c668c": "recordDealRefundReason(uint256,address,uint32,uint32,uint256,string)", "188cad26": "referralTokensAllocated()", +"188caf8a": "addKeys(bytes32[])", +"188cd3dd": "convertUIntToBytes32(uint256)", "188d0aae": "buyAndCreateGame(uint256,uint256,address)", +"188d91e6": "confirmHack(address,uint256)", "188dbc1a": "setAccountIsFrozen(address,bool)", "188ec356": "getTimestamp()", +"188efc16": "addBlacklisted(address)", "188f1fee": "notifyObservers(address,address,int256)", +"188f4762": "checkTimeWeightedResultAssertions(uint32,uint32)", +"188f8f9e": "sellToken(address,uint256,uint256,address,bytes32,address)", +"188f9b5b": "invest(address,uint256,string,string)", "188fdbdc": "commission_rate()", +"18900205": "metaChangeData(bytes,uint256,uint256,string,uint256)", "189048fc": "getAccountLevel(address)", "189052ac": "_setFreezingPeriod(address,bool,uint256)", +"189052f1": "spendResourceOnPlanet(address,uint256,uint256,uint256)", +"18907d1f": "swapAVEC(bytes32)", "18911bbe": "ProdFToken()", "1891381d": "setROI(uint256)", +"18913e21": "announce(address)", +"1891a44f": "updateEdgexContract(address)", "1891c701": "AssignOwnerToProject(int256,address)", +"1891da03": "TokenSold(uint256,uint256,uint256,address,address,uint256,string)", "18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", +"18923fa1": "BurnPoolTokens()", +"1892465d": "BeginGame(address,address,uint64)", "1892c15a": "fwdPayment(address)", +"1893161d": "marker2()", +"1893bb11": "isRegisteredBenefactor(address)", "18940084": "_getDestinationTranche(bytes)", "18942a33": "new_record(address,address,uint256)", "18946e8f": "voteOnParameter(bytes32,int256)", +"18952383": "percentagePrecision()", "18954b3e": "collectEstimation(int256)", "18955b1e": "willThrow()", +"18955d96": "checkLock(address)", "1895687d": "issueLoan(address,uint256)", "18958959": "individualClaim()", +"1895999f": "year1_percent()", "1895e858": "resetWallet()", "1896367e": "setBlockSze(uint256)", "18968a03": "finalize(uint256,address,address)", "1896f70a": "setResolver(bytes32,address)", "18976fa2": "closeVault()", +"1897a56f": "approvedRecipients(address,address)", "1897bcf3": "sellToken(uint256,uint256)", +"18989008": "stealthSwapAddr()", "1898a1c7": "addVendor(address,string)", "189959de": "EXPC()", +"18997b3f": "setBunnyCost(uint32,uint256)", "1899f1ad": "setChargerAddress(uint256,address)", +"189a1bd9": "transferabledTradeAndAnyRateIsInvalid(address,uint256)", "189a5a17": "nodes(address)", "189ae13c": "numArbiters()", "189af42f": "powsm(uint256,uint256)", "189aff3a": "authorizedSupply()", "189b11fc": "AddSeed(address[])", +"189b4fcd": "getTokenIndexPlusOneByToken(address)", "189b600c": "setNameHashByWriter(bytes32,address,bytes32)", +"189c095e": "getMinBuyIn()", +"189c3088": "terminators()", +"189c9390": "setupTreasure(address)", "189c94ae": "testFallbackStaticSig()", "189ca316": "setVoteWeight(uint256)", +"189d00ca": "BPOW_PRECISION()", "189d165e": "setBurnRate(uint256)", +"189db8c6": "bidtoken()", +"189def16": "wrappedIQ()", +"189e56e6": "Knight()", "189e688a": "ClaimDividend(address,address,uint256,uint256,uint256)", +"189ebe8f": "allowedContract(address)", +"189ed356": "allocateFunds(address,uint256)", "189eeebe": "isMembershipAllowed(address)", "189f0197": "getPlayersPick(string)", +"189f09b4": "BuyBronze(address,uint256,uint256)", +"189f2e5f": "changeMoreBTCFormula(address)", "189f4d34": "setMinUCCoinSellingValue(uint256)", "189f9041": "mintCoreToken(address[])", +"18a064a5": "startMining(address,uint256)", "18a08d2d": "TheTokenH()", "18a0e773": "UnlockGrant(address,uint256)", +"18a0ed75": "hasUsedFreeRenameERC20(address,uint32)", "18a17df1": "DataDump()", +"18a1908d": "__callback__(uint256,uint256)", +"18a1b409": "leftBonus()", +"18a22c40": "swapTokensForExactETH(uint256,uint256,address[])", +"18a23b86": "onPurchase(uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256,uint256)", "18a24b5b": "unlockToken()", "18a30d16": "getResponse()", "18a39c54": "payForward()", "18a3aad2": "ReserveCoin()", +"18a3c4e1": "getOriginalAccountQuota()", "18a4155e": "calculatePrice(uint256,uint256,uint256,address,uint256)", "18a45c41": "_receiveFundsUpTo(uint256)", +"18a4dbca": "getUserUnderlyingAssetBalance(address,address)", "18a51621": "getReadableSupply()", "18a54ecd": "mintTokenForPrivateInvestors(address,uint256)", +"18a574b3": "cpayContractAddress()", +"18a5a843": "setRewardsPool(uint256)", +"18a5bbdc": "holders(address)", "18a6217d": "comments1()", +"18a63110": "provisionCSPFees(uint112,uint32,uint32,uint112)", "18a66563": "AQI()", "18a689aa": "getNamePicture(bytes32)", "18a6bc32": "tokenDistributor()", +"18a6c641": "Set_rxp_gift(bytes32)", "18a6d58b": "addTokenTeller(address,uint256)", "18a6d765": "BANKROLL_LOCK_PERIOD()", "18a6dec5": "getCountTokensByGame(uint32)", "18a727c5": "_withdrawDev(address,uint256)", +"18a77e9a": "ethToWbtcSwapPath(uint256)", +"18a79956": "emit_event2()", "18a7bad6": "setFreezeAdmin(address)", +"18a7bd76": "remove_liquidity_imbalance(uint256[4],uint256)", +"18a7cca8": "relayerAddress()", +"18a8ac2e": "idrop(address)", "18a8fac9": "icoInvestment(address,uint256,uint256)", +"18a9401a": "spark(uint256)", "18a94030": "putStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"18a98bfb": "setLpPoolIncentiveRate(uint256)", "18a991f7": "setEmeraldPrice(uint256)", "18a9cc1b": "isUser(uint256)", "18a9f29f": "setMetadata(uint128,string)", "18aaaa51": "registerTickets(uint256)", +"18ab1662": "testERC165Gas(address,bytes4)", +"18ab30e6": "bet(uint8,uint8,uint256)", +"18ab6efe": "recover(address[])", +"18ab7ccf": "tokenId2Drill(uint256)", "18ab8888": "paymentSortId()", "18ab8c37": "timeToCalm()", "18abb75c": "createLibraryBounty(string,string,address,uint256)", "18abfdfc": "totalSupplyFromCrowdsale()", "18ad052b": "safeTransferByContract(uint256,address)", "18ad28af": "icoWasSuccessful()", +"18ad9dcd": "getPairList(address)", +"18ae0f45": "cryptoBud()", "18ae15e4": "DBC(uint256,string,uint8,string)", "18ae19c2": "get(bytes32,uint256)", "18ae21e8": "NuoYiLian(uint256,string,uint8,string)", +"18ae642d": "getAllRunners()", "18af26fe": "setRestrictedWallet(address)", "18af4099": "PARALLELNETWORK()", +"18af4d60": "flux(bytes32,uint256,address,uint256)", "18af5e74": "addressesDeposited(address)", "18af7021": "force_refund(address)", +"18afeb44": "__init(bool,bool,uint256)", +"18b0333c": "earns(address)", "18b03ceb": "remainderPurchaser()", +"18b0800c": "LogTransfer(address,uint256,uint256)", "18b0bdf7": "getMensaje(uint256)", +"18b0c3fd": "plus()", +"18b0ca16": "getPairs(address,address[])", "18b0efb6": "isEmptyName(string)", "18b123d5": "hasBeenApproved(address,uint256)", +"18b135e3": "totalAffiliateBalance(address)", +"18b13fb2": "parents(address)", "18b15e2a": "Ongo()", "18b20071": "setCurrentPrice(uint256)", +"18b2318d": "get_log(uint256)", "18b2739d": "giveEthJackpotAddress()", "18b31f94": "registerLengthFunction(string,string,address)", "18b322a4": "update_instant()", @@ -14206,23 +25923,32 @@ "18b3c724": "forceRecoverCollateralOnBehalfOfRecurse(address,address,bytes32,address)", "18b3cd45": "qwecoin()", "18b40adf": "maximumCirculation()", +"18b4286a": "addNewPermittedAddress(address)", "18b437aa": "COMMERCIALPOINTCHAINSYSTEM()", "18b49ba4": "AMPIToken()", "18b4a702": "EPACOIN()", "18b4a924": "week_max()", +"18b57886": "deposit_on_another(address)", "18b64d5b": "unmint(int256,uint256)", "18b749c4": "payEther(uint256)", +"18b7a78b": "totalAirdropWeight()", "18b7bb11": "EthRoi()", "18b7fed8": "deliverPresaleTokens(address[],uint256[])", +"18b81459": "approve_5(address,uint256)", "18b8275a": "addUser(string)", +"18b89764": "streamRewardReserved(address)", "18b919e9": "ROLE_WHITELISTED()", +"18b93e46": "tradeEtherForTokenWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", +"18ba31d8": "stakeRequests(bytes32)", "18ba4218": "countAssetEvents(bytes32)", "18ba5cdc": "ownerAddToWhitelist(address,uint256)", "18ba6973": "setTrainingFormulaContract(address)", "18bb2edb": "maxRegistrants()", +"18bb3ee0": "cancelAmount(address,address)", "18bb7c08": "_setNameToAddress(address,string)", "18bbedf4": "Bulletin()", "18bc1558": "Th_stage2(uint256)", +"18bca809": "RequestLockerAccess(string)", "18bcd3d0": "transferOwnership(address[])", "18bd21f9": "_purchase(uint256,uint256)", "18bd387a": "level_referrals_count_by_address(address,uint256)", @@ -14235,47 +25961,89 @@ "18bee97e": "Creator()", "18beeeb4": "redeemInternal(uint256)", "18bf0225": "etherFundsOf(address,address)", +"18bf3a6c": "collectProducts()", +"18bf60e1": "BOOST_GAS_COST()", "18bffce9": "voteToResult(uint256)", +"18c0a626": "accountSequence(address)", +"18c0b758": "createLockSlot(address,uint256[],uint256[])", +"18c0c695": "addFactoryAddress(address)", "18c0e04f": "purchaseStake()", "18c10ad0": "disabled(uint256,uint256)", +"18c1ad81": "configRewardAdd(uint256,uint256,uint256)", "18c1d9b2": "bonusWallet()", "18c1fc68": "buyOne(address,address,uint256,bytes)", "18c20f44": "entrarAJuego(uint256)", +"18c2473e": "maxStrikePrice()", "18c26389": "multivestMint(address,address,uint256,uint8,bytes32,bytes32)", +"18c27ee9": "insertMoney(uint256)", "18c2d4c9": "initialSingleWithdrawMin(uint256)", "18c306bd": "checkSignatures2(bytes32,bytes,bytes,bytes)", +"18c3176a": "getDataLevelInTwoLine(address,uint256)", "18c3cf34": "EthPriceProvider()", "18c41a80": "mint(bool)", "18c48e96": "bitRegisters(address)", +"18c4a87b": "isDecrypted()", "18c53aca": "tokenIsComponent(address)", +"18c5af53": "LuckDraw()", "18c5bddc": "PRESALE_THIRD_DAY_START()", "18c5e3af": "addInvestmentProposal(uint32,bytes24,uint256)", "18c5e502": "GetTime()", +"18c60412": "vote_in_progress(address)", +"18c72c11": "purchaseQuantity()", +"18c864e3": "forms(uint256)", +"18c882a5": "_setBorrowPaused(address,bool)", "18c8bda5": "Procare()", "18c93884": "_setCrowdsaleStage(uint8)", +"18c9be4a": "TokenWhitelistId()", +"18c9c746": "log(bool,address,bool)", "18c9ef97": "mintETHRewards(address,uint256)", "18caa857": "emitJobBinded(uint256,uint256,bool)", "18cadf30": "getVATTransactionData(uint256)", +"18caee52": "set0xV2Exchange(address)", +"18cb2b18": "cancelAll()", +"18cbafe5": "swapExactTokensForETH(uint256,uint256,address[],address,uint256)", +"18cbb828": "setFrontInvestors(address,uint256)", +"18cbeaee": "addTranche(uint256,uint256,uint256)", +"18cc2de9": "ParcelUsdUpdated(uint256,uint256)", "18cc4c65": "startEngines()", +"18cc60e4": "setSafuDevFeesExempted(bool)", +"18cc696d": "uFragsHuman()", +"18cca7a6": "makeRequestedWithdrawal(uint256,uint256)", +"18cd0d97": "remove1TokenFromContractBalanceInCaseOfMissCalculation()", "18cd55f3": "canCreateGrants(address)", "18cda1e7": "lockInternalAccount(address,bool)", "18ce1a23": "BailOutToken()", "18cee8a4": "setPlatformCommissionRate(uint256)", "18cf1c25": "lookupDonation(uint256,uint256)", +"18cf5979": "userStakingWithdraw(uint256)", +"18cf59b6": "IcoStoppedManually()", +"18cf728a": "getinfo2(uint256)", "18cf85d1": "adminSetCityData(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "18cfa483": "invalidate(address,uint256)", +"18cfcfd3": "withdrawFunds(uint256,uint256,uint256)", +"18cff4de": "depositUSDT(string,uint256)", "18d0073e": "startNextMilestone()", +"18d007fc": "ri()", "18d0122a": "upgradeAgentStatus()", "18d0376c": "getFastGap()", +"18d04a78": "mineOn()", "18d0a7cc": "incentFundAddress()", "18d0c322": "EtherLambosCore()", +"18d0c454": "timelockTimestamp()", "18d0eb93": "finalizeAndDistributeToken()", +"18d13cbb": "wellInfo(address)", +"18d1b6c0": "cutBrownWire(bytes)", "18d30bfa": "setLastMoveTime(uint16)", "18d32128": "CLVRCrowdsale()", +"18d34d5e": "getCrowdsourcerGeneration()", +"18d3ce96": "getAllContracts()", "18d43f0d": "userTokensValues(address,address)", "18d4b4b3": "COCCToken()", "18d4d326": "SAFethToken()", "18d4e834": "getPrivilegeState()", +"18d4ef3d": "Mint(string,string,uint256)", +"18d504b6": "manGasPairAddr()", +"18d5312d": "FinalTokens(uint256)", "18d62bc6": "PHXFlip()", "18d6676c": "entityStructs(uint256)", "18d69faa": "StopDistrib()", @@ -14285,12 +26053,19 @@ "18d78358": "ICOCENTRAL()", "18d80168": "startUnitRaffle(uint256,uint256)", "18d80d4a": "check_prize()", +"18d814ba": "calculateRedemptionValue(uint256,uint256)", +"18d814c8": "activateMembership(uint8,string,uint8)", "18d84553": "calculatePayout(bytes32)", +"18d87717": "tokenTypeSupply(uint256)", +"18d8eab0": "setDepositFeeMin(uint256)", "18d8ec5b": "validateWinnersCount(uint32,uint32,uint32)", "18d8f9c9": "erc677token()", "18d92a5d": "getRegistryDataCustodian()", +"18d94704": "__OneMinter_init_unchained(address)", +"18d94793": "updateStartDate(uint256)", "18d95092": "domainOwner(string)", "18d97731": "setPriceStep7(uint256)", +"18d9f351": "ownerToNumIncubations(address)", "18da0011": "treasuryContract()", "18da650d": "WithdrawalInterCrypto(uint256)", "18da754a": "setBuyMinLimit(uint256)", @@ -14298,129 +26073,229 @@ "18db02e1": "etherToLEONRate()", "18db0750": "contributionReward()", "18db62fb": "checkValue(uint256)", +"18dc0c8c": "send721Or20To721Ids(address[],uint256[],uint256[],address)", +"18dc1cc7": "lastEndedLoteryDayWithWinner()", +"18dc4142": "__ONB_init(address,address)", "18dcdfbe": "isRetirementAllowed(uint256,bool)", "18dd97f0": "secondStageTokensForSale()", "18de0afd": "getEnabled()", +"18de7ffc": "isSettlementReady()", "18deb066": "init(uint8,uint256,uint256,uint256,address[2],address[],uint256)", "18debd27": "addWalletAddressAndTokens(uint256,address,uint256)", "18def2a1": "DistributedCreditChain()", +"18def8ef": "index(address)", "18df0038": "getSwapType(bytes32)", "18df02dc": "Migrate(address,address,uint256)", "18df11ee": "SpendingApproved(address,address,uint256)", +"18df306b": "changeslaughterBurnrate(uint256)", "18df6090": "mintBountytokens(address)", +"18df6c4e": "openLockETHAndDraw(address,address,address,address,bytes32,uint256,address)", +"18df8b91": "setCDAI(address)", "18dfcf7b": "_investorCount()", +"18dfda5a": "setDmmTokenFactory(address)", +"18dfe921": "add_gauge(address,int128,uint256)", +"18dff9f9": "ethToToken(uint256,address[],address,uint256,address)", +"18e00795": "userAvailableDividends(address)", "18e01199": "burn(uint256,bytes,bytes)", "18e02bd9": "setTokenOwner(address)", +"18e06c62": "highPriceD()", "18e0d683": "getBAI(bytes32,address)", "18e124e4": "upgradePackageCountOf(address)", "18e146f9": "InvestmentPolicyChanged(bool)", +"18e1fbfc": "minimumStakeValue()", +"18e20a38": "REVEAL_TIMESTAMP()", "18e2d679": "describeTile(int32,int32)", "18e2e4be": "getInvestor(address,address)", "18e37cdd": "ITGToken()", +"18e39d99": "INVEST_MIN_DFL_AMOUNT()", "18e3b44c": "setMemory(uint256,uint256)", "18e3d998": "crowdSaleEndTime()", +"18e421fb": "setAllowCommissions(bool)", "18e45427": "whitelistedContract()", "18e4ac35": "isConfirmed(address)", "18e4c3f3": "GMOON()", +"18e4ca2a": "lastBurnBlockNumber(address)", "18e4d2db": "_AIExchangeSupply()", "18e536bc": "comissionList()", +"18e6a333": "getTokenHandlerMarginCallLimit()", "18e6ab9c": "funding(address,uint256,uint256)", +"18e6b367": "isTransferrable()", "18e75a1c": "PresaleEDUSupply()", +"18e7d8db": "address2voken(address)", "18e7eb4b": "PRE_SALE_1WEEK_BONUS()", +"18e8039c": "stakeListCount(address)", "18e857ab": "queried(uint256)", +"18e945cc": "updateMinePrice(address)", +"18e94d88": "allowAccessToResearch()", +"18e97fd1": "updateTokenURI(uint256,string)", "18e9e7ab": "listSimpleService(uint32,string,uint256,address[],address)", +"18ea4513": "whitelistOperator(address,bool)", "18eacb96": "GetDivs(address)", +"18eb078a": "setupAndStartPreICO(uint256,uint8)", +"18eb0e0b": "revokeHarvester(address)", +"18eb9ea6": "unapprove(bytes32)", "18ebcc8c": "takeOrder(uint256,uint256[5],uint256[3],bytes32[3])", +"18ebeb06": "ethMaxContribution()", +"18ec2d5c": "totalStakedFunds()", +"18ec4d33": "getReferralsNumbersList(address[])", "18ecc6f4": "getTotalDividendsRounds()", "18ece632": "superApprove(address,address,uint256)", +"18edaaf2": "codeHash()", +"18edb804": "GuardianVendOffer(uint256,address,uint256)", +"18edc88c": "hegexoption()", "18edf434": "_revokeConfirmation(uint256,address)", "18ee00b6": "_changeRate(uint256)", "18ee1b9f": "WithdrawEther()", +"18ee444d": "setNotbaseToken(address)", "18ee9d5e": "EtherIncognito()", "18eeef80": "Wallet1()", +"18ef5a43": "WithdrawEtc(address,uint256)", "18ef7adb": "transferAdvisorTokens(address,uint256)", +"18f053da": "removeBudget(address)", "18f0db29": "remainingBettingFor(uint256)", "18f11de2": "BSSCoin()", "18f2217a": "EPXtokenSupply()", +"18f27fa3": "balanceOf_multi(address,address)", +"18f2817a": "updateStakeAndTotalStakes(address)", "18f2a0bb": "ownersConfirmedTransactions(address)", "18f303a1": "SetInternalValues(uint8,uint256)", +"18f321a3": "getSubscriptionSigner(bytes32,bytes)", "18f3a50d": "cooAddress2()", +"18f3dcf7": "totalStaked(uint256,address)", "18f3fae1": "setOversight(address)", +"18f45a96": "setBorrowerAndApprove(uint256,address,bytes32)", "18f61c0d": "configRunTime()", +"18f63022": "StartScoring(address,uint256)", +"18f662ed": "deleteUIntValue(bytes32,bytes32)", "18f729da": "founderLockance(address)", "18f76a2c": "getCCH_edit_3()", "18f7d5ad": "lastBlock_f13Hash_uint256()", "18f80bb9": "createContract(string)", +"18f83379": "addNodeAddress(address)", "18f839bd": "Expensive()", "18f873df": "chAllowTransfer(bool)", "18f889c2": "setOracleGasPrice(uint256)", +"18f88e5b": "impliedVolRate()", "18f9266c": "talks(bytes32)", "18f95486": "openPendingPartCrates()", "18f96441": "getShipDetails(uint256)", "18f96857": "Lazadex()", "18f9b023": "addPayee(address,uint256)", +"18f9bbae": "isReserveUsageAsCollateralEnabled(address)", "18f9bdee": "allocationOpen(uint256)", +"18f9f343": "getMaximumBorrowAmount(address,address,uint256)", "18fa11ab": "revokeRequestorAddress(address)", "18fa223a": "GGCT()", +"18fa336a": "EUR20()", +"18fa8307": "avg(int128,int128)", +"18fb52fb": "seasonAccountReferrals(uint16,address)", "18fb75f4": "callDeposit()", +"18fb9dad": "pendingApprovalAmount(address,address)", +"18fc464b": "new_product(uint256,string,string,bool,uint8)", "18fc6513": "companyCurrentPeriod()", +"18fd0ce8": "_set(bytes32,uint256,bytes32)", "18fd3474": "HumaniqICO(address,address)", "18fd8903": "refund(address,uint256,uint256)", +"18fdb134": "tokenTypeQuantity(uint256)", "18fdcaba": "getSumAmountOfDisputedDealsProDoctor()", +"18fdec7e": "setPriceManagerRight(address)", "18fe1a8d": "banToken(address)", "18fe3df7": "_buildInternalSalt(uint128,address,address,address,uint256,uint64)", "18fed50a": "getLast4Bytes(bytes32)", +"18ff0dce": "calculateKLAN(uint256)", "18ff1361": "manualyMintTokens(uint256,address,uint256,int256)", "18ff318d": "thorToken()", +"18ffb5e3": "testExercise(bytes)", +"18ffe127": "updateTellorOracle(string,uint256)", "190038dc": "supplyAdjuster()", "190042b8": "CARA()", "19006185": "getNumRefundTransactions()", +"19008bc7": "close(address,address,uint256,address,address,uint256)", "1900aabf": "CollectChips(uint256)", "190108b5": "getAyantDroitEconomique_Compte_3()", "19013cf2": "detachFromStorage(address)", "190151c6": "_createNumber(uint256,uint256)", "19018557": "COCToken()", +"1901cf59": "onInsuranceChange(address,uint256,uint256)", +"19021e8a": "bulkmint(address[],uint256[],int256[],int256[])", "19022f20": "TTT()", "1902e902": "adjustEntitlement(address,address,uint256)", "190377a5": "getCategory(string)", "1903bbe0": "_getQueryStr(uint256,uint256)", "1903c10e": "setPI_edit_3(string)", "190406b3": "customExchangeSecure(address,address,uint256)", +"19042e76": "isEquipped(uint256,uint256)", "19045a25": "recover(bytes32,bytes)", +"19048971": "setPoolShare(uint256)", +"1904c11d": "unstakesMap(uint256)", +"1904ff0e": "isAuthorizedSender(address,address)", +"19054255": "sBTCContract()", +"19055486": "didPerEtherParameter()", "19055df2": "preSaleTokenExchangeRate()", +"19056202": "withdrawmooncakeLP(uint256,uint256)", "19058903": "NewPassProject(address,address,string,string,bytes32)", "1905fbf6": "setNewWallet(address)", +"190625d7": "openBox(address)", "19062b8f": "settleTransaction(uint256)", "190663e4": "setGreeter(string)", "1906a3d6": "getBonusFund(address)", "1906ff98": "getVotePrice()", "19077dca": "resetOwnership()", +"1908a2ee": "marketWhitelist(address)", "1908c425": "m_leeway()", +"1908db86": "mixedTransfer(address,address[],uint256[])", "1909773f": "get_milestone_information(uint256)", "1909787f": "NextMint(uint256)", "1909d314": "GCPrightToken()", +"190a2161": "burnERC721(address,uint256)", "190a2688": "changePrices(uint256[3],uint8)", "190a338f": "_createAccount()", "190a597b": "restartCrowdsale(address,uint256,uint256,uint256,uint256,string)", "190a6aa9": "burn(address,uint256,bytes,bytes)", +"190a84d5": "transfer_property(address,string)", "190a8613": "getNodeLeftChild(bytes32)", "190a867e": "testThrowNoPartialTokens()", +"190aa859": "candyPerBlock()", "190bc9d4": "w_Advisers()", +"190bdb79": "jackpotFeeRate()", +"190be368": "approve_352(address,uint256)", +"190be8b1": "prop(uint256)", "190bfa4d": "singleDVIPQty()", "190bfcd0": "initialTokenValue()", "190bfea8": "sellWei()", "190c23c4": "adminSetTxFeePaidGame(uint256)", +"190c6317": "__hasPendingFund(address)", "190c69a2": "unWhitelistUser(address)", +"190ca29e": "pendingGroupTail()", +"190cf6c9": "setPair(uint256,uint256,bool)", +"190d4f12": "Loser(address)", +"190d7c55": "withdrawal(uint256,address)", "190d9253": "testInitialContract()", +"190ddf04": "setTokenFormula(address,address)", +"190de9f7": "isGrantor(address)", +"190e454b": "checkSituations()", "190e4c77": "numOfProperties()", "190e8266": "makeProduct(string,string,uint256,uint256)", +"190e92b4": "verifyProofForBlockForFloat(uint256,bytes32[],bytes,bytes)", "190eaaba": "getDenominator()", "190ef61d": "readAnalyticsMap()", +"190f0cc8": "Store(bytes)", +"190f2b7e": "canClaim(uint256,bytes)", "190f4cfc": "doCalculate(uint256,uint256,uint256,bytes32)", +"190f8565": "IMP16()", +"190fa8a8": "MultiSwapList(address[],address[],uint256[],uint256,uint256)", "190fe712": "payoutETH(uint256)", +"190fea6c": "isPreSales()", +"1910735b": "addRewards(address[],address[],uint256[],uint256[])", "19110d05": "DTCC_ILOW_8()", "19113b4a": "changeStatement(string)", +"191157d1": "g(uint256,uint256,uint256)", +"1911873e": "Dark_Build_USD()", +"1911cb40": "redeemFXB(uint256)", +"1911cf4a": "getStakersList(uint256,uint256)", +"1911e522": "sellOrderLast()", "19123c1f": "magnitude()", +"19129e5a": "setAccessControl(address)", "1912f84f": "BONUS2_LIMIT()", "191313ae": "EndOfPayments(address,uint256)", "191347df": "setStr(string)", @@ -14428,91 +26303,158 @@ "191384d1": "viewMessage()", "19141100": "bankRollDivest(uint256)", "1914427f": "MultiSigWalletWithDailyLimit(address[],uint256,uint256)", +"19145798": "getBestAmountOut(address,address,uint256)", +"1914c7d6": "prizeTokensId(uint256)", +"191509f0": "setSalesInfo(uint256,bool,uint256,uint256)", "19154616": "FART()", +"19155ae8": "doPay(uint256,uint8,uint256,uint256,bool,uint32)", +"19158d06": "initConstructor(address)", "1916037d": "withReferrer(address)", "19162a30": "getYumWithETH(uint256)", "19165587": "release(address)", "1916fcb7": "Galaxy100()", "191723ed": "lockBalance(uint256,uint256)", +"19174be6": "iAL(address)", "191797df": "isStoped()", "1917ab5c": "activate(string)", "1917e6d1": "addDoctor(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"19188c35": "timeDeployed()", "19190495": "SimulateCurrentDate(uint256,string)", +"191990d5": "addNewToken(address,uint256,uint256,uint256,uint256,uint256)", "1919cf62": "allEthShares()", +"1919db33": "setFeeDistribution(address)", "1919fed7": "setSalePrice(uint256)", +"191a2405": "OwnerReplacement(address)", +"191a3b20": "setTokenHandlerSupport(uint256,bool)", +"191a63b7": "olySale()", +"191a934f": "disputeDDR(uint256)", "191ad190": "open_free()", "191af4bc": "thirdroundprice()", +"191b4e10": "adminCancelList(uint256)", +"191b52e5": "registerDoc(string)", "191b548e": "VIVACrowdsaleRound(bool,uint256,uint256,bool)", "191b8260": "_createScene(string,uint256[],address,uint256)", +"191bd3cf": "calculateMonthlyYield()", "191be7b7": "getQueryResults(bytes32)", +"191cd762": "sendGasFee(uint256)", +"191d0ffc": "permitNonces(address)", +"191d3da9": "newSmartWallet(address,address)", "191d7a7a": "TVToken()", "191d8cd7": "passToken(address)", +"191da765": "farmGeneratorAtIndex(uint256)", +"191e2e83": "withDraw(address,uint256)", "191e2fc7": "setTokenizedRegistry(address)", "191e39b3": "setOwnerCut(uint256,uint256)", "191e521f": "moken(uint256)", "191e8daa": "_getRand(uint256)", "191f06e7": "setEscrowFactoryContractAddress(address)", +"191fb4ec": "tradeTokenForTokenUsingReservesWithFeeOnTransferSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool)", +"191fd57d": "RESERVE_ROLE()", "192014f4": "buyKeyWithReff(string)", +"19201910": "numPoints(address)", +"192092e9": "getBurnedDetails()", "1920b2a6": "BitOnBayToken(uint256,string,string,uint256)", "1920ed48": "isOwner(uint32,address,address)", "19213471": "addFRA(address)", +"192145c8": "transferTokenByName(string,address,uint256)", "192159a6": "ListingCreated(uint256,uint256,uint256,uint256,address)", "19216c4d": "getPreIcoInvestorsCount()", "19216e8d": "freezeForOwner(uint256,uint256)", "19218eda": "secondTokenExchangeRate()", "192193b9": "transferFrom(address,address,int256)", "1921c454": "priceChangeBlock()", +"1921d117": "unsetIdentity(uint256,address)", "19220c69": "TAKLIMAKAN()", +"192237ba": "removeOG1(uint256)", "1922936d": "RegisterTransferBeneficiaryContract(address)", +"1922e203": "Trust(address)", "1922e9b4": "getJobApprovals(uint256)", "1922ff39": "payOut(address)", "1923350f": "ADVISORS_TOKENS()", "19236b4e": "getSanTimeAlive(uint256)", "192399d1": "vestingBalance(address)", "1923a4a3": "issuePercentToReserve(address,uint256)", +"1923be24": "updateMessage(string)", +"1923cc1f": "withdrawUnsold(address,uint256)", "1923e5d4": "noActiveBallotExists()", +"1924063e": "lastRebaseTime()", "19240661": "setTrusted(address)", +"1924195b": "reviewSubmission(bytes32,uint256,uint256,bool,string,uint256[])", +"19241c4c": "TrasferEnabled()", "19245155": "StartedSafeUnlock(uint256)", +"19249835": "FundsRecalled(address,uint256,uint256,string)", +"1924cad3": "lockedInvestorSupply()", "1924f74a": "PVP_INTERVAL()", "1925259b": "ShroomFarmer()", "19254e2e": "getInsuranceStatus(address)", +"19258974": "REFERRAL_SUPPLY()", "19261e6f": "setERC20ApproveChecking(bool)", +"19262d30": "canWithdraw(address)", +"19268789": "constant_getPriZZZesMini()", "1926b63d": "savePost(bytes32)", "1926de89": "readInt256(bytes32)", +"1926e549": "participant_migrations(address,uint256)", +"19277b7d": "changePrice(address,uint64)", "1927a754": "drainEther()", "1927a8ea": "listFiles(uint256,uint256)", +"19285728": "setAllContracts(uint8[6],address[6])", "19287f3a": "withdrawBalanceAll()", +"19289287": "createAccount(string,string)", "1928b3cb": "getPosition(bytes32)", "19291c74": "getGoldStatusLastauditid(address)", +"1929d705": "_Tokenname()", +"1929e009": "totalSuppliesByPartition(bytes32[],address[])", +"1929f42f": "BigAward(address,uint256,uint256)", +"192a1ad3": "_revertIfReasonExists()", "192a4422": "safeWithdrawalAmount(uint256)", "192b3092": "mintPreAllocatedTokens()", "192b3608": "Bond(uint256,string,string,string,uint128,uint128,uint128,uint128,uint16,string,string,address)", +"192b4f17": "findPercent(uint256,uint256)", "192b663d": "vestSupply()", "192b7700": "CitrusCrowdsale(address,address)", +"192c7c5e": "disapproveModule(address,address)", "192d65c9": "getRoundByRId(uint256)", "192e571d": "getPlayerByName(string)", "192e7a7b": "releaseFunds(address)", "192ecd68": "getDistrito(uint256)", +"192ef492": "pool_balance()", "192f1076": "crowdsaleEndDate()", +"19301cf4": "takeOutFee()", +"19303764": "_encode_bytes(bytes,uint256,bytes)", +"19307b9a": "testDataTypeInt8()", "193080cb": "getLockedContract(address)", +"1930ee00": "mulHero1()", "1930fc01": "FastmarketNetwork()", "193115b4": "changeHiddenOwner(address)", "193118fa": "CPCCrowdsale()", +"1931914b": "getPaneltyIfWithdrawToday(uint256)", +"19320c65": "burnUSDbToReleaseCollateral(address)", "193237f5": "_isValidSignature(address,address,bytes)", "1932bb33": "lastBlock_a12()", +"1932d6c1": "changeBeneficiaryAddress(address,address)", +"1932d9b7": "accountPendingReward(address)", +"19332973": "mintRedemption()", "19337d6c": "setLink(string)", "193402bb": "PRE_SALE_PRICE()", +"1934741b": "transferErc20(address,address,address,uint256)", +"19349975": "getUniswapBuyPrice()", "1934d55a": "isPermanentlyApproved(address,address)", +"19350114": "principalOwed()", "19350aea": "nameFor(address)", "19354750": "setRegistryLogic(address)", +"19355c40": "FinalOutcome(uint256,uint256)", "1935f8d2": "Instacocoa(uint256,string,string,address)", "19362921": "CONTRIBUTORS_SHARE()", +"193695eb": "getTokenInfos()", "1936a8cd": "getSeedByWinner(uint256)", "1936dd8f": "writeMessage(string,string,string,string,string)", "1936e4be": "advisor()", "19375602": "challengeOwner()", +"19376532": "pullSurplus()", "1937714b": "confirmDeployment(uint256,address,bytes32)", "1937b7fa": "Burnfrom(address,uint256)", +"1937efa8": "calculateSubFloor(address,address)", +"19388315": "setWarOffset(uint256)", "1938a238": "softcapInTokens()", "19397ed0": "Transfer(address,address,address,address,uint256,bool)", "1939805f": "TPPC2018Token(uint256,string,string,uint256)", @@ -14521,47 +26463,95 @@ "193a824e": "_escrow(uint256)", "193a8a83": "getCCH_edit_28()", "193ab829": "addGood(address,string,uint256)", +"193acd3e": "_toggleSeverePunishment()", +"193b3fb8": "queryBidList()", +"193bf2ee": "claimAndLock(address)", "193c114b": "transferTokensOut(address,address,uint256)", +"193c55d7": "UniswapPrice(uint256,address[])", "193c8da4": "AkikToken()", "193c9be1": "getCreateShareToken(uint256)", +"193cc6b5": "hasBurnedKitty(address)", "193ccc20": "depositTokenToUser(address,address,uint256)", +"193cd889": "obtenerHerederosBeneficiarios()", +"193cda65": "testOwnerCannotAddInvalidVersion()", +"193ce08f": "withdrawAssetFee(uint256)", +"193d1edb": "callNormal()", +"193d4922": "setMinExecutorStake(uint256)", +"193d4d12": "loteryLobby(uint256,address)", "193d5b77": "getGiffBlock(uint32)", +"193d622c": "getTotalMembers2()", "193df7ea": "addBlacklist(address,address)", "193e06c4": "CalcPeriod(address,uint256)", +"193e0e2f": "startGame(address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", "193e6679": "MarginBanc()", +"193e8960": "userSignature(uint256)", +"193ea1ce": "AnotherPlayer(address)", +"193ed611": "setqEC(uint256)", +"193f660c": "amountDistributed()", "193f69a1": "getPhaseBonus()", +"193f7049": "settunaPerBlock(uint256)", +"193f78fc": "set_new_ETH_ADDRESS(address)", +"193f974c": "giveToken(address,uint256)", +"193fb800": "log(uint256,uint256,uint256,uint256)", "193fc711": "_getBeginIndexKey(uint256)", +"194035e9": "xh(uint256)", "19404c2f": "replayAnserWithReferrer(uint256,uint256[],string)", "1940a936": "isPregnant(uint256)", +"194153d3": "mediatorBalance(address)", +"19421268": "Bid(address,uint256,uint256)", +"194240ee": "getNFTByIndex(uint256)", "19424222": "approveAndCall(address,uint256,bytes32)", +"1942b033": "controlPrice(uint256)", "1942c3ce": "_transfer(uint256,address)", +"1942cc52": "_setMTNData(string)", "194307bf": "terminated()", +"1944597e": "Reclaim(address,address,uint256)", "19447eb6": "userStructs(address)", +"19448e84": "setMisoPerBlock(uint256)", "19449cb2": "changeAuthorizedCaller(address)", "1944bc3d": "priceThresholds(uint256)", "1946283a": "CarRegistrationFailed(uint256)", "19465953": "changeInfo(string)", "1946fdf4": "logicVersion()", "19476244": "icoNumeratorPrice()", +"1947a407": "PackBought(address,uint256[])", "1947bd2f": "getMap(address)", +"1947c720": "totalTokenDivs()", "194809a6": "finalistTeamFIFAIdsSet()", +"19481758": "LogRecommendProfit(uint256,address,uint256)", "19483cd1": "checkHash()", +"1948a52e": "PendingContractOwnerChanged(address)", "19498426": "BOUNTY_REWARD_SHARE()", +"1949fe58": "harvestAddValueAt(address)", +"194a62a8": "redeemInterestBearingTokens(uint256)", "194a7adc": "CONNECT(uint256,string,string)", +"194ac307": "workerCount(address)", +"194b0ed6": "pendingYmi(uint256,address)", "194b546b": "_addRec(uint256)", +"194b64dd": "eMode()", "194b81d0": "TGxToken()", +"194bef0e": "_setMaxSwingForAssetBatch(address[],uint256[])", +"194c2c21": "UpdatedSignedDealsCount(address,uint256)", "194c78d0": "setApp(string,uint256)", "194c8e15": "Update_START_ICO_TIMESTAMP(uint256)", +"194d0b22": "lockCommunityTwoTokens(address,uint256)", "194d0de2": "createOrder(address,uint256,uint256,address,uint256)", "194d297f": "canSend(bytes32,address,uint256,bytes)", +"194d7789": "epicWhiteLister(address[])", +"194da4b8": "tokensLeftToMint()", "194dee32": "setTokenForSale(uint256,address)", "194e10ce": "run(bytes,uint256)", "194e4acd": "reqvehreg(address,string,string,string,string)", "194eb01c": "CimbomCoin()", +"194ec74c": "listRankOfRecommend()", +"194f0d34": "redeemSingle(address,uint256)", +"194f37dc": "addToMappingOfStructs1(uint256,string,uint256)", "194f4795": "getItemsLength()", +"194f7d84": "mapKey(bytes32,bytes32)", "194f8806": "setMigrationHost(address,address)", "194f97ba": "setColorGreen()", "194fe9a4": "transferWithBonuses(address,uint256,uint256)", +"19501a0d": "artworkTypeList()", "195055f1": "isTransferable(address)", "19507d2c": "allowedToTransfer()", "19509649": "ImpactRegistry(address,uint256)", @@ -14569,21 +26559,43 @@ "1950ee41": "unlockPresaleTokens(address,uint256)", "195199f6": "setDeadline(uint256)", "1951f9ba": "isRequestPending(address)", +"1952e39c": "returnSwap(address,address,bytes,bytes32)", "19530f76": "multiTransferFixed(address[],uint256)", +"195340d4": "matches_(uint256)", +"19536b13": "uniswapFactoryB()", +"195426ec": "pendingSushi(uint256,address)", "19547404": "sendTokens(uint256,uint256,address)", "1954f39e": "EndDate()", +"19552052": "usersEscrows(address,uint256)", "195629de": "initMETToken(address,address,uint256,uint256)", +"1956ba2f": "get100()", +"19573658": "voterClaim()", "195743fc": "claimSMRforAll(uint256)", +"1957f9c2": "markProjectAsComplete(uint32,uint256,uint8)", "19583b05": "modifyCollectorAddress(address)", "1958623f": "BitcoinPluse()", +"19588b51": "joyGalleryLink()", +"19589b88": "tokensInVault(address)", +"1958bfde": "_Charge_Factory_()", "1958ccb1": "setParams(address[],uint256)", "195977a6": "emit(uint256)", +"19597a56": "mintNewWeek()", "1959a002": "userInfo(address)", +"1959ad5b": "tellor()", +"1959d17c": "claimTokensByLiquidity()", +"195a0c11": "xDNA()", "195aa377": "SportsChainToken()", "195ad926": "authenticate(uint256)", +"195b1a4e": "_setFactoryContract(address)", "195b616c": "_unmountSameSocketItem(address,uint256,address,uint256)", +"195b71c8": "ResetHouseEdge()", +"195c0831": "technicalAddress()", +"195c3eff": "stampingWhitelist(address)", +"195c8c7e": "setBreedingAddr(address)", "195d06ff": "addBigPromoBonus()", +"195d21a5": "GetWithdrawCount()", "195de8a1": "CapReached(address,uint256)", +"195e3808": "LDBAdminCommission()", "195e38b2": "EnergyModulationProject()", "195e8688": "Osiris()", "195ec9ee": "getAllParticipants()", @@ -14595,52 +26607,91 @@ "19617fe4": "coinBurnIco()", "19618a9b": "testDivideFractional()", "196198fa": "getDepositWithdrawCount(address)", +"1961d7fe": "areTokensRemoved(bytes32)", "1962d041": "SayadyToken()", +"1962de38": "calculateByteSize(uint256)", "1962df71": "_performTransferWithReference(address,uint256,string,address)", +"196348ef": "getattend()", "19638ca5": "CryptolifeToken()", "1963a0d1": "OWN_freezeAddress(address,bool)", "1963a693": "IncreaseAllowance(address,uint256)", "1963df66": "dtGetWorldData()", +"1963eaeb": "coldHotSystemInfo()", +"196431b0": "excludeFromBurn(address)", "1964569b": "Aktium()", "19648bed": "batchSend(address,address[],uint256[])", "1964dcbf": "SCCCOIN()", +"1964e147": "getholderfromid(uint256)", "19656b46": "teansferFrom(address,address,uint256)", +"1965d577": "TEST_VAULT()", +"1965dbbe": "hatcheryStrippers(address)", "1965e183": "MIN_TOKENS()", +"1965ea21": "addMembers(address[],uint256[],address[],bytes[],uint256[])", +"19662165": "AssertError()", "19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", "196667e4": "start_amount()", +"196684fe": "liquidityGeneration()", "1966cdbe": "pickWinner(bytes32,uint256)", +"196708ff": "tokensAlreadyWithdrawn(address)", "19677635": "TEAM_SALE_MULTIPLIER()", +"196789c7": "getDAFIToken(address)", "19679680": "emptyInactiveToken(uint256)", +"1967ce09": "VoteExists(string)", "1967d701": "fuToken()", +"1967fd98": "tokenIdToStarInfo(uint256)", "19682b09": "DonationDeposited4Doubling(address,uint256)", "19689e76": "paySemiFinalWinner(uint256)", "1968bf4f": "getPersonalStakeUnlockedTimestamps(address,address)", "1968c160": "addPaymentDetail(address,bytes32,uint256)", "1969c21a": "removePixelsFromMarket(bytes32)", +"196a6402": "totalSupplyMultiplier()", +"196a69c5": "multiInterestCredit(address[])", +"196afd28": "fund_manager()", +"196b051d": "usdtTotalDeposit()", "196be409": "DLTESTToken(uint256,string,uint8,string)", "196c16cb": "tokenPriceInEth()", +"196c3fbf": "isSwapped(bytes32)", "196c9909": "_bounty()", "196cd388": "isRangeInsideRange(uint256,uint256,uint256,uint256)", +"196ce79f": "enableContractManagement(address)", +"196cf9ae": "setWithdrawalFee(address,uint256)", +"196da540": "getFunctionByIndex(string,uint256)", "196e5c46": "sellSeeds()", +"196eb480": "_loaner()", "196ecd25": "getOwnedCount(address,uint256)", "196ee9c7": "remainingCats()", +"196eeed3": "mintingPoolAddress()", "196f2f61": "njcoinToken()", "196f5851": "transferAgents()", "196f9aa5": "getLedger(uint8)", "196fa707": "GAMEMAGICERC20(uint256,string,string)", +"1970722e": "MintWithData(address,uint256,bytes)", +"197081d4": "Register(string,uint256,uint256,uint256)", "19711d67": "campaignDurationDays()", +"19717203": "bootstrapEndBlk()", +"1971fecb": "extend_time()", +"19720de6": "getPriceAndBalance(address,address,uint256,address,address[])", "1972172b": "satLimit()", +"1972400c": "pendingToad(uint256,address)", "19726b4e": "TheGoDigital()", +"197275f1": "addOrPromoteAddress(address,address,uint256)", "1972b464": "emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", +"1972bda8": "setOpenSwap(uint8)", "1972c8dc": "Eggfrenzy()", +"19731e65": "invest_panel4()", +"197322fe": "whitelistOnEmission(address)", "19739117": "checkSignatures(bytes32,uint256[3],bytes,bytes,bytes)", "1973c5de": "icoPreEnded()", "1973cae7": "nextPriceDate()", "1973e795": "setWorkpointSupportCancel(uint256)", "197425c4": "testSupplyOf()", +"19745f3d": "_Tokendecimals()", "1974a003": "_startAuction()", "1974a540": "RoundIndex()", +"1974c5be": "tradeUni(uint256,address[],uint256)", "1975a9e7": "o_deus(bytes32,bytes32)", +"1975d200": "createVoting(string,string,string,string,string)", +"19762143": "setRewardsDistribution(address)", "1976804a": "TTCoin(address)", "19774b86": "bulkWhitelistInvestor(address[])", "19774d43": "orderFills(address,bytes32)", @@ -14649,209 +26700,378 @@ "1977f5c6": "Anubis()", "197828b1": "bucketHolding(bytes32,address)", "1978658b": "setCaps(uint32[],uint256[])", +"197881b7": "endorser()", "1978a87b": "TokenERC20()", +"1979cc52": "unlockCard(uint256,address)", "197a1976": "setInvested(address)", "197a2820": "depositarLucro()", +"197a8213": "uniswap_pair2()", "197a9187": "NodeAction()", +"197a9653": "claimDeflctDevFee()", +"197a9a17": "mintForRedemption(address,uint256)", +"197aa68a": "submitTokenMintTx(address,address,uint256)", +"197b29c8": "hasGameStarted()", +"197b42b0": "setGoalSucceeded(uint256,bytes32)", +"197b4e57": "setFloat(address)", "197b9454": "paintingsCount()", +"197b99d7": "SubscriptionPurchase(address,uint256,uint256,uint256,uint256,uint256)", +"197baa6d": "inCaseStrategyTokenGetStuck(address,address)", "197bc336": "holderAt(uint256)", +"197bfdbc": "swapERC20Token0And1ForERC20Token2And3(uint256,uint256)", "197c0f3d": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "197c3555": "getPlace(uint256)", "197c418f": "MyAdvancedToken7(uint256,string,uint8,string)", +"197c760b": "setMainPaths(address[],address[],address[],address[],address[],address[],address[])", +"197c963f": "__WAR_init(address,address)", "197cb5bc": "balanceLockedUp(address)", +"197cde78": "betNumber(uint256)", +"197d0e3b": "ContractUpdated(bool)", "197d24ad": "changeModuleOwner(string,string,address)", +"197dcb52": "HATCH_RATE()", +"197e08d7": "getOptionsList(uint256,uint256)", +"197e0ffe": "boost(uint256[6],address,address,bytes)", "197ea97e": "mintAsideTokens()", +"197ebd53": "team(uint256)", "197f0f05": "getMarketInterestSetter(uint256)", "197f3c29": "notLike(address)", +"197f6b4f": "tokenPriceUpdate(uint256,uint256)", "197f8a82": "claimReveralTokens(address,uint256)", "197f9508": "_getExchgAddr()", +"19805538": "getManagerFee()", "19806d8e": "s11(bytes1)", +"19807b2e": "checkRouter(address)", "19810f3c": "withdrawShares(uint256)", "19811fc9": "TPOMZ()", +"1981b4a5": "workingVirtualLimit()", "1981d521": "participate(uint8)", "19825187": "changeMinToken(uint256)", "1982640c": "walletOf(address)", "1982c626": "withdrawOverpay()", +"1982d067": "bonusTrigger()", "1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", +"1982ef79": "addTrancheRateAndTokens(uint256,uint256)", "1983111d": "getTotalCompositionPrice(uint256[])", +"198320fb": "availablePerStage(uint8)", "1983f4c2": "getDivsBalance()", +"19846006": "FirstCap()", +"1984916f": "sandbox()", "1984a063": "StarbaseEarlyPurchaseAmendment()", "1984a906": "preallocatedTokenAmount()", "1984d419": "getProvisionBalance(uint256)", "1985a440": "ContractRegistry()", "1985acf0": "checkLimit(address)", "1985f54a": "getScribe(address,address)", +"19861c5e": "BUSDCTokenContract()", "19863bb7": "ReDraw()", "19869555": "evacuateToVault()", "1986bc55": "stopBatchAssign()", +"1986d376": "getVoting()", "1986f704": "setTrigger(address,bool)", "1986fd4d": "getAccountWhitelist(uint256)", +"19872c64": "erc20PerBlock()", +"19874356": "proposeMelodyRemoval(address,string)", +"19875aef": "func_1E14()", "1987b887": "setTokenPorter(address)", +"1987be91": "REBALCUT()", "1987da04": "secondPreSaleDate()", "1987e50c": "getSellerAddressPayment(address,uint256)", +"198824da": "bsk()", +"19884817": "ChallengeAccepted(address,uint256)", +"1988513b": "sudoTransfer(address,address,uint256)", +"19885898": "rewardPerBlockDenominator()", "1988f6fd": "didWithdrawProfit(bytes32,address,uint256,uint256)", "1989a5ba": "canDoLoop(uint256,uint256,uint256)", "1989d175": "YEAR_THREE_SUPPLY()", "198a2085": "isATrustedContract(address)", "198a5423": "presaleFundingGoalReached()", +"198abb44": "LPFund()", "198ae785": "payTrnsTax(address,uint256)", "198b5d0d": "MinimumPoStokens()", "198c1f97": "getKeysfromETH(uint256,uint256,uint256)", "198c548b": "supplyTokensSaved()", +"198c6282": "AttackCompleted(bytes32,address,uint256)", +"198c873b": "ReputationIRNNodeShareUpdated(address,uint256)", +"198cea23": "defineLock(address,uint256,uint256,address[])", +"198d2761": "managerTemplate()", +"198d7fc5": "ACQUISITION_QUORUM()", +"198db6e4": "ManagerChanged(address)", "198df3b9": "LoginCheck(bytes32)", "198e2b8a": "create(string,string)", +"198e4788": "supplierBounty(uint256)", +"198ef94a": "set_pool(address)", +"198f5470": "AddMiles(int256[])", +"198fa81e": "getUserUnclaimedRewards(address)", "198fa9a3": "isSigned(address,address,bytes32,uint8,bytes32,bytes32)", "19901f1d": "TokenSale(uint256,uint256)", "19901f20": "removeMultipleAllowedAddresses(address[])", "19902b40": "changeCardAttr(uint256,uint16[5],uint16[5],uint16)", +"19906232": "selfvoteamount(address)", +"1990775f": "getAllowedTokenNamesAndAddresses()", "199099dc": "updateAccountState(address,uint256,bool)", "1990ad6b": "private_delPermittedRoll(uint256)", "1990f521": "fundings()", +"19910699": "proposeVote(address,address,bytes32,uint256,string)", "199156e4": "generatePresaleHouse()", +"19917d39": "modify_order(uint256,uint256,uint256)", "1991d34a": "getDataColla_AB_02(string)", "1991d6ac": "moveTokensFromSaleToExchange(uint256)", +"1991dbc8": "allCashOut(uint256)", +"1991f47d": "_sellFeeAddress()", "19921ad2": "AuthStart()", "199317cf": "mining_uncle(bytes,bytes,uint256)", "199326cb": "lastBlock_a2Hash_uint256()", "1993584b": "countSecondWinners()", +"1993982d": "removeSubRegister(address)", "1994ad1e": "founderEggSupply()", +"1994d406": "createEventBoth(uint256)", "19950c5b": "withdrawUnprotectedFunds(address,address,uint256,bool)", "1995333b": "burnFunds(uint256)", "1995b86d": "changeServerState(uint256)", +"1995fdba": "allWhitelistAddresses(uint256)", +"19964cc2": "tokenSaleROBX(address)", +"19967439": "getCurrentLockLimit()", "199676c7": "TOKEN_RATE_40_PERCENT_BONUS()", +"19970441": "orderRewardPerTokenOf(address,uint256)", "19973261": "assigner()", "19978a49": "rejectRequestUnpause()", +"1997c361": "pushChai(address,uint256)", +"1997db76": "harvestAllStrategies()", "1998524c": "updatePriceBottomInteger(uint256)", "1998a5c4": "RHC()", "1998aeef": "bid()", "1998fb75": "addCar(uint80)", +"199968f9": "exchangeThawTokens(uint8,address,uint256)", "19996d50": "DinosaurFarmer()", "1999cf37": "CHINESE_EXCHANGE_BUYIN()", "1999eca8": "attack(uint8)", +"1999f960": "EthereumFromAltar(address,uint256,uint256)", "199a620a": "acceptNegotiationOwner(address)", +"199a823d": "_toAddress(uint256)", "199ba9e8": "basicFunctionReturn()", +"199bead4": "catFab()", +"199c1063": "updateRewardsPerBlock(uint256,bool)", "199c8b74": "SecvaultTest()", "199cbc54": "totalVested()", +"199d3a7a": "schedulerAddr()", "199d70f4": "forceWithdrawRejected(address)", "199d743a": "bountyTransfers()", +"199dadc5": "verifyProofForBlock(uint256,bytes32[],bytes,bytes)", +"199dccdd": "mintTeamAndAdvisorsPart12(uint256)", +"199e1698": "safeMax()", +"199eb151": "Redeem(string,address,uint256)", "199ed01b": "weightOf(uint256,uint256)", +"199f065f": "stake(address,address,uint8,uint256)", "199f0791": "withdrawCntr(uint256)", "199f4045": "NewRisk()", "19a04a33": "SetDraftOrder()", "19a08058": "setDelay(uint256,uint8,uint256)", +"19a0bc4a": "indexCount()", "19a0d492": "getValueOfInitialTokens()", "19a0e572": "unverifyAddresses(address[])", "19a17468": "ENS(address)", +"19a19b1b": "topupfarming(uint256)", +"19a19e43": "lockAmountMulti2(address[],uint256)", "19a1b54f": "WEI_PER_ETHER()", "19a1c691": "_removeChild(uint256,address,uint256)", "19a1f592": "BONUS_AMOUNTS(uint256)", +"19a1fa6f": "confirmFilterUpdate(uint8,address)", "19a231eb": "getMilestoneDisputes(bytes32)", "19a278b9": "getBAddress()", "19a2bfd8": "unreadMessageCount(address)", "19a32f66": "setHashByProvider(address,bytes32,bytes32)", +"19a33ea2": "adminWithdrawERC20(address)", +"19a369c9": "weightSeniorRedeem()", "19a3d0bb": "getMyStrippers()", +"19a3db0d": "sendAndKill(address,uint256)", "19a3e3c0": "getAllRevenue()", +"19a4440a": "issueFetch(bytes32)", +"19a46f3d": "_buyerRewardDandy()", +"19a50d4a": "notZero()", "19a50f49": "numUsers()", "19a51554": "scheduleNextAuction(address,address)", "19a523b0": "Violated(string,address)", +"19a5929b": "PromotionBank()", "19a5ce51": "oraclizeGasExtraArtwork()", "19a64104": "Lockup6m(address)", +"19a65041": "minter(address,uint256)", "19a6b356": "updateStrategyLabel(bytes15,string)", "19a6fe7d": "setFixedAssets(bytes32,bool)", "19a72fef": "DroneEmployeeROS(address,int256,address,address)", +"19a78f55": "getUserLpBalance(address,address)", "19a7e59d": "assertEq4(bytes4,bytes4,bytes32)", +"19a86577": "feeDenom()", "19a876c2": "stopPubTrade()", "19a9119f": "prolongedDuration()", "19a96e72": "setCarrotsMultiplier(uint8)", "19a9c2f1": "generateId(string)", +"19a9f5dd": "setAllowStaking(bool)", +"19aa70e7": "claimDivs()", +"19aad371": "Unlocked()", +"19aadfe2": "setNFTMarketplaceContract(address)", "19aaff86": "claimAllDividends(address)", "19ab453c": "init(address)", +"19ab7f43": "returnAssetToVault(address)", +"19ab81e9": "gamer()", "19ac2756": "TIER1_RATE()", "19ac74bd": "userCampaigns(address,uint256)", "19ac8c0f": "payComission()", +"19add5e3": "ecr(bytes32,uint8,bytes32,bytes32)", "19adda2c": "fairsaleProtectionOFF()", "19ae8994": "test1(uint256)", +"19aeb490": "list(uint256,uint256,uint256)", "19aec48a": "endTimeNumber()", "19aec6a9": "newThreadEvent(uint256,string,string,uint256)", "19af1bd9": "WeiRaised()", +"19af6bf0": "priceMin(string)", "19af6f48": "crowdsaleTokenSold()", "19afa824": "setFactoryInterface(address)", "19afdfe1": "showMigrationAmount(address)", +"19afe463": "BLACKLIST_ROLE()", "19b0297d": "info_BalanceOf(address)", +"19b02dc3": "socialWhiteLister(address[])", "19b05f49": "accept(uint256)", "19b09f9b": "payWinner(address)", +"19b0c2b6": "SetDistribution(uint256,uint256,uint256,uint256)", "19b1f94b": "getLastAuditPass(address)", +"19b21121": "getConfigPool(address)", "19b24684": "updateEntity(uint256,address,uint256)", +"19b2e94f": "transfer_puls(address[],uint256[])", +"19b357c5": "tranferTest(address)", +"19b357c6": "_withdrawTokens()", "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)", +"19b56935": "REVPOP_FOUNDATION_PERIODS()", "19b587ad": "putCompanyOnsale(bytes32,uint256)", +"19b5f209": "createBet(uint256,uint8)", "19b61c09": "createSaddle1(uint256,uint256,uint256,address)", "19b64015": "connectorTokens(uint256)", "19b667da": "setFinalizeAgent(address)", +"19b68c00": "cEther()", "19b6eabe": "setBounty(bytes32)", "19b7b0b4": "acceptBid(uint256,uint256,bytes32)", "19b7d7bd": "getBudget(address)", +"19b90d27": "playerToOwner(uint256)", +"19b924fb": "lfi()", "19b97530": "setFundariaPoolAddress(address)", "19b985b3": "fixamt()", +"19ba01a1": "whitelistedAddr(address)", "19ba0b63": "getNumberOfProjects()", "19ba567c": "cancelAddOwnerRequest()", +"19ba5e73": "getSwapIntentByAddress(address,uint256)", +"19ba83a5": "deposit(uint256,uint256,uint8)", "19bad1b2": "Stage1MEI()", +"19bb0f6d": "verifyAll(uint256,uint256,uint256)", "19bb3c3d": "Reddit(uint256,uint256,bytes,bytes)", +"19bb4faf": "depositSeconds(uint256)", +"19bb5c1c": "AllocateToken(address,uint256,uint256)", "19bba58b": "_updateInventories(uint256,uint256,uint16)", +"19bbaa8b": "bproSpotDiscountRate(uint256,uint256,uint256,uint256)", +"19bcef6d": "setReceiptContract(address)", +"19bd1a3d": "testDataTypeDynamicArrayUint256(uint256)", +"19bd4bac": "updateAdjustingTimestamp(uint256)", +"19bd518d": "stageSettings(address)", +"19bd52dc": "testMethodInputsUint(uint8,uint16,uint32,uint256)", +"19bd688c": "setExchangeRates(uint8,uint8,uint8,uint8)", +"19bdb31c": "redeem2(uint256,address,uint256,bytes32[])", "19bdfc7f": "returnTokensFromHoldProjectAddress(uint256)", "19be28ec": "CurrencySwap()", "19be65f0": "GetBalance(address,address)", "19bece1b": "buytoken(uint256)", "19bee474": "totalFundsDistributed()", "19bf01c0": "firstLockTime()", +"19bf02c4": "updatePayeeWeight(address,uint256)", +"19bf068d": "LogTransferFeePercentageChanged(address,uint256)", +"19bf69bf": "NUM_MONTHS()", +"19bf798b": "depositAndPlacePrediction(uint256,uint256,address,uint64,uint256)", "19c02b27": "allowTransfer(address,uint256)", "19c039bc": "airDropJoin(bytes32)", "19c0737f": "WineChainToken()", +"19c0c51a": "getVotingDetails()", +"19c0e4ab": "holdingTime()", +"19c13d54": "set_new_APOOL(address)", +"19c14f40": "shouldnotbezeroAddress()", +"19c18932": "authorizeHub(address,address)", +"19c21536": "spin_the_wheel(uint256)", +"19c221c2": "CurrentCirculatingChanged(uint256,uint256)", "19c2a5b5": "auctionClose()", "19c2b4c3": "getLastRequestId()", "19c2f201": "GEN0_AUCTION_DURATION()", "19c32e0b": "hmacsha256(bytes,bytes)", "19c35319": "extendCaller(address,address,uint256)", +"19c37489": "withdrawfee(address,address)", "19c38c66": "inPermission(address,bytes4)", +"19c3b946": "totalWithdrawnDividendDouble(address)", "19c46f51": "kscBatchBurnWhenMoveToMainnet(address[],uint256[],string)", "19c47214": "getBlockVersion(bytes)", "19c4e40f": "envelopeTypes(uint256)", +"19c5186a": "registerWalletENS(address,string)", "19c54359": "createData(uint256,uint256)", "19c55a31": "SearchByGit(bytes)", "19c55cea": "cancelBid(bytes32,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint8)", +"19c595e6": "initLCT(address)", +"19c59768": "getDigestCodeRoot()", "19c5ab4b": "addAccountReader(address,address)", "19c5b887": "bonusSize()", "19c5b89c": "DToken()", "19c5ef1b": "oneStepRate()", "19c61b6f": "dealEndOffer(bool)", +"19c6a5e4": "decSystemBalance(address,uint256)", "19c6c6cd": "THRD()", "19c6eeb8": "getIPFS(address,string)", +"19c741f2": "PSALE_HARDCAP()", "19c76700": "withdrawBankroll(uint256)", +"19c79b0c": "CheckCertificate(uint256)", "19c85a4d": "RakugoCrowdsale(uint256,uint256,address,address,address[])", "19c87f1f": "toAddress()", +"19c8916b": "isOrderExpired(address,address)", "19c8b591": "ChangeCurrencyAdditionFee(uint256)", +"19c934bb": "RewardPool()", +"19c95fb7": "Management(address,uint8,address,uint8)", +"19c9652c": "newGrant(address,uint256,uint256,uint256,uint256,bool)", "19c97154": "getLastTicketTime()", "19c9a4f3": "platformTokensAddress()", +"19c9c772": "payoutsOf(bytes32,address)", +"19ca503b": "setBaseVolatilityOnAcoPool(uint256[],address[])", +"19ca523b": "spend(uint256,uint256,uint256)", "19ca6feb": "_appendSchellingSupplyChanges(uint256,uint256,bool)", "19ca964c": "_isOperatorForTranche(bytes32,address,address)", "19cac495": "isYes(uint256)", +"19cad2f7": "_frontRunGuard()", "19cae462": "difficulty()", "19cb355d": "requiredStake()", +"19cbbda2": "optionPoolMembersUnlockPlans(uint256,uint256)", "19cbe072": "contractFallback(address,uint256,uint256,uint256,uint256,uint256,bytes32)", "19cc02aa": "airdropped()", +"19cc17da": "lastInterestTime(address)", "19cc1ec4": "maxContributionAmount()", +"19cccb08": "receive_moneyz()", +"19ccfe86": "getGovElectionStartTime()", +"19cd47f9": "redemptedCoupons(uint256)", +"19cd4d92": "preConsume(address,uint256[],uint256[],uint256[])", +"19cd71c5": "pendingBee(uint256,address)", "19cddd4b": "hackoin(string,string)", +"19cde5e6": "getValueForUniswapPools(address,address,uint256)", +"19ce0b14": "importCdpPositionCheck(uint256)", "19ce4432": "DMPhuongToken()", +"19ce64e4": "interestPaidDate(bytes32,uint256)", "19ceb660": "Ticket_Price()", +"19cedf88": "userProfitBlacklist(address)", +"19cef879": "isAllowedDAPP()", +"19cf3ff6": "forceFinish(address)", +"19cfca94": "metaToken()", "19d0f54d": "allowRecovery()", "19d152fa": "vestingToken()", +"19d16c49": "extractor()", +"19d170ef": "mediationTimeLimit()", +"19d18eb3": "_paySingleProtocolFee(bytes32,uint256,address,address)", "19d1997a": "supplyLimit()", "19d1b6c6": "getRegistrationRight(address)", "19d1d967": "MOAC()", +"19d27d9c": "transferWithSig(bytes,uint256,bytes32,uint256,address)", "19d2993e": "phase1DurationInHours()", "19d2fe85": "_iD()", "19d3237c": "setDataColla_001_002(string,string)", @@ -14864,106 +27084,209 @@ "19d46f71": "makeWeeklyInvest(uint256)", "19d4c380": "setBestGuessSecondPlaceTentativeWinningPayoutDistributionHash(bytes32)", "19d56f84": "BuyChestSuccess(uint256)", +"19d5c108": "INX_Burn(address,uint256)", +"19d5c665": "settlementOwing(address,bytes32)", "19d70e0b": "createSaleAuction(uint256,uint256)", "19d7943a": "reLoadXid(uint256)", +"19d808e2": "tokenOwner(uint48)", +"19d812cc": "addrIsAgent(address)", "19d8ac61": "lastTimestamp()", +"19d8be4a": "withdraw6()", "19d9217c": "midTermHolding()", +"19d92f0e": "interestConsensus()", +"19d95385": "changeOfficialAddress(address)", +"19d992c0": "dictatorAddress()", +"19d9b231": "showBnum()", "19d9c8df": "ScaleObs(address,bytes32)", +"19da079d": "Cat11(address,uint256)", "19da8c99": "getICOStatus()", "19dacbf8": "Deposit(address,bytes32,uint256)", "19dad16d": "setOwnerCutPerMillion(uint256)", +"19db2168": "getSiHandlerDataStorage()", +"19db2228": "setFeePool(address)", +"19db2dcb": "changeWallet2(address)", +"19db3f2a": "completeProposal(uint64,address[])", +"19db457d": "_feeDecimal()", "19dba3d2": "getBountyToken(uint256)", +"19dbc19b": "lastplayer()", +"19dc12ef": "getV2UniPair()", "19dc2525": "closeChannelEcrecover(bytes32,uint8,bytes32,bytes32,uint256)", "19dc831a": "withdrawHavvens(uint256)", +"19dd7468": "migratedTokens(address)", "19dd9455": "getContractTimestamp()", +"19ddad4a": "get_amount_votings()", "19ddd5a3": "_buyXname(bytes32,uint256,bytes32)", "19de029a": "setBountyDuration(uint256)", +"19de79ab": "_buybackFee()", +"19de9ff8": "reinvestedAmountOf(address)", +"19deae23": "OnStartOfPresaleSet(uint256,uint256)", "19dec62a": "approveAgreement()", +"19df0bc2": "addMinters(address)", +"19df99a8": "cancelBuy(uint256)", "19e044f8": "MockToken(uint256)", +"19e05fec": "setBTCUSDpriceFeed(address)", "19e06f20": "mintIssuerToken(address,uint256)", "19e072ef": "updateStatus(bool)", "19e0a0cf": "sendTokensWithLock(address,uint256,bool)", "19e0eb0e": "currentBlockHash()", "19e13c93": "winningTeamName()", "19e1568c": "pause_1()", +"19e15836": "LastStakedOn(address)", +"19e1aef9": "mValue()", "19e1d8d4": "Luckblocks()", +"19e1f486": "sellNFTBack(uint256)", "19e1fca4": "allowed()", +"19e29afc": "setIsOn()", +"19e2be1b": "balanceOfyvsteCRVinsteCRV()", +"19e2c349": "removeSet(address)", +"19e2c8de": "rewardUnlockTime()", "19e3897a": "UpdateUserExtraData2(address,bytes32)", +"19e3922d": "getWinnersByGroup(uint256)", "19e3a1d8": "BoomstarterICO(address[],address,uint256,bool)", "19e4540b": "getBankAccount()", +"19e48c9d": "NewOrder(uint64,address,uint32,uint256,uint256)", "19e5221a": "getBonusFee(uint256)", +"19e5299b": "ascensionActive()", +"19e534f8": "setIlkBidDuration(address,uint256)", +"19e54fb3": "assertIsNotBetterPrice(uint8,uint256,bytes32)", "19e5bf3a": "Register()", "19e5d0cb": "mintInPeriodCount(uint256)", "19e66508": "ztToken()", +"19e68c53": "updateArtworkDimensionFileInCm(uint256,uint256)", "19e6ab23": "icoDiscountLevel1()", "19e6e158": "totalVotes(uint256)", "19e740c0": "getNextVestingIndex(address)", "19e743fe": "addICOToken(address,address)", +"19e772c2": "vBZRXWeightStored()", "19e77c34": "startSlotAt()", "19e7998c": "votingInfo()", +"19e7d5cd": "Debug(uint256,string)", "19e7fbc2": "totalEthPos()", +"19e812d0": "NewBurnablePayment(address,bool,address,uint256,uint256,uint256,string,string)", "19e82d86": "cfi_whitelist(address)", "19e82e6f": "BrokerBank(address,uint256,address,address)", "19e858e5": "processCollateral(address,address,uint256,uint256,uint256,uint256,bool)", "19e860c1": "secondPrivateLockedAmount()", +"19e8bfbd": "precent_of_reward_3()", +"19e8e03b": "getVariablesOnDeck()", +"19e8ecd4": "borrowedTransferFrom(address,uint256)", "19e9e5de": "getGooProduction(address)", +"19ea1648": "checkClaimEntitlementofWallet(address)", "19ea61db": "testFailTransferDisabled()", "19ea809b": "intercrypto_convert(uint256,string,string,address)", +"19ea8608": "finalizeBet(uint256,uint256,uint256)", "19ea8a98": "setPackSaleAddress(address,address)", +"19eacac4": "playTimeStart()", "19eae36b": "setMaxBlockPurchaseInOneGo(uint256)", "19eaeccb": "getInfoCellLockup()", "19eb4a90": "getValues()", "19eb5dc6": "transferToken(address[])", "19eb691a": "curUserId()", "19eb8d48": "canVote(address,uint256)", +"19ebbd5a": "isPairs(address)", +"19ec3ded": "rewardAmounts(address)", +"19ec825c": "getZapBound(address,bytes32)", "19ecb310": "allocateTicket(address,address)", +"19ecc185": "demandAll(address[],address)", "19eced6d": "mCURRENT_STATE()", +"19ed0407": "listBunch(uint256)", +"19ed21bd": "canMigrate()", +"19ed9523": "CastleSaleToBuyer(uint256)", +"19eda8cc": "updateCompanyInfo(address,uint256)", "19edc0aa": "minimalInvestment()", "19ede85a": "Hydron(uint256,string,string)", "19ee1f1c": "getPrizeFund()", +"19ee4691": "beneficiaryAddress(uint256)", "19ee5bca": "BountyManagerEntity()", +"19ee6e0d": "redenominatedBalances(address)", +"19efda2f": "pixel(uint8,uint8)", "19f02ceb": "set(address,address,uint256)", +"19f092f4": "pAff_(address)", +"19f0c31f": "WalletFeesSet(address,uint256)", +"19f0f849": "configure(address,string,string)", +"19f18dee": "lastTradeTimestamp()", "19f1cded": "getStakedTeller(address)", "19f1d7b0": "Kentkoin()", +"19f2433a": "getSettlementAmount(uint128,uint128,uint128,uint8)", +"19f253e9": "buyNewLevel_(uint8)", +"19f28d49": "getContributionBonus(address)", "19f2b931": "removerAssinatura(string)", "19f30aaa": "hire(uint64,address[])", "19f353bb": "protectionPrice()", "19f37361": "isToken(address)", +"19f37f78": "initialize(uint256,string,uint8,string)", +"19f3d10f": "REGISTRY_ADD_EXECUTOR_ROLE()", "19f3edec": "_released(uint256,uint256)", +"19f4d084": "Transfer(uint256,uint256)", +"19f4d6b7": "sell(address,uint256,bytes)", +"19f4e59a": "_getCurrentRoundId(bytes32)", "19f4ff2f": "setFeeRatio(uint256)", "19f577b3": "placeBuyOrder(uint256)", +"19f5b194": "FOUNDERS_POOL_AMOUNT()", +"19f5ec3f": "burnPercentageBytes()", +"19f5fdd7": "executeOnFlashMint(bytes)", +"19f61be7": "presaleEvent()", +"19f657f4": "transferFrom(address,address,address[],uint256)", +"19f8255d": "pendingOkf(uint256,address)", +"19f8c885": "bounty(address)", +"19f8c912": "icoContrib()", "19f8dee9": "isEthWithEnc(uint16)", +"19f94c94": "initTwap()", "19f97a46": "createContractPlace(string,string)", +"19f99c06": "gexWinBenefitPool()", +"19f9a20f": "unlockTarget(address)", "19fa55bd": "MinasAlbarit()", +"19fa88a0": "getnetworkFees()", "19fa8f50": "InterfaceId_ERC165()", "19fa9f72": "DNNToken()", "19fac8fd": "setCommissionRate(uint256)", "19fb361f": "transferTo(address,address,uint256,bytes)", +"19fb49b0": "withdrawAaveV1(address)", "19fb52db": "mainPoolCutPercentage()", +"19fb7ee2": "bidenVictoryIPFSHash()", +"19fbf4e5": "TileDistribution(address[],address)", +"19fc0645": "test_DSProxyFactoryBuildProcOtherOwner()", "19fc36ed": "MIN_TRANSFER_TIMESPAN()", "19fc3b9d": "getMyHolding()", "19fc5b88": "minEthAmount()", "19fc5dfa": "LogBeneficiarySet(address,address)", "19fc9e54": "cashInvestment(address,uint256)", "19fce740": "capCommitment()", +"19fd745d": "getDivdEth(address)", +"19fd7886": "MAX_TOP_HOLDERS()", "19fd93f1": "unregisterSsp(address)", +"19fe827e": "m_WeightOfBlock()", +"19feb0fa": "resetStorageFees(address[])", "19feda7e": "addEmployee(address,address,uint256,uint256)", "19ff1d21": "hello()", "19ff7096": "cost_of_transfers()", +"19ffb768": "ris3Address()", +"19ffd7ce": "flashMint(uint256)", "1a000513": "getLotteryResultTotal(address)", +"1a004a38": "STATS_TYPE_REWARD_BURN()", "1a0058f5": "getBatchInfo(uint256)", "1a006503": "hasAlreadyClaimed()", "1a009265": "setArrBoolField1(bool[])", +"1a012e6d": "approve_677(address,uint256)", +"1a0131c9": "shl_large(uint256)", "1a013939": "gameStarted(string,uint256,uint256,uint256)", "1a017f3f": "transferPrivileged(address,uint256)", +"1a01e979": "claimTamagRewards(uint256)", +"1a025f25": "plasmaOf(address)", "1a026c96": "wallet1()", "1a02af40": "tokensInAuctionsOfOwner(address)", +"1a03324e": "iconicChecklistItems(uint256)", "1a036357": "removeDeactivatedList(address)", "1a038873": "FREEZE_TIME()", +"1a03e861": "DURATION_STAKE()", +"1a03fa49": "removeInvestmentToken(address)", +"1a040b76": "splitGwei(address,address,uint256)", "1a041463": "retryOraclizeSetProof(uint256)", "1a04d5c5": "startingFeeBalance()", "1a053713": "unblockTokenFunds(address,uint256)", "1a05619b": "infoTier()", +"1a056fcf": "getSakePerBlock(uint256)", +"1a058bca": "MAXIMAL_RATIO()", "1a05ba8d": "setPI_edit_12(string)", "1a06008a": "dividendFund()", "1a069c72": "contribute(uint256,uint256,uint8,bytes32,bytes32)", @@ -14971,6 +27294,8 @@ "1a0726df": "getHatValue(uint256)", "1a080a7a": "placeBet(uint8,int8,uint256,uint256)", "1a081330": "isSaleOpen()", +"1a085fe1": "percentDev()", +"1a088e42": "dividendPoolAmount()", "1a08a7bf": "ConfigAction()", "1a08b189": "setFounderAddress(address)", "1a0919dc": "unregister(bytes32)", @@ -14981,24 +27306,37 @@ "1a0a9ac7": "KNOXV()", "1a0abd34": "getMyDepositAmount()", "1a0b1b86": "crowdPrice()", +"1a0b287e": "file(bytes32,bytes32,uint256)", "1a0b4656": "LiveStarsToken()", +"1a0b61fa": "getMyReleaseTimestamps()", "1a0bc596": "pandora()", "1a0be73f": "DispatchHub()", +"1a0c1afb": "SHARE_CAPITAL_CURRENCY_CODE()", "1a0c3479": "decreaseApproval(address,uint256,bytes,string)", +"1a0c767b": "isPredictionFinalized(uint256)", "1a0c83f8": "buyerLastPaidAt(uint256,address)", +"1a0c9831": "burnCollection(uint256)", +"1a0cc59f": "setVersus(address)", +"1a0cd28e": "ENCORE_Vault()", "1a0d77b9": "ClaimAmount()", "1a0ddce9": "setRewards(address[],uint256[],uint256[])", "1a0de74c": "selectWinners()", +"1a0e416f": "cakeToToken(address,uint256)", "1a0e722b": "LogDeliverEVN(address,uint256)", "1a0f0bf1": "unrestrictedMintToPool(uint128,uint256,uint128)", "1a0f2f5f": "BroToken()", "1a0f518d": "updatePlayerBalance(address,int128,int128,uint256)", +"1a0fa8c3": "withdrawIncome()", "1a0faecf": "addNewMeme(uint32,string,string,string,string)", "1a0fb847": "disperseRewards(address,uint256)", +"1a104ae8": "changeOperatorToSuperAdmin(address,address)", "1a10cfc3": "delete_entry(uint256,uint256,uint256)", +"1a10ef8c": "changeNominee(string,string)", "1a11415e": "PRIVATESALE_BASE_PRICE_IN_WEI()", "1a120481": "enlist()", +"1a121d11": "addAttackContract(address)", "1a12e7a9": "setCreationFee(uint64)", +"1a140c44": "factoryToAssetId(uint256)", "1a144940": "codetokenIndexToOwner(uint256)", "1a145c34": "getNumEthTweets()", "1a148644": "newDocument(string,string)", @@ -15006,14 +27344,20 @@ "1a14f128": "EventCreateAccessory(address,uint256)", "1a14ff7a": "getD()", "1a1542e6": "checkGameResult()", +"1a15ab71": "UpdatePrice(uint256)", "1a15b206": "holdTokens(address,uint256)", "1a160fe9": "checkPermission(address,address)", +"1a1625a5": "createVoting(string,uint256)", "1a170aa1": "buyTickets(bytes32)", +"1a172e97": "rewriteBox(uint256,uint16,uint16,uint256)", "1a1773f4": "otherchainstotalset()", "1a182801": "createNewCertifier()", +"1a186227": "stakeContract()", "1a18e707": "setBlockReward(uint256)", "1a197588": "availableAmount(address[3],uint256[4])", +"1a197a26": "checkAllowance(address)", "1a19b0da": "confirmEngineerQuest(address)", +"1a19bd79": "getRewardByHash(uint256)", "1a1a0d65": "distributeSRNT(address[],uint256)", "1a1a0d76": "updateTopicDescription(bytes15,string)", "1a1a4ed7": "HALVING_DELAY()", @@ -15022,42 +27366,87 @@ "1a1aab46": "unlock_times(uint256)", "1a1abe3d": "sizes(uint8)", "1a1b8d08": "CompleteInit()", +"1a1bd8ab": "setHxpAddress(uint256)", +"1a1c4044": "pendingMark(uint256,address)", "1a1c59e2": "setBidSubmissionProofsAdd(address)", +"1a1caf7f": "unauthorizeExecutors(address[])", +"1a1cb01f": "tokensPerBlock()", "1a1ceb11": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,bool)", +"1a1d2496": "listUniswap()", "1a1d28aa": "ClaimAcornShare()", +"1a1d4fae": "ethtomain(address)", +"1a1dbabb": "optionsCount()", "1a1dca07": "setLockFunds(address[],uint256)", "1a1df394": "Play(bool)", +"1a1dfa39": "getCycles()", "1a1e01d5": "pushAllRemainToken(address)", +"1a1e63d4": "changeYumAddressTo(address)", "1a1eea7d": "ProposalRequestSubmitted(bytes32,uint256,uint256,string,address)", +"1a1f6d88": "tenDayHodlPercent()", "1a1feae1": "txGasPriceLimit()", +"1a202082": "setBeneficiaryFeePercent(uint256)", +"1a202cd1": "faucetUsers(address,address)", "1a2084f1": "updateCreator(address)", "1a209776": "isVerified(address,uint256)", +"1a21995d": "bancorPath(uint256)", "1a21bb22": "PREVIPdeadline()", +"1a21c0bc": "handlers(address)", "1a21c229": "gracePeriodMaxTarget()", +"1a2232a7": "_getEntry(bytes32)", +"1a224c9c": "_dailyInvest()", "1a2309f0": "CONTRIBUTION_MAX()", +"1a231c60": "approve_32(address,uint256)", +"1a2359ff": "iPair()", "1a23bee3": "endOfROSCARetrieveFees()", +"1a244182": "grantVoter(address,bytes)", "1a24b91a": "setPriceFee()", "1a24befc": "clearSaleSharesSold(uint256)", "1a254884": "Coffeecoin(uint256,string,uint8,string)", "1a256090": "sawan()", "1a25e513": "upgradeProvider(address,address)", +"1a25f7ca": "rebalancePlug()", "1a261fda": "scoreUp(address)", +"1a265863": "EthTransform(address)", +"1a26720c": "close(bytes32,bytes)", "1a26ed1c": "validateReservedWindowSize(uint256,uint256)", +"1a275dcb": "getTreasuryPendingReward(address)", +"1a282d99": "redelegateStash(bytes32)", +"1a289665": "petsClaimedGold(uint64)", +"1a28ff05": "addDelegateBySignature(address,address,uint256,uint8,bytes32,bytes32)", +"1a297696": "flashBonus()", +"1a29cf63": "setLidTreasury(address)", +"1a29df35": "UpdatedTokenInfo(string,string)", +"1a2a2caf": "getBattleDataLog(uint64)", "1a2a4ab5": "withdrawDeadFund(address)", "1a2a627c": "nextroundtotalsupplyGOTCH()", +"1a2a712e": "preSaleTransferLock(address,uint256)", +"1a2ac063": "_removeFromEffectiveDelegatedByHolderToValidator(address,uint256,uint256,uint256)", "1a2ad007": "GetCurRoundInfo()", +"1a2b33ae": "split(address[],uint256[],address)", "1a2b3431": "completeBooking(uint256)", +"1a2b3832": "get_interest(uint256)", "1a2b3adf": "signedTransferFromHash(address,address,address,uint256,uint256,uint256)", "1a2b4cd8": "airDropPool_()", "1a2b6250": "canPerform(address,address,bytes32)", +"1a2ba386": "approve_416(address,uint256)", +"1a2be4da": "isWrappedAsset(address)", "1a2c4334": "FortuneGodToken(address)", "1a2c752a": "testLimiting()", +"1a2d2a4e": "UniRouter()", "1a2d3be8": "masterNodable()", +"1a2d668d": "accruedBonusStoredInternal(address)", "1a2d72fb": "_api_PlaceBet(bool)", "1a2d8629": "getinfo()", +"1a2db988": "balanceOfSLP()", +"1a2e14c2": "msTokenP(uint256)", "1a2e2b2c": "getHolderIndex()", +"1a2e4cba": "getTokensInfo(address,address[])", +"1a2e7aab": "pendingSAPE(uint256,address)", "1a2eaaeb": "Unicoin()", +"1a2eed34": "refundedInvestors(address)", +"1a2f1363": "upgradeImpl(address)", "1a2f1640": "amountSecond()", +"1a2f7167": "isMerchant(address)", "1a300a98": "_setCooldownEndTime(uint256,uint256)", "1a3057f3": "performAddToken()", "1a30ec13": "ETHWallet()", @@ -15065,265 +27454,473 @@ "1a3142bd": "depositAndWithdraw(uint256)", "1a314552": "isUsernameExists(string)", "1a31752a": "masternodes(uint256)", +"1a31d465": "initialize(address,address,address,uint256,string,string,uint8)", +"1a31e1e0": "extendedKeys()", "1a31e733": "WinningsClaimed(address,uint256)", +"1a323dbe": "initTwo()", +"1a325385": "StakeDeposited(address,uint256,uint256,uint256,uint256)", "1a327d97": "bitmask_rm(address,uint256)", +"1a32de49": "addApprovedWithdrawAddress(address)", +"1a32ebfa": "addNewAddress(address[])", "1a3352c1": "getOrderBookSize()", +"1a337a52": "cert_proxy()", "1a3480b5": "rateDecimals()", "1a34b59d": "OjtToken()", +"1a34f5ed": "getLastSuggest()", "1a34fe81": "max_amount()", "1a3538f3": "closeFailedInstallationAndWithdraw()", "1a360f5f": "EWM()", "1a363bf1": "giveMeTokens()", +"1a365f23": "deployFutureSwapRouter()", "1a365f2b": "stampIndexToOwner(uint256)", +"1a371de6": "isValiduser(address)", "1a3722b2": "grantPermission(uint8,address)", "1a372eaa": "allPiranhasInfo(uint256)", "1a3739ec": "getInitialReporter()", +"1a375d97": "unstakeFPTA(uint256)", +"1a376620": "deleverAmtFactorSafeUL()", +"1a37c927": "ExecuteLookUpB(string,string,string,string,uint256)", +"1a37e2fc": "doPutCollateral(address,uint256)", +"1a382cb3": "setUniChatPersonAddr(address)", +"1a3848ca": "calcEthFee(uint256,uint256)", "1a389eb9": "exploreFastenEMONTFee()", "1a38fa06": "distributeBounty(address[],uint256[])", +"1a3939eb": "mint_dump(uint256)", +"1a39549c": "_decode_sol_bytes21(uint256,bytes)", +"1a399125": "updateReward(address,uint256)", "1a399698": "genDailySecondPrizeKey(uint8[4])", +"1a39b177": "_byteNextPercent()", "1a39d8ef": "totalAmount()", "1a39e1cf": "addAffiliate()", +"1a3a562d": "processCommissions(uint256[],bool[])", "1a3a67d8": "zGetGameID()", "1a3ae67a": "getPlatBalance()", +"1a3b0b2c": "TokensRevertedByKYC(address,uint256)", +"1a3b3f9b": "addressesDepositedMibBUSD(uint256)", "1a3b8bad": "CABoxCrowdsale()", +"1a3c297f": "basicFactor(uint256,uint256,uint256)", +"1a3c3f94": "mintInitial(uint256,uint256)", +"1a3cb2e8": "cUsdtAddress()", "1a3cb4f5": "getBalanceA(bytes)", "1a3cd59a": "getInfo(uint256)", "1a3d069b": "totalEuroUlps()", +"1a3d203d": "QUEUE()", +"1a3d4305": "setupfarmingprogram(uint256,uint256,uint256)", +"1a3d5f82": "ConfirmWorker(address)", "1a3d96ff": "IdentityManager(bytes32)", "1a3dc39c": "getRewardPotSetting()", "1a3de5c3": "_pay()", "1a3e42d0": "setSignUpOnOff(bool)", "1a3e5457": "validDestination(address)", "1a3e91b9": "getTitle(bytes32)", +"1a3ec9b9": "virus()", "1a3f9eb5": "getVanillaERC20BalanceSlot(address,uint256)", +"1a402244": "DeployEVMScriptRegistry(address)", "1a421103": "getProperty(address,bytes32)", "1a426550": "claimBounty(uint256,string)", +"1a42826c": "lastTreasuryRewardedTime()", "1a429a0e": "SCND_CRWDSALE_RATIO()", +"1a42dba0": "getAllkPair()", "1a433daf": "withdrawProposedAction()", +"1a435b55": "mulsig()", +"1a435e0a": "freeaddress()", "1a437780": "orderOnFightAuction(uint256,uint256,uint256)", "1a43c338": "compute()", +"1a43da93": "buyBackAddress1()", +"1a43ebea": "TimeLockCustomRemove(string)", "1a44731c": "statePhase()", "1a454ea6": "COMMISSION_RATE()", "1a45fac7": "removeOwner(address,address,address)", +"1a4635ba": "getBlockMinter(uint256)", "1a463a7d": "amountReceived(uint256)", "1a464fa1": "claimProductOwnership(bytes32)", +"1a465fe1": "protocolToken()", +"1a46ec82": "allowanceOf(address,address)", +"1a46f731": "getContractManager()", "1a470b6a": "SweepBalances()", "1a476260": "indiFundAndSocialVaultDeposit()", +"1a47f672": "tokenSaleRHINO(address)", "1a4813d7": "setBaseRate(address[],uint256[],uint256[],bytes14[],bytes14[],uint256,uint256[])", "1a488a60": "zpzToken(uint256,string,uint8,string)", "1a48fb3a": "testDeleteLawyer()", +"1a494fbd": "approve_251(address,uint256)", +"1a495edd": "bili()", "1a49803b": "investWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", +"1a49f814": "emitListTokenEvents(uint256,string,string,address,uint256,bool,uint256)", "1a4a1a6c": "benefactorsBalance()", +"1a4b0a25": "phaseInfo(uint256)", "1a4b4cff": "updateWithdrawalModeByIndex(uint8,uint32)", "1a4b746f": "CharacterRegistry()", "1a4bcc4a": "validTokenBalance(address)", "1a4be5d8": "HITSCoin()", "1a4be6ff": "ConstantConfig(uint256,bool,bool)", "1a4c24f9": "purchaseInternal(address,uint256,address)", +"1a4cbede": "distributionPeriodsNumber()", +"1a4d01d2": "remove_liquidity_one_coin(uint256,int128,uint256)", +"1a4d02b0": "approve_485(address,uint256)", +"1a4d0e48": "bTokenSell(uint256,uint256,uint256)", +"1a4d56bd": "getBetSizeBonus(uint256,uint256)", +"1a4d6497": "_setWidth(uint256)", +"1a4df518": "getDelegate(string)", "1a4e0afd": "countBit(uint8)", "1a4e1e78": "tips()", +"1a4e218d": "burnTreasureRewardToken(uint256)", "1a4e9a6c": "getWithdrawConfirmations(uint256)", +"1a4f000a": "saleAmounts(address,address)", "1a4f5b67": "isFrontRunnerPeriodOver()", "1a4fb653": "getGDemoc(uint256)", "1a4fbee1": "committeesArrayIndexCounter()", +"1a4ff263": "exchangeDataByExchangeAddress(address)", "1a514d97": "reActivate()", "1a51a28c": "contributorsAllocation()", "1a52691b": "refundForAll(uint256,uint256)", +"1a52c5ab": "indexOfActiveTaskId(uint256)", "1a534fd1": "calcCanAcceptAmount(address,bool,uint256)", "1a5375e1": "passTurn(uint256)", +"1a53bb3e": "testimonies(address)", "1a53cd90": "presaleBalancesLocked()", +"1a547b30": "setetherFee(uint256)", +"1a54b805": "napV2token()", +"1a54ded1": "SendDeklaSuccessful(uint256,address)", +"1a5518b1": "xHOPR()", +"1a5524de": "fundManager(address)", "1a555b0c": "NewClonedToken(address)", "1a55ad28": "_verifyProof(string,bytes,bytes,uint256)", "1a55b8f7": "BACKUP_ONE()", +"1a563693": "getMoreTokens()", "1a582962": "isMintingFinished()", "1a58349a": "fetchCreatedOrdersForPayerByAdmin(address)", "1a5834aa": "start_game(string,string)", +"1a584775": "buyGftUseGSD(uint256,address)", "1a592bc1": "saasPayUser()", +"1a59bbe2": "approve_701(address,uint256)", +"1a5a3794": "setParameters(uint32,uint8,uint8)", +"1a5a3fce": "setOptionsPoolAddress(address)", +"1a5a9148": "setDepositRegistry(address)", "1a5ab391": "Wallet7()", +"1a5ac0c8": "setVadillo(address)", "1a5b189d": "NCASHTOKEN()", +"1a5b70ad": "accountIdForAddress(address)", "1a5b72c3": "endStage3()", "1a5b8f96": "MAX_SITE_ID()", +"1a5bbb52": "getTotalFarmed()", "1a5bd7fc": "getTournament(uint256)", +"1a5c6095": "feeRateForExchange(bytes32,bytes32)", +"1a5cbe65": "approveAndCallLock()", +"1a5d1473": "getDataRequestConsumer(bytes32)", "1a5d3b75": "getAssetIdOwner(uint256)", "1a5d60bd": "removeBoard(address,address)", +"1a5d85ba": "balanceOfStakedWant()", +"1a5da6c8": "updateRegistry(address)", "1a5dbe98": "iflea()", +"1a5dbfb4": "deregister(uint256)", "1a5e2110": "tokensPerEthPrice()", +"1a5e2e54": "setDollarOracle(address)", +"1a5e4762": "addBounty(bytes32,uint256,uint256)", +"1a5e5241": "purchaseWithXAMP(uint256)", +"1a5e5bc5": "deployProxyManyToOne(bytes32,bytes32)", "1a5e6f7d": "getOneBet()", "1a5e7852": "kaliSupply()", "1a5eba21": "invest(uint256,string)", "1a5f9613": "DevMiningRewardPerETHBlock()", "1a5f9bed": "exploreUsingETH(uint256,uint256)", +"1a610224": "AdminLevelSet(address,uint8)", +"1a610adf": "setSwapFee(uint256,uint256)", +"1a61151e": "giftGiven(address)", +"1a616a05": "LUNIVERSE_ROLE()", +"1a62046d": "showDrugStatus(string)", "1a620a3e": "AgriChainMasterContract()", "1a6253ed": "ownerTransferPHX(address,uint256)", +"1a628054": "pTokenMapping(address)", "1a629b00": "AddTokensToMember(address,uint256)", "1a62c928": "approveAllocation(address,address)", "1a62f6f7": "escrowReturn(address,uint256,uint256)", +"1a63985d": "unlockInfo(address)", "1a63aa4d": "prolong(uint256)", +"1a63b5d2": "play(string,string)", +"1a6465e0": "totalVotesOut()", +"1a6487ab": "popPerBlockCycleTwo()", "1a64937b": "cleanupAbandonedGame(address)", "1a64adae": "vestedTokens(address,uint256)", "1a65569b": "placeBid(uint256,uint256,uint256,uint256,bytes32)", +"1a65781c": "numberOfACOTokensCurrentlyNegotiated()", "1a65d3c2": "SnakeFarmer()", "1a65e283": "buyCountry(uint256)", +"1a666f93": "addMultiStakeWhitelist(address[])", +"1a667e23": "_lastStoreTime(uint256)", "1a668c42": "finishAirdrop()", +"1a66c8be": "_addToEffectiveDelegatedToValidator(uint256,uint256,uint256)", "1a67456e": "getNumberOfItemsByTypeAndOwner(string,address)", +"1a67a0a0": "joinStakingPoolAsRbPoolAccount(bytes32,address)", "1a67d6e5": "MainSaleClosed()", +"1a681c0d": "pay(address,uint256,address,string)", +"1a686502": "liquidity()", "1a68b1a1": "setRetirementManager(address)", "1a690752": "UDCC()", "1a695230": "transfer(address)", +"1a6973ef": "lockLiquidity(uint256,uint256,uint256)", "1a699085": "view64()", +"1a69dc5c": "lock(bytes32,uint256,uint256,address)", +"1a69e173": "setTaskSpecGasPriceCeil(bytes32,uint256)", "1a6a3c03": "GetEscrowOwner()", "1a6a57f4": "getInviters()", +"1a6a6e14": "createUser(address,bytes32,bytes32,bytes32)", +"1a6a9594": "viewValue()", +"1a6ac0dd": "getTokenPerEther()", +"1a6aeb46": "getUserHistoryList(address)", "1a6af7b7": "currTime()", "1a6b0e73": "addArts(address)", "1a6b13e2": "changeMinimumTakerProtocolFee(uint256)", +"1a6b33a6": "__Governable__init()", +"1a6b7ee1": "_setGovAddress(address)", "1a6becd6": "getAllDividends()", "1a6c0983": "getShipSell(uint32)", +"1a6c2c24": "initiateFlashLoan(address,address,uint256,uint256[],address[])", "1a6c6e38": "MagicStore(address)", +"1a6c72c9": "transferBurnship(address)", "1a6c9c0d": "withdrawStart(uint256[],uint256,uint256,uint256)", "1a6d7561": "getFundingInfoOfPhase(uint8)", "1a6dafa6": "getJackpotRoundEndTime()", +"1a6de94b": "ThirdRelease(uint256)", "1a6e1315": "pay_salary(uint256)", "1a6e2445": "changeRelease(uint256)", +"1a6e2df3": "InsuranceUpdate(bytes32,bytes32,uint32,uint32,uint8)", "1a6ea411": "MANHATTANPROXY5THAVE()", "1a6f1974": "disableNodeRegistration()", "1a6f56a0": "balancesLocked2Y(address)", "1a6f7be5": "voteNo(uint256)", +"1a6f9f1a": "oms()", "1a6fb342": "getTransferStatus()", "1a700013": "inWhiteList(address,address)", +"1a700268": "notifyRewardAmountWithoutUpdateTime(uint256)", "1a700a95": "QWHappy()", "1a701609": "HEAD()", +"1a703171": "addTokne(address)", "1a70388f": "shareToWei(uint256)", +"1a705180": "findFreeF1Referrer(address,uint8)", "1a70d015": "exchangesTokens()", +"1a713b22": "yourStakedToken(address)", "1a715bcf": "lauToken(address,address)", "1a71733c": "determineAllocation(address,address[],uint256[])", +"1a7199d7": "RatePlanCreated(address,string,bytes32)", "1a71d3db": "freezingBalanceNumberOf(address)", +"1a7220d9": "XCHFContractAddress()", +"1a7268af": "transferSingle(address,uint256,string)", +"1a72a824": "auditAddress(address,uint256,address)", +"1a72b00f": "onAdminTransfer(address,uint256)", "1a7303de": "eddToken()", +"1a732662": "getTokenExtensionHash(uint256)", "1a73293d": "updateWhitelist(address,uint256)", +"1a74856b": "depositCollateral(address,uint256,uint256)", "1a74d536": "hasExited(address,address)", "1a750945": "vote03YesCount()", "1a751b2c": "makeMonthlyInvest(uint256)", +"1a7540dc": "kingServant()", "1a7626e7": "minimumFee()", "1a76e30c": "BONUS_DAY2_DURATION()", +"1a77398f": "rewardPerToken1()", "1a776b3c": "reclaimSurplusEth(address)", +"1a777464": "verifyRefId(address,uint256)", "1a7777bb": "getMarketSpreadPremium(uint256)", +"1a77ee7b": "setUniswapFactory(address,address)", +"1a787321": "balanceOfKCRV()", "1a787915": "startConditions(bytes32)", +"1a788a02": "getPair(address)", +"1a78a275": "create(address,address[],uint256[],uint256[],uint256,bool)", "1a790a2c": "_setPowerPool(uint256)", "1a79464e": "setFeeBurner(address)", "1a799617": "revokeRound(uint256)", "1a79bbef": "addAddressToMaster(address)", "1a79c5de": "setTimeWindow(uint256,uint256)", +"1a7a4a5a": "upRoleBurner(address)", "1a7a98e2": "getDomain(uint256)", +"1a7aa876": "getValueWithOffset(uint256)", "1a7ae0ba": "updateCostUSD(uint256)", "1a7aed0e": "_checkMyAging(address)", +"1a7af379": "batchSetAddressFrozen(address[],bool[])", "1a7b11f5": "epoch_fund()", +"1a7b3c46": "changeGSGAddress(address)", "1a7b9fe7": "setCouponRatio(uint32)", "1a7c6eb0": "getHalvingBlocks()", "1a7c7105": "__load128(bytes)", +"1a7cade0": "houseFee(uint256)", "1a7cecb2": "recoverAddressFromCooperativeSettleSignature(uint256,address,uint256,address,uint256,bytes)", "1a7cf619": "round0StartTime()", "1a7e0c50": "totalBaseLareSoldInPreSale()", +"1a7e2010": "deposit(bytes3)", +"1a7e9d78": "callFromManager(address,bytes)", "1a7f8588": "IRE()", +"1a7fa237": "bannedDelegatorsUntil(address)", "1a7facff": "rcn()", "1a7fae47": "pubkeys2(uint256)", +"1a800d37": "Event(string,address,uint256,uint256)", "1a8012e4": "is_active()", "1a809b02": "unpauseRefund()", "1a81284b": "CCH_FGRE_1()", +"1a817763": "calcBonus(address)", "1a81a01f": "configContract(uint256,address[],uint256[],uint256[],uint256[],uint256[])", "1a81c3a2": "getUserContract(address,uint256)", "1a81e7b4": "getExtender()", +"1a81ea2a": "avgFactor_ethSpent(address)", +"1a820659": "GlobalUnlocked()", +"1a825558": "estimateLiquidate(uint256,uint256)", "1a82844c": "getERC721AmountPawn(uint256,address)", +"1a82c851": "calculateRedemptionValue(uint256)", "1a82eeb4": "ocpTokenContract()", "1a833d3f": "trancheNumerator()", "1a83690d": "Work()", +"1a839ba7": "hasPendingUnstakeRequests()", +"1a84121d": "decayDivisor()", "1a841b1b": "configureFromStorage()", "1a8432ea": "isUnLockedAccount(address)", "1a844205": "SaintCoinWorld()", +"1a84e311": "_cleanCache(address)", +"1a8528df": "transferIt(address)", +"1a853e9d": "getEarnedAmount(address)", +"1a8598a7": "allClaims(uint256)", "1a859db8": "rewardsAccounts(uint256)", "1a85bd57": "_find(uint256)", "1a85c6cb": "RandomNumber(uint8)", "1a85f4fb": "UrlHint(int256)", "1a85f7d2": "applySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1a860c3e": "setStakingWallet(address)", "1a860d91": "AddUser(string,address,uint256)", "1a861d26": "maxLimit()", "1a86430e": "calcTotalShareRewardFee(uint256)", +"1a864a1a": "weiLimits(address)", +"1a864d1d": "frozenTimingOf(address)", "1a86535a": "GetWhoSignedAVersion(string)", +"1a8678d9": "openLockTokenCollateralGenerateDebtAndProtectSAFE(address,address,address,address,bytes32,uint256,uint256,bool,address,address)", "1a86ac4f": "initialAddressSet()", +"1a86b550": "verify(address,bytes32,bytes)", "1a86d5b6": "sendToOtherBlockchain1(string,string)", "1a871a2c": "playerCharacter(uint256,uint8)", +"1a8812bd": "rewardsMap(uint256)", +"1a88a4e8": "TimelockMint(address,uint256)", "1a88bc66": "slot()", "1a88cc31": "getCommissions(uint256)", +"1a88df8a": "getAddressCreatorInvestPool()", "1a88f306": "transferFromContract(address,uint256)", "1a8932d9": "allocated2Year()", "1a8943dd": "overflowResistantFraction(uint256,uint256,uint256)", +"1a894a95": "getPeopleToRegister(address)", "1a895266": "unBlacklist(address)", "1a8a5de1": "citizensAmounts()", "1a8a85f3": "checksum(address)", +"1a8acc8b": "setUsers(uint256)", "1a8af7a8": "restartMint()", "1a8b1874": "endprivate()", +"1a8ba72f": "betsCount()", +"1a8bf881": "withdrawMEC(uint256)", "1a8c7243": "presale_finish()", "1a8dc392": "checkAddressTeamTwo(address)", +"1a8eb72b": "getEthBalanceInWei()", "1a8f8f3e": "MJCCToken()", "1a8fc985": "INITIAL_TOKENS_PER_ETHER()", +"1a8fd875": "_token_per_bnb()", +"1a8fe33c": "approve_349(address,uint256)", +"1a9020f0": "getBalanceWithdrawAddr()", "1a9069cf": "signDate(bytes32)", "1a90f0c4": "numTurnsToRevolve()", +"1a910b4e": "shadowsReceivedForEther(uint256)", +"1a91148b": "TBONUS_RATE()", "1a918bdd": "addTraps(uint256,bytes,uint256[])", +"1a91a0ab": "signerIndex(address)", +"1a91c57e": "PolicyCreated(address,address)", "1a92e6da": "Veegotoken(uint256,uint256)", "1a9360dd": "checkDate()", +"1a93625c": "send_ciphered_offer_user(uint256,uint256,uint256[2])", +"1a93b7dc": "getDollarCoinExchangeRate()", "1a93d1c3": "getGasLimit()", +"1a93ec95": "activate(uint32)", "1a93fa4b": "reorganizeSubUsers()", "1a9425c1": "verified(uint256)", +"1a948947": "orders(string)", "1a94d49b": "BASE_BET_ETHER()", "1a955061": "numToWei(uint256,uint256)", "1a95bc99": "GreatHarmon()", +"1a95c3ea": "wst()", +"1a95e881": "DeliveredPayment(bytes32,address,uint256)", +"1a95eaa0": "multiplierBalanceInETH(address)", "1a95f15f": "TICKET_PRICE()", +"1a966d70": "createVaultFor(address)", "1a968069": "multiSig(bytes32)", +"1a968375": "isSchainExist(bytes32)", +"1a96c519": "isValidId(uint256)", "1a974bb5": "KOCMOC()", +"1a975376": "grand_owner()", "1a97d1fa": "CLASSYToken()", +"1a98ac8d": "stopGameEvent(uint256,uint256,uint256)", "1a98d0de": "whitelistedParticipantsLength()", "1a991f0d": "approveSpenderDecimalAmount(address,uint256)", "1a9938aa": "activateAddress(address,bool)", +"1a994d37": "setUNIv2(address)", "1a994fd2": "addVideoGame(string,address,uint256)", "1a99bed2": "VestingSent(address,address,uint256,uint256,uint256)", "1a9a01fb": "removeGame()", "1a9a0426": "setDecimal(uint8)", +"1a9a79d4": "preincr(uint256)", "1a9aa710": "ownerAuctionCount(address)", "1a9aea0a": "lockTransfer()", "1a9b0b7c": "isWinner()", +"1a9b2603": "getDatosToken(uint256)", "1a9b26a2": "decode(bytes,uint256,uint256,uint256)", "1a9b70f2": "destroyBlockFunds(address)", "1a9be331": "getFastExtra()", "1a9bf9cf": "bountyTokens()", "1a9c4571": "listEggsIds()", +"1a9c595e": "combineChunks(bytes32[],uint256,uint256)", +"1a9c682f": "sendTokensByDifferentAmount(address,address[],uint256[],uint256)", "1a9caab9": "createGen0(uint256)", +"1a9d043f": "updateKeep3rOracle(address)", "1a9d64c8": "publicsale_address()", +"1a9dea28": "setDetails(string,string,string,string,string,string,string,string,string,string,uint256,uint256,bool,bool)", "1a9df17b": "OrderPaid(uint256,address,uint256,uint256)", "1a9df9d4": "getLowerSend()", +"1a9e2aa1": "makerConnect()", "1a9e3e18": "ownerBuyCut()", +"1a9e6aab": "checkRelease(address)", +"1a9ebeaa": "certifierContract()", "1a9f170d": "buyIcoToken1()", +"1a9f28eb": "setTokenBidPrice(uint256,uint256)", "1a9f66c4": "StrimTeam()", "1a9faa80": "setUpdateAddress(address)", "1aa022bf": "UacToken()", "1aa02d59": "set_fee(uint256)", "1aa05ab6": "testSellTwoTokens()", +"1aa0c8c6": "OMG_Ownable()", +"1aa15dec": "platformDirectory(string)", "1aa19567": "interruptLastRound()", +"1aa1ac0f": "secondPhaseSold()", "1aa20b68": "verify(address,uint256,uint8,bytes32,bytes32)", +"1aa21fba": "bulkTransfer(address,address[])", +"1aa24a19": "setOpiumAddress(address)", "1aa260c0": "withdrawAsSupporter(uint256)", "1aa2852f": "DToken(address)", +"1aa2e3bc": "gameTournament()", "1aa359ff": "newTokenContractAddress()", "1aa37733": "AudCoinToken()", "1aa3a008": "register()", "1aa43078": "minTime()", "1aa44efd": "createNamedDistrict(uint256,string,bool)", +"1aa47199": "approve_847(address,uint256)", "1aa49291": "Getter()", "1aa57ec5": "TokenLab(address,uint256,uint256)", "1aa58bd3": "isAetherClockAuction()", "1aa5b55c": "stageTwoStart()", "1aa5c70e": "getDAI(uint256)", +"1aa66049": "FreezeAddress(address)", +"1aa6adf7": "exchange(bytes32,uint256,bytes32,address)", "1aa6e29f": "hasOneYearWithdraw()", "1aa7655c": "START_TOKENS()", "1aa7e54c": "dungeonDifficulty()", +"1aa85060": "lockEndTimestamp()", "1aa859d0": "remTokenPairWhitelist(address,address)", "1aa86370": "updateXIPFSPublicKey(string)", +"1aa9fcd6": "liquidityProviderToken()", +"1aaa4a18": "setMinRateDifference(uint256)", +"1aaaaf76": "RemoveSuperAdmin(address)", +"1aab284a": "prepareToken(uint256)", "1aab7bb5": "setParamsPreSale(bool)", "1aab9a9f": "holderCount()", "1aabaffe": "WhaleToken()", @@ -15332,135 +27929,237 @@ "1aad5bc2": "_getRarity(uint256)", "1aad8b82": "calculatemortiesell(uint256)", "1aadadaa": "getRegistrantFund(address)", +"1aadb89f": "PauseSale()", +"1aadc768": "add(uint112,uint112)", "1aadcc34": "convertGreyGreen(uint8,uint8)", "1aadddea": "investorGiven()", "1aae3460": "investedAmountOf(address)", +"1aae38e8": "_UNUSED_QUOTE_()", +"1aaf086a": "unambiguityTest()", +"1aaf392f": "getContractStorage(address,bytes32)", "1aaf39ff": "check_dividend(address)", +"1aaf6401": "burnUnSoldTokens()", +"1aafac25": "sendAmountMin()", "1ab06ee5": "set(uint256,uint256)", "1ab08c61": "albosAddress()", +"1ab09fd5": "closeEntrance()", +"1ab0f930": "calRLFPriceETH()", +"1ab10037": "setLevelRate(uint256,uint256)", "1ab1025c": "tokensOutInMarket()", +"1ab11304": "startNegotiation(address,address,uint256)", "1ab12b10": "CurrentDevFee()", "1ab268d6": "getCompleteSetCostInAttotokens()", "1ab27060": "Unapproved(address,address)", "1ab2935c": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256,uint256)", +"1ab2cf21": "pcount()", "1ab30817": "gasLimitForOraclize()", +"1ab3414a": "dub(string)", "1ab3a6c8": "getParentsForTokenId(uint256)", "1ab3c515": "balanceOfLocked1Y(address)", "1ab3d055": "removeAdminWhitelist(address[])", "1ab46d4e": "referralBonusCalculate(uint256,uint256)", +"1ab4fc3a": "BlockBonds()", "1ab51aec": "buyEPU()", "1ab59612": "setAllowPriceLower(bool)", "1ab5c5b8": "adduser(address,uint256,uint256)", "1ab5d260": "transferTo()", +"1ab60e96": "getDeleteWhitelist(address)", +"1ab61205": "aYFI()", +"1ab62b68": "swap(uint8,uint8,uint256)", "1ab681e8": "withdrawEth(uint256,address,bytes32)", "1ab733a3": "getTotalProfits(address)", +"1ab76712": "executeProposal(uint256,uint256)", +"1ab7710d": "getProxyOwner()", "1ab7df5f": "addUserTokens(address,uint256)", +"1ab839db": "setHostRefundsPartRent(bytes32,uint256)", +"1ab8557b": "addGlobalAdmin(address)", "1ab86572": "calculateRoom(uint256,uint256,bool,uint256)", "1ab8bc44": "_setMilestoneTo(address,uint256,uint8)", "1ab8ff3b": "_finalization()", +"1ab9511a": "schemas(uint256)", "1ab961a1": "BSDB()", "1ab971ab": "setFee(uint32)", +"1ab9af71": "TokensAllocatedIntoHolding(address,uint256)", "1abb0ba9": "getTotalCurrentSaled()", "1abb10e8": "chipSpeed()", +"1abb26d3": "updateFlRatio(uint256)", "1abb7192": "YCCToken(uint256,string,uint8,string)", +"1abb964c": "InsufficientTokenBalance(address,uint256)", +"1abbfaf7": "setMinimumVoxBalance(uint256)", "1abca540": "Toptech()", +"1abcaa77": "venusSpeeds(address)", "1abd409d": "champsForSaleCount()", +"1abdf8cf": "LogEndOfWorld()", "1abe8385": "InvestmentToken()", "1abebea8": "LogSetAuthority(address)", +"1abf10f0": "ChinkAddress()", +"1abfe3d1": "allocatedETH(uint256)", +"1ac04cab": "distributeRewardsToVault(address)", +"1ac064b1": "buyPrice(address,address,uint256)", "1ac10d11": "testGreatherThanOrEqual()", "1ac10f1f": "setPixelRate(uint256)", "1ac14219": "testEns()", +"1ac15691": "approvalBalance(address,address)", "1ac25a81": "RegisterDrupal()", "1ac25e99": "extractBalanceProofSignature(address,uint32,uint192,bytes)", +"1ac2874b": "setMinSupply(uint256)", +"1ac2c6e1": "ChecksCount()", "1ac33b3d": "createTrack(bytes32)", +"1ac347f2": "getRegisteredAvailabilityVerifiers()", "1ac39336": "GelatoCoin()", +"1ac3cc02": "deer()", +"1ac3d7e2": "allowedStakingPools(address)", "1ac3ddeb": "withdrawFee(address)", "1ac46290": "setProviderInfo(uint256,string)", "1ac4754b": "redeemInternal(address,bool)", "1ac47963": "functionSeven()", +"1ac4db17": "bonus5()", +"1ac5596b": "setCollateralLiquidationFee(address,uint256)", "1ac589b4": "setJoiningFee(uint256)", "1ac58dd5": "kimsCreated()", "1ac5c96f": "test_4_someTest()", +"1ac601d4": "returnManagerETH(address,uint256)", "1ac61e8c": "testBlobCreate()", "1ac68a12": "HavvenGoldSupply()", "1ac7e1f9": "CollectedAllFees(address,uint256)", "1ac84690": "powerOf(address)", +"1ac89828": "_createTime()", +"1ac8989f": "GetPOZFee()", "1ac8a9b2": "teamlock()", "1ac8aa4e": "minimowea()", +"1ac8bcf1": "fundsToTokensUsePrice(uint256,uint256)", "1ac9180e": "tokenReinvest(uint256)", +"1ac926da": "KycApproved(address,address,bool)", "1ac96124": "numOfCommon()", "1ac975ed": "UcCoinPriceChanged(uint256,uint256)", +"1ac994ad": "drizzle()", "1ac9f70d": "multiplicate(address)", "1aca00fd": "variable(uint256)", "1aca120b": "updateAnimalSpecial(uint256,bool)", +"1aca5357": "userStatus(uint256,address)", "1acb2719": "getNextRequest(address,address)", "1acb7077": "setCentsPerToken(uint256)", +"1acbbef0": "NewPlayer(address[])", +"1acbd5fb": "fundLP(address)", +"1acbe719": "hotReserveTarget()", +"1acbe974": "newModel(uint256,uint256,uint256)", "1acbf6e0": "alfatokenFee()", "1acc26bc": "disableLimit()", "1acc478a": "getContentMetrics(address,address,bytes32)", "1acc57b8": "AGENCY_TOKEN_CAP()", +"1acc948c": "allowAccount(address)", +"1accc06a": "setCollateralDebtLimit(address,uint256)", "1acd8237": "LEK(string,string,uint256,uint8)", +"1acdd7f0": "maxRewardParameter()", "1ace02a3": "RaptorsvsWizards425()", +"1ace059f": "showLock(uint256)", +"1ace488c": "validatorSupporterCount(uint256)", "1ace4d05": "bigAmount()", "1ace88a4": "realWorldPlayerTokenForPlayerTokenId(uint32)", +"1acf21a5": "releaseTreasury()", +"1acf3860": "withdrawEpoch(uint256,uint256)", "1acf6485": "requestWithdrawalFromLimit(uint256,string)", "1acfd02a": "changeAdmin(address,address)", +"1ad01e20": "addSchain(address,uint256,bytes)", "1ad065f1": "prepare(uint256,address,address,uint256)", +"1ad0a1ab": "VoteStarted()", +"1ad0b822": "lpt2uu(address,uint256)", "1ad11fd1": "TrieToken()", +"1ad27248": "createCar(address)", "1ad2ad1a": "stopPresale()", +"1ad32562": "approvedOBOs(address)", +"1ad36d0a": "reducedRatioTest(uint256,uint256,uint256)", +"1ad3fba6": "getDividend()", +"1ad47352": "general_pool()", +"1ad48bce": "Supplies()", "1ad50586": "safePower(uint256,uint256)", "1ad509f0": "MUIcoin()", +"1ad5a171": "transition(bytes32,uint256)", "1ad6037f": "LEXInContract()", "1ad607da": "_addUserCity(address,uint256)", "1ad614c3": "setRequireAuthorisation(bool)", "1ad66d21": "earlyPurchasesLoaded()", +"1ad6de6b": "Feeding(uint256)", "1ad781b4": "PennyGrab()", +"1ad7be82": "test5()", +"1ad7c193": "addLiquidityToUniswapDFGxWETHPair()", "1ad7c199": "callVote()", +"1ad86bf2": "updateOfficerVerifiedStatus()", "1ad874b4": "presaleOn()", +"1ad8b03b": "protocolFees()", +"1ad8e636": "swapThenBurn(bytes,uint256,uint256,uint8)", "1ad8f65b": "distribute_for_founders()", "1ad8fde6": "changeSymbol(bytes32)", "1ad95744": "START_ICO()", +"1ad98130": "_getCToken()", "1ad9f190": "getUserHotGoldBalance(string)", +"1ada17ec": "getAddressToId(uint256)", "1ada70a8": "lockupDuration()", "1adadda8": "claimLockedTokens(address)", "1adb4842": "setLockup_jishis(address,uint256,uint256)", "1adb631b": "distributePuppyCoinMedium(address[])", +"1adb69cc": "unfreeze_date()", "1adbdfab": "SimpleApproveTransfer(address)", "1adc36b9": "doesUserOwnCeleb(address,uint256)", "1add4f5a": "tranferMoneyToName(bytes32)", "1add5486": "Multiownable()", "1add6bcf": "getDoubleKeccak256(uint256)", "1adda83a": "calculateTokens(address,uint256,uint256)", +"1ade6c01": "pumpIt(uint256,uint256)", +"1adeb6e1": "batchBalanceOf(address,address[])", +"1adf0e79": "christmaseve()", "1adf2bec": "CancelOrder()", "1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", "1adf42fb": "setPreICO(bool)", "1adf692f": "_changeSquarePrice(uint8,uint256)", +"1adf7bcd": "createBucket(bytes32,uint256,bool)", +"1ae0433c": "getCommitRevealAddress()", "1ae0a693": "SetApplicant(bytes32[])", "1ae0b4d0": "master5invest()", +"1ae0b93a": "f16(bytes32)", "1ae0c787": "getControlInfoMaxTotalImbalanceList()", +"1ae14c48": "decimalLengthTest(uint256)", +"1ae18db3": "dropERC20(address,uint256,address,address,address,address,address,address,address,address)", "1ae2379c": "excess()", "1ae32b82": "disallowReceiver(address)", +"1ae375d9": "Report(uint256,string,uint256)", "1ae3a94a": "devFeeRate()", +"1ae3b3db": "buyTokenWithUSDC(uint256)", +"1ae3bc16": "SAVINGS_DYDX_ADDRESS()", "1ae3d8d0": "protectedBalance(address,address)", +"1ae41272": "Create(uint256,address,uint8,uint8,uint8,uint8,uint8,uint64,string)", "1ae460e5": "isInPool()", +"1ae4818f": "validatorShareFactory()", "1ae4dfb7": "getcardPrice(uint256)", +"1ae4e632": "stakingAddressToZero()", +"1ae51ffd": "getAllCSPVaults()", +"1ae57ce3": "deleteCandidate(uint256,address)", +"1ae5955c": "NotAllowedTokensReceived(uint256)", "1ae638f7": "times6()", "1ae6b6ee": "cancelAuctionWhenPaused(address,uint256)", "1ae6c09c": "showMyAnimalBalance()", "1ae6d375": "AirSwapToken(address,address,uint256)", +"1ae6ddec": "enableOpenTransfer()", +"1ae73032": "getTradingAmountAndFee(bytes32,uint256,bytes32)", "1ae7341f": "OneledgerToken()", "1ae743ad": "withdraw_token_and_eth()", "1ae7b7fb": "jackpotSmall()", "1ae7b8e1": "newOffer(address,string)", "1ae7ef0a": "QISHENG(uint256,string,string)", "1ae8494e": "purchaseTopCompany(bytes32,bool)", +"1ae8605d": "setFlushAddr(address)", "1ae879e8": "walletOwner()", "1ae8ab81": "setNickname(bytes32)", "1ae8fc87": "addContract(address,address,uint256,string)", +"1ae947f7": "degen()", +"1ae9655b": "mealIndexToApproved(uint256)", "1ae97bd9": "updateName(bytes32)", +"1ae9c43a": "P1_SHARE_PERCENTAGE()", "1ae9fe6a": "cutOffBidID()", +"1aea0f55": "setSwapAdd(address)", "1aea4d0f": "setMaxSend(uint256)", "1aea558a": "auditReport(address,uint256,uint256)", +"1aeaa056": "INSTANT_SLOT()", "1aeb10a6": "testApprove()", "1aebb44e": "firstBlockAllowedToMonitor(uint256,uint256,address,address,address,address)", "1aebcb89": "getProfitPerShare()", @@ -15468,102 +28167,189 @@ "1aeca515": "getTierIndex()", "1aece0db": "PRE_SALE_END_TIME()", "1aed001e": "_miningOneSelf(address)", +"1aed2398": "getSharePerBurned()", +"1aed6553": "bonusEndBlock()", "1aed8e1e": "GigERC20(uint256,string,uint8,string,bool,bool)", "1aedefda": "includes(address)", "1aedf542": "ercOwnerClaim()", +"1aee02a6": "SendGift(address,address,uint32)", +"1aee3ddc": "AllocateToken(address,uint256)", "1aee3f91": "PRESALE_LIMIT()", +"1aee8fa8": "totalIcoDist()", +"1aeea34e": "twoPercentWallet()", "1aef8058": "DECIMAL_MULTIPLIER()", "1aefce3b": "ratioVote(bool,uint8)", +"1aefea80": "cooAddr()", +"1af0e0f1": "_onBoardPrf()", +"1af1094b": "newPUMPSexchange(address)", "1af11767": "CauldronsMinigamePresale(uint32,address)", +"1af13485": "distributeDividend(uint128)", +"1af17a83": "SetLock(address,uint256,uint256)", +"1af1a768": "activateAdmin(address)", "1af217ab": "maxTokenPurchase(address)", +"1af218fd": "dbase()", "1af26fc2": "isJobExpired(bytes)", +"1af2a2bc": "forward(bytes,address,bytes)", +"1af2a6a8": "getIdSupplyFromVoucher(uint256)", "1af2c9fd": "numberOfInvestors()", "1af31d7b": "GetPoolEntranceFee(string)", "1af32223": "get_owner(bytes32)", "1af36a78": "level1(address,bytes32,uint256)", "1af39907": "_inMoney(uint256,address)", +"1af399d4": "earnedFat(address)", +"1af3a620": "tkn_amount(address)", +"1af4221b": "_cullIncrement()", "1af476a6": "setEggTotal(uint8,uint256)", "1af47cc7": "addSellTokensRequest(string,uint256,uint256)", "1af48c85": "checkCertificates(uint256)", +"1af49a3c": "beneficiary4()", +"1af4c179": "updateFeePerOrder(uint256)", +"1af4cc3a": "UsernameUpdated(address,string)", "1af50c5e": "setDisbursementAmount(uint256)", "1af5163f": "TokenBurned(address,uint256)", "1af5205c": "period3Numerator()", "1af526b0": "getSell()", +"1af56b0b": "startUniswapBurn()", +"1af56b54": "proxyContractForMetatxsAddress()", +"1af58572": "getValidRef(address,uint256)", "1af5dd41": "balanceOfComision(address)", +"1af60f72": "RemoveValidator(address)", "1af62808": "getLicensePrice()", +"1af639c8": "setVoxHolderDiscount(uint256)", +"1af645bc": "firstPartyActiveBets(address,uint256)", +"1af680bf": "isUnlockedReserved()", "1af6b60f": "ScamSealToken()", "1af716ba": "transferFrom(address,address,uint256,string)", +"1af744cb": "getWithdrawCurveAmount(address,uint256,uint256)", "1af77842": "setE93ContractAddress(address)", +"1af82655": "getUnLockDay(uint256)", "1af82fbf": "viewDividendCooldown()", "1af855f8": "Funding(address,uint256)", +"1af86866": "getRecordState(bytes32)", "1af88bc1": "GetPatientFromAddress(address)", "1af8c18a": "InitBalanceFrom961e593b36920a767dad75f9fda07723231d9b77(address,uint256)", "1af97fb7": "getBabyGen(uint16,uint16)", "1afa6542": "AirCoin(uint256,string,uint8,string)", +"1afa74e5": "vote(address,address)", +"1afa8e3b": "investor2()", "1afaa8bf": "crowdfundPercentOfTotal()", +"1afb0220": "minRewardQualifyBal()", +"1afb0ae5": "Canceled()", +"1afbb64c": "minPriceTime()", +"1afbb9b9": "seniorInterestRate()", +"1afc35e8": "defineCurrencies(bytes32[],uint256[],uint256)", "1afc540d": "set_saleAddress(address)", +"1afc8674": "ReverseSplitTokens(uint256)", "1afcc95b": "getCCH_edit_21()", "1afccfa5": "Proposal(address,address,address,bytes,bool)", "1afd08a2": "setConfirmationTime(uint256,uint256)", +"1afd15be": "executeActionDirect(bytes[])", +"1afd64e2": "comprarTokens(uint256)", "1afd96dc": "withdrawForThreeYear()", +"1afe22a6": "get_reward()", "1afe3e10": "getCurrentPhaseDivisor()", "1afe56aa": "markRead(uint256)", +"1afe839c": "addAddressToFrozenlist(address)", +"1afecb97": "totalClaimedTokens(address)", +"1afed875": "createOffer(uint256,uint256)", "1aff30dd": "getGameStats()", "1affa814": "getProviderPriv(uint256)", +"1affbd97": "removeInternalTokenMeta(bytes32,uint16)", "1affcd7e": "createCollectible(uint256,address,uint256,uint256)", +"1b005769": "UpdateKLANPrice(uint256)", "1b005a38": "authorizerOne()", "1b00fe51": "testHypothesis()", "1b011bd9": "test_insert_findWithHint()", +"1b019bb3": "getBaseFeeBP()", +"1b0265b2": "sum_paid_players()", "1b027b44": "getBuyPosition(bytes32,uint256)", +"1b02b6e0": "pool2percentage()", +"1b02f845": "startEmissions()", "1b03316f": "getSecond()", +"1b038bc1": "excludeSendersAddresses(address)", "1b044be7": "setFundScheme(uint256,uint256)", "1b04803e": "contractModifierAddress()", +"1b04838e": "OwnerVegetableFieldSize(address,uint256)", "1b04a435": "durationSecondsIco()", +"1b04da1f": "addressToBattleToFigterIdToBetPower(address,uint256,uint256)", +"1b0522e8": "getValues(bytes32[])", +"1b054706": "whitelistaddressForClaim(address[],uint256[])", "1b0569b2": "IPToken()", "1b059c0a": "JoinRound()", "1b05aeb5": "WinMatrix()", "1b05c594": "newGame(uint256,uint256)", "1b05ea8c": "CheckPrepare()", "1b06128b": "burnLeftoverTokens(uint8)", +"1b06c773": "getOrders(uint256,uint256,bool)", "1b06ec3b": "getAllTransactionIdsByEntityId(address)", "1b0710b5": "TOZToken()", +"1b072541": "wbtcFutureProfit()", "1b073c67": "XGEToken()", +"1b074e1d": "totalContextBalance(bytes32)", "1b0762bb": "remunerationBalance()", +"1b076c1f": "testOwnerCanRefuseInvestment()", "1b076edc": "dataSource()", +"1b077ff1": "contributionByAddress(address)", "1b07fcc1": "linkImpact(string)", "1b082009": "getCrowdsaleBalance()", +"1b08345a": "userGameId(address)", "1b088f70": "computeLeaf(uint256)", "1b08d96f": "ret()", +"1b091269": "onWithdraw(address,uint256,uint256)", "1b0a102c": "getPrediction(uint256,uint256)", "1b0a5d4e": "totalPartnerSupply()", "1b0a68f2": "decreaseMintApproval(address,uint256)", +"1b0b0a03": "wETHProfits()", "1b0b906b": "getMyPlayedAmount(address)", "1b0ba14d": "InvestmentFailed()", +"1b0c0476": "lastEpochStaked(address)", +"1b0c27da": "results(uint256)", "1b0c72dc": "isRecipientActive(address,address)", +"1b0ca26a": "withdrawBalance_fixed()", "1b0cb61f": "_whitelistAddress(address)", "1b0d320f": "FriendsCoin()", +"1b0d65a2": "getTaxTierSmallFee()", +"1b0d8aab": "setPid(uint256)", "1b0db7fe": "getAllValuesSum(uint256[])", "1b0dbdaf": "manualReserve(address,uint256)", +"1b0dbf72": "quit(uint256,address)", "1b0dc452": "isAnOwner(address)", +"1b0de0c6": "bonusAmountCaps(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)", +"1b0fb35f": "setExtraFunds(address,uint256,address,uint256,address,uint256)", "1b0fc106": "acceptChallenge(uint256)", "1b107f7b": "storeUnlockData(uint256,address,address,uint256,bytes32)", "1b112541": "getPTicketSumByRound(uint256,address)", "1b118984": "TOKEN_ICO1_LIMIT()", "1b12b60f": "canBuyTokens(uint256)", +"1b12ceff": "RequestRedemption(address,uint256,uint256)", "1b130063": "sendPrize(address,uint256,string)", "1b131bbd": "_split(uint256)", +"1b1346cd": "setMaxDailyJackpot(uint256)", "1b136c6f": "getPlayerRounds(uint256)", "1b13756a": "getFirstBorrowAgreement(address,address)", +"1b142820": "createUnbackedDebt(address,address,uint256)", +"1b14323c": "setLookBytes(uint256,bytes1[],uint8[])", +"1b14617e": "getDfr()", +"1b14a634": "pendingOsfi(uint256,address)", +"1b14c4a4": "isRandomSeedSet()", "1b14cd05": "verifyLockSignature(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes)", +"1b15982a": "exercise(address)", +"1b15b579": "getMdxBlockReward(uint256)", +"1b15da2a": "Submission(bytes32)", "1b1665ca": "updateLimitPerMonth(bytes32,uint256)", +"1b16802c": "settle(address,bytes32)", "1b1686b6": "currentEthInvested()", +"1b174647": "REFERRAL_WALLET()", "1b17595f": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32)", +"1b17c585": "resetEvilPool(uint256)", +"1b17f46b": "getFullSharePrice()", +"1b17f6a2": "evt_closeRoomSucceeded(address,uint256)", "1b181e58": "getOverTokens()", "1b189efb": "EURsToken()", "1b18f952": "test01()", @@ -15571,246 +28357,472 @@ "1b195a7c": "buildAddition(uint256)", "1b19f6a3": "removeReferrer(bytes32)", "1b1a7a58": "multiSendToken()", +"1b1ab2f8": "approve_48(address,uint256)", +"1b1b18f5": "removeTokens(uint256,bool)", "1b1b6069": "initEachPUST()", +"1b1b6123": "getUniswapSellPrice()", "1b1c15d5": "tokensForInvestors()", +"1b1c4f23": "curveSwap(address)", "1b1c6acf": "getUintField3()", "1b1ccc47": "getDSTName()", +"1b1cd4ff": "investor(address)", +"1b1d5b27": "randomness(uint256)", "1b1d6af8": "_PLUTOToken()", "1b1d95ff": "getPow(uint256)", "1b1da1af": "updateSharePrice(uint256,uint256)", +"1b1dd2c8": "sar_zero(uint256)", "1b1e5d5d": "rejectMany(address[])", "1b1ef88d": "authorizedByUser(address,address)", +"1b1f05c2": "recordMarketCreatorFees(uint256,address,bytes32)", +"1b1f1852": "buyOnUniswap(address)", "1b1f2fb8": "preTGE()", +"1b1f93f8": "yourZUSEBalance(address)", "1b1fe68a": "SOLO_MARGIN()", +"1b20087c": "countInRound()", "1b203b9d": "checkAndCloseRound(bool)", "1b2051f6": "tempTokensPeriodOf(address)", +"1b20768d": "owner_limit()", "1b208786": "delegatedTransfer(address,address,uint256,uint256)", +"1b20d9cb": "allocatedTokens(address)", +"1b211009": "stakereward(address)", +"1b22080c": "_releasableAmount()", "1b2212f5": "forbidDirectDebit()", +"1b226991": "buyVirtualGold(address)", +"1b22c63a": "getfundingGoalReached()", +"1b22f7db": "wineryOperationEndorsements(bytes32,uint256)", +"1b231a87": "claimablePremiums(address)", +"1b2366b5": "validateUserExists(address)", "1b23cfd2": "AceguyToken()", +"1b2414f0": "getPartial(uint256,uint256,uint256)", +"1b241601": "unsafeSubtractShouldUnderflow()", +"1b24303f": "acceptOfferRequest(uint256[6],address[2],uint8[2],bytes32[4])", +"1b250f40": "setAntRate(uint8)", +"1b252781": "currentCollected(uint256)", +"1b255e18": "estimateTax(uint256)", +"1b2574e9": "lastSuccessfulPricePerPowerForTournamentAddress(address)", +"1b257922": "getValuePlus(uint256)", "1b258d50": "withdraw(bytes32,address)", +"1b25b65f": "kiss(address[])", "1b25d0e6": "POST_ICO()", +"1b26d753": "removePoolFromWhitelist(address)", "1b26fa6a": "priceStep1()", "1b27274b": "testPure()", +"1b27551c": "pheezez()", "1b27c873": "advisorsTokensFirstReleaseTime()", "1b27c8f2": "takeBountyTokens()", "1b27ca21": "MonthsProfit()", "1b27e705": "_forwardFunds(uint256)", +"1b2812d9": "citizenmapping(address)", "1b28591c": "escapeFunds(address,uint256)", "1b28985e": "MotorToken()", +"1b296642": "LPWithdrawalLocked(address)", "1b29d70a": "weiRefund()", +"1b2a19d7": "T1_ADDRESS()", "1b2a8715": "notIn(bytes32[],bytes32)", +"1b2ac107": "createRandomPlanet(string,uint32,uint32,uint32,address)", "1b2ace9d": "lockedProvider(address)", "1b2ae899": "removeModule(uint8,uint8)", "1b2ae964": "BuyPriceChanged(uint256)", +"1b2b4754": "requiredLendSell(address,address,bytes32[3],bytes,bytes,uint256[3])", +"1b2bd2ab": "SetGroupValue(address,uint256)", "1b2bd803": "issueAtIco(address,uint256,uint256)", "1b2be5f8": "transferredAtSupplyValue(address)", "1b2bf378": "BLM()", +"1b2c9b25": "transferFlashLoanProtocolFeeInternal(address,uint256)", "1b2d26e9": "OwOWorldToken()", "1b2d515f": "setA(bytes32)", "1b2d93a0": "load(address,bool,address,address,address,address,address)", "1b2dba8c": "setCertifierId(address,string)", "1b2e4002": "LIZAToken(string,string,uint8,uint256)", +"1b2e451c": "cleanSRC()", +"1b2ef1ca": "mint(uint256,uint256)", +"1b2f0a9c": "price0CumulativeLastUNC()", "1b2f1109": "sntController()", +"1b2fe38b": "bonusMultiplierEndBlock()", "1b302a16": "tokenUnpause()", +"1b315026": "GetUNIPairFunction(address)", +"1b315b23": "distributeToken(address,address[],uint256[],uint64)", "1b31abda": "getGameDetails(uint256)", "1b31c5c2": "RESERVED_TOKENS_OPERATIONAL_EXPENSES()", +"1b31f54a": "CONTRACT_FORMULA()", +"1b3249a2": "pow10(uint256)", +"1b324fbe": "exchangeInfo(uint256)", "1b328100": "valueToBeSent()", "1b33157a": "buyTickets(uint256[],uint256,bytes)", +"1b338710": "totals(uint256)", "1b338905": "getActualDates()", "1b33a497": "tranferToReserve()", "1b33d412": "offer(uint256,address,uint256,address,uint256)", "1b346a63": "testMoveWithTrust()", "1b34737f": "setSCoinContractAddress(address,address)", "1b347aae": "retrieveToken()", +"1b349bdc": "exeTwo(uint256,address,uint256)", +"1b34bb2c": "deprecatedDeleteWhitelist(address)", +"1b34ffb4": "lastEarningsDistribution()", +"1b351e69": "setBurnDivisor(uint256,uint32)", "1b354a30": "kscIncreaseApproval(address,uint256,string)", +"1b355427": "_pairAddress()", "1b357750": "setLegacyNFTAddress(address)", +"1b359373": "Farm(address,uint256)", +"1b35b640": "votingDelayInBlocks()", "1b35f56f": "getCurrentlyRunningPhase()", "1b360912": "transferTokensFromPartnersAddress(address,uint256)", +"1b3646d0": "usersActiveE1Levels(address,uint8)", +"1b367078": "rollPaymentMakePayment(uint256,bool)", "1b369fad": "removeBlockListed(address)", "1b36cbfc": "EtheremonDataEvent(address)", "1b370abb": "getPreviousNode(bytes)", +"1b371059": "projectCommission()", +"1b3792f8": "lpRewardsPaid()", +"1b37c3d8": "myAccount(address)", "1b37cb3e": "VOCOToken()", +"1b37e762": "getGasClaimAmount()", +"1b380cb7": "fterminated()", "1b3821e8": "addSentMessage(address,address,uint256)", "1b385f34": "buyOmegaEgg()", +"1b386b42": "getFeeBalance(address[])", "1b3878f5": "addToEmployerTotalPaid(address,address,uint256)", +"1b388497": "buyersReceived(address)", +"1b38b912": "YourStakingPeriod(address)", "1b391d09": "benefeciar()", "1b393b9a": "emergencyRelease()", "1b394dce": "_chkBuyerLmts(address,uint256)", "1b397d79": "OurBank(address,address)", +"1b39ab6a": "xdai_token()", +"1b39c07b": "Winner2(address,uint256,uint256,uint256)", +"1b39db61": "addOneUnit(int256)", "1b39f3d7": "timeset()", +"1b3a59cf": "ensureERC777TokenExists(address,uint8)", "1b3a8e6f": "directionCount(int256,int256,int256,int256)", "1b3a91ac": "addTiers(uint16,uint256[],uint256[])", "1b3aaf06": "setRspTokenAddress(address)", "1b3b5742": "PayJackpot()", +"1b3b8cd5": "tokenBcount()", +"1b3b8d8b": "getPenaltyFactorForEarlyUnlockers(uint256,address)", +"1b3c16ea": "setupBasePool(address)", +"1b3c355d": "disableAllChecks()", "1b3c72aa": "getAddressLevel()", +"1b3c96b4": "load(address,uint256)", "1b3ca096": "MarketBase()", +"1b3ce913": "acceptBidForSigil(uint16,uint256)", "1b3d36de": "calculateToken(uint256)", +"1b3d4aa4": "basepercent3()", +"1b3d7edb": "Transfer(address,address,address,uint256,uint256)", "1b3d803f": "TokenRegulatorService()", +"1b3ddd7f": "getSingleNumericData(uint256,bytes32)", "1b3e100d": "PRE_ICO_PRICE()", +"1b3e186b": "addSsToWithdraw(address)", "1b3e2002": "giftRock(uint256,address)", +"1b3e2124": "transferFromAndCall(address,uint256)", +"1b3e460e": "marketTemplate()", "1b3e704a": "supplyICO(address)", +"1b3e870a": "removeMigrator(address)", "1b3e8cda": "isEthPayable()", "1b3ed722": "multiplier()", "1b3efd15": "claimrefund(address)", "1b3f2fd3": "checkAvailableTokens(address)", +"1b3f4842": "addMoney()", "1b3f8a67": "addToSyncList(address)", "1b3fddb8": "PRESALE_BONUS()", "1b3ff96f": "getForecastCount(uint256,uint256,bool)", +"1b401f65": "unregisteringNode(address)", "1b4032f5": "lastBlock_f7Hash_uint256()", +"1b40dbad": "depositSKlay(uint256)", "1b40ee88": "sellArtwork(uint32)", +"1b40f083": "podeNft()", +"1b40fe89": "allTransfer()", "1b411fc8": "createRound()", +"1b41279d": "yieldFarmStakeAll(uint256)", "1b413d27": "getLuck()", "1b414708": "hasDisclosureAgreement(uint256)", +"1b4153f0": "address2key(address)", "1b418207": "toUint64Throw()", "1b41c096": "setStartsAtUTC(uint256)", "1b41c134": "UsernameDoesNotMatch(bytes32,bytes32)", "1b426d8d": "LOG_ProofFailure(bytes32,address)", "1b42b7ab": "decreaseSalesBalance(address,uint256)", +"1b42dee2": "EventAddCoin(uint256,uint256)", +"1b42df33": "bPrice()", +"1b42e5f3": "rewardAdded(address)", "1b42f904": "LogFreezerAddition(address,uint256)", "1b437d0c": "compareLastCalldata(bytes)", +"1b444683": "mintBountyTokens(address)", "1b44a5ef": "handleSingleItem(address,uint256,uint256,uint256,uint256)", "1b44f449": "Chain3()", +"1b455d26": "changeExternalWallet(address)", +"1b45b2e6": "DeleteTokens(address,uint256)", "1b45c301": "assetManager(bytes32)", +"1b461153": "excludeHand(address)", +"1b4613cb": "hasVoted(bytes32)", "1b4646bf": "setReferalsMinInvestLimit(uint256)", "1b464764": "withdrawAdvisor(address,uint256)", +"1b468041": "getExistingOrders5(uint8,address,uint256)", "1b468ed8": "addHandlerToWhitelist(address)", +"1b4724df": "setCachedSynthDebt(bytes32,uint256)", "1b476945": "devTokensIco1()", "1b477633": "determinePlayer(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", "1b47dbbe": "IdentityVerifier(address)", "1b482452": "getWinnerUrl(uint256)", +"1b48a3a8": "init(uint256,uint256,uint256,uint256,address,address)", +"1b492711": "ytbIdToAddress(uint256)", +"1b493189": "TokenFrozen(address,uint256)", "1b49d82b": "joinClub(address)", +"1b4a0f0b": "mintReservedYear1(uint256)", "1b4a2001": "minReserve()", +"1b4a6c41": "addBurnner(address)", "1b4a93aa": "SetupFuseaNetwork(string,string,uint256,uint256,uint256,address,address)", +"1b4a9707": "setTeamLevReward(address,uint256)", +"1b4b0b49": "SubmitRedeem(address,uint256)", "1b4b1cfa": "isICOPeriod()", "1b4b546f": "ChooseA()", "1b4c19ac": "startSale(uint256,uint256,uint256,address,uint256,uint256)", "1b4c5a10": "SupportFund()", "1b4c84d2": "isTradeable()", +"1b4ca662": "reserveIssued()", "1b4cd2de": "ICO_START_TIME()", "1b4cd4ef": "depositPAXTR(uint256)", "1b4d02c2": "cryptoAgent()", "1b4d18c1": "rateOfSpecificTranche(uint256)", +"1b4d2984": "_1_shouldBeGreaterThan_neg_1()", +"1b4d7677": "error_count()", +"1b4d87a5": "checkRegNext()", "1b4e1c4d": "increaseProductAvailability(uint256,uint256)", +"1b4e7bd2": "userList(address)", "1b4f4285": "notifyNewAccount(address,address)", "1b4f6c46": "acceptOwnership(bytes32)", "1b4fa639": "ownerFinishContract()", "1b4fa6ab": "getDefaultStackCheck()", "1b503a09": "LogRmUser(address)", "1b50ad09": "updateDuration(uint256)", +"1b50c41f": "GameOver(address,uint256,uint256)", "1b5171f0": "BountyKilled(uint256,address)", "1b517663": "mintPriceOffset()", +"1b518563": "requireflag()", +"1b51e940": "addAsset(address,bool,uint256)", "1b520b68": "lethalBonusAtHitsLead(uint256)", +"1b5212dc": "getChildBlockNumberFromAge(uint256)", "1b52abde": "redeemRestore(address,uint256)", +"1b52b9de": "withdrawAllMoney()", "1b531d4b": "settings_added()", +"1b5338c0": "withdrawHT()", "1b538bcc": "getCurrentVotes(uint256)", "1b542aa7": "Swob()", +"1b545a17": "getUserStakeCount(address)", +"1b54cc88": "vault(address,address)", +"1b558799": "darkv2_approvals_burn(address)", "1b55ba3a": "Start()", "1b55c148": "BidPlaced(bytes32,uint8,address,uint256,bool,int32)", +"1b55d19e": "boost(uint256)", "1b55ec45": "getTokenToBurn()", "1b55fe4e": "setFourthAddressBalance(address)", "1b561fe7": "getSeniorContract()", +"1b562a0b": "setProtocolRate(uint256)", +"1b562aa5": "description(address)", "1b5631de": "ManualChangeStartDate(uint256,uint256)", +"1b56bbf9": "updatePair(address)", +"1b56ea7e": "bonusPercentRoudOne()", "1b5710ed": "_deleteAllPackedRevisionTimestamps(bytes32)", +"1b5757f2": "claimReserved(address,uint256)", "1b580620": "setOwner1(address)", +"1b581b48": "getActiveCollateralization()", +"1b584d6c": "getLatestLiquidityChangedSnapshots()", +"1b587912": "setZapperAddress(address)", +"1b58ac4a": "removeBalPair(uint256)", "1b58c88f": "restoreOwner(address)", "1b58c943": "getNBallots()", +"1b590e85": "removeEnlisted(address)", +"1b59e345": "upgradeV1Token(uint256,address,bool,address,uint256,uint256,bool,address[])", "1b5a8da6": "giveEthBankrollAddress()", "1b5ac4b5": "abs(int256)", "1b5ae2f7": "day0x1(address,address)", +"1b5b0f01": "potatoes()", +"1b5b1b04": "setExceptions(address)", +"1b5b2776": "getIssuedKinds(address)", +"1b5b78c7": "_maxCapETH()", +"1b5be0b1": "findFreeM4Referrer(address,uint8)", "1b5c16bf": "setTargetRepMarketCapInAttoeth(uint256)", +"1b5c6ded": "memberRolesInitiate(address,address)", +"1b5c763e": "setReserveFundDepositAddress(address)", "1b5c9ae3": "get_etc_balance(address)", +"1b5d145d": "APE()", "1b5df453": "addUserWhoSell(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "1b5e42f5": "amountOfUnitsOutsideAdminWallet()", "1b5e75be": "evalParams(bytes32,address,address,bytes32,uint256[])", +"1b5e8b93": "check1()", "1b5ee6ae": "mintToken(int256,address,uint256)", "1b5f03a6": "getRoute(string)", +"1b5f58c8": "erc20Wrapper()", "1b5f6cea": "P3DtoTokens_(uint256)", +"1b602ec4": "nodeTryDelete(address)", +"1b605b86": "getVotesCount()", "1b61a179": "mulbonus()", +"1b61a60b": "currentFRTStaked(uint256,address)", "1b61f340": "finishADrop()", +"1b622720": "toggleBlock()", +"1b6258aa": "addTransferBurnExceptAddress(address)", "1b6282e3": "issuerDelegate()", +"1b629aad": "initialize(address,address,address,uint256,address,uint256,address,address,address)", +"1b629efc": "addi6()", +"1b633c53": "authorize(bytes32,string,uint256)", +"1b63a683": "butts(address)", "1b64b172": "core(uint256,address)", +"1b64ca1b": "numberofWeeksLP()", "1b65144d": "burnTokensForSale()", "1b6527b4": "GetAssignedAddress(uint256)", "1b655054": "dataAddress()", "1b660f15": "EthIdentity(bytes32)", "1b66303d": "request(bytes32,uint256,uint8)", +"1b665c13": "GetMyMoney(address,uint256,uint256)", "1b66cb00": "setTargetToken(address)", +"1b670561": "betaDelegatedTransferBatch(bytes32[],bytes32[],uint8[],address[],uint256[],uint256[],uint256[],uint256[])", "1b672154": "setMEAAttributes(uint256,uint256)", "1b677b08": "total_snt_claimed()", +"1b679e39": "getFamerVoteByFamer(uint256)", "1b67ab2b": "StreamNetworkToken()", +"1b67d229": "rewardHalvingPercent()", "1b68039c": "bitcoinblack()", +"1b681a28": "lastWithdrawnRound(address)", "1b688565": "PUBLIC_RESERVED_PERSENTAGE()", +"1b689c0b": "tokenIdToProjectId(uint256)", +"1b68adff": "userDividendsWei(address)", +"1b68d10d": "listCount()", "1b697bb2": "setBuyerAddress(address)", +"1b698420": "OnBuy(uint256)", +"1b69dc5f": "tokenConfigs(address)", +"1b6a875e": "B2(bytes)", "1b6aa580": "developer_new_address_for_funds(address)", "1b6ad60a": "transferFromWithReserving(address,address,uint256)", "1b6aed05": "grant_token_from_offchain(address,uint256,string)", +"1b6b3cbe": "SetContributionPool(uint256,address)", "1b6b405c": "UnableToAcceptPayment(address,bytes8,uint256)", "1b6b6d23": "LINK()", +"1b6b7513": "getProposalNoAll(uint256)", "1b6b8656": "setBureau(address,address,address)", "1b6bb739": "getThreeLastInvestors()", "1b6bc433": "addMemberAcct(address)", +"1b6bd89e": "all_horses(uint256)", "1b6c104e": "marketingAllocationTokenSend(address,uint256)", +"1b6c743b": "DEFAULT_PRICE()", "1b6caad9": "setPersonaAttributes(bytes)", +"1b6d9034": "postdecr(uint256)", "1b6e37ee": "thirdWeekBonusInWeek()", "1b6e66aa": "rescueInvestor(address,uint256)", +"1b6f31d2": "l2l6users()", +"1b6fea6f": "fraxFloor()", +"1b70044c": "getTokenDetailsWithMember(address,address)", "1b7035ea": "getAccountStatus()", "1b709561": "UnlockCredits(address,uint256)", "1b70a2e1": "TerpCoin()", +"1b70f07b": "pendingZom(uint256,address)", +"1b712739": "getLatestBTCPrice()", +"1b716e2c": "upRoleADMIN(address)", +"1b7186fb": "getUnlockableAmount()", "1b72194f": "getUserDivs(address,uint256)", "1b72410b": "EladCrowdsale()", "1b728ed4": "getAssetRawMeta(uint256)", +"1b72d16d": "lastDeletTo()", +"1b73d319": "getSortedIndexOf256(uint256)", +"1b74297c": "CappedSupply()", +"1b745918": "abz()", "1b748399": "TeamCoin()", +"1b749b09": "finishICO(uint256)", +"1b74d046": "requestExists(bytes32)", +"1b74ef2d": "partnersWhitelisted(address)", "1b753dad": "Mithril()", +"1b755b8e": "StateModified(address,address,uint256,uint48,uint48)", +"1b7569ba": "GeneralInfo()", "1b75738a": "enable(address[])", +"1b75fbe8": "updateIncomeRate()", "1b760719": "addMember(address,string,uint256)", "1b7623be": "payInterest(address,uint256)", +"1b764e6b": "EventNewsItem(string)", "1b76929c": "getActiveGames()", "1b769e74": "testThrowsRestartNotUpdatable()", +"1b76b79f": "gainPercent(uint256)", +"1b76c3f9": "orderSizePenaltyFactor()", "1b76dd7c": "disapprove(uint256,string)", +"1b76e59d": "exponentialDaysMax()", "1b773df1": "withdrawAll(string,uint256)", "1b775638": "ContributionReceived(address,bool,uint8,uint256,uint256)", "1b776808": "_updatePixelMapping(address,uint256,uint256,uint256,bytes32,bytes32)", "1b78240f": "Fixie()", +"1b782ffb": "_stakerStakingPlan(address)", "1b78e3c4": "processHunting(uint256,uint256,uint256[])", "1b7949e2": "supply_increased()", +"1b79903c": "coolDownStart()", "1b79a2f3": "lastStageSubmitted()", "1b79d406": "getWhoPiad(uint256,address,address,address,address,address,address,address)", +"1b7a3889": "RESERVE0()", "1b7aad1b": "AMOUNT_TOKENS_FOR_SELL()", +"1b7b033b": "redeemFinal()", +"1b7b0570": "test_addToFeePool_noTranscoderFees()", "1b7b7b0d": "latiumBalance()", "1b7b7c3d": "Partnership(address[],uint256)", +"1b7bb4cf": "CNDAOrtSaleCNDAO(uint256,uint256,uint256,uint256,uint256)", "1b7bbecb": "challengeExists(bytes32)", "1b7be47e": "STQToken(address[])", "1b7c058e": "getLicensePrice(address)", +"1b7c442c": "LogTakeCfd(uint128,address,uint8,address,uint8,uint128,uint128,uint128,uint128)", +"1b7c7ea7": "cancelBuy(bytes32)", +"1b7c83d2": "getElectionOptions(uint64,uint16)", +"1b7ccaac": "ultraDragon(address)", "1b7ccc3d": "_registerLockedDeposits(bytes32,uint256,uint256)", +"1b7ccc8f": "viewSplitTradeEthToDai(uint256)", "1b7ce6f3": "disableTokens(uint256[])", "1b7cf899": "recentActivity(uint256)", +"1b7d03cc": "ValidatorAdded(address,string)", "1b7d5f8c": "release18m()", "1b7d83e5": "addDefaultOperator(address)", +"1b7d88fe": "getStartICO()", "1b7d8aaf": "End8()", "1b7db340": "sysAdmin()", "1b7e0902": "getcardOwner(uint256)", +"1b7e1824": "SupplyDecreased(address,uint256)", "1b7e78f6": "updateFirstChangeBlock(uint256)", "1b7f00c1": "purchaseBundle(uint8,string)", +"1b7fe6b6": "idTracker()", "1b800a3d": "watchPreferersTasks(address,uint256)", +"1b809a06": "bucketTransferAmount(uint256,uint256)", "1b814f02": "splitFunds()", +"1b8191f7": "autoPoolEventCount()", +"1b81ebef": "LogGenerateModuleFromFactory(address,bytes32,address,address,uint256)", "1b8202a7": "LegalContractManager()", "1b825e89": "detachmentTime()", +"1b82bd35": "tobRate()", +"1b82c72f": "SubdomainCreated(string,string,address)", +"1b82cfea": "setLenrek1VaultAddress(address)", "1b82f68f": "kingdomFactory()", +"1b831ead": "getClaimableTokens(address)", +"1b8337f5": "RingMined(uint256,bytes32,address,address,bool,bytes32[],uint256[6][])", "1b83b823": "notifyPlayer(uint256)", "1b841fea": "nextDerivativeTokenTime()", "1b848606": "blacklistEscapeToken(address)", "1b84e72d": "_createEscrow(address,address,uint256,uint256)", "1b851e10": "LogDeposit(address,uint256)", +"1b8544c1": "setReinvestToken(uint256)", "1b855044": "getHash(uint256,uint256)", +"1b857340": "getBooked()", "1b85aa49": "MIN_INVEST()", "1b862027": "save(uint256)", "1b8689b6": "getInvestorTokensPurchasesLength(address)", +"1b868fe9": "mfCoinPool_()", "1b878f71": "setUpgrader(address)", +"1b879378": "addLiquidity(address,uint256,address)", "1b87945e": "buyPointer(bytes32,bytes1[64])", "1b87ccae": "getAssetIdItemType(uint256)", "1b87d58a": "bonusMin()", "1b88094d": "getRecipient()", "1b880bcf": "KareToken()", +"1b881e67": "getBunnyName(uint8)", +"1b885f2e": "approve_713(address,uint256)", +"1b88cbe9": "bilBoydCars()", +"1b88d671": "LogNokuFlatPlanCreated(address,uint256,uint256,address,address)", +"1b8902f0": "revokeTP(bytes32)", +"1b898742": "TokensTransferred(address,address,uint256)", +"1b89973c": "exitClaims(bytes32)", +"1b89b61a": "flashloan()", +"1b89c139": "getMemberDetails(address,address)", +"1b89d33b": "zhitui()", "1b89ee31": "closeBridge()", "1b8a0b46": "WowDiaondToken(address)", "1b8a9031": "BetPlaced(uint256,address,uint256,uint256)", @@ -15818,88 +28830,160 @@ "1b8b13a7": "getRewardPool()", "1b8b3605": "setInvestorList(address)", "1b8b4787": "TOKEN_SALE2()", +"1b8b6bda": "lucaxStake(uint256)", "1b8b921d": "call(address,bytes)", "1b8bd57c": "getCardInfo(uint32)", "1b8beafe": "BLOCK_DURATION()", "1b8ca217": "getProperties(uint256)", +"1b8cbe95": "setYFEEDAddress(address)", +"1b8d0518": "tokenizeAndBuyWork(string)", "1b8d0e60": "getMyBanker()", +"1b8d7850": "_allocPointForTitanReward()", +"1b8d86cf": "dripAllIlks()", "1b8db774": "_deadline()", "1b8de48c": "distributeTCASH(address[])", "1b8e61c7": "setEndTimePreIco(uint256)", +"1b8e8cfa": "hump()", "1b8e94a1": "Rate()", "1b8ef0bb": "getRemainingCapacity(uint256)", "1b8f2610": "quickCloseChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"1b8f2fde": "middleman()", "1b8f3d23": "krakenTicker()", "1b8f5d50": "multi()", "1b8f66a4": "watchedURL(string,string)", +"1b8fb6b5": "transferLockedFrom(address,address,uint256,uint256)", "1b8fc2f0": "setAllowedAddress(address)", "1b8fc6e4": "marketorsTotalBalance()", "1b900c27": "anotherOwner1()", +"1b905aea": "getNetDeposit(address)", +"1b90fcb5": "LogRoundEnd(address,uint256,uint256,uint256)", +"1b911fa4": "_assertPoolFinalizedLastEpoch(bytes32)", +"1b91b55a": "Winner(address,uint256,address)", +"1b91c68e": "LogResult(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "1b924b7e": "enableInterface(string,address)", "1b9265b8": "pay()", "1b929940": "pushIntArray(bytes32,int256)", "1b92bbbe": "maxDrawingTime()", "1b92ce6b": "WOCC()", +"1b931459": "expirationMills(uint256,uint256)", +"1b938b23": "stakeToken(address)", "1b93aa8d": "getPackage()", +"1b93e5b0": "shouldBorrow()", "1b93f66d": "claimedAirdrop(address)", +"1b940022": "claimingTokensWithdraw()", +"1b94059e": "getIcbFromContractAllowance(uint256)", "1b9414ae": "itemBid(uint256)", "1b94198d": "sellingAccepted()", "1b94413f": "transferEth(bytes32,address,uint256)", "1b949f85": "lockContractOwner()", +"1b9515b4": "pancakeFarmingPool()", "1b953909": "authorizeOperatorTranche(bytes32,address)", "1b955df4": "changeRefund(uint8,uint256,uint8)", +"1b95e305": "getGatewayByToken(address)", +"1b95e628": "liquidateWithGasToken(bytes32,address,address,uint256)", "1b962c65": "decodeCurrency(bytes32)", "1b963742": "AwesomeToken()", "1b968160": "wipeAndFree(address,bytes32,uint256,uint256,address)", +"1b96945f": "getRewardClaimTime()", "1b96b2f9": "masterMint(address,uint256)", "1b97429d": "EthToUsdChanged(address,uint256,uint256)", +"1b975e43": "coolNumber()", +"1b978df1": "allLpTokensStaked()", "1b981d7f": "packedToSubmissionBits(uint256)", "1b987c41": "retrieveExternalTokens(address,address)", +"1b9894ce": "verifyReceiverSignatureERC721(address,address,bytes)", "1b98c54f": "getProviderCurveLength(address,bytes32,int256)", "1b98cd68": "updateAffiliate(address,uint8)", "1b98f6ac": "setProviders(address[])", "1b9900b8": "userRollDice(uint256)", +"1b99084c": "emitPynthExchange(address,bytes32,uint256,bytes32,uint256,address)", +"1b9917f8": "newFarm(uint256,uint256,address,address,string)", "1b995aa7": "BitCompare(uint256,uint256)", "1b998dac": "updateMCs()", +"1b99a8df": "removeLimit(address)", +"1b9a26f0": "getUserPercentRate(address)", "1b9a91a4": "withdrawEth(address,uint256)", +"1b9a9323": "signatureLength()", +"1b9a9f9e": "initializeV1(address)", +"1b9ad239": "tradeStates(bytes32)", "1b9b0b23": "KruhftsToken()", +"1b9b72fd": "AccessRevoked(address)", +"1b9be3de": "listedToken(address)", "1b9bfa3a": "_oldOwnersOf(uint256)", +"1b9c515b": "coefficient()", "1b9c7f31": "Werbecoin()", +"1b9cb58b": "areWinnersFound()", "1b9cbdfb": "priceOfToken()", +"1b9cddcc": "chkBurnerList(uint256)", "1b9ceef1": "purchaseTokenInPublicSale()", +"1b9d032e": "updatePlugin(address,bool)", "1b9d1bed": "setPOOL_edit_18(string)", "1b9d4c8e": "setBudget(address,address,uint256)", "1b9db2ef": "getParticipant(uint256)", "1b9dbcaf": "kittensIssued()", "1b9e16ad": "getAccountInfo()", "1b9e9a27": "createComponent(string)", +"1b9f1d58": "EscrowCanceled(address,address,bytes32,uint256,bytes32[],bytes32)", +"1b9f374a": "getBalanceERC20Receiver(address,address)", +"1b9f546f": "sumMiningPerOf(address)", +"1b9f67a1": "BLOCK_GAS_LIMIT_REDUCED()", "1b9f9647": "accessMyWallet(address)", +"1b9fb6be": "delegateVoteRight(address)", "1b9fec58": "getBlockToHashForResults(uint256)", +"1ba00c6b": "_getCRPAddress()", +"1ba13884": "workBatch(uint256[])", "1ba1648a": "changeTokensOwner()", +"1ba18b9b": "questionTimeout()", +"1ba1ccab": "block(address[])", "1ba1f10b": "updateTaxPercentages(uint256,uint256)", "1ba22084": "ecadd(uint256[3],uint256[3])", "1ba23f1e": "setAllowedMultivest(address,address)", +"1ba25c87": "crowdsaleContributions(address)", +"1ba29f2f": "getValidator(uint64,uint64)", +"1ba2f531": "getPoolValue()", "1ba326c4": "calcShare(uint256,uint256,uint256)", "1ba39a4c": "calcMult(uint256,bool)", "1ba3afd3": "getLocalGame(uint16)", +"1ba3b548": "addNewInitialAdmin(address)", +"1ba3d96c": "adminSetBurnable(address)", +"1ba3db61": "GetParticipant(address)", +"1ba4490a": "safetoken()", "1ba46cfd": "assetAddress()", +"1ba4e171": "approve_410(address,uint256)", "1ba527d6": "gkAddress()", "1ba54100": "distributeEbyteForEBYTE(address[],address,uint256,uint256)", +"1ba54c57": "updateUplinePercentage(uint8,uint256)", +"1ba56006": "upAllowance(address,address)", "1ba5b3e8": "currentTotalAirdrop()", "1ba5e63f": "tournamentQueueSize()", "1ba5eec0": "nextTurn()", "1ba60f9b": "availableDgxNg()", +"1ba63a1b": "dsp_gas_used(address)", +"1ba66f2b": "distributionContractAddress()", +"1ba6bac2": "HOPR_TOKEN()", +"1ba6ce4f": "changeSpecialTeamAddress(address)", "1ba6e1bd": "externalPurchase(address,string,string,uint256,uint256,uint256)", +"1ba6e2be": "AddCallSpenderWhitelist(address,address)", "1ba7013b": "distributedBountyTotal()", +"1ba7bef1": "migrateLPtokens10000()", "1ba83c3c": "ChargingGas(uint256)", "1ba88666": "isBiometricLockedOnlyOwner(address)", +"1ba88f07": "mintGftNFT(address,uint8[],uint8[],uint256[])", +"1ba89442": "collateralDecimal()", "1ba8ef21": "electrolightTestnet()", +"1ba9096f": "ethSignedMessageHash(bytes32)", "1ba9146e": "PethToken(uint256,string,string,uint256)", "1ba91c20": "foundationMultisig()", +"1ba92082": "getBotBuyBlockNumber()", "1ba9998b": "advanceRound()", +"1ba9bdac": "setExternalPriceCurve()", "1baaeb91": "getSignature(bytes4,uint256)", "1bab0908": "hasValidParam(address,uint64,uint64,uint64,uint64,uint64,uint64)", +"1bab0c79": "lastFundedTimestamp()", +"1bab15e4": "setTWAP(uint256)", "1bab8148": "fulfillMintRequest(uint256,string)", +"1baba706": "altLockedAmount(address)", +"1baba73b": "mainsaleAddress()", "1bacbf4e": "secureTransfer(uint256)", "1bacfd66": "Vote(address,bytes)", "1bad1d2e": "monitorWallet(address)", @@ -15907,8 +28991,12 @@ "1bad5558": "withdraw3(address)", "1bad9e8f": "getUserTokenInfos(address,uint256)", "1bada3c0": "closeKYC()", +"1badb25c": "canTransfer(address,uint256,bytes)", "1badbd5c": "increaseAssuranvePayments(address,uint256)", "1badfbae": "setWhitelistBallot(address,bool)", +"1baea2e2": "checkIfErc20OnList(address)", +"1baeaecb": "Reconspender()", +"1baeee85": "acceptedPasscodes_(bytes32)", "1baf1494": "QToken(address,uint256)", "1baf7122": "custodyStorage()", "1baf823f": "NewUsername(address,string)", @@ -15918,331 +29006,624 @@ "1bb02ffb": "MWAV()", "1bb0b762": "A2ABToken()", "1bb0c665": "toHexString(address)", +"1bb108c4": "relaseTime6()", "1bb1151a": "Error(uint64)", "1bb1bf2e": "team1Query()", +"1bb1c880": "TOKENS_MUL(uint256)", +"1bb25390": "externalToken2Meta(address)", "1bb2921b": "getProjectedPayout(uint16)", +"1bb2cb1f": "balanceOf1()", +"1bb3888b": "setAssetIntroducerPrice(string,uint8,uint256)", +"1bb39fd0": "forRTRANDholdersv1(address)", "1bb3fb67": "operatorSendTranche(bytes32,address,address,uint256,bytes,bytes)", "1bb4067b": "checkPoolDone(uint256)", "1bb409c4": "QueryBonus()", "1bb460cc": "ContributionReceived(address,uint256)", "1bb47b44": "appendVestingEntry(address,uint256,uint256)", +"1bb51075": "updateBounty(bytes32,uint256,string,uint256,string)", +"1bb51659": "transactionsStorageId()", "1bb534ba": "fundingRecipient()", "1bb58beb": "RECToken(uint256,string,uint8,string)", "1bb5f0a2": "registerBarcode(bytes9,string,string,string,string,string,string)", +"1bb612d8": "initialTokensSupplyFinish()", "1bb63d0c": "Nova()", "1bb6cb47": "getPlayer2()", +"1bb6e2cd": "fellowship(uint256)", "1bb73a2a": "batchCreateAuthorDrawings()", +"1bb75082": "spawned(uint256)", "1bb797da": "isIcoStage()", +"1bb7abd7": "add112(uint112,uint112)", "1bb7c3c2": "UpdatedDonationAddress(address)", "1bb7cc99": "WHITELIST()", +"1bb80f48": "kkushUniswapV2Pair()", +"1bb8305d": "storeString(string)", "1bb8365f": "calculateGoldBuy(uint256,uint256)", +"1bb8bba5": "_bscToken()", +"1bb90d53": "_refPayout(address,uint256)", "1bb96dff": "AuctionStarted(uint256)", +"1bba7964": "pase1()", +"1bbad7fd": "Get_network_difficulty()", +"1bbae6e0": "_setMaxTxAmount(uint256)", "1bbb4f63": "LogMoneyline(int256,int256)", "1bbb696a": "swapContracts(address)", +"1bbb824b": "setEmergencyFeesFactor(uint256)", "1bbb9a99": "claimEthers(uint256)", +"1bbbca07": "claimSeedPacket(uint32,uint256)", "1bbc4b83": "ERC20Interface()", "1bbc7952": "getPropertySalePrice(uint16)", "1bbc99c6": "UpdateDividendPartners(address[],uint256[])", +"1bbc9dca": "MathAdd(uint256)", "1bbce9a2": "bidState(bytes32)", +"1bbe0a67": "setAdvertiserAffiliate(address,uint256)", "1bbe1813": "getTotalSpecials()", "1bbe2ff3": "TransferEtherInitiationEvent(uint256,address,address,uint256)", +"1bbe7c5c": "setXBuoy(address)", "1bbe9d8c": "addFunder(address)", "1bbec4e7": "coldWallet2()", +"1bbec987": "setCaptainTokenContract(address)", "1bbef399": "isVoting()", +"1bbf3481": "getSampledmap()", +"1bbf39b7": "landsPurchased(address,uint256,uint32)", +"1bbfae0e": "registerUser(uint256)", "1bbfb029": "addTx(address,address,uint256,string)", "1bbfce0e": "bidOnBreedingAuctionTutorial(uint40)", "1bbfdaaf": "selectElf(uint8,uint16)", +"1bc051a9": "updateCategory(bytes4)", "1bc0585f": "stopTokenSale()", "1bc08834": "stsc()", +"1bc11460": "lotSizeBuy()", +"1bc11a7f": "releaseEpoch()", "1bc125f3": "finishMintingSTO()", +"1bc1c99a": "_nextBorrowInterestRate(uint256,uint256)", +"1bc28960": "readString(bytes32)", +"1bc2aeeb": "tulipIdToOwner(uint256)", "1bc2b813": "divUInt(uint256,uint256)", +"1bc2cc1f": "harvestDmgByUser(address,address)", "1bc2dd5a": "doesContractExist(address,address)", +"1bc34078": "removeAllCardTypes()", "1bc390dd": "reconfig(string,string)", +"1bc3996c": "auctionTokenId()", "1bc3c855": "setWhiteListERC223(address)", +"1bc3c982": "_clearSession(address)", "1bc41284": "uncleRate()", "1bc44200": "Dasabi_ioToken()", "1bc44213": "MAX_BID_FRAC_BOT()", "1bc4c81b": "QuizQuestion()", "1bc4cdb9": "ReceiveFund(address,uint256)", "1bc4d6b2": "XXXXToken()", +"1bc4da52": "pegInEth(string,bytes)", "1bc50b05": "canUpdateNextGamePotSplit()", +"1bc50fee": "myCertificates()", "1bc59aa6": "bountyAllocated()", "1bc5ee1a": "transfer_eth_to_contract()", +"1bc5fb56": "setAlertTimes(uint256,uint256,uint256)", +"1bc61ee4": "updateVars(bool,bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"1bc6f82d": "SanCostUpdated(uint256)", +"1bc729cc": "clearTokens(uint256,uint256,bool)", +"1bc77360": "unifundMultiplier()", +"1bc7bfec": "setTokenWallet(address,address)", +"1bc7d7a3": "SetBurnStart(bool)", "1bc84458": "getAddOnSupport(uint16)", +"1bc9bf7d": "removeMessage(address,bytes32)", "1bca179b": "RentedBlock(uint256,uint256,uint256,uint256,address)", "1bca5689": "havvensReceivedForEther(uint256)", "1bca7d6d": "NigelFundSum()", "1bca989e": "setTokenInfoMaxPerBlockImbalanceList(uint256[])", +"1bcaa471": "reciprocalCeil(uint256)", "1bcad37a": "getTotalCost()", +"1bcaf6e3": "removeBurnerRole(address)", "1bcb6fa2": "snapshotValidators(uint256)", "1bcbce52": "isEarlyInvestorsTokenRaised(uint256)", +"1bcc43ee": "phase6TokenPerBlock()", +"1bcc7539": "getOwnerAddress(uint64)", "1bcc9b1a": "TruPreSale(uint256,uint256,address,address)", +"1bcc9bc4": "transferFromAllMultiToMulti(address[],address[])", +"1bcd250a": "deAuthorizeCaller(address)", "1bcd57c7": "ContributionAmount()", +"1bcd8fc0": "getPoolsList()", +"1bcda198": "rewardPool(address)", "1bcdb8e0": "responder(uint256,uint256,uint256,bytes5,bytes14,bytes5,uint256,uint256,uint256,uint256,uint256,uint256)", "1bcdd57d": "writeNextId(uint256)", +"1bcde4ec": "removeVesting(uint256)", "1bce6ff3": "begin()", +"1bcea78f": "GasRefund(address,uint256,uint256,uint256,bool)", "1bceeaa7": "resell(address,string)", +"1bcf1942": "updateList2(uint256[])", "1bcf468b": "costOfToken()", "1bcf5241": "countCliTasks()", "1bcf5758": "getOccupies(uint8)", "1bcf659d": "getMinTalent(uint256)", +"1bcfbe31": "announcements(uint256)", +"1bd02b5b": "approve_315(address,uint256)", "1bd0c431": "updateETH()", +"1bd0eb8f": "ERC1155_PROXY_ID()", "1bd13df1": "GetSummFee(uint256)", "1bd16dbf": "preSaleDuration()", +"1bd17edf": "pipeToIndex(address)", +"1bd1859f": "SloganChanged(string,string)", +"1bd22bad": "isMinionManager()", "1bd2511a": "addEarlyAccessAddress(address,address)", +"1bd268f0": "OfferAdd(uint256,uint256)", "1bd27296": "_fetchCancelledOrdersForMerchant(address)", "1bd2b37c": "isMasterRecruitment()", "1bd2c21c": "playBigger(uint256[])", +"1bd2cf38": "revokeGrant(address,uint32)", "1bd2d4cc": "getNextIndex(uint8)", +"1bd3272b": "getCASH_SHARE_UniswpPair()", +"1bd342ef": "purchaseBondsByDAO(uint256)", "1bd3553e": "TheTokenA()", +"1bd355f3": "gameEndTimestamp()", +"1bd38125": "toggleIssuing()", +"1bd3fc86": "lastStage()", +"1bd3fce5": "getBlockerOperatorsPending()", +"1bd43be3": "withdrawOther(address)", +"1bd4f3cc": "BlockchainExchange(address,uint256,int256,bytes32)", "1bd5363c": "getBPaddress()", +"1bd54694": "claimAllRgt()", "1bd5d127": "NaviToken()", "1bd60ae9": "buyerBalance(address)", "1bd61eee": "updateHeartBeat()", +"1bd6b548": "getNextGoaldId()", +"1bd6dfe1": "oldFactory()", "1bd6f596": "right56(uint256)", "1bd6fb9f": "LockedFunds(address,uint256)", "1bd72647": "round0Target()", +"1bd81bc4": "StopLottery()", +"1bd85bdb": "claimComp()", +"1bd86aa7": "changeBurnSettings(uint256)", +"1bd89767": "calculateWartefallId(uint256,uint256,uint256,uint256)", "1bd8b041": "PRICE_INCREASE_SCALE()", +"1bd8cc1a": "getMany(string[],uint256)", +"1bd8eca8": "removeAltPool(address)", "1bd8f9ca": "challengeFee()", +"1bd912ed": "smallAuraRand()", "1bd95155": "stringToUint(string)", +"1bd960df": "STATS_TYPE_INVITE_1ST_COUNT()", "1bd983a4": "PlaceSellOrder(uint256,uint256)", "1bd9a7e7": "LogNewWhitelistUser(address,uint256)", "1bd9c46e": "setImporter()", "1bda6d55": "publicSaleSoldTokens()", +"1bda77e1": "swapForUSDC(uint256)", "1bda84b3": "getOfferIdsByToken(address)", "1bda8781": "Taouaf(uint256,string,uint8,string)", +"1bdb287b": "swapAndAddLiquidity(uint256)", "1bdb3f65": "ZoomToken()", "1bdbabdd": "registerProduct(uint256,bytes32,bytes32,uint256,uint256)", "1bdbce49": "setWhitelist(address,address,bool)", +"1bdc17f6": "increaseUserPoints(address,uint256,uint256)", "1bdc4038": "_updatePurchasingState(address,uint256)", +"1bdc93b2": "getUserOrdersFromHashId(bytes32)", "1bdd193a": "placeStar(uint8,uint8,uint16,uint256)", +"1bdd4b74": "getChallenge(uint256)", +"1bdd4e86": "initPrice(uint256)", "1bddcf48": "_asyncTransfer(address,uint256)", "1bde9998": "getWhitelistStatus(address,bytes32,address)", "1bde9bc1": "rebatelvlEconomy(string,string,string,string,string)", "1be05289": "DURATION()", +"1be0668a": "setMintRules(uint256,uint256,uint256,uint256)", "1be0717f": "_reward()", +"1be0ed37": "pauseLendingPool(address)", "1be0f1ad": "getSpinOutput(uint256,uint256,uint256,address)", "1be0f793": "USDExchange(address)", +"1be1095e": "BUMP()", "1be16003": "Answer()", +"1be19560": "sweepToken(address)", "1be1bf7f": "TessrX()", "1be20ca1": "TokenCAP()", "1be22528": "TechnicalRise()", +"1be2ff97": "epochAlignTimestamp()", "1be3175e": "mortgage(uint256)", +"1be32549": "TransferredBlackFunds(address,uint256)", +"1be34577": "TransferMulti(uint256,uint256)", +"1be35085": "setLoanCollatteralRatioInLoan(uint256)", +"1be35a59": "STARTED()", "1be35b0c": "statusOperation()", +"1be41ee1": "hoodie()", +"1be47ac2": "queryEOSCrowdsaleKey(address)", "1be4aaa1": "getTokenInfoHeritor(address,address)", "1be4da5b": "MateriaPrima()", +"1be527a8": "getBattleAttackerLog(uint64)", +"1be5794a": "getPositions(string[],address)", +"1be5e7ed": "get(string,uint256)", "1be64997": "BucketCreated(bytes32,uint256,uint64)", "1be6ce57": "decreaseOwnershipTokenCount(address)", "1be6dd64": "points()", +"1be70238": "CONFIG_KEY()", "1be70510": "acceptAdoptionOffer(bytes5)", "1be73e2b": "_fhMoney(uint256,uint256,uint256,uint256,uint256,uint256)", +"1be76712": "revokeGroup(uint256)", "1be7c5ef": "fullfillFounder()", "1be863bf": "PushData()", "1be88614": "onetimeLaunch(uint256)", "1be8dbfd": "dsMul(uint256,uint256)", +"1be929fa": "TOTAL_ALLOCATED()", +"1be96517": "_setSellFee(uint256)", +"1be98a61": "personSendMessageToGroup(address,string,uint32)", +"1bea0078": "changeStableContract(address)", "1bea4a61": "getObjIndex(uint64)", "1bea67b7": "BFDToken()", "1bea69e3": "isAdmin(address,string)", "1bea8006": "tokenBalanceOf(address,address)", +"1beabcd2": "boostedBalanceOf(address)", "1beafada": "PROMETHEUS_PRICE_THRESHOLD()", +"1beb1346": "transferGroups(uint256)", "1beb2615": "destruct(address)", "1beb375d": "proxyManagementAddress()", "1beb4b5e": "fetchAllVoteResultBySnapshotBlock(uint256)", +"1beb7f5c": "tokenOut(address,uint256)", +"1beb95e2": "yourStakedFRT(address)", +"1beb9ad0": "bdip01SharedIncentiveForLpEpochs()", "1bebf13c": "sendOrderEvent(address,uint256,uint256,uint256,address,uint256)", +"1bec1679": "_setAggregators(address[],address[])", +"1bec1a92": "configs(address,address)", +"1bec4040": "checkSenderIs9AndValueis10()", +"1bec820b": "trustedToken(address)", +"1bece0ae": "prevProxyRecordedBalance()", +"1beddf1c": "MAX_ADJUSTMENT_PERCENT()", +"1bee0a9c": "contingency()", +"1bee265d": "k_reward_accumulated_multi(address)", +"1bee7fe7": "updateEndSaleTime(uint256)", +"1bef5c6a": "lockupSec()", "1bef9059": "ProtocolToken()", "1befcbaf": "buyRareEgg(uint8,uint256,address)", "1befd26a": "setDesignatedReporterWasCorrect(bool)", +"1bf01cc4": "purpleCommits(address)", "1bf028b1": "OddMoney(address,uint256)", "1bf049b9": "Prediction(uint24,uint24,bool)", "1bf0635b": "setGoldFeeAddress(address)", +"1bf072be": "batchResolveStake(uint256[],uint256[],address[],bytes32[],uint256[])", "1bf1de9b": "COMMISSION_PERCENTAGE()", +"1bf1e00f": "getLotteryIssueIndex(uint256)", "1bf20668": "testAdminTransfer()", "1bf219de": "Faucet(uint256,address)", "1bf2a90a": "totalPostIcoContributorIdsAllocated()", "1bf38b28": "addAccessor(address,address,uint8,address,string,uint32,string,string,bytes32,bytes32,uint8)", "1bf426ba": "Spendelotto()", +"1bf494a7": "getRewardPerShare()", "1bf498b6": "registAgent(address)", +"1bf556d0": "accruedFunding(address)", +"1bf55f5d": "getMinMaxETHForPurchase()", "1bf57f41": "salesAddress(address)", "1bf5b38a": "finalizeDonation(address)", +"1bf5c3ca": "authorizeEPN(uint256,uint256)", "1bf5f736": "endOfDay()", +"1bf602ff": "setAdmin2(address)", "1bf651ff": "YBHY()", "1bf678cf": "setOtherNTech3D(address)", "1bf6ba7e": "_transferFromOwner(address,uint256)", "1bf6c21b": "USD()", +"1bf6ddae": "createStake(uint256)", "1bf6e00d": "frozenOf(address)", "1bf6e939": "accManager()", "1bf703b2": "addCategory(string,string)", "1bf7628b": "firstHolder()", +"1bf77f4e": "viewUserLevelStaus(uint8,address,uint8)", "1bf7d749": "curves(uint256)", +"1bf8060c": "investorWhitelist(address)", +"1bf806cb": "electionDuration()", +"1bf82057": "requestRandom(address,uint8,uint256)", "1bf831cf": "initialOperatorValue(address)", +"1bf884d8": "transferWithLockUp(address,uint256)", "1bf8c094": "setOwnedToken(address,uint256,uint256)", +"1bf8e7be": "underlyingBalanceWithInvestment()", +"1bf8ee70": "object(address)", +"1bf913df": "approvalsreq()", "1bf983a6": "getTokenInfoMaxTotalImbalanceList()", +"1bf983f8": "batchWithdrawPreExpiration(address,uint256[],uint256[])", +"1bf9a298": "set_new_ZAP_ADDRESS(address)", "1bf9b325": "deletePublicKey(address)", "1bf9b387": "setIcoRate(uint256)", "1bf9def0": "Transferable()", +"1bfa4c04": "stopFarming()", "1bfa5d8a": "hash_pubkey_to_pubkey(uint256,uint256)", "1bfa90bf": "getIntField1()", "1bfaf155": "foundersWallet()", "1bfb7245": "tToken(address,uint256)", "1bfba595": "incrementTotalIssuerCount()", +"1bfbb944": "EthUsdRate()", +"1bfbf77f": "ST1OP1(address,uint256)", "1bfc596b": "presaleBonusAddressColdStorage()", "1bfc8bd1": "setRequestIdToMultiRequestId(uint256,uint256)", "1bfce853": "vestedAmount(uint256)", "1bfd4858": "hash_db(bytes32)", "1bfd6814": "TRANSFERABLE()", "1bfe0308": "removeRole(address,string)", +"1bfe1e1d": "exchangeEthForSga(address,uint256)", +"1bfe1ed9": "DidVCSettle(bytes32,bytes32,uint256,uint256,uint256,address,uint256)", +"1bfe3055": "upPriceFactor()", "1bfe3508": "triggerRecoveryAddressChange(address)", "1bfe7831": "AllLockAccounts(uint256)", "1bfe783e": "MaxDropReward()", +"1bfe87bd": "refundOtherCrypto(address,string)", "1bfea87f": "by(bytes32)", "1bff4786": "etherDeltaInfo()", "1bff4bfa": "beneficiaryTwo()", "1bff4c07": "LukaCoin()", "1c0019c4": "getCostForTrait(uint8)", +"1c0058e0": "setTrader(address,address)", +"1c005fda": "coinJoin_join(address,address,uint256)", +"1c009aee": "viewStakerRewardTokenAmount(address)", +"1c014787": "updateDynamic(address,uint256)", "1c014c60": "casinoBalance()", +"1c0157a6": "addTokenLiquidity()", "1c0183e3": "TweedentityRegistry()", +"1c01bb3e": "acl_keeper(address,uint256)", +"1c01e6fc": "lastRestake()", +"1c026aa3": "stageFiveEnd()", "1c02708d": "killContract()", "1c02a63d": "SetEcosystemContract()", +"1c02bc31": "setProtected(bool)", +"1c02d846": "lockETHAndDraw(address,address,address,address,uint256,uint256)", +"1c03e6cc": "addRewardToken(address)", +"1c044925": "utuToken()", "1c0463de": "isUpgradeAllowed()", "1c05123d": "LicenseIssuer(string,string,string,uint256,uint256,address)", "1c054b14": "bonusRangeCount()", "1c057493": "withdrawERC721(uint256,uint256,address,uint256)", +"1c05d8fe": "Verification(bytes)", +"1c061c3d": "maskBids(uint256)", +"1c06bd72": "fullBlock()", +"1c0795cb": "setModifiers(address,uint256,uint256)", +"1c07bf70": "CanvasNameSet(uint256,string)", "1c07f0a3": "getAccountKeys(uint256)", "1c080404": "contributed3(address)", +"1c080c80": "xsd()", "1c08366b": "tokenPCT(string,string,uint8)", "1c084385": "WhitehatWithdraw(address,address,address,address)", "1c085a21": "totalRaiseWei()", "1c088897": "MINER_AUCTION_DURATION()", "1c08c08e": "claimBond(uint256)", +"1c0933c8": "addAssetMeetings(address)", "1c09496a": "transferWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"1c09629a": "getNodeOwner(bytes32)", +"1c0973a4": "burnContract()", "1c09c194": "testInsertMultipleProductsIntoCart()", +"1c0ac90d": "CORIONX()", "1c0acbd5": "bidOnDklSiringAuction(uint256,uint256,uint8,bytes,uint256,uint256,bytes,uint256)", "1c0ad646": "coreAddress()", +"1c0b458d": "swapErc20ToUniverse(address,uint256,uint256)", "1c0b6367": "processTransaction(bytes,uint256)", +"1c0b9ab9": "_getRate(bytes32)", "1c0bbe26": "createAccountForUser(address)", +"1c0be1e7": "epicClaimed(address)", "1c0c3d33": "mintAuthorizedBatchWithBalances(address[],uint256[])", +"1c0c6794": "StateChanged(uint256,uint256)", "1c0ce15f": "TUBE()", "1c0d1274": "setCCH_edit_21(string)", +"1c0d850e": "getVotingResult(uint256)", "1c0de1b3": "LogResult(bytes32,uint8,bytes,bytes)", "1c0e0225": "minDonation()", "1c0e7109": "addFreelancer(address,uint256[],address)", +"1c0e7b8a": "beerTokenContractAddress()", +"1c0ec854": "addConfirmation(uint256)", +"1c0ef58f": "mintForCar(address,uint256)", "1c0f12b6": "transferFrom(uint256,address,address,uint256)", +"1c0f3a55": "Leak(address,uint256)", "1c0f96bb": "ManagerProxyTargetMockV1(address)", "1c0f9a7c": "requestEURPrice(string)", +"1c106282": "MintProposalVoted(bytes32,address,uint256)", +"1c10d516": "returnInvested(uint256)", "1c114b38": "canReadInDataObject(address,bytes32[])", "1c11fce2": "requestToken(address,uint256)", +"1c125265": "approveFlag(string)", +"1c125a6a": "BOUNDARY_7()", +"1c130dfb": "addMultisig(address)", "1c135881": "testHardCap()", +"1c138fb1": "createEmptyContract()", +"1c13e96e": "arbTolerance()", "1c1401e7": "OWNER_TRANSFER_TOKENS()", "1c140bdd": "addCampaign(string,string,string,address,address,address,string)", "1c14179a": "GavCoin()", +"1c145dcd": "tokenCollateralJoin_join(address,address,uint256,bool)", "1c14b340": "passMessage(address,string)", "1c152982": "addEditwalletContractAddress(bytes8,address)", "1c15b285": "getAmbientHumidityControlLimits(bytes32)", "1c1697ae": "get_presale_arbits_per_ether(address)", "1c169ba5": "closed_()", "1c16c3ad": "calcAirDropAmount(uint256)", +"1c176e85": "newPump(string)", "1c177502": "LogCollectEth(uint256,uint256)", +"1c185397": "commissionOnInvestmentJot()", +"1c186893": "updateStream(uint256)", +"1c18c3ce": "sendGasFee()", "1c1935ce": "getHistoricPrice(uint256)", +"1c194ba9": "setGeneralInfo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1c196659": "OPEN_PRESALE_ROLE()", "1c196d77": "returnSubscriptionDesposit(uint256)", +"1c19c215": "reroll(uint256)", +"1c1ab1a1": "minedNestAmount()", +"1c1b1876": "SetICOPrice(uint256)", "1c1b863b": "updateBetDataFromOracle(uint256)", "1c1b8772": "update(address)", +"1c1b9175": "setUnsuccessfulBountyFeeInWei(uint256)", "1c1bc850": "changePayee(address)", "1c1bd814": "TIMEOUT_TIME()", "1c1c2289": "userKey()", +"1c1c8496": "ethTweets(uint256)", +"1c1cb323": "currencyAddress()", +"1c1d1701": "proposeReward()", +"1c1d4810": "setDaily(uint8)", +"1c1d63a7": "ERC2665Lieutenant()", "1c1d7517": "dedeNetwork()", +"1c1dbbc3": "Tickets(uint256)", +"1c1e4409": "switchContractLock()", +"1c1e5b26": "lol2()", +"1c1e82c8": "laser()", "1c1f6a3f": "removeTokenFrom(address,uint256)", +"1c1f78eb": "getRewardForDuration()", +"1c1f8aa3": "setStakingContractAddress(address)", +"1c1f908c": "baseUpdateCallerReward()", "1c203612": "battle(uint256,uint256,uint8[2])", +"1c20461f": "getNumBlocksFinalized()", "1c20be7e": "getVestingBalance(address,address,address)", +"1c20fadd": "withdrawFunds(address,address,uint256)", +"1c224c99": "shareRewards(address[],uint256[])", "1c226164": "isAddressVoted(address,address)", +"1c2295ee": "X_WALLET(address)", "1c22ac19": "aprovaDevolucao(bool)", "1c22b196": "TransferTRAC()", +"1c22f6b2": "getUserEth(address)", "1c22f765": "zhoudayiToken(uint256,string,uint8,string)", "1c232194": "refundPreSale()", "1c23281c": "GZSToken(uint256,string,uint8,string)", +"1c233879": "retByAdmin()", "1c2353e1": "isCertifier(address)", "1c235f5f": "getHipstermasterReq()", +"1c2386d8": "update_salary(address)", "1c238e1f": "Signum(address,address)", +"1c239f9d": "correntista()", "1c23e280": "buyTicketsFor(address,uint256)", "1c249494": "setStarted()", "1c24f0bd": "applyForCertification(string,string,string,uint256,uint256,uint256,uint256,uint8,uint8,uint16)", "1c25331d": "setMaximumNonWhitelistAmount(uint256)", +"1c25f16e": "getEventAddress(uint256)", "1c25f452": "topupSupply(uint256)", +"1c25ff12": "safeRepayDebt(address,address,uint256,uint256,address)", +"1c26a599": "convertEthtoExactTokens(uint256,address,address)", +"1c2700d4": "nestVote(address)", +"1c27b15d": "sellToken(address,uint256,address,uint256)", "1c27e291": "refundCoin(address)", "1c27f30b": "Lover()", +"1c2819e4": "uni_eth_uni_lp()", +"1c286c8a": "setRoutePairAddress(address,address)", "1c28b99e": "pressFee()", "1c296b34": "cryptiblesAuctionContract()", +"1c2a15b8": "recoverAddress(bytes32,bytes,uint256)", +"1c2a88b4": "requestMortgage(address,bytes32,uint256,uint256,address)", +"1c2a975f": "withdrawRewardsFor(address)", +"1c2a9858": "getDerivativeFactoryVersion(uint8)", "1c2ac59d": "sosoToken()", "1c2ac5ac": "IcoStatus()", +"1c2ae1f7": "Winner(uint256,address,uint256)", "1c2b1e54": "SalesManagerUpgradable()", "1c2bbd18": "exchangeTemplate()", +"1c2be5ad": "usersX6MatrixDetail(address,uint8)", +"1c2c656d": "transferOwnership(string,address,address)", "1c2d6356": "getActivityName(uint256)", "1c2e2796": "ContractCallerProxy(address)", "1c2e53ef": "promotionRate()", +"1c2e8231": "Message(address,uint256,uint256,uint8,uint64)", +"1c2e9bf1": "g_data()", "1c2f2f9f": "recoverAndSetSecretHash(string,bytes32)", "1c2f38ff": "paid(uint64)", +"1c2f3e3d": "_governance()", +"1c2f5db1": "getGridPrice(uint16,uint16,uint16,uint16)", +"1c2fe6b2": "setTokenAndUniswapPair(address,address)", "1c30549f": "set_rand_addr(address,uint256)", "1c3101d3": "addRecipient(address)", "1c3122ba": "BuyStartingSnails()", +"1c317d83": "paxTokenAddress()", +"1c31f555": "addMarginalReward()", "1c31f710": "setBeneficiary(address)", "1c321f62": "executeLottery()", +"1c322a72": "calculateImbalance(uint256,uint256)", "1c3274ff": "PlayX10()", +"1c32a1cc": "setCTokenContract(address,address)", +"1c330451": "minPrize()", +"1c331602": "financeWallet()", "1c338601": "setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", "1c338644": "withdrawERC20Balance(address,address)", +"1c3405e2": "calculateDebt(uint256,uint256)", +"1c347787": "confirmChange(bytes4,address,string,uint8[],bytes32[],bytes32[])", "1c350d6b": "TRLToken()", +"1c351a9d": "mint(string,address)", +"1c358833": "lockoutAddress()", "1c35b76f": "VOLUME_BONUS_CONDITION()", "1c35e7ba": "manualFinalizeRound()", +"1c35f962": "sale(uint256,uint256)", "1c363e14": "DeathFactor_v()", +"1c366df4": "alot_tokens(uint256,address)", "1c38f800": "currentIcoSupply()", +"1c392a65": "addAssetSwaps(address,address,address)", "1c398075": "sellClimateCoinsAgainstEther(uint256)", "1c39b5c4": "Administrated()", "1c39c375": "buyUninitializedPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", +"1c39c38d": "timerAddress()", +"1c3a1968": "identityKeyIsRegistered(bytes16,address)", "1c3a36d0": "addComment(bytes3,string)", "1c3a5713": "getProposalExternalTokenReward(bytes32,address)", +"1c3a5849": "_addToSupportedAssets(bytes32)", "1c3a8892": "closeRoom(uint256)", "1c3ad417": "getBAS(bytes32,address)", "1c3b093f": "Track(address,bytes,uint256,uint256)", +"1c3b1e5d": "setNewChecker(address)", "1c3b3b9f": "expandPeriod(uint8)", "1c3bc31f": "firstPreSaleEndDate1()", "1c3c050c": "genTime()", "1c3c0ea8": "setExecutor(address)", "1c3c295e": "registerInstitutionAsset(string,string,address,address)", +"1c3c5656": "deposit4(uint256)", +"1c3c7723": "setmktcap()", "1c3cbf07": "TokenTest123()", "1c3cf5d0": "setEditionPackPriceIncrease(uint8,uint256)", +"1c3d39bd": "PledgeCreated(address,uint256,string)", "1c3d4f20": "ChangeBalance(address,uint256,address,uint256,uint256)", +"1c3d9df7": "ownershipVoucherCount(address)", "1c3db16d": "currentRuling(uint256)", +"1c3db2e0": "claimComp(address,address[])", "1c3db9a8": "approveFlower(address,uint256)", +"1c3dd1da": "usersRegistration(address)", "1c3de07a": "calculateCoinSell(uint256)", +"1c3e8e9b": "numDecimalsSellPrice()", "1c3f2f8c": "dealsNumber()", "1c3f7637": "isAllowedHICAddress(address)", "1c3fe22d": "GaillardCrowdSale()", +"1c4009f9": "zapInToken(address,uint256,address)", +"1c40928d": "famersLength()", "1c40baf5": "EUROCASH()", +"1c41499b": "m_Stacking_Address()", +"1c41718e": "getCommitmentA()", +"1c419b24": "Lose(uint256,uint256)", +"1c41a336": "log(bool,address,bool,address)", "1c41d143": "KPTLToken()", "1c41e2db": "getEducation()", +"1c41ef97": "rewardFactor()", +"1c42100b": "INITIAL_BONUS_PER_BLOCK()", "1c423713": "addPromoCode(string,bytes32,uint256,uint8)", "1c4261f4": "createGift(bytes32)", +"1c428260": "getSpenderTokensGroup(address)", "1c429165": "tryRollRoom(address,uint256,uint256)", +"1c42935c": "ftg()", "1c42959c": "maximumCap()", +"1c42c306": "getFamerUri(uint32)", "1c42daf7": "winMeta(address,bytes32)", +"1c42fa60": "calcSkimAmount()", "1c435872": "setInterRefreshLock(bool)", "1c43814f": "registerAsSlaven(string)", "1c43b4a6": "initAddressAsMultiOwner(address,string)", "1c43d8b1": "EndEvent(bool)", "1c442754": "participated(address,uint256)", +"1c443092": "setMinimumBurnAmount(uint256)", "1c448231": "SDToken()", "1c44bac7": "tournamentBankCut()", +"1c457be2": "DAISponsored(uint256,uint256,address)", +"1c45f94b": "transferLockBalance_2(address,uint256)", +"1c45fc80": "Set_Status(string)", "1c465538": "DoFee(uint256)", "1c465e87": "getTopOnce()", "1c467dec": "HODLrSellWin(uint256)", +"1c4695f4": "link()", +"1c46ab49": "getJetsPriceInUSD(uint256)", +"1c46d9d6": "userSellingTokenOf(address,address)", +"1c4712a7": "getMaxTransactionGasLimit()", "1c47624b": "getUserProductContracts(address)", +"1c47b6ed": "houseCommissionPercentage()", +"1c47d7e5": "getMountedChildren(address,uint256,address)", +"1c47ea53": "soldOnVersion(uint256)", +"1c47ec14": "callInitializeAndTest()", "1c480cb6": "remove(int256,int256)", "1c481767": "sendfrozen()", +"1c483dd8": "TeamCreated(uint256,address)", "1c484766": "aloha()", "1c484a34": "enableSuperDragon(bool)", "1c488825": "MintTokens()", "1c490883": "MelonBitIndex_Erc223Token()", "1c49b101": "_preValidatePurchase(address,uint256,uint256,uint256)", "1c49d19f": "finishRoundC()", +"1c4a29ea": "getCurrencyAssetBaseMin(bytes4)", +"1c4a76c6": "bestYield()", "1c4ad465": "custodyFactory()", +"1c4afc57": "propose(string,string)", "1c4b0da6": "setMinSalePrice(uint256)", "1c4b1ff7": "setGood(bytes32,uint256)", "1c4b774b": "getReward(uint256)", @@ -16253,14 +29634,23 @@ "1c4c2681": "cirusToken()", "1c4c710b": "getAreaIndex(string)", "1c4d5608": "getSchemeParameters(address,address)", +"1c4d65ae": "rebalanceReserve(uint256)", "1c4d749b": "GetContractStateActive()", "1c4e6cd0": "NameReg()", "1c4ef6c2": "ethPriceInEuroCent()", +"1c4f3c7e": "LogServerConvicted(string,address)", "1c4fda10": "tokenSafe()", +"1c501cd4": "sendAndBurnToken(uint256,address,address,address)", "1c50e880": "cancelAuctionHashing(uint256,uint64)", +"1c51390e": "_removeStudServiceAdmin(address)", "1c51a8e0": "setConfigString(string)", +"1c51c691": "MVTToken()", +"1c52b18c": "NIRVANA_POOL_NAME()", +"1c52f3b8": "_mintxBuoyToken(uint256,uint256,uint256,address)", "1c533a09": "Trupee()", "1c535d96": "getuserdayeths(address)", +"1c53625d": "getLastProfited(address)", +"1c53c280": "nodes(uint256)", "1c53faf8": "backSggCoinOwner()", "1c5412f7": "_computeCut(uint256)", "1c54220d": "c_centsPerTokenSecond()", @@ -16268,41 +29658,65 @@ "1c548c78": "foreignBridgeProxyOwner()", "1c54e565": "getNextUserId()", "1c54fbab": "getShip(uint16,uint16,address,address)", +"1c552f00": "getEpochNumber(uint256)", "1c558b71": "ORIUMCOIN()", "1c560f68": "CreatePreSale(address,uint256)", "1c5633d7": "setPeriodLength(uint256)", +"1c56566f": "LogPayDividendsSuccess(address,uint256,uint256,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)", +"1c57b374": "bomb(uint256,address,uint256)", "1c581205": "targetAmount(address)", "1c58c3ff": "totalMineSupply()", +"1c58ce14": "withdrawReserve(address,uint256)", "1c58d0d2": "_unsafeDecodeTokenId(uint256)", +"1c5918d2": "getFundSummary()", +"1c594233": "_sellAmount()", "1c5992ff": "Zandar()", +"1c599655": "rebornItemClass()", "1c59a667": "disableBlacklist(address[])", "1c59c177": "FCCContribution()", +"1c59f3da": "LogMultiplePublicsalesSpecialUsersSet(address[])", +"1c5a0914": "increaseLock(uint256)", +"1c5a27db": "calcFutureValue(uint256,uint256,uint256,uint256)", +"1c5a345a": "changeMinParticipants(uint256)", "1c5a3942": "BPPOL()", "1c5a5a58": "getRandomNum(address,uint256)", "1c5a5bc4": "createShip(uint256,string,uint256,uint256,uint256)", +"1c5a6ed9": "referral(bytes8)", "1c5a9005": "HashRemoved(address,string)", "1c5a9d9c": "activate(address)", +"1c5bddea": "UniSwapReciever(address)", "1c5be3d7": "updateTimestamp()", "1c5ca530": "IprontoToken()", "1c5caa6b": "Rate9()", +"1c5d09b4": "setLucaxPriceForBNB(uint256)", "1c5d3c60": "stateIsWaitingProofs(uint256)", +"1c5d434e": "ChangeDiscount(uint8)", +"1c5d669d": "jackpotwinnerList(uint256)", "1c5d9faa": "setNickname(string)", "1c5daad7": "_maint_withdrawFromPool(uint256)", +"1c5de29d": "BLOCK_DEPOSIT()", +"1c5df1e5": "setRefreshCooldown(uint256)", "1c5eaa23": "findByModuleText(string)", +"1c5ece58": "betBalanceInExaEs(address)", +"1c5ef433": "addRewardPool(address,uint256)", "1c5ef50b": "Rasper()", "1c5f2810": "setnewowner(address)", "1c5f3176": "someMethod4(uint256,uint256,uint256)", "1c5f8675": "getMyTuple()", +"1c5fb52d": "initialize(address,address[],uint256,uint256,uint256,uint256,uint256)", "1c5fe1a4": "TeamAmount()", +"1c605dbd": "isAuthorizedToReceiveSgn(uint256)", "1c606dd3": "GetConstructCost(uint256,uint256)", "1c607f14": "setDynamicArraySize(uint256)", +"1c608349": "decimalsNative()", "1c60a158": "TEAM_TOKEN_AMOUNT()", +"1c60df06": "solids(uint256)", "1c60f3bb": "buyEthCards(uint256,uint256)", "1c61babe": "CelsiusToken(uint256)", "1c61bd38": "showValue()", @@ -16311,13 +29725,21 @@ "1c623ddd": "reward(bytes32,uint8,bytes32,bytes32,bytes32,uint256)", "1c624a60": "qtyInitiators()", "1c624d19": "mintObizcoinTokens(address,uint256)", +"1c62c680": "updateAaveEthAddress(address)", +"1c634190": "ownedZodiac()", +"1c6346ec": "setRewardsAuthority(address)", "1c637987": "_setAuctionStatus(bytes32,uint8)", "1c638376": "setProductAttributesByRegulator(string,string,uint256,uint256,string)", "1c63c6c3": "setPartData(uint256,uint256,uint256[])", +"1c63e719": "f64(uint256)", +"1c63eed3": "getForwarderBalance(address,address)", "1c64065d": "myInfraList(address,uint256)", "1c6416ad": "pubaddr()", +"1c643312": "headerRelayerAddressRecord(uint256)", "1c65706e": "allowInvest(address,address)", "1c657c63": "setEtherInUSDInternal(string)", +"1c65a898": "escapeHatch(address,address)", +"1c666f25": "Brought(address,address,uint256,uint256)", "1c668855": "getGenotype(uint256)", "1c674fba": "createRandomBox(string,address,uint64,uint256,uint128)", "1c67a7aa": "TransCompleted()", @@ -16326,354 +29748,666 @@ "1c6868c8": "adjustBonusPrice()", "1c68fe82": "listProperty()", "1c69ad00": "balance0()", +"1c69b827": "usdcAllowance()", "1c6a0cf8": "GuangPengChain()", +"1c6a4772": "getTaxTierDefaultFee()", +"1c6a5dbb": "createToken(string,uint32,address,uint256)", "1c6a866c": "Collect_accrued_interest_and_transfer(address,uint256)", "1c6b69b7": "rateCent()", "1c6b7c1d": "EtherTransfer(address,address,uint256)", "1c6ba386": "_claimReward(address,uint256)", +"1c6bacdf": "addToDebtRegister(bytes4,uint256)", +"1c6bbabc": "getOperatorsPending()", "1c6be97d": "allowanceRewriteTest(address)", +"1c6c6e28": "draw1()", "1c6ce9a3": "executeSendCapital(address,uint256)", "1c6d31f7": "xxx()", "1c6d4575": "getTokensAmountAllowedToWithdraw(uint256)", "1c6d6483": "approveMappingProposal(address)", +"1c6dd45a": "verifyVaultNextPrice(uint256,uint256)", "1c6debbb": "UnionChainSupply()", "1c6e3899": "getTierId(uint256)", +"1c6eac0e": "NameRegistered(string,address)", +"1c6ebf86": "cb()", "1c6ef374": "recordingResultsOfBet(bytes32,bytes32[],uint8[])", "1c6f609b": "cooperativeClose(address,uint32,uint192,bytes,bytes)", "1c6f634e": "oracleItQuery(string,string)", +"1c6fcf7c": "getSimulatedDailyIncome(uint256)", "1c70362c": "setSettingValues(uint8,uint8,uint16,uint16,uint16,uint16,uint16,uint8,uint8,uint32,uint32,uint8)", "1c7040cc": "setProxyCurator(address)", +"1c70f5c2": "createContractGrey(string)", "1c7106e6": "setOracleAPIAddress(address)", +"1c711221": "SetAntAddress(address)", +"1c713098": "setDevaluationPeriod(address,uint256)", +"1c71dbef": "readReward(address,uint8)", "1c7276f5": "updateLuck(uint256,uint8)", "1c72961d": "setRandomSign(address)", +"1c729b09": "getPhasePercent()", "1c72e225": "transformSeedToFlower(address,uint256)", +"1c72fb5e": "withdraw10k()", "1c7307f4": "get_topl_address(address,address)", "1c732d83": "centsToWei(uint256)", "1c73561f": "jobCompleted(bytes16,address,address,uint256,uint256)", "1c73601e": "getUncorrelatedRN(uint256)", +"1c73e1d0": "Extended(uint256)", +"1c7411a1": "userSubordinateCount(address,uint256)", +"1c7474c0": "approve_587(address,uint256)", +"1c74a301": "receiveOwnership()", "1c74d5c8": "Successor(address,address)", "1c7564cb": "DWMP()", "1c75b6b2": "setDevFee(uint256)", +"1c75cfb4": "currentID()", "1c75f085": "teamAddress()", "1c761245": "buyDOTCH(uint256)", "1c762a27": "show_Balance_of_interest_bearing_deposit(address)", +"1c76dc4e": "generateSVGCurveCircle(int8)", "1c76e2b2": "getOrderBookKey(uint256)", "1c77a4ec": "Lemmon()", "1c77c58c": "collectRoundLength()", +"1c77ff04": "slash(bytes32,uint256)", +"1c789b59": "ons()", +"1c791f97": "dummyConfig()", +"1c795fb5": "WhiteList(uint256)", +"1c796a1f": "priceChanged(uint256,uint256)", "1c7a08ef": "isActivate(uint256)", "1c7a39e2": "_distributeRewards(address,address,uint256)", "1c7a3c9d": "setExchangeContractAddress(address)", "1c7a3d31": "updateNextOrderUser(address,address,uint256,address,address)", +"1c7abd8c": "pendingFromSharePool(address)", "1c7b10aa": "merkleTreeRoots(uint256)", "1c7b530a": "secondTotalSupply()", +"1c7bc4d8": "getUniswapExhangeAddress(address,address)", "1c7bfdce": "test_votingWhenCertified()", +"1c7c37f7": "GetDebt()", "1c7cf44c": "claimCommit(bytes32)", +"1c7d09e5": "catnipV2LP()", "1c7d5334": "DORCoin(address)", +"1c7d5c42": "husbandAddress()", +"1c7da278": "mint(string,string,uint8,uint8,uint256)", +"1c7e6e78": "__BaseTokenUpgradeable_init(address,uint256,string,string,uint256,string)", "1c7f3a96": "getMarketCreatorSettlementFeeDivisor()", "1c7f578a": "mintC()", "1c7f6942": "getPlayerSpaceshipModelByIndex(address,uint256)", "1c7f98ca": "getRunInfo()", +"1c7fe07f": "getBalance(address[],address)", "1c800d64": "insert_helper(uint256,bool,uint256)", +"1c8050c7": "setStakingAccount(address)", "1c81525c": "NitinToken()", "1c81bcfb": "dividendPathways()", "1c81ed15": "raiseSupply(uint256)", +"1c824905": "nextPositionID()", +"1c827204": "setLendingPoolCoreImpl(address)", +"1c8272be": "refLevel3_()", "1c8293c4": "PriceChanged(uint256,uint64)", "1c82a013": "onOffCrowdSale(bool)", +"1c8399ec": "KyberTrade(address,address,uint256,address,address,uint256)", +"1c843a34": "setMeasurementFee(uint256)", "1c844171": "bakkaToken()", +"1c846d59": "setBeneficiary(uint256,address)", "1c8499e5": "greeter()", "1c857765": "sumElements(uint128[])", +"1c858808": "UpdateDelegateKeyEvent(address,address)", "1c85d890": "productListing(bytes32)", "1c85ee51": "getBasicIncome()", "1c8670fc": "endEarlyStage4()", "1c8685e0": "WXSLToken(uint256,string,string)", +"1c86f2e3": "getContractPricePath(bytes32)", "1c87055f": "Fund(address,address,address,address,address,address,address,address[])", "1c870eee": "setUserPermission(address,bytes4)", +"1c8729d4": "pendingNTS(uint256,address)", "1c878c97": "releaseLockAgencyLock1()", "1c879c47": "getMarketHashes(bytes)", +"1c87dd1d": "getThird()", "1c87deec": "returnTokenDepositState(address,bytes32)", +"1c885bae": "unfarm(uint256)", +"1c893ef9": "SetFactory(address)", "1c895915": "getNumberOfPayments(uint256)", "1c89f174": "calculateUserBid()", +"1c8a0462": "tokenSwapAfterVerification(address[],uint256[],uint256)", "1c8a1e20": "membershipAddress()", +"1c8a253e": "processSlashes(address,uint256)", "1c8a3821": "AllocateFounderTokens(address)", +"1c8a60e0": "removePausableException(address)", "1c8a7795": "archiveText(string)", +"1c8aa5fa": "setGasLimitOracle(address)", +"1c8b232d": "hasSaleStarted()", +"1c8b453f": "BUCKET_STEP()", "1c8c4509": "addSiteSet(uint256,uint256)", "1c8ca56d": "stopSelling(bool)", +"1c8cb9ac": "BALPerBlock()", "1c8cba3b": "getSubjectClaimSetSize(address,uint256,uint256)", "1c8ce890": "disburse(address)", "1c8d25bc": "proposed_beneficiary()", "1c8d51e6": "getSentAmount()", "1c8d5d38": "allowance(address,address,bytes32)", "1c8dddbd": "editContributors(address[],uint256[])", +"1c8de8f9": "bitBaseInitialLiq()", +"1c8e8568": "whitelistDisabled()", "1c8e9a6f": "commitWork(uint256)", "1c8eac0f": "endFunding()", +"1c8ec0ce": "priceaddress()", +"1c8ee7de": "getTokenForETH(address,uint256)", "1c8f7570": "depositLogic(address,uint256,uint256,uint256)", +"1c8fefb7": "FinalizeFailure(uint256,address,uint32,string)", "1c90e9cf": "testwallet8()", +"1c911ffd": "yourStakedTED(address)", +"1c918215": "componentStorage()", "1c9193c0": "TakeOut(uint256)", "1c91a6b9": "startExit(uint256,bytes,bytes,bytes)", "1c921e16": "claimHeirOwnership()", +"1c9242e5": "referalShare()", "1c92b497": "crowdsaleInitialSupply()", "1c92cab2": "auto_transfect(address[])", +"1c92dbcc": "MainIco_Cap(address)", +"1c92ff57": "transferAll(uint256,uint256[])", "1c931313": "setDesignatedReportDueTimestamp(uint256)", "1c931439": "getLockedContractAddress(address)", +"1c933cd0": "swap2DMSRouting(uint256)", "1c933e2f": "multiplyDecimalRoundPrecise(uint256,uint256)", +"1c940d51": "proposeScheme(address,address,bytes32,bytes4)", "1c946642": "intellisys()", +"1c9486ef": "getValidatorShareAddress()", "1c949bdf": "setEtherollAddress(address)", +"1c9564a0": "burnWithNote(uint256,string)", +"1c9566fb": "initiateSmartContractValue(uint256)", +"1c957aa8": "Halflife(uint256,uint256,uint256)", "1c95b42e": "payBonus()", "1c95c89d": "authorizeForToken(address,address)", +"1c965cca": "AllowOwnership(address)", "1c96b242": "balanceOfReal(address)", +"1c96d611": "view_portfolio_allocation()", "1c96ef03": "Presale(address,address,address)", "1c9713bd": "transferTobucketOneContract(address)", "1c973c57": "getSpecialityValue(uint256)", +"1c975a61": "defaultGameAvailable()", "1c982066": "refreshGameTime()", "1c983347": "maxBidPercent()", "1c98680f": "_redeemByDefaultTranches(address,address,uint256,bytes,bytes)", +"1c989390": "conversions(uint256)", "1c990670": "realDividends(address)", "1c991783": "mintUniqueTokenTo(address,string,uint256)", "1c997344": "createBid(bytes32,address,uint256)", "1c9981f8": "donate(address,address,bytes4)", "1c99d341": "removeParty(uint256)", +"1c9a2e9e": "comethPosition(address)", "1c9a5ddf": "returnBox()", "1c9ab3ad": "getBlockData(uint256)", "1c9ad79d": "newCampaign(string,address,uint256,uint256,address)", +"1c9aea38": "calculateNewManagerAddress(string,string,uint256,uint256)", "1c9b612e": "ledTokensAllocated()", +"1c9b75f9": "InvestCommission(uint256)", +"1c9bba97": "swapTokensToBUSD(address[],address,uint256,uint256)", +"1c9c4408": "iBZRXWeightStored()", +"1c9c52ab": "confirmDevAddress()", "1c9c549d": "buyEggPrice()", "1c9cae74": "removeScore(uint256,uint256)", "1c9cafd7": "tan(int256)", +"1c9ccfe5": "approve_394(address,uint256)", +"1c9cef04": "cashbackPercentage()", "1c9cf54c": "getStockAmount(address,uint256)", +"1c9d7eb3": "log(uint256,bool)", +"1c9e379b": "userCollateralShare(address)", +"1c9e742e": "cancel(uint256,bytes)", "1c9e9999": "migrateDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", "1c9f289d": "setCCH_edit_6(string)", "1c9f369e": "purchase_propose(uint256)", "1c9fbb11": "finishPreSale3()", +"1c9fde7a": "manuallyBalanceAdd(address,uint256)", "1c9fe5d7": "BRONZE_AMOUNT_TPT()", "1c9feaa5": "isExecuted()", "1ca0076c": "multisend2(address,address,address[],uint256[])", "1ca03b8e": "senderHasRole(string)", "1ca0a28d": "multiTransfer(address,address[],uint256[])", +"1ca19337": "setNameKeyFee(uint256)", "1ca19ece": "IsaDalawa()", +"1ca19f19": "getUserCurrentBorrowRateMode(address,address)", +"1ca1e492": "reservesAdd(uint256,uint256)", +"1ca22ea5": "updateFarm(bool)", +"1ca256c8": "getOptionPrice(uint64,uint64)", +"1ca2843d": "setAllAuthorized(bool)", "1ca2d6b7": "WalletChange(address,uint256)", "1ca2e94a": "setPresalePhase(uint8)", +"1ca2f26c": "unindex0()", +"1ca341ed": "emitNominAdded(bytes4,address)", "1ca3630a": "updateComponent(string)", "1ca3d4b7": "icoPhase4End()", +"1ca4358f": "testSupply_basicValidations()", "1ca4399b": "DEV_TEAM_HOLDER()", "1ca43cef": "ADMISSION_TIME()", +"1ca45818": "fixFee()", "1ca46d61": "bigChicken()", +"1ca51b85": "combCardInfo(uint32)", "1ca5df03": "multiVesting(address[],address,uint256[],uint256[],uint256[])", "1ca60aeb": "setMeltingContract(address)", +"1ca66922": "migrateAndExit(address,uint256,uint256)", +"1ca72800": "reflectAccumulated(address)", +"1ca7434a": "setPoolProxyAddress(address)", "1ca750f4": "privateSaleTokensSold()", "1ca7bcc7": "toBytes32(bytes,uint8)", +"1ca7cd45": "_setInitialTimelockInterval(bytes4,uint256)", "1ca84592": "RA(address)", "1ca84efc": "secondTTaxAmount()", +"1ca88f0f": "createCaseFee()", "1ca89953": "batchFund(uint16[])", "1ca8b6cb": "totalTokenSupply()", +"1ca8c789": "onOffered(address,uint256,address,address,uint256)", +"1ca97a2d": "bzrxRewards(address)", "1ca9ad47": "createLockingTokenVaults()", "1ca9fb9d": "updateContract(uint256,uint256,uint256,uint256)", "1caa0c6d": "saleExchangeRate5()", "1caa5ccb": "startDapp(address,address)", +"1caa62d1": "sendTransac()", "1caaa487": "tokenOwner(uint256)", +"1caab55d": "setPerParam(uint256)", +"1caafcf1": "getEmployeeDetails(address)", +"1cab19c0": "PegETHUSD(uint256)", +"1cab59a4": "getBeneficiaries(address)", +"1cab801c": "rebaseMintPerc()", "1caba41f": "decimalUnits()", +"1cabc527": "minColRatioMap(address)", "1cabc5ed": "userVoteFor(address,uint256,uint256)", "1cabc785": "getPlayerDefend(uint256)", +"1cabd25a": "defaultGameId()", "1cabe3ef": "pethPEReth(uint256)", +"1cac0e9c": "RatePlanPriceChanged(uint256)", +"1cac0eca": "setNftParamsRange(uint256,uint256,uint32,uint32)", "1cac31d7": "setAdvisorsTokensWallet(address)", +"1cac57ec": "delegatorClaimReward(address)", +"1cac5801": "addSubAdmin(address,uint256)", "1cac7b7f": "MINERTA()", "1cad5a40": "depositERC20(address,address,uint256)", "1cadd93e": "initPlayers()", +"1cae0cc2": "get90DaysReturnPercentForETH()", +"1cae2ada": "moneyCollectedAll()", "1cae7c2f": "TransferCoinsEther()", "1cae947a": "firstPrivateLockedAmount()", "1caf1752": "Coinvilla()", "1cafc144": "distruggi()", "1cb07902": "mintMore(address)", "1cb08889": "MERIDIANERC20(string,string)", +"1cb0c3e7": "getBorrower()", "1cb0d481": "transferTokens(address,uint256[],uint256[])", "1cb120d6": "ENSRegistry()", +"1cb1363b": "Top3DoiChayNhieuNhat()", "1cb1778a": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[])", +"1cb1f515": "SendJackpotSuccesss(address,uint256,uint256)", "1cb20fe6": "Devcoin()", +"1cb228df": "setMill(uint256,uint256,uint256,uint256,uint256,uint256[],bytes32)", "1cb252fe": "investorsTotal()", "1cb2dbf6": "Reduction(string,address,uint256,uint256)", "1cb3bbc0": "updateGlobalUnlockTime(uint256)", "1cb3d9be": "grantEditorRights(address)", +"1cb44dfc": "updateOracle(address)", "1cb5bfc4": "LogBet(bytes32,address,uint256,uint256,uint256,uint256)", "1cb64196": "ethStore()", "1cb6adec": "tubFab()", "1cb6d99a": "buyTokensOthersCoins(address,uint256,string,string)", +"1cb6ee36": "nativeTokenInstance()", "1cb78879": "TitleDelisted(uint256)", +"1cb7fef2": "LogAddPullRequest(bytes32,bytes32,uint128)", +"1cb8126e": "_dropVenusMarket(address)", "1cb82d79": "registrarOwner()", +"1cb8d206": "nsDivRate()", +"1cb9579c": "lastTopInvestors(uint256)", "1cb9a02a": "calculateScore(uint256,uint256)", +"1cb9a9e2": "_getTokenPrice(address,address)", "1cb9ce63": "makeCall(address,bytes)", +"1cba1aa7": "onxStartBlock()", "1cba6f79": "_isERC721Contract(address,address,uint256,bytes)", +"1cba727c": "suspendSynthsExchange(bytes32[],uint256)", "1cbaaea7": "set_payment_details(uint256,string)", "1cbaee2d": "saleStartTime()", +"1cbb04b3": "pooIndexToApproved(uint256)", +"1cbb0f87": "RemoveParty(address)", "1cbb67c4": "FooUser(address)", "1cbc5ab1": "Buy(address,uint256,uint256)", "1cbcb9b9": "BellaBluToken()", "1cbcc77c": "test_suicide()", "1cbd0519": "accountLevel(address)", +"1cbd4656": "getInviterAddr()", "1cbda93d": "p_update_mResalePlotDevPercent(uint256)", +"1cbdb737": "_onBoardUsdt()", +"1cbe482d": "votingTime()", "1cbea83d": "proposalReason(uint256)", "1cbea99b": "getAddress(address[],bool,bool)", "1cbeae5e": "winner(uint256)", +"1cbee4c5": "transferFromPreSigned(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"1cbf26fd": "Invested(address,string,uint256,string,uint256)", "1cbfbe47": "assignTokensToMultipleInvestors(address[],uint256[])", +"1cc087d9": "judge(bytes32,bytes32,uint256)", +"1cc0bd61": "issueRebalancingSet(address,uint256,bool)", "1cc0eb83": "kickcityWallet()", +"1cc1137b": "getRewardUsdt()", "1cc13dff": "totalplayers()", +"1cc1472d": "moveEth(address,uint256)", +"1cc14cbc": "isDevelopment()", "1cc1cf46": "paymentInterval()", "1cc1e7bc": "appendPacket(bytes)", +"1cc1f91a": "amountCrowdWithdraw()", "1cc2502e": "auctionList()", +"1cc29e19": "newRivendale(address)", +"1cc2ae46": "computeDeveloperCut(uint256)", +"1cc2c911": "purchaseToken(address,uint256)", +"1cc37e1a": "settleRaffle(uint256)", +"1cc39ac4": "setPoolRewardAddr(address)", +"1cc3d509": "LogRentsOut(uint256,uint8,uint8,uint8,uint8,uint256)", +"1cc464fe": "getClaimState12Count(uint256)", "1cc47026": "trans(address,address,uint256,uint256)", "1cc48f08": "getResolverAllowance(string,address)", +"1cc4dc35": "canWalk()", "1cc54204": "totalGenesisAddresses()", +"1cc5bc5b": "NMP_DONATED_PURCHASE_PERCENT()", "1cc69ac1": "assignNewParcel(int256,int256,address)", +"1cc6a355": "flashEnd()", "1cc6ba74": "testWIP()", "1cc6ea05": "populateStringMember()", "1cc6f13d": "setComplianceService(address,address)", "1cc70934": "getPolicyLockedPercentage(uint8)", +"1cc72868": "tokenCostPerPack(address)", "1cc72c04": "CheckPoolOwnership(string,address)", +"1cc74859": "mintFrom(address,uint256)", "1cc78eb6": "RANGEEND_1()", +"1cc7e151": "calcUserStakeAndInterest(address,uint256)", "1cc8092f": "FOURTH_TIER_DISCOUNT()", +"1cc8365a": "addrETHUSDpriceFeedXDAI()", +"1cc844bc": "deleteEvent(bytes32)", +"1cc8592e": "approve_600(address,uint256)", +"1cc88afc": "updateTier(uint8,uint256)", +"1cc88eda": "getLastUserLocation(address)", +"1cc8dad0": "cgd(address,uint256)", +"1cc9bb21": "transferCreator(uint256,address)", "1cca13d3": "is_watched(address)", "1ccb2601": "FoodWithdrawEvent(address,address,bool,uint256,uint256,uint256)", +"1ccb6805": "DisableTransfer(address,uint256)", "1ccc7013": "setPriceAt(uint16,uint16,uint8,uint256)", "1ccd2706": "CatholicCoin()", +"1ccd99d9": "LogAirdropClaim(address,string,bytes32,bytes)", +"1ccdf10a": "user_details(address,uint256)", "1cce70d4": "getHowManyWinners()", +"1ccea71b": "saleWallets(uint256)", +"1cced51b": "getDistribution()", +"1cceddac": "setRebaseRewardUSDx(uint256)", +"1ccf2275": "updateDestroyAddress(address)", "1ccf6955": "getBets(uint256)", "1ccf8abe": "phiWon()", +"1ccfe470": "closeFarm(uint256)", +"1ccfe5b8": "dailyOLDMix(uint256)", "1cd01e3a": "collectPercent()", "1cd07895": "DmlToken(address,uint256)", "1cd0b87f": "B33RToken()", +"1cd14f31": "numeratorSwapTime()", +"1cd1c864": "getVerifierEnabledActive(address)", +"1cd1c9f7": "updateOrAddTeamAddress(address,bool)", "1cd23711": "nouveauContrat(address,address[],uint256[])", +"1cd2b37c": "getUtpdu()", +"1cd2d0a3": "_BurnRate()", "1cd30149": "paybackRequired()", "1cd3072b": "transferSub(address,address,uint256)", "1cd30a3a": "randomGen(bytes32,uint256)", +"1cd328bd": "aoRemaining()", +"1cd33c20": "kingOfTheMountain()", +"1cd3b6c6": "patientRegister(bool,uint256,address,uint256,bytes32,bytes32)", "1cd3b754": "preICOcoinsLeft(uint256)", "1cd421cc": "Show_Product(uint256,uint256)", +"1cd4292d": "amount_counting()", "1cd45773": "getruns(address)", +"1cd4cdd8": "revalue(uint256,uint256)", +"1cd4d632": "_onBoardDai()", +"1cd556d5": "liquidateLong(bytes32,uint256)", "1cd58891": "requestRedemption(uint256,uint256,bool)", +"1cd5d31e": "mssToLp0Route(uint256)", +"1cd5d37f": "getTokenAccepted()", +"1cd5f26c": "get_dark(uint256)", "1cd60a85": "setFiscal(bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"1cd61320": "Sold(bytes32,uint256,address,address)", +"1cd61bad": "EIP191_VERSION_DATA()", +"1cd65ae4": "g(uint256,uint256)", "1cd732c1": "currentEthPrice()", "1cd73845": "updatePremiumCalculator(address)", +"1cd7447d": "onkill(uint256,string,string)", "1cd76498": "crossForkFund()", "1cd8b96c": "poolDLock()", "1cd8d8a9": "checkTeam(address)", "1cd95d2a": "_freeze(address,uint256,uint8)", +"1cd98235": "getObjExp(uint64)", +"1cd99adf": "EMERGENCY_COOLDOWN_PERIOD()", +"1cd99fb9": "contractAgent()", "1cda37f2": "eraseRecords(bytes32)", +"1cda4a8d": "POOL_REGISTRY()", +"1cda95d5": "getHatByID(uint256)", +"1cda9e59": "checkPropertyValue(address,bytes32)", "1cdadfae": "balanceNotEqual(address,uint256,string)", +"1cdae8a3": "recoverERC20Amountv1(address,uint256,address)", "1cdb0989": "getMaxEmpruntable(address)", "1cdb8571": "left2(uint256)", +"1cdbac20": "startChangeMinClaimTime(uint256)", +"1cdbc4af": "lesserThanIntFailTest()", +"1cdc11bc": "Setup(uint256,address)", "1cdc3f8a": "STQPreICO(address,address)", "1cdc51e7": "requestRates()", "1cdce200": "walletOne()", +"1cdd1d62": "cheng(uint256,uint256)", +"1cdd82dc": "rebaseFactor()", +"1cdda912": "doSwap(string)", +"1cdde67b": "Closed()", "1cde0ff0": "withdrawScamEarnings()", "1cde3cde": "BDIToken()", "1cdeae52": "setSynopsis(string)", "1cdef3ed": "agree(uint256,address)", +"1cdf1357": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[7])", +"1cdf74e9": "DIGIHATS_PROVENANCE()", +"1ce00ba2": "requireExchangeBetweenSynthsAllowed(bytes32,bytes32)", "1ce00c50": "registerUnlock()", +"1ce03f38": "getCdpsAsc(address,address)", "1ce10a9d": "get_Sponsored_Amount_in_Job_By_Address(uint256,address)", +"1ce19185": "abortByTimeOut(bytes32)", "1ce1e1b8": "White(address,uint256)", "1ce26ecd": "addOwner()", "1ce26faa": "fundingEndsAt()", +"1ce28765": "Owner_StartNewRound()", "1ce28e72": "getLimit(address)", +"1ce30181": "ERC1271_RETURN_INVALID_SIGNATURE()", "1ce30927": "getOption(uint256,uint256)", +"1ce369a4": "mintHegexoption(address)", +"1ce3fc97": "MatchCreated(uint8)", "1ce477d8": "createTransferEvent(bool,address,address,uint256)", "1ce48441": "getrm()", +"1ce48f3d": "getCoverSumAssured(uint256)", +"1ce49974": "createCard(uint256)", +"1ce4c78b": "protocolFeeMultiplier()", +"1ce5400e": "decisionsList()", "1ce5e9a6": "getOption(uint256)", "1ce62383": "expected()", "1ce624d6": "Crypted_RPS()", "1ce6717d": "CouponDeposit(address[2],uint256[8],uint256)", "1ce6a810": "KBKJToken()", +"1ce6fbb7": "numberOfBlock()", "1ce7d9da": "ico_finish()", "1ce7eff3": "bytecodeAt(address)", "1ce817ab": "NoWinner(address,uint256,int256,string)", +"1ce82ad0": "getMintCountOfCycle(uint256)", +"1ce87168": "payoutNoReviewer(address,uint256,address,uint256,bytes32)", +"1ce87fbd": "hasTransactionId(uint256)", +"1ce8935f": "client_provisioned_ID(uint256)", +"1ce9da3c": "govClose()", +"1ceae42f": "getNodeLevel(uint256)", +"1ceaf0dd": "setNew()", "1ceb1b87": "setCanAcceptTokens(address,address)", "1ceba89b": "getH3Bidder()", "1cecb935": "isSignedNoEnc(uint16)", "1ced2c75": "SpritzCoin()", "1cedf8a3": "getDarknodeOwner(address)", +"1cee0700": "contributions(uint256)", "1ceea715": "GetMyInvestFee()", "1cef2b4e": "TokenCreated(address,uint256)", "1cef3c13": "StandardTokenFreezer(address)", +"1cef7c37": "sendToSafeWalletPercentage()", "1cef92b1": "getRewardStatus(address)", +"1cefbac1": "updateSequenceDays(address,uint256)", "1cf081f6": "changeProductionFee(uint256)", "1cf190b0": "getAvailableInvestmentsBackValue(address)", "1cf196df": "changeCommissionFee(uint256)", "1cf19ad7": "Mundo()", "1cf1bb72": "releasedAmount(address)", +"1cf1e3ff": "refundOtherTokens(address,address)", +"1cf1f4ba": "getPlayerData()", "1cf25dc9": "incentivisingAddress()", "1cf28a65": "expand()", +"1cf28a8f": "updateSettingAddress()", "1cf28ae3": "_bonusTime1()", "1cf2de25": "MinterUpdated(address,address)", +"1cf33e74": "setResetFee(uint256)", +"1cf3a96f": "getTotalInStakeWithFinished()", +"1cf3cf31": "consultOneWithdraw(uint256,address)", "1cf3d16d": "LogRegularityConfirmation(address,bool,bytes32)", "1cf41a81": "deployContract(uint256)", "1cf43b63": "extractExportFeeChargeLength()", +"1cf4be11": "transferContractFunds()", "1cf52f2b": "isActiveRegistrant(address)", "1cf57f67": "future_round_coins()", +"1cf580eb": "setMintRate(uint256,int256)", "1cf67724": "getImplChangeReq(bytes32)", +"1cf6ef35": "_validAddress(address)", "1cf73c13": "setStake(uint256,uint256)", "1cf74ece": "left56(uint256)", +"1cf7549c": "votingIntervalParameter()", +"1cf754f1": "_sendNFTs(uint8,address,uint256,address)", +"1cf75710": "registerPack(uint256,uint256,bytes4[],address,bytes,uint256)", +"1cf7652f": "Changed(string)", +"1cf7955d": "getVoucherPaymentMethod(uint256)", +"1cf85046": "BELTPerBlock()", "1cf91bf2": "setOwnerAtomsCount(address,uint256)", +"1cf99a5c": "_timelock_address()", "1cf9c88a": "addAction(string)", +"1cfa32ab": "seContractAddress(address,address)", "1cfa42d0": "isReleaseRecordExist(uint256)", +"1cfa8021": "trustedDepositTokenAddress()", "1cfa8e65": "_requireBalance(address)", +"1cfab290": "reserveWeight(address)", "1cfac68e": "BitSelectModerado()", "1cfb4e1b": "InsureShares()", "1cfb7c9a": "ifAllowed(string,address)", +"1cfb7e3c": "ReverseVote(string,string)", "1cfbc7d0": "finalRewardPeriodEndBlock()", "1cfc832e": "invalidateProposal(bytes32,bytes32)", +"1cfc8366": "returnedDai()", "1cfcc5bb": "checkGameSideAmount(uint256,uint256)", "1cfce386": "calculateTarget()", "1cfd11d5": "getDungeonDetails(uint256)", +"1cfd91ae": "offerMaskForSale(uint256,uint256)", +"1cfda1d2": "didEventNum()", +"1cfddd18": "debtAddRate()", "1cfdf90e": "updateWinnersList()", "1cfe04a7": "canPay()", "1cfe699e": "getFreezingSummaryOf(address)", +"1cfee813": "setMaxLiq(uint256)", "1cfef64c": "SEELE_TOTAL_SUPPLY()", "1cff272e": "show_Accrued_Interest(address)", "1cff3e09": "testCreateBallotContract()", "1cff79cd": "execute(address,bytes)", "1cff87db": "burnMyQUATransferAndSendQUAToSomeone(uint256,address)", +"1cffad16": "clearInt()", +"1cfff51b": "stakingEnabled()", "1d000b61": "BNT_TOKEN()", "1d007f5f": "changeDAO(address)", +"1d008652": "setMaintenanceModeAll(bool)", "1d010815": "createSaleAuctionERC20(uint256,address,address,uint256,uint256,uint256)", "1d012c8e": "gameIsOver()", +"1d01364c": "depositedAmount()", +"1d016117": "SellFci(address,uint256,uint256,uint256)", "1d017b28": "setUnownedNumOfExoTokensBonus(uint256,uint32)", "1d0192e1": "editEntity(address,bool,bytes32)", +"1d01e1f3": "newRequestForInspection(address,string,string,string)", "1d01ee9d": "BPX_per_ETH()", "1d0205b8": "months(uint256)", +"1d024556": "compliance_pass()", +"1d0257a6": "consultLP(address)", "1d029641": "rntTokenVault()", "1d02fb06": "nCryptToken()", +"1d032dd6": "setcoins(address,address,address,address,address,address,address,address,address,address)", +"1d03693a": "marketEpochPeriod(address)", +"1d0373ad": "pendingInvites(address)", "1d03842f": "onePlus(uint256)", +"1d040ada": "TransferDisabled(bool)", "1d048136": "setBaseStamina(uint256)", "1d04c92b": "appendKeyValue(string,int256)", +"1d04eb17": "checkBuyOrder(address,uint256,uint256,uint256)", +"1d056de6": "burnDDai(uint256)", "1d05bcb3": "dividendsRound()", "1d05c57e": "_createCobeFriendWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", "1d05d1d8": "refundContributorEnd()", +"1d05e1fb": "restake(address)", "1d065dde": "_transferWithReward(address,address,uint256)", +"1d067455": "networkSetting()", "1d075862": "getUpgradeProposals()", +"1d078bbb": "announceAvailabilityVerifierRemovalIntent(address)", "1d079c20": "IETToken(address)", +"1d07b17d": "_verifyBorrowAmount(uint256)", "1d07b797": "destroyTheUniverse()", "1d0806ae": "initialPrice()", +"1d086308": "feeCharge(address)", "1d08837b": "setBaseRate(uint256)", +"1d08fa79": "cacheClientBV(uint256)", +"1d08fad4": "getPositions(address[],address,address,address)", +"1d092adf": "addCheckpoint(address)", +"1d095805": "setOperatorFee(uint256)", "1d09ba2c": "right15(uint256)", "1d0a3cb8": "suspendedPayments()", +"1d0a4831": "validGeohashChars(bytes)", +"1d0a82df": "bpow(uint256,uint256)", +"1d0ad07e": "sushi_yvecrv_poolId()", +"1d0b482f": "TokenPerETHSell()", "1d0ba36e": "transferToPartner(address)", +"1d0c02b9": "numberCakeToUpdate()", +"1d0c2a97": "CloseGame(uint256,address,address,uint8)", +"1d0ca6c6": "abbreviation()", "1d0cc1e7": "fullfillTeamAddress()", +"1d0cce4c": "addrOf(uint32)", +"1d0cd4c6": "banCounter(address)", "1d0ced55": "IonicCoin()", +"1d0cf683": "ecosystemFund()", +"1d0d17df": "deposit(address[2],uint256[],uint256[])", +"1d0d30e9": "tokenUniswapPairETH()", "1d0d35f5": "isContributor(address)", +"1d0d36ff": "unfreeze(uint256,bytes)", "1d0d5992": "transferBetweenUsers()", "1d0e8a4d": "isShop(address)", "1d0f2c99": "setTarget(uint256,uint256)", +"1d0f84f7": "updateRewardContract(address)", +"1d0fa032": "percentExecutor()", "1d103139": "commissionCheck()", +"1d1041ce": "maxIncomeMultiple()", +"1d1065d5": "supplyRateMantissa()", "1d107603": "totalInitialBalance()", +"1d10b397": "nonProfitTipMax()", +"1d10f231": "give(address,uint256,address)", "1d111d13": "withdrawBNB()", +"1d112001": "setDeleverAmtFactorMax(address)", +"1d113f34": "checktimediff()", +"1d121715": "changeGlobalHalt()", "1d121dfe": "communityGrantsAmount()", +"1d1225bb": "m_FIX_POINT()", "1d123801": "airDropNum()", +"1d124dfc": "refuelBountyBps()", "1d124fe4": "setUtils2(address)", +"1d125539": "workAdopted(string)", "1d128687": "myDividendsNo()", "1d12b52f": "AKBToken()", +"1d12f28b": "debtThreshold()", "1d130935": "isSuspended()", +"1d137d44": "getUnavailableAmount(bytes32)", +"1d13f1ce": "penaltyGracePeriod()", "1d143848": "issuer()", +"1d14d001": "log(bool,address,address,address)", "1d14e5ff": "crowdSaleDonate()", "1d153624": "CIBNLiveInteractiveToken()", +"1d1537e5": "payC(address,bool)", "1d15f317": "SUFFICIENT_STATUS()", +"1d1651d6": "UniSwapSAIExchangeContractAddress()", "1d16d1bb": "setComponent(string,address)", "1d16d9a0": "sendETH()", +"1d1820e9": "isRequesterForRequest(address,uint256)", +"1d184233": "testBytes32()", "1d184872": "lastrandom()", "1d18ee83": "getCurrentHardcap()", "1d1997a0": "lengthNotEqual(int256[],uint256,string)", @@ -16684,20 +30418,30 @@ "1d1a7c32": "concat(bytes,bytes1,bytes,bytes1)", "1d1ac66a": "signOut(address)", "1d1ada90": "manuallyAssignTokens(address,uint256)", +"1d1b2ca4": "DeletePatientById(uint256)", +"1d1b7db4": "AMBBridgeContract()", "1d1ca65b": "BROKER_RESERVE_ADDRESS()", "1d1cc622": "CurrentDistribPublicSupply_()", "1d1ce884": "VoteCommitted(address,uint256,uint256)", +"1d1d15d4": "squares(uint256)", +"1d1d4305": "transferTokenAmount(address,uint256)", "1d1eda5e": "setBonusesForTimes(uint32[],uint32[])", "1d1eff42": "AccessRevoke(address)", +"1d1f7578": "Bigdata(address,uint256)", +"1d1f7855": "numElectricityDemands()", "1d1fe108": "burnInvestorTokens(address,uint256)", +"1d1fe8f7": "buychips(uint256,address,uint256)", +"1d2002e7": "updateRefPercentage(uint256)", "1d209605": "Controllable()", "1d20a9c9": "setCardActive(bool)", +"1d2118f9": "setReserveInterestRateStrategyAddress(address,address)", "1d211d74": "tokensToSale()", "1d21f252": "getInvertedPrice(address)", "1d222b77": "UserUpdate(address)", "1d231b2c": "_blackListed(address)", "1d24190c": "GetGiftInfo(string)", "1d24310d": "setTransferMode(bool)", +"1d24cdc6": "deposit5(uint256)", "1d2531f3": "is_alive()", "1d25a5eb": "CGToken()", "1d25bba2": "addSomeCWCsTo(address,uint256)", @@ -16705,24 +30449,44 @@ "1d2627bb": "setEidooWallet(address)", "1d263b53": "callSecondTarget()", "1d263f67": "flip(bool)", +"1d26477c": "agreeToAcceptOwnership(address,bool)", +"1d2653b7": "seasonalNumberStart()", +"1d26868f": "swap(bytes32,bytes32,address,bytes32,uint256,uint128)", +"1d2747d4": "set_approve_deposit(address,bool)", "1d27769f": "participate(string)", +"1d27af68": "burnERC20(address,address,uint256)", +"1d28571f": "maximalDeposit()", "1d289e57": "regulationsFulfilled()", +"1d28b199": "getBitProRate()", "1d291990": "getNumberOfBid()", +"1d2934a4": "getHeroLuck(uint256)", "1d293500": "gamePayOutWinner(address)", "1d296e8d": "geneLabAddress()", "1d29de63": "clearAllCandidates()", +"1d2a278c": "isDistributionFinished()", "1d2a6dcf": "getNumArchers()", +"1d2a783d": "globalUnbackedDebt()", "1d2aa5b3": "skip()", "1d2aabcb": "MicroBitcoinToken()", +"1d2ab2ae": "queueFunds()", +"1d2adf0f": "payback(address,address,uint256)", "1d2af28b": "pay055loyal(address)", "1d2b4ae7": "BuyStartingSnail()", +"1d2b4eaf": "test(address,uint256,bytes)", "1d2b63bf": "GetNumber(address,uint256)", "1d2b7155": "activateImportFeeChargeRecord(address)", "1d2b8d96": "MintICO(address,address,uint256)", "1d2bca17": "MyToken(uint256,string,uint8,string)", +"1d2bda83": "toggleSUSDSwap()", "1d2bf543": "fetchCoinAge(address,address)", +"1d2c0b3d": "claimMinterAdmin()", "1d2c1b59": "query(uint256,bytes32,string,string,uint256,uint256)", +"1d2c3090": "SaleCreated(uint256,uint256,uint256,uint256,uint64,bool,uint256)", +"1d2c5432": "getGaftByRel(address)", +"1d2cb861": "externalReceiver1(address)", +"1d2d01ce": "getAcoCreatorAuthorized(uint256)", "1d2d4c34": "test_assert()", +"1d2d7507": "lastRewardedTime()", "1d2d8400": "delegateToNewContract(address)", "1d2d86dc": "setChecksum(bytes32)", "1d2d9b06": "raiseEvent(string)", @@ -16730,12 +30494,22 @@ "1d2e18cd": "stageOneStart()", "1d2e2cc4": "ENS()", "1d2e5a3a": "setSale(bool)", +"1d2e62d9": "deploy_capital(uint256)", "1d2eda60": "DIUToken()", "1d2ee278": "Angel()", +"1d2f371d": "FinishSale()", +"1d2f9118": "withdrawAllGST2()", "1d2fd267": "getCarCurrentPriceAuction(uint32)", "1d2fed16": "updateRates(bytes4[],uint256[],uint256)", "1d300421": "NuruToken(uint256,uint256,string,string,uint8)", +"1d302955": "AuctionCancel(uint256)", +"1d30393d": "commitToBuyLpt(address)", +"1d305b14": "tradeEtherForTokenUsingReserves(address,uint256,uint256,uint256)", +"1d307ac2": "VERIFIER_FEE()", "1d30d3db": "Transfer(address,address,string,uint256)", +"1d30ffca": "transferMonster(uint256,address)", +"1d31bb3c": "g_w_sc(uint256)", +"1d31fac0": "periodTime()", "1d3231d4": "totalCommitted()", "1d32a70c": "upgradeMining(uint256,uint256)", "1d32ab99": "originTransfer(address,uint256)", @@ -16746,97 +30520,179 @@ "1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", "1d34be47": "updateRefund(uint256,uint256,uint256,bytes32)", "1d34cf60": "getNumSuppliers()", +"1d350be1": "payoutRandomDistrAlways()", "1d351f53": "decreaseAllowanceToken(address,uint256)", "1d356eef": "getDepositEtherForAddressValue()", +"1d35ab49": "proposalActionStatus(uint256)", +"1d35b9e2": "g1(uint256)", "1d3639ec": "preDGZTokensSold()", "1d365669": "transferDirectoryToken(uint256,address,uint256)", "1d36e06c": "tokenIndexToOwner(uint256)", "1d36ee16": "RBC(uint256,string,string)", "1d376a44": "PriceOracle(uint256)", "1d3795e8": "startFreeGet()", +"1d37c76c": "ePools(address)", "1d37c8a6": "setPurchaseRate(uint256)", +"1d37ff8e": "pairSwap()", "1d381240": "addKey(bytes32,uint256,uint256)", "1d38869b": "ShopiBlock()", "1d38bebd": "isInitialAuctionEnded()", +"1d38dca1": "test_other_operators(uint256,uint256)", "1d38e433": "gasForIAD()", "1d38fcda": "freeze(address[])", +"1d3a069f": "isERC20MethodWhitelisted(bytes4)", +"1d3a59a1": "addNativeModel(address)", "1d3a5dbe": "requiredPrefix()", +"1d3a9485": "getWinningAddress(uint256)", +"1d3acb44": "fluctuationLimitRatio()", +"1d3b57cf": "PreStartTimeStamp()", "1d3b9edf": "times(uint256,uint256)", +"1d3c0e25": "GAS_UINT_REQUIRED_TO_LOCK()", +"1d3c0fca": "getNewHash()", +"1d3ce398": "getBassets()", "1d3ce58d": "currentMintable()", "1d3d4c0b": "make_contact(bytes32[])", "1d3d93d4": "activateCurrency(address)", "1d3e2d1b": "changeFriend(address,address)", +"1d3e3955": "setMaxCurveDisagreement(uint256)", "1d3e43c8": "VCcoin()", "1d3e904e": "BasicSPIKE()", +"1d3eee4c": "RewardWithdrawn(address,uint256)", "1d3f6f1b": "setFounderMultiSigAddress(address)", "1d3f864b": "campaignCaptain(uint256)", "1d3f90c6": "bonusUnlockTime()", +"1d3fccd5": "getLiquidityPoolByConfig(uint16,address[],uint32[])", +"1d406b82": "placeBid(address[],uint256[],uint256[])", +"1d408b23": "FactoryGovernmentOfficer()", "1d40bbcf": "_addMember(address)", +"1d40e439": "pendingSushi(address,address)", "1d411612": "EthernetCashAddress()", +"1d4152f4": "lastSeededIndex()", "1d4233b9": "flushEth()", +"1d427ba7": "tweep(string)", +"1d42953a": "IS_MINT_RATIFIER()", "1d42cf72": "nochange()", +"1d4306d4": "appointHeir(address)", "1d433d52": "_getbonusRate()", +"1d436a79": "presale_rxp_fund()", "1d43776e": "rngAddress()", +"1d437c72": "addressToOffers(address,uint256)", "1d43b653": "submitTransaction(address,uint256)", "1d43cc98": "increaseTotalSupply(uint256)", +"1d43fb70": "SaleOpened(uint256)", "1d4494f1": "changeApiUrl(string)", +"1d44aa5d": "BatchFillIncompleteError(bytes32,uint256,uint256)", +"1d44ccb3": "returnsNamedTuple()", +"1d45cddc": "getPosts(uint256)", +"1d45d487": "setWallets2x(address)", "1d45e9e1": "notEqual(uint256[],uint256[],string)", "1d461b83": "airdropMDL(address[],uint256)", +"1d4632ac": "incentive()", +"1d465c82": "getNewRewardPerBlock(uint256)", "1d46ef0a": "OxBitcoinExchange(address,address,address,uint256,uint256,uint256)", +"1d479c28": "getspesificblockhash(uint256)", "1d47ae34": "YShare()", "1d47f8c1": "getApprovals(address,uint256)", "1d480d8b": "addRefBonusWithRefs(address,uint256)", +"1d48329b": "createMarket(address,address,uint256,uint256,address,address,address,uint256,uint256)", +"1d48bfe3": "signatureHashBurnStatus(bytes32)", +"1d492e85": "testBasicValidations()", +"1d49d66c": "farmInfo()", "1d49e081": "EXECUTE_EXTRA_GAS()", +"1d4a24e6": "hasClaimedTokensFromBeingReferred(address)", "1d4a48b7": "Start7()", "1d4a9209": "initializeTokenSale(uint256,uint256,uint256,uint256,address)", "1d4ac2b6": "yearteam()", "1d4b0796": "updateTxStats()", "1d4b11e4": "ownerOfLandMany(int256[],int256[])", +"1d4b6054": "updateX6Referrer(address,address,uint8)", "1d4be3df": "getFoundAddress()", +"1d4bf09b": "spend(address,uint256,bytes[])", "1d4c8e5d": "removeAddressesFromBonuslist(address[])", "1d4cecaa": "setInfo(uint256,bytes32,string)", +"1d4ced87": "init(address,address,address[],address[],address[])", +"1d4d2fa6": "updateFeeInEth(uint256)", "1d4d691d": "fill(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", "1d4d8656": "donateAuthor()", "1d4d8808": "_getFeeHistory(uint32)", +"1d4e135b": "RATIFY_MINT_SIGS()", +"1d4eae77": "getStageAmount(uint8)", "1d4eaf06": "StoreFile(uint256,bytes32,string,string,string,string,string,uint256,bytes)", "1d4f2c6d": "setMythicalGravatar()", "1d4f3e8b": "getCLottery()", +"1d4f5148": "createImplementation(string,address)", +"1d4f6ee4": "approve_529(address,uint256)", +"1d4f828a": "ownedTokenCount(address)", +"1d4f83a6": "setELPrice(uint256)", "1d4f9bbf": "NewTTL(bytes32,uint64)", "1d50169c": "sendToken(address,uint256,uint256,uint256)", "1d5023c8": "setReferrerAddress(address)", +"1d504dc6": "_become(address)", +"1d509afd": "refer(address)", "1d511879": "buyTokensPresale()", +"1d512085": "loserStakeMultiplier()", +"1d51a882": "getSellBlocked()", +"1d51e7cf": "getRedirectedBalance(address)", "1d523047": "COMMUNITY_TOKENS()", "1d523107": "SOFT_CAP_IN_TOKEN()", "1d52573f": "set_address_B(address,address)", "1d532a97": "increaseAssetsCertified(uint256)", +"1d539764": "setLockList(address[],uint256[])", "1d5407aa": "helpCoinAddress()", "1d5459f7": "updateFundAddress(address)", "1d545d09": "crowdsaleEndTime()", "1d54ab74": "_getRateIndex(uint256)", "1d54e16e": "reinvestPartial(uint256)", +"1d553387": "totalWhiteListedAddresses()", +"1d558966": "HEX()", +"1d55c749": "unsetBlacklistable()", +"1d5671e4": "_getRValues(uint256,uint256,uint256,uint256)", "1d570166": "previligedAddApproval(address,address,uint256)", +"1d572320": "ZapIn(address,address,address,address,uint256,uint256)", +"1d57ac3d": "approveAndInvokePurchase(address,uint256)", "1d57b474": "updateMAX_BET(uint256,uint256)", "1d57bcf7": "ProofLibInterface()", +"1d58bda1": "poolDeployBlock()", "1d590771": "TeuToken()", +"1d59410a": "auctions(address)", +"1d5953dd": "withdrawTLR(address,uint256)", "1d598d10": "BitcoinBlue()", "1d59cde3": "retrieveEarnings(address)", "1d5a9f3f": "object_types(uint256)", "1d5aca61": "ZITRON()", +"1d5af756": "raisemax(address)", "1d5b26b1": "presaleMarket()", +"1d5b277f": "setUIntValue(bytes32,bytes32,uint256)", "1d5b9efe": "mintAfterSale()", +"1d5bdebc": "deposit(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "1d5c7ef5": "getPaymentToAddRemoveCountry(string,bool)", +"1d5cbd88": "_onlyProxy()", +"1d5ccd9b": "Raffles(uint256)", "1d5de3fb": "ECOToken()", +"1d5de90e": "SetExchangeRate(uint256)", +"1d5e2e0a": "onSettle(uint256,uint256,address,uint256,uint256)", "1d5e3350": "transferReservedTokens(uint256)", "1d5e3f6d": "sumOfN(uint256,uint256,uint256,uint256)", +"1d5e752d": "argumentPosition(uint256)", +"1d5e970d": "allPercents()", "1d5ea379": "newUserFrom(address,string,string,string)", +"1d5f4e40": "AIRDROP_Mint5(address,address,address,address,address)", "1d5f624a": "unPaidBurnTokens(uint256)", "1d5fe710": "finalizeCurrentStage()", "1d60208a": "TrezorMultiSig2of3(address,address,address)", "1d608659": "onWhitelist(address)", "1d60993b": "stakeScale(uint256)", +"1d60997d": "_updateFirstDelegationMonth(address,uint256,uint256)", +"1d610577": "UNISWAP_POOL()", "1d62a312": "thirdPreSaleDate()", "1d62a40f": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "1d62c5bf": "PublicSold()", +"1d62ebd9": "rewardOf(address)", +"1d634f56": "QuickCloseChannel(bytes32,address,uint256,address,uint256)", +"1d635c7d": "addBugBountyTeamAddress(address)", +"1d6365bf": "MAX_TOKENS_ROLE()", +"1d63c093": "swapExactTokensForETH(address,uint256)", +"1d63e24d": "count2()", "1d6456c4": "_transfer(address,address,uint256,uint256)", "1d645b12": "getEventInfo(uint256)", "1d6477e1": "reclaimableLand()", @@ -16844,46 +30700,84 @@ "1d65551d": "updateRenExSettlementContract(address)", "1d659153": "CanObtainChip(uint32)", "1d65d60e": "PRE_ICO_MAX_TOKENS()", +"1d65e77e": "getTask(uint256)", "1d66105b": "buyDrangon()", +"1d662c06": "LastFarmedOn(address,address)", +"1d668c64": "getTokenPriceDetails(bytes4)", "1d66ff8e": "getInvestorDividends(address)", +"1d67199a": "removeCA(address)", +"1d67f2d6": "getBaseSlab()", +"1d6800ed": "deWhiteListCaller(address,bytes4)", "1d68463e": "CreateSWP(address,uint256)", +"1d68702d": "getDaoAddress()", +"1d68806b": "RegisterPresale(address,uint256,uint256,bool)", "1d68b449": "crowdClosed()", "1d6916ab": "buyTicket(uint256,uint256,string)", "1d693910": "Piezochain()", +"1d69a324": "testFail_non_owner_2()", "1d69ccdc": "SuccessfulVote(address,bytes32,bytes32)", +"1d6a2759": "RedeemUSDC(uint256)", +"1d6a8ad2": "syn(address,uint256[],uint256)", "1d6a8bda": "enableTokenTrade(address)", +"1d6b0b82": "promoCreatedCount(uint256)", "1d6b5d2c": "setDnaMixerAddress(address)", "1d6b867c": "getGamePlayer(uint256)", +"1d6b8b72": "stakeholders(uint256)", "1d6c0dfa": "setActiveHero(uint256)", "1d6c263c": "Election()", +"1d6c387b": "getUniqIdBill(uint256)", +"1d6c9329": "rewardProjMapping(uint256)", "1d6ca15d": "Presale(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"1d6ca218": "hxyDivs()", +"1d6cb0cf": "valueMintedAt(uint256)", +"1d6cc82e": "LPholds(address,address)", "1d6d8d60": "modifyMilestoneTo(address,uint8,uint8)", +"1d6e077a": "extraTokens(uint256)", +"1d6ec356": "proposeStakeUpgrade(address,address[],string)", +"1d6ee224": "withdrawCRVRewards()", "1d6f5e03": "PubkeyChanged(bytes32,bytes32,bytes32)", "1d6f757d": "withdraw(uint256,uint8,bytes32,bytes32,uint256)", "1d6fe151": "ROSCtoken(uint256,string,string)", +"1d7026b2": "claimedPoohs(address)", +"1d703812": "getAndUpdateDelegatedToValidatorNow(uint256)", "1d704684": "setBinanceCoinPrice(uint256)", "1d706777": "getCertifier(address)", "1d7099d3": "payFromAllowance(address,address,address,uint256)", "1d709ab4": "set_transfer_gas(uint256)", +"1d70e433": "sendTokensToDistributor(uint256)", +"1d70fac3": "getServicePoolWeight(address,uint256)", +"1d711093": "AccountStatus(address,bool,string)", "1d718288": "referralTokensAvailable()", "1d71929d": "MIAMIcoin()", "1d71a1cd": "newIncome(string)", +"1d71a5e5": "PlotPurchased(uint256,uint256,address)", +"1d71b850": "totalByLockup(uint8)", "1d724a7a": "getFounderStatus(address)", +"1d7282e1": "getSignature(uint256,uint256,uint256,uint256,bytes)", "1d731345": "calculateRoom(uint256,uint256,uint256)", "1d7315cc": "storedAmount()", "1d732304": "generateRand(uint256)", "1d73268a": "PHDToken(uint256,string,string)", "1d733337": "participantRegistered(address)", +"1d73c64c": "initialBet()", +"1d73cf34": "_supportNft(address)", "1d73fb93": "autoTransfer(address,uint256)", +"1d73fd6d": "ONE_HUNDRED_WITH_PRECISION()", "1d747131": "getTotalApprovers()", "1d74c1a8": "_addToFund(uint256,bool)", "1d74f3a5": "DIRT()", "1d75493a": "setWinnerPlaceDistribution(uint256,uint256)", "1d755c8d": "recieveVote(address,bytes32)", +"1d75807c": "getOperatorRequireNum()", "1d759214": "minMinBuyETH()", +"1d759fb2": "Register(address,uint256,uint256)", "1d75a4b9": "viewAuthorized()", "1d7630f0": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes32,address)", +"1d7650cf": "sell_token()", +"1d76a599": "_callFee()", +"1d76ea25": "getAmountOfToken(address,address,uint256)", "1d7747d1": "addAuthByCode(string,string)", +"1d77646a": "globalDisable()", "1d777856": "tokensForBurn()", "1d7786e3": "numToksSwitchedOver()", "1d77d696": "setMockUint256(bytes4,uint256)", @@ -16891,32 +30785,57 @@ "1d786cd0": "widthdrawEtherDelta(uint256)", "1d7876e7": "transferBack()", "1d78ca63": "AuctionClosed(address,uint256)", +"1d78daed": "addInvestment2(uint256,address)", "1d790c99": "parseData(bytes,uint256)", "1d7915ad": "setSeed(uint256,uint256)", +"1d791842": "fundingRatePredictionBingoOf(address)", "1d793e9a": "batchChangeChannel(address[],uint256[],uint256,uint256)", +"1d7a28ca": "NewSaleProjects(string,string,string,uint256)", +"1d7aae6e": "chalPerBlock()", +"1d7ab8c1": "setDebtAuctionDelay(address,uint256)", "1d7add35": "appendPricePoints(uint64[])", +"1d7b33d7": "compSpeeds(address)", "1d7b46b2": "tokensPurchasedTotal()", "1d7b5baf": "setUint(int256,bytes32,string,uint256)", +"1d7b5e22": "getDotsIssued(address,bytes32)", "1d7b6d58": "forkAndRedeem()", "1d7bb2db": "CasinoCoin()", "1d7bc449": "getCeleb(uint256)", "1d7c194e": "bulkRejectMints(uint256[],uint256[])", "1d7c5cd1": "userServicesLength(address)", +"1d7c7050": "BalanceCleared(address,uint256)", "1d7c8894": "issueGoldTokens(address,uint256)", +"1d7c8dd9": "WithdrawalRequested(address,address)", "1d7ca2be": "subAddressToWhiteList(address[])", +"1d7cbfbc": "SetOutcome(address,uint8,uint8)", "1d7d1f17": "BFX()", "1d7d8d2e": "EthereumPoint()", +"1d7d8e47": "updateTaxPercentage(uint8)", "1d7e1f68": "getContentRank(address,uint256)", +"1d7e3214": "setAllowance(address,address,address,address,uint256,uint256)", +"1d7e7789": "requirePynthActive(bytes32)", +"1d7e79d6": "isCurrencyAccepted(string)", +"1d7e95c6": "add_UNISWAP(address)", "1d7f2e0c": "SecondNode(address,string,string)", +"1d7f4da5": "WhitelisterChanged(address,address)", "1d7f8039": "mineMany(bytes32[])", +"1d7f80e2": "changeInitOwner(address)", "1d7fb62f": "initVote(uint256)", "1d80009a": "rootHash()", +"1d809a79": "withdrawToken(address[],address[],uint256[],bool)", +"1d80bc32": "withdrawAll(address,address,uint256)", "1d80e62a": "changeTransfersPaused(uint256)", +"1d80e6fd": "getFinalStakeWithdraw(uint256)", +"1d812909": "UpdateMatchStartTime(address,uint8,uint256)", +"1d813813": "transferAnyBEP20Tokens(address,address,uint256)", "1d814480": "provideInfoCourseBaseOnIdStudent(uint256)", "1d81564d": "minutesInPeriod()", "1d819ef0": "testEqualityAddr()", +"1d8242b2": "mulDivFixedPoint(uint256,uint256)", "1d82e9c7": "EXTRA_GAS()", +"1d831d5c": "TOKENS()", "1d833aae": "drop(address,address[],uint256)", +"1d833ec5": "PERMIT_BUY_TYPEHASH()", "1d834409": "totalOrders()", "1d834a1b": "insert(uint256,uint256)", "1d836ae9": "EQUIEX()", @@ -16924,201 +30843,403 @@ "1d846f5c": "currentCancellationResults()", "1d849220": "getTokenSaleTime()", "1d84f303": "ETPC()", +"1d8501f5": "kash()", "1d8557d7": "updateState()", +"1d85bf03": "buyNFT(uint256,uint256)", +"1d85d796": "setMinMintAmount(uint256)", +"1d85dacd": "tradesIds(uint256)", "1d862a81": "getPop(uint256)", +"1d86c745": "returnFraction()", "1d87614a": "OPTION_POOL_PERIOD()", +"1d877a07": "contractBLK()", "1d87a65c": "createBattleboard(uint8)", +"1d88190e": "getBetTotalOptions0(uint256)", +"1d884741": "injectLiquidity()", "1d88c05b": "successorAddress()", +"1d88ea16": "farmOwner()", +"1d88efa2": "_hasContractCode(address)", +"1d896dfa": "approve_302(address,uint256)", "1d898f52": "IM()", "1d89dbc9": "updateExchangeRate(uint8,uint256,uint256)", +"1d8a0566": "getCollateralRequirement(uint256,uint256)", "1d8a8db9": "ethRaisedAddress()", +"1d8aa3f6": "updateSale(uint256,bool)", "1d8aa5ec": "currentSettlementPhase()", "1d8acf1b": "getBoolValues(bytes32)", "1d8adb7a": "setMaxUserPayment(uint256)", "1d8ae626": "Security(string,string)", "1d8b13a6": "setPersonal(address)", +"1d8b2f61": "TransfersUnlocked()", "1d8b4dd1": "createContractExoplanet(string,uint256,uint32,string,uint32,uint8,string)", +"1d8b5367": "minBacPrice()", +"1d8b6b3f": "middleBalance()", "1d8b70da": "order_received(string)", "1d8bab91": "RDN()", +"1d8c13bf": "startPresale2()", "1d8c61c0": "setTMEXAddress(address)", "1d8c7c20": "internalSellTokenFromAdmin(address,uint256,bool,uint256)", "1d8ceb44": "extractClosingSignature(address,uint32,uint192,bytes)", +"1d8e59d9": "endUnlocked()", +"1d8ed36b": "_trWalletToWalletAllowed()", +"1d8ee48a": "entities(address)", +"1d8f1638": "receiptCollectionCount()", +"1d8f5f18": "versionList(uint256)", +"1d8f8f4b": "distributionAtIndex(bytes32,uint256)", +"1d9023cb": "getPauseStatus()", "1d902fe9": "currentBonusRate()", +"1d90382e": "lastLock(address)", "1d9046ce": "transferShip(uint32,address,bool)", +"1d906bc2": "voteForFirstParty(uint256,uint256)", +"1d907075": "getToonInfo(uint256)", "1d90824b": "getMinPrivateSaleCompanyBuy()", +"1d9082c4": "transferToUserWithdrawalAccount(address,uint256,address,uint256)", "1d90c509": "cardPresale(uint16)", +"1d9113cc": "queryAgentPledgeRecordInfo(address)", "1d91bd9f": "transferPaymentAddress(address)", +"1d9274ed": "updateParent(address[],address[])", "1d927f21": "userDraw(uint256)", +"1d92f25e": "getAllHolders()", +"1d933a4a": "updateSellFee(uint256)", +"1d93ad09": "emergencyLock(address)", "1d93d8d9": "WaboToken()", "1d9400c2": "ManagerProxyTargetMockV3(address)", +"1d942042": "getPlanInfo(address)", +"1d95aed2": "OwnershipExtended(address,address)", +"1d960e6a": "dividendsRounds(uint256)", "1d9680a7": "oldWriteMessage(string)", "1d96d4c9": "VIRES()", +"1d9703f6": "getUserDepositsbyToken(address,string)", +"1d972d41": "signerSet(address)", +"1d9759b0": "_gfc()", "1d976e05": "transferMultiple(address,uint256[])", +"1d97832e": "calculateGas(uint256,uint256,uint256)", "1d978f9e": "ContributionRegistered(bytes32,address,uint256)", +"1d97b7cd": "EnableTrading()", +"1d97d8cc": "revokeGuardian(address,address)", "1d981758": "__signatureIsValid__(address,bytes32,uint8,bytes32,bytes32)", +"1d983e23": "setMaxT(uint256)", "1d98532f": "_computeTournamentCut(uint256)", +"1d98eb8c": "registerApp(uint32,address[])", "1d98f3c5": "safeTransferChild(uint256,address,address,uint256)", "1d991ffe": "IsBoilerValid(address,uint256)", +"1d994a53": "removeLiquidityInPool(uint256,address)", "1d9976e9": "LedgerRandomProofVerifier()", +"1d99e052": "switchToEuro(address)", +"1d9a7089": "Loan(bytes32,uint256)", +"1d9afe5e": "toIssue(uint256)", "1d9b0783": "withdraw(uint128,address)", "1d9b1d6f": "schedule(uint256,uint256)", "1d9b1d85": "ReFund()", "1d9bd2b9": "totalSoldOnICO()", "1d9becf5": "CatAdopted(bytes5,uint256,address,address)", +"1d9c11f7": "getRewardAPY()", +"1d9c2e91": "burnBridge(address,uint256,string)", +"1d9c36c6": "mintResources(uint256,address,uint256)", +"1d9c7f0a": "delegationsByValidator(uint256,uint256)", +"1d9c9027": "stakePool12(uint256)", "1d9caa69": "sendMessage(address,string,string,uint256)", "1d9cfd6d": "setSale()", "1d9d1bdc": "buyTradeConfir()", "1d9d281d": "add0xbtcnnAddresses(address,address)", +"1d9da7fd": "changeDenFee(uint256)", +"1d9dcd99": "THRESHOLD_COMMON()", "1d9e6c34": "compose(string,address,uint256[])", "1d9f3cb5": "changeSaddleShopPrice(uint256,uint256)", "1d9f4f88": "VetCoin()", +"1d9f5d9e": "awardCCT(address,string)", "1d9f68ad": "updateMaxBonusTickets(uint256)", +"1d9fb309": "tokenContracts(uint256)", +"1d9fe0f3": "djonniTokens()", +"1da03c2a": "donuts()", +"1da0505d": "getImplementationHolder()", "1da05199": "hasAvailableCard()", +"1da0603a": "withdrawBnb()", "1da09dd5": "getUserActionOnStory(bytes12,address)", +"1da0b8fc": "getHash(address)", "1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", +"1da1542f": "getCdpHolder(uint256)", "1da16e8b": "FirstSaudiToken()", +"1da1794c": "transferProxy(address[],uint256[])", "1da26a8b": "setToken(address,address)", "1da2d92b": "IDRT()", +"1da2ea31": "burntoken(address,uint256)", +"1da3087d": "SettingsChanged(uint256,address)", +"1da314e1": "updatedPresaleWhitelist(address,bool)", "1da3f151": "presaleVolumeBonus(uint256)", +"1da42e5e": "confiscate(uint256,uint256)", +"1da478c2": "airdropWithAmount(address[],uint256)", +"1da4c66b": "claims(uint256,address)", "1da4eb7a": "_secondUnlockAmmount()", "1da4ed85": "setRewardPool(uint256)", "1da55b9f": "YeedToken(uint256,address)", +"1da56eb3": "nextEpochTime()", +"1da56fef": "rewardDiario()", "1da5f94d": "acceptableAddress()", +"1da64946": "approve_343(address,uint256)", +"1da649cf": "repay(address,address,uint256)", "1da6822c": "testThrowsTransferEnableNotTransferable()", +"1da6bbfb": "calculateFundCost(uint256,uint256,uint32,uint256)", +"1da6c407": "Rule(address)", +"1da6d16c": "deleteRecipientsInfo()", +"1da6eab2": "getPersonByName(string)", +"1da72f4a": "slowWithdraw(address,address,uint256)", "1da74e77": "wtToken()", "1da790a1": "showTopWinners()", +"1da81d12": "approve_388(address,uint256)", "1da83550": "setWinner(address,uint256,uint256,uint256)", "1da83eab": "canDefrostReserveAndTeam()", +"1da85a97": "removeReader(address,address,address,address,uint256)", "1da88cbe": "getNew(address,bytes32)", +"1da8c13d": "pissPerBlock()", "1da93873": "baseTokenPrice()", "1da97544": "ETHtoZWeirate()", "1da97ea3": "getSenderFromData(address,bytes)", "1da97f36": "HunterCoin()", "1da98538": "totalMEATonsClaimed()", +"1da9a006": "Tax(uint256)", "1da9ea0c": "hardCapInTokens()", +"1daa3be6": "charge_addresses(uint256,address[])", +"1daae30a": "_setPieAddress(address)", "1daae314": "secondStagePriceOfTokenInWei()", "1dab2271": "setSuggestedAdPrice(uint256,uint256)", +"1dab2d09": "transferBridgeRole(address)", +"1dab301e": "bookings(uint256)", +"1dab52b0": "PIP_INTERFACE_ADDRESS()", +"1dab811c": "CollateralNotReturned(uint256)", +"1daba9b2": "maxForcedExitCount()", +"1dac30b0": "rewardReceiver()", +"1dac82b0": "markEarly(string)", "1dacad8a": "CentralizedOracle(address,bytes)", "1dacd8fd": "buyDisciple(uint256,uint256,uint256)", +"1dacf981": "user_details(uint256)", "1dad202f": "ctz64(uint64)", "1dad57fa": "notifyCollateralNotReturned(uint256)", +"1dad5e80": "ContractOwnerChanged(address)", "1dad63e4": "ERC20Standard(uint256,string,bool)", +"1dad6d46": "get_total_pool_LP(uint256)", +"1dadfae7": "setKitty(uint256,uint64,uint16,address)", +"1dae56e5": "typeOfInvestors(address)", +"1dae6529": "bebTokenTransfer()", "1daee82d": "secondLockAmount()", "1daf779f": "SDpay(uint256,string,uint8,string)", +"1dafe16b": "rewardsEnabled()", +"1dafede0": "approvedTokens(uint256)", "1db021c0": "mintedCoins()", +"1db03cc0": "NewDistribution(uint256[5])", "1db046ad": "OneToken()", "1db05ab8": "FXNOW()", "1db087db": "_setAllocation(address,uint256)", "1db0ad5a": "firstUnlockTime()", "1db0ffe9": "ECHARGE()", +"1db16612": "buybacka(address)", +"1db1896d": "_initiateRewardDeposit(uint256)", +"1db197ab": "setCustomFloor(bool,uint256)", "1db19959": "RATE_SALESTAGELAST()", "1db1c805": "setDefaultReputationForManufacturer(bytes32,bytes32)", "1db256e4": "WCCCOIN()", "1db29a20": "getPlotInfo(uint256)", "1db2bbe8": "allocationIndicator()", "1db2ea77": "_91_MR()", +"1db3314a": "ggcFee()", +"1db34dbd": "testSplitWithDelimiter()", "1db38da2": "ClaimExecuted(uint256,uint256,address)", +"1db3b786": "withLottery()", "1db4012d": "newProject(string,string,uint8,address[],address)", +"1db40797": "modifyDefaultRestriction(uint256,uint256,uint256,uint256,uint8)", "1db4b07f": "rntToken()", +"1db4d75f": "returnBrrrForCoins(address)", "1db4d7a2": "returnBalance(address[2],uint256[8],uint8,bytes32[2])", +"1db4dbd1": "Investment(address,address,uint256)", +"1db508ef": "CreateNewProject(address,string,string,string,string,uint64)", +"1db56032": "vestableCvp(uint256,address)", "1db580fa": "foundersAllocation()", "1db5ca3b": "becomeAgent(uint256,uint256)", "1db5f974": "highBonus()", +"1db61b54": "DOMAIN_SEPARATOR_TYPEHASH()", +"1db6257f": "_upgrade(address,address,address)", "1db625c3": "newInvestCommission(uint256)", +"1db63a33": "getPynths(bytes32[])", +"1db65687": "CloseWormhole()", +"1db6b527": "equalBytes32FailTest()", +"1db6d95c": "totalHaloTransformed()", "1db71ffb": "doLoops(uint256)", +"1db76ee5": "cardPoolPoint(uint256,address)", +"1db79386": "Forgived(address,address,uint256)", +"1db7c5b8": "batchRetireRefuse(uint256[],uint256[])", +"1db82137": "setBoardroomSecond(address)", "1db834f0": "NextDouble(address,uint256)", +"1db842f0": "getRequestIdByQueryHash(bytes32)", "1db87be8": "receivingAddress()", "1db890a6": "getCassetteSize_()", "1db894fc": "signToApproveTokenControlInfo()", +"1db89da1": "gasFeeAccount()", +"1db8cb3f": "changeStakingFees(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256)", "1db93968": "transferProperty(uint16,address)", +"1db95078": "internalPricePremiumBps(address)", +"1db9d350": "setKeyValue(address,string,string)", "1db9ec2c": "ENDDATE()", "1dba92ab": "setKeys(address,uint256)", "1dbb0bff": "buyBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"1dbb2a22": "staking(uint256)", "1dbb9867": "buyEggFee()", "1dbbda4d": "bytesToUint(bytes20)", "1dbc04ae": "setVestingToken(address)", "1dbcc5ad": "RiesGraham()", +"1dbcd416": "staticBonus()", +"1dbd0ec2": "BUND_ETH()", +"1dbd1da7": "getEthKey(uint256)", "1dbd21c3": "Daereum()", +"1dbd5aed": "numOfStakes()", "1dbdd617": "LILITHCOIN()", "1dbdd792": "MIDGRADE_TYPE_COUNT()", "1dbde6c7": "maxTokenSupplyICOEND()", +"1dbe22be": "getPrivilege()", "1dbe342d": "TRND()", "1dbe6508": "bobClaimsDeposit(bytes32,uint256,uint256,address,address,bytes)", +"1dbeb04f": "findBurnPercent(uint256)", "1dbf3bc7": "spend(uint256)", +"1dbf779e": "YGYReserve()", "1dbf79a3": "TicketGlobalChain(uint256,string,string)", "1dc05f17": "subtract(uint256)", "1dc0819e": "_isBreedingPermitted(uint40,uint40)", "1dc1166f": "horseSold(uint256)", +"1dc130a2": "depositedCN(uint256)", +"1dc1744d": "tradingPairs(address,address)", "1dc17cce": "VALUE_DISTRIBUTION_KEY_OWNERS()", "1dc18c45": "editNode(uint256,address,bool,address,uint8,bool)", "1dc18f7a": "hashAmount(uint256,uint256)", "1dc1c5e3": "payMoney()", +"1dc1f78d": "findBestRateOnlyPermission(address,address,uint256)", +"1dc213d5": "setExchange(uint8)", +"1dc27fde": "BONUS_DECIMALS()", +"1dc2ae38": "updateWebsite(address,string)", "1dc30bdb": "payJackpot5()", +"1dc323c6": "canChangeAssets()", +"1dc325a5": "createMarket(uint256,address,uint256,bytes)", "1dc3ac22": "setOwnerNickName(address,string)", +"1dc3ba42": "Purchase(address,address,uint256,uint256,uint256,bytes)", +"1dc3eed9": "LayVDVTheoID(uint256)", "1dc436cd": "getIDChildRelationshipCountOperationParentProductPositionReferenceBinding(string,address,uint256,uint256)", "1dc45248": "getMoveCount()", "1dc45c6d": "spenderDecreaseApproval(address,uint256)", +"1dc4f9ea": "startSale(uint256,uint256,uint256,uint256,uint256)", +"1dc558b9": "ownerBELTReward()", "1dc55c2d": "GetDividends(address,uint256)", +"1dc5fa9a": "withdrawBoosterAndAutoPoolGain(uint256,uint256)", "1dc615bc": "checkIfAllARTDistributed()", +"1dc65419": "gameCtl()", +"1dc66139": "TakeETH(uint256)", +"1dc717fd": "weightOfGauge(address)", "1dc76e78": "buyPlayerDataRecord(uint256,uint256,uint256)", +"1dc7726f": "fundingCollectorPerc(address)", +"1dc7a314": "isCompound()", +"1dc7c707": "UnTransferable()", +"1dc7da01": "setBlacklistSlashPercent(uint256)", "1dc7f1b4": "getaddressname()", +"1dc7f521": "convertToUnderlying(uint256)", "1dc82285": "oldBalance()", +"1dc83ab7": "rebalanceable()", "1dc8a3bb": "B123Token()", "1dc9186a": "updateWeiAmountShare()", +"1dc9230a": "createAthlete(string,string)", +"1dc96f6c": "ERC20Token(address,string,string,uint8,uint256)", "1dc9a3b9": "transferDomainOwnership(bytes32,address)", "1dc9bb48": "hasDividends()", +"1dca487e": "tripEnabled()", +"1dcad61c": "buy_to_redeem(uint256,uint256,uint256)", "1dcb0d36": "goBackToPreSale()", "1dcb304b": "fipsGenerate()", "1dcb66ff": "coordinatesOf(uint256)", +"1dcb89e3": "withdrawVatDai(address,uint256)", +"1dcc18bc": "expiry_year()", +"1dcc83a9": "propose(bytes32,string,string,string,string,uint256)", +"1dcce265": "predictAddressWithCall(bytes,bytes32,bytes)", "1dcd0305": "toStr(bytes32)", "1dcd5312": "editMessage(string)", +"1dcd5c5d": "supportUnitsCnt()", "1dcd9b55": "substring(string,uint256,uint256)", "1dcdf215": "getCoursesCount()", "1dce0b5c": "getNoteKeysCount()", +"1dce626f": "pledge(string)", "1dce77b8": "Linkmanagement()", "1dce79cf": "blockchainExchange(uint256,int256,bytes32)", "1dcea427": "erc20token()", +"1dceb223": "mint(address,uint32,uint32,uint32)", +"1dcf4be8": "UIblacklist(uint256)", +"1dd0aeef": "referrersList(uint256)", "1dd0c71b": "myPendingPayment()", +"1dd0f662": "getProto(uint256)", "1dd1349d": "getNameHash(bytes32)", +"1dd13e25": "sandwich()", "1dd14317": "setProtocolVersion(address,bytes32)", "1dd14a96": "totalSupplyPaillier()", "1dd15fca": "tokenInWhiteList(address)", "1dd16db6": "customBonus()", +"1dd17c32": "feelessReciever(address)", "1dd17e7d": "setPreSaleParameters(uint256,uint256,uint256,uint256,uint256)", +"1dd19cb4": "skim()", +"1dd1a00c": "AddDataPoint(uint256,bool,string)", +"1dd24bfc": "testInvestorAddressMustBeValid()", "1dd300ce": "lastWithdrawal()", "1dd319cb": "burnFor(address,uint256)", +"1dd31fdf": "maxPriceRate()", "1dd46c1e": "getTxCount()", "1dd4914b": "withdrawEtherOrThrow(uint256)", "1dd49208": "getFeed(uint256,uint256,uint256)", "1dd49cae": "remWhitelist(address[])", "1dd5301a": "PRICE_PREBUY()", +"1dd54e98": "chainLinkOracle(address)", "1dd572a0": "fortune_sell(uint256,uint256,uint256)", +"1dd5e904": "LogOperatorChanged(address,address)", +"1dd5feee": "fillOrder(address,address,address,uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "1dd637d8": "emergencyProtectedMode()", +"1dd682ee": "getNeededCollateralValue()", +"1dd68782": "tokenArt(uint256,uint8,uint8,uint8,string)", +"1dd6b9b1": "setCurrentEpoch(uint256)", "1dd6f85e": "CreateLOK(address,uint256)", "1dd72454": "TransferManual(address,address,uint256,string)", +"1dd72885": "finishCurrentPhase()", "1dd7335c": "allocateDividendsToWinners(uint256,address[],uint256[])", +"1dd753c1": "MinTemperature()", +"1dd78325": "getProductCount(string)", +"1dd787a8": "processExternalMain(uint256,uint256,uint256,uint256,uint256,uint256,bool,uint8)", "1dd7cf6d": "getHumanInfo(uint256)", "1dd80586": "getPlayerSpaceshipBattleStakePaidById(uint256)", +"1dd82927": "EventBattleAdd(address,uint256)", "1dd85687": "adminSetEnviroment(uint256)", +"1dd88010": "CONFIRMATION_ROLE()", +"1dd880a1": "updateAllowance(address,uint256)", "1dd8f053": "minPriceInWeiForIco()", +"1dd92a66": "increaseBid(uint256,uint256)", +"1dd94612": "AddLiqRLR()", "1dd95a98": "AIRDROPS_COUNT()", "1dd9a3cf": "_sendEthereum(uint256)", +"1dda16ba": "wrapNFTs(uint256[],address[],bool)", "1dda5c7d": "testFailSubBalanceBelowZero()", +"1dda9c05": "upgradeContractS1()", "1ddabf7a": "friends(address)", +"1ddb35ea": "init(address,uint8,address,address)", +"1ddb52c3": "totalTokensDeposited()", "1ddb9105": "creditVault(uint256,address,uint256)", +"1ddbefc9": "targetShot(address)", "1ddc0ef0": "audit()", "1ddd303d": "setV_R3(uint256)", "1ddd39cc": "addcoinslimit()", "1dddbf07": "confirmExchange(address,uint256)", "1ddde716": "advisorsAccount()", +"1dde9f96": "BetGame(bool)", "1ddf147f": "assignedDoublrContract()", "1ddf9729": "IncomeTaxCalc()", +"1ddfa252": "BZX()", +"1ddfb1e5": "setImpactDivisor(uint256)", "1ddfd7db": "supportsTradingPair(address,address,bytes32)", "1de012cd": "TRUST()", "1de032a5": "setIsStudio(address,address,bool)", "1de0e877": "proposedControllerPendingUntil()", +"1de13806": "timeTilTimeout()", "1de14175": "setDelegadoDeEscuelaVerify(bytes32)", "1de1441f": "remainingEPXSupply()", +"1de18af7": "redeemGivenMinimumGoalNotAchieved(uint256)", "1de1ee7b": "addPublicKey(bytes32,address)", "1de21b76": "P1()", "1de22867": "BeatTokenPurchased(address,address,uint256,uint256)", @@ -17127,198 +31248,385 @@ "1de271a4": "cap_tmx()", "1de28857": "getShareBalance()", "1de38038": "makercoin(uint256)", +"1de3849c": "unLockBalance(address)", "1de3d4b9": "ReleaselockAddress(address)", +"1de3df2c": "depositWETH()", +"1de40e49": "DECAY_RATE()", "1de4334a": "get_time_locked_contract(uint256)", +"1de43c4b": "candidate(uint256)", +"1de45ac6": "admin_fin()", +"1de45ad1": "OnlyOwnerError(address,address)", "1de46a78": "admin3()", "1de473ea": "setC4FContractStatus(address,uint8)", +"1de4b555": "LandmarkSold(uint256,uint256,uint256,address,address)", "1de54fcd": "unlockedNowBalanceOf(address)", +"1de6934a": "treasuryFundRewardRate()", +"1de69c5d": "h(int256)", +"1de6fbb8": "referrerSushiRewards(address)", +"1de70289": "unpack(address,uint256,uint256)", +"1de790b0": "getContractProviders(uint256)", "1de7f3e3": "setBankrollpercentage(uint256)", +"1de7fddc": "testview(uint256)", +"1de92fd8": "IndividualCap()", "1de95d74": "AREFWallet()", +"1de97f02": "queryGlobalMine()", "1de98d93": "deleteUserByEmail(bytes32)", +"1de9f883": "createProductItem(string,string)", "1dea0c57": "getRealBet(uint256)", "1dea157f": "getPaintingArtist(uint256)", "1dea3f0c": "recordOffchainPurchase(address,uint256,uint256,string)", +"1dea52e8": "TaoNhomVanDongVien(string)", +"1dea8286": "HATCH_REWARD()", +"1deac856": "stringtosend(address,uint256)", "1dead827": "_percentSoldInICO()", "1deb0a8f": "changeState(bool)", "1deb112b": "initialSupplyPublicPreICO()", "1deb9b9e": "EventBid(address,uint32)", +"1debb253": "lockWallet()", "1debbe2f": "addExp(uint256,uint32)", +"1dec55b3": "bonusReferrer(uint256)", "1dec8585": "getCurrentStageByTime()", +"1dec8f5e": "escrowbalance()", +"1decf162": "setGreedyRevert(bool)", "1ded2d87": "Transaction(address[2],bytes,uint256,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", "1ded319d": "numberOfClaimed(address)", "1ded587c": "Hotlist()", +"1ded6927": "refMinNumber()", +"1ded7df8": "checkIfStakedBigger(address)", "1dedc6f7": "consume()", +"1dede107": "blacklistToken(uint256)", +"1dede21b": "updateTokenIPFSPath(uint256,string)", +"1dee9aac": "certificateHash()", +"1deef941": "getDmmTokenIds()", +"1def1ede": "_all_supply_checks(uint256)", "1def4c9d": "TransferToBTCoE(uint256)", "1def5033": "taskArray()", +"1def7f1b": "InvestmentAccepted(address,uint256,uint256)", +"1defc035": "updateRewardParams(address)", "1df0187b": "BONUS_AMOUNTS_VALUES(uint256)", "1df025d6": "updateGoalCheck()", +"1df04b72": "orderTraders(bytes32,uint256)", +"1df0de13": "LIQUIDITYBOND()", "1df0e359": "createForecasting(uint256,uint256,uint256)", "1df13f28": "ICOBonusPercent2week()", +"1df16e22": "wdether()", +"1df176c8": "getUserArrayLength()", "1df19259": "Khabayan()", "1df1ec82": "getProviderOwner(uint256)", "1df224c1": "privateToken()", +"1df294fb": "venus()", "1df2bcbc": "setPresaleCont(address)", "1df36e63": "delInvestor(address)", "1df3e8a9": "GuardaProva(string,string,string,string)", +"1df40eaa": "getContract(uint64[3])", "1df411a6": "setOfferTime(uint256)", "1df4241f": "StatEvent(string)", +"1df43c46": "changeMultiSigAddress(address)", "1df473bc": "newContract(bytes)", "1df47aad": "ReplayProtection()", +"1df49883": "checkMarket(address)", "1df4ccfc": "totalFee()", "1df4f144": "multiply(int256)", "1df5a8f4": "GlobalBTC()", "1df5e755": "Etherandom()", +"1df60eda": "startClaimPeriod(uint256,uint256,uint256,uint256)", "1df68102": "createSellOrder(uint256,uint256)", +"1df6bb20": "exceptions(address)", "1df6d86e": "_buyLeader(uint256,uint256)", +"1df7013a": "getCastleStats(uint32)", "1df73f51": "getFreeSperm()", +"1df75ef9": "clue()", +"1df84d87": "deleteFactProviderInfo(address)", +"1df87281": "beforeBreakPoint()", +"1df87870": "TENS_Proxy_Admin()", "1df87cad": "raiseBuyOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"1df8db01": "LogTokenExportEnabled(address,uint256)", "1df8eaa2": "showAuthorizerTwoAmount()", "1df93558": "fundingStartTime()", "1df95786": "envelopes(uint256)", +"1df9cd55": "firstEntryTime()", "1dfa0cf6": "ConfirmDispose()", "1dfa3ca8": "thirdPartyInvestments(address,uint256)", +"1dfa45e3": "YIELD()", +"1dfa4da0": "grv()", "1dfa6329": "finishPVE(uint32)", +"1dfb1b5a": "_setVotingDelay(uint256)", +"1dfb3fa7": "ID2address(string)", "1dfbf227": "makeInvestment(address,string,uint256,uint256)", +"1dfc648a": "sendFnB()", +"1dfc70f8": "CampaignUpdated(bytes32,uint256,uint256,uint256,uint256,bool,address)", "1dfc91d4": "TokenPresalePurchase(address,uint256,uint256)", +"1dfc99c4": "clientRaindropAddress()", "1dfd04b9": "buyEmptyPixel(uint256)", "1dfd1ddd": "ListNotValSince(uint256)", +"1dfd6d3c": "OnProfitOrgPay(address,uint256,uint256,uint256,uint256,uint256)", +"1dfdc5d9": "beneficiaryDeveloptment()", "1dfde4a5": "test_insert_findWithHintPrevAtPosition()", +"1dfe1898": "referrers()", +"1dfe341f": "BurnTokens()", +"1dfe90fc": "lockAddMinter()", +"1dfebc2e": "calcDesireByGivenAmount(address,address,uint256,uint256)", +"1dfeddfd": "stakesSum()", +"1dff01be": "minimumDepositETHAmount()", "1dffa3dc": "cancelJob(uint256)", "1dffd012": "getUserManager()", "1dffdbe6": "trade(string,uint256,uint256)", "1e0018d6": "investor()", +"1e0029c8": "debt(uint256)", +"1e004bbd": "rubinPerBlock()", +"1e007c2e": "API_NeedClearHistory(address)", "1e010439": "getBalance(uint256)", +"1e016e30": "changeLogicAddress(address)", +"1e01857f": "getWithdrawableETH(address)", +"1e018954": "claimable_tokens()", "1e0197e2": "tournament()", "1e01a0e6": "doit(address)", "1e01a172": "issueDescription(uint256)", "1e021b2b": "getproductstatus()", +"1e02a614": "updateDataProvider(uint8,uint256,address)", "1e02bf62": "checkOutstandingQueries()", "1e02f805": "newInvestment(address,uint256)", +"1e030318": "add(uint256,address,uint16,uint256)", "1e031a00": "QuickFlip()", +"1e03e650": "greeting2()", +"1e03f798": "SetFsTKAuthority(address)", "1e0419d4": "finalWinner()", +"1e043f25": "setSwapRouting(uint256,address[])", +"1e04a593": "getCurrentReleaseLimit()", +"1e04a6cb": "ViewRealBalance(address)", "1e04e856": "depositEth(address,address)", "1e04eee9": "mintChipUnsafely(uint256,bytes32)", +"1e05321b": "permittedStables()", +"1e056904": "TokenShare(address)", "1e0582e9": "_daysFromDate(uint256,uint256,uint256)", "1e05e0c8": "bonusesForTimesCount()", "1e0610f6": "getRealty(address,uint256)", "1e063d98": "MRDSTSCoinToken()", +"1e065f0f": "approve_430(address,uint256)", "1e06c41f": "saleStartUnixTime()", "1e06e25e": "Zoo721(address)", +"1e06ecac": "payModelCount()", "1e075aba": "batchUnlockVestedTokens(address[])", +"1e07d8cc": "SetLockData(address,uint256,uint256,uint256)", +"1e07e9e3": "WorkDays()", +"1e07ef96": "setPromoCode(string,uint256)", "1e08045d": "getOwnedTanks(address)", +"1e083cd3": "changeRate(uint256,uint256,uint256)", "1e084558": "licenseInfo(uint256)", "1e08d687": "removeSubcontract(address)", +"1e090f01": "lockedStakesOf(address)", +"1e092efb": "yieldFarm()", "1e095eb3": "GHPToken()", "1e0976f3": "receiveVerification(uint256,uint256,uint256,bool)", "1e09e67b": "Rasthen()", "1e0a0f60": "info_CanBeClaimed(uint256)", "1e0a24b1": "revertIfReturnLessThanMin()", +"1e0af6e4": "rate(address,address,address,uint256)", +"1e0b5926": "testUnavailableActionsWhenAvaiable()", "1e0b760c": "Cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "1e0b8c87": "hasSkills(address,uint256,uint256,uint256)", +"1e0bbcbc": "enterPool(uint8)", +"1e0bd2fe": "changePowerPrice()", +"1e0c41a8": "FundsMove(uint256,bytes32,address)", "1e0c60e2": "SGem()", +"1e0c6a7a": "paths(address,uint256)", "1e0c7ed4": "setConfigBool(bytes32,bool)", +"1e0c929d": "globalDepositLimit()", +"1e0ca8f9": "claimIphoneComponent()", +"1e0cd44e": "balGulpPairs(uint256)", +"1e0d92df": "createN808forSwap(address,uint256)", "1e0e17a2": "claimMistake(bytes32)", "1e0e3925": "numElements()", +"1e0e4286": "pendingDevReward()", +"1e0e777b": "getRegionTotalRequestCount(uint32)", "1e0e7c2b": "KODOKv()", +"1e0ee13a": "setMaximumSuccessFee(uint256)", "1e0efae1": "claim_devidend()", +"1e0f53f3": "videoTokenIds(string)", "1e0f6ed8": "TokenSaleFinished(uint256,uint256,uint256,uint256)", "1e0f9795": "getNewFib(uint256)", +"1e0fbfa2": "AIRDROP_ROLE()", +"1e10b4d4": "participantId(address)", +"1e10eeaf": "removeTokens(address,uint256)", +"1e112751": "withdrawEth(address,uint256,string)", "1e11764e": "GameFinished(uint256,uint256,string,uint256,address)", "1e120efb": "showEducationDetails(uint256)", +"1e12d1ae": "checkUnstake(address,uint256)", +"1e13ea0d": "pairInfo(uint256)", "1e1401f8": "getReturn(address,address,uint256)", "1e141bb0": "releaseTime4()", "1e14c48c": "setTokenFeeWithdraw(address,uint256)", "1e14d823": "addMarketplaceContract(address)", +"1e14df67": "setMinimumMigration(uint256)", +"1e1525bf": "SeasonWinner(uint32,uint256)", +"1e157ad1": "SI()", +"1e15a620": "createAudit(string,string)", "1e16521b": "fulfillBurnRequest(uint256,string)", "1e16980c": "setUnburnableWallet(address)", +"1e16e92f": "recordGasSpent(bytes32,bytes32,address,uint256)", "1e171d7c": "hasFunded()", "1e172e90": "TransferHappened(uint256,bytes32,address,address)", +"1e1763d3": "checkStorage()", "1e1781af": "unfreezeAccount(address,bool)", "1e179ae0": "getToken(bytes32,uint256)", "1e17f292": "getAPRTx(uint256)", +"1e180b36": "FLAMING_O()", "1e185b2a": "BTEcoin()", "1e186e4c": "TestERC20()", "1e18c404": "huroc()", +"1e18dc45": "pauseContractTransfer(bool)", +"1e19082a": "getDisputeWindow()", "1e191c0f": "goalSale()", +"1e1a3ce7": "transferToPSL(string,uint256)", "1e1a48cf": "transferMethodId()", "1e1a4eef": "setShareTokenAddress(address)", +"1e1a7f03": "addCodeAndImplementationFromWallet(address)", "1e1a90a6": "onPayout(address,uint256)", "1e1ad51c": "getFunding_Old(uint256)", "1e1b13c0": "coinAge()", "1e1b2e0f": "getLotteryPrizesLength(uint256)", +"1e1bb619": "tradeContractRefundBid(address,uint256,uint256)", +"1e1bff3f": "setExecutor(address,bool)", "1e1c72f4": "requestFreezeAccount(address,string)", "1e1c86b7": "CCProject()", +"1e1cb732": "CLIQ()", "1e1d237e": "getSortedArray(uint256[])", +"1e1d58de": "mbOwner()", "1e1d696a": "changeLibAddress(address)", "1e1ddacc": "saleController()", "1e1e0a5e": "doHash(string,uint32,string,string)", +"1e1e3c5b": "createLand(address,uint256,uint256)", "1e1e3e0f": "vaultBalance(string)", +"1e1e58ab": "create(address,uint32)", +"1e1f4a55": "prevRoundETHReward()", +"1e1fc057": "ContractSource()", +"1e1fd2a4": "_currentCardId()", +"1e202240": "liquidatePosition(bytes32,address,uint256)", "1e20363a": "setTokenMetadataBaseURI(string)", +"1e2043b1": "registerUnwind(address)", "1e204acf": "HODLrSoldWin(address,uint256,uint256,uint256)", +"1e2060ce": "_requireSystemActiveIfNotOwner()", "1e20b4b9": "allocateAllUnsoldTokens(address)", +"1e20d14b": "pushReport(uint256)", "1e215f70": "gbtAddress()", "1e217bf8": "releaseUnclaimedFunds()", "1e223143": "getFirst()", +"1e225a6e": "disableAccountRecovery(address)", "1e22648a": "setSnapshotBalance(address,uint256)", "1e2273a7": "convert256ToReal(uint256)", +"1e227507": "zLotPool()", +"1e227f00": "userIdsOrders(address)", +"1e228514": "equal()", +"1e22b6e8": "CreateUBC(address,uint256)", "1e22ffa5": "ClickRUB(uint256,string,string)", "1e23300b": "createDiamond(string,address,string,string,string,string,string)", +"1e243be4": "Shoe()", "1e2466c6": "ICOTerminated()", +"1e2487d5": "setIssuerRights(address,bool)", "1e24e029": "createRequestAsPayer(address[],int256[],address,uint256[],uint256[],string)", +"1e2502ad": "setParticipation(uint256,uint256)", +"1e25461b": "actAddup_SecurityAssistance(uint256)", +"1e255d7c": "levelBonus(uint256)", "1e25dc54": "transFee()", +"1e25ea7d": "addToken(string,bytes)", +"1e25ed4c": "RemoveManager(address)", "1e2629e1": "initiateMigration(address,address,address)", +"1e263675": "INVESTMENT_RATIO_PRESALE()", "1e26fd33": "setBool(bool)", +"1e2720ff": "depositReward(uint256)", "1e273649": "getCountPartipants()", "1e275d5f": "mock_getUInt(address,address)", +"1e278c18": "KillerRewardPercentage()", "1e279a37": "get_balance(address)", "1e27a965": "JullarCrowdsale()", "1e27ae4d": "getRecordHolder(uint256)", +"1e282c66": "withdrawNotExecutedResult(bytes32)", "1e28a3a5": "attachCrowdsale(address,address)", "1e28ba20": "YeojinToken()", "1e28f29b": "initialTiers()", +"1e293c10": "setMaxTransactionAmount(uint256)", +"1e29e57b": "startHeightOfPriIEO()", "1e2a7105": "FromQueue(address)", "1e2a9d4c": "topup(address,address,uint256)", +"1e2ad5bb": "setLiquidationDiscounts(address[],uint256[])", "1e2aebf9": "ETHERCREDIT()", +"1e2b0bda": "precitajCislo()", "1e2b6db2": "getBdpEntryPoint(address[16])", +"1e2ba237": "setAllocateSeigniorageSalary(uint256)", "1e2bdfdf": "setAdvPrice(uint256)", +"1e2c07e4": "Collection(address,uint256)", "1e2c23b3": "toEth(uint256)", +"1e2c62d3": "checkPriceDisagreement(address,address,uint256,uint256,uint256)", "1e2c74f6": "kill(bool)", "1e2ca0f3": "updateLeftLottery(address)", +"1e2d0f38": "winnersTickets(uint256)", "1e2d5651": "totalContrib()", "1e2da3e9": "PawsCoin()", +"1e2dd23b": "expirationTimestampsLength()", "1e2def3a": "saleStopTimestamp()", "1e2e35a4": "sellPoohs()", "1e2e3a6b": "getExchanges()", +"1e2e40e7": "INITIAL_SUPPLY_40PERCENT()", +"1e2e4ebc": "getInputAmount(address,address[],uint256)", "1e2e7a06": "registrationTime()", "1e2ed152": "ECO_SYSTEM_BONUS()", +"1e2ef6e9": "testTradeThroughPaths()", +"1e2f3791": "panicSell()", "1e2f48da": "assertOwnersAreConsistent()", +"1e2f73b1": "contractCreator()", +"1e2f9a11": "presaleParticipation(address)", "1e2fc4f7": "test_mint()", +"1e2fc8cb": "getPlatformAssetsWallet()", "1e2fee94": "CatDestinity()", "1e2ff94f": "currentTimestamp()", "1e2ffcef": "Show_All_Company()", "1e30397f": "isValidName(string)", +"1e303c27": "eachProposal(address)", "1e30b599": "Processables()", "1e31264d": "_premiumPricePer30Days()", +"1e31cee9": "highscorePot()", +"1e31d053": "delegatee()", +"1e331f52": "revealWaifus()", "1e3339f0": "MTT()", "1e335962": "token_multiplier()", "1e33a6d5": "setGasUsage(bytes4[5],uint256[5])", +"1e33f3a7": "get_LPtoken_address(uint256)", +"1e33fc6b": "totalLong()", +"1e34611b": "syncGlobal(uint40,uint256,uint256,uint256,address[])", +"1e346f46": "updaterandomTurboStart(uint256,uint256)", "1e34c585": "setConfig(uint256,uint256)", +"1e35d0ab": "tokenUnsupported()", "1e35e567": "fetchOrderByIdWithMerchant(string)", +"1e35ff05": "validateRequestParams(address[3],uint256[12],uint256)", +"1e36169e": "tt()", +"1e366187": "jigoutuighaneth()", +"1e36c5e2": "setAndCheckSaleMode()", "1e36d755": "sendTokenToOwner()", +"1e370d16": "ethBuySwitch(bool)", "1e372dd3": "Advanced_Anemoi(uint256,string,string)", +"1e375901": "latestPing(address)", "1e375ab9": "claimReferralBonus()", +"1e377df0": "maxBNB()", +"1e378133": "liquidate(address,address,uint128,uint112)", "1e38046c": "address3()", "1e38a011": "setRoutePrice(uint256)", +"1e38cb91": "enterMechs(uint256)", +"1e38cdb2": "transferTrueCurrencyProxyOwnership(address)", "1e391738": "minimumGoalInWei()", "1e39499d": "scheduleCall(address,bytes,uint256)", +"1e3a1e8f": "accrueInvestorsTokens(address,uint256)", "1e3a5831": "Claimable(address)", +"1e3af27d": "checkParams(uint128,uint128)", "1e3b92b4": "getGalaxy(uint256)", "1e3b9de5": "getClaimant(address)", "1e3ba116": "_supportsAllInterfaces(address,bytes4[])", "1e3ba941": "StexTalk()", +"1e3c605f": "getTreasuryReward(address)", "1e3c73bd": "BdpPriceStorage(bytes8)", "1e3c9352": "grant(address[])", +"1e3d1751": "voteTokenProject(address)", "1e3d9c04": "removeLink(address,bytes)", +"1e3dd18b": "allPairs(uint256)", "1e3e6369": "GetMySnail()", "1e3ea569": "SentTokens(address,uint256,uint256,uint256)", "1e3f11ee": "getPlayerGeneralAttr(uint64,uint8)", @@ -17327,43 +31635,78 @@ "1e4092e5": "FOUNDER_AMOUNT()", "1e4146b0": "generateCombinationKey(uint8[4])", "1e41583b": "reclaimElement()", +"1e41613c": "updateProtos(uint16[],uint8[],uint8[],uint8[],uint8[],uint8[],uint8[],uint8[])", +"1e41a084": "mutiplyDelivery(address[],uint256,uint256)", "1e41be58": "deleteApplication(string,bool)", "1e41f63e": "viewAll(string)", "1e42698b": "setScrapAuctionDuration(uint256)", +"1e42fdd0": "SLOT_INTERVAL()", +"1e438f19": "isDebtOpen(uint256)", +"1e43a7a1": "flashLoanRate()", "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)", +"1e452a90": "subBalanceAddReserve(address,address,uint256,uint256)", "1e4532f1": "balances_bonus(address)", +"1e458bee": "mint(address,uint256,bytes32)", "1e45de61": "GetWinningAddress()", +"1e461e17": "numAnimalsXType(uint8)", "1e4623e1": "segmentHash(string,uint256,bytes32)", "1e464460": "AscendGod()", "1e466eee": "triggerVolcanoEruption()", +"1e46cb7f": "getHnonce_harvest(address)", +"1e47628c": "bTokenMetadataAll(address[])", +"1e477d88": "getElection(uint64)", +"1e478649": "stopUpgrade()", +"1e47a476": "increaseTeamPoints(uint256,uint256,uint256)", +"1e47b558": "createActivity(uint256)", +"1e485f11": "TOKEN_SPENDER()", +"1e48907b": "setOwnerByAdmin(address)", +"1e49226a": "isDividendClaimedAt(address,uint256)", +"1e49758c": "_staker(address,uint256)", +"1e49c10f": "getMaximumDeposit()", "1e49d5ab": "getUserInfoAndConfig(address)", +"1e49d7a4": "viewEthAmount(address)", "1e4a126e": "BeforeChipObtain(uint32)", +"1e4a8210": "direct30(address,uint256)", +"1e4a97dd": "createGroup(string,string)", "1e4adcf7": "weiDonated(address)", "1e4b5652": "setKNCRate(uint256)", +"1e4b57cb": "tradeEthVsDAI(uint256,uint256,bool,uint256)", "1e4ba4d4": "swap(uint256,address,address,uint256,uint256,uint256,uint256)", "1e4bb033": "HcoinToken()", +"1e4bbc2d": "NewMember(uint8,bytes32,address)", "1e4bd42c": "claimAllTokens()", "1e4bdf27": "TransferActive()", "1e4bffde": "_getBegin(int256)", "1e4c6e7e": "gatito()", "1e4c6f7c": "base_token_seed_amount()", +"1e4c71c2": "LPemissionRewards(address)", "1e4c7736": "updateManyLandData(int256[],int256[],string)", "1e4ccdc4": "resultDraw()", "1e4d17c5": "setFundraiserAddress(address)", "1e4df315": "HRChainERC20()", "1e4df938": "referralPool()", +"1e4e0091": "setRoleAdmin(bytes32,bytes32)", +"1e4e5b61": "supplyOfferedPct()", "1e4f95c7": "pipeMoney()", +"1e502ec5": "updateAirdroplimit(uint256)", "1e504c9c": "setRegisterPrice(uint256)", +"1e507393": "setPropertyManager(address)", +"1e5077a0": "isLapFinished(uint256)", +"1e509434": "transferMultiple(uint256[],uint256[])", +"1e5097be": "POOL_THISLPTOKEN()", +"1e50cfbd": "increaseBurnAllowance(address,uint256)", "1e5140dd": "closeTradeProfile(bytes,bytes32)", "1e516c32": "OMIVIATEST()", "1e519c4c": "getCurrentModifier()", "1e51a907": "getServiceNames(bytes32,address[],address)", "1e51cb10": "_MineId()", +"1e522b29": "getLiquidationPenalty()", +"1e523003": "rootParentAddress()", "1e5253a4": "RegisterShareholder(address)", "1e5296ef": "getMySellOrdersBlackMarketComplete()", "1e52aa52": "startBetRed()", @@ -17372,27 +31715,45 @@ "1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", "1e5393cf": "setDividendAndPayOut(uint32,uint32)", "1e53a3a0": "SetContracts(address,address)", +"1e53adfb": "trigger7(address)", "1e53efe0": "getBonusAmount(uint256)", +"1e53ff65": "setAutoDistributionViaETHContributions(bool)", +"1e541e81": "getAssetUsage(uint256)", "1e542fd4": "AddLock(address,uint256,uint256,uint256,uint256)", "1e550ca2": "carTaxiTokenAddress()", "1e552efc": "MarnieCoin()", "1e5571bc": "getTankSell(uint32)", +"1e557966": "externalBalance(address)", +"1e55a376": "blacklistAddresses(uint256)", "1e561d5e": "createSellingProposition(address,uint256,uint256,uint256)", "1e566dae": "_moveToken(address,address,uint256,bytes,address,bool)", "1e567582": "gxc()", +"1e567a80": "setIsRefundAble()", +"1e576912": "mintNFT(address,uint256,string)", +"1e57a2b2": "claimMelterAdmin()", "1e57e3bb": "EtherReceived(address,uint256)", "1e580615": "cashIn()", "1e5890c4": "saveResult(uint256)", +"1e58e70e": "creatorWithdrawWantToken(uint256)", "1e59b53f": "Medallion()", "1e59c529": "register(string,address)", +"1e59e06f": "NotaryRegistered(address)", +"1e59f7eb": "currentDelegate()", +"1e5a0bc6": "basePrice7()", "1e5a652b": "MDICOStage1(address,address,uint256,uint256,uint256,uint256)", +"1e5a92c1": "manageCollection(address,address,bytes)", +"1e5acc48": "approve_782(address,uint256)", "1e5b433b": "testTransferControl()", +"1e5ba66c": "nova()", "1e5bd14a": "setRegulator(address,bool)", "1e5c6176": "BitChordCrowdsale(address,address)", +"1e5ca9c6": "DAB()", +"1e5cb9be": "migrations(uint256)", "1e5d1a4c": "End(string)", "1e5d2e41": "geneCore(uint256,uint256,uint256)", "1e5d2e78": "_updatePools(uint8,uint256)", "1e5d629d": "createChannel(bytes32,address,uint256,address,uint256)", +"1e5d708b": "treasureAmount_()", "1e5e668f": "fetchDataMain()", "1e5e8aa9": "token_rate()", "1e5f34af": "sub(uint8,uint8)", @@ -17404,6 +31765,9 @@ "1e6000c2": "AffiliateReceived(address,address,bool)", "1e6090f4": "isContractDeprecated()", "1e60ab84": "PalaceResidence()", +"1e60d03a": "POWER_MONTH_6()", +"1e612345": "MintACryptograph(address)", +"1e6154a2": "addToken(address,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", "1e625935": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address)", "1e626456": "tokenFallbackData()", "1e6288fa": "soldTokenValue()", @@ -17411,32 +31775,66 @@ "1e62a511": "cHWCtoEth()", "1e62a915": "set_participant_topl_address(address,uint256)", "1e62be25": "Bytes32Passer()", +"1e62ddfe": "RefundCollected(address,uint256)", "1e639798": "reset(address,address,address,address,address,address)", "1e63b3d3": "bancorConverterAddress()", +"1e63d740": "produceNFTs(address,address[],string[],uint8,uint8)", +"1e64d9a4": "DeletedOwner(address)", "1e658b74": "_userSignUp(string,address)", +"1e658e36": "reducibleReleaseAll(address)", "1e659135": "PVBToken()", "1e65dc88": "EtherMemes()", +"1e662774": "consumerInfo(address)", "1e6704bd": "maintenanceSetAccountsList(address[])", +"1e67782e": "EUR100()", +"1e68607a": "getMaxAPR()", "1e688c14": "fulfillBounty(uint256,string)", +"1e689c64": "getBiggestholders()", +"1e69dd22": "performSwapForETH(address)", +"1e69dfa6": "findEthReceiver(address,address,uint8,uint8)", +"1e6a311d": "setFeeMultiplier(uint256)", +"1e6ac3c0": "userToken2PlayerCount(address)", +"1e6af275": "priceToken(address,uint256)", "1e6b0e44": "finderFee()", +"1e6b37dc": "changeOraichainAddress(uint256,uint256,string)", "1e6b4c6f": "setStakePeriod(uint256)", +"1e6b6267": "liquidatePartial(uint256,uint256)", +"1e6b909b": "isdEaD(address)", "1e6bd462": "getAllGamesCount()", +"1e6bf55b": "transferTreasuryFund(address,uint256)", +"1e6c3850": "validityPeriod()", "1e6c3d0e": "BLACKCOIS()", "1e6c593c": "checkClaim(string,string)", +"1e6c598e": "trades(uint256)", +"1e6c7fc2": "bDevVestingBalances(uint256)", +"1e6d1506": "changeControllerByMCWS(address,address,uint256)", +"1e6d26af": "NewExit(address,uint256,uint32[])", +"1e6d3ce7": "disableCap()", "1e6d4180": "stageBonus()", "1e6d58ce": "AHA_Token()", +"1e6d9f17": "DABMaxSupply()", +"1e6dbf3f": "_decode_sol_int16(uint256,bytes)", +"1e6e2190": "setPriceDeviationThresholdFactor(uint256)", +"1e6e24c9": "redeemPartially(uint256)", +"1e6e57ab": "_stopByAgreement(uint256)", "1e6e5d81": "addContact(bytes32,address)", +"1e6ee830": "taxFeeTotal()", "1e6efc83": "setRestartGamePeriod(uint256,string)", "1e6f01a7": "setPI_edit_23(string)", "1e6f9c1e": "adjust_Transfer_data(bool)", "1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", +"1e7053f7": "verifyBlockProof(bytes32,uint32,uint32,bytes,bytes32[],bytes32[])", "1e70a239": "getAllGiftTemplateIds()", "1e711ec0": "plan_active_time()", "1e7230c5": "benReady()", "1e7231b6": "disablePhenomenon(bytes32)", "1e724447": "icoTill()", +"1e72553d": "gameTimeout()", "1e725589": "getAddressesFromUsernames(string[])", +"1e7269c5": "minted(address)", "1e72a7fc": "calculateVariation(uint64,uint64,int64)", +"1e72b719": "integrate_inv_supply(int128)", +"1e72d279": "testingGetDaiBack()", "1e72d642": "BezantToken()", "1e737709": "getSourceValue(uint256,uint256,uint256)", "1e73b362": "withdrawContractEther(uint256)", @@ -17445,166 +31843,294 @@ "1e745e61": "createContest(string,uint256)", "1e74a2d3": "getMinimumEndowment()", "1e74c414": "WashExchange()", +"1e750d07": "balanceInLP(address)", "1e7527b0": "setOwner(uint32,int256,address)", +"1e75527e": "TokensRejected(address,uint256)", +"1e75a30e": "updateFarm(address[],bool)", +"1e75a7ba": "genKey(uint8,bytes32)", "1e75c12d": "ETLTokenPresale(address)", +"1e75e267": "tell_owner(string)", +"1e7663bc": "getTokenId(string)", +"1e76da8c": "provable_setProof(bytes1)", +"1e76dcdd": "stopRoll(uint256)", +"1e76f1c9": "jp()", +"1e771e1d": "startAlrightTimestamp(bytes32)", "1e7769de": "tryForcePublic(uint16)", +"1e77726b": "teamOneMembers(uint256)", +"1e7785f7": "borrowRewards()", "1e77933e": "change(address)", +"1e779739": "setFactoryRouter(address)", "1e77b2e0": "updateRate(string,uint256)", +"1e784ee2": "unlockPrice()", "1e78cfe1": "minimumPayout()", "1e79933f": "removeTagByModuleType(uint8,bytes32[])", "1e7a505f": "register(address,bytes32)", "1e7a5bf7": "testMintAuth()", +"1e7adf4c": "AccessorAdded(address,address,uint256)", "1e7ae71f": "owner1Of(uint256)", +"1e7b5169": "monthlyAllocation()", +"1e7b76c3": "saleContract(address)", "1e7be210": "whitelists(address)", "1e7bef65": "setIncubatorContract(address)", "1e7c20ac": "getCompte_24()", "1e7c27cb": "ADMIN_CONTRACT()", "1e7c402b": "test_percOf2()", +"1e7c40e0": "approveCharity()", "1e7cedb7": "TKTToken()", "1e7d84cb": "getproduuct(uint256)", "1e7de8cc": "setChibiGEN0Price(uint256)", "1e7e2064": "addPeers(address[])", "1e7e4b5e": "PREISSUED_AMOUNT()", +"1e7ea6ef": "SystemChangeShareTimeGap(uint256,uint256)", "1e7ea8d5": "getFreelancerCategories(address,address)", +"1e7efed3": "makerdaoDaiDebt()", +"1e7f3e4e": "_getActionAndDispute(uint256)", +"1e7f87bc": "totalFrozen()", +"1e7f8f0f": "createTransaction(address,uint256)", +"1e7f8f71": "GetOwnerHouseDetails(uint256)", "1e7fa008": "amountRemaining(address,bytes32[])", +"1e7ff8f6": "getTotalStake(address)", "1e801c8c": "sealForChanges(uint256)", +"1e80e64e": "inviter(address,uint256,uint256)", "1e81086d": "setDirectMintAgent(address,int256)", +"1e81488d": "tokenReward5()", "1e815fcd": "isBuyOpen()", +"1e81862a": "setSuperNode(address)", "1e81ccb2": "pings()", "1e820325": "finalizeRound()", "1e822140": "transferToLockedBalance(address,uint256)", "1e829230": "createGrant(bytes32)", "1e82965e": "DCTR()", +"1e830f88": "setNft(address,address)", "1e83409a": "claim(address)", +"1e837661": "invokeWithPayload(address,bytes)", "1e83bab7": "singleInvokeWith2Args(address,string,address,uint256)", "1e83cdab": "extract()", "1e83ce17": "houseFeeThreshold()", "1e83e697": "setTokenOptions(bool,bool,bool)", "1e841271": "setTestFee(uint256)", +"1e84b138": "start(address,address,uint256,uint256,uint256)", "1e84c725": "emergencyTransfer(address,address,uint256)", +"1e84fe37": "numOfConfirmed(uint256)", "1e85107c": "bonusPercentages(uint256)", "1e8551e3": "voteRewardPerUnit(uint256)", +"1e85cd65": "withdrawLockupEpochs()", "1e85e8f0": "TLN_TOKEN_SYMBOL()", "1e860d43": "setNewInvestorsList(address)", +"1e868334": "tokensToClaim(address)", +"1e86c2ac": "increaseAuthQuotas(address[],uint256[])", "1e86ccf5": "setOperatorCommission(uint256)", "1e871309": "rewards_id(uint256)", "1e872f55": "setPlayerLastUpdateTime(address)", "1e8784c9": "SabrinaToken()", +"1e87f862": "SetUsdtAddress(address)", "1e87fe1d": "setSmallCapWhitelistParticipant(address,uint256)", "1e8812f3": "BonusCrowdsale(uint256)", +"1e885071": "setTransferrable(bool)", +"1e887fed": "getMyContributedEth()", +"1e88b2aa": "stages(uint8)", +"1e88e548": "GetTotalCommission(address)", "1e891c0a": "setTimelock(uint256)", +"1e892c00": "isExitsRecommander(address,address)", "1e892c21": "returnForRedemption(uint256,uint256,uint256)", "1e893437": "stageClose()", +"1e896699": "updateRewardPercent(uint256,uint256,uint256,uint256)", "1e8997ec": "PUNCToken()", "1e89c83b": "read_where_gadget(uint256)", "1e89d545": "multiTransfer(address[],uint256[])", +"1e8a37df": "operate(bool,uint8,uint8,uint256,uint256,uint256,address,uint256,bytes)", +"1e8a6890": "getPoolPoint(uint256)", "1e8a98cf": "UP_totalBets()", +"1e8aa33f": "roleAssignment(address)", "1e8b0d03": "EventBankrupt()", "1e8b31dc": "batchPay(address[],uint256[],address[])", +"1e8b76ad": "foreclosed(uint256)", "1e8bf006": "getNumbersFromString(string,string,uint16)", "1e8bf1f9": "readInt256s(bytes32[])", +"1e8c0339": "mobilityProfit(address)", +"1e8c3651": "getSynthToTokenOutputAmount(bytes32,address,uint256)", "1e8c72b4": "incrUserAvailBal(address,uint256,bool)", +"1e8cdab3": "pretty()", +"1e8cdd0a": "createAsset(uint256,address,uint256,uint16,uint8,uint8,uint8,uint8[10],uint256,uint64)", "1e8d1510": "KeyFund(uint256,uint256)", "1e8d15f8": "LasVegas()", +"1e8d2572": "changeStakingFees(uint256,uint256,uint256)", +"1e8dd582": "preICOFunders(uint256)", +"1e8e1ec0": "mintMany(address[],bytes32,string[],string[])", +"1e8e8bca": "setTrackingCode(bytes32)", +"1e8e9061": "effectiveLiquidity(uint256)", +"1e8f0d39": "isPresalePaused()", "1e8f11ab": "candleCost()", +"1e8f743a": "setMilkPerBlock(uint256)", "1e8fba36": "fortifyClaim(address,uint16,uint256)", +"1e8ffb03": "hashByPW(uint256)", +"1e901cda": "minSecTurboStart()", +"1e902ae0": "BondPayoutsMNEGetAt(address,uint256)", +"1e908bcf": "MY_BANK(address)", "1e909841": "getEmployerContracts(address,address)", +"1e90c2d5": "executeSwap(address[4],uint256[4],bytes32,bytes)", "1e912334": "maxDonors()", "1e923f1b": "myAddr_test()", "1e924bf8": "tokensReleasedPerPeriod()", +"1e924d03": "rentAdvertisingSlot(uint256,uint256,uint256)", "1e92a65c": "teamAmounts()", "1e935ab1": "requestPause()", +"1e937861": "securitiesCount()", "1e93c209": "powerPool()", "1e93d358": "multiStake(uint256,uint256,uint256,uint256,uint256)", "1e9447f3": "hasDuplicate(string)", +"1e94723f": "getUnclaimedDivs(address)", +"1e947f5f": "lesserThanIntPassTest()", +"1e9485fd": "TimeLock(address,uint256,uint256)", "1e9493d8": "ETH_MAX_GOAL()", +"1e9527d5": "setVotedChi(uint256)", +"1e955dc5": "burnUSDbToSettleCollatteralRatio(address)", "1e962e62": "F0002Token()", +"1e96917d": "nextID()", "1e96bf0e": "separate(address,uint256)", +"1e96e4a1": "ownerSetTotalSupply(uint256)", +"1e9768be": "changeWallet5(address)", +"1e976c65": "purchaseWithERC20(address,uint256)", +"1e97ec94": "getTotalEarnedEther()", +"1e982423": "divd(int256,int256)", "1e9824ee": "setExchangeRates(uint8,uint8)", "1e982b40": "saleOverInTime()", "1e98d334": "initRace(uint8[4])", "1e98d54a": "addGlobalConstraint(address,int256,bytes32,address)", +"1e98fd1c": "Users(uint256)", +"1e99657c": "extendCoupon(uint256,uint256,uint256)", +"1e99d569": "nextStreamId()", "1e9a04a7": "secondRoundICOStart()", "1e9a6272": "onDelivery()", "1e9a6950": "redeem(address,uint256)", +"1e9a6fd0": "createFranchise(address,string,string)", +"1e9b12bd": "AuditRequests(bytes32)", +"1e9b12ef": "setStakingToken(address)", "1e9b1312": "accountAddress()", +"1e9b2cba": "viewNumeraireAmountAndBalance(address,uint256)", "1e9b91db": "VictorieumNewICO2Token()", "1e9be6a1": "usdEthPrice()", "1e9bf0da": "disown()", +"1e9cee74": "operatorRedeem(address,uint256,bytes,bytes,string)", "1e9cefa3": "updateEmployeeWallet(uint256,address)", +"1e9d062d": "charityPercentOnExpansion(address)", "1e9d2d28": "NewGame(uint256,bytes32,bytes32,bytes32,address,uint256)", "1e9d3bc9": "LZXToken()", "1e9d48cf": "checkUser(address)", +"1e9d5fad": "WARM_UP()", "1e9d8232": "TheGame(address)", "1e9da16a": "n_domains()", "1e9dd927": "kycVerify(address,bool)", +"1e9e20d8": "tokenUniswapPairYMENCRB()", "1e9e541c": "TEAM_TOKENS2()", "1e9e6949": "ActiveChanged(address,bool)", "1e9e928e": "GBPValue()", +"1e9e9506": "set_SAI_TokenContractAddress(address)", +"1e9e9dd4": "createFeeToken(address,address)", "1e9ea66a": "balanceEther10000000(uint256)", "1e9eb554": "deathData_v14()", +"1e9f317c": "minimumVoxBalance()", "1e9f3c24": "ETH888CrowdsaleS1(address)", +"1e9f57a5": "calculateLendSum(address,uint256)", +"1e9f59db": "spend(uint256,address)", "1e9f6dcb": "ticketsFaceToFaceSold()", +"1e9f8aad": "setGasToken(address)", "1e9fcc77": "activateAllowance(address,address)", +"1e9fe623": "func_1581()", "1ea06b9e": "_allowManualTokensGeneration()", "1ea0d0de": "endRace()", "1ea103d0": "Registra()", "1ea134b9": "PeculiumOld()", "1ea1380c": "getScores()", +"1ea1afdb": "invalidate(uint256)", "1ea1e522": "claimF()", +"1ea31431": "transferTokenTestValueMaxBigInteger(address)", "1ea333ea": "_generateDutchAuction(uint256,uint256)", +"1ea341b6": "_getSmartWalletVersion()", "1ea3cae9": "addressToAccountMap()", "1ea48870": "isFunder(address)", +"1ea4a45d": "getUserProgress(address,uint256)", +"1ea4b541": "exitLobbiesBeforeDay(address,uint256)", +"1ea5028d": "sushiPoolId()", "1ea5a292": "endorse(uint256,uint256)", "1ea5efc4": "partner1_voted_update_marriage_status()", +"1ea63741": "getCompBalanceMetadataExt(address,address,address)", "1ea6af82": "reward9()", "1ea6b97f": "getTotalTokensOwed(address,uint16[])", +"1ea70341": "f(uint8,uint8)", "1ea7b0f9": "Bilibit()", "1ea82655": "generatePartnerTokens(uint256)", +"1ea8667e": "draft(bytes32,uint256,uint256,uint256,uint64,uint16)", "1ea8b099": "endMark()", "1ea906b5": "leftTokens()", "1ea90acd": "fetchOrdersForPayer()", "1ea92826": "currentTierIndex()", +"1eaa0e17": "collateral_address()", "1eaa6c4b": "firstTokenExchangeRate()", +"1eaa94d8": "MAX_ALPHA_CHANGE_PER_SEC()", +"1eaaa045": "add(uint256,address,bool)", "1eab0a95": "testingContracts()", "1eabc116": "buy(uint16)", "1eabef31": "YKToken()", +"1eac03ae": "addBoardMember(address)", +"1ead6247": "setRewardsVarLP(uint256)", +"1ead9d84": "NewDevelopeoPriceTicker(string)", "1eada765": "getConditions(uint256)", "1eae5ff9": "getWaitPreselled()", "1eae85cb": "priceOfDate(uint256,uint256,uint256,uint256)", "1eaec76f": "FENIX(uint256)", +"1eafa843": "changeVotingRatio(uint256)", "1eafe00c": "isAmendedEarlyPurchase(uint256)", "1eb02078": "getUIntTypesCount(uint8[])", +"1eb120d6": "setPriceByID(bytes32,uint256)", +"1eb1e03c": "QuickApprove()", "1eb21875": "artistManifestoFundAddress()", "1eb22b45": "sellerDatabase(address,uint256)", "1eb25d13": "InitialSupply()", "1eb25e0a": "configure(uint256)", "1eb3957b": "requestDelegatedFrom(address)", +"1eb3c3c1": "PolicyAdded(uint8)", "1eb42523": "update(address,address,address)", "1eb4dac6": "endSecondWeekICO()", "1eb55c51": "CEI()", +"1eb5b623": "prevJackpots(uint256,uint256)", "1eb5cb66": "resume(string)", "1eb5de94": "privateExchangeRate()", "1eb5ea2e": "returnFunds()", +"1eb68e1c": "startTask(bytes32,address,uint32)", +"1eb6e618": "extraeth()", "1eb726af": "contractAddress(string)", "1eb79e44": "gasForGR()", +"1eb804db": "deleteRegisteredRewardVelocity(uint256)", "1eb8befb": "setNewMediator(address)", +"1eb903cf": "depositBalances(address)", "1eb92366": "setRecommenderMulti(address[],address[])", +"1eb92fda": "PositionUntokenized(bytes32,address,address)", "1eb96a5c": "cancelOwnershipOffer()", "1eb96f7c": "MahalaToken()", +"1eb98381": "l2ReferralShare()", "1eb9ef91": "getAccountsForUser(address)", "1eba7c7a": "setDefaultClaim(string)", +"1eba87b9": "coordinatorFab()", +"1ebaaf66": "getLockedLP(address,uint256)", "1ebb24bc": "_postTransferHook(address,address,uint256)", "1ebbc515": "MakerWithdrewAsset(uint256)", "1ebbe681": "getWinningById(uint256)", +"1ebbe8f6": "depositeWEI(address)", +"1ebc3fc3": "burnAccount(address,uint256)", "1ebcbc93": "transferAdminShip(address)", "1ebcdba4": "getWactive(uint8)", "1ebcf2fb": "reclaimParsecCredit()", +"1ebd567b": "OASIS()", "1ebd8263": "setMinimumBuyAmount(uint256)", "1ebd8e6d": "XEVENUE()", +"1ebd9eba": "mortgageFactor()", "1ebdaf8b": "testNewAccountHasZeroBalance()", "1ebdd39a": "getWithdrawalData(uint256)", +"1ebddff3": "bondToGitOracle(address,bytes32,uint256)", "1ebde78b": "getSecondsTimeLockedByString(string)", +"1ebdf7fd": "htMiguelMotaH()", +"1ebdfd6d": "phasesBonuses(uint256)", "1ebe1827": "EthLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", "1ebe5051": "StarzToken()", "1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", @@ -17613,60 +32139,110 @@ "1ebebb9b": "_checkAndSub(bytes32,bytes32)", "1ebedded": "setAllRates(uint256,uint256,uint256)", "1ebeec82": "_withdrawNAC(address,uint256)", +"1ebeef89": "nyanManager()", "1ebf0d11": "sellAllAmount(address,address,uint256,address,uint256)", "1ebf1f5b": "hasSellerGuarantee()", "1ebf42e5": "TokenAFL(uint256,string,uint8,string)", +"1ebf4eb5": "updateFunding()", "1ebfa2df": "getDiscountsAmount()", "1ebfa358": "dateToTimestamp(uint16,uint8,uint8)", +"1ebfc052": "approve_372(address,uint256)", +"1ebfd17c": "addLockingFund(string,address,uint256,uint256,uint256,uint256)", "1ebfdca0": "servicesLength()", +"1ec0066a": "getFoobar()", +"1ec04173": "claimMarketing(address,uint256)", +"1ec0cdc1": "future_owner()", +"1ec0d1df": "getratetwo()", +"1ec18ec0": "getMaxBorrow(address,address)", "1ec29a5f": "getPurchasedAmount()", +"1ec2eddb": "changeContractFeeAddress(address)", +"1ec31821": "freezeEth(address,uint256)", +"1ec32a66": "ethPercentFeeGenesisExchangeSet(uint256)", "1ec32d15": "companyWallet()", +"1ec3ae29": "tokenAddressPair()", "1ec41163": "lastWinnerAddress()", +"1ec4280a": "getBurnedAmountTotal()", "1ec42d50": "_createWarrior(uint256,address,uint256,uint256,uint256,uint256)", +"1ec57634": "depositBalance(uint256)", +"1ec61241": "withdraw(uint256,bytes12)", +"1ec61f6e": "addAvatar(bytes32)", +"1ec64e0c": "enableBurns(bool)", +"1ec656a7": "annualizedtimeDiffJuly()", "1ec68b92": "saveMetaData(address,bytes,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", "1ec6b60a": "startVoting()", "1ec6dba6": "SimpleSaleToken()", +"1ec6ed9d": "newFactoryContract(string,address)", "1ec75025": "developerWithdraw()", "1ec762a4": "setlvlWebsite(string)", "1ec7cda4": "addTokenInternal(address,address,uint256)", "1ec7e345": "tokenValue()", +"1ec82cb8": "recover(address,address,uint256)", "1ec87b86": "getTravelPrice(uint256)", "1ec8a460": "AdifyToken()", "1ec8bb8c": "distributeReward(address,uint256)", "1ec8d4ef": "setMinBetForJackpot(uint256)", "1ec8d5f7": "initialReleaseDone()", "1ec8f9ba": "purchaseTickets(uint256[])", +"1ec932ff": "createdDate(address)", +"1ec948ca": "LogStakeLimitsModified(uint256,uint256)", +"1ec9becf": "calcReturnETHFromShares(uint256)", "1ec9c2c0": "Sub(uint256,uint256)", +"1ec9f34b": "intervalBlocks()", "1ec9f7b5": "longTimeLock()", "1ec9fc84": "pendingFeesWithdrawals(address)", +"1eca4b93": "getBridgeableNft(uint256,uint256)", "1eca98ce": "transferToAdvisors(address,uint256)", +"1ecb10da": "buyEthWithDai()", "1ecb3889": "EurocoinB()", "1ecb450e": "Devpr()", "1ecc05f2": "validDelegate(address,string,address)", "1ecc17c4": "pauseTransfer(bool)", +"1ecc2341": "balanceOfAddress(uint256,address)", "1ecc56f2": "initTimeOf(uint256)", +"1ecc5717": "SetParticipantURI(address,string)", "1ecc644f": "vestStage()", "1ecca316": "nextFreeTier()", +"1eccc185": "setPublicSwap(address,bool)", "1ecd0d03": "PoSPerCent()", "1ecd3f30": "tokenReserved4()", +"1ecd9cd8": "addExecutors(address[])", "1ecd9f21": "calculateDrugBuy(uint256,uint256)", "1ecdfd2f": "setIEIAddress(address)", +"1ece313a": "JNTBeneficiaryChangedEvent(address)", +"1ece366a": "addLiquidity(address,uint256,uint256,uint256)", +"1ece8a3a": "setWithdrawalFeeMasterBeneficiary(address)", +"1ecf8862": "hatcheryGoose(address)", "1ecfd4c3": "takeToken()", "1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", +"1ed00a7e": "lgeApprover()", "1ed01f61": "maxWagerWei()", +"1ed042d6": "LiquidityGaugeV2()", "1ed0c2cc": "LifeSet_004()", "1ed0e01c": "ltdParams()", +"1ed1010a": "setCeilingCurve(address)", "1ed113ae": "getSignature(bytes)", +"1ed12f1f": "getDynamicGain()", +"1ed14d1c": "ProposalAcceptedAtIndex(uint256)", +"1ed1b242": "bidVault(address[])", "1ed1d0f7": "KryptoGiftsMessages()", "1ed1f196": "pf(address)", +"1ed2001a": "finishChangeMaximumPoolSize()", "1ed20347": "cfo()", "1ed24195": "getPeriod()", "1ed2730a": "createInvoice(uint256,address,address)", "1ed27a14": "setPoliceNodesPerReport(uint256)", +"1ed286b8": "explode(uint256,uint256)", +"1ed2df55": "farmHotpotBasePerBlock()", "1ed358e6": "recycleAppearance(uint128[5],uint256,uint128)", "1ed378a1": "getHybridizationPrice(uint256)", +"1ed38c83": "dequeueIngot(uint256)", +"1ed3fe7c": "revokeIdentityKey(bytes16,address,bytes)", +"1ed41ac8": "changeRequiredNumberOfVouches(uint256)", +"1ed44e46": "godSetRoadRealtyContract(address)", "1ed454a5": "memberLevel(address)", +"1ed4c19c": "EventHatchEgg(address,uint64,uint64)", "1ed5336b": "changeExerciseprice(uint256[],uint256[],uint256[])", +"1ed5781f": "salescontract()", "1ed5da2f": "Controller_Address1()", "1ed64f7b": "is_king_for_sale()", "1ed692c0": "finalizeCrowdfunding()", @@ -17674,12 +32250,23 @@ "1ed6f423": "changeDescription(address,string)", "1ed77dc8": "presaleWallet()", "1ed7830e": "partnerWallet()", +"1ed79dfd": "updatePrice(int256,int256)", +"1ed7b2ea": "_elPrice()", "1ed83fd4": "setHash(string)", +"1ed86f19": "addModule(address)", +"1ed88d34": "TimeLocked(address,uint256)", +"1ed89057": "estimateUSDT(address,uint256)", "1ed8f023": "BlockableContract()", "1ed96e32": "disableTransmit()", +"1eda3eb8": "minFund()", "1eda49be": "AheVotingBrainfood2()", "1eda61d4": "customBonuses(address)", +"1eda80bd": "bidWithToken(uint32,uint256,uint256,address,uint8,bytes32,bytes32,address)", +"1edb0d77": "MVTPerBlock()", "1edb0e73": "GILToken()", +"1edb44f4": "apeGain()", +"1edb6d46": "approve_390(address,uint256)", +"1edbcf6c": "totalRedeemable()", "1edc44ed": "GameCoinToken()", "1edc5ce0": "SUPPLY_FOR_MARKETING()", "1edc8f03": "withdrawalEth(uint256)", @@ -17690,155 +32277,311 @@ "1edf0c3d": "TESTTOKEN()", "1edf49ff": "myFirstToken()", "1edfdb48": "addjoinlist_odd(address,uint256)", +"1edfe3da": "vaultBuffer()", +"1ee00111": "_lastClaimed(address)", "1ee04a3d": "TLTContract()", "1ee13d0a": "creditDao()", "1ee1665d": "WAMToken()", "1ee17afd": "Thief()", "1ee185ad": "roleRemove(address,string)", +"1ee1acb6": "newTender(address)", +"1ee21135": "getLotteryCodes(address)", "1ee284b1": "rockOwners(address,uint256)", "1ee2e3cf": "unsetBlacklist(address)", +"1ee2ec93": "getShareRateWithDecimal(uint256)", "1ee2fe6a": "defreeze(address,uint256)", +"1ee32b05": "deleteBroker(address)", "1ee392c6": "getMaxProfitAsPercentOfHouse()", "1ee426e1": "Eth2preNSP(uint256)", "1ee44a5e": "listRequire(string,uint256,uint256,uint256)", "1ee45da0": "sellEndTime()", +"1ee47d13": "upisiStudentaNaPredmet(string,address)", +"1ee4d0bc": "stakingByMiningAddress(address)", +"1ee520d0": "Sun(address,uint256)", "1ee53e56": "presaleRate(address)", "1ee55080": "getMotherCount(uint32)", +"1ee59955": "onlyUpContract()", +"1ee59f20": "newun()", +"1ee5f746": "liquidityLockDivisors()", "1ee5f936": "stopTeamTokenTransfer()", +"1ee60337": "vaultHelper()", +"1ee66770": "doesHashExist(bytes32)", +"1ee77c11": "updateVoteForServicePoolsCount(uint256)", "1ee7c4bc": "LogNewAllocation(address,uint8,uint256,uint256)", "1ee7ccc7": "preIcoInvestorsAddresses(uint256)", +"1ee7fd80": "swap753(address[],uint256[],uint256,address[])", +"1ee8137b": "WorkAccepted(uint256,address[])", +"1ee87a74": "axiesAdopted(address,uint8)", +"1ee9080f": "Halted()", +"1ee91181": "Selling(bytes32,uint256,uint256,address,bytes32,address)", "1ee952ad": "getPhysician(address)", "1ee97dda": "_intervalFor(uint256)", +"1ee9be14": "Pregnant(address,uint256,uint256,uint256,uint256,uint256,uint256)", "1ee9f029": "PREICO_HARDCAP()", "1eea92c1": "levelExpAdjustment()", "1eeaa389": "lockSupply(bool)", "1eeac5d5": "TradelizeToken(uint256)", "1eebb48c": "___test(address,address)", +"1eebe49c": "doTakeCollateral(address,uint256)", +"1eebfdb8": "offers(bytes)", +"1eec2263": "approve_2(address,uint256)", "1eeccead": "tokensAlreadyMinted()", +"1eecd934": "ticketCost()", "1eed0347": "applicationNameHashTaken(bytes32,bool)", "1eed0f27": "setPriceUSD(uint256)", "1eed1192": "newUser(string)", "1eed4e09": "getVoteBy(address)", +"1eee0154": "addQuarterPoint(address,uint256,uint256)", +"1eee6a8d": "addTokenLockDate(address,uint256,uint256)", +"1eee7e60": "isTransferWhitelisted(address)", "1eee993a": "addChild(address)", +"1eeece06": "burnERC20(address,uint256)", +"1eef225c": "unDelegate()", +"1eef7659": "whiteListBuyers(address[])", "1eef94bd": "setAwardedUnfreezePeriodSeconds(uint256)", +"1eef9c5f": "getUserBonusAvailable(address)", "1eefddb1": "grace()", +"1eeffc1b": "ozToMgPrecision()", +"1ef01e66": "_getBancorNetwork(address)", "1ef0625b": "player_2(uint256)", "1ef085db": "price3rdWeek(uint256)", "1ef09ccf": "executeDelegateCall(address,uint256,bytes)", +"1ef0d0df": "withdrawIfHacked()", "1ef17972": "ChangeOwner(bytes32,address)", +"1ef1a03f": "phaseNow()", +"1ef1a427": "totalBetsByAddress(address)", +"1ef28bc1": "startLGE()", "1ef2c6d1": "closeTurnByHand(uint256)", +"1ef30ff5": "broadcastSignedRequestAsPayerAction(bytes,bytes,bytes,uint256[],uint256,bytes)", "1ef31b0d": "erotixFund()", +"1ef36835": "getWithdrawalRecipient(address,address,address,uint96,uint32)", "1ef3755d": "restart()", +"1ef398ec": "calcCommitment(uint256[],uint256[])", +"1ef3a04c": "liquidationManager()", +"1ef3d5b9": "burn(address[2],uint256[2])", +"1ef40cfe": "onlyInterimAdmin()", "1ef410e2": "addAudit(uint256,bool)", +"1ef54b5f": "getUserATokenAmount(address)", +"1ef57f9c": "testAssert(address,uint256)", "1ef5b90f": "release_(address,uint256[],uint256[])", +"1ef5c204": "feePerCode()", +"1ef5fdb6": "xWinToken()", "1ef60485": "returnAccounts()", +"1ef70e5a": "updateOfferPrimarySalePrice(uint256,uint256)", "1ef741fd": "interestPeriod_()", "1ef75084": "getCompoundPlan(uint256)", "1ef75b1a": "GGToken(address,string,string,uint256,uint256)", +"1ef771fb": "xra_amount(address)", "1ef7b68a": "purchaseReceiptById(bytes32)", +"1ef81406": "seenNonces(address,uint256)", "1ef8766f": "reserveTokens(uint256,uint256,bytes)", "1ef987c1": "getInvestedAmount(address)", +"1ef9c56f": "getWinnerAddresses()", +"1ef9de2f": "isEntryAdded(address)", +"1ef9f52f": "getClaimBurnFee(uint256)", +"1efa5a98": "refundServiceFee(uint256)", +"1efa9362": "numMakersByPoolId(bytes32)", +"1efaa442": "removeVotingPowerForClaimedTokens(address,uint256)", +"1efaaed3": "claimCovTokenWeight()", +"1efabfc9": "convertXDRFeesToxUSD(address)", +"1efad0c3": "updateBunny(uint8,uint256,uint256,bool)", "1efad671": "isPreSaleReady()", +"1efb043a": "checkRoutes(uint256,uint256)", "1efb06e0": "LogNewWallet(uint256,address)", "1efb17ee": "changeHouseAddress(address)", "1efba6c2": "fixedPrice()", +"1efbe895": "MARKET_WHITELIST_BASE_AMT()", +"1efc191a": "LPStrategyCanMint()", +"1efd0299": "loadLimitAvailable()", +"1efd2c9a": "renewalTime()", +"1efd4106": "updateClusterRegistry(address)", "1efdebb2": "hodlersCount()", +"1efdfe6e": "withdrawAdminFee(uint256)", "1efe3abf": "getNumTasks()", +"1efe4d58": "Rescue()", +"1efed5f7": "createRound(uint256,uint256,uint256)", +"1efedbe5": "sendHero(uint256,uint256)", "1eff2b2f": "advisorIssueVesting(address,uint256)", +"1eff9adb": "setNotLP(address)", "1effc0d8": "createPerRound()", +"1f003847": "preContrib()", +"1f005e8c": "minForPassive()", +"1f007616": "SolidStartGET()", "1f00c55b": "TOKENS_CAP()", +"1f00ca74": "getAmountsIn(uint256,address[])", +"1f00d0de": "distributeAirdropMultipleInvestors(address[],uint256)", +"1f00f3a0": "privatePreSaleTokenBalances(address)", +"1f0181bc": "recentAverageRate(address)", "1f0276fc": "_getKey(bytes32,uint256)", +"1f035c7a": "recall(address,uint256)", "1f03bc1b": "setNewUserBonusCardTradable(bool)", +"1f03e570": "idxLicenseOwners(address)", +"1f03ef77": "issue_counter()", +"1f04461c": "lastDivPoints(address)", +"1f0491c8": "axis()", "1f049a49": "tokensBank()", "1f04b54c": "test_ConsensysReached()", "1f04becc": "ppFinishTime()", +"1f050390": "SetDoctor(address)", +"1f0575f9": "gulp(address,address[])", +"1f059ab8": "multiWhitelistRemove(address[])", +"1f05aef8": "_viewBalance(address)", +"1f05fea5": "failSafeether(address,uint256)", "1f05ff29": "fromWeiToFp(uint256)", "1f065f56": "KangGuo()", "1f06c859": "promises(uint256)", +"1f074f9b": "teardownAllowanceTarget()", "1f078962": "setFlowerContract(address)", "1f078f56": "winTokens(uint256,address)", "1f0815ce": "togglePromo(bool)", +"1f0890c2": "switchApproveLock()", +"1f090de7": "twentyfourKPayment(address)", "1f09b0a2": "getDisplayGenVault(uint256)", "1f0a21ad": "setAdvisers(address[],uint256[])", +"1f0aa6e7": "_reputationBurn(address,uint256)", "1f0b2561": "getCurrentBonusPercentage()", +"1f0b2f32": "historicalDelegations(uint256)", "1f0b5553": "setBalances()", +"1f0b9705": "fulfillSwap(uint64,address[])", "1f0ba6c9": "trade()", "1f0c03f4": "forwardEndTime(uint256)", "1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", "1f0c5f26": "CashMove(uint256,bytes32,address,address)", +"1f0d1f4b": "updateMintPeriod(uint256,uint256)", +"1f0d8c16": "setGelatoCore(address)", "1f0da298": "transferTokensAndEtherValue(address,address,uint256,uint256)", "1f0de21c": "addrunmoney(address,uint256,uint256)", +"1f0e6d9c": "_burnStatus()", +"1f0f06aa": "announcement(string)", "1f0f2ce4": "withdrawOrderRefund(uint256)", "1f0f711f": "discontinue()", "1f0fd191": "test_threeValidEqUint()", "1f0fd905": "getAssetIdCargo(uint32)", "1f101520": "preIcoMin()", +"1f1025ee": "getAffiliateWallet(uint32)", "1f107635": "ownerSetAdmin(address[])", +"1f1094e7": "peoples(uint256)", +"1f112490": "setWbtcPrice(uint256)", "1f1144dc": "ViewOffer(address,uint8)", +"1f118f1c": "handleCharIsValid(uint8)", +"1f119602": "RoundEnding()", +"1f11b24f": "getPlayer(string)", +"1f11d1f1": "FallbackEtherReceived(address,uint256)", "1f11d503": "GameSicBo(string,uint256,uint256,uint256)", +"1f1240fb": "reveal_key_and_pay(string)", "1f124116": "approveSettingUpdate(uint256,bool)", +"1f12532e": "main3(uint256,uint256,uint256,uint256,address[],bool,uint256)", +"1f127652": "setLockTimeDuration(uint256)", "1f12da06": "getPropertyPrivateModeLastUpdateEarnUntil(uint16)", "1f130761": "tokensSent()", "1f130d1f": "insertAddress(address)", +"1f131fb4": "whitelistClaim()", +"1f13a1fb": "feeDisabled()", "1f13b5ae": "NokuMasterToken(uint256,uint256)", "1f13de92": "inEther(uint256)", "1f13f165": "NecromeunToken()", "1f14df69": "balances(address,bytes32)", +"1f14ec9d": "GAS_ETH2ARTT(uint256,uint256)", "1f150322": "LogUserUnregistered(address,address)", +"1f153836": "lastPaidTaxes(address)", +"1f159d2a": "garmentNft()", "1f15bc1b": "disallowTransfersTo(address)", "1f15e163": "LaunchRocket(uint32,uint32,uint32,uint32,uint32,uint32)", "1f161533": "distributeXYZ(address[],uint256)", +"1f163c2c": "loadX(uint8[],uint256,uint256)", +"1f1648ad": "usdctoddt(uint256,uint256,address)", "1f167829": "nextDraw()", "1f16c8b9": "getEndDateOfCampaign(bytes32)", "1f16fda4": "multiTransfer(address[],address,uint256[])", +"1f1726cc": "getApprovedOracles()", +"1f173e10": "indexToApproved(uint256)", +"1f175e08": "_withdrawFees(uint256)", +"1f1765c2": "buyPremiumDrangon()", +"1f17732d": "authoriseModule(address,bool)", +"1f181d57": "sellToken(uint256,uint256,uint256)", "1f1836fa": "isPresalePurchase()", "1f1886e4": "extendSale(uint256)", "1f18e56e": "removeOwnersWithHowMany(address[],uint256)", +"1f191e19": "sellScarcityDelegate(address,address,uint256,uint256)", "1f194b9f": "getFreeKilo()", +"1f194fe7": "pageVoken(uint256)", "1f1953ad": "addPokemonToMaster(address,uint256)", +"1f1abbd0": "phase4TokenPerBlock()", "1f1aea6e": "initSale3(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "1f1b11cc": "buyMinerFromSale(uint256)", +"1f1b9c05": "reportNumerator(uint64,uint256,uint256)", "1f1bd005": "getRocCoreAddress()", "1f1bd692": "text()", +"1f1c26e0": "claimMyReward()", "1f1c827f": "StartGame(string,string)", "1f1c84b7": "decreasePresetTransfer(address,uint256)", "1f1cb62b": "peg()", +"1f1d2d66": "depositFeeAddr()", +"1f1d9e46": "publicSetupExpiryTime()", "1f1dc61b": "checkPayLoan()", "1f1de456": "regName()", "1f1e1295": "isApprove(uint256)", "1f1e2cfa": "calcUnMaskedEarnings(address,uint256)", "1f1e6c4e": "createCollectible(uint256,uint256,address)", +"1f1e9f26": "sendTokensToCustom(address,uint256)", "1f1ea554": "HolahopToken()", "1f1ec029": "updateKeyPrice(uint256)", "1f1eef6b": "getContributionHashByIndex(uint256)", +"1f1f59b7": "withdrawWinners()", +"1f1f5a42": "addPromote(uint256,address)", "1f1f5e76": "addValueToContribution(uint256)", "1f1f8240": "_parseIntScientific(string)", +"1f1f897f": "fulfillRandomness(bytes32,uint256)", +"1f1fcd51": "want()", "1f201d7e": "level_judgment(address,address)", "1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", +"1f203e23": "allowWithdrawInEther()", +"1f209d9a": "stageBonus(uint256)", "1f20f762": "losingAmount(address,uint256)", +"1f21173f": "tokenSaleCNDAO(address)", "1f212106": "startICOStage7()", "1f218cf1": "ICO_PERIOD()", +"1f21b531": "getStakesAllowed()", "1f21f9af": "marketMaker()", "1f220be0": "unlock(string,bytes32,address,address,uint256)", "1f221d4c": "updatePublicityBalance(address,uint256)", +"1f227b43": "preTransferCheck(address,address,uint256)", "1f227fc8": "importTokensFromSourceToken(address)", +"1f22b4d9": "createPayModel(address,uint256,string,string,uint256,uint256)", "1f23a9bc": "getAcceptedAndRejectedVotes(uint256,uint256)", "1f23c22b": "getOpenBids(bytes32)", +"1f23e06d": "contract_address(uint256)", +"1f23f2d5": "_getTotalLPReserves()", +"1f254353": "getFurnaceStrength(uint256)", +"1f2570c5": "farmTemplateId()", "1f25cfaf": "changeBot(address)", "1f261939": "payBid(bytes32,uint256)", +"1f266149": "spendAny(address,uint256,bytes[],bytes)", +"1f267fbb": "verifyTransaction(uint256,uint256,uint256)", "1f2698ab": "started()", +"1f27038a": "updateUniswapSellerBurnPercent(uint8)", +"1f2750d4": "SetStartForWork(uint256,uint256)", "1f275713": "prefixed(bytes32)", +"1f276b6e": "emergencyWithdraw(uint256,uint256)", +"1f278b64": "green(address)", "1f278d32": "MyartPoint()", +"1f279ae0": "changeRoundParameters(uint256,uint256,uint256)", "1f27a8b5": "set_transferrable(bool)", "1f28c821": "tokensPreMinted()", "1f296600": "brickETHPrice()", "1f299c1a": "updateRegistry(bytes32,address)", "1f29bdcf": "setAStore(string,address,address)", +"1f2a1d2f": "getNumLocksForToken(address)", "1f2a3e06": "scissors()", +"1f2aa2ed": "refundManyUnspentETH(address[])", +"1f2bb044": "AdminPrivilegesChanged(uint256,address,bool)", "1f2c6414": "getAddressBatchByUsername(bytes20[])", +"1f2d0065": "rootToken()", +"1f2d26b6": "CalcTotal(address)", "1f2d62bc": "gameStartedAtBlock()", "1f2d8d66": "getNumberVote(uint256)", "1f2dc5ef": "divisor()", +"1f2e4aa7": "forceApproval(uint256,address)", "1f2e5461": "LOUDEX()", "1f2e886c": "testControllerTransferTriggersEvent()", "1f2e97c8": "slaveWalletPercentInitialized()", @@ -17846,17 +32589,29 @@ "1f2ec9c9": "setHoldAmount(address,uint256,uint256)", "1f2efa83": "allocateIntoHolding(address,uint256,uint256)", "1f2f7fc3": "dispute(uint256,uint256)", +"1f30474c": "gg4(bytes4)", "1f305ec7": "removeFromKycTeam(address)", "1f30edc7": "CTOSignature()", +"1f311fc6": "multisendErc20DEFIA(address[])", "1f312375": "referralBonusRate()", +"1f312404": "prices(address,address)", +"1f320331": "balances(uint256,address)", "1f32768e": "getSubscription(bytes32)", "1f32c18f": "getDrink(uint256)", +"1f32c1b0": "AuthorizedAddressRemoved(address,address)", +"1f333758": "RegisterEvent(uint32,address,uint256,uint256)", +"1f338eb5": "updateMaxLoanAmount(address,uint256)", +"1f33ef61": "dividendsReceived(uint256,uint256,uint256)", "1f34556a": "changeMaxReward(uint256)", "1f34563c": "newUser(string,string)", +"1f34919d": "LogNFTBurned(uint256,address)", "1f34d1d3": "registerAppVersion(bytes32,bytes32,address,bytes4[],address[])", +"1f353cec": "withdrawalLimitPercent()", "1f35bc40": "setCrowdsaleAddress(address)", +"1f3610bd": "BattleHistory(uint256,uint8,uint64,uint256,uint256,uint256)", "1f3634ed": "ink(bytes32)", "1f368fa6": "ExtrabitToken()", +"1f36d925": "setTransferFeePercent(uint256)", "1f378b8a": "refundEther(address)", "1f38034c": "removeEmailAddress(string)", "1f38c358": "allocateIds(uint32)", @@ -17864,64 +32619,112 @@ "1f3943df": "SURT(uint256)", "1f39716c": "aggregateBet(uint256,uint256)", "1f39a141": "getTokenAmount(uint256,address)", +"1f39a9ed": "validateEthToKncRateToBurn(uint256)", +"1f39cae0": "chainDetails()", +"1f3a0e41": "killed()", +"1f3a11f9": "getUserFdDetails(uint256,uint256)", "1f3a3a53": "mint(int256,uint256)", "1f3a4c14": "addFreezableAddress(address)", "1f3a7c0b": "FOUR_YEAR_KEEPING()", "1f3a98d1": "getReferralRates()", +"1f3b15e3": "orderSizeDividerFactor()", +"1f3b231b": "d(uint256,uint256)", "1f3b3148": "endEpochTimestamp()", +"1f3b42dd": "_stakeholders(uint256)", +"1f3b4c90": "isAllowedMinter(address)", +"1f3bcb07": "tokenToReserveSwapInput(address,uint256,uint256,uint256)", "1f3bec3b": "secondarySaleReserveWallet()", +"1f3c0697": "Accepted(bytes32)", +"1f3c156e": "claimAssets()", "1f3c99c3": "logout()", "1f3ce938": "increasePresaleEndTime(uint256)", "1f3ceb51": "getGameById(bytes32)", "1f3d3261": "JustForward(uint256)", +"1f3dc14f": "NMP_MIN_DEPOSIT()", "1f3dcc8d": "maxGasPricePenalty()", "1f3e1c8d": "LogTokensPurchased(address,uint256,uint256,uint256)", "1f3e50f6": "withdrawBCEO()", "1f3e64e6": "getTXwithCode(address)", "1f3ee21f": "setUsdEthValue(uint256)", +"1f3f10b0": "setMigratingManager(address)", +"1f3fa07e": "AuctionCreatedEvent(uint256,uint128,uint128,uint128)", "1f3fd5ca": "PI_EDIT_1()", "1f3fe8d1": "ICO_BONUS1_SLGN_LESS()", "1f3fed8f": "tokensForMarketing()", "1f400477": "inLendingMode()", "1f402356": "markContractAsInited()", +"1f403ba3": "getSupplyHolder(bytes32)", +"1f41655f": "create(uint256,uint256,address,bool)", "1f417317": "WalletSimple(address[])", +"1f418dfa": "drawLog(uint256,uint256,uint256)", "1f42103c": "AworkerToken(uint256)", +"1f4266c5": "clone2WithInitData()", +"1f426b1d": "siViewProxy(bytes)", "1f4356e4": "emissionFunds()", "1f43f396": "startICOStage5()", "1f4425f3": "checkCloseTimer()", +"1f44a135": "PledgeConfirmed(address,uint256,string,string)", "1f44a40f": "airDropSame(address,address[],uint256)", "1f44b1de": "ValithToken()", +"1f44dee5": "LoyaltySupplyAllocated(address,uint256)", +"1f44f6e6": "marks(uint256)", "1f45006c": "checkEthRaised()", +"1f450f7f": "andando()", "1f455922": "removeToken(string)", "1f45ad5c": "modifyContentAccess(bytes32,bool,uint256)", +"1f45ae57": "generateZKP(uint256[5],uint256[2][2],uint256[2][])", +"1f45bf93": "_draw(bytes32,uint256)", +"1f461608": "EXECUTABLE_PERIOD()", "1f461f0d": "withdrawableAmountFor(address)", "1f468245": "calculateObtainedBUB(uint256)", "1f46eb98": "agentPermission(address)", "1f470b14": "lockUpAmountOf(address)", "1f471ad0": "proxyMint(address,uint256)", +"1f472254": "get_ctoken_balance()", +"1f479d84": "allowBcFlow()", "1f47b50d": "MineablePOWCoin()", "1f47ba29": "safeToMul(int256,int256)", +"1f47db26": "updatePool(uint256,uint256,uint256,uint256,uint256)", "1f4848ef": "setTakeFee(uint256)", "1f48af0a": "updateWeapon(uint256,string,string,string)", +"1f48d35f": "transferFeeless(address,uint256)", "1f48ff7c": "mintMarketMakerApproval()", +"1f491389": "guesses(uint256)", +"1f4924f0": "storeIPFSOrderHash(uint256,string)", +"1f493b5c": "setStargateCustomGasPrice(uint256)", +"1f4981fe": "getRebalanceTowardsHedgeUtils()", "1f49aff4": "ACLYDcid()", "1f49caac": "canUseLock()", +"1f49e02e": "_maxAmaunt()", +"1f4a1a23": "sendTokenToDex(uint256)", "1f4a5c32": "confirmTransactionAfterExpiry(uint256)", "1f4a6d32": "removeEth()", "1f4ab41e": "createUser(bytes32,bytes32,uint256)", +"1f4ad75a": "depositIn(uint256)", "1f4ae468": "returnETHforNormalBuyers()", "1f4b8e41": "getLastUpdateId()", +"1f4be86d": "lastMinutePaybackDuration()", +"1f4c06f7": "register(bytes32,uint256,address,address)", +"1f4c3c99": "_luckyRewards()", +"1f4c48f5": "btcToBPro(uint256)", "1f4ca28f": "isAdvisorsTokensSecondReleased()", "1f4d7ec4": "newParameterizerWithToken(uint256,string,uint8,string,uint256[])", +"1f4d84eb": "soldFast(address)", "1f4dba8e": "OPTinToken()", "1f4dde9f": "Jade()", +"1f4df03e": "RegionOnSale(uint16)", "1f4e01d9": "absoluteEndBlock()", +"1f4e054a": "setMinimumMintGap(uint32)", "1f4e1504": "upgradeContract()", "1f4e996b": "challenge(bool)", +"1f4f1c21": "newBill(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,string,string[])", +"1f4f6566": "token_mint(address)", +"1f4f6e85": "ForwardSplit(bytes6,bytes6,uint8,uint256)", "1f4f77b2": "timestampFromDate(uint256,uint256,uint256)", "1f4f9ab1": "supervisorVote(uint256,bool)", "1f4fc29c": "refShare()", "1f502a13": "volumeDiscounts(uint256,string)", +"1f50cd00": "TransactionSubmitted(address,uint256)", "1f513660": "ctoAddress()", "1f522595": "donationsCount()", "1f52692b": "vaultOwner()", @@ -17930,40 +32733,76 @@ "1f534715": "ComplexChildToken(address,string,string,uint256,uint8,bool,int256,bool)", "1f535833": "referralCodeAt(address,uint256)", "1f53ac02": "setDevWallet(address)", +"1f53bd67": "floodingTimestamp()", +"1f54245b": "deploy(address,bytes,bool)", +"1f542679": "ProofVerified(string,address,uint256)", +"1f542a60": "Ev(string,address,uint256)", +"1f5483f3": "subBonusToken(address,uint256)", "1f54d80d": "verifyCustomer(address,bytes32,bytes32,uint8,bool,uint256)", +"1f55983b": "getArtworkTechnique()", "1f5623f3": "ZebiToken()", "1f572504": "JackToken()", "1f57256f": "transferEth(uint256)", +"1f573acd": "disallowAuthority(address)", "1f583087": "ClickGemTokenERC20(uint256,string,string)", +"1f5903cb": "effectblockchange()", "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)", +"1f5a5622": "DeltaTime()", +"1f5a56a8": "externalStake(uint256,uint256,address)", "1f5bb9f8": "Refund_TrustlessTransaction(uint256)", +"1f5bbda2": "epochWindowOffsetSec()", "1f5bdf5d": "isRegisteredUser(address)", +"1f5c2a12": "restrictedUsers(address)", "1f5c3a3c": "approveMultiple(address,uint256[])", "1f5c6f67": "getOpeningTimeByStage(uint256)", "1f5d0b4c": "address(address,address,uint256)", +"1f5d8841": "burnSupply(address,uint256,uint256)", "1f5dddab": "WithdrawContribution(uint256)", "1f5dfcd5": "lastBlock_a7()", "1f5e881f": "_buyTokens(address)", "1f5e8f4c": "isRestricted()", "1f5e9a2a": "CyberMilesToken()", +"1f5ea091": "participationAmount(uint256)", +"1f5ed8e2": "choco()", "1f5eeb13": "tokenSendFailuresCount()", +"1f602092": "authereumVersion()", "1f6034fd": "getInt8FromByte(bytes14,uint256,bytes1)", +"1f60d8c8": "distributeVaultRewards()", "1f60d9f7": "crowdfunding_allocation()", +"1f611daf": "govChangeOwner(address)", "1f617a60": "setReceivable(address,bool)", +"1f61f041": "Hijacked(uint256,uint256,uint16,uint16)", "1f6275bb": "issueTokenAndTransfer(uint256,uint256,address)", +"1f6278cf": "mint(address,uint256,uint256,string,string,string,string,string,uint256,uint256,uint256,uint256)", "1f63a350": "settle(bytes32,bytes32,uint8,bytes32,bytes32)", +"1f641335": "investorsToDeposit(address,uint64)", +"1f644c85": "setHatchingDuration(uint256)", "1f64c1f2": "getInvestorInforValue(uint16)", +"1f64eb4e": "setFailBorrowRate(bool)", +"1f64f1e3": "updateTokenPrice(uint8)", +"1f652178": "bsgs_dai_path(uint256)", +"1f65be29": "challengesUsed(uint256)", +"1f663d8c": "VerifyExtraData(address,uint256,uint256)", "1f66531d": "getEsgoTX(uint256)", +"1f667b89": "AdminUnlockWithdrawl()", +"1f66df37": "convertFrom(address,address,uint256,uint256)", +"1f66e8ed": "getNodeConsensusThreshold()", "1f67298d": "Daq()", +"1f674b5a": "addBattleLog(uint32,address,uint8,uint8,uint8,uint8,uint32,uint32,uint32)", "1f677d8d": "ownershipLength()", +"1f680039": "maxBase()", "1f68f20a": "baseRate()", +"1f692e79": "contractorCommercial()", +"1f6930f4": "getRegisteredCodeHash(address)", "1f69565f": "getTokenInfo(address)", +"1f696a4a": "isLockUpSale(uint256)", "1f69aa51": "left77(uint256)", +"1f69c743": "advanceAndRedeemMany(address[],uint256[],uint256)", "1f69d230": "setMultiLedgerValue(string,address,address,uint256)", "1f69f929": "teamVestingCounter()", "1f6a1bf7": "lastDifficultyAdjustmentEthereumBlock()", @@ -17972,60 +32811,114 @@ "1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", "1f6b28bf": "valueOf(string)", "1f6b5b7d": "setRefundState()", +"1f6b9b78": "projectClaims(uint256,address)", "1f6b9b97": "placeBet(uint8,int8,uint8,uint256)", "1f6c0a9b": "ReleaseLockedBalance(address,uint256,uint256)", +"1f6c653a": "predictionResult()", +"1f6c6a87": "sevenify(uint256)", "1f6c76f4": "reserveDeveloperTokens(address,uint256)", +"1f6c7a41": "_setEnableDistributeBorrowWpc(bool)", +"1f6cae1b": "createDevice(uint256,uint256,string,string,string,uint256,bytes)", "1f6ce1d3": "setDaySellAmount(uint256,uint256)", "1f6d2086": "setCooldownIndex(uint256)", "1f6d3d13": "AddrDevelopGroup()", +"1f6d4942": "contributors(address)", "1f6dc06c": "SetSaleStep(uint256)", +"1f6dc2d7": "updateSafeFundWallet(address)", +"1f6dc4b1": "sendGift(uint32,address)", "1f6de588": "PiedPiperNetworkCoin()", "1f6e5117": "getCallbackAddress()", "1f6e6f3a": "DigitalThothToken()", "1f6eb6e7": "escapeHatchCaller()", +"1f6ed5f2": "createOffer(address[2],uint256[4])", "1f6ee77a": "setInitialData(address)", "1f6eeb68": "canMintBurn()", "1f6f3c0f": "getShipProductAmountByModel(uint16)", +"1f706baa": "_pendingCurveSetter()", "1f706c64": "EndTimeUpdated()", +"1f711b47": "setTitanEth(uint256,uint256)", +"1f71f206": "approve_76(address,uint256)", "1f71f250": "updateTopicAddress(bytes15,address)", +"1f720509": "addSubmission(string)", "1f720e71": "testThrowTranferTooManyTokens()", +"1f721639": "get_num_product_components(uint256)", "1f7266e8": "owner_TransferFromTo(address,address,uint256)", "1f7299c1": "processSell(address,uint256,uint256)", "1f72d7d8": "increaseCap(int256)", +"1f730e15": "claimRewardEth(address)", "1f7334e2": "TransferFlower(address,address,uint256)", +"1f73668d": "_lock(address,uint256)", +"1f739912": "transferLegendaryResult(address,uint256)", "1f74de51": "getAuditOutcome(address,bytes32)", +"1f753afe": "getPresaleTaxFee()", +"1f756c8b": "RemoveFromWhitelist(address)", +"1f75af69": "streamedLpFrom(address)", +"1f75c390": "pushers_(address)", +"1f75caac": "calculateMaxStakePeriod(uint256)", +"1f760d49": "allowedViewers(address)", +"1f760f83": "calculateStartTimeForMarket(uint32,uint32)", +"1f763fe9": "removeTokenAdapters(bytes32[])", +"1f7678ce": "minStakeTime()", +"1f76a7af": "renounce(address)", +"1f76c409": "setSZOAddr(address)", +"1f76fa34": "getTokenBySymbol(bytes32)", "1f772a34": "token_symbol()", +"1f778829": "NewRiskParameters(uint256,uint256,uint256,uint256)", "1f77aac0": "queryUserContract(address,uint256)", +"1f77ef89": "updateWhiteListStatus(address[],bool[])", "1f790a94": "BananaGame()", "1f794436": "getBlockHeader(int256)", +"1f79a1e9": "nullifierHashes(uint256)", +"1f7a12c3": "_TotalPool()", "1f7a41f1": "rawNameOf(address,address)", "1f7a72f7": "bobClaimsDeposit(bytes32,uint256,bytes32,address,address)", +"1f7a868e": "emergencyWithdrawalETH(uint256)", "1f7ab15d": "setdecimals(uint256)", "1f7af1df": "canReceiveMintWhiteList()", "1f7b4f30": "roll(uint256)", "1f7b5318": "getBlocklancerToken()", +"1f7b6324": "removeDevice(address)", "1f7b6d32": "length()", "1f7b8622": "getVotingDeadline()", +"1f7b8884": "confirmSale()", "1f7bf1eb": "_mintShares(address,uint64)", "1f7c4bf3": "AccessControl()", +"1f7c510e": "poolsRewardIdx(address)", "1f7ccc09": "initAssetFile(string,string,string,string,string,string)", +"1f7cdd5f": "savings(address)", "1f7cdd9b": "unicornsGifted()", "1f7d16f7": "managementWalletAddress()", +"1f7d90e1": "rompiSalvadanaio(uint256)", "1f7df96f": "registLogo(address,address,string)", "1f7e3e72": "test_oneValidEqStringUint()", "1f7e495b": "systemSupply()", +"1f7e5a69": "setVaultMaster(address)", "1f7f3082": "addForwarder(address,address)", +"1f7fdffa": "mintBatch(address,uint256[],uint256[],bytes)", "1f7fe78b": "balanceAtSnapshot()", "1f800e8e": "releaseVested()", "1f803ac3": "getUnlockedTokens(address)", "1f807736": "withdrawFreeAuctionBalances()", +"1f80b18a": "getAvgAPR()", +"1f80d868": "changeBurnAmount(uint256)", +"1f8117cb": "assetsTransactionCount()", "1f81582c": "returns()", +"1f81650c": "setCheckForUnlockReward(bool)", "1f816c6d": "hodlerReward()", +"1f81eb80": "addPopAddress(address)", "1f820f52": "migrateEuroTokenOwner(address,uint256)", +"1f82c5de": "GetTotalDeposits()", +"1f82effa": "takeSelfie()", +"1f837216": "_nullRanking(uint8)", "1f83bcd7": "withdrawlDeadline()", "1f83d11a": "addMilestonesAndSeal(uint256[],uint256[],uint256[],uint256[])", "1f83d75e": "updateProfileDetails(string)", "1f83f440": "getPaymentByAddress(address)", +"1f843ccb": "setToDoSwap(uint256)", +"1f846df4": "LockList(address)", +"1f859305": "buyCoin(address,uint256)", +"1f85cfd8": "checkLimitAndSentReward(address,uint256,uint256)", +"1f85d8bc": "initialize(uint256,uint256,uint256,uint256,uint256,address,address)", "1f86ab51": "confirmCollection()", "1f86ffda": "UpdateBid(address,uint256,uint256)", "1f8712af": "isValidPurchase(address)", @@ -18034,73 +32927,132 @@ "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)", +"1f887d7e": "juldToWbnbRoute(uint256)", +"1f88cb60": "allContributers()", "1f8947c1": "extractUint(int256,bytes,uint256,uint256)", "1f89e911": "getCompositionPrice(uint256)", +"1f89ef13": "started(uint256)", +"1f89f25e": "getStartTimestamp()", +"1f8a12de": "ContestApprovedFundsDelivered(address,uint128)", +"1f8a2049": "dTokenMetadata(address)", "1f8ac604": "mul0()", "1f8ae3f0": "proofFailed(bool)", +"1f8af62c": "maxFarmable()", +"1f8b8d51": "overallRatio(uint256)", "1f8c07b0": "startPhase(uint256,uint256,uint256)", +"1f8c9004": "NewLockProduct(uint32,uint32,uint32,uint32,bool)", +"1f8cb13a": "OnSetInviter(address,address)", "1f8d1d50": "setTotal(uint256)", +"1f8d519d": "initialize(uint256,uint256,uint256,address)", +"1f8d7312": "logBytes16(bytes16)", "1f8d99a9": "assetIsRegistered(address)", +"1f8db268": "releaseInterval()", +"1f8dd7db": "initiateProvableQuery()", "1f8df2cd": "setGeneScientist(address,bool)", +"1f8e0c6c": "setTenthClaimPrize(uint256)", +"1f8e2620": "getConvertersBySmartTokens(address[])", +"1f8e27a9": "isInMaintenance()", "1f8e6fb3": "transferSale(address,uint256,uint256,uint256)", "1f8e728c": "addMilestone(uint8,uint256[],uint8[])", "1f8e9143": "AcceptsKDI(address)", +"1f8ea1fa": "AttributeIssued(address,address)", "1f8ea5e8": "EternalChainToken()", "1f8eac47": "spentByTeam()", +"1f8eeb31": "Forfeited(bytes32)", "1f8f1d21": "addMember(uint256,address,bytes32)", "1f8f69e3": "fechAllVoteResultForCurrent()", "1f8f8100": "Tspace()", "1f8fcc45": "Vantador(address)", +"1f8ffe1f": "limitOfMinter(address)", "1f903037": "getBytes32()", "1f903b5d": "preSaleSpenderTxDetails(uint256)", +"1f9042ad": "gameInfoOf(uint256)", "1f90b2a5": "snapshotBlock()", "1f90ffc8": "AddSupply(uint256)", +"1f9151c9": "_onlyMediator()", +"1f91600b": "BIND_STATUS_TOTAL_SUPPLY_MISMATCH()", "1f91666d": "newOrganisation(string,string,string,uint8,bool)", +"1f91695d": "bancorAlreadyTransferedTokenAmount(address,address[],uint256)", "1f91e309": "getBuyBackPrice(uint256)", +"1f920dbd": "Executed(uint256,address,uint256,bytes)", "1f922d06": "duplicate()", "1f92f6b7": "setBtcUsdRate(uint256)", +"1f930115": "exchangeEtherForSynths()", "1f934299": "calcConfirmsNeeded(uint256,uint256)", +"1f934795": "requestVolumeData(int256,int256)", +"1f94aca7": "IMP02()", +"1f94f540": "doesArtifactExist(uint256)", "1f960571": "picops_balances(address)", "1f963f80": "getReportingWindowId(uint256)", +"1f965d71": "offChainAssetsValuator()", "1f96938d": "deliverSale(address,uint256)", "1f96add4": "ChronoMint(address,address,address)", +"1f96bc65": "SetMinter(address,bool)", +"1f96d968": "RunIco()", "1f974fe4": "NExT()", "1f979e23": "GetRigData(uint8)", "1f97a238": "rejectCertificate(uint256)", +"1f97a23d": "howMuchCanClaim(address)", "1f97c00e": "tokenCreationMax()", +"1f97d142": "setprotocolFee(uint256)", +"1f97e4a1": "LPPerCOREUnitContributed()", "1f97ea5d": "EDU_PER_ETH_PRE_SALE()", "1f97f2ef": "issuedTokensForCommand()", +"1f981516": "salted()", +"1f9838b5": "permissions(address,address)", "1f98394d": "basicReward()", +"1f98962f": "Weapon_Lisence(string,string,string,uint256)", +"1f98a92d": "alterarCertificado(bytes32,string,string,string,uint8)", +"1f98ade3": "getOwnerBalance(address,address)", +"1f990c42": "addContentCampaign(uint256,uint256)", "1f994137": "booleanStorage(bytes32)", "1f995ef1": "HDCTestToken()", +"1f9972ec": "NewLoan(uint32,uint256,address,uint256,uint256,uint256,uint40)", "1f9988c9": "transferTokens(bytes32,address,uint256)", "1f99c458": "listNamesLen()", "1f99d862": "test_method_increaseTimeBy30000()", "1f9a08ca": "reelIn(uint16,uint16,bytes32,bytes32)", +"1f9a32c8": "getAllCSPIds()", "1f9a391c": "setCanCreateGrants(address,bool)", +"1f9aa821": "getInfo(string,string)", "1f9ab193": "place(uint8)", +"1f9ad40a": "unsetIntent(address,address)", "1f9b1153": "initiateMigration(uint256)", +"1f9b9f8e": "currentTimeBank()", "1f9c381e": "setTokenMinAmountBuy(address,uint256)", "1f9c5580": "AMIS(address)", "1f9c564f": "rubusOrangeAddress()", "1f9c649f": "HashInvalidated(bytes32,string,uint256,uint256)", +"1f9d1c92": "getLastWithdrawal(address)", "1f9d7ab8": "addTokens(uint256,string)", +"1f9d8a60": "isDao(address)", +"1f9db35a": "uni_max_deposit()", +"1f9dbb2c": "fileArweaveReferenceURL()", +"1f9e7e04": "updateDiscountMultiplier(string,uint256,uint256)", "1f9ea25d": "_setDepositAccount(address)", "1f9eba17": "bitcoinInvest(address,uint256,uint256)", +"1f9eba20": "rewBalance()", "1f9ecab1": "TowerImagesCoin()", "1f9ef7fa": "getPayoutNumerator(uint8)", +"1f9efb20": "loan(address,uint256,uint256)", "1f9f168e": "startNewRound(address)", "1f9fed62": "checkMySellerOffer(address)", "1fa03a2b": "isApprovedFor(address,address)", +"1fa03d28": "newCyles(uint256)", "1fa08755": "upgradeDexterity(uint256)", "1fa08ad8": "EtchReward(uint256)", "1fa0914e": "buyStamps()", "1fa096e6": "isInversor(address)", "1fa0dc70": "saveReturnSatoshi(address,uint256)", +"1fa1087c": "getJurisdiction()", "1fa13a61": "longTermTokens()", +"1fa16dea": "testDataTypeStaticArrayUint256(uint256)", +"1fa2195f": "setTokenImage(address)", "1fa224bf": "setOraclizeAddr(address)", "1fa24aa7": "makePermanantlyTradable(uint8)", "1fa30523": "doMint(address,uint256)", +"1fa35ad4": "getWithdrawable()", +"1fa36cbe": "totalAllocPoints()", "1fa3c372": "redeemTokens(bytes32)", "1fa3cfaa": "bmc(uint256,uint256,address)", "1fa4070c": "TestCoinVN()", @@ -18110,113 +33062,213 @@ "1fa4c486": "PublicResolver()", "1fa4d9de": "completedAddingParsels()", "1fa4ea66": "reservationAddress()", +"1fa4eb8d": "pendingDAB(uint256,address)", +"1fa57089": "fakeconstructor()", "1fa59521": "FTBCToken()", "1fa5e43b": "freezedBalanceOf(address)", "1fa62fb7": "setCountrySlogan(uint256,string)", "1fa6f19b": "getAddressForQuery(bytes32)", +"1fa70531": "buyAmount()", +"1fa7f076": "AnnoTradeCreated(uint256,bool,uint256,uint256)", +"1fa87a1b": "globalNodeNumber()", +"1fa89fc6": "halfRay()", +"1fa94775": "See_Doc_Hash(address)", "1fa96b96": "currentProposalResults(uint256)", +"1fa970f3": "swapBUSDToTokens(address[],address,uint256)", "1fa98406": "fundType()", +"1fa9a635": "deleteSchain(address,string)", "1fa9d21f": "DASABI_IO_Contract()", +"1fa9faaa": "setInverseFeeRate(uint256)", +"1faabeb6": "getCurrentPeriodID()", "1faae8b3": "getTypeValue(uint256)", "1fab0265": "messiDev()", +"1fab107c": "createAcoPool(address,address,bool,uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", "1fab3fd4": "setFinishedTx(address)", "1fabb318": "MAX_ALLOWED_BY_STAGE_1()", "1fabe6cf": "getActualCompletionDate(bytes16,address,address,uint256,uint256)", +"1fac1c2f": "updateNotifyRewardAmount(uint256[])", +"1fac40b4": "transferCurrencyAsset(bytes4,uint256)", +"1fac5b18": "riskyinterval()", +"1fac9a69": "tokensForEther(uint256)", +"1facdcec": "setLockPeriodBPScale(uint256)", +"1fad180c": "initialTokensSupplyFinishState()", +"1fad1c50": "addMixer(address,uint256)", "1fad4d46": "getShipOwner(uint32)", "1fad4e79": "sevenWinnerWithdraw()", +"1fade863": "ChangeStakingRate(uint256)", "1fae75eb": "Xandra()", "1fae9361": "changeTimes(uint8,uint8)", "1faec182": "getBet(uint8,uint256)", +"1faee868": "packageLength()", +"1faf0d6a": "FIAT()", "1faf1ed4": "unlockTip()", +"1faf3158": "CalculateKiDisperse(uint256)", +"1faf497b": "execfunct(address,uint256,bytes,uint256,uint256,uint256,uint256)", +"1faf4a39": "getNextSqrtPriceFromInputInvariants(uint160,uint128,uint256,bool)", "1faf8995": "fillOrder(address,bytes32,uint256,bytes32)", "1fafc2c8": "updateBusinessReserveAddress(address)", "1fb00cdc": "investWithId(uint128)", +"1fb023b9": "approve_865(address,uint256)", "1fb150c4": "_batch1_icosaleEndTimestamp()", "1fb156ef": "ecmul(uint256[3],uint256)", "1fb168ac": "setStopStatus(bool)", +"1fb18154": "changeCancelBlockElapse(uint256)", +"1fb1be78": "doAirdrop(uint128)", +"1fb1e54d": "feedTokenETH()", "1fb1f18b": "getWinnings(address,uint256)", "1fb25f07": "getCertification(bytes32)", +"1fb27cad": "setStakingTaxRate(uint256)", "1fb291cb": "registerInt(address,int256)", +"1fb2b0c1": "gulp(address,address,uint256,string,bytes)", "1fb2de2c": "sendTokensToTwo(address,address,uint256)", "1fb2f2a0": "testUpdateLatestRevision()", +"1fb37f46": "newReceipt(uint256,string,string,uint256,string)", "1fb384cb": "RemoveRocketForSaleEvent(address,uint32)", +"1fb45ec0": "FAILURE_NON_WHITELIST()", "1fb47fe8": "CulturePhilosophyFaithChain()", +"1fb4bbb8": "LastTimeForDonate()", "1fb4bcf8": "SetSaltPassword(bytes32,bytes32)", "1fb4d1e7": "TheMutualCurrency()", +"1fb5843e": "stopGameFast()", "1fb59f9d": "swapProxyTokens()", +"1fb5a51f": "resultsInBlock(uint256)", "1fb6e99d": "paymentNeeded(uint64)", +"1fb6ef1a": "totalMiningBlockNum()", +"1fb7cec9": "getATMForMarket(address,address)", "1fb82d26": "storeProof(string)", +"1fb8784b": "revokeRewardDuration()", "1fb8875d": "referralSent()", "1fb8c0ed": "releaseEQUIWihtoutKYC()", "1fb8d5de": "vaultUnlocked()", +"1fb91997": "_fecoreBalances(address)", +"1fb922e0": "getApy()", +"1fb95796": "collectWagers(string,uint256,uint256)", "1fb97c34": "updateFirstAmount(bytes32,bytes32,uint256)", +"1fba5495": "treasurySize()", "1fbab493": "checkPrice(address,address,bool,uint256,uint256)", +"1fbb0462": "getLPAmount(address)", "1fbb408a": "RacingToken()", "1fbb4def": "CalculateDividents(uint256)", +"1fbbacfd": "bBtcGauge()", "1fbbf4bb": "setKillingGap(uint256)", +"1fbbff04": "getCycleInfoByIndex(uint256)", +"1fbc147b": "getTokenSale(uint256)", +"1fbc52a3": "setBunnyPerBunnyBNBFlip(uint256)", "1fbcf2c1": "_lotterySupply()", +"1fbd2822": "isTrustedCaller(address)", "1fbd3564": "getContentsManager()", +"1fbd51fb": "playTournamentDiceGame(string,address[],address,string,uint256,uint256,uint256)", "1fbd7771": "didSoftCapReached()", "1fbd9a0b": "REFUNDSACTIVE()", "1fbda78f": "LibraryToken()", "1fbe1979": "rescue()", "1fbe480e": "shipToMe(string,uint256)", +"1fbe552e": "getPlatforms()", "1fbe7475": "findEndpointByAddress(address,address)", +"1fbe9584": "withdrawERC20Amount(address,uint256)", +"1fbea924": "reinvestFee()", "1fbeaa83": "PublicBatchTransfer(address,uint256)", "1fbee22c": "updateSearchingFee(uint256)", "1fbee6ed": "CNYTokenPlus(uint256,string,uint8,string)", +"1fbf2cbd": "reset(uint256,uint256,address)", "1fbf7c3e": "increaseReserve(uint256)", +"1fbfc5ff": "dmmTokenFactory()", "1fbfe6f3": "auditReport(address,bool,bytes32,bytes32)", +"1fc00470": "getPassedTerm(uint256)", "1fc03aa0": "getTypeByNumber(uint256)", "1fc05f86": "minimalWei()", "1fc06f0d": "niceGuys(uint256)", "1fc083cf": "OurBit()", +"1fc0954f": "LPToPPDEX(uint256)", "1fc0e5e9": "StartPaymens()", +"1fc0fc03": "minAward()", +"1fc10360": "updateValueAlt(uint256)", "1fc1e25f": "listToken(address)", "1fc242b9": "onVote(address,int256)", +"1fc24bd8": "onePointCall(uint256)", "1fc24caa": "changeMaxTransactions(uint256)", "1fc27ef2": "isIcoActive()", "1fc2e0fb": "MinedThisYear()", +"1fc33329": "panel()", +"1fc3371a": "setTransferPauseExempt(address,bool)", "1fc3a519": "computeReturn(uint256)", +"1fc3b191": "set_eth_rate(uint256)", +"1fc45f67": "beneficiaryToVesting(address)", +"1fc4853b": "getDepositHandler()", +"1fc53a43": "lockedLpAmount()", "1fc5b4ee": "balancesByIndex(uint256,address)", "1fc5c9b7": "setNextPeriod(uint256,uint256)", +"1fc5cfc4": "pullResolves(uint256)", "1fc62fce": "Trillionereum(address,address)", +"1fc693f2": "_burnAllowance(address)", "1fc6e13a": "getRoundKeyPrice(uint256)", "1fc75e41": "preSaleWallet()", "1fc7d658": "purchase(address[16],uint256)", +"1fc7df7f": "setSellFee(uint256,address)", "1fc82e83": "allocateUnclaimedFees()", "1fc86532": "endBlockBonus2()", "1fc87587": "get_CountProfitsToken()", +"1fc8bc5d": "chef()", +"1fc8cd97": "createNative(address,bytes)", "1fc928ae": "taxToken()", +"1fc93aa6": "holderIndex()", +"1fc946ea": "userRefInfo(address)", "1fc97e34": "Genius()", "1fc983fb": "ChelseavsArsenal()", +"1fc9cee8": "playerSpins(address)", +"1fc9e340": "ReBalance()", +"1fca1d65": "burnFromUni(uint256)", "1fca5278": "highScore()", "1fca5fda": "IsRazRunning(uint256)", +"1fca8bd9": "getEOSKeyFor(address)", "1fcafd8f": "FomoMasterCoin()", +"1fcb225a": "_getburnFee()", "1fcb292d": "getTokenFunction(uint8)", "1fcbbefa": "sendBooty(address,uint256)", +"1fcbe82f": "buyReserveAndTransfer(uint256,uint256)", "1fcc02e8": "EthereumTestToken()", +"1fcc1571": "setPair(string,address,address)", "1fcc2515": "ChangeCrowner(address)", +"1fcc449e": "getValidatorIndex(address)", "1fccc158": "tCampaignEnd()", "1fcd08f0": "AaadharDemo()", "1fcd7ea6": "getPOOL_edit_33()", +"1fcd90e7": "currentRoundMilestoneInEther()", +"1fcdd273": "setFlagPairFn(function)", "1fcdfe14": "icoTokenAmount()", +"1fce304d": "isWaitingPeriod(bytes32)", +"1fcf24ba": "_claimdays()", "1fcf25be": "getTransactionSuccess(bytes32,uint256)", +"1fcf25f5": "IcoActive()", +"1fcf3810": "lowerCollateralMedianDeviation()", "1fcf55ff": "withdrawApplication()", +"1fd00067": "excessTokenBeneficiary()", "1fd01085": "_sellPresale(uint256)", "1fd01de1": "_checkOnERC721Received(address,address,uint256,bytes)", "1fd023ab": "FFCryptoCoinToken()", +"1fd18af4": "_calcLatePenalty(uint256,uint256,uint256,uint256)", +"1fd192f7": "migrate(uint256,address,bytes)", +"1fd212ff": "UnStopAdmin()", "1fd22140": "CountCourses()", +"1fd2238e": "rewardsPerDeposits(address)", "1fd2676f": "jackPotPercents()", +"1fd2d1a8": "OwnershipAPITransferred(address,address)", "1fd2e006": "changeClassFee(uint256,uint256)", +"1fd30892": "getStudent(uint8)", +"1fd3c85b": "memberIds(uint256)", "1fd3dd97": "OneEtherEqualsInWei()", "1fd41949": "setMaxInvestedLimit(uint256)", "1fd476bd": "AutonomousSoftwareOrg(bytes32,uint8,uint8,bytes32)", +"1fd48b9a": "priceFeed(address)", "1fd4b40c": "saleEtherCap()", "1fd55a8a": "crowdsaleOpened()", +"1fd635e0": "getDataLevel(address,uint256,uint256)", +"1fd6846c": "airdrop_auto(address)", +"1fd7b7b8": "l2l1users()", "1fd7b802": "ModifyMine(uint256,bool,string,uint256)", "1fd7f431": "setCCH_edit_7(string)", "1fd8088d": "minLimit()", +"1fd80af7": "migrateLPtokens1()", "1fd8291a": "endpresale()", "1fd86a6a": "FundICO(uint256)", "1fd96b69": "ManagedAccount(address,bool)", @@ -18227,212 +33279,396 @@ "1fda4271": "MindToken()", "1fda5b45": "receivePlayerInfo(uint256,address,bytes32)", "1fda8278": "drawCoach(uint256,address,address)", +"1fdac190": "DefaultMetadataURIChanged(string)", +"1fdae4b8": "getDepositMonth(address,uint256)", "1fdaedf2": "BoomstarterPresale(address[],address,address,bool)", "1fdaf3f2": "ServiceAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"1fdb0c87": "ClaimFromPool()", +"1fdb1549": "bidWithPluginReferrer(uint32,address,uint256,address,address)", +"1fdb43bd": "multisendErcSHD(address[])", "1fdb5a2b": "addInvestmentPreIco(address,uint256)", "1fdba848": "BiekensToken()", +"1fdc8bcd": "last_mint_time(uint256)", +"1fdc8dc5": "voting(string[])", +"1fdc9772": "halvening()", +"1fdcbf22": "approve_354(address,uint256)", "1fdcf5a7": "lockEthBalance(address,uint256)", +"1fdd3a0f": "addStrategyDeposit(uint256,uint256,bool)", "1fdd7695": "getbuyprice(uint256)", +"1fdd7867": "check(address[],uint256[])", "1fddbba4": "totalVUP()", "1fde4607": "setCreditDaoFund(address)", +"1fde64de": "enableRefundAllFucDDEGENS()", +"1fde7407": "approve_105(address,uint256)", "1fde8469": "setExchangeRate(uint32)", +"1fdec886": "postHeatDemand(uint256[],uint256[])", "1fdf071c": "approveMintAgent(address,bool)", "1fdf6e0c": "protectKingdom()", +"1fdf7448": "transferFromToExcluded(address,address,uint256)", "1fdfa40d": "test_setupBoardRoomAndAssert()", "1fdfec35": "calculateTotalDue(uint256,uint256)", "1fe00a15": "individualMaxCapTokens()", +"1fe065ad": "merkleContentHash()", "1fe07274": "SDEToken(uint256,string,string)", "1fe08e28": "how_many_arbits_do_i_have()", "1fe0ff58": "finishRound(uint256)", "1fe1516d": "sendToTeamEthContract()", "1fe15db5": "MarketboardListingComplete(address,uint256,uint256,uint256)", +"1fe199e8": "getUnLockPledgeAmount(address)", "1fe1b208": "totalavl()", +"1fe25e4f": "addressToUserID(address)", "1fe26e9d": "componentCount()", "1fe2a6f2": "updateJugada(uint256,bool)", "1fe2c933": "UpgradeByCredits(uint256,uint256)", +"1fe2c947": "isRebalancer()", "1fe2d046": "assignRafflePrize(address)", "1fe2e229": "getTotalTrust(address)", +"1fe2ee8e": "Purchase(uint256,uint256,uint256,address,address,uint256)", "1fe3aec7": "CGCGToken()", +"1fe4a686": "strategist()", "1fe4ee7f": "getVoteItemDetails(uint256)", "1fe51f82": "persistLimit()", "1fe55867": "rew()", +"1fe56f7d": "unfreezePartialTokens(address,uint256)", +"1fe5d61b": "migrateLPtokens3()", "1fe6189e": "PARTNERS_ADDRESS()", +"1fe63812": "setUGCAddress(uint256,address)", "1fe64f19": "MaximumHodlDurationChanged(uint256,uint256)", +"1fe7150c": "rubin()", "1fe74895": "Etherchicks()", "1fe7b624": "resumeMint()", "1fe7ff2c": "SpriteToken()", "1fe8149e": "createTokenByHWC(address,uint256)", "1fe8500e": "setItemRegistry(address)", "1fe8629a": "giveMultipleItemsAndDestroyMultipleItems(address,uint256[],uint256[])", +"1fe8fc06": "emergencyWithdrawASTRTokens(address,uint256)", "1fe93774": "totaleFrasi()", "1fe97e45": "whoIsConcerned(address)", "1fe9eabc": "setMax(uint256)", +"1fea3db8": "playerID(address)", +"1fea558f": "reduceLock(address,bytes32,uint256)", "1fea96cd": "removeUserFromBlackList(address[])", +"1feaa60f": "crvPla()", "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)", +"1feb412a": "removeProtocolAdapter(bytes32)", +"1feb575c": "invalidateSignature(bytes32,bytes)", "1fec0e96": "LogCampaignAdded(uint256,address,uint32,uint96,uint16,uint16,uint256)", "1fec5a11": "Coin77()", "1fec6dce": "createVestingPeriod(address,uint256,uint256,uint256,address,address)", +"1fed3bc4": "_initiateDeposit(uint256)", "1fedbc03": "getSharesPercentForPeriod(bytes32,uint256)", +"1fedc14c": "addGasRefund(address,uint256)", "1fedd70b": "snipCoinToEtherExchangeRate()", +"1fedded5": "upgradeGovernance(address)", "1fee37c8": "ADDR_TKG_NODE()", "1fee5c51": "set_min_max_FinneyPerSale(uint256,uint256)", +"1fee7ea2": "levelIncome(address)", "1feef08e": "getTotal(uint256)", +"1fef3056": "usdt_address()", +"1fef56be": "COMPOUND_BASIC_PROXY()", +"1fefc581": "potatoYieldOwing(address)", +"1ff013f1": "voteProposal(uint8,uint64,bytes32,bytes32)", +"1ff033a7": "interestTokenToUnderlyingStablecoin(address)", +"1ff0ac11": "setBaseURI(uint16,string)", +"1ff0fc7b": "LogListingExtended(address,address,uint256,uint256,uint256)", "1ff13086": "size(int256)", "1ff14311": "totalOutcomeAmounts(int256)", +"1ff14b05": "getHashedValue(uint256)", "1ff1a378": "maxSalesAllowed()", +"1ff1a541": "CurLineBigger()", +"1ff2af2d": "copy(uint256,uint256)", "1ff2c22b": "setCharityFund(address)", "1ff2e214": "proposeAmendmentJUR(address,uint256[],uint256[],bytes32)", +"1ff2ff38": "LogWithdrawEther(address,uint8,uint256)", +"1ff3c3c5": "createKolMission(bytes32,uint256)", "1ff42195": "minimum_cash_proof_amount()", "1ff517ff": "totalDebt(address)", "1ff5668c": "depositForDividends()", "1ff5e17c": "_itemLength(uint256)", +"1ff5f3da": "isMinKeeper(address,uint256,uint256,uint256)", +"1ff60751": "Paid(address,uint256,uint256,uint256)", "1ff6536c": "setCrowdSaleStart(uint256)", +"1ff68866": "enterDrawingPhase()", "1ff6a54b": "cancelFavor()", "1ff6ad55": "tokensForPeriod(uint256)", "1ff6c241": "collectedUSD()", "1ff75851": "updateICODate(uint256,uint256)", "1ff76f86": "ROBReserveAllocation()", +"1ff7958a": "GameWon(uint8,address,uint256)", "1ff7a278": "ownerNegTokens()", +"1ff8566f": "_mintedSaleTokens()", "1ff858d0": "activateNextStage()", "1ff8ac8a": "getFinalval()", +"1ff8b181": "okAcccounts(address)", "1ff8d507": "toggleSwap()", +"1ff924a1": "LogBet(bytes32,address,uint256,uint256,bool,uint256)", +"1ff95cef": "bid(address,address,uint256)", "1ff96c74": "getHonour(uint256)", +"1ff9b6f2": "rescueFunds(address,address)", +"1ffa0e51": "LogServerRemoved(string,address)", +"1ffa20dd": "currentIntervalNo()", "1ffa27f9": "hasPermissions(address)", +"1ffa3021": "setUniPair(address)", "1ffa451c": "serviceTransfer(address,address,uint256)", +"1ffa6008": "swapByOrigin(address,address,uint256,uint256,uint256)", +"1ffb10da": "shortAmount()", +"1ffb528f": "freezeAddress(address,bool,bool)", "1ffb6ca6": "unlockTransfer(address,uint256)", +"1ffb7a8e": "setUniswapFactoryAndRouter(address,address)", +"1ffb811f": "beforeTransfer(address,address,uint256)", "1ffbb064": "isAgent(address)", +"1ffbc33f": "mulPerBlock()", +"1ffbe7f9": "sendToCosmos(address,bytes32,uint256)", "1ffbf32b": "MUSPRA()", +"1ffc7816": "maxperBuy()", "1ffc973a": "HedgeCash()", "1ffcb18c": "numQuestions()", +"1ffd3a06": "listproduct(uint256,string,string,uint256,string)", "1ffd3aef": "log10Floor(int256)", "1ffd42ab": "getVotingScriptAction(uint256,uint256)", +"1ffd51be": "y(address,address,uint256)", "1ffd99f4": "saler()", +"1ffdaabd": "extendsParent()", "1ffe3c9b": "UECToken(address,uint256)", "1ffe4cca": "startline()", +"1ffec27a": "addLiquidityFor(address,address,uint256,uint256,uint256)", +"1ffef962": "checkHold()", "1fff2d8a": "payToPresale(address)", +"1fff5517": "Fund(address,string,address,uint256)", "1fff5c2f": "bindEthereumAddress(address,bytes32)", +"1fff606f": "Rotator(uint256)", "1fff7a97": "CompositionPart(uint256,address)", "1fffbe7a": "getJobSponsorships(uint256)", +"200061df": "unstack(uint256)", +"20009e24": "massTransferWithFees(address[],uint256[])", "200138b9": "CrowdTmoney()", +"20017031": "buyWerewolfAssetWithETH(uint256,uint256,address)", +"20017e7b": "AuctionStartScheduled(address,address,uint256,uint256)", +"2001a0e6": "importDAI(uint256)", "20020a3a": "createAsset(bytes,uint256,bytes,bytes,address)", +"200233d2": "setIController(address)", "20027275": "saleStartBlock()", "2002c2f6": "slogans(uint64)", "200308ee": "rewardVoteResultForCandidate(address,uint256)", "20033848": "MagixRecordsCoin()", "20035e36": "icoEth()", "200373c9": "fees_()", +"2003b30b": "tdestroy_()", +"200429bb": "pullInfo()", +"20046e91": "calHpDeducted(uint16,uint16,uint16,uint16,bool)", "2004b6a6": "TheWhaleWins()", "2004dff6": "Basics()", "2004ffd9": "mintToken()", +"200537a4": "getLockedCNAgainstCover(uint256)", "200538c6": "DTE()", +"200561ab": "addLockPosition(address,uint256[],uint256[])", "200576b5": "TchainToken()", +"2005a946": "baseAddr()", "2005db6d": "preIco(uint256,uint256,uint256,uint256[],uint256[])", +"2006e610": "crabPerBlock()", "2007474e": "theRelayer(address)", "20076659": "Arbitrator()", +"2007acbf": "ticketStatus(address)", +"2007c640": "allMembers()", +"2007cbcc": "ERR_ENTRY_NON_EXISTANT()", "2008c2ca": "destPercent(address)", +"2008fb37": "contractPoB()", +"20098014": "log(uint256,bool,uint256)", +"20099b4d": "approve_761(address,uint256)", "2009a059": "setLandProductionMultiplier(address)", +"2009b246": "Changeethereallet(address,address)", +"2009dc65": "cancelAndRefund()", +"2009e568": "maxRewardIncreaseDelay()", "200a252a": "PhanToken()", "200aa519": "addCustomerwithToken(address,uint256,address)", "200aac9f": "burnAZLTEST(uint256)", +"200abc22": "bpoolTokens(uint256)", +"200ae02b": "getTreasuryValue()", "200b0fa6": "initVote(uint8)", +"200b2516": "mintPhoto(uint256,string)", "200b894d": "assertEq(int256,int256,bytes32)", "200b8951": "_distribute(address,uint256,uint256,uint256)", "200c1f19": "premiumPacks()", "200c7295": "whitelistAddress(address,uint256)", "200c7770": "bountyDuration()", "200cdf8e": "becomePickleRick()", +"200cfd24": "RCVRAddress()", "200d10dc": "OrpheusOrganicsLaos()", "200d2ed2": "status()", +"200d583a": "transfer_token(address,address,address,uint256)", +"200dab75": "dodajProfesora(string,string)", "200deb8b": "MessageSent(string,string,string,uint256)", +"200e7ccf": "lockMVDays()", "200ebe34": "addTokensToGive(address)", "200ef97e": "payNTS()", "200f29e3": "advisorAccount()", +"200f6694": "approve_172(address,uint256)", "200fbcf0": "getFullyVestedAmount(address,address)", +"20101e09": "ShopItemSold(address,address,uint256,uint256,uint256)", "201035ed": "getGunsIds()", "20104dca": "engCommunityAddress()", +"2010765b": "releaseStake(address,address[],uint256[],address)", "2010bdce": "removeSupervisor(address,address)", +"2010c034": "acl(address)", +"2010c97e": "getDelegateFunctions(address)", +"2010ccf0": "changeFeeRo(uint256,uint256)", +"2010ec2f": "_withdrawOne(uint256)", "20120dce": "ADMIN_SET_TEST_RANDOM(string)", +"2012aca7": "deposit(bytes,uint256,bytes32,bytes)", "20130753": "testThrowSetNotRetractableNotOwner()", +"201350f3": "setBVaultBankContract(address)", "20145328": "changeMelonportAddress(address)", "2014c515": "tgrNextPartInvestor()", "2014d703": "approveAllArgs(address,uint256,address)", "2014e1fb": "W0keAFCrowdsale(uint256,uint256,address,address,address[])", "2014e5d1": "isRunning()", "20150e21": "sendDividends(uint256)", +"20153c38": "batchTransferBalance(address[],address,address,uint256[])", "20153d38": "EarlyAdoptersAmount()", +"20154838": "getSwapAdd()", "20154e78": "unpausePVP()", +"201563a5": "_safeCreateDepositBlock(address,address,uint256)", +"20157d0a": "unpauseSwap()", "20158c44": "fills(bytes32)", +"2015fc0e": "mrStaticRewardAlreadyRelase(address)", +"20160b07": "setMinTxFee(uint256)", +"20160f3a": "ovmGASLIMIT()", +"2016a0d2": "initialize(address,address,string,string)", +"2016be1c": "getWillBeWithinEthDailyTransactionLimit(uint256)", "201745d5": "disown(bytes32,address)", +"2017aa2f": "winnerPrize()", "2017af61": "initialTokensHolder()", +"2017d0a2": "tokenTorToken(address)", "2017ee03": "nextDealIndex()", "20183926": "EngagementToken()", "20185aa2": "liquidityWithdraw(uint256)", "20188d4f": "getAdjustedContribution(address)", +"2018a501": "minkPerBlock()", "20190ccd": "startCirculation()", +"2019bbd2": "_sweepReceiver()", +"2019c75a": "addDelegatedVault(address)", +"201a5998": "ownerMasterpieceCount(address)", +"201add9b": "pullFunds(address,address,uint256)", +"201b2fa9": "numberOfMarkets()", +"201b6e45": "marketRate()", "201bafee": "TroneriumSupply()", +"201c3845": "numOfPlayers()", +"201c6877": "safeBrisketTransfer(address,uint256)", +"201cda05": "reinvestcount(address,uint8,uint8)", +"201d3be7": "getPersonalStakeUnlockedTimestamps(address)", +"201dbf7c": "IAmTokenPresale()", "201dcd7a": "newChallenge(uint256,uint256)", "201de654": "mnemonicsCount()", +"201e1e8f": "getMasterPoolCount()", "201e8f0e": "changeWhitelistCornerstoneStatuses(address[],bool)", "201e908e": "blockDuration()", +"201e9336": "isCorrectGuess(bytes32,bytes32,uint256)", "201f1506": "EthereumEra()", +"201f5084": "_FREEZE_TIMESTAMP_()", "201f6e02": "oldAppreciationRateWei()", "201f96e5": "setRepMarketCapInAttoeth(uint256)", +"201ff2c4": "setRiskAversion(uint256)", "20202965": "expired(bytes12)", +"20204d3a": "batchUnfreezeTokens(bytes32[])", "20204fb7": "genericCall(address,bytes,address)", "2020e9ea": "bid(uint16,uint16)", +"2021012c": "m(uint256,uint256)", +"202167aa": "trade(uint256,address,address,uint256)", +"20218c41": "maximumStakingAmount()", "2021dfcb": "BONUS_DURATION_3()", +"2021f9ec": "coldWallet_60()", +"2022692d": "getTerms(address)", "20226e17": "valueOnContract()", +"20227db8": "ifillArray()", "2022936f": "BalanceClaim(address)", "202329cb": "get_all_activityn(uint256)", "2024617e": "initialize(string,string,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2024cf41": "_u()", +"2024de8e": "CarrotBalanceAll(address)", "20250264": "setData_5(uint256)", "2025867b": "qualifiesAsCommunityBallot(uint16)", "2025e52c": "createSaleTokensVault()", "20260697": "createWallet(uint256,address[],bytes32)", +"20260a05": "check_swap_invariants(int24,int24,uint128,uint128,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "20263e87": "incentiveTokenAddress()", +"2026999a": "skullPerBlock()", "2026a0a7": "change_sale_address(address,string)", +"2026cfdc": "updateContractMap(bytes32,address)", "20277ed7": "GWGFPLUS(uint256,string,string)", "2027d2c6": "ETHLottery(address,uint256,uint256,uint256,address)", "2027d746": "getCustomerCount()", "2027e1d3": "COCO()", +"2027ebc4": "getMultisigencryotion(uint256)", +"2027f265": "getFactor(uint256)", +"2027f839": "addPost(uint256,string,bytes32)", "20281990": "ProposalAddedEvent(uint256,address,uint256,string)", +"20283d11": "GoalReached(uint256,bool)", "20283da9": "trustedWithdrawETH(address,uint256)", "202920ef": "FST()", "2029e599": "addCode(string,string)", +"2029e96f": "potEth()", +"202a2735": "holdPercentage()", +"202a36cd": "pauseWithdrawals(uint256)", "202a46cf": "limitEther()", "202a6ce0": "NFXCoin()", +"202a9dd2": "_constructInitializationCalldata(address)", "202ac3bc": "withdraw(bytes,bytes,bytes32)", +"202ae256": "pastLosings(address,uint256)", +"202b1760": "canUnlockAmount(address)", "202b876a": "allocateToMarketingSupporter(address,uint256)", +"202bb152": "swapWallet()", "202bb36d": "JTBlockchain()", +"202bb80c": "getEthAddr()", "202bc7e7": "getIntervalCoefficientMultiplier(uint256,uint256,uint256,uint256)", +"202bf004": "changePriceUpdateInterval(uint256)", +"202c0131": "chainlinkfeed()", "202c413d": "setNickname(uint256,bytes32)", "202ca027": "setPayrollAddress(address)", "202d5123": "STRTToEth()", "202d6eaf": "addInvestorsValue(uint256)", +"202dc181": "updateAirdropAmount(uint256)", +"202e1e43": "lastObservation(address)", "202e3924": "getOperation(uint256)", "202ece74": "sendToWinner(uint16)", +"202ee0ed": "submit(uint256,int256)", +"202f2a3b": "STAGE_ONE_TERM_COUNT()", +"202f88e6": "DJAdded(address)", "202feb77": "test_2_assertGasUsage100Boards()", +"20302ab7": "cDAI_ADDRESS()", "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)", +"2033bb32": "DepositPendingAdded(uint256,address,uint256)", "2033d9ae": "switchToDistributionMode(uint256)", "2033de43": "setNewRatesCustom(uint256,uint256,uint256,uint256,uint256,uint256)", +"20341101": "rejectClaim(uint256)", +"2034e59b": "view_uint8()", "20352a6e": "ChildDeposit()", +"2035a4dd": "claim(uint256,address,uint256,bytes32,bytes32[])", "2035d6b4": "addAccountData(string,bytes)", +"2035d73b": "targetIsPaused(bytes4)", +"2035ecf4": "BeaconContractAddress()", "20364306": "setMaxLinkedWalletCount(uint8)", +"20364c43": "lend(uint256,address,bytes)", "2036e2f7": "getCurrentExchangeRate(uint256)", "20375692": "initVesting()", +"20379ee5": "getDomainSeperator()", +"2037f3e7": "updateJumpRateModel(uint256,uint256,uint256,uint256)", "2037fcbf": "withdrawInvestment(uint256)", +"2038228f": "applyHash(uint256[])", +"20385f2f": "cancelDebtOrder(address[6],uint256[8],bytes32[1])", "2038d1e5": "setTokenMintFeeAbs(address,address,uint256)", +"2038d2cb": "originalToOwner(uint256)", "2038e2e6": "timestampLast()", "2038e80a": "mixFormula()", +"20391f06": "multipleSafeMint(uint256[],address)", "20392160": "round1Sold()", "20396553": "safeMul(int256,int256)", "203967a5": "toDie(bytes32)", @@ -18440,53 +33676,101 @@ "20398971": "abiOf(uint256)", "20398b83": "sendPrepaidEthTweet(uint256,string,uint256)", "2039b386": "isHashSigned(uint256)", +"2039d890": "Distributor()", "2039d9fd": "depositERC20Token(address,uint256)", +"2039eeff": "buyId()", "203a318f": "ico_startdate()", +"203a6d07": "ComisionEvent(address,address,uint256,uint256)", "203a79f6": "cutoffTimestamp()", +"203a9a37": "setSpawnerData(string,string,string,uint256,uint256,uint256,int256,int256)", "203ab888": "collectOriginalBet()", "203b2352": "_checkOpenings(uint256)", +"203bcdcc": "delegateMintingRights(address,uint256)", +"203bce83": "B11(bytes)", +"203bd65d": "getMaxSellBatch()", +"203bd715": "getRewardByPID(uint256,address)", "203c03fa": "Coinflip()", "203cbee2": "ownerPetTransfer(address,uint64)", "203d39ff": "getOrderBook(address,address)", "203dacb9": "PrivatePreSale()", +"203dcb58": "latestSecondaryReceiver()", +"203e09d5": "setbaseFees(uint256,uint256)", "203e0dc9": "SupbToken()", "203e3204": "goldIfFreeze(address)", +"203edd88": "changePriceProviderAuthorization(address[],address[])", +"203ee2c6": "x_adminUpdateERC20Address(address)", +"203f64c5": "buy(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"203fa192": "CashierRemoved(address)", "203faa89": "lastState(address)", "203fb521": "addTransaction(address,uint256,bytes,uint256)", "203fec23": "LogTransfer(address,address,uint256,string)", "204009d2": "transferForMultiAddresses(address[],uint256[])", "20409b47": "updateContent(string,uint256)", +"2040f654": "calcToEth(address,uint256)", "2041518d": "calculatePrice(uint256[],address)", "2041b997": "tokenizeProperty(string,address)", +"204201ab": "initializePrecisions()", "20422fd9": "setAutoInvestByAdmin(address,bool)", "204241cb": "leaveTeam(uint256)", "2042495b": "changeUsed(address,int256)", "2042e5c2": "removeWhiteList(address)", "2043285d": "getMarketMakers()", +"20440b7a": "getPrimeCount(uint256)", +"20441bb8": "deployAndBurn(bytes)", +"20442e1c": "updateSodaToken(address)", "2044b21b": "exceedsSaleCap(uint256)", "204525e6": "mul256()", "204605ad": "ngrzicoToken()", +"20461253": "sKimChunk()", +"20467ba5": "showMyCurrentRewardTotal()", +"2047045b": "approve_443(address,uint256)", +"20476777": "getIsPrimary(address,uint256)", +"20479533": "updateNumberOfRounds(uint256)", +"2047a267": "decDebt(uint256,uint256)", "2047e4af": "updateTokensState(uint256,uint256)", "2048cba4": "inGroup(address)", "2048e5f7": "PaytherToken()", "20495427": "setBreedingAuctionAddress(address,address)", "204a88c5": "hasAgreement(bytes32)", +"204ad265": "MaxGoalReachedAtIndex(uint256,uint256,uint256)", +"204ae63e": "WalletsMinted()", "204b21d1": "AVAILABLE_BONUS3_SUPPLY()", "204b676a": "numVestingEntries(address)", +"204bb136": "rebalanceSetToEth(uint256)", +"204bfe50": "setnew(int256)", +"204c1d14": "transferGem(address,uint256)", +"204c906a": "renounceCurveSetterRole()", +"204cbed2": "changeRewardsPerBlock(uint256)", "204d3d65": "getCountPlayersOfTeam(uint256)", +"204d4ab3": "receiveFod()", +"204e1c7a": "getProxyImplementation(address)", "204e6749": "rewardToken(address,uint256,uint256)", +"204e71b9": "participantCancel(uint256)", +"204efa16": "activityRemoved(uint256,address,address)", +"204f2469": "ViewStakeDetails(address)", +"204f83f9": "maturity()", "2050c26e": "preSaleFourthCap()", "205140c7": "totalClaimableTokens()", "20514abf": "tktotal()", "20522347": "changeEndDate(uint256,uint256)", "20523d0d": "closeAgreementWithTimeout(bytes,uint8[2],bytes32[2],bytes32[2])", +"20523e4c": "depositAll0()", +"2052465e": "zombies(uint256)", "2052de16": "checkContinuousPurchase(uint256)", +"2052e29d": "CRETH2()", +"20531bc9": "priceSource()", "2053480e": "ActionMiningPlat(address,uint16,address)", +"20535497": "getCumulativeQueuedGasAtEpochStart()", +"20535b6e": "setLuckPool(uint256)", "205360e0": "setReward(uint64,uint256)", "2053e690": "turnOffOraclize()", +"205409d3": "minWant()", +"2054279e": "publicBuyCompleteSetsWithCash(address,uint256)", +"2054282a": "registerEvent(address,string,string,string,string,string,uint256,address,string,string)", "20544010": "getWinningsForRecordId(uint256,bool,bool)", "20547a42": "increaseDailyTransactionVolumeReceiving(uint256)", "2054b2c6": "assert(address,address)", +"2054d126": "optimalDeposit(uint256,uint256,uint256,uint256)", "205525d2": "set_comp(uint256,string)", "2055c2ff": "SerchUserPurchase(address,address)", "20566ae8": "initMonsterClassSiteSet()", @@ -18495,103 +33779,192 @@ "205730fd": "SELL()", "2057420b": "withdrawVault(uint256,address)", "2058308d": "_addPropertyValue(bytes32,address)", +"2058a318": "PointParametersSet(uint256,uint256,uint256)", +"2058c785": "isStartStakingPeriodFinished(uint256)", +"2058e906": "emptyCount()", "20592076": "HeyToken()", +"2059ba6f": "setUnstakingTime(uint256)", "2059c548": "exerciseOptionsDeadline()", +"2059f615": "lpBalance()", +"205a76f2": "airdropOf(address)", +"205ae07b": "setTrustedToken(address,bool)", "205b1946": "hasContributed(address)", +"205b2a87": "getMulBalance(address[],address)", "205b931e": "addOracles(address[])", "205ba186": "DSJL()", +"205bc188": "ConfigRed(uint256,uint256,uint256,uint256,uint256)", "205c2878": "withdrawTo(address,uint256)", "205c7cf5": "issueCenturion(address)", "205c9cc7": "w()", "205d0063": "feeTakeExporter()", +"205d5c4f": "_invite2Percent()", "205d6c86": "purchaseEgg(uint64,uint16)", +"205db2c1": "V()", "205dc0ee": "poolAddressCapTier1()", +"205dda68": "messageDigest(bytes32,uint256,uint256,uint256,address,bytes32)", "205e0e26": "advisersCliff()", +"205e3ad9": "checkAddrMinerStatus(address)", "205e921c": "delegatedRefund(address,address)", "205f3b58": "calculateOwnerCut(uint256)", +"205f59c0": "NeuroChainAddressSet(address,string,uint256,bool)", +"20606b70": "DOMAIN_TYPEHASH()", "2060a150": "props()", "20610779": "deathData_a2()", +"20611e3f": "TokenTransferFrom(address,address,address,uint256)", "20614514": "HHDToken()", +"20617373": "lastgid()", "20620f37": "onAuctionEnd(string)", "206288d3": "deployBlockNumber()", +"20628e08": "StateChanged(address,uint8)", "2062e457": "setDirectPaymentThreshold(uint256)", "2063165d": "union(uint256[],uint256[])", "206369fa": "AthleteToken()", "206465f7": "_getPendingOwner()", "20647eb7": "externalFailure()", +"2064a254": "LGE()", "20651d5d": "batchTransferToken(address,address[],uint256[])", "20654277": "ArtsCoinV1()", "206545c2": "DIAMOND()", +"2065b966": "dataSourceGetExtraStats()", "206607f2": "updateCanFetch(bool)", +"20668893": "_encode_sol_bytes13(bytes13,uint256,bytes)", +"2066898c": "initDfiPerBlock()", +"20673837": "IncrementTieredState(string)", "20675504": "hyperInterface()", "2067c85c": "transferTokensFromMarketingAddress(address,uint256)", +"206826af": "yank(address,address)", "20688582": "saleIsRunning()", +"20689541": "cryptoAlpaca()", +"20689b26": "readNameSignUp()", "20689f29": "preSalePeriod()", +"20691d90": "getPerUserInfo(address,address[],address[],address[])", "2069381a": "multiPresaleMint(address[],uint256[])", "20694db0": "addIssuer(address)", +"20698c4f": "proposedNewImplementation()", "2069de94": "TonalQuantum()", "2069f66c": "isPresalesNotEndedInAdvance()", "2069fc46": "excludeAmbassadors(uint256,address)", "206a44f3": "getNum(bytes,uint256)", +"206a7dec": "getFirstBuyTime(address)", +"206ac578": "getUniswapConnectorsAmountByPoolAmount(uint256,address)", +"206b60f9": "TRANSFER_ROLE()", "206b64b4": "generateName(bytes16,uint256,uint256)", +"206b8b2a": "buyBurnRate()", +"206bc0a0": "tokenIssuedSale()", +"206bc86a": "RESERVE_POOL()", "206cfd24": "cleanFinishedOperations(uint256)", "206d0125": "getWithdrawnFromBatch(address,uint8)", "206d1fde": "setMegaAddress(address)", "206d468f": "PriceOracleInterface(address,address)", +"206d734b": "setExtraMintingForNodes(address,uint256)", "206ec7a1": "multisend(address,bytes32,address[],uint256[])", +"207008f6": "setDelegationStatus(bool)", "20701967": "confirmPlatformWithdrawal()", "2070748c": "XeroBest()", "20709b35": "jackpotPaused()", +"20709dbb": "ShowDeposit()", "2070b6de": "donationPhase()", +"207134b0": "trusteeFeeBps()", "20714f88": "setSelfDestructBeneficiary(address)", +"20718650": "log(uint256,bool,bool)", "2072343e": "MeowToken()", "2072863b": "setCMO(address)", "20729b83": "DistributeButtonIncome()", "2072cde2": "NewsCash()", "207368fc": "startSelling(uint256,uint256)", +"207395b1": "getPurchasedCouponHistory(address)", "20745669": "ClaimedSignature(address,string)", "2074cc86": "MikCoinToken()", +"2074f23e": "Nft()", "2075281c": "Marko()", +"20756523": "getAmountHash(uint256[],uint256[])", +"2075b80d": "allRPunksAssigned()", "2075eec6": "tokenQuantities()", +"2076776e": "NewLove(address,uint256,uint256,uint256,uint256)", "20768ee8": "getProposalID()", "20770caf": "GRUCoin()", +"2077d2e3": "proposeProposeDelay(uint256)", +"2078abbd": "boaContract()", "2079405b": "AmountToDistribute()", +"20794113": "toggleDepositable(bool)", +"20797de1": "hitTheDamnButton()", "20799608": "convertDecimal(uint256)", +"2079bbe6": "x_ownerTransferOwnership(address)", "2079fb9a": "signers(uint256)", "207a6c33": "calculateCurrentVirus(address)", "207a6d80": "TukBuk()", +"207a70b3": "borrowingDict(uint256)", +"207a9485": "isResource(address)", +"207aa77f": "CsUpdated(address)", "207aba24": "Migrate()", "207acb53": "_calculateRequiredTokenBalance(uint256,uint256)", +"207acd57": "TokenUnlocked()", +"207add91": "setLimit(uint256,uint256)", +"207b02af": "sushimineInterval()", "207b89e2": "purchaseLand()", "207bd99d": "ableTransfer()", "207beb59": "getRateIcoWithBonus()", +"207c2c33": "newFundAddress()", "207c64fb": "validate(address)", +"207ca069": "ownerWheatCount(address)", "207cb710": "grantInvestorTokens(address)", +"207cfb55": "mintTeamAndAdvisorsPart1(uint256)", +"207d802c": "totalStakedForFiveDays()", +"207e11aa": "finishFarming()", +"207e19fc": "Sell_Item(address,string,uint256,uint256,uint256)", +"207e24e6": "sendTaxVersion(address)", "207e6467": "pieBalances(address)", +"207e821d": "totalAccumulatedReward()", +"207f281a": "coinAgeRecordForAddress(address,uint256)", "207f4f38": "contTransfer(address,uint256)", +"207f8e7e": "LogLoanCancelled(address,uint256,uint256,bytes32)", +"207fd126": "createMarket(address,address)", +"20800a00": "rescueETH()", "2080d8dc": "EVTCTLToken(address,uint256)", +"2081066c": "initial_A_time()", "20813154": "deregister(bytes32)", +"2081c4ea": "setPriceMultiplier(uint256)", "2081e911": "Set()", +"20820a4a": "NOSPurchased(uint256,address,uint256)", +"20821568": "votedChi()", +"20824911": "structFunc()", "208318bd": "Total_Amount()", "20832219": "setOps(address,bool)", "2083250d": "Atriark(uint256,string,uint8,string)", "20834ed0": "AddPlayers(address,address)", +"2083569e": "maxBlocks()", "20835e8c": "getBet()", +"20838d21": "distributeLPRewards()", +"2083b35d": "getExecutorContractName()", "2083c730": "_hatchEggs(address)", "2083cbd8": "execAirDrop(address,address[],uint256[])", "2083f44f": "lastFell()", +"20842ea0": "slates(uint256,uint256)", +"20845c12": "totalUsedCover(address)", +"208461f5": "recovertokens(address)", +"2084d331": "flashExec(uint256)", +"2084da72": "numElectricityOffers()", +"208505a5": "getFrozenAmount(address)", +"20852ee7": "cusdc()", "20857295": "setErc20TokensContract(address)", "2085f554": "approveAndCall(address,uint8)", +"20860425": "setUseSushiswap(address,address)", "20867ccd": "addEmployee(uint256,string,string,string,string,string,string,address)", "2086ad60": "MiewGold()", "20871322": "ForecastingFactory(address)", +"2087369b": "getGasFee(uint256)", +"2087c431": "setProfitPcnt(uint256)", "208838c8": "tokenPerWai()", +"208844af": "_disableHorseFromStud(uint256)", "20885d9e": "PGE02CH()", +"20889d3b": "acquire(uint256)", "208904c7": "startFrom()", +"208929d1": "setBlockerOperatorsContract(address)", "208972b4": "PartialPayment(uint256,address,address,uint256)", "2089d0c9": "Swachhcoin(address)", "208a099c": "createKitty(uint256,uint256,uint256,uint256,address)", "208a9e37": "tweakRefundStatus()", +"208ab67a": "CreateMEW(address,uint256)", "208af09f": "setIsForking(bool)", "208b080f": "changeExpiryLimit(uint256)", "208b3116": "next(uint256,uint256)", @@ -18599,36 +33972,65 @@ "208c1019": "BLOCK_BASIC_PRICE()", "208c8692": "mint(bytes,uint256,bytes,bytes)", "208ca719": "SellIPG(uint256)", +"208da65d": "transferToVault()", +"208db12f": "modifyParameters(address,address,address,bytes32,address,uint256)", "208df65f": "getValueByNumber(uint256)", "208e1cc3": "writeConditions(uint256,string)", +"208e5acc": "depositedAt(address)", "208e8914": "atFundDeposit()", "208eba04": "_withdraw(address,uint256,address)", "208ebf16": "lpBidVolume()", +"208f2a31": "nodeList(uint256)", +"20902ea8": "distributeGifts(address[],uint256)", "20907d9a": "BlockClout()", "20909455": "triggerAirDrop(address[],uint256)", "20909fa0": "communityCurrency()", "2090b0a8": "m_allowPrivileged()", +"2090c198": "openseaProxyEditable()", "2090cf8b": "consultBalance(address)", "2090d5e9": "lookupByProject(uint256)", "2090d8a6": "trackOdd(uint256)", "2090f3e3": "lethalBonusAtHitsLead()", +"2091397b": "dr(uint256)", "209164d5": "_processPurchase(address,uint256,uint256)", "20917902": "globalether()", +"2091988b": "callStoredAddress()", +"2091d60c": "handleBC(uint256,uint256)", "2091f2d9": "ICOoverTimeStamp()", +"2091f955": "giftToken()", +"20926557": "setTreasuryDivRate(uint256)", +"20927ec9": "projectIdToCurrencySymbol(uint256)", "2092970f": "StartDistrib()", +"2092a1ed": "newSlotId_ap5()", +"2092a55c": "etherDividend(address,uint256)", +"2092c12b": "calculateSaleQuote(uint256)", +"2092e259": "changeApprover(address,uint256,uint256,uint256,address)", +"20931094": "ESetBonusMintingAgent(address)", +"2093a22c": "getGirlBirthTime(uint256)", +"2093a598": "setReferRewardRate(uint256)", +"2093b27c": "readX(uint256)", "20940b13": "btcTransactionClaimed(uint256)", +"20946578": "_exitAdharmaContingencyIfActiveAndTriggerHeartbeat()", +"2094922c": "mintTokensForOwner(uint256[],string,uint256)", "2094e9d8": "newJob(bytes32,bytes32)", +"209544cc": "currencyToOracle(string)", "20956341": "slice2(bytes,uint256)", "2095f2d4": "endCrowdsale()", "20965255": "getValue()", +"20966208": "ovmSLOAD()", "20968dc7": "rewardHistoryLengthOf(address)", "2096b768": "getCoreAddress()", "2096c958": "GEXAirDrop(address)", "2096f2ff": "issueTokensMultiple(uint256[],uint256[])", "2097dd04": "getLatestAuthorizedAddresses(uint256)", "2097e5f0": "VaultbankToken()", +"2097ed8c": "ReachedHardCap(uint256)", +"20982bce": "times(uint256)", "209878b9": "lockReleaseTime()", "20987e64": "addInvestment(address,uint256)", +"20988cef": "ONE_MONTH()", +"2098c75b": "_POOL_()", +"2098e1b2": "getMyLuckyNum()", "2098e37a": "LogBoonReleased(address,uint256,uint256,uint256)", "2099940e": "freezOne()", "209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", @@ -18636,54 +34038,113 @@ "209b7067": "CALLGToken(uint256,string,string)", "209b80ce": "previousstageloser()", "209bb163": "Ethex(address,address,uint256,uint256)", +"209bcbe8": "enableListAccess(bytes4)", +"209bd8eb": "rewardsAllocated()", +"209cc5ac": "splitAmountToLiquidate(uint256,uint256)", "209cccd7": "channelCloseTimestamp(uint64)", +"209cfe50": "approve_690(address,uint256)", +"209d4002": "tokenToReserveSwapOutput(address,uint256,uint256,uint256)", "209ebc08": "isPaid()", "209f36d0": "registerApiKey(address,address,bytes32)", "209f3c9c": "MINIMAL_PARTICIPATION()", "20a0045a": "SALE_END_TIME()", "20a0128e": "ICOEndDate()", +"20a0851f": "setFuturesContract(address,bool)", +"20a08d09": "increaseJackpotTimeAfterBetLevel1()", "20a09dec": "COMM_SUPPLY()", +"20a0dd90": "retrieveText()", "20a168b1": "coinsPerEth()", "20a17b24": "dexWallet()", +"20a18988": "aaGetInfo(address)", +"20a1aae3": "WethPerBlock()", +"20a1c1f8": "increaseOwnerAllowance(uint256)", "20a2b135": "forkThis()", +"20a2dfca": "isUnlockedDeveloptment()", +"20a31b46": "_setBurnRate(uint256)", +"20a35daa": "getSignerFromSignature(bytes32,bytes)", "20a3952b": "MyTestGameToken()", +"20a493e5": "getOrdersForAddressLength(address)", "20a4e8f8": "_clearSnapshotDelegators(uint256,address)", +"20a59a03": "setRequiresWhitelist(bool)", "20a60ace": "TokenBurner()", +"20a64a36": "releasableLpAmount(address)", +"20a68d25": "escalateDispute(uint256)", "20a733df": "countPerformers()", "20a7b2d7": "_setMintFeeProp(uint256)", "20a7d5c3": "lend(uint256,bytes,address,bytes)", +"20a85fc2": "allotTokens(address,uint256,uint256)", +"20a88190": "hasAdmins()", "20a99bd0": "templates(address)", +"20aaba72": "_sellSplitFee()", "20aac36f": "getstopBlockNumber()", +"20ab0eca": "lockPeriodEndForTMwallet()", +"20ab8202": "confirmAndExecuteTransaction(uint256)", "20aba08b": "rho()", +"20abde58": "readTotalStakeAndSssss(address,uint256,uint256,address)", "20abf417": "stageFourCap()", "20acbc83": "withdrawTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"20ace7b7": "onEndTx(uint256,uint256,bytes32,address,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256,address,uint256)", "20ad3874": "vestingBonusMultiplierPrecision()", +"20ad6586": "POOL_TOKEN()", +"20ad6ae3": "BURN_AMOUNT()", +"20ad6c7f": "bunnyCost(uint32)", "20ad8a81": "setTeamTokensPercent(uint256)", +"20add820": "transferProxyInstance()", +"20adfad1": "maxChildrenPerToken()", "20ae2059": "setMaximumBet(uint256)", +"20ae9c5d": "balanceOfUser(address,address)", +"20aed763": "get_current_pool()", +"20aed7cc": "startWaitPeriodChange(bytes32,uint256)", "20af0841": "_payPayee(bytes32,address,uint256)", "20af2042": "setCountPerStep(uint256)", +"20af63a0": "earned(uint256,uint256)", +"20afd9c0": "editTotalUnits(uint256,bool)", "20b023c8": "disavow()", +"20b035f6": "UselessEvent(address,bytes,bool)", "20b0554e": "payoutBalance()", +"20b056e7": "tokenSaleWOK(address)", "20b0747f": "start1stRound()", "20b0961c": "pE(uint256,uint256,uint256,uint256)", "20b0eafb": "PoWH4D()", "20b0fe2c": "setGlobalParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint32)", +"20b15188": "setDelayMultiplier(address,address,uint256,uint256)", "20b1b0ab": "getStuckCoin(address,uint256)", "20b1d054": "TAAS_VAULT()", +"20b21fd4": "celebrities(uint256)", +"20b22068": "preSaleMode()", +"20b268f0": "shippings(uint256)", "20b27291": "setFinalized(bool)", "20b28ade": "getIPFSHash()", "20b2af52": "Author()", +"20b2c66f": "exitpro(uint256,address)", +"20b2c857": "swapStablecoin(uint256,uint256,uint256)", "20b2d97b": "LiquidDemocracyRules(address,address[],uint256)", +"20b373a2": "snapshotMessageHash()", +"20b3ba85": "bogdavault()", "20b3c9c9": "InfinixSupply()", +"20b3e1e2": "Passed(address,address)", "20b43094": "mulUInt(uint256,uint256)", "20b431aa": "dividendDivisor()", +"20b433d2": "setSettings(uint256,address,bool,uint256)", "20b44b29": "lockTransfer(bool)", "20b4577e": "numBonuses()", "20b4fc29": "setBbAddress(string)", "20b519bb": "setBarrierAsOpen(bool)", +"20b57614": "airdropped(address)", +"20b5ee6c": "myRefundAmount()", "20b652ba": "chainedFunctions()", +"20b69898": "LOVE()", +"20b6d5bc": "grantTokensTo(address,address,uint256)", "20b748f4": "REGULAR_TYPE3()", "20b7ceb8": "R2Xtoken()", +"20b88e82": "supportsFallback(address)", +"20b8c84c": "executeShortSqueeze(uint256)", +"20b8ea01": "NotEnoughPonzi(address,uint256,uint256,uint256)", +"20b90da9": "update(int24,int24,int128,uint256,uint256,uint160,int56,uint32,bool,uint128)", +"20b92bf6": "calcPrice(uint256)", +"20b9588c": "myRewards(address)", +"20b962d6": "rewardBreakingPoint()", +"20ba5698": "unstakingFee()", "20ba5b60": "insert(bytes,bytes)", "20bacfbd": "addDoc(string)", "20bb0ef6": "originalHash(uint256)", @@ -18692,30 +34153,53 @@ "20bc4425": "getHost()", "20bcbee5": "EarlyTokenSale(address,address)", "20bd0475": "resetLotteryBalance()", +"20bd06d8": "setBaseDoomFee(uint256)", "20bd46b7": "drawTertiaryAWinners(uint256)", +"20bea52d": "defaultMilageCap()", +"20bec12c": "setPool(address,bool)", +"20bed055": "winnerinfo()", +"20bed572": "approveSender(address,uint32)", "20bf0c52": "Derived(uint256)", "20bf2f47": "_setAddresses(address,address,address)", +"20bf5c92": "assetLockedOf(address,address)", "20bf92ca": "oldSeeleToken()", +"20bf9620": "getPersonalStakes(address)", "20bfa95c": "bookAndCalcRemainingPremium()", "20bfde8b": "s24(bytes1)", "20bfec70": "WatchFees()", +"20c0711d": "contrib_arbits_min()", "20c0b493": "getWarriorChestPrice()", "20c12f16": "penalizeInactiveJuries(address[],uint256[])", +"20c13b0b": "isValidSignature(bytes,bytes)", "20c21ba5": "_setTypeValue3(uint256)", "20c257f5": "_adjustReserve(uint256)", +"20c26308": "EManualMinting(address,uint256,uint256)", +"20c26cac": "ticketIncome()", "20c28b85": "schelling(address)", +"20c2b7e5": "lockETHGenerateDebtProvideLiquidityStake(address,address,address,address,address,address,uint256,uint256,uint256,uint256[2])", "20c2d5e4": "withdrawAffiliatePot(address)", "20c2f40b": "doCalculate(uint256,bytes32)", +"20c326dd": "tokensForPublicSale()", +"20c339b5": "approve_588(address,uint256)", "20c381af": "cityPoolTotal()", +"20c38e13": "getMinTokenForfusion()", +"20c3a8db": "mineBalanceArry(uint256)", "20c3be47": "_createZombie(string,uint256)", "20c427b0": "sumBalance()", +"20c462fe": "acceptAuthorityAddress()", +"20c4acbf": "exportCdpPositionCheck(uint256)", +"20c5210b": "motosMap(uint256)", "20c5429b": "revoke(uint256)", "20c5478f": "RtBCoin()", "20c55a8a": "AirDropAFTK5May()", +"20c55b9d": "BORROW_INTEREST_PERCENT_SCALED()", "20c58794": "PHN()", "20c5b497": "recoverAddressFromBalanceProof(bytes32,bytes32,uint256,bytes32,bytes)", "20c5e29a": "increaseDailyTransactionVolumeSending(uint256)", +"20c63800": "heroIdToHealth(uint256)", +"20c67af4": "LogAuditQueueIsEmpty()", "20c726b4": "view_product(uint256)", +"20c78e20": "claimPauser(address)", "20c8580f": "getBalanceEthContract()", "20c8651b": "makeFee()", "20c90167": "distributeCDD(address[],uint256,uint256)", @@ -18724,145 +34208,284 @@ "20c9f377": "OneUpToken(address)", "20ca0418": "getEscrowById(uint256)", "20ca292e": "AUFBToken()", +"20ca3c7f": "uniswapRouterAddress()", +"20cab5a8": "EmerygencyFreezed(bool)", "20cad613": "isVersionLogic(address,bytes32)", "20caea39": "surprisePanda()", "20cb27fb": "requireWhitelistingBeforeDeposit()", "20cb7bce": "takeFee(address,address,uint256)", +"20cbf72c": "getAvailableKncBalanceTwei()", "20cc6889": "getAvatarByNickname(string)", "20cc7b4e": "changeToken(address,address)", +"20cce823": "event_consul(uint256,bytes32)", +"20ccef3e": "bidPoolMakerWithdraw(uint32)", +"20cd08fe": "startTransaction()", +"20cd1a83": "tokensSold3()", "20cd2141": "advisorLockUp_address()", "20cd3972": "grab(address,address,address,address,uint256)", +"20cd6ba1": "currentNotariesRequired()", +"20cd8a97": "stakeDcash(uint256)", "20ce4c66": "getInteractive()", +"20ce8389": "setRebaseLag(uint256)", "20ceb1bb": "SetCoinManager(address)", "20ceb536": "grantToSetUnpausedWallet(address,bool)", +"20cebf49": "totalDollarPoints()", +"20cf07b5": "sold(int8)", "20cf3e1f": "maintenance_mode()", +"20cfb8b2": "containsNumber(uint256)", "20d00018": "jackpotTime()", +"20d00fa3": "yu(uint256,uint256)", "20d01a7f": "ContestClosed(uint256,address[],address[])", +"20d06ff9": "getAddress(bytes32,address)", +"20d0a718": "godTimer()", "20d0c13c": "getStatusModerator(address)", "20d19181": "crowdsaleEndedBlock()", +"20d26a63": "submitStakingRewardsSetRewardsDistributionTx(address,address)", +"20d29efe": "Released()", +"20d30e27": "allowedFreeExchanges(address)", +"20d37f4a": "manageBurnableAddrs(address[],bool)", "20d3a0b4": "unlockPeriod()", +"20d3ab9a": "FactoryAddedContract(address)", "20d3fc20": "totalSeedStage()", +"20d4dc98": "previousAscensionEth()", +"20d52c2b": "getUsedGas(address,bytes)", "20d615c2": "testControlTransferDisableNotEnabled()", +"20d65771": "minted_supply_token(uint256,uint256)", +"20d6bac8": "DepositEther(address,uint256,uint256)", +"20d6c580": "skimToken(address)", +"20d6d292": "getCarByOwnerAndIndex(address,uint256)", "20d71dad": "_repopTransaction(address,uint256,uint256)", "20d76113": "admin_tokenBurn(uint256)", "20d786b5": "withdrawalCounter()", "20d7d367": "allowRegistryUpdate()", "20d7d860": "ahmadToken(uint256)", +"20d7d8fa": "setCardName(uint256,string)", +"20d826b4": "getTakePositionBalance(address)", +"20d82f35": "getDoublex()", "20d8741f": "Feed()", +"20d8c7fa": "loanAvailable()", "20d8dad0": "checkWhitelisted(address)", +"20d9145c": "timelockBalance()", "20d95f90": "removeInt256(bytes32)", +"20d96e46": "setStakingEpochStartBlock(uint256)", "20d9822e": "setAnyoneCanCall(address,string,bool)", "20d9a9e2": "getChallengeType(uint64,uint256)", +"20d9b956": "updateFamedStarContractAddress(address)", "20db0c7e": "B21Token(address,address,address,address,address)", "20db31d6": "totalFortunes()", "20db91e2": "createPartner(address,uint256,uint256,uint256)", +"20dbc77f": "getAuthorizedUsers(address)", +"20dbd06b": "scoreAmtEq()", +"20dc2760": "titan()", +"20dc27c2": "convert(address,address,address,uint256)", "20dc3d06": "bpLockUp(address)", "20dc407a": "creditOwner()", "20dc4677": "minPublicContribAmount()", +"20dc6f1e": "numerototaldeparticipantes()", +"20dc7db4": "hxyfLpFrozenBalances(address)", +"20dcbf79": "denominateTo()", "20dcce99": "PRE_CROWDSALE_CAP()", +"20dcd90b": "deposit(uint32,address,uint256)", "20dce978": "setExchanger(address,address)", "20dd60f5": "setEnvelopeType(uint256,uint256[2])", "20ddf1de": "editEpisode(uint256,string,string,uint32)", +"20de3145": "oldEthrimSync(uint256)", "20df7f35": "DATE_TOKENS_UNLOCKED()", "20dfcd27": "purchaseCountry(uint256)", +"20dfd043": "setMultiplierSToken(uint256,uint256,bool)", "20dffb08": "testCancelSellOrder()", +"20e0319b": "exchangeFrozenTransfer(uint8,address,address,uint256)", +"20e03630": "subscriber()", "20e07e7f": "changeCardCost(uint256)", "20e0dc9f": "RTCoin(string,string,uint8)", +"20e0e515": "exchange_underlying(int128,int128,address,uint256)", "20e1063e": "toekensForBTCandBonus()", "20e12a43": "createRound(bytes32,bytes32)", +"20e14836": "computeWinPayout(uint256)", +"20e190a4": "createTokenTransferSet(uint256[])", +"20e1c195": "currentWolfingsCount()", "20e25965": "timestampRelease()", +"20e26469": "mySizeInCM()", "20e33b13": "GoodBit()", +"20e362c1": "bonusRewardFinishTime()", +"20e3984d": "log(address,uint256,uint256,address)", "20e3dbd4": "setConfig(address)", +"20e4506f": "setApprovedMinter(address,uint256,bool)", +"20e4fcfa": "approve_358(address,uint256)", "20e537c7": "isTransactionAlreadySettled(address,bytes32)", +"20e5530b": "tetheredReward_LP(uint256)", "20e561f3": "BecomePharaoh(uint256)", "20e57371": "ownerVault()", "20e59116": "startChampionGame()", +"20e5f7a6": "tokenHandlerLength()", "20e62bbc": "StreamityEscrow()", "20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", "20e65a42": "stakeForAirdrop(address,uint256,bytes)", "20e6a2cb": "getStrField1()", "20e6e921": "transfer(address,uint8)", +"20e72ac9": "ethTax(uint256)", "20e76d31": "_solveGame(uint256,uint256,uint256)", +"20e785ec": "setPlatformCoefficient(uint8)", +"20e7caa3": "setFixedArrayNonPayable(uint256,uint256)", +"20e8531c": "setTmvFee(uint256)", "20e87093": "getDSTSymbolBytes()", "20e89790": "POWR()", +"20e8c565": "deposit(address,address,uint256,uint256)", +"20e8e826": "getRedeemPrice(address,address)", +"20e9194a": "approve_368(address,uint256)", +"20e9678f": "__getFeeManager(address)", "20e979b1": "assignBank(address)", "20e98bf4": "setNick(string)", "20e9aac3": "playerTimestamp(address)", +"20e9daf1": "limits(uint256)", +"20ea0782": "getDepHolder(uint256)", "20ea2533": "authorizePayment(string,bytes32,address,uint256,uint256)", "20ea31f8": "giveTo(uint256,address)", +"20ea4e26": "sendBond()", +"20ea662e": "data(uint32,uint16)", "20ea8d86": "revokeConfirmation(uint256)", +"20ead6a9": "bid(uint8,address,uint256)", +"20eafa7b": "escrowMigrationPending(address)", +"20eb1342": "withdrawVatBalance(uint256)", "20eb2a87": "setContract(address,address,address,address,address)", +"20eb640c": "unstakeToken()", "20eb6dec": "frozenControl(address,uint256,uint256)", "20eba3f2": "gamesLength()", "20ec0f01": "lastBlock_v12Hash_uint256()", "20ec75c2": "searchStartIndex()", +"20ec9e16": "set_modified_wrxp_address(address)", +"20ed0275": "setRequesterPermissions(address,bool,uint32)", "20ed1a52": "badge(address,address,uint8)", "20ed9451": "set_active_contract()", "20edae5a": "createChallenge(uint256,string,uint256)", +"20edcdb8": "setMinInitialMargin(uint256)", "20ee0c94": "setUrl(bytes32)", "20ee5445": "addToPrivileged(address)", "20eea675": "ESOPOffered(address,address,uint32,uint32)", "20eeba1f": "testConstructorUsingNewContract()", "20ef57ed": "bumpCounter(uint256)", +"20efc62a": "LogInfoUpdate(uint256,uint256,uint256)", "20f067a8": "PRETDESupply()", "20f06c9b": "start_LOCKUP(uint256)", "20f06fef": "_createWarrior(uint256,address,uint256)", "20f0751d": "turnOn(address)", +"20f0add3": "mintChild(address,uint256,string,string)", "20f0c28f": "MainContract(string,address,address,string)", "20f0db91": "VerifCert(uint32,bool,bytes,bytes)", +"20f0ef5b": "submitNft(uint256,uint256)", "20f10ae7": "_supportsERC165Interface(address,bytes4)", "20f10fdd": "tokenSupplyLimit()", +"20f11f02": "setRewardPerDollar(uint256)", +"20f14e79": "tokensUnlockable(address,string)", +"20f15364": "openLoft(uint8[5])", "20f1895c": "fechVoteSumNumForCandidate(address)", +"20f1b9a2": "BallotCreatedWithID(uint256)", "20f1d85b": "removeApprovedAddress(address)", +"20f1f808": "DAFIPlatformContract()", +"20f2bf00": "accessControl(bytes32,address)", +"20f2f345": "initialize(uint64,uint64)", +"20f2f7da": "addressReso()", "20f317fb": "districtContractAddress()", "20f320d0": "setBonusExtra(address,uint256)", +"20f33d59": "alpacaPerBlock()", "20f361b3": "optionExercise(uint256)", "20f3d413": "getTargetBlockNumber()", "20f4014a": "ApolTestToken()", "20f4914a": "changeMyString(string)", +"20f49ddb": "current(uint32)", "20f4d7aa": "redeemPayout()", +"20f511c5": "starPower(uint256)", +"20f51707": "Dai()", "20f541fa": "purchaseAsQualifiedPartner()", +"20f56120": "allProducts(string)", "20f5a0b9": "readTeamByIndex(uint256)", "20f5afdf": "OwnershipTransferInitiated(address)", +"20f5e73a": "depositeFundETH()", "20f5e8dd": "resetBalance()", +"20f6469c": "setNumberTwo(uint256)", "20f65816": "extractToken(address,address)", +"20f6d07c": "totalAssetBorrow()", +"20f6e2ea": "LGE_INITIAL_DEPOSIT_CAP()", +"20f6f76f": "minLeverage()", +"20f6fdc2": "deleteTokens(uint256[])", "20f71018": "Aqo()", "20f727e2": "Caller(address)", "20f756bd": "getArmySoldiersCount(uint256)", "20f801d4": "payout(address,address,uint256)", +"20f81d8f": "_computeAddress(bytes32,address)", +"20f8257b": "createTokens(uint16[])", "20f86e9f": "_isBonusAvailable()", +"20f88afa": "setTurns(uint256)", +"20f8d74c": "auction__end()", +"20f9196f": "canMatchMarketContractOrdersFrom(address)", +"20f97319": "calcSoldierSurvivalBlocks(uint256,uint256)", +"20f9871c": "setBonusConditions(uint256,uint256,uint256,uint256,uint256)", +"20f99c0a": "nominee()", +"20f9ed1f": "teamDistributed()", +"20fa3d21": "CloserApproval(address,address,bool)", +"20fa42b1": "_setVenusRate(uint256)", "20fa6fd9": "ethSendSameValue(address[],uint256)", "20fa70b0": "getAvailableWithdrawableCount(address,uint256)", +"20faae8e": "createBallot(string,string[],uint256)", "20fb2bc2": "AllowClaimBTC(bool)", "20fb36af": "Test8J()", "20fb9bad": "LogSortedOffer(uint256)", "20fc4881": "getCheckpoint(uint256)", "20fcf2e5": "Castor()", "20fd8861": "customerWallet()", +"20fe1202": "Purchased(address,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"20fe416e": "getAssetROI(address)", "20fea5cf": "getUserTaskAtIndex(uint256)", +"20fee44b": "exchangeB()", "20fee8f1": "_timePer()", +"20ff430b": "rescue(address,address,uint256)", +"20ff473f": "addAllowedDeployer(address)", +"20ff99f2": "m_owners(uint256)", +"20ffd56d": "getCreationBlock()", +"2100675f": "privateSaleLockedTokens()", +"2100a5d9": "userAddresses(uint32)", "2100bf7a": "lolaToken()", "21015328": "getLLV_edit_28()", +"2101a6ad": "isProjectCanceled(uint64)", +"2101e7b0": "readCard(address)", +"21021bf3": "transfermultiSigGovernanceship(address)", "21027354": "buyerHistory(address,uint256,uint256)", +"210290df": "transferSingleValue(address[],uint256,string)", "21029f47": "chickenHunt()", "2102df31": "_totalDonations()", +"2103cdfb": "AllowanceUsed(address,address,uint256)", +"21043b5a": "approve_336(address,uint256)", +"210456ca": "getHeroLoyalty(uint256)", "2104c2bb": "fundTeamInstant()", "2104cdd2": "totalNumberOfScammers()", "2104d832": "AddHelenium(address,uint256)", "2104ebf1": "executeWithdraw(uint256)", "2104fa0b": "skinIdToOwner(uint256)", +"21058d2a": "user_info(address)", "21059e63": "createProposalAndPublish(bytes32,string)", +"2105ab65": "getProvenanceOwner(bytes32)", "2105c049": "setCSO(address)", +"21065cdf": "init(address[6])", "21065f10": "mintInternal(address,address,uint256)", "21067b3f": "startRoundWithFirstBet(uint256,uint256,uint256,bytes32)", +"21073661": "autoPoolPercent(uint256)", "210790c8": "signWholeConfiguration()", "2107a796": "createGame(string,string,uint256,uint256,string,string,string,string,bool,string)", +"2107cd4c": "lastTradingFeeDistributionSwap()", "2108292e": "mint_(address,uint256)", +"210835ae": "changeConfig(address)", "210846ae": "is_kyced(address)", +"21087c3d": "maxdepositfee()", +"2108f12d": "pendingButter(uint256,address)", "21090b31": "_decrementInventory(uint256,uint256)", "210970c5": "update_count(uint256)", +"21097f28": "changePreSalePriceIfToHigh(uint256)", "2109b408": "bitsMask()", "2109cf80": "depositEth(address,uint256,bytes)", +"2109dc88": "settlePayment(address)", +"210a0549": "WantToRakePath(uint256)", +"210a1e24": "allTimeSell(address)", +"210a403c": "getTotalDistributionPayouts()", "210a6eec": "sendMultipleAddress(address[],uint256[])", "210a854b": "preIcoTokenHoldersAddresses(uint256)", "210a8d0e": "changeGranularity(uint256)", @@ -18875,9 +34498,15 @@ "210c1f29": "closeBoard(uint256)", "210c5a56": "_removeMinter(address)", "210c5ff6": "getBlockNumber(bytes)", +"210ca7be": "decrypt(bytes)", +"210cb65d": "randomizerDAIContract2()", +"210cb8c3": "sendAmount(address)", "210d14b8": "burnPREICOTokens()", "210d2bba": "PRICE_MULTIPLIER_PREICO2()", +"210d66f8": "authorizations(uint256)", +"210dc2b6": "setRewardAddressTeam1(address)", "210dee2f": "setMigrateOut(bool)", +"210e200a": "walletTokenBalance(address)", "210e2484": "icoDiscountPercentageLevel3()", "210e734c": "isBoxItemId(uint256)", "210e9a34": "getPendingReferals(address)", @@ -18894,77 +34523,136 @@ "2111871c": "endPreICOStage2()", "2111c0f9": "freezeDeliverMuti(address[],uint256,uint256,uint256,uint256)", "2111d1e2": "OnUpdateMessage()", +"211213f0": "setSwap2YFII(address[])", +"21124758": "newHighest()", "21129137": "saleover()", "2112e7fe": "getListGames()", "2113342d": "totalDividendPoints()", "2113aab4": "BTL_IMMORTAL()", "21141c38": "updateInvestorFunds(uint256,uint256,address,uint128)", "21141de0": "ReturnEthToEthero()", +"21146b89": "startDividendsPayments()", +"21148824": "testSumElementsFunction()", "2114fd0f": "AxpireToken()", +"211528c7": "setUnLockingStartDate(uint256)", "2115d328": "getSemiResult(uint256)", +"2115e303": "exercisableDeposits()", +"2115f11f": "externalFunctionCall(address,bytes)", "2115fd55": "RecievedEther(address,uint256)", "21166476": "ARC()", +"21166be6": "token_details(address,uint256)", "2116b530": "ChangeOwner2(address)", +"21172e5d": "synStakingProxy()", +"2117359c": "secondPhaseSaleRate()", +"2117502a": "setExchange1(address)", +"21178468": "nameVerify(string)", "21180138": "isCA(address,address)", "21180722": "init(int256)", +"211831f6": "supportedTokenLength()", +"21183e8d": "d4(uint256)", "21187172": "Gate(address)", "21188011": "maxIssuedWithAmountBasedBonus()", +"2118c02c": "_getMetadataValueForDPRequest(uint256,uint256)", +"2118c75c": "work(uint256,address,uint256,uint256,bytes)", +"2119158f": "nextOvernightFeeTime(address)", "2119249f": "getNumTokens(uint256)", "21194bc0": "devCutPercentage()", +"21195415": "Revoke(bytes32,uint256,address,uint256)", +"21197a23": "queryWithdraw(uint256,uint256)", +"2119a62a": "receiptETH(address,uint256)", "211a048a": "getFastestSpaceship()", "211a04db": "totalToDistribute()", "211a0f39": "ERC20TokenComplete(uint256)", "211a1ba8": "changeTokenController()", +"211ae46c": "adminClaimProfit(address[],uint256,address[])", +"211b272f": "PynthsByAddress(address)", "211b2758": "changeBlockedTimeForInvestedTokens(uint256)", "211b4f54": "startUpdate(uint256)", "211b72a3": "sub1(uint256,uint256)", +"211bea64": "OnBuy(address,uint32,uint32,uint8[5])", +"211cc1d2": "ReconCash()", "211db50d": "allowNewStakes()", +"211dc32d": "earned(address,address)", "211e28b6": "setLocked(bool)", "211ed6c1": "freeTransfer()", +"211efd49": "setHasTranscoderRewardFeePool(bool)", "211f0b93": "getCreateReputationTokenUniverse()", "211f0ef9": "SaleOfChametz()", "211f390e": "ECO_SYSTEM_HOLDER()", +"211f4b7b": "_MoapRebasePercent()", +"211f951d": "quickAuditEthCredited(uint256)", +"211fe5f4": "ROBXrtSaleROBX(uint256,uint256,uint256,uint256,uint256)", "211feec5": "executeEtherDeltaSell(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", "211ff90c": "SpiceControlled(address)", +"21202e55": "updateVariable(address,uint256,uint256)", "2120e527": "stakingBonus(uint256,uint256,uint256)", +"212124dc": "setIncentivizedMaxTradeSize(uint256)", "21217668": "getDrawBlockNumberByWinner(uint256)", "2121dc75": "isTransferable()", +"2121edff": "numberOfInputs()", "212257de": "changeCap(uint256,uint256,uint256)", +"212266c6": "startPresale(uint256,uint256,uint256,uint256)", +"2122e036": "fundFactoryContract()", "2123015e": "test_insert_findWithHintNextIncreased()", +"212329f3": "currentPoolRewards(uint256,uint256[],uint256,uint256)", "2123476b": "startConstitutionPoll(address)", "21235083": "cancelSubscription(uint256)", +"2123cb78": "updateTokenRank(address,uint256)", +"21241dfe": "CLAIM_PERIOD()", "21241e44": "addressOfTokenUsedAsReward3()", "21242279": "MintToKen(address,uint256)", +"2124d529": "createMember(address)", "2125b65b": "transfer(uint32,address,uint224)", "2126a923": "reverse(address,uint256)", +"2126fcb2": "addressInfo(address)", "2127c30a": "setBlockHash(bytes32)", "2127fe90": "addOnStage(address,uint256)", +"21285643": "minStakings(address)", "21288400": "lastPurchaseTick()", "21289506": "MichaelCoin()", "2128a580": "total_claim_codes()", "212954dc": "setAddBonus(uint256,uint256)", +"21299631": "externalCallWithPublic()", "2129e25a": "finalBalance()", +"212a1247": "tamount()", "212a6fd3": "CloseEntry()", "212a850c": "showMyNumber()", "212ac4b5": "UnicornChain()", "212ac7d1": "mintNewSpinner(uint256,uint256,uint256)", +"212af18d": "getPoolNum()", +"212bde89": "getMemberRedemptions(address)", "212bf316": "setCaps(uint256,uint256)", +"212c01fa": "air_drop_switch()", "212c3fce": "returnTokensToAirdropper(address)", "212c5fea": "close(bool)", +"212c702c": "storeValidity(bool)", +"212c74b7": "_addSashimiMarkets(address[])", "212c8157": "disallowTransfers()", +"212d2d3b": "customMaxClaimedBy(address)", "212d6723": "payRoyalty()", +"212d86cd": "getStagePaymentAmount(uint256,uint256)", +"212dbdbe": "revertStake(bytes32)", "212e2596": "sellOrderTotal()", "212ebbd6": "addTokenLock(address,uint256,uint256)", +"212ebf18": "getEthReward()", +"212efe2a": "storeX(uint8[],uint256,uint256,uint256)", "212f6066": "enableInvestment(address[])", +"212ff53a": "SetUnlceRateAndFees(address,uint256,uint256)", +"213060e2": "_decode_sfixed32(uint256,bytes)", +"21307bac": "addFee(uint256)", "21309ae3": "setTimeBonuses(uint256[],uint256[])", "2131c68c": "daoAddress()", +"2131e102": "addressExist(address)", "2132626f": "_removeByIndex(uint256)", "21326768": "finishGame(bytes32)", "213294cd": "crowdsaleHasEnded()", "2132ce0a": "BASE_AMO_TO_ETH_RATE()", "2132eb23": "TreasurerToken()", "21335ad5": "getDepositAggregate(address,uint256)", +"21336fb8": "TokensReceivedWithApproval(uint256,bytes)", "21338d1b": "rewardsWithdrawalProposed()", +"21339bee": "_supplyNotForBurn()", +"2133bbcf": "CONTRACT_WATER_ERC20_TOKEN()", "2133ddeb": "settleBetV1(uint256,uint8)", "2133e3b9": "calculatePercentage(uint256,uint256)", "213408da": "sendCreatorReward()", @@ -18972,48 +34660,86 @@ "21346edd": "savedBalanceToken()", "2134927e": "setAuctionParms(uint256,uint256,uint256)", "21355869": "getAuctionTimeLimits(bytes32)", +"213565c9": "ctr2(address,address,address)", "2135810e": "curRequestId()", "2135d2e4": "lasttokencount()", +"2135f56f": "testCalculateNeededCollateralLong()", +"213607ab": "votingPoolId()", "213671bf": "mainSale_TokenCap()", "213681cd": "getRecord(bytes32)", +"2136ebce": "MilestoneAccepted(uint64)", +"2137037a": "farmAddresses(address)", "21370942": "updateEthPrice(uint256)", "21376d07": "scheduledPayout()", +"2137df1c": "airdropOne(address,uint256)", +"213832d4": "getPiggyPerBlock(uint256)", +"21383ab7": "protectFlask(address,uint256,uint256)", +"213914b5": "initialize(address[],uint256[],address,address,address,uint256)", +"213980e8": "flashPayback(address,uint256,uint256,uint256)", "2139c2aa": "setwinnerLimit(uint8)", "213a2622": "offerAsSacrificeFromVault()", +"213a3d8c": "calculateAmtMinusFee(uint256,uint256,uint256,uint256,uint256)", +"213a6bcc": "JoinRet(bool,uint256,address)", "213a72a7": "LightofGalaxy()", "213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", "213ad495": "TimeWeekTwo()", "213ae9ec": "newGame(uint256,bytes8,uint256,uint256,string)", "213aedb8": "getAllGames(bool,uint256,uint256)", +"213b2ff3": "addInterest(address,uint256)", +"213b357d": "checkApprove(uint8)", "213b9eb8": "setAddr(string,address)", +"213c0b9b": "technology(uint256)", "213c3375": "callCustomTokenFallback(address,address,uint256,string,bytes)", +"213c501a": "weightLimits()", +"213c9f87": "func_00001E67(uint256,uint256,uint256,uint256)", +"213cae63": "getTokensIn()", +"213caf4d": "AllowSales(bool)", "213d6771": "editionData(uint256)", "213d8f4a": "setCurrentRewardNum(uint256)", "213db226": "move(address,address,uint8,uint256)", +"213e0538": "_virtual_supply()", "213e609f": "getTknOfferAmount(uint256)", +"213e7013": "_transferedTokens()", "213e84d3": "maxIssueTokenLimit()", "213ea6bb": "donationReceiver()", +"213ecbba": "feesPercentage()", +"213ef7f7": "tokenBUSD()", "213f44ab": "getUserAddressList()", "213f9ad4": "generateWinners(uint256)", +"213fbf1b": "approveApplication(uint256)", "213fe044": "getInstanceAddress(address)", "213fe2b7": "getContracts(address)", +"214039ab": "stakingPoolPending()", +"2140ed82": "myfunction(uint256)", +"2140fb40": "getUserLock(address)", +"21417350": "etherBalances(uint8)", +"21417c6c": "numberOfVerisonsOfDerivativeFactory()", "21420a3d": "_depositTokens(address,uint256)", "21424e7d": "ETHcollected()", +"21425ee0": "depositERC20(address,uint256,uint256)", "2142adc9": "changeMargin(uint256)", +"21432e3d": "TapProposalAdded(uint256,uint256,uint256)", "21435e07": "setTokensWallet(address)", "2143da91": "GameOfThrones()", +"2143e545": "set(uint256,uint256,uint16,uint256,bool)", "214405fc": "addToWhitelist(address,uint256)", +"214414d5": "gem(bytes32,address)", "21446cfe": "unitDefense(uint256)", "2145465a": "SOUNDBOY()", "2145a455": "getRebackRate()", "2145e36c": "testBitSetFailIndexOOB()", "21462191": "bid3(address,uint8[],uint8[])", "21464e71": "inOneYear()", +"21471dbe": "setBuffet(address)", "2147783f": "smitToken()", "21479265": "addToBlackList(address,address)", +"2147dc04": "continuousComplete()", +"214809f9": "moongain()", "21484786": "notificationFee()", "21486833": "maxRewardUnitsAvailable()", +"2148ddc5": "airDropValues(address,address[],uint256[])", "21491e82": "secondCurrentAmount()", +"21492ae5": "goLive_()", "214958ba": "BLOCKCURRICO()", "214962d1": "identifierHash(string)", "21499737": "setIco2Tokens(uint256)", @@ -19021,22 +34747,37 @@ "214ab314": "searchDiplomaByID(uint256)", "214af6b9": "acceptTokensFromUsers(address,uint256)", "214b146f": "storeName(uint256,string)", +"214b5ebb": "TokenSold(uint256,address,uint256,uint256,address)", "214bb60f": "finalised()", "214c2a4b": "getServiceURI(address)", +"214c4957": "registrationExt(address,address)", +"214c6231": "transferonUniswap1(uint256,address,address)", +"214c828e": "tokenInPool(address,address)", "214c9d50": "WritedrawStatus()", +"214cd4cc": "getViaDerived()", "214cdb80": "registerInterface(bytes4)", +"214d0fbe": "callG22(address)", +"214d4a67": "ClaimedReward(uint256,uint256,uint256,uint256,uint256,address)", "214dda84": "regularPhase()", +"214e012b": "FreezeEvent(address,bool)", +"214e5171": "stakeTokensThreeMonth(uint256)", "214e52ca": "transferAllowed(address,address)", +"214e563c": "totalCars()", "214e5f3a": "setForwardUpdateFeesTo(address)", "214e8a47": "getSingleLocker(address)", +"214f3e47": "maxPoolReward()", "214f71fe": "tokenFulfillmentDeposit(address[2],uint256,uint256[7],uint8,bytes32[2])", "2150097f": "timerInfo()", +"21506fff": "cancelReserveAuction(uint256)", +"2150c0ea": "withdrawETHInCaseOfNotLaunching()", "2150c518": "getKeys()", "2150c75d": "newItem(uint256,string,uint256)", "2150cd56": "setRateAdmin(address)", "2151f9a0": "TCT(string)", "21520c5f": "calculatePayout(uint8,bool,uint256)", "215213dd": "updateTierTokens(uint256,uint256,uint256)", +"21526180": "polyLockProxy()", +"21527090": "registerCustomer(address,bytes32,uint256)", "2152b483": "OWN_SmartContract_Allowed(address,bool)", "2152c649": "LOVEYOUToken()", "2152ebac": "getContributionAmount(uint256)", @@ -19046,62 +34787,107 @@ "2153bf23": "x3Token()", "21542702": "MakeBet(address,uint256)", "215458b0": "salvageNotAllowedTokensSentToContract(address,uint256)", +"2154bc44": "whitelistedTokens(uint256)", "2154dc39": "maxMintable()", +"21553f58": "addLiquidityToUniswapLEVELSxWETHPair()", "21554dca": "GetCurrentBonusStageTokenBalance()", +"21555bf2": "_stakerTokenRewards(address)", "2155af2f": "execute(address,uint256,bytes1[])", +"21562bd9": "from_usdt_to_token(uint256,address)", +"21563ebd": "addParticipants(uint8,address[],uint256[])", +"215677c2": "tenWeth()", "2156a96c": "getTotalSales()", +"21572670": "managersAdd(address[])", "2157320e": "votedAddress()", "21575889": "distributionSupply()", "2157ab24": "GetBankerRound(uint8)", +"2157c0e7": "setRewardFactor(uint256)", +"21583468": "kyberFeeHandlers(uint256)", "21592a2b": "YaoMaoCoin(uint256,string,uint8,string)", "21594110": "createProductionUnit1Beta()", "215a3bcc": "setStatus(bytes32)", "215a4862": "eligibleForBonus(uint256,address)", +"215a58c2": "withdrawingFinished()", "215a6ce4": "createBet(uint64,uint256)", +"215a9925": "setupContracts()", "215ac4be": "fillContract()", "215ae66d": "mintForWebsites(address[],uint256[])", "215afc5f": "totalTokenDistribution()", +"215b0dc6": "loanID()", "215b3e32": "fromBytes(bytes)", "215b5411": "purchaseCallbackOnAccept(uint256,address[],uint256[])", "215bad32": "TPTTransfer()", "215bd303": "createWorkerPool(string,uint256,uint256,uint256,address)", +"215be423": "LogSelfDestruct(address,uint256)", "215bf604": "addFreelancerFeedback(address,uint256,address,string,uint8)", +"215c94ab": "UpdatedUserDetails(address,uint256,uint256,uint256,bool)", "215cb8df": "createIlliquidToken(address,uint256)", "215cc031": "getAvatarByAddress(address)", +"215cd209": "get_liquid()", +"215d4b11": "getPhaseName()", "215d6b61": "getTierOfMember(address)", "215d902c": "extractString(bytes,uint8,uint256)", "215de48a": "getParentCount(bytes32)", "215de791": "getTankName(uint32)", "215e25ea": "upgradeReferrer()", +"215f04e1": "f(bytes4)", +"215f0f98": "GUSD_DECIMALS()", "215f1cd1": "oraclizeSetWinner(uint256,uint256)", +"215f3f04": "lastDividendWithdrawn(address)", "215f865e": "resetDropAddress(address)", +"215f8af1": "getShortSupplies()", "215fce93": "changeExchangeRate(uint256)", +"215feffb": "voodoo()", +"21600561": "balancerPoolUsdTokensSum(address)", +"21603f43": "order(uint256)", "216093aa": "getIsThirdPhase()", "21614f62": "randomSkinAppearance()", +"2161bbca": "currentIntervalSec()", "2161d0e9": "tokensToP3D_(uint256)", "21627dad": "getCart()", +"21632255": "twa()", +"216340c3": "amountPaid()", +"216355ec": "redeemFunds()", +"2163b483": "matchAgreement()", "2163d49a": "lockedCore()", "2163ef1a": "GangnamTokene(address,address)", +"21646dc9": "isMapAddrInGateways(address)", +"21647596": "changeicePerBlock(uint256)", +"21647ae8": "liquidityStartEpoch()", "216481d6": "icocontract()", "21650145": "Revoked(bool)", +"21652b8d": "setLevel(uint8,uint96,uint96)", +"2165314b": "IMP05()", +"21658658": "registrationPrice()", +"2165b361": "withdrawVoteAirdrop(string)", "2165e1aa": "withdrawRemainingBalanceForManualRecovery()", "2165fef9": "allocateStrategicTokens()", +"2166662c": "estimatedETHforJuice()", +"216666a4": "requestPrice(bytes32,uint256,bytes)", "21667940": "issueTokenAndApprove(uint256,address)", "21670f22": "reward(address,uint256)", "216716af": "ExoMiniumToken(address,address)", +"216756c2": "loan_owed(address)", "21687444": "newDAO(address)", "2168c988": "transferToInternalLedger(uint256,bytes32)", "2168ca06": "numberOfIndex()", "216903f9": "confirmTx(bytes32)", +"216951f0": "coreVaultBit()", "216974cc": "refundNonCompliant(address)", "216986b0": "entradaJugador(uint256)", +"216a3382": "write(uint256,string)", "216a5543": "getAllForSaleStatus()", "216aa0ba": "proposalBlock()", +"216b67da": "allTimeStakedLimit()", "216b8c95": "internalIsApprovedForAll(address,address)", "216be181": "hodls(uint256)", "216c1606": "_claimExistingCard(uint256,address)", +"216c394d": "setPauseUntilBlock(uint256)", +"216cb76d": "freeClaimedUserList(address,address)", +"216cc8c1": "applePerBlocks(uint256)", "216ced43": "setPenaltyDisbursal(address)", "216d93d6": "pricers(uint256)", +"216db3c2": "emergencyCashout()", "216de17a": "priceStage1()", "216e2a97": "totalOrder()", "216e3449": "changeToken(string,string)", @@ -19110,617 +34896,1163 @@ "216ec69b": "getColour()", "216ecfa7": "Tbaol()", "216ef940": "proxyUpgrade(address,address,bytes)", +"216f2fb0": "setSmallTransferFeeWalletReceiver(address)", +"2170e277": "unLockAmout(address,uint256)", +"2170e472": "stakeTime(address)", "2170ebf7": "makerWithdrawEther(uint256)", +"217128f4": "createUser(uint256,uint256)", "2171454a": "bountiesKey(uint256)", "2171526e": "Chewbaka()", "21717ebf": "siringAuction()", +"2171caa4": "tokenLockPercentage()", "2171dc73": "buyXaddr(address,address,uint256,string)", "2172ac5a": "_requestExistsReverse(address,address)", +"2172ff16": "Game(uint256)", "217311ac": "getWords(uint64)", "21733f6a": "sendDv(string)", "2173a10f": "INITIAL_POLL_NONCE()", +"2173cb08": "BonusAmountGet(address)", +"2173d6e9": "firstNumber()", +"2173f5bd": "transferBeneficiaryShip(address[])", "21745c15": "numberOfSales()", "217477f6": "ICO_PERCENTAGE_3()", "2174b88f": "transferBanker(address)", "2174dcec": "ConfigPromoter(uint256)", "21751df9": "BugBountyOne()", "21752974": "compromiseContract()", +"2175d26b": "upperLimitYouOfPriIEO()", +"21760e80": "getDateGLC()", +"21763099": "setgasforcallback(uint256)", +"21763dce": "KYC2(address)", "21765510": "getLockedAvailable(address,string)", "21765d23": "addLockedTime(address,uint256,uint256,uint256)", +"2176d50a": "externalContractAddress()", "217720d7": "getHeldCoin(address,address)", "21774f4b": "CUSTOMER_PERCENTAGE()", +"217751bc": "onKeyCancelHook()", +"21775c92": "toggleMinting(bool)", "2177885d": "isOnAuction(uint40)", "2177a36f": "getCountProof()", "2178139d": "acceptAbstractToken_(uint256)", "21795635": "TOTOAirdrop(address,address)", +"21797378": "withdrawTopUp(uint256)", "217987ad": "delBlackList(address)", +"21799f4b": "OnAllocated(address,uint256)", "2179f0f7": "EtherToken()", +"2179f7e9": "PERCENTAGE_GROUP_3()", +"217a2c7b": "getProtocolFee(address,uint256)", +"217a4b70": "quoteToken()", +"217a8da4": "delRole(address,string)", "217aab68": "_updateCommission(uint256)", +"217ab806": "recipientBurn()", +"217ab9d2": "transfers(address[],address[],uint256[])", +"217ac0de": "frozenAccountTokens(address)", "217ad35a": "minimalEther()", "217af162": "whitelistKyberAddress(address)", +"217b50ec": "ohms()", +"217b726c": "ris3Government()", "217b97e4": "hatchMaxTime()", +"217b9d37": "moveIn(address)", +"217b9d48": "findFreeID()", "217bd046": "computePoolAmount()", +"217c9adb": "undoIgnite(uint256)", "217cab2b": "GetWhitelist(uint256)", +"217d1e93": "changeStorageOracleStatus(address,bool)", +"217d7e37": "Failed(bytes32,bytes32,address,address)", "217d9bbe": "depositExit(uint256,bytes)", +"217db0a4": "walkers(address)", "217db8e8": "toBase(uint256,uint256,bytes8)", +"217e0a49": "_tierWeights(uint256)", +"217e1edd": "contractUpdate(address)", "217f2d23": "CRVToken()", +"217f4774": "remainingPodeTokens()", "217fe6c6": "hasRole(address,string)", +"21802b59": "sendEther(address[],uint256[],string)", +"218065f8": "getDepHoldersLength()", +"21806bf9": "getRemainingLockTime(uint256)", "21815a1a": "updateHolderShareInfo(uint256)", +"21817675": "__ERC2612_init(uint256,string)", +"218188d7": "makeTeamNotJoinable(uint256)", "21819e5c": "computeArtistTxFee(bytes32,uint256)", "2181c11f": "batchNewAuctions(uint128[],uint256[],uint256[])", +"21821bc8": "getUserWithdrawn(address)", +"2182e4ad": "Sell(address,address,address,uint256,uint256,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)", +"21835cc6": "pendingCheroes(uint256,address)", +"2183abd1": "changeDay()", "2183e390": "setTotle(address)", "21842be3": "unlockTransfers()", "218444ab": "Test2()", "21844b08": "drWinChances(uint256)", +"21846771": "mapGamePrizePerBlock(uint256)", "21848580": "lastBlock_a14()", "2184f977": "TRANSITION_WINDOW()", "2184fe2c": "transferTechSupport(address)", "2185072f": "SerpenSegmentCount()", "21853009": "participantRoundRewarded(address,address,uint256)", +"2185340b": "removeReserve(bytes32,uint256)", "21856b36": "interestOwed()", "2185810b": "allowTransfers()", "21858521": "tickets()", +"2185885a": "REIGAI14()", "2185ca52": "BITRUS()", +"2185f39c": "subtractTotal(uint256,address,uint256)", "21860a05": "airdrop(address)", "21861cce": "AUDITED_AND_APPROVED()", +"2186c981": "price1CumulativeLastUNI()", +"2186ff4e": "received(uint256,address,uint256)", +"21873631": "oracleReward()", +"218751b2": "curvePool()", "2187a833": "setGreenToken()", "2187bdca": "getAllETH(address)", +"2187d445": "setTokenForSale(address)", "2187e6a6": "createHolder(string,address,uint256)", +"2188230f": "removeLiquidity(uint256,uint256,address)", "21887c3d": "has(address)", +"21888f51": "getBzbPerBlockForBzbReward()", "21895086": "RL(uint256,string,string,bool)", +"2189ad91": "needWhitelist()", "218a51e8": "UnFrozenTokenEvent(address,uint256)", +"218a5e67": "bidderAmount(address)", "218a7667": "addToBalances(address,uint256)", "218a9640": "setTeamStatus(bool,uint256)", +"218b3150": "complaint()", +"218b39c6": "underlyingToLoanPool(address)", +"218b5382": "MIN_WEIGHT()", "218bc5ec": "createBid(uint256,address,bytes32,bytes32,uint256,uint256)", "218bd577": "enterGame()", "218cd7a1": "POOPOO()", +"218d3fa8": "attack_2_deplete()", "218d5637": "realSupplyWeight()", "218d6ca2": "calcPurchase(uint256,uint256)", "218d984b": "registryProxy()", "218dd3dd": "checkIdentity(bytes32)", +"218e343c": "Configured()", "218e4562": "updateBalanceOf(uint256)", "218e4a15": "getCooldown()", "218e6877": "setDelegate(bool)", "218e767d": "TokenFactory(address,address)", "218eee82": "addAd(uint32,uint32,string,string,uint256)", +"218f8989": "setMaxBCPAvailableForContribution(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)", +"2190dfd0": "rugPull()", "2191207a": "setTAOFactoryAddress(address)", "21914e29": "day2Start()", +"2191666e": "setTaxTierSmallFee(uint256)", +"2191d7c5": "nyanV2LPUnstaked(address,uint256)", "2191f4a9": "storjPrice()", "2191f92a": "isInterestRateModel()", +"21923bde": "getUserLevel(address)", +"219244dd": "stakeHoldPeriod()", +"21924964": "kingsTaxDivisor()", +"21926d87": "safeFlashLoanGrillAndTransfer(uint256,uint256,uint256)", "219285d2": "presaleClosedManually()", "2192b99d": "mintContributors(address[])", "219356bc": "GxConstants()", +"21935aa6": "FUND_OPEN_ISSUES_ROLE()", "21937192": "finishedSTOMinting()", +"21937658": "carAuctionStartPrice(uint256)", "21938610": "set0xExchange(address)", "2193cdba": "send_all()", +"2193d95f": "acquireYieldContract(bytes32)", +"21948612": "FillOrKillFailedError(bytes32,uint256,uint256)", "2194f3a2": "fundsWallet()", +"219523e1": "addRegion(uint32,string,address,address)", "21956036": "SmartRouletteDividend()", "2195845f": "withdrawAltcoinTokens(address)", "21958a50": "AddressSeries(address)", +"2195995c": "removeLiquidityWithPermit(address,address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)", +"2195b53b": "battleToWinner(uint256)", +"2195c542": "maxAmountSell()", +"21961c22": "getWinner2(uint256)", "2196ae0d": "hint(bytes32,string,bytes20)", "2196feac": "createMarketItem(bytes16,bytes16[],bytes16[],uint256[])", "2197021b": "proxyVotingContract()", "21970c0c": "pay_royalty()", "21974a74": "EtherNetworkConfig()", "21978e58": "_removeSale(uint256)", +"2197a9e8": "top3PoolPre()", +"2197afbc": "tmc()", "2197b236": "Goldjunge()", "21981514": "totalUnclaimedBidsAmount()", +"21982328": "getDeposite()", "219862d0": "marketKebabs()", +"2198e5ee": "stakeCanClaim(address,uint256)", "2198e780": "addDollarAmount(address,int160)", +"21991360": "TWAP8Hour(address)", "21998504": "setCompte_7(string)", "2199d5cd": "registerUser(address)", "219a6ead": "MICRO_DOLLARS_PER_BNTY_PRESALE()", "219a6f04": "getFounderMember(uint256)", +"219adc2e": "renounceOwnership(bytes32)", +"219ae672": "cancelVersion(bytes32,bytes32,string)", +"219b378e": "setBunnyChef(address)", +"219b49f8": "REWARD_WORKER()", "219bc76c": "currentRoundInitialized()", +"219c2823": "Emit(uint256)", +"219c34ed": "unsoldInCurrentPeriod()", "219c7ad1": "getwinningaddress10()", "219caaa9": "reclaimChildOwnership(address)", +"219cabf3": "cloudDoRound1(bytes32,bytes32)", +"219cca34": "decodeSimpleSwapData1()", "219d0ece": "transferAdminship2(address)", +"219d7801": "mintTokens(address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"219d810c": "getPormote(uint256)", "219da4ac": "ResumeTokenContract()", "219dabeb": "registerDeposit(address,uint256)", "219dc688": "technicalPercent()", +"219df390": "setParentLev(address)", "219df7ee": "ZTHTKN()", +"219e6073": "getReward2ForDuration()", +"219ecef7": "getCustodian(uint256)", +"219f1080": "TokenUpgraderIsSet(address)", "219f5052": "updatePokeMarketAddress(address)", "219f5b92": "revokeAuthorization(address,address)", "219f72c9": "startICOStage3()", "219fd010": "accredited()", +"21a012ec": "tradeTokenForTokenUsingReservesSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool,uint8)", +"21a0adb6": "withdraw(bytes,bytes32,bytes32,address,address,uint256,uint256)", +"21a11f4e": "eMakeOrder(address,address,uint256,address,uint256)", "21a19b2d": "neverdieSigner()", +"21a25568": "mVestingBalance(address)", "21a2ad3a": "nextSlasher()", "21a2c72d": "BitcoinDublicate()", "21a32e5c": "VanityCrowdsale(uint256,uint256,address)", "21a33743": "DroidEIP20Token(uint256)", "21a33e00": "gasReq()", "21a389cc": "PRE_SALE_3WEEK_BONUS()", +"21a3c818": "lastUserAction(uint256,address)", "21a3fb85": "addValidator(address,bool)", "21a49ec2": "LCoin()", "21a4a5bb": "endDateOfSaleStageLast()", "21a4c6c3": "openMarket(address)", "21a4cdaf": "HDCToken()", "21a4d259": "setMinAuditPriceLowerCap(uint256)", +"21a4e301": "perpetualBondInfosOf(address)", "21a5065e": "returnableTokens(address)", "21a5c1c3": "buyItem2()", "21a5dcfe": "multivestBuy(address,uint256)", +"21a631ee": "voteReceiverVestingDays()", "21a638d8": "addTerminal(address,uint256,address)", +"21a654bf": "getDeployedETFs()", "21a6c649": "privatePresaleWallet()", "21a6c7aa": "megabossCutPercentage()", +"21a76430": "zeroGenPepes()", "21a78f68": "ref()", +"21a7c5e5": "amountPerToken()", "21a7d652": "EQUIPMENT_REWARD_TOKENS_NUMS()", "21a80189": "getBalance(address,address,uint256,bytes,uint8,uint256)", "21a804fc": "SphereToken()", "21a83738": "getDragonPriceNo(uint256)", "21a8a771": "setPort(uint16)", +"21a8c177": "exchanges()", "21a91d2b": "PrcntRate()", "21a9cf34": "setTradeAddress(address)", "21aa1706": "startPresaleTrading()", +"21aa4548": "debugGetNumPendingSubmissions(address)", +"21aa7ca6": "SendArenaSuccesss(uint64,uint256,uint256)", "21aace42": "setTokenForSP(uint256)", +"21ab11f7": "betaDelegatedTransfer(bytes,address,uint256,uint256,uint256,uint256)", "21ab13ab": "maxBet(uint256)", "21ab3074": "transferOwnershipOfStorage(address)", "21ab561d": "MIN_BID_FRAC_BOT()", "21ab7fb4": "marketplace_admin_controller()", "21ab9177": "fixPlayerGraphic(uint256,string)", +"21abb9a8": "sd()", +"21abba01": "calcPoolOutGivenSingleIn(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "21abf58b": "feesB()", "21ac01d8": "ClaimedTokens(address,uint256,uint256,uint256)", +"21ac2d9f": "txKey2index(bytes32)", "21ac4982": "issue(bytes32,int256,bytes,uint256)", +"21ac4f9d": "pureTokenTransfer(address,address,uint256)", "21ac5aba": "cityIndexToOwner(uint256)", "21ac64af": "declareRCV(string)", "21ac8967": "setPatentFee(uint256)", +"21acf659": "setPartner(address,bool)", +"21ae05c8": "getCurrentAPR()", +"21ae6054": "EMPTY_STRING_KECCAK()", +"21aec84a": "distributeUnallocatedInterest(address)", +"21af10ab": "setLimits(address)", +"21af4569": "borrowCapGuardian()", +"21af8235": "updateGovernance(address,string)", +"21afb5ee": "mintingDisabled()", +"21b0b0cb": "stakingPool(uint256)", +"21b0dcd6": "viewPatientRecord(address)", +"21b0eb85": "smartSwapExactIn(address,address,uint256,uint256,uint256)", "21b12a4b": "clearTransaction()", "21b133ed": "icoTotalAmount()", +"21b13cdf": "withdrawStarts()", +"21b17be7": "DevAddres()", "21b1e5f8": "sendETH(address)", +"21b1f5d5": "maxAmountPresale_USD()", +"21b2416c": "Projects(uint256)", "21b288d8": "endSecondBonus()", +"21b30d1c": "getWholeDebt(uint256,address)", +"21b3611e": "necToken()", "21b36a08": "setFee(uint64,uint256)", +"21b42566": "getPriceOfXCarrots(uint8,uint256)", "21b43777": "advisorCount()", "21b48008": "getInvestorsETH(address,address)", +"21b49128": "cSaiAddress()", "21b4b3dc": "proposalsCnt()", "21b55c42": "testConcat()", +"21b5884d": "getDivdLoadV1()", "21b5b8dd": "extraBalance()", "21b68d2b": "DyginoteToken()", "21b6ac62": "lockGate()", "21b6c321": "StoreProduct(bytes32,bytes1)", "21b6fcbf": "SendFund(uint256,bytes32)", +"21b77d63": "MIN_LIQUIDITY()", +"21b79d98": "startMining()", "21b8092e": "setWithdrawalAddress(address)", "21b8151e": "Mixer()", "21b8b11e": "_addToDebtRegister(bytes4,uint256)", "21b8d973": "returnHash(address[2],uint256[8])", "21b920eb": "upgradeTank(uint32,uint8)", +"21b97bba": "lpToShareRatio()", +"21b99aa5": "getDepositDelay()", +"21b9c6e0": "exploitCompensationFund()", +"21b9c883": "getMarketingLevelValue(uint256)", +"21ba4e53": "totalRiskyRewards()", +"21ba5343": "Obtain(uint256,string,address,uint256)", +"21ba71a6": "CommissionerAuctionCanceled(uint256)", +"21babba7": "lockedTokensLength()", "21bacf28": "getDefaultFee()", +"21baf5a5": "dpt()", +"21bb3c81": "stakedByAddress(address)", "21bb79fe": "luckyDogInfo()", "21bb86ab": "setExchange(uint256,uint256,uint256,uint256)", +"21bb8eae": "GOLD_COINS()", +"21bbda08": "purchaseFor(uint8,uint256,address,uint256,uint256,address)", +"21bc3131": "closeCrowdsaleTime()", "21bc84fd": "canCompose(string,uint256[],address,uint256)", "21bc9a55": "buyTokens(address,address)", "21bcc5e5": "multiBatchTransferFrom(uint256[],address[],address[])", +"21bce47d": "rewardlistsize()", +"21bcedcf": "buy(address[])", "21bdb26e": "maxPresaleSupply()", "21bded12": "capitalPctBips()", +"21be0cfc": "turnOnStaking()", "21be2244": "PrivatePlacement(address,address,address,address,address)", "21be26ed": "deauthorizeContractById(uint256)", "21beba94": "lastTxBlockNum()", "21beedf4": "BlocklancerToken()", "21c0183e": "centralAdmin()", "21c02472": "numberOfResolutions()", +"21c02be6": "__init(uint256,bytes32)", "21c03a97": "setTradingOpen(bool)", +"21c05300": "activateReward()", "21c0b342": "claim(address,address)", +"21c0dcc4": "cream(address)", "21c0e95d": "setBountyPool(address)", +"21c148f0": "addClaims(uint256[],address[],bytes,bytes,uint256[])", "21c17ab8": "unproposeMilestones()", +"21c1f31d": "EvBankBecomeEmpty(uint256,uint256,address,uint256,uint256)", +"21c235a0": "getLastAnchor()", +"21c23836": "rateSteps(uint256)", "21c24081": "GDC(uint256,string,uint8,string)", +"21c26120": "incomeIndex()", "21c26195": "distAirdrop(address,uint256)", +"21c28191": "rebalance(address)", +"21c32c9c": "clearProposalData(address,address,bytes4)", +"21c3ec79": "lastUpdateByChunk(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()", +"21c663ff": "edits(uint256)", "21c6b951": "BetherCryptocurrency()", "21c6d7b6": "BitbabeToken()", +"21c77c96": "cancelOrders(bytes32[])", +"21c7ff4e": "swapFromBSC(uint256,bytes)", "21c87627": "getUnlockedPercentage()", "21c87ee8": "setMaxLevel(uint8)", "21c882ef": "testGetCaseAtIndex()", "21c88358": "anyTokenWithdrawal(address,uint256)", +"21c89c2f": "REIGAI18()", +"21c8ad0e": "getTickersByOwner(address)", +"21c8c2d1": "monedas(uint256)", +"21c905ee": "userRemainingBalance(address)", "21c9a6b1": "localCheck(uint256,string,bytes32,bytes32,string,bytes32)", +"21c9aa51": "MinContributionUpdated(address,uint256,uint256)", +"21c9fedb": "newERC20Wrapper(uint256,string,string,uint8)", +"21ca4236": "mintToAddress(address,uint256)", +"21cad5d1": "withdrawHEXToDistributor()", +"21cad774": "recordExchangeFeeForAccount(uint256,address)", +"21caf4c4": "transferVersusOver(uint256)", "21cb1568": "registerArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", "21cb18cd": "assignVested(address,uint256,uint64,uint64,uint64,bool)", +"21cb4ec7": "dotLimit(address,bytes32)", +"21cb82a7": "proxyAddressGroup(address)", +"21cbcfc1": "withdrawOPG(address)", "21cbed35": "setOperationAttributesByRegulator(string,string,uint256,string)", +"21cd427c": "approve_576(address,uint256)", +"21cd69e2": "addressLandsCount(address)", "21cda790": "tokensOwned(address)", "21cdb03c": "shopShield()", "21cde824": "fighterIndexToTeam(uint256)", +"21cdff34": "poolUSDL()", +"21ce0add": "decrIAIStats(uint256,address,uint256)", "21ce14a9": "injectTokens(address,uint256)", +"21ce37fe": "offerETH(uint256,uint256,address)", +"21ce918d": "submitSpendLimitUpdate(uint256)", +"21ce919d": "userInfo(address,uint256)", +"21cea538": "getSubmittedLists(uint256)", "21cefec0": "tokenBuyRate()", "21cf3514": "priceStalePeriod()", "21cf5132": "setManualBonus(uint256,bool)", "21cf59ac": "mintInternal(uint256,int256)", +"21cf5adc": "tokenLengthLimit()", +"21cf8b35": "_lastIssueEvent(address)", "21cf9f22": "updPool(int8,uint256)", +"21cff7ea": "EscapedHijack(uint256,uint256,uint8)", +"21d0232d": "Destroy(address,address)", +"21d0324c": "Fail(address)", +"21d0a2a0": "role(uint256)", "21d148ab": "weiForXau()", +"21d18a90": "EXTRA_SLOTS(uint256)", "21d1a303": "checkRemained(uint256)", "21d1b7a4": "TJ2()", +"21d1cce3": "test2(address,address,uint256,uint256,address)", +"21d1d388": "hatcherySnail(address)", "21d269dc": "fastCashBank()", +"21d2a07c": "fail(bytes32)", "21d2daa0": "unFreezeToken(uint256)", +"21d3002a": "isTokenSwapAtomic()", "21d3523c": "voteToHarvestFund()", "21d36529": "feePercentage(uint256)", "21d365af": "_processVestingRules(address,address)", "21d376ce": "tokensOfOwner(bytes32)", +"21d378f5": "QUALITY_HONEY_PERCENT(uint256)", +"21d3ccb8": "upgradeToReverseMode(address)", "21d3d2ee": "isMigrationFinished()", "21d41bc2": "IRobo()", "21d45bec": "getReverseFee(address,uint256)", "21d4b08c": "numTicksTillAuctionStart(uint256)", "21d50273": "createParty()", +"21d510b3": "blackListedUser(address)", +"21d51444": "wafflePrice(uint256)", +"21d52522": "pendingFeedings(address)", +"21d5279e": "BrokerFeeClaim(address,uint256)", +"21d529a0": "balanceOfwant()", "21d53fb9": "withdrawLockupTokens()", "21d5c0f6": "finalizeAgent()", "21d5cb51": "verifiedUser(bytes32)", +"21d63d5b": "updateLegendaryURI(string)", "21d65d80": "blockPart(uint64,uint64,uint64)", "21d67daa": "internalFinishMinting()", "21d6cdb6": "newPeriod(uint256)", +"21d6f3a7": "MASK_NF_INDEX()", +"21d6ff46": "isDelegated(uint256)", "21d739f1": "TokensIssued(address,uint256)", "21d7bdff": "startCountDown()", +"21d7e0de": "dfgSilverKey()", "21d800ec": "relayedMessages(bytes32)", "21d80111": "getHero(uint256)", +"21d8948a": "usersLuckyGroupsLevels(address,uint8)", "21d8ad4c": "getContractName(uint256)", +"21d93090": "chainIds(uint256)", +"21d948af": "updateDgasGovernor(address)", +"21d97262": "getVaultJFCBalance()", +"21d97a22": "RESERVE_VALUE()", "21d9d5ba": "testRemoveLocked()", "21da1719": "impl_unlock4Circulate(address,uint256)", "21da94e7": "getSEScore()", "21daae34": "getQuoteToBaseReturn(uint256)", +"21dadb75": "nyanVoting()", "21daf0f8": "TransferToReferrer(address,address,uint256,uint256,uint256)", "21db06bc": "wolf4Balance()", "21db087e": "getLevelCitizenById(uint256,uint256)", "21db0f0d": "getImmortalsOnTheBattlefield(address)", "21db2aa0": "getArtwork(uint32)", +"21db35ec": "allowSponsorChange()", "21dc04f4": "Vibranium()", "21dc512e": "replaceSSPRegistry(address)", +"21dc6429": "submitResult(uint256)", "21dc74fa": "addWhiteLister(address,address)", "21dcbbae": "HighJackpotHolder()", +"21dd4102": "calc753(address[],uint256[],uint256,address[])", +"21dd9cf0": "throwInvalidOpcode()", +"21ddb0b2": "setJumpSensitivity(uint256)", +"21de4f24": "put3()", +"21de592d": "tradePairAddress(uint256)", "21de6b01": "setKtcAddress(address,bool)", "21de861a": "narrowCyclePrizeView()", +"21ded99b": "TokenPrice(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"21dee127": "unstakeburnrate(uint256)", "21df0da7": "getToken()", "21df2ea5": "getNewInstance(address)", +"21df8098": "reloadStakeBuys(address)", "21df8b9b": "addTotalBondValue(uint256,uint256)", +"21dfb5f4": "exclusions(address)", +"21dfb600": "queries(bytes32)", +"21dfb633": "initialize(uint256,address,uint256,uint256,uint256,uint256,string,string)", +"21e00985": "reserveSnapshots(uint256)", "21e01596": "logCall(uint256,uint256,uint256)", "21e0f228": "winningNumbers()", +"21e12a7c": "Refund(uint256,address,uint256)", +"21e14f8b": "getNextSqrtPriceFromAmount1RoundingDownInvariants(uint160,uint128,uint256,bool)", +"21e18300": "updateBetFee(uint256)", +"21e18c02": "ECP_Token()", +"21e27909": "lockdropContractCreator()", "21e2933a": "setBasicIncomeLimit(uint256)", +"21e2cde8": "getPrivateState()", +"21e314cb": "setQuestionCooldown(uint32)", +"21e342ae": "claim5(uint8)", +"21e358ff": "teamLockUpPeriod()", +"21e37801": "getTroveStatus(address)", "21e38e81": "ownerCheck()", "21e3cdd0": "voteDn(uint256)", +"21e484d2": "openDeposit(address,uint256,uint256,uint256,uint256,uint256,uint256)", "21e5383a": "addBalance(address,uint256)", "21e53d77": "_buyTokens(address,address)", +"21e5749b": "gt(uint256,uint256)", +"21e59dbb": "zCreateAcceptance(uint256)", "21e5d0e4": "PRESALE_START_WEEK2()", "21e5e2c4": "shareOf(address)", +"21e626da": "drmBurnFrom(address,uint256,string)", "21e69b42": "dataMerkle(bytes32[],uint256,uint256)", "21e6b53d": "transferTokenOwnership(address)", +"21e7345e": "reserveLimit()", +"21e73f50": "setTransferDetails(uint256,uint256,uint256,uint256,uint256,uint256)", +"21e74bf6": "deposit(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "21e76826": "Gamblr()", +"21e7a12b": "takeMeOut(address,uint256)", "21e866be": "getCompanyCreationCost()", "21e88888": "setColor8(uint256,uint8)", "21e92d49": "transferByOwner(address,uint256)", "21e96b88": "setProxyManagementCurator(address)", "21e9b296": "ExtractedTokens(address,address,uint256)", +"21ea1b1b": "setUniV2Address(address)", "21ea2b8d": "delayOfICOEND()", +"21ea3bb0": "commentsAccounts(uint256)", +"21ea7ee1": "proveGateway(uint256,bytes,bytes)", +"21eb50ac": "getByRoot(bytes32)", +"21eb5859": "delegate(uint256,uint256,uint256,string)", +"21eba2da": "someVar()", +"21ebcc70": "_tiersUniswapLPContract()", +"21ebdba7": "TotalDepositCount()", "21ec0129": "HAUZ()", "21ec5981": "Jekyll_Island_Inc()", +"21ecff5b": "changeFees(uint256,uint256)", "21ed0f64": "removeEmployee(uint256)", +"21ed3636": "teamCountOfLeg(uint256,uint256)", "21ed46ad": "Dollars()", "21ed47b3": "annualPos()", "21edbe24": "pricesAndInventoriesOfDate(uint256,uint256,uint256[],uint256)", +"21edc93d": "getInvFPY(uint256)", "21ee102b": "removeExtension(address)", "21ee6457": "set_sale_arbits_total(uint256)", "21eeb9a7": "LogSaleCapReached(uint256,uint256)", +"21eef93e": "createEvent2(uint256)", "21ef10f0": "revokeSelf()", +"21ef1109": "deklaMinimum()", +"21ef4222": "tokenIssuedMKTBD()", "21ef8368": "DataSentToAnotherContract(address,address,bytes)", "21eff7fc": "getContribution(address)", +"21f004eb": "getArtItem(uint256)", "21f032d3": "BitDAOToken()", +"21f04173": "RefundsEnabled(address,address)", "21f0a727": "node_right_child(uint256)", "21f0b382": "unblockClient(address)", "21f118a6": "createByCOO(string,uint256,uint256)", "21f1a18c": "battleRemove(uint256)", "21f1b677": "updateTime(uint256,uint256)", +"21f1b769": "getTicketIssuer(address)", "21f222dd": "minWeiAmount()", "21f2a9a9": "_getUnlockedTokensPercentage()", "21f2ca3b": "unregisterUser(address)", "21f2ed2e": "dividendDistributionEndTime()", "21f35609": "CAT_FIRST()", +"21f36509": "callbacks(bytes32)", "21f38c6e": "bundlingEnabled()", +"21f3c469": "mythicApproved(uint16,address)", "21f3f338": "proposalCensorshipFee()", "21f3ff41": "maxMultiRolls()", "21f408be": "tk()", +"21f43e42": "__executeSetTimelockPendingAdmin(address,uint256)", +"21f45653": "playerBees(address)", +"21f4808e": "collateralSystem()", +"21f4856f": "setStringData(bytes32,string)", "21f4911a": "addFiveParticipants(address,address,address,address,address)", +"21f4ae14": "getSystemBalance()", +"21f4ae57": "canClaimFor(address,address)", "21f4d29f": "getPoolHistory(uint256)", +"21f5b28c": "borrowERC20(address,uint256,address,address,bytes)", "21f610d3": "endEarlyStage3()", +"21f628a7": "B8(bytes)", +"21f62d51": "Finished(bytes32)", +"21f64951": "_liquidationFeeRatio()", "21f6b513": "Airdropper(address,uint256)", "21f72d82": "YODCToken()", "21f7ac0d": "codeExportCost()", +"21f80af4": "realseNodeBenefits(address,uint256)", +"21f88ccb": "transferWeaponOwnership(address)", "21f8a721": "getAddress(bytes32)", +"21f8c984": "getSuspendedAssets()", "21f8dab6": "THRESHOLD4()", +"21f90ada": "accSakePerShare()", +"21f926db": "setInitialTimestamp(uint256)", +"21f92940": "registrationExt(address,uint8,uint256)", "21f9a878": "NewHashnodeTestCoin()", "21f9caef": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,address)", "21fa1730": "Ballot(string,string,string,uint256,address[],uint256[],uint256[])", +"21fa496e": "checkController(address)", "21faf403": "getStatusLogCount()", "21fb39d4": "WithdrawEvent(address,address,bool,uint256,uint256)", +"21fb6c90": "demaxCall(address,uint256,uint256,bytes)", "21fb9869": "getAdminLog(uint256)", "21fc2cd1": "NounToken()", +"21fc732c": "checkAccountEthereum()", +"21fcac8b": "currentCoef()", "21fda809": "payment(address,address,uint256,address)", +"21fdc4dc": "updateUserAddress(uint256,string)", +"21fe98df": "typeHashes(bytes32)", +"21fefba5": "createProduct(address,string,uint256,string,string,string)", +"21ff9970": "updateRoot(bytes32)", +"21ffb81e": "transferNft(address,address,address,uint256,bytes,bool)", +"21fffaea": "getVoteVerdict(uint256,uint256,uint8)", +"22003f10": "updateSalary(address,uint256)", +"2200778f": "getBondingCalculator()", "2200919f": "addVersion(string,address)", "22009af6": "BASE_REWARD()", "2200cdec": "finishPVE(uint256)", +"22016104": "_invite1Percent()", "22017c5f": "DSTokenBase(uint256)", +"22019a1c": "emergencyWithdrawEth()", "2202dcad": "FACTOR_7()", +"2202e3b5": "getUnclaimedPrivateRgt(address)", +"220329a3": "initialBoogieReward()", "22039f89": "isServiceContract(address)", "2203ab56": "ABI(bytes32,uint256)", +"220411bf": "_encodeVersion(uint32,uint32,uint32)", "2204ef4b": "getMeTokens(uint256)", "22054fe0": "updInvestorEnabled(address,bool)", "22057bc7": "getAllRevisionBlockNumbers(bytes20)", +"2206035f": "setAirdrop(address,uint256)", +"22061551": "DELAY_TIMER()", +"22064eb6": "CRTF()", +"22065988": "hasLockedBalance(address)", "2206e837": "undisapprove(uint256)", "220772a9": "starUpZero(uint256,uint256,uint256)", "2207a93a": "etherInUSD()", "22081c12": "processPayment()", "22082c72": "getDoneSelfDropAmount(address)", +"2208ebbd": "maxEarlyRedeemFee()", "2208ee1d": "_releaseTime()", "2209e991": "sendBet(address,uint256)", +"2209ee21": "podeEndTimestamp()", "220a0e36": "LoggedERC20(uint256,string,uint8,string,bool,bool)", "220a2247": "givePermission(address,string)", +"220a3ace": "tokenApp()", "220b4a73": "TCPC()", +"220b53d3": "CardMinted(uint256)", "220c166c": "hatchingSpeed()", +"220c5bbb": "depositInterest(uint256)", "220c773a": "changeMarketingRecipient(address)", +"220c98d9": "replaceFinancier(address,address,uint256)", +"220cce97": "rewardsContract()", "220d5d8d": "YioCoin()", "220d7a7f": "NoteToken(uint256)", "220d8707": "BONUS_DAY3_DURATION()", "220d9944": "MailHustleCrowdsale()", "220e44d0": "_buy(uint256,uint256,address)", +"220e44d5": "node(uint256)", "220e5d06": "qshdrop(address[],uint256[])", "220e693f": "ALLOC_ADVISORS()", +"220eb760": "burnPoolShareFromLib(uint256)", "220eb9b6": "run(uint256,bytes)", +"220ec3ad": "getALLBooks()", "220ee9ec": "purchase_dates(address)", "220eeab4": "BonumPreSale(uint256,uint256,address,address,uint256)", "220f1202": "lowestAskAddress()", "220f1aee": "createVoting(string,string,uint256,bytes32,address)", "220f52c5": "whoIsTheOwner()", +"220f6696": "inSwapAndLiquify()", "220f9dfd": "getFighterInfo(uint32,uint32)", +"220fcd54": "DEFIXrtAirdropDEFIX(uint256,uint256,uint256,uint256)", "220fde2e": "setSellPrice(uint16,uint256)", "221067a1": "JULIAN_ALLOCATION()", "221086af": "buyerBonus()", "2210d525": "getRareAddress()", "2210e0f7": "MassPay()", +"22110c9d": "_repayBorrow(uint256)", +"22110f0f": "addrBTCUSDpriceFeedXDAI()", +"22111788": "pool_slots_4(uint256)", "2211218a": "ARMtest()", +"22115ef0": "initialize(address,uint256,uint256,address,address,address,uint256,uint256)", "2211944a": "ActiveAdmin()", "2211ae76": "canReceive(address,address,uint256,bytes)", "2211c3b3": "eraseContribution(address)", "22122cb3": "blockTokenFunds(address,uint256)", +"22125db9": "maxFreeFnxAirDrop()", +"22128f11": "addi9()", "2212dbc3": "get_timestamp()", "22132598": "numArtworks()", "221353ca": "finalizeByAdmin()", +"2213719b": "claimableBoostsOf(uint256)", "22137935": "productsExported()", +"2213be3b": "multiRevokeRole(bytes32,address[])", "2213c7db": "tokenPreSaleRate()", +"22142352": "onWithdrawAndDistribute(address,bytes32,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"2214263d": "nhap(string,uint256,uint256,uint256,string)", "2214f65d": "toWei(address,address,uint256)", +"22151439": "transferEx(address,address[],uint256[],bytes,bytes32,bytes)", "221538f4": "BurnupHoldingCore(address,address)", "22156bb2": "WerderCoin(uint256,string,uint8,string)", "22159d89": "ticketsOwned(uint256)", "2215fc82": "getONETIMESOLD()", "2216573d": "internalIncreaseGoldKeyCounter(uint256)", +"221661dc": "getMakerData(address,uint256)", "22169ab3": "START_PRESALE_TIMESTAMP()", +"2216e52a": "Attend(uint32,string)", "22174ebf": "TokenSBT()", +"22175a32": "removeImplementation(address)", "2217bf78": "getReputationRewards(address,address,bytes32)", +"221846e3": "addEtherOutPlans(uint256,bytes16,uint8[],uint32[],uint32[])", +"2218ccec": "PhoenixExploded(uint256,address,uint256,uint256,uint256)", +"2218d29b": "buyoutProposals()", +"2218d457": "finishRelease()", +"2219a12d": "greaterThanIntUintPassTest()", "2219a95b": "DWBTPreICO(address,address,uint256,uint256,uint256,uint256)", +"221a2fdf": "getAlias(address,address)", "221a66d9": "presaleFee()", +"221a7764": "currentPointIndex()", "221ab8e2": "setBlockResult(uint64,uint64,bytes32)", "221b1c4a": "_NumOfStudentsPass()", "221b30df": "btcPurchase(address,uint256)", +"221b3ce8": "Refund(uint32,uint32)", "221b5ec2": "setTimeBegin(uint256)", "221b5fad": "getCardsCount()", "221b850c": "changeInstallerEscrowAddress(address,string,address)", +"221c08a0": "FundsReleased(address,uint256)", +"221c1fd1": "keyPurchasePrice(address,address,address,bytes)", +"221ca18c": "rewardRate(address)", +"221ce7c3": "getCollateralRequirement(address,uint256)", "221d4dff": "create(string,uint256,string,string,uint8)", +"221e2fbd": "getLotNftMintRewardByIndex(uint32,uint256)", "221e5da9": "GetContractStateEarlyTerminatedByTenant()", "221e9370": "recordedCoinSupplyForRound(uint256)", "221ed3cc": "CONSTELLATION()", "221ed748": "shareCycle()", "221ef94d": "userMigration(uint256)", +"221fff3a": "setMintEnable(uint256,bool)", +"22200e9c": "numCatsRemainingForBountyId(uint256)", +"22204534": "getUnlockInviteAmount(address)", "222101d1": "vestingMappingSize()", "222160c0": "isProposalExecutable(bytes32,uint256,address,bytes)", +"2221d6ec": "payeesIndex(int8)", "2221fb3e": "hasActiveBet()", +"222221fa": "decreaseGlobalDebtCeiling(address,uint256)", +"222223a2": "catchMonster(uint32,string,uint256)", +"222277d3": "bid(uint256,bool,uint256,uint256,uint256)", "22230fc4": "countFishAtBase()", +"222349c3": "getRatioByPath(address,address,uint256)", +"222356bf": "depositAll1(address)", "22239e8e": "loanActivation()", "2223a5da": "reserveCap()", +"2223ce32": "vicePerBlock()", "2224044c": "calcWeiForTokensAmount(uint256)", "22242382": "checkPriceAmount(uint256)", "22245b64": "MAXCAP_TOKENS_ICO()", "22246200": "deleteElementWithValue(uint256)", +"2224a234": "its()", +"2224fa25": "executeTransaction(address,uint256,string,bytes)", "22250809": "BoardClaimed(uint256,uint256,address)", +"222579c6": "getCardPrices(uint256,uint256)", "222594c5": "findModuleNameByAddress(address)", "2226549e": "fixedLog2(uint256)", +"2226d6dc": "numBlockMint()", +"22270644": "changeDomainOwner(address)", +"22271059": "oneDay(uint256,uint8)", +"2227f144": "EndOfChallenge(uint256,uint256,uint256)", +"222838db": "Redeem(address,uint256)", "22284872": "Escrow(address)", "22287914": "icoWallet()", "2228c895": "getWinningRate(uint256)", +"2228db69": "eventGETfee()", "2229d348": "attackMonster(uint256)", "222a5343": "BOWTERC20()", "222a95ee": "LastMsg()", +"222ab347": "payInvoice(bytes32)", "222af991": "stringToUint(int256,string)", "222b0d7d": "massRevoke(address[])", "222b8947": "depositTokens(bytes32,uint256)", +"222bebd9": "linaToken()", "222c1390": "maxPublicSaleStage()", +"222c36b7": "userDetails1(uint256,uint256)", +"222c9777": "stakeFee()", +"222ca43d": "ROLE_MAINTAINER()", "222cfe94": "myEtherBrosCount(address)", +"222d5ad9": "getStakedPoolBalanceByUser(address,address)", "222d777a": "createEvent(string,uint256,uint8,uint256,uint256,uint64)", "222d7e34": "currentRoundStart()", +"222ddaeb": "setTokenAdapterAddress(address)", +"222df088": "nextVotingPeriod()", +"222e15bc": "setAcoPoolLendingPool(address)", +"222e5669": "isTimelocked(address)", "222f51e9": "getDailyHash()", "222f5be0": "transferInternal(address,address,uint256)", +"222f6182": "deposit2(uint256)", +"222f889e": "LITHUANIAN_ROOTS_INFO()", +"222fafb2": "addBridgeNativeRewardReceivers(uint256)", +"222fd1da": "LogToken(string,address,uint32,uint32,uint32,uint256)", "22305fb7": "ShowSegmentation(address,uint256,uint256)", +"2230c1df": "rem(uint256)", "2231454f": "updateCampaignManagerContract(address,string)", "223162e7": "WithdrawSharedExpense(address,address,uint256,uint256)", "2231f72c": "setownership(uint16,uint16)", "223208af": "walletName(address)", +"22321697": "getCurrentRewards(bool)", +"22322599": "OwnershipOfferCancelledEvent(address,address)", "22326584": "WBE()", +"223337f6": "msgs(address)", "2233db62": "InvestorRegistry()", "2233dbf4": "wantNewMinter(address)", +"2233de2c": "scoreController()", +"22340070": "protocolTokenEthPrice()", +"22344b05": "uspfrozen()", "22347d5b": "confirmTrade(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "22351b6b": "VibeToken()", +"2235335f": "TwoWhitePyramids(address,uint256)", +"2235819e": "minETHRent()", +"2235919b": "vaultERC20()", +"2235fde2": "burnValue(uint256)", +"223612d3": "revertContract()", "22366844": "isRegistered()", "223699c1": "units30percentExtra()", "22372795": "HIT()", +"2237d35c": "shortTokens(uint256)", "2237d55c": "setTargetDiscountValue1(uint256)", "22384945": "checkPresaleBalance()", +"223868bd": "TradeCancel(uint256)", +"2238fb7a": "DirectFundingEvent(uint128,address,uint256)", +"2239325b": "mintLandSector(address,uint256,bytes32)", "22393ef4": "bundleFirstTokens(address,uint256,uint256[])", "223964bc": "queryAccounts(address)", "2239c48a": "startUpgrade()", "2239d43b": "uintMinimalSize(uint256)", "2239e688": "getUrlFromKey(bytes32)", +"2239eb3a": "registryToken(address)", "223a6399": "newAssociate(address)", +"223ab599": "stakeStatus()", "223ab941": "transferForProjectTeam(address,uint256)", "223b01db": "decimalsETHToUSD()", "223b530e": "antiques()", +"223ba560": "boostedRewardsThird()", "223c217b": "withdrawTokenTo(address,address,uint256)", "223c5939": "UnilotBonusTailToken(address)", "223cd20e": "shareHolderByAddress(address)", +"223ce437": "addExpToMonster(uint256,uint256)", "223d0417": "viewUnpaidRewards(address)", +"223d0fe9": "voteDiv()", "223dad70": "sendMsgSndr(address,address)", "223db315": "allow_refunds()", "223dcc74": "left14(uint256)", +"223dce9f": "TypesZeroPar()", +"223dd0b6": "checkusersFGW(address)", +"223e2121": "batchPunchs(address[],uint256[])", +"223e2757": "withdrawFeesAndRewards(uint256,address,uint256)", +"223e4d71": "registerReceiversGROOT(address[],uint256[])", +"223e5479": "addStrategy(address)", "223e5a9d": "pls()", "223e8eff": "etherPriceAuditor(address)", "223e97be": "setParent(uint256,uint256)", "223e9f17": "_redeemSameClassAdoptedAxies(address,uint8,uint256)", "223fcbc9": "_locked()", "223ff4cc": "getShipsIds()", +"223ffb42": "TransferERC20Token(address,uint256)", +"22405443": "cashOut(address,uint256)", "224076d4": "pegIsSetup()", "22408401": "ArtSale(address,address,uint256,uint256,uint256,uint256,uint8,uint256)", "2240b645": "GetClientCategory(address)", "22412ded": "MyProducts(address,uint256)", +"22415f60": "isTrustedSender(address)", +"224160a1": "humanTierTokenId()", "2241a733": "GOLD_AMOUNT_XPER()", +"2241f9b7": "govMintLLCbatch(address[])", +"224206e2": "callingContract()", "22425fa4": "feePeriodDuration()", "22427047": "Payout(uint256)", "22429085": "updateFees(uint256,uint256,uint256)", +"22429917": "ensureWrapper(address)", "2242cf7f": "getConBal()", +"224323a0": "numberTwo_1(uint256[])", "22434836": "setTimes(uint256,uint256)", +"2243822c": "isClusterActive(address)", +"2243df09": "diWav3()", +"2243f3c5": "setRateDecimals(uint256)", "2243fb15": "getHashratePerDay(address)", "22446093": "editPerson(address,address,string,uint256)", +"22447fb0": "OnDrawFinished(uint8[5])", +"22449255": "CrowdsaleStatus(bool)", +"22456243": "stakeCrumbsUni(uint256)", "2245675f": "setCustomerSignature(address,uint256)", +"22457b02": "totalBank()", +"22457fb8": "getPassengerStatus(address,string,uint256,uint256)", +"2245a08e": "calcAmountWithCommunityFee(uint256,uint256,address)", +"22462a87": "LayTeamC(uint256)", +"2246e4d4": "madicineReceived(address,address)", "22471e16": "identityApproved(address)", "2247328c": "vote01YesCount()", +"2247463e": "repayETH(uint256)", "224846de": "deletePaymentContract(uint8)", "224854f7": "Trie()", +"224961bb": "setStake(uint256,address)", "224993c2": "setTimeBlock(uint256)", +"22499a65": "proposeCalls(address[],bytes[],uint256[],string)", +"2249b0c8": "ProposerChanged(address)", +"2249f3da": "setComputeStart(address)", "224a1775": "transferByOwner(address,uint256,uint256)", +"224a5312": "withdrawAll(address,uint256,address,uint256)", "224a6ac3": "nextPE()", "224a8174": "TESTER()", "224a967c": "CTSCoin()", "224b4bfd": "TYCOONCoin(uint256,string,string)", "224b5c72": "consume(address,uint256)", +"224b610b": "password()", "224bed07": "transferIndexed(address,uint256)", "224c1a21": "getMyEthBalance(address)", "224c1c9b": "getNonVestedBalanceOf(address)", +"224c3275": "gettotalstakedamount()", "224c4657": "createOrder(address[3],uint256[3])", "224ccc49": "chainLastMessageHash(bytes32)", "224d5d54": "wylouToken()", "224dc278": "dis()", +"224dd619": "ownerWidthdraw(uint256)", +"224df42f": "settlement_timeout_max()", "224e5efd": "DNACoin(address,address)", "224e7462": "removeToken(bytes32)", +"224ed3c0": "currentAdmins(address)", +"224ee04f": "retrieveEther()", +"224eea51": "flashloanCurveToUniswap(address,uint256,address,address,address,uint32,uint32,uint256,uint256)", "224f127d": "LogNewWhitelistedAddress(address,address,uint8)", "224f143a": "setme()", +"224f3a14": "expForLevels(uint256)", "22500af0": "OwnershipTransfer(address,address)", "22518a75": "getVotersCandidateVote()", "2251a8a9": "isSubscribed(address,address,string)", "22526635": "payOut(uint256,uint8,uint256)", "22529fff": "getReferral(address,address)", "2252d5c1": "exemptMeFromFees()", +"2252f35e": "upsertNewErc20Token(address,uint32,uint32,string)", +"22532742": "genesisEndTime()", "225386fe": "SimpleERC20()", "2253fff1": "initialCongress(address)", +"225402c9": "_addReimbursement(uint256,uint256)", +"225408fb": "mntpMigrations(uint256)", +"225425db": "PynthSuspension(bytes32)", "22542fb6": "collectTokenPhaseStartTime()", "225435c0": "detach()", +"22545b6e": "decreaseUsableAmountLimit(address,uint256)", "22547931": "registerOperation(uint256,string)", +"2254ae15": "setASSET(address)", +"2254b8e7": "exitPosition(uint256,uint256,uint256)", +"2254d0b8": "oversightAddresses(address)", "22551da7": "double(address,bytes32,uint8,uint256)", "22554f34": "getT()", "22555bea": "UNITv2(address)", "22556bd7": "createRound(string,bytes32[],uint256)", "2255ad10": "RefugeCoin()", +"2255c5ac": "structureInvestOf(address)", "225640ab": "getOrCreatePreviousFeeWindow()", "225682d1": "test_contractBalance()", +"2256dc4e": "getDirectTotal2(address)", "2257406e": "getMemory(uint256)", +"2257bdd4": "markNonce(uint256)", "2257defa": "removeCustomerFromBL(address,address)", +"2258750a": "last_call_time()", +"2258bcf0": "initializeVolatileTokens()", "2259315d": "TokenFactoryCN()", "22593300": "Small(address)", +"22593b65": "setBlocksToReleaseCompound(uint256)", +"225959f8": "tokenPass(uint256)", "2259d221": "LifeSet_005()", +"2259ef62": "ethCoef()", +"225a1467": "seniorBonds(uint256)", "225a1d46": "PODH()", "225a905f": "NewSubscription(address,address,uint256,uint256)", +"225ab94e": "useTraits(uint256,bool[12])", "225b6574": "hasBase(address,uint64)", +"225b87c4": "getUserViews(address)", "225c4011": "cyberEntry(address)", "225c5567": "withdrawLeftTokens()", +"225c974b": "auctionExpiryTime()", "225ce00f": "_createAuction(uint256,string)", "225cf990": "setAgriChainContext(address)", "225cfd59": "addPromille(uint256,uint256)", +"225d1ba1": "slTokenMetadataAll(address[])", +"225d29a1": "userStatus(address)", "225da7e5": "transferManagerFactory()", +"225e707e": "settings(bytes32)", +"225eb1dc": "tempDelegate(uint256)", +"225ecb2b": "singleWithdraw(address,uint256)", "225f406a": "buyInSaturday()", "225f9d7d": "stopIt()", "225fce8d": "getGameByPlayer(address)", +"225fe8a2": "pyramidContract()", +"22601a58": "getCurrOfApiId(bytes32)", +"22604d94": "jawns()", +"22604de2": "approveSpender(address,address,uint256)", +"2260674e": "straightInviteAddress(address,uint256)", "22609373": "calculateEthereumReceived(uint256)", +"2260a4d0": "ContractOwnershipTransferred(address,address)", +"2260b664": "multiSendEther(address[],uint256[])", "2260b98b": "finalizeVoting()", +"22611280": "cancelWithdrawal()", +"22614097": "setDaoFactoryAddresses(address,address)", "226187dc": "maxPreICOTokenAmount()", "2261b07f": "getConverter()", "2261c6d9": "AllowedAddressAdded(address)", "2262cd94": "wroom()", +"2262f53f": "withdrawSingle(uint256,uint256)", +"2263180d": "endTimePresale()", "22636e65": "setContractValue(address,string,uint256)", +"22637301": "SETUP_ROLE()", "2263ae04": "POHD31()", +"2263b7bb": "withdrawCompanyBalance(uint256)", "2263e8b7": "routingCodes(uint256)", "2263f2c5": "createTokens1()", +"22643a46": "spentMultiplierTokens(address)", "22643a47": "JokerCoin()", "226454c1": "getGoldDataDocumentation()", +"22650981": "fatCash()", +"22652fb0": "flexibleStorage()", "22657697": "priceForStage(uint256)", "2265931d": "transferToken(address,uint256,uint8)", "2265a94b": "ValyutaTestCoin()", +"2265ecfd": "exchangeAllTokensToBNB()", +"2265f106": "Birth(uint256,bytes32,address)", "22665bc9": "setICO(address,uint256)", +"22665ebf": "presaleIsOn()", "22666da6": "makeGuess(uint256)", "226685ee": "Visit()", +"22670722": "beginMinting()", "22673030": "SALE_START()", +"22677c52": "totalReserveAmount(address,address)", "2267b2e3": "veredictum()", "2267b30d": "removeFounder(address)", +"2267f792": "addLicense(string)", +"226840fb": "revert_new_parameters()", "22686250": "index(int256,uint256)", "2268a358": "changeMultisig(address)", "226942e6": "RollEvent(address,uint256,uint256,uint256,uint256)", +"2269ba2c": "blocToken()", "2269d2ec": "addNewPotatoCoinsForSale(uint256)", "2269f1c9": "voteA(uint256)", +"226a1f35": "_unsubscribe(uint256)", "226ac321": "updateTokenRate(address,uint256)", +"226b1cbf": "approvalList(address)", +"226b9ea6": "getAddressshitStakeAmount(address)", +"226bcb4c": "transferabledTrade(address)", "226bf449": "addPackage(string,address)", +"226c6060": "exp_minus_5(uint256)", "226d2f86": "keyEmployeeAllocation()", +"226d4b45": "calcVotesForERC721(uint256[])", "226dd769": "howManyEtherInWeiToChangeSymbolName()", "226e2b91": "setPaycarnita(uint256)", "226e2d10": "manual()", +"226e835c": "PROPORTION_BASE()", +"226e83c8": "ownerDesactive()", "226ee47c": "set_validator(address)", +"226f1765": "Upgrader()", +"226f2c13": "percentTax()", +"22701134": "UniswapV2()", +"227074b3": "pendingMutant(address)", +"2270a6f4": "withdrawnByAdmin()", +"2270a7b2": "pendingWav3(uint256,address)", +"2270b781": "CreatContract(string,string)", +"227149a3": "loadLimitUpdateable()", +"22715389": "nominateSelfAsWinner(address)", +"227176c9": "getRemainings(uint256)", "227185d6": "Send1Get2()", +"2271e814": "BFA()", "2272b0af": "csoAddress()", "2272df67": "changeFounderAddress(address)", +"2272f1a3": "getDigestCodeNew()", "2272f879": "walletThree()", +"22730645": "setStakingAllowed(bool)", "227326b1": "proposalPassed()", "22734c0c": "createRawDeposit(address,uint256,uint256,uint256)", +"227367d5": "initializeNonPayable()", +"2273bae2": "didPerEtherParameterTitle()", +"2273ee6e": "depositWithPermit(uint256,uint256,address,uint256,uint8,bytes32,bytes32)", "22742564": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint8,bytes32,bytes32)", "2274346b": "vaultContract()", +"22748f85": "ownerSetUSDT_GWTB(uint256)", +"2274d12b": "transfer(address,address,string,int256)", +"2274e703": "_onDisputableChallenged(uint256,address)", "22758a4a": "whitelister()", +"2275a830": "lockImplementationManyToOne(bytes32)", +"2275c247": "setStrat(uint256,address)", "22760877": "getCurrentHeroOwners()", "22763ae1": "stopInEmergency()", "22766696": "bidEnd(uint256)", +"227666b8": "v22()", "2276774c": "finalizeRemainders()", "2277466b": "voteToClose()", +"22774abe": "increaseLockAmount(string,uint256)", "22776478": "getDistrict(uint256)", +"2277b1c2": "n(address)", +"2277d0e3": "lockLiquidity(address,address,uint256,uint256,uint256,address)", +"2277d1bd": "triggerPayouts()", +"22789020": "BZZZZV2PerBlock()", +"227893f2": "sablierContractAddress()", +"2278f36b": "releaseAmount(uint256)", +"2278fe33": "calRemainRewardTotal(uint256)", "2279295d": "resetPhoenixes()", +"22792ab4": "getTotalLP()", +"227977ce": "sendRewards4(address,uint256)", "22798c10": "MANHATTANPROXYACPBLVD()", +"2279a970": "sellShares(uint256,uint256)", +"2279f6a5": "StartThermostat()", "2279fa4c": "numPayments()", +"227a473b": "Stake(uint256)", "227a7911": "etherGetBase()", +"227aad46": "sendto(address,uint256)", +"227abf3b": "calculateMultiple(uint256,address[])", "227ac0cf": "GetPerSellInfo(uint16)", "227ada37": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"227b05be": "approve_579(address,uint256)", +"227bb02a": "EscrowAgent()", "227bf6b8": "ethorseOracle(address,bytes32,string,bool)", "227c74a7": "giveEntity(uint256,address)", "227cade5": "maximumBet()", +"227d0291": "reject(address,string)", "227d111e": "GetExistsCardList()", "227d3fb4": "checkTxProof(bytes,uint256,bytes,bytes)", +"227d517a": "totalVestedAccountBalance(address)", "227d535f": "Wolk()", "227dd788": "isFinal(bytes32[])", "227e14e9": "currentDateTime()", "227e26c4": "deleteChild(uint256)", "227f592c": "TIXGeneration(address,address,address,address,address,uint256,uint256)", +"227f6fcd": "removeBouses(uint256,uint256)", "227f9633": "addOption(string,address,uint256)", "227fb30b": "MosaiCoinContract()", "227fda27": "BitcoinSamaritan()", +"2280e7c0": "getNFTArtworkData(uint256)", +"22810053": "isRegisterd(address)", "2281411b": "allocateAndFreeze(address,uint256)", "22817359": "_transferTokenToOwner()", +"228197c9": "buyToken(uint256,string,string,string,string,string)", +"22821dbb": "rollStats()", "22824bbd": "checkFind(address,address)", +"228250c9": "queued(bytes32)", "2282d9f2": "transferIsEnabled()", +"2283bffd": "testArray()", +"22843370": "totalTokensForICO()", +"22843f95": "getTokenReleaseLength(address)", "22848a0c": "TCTToken(uint256,string,string)", "2284a6fa": "interest(uint8,bool,uint8)", "2284b051": "gameRandon1()", @@ -19728,19 +36060,36 @@ "22855bf0": "CheckBest(uint256,address,address)", "22855ef9": "registerTransfer(address,address,uint256)", "22867d78": "repay(address,uint256)", +"22868ae0": "anySwapIn(address,address,uint256,uint256,bool)", "2286b46b": "stakePathIDToAccountAndSubcourtID(bytes32)", "2286b7de": "BONUS_ICO_STAGE1_PRE_SALE2()", +"228702fd": "wars(uint256)", +"22872e0b": "setRebasePaused(bool)", "2287d2ec": "donealready(uint256,address,bool)", "2287dad2": "getTicketByHolderId(bytes32)", "2287e96a": "withdrawEnabled()", "2288193b": "testFundACampaign()", "22888f35": "depositPremium(address[2],uint256[7],uint8,bytes32[2])", +"2288e81f": "_engage()", "2288fad6": "earlyPurchases(uint256)", +"228902dc": "injectCarService(address)", "2289115b": "createPlanet(string,uint256)", +"22891876": "cookieToWbnbRoute(uint256)", +"22895118": "deposit(bytes,bytes,bytes,bytes32)", +"2289729c": "InsertYourToken()", +"228988c4": "sessionsOf_(address)", +"22899e2c": "getDepositorsList(uint256,uint256,uint256)", +"2289b18c": "g(uint256[][],string[])", +"2289d998": "PercentageOfPeopleVoted()", +"228a1c67": "getUniRouter()", +"228a4077": "poolCompoundCTokens(uint256)", +"228a5eb1": "cancelAuctionMulti(uint256[])", "228acf2f": "tokenTeam()", "228b70d3": "registerNewPubKeyForHash(string,string)", "228b7bf8": "Vasacoin()", +"228b9bf1": "zdeleteMix()", "228bbf45": "getItemsForSale(uint256,uint256)", +"228bfd9f": "strategy(address)", "228bff5a": "secToDays(uint256)", "228c2df1": "hodl(address,uint256,uint256,uint256)", "228c790c": "RudysToken()", @@ -19754,200 +36103,368 @@ "228e554a": "_refundBond(uint256,address)", "228e892e": "icoStages(uint256)", "228e92cf": "YuanLianToken()", +"228ee8c1": "ux(int128)", +"228f57b8": "getImprintsCount(address)", +"22902d67": "isProcess(address)", +"229048b0": "taxGas()", "229063fc": "discoveryCooldown(uint256)", +"22907544": "primaryOwners(uint256)", "2290d6e2": "entryFee_()", "2290db50": "buyEnergy(address,address,uint256)", "2290e106": "mintBuyerToken(address,uint256)", +"22915390": "getMaxFeeRatio()", +"229197e3": "GetPlayerBlock(address)", +"2291baf7": "registredInvestorUnspentETH(uint256)", +"22922e77": "add_shareholder(uint64,address,uint256)", "22923160": "updateWithdrawals(address,address,uint256,uint256)", "229233b6": "FOR_FOUNDER()", +"229289d0": "_BLOCKS_PER_ERA()", "22928b4d": "isIpoPeriodOver()", "22928d6b": "removeUser(address,address)", +"2292952c": "lockVolumeAddress(address)", +"2292bc1e": "getRankParamsValue(uint256)", +"2292f920": "getUserBetList(address,uint256,uint256)", +"229344e1": "enableOpenUp(uint256)", "22935caa": "setInitialAllocationUnlock(address)", "22937ea9": "returnInt256(int256)", +"22943612": "addStakePoolCreator(address)", "229460e7": "AdminstratorRemoved(address)", +"229476b7": "setSpendDivider(uint256)", "2294795d": "deuseth()", "22949fb1": "TicketBought(address)", "2294c48a": "initUsers()", "2295115b": "adminWithdraw(address,uint256,address,uint256,uint8,bytes32,bytes32,uint256)", +"2295394c": "_property()", "2295ee5b": "updateTokenBaseURI(string)", "22968885": "getBalanceOfContract()", "22969eac": "changeAuth(address)", +"2296aff5": "shadows()", +"2296b8eb": "changeDistributeItemToken(uint256,address)", "22978e57": "unlockedAfter()", "229824c4": "calculateTrade(uint256,uint256,uint256)", +"22984b24": "sushiFactory()", "2298b9ce": "icoOver1()", +"2298eae7": "OnCrowdsaleContractSet(address)", "229906b3": "updateStringSetting(uint256,string,address,string,string)", "2299219d": "unlockTemporary(bytes32,address,bytes)", +"229a2318": "_totalReferReward2()", "229a336b": "BodyMassIndex()", "229a4978": "batFund()", "229b04bf": "pauseMode()", "229b5223": "weiScale()", +"229b8018": "getLiquidityMultiplier()", "229b9bc5": "buildingToUnitCount(uint256)", +"229bc24f": "gTB()", +"229bc5e2": "deploy(address,address,address,bytes32,uint256,uint256,uint256)", +"229c9f6c": "release(uint256,address,uint256)", +"229cb73c": "accessibleSupply()", "229cfc32": "calculateViralRewards(uint256)", +"229cfec3": "STMinted()", +"229d2073": "setShouldReserve(uint256,uint256,bool)", +"229d9bbc": "verifyPlacement(bytes32)", "229ddd9a": "foreignBuy(address,uint256,string)", "229df5c6": "getSig(bytes)", "229e0b16": "updateLoanAsLender(bytes32,uint256,uint256,uint256)", "229eb105": "payaFinished()", +"229efe2a": "Get_User_Stackings(address)", "229f3e29": "presaleEnd()", "229f4caf": "minBetPrice()", +"229fd352": "rewardsPercentage()", "22a036dd": "ico2Bonus()", +"22a050ac": "targetPerBlock()", +"22a0a722": "cttBalance()", +"22a0c64e": "contractBalanceByPoolID(uint256)", "22a15848": "btcOracle()", +"22a1e225": "getExternalStorage()", "22a1ec8f": "setSomething(address[])", +"22a25082": "approveUnlock(uint256)", +"22a268e7": "unseal(uint256)", "22a27f3b": "getDeveloperAddress()", +"22a3400c": "SetCommittee(address)", +"22a376b0": "liquidityaddr()", +"22a3d62d": "approvedOracles(uint256)", "22a3eab5": "withdrawn_balances(bytes32)", +"22a41fa0": "numHeatDemands()", "22a4381d": "fromTokenDecimals(uint256)", +"22a4421e": "AirdropInvoked(address,uint256)", "22a47143": "Tokensale(address,address)", "22a4993c": "getReferedCount(address)", +"22a4f1ff": "getBoost()", +"22a5ce0e": "getContAdr()", +"22a5dde4": "registerContract(address)", +"22a5e6d7": "getTokenPriceFromUniswap()", "22a635c4": "Hodl(address)", "22a7118d": "buyTokensFor(uint256,address,uint256,bool)", "22a7533b": "deathData_a19()", "22a7906f": "getOwnedPointAtIndex(address,uint256)", "22a7ac34": "rake()", "22a7ba2b": "totalSupplyCrowdsale()", +"22a85816": "getAcceptTransferFeeAddress()", "22a8fb18": "freezelvlAccount(address,bool)", "22a90082": "setInterval(uint256)", +"22a913a8": "totalBzbSupply()", "22a92c45": "sendTokensToHold()", +"22a96aad": "stykclaimMap(address,uint256)", "22a993ca": "getKun()", "22aa7196": "refund_window_end_block()", "22aab53a": "temperatureRange()", "22aacad5": "incCounter()", "22aaea91": "setCurrentAuctionId(uint256)", +"22aaeffc": "StakeMyReward(uint256)", "22ab9433": "getPrecomputedEToTheHalfToThe(uint256)", +"22ab956b": "freezeOf(uint256,uint256)", "22abb147": "ResolutionAdded(address,uint256,string,string)", +"22abd7b2": "virtualGovernanceShare()", "22ac5f40": "fulfillEscrow()", +"22aca0ca": "deployAndExecute(bytes)", +"22acb867": "getWeights()", +"22ad2d05": "public_allocation()", "22ad3b76": "fiatFee()", +"22ad5eaa": "factory2()", +"22ae1a13": "war_getNextNukePriceForCountry(uint256)", +"22ae4ccf": "commitvote(uint256,bytes32)", "22ae634f": "getInvestment(uint256)", +"22ae8280": "tokensDeposited()", "22aef13c": "requestChangeRequirement(uint256,string)", +"22af00d4": "mintFees(uint256)", "22af00fa": "bets(uint256)", "22af1b27": "UnpackAccessDChain(bytes)", +"22af2bab": "MAX_MINTER_REWARD()", "22af47e3": "tokensIssuedAir()", +"22afcccb": "feeAmountTickSpacing(uint24)", "22b01343": "initializeAssetsToThisApplication()", "22b05ed2": "getStatus(string)", "22b08180": "purchaseVideoGame(uint256)", +"22b0aa47": "burnTokenSupply()", "22b0e99a": "EARTHToken()", +"22b0f626": "switchCompound(uint256)", "22b0f6ee": "getStatusOfPayout(uint256)", "22b11169": "setWalletOwnerAddress(address,address)", +"22b12f38": "LogNewFundraiser(address,bool)", "22b152a3": "liquidateLosing()", "22b19192": "imAlive()", "22b1a226": "withdrawPaymentsRegistrar(address,uint256)", +"22b1c296": "hasPendingActions()", "22b1f39c": "currentInvoice()", +"22b24cc8": "callObj()", "22b263b2": "nextPlayerID()", "22b2678a": "hasBalance(address)", "22b28aa4": "resetTimes(uint256,uint256)", +"22b2e1b5": "supplyOrderWithDaiPermit(uint256,uint256,uint256,uint8,bytes32,bytes32)", "22b2ea22": "registerHWCDep(string)", "22b2f178": "minimumDifficultyThresholdWei()", +"22b32688": "_getStorages()", "22b36d88": "stopTde(bool)", +"22b3a7c8": "commissions(uint256)", "22b45ddc": "EarlyBackerDeposit(address,uint256)", "22b4891d": "capICO()", +"22b4a643": "transferOwnerToDfPool()", +"22b51ca4": "oreContract()", "22b524fe": "getFreelancer(address,uint256)", +"22b52d66": "executionTimeout()", "22b53192": "arr(bytes32)", +"22b53466": "subDepositTotalAmount(uint256)", "22b53b4b": "accruedLiq(address)", +"22b5b1eb": "advanceAndRedeem(address,uint256,uint256)", +"22b6a357": "XMON_DEPLOYER()", +"22b6b07e": "Number_of_Days()", "22b6fe9e": "getAgreementSetCount()", "22b6ffca": "isSignedUp(address)", +"22b720c7": "sojuPerBlock()", "22b79623": "resetEpocum(address)", +"22b7a1c3": "checkCFactor()", +"22b7def5": "registerLocker(address,address[],address,address,uint256[],uint256,uint256,uint256,bytes32)", "22b87601": "testRemovePending()", +"22b8d044": "random(string)", +"22b8fad1": "changeDefaultRefID(uint64)", "22b930f7": "VESTING_1_DATE()", "22b954f8": "poolFeeRate()", "22b96b63": "getIPFSHash(address,bytes32)", "22b9b712": "BETTING_OPENS()", "22b9bd35": "adjustPrizePoolAfterWin(uint256,uint256)", +"22b9ffa9": "tokenCummulativeRewardPerStake(address)", +"22ba49fa": "AccrueEther(address,uint256)", +"22ba8328": "lotteryParam(uint256)", "22bac568": "grantAdditionalShares(address,uint256)", +"22baca07": "checkSenderIsnt2()", "22bae392": "setBenecifiary(address)", "22bb06d8": "marketting()", +"22bb34d8": "fulfill_alarm(bytes32)", "22bb4f53": "retentionMax()", "22bbad0b": "instruments(uint256)", "22bc0d6c": "appendEncryptedBid(bytes32,uint256)", +"22bc318c": "_potContribution(uint88)", "22bc3b8e": "getArgument(uint256)", +"22bc647f": "getTotalInvitation(address)", "22bc98b1": "basicPresaleRate()", "22bcabcd": "TOKENS_ACCELERATOR()", +"22bccfd7": "addAllocations(address[],uint128[],string)", +"22bd64c0": "ovmSSTORE(bytes32,bytes32)", "22bd6d3f": "hired()", "22bdf293": "grantVestedEDEX(address,uint256)", +"22be59ef": "lockStake(address)", +"22be8009": "mintMaster(uint256,uint256)", "22be9342": "resolve(uint256,uint256,bool)", "22beb9b9": "scheduleDoIt(uint256)", +"22bee494": "forwardCall(address,bytes)", "22bf1a2a": "addrLockUp()", "22bf2e24": "ROLE_STAFF()", +"22bf55ef": "recordFeePaid(uint256)", +"22bf6025": "compounded_apy()", "22bf9d7c": "slashTranscoder(address,address,uint256,uint256)", "22bfba59": "drawRandomUnitWinner()", "22bfdcbb": "RaffleStrangeLoop(bytes32)", "22c07ad3": "indFutureDeposit()", +"22c09a7c": "markOpen(string)", +"22c1107a": "getCombinedNextSetUnits(address)", +"22c12b84": "getDistributionToken()", +"22c19e9d": "final_sell_refund_reject(uint256,uint256)", "22c1d0d2": "_withdrawAmount(address,uint256)", "22c21e6c": "ZHIHUIGUO()", "22c25c50": "Addr7()", "22c25d8f": "set_presale_arbits_total(address,uint256)", "22c2b9eb": "MakeOver(address)", "22c30931": "calculateStep(uint256)", +"22c38aed": "positionIds(address)", +"22c3da7d": "totalHxpFrozen()", +"22c4688f": "WidthrawCommisionIsChanged(string,uint256,uint256)", +"22c4c495": "GetsenderID()", "22c4d98f": "hasAllowanceToRecieveTokens(address)", "22c4f168": "setTransferFeeProp(uint256)", "22c51659": "getWhitelistedZone(address)", +"22c51eb8": "turnOffStaking()", +"22c53aa5": "pivotAddressMap(address)", "22c5b279": "addLayer(address,uint256,bytes32)", +"22c5d0b2": "crowdSaleRoundFour()", +"22c5dec7": "tempAddress()", +"22c5ec0f": "m_cosigners(uint256)", "22c61e73": "createContractPoo(string)", "22c66ae7": "decimal_precission_difference_factor()", +"22c67519": "interact(uint256[])", "22c69b15": "tradeDAI(uint256,uint256)", "22c6aad9": "pigcoin(uint256,string,string)", "22c6ae15": "mul(uint64,uint64)", +"22c6b519": "getDIDRegister(bytes32)", "22c83245": "clearBlackAccount(address)", +"22c891f8": "distributeOffchain(uint256,address[][])", +"22c8b5ae": "updateisDepositAllowed(bool)", "22c8c2cc": "setEtherPriceAuditor(address,bool)", +"22c8ec7e": "isBlockFilled(uint64,uint64)", "22c9427e": "recycleDividend(uint256)", +"22c99df4": "transferZBTAdminship(address)", +"22c9f971": "minRateDifference()", +"22ca044d": "getActionFlag()", +"22ca3886": "revoke(bytes32,bytes)", "22cacd6b": "setUSDBtc(uint256)", "22cb1ec8": "teamTokensMinted()", +"22cb8b4a": "buyAuction(uint256,uint256,uint256,uint256)", +"22cc8227": "getCurrentDetails(bool,bytes,string)", "22ccd000": "Blocksale(uint256,string,uint8,string)", "22cd5ea8": "claimBet(bytes32)", +"22cd8e9b": "transferGrants(address)", +"22cdddf1": "addOpenBoxFromServer(address)", +"22ce12e5": "loginUser(string,string)", "22ce1f8f": "VixcoreToken2(uint256,string,string)", "22ce61b2": "globalMetSupply()", +"22ce7254": "isAuthorizedToGovern(address)", "22ce9bac": "numberOfVotesCast()", "22ced0bd": "BTrustToken()", +"22ced41e": "transferPotOwnership(address)", +"22cef9d3": "best_adapter_address()", +"22cf059b": "batAPip()", "22cf1745": "USTToken(address,string,string,uint8)", +"22cf3cf3": "setTradeFeeInProx(uint256)", "22cf5011": "privilegedTransfer(address,uint256,bytes)", "22cf981d": "proposeMintLocked(address,uint256)", "22cfadc7": "isFundingNow()", "22d0d31f": "OD1Coin(uint256)", +"22d11a0c": "_createSlot(uint256)", "22d122a9": "MyTestWallet7()", +"22d14702": "create(address,uint256,bytes32,bytes32)", "22d1bd32": "currentlyActive(bool)", +"22d1e613": "jackpotNextBalance_()", +"22d20bac": "getJobForClientCount(address)", +"22d23f68": "basketManager()", "22d2cfac": "getNextElement(uint256)", +"22d2d4a1": "pendingETHRewards(address)", "22d310f9": "setMarket2(address)", +"22d31977": "dogeToken()", "22d34212": "get_eth()", +"22d40b13": "logic_()", "22d40b96": "defcon()", +"22d4cda3": "generationSeasonDict(uint256)", "22d4e0fd": "pay2(address,uint256,address)", +"22d59bc6": "createConfigBallot(bytes32,uint256,uint256,bool,string,string)", +"22d5b25c": "_feeApprover()", "22d60d17": "tokensPerWei()", "22d6eb87": "getInfo2(address,address,uint256)", +"22d70095": "ticketIssuerAddresses(uint256)", +"22d7145e": "CrowdsaleStopped(address)", "22d7642e": "getScene(uint256)", +"22d7cbf3": "SetStartTime(uint256,uint256)", "22d85334": "isValidBicoinAddressPrefix(bytes)", "22d8c8a8": "AddMaterial(address,uint256,uint256)", "22d8cf5b": "CheckUserVote(uint8,uint8)", "22d9f13e": "changeCUSD(address)", "22da10b0": "checkPermissions(address)", +"22da2166": "kscTransferToTeam(address,address,uint256,string)", +"22da2dbe": "getWildcard(address)", "22da3368": "IoMTToken()", "22da5d04": "tokenCreationMaxPreICO()", +"22dae45a": "recoverETH(uint256,uint256)", "22db2f7b": "processOffchainPayment(address,uint256)", "22db4143": "BONUS_THRESHOLD()", "22db61ab": "setunitDefenseMultiplier(address,address,uint256,uint256,bool)", "22dbaf75": "test_oneInvalidEqBytes32()", +"22dbbc7a": "shed()", "22dbd0e4": "payComisionSponsor(address)", "22dbf6d2": "reserveFeeToWallet(address,address)", +"22dc2f4e": "setperson(uint256,uint256)", "22dc36e2": "processed(uint64)", "22dc5a85": "ERC20address()", "22dc8e71": "setIV_R1(uint256)", +"22dcd13e": "platformFeeBps()", "22dce86c": "getEscuelas()", "22dd0d2c": "TEAM_KEEPING()", +"22dd77a2": "mintTeamAndAdvisorsYear1Part7(uint256)", "22dd9b8c": "templateSupply()", "22ddde5b": "getLRCAmount(address)", "22dde4cd": "secToNextMiningInterval()", "22de2457": "clientVerifyKeyHash(bytes32,bytes32,bytes32,bytes32)", +"22de7217": "take_fees_rxp_owner()", "22df1caf": "grantPresaleTokens(address[],uint256[])", +"22dfc944": "known(address)", "22e01192": "setPrice(string,uint256)", "22e02b22": "ClaimEth()", +"22e0481c": "TokenIssued(uint256)", +"22e0658e": "acceptBidOBO(uint256,address,uint256)", +"22e07b7a": "borrowRatesLastUpdated()", "22e113a3": "freezeTokens(address,bool,uint256)", "22e12720": "MAX_HOLDERS()", +"22e1a637": "reserveShiftAmount()", +"22e1dea9": "canMint(uint256,uint256)", +"22e230f3": "toFixed(uint256,uint256)", "22e256e2": "Addr5()", "22e2b31f": "unlockAmount(address,uint256)", "22e37189": "tklosses()", +"22e38319": "workBatch(uint256[],address[])", "22e3989b": "multNumerator()", +"22e3ae3a": "Purchase(address,address,uint256)", +"22e3cbc0": "referralPerTx()", "22e412ce": "strikePut()", +"22e45584": "getTokenContractAddress()", "22e465ee": "tolerantSub(uint256,uint256)", +"22e556a3": "_swapBNBToFlip(address,uint256,address)", "22e58557": "getFreeEggs()", +"22e58933": "setTubGap(uint256)", +"22e58f86": "overtimeWithdraw()", "22e5aa3a": "totalProportion()", "22e5d0fa": "CoCoToken()", +"22e61fea": "ResizeNetflags(bool[])", "22e62038": "close_bank()", "22e63356": "setValueAgent(address)", +"22e63497": "removeBody(address)", +"22e65d93": "playerOfferOrders_(address,uint256)", "22e67e71": "maxTime()", "22e6f1d0": "giveGoldenTicket(address)", "22e77ff3": "plz(address)", @@ -19963,57 +36480,104 @@ "22e9afca": "cofoundersSupplyVestingTranches()", "22ea2231": "purchaseTokens(address,uint256)", "22ea2d96": "getBookInfo()", +"22ea7a58": "ownerAssCount(address)", +"22eb0bf4": "kaka()", +"22eb275a": "NewPurchase(address,uint256,uint256,uint256)", "22eb2c02": "viewPreSaleRefunds(address)", +"22eb9363": "halvingTime()", +"22eba8f5": "getTotalBettersForFighter(address)", "22ebb3ac": "DieselPricePeg()", "22ebc4a0": "fpartSigned(int256)", +"22ebd549": "delCashier(address)", +"22ebeba4": "getExternalPositionRealUnit(address,address)", "22ec1244": "shaBid(bytes32,address,uint256,bytes32)", +"22ec851d": "AuditorRewarded(uint256,address,uint256)", +"22ec966e": "approve_441(address,uint256)", +"22ece86b": "isValidAccountName(string)", "22ed6302": "setCrowdsale(address,uint256)", "22ed96a0": "getInvestorsFee()", "22ee1db4": "uint32At(uint32,bytes,uint256)", "22ee46db": "VapeToken()", +"22eed9fe": "totalCycleStaked()", +"22eee84c": "deactivate(bytes32)", "22ef83ef": "AuthInit(address)", +"22efea41": "push_basket(uint256)", "22efee2d": "get_participant_num_of_pro_rata_tokens_alloted(address)", "22f06ae4": "isRecoverer(address)", +"22f09063": "REDEEM_INTENT_TYPEHASH()", +"22f0975f": "setNetWorthBalance(address,int256)", "22f0e6ae": "MarketingMethodAddress()", "22f0f2f9": "unlockContract()", +"22f0faed": "verifyZKPNullVote(uint256[2],uint256[2],uint256[2],uint256,uint256[3],uint256[3])", +"22f10bfd": "distributeItems(uint256)", "22f16c8d": "checkDividends(address)", +"22f192af": "addInput(uint256,uint256,address,address)", +"22f1afca": "AddLiquidity(address,address,uint256,uint256,address,address,bytes)", "22f256f8": "buyIOD()", "22f2f89a": "allOperationsCount()", +"22f39dcb": "_dropSashimiMarket(address)", "22f3e2d4": "isActive()", "22f43bb5": "seedGame()", "22f4596f": "_maxSupply()", "22f48627": "SIACASHCOIN()", +"22f48d14": "isInitialOBOAdded()", "22f4afb5": "relayKingContract()", "22f4e916": "GdprCrowdsale(uint256,uint256,address)", +"22f5b58d": "addPerson(string,string)", "22f607f6": "Escrow()", +"22f64173": "getShouldNotRefund()", +"22f67e73": "balanceOfAtInDai(address,uint256)", +"22f6a4cd": "count_to_send_donation()", "22f6af6e": "TokensBought(address,uint256,uint256,uint256)", +"22f6b999": "log(address,uint256,bool,uint256)", "22f6fa7a": "contractorTransfer_Bcoupon(address,uint256)", "22f709dd": "getEther(address,address)", "22f77d2a": "Refundable()", "22f7be85": "setFlight(uint16,uint16,uint256,uint256)", +"22f7c217": "getSignerSideQuote(uint256,address,address)", "22f7d1f8": "normalFunc()", +"22f80d11": "stakingProxy()", +"22f832cd": "seigniorageExpansionFloorPercent()", "22f85eaa": "buyOrder(uint256)", "22f872a7": "allocateBounty()", "22f8a2b8": "getDayOfWeek(uint256)", +"22f8aa98": "Principle(address,uint256,string)", +"22f8e566": "setCurrentTime(uint256)", +"22f8f6f3": "getTermDuration()", "22f905ec": "GetPartNum(uint8)", +"22f91f9c": "ERC721OfOwnerByIndex(address,address,uint256)", "22f93f16": "updatingViaOracle(string)", "22fa1ff4": "MAX_PROMO_GIRLS()", "22fa85ca": "testFailRegisterContractAgain()", +"22faa360": "getMinerAddress()", "22faa5db": "removeURL(string,uint256)", +"22fab24c": "ROLE_ISSUE()", "22faf03a": "setInstructor(string,uint256)", "22fb5303": "_transferFromWithReference(address,address,uint256,string,address)", +"22fb58f7": "getCardAmountListOfEvent(uint256)", "22fb71f1": "getGoldStatusVendorverify(address)", "22fb730b": "claimerOfTwitterId(uint256)", +"22fbbdc9": "MintAnimalsFromAnimalFactory(string,string)", "22fbde38": "qtdePokemons(address)", "22fbf1e8": "addDeveloper(address)", "22fc3149": "setWhitelistThresholdBalanceInternal(uint256)", +"22fc8f39": "totalGainInAutoPool(address)", +"22fca666": "SendEther(uint256,address)", +"22fcb114": "deposit_aETH(uint256)", +"22fd3cb1": "withdrawEth_(address,uint256)", +"22fd7b47": "payToUser(address)", +"22fd9bf2": "WETHxLEVELSPair()", +"22fdef94": "isRegister(address)", "22fec5e7": "VEToken()", "22fefe31": "devuelvePuntuaciones(bytes32)", "22ff1110": "CancelSellOrder(bytes32,address,uint256,uint256,address)", "22ff79d8": "USA()", +"23000e4b": "isAccountFreezed(address)", "23017a3a": "rewardVaultContract()", +"2301b83d": "getBet(uint256,uint256)", "2301e7b7": "isInPreSaleState()", "23020be5": "SetfirstTTax(uint256)", +"23021b7d": "totalUsedCap()", "23023aa4": "_doCatchFish(uint16,uint16,bytes32)", "23024408": "fund(address)", "2302c948": "EtherDank()", @@ -20021,226 +36585,416 @@ "23037a85": "setNextPrice(uint256)", "23040327": "oraclize_query(string,bytes[4])", "230434d2": "Technology5GCrowdsale(uint256,address,address)", +"23049720": "toggleContract(bool)", "2304ede4": "ADSToken(address,address)", +"23055d92": "evolutionAddress()", +"23060b15": "_playerIds(uint8,uint32)", "230614fb": "batchTransferToken(address[])", +"23062333": "swapUSDT(uint256)", "23063da2": "Hellina()", "230662f8": "changeSaleManager(address,address)", +"2306bdd7": "getQoSList()", +"2306cff7": "take_out_eth()", +"2306f36c": "openSwap(bytes32,address)", +"230749e2": "MonetarySupervisorChanged(address)", +"2307e632": "getRegisteredWebsite(address,uint256)", +"2307f882": "implementationAuthority()", "23087c04": "_isWinnerOf(address,address,address)", "230894f8": "transferTileFromOwner(uint16,address)", "2308a41c": "amountRaisedBy(uint256)", "23092560": "RecoverAddress(bytes32,uint8,bytes32,bytes32)", +"23095721": "requestUnstake(uint256)", "23098a9a": "burnAssessor(address)", +"23099002": "Liquidation(address,address,address)", +"2309db4d": "DEFIXrtSaleDEFIX(uint256,uint256,uint256,uint256,uint256)", "230a1074": "getRegionCurrentImageId(uint256)", "230a14c0": "RISK_LEVEL()", +"230a372a": "registerCustomL2Token(address)", "230a3c05": "constructWeaponTokenId(uint256,uint256,uint256)", "230a8020": "getAddressValue(uint256)", +"230a80a7": "setZTreasury(address)", +"230ad7ca": "isUtilizable(address,uint256,uint256)", +"230af8c9": "mneAddress()", "230b1eb5": "totalReservedTokenAllocation()", +"230b7adc": "CONTRACT_GOLD_ERC20_TOKEN()", "230b9667": "getProviderInfoFields(uint256)", "230b9da3": "parentContract()", "230bd25d": "requestBounty()", +"230c3895": "transferWalletFee(address)", "230c50fe": "AuthorizePayments(bool)", "230c96b9": "BuyTokensWithAffiliate(address)", +"230cd42e": "XncreaseAllowance(address,uint256)", "230cf412": "test(uint256,int256,uint256,uint256,uint256)", "230d3469": "canExchangeNum()", "230d6ed8": "addCandidate(bytes32)", +"230dbd29": "afterAgreementUpdated(address,address,bytes32,bytes,bytes,bytes)", "230dff66": "theclub()", +"230e102e": "BlockchainExchange(address,uint256,uint256,bytes32)", +"230e8ece": "__NexxoTokensUpgrade1_init(string,string,address,uint256,uint256,uint8,uint256)", +"230eb9c6": "User(address)", +"230eeac0": "openLockGNTAndGenerateDebt(address,address,address,address,bytes32,uint256,uint256)", +"230f3833": "multiplicationForMidTerm()", +"230f436d": "stakeBatch(uint256[])", "230f49d9": "buy_token(address[])", +"230f5d7a": "getSashimiBalanceMetadata(address,address)", "230f6e83": "getCrydrViewStandardNameHash()", +"230fa4a5": "updatePoolAccumalatorAddress(address)", +"230ff28c": "pauseLimit()", +"23100a02": "paySubscriptions()", +"23101364": "buyInInterval()", "2310b384": "finalizeStake()", +"231113e4": "addBreedName(string)", "2311542e": "SSOrgToken(string,string,uint256)", "2311bdb2": "isForgiven(string)", "2311d39c": "dot()", "2311dc0b": "postProduct(bytes32,bytes32,bytes1)", "2311e345": "SaleFinalized(address,uint256)", +"2312115b": "generateRandomNumber(bytes32,bytes32)", +"231224ef": "totalSupplyofToken()", "23133115": "changeIncreaseStep(uint256)", +"23138b60": "CROWDSALE()", "23141fd0": "sendP(address,uint256)", "23145ca0": "forceCheck()", "23146c20": "getBuyerAddressPayment(address,uint256)", "2314a5c8": "getReput(address)", "2314aad6": "setExtensions(address)", +"2314bf9c": "SystemVars(uint256,uint256)", "2315550e": "add(address[],uint256[])", +"23157ee5": "OnCancelEscrow(address,uint256,uint256,address,uint256)", "23158cae": "addBet(uint256,uint256)", "23165b75": "acceptBidForPunk(uint256,uint256)", "23169ec4": "medalName()", "23169fca": "EDU_PER_ETH_EARLY_PRE_SALE()", +"2316a9ff": "getProviderCurve(address,bytes32)", "2316d0cd": "deathData_a16()", +"231729ad": "batchRemoveWithdrawnNFTsFromStorage(uint256)", "2317880c": "requestArbitration(bytes32)", "2317c28e": "mediaTokenIndex(uint256)", "2317cd54": "_endRound()", "2317ef67": "removeAsset(address,uint256)", "2317f9f3": "setSanMaxAmount(uint256)", +"23185dc9": "tokensOf(address,uint256,uint256)", +"231880b5": "predictedStatusForPredictionByAddress(address,uint256)", "2318ffc7": "setRokBalance(address,uint256)", +"23190fa9": "setMaxCount(uint16)", "23191bf1": "finalizeByArbitrator(bytes32,bytes32)", "231944e2": "moveUnits(uint256,uint256,uint256[])", "23198b98": "setTokenHolderTribunal(address)", +"2319bb2a": "maxDepositDays()", "231a00cc": "changeBonusRate(uint256)", "231a2be3": "minimumContributionPhase6()", "231a439e": "setBlacklistDestroyer(address)", "231ace68": "MiningRewardPerETHBlock()", "231b0268": "firstBlock()", "231b48aa": "settingsSetWeiPerMinToken(uint256)", +"231b4e67": "loadRemote(address,address,address)", "231c1ce8": "unusedMethod(address)", "231c1d43": "generate(uint256,string)", "231cb6ab": "ENS_SUB_APP_NAME()", +"231d0124": "KSCTransferFrom(address,address,address,uint256,string)", "231d45a4": "addProduct(uint256,uint256,uint8,bytes32)", +"231d4e2a": "migrateMiner(address)", "231d87e1": "competitorTeam(uint256)", "231da56e": "getSenderValue()", +"231db438": "managementPosition1(address)", "231e0750": "register(bytes32,bytes32,bytes32,bytes32)", "231e18a9": "pureFunc()", +"231e68e9": "stopSupportingItem(address)", +"231eae23": "getProtocolBalances(address,bytes32[])", +"231f0c6a": "getGeneratedReward(uint256,uint256)", +"231f23bb": "Change()", "231fa805": "IsControledAddress(address)", +"232012a5": "WithdrawCost(uint256)", +"23208b5a": "_DODO_()", "23210c1a": "StfuToken()", +"232117c9": "defaultClaimAmount()", "23214fab": "maxProfitAsPercentOfHouse()", +"232174c0": "executeSwap(address,address,uint256,uint256,bytes)", +"23218e5f": "getSupplierCount()", +"2321af6a": "batchWithdrawTo(address[],address,uint256[])", "2321e625": "publicSaleSencPerMEth()", "23221f1e": "getNbVersions(string,string)", +"23226654": "getBookAddress()", +"2322cf76": "getTransferableAssetAmount(address,bytes)", "2322f484": "balancesQuantity()", +"232341e4": "_getExpectedRateCall(address,address,uint256)", +"23236f07": "writeData(string,string,string,string,uint256,uint256,string,bool,string,string,string,string)", "232397e2": "addAccount(uint256,uint16,bytes32,uint256)", "2323a00e": "WagaToken()", "23240d81": "getDailyTransactionVolumeReceiving()", "23245216": "removeWhitelist(address[])", "2324c67c": "getAllSignatureHashes(bytes4)", +"23250cae": "burned(uint256)", "232523e8": "forceDivestOfAllInvestors()", +"23256f6b": "investFinish()", +"23257c2b": "getUIntValue(bytes32,bytes32)", +"2325b180": "executorSuccessFee(uint256,uint256)", +"2325d5ec": "createToken(uint256,uint256,address,uint256)", "23260a8b": "getPreviousPrice(bytes10)", "23262615": "claimVaultOwnership()", +"23266a60": "executeStrainzTrade(uint256)", "23266dfe": "getOrganizersAddresses()", "2326df93": "site_url()", "2326ef22": "CreateDMSContract(address,bytes32,uint32)", "2326faf9": "getResearchPerDay(address)", +"23272506": "CurrEsstematedRew(address)", +"2327c7df": "_becomeG3(uint256,address[],address[])", +"2327e49d": "RevokeBurnDelegate(address)", "23285480": "RefundDeposit(address,uint256)", +"23287021": "reserveMin()", +"232898b0": "newPool(string,address[],uint256[])", "23290737": "logMarketTransferred(address,address,address)", +"23293aed": "frt()", "2329b4f7": "CryptDash()", "232a2c1d": "executeSignatures(uint8[],bytes32[],bytes32[],bytes)", "232a3060": "setFundManager(address)", "232a6b9d": "signed()", "232c4d24": "sub_fCode(string,uint256)", +"232c5ef6": "calcTransferId(address,uint256,uint256,address,address,uint256,uint256,uint256)", "232c6bab": "delIndividualCertificate(string,bytes32)", "232cae0b": "last_offer_id()", +"232d46d2": "_borrow(uint256,address)", "232db034": "abortFunding()", +"232e01d2": "stopCrowdSaleOnlyForOwner()", +"232e1715": "testTransferTokenCompiledLongMin()", "232e57c1": "optionSupply()", +"232e7d83": "removeProviders(address[])", "232e7e91": "getproduct(uint256,uint256)", "232e9051": "gunsFund()", +"232ef11f": "user_details2(address,uint256)", +"232f94ef": "UnleashTheBeast(address)", "232fd216": "getPoolDone(uint256)", "233023de": "setCertifierInfo(address,bool,string)", +"233044d0": "adminKey()", "23306ed6": "getMinimumBond()", "2330f247": "isAuthority(address)", "233104d6": "setPresidenteDeMesa(bytes32)", "233120aa": "getChainyURL()", "2331af61": "transferActive()", +"2331b0d0": "destList(uint256)", +"233260c8": "approveExchange(address,uint256)", +"23326f3d": "jackpotLevel3Amount()", +"23331f80": "disableTransferAccess()", "23338b88": "delMinter(address)", +"2333fdae": "faasPoolAddresses(uint256)", "23343af3": "setConfigAddress(address,address)", "2334623f": "totalETM()", +"2335093c": "indexOfToken(address)", "23350e4a": "regainEther()", "23355749": "IkokoToken()", +"2335c76b": "authenticator()", "2335d307": "IFSActive(address,uint256,uint256)", +"23363799": "updateRewardDelegatorAddress(address)", "2337d9f1": "endOfferingImpl()", +"2337e7e9": "setInterestsController(address,bool)", +"23381bd2": "getCurrentEpochIndex()", "23385089": "emitApprove(address,address,uint256)", "23389c5a": "docs(uint256)", "2338c002": "_applyShare(address,address,uint256)", "233907a3": "signedApproveAndCallSig()", +"23393c1d": "op_nv1t_plus_v2t_v(uint256,uint256)", "23394e46": "TripAlly()", +"23399434": "totalETHContributed()", "2339dd43": "HcftSale(address,address)", +"2339e634": "epochReserve()", +"2339ff62": "nodeAt(uint256,uint256,uint64)", "233a04ec": "setEditionSales(uint8,uint256)", +"233a5c85": "findChristmasPresent(uint256)", +"233a6f49": "LogStageFinish(uint8,uint256)", "233a74c9": "currentTokenDistribution()", "233aacf9": "Announce_winner(address,address,uint256)", "233ab10d": "setBaseEthCapPerAddress(uint256)", +"233ac008": "withdrawAllowance(address,address)", "233b39c9": "_initCardDetails(uint8,uint256)", "233b7451": "lastStakedFor(address)", +"233bdd69": "saveUnclaimedDividends(address)", +"233be7a3": "tokenIdFromDNA(string)", "233bf71e": "FOCToken()", +"233c5ce4": "userAuctionCreateIndexes(address,uint256,uint256)", +"233c800a": "get_rents_number()", +"233cf197": "_setMinerLeagueAddress(address)", "233d264a": "startTicker()", +"233d771a": "level_1_addr()", "233de126": "odds()", "233dedf1": "averageBlockTime()", +"233df72f": "get_current_token_balance()", +"233e06c1": "soil()", "233e0877": "Purchase(address)", "233e3220": "renounceSuperInvestor()", "233e5d00": "WorldStage()", +"233e85be": "setAreaSqM(uint8)", +"233e9903": "setMinimumStake(uint256)", +"233fd85f": "getCallMsg(bytes)", "233ff4b2": "_fund(uint256)", "23400cf6": "getLOCCount()", "2340903d": "EEZcoin(address)", "23412ede": "StorageEnabled(bool)", +"234138f3": "FactoryTender()", +"23414232": "Traffic_Challan(string,string,string,uint256,uint256)", +"23416664": "ustBuyback()", "2341a1af": "receivePlayerInfo(uint256,address,bytes32,uint256,uint8)", +"2341c963": "getIssuer(bytes32)", "2341d778": "giveTix(uint256,address)", "2342293d": "collectionFees()", +"234367c8": "ModifyexchangeRate(uint256,uint256,uint256,uint256,uint256)", "23437d50": "discountICO()", +"23439b19": "projectedUnlockedBalance(uint256)", +"2343f149": "borrowerStakes(address,address)", +"23440679": "lastCommissionUpdate_deprecated()", +"23440944": "depositPool(uint256)", +"23445571": "LocalCrypto()", "23447982": "replaceManager(address)", "2344acdf": "pauseOffset()", "2344b0e5": "url_white_paper()", "2344e4ec": "getHint(uint256)", +"2344fbbd": "InfoSetted(string,string,string)", "23452b9c": "cancelOwnershipTransfer()", +"234531ce": "changeDivider(uint256)", +"2345fda9": "parAddress()", "2345fe81": "xperToken()", "234638df": "PreICOHardcap()", +"23471609": "setpriceFeed(uint256)", "23471d18": "setStakeAddress(address)", +"23472bf0": "transferDev(uint256)", +"234740a7": "AtomicSwapInitialised(bytes32)", "2348238c": "transferPrimary(address)", "23483e45": "delRosenCertAdmin(address)", "2348f1ee": "lockAttemp()", +"23491769": "mintArtwork(string,string,uint256)", "234917d4": "getCallTargetBlock(bytes32)", +"23493e3a": "deleteVies(address,uint256)", "2349748d": "MenoroCashSupply()", +"23499c07": "halvingBlock()", "2349e719": "processStepsByStep(uint256,uint256)", "234a0ee7": "appHub()", "234a6ed8": "initializeToken(address)", "234ae1a0": "WallDirectory()", +"234aed50": "migrate_one_locked(bytes32)", +"234b1ed5": "setGenePool(address)", "234b2cb4": "whitelistApplication(string)", +"234b6745": "withdraw(address,uint256,uint256,bool)", "234c0ae5": "combine(uint256[],uint256)", "234c4bd9": "deployStepThree()", +"234cb051": "mintRewards()", "234e0056": "COIN_SUPPLY_ICO_PHASE_1()", "234e5273": "tittyContract()", "234e5f16": "TIMETHRESHOLD()", "234ea19c": "lockRate()", +"234ea33b": "sendDth(address,uint256)", +"234f0e46": "isOld(uint256)", "234f1eb6": "JVToken(address,address,address,uint256)", "234f9db2": "getBalanceIco()", +"234fbf32": "Encrypt()", +"23500594": "ExerciseCall(address,uint256,uint256,uint256)", "235029ee": "SQT()", +"23505c4a": "alohaERC20()", "23509e69": "donkeysEligibleForFees()", +"2350a84d": "terminateEmployee(uint256,uint64)", "2350e762": "participantWithdrawIfMinimumFundingNotReached(uint256)", "2351299a": "createTokensToOwner(uint256)", "2351baca": "fechVoteNum(address)", "2351c2f8": "get_tokenReward()", +"23520739": "tenNhom(uint256)", "2352551f": "bbPublicSaleWallet()", "23525826": "maxNumbPerSubscr()", +"235259e1": "Created(bytes32[],address)", "23526a34": "turnOffSale()", +"2352bfb6": "isOG1(uint256)", "235304b2": "updateNextGameInitalMinBetSize(uint256)", +"23531b90": "TRADING_FEE()", "23533138": "seedMarket(uint256,uint256)", +"2353464c": "maxRefund()", "23537880": "TestSale()", "23539cd4": "mintResource(uint16,uint256)", +"2353f37b": "auctionById(bytes32)", "235422fb": "_medalUnFreeze()", "23548b8b": "maxCap()", "2354b3ed": "requestSatsPrice(string)", "2354bda7": "auditGuess(uint256,string,uint8,uint256,uint8,uint256)", "2354ecf7": "balanceOfOnUpdate(bool)", +"235523fa": "resolveReserveAll(address[])", "2355300f": "unspentCreditsWithdrawn()", +"23559677": "setfeelessReceiver(address,bool)", "2355c602": "queryToAddress(bytes32)", +"23561a27": "submitUMBSetRewardTokensTx(address,address[],bool[])", "2356f46a": "Kontlo()", +"23570697": "lorToken()", "23571ac9": "seenHereA(uint256)", "2357cd3b": "invadeAddress()", "23584a21": "initStats(string,address,uint256)", +"23584dce": "yeldFeePrice()", "23586685": "recordSale(uint256,uint256)", "23587733": "DEVELOPER_BONUS()", +"2358c046": "getAllTenders()", +"2359110b": "NewDistributionCastleLoot(uint128)", "2359116d": "refill(address,uint256,string)", +"235913f5": "setString(bytes32,bytes32,string)", +"2359256f": "everyDayInvestMapping(uint256)", "23594797": "createContractRegion(string)", "235977ca": "ParadiseTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"235997be": "getLastSnapshot(address)", "2359bd08": "reinvestTokens(address)", "235b1eb7": "getOverRate(uint8)", +"235b6ea1": "_price()", "235bd895": "_getGameInfoPart1(address,uint256)", "235c002d": "transferOther(address,address,uint256)", +"235c1fa7": "getChicken(uint256)", "235c279f": "addEmitter(address)", +"235c3603": "getPerformanceFee()", +"235c3c09": "betValue(address)", "235c9603": "getNextTranscoderInPool(address)", +"235cc2cb": "promotion()", +"235cea98": "linkAddress()", +"235d551d": "back(uint256,address[],uint256,address,uint256)", +"235d9b52": "LogMultiplePresalesSpecialUsersSet(address[],uint256)", +"235de618": "addCustomerKYC(address)", "235e5d47": "isRoundEnd(uint32)", +"235ed71d": "addRepo(bytes32)", +"235f9df6": "buytobeneficiary(address)", +"23604071": "changeFeeRecipient(address)", +"2360594f": "updateValuePoolMiningFee(address,uint256,uint256)", +"2360c27f": "getOrg(uint256)", "2360f5a1": "openSaleSupply()", +"23611ef1": "approve_322(address,uint256)", "2362189a": "defaultExchangeRate()", "23624a10": "tokenFee(uint256)", "23626067": "thirdCheckpointPrice()", "23626df7": "setContractAddress(address,address)", +"23628b57": "invites(address,uint256)", "2362b26d": "Awards(uint256)", +"2362d874": "newUpdate(uint256,string,string)", +"2362e649": "avatarIndexToApproved(uint256)", "23637e60": "votePrice(uint256,bool)", "23647398": "testThrowRetractNotOwner()", "23655d7b": "Fantom()", "236571e2": "determineWinnerEven(string)", "2365ceb3": "SetWagerData(bytes32,bytes15)", +"2365faea": "setAllowedSlippage(uint256)", +"2366245e": "issuanceSuspension()", +"23662bb9": "defaultSlippageFee()", +"2366d932": "getStakingTimes()", +"2366fc70": "assignToLong()", "2367e1ae": "getLengthOfMatches()", "2367f35d": "crowdsaleEnded()", "23685b97": "bpToken()", +"23686dc3": "slotTotalGas(uint256)", "2368d215": "multipleAddToWhitelist(address[])", +"2368d951": "addItem(bytes32,uint256,bytes32,bytes32,uint8)", +"236945a9": "weatherByGeohash(string)", +"236973a3": "reductionMonth()", +"2369bf83": "updateMarketingAddress(address)", +"236a1278": "quotedTransaction()", "236a160e": "isValidIssuance(uint256,uint256,uint256,uint256)", "236a8d9d": "registerNode(uint256,uint256)", "236ae025": "distributionThreshold()", +"236ae11d": "approve_290(address,uint256)", +"236b5488": "IcoEnded()", "236be3e2": "BlockcloudToken()", +"236d064f": "getName(uint16)", +"236d50b2": "getRun(uint256)", "236dd0e8": "paidBidAllocationFee(bytes32)", +"236dd994": "ContestTeamWinningsPaid(uint32,uint32,uint128)", +"236e02e0": "reducibleReleaseAllFor(address,address)", "236e06f6": "exchange(address,uint256,uint256)", "236e1a15": "PromotionCoinMintFinished()", "236ebbae": "setAuditNodePrice(uint256)", @@ -20249,121 +37003,244 @@ "236eeff7": "compensate_log(uint256,address)", "236f86a1": "remainingTokens(address)", "236ffad4": "initOwned(address)", +"23702d09": "CUSE12()", "237032da": "isBacker()", +"237047f7": "imprint(bytes32,string)", "237082bd": "getCertifiedDocCount(address)", +"2370afda": "AddToLocker(address,uint256,uint256)", +"2371360b": "updateDecimals(address,uint256)", +"23719686": "viewRewardUsdt(address)", "2371bb4b": "SetNumber(uint64)", +"237212d5": "setBatchSender(address)", +"2372243b": "isTokenLaunched()", "23724ffd": "TransferManagerApproved(address)", "237297a4": "claimWinner()", "2372996a": "CUSTOM_ERC20_CREATE_SERVICE_NAME()", +"2372c916": "prediction()", "23732ad8": "OSTestToken()", "2373f091": "_setMinter(address)", +"23746eb8": "coins(int128)", +"2374876c": "harvestPool(uint8)", +"237492e3": "COPPER_COINS()", "23749f69": "donationsEndedTime()", +"2374f8a6": "tickerSymbol()", "23751e95": "addRedbullQuest(address)", "237548fa": "seriesFactory()", +"23755751": "setAirAddrs(address[])", "2375766a": "unlatchContract()", "2375da83": "setIntArr(uint256,address)", "2376fe70": "approveProxy(address,address,uint256)", "23773f81": "calcTapAmount()", +"23784ea7": "tokenTypeDatas(address)", +"2378a0f5": "issueCard(uint256,uint256,uint256,uint256)", +"2378bea6": "setRewardsDuration(address,uint256)", "2378fe2d": "FAPFundDeposit2()", +"2379263c": "TriggerNextRewardEpoch()", "23797ed9": "getAppByIndex(uint256)", "237a35b2": "professionalName()", "237a4a7f": "requestOneUUID(address,uint256)", +"237b068a": "reprice(uint256,uint256)", +"237b5744": "getStakedSecondaryLPBalanceFrom(address)", +"237b5e4f": "timeHeld(uint256,address)", "237b5e96": "child()", +"237b9312": "TokenPurchaseWithIcon(address,address,uint256,uint256)", +"237bcb2d": "secretsMap(bytes32)", "237c2b22": "MCTCrowdsale(uint256,uint256,uint256)", "237c72ac": "replaceDecoration(uint256,uint256)", +"237c980a": "addressToBalance(address)", +"237cc375": "calcRepayAmount(address,uint256,uint256)", +"237cdfc7": "swapExact(address,address,uint256,uint256,address)", "237d2628": "issueTokens(address,uint256,uint8)", +"237d3a54": "setPerformanceReward(address)", +"237dcf57": "getConditionData(address,address,bytes,bytes,uint256)", +"237e5811": "reserveMintAmount(uint256)", "237e9492": "executeProposal(uint256,bytes)", +"237ec79d": "MAX_POOL_NUMBER()", "237f142a": "ownersLen()", +"237f17ee": "getLiquidityChangedSnapshots(uint256)", "237f1a21": "hasIdentity(address)", +"237fa71b": "buyPrice1()", "23807da8": "getInvoicingAddressCount(string)", +"23809aeb": "isPausedMintr()", +"2380bf05": "noPayable()", "2380c39d": "backUtcoinOwner()", +"238189a8": "timeLockRegistry()", +"2381efec": "emitAuthorizationRevoked(address)", "2382534a": "STR()", +"23829b3b": "setEvent(bytes32)", +"2382e2c4": "changeRelay(bool)", "2383b074": "getSurplus()", +"2383c44e": "createPatient(string)", +"23843c0a": "payEventLog(address,uint256,uint256,uint256,uint256)", +"23844898": "rndSeed(uint256)", "23845e4b": "getPoolSize()", "2384c058": "account3()", +"23852d00": "WithdrawOwner(uint256,uint256,uint256)", "23855c18": "updateDeposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", "23855cd3": "setBalanceForUser(bytes32,uint256)", "23858314": "sizeOfProviders()", "238604f0": "SuperContract()", +"238618e7": "weiInUsd()", +"23861dd3": "claimCheck()", +"238640e9": "MAX_RR()", +"23864c52": "ethToDaiSwap(uint256,uint256)", "23866438": "joinChannel(bytes32,uint256[2])", "23867979": "getHealBalance()", "2386d33e": "_tenuousToken()", +"238720cf": "allowSwap(address)", +"23879bb1": "IMPLEMENTATION_REVISION()", "2387c87d": "setTokensSold(uint256)", "2387e75e": "RequestBitcoinNodesValidation(address,address)", +"23884ae1": "viewSaleMDS()", +"23887ea9": "getCurrentCashTofCash(uint32,uint128)", +"23892436": "claimBASE()", +"23895555": "MAX_DISTRIBUTION_DURATION()", "23898138": "MoneyCoin()", "2389a290": "joinGame(address)", "238a3fe1": "transferDistribution(address,uint256)", +"238a4709": "setMintingFee(uint256)", +"238a4d1e": "isValidSignature(address,bytes32,bytes)", "238ac933": "signer()", +"238ace9f": "isExceuted(uint256)", +"238b3aed": "initiateProviderCurve(bytes32,int256[],address)", +"238b4bc5": "initialize(address,address,address,string,string,uint8)", +"238b6d40": "crowdSaleRoundFourLimit()", +"238b912a": "da()", +"238be93f": "unstakeKlay(address,uint256)", "238bf375": "PROMETHEUS_MAX_PRICE()", "238bfba2": "getChannelWith(address)", "238c5b06": "icoDiscountPercentageLevel1()", +"238cd0c3": "_doCreateCondition(address)", "238d3590": "getTotalTheoreticalSupply()", "238dafe0": "enabled()", "238e5b14": "burnAmount(address)", +"238e9d93": "confirm_Delivery()", "238e9de7": "StopFuseaNetworkDistribution()", "238efcbc": "acceptGovernance()", "238f7743": "unlockSecondTokens()", +"238f8801": "gameComplete(uint256)", "238fcbf8": "DISCOUNT_TOKEN_AMOUNT_T2()", +"238fd731": "removeFromMelters(address)", "2390507b": "COMMUNITY_ADVISERS_STAKE()", +"23909055": "checkRes(bytes32,uint256)", +"2390f09b": "EscalateFinance()", "239131af": "NEXUS()", +"23913843": "depositTokenSale()", +"23919512": "e(address)", "2391ddf3": "handleLuckyPending(uint256)", "2391f0b3": "isProtect(bytes32,uint8)", "23924cff": "TeamLockingPeriod6Months()", "23926732": "ifDestory(address)", +"2392c189": "resolveTo(address,uint256)", +"2393768d": "pendingBenefitAmountOfAllStakers()", "23949cd1": "setNFTContractAddress(address)", "2394a797": "makeHybridization(uint256,uint256)", "2394cc40": "transferInternally(address,address,uint256)", +"23952a6f": "setKOTHPrice(uint256)", "2395e9b6": "specialAllowed(address)", +"239621a3": "getTransactionIdsOf(address)", "23967d78": "FOUNDATION_HOLDER()", +"23972aef": "enter(uint256,uint256)", "2397e4d7": "sellToken(uint256)", "2397f92b": "KNDToken()", "23985742": "STANToken()", "23987690": "indFuture()", +"23988903": "soldTokenInfo(uint256)", "2398a6a6": "sendPrize(uint256)", "2398b8fc": "SCHEMA_HASH()", +"23996b53": "UNBIND_PACKAGE()", "2399a5af": "balanceAdd(address,address,uint256)", "2399e1f2": "addPromotionalCompany(string,uint256,uint256,uint256)", "2399f870": "updateFlipAndMDT(address,uint256,address,uint256)", "239a2545": "totalNights()", +"239a603b": "setItemsManagers(uint256[],address[],bool[])", "239ab208": "notifyAssessors(uint256,uint256)", "239aee06": "execute(address,address,address,uint256)", +"239b51bf": "Benchmark(uint256)", "239b6dd1": "QUINToken(uint256,string,string,uint256)", +"239b7551": "keyfi()", +"239b7c20": "dustInWei()", "239bb5a6": "getConstructorString()", "239c02ba": "OPSToken()", +"239c4c47": "qlist(int256)", +"239c4dcf": "tokenIdToSellingItem(uint256)", +"239c70ae": "maxMintAmount()", +"239cf724": "addRewardFromTickets(uint256,uint256,uint256,address,bool)", "239d339b": "updateStageByTime()", +"239d96b6": "getLastWiner(uint256)", "239da1a3": "SportStarMaster()", "239da7de": "getServiceFeeDenominator()", +"239e0303": "getBackExtraTokens()", +"239e26f2": "captureTheFlag()", "239e7881": "GEBEC()", "239e83df": "guardedArrayReplace(bytes,bytes,bytes)", +"239ebd31": "exchangeStake(address[],uint256[])", +"239eea53": "approve_280(address,uint256)", "239f26ee": "BethereumERC223()", "239f29dd": "setConsensusPercent(uint256)", "239fcf0f": "Balance(address)", "239fd68f": "setCurrentPricePerWei(uint256)", +"239ff074": "setOstanBudgetManager(address)", +"23a06fae": "safeFixUnits(uint256)", "23a08d97": "totalPreICOavailible()", +"23a0acc4": "voteForServicesCount()", +"23a0fb02": "tokenHasFreeTrial(address)", +"23a15e6b": "timeAllyMonthlyNRT(uint256)", "23a1b159": "maxTimeBonusPercent()", "23a1bd8f": "Dancoin()", "23a1c271": "setPongval(int8)", "23a1e00e": "openLeaderboard(uint8,string)", +"23a248fd": "Service_De_Provisioning(address)", "23a24a33": "setBAA(bytes32,address,address)", "23a2725a": "LeS3coin()", "23a27bcd": "checkProofOrdered(bytes,bytes32,bytes32,uint256)", +"23a28ebc": "addCommonTokenPair(address,bool)", +"23a2ef1e": "totalOwnerFee()", +"23a2f46c": "bpool()", +"23a30e59": "clone(address[],uint256,string)", "23a31463": "setBlockLock(bool)", "23a3335c": "BuufmanToken()", +"23a347f2": "developerPot()", +"23a36326": "_sharesPerLBD()", "23a36d2b": "mintToken(address,uint256,uint256)", "23a37c09": "addRNTBContribution(address,uint256)", "23a3ad72": "checkRole(address,uint8)", +"23a48c6c": "setSalted()", +"23a4e3fc": "offersSize()", +"23a4f6f2": "hello_world_derived_interfaceId()", +"23a4f946": "hasWithdrawnFees(address)", "23a50727": "endStage(uint256,uint256)", +"23a51e04": "subscriptionPeriod(address,address)", "23a52674": "expandX()", +"23a58292": "lasttime()", "23a58576": "zeroBool()", +"23a604dc": "tokenSaleTSLF(address)", +"23a65426": "DividendsDisbursed(uint256)", +"23a67b65": "oneTimeTransfers(address[],uint256[],address[])", +"23a69143": "tokenIssuedBDev()", "23a6b8ca": "currentBeneficiaryCap()", +"23a719d4": "returnLP()", +"23a7b42a": "getWethAddress()", +"23a80708": "invest_money_add(address,uint256)", +"23a8358f": "depositBUSD()", +"23a85b36": "GOLDPOT()", "23a8792e": "ChangeTokenPrice(uint256)", +"23a879be": "mintStakeTokens(address)", "23a8edb5": "LociBackend()", "23a90e5e": "getCustomerTxTimestampPaymentMCW(address,bytes32)", +"23a9360a": "ItemSold(uint256,uint256,uint256,string,address,address)", "23a9a156": "SNL()", +"23a9c075": "setTimelock(bytes4,bytes,uint256)", +"23aa5214": "kiiaToken()", "23aa6a17": "issueTokenAndApprove(uint256,uint256,address)", +"23aa7457": "testCalculateInterestIndex_BlockDeltaRateOverflow()", +"23aa7c12": "UniSwapsETHExchangeContractAddress()", "23aa7e12": "controllerDelegate()", +"23aa7f0f": "totalLoansCreated()", +"23aa8174": "deprecation_executor()", "23aba14f": "iCapToken()", "23abea43": "getPlayerKeys(uint256,uint256)", +"23ac0381": "debasePolicy()", "23ac3fd4": "getPOOL_edit_32()", "23ac4b03": "addQuickPromoBonus(uint256)", "23ac9ae2": "CcStandardToken(uint256,string,uint8,string)", @@ -20371,9 +37248,14 @@ "23adeb05": "OneChance(address,address,address)", "23ae4438": "getLastRoundInfo(uint256)", "23aea69d": "isNextBudgetPlanMade()", +"23aeca84": "KingOverthrown(uint256)", "23aed228": "selling()", "23aedc62": "startSale(uint256[],uint256[],uint256,uint256)", +"23aef5ea": "DFGaddress()", +"23af43b8": "cleanUpPendingGroup(uint256,address)", +"23af4e17": "setStableCoin(address)", "23afba86": "Lancer()", +"23b01a64": "getInvests(address)", "23b06313": "getPoolBonusFirstExpertFactor(uint256)", "23b0abeb": "showPhaseInfo(uint256)", "23b0bbea": "getBullsmasterReq()", @@ -20381,111 +37263,204 @@ "23b1131c": "unlockDate2()", "23b11bb1": "getPropertyLastUpdate(uint16)", "23b11d8d": "addProxy(address)", +"23b169c9": "cooperativeClose(address,uint32,bytes32,uint64,bytes,bytes)", "23b17715": "AddressDescriptionAdded(address,string)", +"23b1a080": "heartbeatStatus()", +"23b1a4ba": "setRewardToken1155(uint32,uint256,uint256)", +"23b1de83": "maxBurntPTY()", "23b1ed54": "getConstantName()", "23b1f8e4": "lastPriceUpdateTimestamp()", +"23b28fcb": "applyToTrip(string)", "23b2b48f": "addressToAccountMap(address)", +"23b2fb67": "executionFee(uint256)", +"23b344fa": "charityOwnerAddress()", "23b364ab": "getAvailableTicketCount()", "23b37bb6": "sqrt(uint64)", +"23b3a9e7": "DividendPayment(uint256)", "23b3af89": "addHolder(address,address)", "23b3b704": "calculateUntaxedEthereumReceived(uint256)", "23b3c771": "getFreeShrimp()", "23b44cfc": "assignNewParcel(int256,int256,address,string)", "23b493fe": "getUserFiatBalance(string)", +"23b4a1fd": "setGasTokenTargetMintValue(uint256)", +"23b4a836": "drop(address,uint256,uint256,uint256,uint256,uint256,address[])", +"23b566e8": "getTotalSaleAmount(uint256,uint8)", "23b5aa8d": "STAT()", "23b5b257": "tokenHasFreeTrial(address,address)", "23b62b75": "mainWallet()", +"23b650cc": "SetKey(address,string,bytes32,string,bytes32,bytes)", "23b6ce11": "buyDiscipleItem(uint256,uint256,uint256,uint256)", "23b6fc8b": "verifyUrl()", +"23b704bd": "StakeTokenAddr()", "23b715cb": "updateShare(address[],address,uint256[],uint256)", +"23b71b81": "setTradeWallet(address)", "23b7b140": "setFreezTime(uint256)", "23b7ec3b": "ownerOf(uint32)", "23b7fc86": "count_token_holders()", "23b80995": "saleOver()", "23b872dd": "transferFrom(address,address,uint256)", +"23b8f629": "withdrawTokenProfits(address)", +"23b8fabd": "punch(address,uint256)", "23b8feb0": "safeMul_dec(uint256,uint256)", "23b98f92": "getPOOL_edit_6()", "23ba3420": "t_Michail()", "23ba467a": "isLastRound()", +"23babfd0": "BountyStatus(string,uint256,address,uint256)", +"23bac5a2": "indicators(address)", +"23bacc83": "maintainenceTotalWithdrawal()", "23bb1f69": "prepareToScore(uint32)", +"23bb3415": "emergencyErnewithdraw(address,uint256)", +"23bb46b6": "commitmentsTotal()", "23bb8022": "getCurrentRateByTokenSold()", "23bb81ae": "transferSoldToken(address,address,uint256)", "23bba494": "setContribPeriod(uint256,uint256,uint256,uint256,uint256)", +"23bbd144": "updateTotalLimit(bytes32,uint256)", +"23bc2850": "crytic_test_must_revert()", "23bc29a0": "systemEndingPrice()", +"23bc839b": "getProductDetails()", +"23bc84ef": "executeDraw(uint8)", +"23bc9d31": "updateAave()", "23bcaae9": "newPost(string)", +"23bd2229": "claimReferReward()", "23bd4d7a": "organization()", +"23bd90b5": "permit(address,address,uint112,uint256,uint8,bytes32,bytes32)", +"23bd9463": "setLimitation(string,uint256)", "23bd9914": "_calcReward()", "23bda0ee": "MyCurrency()", +"23bda9d6": "cropsPerBlock()", +"23be170e": "_eBTC()", +"23be345c": "collateralManager()", "23be45e2": "matchOrders(bytes,bytes)", "23bef5dd": "storeWelfare(address,string)", "23bf0425": "fastEnd()", "23bf2973": "tgeSettingsPartFounders()", "23bfc777": "changeRoundDelay(uint256)", +"23c02f8a": "bxd()", "23c0889a": "initMinerData()", "23c105a2": "eliminateFrom(address,uint256)", "23c1236a": "burnFromByAddress(address,uint256,address)", +"23c19fbd": "artistFundSplitter()", +"23c1ee43": "getLockCount(address)", "23c2460d": "rate(uint16,uint256)", "23c2b4ea": "finishPREICO()", +"23c2d4a4": "PolicyRemoved(uint8)", "23c2de55": "SmartContractCasino()", +"23c2e2bc": "nodeInfo(address)", +"23c2e7de": "refundSponsor()", "23c32d74": "cstToMicro()", +"23c3b344": "MergedAstros(address,uint256)", "23c3dae7": "NewTranch(uint256)", +"23c41027": "reflink()", +"23c450b2": "pipeThrough(bytes2,bool)", "23c4841e": "ToggleFreezeBuying()", "23c4948c": "getDonator(address)", +"23c4e7a1": "BecameQueen(address,uint256,uint256)", +"23c553f2": "CROSSCHAIN_ADDR()", +"23c56fcc": "Trade(address,address,address,address,bool,uint256,uint256)", "23c5a088": "updateCost(uint256)", "23c5c55a": "buyImagePriv(uint256)", "23c5e967": "mul2Throw(uint256)", "23c639fe": "getback(uint256,uint256)", +"23c68b03": "ERR_CHANGE_NOT_READY()", +"23c69581": "transferToUplineDiamond(address,address,address,address)", +"23c69b3a": "claim_salary(address,uint256)", "23c69d2a": "currentDividend()", +"23c6a502": "rewardErc()", "23c6bc39": "addressThreshold()", +"23c6c68e": "setTimviWallet(address)", "23c6c98b": "activeShareholdersArray(uint256)", +"23c6e14c": "FLASH_TOKEN()", +"23c6ec2e": "TokenPriceChanged(uint256,uint256)", "23c731f5": "isCanList()", +"23c73fa9": "viewBonusOffer(uint256,uint256)", +"23c73fbe": "ChengeSex(uint32,bool,uint256)", "23c79ab3": "CoinFuns()", +"23c7e09c": "fundsReceiver()", "23c850db": "registerGold()", "23c860a8": "INTREPID_SHIP_PRICE()", "23c89a00": "requestSignature(bytes32[8],bytes)", +"23c8be6f": "buyBackOpenShort(uint256,uint256)", "23c94353": "currentTokenBalance()", "23c99826": "getDictJob(address,uint32)", +"23c9bc52": "crops()", +"23ca0cd2": "getTransactionCount(address)", "23cadd34": "move(address)", +"23caec69": "UpdateAdapter(address)", "23cafc3d": "voteNoLockByAdminBatch(address[],address[],uint256[])", "23cb7b19": "_influenceAlgorithm(uint8,uint256)", "23cba56f": "bonusProgramEnded()", +"23cbbca7": "kash_ycrv_uni_lp()", "23cc16be": "burnInvestorTokens(address,address)", "23cc3496": "_setRunesValue11(uint256)", +"23cc6186": "withdelegatecall(address)", "23cc75a8": "finalizeICO()", "23cc7615": "userIdIndex()", "23cc9a90": "addParticipant(address,address,address)", +"23cc9f37": "TotalStakes()", +"23cd19ff": "changeTo(address)", "23cd5090": "registerToProvider(address)", "23cd7cd5": "Model()", +"23cda576": "getTokenHandlerSupport(uint256)", "23cdd8e8": "log(string,bytes)", +"23ce03a1": "fromEthAmount(uint256)", +"23ce8e03": "pendingAuthorized(uint256)", "23ceb6d8": "mintTokenEscrow(address,uint256)", +"23ced135": "cashPriceCeiling()", +"23cf1c94": "_registerStandardAndCallback(bytes4,bytes4,bytes4)", +"23cf3118": "setMigrator(address)", +"23cfff41": "setAllowContractStatus(bool)", "23d0601d": "getAccountIdFromSignature(bytes32,bytes)", +"23d0e08d": "unifactoryAddress()", +"23d14d60": "addPoints(address,uint256,uint256)", "23d17a40": "addrBRXPay()", "23d1ab35": "donationReceiverLocked()", "23d1b8eb": "etherPayout()", "23d1c95e": "addProposal(string,string)", "23d1fe56": "s22(bytes1)", "23d24f24": "LogEscrowEth(uint256)", +"23d26253": "getOrgCount()", "23d2691b": "addAuditRequest(address,string,uint256)", "23d27633": "EtherLite()", "23d2b3aa": "HaoCoin()", +"23d308fa": "yourBBPLpBalance(address)", "23d32d6a": "generatedBytes()", "23d34f84": "setGuessAnswer(string)", +"23d39ab5": "gst2()", +"23d3a1db": "tokensSold(address,uint256)", "23d44dee": "collectedSignatures(address)", +"23d45851": "swapTokenToETH(uint8,uint256,address)", +"23d47275": "exchangeCallback(bytes32,uint256)", +"23d482ca": "gfcPrice()", +"23d4a3c9": "getEncodedOrders()", +"23d4ab02": "snfu34pt()", +"23d52499": "buysXid(uint256,uint256[],uint256,string)", "23d533c8": "EBCBToken()", "23d5a686": "getSpaceshipUpgradeCount()", +"23d60e2e": "addSynths(bytes32[],bytes32[])", "23d669db": "setValidationClosed(uint256)", +"23d6723e": "createMarket(address,string)", "23d6b008": "assignedAmountToTheFoundation()", "23d6c92f": "setFreelancerParams(uint256)", +"23d6f97d": "ETHLPperETHUnit()", "23d71b26": "mtrTokenFallBack(address,uint256)", "23d73ca5": "test_invalidEmptyNotOne()", +"23d7af24": "otherManagers(address)", "23d7caee": "BitMineToken()", "23d7e089": "getPotCost()", +"23d7ee89": "Settle(bytes32,address,uint256,address,uint256)", "23d808da": "getMatch(uint8)", "23d80d3a": "IfContractRegist(address)", +"23d840f5": "setParameters(uint256,address)", +"23d860bf": "create(address,uint256,address,uint256,uint256)", "23d862ed": "getAddressLockedLength(address,address)", "23d88efd": "preIcoTokenSupply()", +"23d8df45": "ashwin(uint256,uint256)", +"23d9c72d": "enterBetCheck(uint256,uint256,uint256,uint256,uint256)", +"23d9e3d2": "changeOfSwapValue(address,uint256,uint256)", "23d9ea80": "getOfferPriceCandy(uint256)", "23da9c4b": "WhiteListAccess()", +"23dab6f7": "normalID()", +"23dae830": "newToken(string,string,address,address)", "23db3e50": "_checkAreaAndCategory(uint256,uint256,uint256)", "23dbf825": "distributionComplete()", "23dc1314": "failSafeLimit()", @@ -20498,150 +37473,294 @@ "23dccbd6": "LogFollow(uint256,address,uint256)", "23dd03c3": "getLLV_edit_23()", "23dd523d": "unregisterMember(uint256)", +"23dd6c37": "quam()", "23dd797b": "setESOP(address,address)", +"23dd7f39": "commitBlock(address)", +"23ddd8ed": "_stakedTotalSupply()", "23dddaba": "simpleVotingDapp(bytes32[])", +"23de0b12": "buyMonster(uint256,address,uint256,address,uint8)", "23de1915": "NewTicket(address,bool)", "23de6651": "emitTransfer(address,address,uint256)", +"23dec976": "defaultFreezePeriod()", +"23deedcf": "withdraw(address,uint256,address,uint256,uint8)", "23defc77": "setHeir(address)", +"23df2ff4": "ForPStars()", +"23df93c1": "playerWithdrawList(address,uint256)", "23df9df5": "_refund(uint256)", "23dfed97": "emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"23e00c04": "swapNyanV1(uint256)", +"23e01019": "charityPercentOnContraction(address)", +"23e121be": "_participationCount()", +"23e18d72": "_payFee(address,uint256,uint256,address)", "23e1d351": "buyKeyUseBalance(uint256)", "23e1d8d0": "failedTimestampLength()", "23e1f881": "PendingOwnershipTransfer(address,address)", "23e25f7d": "sendReserveBalance(address,uint256)", "23e26c43": "datestart()", +"23e27a64": "disableToken(address)", +"23e30c8b": "onFlashLoan(address,address,uint256,uint256,bytes)", "23e375dd": "_computePrice(uint256,uint256,uint256,uint256)", "23e3d7a9": "updateDescriptiveInformation(address,string,string,string,string,bytes20)", +"23e3ec29": "getChallengeAmountDivisor()", "23e3fbd5": "depositOf(address)", "23e4172d": "testValidationOfDecrease()", "23e44848": "DPToken()", +"23e469fe": "crossReserveSourceAmount(uint256,uint256,uint256)", +"23e46e7c": "SetBlockPayouts(bool)", +"23e4714c": "AdAdded(uint256)", +"23e47a01": "compress(uint256[2])", "23e4d669": "getPlayerPortfolio()", +"23e52161": "erc20TokenApp()", +"23e53673": "transferingThroughFirst(address,uint256)", "23e53b2e": "setSiringAuctionAddress(address,address)", "23e5942a": "initWallets(address,address,address,address)", +"23e5c405": "swap1(address,uint256)", "23e5d13c": "declareWinner(address,bool)", "23e5e822": "mintToken(int256,address,uint256,address)", "23e5f1c5": "hour()", +"23e68cd2": "getMean()", +"23e6bcfd": "synchronous()", +"23e6f5e2": "setChainLinkStimulusOracle(address)", +"23e776d3": "getHandlerListLength()", +"23e77db3": "takeProfits()", "23e798e6": "getDocumentIdWithName(string)", "23e7a900": "setIcoEnd(uint256)", "23e7d9b2": "createInvoice(bytes32,address,uint256,string)", +"23e85bfb": "mineToken(address,uint256)", +"23e8cae1": "virtualSlippageFee()", "23e8cefc": "encodeIfElse(uint256,uint256,uint256)", +"23e92bd1": "makerToCompound(uint256,uint256,uint256,bool)", "23e957b6": "calculateScore(address)", "23e9637f": "setSoftCapInCents(uint256)", "23e9c216": "setBounty(address,string,uint256)", +"23e9f8c2": "setPoolIdByMaker(bytes32,address)", +"23ea76a4": "setApproval_Burn_True(address)", +"23eaa5df": "sysAdminSuccessShare()", "23eac4bd": "setTokenOwner(uint256,address)", +"23eadf09": "submitExit(uint32,bytes32,uint32,uint256,bytes)", +"23eaf5be": "event_divblk(uint256)", "23eb0197": "giveMemberAllowance(address,uint256)", "23eb3831": "PurchaseCapChanged(uint256)", "23eb861c": "unchainedMultisigVersionMajor()", +"23eba3e3": "addressToCampaignIDToFundsDonated(address,uint256)", "23ec5939": "returnInvestoramount(address,uint256)", +"23ec5a28": "yfsi_owner()", "23ec8f62": "ownerUnlockFund()", "23ecb66f": "getPreviousDate(bytes32)", "23ecc4a1": "claimAmountSet()", +"23ecdf61": "isTaxLess()", "23ecf108": "MartinKoToken()", "23ed0a2e": "registerWorker(uint256,uint256,bytes32,bytes32)", "23ed476f": "treasurySent()", "23edfb89": "cancelSaleWhenPaused(uint256)", +"23ee22cf": "top3VdvTrenMotCuLy(uint256)", +"23eee3e6": "GetProfileLevel(address)", "23ef2e4f": "stopPreIcoMint()", "23ef2e56": "setBAI(bytes32,address,int256)", "23ef604f": "removeOwnedNote(address,uint256,uint256)", +"23efeb12": "maxAirdropAmount()", "23f02f56": "crowdEther()", "23f0b2b6": "getProfile(address,string)", +"23f0fa77": "changeDistributionAmount(uint256)", "23f14e86": "setAutoAddress(address,address)", +"23f1d86d": "totalLPTokensYMENCRBMinted()", "23f1dbe0": "minBidPercentage()", +"23f1fe03": "hasNFTBonus()", "23f2cbb0": "sponsorGas()", +"23f30829": "executeTransaction(bytes,bytes)", "23f3ad03": "ParminderToken()", +"23f45f32": "IEF404I(address)", "23f4c025": "Cherrio()", +"23f5589a": "liquidationPenalty()", +"23f58243": "calcSwapErc20ToLunaInputs(address,uint256,uint256)", +"23f5c02d": "proxyAddress()", "23f5c64f": "get_data_owner(address,address,string)", "23f614dd": "TinyOracleLookup()", "23f64051": "setClaimToken(bool)", "23f64140": "depositAgent(uint256,uint256,uint256[],uint256[],uint256)", +"23f66e47": "createFixedProductMarketMaker(address,address,bytes32[],uint256)", "23f685dd": "getUnclaimedHalvingSubsidy(uint256)", +"23f6a0c2": "getProposalNoPoll(uint256)", "23f6e4fb": "Registered(address,address,uint256,uint256,uint256)", +"23f74136": "tpID_()", +"23f751e6": "setOstanLogisticManager(address)", +"23f75bf4": "version1Invest(address,uint256,uint256,uint256)", "23f7dc66": "hasReadership(address,uint256)", "23f806b7": "tokenAdvisoryBountyTeam()", "23f809f6": "generateAddAddressSchemaHash(address,bytes32)", +"23f8e23d": "setKoino(address)", "23f907d9": "MAXIMUM_ETHER_SPEND()", +"23f90f2c": "setCFo(address)", "23f938ee": "isTransferLock(address,address)", +"23f98c6d": "startLiquiditySixMonthLock(address)", "23fa370d": "suspendedUntil()", "23fa495a": "setFlatFee(uint256)", +"23fa9a1b": "bdoip01BootstrapEpochs()", +"23fabe22": "rateBeforeBonus()", +"23fbd1c7": "burnFRAX(uint256)", +"23fbe7f1": "viewClaim()", "23fcdb20": "getRequiredSigs()", "23fd0176": "destroyCredits(uint256)", +"23fd0e40": "myNumber()", +"23fd4156": "DefiDockTo()", "23fd4524": "OMT()", +"23fd5b25": "winnersTimestamp(uint256)", +"23fd6eeb": "minHarvestInterval()", +"23fd97c8": "messagesender()", "23fe073e": "BancorQuickConverter()", "23fe1da1": "purchaseWithETH(address)", "23fe5b90": "hardCapFundingGoalInCents()", "23fe6146": "pushIssuers(address[])", +"23fea5ed": "groupFinished(bytes32)", "23fed09e": "hasEnoughFund()", +"23fef0c0": "setLengths(uint256,uint256)", +"23ff0e75": "Burned(address,uint256,uint256)", "23ff2af0": "setAttrs(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"23ff34cb": "claimGuardianReward(address)", +"23ff7955": "ViewDLRequestDetail(address,uint256)", +"23ff85f9": "mapWalletAddressToNode(address,address)", "23ffcc3e": "PenchantICO()", +"24000471": "addToUINT()", +"240028e8": "isSupportedToken(address)", +"24003c69": "dynamicTracker()", "24008a62": "repayBorrowAllowed(address,address,address,uint256)", "2400b582": "_issue(address,address,uint256,bytes,bytes)", +"2400bf6e": "countDownOverSet()", +"2401a841": "UpdateLockedAmount(address,uint256)", "2401db10": "sendFunding(address,uint256)", "24021127": "_setOriginationFee(uint256)", +"2402453b": "LogErrorWithData(string,string,bytes32[])", "2402598c": "BNSToken()", "24026bfb": "getMarketOrderTrust(uint256)", +"24028d12": "rewardProjMapping(address,uint256)", "2402ae57": "YudizCoin()", +"2402d2be": "getBidInterval()", +"2402e617": "activatedSince()", "24032866": "checkExecutionAuthorization(address,uint256)", "24038339": "updatePriceAndDenominator(uint256,uint256)", "24038d2e": "purchaseArmy(uint256)", +"2403ba53": "checkPropertyOwner(bytes32)", "2404608f": "getSignatures(string)", +"2404dbd3": "stableTokenFee()", +"2404e26d": "toRedeem(uint256)", +"2404fc57": "triggerCrossFork(string)", "24052927": "velReduction(int256)", "240557b8": "cleanTokensAmount(address,uint256)", +"24059146": "playBatch(uint256)", "2405b1a3": "SwissBit(uint256)", "2405d03e": "refundTokensPurchase(address,uint256)", "2405e3c6": "initial_supply()", "24064617": "getMom(address)", "2406cedb": "setPackageOwner(bytes32,address)", +"2406d0da": "checkOldPool()", "2406e626": "createPool(address,uint256,uint256,uint256,uint256,uint256,uint256)", "2406e9fa": "playRandom(address)", "240705eb": "withdrawWithFee(address,uint256,uint256)", "24070feb": "_create(address,uint8,uint8)", +"24076c57": "invitationStorage(address,uint256)", +"24084ad5": "B18(bytes)", "240860f1": "setHasCommissionerAuction(uint32)", "2408771e": "validateInvestmentGroups(address[])", "240961db": "showPoolOwner(uint256)", +"240976bf": "setIsPaused(bool)", +"2409a119": "newBunch(uint256,uint256)", "2409dfa2": "drawback()", +"240a492e": "changeMaxWeiPurchasable(uint256)", +"240a66e6": "mistocp()", +"240aa62c": "unreleasedLpAmount(address)", "240ad8bd": "applyAsProvider(string,string,string,string)", "240bd9e6": "DcorpProxyCreated(address,address)", +"240c06da": "restartNewGame()", "240c2709": "toReserved(address,uint256)", +"240c57da": "gaufToken()", +"240c6230": "viewStaking(address,address)", "240cf1fa": "changeOwnerSigned(address,uint8,bytes32,bytes32,address)", +"240d7045": "loyaltyFee(uint256)", +"240d9cba": "sellVault(uint256)", "240dfd6e": "stopEnrollment()", "240e07e0": "impl_apply4Redeem(address,uint256)", "240e0b2e": "JinKuangLian()", +"240e5a32": "process(address[],uint256[],address[],string[])", "240ecad5": "transferViaProxy(address,address,uint256)", "24108475": "vote(uint256,string)", +"2410d887": "setIsPair(address,bool)", +"241111c0": "tokLeft()", +"2411643b": "transferNestInPool(address,address,uint256)", +"24117cdc": "setDiscountRate(bool,uint256)", "2411ca69": "startPrivatesaleDate()", "2411e6a3": "NonEmissiveToken(address,string,uint8,string,string,uint256)", +"2411e717": "transferRebasership(address)", "2412bdb8": "exchange(address)", +"241321fe": "stopPausable()", "2413372d": "TestETCCoin()", +"24140acc": "workingKebaber(address)", "24141f14": "CRYPTOHEDGECoin(uint256,string,string)", +"2414955e": "get_CT_balance()", +"241497a3": "priceIncrement(uint8)", "2414b63e": "CasinoBank(uint256,address)", "2414e134": "NEWCICO(address)", +"24151e47": "withgain(uint256)", "24153b73": "Tosh(uint256,string,uint8,string)", +"2415dc76": "updateSandwich(address)", +"2415fe05": "getDivs(address)", +"24160baa": "newVote(bytes,string,bool)", "241673e8": "withdrawTokenToFounders()", "24167745": "ShamelessUETRipoff()", +"2416e77b": "tend(address,uint128)", +"24173597": "setStartBlockNumber(uint256)", +"2417395c": "getBounty(bytes32)", +"2417c298": "DEFAULT_EXP_MULTIPLIER()", "2417f31d": "maxPresaleTokens()", +"24182a9e": "liqTokenTotalsByDay(address,uint256)", +"2418a715": "transferBNB(uint256,address)", +"24190e9c": "valueHolder()", "2419217e": "teamAddresses(uint256)", +"24192f84": "replaceProduct(address,address)", +"24195f20": "addNewLevel(uint256)", +"24199bfe": "link_eth_usd()", "2419ef4d": "Coverage()", "241a2305": "MultiTransfer(address,address[],uint256[])", +"241ab5ad": "SetUV2(address)", +"241abd72": "supportedProtocols()", +"241b0b49": "adminEmergencyWithdrawAccidentallyDepositedTokens(address,uint256,address)", +"241b2e42": "withdrawVoteTokens(uint256)", "241b701f": "openPot()", "241b88b6": "threeMillionTwoHundredThousand()", +"241bbb8a": "ownerAddressToUrl(address)", +"241bd28a": "getThreeInches(uint256)", +"241c5912": "check(bool)", +"241cebbb": "getPercentFromCTokenBalance(uint256,address,address)", "241d1108": "nextDerivativeToken()", "241d2c76": "getCount(address,string)", "241d7aea": "BeautyCoinToken()", +"241dce81": "uuids(uint256)", "241de9e9": "proxy(address,address,uint256,uint256)", "241e0fa0": "updateBytes20inBytes(bytes,uint256,bytes20)", +"241e9754": "getPreviousBidder()", "241ea03c": "Pregnant(address,uint256,uint256,uint256)", +"241f0bfa": "deadlineTime()", +"241f30da": "bids_sorted(uint256)", "241f675d": "CMO_SHARE()", +"24205008": "approve_284(address,uint256)", "24206c2e": "updateTokenAddress(address,address)", "2420703e": "transfer_tokens_through_proxy_to_contract(address,address,uint256)", +"24207e02": "resell(address,address,uint256)", "2421101f": "returnAddress(address)", +"2421a9f2": "_stakingToken()", "2422224e": "signatures(bytes32)", +"242222e0": "deprecateContract(address)", +"242232d1": "approveTransaction(uint256)", "24223a3c": "allowanceItem(uint256,uint256,uint256,address)", "2422d991": "getADR()", +"24237c74": "_teamNetworkEarnWalletStauts(address,address)", +"24238d4a": "recoverERC721Safe(address,address,uint256)", "2423a088": "UNKNOWN_TYPE()", "24241ebc": "challengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", "2424276c": "freezeMultiAccounts(address[],bool)", "24248168": "getBracketScore(bytes8,bytes8,uint64)", +"2424be5c": "urns(bytes32,address)", "24250852": "mintToPublic(address,string)", +"242562e8": "changeConfigValue(bytes32,uint256)", "2425ce3e": "upgradeTank(uint256,uint8)", "2426169a": "_getSwapType(bytes32)", "24263f77": "mintICOTokens(address,uint256)", @@ -20651,87 +37770,141 @@ "242655d4": "prefixedEncode(address)", "24270d1e": "get_arbits_max_contribution(address)", "24272479": "_finishBet(uint256)", +"2427541d": "isStakingFeed(address)", +"24276c5f": "pendingTRPC(uint256,address)", "24280cc4": "createPuppySaleAuction(uint256,uint256,uint256,uint256)", +"24285762": "getPurchasedAmount(address)", "24285ade": "AlpineMegalith(uint256,string,uint8,string)", +"2429391b": "getfarmparticipandetail(address)", "24294b1f": "startFirstRound()", +"24297eaf": "distance25(uint256)", "2429b755": "isPrivateSaleRunning()", "2429d61a": "isOnSale(uint32,uint64)", "2429ee2a": "isBountyPayStage()", "242a0087": "getParents(uint256)", +"242a5a6a": "uniswapAddLiquidity(uint256,uint256,uint256)", "242a60b5": "withdrawValue(bool)", "242a7450": "validateTenant(address,bytes32,uint256)", "242aa460": "presaleInvestors(address)", +"242aa63f": "setGoverFundDivRate(uint256)", +"242ab021": "apiConsumer()", +"242ae358": "delegate(address,address,bytes32[],uint256[])", "242aeac1": "DiscoverCoin()", "242b0a73": "rewardPayedOf(address)", +"242b2254": "numberOfCanceledHashesOfToToken(address)", +"242bc643": "weaponApprove(address,address,uint256)", +"242bdd9d": "pendingBDO(uint256,address)", "242be01a": "_setAppIfNew(bytes32,bytes32,address)", +"242c2929": "TransferHandler()", "242c721e": "testSetOrganiserUsingDeployedContract()", "242c9ce9": "_burnFrom(address,address,uint256)", +"242cae9f": "approveOperator(address)", "242ce07b": "frozensTotal(address)", "242d1259": "WeiWeiToken(address,uint256)", +"242d184b": "tradeRoutes(address,uint256,address,uint256,address[])", "242d7dba": "totalAmountRaised()", "242d9f69": "getOraclizeWinnerGasFee()", "242db433": "getMarketManagerAddress()", "242ddf37": "NewBook(bytes32,address,uint256)", "242de145": "TokenCreationContract()", +"242df9e1": "minimumStakeTime()", +"242e0dd2": "withdrawFeeEarningsForAddress()", +"242e544a": "diffractionFromToken(uint256,bool)", "242ed69f": "setActiveTranscoders()", +"242f1bf3": "memeLtdNft(uint256)", +"242f4158": "__getVault(address)", "242fc36e": "cashback()", +"243028ba": "ERROR_CODE_NOT_ENOUGH_UNLOCKED()", "243056d6": "writeMerchandises(uint256,string)", "2430731f": "cancelRecurringBillingInternal(uint256)", "2430d881": "getLastAction(address)", +"24310ec9": "BatchTransfer(address,address,uint256,uint64)", "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)", +"2432a15f": "token0Slot()", "2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", "2433c978": "setupOwners(address[])", "2433f617": "getIIPTotalSupply()", +"24341e01": "modifyParameters(bytes32,uint256,uint256,address)", "24349551": "deleteContract(uint256,uint8[],bytes32[],bytes32[])", +"24349671": "withdrawShare()", "2434cf10": "UseBySoftware(address)", "2434ec3e": "declareLost(address,bytes32)", +"243504d4": "diplomasBySchool(address,uint256)", "243527a2": "addID(address,bytes32)", +"24352a45": "currentCumulativeCost()", "24355ea6": "isA(address)", "24359879": "ownerAt(uint256)", "24361cec": "picops_block()", "2436219c": "doubleEntryPrice()", "243669ad": "totalOwners()", "2436b1d2": "NUM_COUNTRIES()", +"2436cc57": "makerMinimumNonce(address)", "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)", +"2437ed34": "modifyParameters(address,address,address,bytes32,uint256,uint256,address,uint256)", +"2438628c": "kids(address)", "24386b3e": "testMultitransfer3()", +"24386d4b": "ecadd(uint256,uint256,uint256,uint256,uint256,uint256)", "243870bd": "createChannel(string,bytes,address,address,address[],uint256[],address,uint32[])", "2438b674": "window2TokenExchangeRate()", "2438db59": "setServices(address,address)", +"2439725a": "setPeg(uint256)", "243a28eb": "returnedWei(address,uint256)", +"243af309": "g6(uint256)", "243af82d": "stageBuys(address)", "243b22cf": "setGameResult(uint256)", "243b2a39": "createDispute(bytes32,address,address,bytes32)", +"243b68f9": "bytesToBytes32Array(bytes,uint256,uint256)", +"243bbfb7": "x_adminSetDAPPAllowed(address,bool)", +"243bcfcb": "limit(uint256)", +"243c140b": "getHolderClaimableTokens(uint256,address)", "243c33a1": "testCreateShortId()", +"243c51b9": "getNamefromTOKENID(uint256)", +"243c8150": "ethRebPrice0CumulativeLast()", +"243cfc52": "maxTransferFee()", "243d230c": "dateTo()", "243d3827": "getRewardInfo(uint256)", "243d51b4": "betD()", "243dc8da": "getFoo()", +"243df686": "allTimeRefEarnings_(address)", "243e280b": "publish(string)", +"243e7d36": "getCoinbaseAddress(int256)", "243eb89f": "endIcoMainSale()", +"243f2473": "renounceBlacklistAdmin()", +"243f43ff": "ovrg()", "243f6b58": "removeKYC(address)", "243f6e0c": "change_active(uint256)", "243feeb0": "ADDR_TKG_ASSOCIATION()", +"24403c99": "setGovToTimeLockETA(uint256)", +"24406a58": "buyWarriors(uint256,uint256,uint256)", +"2440bd68": "ayylmaoToOwner(uint256)", "24415953": "lengthEqual(int256[],uint256,string)", "244159af": "getPriceOneToken()", +"24416c72": "takeOffer(address,uint256,uint256,uint256)", +"24416d6f": "contractEtherSwap(uint256)", +"24417733": "INX_DeletedOperator(address)", "24417f39": "getCostForHealth(uint8)", "24425cbf": "TEST_CONTRIBUTION()", +"24428221": "reserve(uint256,uint256)", "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)", +"2443a33c": "settlePrice(uint256,uint256,uint256)", "2443f0ae": "derivePayoutDistributionHash(uint256[],bool)", "24444749": "NUM_POTATOES()", +"24447de4": "allowsDecrease(uint256,uint256,uint256)", +"2444a165": "last_bond_nonce(uint256)", "2444d352": "setWhitelistOff()", "24452f44": "tryBuy(uint256,uint256)", "24453ed6": "getCustomerTxAmountMCW(address,bytes32)", @@ -20739,119 +37912,230 @@ "24455e7d": "createNetwork(string,string,uint256,uint256,uint256,uint256,uint8)", "24457036": "LockChainFundDeposit()", "2445caf1": "ERC20Token(uint256,string,string,uint8)", +"2445cdb1": "currentA()", +"2445f323": "setPercentageToBurn(uint256)", +"24461c61": "depositProfiles(uint256)", +"244633ce": "seniorBondId()", "24463cbe": "AddressDailyReward(address)", +"2446ce3f": "sumOfOutputETH()", "2446e1de": "icoClose()", +"244709b5": "REQUIRED_ALLOWANCE()", +"2447d9af": "total_generat()", "2447fe10": "initBridge()", "2448fe2f": "redTeamSupply()", +"24492011": "distributeToken(address,uint256,address[],uint256[])", "24496026": "removeQuoter(address)", "244967b3": "start_game()", "24497829": "ethFundAddress()", +"2449c0c1": "setDebaseWhitelist(address,bool)", "2449dd55": "sendCommission()", +"244aff2f": "__OneMinter_init(address,address)", "244b252a": "SaturnToken()", +"244b330a": "canIswapMyTokenPrediction(address)", "244b34c5": "Stage2Deadline()", "244bfa6b": "buyCelebrity(uint256)", "244c23ee": "Token(uint256,string,uint8,string)", +"244c485b": "SubirCertificado(string,string,string,uint256)", "244c757a": "getCurrentIcoNumber()", +"244c8d79": "TokenSold(uint256,uint256,uint256,address,address,string,bytes7)", "244c91d4": "setMaxIssuers(uint256)", "244c96a1": "compareOrders(uint128,uint128,uint128,uint128)", "244cb924": "EnableSelling(uint256)", "244cee6d": "helloWorldWeb()", "244d04f5": "finalizeTokensale()", +"244d268e": "liqproviderFee()", +"244d6daa": "resources(uint256)", "244dad09": "createdUser(bytes32)", "244ded7a": "ChangeOwnership(address)", "244e0c87": "balanceOF(address)", +"244e6238": "removeSchainType(uint256)", +"244e84ff": "getMinimumSlowRounds()", "244eab9e": "lovelock_price()", "244eba55": "frozenDaysForBounty()", +"244ec8ae": "Nextbal()", "244f4894": "getWithdrawed(address)", +"244f73cf": "currentDistributionEndBlock()", "244f828a": "SetHFee(uint16)", +"244fa3ac": "_claimFrequency(address)", "244fcd03": "removeRelease(bytes32,string)", +"244fcea5": "proposeRevoke(address)", "24500e05": "tokenAdvisorPartners()", "24503ab0": "setDefaultTransferGas(uint256)", "24506e2a": "KoalaChain()", +"2450a35a": "getRewardsPercent(uint256)", +"2450d06c": "viewPrivSetable()", +"2451000a": "transerToContractMain(uint256,uint8,uint256,uint256,bool)", "24516000": "getPOOL_edit_26()", "24519a6a": "takeFee(address,address,uint256,uint256)", "2451a899": "isSuccess(uint256)", "2451b3d8": "accessProvider()", +"2451c39f": "getTurnUser(uint256)", +"24524a96": "minApy()", "24528499": "_getSettingVariables()", "24534192": "addMutagenFight(uint256,uint256)", +"24535df5": "l_l2()", +"24536055": "getExchangeRateEd(uint256)", +"2453732a": "getParametersHash(bytes32,address)", "2453759a": "setNoDataSubcontract(address,uint256,uint256)", "2453ffa8": "orderCount()", +"2454047c": "transferPaybackAndFee(address,address,uint256,uint256)", "24541f78": "getTransferProxy(uint32)", "24545f82": "LULUToken()", "2454d1f0": "incFightWin(uint256)", +"24552f33": "MIN_RESERVE_RATIO()", +"24558995": "pancakeSwapRouter()", +"245590da": "UnfreezeTokens(uint256)", +"2455a035": "vestingAsOf(uint32)", "24562747": "tokensPerETH()", "245678d6": "MINBET()", "24571783": "NESTFAME()", +"2457a2fa": "setdefaultWhitelistContractAddresses(address)", "2457d765": "CHSC()", +"245844c6": "pullTheRug(uint256)", "2458d472": "getCurrentStage(uint256)", "2458d606": "exchange(address,uint256,string,uint256)", "2458f2a8": "swarmTree(uint256)", "2458f679": "instContWallet()", +"2459588e": "privateThirdWallet(address)", +"2459bac8": "issueTokens(address,address,uint256)", +"2459cbce": "sporePerJem()", +"2459eca5": "DOG_2()", "245a03ec": "scheduleSetIt(uint256,uint256)", "245a30ec": "setDataAuction(address)", "245a367c": "GetParticipant(address,address)", "245a6f74": "isProxyLegit(address)", +"245a7bfc": "aggregator()", "245a810b": "addMetaData(bytes32,bytes32,bytes32,bytes32[],bytes32[])", +"245ac2a7": "activateBooster(uint256)", "245ae4a0": "slashUsername(bytes,uint256)", +"245b211d": "bonusFinishUpdate(uint256)", "245b565d": "ballotEncryptionSeckey()", +"245b59bb": "acceptBidForGol(uint256,uint256)", "245ba519": "addVerifier(address,address)", +"245bf781": "SetExtraLimit(uint256)", +"245c2efb": "refinanceLoan(address,address,uint256)", +"245c7c60": "_duration()", "245ccdb7": "setFeePrice(uint256)", "245d1314": "signUserChange(address)", +"245d1a1a": "hatcheryFairy(address)", "245d5556": "_deleteEntry(bytes32)", +"245dc4c9": "getDeposits(uint256[])", +"245dd242": "setPlugHelper(address)", +"245e2077": "setVoter(string)", "245e22de": "transferDirectly(address,address,uint256)", +"245e41f4": "levelCost()", "245e70f0": "_commitBallot(bytes32,bytes32,bytes32,address,uint64)", "245f57a9": "asyncSendSilently(address,uint256)", "245fa2ab": "newBankManager(address)", +"245fc1ba": "isStaking(address,uint256)", +"245fe37e": "idToVotersArray0(uint256,uint256)", "24600157": "CUBES()", "2460053e": "LegionToken(uint256,string,string)", "24600fc3": "withdrawFunds()", +"2460ebdd": "methPerBlock()", "2460f09d": "MarketContract(string,address,address,uint256[5])", +"246126bd": "weth_address()", "24612b5d": "GenbbyToken()", +"246132f9": "notifyRewardAmount(uint256,uint256)", +"246151e3": "acoHashes(bytes32)", "24619da7": "RechargeMain(address)", +"24620639": "updateShortRates(bytes32,uint256)", "24627547": "vestingFunc(uint256,uint256,uint256,uint256,uint256,uint256)", "2462a0d5": "funcFromC1()", "2462f6f1": "setFadeoutStarts(address,uint32)", +"2463a55a": "setContracts(address,address,address,address,address,address)", +"2463cb1c": "redeemStakeGain()", "2463de5a": "getPastWinnerTimestamps()", "24642510": "rechallengePossible()", +"246439e6": "_getOrdersCount()", "24645254": "getBalance(uint8,address)", "24645c5a": "totalTokenSale()", "24646ce4": "getBuySellSum()", "2464a69f": "_computePublisherCut(uint128)", +"2464e10d": "isArbable()", +"2464e15d": "getPrice2()", +"2464eb2b": "globalChangeStreamTime(uint256)", "24652ba2": "PeerBudsToken()", +"2465a21a": "deactivateAssetIntroducerByTokenId(uint256)", +"2465e4aa": "registerPairDesc(address,address,uint256,address)", +"2465fdf8": "getOrderBonus(uint256)", "24664106": "mintRep(int256,address,uint256)", "24667568": "ORGANIC(uint256,string,uint8,string)", +"24672594": "initProduct(address,address,address,uint16,address,uint256,uint32,uint256,uint256)", "24675116": "PK(uint8,bytes32)", "24676ae3": "SmzdmToken()", +"2467d37d": "totalCards(uint256)", +"2469630e": "getPoolElement(address,address)", "246982c4": "getPerson(uint256)", "2469a846": "terminateCrowdSale()", "2469c14e": "setState(address,uint256)", +"2469ec6c": "killWerewolfAsset(uint256)", +"246a1673": "thisDayEnd()", "246a3234": "getEthChfPrice()", "246a44f8": "isNeedCloseCurrentGame()", +"246b1f3a": "_lock(uint256,uint256,address,uint256,uint256,bytes32)", +"246bb555": "engineerRoundNumber()", +"246bb865": "updateOracleWeightTerm()", +"246bc19b": "updateWeightsGradually(uint256[],uint256,uint256)", "246c01cd": "tryUpgrade(uint32,uint8)", "246c02e6": "check_depth(uint16)", +"246c32f8": "isMajor(address)", +"246c76df": "changeWithdrawTimeout(uint256)", +"246caa25": "isFastStaking()", "246cbacc": "test_twoInvalidEqAddress()", +"246cc41b": "deposit_to_eth2(bytes,bytes,bytes,bytes32)", +"246d28d7": "indzPoxTurYesYetimEm(uint256)", "246d4098": "openToThePublic()", "246d41a9": "incrementTotalVoters()", +"246d5604": "changeRewardPerToken(uint256)", +"246d7a65": "aggregatorsOfAssets(address)", +"246ddb73": "planetETHShare()", +"246ea64e": "toBurn()", "246eb968": "deleteUri(uint256)", +"246ee4c4": "stakerlist()", "246f02bb": "tickets_bought(string,uint256)", "246f0ca4": "KuaiKanToken(uint256,string,uint8,string)", "246f1e17": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint8)", "246f8b96": "removeOwner()", +"246f938f": "currentRate(uint256)", +"246ff561": "RESERVED_LOCKED_TOKENS()", +"2470206d": "OrderPlaced(address,address,uint256,uint256)", +"24705db3": "bondContract(address)", +"24708031": "isEveryoneBroadcasted(bytes32)", +"247092ce": "wpcInitialIndex()", +"2470dfd5": "checkAndDistributeBal()", "247121e3": "MakeAdministrator(address)", +"247134f4": "getUsrId(address)", +"2471e390": "restrictAddress()", "2471fa1c": "_building(uint256)", "24724b5b": "changeAmisWallet(address)", +"24735503": "createAcoToken(address,address,bool,uint256,uint256)", +"2474186b": "VaultRequestedUpdateForLockedVotingTokens(address)", "24743d40": "f1(bytes32)", +"247492f8": "actionType()", "24749b59": "bonus(uint256)", +"24749d5c": "ovmEXTCODEHASH(address)", "2474a21c": "collectedEther()", "2474e236": "TOKENS_MAXIMUM_SUPPLY()", "24752467": "getParticipantPublicKey(bytes32)", "247534cf": "WrapperLock(address,string,string,uint256,address,bool)", +"24758388": "NewFight(uint32,uint32,uint256,uint16,uint16)", "2475a9b3": "UTXORedeemed(bytes32,uint8,uint256,bytes,bytes,uint8,bytes32,bytes32,address,uint256)", +"24770081": "sendGwei(address)", +"24777c50": "pendingDebtValOfBankETH()", +"2477befd": "addFile(uint256,string,string,string,uint256)", +"24783039": "shares_holders(uint256)", +"24785172": "getEthAddress()", "24788429": "removeExecutor(address)", "24788ed9": "ledgerContractAddr()", +"24792156": "exitMrPool()", "247956f1": "withdrawEtherInBatch(address[],uint256[])", "24797d1b": "decreaseThreshold(uint256)", +"2479b177": "feeDistribution()", +"247a21fe": "weivalue()", +"247a6c07": "setCumulativeSequencedGasAtEpochStart(uint256)", "247ab51f": "markAsProcessed(uint256)", +"247ac0a5": "setProtector(address)", "247aebbb": "tokensup(uint256)", "247b127d": "MiIToken(uint256,string,uint8,string)", "247b188b": "icoTotalSupply()", @@ -20861,149 +38145,259 @@ "247bb432": "test_addAndRemovePermissions()", "247bbed7": "borrowTokenFromEscrow(uint256,uint256,address,bool)", "247c6c70": "priceLC()", +"247ce85b": "bond(address)", "247cf1aa": "lengthNotEqual(bytes32[],uint256,string)", "247cff43": "freezingManager()", +"247d9bb9": "setRules(uint256,uint256,uint256,uint256)", +"247ea264": "NextVault()", "247ecab5": "bonusDrop(address,uint256)", +"247ed3a2": "poolPercent()", +"247efc83": "eatherEarnedInCurrentRound()", +"247f24a9": "finishETHSpentOracleChange()", +"247f3394": "GetAccountIsLockCount()", +"247f8e14": "checkStaked(address)", +"247fd03c": "getInitData(address,address,address,bytes)", "24804cef": "Deed()", "24806d4a": "getBounsInRound(uint256)", +"24809ecc": "triadFrom(address,address,uint256)", "2480d9e6": "saleAirdrop(address,uint256)", "2481325a": "ExtremeCoin()", "2481851a": "finalizeName(address,string)", "24819384": "btycaddmoney(address,uint256)", "2481c51c": "includesGblock(bytes32)", "2481f92c": "setClockAuction(address,uint256)", +"24826190": "InvestmentGuideWithdrawReward(address,uint256)", +"2482d0d1": "inLockdown()", +"24835805": "checkBytesAndSend(address,bytes,bytes)", +"248363c2": "uniswapV1Oracle()", "2483761f": "buy1ktickets()", +"248391ff": "convert(address,address,uint256)", "24841bbd": "interfaceBurnTokens(address,uint256)", "24845131": "proclaimDeath()", "2484a023": "verifyTetherCurrency(address,uint256,string)", +"2484ce9c": "makerEthPriceFeed()", "24850e10": "releaseFunds(bool)", "24851914": "isTeam(address)", "2485484d": "clearGenVaultAndMask(address,uint256,uint256,uint256)", "24854bd8": "updateThirdExhangeRate(uint256)", "248582b0": "receivePaymentForGoodsSoldEarly()", "24860443": "toBytes2(bytes,bytes,uint256)", +"24860808": "callProxyManager_getBorrowLimit(uint256)", "24863354": "saleOverReachMaxETH()", +"248659f0": "TokenBack(uint256)", +"248742d4": "erc20Stakes(address,address)", "24876434": "addPriceTier(uint256)", "24880bcb": "getTierUnsoldTokens(uint256)", "24884fc2": "startPeTime()", +"24885087": "factoryApproved(address,uint256)", "24887c04": "SieChain()", "24888154": "Buy(uint64)", "24888b4a": "isVoterLocked(address)", "24889e37": "removeAmountForAddresses(uint256[],address[])", +"2488a69e": "_collectPatronagePatron(address)", +"2488b414": "log(uint256,address,address,address)", +"2488f03f": "dgmToken()", "2488fd55": "countPlayersInPosition()", +"2489050c": "revocable(address)", +"24892688": "newApplication(bytes32,uint256,uint256)", "24896a47": "signPA(uint32)", +"2489715a": "getTotalPledgeAmount(address)", +"24899ad0": "assemblyTest2(address,uint256,bytes)", +"2489fa7e": "totalAmountForBuying()", +"248a9ca3": "getRoleAdmin(bytes32)", "248b0dba": "toBytes16(bytes,bytes,uint256)", +"248b18c8": "addRelayer(string,string)", +"248b1fba": "set_owner(address,uint8)", "248baabd": "FUND_ADDR()", +"248bfc3b": "addFile(string,string)", "248c4439": "setFunctionOnePrice(uint256)", +"248c44e8": "transfer2()", "248c6380": "_tokenBankrollBuyIn(uint8)", "248d14eb": "allowPriceUpdate()", "248dd407": "Transfer(uint256)", +"248de5bc": "isFinalDay(uint256)", +"248df531": "setAllNeededAddresses(address,address,address)", "248e150a": "getFirstAuctionsExtendableStartDate()", "248e1993": "setMinTarget(uint256)", "248e4dd4": "pank13()", "248e86e6": "ProjectToken(uint256,string,uint8,string)", "248ec326": "DAILY_LIMIT()", +"248f2926": "adjustSell(uint256)", +"248f5eff": "getWeight(uint256,uint256,uint256,uint256)", "248fcccc": "CRSAccount()", +"248ffbc1": "getRemainingTeasury()", "24900d7c": "initializeAddresses(address,address,address,address,address)", +"24901218": "preserveFromToken(uint256,bool)", "24902e24": "LOG2_E()", +"24906ef9": "tokenAllowAll(address,uint256)", "2490be24": "exchangeEurToEth(uint256)", "2490e13f": "editPieceData(uint256,string,string)", "2490e16e": "getDirectBoughtTokens()", +"2490fe36": "initializeV2(uint256,address)", +"2491798e": "feedMultiple(uint256,uint256[],uint256[])", "24924bf7": "maxParticipants()", "249292b9": "testUnlockedDay()", +"2492e38c": "hasSpawned(uint256,uint256)", "2493097b": "finalizeDestruction()", "24932186": "enterOrder(uint128)", "24937124": "fetchPaidOrdersForMerchant()", "2493a2f2": "setBonusTokenRateLevelOne(uint256)", "2493d006": "openWeek()", "2493d669": "AllowanceGranted(address,uint256)", +"2493e0a5": "setTokenIdsForClasses(uint256[6])", "24941147": "cancelProject(uint256)", +"24943907": "GetCurrentEsusuCycleId()", "24943c7d": "resolveDispute(bytes16,address,address,uint256,uint16,uint8,bytes32,bytes32,uint8)", "2494aef9": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE2()", "2494e267": "CXLExchangeRate()", +"2494ed88": "getMultiplierOfBlockIndex(uint256)", +"24950417": "PayoutCumulative(uint256,uint256)", "24953eaa": "removeAddressesFromWhitelist(address[])", "249559ad": "computeVoteOutcome(uint256)", "249586f2": "editPayoutSetting(uint8,uint16)", +"2495a599": "underlyingToken()", "2495c0ce": "stopVote()", "24968a70": "getHomePost(uint256)", "2496a431": "robPantry(address,uint256)", "2496b796": "sellMyTokensElixir()", +"249715b3": "removeReserve(address,uint256)", +"2497aee6": "accountSnapshots(address,uint256)", "249830d8": "setUnclaimedPlotPrice(uint256)", +"24991d66": "enterMarket(address,address)", "24992680": "SelfKeyCrowdsale(uint64,uint64,uint256)", +"2499936f": "contractBeginTime()", "24999c9c": "bonusSignalValue()", "2499a533": "Purchase(address,uint256)", "249a1120": "licenseTermsMaxCostPerSec(bytes32,bytes32)", "249a5438": "getInvestorsAndBalances(address)", +"249aa1d0": "pre_kyc_bonus_denominator()", "249aa292": "preIcoPrice()", +"249ab761": "flashValue()", +"249b153b": "userClaimableRewardPerStake(address,address)", "249b4d0b": "removeTrustedIssuer(address,bytes)", "249b4d4f": "transferContractUser(address)", "249b7c19": "presaleEndTime()", +"249bbe91": "calculateLoanOriginationFee(uint256)", "249bc291": "transferMintMaster(address)", +"249c7fb0": "getGlobalId(uint256,uint256)", +"249c981d": "batchUnrestrictCountries(uint16[])", "249cb3fa": "canImplementInterfaceForAddress(bytes32,address)", +"249cc36c": "getNarBarFooArrays()", +"249d39e9": "BPS()", +"249d3c25": "ChickenToAltar(address,uint256,uint256)", +"249d8eb7": "Allocate(address,uint256)", +"249d9123": "getHwm(uint256)", +"249da605": "verify(address,bytes32,uint256,bytes32[])", +"249dc51b": "_calcMultiplier(uint64,uint256,int128)", +"249e071f": "getamountToken()", "249eae4d": "addInvestors(address[],uint256[])", "249f1f22": "insertNodeSorted(uint256,address)", "249f77ef": "CancelSimpleOffer(uint256)", "249f7aa0": "exchangeRateChangesBlock()", +"249fb9b4": "setPerformanceTreasuryFee(uint256)", "249ff838": "getAddressByNames(bytes32[])", +"24a01da1": "MYTHIC_THRESHOLD()", "24a039c7": "CBToken(address,uint256)", "24a084df": "sendValue(address,uint256)", +"24a08868": "averageRateMaxDeviation()", +"24a0e406": "acoPoolUnderlyingPriceAdjustPercentage()", +"24a0f523": "expiry(address)", +"24a12366": "AddressRemoved(address)", "24a12edf": "getAuctionIdForUserAndIdx(address,uint256)", +"24a13556": "getDsampling()", +"24a14c24": "unLockedBalanceOf(address)", "24a1871e": "LOL2()", "24a1c1e0": "addCertificateAndBind2Wallet(address,uint256,bytes32,bytes32)", "24a1cd1e": "currentCoefficient()", "24a20a25": "feed10(uint256)", "24a23361": "getTeamAttribute(uint8,uint8,uint8,uint32[11])", +"24a267c9": "mobilityReceive(address)", "24a27bd2": "tokensForAdvisory()", +"24a2ddaf": "remainRewardAmount()", "24a30e46": "m_claimingIsActive()", +"24a37576": "rejectOrder(uint256,string)", "24a38383": "WhitelistedSmallCap(address,uint256)", "24a3b013": "attachToToken(address)", +"24a3ce13": "setDefaultInitialDiscount(uint256)", +"24a3d622": "pauseGuardian()", "24a434eb": "openCarousel()", "24a43c51": "releaseMultiple(address[])", "24a4411d": "DecoderTester(address,address,address,address,uint256)", "24a47aeb": "merge(uint256)", "24a4aff6": "adaCoin()", +"24a4d6da": "dangerousWithdraw()", +"24a4d7b9": "setUniChatMessageAddr(address)", "24a684e1": "get_perms(bytes32)", +"24a6862a": "priceOfLevel(uint256)", "24a69051": "allowClaim(address)", "24a6a409": "MINTY()", "24a6ab0c": "freeSupply()", "24a73e5f": "decreaseAllowance(address,uint256,bool)", +"24a756d1": "tokensReceived(address,uint256)", "24a779ca": "PELOMemberMap(address)", +"24a79b80": "fragments(address)", "24a7d277": "removeAddressFromBlacklist(address,address)", "24a80b31": "BusinessUnion(uint256,string,uint8,string)", "24a852c6": "unset(bytes)", +"24a85aac": "dl()", +"24a8603e": "_calcLatePenalty(uint256,uint256,uint256)", +"24a8ae84": "approveClaim(address,address,bytes32)", +"24a8c480": "SetGovernance(address)", "24a8e11d": "isAuthorized(address,address,bytes32)", +"24a8e1c3": "_getCurrentContextAddress()", +"24a92f9f": "details(address)", +"24a96d70": "addSpell(uint16,uint8,uint8,uint8,bool)", "24a9d3d9": "callAndReward(string,string,uint256)", "24a9d853": "feeBps()", +"24aa2b87": "sellAllTokens(address,address,address,address)", "24aa62fe": "setObjectionPercent(uint256)", "24aa6dd1": "ProxyManagementContract()", "24aa93b9": "getVestedAdvisorTokens()", +"24ab83d3": "lockdate(address)", +"24abe67d": "addCollateralToken(address,address,uint256,uint256)", "24abfc02": "getTournamentThresholdFee()", "24ac4df1": "cancelNewOwnersCountRequest()", "24ac4e65": "getServerUserNumber(address)", +"24ac57b7": "mneStk()", +"24acab33": "bulkMint(uint256,uint256,uint256)", +"24acac7a": "BuyMonsterEvent(uint256)", "24accfa3": "refundMoney(uint256)", +"24accfe4": "pendingIpt(uint256,address)", "24acec2b": "PayeeWithdrawInterest(address,uint256,uint256)", "24ad35e1": "PisangChain()", +"24ad5654": "_getMUsdAddress()", +"24ad848e": "setMinimumDepositValue(uint256)", "24addfc0": "swapMe()", "24ae84cc": "participateCrowdsaleInvestor(address)", "24aee933": "usePower(uint256,uint8,uint8,uint8,uint8[176])", "24af4cdb": "setNewUserState(string,bytes,string)", "24aff74d": "Debit(address,address)", "24b04905": "gift()", +"24b04f34": "rentedAt()", "24b06a96": "getAllElectionsOfOrganiser(address,address)", "24b07165": "get_property_facility(uint256)", "24b0ff0f": "approveTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"24b10068": "SWAP_RATIO_NOMINATOR()", +"24b16a43": "editFeeOperational(uint256,uint256)", "24b1905b": "sendFirstBatch(address[],uint256[])", "24b19da5": "TokenDistribution(address)", +"24b1a087": "Proposed(uint256,uint256,address)", "24b1a2fa": "disableArbiter(address)", "24b1aa5c": "domain_build(address,uint16,uint8,uint8)", "24b1babf": "claimEarnings(uint256)", "24b1bfdf": "resetToken()", +"24b1da26": "MINT_AMOUNT_PER_BLOCK()", +"24b1f950": "originalToCurrentAddress(address)", "24b27fc8": "CoquiToken()", "24b2c2f6": "GYUToken()", +"24b2fcbf": "approve_40(address,uint256)", +"24b32741": "_UNDISTRIBUTED_AMOUNT_()", "24b33f5d": "_auction(uint256,address)", "24b35ef2": "mintTokens(address,uint256,uint8,bytes32)", "24b3940a": "sayGoodBye()", +"24b4395b": "accumulativeAmountOf(address)", "24b492d7": "SetInitData(uint256,uint256,uint256,uint256,uint256)", +"24b4b508": "swapLPeeForTokenLP()", "24b4cee0": "openBatch(uint256)", "24b4ec3d": "buyOwn(address,uint256)", "24b4fc8e": "closeChannelWithoutReceipt()", @@ -21014,141 +38408,264 @@ "24b5c134": "numCities()", "24b5efa6": "RewardClaimed(uint256,address,uint256)", "24b6b8c0": "_safeTransfer(address,address,uint256,bytes)", +"24b6ed65": "isDataBig(uint256)", "24b6f7d3": "TestBathTx(uint256,uint8,string,string)", +"24b7019f": "swhPerBlock()", "24b72667": "buyprices()", +"24b76fd5": "redeem(uint256,string)", "24b77f05": "acceptCounterStack(bytes32,bytes32)", "24b79a1c": "ICO_PHASE3_BONUS_PERCENTAGE()", +"24b7f07a": "_hard_cap()", +"24b81cdf": "MINIMAL_RATIO()", "24b82a76": "voterReward(address,bytes32,uint256)", "24b89fa7": "unlockStepLong()", +"24b8ba5f": "set(uint8)", "24b8fbf6": "register(address,bytes)", +"24b90aff": "_encode_sol_uint8(uint8,uint256,bytes)", +"24b912e5": "run(uint256,uint256,uint256)", "24b94ac6": "atto()", +"24b95c3e": "starblockUpdate(uint256)", "24ba1a46": "isSpawnProxy(uint32,address)", +"24ba2c75": "winValAddr(uint256)", +"24ba2d54": "transferEther$(address,uint256)", "24ba506d": "getNumberOfTransactions()", +"24ba5884": "authorizedAccounts(address)", +"24baacc7": "changeSubmissionDeposit(uint256)", "24baeb12": "initCrowdsaleToken(bytes32,bytes32,uint256)", +"24bb2277": "corePercent()", "24bb49d6": "balanceMinusFeesOutstanding()", "24bb7734": "mainSaleDuration()", "24bb7c26": "pausedPublic()", +"24bbab8b": "COLLATERAL()", "24bbd049": "mintOpen()", +"24bc1a64": "quorumVotes()", +"24bc3e54": "MyNFTList(uint256)", "24bc4e92": "QueenXChain()", +"24bcb38c": "set(uint256,uint256,uint16)", "24bcdfbd": "tradeFee()", "24bce60c": "freeze(address,uint256)", +"24bda458": "_payLiquidationPenalty(address,address,uint256,address)", "24bdaf95": "about(uint256)", "24bdf96a": "getUserRefBalance(address)", +"24bf957b": "withDrawBonus()", "24c034a7": "ERC721Auction(address)", "24c05c72": "requestLoans(uint256)", "24c06d7d": "buyBreeding(uint256,uint256,uint256,bool)", "24c0db84": "ico1receivedTotal()", +"24c0fb00": "INITIAL_TokenReserve()", +"24c1173b": "collaterals(uint256)", "24c12bf6": "code()", +"24c1a453": "rebalancingSetTokenAddress()", "24c1f9c7": "stage_3_add()", +"24c20850": "getTotalReward(uint256,address)", +"24c21e8c": "maxSingleHolding()", "24c2362b": "buyCrySolObject(uint256)", "24c30182": "BleedFomo()", "24c31975": "increaseJackpot(uint256,uint256,uint256)", "24c33d33": "round_(uint256)", +"24c33e4f": "tokenReceiver(address[],uint256[],address[])", +"24c36864": "reloadbondsAddress(address)", "24c37507": "getMinBet()", "24c4c9e4": "getCurrentPRETDEBonus()", "24c4e3b9": "getPatientHealthData(address)", "24c55380": "TicketPurchase(uint256,address,uint256)", +"24c5b464": "setToshiTreasury(address)", +"24c5f05e": "seizeErc721(address,uint256)", "24c65927": "createNewAuction(string,uint256)", "24c65f35": "updateRefundGas()", +"24c66503": "LIFT_FACTOR_NUMERATOR()", +"24c678e3": "getVotesByProposalsPos(uint256)", "24c6ef60": "SafeTokenTransfer()", "24c74c1d": "LogClaim(address,uint256,uint256,uint256)", "24c74c78": "certify(bytes32)", +"24c89a49": "ETH_PREFIX()", "24c91c1b": "isDataResponseValid(address,address,address,string,bytes)", "24c93343": "error(string)", +"24c945aa": "playerreferees(address)", +"24c9bbd7": "yield21Jun30Return()", "24c9bf5e": "Prizes()", +"24ca2cd3": "OCT()", +"24ca3fbf": "GovernmentOfficerRepo()", "24ca77e5": "teamNum()", "24ca984e": "addRouter(address)", "24caf5e1": "sale_address()", "24cb015a": "_ONE()", +"24cb29ca": "readLetter(uint256)", "24cb57dc": "whitelistEntries(uint256,uint256)", +"24cbfdc7": "onDisputableChallenged(uint256)", +"24cc2866": "getDeployerAddress()", "24cc35a6": "_isTeam()", +"24cc42fc": "addBadge(address,uint8,uint8,bytes32,uint256,uint256)", +"24cc7076": "transferPayoutToSuspenseAccount(string)", +"24ccf748": "createMultipleDeposits(address[],uint256[],uint256[])", +"24ccfa76": "testTrackerTotal(uint256)", +"24cd2401": "ownedTokenslist(address)", "24cd2ae4": "beneficiaryUserIds(uint256)", +"24cda2ef": "getBoxes2()", +"24cda808": "pIDxCards2_(uint256)", "24ce2562": "updateGameSpecifics(uint256,uint256,uint256,uint256)", "24ce2917": "create(address,uint256,uint256,address,address)", +"24ce305b": "unlockBoxInfo(uint256)", "24ce9d27": "sellOrder(address,uint256,uint256)", +"24cea49d": "NewAction(uint256)", +"24ceb987": "isValidVoter(uint256,uint256,string)", "24cee3d6": "Change(address,address,address,uint256,uint256)", "24d0cc0f": "getPayouts(address)", +"24d1514f": "buy(address,address,uint256,uint256,address)", "24d16a4d": "makeUnderlier(bytes32,address,int256)", "24d1c28b": "changeVoteRules(uint256)", +"24d25f48": "setWhatsapp(string)", +"24d25f4a": "getBorrowAmountForDeposit(uint256,uint256,uint256,address)", +"24d28bd5": "getfactoryCount()", "24d29cfb": "_removeSigner(address)", "24d3048d": "cancelNode(string)", "24d30d54": "enableMerge(bool)", +"24d328f0": "getBalance(address,uint256,bool)", "24d3eaf3": "bonusEndTime333()", "24d427a9": "print(address)", +"24d45d9e": "isPrivate(uint256)", +"24d48c0d": "numberOfIdentifiers()", "24d4e90a": "ln(uint256)", +"24d51424": "withdrawRewardToken(uint256)", "24d5336a": "deicmals()", +"24d55ebf": "BarkeeperRemoved(address)", +"24d58693": "checkQuotaPropose(uint256,uint256)", +"24d5e7ab": "withdrawGST2(uint256)", "24d6169c": "startLockPeriod()", +"24d6239e": "availableForTransfer(address)", +"24d6a978": "hasPreviousVote(uint256,address)", "24d6d601": "voteFor(address,uint256)", +"24d706db": "airdropcooldown()", "24d70dea": "hasEntered(address)", +"24d72ff5": "GetInventoryHeroCount(address)", "24d7378a": "m_totalTokens()", +"24d73a93": "secret_registry()", "24d7806c": "isAdmin(address)", +"24d7f795": "participateMine3()", "24d86f00": "decreaseStake(uint256,uint256)", +"24d88785": "setTemplateURI(string)", "24d89171": "changeNeedFightToAdult(uint256)", -"24d97a4a": "killme()", +"24d8acf0": "AllocateTokens(address,uint256)", +"24d97a4a": "levelDist(uint256)", +"24d993aa": "updateTradingEnable(bool)", +"24da1128": "getInvestmentAssetStatus(bytes4)", "24da48a3": "updateMaxAllocation(uint256)", "24da569a": "AGToken()", +"24da6603": "totalRewardsGivenTPT()", +"24da7b69": "getStakedContractStakerIndex(address,uint256)", +"24da7c28": "priceToAccessOracle()", +"24dad810": "userReferralEggs(address)", "24daddc5": "setRestricted(bool)", +"24db14d3": "tokenFromSplit(uint256)", "24db1f50": "masFreezedTokens(address[],uint256[],uint256[])", +"24db235b": "_safeOwner()", +"24db2c86": "calculateFinishTimestamp(address)", +"24db4f65": "newPlayer(uint256,address)", +"24dbb328": "killFactor(address)", "24dbb91d": "BusinessCard(string,uint256,string,address)", "24dc793f": "getKydy(uint256)", +"24dcb385": "transferAndLock(address,address,uint256,uint256,uint256)", "24dcd0ef": "transferFounders(address,uint256)", +"24dcfabd": "getGroupC()", "24dd24ed": "allowingClaimBTC()", +"24dd5b2f": "customerDepositTokenIds(address,uint256,uint256)", "24ddb58c": "performStepVerification(uint256,bytes,bytes,bytes)", "24de30f1": "distributeEarlyBackerTokens(address,uint256)", "24de3c0e": "gwei()", +"24de8f13": "numApplicants()", "24de908d": "wins()", "24df2d5b": "Filmpass()", "24df75d9": "withdrawFromTicker(uint256)", +"24df7cd9": "burns(address)", +"24df85f0": "Get_Number_Of_Users()", "24dfc9d7": "getBytes32(uint256)", +"24e02055": "getPriceOfOneTicket()", "24e04871": "horseForSale(uint256,uint256)", "24e0be2e": "EVenToken()", +"24e0fbaa": "getDataContract()", +"24e18ba0": "enableDevMode()", "24e1c3f3": "PRCT_ETH_OP()", "24e1fa3a": "FIRST_WITHDRAW_RATE()", +"24e2071a": "approve_744(address,uint256)", "24e21cde": "sendTradeOffer(address,uint256[],uint256[])", +"24e26241": "withdrawProfit(address)", "24e2ca92": "withdrawSharedExpense(uint256,address)", "24e2cda7": "TestOrder2(address)", "24e2dbd3": "linkRecipientName(bytes32)", "24e34476": "myStoredDividends()", +"24e47abe": "createMachine(address,string,string,string)", +"24e4c909": "approveDisabledAddress()", "24e5355e": "JerryToken()", "24e581be": "transferAllToOwner()", "24e5bdb9": "getEventsCount(string)", +"24e5dacd": "last6TokenDivPoints(address)", "24e5eeaa": "slogan()", "24e65e14": "Addr6()", +"24e6d45e": "_tkn_sale_params(address,uint256)", +"24e72ec2": "checkLynReward(address)", +"24e76662": "sushi_eth_usdt_lp()", "24e7a38a": "setGeneScienceAddress(address)", "24e7c824": "performTransfers(address[],uint256[])", "24e846c7": "confirmedSaleEther()", "24e8b3ec": "getClaimableRewards(bytes32)", +"24e8cb8d": "trimExcess(address)", +"24e961f5": "checkRemainingDaysToWithdraw()", "24e998c3": "Ethershift()", "24e9dad8": "_safeCall(address,uint256)", +"24ea54f4": "GUARDIAN_ROLE()", "24ea8d1a": "Fortnitecoin()", "24eaf1ea": "SendBadge(address,address,uint256)", +"24eaf563": "calculators(address)", +"24eb152b": "getterInvestor1(address)", +"24ebbc29": "buyCoupons(uint256)", +"24ec5a78": "nftAddresses(uint256)", "24ec6f66": "cancelContest(uint32)", "24ec7590": "minFee()", +"24ecdade": "TOTAL_RESERVE_DAYS()", +"24ed0b9f": "setNameOf(uint256,string)", "24ed1486": "getPeriodAliasFor(uint256,address)", "24ed2d8b": "initOwnership(address,address)", "24ed3dc0": "PolyAnalytixProjectToken()", "24ed3e78": "BACKUP_THREE()", +"24ed57c1": "tokenset(uint256)", +"24ed6e46": "disableTokenDeposit(address)", "24eda713": "teamTwoWin()", "24edc2a1": "WINT()", +"24ede36f": "finishChangePercentSold()", "24ee0097": "myMethod(uint256,string)", +"24ee6282": "isFeatureInVersion(address,uint256)", "24ee62ee": "secondWavePrice()", "24ee9be4": "getVirtualBalance(address,address)", "24eebc47": "SWAPCOINZ()", +"24ef1bc7": "updateMaxSpendLimit(uint256)", +"24efb528": "daoHasMoved()", "24efe4c3": "_addToClaimList(address,uint256)", +"24f010db": "setOracleAddr(address)", +"24f01257": "LastFund(uint256,uint256)", +"24f01366": "NewAuctionCreated(uint256,uint256)", "24f07356": "batchIncreaseApproval(address[],uint256[])", "24f073ad": "getTimeOfLastBid()", "24f12f1e": "ProfitSharingMock(address)", +"24f154e9": "updateSequence(uint256[],address[])", "24f159c2": "extensions()", +"24f19583": "getOrdersInfo(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)", +"24f1c2c1": "addWorkflowData(bytes32,address,bytes)", "24f1ec37": "multiAccessRecipient()", "24f2cc02": "preIcoLimit()", +"24f3082a": "rebaseTime()", "24f32f82": "changeHardCap(uint256)", +"24f3313b": "maxGaufUnit()", "24f35549": "setup(uint256[])", "24f3c639": "buyApprenticeChest(uint256)", +"24f41254": "MAX_EXPOSURE()", +"24f45e67": "setAPY(uint256)", "24f481c8": "oracleItQuery(string,string,string,uint256,uint256)", "24f48bc5": "setWatcher(address)", "24f5445b": "transferFundToAccount()", +"24f55674": "setMaxMons(uint256)", "24f55e29": "hasCompany(string)", "24f618b6": "GetDOTRevokableHash(bytes32,uint32)", +"24f61b16": "investor_bonus(address)", "24f65ee7": "getTokenDecimals()", "24f690ac": "cryptowars()", "24f696fd": "LogFundTransfer(address,address,uint256,uint8)", @@ -21159,9 +38676,13 @@ "24f82526": "closeLong()", "24f8fe9c": "EdgelessCasino(address,address,uint256,uint256)", "24f91d83": "init(address,address,address,string)", +"24f91ffa": "yield21Mar31Yield()", +"24f92a25": "available_supply()", "24f9702e": "allocateArrayOfTokens(uint256,address[])", "24f99ba4": "ChiMarket()", "24fa6f3b": "requiredBlocksElapsedForVictory()", +"24fab32e": "changeRis3GovernmentAddress(address)", +"24faba39": "g(uint256[],uint256[])", "24fabb87": "setImageOwner(uint256,address)", "24fad665": "enableMasterTransfers()", "24fb563f": "PlayerTickets(address,uint256,uint256)", @@ -21170,49 +38691,85 @@ "24fc70ff": "setBonusOn(bool)", "24fcb80c": "parseAddress(bytes32)", "24fcbc1c": "withdrowErc20(address,address,uint256)", +"24fcca58": "Repayment(address,uint256,uint256)", "24fd0a5c": "isAvailableForTransfer(uint64)", "24fd2be1": "NationalCoin()", "24fd5585": "fixedExp(uint256,uint8)", +"24fd5d5c": "_encode_zigzag(int256)", "24fd6ec9": "zeroBonus()", +"24fd91b1": "getDiDai(uint256)", +"24fdf815": "migrateMaggotsForHorsefly(uint256)", "24fe722e": "requestUnpause()", "24fe73fe": "isRegularOrBoardMember(address)", "24fe8e68": "MyToken(uint256,uint256,string,string,uint256,uint256)", +"24fe96ec": "batchSubmitRinghash(address[],bytes32[])", +"24fea3b0": "PLUGIN_MANAGER_ROLE()", "24fef683": "OwnershipGranted(address)", "24ff026b": "getScheduleDetails(bytes32)", "24ff065a": "addressOk(address)", +"24ff38a2": "renderNonAscii()", +"24ff766e": "setLinkAddress(address)", +"24ffad88": "migrateTo(address,address,uint256)", +"24ffb56d": "setProfit(int16,int16,int16)", "24ffca71": "visitCost(uint8)", "24ffea1a": "presaleToken()", +"2500510e": "calculateCreateProxyWithNonceAddress(address,bytes,uint256)", "25005498": "updateEntityNew(uint256,bool)", +"25008c97": "quoteAddresses(bytes32)", "2500ec4a": "getDHand(uint32)", "25010816": "get_length(uint256,uint256)", "25012699": "KERNEL_APP()", "25017e10": "transferSubscription(bytes32,address)", "2501faa5": "triggerRecoveryAddressChangeFor(uint256,address)", +"25020ea6": "claimlive()", "2502c19c": "setRBInformationStoreAddress(address)", "250312ce": "bleachAppearance(uint128,uint128)", "2503dce8": "updatePublisherFee(address,uint16,address)", +"25042fe9": "poolWhiteList(address)", +"2504fe17": "getCardIdByCardName(string)", "25052d02": "getMyTokensReturns()", "250537fc": "_createCollectible(bytes32,address)", "250540cf": "calcMaxWithdraw(address)", +"25058c26": "info(address,address)", "25059052": "WhitelistedLargeCap(address,uint256)", +"2505b1bc": "lastTotalReward()", +"2505c3d9": "deposit(uint256,uint256,uint256,uint256)", "2505c445": "finalizedEthFundAddress()", "2505f349": "setTokenMinter(uint256,address)", +"25060f9e": "getCurrentPriceForOrder(uint256,address)", "25062287": "_ownerDist()", +"2506855a": "kiss(uint256)", "25068a28": "freezeAllowance(address)", "2506bfe7": "validateBySymbol(string)", +"2506c018": "swap(address,address,uint256,uint256,bytes)", +"2507190a": "endStaking()", +"250742cc": "priceFeedMap(bytes32)", "25074d73": "Registered(string,uint256,address,string)", +"250757ab": "updateTrees(address)", +"25076e95": "buoyancyAddr()", +"25078bc4": "investedAggregate()", +"25083528": "setContractToken(address)", "25084b04": "manualOverrideEditionHighestBidder(uint256,address)", +"25092d6a": "SpinConcluded(address,uint256)", +"25095a46": "createIeoDAOProposal(uint256,address,uint256,uint256)", "25096f28": "KryptopyTokenMock()", +"2509e086": "lockPeriods()", "2509f1b9": "SLP()", "250a1c1d": "Validate(string,string,string,bool)", "250a8dc2": "isAccountAddress(address)", "250a93cb": "POEXToken(address,address)", +"250aa683": "getTokenWeight(address)", +"250ab997": "Vanilla()", "250ac096": "BuyRoseCoin()", "250b1154": "tokenRate3()", "250b35e8": "BidSaved()", +"250b494f": "UNEX()", +"250b6048": "expirationTimestamps(bytes32)", "250bc504": "Ambassador()", +"250bf4b5": "payshop(address,uint256,uint256)", "250c95fe": "setMaxBuy(uint256,uint256)", "250ccce4": "getOutStreamOf(address)", +"250ce943": "loves_getOldLoves(uint256,address,uint256,uint256)", "250d5bc8": "LineToken3()", "250de298": "EthlanceSearchJobs(address)", "250dea06": "modifyBalance(address,uint256)", @@ -21220,40 +38777,80 @@ "250e816b": "getPeriodSealedPurchaseOrderFor(uint256,address)", "250e87c9": "pyramid()", "250ef961": "checkCorrectPurchase()", +"250f3f85": "PSALE_WEI_FACTOR()", +"250fa834": "validateNewOwner(address,address)", "250fe144": "setInvoice(uint256,bool,string,string,string,string)", +"250fef5c": "takerClose(address,uint256,uint128,uint128,uint256)", "25100b4d": "placeBet(bytes32,string)", "25102f27": "PRESALE_START_TIME()", "25107a47": "TransactionRefundedAfterEscalation(uint256)", +"2510ade0": "getWithFrozenStockBalance(address,uint256)", +"2510d802": "LogNewSecurityToken(string,address,address)", +"25110863": "refillers(address)", "25112004": "XCNTToken()", "25112743": "getSaleContractStartBlock(address)", "251139f6": "setPrevContract(address)", "25119b5f": "channelManagerByToken(address)", "2511b182": "minBuyableAmount()", +"25124317": "applyEscape(bool,uint256,address,bytes32,bytes)", +"25127520": "issueETH(address,uint256)", "25128b02": "CampaignResumed(uint256)", +"2512c195": "debtShareToVal(address,uint256)", +"25132782": "subscribeOptionByContract(uint256)", +"251330f1": "SUPPLY_DECAY_START()", +"251372d2": "equalAddressPassTest()", "25137f46": "setSalesPipeAllowance(address,uint256)", +"2513c694": "zgetMix()", +"251441a9": "moveStake(address,address,uint256)", "251481c8": "testDecodeTransfer(bytes)", +"2514931c": "mintSubURIByController(address,uint256,string)", +"2514a604": "redeemFyTokens(address,uint256)", "2514a6b4": "withdrawDividends(uint256)", +"2514abeb": "sudoBurnFrom(address,uint256)", +"2514acc3": "changeAddresses(address,address)", "251506fa": "SendFart(string)", +"25153728": "revertBlock(uint256)", +"25153da0": "approve_74(address,uint256)", +"25155450": "getIdProject(address)", "25155eef": "JupiterToken()", +"2515994e": "payDividend(uint256)", "25161e70": "HKDHToken(uint256,string,string)", "2516a18f": "setMintableToken(address)", "2516af82": "createLottery(bytes32,uint256,uint256)", +"2516b066": "merkleRootStatus(bytes32)", "2516c6c6": "min_tokens()", "2516d738": "secureAddOrderFunds(address,bool,uint128,uint128)", +"25172b94": "numDIDRequiredToTaskRewardVoteParameter()", "25174f0e": "getOwnerIndex(address)", +"25177087": "withdraw2(address,uint256,uint256)", +"25177acb": "add(uint256,address,bool,uint16,bool)", "25182e79": "winAmount4()", "25185d3e": "freeBalance()", +"2518904c": "getArbitrator(bytes32)", +"2518dd86": "configRewardByPIDEdit(uint256,uint256,uint256,uint256)", +"2518eda2": "setBsdsAmountInPool(uint256,address)", "25192fca": "issuanceDraft(address)", +"2519442c": "mojitoPerBlock()", +"251970e4": "getTokenByUniswapExchange(address)", "2519a378": "finalizeReplaceTrueUSD()", +"2519fb7d": "emailBalance(bytes32)", "251a8096": "total_wins_wei()", "251aaf67": "dividendsPaidPerShare()", +"251b0937": "withdrawBatchTokenv1(address[],address)", "251b5f8e": "team_fund()", +"251bafff": "setupICO(uint32,uint32,uint256,uint256,uint32[],uint8[])", +"251bc11c": "shortPositionSize()", +"251bdb61": "Jackpot(address)", "251c1aa3": "unlockTime()", "251c7182": "seed_multiplier()", +"251c7b1f": "OwnershipTotalAllocated()", +"251cbdcb": "activeBonusCacl_2()", "251d3589": "setUseEIP712(bool)", "251d8ffb": "setNav(uint256)", +"251e1e8a": "aaveAddress()", "251e3843": "_preValidation(address,uint256,uint256,uint256,uint256)", "251e3d7d": "registerMember(address,bytes,uint256)", +"251e43d0": "vaultClose()", "251ed995": "walletSetWallet(address)", "251fa3b1": "testFailRetractLatestRevisionNotOwner()", "251fbe37": "get_training_index()", @@ -21262,89 +38859,166 @@ "25209260": "PrepareRoll(uint256)", "2520bf04": "shuffle()", "2520d2e1": "readvalidrollsXaddr(address)", +"2520e7ff": "isAuth(address)", +"25210f0a": "assignLoanToWallet(address,bytes32)", +"2521509a": "set_SNX_TOKEN_ADDRESS(address)", +"2521828d": "setUser(address,uint256,uint256,uint256,bool,uint256,uint256)", "25221a4f": "addToBlacklistMulti(address[])", "25223bd4": "donor()", "25233782": "magicnumsig()", +"25234553": "c_base()", "252348dc": "ratePerEth()", +"25240810": "pendingGov()", +"25240bfc": "repProprotion(uint256)", "2524380f": "buy_Exchg_BkgChk(address,uint256,uint256,address,uint256)", "25245b26": "sendEth(address[],uint256[])", "25248587": "indexview(address)", "252498a2": "setUrl(string)", "25250519": "addGlobalAdmin(address,address)", +"25255402": "upgradeOldTamag(uint256,string,uint8,bytes32,bytes32)", +"25256ea6": "_swapExactTokensToTokens(uint256,uint256,address,address[],bool[])", +"25259983": "setDetail(string,string)", "2525aa78": "mintStart5()", +"2525b059": "_stakingRewards()", +"2525d06a": "controlledResolveTo(address,uint256)", "2525f5c1": "cancelBid(address,bytes32)", "25266f96": "isNewPlayerInBattle(string,address)", +"2526c346": "createProposals(bytes,bytes32[],bytes,uint256,uint256,string)", "2526d960": "clawback()", "2527331b": "transferToSimpleService(address,uint32,uint256,uint256,uint256)", "252733f0": "registrantsPaid()", "252786e4": "WatchBlockSizeInEther()", "25280163": "RedFundCrowdsale(uint256,uint256,uint256,address,uint256)", +"25283365": "EvaluatorPaid(address,address,uint256,uint256)", "25287c0e": "bonusesGiven()", +"25287cc6": "splitEther(address[])", +"252880b7": "uniformRandomQuip()", +"2528f0fe": "rateIsInvalid(bytes32)", +"25296b06": "vPeriod()", +"252974ce": "LogRefundInvalidState(uint256,uint8)", "2529b907": "setVaultDeposit(uint256)", "2529d1a3": "fused()", +"2529fd7e": "reqIdlocked(uint256)", +"252ac138": "getLpStakingsReserve(address)", +"252b1816": "unpool()", +"252b2be3": "nyanNFT()", +"252b6a4f": "getPoolTamagIdSize(uint256)", "252ba7a0": "userDeployCount(address)", "252bb9c3": "PHOENIX_CORSAIR_EXTRACTION_BASE()", +"252bc886": "getLockedAmount()", +"252bd4d3": "getaddress()", +"252c097f": "usersTokens(address)", +"252c09d7": "observations(uint256)", +"252c1d27": "buyLevelMatrix2(uint256)", "252cb4fe": "registerProposal(uint256,uint256[])", "252ccac3": "getTotalActiveBets()", "252cde48": "checkPrizesView(address)", "252cedc3": "sendERC20Tweet(uint256,string,string)", "252d1578": "init(address[],uint256,uint256,uint256,uint256)", +"252d5e81": "ownerStatus(address)", "252d7eb3": "getCurrentPayoutIndex()", +"252da09c": "CrydrStorageChangedEvent(address)", "252dbc36": "setTokenPoolReward(uint256)", "252e40b1": "secondsPerYear()", +"252e91d8": "queryAskList()", +"252ec2c3": "buySellActive()", +"252eccbf": "changeMultiplierSupport(uint256,uint256)", "252edb76": "setUInt8(bytes32,bytes32,uint8)", "252f14ba": "_addArbiter(address)", "252f34a7": "loserOne()", "252f4977": "destroyTokensInBntyTokenContract(address,uint256)", +"252f7b49": "_totalBalance()", +"252f989e": "getEstimatedSUSDProfit()", +"252fa0f6": "openSAFE(address,bytes32,address)", "252fb38d": "bytes32string(bytes32)", +"252fc0dc": "getKyberBuyPrice()", "253089b5": "smxTeamAddress()", +"2530b145": "MULTISIG()", "2530c905": "rand(uint256)", +"25316411": "checkPointBlockInterval()", "25316ff5": "getBetUint(uint8,int8)", "2531a36a": "getDesignatedReportDisputeDueTimestamp()", +"253227f1": "payout(bytes)", +"253279ad": "initialize(string,string,uint8,uint256)", "25327b75": "latestErc20TxRequest()", +"2532b630": "recoverETHFunds()", +"2533796c": "draftAliceTokens(uint256[],uint256[])", "2533bb9d": "dataCentreAddr()", "2533ff94": "LogPersonUpdate(address,uint256,uint256,string)", "2534076e": "cancelRemoveOwnerRequest()", +"25340b8c": "YieldPoolBalance()", "253459e3": "feesSeperateFromBalanceApproximately()", "253515d5": "accruedBuyout(address)", +"253523b7": "reloadPaymentContract(address)", +"2535a65a": "buyWithEther(uint256,bytes)", "2535b150": "cryptoJingles()", "2535dd53": "getAvailableWithdrawInvestmentsForBeneficiary()", "2535f762": "transferWithData(address,uint256,bytes)", "25361060": "getReferralStatus(address)", +"2536670b": "daibacLPPool()", +"25369339": "__mic()", "2536d7f1": "endOfCrowdsale()", +"25374996": "_b()", +"253791db": "addUserIntraDepositAmount(address,uint256)", +"2537e4b5": "freeETH(address,uint256,uint256)", +"2537eb4b": "getLevelByPrice(uint256)", "25384770": "reserveAllocated()", +"25386183": "setMaximum(uint256)", "25387eed": "tallyTheVotes()", +"25391624": "noticePeriodFinishTimestamp()", +"253940c2": "cancelledOrFinalized(address,uint256)", +"25394645": "upgrade(bytes)", +"253a96e9": "DepositEther()", "253abf4a": "processSalesForAllBuyers(uint256)", +"253b153b": "finishUpgrade(bytes[])", +"253bb301": "burnfrom(uint256)", "253bc579": "companyClaimed()", "253bd7b7": "check(address,bytes32)", "253c8bd4": "change_owner(address)", "253caf94": "setTasksAddress(address)", +"253d109d": "getLoanAmountPool(uint256)", "253d8195": "SavingsBank()", "253e3447": "numberOfSpritesOwnedByUser(address)", +"253e434f": "setClaimableUSD(uint256)", "253e7fdf": "becomePacifistmaster()", "253ebd92": "isTierJoined(address)", +"253eca1f": "category(uint256)", "253f029c": "performUpdatePC()", "253f055b": "getStage2End()", "253f2809": "offerCollectibleForSale(uint256,uint256,int256,uint256)", +"253f284b": "loanContract()", "253f5c38": "addtoLeaderboard(uint64,uint64,uint64)", "253f89b0": "minContributionUSDc()", "25400abc": "buyPuzzle(uint8)", "25402e6c": "vcxCount()", +"25402e74": "decideWinner()", "2540424b": "isDefIndexInRange(uint8)", "25406480": "extendPeriod(uint256)", "2540c420": "phaseOneRate()", +"2540d774": "LevelsETHLPBurnAddress()", "2541edcc": "oferta()", +"25423a1b": "setTimeInterval(uint256)", +"2542e3f8": "initialize(address,uint256,address,uint256,uint256)", +"25433252": "doapprove()", "25435704": "updateTokenSupply(uint256)", +"25436bc3": "decreaseBEP20Supply(address,uint256,address)", +"254406d4": "calcTokenPPinBaseWithPool(address,uint256)", "254439fe": "addTokenList(address,uint32)", +"25445104": "signHash(bytes32)", "25449c54": "ArteumToken()", +"254553b6": "borrowTokenWithETH(address,address,uint256)", "2545686d": "is_slot_in_bid(uint8,uint8,uint8)", "2545a07a": "MOEToken()", +"2545b9e2": "setTapGap(uint256)", +"2545d8b7": "dummy1()", +"2545f8eb": "bancorSendEthProportion(address,address[],uint256,uint256)", "25461328": "MSPMock(address)", "25464902": "AUCC()", "2546559c": "Demo()", "2546de10": "vest(address,uint256,uint256)", "254747a5": "checkAvailableAmount(address,uint256)", "25476ed8": "settleAndWithdrawCfd(uint128)", +"25479b9f": "waifuIndexToOwner(uint256)", "254800d4": "vestingStart()", "2548bbbd": "WithdrawalCreatedEvent(uint256,uint256,bytes)", "25495998": "getMinimumConsumerDeposit()", @@ -21353,44 +39027,79 @@ "2549e0b1": "getLockedBalance()", "254a46f4": "cycleMintSupply()", "254b302d": "revokeAllMyId()", +"254b5678": "artisteEncours()", +"254b9363": "approvedStaker()", "254bd326": "getUserAddr(uint256)", +"254c41c7": "liquidityLockedTokens()", "254c70ac": "getPlayerData(uint32)", "254c91b3": "testBitNotSetSuccess()", +"254ca692": "sendAward(uint256,uint256,uint256)", +"254d2ba4": "n1(uint256,uint256)", "254d2e12": "GetDemolishCost(uint256,uint256)", "254dacba": "BurnTokens(address,uint256,string)", "254dcfe2": "lastActiveTransaction(address)", +"254deaaa": "checkUserReward(address)", +"254e4262": "timeLeftTillNextClaim()", +"254e58a0": "changeAgentAccount(address)", "254fd745": "transferUCASH(address,uint256)", +"25500edd": "updateGlobalPoolContract(address)", "255016c8": "checkIfExploded()", +"255053e7": "enabledPairs(address)", "255074a9": "addManualContributor(address,uint256)", "2550c435": "CRYPTO_USD()", +"2551796d": "createDoubleCurveFund(address,address,address,uint256,uint256,uint256)", "2551858e": "getFlags(bytes32)", +"2551e004": "forwardLiqudity()", "2552317c": "lastBlockNumber()", "25524400": "placeBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8)", "25534a1e": "saleEtherReceived()", "2553795a": "AragonSupply()", "2553ac0d": "getPlayeds(uint256,address)", "2553e0cb": "OwnedMortal()", +"25541b3d": "claimSashimi(address)", +"25542064": "TERMINAL_SUPPLY_RATE_ANNUAL()", "2554a358": "queryCurrentTradablePrice()", +"2554af47": "_addMarketInternal(address)", "2554b9b3": "kkkTokenSale(uint256,address)", "2555611a": "AOKPAY()", +"2555aef0": "lastWeekPrices(uint256,uint256)", +"2555bac3": "lockETHViaCdp(address,address,uint256)", +"2555cdd7": "halfPeriod()", +"25564b5e": "infoOf(address)", "25568fd7": "__setBeneficiaryForDasTokensChange(address)", "2556befa": "feeBank(address)", "255706f5": "start_service2(uint256,address)", +"25573a92": "NotValSince(uint256)", "25575a04": "peBalance()", "25579702": "calculateDrugBuySimple(uint256)", "25580656": "dataSourceGetRoundOfSixteenResult(uint256)", +"25581e0e": "initialize(address,address,address[],uint256,uint256,address,uint256)", "25583590": "_cancelAuction(uint256)", "25585ee8": "diamondIndexToApproved(uint256)", "255884ae": "discoveryPrice(uint256)", "2559e0dd": "rateInSpecificTier(uint256)", +"255a7d59": "Login(bytes32,bytes32)", +"255ab04b": "BonusAmountGetAt(address,uint256)", +"255af893": "validateBalanceTransfer(string,string,uint256,uint256[2],uint256[2])", +"255b963c": "affiliateValidators(address)", "255bd903": "signByBride()", +"255bf770": "petsClaimedZeronium(uint64)", "255c8244": "amountRaisedPreSale()", "255c8fee": "TestyTest()", +"255cc9e1": "mcapOracle()", +"255cdfae": "setTopLevReward(uint256)", +"255cfca3": "rewardRateA()", +"255d23f2": "updateVault(address,uint256)", +"255d8831": "carbonInventory()", +"255dfc44": "mod(uint112,uint112)", "255e2f81": "adjustDollarToEtherRatio(uint256)", "255e444e": "scientists()", "255e4685": "mintStart()", "255eac5c": "newRegistration(address,uint256)", +"255f3e07": "withdrawAnyERC20(address,address)", +"255f5049": "getAllCurrenciesLen()", "255f82e2": "sealed(uint256,bytes32)", +"255f9c49": "porcentajeComisionRetiro()", "25605c6a": "balanceOfSC()", "2560a8c0": "houseedge()", "2560baeb": "calculatePayrollBurnrate()", @@ -21398,58 +39107,113 @@ "25618ca8": "setBattleContractAddress(address,address)", "2561ee35": "estimateBuyOrder(uint256,bool)", "25625608": "FoundWinner(address,uint256)", +"25626778": "TakeDowns(uint256[],string)", "2562b427": "declineKyc(address)", +"2562b7f1": "setPricesWithTimes(address[],uint256[])", +"2562e894": "getRandom(uint256,uint8)", "25630c9f": "fwithdrawal(uint256)", +"25631b2c": "exitDsrAll(address)", "25635b68": "updateBaseInventory(uint256,uint256,uint16)", +"2563bf12": "Signed(bytes32)", "2564e1c4": "PaymentAddressFactory()", +"25653127": "CUSTOM_CROWDSALE_FINISH()", +"25653eca": "MARKET_WHITELIST_TOKEN_BP()", "256540cd": "turnover()", +"2565721f": "eventJoinMiniGame(uint256)", +"2565b159": "maxSize()", "256688fb": "UseRedEgg(uint256)", "256697df": "ibcDistributed()", +"2566c9ea": "playerCount(uint256)", +"25670069": "strafiShare()", +"25671dcb": "setUnderlyingAsset(address)", "25672ee6": "OpenBids(address,uint256,address,address,uint256,uint256)", "256738d1": "AGT()", +"2567e23e": "secondQuqrterPerBlock()", "25686e15": "getMarketsRocId(uint256)", "25687e28": "tuneLastStageStartAt(uint256)", +"2568d57c": "addRoot(bytes32,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32)", "2569100d": "runtoeth(address,uint256)", "256919c6": "fixSale()", +"25691de4": "ranks(address)", +"256939d1": "getDepositWeight(uint256)", "25696308": "lastBlock_a10Hash_uint256()", "25697337": "getLittAdminCount()", "25698d89": "isLottery()", "2569cd6c": "assistant()", +"256a0d76": "claimSeedPacket(uint32,uint256,bool)", "256a9f81": "extendedTime()", +"256b5a02": "addVault(address)", "256b8dfe": "Travelcash()", "256bcaa0": "addToJackpot()", "256bdaa4": "setEtherRate(uint16)", +"256bff11": "LOCK(uint256)", "256c0926": "RocketPoolCrowdsale(address)", "256c09d4": "_protocolInterestRate(uint256)", "256c10a1": "market2021TokenCreated()", "256c3232": "getPreICOBonusAmount(uint256,uint256)", "256c5fc6": "LooisToken(uint256,string,uint8,string)", +"256cbc99": "expr(uint256)", +"256d6613": "RewardReport(address,uint256)", "256df407": "test_spamFreeze()", +"256e224f": "sevenReserveWallet()", +"256e9b7a": "isClientOfContract(uint256)", +"256f5e3e": "fflyDevAddr()", +"256f7fb6": "setPreUPTAmountIn(uint256)", "256f992b": "organizers_percent()", "256fa241": "distributeTokens(address[],uint256)", +"256fdcd6": "unlockScheduleCount(address)", "256fec88": "lastSender()", +"257011b6": "userLock(bytes32,uint256,uint256,bytes)", +"25703da4": "setPx(uint256)", "2570c13d": "GBCoin()", "2570e31e": "getTokens(uint256,address)", +"25719540": "isValidLabel(string)", +"2571a356": "getSpriteInfo(uint256)", "2571a4ab": "MaxBetAmountChanged(uint256)", +"257210be": "reportFailedGame(bytes32,uint8)", +"25726df2": "validatorStateChanges(uint256)", +"2572d39e": "payoutRewardERC20(address)", "25731e97": "quitBanker()", "257341a8": "vestingCountOf(address)", +"257374eb": "processRuling(uint256)", +"2573751f": "sireGenom(uint256,uint256)", "2573aa7d": "newShare(address)", "2573ce27": "validateUserByHash(bytes32)", +"25740bbd": "MODERATION_MIN_STAKE()", +"257458ed": "partialLiquidationUser(address,uint256,address,uint256)", "25746251": "canVote(uint256)", +"2574fdef": "Triger_Entanglement(address,address,address,address)", "25750995": "updateChfCentsPerEth(uint256)", +"25755c95": "_UNISWAP_()", "25756d90": "getWeaponRarityFromTokenId(uint256)", +"2575adc1": "NaughtCoin(address)", "2575d47e": "EmitAccountChartDetails(address,uint256,uint256,uint256)", +"257664a4": "getUser(uint256,address)", +"257671f5": "INIT_CODE_HASH()", "2576a779": "updateServiceFee(bytes32,uint256)", +"2576aa52": "LedgerProofFailed(bytes32)", +"2576e5f3": "getImprintByHash(address,bytes32)", "257714db": "getTransferRate(address)", +"25774635": "requestData(address,bytes32)", "257781e7": "deleteIPFSHash(bytes32)", "2577929b": "settleContract(uint256)", "257793f9": "getConstructorTouches()", +"2577f785": "setFeesForBurn(uint256)", "2578117b": "getPotAsFixedPointForGameId(uint256)", "25787747": "icoDuration()", +"25787f88": "ZapEthForWETH(uint256)", +"25788f6d": "underlying_balance()", "2578e943": "RHYNOTE()", +"25798e61": "HALVING_DURATION()", "25799b18": "getUnapprovedArtists()", "2579dd3c": "registrantToHopefulIds(address)", +"257a50c7": "activeBonusCacl_6()", +"257ae0de": "unirouter()", +"257b10f6": "dotrade(uint256,address[],uint256,address)", +"257b3f27": "getUserTopId(uint256)", "257bcd6a": "placeBet(uint256,bytes32,bytes32)", +"257be1a4": "entityToPublicShareAmount(uint256)", +"257c0793": "MyTotalRewards(address)", "257c360d": "getCurrentBalanceForCampaign(bytes32)", "257c88b5": "curQuater()", "257d3db5": "setNumNumbers(uint256)", @@ -21460,137 +39224,237 @@ "257e0523": "addLockedTokeD(address)", "257e1f8f": "endUpgrade()", "257e5c69": "matchStake()", +"257e76fc": "registerDev(address)", +"257e8dde": "setPlatformAssetsWallet(address)", "257ef522": "approveBountyTransfer(address)", "257ef70b": "fillSellOrder(address,address,uint256,uint256)", "257f9abf": "removeFromList(address)", "257fc838": "setResolveValueGasLimit(uint256)", +"2580145c": "claim(bytes16,address,bytes32)", +"258023be": "pendingMar(uint256,address)", +"25802756": "bas()", +"25804cd9": "USDCInterest(uint256)", +"2580692e": "setVaultPercentage(uint24)", "258072e5": "display_rate()", "2580ce84": "totalAndRemainOf(uint256,address)", "2581021c": "depositCollateralOnBehalfOfRecurse(address,address,bytes32,uint256)", "258108da": "slaveWalletPercent()", +"258124fa": "findNoncompliantVaults(uint256)", +"258136b3": "tokenIdOfCode(string)", +"25817008": "repayDebt(address,address,uint256,uint256)", "25818751": "test_oneValidEqUint3()", "2581c674": "testBitsOrFailIndexOOB()", "2581f5a4": "distributeAirdrop(uint256,address[],uint256[])", +"25829410": "apiVersion()", +"2582ad9d": "onBoard()", "2582bf2a": "updateDelegateKey(address)", "258315b3": "ATC(uint256,string,uint8,string)", "2583373c": "distributeAndUnlockTokens()", "2583a1d9": "oraclizeQueryId()", "2583b2e4": "totalWithdrawTokenAll()", "2583cfef": "removeFromBothSendAndReceiveAllowed(address)", +"2583e9f2": "setwithdrawAllow(bool)", "2584295e": "userWhiteListContracts(address,address)", +"2584384d": "_decode_sol_bytes8(uint256,bytes)", +"2584f484": "CompleteTokenBalanceUnlocked(address,uint256,bool,bool)", +"2585581f": "span()", +"2585a270": "unpauseIssuance()", +"25862171": "initiateTransferControllerOwnership(address,address,uint256)", "2586539e": "batchTtransferEtherToNum(address[],uint256[])", +"2586c562": "recordOutcomingFloat(address,bytes32,uint256,bytes32)", +"25878e0d": "DEVIATION_PARAMS()", +"2587a6a2": "gasTopUpLimitValue()", "2587eb4e": "setRate(int256)", +"2588a61d": "mOracles(bytes32)", "2588f9a5": "ReleaseAgentSet(address)", +"25892088": "user_ids(uint256)", "25892f92": "ApprovedBy(uint256,address)", +"2589867d": "viewPayout(uint256)", "2589af4a": "getProjectKudosByUsers(bytes32,address[])", "258a61d6": "coordinateToIdentifier(uint256,uint256)", "258a6ca6": "getStoryExpiry(bytes12)", +"258adbd6": "rndSeeds(address[],uint16[])", "258ae582": "verify(bytes32,bytes)", "258b5a35": "challengeSettle(bytes,uint8[2],bytes32[2],bytes32[2])", "258b5c06": "finalizeCrowdsale(uint256,uint256,uint256)", "258b5da6": "recoverWETH()", +"258b7ca4": "tokenToEth(address,uint256)", "258b85d4": "verifyHash(string,string)", "258c047e": "getStatusEventClosed(bytes16)", "258c0f1e": "deleteCaller(address)", "258c2a2d": "Charity()", "258c4f63": "channelManagerByToken(address,address)", "258c5ddd": "softWithdraw()", +"258cc844": "jCompoundAddress()", +"258cf13b": "fnxCollateral()", "258d3d6e": "PlayHallToken()", "258da4b4": "seedStarted()", "258dd544": "estimateSellOrder(uint256,bool)", "258e60b6": "start(string)", +"258eb326": "doBurn(int24,int24,uint128)", +"258f406e": "calcTokenPrices(uint256,uint256)", "258f6b8f": "GiveReferralRocket(uint16,address)", "258fd4f3": "Stage1Allocation()", +"25901421": "maxProgressive()", "25910753": "addCourse(string,string,bytes32)", "2591432d": "canary()", +"2591d14c": "altFunders(uint256,address)", "25925806": "tokensAllocatedForCs(address,address,address)", "2592e921": "verifyParams()", "2593ed21": "setICO1Phase()", +"25946775": "addLogo(string,bytes32)", "2594b343": "walletTwo()", +"2594e4ff": "getBidStatus_for_token_ownership(uint256)", +"25960c48": "acoPoolFeeDestination()", "259653b8": "distributionClosed()", "2596c93b": "manualBonusActive()", "2596e62c": "test_oneValidEqBytesUint()", +"25971dff": "becomeAdmin()", "25973ef7": "CIFRCOINTOKEN()", "25979983": "sendToAll(uint256)", +"2597aaf1": "transferHashtag(string,address,address)", "25981559": "bluceTestCoin(uint256,string,string)", +"25981f46": "getCitygovernor(uint256)", "25982586": "AddressDemo()", +"25984de3": "destoryUnlock(bytes32,bytes32)", "259852f8": "updateGenVault(uint256)", "2598ab9d": "createPromoSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", "25990d4d": "TokenFulfillment(address[2],uint256[8],uint256)", +"2599c037": "removePair(address,uint256)", "2599c661": "getgamecardsalemoneyuint256(uint256)", +"259a14c2": "qianTypeId()", +"259a1a34": "getByAddr(address)", "259a28cf": "UNLOCK_PERIOD()", "259b2ce0": "whitelistRegistrants(address)", "259b5181": "_batch2_rate()", "259b5605": "PTL()", "259bc6f5": "getWhiteUsers()", +"259bfaa0": "inMigrate(address)", +"259bfdd7": "currentPrices()", "259c05f5": "DEV_TAX_DIVISOR()", "259c29e8": "replaceShorter()", +"259c5f09": "testFunctionThatDoesNothing(address)", "259c95c4": "_sendWebGiftToken(address,uint256)", +"259cb078": "UNIAPPtoken()", "259ceee5": "contractTokensTotal()", "259d1cb4": "eth_decimal_num()", "259d33c1": "roundStats(uint256)", +"259d690e": "chocofiPerBlock()", +"259d8c3d": "tag(bytes)", +"259e95e7": "getListCandidatesOfTeam(uint256)", +"259eb28a": "proslediPrijaveProfesoru(address,string)", +"259eb7b4": "Minted(uint256,uint256,address)", "259eb959": "privilegedTransfer(address,uint256,bytes,string)", +"259f4f4f": "getBNBAmountByAddress(address)", "259fddaf": "stakeCommunityTokens()", "259fefcb": "angelAddress()", "25a02ff6": "setGeneratorAddress(address)", +"25a0d8b4": "_pausedTokens()", "25a10a70": "getChild(address)", "25a190c9": "inicializaStatusPossiveis()", +"25a1bb47": "setRateForRound(uint8,uint256)", "25a2219f": "promotionsUsed()", "25a30145": "preSaleTime()", "25a31135": "Disable()", "25a34aca": "returnMargin()", +"25a35e73": "getAuctionBalance()", +"25a36c59": "stakeTryAmount()", "25a3ba49": "getCertKey(string)", +"25a3ceb6": "wbtcUnlockAll(uint256[])", "25a42081": "setPriceStep3(uint256)", "25a43ea5": "setts10(uint256,address)", +"25a4426f": "lockedtype(address)", +"25a4f8ca": "getGrey(uint256)", "25a50636": "completeBountyAddresses(address[])", "25a52d9d": "curentWinner()", +"25a53fc3": "BITCASHPAY_CONTRACT()", +"25a547f3": "getAmountInForUniswapValue(address,uint256,bool)", "25a583a3": "_reAdjustDifficulty(uint256)", +"25a58fca": "RefundMidas(address,uint256)", +"25a5e6e9": "players_(uint256)", +"25a614d0": "defaultNegativeRebaseLag()", +"25a655d7": "unlockDateCommunityTwo()", "25a6c545": "generalInfo()", +"25a6d45b": "LogEvent(bytes32,uint256)", +"25a72109": "setStakePoolVerifier(address,bool)", +"25a760c2": "underlyingDecimals()", "25a7650a": "beginGame(uint256)", "25a78057": "DeClubToken(uint256,string,string)", +"25a857a8": "pool2Register()", "25a86d56": "ETH_USD_EXCHANGE_CENTS()", "25a8e6f9": "addNewEditor(address)", "25a9d450": "getClientBalance()", "25a9e534": "DataToBlockchainKeeper()", +"25aa6561": "betOnWolfings()", "25ab2d03": "getReturnSize(uint256)", "25ab526d": "MITPurchase(address,address,uint256,uint256)", "25ab9f43": "addDoubleChanceLine(uint256,string,uint256)", "25abc312": "changeICOPrice(uint256)", +"25abebb0": "stakerLedger(address)", +"25abfdd0": "pledges__pool(address)", +"25ac1e6e": "getCurrentProposition()", "25ac29da": "generateUrl(string,uint256)", "25ace2a7": "checkExpired()", "25ad7f2e": "OneStep()", "25ad91ce": "createUser()", "25adfc8f": "SetMaxMinersXblock(uint256)", +"25ae9c97": "fastSetCacheClassInfo(uint32,uint32,uint32,uint32)", "25aeb4a2": "addPayment(uint256,string,int256,bool)", "25aef744": "ValuePlaced(address,address,uint256)", +"25af8aae": "lastMatchPointer()", +"25b00885": "confirmDeposit()", +"25b0287e": "addGulpPool(address)", "25b05c88": "playerGameId(address)", +"25b08c79": "makeCoverUsingSOTETokens(uint256[],uint16,bytes4,address,uint8,bytes32,bytes32)", "25b10186": "INITIAL_PRICE_INCREMENT()", "25b16c4a": "getWeis(uint256,uint256,uint256)", "25b198eb": "inList(address)", "25b1a072": "setGOPCreator(address)", "25b29d84": "getEtherValue()", +"25b2a93b": "minOptionPricePercentage()", "25b2ac77": "privateOfferingWallet()", "25b31a97": "purchase(address)", +"25b34c1d": "cDAI2DAI(uint256)", +"25b38bc0": "baseWithdrawPenalty(uint256)", +"25b3ab0c": "subd(int256,int256)", "25b3b5a8": "_totalMinedSupply()", "25b3bfb8": "transferFrom0(address,address,uint256)", "25b3edd9": "updateTraits(uint256)", +"25b428df": "Minted(address,uint256,uint256)", +"25b50934": "supportsStaticCall(bytes4)", "25b5160c": "setICOPrice(uint256)", +"25b53b7c": "increaseToken(address,uint256)", "25b56727": "createProxy(address,address)", "25b56dd4": "averageScrapPrice()", +"25b58cdd": "getParentDailyAPY()", "25b634c0": "approveDisbursement()", "25b64bba": "signerConsumerNonce(address,address)", "25b6ae80": "incSALESTATE()", "25b72273": "SGT(address)", +"25b731af": "revolution()", "25b75b7b": "deregistrationDate()", +"25b75d68": "updateProjectLicense(uint256,string)", +"25b8235d": "appDai(uint256)", "25b825ab": "newMediaToken(uint256,uint8,string,string)", +"25b832d9": "negate(int256)", +"25b84384": "moongainPerBlock()", "25b886eb": "constructors()", "25b89c52": "AirDropToken()", +"25b8fcb3": "LOIN()", "25b901c8": "Refundlineinfo()", "25ba0824": "grantOwners(address)", "25ba0f51": "initContract(address,address)", "25ba2d2e": "minimalPrice()", +"25ba4c47": "unlockRate()", +"25ba88a5": "desiredDecimals()", "25bae118": "earlyPurchaseClosedAt()", +"25bb0b6b": "allowedPools(address)", +"25bb6144": "toToken(address,uint256)", "25bb8e93": "_badgeUnFreeze(uint256)", +"25bbf872": "lastBPriceUpdated()", +"25bbfee2": "withdrawFinal(address)", +"25bc3ced": "maxRewardLevel4Number()", +"25bc9722": "babyloniaTokensLocked()", "25bccea2": "setFreeze(address)", "25bd4639": "paymentId()", "25bd713f": "tokensForPlatform()", @@ -21598,33 +39462,64 @@ "25bdb73d": "benefitPercents()", "25bdc110": "Resolve(bool,uint256)", "25bddc18": "DGXCrowdsale(address,address)", +"25be0be1": "setFeeProxy(address)", "25be124e": "token2()", "25be53e7": "kickStartICO(address,uint256)", +"25bee3e9": "maxExpiration()", +"25c02a70": "ad3()", "25c065b1": "minStakingAmount()", +"25c07cd0": "smilePerBlock()", +"25c0d313": "setTotalDividendAmount(uint256)", "25c10247": "buyIPC()", +"25c1ebea": "setBuySaleActive(bool)", "25c2052f": "last_random()", "25c24bc3": "folioToken()", +"25c26a6e": "currentAvailableToken()", "25c302e4": "totalDonors()", "25c33e13": "setMaxReward(uint256)", +"25c3b5fa": "initiateProtocolTransfer(address,address)", "25c48f30": "MYDECIMAL()", +"25c4a550": "deployModules(uint256,bytes32[])", "25c50f97": "enablePhenomenon(bytes32)", "25c54456": "existsContract(address)", +"25c57293": "getStoredTokensAmount()", +"25c587ba": "newGame(uint256[])", +"25c58be6": "lockNyan(address)", "25c5ce04": "availableOnStage()", "25c5d4d4": "tileDrop(address[])", +"25c5edf4": "editArtData(uint256,string)", +"25c61dd4": "cutRed()", "25c62d5a": "MAX_TOKENS_AIRDROPS_BOUNTIES()", +"25c65ba4": "underlying_token()", +"25c6935f": "updateFlashLoanFeeRate(uint256)", "25c70a44": "moveToArea(uint16)", +"25c751b7": "sync(address,uint64)", +"25c757c3": "callOtherSideFunction(address,bytes,uint256)", +"25c759bc": "setSwapFeeForDex(uint256)", +"25c76f86": "notifyTransferFrom(address,address,address,uint256)", "25c782d7": "addStageCrowdsale(address)", "25c7cd17": "getCurrentLeaderOwners()", +"25c82f86": "numberOfClicksAtBlocksRemaining(uint8)", "25c843b9": "comments()", +"25c866b8": "updateProductBatchByAddingBatchTestAnalysisReport(address,bytes32,bytes32,bytes32,address)", +"25c8b428": "create(address,uint256,uint256,string,string)", "25c9307d": "lastBetBlockNumber()", "25c93df3": "rewardTokenAmount(uint256)", +"25c94cb8": "_transferCollateralTokensFrom(address,address,uint256)", "25c95538": "isRepeated(string)", "25c972ff": "JoinGameAsBanker(uint8,uint256)", +"25c97757": "weth_apt()", +"25c980f7": "IPOisActive(uint256)", +"25c99949": "tokenSwap(address[],uint256[])", +"25c99ae4": "upgradeOperator()", +"25c9e251": "setV2(address)", "25ca4c9c": "isAccount(address)", "25ca5cc6": "candidateTillETHAssets()", +"25ca6a0d": "govUpdatemaintLTVE10(uint256)", "25ca953d": "resetAirDrop(uint256,uint256)", "25caa262": "getBal()", "25caaa37": "getMyChicken()", +"25cb1046": "initGrandPot()", "25cb2bc6": "getBrokerAddress(uint256,uint256)", "25cb366d": "manualMigrate(address)", "25cb4f2c": "profitContainerAddress()", @@ -21636,195 +39531,332 @@ "25cbeb0a": "DICIMALS()", "25cbeb7e": "creatorsAddress()", "25cc348f": "testDeployedValues()", +"25cc5240": "tokenFromPreserve(uint256)", +"25ccad2d": "setPicklePerBlock(uint256)", +"25ccbc43": "REFERRER_CODE()", "25ccdb4c": "currentspudinfo()", "25ccf381": "create_forwarder()", "25ccf688": "KEO()", +"25cdbaff": "gulp(uint256)", "25cdca8d": "CommonWhitelist()", "25cde42c": "addPayerRefundAddressAction(bytes32,bytes)", "25ce77a0": "devuelveEncuestados(bytes32)", "25ceb4b2": "submitBlock()", +"25cecc95": "pushResult(address,bytes4,uint8,uint248)", +"25cf1b74": "removeFeeException(address)", +"25cf37d0": "move(address,uint256,address,uint256)", "25cf512d": "setBytes32Value(bytes32,bytes32)", "25cf98e5": "EduCloud()", "25cfa566": "StartingPrice()", +"25cfea50": "updateobelixToken(address)", "25d00041": "registrantIndex()", "25d04034": "KT07Coin(uint256,string,uint8,string)", "25d0b4ef": "minFundingGoal()", +"25d0c53d": "adminSetTime(uint256)", +"25d0ce7d": "directTransferFail(address,uint256)", "25d104d4": "returnVestingSchedule()", +"25d1816e": "initBurnContract(address)", +"25d1818b": "blockReward(uint256)", +"25d18e31": "weiContributions(address)", +"25d1c650": "__DualPool_init(address,address,address)", "25d1da84": "revokeAll(bytes32,address)", +"25d26667": "getLastModifiedNonce(uint256)", "25d30d8e": "cnt_per_Keos()", "25d3a09d": "getProposal(string)", "25d3b2c6": "check_array_add(address)", "25d3bcd1": "saleHardcap()", +"25d3cd17": "repayDai(bytes32,uint256,address,address,uint256)", "25d3d0e3": "purchaseTimestamp()", +"25d47fc5": "bdamount()", +"25d4a6bc": "rabaseLog(uint256)", "25d4bdeb": "LookAtCollectedFees()", +"25d4eeb0": "setPayment(bool,uint256)", +"25d506fa": "governanceRate()", +"25d51eba": "getQuotaAmountLeft(address)", "25d5971f": "withdrawStake(uint256)", +"25d5b6d7": "stake(uint256,uint256,bytes32,uint256,uint256)", +"25d5d3b9": "run2(address)", "25d5eafa": "total_points()", +"25d5f7b7": "nextBlockOf()", +"25d60861": "setMemo(string)", +"25d630c8": "setCeoAddress(address)", +"25d6a1e8": "timviWallet()", "25d76e6d": "setCompte_27(string)", "25d78d3b": "IcoPhaseManagement(address)", "25d83bb3": "authorized_setCardPerkText(uint256,string)", "25d85e12": "totalPopulation()", "25d8a4b2": "SpiceToken()", +"25d8d7bb": "loanAmountRepaid()", "25d8dcf2": "betAndFlip()", "25d8f6a5": "dividendForHistory()", "25d91125": "earlyWhitelistBeginTime()", "25d92ee2": "updateFeeWallet(address,address)", +"25d93f40": "is_signer(address)", +"25d95f36": "ifNeedReturnEther(address,uint256)", "25d988bb": "buy_token(address[],uint256,uint256)", "25d998bb": "availableBalanceOf(address)", "25d9d57d": "highTokensToSellGoal()", "25d9ec83": "requestBuywithETH(address)", +"25da4367": "tokenWBTC()", "25dac5e3": "DocumentStored(uint256,uint256)", "25db4dd0": "jackpotBlance()", "25db6699": "tgrSettingsBlocksPerStage()", "25dbe054": "setDonationUnlockTs(uint32)", +"25dc4079": "setItsBalance(uint256)", "25dccaf9": "postMessage(address,uint256,string)", +"25dd012b": "addLiquidityUniswap(address,address)", "25dd0ee6": "checkTotalBalance(uint256[])", +"25dd34fd": "MAX_SAVING()", "25dd495a": "Recycle()", "25ddda76": "changeMixEnable(bool)", +"25de1092": "BASE_AMOUNT()", +"25decac0": "getRequiredCollateral(address,address,uint256,uint256,bool)", +"25decad0": "earlyBonus(uint256)", +"25ded2b1": "beneficiaryTeamAdvisors()", +"25ded586": "wrap(uint256,uint256)", +"25df1e77": "getSubscriber(uint256)", +"25dfac81": "setTimeoutThreshold(uint256)", "25dfbfba": "addProduct(string,string,string,string,uint256)", "25dfcf84": "saleAllocated()", "25e023b3": "unlockOwnerBalance()", +"25e02bff": "REFERRER_SHARE_PCT()", "25e0671f": "areReservedTokensDistributed()", +"25e0a6b9": "getAvgLiquidityPaymentFraction(bool,uint256)", "25e0c876": "sosTransfer(address,address,uint256)", "25e11811": "addFunctions(address)", +"25e12347": "StopStaking()", "25e1350f": "insert_candidate(string,uint8,string,string)", "25e16063": "withdrawEth(address)", "25e1b5e4": "pricePerMessage()", "25e1c6f7": "batchTransferORS(address[],uint256)", +"25e239e7": "addAirDropAddresses(address[])", +"25e2790c": "REBASE_INTERVAL()", +"25e27ed8": "_rateScale()", "25e3172b": "AdminClaimAirdropMultiple(address[],uint256)", "25e330fb": "_increaseRarity(uint256,bytes32)", +"25e34347": "withToken(address,uint256)", "25e37b2b": "delTournament(address)", "25e3d3ba": "blockResult(uint64,uint64,uint64)", "25e3d7b4": "assignSharedOwnership(address,uint256)", +"25e408fa": "_addToDebtRegister(bytes32,uint256)", "25e41da1": "getRandomValue(uint256)", +"25e4622d": "usrPenaltyAmount(address,address)", +"25e4a36e": "getStakePhase(address)", "25e524d3": "right8(uint256)", +"25e540c2": "echips()", +"25e5cf22": "getVerifySignatureByRandom(bytes,bytes32,bytes32,uint8)", +"25e5d03e": "SetDepot(uint256,uint256)", +"25e5fb75": "cooldownTimes(address)", "25e629f2": "fundraisingDelta()", "25e65584": "getPlayerBossWannaCryData(address)", "25e6c304": "totalPrizes()", "25e6f516": "tokenDescription()", "25e7514b": "remainAmount()", "25e7c9ad": "getTotalAmountOfFirstInvestors(uint256)", +"25e7d9ee": "testOnlyOwner()", "25e7e3cf": "recoverAllEth()", +"25e827b9": "startsale(uint256,uint256,string)", +"25e88dda": "LogRents(uint256,uint8,uint8,uint8,uint8,uint256,uint256)", "25e89283": "mainSaleActive()", +"25e898a2": "take(uint256,bytes,uint256)", "25e8f38c": "logUI(string,uint256)", "25ea269e": "Scissors()", "25eafb45": "AikcoinSupply()", "25eb64c7": "buildingAddress()", +"25ebc274": "startAuction(address,address,uint256,uint256,uint256)", +"25ebe65b": "vSecondAddress()", +"25ec0d40": "getSellrsBuyersRatio()", +"25ec77d7": "properties(address)", +"25ecd04c": "reLoad(address,uint256)", "25ede147": "depositSecretBid(bytes32,bytes)", "25ee8abb": "winningTeamSet()", +"25eeb6c6": "vestingCliffPeriod()", "25eeecbc": "divisionByZero()", "25ef9afa": "LOG_newSpinsContainer(bytes32,address,uint256,uint256)", +"25efc6d3": "leggiBlockChain(uint256)", +"25efc91d": "responder()", +"25efd87d": "refundCombinedTransaction(address,address,uint256,uint256,uint256)", "25f08fc4": "decayedPriceOfTwitterId(uint256)", +"25f0ec4a": "_queryPermissions(address)", "25f0f467": "updateTransferFeeRate(address,uint256)", "25f0fd23": "_revoke(bytes32,address)", +"25f1c01b": "RatesContractChanged(address)", +"25f1f5bf": "Replaced(address,address)", +"25f20363": "setchangehashownerfee(uint256)", "25f262c7": "draw(address[])", "25f281b4": "changePriceSetter(address)", "25f2f6db": "awardRoundPrize()", "25f39a63": "div(int128,int128)", +"25f3d2c7": "luckCodeLastTime()", "25f3da52": "GetBankAccountNumber()", "25f3f2ef": "joinBuyRequest(uint256)", +"25f40624": "isItNotSafe()", +"25f40a33": "changecullBurnrate(uint256)", +"25f419d6": "get_Bid_winner(uint256)", "25f43ed5": "setMemsize(uint256)", +"25f4503b": "eligibleForSpecificRound(address,uint32)", "25f4c703": "setFoundersPercent(uint256)", +"25f4d047": "setMinSellAmount(uint256)", +"25f5c5e9": "erc1155WrapperModel()", "25f5cb1e": "getAllowedForTransferTokens(address)", "25f5ec45": "getCheapestCardWager(address)", +"25f60050": "Get_Token_Contract()", "25f673f5": "Love(address,address,uint256)", +"25f6b2b8": "addVoteBox(address)", +"25f726f1": "contractClosed(address,uint256,string)", "25f731c8": "transferOwnershipBack()", "25f885d0": "CashOut(bytes)", +"25f8a268": "getJulTokens(uint256)", "25f96b73": "ownerSupply()", +"25f99547": "addLiquidityETHOnly(address,bool,uint256)", "25f9bfef": "CONTRACT_REGISTRY()", "25f9f1e6": "lockOwnerBalance(uint256,uint256)", "25fa0131": "isZero(address,string)", "25fa5ae1": "createShapeShiftTransactionPost(string,string)", +"25fa7003": "isOracleFinalized(uint256)", +"25fa7228": "etherPriceInCents()", "25fa8a4f": "_firstTokenId(address)", "25fab539": "removeDragonFromSale(uint256)", "25fad06a": "clearances()", +"25fb2b9b": "_winnings()", "25fb439c": "POW33()", +"25fb6353": "setV2Router(address)", "25fb66b9": "getHeroItems(uint256)", +"25fbbf2e": "show_usdt_balance()", +"25fbf4ee": "initialize(uint256,uint256,address,uint256,uint256,uint256,address)", +"25fc2ccf": "withdraw_delay()", "25fc575a": "deregisterToken(uint32)", "25fc5f02": "HIPHOP()", "25fc790f": "te()", +"25fcd452": "getBalanceAndApproved(address,address)", +"25fcd9cb": "approve_446(address,uint256)", "25fcdad8": "complaint(address)", "25fced01": "sellTokensPreIco()", +"25fced97": "lastPosition()", +"25fceed9": "transferToken(address,uint256,uint256,uint256,bytes32,bytes)", "25fd1e29": "REFUND_TIME_FRAME()", "25fda176": "notify(address,uint256)", "25fdb725": "MIN_CONTRIBUTION_ETH()", +"25fe9592": "tokenFromapeing(uint256)", "25feb519": "fifthTime()", "25ff68dd": "Initialized(address,uint256)", "25ffba04": "updateTokenStatus()", "26000ba2": "updateBalanceOnFunding(uint256)", +"26004846": "setBytes32Array(bytes32,bytes32[])", "2601d1bc": "checkGameState()", +"26029244": "changeBeneficiaryShares(address,uint256)", "2602bc8f": "_transfer(uint256,uint256,uint256,bytes32,string,uint256)", "26030a34": "report(bytes32)", +"26030bcb": "taxExemptions()", "2603ace6": "unRegOwn(address,string,address)", "2603f70c": "ownerDeclareRefundFinish()", "26044feb": "fetchdivs()", "26046743": "assetOwnerRemoved(bytes32,address,address)", "2604b767": "getEggsSinceLastHatch(address,address)", +"2604e18e": "stakerClaimed(address)", "2604f424": "FUTURE_DISTRIBUTE_LIMIT()", +"2605004a": "countSmartpotOne()", "26052ef6": "getCurrentSolver(address)", +"2605a8c7": "initializeGovernanceContracts(address,address,bool)", "2605b3c7": "participant(address)", +"260622e2": "migrateLPtokens1and2()", "26066ad5": "offer(uint256,bytes,uint256,bytes)", "2606a10b": "report()", "26070774": "Token(address)", "26073003": "congratulationFromNoel()", +"2607443b": "stakeLists(address,uint256)", +"260860c2": "tokenWithInterest()", "26086c70": "triggerVersion(address)", "2608f818": "repayBorrowBehalf(address,uint256)", "2609037c": "requestArbitration(address,bytes32)", "26091cbe": "OwnersBySpinner(uint256,uint256)", "26093bbc": "safeIncrement(uint256,uint256)", +"26094363": "withdrawEthAmount(uint256)", "26094c60": "setUnsoldTokensWallet(address)", "260958a5": "getTransfer(bytes32)", "260993f9": "registerSister(address)", +"2609e5f4": "PENDING()", +"260a2ca0": "SearchFolderTransferProof(bytes32)", "260a5227": "buyOnBehalfWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", "260a54d3": "getCA(address,address)", "260a818e": "unregister(bytes8)", "260abfa5": "EnableMember(address)", +"260ace31": "initEscrow(address,address,uint256,uint256)", +"260ad572": "setSubscriptionTime(uint64)", +"260ae702": "vaultLockDays()", "260b0bc8": "payToOracle(uint256,uint256)", "260b8f6e": "GetEvaluate(address,uint8)", +"260ba7b7": "toAsset(uint256)", "260bf85a": "updateAmountToTakeAsRake(uint256)", "260c2214": "setValid(uint256,bool)", "260c3af1": "IcapTransfer(bytes32,address,bytes32,uint256)", +"260ca929": "goldmineDownlineSet(uint256)", +"260d0463": "testFraxDeployment()", "260d387b": "blacklistUserForTransfers(address)", "260e6885": "BazraCoinToken()", +"260e8dfc": "pot_(uint256)", "260e9640": "lock(uint256,uint256,uint256,uint256)", +"260e96dd": "getForcedWithdrawalRequest(uint256,uint256,uint256)", "260ea6c9": "myDividendBalance()", "260edaaa": "surplusTokens()", "260f836d": "intercrypto_getInterCryptoPrice()", +"260fcd5d": "migratePlayer(address,uint256,uint256,uint256)", "26109699": "Withdrew()", +"2610a566": "key2address(bytes32)", +"2610c614": "SendEther(address,address,bytes32,bytes32,uint256)", "26111ab2": "addToSet(uint256,uint256)", "2611341b": "submitApplication(address)", "26119a0b": "changeFeeETH(uint256)", +"2611b114": "getStakeholderStakeTime(uint256,address)", "26121ff0": "f()", +"2612d8c0": "ZeroEthFinished()", "26134334": "getProjectKudos(bytes32)", +"2613830a": "get_self_share()", "2613ba9a": "PlatformDeposit(address,address)", "2614195f": "getNameFee()", +"26148e51": "Winning(address,uint256,uint256,uint256,uint256)", "2614d4a4": "spendCredits(address,uint256)", "2614fff6": "lengthOfCommonPrefix(bytes32,bytes32)", +"2615a646": "votingPeriodInBlocks()", +"2615ab4b": "investor_pool_amount()", "26161670": "donkeyRanking(uint256)", "2616501d": "defaultRate()", "261669ba": "HeroesToken()", +"261672e3": "onAdminUserChange(address,address)", "26168eed": "getTestimonial(uint256)", +"2616ee4d": "getDataUsingAccessor()", "261775f6": "BlokGrup()", +"2617dd4d": "addAllowlist(address[])", "2617fc13": "resetcardPrice()", "26180224": "newChallenge(uint64,uint64)", +"261866df": "setLevelWeight(uint256[])", "261879ed": "addKitty(uint256,uint256,uint256[5])", "26188437": "tokenReserved(address,uint256)", "26188a3f": "increaseAllowed(address,address,uint256)", "2618a571": "DEVELOPMENT_TEAM_CAP()", +"2618ea6c": "stakeLocation(address)", +"26194856": "EventAttackCastle(address,uint32,uint8)", "26195901": "numAnimals()", "2619ba7f": "ETHFee()", +"261a1685": "removeScalingFundsAgent(address)", "261a323e": "exists(string)", "261aa1c5": "additionalBonusPercent()", "261ac279": "getApiByIdWithoutDynamics(uint256)", +"261ad0c5": "uniLPTokensLockDurationInDays()", "261b2c5e": "stepVestingDuration()", "261b4205": "equalBytesToBytes(bytes,bytes)", "261bd0f1": "BUY_BACK_BONUS()", "261c085e": "registerChallenge(bytes32,uint256)", "261c42dd": "getAllRevisionTimestamps(bytes20)", +"261c54fa": "targetPriceOracle()", "261c70bd": "voteMessage(bytes32,uint256)", "261cb08a": "burnPausedTime()", +"261db2ad": "setMaliciousSlashPercent(uint256)", "261de7c4": "right33(uint256)", +"261e3e2b": "addToken(address,uint256,uint256,address,uint256,uint256)", "261e9693": "balances4(uint256)", "261eafc8": "addMasterTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"261eb4e5": "staticIpfsImageLink(uint256)", "261ed1d8": "farmCities(uint256)", "262006e9": "getFirstDocumentIdBetweenDatesValidFrom(uint256,uint256)", "262007c0": "getBetter()", @@ -21833,37 +39865,70 @@ "2620f61c": "storeClaim(uint16,address,uint256)", "2620fb2b": "getNextTime(address)", "2620fd4a": "setupICO(uint256,uint256,uint256,uint256)", +"2621325b": "isContestContract()", "262199c3": "changeTokenOwner()", "2621b6e3": "finalStageRefund()", +"2621ed73": "addGenerationFunds(uint256)", +"26224c64": "userBalances(address)", +"26226696": "LogBalanceDecreased(address,address,uint256)", +"2622678c": "retirementYeldTreasury()", +"2622a2f5": "approve(address,address,string,uint256)", +"26231592": "deleteAdditionalRewards()", +"26231ec8": "_allocPointForWBTC()", "2623297e": "zt()", "26232a2e": "platformFee()", +"262330b4": "testAddress()", +"2623a983": "getDataHash(string,string)", "2623f687": "getRevenue(uint256)", "2624597c": "createTokensForEvent(address,uint256,uint256,string)", "2624b2d9": "EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH()", "2624c4eb": "EtheremonEnergy(address)", "2625e2e1": "post(address,address,bytes32)", +"2625ebba": "_allocPointForBTCB()", +"2626ab08": "BET_MIN()", +"2626bb79": "jackpotLeftBalance_()", +"26271c72": "ethUsdChainlinkAggregatorAddress()", "26278f86": "unrestricted()", "262799f7": "PaquariumTokenTest2(uint256,string,uint8,string)", "262834da": "_addOperator(address)", "2628803f": "migrateREP()", "262933cb": "responseFromWS(address,uint256,bytes32)", "26295b52": "createGalaxy(uint8,address)", +"262a2d84": "check_time_and_place(uint256,uint256,uint256,uint256)", +"262a48fb": "NUM_RECIPIENTS()", +"262a9dff": "age()", +"262aa498": "numberTwo0(bytes,string)", "262aa9fc": "DOGToken(uint256)", "262af333": "sponseeAddress()", "262af3dd": "getClassViewValue(uint256)", +"262b80f2": "TokensBurned(address,address,address,uint256,uint8,address)", "262b9f8c": "finishRoundA()", "262bcb68": "mintBooster(address,uint32,uint8,uint8,uint32,uint24)", +"262bf137": "freezeOf(uint8,uint32)", +"262bfc7a": "depositAllHeroesToGateway()", "262c0b72": "getPayoutFreezePeriod()", "262c3666": "forward(bytes32[],uint8,bytes32,bytes32)", +"262d0a85": "udt()", +"262d29ed": "joinPool(uint256[],address,uint256)", +"262d6152": "zap()", +"262d75df": "getStoragePrice()", "262da6df": "TransferOwnershipOperationEvent(address,uint256)", +"262f167e": "deleteHolder(uint256)", +"262f51c2": "seedLimit()", "262f8244": "HGSOCIAL(uint256,string,string)", "262f8c0e": "addTimelock(address,uint256)", +"262f9006": "mykeyethsused(address)", +"262fd85d": "updateArtworkName(string)", "262fe547": "testCheckSavecEthBalance()", "2630271d": "setlockaddress(address,bool)", +"26302bba": "createInvoice(uint256,string,address,uint256,address,uint256)", +"26303056": "getArtistShares(uint256)", +"26303cfb": "C9(bytes)", "2630c12f": "priceOracle()", "2630d97d": "setAtomLev(uint256,uint8)", "2630ee9f": "revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", "2630ef36": "setNumOfTimesSteal(uint8)", +"26315438": "initGoal()", "263164b9": "getSalaryTokensTotalCount()", "26316e58": "setMigrationMaster(address)", "26324eff": "producers(address)", @@ -21871,28 +39936,48 @@ "2632924d": "left30(uint256)", "2632bf20": "unblockMe()", "2632fc3c": "MichiganvsLoyola()", +"263438ba": "revokeFile(address,bytes32,bytes32)", "2634592a": "logReportsDisputedCalled()", "26345de2": "VendingMachine()", "26348325": "smartContactForSale()", "2634d90d": "ArcherFreeCoin(uint256,string,uint8,string)", +"26355da1": "ChangeBurnAmount(uint256)", "263570c0": "addStorage(string,address)", +"26358308": "disCredit(address,address,uint256)", "2635f4de": "registerLibrary(bytes,address)", "2635f59f": "InterfaceToken()", "263631b4": "euroCents2wei(uint256)", +"2637a477": "deleteContract(address)", "2637bb2e": "isTransferProxy(uint32,int256,address)", "26381b05": "canReceiveTokens()", +"263841aa": "donationHappened(uint256)", "26387b07": "Fortune()", +"263885a9": "Z00MrtAirdropZ00M(uint256,uint256,uint256,uint256)", +"26388a8d": "sendRemainingaOHM()", "2638b25c": "seedEndTime()", +"2638b6d9": "setBurningNFT(address)", +"2638c09e": "reward_token()", +"2638df6b": "momo()", +"2638e69e": "weth_add()", +"26395b28": "hasEpic(address)", +"2639e34b": "swapRegUser(address,uint64)", +"263a5362": "fees(address,uint256)", "263a6d79": "initiateTransaction(address,uint256,bytes)", +"263b4285": "createSmartFund(address,string,uint256,address,address,address,address,bool)", "263b694a": "MIMIMUM_CONTRIBUTION_AMOUNT_ICO()", "263c0a8d": "_setLagParams(string,uint16,uint8)", "263c493a": "enable_deposits(bool)", "263c6ec0": "usdToTokens(uint256,uint8)", +"263c9435": "setTIC(address)", "263ce6a0": "getWinningPrediction(address)", +"263ce87f": "changePartnerDeployer(address)", "263d4878": "triggerRefund()", "263d5ad0": "vaultPercentage()", "263dffba": "_releaseVouchers(address,uint256,uint16)", +"263e0c1b": "isERC20(address)", +"263e2cb7": "displaybdc()", "263e3d5d": "terminateContract(uint256)", +"263e5d3c": "clearDOS()", "263e6d0d": "INDOPAY()", "263e74e6": "computeBonus(uint16)", "263e79b5": "addCreditScore(uint256,string)", @@ -21903,130 +39988,227 @@ "263fbd45": "getContractUpdatedTimeById(bytes32)", "263fbef2": "District0xNetworkToken(address,address)", "263ff8b9": "buildTokenId(uint256,uint256,uint256)", +"2640689a": "novaV1()", "26407e36": "calculateSharesInTheRevenue(uint256,uint256)", +"26408279": "getLoyalty()", "26409047": "BDACoin()", "2640b401": "SetRate(uint256)", +"2640d9db": "getStakerBalance(address)", "2640f62c": "getTokenToEthOutputPrice(uint256)", "26413760": "reducePlayersGooProduction(address,uint256)", "2641d381": "totalNumberTokenSold()", +"2641e5cd": "setBorrowCollateralizationRatio(uint256)", "26423259": "viewCoinSupplyAndFunding(bool)", "2642567e": "coinData(address)", +"26427b6b": "addBountyAdresses(address[])", "264282f2": "markTokens(address,uint256)", "26428430": "_deleteInt(bytes32)", +"26437db3": "withdrawDepositsByProfile(uint32)", +"2643dd22": "uInfo(address)", "2643fc13": "spermlordReq()", +"26442c64": "isProvenanceDelegate(bytes32,address)", "2644f9f8": "getAssetsOwners(uint256)", "26452036": "InitCountry(uint256,uint256)", "264534be": "OMC(uint256,string,string)", "26458beb": "firstPreSaleDate()", +"2645b406": "lotti()", +"2646172b": "ForSaleWithdrawn(uint256,address)", +"26465826": "setCallFee(uint256)", "2646754d": "TestTokenA()", "2646b176": "getPaimentStatus(address,uint256)", "2646bce6": "LogWinner(uint8)", "2646bfcb": "pay(uint256,uint128,address,bytes)", "26470ae4": "getBonusFactor(uint256)", "26476204": "stake(address)", +"2647f51d": "_rebasePositivePriceUSD()", "26483bcd": "tokenMultiTransfer(address)", "26484a44": "start3XPhase()", "26487265": "contractExecuted()", "26488531": "banMember(address,string)", "2648a7e2": "EtherRedeemAccepted(address,uint256)", +"2649263a": "isValidator(uint256)", "264934de": "submitTokenForEdit(uint256)", "26493a6f": "setAllocateAgent(address,bool)", +"264964ba": "changeRole(bytes32,address)", +"26496a5d": "nextSummonTime(address)", "26496cab": "Milestone_IcoSuccessful(string)", "2649cb10": "pNumberOfLockedTokens(address)", "2649d62e": "multiMint(address,uint256)", "264a3edc": "setPolls(address,address)", +"264a6208": "numVaults()", "264a6d10": "get_next_asset_document_from_document(bytes32,bytes32)", "264ae918": "withdrawChannel(address,uint256)", "264b2b8e": "returnBalance(address)", +"264b44d5": "cancelPayout(string)", +"264b549f": "batAJoin()", +"264bea0f": "_tier1StartTime()", +"264c0912": "exodusMode()", "264c22bb": "getAmountOfGene(uint256)", +"264c2a13": "InviteCreated(address,address)", "264c2cdc": "generateRandomNumber(address,uint8)", +"264c4a20": "playOrders_(uint256)", +"264c79df": "nAddrHashO(address)", "264c8e9a": "whatWasTheVal()", "264caf14": "addVestor(address,uint256,uint256,uint256)", +"264cce47": "contractDB()", +"264d1a40": "owner_payable()", "264d26e1": "ICO_CAP1()", "264d7797": "tokensBought(address)", +"264da19e": "pendingRaiseMap(bytes32)", "264dac0f": "endBorrowAgreement(string,uint256,uint256)", +"264df8a7": "setJeetTimer()", "264e3018": "EtherDeltaHandler(address)", +"264e49db": "p0()", "264f28fe": "getOwnerDeposit()", "264f5718": "rondaSilla()", "264f630d": "DonationReceived(address,uint256)", "264faeb8": "getReportsCounter(uint256)", "26500c84": "ResolverNode()", "265028c2": "GetMaxBuyIn()", +"26506d69": "predecr_s8(int8)", "2650a47c": "withdrawEther(uint256,uint256)", +"2650a613": "changeApprovalDelay(uint256)", +"26512160": "snapshot(address)", +"26514b23": "MainUpgrade()", +"265159bb": "ownerToFiles(address,uint256)", +"26519ae5": "HarvestHxbLp()", +"2651f82d": "mod(address)", +"26526df3": "collateralPercent(uint256)", "26529836": "ADVISER_STAKE()", "2652b4a5": "UDA()", "2652c0f4": "hasVerifiedAttributeValue(address,uint256)", "2652c757": "submitBracket(bytes32)", +"2652d0b5": "governancePeriods(uint256)", "26532df8": "subZero(uint256,uint256)", +"26536947": "convertEthToToken(address,uint256,uint256)", +"265396ef": "numrandom()", "2653ab19": "getMC(uint256)", +"26541b56": "addCandidate(string,string)", +"26549736": "setMessageRecipient(bytes32,address)", "2654e624": "ResumePayment()", "265580f5": "setRegistryExecID(bytes32)", +"2655bd73": "payments(uint256,uint256)", +"2655bffd": "inputTokenIndex(address)", "2655dd0b": "storeId(address,address,uint256)", "26563b40": "whitelistManager()", "2656455f": "claimEthFor(address)", +"26565413": "getProductPrice(int256,int256)", "2656b77d": "addToBattle(uint64)", "2656da30": "setFuelContract(address)", +"2656df48": "oneCpu()", +"2656eb5f": "withdrawByPID(uint256,uint256)", "26571388": "xpaExchange()", +"265744f1": "burnLiquidity(uint256)", +"26574aa8": "estimatedTime()", +"265905c2": "getApproversList()", "26591e79": "BONES()", "2659d8ef": "setExchangeFormula(address)", "265a3afd": "registerBase(bytes32)", +"265a553a": "engine2Winners(uint256)", "265a8636": "_mintFish(address,uint32,uint8,uint8,uint8,bytes16)", +"265aa621": "nfts(uint256)", "265af6d1": "withdrawFundsAndPayRoyalties(uint256)", "265b3e6c": "calculateIssueGoldFee(uint256,uint256,bool)", "265b5d93": "getMaxLockAmount(uint256,uint256)", +"265b9eb9": "liquidityShareToken()", +"265bd0b3": "Customers(string)", +"265bf606": "ctt(address,uint256)", "265c920f": "setBonusParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "265cdd88": "Bet(address,string,uint256)", "265cfbbc": "Emitter()", +"265d1071": "showJobLiquidity(address)", +"265d4409": "tokenMaster()", "265d900b": "wtech()", "265dcbd3": "StandardTokenWrapper(address)", "265f0393": "KryptopyCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", "265ffe2b": "ethMin()", +"266001d3": "concatenate(string,string)", "26602470": "hashEIP712Message(bytes32)", "2660316e": "plyrNames_(uint256,bytes32)", +"26603afc": "setDirection(address,address,bool)", "26605772": "renameTulip(uint256,bytes32)", +"26606448": "useTicket(uint256)", "2660b56c": "setData_2(string)", +"2660c2e6": "validStatus()", "26617c28": "_setPaused(bool)", +"26620d7a": "MinimumInvest()", "26625e46": "formatDecimals(uint256)", "26627d80": "third_whitelistSupplier()", +"26631b65": "bone()", "266361f5": "getLottoData(uint8)", +"26636dc8": "setTimeComplete(uint256,int256)", "26637579": "_removePlayer(uint256,uint256)", "26638a38": "spin(int256)", "2663a4ed": "byteToLower(bytes1)", +"2663cc89": "checkUpdateTime()", +"2663d5e4": "templateId(address)", +"26641802": "testBurnTokenFunction()", +"26644c03": "NewTrustedContract(address)", +"26648337": "buyPriceInWei(uint256)", +"266487c4": "getAmountForUser(address)", +"26649b9d": "ZOOMENrtAirdropZOOMEN(uint256,uint256,uint256,uint256)", "26654d57": "refundParticipant(address,uint256,uint256,uint256,uint256)", +"266565a9": "frozenBalance(address)", "266578d0": "_isRateActual(uint256)", "26657c77": "Validate(string,string,string)", +"2665fad0": "toUint64(uint256)", +"266622af": "LIQUIDITY_ETH()", "26663203": "withdrawFromEscrow(address,bytes32)", +"2666ed0a": "removeFromTransferWhitelist(bool,address)", "266710ca": "manualUpdateBalances_only_Dev()", "266716f6": "GTSToken()", "2667f407": "__proxy(address,bytes)", "2668748d": "applyAuditorsCheckUpdate(address,address,uint64)", +"26689f81": "Cat16(address,uint256)", "2669268b": "FUC(uint256,string,string)", "266987ef": "p2pLocker(address)", "26699576": "playSystem(uint256,address)", +"2669c252": "newAction(uint256,uint64,address,bytes)", +"266a74ca": "rewardsA(address)", +"266af840": "pendingCandy(uint256,address)", "266b059e": "setSendAmount(uint256)", "266b2eb5": "Conserve()", +"266bceca": "playerSum(address,uint8)", "266bd375": "MyPizzaPieToken()", "266bd901": "check_price(uint256)", "266c2132": "_prand()", +"266c2e79": "swapBwareTokens(uint256,uint256,uint256)", "266cc170": "Y2J()", "266ce248": "createPlayer(uint16)", "266cf109": "record()", "266d7bda": "lockupEndTime()", "266d8299": "DriveholicToken()", +"266da16b": "effectiveValueAtRound(bytes32,uint256,bytes32,uint256,uint256)", +"266de1e0": "checktime()", +"266df27c": "isInCatastrophicFailure()", +"266e0330": "sushiswapV2Factory()", +"266e2bd8": "getAvailableLiquidity(address)", +"266e9f5e": "userV3ItemNumber(address)", +"266f1327": "changeStats()", "266fc436": "producedSilverCaps()", "266fc5d5": "totalContributorsProfit()", +"26704b27": "getPointBlock(uint256)", "2670bdf0": "setERC777(address)", "2670cc14": "transfekbolPlutocrat(address)", +"2670d050": "prevriskyrebase()", +"2670d216": "unSetColdWallet()", "267127ec": "getTokenSettings()", +"26716109": "registerWithdrawalSuccess(uint256)", "267177eb": "sendPayout(bytes32,uint256)", "2671b61d": "OfferRouting(bytes32,bytes32,uint256,bytes)", "2671e253": "resetTraps(uint256)", +"26728867": "transformHXY(uint256,address)", "26728b14": "rewardPXL(address,uint256)", +"26728f45": "abxPerBlock()", "2672b3e2": "SplitterEtcToEth()", "2672c952": "seed_coins()", +"2672f526": "government()", "26735c06": "TOTAL_POOL_COMMISSION()", "26736363": "APRInflationToken(uint256)", +"267409d4": "joinstake(uint256,uint256,uint256)", "26741c88": "IcoMessage()", +"26741e7d": "depositFees()", +"26742272": "getBalance(uint256,address,address)", "26744071": "WLCoin()", "26745909": "PRNG_Challenge()", "26746f5f": "updateGenerationRatio(uint256,address)", @@ -22035,145 +40217,272 @@ "267490aa": "turnOnPresale()", "26749ad7": "approvedContracts(address)", "267502c9": "setAquarium(address)", +"267509c3": "registerContract(bytes32,address,bytes32)", "2675c123": "CloseContract()", +"2675fc2e": "approve_864(address,uint256)", "26760d1d": "setMaxTms(uint256)", +"26762795": "Build(address,uint256,uint256)", +"2676608c": "childIdsForOn(uint256,address)", "26767298": "RimuoviMiner(address)", "26767cfe": "shareProfits()", "26768b83": "_emitDestruction()", +"267716d2": "reward_integral_(address)", "2677ef1b": "_seal(address,address,uint256)", +"267811a5": "swapAllUsdt()", "26782247": "pendingAdmin()", "267822c1": "finalizeChangeBurnBounds()", "267835a4": "_removeBurner(address)", +"2678ac4b": "tenDonVi(uint256)", +"2678df96": "currenciesUsingAggregator(address)", +"2679497b": "lotManager()", +"267955b0": "btcTxFeeRewardPerTPerSecInWei()", +"26796dd5": "supplyeffect(uint256)", "26798494": "EusdContract(address,address,address,uint256,uint256,uint256)", "26798680": "toReal(int216)", +"2679c246": "getSuppliesIfUpdated(address)", +"267a3c1d": "startSaleTSLF(uint256,uint256,uint256,uint256,uint256)", +"267ac6eb": "onSecStage(address,uint256,uint256,uint256)", "267acd6c": "getPricesPerInterval(uint8)", +"267b0798": "getUnlockedBalance()", +"267b4cc3": "openCase(uint256,uint8)", "267b6922": "entries(bytes32)", +"267c1562": "addressMerel()", "267c4ae4": "exists()", "267c8507": "authorizeManager(address)", +"267ccb5a": "exchangeLockedValue()", +"267cfc9e": "testDataTypeString()", +"267d22c0": "_isRewardBuyerDandy()", +"267d2c7f": "TREASURE_COMBO()", +"267d5e4d": "BetMatch(address,uint256,uint8,uint8)", +"267dd102": "callFinalizeDG()", +"267dd5b7": "minimum_frax_for_AMM_buy()", +"267edd2f": "DAILY_INTEREST()", "267f20a2": "_transferTo(address,uint256)", +"267fbce1": "AddDelegate(address)", "267ff78c": "approveRequestUnpause()", "26811c09": "NVBToken()", +"268139d5": "removePublicReserveAddress(address)", +"268141cc": "canInvest()", "26815de3": "updateGoldPrice()", +"2681f7e4": "uniswap()", "2682644f": "PURCHASE(address,uint256)", "26826bf8": "setImage(bytes)", +"2682742c": "withdrawPool3(uint256)", "2682a0ac": "CrowdsaleTokenExt(string,string,uint256,uint256,bool,uint256)", +"26830346": "authorizePendingTransfer(uint8)", "26834988": "numListed()", "26839e53": "getUintValues(bytes32)", "26839f17": "depositEther(uint256)", +"2683eb62": "updatePublisherRegistry(address,string)", "26843251": "presale1_startdate()", "268451a2": "testFail_set_price_unauth()", "26848a86": "setPicture(string)", "26848b68": "checkCrowdsaleBalance()", +"268553a3": "getPayAmount()", +"268562df": "setWppV1Collector(address)", +"26860490": "exchangeSynthsForDETAtRate(uint256,uint256)", +"2686488b": "ReconfeeAccount()", +"268657fa": "findBurn(uint256)", "26866160": "secondsBetweenReadings()", +"2686f82b": "onBadgeBuy(uint256,address,address,uint256,uint256)", "2687c645": "contributeInternal(address,uint256)", "26881518": "setupFee(address)", "2688454a": "U()", "268855a4": "ParsecCrowdsale(address,address,address)", "26887303": "TourCashStandardToken(uint256,string,uint8,string)", +"2688ead8": "TOTAL_PAYOUTS()", "268959e5": "removeAdmin(address,address)", +"26898fe1": "editExternalPositionData(address,address,bytes)", "268a4559": "competitionStatus()", +"268a9188": "lastMonsterId()", "268b0459": "getRecordBalance(address)", "268b5344": "PlanetOfOwner(address)", "268b946c": "toUint8Throw()", "268bb78e": "propose(address,bytes,uint256,uint256)", "268bc65d": "signatureDropMultipleAmount(address[],uint256[])", +"268bf3b8": "_mintr()", +"268c23a3": "countShareAndRecommendedAward(uint256,uint256,uint256)", "268c969a": "emergencyDrawingReset()", +"268c9bd5": "mortgageAdd(uint256)", +"268ca008": "withdrawLotery(uint256)", +"268cab49": "getStakingAndDaoAmount()", "268cb5f7": "queryCost(address[])", "268d50fe": "ownerSetHouseEdge(uint256)", "268da061": "CRFtoken()", +"268de6fb": "withdrawSaleProceeds()", "268e7075": "toBytes2(bytes)", +"268e8970": "createIdentity(address,address[],address[])", "268ea7f6": "ReInvest(uint256)", "268eb055": "setDescription(uint64,bytes)", "268ef7e8": "holdAddress1()", "268efdaf": "StdInt64(int64)", +"268f0155": "lockedToken(address)", "268f1153": "changeState(uint8)", +"268f1a25": "editTokenReward(address,uint256,string)", +"268f993c": "setClaimable()", "268fe426": "dailyReset()", +"26903385": "mooncakePerBlock()", +"269043a6": "getInvestorLock(address)", +"26907851": "addtoEarlyInvestors(address,uint256,uint256)", "2690f0d5": "foundationLock()", "269106e9": "dayCycle()", +"26913185": "addMasterPool(uint256,string)", +"2691e3c4": "LogChangeCommissionFee(uint256)", +"2691e401": "redemptionFee(address)", "2692281d": "requestChangeBurnBounds(uint256,uint256)", +"26926fba": "sendMemoToken(uint256,address,string)", "2692de22": "sendAllFunds(address)", +"26931fdd": "doHal9kStaking(address,uint256)", "2693c150": "getPlayersTickets(address)", +"2693ebf2": "tokenSupply(uint256)", "2693eca0": "devSFTDestination()", "2693ed9b": "calcTokenSold(uint256)", "2693ee80": "bonusPool()", "269445db": "phase_6_rate()", +"26946c91": "getTradingRewardsEnabled()", +"26948315": "updateErcContractAddress(address)", "26949220": "withdrawWonCosFromGame(uint256,uint256,uint256)", "2694f6bb": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"26955b87": "IdeasSold(address,uint256)", +"2695dc46": "lootBoxInstance()", "26961b8c": "Token99chain(uint256,string,uint8,string)", +"269650b7": "PlayerJoined(address,uint256,string)", "26965dad": "deployStepOne()", "269695fe": "groomVow()", "269714dd": "maximumTarget()", +"26971883": "pauseNewDeposits()", "269724ef": "assertEq6(bytes6,bytes6)", "26976e3f": "upgradedAddress()", +"269771da": "incrIIStats(uint256,uint256)", +"2697bfe4": "emergencyCooldown()", +"2697dce2": "taxManyOutcome(uint256,uint256)", +"26981b9a": "Exchange(address,uint256,uint256)", +"26982786": "setAddressMap(string)", "26987b60": "currentIndex()", +"2698c20c": "invoke2(uint8[2],bytes32[2],bytes32[2],uint256,address,bytes)", "2698eec9": "logFeeTokenMinted(address,address,uint256)", "269975d0": "GameDetails(uint256)", "2699a7e7": "setPOOL_edit_31(string)", "2699c808": "tradeOption(address[3],uint256[3],uint256[2],bool,uint256,bool)", +"269a08d5": "yTokenValueFromYCrv(uint256)", "269a7c3f": "buyAndTransfer(address,address)", "269aacc8": "getDividendPayout(uint256,uint256,uint256)", +"269ac051": "blockLock(address)", "269b0737": "DaoCasinoToken()", +"269b9a08": "stopAuction()", "269c4bca": "viewFoundersTokens()", "269c6ece": "lockedTwoHasEnd()", "269cdaac": "withdrawLockedTokens()", +"269d6e91": "LogSkipPreparePayment(address,uint256,uint256)", +"269d9e92": "burnState()", "269db987": "calculateBonusAmount(uint256,uint256)", +"269dc535": "_nftMaxAmount()", +"269dc7c1": "doesGameExists(string)", "269de5a0": "EpicExchange()", +"269e1d1a": "VOTING()", "269e4f3c": "refundWei()", "269eb58c": "setFeeFromPayer()", "269ecc6d": "backersAddresses(uint256)", "269ecf28": "submitBuyOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", "269f4663": "approveMintTokens(address,uint256)", "269f96c9": "presaleSoldTokens()", +"269fadb3": "openEscrow()", "269fe82e": "calcBurnAmountFromFeeBurner(uint256)", +"26a03d84": "getContractBalanceOf(address)", "26a09392": "addSecondaryAddress(address,address)", "26a1529e": "amountOfStakeReturnedOnCancellation(uint256)", +"26a167e7": "_participationAmount()", "26a18375": "setAvailability(bool)", +"26a1f550": "dailyMix(uint256)", +"26a203cb": "changeTranEth(uint256)", "26a21575": "tokenRaised()", "26a26f71": "TgeTeamReleasingScheduleContract()", "26a3bd4e": "subtractBalance(address,address,uint256)", "26a3f45d": "initOwner1(address)", +"26a40c99": "lastClaimedAt(address)", +"26a46f88": "updateNFTMarket(address)", "26a4861c": "CROWDFUNDING_PERIOD()", "26a49e37": "price(uint256)", "26a4c847": "maxLendingItem()", "26a4e8d2": "setTokenAddress(address)", "26a52019": "agentMakeOrder(address,address,uint256,uint256,address)", +"26a528da": "systemCancelAddLiquidity(uint256)", +"26a57244": "oneDollarRate()", "26a5a554": "removeFromReceiveAllowed(address)", +"26a60175": "getUnitJadeStealingMultiplier(address,uint256)", "26a65c10": "createDigitalArtFee()", +"26a698fe": "swapMaster()", "26a6dfed": "toogleTransfers()", "26a7985a": "getMaximumCallGas()", +"26a8184f": "totalStackedEth()", "26a82e8b": "autoPreSaleSuccess(address,uint256)", "26a8d1e5": "_changeManagerImpl(address)", "26a934f5": "minResalePercentage()", "26a9408c": "returnTokensFromHoldBountyAddress(uint256)", "26a9de53": "verifiedTransferFrom(address,address,uint256)", +"26aa0f5f": "getUserReferrerLast(address)", "26aa101f": "isTokenRegistered(address)", +"26aa2bd2": "ERR_SRC_AMOUNT()", +"26aa3712": "permit_user(address)", +"26aa6068": "scoreWithdrawn(address)", "26aa7c58": "addBuyer(address,uint256)", +"26aacc09": "setIlkDebtCeiling(address,bytes32,uint256)", +"26aae04b": "systemCancelRemoveLiquidity(address,uint256)", +"26aafd96": "getFamerVote(uint256)", "26ab378b": "addMood(string)", +"26ab462e": "setUserInfos(uint256,uint256,address,uint256[10])", +"26ab5a75": "qtc()", "26abc9ab": "CmctSale(address)", +"26abdad4": "BOR()", "26abfe09": "burnUndistributed()", +"26acc2bc": "logQualified(address)", "26ad3abc": "startTimeStage3()", "26ad7b40": "_doesEveryTokenHaveLockupPeriod()", "26ad8d1b": "getPositionStartTimestamp(bytes32)", +"26ae00fa": "uniswapRouterContract()", "26ae27d6": "lonmemay()", +"26ae2b78": "rewardsPeriod()", "26aeba91": "FarziTokenSale()", "26aebfac": "delPack(uint8,uint128)", +"26af4327": "isLoanTokenSupported(address)", +"26af73bf": "rewardsExpirationTimeout()", +"26afd2e8": "unpackTokenId(uint256)", "26afe980": "queryOracle()", +"26b0300c": "coinCounter()", +"26b0447d": "getRoundBetInfo(uint256,uint256)", +"26b09c29": "addWrapper(address)", +"26b0b3a7": "enterBet(uint256,uint256,uint256,uint256)", +"26b10a16": "isValidMM(address)", +"26b15ab3": "pooledBalance()", +"26b1c2ee": "getValueParts(uint256)", "26b238d8": "doom()", "26b3293f": "deposit(address,uint256,bytes32)", "26b387bb": "pendingReturns(address)", +"26b38ffc": "kovanWETHAddr()", "26b3a6f8": "SelfKeyToken(uint256)", +"26b3bf2f": "newTalentsAndPartnerships()", +"26b40a3f": "dtrade_escrow()", "26b41613": "processFunding(address,address,uint256,uint256)", "26b45b09": "rateTier4()", "26b4ce7f": "NP(uint256,string,string)", "26b51c8c": "finalBlock()", +"26b52ab6": "tokenPriceUpdate(uint256)", "26b52faf": "firstWithdrawAmount()", "26b66cb7": "amendedEarlyPurchases()", +"26b69354": "reason(uint256)", +"26b6a8e1": "nyanV2LP()", "26b6c0b4": "settingsSwitchTransferAccess()", +"26b77eec": "DEXE()", +"26b79888": "delegateAndReturn()", +"26b7d223": "kimchiPerBlock()", "26b7d803": "getTotalBuyCount()", +"26b7d9f6": "proposeFork(address)", "26b7fe35": "GainStuff(address,uint32,uint256)", +"26b80529": "mapEra_Total(uint256)", "26b85ee1": "myAddress()", "26b85f0d": "mininumContributeUSD()", "26b916b4": "Set_Interest_Rate(uint256)", +"26b91f5b": "adminPerc()", "26b92a0e": "SomniumToken()", "26b93939": "Jokercoin()", "26b9ce13": "setTransfersEnabled(bool)", @@ -22181,323 +40490,622 @@ "26ba2e47": "paidETH(address)", "26ba4319": "setDirector(address)", "26baca1c": "getStats2()", +"26bad593": "dateToYields(uint256)", +"26bafe5f": "changeDurations(uint64,uint64,uint64)", +"26bb2537": "FPSopen(uint256,string,string,string)", +"26bbe60a": "upgradeForgeValidator(address)", "26bca0f8": "get_my_info()", +"26bcba7b": "lpUnlockTimestamp()", "26bceb59": "mul256(uint256,uint256)", +"26bcff7d": "viewReferrals(address)", "26bd4d96": "adPriceMultiple()", "26bd78b9": "LogEvent(uint256,address,bytes4,bytes,uint256,uint256)", +"26bda739": "addElementToArrayType(uint8,uint64,uint8)", +"26bdbac9": "scheduleFunc(address,uint256,bytes,uint256,uint256,uint256)", +"26bdce71": "KNIGHT_MAX_TYPE()", "26bdd20b": "getNominatedMediator()", "26bdd814": "refundPresale()", +"26bdee37": "changeSwapCreator(address)", "26bf02cf": "getBaseLevelUpFee()", "26bf2051": "KickCommitteeVoteEvent(address,address)", +"26bf6a86": "callOnTransfer(address,address,uint256)", +"26bf6d25": "addSendingKey(address)", "26bfcde0": "GMCToken()", "26bfd35c": "rewardAD()", "26c009cb": "privateIcoSold()", +"26c016e5": "updateMyBalance()", +"26c091c1": "topPlayers_(uint256)", +"26c0aba2": "levelInfos(uint256)", "26c0ad3a": "allowRefunding(bool)", +"26c12bfb": "reserveWise(uint256,address)", +"26c14a66": "internalBind(address,address)", "26c19eba": "readValue(bytes32,uint8)", "26c1e750": "planets(uint256)", "26c21722": "getwithdrawEtherToAddressValue()", +"26c25962": "tranches(uint256)", "26c2bcb4": "checkBenefit(address)", "26c30b50": "BITS(uint256,string,uint8,string)", "26c32ff5": "demi(uint256,string,string)", +"26c33100": "MintProposed(address,uint256)", "26c387fa": "testFail_mint_without_add_authority_to_controller(int256)", +"26c3bf4b": "PolicyRuleRemoved(bytes4,address,bytes32,bytes32)", +"26c3d394": "placeOrder(uint16,uint16,uint32,uint128,uint128)", "26c3d6f8": "get_deposit_term(address,uint256)", "26c435a9": "totalUsdFunding()", "26c43d8f": "hodlerTotalCount()", "26c47909": "SXCToken()", "26c4b863": "XIOToken()", +"26c4e60d": "distributeFee()", +"26c4e8a8": "CrowdsaleClosed(bool)", "26c4fa3d": "setOfficialGameUrl(string)", +"26c50007": "conditions(uint256)", +"26c52580": "ConfirmParties()", +"26c53bea": "onStateReceive(uint256,bytes)", "26c5c154": "employeeAddress()", +"26c5c7eb": "GameOverEvent(uint32,uint32,uint256,uint8,address,uint256)", +"26c6bccd": "setEpochs(uint256[])", "26c6d361": "FanCoin()", +"26c6d7b7": "depositTamagMulti(uint256,uint256)", "26c7edaa": "flip4(bytes)", "26c81320": "lastgamewinner()", +"26c82e59": "cardPoints(address,uint256)", "26c93389": "removeFreezableAddress(address)", +"26c966f6": "getDelayDataDueTime(address,bytes4)", "26c989df": "holdBalance()", "26c9959f": "LoveToken()", "26c9bc42": "setTokenInformation(string,string,uint256)", "26c9e547": "bestow(bytes32,uint256,address)", +"26ca003b": "ParticipantInFarming(address)", "26ca1280": "_addToken(address)", "26cb2257": "outRate()", +"26cb32b7": "isRelay(address)", "26cb83b9": "setDescrutionContractAddress(address)", +"26cb93c5": "getSupplierBasicInfo(bytes32)", "26cbb8ff": "inviterRegister()", "26cbe6f5": "getHeroAvailableAt(uint256)", +"26cc133e": "artwork()", "26cc2256": "blockRewardAmount()", +"26cc651b": "is_valid_time_p4()", "26ccd77a": "withdrawStuckEther(address)", +"26cd0888": "sellingDict(uint256)", +"26cd5274": "getPlan(uint256)", +"26cdc909": "DAIToken()", +"26cddbfb": "priceDecrement()", +"26ce3110": "currentRewardsReserve()", "26ce3da0": "collectRefund()", +"26ce9ff9": "_maxBuyableSpins()", "26cee3a7": "getPlayerId(bytes32,bytes32,address)", "26cf53b9": "BTL_PERSIAN()", "26cf660d": "trustedOrderbook()", +"26cf81a7": "getBankBasicInfo(bytes32)", "26cf9165": "pixelgrid()", "26cfc76f": "TriPinCoin()", +"26d023f3": "temp1()", +"26d05335": "offerRPunkForSale(uint256,uint256)", +"26d056cc": "getUpdate(uint256,address)", +"26d05ab2": "submittedWhitelistAddition()", "26d0d75a": "ResolutionProposals(uint256)", "26d111f5": "note()", +"26d11c34": "ChangeTicketAmount(uint256)", +"26d16bc9": "isContainerForFeeToken(address)", +"26d1a38c": "updatePoolInfo(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"26d299b3": "calculateDistanceAllTeam()", "26d29ce0": "refundBid(uint256)", +"26d2b0fe": "DestroyTokens(uint64,address,uint256)", "26d2b840": "addDadRelation(address)", "26d2cba5": "updateMetaData(bytes32,bytes32,bytes32,uint256,bytes32,bytes32)", "26d2eb11": "stopPostIcoAndBurn()", "26d312f7": "sendWebGiftToken(address,uint256)", +"26d32063": "_initializeTokenBridgeLimits(address,uint256)", "26d3325d": "getExpectedPayment(uint256)", +"26d372fc": "setMessageValue(bytes32,uint256)", "26d3bde5": "execCUSEOption()", "26d3df61": "deedsOf(address)", "26d3e7e8": "inititalSupply()", "26d3e889": "testCreateWithParentsForeign2()", "26d3ed0a": "isSpentCustomerTxPaymentForMCW(address,bytes32)", +"26d44d40": "voteScoreList(uint256)", +"26d47caf": "initialMkbPoolETH()", +"26d4ba11": "balanceComisionDone()", "26d541b0": "totalPlayerCount()", +"26d5511f": "cancelRemoveLiquidity(address,uint256)", "26d64f3b": "readTeam(bytes32)", +"26d6afdd": "_emptyWallet()", +"26d6c97b": "getBond(bytes32)", +"26d6e0a4": "grantBounty(address[],uint256[])", "26d6eca3": "retrieveReward(uint256)", +"26d738ba": "lastWinnerReward(uint8)", +"26d768e9": "getPoolAPY(address)", "26d7b3b4": "unRegister()", "26d83db8": "LoveYToken(uint256,string,uint8,string)", +"26d914d1": "rewards2(address)", +"26d941ae": "setIdentityRegistryStorage(address)", +"26d9767b": "withdrawPowerBooster(address,uint256)", "26da881f": "setPrivateFundStart(uint16,uint8,uint8,uint8,uint8,uint8)", "26da8e17": "ownerUpdateCostToCallOraclize(uint256)", +"26da9141": "getRewardPortion()", +"26dabad1": "setTether(address)", +"26dacb40": "calculateVisabilityFee(uint256,uint8,uint32)", +"26db0e2b": "addAdressesToWhitelist()", "26db3c0a": "tokenIssue(address,uint256)", "26db7648": "proposedVersion()", +"26db80e9": "addAssetType(uint64,uint64,uint256)", +"26dc1315": "testSpam()", +"26dc5b12": "getAccountStorageRoot(address)", +"26dc7189": "getGrantDaysClaimed(address)", "26dcbcfc": "catPaymentCollector()", "26dd1510": "pixelblockPrice(uint24,uint24,uint24,uint24)", +"26dd1b6f": "SOLVE_TOKEN_CONTRACT_ADDRESS()", +"26dd1bd0": "highscoreHolder()", "26dd860a": "mintUniqueTokenTo(address,uint256,string)", +"26dd9c60": "PreviousAddress(address)", "26ddaebc": "getPriceWithBonus()", +"26de2299": "allStakePools(uint256)", "26dec45e": "getUserUsername(address)", +"26deca31": "Cancelled(uint256,address)", "26defa73": "addAuthority(address)", "26df61f6": "permittedContractsCount()", "26dfb6b4": "advteamPool()", "26dfe583": "partialDivest(uint256)", "26e010c8": "minInitialMarginAmount()", +"26e027f1": "yank(uint256)", +"26e04f9d": "numMarkets()", +"26e098a9": "POOL_MARKET_FRENZY()", +"26e0bc93": "migrateTokenController(address,bool)", +"26e0d8fd": "mint_to_sell(uint256)", +"26e119ac": "NottoAccept(uint256)", "26e137c2": "getInterfaceImplementationStatus(address,bytes4)", +"26e13b9b": "victimAddress()", +"26e1bb5a": "makeSellFee()", +"26e1e8c6": "addCitizen(string,string,address)", "26e23485": "renamingCostsPerChar()", +"26e2929e": "setStrat(address,bool)", +"26e2bf0a": "calculateStaticIncome(address)", +"26e2da7b": "getInExactOut(address,address,uint256,int256,int256)", +"26e2dca2": "rescueERC721(address,uint256[],address)", "26e33670": "NewQuiz(string,bytes32)", +"26e39c2d": "setRoundParams(uint256,uint256,uint256)", +"26e3fd2e": "setLim(uint256)", "26e41a3e": "airdropTokens(bytes32,address[],uint256)", +"26e41dd8": "setEnabled()", "26e43db5": "TransferSell(address,address,uint256,string)", +"26e442c5": "_encode_sol_bytes23(bytes23,uint256,bytes)", +"26e45ef5": "setBettleFees(uint256)", "26e501a8": "BitonlineStore()", "26e56c05": "SaleCapReached()", +"26e56d5e": "add_type(string)", "26e5ab38": "changeMaxWithdraw(uint256)", "26e5afdf": "Yinfiniti()", "26e5b0be": "stopMulti()", "26e6050d": "setParamsIco(bool)", "26e6074b": "frozenBalance()", "26e683fb": "NotitiaToken()", +"26e6cdde": "_safeTransfer(address,address,uint256)", "26e72d31": "resetCurrentRoundSales()", "26e770e9": "Information()", "26e77179": "PaymentRefunding(uint256,address,uint256,string)", "26e80650": "upPlayerRound(address,uint256,uint256,uint256,uint256,uint256,uint256)", "26e85250": "viewRequest(uint256)", +"26e86d95": "stakingInstance()", +"26e886c6": "performanceTreasuryMax()", "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)", +"26ea36ae": "yield21Mar31Return()", +"26ea3e17": "autoToBifiRoute(uint256)", "26ea66bf": "Mortal(address)", "26ea74e2": "approvedDividendsOf(address)", "26ea7ab8": "changeadmin(address)", "26ea9268": "FEE_SELECT_MAX_VALUE()", +"26eaadcd": "getOrderAnalyticByorderId(uint256)", +"26eab9df": "YADDPerBlock()", +"26ead24d": "ERR_BOT_NOT_APPROVED()", +"26ead9f6": "participateMine4()", "26eaee92": "devReward()", "26ebc8af": "UserAuthorizedForToken(address,address,address)", +"26ebde80": "ETH0Token()", "26ebe0bf": "totalCentsGathered()", +"26ec34df": "score(string)", +"26ec6088": "init(uint256,string)", +"26ec8688": "RewardTime()", "26eca77c": "HelloGoldRound1Point5()", +"26ecf54e": "deallocateEntry(bytes32,bytes32,uint256)", "26ed274e": "decreaseBurnApproval(address,uint256)", +"26ed4c0a": "resetClaimLimit(address)", "26ed794b": "mobilinkTeamAddress()", "26eda1ac": "putMessage(string)", +"26eeacb9": "approve_301(address,uint256)", +"26eebf41": "getRecommendScaleByLevelAndTim(uint256,uint256)", +"26eed3b5": "toTokenId(string)", +"26ef43fa": "sellTokensOnUniswapForLrcBurn(address)", "26ef8ba1": "putEth()", +"26ef8e31": "testStrLenRunesMore()", +"26f06d24": "getProtectedTokensLength()", "26f08aec": "setotherchainstotalsupply(uint256)", "26f09042": "testThrowNoFreeTokens()", "26f1069f": "approvePresale(address)", +"26f11a36": "idToSamurai(uint256)", +"26f1a1fd": "supplies(uint256)", "26f21080": "allowedToTransferOf(address)", "26f2458a": "RequestP(bytes32,bytes32)", +"26f25b2c": "afin(uint256)", +"26f27e6d": "whitelistCounter()", +"26f2e004": "freeUser(address)", "26f35ff2": "activenessUpgrade(uint256,uint256)", +"26f3b3ba": "changeUsdtProportion(uint256)", "26f3ceaf": "TSToken()", +"26f3e81c": "SENDER_WEIGHTS_SUM_MAX()", "26f4739e": "LogBuyTokens(address,uint256,uint256)", "26f489f6": "_updateCardPerkText(uint256,string)", "26f4b3de": "userTakeOrder(address,address,uint256,uint256,address)", +"26f560a8": "log(bool,uint256,address,address)", "26f590f6": "setAttribute(string,string,bytes)", "26f59b8b": "ProICOHardcap()", +"26f5bef8": "marker3()", +"26f5ccaa": "_setLiquidityRemoveFee(uint256)", "26f6ec3b": "getCities(uint256[])", "26f743d0": "createGuess(uint256,uint256,uint256,uint256)", +"26f75ada": "sakeFeeRatio()", +"26f75e05": "inflationStartDate()", "26f78835": "XXXChain()", +"26f7f257": "setL2ChainID(uint256)", +"26f823a2": "customerDeposit(address,uint256)", "26f86791": "_indexOf(string,string,uint256)", +"26f8a07a": "setFeeDestinationAddress(address)", "26f8abf9": "getRankOnePlayer(address)", +"26f8bea7": "addToPrepaid(uint256)", +"26f9047a": "connectors(string)", +"26f951a4": "ADMIN_COMMISSION_ADDRESS()", +"26f9bac6": "transferTargetToken(address,uint256)", +"26fa24e9": "viewStakingDetails(address)", "26fa9082": "Enumivo()", "26faae42": "addChild(address,bytes32,bytes32)", +"26fabc7b": "dspfrozen()", "26facdb1": "TeamTokenDistribution(address)", +"26fad574": "getPeakHourTaxOfBlockIndex(uint256)", +"26fadb7c": "pay_out()", +"26fadbe2": "getSchedule()", "26fae0d3": "setMaster(address)", "26faf1e9": "SVLightIndex()", +"26faf951": "addMintableCurrency(address)", "26faf9c2": "EatMeCoin(address)", +"26fbd1d6": "executeTrade(uint256,uint256)", "26fc4c7f": "returnTokens(address,uint256)", "26fc71eb": "isConfirmedGblock(bytes32)", +"26fc7590": "penalty(bytes32)", "26fd8422": "calculateEggBuy(uint256,uint256)", "26fdb484": "OwnershipRevoked(address,address)", +"26fdd74f": "getLongSupplies()", "26fe18e2": "setMintingOracle(address,address)", "26fe2024": "newRate(string)", +"26fe3065": "fundsByBidder(uint256,address)", "26fe7cf2": "createStar(uint8,uint16,string,string)", "26fe9951": "delegatedFrom()", "26feba74": "MaorTestCoin()", "26fed988": "addCancelledOrFilled(bytes32,uint256)", "26ffa189": "setEnableWhiteList(bool)", +"26ffc2a7": "listNodeBonus(address)", +"26ffee08": "sub(address,uint256)", +"27002849": "id2Players(uint256)", "2700615c": "_getShipInfo(uint256)", +"2700a575": "NewCommission(uint256)", +"27014c59": "EventChangedString(address,string,string)", "27018631": "icoBonus()", +"2701c866": "ojciec()", "2701d40f": "ForSale()", "2701ebd8": "NDT3()", +"270231cc": "withdrawAllTo(address,uint256,uint256,bytes32[])", "27028aae": "voteOnBounty(uint128,uint256,bool)", "27029357": "addToReceiveAllowed(address)", +"27029695": "Started(address)", "27029e83": "BurnToken(address)", +"27034684": "updateMinBidIncrementInBasisPoints(uint256)", "2703506f": "CouponDeposit(address[2],uint256[8],uint8,bytes32[2],uint256)", +"2703e0f6": "relativeTopUp(address,uint256)", "2703e545": "projectInfoPublic(address)", +"2703ee85": "getCollateralBalance(address)", +"270401cb": "setFeeRecipient(address,address)", +"27040f68": "getAndUpdateDelegatedAmount(address)", "2704355c": "setGenesisCallerAddress(address)", "2704e8e9": "addRemovableIdArrayItem(address,uint256[],string,string,string,address)", "2704ead4": "_isValidSkin(address,uint256,uint256)", "27053417": "_updateSeed()", "270537c0": "lockReserveTokens(address)", +"270588ee": "permitBuy(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "2705ce6a": "setAuditorDelegate(address)", "27066ebb": "getOwnedTokensIds(address)", +"2706c31b": "x_ownerAcceptOwnership()", "27071f6a": "_tokenOfOwnerByIndex(address,uint256)", "270835d0": "allocateBid4a(bytes32)", +"2708380c": "greylistAdd(address)", +"27086336": "disableSigner(address)", "2708a710": "MintHelper(address,address,address)", +"2708d73c": "REFERRAL_TOTAL_PCT()", "2708db73": "requestLeave(uint256,string)", +"27091153": "makeShortRequest(bytes32,bytes)", "270a3856": "startDist()", "270a5420": "buyFST()", "270a8ef7": "existingMarketOrder(uint256)", "270abf36": "getChickenAmount()", +"270b316b": "NewPrice(uint256)", "270ba309": "getRegistryDataInitialized()", "270bb8ad": "setImmigration(address)", "270bfc07": "fundingAccount()", +"270c0a4f": "presaleaddr()", +"270cd425": "testToSlice()", +"270cda26": "UnlockRefTokens()", "270cf206": "ENSReverseRegister(address,string)", "270cfee1": "getTokenAccount()", +"270d01e6": "changeCampaignParameter(bytes32,uint256,uint256)", "270d13fb": "isCoinIdUnique(uint16)", +"270d7c07": "refundGas(address,uint256)", "270dc9fd": "changeName(string,uint256)", "270e4cf0": "buyerAddressTransfer(uint256,address,address)", +"270e7a01": "keepOpium()", "270ef385": "CLAIM_AMOUNT()", "270f611f": "burnBalances()", "270f7219": "getJntController()", "270f9359": "Exploit(address)", "270fdd1a": "GricCoin()", +"27109641": "alreadyReceived(address)", +"2710d591": "PERCENTAGE_GROUP_6()", "2710ddcb": "setMsg(bytes32)", +"27112d68": "callVaultManager(uint256,bytes)", +"27117c86": "Raffle_Entries(uint256)", +"271181ec": "lotPrice()", +"2711e9bb": "collectFreedomDividendWithAddress(address)", "27120de9": "numberOfStarsReserved()", "27121069": "verify(bytes,uint8,bytes,bytes)", "27121b76": "claimDailyLoot(uint256)", "2712d916": "setSanTTTCost(uint256)", +"271304fd": "marginSpend()", "27132be6": "getCustomBuyerMappingCount(address)", +"2713387f": "_priceMultiplier()", "27136e46": "changeTransactionService(address)", +"271392c9": "sendToL2(uint256,address,uint256,uint256)", "2713a1b4": "getUserWithdrawnBalance(address)", +"2714a1b9": "userToUserToAttackId(address,address)", "27150f01": "devFeeSize()", "27151526": "nextBid()", "27158b7b": "MFToken()", +"2716163d": "redeemableVSDs(uint256)", "271619fb": "CreateContract(int256,int256,uint256,uint256,int256,address,string,uint256,int256,string,uint256)", "27164f15": "getBuyOrdersInfo()", +"271665ed": "setBinaryFactor(uint256)", "2716783d": "distributeERG(address[],uint256,uint256)", +"271691b1": "updateItem(uint256,bool,uint16,uint16,uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint8,uint8)", +"27169ce1": "rgp()", "2716baa6": "startContruibute()", "271761c0": "EventSuccessfulTraining(uint64,uint64,uint64)", +"27176f01": "checkUpdate(uint256)", "271781ad": "getRestSumStageICO()", +"27179ae6": "keccak2()", "2717cc7c": "ParticipatedInVoting(address,address,bytes32,uint256)", +"2717ead6": "Withdrawal(address,address,uint256)", +"2717eff3": "controllerFeeMax()", "27180e42": "wantItMoreThanYou(uint256)", +"271813ee": "claimTurbo()", "27187991": "setEtherPrice(uint256)", +"27188a3e": "pendingLOVE(uint256,address)", +"2718c358": "fnxUnStakeFPT_BForFNX(uint256)", +"2718fcf3": "treasurePercentage()", +"27190769": "enableWpcClaim()", +"271937da": "setTestInterface(address)", +"2719390d": "defineClaimables(address,address[])", +"2719d02b": "investIn(string,string,uint256)", "271a50db": "setAgonFight(address)", +"271aaab4": "showTokenHashes(uint256)", +"271aedcf": "add_blockedAddress(address)", "271af8c1": "tokenCollector()", "271b3e8a": "snakemasterReq()", "271b5311": "getValidateSignatureAddress(address,string,uint256,uint8,bytes32,bytes32)", "271bac4a": "setBonusPhase(bool)", +"271c23fa": "lastSwapExecutionTime()", "271c34d7": "denyProposal(uint256)", "271cacbf": "batchAddToWhitelist(uint256,address[])", +"271cc7c4": "getMemmersDistance(uint256)", "271cd760": "getPackageDb()", +"271d206b": "_deleteCSPId(bytes32,address)", "271d9090": "HenryToken()", "271dd15b": "getWinNumberAddress(uint256,uint256)", "271dec50": "Invested(uint256,address,uint256,uint256)", "271df6e5": "canLotteryFree()", "271f88b4": "setAmount(uint256)", "271fe8be": "buyNormal(address)", +"271feed3": "Refresh(uint256)", +"272075c8": "removeSpecificBeneficiariesFromNft(address,uint256[])", "2720e4f6": "LC()", +"27212b5b": "setMatchReceiver(address)", "27213345": "totalSupplyToken()", "2721a114": "queryWinner(string)", +"2721fd20": "fundMultiplier(address)", +"27220edb": "setParem(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256)", +"272215cd": "AuthorityRemoved(address)", +"272255bb": "handleNativeTokens(address,address,uint256)", "2722692c": "lastBlockSet()", "2722c043": "raiseEventIfMinted(address,uint256)", +"2722fa36": "aKimBapBlock()", "27234ecc": "takeBalance(address,address,uint256,address)", "2723639b": "getPixelAreaColor(uint256,uint256,uint256,uint256)", +"27237b1d": "createFeeWindow(address,address,uint256)", "2724312a": "Micropayment(address)", "27243160": "bookmark(string)", +"272448c1": "Tune(uint256,uint256)", +"2724817b": "GetEthBal(address)", +"2724898b": "setArray()", +"27249e61": "gameNames_(address)", +"2724da4e": "checkDivRoundingUp(uint256,uint256)", "2724e032": "manualEndDay()", +"2724ed4b": "getSpendableAmount(address,address)", "27258b22": "isRegistered(bytes32)", +"27260041": "setliInvestTime(uint256)", "2726403a": "testCanTrade(address,address)", +"272684af": "pendingBSK(uint256,address)", "2726a530": "getHodlHasBeenWithdrawn(uint256)", +"2726b073": "urns(uint256)", "2726b506": "getDeposit(address,uint256)", +"2726cead": "lastDateGuess(address)", "2726f061": "commitVotes(address[],bytes32[],bytes32[],bytes32[])", "27270550": "swapAble(bool)", "27275a35": "SuretlyToken()", +"2727c340": "setBRDOwner(address)", "2727d018": "PlusPayLite()", "272870ac": "pausable(bool)", +"272888b2": "TransfertoRelay()", "272894ca": "refundTokenBet(uint256,uint8)", +"2728c9d3": "Add(address,uint256)", +"2728e6fd": "investFirst(uint256)", "27295d7c": "updateMaxPhase2(uint256)", "272961ff": "depositAgent2(uint256,uint256,bytes,uint256)", +"2729b91a": "create(string,string[],address,address,uint256,address)", "2729f44e": "addTxToRegistry(bytes32,bytes32,uint256,uint256,uint256)", "272a33e8": "allocateBid2(bytes32)", +"272a3817": "pixelDevAddr()", "272a3e16": "PlayerWon(uint256)", "272a847f": "HAICrowdsale(uint256,uint256,uint256,address,uint256,uint256)", "272ae0b5": "MIMIMUM_CONTRIBUTION_AMOUNT_PREICO()", +"272afc56": "calcCardType(bytes)", +"272b1fb8": "addTopNode(address)", +"272c08b9": "date15Dec2018()", +"272c4e6c": "listAdmin()", "272caf69": "stakeContractAddress()", "272cda88": "EternalDB()", "272d20e7": "amount_direct()", +"272d7d61": "setGame(address,address)", +"272da970": "notionalAnnualizedYieldApril()", +"272deb73": "reqAddress()", "272e20fa": "__abort__()", +"272e848e": "createLoan(uint256,address)", "272edeac": "currentMineTokenAmount()", +"272efc69": "whitelistedSenders(address)", +"272fe452": "twapCooldownPeriod()", +"27300501": "calculateInfaltionHours()", "27301964": "withdrawDevTokens(address,uint256)", +"27303a1e": "globalDepositEXR()", +"27304dfd": "adminList(address)", "2730e4a2": "_arrangeMasternodeFlow()", "273123b7": "delBot(address)", "27315b5f": "Settlement(address,address,uint256,string,string)", +"27316811": "typeOneMapping(string)", +"2731f87a": "stackWait()", "27329380": "getRecentPlayersCount()", "27329b05": "enableBot(address)", "27332624": "_lottery(uint256,address,address)", +"27340f84": "getPlacedBids()", "27341c8a": "isEmpty(string)", "2734242b": "BunnyToken()", +"27346782": "StageChanged(uint8)", +"27348abb": "addAllowSenders(address[])", +"2734c44e": "setTokenLp(address,address)", +"273529da": "daySellMap(uint256)", +"2735acb7": "f(uint256,bool)", "273696cd": "SetImplementation(address,address)", "2736a558": "removeBackdoor()", +"2736bb31": "convertEthToCRT(uint256)", "2736f6d9": "setTokenAndRate(uint256,uint256)", "2737033f": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"27372345": "pushedHxyLiquidity()", +"273726cd": "_initialAmount()", "27374015": "functionFive()", "27378684": "price4()", "27380c2c": "updateAngelCardSeries(uint8,uint64,uint64)", "2738154e": "checkRokBounty()", +"273884bd": "notPayable()", "2738a112": "triggerSelfDestruction()", "2738bf4d": "addLeaderboard(string,string,uint256)", +"2738d656": "insert(bytes32,bytes,bytes32[],bytes32[])", +"2738ec3c": "setMetadata(uint256[],bytes32[])", "2738ed25": "Player_Bettings(uint256,uint256)", +"27391d86": "approve_253(address,uint256)", +"273923dd": "setTurboFeeWallet(address)", "27393390": "setTokensMultiplier(uint256)", +"27396b6d": "decreaseTotalAmounts(address,address,address,uint256,uint256)", "273a041c": "_self()", +"273a5061": "mancount()", "273a5729": "eligibleTokens()", +"273a94aa": "getTokens(address[])", +"273ad1ca": "remainingValue()", "273afe15": "ParisToken()", "273b1dd3": "RealMadridvsLiverpool()", "273b1fb3": "betbucketOne()", "273b465b": "verifiedAgeOver(address,uint256)", +"273b78e2": "trustedForwarderRefundFee(address,uint256)", +"273b97fc": "_getDevFee()", "273ba6bb": "ICO()", "273bc3c9": "numberOfThrones()", +"273c14e5": "updateJurisdictionFlows(uint256[],uint256[],uint256[])", +"273c6756": "tokenSaleABJ(address)", +"273c6983": "ERRL_UNIT()", +"273c72be": "TotalCollected(uint256)", +"273ca510": "poolLpLimit()", "273ca81c": "getMegaBalance()", "273cb593": "isMasterOfCeremonyRemovedPending()", "273cbaa0": "getTokenList()", "273cc2a5": "depositOpen()", +"273d1a4c": "doihoanthanhnuaduong(uint256)", +"273d5963": "forest(uint256)", "273dd51f": "_distributeHorse()", +"273e1969": "NewEvent(uint256,uint256,string)", "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)", +"273fa8d8": "currentWhitelistCounts(uint256)", +"273fbf17": "quantityMax()", "273fd520": "EthlanceFeedback(address)", "2740509d": "urbitTeamTokensVault()", +"2740728e": "addNewToken(string,address)", +"2740c197": "updateFee(uint256,uint256)", +"2740d790": "setQURAN(address)", "2740e64b": "getInitializeParentPayoutDistributionHashValue()", "27411dfd": "getPoliceFee(uint256)", "27413437": "grantFounderToken()", "2741876a": "totalPresses()", +"2741b541": "initialize(address,address,address,address,address,bool,uint256,uint256)", +"274202f0": "ECOSYSTEM_POOL()", +"2742b1c5": "takeOutRemainingTokens()", "2742d511": "setWhitelistedStatus(address,address,uint256)", +"27430a42": "encodeWorkerDomainSeperator(string,string)", "27436b59": "getCarCount()", +"2743cc6e": "currentSmartpotOne()", +"274448ff": "investedEther(address)", "274465b4": "payForMyself(uint128)", +"27450cc9": "setWithdrawInterval(uint256)", +"27451bd3": "setMainPaths(address[],address[],address[],address[],address[],address[],address[],address[],address[])", "27457b3b": "getMyInventory()", "27458664": "enableTokenMinting()", "27458cbc": "disallowClaimer(address[])", +"2745a64e": "increaseAvailable()", +"27461ef1": "ChangedWalletAddress(address,address)", "274748e6": "setInactivityReleasePeriodForToken(address,bool,uint256)", +"274806e0": "unitToExpirePlayer(address,uint256)", "2748503f": "ChangedOwner(address,address)", "27486a7c": "combineCards(uint256[])", +"274876e4": "tokensInRewardsReserve()", +"27488ee4": "STATS_TYPE_INVITE_2ND_TODAY_REWARD()", "2748d7e4": "claimPlotWithData(uint256,string,string,string,string)", +"2749295a": "NewRequest(address)", +"2749850e": "operVestingSupply()", "2749bd81": "getTimestamp(address,uint256)", "274a1f29": "setNextLotteryTTMTokenId4(uint64)", "274a9b1c": "addressToEtherContributed(address)", "274acb35": "add(uint96,uint96)", +"274aee02": "balanceOfBondsV2(address,uint256)", "274b1615": "keyValidations(address)", "274b3df4": "deposit_eth()", "274b9bc5": "ETHx2()", "274bc107": "test_threeValidEqBytes()", +"274be5c5": "setWhitelistForIntermediateSenders(bool)", "274c343a": "HTCCToken()", "274c7922": "privilegedAddress(uint256)", +"274cdd5c": "goo()", +"274cee31": "supplies(address)", +"274d865f": "getVoteAddressMemberLength(address)", +"274da742": "REIGAI19()", "274db4d6": "_price_tokn_PRE()", "274ed288": "debtBalanceOf(address,bytes4)", "274f97bb": "buyReply(uint256,uint256)", @@ -22508,167 +41116,298 @@ "27507458": "isLive(uint256)", "2750fc78": "setIsActive(bool)", "275103fd": "hault()", +"27516075": "emergencyWithdrawalsEnabled()", +"27516567": "validateAnswer(uint32,int256)", "27521702": "mint(int256,address,uint256,bool)", "2752808a": "CAPcoin()", "2752de56": "addMoneyPool(address,address)", +"275348f1": "overnightFeePeriod()", "27538e90": "getCapabilityRoles(address,bytes4)", +"2753a361": "lastPredictedTimestamp()", +"2753bce0": "replaceChannelManager(address)", +"2753c8f6": "ZapOut(address,address,uint256,uint256,address[],bytes,bytes,address)", "2753d7f2": "artworksFactory()", "2753f254": "workedTodayInSeconds()", +"2753fe7d": "GetUserData(address)", +"275455ae": "tokenId2Bars(uint256,uint256)", +"275474e6": "BZxOwnershipTransferred(address,address)", +"2754902f": "transferWithCode(uint256,string,address,uint256,bytes)", "2754ff69": "test_2_ensureProposalExecution_increaseBlocksBy100()", +"275510d0": "editionLimits(uint256,uint8)", +"27552ec6": "distributeReservedBNBToHolders(uint256)", +"275541dd": "StakeRewardWithdrawn(address,uint256,uint256)", "2755a13b": "forceClose(uint256)", "2755cd2d": "tip()", +"2755d840": "contractDivs()", "275601f6": "getAllProviderParams(address)", +"275621d1": "secsClosure()", "27566b80": "transferCollectedEther(address)", "275676cf": "ClassicVolkswagen()", "27567c4c": "setIsPoop(string)", "2756d38a": "IonChain()", +"2756d9b3": "erc721Trades(uint256)", +"2756f026": "UNISWAP_USDC_ETH()", "27571087": "getBonus(bytes32,uint8)", +"27572069": "AuthorityChanged(address,address)", +"27578055": "isLimit()", "2757a07c": "SSDDTT(uint256,string,string)", "2757e976": "transferredIndex()", +"2758387d": "transferOwnerShip(address,address,bytes)", "2758743c": "LATINOToken()", "27589224": "minBuyingRequestInterval()", "275893a9": "updateMaintenanceAddress(address)", +"27591bac": "TokensUnlocked()", "27593eee": "ChangedName(address,string)", "27597f0a": "costForProductCycles(uint256,uint256)", +"27598471": "calcSellAmountAndFee(bool,uint256,uint256)", +"2759b857": "setProfiter(address)", "2759ea4a": "lookupSprite(uint256)", "275a1334": "buySellPrices()", "275a329a": "BCASToken(uint256,string,string)", +"275a4dcc": "overridden()", +"275a91de": "setMigrator(uint256,address)", "275a92cf": "TokenPurchase(uint256,uint256,address,address,uint256,uint256)", "275acbe3": "ln(uint256,uint256,uint256)", "275b6eb0": "calculateSeedSell(uint256)", "275babee": "getRareInfo(uint256)", "275be02c": "MRBLToken()", +"275bea42": "punkIdToPunkAge(uint256)", "275beec6": "createItem(uint256,string,address,uint256,string,string,uint256)", "275bf230": "addAddressToAccount(address,address)", +"275c18ab": "removeProposal(uint32)", "275c82ca": "GasUsed(uint256)", "275cb687": "setNextPoolPercentage(uint256)", "275ccb13": "computeLeaf(uint256[],uint256)", "275d60bc": "getReturnAddress(address)", +"275dd536": "EndDateUpdated(uint256,uint256)", "275e2d3f": "st4ckCount()", "275e2f86": "MORCoin(uint256,uint256,uint256,address)", "275e5da5": "probe(address)", +"275e8f26": "zhen(address)", +"275ea03c": "returnUserETH()", +"275ec6f2": "ImageCreated(uint256,address)", "275f3d92": "view_readyTime(address,address)", +"275f63e9": "claimed_rewards_for2(address)", "27608c24": "unsoldToken()", "2760c57e": "lastPing()", "276184ae": "erc20Address()", "2762484a": "SBIToken()", "2762cf10": "contract_transfer(uint256)", +"2762e20d": "SuperStakeMultiSendToken()", +"2762efb5": "getCoin()", "2763d8fb": "FabCoin()", +"2763ea7f": "playerStageAmount(uint256,uint256,address)", +"2763eaf5": "setCallerOk(address[],bool)", +"2763f28e": "totalTokenStored(uint256)", +"2764d22c": "stakeBas()", "2765faae": "MaximalInvestmentTimeTresholdChanged(uint256)", "276605bc": "updateFundingStartBlock(uint256)", "27669781": "emitInfo(uint256,uint256,address,uint256,uint256)", +"2766d78f": "getUnderlyingBalances(address)", +"27673272": "createValidator(address)", "27678dca": "getHWCAddressCount()", +"2767d5e4": "done(address,address)", +"2767dd7d": "buyCollectible(uint256,uint256)", +"276801ec": "randomValue()", +"276856b3": "Conversion(address,address,address,uint256,uint256,int256)", "27687d34": "advisersTokenTimelock()", +"2768ef09": "isSettlementEnabled()", "276920eb": "setOwnerTokenPercentage(uint256)", "276927c5": "sellSpaceship(uint256,uint256)", "2769b96b": "updateItemPrice(uint256,uint256)", "2769c89a": "setGameStartTime(uint256)", +"276a032d": "changeHydgPerBlock(uint256)", "276a28a3": "isTokenLocked(uint256)", +"276aa189": "resetReservesWithdrawAddress(address)", +"276b1e58": "receiveMUS()", "276b94e1": "copypaste()", +"276bbd42": "AccountBalanceDecreasedEvent(address,uint256)", "276bf637": "isTimedout(uint256,uint256,uint256)", +"276c0915": "UpdatedReputationScore(address,uint256)", +"276c1cc5": "_gasLimit()", +"276c331b": "USDT2Strong(uint256)", +"276c571c": "projects(bytes)", +"276c7aa8": "result(address,uint256,uint256,uint256)", "276c9d0a": "balanceOfOld(address)", "276cd2e8": "BTTPERETH()", +"276dc68b": "spreadTo(address[])", +"276ddab6": "tokenSaleXEEDXEED(address)", +"276e3076": "setCommunityFeeAddress(address)", "276e3968": "bits(uint256,uint256,uint256)", +"276e5b00": "balancefrom(address)", "276e6472": "deleteById(string)", +"276ead9c": "CutLoan(uint256)", "276ebc6a": "ChargeTest()", +"2770340a": "maintLTVCounterVaultE10()", "2770a488": "transferWithIndex(address,uint256,uint256)", +"2770fe88": "payout(uint256,address,address)", "2771083f": "setSpreadPercent(uint256)", +"27717c0b": "settle(address,uint32,bytes32)", +"2771be55": "AddUser(address,string,string,uint256)", +"2771eca8": "setWritedownAmount(uint256)", +"277206dd": "setKyberNetworkProxy(address)", +"27722f6a": "numbers()", +"277234a1": "servicePools(uint256)", "27729e93": "openLottery(uint8)", "2772dffd": "votes(bytes8)", "27731e77": "setCCH_edit_9(string)", "27734225": "getCommitteesNumber()", +"277401fe": "updateCountSetDestination(uint256)", +"27745bae": "requireActiveAndUnpaused()", "2774d052": "mintPresell(address,string)", +"277514e0": "withdrawLoan(uint256[3],uint256)", +"27755729": "top3TeamsWithLongestDistance()", "277576ca": "theTurn()", "27757c49": "isVariation()", "2776a859": "computeResponseSecondHalf(uint16)", "2776b163": "setstoredaddress(address)", +"27771980": "newSignedDoc(bytes32,address)", "27773ba2": "addrAirDrop()", +"2777f96d": "isRentOverDue(string,uint256)", "27782e42": "refreshActiveShareholdersArray()", "27783050": "getEntryHash(address,uint256,bytes32)", +"277838df": "ctx()", +"277872de": "e2d()", "27793f87": "outcome()", "277942db": "marriageLicenceImageIPFShash()", "27796092": "t4tToken()", "2779ea96": "addPostOnBoard(address,address,address)", "2779eb52": "setUserRank(address)", "277a6889": "calculateInterest(uint32,uint256)", +"277aa7c7": "rootTransfer(address,address,uint256)", "277ad1f6": "amountSellForOneEth()", "277ad5d8": "secondRoundMayDiscount()", "277ad6d4": "PreSaleResumed()", "277b2db6": "getPlayerVaults()", +"277b2e22": "wethAllowance()", +"277b2f97": "virtualSupply()", "277b6527": "targetCrowdsale()", +"277b8874": "getLTVAaveV2(address)", "277b8ffc": "getBeneficialAddress()", +"277c18a7": "massUpdatePool1s()", +"277c65ac": "addStrategy(address[],address[],uint256[],bool)", "277ccada": "unlistTrophy(uint256)", "277ccde2": "getHKGPrice()", +"277d2d7c": "last_epoch_rewards_amount()", "277d4725": "getEthereumToken()", +"277da51c": "_ownershipNewOwner()", "277e1b16": "changeMaxDonationLimit(uint256)", "277e1de7": "transferAccessory(address,address,uint64)", "277e268e": "testFail_set_label_unauth()", +"277e5b40": "setValueInterpreter(address)", "277ea83d": "getTrustPlatform()", +"277ef602": "ambiguityTest()", +"277f1758": "dETH()", "277f6331": "ETVRToken()", "277fc0e9": "getSignature(address)", "277fc17d": "daysToSeconds(uint256)", "277fef99": "transferPoint(uint32,int256,address,bool)", +"27805644": "setSLC_contract_address(address)", "27806a16": "DoxCoin()", +"27807ab6": "setUserPermissions(address,bool)", "2780d22b": "getMigrateMarketInFromNiblingCalled()", "27810b6e": "burner()", "27815883": "_setHairValue6(uint256)", +"27815e54": "ethContributedForTokens(address)", "27816235": "onSaleEnded()", "27816932": "AdaptableToken(uint256,uint256)", "27816ffc": "logMarketFinalized(address)", "2781c3d1": "ownerSetdiceRollAddress(address)", +"2781e33c": "getDepositAmount(address,address,uint256,uint256,uint256)", +"27824675": "convertDecimals(uint256,uint256,uint256)", "2782ca8d": "MINIMUM_PURCHASE_IN_USD()", "27836f77": "setImageData(uint256)", "2784ad48": "computePayment(uint256,uint256)", "2784d868": "getMiniPoolEdit_2()", "2784e3f3": "refundVotingTokens(address,address)", "27854452": "allocateAgents(address)", +"27855b13": "SECONDS_IN_MONTH()", "2785ed21": "LogCertificationDocumentAdded(address,bytes32)", +"2785f8bb": "tier(address)", "2785fb98": "getContributionETH(address)", "27860587": "TXToken()", "27869c57": "gluon()", +"2786d65e": "tier4(uint256,uint256)", "2786f089": "setUserAllocMin(address,uint256)", +"27878484": "topPool()", "2787fac2": "LordCoinPreICO(address,address,uint256,uint256,uint256,uint256)", "27880e1f": "KyberNetwork(address)", +"27884483": "RoundStarted(uint256,uint256)", +"27888cf1": "removeValidators(uint256,address[])", +"2788aeb2": "bidRefunds(uint256,address)", +"2788c455": "sushiswap_router()", +"2788e5b4": "executeResolution(bytes32)", "2788f4f3": "OraclizeCallback(bytes32,string)", "2789192f": "isConfirmedSettingsRequest(uint256)", "27895f13": "_advanceClock(bytes32,uint256)", +"278980d5": "C_NNToken()", "27899ce2": "allowNewReceiver(address)", "27899d9b": "LGOToken()", "278a3684": "advisorAmount()", +"278a4597": "getViperDetails(uint256)", "278a4c4f": "setMasterToReferral(address,address)", "278a5e7c": "cancelScript(address)", "278ab692": "startDispute(address)", +"278af122": "changeDisplayName(string,string)", "278af72c": "isSaleClockAuctionStorage()", +"278b0fd0": "Create(address,uint256,uint256)", "278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"278b98a7": "firstgift()", "278bb4a2": "EthealDeposit(address,address)", +"278be33f": "deleteMember()", "278bee92": "_receiveMakePlant(address,uint256,uint256)", +"278c0261": "renounceAuthorizedSigner()", "278c284c": "CrowdsaleToken(string,string,uint256,uint8)", "278c2977": "chooseOpponentForGladiatorBattle(uint256,uint256,bytes32)", "278c3030": "phase_2_Time()", "278c4d71": "peaceOfTRC20(address,uint256)", +"278c5dea": "participantsBalances(uint256,uint256)", "278c688e": "getBackToken(uint256)", "278cc714": "getUsablePlayerFibokens(address)", +"278cc7a0": "totalSupplyBase()", +"278d5831": "ERR_SLIPPAGE_HIT()", "278d6e5b": "funcArrayInArguments(address[],address[])", "278d818c": "setMaxRankingSpots(uint8)", +"278d8a1e": "attachAddress(uint256,address)", "278d9637": "limitTransfer()", +"278d9c41": "mintEventToManyUsers(uint256,address[])", "278e07ce": "setStatus(address,uint8)", "278e72da": "_destroy(uint256)", +"278e7a79": "startChangePercentTradeTrigger(uint256)", +"278e8afd": "updateInformations(string,string)", "278e9d03": "testMemoryIntegrityCheck33Bytes()", +"278ea9c7": "getInterestEffectLimit()", "278ecde1": "refund(uint256)", +"278ee51a": "getPropertyInfo(address,uint64)", "278f05ba": "SolomexCrowdSale()", "278f2ab8": "deposit(bytes32,uint256,uint256)", "278f49b9": "SetupRaffle(string,string)", +"278f9f6e": "setGymTrainer(uint8,uint32,uint8,uint8,uint8,uint8,uint8,uint8)", "278fcffa": "accountsLastClearTime(address)", "278ffa13": "confirmTopUpLimit(uint256)", +"27901822": "clearTokenIpfsImageUri(uint256)", "279029b3": "remainingARXSupply()", "27904ee0": "getRabbitMotherSumm(uint32)", +"279084a6": "rewardPeriodFinish()", +"27908728": "setVaultAccesses(address[],bool[])", +"2790b84a": "userStakedTokens(address)", +"2790e795": "_getVault()", +"2791af6b": "ProductDeleted(uint256,address)", "2791cb17": "setClientLastSupplyID(address,uint256)", +"2791e845": "earnedTrx(address,uint8,uint8)", +"27922b09": "getWheatsByOwner(address)", "2792949d": "BTC()", +"2792bd57": "vTokenAddress()", "2792e765": "transferCroupier(address)", "27933ffa": "LYToken()", +"27938c46": "burnPercentCycleOne()", +"27939329": "__TermPoolInner_init(address,address,address,address,address,address,address)", "27939ea2": "issuerReservedMaximumPercentage()", +"2793d4c7": "EmptyEth()", +"27947541": "makeMemChange2(uint256,uint256,uint256)", "2795348d": "KittenSelfDrop2()", "279586f3": "AltBuy(address,uint256,string)", +"2795c76f": "getArtworkContractURL()", "27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "279616fe": "TransferDissolved(address,address,uint256)", "27962fc1": "tokensAmount(uint256)", @@ -22677,65 +41416,106 @@ "27972b99": "StarterToken()", "27972e8f": "GRVToken()", "27979b35": "genLevelExpGain()", +"27979cf2": "getDueAmountOf(address)", +"2797a6c4": "bankersRoundedDiv(uint256,uint256)", +"2797c420": "sigilsRemainingToAssign()", +"2797c6c8": "vest(address,uint256)", "2797e0c3": "getInitBlockNum()", +"2797eec1": "seed(address,address,address,address)", +"27983fcf": "rejectProperty(uint256)", +"2798444f": "RewardLevel2()", +"27986eda": "IS_ICBM_INVESTOR_WHITELISTED()", "27987533": "defaultResolverChanged(address,address)", "2798cecd": "requestData(address,uint256,uint256,bytes32,address,bytes4,bytes32,bytes)", "2798d1b2": "my_token_balance()", +"2798e8c1": "MAX_DEL_PER_TIME()", "2799276d": "totalItems()", "279a34f1": "switchSaleStage()", "279a475f": "TJToken(uint256,string,uint8,string)", "279aa01f": "getManualAddress(uint256)", +"279afb9f": "getDiamondInfo(uint256)", "279b4e76": "createAuction(uint256,uint256,uint64,uint256)", "279b9562": "initIntervals()", "279b9c7b": "HJToken()", "279bad16": "fuel()", +"279bc0ba": "AmountMNESentCurrent(address)", "279c7425": "getTokensOwed(address,uint16)", "279c94c0": "admin_add(address)", "279cea35": "execScript(bytes,bytes,address[])", +"279cf222": "getItemDataCount()", "279ddc64": "SetBankerCandidate(uint8,address)", "279e02a0": "getMemberDividendsAmount(address)", "279e0912": "getDownloadPrice()", "279e1c43": "_createCollectible(uint256,uint256)", "279e79b5": "ZebiCoinCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"279edfbc": "shareholderTransfer(address,address,uint256,uint256)", +"279f1667": "juniorSymbol()", "279f5d31": "pop1()", +"279f7176": "pauseWhitelist(address,bool)", +"279f9888": "accountFoundation()", "279fdf6d": "trustedVault()", "279fdf96": "setPresaleMarketAddress(address,address)", "279fe967": "maxEthCapSellInFp()", +"27a02110": "Statistics(address,address,uint256)", "27a030eb": "getRandomLotteryTicket()", +"27a03cd7": "sayhello()", +"27a04936": "confirmMintRequest(string)", "27a06733": "setKycRequirement(address,bool)", "27a099d8": "getOperators()", +"27a0b6d8": "triggerRecoveryAddressChangeFor(address,address,uint8,bytes32,bytes32)", +"27a0bb33": "settleDebt(uint256)", "27a0d669": "getImplementation(string,string)", +"27a1804f": "BONUS_BLOCKNUM()", "27a1a414": "allowedLocks(uint256)", +"27a1cdab": "getCardsStakedOfAddress(address)", "27a1d948": "doubleDown(uint256)", "27a1f35a": "setOpenStatusEgg(uint256,bool)", "27a21061": "to_start_ico()", +"27a27433": "notifyStakeChanged(address,uint256)", "27a2aee2": "Commission()", "27a3181d": "price2()", +"27a391d9": "LogPayment(address,uint256)", +"27a3df5e": "isValidNonce(address,uint256,uint256)", "27a3e16b": "setBlockRewardContract(address)", +"27a3eb48": "aprrovePerson(string,string)", "27a3fe41": "getMintLimit(address)", +"27a47ef4": "registerDDR(address,address,address,string,string,uint256,uint256,uint256,uint256)", "27a49cbe": "BankrollLending(address,address)", "27a5428b": "setLevel(uint256)", +"27a59fb8": "changeLockDuration(uint256)", "27a5b3bc": "transitivePath(bytes32,bytes32,bytes32)", "27a5c7c6": "voteDecline(uint256)", "27a5e952": "testDecimalsUsingDeployedContract()", +"27a60e36": "e_remove_from_whitelist(address,address)", +"27a61dd2": "getMessageSigner(string,string,uint256,bytes)", "27a69644": "checkTransferDelegated(address,address,uint256,uint256,uint256,bytes)", "27a6a7de": "newMinimalEthers(uint256)", +"27a6eefd": "changeMaster2(address)", "27a75474": "salvageNotAllowedTokensSentToContract(address,address,uint256)", +"27a798dc": "daiSpent()", "27a7b827": "updateExistingMember(address,uint256)", "27a7c883": "transferWithExtra(address,uint256,bytes32,bytes32)", "27a822df": "smart()", "27a82833": "_supportsInterface(address,bytes4)", +"27a82be5": "resetDataShard()", "27a8890e": "withdrawedCoummunityCounter()", "27a910dc": "ownerWithdrawETH()", "27a936d7": "BlockchainBattleground()", "27a93cce": "playerGetPendingTxByAddress(address,address)", "27a9ec0f": "IDice()", +"27aa6018": "merkleProofIsValid(bytes32,bytes32[])", +"27aac633": "bondSupply()", "27ab6871": "addCandidateByIndex(uint256,address,bytes32)", "27ab9f20": "botIndexToOwner(uint256)", +"27abb1d8": "isCurve()", +"27abde5a": "setdai(address)", +"27abf9c4": "icoLevel4()", +"27ac0f08": "addToValue()", "27ac36c4": "reserveTokens()", "27ac4b70": "getNamespace()", "27ac7934": "transferPAIReceiptOwnership(address)", "27ac9e5f": "periodNow()", +"27acbc20": "tipToEther()", "27acfff9": "badgeFreeze(address,uint256,uint256)", "27add9fb": "VoxelRepainted(uint8,uint8,uint8,uint8)", "27ae587c": "MAX_TOKEN_REWARDS()", @@ -22743,17 +41523,28 @@ "27aeafb7": "AuditorUnregistered(address)", "27aedd10": "Founders()", "27aeeaa8": "AxiePresaleExtended()", +"27aef822": "accumulatedSeigniorage()", +"27af0b53": "changeStateOfEmergency()", "27af1d98": "disToken(address)", +"27af71b8": "getIlkDuty(bytes32)", "27af7d9c": "assertEqDecimal(uint256,uint256,uint256)", "27af9e38": "space()", +"27afa348": "testSendTrxNonexistentTarget(uint256,address)", +"27afd028": "maxWithdrawal(address)", "27b00b3e": "setUpdateState(bool)", "27b022af": "MembershipChanged(address,bool)", "27b075a7": "FlCToken()", "27b0c674": "updateEtherBalance()", +"27b131ef": "ethCap(uint256)", +"27b132a4": "addingTransaction(uint256,address,uint256,bool,bool,uint256)", +"27b25fa9": "removeLiquidity(uint256,uint256[4])", "27b37367": "parseLoanOffering(address[9],uint256[7],uint32[4],bytes)", "27b380f3": "withdrawalRequests(address)", "27b3a83c": "buyAtIndex(uint256)", "27b3bf11": "claimTime()", +"27b3eee2": "RewardsPerMile()", +"27b3f0d8": "marketOfferBuy(uint256)", +"27b3f755": "BNBDistribution()", "27b44a6c": "pendingWeiAmount()", "27b4634e": "transmuteTransfer(address,uint256,address,string,string)", "27b4e228": "setPoolFeeRate(uint256)", @@ -22762,50 +41553,86 @@ "27b57fcc": "sumValues(uint256,uint256)", "27b5985b": "addToException(address)", "27b5aaf8": "RESERVE_TOKEN_AMOUNT()", +"27b5b6a0": "_lastCheckTime(address)", +"27b5c175": "changeIt()", "27b5db8a": "addPlayer()", +"27b66a4d": "getSystemAssetType()", +"27b6ad51": "getBud(uint256)", "27b752b8": "sha3HexAddress(address)", "27b7a2f5": "nameRegistryAddress()", +"27b7aabc": "getTicketById(uint256)", +"27b7ca5f": "addDapp(address)", "27b7cf85": "log(bytes32)", "27b7d0a6": "EditDomain(string,string)", +"27b91109": "totalBuyback()", +"27b91697": "withdrawPawnCb(address,uint256)", +"27b94e1e": "_deflationFee()", "27b96df7": "pausePayment()", "27b972f9": "getNameOwner(string)", +"27b98284": "testForDefinedSchedule()", +"27b9a236": "fundingLastRecomputed()", "27b9c257": "setRequestProcessed(uint256)", +"27b9df65": "setVotedPool(address,uint8)", +"27b9f3f7": "airdropsLeft()", +"27ba2b7e": "getEpochInfo(address,address,uint256)", +"27bafc06": "allowMintList(address)", "27bb020a": "altarCut()", "27bb1db7": "SOPToken(string,string,uint256)", +"27bb2051": "addrToBytes(address)", "27bb2d82": "_checkPixelIdExists(uint256)", "27bb3d0f": "eth_price()", "27bb46f0": "removeActiveArray(address)", "27bb6d8e": "buyoutCost(uint256)", +"27bb777b": "topThreeKudoerIndex()", +"27bbabd2": "isNewAssetForOracle(address)", +"27bbb872": "updateKhoangCach(uint256,uint256)", "27bbea3a": "setWhiteListAddress(address)", +"27bbfeba": "setpublicStateNonPayable(uint256)", "27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", +"27bc43f6": "getTokenAdapterName(address)", "27bcc9ca": "finalizeConfig()", "27bce91b": "betId()", "27bd56d9": "sendAuctionQuery(uint256,uint256)", "27be1b35": "promoCode()", "27bf6568": "authorityBalance()", "27bfeaf5": "setGemPrice(uint256)", +"27c0f03b": "redeemToCToken(uint256)", "27c16605": "getBidByProducerAndDay(address,uint32)", +"27c1c21d": "statusCode()", "27c1f423": "preBuy1()", +"27c24a5d": "curveRegistry()", "27c2e437": "buyTokensFromBalance(address,uint256)", +"27c320cb": "littHolders(uint256)", "27c36a47": "specialAllowance(address,address)", "27c39749": "test_oneValidEqBytesUint(int256)", +"27c3a770": "adminDepositFunds(uint256,uint256)", "27c42050": "buildIdentifier(address,address,address,bytes32,uint128,uint128,uint256,uint32,uint64,uint64,string)", +"27c49be4": "ReferalBonus(address,uint256)", "27c4a208": "GSCoin()", +"27c4a224": "set_nft_address(address)", "27c4bde8": "Planethereum(address,address)", +"27c4eb2b": "_getMinSupply()", "27c5cdea": "test2(address[5],uint256[5])", "27c5e534": "mixDNK(uint256,uint256,uint256)", "27c67440": "getWarranty(string,string,address)", +"27c6919d": "setBuyBackRate(uint256)", "27c6c720": "privateWallet()", "27c725e1": "applyforCetification(string,string,string,string,string,string,bool)", "27c78c42": "request(address)", +"27c7c3ce": "newCFO(string)", "27c7ff61": "noShares()", "27c81eb8": "TestDRMK()", "27c830a9": "emergencyPaused()", +"27c8a76f": "balanceOfUsers(address,address)", "27c8dae5": "getAmountOfLinkerBuy(uint256)", +"27c95625": "unRegister(address)", "27c96207": "WinnerAnnounced(uint8)", "27c97fa5": "deauthorize(address)", +"27ca36ec": "MinDuration()", "27cadd13": "getSides(uint256,uint256)", +"27cae7c0": "personIndexToSiringPrice0(uint256)", "27cc1fd8": "party_b()", +"27cc7840": "recordSmartContract()", "27cca148": "lastClaimedBlock()", "27ccdbc5": "setWalletContract(address)", "27ccdd0a": "changeServiceReceiptAddress(uint32,address)", @@ -22814,44 +41641,66 @@ "27cda9d5": "AcceptsEtheropoly(address)", "27cdab06": "fee(bytes32)", "27cdbf4a": "existingNames(bytes32)", +"27cdf22e": "whitelistProxy()", +"27ce0147": "accumulativeDividendOf(address)", "27ce5b8c": "getNumberOfOutcomes()", "27ce6fa9": "unlockup(address)", "27cef820": "hasForgivedChar(string)", +"27cf399a": "getHash(string,string)", "27cfe856": "DAY()", +"27cff2e5": "calculateMintingFee(address,uint256)", +"27cff388": "marbleNFTCandidateContract()", "27d120fe": "updateTransfer(uint64,uint256,bytes32,bytes32,bytes)", "27d1913c": "buyerCancel(uint16,address,address)", +"27d1b1a2": "setOfferingAmount(uint256)", +"27d1bc8a": "asc()", "27d1c3a6": "transferChamp(address,address,uint256)", "27d1f39e": "mastery()", "27d21602": "buildings_total()", "27d23b86": "receive(address,uint256,bytes)", +"27d2670a": "deleRoleBurner(address)", "27d26d6e": "testCannotRedeployANT()", "27d272c5": "getFirstBuyersFee()", +"27d3410c": "vote(string,bool)", +"27d3a137": "transferFeeToCharge()", "27d3a8ad": "LogUpdatedComplianceProof(bytes32,bytes32)", +"27d4004d": "aff(address)", "27d42fc0": "setReservedWallet(address)", +"27d4a651": "forceSellStables(bool)", +"27d4ba7f": "openRefunds()", +"27d4da0e": "updaterSetOwnerMain(address)", "27d511ae": "activateCommunityFund()", "27d51979": "getTokenTransferSetCount()", "27d6ba21": "getDistributedToken()", "27d6c032": "unregister(bytes)", "27d6d6e0": "ownership(address)", "27d6dfbf": "BITNT()", +"27d73ad7": "setdegree(uint256,uint256,uint256)", "27d741df": "SALE_END_DATE()", "27d7874c": "setCEO(address)", "27d795d7": "start_date()", +"27d7f993": "basePrice8()", "27d8455c": "setMainSaleStartAndEndTime(uint256,uint256)", "27d87924": "registerNameXaddr(string,address)", "27d8a9e5": "CofounditICO(uint256,uint256,address)", "27d8fb97": "removeLaureato(string)", "27d93a70": "addFighter(address,address)", +"27d93c56": "electronicSignaturePersonalName()", "27d94182": "MAX_PRIVATE()", "27d95c8c": "getContaOuvidoria(uint256)", "27d9ac67": "NewMarketMaker(address,string)", "27da0078": "SpindleToken()", +"27da0ead": "sendTokensToAddress(address,uint256)", "27da5ca5": "batlordReq()", "27dad426": "init(address,string,string,uint8,uint256,bool,bool)", +"27db20cf": "usdtBuySwitch()", +"27db390f": "baseNumner()", "27db9e82": "reevaluateETHPrice(uint256)", "27dba183": "getProcessablesSize()", "27dba807": "buyWithBonus(address)", +"27dbe5eb": "bountyAmount(uint256)", "27dc297e": "__callback(bytes32,string)", +"27dc5917": "calcGameAddon(uint256)", "27dc7085": "getInvestorInforValue(address)", "27dd16e5": "paymentAction(bytes32,uint256[],uint256[])", "27dd3873": "plantedTime()", @@ -22861,57 +41710,95 @@ "27de1fc9": "fixPlayerCountryString(uint256,string)", "27de2459": "HungerCoin()", "27de2765": "Assert(bool)", +"27de333d": "mintForBfmBNB(uint256,uint256,address)", +"27de8f27": "mintCost(uint256)", "27de9e32": "unbond(uint256)", "27defa1f": "onlyAmbassadors()", +"27defd64": "eDonate(address,uint256)", "27df664b": "minPrivateContribution()", +"27dfddbc": "addressTransactions(address,uint256)", "27dffba6": "startRegularPhase()", +"27e01b67": "onoffTimer(uint256,bool)", +"27e02676": "getAllocation(uint256,address)", +"27e048b5": "preserve(uint256)", "27e056a5": "addMinter(int256,address)", "27e07647": "setFundingFueled(uint256)", +"27e0b08d": "updateSwitchBenefitor(address)", +"27e0b0c6": "CREATEABLE_TOKEN_LIMIT()", "27e0feaf": "_allocateTokens()", "27e10295": "storedProfit(address)", "27e152bb": "maxCoinSides()", "27e1f7df": "deleteAdmin(address)", "27e235e3": "balances(address)", "27e2dd48": "getRandomSeed(string)", +"27e30c36": "vendors(address)", +"27e376c1": "LogAuctionEndVoucherSubmitted(address,address,uint256,address,address,uint256)", +"27e37f25": "add_address(address)", "27e44059": "VReetUp()", +"27e4d202": "setLiquidityLoanTarget(uint256)", +"27e5455a": "requestUndelegation(uint256)", "27e56719": "ENIGMA()", "27e584d4": "TOTAL_PARSEC_CREDIT_SUPPLY()", "27e65007": "min_investment_presale_eth()", +"27e6c58c": "completeContract(bytes32,uint256,uint256,bytes)", +"27e6dcbb": "vswapFormula()", "27e728ec": "enableCodeExport(address)", +"27e72cfd": "uploadData(address,string,string)", "27e72e41": "defaultDelay()", +"27e7b263": "setLastUpdatedBlock(uint256)", "27e7c023": "sendTokensToFounders()", "27e7e21e": "air()", "27e7fe5a": "ONEPERCENT_TOKENS_PER_ETH()", +"27e86d6e": "getLastBlockHash()", +"27e87739": "buyField(uint256,address)", "27e8c2d8": "burnUnicornShares()", "27e90a7e": "offerBorrowingItem(uint256,uint256,uint256)", +"27e93fd0": "role1_balance()", "27e95f87": "pubkeys2()", +"27e9663f": "calcTokenToKf(uint256)", +"27e9997f": "withdrawByTokenAddressByUserAddress(address,address)", "27e9a0b6": "files(bytes32,uint256)", "27e9b1a0": "getArrLength()", "27e9f294": "addItem(string)", "27ea06b8": "numberOfTokensLeft()", +"27ea2df0": "getIpfsHashToTokenId(string)", "27ea6f2b": "setLimit(uint256)", "27eac914": "cancelAuction(uint32)", +"27eb8d66": "approveOnAvatar(address,address,uint256)", "27eb95cf": "deathData_v13()", +"27eb9c0d": "PrivateDeposit()", "27ebcf0e": "sharesTokenAddress()", "27ebe40a": "createAuction(uint256,uint256,uint256,uint256,address)", "27ec2c03": "getAvgPps()", "27ed31ff": "localityCode()", "27ed810d": "setMaxBlockDrift(uint256)", "27edf097": "burnPerTransaction()", +"27ee58a6": "sub(uint256)", "27eea9cd": "CCCCCToken(address)", +"27eec12c": "allOffers(address,uint256)", "27eeefa6": "paymentOnTime(uint256)", +"27ef414c": "FeesDonated(address,uint256)", "27ef89bc": "DEV_TEAM_PORTION()", "27ef986d": "ExternalToken(address)", +"27ef9ab8": "setInvestDisabled(bool)", +"27efaa0e": "checkEnoughBalance(uint256,uint256,uint256,bool,uint256,uint256,bytes32,uint256)", "27efc086": "TOTAL()", +"27efe3cb": "_grantComp(address,uint256)", "27f02f74": "core(uint256,uint256,uint256)", "27f05e06": "distributeTokensPreIco(uint256)", "27f06a6e": "permitChildContract(address[])", +"27f06c01": "_ownerAddressFirst()", "27f06fff": "requestFillUp(uint256)", +"27f08256": "fees_wallet_Turbo()", "27f12c8e": "registerAsImportingAuthority(address)", +"27f18ae3": "mint_for(address,address)", "27f1bb7f": "prefixedHash2(address)", "27f1f521": "Kurecoin()", "27f2402b": "acceptSacrifice(uint256)", +"27f268ad": "purchase(address,address,address,uint256)", "27f2db32": "finalizeChangeStaker()", +"27f3440a": "deposit1(uint256,uint256[],uint32,uint32)", +"27f38113": "getPayees()", "27f397a9": "borrowerReturnFiatAmount()", "27f39abf": "tokenOwnerWallet()", "27f3a72a": "thisBalance()", @@ -22919,131 +41806,229 @@ "27f498c9": "changeTokenSender(address)", "27f4b056": "getDemocInfo(bytes32)", "27f50a2d": "getDocuments(address)", +"27f56ad0": "slashsAndRefunds(address)", "27f576d1": "withdrawFromReserve(address,uint256)", +"27f69593": "_supplyBeer(address,uint256)", "27f69c37": "roundInvestorInfoByIndex(uint32,uint32,uint32)", "27f6e676": "addApprovedGame(address)", "27f7be99": "boosterContract()", +"27f7e38e": "MineFound(address,uint256)", +"27f8237d": "getStorageType()", "27f85c13": "setUsdEth(uint256)", +"27f86a09": "_inactive()", +"27f8cb01": "gaftBuyHUSD(address)", "27f8ce38": "gamePause()", "27f8d7ba": "setEndPreICO(uint256)", +"27f91f12": "coveredByDailyLimit(address)", "27f93e59": "createContractMeme(uint256,string)", +"27f9fd50": "getCandidateDetails(uint256)", "27fa35c3": "getMarketsCount()", "27fb1da7": "ICOState(bool)", "27fbcac5": "getChannelFeed(address,uint256,uint256)", +"27fbe3b6": "InvestorDeleted(address,address)", "27fc2414": "follow(address,uint8)", +"27fd0c13": "disabledTransferHashes(bytes32)", +"27fd95c9": "batchMint(address[],uint256[],string[])", "27fde806": "erc20GST(uint8)", +"27fde8b9": "getSaleRule()", "27fe0d10": "maximumWEI()", +"27fe55a6": "synthsRates()", +"27fe748c": "areWithdrawalsAllowedFor(address)", "27fe75ed": "lockTokenLocker()", +"27ff0b7b": "_createProxy()", "27ff1374": "TotalDeposited()", +"27ff1f0b": "viewSwap()", "27ffb7b0": "purchaseRound()", +"28000e57": "issuedFounding()", "28006b31": "makeLiquidPri()", +"2800a568": "deployVat()", "28012606": "createAuction(uint256,uint256,uint256,uint256,address,uint256)", +"28013aff": "updateRewardVestingPeriod(uint256)", "2801617e": "set(address)", "2801e43a": "authorizedLoggers(address)", +"2802299d": "getLowRiskApyForBalance(address,uint256)", "28026ace": "depositAndApprove(address,uint256)", +"2802a190": "updateScript(string,uint256)", "2802cacc": "cancelOrderByAdminWithPayer(string,address)", +"2803212f": "setDailyLimit(address,uint256)", "280376b3": "CinderTokenSale()", "2803d8e5": "MIN_TOKEN_UNIT()", +"2803fea6": "newTokenBank(string,address,string,address[])", "28043306": "migrateTransfer(address,uint256)", "28044357": "CollectibleIndex1()", "280464ed": "fundsToTokens(uint256)", "28046f30": "handleBlockBalanceLedger(address,uint256,uint256)", +"28047450": "cancelContract(uint256)", "2804b2c0": "customer()", +"28052920": "lapStartTime(uint256)", +"280586cb": "decimalsCHF()", +"2805b7ca": "pairVerified(uint256)", +"28064a83": "setConfig(uint8,uint8,uint8,uint8,uint8,uint8,uint256)", +"28066b86": "acceptProposedModule(bytes32)", +"28068da3": "onchainTransferFrom(address,address,address,uint256)", +"2806a743": "setLiquidationPenalty(uint256)", +"28071969": "Dest()", +"2807354b": "refBook()", +"28075327": "govVaultValuePerBlock()", "2807eece": "purchaseNo()", "2808241e": "vote(uint8,bool)", "28086f18": "bidETHMin()", "2808c8ad": "thisContractBalance()", +"2808c92c": "pauseDrop()", "28090abb": "logSweep(address,address,address,uint256)", "2809c5e1": "isBountyAllocated()", "2809c7e1": "AuctionCancelled(uint256)", "2809df16": "MetaUpdated(string,string)", +"2809e9ef": "projectPartyUnlockLP()", "280a3382": "fundariaTokenBuyAddress()", +"280a735d": "xoxo()", "280af7d3": "setData(string,string,string)", "280b8846": "Token(string,string,uint8)", "280c2604": "SCADA_requires_hard_cap()", "280ca666": "getAllElements()", "280cd0e6": "getBetSizeAtRound(uint256)", +"280d0156": "getBetArrayLength(bytes32)", +"280d62ac": "priceIncrement()", +"280d8fe5": "issued_volume()", "280da6fa": "withdrawAllTokens()", "280dd460": "adjustFeePercentage(uint256)", "280e0359": "bonusLevel0()", +"280e31cc": "userLevel(address)", "280e682c": "mintImpl(address,uint256)", +"280e6cba": "lptN()", +"280f08e5": "newHalvening()", "280f958e": "transferLockedFrom(address,address,uint256,uint256,uint256[])", +"28101f50": "setPairAddress()", "281027b9": "isPrimaryOperator(address)", "28102e54": "amountWon()", +"28107fe2": "player_getPendingTxByAddress(address)", +"2810c14e": "zgoodwillAddress()", "2810dd4a": "ParcelXToken(address[],uint256)", "2810e1d6": "resolve()", +"281105e3": "setStakingActive(bool)", "28111984": "setIcoState(uint8)", +"28111dd8": "stl()", "281134bc": "noahToken()", "2811d4e0": "sendSecondBatch(address[],uint256[])", +"2811d57b": "devAmout()", "2812988f": "object()", +"2812d4a7": "coldwallet()", "2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", "281318c8": "all_unfreeze()", "281336b4": "terminateEmployee(address,uint32,uint32,uint32,uint8)", +"281350cf": "vote(uint256[],bool[])", "2813acc9": "indexAccount()", "2813de17": "toggleTransferablePending()", "28148d07": "setCategoryVerify(uint256)", "2814a371": "createOfAthleteCard(string)", "2814da3c": "transferDeposit(uint256)", +"2815197f": "verifySupportedCollateral(address)", "28155727": "makerWithdrawEther()", +"281565c7": "winAmount(uint256,address)", "2815741c": "Sort()", +"28157bcb": "addDToken(address,uint256)", "28159ef6": "removeIcoContract()", "2815cc38": "discoverNewPlanet(uint256,uint256,bool)", +"2815da93": "NIRVANA_MULTIPLIER()", "2815f054": "setTCoinContractAddress(address,address)", "2815f50f": "addManyToBlacklist(address[])", "28169ec1": "testProvidedValues()", +"2816aa18": "pitaya()", "2816bd78": "incentiveForHolder()", +"2816d681": "evalBucketLiquidation(bytes32)", "28171882": "customText()", +"2817335d": "batchedRandomSearch(bytes32,uint256,uint64,uint256,uint256,uint256,uint256)", "28180023": "closingBlock()", +"28183399": "xvuy(address)", +"28184eac": "safeSmileTransfer(address,uint256)", +"28194322": "acceptEther()", "2819598d": "removeManyFromAllocationList(address[])", "28195d2c": "GDO(uint256,string,string)", "281972af": "getExplorerList()", "281989bf": "ComputeSquare(uint256)", "28198eab": "RLCSentToBTC()", +"2819a630": "setRewardPeriod(uint256)", "281a0ff7": "revokeDelegate(address,address,string,address)", +"281a9956": "submitTransaction(string,address,uint256,bytes)", "281ae558": "ETH_TOKEN_EXCHANGE_RATIO()", +"281b0406": "LogProvideAccess(address,uint256,uint8)", +"281b8200": "addInstantRewards(address,uint256)", +"281b9f77": "getGamesAddresses()", "281bdaf8": "weightedMultiplierByAddress(address)", "281c08ad": "totalAuctorCount()", "281ca73e": "write(uint256,uint64,bytes8)", "281cee59": "_approveOwner(address,uint256)", +"281cfac5": "approve_180(address,uint256)", +"281d7055": "handledToken()", +"281db5eb": "FSDv1DAO()", "281dfbb6": "sendPlatformSupplyToken(address)", "281e1856": "deAuthorize(string)", "281e399c": "Token(string,string,uint256)", "281fa792": "givenBonus()", "281fe829": "addFirstBuyers(address[],uint256[])", +"28205b0b": "approve_652(address,uint256)", +"28205f93": "Top3dis50()", "2820d6a5": "totalPresaleBonus()", "2820f454": "setNewBeneficiary(address)", +"2821006d": "starterClasses(uint256)", "2821ca71": "nextPrice(uint256)", +"28220f35": "removeAsk(uint256)", +"28222e6b": "setMaxClaimedBy(uint64)", +"2822513f": "genTestData()", "2822f62d": "fixedLoge(uint256)", "282303b5": "_buy(uint256)", +"28231604": "AutoCreationAfterOwnChanged(bool)", +"28231752": "angelsClaimedZeronium(uint64)", "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)", +"2824e1f6": "rewardSumCheckpoint(address)", "28250d43": "ETH_QCO()", "28252bc4": "saleIsGoing()", +"28255d60": "createMerchantWallet(string,address)", +"2825b180": "pendingJrt(uint256,address)", +"2825da72": "updateEndBlock(uint256,bool)", "28261850": "getProfits(bytes6)", "28262dd1": "TOKEN_HODL_9M()", "282651fe": "getWinTokenAmount()", +"28269689": "symbolToOracle(string)", "28276ed6": "totalT8EXSold_GENERAL()", +"282789be": "transferxxxx(address,uint256)", "28278d0a": "makerich4(address,uint256)", "2827d4ca": "TokenSale(uint256)", +"2827e5bb": "nftaddress()", +"28281916": "_airdropCifiAmount()", +"28286596": "lowerFlags(address[])", +"28287b3e": "swapCTokenForToken(address,address,address,uint256,uint256)", +"2828eea8": "calcEthFee(uint256)", "2828fc39": "getAllReporterMarketsCount()", "2829104b": "ElectricUniverse()", "28292af2": "chAirDropFadd(uint256)", +"282965df": "lastChallengeIVT()", +"2829ce09": "getPriceHero(uint256)", +"2829e651": "getTokensByPartition(bytes32,address,uint256)", "282b065a": "setEmail(string)", "282b5b19": "IsFreezedAccount(address)", "282ba1b8": "GetPreSale()", +"282c04a4": "collectibleAllocation(uint256)", "282c3c47": "DEFAULT_MAX_LOCK_DURATION()", "282c3cf7": "MAX_TOTAL_TOKEN_SUPPLY()", +"282c51f3": "BURNER_ROLE()", "282c8749": "setParameters(uint256,uint256,uint256,uint256,uint256,uint256)", "282d3fdf": "lock(address,uint256)", "282d60bb": "eButton()", "282de6b8": "priceCents()", +"282e0676": "pool8userList(uint256)", "282e0fe0": "updateIndexOrderToken(uint256,address,uint256,uint256,uint256)", +"282ea32a": "ExchangePlayer(address,uint256)", "282ef05c": "collectorsCount()", "282f7cdd": "isDispositionDue()", +"283001f7": "approveToken(uint256,uint256)", +"283012c4": "loanManagerToken()", +"28310b5e": "newKeyRingAndUSDCWithdrawal(address,address,address,uint256,address,uint256,bytes,bytes)", "28310f10": "percentageRecipient1()", "2831ed5a": "YOUQIANBI(uint256,string,string)", "2832b5cc": "setInstantFee(bool)", @@ -23053,455 +42038,875 @@ "2833747f": "test_oneTrueFalse()", "28339175": "getCreateSharesOwner()", "28339320": "deleteRegion(address[16],uint256)", +"28340598": "setRaffleDisabled(uint256,bool)", +"2834230d": "recievePayout(uint256,address)", +"28342ecf": "setAgentRegistry(address)", +"2834d639": "setYeld(address)", +"2834f425": "approveMusd()", "283506fb": "buySqr(uint256)", "283557ac": "getContributorTokens(address)", +"283571cc": "outstandingYieldToken()", +"28359349": "toggleFreezeMonaERC20Payment()", +"2835a36d": "add(uint256,int256)", "2835b45c": "getETH(uint256)", "283654c3": "storjBalance()", +"28366f61": "transfered(address)", "28368e0f": "OppToken()", +"2836fd9f": "getPairTokenPriceCumulativeLast(uint256)", +"28370f49": "setDataProxy(address)", "28376f05": "testCreateAuthority()", "2837919d": "impl_mining_uncle(address,bytes,bytes,uint256)", +"283825da": "computeNonCyclicScheduleSegment(uint256,uint256)", "283890ef": "checkGetFreeQuest(address)", +"28391a1a": "burnWhitelister()", "28392315": "sellerCancel(uint16,address,address)", +"2839a00d": "teams(uint32,uint48)", +"2839a77f": "redeemBondsWithDiscount(uint256,uint256,address,uint256)", +"2839e16a": "allowed_(address,address)", "2839e928": "ackermann(uint256,uint256)", "2839fc29": "exchanges(uint256)", "283a4576": "Tomeka()", +"283a5baf": "pubKeyToBtcAddress(bytes32,bytes32,uint8)", "283a6e88": "mgmtBodyWalletAddress()", "283acbfc": "enableRefund(address)", "283b19bf": "addReward(uint256,uint256,address)", "283b31a6": "addWorks(bytes32,bytes32,uint8,uint256,uint256)", +"283b4e4e": "reInvestIn(uint256,uint256)", "283b5f95": "getUndistributedBalanceOf_(address,uint256)", "283ba681": "transferAirdropTokens(address[],uint256[])", "283bcbed": "ChannelToppedUp(address,address,uint32,uint192)", +"283be3d2": "WithdrawBalance(address,uint256,bool)", +"283bf720": "tokensOfHolder(address)", +"283c4f2a": "flipPriceInUSD(address)", +"283c763f": "getuserAffliateBalance(address)", +"283ca77c": "checkMintAllowed(address,uint256)", "283ced9d": "FOUNDATION_CAPPED_VALUE()", "283ceee2": "cryptaurToken()", +"283cf7a5": "ToMathedIUseNRE(address,uint256)", +"283d62ad": "setPoolAdmin(address)", "283dc942": "ReferralWeToken(address,uint256)", +"283f09b2": "acceptOrders_(uint256)", +"283f6502": "MyName()", +"283f6b6d": "alreadyReleased()", "283f7820": "_totalFee()", +"283faba4": "ExternalTokenTransferFrom(address,address,address,address,uint256)", +"283faec7": "safeTransferFrom721(address,address,address,uint256)", +"28402841": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint256,address)", "2840f290": "addTier1Member(address)", +"28411ae1": "authors()", "28412d70": "KING()", "284131c7": "buyApple()", +"28415567": "setWinningAmount(uint256,uint256)", "284180fc": "getSecret(address)", +"28420f29": "changeTicketWeiLimit(uint256,uint256,uint256)", "284237e4": "bitm(uint256,string,uint8,string)", "28428a42": "importBalances(uint256,address)", +"28431282": "uniswapMinETHAmount()", "2843314e": "getAccountList()", "28439961": "setTimePeriods(uint256,uint256,uint256,uint256)", +"2843c7ab": "autoIETHDeltaBalance(uint256,uint256)", +"2843e5e0": "componentRedeemHook(address,uint256,address)", +"28442835": "t2TransactionIds(uint256)", "2844328f": "submitVote(uint256)", "28444381": "setPeriods(uint256,uint256,uint256,uint256,uint256,uint256)", +"28449c3a": "requestStakingWithdraw()", +"2844d389": "PrivateWhitelistUpdated(address,bool)", "28450159": "_updateSnapshot(address)", +"28451bee": "makePrediction(bytes32,uint256)", "28459871": "OreOreCoin(uint256,string,string,uint8)", "2845c8cd": "totalPreSaleStage()", "28469c36": "littafiAccount()", "2846a35b": "mainSaleEndTime()", "28470b40": "_axiesPrice(uint8,uint256)", "28472c6c": "claimComputation(bytes,bytes)", +"28474b8e": "setProxyLogicContractAndDeployer(address,address)", +"28477285": "getPlayersInfo()", "2847a7af": "newDocument(bytes32)", +"284893a9": "pendingNoom1(uint256,address)", +"2848aeaf": "allowList(address)", +"2848b7d1": "UpdateDepositRecordMapping(uint256,uint256,uint256,uint256,address,bool)", "28491003": "getAllTurnover()", "28491b3f": "SetPresaleAmountLimits(uint256,uint256)", +"28492557": "airdropTokensAddress()", +"2849dad7": "ETHToSend()", +"2849fa4f": "transferTokenWithPure(address,uint256)", +"284a0123": "unLockingStartDate()", "284b1e8e": "generatedByte()", +"284b8858": "pendingGFT(uint256,address)", +"284ba869": "changeToAdmin(address)", +"284bdf32": "_unchallengeBalance(address,uint256)", +"284be04f": "getEscrow(address,uint256)", +"284c3b3b": "temporaryAddress()", +"284c4f80": "tokenOutPriceChange_()", +"284c5486": "setCpPoolInfo(address,address,uint256,address,address)", +"284c6a22": "tst(uint256)", +"284c6beb": "setMaxEpochLength(uint256)", "284cb916": "endMintingTime()", "284cfedb": "m_proofs()", +"284d0650": "showCompanyMess(address)", "284d2fd4": "mintVested(uint256,address,uint256)", +"284d30ef": "setMultiSig(address)", "284d94e1": "lockAssetEscrow(bytes32,uint256,address)", +"284dac23": "compound(address)", +"284def15": "minUniPercentage()", "284e1567": "addrFWD()", +"284e2f56": "updateSettings(address,bytes)", "284e4175": "changeGBTAddress(address)", "284e650a": "vanbexTeamVestingPeriod()", "284f083a": "processJackpot(address,bytes32,uint256)", +"284f0923": "complain(uint256)", +"284f46c1": "levelIncomeShare()", +"284fa344": "harvest(uint256,uint256,uint256)", "284fb363": "deploy(uint256,uint32,uint256)", "284fd42f": "gasEpoch()", +"284fef4b": "ETH_ASSET()", +"285078b6": "activateVoting()", +"28509951": "Bid(uint256,address,uint256,uint256,uint256,uint256)", "2850c72a": "debug_extendCoinbaseTxOutput(uint256,uint256)", "2850d4e6": "KNOWToken()", "285109d1": "getTotalInfo()", "285137c9": "registerNameXaddrFromDapp(address,bytes32,bool)", +"2851d4a5": "_getLastEnsuredTermId()", +"2851e2e0": "debtShare(address)", "2851f27b": "PrizePaid(string,uint256)", +"28523eb6": "tokenBlockedStatus(address,address)", +"28524b73": "getTotalStakedByContract(address,address)", "2852b71c": "accept()", "2852bdf2": "whitelist(uint8[],address[])", "2852ca81": "getTypeFromEdition(bytes16)", +"2852dbb2": "setOwnedCallEvents(bool)", +"2852df65": "_transferStandard(address,address,uint256)", +"28531f06": "grow(uint256)", +"28535257": "getETHAllowance(address)", +"28539c17": "presaleLastSupply()", "2853a0d7": "BRXToken()", +"2853b760": "stopPreSales()", +"2853c542": "addMarginalReward(uint256)", "2853f925": "unfreezeFoundingTeamBalance()", +"2853fb10": "price_band()", "28543417": "removeOrderOfOwner(address,uint256)", +"28545c0d": "hasPermission(bytes32,address)", +"2854ac0a": "checkNextInitializedTickWithinOneWordInvariants(int24,bool)", "2854ba7d": "getCreatedPayoutDistributionHash()", "2854bc7e": "setTokenCap(uint256)", +"28559e4a": "initBaseTotalSupply(uint256)", +"2855c8ec": "KTToOwner(uint256)", +"285625a2": "getMintDigest(uint256,address,uint256)", "285669e9": "setRegionNextImageId(uint256,uint256)", +"2856b962": "swapOutTusdAndUsdt(address,uint256,address,uint256[])", +"2856e28a": "_proveRRUparticipationToken(address,address,uint256)", +"2857373a": "oracles()", "28579137": "remove(uint80)", "2857bc60": "triggerStealManually3(string,uint256)", +"2857f38e": "startSample(address,uint256)", "28583dcc": "getRoundCounter()", "2858507f": "IDD()", "2858c764": "checkStatus(uint256)", +"28593984": "yield()", +"2859b84c": "ReferralDeposit(address,address,address,uint256,uint256)", "285a4639": "Rotterdam()", +"285a4bbc": "updateAuction(uint256,uint256,uint256,uint256)", "285a9b32": "payoutfordividend(address,uint256)", +"285af531": "FUNC_6EBA2B13(uint256)", "285b5dde": "MoreTokensMinted(uint256,string)", +"285be54b": "ASSESSOR_NEW()", "285bf4c7": "CryptoCopyToken()", "285c22b1": "addOrigin(bytes32)", "285c51c3": "getRemainingEthersForCurrentRound()", "285c7f37": "addUpgrade(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"285cab27": "setupConverter(address,address)", +"285d333b": "changeStakingToken(address)", "285d70d4": "setMintable(bool)", "285da5a9": "ceilTokens(uint256)", "285dfc1c": "AmigoCoin()", "285e1406": "changeFeeAddress(address)", +"285e782b": "udonsPerBlock()", +"285e7bfd": "newSmartWallet(address)", "285e8516": "advisor2Sum()", +"285ece4e": "REWARD_ROUND_DURATION()", +"285ee675": "getGamer(uint256)", "285f2346": "getNotApprovedProposals()", "285f6a55": "ADDR_BOUNTY_TOKENS_ACCOUNT()", "285fc97f": "TestChain()", "285fe426": "bet(uint256[],uint256[])", +"28600423": "totalBuyMap(address)", "286012b0": "getDealCancelRate()", +"2861588a": "addInternalMessage(uint8)", +"28617cd4": "windowFor(uint256)", +"28619814": "trade(uint256[],address[],bytes32[])", +"2861c7d1": "LIQUIDITY()", +"2862939a": "StartTimestampUpdated(address,uint256,uint256)", "286294b3": "buyByTomo(address,uint256)", "286362f8": "AllowTransferExternal()", "28636578": "setMultiRequestRequestor(uint256,address)", +"28638470": "approve_897(address,uint256)", "2863cd7e": "batchMintWithData(address[],uint256[],bytes)", "2863f9f3": "emergencyStopSale()", "286401df": "is_claim_period(uint256)", "28640599": "fetchCreatedOrdersForMerchant()", "2864ddde": "nextPriceOfElement(uint256)", +"28650d1a": "totalAllocatedTokens(uint256)", "28657aa5": "bankBalance()", "2865dc2e": "getUserRewardPayouts(address)", "2866bae1": "HarryCoin()", "286707a1": "genToExtraStats(uint256,uint256)", "28675325": "PURCHASER_MIN_TOKEN_CAP()", +"28675626": "redeemMinerCoin(address,uint256)", "2867586e": "setInvContract(address)", "286781c7": "suspend(address)", +"2867b951": "pendingBZZZZV2(uint256,address)", "2867bc92": "refreshGames()", +"2867f545": "UpdatedTrustScore(address,uint256,uint256)", +"286807e0": "BNY_AssetSolidification(address,uint256)", "28680c1e": "bonusUnlockAt()", "28687e61": "checkPriceCalled()", "2868eda3": "admin_withdraw(uint256,uint256)", +"2868f34e": "Ktotal(address)", +"28691a75": "issueMaxPynthsOnBehalf(address)", +"28696de2": "disableStaking()", +"28697a08": "setReserveLiquidationThresholdAsCollateral(address,uint256)", +"286a876b": "balanceOfStake()", "286a8993": "_clearBridgeNativeFee(uint256)", +"286ae97f": "addAllPermissions(address)", "286b583b": "offerCanvasForSale(uint32,uint256)", +"286bf1e2": "CAKE_MASTER_CHEF()", +"286c0756": "profitableStratsWithTokens()", "286c1a9b": "confirmJoinAirdropQuest(address)", "286c241a": "releaseTimeOf(address)", +"286c4066": "setForeignFee(uint256)", +"286c539d": "regPauseFlag()", +"286ce99d": "yfin()", "286d2e3a": "setContractAddr(address)", +"286d6786": "toggleWithdrawing()", +"286dae56": "relaseTime()", "286dd3f5": "removeAddressFromWhitelist(address)", "286dd83c": "unPauseCrowdsale()", +"286e7902": "Administrator(address)", "286eab15": "getSnailmasterReq()", "286ec4d1": "erc20_contract()", +"286f616a": "uploadBills(uint256[],address[],uint8[])", +"286ff6c7": "riskypercentage()", +"28700a15": "mainAcceptGovernance()", "28707f3d": "addCharacter(uint32,uint16)", +"28709170": "initialize(string,string,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"2870e3f6": "artemSupplyState(address)", "28713d0c": "SunContractToken(address)", "2871587d": "MAX_PAYOUT_FRAC_BOT()", +"2871882a": "pumpkins(address)", +"28718e4c": "house(uint256)", "2871b1b9": "setRate1666()", "2871f2c0": "getMySquirrel()", "28720849": "verifyReport(uint16,int8[],uint32[])", +"28723eff": "addProtect(address)", +"28726bda": "_y()", "2872a8e7": "kkk()", +"2872b1ff": "callTarget()", +"2872feb8": "set_a(int256)", "287301c1": "COMMUNITY_PERCENTAGE()", +"2873e0d2": "daiBid(uint256,uint256,address)", "287418e7": "query(uint256,uint16)", +"2874da12": "_deployedTime()", "28753dc2": "ApprovedFunds(address,bool)", +"28754c59": "updateEthyPerBlock(uint256)", "28761ea5": "calcDividend()", "28762e3a": "rdDoisToken()", "28764b44": "rnBlock()", +"2876b927": "getEthereumToTokens_(uint256)", "2877af10": "STARToken()", "2877c748": "claimVotingProposal()", +"287844db": "withdraw11(address,uint256)", +"28786720": "BALANCER_SwapEthForTokens(address,uint256,uint256,address)", "2878d3a7": "getClue3()", +"28790b5a": "acceptWalletOwnership()", "287977d6": "updateScore(uint8,bytes32,uint24)", +"28798bd3": "mintStock(uint256,uint256,uint8,bytes32,bytes32)", +"287a0f77": "loanFeeMax()", "287ad39f": "upgradePrice()", "287ad3e5": "endPeTime()", +"287ad8fa": "cardPrice(uint256)", "287b020b": "founderMembers()", +"287b071b": "createTransformWallet()", "287b7cc1": "setStageLimit(uint256)", "287b8862": "s35(bytes1)", "287b895c": "MAX_OBR_CAP()", "287bd206": "MAX_ALLOCATIONS_COUNT()", +"287be3e4": "getStakeManagerAddress()", "287cc96b": "getTotalEthBalance()", +"287d274b": "abortAuction(bool)", "287dd8d2": "HIcToken(uint256,string,string)", "287e85e9": "getTimeoutBlock(bytes32)", +"287e96c1": "setTokenAddress(uint256,address)", "287e9fbc": "setGameIdCntr(uint256)", +"287eda05": "prescription(uint256)", "287eda92": "setIntervalSize(uint256)", "287efb57": "setMixFormulaAddress(address)", "287fcbfc": "PEPEso()", +"287fdafb": "getDeriversAndUpper(address)", "28802f19": "stare(uint256,uint256)", +"28804dbd": "initialize(uint256,address,bool)", "28805407": "refundToken(bytes32,address,address,uint256)", +"28806f06": "GetBALPoolPacketEnd(address[])", +"2880b3cd": "distributionBlockPeriod()", "2880ebe7": "underdogPayoutMarkup()", +"288104ac": "CreatorRewardWasPaid(address,uint256)", +"28811b14": "requests(uint256,address)", "28811f59": "F()", +"28814f03": "setup(address[],uint256[])", "288169fd": "_changeAddress(address)", +"28823774": "dissolvingResolves()", +"288268e9": "blockRewUpdate()", "28828b1e": "claimMultipleAndWithdrawBalance(bytes32[],uint256[],bytes32[],address[],uint256[],bytes32[])", "2882ab48": "BurnGas()", +"2882b03c": "distributeCrimeGold(address,uint256)", +"2882b768": "ShareBonus(address,uint256,uint256,uint256)", +"2882c9b1": "presale3()", "28831187": "setCompanyWallet(address)", "288343e4": "Start(address,uint256,uint256,uint256,uint256,uint256)", "288365a7": "foundation_vesting_contract()", +"28836fd7": "whitelistedContract(address)", +"28842d4f": "setLiquidationBonus(uint256)", "2884c115": "_finishICO()", "28852b61": "allOfferingPercentage()", +"288596a6": "swapDaiToSai(address,uint256)", "2885b593": "extractMasterKeyIndexLength()", "28861d22": "market(uint256)", +"28861e04": "addnft(address,uint256)", "2886b47a": "PERC_TOKENS_TO_RELEASE()", "2886d76f": "setColorTeal()", +"2886ff4c": "cropsETHToken()", "288714be": "getPreviousWinner()", "2887318f": "RATE_ETH_WXW()", "2887cecd": "QYTestingToken()", +"2887d765": "INITIAL_TOKENS_PER_ETH()", +"2887e760": "setupLiquidity()", "288811cb": "grantAdvisorToken()", "28889862": "setRandomPlayerAddress(address,address)", "2888bb9c": "fixedAssets(bytes32)", "2888c701": "setClearingPrice(bytes32,uint256)", +"2888ed45": "getCountOfSales()", "2888f9d0": "updateMaxBet()", +"288916c1": "boostStream()", "28896066": "transfer_owner(address)", +"2889a93a": "getWhitelistedUserAddresses()", +"2889bc8a": "getAssetPacksUserCreated(address)", "2889e822": "team3Address()", "288a6535": "_getPurity(uint16,uint16)", "288aa69b": "VirusGame()", +"288aaa9e": "pendingSpace(uint256,address)", +"288af8fb": "breedingRewardCost(uint256,uint256)", "288b7ad8": "homeMaxPerTx()", "288bcfb5": "getIntegerVaule()", "288bd8fd": "mintReserveTokens(uint256)", +"288c0962": "getBetWeek(uint256)", "288c4602": "WRTCCToken(address,uint256)", +"288c5529": "advanceAndRedeemMany(uint16,address[],uint256[],uint256[])", "288c6ed2": "getSeedCost(uint256)", +"288cbf09": "payF(address,uint256)", "288cdc91": "filled(bytes32)", "288dca30": "softCapFundingGoalInCents()", "288dd331": "getTotalBidded()", "288ddec7": "reversePercent(uint256,uint256)", +"288e3a6d": "LogVotes(address,uint256)", +"288e8f0c": "createTokenBatch(address,uint256[],uint256[],bytes)", +"288f69f8": "versionIdToShutdownIds(uint256)", "288fa739": "isValidVote(uint256,address)", "2890e0d7": "burnNFT(uint256)", +"2890ee71": "insertMilestone(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "289120cf": "goToNextState()", "28916184": "createProduct(string,bool,uint256,address)", +"289176ed": "recordDCPSub(address,uint256)", "28918296": "verifyBBODocument(bytes32,bytes)", "28919b47": "best_gamer()", "2891da02": "tokensCounter()", "28929072": "setMaxAssignedRequests(uint256)", +"2892feaf": "removeRestrictedUser(address)", "28931484": "SmartLinkToken(uint256,string,string)", +"28936017": "RefundETH(address,uint256)", "2893c5b0": "mint(address,uint64)", "289471d5": "getOnTokenTransferFromValue()", "2894ceda": "publisherRegistry()", +"28956a24": "maiorOfertante()", +"289579d2": "createCertificato(string,string,string,string,string)", +"28957be2": "incentiveAddress()", "28962b94": "DS1Token()", +"289647e4": "getParametersHash(uint256,address)", "28968872": "minusFreezingTime(uint256)", +"2896f60b": "isAvailable(address)", +"28971c6a": "getNumberOfShipsOwnedBy(address)", +"2897236d": "fbtPerBlock()", "289768b7": "_checkForJoin(uint256,address,uint256)", "2897768d": "grantJoinAddr(uint256)", "289799b7": "setUnitTime(uint256)", +"2897a6b9": "commitEthFrom(address)", +"28980c46": "getExchangeIds(address)", "2898410b": "totalMintedToken()", "289850b7": "FundTree()", "28985c17": "returnsTwoUnnamed(uint256,uint256)", +"2898cafa": "burnedLiquidity()", "289912cc": "CLXTokenSale(address,address)", "28997e32": "token(uint256,string,string)", "2899a870": "claimAllInvestorTokensByOwner(address)", +"2899dc8c": "FeePayed(address,uint256)", +"2899f4c4": "testll()", +"289a0205": "REI02()", "289aac50": "teamWithdrawSupply()", +"289aafa8": "_setIdleAddress(address)", +"289add0c": "seed(address,address)", "289ae4c7": "AddressWhitelist(address)", +"289af0d8": "getSellFee()", "289b3aab": "Arith()", +"289b3c0d": "getGovernance()", +"289b4272": "arquivoComplementoAtosImobiliarios(bytes32)", "289b45fb": "subtractAction(bytes32,uint256[])", "289b5b15": "setTypeName(uint32,string)", +"289c0e5d": "setNtsPoolDividendWeight(uint256,uint256)", +"289c9d79": "FFARMPerBlock()", "289cb681": "testSetPresale()", "289cd94f": "setWhere(address)", "289cf1e2": "PRESOLD_TOKENS()", +"289dc251": "cDeposit()", "289de615": "getTokenDetail()", "289e0f82": "STAGE_1_START()", +"289e77b3": "GetMaster(address)", "289ea30b": "requireNotZero(uint256)", +"289ea6a3": "mint(address,uint256,address,uint256,bytes32,bytes)", +"289f6197": "isUserExist(uint256,address)", +"289fa9b0": "WHITELIST_TIMELOCK()", "289fd839": "presaleBonusTier3()", +"289fe345": "totalBlockYears()", "28a006af": "ethBalance(address,address)", "28a07025": "liquidate()", +"28a09ba0": "registerProtocol(address,address)", +"28a1170d": "setExchangeFeeRateForSynths(bytes32[],uint256[])", +"28a15ded": "addCpPoolInfo(address,address,uint256,address,address)", +"28a16b94": "_ascensionDuelTimeout()", +"28a193d3": "addErc20(address,uint256)", "28a1cab8": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", "28a20a2f": "transferXPAAssetAndProfit(address[],uint256)", +"28a20b5e": "singleDD()", +"28a22348": "approveTokens(address)", +"28a22f04": "convertSynths(string,string,address,uint256)", "28a24f30": "set_base_token_as_seeded()", +"28a27ba9": "claimStaked()", +"28a2f846": "minimumsClear(address)", +"28a34c89": "getSomeInfo()", "28a3dd2c": "_redeem(uint256)", "28a42e9d": "getUpgradeInfo(uint256)", "28a45038": "testTryProxyCall()", "28a49874": "regPrice()", +"28a4aeaa": "trackingVotes()", +"28a5138c": "inviterList(address,uint256)", "28a52d3e": "maxHistoryRecordID()", +"28a57981": "playerInfor(address)", "28a5be59": "getExchangeRateAtTime(uint256)", "28a5c5e9": "address_to_tokens_prev_week0(address)", "28a5e6f0": "regularOpen()", "28a741db": "publicityFunds()", "28a76045": "setAsMinter(address,bool)", "28a767b0": "ClaimAirdropMultiple(address[],uint256)", +"28a7996f": "toPie(uint256,uint256)", "28a7f25d": "transferJokerOwnership(address)", "28a852db": "SOFTCAP_LIMIT()", +"28a86d9a": "calldynamic()", "28a8ee68": "minimumTakerProtocolFee()", "28a92ef7": "requestRemoveAdmin(address,string)", +"28a9a679": "getKernelPosition()", +"28a9aadb": "PreSaleMinting(address,uint256)", +"28a9e1ff": "UNSTAKE_DURATION()", +"28aa0c01": "getOwnerDonwlines(uint256)", "28aa1a22": "IlumXXToken()", "28aa48b4": "heroTypeToHeroSales(uint16)", "28aa5257": "updateTransfer(bytes)", "28aa69cf": "end_race()", +"28aa9411": "_requireValidMarket(uint256)", +"28ab0c8c": "vaultPrizePoolProxyFactory()", "28ab4f76": "changeSupply(uint256,bool)", "28ab7375": "p_update_tokensRewardsAvailable(uint256)", "28abda51": "resetUrls(bool,bool)", +"28ac236b": "setUniLen(uint256)", "28acb002": "collectFees(uint128)", "28acb520": "IdentityManager(uint256,uint256,uint256)", +"28accc84": "ethBuy()", +"28ad82fe": "exchanges(address,address,uint256)", +"28ae1689": "useTicketsForUser(address,uint256)", +"28ae433e": "getKillBps()", +"28ae5322": "whitelistCapsRound_2(address)", "28ae8ea3": "redeem(uint256,bytes32,bytes)", "28aea735": "getCreatedDate()", "28af792c": "fundBTC(address,uint256)", "28af94c8": "addData(bytes32)", +"28b06043": "getCurrentUsersAmount()", "28b070e0": "contractIndex()", +"28b0ce50": "viewAllActiveEvents()", "28b0e795": "advance(bytes32,uint32,uint64,uint64,int64,uint64)", "28b1b051": "external_call(address,uint256)", "28b2105c": "endCrowdfund()", "28b2362f": "custodianRegistry()", +"28b2578b": "activateFee(bool)", +"28b2b00d": "computeSimilarityMatrix()", "28b2e781": "minprice()", +"28b2ed1d": "test_min()", "28b34ef6": "updateLandData(uint256,uint256,string)", "28b3f3ae": "getBetAmount(uint8)", +"28b40d16": "claimReInvest(uint32)", "28b44b4b": "getBalanceOfContract(address)", +"28b48bb9": "balanceMe()", +"28b4d9c4": "ThreeYearsYield()", "28b4e62a": "numTokenPerEth()", "28b53247": "_burnCarbonDollar(address,address,uint256)", "28b59782": "Initiate(address,uint256)", "28b5a8e6": "fechPreAllForCandidate()", +"28b5d1eb": "BuyRealm(uint256,uint256,address,uint256)", "28b5dde8": "setPI_edit_9(string)", +"28b5e32b": "call()", "28b5e965": "artDescription()", "28b60031": "ownerTokens(address,uint256)", +"28b6012e": "_div(int256,int256)", "28b6c658": "maxAgonCount()", +"28b6d95b": "frsSetAllowed(address)", "28b7bede": "getTokenContract()", +"28b7ccf7": "maxReportDelay()", "28b7e183": "enableAffiliate()", "28b8b108": "withdrawStoreBalance()", "28b8e9cf": "buy_the_tokens()", +"28b93702": "SellTokenAllowed()", +"28b9424a": "tokenReserveOnInit()", "28b94289": "isPreICOPrivateClosed()", +"28b9538c": "getAskSpread(address)", +"28ba5170": "TREASURE_CHEST_PREMIUM()", "28ba671f": "_getBonusTokens(uint256)", "28baf31d": "EscrowVault(address,address)", +"28bb2d9a": "yfka()", "28bb6f24": "webGiftTotalAmount()", +"28bc4bf1": "joysHero()", "28bc5dcc": "promotionIndexToHost(uint256)", "28bc5ee4": "beginVote()", +"28bc7dec": "mintForMarketingPool(address,uint256)", +"28bc841b": "getRoundV1(uint256,uint256)", "28bc8a04": "airdropSpent()", +"28bc915d": "out_pw()", +"28bca316": "lockGemAndDraw(address,uint256,uint256,uint256,bool)", "28bcd985": "PRIVATE_PHASE()", "28bdbdca": "productionUnitIdRange()", +"28bdcde8": "bills(uint256)", +"28be1e56": "reverseQuoteDirect(address,address,uint256)", "28be67f9": "get_amount_get_sell(uint256)", +"28be8596": "getNewPower()", +"28bea3b5": "bananas(address)", +"28beb386": "ethContributedAlways(address)", +"28bec02b": "ERC20LpSupply()", "28bf2448": "availableForWithdrawalAt(uint256)", "28bf4079": "initStage(uint256,uint256)", "28bf794d": "set_price(uint256)", +"28bfb355": "couponPremium(uint256,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)", +"28c1a018": "claimUBIOwner(address[],bool)", +"28c225a8": "placeSingleBet(uint256,uint256,uint256,uint256,uint256)", "28c23a45": "renounceOwner()", +"28c2c5df": "TimeLocked(address,uint256,uint256,address)", "28c32be6": "refundPeriodStart()", +"28c38b33": "setAdapterAddress()", "28c3d685": "logPlaying(address)", +"28c3d701": "calculateContinuousMintReturn(uint256)", +"28c3ef45": "checkTurnsUsers(address)", "28c4b676": "maxPaysPer()", "28c4e24c": "retrieve(address,address,uint256)", "28c4f410": "getShifterByToken(address)", +"28c5a005": "getTransferState()", "28c5cf0a": "finalizeContract()", "28c69eb2": "hasStake(address,address)", "28c6cd05": "minBuyTokens()", "28c6d8e3": "preBuyersDispensedTo()", +"28c6fa6f": "newWallet(bytes)", "28c743e6": "WelfareTokenFund()", +"28c75d54": "_processDeactivationRequest(address,uint64)", +"28c77820": "claimAll(uint256[])", "28c78227": "openBoxPlayer(uint256,uint256)", +"28c78b5e": "DemTokenSale(address,uint256)", +"28c80815": "setWerewolfPrice(uint256,uint256[])", +"28c89e7e": "updateVaultClose(uint256)", "28c8b217": "approveProject(address,uint256)", "28c8ed98": "disableAutoDividends()", "28c8f3ba": "airDropManager()", +"28c90e91": "tokenDappAddr()", +"28c94178": "LogNewInvesment(address,uint256,uint256)", "28c9ca90": "ethereumWei()", "28c9f19a": "exchangeAndPay(uint256[10],address[5],uint256[4],bytes32[4])", +"28ca18a7": "unknown6b701e08()", "28ca3062": "testCannotSetPresaleTokensAfterActivation()", "28ca5a1c": "InvestmentEvent(address,uint256,uint256)", "28cab0d6": "TokenBought(address,uint256,uint256)", +"28cb6687": "gage()", "28cbe9ac": "useKnowledge(address)", "28cc413a": "getProof(uint256,uint256,uint256)", "28cc4150": "tokenSaleRate()", +"28cc4e41": "restake(uint256,uint256,bool)", +"28ccea45": "exitAndWithdraw(uint256,uint256)", +"28ccf1fd": "updateToChainIdV1()", "28ccffe7": "etherFromAltar()", +"28cdfaeb": "getAccountStats(address)", "28ce213e": "setBalanceOf(uint256)", +"28ce48a0": "ambassadors(address)", "28ce5cdb": "withdrawMinerFee()", +"28ce8031": "getBeerPrice()", "28ce8845": "addToTotalSupply(uint256)", +"28cf540e": "iceDragons(address)", "28cf8b6f": "ERC223Token()", +"28cf8bb0": "depositOwner(uint256)", +"28cfadb9": "RsvVestingSupply()", +"28cfbc84": "taxTokenAddress()", +"28cfbd46": "safeBatchTransferFrom(address,address,uint256[],bytes)", "28cffcd8": "YFT()", "28d005e9": "firstTTaxAmount()", +"28d0679e": "yourPEANUTSBalance(address)", +"28d080f1": "lockUserInfo(address,uint256)", "28d08142": "getCurrentHighscoreUser()", +"28d09d47": "user_point_history(address,uint256)", +"28d0a326": "positionOverdue()", +"28d0cad7": "provideFunds(address)", "28d0d223": "withdraw_amount()", +"28d1246d": "expireCampaign(uint256)", "28d18745": "getMiningAuthority()", +"28d27f09": "goodsList(uint256)", "28d2a961": "chkBSize(uint256,uint256)", +"28d2bc91": "_burnPool()", +"28d2bf94": "currentReceiver()", +"28d37a72": "setNewToken(uint256,address)", "28d3ad3f": "getPot(uint256)", "28d3e3e1": "min_goal_amount()", "28d42350": "endIco1()", "28d445f6": "_afind(address)", +"28d4983b": "FAILURE_USER_TRANSFER_LIMIT()", "28d4cc24": "window2TokenCreationCap()", +"28d586b3": "withdrawKAI(address)", "28d5e117": "numberOfPossibleChoices()", "28d6ce3d": "startSale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"28d6d721": "returnSenderBalance(uint256)", +"28d748c4": "removeFromTransferBlacklist(address)", "28d76403": "dataForSell(address,uint256)", +"28d765a7": "updateAddress(uint256,address,address)", "28d84c9b": "delAltOracle(address)", "28d879e4": "depositEtherBalance()", +"28d8d074": "artworkIdToOwner(uint256)", +"28d8ed7a": "findId(address)", "28d8f102": "ABOX()", "28d905e5": "getAssetIdTripCompletedTime(uint256)", "28d90b63": "ChangeFee(uint8)", "28d936fe": "numImages()", +"28d967a3": "SendableToken(address,uint256)", "28d969a5": "resetIndex()", "28d969e2": "initialARXtokenSupply()", +"28d9a78e": "testTrade(address,uint256,address,uint256,address,address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)", "28d9dcd4": "createErc20Token(string,string,uint256)", "28da6ba3": "PreSaleComplete(address)", "28da740f": "firstTimeLine()", "28da75fa": "addAddressToCaller(address)", "28da850b": "buyAllOutcomes(uint256)", +"28dae6e3": "enableClaim()", +"28db0ece": "withDrawlETH(uint256)", +"28db38b4": "isEventMinter(uint256,address)", "28db5470": "getPrivateName()", +"28db8ab4": "payproduct(uint256)", "28db90a4": "BadgeCoin()", +"28dbdaee": "WRITE_OFF_PHASE_A()", +"28dbf611": "INITIAL_BUMP()", +"28dc0fcd": "claimPrivateRgt(uint256)", "28dc38e6": "calculateWithdrow()", +"28dc8860": "tokenSaleHardCap()", +"28dca7a3": "defaultEditionLimits(uint256)", +"28dcb2a0": "ovmSSTORE()", "28dcce7c": "addWinner(address,address)", +"28dce49b": "flagIfNotVerifiedContract(address)", "28dcfdac": "getSignsCount(uint256)", +"28dd2d01": "getUserReserveData(address,address)", +"28de04f7": "LogInvestorGainChanged(address,uint256,uint256)", "28de15b2": "MajorityList()", +"28de3c2d": "LogUpdatedConflictResolution(address)", "28de4426": "setLockupPeriodSeconds(uint256)", "28de78d0": "WandtChaintest(uint256,string,uint8,string)", "28dee1d2": "transferEtherOut(address,uint256)", +"28df1417": "withdrawFromMine(address,uint256)", "28df192d": "releaseSbtToken()", "28df3707": "HawkToken(uint256,uint256)", +"28df5208": "callAddToBalance()", "28df7755": "TravellingFreeToken(uint256,string,uint8,string)", +"28dff052": "changelock(bool)", "28e07244": "getTurn()", "28e08186": "ownerAllocateTokens(address,uint256,uint256)", "28e0b502": "getDrawStatus(uint256)", "28e0ba9a": "affsend(uint256,uint256,uint256,uint256,uint256)", +"28e115ff": "registrationExt3(address)", "28e158d0": "TokenVestingContract(address,address,uint256,uint256,uint256,uint256,bool)", "28e1a604": "BurnFrom(address,uint256)", +"28e211a9": "getSex(uint32)", +"28e24025": "setWhiteListRecord(address,bool,int128)", +"28e24b3d": "genesisBlockHash()", +"28e34d94": "getSGRAuthorizationManager()", "28e36ab8": "_getPrice(uint256,uint256)", "28e3844c": "Member_AssignTokensToProject(int256,int256)", "28e3c4f8": "checkLock(address,address)", +"28e3d190": "totalBids(uint256)", "28e454ee": "setDusting()", +"28e45a83": "farmingRate()", "28e47076": "testFailCreateWithParentsParentSameItemId0()", +"28e47c8a": "setupActive(bool)", +"28e514c9": "payAllBonuses()", "28e53bb2": "approveKYCAndDeposit(string,address,uint256,uint256,string)", "28e5617e": "weeklength()", +"28e58e4f": "deployMarket(uint256,address)", +"28e593b3": "setMultiTokenMediator(address)", "28e5e5d3": "snowflakeCall(address,string,address,uint256,bytes,bytes)", "28e665ef": "releaseTokenForTransfer()", "28e68ebe": "getLastFundId()", "28e69b16": "setBalances(address,uint256)", +"28e6a33f": "checkBidder()", "28e70c4e": "getPosition(uint256,uint256,address)", +"28e7677d": "setDigest(uint8,address)", +"28e78e2b": "setsTPrice(uint256)", +"28e7b3f2": "getUnderlyingAssetAddress()", +"28e7bde9": "declareResult(uint256,uint256)", +"28e7c0a1": "processAmendGovernance(uint256)", +"28e7cef5": "MARKETING_RATE()", +"28e7d709": "dataRequests(bytes32)", +"28e85c4e": "FrozenStatus(address,bool,uint256)", +"28e85eee": "LogRenExBalancesUpdated(address,address)", +"28e86a94": "totalDcdcCustV(address)", "28e8776e": "getAyantDroitEconomique_Compte_9()", +"28e8b5bf": "gettimecount()", "28e8bc61": "endTokensale()", "28e8ed1b": "resetCrowdSaleaddress(address,address)", +"28e91918": "lossFactor()", +"28e9581b": "ChangedInvestorBlacklisting(address,bool)", +"28e964e9": "getProductivity(address)", "28e96cb0": "setDefaultAllowedLock(uint256)", "28e98537": "logicProxiesStatic(address)", "28e9bff8": "presaleAllocations()", "28ea0fc3": "transferCollectorship(address)", "28ea6aab": "addToBlackList(string,address)", +"28ea8d06": "getProcessWithdrawalsEnabled()", "28ea9203": "___setTarget(address)", "28eaa326": "_noThrowCall(address,bytes)", "28ec4173": "UnicornCrowdsale(address,address,address,address)", +"28ec87b9": "usdAmountFromShares(uint256)", +"28ec9521": "MinLPTokens()", +"28ec9cd2": "Installer()", "28ecb74e": "Grow()", +"28ed4f6c": "reclaim(uint256,address)", "28ed5c0d": "MCC()", "28ef26cc": "JEXToken()", "28ef42ce": "preICOSwapRate()", "28ef6f40": "openCrowdsale()", +"28ef8946": "closeBar()", "28efa3a6": "processRebond(address,uint256)", "28effe67": "gasForPBTT()", "28f03554": "ProcessDividend()", +"28f07b79": "DsDoi(uint256)", +"28f0a829": "Denominator()", +"28f0b257": "_treasuryFee()", "28f0d47b": "ticketTransfersAmount()", +"28f14573": "ERC20ClassicToOwner(address,uint256,address)", +"28f176cf": "calculateAvailableStableBondAmount(uint256)", +"28f1f6b6": "addProduct(address,string,uint256,uint256,uint256,uint256,uint256)", "28f22cc1": "getRemovedServicesForApplication(address)", "28f28529": "fstUnitPriceNumerator()", "28f2d4da": "identifiers(uint256)", "28f3402b": "changeRuningState(bool)", "28f371aa": "isApproved()", "28f3ebd6": "BitPrize()", +"28f40443": "candidateadd(uint256)", +"28f41d5f": "_usdcETHV2Pair()", +"28f44901": "voteOnBehalfOf(address[],uint256,bool)", "28f4c7de": "getMaximumReportingFeeDivisor()", "28f4dbb6": "thresholdAmount()", "28f5c7b3": "totalETHRaised()", +"28f618ab": "shitz()", +"28f661e3": "AdminAddress()", "28f66b77": "getAllHead()", "28f68d39": "getVestingPeriodsCompleted(uint256,uint256)", +"28f6976a": "BetPlaced(uint8,uint8,uint256,uint256,address)", "28f6a48a": "getBidCount()", +"28f6b953": "inviteMap(address)", +"28f727f0": "Payin(uint256)", "28f798a8": "toBinary(uint256)", +"28f7ab54": "systemWallets(address)", +"28f7ad49": "UserDeleted(string)", +"28f7b19f": "getOutAmount(uint32[],address[],address[],uint256)", "28f7f13b": "Acandy(uint256,string,uint8,string)", +"28f82ce9": "addEthLiquidityLGETEST3()", "28f833b7": "depositAddress()", "28f90e4b": "Etheramid2()", +"28f92c34": "releaseCommunity()", "28f9a563": "maxPreCrowdAllocationPerInvestor()", +"28f9bc49": "updateTokenToBurn(uint256,bool)", "28fa17b6": "estateData(uint256)", +"28fa2b45": "getTotalReceivers()", +"28fad35c": "getTheCape()", +"28faf217": "unsetIdentity(address)", "28fb29d7": "_transferEvent(address,address,uint256)", +"28fb2b03": "OPIUM_COMMISSION_PART()", +"28fb6607": "ban(address,uint256)", "28fbd958": "registerContract(bytes32,address,address,bytes20,bytes32)", +"28fbdc69": "getLoanDurationAndInterest(uint256,uint256)", "28fbf28a": "revealPeriodActive(bytes32)", "28fce8c8": "ZEUSCoin()", +"28fcf4d3": "transferToReserve(address,address,uint256)", +"28fd10d7": "lenders(address)", "28fd287c": "_addmoney(address,uint256,uint256)", +"28fd5e83": "isCustomer(address)", "28fd72e2": "updateRndSeed()", +"28fd8fc4": "getWinners(uint256,uint256)", "28fdcdf7": "safeMemoryCleaner()", +"28fe2793": "idleInitialIndex()", "28fe549a": "STATE_BET_ENABLED()", "28fe9a7f": "founder1Address()", "28fecd48": "reinstate()", "28ff498a": "presaleTokenLimit()", +"28ffb437": "snxMintSwap(uint256)", +"28ffcd40": "commonSale()", "28ffe6c8": "join(address)", "28fff8d6": "NokuConsumptionPlan(address,address)", +"2900e377": "migratedFrom()", +"2901669f": "setDPlayTradingPostOnce(address)", "2902320a": "totalTokensToSend()", +"29026614": "addValidPlugin(bytes32)", +"29026bd4": "_validateSignature(bytes32,address,uint8,bytes32,bytes32,bool)", +"29026cb2": "_ProposalExpired(bytes32)", +"290277e3": "stabFund()", +"2902a0ca": "changeMultiSig(address)", "2902b093": "addnewOwner(address)", "2902df61": "remove_helper(uint256)", "29033133": "clearValueBonuses()", "290382dd": "DFCToken()", +"290395c6": "withdrawpledgeEdf()", +"29040113": "partyB()", "29055edd": "createNew(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,address,address)", +"290576e4": "claimPrivateTokens(uint256)", "2905be9a": "IronHands(uint256,address)", "29062d76": "startGame(address[],uint256)", "29079291": "RVRCoin()", "2907eb16": "finalizeContract(uint256)", "290842a1": "setPI_edit_1(string)", +"290890fb": "switchlight()", "2908fb5a": "Y1_release()", "29090202": "Resolver(address)", "29092d0e": "remove(address)", +"29098462": "getGasCostOfGetAmount0ForLiquidity(uint160,uint160,uint128)", "2909acef": "isSpawnProxy(uint32,int256,address)", +"2909c2f4": "debug_kill()", "2909cc5d": "left16(uint256)", "2909f638": "setData(uint256,uint256,uint256)", +"290a5c6d": "setTFIOracleAddress(address)", +"290a9178": "someComp()", "290a9fa0": "setRangeGameAttr(uint256,uint256,uint256)", +"290ab922": "_relay()", "290b1e5f": "initTokenBank()", +"290b3cb7": "canUserCancelArtwork(address)", "290b7dfd": "getTransactionLength(bytes32)", +"290b84a4": "BoughtEgg(address,uint256,uint256)", "290c292d": "preMint(address,uint256)", "290c398f": "getChipIds(bool)", "290c8eb1": "doMint(int256,address,uint256)", @@ -23511,33 +42916,60 @@ "290d2494": "startBuffer()", "290d256e": "ExchangeLinkToken()", "290e1c20": "AutoFare(uint16,uint16)", +"290e409e": "uniswapRouter01()", +"290e4544": "massHarvest()", +"290e4fbd": "setBurnMultiplier(uint8)", "290ed1be": "RESERVED_MARKETING_GROUP()", +"290ee5c9": "payoutPercentage()", +"290f8f56": "getSigner(uint256,address,address,bytes,bytes)", "290fe2df": "getEscrowAddress(uint256)", +"29101470": "getTotalQuarterModeratorPoint(uint256)", "29107555": "soldByChannels()", +"29108388": "recordPledgeDisable(address,uint256)", "29108d1b": "transferReserveToMain()", "2910a32b": "setTokenBuyRate(uint256)", "2910f159": "LogBidMade(address,uint256,uint256)", +"2911360a": "setDailyDistribution(uint256)", "29113bc8": "hotWallet()", "29114d65": "winnerPoolTotal()", "291194b2": "NOT_AUDITED()", "2911982e": "balanceOfPlayer(address)", +"2911c27d": "setManager(uint256,address)", "2911c9e7": "dashId()", +"29120b40": "addNewPool(address,uint256)", +"29121422": "Unassign(address,bytes32,address)", +"2912581c": "sgt(int256,int256)", +"2912800f": "initiate(uint256,uint256,uint256,address,address)", +"29130884": "strengths(bytes32)", +"29131d02": "BonusIncreasePercentageChanged(uint256,uint256)", +"29134768": "stakingFactory()", "29143bdd": "onwerfee()", "29147530": "setValidKYC(address)", "29148c0c": "changeOwnerBook(uint256,address)", +"2914b9bd": "getEVMScriptExecutor(bytes)", "2914fb3e": "porcodr(uint256)", "29153250": "withdrawalList(uint256[],address)", +"29157022": "LatestKicker(uint256,address,uint256,uint256)", "2915a915": "determineNumber()", +"2915cbec": "farmInfo(address)", "2915fd3d": "subToZero(uint256,uint256)", "29161820": "Base(uint256)", +"29161a00": "stakingBalance(address,address)", "29163502": "addWhitelistedTransfer(address[])", "291675f2": "add_another_owner(address)", "291681b5": "signupUserWhitelist(address[])", +"2916d2be": "createCloneToken(string,uint8,string,uint256,bool,address,address)", "2916f075": "check_invalidator(uint256)", +"2917707c": "createTimes(uint256)", +"2917b46e": "LogSpendCredits(address,uint256,uint256,bool)", "2917f162": "getCooldownIndex(uint40)", "2917f66b": "distributeAllTokens()", +"29180315": "invokes(bytes32)", +"29181003": "removeAccount(address,uint256)", +"29181cbf": "sellPriceOf(address)", "2918435f": "fun_sandbox(address)", "29189c9e": "ATTToken()", +"291917c0": "freeFrom(uint256,address)", "291948ff": "date_ico_end()", "29194964": "setUsdCap(uint256)", "2919fccd": "Gaoguans(address)", @@ -23547,68 +42979,128 @@ "291cef95": "startSlammerTime(address,uint256[5],address,uint256[5])", "291d1185": "updateCurrentBonusPeriod()", "291d4f98": "transfered_total()", +"291d5920": "isBurnableWallet(address)", +"291d6914": "LayDanhSachTheoCuLy(uint256)", "291d778c": "CancelSellOrder(bytes32,address,uint256,address)", "291d9549": "removeWhitelisted(address)", +"291dccaf": "Trading(bool)", "291e6777": "sendVote(uint256,uint256)", +"291e7b71": "licensesOf(address)", "291ea526": "constructionEnd()", +"291ed773": "castleTreasury()", "291f028d": "calculateRoom(uint256,uint256,uint256,bytes32)", +"291f232f": "isNotCoolDown(uint256)", "291f3665": "balanceOfFund(address)", "291f37a4": "CHESSToken()", "291f5a1f": "ORIGINAL_IPFS_HASH()", +"291f5c00": "TokenTimelockCreated(address,uint256,bool,uint256)", "291fce73": "TmoneyTest2()", "291fd18f": "issueCertificate(string,string,uint256)", "292005a2": "TOKEN_SUPPLY_LIMIT()", +"2920c4ad": "stakeTokenAdd()", +"2920d138": "getTotalNumberOfStakers()", +"292123b6": "ValidatePublisher(address,bool,string)", "29213a2f": "approveMember(address)", "2921441e": "mysteriumPricing()", "29216d20": "setLockTime()", "2921be51": "ALLOC_SALE_GENERAL_1()", "2921e6fc": "IfModuleRegist(string,string)", +"2921fdc6": "CreateAccount(address)", "29223bdb": "changeServiceUpdateAddress(uint32,address)", +"29227f07": "burnInvest(address,uint256)", +"292280c9": "originMax()", +"29228765": "updateTokensPerBsc(uint256)", +"2922a751": "approvalHandler()", "2923f101": "Set_eth_gift(bytes32)", +"2924021f": "selfOdds(address)", "2924416f": "validateAndGetRedeemFee(address,address,uint256)", "29245dd1": "startCall(uint256)", +"29249393": "set(address,int256)", +"2924cfbf": "approve_851(address,uint256)", "2924e254": "getInterestTimestamp(uint256)", "2924f0dc": "_lockProjectToken()", "2925827c": "preallocated()", +"2925a4f5": "addFeeAmount(address,uint256,uint256,uint256)", "2925ffc2": "modifyCommunityTaxes(uint256,uint256,uint256,uint256)", "2926050f": "pubEnd()", "29263630": "initialiseContract(address,uint256,uint256,uint256)", +"29265db0": "destroyDice(uint256)", +"2926a95c": "massWithdraw(address[],uint256[])", +"29272a63": "BBP()", "29274fe1": "buyBOTx(uint256,string,string,address,uint256)", +"2927989f": "bet(bool,address,uint256)", +"29287ad0": "releaseTheRest()", +"29287edb": "calRebase()", "2928859c": "runsOutOfGas()", "29291054": "setContract(address,address,address)", "2929abe6": "distribute(address[],uint256[])", "2929dc09": "WithdrawAllReserves()", +"292a1c68": "ExistFuncCalledTopic()", "292a2879": "setFundAccount(address,address)", +"292a3f7e": "once()", "292a7409": "processBuyCard(uint256,address)", "292a9873": "attackTileForNewUser(uint16,bytes32,bytes,bytes32,bytes32,address)", +"292ad50a": "addHoldCover(address,address,bytes4,uint256[],uint16)", +"292b27c1": "create(bytes32,address,uint256)", "292b79b9": "HashReleased(bytes32,uint256)", +"292bbdc4": "getLv(uint256)", "292c1323": "vestAddress(address)", "292c8aaa": "getPayOutAmount()", +"292c9988": "CaughtWithToken(address,uint256,address,uint256)", "292ca2fe": "Jeopardy()", "292cbbba": "DAYSECONDS()", "292cdfa5": "getForthRoundReleaseTime()", +"292d1673": "jlp4f()", +"292d1fb9": "setState(string,uint256)", "292d64e0": "transferHotel(address,address)", +"292d93ed": "getEthBound3()", "292d98cd": "allSet()", +"292e17b5": "noFeeAddresses(address)", +"292e2dc0": "COORDINATOR_NEW()", +"292e3c19": "recoverERC20Funds(address)", +"292e5b4e": "changeFeeInfo(uint16,uint16,uint16,uint16,uint16,uint16)", "292eb75d": "openAccount()", +"292eccf4": "getExpFromRational(uint256,uint256)", +"292ef8d0": "setSplitDai(uint256)", +"292f1f1c": "calcCeiling(uint256)", +"292f2e0e": "challengeDuration()", "292f4a6e": "Token(address,address)", "292fec04": "isClaimable(address)", +"29301a0e": "formatDSProxyBorrowCall(address,address,address,uint256)", +"293031b8": "idd(address)", +"29309d5e": "outstandingCoinSupply()", "2930cf24": "red()", "2930fa49": "PLATFORM_FEE_RATE()", "293100a9": "meleeElementBySubtypeIndex(uint256)", "293100c1": "tournamentsReserve()", +"293146e8": "_extFarmInfo(uint256)", +"29318897": "getTokenPriceInETH()", "2931ebb3": "AdminshipTransferred(address,address)", "29322e05": "sendTokens(uint256,address)", "293230b8": "startTrading()", +"29325489": "Pay(address,address,address,uint256,uint256,string)", "29325ebd": "zeroUInt()", +"29327e97": "setBreedTypeWeight(bytes32,uint256)", "2932ea90": "creatUserPurchase(string,string)", "29337bda": "personalisationCost()", "2933cc47": "getIdeaDate(uint256)", +"2933e8b3": "loteryDayWaitingForWinner()", "2933ee88": "get_account_id(address)", +"293415d4": "tokenToBunnyBNB(address,uint256)", +"29349116": "mintThenSwap(uint256,uint256,uint256,int128,address,uint256,bytes32,bytes)", +"29349d96": "UNIRewardsOf(address)", +"2934a0ee": "getCondition(bytes32)", +"2934c447": "_rewardsSupply()", "293528c9": "GOL()", +"29352b27": "setMembers(address[],bool[])", +"29358d5b": "remainingJackpot()", +"2935b2a8": "depositERC1155(uint256,uint256)", "2936981c": "setNumRewardsUsedForAddress(uint256,address)", "2936c27a": "getFoundersTokens()", "2936ce62": "crowdSaleOngoing()", +"2936d2b0": "priceAverageBuy()", "2936d35c": "millLeconteRate()", +"2936ed41": "approveTokenForRouter(uint256)", "29372ad0": "getWarrior(uint256)", "29372d21": "testLog()", "29377d61": "receiveFunds(uint8)", @@ -23616,64 +43108,127 @@ "293877d7": "bthFundDeposit()", "29388f8d": "setArbitration(address)", "29390370": "setPricer(address)", +"29394f02": "approve_872(address,uint256)", "293a9169": "getSpawnCount(uint32)", +"293ad574": "getCurrentRewardsPerBlock()", "293b1103": "Bitlike()", "293b682f": "fSub(uint256,uint256)", +"293bb289": "TEAM_MEMBER_3_SHARE()", "293be456": "setReward(uint256)", +"293bf031": "g(uint256,uint256,uint256,uint256,uint256)", +"293c0818": "invitationCardInfo(uint256)", "293c2958": "getRoundState()", "293c29de": "swapHotCold()", "293c33b5": "authorizedFundsAvailable()", "293c6a3a": "mint(bytes32,address)", +"293cee7d": "newAddressProposal(address,string)", "293d5050": "getPlayerNum()", "293d7663": "refundErrCombat(uint256)", +"293e2593": "airdropWithRefReward()", +"293e852e": "set(uint256,int256)", +"293e993e": "InvestorVerified(address)", "293ee91f": "_fillOrder(uint64,uint64)", +"293eff86": "getOpenMakeOrdersAgainstAsset(address)", "293f2ad7": "teamTokensIssueDate()", "293f3fa9": "setBatman(address)", "293f4825": "fire(uint64,address[])", "293f5e6a": "get_first_user_recast(bytes32)", +"293f6eb9": "pendingTransaction(uint256)", +"293f7bbd": "oneByteUTF8()", +"293f87f6": "boosterEscrow()", "293f9a9c": "showDemurrageConfigs()", "293f9f4f": "recordBounty(address,uint128,uint256)", "293fc820": "setData(string,string,string,string,bytes32)", +"293ff10f": "SentToDev(address,uint256)", "293ffca3": "AddressReg()", +"2940187a": "isGenesisAddressLevel2(address)", +"294091cd": "stake(address,uint256,address)", +"2940fa66": "maxdecayBurnrate()", "2940ff1e": "cancelBet(bytes32)", "29415664": "buy_part_amount_show(bytes32,uint256)", +"2941d6c7": "LoanBegunAtIndex(uint256)", +"2941e045": "mirror(uint256)", +"294205b4": "setCanAcceptTokens(address,bool)", "294247aa": "BlackjackTipJar()", +"29424c91": "poolLength(uint256)", +"294259eb": "tokenSaleDEFIX(address)", +"2942cd96": "setbattleFees(uint256)", +"2942e773": "FECORE()", "29432e0d": "setaddressname(string)", "29434e33": "insertUser(address,bytes32,uint256)", "29435cde": "TadamWhitelistPublicSale()", "2943fd5e": "TokensIssuedCrowd(address,uint256,uint256)", +"294402cc": "multisend()", "29441674": "DOW_SUN()", +"294423b6": "holderlist(uint256)", "2944363f": "updateAllDependencies()", "2944e740": "changeProfitContainerAddress(address)", "29457483": "register(uint256[2],uint256[4],uint256[2])", +"29458529": "lpWithdrawFeeRatio()", "2945a57d": "findClaim(uint32,string,string)", +"2945aa3c": "allowContractList(address)", +"2945fb45": "safeFundMoving()", +"29467c6e": "pendingCity(uint256,address)", "2946ae5d": "changePauseTranfser(bool)", +"2946de6c": "ReceivedTokens(address,uint256)", +"29473a53": "influencers(address)", +"2947624a": "calculateRiskyReward(address)", "29477e03": "exCount(uint256)", +"2947bb43": "rareList(uint256)", +"29480b08": "takeFlipReward(address)", +"29482859": "amountToReward()", "294914a4": "j2Timeout()", "294919a1": "rate(address,uint256,uint256,bytes)", +"2949899b": "PaidPendingBalance(address,uint256)", "2949b11d": "mutiSendETHWithDifferentValue(address[],uint256[])", +"2949f19e": "adminSetOracle(address)", +"294a2bf2": "EUR()", +"294a6205": "addWhiteListVault(address)", "294a6511": "checkRefundExistanceByOwner(address)", "294afbf2": "sendBigPromoBonus()", "294bbc09": "ggcd(address)", +"294c58f0": "findTwoPointFivePercent(uint256)", +"294c6dbc": "NewNeedApprovesToConfirmRequestUpdate(address,uint8,bool)", "294cd2e8": "BACA()", "294cdf0d": "tokenOfOwner(address)", "294cedb8": "resolveOffer(uint256,bool,bool)", "294cf912": "getBoosterPrice(uint256)", +"294dafc0": "_CLIFF_RATE_()", "294e47e3": "FlipToken()", +"294e4c55": "isUserDepositedMoreThanAmount(uint256,address)", +"294e96e2": "getOrderIdArrayList()", +"294eb12d": "setArea(uint256,uint256,bool)", +"294ed8cf": "farmStarted(address)", "294f3d4d": "setUpLimit(uint256)", "294f4025": "pendingWhitelistRemoval()", "294fa425": "MIN_BUYIN_VALUE()", "29501ad6": "changeManagerAddress(address,address)", +"29501dde": "getUserSuperiorAddr(address)", +"2950524b": "RCVDeclare(address)", +"29507f73": "transferOwnership(uint256,address)", +"2950d599": "TERM_DURATIONS(uint256)", +"29516511": "getDonors(uint256)", +"2951659a": "probabilityRatio(uint256)", "29516a47": "PoWMLottery()", "29516ba7": "purchasedTokensRaisedDuringPresale()", "29516c41": "betMatch(uint8,uint8)", +"29518514": "isOperatorOrSystem(address)", +"29519457": "setTokenPaused(bool)", "29519c9c": "LAFINAL7()", +"2951f1b2": "priceOracle(address)", +"295203a2": "LicenseIssued(address,address,uint256,uint256,uint256,uint256,uint256,address)", +"295226c5": "createSIPPlan(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "2952438e": "transfer(string,address,address,uint256)", +"2952dde8": "getPools(uint256[])", "295310bf": "setTransferRate(address[],int16)", "2953a286": "setGenesisToken(address)", "2953ee6f": "InvalidPullRequest(uint256)", "2953f198": "addEntity(string)", "29546713": "claimableHalvings()", +"29555c3c": "calculateCollateral(uint256,uint256,uint256,bytes32,uint256)", +"29556c7b": "setDebtAuctionDAIAmount(address,uint256)", +"2955a0a5": "LOCK_WITH_ONE_YEAR()", +"2955bb9b": "payBack(uint256,address)", "2955d4ce": "setRealisation(uint256)", "29560980": "getCapital(uint256)", "2956262b": "ownersStakeAdded()", @@ -23681,52 +43236,86 @@ "29575f6a": "superAdmin()", "29576c82": "generalExp(uint256,uint8)", "295777be": "releaseFundsNotification(uint256)", +"29577d51": "setGovernorSharePct(uint16)", "295780ea": "RequestInfo(uint64,uint8,address,uint256,address,bytes32,uint256,bytes32[])", +"295795e2": "setOwnerName(string)", +"2957b839": "daoFee()", "2957ca33": "BONUSTWO_DATE()", "2957d848": "batchWhitelistAddresses(address[])", "2957da23": "ownerDestroy()", +"2957f3e6": "ActiveStarChanged(address,uint256)", "2957fef4": "redeemBalanceOf(address)", "2958263a": "lastBucket()", "29589f61": "tradeWithHint(address,uint256,address,address,uint256,uint256,address,bytes)", +"2958bacd": "setDisputeManager(address)", +"2958f8a5": "safeWipe(address,address,uint256,uint256,address)", +"2958ff79": "waitInfo(uint256,address)", "2959275d": "increaseCompanyCountByOne()", "29594e4f": "hash(bytes32,address,uint256)", "295961b1": "checkMinerQuest(address)", +"29598630": "setSellPriceById(uint32,uint256)", +"2959f291": "unitCoinProductionMultiplier(address,uint256)", "295a1cc2": "getNowTotal()", "295a49ca": "Unclosed()", "295a5212": "mode()", "295a8b34": "update(uint256,uint256,bytes,bytes)", "295b3299": "submitTopUpLimit(uint256)", "295b4e17": "paid()", +"295c0d98": "isShield(address)", "295c219c": "getMarketMakerAddress(address,address)", "295c25d5": "addAmbassador(address)", "295c39a5": "getNumMarkets()", "295c6e4d": "setBytes32Slice(bytes,uint256,bytes32)", +"295c8457": "mProposalNumb()", "295d0eb5": "_buyAndCreateToken(uint256,bool,uint256)", "295d2d69": "BotManageable(address)", "295d4756": "PARSECS_TOTAL_AMOUNT()", +"295da87d": "burnSynths(uint256)", "295dad5e": "TriedToken()", +"295dce67": "txtFee()", "295e0503": "transfreFrom(address,address,uint256)", "295e1421": "getSaleOrderSeller(uint256)", "295e3362": "getCutoffTime(uint256)", +"295ef574": "getSellAmount(address,address,uint256,uint256)", +"295f38ac": "activateMkbPool()", +"295f42a9": "timeUntilNextRebase()", "295f6ce7": "launchGame()", "295fe611": "valueAtAddressLUT(uint256)", "2960109d": "etherReceivedCrowd()", +"29602dc2": "getDerivativeAmountForUserStake(uint256,address)", "296032f2": "pauseContribution(bool)", "29605e77": "transferOperator(address)", +"2960739b": "cancelGuardianRevokation(address,address)", +"2960b5af": "setMigrated(address)", "29610252": "payFee()", "29613086": "payoutRewards()", "2961320c": "retrieveToken(address,address)", +"2961758c": "SetRate(uint256,bool,uint256,bool)", +"2962855c": "GrantTokensClaimed(address,uint128)", +"2962aff7": "getPendingTaxReward()", "29638223": "greet(bytes)", "29638eee": "GetTheWho()", +"2964429b": "getUserDividendsWithdrawable(address)", +"29648205": "sellSZO()", "2964a643": "checkPartner(address)", "2964e4e6": "totalAccounted()", +"2965266f": "updateETHBaddressAndAmount(address,uint256)", +"29652e86": "payouts(uint256)", "2965486a": "safeTokenWithdrawalFromCrowdsale(address,address,uint256)", "2965558f": "getSignerIndex()", +"29655c77": "getBurntAmountByAddress(address)", "2965fa54": "ethers_collected()", +"296644b9": "checkMultiplier(address,address,uint256,uint256,uint256)", +"29667831": "updateMinStakeDays(uint256)", +"2966b0f9": "hasAirdropAmount()", +"2966c024": "changeNum()", "2966d1b9": "unset(address)", "2966e97b": "kscApprove(address,uint256,string)", +"2966ebd9": "calculateClaim(address,uint256)", "29678a53": "playerInDraw()", "29684907": "numerai()", +"29688a80": "i(uint256)", +"29688fd2": "_getMemberRewardOverIntervalHash(bytes32,uint256,uint256,uint256)", "29689a8c": "ergo()", "2968d629": "YLCToken(uint256,string,uint8,string)", "2968e640": "playerTakeOff(uint256)", @@ -23734,7 +43323,9 @@ "2969b226": "batchTransferETHS(address[],uint256[])", "2969d202": "weiBalance()", "296b11b2": "getWeightedRandomArbiter(uint128)", +"296b6177": "setNextConvertTime(uint256,bool)", "296b76bb": "drawPhone()", +"296b9274": "pikapika_SendFlag(string)", "296ba4ca": "LogValue(bytes32)", "296ca48a": "weiLimitPerAddress()", "296cab55": "setPresaleStartTime(uint256)", @@ -23742,57 +43333,103 @@ "296d84d5": "teamAdvisorsReserveTokensAddress()", "296d9009": "calculate_should_return_bix(address[],address,uint256[])", "296dbf31": "sendGameGift2(address,uint256)", +"296de5de": "setPoolInfo(uint32,address,uint256,uint8,uint256,uint256,uint256,uint256,uint8,uint8,uint256,address)", +"296e2f37": "getFullWithdrawalRequest(uint256,uint256)", "296e3661": "removeClaim(uint32,string,string)", "296ed88f": "testFailControllerInsufficientFundsTransferFrom()", +"296f0a0c": "setLiquidityWallet(address)", "296f1ce1": "getHasStartedState()", +"296f3af1": "SetTokensPerWei(uint256)", "296f4000": "delegateApprove(address,uint256,address)", +"296f4120": "updateSupportedPlatformWallets(address[],bool)", "29700653": "fundTransfer()", "297072a1": "cNiceGuyIdx()", "2970c9c6": "TEAM_TOKENS_RESERVED()", +"2970cd42": "rewardLockPercentage()", "29710388": "isProxy(address)", "29712ebf": "accountBalancePublish(string,string,uint256,string,string,uint256)", "29713781": "HumanToken(address,address)", "29713f86": "cheapredeemvillage()", +"297154f6": "gokuAddress()", +"2971db94": "getProxyData(address,address,address,uint256)", +"2971e51d": "returnTokensToOwner()", +"29723511": "transfer(address,bytes)", "29723ade": "setMediumPrice(uint256)", "29724d54": "offerOn(uint256)", +"29729d88": "fullPauser()", "2972b0f0": "isAuthorized(address,uint256)", "29730ea4": "buyIdeas()", +"29731b0e": "totalPie()", "29735a89": "getSubmissionsForCommit(bytes32)", "297398b5": "hourlyProduction()", "2973e372": "isAlphaUpper(bytes1)", "29745306": "tgrSetLive()", "2974a822": "CustodianRegistry(address)", "29750e85": "depositEndTime(address)", +"29754ef1": "exchangeIssuanceModuleInstance()", "2975659d": "determineStatus()", +"297571cd": "viewUsersOfParent(address)", +"29757b26": "setFundToken(uint8,address)", +"29758c66": "mis_usdt_path(uint256)", "2975c690": "SetLimited(address,bool)", "29760657": "setStarDistance(uint8,uint16)", +"29762976": "selectorHash()", +"29764d75": "multiplicador()", +"29765acf": "withdrawToPool(address,address)", +"2976a8c3": "declareWinner(uint256[],uint256,address[],uint256[],uint256[])", +"2976cf56": "regUser(address,address)", +"29777bc6": "endCampaign(bytes32)", +"297781b2": "eightVestingStages()", +"2977aa46": "addressToTrctoken(address,uint256,address)", "2977b1b1": "testAllowanceStartsAtZero()", "29780a4e": "eventTransfer(address,address,uint256)", "29781ec8": "addExemptedAccount(address)", "29784d90": "shortenTde(uint256)", +"29786665": "setRewardParamUpdateRewardPerBlock(uint256)", "297882d5": "createDistrictOmni(uint8,uint8,uint8,uint8)", "2978b826": "assignRevenue(uint256)", +"2978c10e": "claimAndConvertFor2(address[],uint256,uint256,address,address,uint256)", +"297998a0": "pendingBull()", +"2979f738": "unlock_MarketingDevRewards(address)", "297a1677": "getAllHpbNodesCache()", +"297a1c39": "isInICOPhase()", "297a1f56": "carCount()", +"297a4641": "releaseTimestamp(address)", +"297a73d0": "getNegativePower(address)", +"297a8f8a": "useSushiswap(address)", +"297a8ff2": "OnPlay(uint256,address,uint256,uint256,uint256)", "297a9dc4": "WalletFunded(address,uint256)", +"297aeb83": "bonusPercentRoudTwo()", "297b5dce": "private_setminRoll(uint256)", "297c4143": "PUBLIC_START_TIME()", +"297c930b": "hello2(uint256)", "297c9cd9": "regStopTime()", "297cb974": "FlightDelayAccessController(address)", +"297cc3c5": "setBoardroomAddress(address)", "297d1a34": "returnOwnership()", +"297d669c": "lowPersent()", "297d7964": "investors_locked(address)", +"297e859b": "minCeiling()", "297f119d": "transferToAdmin()", "297f407b": "addWinner(address)", "297f9af0": "membersCount()", +"29800cb6": "getGlobalScore()", "29803b21": "join(string,string)", +"29809703": "_x()", "2980a7b6": "specialManagerOn(address)", +"2980c4c0": "bcap()", "2981155e": "weiPerDTH()", +"29811ee5": "getApr(address)", "29816998": "right63(uint256)", "2981cceb": "_mintFromDeposit(address,uint256)", +"2982259b": "setMill(uint256,uint256,uint256,uint256,uint256,uint256[3],bytes32)", "29822734": "Win()", "2982add7": "notContains(address)", +"29830ccc": "withdrawInitialStake(uint256)", +"29831f5d": "honeyToken()", "29832c0f": "hasSigned(bytes32,address)", "2983d752": "advisory()", +"298410e5": "addAsset(address)", "29842d15": "TokenClaimed(address,address,uint256,uint256)", "29846afe": "freezeAccount(address,uint256)", "2984a077": "setFemaleBonus(address[])", @@ -23801,179 +43438,322 @@ "2984f999": "totalLockTokenAllocation()", "298503d9": "createCategory(string,string,uint256)", "298569f0": "SetApplicant(string,uint32,string,int256,string)", +"29857859": "uponMintSgrForSgnHolders(uint256)", +"29857ab2": "Deposit(address,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,bool,uint256,bool,uint256)", +"29859f08": "mapMemberPool_weight(address,address)", "2985aacf": "getSponsorsN(uint256)", +"2985bc94": "getOwnedAssets()", +"2985fa31": "mulScalar(uint256,uint256)", "29864547": "feeIndex()", +"29866a67": "cancelAllPending()", +"2986b273": "changeTokenReward(uint256)", "2986c0e5": "index()", +"2986d8bd": "getWithdrawalForAddress(address,uint256)", +"2986e054": "mod()", "2987ace5": "getCapsuleInfo(uint256)", "2987c8f7": "checkProduct(bytes32)", +"298877d6": "maintLTVE10()", +"29888707": "revokeEditor(address)", "2988e36b": "migrateBalance(address)", +"2988ec91": "sellKatForUsdt(uint256)", "29893dcf": "checkKhFundDepositAddress()", "298994c6": "getCET6InfoById(uint32)", +"2989a4dc": "getAstroPoolLength(uint8)", "2989ac22": "rollDie(address)", +"2989bd1b": "getCityMetaByName(string)", "298a49da": "_0xDogecoin()", "298aa634": "nextContributorToReturn()", "298ac61c": "AgencyWallet(string)", +"298ac75f": "hey(uint256)", +"298ad47d": "safeExecuteDirectOrder(address,uint256,bytes)", "298ad569": "CFOAddress()", +"298b0bcd": "bonusList(uint256)", "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()", +"298ca6cd": "getHashtagPrice(string)", "298d075f": "tokenPoolAddress()", +"298d0b41": "setGov(uint256)", "298d3567": "depositBBO()", "298d5f33": "getPI_edit_1()", +"298db3e3": "intFunc(int256)", "298e4f79": "depositTokens(address,uint256,address)", "298e685a": "getFrozen(address)", +"298ead8b": "GRILL_RATE()", +"298f2ccb": "displaydt()", "298fb0d2": "setEvenDistThresh(uint256)", "298fbf1c": "ClaimBTC(string)", +"298fc92c": "createSalted(bytes32)", "298febed": "towncrierCallback(uint64,uint64,bytes32)", "2990194a": "setICOStage(uint256)", +"29904232": "initiateAccountRecoveryDisablement(address,uint256)", "29913150": "createTicket(address,uint256)", "29917954": "exitPool()", "2991835f": "extract(address,address,uint256)", "2991964c": "GameLoose(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"2992020d": "setPreHash(uint256,uint256)", +"29923838": "setWhitelistedSender(address,bool)", "29928852": "NoteChanged(string)", +"2992897d": "sellStar(uint256)", +"29929713": "newPET(uint256,uint256)", +"2993da12": "initializeReserve(address)", +"2993e8e3": "changeTaxReturnedToHolders(uint256)", "2993ed2d": "cancelSellOrder(address,uint256)", +"29941edd": "proposeRoot(bytes32,bytes32,uint256,uint256,uint256)", +"299452ae": "updateCardsData(uint256[][],uint256[][],uint256)", "299453ca": "cb0f5ef7()", +"299492f3": "prevreward()", "299550d9": "LogBetStart(uint256)", "299599cc": "preICO(address,address,uint256,uint256)", "29965a1d": "setInterfaceImplementer(address,bytes32,address)", +"29966e00": "GetAllAthletes()", +"299690d2": "StartAtChanged(uint256)", +"2996ae57": "wrapBscAndStakeInVault(uint256,bool)", +"2996d591": "writeStuff(string)", "2996f972": "tokenBurner()", +"29975b43": "addWhitelistedAddress(address)", "29976934": "ModifyPublicKeySize(uint8)", +"2997e86b": "nullifiers(bytes32)", "2997ec89": "getStudentIDText(uint32)", +"2997f119": "_permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", "29981db4": "setAdvocate(address,address)", +"29984915": "setEthBalance(uint256,uint256)", "2998dff2": "SuperUltraPowerCoin()", +"2998ed7c": "tokenManager1()", "29991a5b": "checkMilestones(address[],uint256[])", "29995f4c": "MoonStone()", +"29998d4b": "claimedBy(address)", +"299999b4": "place_buy_order(uint16,string,string,string)", "2999c76b": "initNameSymbol(string,string)", "299a017c": "getCurrentMilestone()", +"299a37bc": "getDelegations()", "299a7bcc": "setOwner(address,address)", "299af64b": "setContract(address,bytes32,bool)", +"299b1655": "pausedProvider()", "299b861e": "changeUnitsPerEth(uint256)", +"299bb0e0": "doTokenOut(address,uint256)", "299c55f7": "TOKEN_BOUNTY()", +"299c66da": "globalApy()", +"299c8a47": "TokenApprove(address,address,uint256)", "299cc524": "updateEarlyIncome(address,uint256)", "299cdc9d": "changeEtherCost(uint256)", "299df3f1": "WithdrawDividendsAndCoupons()", +"299e0f72": "approve_398(address,uint256)", +"299e337a": "potential(uint256,uint256,uint256,uint256)", "299e6b07": "Wallet(address)", "299e7318": "resolveVoting()", "299e7abb": "calculateWinners(uint32)", "299e952f": "buyKeys(address)", +"299eaafd": "UniverseCreated(address,address,uint256[],bool)", "299ed37a": "emergencyCall()", "299ee814": "OraclizeBet()", "299f5f1a": "cumAlienDeposits()", "299f7200": "burnOwnership(address)", +"299f7fc2": "setFeeToken(address,uint128,bool)", +"299f8164": "jockeyHair(uint256)", +"299fbfab": "uniBalanceOf(address)", "299ffcbc": "latestReleaseTime()", "29a0097c": "internalSend(address,uint256)", "29a00e7c": "calculatePurchaseReturn(uint256,uint256,uint32,uint256)", "29a03d8d": "distributionReward(uint256,string,bytes32)", "29a065bd": "getLOg(uint256)", +"29a0ef34": "usdtAvailable(address)", +"29a1259d": "minterTokenRole()", +"29a17868": "enableReserveAsCollateral(address,uint256,uint256)", "29a19987": "teamVesting4Years()", "29a2629c": "showRoundNum()", +"29a26346": "setOpenHarvest(bool)", +"29a276aa": "RegionNewBid(uint16,address,uint256,uint256)", "29a2aa2d": "thankYou(address)", "29a2c27b": "finishLastCount()", "29a2d339": "chknodenumber(uint256)", "29a36e0a": "addScheduleCall(address,uint256,uint256,uint256,uint256)", +"29a38550": "query2noactive(bytes32)", "29a3fab9": "finilize()", "29a40403": "submitCounterStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"29a4303d": "pawn()", +"29a43608": "tBalance(address)", +"29a4e207": "priceForSuccessfulSale()", +"29a50467": "addEarlyTickets(uint256,uint256,address,uint256,uint256)", "29a52db6": "getCurrentUserLocalTokenBalance()", "29a5c0f4": "WithdrawAllETH()", +"29a5cfd6": "calculateWithdrawFee(address,uint256)", "29a5dd7c": "refund_bix(address,uint256)", "29a6344a": "removeSupporter(address)", +"29a63a65": "arbonelist(uint256)", "29a64dd1": "startCrowdsalePhase2Date()", "29a67202": "UHUGIN()", +"29a6b51e": "DistributionError(address,uint256)", "29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", "29a742aa": "HappyLifeCoin()", +"29a7b69b": "execute(address,address,uint256,uint256,uint256,bytes,bytes)", "29a7d5c1": "joinAirdrop()", "29a81222": "getOwnerName(uint8)", "29a833ee": "getSumData(bytes32)", "29a86dde": "getGameWin(uint256)", +"29a8b99e": "getMemberData(address)", "29a8cda5": "PolarisToken(address)", +"29a8f4f8": "chargeInterest(uint256,uint256,uint256)", "29a8fcd2": "Proxy(address,address,uint256,uint256,uint256)", +"29a903ec": "priceUSDRedeem(string)", "29a9c91d": "setCurrentPeriod(uint256)", +"29a9ec40": "mergeDividends(address)", +"29aa0489": "resetDay()", "29aa1408": "getTotalFlips()", +"29aa6295": "safeBunnyTransfer(address)", "29aa7ec5": "removeSignature(string)", "29aa9cbe": "min(int256,int256)", "29aab068": "Pen(address)", "29aacd10": "InitalPos()", +"29aae6e1": "TwoPurplePyramids(address,uint256)", "29ab0ca7": "ownerSetResolverPercentage(uint256)", +"29aba66b": "getConsumableUsedAmount()", "29abdeed": "addCoinBalance(address,uint256)", +"29ac4b59": "getPaintedPixelsCountByAddress(address,uint32)", +"29ac89aa": "Map(string)", +"29acb5b6": "LogTokensContractSet(address,address,address)", +"29ad0f36": "compoundFlashLoanTakerAddress()", "29ad27d7": "maxDays()", +"29ad2fb2": "collateralsLength()", "29ad4a34": "_transferMoneyMother(uint32,uint256)", +"29ae0b7f": "tickets(string)", "29ae4c70": "isSenderEmergencyMultisig()", +"29ae6943": "finishAll()", +"29ae754a": "setPolicyAddress(address)", +"29ae8114": "file(bytes32,uint256)", "29aebf05": "initialMoySupply()", "29aec173": "levelUp(uint256,uint16,uint16,uint16,uint16,uint16,uint16)", +"29aed04f": "setupTokenSpender(address)", "29b03cfd": "getBid(bytes32,uint256)", "29b0de1e": "unsetManager(address)", "29b0ffea": "numberOfPreviousEntries()", +"29b10ea6": "decreaseOwnerAllowance(uint256)", +"29b16748": "transferWithoutData(address,uint256)", "29b1ce4d": "addWhitelistedUserAddr(address)", "29b1e640": "claimReporterReward(address)", +"29b1f023": "userToNumItems(address)", "29b20bb6": "numCharactersXType(uint8)", "29b26bc1": "clearTradePreSignedHashing(address,address,bytes32,address,uint256,int256,string)", +"29b2d040": "sysFee()", "29b43a68": "createDepositAddressFor(address)", +"29b46001": "setDailyPrizePoolCycle(uint256)", "29b49825": "ADVISOR_POOL_INIT()", "29b4d111": "price_start()", +"29b57c69": "walletCount()", +"29b59552": "oldTransferManager()", "29b65a2e": "POCY()", "29b6cdd5": "Alphacoin()", +"29b6d531": "swapERC20Token(uint256)", "29b737ae": "LerToken()", +"29b75b74": "payMerchant(address,uint256)", +"29b83c2e": "timePooled(address)", "29b84c9c": "transferExchange(uint256)", +"29b86cec": "getBtcxTmin()", +"29b8986f": "_shiftValue(uint256)", +"29b89a09": "crossMint(address,address,uint256,string)", "29b8caff": "totalInvestors()", "29b8dab4": "currentBidNumber()", +"29b928f5": "getAmountProposedTokens(address)", "29b981bb": "operationAdress()", "29b9f367": "addressDataProviders()", "29ba1cb4": "setPrivelegedWallet(address,address)", "29ba2e07": "TokenPoolExhausting(uint256)", +"29ba3177": "addressburn(address,uint256)", "29ba725a": "setTransformTarget_miner(address,uint256)", "29ba7bb2": "initialOwner()", "29ba8780": "executeTransaction(uint256,address)", "29ba8d03": "getMigrateMarketInFromSiblingCalled()", +"29bae56c": "Revoke(address,bytes)", +"29bafa1b": "isPreSaleOver()", +"29bb2782": "_requireMinimumBid(uint256)", "29bb4bf2": "showCollectorsBalances()", +"29bbd5b8": "userClaimProfitAndSendToAddresses(uint64,address[],uint256[])", "29bc3b85": "isAccepted(uint256)", "29bc5d0f": "finalyzeContract()", "29bcb186": "transferToContributor(address,uint256)", "29bd028a": "startIcoPreICO2ndRound()", "29bd58b4": "revokeToken(address,uint256)", +"29bdb24d": "viewTotalLost(uint256)", +"29bdb5d1": "companyLocation()", "29bed3bf": "EthereumRoulette()", "29bee342": "Get_Last_Value()", +"29bef219": "registerAccount(address,string,address,address[],uint256,uint256)", +"29bf0a25": "vSwapPairs(address,address,uint256)", +"29bf2958": "mintTokenPreSale(address,uint256)", +"29bf3547": "fundingRatePredictionOf(address)", "29bf56c3": "setUnitAttackIncreases(address,address,uint256,uint256,bool)", "29bf960a": "getResultTable(uint256,uint256)", +"29c07022": "redeemAndWithdrawItem(bytes32)", "29c08ba2": "payPremium()", +"29c0d4fc": "getlotteryState()", "29c10e37": "filter(string)", "29c19304": "setInitialVaribles(uint256,uint256,address,address,address)", +"29c19d84": "AddParticipant(address,string,uint8,string,string,bytes32)", "29c1c61e": "modifyPowPrice(uint256,uint256)", "29c1ee0d": "TOKENS_address()", +"29c1f981": "withdrawLiquidityTokens(uint256)", +"29c234df": "getPeriodStart()", +"29c257a2": "updateGlobalYield()", "29c2e15d": "_calculateInterest(uint256)", "29c3340f": "dividends_share()", +"29c357a5": "DistributeDone(uint256)", "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)", +"29c67e7f": "getSetterRole()", +"29c68dc1": "toggleActive()", +"29c6fd7f": "yourStakedHype_Bet(address)", +"29c70400": "LAST_LEVEL()", "29c71c1b": "modifyFeeShare(uint256)", "29c78e0b": "Ethash()", "29c886bf": "TokenCampaign(address,address,address,address,address,address,address,address,address,address,address)", +"29c8c806": "emergencySpend()", "29c8d3ce": "activateTokens(uint256)", "29c8dae7": "create21PizzasTokens()", "29c90b63": "onTapPollFinish(bool,uint256)", "29c924cf": "setFundingGoal(uint256,bool)", +"29c95ac0": "transformsActive()", +"29c98068": "addressV5(uint256)", +"29c98718": "editStatus(uint256,string)", +"29c9c0a7": "reward_level(uint256,address)", +"29ca3569": "isESToken()", "29ca9dca": "updateRelay(address)", "29caf0c9": "getStringValueByKey(string,string)", +"29cb0090": "addPool(address,uint256,uint256,uint256,uint256)", +"29cb5097": "BetResolved(uint256,uint8)", +"29cb5aa4": "rayToWad(uint256)", +"29cb8b69": "isCategorySupported(string)", "29cb924d": "getCurrentTime()", "29cbdc86": "buyin(address,uint256)", +"29cc6d6f": "_king()", +"29cc9edc": "OwnershipReplaced(address,address)", "29cca3ae": "getYouTubemasterReq()", "29ccb4df": "getCompte_11()", +"29ccf8ea": "countByStatus()", "29cd00f7": "approve(address,string)", "29cd5777": "_tryEraseSingleNode(bytes32)", "29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", "29cd7767": "_NT()", "29cd92cf": "deleteHelper(bytes32)", +"29cd941b": "setXEth(address)", "29cdda23": "newVersion()", +"29cde105": "getMinDeposit(address)", "29ce0939": "Timeout(uint256,uint256)", +"29ce1e96": "usersActiveCL(address,uint8)", "29ce1ec5": "addFactory(address)", "29ce3b69": "increaseApprovalAllArgs(address,uint256,address)", "29ce7fc1": "getAllRightHand()", +"29ce8eed": "swapERC20Token0ForERC20Token2(uint256)", +"29ced7a0": "daiJoinFab()", "29cee59e": "finishCrowd()", +"29cf76a7": "setWithdrawLimit(uint256,address[],bytes[],uint256[])", +"29cf8b0b": "stopMyRequest(address)", "29cf90f3": "sellUnicorn(uint256,uint256,uint256)", "29d00d64": "ReloadKeys(uint256,uint256)", "29d017b5": "TestWithConstructor(address,uint256[])", @@ -23981,20 +43761,40 @@ "29d0807b": "addone(uint256,uint256)", "29d10b6e": "addSupervisor(address)", "29d11b32": "btycbalanceOf(address)", +"29d16ee8": "lastDeposit(address)", +"29d17fce": "TWAP8Hour()", +"29d1b341": "claimingTokenAdd(address,uint256,bool,uint256,uint256)", +"29d245aa": "_lpToken()", "29d24cbe": "TOKEN_SUPPLY_SEED_LIMIT()", "29d287ec": "isFinishDateReached()", "29d28aad": "Broker(address)", "29d368e3": "curMax()", +"29d37f96": "gameProfited(uint256)", +"29d4232d": "getAccountCanVote(address)", "29d428ca": "requiredTokenAmount()", +"29d4e3ad": "External(string,string)", +"29d4f4c3": "Games(uint256)", "29d50682": "setupPlotOwnership(uint256,int256[],int256[])", +"29d5277c": "queryRate(address,address)", "29d56381": "balance_factor(uint256)", "29d592bf": "arconaToken()", +"29d5a303": "ProposalCanceledByCreatorAtIndex(uint256)", +"29d62f01": "oneQuarterBlock()", +"29d63040": "totalPassiveIncomeOf(address)", "29d6ec95": "cancelBuy(uint256,uint256,uint256,uint256)", "29d6f899": "BetOnBlue()", "29d729ac": "ticket_addresses(uint256)", "29d77446": "WhitelistSet(address)", +"29d79588": "getUserInfo(uint8,address)", +"29d7d95f": "withdrawPayment(address,address,address,uint256,uint256,bytes,bytes)", +"29d80f86": "smokePerBlock()", "29d87fbf": "setSeasonal()", +"29d8af96": "setDepositLockTime(uint256)", +"29d8b989": "ownedVipers()", +"29d8ca2f": "updateAnAssetQuantity(string,string,uint8)", "29d91164": "delWhiteList(address,address)", +"29d96eb2": "processInvestmentDay(uint256,uint256,uint256)", +"29d97b61": "HOUR1()", "29d98a7b": "change_individual_cap(uint256)", "29da2fda": "UpdateToken()", "29da3b4d": "removeBorrowingItem(uint256)", @@ -24006,35 +43806,59 @@ "29db1a4f": "burnForInsurance(uint256)", "29db3256": "getRandomBox(string)", "29db8ec4": "getAccountSpendingRemaining(address)", +"29dbac1b": "addEthLiquidityLGETEST222()", "29dbdd77": "updateDetails(bytes32)", +"29dc4928": "setInsured(address)", "29dcb0cf": "deadline()", "29dd07eb": "KarlisToken()", "29dd0b86": "lastSaleDate()", "29dd0d7d": "requestBlokTokenOwnershipTransfer(address)", +"29dd2ee9": "isSignerAuthorized(address,address)", +"29dd3c9c": "getPayoutForType(uint256,uint256)", "29dd8b26": "EGTToken()", "29de3653": "register(uint256,uint256,bytes,bytes)", +"29de3798": "timeStampForEpoch(uint256)", "29de91db": "setMsg(address,uint256)", +"29dea3a1": "ratifiedMintThreshold()", "29df8972": "Nilometer()", "29dfdded": "addNewDonkey(address)", +"29e09a26": "isWinningDriver(uint256,address)", +"29e0c347": "maiorLance()", "29e10c13": "getAd(uint256,uint256)", "29e1ddb8": "freeLottoInfo()", "29e206bd": "forceDivestAll(bool)", "29e21cbd": "UIWish(address)", +"29e24cb7": "getAmount1ForLiquidity(uint160,uint160,uint128)", +"29e2675f": "convertHand(uint256)", "29e286c6": "boughtWithoutWhitelist()", "29e2b478": "addAddressToWhitelist(address,address,uint256)", "29e30910": "testThrowCreateExistingNonce()", +"29e31644": "cancelDeal()", "29e341f1": "adminAddRole(uint256,address,uint256)", "29e3ae3d": "virtualTradesSummedCount(bytes32)", "29e46d3f": "openingTimePeriodOne()", +"29e4a4ec": "giveEth(address)", +"29e4bc4c": "createPairHFLYROT()", +"29e555a9": "setusdcddt()", +"29e58fe7": "allocatedAddresses(uint256)", +"29e59fdd": "refundable(address,address,uint256)", +"29e5bf6c": "_getLoanPositions(address,uint256,bool,bool)", "29e5dab7": "BytomGoldToken()", "29e614ee": "addDrop()", "29e63cd7": "addImmutableContract(string,address)", "29e67fce": "Rate2()", +"29e68778": "disenable()", +"29e689de": "claimComp(address[],bool,bool)", +"29e697f3": "removeAccessList()", "29e6b5be": "VPTToken()", "29e6f3f8": "setPI_edit_6(string)", +"29e77b5d": "bidsOf(address)", "29e80a80": "_iWantXKeys(uint256)", +"29e81521": "rooms(address)", "29e81c79": "isJobCancel(address,bytes)", "29e846df": "dividends(address,uint8)", +"29e85c1f": "setEthUsdcUniswapOracle(address)", +"29e8a990": "pendingYCT(uint256,address)", "29e8bc0a": "getShareToken(uint8)", "29e94503": "VersionedBlob()", "29e94ef6": "getProjectedJackpot()", @@ -24042,14 +43866,18 @@ "29e9a3b9": "tokensReceived(address,address,uint256)", "29e9afc9": "EnterCode(uint32)", "29ea110c": "maxCapInCents()", +"29ea8891": "approveAppoinment(uint256)", "29eae053": "setService(address,address)", "29eae264": "EosChain()", "29eae797": "oldController()", +"29eb0d95": "logAudaxTxDetails(string,uint256)", "29ec09cc": "GetConfirmRound(address,uint8)", "29ecd1e0": "PriceChanged(string,uint256)", "29ed0f06": "BitcoinLegendToken()", "29ed1297": "setItem(address,address,string,string,string,bool)", +"29ed39b1": "claimKeys(uint256)", "29ed82a1": "getDeflator()", +"29ed9544": "setMinDividendEtherAmount(uint256)", "29ed9a6a": "depositERC721(address,uint256,address)", "29edd574": "buyCopper(uint256,uint256,uint8,bytes32,bytes32)", "29edfbb8": "GetApplicant(address)", @@ -24058,23 +43886,46 @@ "29ef1919": "discountPercent()", "29ef5552": "setupZoomLvl(uint8,int256,int256,uint256)", "29ef56b1": "getAskOrderBookStats()", +"29ef8815": "SOFT_LOCKPERIOD_DAYS()", +"29efbfdb": "eggToWbnbRoute(uint256)", +"29f0914d": "gameGiftInfoList(address)", "29f0a422": "MakeTransfer(address,uint256)", "29f11c8d": "edit(uint256,string,string)", "29f1bff4": "withdrawFromChildDAO(uint256)", +"29f1d0a7": "isOwnerOf(address,string)", "29f20618": "createLineItem(string,uint256,uint256,uint256,uint256[])", "29f27577": "InvestorList(uint256)", +"29f2b5bd": "encodeId(uint256,uint256)", +"29f31730": "setMetadataStore(address)", +"29f317cd": "icoProceeding(address)", "29f321e4": "buy_Vault(uint256,bytes8)", +"29f32ed4": "balanceOfPhantom(address)", +"29f34ac1": "pushWhitelist(address[],address[])", +"29f35155": "ieoCoinContract()", "29f3533c": "setPriceStalePeriod(uint256)", +"29f3da78": "setSinglePrice(uint256,uint256)", "29f4071b": "RegistrationStatusChanged(address,bool,uint256)", +"29f4136b": "init_staking(address,uint256,uint256,uint256)", "29f46429": "WIE()", "29f5fb9c": "icoTokenSales()", "29f62f70": "logSendEvent()", "29f69427": "o2Address()", +"29f69c05": "burn(uint256,address,uint256[])", +"29f6cac6": "ChangeTokenEvent(address,address)", "29f6d9c3": "clearTokenApproval(address,uint256,bool)", +"29f72808": "allCardsInfo()", "29f75dc2": "samePooling()", "29f799cb": "Studio()", "29f7bd2f": "transferToContributionPool(uint256)", +"29f7fc9e": "KYBER_ETH_ADDRESS()", +"29f829ec": "BAS()", +"29f8b22a": "SetDelayLockValue(address,uint256,uint256)", "29f958dc": "publish(uint16,uint16,bytes4,string,bytes3)", +"29f98d50": "victoryMessages(address)", +"29f99b9f": "getTokenId(address,uint256)", +"29f9b17b": "getCumulativeNotional()", +"29fa55c6": "EventCg(address)", +"29fa5d3d": "setCoolNumber(uint256)", "29fa7266": "setSuperOwner(address)", "29fb598e": "bountyTransfer(address,uint256)", "29fc550f": "getChallengesForUser(address)", @@ -24083,91 +43934,173 @@ "29fcfeb0": "AUCTION_STARTED()", "29fd06cf": "Qripplex()", "29fd50eb": "libAddress()", +"29fd6699": "TokensWallet()", "29fd8201": "setReputationAddress(address)", +"29fde7bd": "REI12()", "29fe6199": "dailyPercent()", +"29fe76cc": "IssuanceFinished()", +"29fe9095": "addToMyTenders(address)", "29fec030": "MAX_DAILY_TOKEN_SOLO_SPEND()", "29ff42e1": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16,bytes32,bytes32)", "29ff4f53": "setReleaseAgent(address)", "29ff7d04": "revertReservation(address,address)", +"29ffab3b": "authorizedDeploy(address)", +"2a00186e": "profiter()", +"2a004bb2": "changePrimaryWallet(address)", "2a004bd0": "deleteChannel(address,address,address,address,address)", +"2a00551e": "uniLiquidityPercentageAllocation()", +"2a009c28": "claimArtem(address,address[])", +"2a00a472": "getRequestData(bytes32)", "2a00d284": "rewardReferrer(address,address,uint256,uint256)", +"2a00fbbd": "settleEther()", "2a00ff6f": "endianConvert256bit(uint256)", "2a013925": "setFundingCap(uint256)", +"2a01595c": "Donated(address,uint256)", "2a0213f6": "FeeOnAllocation(uint256,uint256)", "2a022f22": "ALLOC_SALE_GENERAL_2()", +"2a02ab55": "getLengthOfClientRecords()", +"2a034a79": "disETY(address[],uint256)", "2a035b6c": "endGame(address)", +"2a036609": "createSetNewAddressProposal(uint256,address)", "2a03b48b": "Campaign(uint256,uint256,uint256,address,address)", +"2a03fd7e": "getTradeExpiry(uint256)", "2a03ffa5": "CryptoGOToken()", "2a0401f0": "confirmOrder(bytes32,bytes32)", "2a040c16": "TemboCoin()", +"2a043392": "rankCost_(uint256)", +"2a04c84c": "RejectedPaymentFromBlacklistedAddr(address,address,uint256)", "2a04e88a": "ethRateInUsdCents()", +"2a05d50b": "ironBankOutstandingDebtStored()", +"2a0722a6": "MINIMAL_PROVIDE_AMOUNT()", "2a0763ce": "endGameConflict(uint8,uint256,uint256,int256,uint256,bytes32,bytes32)", +"2a07a0bf": "pausing()", "2a095c14": "getCompte_3()", "2a095fbe": "unlinkEID(bytes,bytes,address)", "2a096397": "myDeposit()", +"2a09ce13": "gameOverEvent(uint256,address,uint256,uint256)", +"2a09f3f5": "aaveConnect()", "2a0a3b53": "NewText(string,string)", +"2a0a4ed5": "getClaimDeleter()", "2a0a5f50": "BidCanceled(uint256,uint256)", +"2a0ab1dd": "priceFeedKeys(uint256)", "2a0acc6a": "ADMIN()", "2a0b2617": "getAccountDetails(uint256)", +"2a0b3c52": "normalNodes(address)", +"2a0b76a9": "percentWin()", "2a0b9cb5": "check_authorization(address,address)", +"2a0ba49c": "ContractorRepo()", "2a0bb7ea": "mulIsSafe(uint256,uint256)", "2a0bba0e": "ImperoCoin()", +"2a0c0463": "distributeVAIMinterVenus(address,bool)", +"2a0c2f0a": "pendingwhale(uint256,address)", "2a0c5221": "battle(uint256,uint256)", +"2a0ccc88": "SFI_address()", "2a0d06ec": "getTotalPctx10()", "2a0d479f": "TutorialToken()", "2a0d79ef": "totalSupply(bytes)", +"2a0d84ff": "pledgeBalance()", +"2a0daeea": "serialNumber()", "2a0deab4": "getDataAndOwner3(uint256,uint256,uint256,uint256)", +"2a0e62fd": "pendingReward(uint256,address,uint256)", "2a0f189a": "setCallPtr(uint256)", "2a0f3c35": "rentableSetup(uint256,uint256,uint256)", +"2a0fbc53": "_treasure()", +"2a0fcc82": "transferToUplineRuby(address,address,address,address,address)", "2a104d8d": "withdrawLoan(uint256)", "2a10abc3": "CrypteloERC20Address()", +"2a10fd23": "editstakingprogram(uint256,uint256,uint256,uint256)", "2a10ff23": "product2()", +"2a110e83": "log(bool,bool)", "2a11b950": "contractEvents(uint256)", "2a11ced0": "holders(uint256)", +"2a120231": "artemSpeeds(address)", +"2a12408e": "systemInfo()", +"2a127e4c": "addUserIntraBorrowAmount(address,uint256)", +"2a12a623": "Donation()", "2a12b54d": "_transferToLock(address,uint256,uint256)", +"2a13667b": "currentOnChainOraclePrice(address)", "2a139f75": "PLATprice()", "2a14314f": "satoeLocked()", "2a143af4": "_calculatePercent(uint256)", +"2a1477e8": "lastMintTokenTime()", +"2a149d68": "updatePoolRouter(address)", +"2a14a9da": "holdersIndex(uint256)", "2a14b80a": "partition()", "2a151090": "canPerform(address,address,bytes32,uint256[])", +"2a15a962": "moveToAccept(uint256,uint256)", +"2a165f00": "Maximus()", +"2a167eb8": "pushRewards()", "2a16a9ee": "emitCategorySet(uint256,uint256,bytes32)", "2a16cca4": "isApproved(address,uint256)", "2a1727f8": "checkExistAddress(address)", "2a174710": "getAttackForCost(uint32)", +"2a176583": "tokendetails(address)", "2a179054": "setTokenFeeTake(address,uint256)", +"2a17cf12": "bsgs_build_path(uint256)", "2a17e397": "multiTransferTightlyPacked(bytes32[])", "2a1828fb": "attController()", +"2a1832fa": "cha(address)", +"2a1833d1": "ViewTotalBalance(address)", +"2a183e17": "BraveReferrer(address,address,uint8)", "2a18ca16": "currentSaleLimit()", +"2a18fa69": "referralDividendOf(address,address)", +"2a191d64": "nugget()", "2a19642c": "setSpawnProxy(uint32,address)", "2a1a3303": "getNumberOfFlips(address)", +"2a1a338d": "BuyBackTotal()", "2a1a8d4a": "updateIcoStatus()", +"2a1a95ea": "createSetting(bytes32,uint256,uint256,uint256)", +"2a1aab2a": "setUniswapPathsToWeth(address,address[])", "2a1ab57e": "register(address[],uint256[])", +"2a1afcd9": "storedData()", "2a1bbc34": "generate()", "2a1be747": "rateFirstWeekEnd()", +"2a1c054e": "tradersDistributed(address,address)", +"2a1c2b85": "daitoddt(uint256,uint256,address)", "2a1c70e7": "Indemnisation_1()", "2a1cdf7a": "enableReturnContribution()", +"2a1d2b3c": "Ash()", "2a1e37de": "armyCountBattlesLost(uint256)", +"2a1e76cc": "insertID()", "2a1eafd9": "targetSupply()", "2a1eb7cc": "MintToOwner(uint256)", "2a1ef0ca": "teamAllocation(address)", "2a1f63f8": "MiningRewardSent(address,address,uint256)", +"2a1fac16": "revokeVoter(address)", "2a1fc45d": "decreaseArrayOfBeneficiariesBalances(address[],uint256[])", +"2a1fd42c": "getByte(uint256)", +"2a2104b5": "succeedIfCurrentWizardFingerprintMatchesProvidedWizardFingerprint(uint256,bytes32,bool)", "2a21566f": "grantPositionOwnership(bytes32,address,address)", "2a21a3af": "isNormalUser(address)", "2a22196d": "getVoucherDetails(uint256,uint256)", +"2a2229b6": "updateUnpoolWaitingPeriod(uint256)", "2a2235f2": "winAmount0()", +"2a2238ff": "reportEvent(string)", +"2a225f53": "updateWearableProb(uint32,uint256,uint256)", "2a226857": "AlbaritTokenV4(address,string,string,uint256,uint256)", +"2a228a9d": "betRedCoin(uint256)", "2a228fc2": "processWithdrawals()", +"2a22fe41": "MAX_PRIMES_PER_SERIES()", "2a23475f": "blockCrowdsale(address)", "2a23ac02": "eBitcoincash()", +"2a23cf20": "setUserNumber(uint256)", +"2a240f2c": "issue(address[2],uint256,uint256[8],bool[2])", "2a24b8e1": "instruct_4()", "2a24f46c": "auctionEnd()", "2a2514a2": "AceFundToken()", "2a258842": "ETHOS()", +"2a25eecb": "yourB2UBalance(address)", "2a2604dd": "bidRefund(uint256,uint256)", +"2a263513": "setKpopioContractAddress(address)", +"2a267e19": "setRef(address,address)", +"2a26dae4": "DoUpgradeLv()", "2a272974": "tokensIssuedForBonusRangeTwo()", +"2a27502c": "Value(uint256)", +"2a2767e5": "getImplementationType()", +"2a27a25e": "itemHandler(address)", "2a27fd4a": "forGenesis()", "2a286a19": "rewardSplitPercent()", +"2a286c07": "getSdrTotal()", "2a286eda": "productAccounts(uint256)", "2a2879d3": "createPromoCar(address,string,uint256)", "2a28822e": "create(address,int256,address)", @@ -24177,15 +44110,23 @@ "2a29312a": "recoverAddressFromSignedMessage(bytes,bytes)", "2a295c1f": "ChainMonstersCore()", "2a29700f": "setForceExecuteOfContracts(bool)", +"2a29936c": "foundationRatio()", "2a2998a0": "houseFeeVal()", "2a29c8d9": "getLoansLengthByClient()", "2a29d109": "rewardController(address)", "2a2a62f6": "removePrivelegedWallet(address)", "2a2a6434": "register(bytes32,bytes32,address,bytes32,bytes32,string)", +"2a2a7adb": "ovmREVERT(bytes)", "2a2acdce": "getMyFrontEndTokens()", "2a2ad4df": "ExpiringMembership()", "2a2b48f5": "largestRetro()", +"2a2b8c4e": "getTreasuryAvailableReward(address)", "2a2bb728": "ElephantsPaymentCoin()", +"2a2bf9a4": "buyAdvert(string)", +"2a2c8136": "user_details2(uint256)", +"2a2cef0a": "getTokenPriceUSD(address)", +"2a2cfeae": "liquidityGenerationEndTimestamp()", +"2a2d0c47": "idToAddress(uint256)", "2a2d78b0": "DeDeContract(address,uint256)", "2a2dd486": "_computeAura(uint256,uint256)", "2a2e00be": "MintingClosed(bool)", @@ -24193,31 +44134,54 @@ "2a2e2f0c": "convertInternal(address,address,uint256,uint256)", "2a2e6358": "setMinRecharge(uint256)", "2a2e6ee6": "countCrowdsalesForUser(address)", +"2a2ea50f": "managerMint(address,uint256,uint256)", "2a2eddde": "setVesting(address,uint256,uint256,uint256,uint256)", +"2a2eed31": "callClaimLPTokens()", +"2a2ef404": "UNISWAP_DAI_ETH()", "2a2f366c": "getPlayer(uint8[176],uint8,uint8)", +"2a2f3a6f": "AirDrop(address,uint256)", "2a2f7bda": "daysRemaining()", +"2a2fab22": "collectInterest()", "2a2fbd4b": "min_required_amount()", "2a2fe110": "isCosignerSet()", "2a304900": "getHunting(uint256,uint256)", "2a305613": "transfer(uint152,uint152,uint256)", +"2a305a50": "_ensureCanTransfer(address,uint256)", "2a308b3a": "transfer(address,address,uint64)", "2a30b0b8": "addARA(address)", "2a316353": "JMTOKEN(uint256,string,string)", +"2a316442": "BuyTicket(address,uint256)", +"2a3174f4": "getNoticePeriod()", +"2a319baa": "setMaxNumOfValidators(uint256)", "2a31c5b8": "_addBonusOfTop(address,uint256)", +"2a32166a": "tokenFromDemass(uint256)", +"2a324027": "tradingFeePercent()", +"2a329683": "buyUnfreezePeriodSeconds()", "2a332b2a": "setLotteryAddress(address)", +"2a3355bf": "withdrawOrai()", "2a335c17": "getTotalSalaryBunny(uint32)", "2a337d30": "submitMatch(bytes32,bytes32)", "2a3386e5": "covmanagerAddress()", +"2a33bf96": "unlockOwnership(bool)", +"2a33d8a8": "assignCountryEvent(address,uint256)", "2a33fec6": "proceed()", +"2a340dcf": "get_serviceChargeRate()", +"2a343709": "depositPool()", +"2a3519ac": "getUriHash(string)", "2a3520e1": "addDataInstance()", +"2a354655": "yy()", "2a3590b9": "mimetype()", "2a35d251": "_move(uint256,address,address)", "2a3602b2": "DayLimitMock(uint256)", +"2a366b71": "concatTokenAddresses(address,address)", "2a369647": "getEndpointParams(address,bytes32,int256)", +"2a36b028": "inWallet()", "2a36b7ac": "TotalRate()", "2a37d540": "CrowdToken()", "2a37eaea": "buyWithHash(address,uint256,uint256,bytes32)", +"2a386660": "developerBalance_()", "2a387bdd": "bsx(uint256,string,string)", +"2a387d5d": "openStream(address,uint256,uint256)", "2a388b1f": "cancelDeposit(bytes32,uint256,uint256)", "2a389fdc": "Pray4Prey(uint128[],uint8[])", "2a38d484": "getNumEntries(uint256)", @@ -24225,57 +44189,120 @@ "2a396734": "burnPXLRewardPXL(address,uint256,address,uint256)", "2a39a069": "minInvestmentInWei()", "2a39c1ea": "officialUrl()", +"2a39ccc8": "LogInitialized()", +"2a39ef07": "itemsDelete(uint256)", "2a3a236f": "setMasterContract(address)", +"2a3ad39f": "_processPeriod()", +"2a3ae616": "bettingStatus()", "2a3b1228": "RobotnikToken(address)", "2a3c2c56": "getConversionFeeAmount(uint256)", +"2a3c38e1": "changepprice(uint256,uint256)", "2a3d05cc": "getSignedIndex()", +"2a3d1775": "_validchecker()", "2a3d30c2": "coinValue()", +"2a3d5cd8": "farmOf(address)", "2a3dc703": "updateRewardLedger(address,uint256,uint256)", +"2a3de206": "AccountFrozen(address,address)", "2a3de92f": "getCurrentBonusPct()", "2a3e6ba1": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE5()", "2a3ec4ff": "takeICOInvestmentsEtherCommission(address,address)", +"2a3ed595": "getLockdown()", "2a3ef566": "EscapeCalled(uint256)", +"2a3f13fb": "getStakeholderLevel(uint256,address)", +"2a3f8fdc": "OnRewardWeeklyFailed(address,uint32,uint32)", +"2a3fa575": "bumpGas(bytes32,uint256)", +"2a3fd299": "systemETH()", +"2a403a2b": "getTimeLockInfo(address)", "2a410068": "updateShares()", +"2a412c0f": "totalRatingProgressPerSec()", "2a41360d": "processOfflinePurchase(address,uint256,int256)", +"2a41582f": "mintSecurityAssetToken(address,uint256,uint256)", "2a41d1ff": "ArrAccountIsNotFrozen(uint256)", +"2a422570": "startLockUp(uint256)", +"2a423be8": "withdrawShare(uint256,uint256)", +"2a426896": "kill_deadline()", +"2a42885d": "closeGame(uint256,uint8)", "2a42e85f": "MiBoodleToken(uint256,uint256,uint256,uint256,uint256)", +"2a432c8d": "liquidationCToken()", "2a437269": "RCCCToken()", "2a43b847": "TEACHToken()", +"2a43d645": "mintSynth(string,uint256)", "2a43db3a": "Creature()", +"2a441f05": "OTC_ADDRESS()", +"2a44801e": "contractCreated(int256,int256,uint256,uint256,int256,address,uint256,int256,string,uint256)", +"2a44ecc1": "NUXToken()", +"2a459cd8": "timeTravel(int256)", "2a45a39a": "Post(address)", +"2a464893": "updateMinSupply(uint256)", "2a4654ab": "getAnimecard(uint256)", "2a46d079": "MAT_UNIT()", +"2a46fc3d": "_burnSynths(address,uint256)", "2a472ae8": "checkIfCalled(bytes32)", "2a4735c1": "EXOTokenSale(address,address,address)", +"2a477c25": "goldPerBlock()", +"2a4798da": "latestTemplateOf(string)", "2a47e08a": "Potato()", "2a4802bc": "JINS()", +"2a48235b": "poolList(uint256)", "2a4843a7": "freezeHeight()", +"2a484ad4": "limitPerAddress()", +"2a484e61": "returnWithdrawTimeFiveDays(address)", "2a486a28": "raisedETH()", +"2a48ac9a": "deposit(string,address,uint256)", "2a48cabb": "testSwapTop()", "2a491877": "lastTimeOf(address)", "2a49222b": "isUsernameTaken(bytes32)", +"2a492be6": "getDisincentive()", "2a4a1a9b": "addFunds(address)", "2a4a1b73": "vote(address,uint256,uint256)", "2a4a8d68": "PRESALE_WEI_WITH_BONUS()", "2a4a8e02": "stakedAmount(address,address)", +"2a4b48ed": "setIpfsHash(uint256,string,string)", +"2a4b5b1e": "destoryGame()", +"2a4bc1e0": "displayParameters()", +"2a4bc321": "addWhitelistedAccounts(address[])", +"2a4c0a1a": "DAI_ADDRESS()", +"2a4c4bb0": "addAllowedWearableType(uint256)", "2a4c7c6d": "initiateClaim(bytes32)", "2a4caf67": "setDistenseAddress(address)", +"2a4cc2f0": "totalUnstakedToken()", "2a4d1a12": "CardExists(uint32)", +"2a4d98cf": "isFTokenValid(address)", +"2a4dbd2b": "depositContractAddress()", "2a4dc687": "callLib2(uint256)", +"2a4df775": "C14(bytes)", "2a4e0d55": "getTranscoderPoolSize()", +"2a4e14d7": "CreateGrant(address,uint256,uint256)", "2a4e4a84": "forx()", +"2a4e4d8c": "TMTG_Blacklisted(address)", +"2a4e9808": "RequireThatB2(bytes32,bytes32,uint256,uint256)", "2a4ef2a3": "wpxTeamAddress()", "2a4f1f21": "ACLYDTOKEN()", "2a4f370f": "forTesting()", +"2a4fc974": "price0AverageUNI()", +"2a4fcb1d": "unused()", +"2a4fcef5": "referralLPToken()", +"2a4fdf15": "lastEpochTimestampSec()", "2a4fe4ef": "ClimateCronToken()", "2a4ff14a": "Vlogchain(uint256,uint256)", "2a50097b": "getPlayerBets(uint256,address)", "2a501a43": "grantBonusDrops(address,uint256)", +"2a50c146": "getMetadata(address)", "2a50d71d": "transferWithLock(address,uint256,uint256,uint256)", +"2a510ecc": "maxUserProfit(uint8,uint256,uint256)", +"2a511c3b": "ROUND_1_CAP()", "2a513dd9": "changeMinimum(uint256)", "2a515949": "_attack(uint256,uint256,uint256,uint256)", +"2a516146": "pureTransfer(address,uint256)", +"2a51a956": "withdrawStables()", +"2a522e95": "changeFarmRateMaker(uint256)", "2a523e89": "maxReferrerTokens()", +"2a524270": "pendingkrauser(uint256,address)", +"2a527af9": "CONTRACT_DEPOSIT_PERCENT()", "2a52ee60": "createAuthority()", +"2a5317ab": "TriggerDelivery(uint256)", +"2a53c4bb": "handleBC2()", +"2a54770b": "calculateSetIssuanceQuantity()", "2a548276": "AddStaticProfit(address,uint16,uint256)", "2a54d313": "pay(address,address,address,uint256,uint256,uint256)", "2a555650": "HoneySuckleTimes()", @@ -24283,55 +44310,97 @@ "2a55cab6": "UniCoinSize()", "2a55feec": "isBuyer(address)", "2a560845": "ownerWithdrawUnsupportedTokens(address,address)", +"2a56f602": "calcGasCost(uint256)", "2a571b15": "strikersChecklist()", +"2a575cb0": "currentBucketIndex()", "2a583b90": "withdrawRake()", "2a5854d9": "getFreeSquirrel()", "2a58b330": "nextOrderId()", "2a59143a": "HIKI()", "2a595dd2": "GridcubeToken()", +"2a599d94": "constructed()", +"2a5a3ad5": "lowRiskPool()", +"2a5a771d": "addHashRate(uint256)", +"2a5a93d7": "getTimeSlotSize()", +"2a5ad159": "setInterestRateStrategy(address)", "2a5b204a": "subCoinBalance(address,uint256)", "2a5b51c3": "TokensIn(uint256)", "2a5b68fd": "validate(bool)", +"2a5bf6d2": "getUserDeposits(address)", "2a5bfc7b": "isFunctionAuthorized(bytes32)", "2a5c0e7c": "HomeBridge(uint256,address[],uint256,uint256,uint256)", "2a5c2a64": "ITGCToken()", +"2a5c3ee7": "Finished(address,uint256)", "2a5c4675": "reservation()", "2a5c65e4": "lookupInterest(uint256,uint256)", "2a5c792a": "getAllTokens()", +"2a5cce40": "getAndCheckRecvAirdrop(address)", "2a5cd45e": "getModuleIDByName(string)", "2a5da7cd": "AnimatixToken()", +"2a5dc8c1": "wantToEthOracle()", "2a5e695e": "Clean()", "2a5eb26a": "BITCOINGAME()", "2a5ed678": "currentContributionLimit()", +"2a5f1b0b": "claimErc20Tokens(address,address)", "2a5f6239": "_addReferrer(address,address)", "2a5f6a0f": "setVariationCycle(uint256)", +"2a5facc3": "PreSaler()", +"2a5fd841": "get_top_special_pairs()", "2a607962": "minCutValue()", "2a608c0c": "VicoOwner()", +"2a608d5b": "surplusBuffer()", +"2a60c8c7": "approve_126(address,uint256)", "2a60cf07": "FUTURE_DEVELOPMENT_FUND()", +"2a60fee3": "emergencyTransfer(uint256)", +"2a61218c": "PauseToAddToken()", +"2a615cb1": "addLiquidityToUniswapNERDxWETHPair()", "2a61ae19": "LockBalance(address)", "2a61d47b": "getResourceSetCount()", +"2a62207f": "getAirdropReceivers()", "2a62738b": "icoEndDate()", +"2a628e83": "adminCancel(uint256)", +"2a62a490": "getCollateral(uint256)", "2a62b7fa": "IcoContract()", +"2a62bf28": "AllowMinting()", +"2a62c636": "setFeeProviderImpl(address)", "2a632eb5": "setUsdTokenPrice(uint256)", +"2a63355b": "devATeamWallet_()", "2a6389dc": "IsTransferFromOldContractDone()", +"2a63986b": "removeOrders(uint256[])", +"2a6409b1": "convertTokens(address[],bool,uint256)", +"2a642407": "isRestrictionEnabled()", "2a649d6a": "returnFixed()", "2a64e635": "simpleToken()", "2a64fb63": "getSaleDate(bytes)", +"2a652078": "BallerPlayerCreated(uint256,string,uint256,address)", +"2a654374": "distributeDividend(uint256)", "2a663686": "fpartSigned(int128)", "2a666e01": "_fight(uint32,uint32)", "2a66ede5": "giveMeETH()", "2a677fb9": "getTokensForValue(uint256)", +"2a67ad65": "moveToLock()", "2a6852bf": "KOKOCoin()", "2a6865e3": "PibbleToken()", +"2a69beca": "earlyBird()", "2a69d486": "changeCraneStatus(bool)", "2a69e1c6": "onlyWhitelistedCanDo()", "2a69e7d9": "transfer(address,uint48)", "2a6a5394": "TokenCappedCrowdsale(uint256)", +"2a6a6065": "_setProtocolPaused(bool)", +"2a6a833b": "upgradeAndCall(address,bytes)", +"2a6aa595": "getCollateral(bytes32)", "2a6b157a": "CrowdsaleClosed(address)", +"2a6b820e": "liquidarContrato()", +"2a6c0927": "votingPoolContract()", "2a6c703b": "RATING_EXPAND_INTERVAL()", "2a6c7757": "kjhcoin()", "2a6cc9bf": "QRReal()", +"2a6cd8de": "setSymbolNameDecimals(string,string,uint8)", +"2a6cd9c6": "masterOperatingAgreement()", +"2a6ce866": "currentTotalRewards()", "2a6d474d": "usdPerEthMin()", +"2a6d47f3": "looptesting(uint256)", +"2a6d48f7": "refundPayback(uint256)", "2a6d6c08": "ReleasableAmount(address,uint256)", "2a6dd48f": "approvedFor(uint256)", "2a6dd8c9": "getPercent()", @@ -24339,69 +44408,115 @@ "2a6e3803": "getSoldAreasCount()", "2a6e3e5e": "correct_check_match(uint256[39])", "2a6efd76": "additionalRewards()", +"2a6f0f21": "withdrawRaffleTickets(uint256,uint256[])", +"2a6f344b": "allocateEcoSystemDevelopmentAndOperationFund()", "2a6f39ed": "deleteAllParents()", "2a6f65c7": "getRoundToGroupToInput(address,uint256,uint256)", +"2a6f7c39": "f2mContract()", "2a70214a": "TWD_Omnidollar()", "2a707d2c": "personal_withdraw(string,uint256)", "2a709b14": "tokenManager()", "2a70d1e7": "registerInit(address)", +"2a70e445": "LogTokenBought(address,address,uint256,uint256,uint256)", "2a711ab4": "voteTeam(bool)", +"2a712c63": "pendingBNBBase(uint256,address)", "2a714078": "triggerAuth()", "2a71e729": "NAGACOIN()", "2a724f2a": "reclaimAllAndBurn(address)", +"2a726ff7": "bInit(uint256,uint256)", "2a729061": "IDXToken()", "2a7292d0": "createToken(uint256,address,uint256)", "2a7318ac": "changePresaleEndDate(uint256)", +"2a73d586": "ClosedByTrustedParty(address,uint256,address)", "2a73db5c": "GetContributorInformation(address)", +"2a73effa": "mans(uint256)", "2a741385": "subTokens(uint256,string)", +"2a7434a8": "setProposal()", "2a745971": "BlockKing()", "2a745ae6": "flowerAllowed(address,address)", "2a74833d": "getUserSupportInTournament(uint256)", +"2a74acc5": "extraSpinPrice()", +"2a750c64": "CreateUser(string,string,string,string,uint256)", +"2a754f0a": "addressMe()", "2a7575ee": "availableBalanceOf(address,address)", +"2a75922a": "Call_Function(address,bytes)", "2a75a2ac": "addressFundAdministration()", +"2a75c7c6": "UnitsBuy(address,uint256)", "2a75cb71": "removeOwnerRequest2(address)", "2a764406": "CreateLRP(address,uint256)", +"2a765e0e": "openHarvest()", "2a76a169": "freezeMultipleAccounts(address[],bool[])", "2a76ffae": "depositEtherForRefund()", "2a774c27": "totAllocation()", +"2a775ab8": "oufBalance()", "2a776e3d": "setKYCLimited(address[])", "2a7781cc": "postData(address,string,bytes32)", +"2a77b18b": "executeOperation(address,address,uint256)", "2a77b4af": "FEE_MUL()", +"2a77d861": "placePrediction(uint256,address,uint64,uint256)", "2a77f2b7": "minMaxBuyETH()", "2a7806e4": "noTokenLocked()", "2a7813a4": "BitcoinBlackPearl()", "2a781f78": "getKYCPresalePayload(bytes)", "2a782802": "creatorBalances(address)", +"2a78be11": "getEstimatedTokenforBAT(uint256)", +"2a78e6c9": "commonToken()", "2a792f57": "buyAKeyWithAmount(uint256,address,uint256)", "2a795d79": "bounty_allocation()", +"2a796645": "provideCoverage(uint128)", "2a79fa0e": "TakePrize(uint256)", "2a7a3ac7": "claimUnallocated(address)", "2a7a50a5": "Intro(string,string,string,string)", "2a7a80a4": "trade(address,address,uint256,address,address,uint256,uint256,address,bytes)", +"2a7ad609": "getLastRngRequestId()", +"2a7b0107": "setUserFeeStage(uint256[])", "2a7b0172": "dontSellRock(uint256)", "2a7b2c93": "split(string)", +"2a7b2ecb": "dy()", "2a7b3d4d": "resumeWhitelist()", +"2a7b8f14": "AddNode(address)", "2a7c24f1": "power(int256,int256)", +"2a7c5d26": "requestStatusChange(uint256)", "2a7ca11f": "getMemeData(uint256)", "2a7caaec": "FOUNDATION_WALLET()", +"2a7d3db5": "changeEtherWallet(address)", +"2a7d61b7": "lockTimeOf(address)", +"2a7d65c8": "unstakeEarlyAllowed()", +"2a7dd7cd": "apply_new_parameters()", "2a7e0cc0": "createtoken(string,string,string,string,string,uint256)", "2a7e5018": "timeVault(address)", "2a7e60b6": "setRevealClosed(uint256)", "2a7ef0cc": "IDEA()", +"2a7ef942": "withdraw(bytes,string,address,uint256)", +"2a7f18be": "getQueueElement(uint256)", "2a7f26c4": "GetAllCurrencyIDs()", +"2a7f51b4": "newBulkTransferAction(bytes32,address[],uint256[],address)", +"2a7f6086": "moutaiPerBlock()", +"2a8000a6": "getChainlinkEthDollarValue()", "2a8014ca": "escrowAmount(address,uint256)", +"2a801d5b": "tokenUserFirstName(uint256)", "2a804835": "setCooldownEndBlock(uint256,uint64)", +"2a804efe": "startPercent()", "2a805069": "createToken(uint256,uint256)", "2a808899": "getSkillCount(address)", "2a8092df": "isMinting()", "2a812941": "getInitializeDesignatedReporterAddressValue()", "2a816e65": "factorWeight()", +"2a81bebb": "recoverLostTokensExceptOurTokens(address,uint256)", "2a8219e2": "setFundingBlock(uint256,uint256,uint256)", +"2a8255eb": "co_owner()", "2a827f99": "getTokenOwnerReward()", +"2a828bd8": "SongStarted(bytes32)", "2a82fdbd": "approveAdd(uint256,address,bool)", +"2a830e59": "TransferBet(address,uint256)", +"2a832680": "changeActionFee(uint256)", "2a835d67": "changePreIcoStartTime(uint256)", "2a83cd70": "MrReaperToken()", +"2a843f39": "SetDailyLimit(address,uint256)", "2a845b9f": "ADPay()", +"2a84797f": "BOOST()", +"2a848fad": "RemoveAdvisorSecondLock(address)", +"2a84bc6c": "sendPrize(address)", "2a8565b4": "GACT()", "2a856fcf": "debit(bytes32[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", "2a858126": "tickerRegistry()", @@ -24409,119 +44524,209 @@ "2a85a45d": "right38(uint256)", "2a85b7dd": "getBackEtherFor(address)", "2a862f1a": "notLessThan()", +"2a869a4d": "initializeMarket(address)", "2a86eef3": "countDiscount(uint256)", +"2a87332e": "farm(address,uint256,uint256)", "2a874f34": "finishCampaign(bytes32)", "2a87a86f": "shift(address,uint256,bool)", "2a882d1d": "TokenHolderSnapshotter(address,address)", "2a887299": "bid_threshold()", +"2a887702": "shouldLiquidate(address,address,uint256,uint256,uint256)", +"2a896ece": "createGen0Auction(uint256,uint256,uint256,uint64,uint64,uint64,uint256)", +"2a897776": "R24ID_()", +"2a897f59": "__tusd()", +"2a89b2e3": "Deposited(uint256)", "2a89d1bc": "TranchorToken(uint256,uint256,address,address)", "2a89d6fd": "registerForGetTogether(address)", "2a8a8b19": "bonusList()", "2a8a8ebb": "unitStake()", "2a8ab73c": "getProductOrderPayer(uint256)", "2a8ade3a": "TotalCapacity()", +"2a8b0480": "_START_RELEASE_TIME_()", +"2a8b29f6": "withdrawStake(uint256[],address[])", +"2a8b6491": "getAjioInUsd(uint256)", +"2a8c105d": "twoEther()", +"2a8c430f": "rtu()", +"2a8c5d88": "getAvailablePayout()", +"2a8cfa3f": "fillSignerBalance()", "2a8d1c61": "maxMask()", "2a8d26e8": "approveTransfer()", "2a8d7baa": "claimCompanyReserve()", "2a8de0ca": "DranMe()", +"2a8de7c8": "isMintingStateOutdated()", +"2a8e0326": "CONTRACT_STARTED_AT()", "2a8e251f": "BitcoinNature()", "2a8e391d": "OperationsFund()", +"2a8e3a49": "addComet(address)", "2a8e5eae": "isInGroupOf(uint256,uint256,address)", +"2a8e8ff7": "setPanicBatchTransferOut(bool)", "2a8eb9a3": "arpToken()", "2a8ec8cc": "numberOfPledges()", +"2a8f0f65": "createNFT(uint256,address,string,string,string,bytes)", "2a8f368b": "RESERVED_COMPANY_GROUP()", "2a8f6aa8": "TOKENS_FOR_OPERATIONS()", "2a8faf95": "secondaryGasLimit()", +"2a8fb886": "_nftUri()", "2a8fd223": "Flagged(address,bool)", "2a9043e4": "sellValue()", "2a9046d8": "disableGeneration()", "2a905318": "TOKEN_SYMBOL()", "2a905ccc": "getAdminFee()", +"2a9071da": "refuelHoldingToken()", "2a9078d6": "OWNERS()", "2a909257": "MultiCappedCrowdsale(uint256,bytes32,uint256)", +"2a90f808": "DividendPayed(address,uint256)", "2a9121c7": "ethereumToTokens_(uint256)", "2a91ab16": "doAirDrop(address[],address,uint256[],uint256)", +"2a920307": "AttackPir(address,uint256)", +"2a92192a": "adminWithdrawACX(address,uint256)", "2a922d54": "collectedAddresses(uint256)", "2a92362c": "getPaid(uint256)", "2a9278c5": "optionPoolLockTotal()", "2a92bb17": "OPRAH()", "2a92bffa": "setEditionPackPrice(uint8,uint256)", +"2a9300f0": "checkTokenAllow(address)", +"2a934a32": "sgTokenLimit()", "2a93b5bb": "pausePreIco()", "2a943be1": "LIRAX(string,string,uint256,string)", +"2a94c279": "poolStatsByEpoch(bytes32,uint256)", "2a952b2d": "process(bytes32)", "2a952b4b": "setParents(uint256,uint256,uint256)", +"2a957f8c": "removeCToken(address)", "2a970043": "create(string,uint256,uint256,uint256)", +"2a98c35b": "_tokenToEth(address,uint256)", "2a98e802": "setPerformanceBonus(uint256)", +"2a99417d": "getColFactor()", +"2a9a84c8": "nyasToLp1Route(uint256)", "2a9a86c1": "createBucket(bytes32[])", +"2a9a9bee": "calcSell(address,uint256)", "2a9af123": "DOMTOK()", "2a9b4921": "testManager(address)", "2a9b6975": "SuperNanoCoin()", "2a9b6dee": "pastFiveMinutes()", +"2a9b92a6": "setPlayerBookInterface(address)", "2a9ba092": "resizeIssuersArray(uint256)", +"2a9c24f9": "buscarCertificadoHash(bytes32)", +"2a9cdd7a": "patronageOwed(uint256)", "2a9d04f0": "TOKEN_PRIVATE_SALE_CAP()", +"2a9dcb06": "accessLiquidity(address[],uint256[])", +"2a9e120f": "buyTicket_EXO()", +"2a9e49b8": "setT0(uint256)", "2a9e97f1": "matured_block_number()", "2a9edf6f": "ownerSetStakeStartTime(uint256)", "2a9f0fb2": "getPriceWithInterests(uint256)", "2a9f1a79": "acceptPayment(address)", +"2a9f40b6": "rePolkamoonsPaused()", "2a9fabd2": "betMatch(uint256,uint256)", "2a9fb933": "MintExecuted(uint256,address,uint256)", "2a9fb9b2": "userTransfer()", +"2a9fc698": "addPair(address,uint256)", +"2aa03151": "sel(uint256)", "2aa0426c": "getAllBlocksByOwner(address)", "2aa056cd": "shares_holders_count()", +"2aa05b1a": "ytusd()", +"2aa066cd": "DoMint(address,uint256)", "2aa073c5": "icoActive()", "2aa0da47": "paymentSettings(string)", +"2aa19768": "bZRxTokenContractAddress()", +"2aa1c412": "faucet(bytes32)", "2aa1e848": "getPlayerAffT2(uint256)", +"2aa2b372": "setSecondBeneficiary(address)", "2aa2b7eb": "T8CToken(address,uint256)", "2aa2c381": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address)", "2aa2f7a4": "getOwnOrderByIndex(uint256)", +"2aa30e4d": "createBets(bytes16,uint256)", "2aa3177a": "self_store()", +"2aa333a2": "EggOpened(address,uint256,uint256)", "2aa37a41": "substractBalance(address,uint256)", +"2aa3b3fd": "getTokenAdapterAddress(bytes32)", +"2aa3e7d7": "check_balance(address)", +"2aa42c39": "removeBlocked(address)", +"2aa442df": "isApprovedForSiring(uint256,uint256)", "2aa49dd7": "Pixiu()", "2aa4c051": "setifoodDevAddress(address)", "2aa531d9": "getPlayerData(address)", "2aa5411f": "jadeRec(uint256,uint256)", +"2aa54af5": "GUSD_ERC20()", "2aa5ed61": "DayLimit(uint256)", +"2aa683fa": "cardsPerTier(uint256,uint256)", +"2aa6f793": "HappyBirthday(string)", "2aa6f98b": "ledToken()", "2aa71e24": "init(bytes32,address)", +"2aa743f2": "withdrawFromContract(address[],address)", +"2aa77c4c": "propose(string,uint256,uint256)", "2aa852b3": "removeListener(address,address)", +"2aa87a23": "PUBLIC_DISCOUNT_FRAC()", "2aa8be8d": "createPermission(address,address,bytes4,address)", "2aa9466b": "updateMyWorks(bytes32,address,address,bytes32,uint256,uint256)", "2aaa308e": "finalize(address,address,address,address)", +"2aaa37ec": "REWARDS_ALLOCATION()", "2aaa49f5": "percentageQuarter3()", +"2aaa5d2b": "convert(address,address[],uint256)", "2aaa9de1": "AlicToken()", +"2aaab8fa": "lastLiquidityLock()", "2aab1351": "receiveFromSigned(address,bytes,uint256,uint8,bytes32,bytes32)", "2aab22ff": "BonusReferrerCrowdsale(uint256)", "2aab80dd": "optionPool()", +"2aab8c89": "dmg()", "2aabb48e": "nextContributionCap()", +"2aabda0f": "last24hResults(address)", "2aabffdf": "disableSaleAgent(address)", +"2aac635e": "termSubmissions(address,uint256)", "2aac6911": "poolBLock()", "2aac8ad4": "getFirstAndSecondItem()", +"2aacc3fb": "budget(address,uint256)", +"2aacf58a": "getCallData(uint256,uint256,bytes32[])", +"2aacfd1c": "howManyCarsDoTheyOwn(address)", +"2aad22ba": "lockedHavvens(address)", "2aad292e": "setOperatingOfficer(address)", +"2aada48f": "outputToWbnbRoute(uint256)", "2aadafe8": "refundAdvertiser(address,uint256)", "2aae7f26": "Arcturus()", "2aae88f6": "removeFromGeneration(uint256,address)", +"2aaec37b": "zoneInsideBiggerZone(bytes2,bytes4)", "2aaee1a5": "Drawer()", "2aaef20c": "sixth_withdrawal(uint256)", "2aaefa9f": "centsExchangeRate()", "2aaf1685": "testControlCreateWithParentSameItemId()", +"2aaf9a7f": "getGoodness(uint16)", +"2aaf9c66": "gamblers(uint256)", "2aafbf7c": "Getether()", "2aafe9e7": "metToken()", "2ab0252d": "getERC721AddrPawn(uint256)", "2ab08396": "OwnersDb()", +"2ab0b0eb": "getTokenHandlerPrice(uint256)", "2ab0be77": "getTicketCode(uint256)", "2ab0bf3c": "GetContributorData(address,uint256)", +"2ab0f529": "isOperationDone(bytes32)", "2ab13037": "votesNo()", +"2ab1442f": "reflectandUpdate(address)", +"2ab180e9": "unwrapFor(uint256,address)", "2ab19a7e": "GoalMaximumReached(address,uint256,uint256)", +"2ab1d5dd": "setProtocolContract(address,bool)", "2ab2174e": "subOnOneStage(address,uint256,uint256)", "2ab22592": "updateWinnerBid(bool,bytes,uint256,bytes,bytes,bytes)", +"2ab24807": "numberOfAcoTokensNegotiated()", "2ab24e3b": "commitVote(address,bytes32,bytes32,bytes32)", "2ab26831": "getRateIco()", "2ab28ce4": "buyTree(uint256,address)", "2ab290fc": "updatejingzhi(uint256,string,uint256)", +"2ab291c1": "MEDALS_POINTS(uint256)", +"2ab2b52b": "getReserveAuctionIdFor(address,uint256)", +"2ab2d557": "getTokenAmountByLevel(uint256)", +"2ab311c3": "lastReaperAddress()", +"2ab32ce9": "tokenDescriptionByIndex(uint256)", "2ab34a91": "claimEnergy()", +"2ab370a4": "basedToken()", +"2ab3ad11": "setlatestFund(uint8)", +"2ab41f70": "emission(uint256,bool)", "2ab4672a": "BatchCreateSaleAvgPrice(uint256[],uint256,uint256,uint256,uint64,address)", "2ab4d052": "maxTotalSupply()", "2ab4ebfa": "AddItem(address,address)", +"2ab4edd8": "RESOLVER_ADDRESS()", +"2ab5abbc": "eveDeposit(address,uint256,uint256)", +"2ab5cf91": "getTokenLongMin()", +"2ab60045": "updateRescuer(address)", "2ab6a50e": "payoutBigBonus(address)", "2ab6f3f0": "BteamBets(uint256)", "2ab6f8db": "renounceOperator()", @@ -24534,22 +44739,38 @@ "2ab8fc2d": "reservesPerTokenSrc(address,uint256)", "2ab90d66": "ownerrestart()", "2ab924d2": "HRCoin()", +"2ab9ab9d": "withdrawHex(uint256)", +"2aba72c8": "queryTokenList()", "2abaa0c9": "picosCap()", "2abaca23": "participate_in_arbits_presale_fiat(address,uint256)", +"2abb2811": "withdraw1(address,uint256)", +"2abb5e9d": "openChannel(address)", +"2abb6083": "registerBonus(address,address,uint256[])", +"2abbd847": "_kongERC20Address()", +"2abbfdda": "newProposal(uint256,uint256[],address[],bool[])", +"2abc6201": "addPools(address[],uint256[])", +"2abd4dee": "allocateReward()", "2abd7fc8": "withdrawDao()", "2abdbeb8": "forceOverStage()", "2abdf1ef": "_update(string,uint256,string,uint256,uint256,uint256)", "2abe4f60": "getInStake(uint256)", "2abe5a2d": "getCandidate(uint32)", +"2abe7839": "pendingHYPE(uint256,address)", "2abf2aae": "payMaxAuctionEther()", "2abfab4d": "donationCount()", "2abfaf1f": "setFreeTransfer(bool)", "2abfbd28": "mintCommunityRewards()", +"2abfe08b": "newGasLimit(uint256)", +"2ac00c7e": "combineOwner(address,uint256[],uint32[],uint32)", "2ac016ad": "addBackend(address)", "2ac025ab": "removeAddressFromRole(address,string)", +"2ac05311": "seize(uint256)", "2ac08739": "getCurrentDuke(string)", +"2ac097e9": "weiToToken()", +"2ac0df26": "emitMessage(string)", "2ac110c5": "icoPhase2Start()", "2ac12622": "cancelled(bytes32)", +"2ac12fde": "releaseRecords(uint256)", "2ac197c4": "IPMCOIN()", "2ac1a995": "HiBTCToken()", "2ac1db5a": "getEthToTokenUpdateOrderHint(uint32,uint128,uint128)", @@ -24558,105 +44779,187 @@ "2ac306b0": "BitCoin()", "2ac364b4": "PalavraCoin()", "2ac394a4": "durationBetweenRewardMints()", +"2ac3d828": "randomNUM()", +"2ac3f450": "rewardPerWeight()", "2ac48524": "getTokensCount(address)", "2ac4a51d": "OVALExchangeToken()", +"2ac4edd2": "approve_227(address,uint256)", "2ac50df1": "tokenPriceOracle()", "2ac68b78": "acceptPayment(address,uint256)", "2ac69167": "StockLocation(string)", "2ac6f15f": "exchangePreDGZTokens()", "2ac71c16": "maxUSD()", +"2ac756e3": "dataRequester()", "2ac7f8ce": "CrowdSaleChanged(address)", "2ac85e46": "isValidNode(uint256)", "2ac87112": "ETHRaised()", +"2ac88864": "C17(bytes)", +"2ac8b7de": "burnTarget()", +"2ac8bb15": "_target()", +"2ac8c1b2": "redeemEtherByRewarder(bytes32,address,uint256)", +"2ac962f1": "stakingPeriodInSec()", "2ac9bf09": "bid(uint256,uint256,uint256)", "2aca2b16": "setInvestxPlatform(address)", +"2aca3e7d": "setShares(uint256,uint256)", +"2acab0bc": "burnFromTotal(uint256)", "2acada4d": "getAllAssets()", +"2acbf823": "_snapshots(address,uint256)", "2acc204c": "killMeshPoint(int256,address,address,string,address)", +"2acc6143": "defineOracles(address,address,uint256[])", +"2acc69e1": "gorgonaKiller()", +"2accd13e": "workPlanAdminFee()", "2accf2f7": "splitFunds(address,address)", "2acd1a95": "sling(string,string,string,string,uint256)", "2acd2000": "removeFreezer(address)", +"2acd5e4e": "setReservationFee(uint256)", +"2acd78c2": "mode(address)", "2acd7e41": "transferOwnerToTest()", +"2acde098": "registerOperator()", +"2ace40db": "setInvestitors(address,uint256)", +"2ace5a2e": "total_deposit()", +"2aceb301": "redeemInstructionGas()", +"2aceb534": "getAccountDetails(address)", "2acefd0f": "setCitySlogan(uint256,string)", "2acf3908": "StealthGridToken(uint256,string,string)", "2acf8551": "playMeta(address,address,uint256)", +"2acfc2ca": "darkToken()", +"2ad00a0a": "NewNinja(uint256,bytes16,bytes32)", "2ad02172": "MAX_PREICO_SUPPLY()", "2ad0a4e9": "pauseNotice()", +"2ad11a11": "getAllTokensWithLimit(uint256,uint256)", "2ad11b9e": "getMinerals()", "2ad12937": "OwnableToken()", +"2ad17e6e": "RemovedMember(address,uint256)", +"2ad1afef": "rowMax()", "2ad1bc09": "steal(int128,string,address)", +"2ad1c16b": "GRANT()", +"2ad29fe8": "take_the_money_and_run()", "2ad2a9f8": "transfer(bytes32,uint256,address)", "2ad2ae2e": "collectLocalBounty(uint16,uint256)", +"2ad311b5": "isRelayManagerStaked(address)", "2ad3274f": "UpgradeScheme()", "2ad3509b": "ExcreteumToken()", +"2ad36aed": "addGluwa(address)", "2ad389e3": "constructHashRs1Rs2(bytes,bytes)", "2ad3e8bc": "GreenChain()", +"2ad3ed6d": "prohibiteds(address)", "2ad3ef70": "randContract()", +"2ad4530a": "sellOrdersCount()", "2ad45312": "WEI_MINIMUM_PURCHASE()", +"2ad4b141": "fetchPrice(bytes32,bytes32,bytes32)", "2ad4d818": "userCreate(string,string)", +"2ad56b4c": "initialLTVCounterVaultE10()", +"2ad579d7": "maxBetTimes()", +"2ad582e6": "getCoreParameters()", +"2ad5e73a": "tradingProxies(uint256)", +"2ad5f0a1": "setNegateEligibility(uint256,bool)", +"2ad60751": "swapYFOXWithAnyERC20(uint256,uint256,address[],address,uint256)", +"2ad62b1c": "getTournamentV1(uint256)", "2ad64a4d": "MAXCAP_TOKENS_PRE_ICO()", +"2ad6cbf9": "buyBoosters(address,string,uint256)", +"2ad71573": "auctionCount()", "2ad8016e": "changeDiscount(uint256,uint256,uint256)", "2ad8aaa6": "bonusAmmount(uint256)", "2ad8d875": "getPayeeExpectedAmount(bytes32,uint8)", "2ad8fbd2": "MerrierToken(string,string,uint256,uint256,bool)", +"2ad92106": "bonus2(address)", "2ad92740": "tokensPurchased(address)", "2ad9527e": "h_pwd()", "2ad95786": "winner(address)", "2ad9618c": "startCrowdsale(uint256,uint256,uint256,uint256[],uint256[])", "2ad99825": "setOwnerCutPercentage(uint256)", "2ad9efc0": "UbayToken(address,uint256)", +"2ad9f287": "OrderRemoved(address,address,uint256,uint256)", +"2ad9f87b": "sendRestTokensAndDestruct(address)", +"2ada1c02": "TakebackToken(address,uint256)", "2ada2596": "getMember(address)", +"2ada85ad": "Referrals(address)", +"2adb11c2": "setNumberOne(uint256)", "2adbb84d": "onFreezing()", "2adbc396": "BurnableCrowdsaleToken(string,string,uint256,uint256,bool)", "2adc2cd2": "COIN_PER_ETHER_ACTIVE()", +"2adc57a6": "doesClientRecordExist(address)", "2adc7da3": "setCentralBanker(address)", "2add5a50": "cofounders(uint256)", "2add78bb": "StartQ(string,string)", "2addeab6": "getSolver(uint256)", "2ade6c36": "getNodeAddress(bytes32)", +"2adeb686": "OWNER_LOCKED_IN_COMMON()", +"2adeee13": "addLiquidityTokens(address,address,uint256,uint256)", "2adf68bb": "UTPLToken()", "2adf7d2f": "tenZero()", +"2adf839e": "getExternalStrengthRate(address)", +"2adfcb9b": "getMessageByMessageId(uint256)", +"2adfefeb": "mint(uint256,address,address,uint256,bytes)", +"2ae070dc": "govenors2_open()", "2ae1158d": "votingWeightOf(address,uint256,uint256,uint256)", +"2ae14301": "OwnerTransferPropose(address,address)", +"2ae1431c": "f0(uint256)", "2ae26d8e": "tenDecimalPlaces()", +"2ae296da": "rewards2Token()", +"2ae2ac3f": "createCommunity(address,string)", +"2ae2f2af": "getTokenInsuranceOthers(uint256)", +"2ae34254": "winnigBids(uint256)", "2ae3594a": "hit()", "2ae418a4": "getPrivatePreSaleTokenBalance(address)", +"2ae427dc": "_tFeePercent()", "2ae4b85f": "MAX_HOST_PERCENT()", +"2ae4b9a1": "Store(bytes32,bytes32,bytes32)", "2ae524c2": "mintRiskTokens(address,uint256)", +"2ae5432b": "removeWhitelistedList(string[])", +"2ae61099": "readRewards(address,address,uint8,uint256)", "2ae6218d": "getBurnPrice()", "2ae67563": "GameSicBo(string,uint256,uint256,uint256,address)", "2ae6f9c2": "Ownerburn(uint256,address)", "2ae72544": "length(int256)", +"2ae78fdb": "canBurnPynths(address)", "2ae7c2df": "Ethernite()", "2ae7c313": "Injected(address,uint256,uint256)", "2ae8284a": "_newGame(uint256)", "2ae8636d": "withdrawPRSTokens(address)", "2ae87a70": "getNumContents(address,uint256)", +"2ae87cdd": "deployAndHandleBridgedTokens(address,string,string,uint8,address,uint256)", "2ae8a2d2": "sendFunds(address,uint256,uint256)", "2ae8a7e3": "checkRole(address,bytes32)", "2ae8b4a3": "actualGotETH(address)", +"2ae8bdfe": "withdrawCollateral(address,address,uint256)", +"2ae958fc": "saveFunds(address)", "2ae9782c": "MARRON()", +"2ae98567": "validAddressInNonce(uint256)", "2ae9c600": "protocolVersion()", "2aea4d21": "sealer()", +"2aea5807": "cevaClearTitle(uint256,address)", "2aeaa291": "checkRewards()", "2aeabfbf": "getLiquidityAndPositions(bytes32,address)", "2aeacd4a": "exchangeTokensFromOtherContract(address,address,uint256)", +"2aebb7bc": "flushBNB()", "2aebcbb6": "finishVote()", "2aec3169": "setThirdWinner(address[])", "2aec3a71": "ProofOfHumanityAddOn()", +"2aec65b3": "withdrawFarmTokens(address,uint256)", "2aec9466": "updateInfo(uint256,uint256,uint256)", +"2aeccacc": "moveBrickClear()", "2aed1390": "kyberContract()", "2aed1905": "setMatchingEnabled(bool)", "2aed256e": "inRangeToDisembark(uint16,uint16,address)", "2aed7f3f": "reclaimContract(address)", +"2aee0e66": "getMaxAllowedOutcome(uint256)", "2aee19c7": "testCreateWithNonce()", +"2aee7a68": "mlmShare()", +"2aee7ef8": "LPProfitShare()", "2aef3898": "ChangeMinSaleAmount(uint256)", "2aef6ff6": "serviceTrasferFromDist(bytes32,address,uint256)", "2aefb7c5": "funds_claimed()", +"2aefea18": "encodeMessageSpawnable(uint256,uint256,uint256[])", "2af004e7": "setReferralAddress(address,address)", +"2af049d5": "settleBonus(uint256,uint256,uint256)", "2af05c4e": "lastMintingTime()", "2af05d07": "unlockCurrentAvailableFunds()", "2af0ac71": "getAmountSoldAfterPowerDay()", +"2af103c8": "TREASURE_CHEST()", "2af123b8": "diffHours(uint256,uint256)", "2af1616d": "MissionToken(uint256,string,uint8,string)", +"2af1af80": "whitelistContributed(address)", "2af1b5a2": "protectedUnlock(address,uint256,string)", "2af1c247": "mint(string,uint256,uint8,string)", "2af22e3b": "getJobs(address,uint256)", @@ -24664,175 +44967,349 @@ "2af38eab": "totalBspAmount()", "2af39bab": "AssetBackedTokens(string,uint8,address)", "2af3b7f8": "updateState(bytes32,uint256,bytes,bytes,bytes)", +"2af3feb0": "getPendingUniswapProxy()", +"2af4b836": "subscriptionExpires(address,address)", "2af4c31e": "changeOwnership(address)", +"2af4f9c0": "mintedReward()", "2af52312": "TRAToken(address)", "2af5356a": "claimTeamTokens()", +"2af57580": "whitelistRejectNode(address)", +"2af59b9e": "increaseContribution(uint256)", "2af5cfdd": "priceOfEthOnEUR()", +"2af5d0a5": "Disqualified(address,uint256)", "2af5e6b2": "setPriceEther(uint256)", +"2af64bd3": "isResolverCached()", +"2af689a2": "checkPriceForXcoinsInWeiPerCoin(uint256)", "2af6fb10": "ERC20TokenImpl()", "2af7ac0a": "rtu(uint256)", "2af7c4d7": "Certifiers()", +"2af7c5c5": "rarityByImagesTotal(uint256)", "2af7ceff": "testPrice(uint256)", "2af7ecc7": "addRosenCertAdmin(address)", +"2af80b44": "_latitude()", "2af8afca": "dgt()", "2af8b645": "release(bytes32,bytes32)", "2af8fd94": "ISmartCert()", +"2af9162a": "revokeKeyGranter(address)", +"2af9cc41": "exit(uint256,uint256)", +"2afa178a": "setDecayRatio(uint256)", "2afaca20": "buy(uint256,address,uint256)", "2afb21bc": "InvestWithdraw()", +"2afb48d1": "setMinRFIBeforeSwap(uint256)", "2afb9fb1": "isCardTradeable(uint64)", "2afbbacb": "canStake(address,uint256)", "2afbc38f": "Annexe_SO_DIVA_SAS()", "2afbe339": "QQQToken()", +"2afbe43f": "_beginDuel(uint256,uint256,bytes32,bytes32,bool)", +"2afc26de": "setAuctionStartTime(uint256)", +"2afc793e": "getProtocolAdapters(bytes32)", "2afcdfbc": "createGen0Auction(uint256,uint256,uint256,uint256,uint256)", +"2afce0cb": "approve_142(address,uint256)", "2afcf433": "PriceTwoEnable()", "2afcf480": "invest(uint256)", "2afd1a7d": "getReleasableAmount(address)", +"2afd97a4": "balances(string)", +"2afe31c1": "getRelayHubDeposit()", +"2afe405a": "buyProduct(string,uint256)", "2afe4c37": "tokensleft()", "2afe9f1e": "TestTokenContract()", "2afed67e": "amountFundBounty()", +"2afefaa0": "erc20Withdraw(address,address,uint256)", "2aff101c": "LinearDecayingTokenFunction()", "2aff2843": "servusMultiSig()", "2aff49d7": "setSizeAndRate(uint256,uint256)", +"2affdad5": "checkerAddress()", "2b000f00": "calculate_next_expected_wei(uint256,uint256,uint256,uint256)", +"2b00490d": "price(address,address)", +"2b00af34": "socks()", "2b00c6fd": "createHorseShoe1(uint256,uint256,address)", +"2b014a12": "MIN_GRANT_REQUEST_DELAY()", "2b019692": "RYNote()", +"2b01b5f0": "hasStudent(address)", +"2b01baff": "comReWards_()", "2b01bf51": "isValidMember(address)", +"2b02238d": "iterateOffers(address,uint256,uint256)", +"2b0289b9": "EventInputPaymentReceived(address,uint256,uint8)", "2b028bbb": "LKCExchangeRate()", "2b02d9af": "NIMBUS()", "2b03b8d4": "IMDEXdeposit()", +"2b03d49d": "setFees(uint256[],uint256[],uint256,uint256)", "2b03d70e": "undisputeFavor()", +"2b03da3c": "getParams(bytes32)", +"2b0417e8": "wrap(address,address,address,uint256,uint256,uint256)", "2b04451a": "totalExtraOptions()", "2b048f77": "getMyDeployAt(uint32,uint32)", "2b04b478": "removeUsersFromGroup(bytes32,address[])", "2b04d8f7": "takeOffer(uint256,address)", "2b04e840": "getBalance(address,uint256)", "2b051b50": "revealVoteOnProposal(bytes32,uint8,bool,bytes32)", +"2b05223e": "uniFeeRatio()", +"2b053eae": "ROTBurn()", +"2b055eac": "_swapOnUniswapV2Internal(address,address,uint256,address)", +"2b05cd12": "setFeesToCreate(uint256)", "2b05d346": "CallScheduled(address)", +"2b05f0cb": "findFivePercent(uint256)", "2b069816": "getJobValue(uint256)", +"2b06cdc1": "r00()", "2b071e47": "spread(address[],uint256[])", +"2b072951": "launch_attack(uint256)", +"2b075c5d": "exitAll(address,uint256,uint256)", "2b07682a": "withdrawFoundersTokens()", +"2b079b2e": "recovery(uint256)", "2b086b92": "convertToTMEX(uint256,address)", +"2b08e824": "ticketToOwner(uint256)", "2b08fef7": "buy_token(address[],uint256)", "2b093fe9": "TOKEN_MULTIPLIER()", +"2b096926": "call(uint256)", "2b0999f3": "initialYear()", +"2b09e013": "patrons(uint256,address)", "2b09e707": "amountHives()", +"2b0a2b0a": "transferToNativeTargetAddress(uint256,string)", "2b0aa1ed": "updateEthFee(uint256)", +"2b0ab144": "awardExternalERC20(address,address,uint256)", "2b0ac7c4": "_createToken(uint256,uint256,uint256,uint256,uint256,address)", +"2b0b1419": "fixedPools(uint32)", +"2b0bbbb4": "safeAlloyTransfer(address,uint256)", +"2b0c4dfb": "TokenPurchased(address,uint256,uint256,uint256)", "2b0cb194": "mintRawTokens(address,uint256)", "2b0d0180": "luckyBuy()", "2b0d0c6a": "afterFirstRefundRoundFundsReleaseNumerator()", +"2b0d0ff9": "energyInit(uint256,uint256)", "2b0e16bf": "PRESALE_BALANCES()", "2b0e64b3": "determineCommissions()", "2b0ebfe9": "activatedJuryTokens(address)", +"2b0eec97": "distributionCount(bytes32)", +"2b0f204d": "curGenerator()", "2b0fbf72": "getMobster(uint256)", "2b0fd89e": "ARcoin()", "2b0fdb72": "MINIMUM_MANUAL_SIGN_PERIOD()", +"2b0fe84f": "Get_User(address)", "2b0ff02d": "listCard(uint64,uint128,uint128,uint24)", "2b100a31": "setStatsSumHours(uint256,uint256)", +"2b105663": "getIds()", "2b1071c9": "testTransferToNullAuthority()", "2b112e49": "getCirculatingSupply()", +"2b1142c2": "setTransLock(address,uint256,uint256)", +"2b11551a": "getRedemptionRate()", "2b11e7f6": "SILVER_AMOUNT_SKL()", "2b124245": "selfRegisterDINsWithResolver(address,uint256)", "2b12553b": "saleExchangeRate()", +"2b12947d": "totalGainDirect(address)", +"2b12bb56": "addUserTranche(address,uint256,uint256,uint256)", +"2b135733": "minimumTimeToPivot()", +"2b137416": "usdcEthPrice1CumulativeLast()", +"2b1385e8": "change_pip_fee(uint256,uint8)", "2b13d799": "redeemedList(uint256)", +"2b1421f9": "mixDna(uint256,uint256,uint256,uint256)", "2b1453dd": "addSwap(string)", "2b146407": "PrivateSale()", "2b14b712": "addClient(address,address,uint256)", +"2b14c859": "repayAllAndWithdraw(address,uint256)", "2b14ca56": "sellFee()", +"2b14d7de": "get_profit()", "2b151096": "placeSaleOrder(bytes8,bytes8,uint256,uint256,uint256)", +"2b15168d": "setSqueezePoolSettings(uint256,uint256)", +"2b15d391": "addWithdrawalRoot(bytes32,uint256,bytes32[])", "2b15eb9b": "TongTong(string,string,uint256)", +"2b16587c": "getBuyPercentage()", "2b16b56a": "setIndex(uint256,uint256)", "2b16f1ef": "nextPoolPercentage()", "2b17355e": "balancesPrivate(address)", +"2b176368": "AltaUniversidad(address)", "2b17b6a9": "bnbToken()", +"2b17b8be": "getInvitation(address)", +"2b17fb67": "getCurrentInvestLimit(uint256)", "2b1841d2": "openCdp(uint256,uint256,uint256,address)", "2b1857a5": "dividendPathways(address,uint256)", +"2b186428": "orderSizeExponentialFactor()", +"2b1869d1": "firstPhaseSold()", "2b190f18": "getFreeTokens()", +"2b193573": "icoFirstWeekRate()", "2b193ac4": "INITIAL_AC_SUPPLY()", +"2b195cdc": "getVaultIdCounter()", +"2b197ef3": "futuresContractAllowed(address,address)", "2b198366": "addCertifier(address)", "2b198808": "BloccaConto(address,bool)", +"2b198f8e": "userToMemberIndex(address)", +"2b1a45c3": "joinswapPoolAmountOut(address,address,uint256,uint256)", +"2b1a87f0": "DELAY_ERROR_TOLERANCE()", +"2b1ab8f9": "getTaiAMT(uint256)", "2b1c511f": "getAvailability(address)", "2b1c6982": "testTemp2()", +"2b1c7029": "rewardBacBalance(address)", "2b1dd8da": "refundFees()", "2b1e27f1": "migrateDomain(uint256,bytes32)", "2b1e5016": "releaseTheHodl()", +"2b1eaf29": "paymentRecipient()", "2b1ed01a": "warehouses()", +"2b1f27e1": "convertToroToUsdt(uint256)", +"2b1f4ad6": "getNFTContract()", +"2b1f6798": "transferBatch(address[],bool)", "2b1f7660": "PRZTToken(uint256,string,uint8,string)", +"2b1fa41d": "minAddLiquidityAmount()", "2b1fcc10": "impl_cancelOrder(address,uint256,bool)", "2b1fd58a": "acceptBid(uint256)", +"2b2042ae": "emergencyCommit(uint256)", +"2b208d2d": "distributionContract5()", +"2b2093b2": "getCodeHashSuicide(address)", "2b20e397": "registrar()", "2b214618": "listAllBuyBalance(address,uint256,uint256)", "2b21502f": "totalEthRcvd()", "2b21d01b": "rateBTCxETH()", +"2b21d1a1": "getUsdtEthRate()", +"2b221ac5": "_getDetails(uint256)", "2b223264": "BitcoinBrand()", +"2b225f29": "CurrentVersion()", "2b22a18c": "allocate8ProjectToken()", "2b232741": "pullFromCirculation(uint8)", +"2b2419e2": "lanceMinimo()", "2b2443db": "canRaiseUsing(uint256)", "2b2449b5": "setMaxCAP(uint256)", +"2b248150": "addIds(uint256[],uint256)", +"2b24a878": "setStringInfo(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", "2b24aa6e": "rateA()", "2b252d17": "_randomize(uint256,uint256)", "2b25303b": "USDTUBE()", +"2b253913": "addIFOAddress(address,uint256,uint256,uint256)", +"2b255762": "getAssetIds(address)", "2b25a7e4": "giveKudos(address,uint256)", +"2b25edf8": "freeGem(uint256,address,uint256)", +"2b2617e7": "SLTDToken()", +"2b261e85": "cancelMlp(uint256)", +"2b26a982": "isPoolWhitelisted(address)", +"2b26c758": "kebabToLp0Route(uint256)", +"2b26fee6": "setMainnetContract(address)", +"2b2805db": "documents(bytes32)", +"2b28bc99": "addArtists(uint256,address,uint256)", "2b28d2d0": "totalFrozenAccountsMapping()", +"2b290922": "_liquidRateFromPresale()", +"2b291058": "mintInfo()", +"2b2910ca": "drainNest(address,uint256)", "2b291eb6": "UserAddTicket(bytes)", +"2b292168": "mapKey(bytes)", +"2b292607": "updateAllowAddingLPTime(uint256)", "2b29532b": "distributeLCASH(address[],uint256,uint256)", +"2b295deb": "get_presents(uint256)", "2b297f9e": "registerDao(address)", "2b29908d": "BGB_address()", +"2b29cac3": "changeMaxNoReferal(uint256)", "2b29fbfa": "testFail_voterNotCertified()", +"2b2a3bbe": "callB(address,uint256)", +"2b2a42ad": "transferBillbetweenSuppliers(bytes32,bytes32,bytes32,uint256)", "2b2b2882": "mintIcoTokenMultiple(address[],uint256[])", +"2b2b32fc": "charityPot()", +"2b2b9ef1": "unpauseLimit()", "2b2badb3": "getAuditor(address)", +"2b2be309": "isTransferWhitelistOnly()", "2b2c71af": "doTradeofCollateral(address,address,uint256,uint256,uint256,uint256)", "2b2c91b9": "refundApprove(address,uint256)", +"2b2d50c3": "addCollateralBalance(address,uint256)", +"2b2d5ec5": "sh(uint256,uint256,bytes,bool,int256,bool)", +"2b2d5ed6": "cTokenUnderlyingPriceAll(address[])", +"2b2d9fde": "callerRewards()", +"2b2da97e": "registerManager(address)", +"2b2db34a": "gas_increase_exponential()", "2b2dc12e": "RECEIVER_PAYOUT_THRESHOLD()", +"2b2e2e23": "OVRVault()", "2b2e7159": "typeB()", "2b2e76f3": "LA_wallet()", +"2b2ebfff": "closeLoanUSDb(address)", "2b2f4d84": "setVestingParams(uint256,uint256,uint256)", "2b2f88a8": "quantidadeDeAutorizacoes(address)", +"2b2fa0b2": "availableGeosToPurchase()", "2b2fbd68": "minTicketEur()", +"2b2fe4bc": "setMineCoinInfo(address,uint256,uint256)", "2b302b60": "fairymasterReq()", "2b30a84e": "rollTwo(address,uint8,uint8)", "2b30d2b8": "invoke(uint256)", "2b318568": "AddDynamicProfit(address,uint32,uint256)", +"2b31bf21": "swap(uint32[],address[],address[],uint256,uint256)", "2b321633": "testCloseChannel()", "2b3297f9": "swapper()", "2b337152": "totalissue()", "2b343100": "newPlayerFee()", +"2b345964": "devAmount()", +"2b346423": "products(int256)", +"2b34774d": "transferEthDifferent(address[],uint256[])", +"2b34af70": "accepted(address)", +"2b350f93": "farmBlockNumber()", +"2b3559c6": "isPausedMint()", +"2b356cbd": "openPresale(bool)", "2b359e6b": "fundingTokens()", "2b35d08a": "_computePrice(uint256)", "2b36316e": "updateStageCap(uint256)", "2b36a657": "profits()", +"2b370199": "updateBrandAddress(uint256,address)", "2b379218": "globalDailySupply()", +"2b37b99a": "incValue(uint256)", "2b37d313": "tdeIssuer()", +"2b37f53c": "getVoter()", +"2b3831d2": "replaceWhitelists(address[])", +"2b3853bd": "tokenWithdrawn()", +"2b38e547": "transferTokenWithOutPayable(address,uint256)", "2b38ee56": "exitFee_()", "2b3a4ae3": "adjustFeeEntitlement(address,uint256)", +"2b3a5e4d": "_discountTranches(uint256)", +"2b3a8c8f": "withdraw(bytes,bytes,uint256)", +"2b3aef41": "getPoolIndexes(uint8)", +"2b3b1ba9": "existsCandidates()", +"2b3b264c": "purchasedGfceToken(address)", +"2b3b55af": "findFreeG3Referrer(address,uint8)", "2b3b885d": "BGJC(uint256,string,string)", +"2b3b9208": "getTotalDepositAfterFees()", +"2b3ba681": "RATE_PRECISION()", "2b3c7562": "tierThreePurchase()", +"2b3c9cdd": "getTotalBurnedRebase(uint256)", +"2b3ca12b": "tradeEtherForTokenUsingReservesWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256,uint256)", +"2b3cf04b": "StringToBytesVer1(string)", "2b3da717": "BOBOTOKEN2()", +"2b3dc80c": "srcCanCall(address)", +"2b3df690": "upvote(bytes32,uint256)", +"2b3e7cdb": "setForeignFactory(address)", "2b3eae40": "MatchmasterTakeover(address,address,uint256)", "2b3eb76c": "awardAmountPrime()", "2b3ed526": "setFiatContract(address)", "2b3ede1c": "WithdrawAll(address)", +"2b3f018c": "Referal(address)", +"2b3f41aa": "burnSynthsToTargetOnBehalf(address,address)", "2b3f9f01": "_setSpendAvailable(uint256)", +"2b3fa8e2": "fetchword()", "2b3fbbbb": "setPixelColor(uint16,uint16,uint24)", "2b3ff9e9": "DLVO()", +"2b4013ae": "checkIsLive()", "2b4143bd": "BasketRegistry()", "2b4158cb": "buyFreePixels(uint256,uint256,uint256,uint256)", "2b41a901": "grandTotalAllocated()", +"2b41c943": "legendaryList(uint256)", "2b423b05": "changeRequiredMinor(uint256,bool,bytes)", +"2b425fc1": "requestOrgan(string,string)", "2b42a89a": "setWhitelistOnlyPermission(bool)", +"2b42dc62": "removePair(uint256)", "2b42f4b2": "TokensCreated(address,uint256,uint256)", +"2b430cd2": "setVotedPerformanceFee(uint256)", +"2b432167": "weiForStake(uint256)", "2b435366": "fund(address,bool)", "2b4353f2": "payoutRate()", +"2b44b5b4": "teamMintedAtBlock()", "2b44d05f": "LISA()", "2b44e5be": "distributeTokenToAddress(address,address,address,uint256)", "2b44fd38": "dayLimit_()", "2b455ac6": "insertMilestone(uint8,uint256,uint256,uint256)", +"2b456401": "UPLINE_PERCENT()", "2b459e81": "SpermLabsReborn()", +"2b45b1a9": "provableSetGasPrice(uint256)", "2b45bcf9": "minimumHydroStakeUser()", +"2b45bfde": "setCanConvert(bool)", +"2b464a78": "DangKyMoi(string,uint256,uint256,uint256,string)", "2b4656c8": "initialize(address,address,address,uint256,uint256,uint256,uint256)", +"2b46609d": "vaultWithdraw()", "2b46e7f8": "SLUTZToken()", "2b47571a": "resetWithdrawTimer(uint256)", "2b47cb17": "TopToken()", +"2b481883": "isMintingAllowed()", +"2b48762a": "setStarsAddress(address)", +"2b488db0": "setSafeOwner(address)", +"2b492d07": "updateFreezeTimeline(uint256)", "2b49c9c2": "updateBanqueAddress(address)", "2b49d425": "currentProposal()", "2b49d9e5": "setFighters(uint32,uint32,uint256[])", @@ -24840,163 +45317,330 @@ "2b4a2d0a": "getInfoFromCreateAuction(bytes)", "2b4a3b31": "doTransferFrom(address,address,uint256)", "2b4a964b": "networkGrowthAmount()", +"2b4b05cf": "change_cDAIAllocation(uint256)", +"2b4b16b1": "rejectAction(uint256)", +"2b4b17ec": "getRewardPerTokenAmountInternal(uint256,uint256,uint256,uint256,uint256)", +"2b4bc0ba": "fnxStakeFRAXForFPT_FRAX(uint256,uint256)", "2b4bdf76": "getBdpController(address[16])", +"2b4beea6": "SWAP_PATH(uint256)", +"2b4bf8a6": "addOracle(bytes32,string,address)", +"2b4c32be": "ERC721_Interface()", +"2b4c4cf4": "getUnipairInfo(address,address[])", +"2b4c8ba8": "developerFeeMax()", "2b4ca103": "TXQToken(address,uint256)", "2b4cbcc3": "getCombat(uint256)", +"2b4cc01f": "totalToBeMintAmount()", "2b4d0450": "BaseToken(string,string)", +"2b4d5303": "makerKnc(address)", "2b4d7c3e": "getPositionLender(bytes32)", +"2b4e4e96": "transfer(address,uint256[])", "2b4e8413": "userNumber()", +"2b4eaf87": "leaveDailyStake()", +"2b4f1e24": "registerReferralWithAddress(uint32,uint32,address)", +"2b4f5948": "stores(bytes32)", "2b4f79b3": "buyMessage(bytes32,uint256,string)", +"2b500041": "getTransactionHash(address,uint256,bytes,uint8,uint256)", +"2b5011d2": "maxBuyTokens()", +"2b508f66": "sourceUriHashToId(uint256)", +"2b50dd77": "stuff2(uint256)", +"2b50fba5": "dfWallet()", +"2b511eae": "buyBunch(uint256,uint256)", "2b5129f5": "WaterMeterAcorn(bytes32,uint8,uint256,uint256,uint256)", "2b513549": "mokenNameBytes32(uint256)", "2b514749": "getTeamPrice(uint256[])", "2b5184a6": "addSponsorship(address,address,uint256)", "2b5187fd": "STCC()", "2b521416": "features()", +"2b52b515": "updateIssueToken(address)", +"2b5304fb": "isMatchingInterest(uint256,uint256)", +"2b53b397": "emergencySell(address[])", +"2b546601": "syncClose()", "2b549b82": "createAuction(uint256,uint256,uint256,uint256,uint256,uint256,address)", "2b54c3ce": "addToken(uint256,string)", +"2b551c40": "db(uint256)", +"2b5536fc": "base50Percent()", "2b554142": "redeemMany(address[],uint256[])", "2b556813": "twitterDropMultipleAmount(address[],uint256[])", "2b5570ad": "PatientFactory()", +"2b55788f": "h(uint256[],uint256[])", +"2b558793": "operatorOf(address,address)", +"2b55b84b": "addNewTokenToCreator(string,address)", +"2b561fba": "hasActiveOffer(uint256)", "2b5630c2": "displayvehicledetails(address,uint256)", +"2b567341": "addLiquidityTokensOnly(address,address,uint256)", +"2b56b52f": "updateMintingState()", +"2b570c5e": "defaultRewardParameter()", "2b57298b": "getDate(uint256)", "2b577ec4": "PREMINE_RELEASE(address,uint256,uint256)", +"2b57cfbb": "getPrice(uint256,address)", "2b58072f": "getDatasetsCount(address)", "2b58150b": "setLotteryDuration(uint256)", +"2b584508": "prenups(uint256)", +"2b585821": "barIsOpen()", "2b587555": "privateTransfer(address,uint256)", +"2b587781": "basAddress()", "2b58e202": "tokensOfOwnerFromIndex(address,uint256,uint256)", +"2b58ecef": "marketSkew()", "2b5914fe": "setUserName(string)", "2b5947e7": "checkDivsRndView(address)", "2b596a23": "balanceOfShares()", "2b597e4d": "updateBool(bytes32,bool)", "2b59d1fc": "borrar()", +"2b5a5953": "calcSwapErc20ToLunaInputs(address,uint256,address[],uint256)", "2b5ad2ad": "secondTimer()", "2b5af004": "appendDecryptedBid(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"2b5b448a": "_unsafeMakePaymentTransaction(address,address,uint256,uint256,uint64,string)", "2b5b6872": "AIRDROP_AMOUNT()", +"2b5b6f1f": "BAKE_REWARD()", +"2b5b7b4f": "m_isInvestor(address)", "2b5da915": "Property(string,string,uint256,uint256)", "2b5daa86": "newModule(string,address,bool,bool)", +"2b5dc502": "payBonds(address,uint256)", +"2b5dfc7e": "requesterIndexToAdmin(uint256)", +"2b5e3e26": "premint(address,uint256)", "2b5f227e": "encodeBytes(bytes,uint8)", "2b5fa90a": "currentselectorchoosegiverandreceiver(address,address,address,address)", "2b5faebd": "_calcTokens(uint256,uint256)", "2b5fc4ce": "RSUNToken()", +"2b601747": "canRelay(address,address,address,bytes,uint256,uint256,uint256,uint256,bytes,bytes)", "2b603c71": "allowances(address)", +"2b606d2c": "getPrintPrice(uint256,uint256)", +"2b611841": "getUsableLimitInfo(address)", "2b6133f5": "checkTierCap(uint8,uint256)", +"2b623d20": "guideRewardToWithdraw(address)", "2b625874": "distributePeerTokens()", +"2b6269ec": "tickerRegFee()", +"2b62d30b": "setContactNumber(string)", "2b62ef2a": "CryptoCurrencyToken()", +"2b63198c": "test_cleanup()", "2b633f77": "ballotCancelingThreshold()", +"2b63c300": "getCurrentMultiplier()", +"2b6414a1": "userDetails(uint256,uint256)", "2b644ac8": "_setAvatarIfNoAvatarIsSet(address,uint256)", +"2b646607": "EndRound(uint256,uint256,address,uint256,uint256)", +"2b653d44": "uniswapV2PairAddress()", "2b65d18a": "wireLimit()", "2b65e040": "ownerPool()", +"2b663986": "assetOracles(address)", "2b664d8a": "getUsersByDocHash(bytes32)", +"2b666fcf": "erc_sweep(address,address)", +"2b66c516": "getLineLevel(uint256)", +"2b66d72e": "pay(string)", "2b680932": "ANNOUNCE_WINNER_DEADLINE()", +"2b687519": "defineRules(address,address[])", +"2b68b65b": "player_(address)", "2b68b9c6": "destruct()", "2b68bb2d": "cancelContract()", "2b68fc21": "guarenteedPaybackTime()", +"2b695115": "setEnforceMinHolders(bool)", +"2b6995dc": "rescueRewards()", "2b69f40d": "PaymentServ(address,address,address,address)", "2b6a8b46": "addSpace(uint256,uint256,bytes,uint256,uint256,uint256,uint256,string,string,uint256)", +"2b6a9ecd": "getConfigCommonValues()", "2b6aa69d": "NewFunds(address,uint256)", "2b6ada6d": "WalletWithDailyLimit(address[],uint256,uint256)", +"2b6aec75": "getEthDust()", +"2b6b3c3d": "updateIntervalLength(uint256)", +"2b6b3e6f": "takeAdminAction(uint8,uint160,bytes)", +"2b6b68df": "setproducts()", "2b6b7c69": "airdropIndividual(address[],uint256[],uint256,uint256)", "2b6bbc31": "testingOnly()", "2b6bc920": "answerRequest()", "2b6bd13a": "ChainInfo()", +"2b6bf71b": "RemovedFromBlacklist(address)", +"2b6c1af3": "_immediatelyWithdrawableLimit()", "2b6c750f": "loseSponsor(uint32,int256)", "2b6d0ceb": "test(address,address)", +"2b6d5d8f": "getPoolKey(address,address,uint24)", "2b6d7706": "transferTokensManuallyToMany(address[],uint256[],uint256)", "2b6d7a66": "hasActivePass(address)", +"2b6db055": "setNiftyIPFSHash(uint256,string)", +"2b6e1923": "getUniswapPrice()", +"2b6e25f5": "checkIfStarExists(string,string,string)", +"2b6e5587": "getDaiSpreadPerBlock()", +"2b6e6581": "getMaxCollateral(address,address)", +"2b6f99b8": "swapLunaToEth(uint256)", +"2b6fb51d": "nextUserDistributionDetails(address,bytes32)", +"2b6fdc7e": "unallocatedRewards()", "2b708fc9": "usageFee(bytes32,uint256)", +"2b70a1c9": "withdrawFirstTime(uint256)", +"2b70b882": "commitPeriodActive()", +"2b70b96d": "remainingCards(uint256)", +"2b70ec55": "updateEndpointAuthorizers(bytes32,bytes32,address[])", "2b70faf1": "game_paused()", "2b711051": "investorsCount()", "2b713d71": "rankToAddress(uint256)", "2b71b0e5": "getStat()", "2b7216e5": "donateToCampaign(uint256,uint256)", "2b726758": "ETIC()", +"2b72925d": "startAirdropMDS(uint256,uint256,uint256,uint256)", "2b72c5fc": "FANCY(uint256,string,string)", +"2b738b82": "updateCumulativeReward(bytes32)", "2b73a83b": "CBS(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"2b73c746": "poolers(address)", +"2b73d01f": "totalClippable()", "2b741ed6": "claimedFees(uint256,address)", "2b7423ab": "average(uint256,uint256)", "2b747a29": "buy_tickey(address)", +"2b74dc97": "latestTimestamp(bytes32[])", +"2b74ec04": "getAnimalNameDescAttribById(uint256)", "2b750f4f": "DIVISOR_PRICE()", "2b75289b": "placeBet(uint8,uint8,uint8,int256)", "2b7568d9": "admin_withdraw_all(address)", "2b7582c0": "sendEthForReward()", +"2b75cacd": "buyLevel(uint256,uint8,uint32,uint256)", "2b76823c": "ICOBuyer(address,address,uint256,uint256,uint256)", "2b770ee9": "Ddjtab(uint256,string,string)", "2b774d46": "XWALLET()", +"2b7799a2": "becomeCandidate(uint256)", +"2b77bbcb": "totalNewStaking(address)", +"2b77e72c": "set_harvest_interval(uint256)", "2b78194f": "GAS_REFUND()", "2b7832b3": "adminCount()", "2b783bc8": "addCredentials(bytes32,bool)", "2b785960": "testBitAndSuccess()", +"2b788787": "updateBurnRate(uint256)", "2b788e33": "MAX_BOUNTYTOKENS_AMOUNT()", +"2b78c076": "getBillSplitInfo(bytes32)", +"2b7909b8": "agovToken()", "2b790ee4": "calcProfitFromTotalWon(uint256,uint256)", "2b791053": "getDailyLimitRemaining()", "2b791d6e": "storedDividendsOf(address)", +"2b7964c5": "runNumber()", "2b79d7ba": "testFailMoveWithoutTrust()", "2b7ac3f3": "verifier()", +"2b7aed0c": "_reporterOnly()", "2b7b3a6c": "createBuildingAuction(uint32,uint8,uint8,uint8,uint8,uint8,bool)", +"2b7b785e": "TreeUpdated(uint256,string,string)", +"2b7b91ca": "setBooleanNonPayable()", "2b7be84b": "AfterSchoolCrowdsaleToken()", "2b7c3138": "MANETokenPartnerCrowdsale(uint256,uint256,address,address,address,address,address)", +"2b7c41ba": "firstHouseClose(bytes32,uint256)", +"2b7c9e8b": "OpenKYC()", "2b7ce9cd": "updateThresold(uint256)", "2b7d13cc": "withdrawRemainingToken(uint256,address)", "2b7d177b": "isvalidOrg(address,address)", "2b7dd488": "totalLBSold_GENERAL_3()", "2b7e063e": "GenOutChipsNum(uint256,uint256,uint256)", "2b7e2169": "getTotalSell(uint256)", +"2b7e23e2": "_transferLITToVestingAccount(uint256)", "2b7e4295": "invadePlanets(uint256,uint256[],uint256[])", +"2b7e4e7c": "mortgageMax()", "2b7ec7fe": "getLotInvested(uint256,address)", +"2b7f0923": "swap(uint256,address,address)", +"2b7f77b6": "execute(uint8,bytes32,bytes32,address,uint256,bytes)", +"2b7fd981": "burnamint(address,address,bool,address,uint256)", "2b7fda2f": "mintAllowed(address,address,uint256,int256)", +"2b813bc0": "testAssert()", +"2b817c6c": "start_crafting()", +"2b81860b": "powerToCost(uint88)", "2b81b8a4": "alreadyRegisteredMessage()", +"2b823828": "addName(uint256,string,address)", "2b82714f": "deliverAngelsREDAccounts(address[],uint256[])", +"2b82735b": "getMsg(uint256)", +"2b828609": "assetsUSD(address)", "2b828e4a": "addTx(bytes32,bytes4,address)", +"2b82952b": "getCompletionContractDepositBalance(bytes32)", "2b82aed6": "setPayerAddr(address)", "2b82cf1f": "unFroze(address,uint256)", +"2b8343c7": "yesVotes(uint256)", +"2b83cccd": "redeem(address,uint256,uint256)", +"2b841b15": "getCalculators()", "2b84aabe": "trust(uint8)", "2b84fe83": "reserveFeeToBurn(address)", +"2b85ba38": "deploy(bytes32)", +"2b85dbc9": "isGroupReady(bytes32)", +"2b85dcc9": "getTimeSlot(uint256)", "2b85ed9c": "purchaseCount()", "2b860e6d": "transferToThroughVariable(address,uint256)", +"2b861599": "createPool(uint24,uint160)", "2b861629": "storeBlockHeader(bytes)", +"2b864166": "create(bytes32,uint256,address,address,string)", +"2b864307": "uploadProof(string,string)", "2b865dea": "airdropTokenDistributionMulti(address[],uint256[])", +"2b86a449": "getPreviousSender()", +"2b86c6c1": "setFrost(address)", "2b86d48a": "MDKToken(address)", +"2b87204c": "ironBankRemainingCredit()", "2b876784": "ZHOUToken()", "2b877dfd": "sendCoin(bytes4,bytes32,bytes32,uint256)", "2b878c7c": "KYCValid(address)", +"2b87ea4f": "solicitarPrestamo(string)", "2b88c42d": "buyItem1()", "2b88cbbf": "getExcludes(uint256)", +"2b89eeb6": "__rewardPool()", +"2b8a119d": "getCompoundingStream(uint256)", "2b8a1c00": "t2tokenExchangeRate()", "2b8a1c5a": "setGuardian(address,bool)", "2b8a36e0": "freezeTransferTime()", +"2b8a3765": "makeBuyOrder(address,address,uint256,uint256)", +"2b8a3ae6": "chill()", +"2b8a3f85": "valueIsSet200()", "2b8a789b": "ChangeGameHidden(address)", +"2b8a846c": "transferVersion()", +"2b8ae705": "bankers(uint256)", +"2b8aeb7f": "apolloContract()", "2b8af65b": "INTERFACE_SIGNATURE_ERC165()", +"2b8b030b": "ReleasedTokens(address)", "2b8b09d4": "REDGIL()", "2b8b1bc4": "transferAndFrostTokens(address,uint256,uint256)", +"2b8b3e40": "donation_address(address)", +"2b8b4ce3": "yourGLXYBalance(address)", "2b8b6667": "deregister(address[])", "2b8bbbe8": "add(uint256,address)", +"2b8c062a": "exited(uint32,uint16)", +"2b8c12be": "usersActiveDxLevels(address,uint8)", +"2b8c2e76": "payoutLog(uint256,bytes32)", "2b8c8a20": "Sale(address,uint256,uint256,uint256,string,uint256)", "2b8cc346": "acceptRequest(address)", "2b8cd2f7": "withdrawUncommittedTokens(uint256)", "2b8cd5c6": "getComponentSupport(uint16)", "2b8d0cd7": "setIcostart(bool)", +"2b8d23fb": "transferOneCoin()", +"2b8d2b42": "ethlimits(address)", +"2b8ded46": "newTokens(uint256)", +"2b8dfdeb": "getMkrToTknAmt(address,uint256)", +"2b8e1cf9": "b4seDaiPool()", +"2b8e383d": "deprecateToken(address)", "2b8e4df1": "vest(bool)", +"2b8e88b3": "removeReader(address,address)", "2b8f2042": "withdraw_funds()", +"2b8f4007": "aaveSaverProxy()", "2b8f7a49": "depositMoney(string)", +"2b8f8830": "getDeployedDrakon(address)", "2b8f899e": "OzoneToken()", "2b901a0a": "getOwnerByName(bytes32)", "2b90557c": "minSet()", +"2b9055c3": "CoinTransfer(address,uint256)", "2b905bf6": "TEAM_WALLET()", "2b90bb3a": "distributeGoTokens(address,address)", "2b9122df": "getTimeTillEnd()", "2b913151": "secondCapEndingBlock()", "2b919aa6": "validPurchaseSize()", +"2b91acc0": "calcMaxWithdrawAmount(address,address)", +"2b91fb89": "lockShardsAndClaim(uint256)", "2b920a6b": "CampaignAccountFactory(address)", "2b925b25": "minimumInvestment()", "2b92b8e5": "hashValue()", "2b92c776": "cancelBuyOrder(address,uint256,uint256,uint256,uint256)", +"2b92ff45": "engine2userList(uint256)", +"2b93eaf4": "hardTCORE(address)", +"2b93ebae": "rollUpD50Enrolled(address,uint256,uint256)", +"2b941419": "calculateEthereumFromToken(uint256)", +"2b9432a8": "quoteAll(uint256,uint256,uint256,uint256)", +"2b94411f": "withdrawAllTo(address,bool)", +"2b946259": "setMaxBP(uint256)", "2b9530d8": "transferTokens(address,uint256[])", "2b956ff7": "getUserId(address)", +"2b95fa10": "acoTokenImplementation()", "2b968958": "revokeOwnership()", "2b96a0a1": "getGamesMeta(uint256[])", "2b96c00e": "abortGame(address,uint256)", +"2b970142": "isTrade(uint256)", +"2b971859": "inCaseOfEmergency()", "2b97c6e4": "Cilox()", +"2b97dc26": "twoReturns(bool)", +"2b97e6f8": "cashiers_set(uint256,address)", "2b98222e": "getInstitutionByAddress(address)", "2b985942": "LittleStoreERC20Token()", "2b985f7c": "testNegatives(int256)", @@ -25008,15 +45652,27 @@ "2b99f3e1": "setIsTurnDataSaved(bool)", "2b9a5c34": "_getTileAt(int32,int32)", "2b9a7fae": "_updatePlayerOverrideId(uint256,uint256)", +"2b9aa671": "contract_bytes_encoded()", +"2b9aa9e9": "playTopUp(uint256,uint256,uint256,bytes32,bytes32,bytes32,uint8)", +"2b9b04ba": "consumeRecordRight(address,uint256,uint256)", +"2b9b4e0d": "get_shareholder_amount_with_index(uint256)", +"2b9b55b3": "resolveMarket()", "2b9b7573": "MAX_TRANSFERS()", +"2b9b9c6d": "accountIds(uint128)", "2b9be92e": "GanaTokenAirdropper(address)", +"2b9c7ee3": "changeDelay(uint16)", "2b9cb4f8": "uniq(uint64[])", "2b9cd08b": "submitAddOwnerTransaction(address)", "2b9ce01e": "currentIcoTokenPrice()", +"2b9cf5d3": "getExistingOrders20(uint8,address,uint256)", +"2b9d843d": "withinExecutionLimit(address)", +"2b9db81f": "BANK()", "2b9e05d1": "Betportchain(uint256,uint256)", "2b9e5088": "filterTransactions(bool)", +"2b9e8267": "insert(bytes32,uint128,uint128,uint16,uint16,uint16,bool,bytes32[],bytes32[],uint256[])", "2b9e98b1": "changeFundingPercentages(uint256,uint256,address)", "2b9edee9": "softCapReached()", +"2b9f4985": "claimStakeRewards(address)", "2b9fd446": "isHatchOnCooldown()", "2ba00198": "setBaseCap(uint256)", "2ba0ab78": "EyeToken()", @@ -25024,75 +45680,149 @@ "2ba11f2a": "CONVERSION_DECIMAL_FACTOR()", "2ba1e439": "createOraclizeCallback(bytes32,uint256,uint8,uint256)", "2ba25366": "mintInBatches(address[],uint256[])", +"2ba285e6": "getUserReferralsStats(address)", "2ba29217": "canExecute(uint256,uint256)", +"2ba29d38": "redeemer()", "2ba2a853": "thelnwaonToken()", "2ba2d714": "LordXChain()", "2ba2ed98": "setMagicNumber(uint256)", +"2ba38bcb": "STABLE_ID()", "2ba5390f": "isFirstPartReleased()", +"2ba57d17": "editDefaultPositionUnit(address,int256)", +"2ba59175": "revertTransfersInLockUpPeriod(bool)", "2ba5b90d": "get_number_of_DBs()", +"2ba5f73b": "getAIIStats(address,uint256)", +"2ba653ec": "defaultDecayPeriodVote(uint256)", "2ba665e5": "getDoc(uint256)", +"2ba6978e": "files(address,uint256)", "2ba6d8fe": "PRESALE_WEI_CAP()", "2ba73c15": "setCOO(address)", +"2ba7571e": "maxNyanLPMint()", "2ba7910a": "provider1()", "2ba7fc87": "tgeIssuer()", +"2ba8afb1": "orai()", "2ba8b7e4": "getMinimumAuctionPrice(uint256)", "2ba8f526": "OfferToGuardian(uint256,uint256)", +"2ba91fce": "sortDis100()", +"2ba947ea": "toFixedSigned(int256,int256)", "2ba96462": "supportsERC165Interface(address,bytes4)", +"2ba96f63": "magnitude(uint256)", "2ba996a5": "getListedTokens()", +"2ba9fcd5": "point()", "2baa2c58": "disqualifyBid(address,bool)", "2baab935": "Fuschain(address,uint256)", "2baabbf7": "finalSupply()", +"2bab32e4": "testDataTypeBytes1()", +"2babb1d0": "FirstCap(address[],uint256)", "2babd014": "sellSecond(uint256)", "2bac0b3b": "vendingCreateCollectible(uint256,uint256,address)", +"2bac185c": "_randChance(uint256)", "2bac276b": "badgeTransfer(address,uint256)", +"2bacb19b": "unclaimedReferrals(address)", +"2baccb99": "pay(address[],uint256[],address)", +"2bad8ba0": "_getBeacon()", +"2bae4760": "deleteOptionIdPropriety(uint256,string)", "2baeceb7": "decrement()", +"2baeda48": "crops(address)", "2baf2acb": "mintTo(address,uint256,uint256)", +"2baf3f5c": "getMaxWithdrawableEth()", "2baf4f22": "_safeFalse()", +"2baf80ee": "fundAppeal(bytes32,uint8)", "2bafc817": "EpietherToken()", +"2bafde8d": "setDelegatorMinStake(uint256)", +"2bb02c1f": "transferTokenAfterApprove(bytes32,uint256)", "2bb03ab9": "earlyPresaleEDUSupply()", "2bb03f6d": "ValidateCitySnapshot(address,uint256)", +"2bb0d30f": "mintPositionTokens(address,uint256)", "2bb0e10b": "serviceAccount()", +"2bb1388e": "batchExtensionControllers(address[])", "2bb14104": "myData()", +"2bb15215": "getBuyAmountWithGas(address,address,uint256,uint256,uint256,uint256,uint256)", +"2bb15ba5": "changeUIblacklist(uint256,bool)", +"2bb1b4c0": "startBlock(uint256)", +"2bb1e9ac": "upgradeFacadeTo(address)", "2bb20f4a": "soulsSold()", +"2bb21559": "_generateId(uint32,uint32,uint32)", "2bb22480": "calculateDrugSell(uint256)", +"2bb289b1": "setCYCLEWETHAddress(address)", +"2bb2a728": "chainadd(string,int256)", +"2bb2bb06": "transferVolumeNowBucket()", +"2bb2c931": "getSynth(bytes4)", +"2bb2da50": "nextEpochProfitCredits()", +"2bb303d5": "GetUserLastName()", +"2bb3b114": "_contractOwner()", "2bb3dcc8": "totalInvocations()", +"2bb42fb8": "setFreezeTimestamp(uint256)", "2bb4c7d5": "STribeToken()", "2bb51a05": "EDEX(address,uint256,uint256,uint256)", +"2bb5e31e": "masterToken()", +"2bb66c48": "sellCompleteSets(address,address,uint256)", +"2bb66e1d": "getFactoryWeightsAndSwapFee(address,address)", "2bb685bc": "kill2()", "2bb6ccf1": "delAuditAddress(address,address)", "2bb70e54": "lockMasterTransfers()", +"2bb7199c": "check_full_auth()", +"2bb768c2": "award(uint256,address,uint256,bytes32[])", "2bb768f0": "adminGetCityData(address)", "2bb77b8e": "setRewardAddr(address,address)", +"2bb7bc01": "RatePerCoin(address)", "2bb81546": "getClaim(string)", +"2bb8607b": "cro()", +"2bb8d152": "setPresaleContractAddress(address)", +"2bb910d2": "_finalizeRunoff(uint256,address)", "2bb9cb1d": "buyXid(uint256,uint256,bytes32)", +"2bb9cb3f": "grantVoteRight(address)", "2bb9ffef": "startBalance()", "2bba2d6d": "changeInvitedReward(uint256)", +"2bba52b8": "_yTokens()", +"2bbb01fc": "pState(address)", "2bbb44b8": "adminCreat(address)", +"2bbb5b45": "TEAM_RESERVED_AMOUNT3()", +"2bbbd91d": "calculateTokenReceived(address,uint256)", "2bbc50b5": "getTotalInvestedEur()", "2bbc9396": "periodICOStage2()", "2bbd3c93": "ART_CONTRACT_ADDRESS()", +"2bbd48c0": "updateYFTEPerBlock(uint256)", "2bbd59ca": "messages(bytes32)", "2bbd84e8": "totalPurchaseValueInWei()", "2bbd88f3": "LOBO()", "2bbd9530": "unregisterAddress(bytes32)", "2bbdb18a": "hasEnoughApproval(uint256,uint256)", +"2bbdb2cb": "oxygen()", "2bbe62d6": "createSetup(address,uint256,uint256,bool,address,uint256)", "2bbeac91": "lockTokenHolder()", "2bbf532a": "isUnlocked(address)", "2bbf54e8": "isBuyStopped()", +"2bbf744b": "setTickerSymbols(bytes32[])", +"2bbfb66e": "_changeSupportRequiredPct(uint64)", +"2bc06a26": "movingAveragePriceFeedInstance()", "2bc06a92": "canSend(address)", "2bc0fe34": "infoMining(address)", +"2bc1281e": "_limitTransferAmount()", +"2bc158b1": "pathsAdvisor()", +"2bc194d8": "cancelAndBuyCall(uint256,uint256)", +"2bc1ed26": "getMeAddr()", +"2bc22628": "getStakerEarnedStakeCommission(address,uint256)", "2bc24d52": "IXTPaymentContract(address)", +"2bc2d13a": "OpenHedgeProtocol()", +"2bc2f9bb": "migrateAddress(address,address)", "2bc31ca4": "developers()", "2bc3217d": "forbid(address,address,bytes32)", "2bc3656c": "buyTokensPreSale(address,uint256)", "2bc38531": "setup(string)", +"2bc38a81": "linkOldToNewToken(uint256,uint256)", +"2bc38f78": "upgradeTo(string,string,address)", +"2bc38fe3": "equalBytes32PassTest()", +"2bc394f4": "withdrawAddr_(address)", "2bc3a349": "GWTCrowdsale()", +"2bc3db0a": "chainsList(uint256)", "2bc402fa": "TOTAL_PREALLOCATION()", "2bc40f9a": "setAddressUInt8(bytes32,bytes32,address,uint8)", "2bc43fd9": "claim(address,uint256,uint256)", "2bc46f27": "getQuestionIndex(uint256)", "2bc4aa1a": "showInvestEther(uint256)", +"2bc51c6d": "priceOracleAddress()", +"2bc51f6d": "_updateRewards(address)", "2bc53254": "priceFci()", "2bc542a4": "votePublic(address,bool)", "2bc57d73": "_doTransferFrom(address,address,uint256,bytes,address,bool)", @@ -25101,76 +45831,133 @@ "2bc5f9cb": "updateRateInWei()", "2bc6597c": "depositsTillNow()", "2bc67bde": "MIN_TASK_VALUE()", +"2bc6acc3": "controllerRedeem(address,uint256,bytes,bytes)", +"2bc74946": "hardCapTokenPerEth()", +"2bc79c12": "claimableAmounts(address)", +"2bc7d67a": "exchange(uint256,uint256,bool)", +"2bc7dc9c": "getBurnRatio()", +"2bc7e29e": "mintedVAIs(address)", +"2bc7f7c0": "MessageSpanStepChanged(uint16)", "2bc80f3a": "T()", "2bc85d5d": "updateTokenPriceProvider(address)", "2bc86dc0": "AddBankerRound(uint8)", "2bc89ff6": "REV()", "2bc8ba53": "solicitaPagamento(uint256)", +"2bcb1e86": "erctokenAddress()", "2bcb849c": "updateFeeProvider(address)", +"2bcbcc01": "StakeLP_Test(address,uint256,uint256,uint256)", "2bcbdf7f": "s29(bytes1)", "2bcbe1b5": "getCelebrity(uint256)", "2bcc79a7": "MockDeed(address)", "2bccf04e": "createSale1()", +"2bcdcdf6": "shortRateLastUpdated(bytes32)", +"2bce37c5": "PriceChanged(uint256,uint256,uint256)", "2bce9e7b": "updateToken(address,uint256)", "2bcef221": "signOne()", +"2bcf161c": "getTotalRewards(address)", "2bcf300e": "LC(uint256,string,string)", "2bcf5760": "addToken(address,address,uint256,uint256,uint256,uint256)", "2bcf892c": "div32(uint32,uint32)", +"2bcfa327": "getLastBlockFrom(address)", "2bcfcd7b": "getBonusAmount()", "2bcfe0a6": "FitToken()", "2bd00610": "numberOfCyclePlayers()", "2bd0bb05": "totalSpentPerDay(uint256)", "2bd0ce0f": "cancelBuyTokenOrder(uint64)", +"2bd0f6a0": "transferAndLockToTeam(address,address,address,address,address,address)", +"2bd10bbc": "decrementEtherDeposit(uint256)", "2bd152f0": "_getCollectibleDetails(uint256)", "2bd15c25": "_doCancel(uint256)", +"2bd1755a": "lastRewardUpdateTime()", "2bd185e5": "appendTokenHolders(address)", "2bd21738": "CAIDCrowdsale(address,address)", "2bd2523e": "cooAddReviewer(address)", "2bd2a965": "openNextSale(uint256,bytes24,uint256,bytes24,uint256)", "2bd30ca3": "costContract()", +"2bd30f11": "islocked()", +"2bd3152d": "isEnabledForAccount(address)", +"2bd3280d": "AcceptLoan(bytes32)", +"2bd350c8": "a_CaQ(address,address[],uint256[],uint64)", +"2bd37eeb": "SetCitizenData(string,int256)", +"2bd39bc5": "LogItemExtended(address,uint256,uint256,uint256)", +"2bd46683": "DayMinted(uint256,uint256,uint256)", +"2bd470d3": "encodeEthOrder(address,address,address,address,bytes,bytes32)", +"2bd49780": "deposits(uint256,uint256)", "2bd4aa40": "total_amount(string,uint256,uint256)", +"2bd51dea": "waitLine()", "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()", +"2bd608f4": "getEVMScriptRegistryAppId()", +"2bd63f0c": "getRatio(bytes32)", "2bd71875": "hasMissedCheckpointSubmission()", "2bd75c3c": "sendMarketingAndRNR()", "2bd7cd17": "killToken()", "2bd7e5fc": "getSGNAuthorizationManager()", +"2bd8335f": "probabilitiesRare(uint256)", +"2bd8faac": "pendingLv1(uint256,address)", "2bd928e4": "commonDeposit(address,uint256)", "2bd9530a": "editGas(uint256,uint256)", "2bd97c6d": "getDawexSignature(string)", +"2bd9f3d9": "removePermit(address)", "2bda04c5": "autoFreeze()", +"2bda0c85": "getUserDepositDetails()", "2bda1a55": "frozenReserveTeamRecipient()", "2bda2a49": "BHIMToken()", "2bda4eee": "getBridgeValidatorsInterfacesVersion()", +"2bda5ac3": "cancelTokenSale(uint256)", "2bdad637": "tokensSupply()", "2bdb0d92": "getShareToken()", "2bdb33c3": "getNumberOfDisputedDealsProPatient()", +"2bdb6f96": "getDeployableContractDeployedCount(uint256)", "2bdb7097": "setRate(address,uint256)", +"2bdbbc56": "computeReleasableLP(uint256,address)", "2bdbc0ce": "ContractTokensReclaimed(uint256)", +"2bdbe219": "calculateTokensToMintWithSnx(uint256,uint256,uint256)", "2bdc05c5": "assertEq26(bytes26,bytes26,bytes32)", +"2bdc2fd3": "isInitialized(int24)", +"2bdc32ff": "carrier()", +"2bdcc167": "numPaid()", +"2bdcd1ab": "teamTotalBetAmount(uint256)", +"2bdcd691": "stakaingStatus(bool)", "2bdcd90d": "claimChip(uint256,string)", "2bdd2290": "setBlockNum(uint256)", +"2bdd34e3": "track(uint256,uint256)", "2bdd530b": "holderReferalTokens()", "2bdd5958": "Purchased(address,uint256,uint256,uint256)", +"2bdd695a": "treasuryDivRate()", +"2bddb933": "release_share_bonus(address[],uint256[],uint8[],uint256[],uint32[],uint32[],uint32)", "2bddb9b5": "canTransferIfLocked(address)", "2bddc31c": "coauthor()", +"2bdddd5f": "marketDapps(uint256)", +"2bde1add": "setredeliverynum(uint256)", "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()", +"2bdfcedf": "set_usdt_rate_up(uint256)", +"2bdff851": "multiBuy(uint256,uint8[4][])", "2be09561": "startMint()", "2be10384": "_removeKey(address)", +"2be157b3": "totalMonthlyRewards()", +"2be21260": "reInsert(address,uint256,address,address)", +"2be21d79": "calculateEthereumReceivedSell(uint256)", +"2be23362": "swapEthToLuna(uint256)", +"2be2438b": "setMinimumBetAmount(uint256)", "2be29d71": "addressPartnerships()", "2be2ad3c": "logUniverseForkedCalled()", "2be2d95e": "amountOfInvestments()", "2be2f085": "getCostForRace(uint8)", +"2be30d0a": "Utility_fee(address)", "2be32dbb": "categoryCount()", +"2be37444": "GuardianSaleCreate(uint256,uint256,uint256,uint256,uint256,uint256)", "2be3d1c9": "_getDroneDefaultAbility(uint256)", "2be3d2df": "CreamCoin()", +"2be3e43f": "FreeHybridization(uint256)", +"2be41896": "getUpdateTime()", "2be4a903": "removeUsers(address[])", "2be4f3f5": "boardCost()", "2be4fd9c": "getRemainManus()", @@ -25178,14 +45965,24 @@ "2be521b2": "increaseBalance(address,address,uint256)", "2be52293": "setExchangeOracle(address)", "2be596ee": "unpauseInternal()", +"2be5b36d": "FPSaddState(uint256,string,string,string)", "2be5e93a": "TOTAL_SUPPLY_UPPER_BOUND()", "2be64f51": "RegisteredCampaign(address,uint256,address)", +"2be65225": "voterMap(address)", "2be65e2a": "getFree()", "2be65e45": "setMarketingRates(uint256,uint256,uint256)", +"2be678be": "AddressClaimed(address,string)", +"2be682d4": "setCompound(address)", +"2be6937d": "setInitialDistributionFinished()", +"2be6b296": "tokenIssuedPartner()", +"2be6c78d": "timeRemaningHours()", "2be6d43c": "ARKTagger_1_00()", "2be6ec1f": "NULL_ENCRYPTION_ALGORITHM_ID()", +"2be72cd5": "deploy(string,uint256,uint256,uint256,address,address)", "2be79833": "nonFungibleRegistry()", +"2be7e48e": "stakeLockedWithdraw(address)", "2be86e01": "jcrUsdRate()", +"2be88ed6": "PrivatePurchaserTokenTransfer(address,uint256)", "2be8c2a5": "transferTokensTo(address,uint256)", "2be8f373": "changeWLMWallet(address)", "2be90846": "enableBonus()", @@ -25193,281 +45990,534 @@ "2be9da97": "getBestAngel()", "2beaead0": "lastDivideRewardTime()", "2beaf416": "ShareXERC20()", +"2beafaf2": "setLGEFinished(bool)", +"2beb811a": "SetUNStakeFee(uint256)", +"2beb8159": "setTaxRate(uint256,uint256)", "2bec76fd": "maxBetCoinDice()", +"2becb64d": "_verifyPermissions(address,address)", "2becb6f7": "STARTING_SPERM()", +"2becfd04": "getPackagesCountS()", "2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", "2bed69e0": "founderPercent()", +"2bed9e0c": "removeAggregator(bytes32)", +"2bee1194": "mapPID_finalised(uint256)", "2beea5c5": "testhash(uint256,uint256)", "2beeaca4": "whitelist(address,string)", +"2beeb722": "lockedTokens_3(address)", "2bef4595": "authorize(address,address)", +"2bef721f": "returnManagerBNB(address,uint256)", +"2befabbf": "mintIdleToken(uint256,bool,address)", +"2befd4ad": "createOffer(address,address,address,uint256,uint256)", "2bf04304": "whitelistAddresses(address[])", "2bf0aeda": "DigiToken()", +"2bf0f81c": "setName()", +"2bf16458": "genericCall(address,bytes,uint256)", "2bf1aa1d": "EthHodler(string,uint8,string)", "2bf1f9da": "restart(bytes32,bytes)", "2bf29ddb": "EventRedeemRisk(address,uint128,uint256,uint256)", +"2bf334a0": "_unlockBalance(address,uint256)", "2bf34551": "setRate340()", "2bf34e60": "getUuid(uint256)", "2bf37c42": "addFunds(uint256,address)", +"2bf3ad61": "stLaunchFee()", +"2bf43573": "getIsOpenStrategy()", "2bf435f9": "myMethod(string)", "2bf4760b": "getEthPerfit(address)", "2bf4d812": "AumentaToken(uint256,address)", "2bf4e53d": "getCurrentShareholders()", +"2bf57fca": "withdrawICOFunds()", "2bf59135": "addLootbox(address,uint256)", +"2bf596cf": "prepareSwapBassets(address,address,bool)", +"2bf5a032": "planRedeemed(address,uint256,address)", "2bf5a2ea": "mintForFounders()", "2bf6e0a5": "setContract(address,address)", +"2bf72854": "getAprOptions(address)", "2bf7299b": "setMaxParticipants(uint256)", +"2bf74f6c": "monthlyPercentage(uint256)", "2bf79c94": "getTokenByOwner(address)", +"2bf7a930": "registerLabelAndKey(string,bytes32,bytes32,address)", "2bf7d279": "shouldRevertWithReturn(bool)", "2bf7f6ba": "privateSell1LockEndTime()", "2bf81dd3": "NPTToken()", "2bf82843": "pay(address,uint128,string,uint32)", +"2bf83b85": "proofOfAuthenticity(uint256,address)", "2bf885f0": "addNote(bytes32,bytes20,string)", "2bf8faba": "AimiToken(address,uint256)", +"2bf90baa": "confirmMintRequest(bytes32)", +"2bf9518c": "onDeposit(address,uint256)", "2bf9ab0b": "getPresellUpToTime()", +"2bf9b18e": "transferSimple(address,uint256)", +"2bfa0eff": "setioc(uint256)", +"2bfaa50f": "_createAddressString(address,bool)", "2bfacd62": "calculateLockedBalance(address)", "2bfaf3da": "Oracle(bytes32)", +"2bfbd9cf": "lockLiquidity(uint256)", +"2bfc0c37": "adminMintUser(address,uint256)", +"2bfc25b5": "MINIMUM_APLFI_PER_BLOCK()", "2bfc33ee": "KDI()", +"2bfc388e": "addLockups(address[],uint256[],uint256[])", "2bfc4c69": "getStringValue()", +"2bfc4eaa": "feesDestinators(uint256)", +"2bfc9c23": "getSOSBorrowRate()", "2bfd2a13": "calculate_dividend(uint256,uint256)", "2bfd2e06": "buyBasicUnit(uint256,uint256)", "2bfd91d4": "getMessageSigner(bytes32,uint8,bytes32,bytes32)", "2bfda313": "getFile(uint256)", +"2bfdf307": "feesToken()", "2bfe243f": "minStartPriceForCommishAuctions(uint128[])", +"2bfe796a": "localToGlobalId(uint256,uint256)", "2bfea0e4": "unpauseTransfer()", "2bfefd5c": "calcMultiStage()", "2bff4b66": "reapFarm(address,address)", "2bff5630": "coachTakeOff(uint256)", "2bff5fc4": "Incomplete()", +"2bff884f": "migrationComplete()", +"2bff9283": "getToLength()", +"2bffbd84": "getSingleDepositAmount(address,address,uint256,uint256)", "2bffc7ed": "add(string,address)", +"2c001910": "inviteInfoV1(address)", +"2c009cd2": "logDeposit(address,uint8,uint256)", +"2c010100": "claimLPTokensToFarmingPool(address)", "2c011e7b": "winning_month()", "2c01bb1c": "LogNewOwner(address)", "2c01d52b": "_createRegion(string,address,uint256)", +"2c01e2a4": "ownerPullEth()", +"2c020602": "usdtFees()", "2c027eb9": "getDeployArrayLength(uint256)", +"2c028b53": "ListingMode()", "2c02d622": "precalculate()", +"2c034132": "pool1Amount()", "2c035157": "calculate_minimum_contribution()", +"2c036212": "newMonthlyExec(string,address)", +"2c03de37": "setVipAddress(address)", +"2c040845": "borrowMinThreshold()", "2c044779": "getPublic()", "2c04bf0c": "transferIXT(address,address,string)", +"2c04f139": "initialBountyLimit()", "2c052031": "getInsertPointForNumTokens(address,uint256,uint256)", +"2c05a8e6": "lastRequestBitcoinPriceId()", +"2c065468": "birdRate()", "2c0657c2": "additionalBonusAmounts(uint256)", "2c06862b": "setCanBuy(bool)", +"2c072d9f": "editPeriod(uint256,uint256,uint256,uint256,uint256,uint256)", "2c07398d": "registerObserver(address)", "2c0784ce": "send_DividendToAddress(address,uint256)", +"2c0790d4": "onWithdraw(address,uint256,uint256,bool)", +"2c07a624": "unclaimedDevFund()", +"2c07cd45": "Referred(address,address)", +"2c07eebf": "erasToEarn()", +"2c07f74f": "WithdrawReward()", +"2c081f77": "TLT()", +"2c085840": "resetClass(uint256)", "2c089048": "tokenCreationInit()", "2c08ab0c": "ENJCrowdfund(uint256,address)", +"2c08dd43": "buyx(address,address,uint256)", "2c08eb0b": "changeTokensPerEther(uint256)", +"2c09055e": "getSetData(uint256,uint256)", +"2c09555a": "getSwapType(uint256)", +"2c097993": "setFeeDividend(address,uint256)", "2c0994c1": "getMicroWalletAddress(uint256)", +"2c09b329": "executeTransaction(address,uint256,bytes,uint8,bytes32)", "2c09bef7": "priceSetter()", +"2c09c158": "seedLiquidityPool()", "2c0a036b": "resetICO()", "2c0a33ef": "BethereumToken()", "2c0a3f89": "castVote(uint256,uint256)", "2c0a5c08": "BuyIn()", "2c0a7e33": "pendingEthWithdrawal()", "2c0aadc1": "nextGameInitialMinBetSize()", +"2c0ad2ad": "fromCode(bytes4)", +"2c0aeba9": "ListProperty_details(uint256,uint256,uint256,uint256,uint256)", "2c0b9685": "distributeeBTG(address[])", +"2c0ba56a": "deactivateGateway()", "2c0bec2f": "sendCurrentPayment()", +"2c0bf9c6": "setRebaseBand(uint256)", +"2c0c4d1d": "distributionDeposits(uint256)", "2c0c6488": "AirTrafficController(string,address[],address,address)", "2c0c8563": "SetCoin(address,address)", +"2c0cca6f": "govConstructor(address,address)", "2c0d0dbe": "AddProduct(uint256)", "2c0d4e70": "RYNOTE()", +"2c0da79a": "proposeBid(string,string,string,address[],uint256[],string[],bytes[])", "2c0e0054": "lockInGuess(uint8)", "2c0e3850": "storeInContract(address,address)", +"2c0e98e1": "marketBuyCraneWithETH(address[],uint256,uint256)", +"2c0ef004": "sh()", "2c0f13a7": "icoStartTimestampStage3()", +"2c0f5f59": "fromName(bytes32)", "2c0f7b6f": "numCampaigns()", +"2c0fb4dd": "addrCET6Count(address)", +"2c0fc499": "UpdateLeaderboard(address,uint256)", "2c0fc8cb": "registerHandle(bytes32)", +"2c103c79": "proposalPeriod()", +"2c10a4e8": "deployAndExecute()", "2c10e90c": "update(address[],uint256[])", +"2c1115ef": "readyToBreed(uint256)", "2c1169ac": "ELOT()", +"2c12839e": "ForSaleBought(uint256,uint256,address,address)", +"2c1298dc": "initLoan(uint256,bytes)", "2c12cc79": "HuumanStandardToken(uint256,string,uint8,string)", "2c1352cf": "contacts(address)", "2c135b93": "marketCap()", +"2c137c4d": "collectedUnsoldTokensBeforeWindow()", "2c138236": "reservedTokensWallet()", +"2c14155f": "activeSlot_ap7()", "2c142511": "_offlineHash(bytes32,bytes32,bytes32)", "2c145eef": "DutchAuction(address,address,address,address,uint256,uint256,uint32)", "2c154345": "getParticipantStake()", +"2c156346": "assetAmount(uint112,uint112,uint112)", "2c16c6ca": "addPrivilegeAddress(address)", "2c16cd8a": "record(uint256)", "2c174073": "PeriodSale(uint256,uint256)", "2c181929": "getChainWork()", "2c183fad": "mintTokenWithUnit(address,uint256)", +"2c18851c": "oneMinter()", +"2c18d553": "calculateTransferAndStakingFee(uint256)", +"2c18fbc9": "END_CAP_TIME()", +"2c1918e8": "currentTotalSupplyHolders()", +"2c192526": "transferKeeper(address)", "2c197985": "VirtualExchange(address,address)", "2c199889": "request(string)", +"2c19d226": "safeMintSubURIByController(address,uint256,string,bytes)", "2c19d480": "emitAccessGiven(address,bytes32)", "2c19fbbb": "getUserTX(address,uint256)", +"2c1a288f": "BuyPack(uint256,address,uint256,uint256,uint256[])", +"2c1a613e": "testSupportMarket_FailsIfPriceNotAlreadySet()", +"2c1b106e": "pendingHdcore(uint256,address)", "2c1b17e4": "BonBonToken(address)", "2c1b38ee": "isValidTokenId(uint256)", "2c1bcb4f": "ContractLocked(uint256,string)", +"2c1be1bd": "frog()", +"2c1c11af": "ManagerUpdated(address)", +"2c1c1e44": "exitStopLimit()", +"2c1ce59c": "setPhoenixAuthAddress(address)", "2c1cf6f6": "updateTradeStatus(bool)", "2c1cf78b": "ETHinvested()", +"2c1d2c3c": "protections(uint256)", "2c1d68d4": "countStakeHolders()", "2c1e064b": "_translateWSIC(uint256)", "2c1e6e48": "getADminFromDutchProxy(address)", "2c1e816d": "setAdminAddress(address)", "2c1ea461": "nextController()", "2c1eed5f": "isPlayer(address,address)", +"2c1ef96a": "withdrawlToken(address,uint256)", "2c1f1f8f": "getFreeBalances()", +"2c1f884d": "checkSameOriginReentranted()", +"2c1fad07": "getStartDay(uint256)", "2c1fecfe": "isRefundable()", "2c1ff9f8": "mInviteAddr()", "2c203edd": "getOrderDetails(uint256,uint256)", +"2c2076df": "_REMOVAL()", +"2c20afc4": "chosenSAFESaviour(bytes32,address)", +"2c20c5cf": "Invest(address,uint256,uint256,uint256[10],uint256)", "2c2146aa": "verify(address,address)", "2c215998": "updateStatus(string)", "2c21ec94": "ethUpdates(uint256)", +"2c21efda": "userBurn(uint256,bytes32,uint256)", "2c2206e4": "setAuditReportHash(uint256,string)", "2c22af02": "cidTokenSupply()", "2c22f2e2": "burnSplitPercent()", +"2c22f455": "nil()", +"2c23064a": "winnerFundWithdrawn()", +"2c231437": "govenors4_open()", "2c232609": "dislikeCelebrity(uint256[],uint256[],uint256)", +"2c235a93": "multisendErcFETH(address[])", "2c237912": "processSellRequestFiat(uint256,uint256)", "2c23f91a": "ignoreTokenFallback(address,bool)", +"2c241929": "getLGEContributionsValue()", +"2c241f91": "setPRIRate(uint256)", "2c244618": "calculateVestedOptions(uint256,uint256,uint256)", "2c24909c": "getVotedTokensPerc()", +"2c24e132": "InternalDistSchedules(uint256)", "2c24ecc7": "BecToken()", +"2c25158a": "POWER_MONTH_12()", +"2c25432b": "addrBeenCreator(address)", "2c2622db": "LOCK_SLOTS()", +"2c2646bd": "setSenderPrice(uint256)", "2c2689b5": "getModuleAddress(string,string)", "2c270617": "TempleDonationTrackingNote()", "2c270c7e": "tokensFor1EthP2()", "2c276699": "CheckOut(uint256)", +"2c27c29f": "itemWeights(uint8,uint256)", "2c27e581": "publicEndTime()", "2c28aa1b": "RATE_FOR_WEEK3()", "2c28f579": "goLive()", +"2c293ed3": "initializeRewardToken(uint256,address)", "2c296656": "changeRequiredDevSignatures(uint256)", "2c297478": "prolongH(uint256)", +"2c297aa1": "auditHashes(uint256)", +"2c29bbe9": "lastBlockSent()", +"2c29c368": "dgeWebExAmountT1(address,string)", +"2c29d17e": "topMiner()", "2c29eedd": "startPrivateSale(address,uint256,uint256)", "2c2aa66c": "PokeCentral()", +"2c2ab7f6": "users_7(address)", +"2c2acfe0": "that(bool,bytes32,bytes32,address)", "2c2aecf5": "isProcessNeeds()", +"2c2b2450": "getIncentivizers()", "2c2b4358": "setPercentOfPool(uint256[])", +"2c2b8770": "guessTotalUsers(uint8)", +"2c2bc258": "isBurnoutRunning()", "2c2bc50b": "LOWIQ()", +"2c2cb9fd": "ilks(uint256)", "2c2ccdfb": "kittyCoreAddress()", +"2c2d08d6": "Tem(uint256)", +"2c2d872d": "updateCardIdList(uint256[][])", "2c2da3cf": "expPercentage()", +"2c2dccc0": "blockDay()", "2c2de40a": "setMaximumSellableTokens(uint256)", +"2c2df742": "modifyAdminAddress(string,address,address)", "2c2e3abe": "allocateFoundersTokens()", +"2c2e9072": "ChangePet(uint256,uint256,uint256,uint256)", +"2c2eb94a": "collect(address,uint256,address)", +"2c2ecbc2": "log(address)", +"2c2fba2b": "LogErrMsg(string)", "2c2fdc35": "getBalanceFromRound(address)", +"2c30268e": "smartmine()", "2c305abf": "updatePlayedNum(address,address,uint256)", "2c308714": "returnBetAndOffer(uint64)", "2c321ea1": "abToken()", +"2c3255c3": "generateLiquidity()", "2c327538": "ProofOfDiligenceToken()", "2c329e99": "Last_block_number_and_bloctime_used()", +"2c32d4b6": "getAmount0Delta(uint160,uint160,uint128,bool)", +"2c33614e": "Top3TeamDistance()", "2c344d14": "tokenRewardPreDGZ()", +"2c3456d6": "setEnumNonPayable()", "2c349627": "pauseToken()", "2c34ce05": "increasedPrice()", "2c34e6b9": "addDepositQuest(address)", +"2c34ec78": "approve_855(address,uint256)", "2c354067": "executionBlockOf(uint256)", "2c3597a1": "testToUint64()", "2c3599a5": "VINToken()", +"2c3636d3": "enableBountyReduction()", +"2c365902": "emitBuyTokenEvents(uint256,string,string,address,address,uint256,uint256)", +"2c3678cc": "miningRate()", +"2c36b69c": "isTimelockSet()", +"2c36dd5c": "updateState(uint256,uint256,uint256,uint256)", +"2c378290": "maxRewardLevel3Number()", "2c3788b1": "registerUserIfNeeded(uint256)", "2c37a512": "bountyLockEndTime()", +"2c37dba9": "escrowFee(address)", +"2c383a9f": "method()", +"2c387275": "daiAddress()", +"2c388d5d": "authorizeCaller(address)", +"2c38d8b8": "startSaleROTH(uint256,uint256,uint256,uint256,uint256)", +"2c394d99": "getFirstJSONPart(address,uint256,address)", +"2c3963f3": "setBunnyNames(string,string,string,string,string)", "2c39d855": "confirmAndForward(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", "2c39da94": "batchSend(address,uint160,uint256[])", "2c3a15a0": "EidosToken(address,address)", "2c3a1d5d": "Nerotoken()", +"2c3ab406": "COREWETHUniPair()", "2c3af973": "GStarToken()", +"2c3b2ac5": "openTreasure(uint256)", +"2c3b4096": "validityBondAttoCash()", "2c3ba9e1": "addManyRegistered(address[])", +"2c3bac10": "add5UUIDs(uint256,string,string,string,string,string)", +"2c3bae92": "fromPair(address,uint256)", +"2c3bfc08": "amountOutMin()", "2c3c42b2": "WLM()", +"2c3c9f20": "listMoods(uint256)", "2c3ca924": "handleProductionIncrease(address,uint256)", "2c3ccb98": "levelUpByPenguinId(uint256)", "2c3d3453": "csale()", +"2c3d356b": "isWithdrawnInWithdrawalMode(uint32,address)", +"2c3d376d": "hashToKey(uint256)", "2c3d38f0": "mintTokens(int256,uint256,address,address)", +"2c3db6ea": "withdrawBenefactorFundsTo(address)", "2c3dcdcf": "issueDuringICO(address,uint256)", "2c3dfca7": "getPhException(bytes32)", +"2c3e4cb3": "batchId(uint256)", "2c3ee88c": "getRedeemAmount(uint256)", +"2c3f06a0": "setLastLPCount()", "2c3f1304": "getSlotLength()", +"2c3f60d2": "legalFile()", "2c3f6a4f": "getMineCooldown(uint256)", "2c3f9b80": "getActiveFlagRate(uint16)", +"2c3fe731": "winGame()", +"2c406c8d": "priceData_()", +"2c407024": "removeLiquidityAVAXWithPermit(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)", "2c408059": "getFallbackAddress()", "2c409871": "MobileTokenAlert()", "2c416754": "doBurn(address,address,uint256,bytes,bytes)", +"2c41b7a4": "_policyAddress()", +"2c41f2a6": "getCirculatingSupplyTotal()", "2c420201": "getDataCounterForSubject(uint256)", "2c421074": "exploreETHFee()", "2c425687": "EthTeamContract(string,string,address,uint64,uint64,address)", "2c42f2e8": "toSendFromStorage()", +"2c435fef": "_decode_sol_int64(uint256,bytes)", +"2c43e2ef": "claimRewardsForPools(address[])", +"2c442400": "UpdateVDV(uint256,uint256)", "2c4449ab": "_rankByNumber(uint256)", "2c445273": "_payEthereumAndDistribute(uint256)", "2c4464d4": "Dryad()", "2c4482c5": "_assignCountry(uint256)", "2c44a261": "updatePrivateSaleCloseTime(uint256)", +"2c4518cb": "takeTokensBackAfterRedeemOver(uint256)", +"2c45ed78": "orderToDepositAmount(bytes32,address)", "2c45f068": "transfer(uint128,bytes16,uint32)", "2c4617d7": "getMethodState(string)", +"2c465784": "testSetMarketInterestRateModel_SuccessfulUpdate()", "2c46b205": "query()", +"2c46c3ed": "removeLiquidity(uint32,uint128,uint32)", "2c46d8d5": "EndRound(uint256)", "2c47413f": "ERC20PGEToken()", +"2c4774b1": "token180FrozenBalances(address)", +"2c47b595": "changeOracleTypes(address[],address[],uint256[])", "2c4806d8": "ordersFor()", "2c4879d1": "AFWBurn(uint256)", "2c4881ff": "withdrawMoneyByAdmin(uint256)", +"2c48a08b": "cheroes()", "2c48e7db": "confirmTransfer(uint256)", +"2c491293": "incrementTotalEscrowed(address,uint256)", "2c4a84f7": "StaxToken()", +"2c4a952b": "sendFrom(address,uint256,address,uint256)", "2c4ab666": "enact_withdrawal_greater_equal(address,uint256,uint256)", "2c4ac770": "sendMessage(address,bytes,bytes32)", "2c4aecc1": "sampleBoolRetFalse()", "2c4b2334": "setTeamWalletAddress(address)", "2c4b27ae": "burnAirDrop(address[],address)", +"2c4b2d8a": "tradeTokenForTokenUsingReservesSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool)", "2c4bca2c": "crowdsaleDeadline()", "2c4bf8bc": "increasePresetTransfer(address,uint256)", "2c4c2719": "MAXIMUM_CAP()", +"2c4c926b": "purposeProposal(address,address)", "2c4cb4be": "removeRegistryFromNameIndex(address)", "2c4d25f5": "DeathFactor_ii()", "2c4d4d18": "changeMinter(address)", +"2c4db9b4": "approveRepayment(address,address,uint256)", "2c4e55c5": "killedContract()", "2c4e591b": "totalGames()", "2c4e722e": "rate()", "2c4e8885": "unLinkFromMasterWalletInternal(address,address)", "2c4e9d2b": "AuctionWon(uint64,uint64,address,uint256)", "2c4ee4d4": "ObirumTalk()", +"2c4f3d21": "EmitTokens(uint256)", +"2c4f44b9": "testFailIfNoContract()", +"2c4f618f": "testFail_sub()", +"2c4f93f9": "ldoPath(uint256)", "2c4fa8b2": "assignAnotherOwner(address)", +"2c500bc8": "getBPool()", +"2c50a4da": "activateEmergencyCooldown()", "2c5104f5": "MTC()", +"2c51166e": "_contributors(uint256)", "2c511788": "addToWhitelistAllocation(bool,address,uint8)", "2c512d6e": "getTokens(address,uint256)", "2c526196": "_mint(uint256)", +"2c52bef9": "batchFuturesTrade(uint8[2][],bytes32[4][],uint256[11][],address[3][],bool[2][],uint256[5][],string,string)", "2c52d930": "feeForArtWorkChangeRequest()", "2c532a71": "ChangeCrowdSaleDate(uint8,uint256)", "2c5337dd": "winnerAnnounced(address,uint256)", +"2c538df6": "setAllowedContracts(address,bool)", +"2c53bc64": "postUpgrade()", "2c53f31b": "bonusWindow2EndTime()", +"2c5426f3": "ORACLE_TYPE()", "2c54357f": "lifeReserveAllocation()", +"2c5444e2": "setGovernorBravo(address)", +"2c547b3d": "taxDestination()", +"2c54849a": "getBalanceOfVoted(uint256,address)", +"2c54a1fe": "contractExpiration(address,address)", "2c54de4f": "transferToken(address,address,address,uint256)", +"2c54dff2": "insertVote(bytes32)", "2c54e6d9": "getCanvasCount()", +"2c5535c2": "freeMintFrozen(address)", "2c560ec0": "queryInfo()", +"2c560f89": "minProtectionDelay()", +"2c56320f": "couponSupply()", "2c56462f": "addAllowedContract(address)", "2c566ae5": "length(address)", +"2c568f53": "setMinePrice(uint256)", +"2c569a9f": "fixretirement(uint256)", +"2c56ed27": "rentOutproperty(string,string,uint256)", +"2c5717ce": "findOnePBEPent(uint256)", +"2c572177": "withdrawsETHLiquityTokens()", "2c572eb5": "_isFuture(uint256)", "2c574a94": "next_tower_index()", "2c577347": "changeMakeFee(uint256)", +"2c57dec1": "Release(address,uint256,uint256)", "2c57fdf4": "create(uint8,uint8,uint64,uint64)", +"2c580a1f": "nominateFeeCollector(address)", "2c580a35": "revokeAndReclaim()", "2c58139c": "teamRelease(address)", +"2c582044": "validateTokenToKncRateToBurn(uint256)", +"2c58c170": "approve_684(address,uint256)", +"2c590704": "INX_SetSuperInvestor(address)", "2c5a736f": "distributeInitialFunds()", +"2c5a8e86": "allowMinting(bool)", "2c5af544": "isAllocatedLending()", +"2c5b1066": "pendingWithdrawalAmount()", "2c5b3b5b": "UniverseChain()", +"2c5ba768": "exitAllDsr(address)", +"2c5c6641": "transferTokenTestValueOverBigInteger(address)", "2c5c8f7c": "getDailyProfitSumForAllUsers()", "2c5c9dc5": "BeldenCoin(address)", "2c5cb666": "setCollectFeeWindowReportingFees(uint256)", +"2c5cf26d": "setTokenDebtLimits(address[],uint256[])", "2c5d0546": "KuaiToken(address,uint256)", "2c5d690d": "getBlocksUntilReset(address)", +"2c5dadf9": "isPrivsalePhase()", "2c5e52d1": "CandyDropIsOpen()", +"2c5eadde": "ADAPTER_FEE_MAX()", +"2c5ef53a": "setdaiddt()", +"2c5f01b6": "getInterestUpdateRewardPerblock()", "2c5f5234": "collateralisationRatio()", "2c5fac89": "isIcoSucceeded()", "2c6009a6": "viewPeerToPeerMarketplaceTransactionFee()", "2c60a055": "MapTest()", "2c6105f9": "setElectedMediator()", "2c6127c7": "availableBets()", +"2c61bee8": "_quickFinish(uint256,uint256,uint256)", +"2c61bf33": "MAX_DELAY_MULTIPLIER()", +"2c620dea": "openPosition(address,uint256,address,int256,uint256)", "2c6287b2": "yunosupporttuples(bytes4,int32,bool)", "2c629299": "allOperations()", "2c62fa10": "assetsOf(address)", "2c62ff2d": "deleteBool(bytes32)", +"2c63293d": "zeroFeeReceiver(address)", +"2c635445": "UserRegainedAmountAtIndex(address,uint256,uint256)", "2c638806": "totalPaymentsHeld()", "2c63b326": "memoryArray(uint256)", "2c63e4b9": "removeExpiredAssignments(address,uint256,uint256)", +"2c63fb18": "MonthsApyPercentsNumerator(uint256)", "2c642950": "createBallot(string,bytes32[],uint256)", "2c642f51": "sendDividends(address,uint256)", +"2c6464e7": "multiplyAtPrecision(uint256,uint256,uint8)", +"2c647e02": "initialBoogieRewardPerDay()", "2c64b05f": "LockEDUTeam()", +"2c64bf58": "listExists()", +"2c660c82": "forceRemoveNft(address[],uint256[])", +"2c6637a8": "Get_Details(string)", "2c664701": "profit_per_token()", "2c66a604": "Blizzard()", +"2c66b6c8": "onlyPanic(bool,uint256,uint256)", +"2c66d1db": "setManGasAddr(address)", +"2c67295e": "getRequiredMintAmount(uint256)", "2c678c64": "migrated()", "2c67a8e5": "getItemsByOwner(address)", "2c684eb6": "afterVoteNoCashBackTime()", "2c684f30": "postListed(address,string,string,uint256,string,string,string)", +"2c689f83": "totalReceivedETH()", "2c68fcd4": "determineBonus(uint256,uint256,address)", +"2c69036e": "Remove_member(address)", +"2c69d416": "extendLockOf(address,bytes32,uint256)", "2c69e64e": "refundBet(address)", +"2c69ed58": "Pie()", "2c69ed89": "BerryLake()", "2c6a0140": "cutoffBlock()", +"2c6a5be9": "intToEnum(uint8)", "2c6b2c92": "checkProfitLossSinceInvestorChange()", "2c6b77e1": "admin_isPayable(bool)", +"2c6bb044": "questionIDToDisputer(bytes32)", "2c6c1108": "autoTearDownAndDestruct()", +"2c6c1cc9": "_deployTransitioner(bytes32,bytes32,uint256)", +"2c6cda93": "updateFee(uint16)", +"2c6d0e9b": "calculateUserGlobalData(address)", +"2c6d8fa7": "getproduce(bytes)", +"2c6d914b": "raffleActivation(address)", +"2c6dbb1c": "star()", "2c6e38d0": "modifyNextPremiumSale(uint8,uint256)", "2c6e4aea": "withdrawFundBeneficiary()", "2c6e7598": "toAsciiString(address)", @@ -25475,52 +46525,93 @@ "2c6ed612": "stringToBytes5(string)", "2c6f11b8": "listApproval()", "2c6f39fd": "setLicenseSalesContractAddress(address)", +"2c6f5b1f": "isKnownCar(address)", "2c6fa230": "getServiceInformation(address,uint32)", "2c6fa84c": "Pausable()", +"2c6fedf7": "setIsEnd()", "2c7077c0": "enableFeatures(uint256,bool)", +"2c70aecf": "ISSUE_FOR_ADDRESS()", "2c70b7ca": "emitEntityResolution(address,address)", "2c70d64e": "unVote()", "2c710cc8": "closeInvest(uint256)", "2c71d524": "IcoBonus(uint256)", +"2c71d93d": "depositTotalAmount()", "2c71e60a": "grants(address,uint256)", "2c71ecb6": "_startBlock()", +"2c7288d7": "numberOfRoads(address)", "2c72fdfc": "getProposals(uint256)", +"2c7316be": "registerDeposit(uint256,address,uint256)", "2c735ef8": "tradeStartTime()", +"2c7407aa": "syntheticAssets(uint256)", "2c740844": "setStakingRegistry(address)", +"2c74ce47": "getOutputAmount(address,address[],uint256)", +"2c756d81": "getSpriteOwner(uint256)", "2c757eed": "startPhase3(uint256)", +"2c75bcda": "WITHDRAW(uint256)", "2c7622b0": "txorigin()", "2c767201": "admin_account()", +"2c7677f8": "getFrozenBalanceByAddress(address)", +"2c768569": "reddosArray(uint256)", "2c76d586": "zint_bytes32ToString(bytes32)", +"2c7704b4": "_tierBalances(uint256)", +"2c775db0": "getStakedGemLPBalanceFrom(address)", +"2c779774": "seeBenefitOfAStakingByMonths(address,uint256,uint256[])", +"2c77f656": "farmTemplate()", "2c78ba6f": "ArbTokFromHGame(uint256)", "2c78bfdc": "burnCrown(uint256)", +"2c7909e0": "bscFlipOf(address)", "2c791826": "moiTestToken()", "2c792276": "endRound(uint8)", +"2c792545": "MintApproved(address,uint256)", +"2c79aa93": "setPoolFeePercent(uint256)", "2c79aea3": "minedTotalSupply()", +"2c79d896": "Converted(address,string,uint256,string)", +"2c79db11": "queryReward()", "2c7a64c7": "isOperationActive(bytes32)", "2c7a8559": "setMaxGift(uint256)", +"2c7af206": "getInitialDisputeRoundDurationSeconds()", "2c7b0085": "PocketChain()", "2c7ba564": "setTransferProxy(uint32,address)", "2c7c4549": "PurchasableToken(uint256)", "2c7cc1f0": "emergencyEthDrain(uint256)", "2c7cce9e": "auctionMinPriceIncrease()", +"2c7d3724": "daysOfProcess()", +"2c7da21b": "withdrawDepositRewardById(address,uint32)", +"2c7de168": "KyberProxyV1(address)", "2c7e06a4": "rateEarlyStage1()", "2c7ec2c2": "_fulfillPayment(address,address,uint256,uint256,address)", +"2c7edfb1": "onEndRound(uint256,bytes32,uint256,uint256)", "2c7ee894": "B2Lab_TokenPlus(address)", "2c7ee946": "setting(uint256,uint256)", "2c8082a6": "PiBetaSupply()", +"2c811db7": "premiumCount()", +"2c8158dc": "OneSplitInterfaceAddress()", +"2c8162a3": "setjigou(uint256,uint256)", +"2c81d638": "mockFunctionRevertsNoReason()", +"2c8214c4": "farmDecimals()", +"2c82288c": "isRegisteredAsIndestructible(address)", +"2c828525": "changeRefundAddress(address)", +"2c828d5a": "CommissionerAuctionSuccessful(uint256,uint256,address)", "2c828e46": "TransferToken(address,uint256,uint256)", +"2c82b6ca": "GUSD_LIQUIDATION_BONUS()", "2c837334": "getPlot(uint256,uint256)", +"2c838e83": "addBoogieReward(address,uint256)", "2c83d77e": "goforit()", +"2c83e86f": "setLeaseExchange(address)", +"2c8446cc": "canOf(address)", +"2c84a043": "myInt1()", "2c84bfa6": "generate(address,bytes)", "2c84d560": "OwnerWithdraw()", "2c84e31f": "addAccounts(address,address,address[])", "2c85448d": "isInt256ValidIn64(int256)", "2c854d13": "AUTH_REMOVEOWNER()", +"2c858665": "stableSwapHUSD()", "2c8595bc": "updatePartnerMap(address,uint256,uint256,uint256)", "2c85f8e0": "oraclize_query(string,string,string,uint256)", "2c86033e": "checkAddressTeamOne(address)", "2c8668d4": "withdrawNoLimit(address,uint256,uint256)", "2c868287": "withdrawToTeamStep3(uint256)", +"2c868a4b": "setTrancheVaultPercentage(uint256,uint16)", "2c86d091": "buyTokens(address,bytes32)", "2c86d98e": "leverage()", "2c86e3b4": "setContributor(string)", @@ -25528,8 +46619,10 @@ "2c87aecc": "orders_sell_list(uint256)", "2c87ba12": "getTitulaire_Compte_2()", "2c882333": "vota_un_candidato(uint256)", +"2c882d02": "registrationExt2(address)", "2c887399": "confirm(bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", "2c88837e": "VotingRightsWithdrawn(address,uint256)", +"2c88e778": "PayoutBonus(address)", "2c88fad9": "addWhitelistedAddr(address)", "2c890550": "toPower2(uint256)", "2c899ab6": "CecCoin()", @@ -25537,50 +46630,91 @@ "2c8ab429": "registerMeDao(address)", "2c8ace6c": "TokenERC20(uint32,string,uint8,string,address)", "2c8af2d8": "s_rand(address,uint256)", +"2c8b2170": "defaultGrettings()", "2c8b2ad7": "calculatePaymentGoal(uint256,uint256,uint256)", +"2c8b3552": "crowdsale_rxp_refund()", "2c8b8b94": "addAccreditedInvestor(address,uint64,uint64,bool,bool,uint256,uint256)", +"2c8bb8d2": "testCallForwarding()", "2c8bcd1a": "createBid(uint256,address,address,bytes32,uint256,uint256)", "2c8be60e": "ONO()", "2c8c047a": "ownerOperationsAt(address,uint256)", "2c8c28a7": "loadNewTickets(bytes32[])", +"2c8c5692": "newCoupon(bytes32,uint256)", "2c8c892b": "allocateSalesTokens(address,uint256)", "2c8ca0ea": "isFinish()", "2c8cbe40": "setFreeze()", +"2c8da560": "addToken(address,string)", +"2c8ddf3c": "ppTesla()", "2c8df693": "ServiceProviderEnabled(address,bytes)", +"2c8e259b": "holderArray(uint256)", "2c8e3ebb": "secondRefundRoundRateDenominator()", +"2c8e7a21": "lockers(address)", "2c8ed4c4": "_toToken(uint256,uint256,uint256)", "2c8ee2ec": "checkWin(uint256,address)", "2c8f1b71": "socialIdentityOfClaimerAddress(uint256,address)", +"2c8f963e": "showdealdetails(address)", +"2c8fe526": "missions(uint256)", +"2c8fe73d": "prizePeriodEndAt()", +"2c902c7c": "revokeAccount(address,string)", "2c906ba2": "finishLottery()", "2c90ccba": "getNextAuditByPrice(uint256,uint256)", "2c90d20d": "getWarriorsFromIndex(uint32,uint32)", +"2c90ed71": "getSha3(string)", +"2c9115c7": "quoteTokens(uint256)", "2c91324c": "usersAddress(uint256)", "2c915aa3": "assetAddresses()", +"2c91a591": "joinSmartPool(address,uint256,uint256[])", +"2c92540d": "getTakerOffer(address,uint256)", +"2c928d33": "timecount()", "2c92a2bc": "minWithdrawalThreshold()", "2c92c071": "_addPayTable(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", "2c92e5b7": "BlockspacesToken()", "2c92fb99": "getFilter(uint256)", +"2c9387f6": "GetUserInfo(address)", +"2c939d15": "tradePiptForEth(uint256,uint256,uint256)", "2c948034": "longTermbudgetAllocAddress()", "2c94a235": "profitTransferTimeSpan()", +"2c955fa7": "burnSynthsToTargetOnBehalf(address)", +"2c9581c1": "setTokenWinnerName(uint256,string)", "2c95ad52": "addItem(bytes32)", +"2c95b55e": "widthdraw1Amount()", +"2c95bd23": "_revokeRole(bytes32,address)", +"2c95e842": "removeWithdrawalRoots(bytes32[])", "2c960569": "updatePriceOraclize()", "2c9619ce": "FCOIN1036Token(uint256,string,string,uint256)", +"2c96566b": "getPairInfoLength()", "2c96bee2": "MultiSigTokenWallet(address[],uint256)", +"2c971744": "transfer(address,uint256,address,uint256,address,uint256,uint256)", +"2c978105": "ENCORE_Token()", +"2c981946": "addTokensMulti(address[],uint256[])", +"2c981d71": "claim_delay()", "2c9868df": "approveAndCall(address,uint32,bytes)", "2c98bf4a": "WelcomeMsg(string)", "2c995e1b": "AllowTransferGlobal()", +"2c99d4e2": "PNETWORK()", "2c9a0a95": "getPricingStartsAt()", "2c9a86d2": "payCarnita(uint256,uint256)", +"2c9af216": "covertBacToDai(uint256)", "2c9afb18": "addrFabricContract()", "2c9b1625": "FUTMOTO()", "2c9c0fb5": "modifyTransferableHash(address,bool)", +"2c9c30f6": "Proposed(uint256,bytes)", +"2c9c34b9": "pricePoints(uint256)", +"2c9c5d0f": "dcpRecorderAddress()", "2c9cdfd9": "Provider(string,string)", +"2c9d3c6b": "levelValue_(uint8)", "2c9d6989": "withdrawDklBalance()", "2c9d9e9e": "getCommitByContent(string)", +"2c9e0c97": "leafClaimed(bytes32,bytes32)", "2c9e1885": "setBZxVault(address)", "2c9ea1b7": "nextSkinId()", +"2c9ebb5d": "multiSigMintThreshold()", +"2c9ee4c8": "setPlatformIncomeAddress(address)", "2c9f092f": "refundToOwner(address)", +"2c9f31d1": "maxAward()", "2c9f4f62": "isPurchased(uint256)", +"2c9f55ed": "checkProposal(address)", +"2c9f6488": "latestTokenIds(uint256)", "2c9f6792": "emaPeriods()", "2c9f9fed": "tokenInit()", "2c9fcd8c": "Donator()", @@ -25592,23 +46726,41 @@ "2ca16a37": "publish(bytes32,string,uint256)", "2ca1aa16": "currentSaleLimitPerAddress()", "2ca1b7da": "CROWDSALE_ETH_WALLET()", +"2ca208e9": "getTotalRedeemed()", +"2ca214e8": "getPayCost(address,address,bytes32,uint256,bytes)", "2ca23c4f": "KapelaToken()", "2ca2537e": "changeNotSoldTokens(address)", "2ca26866": "Tccchain(uint256,string,string)", +"2ca26980": "getIndividualPercent(address)", +"2ca2e2f5": "createSuperLock(uint256)", +"2ca32d7e": "getEpochPoolSize(address,uint128)", "2ca33e70": "YoutubersCoin()", "2ca36da0": "left39(uint256)", "2ca38363": "priceEth()", +"2ca4f879": "WSBC()", "2ca59abf": "changeCollateralTaker(address)", "2ca5a623": "change_flag(uint256)", "2ca5e3f5": "replyAlice(uint256)", "2ca5e626": "getOrder(uint32[8])", "2ca60d85": "versionIdent()", +"2ca6a9c4": "getUserProfitsGivenToLine(address)", "2ca6d2c0": "getAccountSize(address)", +"2ca6de2d": "getValueViaParaswap(address,address,uint256)", +"2ca70eba": "recipientCallsAtomic(address,bytes,uint256,uint256,uint256,uint256,bytes)", +"2ca74942": "PUBLIC_DURATION()", "2ca76003": "checkWinner(uint32)", "2ca781f1": "firstPay()", +"2ca78cea": "mem_stakeAmount()", +"2ca85baf": "overriddenReturn()", +"2ca8625f": "mintUniqueTokenTo(address,uint256,address,uint256)", +"2ca8c308": "changeOraclizeGasPrize(uint256)", "2ca8c6d3": "numberOfBets()", "2ca8cbd0": "minePhx()", "2ca9cbe8": "distributeToken(address,uint256)", +"2ca9dff6": "addAMMWithLiquidity(address,address,uint256,uint256,uint256,bool,address)", +"2ca9fe8a": "advisorMap(uint256)", +"2caac08b": "emergencyDrain()", +"2caae886": "safeReclaimAmount()", "2caafb54": "totalFreezeTokens()", "2cab00de": "buildPrice()", "2cab6c6a": "editTile(uint16,uint16,uint8,uint16,address)", @@ -25624,46 +46776,85 @@ "2caeb8fc": "checkMyUndistributedBalance(uint256)", "2caed832": "partOf(uint256,uint256)", "2caef765": "setBoardController(address)", +"2caf02d0": "setPrice(address,uint256,bool)", "2caf1f15": "set_tickerQuery(string)", +"2cb06ad8": "gameSettled()", +"2cb09c05": "setSystem(uint256,uint256,uint256,uint256,uint256,uint256)", "2cb0d48a": "setEditable(bool)", "2cb0de18": "setFeeAccountToken(address)", +"2cb0f323": "isNewVersion(address)", +"2cb11ad9": "ChangeRandomGen(address)", "2cb15864": "initialBlock()", +"2cb1ba1f": "LONGESTSTAKINGPOOLID()", +"2cb27e3e": "drawAndExitDebt(address,uint256,uint256,uint256,bytes32)", +"2cb28bd8": "requireExchangeBetweenPynthsAllowed(bytes32,bytes32)", +"2cb2b1fa": "isInviter(uint32)", +"2cb2b9f5": "getDepositEther(address,uint256)", +"2cb2d32f": "updatePoolSigs(bytes32[],address[])", "2cb2f52e": "updateTokenMetadata(uint256,string)", +"2cb37aff": "LogWithdraw(uint256,address,address)", "2cb3ce8c": "TIER3_RATE()", +"2cb3d13c": "HostileTakeover()", "2cb44156": "minterGivesCWC(address,uint256)", +"2cb4836c": "initGenesisStaking(address,address,address,address)", +"2cb4b3a4": "onsPriceNow()", "2cb4f63e": "price_target()", "2cb51970": "_batch4_icosaleStartTimestamp()", +"2cb5568e": "addTokenOwner(address,address)", +"2cb55c77": "lockAccountInfo(address)", "2cb58378": "getStateRoot(bytes32)", "2cb676be": "NVBSupply()", "2cb6a435": "oneTimePrice()", "2cb71af3": "startBuyback(uint256,uint256)", +"2cb7295c": "crowdSaleStartBlock()", +"2cb77763": "NewDeposit(address,uint256)", +"2cb777a6": "myInt()", "2cb8460c": "PlutusDex()", "2cb856f3": "dgxContract()", "2cb86824": "preIcoStartAt()", +"2cb8b90e": "setDrawReferThreshold(uint256)", "2cb8f2e9": "executeBet(uint256,bool)", +"2cba81ff": "setEscrowPosition(uint256,uint256)", "2cba85c6": "popcontract()", +"2cbabd1f": "Transaction_Item(address,uint256)", +"2cbac2b6": "OperatorAddressChanged(address)", "2cbb827f": "withdrawToSelf(uint8)", "2cbbbd2d": "SHIPToken(address,address)", "2cbbd738": "getPoll(bytes32)", +"2cbbdee5": "log_2(int128)", "2cbcaba9": "SimpleICO()", +"2cbcb83e": "longMargin()", +"2cbd5d8d": "createSmartFund(address,string,uint256,address,address,address,address,address,bool)", +"2cbd79a5": "info42()", +"2cbdb47a": "maxAccumulatedClaim()", "2cbdb5fb": "addChunk3ToWhiteList()", +"2cbdc100": "requestService(string)", +"2cbdd313": "withdrawContributions(address)", +"2cbe0a27": "katrinaExitFeePercent()", "2cbe679b": "Travelerscash()", "2cbef0f3": "getAffiliateCommission()", "2cbf1b12": "CirclePay()", "2cbf1f0d": "left62(uint256)", +"2cbf3da0": "currentNAV()", "2cbf4e27": "removeParticipant(address,address)", "2cbf9cf6": "MintableToken()", "2cbfd034": "intCallWithArray(uint8[4])", +"2cbff446": "receiveFlash(bytes32,uint256,uint256,uint256,address,bytes)", +"2cc07c29": "changeWord(string)", "2cc0a28c": "_matchedTags(bytes32[],bytes32[])", "2cc0b254": "init(address,bytes32)", "2cc138be": "rewardStartTime()", +"2cc16079": "testGreaterThan()", "2cc1b92a": "addr_communityBuildingToken()", +"2cc1cd65": "completeXConversion2(address[],uint256,uint256,uint256[])", "2cc205d9": "totalStakedFor(address,address)", "2cc27341": "setMinMargin(uint256)", "2cc361a6": "removeTank(address)", +"2cc42d00": "Donate(address,string,uint256,string)", "2cc53743": "GxEvents(address)", "2cc5cfd6": "withdrawDevelopersFund(address)", "2cc5d662": "arawWallet()", +"2cc5e2e3": "balanceWant()", "2cc63332": "returnCoupon(address[2],uint256[8],uint8,bytes32[2])", "2cc689f9": "markRewardsSet()", "2cc695de": "addCertification(address)", @@ -25671,8 +46862,10 @@ "2cc6d768": "RecordingRefundVault(address)", "2cc75331": "getTeamsOnLeaderboard()", "2cc763e7": "milliPercent()", +"2cc772f0": "Jobs(uint256)", "2cc7c475": "TokenSaleCreation(uint256,address)", "2cc7fc36": "ICOPurchased(uint256)", +"2cc812bc": "EthPrice()", "2cc82225": "setPriceCreatingChannel(uint256)", "2cc82655": "setPhase(uint256)", "2cc88401": "wirePurchase(address,uint256)", @@ -25680,84 +46873,153 @@ "2cc92b2b": "isICOOpened()", "2cc9636c": "buyerCancel(bytes16,address,address,uint256,uint16)", "2cc9c151": "verifyOwnership(address)", +"2cca0cd6": "__weth()", "2cca179d": "addPoll(uint256,uint256,bytes,uint8)", "2cca23f1": "Timeless()", +"2cca2ec9": "setSdtPerBlock(uint256)", "2cca5ce3": "setEngine(address,bool)", "2cca664b": "totalPlayerWinnings()", "2cca75d3": "StupidCoin()", +"2cca7ed0": "zomPerBlock()", +"2cca9dfd": "LIQUIDITY_POOL()", "2ccaa3e9": "getPropertyOwner(uint16)", +"2ccb1422": "invest_panel2()", "2ccb1b30": "transferTo(address,uint256)", "2ccbd053": "set(uint256,string,string,string,string,string)", "2ccc452d": "pushByte(bytes32)", +"2ccc8727": "investorsList(uint256)", "2ccc9057": "RATE_CROWDSALE_S3()", "2ccce58a": "cancelGame(string)", +"2cccf174": "mintNewNFT(address,uint256,string,string,string,uint256,string,string)", "2ccd0991": "extraData1FromHash(string,string,string,string,string)", "2ccd9623": "referralManager()", "2ccdbc25": "prometheusVouchersMinted()", +"2ccdd95a": "levelEndDate(uint256)", "2ccde4bd": "withdrawAllUncommittedTokens()", "2cce0c60": "eth_to_usd()", +"2cce0e54": "setTargetThreshold(uint256)", "2cce4abe": "_finishNoCallback()", "2cce753a": "batchAddAddresses(address[])", "2cce81aa": "getBlockHash(int256)", "2ccf16f9": "CashPoints()", +"2ccf21bc": "Allocation(uint256,uint256)", "2ccf27bb": "PatrickHuynhToken()", +"2ccf293d": "getNumberofHashesRegistered()", "2ccf8d40": "HVAL()", +"2ccf8f88": "getCurrentEtherPrice(uint256)", "2ccfc58c": "FeesReceived(address,uint256)", "2cd046eb": "countMembers()", "2cd05122": "ZENOSEarlyPurchase()", "2cd05248": "lastBlock_f3Hash_uint256()", +"2cd07f03": "matrixionFromToken(uint256,bool)", "2cd11849": "depositAdvisor(address,uint256)", "2cd19faf": "_getAdminInterface(uint256)", +"2cd1a18a": "updateLockerSettings(address,address,address,address,uint256,uint256,uint256,string)", "2cd1bab2": "partnerID()", "2cd2338f": "thawAddress(address)", "2cd23d7a": "createCommit(bytes32,bool,bytes32,string,uint256)", +"2cd271e7": "changePauser(address)", +"2cd2dfcd": "SaleCreated(address,uint256,uint256,uint256)", +"2cd2ed30": "changeBackstopAdmin(address)", +"2cd331f8": "showReserves()", "2cd33a54": "eth_amount()", "2cd3fd70": "BurnTokens(uint256)", +"2cd4134a": "log(address,address,bool,bool)", "2cd44064": "UNHCToken(uint256,string,string)", +"2cd4c899": "op_one_plus_v(int128)", "2cd53cfe": "addEducation(string)", +"2cd54c26": "getBuyPriceInXCHF(uint256)", +"2cd55eb9": "sendFeeCurrency(address,uint256)", "2cd6305f": "unsellpause()", "2cd64f65": "TokenMintGeneral()", +"2cd717ea": "setWethReservedForPoolRewards(uint256)", +"2cd75952": "maintenancePool()", +"2cd76758": "getFullTokenList()", "2cd78450": "activateExportFeeChargeRecord(address)", +"2cd829d2": "stakingContracts(string)", "2cd8c9ae": "fillPhase(uint8,uint256,uint256)", +"2cd95d92": "newFailingAPM(bytes32,bytes32,address,bool)", +"2cd97f5f": "setStateSenderContract(address)", +"2cd981d4": "switchPause()", +"2cd98dfd": "setPoweramount(uint256)", +"2cd9b0e3": "addLiquidityToUniswapHUGExWETHPair()", "2cd9e233": "Quarters(address,uint256)", +"2cd9f12d": "changeTransferGasLimit(uint256)", +"2cd9fd76": "setMaxOutputLength(uint256)", +"2cda1920": "newAddress(address)", "2cda1bf7": "titles(uint256)", "2cdad41c": "isInspector(address)", "2cdb0213": "dailyHourLimit()", +"2cdb45db": "setBuyBackMin(uint256)", +"2cdb726f": "setRegistrationFeeRatio(uint256)", "2cdb8eec": "updateTokenValue(address,uint256)", "2cdba70e": "_getMaxPooling()", +"2cdbb0dc": "addGov(address[])", +"2cdc054c": "moduleList(uint8,uint256)", +"2cdc078d": "tokenToPayoutMap(uint256)", "2cdc1c74": "lister()", +"2cdc90e1": "minAgeOfToken()", "2cdcb1fc": "wrongManagerOrUnsetInClaimer()", +"2cdcf048": "testCalculateInterestIndex_InvalidBlockDelta()", +"2cdd1aba": "claimStakeFeeRewards()", "2cddc488": "transferTaxes(address,bool)", "2cde15d1": "weiTotalRaised()", +"2cde56c3": "init(address,address,bytes32,uint256)", +"2cde6081": "changeLimit()", +"2cdeae38": "quick_withdraw()", "2cdedd5c": "StateChannel(address,address,address,address,uint256,bytes)", +"2cdf21f3": "convertHodlToEth(uint256)", "2cdf2bfd": "sellPatent(uint16,uint256)", +"2cdf2c35": "recoverERC721(address,address,uint256)", "2cdf37d4": "_admin(uint256,uint256)", +"2cdf4b7e": "setOffer(uint256)", "2cdf55af": "RC()", "2ce04b20": "tokenLockoutPeriod()", +"2ce055b6": "infectorVirus(uint256,address,address)", "2ce0a6ee": "setBalanceLimit(uint256)", "2ce0b4f6": "ICO_FINISH()", "2ce0ca6b": "setChainFees(uint256[10])", "2ce14d90": "_willFallback()", +"2ce1b5a9": "externalCall(uint256)", "2ce1ec67": "HelloCoin(uint256,string,uint8,string)", "2ce20579": "mutagen2Face(uint256,uint256)", "2ce21999": "fees_(uint256)", "2ce2907b": "CryptoCourt(uint256,string,string)", +"2ce2aafc": "PROPOSAL_EXECUTE_DURATION()", "2ce2d7c0": "completeRegionAuction(uint16)", +"2ce35917": "safePlumeTransfer(address,uint256)", +"2ce3707e": "testOracleConnection()", "2ce37b10": "getListCount()", "2ce3d440": "updateAccount(address)", +"2ce406ce": "hqBaseShare()", +"2ce47c6d": "initializer(uint256,string,string,uint8)", "2ce47de4": "payWinners(uint32,uint32,uint256,bool,uint32,uint32)", "2ce52d9b": "shareCycleSessionSize()", +"2ce5a91e": "getHighestNonTentativeParticipantStake()", "2ce5c284": "processed()", +"2ce5ee63": "ClientRegistered(address)", "2ce5fb75": "getHorseShoe(uint256)", +"2ce65f5a": "stlp()", +"2ce666a5": "mintEndBlock()", "2ce68269": "registerByList(address[],bool)", +"2ce6831a": "AllocateInflatedTokens(address,address,uint256)", +"2ce6d35c": "HotSaleLength()", +"2ce6df02": "ERR_ENTRY_ALREADY_EXISTS()", +"2ce705fd": "_coin_deposits(address,address)", "2ce78fc0": "getDemande(uint256)", "2ce7900b": "getTokenTimelockCount(address)", "2ce82189": "balanceTransferred(address,uint256,bytes)", +"2ce8b913": "daiContract()", +"2ce8d4bc": "isUsedCode(address)", "2ce90c11": "killTokens()", "2ce91d08": "TokensWorld()", +"2ce92277": "getEventDataAll(address)", "2ce92dfd": "updateMinGasForDrawing(uint32)", "2ce946a5": "teame()", +"2ce9aead": "lastUpdateTime(address)", +"2ce9aebf": "updateWeeklyTotal(uint256)", "2cea0654": "setStateClosedIfClosed()", +"2cea1c20": "tokenSaleTESLA(address)", "2cea53bd": "returnChametz()", "2cea70e4": "isAds()", "2cea905a": "IAMEPrivateSale()", @@ -25765,248 +47027,458 @@ "2cead42c": "_createIntention(address)", "2cead658": "Companion()", "2ceae552": "AVAILABLE_BONUS1_SUPPLY()", +"2ceb10e4": "testDataTypeByte()", "2ceb1bb3": "addPreEntranceMembers(address[],uint256,uint256)", +"2cebbe37": "readTeamRunHalf()", "2ced7cef": "log(string,string,string)", "2cedc5ec": "enableTokenAiTransfers()", +"2cedfeff": "getgreeting()", +"2cee00f4": "withdrawCToken(address,uint256,uint256,uint256)", +"2cee0640": "ExternalTokenIncreaseApproval(address,address,address,uint256)", +"2cee28f0": "newTicketIssuer(address,string)", +"2ceed1bf": "getUserPreETHBalance(address)", +"2ceed7e7": "stakeOn()", "2ceee12e": "seeBidders()", "2cef4dac": "updateMasterCopy()", "2cefc429": "sellCard(uint8,uint256)", "2cefeb07": "setname(string)", +"2cefff96": "depositAave(address,uint256)", "2cf003c2": "referrer(address)", +"2cf01b55": "tokensStaked(address)", "2cf033a0": "setNewTokenAddress(address)", +"2cf06ba8": "checkGlobalFeeLedger()", +"2cf06f1a": "setExpiredCouponEpochs(uint256)", "2cf0be44": "transferToService(address,uint32,uint256,uint256,uint256)", "2cf0d6ca": "PLAT()", +"2cf18bb4": "calcProfit(uint256)", "2cf1a5fb": "airdropStatus()", "2cf2f1d1": "rndReduceThreshold_()", "2cf32bc9": "PayoutEarnings(address,uint256,uint8)", +"2cf34d49": "addAllocations(address[],uint256[],uint256[])", "2cf3f1f3": "setTokenPerEther(uint256)", "2cf42a6c": "cancelHybridization(uint256)", +"2cf43a1e": "getFundsToOwner(uint256)", +"2cf44a43": "insertSigners(address[])", "2cf45905": "addHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", "2cf4db51": "amountVote(bool,uint8)", "2cf4e56f": "withdrawBounty()", +"2cf52846": "DapToken(uint256)", "2cf5346a": "totalSupplyAt(uint256,int256)", "2cf5702a": "verifyPublic(bytes32,uint256,uint256[],uint256[],bytes32[])", +"2cf5cf8b": "versionsOf(string)", +"2cf5db13": "unlockedAt(address)", "2cf5fe89": "maxChildCount()", +"2cf654c0": "getEstimatedAmountsIn(uint256,address,address)", "2cf65a06": "logite(string)", +"2cf67016": "TOKEN_PAYOUT_PERCENTAGE()", "2cf6b532": "STARL()", "2cf6e740": "adminSum()", "2cf75c11": "_generateLog(uint32,uint8,uint32,uint8,uint8,uint8)", +"2cf7aff8": "tokenIdFromURI(string)", +"2cf7c531": "getSets()", "2cf86006": "calculateDividends(uint256)", "2cf8a1d6": "CCRToken()", +"2cf8d99b": "calDistanceByEachTeam()", "2cf91024": "getFlightInfo(uint16,uint16)", "2cf9185c": "getMyPlayedCount(address)", "2cf975af": "isPreferredTokensAccount(address)", +"2cf9809a": "getStartStage_1()", "2cf99422": "publish(address)", +"2cf9c914": "repayTreasuryDebt()", +"2cfa5256": "getTokenIdFromArtKey(string)", "2cfa606d": "tvcEthFund()", "2cfa74da": "buyKeys(uint256,string)", "2cfac6ec": "teamSupply()", "2cfbb031": "claimReward(bytes)", +"2cfbcf1b": "MANAGE_DISPUTABLE_ROLE()", "2cfbd0b9": "addNewBlock(bytes32,bytes32,bytes32[])", +"2cfbd407": "thirdPartyRegister(string)", "2cfc1f4c": "updateGift(uint256,uint256,string,string)", "2cfc42f5": "blacklistParty(address,address,bool)", +"2cfc5d0b": "getAddressForCounterfactualWallet(address,address,address,bytes32,uint256)", +"2cfce4af": "Unfreeze(address,uint256)", +"2cfceb07": "kmPardsBal()", +"2cfcfa43": "lockStakingPoolV1Rewards()", "2cfd10a0": "CrowdsaleMain()", "2cfd3005": "mint(address,bytes32)", "2cfd35bb": "employeeMigratesToNewESOP(address)", "2cfdd7df": "newReward()", +"2cfe58d8": "getQueueLv(uint256)", "2cfed9f0": "setSpeaker(address,address)", +"2cff0ee5": "setCurrentStage(uint8)", +"2cff585d": "cachedRepaidAmount()", +"2cff5b39": "getTypeCap()", +"2cffa2ec": "creamToWbnbRoute(uint256)", +"2cffc643": "func_1F23()", +"2d0018ca": "ownerDenyDirectTransfer()", "2d0041c5": "setAmbassador(address,bool)", "2d00b442": "_createBid(bytes32,address,uint256)", +"2d00cad3": "setPaymentStatus(uint256,bool)", +"2d00e937": "yIndex()", "2d0104a5": "updateFirstDuel1(uint256)", "2d014833": "e93Contract()", "2d01564c": "littContentExists(bytes32)", "2d019a71": "get_asset_info(bytes32)", "2d021624": "BTBToken()", +"2d02462b": "poolDeposit(uint256)", "2d02a5b2": "setGoldPrice(uint256)", "2d0335ab": "getNonce(address)", +"2d03640b": "update(bytes32,uint64,uint64,uint64)", +"2d0395c4": "validateNewValidator(uint256,address,bool,uint256)", "2d03c4eb": "nxcPerBcy()", "2d040add": "updateRegistrationState(bool,uint256)", "2d042a7f": "PonziRevolutionBeam()", "2d045780": "isAllowedToBuyByAddressWithoutVerification(address)", +"2d046a79": "screen(uint256)", "2d04d07d": "goTokenCollection()", +"2d04ebd4": "initiateLink(address)", "2d04f820": "DEV_WALLET()", +"2d05fcb0": "CertificationBodyName()", +"2d0612ea": "lpUnlockFrequency()", "2d06177a": "addManager(address)", "2d062140": "SiringClockAuction()", +"2d0641d4": "setApprovalCounts(uint256)", "2d067d4c": "isBurn()", "2d06a1fa": "ALFA()", +"2d06e55c": "setWhitelistContractAddressForOptionID(uint256,address)", +"2d06e5bf": "initialCirculatingSupply()", "2d06fd13": "getTotalDeveloperCut()", "2d077ad0": "Latch()", +"2d07b28e": "reqTime()", "2d07bf2f": "CryptoHarborExchange()", "2d087944": "hasBuyNowOffer(uint256)", "2d08d408": "Send(address[],uint256[])", +"2d0937f3": "isEligibleForPromote(address)", +"2d097eae": "predict(uint256,uint256,uint256,uint256)", "2d09839f": "tokens_push(address)", +"2d09b9c7": "orePerBlock()", +"2d09f11d": "totalQueuedDebt()", +"2d0a0f72": "HEXmeLobbyHEXperDay(uint256)", +"2d0a2500": "ytxFeePrice()", +"2d0a29c2": "generate_id(address,uint256)", "2d0a8809": "testAddVoters()", "2d0b1451": "DevotteToken()", "2d0b7d53": "registerVariation(uint256,address)", +"2d0b970d": "ClaimOfVesting()", +"2d0c0a88": "DepositToken(address,uint256)", +"2d0c4ab9": "enlistUsers(address[])", +"2d0c5c1a": "RevertIf0(uint32)", +"2d0cb8a3": "computeSecret(uint256,address)", "2d0cc13c": "MoonMinerToken(string,string,uint8,uint256)", +"2d0d0c09": "burnAgents(address)", "2d0d4827": "startIco1(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d0d9c23": "EARLY_ACCESS_MAP(address)", "2d0d9c2a": "getCompletedGamesStatistics()", "2d0d9e0f": "getUserProductsKeys(bytes32)", "2d0daca8": "assertEq25(bytes25,bytes25,bytes32)", "2d0e6636": "tokenToEtherAllowed()", +"2d0efbce": "WildcardList(address)", "2d0f5573": "right35(uint256)", +"2d0fc6b4": "getSwapInfo(bytes32)", "2d0ff779": "claimEOSclassic()", "2d103ed4": "addAllowedHICAddress(address)", +"2d1072f8": "epochDistributeSupply()", "2d10d4d1": "getCityActiveBuildings(uint256,uint256)", "2d116186": "deityBalance()", "2d118bbf": "getUserPaybackPool()", +"2d11c58a": "FEE_RATE()", +"2d11f567": "setMortgageMax(int256)", "2d11fa16": "throwsWhenTransferingPresaleTokensBeforeCliff(address)", "2d123aa4": "useDefaultRegistry()", +"2d124419": "saldoFidelidade(address)", "2d126239": "calcAndGet()", "2d126d2b": "indCommunityDeposit()", "2d129442": "mountainHeight(uint256)", +"2d12bf8b": "potatoYield()", +"2d12dadc": "xvsToVaiPath(uint256)", "2d132467": "buyPreIcoTokens()", +"2d132791": "transferToCoreContract(uint256)", "2d133eee": "KYC_THRESHOLD()", "2d136dd6": "TrillionToken()", +"2d137bcc": "withdrawMine(uint256)", +"2d138403": "updateX6ReferrerSecondLevel(address,address,uint8)", "2d139417": "migrateToNewNewControllerContract()", "2d13c164": "_computePayMoney(uint256,address)", +"2d13d808": "AinpDyn(uint256[])", "2d144e6b": "totalPlayerSupply()", +"2d1484be": "GamblingPartyEnded(address,uint256)", +"2d14aae5": "ulockerMint(uint256,address)", +"2d14c4b7": "withdrawRelayHubDepositTo(uint256,address)", +"2d158e7d": "anyoneCallable()", "2d1608db": "YouLongToken()", "2d162c70": "distrust(address,uint256,bytes)", "2d171243": "getUnitsProduction(address,uint256,uint256)", "2d17d956": "buildRequest(string)", +"2d17fa4d": "calculateRewardTesting(uint256,address)", +"2d181b01": "_allpools(uint256)", +"2d189a3f": "tbca()", "2d19413c": "setJackpotToken(address,uint256,uint256,address,uint256,uint256,uint256)", +"2d19962f": "getNftTokens()", "2d1a330b": "marketmorties()", +"2d1a3f7c": "EventBattle(address,uint256,uint256,uint256)", "2d1a6477": "lengthEqual(address[],uint256,string)", "2d1a67e1": "Ledger(address,uint256,uint256)", "2d1b42f5": "encryptCounter(uint256)", +"2d1b9c17": "introducers(address)", "2d1babed": "setRates(uint256)", +"2d1be13a": "setBlackFrom(address)", +"2d1be94d": "getBoolean()", +"2d1bf427": "freeState(address)", "2d1c56a9": "totalTxVolume()", +"2d1c92a1": "purchase(uint256,bool)", +"2d1cdfa1": "unblock_scientist(address)", "2d1ced82": "priceBox1()", +"2d1d70c0": "mint(uint256,address,uint256,address,address,uint8)", +"2d1d71dd": "resetAlarmDone()", "2d1d744a": "isPass()", "2d1d9627": "changeAddress(bytes32,address)", "2d1d9feb": "removeRRA(address)", +"2d1dda9c": "transferProxyERC20()", "2d1e0516": "setBal(bytes32,address,uint256)", +"2d1e11ae": "setStrategyAndInvest(address,address,uint256)", +"2d1e33ad": "userEpochs(address,uint256)", +"2d1e3ab5": "checkParams(bytes32,uint128,uint128)", +"2d1e7f86": "setSeason(string)", "2d1f0021": "NextItemID()", "2d1f0097": "getData_18()", +"2d1f4d83": "depositdelegateparent()", "2d1fb389": "authorize(address,bool)", "2d1fdef6": "extendDeadline(uint256,uint256)", +"2d201af0": "_totalBurnToken()", "2d202d24": "setNextOwner(address)", "2d20fbf3": "ownedBonus(address)", "2d215518": "pause(uint256,uint256)", "2d217d43": "AntasCoin()", "2d21ca88": "ICOTokenHardCap()", +"2d21d217": "erc677TokenContract()", +"2d21d6f7": "logBytes32(bytes32)", "2d226a10": "allocateServusTokens()", +"2d227674": "anyRateIsStale(bytes32[])", "2d22a4e3": "isPrivateInvestmentPhase()", "2d22b464": "createEgg(string,bytes32)", +"2d24006c": "totalBlocksVerified()", "2d241248": "getFeeBurnerAddress()", "2d24447a": "LBCoinJ()", +"2d2472b8": "mintTeamAndAdvisorsPart9(uint256)", "2d247cc6": "coinPriceInWei()", +"2d24f6c7": "updateGovernanceStakingRewards(address)", +"2d252d5b": "confirmRevertRedeemIntent(bytes32,uint256,bytes)", +"2d255471": "ERC1155()", +"2d25bc75": "getAllSmartFundAddresses()", +"2d267dfa": "CurrentNumberOfProjects()", +"2d26f073": "UtilityTokenRegistered(bytes32,address,string,string,uint8,uint256,uint8,uint256,address)", "2d278518": "EtherReceived(uint256,address,uint256)", "2d278e9e": "picosPerEther()", "2d27c8cd": "ALLOC_SALE_GENERAL()", "2d2800f1": "react()", "2d287e43": "insert(bytes32)", "2d2899b6": "getIntArray(bytes32)", +"2d28b749": "skim(address,uint256)", "2d28bb02": "setTokenStart(uint256)", "2d28d4cf": "transferIfTokenAvailable(uint256,uint256,address)", "2d28e89d": "MINIMUM_DURATION()", "2d290d8b": "MAX_CROWD_SALE_TOKENS()", +"2d291cad": "allowedToWithdraw(address)", "2d2925c7": "transferInitialTokens()", "2d296bf1": "buyToken(uint256)", "2d29842c": "upgradePhoenixStats(uint256)", "2d29953f": "withdrawByFoundation(address,uint256)", "2d29a47b": "execute(uint256,uint256,uint256)", +"2d29ace2": "unsetDevAddr()", "2d29b29b": "migrateSome(address[])", "2d29c72d": "stopUpgrading()", +"2d29f2c1": "bma(uint256,address)", +"2d2ae1c1": "getBalances(address[])", +"2d2b96e8": "deposit(address,uint256,uint128)", "2d2bb154": "kycWallet()", "2d2bcd37": "setRelayContractAddress(address)", "2d2c44f2": "Vault()", "2d2c5565": "TREASURY()", "2d2c9ed8": "softcapReachedCallabck()", "2d2d23f7": "Cordbank()", +"2d2da806": "depositETH(address)", +"2d2e3b47": "IEO_SELL()", "2d2e3bb2": "deleteFincontract(bytes32)", "2d2f7e4d": "withdrawBidForStar(uint256)", +"2d2f82cf": "addToWhiteListInBatch(address[],uint256[],uint256)", "2d2f8f9b": "getAddListSize()", "2d2fa531": "hank()", "2d2fe9d4": "stakeWaived_Eth()", +"2d300bc6": "changeMaxSlots(uint256)", +"2d3065b6": "mintNewTokenToMultipleAddresses(address[],uint256)", "2d30ae45": "distributeCrowdsaleTokens(address,uint256)", +"2d30bf89": "lockTokens(uint256,uint256,uint256,uint256,uint256,uint256)", +"2d30c486": "ResultVotePhase0(address)", +"2d30fcad": "stakePool3(uint256)", +"2d3105be": "addRecipient(bytes32)", +"2d31760b": "withdrawUserLP()", +"2d3183a1": "pcs_pair_addressBNB()", "2d31908f": "PRICE_7()", "2d31d9c9": "sales(bytes16)", "2d31f270": "UNTToken()", +"2d31f6cf": "mintCaps(address)", +"2d320c1a": "transferTokenManagerRole(address)", "2d328551": "numberOfHalvings()", +"2d328745": "addListToWhitelisted(address[])", +"2d32a1d5": "tokenRatePerBnb()", +"2d33dd5b": "onKeyPurchaseHook()", +"2d340bcd": "calcInterest(uint256,uint256)", "2d345670": "revokeAdmin(address)", "2d345799": "balanceOfPretty(address)", +"2d34813b": "remainingTokens1()", "2d349a1f": "icoLtc()", "2d34ba79": "setup(address,address)", +"2d34fd61": "carrierQuitsTransport(uint256)", +"2d352549": "schemeConstraints()", "2d354cf8": "_isContract(address,address)", +"2d3581fe": "resolveRollupMerkleUtils()", "2d358710": "HARJToken(address,string,uint8,string)", "2d35a8a2": "candidatesCount()", "2d364687": "toLucky()", +"2d368088": "setCarddescription(uint256,string)", "2d36ad42": "cleanUp(address)", +"2d36b92b": "extraAddress()", +"2d36dcd9": "rSetter()", +"2d36e224": "transferTest(address,uint256)", "2d370378": "switchSaleAuctionERC20For(address,address,uint256)", "2d3727bf": "CloseDiv()", "2d37329a": "lastBlock_v4Hash_uint256()", +"2d3734a8": "Registered(address)", "2d37e6dc": "getCrowdsaleInfo()", +"2d380242": "mintedAmount()", "2d381f84": "ATTR_GOLDENGOOSE()", "2d38bf7a": "rewardEra()", +"2d395eeb": "redeemFeeBase()", +"2d39c6ee": "TotalInOutAmount()", +"2d3a13ad": "userdata(uint256)", +"2d3a25f3": "burnTokensFrom(address,uint256)", +"2d3a6e39": "setTaxTierDefaultFee(uint256)", "2d3a926a": "computeCut(uint256)", +"2d3ac9f9": "isCompetitionPaid(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)", +"2d3bd82a": "SendFlag(address)", +"2d3be42d": "pagar_cuenta(address,uint256)", +"2d3c42e1": "patronageDueBenefactor(address)", "2d3c5d28": "DonatedEthPayout(address,uint256)", "2d3cb6bd": "mulX(uint256,uint256)", +"2d3cb973": "_idleTokens()", +"2d3cba68": "canCreateOrCancel(address)", +"2d3cbbc8": "upgradeTerm(uint256,uint256)", +"2d3cfcab": "toMint()", "2d3d165d": "parameterizerFactory()", +"2d3d2a1e": "mapAddrxId(address)", "2d3d403a": "challengeContract(address,address,address)", +"2d3e0851": "move(uint256,uint8)", "2d3e2065": "minBetWei()", "2d3e474a": "marketing()", "2d3e579a": "hasRole(address,bytes32,address)", +"2d3e8c93": "refundCooldown()", +"2d3e9818": "test_burn_partial(uint128)", "2d3e9efe": "mint(int256,bytes32,bytes,uint256[],bytes,bytes)", "2d3ec656": "setMinimumIcoRate(uint256)", "2d3ed075": "Certificate(bytes32,string)", +"2d3f7fcb": "bonusBeforeBulkBlockSize()", "2d3fb0d5": "getCrowdsaleState()", "2d3fb721": "secondRoundICODiscount()", "2d3fcc23": "beingVIP()", +"2d3feb67": "dUNI()", "2d405b43": "Win(address,uint8,uint256,bytes32,bytes32,uint256)", +"2d405ede": "removeBlacklistAddress(address)", "2d40957f": "TheWinner()", +"2d409d33": "performanceFee(uint256)", +"2d4109cb": "BuyBackRateMax()", "2d4147e3": "bountyToken()", +"2d414e58": "contractMemos(uint256)", "2d416b4d": "bindCertificate2Wallet(address,bytes32)", "2d41777f": "SnapshotUpdated(address,uint256,uint256,string)", +"2d418a33": "transferInternalCoins(address,uint256,address,uint256)", "2d4194c7": "getAuditRequestBlockNumber(uint256)", "2d41bc9b": "store(uint8[],uint256,uint256,uint256,uint256)", "2d41c7a4": "Nikone()", +"2d41eeb2": "pcc()", +"2d4228e8": "MigrationEndBlock()", +"2d423a6c": "setStorageBytes32(bytes32,bytes32)", +"2d425326": "updatePropertyAddress(address)", +"2d427e15": "getLinkMarketCapUSD()", +"2d42cf7d": "endPool()", "2d434139": "addCustomerNReqAcc(address,address,address)", "2d43573d": "landmarks(uint256)", "2d4364ae": "placeTokens(address,uint256)", "2d448c49": "setO2(address)", "2d449b5e": "Etokenchain()", +"2d44bf84": "GetUNIPrice(uint256,address[])", "2d44c049": "modifyCreator(address,bool)", +"2d4522fc": "peanuts()", +"2d453fd0": "RemoveUser(uint256)", "2d459dd6": "transfer(address,uint48,bytes)", "2d45c78d": "requireAuthorisation()", +"2d460b9a": "newWallet(address,string)", "2d46253f": "CommunityWithDraw()", "2d462dbb": "rollLo()", "2d467358": "LAPTOPTOKEN()", +"2d46990b": "toggleFunctionWhiteListing(bytes4)", "2d46a9ce": "getVestingCreatedAt(address,uint256)", "2d46b54e": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string,string)", +"2d46ed56": "setCfo(address)", "2d46f5df": "registerProduct(address)", +"2d471f6c": "ICOEnd()", +"2d474ab5": "RankRewardsForSFR(address[],uint256[])", "2d475386": "ownerWithdrawUnclaimedCredits()", "2d47adcb": "BancorNetworkToken()", "2d47c29e": "otherchainstotalsupply()", "2d480a80": "thankYou()", "2d483bec": "setNewRate(uint256)", +"2d485c5c": "pricesFeeds(address)", "2d48bcec": "pool_drain(address)", "2d493910": "_computeNextPrice()", +"2d495924": "share_admins(address)", +"2d4994e3": "newTokenReward()", +"2d49e377": "Create(address,uint256,bytes32)", "2d49f5fc": "verifyERC20(address)", "2d49ffcd": "getLocked()", "2d4a170a": "calculateBid(uint256)", +"2d4a588b": "AddFounder(address,uint256,uint256)", +"2d4a7221": "minCollateralRequired(bytes32,address)", +"2d4a819f": "updateCoverImplementation(address)", +"2d4afe38": "PresaleVesting(address,uint256,uint256,uint256,uint256)", "2d4c4aea": "GOTGCOIN()", +"2d4c8096": "platformAddr()", +"2d4d2fb3": "getBeeBoxFullInfo(uint256)", "2d4d671f": "startRevealingPhase()", +"2d4d800c": "protectedMethod()", +"2d4e1dc7": "addErc20Predicate(address)", "2d4e4472": "LandClaimExecuted(address,uint256,bytes)", +"2d4ea624": "fixedPoolCnt()", "2d4ede93": "deleteNode(address)", +"2d4ee5a7": "pickLotteryTokensWinner(uint256)", "2d4f40c6": "setBotAddress(address)", +"2d4fbf83": "takeBuyPrice(uint256,int256)", +"2d4fd0e2": "setSeedAddress(address)", "2d4fd9dd": "rejectDispute(uint256)", "2d501611": "PERCENT_BONUS()", +"2d50701f": "returnSupply()", "2d50e2d5": "getSupercedesRegistryInterfaceID()", "2d5132cd": "getOuvidoriaEnteNome(address)", "2d5134f7": "setApplication(address,address)", +"2d51854e": "findOportunity(address[],uint256)", +"2d51874b": "EachDayRewardAmount()", +"2d520466": "CURRENT_POINT_INDEX_SETTER_ROLE()", "2d52164b": "stopsell()", "2d5216a5": "PHASE_CHALLENGE()", +"2d525db2": "pendingYFWin(uint256,address)", "2d52d1a2": "rewardDistributionEnded()", +"2d5436cf": "liquidationLiveness()", "2d54ab45": "initTokenSale(address,address,address,uint256,uint256,uint256)", "2d54f04d": "changeVotingBlocks(uint256,uint256,uint256,uint256)", "2d5505b6": "_setAreas(address,uint256)", "2d550c0b": "optionality()", +"2d55282d": "lockedLPTokensForNode()", +"2d5537b0": "extension()", "2d55dd31": "_agreeAmendment(address)", +"2d566e14": "buyTokenForERC20(uint256,uint256)", "2d56acce": "setMinAcceptedInPublicSale(uint256,uint256)", "2d56af6c": "burnCoin()", "2d56d572": "releaseMany(address[],uint256[])", @@ -26015,157 +47487,297 @@ "2d578304": "update(address,uint16,bool)", "2d57b6c8": "getInvestorDeposit(address)", "2d57ea40": "FundariaTokenBuy(address)", +"2d580338": "Lock(bytes32,address,bytes32,bytes32)", "2d580ef6": "add(address,bytes32)", "2d581e71": "add_user(address)", "2d5858a3": "publicSoftCapReached()", +"2d58b3a4": "userEndorsements(address,uint256)", "2d58c9a2": "gy()", +"2d58e84d": "clearBetsExternal(uint256)", "2d58fab1": "pauseCWC()", "2d592a34": "sellKissBTC(uint256)", "2d5949a0": "setNumMarkets(uint256)", "2d596330": "bmcPlatform()", "2d59680d": "pool_name()", "2d598d7b": "isAccredited(address)", +"2d598e58": "threshold(bytes32,bytes32)", "2d599750": "updateUrl(bytes32,string)", +"2d599b87": "l1l4users()", "2d59dc12": "displayMessage()", "2d59ea6c": "oscarGuindzbergAddress()", "2d5a5d34": "blacklistAccount(address,bool)", "2d5a858c": "checkCompanyNameAvailability(bytes32)", +"2d5ad7a9": "starNode()", +"2d5b073d": "rootChainManagerProxy()", "2d5b2e15": "CLIForGas()", +"2d5b53a2": "tokenIPFSPath(uint256)", "2d5b778b": "refundingDeadline()", "2d5b8d99": "paymentsOf()", +"2d5b8da8": "CheckState(uint256)", "2d5bbf60": "subscriptions(uint256)", +"2d5be3a4": "SetPolicyKickOff(uint8,uint256)", "2d5c3ed1": "KWHToken(address,uint256)", +"2d5c50b4": "_packHeader(address,uint256)", +"2d5c6815": "sgrimmEDBlock()", "2d5cb5d5": "CryptoKitties()", "2d5cd1d6": "getPrize(address)", +"2d5d6b87": "myruntime(address,uint256)", +"2d5d98d1": "Unbond(address,address,uint256,uint256,uint256)", +"2d5db365": "checkpointGauge()", +"2d5e0ff0": "approve_306(address,uint256)", +"2d5e40a3": "transferCHICAGOw(address)", +"2d5e4270": "updateMonthlyOwnerDB(string)", +"2d5e74d8": "or()", "2d5ea8e3": "numplayers()", +"2d5ecff1": "airdropACTIVE(address[],uint256)", +"2d5eeb3f": "IDAI_ADDRESS()", "2d5f1f61": "getSlashAmount(uint256)", "2d5fd89f": "getClaimData1(uint256)", +"2d604d11": "coupeSmartContracts()", "2d60a72c": "DEPOSITS_KEPT()", +"2d60e7c5": "TreeCutted(uint256,uint256)", "2d614ad2": "Webpuddg()", +"2d616e06": "payoutPot()", +"2d61a355": "vice()", "2d620e1e": "deedsOfOwner(address)", "2d62ce38": "collectAirdrop(bytes32)", "2d62f428": "coinIssuedSale()", +"2d633024": "migrationFinish(address)", +"2d636cfe": "withdrawForUSDT()", "2d63e9f4": "Registration(uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint8,string)", "2d63f728": "mintWithMetadata(address,uint256,string)", "2d646742": "executeGameProposal(uint256,bytes)", +"2d657fa5": "modifyAllowanceViaMetaTransaction(address,address,uint256,bool,uint256,bytes32,bytes)", "2d658888": "RobotarTestToken(address)", +"2d65b051": "addToFreezelist(uint256)", +"2d65c225": "CancelProject(uint64)", +"2d65f489": "collectUsers(address,address)", +"2d6610c3": "isP2Submit(string)", "2d6653a9": "seed_coins_vault1()", +"2d666e38": "tollAmount()", "2d668da4": "returnAmountOfTmexAddressCanProduce(address)", "2d66acf1": "fortune_open(uint256)", +"2d66f387": "inviteBatch(address[])", +"2d67351e": "setInviteYieldRate(uint256)", +"2d6754e5": "setDevFeeReciever(address)", "2d67a79e": "verifyAccount(address,string,string)", "2d67bb91": "World()", +"2d67f0b9": "removeStake(uint256,uint256)", "2d6842b5": "admin_MinimalPayValue(uint256,uint256)", "2d685f15": "takeSell(address,uint256,uint256,address)", "2d68bad7": "withdrawForTo(address,address,uint256)", "2d68bc6e": "saleProceedsEther(uint256)", "2d68de95": "currentStageTokensCap()", "2d690f28": "LogSetTokenPrice(uint256)", +"2d69ba1a": "getblocktime()", +"2d69f231": "SwingyToken()", "2d6a3482": "TradeListing(bytes32,address,address)", +"2d6a37c1": "ENCORE_Fee_Approver()", "2d6acb3a": "RESERVE_POOL_ADDR()", +"2d6ae4fa": "mintCustomHorse(address,string,uint256,bytes32)", "2d6afbd0": "unlockWithSpend(uint256,address)", "2d6b113a": "in_sharing_phase()", +"2d6bbe0f": "hashmask()", "2d6c17a3": "rewind(uint256)", "2d6c25fa": "recommendedPrice(uint16)", "2d6c5a84": "reverter(uint256)", +"2d6cc892": "setRateAddress(address)", "2d6d1646": "untokenize()", "2d6d372d": "getAccountWei(uint256)", "2d6d4caa": "addtoContributos(address,address,uint256,uint256)", +"2d6d8523": "registerContract(bytes32,address,bytes20,bytes32)", +"2d6d91b6": "IMPOSS02()", +"2d6dae08": "MemberAllowance(address,uint256)", "2d6ddfda": "closeModifyCountdown()", "2d6df368": "borrarRegistro(bytes32,bytes32)", +"2d6e0fd1": "submit(uint256,address,uint256,bytes)", "2d6e2bb0": "regularHold()", +"2d6e7511": "apexONEaddress()", "2d6ef310": "closeGame(uint256)", "2d6f70f7": "transferViaTokenTransferProxy(address,address,address,uint256)", +"2d6f7663": "getBonusEndBlock()", "2d6f8049": "setBountyTokensReserve(uint256)", +"2d6fa0cc": "donateToPool(uint256)", +"2d6fa4b2": "getInvestmentAmount(address)", "2d6fc906": "setBonuses(uint256,uint256,uint256)", +"2d70061f": "bridgedTokenAddress(address)", "2d703f88": "getMeeting(uint256)", "2d706a34": "isName(address)", +"2d7087d2": "juryNoCount(uint256)", +"2d70db78": "_setSeizePaused(bool)", +"2d70e7b1": "getGeneration(address)", "2d710551": "UlleToken()", +"2d711e0c": "leastSignificantBitInvariant(uint256)", +"2d72225b": "traits(uint256)", "2d7243ef": "payTodayReward(address)", +"2d725f4d": "_fakePowQ10(uint256,uint256)", +"2d72b61e": "presaleIsOver()", +"2d72d536": "deployRegistrarContract()", +"2d7371e1": "ratesAndUpdatedTimeForCurrencyLastNRounds(bytes32,uint256)", +"2d73d210": "usdxPerUsdcOracle()", "2d740722": "close_pre_ico()", +"2d740f9e": "getOraclePriceETH_USD()", +"2d741372": "getPlayerKeys(address,uint256)", +"2d756359": "_setInterestRateModel_init(address)", "2d75c39a": "_removeClearingPriceValidator(address)", +"2d760b10": "RevokeOwnership(address)", +"2d760d57": "balanceOf(address,uint256,uint256)", "2d762b0d": "changeTokenContractAddress(address)", +"2d76991a": "generateSupply(uint64)", "2d76a85a": "PundiXCash()", "2d76be2d": "player_getPendingTxByAddress(address,address)", "2d76d7b0": "releaseTokensByAddress(address)", "2d774da2": "isSetFund()", "2d776793": "downvoteComment(bytes32,bytes32,bytes32)", "2d7788db": "rejectRequest(uint256)", +"2d779e90": "deed2()", +"2d77d627": "beneficiaryBNB()", +"2d781e73": "vinstallmentLength()", +"2d7851d4": "stackID()", "2d78737b": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d788333": "stakeVault()", +"2d789962": "NEWLARGESTHODLER(address,uint256)", "2d78b7fc": "_withdrawInvestorTokens(address)", "2d7aa82b": "initialize(uint256,uint256,uint256,uint256,uint256,uint256)", +"2d7ab7b7": "createPoll(bytes,uint16,uint256,uint256,address,address,address)", "2d7ae086": "MarkHours(bytes32,bytes32,int256,bool)", "2d7af0f4": "transferLoan(bytes32,address)", "2d7b299d": "setNote(string)", +"2d7b623a": "rollback(address,address,uint256)", +"2d7b6fba": "initialize(address,bool,string,bytes,address)", "2d7b8c98": "returnInvestmentsTo(address)", "2d7bf927": "Migrations2()", "2d7c597f": "whois(bytes32)", "2d7c93e9": "register_claim(string)", "2d7cd4cd": "rand1()", "2d7cdeb1": "withdraw(string,uint256,address,bytes)", +"2d7d274a": "auditcontract()", +"2d7da5a4": "_presaleTimestamp()", "2d7da889": "ruleA(uint256)", "2d7dc81c": "sendAfterIco(uint256)", +"2d7de286": "TransferAddressSet(bytes32,address)", "2d7deae2": "testDeployMultiSigWallet()", +"2d7e32b3": "lidStaking()", +"2d7e4c17": "sendTokenToAddress(address,uint256)", "2d7e92a5": "CWCCTokenIssue(address)", +"2d7eae66": "setRootHash(bytes32)", "2d7eba3f": "ganaBalance()", +"2d7ecd11": "redeemable()", "2d7ed15c": "BNB_TOKEN_PRICE_DENOM()", +"2d7edc9f": "addProposal(uint32,address)", +"2d7f1d2b": "interoperableInterfaceModel()", +"2d7fd882": "hiredCommercial()", +"2d8008ff": "addFundsWithPermit(uint256,uint256,uint256,uint8,bytes32,bytes32)", "2d804ca2": "amountFilled(address,uint256,address,uint256,uint256,uint256,address)", "2d806bfd": "createProduct(bytes32,bytes32,address[],int256,int256,address)", "2d806cdd": "setRefund(address)", +"2d809cb6": "treasury(address)", "2d80bc86": "getNumberOfParticipantsOrigins()", +"2d80caa5": "withdrawProtocolFees(address)", +"2d80db4e": "initialUsdPrice()", "2d80f13c": "EthlanceSponsor(address)", +"2d812837": "__Circle_init(string,string,address,address)", +"2d81324d": "getJackpots()", +"2d814308": "LockToken(address,uint256,uint256)", +"2d81469d": "mintSelfYoutubeNft(address,string)", "2d817a91": "withdraw(uint32[])", "2d81844e": "_createPrecious(address,uint256,string)", +"2d81a78e": "claim(bool)", "2d81e877": "Gocc9()", +"2d825a7b": "commission(string,uint256)", +"2d825f92": "sendToL2AndAttemptSwap(uint256,address,uint256,uint256,uint256)", "2d826eda": "updatetoken(uint256,string,string,string,string,string,uint256,bool)", "2d829146": "buyshares(address)", +"2d829c8f": "reBalance(address)", +"2d82da56": "acoPoolWithdrawOpenPositionPenalty()", +"2d8309ce": "areWinnersExtracted(uint256)", +"2d833c82": "renounceTokenOwner(address)", "2d83549c": "escrows(bytes32)", +"2d838119": "tokenFromReflection(uint256)", "2d839989": "clearingPriceCode()", +"2d83a4b4": "pure_stat_array()", "2d83f5a3": "divAmt()", +"2d83f8fe": "ReferralPool()", "2d84c3e8": "_getSigner(bytes32,bytes)", +"2d84fdde": "I_INDEX()", "2d852552": "CreditDAO()", "2d85db6b": "ChangeEndByManager(uint256)", +"2d864586": "marketOfferRemove(uint256)", +"2d86b95a": "winnersOnlyETH(uint256)", +"2d86c000": "getOffers(address)", "2d873f21": "CrowdDevAllocation(address)", +"2d87480f": "Released(address,address,uint256)", +"2d87ca16": "DEBUG_invalidOp(string)", "2d87cdd6": "DmlContribution(address,uint256)", +"2d87ea60": "fogDensity()", "2d883a73": "getByIndex(uint256)", "2d884a51": "icoOpeningTime()", "2d888869": "toAddress(bytes)", "2d88af4a": "setPauser(address)", "2d88df6f": "lvePay(string,string,uint256)", +"2d891fba": "transferOut(address,uint256,address)", "2d89560a": "TOKEN_INFORMATION_ADDRESS()", "2d897146": "changeBonusIncreasePercentage(uint256)", +"2d89ac32": "MIRROR_STATUS_TIMEOUT()", +"2d89c45c": "getCollectedTax(address)", "2d8a08b6": "DepositEvent(address,uint256)", "2d8a4dca": "committeeKickVotes(address)", "2d8aa855": "playerInput(address)", +"2d8b1a1d": "plant(uint256,string,uint8,bool)", +"2d8b5b28": "spPublishS2(string)", +"2d8b70a1": "getTokenInfo(bytes32)", +"2d8b9ed7": "verifyProof(bytes32[],address)", "2d8c1c35": "level_up()", "2d8c4416": "airDropMonster(uint32)", +"2d8c463d": "Source()", +"2d8c82db": "amountsStaked(address)", +"2d8cd096": "announceWinner()", "2d8d488c": "getProductContractCommissionWei(address)", "2d8d96fa": "stockSellCertainOrder(uint256,uint256,uint256,uint256)", +"2d8da11a": "trade(address,address,uint256,address,uint256,uint256)", +"2d8dce7b": "Touch(bytes32)", +"2d8df79c": "acceptBidByOwnerOBO(uint256,address,uint256,uint256,uint256,bytes)", "2d8df871": "alimtoken()", "2d8e3250": "Version(string)", "2d8e3278": "grantPermission(address)", +"2d8e9a14": "changeExchangeAddress(address,bool)", "2d8ebff1": "joinAndDeposit(uint256,uint256)", "2d8ed84a": "getExpiryDate()", "2d8f0981": "setPI_edit_14(string)", +"2d8fddd9": "number_contributors()", "2d9029ca": "earlyResolve(bytes32,uint256,bytes32,bytes)", "2d9068ed": "matchpoolAddress()", "2d906a19": "Solario()", +"2d90a676": "unstakeNFY(uint256)", "2d90ae94": "transferToOwner()", +"2d90dd92": "remainingMarketingTokens()", "2d910376": "valueFromPercent(uint256,uint256)", +"2d91317b": "isAllow()", "2d91657b": "giveConsent(string,string)", "2d91ad22": "Group_5()", "2d91bf11": "foxcoin(uint256,string,string)", +"2d922e03": "setFeesForTransfer(uint256)", "2d923561": "sellItem(uint256,uint256)", "2d9240f3": "pauseCrowdSale(bool)", +"2d927034": "bindParentAndBuyTicket(address,uint256)", +"2d929cf3": "transferFrom2(address,address,address,uint256)", "2d92b1c0": "setupPhases(uint256,uint256[],uint256[],uint256[],bool[])", "2d92b371": "addVal(address,bytes32,address)", "2d9346ab": "setAgentVerificationByAdmin(address,address,bytes32)", "2d935d11": "calculateTokenOnlyBuyPrice(uint256)", "2d936763": "hasTeamKeepingWithdraw()", +"2d936b46": "premined()", "2d937fe8": "isBeginnerQuestContract()", "2d93a44e": "getEndClaimDate()", "2d93d3ac": "getFirstStageWallet()", +"2d9489c6": "requiredNumberOfVouches()", +"2d94a058": "claimDividendETH()", +"2d94b133": "changeDepositTime()", +"2d94c932": "getTransactors(uint256,uint256)", "2d94d41e": "DEVCLASS_FTL_SPEED()", +"2d94e929": "rsvIssue(address)", "2d9525d6": "YankeesOrioles48()", +"2d95663b": "currentReceiverIndex()", "2d957790": "testRemoteWithdraw(uint256,uint256,uint256,uint256,address,address,uint8,bytes32,bytes32,address)", "2d958dfc": "Payout(address,address,uint256,uint256,bool)", "2d95fdb5": "_isApprovedForAll(address,address)", @@ -26173,231 +47785,439 @@ "2d969204": "KingJamesToken()", "2d96a297": "addStore(uint256,uint256)", "2d976404": "upgrade_token(address,address,string)", +"2d976b88": "getCityIDByName(string)", "2d978678": "left23(uint256)", +"2d97902f": "lotteryDuration()", "2d97fc5d": "rand(uint256,address)", "2d980646": "allowanceEliminate(address,address)", "2d985cfb": "testControlRestartNotUpdatable()", "2d98d251": "ArtaoToken(uint256,string,string)", "2d992bde": "applyAffiliate(address,uint256,uint256)", +"2d992d2c": "GetMsgSenderInfo()", +"2d997d09": "rewardVestingPeriodInSecs()", +"2d99be42": "isMigrationInitiated()", +"2d99cb18": "setAcoPoolStrategy(address,address[])", "2d9a37d3": "getMaxPayout()", "2d9abaed": "Purchase(uint256,address,address)", +"2d9ad53d": "isModuleEnabled(address)", "2d9b1530": "Electrocoin(uint256,uint256)", "2d9b4ab7": "blnpereth()", +"2d9b4b25": "distributions(address,uint256)", +"2d9c0205": "projectURIInfo(uint256)", +"2d9c2d1e": "agreementFullySigned(bytes32,uint256)", "2d9c3052": "createPaper(string,uint256,uint256)", "2d9c6001": "prometheusVoucherSoldCount()", "2d9d5ab7": "withdrawByAdmin(address,uint256,address,uint256,uint8,bytes32,bytes32)", "2d9de472": "setVerified(uint256)", +"2d9e0202": "PoolTransferred(string,address,uint256)", +"2d9e11e5": "liquidityGenerationHasEnded()", "2d9e84b4": "userCampaignID(address,uint256)", "2d9e87c5": "setRefundable(bool)", "2d9e8ed6": "addEntryInYears(address,uint256,uint256)", "2d9ec349": "TOKETH_PRESALE_THREE()", "2d9eceb5": "BETHERcoin()", +"2d9ed8d5": "transferValue()", +"2d9f080e": "file(address,bytes32,bytes32,address)", "2d9f669d": "sendProportion(address,uint256)", +"2d9fa500": "internalLiquiditySwap(bytes4)", "2d9fab98": "suscribeTrial(uint256)", +"2d9fbe91": "privatesaleopeningTime()", "2d9ff1d0": "m_Owner2()", +"2d9ff296": "tokEthPrice(string)", +"2d9fff01": "brand()", +"2da02599": "isVipUser(address,address)", "2da03409": "flushForwarderTokens(address,address)", +"2da08d2d": "exp(bytes16)", "2da09fac": "sellBkgAtExchg(uint256,uint256)", "2da0c25c": "priceChanger()", "2da0d1ea": "etherSold()", "2da11b2e": "biddingClosed()", "2da13d5e": "CONTRIBUTIONS_MIN()", "2da1670f": "deAuthoriseSale(uint256,uint256)", +"2da171c9": "hoursScalingFactor()", +"2da1fb37": "_getBurnCycle()", +"2da22fc0": "contractsGrantedAccess(address)", "2da2440c": "registerAuditor(address,address)", +"2da25de3": "slash()", +"2da27c22": "_decode_varints(uint256,bytes)", "2da39239": "updateUserShares()", +"2da3cd42": "claimUMB()", "2da40888": "TaskUpdated(uint256,uint8)", "2da40ac7": "emitTokens(address,uint256,uint256)", +"2da466a7": "Deposited(address,uint256)", +"2da47d48": "_removeEventMinter(uint256,address)", "2da4dddd": "createSystemSaleAuction(uint32,bytes,uint16)", +"2da4e75c": "upgradeDelegate(address)", "2da5a444": "deleteSire(uint32)", "2da5b88e": "remoteSetWinner(uint256,uint256,uint256)", +"2da5c788": "Join(uint256,address)", "2da5deb4": "addBuyTokensRequest(string,string)", +"2da5ea17": "isSoldOut()", +"2da620a4": "DEUS()", +"2da624a3": "getPricePerFullShare(address)", "2da64861": "bulkReserveTokensForAddresses(address[],uint256[],bool[])", +"2da68e2d": "setStrengthRate(uint256,uint128)", +"2da691b1": "bet_21_first(uint256,address)", "2da6a0d8": "getBomb(uint8)", +"2da6b567": "claimedusers(address)", "2da6b8f8": "_getMinersAt(uint32,uint32)", "2da7293e": "isSuperseded(address)", "2da758b0": "ResearchAndDevelopment()", +"2da804a5": "getCurve3PoolAddress()", "2da80893": "phase_3_rate()", +"2da845a8": "setTrusteeAddress(address)", +"2da89136": "removeMelody(address)", "2da8b2be": "TokenSubtracted(address,uint256,uint256)", "2da8d3e6": "woe()", "2da8f764": "submitVideo(string,string)", +"2da9181c": "USER_ClaimWrappedLiquidity()", "2da92e05": "setEmissionCap(uint256)", "2da9a6cc": "collectMilestoneInvestment(bytes32)", "2da9b51e": "setBuilding(uint8[176],uint8,uint8,uint8)", "2da9d048": "startQueue(address)", +"2daa72d4": "updateNumberCake(uint256,uint256,uint256)", +"2daa8c84": "safePull()", "2dab0374": "sendFutureFundingBalance(address[],uint256[])", +"2dab1cef": "setVswapFarmingPool(address,address,uint256,address,address,address)", "2dab3e7a": "setTransferPlan(address,uint256,bool)", "2dab7ee2": "convertToBytes(uint8[])", "2dabbeed": "reclaim(uint256)", +"2dac04dc": "_getAvailableWethBalance()", "2dac17cd": "getBattleKuns(uint256)", +"2dac65a6": "__IncomeContract_init(address)", "2dacdaf7": "_createGirl(string,address,uint256)", "2dad2f97": "getLeastExpensiveShare(uint256,uint256)", "2dad5872": "newAttack()", +"2dad6829": "proxySetImplementation(address)", "2dad6b6a": "_distributeToken(address)", "2daddb32": "VVToken()", "2dadf781": "KudosOrganisations(address)", "2dae35c4": "RGXBonus(string,string,uint256,uint8)", +"2dae7025": "burnRateOffset()", "2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", "2daeb49a": "fundPuppets()", +"2daecfdf": "setMarketIsValid(address,bool)", "2daedd52": "stake(bytes32,uint256,uint256)", "2daf0e1c": "presaleLevel()", +"2daf3b42": "deleRoleMinter(address)", +"2db08e1b": "addLPPair(address,address,address)", "2db0d129": "VIDALCOIN()", +"2db1651b": "sell(address,uint256,bytes,uint256[],address)", +"2db16957": "_recommandLinkM(address)", +"2db17d68": "getStartedWithCDaiDaiRate()", +"2db22602": "checkHoldingBalance(address)", "2db237bb": "MARGIN_SPLIT_PERCENTAGE_BASE()", "2db25e05": "getTrade(uint256)", "2db26de1": "checkBalances(address[])", "2db2caef": "rmExchangeAccount(address)", +"2db2d44e": "APPercentage()", +"2db32e8c": "UnrealizeFToken(uint256,uint256)", +"2db33aa1": "adjustPosition(address)", +"2db3af29": "crl()", "2db3dc12": "FrozenAccount_event(address,uint256)", +"2db462f7": "OUTTOKEN()", "2db4f279": "createRoom(string,uint256)", +"2db513a8": "unStakeBurnCut()", "2db579f2": "ETHPToken()", "2db59e2b": "MyOwned()", +"2db6077d": "deleteContent(string)", +"2db629c2": "getSpecsById(uint256)", "2db6ad32": "testEmpty()", "2db6e0fe": "fixPlayerFlag(uint256,string)", +"2db6ef92": "buyFromTokenSale()", "2db6fa36": "batchAddToWhitelist(address[])", "2db78d88": "adminSealBallot(uint32)", "2db78d93": "indexes(address)", "2db8069f": "makeMemberOfCommunity(address,uint256)", "2db89533": "Auth(uint8,address)", +"2db8c129": "sendDust(address,address,uint256)", "2db9395a": "availableTo(address)", "2db93fc7": "buyBag(uint256)", +"2db94d19": "totalVestingAmount()", "2db95aa9": "getTomatoCount()", +"2db9c867": "activeBonusCacl_1()", +"2db9f5bc": "zSetGameID(uint256,uint256)", "2dba1a44": "stockCancelSellOrder(uint256,uint256,uint256)", "2dba3614": "app_address()", "2dba5cfa": "transferCoins(address,uint256)", "2dba9e63": "EMACToken(uint256)", +"2dbacef3": "wethJoin()", "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)", +"2dbd921c": "getActiveX6Levels(address)", "2dbe713d": "EOSPlusToken()", +"2dbe84aa": "createSimilarTokens(uint256[],uint256,address,uint256)", "2dbede89": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"2dbf4bd1": "revoc(address)", "2dbf7b98": "certificate()", +"2dbf86c6": "hash3(uint256,uint256,uint256)", "2dbf8bf0": "getRolled()", +"2dbfcda0": "bsharewbtcLPPool()", "2dbffa6a": "executeBuyRequest(uint256)", "2dc03259": "registerUser(bytes32)", +"2dc035e3": "referBonusOf(address)", "2dc03b22": "createNTVU()", +"2dc05419": "shuxue(address,address,address)", "2dc0562d": "taxWallet()", +"2dc095a2": "viewStakingRefDetails(address,uint8)", "2dc09c39": "protectedReclaim(address,uint256)", +"2dc19ec1": "isRegisteredFamer(address)", +"2dc21098": "_maxReferralSpins()", +"2dc24092": "withdrawRecords(uint256,address)", "2dc26661": "unlockOutcome(string,uint256)", "2dc2dbf2": "makeSimpleDeal(address,address,uint256,bytes32)", +"2dc469a3": "repayAllDebtAndFreeTokenCollateral(address,address,address,uint256,uint256)", "2dc47153": "datafeed()", +"2dc49461": "updateValuePoolsWeight(uint256,uint256)", +"2dc4bdca": "addRole(bytes32,string,address)", +"2dc50d9a": "subTokenIdByIndex(uint256,uint256)", +"2dc5664b": "luckBoyLast()", +"2dc627eb": "straightSort(uint256)", "2dc62c4d": "MintProofOfStake()", +"2dc6a4b8": "isValuePoolAccepted(address)", +"2dc6b499": "coreNum()", "2dc70b2a": "getCorrectedTotalBPOfTokens(uint256[])", "2dc7a2e5": "testSetupMultisig()", +"2dc7c282": "AccountBlockedEvent(address)", "2dc88138": "submitCoin(address,string)", +"2dc89de5": "LogDarknodeDeregistered(address)", +"2dc8b069": "multiWhiteListAdd(address[])", "2dc8b9de": "f1(address)", "2dc8be64": "buyoutWallet()", "2dc8d88d": "privatesale_beneficiary()", +"2dc8decd": "freezeNest(address,uint256)", +"2dc8e290": "Refunded(address,uint256,uint256)", +"2dc92f15": "checkWin(bytes32)", "2dc95548": "adjustTokenExchangeRate(uint256)", "2dc9ad7f": "multisend(address[],uint256)", "2dc9b8f7": "createGuess(uint256,uint256,uint256,uint256,uint256)", +"2dc9d38f": "calcAbstain()", "2dc9d3e5": "placeSellTokenOrder(uint32,uint256)", +"2dca22c5": "userBetsInEachRazInstance(uint256,uint256,address)", "2dca374f": "FBToken()", "2dcac811": "TTNCoin(uint256)", "2dcb4691": "EventBuyTank(address,uint256,uint256,uint256)", +"2dcb47e7": "getlistExamineeByDistance(uint256)", "2dcb5c8d": "xaurumProxyWorking()", "2dcbac97": "getGen(uint256)", "2dcbfdfa": "endEarlyBird()", +"2dcc2439": "Buyback(address,uint256,uint256)", +"2dcc7d23": "__MappingTokenFactory_init_unchained(address,address,address,address)", "2dcca1f9": "TokenRetriever()", "2dccba89": "MAX_DEPARTURE_LIM()", "2dcd4e41": "getGain(uint256)", "2dcdcd0c": "minChild(uint256)", +"2dce0f14": "_inRebaseWindow()", "2dce6a1f": "KHT(uint256,string,string)", +"2dcea149": "onePriceNow()", "2dcebd16": "setWorldTreasuryAddress(address)", +"2dcf1f98": "reloadMinereum(address)", +"2dcf6632": "checkUnsoldTokens()", +"2dcf9433": "TokensSold(address,uint256,uint256)", "2dd02e92": "weGotAWinner(address,uint256)", +"2dd0345c": "getBaseOperatorsContract()", +"2dd04237": "bytes32ToAsciiString(bytes32)", +"2dd0bdc0": "edc()", "2dd0e79e": "getMarket_CommunitUsedTokens()", +"2dd0fcd7": "selectedTokens(uint256)", "2dd117e0": "RESERVED_TOKENS_BOUNTIES_ADVISORS()", +"2dd1a278": "uniswapLp(uint256)", "2dd1a932": "WE3TOKEN()", "2dd1cc27": "MichCoin(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "2dd28736": "view50()", +"2dd291a5": "AP_totalBalanceDonateWei()", "2dd2995a": "ETHERCOINSupply()", "2dd2f86b": "maxTokenSale()", "2dd306f7": "getTearBalance()", +"2dd31000": "FACTORY()", "2dd31807": "unlistOpenProposals(bytes32)", "2dd34f0f": "Whitelistable(address)", +"2dd389c6": "withdrawToBuyer(address,address[])", +"2dd38b77": "ViewBurnLimit()", "2dd395ae": "SUN()", +"2dd39b0f": "transferDelegatedWithSign(address,address,uint256,uint256,uint256,string,bytes)", "2dd3ed9a": "addWorkRecord(uint256,bytes16)", "2dd40301": "amountJurors(uint256)", "2dd407f9": "Vag()", +"2dd4148e": "ClaimUbase()", +"2dd43d89": "getTotalSupplies(address[])", +"2dd44cff": "getRatesWithToken(address,address[],uint256)", +"2dd48909": "marketType()", +"2dd499cb": "totalBedSupply(string,uint8)", "2dd4f8d4": "totalSupplyYear()", +"2dd4f9b0": "LASTLEVEL()", "2dd522c6": "ATN()", +"2dd54e67": "REI14()", +"2dd5567a": "stakeFor(address,address,uint256)", +"2dd59cfa": "finalizePresale3()", "2dd5b58e": "setNewGameLogic(address)", "2dd608ce": "setPreICOLimit(uint256)", +"2dd60c5e": "idleToken()", +"2dd60e27": "TokenStamp(address,uint256,uint256,uint256)", +"2dd63f66": "setLootboxAddress(address)", "2dd694ff": "EntryExistAlready(bytes32,uint256)", +"2dd6ad2b": "checkPaymentStatus(uint256)", "2dd6ba7e": "release_remain()", +"2dd6be77": "tradingPlatforms(uint256)", "2dd7030b": "removeAuction(uint256)", +"2dd72b64": "updateMainnetContracts(address,bool)", "2dd78759": "affAddr_()", +"2dd798b4": "deflationSell()", "2dd7ab99": "BlackSnail(uint256,string,uint8,string)", +"2dd8175a": "FEE_EXCLUDED_ROLE()", "2dd81ed3": "CROWDSALE_REWARD_TOKENS_NUMS()", "2dd854d4": "addLoanToPortfolio(uint256,uint256)", "2dd8a25e": "MakeTransaction(address,uint256,uint256)", +"2dd8afdb": "systemSuspension()", +"2dd927b6": "openBoxFromServerNoNonce(address,uint256,uint256[])", "2dd96c84": "presaleGranteesMap(address)", +"2dd9868d": "pi()", +"2dd99996": "farmGenerator()", +"2dd9d0c7": "setNewReaders()", +"2dd9ecd2": "purchesedEggs(uint16)", "2dda04fa": "enterContest(uint32,uint32[])", +"2dda2ca5": "chainSwappers(address)", "2dda30a7": "transferAndFreeze(address,uint256,uint256,uint256)", "2ddae32d": "UTCoin()", +"2ddaeef1": "asksN()", +"2ddb59da": "createMember(address,bool,bool)", +"2ddb60a3": "calcRewardAmount(uint256,uint256,address)", +"2ddb97d2": "PROFIT_ON_CYCLE(uint256)", +"2ddb99c8": "sync(address[],address[],uint256[])", "2ddbc04a": "play2(address,uint256)", "2ddbc97e": "addAuthor(address)", "2ddbd13a": "total()", +"2ddbfc19": "borrowTokenAndUse(uint256,uint256,uint256,uint256,uint256,uint256,address,address,address)", "2ddc36ba": "BRC()", +"2ddc3ab7": "refund(string,address,uint256,uint256)", +"2ddc79b7": "snapshotId()", "2ddcac03": "_checkLimit(uint256)", "2ddcb21f": "limitSupply()", +"2ddd056a": "flashPrintMoney(address,uint256,address[])", "2ddd196f": "bookGuest(string)", +"2ddd3200": "recordable(address)", "2ddd6fa5": "incomingRandomNumberError(address)", +"2dddd49c": "getLinkPrice()", "2dddd8e0": "CROWDSALE_HARDCAP()", "2dddf3e1": "request_withdrawal(uint256,uint256)", +"2dde1701": "claimSchedule()", "2dde1911": "balancesImporter2()", "2dde7241": "priceWithDiscount(uint256,uint256)", "2dde7dbc": "MAX_DTH()", "2dde9aca": "deployment()", "2dde9f81": "getLockWFee()", "2ddea5fc": "enableEscapeHatch()", +"2ddea62b": "transferBond(address,address,uint256[],uint256[],uint256[])", "2ddeac16": "getForeignTokenBalance(address,address)", +"2ddf9726": "ForJuntYe()", +"2ddfa79d": "transferIcoTokens(address,uint256)", "2de02bfa": "allocate(address,address,uint256)", +"2de0385a": "getDigitFromUint(uint256,uint8)", "2de05136": "unregisterVerifier(address)", +"2de0cd24": "getDataRequestProvider(bytes32)", +"2de0f5b4": "luckCodeNum()", "2de16fdb": "fetchDayTokens()", +"2de1ccf6": "findHash(bytes32)", "2de1e234": "requestUSDPrice(string)", "2de22cdb": "currentMintedTokens()", +"2de2aee8": "sendRequestToFlashloan(address,bytes32,uint256,uint256,uint256,uint256,uint256)", "2de39dbe": "DifficultyOracle(uint256)", "2de3ad02": "getUserWalletByUsername(string)", "2de3cddc": "setCostToCreate(uint256)", +"2de3e510": "totalWildcard()", +"2de3ebe1": "LogRedemption(address,uint256)", "2de40ce3": "registered()", "2de4ca59": "Check()", "2de4fbd8": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"2de5211a": "sDARK()", "2de541e0": "updateAvatarInfo(address,uint256,string,uint256)", "2de5aaf7": "getAgent(uint256)", "2de61d1f": "changeIcoTimeRange(uint256,uint256)", "2de6fac6": "delKYC(address)", +"2de781e6": "availabletok(address)", "2de86c5b": "transferPlayerBudget(address)", +"2de880d9": "RemaingHoursToNextBurn()", "2de896f6": "MaxTokensPerAccountUpdated(uint256)", +"2de8a710": "productQualityOK()", "2de90801": "hashtagToken()", +"2de93baf": "_getCurrentSettingId()", "2de954af": "fixedLog2(uint256,uint8)", +"2de956b7": "test_getNextSqrtPriceFromInAndOutput(uint160,uint128,uint256,bool)", +"2de9800a": "convertETHtoWETH(uint256)", "2de9a13a": "ToGoConcert()", "2dea5f6d": "markCombatStarted(uint256)", "2dea82b4": "checkActualPrice()", +"2deb278b": "buyCap()", "2deb65c7": "GetPoolInformation()", "2deb7571": "queryByAddr(address)", "2deb79b6": "getStockShares(uint256)", +"2debb01e": "setSwap2GOFI(address[])", +"2dec05a4": "yTokenValue()", +"2dec6591": "getEstimatedAaveDAIforToken(uint256)", "2ded516e": "giftIsTo()", +"2ded682b": "inputValue()", "2dee466d": "getAllActiveAuctions()", +"2dee6a1f": "showMinimumHolding()", +"2dee6ba0": "doKyberV1Buy(address,uint256)", +"2dee6d52": "requestOraclePriceUpdate(bytes32)", +"2deef13f": "rewardsTotalCap()", +"2def632b": "tokenTransfersAllowed()", "2def6620": "unstake()", +"2deff110": "OnCreateEscrow(address,address,address,uint256,uint256)", +"2deffa02": "setShadowsProxy(address)", +"2df007de": "sellInventory(int256)", "2df056bd": "ServiceProvider(string,string,string)", "2df05a3e": "payoutIndex()", +"2df14000": "transferPltfOwnership(address)", +"2df1a049": "updateUserGuessDate(address,uint256)", +"2df1f1b6": "pepeNames(uint256)", +"2df2eb00": "createTable(bytes32,uint256,uint256)", +"2df2fb73": "add(address,uint256,uint256,uint256)", +"2df327fc": "sm_afterFinishLength()", "2df33eee": "ShareEstateTokenCrowdsale(address,address,uint256,uint256)", "2df38460": "unFreeze(address,uint256)", "2df39546": "_generateRandom(bytes32,uint32,uint32)", "2df3f82a": "setClaim(string,string)", +"2df44a4f": "__Vault_init(address,address,address,address,address,address,address,uint256,uint256)", +"2df4517c": "VendorValid(address,bool)", +"2df451ab": "blocksTilColor()", "2df456d4": "SetAllPaymentsSent(uint256)", +"2df45815": "checkUserReward(uint256,address)", +"2df4e21e": "user_balances(address)", +"2df4e8b7": "postTransferEthToSgaHolder(address,uint256,bool)", +"2df50ec4": "stakeETH(bytes,bytes,bytes,bytes32)", +"2df546f4": "transferToken(address,address,address,uint256,bytes)", "2df56bb2": "unitBattleEthCost(uint256)", +"2df597f4": "payoutNumber()", "2df5a559": "year4LockAddress()", "2df5ce67": "WorkOrderCompleted(uint128,uint256,string)", +"2df6cb48": "_IS_OPEN_TWAP_()", "2df6e80a": "cancelTradeOffer(bytes32)", +"2df73757": "setAirAddr(address[])", +"2df7a13e": "tokenBySourceUri(string)", "2df7c637": "ensureCurrentStage()", "2df80280": "lastState()", "2df80c87": "privilegedMintLock()", +"2df836c5": "BulkPoARegistered(bytes32,bytes32,bytes,uint256,uint256)", +"2df8c1b9": "dba()", "2df8e00d": "becomeMortal(uint256)", "2df939cd": "Banglatoken()", "2df9feaa": "stopElection()", +"2dfa38e5": "getLastAmount()", "2dfaf204": "executeContract(uint128,uint128)", +"2dfb2c01": "previousAddresses(bytes32)", +"2dfb39fd": "euroToken()", +"2dfb5565": "mintToke(address,uint256)", +"2dfb66d7": "openPrice()", +"2dfc6eed": "getBroker(address,address)", +"2dfca445": "proposalId()", +"2dfd0728": "bondTokensHolded(address)", "2dfd27e8": "fecharDoacoes()", +"2dfd8ffe": "isDead(uint256)", "2dfdaf59": "CheckSoilTempException(bytes32,uint32)", "2dfdf0b5": "depositCount()", "2dff0d0d": "getById(bytes32)", @@ -26405,8 +48225,11 @@ "2dff692d": "orderStatus(bytes32)", "2dff6941": "content(bytes32)", "2dff7a2b": "authoriseMaker(address)", +"2dff9e0c": "deporTokenAddress()", +"2dffa539": "hotc()", "2e0025c1": "ROLE_BACKEND()", "2e011136": "deployTokens(address[],uint256[])", +"2e01161a": "isburnlist(address)", "2e012698": "validate(bytes32)", "2e01783d": "calcprice()", "2e0179b5": "increaseApprovalWithSender(address,address,uint256)", @@ -26415,48 +48238,100 @@ "2e028287": "test_oneInvalidAssertFalse()", "2e029c65": "HARDCAP_TOKENS_ICO()", "2e02b24c": "PMCToken(address,uint256)", +"2e02d776": "boundByMirror(address)", "2e038aaf": "randaoAddress()", +"2e03c014": "getGetMinMiddle32()", +"2e0474ed": "kyc(address)", +"2e04b8e7": "userNonce(address)", +"2e04ba6c": "artistLoyaltyFee()", +"2e04c535": "closecontract(address)", "2e04d730": "BuyGoods(uint32)", +"2e0509e8": "superPowerfulDragonOwner()", +"2e051184": "_removeLiquidityAndSwap(address,address,address,uint256,uint256,address,uint256)", "2e05177f": "OpenTransferToken()", +"2e05493e": "alterLiquid(uint256,uint256,uint256)", "2e055bcc": "preSaleSupply()", "2e05b37b": "settleFee(address,address,uint256,uint256)", +"2e063731": "eth_rate2()", +"2e06bd3a": "_ownerLastBanked(address)", "2e06c756": "post(string,string,string,uint256,uint256,address)", "2e071db3": "updateUserAge(address,uint256)", +"2e078452": "verifyGovernmentOfficer(address)", "2e081f31": "pause_3()", +"2e083590": "claimAll(bytes32)", +"2e08b90d": "initFuction(address[],uint256[])", "2e08c3d1": "checkUserWhiteList(address)", "2e08eb77": "InitialTreeICO()", "2e09c32f": "playRound(address,uint256)", +"2e09dd56": "rf(address)", "2e0a020e": "refunduingStartDate()", +"2e0aab23": "isDODOGeneScience()", "2e0b1834": "periodByDate()", +"2e0b78f6": "withdrawStaking(uint256)", "2e0bee7b": "createCampaign(string,string,uint256[],uint256,uint256,uint256,uint256)", "2e0c6c36": "RANGEEND_3()", "2e0ca1ee": "first_pay()", "2e0cb498": "hashValue(bytes32)", +"2e0cb4af": "earnedCount()", +"2e0d2a00": "setICOContract(address)", +"2e0d4212": "getWithdrawableEarnings(address)", +"2e0d9677": "setHarvestKeeperFeeMin(uint256)", "2e0de515": "setTip(uint256)", "2e0dfafc": "addBlockListed(address)", "2e0e11b2": "OrderMatchFailure(address,int256,address,int256,uint256,uint256)", "2e0e5ce8": "getBonusNames()", +"2e0e9fbd": "relayers(address,uint256)", "2e0eb6fd": "Lucy()", "2e0eb943": "doSend(address,address,uint256)", +"2e0eddec": "LogUnmintTokens(address,uint256,uint256,uint256)", +"2e0ee593": "DestroyPool(address)", "2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", "2e0f2625": "DECIMALS()", +"2e0f5e43": "createFund(string,string,address)", "2e0fb349": "mainSaleSecondEndDate()", "2e0fc7a6": "updateContributor(address,uint256,uint256)", +"2e102654": "mulExt(uint64,uint64)", "2e102ee4": "setGasPrice(uint8)", +"2e105b42": "isMintingPaused()", "2e108133": "qshdrop(address[],uint256)", "2e10870f": "makeAnotherContractOwnerOfToken(address)", +"2e10923f": "majorPercent()", +"2e10b5a6": "getStakeV2(uint256,uint256,address,bytes32)", +"2e10d36c": "squid()", "2e10feff": "addSigByProvider(bytes32)", +"2e11666f": "Danh_sach_thanh_vien(uint256)", +"2e121fd0": "selectAvatar(bytes32)", +"2e123273": "alterCommodity(uint256,uint256,uint256)", +"2e1245d7": "STK_ABPT_TOKEN()", +"2e131cf9": "inactivateToken(address)", +"2e1371bd": "OWNER_PERCENT()", "2e13bd10": "not()", +"2e146249": "hashmasks()", +"2e149f08": "Tokens(string,uint256)", "2e14ef92": "mutiSendCoinWithSameValue(address,address[],uint256)", +"2e152221": "remainingTokensForUser(address)", +"2e154107": "individualMinimumAmount()", +"2e154f2e": "disputeBondPercentage()", +"2e15563e": "canAcceptTokens(address)", +"2e157dd9": "TOKENSALE_MIN_DAILY_PER_USER()", +"2e15a59a": "gg1()", "2e15ba63": "forwardData(bytes32,address)", +"2e15e385": "inrateToSettlement(uint256,bool)", +"2e1645e7": "allowedMap(address)", +"2e16686d": "BonusReleaseDateSet(uint256)", +"2e1699d7": "getPregnantDragons()", +"2e16cab3": "addShortLiquidityWithUnderlying(address,uint256,uint256,uint256,address,uint256)", "2e16cf54": "retrieveWallet(address)", "2e16e82e": "BitcoinCityCoin()", +"2e175004": "STAKING_DURATION()", "2e17de78": "unstake(uint256)", "2e18270f": "receiveBTC(address,string,uint256,string)", "2e18762c": "LogUpdateInvestorProfitSum(uint256)", +"2e1897b0": "Refund(uint256)", "2e18cead": "PrivateSale(address,uint256,uint256,uint256,uint256)", "2e18d8a9": "becomeBullsmaster()", "2e190d03": "IncreasingPriceCrowdsale(uint256,uint256)", +"2e1950e4": "ThemDoi(string)", "2e19599c": "getTargetRepMarketCapMultiplier()", "2e19d31b": "proposalText()", "2e19ebdc": "pIDxName_(bytes32)", @@ -26464,143 +48339,252 @@ "2e1a37ee": "TCToken()", "2e1a7d4d": "withdraw(uint256)", "2e1a9ffe": "getPepe(uint256)", +"2e1af9d1": "allocSinMul()", "2e1b2098": "PlayerCreated(uint8,address,uint256)", "2e1b7f08": "SetClaimRate(uint256)", "2e1bbe98": "setLimitEth(uint256)", +"2e1bc98f": "registerPool(uint256,uint256,uint256)", +"2e1c0073": "hashList(bytes32)", "2e1c1d63": "BoardMeetingClosed(uint256,uint256,bool)", "2e1c49d9": "testInitalBalanceUsingNewContract()", +"2e1c7f58": "snapshotAdded(address)", "2e1d22b6": "getPlayerDividend(address)", +"2e1d45c3": "deprecateBBFarm(uint8,address)", +"2e1d859c": "raisingAccessController()", +"2e1da2b4": "registerPrice(uint128)", "2e1dc4b8": "setTokenReward(address)", +"2e1dcc2e": "RocketAddFunds(uint256,uint256,uint256,address)", "2e1dea6b": "updateHours()", +"2e1e0462": "sushiswapRouterV2()", "2e1e786d": "setWhitelist(address[],address[],uint256[])", "2e1eb7fe": "slice32(bytes,uint256)", "2e1ef07a": "getAmountOfTokens(uint256,uint256)", +"2e1f2a9a": "setMarketing2Account(address)", "2e1faf75": "transferToken(address,uint256,uint256)", +"2e1fb2bc": "fun_()", "2e1fbfcd": "getProposalObjectionByIndex(uint256)", +"2e200b53": "ticketsales(uint256)", "2e20255e": "MasterToken(uint256,string,uint8,string)", "2e20b66a": "setThings(address[],uint256[],uint256)", "2e217405": "limitedWallets(address)", "2e21b085": "lastPriceOf(uint256)", +"2e21b4bb": "notAllowedTo(address)", +"2e21cc28": "SetPresale(address)", +"2e21d082": "viewPubStart()", "2e226c84": "rewardForDrawing()", "2e23062d": "increaseBase()", "2e2326d5": "isPrivileged(address)", +"2e232fc2": "CurrentPeriod(uint256)", +"2e233788": "nodeCreationWindowSeconds()", +"2e23dc8f": "firstReward()", "2e247e4f": "SRGToken()", +"2e248c68": "UpgradeComplete(address,address,uint256,uint32,uint32)", +"2e25338d": "spitoken()", +"2e253681": "setPause(uint256,bool)", "2e25aa96": "setCharPrice(uint256)", "2e25d2a6": "marketPlace()", +"2e25f04a": "distributeLPRewardsForMaggotRot()", "2e26328d": "RaiToken()", +"2e271496": "getTuple(address)", "2e271ff3": "getEmail(address,address)", "2e276499": "minPayment()", "2e279344": "getLunckyInfo()", "2e27c10a": "setPI_edit_25(string)", +"2e2801a8": "kingNFTs()", "2e283b94": "TokenClaim4BTC(address,address,uint256,uint256,uint256,uint256)", "2e28b3f5": "SGX_ADDRESS()", "2e28d084": "setBytes(bytes32,bytes)", "2e28fd42": "complete(uint256,string)", "2e293e58": "setClientPaidUpTo(address,uint256)", +"2e295103": "setflpToDeposit(uint256)", "2e297a44": "getSmartContractsLength()", "2e298f75": "setPositiveGrowth(int256)", +"2e29a092": "Standard()", "2e2a51bd": "WitdrawTokenToHolder(address,address,uint256)", "2e2a6488": "evaluation_stage_block_size()", +"2e2a6bce": "obtenerEncargados()", +"2e2a73ee": "maintenanceFunds()", "2e2aad44": "NIMFAToken(address,address,address,address,uint256,uint256)", +"2e2b0842": "getBunnyNameOfTokenId(uint256)", "2e2b3f61": "TokenCreated(address)", "2e2b5809": "Insurechain(address,address)", "2e2bac04": "addControllerContract(address)", "2e2bec5c": "getMinerLevel(uint256)", +"2e2bf30a": "getIlkInfo(bytes32,uint256)", "2e2cce55": "icoRound5()", "2e2d6ab1": "DelayedPayment(address,uint256,address,uint256)", +"2e2dc43e": "getOrders()", "2e2e4149": "minTomoContribution()", +"2e2ebe06": "provide(uint256)", "2e2ed6a7": "PALToken(uint256,address)", +"2e2fc9d8": "aby()", "2e2fe8a9": "ZYL()", "2e2ff7c6": "transferPreSaleTokens(address,uint256)", "2e3196a5": "set(string,bytes32)", "2e323f5d": "Update(uint256,uint256,string)", "2e325020": "getStage(uint256)", +"2e325f4a": "NewBatch(bytes32)", "2e33178a": "zRefundAllPlayers()", "2e334452": "getPublicKey()", +"2e3367ce": "devFundRewardRate()", "2e336eea": "testDieIfMinReturn0()", "2e338df5": "transferInner(address,uint256)", "2e33cd7a": "distructVault(bool)", "2e340599": "info(uint256)", "2e340823": "cancel(uint256[])", +"2e34c124": "removeFromWhitelist(uint8,address)", +"2e35bcca": "rebalanceFee()", "2e35d7a8": "companyTokensCurrent()", +"2e367f9f": "decrementTokenDeposit(address,uint256)", "2e368e03": "beneficiariesPercentage(address[],uint256[])", "2e36a709": "Error(uint256)", +"2e36b7f8": "transferAll(bytes32,bytes)", "2e3712c4": "Bitelectroneum()", "2e376ada": "whitelistIndexMap(address)", "2e379264": "AIRDROP_CLAIM_AMMOUNT()", +"2e37eef6": "phases(uint256)", "2e37fa97": "doneOptions()", +"2e381b12": "changeEligibleCount(uint256)", +"2e3873fe": "BountySend(address,uint256)", "2e39c2b1": "Prize(string,uint256,string)", "2e39ff84": "isGeneSynthesis()", "2e3a0a7c": "destroyMultipleItems(uint256[])", "2e3a4d12": "handleRSMCUpdateTx(address,bytes32,uint256,address,uint256,address,uint256)", "2e3a4def": "isTier2(address)", +"2e3a4fb6": "getchangehashownerfee()", "2e3a5611": "create(string,string,string,uint256,string,string,uint256,string)", "2e3a71d5": "futureFundingBalance()", +"2e3a969c": "changeToWeth(address)", +"2e3ab672": "blackAccounts(uint256)", "2e3acf6b": "contractPreICO()", "2e3aff3b": "getSpinnerPrice(uint256)", +"2e3b0cfa": "DevMode()", "2e3b3123": "_multiSet(address[],uint256[])", "2e3b96bf": "developersTokens()", +"2e3bd55e": "openFaucet()", "2e3be78d": "setPrecisionDirect(uint8)", "2e3c2259": "playingNTVU()", +"2e3c6e93": "AirDropCoin(address,uint256)", +"2e3c96e5": "EventTechOperation(address,bool)", "2e3c9e99": "managerAddr()", "2e3ca08c": "WALLET_MARKETING()", "2e3cbb3b": "sellPop(address,uint256,uint256)", +"2e3cbf4f": "file(bytes32,uint256,uint256,uint256,uint256)", "2e3ced61": "periodPreITO_startTime()", +"2e3d0281": "contributionLimit(uint256)", +"2e3d3461": "systemCancelRemoveLiquidity(uint256)", +"2e3d4807": "getStimulusOracle()", +"2e3dad10": "transferFundedHikari(uint256)", "2e3db828": "getAddressForUsername(bytes32)", +"2e3e05e2": "MagicMoneyMultiply(uint256,bytes)", +"2e3e574f": "setNewHash()", "2e3edd0f": "ntsDepositAddress()", +"2e3f1474": "setArbTolerance(uint256)", +"2e3f7ebc": "getEstimatedTokenForToken(uint256,address,address)", +"2e3f93fd": "contructor(string)", "2e3fa349": "isLpStart()", +"2e3fb593": "unstakePower(uint256)", +"2e3feca4": "onOwnershipTransferred(address,address)", "2e4040b0": "releaseTeamTokensAfter6Months()", "2e404c0f": "_setDOwner(bytes32,address)", "2e4054cf": "vest2advisors(address,address)", +"2e4071d4": "IamMissing()", "2e4099bd": "transferAirdrop(address[],uint256,bytes)", "2e414890": "challenge(uint256,uint256)", "2e415444": "transferUniqueId(bytes32)", "2e416162": "tkstest()", "2e4176cf": "chairperson()", +"2e418335": "alloyPerBlock()", +"2e41a396": "beginSignUp(string,bytes32[],uint256,uint256,uint256)", "2e4216c1": "setMinInvestmentInWei(uint256)", "2e42b012": "LockAccount(address)", +"2e42ba0b": "tokenDrain(address,uint256)", "2e42f80c": "CDC()", "2e42f860": "toUint32(bytes)", "2e430824": "trackable(address,address)", +"2e433bb4": "endwork()", +"2e437945": "VOTE_REWARD_PERCENT()", "2e43bdfd": "approveDecrease(address,uint256)", +"2e43ec0c": "commissionerAddress()", "2e440403": "rounding()", +"2e441b65": "getStrikePrices(uint256,uint256)", +"2e44715d": "getBankCount()", "2e448f4b": "transferAngel(address,address,uint64)", "2e450881": "PRESALETOKENMAXSALES()", +"2e45bfe4": "set0xV2ExchangeWrapper(address)", +"2e45da9d": "certificateStockTotal(uint256)", "2e4644bf": "sellDragon(uint256,uint256,uint256,uint16,bool)", "2e465465": "provideIndex(string,uint256)", "2e466373": "resumePlaying()", +"2e46b284": "setZeroExValidation(address)", "2e46cb09": "AddChipTempTime(uint32,uint256)", "2e46ed94": "uint8ToString(uint8)", +"2e46fb9a": "VoterCount()", "2e471d47": "addInvest()", +"2e476d18": "UNIv2()", "2e478dd8": "provideCertificate(uint256,uint256)", "2e4837ea": "pickUp()", "2e48f65d": "UpdateMoney()", +"2e498b90": "setContractAdvanced(string,uint256,string[],uint256[],uint256[],uint256)", +"2e49a2db": "mintNoSwap(uint256,uint256,uint256,address,uint256,bytes32,bytes)", "2e49d78b": "setStatus(uint8)", "2e4a3657": "returnToken()", +"2e4a8b2e": "costAtSettlement()", "2e4ab29e": "technicalContract()", "2e4b3d59": "setSecurityPercent(uint256)", +"2e4b62af": "PETH_ID_To_Address(uint256)", +"2e4b7ddd": "getMyReferralNumber()", +"2e4bc81c": "pendingRnt(uint256,address)", "2e4bd18a": "ApproveFinishMintingRequest()", "2e4c4a9f": "lunyrPercentOfTotal()", "2e4c697f": "pow(uint256,uint256)", +"2e4c83bd": "submitSolution(uint32,uint256,address[],uint16[],uint128[],uint128[],uint16[])", +"2e4ca69b": "doRevokeGuardian(address,address)", +"2e4ccd94": "DAIbalanceOf(address)", "2e4d2a09": "DMC()", "2e4d3189": "withdrawal(address,uint256,uint256)", "2e4d59c4": "CheckBalance(address)", +"2e4d8561": "adminStartNow()", +"2e4d8794": "sporeToLp1Route(uint256)", "2e4d8c8f": "exerciseToken()", +"2e4dbaa3": "createNative(address,bytes,string)", +"2e4dde60": "unlockAddressDuringITO(address)", +"2e4ea245": "getTraderOperatorsPending()", "2e4eaa15": "destroyToken()", +"2e4f0026": "burnPercentX100()", +"2e4f4024": "designatedReporterNoShowBondTotal()", "2e4f43bf": "allOf(uint256)", "2e4fd0ca": "addReferrer(uint256)", "2e502569": "emitTransferred(address,address,uint256,address)", "2e504bdb": "distributeTokens(uint256,uint256,uint256)", +"2e50649d": "changePOW(address)", "2e50e3ff": "simulateOptions(uint32,uint32,uint32,uint32,uint32,uint8,uint32)", "2e5113b7": "benefit()", +"2e51673d": "numberCreditors()", "2e519ad5": "joinGameReferred(bytes32,address,uint8)", "2e519dd5": "updateLottoParams(uint256,uint256,uint256)", +"2e51bcef": "depositSupportingFeeSubsidy(address,uint256,uint256,uint256)", "2e51cdf6": "getAddressFromBytes(uint8,bytes)", +"2e528a37": "borrow(address,address,address,uint256,uint256,bool)", "2e52d606": "n()", "2e532ba2": "getBackgroundImage(address,uint256)", +"2e533298": "changeOrderStatus(int256,string)", "2e533630": "sendBatches(address[],uint256[])", +"2e5392b5": "DeleteFromBlacklist(address)", +"2e53ca32": "DividendIncome(address)", "2e541234": "AllThingsTokens()", +"2e54153e": "sellNewPut(uint256)", +"2e54bf95": "withdrawFromSP(uint256)", +"2e554076": "addCourse(string)", "2e558a2d": "ETTToken()", +"2e558d5f": "GAS_ARTT2ETH(uint256,uint256)", +"2e558d69": "migrate(address[])", +"2e55c37e": "_numVestingEntries(address)", +"2e55f11d": "LOG_Win(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2e55f8e9": "nftShard()", +"2e56562f": "resvaddr()", +"2e56c91c": "updateAttributesHash(uint256,bytes32,bytes8)", +"2e56d4be": "numTicks()", "2e56f71e": "deactivateMint()", "2e56fd7a": "currentDelayOnNewLevel()", "2e574191": "NEURAL()", @@ -26611,38 +48595,69 @@ "2e5a79fc": "_withdraw(string,address,uint256)", "2e5ab94f": "BLOCKS_PER_PHASE()", "2e5ac9b1": "createToken(address,address,address)", +"2e5af2e6": "userLoanLpt(address)", +"2e5b010c": "ox()", "2e5b02ae": "setCrcWithdrawAccount(address)", "2e5b2168": "maxBet()", +"2e5b3e54": "OneInchToken()", "2e5b4c43": "allowTrading()", "2e5b604e": "lockBonus(address,uint256)", +"2e5b880d": "confirmedMap(address)", +"2e5bb6ff": "setTax(uint256)", +"2e5c1228": "pendingHland(uint256,address)", "2e5c4cef": "RRRR_Token()", +"2e5c5107": "getCurrentDayOfSale()", "2e5cc103": "createDefaultEtherDog(uint256,uint256,uint256,address,uint256,uint256)", +"2e5cd5f3": "finalizeEtherDeposit(address,address,uint256)", "2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", +"2e5d1ee1": "getTimeRemainingToCharge(uint256)", +"2e5d3453": "votestoreplace()", +"2e5d49c1": "flashloan(address,uint256,uint256)", "2e5d89bd": "BlockmoXyz()", +"2e5de389": "removePynths(bytes32[],bytes32[])", "2e5df0fe": "signUpDelegatedUser(string,address,uint8,bytes32,bytes32)", "2e5e00e1": "_FIFTY()", "2e5ec035": "_ApplicationRemoved(bytes32)", +"2e5ed955": "current_minter()", +"2e5f15c7": "manageRarity(bool,uint256,uint256)", +"2e5f6d4c": "profits(uint256)", +"2e5f78bc": "TaskPayed(uint256)", +"2e5fb40e": "samx()", +"2e5fc2d7": "test_DSProxyExecuteMultipleValues()", "2e5fe746": "communityTokens()", "2e609c10": "presaleStartsAt()", +"2e60d1c4": "xfLobbyEntry(address,uint256,uint256)", "2e61319d": "getNumberOfAddresses()", "2e617512": "getAddressFromName(bytes32)", +"2e61d315": "totalAcceptedDeposits()", "2e62190c": "valueWithFee(uint256)", "2e6245c6": "internalBalance()", "2e62efbb": "getOpenOrderInfo(address,address)", "2e63046d": "mybUSDPrice()", "2e63756f": "PriIcoSale(address,uint256,uint256,address,address)", +"2e638b65": "displaybdcp()", "2e639fd5": "GetPlayerInfo()", +"2e63c4ef": "miscPercent()", "2e63cfe1": "Twoandtwo()", "2e63dc80": "get_description_url()", "2e63fa72": "calculateFillHash(address[],uint256[],uint8,uint8)", "2e64bcf1": "weiWantedOf(address)", "2e64cec1": "retrieve()", "2e65280d": "ListNotValidated()", +"2e65d257": "_isDestinationChainIdValid(uint256)", "2e660475": "PonziTokenV3()", +"2e66476f": "swapErc20ToLuna(address,uint256,uint256)", "2e66ee1b": "currentStateToString()", +"2e67720c": "getMaxCollateral(uint256,bytes32)", +"2e68b581": "removeWhiteLister(address)", +"2e68d32d": "_setWpcRate(uint256)", +"2e6997fe": "getAllCandidates()", +"2e69cd74": "setRoboToken(address,bool)", "2e69e69b": "getQuantity(address)", "2e69e8c5": "CarolToken()", "2e6aa830": "testInitialBalanceWithNewMetaCoin()", +"2e6b101f": "addRoute(uint256,uint256)", +"2e6b121e": "estimateETHForBBT(uint256)", "2e6b2662": "sponsoredBonusMin()", "2e6b921c": "claimTokensByAdmin(address)", "2e6bbde5": "_updateCurrentAnswer(bytes32,bytes32,uint32)", @@ -26650,53 +48665,96 @@ "2e6ccbf6": "getFactorybyIndex(uint256)", "2e6d18ec": "getRoomData(uint256)", "2e6d561b": "sendUnsoldTokensToTreasury(address)", +"2e6d7c9e": "calcuAllBonus(bool)", +"2e6da2d5": "transferLockBalance_3(address,uint256)", "2e6e190e": "Play(uint256,uint256)", +"2e6e4c6b": "depositBoradRoom()", "2e6e504a": "trusteeWithdraw()", "2e6e795c": "shareHoldersOf(uint256)", +"2e6eaa36": "eosClassicClaimed(address)", +"2e6edf15": "claimbyrelay()", "2e6f2136": "emitToken(address,uint256)", "2e6f3e4a": "PERCENT_RATE()", "2e6f456c": "updateCrowd(uint256,uint256,uint256,uint8)", +"2e6fba0f": "redeemToWETH(uint256)", +"2e707942": "transferBfcl(address,uint256)", "2e70bd4f": "mintOperationCount()", +"2e712b46": "collectionIndexOf(uint256)", "2e712cc1": "getAdminComission()", "2e71e68f": "IDX()", "2e72057e": "GetLiasonURL(uint256,uint256,uint256)", "2e722561": "CrowdsaleController(uint256,address)", "2e7248bf": "MINIMUM_SELLING_UCCOIN()", +"2e7298c2": "batch(address,address[],uint256[])", "2e729daf": "totalTRsWagered()", +"2e730d57": "aEiBlock()", "2e73dba0": "FeneroToken()", +"2e73eee3": "seed(uint32,address,address,address,uint8,uint8)", +"2e74325f": "maintain(bool)", +"2e74a4de": "setTenant(address)", +"2e74a56a": "emitUnambiguousEvent()", +"2e75079f": "contestSlates(uint256,address)", +"2e7517b9": "mountCitadel(address)", +"2e75459a": "_getPlanet(uint256)", +"2e75ab50": "setClaimFee(uint256)", +"2e764b49": "_refreshWpcSpeeds()", "2e76a6d4": "allocateMarketingTokens(address,uint256)", +"2e76c917": "registerFourteenK()", +"2e7700f0": "getTransactionCount()", "2e771b17": "Spent(address,uint256,string)", +"2e77468d": "spotter()", +"2e778843": "_onTermTransitioned(uint64)", "2e77b3d0": "annual_circulating_supply()", +"2e77c8d2": "disputeId()", "2e788443": "resolve(string,address,uint256)", "2e788faf": "HOLODECKS()", "2e78f9a7": "getCardValue(uint256)", "2e79477f": "SGD()", +"2e797ff7": "setDataRequester(address)", "2e799a77": "GainChip(address,uint32,bool)", +"2e79a42d": "addContactEvent(address,address)", "2e79d702": "addPolicyRule(bytes4,address,bytes32,uint256,uint256)", "2e7a26d6": "Delineto()", +"2e7a913d": "setStakingCap(uint256)", "2e7a9409": "_winJackPot(address,string)", +"2e7ba6ef": "claim(uint256,address,uint256,bytes32[])", "2e7bcc55": "put(bytes32,bytes32,bytes32)", +"2e7be65b": "pA()", "2e7ceb0f": "THIRD_TIER_RATE()", +"2e7cece3": "ethicHubTeam()", "2e7d6253": "Sale(address,address,address)", "2e7db440": "prepurchase(uint32)", "2e7dc6af": "src()", +"2e7df3d5": "referralAccountCount()", "2e7e33df": "sendFunds(address,uint256,bytes)", +"2e7e3aa6": "balanceResolution(address,address,uint256)", "2e7e9af8": "addDistributee(address,uint256)", "2e7e9d82": "ModerateBill(uint256,bool)", "2e7f5107": "_processCredit(address,uint256)", +"2e7f642f": "update_price_wei()", "2e7f9127": "setSize(uint8,string)", "2e7fa0bb": "ReyNetMax()", +"2e7fae31": "setGovernanceLevel(address,uint8)", "2e8057ba": "NucleusVisionToken_ASTER87901()", +"2e8098c5": "setPenaltyAddress(address)", "2e80a85d": "last_jack()", +"2e80add0": "feePercents(uint256)", +"2e80bc6c": "addConvertedTokens(address)", "2e80cc56": "crowdSaleMin()", "2e80d9b6": "QUORUM()", "2e80e77c": "minimumWeiAmount()", +"2e810566": "getRebaseAmount(address,uint256)", "2e817963": "set_sdl(address)", +"2e81ca80": "getAssetIntroducerPriceUsdByCountryCodeAndIntroducerType(string,uint8)", "2e81cdda": "setItemOptions(address,uint256,uint256,uint8)", "2e82aaf2": "lock(bytes32,uint256,uint256)", "2e831cd1": "update_bitcoin_ratio(uint256)", "2e834576": "tokensForEth(uint256)", +"2e8383bb": "sixMonthPercentage()", "2e83faee": "CustodianUpgradeable(address)", +"2e843390": "RoundStart(uint256)", +"2e844a79": "press_B()", +"2e848506": "checkRequestDuplicates(address,uint256,address)", "2e84a374": "reclaimEtherTo(address,uint256)", "2e84bed8": "VESTING_2_AMOUNT()", "2e84e8ca": "ItsComingHomeToken()", @@ -26705,335 +48763,658 @@ "2e860fc2": "setRaiseLimit(uint256)", "2e867c77": "PRESALE_BONUS_PERCENT()", "2e86cb13": "publicGetAsset(uint256,uint256)", +"2e872bb3": "estimateBuyValue(uint256)", "2e875a9f": "RnMmasterReq()", +"2e875c25": "setMinMaxBalanceRewardable(uint256,uint256)", +"2e878d5a": "viewStakingAmount(uint256,address)", "2e87b461": "getPlayerFrontDataForMarketPlaceCards(uint256)", "2e87edd9": "MINIMUM_PARTICIPATION_AMOUNT()", "2e87f4a5": "_emitRoleAdded(address,uint8)", +"2e87fd1f": "jsdteth()", "2e881918": "setVariantCount(uint256,uint256)", +"2e88792a": "SetLANDRegistry(address)", +"2e88a332": "addProducer(int256,string)", +"2e88bbf8": "initialize(address,bytes32,address,uint256,address[])", +"2e8904d5": "buynewslot()", +"2e891ae5": "findFreeCLReferrer(address,uint8)", "2e894203": "delLitAddress(address)", "2e898ddc": "validateTemporalUnit(uint256)", "2e8a34a7": "addTo(bytes32,uint256)", +"2e8a9cc4": "changeAddresses(address,address,address)", "2e8ac384": "SmartIdentityRegistry()", "2e8ac517": "TokensMinted(address,uint256,uint256)", +"2e8ad69f": "initBurnPrice()", +"2e8ae0d0": "onStartGame(uint256,uint256,uint256)", "2e8b73cd": "getPoolUrlOfAuditReport(uint256)", "2e8c0ac2": "balancing(int256,int256,uint256)", "2e8c5793": "BonumPromoToken()", +"2e8ca99c": "burnKAI()", "2e8cbf7d": "_determineAttack(uint256)", +"2e8d0b9e": "isSystemUpgrading()", +"2e8d44db": "engine2currUserID()", +"2e8d6e18": "inCaseTokenGetsStuck(address)", +"2e8d7fb5": "blocksBetween()", +"2e8e39bd": "DisputeResolved(bytes32,address,uint256,uint256)", +"2e8e4c78": "retrieveString()", "2e8e66b9": "newRequest(address)", "2e8e9bb9": "Venuscoins()", +"2e8ebaae": "isStrategy(address)", +"2e8f8a0a": "_ratePresale()", +"2e8ff5bd": "visibilityDelay()", +"2e9006a3": "swapPair(uint256,address,address)", "2e90610d": "auditActivity(uint256,string,uint256,uint256)", "2e9066b2": "lastBlock_v6()", "2e90aae8": "cuck()", "2e913118": "txTaskMap(uint256)", "2e91812b": "setSmallCapWhitelistParticipants(address[],uint256)", +"2e919213": "setRegionBudget(uint32,uint256)", +"2e91a3d4": "getTotalEarnedTrx(uint8)", +"2e91fa9d": "startDart(uint256,uint256)", +"2e926d49": "currentPrice_()", +"2e92a6cb": "annualMintPercentage(address)", "2e92abdd": "withdrawDividends()", +"2e92d882": "registrationExt1(address)", "2e932961": "setTimeEnd(uint256)", "2e93497e": "ownerRandomHash()", "2e9392bb": "marketEggs()", +"2e940ff5": "unlockSetToken(address)", +"2e94341c": "timedata(uint256)", +"2e94420f": "mid()", "2e9453c2": "stateOfICO()", "2e94afe0": "EDN()", "2e94c0df": "_withdrawTokens(address)", +"2e94d93d": "resumePynths(bytes32[])", "2e9501d6": "maxThreshold()", +"2e953e77": "balanceOf_(address)", +"2e955ae6": "tokensSponsors(address)", +"2e95b214": "MintStarted(string)", +"2e962105": "divFloor(uint256,uint256)", "2e963adc": "timelocksContracts(address)", +"2e96b119": "updatePeriodStatus()", +"2e9721b6": "viewNomination(address,uint256,address)", "2e97766d": "getBlock()", "2e97c5a5": "ethToLoveyRate()", +"2e97e4eb": "marketCoolDownTime(uint256)", "2e97f1bb": "setCustomerTxAsSpent(address,bytes32)", +"2e982602": "set_message(string)", "2e984745": "partnerID(address)", "2e9868f8": "issuerName()", "2e986b54": "TransferMinimumFeeConfirmed(uint256,address,uint8)", "2e98a401": "preCheckAndPay(string,uint256,address)", +"2e993611": "settleAuction(uint256)", "2e993994": "changeUnforked(address)", "2e995fd7": "setOraclizeAllowance(uint256)", "2e99df84": "InitiateTeams()", "2e9a06fd": "isValidIPFSMultihash(bytes)", "2e9a3869": "MORCO()", +"2e9acf21": "switch_admin(string)", +"2e9ad467": "getAnyBalance(address)", "2e9b4414": "getSpawnLimit(uint32,int256,uint256)", "2e9b50bd": "addPeer(address)", "2e9bbbb8": "transferOwnershipUpdateToken(address)", "2e9be9d5": "signWithdraw(address,address)", +"2e9c0d82": "getFreeToken(uint256)", "2e9c135b": "proxydeposit()", +"2e9c544e": "setWithoutFee(address[],bool)", +"2e9c58bb": "nop()", "2e9c5e77": "doStackExtension(uint256)", +"2e9c7b65": "maxPremiumRate()", "2e9c91a8": "getStartParams(bytes32)", +"2e9d8ef4": "maxAlpacaSquadCount()", +"2e9de3ac": "TokenPriceChanged(string,uint256)", +"2e9ea05f": "addUpdateTeamMember(uint256,address)", +"2e9edf35": "tot_no_of_prop_onplatform()", "2e9efb8e": "commitToWeek(uint256,uint256)", "2e9f86cd": "create0(uint256,bytes)", "2ea0dfe1": "transferFrom(address,address,uint64)", "2ea1f9aa": "getEpisodeLength()", "2ea23b11": "testTransferFromDoesNotAllowTransferByAddressThatHasNotBeenApproved()", +"2ea24ca9": "lottDistribute(uint256,uint256,uint256)", +"2ea295fa": "borrow(bytes32,uint256,uint256,uint256,address,address,address,bytes)", "2ea38693": "testCreatePrizeUsingNewContract()", "2ea3ad74": "finishPreIco()", "2ea3f9fc": "gelerCompte(address,bool)", "2ea459b8": "claimThrone(bytes)", +"2ea48aaf": "onBuyAndDistribute(address,bytes32,uint256,address,bytes32,uint256,uint256,uint256)", +"2ea57923": "Unlocktoken(address,uint256)", +"2ea5c42a": "burnCzxp(address,uint256)", "2ea60e35": "fourthWeekBonus()", "2ea68d4b": "LazyCoderCoin()", "2ea6d6da": "absMin(int256,int256)", +"2ea7a5fa": "takerArr(uint256)", "2ea7b4d0": "ALPHA_DIVISOR()", "2ea7e0d2": "Test5(uint256)", +"2ea83804": "stakeInRewardTokenOf(address)", +"2ea85ddd": "finished(uint32)", +"2ea88857": "Requested(address,uint256,uint256)", +"2ea8e362": "orderstatus(int256)", +"2ea913d4": "invertedKeys(uint256)", +"2ea9d733": "UnicornSold(uint256,uint256,uint256)", "2eaa7be9": "PoolSegregationCrowdsale(uint256)", "2eaad0b0": "_getAllChildren(bytes32)", +"2eaae261": "preregister(address)", +"2eab2841": "swapETHForTokens(uint256)", +"2eab32a7": "getLpTokenBalance()", +"2eab74d8": "setRestrictContractCall(bool)", +"2eab93cb": "takeOrder(uint256,uint256)", "2eabb38d": "doTransferIn(address,uint256)", +"2eabcea4": "ChangeCullBurnRate(uint256)", +"2eabea02": "stopEmissions()", "2eac3a7d": "divCashCoin()", "2eac5a77": "Getscoins()", "2eac5ca2": "deleteUsername(bytes20)", +"2eac95f1": "isAgent(address[],address)", "2eacfd0f": "admin_withdraw(uint256)", "2ead28fa": "BBTToken(address)", "2eadda54": "number_to_hash(uint256)", "2eae0018": "setMaxChildCount(uint256)", "2eae0d0a": "SetTimes(uint256,uint256)", +"2eae1879": "_setPUREURL(string)", +"2eae26a3": "getLPToken(uint256)", +"2eaee35e": "daiTokenAddress()", +"2eaef9a2": "WEI_ETH()", "2eaf7fe0": "buyTokenPostIco(address,uint256)", "2eaf81f9": "concludeTournament(uint256,uint256)", "2eafb9fa": "setMintTokenOwner(address,address)", "2eafc2aa": "installWinner(uint256)", "2eb0111c": "currentPhaseAddress()", "2eb0b45a": "setGlobalsSize(uint256)", +"2eb0e687": "claimETHWithNyan()", +"2eb0ed25": "nextHalveBlockNumber()", "2eb1482a": "isHorseInStud(uint256)", "2eb1ee9e": "CandyLand(address)", "2eb255ec": "divpaid()", "2eb2c2d6": "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", +"2eb32f5a": "provideLiquidityToRouter(address,uint256)", "2eb37466": "removeWhitelistedAddress(address,address)", +"2eb39cfb": "remainingMintCapacity()", "2eb3a797": "getBetKey(uint256)", +"2eb3e896": "CancelProposal(bytes32,address)", +"2eb3f49b": "getBurn(uint256)", +"2eb41607": "jgjiesou()", +"2eb41b64": "contractSaleOver()", "2eb44efc": "ICOSaleType()", +"2eb4520a": "setRetirementYeldTreasury(address)", +"2eb47613": "getOwnedMachines()", +"2eb47aef": "tiers(uint16)", "2eb4a7ab": "merkleRoot()", +"2eb4b2a5": "RemoveCertificate(uint256)", "2eb51417": "isWithinSaleLimit(uint256)", "2eb516b8": "setGNR(address,address,address)", "2eb56ad4": "getUserTokensByGame(address,uint32)", "2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", +"2eb5d00d": "poolTokenAddress(uint256)", "2eb61d15": "getAdvisorStatus(address)", "2eb67f53": "isERC20()", "2eb73307": "internalRefund(address,uint256)", +"2eb75228": "playThreeDiceTotal(uint8,uint256)", "2eb77b44": "PNNP(uint256,string,uint8,string)", +"2eb81e1c": "referal()", +"2eb8c1aa": "totalCharityPercentOnExpansion()", +"2eb900ba": "TokenURIChanged(string)", "2eb9526e": "GetBoilersInfo()", "2eb95fd4": "doHijack(uint256,uint256,uint256,uint256)", "2eb96988": "getMetBalance()", +"2eb9771b": "global_collateral_ratio()", +"2eb980f5": "getCountPersons()", "2eb98d34": "hosp_count()", "2eb9a518": "ChangeRateOfToken(uint256,uint256)", +"2eb9c189": "registerLocker(address,address,address,address,address,uint256[],uint256,string,bool)", "2eb9f831": "markAsFounder()", "2eba1c40": "deleteName(address)", "2eba9ca9": "liquidateUser(address,uint256)", "2ebabea0": "preSaleRaise()", +"2ebb5056": "contributorComplete(address)", +"2ebb5c1e": "isPreStart()", "2ebba2cf": "unitsPerEthAt(uint256)", "2ebbac6c": "ico4Cap()", "2ebbc58c": "getAllRouter()", "2ebc4293": "getEthereum()", +"2ebc740a": "GameStarted(address,uint256,uint256)", "2ebc760b": "AvPresale()", +"2ebcb7a9": "existingToken(address)", "2ebd1e28": "setTokenAddr(address)", "2ebd632a": "addSystem(address,address)", "2ebd9242": "TOTAL_TOKENS_ICO()", +"2ebd9ceb": "setSelectionDuration(uint256)", "2ebe14b0": "timeoutBlocks()", +"2ebe160a": "price0Average(address)", +"2ebe3fbb": "initVault(address)", "2ebec916": "withdrawalProfit()", +"2ebed9ec": "farmType()", "2ebeee0f": "increaseMinPurchaseQty(uint256)", +"2ebf118b": "frozenPynths()", "2ebfa208": "checkFreeze(uint256)", +"2ebfaf4e": "getDelegatorPools(address,uint256,uint256)", "2ebfeaac": "setCCH_edit_33(string)", "2ec0090a": "withdrawEtherBalance()", +"2ec02d0a": "allwinToken()", +"2ec04124": "_setVAIMintRate(uint256)", +"2ec09483": "privatorForEcologyUnlockTimes()", "2ec0faad": "createPassport()", +"2ec0ff6c": "collectFee(address,uint256)", +"2ec14156": "_minterContract()", +"2ec14e85": "liquiditytoken1()", +"2ec15161": "_registrationBaseFee()", "2ec19f0f": "itemTransfer(address)", +"2ec1a4c2": "delegateVotingRights(address)", +"2ec1f009": "getBestPrice(uint256,address,address,uint256)", +"2ec20bf9": "swapToLowerSqrtPrice(address,uint160,address)", "2ec21efd": "OuCoin()", +"2ec2419e": "orderSizeDampingFactor()", +"2ec277c6": "daiAllowance()", "2ec29c59": "ICOSALE_BONUSJOINTTOKENS()", +"2ec2a32b": "lowest()", "2ec2c246": "unregister(address)", "2ec40ac8": "reached()", "2ec449d7": "MedexTestToken()", "2ec47069": "assignFoundationSupply(address)", +"2ec53340": "poolAmount(uint256,uint256,bool,uint256)", +"2ec5fac0": "DidNotPredict(address,uint256)", +"2ec63d7c": "isLocker(address)", +"2ec69059": "Privacy(bytes32[3])", "2ec6b4f6": "getUnitCoinProductionMultiplier(address,address,uint256)", "2ec6ea30": "Hodl()", +"2ec6f6ae": "m_ERC20_Gen_Lib()", +"2ec7cff9": "getPendingChange(bytes32)", "2ec82b8f": "balanceOfInt(address)", "2ec86103": "booleanToUInt(bool)", "2ec90e34": "decrementOwnedArea(address,uint256)", "2ec9322d": "returnStartTime(uint256)", +"2ec94030": "collatteralRatio()", "2ec9ad44": "removeAccessor(address)", "2ec9c537": "MyFiChain()", "2eca51e2": "elements(uint256,uint256,uint256)", +"2eca5357": "frsDestruct()", "2ecad13f": "getSaleEndDate()", "2ecae90a": "getLeverageList()", "2ecb0d64": "getNumber(bytes32)", "2ecb20d3": "fromHexChar(uint8)", +"2ecb75c7": "marketEpoch(address)", "2ecb9279": "yesHash()", +"2ecb97b4": "setMSSContract(address)", "2ecbd6d8": "allowedForWithdrawn()", +"2ecc72a0": "onEventDeposit(address,uint256)", +"2ecc7cb3": "setCompanyRate(address,uint256)", "2ecc8703": "guardInterval()", "2ecca4e6": "_destroyNinja(uint256)", +"2ecca5b4": "minSystemDepositInAtomicUnits()", +"2eccfdf0": "SentToTeamEth(uint256)", "2ecd071e": "Freezed(address,uint64,uint256)", +"2ecd3be4": "exchangeFee()", "2ecd7020": "getTotalTokenSold()", "2ecde40e": "getRefWallet(address,address)", +"2ece0006": "getBalancerConnectorsAmountByPoolAmount(uint256,address)", "2ece07c3": "setUserAirDropRate(uint32)", +"2ece9e2a": "UNIT_TIME()", +"2ecee036": "priceAtEpochStart(uint256)", "2ecf307e": "_addrNotNull(address)", "2ecf66e4": "softCapToken()", +"2ecfa02c": "getTrainerBrick(address)", "2ed028da": "addGift(address,uint8)", +"2ed04265": "create2(address,address,address,uint256,bytes)", "2ed0d097": "_getTotalTokenBalancePerShard(uint256)", "2ed196bd": "ccLockedUpBalances(address)", "2ed1a7f6": "setProposalTTL(uint256)", "2ed1e521": "generateWinMatrix(uint16)", "2ed1f26e": "unlockBatchOfAddresses(address[])", "2ed20ec7": "Yiha()", +"2ed21eaa": "sporeToLp0Route(uint256)", "2ed23a73": "_releaseTo(address)", "2ed252cb": "toERC20(uint256,uint256,uint256)", +"2ed2811e": "upgradeContract(address[])", +"2ed2a185": "isCardCompleted(uint256)", +"2ed37872": "air_drop_range()", +"2ed3aae3": "WEEK_ZERO_START()", "2ed42bf7": "_config()", "2ed44309": "setIcoParameters(uint256,uint256,uint256,uint256)", "2ed4595a": "participantContributionInEth(address)", "2ed4a2c7": "changeState(address,uint8)", "2ed4b68a": "creditFundNIMFAAddress()", "2ed5016a": "SolidStampRegisterAddress()", +"2ed58e15": "cEthAddress()", "2ed5ca29": "recordFillOrder(bytes32,uint256,uint256)", +"2ed5ef14": "getIPFSHash(bytes32)", "2ed604c8": "secondsLive()", +"2ed6dd1e": "redeemDai()", +"2ed711e6": "metaIncreaseAllowance(bytes,uint256,address,uint256,uint256)", "2ed73df6": "starterPackCardLevel()", +"2ed7643f": "removePosition(uint256,uint256)", +"2ed78a73": "_sellFeePcts(uint256)", +"2ed7d919": "configureSugardaddy(address,address,uint256,address,uint256)", +"2ed89547": "getproposalNOListData(address,uint256)", +"2ed8bf86": "_getDecimals(address)", "2ed94f6c": "bulkWithdraw(address[])", "2ed9859f": "hasSongWriterSigned(address)", +"2ed9a3c8": "lea()", "2ed9cf65": "editPerson(address,string,string,string,uint256,uint256)", +"2eda7de6": "setccotc(bytes32,bytes32,uint256,uint256,uint256)", +"2edab23c": "matePonies(string,string,string,uint8)", "2edb5389": "replenishTokens(address,uint256)", +"2edb73ed": "onPurchase(uint8,uint8)", +"2edc5dc7": "fail(bytes32,bytes32,address,bytes4)", +"2edc6283": "isFarmAddress(address)", +"2edc6b95": "balanceAll(address)", +"2edc71ba": "disputeAction(uint256,bool)", "2edcc661": "crowdsaleStartDate()", "2edcedc6": "parkingSwitches(address)", +"2edd2976": "redeemOrder(address,uint256)", +"2edd8b4d": "engaged()", +"2edeb8cf": "withdraw_fee(uint256)", +"2edeeec6": "sponserRegister()", "2edefc26": "founderMultiSigAddress()", +"2edf0869": "presaleInfo()", +"2edf2168": "like(string)", "2edf8042": "collectProvisions(uint256)", +"2edf9bd0": "withdrawableTokens(uint8)", +"2edfa6a9": "attributions(uint256,uint256)", "2ee01240": "getUnitJadeStealingMultiplier(address,address,uint256)", +"2ee054d3": "registerCodeHash(address)", "2ee057ca": "deallocateItem(uint256,uint256)", "2ee07c00": "closeEvent(uint256)", "2ee07cbf": "AxieClockAuction(uint256)", +"2ee0e4fd": "activeCaller(address)", "2ee119cb": "demint(address,uint256)", +"2ee1a86e": "balanceOfByAssets(address)", "2ee1e64c": "toRLPItem(bytes,bool)", +"2ee1e762": "NewFreeze(address,bool)", +"2ee1e8f7": "noOfTokensLocked()", +"2ee2008a": "setLoop(uint256,uint256)", +"2ee29dc8": "CALL_TIMELIMIT()", "2ee2a7af": "getContractPartner()", +"2ee3a6e5": "PrivateFundEnabled()", "2ee3cf83": "cancelOrderByAdminWithMerchant(string,address)", "2ee40908": "stakeFor(address,uint256)", +"2ee42d73": "waitInvest(string,string)", +"2ee433ff": "BonusDayGet(address)", +"2ee5001f": "computeAddress(uint256,address)", "2ee551bf": "RESERVED_BOUNTY_GROUP()", "2ee56469": "cancelGoldBuyOrder()", +"2ee57f8d": "blockRewardContractId()", "2ee5d2e3": "last_forwarder_created()", +"2ee60eb9": "_getOwnedTokensCount(address)", "2ee6807a": "raiseCoinsDeducted(address,uint32,uint256)", "2ee6f8b6": "changerType()", "2ee6fe55": "_addOwnerPlayerToTeam(uint256,address,uint256,uint256)", "2ee79ded": "change()", +"2ee832aa": "_calcDecayedBaseRate()", "2ee86973": "resolveHTLC(uint256,uint256,uint256,bytes32,int256,bytes32,uint8,bytes32,bytes32)", +"2ee88808": "confirmPayment(uint64,uint256)", +"2ee8a4a9": "ra()", "2ee8dda9": "allocateFoundationToken()", +"2ee91301": "tokenMint(address,uint256,uint256)", "2ee92639": "purchaseCancel(address)", "2ee94319": "RecievedEth(address,uint256)", +"2ee9b112": "participatedAddress(uint256)", "2eea1efe": "getCCH_edit_20()", +"2eea4caa": "enableBurningEmergency()", +"2eeab75a": "testEmptyExists()", +"2eeb0a20": "batchRoundWithdraw(address,uint256,uint256,uint256,uint256)", +"2eeb4242": "totalCommonReleased()", +"2eebce2c": "updateUserState(address,uint256)", "2eebdeb8": "_setStakeHolder(address,uint256)", +"2eebe78e": "depositEnabled()", "2eebe94f": "weiRaisedAmount()", +"2eec1a2b": "getorderIDs()", "2eecbc7f": "deployMeDao(string)", "2eecc46c": "sendTokensToInvestor()", "2eed0079": "createMicroModule(uint256,string,uint256,uint256,uint256,uint256,uint256)", +"2eedcb18": "getEra(uint256)", +"2eee15c8": "claimOrStakeAndClaimLP(bool)", "2eee5a3e": "totalPresaleTokensYetToAllocate()", +"2eeea25c": "getAffiliateSourceCutDivisor()", +"2eeefabb": "transferToPool3Upline(address)", "2eef13cd": "changeArt(bytes32,string,string,string,string,string,address)", "2eef3d65": "query(bytes32,string)", +"2eef5ff8": "grains(uint256)", +"2eefdfaa": "sellFXBintoAMM(uint256,uint256,bool)", "2ef01862": "subscriptionDetails(uint256)", "2ef0a28d": "seraphims(address)", +"2ef0c805": "rewardPerDollar()", "2ef140ef": "send(address,uint256,uint256,uint256)", +"2ef1d5c0": "migrateManual2(address[],uint256)", "2ef22b34": "setExpRewards(uint256,uint256)", "2ef2b51d": "OWNER_TAKE_SHARE()", "2ef2d55e": "channelTimeout()", "2ef2edb8": "endICOStage1()", +"2ef30ad0": "setD2Holdings(uint256,uint256)", "2ef345e4": "DAppSky()", "2ef35214": "setVestingRate(uint256)", "2ef3a7e1": "setBalancePercentageLimit(uint256)", "2ef3accc": "getPrice(string,uint256)", +"2ef43f7e": "rewardTypeLength()", +"2ef46320": "patrons(address)", "2ef4940f": "withdrawalsVotes()", "2ef4d922": "revertMe()", +"2ef4f458": "griffinPerBlock()", "2ef5c784": "allTimePlayers()", +"2ef5fe32": "leaveXfLobby(uint256,uint256)", +"2ef60477": "carIndexToApproved(uint256)", +"2ef66c4e": "transferIntoMortgaged(address)", +"2ef680a7": "POZ_Address()", +"2ef6a743": "getMyEggs(address)", +"2ef6a75c": "purchasePropertyTokens(address,uint256,address,uint256)", "2ef6d6c0": "countWebsite(address)", "2ef70523": "SVDelegation()", "2ef75ebc": "STAGES_PERCENT_RATE()", "2ef761d3": "buyTile(uint8,uint8)", "2ef771ae": "hodlFor(uint256)", +"2ef784b0": "borrowCompound(address,uint256)", +"2ef7c0eb": "getReferralTree(uint256,uint256,uint8)", "2ef82db9": "getCandidatePollingResesult(address,uint256)", +"2ef848cf": "addLitter(uint256,uint256,uint256,uint256,uint256,address)", "2ef875fb": "div10(uint256,uint8)", +"2ef8ba74": "set(string,int256)", +"2ef8bc9f": "transferTokensToAdvisors(address,uint256)", "2ef8c22b": "FunWorldCoinToken()", +"2ef98690": "collectTokens(address,uint256,address)", "2ef9b4aa": "EngkusTechResearch()", "2ef9b5a7": "changeBonusMultiplier(uint256)", +"2efa1b76": "fake(address)", +"2efa26c9": "encodeAddress(bytes)", "2efa3c87": "TokensSpent(address,uint256)", "2efa79d3": "tokensFrozen()", "2efaa460": "testActivateSale()", "2efad59d": "EmployeeServ(address)", +"2efae33e": "stocks(string)", "2efb3f04": "getNumberOfScams()", +"2efb5513": "getConversionvPUREtoETHRatio()", "2efb77c4": "changeDates(uint256,uint256)", +"2efb8237": "Minted(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2efb92ac": "LockAddress(address)", "2efbb80c": "addMeaningToCovfefe(uint256,string)", +"2efbf57e": "createUser(uint256,string)", +"2efc1007": "sendTokensToBridge()", "2efc5013": "Ask(uint256,uint256,address)", +"2efc9169": "setBfmPerProfitBNB(uint256)", "2efcb5e0": "TransferCommissionToken(uint256)", +"2efcc866": "globalDebtCeiling()", "2efd08df": "totalPaintingsCount()", "2efd5632": "candyLandAddress()", +"2efe4c3e": "getTimes(uint256,uint256)", +"2efe91ef": "amountB()", "2efeb4e5": "LogSale(address,uint256,uint256)", +"2effac91": "isBorrowAmountDust(address,uint256,uint256,string)", +"2effb94d": "maxOwnerSupply()", "2effbada": "eligibleTestAndIncrement(address,uint256)", "2f0019f2": "getFeatureStatus(string)", "2f002511": "viewTotalPaid()", "2f004218": "PERCENT_COMMISSION()", +"2f00ac25": "checkAddresses(address,address)", "2f00b84a": "SECToken(uint256,string,string)", +"2f00e3cd": "Mint(address,address,uint256,uint256)", "2f0160e7": "fromOtherCurrencies(uint256,address)", +"2f01730c": "tokenContractAddresses(uint256)", +"2f01bb0f": "withdrawDai(address)", +"2f0332bc": "getPayoutOutcome(uint256,uint256)", "2f034f35": "PerformingMonthlyMinting(uint256)", "2f038fd5": "enable(uint8)", +"2f03b2d7": "USDLDecimal()", +"2f03fc36": "delegateSetSponsor(address,address)", +"2f048afa": "write(uint256)", "2f0573d9": "DSToken(bytes32)", "2f0579db": "_isBreedingPermitted(uint256,uint256)", +"2f05ba71": "Unfreeze()", +"2f05cda3": "crowdsale(address)", +"2f060d5e": "blockSpending(address)", +"2f0619ca": "viewCreditedTENSTokens(address)", +"2f063894": "addFunds(bool,uint256)", +"2f06b5a7": "caclTeamPerformance()", +"2f06bdab": "allowPublicInvestment()", +"2f07216e": "aRobBlock()", "2f0746bf": "unsetWildCardToken(uint256)", "2f078b12": "HashGenerator()", +"2f07eec9": "finishChangeEffectiveSupply()", +"2f085bd8": "setCurveRouter(address)", "2f087a28": "getTokenCap()", "2f08acfa": "Extreme()", +"2f08ebd5": "testOutput(uint256)", +"2f094632": "royale()", "2f0989ec": "release12m()", +"2f0a8e20": "getGapCollateralValue()", "2f0ae513": "calculateTotalWithdrawableTokenAmount(address,address)", "2f0b0222": "numberOfRound()", "2f0b15f6": "testGetUnset()", "2f0b5cb5": "setTokenTransferPercentage(uint256,uint256)", "2f0b9dcb": "getArray2()", +"2f0bb6fa": "_LockStates(address,uint256)", "2f0c2c7c": "getReward(uint32)", "2f0c59e7": "DISTRIBUTION_INVESTORS()", +"2f0c92d3": "sendAllowed(address)", "2f0c9387": "TestCitySnapshot(address,uint256)", "2f0cca79": "dataMerkle(uint256[],uint256,uint256)", +"2f0d1c31": "getStartTurbo()", "2f0d2079": "getEventBanks(uint256)", +"2f0d5c06": "setWhitelistStakingFor(address,bool)", "2f0d8962": "ChangeFeed(bytes32,uint256)", "2f0dbae1": "MaxICOpublicSupply()", "2f0ddcb2": "getTechBonus2(uint256)", "2f0e23fb": "purchaseEndTime()", +"2f0e3120": "_decimal()", "2f0e3a6c": "status(address,address)", +"2f0f4fef": "ZAP_ADDRESS()", +"2f0fe755": "hbtc()", "2f1017cb": "getwinnerloser()", +"2f107734": "accts(uint256)", "2f109d2b": "afterWhtelisted(address)", +"2f10d082": "tokenIdToAddressMap(uint16)", "2f113f27": "LOCK_STAKE()", +"2f120db1": "updateChannelParticipantRegistry(address,string)", "2f121ada": "companyBalance()", +"2f1220c8": "_mapToken(bytes)", +"2f12989a": "claim(address,address,address,address,address,uint256)", "2f12bc02": "LiquexPrivateSale()", "2f1335cf": "splitFunds(uint256)", +"2f135511": "getAmountETH(uint256)", +"2f136a75": "getDaysLived(uint256)", "2f13b60c": "isExpired()", "2f148f55": "showMoseEvent(uint32)", +"2f14bae8": "getAllBeneficiaries()", +"2f15189d": "stakesMonthly(uint256)", "2f156f69": "deployTgeTeamVesting(address,uint256)", "2f158162": "setHKHcoinAddress(address,address)", +"2f15dbfc": "takeMeOutAll(address)", +"2f15e013": "setRewardPoolFee(uint256)", +"2f1618d9": "minimumDepositEthAmount()", +"2f1629df": "tickNext()", +"2f1636e0": "initLaborContract(address,address,bytes32)", "2f16753c": "ShellToken(uint256,string,uint8,string)", "2f16c072": "getPeaks(uint256)", +"2f175f45": "getAllInvestmentCurrencies()", "2f1766c5": "addCA(address,address,string,string,string,string,string,string)", +"2f17a1a8": "NBASE()", "2f17a466": "terminateSchedule(address)", +"2f18220c": "setStabilizerPoolEnabled(uint256,bool)", "2f186785": "showProfit(address)", "2f18a920": "setDeputy(address)", +"2f18b73a": "capitalizeMax(uint256)", +"2f19063d": "totalMintedByUserForTokenID(uint256)", "2f1927cb": "prepareRoll(uint256,uint256,uint256)", "2f194e40": "isMintDone()", +"2f1950a8": "addressById(uint32)", +"2f195680": "amountDue()", +"2f196d74": "receiverSpend(bytes32,uint256,bytes32,address,bool,address)", +"2f19c2c1": "refcode2Addr(bytes32)", +"2f19c56a": "submitProof(uint256,bytes32)", +"2f19d50b": "login(address,string)", +"2f19dd5a": "approve_796(address,uint256)", +"2f1a2b56": "_registerGlobalKey(address)", "2f1a2e72": "allocate(address,int64)", "2f1a332a": "OwnerRandomNumber(uint256)", "2f1a8177": "weiToBnty(uint256)", "2f1a8b63": "modify_ICOEndDate(uint256)", +"2f1ad449": "WEIContributed(address)", +"2f1ae7ab": "testOrder(uint256[4])", "2f1af169": "EscrowMyEther()", "2f1afbac": "doAirdrop(address,address[],uint256[])", +"2f1b19bf": "withdrawNINJA()", +"2f1bd1ae": "getTokenPriceByAddress(address)", "2f1c34ef": "buyStar(uint256)", "2f1c6494": "tgeSettingsAmount()", "2f1c935e": "setSkinContract(address)", "2f1cae85": "isIssuable()", "2f1cc35b": "getRoundBetNumber(uint256,uint256)", +"2f1d15de": "getTimestampAfterNDays(uint256)", "2f1d29fd": "HarjFarmer()", "2f1d3e28": "sendAwardToLastWinner()", "2f1d5a60": "setOperatorAddress(address)", +"2f1d84c3": "isValidOracleAddress(address)", "2f1ddbe3": "nodalblockShortLink(uint256,string)", +"2f1de0e4": "disburseCommissions(bool)", "2f1de784": "getPoolsAllot(bytes32)", +"2f1e2957": "stage2Ends()", "2f1e4968": "makeNewProposal(string,uint256)", +"2f1ec17e": "getCurrentMilestoneProposalStatusForType(uint8)", "2f1ee5e1": "recycleUnreceivedBonus(address,address)", +"2f1f1d1a": "PrivateEquityReserveBlock(uint256)", "2f1f1d43": "getownership2(uint16,uint256,uint256)", +"2f1ff08c": "getUsdRaised()", "2f20270a": "addNewUrl(string)", "2f2035ed": "test_feePoolShare_notTranscoder()", "2f204237": "setupSaleContract(address)", +"2f211012": "notifyRewardAmount(address,uint256,uint256,uint256)", "2f212780": "KYCbit4()", +"2f212ce6": "reTweeted(address)", +"2f213479": "evtAirDrop(address,bytes32,uint256)", +"2f21a663": "getStatus(bytes32[])", +"2f21c988": "Cancel(uint8,address,uint256,address,uint256,uint256)", "2f220d7a": "executeEscrow(uint256,address)", +"2f227f69": "addChainLinkMapping(string[],address[])", +"2f230814": "numberPikaToRegister()", +"2f231fc1": "onDisputableChallenged(uint256,address)", +"2f233759": "BalanceChanged(uint256)", +"2f235786": "addOrUpdateUser(string,string,string)", "2f237e82": "create(string,string,bytes)", +"2f23b783": "idxEP1()", +"2f24067c": "acoPoolFee()", +"2f241a05": "yMining(uint256)", "2f24bdc7": "is_transaction(bytes32)", +"2f252a56": "voteProxy()", "2f254d09": "UGVCToken()", +"2f2617cc": "TokenBalanceOf(address,address)", "2f262471": "GetPlayerCards(address)", "2f265cf7": "totalVotesFor(bytes32)", "2f26b5d1": "delayIcoEnd(uint256)", "2f26f6f5": "getIsCompany(address)", "2f2712f8": "getStat(bytes32,address)", +"2f273fe0": "stakeAddress(uint32)", "2f274d91": "buyVotes(uint8)", "2f2769d1": "assertEq(address,address,string)", "2f2770db": "disable()", "2f278ecb": "reverseBytes(bytes)", +"2f278fe8": "claimYields()", "2f27b556": "card_start_minamount()", +"2f2876d5": "updateMinRewardPoolAmt(uint256)", +"2f28cfb5": "eventAttackBoss(uint256,address,uint256,uint256,uint256,bool,uint256)", +"2f28e940": "getMyTotalOrder(address)", "2f29d8c5": "elapsed()", +"2f2a04be": "yax()", +"2f2aa3b6": "pure_int8()", +"2f2b2b07": "mintAndLockTokenForUser(address,address,uint64)", "2f2b348d": "setBeneficiary1(address)", +"2f2ba814": "changeHat(uint256)", "2f2bd5ac": "testTransferCorrectlySendsTokens()", +"2f2bf15b": "openLoanIDsByAccount(address)", "2f2c00f3": "PTMCrowdFund()", "2f2d783d": "claimReward(address,address,uint256)", "2f2d783e": "rewardRoto(address,bytes32,uint256)", @@ -27041,206 +49422,401 @@ "2f2dc6e2": "setCardsCount(uint256)", "2f2e2d7f": "fstUnitPriceDenominator()", "2f2e3cea": "userDividendsWei(address,address)", +"2f2ea5de": "inDai(bytes32,uint256,uint256)", +"2f2eaae9": "approve_623(address,uint256)", "2f2ebe41": "setToken4Gas(uint256)", "2f2f010c": "OCLotteryContract()", +"2f2f12e3": "setExchangePools(address,address,address)", +"2f2f19ba": "manuallyEnterPresaleParticipant(address,uint256)", "2f2f20c1": "INCH()", +"2f2f2d56": "createToken(string,string)", +"2f2f3a52": "CupCake(address,uint256)", +"2f2f3be1": "executeWhitelisted(address,uint256,bytes)", "2f2f4859": "helloworld()", "2f2f4a63": "buyWorldCupTeamToken(uint256)", +"2f2f81c3": "transferGov(address)", +"2f2ff15d": "grantRole(bytes32,address)", "2f30283e": "testSomething()", "2f3085d6": "LEGAL_EXPENSES_TOKENS()", "2f30c6f6": "set(uint256,address)", "2f30cd5f": "addLockAddress(address,uint256)", "2f310bad": "redeemToken()", "2f318039": "isTransferable(address,address,uint256)", +"2f31afb6": "kunTypeId()", "2f32013d": "Kolidat()", "2f330041": "transfers(address,uint256[])", "2f334131": "lastAddYear()", "2f334652": "teamClaimed()", "2f335a6a": "getTitulaire_Compte_9()", "2f3423b8": "grantTokenStartNow(address,uint256,uint256,uint256)", +"2f344195": "submit(uint256,uint256[])", "2f347e48": "DigitalTicks()", +"2f34ad85": "getContractSource()", "2f34adb4": "airdropNum2()", "2f34c645": "endBounty(address)", +"2f34d282": "setLP(address)", +"2f34fde4": "ownerUpdateProcessPeriod(uint256)", "2f35a71e": "Blockchain()", "2f366637": "buyTickets(uint256)", "2f36cacf": "dispute(uint256,uint256[])", +"2f373993": "throwStringRevert()", "2f377902": "CandyDropOpen(bool)", "2f379fc8": "isInStage2()", +"2f37a774": "hasPendingRoot()", +"2f37b624": "isBound(address)", +"2f37dc59": "pnd()", +"2f380b35": "getPoolInfo(uint256)", "2f381df0": "London()", "2f38262a": "GetBankBalance()", "2f384523": "removeFunds(uint256)", +"2f384662": "epochsLeft()", "2f386a8e": "sellingDisable()", +"2f38778c": "getCallerid()", "2f38b55a": "_checkDetail(uint256,uint8)", "2f39bf80": "LirkToken()", "2f39f5cd": "PresaleMarket(address)", "2f3a212e": "test_oneValidEqUint2()", "2f3a26ee": "TransferTimeSet(uint256)", "2f3a77fd": "narrowRoundPrizeView(uint256)", +"2f3ae68b": "FUNC_3158923D(uint256)", "2f3b24d2": "GenesisManager(address,address,address,address)", "2f3b5603": "setPayoutLimit(bool)", "2f3c8bd1": "returnTokenBalance(address,bytes32)", +"2f3d0203": "enableToken(address,uint256)", +"2f3d064c": "fetchPrimaryOrderNFT(address,uint256)", +"2f3d0814": "initMinter(address)", "2f3d8035": "grantVestedTokens(address,uint256,uint256,uint256)", +"2f3d948c": "concatTwoStrings(string,string)", "2f3e5408": "takerFeePercent()", "2f3e9bc5": "canSelfDestruct()", "2f3f2092": "ARIONTOKEN()", "2f3f234a": "RLCSentToETH()", "2f3fecaa": "startOffering()", "2f3ff501": "getDynamicElementAt(uint256)", +"2f3ffb9f": "withdrawPaused()", "2f401300": "EPAchain()", "2f405bb7": "getCoversForPacks(uint256[])", "2f408990": "testAccessPermissions()", +"2f40907c": "chunksCounter()", +"2f40f218": "withdraw_profit_panel4(uint256)", +"2f41874c": "setSpawnerAdminRole(address)", +"2f42a3a6": "changeMinQtdDiv(uint256)", "2f430e17": "approveTx(uint8)", "2f434748": "setMintAndBurnOwner(address)", +"2f4350c2": "redeemAll()", +"2f43c1bc": "priceCumulativeLast()", +"2f43f4fb": "setPrice(uint256,uint256,uint256,uint256,uint256)", "2f443315": "get_liquidity_account(address)", "2f443785": "ComputeAcornCost()", +"2f449b8f": "newClaimsGroup(address,uint256,bytes32,uint256)", "2f455d51": "changeRate(uint8)", +"2f45a874": "whitelistEnabledForAll()", "2f45aa21": "getblockRevenuePerTicket(uint256)", +"2f45d4de": "getAmountOfTokens(uint256)", +"2f460fef": "getNaz()", "2f4675cd": "OranguSale(uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256)", "2f46b3cc": "getMyReport(bytes32,bytes32)", "2f46ba70": "DAOToken(string,string,uint256)", +"2f470764": "protocolTokenPaid()", +"2f473021": "updateRole(address,uint256,bool)", "2f4736da": "_canTransferBatch(uint256)", "2f47571f": "isCapabilityPublic(address,bytes4)", "2f475c32": "withdrawPart(address,uint256)", +"2f47d89a": "jishiethlimit()", +"2f480ce3": "getDmgLockedByUser(address)", "2f482935": "SFTToken()", +"2f484ad8": "stableBondToken()", +"2f4850b9": "viewPlanPriceInEther(uint8)", "2f48ab7d": "usdt()", "2f48c4aa": "setFoundersTokensWallet(address)", "2f48f151": "addFee()", +"2f4a41c5": "isTransferTaxed(address,address)", "2f4a81df": "howManyOwnersDecide()", +"2f4ad3f6": "strikePrices(uint256)", +"2f4b4803": "_wallet_investor()", "2f4c0b08": "joinGreatHarmon(string,string)", "2f4c3a84": "transferPlayer(uint256)", +"2f4c6809": "incentivizedSlippageTolerance()", +"2f4cad0d": "getPinnedCodePosition()", +"2f4cbe38": "GetDaiBalance(address)", "2f4cf60f": "MultiSigWalletWithTimeLock(address[],uint256,uint256)", +"2f4db549": "startMaxBuyLimitTimer()", +"2f4db75b": "CreationTimeToken()", "2f4e32f5": "FlexiERC20Token()", "2f4e4c27": "ErrorContract()", "2f4ea4ee": "release_1()", "2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", +"2f4f0d1c": "tunnelKey()", +"2f4f21e2": "depositFor(address,uint256)", "2f4f3316": "isInstantiation(address)", +"2f4f79ec": "viewTriggerSubTreeSetting(uint256,bool,uint256,uint256)", +"2f4f841d": "ExcessTokensWithdrawn(address,address,address)", "2f4fda30": "BIG_NUMBER()", +"2f506b20": "userBuyAmountSum(uint256,uint64)", +"2f50fbfa": "debug(string)", +"2f5105f8": "getRefundingAmount(address)", +"2f511d47": "target_supply()", "2f512b6b": "LomeliMultilpleTokens()", +"2f51ca50": "setBDPMasterPendingAtBlock()", "2f520081": "setPurchaseTimestamp(uint32,uint64)", +"2f521327": "UserRegister(address,uint256,uint256)", +"2f528660": "deleteTokens(uint256)", +"2f52e595": "isCToken(address)", +"2f52ebb7": "claim(uint256,bytes32[])", "2f53cc96": "CHINESE_EXCHANGE_3()", +"2f53e22f": "storageFees(address)", "2f53e929": "emitBurn(address,uint256,string)", "2f540d94": "BONUS_MID()", +"2f54243a": "getSolutionAction(uint256,uint256)", "2f54a61e": "setClaimerForTile(uint16,address)", "2f54bf6e": "isOwner(address)", +"2f54d857": "AuctionEnded(address,uint256,uint256,uint256)", +"2f54f6e4": "batchTransfer(address[],uint256[],uint256[],uint256[])", +"2f552b0d": "authereumProxyFactoryVersion()", +"2f552c41": "setSweepReceiver(address)", "2f553d31": "isCreated(bytes32)", "2f554288": "listPrycto2()", "2f554d53": "agreeFromPod()", "2f5552f5": "KAL6Token()", +"2f557153": "GetBancorData()", "2f55745b": "getPendingCrateForUserByIndex(address,uint256)", "2f558ba0": "setFinish(uint256)", +"2f55bdb5": "fundSupplyAmount(uint256,uint256,uint32,uint256)", "2f55f125": "decreaseAllowanceOrEmtpy(address,uint256)", "2f56dc5f": "prepareContinuousPurchase()", "2f570a23": "test(bytes)", "2f576f20": "doNothing()", +"2f57fbf0": "bidAddress()", "2f581480": "CandyCoinBigBang()", "2f5867b3": "changeRates(uint8,uint256)", "2f58768f": "contractors()", +"2f588d51": "BondPayoutsPaidGetAt(address,uint256)", +"2f58aba2": "getLastAccountingTimestamp()", +"2f58b235": "getNoteRoot()", +"2f58b80d": "getLendingPoolDataProvider()", "2f591a6a": "setRateForTransaction(uint256,address,uint256)", "2f593404": "payoutCycleInDays()", +"2f596d6b": "dispatchTimes()", +"2f597286": "lock(uint256,address,uint256,bytes32)", "2f597e71": "testLongInput()", "2f598404": "getCatDetails(bytes5)", +"2f598cdc": "WithdrawRound(address,uint256,uint256)", "2f599242": "getEvaluationByStudentID(uint32,uint64)", +"2f59c2d5": "swapExactETHForTokens(address,uint256,uint256,address,address,uint256)", "2f5a5c5b": "timegame()", +"2f5aa4ad": "multiplierFactor(address)", +"2f5acfa4": "DipTgeEnded(uint256)", +"2f5b1564": "lotteryAddr()", +"2f5baf1e": "isBootstrap()", "2f5bb661": "getNextVestingEntry(address)", +"2f5bc736": "underlyingBalanceStaked()", "2f5c3102": "Make_Deposit()", +"2f5c4615": "liquidityRewardsDivisor()", +"2f5c52b9": "confirm_new_address()", "2f5c5a08": "setEthealToken(address,address)", "2f5d3916": "testControllerApproveTriggersEvent()", +"2f5dd065": "perTokenPerBlock()", +"2f5de5ce": "A17(bytes)", +"2f5e2090": "getNextTrophyCardOwner()", +"2f5e5560": "increaseMyReward()", "2f5e80c3": "withdrawToken(address,uint16)", "2f5e8d29": "setDAIRate(uint256,uint256)", +"2f5eb24c": "buydonationEvent(address,uint256,uint256,uint256,address)", "2f5ebbaa": "marketState(address,uint256)", +"2f5ed41c": "initialize(uint256,address,uint256,uint256,uint256,uint256,uint256)", "2f5f3b3c": "pointer()", +"2f5f4e11": "amountDROPforPAY(uint256)", +"2f603c04": "set_stock(address)", "2f605106": "getSponsor(uint256,uint256)", +"2f60f525": "halvingTimestamp()", "2f6113dc": "assignICOState(address,uint256,uint256,uint8)", "2f6174ef": "getSig(bytes,uint8,bytes32,bytes32)", +"2f61b845": "_getLastPayrollDate(uint256,uint256)", +"2f625490": "phasesTokenPrices(uint256)", +"2f628759": "chainCycles()", "2f62a6ff": "fipsRegister(uint256,address,bytes)", +"2f62d56f": "readSymbol(address)", "2f634a90": "getOwner(address,uint256)", "2f635c6a": "VolumeImbalanceRecorder(address)", "2f63e2fa": "_incrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"2f63e520": "distributionFromToken(uint256,bool)", "2f640a09": "setConfirmer(address)", +"2f643aea": "getAllATokenSupply(address)", +"2f644db6": "AuditOutcomes(bytes32)", +"2f645252": "updateAccessTiers(address)", +"2f646165": "LogNewReferrer(address,address)", "2f646bd5": "ArmMoneyliFe()", +"2f64d386": "word()", "2f65142c": "getTransfers()", "2f653279": "getReceivedTrade(address,uint256)", +"2f655da7": "_VESTING_DURATION_()", "2f658c3f": "Raffle(uint256)", "2f65be54": "transferBonusEarnings()", "2f65e086": "NardoTest1()", +"2f65fe32": "_getBlackListStatus(address)", "2f661946": "cliffPeriod()", +"2f667ed8": "getOneDayRewards(address,address,address)", "2f668c5c": "etherFeeMin()", +"2f669613": "revokeAllowance(uint256)", "2f66d5a7": "KPOP_ITEM_CONTRACT_ADDRESS()", "2f6701b0": "withdrawalList(bytes32[],address)", "2f674ab9": "maybeUpdate()", "2f677038": "grantUserRole(bytes32,string,address)", +"2f67ac87": "setPromo(uint256)", "2f67cf56": "eth_fallback(address,bytes)", +"2f680795": "getENSRegistry()", +"2f681811": "potentialNewOwner()", "2f684b83": "addDecimals(uint256,uint256)", "2f695053": "getCertifierAtIndex(uint256)", "2f69ca13": "createCounts(bytes32,address)", "2f69f161": "getGameResultPrice(uint256)", +"2f6a1a2a": "feeExchange()", "2f6a638b": "GetMaxEther()", "2f6a6e20": "calculateMaxEggG0(uint64)", +"2f6a7dc8": "SendEtherExcess(address,uint256)", "2f6ae467": "transferDocument(bytes,address)", +"2f6b64ca": "getPledgeDelegate(uint64,uint64)", "2f6b7bbd": "Gubberment()", "2f6b8143": "wethBalance()", "2f6b9099": "completeOrder(address,address,address,address,bytes32,uint256)", +"2f6c3946": "pl1lockedAmount()", "2f6c493c": "unlock(address)", +"2f6d1fb9": "maxBProxBtcValue(uint256,uint256,uint256,uint256)", +"2f6d4562": "batchCollectReward(uint256)", +"2f6da4a2": "listActiveAdmin()", "2f6dc6b3": "removeBorrowingOfferItem(uint256)", +"2f6de536": "transToSeller()", "2f6e2711": "Int256Oracle(int256)", "2f6e931f": "changeBurnPausedTime(uint256)", "2f6f1c68": "speciesSymbol(uint256)", "2f700fb6": "autoJudge()", "2f70197c": "_getBalanceFactor(bytes32)", +"2f70d1ba": "isDepositor(address)", "2f7146cc": "setLockingTimestampFromTo(uint256,uint256)", +"2f71aa01": "DebugApplicationRequiredChanges(uint8,uint8)", +"2f71b912": "getTokenLength()", +"2f71bb40": "approve_291(address,uint256)", "2f71d022": "updateTokenInfo(string,string)", +"2f71f5ee": "sendRewards3(address,uint256)", "2f723c7f": "RewardHoDLers()", +"2f7263cd": "hasUnprocessedSlashes(address)", "2f72d697": "GCOXOWNToken(string,string,uint8,uint256)", +"2f72f6f6": "totalAmountStaked(address)", "2f72ffaf": "getEmployerContractsByStatus(address,address,uint256[],uint256[])", "2f73010a": "ratePerWeiFirstPhase()", +"2f733ef6": "setNextBoughtAmount(uint256)", "2f7359a3": "TOKEN_STANDARD_ERC223()", +"2f73a9f8": "setTokenFactory(address)", "2f73ef91": "getFundsWalletBalance()", +"2f73fc1a": "getBuyRate(address,address,uint256)", +"2f7431b9": "yourTEDBalance(address)", "2f743591": "burnFinished()", +"2f743e12": "SenbitToken()", "2f7442bb": "transferBounty(address,uint256)", "2f745c59": "tokenOfOwnerByIndex(address,uint256)", +"2f758a8f": "SEED_SALE_TOTAL()", +"2f7596e2": "_isBotThrottling()", "2f75a929": "extractRepository(string)", +"2f75ca81": "SetAddr(address)", +"2f76920a": "ownerDeal(address,uint256)", "2f76c31d": "roundTwoLimit()", +"2f770e09": "NewItem(uint256,uint256,uint256,uint256,uint256)", "2f77428e": "collectdustatcontract()", "2f774e44": "getMsgSigner(bytes32,bytes)", "2f77688b": "TestingUseCoin(uint256,string,string)", "2f77dba4": "tokenPerEther()", +"2f7805b6": "AttributeRevoked(address,address)", "2f781228": "IjasCoin()", "2f781393": "setDiscountStep(uint256)", "2f782b32": "weiContributed()", +"2f789eec": "findPw()", +"2f78a88b": "send3(address,uint256)", "2f78bab1": "LockDiv(address,uint256)", "2f78dc14": "ErrMsg(address,string)", "2f7907e4": "calculateBestPrecision(uint256,uint256,uint256,uint256)", "2f7981c2": "getWealthOfUser(address,address)", "2f798500": "clockAuctionStorage()", "2f7a163b": "nearestKnownBlockHash()", +"2f7a3849": "mOldSimpleStaking()", "2f7a407b": "exchangeFormula()", "2f7a7192": "capFiat()", +"2f7abd10": "pay10()", "2f7b3677": "getMetadataUrl(uint256)", +"2f7bab49": "setLockType2(uint256,bytes1)", +"2f7be6d4": "bulkSetupDone()", "2f7cdb0e": "DEV_DECIMALS()", +"2f7cfc63": "DidOpen(bytes32,address,address,uint256)", +"2f7d336a": "distributeMintWpc(address,address,bool)", +"2f7d3ef1": "getFileData()", +"2f7da681": "MibSetLog(address,uint256,uint256,uint256)", "2f7dbc9b": "fromInt256(int256)", +"2f7e3a4f": "TransferFromSender(address,address,uint256)", +"2f7e8f79": "NewProtoCard(uint16,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bool)", "2f7f3ecf": "findNextHour(uint256,bytes)", +"2f7f4135": "getPairCSPVaults(address)", "2f7f7f55": "approveFee()", +"2f7f889e": "approveCoupons(address,uint256)", +"2f7f89e3": "tranferFrom(address)", "2f80324c": "EURO()", +"2f804bd2": "cancelOutstandingDepositsForExodusMode(uint64)", "2f8061d4": "repayment(address,uint256,address)", +"2f8080de": "urn()", +"2f80c54f": "agentList(uint256)", +"2f80c564": "notEqualStringFailTest()", +"2f80cbcb": "pendingL2l(uint256,address)", +"2f81343d": "startAirdropDOGS(uint256,uint256,uint256,uint256)", "2f815ed1": "transferToContractCustom(address,address,uint256,bytes,string)", +"2f81b15d": "verifySignature(uint256,bytes32,bytes)", +"2f81b5df": "initResetUser(address)", "2f81bc71": "multiMint(address[],uint256[])", +"2f81fa7a": "SLONG()", +"2f82d5d2": "alreadyRedeemed()", +"2f82d993": "transferBetweenAccounts(address,uint256)", +"2f831ff6": "scoreTransaction(uint256,int8)", +"2f8331df": "lastAdArticles(uint256)", +"2f836136": "plebTimeBetweenIncrease()", "2f83e16d": "_allocateTokens(address)", "2f83f781": "fetchSuccessfulSaleProceed()", +"2f8426bf": "partyToken()", +"2f848859": "getBaseAssetDelta()", +"2f84bd6b": "main_addr()", +"2f84c391": "setCurrency(address)", +"2f84c96f": "operatorManager()", +"2f84dbfd": "closePosition(address,address,address,address,address)", +"2f850855": "latestMerkleRoot()", "2f851184": "H4DAddress()", "2f85577f": "changeACAddress(address)", +"2f85c820": "difficulty6()", +"2f85d547": "updatePerBlock(uint256)", +"2f85f033": "emergencyTransferTimelockSet(address,address,uint256)", "2f85f092": "destTokensAdvisors()", "2f86282e": "CheckGameStart(bool)", "2f865568": "liquidate(address)", +"2f866f73": "debtRegistry()", "2f869d26": "getAssetPoolAddress(address)", "2f86f2ee": "MAX_OPEN_SOLD()", +"2f871b8c": "calculateRewardPerSecond(uint256)", +"2f87e4be": "redeemableFromTokens(uint256)", "2f8803bb": "addressCOO()", +"2f882c41": "getLiquidityEpoch(uint256)", +"2f883908": "infoTiers()", "2f885f79": "trakToken()", +"2f886486": "add(string,uint16,uint16,uint16,bool,uint16,bytes32[],uint256[],uint256[])", +"2f8899f3": "getTotalStaked(uint256)", "2f88ae5f": "setIco3Tokens(uint256)", "2f899fec": "Pharmatron(uint256)", "2f8a12fe": "setMsg2(string)", +"2f8a68c5": "initPool(address,address,uint256,uint256)", +"2f8a82cb": "getCardTokenId(uint256)", +"2f8ab800": "FlaxableReward()", "2f8abfbe": "roundIt(uint256)", +"2f8ac58b": "setWeiAmount(uint256)", +"2f8ae83a": "startingTokens()", "2f8b023d": "allowedTransferFrom(address)", "2f8b0250": "setEndTimeIcoStage1(uint256)", +"2f8b0705": "PeerToPeerNetworkingService()", +"2f8b8d41": "afterTransferFrom(address,address,address,uint256,bool)", +"2f8bac5d": "_canMakePayment(address,uint256)", "2f8bd891": "directMint(address,uint256)", "2f8c239f": "giveAdvisers(address,uint256)", "2f8c98c2": "flipMovingSwitchTo(bool)", @@ -27248,103 +49824,174 @@ "2f8d2d19": "BurnAssignedFees(address,address,uint256)", "2f8de810": "tokenPriceInWei()", "2f8e7133": "lockBBK(uint256)", +"2f8e9d5f": "create_bid(uint64,uint16)", "2f8eed98": "adminTransfer(address,uint32)", "2f8f0c92": "canDeposit(bytes32,address)", "2f8f175c": "seal(address,address,uint256)", "2f8f8c0b": "approveCertificate(address)", "2f8ffce8": "allItemsWrong()", +"2f9014b4": "getSubContract(bytes4)", "2f9021fd": "withdrawToCooperate(address,uint256)", +"2f90a6fc": "AqueductDistributionLive()", "2f90daf4": "raisedForEther()", +"2f916390": "getTop3Runners(uint256)", "2f91822c": "ETHCollector()", +"2f91a724": "bAssetIndexes(address)", "2f91b591": "RemoveMinter(address)", +"2f91d4c7": "DividendsReinvested(address,uint256,uint256)", +"2f91f429": "RecoverLostToken(address,uint256)", +"2f91ffad": "releaseToIssuer()", +"2f9219f3": "revocations(bytes32,address)", "2f923c59": "tokenCapForFirstMainStage()", "2f926732": "register(bytes32,bytes32)", "2f92acc5": "test_4_accessRestriction_execute_shouldThrow()", "2f92b151": "HotLove()", "2f92f5a0": "query1_fnc(uint256,string,string,uint256)", +"2f940c70": "emergencyWithdraw(uint256,address)", "2f94afba": "cao()", "2f94e335": "_createLambo(uint256,address,uint64)", "2f95055e": "deleteHiddenPosition(uint32,int64[2],bytes16)", +"2f9518c6": "l1l6users()", "2f95b833": "requiredStackDepth()", +"2f95e5bb": "update_state_root(bytes32,bytes32)", +"2f960e8b": "generateLotteryResult()", "2f969d43": "MAX_UNSOLD_RATIO()", +"2f974a6b": "granting(address,uint256,bool)", +"2f974f45": "registerIdentityKey(bytes16,address)", "2f977b3f": "newTask(string,string,uint256,uint256)", "2f978ec0": "getProviderInfo(address,uint256)", +"2f983b01": "cdlContract()", "2f98511c": "createHistory(bytes32,address,address)", "2f991b5a": "hasMemberAccess(address)", +"2f997459": "returnVotes1(uint256)", "2f99c6cc": "BENEFICIARY()", "2f9a7c22": "TransferToWaves(uint256,string)", "2f9a8bf2": "StreamerContractChanged(address,uint256)", +"2f9acd47": "getMKRPrice()", "2f9b3126": "founderShare()", "2f9b4096": "removeExternalController(address)", +"2f9b7325": "MAXIMUM_ADDRESS_CONTRIBUTION()", +"2f9bc981": "devFeeReciever()", "2f9c1df6": "createDeposit(address,uint256,uint256)", +"2f9c7a5b": "displaymtt()", "2f9cb9aa": "getClosingTime()", +"2f9e51b2": "partAmount()", +"2f9ec7ba": "isSystemAddress(address)", +"2f9ff0c3": "computeMemberRewardOverInterval(bytes32,uint256,uint256,uint256)", "2f9ffab9": "Airstayz()", "2fa00e58": "fipsTransfer(bytes20,address)", "2fa05208": "minimalGoalReached()", "2fa06ff1": "exchangesLockEndingAt()", "2fa07bfc": "_increaseApproval(address,uint256,address)", +"2fa084a3": "AdminLockdown()", +"2fa0fad0": "sharedBonusAmount()", +"2fa13cb8": "NO_PARAM_MAPPING()", "2fa146d8": "officialEmail()", +"2fa18e37": "top3_doi_tong_duong_chay_max()", +"2fa1a383": "queryCoreReleased(address)", "2fa1df4f": "RIG()", +"2fa23c71": "earlyIncomeScannedSum(address)", "2fa241fc": "playerBook()", "2fa267fc": "ReadBible(uint16,uint16,uint16,uint16)", "2fa26aaa": "minimalEthers()", +"2fa27398": "Assign(uint256,address,uint256,uint256,string)", +"2fa29aee": "batchMatchOrders(bytes[],bytes[])", +"2fa2af10": "rangeLocation(int24,int24)", "2fa30d33": "calcResolve(address,uint256,uint256)", "2fa3a41e": "testLowestTranch()", +"2fa3d034": "deflateRoundsWithDonor(uint8,address)", "2fa3e006": "CreatedToken()", +"2fa41caf": "sbStrongValuePool()", +"2fa438a3": "lockProtos(uint16[])", "2fa49c06": "SetTxFee(uint256,uint256)", "2fa4f694": "setAssessorPool(uint256,address,uint256)", "2fa553d3": "sendMinerByOwner(address,uint256)", "2fa5620a": "Mpay(uint256,string,string)", +"2fa5825f": "getAmountWithdrawable(address,address)", "2fa61cd8": "generate(address)", "2fa6512f": "clearWalletPending()", "2fa69585": "strikeCall()", +"2fa6d3fd": "getStakeholderBalanceOf(uint8)", +"2fa6e16b": "unstakedSupply()", +"2fa74794": "sellTargets(address)", "2fa78393": "returnUserBalance(address,address[2],uint256[7],uint8,bytes32[2])", +"2fa78837": "getPLASMAbalance()", "2fa7cbfb": "getExecCost(uint256)", "2fa80164": "AgruCoin()", +"2fa81692": "getFile()", "2fa8591e": "TACTICALCRUISER()", +"2fa90b1b": "LogStartTimeSet(uint256,address)", "2fa92dde": "jackpotConditionPercent()", "2fa94fb3": "teamTrustAccount()", "2fa975c5": "seatsList(address,uint256)", "2fa99791": "completeOrderBySafePeriod()", +"2fa9d18b": "checkSignatures(uint256,bytes32,bytes32,address,uint256[3][])", +"2faa036c": "DefaultFeeChanged(uint256,uint256)", "2faa2998": "startICO_20_December()", "2faa3014": "uintFunc(uint256,uint256)", "2faa5e3c": "changeMerchantAccount(uint256,address)", +"2faa794d": "ZIGS_BY_STAGE(uint256)", "2faa9bbb": "LockClaimed(address,uint256)", "2faad46f": "addAllowedTransactor(address)", +"2fab59ed": "setClaimed(address,uint256)", "2fab662a": "_decreaseMintApprovalAfterMint(address,uint256)", "2fabc174": "multFracCeiling(uint256,uint256,uint256)", +"2fabfd1e": "tokenAddressToMarketId(address)", "2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", "2fac1d36": "isReadyFor(address)", +"2fac392d": "GetRecord(bytes32,address,bytes32)", +"2fac5cfc": "getSupplyHistory(bytes32)", "2facc4e8": "depositGovernance(uint256,address)", "2faccbeb": "changerProprio(address)", +"2faceb1d": "initializeSchain(string,address,uint256,uint256)", "2fad380d": "burnWithDecimals(uint256,uint256)", +"2fae3849": "player_id_refCode(address,uint256)", "2fae43dc": "m_ETHPriceLowerBound()", "2faebb20": "getBettersArrayLength()", "2faef47a": "AbcToken()", "2faef4e5": "getGranteesSize()", +"2faf0776": "getPublicSaleContractAddress()", +"2faf0c6a": "defaultSaleCommissionPercentage()", "2faf1895": "saveContractEvent(string,string)", "2faf9a93": "checkUnsold()", +"2fafa3da": "currentRewardPerToken(uint256,uint256)", "2fafb11d": "get_profit_by_roll_under(uint256,uint256)", +"2faffd8d": "requestPrice(string,string)", +"2fb02a08": "pvpBattle(uint256,uint256,uint8)", "2fb07482": "restoreWebGift(address)", +"2fb102cf": "mint(address,uint256,string,string)", "2fb131d4": "preicoClosed()", "2fb1746d": "turnOnTradable()", "2fb1b25f": "sign(uint256)", +"2fb1c86a": "contractPaused(address)", "2fb22cfa": "ECO_SYSTEM_STAKE()", "2fb260f6": "EthertokenDelta(address,address,address,uint256,uint256,uint256)", "2fb27669": "preSaleComplete()", "2fb2a061": "rateForDays(uint256)", "2fb2bcf4": "postTwit(string)", +"2fb2c8b1": "dispute(string)", "2fb2f3dd": "updateFrozenToken(address)", +"2fb3b361": "initialize(address,address,address,address,string)", +"2fb47b20": "getThresholdValues(uint256,uint256,uint256,uint256)", +"2fb4f04a": "lockedBalance(address,uint256)", "2fb556f7": "tokenNeedForBonusLevel0()", "2fb565e8": "update(uint256,uint256)", "2fb5b5f6": "setNextSnapshotBalance(address,uint256)", +"2fb5b716": "getInvestmentAssetDetails(bytes4)", "2fb61f7d": "dispute(address,bool,uint256)", "2fb767c5": "failSubtractWhenALessThanB()", +"2fb77825": "initExclusive(address)", +"2fb7be84": "initBatch(uint256[],uint256[],uint256[])", +"2fb7d979": "totalCBONDSCashedout()", +"2fb81fea": "OpenMoneyCrowdsaleImpl()", "2fb840f5": "transferFrom(bytes32,bytes32,uint256)", "2fb88284": "parseRLPHeader(bytes)", +"2fb933ff": "external1()", "2fb9d203": "VoteSubmitted(address,bytes8)", +"2fba75d4": "artIndexToApproved(uint256)", "2fbaba26": "setHash(uint256,string)", "2fbac05c": "transferManagment1(address)", +"2fbb85b3": "opHTC(address)", "2fbbc9c9": "calcCoinsReceived(uint256)", "2fbbde2d": "buyDrago()", "2fbc0bf1": "getSalePrice()", @@ -27353,110 +50000,201 @@ "2fbcf568": "getCurrentCryptantFragmentPrice()", "2fbd2134": "_migrateExpiredCrates()", "2fbd2432": "transferExternalToken(address,address,uint256)", +"2fbdc070": "rewardedBalancePerUser(address)", +"2fbe009a": "setThresholdForSignatures(uint256)", +"2fbe062d": "totAllowanceOf(address)", +"2fbe10e9": "updateFunders(address,bool)", +"2fbe3b03": "disputeIDtoTransactionID(uint256)", "2fbebd38": "foo(uint256)", +"2fbeceb1": "basToken()", +"2fbedacf": "includeTrader(address)", +"2fbf2c01": "read(uint256,string)", "2fbf6f73": "TRNDToken()", "2fbfbc85": "PETTCOIN()", "2fbfc252": "changeTeamETHAddress(address)", "2fbfc376": "HRY(uint256,string,string)", "2fbfe951": "change_min_amount(uint256)", "2fbfeba9": "getTokenAddressByName(string)", +"2fbff030": "_getTaxFee()", "2fc0aad3": "isNumericString(string)", +"2fc0f4fe": "totalPoolRewards(address)", +"2fc11c0f": "pendingInterest(uint256)", +"2fc12261": "setTakerMargin(uint256,uint256)", "2fc15517": "kelly()", "2fc17e40": "TdeStopped(uint256)", "2fc17f8b": "setCompte_3(string)", +"2fc1f190": "getPlatform()", +"2fc2974b": "pynthetixProxy()", +"2fc29c66": "baseOnlyInvestor(bytes32)", +"2fc35182": "arbitrage(bool,address,address,uint256)", "2fc35948": "SCWhitelist()", +"2fc3d61a": "INITIAL_PAYOUT_INTERVAL()", "2fc3f13f": "WindowPeriodClosed(address,uint256)", +"2fc42621": "swapBBTToETH(uint256,uint256)", +"2fc4cd98": "resolveConflict(uint256,bool)", "2fc4eea0": "removeName(bytes32)", "2fc516e3": "COMMON_BUDGET_AMOUNT()", "2fc52220": "setPOOL_edit_19(string)", +"2fc54f73": "withdrawEarly()", +"2fc58932": "tokenCummRewardPerStake(address)", "2fc5a8ec": "Joules()", "2fc60405": "TANK_TYPE()", "2fc64ff7": "organizer8()", +"2fc6c854": "getRevealedToken(uint256,uint256)", "2fc6e8b7": "isEnd()", "2fc71565": "setMarketplaceAddress(address,address)", "2fc761a6": "createItem(uint256,string,address,uint256,uint256,uint256,uint256)", "2fc77d85": "TotalETHGivenToNorthPole()", +"2fc80880": "ERC20Recovery(address,uint256,address)", "2fc8124d": "setSecondWallet(address)", "2fc84de8": "XCTToken()", "2fc8c39d": "TADPOLE_BASE_REQ()", "2fc94ba6": "getAddressArrayLength(bytes32)", "2fc9a415": "_emitAccessGiven(address,bytes32)", +"2fc9ee6b": "disablePayee(address)", +"2fca3120": "InitialTimestampSec()", "2fca3b0d": "TBECrowdsale()", "2fca5414": "isTAO(address)", "2fcaa8fa": "removePresaleHolder(address)", +"2fcaaa76": "refreshOpenAMM(bool)", +"2fcad521": "stakingLPOf(address)", +"2fcada1f": "votersLUT(uint256)", "2fcb20e9": "changeReserveTeamRecipient(address)", "2fcb6628": "_stringGas(string,string)", +"2fcb6ca3": "viewTreasuryAddress()", +"2fcc274c": "DigestUpdated(uint8,address)", +"2fcca3ac": "deauthorize(address[])", "2fcd410a": "MiniPoolEdit_2()", "2fcd6075": "BlocktekUniversity(address)", "2fcdeba1": "fund_owner()", "2fce1291": "EcroContract(uint256,uint256,uint256,uint256,uint256)", "2fce1b7a": "GetSocioFromCuenta(address,address)", +"2fce1ddf": "complaintBadData(bytes32,uint256,uint256)", "2fcf84bf": "getEthereumFromPreIco()", +"2fcfb95a": "updateMinterAddress(address)", +"2fd040d6": "takenLoan(address,uint256)", "2fd0f37e": "claimConsolationPrizeLoot(uint256,address)", "2fd1b320": "myMostRecentAssignedAudit()", +"2fd1c2cd": "unbond(bytes32)", +"2fd1db25": "convertFee()", +"2fd2125f": "fulfillQuestionAsk(bytes32,string)", "2fd23817": "MFTU()", +"2fd2e742": "tiles(uint256)", +"2fd33322": "coreTeamAddress()", "2fd3bd2e": "passFoundation()", "2fd3dee8": "testDisputedValidMemoryAccessSequence()", "2fd3fc9d": "bthFoundationWallet()", "2fd463e1": "STARTMETADOLLAR()", "2fd47643": "getRoundIssued()", +"2fd49abe": "lastPool()", +"2fd4cda7": "getAccountLiquidity()", +"2fd4dc72": "openPublicRegistration()", "2fd4ec28": "terminateIco()", "2fd4f2f9": "changePreICODates(uint256,uint256)", +"2fd508c9": "lengthOfArray()", +"2fd520f7": "setProduct(uint256,uint256,uint256,uint256,uint256,string)", +"2fd53674": "userBalanceAtLastPaid(address)", +"2fd53697": "burnGasAndFreeFrom(address,uint256,address,uint256,bytes32)", "2fd55265": "depositToken(address)", "2fd5a13d": "GetClientCategory()", "2fd5ecda": "b66AdvisorFundDepositAmt()", "2fd61f92": "unstakeEther(uint256)", "2fd6d40b": "getBetValueByGamble(uint8)", +"2fd6d7f7": "tvlInBNB(address,uint256)", +"2fd6ff0d": "ClaimBootyEvent(address,uint256,uint256)", +"2fd7a04b": "pendingCoreVaultBit(uint256,address)", "2fd949ca": "terminateContract()", "2fd95a6f": "createGen0(uint256,uint256,uint16,bool)", "2fd97c7d": "AllotAward()", +"2fd97ed2": "completeFundSetup()", "2fda7166": "stopReceiveTicket()", +"2fda7735": "REWARD_MULTIPLIER(uint256)", "2fdadc21": "sendtoA(uint256)", "2fdae3c5": "addProposal(string)", "2fdaf6af": "claim_tokens(address,uint256)", "2fdb3e6c": "getBalanceETH(address)", +"2fdb5658": "claimBulkRegistrationId(address,bytes32[],uint256,uint256)", "2fdbb3d4": "cumAcceptedDeposits()", +"2fdbbb9b": "mensaje()", +"2fdbd157": "depositOnBehalf(address,uint256)", +"2fdbdd2c": "depositRefund(address)", "2fdc505e": "mine(bytes32)", "2fdcfbd2": "sendToken(address,address,uint256)", +"2fdd0f51": "getBidStatus(uint256)", "2fdd653e": "getFortune(uint256)", +"2fdd7df3": "createBook(uint16,uint256,int256,int256)", +"2fdd9ad1": "cakeLiquidityPercentageAllocation()", "2fdde1d4": "setUseTimeBasedBonus(bool)", "2fddf859": "getLockedTokens_(address)", "2fdeca37": "DEFAULT_TEXT()", "2fdf15d5": "usernameToAddress(bytes32)", "2fdf795a": "BOUNTY_TOKENS_PERCENT()", +"2fdf851d": "startBlockMining()", "2fdfd2ae": "checkSecret()", "2fe045fa": "initiateClaimDelegated(string,bytes32,uint8,bytes32,bytes32)", +"2fe05e73": "findRewardFee(uint256)", +"2fe07d86": "getStakePrice(address)", +"2fe08a1a": "addAffiliateRank(uint8,uint8)", +"2fe09c7c": "transferGift(uint256)", +"2fe0c719": "LogUpdateOdds(uint256,address,uint256,uint256)", "2fe1c0f8": "tokenTransfer(address,uint256,address[])", "2fe20e94": "totalRestrictedTokens()", "2fe29c78": "auctionIdToSeller(uint256)", +"2fe2c00c": "burnByBurner(address,uint256)", +"2fe2c262": "postDemand(uint256[],uint256[])", +"2fe43cce": "depositEther(uint32)", "2fe45a8d": "RetailSale(address,address,address,uint256,uint256,uint256,uint256)", +"2fe48944": "myWishAddress()", "2fe4b2d9": "submitSteak(address,address,bytes32)", +"2fe53133": "RefundHolder(address,uint256,uint256,uint256)", +"2fe555d3": "addressValues(uint256)", "2fe55632": "NexxusToken()", +"2fe56c1b": "setMaxSupplyExpansionPercent(uint256)", +"2fe5d312": "_all_Claims(uint128)", "2fe69430": "TokenERC20(uint256,string,uint8,string)", +"2fe69784": "executeSwap(uint256,address)", "2fe6a47c": "largestPro()", +"2fe6a8c5": "sendRepayment(address)", +"2fe6bc81": "authorize(address[],bool[])", "2fe6ecb2": "PHASE3_SUPPLY()", +"2fe6f06b": "finalizePresale1()", "2fe71915": "request(uint256,address,address,bool)", "2fe7a0bd": "burritoData(uint256)", +"2fe87d8f": "setComRate(uint256)", +"2fe8a6ad": "onlyOwnerCanUpdateRegistry()", "2fe8ace3": "changeSuperOwnership(address)", "2fe9541f": "addIssueBounty(string,uint256)", "2fe97e3a": "approveAndCall(address,uint256,string)", +"2fe97f37": "VADR()", "2fe9950e": "adminSetDuel(uint256,uint256)", "2fe99bdc": "insert(string,string,string)", "2fe9e1a9": "change_address(uint256,address,address)", "2fe9f821": "startRefunds()", +"2fe9fd7d": "tokenReward9()", "2fea0c40": "revealBid(bytes32,uint256,address,address,bytes32,uint256,uint256)", "2fea6915": "weiReqFund()", "2fea7b22": "GetIndex(uint256,uint256,uint256)", "2fea7b81": "getIdentity(address)", "2fea9624": "DepositorsQty()", +"2febe86e": "getUserDeposit(address,uint256,uint256)", +"2fec0c79": "Buy_Diem(uint256)", +"2fec4b0c": "recievepush(uint256)", "2feceb46": "extend_end_block(uint256)", "2fed3c9e": "VoteCast(address,uint16)", "2fed7da0": "getNextBackUserId()", "2feda2fa": "POI()", +"2fedca14": "getDefaultTokensAmount()", +"2fedd246": "property_indexes(uint256)", +"2fee2098": "fixedOracleFeePerSecondPerPfc()", "2fee26ce": "addApp(address,uint32,uint32,string)", +"2fee9e7e": "wl(address)", +"2feec9d6": "setRewardPoolDivisor(uint256)", "2feee782": "YWBToken()", +"2feeea3a": "isRelayerValid(address)", "2feef2ec": "expectedAmount()", "2ff077be": "updateBettingOpensTime(bytes32,uint256)", +"2ff0d012": "getCurrentMargin(address,address,uint256,uint256)", +"2ff11be1": "secondaryOwners(uint256)", "2ff284c2": "computeFee(uint256,uint256)", "2ff2e9dc": "INITIAL_SUPPLY()", "2ff36e9b": "BTHBCoin()", @@ -27464,27 +50202,53 @@ "2ff42757": "approveAndCall(address,address,address,uint256,bytes)", "2ff4f24e": "createLoveStory(bytes16,bytes32,bytes32,uint256)", "2ff50b51": "modifyEscrowPrice(uint256,uint256)", +"2ff53ef1": "setReLevel(uint8)", +"2ff56fcc": "setOperationsPercentage(uint256)", "2ff59dec": "getEthartRevenueReward()", +"2ff59ed0": "globalAccess()", "2ff59ee7": "miningIncentiveWallet()", "2ff5e00c": "setAttaccContract(address)", "2ff5ec3f": "armyTanksCount(uint256)", +"2ff640b5": "renderAvastar(uint256)", +"2ff69ccc": "usedVolume()", +"2ff6a392": "getEstimatedETHforToken(address,uint256)", "2ff6c55f": "DEVELOPMENT_FUND_LOCK_TIMESPAN()", +"2ff6d83b": "Get_Tokens_Balance()", "2ff6fe76": "priceToken()", +"2ff7042a": "protocolFeeDenominator()", +"2ff73ddc": "postincr_u8(uint8)", "2ff76163": "getAdres(uint16)", +"2ff79161": "initializeDomainSeparator()", +"2ff7a44b": "settleCollatteralRatio()", "2ff7a81f": "getAvgReportingGasPrice()", +"2ff83dab": "Companion1()", +"2ff8430f": "directPrice(uint256)", +"2ff890ea": "CurveLiquidityGaugeV2()", "2ff92323": "oraclize_query(uint256,string,string[4])", "2ff98d53": "getStageClosingTime(uint256)", +"2ff9a696": "doSend(uint256)", "2ff9b03a": "hackDecisive(address,uint256)", "2ff9f017": "exchangeNominsForHavvensAtRate(uint256,uint256)", "2ffa815b": "changeHouse_and_Owner_Addresses(address,address)", +"2ffaaa09": "setLockUp(uint256,uint256)", "2ffb054e": "setMarketplaceManager(address)", +"2ffb5497": "hasAlphaChannel(uint256)", +"2ffb5e47": "GameWon(address,uint256,uint256)", "2ffb8631": "getReleaseLockfileURI(bytes32)", +"2ffb995d": "calcDividend(address,uint256)", "2ffb9e64": "updateGasForXaurData(uint256,uint256)", "2ffbf988": "packedBytes(uint256)", +"2ffc130c": "TimeLockExtended(uint256,bytes32)", +"2ffc1628": "setTaxActive(bool)", +"2ffc3214": "signAudit(uint8)", "2ffc7b7e": "firstDiscountPrice()", +"2ffcb4cb": "commitCommissionChange(bool)", +"2ffd68d3": "countClaimsToken(address)", "2ffda1e0": "setBlackflag(uint256,bool)", "2ffda952": "walletWithdrawTokens(uint256)", "2ffdaa44": "BDToken()", +"2ffdfbf4": "rasenshuriken(uint256)", +"2fff3bab": "removeETHLiquidityFromToken()", "2fff7bb3": "assignMultirequest(uint256)", "2fffaa00": "Kingdom()", "2fffb3f9": "getLockFundsReleaseTime(address)", @@ -27492,74 +50256,141 @@ "2fffee92": "setContingencyFunds(address)", "30007ed3": "tgeStartBlock()", "30008b48": "pullDividendPayment(uint256)", +"3000ffb0": "adminSetAds(address)", +"30010435": "_registerSingleForBody(address,address,address,uint256)", "30012940": "checkTeamFreezePeriodOver(address,address)", "300182b8": "sale1(address,uint256)", +"3001e65e": "getAmount0DeltaInvariants(uint160,uint160,uint128)", "30021bae": "SubDiv(uint256)", "300240d6": "MAX_REGULAR()", "300309f0": "setUserPaybackRate(uint256)", +"30037de5": "swapKyberAndDeposit(uint8,address,address,uint256,uint256,uint256,address,bytes,bool)", +"3003b33e": "widthdrawUnbalanced(uint256,uint256[3])", +"3003bb05": "withdraw1(uint256,uint256)", "30043d4e": "AddedToHolder(address,uint256,uint256)", "3004ea88": "EOSDRAM()", +"3004fd98": "BonusChanged(uint256)", +"300525d4": "sendTokensToF()", +"30053620": "delegateToken(address,address,address,uint256)", +"30058e55": "issetURI(uint256)", +"3005dc76": "clearSMTX()", +"30062ae2": "getSTOLInLP(address)", +"300659c9": "Update(address,uint256,uint8)", "30067bc8": "setRegistrationOpen(bool)", +"30068509": "info_admin()", "3006f513": "coinSendDifferentValue(address[],uint256[])", "30073514": "_allocation(address,address,address,address,address)", "30074c6c": "publicSaleRaised()", +"3007f869": "migrateUniPairAddress(address)", +"3008e59c": "refundERC20All(address,address)", "30092ded": "changeVoteWeight(address,int256)", "30093319": "_setRevealsCount(uint256,uint256)", "3009a265": "isReg(address)", "3009bc01": "claimFreeDragon()", +"3009f414": "pollPools(address,uint256[])", "300a1a7f": "mixWithStringFunc(int256,string,bool,string)", "300a246f": "can_get(address,bytes12)", "300a411e": "getRecording(address,uint256)", "300abd61": "m_numMembers()", "300ac0e9": "priceTimeToExpiration()", +"300afa76": "btcBlockRewardInWei()", "300b59da": "initTokens(address[],uint256[],bool,bool)", "300ba0ec": "prevTweetTime()", "300ba8ab": "_decode()", +"300bf2e1": "developerPercent()", "300c229f": "changeMaxDepositAmount(uint256)", "300c3091": "setMigrationContractAddress(address)", "300c7063": "SbToken()", "300cc37a": "paySomeRewards(uint32,uint32)", +"300cf9de": "gameIDIndex_()", "300d55a5": "transferAdvisor1Tokens(address,uint256)", "300d9e90": "icoOver3()", +"300df30d": "pollStatus(address)", +"300e4062": "redeem(address,uint256[],uint256[],uint256[])", "300e4b3c": "setminprice(uint256)", "300e7b2d": "firstAuctionsExtendedDuration()", +"300ecc33": "founderThree()", +"300ed237": "DonateAndCreateGiver(address,uint64,address,uint256)", +"300f05b2": "overrideRate()", +"30104c5f": "getVestingEntryClaimable(address,uint256)", "301058c9": "DURATION_PRESALE()", "30106b17": "calckeys(uint256)", +"30109962": "proposalDuration()", +"3010ab41": "saleIsOver()", "3010b5cd": "clearWizzType(uint256[2])", +"3010f03c": "offerBorrowingItem(uint64,uint256,uint256)", "3010f39d": "playersToBetIndices(address,uint256)", +"3011113a": "setWithdrawLock(bool)", +"30114a65": "userTokenRecipient(address)", +"301153f1": "addHardWorker(address)", "3011b4c2": "CreateARTL(address,uint256)", +"3011e16a": "setPrice(address,uint256,uint256)", +"30123b8b": "__bas()", "30124349": "balanceLoc(address)", "301249eb": "setPercentWeiMC(uint256)", +"30125416": "kncPerEthRatePrecision()", +"3012c6f0": "setOptionIdPropriety(uint256,string,string)", +"301367d5": "saveIndex()", +"301370af": "removeAllFee()", +"30138a56": "updateDeporTokenContract(address)", +"30139f7f": "COMPOUND_TOKEN_ADDRESS()", "3013ad89": "RangeToken()", "3013ce29": "paymentToken()", +"3013f41e": "shutdownSystem(address)", "30140053": "burnIcoTokens()", +"30143225": "CashOutEvent(uint256,address,uint256,uint256)", +"30143341": "receiveyournft(address,string)", +"3014c451": "addr(string,address)", +"3014d816": "deleteShare(address,uint256)", "3015394c": "cancelRequest(uint256)", "30155f5e": "setzAddress(address)", "3015a521": "totalSignatures()", "3016a439": "getImageBlurredAt(uint256)", +"3016c9f3": "deleteRoundDetails(uint32)", "3016e108": "removeGameMachine(address)", +"30176e13": "setBaseTokenURI(string)", +"3017a54d": "dec(bytes32)", +"3017dbed": "UPDATE_COLLATERAL_TOKEN_ROLE()", "3017fe24": "callAPIVersion()", "3018205f": "getController()", "30183a2c": "GemstoneToken()", +"3018456a": "changeFeeder(address)", "30184635": "getMinCap(address)", "3018579e": "TokenSampleG()", +"30188ee8": "totalRewardDistributed()", "30188fdf": "BFreeContract()", +"3018c63b": "syncReserveBalances(uint256)", "3018c90a": "getSubOrderStatus(uint256,address)", +"3019206c": "sensors_status(uint256)", "301997ae": "fundEscrow(address,uint256,uint256,uint256)", +"301a5801": "calculateAmountsAfterFee(address,address,uint256)", "301a9b09": "startPhase(uint256,uint256,uint256,uint256)", +"301b5ab8": "get_symbol()", +"301b74cb": "u_l3()", "301b7a86": "inquire_totdomains_amount()", "301b9307": "getABsort()", +"301bdd40": "getScoreQuery(bytes32)", "301c42d7": "issueRateDecDuringICO()", +"301c66d6": "createBtcAddress(uint256,uint256)", +"301c7e5d": "unpause(uint8)", +"301cb3be": "addLiquidityDai()", "301cbcb3": "STARTING_RICE()", "301cf6e7": "payoutsPaused()", +"301d0867": "notifyResolvedEmergency(address,address,uint128,uint112)", +"301d4b33": "totalSpending(uint256)", "301d5209": "delegatecall_selfdestruct(address)", "301d5eda": "change_start_block(uint256)", "301dd027": "TIER_2_CAP()", +"301ddf03": "raiseTokenToEthSwapInput(uint256,uint256,uint256)", +"301df4cd": "transferFundsByOwner(address)", "301df7ab": "_create(address,uint256)", +"301e8078": "tokensPreIco(address)", "301ea971": "lockReleaseDate1Year()", "301ecf82": "_createEtherBro(uint16,address)", +"301ee996": "removeLiquidityOneCoin(address,address,address,uint256,int128,uint256)", "301f0464": "ratePerEthPhase3()", "301f2dac": "getRegionPrice(uint16)", +"301f8d39": "calculateInfaltionMinutes()", "301f93e0": "calculateEthereum(uint256)", "301fbdef": "totalWeiToBeDistributed()", "301fdb54": "getPayouts(int32,int32)", @@ -27567,93 +50398,187 @@ "3020a18e": "setSaleEnabled(bool)", "3020ea8a": "retrieveEarnings()", "3020fc3b": "sendIPFS(address,address,string)", +"30214599": "getLatestEthUsdPrice()", +"30214d4f": "removeAllowedDeployer(address,uint256)", "302155e5": "CHAToken()", "30223c12": "del_product(uint256)", "30226121": "CCXCrowdsale(address,address)", "30228a12": "YouAreRichToken()", +"3022b0b8": "setAcoTokenImplementation(address)", +"3022b5ec": "sunriseAddress()", +"3022dfeb": "addSavingsContract(address,address)", "30230796": "setTradeABIHash(bytes32)", "30231ea4": "canRenounce()", "30232cb0": "buySeele(address)", "3023641d": "removeTokenGrant(address)", "30238687": "ALLOC_NEW_USERS()", +"3023a4ec": "ratioProfit2Cost()", +"3023af2d": "_uniV2Factory()", "3023d0c4": "Ethstick()", +"3023d978": "getCustomerDeposit(address,uint256)", +"3023e432": "LogModuleVerified(address,bool)", +"30247469": "queryUserTotalReward(address)", +"3024a912": "collateralList(uint256)", +"302544cf": "pendingGodKimchi(uint256,address)", "302579c6": "getWarlordChestPrice()", "30257bf7": "getByAddress(address)", +"3025d9e2": "updatePointer(address)", +"30266d41": "unlockGasCost()", "3026a128": "LOG_InvestorExit(address,uint256)", "3026aedf": "getTopBidders()", +"3026b65b": "setConvict(bytes32,address)", +"3027329a": "createFinancingRequest(address,address,address,uint256,bytes32)", +"30277c17": "tokenToExchange(address,address,uint256)", +"3027da02": "weiAsset(address)", +"30282694": "initial_emission()", +"30285710": "createZodiac()", +"30288d75": "_txFee()", "30288f03": "setFile(string,string,uint256,string)", "30289c61": "getDetails(address)", +"3028d3d4": "doUniswapV1Buy(address,uint256)", +"3028f63a": "setStakingPool(address)", "3029300f": "nextSellTime(address)", "3029948a": "phase_2_bonus()", "3029ba69": "withdrawBountyTokens(address,uint256)", +"3029c35c": "getPriceFeedInfo(address)", +"302a2a46": "suggestions(uint256)", "302a4100": "decayedTransferFrom(address,address,uint256,address)", "302a7ff3": "getDAdmin(bytes32)", +"302ab80d": "setColFactorLeverageBuffer(uint256)", +"302b948e": "setERC20TokenAddresses(address,address,address,address)", "302bcc57": "playerCount()", "302bda24": "getSell(uint256,address,address)", "302c46ba": "ReleaseTokenForTeamAdvisersPartners()", +"302c8a28": "poolPortalAddress()", "302cc9c3": "setroommoney(uint256)", +"302ce651": "optionCollateralizationRatio()", +"302d10c9": "bTokenUnderlyingPriceAll(address[])", "302d350e": "firstChainedCallback(uint256)", +"302d6776": "spendableTokensPerContract(address,uint256)", "302dfe97": "commissionPer()", +"302e3f93": "withdrawExtraRewardTokens()", "302eb389": "transferFund()", +"302ec74a": "balanceOfsoak()", +"302ed23f": "transferProof(address,string)", "302f3915": "LockFunds(address,uint256)", "302f4303": "setRandomGenerateMethod(uint8)", +"302fb8f7": "U_BANK(address)", +"302fe516": "etoTerms()", +"30300570": "stakeMyToken(address,uint256,uint256)", "30311898": "Account(address)", "3032236f": "depositAndVest(address,uint256,uint256,uint256,uint256)", "30322b12": "weiForMcr()", "30323542": "_delOwner(address)", "30324370": "fetchOrderByIdWithPayer(string)", +"30324f36": "getTickerSymbols()", "30324f55": "DutchAuctionToBuy(address,address,address)", +"30325232": "resultNum()", "30326c17": "proposal(uint256)", +"30327159": "Create(uint256,address,uint256,uint8,uint256,uint256)", "3032f951": "advisorsBalanceMap(address)", "30332aea": "P2()", +"3033a4e5": "setImplementation(address,uint256)", "3033f4d3": "pastOneHour()", "30347537": "STARTING_CAT()", +"3034a742": "updateSignaturesRequired(uint256)", +"3034ac99": "get_delegated()", +"3034d436": "proxyActions()", "30366d5f": "getEventsCount()", +"3036aef8": "wrapEthAndDepositCollateral(address,address,uint256)", +"3036d174": "approve_25(address,uint256)", "3036d769": "minGasPriceGwei()", "3037408d": "balanceOfAtTime(address,uint256)", +"3037548a": "ERC20MainCoins(address)", +"30376346": "addCollateralLiquidity(uint256,uint256)", "3037801e": "recordNum()", "3037cea3": "knownRoleNames(bytes32,bytes32)", "3037e694": "disburseDividends(uint256)", +"3037ec25": "setSakeFeeRatio(uint8)", +"3037f274": "withdrawFromBank(uint256)", +"3037faf1": "getGroupByIndex(uint256)", +"303812fb": "sMap(bytes32,uint256)", "30381f5f": "getHistoricalDelegation(uint64)", +"30382f16": "depositAll(string)", +"30385c84": "Minted(address,uint256)", "30389c45": "round1BonusSteps()", +"3038a60d": "setYieldDistributor(address)", "3038e357": "returnTokensToContractFrom(address)", "3039b1ce": "changeETHLockingAddr(address)", "3039e6f9": "CHARITY()", "303a2372": "getDSP(address)", "303a36e2": "getRow(uint256)", "303a88b4": "convertRate(address,bytes32,bytes,uint256)", +"303aa80f": "uniswapObservations(uint256)", +"303aba9d": "trigger3(uint256)", "303b069f": "enableEmergencyWithdrawals()", +"303b5192": "doSomeWork()", "303b5d3b": "toInt(string)", +"303b664b": "getPathForETHToToken()", +"303b6d08": "setAdjConstant(uint256)", +"303b7f32": "multisendErc20BADR(address[])", "303b8144": "MobilinkToken()", "303b9379": "SetLogFile(address)", +"303bb0b6": "tokenFromRefraction(uint256)", "303bef74": "deleteAllMessages(address)", "303c2569": "payRakeInternal(address,uint256)", "303c7d69": "allocatePrivateSaleTokens(uint256,uint256,uint256,address[],uint256[])", "303d0870": "limitForChecklistId(uint8)", +"303d0c6b": "lockEscrow(address,address,uint256)", +"303d19d5": "contributeWithEtherBehalf(address)", +"303e0bf7": "verifyTradable(address)", +"303e6aa4": "convertMultiple(address[],address[])", "303e74df": "descriptor()", +"303eb23d": "burnHouseCosts(uint256,address)", +"303ed3af": "arbWithGasToken(uint256,uint256,address,address,uint256)", "303ed73a": "setSkills(address,uint256,uint256[])", "303ee989": "isPendingDeregistration(address)", +"303f1076": "Deposited(uint256,uint256,uint256,address,uint256,address,uint8)", "303f5f51": "LEGEND()", "303ff1d8": "YDTC()", "30406423": "payJackpot()", +"30409c85": "emergencyWithdrawRewards(uint256)", +"304112a7": "see(address)", "30411a27": "testAddGains()", +"30413a2a": "coinJoin()", "3041ba2a": "setForecasting(address)", +"30427ddf": "halflife()", "3042b17d": "setUmkaAddress(string)", +"3042ccb1": "minimumCommitTime()", "304318d3": "editDuration(uint256)", +"30432d5e": "poolLevels(uint256)", "3043cbc5": "newTankType(uint256,uint256,uint32,uint32,uint32,uint32)", +"3043ffc9": "flashBorrow(address,address,uint256,bytes)", "30443062": "penultimateFeePeriodStartTime()", +"3044816b": "lockall(bool)", +"30455ede": "setIsSwapEnabled(bool)", "3045a299": "Society(string,address)", +"3045a6e0": "getGasCostOfCanBeDelegateCalled()", "3045aaf3": "Symbol()", "3046868d": "AccountStructs(address)", +"30468de8": "Authorize(address,address)", +"3046c204": "unbondNonces(address)", +"3046f2f2": "referral_percent5()", +"3046f972": "unkill_me()", "3046fe26": "XulToken()", "30473c2f": "getSelectedName()", +"30476903": "buyViaWBTC(uint256)", +"3047e762": "percentTradeTrigger()", "30490e91": "processProposal(bytes32)", +"3049105d": "deposit(uint256[2],uint256[2])", +"30491e82": "createCBOND(address,uint256,uint256,uint256,bool)", +"3049512e": "pendingFxswap(uint256,address)", +"304992ab": "GetCampaignGoal(uint24)", +"304a30ac": "createOperatorVote(address)", "304a45c2": "getvalues()", "304a87b7": "setOpenGroup(uint256)", "304ab76a": "DebtTokenCreated(address,address,uint256)", +"304ae593": "_stepDuration()", "304bac6f": "func_0A6E()", +"304c28ee": "pauseBurning(bool)", "304c69ed": "_packItemData(address,uint256)", +"304c9670": "currentOpenDrawId()", "304cb3d8": "setTrusted(address,address,bool)", +"304d3bca": "setStopOrder(int256)", "304d50b2": "addStar(address,uint8,uint8,uint16,uint8,uint8,uint8,uint256)", "304d95a6": "RefundPoll(address,address,uint256,uint256,uint256,bool)", "304dd754": "IsActive()", @@ -27661,36 +50586,62 @@ "304de747": "MARKET_CAP_PER_ROUND()", "304dfd33": "_onRandomFailed(bytes32)", "304e48bb": "LogFundingReceived(address,uint256,uint256)", +"304e5050": "xa(address[10],address[10],address[10])", "304e6ade": "setContenthash(bytes32,bytes)", +"304e8de8": "creatorWithdrawFund()", +"304f129d": "unlockBalance(uint256)", "304f34a0": "splitBid(uint256)", "304f5027": "myUserWallet(address)", "304f8af4": "sendBountyTokens()", "30500684": "addEarlyBird(address,uint256)", +"30501fd1": "paybackLoanAndClose(bytes32,address,address,address,uint256)", "3050226a": "addTransferableAddresses(address[])", +"30503c4e": "oldContract()", +"30504b6f": "totalCollaterals()", "30507451": "receiveBonus()", "305075db": "NormalizeRanks()", "305094ab": "ispackagesaleClosed()", "30509bca": "claimBalance()", "3050caa4": "calculateStake(bytes8,bytes5)", "3050f769": "transactionsClaimed(uint256)", +"3051439d": "setEthRateSource(address)", +"305208a4": "decreaseLockup(address,uint256)", +"305210ec": "ICOStart(uint256,uint256,uint256)", +"30524614": "requestEthereumPrice(address,bytes32,uint256)", +"30527b66": "updateStakeInfo(address,uint256)", "3052b75e": "changeEndTime(uint256)", +"3052c08f": "logBytes21(bytes21)", +"3052eed8": "iterateInvestors(uint256,uint256)", "3053aedc": "capDoublingTimestamp()", +"3054626b": "setWalletFee(address,uint256)", "3054c79a": "transform()", +"30550a4b": "getInflation(uint32)", +"3055cf15": "addLiquidityToBakerySwapFortyTwoCoinxWBNBPair()", "3055e5e8": "JEMBUT()", +"30562174": "poolEvilInfo(uint256)", +"3056fbae": "sBountyPercent()", "30573dfa": "auditGuess(uint256,string,uint8,bytes,uint256)", "305788fa": "newTransferProposal(address,string)", +"30579efd": "WithdrawStaking(uint256)", "3057d5e0": "residualAmountPromille()", "305876a7": "isRoundOver()", +"30589573": "importAssets(uint256,bool,uint256)", +"305918fd": "getSupportedErc20Contracts()", "305939b0": "setReceiptAsset(address,address)", "305997c8": "addIsSafe(uint256,uint256)", "30599ba7": "SOSBOTTOM()", "30599fc5": "recoverTokens(uint256)", "3059ac30": "Escrow(address,address)", +"3059b7c6": "authorizePool(address)", +"3059d1d3": "getPrimaryUSDCRecipient()", +"3059f14b": "maxDiasMultaPorIncumplimiento()", "305a67a8": "cancelListing(uint256)", "305a762a": "getTicketsCountByBuyer(uint256,address)", "305a99c1": "Kemonocoin()", "305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", "305bcfab": "TrustlessTransaction_Protection_Seconds()", +"305c703a": "updateTrigger(uint256)", +"305ceeb9": "__Starter_init_unchained(address,address,uint256,uint256)", "305d6d31": "stopFundRaising()", "305e3552": "eggPrice()", "305eae79": "updateBusinessWallet(address,address)", @@ -27699,41 +50650,73 @@ "305f17d5": "setCrydrController(address)", "305fcef3": "decide()", "306023a3": "allocateTeamTokens()", +"3060398d": "readOrder(address)", +"3061399c": "CrowdsaleTokensRefunded(address,address,uint256)", +"306142c3": "bossData(uint256)", "3061d568": "GOC()", "3061e0ef": "changeRecovery(address,address,address)", +"30625771": "createEtherStream(address,uint256,uint256,uint256)", +"306275be": "removeTokenFromWhitelist(address)", +"30627b7c": "Benchmark()", "3062cd8a": "purchaseETH()", "30630699": "testDisputedWriteDifferentValueInState()", +"30637d58": "rewardsDepositPrinciple(uint256)", "306387a4": "dealStatus(uint256)", "3064061b": "checkNotSmartContract(address)", "3064448e": "ASCCToken()", +"3064829a": "createBeat(uint8[],uint8)", "30659e74": "moneyBack()", "3065a575": "setAElfDevMultisig(address)", "3065d22c": "setVariationProbably(uint256)", +"30662ab9": "issueMaxPynthsOnBehalf(address,address)", +"3066ad63": "ORE_AMOUNT()", "30677b83": "multiplierFactor()", "306781c1": "getCurrentPayoutBlock()", +"306792ea": "pool_weight()", +"30689fdb": "privateSaleEnd()", "3068bffd": "grantIssuer(address)", "30690468": "atleastZero(int256)", +"306a23c7": "getNum1()", "306a2ea8": "disapproveUser(address,bytes32)", "306a401d": "delMarketMakerAddress(address,address)", +"306a403d": "PynthsReceivedForEther(uint256)", "306a8589": "p_update_mNewPlotTaxPercent(uint256)", +"306a95e2": "setCurrentUnderlyingToken(address)", "306ab1ba": "forwardFundsAmount(uint256)", +"306abccf": "isContractManager(address)", +"306ad3fd": "addArt(string,uint256)", "306ae57b": "standAndRebet(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,uint256,bytes32,bytes32,bytes32)", "306b031d": "getGenerationEndAt(uint256)", "306b0d84": "SetSharedStorage(address,address)", +"306b4d6c": "performCall(address,uint256,bytes)", "306b4dea": "addQuantityListItem(bool,address,address,uint256,uint256)", "306c4ebe": "getCurrentTrancheVolume(uint256)", "306c7290": "eth_balance()", +"306c9697": "tokenMint(uint256)", "306d4ed9": "userHasWithdrawn(address)", +"306d5d3b": "retrieveSomething()", +"306dd1f9": "hash_seed(uint256,uint256)", "306df22d": "GPSDestination(int256,int256,uint256)", "306e3e99": "COMPANY_SHARE()", +"306e4900": "arAsset_longitude(uint256)", +"306e5185": "alocationPrivateSale()", +"306e66ae": "ChangePercent(uint256,uint256,uint256)", +"306f4a2b": "engage(uint256)", +"306f4b98": "approveERC2665(address,address,address)", +"306faf4a": "delistPool(address)", +"306ff6b5": "TOKEN_FOR_COMPANY()", "3070352b": "buyAMI(string)", +"30703e9c": "authorizedUserPayment(address)", "3070c38b": "checkTermination()", "30710f01": "Crack(address,uint256,uint256)", "30725c46": "_ownerOfPopInAnyPlatform(uint256)", "3072cf60": "_initialized()", +"3072f253": "CONTRACT_WITHDRAWN_PERCENT()", "3073530b": "release_2()", "3073c916": "cancelEscrowByProvider(uint256)", "3073ef42": "calculateOperationFee(uint32)", +"30744511": "input_int256(int256)", +"30746fef": "setFarmingParams(uint256,uint256,uint256,uint256)", "307482cf": "POINT_ROOTNODE_ROLE()", "3074cca7": "change_data(bytes32)", "3074f556": "Compra_Ticket(uint256,uint256)", @@ -27744,26 +50727,51 @@ "30765517": "fechAllSumNumForCandidateByStage(uint256)", "3076dc42": "intervalDuration()", "3076e56a": "tankOut()", +"3076f52c": "createUser(uint256,string,string,address,address)", +"30772d47": "setBonusEffect(uint256,uint256)", +"30772fac": "rrr()", "3077fdf1": "startNewICORound(uint256,uint256)", +"3078070d": "gAB(address)", +"30786336": "hausWithdraw(uint256)", "3078db6c": "transferAuthority(address)", +"3078fff5": "priceAggregator()", +"30793036": "dime()", "307970b2": "addEntry(uint8)", +"307994c1": "cancelDelay(address,bytes4)", +"3079d93f": "wksa()", "3079ddc3": "isCanBuy()", "307a1f46": "paramsValid()", +"307a9b7d": "tokenVestingAddresses(uint256)", +"307aebc9": "isLaunched()", +"307b1707": "setJOYTokenAddress(address)", +"307b4d13": "blocksHalving()", +"307bee14": "eatTheBlockStamp()", "307c6f8e": "job(string,string,uint256,uint256)", "307c7a0d": "withdrawExcessBalance(address,address)", "307ca045": "get_amount_minus_fee(uint256)", +"307cc669": "unilateralRuling(uint8,uint256)", "307d2a90": "priceEUR()", "307e38ca": "isICAP(address)", +"307e6661": "onChangeTokenController(address,address)", +"307e85a4": "setCallerRewardDivisor(uint256)", "307e8614": "returnUserBalance(address[2],bytes32)", +"307eafaa": "approve_269(address,uint256)", "307edff8": "endTokenSale()", "307f35e6": "AobcToken()", +"307f3ea1": "PreSalePaused()", "307f6244": "changeMedia(address)", "307f6b12": "findWinners(uint256)", "30807e8e": "updateCSV(string,uint256)", "3080b9c7": "SocialBlock()", +"3080ffe1": "latestExchange()", "30818189": "bonus1()", +"30819107": "sigilBids(uint16)", +"3081be16": "subdivideLand(uint256,uint256)", +"3081fe3f": "lastGooProductionUpdate(address)", "3082538f": "decimalMultiplier()", +"3082a578": "getTotalShares(address,uint256)", "30835cc5": "BDCC()", +"30838823": "insertVerifiedStorage(address,bytes32,bytes32)", "3083a4f9": "withdraw_2()", "3083ab1f": "closeContest(uint32)", "30840c31": "testControlCreateWithParentForeignNotInUse()", @@ -27775,42 +50783,82 @@ "308655b1": "A2AToken()", "3086719a": "_setTokenUri(uint256,string)", "3087110a": "donors()", +"30874a18": "buy3mint(address,address[],address[],uint256[],bytes,bytes,bytes)", +"3087b124": "deleteSsToWithdraw()", +"3087c8fb": "getCumulativeSequencedGasAtEpochStart()", +"3087d742": "swap(address,address,uint256,address,address,address,uint256,uint256)", +"30880038": "lt(int256,int256)", "30880441": "borrowFor(address,address,uint256)", "308879bf": "setVoteCost(uint256)", +"308a1ebb": "accoutInputOutputSdcLogs(address,uint256)", +"308a20ad": "allowMigration(address)", "308a9717": "_distribute(address)", "308af165": "lastProcessedDay()", +"308b1219": "isVerifiedMarket(address)", "308b2fdc": "getProposalValueByIndex(uint256)", +"308b6a39": "stakeSecondTokenLP(uint256)", "308b7fea": "rakeToken()", +"308b8c00": "reallocate(address,address,uint256)", +"308bc0da": "makeBurnAddressOwner()", +"308bede1": "forCharity()", "308c0065": "currentPrice(uint32)", +"308cd8f0": "setOwnerCanChangePoolToFalse()", "308d6613": "getSignData(uint256,uint8)", "308dc720": "DissolveBusiness()", "308dccac": "EtherMinerals()", "308e1b2f": "ltcId()", "308e25ac": "InvestorsToken()", +"308e401e": "getClaimableRewards(address)", "308e63f4": "TigerToken(uint256,string,string)", +"308ee248": "accumulating()", +"308ee9e0": "setFundController(address)", +"308efe4e": "updateDirectory(string,address)", "308f505b": "sellSupply()", "308fb3ee": "GrapeToken()", +"308feec3": "getNumberOfHolders()", +"308ff0c9": "SIGNATURE_SIZE()", +"3090bde0": "IPFS(string)", "3090bef7": "releaseLockedBalance(address)", +"30911e76": "airdropGroup(address[],uint256[],uint256)", "3091bc8b": "acceptAndPay(bytes32,uint256[],uint256[],uint256)", "30920505": "createInvestContract(address,uint256,uint256)", +"30922dfd": "cancel(address,address,uint256)", +"30926acc": "executeCoverAction(uint256,uint8,bytes)", "3092afd5": "removeMinter(address)", +"3092d7bf": "getVotingTimeStatus()", "3092e73f": "getNoOfTokensTransfer(uint32,uint256)", +"30933c07": "_newSetting(bytes,uint64,uint64,uint256,uint256)", "30935e4b": "LogOrderCancel(address,uint256,uint256)", +"309420b2": "strategicPartnersPools(uint256)", "309424fe": "get_all_names()", "30943fcf": "ownerCounter()", +"30944d18": "DGDTalked(string)", "30945443": "update(address,string,string)", +"30946e13": "OnBuyIcoToken(uint256,uint256,uint256,address,uint256,uint256)", +"30951936": "CreateDepositRecordMapping(uint256,uint256,uint256,address,bool)", +"309572d9": "CredentialItemPriceSet(bytes32,uint256,address,string,string,string,bytes32)", "309593ee": "emergencyThaw()", +"30959eb2": "UnpauseToken(uint256)", "30962d4d": "KyberContirbutorWhitelist()", +"309630c2": "checkIfReferrerExist(uint32)", "309652ec": "getPoolMoney()", +"3096e445": "Set_With()", "3097324c": "saleShare()", "30977ab8": "recordMove(address,address)", +"30978bdb": "addPool(address,uint256,uint256,uint256,uint256,bool)", "3097f94c": "blok()", "30982855": "setPublisherStake(bytes32,uint256)", "30986dea": "timeToFinishPresale()", +"3098cdfc": "addFeeException(address)", "3098d33a": "payoutPartners()", +"3099152a": "earlyClaimsAvailable()", "309945ba": "collectedFees(uint256)", +"309963b2": "getBannerDetails(uint256)", "30996897": "placeBet(address)", +"309a4bda": "DiscipleVendToOffer(uint256)", +"309a5441": "awardBoard(address,string)", "309ab7e1": "getIsParticipate(address,uint256)", +"309abe31": "LockedTokenBalanceChanged(address,uint256,uint256)", "309b40b2": "liquidityStatus()", "309b7ed3": "deleteParent(uint256)", "309ba120": "upgradeClass(uint256)", @@ -27818,7 +50866,9 @@ "309c1769": "ProspectorsObligationToken()", "309c315d": "calcTokenPriceFactor()", "309c3ee2": "_grandPVPWinnerReward(uint256)", +"309cb5ea": "setPeriod(uint64)", "309d094b": "RELEASE_DATE()", +"309d5680": "createTwisted(uint256,uint256,string,address)", "309d6669": "addVerification(address,string,string)", "309d8210": "ICOPart()", "309d9358": "XENTToken()", @@ -27827,154 +50877,301 @@ "309e36ef": "getNumberOfAccounts()", "309e6005": "batchTransferEther(address[],uint256)", "309e63e5": "SimpleConstructorInt(uint256,uint256)", +"309e7319": "getFeeForAmount(uint256)", +"309e9022": "setGoblin(address,bool,bool,uint256,uint256)", +"309eb410": "_cycleLength()", "309f7421": "buildTeamMapping(string,string,string)", +"309f7a05": "declareProfit(bool,uint256,uint256,uint256,uint256)", "309f955a": "updateTopicDescription(bytes15,bytes32)", "309fcbdd": "MakeTradable(bool)", +"30a0502a": "get(bytes32,uint8)", "30a0b231": "oraclize_query(uint256,string,bytes[])", +"30a0dbdc": "fullTransferTemp()", +"30a0f5d3": "lockingContractAddresses(address)", "30a1d746": "shareholdersWalletAddress()", "30a24abd": "create(bytes4,bytes)", "30a3160d": "approveInternal()", "30a35ce2": "getPOOL_edit_20()", "30a39d5d": "preCoinSentToEther()", +"30a3c507": "Send(address,uint256)", "30a3ce81": "getNumChips()", +"30a499b0": "_playerMap(uint32)", +"30a49d77": "eachDaySold(uint256)", +"30a52a20": "ReceiverFunction1(uint256,address[],uint256[],bool)", "30a55316": "smsCertifier()", +"30a62d7e": "UNIAPPTokenBalance(address)", "30a65fdf": "set_buyPriceEth(uint256)", +"30a66294": "getClientsCount()", "30a69955": "setFeeInfo(string)", "30a69b53": "PlutocracyAchieved(string,string)", +"30a6bf53": "getLiftoffRegistration()", +"30a6e8a4": "getStorageDay()", "30a7351c": "removeFromApprovedAddress(address)", +"30a7676c": "BonusGetAt(address,uint256)", +"30a78b03": "getEventsToken(uint256)", +"30a7954d": "__LnDebtSystem_init(address)", +"30a7a104": "BNY_DATA()", "30a7a11c": "setRateEarlyStage1(uint256)", +"30a7b55e": "srot(address)", +"30a80870": "addBattleLogMonsterInfo(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint32,uint32,uint32)", "30a8b2c9": "NUM_TEAMS()", +"30a93780": "plugTotalAmount()", "30a95aa7": "payService(address,uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", "30a95e67": "withdraw_eth(uint256)", +"30a978be": "callGame()", +"30a9e79a": "closeSpp(uint256)", "30a9ef5b": "checkTokBalance(address)", "30aa311a": "QMQCoin()", "30aa81c6": "getPayer()", "30aacc0a": "setProjectAgent(address)", +"30aaed53": "BALLOON_MIN_TYPE()", "30ab0a16": "setInstructor(address,address,string,string)", +"30ab9fdb": "registerPools(address[])", "30abac7b": "randomNext(uint256,uint256)", "30abf433": "signBBODocument(bytes32,bytes)", "30ac3052": "sendText(string,string)", "30ac324b": "apply(uint256,uint256)", +"30ac95da": "penalty_period()", +"30acc73f": "uniswapPairFor(address)", "30acd249": "oneEtherInKicks()", +"30ace9e6": "withdrawTokenByOwner(string,uint256)", "30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", "30acedf1": "ownerFreezeTokens()", "30ad12a6": "initializeFundraiserToken(address)", "30adce0e": "etherReceived()", +"30adf81f": "PERMIT_TYPEHASH()", "30ae8d0c": "Xinfin()", +"30af118f": "getTotalPurchases(uint256)", "30af41b3": "getValidatorByIndex(uint256)", +"30b025eb": "cancelOption(uint256,uint256)", +"30b0680b": "totalValue(address)", "30b0e001": "airdropTokenDistribution(address,uint256)", "30b0faab": "changeSettings(uint256,address,uint256)", +"30b115e5": "testDataTypeBytes16()", +"30b16d13": "le(uint256,int256)", +"30b1921d": "setExchangeRate(uint8)", +"30b1a69e": "calcGFV(uint256)", +"30b1d0b8": "setSGNMinimumLimiterValue(uint256,uint256,uint256)", +"30b2079b": "accountCost()", +"30b23e57": "blocksPerPropose()", "30b2b8aa": "mintPresaleTokens(address,uint256)", +"30b2d84d": "upgradeContractAddress()", "30b3409e": "getInitialDeposit()", +"30b36cef": "mintingAllowedAfter()", "30b39a62": "withdraw(string,uint256)", "30b3a90c": "_setCurrentPassportLogic(string)", "30b4429e": "submitBlock(uint256,bytes)", +"30b47ac5": "jobAssigns(bytes16)", +"30b4d752": "MINOR_MIN()", +"30b4e44e": "NAPboostLevelFourBonus()", "30b5198f": "blockNumberUpdated()", +"30b53798": "createWallet(address,address,address,uint256)", "30b57b1e": "player(bytes32)", +"30b5cf09": "getFeePeriodDuration()", "30b66475": "VerifSignature(bytes,bytes)", "30b66cee": "claimProxy()", +"30b67baa": "world()", "30b69426": "calculate_eligible_token_balance(address,uint256)", "30b7222f": "mintcoin()", +"30b73cf0": "GetNewOwner(uint256)", "30b751d9": "rivetzRelease(uint256)", +"30b7be29": "unsetImplementation(string)", "30b823f7": "userGrowthAddress()", +"30b86627": "currentSet()", +"30b86d23": "addAsset(address[])", "30b8f85d": "HSB()", +"30b9a6e6": "autoPoolLevel(uint8,uint256)", "30b9af98": "withdrawFunding()", +"30b9d2a7": "checkPool(address)", "30ba040a": "TOKENOMICX()", +"30ba243e": "curveZapOut()", "30ba2d4d": "eidooSigner()", +"30bb57b0": "globalStreamTime()", "30bb7499": "_batchActivenessUpgrade(uint256[],uint256[])", "30bbb55e": "instructions()", +"30bbf7ec": "setVaultCountPerProcess(uint8)", +"30bc1a94": "verifyXTVSignature(bytes32,bytes)", +"30bc6db2": "returnUint()", +"30bcdebf": "CacheHit(address,bytes32,uint256,uint256,uint256,uint256)", "30bd2ba9": "MassivelyMultiPlayerOnlineVideoGames()", "30bd3eeb": "tokenRewards(address)", "30bd60ef": "marginCall(bytes32,uint256)", "30bdd344": "getPossibleWinAmount(uint256,uint256)", "30bdf202": "RobinHood()", +"30be2cef": "burnHegexoption(uint256)", "30be5990": "updateThirdChangeBlock(uint256)", +"30be79be": "withdraw(uint256,uint256,uint8,bytes32,bytes32)", +"30beffa8": "tfts()", "30bf00cd": "mintFresh(address,uint256,int256)", "30bf2d3e": "whaleBalance()", +"30bf951c": "TOKEN_FOR_ICO()", "30bfeded": "EffectAdded(uint256,uint256[])", +"30c00d12": "isERC721(address,uint256)", +"30c0666a": "tokenRequest(address)", +"30c0b9ec": "getLatestEthPrice()", "30c0f8d6": "scheduleTransaction(address,bytes)", +"30c1286e": "setNewDeadline(uint256)", +"30c1a785": "pubKeyToEthAddress(bytes32,bytes32)", +"30c1fbf5": "InvestTotalEtherOf(address)", +"30c28323": "balanceOfy3CRV()", +"30c285f1": "additionalRewards(uint256)", "30c2927d": "concludeUFT()", +"30c29500": "addSubmission(string,string,string)", "30c2fb04": "UserAuthManager(address)", "30c308d8": "testInsertCase()", "30c30a50": "authorizeMintFulfiller(address)", "30c33da7": "_addPresale(uint256,uint256)", +"30c33ff8": "getRandomBasic()", "30c3eaa8": "grant()", +"30c3fff7": "testSendTrxInsufficientBalance(uint256)", +"30c426f8": "opPosition(uint256,uint256,uint256,bytes)", "30c47f77": "getEtherCoinPrice()", +"30c4d3fe": "Fee(address,address,address,uint256,uint256)", +"30c503ad": "setAllowance(address,address,address,address,uint256)", "30c5375e": "ConstructHuntStart()", +"30c54085": "withdraw_admin_fees()", +"30c55ff9": "eDeposit(address,uint256)", "30c5a614": "ethereumToTokens_(uint256,uint256)", +"30c60752": "getMajors(uint256)", +"30c6b5eb": "WITHDRAW_INTERVAL()", +"30c70903": "refundApplications(address,uint256)", "30c74e04": "tokenWithdraw()", +"30c7d637": "accurateWeights(uint256,uint256)", +"30c83a05": "bController()", "30c8a488": "ERCToken()", +"30c8ad59": "intervalBlockSize()", +"30c8ebfc": "NewSellDividendPercent(uint256,uint256)", "30c8f372": "getTrustedShopCount()", "30c93307": "GetPermissionIdx(uint256)", "30c97068": "plockFlag()", +"30c9b114": "referralBP()", +"30c9e53e": "setAccountFlag(address,uint256)", "30ca0a53": "DELEGATION_HASH_EIP712()", +"30ca60d4": "getFirstChoiceVotes(uint256,address,uint256)", "30cb14d2": "pop(bool)", +"30cbb66f": "makerOrdersTokenToEth(address)", +"30cbcd85": "theENS()", "30cc1d18": "airDropShadowTag()", "30cc248e": "increaseProfit()", +"30cc9db0": "fundOtoken(address,address,uint256)", "30ccc891": "testTransferHandlesNegativeAmountRequest()", "30ccebb5": "getStatus(address)", +"30cd1052": "transferA(address)", +"30cd8eda": "reduceIntervalBlock()", "30cd90b8": "transferToAddress(address,address,uint256,bytes)", "30cd9ac6": "TokenAuctionCompleted(uint256,address,address,uint256)", "30cdc195": "xclusivecoinSupply()", "30cdcc63": "MAX_ISSUED_FROM_OTHER_CURRENCIES()", "30cddc83": "checkIfCustodiesServedETH(address[])", +"30ce1b22": "MAX_SEALS()", +"30ce7ac6": "compLevel(address,uint8,uint8)", "30ce7b5d": "generateWinNumber()", "30ce8bd5": "_rightChild(uint8)", "30ced655": "EventRandomLedgerRevealed(address,uint256,uint256,uint256,address)", +"30cf4a74": "approve_207(address,uint256)", "30cf7af6": "FreeZombieCount()", "30cfac6c": "assignTo(uint256,address,uint256)", +"30cff8c3": "VerifyRandomProofFail(bytes32)", "30d02d83": "batchWithdraw(uint256,uint256)", +"30d05530": "profitCoefficient()", "30d07d61": "getParticipantName(uint256,uint256)", +"30d07f21": "quoteExactOutputSingle(address,address,uint24,uint256,uint160)", +"30d0b1c1": "approve_714(address,uint256)", +"30d0bd55": "lotteryCost()", "30d12640": "disableWithdrawal()", "30d15b0a": "lockInQuarterFinalPrize()", +"30d171da": "isDisputePeriod()", +"30d172d5": "dividendPool()", "30d1c191": "MetaPoc(address)", +"30d1f3e3": "playerTokens(uint256)", +"30d2091d": "enableFee()", "30d2219b": "add(string,string,string,string,string,bytes32)", "30d2474f": "buy1ticket()", "30d281e0": "getChannelInfo()", "30d323ae": "NHC()", +"30d454f0": "isSybilWhitelisted(address)", "30d4b967": "Octogram()", "30d4d8d0": "_verifyHistoryInputOrRevert(bytes32,bytes32,bytes32,uint256,address)", +"30d4f3c9": "stakingRewardAmount()", "30d500bf": "CFO()", +"30d5fa4c": "maxDrift()", "30d636a0": "SmartVerifying()", "30d65b72": "getPaymentsFor(address)", "30d68214": "transactionReplay(address,uint256)", +"30d6a975": "mineFor(address,uint256)", +"30d6be2c": "removeNetwork(bytes32)", +"30d6cb3c": "unlock_amount()", +"30d6f02f": "rebaseLocked()", +"30d83a39": "RESTRICTED_ACT_VOTING_DURATION()", "30d86516": "verifyTransferSignature(bytes32,address,uint8,bytes32,bytes32)", "30d88a9e": "DISPLAY_VIDEO()", "30d9161d": "cancelCreatorAuction(uint40)", +"30d9a62a": "treasuryAddr()", +"30d9c3d0": "_stakeTokenToPiggyBreeder(uint256)", +"30d9c915": "beforeAgreementCreated(address,address,bytes32,bytes,bytes)", "30da4684": "buyPriceFinal()", +"30daff5d": "_toBuyBack_rate()", "30db7654": "activeBuy()", "30dbb4e4": "isUnlocked(address,uint256)", +"30dc1553": "noOfStudents()", +"30dc9f98": "lockedPrivatorForFaithSupply()", "30dce923": "getDeactivatedList(address)", "30dcf0e8": "calculatedTokens(address,uint256)", "30dd6a42": "totalSoldToken()", "30dd9ee4": "confirmMinerQuest(address)", "30de7e88": "FINXToken()", +"30dead24": "collectibleIsOnSale(uint256,uint256)", +"30df2139": "step1(uint256)", "30df2c47": "currentSeller()", +"30df47af": "transferEth(address)", +"30df4b3c": "procReturn()", +"30df69b9": "getTokenpoolAddress()", "30df7727": "canRemove()", +"30dfa9d5": "authorizePayoutOperator(address)", "30dfc62f": "fundValueCount()", "30dfe1da": "getTransactionCount(bool)", +"30dff3c8": "updateFees(uint256,uint256,uint256,uint256,bool,uint256,uint256)", "30e0789e": "_transfer(address,address,uint256)", "30e07be0": "getMaxAmountToWager(uint256)", "30e08a6e": "adjustMinter(address,bool,int256)", "30e0f7e9": "setToppingUpBankroll(bool)", +"30e0faf7": "saleEvents(bytes32)", +"30e15818": "setLockUntil(address,uint256)", "30e1e4e5": "freeze(address,uint256,uint256)", "30e1f16f": "claimDividendAll()", "30e26cb8": "disableBundling()", "30e290e4": "Twitter()", +"30e2defb": "direccionBeneficiencia()", "30e34360": "setValue(bytes32,bytes15)", +"30e35449": "getEquivalentTokenAmount(address,uint256)", +"30e35e4b": "getFundsTobeneficiary(uint256)", +"30e3ccf8": "disableRecipient(address)", +"30e3db13": "_trPresaleStageMins()", +"30e3fcad": "openDonation()", +"30e3ff4c": "getFeeGrowthInside(int24,int24,int24,uint256,uint256)", +"30e412ad": "greyList(address)", +"30e43524": "getReferrerAtIndex(uint256)", "30e44278": "howVotesHasDispute(uint256)", +"30e44e15": "transferTokensFromProxy(address,uint256)", "30e45c14": "preSaleHasEnded()", +"30e45f05": "nxm()", +"30e49c8f": "runScriptWithNewBytesAllocation(bytes)", +"30e4a784": "startUp()", "30e4f9aa": "contractbalance()", +"30e57731": "fetchFirstDayPrices(string,string,string,string,int256,uint256)", "30e57b67": "getNumberOfCrySolObjects()", "30e5be52": "Prototype()", "30e656d8": "addAnimal(uint256,bytes32,uint8)", "30e6570b": "BucketSell(bytes32,uint256,address,uint256)", "30e664f6": "getBuy()", +"30e6822c": "transferFromChain(address,uint256,uint256)", "30e6c333": "producedGoldCaps()", "30e6d8d3": "addInitialInvestor(address)", "30e7002c": "POCN()", +"30e73c76": "getPlayerVault(address)", "30e76dae": "getContractEtherBalance()", "30e77c75": "EthTranchePricing(uint256[])", +"30e7900d": "userFarmAtIndex(address,uint256)", "30e804d1": "withdrawFromProject(address,address,uint256)", "30e80864": "setTrustedAddr(address)", "30e82803": "balanceOfByPartition(bytes32,address)", @@ -27982,125 +51179,218 @@ "30e9c341": "updateTimeLock(uint256)", "30e9f6ed": "STATUS_NO_DEAL()", "30ea55a0": "updateEventStartsTime(bytes32,uint256)", +"30ea79e5": "onNewPlayer(uint256,address,bytes32,uint256,uint256,uint256,uint256)", "30eaa9b5": "priceIncrease_20_February()", +"30ead760": "exchangeWithTracking(bytes32,uint256,bytes32,address,bytes32)", "30eb4934": "_validateRefundTimestamp(uint256)", "30eb4ba8": "setHoldDuration(uint256)", "30ebf88c": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint256)", +"30ec03d3": "getExternalStrengthRate(address,uint16)", "30ec0e2b": "setHolder(address,address,address)", "30ec98a1": "OKFToken()", "30ece116": "setOpeningTime()", "30ed54ed": "setVestingToken(address,address)", +"30edc0f5": "getWhitelist(address)", +"30edd961": "synths(uint256)", "30ee776c": "StopTransferToken()", "30ef3d56": "takeNumber(uint256)", "30efac4e": "changeCardPrice(uint256)", "30efb8d3": "doUnpause()", +"30efdcf5": "getMyEarnd()", +"30eff36b": "getRewardOfAccount(address)", +"30f05e2a": "setVar()", +"30f0cb0a": "getShipsAvailable()", "30f1154f": "updateNodeIPFSHash(bytes)", "30f12642": "createContractPreciousForEdition(address,uint256,string)", +"30f13748": "__test__uninit(uint256)", +"30f1d392": "permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32,uint256)", +"30f1da78": "tim()", "30f1fe82": "checkLength(string)", "30f20847": "CandyBox()", "30f24455": "_getProductShopInfo(uint256)", +"30f28432": "rxp_amount()", +"30f2b191": "SID()", "30f3f0db": "increase(uint256)", +"30f41c70": "burnTokens(uint256,uint256,uint256,address)", "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)", +"30f5e661": "setRefCode(uint16)", +"30f60b12": "convertExactTokenToEth(address,uint256,address,uint256,uint256)", "30f6716f": "HFCoin()", +"30f6e467": "unstakePercent()", "30f6eb16": "mintedForAccountInBlock(address,uint256)", "30f75890": "MilestonesEntity()", +"30f76f71": "receiveERC20Token2(bool)", "30f7cf80": "stox()", +"30f7eaad": "approve_47(address,uint256)", "30f7f148": "ONEPAY()", "30f857f3": "addPrivateSaleWithMonthlyLockup(address,uint256[],uint256)", +"30f907b0": "writeGrant(address)", "30fa27cc": "_BTC()", +"30fa5b1e": "sbdoToWbnbRoute(uint256)", +"30fa738c": "tokenType()", "30fa9ef3": "SantimentWhiteList()", "30faa3e9": "compareHands(uint8,uint8)", "30fb641b": "PurchaseFailed(address,uint256,uint8)", "30fb6bfb": "setMessage(uint16,string)", "30fb7541": "_createSkull(uint256,uint256,uint256,uint256,address)", +"30fb8e0e": "founderUpdate(address)", "30fba22f": "changeManipulatorAddress(address,bool)", "30fbe411": "endIco3()", +"30fc201f": "initialize(uint128,uint128,address[],uint8[])", +"30fc4cff": "setExpiryTime(uint256)", +"30fc59a4": "lootboxPrice(uint256)", +"30fcc737": "finalizeWithdraw()", +"30fd2edd": "joinstake(uint256,uint256)", "30fd300f": "registerBytes32(address,bytes32)", "30fd7696": "createLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", +"30fd85d3": "vaultThreshold()", +"30fe4a8f": "allGearTokens()", "30fe86b7": "declarePulicOfferingPlan(uint256,uint256)", "30fee9b1": "setICOtime(uint256,uint256)", "30ff2ad5": "needVerifiedAccount(bool)", +"30fff32d": "votesCasted()", +"31000384": "set_price()", "31002556": "getAmountToGive(bytes,uint256)", +"310084cb": "addCarToRegistry(string,string,uint256,string,address)", "310092b9": "REFUND_TIME()", "3100ef7b": "Fulcrum()", "3101170b": "addPixelPayable(uint256,uint256,uint256,uint256,uint256)", "31014853": "buySWL()", "3101ab7f": "confirmEjectment()", +"3101f6fa": "setSafu(address)", "3102b21a": "setAllocation(address[],uint256[])", "3102be4c": "ownerHistoryOf(uint256)", "3102deb7": "SetPlayerBetInfo(uint8,address,uint256,uint8)", +"3102ea70": "setStandardRewards(uint256)", "3103fa26": "firePaidProposalEvent(address,uint256)", "310441fa": "payees(address)", +"31045226": "getEstimatedPendingDivs(address)", +"3104562b": "deposite(uint256)", "31047973": "lightpool()", "3104b21a": "unApprove(address,uint256)", +"3104dd96": "stop_voting(uint256)", +"31059696": "createReceiverFromId(uint256)", +"3106454e": "setDetails(string,string,string,string,string,string,string,string,string,uint256,uint256,uint256,uint256,bool,bool)", +"310676f7": "_tierTwoBonus()", "3106aa80": "getLLV_edit_21()", "3106e50e": "joinBet()", "3106fea0": "voteOnProposal(uint256,bool,uint256)", "31076417": "setTokenUSDRate(uint256)", "310774a3": "setContractPreICO(address,address)", "310781e7": "LogCertificationDbRegistered(address)", +"31078c20": "proposalThresholdInWei()", +"310811ca": "PrevInflation()", "310815ee": "setDesignatedReporterShowed(bool)", "31085c5f": "getAddressByNickname(string)", "31088032": "MTOKEN()", "310883a8": "player2Timestamp()", +"31088cd4": "mint(string,string,string,string,address[],address[])", "3108bd87": "voteNoLockBatch(address[],uint256[])", "3108f0d7": "isNotZero(uint256,string)", +"31092451": "isBeneficiaryTokenWithdrawn(address,address)", +"3109910b": "set_proprio(address)", +"310a3bb1": "delegatesStart(address)", +"310ae824": "getServiceTypeFee(address,uint256)", "310b065b": "cerotest()", +"310b3523": "getTotalMember(uint256)", +"310b458f": "poolPortal()", +"310b9fcd": "transferRemainingDAIOutIfNotEnough()", +"310bba13": "validateNewTransactor(uint256,address,uint256)", "310bc5fc": "newAsset(uint256,uint256,uint256,bytes32,bytes32,uint256,bytes32)", "310bd74b": "reset(uint256)", "310c0c1e": "minRollUnder()", "310c87cc": "NFTAddress()", "310ce4e2": "execute(bytes32,address,int256)", +"310d0119": "setEarnCooldown(uint256)", +"310d2ef8": "Rndlotty(uint256)", "310d3f69": "token_description()", +"310d539a": "availableForRent()", +"310d7747": "gettenantwallet()", +"310d9bc0": "lastStake(address)", +"310dd0ad": "claimEthShares()", +"310e2de0": "batchMintChildren(uint256[],uint256[],address,bytes)", +"310e4650": "presaleOneSupply()", "310e5ce7": "isBreedingMarket()", +"310e6440": "roundCloseTime()", "310ec4a7": "setAllowance(address,uint256)", "310efb48": "setResult(uint256,uint256)", "310eff5d": "pageByGroup(string,uint256)", +"310f45e3": "removeFunds(address)", "310f4cdd": "mint(uint256,string,uint256,uint256,address)", +"310f9411": "viewProjects()", +"310f9763": "getVDV(uint256)", +"310f9e66": "_suspendIfRateInvalid(bytes32,uint256)", +"310fdd0a": "votingShares()", "3110235a": "maxInvest()", "311028af": "initialTotalSupply()", "311104f3": "getMintRequestsLength()", +"31111708": "setHealthFactor(uint256)", "31119b4d": "changeDeveloper(address)", "3111dcfd": "_nextAmount(uint8,uint256,uint256,uint256,uint256,uint256)", +"311205f7": "pendingPiss(uint256,address)", +"31124171": "changeImplementation(address,bytes)", +"31125f62": "vaultContractName()", "311277c1": "PHASE3_RATE()", +"3112de9a": "getTokenId(uint256,uint256)", "3112fb6e": "BackToLife()", "311325bd": "totalPledgedFees()", +"311330e2": "maxAirDropped()", "31134651": "donateToLovers(bytes32)", "311385f4": "oraclize_query(string,bytes[3],uint256)", "3113b8fa": "initDebris(bytes32,uint256,uint8)", +"31142201": "sesVault(address)", +"3114d9ad": "check_liquidityNet_invariant()", +"31151551": "minPlanPrice()", "311515a3": "disableInterface(string)", +"31153d2f": "redeemCoupon(bytes)", +"31154b6d": "getBurnPrice(uint256,uint256)", "311551ad": "_getCalculationStartDate(bytes32)", "311551d7": "MasternodeMinedTokens(address,uint256)", +"31157c15": "approveStore(address)", "31159923": "isAllocatedICO()", "3115b4c4": "bulkStoreHeader(bytes,uint256)", "3115c3ee": "exploreEMONTFee()", "3115d2ce": "ZitKOIN()", "31170c0e": "Joyso(address,address)", +"3117a761": "batchConfiscate(address[],address[],uint256[])", "3117d6bb": "request(bytes32,string,string)", +"31181a84": "availPool()", "31184dc3": "get2(uint256)", "3118879a": "removeSurvey(bytes32)", "3118dc71": "aSites(uint256)", +"3118f543": "gn()", +"3118f600": "increaseB(uint256)", "3119255c": "setMinBetPerTx(uint256)", "31198d19": "transferEthFromContract(address,uint256)", +"31199414": "wrap(string,address,address,uint256)", +"311a3b0e": "getMetabolism(uint256)", "311a6c56": "rule(uint256,uint256)", "311a985f": "testNotEnoughMemory()", +"311adc75": "invalidHash(bytes32)", "311b2e98": "totalBetsMade()", "311bcda6": "stage1Sale()", "311c2644": "ironTokensaleRunning()", +"311d41df": "newUserId_ap3()", "311d5a2a": "recordBalance(address)", +"311daf9b": "callerPercentage()", +"311eb3cc": "getMills()", +"311ec7e5": "_initMixinParams()", +"311f8483": "seedToken()", "311fb64f": "countInvestorsRefunded()", "3120cefa": "NickoinToken()", +"3120d434": "f(uint8)", "31212a6b": "unicornRanchAddress()", "3121369d": "validateRequiredStackDepth(uint256)", "3121c7c0": "buyMultiplier()", "3121db1c": "setName(address,string)", "312212c1": "stoptransfer()", "312220bc": "payoutQuickBonus(address)", +"31225031": "getNerdReleaseStart(address)", "312253ae": "newOption(uint256,uint256,bytes32,bytes32)", "31225ad1": "icoThreshold3()", "31226f71": "writeMerchandises(uint8,string)", @@ -28108,13 +51398,18 @@ "31230e23": "createWithParent(bytes32,bytes32,bytes32)", "31232cd3": "pre_amount_stages(uint256)", "312386b7": "techDevelopmentEthWallet()", +"31238d52": "fileReport(string,string,string,string)", "3123bd9d": "memberProfitShare()", "3124167b": "_getTokenAmount(uint256,bool,address,address)", "312452b3": "mLoadAndReturn(uint256)", "3125443d": "secondChangeBlock()", +"31255197": "_getOrdersForAddress(address,uint256,uint256,bool,address)", +"3125810e": "requireWrapped1155(address,uint256,bytes)", "31277306": "buyByEth(address,uint256)", "3128012a": "logEthDeposit(address,address,uint256)", +"312851ce": "cleanup_time()", "31288397": "payWithoutChecksum(uint128,address)", +"3128aa86": "userBonusEarned(address)", "3128d1be": "buyName(string)", "312975a6": "setReservedHolder(address,address,address)", "312983dc": "LogForkAnnounced(string,string,uint256)", @@ -28122,130 +51417,232 @@ "3129e6d4": "RATE_SALESTAGE3()", "3129e773": "getItem(uint256)", "312ad4b9": "banThreshold()", +"312b1b1f": "MEOWPerBlock()", +"312ba46b": "forSeedSell()", +"312be5bf": "createProposal(string,address,string[],string[],uint256)", "312c0684": "Organicco()", "312cba69": "EternalStorageProxyForPayinMultisender(address)", "312dae8a": "changeCrowdsaleClosingTime(uint256)", "312defb4": "INITIAL_ENDTIME()", "312df321": "p_update_mRefPercent(uint256)", +"312f0620": "initialize(address,uint256,uint8,string,string)", "312f8b19": "blockedTime(uint256)", "31302244": "approveAsInvestor(address,int256)", "3130e89d": "EtherShot()", "313138e1": "tuneLambo(uint256,uint256)", "313186e7": "_calculateTotalLockedBalance(address)", "3131d8de": "etherflipContract()", +"3131f659": "setUnstakingFee(uint256,uint256)", "31324b0a": "IOXOwned()", "3132605d": "DinoToken(uint256)", +"31333367": "approve_869(address,uint256)", "313354dc": "maxSellable()", +"3133f084": "CONTRACT_RING_ERC20_TOKEN()", "3133f2a7": "outstandingBalance()", "31347482": "CSELToken(uint256,string,string)", "3134e2e1": "_setCollectRoundLength(uint256)", "3134e9be": "verifyLinkPrivateKey(address,address,address,address,uint8,bytes32,bytes32)", "3134f4f1": "SpecialRatedCrowdsale()", +"3134fe9c": "ratifiedMintPool()", "3135471d": "privateEtherFunded()", "3135ed16": "race_start_block()", "313602d4": "claimRemainingTokens()", "31361399": "setICODate(uint256)", "31363c86": "esteem(bytes32,string,address)", +"31369db4": "collectCRVFromGauge()", +"3136c611": "rTypeID_()", +"3136e12a": "withDrawToken(uint256)", "3136fa86": "NeuroProtect()", "3136fbb8": "totalBaseLareSoldInMainSale()", +"313725f7": "LogModifyChoice(address,uint256,uint256)", +"31373a45": "getgas()", "31375242": "ownerSetTreasury(address)", "31378811": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[])", +"3137dc69": "priceSnapshot(uint256)", "3137f3d4": "FhnwToken()", "31380c89": "TokenSale()", +"31386125": "hasAccessTo(address,bytes4)", +"3138b6f1": "checkpointManagerAddress()", "3138d328": "gameMining(address,uint256)", "3138d8d5": "Bid(uint256,address,uint256,uint256)", "3138ee5c": "getPermittedContracts()", +"3138ffe7": "totalEligible()", "31391828": "_computeTournamentIncentiveReward(uint256,uint256)", +"31392b4a": "initialize(string,string,uint8,address[],address[])", "31399b4d": "indexOfOperator(address)", "3139c691": "_isInWhiteAddresses(address)", "313a9204": "addPurchased(address,address,uint256)", "313aaf96": "Double(bytes32,uint8)", "313b7b19": "finance()", +"313c06a0": "lp()", "313c4093": "newExit(address,uint256)", +"313c44b5": "getMergedDividends(address)", +"313cb4dd": "setThisContractAsLegacy()", "313ce567": "decimals()", +"313d87b1": "arrecadacao()", "313d98f3": "getTokensTo(uint256,address)", "313dab20": "treasuryBalance()", +"313e131a": "LogManagementTokensDelivered(address,uint256)", +"313f1988": "extractableRewardsPerDeposits(address)", +"313f2a21": "adminsForIndex(uint256)", "313f5a57": "tradeAirswap(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"313f85e8": "vaultBalanceOf(address)", "313f944f": "externalPurchase(address,uint256)", "313fc3fc": "getMyRevenue(uint256)", +"31405c03": "mapMemberEra_hasRegistered(address,uint256)", +"31406e05": "farmEnded()", +"3140873c": "shrink()", "314094c2": "devfee()", "3140b09e": "distributeBonusTokens()", +"3140c90e": "MultiWithdrawToken(address[],address[],uint256[],uint256,uint256)", +"3140e6e3": "getKrakintTotalEthEarnings()", +"3141e25b": "setConfig(address,address,address)", "314312d3": "setEtherDeltaExecutor(address)", +"31432f41": "kimbapPerBlock()", "31434041": "burnSTCDR(uint256,uint256)", +"3143545d": "LogPayoutFeeChanged(address,uint256,uint256)", +"314399e9": "UnsoldUpdate(uint256,uint256,uint256)", "3143d97c": "setTimeLock(uint256,uint256)", "3143fd60": "dev_allocation()", +"31443ba3": "easyBid()", +"3144415b": "UpdatedMemberTier(address,uint256,uint256)", +"314444f5": "usersWhiteList(address)", "314475b2": "TokenEntity()", "31447a32": "KeplerTokenCrowdsale(uint256,address,address)", +"31448a25": "ContractStakingLP()", "3144c859": "executeCode(bytes)", +"3144fdf6": "changeTWAPOracle(address)", +"31455f2a": "decrementNFTValue(uint256,uint256)", +"314568d9": "putCollateral(address,uint256,uint256)", +"3145b0ef": "mintbyOwner(address,uint256)", +"314604fe": "mapPID_param(uint256)", "31462b96": "the_nominal_annual_interest_rate()", "3146a6bb": "transferTeam(address,uint256)", "3146d282": "HyperTestToken()", "31477b9b": "getString(bytes32,bytes32)", +"3147849c": "MarketBoost(uint256)", +"3147867c": "AuthorizedAddressAdded(address,address)", +"31479776": "mint(uint256,address[],uint256[],uint256,string)", +"3147a3e2": "getBurnPercent(address)", +"3148235a": "getRebaseValues()", "31483bdc": "PushToken()", "314848fa": "CICoin()", +"314853ff": "decodeAssetProxyTransferError(bytes)", "3148ac62": "InitialRateChange(uint256)", "3148f14f": "modExp(uint256,uint256,uint256)", +"3149432c": "calcStakingRewards(address)", "3149694a": "burnHackingAmount(address,string)", +"31496f97": "ManagerSold(address,address,uint256,uint256)", "314989b2": "SimplePHXSalesContract()", "3149c440": "transferDomain(bytes8,string,address)", "314a05db": "ownerRetrieveContractConfig2()", "314a522e": "getTermsContractParameters(bytes32)", "314aabb5": "EthDice50()", +"314af5b4": "numberItems()", +"314b2f0c": "level_price(uint256)", +"314b6332": "SAVER_EXCHANGE_REGISTRY()", +"314b7736": "pendingtest(uint256,address)", +"314ba062": "f16(int256)", +"314c1e25": "noOfProjects()", +"314c51fe": "createRegistry(uint8,address)", "314cd12c": "createPromoToken(uint256,address)", +"314d1ff7": "getPlayerArtifactIds(address)", +"314d59fc": "getUserTotalIntraCreditAsset(address)", +"314d794d": "stakingRewardRatio()", +"314dc024": "totalBulkRewards()", "314dd783": "GoldiamICO()", +"314e0b42": "exchcoinToUSDT(address,uint256)", "314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", +"314e1443": "setEthPerClaim(uint256)", "314e39c3": "trustContract(address)", "314e99a2": "abdicate()", "314ec2e5": "set_sale_owner(address,bool)", +"314ec99f": "deposite(int256)", "314ef8cb": "Besiktas()", +"314f35db": "allowedSubmitters(address)", +"314f8cbf": "getMasterCopyVersion()", +"314fb072": "vetoers(uint256,uint256)", +"314ffefd": "enablePayee(address)", "31503ec4": "setFeeWalletAddress(address)", "3150456e": "GenChipIndex(uint256,uint8,uint256[],uint256[],uint256[])", +"31509d4a": "stakersList(uint256)", "3150a7da": "HarvestedBabyBrain()", "3150efbd": "beneficiaryMultisig()", "31511e61": "getAffiliateCount()", "31513039": "transferTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", "3151609e": "setMetadata(uint256,bytes32)", "3151ecfc": "myDividends()", +"31523d02": "minimalMintingPriceInToken(address)", +"315265f0": "allocateToken(address[],uint256[])", "3152dd00": "fundingActive()", +"3153b209": "MessageEventI(string,uint256)", +"31543bc4": "ListSupplierPairs(address,address,address,bool)", "31543cf4": "getTemplate(uint256)", +"3154403b": "getTotalPooledUBC()", +"31545890": "getLatestTokenInfo()", +"3154782f": "ifos(address)", "3154d790": "rentByAtom(uint256,uint256)", +"3154fd96": "setNewBornCoolDown(uint256)", "3155625c": "setCleide(uint256)", +"3155af46": "rateOrInverted(bytes4,uint256)", "3155c856": "getTotalF5()", "31561b0d": "isGauntletExpired(address)", "3156560e": "setApprover(address)", +"3157110e": "_unbond(uint256)", "31577cc0": "getModuleIDByAddress(address)", "3157be49": "imageVerified()", "3157d347": "nonVestedTokens(uint64)", +"3157f16d": "paymentInfo(uint256)", +"315800c1": "testSetRiskParameters_CollateralRatioUnderMinFails()", "31580446": "acceptDividends(uint256)", "3158923d": "setReferralshipAddr(address)", +"3158952e": "Claim()", +"3158aa7f": "transfer_(address,uint256)", "3158c52b": "isSoftCapAchieved(uint256)", "3158f643": "ico1Ended()", +"3159e11b": "levelBuyPrice(uint256)", "315a095d": "withdrawTokens(uint256)", "315a0a09": "BasicForecasting(address,uint256,address,address,address)", "315a6001": "purchaseUniqueSpinner(string)", "315a6d65": "withdrawTeamToken(address)", +"315a7af3": "finalizeRecovery(address)", "315ad5ce": "resetGroupInfo(uint256)", +"315ae3ca": "testStrLenZero()", +"315b0c00": "returnWithdrawTimeTenDays(address)", "315b86da": "MNPYToken()", "315ccd21": "MAX_ETHER()", +"315cd4c5": "KebbeFinanceToken()", "315d142d": "GayCoin()", +"315d34ba": "ubaseBalance()", "315d758f": "_setERC20compatibility(bool)", "315e2f1b": "setTestString(string)", "315e3124": "pack(bytes4,address)", "315e6c0a": "UpgradedContract(uint256,address,address)", "315ebe81": "LockedOutTokens(address,address,uint256,uint8,uint256,uint256)", +"315f1a41": "quote(uint256,uint256)", +"315f6de1": "setTipsFeeRate(uint256)", "315f81c5": "useVaults(uint256,uint256)", "315fd022": "MyToken(uint256,uint256,string,string)", "315fdea3": "TreasureChest()", "315fe684": "getMyPrize()", "31601d09": "AuctionCreated(uint256,uint256,uint256,address)", +"31602202": "myrunmoney(address,uint256)", "31606828": "registrationDeposit()", "3160d63b": "removeSupport(address)", +"316119f4": "setGenesisFactors(uint256,uint256)", "31616395": "crowdsaleContract()", +"3161a604": "exp_minus_256(uint256)", +"3161c13c": "tokenPresaleWithdraw()", "3162360d": "_emitBoardRatingGiven(address,uint256,uint8)", +"316264fa": "TokensFrozen()", "31629388": "setPendingValue(uint256,bytes32)", +"3162cf58": "arbSushiAndUniWithGasToken(uint256,uint256,address[],address[],uint256)", "31638ced": "getDatasetByIndex(uint256)", "3163b41a": "AdjustableRoundsManager(address)", +"3163e3a8": "tgeTime()", "31641629": "releaseSomeKims(uint256)", +"31649033": "platformVolumeUsed(address)", +"31649115": "buy(address,uint256,address[],bytes,uint256[],uint256[])", "31649233": "allocatedTotal()", "316524e5": "setGene(uint256,bytes)", "31657926": "ticketsOf(address)", @@ -28253,197 +51650,354 @@ "3165b26e": "transferOnBehalf(address,uint256,uint256,uint8,bytes32,bytes32)", "31666144": "BTCproxy()", "31666156": "latestReferenceBlockNumber()", +"3166b848": "lockEnabled()", "3166e133": "Metropolis()", "3166f49f": "balances_for_refund(address)", +"3166fd1d": "updateMinBid(uint256)", "31670619": "GROWCHAIN()", "31670ea7": "resetWithdrawEtherToValues()", "31671a02": "TokenClaim(address,address,uint256,uint256)", "31671f57": "Litecoinprivate()", +"3167260e": "addUserDBP(address,uint256)", "31677980": "migrationCompleted()", "3167e9d2": "infoUrl()", +"3167ed7e": "updateTokenMaxAmount(address,uint256)", +"3167f78b": "nextRebaseInfo()", +"31683f45": "voteEUR()", "316866bf": "getRatingsForAddress(address)", +"31689304": "whitelistReferralsCount(address)", "3168e98a": "getExtensionFor(bytes4)", "316943cc": "transferExtOwnership(address)", "31694d6f": "TEAM_TOKENS_SUPPLY()", +"3169620c": "rewardTokens(uint256,uint256)", +"3169bda0": "transferGas(address,address,address,uint256)", "3169ff3e": "LooneyLottery()", "316a0131": "viewWinningOption()", +"316a4361": "putStarUpForSale(uint256,uint256)", +"316abc4e": "execute4(address,uint256,bytes)", "316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", "316b13b4": "setMemberContract(address)", +"316b1ed2": "payback(uint256,address,uint256)", +"316b80c6": "setFamersContract(address)", "316b8cab": "Oogroll()", "316bc682": "setKYCLockupIgnoring(bool)", +"316c84ac": "resetLatestIndex(uint32)", "316cb1b4": "withdrawKittenCoins()", +"316d58a8": "switchToBfcl()", "316db7f2": "updateInfo(uint256)", +"316df4b5": "signup(address)", +"316e02cb": "toGwei()", "316e539e": "currentStanding()", +"316e5932": "sTokensPerEth()", +"316ec4f4": "getTrusteeCount()", +"316ec5f5": "uniqueInvestors(uint256)", "316f2f06": "requestUnclaimed()", "316fb7c4": "updateGoal(uint256)", "316fda0f": "cycleCount()", +"31703b5f": "ClientRecordIndexer(address)", "317053f8": "setStringMember(string)", "31707a05": "initOwner(address,address)", +"3171169a": "similarityMatrix(uint256,uint256)", "31711884": "tokenRate()", "31711abe": "bookkeep(address,uint256,uint256)", "31719c69": "lastPriceSetDate()", +"3171cec4": "setTypeAdvantage(uint8,uint8)", +"317223bc": "bfloor(uint256)", "31723abd": "DMTokenC()", +"31726da1": "transferPaymentOwnership(address)", +"31727730": "rewardWasTaken(address,address,uint256)", "31729a45": "setCommission(address,uint256)", +"31730d1b": "funcNotCalled()", +"31736218": "settleReward2(address,uint256)", +"3173a91f": "ReciveEth(address,uint256)", "31748401": "_investorAddresses(uint256)", +"3174b689": "unvote()", "3174cc87": "refundToBuyersIfSoftCapNotReached()", "31757f2e": "collisionCount()", +"3175a0e9": "marketAuctionBid(uint256)", +"3175aae2": "tuple()", +"317653e0": "totalBurnFees()", +"3176b739": "getMyAdmin()", "3176bd18": "MyTestingToken()", "3176d373": "updatePriceFci(uint256,uint256)", "3176e734": "addHiddenPosition(uint32,bytes32)", "3176f912": "getPlayersBattlePower(address,address)", +"3176fb37": "testTrade(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "3177029f": "approveAndCall(address,uint256)", "3177b83a": "isCustomerHasACC(address)", "317830b4": "crowdsalePaused()", "31787b91": "maxIcoDuration()", +"3178cb08": "exp_2(uint256)", +"31794254": "noReturn()", "31798893": "DistributedSoFar()", "317a71ea": "_removePendingRequestId(uint32)", "317ab6dc": "getChampsCount()", "317b0b77": "_setCloseFactor(uint256)", "317b4b76": "setPreIcoMin(uint256)", +"317be1ff": "serviceContractIndex(address)", "317c00be": "maxTokensPerArticle()", "317c0ae9": "tokensByZecTx(string)", "317c1291": "isCrowdFundActive()", +"317c19d5": "dodoPair()", "317cd9fb": "setethtoken(address)", +"317d121b": "setAllAddresses(address,address,address,address,address,address,address,address)", "317d5d9b": "rand(uint32)", +"317d691e": "deputeBoss4(address)", "317d7a2b": "depositInfo(uint256)", "317d9453": "getContractTokenBalance()", "317ebc79": "scoreTeams(uint32[],int32[],uint32[])", "317ec08b": "removeMaliciousValidator(address)", "317ed7dc": "rebateTwoFenzi_()", +"317f17dc": "update(address[])", +"317f5aae": "now_()", "317ffcf2": "getCreateUnicornPrice()", "31806aaf": "unlockBalanceByKey(uint256,uint256)", +"318071fd": "addon()", +"31807282": "IMP19()", "318077a1": "Logo(address,address,string)", "31809eac": "dayAfterInMinutes()", +"3180f8df": "getLastNewValueById(uint256)", +"3181a5a7": "BuyGenesisAddress(address)", +"31829e9d": "RegionSold(uint16,address)", +"3182a0c1": "rescueScore(address)", "3182c3aa": "createSale(uint256,uint256,uint256,string,uint256)", +"31834096": "transferInteractionsAllowed()", "31836cb9": "testMiddleTranch()", "31839753": "getVolumeBonusAmount(uint256,uint256)", "3183a55c": "Alchemy(uint256,uint256)", +"3183e5a0": "Registered_Clients()", "3183ef3d": "_release(address)", +"3184267f": "setOwnerAndTimelock(address,address)", "31845f7d": "setPublic(uint256)", +"31851d96": "_LGCY()", "31852177": "ConsToken()", "31852a02": "allocate6ProjectToken()", "31859556": "startPreico()", "3185a61e": "getSellOrder(uint80)", +"3185c019": "yourStakedAGOUSD(address)", "31861423": "_deleteAllPackedRevisionTimestamps(bytes20)", +"318698a7": "transferToSelfCustody(address,address,uint256)", "3186f390": "tokensToPartner()", "3187878b": "Follor()", +"3187c459": "tokenIdAmount()", "31885119": "mintSelf()", "3188949a": "DIT()", +"3188b9e2": "_claimRewards(address,address,uint256)", "3188c5b1": "updateTotalChild(address,address)", "3188da5f": "meltCoin(address,uint256)", "3188ed13": "UNSOLD_ALLOCATION_SIZE()", +"31894149": "rewardSum()", "3189418f": "connect_to_nodelist()", "318992d0": "RewireToken()", +"318a03d5": "ChangedOwnerCut(uint256)", +"318a1e54": "__updateProposalPublishCost(uint256)", +"318a3269": "set(int256,string,int256)", "318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", +"318a9546": "Whitelisted(address,uint256,bool)", "318b526c": "AIGInvestment()", +"318c136e": "_bridgeAddress()", +"318cbdf9": "calcFeesAccrued()", "318cbe20": "BountyBG()", +"318d2be9": "Upgrade(address,uint256)", +"318d9e5d": "claim(address[])", "318dbcae": "releaseFundsBuyer()", +"318e0746": "gradeThreeCount()", +"318e4ec7": "pairUNI()", "318e6c78": "getAdminAddress(address,address)", "318f0fe9": "acceptRequest(address,address)", "318fd7e4": "HomeChainToken(address)", "318fd93d": "registerSeller(string,string)", "31906ebd": "airdropTotal(address)", "3190abc0": "addCustomer(string,string)", +"319118f7": "moodAdded(string)", +"3191348b": "sliceOverflowLength33Throw()", +"319161c2": "isw()", +"319186fe": "_reflectionBalance(address)", +"3191d332": "isAuthorizedFunctionality(address)", "3192164f": "idle()", "31921cad": "headerColor()", +"3192538b": "registerAssetDeposit(address,address,uint256)", "319288d8": "setNVTface(address)", "3192b995": "developer_crowdsale_text(string)", +"3192ba99": "SentTo(address)", "3192cccb": "queryTokenGrant(address)", +"31930efa": "getByte4(bytes)", +"31931ec9": "DEFIBASE()", "31933916": "getMessageCount()", +"31934667": "mint(uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"3193bbf2": "joinGameRoom()", "3193c749": "placeBet(uint256,uint256,uint256,int256)", +"319425b5": "setMinDelegate(uint256)", "31950032": "createContract(bytes32,uint16,bytes8,uint256,uint32,string,uint32,uint64[],bytes8[],uint32,bytes32)", +"31955a20": "copyStorageStorage()", +"3195a4e7": "setMaxProposers(uint256)", "319609fa": "EtherPiggyBank()", "31970bd8": "nextRangeID()", +"319775c4": "_initialize(address)", "31978b99": "changeBoardMetadata(bytes32,bytes32,string)", +"31979927": "SILVER_BOX_MAX_PRICE()", "3197cbb6": "endTime()", +"31985628": "prizeFunctionName()", "31985b51": "sendGiftCard(address,address)", "3198a38f": "findAllCliWithPendingTask(address)", "3198acad": "Billionsgame()", +"31990b15": "calc_remove_liquidity(uint256)", +"31990d36": "getAmountOfEther(uint256)", +"319948ba": "setMintPrice(uint256,uint256,uint256)", "319983f8": "FoundationSupply()", "31999749": "getTimePeriodsUsed(uint256)", +"3199fcb6": "teamAllocationVestingStartAt()", "319a2494": "getBlockOf(address)", "319a30d4": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "319a9395": "setGlobalLock(bool)", "319ae4b2": "spaceCount()", +"319ae573": "getMintingEpoch()", "319af333": "log(string,address)", "319b0cd2": "calculateRate(uint256)", "319b0e75": "getTotalInvested(address)", +"319b68a8": "newWallet2()", +"319bb003": "hashValues(bytes32,address,uint256,bytes32)", +"319bc04b": "safeBunnyTransfer(address,uint256)", +"319bed9a": "prepareFeeCollectorToPayFees(bytes32)", "319c068c": "current_round()", "319c33cc": "setOrganization(string)", "319c7748": "_KiwiToken()", +"319c78d0": "transferMethodId(bytes)", +"319d155b": "CreditsUsed(uint256,address,uint32,uint256)", +"319d53e7": "_approvals(address,address)", "319dac48": "polishRoughStone(uint256)", "319db3be": "advisorWallet()", "319df3bf": "icoManager()", +"319e0008": "MultiTransfer(address,uint256,address,uint256)", +"319e8bd2": "buyFirstTokensOnTransfer(address,address,address[],bytes,uint256[],uint256[])", +"319ebaae": "setExcludeTokenBalances(address,address[])", "319f0852": "MSCTToken(uint256,string,string)", "319f21b6": "placeGame(uint8,uint256,uint256,uint8,bytes32,bytes32)", "319f3930": "mintFraCoins(uint256)", "319f7700": "SealCrowdsale()", "319f9887": "SnowdenAffect()", +"319fa887": "ordersByBuyer(address,uint256)", +"31a01ffa": "CarrotBalanceInUniswap(address)", "31a02bce": "requestMint(address,uint256)", "31a06772": "scrap(uint256)", "31a079ca": "ArtexToken()", "31a14db3": "getParticipantName(bytes32)", +"31a18a96": "viewFundsAvailable(uint256,address)", +"31a22a20": "LPperETHUnit()", "31a2aba8": "create(address,uint256,uint256,address,address,address)", +"31a3055b": "setDealFeeRate(uint256)", "31a360b4": "LUVITOKEN()", "31a36424": "getAllAdmin()", "31a38c89": "executed()", +"31a39c46": "l(uint8)", "31a3a506": "closeFunding()", +"31a3a6e6": "mintPerTimeValue()", "31a3b36f": "blockDotTimestamp()", "31a3b873": "ICO_MIN_CAP()", +"31a3d848": "discountStructs(uint256)", "31a40b62": "delAuthorized(address)", +"31a44195": "_everDelegated(address)", +"31a445e4": "drainEth(address,uint256)", +"31a51b3f": "FinishUpgrade()", "31a51f46": "getTransactionConfirms(bytes32,uint256)", +"31a52a6b": "matching_bonuses(uint256)", +"31a56110": "byteArrays(bytes)", +"31a5dda1": "trustedRewardTokenAddress()", "31a642db": "getTransferInfoValue(address,uint256)", +"31a64bff": "gettid()", +"31a6b89b": "withdrawUpTo(uint256)", "31a73991": "GetUserIdByAddress(address)", +"31a76535": "deactivateContract(address)", +"31a7673c": "initiateUpgrade(address,address,address,uint256)", "31a76bca": "FOUNDERS_VESTING_CLIFF()", "31a7d4c2": "LogPause(uint256,bool)", +"31a80c79": "getOraichainToken()", "31a83ca2": "oraclize_randomDS_setCommitment(bytes32,bytes32)", +"31a8743c": "cevaWhitelistBurnRequest(address,bool,bytes32)", "31a8aeb3": "stakeFrom(address,uint256)", +"31a94da3": "startUpgrade(address[])", "31a95c7a": "redeemTokens(address,address,uint256)", "31a97ff0": "noteInitialReportingGasPrice()", "31a9b2f2": "maximumPurchase()", "31aa01c4": "contributed2(address)", +"31aa2e0c": "MigrationContractAddress()", "31aa91fc": "completeContribution(address)", "31aaa74a": "accountParent(address)", +"31aaae85": "initRebase(address,address,address)", "31ab4066": "testAuthorityTryAuth()", "31ab6055": "TMCoin()", +"31ab6d2a": "tradeTokenForEtherSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", +"31abbf57": "HolderReseted(bool)", "31abdd2a": "calculateEthValueFromTokens(uint256,uint256)", +"31ac045a": "revokeTransferRole(address)", +"31ac0d58": "isTrustedSubmitter(address)", "31ac7253": "releaseState3()", "31ac76c7": "getSiteTokenLength(uint256)", +"31ac9920": "setMinFee(uint256)", +"31acc29a": "suhiUserMineBalance(address)", +"31ad32b0": "StageUp(uint8)", "31ad6b62": "sendToEthertoteDevelopmentWallet()", +"31ad7333": "grantAccess(address,bytes4,bool)", "31ad836e": "Flabba()", +"31ada03e": "ImportReceiptLog(address,uint256,uint256,bytes,uint256,uint256,bytes32,bytes32,uint256,uint256,address)", "31adba2f": "victimsCount()", +"31adeea0": "DayLimitChanged(uint256)", "31ae0019": "KissBTC()", +"31ae1f02": "getDepositManager()", "31ae450b": "getAdmins()", +"31ae5f7f": "supplierQuitsTransport(uint256)", "31ae6b6e": "isFactProviderInWhitelist(address,address)", +"31aeae6c": "TotalLPStake()", "31af56ed": "transTo(address,address,uint256)", "31afa55f": "decreaseMonsterExp(uint64,uint32)", +"31b02872": "DAOTrackTos(uint256,uint256,uint256,uint256)", +"31b05aa4": "addFreeToken(string,address)", "31b0795c": "registerAddress(address,address)", +"31b1b978": "questions(uint256)", +"31b1d755": "withdrawSlotReward(uint256)", "31b259cf": "setUser(address,address,string,string,string,bytes32)", "31b27c44": "DeusMarketplace(address,address)", +"31b283f6": "memWriteOff(address,address)", "31b28664": "PAGE_SIZE()", "31b29629": "ownerAddBankroll()", "31b2d49c": "cancelOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", "31b31b88": "setTokenFee(uint256)", +"31b3381e": "imageEvent(bytes)", +"31b349dd": "buy_alicoins(address,uint256)", "31b36c45": "CHECKgamberTwo()", "31b39a56": "addWalletConfig(uint256,uint256,uint256,uint256)", +"31b39dc9": "mapIdxPlayer(uint256)", +"31b3d0df": "getECOEarnings(address)", "31b3eb94": "withdrawPayments(address)", +"31b4106c": "setInviter(address,string)", "31b4784e": "lastUpdateOverall()", +"31b48055": "shouldBurn()", "31b48f86": "setPeriods(uint32,uint256)", +"31b525b2": "setMaxColumnArticles(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)", +"31b657f8": "buy1mint(address,address[],address[],uint256[],bytes)", +"31b71057": "setHarvester(address,bool)", "31b77da4": "getEmptyIndex()", +"31b78a92": "GetEthereumNodes()", "31b7a196": "emitGenericLog(string,string)", "31b7c458": "claimedAirdropTokens()", +"31b86dae": "Grant(address,address,uint256,uint256)", "31b8b100": "Static()", +"31b933b9": "getEntities()", "31b93ae6": "MIN_PRESALE2()", "31b97e45": "addGame(bytes32,bytes32)", "31b9d81d": "kscBatchTransferToEcosystem(address,address[],uint256[],uint256,uint256[],string)", +"31b9fb43": "setEthUsdChainlinkAggregatorAddress(address)", +"31ba129b": "getOut2(uint256)", "31ba7ede": "create(address,bytes32,address,bytes32,bytes32,address,bytes32)", +"31baa138": "setGoblins(address[],address[])", "31baa8ae": "getCitizenCharacteristics(uint256)", +"31bab29b": "devDividendNumerator()", "31bab608": "getVersionSelectors(bytes32,bytes32,bytes32)", "31bac434": "unpauseMint(uint256)", "31bae156": "getPartialAmountRoundedUp(uint256,uint256,uint256)", @@ -28451,90 +52005,165 @@ "31bcce1c": "CryptoAtoms()", "31bcd2b7": "sendTokens(uint256,uint256)", "31bd1fa5": "levAddress()", +"31bdfacd": "ssdTokenAddr()", "31be23e4": "getLotteriesLength()", "31be6985": "testBitXorSuccess()", "31be6a17": "addNewGroup(bytes32,uint256,uint256)", +"31be8526": "envelopeFactory()", +"31bee5a1": "machineReferrerAccount()", "31beedd9": "setOWhitelist(address[])", "31bf0667": "tokensaleWallet()", "31bf0b42": "setSB(uint256,uint16)", +"31bf5b7c": "getEstimatedForToken(uint256)", +"31bf6464": "bootstrapGroups()", +"31bfde49": "changeTakerBetConstraints(uint256,uint256)", +"31bfee0a": "getThisContractAddress()", "31c0018b": "listApi(uint256,bytes32,bytes32,string,string)", +"31c02c11": "UserMap(address)", "31c05b8f": "getWalletAddress(bytes8)", "31c15301": "maxRandom(uint256,address,uint8)", "31c1eea4": "delCEx(address)", +"31c2273b": "NFTContract()", +"31c242ea": "getTotalOchaRewardWithin(uint256,uint256)", "31c29c25": "newContribution(address,uint256)", +"31c2ad53": "developerFee()", "31c2b6e6": "animator()", "31c2bd0b": "propose(address,bytes,uint256)", "31c33669": "GetChequeInfo(string)", "31c359fa": "getReferralAddress()", +"31c36002": "changeOperatorAddress(bytes32,address)", "31c3e2c9": "VotingProxy(address,address)", "31c3e456": "update(string,string,string)", +"31c40619": "depositsTotal()", +"31c41fda": "__initialize_metadata(address)", "31c420d4": "unfreezeTransfers()", "31c42ca6": "testSell()", +"31c44a97": "inviteInfoV2(address)", "31c571f5": "setLastStellar(address,uint256,uint256,uint256)", "31c5e407": "PaymentSubmitted(address,bytes8,uint256)", "31c5e56b": "init(address,uint256,uint256,uint256,uint256,uint256,uint8)", +"31c5eec8": "proposals(uint64)", +"31c6903d": "getMVDWalletAddress()", "31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", +"31c780ac": "currentRerollCost()", "31c78498": "Metadollar()", +"31c87d01": "minterArray(uint256)", +"31c88903": "depositInfoes(uint256,address,uint256)", +"31c89bb6": "removeMinters(address)", "31c89d3e": "FromQueue(address,address)", +"31c8bae9": "setNextFillFrom(uint256,uint256,uint256)", "31c91117": "withdrawAllEther()", +"31c91d34": "ExchangeTicket()", "31c9472a": "constantname()", +"31c9626a": "validityFlag()", +"31c9d858": "withdrawDollar(uint256)", "31ca0bae": "DAO(address,uint256)", "31ca208c": "greylist(address)", "31ca4340": "GetTokenData(uint256)", "31ca6b67": "setWinnerManually(uint256)", +"31ca6c1b": "currentDistributionAddress()", "31cb27d7": "processHandEndSplit(uint256,uint256)", +"31cb6105": "setSigner(address,bool)", "31cba838": "BOUNTY_ADDRESS()", "31cbf288": "createContract(string,address,address,string)", "31cbf5e3": "pay(uint256,address)", +"31cd52b0": "removeLiquidity(uint256,uint256[],uint256)", +"31cde4fd": "FreezeAccount(address,bool,uint256)", "31ce6b47": "getTicketCounter()", +"31cec3e2": "SeePeople(uint64,uint64)", +"31cec7a3": "pauseDistribution()", +"31cece42": "getDividendBalance(address)", +"31cf4334": "gameBars(uint256)", +"31cf8b88": "NewGameLaunched(uint256,uint256,address,uint256)", "31cfcf84": "IDAGToken()", "31d03594": "getOfferPrice(uint256)", +"31d05b11": "setTotalSupplyCap(uint256)", +"31d08203": "closingTimeArray(uint256)", +"31d0b00f": "getPairByAddr(address,address)", "31d0e3f5": "setChainlinkToken(address)", +"31d14457": "claim(uint256,bytes32)", +"31d16341": "usersActiveG3Levels(address,uint8)", "31d1c995": "_batch1_icosaleStartTimestamp()", +"31d1f7e1": "votewithdraws(address)", +"31d25424": "claimgetNFT(address,address)", +"31d28df1": "checkShareHoldOf(address,uint8)", +"31d299b8": "advance(address,uint256)", "31d29af1": "getMyWallet(address)", +"31d29b00": "receivedM()", +"31d2cceb": "SPAWNER_ADMIN_ROLE()", "31d2f891": "crowdsaleAddress()", "31d31647": "hasSenderVoted(uint256)", "31d3518a": "IvoryToken()", "31d35cb2": "getDayEthIn(uint256)", "31d36cf0": "relaySellerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"31d382a2": "goat()", +"31d38806": "setLoanContract(address)", "31d397ef": "initialWallet()", "31d4116f": "nextsize()", "31d41325": "isMonethaAddress(address)", "31d42bf2": "addBlackAccount(address)", +"31d48447": "relayerDelegates(address,address)", "31d4ac45": "bookWithLif(uint256,uint256,bytes,string,uint256[],bytes32)", "31d4ed2e": "_isUnderLimit()", "31d4fad4": "refundPayment(uint256,address,string)", +"31d50750": "isOperation(bytes32)", +"31d5ea29": "currentColours()", "31d6183b": "tokensToEth(uint256,uint256)", "31d67353": "transfer_data(address,uint256,string)", "31d694a0": "NEBC()", +"31d7518e": "instrumentPositions(address,uint256)", +"31d77f3d": "_approval(uint256)", "31d78a50": "signedApproveAndCall(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", +"31d7a262": "pendingRewards(address)", +"31d7a505": "InvalidProtocolFeePaymentError(uint256,uint256)", "31d87de2": "setRBACAddress(address)", "31d90e04": "canClaimPayout()", +"31d959cd": "historyRecipient(uint256)", "31d98b3f": "getPrice(bytes32)", "31d9931f": "setOwnedTokensIndex(uint256,uint256)", +"31d9ab87": "approve_799(address,uint256)", +"31d9cbf8": "setStartMiningTime(uint256)", +"31da5010": "funded(uint128,uint8)", "31daabb7": "updateOwner(uint256)", +"31db1900": "EXCHANGE_PROXY_ADDRESS()", "31db4b95": "doTriggerAuth()", +"31db6426": "checkProposalCode(uint256,address,bytes)", "31db6c48": "TYPE_EXPLORER()", "31db9efd": "right88(uint256)", "31dbd8a5": "feeAuthority()", +"31dc243b": "vetoed(uint256,address)", +"31dc2e5b": "playernamelookup(bytes32)", "31de13e8": "tBonusStageEnd()", +"31de7d15": "sell(address,address,uint256,uint256)", "31de7e72": "iceFund()", +"31deab4d": "floatStakeContract()", "31deb7e1": "nodeCost()", +"31deb7e9": "ethout(address,uint256)", +"31e0900c": "lamboIndexToApproved(uint256)", "31e12c20": "setowner()", "31e19cfa": "getStrategyCount()", +"31e1b209": "unlockTwoDate()", +"31e1c03b": "totalFeeRatio()", +"31e244e5": "declareEmergency()", "31e396c8": "calculateYourValue1(uint256)", "31e3e2fe": "WithDraw()", "31e41fba": "_localFight(uint32,uint32)", +"31e47771": "clearReferralFees()", "31e5144c": "isAvailable(uint32)", "31e574a5": "addProduct(address,uint256,string,string)", "31e59772": "deletenullarr()", "31e5f055": "one_card()", "31e63199": "codename()", +"31e658a5": "state(address)", "31e6a707": "getWalletInfoByIndex(uint256)", +"31e6aec7": "purchse()", +"31e78ae1": "PreSaleRefund(address,uint256)", "31e7b060": "constructProof(bytes32,bytes32[],bytes1[])", "31e7bf9d": "Multivest(address)", +"31e838dd": "items(uint256,uint256)", "31e88fee": "claimedPartnerPreICO(address)", "31e8c7ba": "CertID()", +"31e8cfa8": "approve_7(address,uint256)", "31e8ebbb": "DenToken()", "31e92f32": "blocksPerMonth()", "31e99e2b": "getCurrentSmartSpeedPrice()", @@ -28542,182 +52171,343 @@ "31e9ea8a": "PlaceBet(address,uint256,uint256,bool)", "31e9ee7c": "currentIcoWallet()", "31ea1a39": "cancelDeal(uint256)", +"31ea4b26": "testDefault()", +"31ea4be0": "system_owner()", "31eaa5c9": "erc20CTH()", +"31eb4f3e": "Wad()", +"31eb7a1a": "threshold(uint256)", "31ebd13f": "logAllStart()", +"31ec77e1": "SetMinWorkInvestor(uint256)", +"31eca9df": "openJackPot(uint256)", +"31ed0db4": "getTotalStakers()", +"31ed1bcc": "initialize(address,address,uint256,uint256,uint256,address,address,address)", +"31edc21e": "addressFundAdvisors()", "31ee080d": "setComisionInvesorInTokens(address,bool)", "31ee6c2e": "dividePerfectlyBy(uint256,uint256)", "31ee8277": "_createship(uint256,address)", +"31eecca3": "LogLCDTokensDelivered(address,uint256)", +"31eeeb1a": "getProofs(address)", "31ef107f": "SetProfitAddr(address)", "31ef916a": "approve_timed(address,uint256,uint256)", +"31efd8d6": "isModel(address)", "31f01140": "getUserInfoById(uint256)", "31f0528e": "updateNextGameMinAndMaxBlockUntilGameEnd(uint256,uint256)", +"31f05b9d": "smartChef()", "31f070d9": "getSet()", "31f09265": "withdraw(address,uint256,bytes)", "31f0fca1": "_addTokenToTranche(address,bytes32,uint256)", "31f170c2": "coinSupply()", +"31f1f3c3": "createCollectible(string)", "31f1fd2b": "setCriterionTime(uint256)", "31f25330": "initialRound()", +"31f27b07": "sendReward(uint256,address)", "31f27c96": "isWarriorChest(uint256)", "31f2c8a5": "whitelistedSenderAddresses()", "31f2d72d": "TelegaSend(address)", +"31f380d0": "getTokenData(address,address)", "31f3af90": "removeAuditorFromMultiRequestAssignment(uint256,address)", +"31f3b808": "chashBack(uint256,address)", +"31f3d0ac": "executeTask(bytes32,uint256)", +"31f42f8e": "isTransactionSeen(bytes32)", +"31f46d0d": "getUserCurrentReward(address,address,address)", +"31f48876": "getDataBase()", "31f4a23f": "EtherDeltaWithdrawToken(address,uint256)", "31f4f682": "investmentMin()", "31f53447": "operatorProductCommissionInPerc()", +"31f57ff2": "stakePools(uint256)", "31f607a5": "Coin_Character()", +"31f669d5": "vaultSize(uint256)", +"31f684c0": "tokensClaimable()", "31f6eac8": "availableVolumeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint256)", "31f72b44": "NewPhase(uint8)", +"31f75d3d": "itsOver()", "31f76043": "resetSymbol(string)", +"31f768b1": "deposit_single(uint256,uint256)", +"31f82b9d": "buyCcash(uint256)", "31f850e6": "create(address,uint256,uint256,uint256,bool,string)", +"31f8593e": "getTokenBalanceOfOwner(address,address)", +"31f9665e": "changeImplementationAddress(bytes32,address)", "31f9a211": "getOrderState(uint128)", "31f9a8f2": "accessToken(address,uint256)", "31f9c919": "mintingActive()", +"31f9ddb2": "callZ()", +"31f9e35b": "inflationRate()", "31fa0a45": "withdrawAdamcoins()", +"31fa1319": "getDODOProxy()", +"31fa280a": "kkcrv()", "31fa76db": "short_tokens(uint256)", "31fa7c84": "cancelRent(uint256,uint256)", "31fa8e73": "payrolls()", "31fa90d8": "stopIssuingIndividualTokens()", +"31fae119": "getCurrentOracle()", "31fb4c1d": "preIcoFinishTime()", "31fb67c2": "withdraw(string)", +"31fb7127": "TOP_SIZE()", +"31fbe91c": "setSellerBalance(uint256,uint256)", +"31fc3e32": "lockEndpoint()", +"31fc4551": "packetByValue(uint256)", "31fc5b18": "MIN_BID_FRAC_TOP()", +"31fd52b7": "Register(uint256,address,string)", "31fd725a": "PassHasBeenSet(bytes32)", "31fdb712": "getFlight()", +"31fe52e8": "outOfGas()", "31fea236": "testFailTransferFromWhenStopped()", +"31feb671": "getUser(string)", "31ff1ed9": "linkDirectly(string,uint256,uint256)", "31ffc9fa": "DentacoinTimeLock()", +"32000e00": "_become(address,address,uint256,uint256,bool)", +"32005189": "curRate()", "3200aa7a": "startRoundB()", "32013ac3": "preallocate(address,uint256,uint256)", +"32013bfa": "Release(uint256,address)", +"320223db": "issueMaxSynthsOnBehalf(address)", "320228ca": "minimunEth()", "32033229": "writeAddr()", "32035ca6": "madeOperatorForTokens(address,address,address,uint256,bytes,bytes)", +"3203d027": "arb(uint256,uint256,uint256,bytes1)", "3203fe4b": "softcap1Reached()", +"32040a16": "swapHistoryListOf(address,uint256)", +"3204ab14": "ExpireDate()", "3204dbc5": "distributeELTC(address[])", +"32051d17": "newTicketIssuer(address,string,string)", "3205c5c1": "intunderflow(uint256)", "3205f5fc": "division()", "3206163f": "Drawcolor(uint256,address,uint256,uint256)", +"32063aa5": "_addBalance(address,uint256)", "32064946": "start_buyer(address,address,uint32)", "32064db7": "left20(uint256)", +"32065eba": "decimal_()", "320665a6": "BCCB()", +"32068e91": "renounceCoinFactoryAdmin()", +"32068fa3": "viewLostMoneyDL_3(address,uint256)", "3206b2c6": "getLog(uint256)", +"3206e170": "addInitialCategory(string,uint256,uint256,uint256,uint256[],uint256,string,address,bytes2,uint256[],string)", "3207230d": "purchaseVehicleSpace(address,uint256,uint256)", "3207408f": "PrivateSaleCents()", +"32075493": "approve_201(address,uint256)", "32075c49": "buySCTK(address,uint256)", +"320780c8": "lockingContracts(address)", "3207b544": "BRI()", "32083c44": "payoutForWagerAndOutcome(uint256,uint8)", +"32085b65": "safeBatchTransferChildFrom(uint256,address,address,uint256[],uint256[],bytes)", "320878d5": "BFYToken()", "32089b74": "LEGLToken(uint256)", +"3208a176": "_recordRewardPayment(uint256)", +"320943e3": "_closeDisputableAction(uint256)", "32098d4c": "setCalculateFloatingValue(uint256)", "3209943e": "proceedsAddress()", "3209c6de": "iterate_start()", "3209e9e6": "setMinimum(uint256)", +"320a28d7": "swapEthForExactTokenUniswap(uint256,address[],uint256)", "320a352a": "ExposureCollected(bytes32,address,uint256)", "320a3c5e": "AJinToken()", "320a5018": "MilestoneInput()", "320a6c73": "transferFor_(address,address,uint256)", "320a8ef8": "transferTokensToTeamMany(address[],uint256[],uint256)", "320a98fd": "lock(string)", +"320aecd3": "oracleRequest(address,uint256,bytes32,address,bytes4,uint256,bytes)", "320b2ad9": "_pause()", +"320b5c64": "mulRatioTruncate(uint256,uint256)", +"320b8467": "getAliceTokenID(uint256)", "320bebaa": "setPromoMinPurchaseEth(uint256)", "320cffcd": "getCostForCards(uint256,uint256,uint256)", +"320d02e0": "setNativeModel(address)", "320d2800": "finalizeSale(address,uint256)", "320d2fa0": "liquidationThresholdPercent()", "320d4534": "setMinSwapAmount(uint256)", "320d46d4": "canRegister(address)", +"320d714e": "getRewardTokensTPT(address,uint256)", "320dc63a": "TotalSTC(uint256,uint256)", "320e028d": "setCountryToken(address)", "320e6c01": "set_default_approval_duration(uint256)", "320ea024": "isVerificator(address)", +"320ee062": "LogBrokerVerifierContractUpdated(address,address)", "320fdc75": "one(uint256,uint256)", "321022a5": "updateSettlementInstitution(address)", "3210318e": "PotaosBucks()", +"3210a711": "getClosestYearShares()", "3210bb1d": "moneybuy(uint256)", +"3211614b": "totalPeriodWithdrawl()", "3211bb90": "OwnerAddFunds()", +"3211e8aa": "setAcoPermissionDataOnAcoPool(uint256[],uint256[],uint256[],uint256[],address[])", "32121896": "GDK()", +"3213880d": "balances_freez_two(address)", +"32139684": "srg(address)", "32139a0e": "platformOperatorNeumarkRewardShare()", +"3214398c": "claimableBlock()", "32145dd2": "gamePlayerNumber()", "321489d4": "getDataByIndex(uint256)", +"32148d73": "eq(uint256,uint256)", +"32148f67": "increaseObservationCardinalityNext(uint16)", +"32149586": "_convertAllToWant()", +"3214ddd5": "Ctoken(uint256)", "3214e6ba": "cpow2(address,uint256)", +"32150fbb": "claimedBy(address,address)", +"32151432": "registerAsIndestructible(address)", +"32152cea": "testMinusFunction()", +"32155125": "setGasParams(uint256[])", "3215b483": "getTokensByMerkleProof(bytes32[],address,uint256)", "3216255b": "setCertificate(string,string,string,string,string,string,string)", +"32172176": "connectx()", +"32178253": "referalupline(uint256)", "3217e44e": "RGHTC()", +"3218b016": "CLERK_BUFFER()", +"3218b6ca": "insert(bytes32,uint128,uint128,uint16,uint16,uint16,bool,bytes32[],address[],uint256[])", "3218b99d": "gameStart()", +"3218bdc0": "approve_97(address,uint256)", "3218ebcc": "SUBMISSIONREWARD()", "32191017": "updateFeeForCurrentStakingInterval()", "3219ac2a": "showMyVote()", "3219e73f": "addScore(string)", "321a7c8c": "createVestingByDurationAndSplits(address,uint256,uint256,uint256,uint256)", +"321a9ab9": "buy(address,uint256,bytes,address,address)", +"321aec14": "Best_Girl()", "321b3157": "firstPartOfTeamTokensClaimed()", +"321b3895": "ironBankBorrowRate(uint256,bool)", +"321b57e1": "BundlingDenied(bool)", "321bbc1c": "test_insert_findWithHintNextUpdateHead(int256)", +"321c053c": "sync(address,uint256,uint256,uint256[3])", +"321c3cf6": "witnesses(address)", "321c48f2": "getTemplate()", "321cb98a": "creationMaxCap()", +"321cccf1": "sendTransferERC20(address,address,uint256)", +"321d2a4f": "updateIndexOfArrayType(uint8,uint64,uint256,uint8)", "321d43cd": "approve_sell_proposal()", "321db4d4": "getQueryAddress()", +"321dce1f": "getRewardsClaimed(address)", "321de1d4": "BuyToken(address,uint256,string)", +"321ed292": "depositOnCurve(uint256,uint256,address,uint256)", "321f0013": "do_nothing()", +"321f0960": "dividendsOfPremintedTokens(uint256)", "321f4584": "DataRegistered(bytes32)", "321f63a2": "HMToken()", +"321f6832": "setOptionsContract(address,bool)", +"322042f2": "flashloan(address,address,address,uint256,bytes)", "322062b8": "FixBet31()", "3220ad89": "refundSuccessful(address,bytes32)", "3220b95a": "getEscrowOrder_seller(uint256)", "32214874": "verifyAmount(address,uint256,uint256,bool)", +"3221aa38": "setput(bool)", +"3221be54": "repayAll(uint256)", +"3221c93f": "liquidityAddress()", "3221e125": "addBag(uint256)", +"32226cde": "TransferResponsibility(address)", "32227425": "stopReceiveTicket(uint256)", "3222ae71": "airdropFinished()", +"3222d49a": "getWhiteListed(bytes)", +"3222f2f6": "CheckLogger(address)", +"322331a2": "setOfferStore(address)", "322370ff": "BetexStorage()", +"3223c16f": "getAllEth()", +"3223e881": "claimReferralCommissionFor(address,uint256)", +"3223ea3d": "_RatioPool()", "32246e9f": "auctionEnd(uint256)", "322471cf": "createAffiliate(uint256,uint64,uint64,address,address)", "3224ba23": "submitPoliceReport(uint256,bytes,bool)", +"3224e2f2": "snapshotInEraWithOffset(address,uint256,uint256,uint256)", "32254992": "getPrevHash(int256)", "32255d90": "confirmShipping(uint256)", "32258794": "removeAddressesFromBlacklist(address[])", +"3225dbb6": "distributedFirst(address)", +"322601ea": "buyerBeneficiary()", +"32262af3": "test_approve_withValidAmount()", +"32266e32": "arbTwoApply(address,uint256)", "322671cd": "_checkLockUp(address)", "32268c01": "artistsArtworks(address,uint256)", "3226a94e": "TRNCoin()", +"3226ee42": "setParent(uint32,uint32,uint32)", +"32271555": "settleBonus(address)", +"32271faf": "redeem(uint8)", "3227563a": "logPriceAfter()", +"32276c9f": "oracleScriptIDs(uint256)", +"3227a3d4": "deals(address)", "3227bd8b": "DragonCoin()", +"32282f8e": "approveUsers(address)", "3228556f": "setPOOL_edit_8(string)", "3228afcb": "HyperIslandCoin()", "32293954": "LogTokenPreissued(address,uint256)", +"322965df": "GetTotalStakeAmount()", +"32298be1": "lockDurations(uint256)", +"3229c1b8": "idxSP2()", +"322a3a54": "detachAddress(address)", "322a5e5f": "balanceContract()", "322a7050": "addHospital(uint256,string)", "322a8957": "teamTokenTimelock()", +"322af8e8": "_isSynthRateInvalid(bytes32,uint256)", "322b1bc0": "getarray_length()", +"322b24aa": "multiplyPowerBase2(uint256,uint256,uint256)", +"322b7116": "approve_538(address,uint256)", "322b8c7e": "dKERNEL_PANIC()", +"322c5d17": "getTPollInfo()", +"322c983a": "migrateScalingFundsAgents(address[])", +"322ce8f0": "setWithdrawFee(uint16)", +"322d0d4a": "checkPoolDuplicate(address)", +"322d2100": "calculatePurchaseReturn(uint256)", +"322d5010": "setReentrancy(bool)", +"322df208": "getEarning()", +"322e2604": "mapEraPool_Share(uint256,address)", "322e5021": "Penalty(address,uint256)", +"322e9f04": "work()", "322eccdc": "withdraw_all_admin(address)", +"322f62ba": "reg(address)", "323046b1": "date()", "32307c67": "LCASH()", "323082d7": "Vote(string)", +"32308cce": "lockValue(address,uint256)", "3230d486": "getHeroRequiredExpForLevelUp(uint256)", "323162a9": "getDisputeParticipants(uint256)", "3231a2b9": "voteSnapshotBalanceAutoBatch(address[],uint256[])", +"32320e02": "changeSuperAdminToAdmin(address,address)", +"32322fa9": "preSalePhase()", +"32325d64": "findFreeM3Referrer(address,uint8)", "32326b44": "Invested(address,uint256,uint128)", +"32327ea8": "sellAllAmountBuyEthAndMigrateSai(address,address,uint256,address,uint256,address)", "3232f204": "SPAMed()", +"3232f52f": "adSlotActivated(address)", +"3232ff7b": "decreaseRewardRate()", "32331418": "ExchangeTokenToZWC(address,address,uint256)", +"32332f2c": "swapExactTokenForToken(uint256,uint256,uint256)", +"3233a982": "ChangeSaleSettings(address,address,uint256,uint256,uint256)", "3233b455": "appFundDeposit()", "3233c686": "claimerDeposit()", "3233c791": "nextlotnumber()", +"3233efe5": "initialize(address[],string)", "32347487": "forwardFundsToWallet()", +"3234ab43": "commitment_a()", +"3234ee45": "_isStartedStateForFlow(uint256,uint256)", "32353fbd": "resumeAuction()", "323560b5": "ZebraToken(uint256,string,uint8,string)", +"3235fdea": "updateRefWithdrawA(string)", +"32363735": "Supervisors(address)", "32363b47": "period1End()", "32363e0a": "calculateMultiplierAfterBurn(uint256,uint256,uint256)", "323661f6": "releaseLockedBalance()", "32366ea5": "isOMITokenContract()", "32366fb9": "makeTomatoes(address)", +"32367fdd": "LogBalanceChanged(uint256,uint256)", "32369e38": "GetPlayerDynamicRatio(address,uint256)", +"3236ed56": "rep(address)", +"323725b1": "setLastDeposit(address)", "32373e25": "CREATED_STAR4()", "323772ee": "unlocktime()", +"3237a68e": "rewardClaimTo(address)", +"3237bfba": "emergencyBotGTransfer(address)", "3237d63c": "tgeLive()", +"32381fa3": "canBuyErc721(address)", "32383a69": "WashCrowdsale()", "3238c832": "updateDBZHeroDetails(uint256,string,address,address,uint256)", +"32390c67": "ipull(address)", "32395c2b": "addPayee(address,address,uint256)", +"32395cb5": "GetProjectID(uint256)", "3239825c": "edCoreContract()", "3239d232": "weekProcessed(uint256)", "323a5e0b": "deposits()", +"323a6556": "findRank(address,uint256)", "323a73d9": "generateId(uint256,uint256,uint256)", "323a7acb": "Joyreum()", "323aca70": "InterCryptoNode()", +"323aef69": "sevenVestingStages()", +"323b01bc": "tcj()", "323b1b87": "FreezeTokenTransfers(address,bool)", "323b2c26": "MAX_RELEASE_DATE()", "323bc818": "_createTeam(string,string,uint256,address)", @@ -28731,143 +52521,267 @@ "323ded4d": "_getLegendaryPlusRarity(uint32)", "323df879": "MILLION_TOKENS()", "323e71fd": "turnOffCanUpdateFrontWindowAdjustmentRatio()", +"323e89b5": "maxPartnerSupply()", "323ea3f9": "photoText()", +"323ed05b": "requestedAmount(address,uint256)", "323efacd": "checkAndCallSafeTransfer(address,address,uint256,bytes)", "323f6fe0": "VESTING_OFFSET()", "323fe92c": "setPriceAttr(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"32403040": "streams()", +"32405c8f": "adminTable(address)", +"324083b1": "swapEthForToken(address,uint256,uint256)", +"3240c523": "getMaxCardSupply(string)", "32414926": "CarTaxiToken(address)", +"3241734f": "transferProof(address,address,address,uint256,string)", "32418558": "stakeTokensManually(address,uint256,uint256)", +"3241992a": "monitor()", +"32422a80": "get_coffer_value(address)", "32424aa3": "_decimals()", "324298ff": "ArrayDemo()", "32434a2e": "register(address,string)", "324365b1": "createCollectible(uint256,uint256,address,address)", +"3243753a": "advertiserAffiliates(uint256)", "3243c791": "distributeDividends(uint256)", "32443d7d": "developmentFundUnlockTime()", "324536eb": "totalSupply_()", +"32458eed": "log(bool)", "3245a55f": "mintFull(address,uint256)", +"324636b3": "harvestWant(address)", +"32464b4c": "invalidateOrder(uint256[5],address[2],uint8,bytes32[2])", "3246887d": "setLedger(address)", "3246bac5": "getGameIpfs(uint256)", +"3246e55e": "setBuRateBase(uint256)", +"32470036": "dracoTrade(address,uint256,uint256,address[],uint256)", +"3247485e": "fun_y()", +"3247701a": "_globaltBurn()", "3247dd8b": "ySignToken()", +"3248295f": "rootRoot()", "32484dab": "totalContributedUnits()", "3248687a": "getLockSize(address)", +"32489d18": "partTicket()", "32492f96": "getStellarBalance()", "32495c58": "requiredEntries()", "3249759c": "TAToken()", +"324a0824": "generateHand()", +"324a4beb": "addFrozen(address,uint256)", "324a5562": "setMaxNumber(uint8)", +"324a7d34": "generateHash(uint256,uint256)", "324ab080": "MIN_BONUS()", +"324acbb4": "allowMintAddrInfo(address)", "324b0085": "createBlogger()", "324b8ad2": "totalBurnLotsByAddress(address)", "324b8d6e": "oracleConfig()", +"324bac8d": "setBasicData(address,address,address,uint256)", "324c6add": "KBV01()", "324cb3cb": "contractLocked()", "324cf51a": "setPurchaseParamCount(uint256)", +"324d685d": "setRLPWrap(address)", "324da66f": "removePromoCode(bytes32)", +"324dc126": "weaponBalance(address,uint256)", "324dd3b0": "getFighterArray(uint256[])", +"324e1157": "setSellSZO(address)", +"324e9511": "openCanWithdraw(uint256)", "324ecd96": "power10(uint256)", +"324f554d": "OnIsTokenTransactionOpenUpdated(bool,bool)", +"324f6804": "turnBurningOn()", +"324f8ac9": "direct_drop_rate()", +"3250c6d1": "cancelAuctionByManager(uint256)", "3250e151": "PakEKO()", "32513ce5": "newContractAddr()", +"325187cc": "deposit3m(address,uint256)", "32519e0e": "roundEth()", +"3251b88b": "yesVote()", "32525f09": "testTransferFromDoesNotAllowTransferOfMoreThanAllowedByDelegate()", "325294e5": "calculateEthers(uint256)", +"3252a02e": "ChangeFarmingRate(address,uint256)", "3252b8fb": "returnGrantedToken(uint256)", +"3252fcf0": "_ethDepositors(uint256)", +"32531c3c": "whitelistMap(address)", "3253277c": "badge(address,uint256)", +"32536eb4": "checkPrice(uint256,uint256)", "3253ccdf": "burnNomins(uint256)", +"32544db9": "withdrawPrizeNFT(uint256)", "32546f7e": "HammerChain()", "3254de48": "ITSEndTime()", +"3254e5a0": "vaultX()", +"32555d16": "pledgor(uint256)", "32555f06": "dissBlock(uint256)", "325586dc": "checkStateProof(bytes,uint256,bytes,bytes)", +"3255905c": "startNextEra(bytes32,uint256,uint256,uint256)", "32564d82": "identifierToIndex(bytes32)", "325654ae": "secondPrivateLockTime()", +"32567803": "foreclosed()", +"325741c2": "betPayout(address,uint256)", "3257bd32": "getDepositorMultiplier(address)", "3257d818": "hasResponded(bytes32)", +"3257df29": "setMarketHandlerAddr(address)", "32581fb0": "getArtefactById(uint256)", "3258e255": "setWithdrawBeforeTime(uint256)", +"3259ba24": "approveAndCallData(address,uint256,bytes)", +"3259da12": "userReinvestBonusOnCycle(uint256)", +"3259eeb6": "removeHardWorker(address)", "325a19f1": "created()", +"325a34a1": "previousPayouts()", +"325a7a84": "getVoucherStatus(uint256)", +"325a9b13": "redirectInterestStreamOf(address,address)", "325ab9ac": "buildCharging()", "325ad39b": "UltraNote()", +"325ad932": "setIsSaleOpen(bool)", "325add98": "sellDaiForEth(uint256,uint256)", +"325afac4": "getTokenIdsFromPurchaseId(uint256,bytes32)", +"325ba1fc": "ComisionInversorInTokensEvent(address,bool)", +"325be7e7": "stableSwapCompound()", "325c25a2": "auctionLength()", "325c35c5": "setFightsAddress(address)", +"325c8df0": "delayLockBeforeValues(address)", "325cf9e6": "splitPayment()", "325da1c0": "LogAllocateTicket(uint256,address,string)", +"325df188": "changeWinnerMultiplier(uint256)", "325dfddf": "waittokens()", +"325e04e6": "setCdcV(address)", +"325ec768": "sendEtherToContract()", +"325ec8f0": "_emitShareRateChange(uint256,uint40)", "325ecf99": "addMarketingToken(uint256,uint128)", "325f33e0": "checkUserByWallet()", "325f9f41": "processShares(uint256)", +"32601e7f": "getNumberOfOwner()", +"3260507e": "TOTAL_SECONDS()", "32606387": "_draw3()", +"32608039": "synths(bytes32)", "32608243": "Iou()", "3260db59": "UnityToken(address,uint256)", "32611e2b": "stage2_start()", +"326150e6": "getBancorConnectorsAmountByRelayAmount(uint256,address,address)", "32615457": "FullAssetRegistry()", +"32615a26": "replaceAdvertiserRegistry(address)", "32617353": "GoldBlockTickets()", "32619375": "ChangeMiningReward(uint256)", +"3261a354": "byte2Uint(bytes1)", +"32620c27": "setC(address)", "3262207c": "isTransferProxy(uint32,address)", +"326220bf": "changeUpdater(address)", "32624053": "blocksToWaitShort()", "32624114": "isValidAccessMessage(address,uint8,bytes32,bytes32)", +"326242a0": "press_A()", "3262fd9a": "getMoney(uint256)", "326360fe": "uncommittedTokenBalance()", "32643513": "_computeContendersTotalHp(uint256,uint256,uint256,uint256,uint256,uint256)", "32644829": "removePlayerFromBoard(bytes32,bytes32)", +"32646543": "invest_rewards_update()", +"326465cb": "curveIndex(address)", +"32648e09": "getEmployee(address)", "3264a34b": "getBoard()", "3264a844": "hundredtimes()", +"3264bd76": "depositHUSD()", +"326539a2": "getHoldersQuantity()", "3265bf5b": "registerPlayerToBoard(uint256)", "3265c436": "btcsAddress()", "32665ffb": "getProperty(uint256)", "32666a31": "setMonsterObj(uint64,string,uint32,uint32,uint32)", "326687b9": "onSale()", +"3266b6ec": "updateBurner(address)", "3266c856": "WanToken(address,uint256,uint256)", "3266fb05": "lockedTime(address)", "32670d10": "contributors_locked(address)", +"32671062": "getFireScBylevel(uint256)", "3267a2c5": "returnedToOwners()", +"3267ae1d": "TokenWithdraw(uint256)", "3267db34": "setCurrentBadge(bytes32)", +"3268111b": "getEnabled(address)", "3268215c": "getPuppyAttributes(uint256)", "3268419f": "PreSale(uint256,uint256,address,address,uint256)", +"3268b2c9": "multiSetWhiteListRecords(address[],bool,int128)", +"3268c9bd": "mineUNI(address)", +"3268cc56": "routerAddress()", +"3268dd46": "claimCommunityTokens()", "32691d18": "updateLastTransactionTime(address)", "326959cc": "MMMToken()", "32696a92": "totalpatient()", +"326a3cfb": "totalEscrowedAccountBalance(address)", "326a794d": "safeMathSub(uint256,uint256)", "326a7d77": "LEVEL_MAX_VALUE()", +"326ab283": "mmFarmingPool()", "326abfce": "curent_mul()", "326b0c7e": "BuyPresalePackage(uint8,address)", "326b1001": "crowdSaleHardCap()", "326b7a14": "WthdrawTo(address,uint256)", +"326bfcc1": "getTotalPoints()", +"326cc0e1": "rewardBonus(uint256,address)", "326cf61c": "toBytes(bytes32)", "326dd62d": "migrationStartedTime()", +"326df387": "SENIOR_MEMBERLIST_ADMIN2()", "326e8d60": "getTurnover(bytes32)", +"326eb031": "getIndividualDailyRestriction(address)", "326fac6e": "getCurrentGames()", "326fd584": "maxEtherCap()", +"32705203": "updateBatchSize(uint256)", "32708966": "setMonsterIndexToApproved(uint256,address)", +"32709738": "lastContractAddress()", +"3270bb5b": "isSettled()", "3270f753": "depositHouseTakeout()", "327107f7": "targetToken()", "32715bf2": "userContentByIndex(uint256)", "32716063": "calcTotalFee(uint256,bool)", +"32717536": "changeVideo(uint256,uint256)", +"32719b70": "pendingEther(uint256,address)", +"3272453c": "allowGSN(bool)", +"3272828b": "hasUpstream(address)", "3272b28c": "allowedSenders()", +"327305f2": "isAutomation()", "32733a08": "balanceB()", "32736fb0": "RoundsManager(address)", "3273b110": "setMinDuration(uint32)", "327419b7": "NeedsCoin()", "327428b1": "Lockable(uint256)", +"32749461": "getReserves(address,address,address)", "32750350": "setcardaddress(address,address,uint256)", +"3275a7b6": "calculatePercentage(uint256,uint256,uint256)", +"32761d16": "mintTokenId(address,uint256)", "3276249f": "vrcWallet()", +"32763575": "LiqLpStakerContract()", +"3276807a": "addTopic(uint256,string)", "327683bb": "setIII_R3(uint256)", "3276eaa9": "incrementContinuityNumber(uint32,int256)", +"32770216": "safeGetBXHBlockReward(uint256)", +"32772448": "bacDai()", "32773ba3": "challengeExit(uint256,uint256,bytes,bytes,bytes,bytes)", +"32775890": "updatePairPriceSingle(address)", +"327779a7": "converterFactories(uint16)", "3277bbda": "setUintF1IntF3AddressF3(uint256,int256,address)", +"3277be96": "getDateAddOfAPI(bytes32)", +"3277c6a6": "Claim(address,uint32)", "32780d05": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", "3278ba2f": "getNumBounties()", "3278c960": "terminateSelfDestruct()", "3278dc67": "Founder()", +"32790343": "burnForAllowance(address,address,uint256)", "327942a2": "move(bytes32,uint256)", "32794823": "withdrawToOwnerCheck()", "32797f44": "failedTimestampSecondsAt(uint16)", +"3279beab": "emergencyRewardWithdraw(uint256)", +"3279f388": "getMiningPrice(string)", "327a765a": "_getString(address,bytes32)", "327a943a": "getUserAmount(address)", +"327aa493": "chkInvestorBalance(address)", +"327ab639": "payInterestForOracle(address,address)", +"327aeead": "changeowner()", +"327b32b8": "burnAccount()", +"327b5e98": "GetFileExistenceProof(address,string,string)", +"327b690a": "RemoveOwnerRequestUpdate2(address,uint8,bool)", "327b95b5": "USDXCoin()", +"327ba06c": "MARKET_BUY_ETH_LIMIT()", +"327bc7b1": "passedPoint()", +"327bff4d": "approve_437(address,uint256)", "327c0dd9": "resetLotteryManually()", +"327c11dd": "isTradeTime()", "327cc732": "registrantIndex(address)", +"327d3054": "decodeNegativeSpreadError(bytes)", +"327d53fb": "getWethPair(address,address)", +"327db4db": "addServerAddresss(address[])", "327e36dc": "RefundVault(address,address[])", "327efb0c": "supplylimitset()", "327f0b6b": "pollTitle(uint256)", +"327f8208": "changeParameter(string,uint256)", "327fc33c": "isUpcoin()", "32807be0": "PrymexPreICOCrowdsale(uint256,uint256,uint256,address)", "3280922b": "TOKENS_SALE()", @@ -28876,22 +52790,38 @@ "3281c4e1": "salesAllocation()", "3281c4fa": "upRound(uint256,address,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256)", "3281d576": "isContractMiniGame()", +"3281ea73": "EventRecordProcessor(bytes32,uint8,uint8)", "32820d5f": "setupWeiCaps(uint256,uint256)", +"32822fc3": "issuerClose(bool)", "328243d5": "changeSale(uint256,uint256,uint256,uint256)", "32828d9e": "BbbToken(uint256,string,uint8,string)", "32829a23": "OpenBankAccount()", "3282aa8a": "individualMaxCapWei()", +"32832fc0": "crowdSale(address)", "32833d51": "power(uint256,uint256,uint32,uint32)", +"32838b3b": "getDataParameter(string,string,uint256)", +"3283a234": "adminRescueFunds(address,address,uint256)", "3283f641": "task()", "32842c39": "picture(address)", +"32844277": "setUpgradable(bool)", "32846270": "goldSaleLimit()", +"32848373": "openCancel(address,uint256)", +"32849478": "CapNhatKhoangCachChay(uint256,uint256)", "3284d75c": "sendRefTVs(address)", +"3284d86e": "SetStakeFee(uint256)", "3284fd79": "issue(address,uint32)", +"328511c6": "SubmitPrps(uint8)", +"32854c13": "getVipLevel(address)", "32859392": "dividendDecreaseFactor()", "3285ecde": "tokensMintedDuringPreICO()", "3285f406": "GetWithdrawalFunds(address)", +"328609dd": "getBlueprint(string)", +"32864531": "distributeChai(address,address[],uint256)", "3286b611": "Generate(address,address,uint256,uint256)", "3286fb75": "addressNotSet(address,address)", +"3287101c": "wbnbToButterRoute(uint256)", +"32871ad1": "receiveDth(address,uint256)", +"3287581b": "grantRequestInitiated(address)", "3287c399": "isSignedBy(bytes32,address,bytes)", "3287d0dc": "ownerLocked()", "3287d0f6": "switchReserve(address)", @@ -28899,25 +52829,45 @@ "3288eb0b": "ChineseCookies()", "32892177": "TOKEN_VERSION()", "328929e0": "Offer(address,address,bytes32,uint256,uint256,uint128)", +"328936b8": "CONDUCTOR_ROLE()", "32895c2a": "ERH()", +"3289cb38": "upgradeMiningMultipleTimes(uint256,uint256)", "3289e004": "redeemPackage(uint256,address,uint256,bytes32[])", "3289fba6": "getSanPrevOwner(uint256)", "328a2c2d": "updateStartDate(uint256,uint256)", "328a7e97": "setKyber(address)", "328a8cc4": "addRestaurant(address)", +"328aa139": "blockInAMonth()", "328b10d7": "vestingStarts()", +"328b10d8": "getUnlockSchedulesFor(address)", +"328b4d4b": "racers(uint256)", +"328bc21f": "IDPlayers(address)", "328c0ec0": "endPreICOTime()", "328d15f4": "_getCurrentWeek()", "328d8f72": "setEnabled(bool)", "328db985": "getPotCnt(string)", +"328dba66": "LoanCollected(uint256,address,uint256,uint256,uint256)", +"328dd982": "getActions(uint256)", +"328e48be": "hatchingMultiplierCoolDown()", "328ede54": "DAFZOToken(address,address,address,address)", +"328fc4f8": "withdrawAllUSDT()", +"328fd05f": "updateDevAddre(address)", +"328ffd11": "intervals(uint256)", +"329000b5": "findArgsByIndexTest(uint256)", "32902924": "signSendDiamond(bytes32,string,string,address,string,bytes16,uint256)", +"329082b0": "getsalesSupply()", "3290bd90": "getInfoFromBidding(bytes,bytes32)", "3290ce29": "purchaseTokens()", "3290f515": "addInterest(uint256)", "32911111": "getroundinfo(uint32)", +"329150e8": "removeFromAdmin(address)", +"32917933": "AllINVESTORS()", "3291b39a": "addReserve(address,uint32,bool)", +"3291c11a": "loanParamsIds(uint256)", +"3291edeb": "arbone()", "32921690": "checkDepth(address,uint256)", +"32924b66": "INVITOR_WEIGHT()", +"32925e92": "assetWLAddress()", "3292b71f": "transferCrowdSale(bool)", "3292cd37": "payWithDailyFreePoint()", "32931fbb": "left1(uint256)", @@ -28927,209 +52877,379 @@ "32947122": "updAirDropTokenDestroy(bool)", "32948515": "QLinkToken()", "3294ab00": "withdrawBtc(bytes,uint256)", +"3294b3c9": "dataSourceInstance()", "3294c2d7": "updateDocument(uint256,uint256)", +"3294e653": "tierTwoBonusTime()", +"329504da": "getPrimaryDaiRecipient()", "32958fcb": "boolToBytes32(bool)", "3295feb3": "numAuthorities()", +"329601e0": "redeemPremiumCoin(address,uint256)", +"329617d9": "setFixUnits(bool)", "32967ea0": "isOlderOwner(address,address)", "3296a373": "createPromoPerson(uint256,address,uint256)", +"32970710": "lastMessage()", +"32972672": "inflationEnabled()", +"32972e46": "uniPair()", "3297ef5b": "voting_started()", +"32984d31": "viewBonusOnCycle(uint256)", "32985244": "joyTokenContract()", "3298caa3": "getDoneRegistrationAmount(address)", +"3298df76": "purchase(uint8)", "3298e6c8": "GanaPublicSale(address,address,address)", "32990ad2": "rewardTokensForClient(address,uint256)", "3299ad23": "PapushaToken()", "329a23b8": "Wallet(address[])", "329a27e7": "getWalletBalance()", +"329a2905": "setUintAndInt(uint256,int256)", "329a88d5": "UBIATARPLAY_CAP()", +"329ae0d6": "LoanRequestedAtIndex(uint256)", +"329b0f9b": "supportProject(uint256)", "329b1c92": "getReferral()", "329b59d1": "fallback(uint256)", "329b8f38": "yesCount(uint256)", +"329b8f59": "importLoan(address,address,uint256)", +"329ba520": "getAllowApprove()", +"329bd6e1": "pendingSquid(uint256,address)", "329bfc33": "getCurrentWinner()", "329c095b": "getLatestReading(string)", "329ccce1": "vmaxEtherPerPurchase()", "329cd958": "get_next_item_in_state_from_item(bytes32,bytes32)", "329ce1b7": "delOwner(address,address)", "329ce29e": "buyTile(uint256)", +"329ceacd": "canRebase()", +"329cedb4": "challengerBaseDeposit()", "329d1a35": "testReentracyGuard()", "329d1a8b": "depositIndex(uint256)", "329d3346": "closeVote()", +"329d47c3": "gladiatorToPower(address)", "329d5f0f": "setApprovedUser(address)", "329da011": "addNewToken(string,address,address)", "329daf90": "onlyPauserMock()", +"329dca19": "setBonusList(address,uint8)", +"329e9302": "UNREWARDS(address)", "329eac15": "phase2Price()", +"329eb839": "pull()", "329f36b5": "BONUS_TIER_2_LIMIT()", "329f5b21": "DiatomAirdrop(address,address)", +"329fec1e": "hashRedeemIntent(uint256,address,address)", +"32a01103": "setTGEDate(uint256)", +"32a07eaa": "ethGetCount()", +"32a089b0": "ASTR()", +"32a0f2d7": "clearingPrice()", +"32a0f6f4": "setHealthStrat(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "32a16f4e": "isLocked(bytes32)", +"32a1bd70": "_earliestDelete()", "32a21a28": "registerInvitor(address,address)", +"32a2b2db": "isWhiter(address)", "32a2c5d0": "getContractAddress()", "32a2fda7": "isPermissionGranted(address,string)", "32a36e53": "enterRound(bool)", +"32a3823e": "MaxETHAmount()", "32a3869a": "getBonusPercentage(uint256)", +"32a38dd8": "convertEthToHex()", "32a3abbb": "LALATokenAddress()", "32a42882": "buyPropertyInPXL(uint16,uint256)", "32a45ac5": "addMessage(address,uint256,uint256)", "32a521c1": "disallowToLock(address,address)", "32a52fcd": "FOR_ICO()", +"32a538a7": "MAX_TXN_ALLOWED()", "32a54712": "DecalinxCoin()", "32a55bb4": "swapActivity()", +"32a5722c": "getStakingAndFSTAmount()", +"32a5881e": "moneyFeeRatio()", "32a58dc2": "change_client_manager(address)", +"32a64370": "totalInvestment(uint256)", +"32a66857": "assuranceAccount2LastDepositTime(address)", +"32a69e61": "TokenSaleEnd()", +"32a6a0c4": "subscribe(uint128,uint128,uint128,uint128,bool)", "32a6baf6": "isTimePassed()", +"32a6bced": "TMTG_DeleteCEx(address)", +"32a6bf43": "priceStored()", "32a71b36": "AleaCoin()", +"32a7856d": "metaChangeDeadline(bytes,uint256,uint256,uint256,uint256)", "32a7ae95": "deleteClaim(address)", "32a7d7c2": "AddressOwnershipVerification()", "32a7dbda": "getMintManager()", "32a7e45a": "eosBlanceOf()", +"32a7ed0e": "externalOracleDecimals()", "32a80329": "getTokenTransferable()", +"32a851b8": "setTransferAtOnce(bool)", "32a8589a": "FercCoin()", "32a89e50": "NextBabyIs(address,uint256)", "32a8bb33": "getParticipantIds(string,uint256,uint256)", "32a8d49e": "ADV_TEAM_TOKENS()", "32a8e74c": "participateBuyback()", "32a92229": "creditBalanceOf(address)", +"32a9862e": "sashimiRouter()", "32a9a43b": "removeLeverage(uint256)", +"32a9af62": "RefundEnabled(address)", +"32a9caba": "addPool(address,uint256)", "32a9df46": "setSecondBonus(uint256)", "32aa952f": "UpdateSellAgentCreators(address,address)", +"32aad2ba": "rxp_balance()", "32aae34d": "LogVoteToFreeze(address,uint256,uint8,bool)", +"32aae3ad": "decodeAssetProxyDispatchError(bytes)", "32aaf9d7": "addCommissionAmount(uint256,address)", +"32ab0acb": "specialTransfer(uint256,uint256)", +"32ab59ac": "flushAddr()", "32ab6af0": "newRepoWithVersion(string,address,uint16[3],address,bytes)", "32aba656": "stillAvailable()", "32abff8e": "lastBlock_v5Hash_uint256()", +"32ac1f27": "bac()", +"32ac27ef": "getGoldCoin(address)", +"32ac5cd2": "GAS_TOKEN_INTERFACE_ADDRESS()", "32ac752b": "matches(string)", +"32acce43": "getBlessingPrice(address)", "32ace499": "getNextOrderPrice(address,address,uint256)", +"32ad2982": "getReleaseAmount(address)", +"32ad8d6e": "pendingBxd(uint256,address)", +"32ae3848": "whereAmI()", +"32ae58ca": "_addPieMarkets(address[])", "32aeaddf": "lockingPeriodInMonths()", +"32aebe0d": "METHReward()", +"32aecf44": "getOneEntry(uint256)", +"32af04ff": "setTaxPoolAddress(address)", +"32af2edb": "get_message()", +"32af4701": "dailyTotalSupply(uint256)", "32af5858": "behalfBet(address,uint256,uint256)", "32afa2f9": "claimEtherOwner(uint256)", +"32afb842": "balanceToClaim(address)", "32b12eac": "setFallback(address)", +"32b1467b": "updateStakingTime(uint256)", "32b182c3": "eligible(address,uint256)", +"32b19179": "setaddrfprice(address)", +"32b19c65": "settleBet(string)", "32b1ad5a": "checkContructIsLocked()", +"32b1c5b7": "calculateGrantClaim(uint256)", "32b28b95": "edoPerWeiDecimals_()", "32b30b64": "calculateUnsoldTokens()", +"32b37e06": "frezeBlock(bool)", +"32b3a329": "setGiftRate(uint256)", "32b3c323": "anyoneEndICO()", +"32b3fcc3": "hbtSafe()", "32b431da": "setPlanetAuctionAddress(address)", "32b45055": "EREEBERRY()", "32b4623a": "shareCertificate(string,string,string,address,address,string)", +"32b48340": "WithdrawStake(address)", "32b4b5ed": "openProvider(bool,string,string,uint256,string,uint8,bool,address)", "32b4d74c": "getNumRemainingSeats()", "32b525bb": "beginMotion(address)", +"32b5a1b3": "initialize(address,address,address,uint256,address,address)", "32b5b2d1": "missedVerificationSlashAmount()", +"32b5d2ff": "getStakeIndex(uint256)", +"32b61970": "butterToWbnbRoute(uint256)", +"32b653c6": "updateBetaUserContractAddress(address)", "32b65a95": "getSplitCount(string)", "32b680d6": "payReceiver(address)", "32b693b0": "PetCoin()", "32b6f97a": "UXDToken()", "32b7214e": "setNextSnapshotTime(uint256)", "32b734b7": "awardsEnd()", +"32b74ec7": "buyFor(uint256,address,address)", +"32b77404": "potofgold3Register()", +"32b7e70e": "removeEndorsee(address)", "32b85a44": "currentWeight()", +"32b8b4de": "vaultPrice()", "32b8c086": "testSuperUser(address)", "32b98616": "updateCardDetail(uint256,uint256,bytes32)", +"32b9fffd": "addTokenToSwap0(address,address,address)", +"32ba2e53": "withdrawRewardsValidator()", "32ba36d6": "EtherShare()", "32ba4b8b": "RANGEEND_5()", "32ba65aa": "clearBalance(address)", "32baa8d9": "existingCategory(uint256)", "32bace54": "invest_cin(address,uint256)", "32bafb2c": "withdrawMln(address,uint256)", +"32bb15ba": "getValidatorsByDelegator(address)", "32bb2c0d": "calc(uint256,uint256)", +"32bbadf9": "earnedId(uint256)", "32bbb8cc": "mgrVotes(uint256)", "32bbc1c8": "WEI_PER_USD()", +"32bc298c": "TIME_STEP()", +"32bc68be": "arrayPerlinPools(uint256)", "32bc873d": "AZExchange(address,address,address,uint256,uint256,uint256)", "32bc934c": "MILLION()", +"32bc9927": "arAsset_thumbnail(uint256)", +"32bd678f": "yusdc()", "32bd8644": "MPYRefund(address,uint256)", +"32bdbe3f": "_clock()", +"32be8d7f": "removeRewardFactor(bytes32)", "32be9502": "getOwnerInAnyPlatformById(uint256)", +"32bf1492": "setLDORouter(uint256,address[])", "32bf1def": "FACTOR_2()", "32bf775d": "testControlTransferDisabled()", "32bf9e5b": "AfricacoinToken()", "32bfaa23": "initializeRefundableFundraiser(uint256)", "32bfdc38": "ROC()", +"32bfe469": "getTokenWeights()", +"32c02a14": "deploy(address,bytes32)", "32c0c583": "setDenyPremium(bytes32,bool)", "32c0f801": "tokenFacebook()", "32c0fba5": "airDrop(address,address,uint256)", +"32c10971": "lockToken(address,uint256,uint256,bool)", +"32c19923": "Footmark()", +"32c1c2eb": "totalmember()", +"32c1d50d": "_lockingEnds(address)", "32c1eb82": "getActualRate()", +"32c1ff91": "updateCTokenAddress(address,address)", "32c22154": "livepeerToken()", +"32c22f5d": "EscrowDied(uint8)", "32c26957": "isTimeout()", +"32c2dc5a": "PrintEvent(string,address,uint256)", "32c2ed9a": "inquire(uint256,uint256)", +"32c325dc": "epochWinnersMultiplier(uint256)", "32c35352": "marketSale(uint256,string,address,address)", +"32c3b4f9": "provideMultiple(address[],uint256[])", "32c3de5d": "listCreatedTokens()", "32c442d6": "Super87Coin()", +"32c4629d": "AddOrgInfo(address,string)", "32c468fa": "setPreFundingStartTime(uint256)", "32c4903d": "getAllParents(bytes32)", "32c514d5": "getJobDetailsIPFSHash(uint256)", +"32c54f1e": "LogRemoveToken(address,string,string,uint8,bytes,bytes)", +"32c5e8e4": "metapoolWithdraw3pool(uint256)", +"32c6534b": "canUnlock(address,uint256)", "32c66a9d": "Nome_vincitore()", +"32c67267": "setupBody()", +"32c6a793": "stopFsm(bytes32)", "32c6f294": "deadline120()", "32c6f315": "exchangeIsRunning()", "32c716b6": "dividendsAcc(address)", +"32c764b9": "withdrawLeftovers()", "32c7de60": "_RamenCoin()", +"32c8041d": "FLASHLOAN_CALLBACK_SUCCESS()", "32c862ed": "inSalePeriod()", "32c896d4": "REFERRAL_BONUS_LEVEL4()", "32c9635b": "_getEthUsdPrice()", "32c990b4": "getUserKeys(address)", +"32c991b5": "HALF()", +"32ca2c00": "getPreTransfer(uint256)", "32ca5587": "isWoidRegistred(address)", +"32ca9499": "INTEREST_BUYBACK_SHARE()", "32ca966e": "toTileId(int32,int32)", "32cae0a8": "userPoolFund()", "32cb46e0": "totalContributedWei()", "32cb6b0c": "MAX_SUPPLY()", "32cb93d9": "getPaintingName(uint256)", "32cba128": "_deleteShareholder(address)", +"32cbc60c": "jgbdcpexchange()", "32cc0105": "setAmountForDeal(uint256)", +"32cc3aad": "checkAvailableAVEC(bytes32)", "32cc6a9f": "modifyNextCap(uint256,uint256)", +"32cc6ae6": "getWithdrawable(address)", +"32ccb3a1": "updateEmergencyWithdrawStatus(bool)", "32cce1e4": "_unlockTokenByIndex(uint256)", "32cd0487": "delist(address[])", "32cd0b3d": "totalRemainSupply()", "32cd3148": "CashmoneyToken()", "32cd724a": "getStateStartTime(bytes32)", +"32cda7ff": "setFundAddress(address,uint256)", +"32ce13d4": "g5()", +"32ce8ebc": "addValidPluginContracts(bytes32[])", "32ce92cb": "setFIRST_STEP_MULTIPLIER(uint16)", "32cea83e": "birth(bytes)", +"32cedafe": "round2OpeningTime()", "32cee2eb": "getMinableSupply()", +"32cf261d": "lockupAmountOf(address)", +"32cf8330": "marketGetBalance(address)", +"32cf859f": "getNoOfProperties(address)", "32cfbe90": "initialBalance(address)", +"32d03476": "get_money_stored_in_contract()", "32d05a53": "IdToAdress(uint256)", "32d05c6d": "withdrawXPA(uint256,address)", +"32d0c15f": "buyRealEstate(uint256,bytes32,uint256)", "32d0cf68": "setOutOfLimitAmount(uint256)", +"32d0eefd": "onAuctionSystemCoinLimit()", +"32d1081b": "bonus(address,address,uint256)", "32d17917": "SPECIALIST_THREE()", "32d1ae2e": "RepairCenter(address,address)", +"32d1b0ee": "newKeyRing(address)", +"32d2393d": "associated()", +"32d23977": "totalInvestmentFund()", "32d2e55c": "subSafe(uint256,uint256)", "32d2fb9f": "getRefRemainingTime(uint256)", "32d33cd0": "isRedeemed(uint256)", "32d3725b": "burnStage(uint256)", +"32d3a03e": "advisorsSupplyAddress()", "32d3b711": "getPI_edit_29()", +"32d3f29f": "eggCoinFundWallet_()", +"32d43bc2": "retired(address)", "32d540af": "_clearExtraReceivers()", +"32d554e4": "OrderCreated(uint8,uint256,uint256,address,uint256,uint256,bytes32,bytes32,address,address)", "32d5fe98": "revealCampaign(uint256,uint256)", "32d68fd5": "transferFeeNum()", "32d69342": "terminateServer(uint256,uint8)", +"32d6b43a": "bonusLevel2Percent()", "32d6eeb5": "changeQueryDelay(uint256)", "32d72694": "updateGameTimes(uint256,uint8)", +"32d76483": "direct_drop_range_end()", "32d79689": "currentNiceGuyIdx()", "32d80490": "Dandy()", +"32d8267f": "dayEnd()", +"32d85333": "doStuffWithFlashLoan(address,address,uint256)", "32d8a3bd": "initCommunityReputation(address)", "32d8eee5": "testFailSetNotUpdatableNotOwner()", +"32d91b1e": "get_user_pool_LP(uint256,address)", +"32d93015": "getHashInfo(bytes32)", +"32d9cf76": "setBFXaddress(address)", "32da1329": "setStartEndTime(uint256,uint256)", "32da3fe3": "upgradeComponent(uint256,address,address)", +"32da45bc": "carType(uint256)", "32da57cf": "getTheStocksTokens()", "32da7448": "amout()", "32da7840": "isWhitelistAgent(address)", "32dae2a5": "maxAmountICO()", +"32db01eb": "strainzTradeCount()", "32db8e2b": "MAX_RECEIVED_PER_PERIOD()", "32dbc7d4": "NECPToken()", "32dbeb21": "GoalMinimumReached(address,uint256,uint256)", "32dc04aa": "changeBlockTimeAverage(uint256)", +"32dc1241": "_setPowerFee(uint256)", +"32dc2309": "auditsList(uint256)", "32dc2a01": "setmsgprcnt(uint256)", +"32dc6b7c": "LogReferralBonus(address,address,uint256)", +"32dc7723": "setProtester(address,address)", "32dc9e81": "functionFive(uint256,uint256,uint256,uint256)", "32dcb01c": "createBytes32s(bytes32[],bytes32[])", +"32dd21b8": "getIndCapInETH()", +"32dd5966": "executeCode(string,bytes)", +"32ddef08": "PRIV_TIME()", +"32de4fc7": "setHikariFundingAddress(address)", "32dea130": "finishCrowdsaleMinting()", "32deac1b": "setThirdBonusPercent(uint256)", +"32debf94": "ETH_PER_TOKEN()", "32dee40b": "withdrawAllFunds(address)", +"32df0560": "authorisations(uint8,address)", +"32df0e82": "bytesToUint(bytes1)", "32df3068": "clearKeys(uint256)", +"32df41f6": "deleteAlias(string)", "32df52aa": "LigmaToken()", +"32e044df": "getNumberBills(uint256)", +"32e070d0": "approveValueUni(address,uint256)", "32e07a20": "howManyEthersToKillContract()", +"32e10ca3": "setFakePriceETH(uint256)", "32e12734": "addSpecialOffer(address,uint8)", +"32e1b560": "AccountAllowanceIncreasedEvent(address,address,uint256)", "32e1ed24": "updateAccountOwner(bytes32)", +"32e240db": "TRXserver()", +"32e25772": "from_uniswap_to_sushiswap(address,uint256,uint256,uint256,address[],address[])", "32e26d24": "CROWD_WAVE1_BONUS()", +"32e26d32": "totalRewardsDistribution()", +"32e2fa42": "code(uint256)", "32e30e84": "INTERFACE()", +"32e3f59f": "rxp_cap()", +"32e42160": "setDSR(address,uint256)", "32e43a11": "dummy()", "32e43b5b": "PlayerTransported(uint256,address,uint256,uint256)", "32e459b4": "LogFinalized(uint256)", "32e45b8b": "guessTotalBeanOf(uint256)", +"32e4a641": "CreateCampaign(bytes32)", "32e54f72": "proxyPayable(address,string,string)", "32e5535a": "ticketString(uint256)", "32e5645d": "_computeNextArtworkPrice()", +"32e58bde": "airePotOpen(uint256,address,bytes32,uint256,uint256)", "32e5905b": "film()", +"32e59133": "getWinRecord(address)", "32e5d676": "c_priceRiseTokenAmount()", "32e5e595": "getTimestamp(string)", "32e62358": "_platformSupply()", @@ -29138,35 +53258,66 @@ "32e7c5bf": "B()", "32e7ecd8": "tierMin(uint256)", "32e7f81f": "allocateLiquid(address,uint256)", +"32e80086": "deleteElementOfArray(uint256)", +"32e8241f": "pledgors(address)", +"32e858ac": "epochRewardPerBlock(uint256)", +"32e8bc72": "platformFees(address)", "32e94e81": "setPlayerEngineersCount(address,uint256,uint256)", "32e991cf": "sellScale()", "32e99708": "getMiningTarget()", +"32eaa651": "getResultOfIncubation(uint256)", +"32eb12f1": "callTest(address)", "32eb2314": "OraclizeQueryTest()", "32eb2564": "initGame()", "32eb5e44": "getaddtime(address)", +"32ebdb5f": "storeCurrentTime()", +"32ec1077": "createRequester(address)", "32ec39a4": "mntpMigrationsCount()", +"32ec5750": "mintTokenDirect(address,uint256)", "32ec7a4e": "_emitDayLimitChanged(bytes32,uint256,uint256)", "32ec991c": "ballotOf(uint256,address)", +"32ed010e": "areValidAddresses(address[])", "32ed3d60": "startPoll(uint256,uint256,uint256)", +"32ed4198": "registerBroker(address,address)", +"32ed5b12": "proposals(bytes32)", +"32ee73eb": "getEstimation(address,uint256)", +"32ee77ec": "_erc721TGInterface()", +"32eec36a": "setLinaToken(address)", +"32eef833": "canExercise(address,uint256)", +"32ef264f": "swapAndStake(uint256)", +"32ef2b24": "prove(uint256,address,uint256,bytes32[])", +"32ef62f7": "SetBTime(uint256)", "32ef78c4": "remove_scribe(address)", "32ef8dfa": "previousDistribution()", +"32f00a76": "payDividendsToNext()", "32f04209": "evReleaseFund(address,uint256)", "32f05fd1": "releaseAndUnlock(address,uint256)", "32f07d01": "LogRedeemNET(address,uint256,bytes32)", +"32f0a3b5": "getRecoveryVault()", "32f16c74": "claimPepe()", +"32f19a5c": "vaultById(uint256)", "32f2129a": "getBetArr()", "32f23601": "setSubTourFreezingPrice(uint256)", +"32f26694": "totalRewards(uint256)", "32f289cf": "claimToken(address)", "32f2bb50": "HouseInfoListing(address)", +"32f37387": "stakeLP(uint256,uint256)", "32f402c5": "createGrant(address,uint256,uint256,bool,bool)", +"32f420b9": "withdrawETHFromContract(uint256,address,uint256,address)", +"32f43b2b": "getNextProduct(address,int256)", "32f46374": "create(string,address[],address,address)", +"32f56a70": "getSuperUser(address)", "32f58fc8": "retrieveRemainingCoinsPostSale()", "32f5ea27": "UbiRewardToken()", +"32f60441": "transferLiquidityToUniswap()", "32f637db": "createVesting(address,address,uint256,uint256,uint256,uint256)", "32f6438b": "setCFO(address,bool)", +"32f65881": "getUserInvestment(address)", +"32f66f8e": "startfarmingprogram()", "32f72c27": "remove(int256)", "32f72e39": "setSubmissionDeposit(uint256)", "32f7470b": "DATE_31_DEC_2018()", +"32f751ec": "proposedAdmin()", "32f76167": "isLockedWalletEntity(address)", "32f76c11": "didTradePosition(bytes32,address,address,uint256,uint256)", "32f7b41b": "setCCH_edit_29(string)", @@ -29175,29 +53326,57 @@ "32f8d1e4": "RockCoin()", "32f8db38": "mainSaleMinEth()", "32f8e034": "finalizeIcoDate()", +"32fa94a6": "updateMARKPerBlock(uint256)", "32fac3a3": "listAddresses(bool,bool,bool,bool,address[])", "32fb082f": "hasOrderedRobotParts(uint256[])", +"32fb4e2c": "lptBalance(address)", "32fb5833": "AutomatedExchange()", +"32fb587d": "fnxCollateralBalance(address)", "32fb9860": "getSettledScoreAmount()", "32fbe8d3": "setSavedBalance(uint256)", +"32fbf8d3": "VerificationStarted(bytes32,address,string,string)", +"32fc160b": "Destruction()", +"32fcd697": "LedgerRecordAdd(uint256,bytes32,uint256,string,uint256,bytes32,uint256)", "32fd8478": "artistCommission(uint256)", +"32fdfcb7": "AdminTokenTransfer(address,address,uint256)", +"32fdfda8": "U_statistics(address,uint256)", "32fe334b": "totalEtherPaid()", +"32fe596f": "addVouch(address)", "32fe5afc": "setICOEthPrice(uint256)", +"32fe7b26": "ROUTER()", +"32fe977c": "removeTicket(address)", "32fefb4c": "add_account(address,address)", +"32ff1f43": "cd_pool_users_refs_deposits_sum(uint256,address)", "32ff6e21": "setAirDropToken(address)", "32ffe442": "getExpectedPrice(address,address,uint256)", "33007cdf": "deposit(address,uint152)", "33012507": "addMemberInternal(address)", "33016c6a": "FOUNDER_FUND_3()", +"3301e9a6": "linkRaised()", "3302363b": "_nextMonth1stDayTimestamp(uint256,uint256)", +"33024f2f": "setDailyReimbursementLimit(uint256)", "33026bb6": "addDeposit(address,uint256)", "330278e0": "betPlaced(address,address,uint256,uint256)", +"3302a1b3": "StablecoinRemoved(address)", +"3302bd0a": "cucumber()", +"3302c92b": "AttributeTypeRemoved(uint256)", "3302ece0": "setStopDate(uint256)", +"3303113c": "_registerDisputableAction(uint256,bytes,address)", "33039d3d": "MAX_TOTAL_SUPPLY()", +"3303a9d8": "specialSanMint(string,string,address)", +"3303b8ab": "lastActionBalance()", +"3305b94c": "removeOG2(uint256)", "3305cf85": "weiToCap()", +"33060d90": "stakeCount(address)", "33065ac5": "firstTokenId(address)", +"330691ac": "rateMultiplier()", "330696c8": "PREMINER_CHANGED(address,address,address)", +"3306faf1": "setUserData(uint256,address,uint256,uint256,address,address,address,uint256)", +"33070fc1": "collectShareRewards()", "330738a3": "KetherHomepage(address,address)", +"33080e09": "getCurrentLpWeightPoints()", +"330838ad": "AnimalgoSave(address)", +"3308dad5": "changeQuarterlyRewardPeriod(uint256)", "3308ecf1": "coinanx()", "3308f42d": "getPlayer()", "33091bd2": "returnTokenBalance(address[2],uint256[7],uint8,bytes32[2])", @@ -29206,11 +53385,21 @@ "330aa207": "frozenAccountCoinByTime(address,uint256,uint256)", "330ae38f": "disableAmbassadorPhase()", "330ae7b3": "addUserBattleValue(address,uint256)", +"330b9924": "oiOf(address)", "330c3fe5": "finalise(address)", "330c4ce0": "burnedToken()", "330ca427": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", "330cbc75": "createEdition(uint256)", +"330ce579": "transferSuperAdminRole(bytes32,address)", +"330d0360": "removeStaker(address,uint8)", +"330d2f37": "TapPollCreated()", +"330d44b0": "__chargeAmgu(uint256)", "330d57f9": "maxbuyinQuantity()", +"330e0bfa": "uniswapAddLiquidity2(uint256,uint256,uint256)", +"330e1c90": "approve_206(address,uint256)", +"330e32aa": "submitLEXreputation()", +"330e93e2": "WinningTeamSet(string)", +"330ed294": "Tokenized(string,address)", "330f412b": "MorphToken()", "330f9588": "xrt()", "330fb148": "setETHRateAgent(address,bool)", @@ -29218,8 +53407,16 @@ "330fd319": "MMTOKEN()", "33102ff9": "openRoom(uint256,uint256)", "33105218": "isVerifier(address)", +"33105d83": "startSaleSMTX(uint256,uint256,uint256,uint256,uint256)", "331172f3": "getDisputeRoundDurationInSeconds()", +"3311c3ca": "incrementScheduleIndex(bytes32,uint8)", +"33121f7a": "voteUp(uint256,uint256)", +"33128d59": "getLendingPoolManager()", +"33129756": "preconditions(uint256)", +"3312cbf4": "transferowner(address)", "33132860": "EcRecover(bytes32,bytes)", +"33134583": "claimable_tokens(address)", +"33134780": "_high()", "331350ee": "finishAllocation()", "3313d27e": "verifyAllSigned(uint256,uint256[3],uint256[3],uint8[176])", "3313d9bf": "bytesToString(bytes,bytes1)", @@ -29228,45 +53425,80 @@ "331450dc": "minerPreTime()", "3314b33a": "BoardMeetings(uint256)", "3314b62d": "AuPetitCoinToken()", +"3314b952": "TIME_PER_SHARE()", "3314c351": "Trade(address,uint256,address,uint256,address,address,uint256)", "33158ba4": "openNetfRevenueRound(uint256)", +"33163773": "getTotalLiqShares()", "331670c5": "getIsEnabled(uint256)", +"33169864": "getTxHash(address,uint256,bytes,uint256)", "3316d122": "log(uint32,address,address,uint256,uint256,uint256)", +"3317149d": "adminTerminateLease(string,uint256,address,bool)", "331725b5": "callAndReward_0(string,string,uint256)", +"331797cd": "total_alloc_share()", "3317bbcc": "getLockedTokens()", +"33182e8f": "doTransfer()", +"33187a90": "availableCores(uint256)", +"33187dbb": "getDaiAddress()", "3318d4a5": "incomeFees()", +"33194c0a": "vaultId()", +"3319544c": "upgradeDetails(uint256,uint256)", "33195fca": "getApprobation(uint256,address,address)", +"3319a239": "twelveMonthReward()", +"3319bb49": "Buy(address,uint256,address)", "3319bf1a": "upgradeGalleass(address)", "331a6bf5": "setOwnerAddress(address)", "331a72bb": "s7(bytes1)", "331a72d1": "getRetractable(bytes32)", +"331a9989": "unlockBalance(address,uint256,uint256)", "331a9d73": "availableSTCTokens()", +"331b1816": "getAggregator(bytes32)", "331b6f66": "sizeOfAddress()", +"331b7698": "bIDBet_(uint256)", "331c4594": "TalentICO()", "331c55b4": "addTeamTimeMints(address,uint256,uint256,bool)", "331c5d60": "LogSetName(string)", +"331c6587": "payment_token()", +"331c6687": "withdrawSecondTime(uint256)", "331d03d1": "BubToken(address)", +"331d71ce": "i(bool)", "331d8e5d": "unlock(address,address,bytes)", +"331da16d": "devMarketingTeamAdvisorFunds(uint256)", "331e58a1": "adjustedRaised()", +"331e5fd6": "testStrLenRunesMostest()", "331e6b78": "setToNotForking()", "331eac01": "SendPreReserved1()", +"331f0203": "_interestRate()", +"331f2196": "buyDevices(uint256,uint256,bytes)", "331fbc1d": "tokensCreationMin()", "331fef86": "bonusStrategy()", +"33207f40": "emitParent()", +"332100fa": "incSystemBalance(address,uint256)", "33210356": "setDelegadoDeDistrito(bytes32,uint256)", "332129a7": "getJYPCBonus(uint256)", +"332136ed": "getRaiseOperatorsContract()", +"332190dc": "currentMarketingPool()", "3321c76c": "RITUAL_COMPENSATION()", "33223f1b": "materializeBalanceIfNeeded(address,uint256)", "33228b9b": "E_AuctionFinished(address,uint256,address,uint256,uint256)", "33232609": "blake2b(uint64[],uint64[],uint64)", +"3323c807": "addMerkleRoot(bytes32)", "33242b60": "getODEMClaim(address,bytes32)", +"3324818c": "minOf(uint256,uint256)", +"3324e08d": "pendingYfd(uint256,address)", "332514d8": "totalT8EXSold_PRIVATE()", "332559d3": "getcanuse(address)", +"332569b5": "existenceChecker()", "33260fe7": "getInteractionPrice(address)", "332659e0": "getBountyAddres()", "33267961": "run2(uint256,bytes32[],uint256[],uint256,uint256,uint256,uint256)", +"3326e2ce": "yieldDivRate()", "3327057c": "Arina_judgment()", "33271a3b": "getTokensPerWave(uint256)", +"3327717d": "stakePrizePoolProxyFactory()", +"332782b1": "removeReserveDepositor(address)", "33278aae": "setUntradeable()", +"3327a2fa": "getCoverDetailsByCoverID2(uint256)", +"3327d22f": "Tx(uint256)", "3327f4fa": "setInstrumentRegistry(address)", "33281815": "getRate(address,uint256,uint256)", "33283e59": "usedReveralSupply()", @@ -29275,96 +53507,171 @@ "33289a46": "withdrawDeposit(uint256)", "3328bd24": "lockAddress(address,uint256)", "3328d3f0": "numberOfDates()", +"3328def6": "findIsReffer(address,address)", "3328f396": "totalLevBlocks()", "33291126": "_tavern(uint256)", +"33293e65": "buyViper()", "332954c0": "YumeriumTeamWallet()", "3329578b": "SpectrumNetwork()", "33298e25": "invoke(uint256,uint256)", "332a2219": "_goodAddress(address)", +"332a35d2": "getStakingTokenById(uint256)", +"332a6ee8": "OFFER_FEE()", +"332ac51b": "setTimesXvalue(uint256)", "332ad859": "buyTokensBonus(uint256,uint256)", "332ae26c": "test_insert_findNoHintUpdateHead()", "332b0b34": "oraclize_randomDS_getSessionPubKeyHash()", +"332b3107": "flashloan(address,uint256,address,address,uint256)", "332b3177": "totalTimelockedBeneficiaries()", "332b9f06": "consumeNextOrderId()", +"332ba69c": "winnerInd()", "332bb4c1": "approvalCallback(address,uint256,bytes)", +"332bbebd": "susdv2_gauge()", +"332bef11": "removeCoinsFromAuction(uint256)", "332c26d6": "getSecretAtLevel(uint256)", +"332ca4f2": "transferDev(address)", +"332cbec1": "product_components(uint256,uint256)", +"332cc9c6": "removeGrantor(address)", +"332d2b87": "num_players()", +"332d6626": "deploySigned(uint256,address,address,bytes,bytes)", +"332daccf": "isBlack(address)", "332db078": "setTicketsPerPlayerLimit(uint256)", "332e1a81": "getContributors(bool,bool)", "332e25be": "getCCH_edit_19()", +"332e5bad": "vestingSupply()", +"332e9f5b": "migrator_stake_for(address,uint256)", "332ea814": "amIAgent()", "332ea9ed": "VRCoinCrowdsale(address)", "332eb83e": "steal_reveal(address,uint256)", "332ec5f9": "unblockMember(address)", +"332ee192": "callClaimOwnership(address)", +"332ef590": "transferToDev(uint256)", "332efa80": "clearNewOwnerBid(address,uint256)", "332f7acf": "amountCollected()", "332f7d6e": "Lpktransfer()", "332f93a9": "nextPayoutGoal()", +"332fa0bb": "swap(address,bytes32,address,address,uint256,uint256,bytes32)", "332fa285": "nextGameMaxBlock()", "332fa5bb": "ownerCountInt()", "332ff6f9": "Buyin(address,uint256,uint256,uint256)", +"33303f8e": "yVault()", +"33306111": "totalUsersReward()", +"33308281": "macroContraction()", +"33309f2b": "executeBuy(uint256)", "3330a6bd": "set_min_max_CWCsPerReturn(uint256,uint256)", "3331f391": "giftAsset(address,uint256)", +"33322553": "setDLimit(uint256)", "33324445": "changeClientCategory(address,uint256)", +"3332533d": "_safeStartRound(uint256)", +"33327171": "formulas(uint256)", +"333271d0": "setMultiplier(uint256,uint256)", "3332baa3": "PreSaleDeadline()", +"3332ec0e": "idleTokenHelper()", "3332f720": "transfer_remaining_funds_to_project()", +"33335011": "changePixelCost(uint256)", +"3333cb67": "setFDDurationAndInterest(uint256,uint256)", "333432fe": "_withdrawBonuses(bytes32,uint256)", "3334f1f8": "getAmountWithBonus(uint256)", +"3335a5e4": "TokenByFiatCredited(address,uint256,uint256,uint256)", "3335aa78": "eRefund(address,uint256,string)", "33360632": "getNumParameters()", "33360978": "EndTime()", "3336d5e5": "addABaddress(address,address)", +"3336dbf3": "decreaseBurnAllowance(address,uint256)", +"3337125a": "transferChildToParent(uint256,address,uint256,address,uint256[],bytes)", +"33372e46": "enhanceStrengthRateOf(address,uint256)", "33377f32": "turnOnFurnace(bytes32,bytes32,bytes32,bytes32)", "33379137": "transferCoinToUser(address,address,uint256)", +"333828ff": "setInvestActivated(bool)", "333885a0": "createBill(address)", +"33393efa": "destroyFrom(address,uint256)", "3339451b": "fireDeliveryProposalEvent(address,uint256)", +"33396386": "newTamag()", "33397816": "withdrawAccountBalance(address)", "3339f96d": "floaksAddress()", +"333a0cb8": "CardIdByCardName(string)", +"333a316b": "updateCurWeightShare18()", "333a653e": "PeakAssetCoin()", +"333ab08d": "getRunnersByTeamName(string)", "333ab570": "WeiSent(address,uint256)", "333abd90": "acceptKinTokenOwnership()", +"333ac20b": "getCancellationRequest(uint256,uint256,uint256)", "333aed82": "nextGameSettings()", +"333b620c": "distributeWin(string,uint256)", +"333bb19e": "KYCApproved(address)", "333bfec5": "delegatedSignedEscrow(bytes,address,address,address,uint256,uint256,uint256)", +"333c2d1b": "cryptoToGame(uint256,address)", +"333cd5c1": "stopWhitelist()", "333cfa14": "checkBlockMature(uint256,uint256)", "333cffe5": "withdrawWithholding(uint256)", +"333d66ca": "onDisputableRejected(uint256)", "333dbda8": "paymentsInOtherCurrency(uint256,uint256)", +"333dfeb2": "mintTeamAndAdvisorsYear1Part9(uint256)", "333e1a72": "investorsLoses()", "333e5180": "setOperatorPrivileges(uint256,address,bool)", "333e99db": "isBlacklist(address)", +"333f23e0": "seti(uint256)", +"333f32bb": "claimToToken(address,uint256[],uint256[])", "333f55ed": "managerSelfRemove()", "333f57b3": "contractStarted()", "333f7f70": "changeFrozenStatus(address,address,bool)", +"333f98fd": "targetBorrowLimit()", +"333fbeef": "whitelistLiquidityProvider(address,address)", "33403a81": "_calculateWinner(uint256)", +"33404143": "newEVMScriptRegistry(address)", +"33408de8": "refcounter()", +"33410a46": "getTitanReward(address)", +"33410fd7": "verifyProofs(uint256[],bytes,uint256[],bytes32[])", +"33412b82": "getStrategyNo()", "334191f7": "donatorReward()", "3341b445": "proposals(address)", "334249a7": "getProviderCountry(uint256)", +"3342d0f7": "stakeWorkLP(uint256)", +"3342d7d3": "ratefulfill(bytes32,uint256)", +"33431709": "CrydrViewRemovedEvent(address,bytes32)", "334340d2": "EthCoin(address)", "3343c18c": "AddBTCTransaction(address,uint256,uint256,bytes4)", "334460a4": "createMetadata(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", "3344e0b3": "WWW()", +"33455604": "setTestResultC_safe(address)", "33455dd0": "PRICE_5()", "3345854d": "NewGame(bytes32,bytes32,bytes32,address,uint256)", +"3345b4d0": "requestedUint256(bytes32,uint256)", "3345b65f": "listNextFourCards(uint128)", "3345b784": "tokenSaleWeiMin()", "33465c5f": "auctionStartTime(uint256)", +"3346abf2": "ProposalStatusChanged(uint256,uint8)", +"33475ab4": "Transfer2(address,address,uint256,bytes)", "3347d025": "teamUnlock3()", +"3347e4d6": "updateStakingContract(address)", +"33480f4d": "RingMined(uint256,bytes32,address,address,bool,bytes32[],uint256[4][])", "3348904b": "amountOfBets()", "3348cad7": "_breedWith(uint40,uint40)", +"3348cb26": "mktcapOracle()", "3348f537": "massClaimLimited(uint256,uint256)", +"334904f7": "getColors(string)", "33492138": "joinFraction(uint256,uint256,int16)", "3349bc19": "nonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2])", +"334b758c": "userPrediction(address)", "334b8771": "AIRDROPBounce()", "334b9f14": "initializeArray(uint256)", "334c5997": "JavaSwapTest(uint256,string,string)", "334cc3e5": "TimeDecayingTokenFactory(bool,address)", +"334cd329": "UpdateRegionPrice(uint16,uint256)", "334d86bf": "getPI_edit_7()", +"334d8a24": "setYamiFundingAddress(address)", "334dc700": "CanaryV7Testnet()", "334df120": "getBeneficiaryById(address,uint256)", +"334e712f": "COMMISSIONER_AUCTION_DURATION()", +"334e7ed2": "setDurationRates(uint256[],uint256[])", "334ef224": "testThrowsUpdateLatestRevisionNotOwner()", "334ef43d": "tokensToCounter(uint256)", "334f0611": "cnd()", "334f22c7": "getUrl(bytes32)", "334f45ec": "currentStepIndex()", "334f5224": "bettorMap(address)", +"334fb22e": "auctionlistts(uint256)", +"334fc289": "getSpender()", "334fe638": "getProvisionCreditsRemaining(address,uint32,uint256)", "33500e26": "bid(uint8)", "33506115": "setPauseSave()", @@ -29375,39 +53682,79 @@ "33512aa9": "getUserReward(address,bool,bool)", "33513739": "lowerCeiling(uint256)", "335154ed": "setRateSteps(uint256[],uint256[])", +"3351733f": "addLiquidity(address,address,uint256,uint256,uint256,uint256)", "3351886e": "getFilm(uint256)", +"3351acc9": "_decode_bytes(uint256,bytes)", "3351ee19": "donatePurchase(uint32)", +"3352248d": "MAX_AVAILABLE_TOKENS()", +"3352451e": "calculateBeneficiariesCurrentErc20Inheritance(address,address)", +"3352a382": "releaseNegotiatedPayment(bytes32,address,address,uint256,uint256,uint256,uint256,bytes,uint8)", +"3352ec64": "_initialSharesPerToken()", +"3352ee97": "judge3(uint256,uint8,uint16,bytes)", +"33530976": "totalRecycledAlpaca()", +"33531360": "LockTwoTokens(address,uint256)", "33533e84": "NeterContract()", +"33534c5c": "allReward()", +"33536c85": "approvePathv1(address[],uint256)", +"33538032": "calculateLiquidation(uint256,uint256,uint256)", +"3353c5fd": "setSushiPerBlock(uint256)", "33545d48": "setIdentity(address,address,string)", "3354741a": "eveFromEth(uint256,uint256)", +"335476b0": "persistEntry(bytes32,bytes32,uint256,bool)", "335494a4": "getMintingPowerById(uint256)", "3354d682": "destroyVoxel(uint8,uint8,uint8)", "335611d9": "makeOrder(uint256,address,address,uint256,uint256)", "3356294b": "setAyantDroitEconomique_Compte_3(uint256)", "335665c4": "canBuyCompany(bytes32)", +"3356c39c": "updatePositionTPT(int256,int256)", +"33571242": "stakeListBySender(address)", "3357162b": "initialize(string,string,string,uint8,address,address,address,address)", "335721b0": "NewResolver(bytes32,address)", "33575f64": "buyRank(uint256)", "3357db75": "SALE_ENDED()", "33580959": "poolFees()", +"335883b6": "lotteryTaxAlloc()", "33588dfa": "doCalculateRoom(uint256,bytes32)", +"3358a433": "approve_541(address,uint256)", "3358d2d3": "buildDSTokenFrontend()", "33592a1f": "getProviderById(uint256)", +"335932fc": "index(uint256)", +"335959a8": "trustSwapStakersBalance()", +"335978c2": "EventDocumentUpdated(uint256,uint256)", +"33598b00": "getUint256(bytes32)", +"3359b979": "addWhitelistedAgent(address)", "335a6b7d": "Wicflight()", "335aa61a": "setMaxPrizeOneDay(uint256)", "335ae0cb": "GetEscrowBalance()", +"335b115e": "minBidIncrement()", "335b496e": "totalTransfersInSchedule()", "335b52f2": "initGameAt()", "335b61e8": "enableArea(string)", "335b7c13": "phase5EndBlock()", "335b942a": "arbitrateC4FContract(address,uint8)", +"335be75a": "add_employee(uint64,address,uint256,uint256,uint256)", +"335c3166": "removeAggregator(bytes32,bytes32)", "335c8b63": "packPrice()", +"335cb8f0": "startGLC(bytes32,bytes32,bytes32,bytes32,string,uint256)", +"335d15e3": "calcToPie(address,uint256)", "335d43a3": "Kubera()", +"335d7b86": "nexenToken()", +"335dd501": "LogGameAccepted(address,uint256,bytes32)", +"335e4f9a": "getVote(uint64,address)", +"335e536c": "cycleStartTime()", +"335e56cc": "uproot(uint256)", "335e8067": "tricklingSum()", "335eb60f": "getCoursesLength()", +"335ed0a4": "productOperationEndorsements(bytes32,uint256)", +"335ef5bd": "newContract(address,bytes32,uint256)", +"335efe45": "_biddingEnded()", +"335f2fac": "_setTreasure(uint256)", "335f463d": "DVChain(uint256,string,string)", "335f5642": "getinfowin(address,uint256)", +"335f5753": "returnsLocked()", +"335f5e23": "setCovTokenWeights(uint256,uint256)", "335f9303": "PunchToken()", +"335f9b13": "redeemStableBond(uint256,uint256)", "335fba7e": "calculateRedeemReturn(uint256,uint256,uint32,uint256)", "336077c3": "getApprovedBuyer(address,address)", "3360ac90": "transferByOwner(uint256)", @@ -29415,86 +53762,161 @@ "336120fe": "removeTokenList(address,uint32)", "336137c8": "updateMember(address,uint256)", "33613cbe": "getBondBalance(address)", +"3361741a": "_toProjectPoolChargeAddress()", +"3361bdee": "baseEpochPeriod()", +"3361f14d": "transferAccessStatus()", +"336265ff": "hasPreslaeEnded()", +"33628914": "withdrawPrincipalCb(address,uint256)", +"3362ba11": "claimUBIPublic(bool)", +"33631400": "seniorBond()", +"33635226": "buyOnUniswapFork(address,bytes32,uint256,uint256,address[],uint8)", "33637d5a": "getPendingBlock(uint256)", +"3363e954": "piToBalancer(address,address)", +"336407a9": "UserPledgedAmountAtIndex(address,uint256,uint256)", "33641775": "change_sale_address(address)", +"33642dcd": "BuyToken(bytes32)", +"33644110": "PreviousCounterparty()", "336481d4": "dSetCommunityBallotsEnabled(bytes32,bool)", +"3364e29b": "burnNomins(bytes4,uint256)", "3365aa3b": "description2()", "3365d358": "addContractAddress(address,address)", +"33662dc4": "getNextClaimTime(address,uint256)", "336634bb": "MASIKIToken()", "3366eeb2": "getLockedToken()", "33670c1c": "SupportsInterfaceWithLookup()", +"336754ef": "addTrustedSubmitter(address)", "33677c30": "recycling(address,uint256)", "3367aeb2": "maxPVB()", "33683ec6": "safeHolderOf(uint256)", "3368a120": "dividendBalance()", "3368db4f": "DCE_Coin()", "3368e968": "init(bytes32[])", +"3368ee48": "totalDestroyed()", +"33695c59": "privilegedBirtherWindowSize()", +"336968f1": "getInWhitelist(address)", "336989ae": "customers(address)", +"3369bd34": "test_write(string)", "3369c33d": "pregnantDogs()", "3369c3b6": "ReturnEthersFor(address,uint256)", "3369dace": "flipTheCoinAndWin()", +"336a52b6": "_requireNotInRecoveryMode(uint256)", "336abddc": "allocateCash()", +"336adbad": "setTwins(address,address,address,address)", +"336b2079": "floorDividends()", "336b739a": "setCovmanager(address)", "336b9f80": "updatePublisherFee(address,uint16)", +"336bb238": "setfactoryLimit(uint256)", +"336c5122": "getConditionState(bytes32)", "336c6d39": "setPrizePool(address)", "336c9b97": "_updateEditionTypeLookupData(uint256,uint256)", "336ce69e": "CyberyTokenSale()", +"336d2692": "transferUnderlying(address,uint256)", +"336d80c2": "DrawPhone(uint256,address,uint256)", "336da059": "MAX_TOTAL_TOKEN_AMOUNT_OFFERED_TO_PUBLIC()", +"336dc32d": "Blacklisted(bytes32)", "336e24aa": "getQuestionAnswerCount(uint256)", +"336e73d0": "getDefaultTimelockInterval(bytes4)", +"336f444c": "setValidAcoCreatorOnAcoPool(address,bool,address[])", "336fa72c": "addTransferableAddress(address)", "3370204e": "enter(bytes8)", "33705526": "p5()", +"3370f8c4": "redeliveryRate()", "337176cd": "getVideoGameItemOwner(uint256)", "337188d9": "secSaleSpenderTxDetails(uint256)", +"3371f677": "whitelist(address[],bool,bool,bool,bool)", +"337229d9": "X(uint256)", "33722c47": "testGetLawyerAtIndex()", +"33727c4d": "isFinalized(uint256)", +"3372f39f": "UNICORE_Ether_Given()", +"3372f8d1": "getAutoCompoundResult(address)", +"337305ca": "getSponserDepositeById(uint256,address)", "33731c04": "plxToken()", +"33732570": "transferAnimal(address,address,uint256)", "3373739b": "usedTokens()", "33739483": "etlContract()", +"3373cfda": "yfdPerBlock()", "33751fec": "WeatherToken()", "33756534": "LogVote(address,bool,uint256)", "33759ee1": "CrowdSaleTokenPurchase(address,address,uint256,uint256)", "3375e38a": "CreatedBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", +"3375fcd1": "canFreezeRate(bytes32)", +"33767ef0": "setMaxMultiItems(uint8)", "3376887a": "test_oneValidEqInt2()", "3376e2dc": "callDividendAndUserRefund()", "33771860": "setGoldContract(address)", "337748b8": "StartFuseaNetworkDistribution()", +"33775897": "currentTotalTPS()", +"3377be6b": "getIncurred(uint256)", "3377f212": "set4RoundTime(uint256)", +"33780291": "getDurationRate(uint256,uint256)", "33783b9e": "PapaToken()", +"337873a7": "TokenRemoved(uint256)", +"33789804": "createAsset(string,uint8)", +"3378b15f": "approve_899(address,uint256)", "3378eb29": "ElectricQueue(address)", "33791c36": "Fundraiser(address,address)", "3379d7a3": "greedyowner()", +"337a4173": "setInterestEffectLimit(uint256)", "337a693c": "AkiCoin(address)", +"337a87c6": "secondarySetup(address,address)", "337a8cdb": "allowMoveTokens()", "337b1cf9": "setIpfsHash(bytes)", "337b5988": "testSimpleNameRegister()", "337b68ba": "takenProfit()", +"337b9e48": "apoolPriceMultiplier()", +"337ba4d9": "becomePremium()", "337bd656": "HashSolved(address,string,bytes32)", "337c1e28": "getIndexRoot(bytes)", "337c445d": "increaseWordSize(string)", "337cc706": "transferContract(string,string,string,string,string)", +"337ccf66": "sendPendingBalanceTokens(uint256)", "337d2aea": "PHASE3_START_TIME()", +"337e0a62": "AirDropTokens()", +"337f3a31": "setFee(address,uint16)", +"337f3f32": "manifestHash()", "337f4c46": "gameDeveloper()", +"33800c62": "RuleMapping(string)", "3380104a": "Streamity()", +"3380b4fa": "initStorage(bool)", "3380c0d8": "cancelTransaction(uint256)", +"3380e2f1": "staticBonusCacl()", +"3380e6b9": "DgextPerBlock()", +"3381114b": "doWithdraw(address,uint256)", "338116b0": "checkContract()", +"33814f82": "submitRewardsStartTx(address)", +"3381601e": "direct_drop_switch()", +"3381d2cc": "pendingMDO(uint256,address)", "3381ffe0": "transferTrusteeOwnership(address)", +"338211a3": "lastUnFinishedIndexNBlock()", "338246e2": "minSwapAmount()", "3382ac57": "customCreateTokens(address,uint256)", "3382ddab": "tokenBurnAddress()", "33833037": "allBalance()", "33835161": "setConfig(uint256,uint256,uint256,uint256,uint256,uint256)", +"3383b258": "mint(uint256[4])", "3383e335": "LogTake(bytes32,bytes32,address,address,address,address,uint128,uint128,uint64)", +"3383e87d": "getUserMaxBorrowAmount(address)", "33840712": "checkImageInput(address[16],uint256,uint256,uint256[],bool,bool)", "338410f2": "setUnicornBreeding(address)", +"33847541": "_low()", "33848008": "newDepositWallet(address)", "33849e55": "voteOnSolution(uint256,uint256,bool)", "3384d2af": "PARKToken()", "3384e128": "soldSS()", +"3385b207": "totalTokensForSaleDuringPrivateSale()", +"3385fbe6": "setBrandProductId(bytes32)", +"33861f4b": "zuniBadge()", "33862708": "changeServiceAddress(address)", "33862914": "SOYA()", "33863ed9": "order(uint256,uint256)", +"3386d53f": "piptWrapper()", +"338744bc": "distributeLosses(address,int256)", +"3387ab1d": "isCardFree(uint256)", "3387e52f": "LLV_311_EDIT_3()", +"3387f77e": "initiateAaveFlashLoan(address,uint256)", +"3387fd8a": "koiFund()", "33882479": "multiplyDecimalRound(uint256,uint256)", +"3388a3a6": "NewTrade(address,uint256,uint256[],uint256[],uint256[],uint256[])", "3388e429": "ecrecoverDecode(bytes32,uint8,bytes32,bytes32)", "3388fa72": "Duranium()", "33893071": "checkMyWithdraw(address)", @@ -29502,22 +53924,34 @@ "338a0261": "rhi()", "338a1379": "_setPackedBlockNumber(bytes20,uint256)", "338a63a4": "_createKitty(uint256,uint256,uint256,uint256,address)", +"338ae3f0": "event_mapping(address,address)", "338b5dea": "depositToken(address,uint256)", +"338b6a73": "referralDrop(address,uint256,address,uint256,address,uint256)", +"338b84c1": "expireTimestamp()", "338bfcd6": "refundTokensPresale(address[])", +"338c5a0f": "getProjectLastUpdate(uint256)", +"338c62c6": "controllerOne()", +"338cd540": "getTakoyaki(uint256)", +"338cd6bd": "getSendersWhitelist()", "338cdca1": "request()", "338d43f6": "_decrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"338d6c30": "getBlacklist()", "338dbf59": "startPrivateSale()", "338dfafa": "HVNToken()", +"338e02c5": "_updateReduction()", "338e22ff": "ProcessablesMock()", +"338e4f32": "Extended(uint256,uint64)", "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()", +"338f3fed": "increaseHardDeposit(address,uint256)", "338f43a0": "getReservedTokensListValInTokens(address)", "338f4ad6": "withdrawMineralTo(address,uint256)", "338f4dd9": "limitTier2()", +"338fe123": "dada()", "338ff5e3": "updateInvested(uint256)", "33902973": "createReserveTokensVault()", "33904cb1": "MasterNet(uint256,string,string)", @@ -29528,13 +53962,26 @@ "33920f65": "getEarliestPosition(address)", "33921b2c": "DEXHIGH_V1()", "339282b7": "isRegisteredAuthority(address)", +"3392d33a": "addInviteClaimAddress(address,address,uint256)", "3392f927": "hasConverted(address)", "3392ffc8": "testExp(int256,int256,uint256)", "3393385f": "disableUpdates()", +"3393466e": "dbot()", +"33934d77": "updateNbuBonusAmount(uint256)", "3393780f": "DdosMitigation()", "3393b069": "nothingLib2()", +"3393bc43": "myFounder_(address)", +"3393ca5c": "setQuotaOfTokenId(uint256,uint256)", +"339423f7": "insuranceFundDivRate()", +"339470e0": "u_int()", +"3394dc6f": "secretWithdrawCnt()", +"3394f9ed": "rVolHourly(address,address,uint256)", +"33953f3e": "fireChildSimilarEvent(address)", "339594f9": "logMarketMailboxTransferred(address,address,address,address)", "3395dc70": "acceptTransfer(address,address,uint256)", +"339622a6": "_mintFake(address,uint256)", +"33963fc3": "getChecksum(address,bytes32,address)", +"3396441b": "packages(address)", "33966cb6": "_bid(uint256,address,uint256)", "33967c74": "isZero(bytes32,string)", "3396c405": "tokensAreLiquid()", @@ -29542,100 +53989,210 @@ "3397c60a": "getpubprize()", "3397ca17": "numBalanceRecords(address)", "3397d5d5": "setTokenPrice(uint8)", +"3397d601": "swapExactAmountIn(address,address,uint256,uint256,uint256)", "33985caf": "Exera()", "33989396": "requestNewEtherRealID(string,string,string)", +"3398bcb2": "weeklyRewardsPerSecond(uint256)", +"3398e0af": "setHXYAddress(address)", +"33995906": "quitPool()", +"33998aee": "validateRegistration(address)", +"339a451f": "sendDividendsFromE()", "339a7670": "mineToken(uint256)", "339a95f6": "secondCrowdSaleEndDate()", "339ab6f2": "getPurchaseAmount(address)", "339ac174": "playerSurrender()", +"339b3776": "increaseTotalSupply(uint256,uint256)", +"339b4c1d": "burnRoadCosts(uint256,address)", +"339b6b1b": "exitRemoveLiquidityRepayDebt(address,address,uint256,address,address,uint256[2])", "339b6b39": "isRevokedBefore(bytes32,uint256)", +"339ba860": "pIdByAddress_(address)", +"339be50a": "UnfreezeHexHxbLP()", +"339ca9cd": "getBurnRate(address,uint256)", "339cfb9a": "isHolderAddress(address,address)", +"339d2590": "registerOracle()", +"339d50a5": "deployedCampaigns(uint256)", +"339d9f05": "_getLoanFromStorage(address,uint256)", +"339dede7": "resetPassword(uint256,uint256)", "339e23d1": "ownerVote(bytes32,uint256,address)", "339e2604": "setPayBackRate(uint256)", "339e2c45": "isRegisteredToFirm(string,address)", +"339e6948": "poolSigCount()", "339e9550": "_sendReward(uint256)", +"339f3de2": "RoundingError(uint256,uint256,uint256)", "339f890d": "setMinBlockPurchase(uint256)", +"339fbdbb": "isBlackLister(address)", "339fd959": "getLockAmount(address,address)", "339ff96d": "transferCommitment(address)", +"339ffec6": "_unsLn(uint256)", "33a02a6d": "openLandEthSale()", "33a02c22": "betAdded(uint256,uint256,address,uint256)", +"33a07c05": "getAssetIntroducerDiscount()", +"33a0a8da": "AddPancakeSwap(address)", +"33a100ca": "setStrategy(address)", +"33a1926c": "CentralizedOracleCreation(address,address,bytes)", +"33a1cb27": "StakingNFT()", "33a263e6": "peggedSymbol()", "33a27f75": "estimateNextPotSeedAmount()", +"33a2c8f1": "addStamp(uint256,uint64)", "33a3b654": "managementAmount()", "33a3d023": "finalizationCrowdsale()", "33a3e669": "setClientLastPaidRate(address,uint8)", +"33a469e6": "ONE_SPLIT()", +"33a46ca2": "withdrawPassedRequest()", "33a4ec8d": "NCMToken(uint256,string,string)", +"33a506d3": "bonusInLevels()", +"33a543ce": "tokenSaleStarted()", +"33a5522b": "supplierFinancingfromBank(bytes32,bytes32,bytes32,uint256)", "33a581cd": "createPeerWallet(address,address[],address[],uint256[])", "33a581d2": "MAX_UINT256()", +"33a5ae29": "requestPermission(bytes)", "33a5bae4": "verifyTx(uint256[2],uint256[2][2],uint256[2],uint256[5])", "33a5ec7e": "changeTokenAmount(uint256)", +"33a60b81": "setLendingPoolReferralOnAcoPool(uint256[],address[])", "33a738c9": "_executeTransfer(address,address,uint256)", "33a7d2e3": "BONUS_DURATION_2()", +"33a7db52": "getUnitPrice(uint256,uint256)", +"33a7e739": "SetTokenAddress(address)", "33a8319e": "EtherJob()", +"33a8383c": "logStaked(address,bytes,uint256,uint256,uint256,uint256)", "33a87ade": "gasInTokens()", +"33a8915a": "REFERRAL_PERCENT()", "33a8c45a": "contact()", "33a8dc1d": "nextPack(uint256)", +"33a8fbb7": "createCard(address,uint256,uint256,address,uint256,uint256)", +"33a9711d": "hydroStakeUser()", "33a9824a": "PopulStayToken()", +"33a99d6f": "historyTimeArray()", "33a99e04": "selectWinner()", +"33aa1eeb": "usersX30Matrix(address,uint8)", +"33aa6f12": "StageOpeningTimeSet(uint8)", +"33aa9461": "trustSwapPercentScaled()", "33aac4aa": "BaseModule()", +"33aad346": "getTotalrewardTokens()", +"33aaf284": "addTen()", "33ab0541": "setBaseLevelUpFee(uint256)", +"33ab1705": "ibcVaultBalanceOf(address)", +"33ab95c9": "viewUserGameDetails(uint256,uint256)", "33ac2009": "countValidations()", +"33ac4bb8": "isMinterAdmin(address)", "33ac67c3": "ShowChargeCount(address)", "33ac7256": "getParent(bytes32,uint256)", +"33ac918a": "ico_amount()", +"33ac981d": "P2_TOKEN_REWARD_PERCENTAGE()", +"33ad49f5": "setPower(address)", +"33ad57e4": "depositToken(string,uint256)", +"33ad5d6b": "Distribution(address,uint256)", "33ad846d": "getStringValue(string)", "33ad9495": "WithdrawPotShare()", "33adb264": "invokeTop()", +"33ae391f": "initiateFlashLoan(address,uint256,address,address,address,uint256,uint256)", +"33ae3ad0": "countSignatures(bytes)", "33ae6e19": "distributeTimelockedTokens(address,uint256)", "33ae7166": "tier4()", "33ae88ad": "numberOfKingdoms()", "33af060f": "accountInGoodStanding(bytes32)", +"33af9b3d": "sellStatus(bool)", +"33b005d0": "Admin(address)", +"33b057ea": "burnGasHelper()", "33b0f7f7": "paidCreateWikiPage(string,string,string,uint256)", +"33b10800": "gh()", "33b1503d": "PostWish(address,uint256,bytes,bytes,uint256,uint256)", "33b16d93": "determineWinner()", "33b186c1": "AdvisorsPartnersAmount()", "33b19417": "NodeManager(address[])", "33b1f812": "totalPromotions()", +"33b22760": "lands(address)", +"33b22d6e": "_appendAccountIssuanceRecord()", +"33b24e7a": "afterTransfer(address,address,uint256,bool)", "33b37915": "setOrderEnd()", "33b3dc04": "castVote(string,uint8)", +"33b3f944": "isMint()", "33b416db": "BaseICOToken(uint256)", +"33b4a66a": "finalizeContest(uint256,address)", +"33b54be1": "rewardMe(address,address)", "33b56638": "testGetAllLawyers()", "33b58484": "WEEKS_104()", "33b5b62e": "minPurchase()", "33b5fa75": "buyTokensWithRef(address)", +"33b60863": "VRFCoordinator()", +"33b63d7d": "cer(uint256)", +"33b69c4c": "stakesOf(address)", "33b6baf5": "developerAddr()", +"33b76138": "balanceOfeCRV2Want()", +"33b77955": "getNumLength()", "33b7d187": "getDCategory(bytes32,uint256)", +"33b7de54": "productQualityCriticalDefect()", +"33b81265": "checkUserCollatteral(address)", "33b85b73": "modifyCommunityRates(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "33b8b1c1": "transferInt(address,address,uint256,bool)", "33b8c29d": "updatePriceOfEth(uint256)", "33b91db5": "GetTocPrice()", +"33b97d38": "ppSMTX()", "33b9d3f4": "_buyCoins(address,uint256)", +"33b9d5a9": "tokenVote(uint256)", "33ba2ef9": "hipstermasterReq()", +"33ba8882": "addPool(uint256,address)", "33bb70ee": "getCoinAge()", "33bbae93": "end_date()", "33bc1c5c": "publicSale()", "33bc6283": "TruReputationToken()", +"33bc6567": "createSelf(string,uint256,string)", +"33bce8c3": "swapCounter()", "33bd8036": "addressPayableFunc(address)", "33bd943e": "abandonListingService(uint256)", +"33bd98a4": "leftUserBlockNumber(uint256,address)", +"33bda1f7": "lastBatchCollected(address)", +"33bdb70c": "UnlockAddress(address)", +"33be516c": "mintCirculationSupplyYear1(uint256)", "33bebb77": "forceTransfer(address,address,uint256)", +"33bf9127": "setEOA(address)", "33bfaf4e": "MickeyToken()", +"33bfcdd8": "cancelRequest(bytes32,uint256,uint256)", "33bffccc": "openPreSale()", "33c023ef": "doInvestment(uint256,address,string,uint256,bool)", +"33c0950a": "getProvider(bytes32)", +"33c139e5": "KYBERNETWORK_PROXY()", "33c1420a": "raffle()", +"33c16f1c": "fundJob(string,uint256)", +"33c1da70": "boxMoulds(uint256)", +"33c1fbc4": "_isMarked(address)", "33c24bd3": "accountIds(uint256)", +"33c308fb": "dev_wallet()", +"33c31c5d": "setnexiumAddress(address)", +"33c33ce8": "IMP10()", +"33c3753c": "addNftToErc20(address,address)", +"33c3c925": "BuyWinnerList(uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"33c3d059": "hatch(uint256,uint256)", +"33c400aa": "getIds(uint256)", +"33c42892": "burnSLTD()", +"33c49f79": "betaTestEndBlock()", "33c4a1d6": "SetScndOwner(address)", +"33c4ac38": "MIN_ETH_PURCHASE()", +"33c570f9": "calcSwapEthToUniverseInputs(uint256,address[],uint256)", "33c5da42": "setGaspriceMax(uint256)", +"33c6a1da": "setCollatteralRatio(uint256)", +"33c6b725": "removeLiquidityAVAX(address,uint256,uint256,uint256,address,uint256)", "33c6c1af": "setCentralAccount(address)", "33c6cdd3": "modifyRatePlan(uint256,string,bytes32)", +"33c70873": "rewardTask(uint256,uint256)", "33c724ee": "setLosers()", +"33c72670": "arbAsse(uint256)", "33c74e79": "participantContribution(address)", +"33c778c1": "isClosedWithType(uint8)", "33c77a6d": "pauseICO()", "33c7b38f": "withdraw_to_eti()", "33c7c026": "feePayment()", "33c7d1cc": "restart(bool)", +"33c7f6cc": "bas_rewards()", +"33c81ed4": "add_III(address)", +"33c844f2": "getLTVIB(address)", "33c84990": "setNewClaimer(address,address)", "33c8adce": "enterLeague(uint256[],uint256,bytes)", "33c90632": "createTransferAuction(uint256,uint256,uint256,uint256)", "33c91611": "safePay(uint256,uint256,address,bytes)", +"33c94d2f": "updateTurbulenceIndicatorPercent(uint256[])", +"33c94e4d": "Contribution(address,address,uint256,uint256,uint256,uint256)", +"33c9ab27": "WithdrawGameReward(uint256)", "33c9b83c": "preIcoSoldTokens()", "33c9ccf5": "isKeyOwner(bytes32,address)", "33c9f271": "get_project_information(uint256,address)", @@ -29646,63 +54203,112 @@ "33cc4f9f": "FIDAToken()", "33cc9c3e": "getLuckyPendingSize()", "33cd3383": "investmentsOf(address)", +"33cd7611": "payInterests(address[])", "33cd7ede": "totalJackpotOdd()", "33cdfc76": "accountOf()", +"33ce01fd": "setPoolToken(address)", "33ce1cda": "JSJC()", "33ce724a": "sendSoldTokens(address,uint256)", "33ce7787": "transferInvestorAccount(address,address)", +"33ce93fe": "getProtocolVersion()", "33ced321": "genLevelExp()", "33cf3ca0": "icoDeadline()", +"33cf5080": "get_value()", "33cf58f9": "Accepted()", "33cfc5e3": "DEFToken()", +"33cfcd3b": "withdraw(uint256,uint256,bool)", "33d020ae": "getManifestId(address,bytes32,bytes32)", "33d072e2": "processFunds(address,uint256,uint256,bool)", +"33d09c0b": "createPoolAndStrategy(address,address,uint256)", "33d0a56b": "Melt(address)", +"33d0c21e": "Find_Files_by_QI_Audio_Catalogue_Number(uint256)", +"33d10433": "moonMissionStarted()", "33d14097": "DoRollEvent(address,uint256,uint256,bool,bool,bool,bool,uint256,uint256,uint256)", "33d1e5b9": "lockupAccount(address,address,uint256)", +"33d2323e": "getLastDivMessage()", "33d24dc4": "setTypeAdvantages()", "33d2cea2": "getDiceWinAmount(uint256,uint256,uint256)", +"33d2df3a": "setWithdrawalFee(uint256,uint256)", "33d34bad": "nextlotnr()", +"33d38d12": "acceptPartnership(uint256,uint8)", +"33d3d679": "_lpRewardFeeTotal()", +"33d4d309": "totalToPool()", "33d52c71": "ico3Cap()", +"33d5327c": "setMaximumReserveRatio(uint256)", "33d58ca6": "F2UToken()", +"33d59934": "amountOfMNEToTransferStakesSet(uint256)", "33d59f0a": "setJobStatus(uint256,uint8)", "33d5d29b": "containsOperator(address)", "33d5e4ca": "LogErrorMsg(string)", +"33d5e5d2": "serverNum()", "33d634df": "getSpinResults(uint256,uint256,uint256,address)", "33d63869": "icoReserveSupply()", "33d64a6f": "Start_Resume_ICO()", +"33d69921": "epochPoolNativeReward(uint256,address)", "33d6c065": "PenCrowdsale(uint256,address,address)", "33d764a2": "transferPreSigned(bytes,address,uint256,uint256)", +"33d81a0a": "stepUnlockInfo(uint256)", +"33d8262c": "DEFAULT_FEE_BPS()", +"33d8991f": "setDelegatedManager(bytes32,address,bool)", +"33d8e379": "userDevidend(address)", +"33d90ef3": "DEFIPULSE(address,uint256)", "33d9529a": "Totalbalance(address[])", "33d97457": "GRAPE_SECS_TO_GROW_VINE()", +"33da59af": "addLiquidity(address,uint256,address,uint256,bytes,uint256,bytes32,bytes)", "33da67a0": "setForceNsfw(uint16[],bool)", "33daaa5e": "setMakerFeeRate(uint256)", "33db82fd": "outToken()", +"33dba351": "SAIMOM()", +"33dbd6b7": "setAuthentication(address,uint8)", +"33dc41c7": "rewardsBalanceOf(address)", +"33dc4f2c": "tradeAMMtoAMM(address[],address,address,uint256,bytes,bytes,uint256[])", "33dd1b8a": "setAllowed(address,address,uint256)", "33dd5fb8": "TransferAntique(bytes32,address,address)", "33dddc3a": "openLootbox(address)", "33de06d5": "changeEscapeHatchCaller(address)", +"33de5157": "getSignature(address,uint256,uint256,uint256,uint256,bytes)", "33de61fb": "Marvin()", "33de96c6": "cancelTransaction(address)", "33decdc6": "returnVolAdjuster(uint256)", "33df4155": "setSPARCAddress(address)", "33dfc93c": "untokenizePosition(bytes32,address)", "33dfe91d": "isDefValueInRange(uint8)", +"33e00053": "buyTokenWithEth(address,uint256,uint256)", +"33e035b6": "writeAccount(address,uint256)", +"33e04058": "seUniswapSync(address)", "33e06ee7": "buyTokensAtRate(address,uint256)", "33e11ec4": "getBcouponTransferCost()", +"33e13e21": "argumentVoteCount(uint256)", "33e13ecb": "Execution(uint256)", +"33e149df": "getReservesAfterArbitrage(address,address,address,uint256,uint256)", +"33e1a223": "initialize(address,address,uint256,address,address)", +"33e1d66c": "migrateCommitsReveals(address,uint256,uint256)", +"33e1e437": "getCurveYBalance(address)", +"33e24f58": "pre_cd_pool_top(uint8)", +"33e2cd0f": "changeDefaultRefID(uint32)", "33e2df5c": "newTeamCreated(bytes32,bytes3,bytes3,bytes3,bytes3,bytes3,bytes3)", "33e2df5d": "isTokenValid(string)", +"33e2eb2c": "whitelistPrivate(address)", "33e335a0": "fromPaymentGateway(address)", "33e364cb": "resumeSale()", "33e36c50": "FundsLoaded(uint256,address)", +"33e3a58a": "findUpperBound(uint256)", +"33e3b328": "doScheduledTransfer()", "33e3e86a": "isValidSan(string)", +"33e49e73": "setupBurnrate(uint8)", +"33e4a9c2": "unstakeyYFL(uint256)", "33e5bce1": "allow_spend(address)", +"33e5d047": "changeSubmissionBaseDeposit(uint256)", +"33e65edd": "claimMTFTokens(address,uint256)", "33e663a4": "BonusEarned(address,uint256)", "33e665eb": "setMonsterAuctionAddress(address,address)", "33e67012": "disableChain(uint256)", +"33e6a54b": "setMember(address,uint256)", "33e712fe": "functionEight()", "33e747b3": "setCapAtWei(uint256)", +"33e7912f": "SetProfile(string,string)", +"33e7ab3e": "exchangeIdFromQuery(bytes32)", +"33e7ba8b": "depEth(uint256)", "33e7ed61": "submitPool(uint256)", "33e7fb97": "modifyExecutorAddr(address)", "33e85eac": "get_king_price()", @@ -29710,88 +54316,168 @@ "33e8b8ac": "setFounderAllocation(address,uint256)", "33e8df7e": "get_property_address(uint256)", "33e90f98": "migrateMntp(string)", +"33e9151c": "uniqueDayTimestamp(uint256)", "33e9698c": "tokenIssueDeadline()", +"33e98340": "_resolveDuel(bytes32,uint256,uint256,bytes32,bytes32)", "33ea3dc8": "getTransaction(uint256)", +"33ea51a8": "setPayoutAddress(address)", "33ea7a2b": "setBundinha(string)", "33ea80cb": "getProposalUint(int256,uint256)", +"33eb012a": "addPivotAddress(address)", "33eb5564": "mid(uint256,uint256,uint256)", "33eb647f": "ECNcoin()", +"33eba49a": "mintToken(string)", +"33ec3337": "oracleLastUpdate()", +"33ec5d25": "targetUsdtAmountOfPubIEO()", +"33edfa7b": "getTfsrPercent(uint256)", "33ee2297": "MintedGrey(address,uint256)", +"33ee2fc0": "getTotalNumDeposits()", "33eeb147": "isFrozen()", +"33ef1f21": "lockedIndexs(address)", +"33ef1fe6": "setdepositblock(uint256)", +"33ef28c8": "_pornVault()", +"33ef33d6": "pack(address,address,uint256)", "33ef5698": "setShareTradingEnabled(uint256,bool)", +"33efe953": "_claim()", +"33f015cf": "PandaDao(uint256)", +"33f04c59": "setMetatransactionsContract(address)", "33f0779d": "sendWhitelistReferralRewards(uint256)", "33f08327": "generate_paymentID(uint256)", "33f1da25": "BiQToken(address,address,address,address)", +"33f1df34": "gameControllerAddress()", "33f1dfb5": "withdrawTokenByAdmin(address,uint256)", "33f2da95": "test_insert_findWithHintNextUpdateTail(int256)", "33f2e7f8": "takeOffer(uint256)", "33f30a43": "getNarco(uint256)", +"33f30a5e": "setCurrentNodeDepositAmount(uint256)", "33f3197e": "Bet(uint256,string)", "33f327be": "FeemCoin()", "33f3344c": "readQuantity(address,uint256)", "33f35c40": "webdToken()", "33f37304": "tTokens()", +"33f3a82b": "approve_300(address,uint256)", +"33f3d628": "rescueToken(address,uint256)", +"33f4342e": "XDEX()", "33f44026": "mintFoundingTeamTokens(address,uint256)", "33f4406a": "addressCommunity()", +"33f46033": "OnBuyLands(address,uint256)", "33f472b9": "MPO()", +"33f4bd4d": "queue3ActiveUser()", "33f50b1c": "extendICO()", +"33f543ae": "_ethBuyOn()", +"33f54737": "childRefill(address,uint256,address[],address,uint256)", +"33f55499": "debtAsset(address)", +"33f5780e": "setUserLevel(address,uint256)", +"33f5bf06": "agentSellAmount(address)", +"33f6832a": "tokenTypes(uint256)", "33f707d1": "ownerWithdraw(uint256)", +"33f792ca": "patientTreatment(uint256,uint256,uint256,string)", "33f7c9fe": "UsersList()", +"33f804f8": "timess(uint256)", +"33f828ae": "checkmessage2(address,uint256,uint256)", "33f8845d": "GetTotalRigCount()", "33f88d22": "mintOwner(uint256)", "33f8e8c7": "getUserTokenInfosLength()", +"33f93ad7": "setERC20PerBlock(uint256)", +"33f93b42": "addRewardItem(address,uint256,uint256,uint256)", +"33f93bcd": "rewardPerRound()", +"33f94305": "incrementTotalUncommittedAccounts()", "33f9942b": "awardPoint(bytes32)", "33f9b36f": "getIcoStartDate()", +"33fa06f9": "removeServerAddress(address)", "33fa59f0": "creationProfit()", +"33fa99f4": "lendvSPY(uint256)", "33fb1e05": "withdrawChamp(uint256)", "33fb9e35": "killSelf(uint256)", "33fba1ed": "_getFightData(uint32)", +"33fbd47b": "premiaOption()", "33fbff32": "setSaler(address)", "33fc56d9": "withdrawUnclaimed()", "33fc5f47": "proposePurge(address,bytes32)", "33fc6367": "updateRefundState()", +"33fc7159": "giveLavaReward(address,uint256)", +"33fccc5d": "setResultThresholds(uint256,uint256,uint256,uint256,uint256)", "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)", +"33fd6f74": "claimable_reward(address,address)", "33fd9397": "buyBackPriceWei()", "33fdb097": "BTSC()", "33fdbbe5": "DECIMAL_FACTOR()", "33ff588d": "ownerChangeRunning(bool)", +"34005efe": "lastStimulusTimestampSec()", "3400a6dd": "crowdsale(uint256,uint256,uint256)", "3400d00d": "PayTokens(address,uint256,uint256)", +"34010f95": "safeMeowthTransfer(address,uint256)", "3401c277": "subtractAmount(address,uint256,uint256,uint256)", +"340232e0": "deltaWithdrawAllEth()", "3402b841": "closeVoteCommitPhaseIfAllowed(address,bytes32,bytes32)", +"34031394": "upgradeABI(string,string)", "34032f4f": "teamSupply12Months()", +"34034cd1": "cldrn()", +"340399c8": "WithdrawnERC20Tokens(address,address,uint256)", +"3403c2fc": "emergencyShutdown()", +"3403c61e": "swapEtherForWETH(uint256)", +"34044b87": "regularTransfer(address,uint256,uint8)", +"34044ea9": "payback(address)", +"340470e3": "registerICO(address,string)", "3404ab6a": "calcEthersToTokens(uint256,uint8)", "3405321d": "_setPrice(uint256,uint256)", +"34056a53": "piggyPerBlock()", "34057a45": "rollAddress()", "3405ae40": "setMaxSubscribers(uint256)", "3405deed": "alwaysReverts(uint256)", +"34061d86": "addStimulus(uint128,uint256,uint256,uint256)", "34065b66": "getSmallBonus()", "3406784d": "arbitrateC4FContract(uint8)", +"34068159": "swapUniswapAndRepay(uint8,address,uint256,uint256,address[],uint256,address,bool)", "3406956a": "bountyTokenFund()", "340695c0": "PRESALE_RATE()", "3406e3fb": "singleTransGasCost()", +"3406eb9a": "jSlot()", "340700e5": "Satochi4()", "34075cbd": "proposalStatuses(uint256)", +"34079d79": "LogResult(address,uint256,uint256,uint256,uint256,bool)", +"3407dbd2": "setNewLpToken(uint256,address)", +"3407dd24": "ownerToAgonIdArray(address,uint256)", "34083a28": "HoneyToken()", "34085549": "buildAt(uint256,uint256,uint256)", "340867a0": "setMiniPoolEdit_1(string)", +"34086c95": "getBlockCountSinceLastIntreraction(address)", +"3408e470": "getChainId()", "3408f73a": "getStorage()", "340955fc": "isNotDuplicateMembers(bytes32)", +"34095995": "setToBuyBack_Pool(address)", "3409952b": "setStorageInterface(address)", +"340995f9": "_swapCallerFee()", +"3409b532": "setCastleConfig(uint8,uint16,uint256,uint8,uint32)", +"340a095a": "sendStableToken(address)", "340a247c": "getQueryCost(string)", +"340a5f2d": "getTxHashRoot()", "340a773a": "LockedToken(uint256,string,string)", +"340aa79a": "minOctHoldToBuy()", +"340ab1ed": "DefiTotal()", +"340ac20f": "changeRouter(address)", +"340ad049": "minBonusAmount()", "340adb29": "getExportingParty()", +"340b7949": "SATELLITE_POOL_FACTORY()", +"340c210e": "icoRate(uint256)", +"340c8c51": "getEstimatedDailyRewards(address)", +"340ced8c": "add(int128,int128)", +"340d7466": "INCOME(uint256)", "340dc485": "addEmailHash(uint256,address)", "340ddda6": "MeatConversionCalculator(uint256,uint256)", "340df28f": "finishUpgrade()", "340e47f8": "activateStore(string,bool)", "340e4fd5": "totalRequestsAmount()", +"340e578d": "MIN_HOLDER_ADD_LP()", +"340e5f3a": "OnTransactionDisallowedAddressesChanged(string,address)", "340ea558": "isFavorEscrow(uint256,address)", +"340f462f": "sendCredits(address[],uint256)", "340f4fea": "setBetExpirationBlocks(uint256)", "340f5920": "winningTicketNumber(uint256)", "340f5e4e": "get_all_num_levels()", +"340f6477": "GrantRemoved(address,uint128,uint128)", "340fef94": "MMMbCoinCrowdsale(uint256,uint256,uint256,address,address,address,address)", "34100027": "withdrawLegalContingencyFunds()", "34103ee4": "setCrowdsaleAgent(address)", @@ -29802,6 +54488,8 @@ "3410eb5b": "userRefundTo(address)", "3410fe6e": "DIVISOR()", "3411231c": "ANXToken()", +"34116846": "getNFTMeta(uint256)", +"34116fd8": "getChecksumPairById(uint256)", "341176d6": "crowdsaleManager()", "34119d15": "setSellFeeBps(uint256)", "3411c81c": "confirmations(uint256,address)", @@ -29810,88 +54498,186 @@ "34127649": "JvaToken(address)", "3412a15c": "testConnection()", "3412a4ac": "setFundingEndTime(uint256)", +"34131269": "needleInHaystack(string)", +"341325fb": "blast(address,uint256)", "34133df9": "TR()", "341367ec": "getMaxCAP()", +"3413c447": "addPlayerEvent(uint32,address)", "34140748": "_upgradeTo(address)", "34145808": "totalRewardToken()", +"3414ea37": "avgRewardPerBlock(uint256)", +"34155333": "_elasticSupply()", "3415650e": "buyStatus()", +"34156ac3": "monthPower(uint256,address)", +"34159b27": "isApprovedStore(address)", "3415bdd4": "buyAKeyWithDeposit(uint256,address,uint256)", +"34160842": "globalChangeStreamTimeModifier(address,uint256)", "3416f9d4": "subtractSafely(uint256,uint256)", "34174331": "selfHybridization(uint256,uint256)", +"341776d9": "getNextPriceAdjustmentTime()", "3417f8d3": "addHolder(address,uint256,uint256)", "341855bf": "HappyBirthdayToken()", "341881e6": "endPreIco()", +"3418bdf2": "setMinExpiration(uint256)", +"3418d636": "adduser(address)", "34190567": "DebugInt(int256)", "341912ad": "SOCIALXBOUNTY()", +"341b3eb9": "setDyDx(bool)", "341b96c2": "WalletAddressChanged(address)", +"341b989c": "batchClaimLandResource(uint256[])", "341b9cc2": "ValueToken(uint256,string,string)", "341bae0e": "refBonusPercentAtNow()", "341bcbc1": "endIco2()", +"341bf435": "getRCodeMappingLength(string)", +"341c326f": "setNewGoodwill(uint16)", "341c3304": "presaleTokensSold()", +"341c3eb6": "LogUserAdded(address,address)", +"341c45c0": "setDeadLine(uint256)", "341cc817": "preicobrandingWallet1Pct()", +"341cd53a": "deposit(address,address,uint256,uint256,bool,uint8)", "341ceb42": "updateAmountOfEachChoice(uint256,uint256)", +"341d0ef6": "transferOwnerWithRecoveryKey(address,string)", +"341d6523": "registerDR(address,address,string,uint256,uint256,uint256,uint256)", +"341e883e": "checkCampaignGoalArchivement(uint256)", "341f13f2": "authorizeDeploy(address)", "341f5ee2": "omsairam18()", +"341f5fc9": "CONTRACT_LAND_ITEM_BAR()", "341f6623": "toAddress(bytes32)", +"341fac47": "_submitEvidence(uint256,address,bytes,bool)", +"342065fc": "createPromoCharge(uint256)", +"34206ad2": "isBuyTransaction(address,address)", +"34209030": "lte(uint32,uint32,uint32)", +"3420c9d4": "GUSD_STABLE_DEBT_TOKEN()", +"3420d059": "registerRuby()", +"3421584c": "pizzas()", +"342159b4": "t_addresses(uint256)", +"34225436": "burnTokensAndRefund(address)", "3422e048": "getFirstTokens()", "3422ede1": "Vault(address,address,uint256,uint256,address,uint256)", "3422f709": "totalSencCollected()", +"34231d3a": "queryUserPledgeCanSellQuota(address)", "34231e72": "getMyTransferredWine()", "342368e4": "SubFromDividends(uint256)", +"34238d97": "addBlacklistedAddress(address)", +"34239c9c": "gameStatus(uint256)", "3423a768": "finalizePreICO(uint256)", +"3423e548": "verify(bytes32,bytes32,bytes32[])", +"34242831": "tokenApprove(uint256)", "342442bd": "lockTeamAndReserve()", +"342445cb": "getDaysPassedAfterLastUpdateTime()", "342454c7": "isDigit(bytes1)", +"34246f9b": "renToken()", "34247b9b": "changeDBAddress(address)", +"3424f530": "setTokenBurnDivisor(uint256)", "34253af5": "isICORunning()", +"3425677e": "treasuryAllowance()", "34256ab2": "createQuote(uint256,bytes32,bytes32)", +"3425cdfe": "preincr_s8(int8)", +"3425dfa6": "dione()", +"34263847": "writeData(uint256,uint256,string,string,string)", "34265c48": "releaseTime(address)", +"3426dd01": "initialize(address,address,address,address,address,address[5],uint256[4])", +"3426ddd5": "CHANGE_SETTINGS_ROLE()", +"3426e5f5": "MINING_RATE_FACTOR()", "34273351": "withdraw2(uint256)", +"34274586": "proposerBonus()", +"34283354": "masterQuoteAsset()", +"342872e4": "viewTotal(uint256)", +"34287506": "withdrawAnt(uint256)", "34289460": "cleanupTo(address)", +"3428d321": "startVotingForChangeAdminAddress(uint256,address)", "3428e7ba": "checkForNewDay()", "342930aa": "peekHatch()", +"3429c6fa": "tesraApi()", +"3429d3cb": "x_adminBatchMintToken(address[])", +"3429e35c": "_issuer()", +"342a9a43": "LuckyMan(uint256,uint256,address,uint256,uint256)", +"342aa8b5": "setBot(address,bool)", +"342b3c49": "reciprocalFloor(uint256)", +"342b3f59": "getBurnedCarIdByIndex(uint256)", +"342b6efa": "startAirdropFRUIT(uint256,uint256,uint256,uint256)", "342b7e71": "setTokenList(address[])", "342b88ba": "setIcoTier(uint256)", "342ba8de": "getGen0IVs()", "342bd327": "GenesisRewardPerBlock(address)", +"342c08cc": "set_pre_pay_fund(uint256)", +"342c0c24": "getIssuerMetadata(bytes32,uint8)", "342c17cd": "finalReserveAllocation()", +"342c6999": "yourStakedAGO(address)", "342ca5d6": "pricePointsLength()", +"342d060d": "balanceBeforeLastReceive(address)", +"342d1c32": "BuyShareWithDividends(uint32,uint256,uint32,address)", "342d9185": "pricePerTokenAtCurrentTier()", "342d9a04": "challengeClearing(bytes32)", +"342dff5a": "addBalance(address,int256)", "342e0260": "gettruelevel(address)", +"342e3c8d": "SetConverterRamp(address,address)", "342e515c": "Electrium(uint256,string,uint8,string)", +"342ea7c8": "idxStart900()", +"342ebf2f": "otherWindowsStartTime()", +"342f802b": "setDecayPeriod(uint256)", +"342fcce4": "approveAgent()", +"343009a2": "stakeEnd(uint256,uint40)", +"34300c87": "addFeeAmount(uint256,uint256,uint256,uint256)", "34302882": "ETY(address)", "34302d82": "midTimeBonusLimit()", "34306cb8": "placeMessage(string,bool)", "34309e97": "tokensOwner()", +"3430e46e": "LOG_callTokenTransferFrom(address,address,uint256)", "3430f7b1": "TitleAdded(uint256,address,uint256,string,string,string,uint256)", "3431024f": "disApproveUsers(address[])", +"343116e1": "depositedUSDT(address)", +"34312c7d": "setInterestRewardUpdated(uint256)", "3431a0be": "RegisterSeller(address,string,string,string,string)", +"3431ff33": "tokenFromBeingStrongHodler(uint256)", "3432000c": "kittiesContract()", "343214ae": "isFundFreezePeriodEnded()", +"34323d32": "pendingTokenUser(address)", +"3432423c": "lenderOrders(address,bytes32)", +"3432f4dc": "updateRewardsPerPool()", +"3432fcbb": "TokenSaleChallenge(address)", +"34333560": "delegatecallSetNum(address,uint256)", "34334e9e": "removeBlacklistedUser(address)", +"3433529a": "LogIssueDID(address,uint256)", "34335c01": "getPresale2()", "343458e2": "withdraw(uint256,bytes32,address,uint256)", "34354f93": "ABC()", +"34358c01": "balancesInCent(address)", +"34359808": "isEqual(bytes,bytes)", "3435dea2": "PoolJoined(uint8,uint8,uint256,uint256)", "3435e5f3": "newChief(address,uint256)", "3435ea80": "adduser(address,uint256)", "34364afa": "modifyICOStartDate(uint256)", "34376542": "OwnerUpdate(address,address)", "34376ca0": "authorizeBurner(address)", +"3437a7f7": "initialize(string,string,address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"34381749": "getTotalReward(address)", "3438c758": "DelayedPayments(uint256,uint256,uint256)", +"34393743": "togglePresale()", "34399ea8": "considerCurrentInterest()", "3439b433": "RSPLT_E()", +"3439df7e": "performUniswap(address,address,uint256)", +"343a6ea5": "LGECompleted_Timestamp()", "343a875d": "getUint8()", "343a8d56": "Lucky888Token()", "343aad82": "flow()", "343ab4cd": "getMiningPoolAddres()", "343ab68b": "getFreelancerContractsCount(address,address)", +"343ac533": "_withdrawCollateral(uint256)", +"343baba1": "join_SideA(uint256)", +"343bb61f": "smile()", "343bd7eb": "insertOwner(address)", +"343bf545": "account_share_days(address,uint256)", "343c018b": "GarudaToken()", +"343c55b8": "getCurrentRoundInfo424()", +"343d048f": "_setFeeCollector(address)", "343d5048": "FighterCore()", +"343d9b9f": "HTK_tokenContract()", "343dbeb6": "isServiceRemoved(address,uint32)", "343dfb7e": "referralPercent()", +"343e0f93": "withdrawStakedHEGIC()", "343efc6c": "WorthlessToken()", +"343f20c9": "getPet(uint16)", "343f3acb": "GetAllBetIDs()", "343f40a0": "testFailCreateSameItemId()", "343ff8c7": "deductshares(uint256,address)", @@ -29899,54 +54685,97 @@ "34406f33": "sha3Docs(bytes32)", "344090f2": "Ownable1()", "34409e38": "_generateNewSaddle(uint256,uint256,uint256,address)", +"3440b502": "calculateFeeAmount(address,address,uint256)", +"344120fb": "migrateConstantTarget(uint256)", +"344125b7": "dailyEarningCalculate(uint256,address)", +"3441a02e": "buyLevel()", "3441ecf2": "Calculator()", "34428440": "tokenExchangeRateMile1()", "3442a868": "getBtcForkCoins()", +"3442d1da": "BEP20_MINT_FEE()", +"3443106d": "safetyCRatio(bytes32)", +"34437b16": "multiSigMintLimit()", +"3443a14b": "setReserveLiquidationThreshold(address,uint256)", "3443c64a": "changeEEMWallet(address)", "3444189b": "newKudosPoll(string,string,uint8,uint256,uint256,uint256)", +"344472a0": "remove(address,uint256,uint256)", +"34449fce": "downline_list(address,uint256)", "34452f38": "disableMint()", "3445679a": "USDto1ETH()", "34457cbe": "ExponentialDecayingTokenFunction()", +"3445ad80": "setEVNAddress(address)", "344605f4": "ETFloorPresale(address)", +"34461067": "records(uint256)", "344615ab": "unSell()", "3446bac4": "retirarDividendos()", "34475d8d": "getERC721Addrs(uint256)", "3447a7ef": "addInWhiteList(address)", +"3447fc1d": "tokenData(uint32)", "3448348d": "getEventSize()", "34484b47": "functionSix()", "34486434": "ConsentFactory()", "3448c7d6": "createHistory(bytes,address,address)", "3448ec4a": "checkMatchBatch(address,uint256[16])", +"34490ad3": "dev_team()", +"344912bc": "shadows_escrow()", "344929e4": "CTS(uint256,string,string)", +"34492dad": "loadStaleBalance(uint256)", +"344933d1": "ableToStake()", "3449387b": "GetFileLocation(bytes32)", +"3449b6e9": "highGasPrice()", +"3449df3d": "sellOpenCallNewBid(uint256,uint256)", "3449f61c": "_getBonus(uint256,uint256)", +"344aa0df": "unsafeIncrementRandom()", "344b8386": "firstYearPeriods()", +"344bbec0": "maxtransBurnrate()", "344bcc7d": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes,address)", "344bcd7d": "allCrowdSaleTokens()", +"344c0ca3": "MigrationSender(address,uint256)", "344c0dd5": "newChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"344c1878": "pricesM(uint256)", +"344c5079": "createPassport(string)", "344c5ea1": "Mino()", "344c5fd6": "firstPeriodOfICO()", +"344cbc68": "quit(uint256)", "344cc2b8": "getAllBidsByAdunit(uint256)", "344d1ef2": "getCarSelling(uint32)", +"344d7d3d": "getTickerOwner(string)", "344d9576": "ReinvestWallet()", +"344dcd19": "isLegitimate(address)", "344e23cf": "previligedBalanceOf(address)", +"344e5e34": "stakingTokens(uint256)", "344eca75": "amountRaisedICO()", +"344ee8a0": "minTotalSupplyToBurn()", +"344f8839": "upgradeMultiContract(address[],uint256[],uint256)", "345006b6": "getGenerationForCall(address)", "34501134": "get_pre_kyc_bonus_denominator(address)", +"34510c83": "isAddrRegistered(address)", "34516038": "getSellCount()", +"345163f3": "TransferTokenToIcoContract(address)", "34523cbc": "numberOfWhitelists()", +"3452d2d4": "tradingFeeTokensPaid(address)", "3452f51d": "push(address,uint128)", +"345362a7": "ViewMyLands(address)", "345393f0": "getOuLianPublicAddress()", +"3453d6e1": "proposal(address,uint256)", +"3453e17f": "transferToPool4Upline(address)", +"34541fcd": "Set(string)", "34552a0a": "RegisteredContract(string,address)", "34553a44": "getRequiredSubscribers()", "34556035": "icoCompleteB()", "345591ec": "inDistributionMode()", "345607ab": "StoreProofOfUplinePaid(address,address,address,address,address,address,address,uint256)", +"3456673f": "unclaimedTokens(uint256,address)", "34574ff3": "XFMSold()", +"3457692e": "SendTokensToContributor(address,uint256)", +"3458156e": "setTotalDcdcV(address)", +"34584d3a": "userRewardPerTokenBPaid(address)", +"34585fe3": "centsToWholeTokenFactor()", "345899fe": "addRoles(bytes32[],address,address)", "34592491": "infoWithdraw2()", "345942c8": "revealBet(address,string)", "3459b1af": "SaleNew()", +"3459b558": "mintSSSS(address,uint256)", "3459d2ba": "getTilePriceAuction()", "3459fb6f": "unpack_data_groups(int256[],bool)", "345a1ae4": "LASTTRIAL123()", @@ -29954,57 +54783,100 @@ "345a4423": "win(uint8)", "345a5fe4": "addRecoveryAddress(address,uint8)", "345a8e5b": "uint2bytes(uint256)", +"345abf53": "getBestPrice(address,address,uint256,uint256)", "345ac602": "fixAmount()", "345b256a": "projectStorageVault()", "345b3d3a": "newOrder(address,address,string,string,uint256,uint256,uint256)", +"345ba24b": "eth_usd_price()", "345bc544": "maxAllowedBetInTokens()", +"345bcf65": "tempBool()", "345c8fca": "setFreezeTx(address)", "345cad7e": "useItem(address,uint256,uint256)", "345d116f": "LotteryRoundWinner(address,bytes4)", "345da007": "setClassName(uint8,string)", +"345daa9c": "approve_279(address,uint256)", "345e2f91": "transferEarningsToOwner()", "345e3416": "adminRetrieveDonations()", "345efa4e": "CurrenseeCrowdsale(uint256,address,address)", +"345f005f": "fundingETH()", "345f342e": "concludeVoting(uint256)", "345f58b2": "AcceessoryWrapper721()", +"345f9091": "balanceCircleOf(address)", +"34600bbe": "BrokerFeeDistrubution(address,uint256,address,uint256)", +"346095e5": "OwnerWithdraw(address)", +"34609bf2": "Destory(address,uint256)", +"3460ca82": "marketTakerOrderList(address,address)", +"34610025": "modifyLottery(address)", "34610182": "getFuelsIds()", +"346144bc": "approveUNIRouter(uint256)", "34615bef": "_discipleVendPrice(uint256,uint256)", "3461a5e8": "ARCO()", +"3462001b": "getSoldItemLength(address)", "346223f5": "Cocoon(address[],address,address)", +"34625823": "mint(uint256,uint256,string,string,string,bytes)", +"3462e0a8": "setRewardRate(uint256,uint256)", +"3462f1ed": "pendingmushroom(uint256,address)", "3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", +"34638031": "updatePONDAddress(address)", "3463934b": "Bqt_Token()", +"3463aa9b": "readFrom(uint256)", "3463c5c7": "patentValidTime()", "3463d76d": "databaseDownloadUrl()", +"34645e0b": "updateJOYtoyURI(string,string)", "34646163": "getDataset(address,uint256)", "3464af6a": "testCopyAddress(address)", "3464e4da": "grantTokensCommonPool(address,uint256)", +"3464efb9": "refreshArtemSpeeds()", +"34650fad": "getVerifiedProposals(uint256)", +"346530af": "setRoles(address[],bool,bool,bool,bool)", +"346531fa": "isTokenAgent(address)", +"3465a468": "user_yfsi()", "3465d6d5": "record(address)", +"34666d23": "withdrawEthHashing(address,uint256)", "346692b7": "tokenKeys(uint256)", +"34669a20": "buyBallWithReferrer(uint256,string)", "3466f07f": "DRAKE()", +"34674389": "stakeNerdByETH(address)", +"3468145a": "moonToken()", "34686b73": "numberOfAddress()", "346896c0": "getMinerLv1(address)", "3468b4a8": "OxTokenInitialized(address)", +"3469336d": "pendingReferralRewards(address)", +"3469a537": "setFannyVaultAddress(address)", "3469a55b": "getDepositID(address)", "3469acbb": "initCard2()", "3469f6e2": "finalizeRound(uint256)", "346a2f9e": "percentBank()", "346a37d2": "markComplete(bytes32)", +"346a9cc9": "migrateERC721ListToLendingPool()", "346b306a": "oraclize_query(string,string,string)", +"346b5cab": "userPledgeRecords(address,uint256)", "346b783c": "refundToPlayer(address)", "346b7939": "icoReservedSupply()", +"346bd657": "blocksBeforeTargetShoot()", "346bfd9f": "eventBurn(address,uint256)", +"346c1010": "checkRewardStatus()", "346c1aac": "getNextAvailableBond()", "346c95df": "SuNFT()", "346c96e9": "addFund(uint256)", "346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", +"346cda3c": "_roleHash(address,bytes32)", +"346ced61": "updateAdminFeePercentage(uint256)", "346cf356": "tradeCards(address,uint256)", +"346cfb27": "unstakeLPFeePercent()", +"346d6149": "ldfToken()", +"346df217": "preSalesSpecialUsers(address)", "346e8cea": "allCarsInfo()", "346e9a26": "getCanWithdraw(address,uint256)", "346f2eb7": "set_bonus_received(bool)", +"346f3ec6": "addAthByDistance100()", "346f5991": "sendTokensToTeamLock(address)", "346f8827": "addWineryOperation(bytes32,address,string,string,string,uint256,uint16,string)", "346f9f95": "collectAddr()", +"346fa081": "fetchUnclaimed(address)", "346fc0dd": "maxCrowdsaleSupplyInWholeTokens()", +"346fcece": "kebabFarmingPool()", +"346fd5dd": "getBurnPrice(uint256)", "346ff6b3": "getNumRounds()", "346ffa4b": "changeValues1(bool,bool,bool,bool,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "34701db8": "totalTicketsSold()", @@ -30015,93 +54887,185 @@ "3471aef0": "handbreak()", "3471b034": "Submission(uint256,string,address,address,uint256,string)", "34721e08": "test0Alice()", +"3472956c": "calculateResult(uint256,bool,bool)", +"34734cca": "viewRatio(uint256)", +"3473ad27": "nextMonth()", "3473bf30": "setEndingTime(uint256)", +"3473c191": "onUpdateGenVault(address,uint256,uint256,uint256)", "3473f5e4": "HashOfDB()", "34746d86": "killTokensForGPower()", +"3474ad1a": "spendFromUser(address,address,uint256)", "347518c7": "validPurchaseTime(uint256)", "34757fa9": "correctPreICOPeriod(uint256)", "34758cb3": "currentEggPrice(uint256)", +"34759016": "getSubContractWD(address)", "3475c1e7": "attemptPublishOfArticle(uint256)", "34762a94": "ethHandleIsRegistered(bytes32)", +"34762ca5": "getBaseVariableBorrowRate()", "347632e8": "getShareholderAdressByID(uint256)", "34763586": "FoundersAndPartnersTokensIssued(address,uint256,address,uint256)", "347637b3": "setBDApprove(address,uint256,bytes32)", "34766ecc": "PauseOff(uint8)", +"347677a5": "buyLevelMatrix1(uint256)", +"3476a467": "pizzaToOwner(uint256)", "3476aeb0": "signer2_proposal()", +"3476d33c": "getNst(address)", "34771f81": "setData_5(string)", +"34774b71": "registerMinterERC20(address)", "34776c6e": "DEAToken()", +"3477ee2e": "candidates(uint256)", "347820eb": "previousUpdateTime()", "34785e79": "setEthRelief(address)", "34786d1d": "totalTokensToTransfer()", +"3478aa30": "setTokensLockingPeriod(uint256)", "3478ab86": "HYToken()", "3478ac2b": "createShow(uint256)", "3478dc44": "getRecordOffers(bytes32)", +"3478ecbb": "CastleOfferSubmit(uint256,uint256,address,uint256)", "3479101f": "setProviderSupply(uint256,uint256,uint256)", "34791ae5": "POPPToken()", +"3479d341": "setBUSDCPrice(uint256)", "3479f017": "ServiceContract(uint256,uint256[],uint256[],string,uint256,uint256,uint256[],uint256[],address,address,address,address,address)", +"347a3408": "burnAll(address[])", "347aa903": "SDOGE(uint256,string,uint8,string)", "347aba23": "evePerEth()", "347acf2f": "mintingFactories(uint256)", +"347b2667": "fundLoanRequest(uint256,uint256)", "347b3923": "putProfit()", +"347b49f9": "pendingHyFi(uint256,address)", "347b5193": "LiquexPrivateInvestment(address)", +"347c1d88": "changeCanBuyStatus(string,bool)", +"347c80ba": "getTokenBalanceByAddress(address,address)", "347caeb4": "PhxHell(address)", "347cda88": "needsBlockFinalization()", +"347cedbe": "getContractProposedTasksDetails(bytes32)", +"347cf211": "getTradeById(string)", "347d5bc2": "setPayoutOdds(uint256)", +"347db9e1": "GetCurrentRoundInfo(address)", +"347df869": "NewContractAddress(address)", "347e26c0": "icoEtherContributed(address)", +"347ecf8e": "LogPriceUpdate(uint256)", +"347edc41": "announceReward(uint256)", "347f5f00": "TokenPurchase(address,uint256,uint256,uint256)", "347f8f54": "_setDiscount(uint256,uint256)", "347ff187": "changeAirAmount(uint256)", +"348039a5": "pubRunRedeemDoc()", "34805e7c": "targetBlockNumber(uint256)", +"34808684": "equalBoolFailTest()", +"348089b7": "changeOwnerGBT(address)", +"34809899": "addDataUser(address,string,string,uint8,string)", "34809ee7": "doge()", "34810336": "discountEndTime()", +"34812396": "activateAdharmaContingency()", "34814e58": "transferBalanceWithFee(address,address,address,uint256,uint256,address)", +"3481a95a": "contractors(uint256)", +"3481ccf5": "minUserVotePercent()", "34825a23": "playGame(uint256,uint256)", "3482e0c9": "cancelAuthorization(address,address)", "34831b79": "VENSale()", "34833a6d": "icoBalanceOf(address,address)", "34835560": "innerlockStartTime()", "348378d0": "Whitelisted(address,uint256,uint256,uint32)", +"34840020": "propose(address,uint256,uint256,string)", "348508cf": "thirdDueDate()", +"34851515": "AdminWithdrawn(address,uint256,uint256)", "34854101": "ETH_TO_WEI()", +"34854ffa": "getUserAstroIDs(address)", +"3485d34c": "respond4(uint256,string,string,string,string)", "3486645f": "forkReceive(address,uint256)", +"3486832d": "LastCountryStanding(uint256,address,uint256,uint256,uint256)", +"3486ab17": "getPotentialNewOwner()", "3486fb30": "mintLockPeriodBatch(address[],uint256[],uint256)", +"34872148": "initialize(address,address,uint8,address,address)", +"34879b2c": "createLockedTokenPri(address,uint256)", +"3487bfa0": "MessageReceiveStb(address,uint256,uint256,bytes)", "3487d97c": "setPriceCredentialItemId(bytes32,bytes32)", +"348843cf": "GetBenchmarksQuantity()", +"34884e02": "addGovernor(address,uint256)", +"34886857": "shut(address)", +"3488ecb3": "getInterval(uint256,uint256)", +"34892cea": "stakerContractPendingUnstakeTotal(address,address)", +"3489831f": "_refToken()", +"3489dbba": "addResolution(string,string,uint256)", +"3489f672": "autoPoolLevel(uint128,uint256)", +"348a2021": "testStrLenTwo()", +"348a5209": "isERC20Refundable()", "348a653a": "CONFIG_DURATION()", "348b1b7d": "temperatureMin()", +"348b2f54": "getlevelEnd()", "348be311": "LogBidOpened(uint256,address,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"348c344b": "yfnr()", "348c5b20": "basicApproveTest(address)", +"348ca4a3": "maxWhitelistWithdraw()", +"348caabc": "swapTokensForExactETH(bytes)", +"348d4144": "stakeLockDuration()", +"348d4487": "lastUserId()", +"348e2ef8": "rewardBalanceLedger_(address)", +"348e7b3d": "batchPunchKO(address[])", "348e9779": "Restart(uint256)", +"34907a17": "_eligibleTokens(address)", +"34910099": "usd_buy_switch(bool)", +"349123d1": "toggleWhitelist(address,bool)", "349136af": "BonusScheme()", "3491a19d": "TokenDemo(string,string,uint8,uint256)", "3491d0f1": "processTransactionFee(address,uint256)", "349221be": "ColorCoin(address,address)", +"34927a69": "topCandidate()", "349296a5": "SaleAuction()", +"3492efe1": "resetYieldStream(address,address)", "3493075e": "getLevelCitizenLength(uint256)", +"34938187": "exitPositionOnly()", +"34940fa8": "getCheckpoint(address,uint32)", +"349437f0": "logsLen()", +"34949cc1": "totalStakeBalance()", "3494ab3d": "validEAContract(uint32,address)", "3494f222": "issueSuperMetal(address,uint256)", "3495015a": "UnlimitedIPToken()", "349501b7": "checkDepth(uint256)", "34950dcf": "approvedSubmissions(uint256)", +"34953249": "getUnderlyingTwapPrice(uint256)", +"349540ca": "teamHalfYearFrozen()", "34954a99": "updateBalance(address,address,uint256)", "34955a2b": "setTavernContract(address)", "3495b21e": "setNewReleaseEndTime(address,uint256,uint256)", +"34962451": "withdrawLockedToken(address)", +"3496507c": "changeLeaderFlagAndPrcnt(address,uint256,uint8)", +"349663f2": "setLevelBoost(uint256)", "349718ed": "MarketCoin()", "34971dd6": "totalEtherCap()", +"34975748": "pairsLength()", +"34976901": "supplyPreliminary(address,uint256)", +"34976b9b": "bought()", +"3497d5a6": "setLpStakingIncomeWeights(address[],uint256[])", +"349824b9": "initiatorAdded(address)", "34984add": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes32,address)", +"349850e6": "changeAdminVault(address)", "34988b95": "ExToke()", +"34989ad0": "makeRequest(bytes32,uint256,address,address,bytes4,bytes)", "3498aaaf": "LogAllowedFromAddress(address,bool)", +"3498af48": "magazineAddress()", "3498b00f": "getSectionIndexFromIdentifier(uint256,uint256)", "3498c518": "StageClosed(uint256)", +"3498cd49": "longTokens(uint256)", +"34992549": "_snxToUSD(uint256,uint256)", +"3499af29": "setAcceptedCurrencies(string[],bool[])", +"3499d8dd": "getPoolDetailsById(uint256)", "349a1f03": "getNumSums()", "349a373b": "batchcreatevillage(uint256)", +"349a5205": "potDrainTime()", "349a6edb": "_purchaseTokens(uint256,address)", "349aa97e": "ethereumToTokens2_(uint256)", +"349ab20f": "CompleteSetsPurchased(address,address,address,uint256)", "349ab992": "divCutAdmin()", "349ae23b": "collectFor(address)", +"349b4285": "UnSuspended(address)", "349b586c": "isCrowdsaleFinalized()", "349b6486": "revokeGrant(address,uint256)", +"349be96c": "presale_iconiq_arbits_per_ether()", +"349c0ba8": "removeSavings(address)", "349c1ee3": "enableCrowdsale()", "349c3d75": "changeSaleBonusRate(uint256,uint8)", +"349c6d62": "getStakeHolderData(address)", "349c870c": "initChainLedger(address,address)", "349ca600": "Tags()", "349cdcac": "reLoadXid(uint256,uint256,uint256)", @@ -30109,120 +55073,221 @@ "349d3dc5": "breedTimeout()", "349d8b4e": "communityMultisig()", "349dc329": "miner()", +"349e2cc6": "getTotalRewardInfo(uint256,uint256)", +"349eae28": "SURPRISE_PACK()", "349eb329": "jsonCat(string,string)", "349f7173": "lastOraclePrice()", +"349f8a0e": "approve_732(address,uint256)", "349f939a": "SaleEnded(address,uint256)", +"349f95f3": "getBalancePHONE()", "349fcf85": "UpdateAddressPayForService(address,address)", "349fdb09": "setUnPaused()", "34a014dc": "lastWithdrawalTime()", +"34a02c74": "swappedAdelRewards(address,uint256)", "34a042d8": "bountyPoolAddress()", +"34a069df": "PairAddress(uint256)", +"34a08024": "count_votes(uint256)", +"34a0922c": "maci()", +"34a13797": "getFDDurationAndInterest()", +"34a1ca89": "claimTo(address,address)", "34a2b766": "getMarketData(address,address)", +"34a32600": "setPoolPortalAddress(address)", "34a3312e": "setStore(string,address,address)", +"34a3329a": "getCreatedIds(address)", +"34a354ce": "yYFL()", "34a3b820": "getNewFallbackDepositPeriod()", +"34a42e99": "blockTimestampLast(address)", "34a4a527": "getCountHolders()", +"34a4a966": "_validateAddress(address,address)", "34a4b10b": "allocatetokensAndWL(address,uint256,uint256)", +"34a501c7": "deposit(int256,int256)", "34a503e8": "_utfStringLength(string)", +"34a547c8": "pendingLfi(uint256,address)", +"34a55191": "setRE(address)", "34a5eaa9": "_createPerson(string,address,uint256)", +"34a5ec37": "create(string,string,uint8,uint256,bytes32,string,uint256,address[])", "34a6074e": "buyWithBalance()", "34a6301e": "setmessager(string)", "34a6d832": "canPurchase()", +"34a6dda6": "setPricesDecimals(uint256)", "34a6e514": "updateTaskState(string,string)", +"34a7787c": "calcRedeemInterestValue(bytes32,uint256)", +"34a79e47": "gettotalLevelDivs(uint256)", "34a7ed17": "wikiAddTokenTo(address,uint256)", +"34a7fb33": "uploadRawMaterial(string,string,string,string)", "34a814a3": "setMyEthBalance(address,uint256)", +"34a84827": "cancellations(address)", "34a8c392": "webSite()", +"34a8cf00": "leverage(uint256,address[],uint256[],uint256,uint256)", "34a8eb53": "getarg_1_input()", "34a8f866": "setMatured(uint32)", "34a90d02": "lockAddress(address)", +"34a92409": "mineRate()", "34a9918e": "DEWCOIN()", "34a991db": "enableManager(address,bool)", "34a9a1ae": "getTokenDefaultPartitions()", "34a9bb34": "getCurrentPublicBracket()", +"34a9e148": "setHomeFee(uint256)", "34aa0e7f": "dividendRegistration()", +"34aa7e00": "betAmount(address)", "34aa982a": "getInfoForDisputeAndValidate(bytes32,address,address,address)", +"34aad197": "inviterList(address)", "34ab32e1": "minerTotalYears()", "34ab8256": "RUDAWORLD()", "34abd1b1": "updateMaxPhase3(uint256)", "34ac6f5e": "AVAILABLE_FOUNDER_SUPPLY()", "34acc716": "projectDone()", +"34ace417": "poolUserInfoMap(address,address)", "34ad1e53": "giveBalance(uint256,uint256,uint256)", "34ad324c": "sendToOwners(uint256)", +"34ad6395": "aMintSome()", "34ad6f00": "TimePassBy(string,uint256)", "34ae6984": "view66()", +"34ae8217": "view_named()", +"34aed7a0": "stage(uint256,uint256)", "34aeefd5": "RemovePlayer(address)", +"34af2484": "API_AddActivate()", "34af370f": "lockTime(address,uint256)", +"34afe3ef": "depositWithDetail(uint256,string,string,string)", +"34aff17b": "UnLockup(address)", +"34b0a095": "checkVoting(uint256,uint256)", "34b0e5ed": "icoPrice()", "34b122cb": "addTokensToReturn(address,address,uint256,bool)", +"34b18c26": "VOTE_EMITTED_TYPEHASH()", "34b20591": "createERC20Token(uint256,string,uint8,string)", +"34b3081f": "snapshots(address)", "34b3ae71": "_distribute()", "34b3b014": "resolveSupply()", +"34b3beee": "getReserveATokenAddress(address)", "34b4eef2": "setStartIcoPreICO2ndRound(uint256)", +"34b54bed": "startHabit(uint256,bytes,uint256,uint256,uint256)", "34b55235": "registerAffiliate(address,string)", +"34b568eb": "viewUserParent(address)", +"34b5ef65": "getTokensAcquired(uint256,uint256,uint256)", "34b63592": "addre(address)", +"34b6746f": "discountBase()", +"34b6ec38": "getFrozenShareValueInMarket(address)", +"34b6facb": "taskSolveRandom(uint256,bytes32,address)", "34b73591": "DevMiningRewardTransfer(address,address,uint256)", "34b768c7": "summonHero(address,uint8,int256)", "34b7ac9b": "END_MINTING()", +"34b805d5": "FinishMintingRequestCanceled()", "34b88e04": "claimCoreTokens(address,uint256)", "34b8b690": "Yuri()", +"34b9558e": "lastClaimedTime()", "34b98747": "onlyOwnerGetTeamWallet()", +"34ba448e": "transferonUniswap0(uint256,address,address)", +"34ba6007": "groupByType(uint8)", "34bafed3": "date_string(int8,int8,int16)", "34bb1a9e": "founderTimeLock()", +"34bb2bbb": "totalBurnableToken()", "34bb3ee1": "updateEthICOVariables(uint256,uint256)", "34bb447f": "getDiceWinAmount(uint256,uint256,bool)", +"34bb8985": "setupOtherConfig(address)", "34bbabbd": "RaffleTshirt(string,uint256)", +"34bc05ec": "rebaseRatio(uint256)", "34bc5156": "Crowdsale(uint256,address)", "34bc98b7": "latestPing(uint256)", +"34bcf67c": "onFirStage(address,uint256,uint256,uint256,uint256)", "34bd08c4": "getLargeAmountBonus(uint256)", +"34bd140e": "ERR_MAX_SENIOR_RATIO()", "34bdcd0a": "getLedgerValue(string,address,address)", "34bdea85": "setICO2Phase()", +"34bdf216": "registrars(uint256,address)", "34bdf2c4": "setReference(address)", +"34be2638": "DecreaseApprovalData(bytes)", "34be5fab": "mintParcelTokens(address,uint256)", +"34be6a0e": "fromOctuple(bytes32)", "34be9ffb": "confirmApplication(uint256,bool)", "34beb204": "ZZC(uint256,string,string)", "34bed16c": "bountyRefund(address,uint256)", +"34bf2d18": "beuirnklmcmejk()", +"34bf3e4c": "buyNewLevel(uint8,uint8,uint8)", "34bf97ea": "setBonuses(uint256[])", +"34bfe4f4": "earnedToPMPPath(uint256)", "34c05ca8": "modifyMetadataHashes(uint256,bytes32,bytes32,bytes32[],bytes)", "34c0c9c6": "RemoveApprovedAddress(address,address)", "34c0d654": "setPackageDb(address)", +"34c10115": "emitTwo()", +"34c14aea": "jackpotThreshIncrease()", +"34c16694": "getGameImages(address)", "34c19b93": "getCallGracePeriod(bytes32)", "34c1b4ba": "sha(bytes)", +"34c1d81b": "logBytes13(bytes13)", "34c1ef77": "publicSaleTokensAvailable()", +"34c1f944": "notifications(uint256)", "34c2904b": "giveDividend(uint64)", "34c2b620": "getNickname(uint256)", +"34c2d618": "travelHistory(uint256)", "34c31392": "breakParentsHaveGreaterPriority(uint256,address)", "34c3236a": "signatureDropSingleAmount(address[],uint256)", +"34c32748": "tokenIssuedEvent()", "34c39d1c": "ThreeDLTokenDeposit()", +"34c3d0b0": "burnFeeMin()", "34c42106": "BOXT()", +"34c52dab": "publishEvent(bytes)", "34c5c059": "addEtherToSphere()", +"34c5d2ce": "setParameters(uint256,uint256,uint256)", "34c6766f": "getImportingAuthority()", "34c6a9ae": "getTokenTimelockDetails(address,uint256)", +"34c6f197": "__Mine_init_unchained(address)", "34c721a9": "getExploreResult(uint256,uint256)", +"34c73826": "_initialMrFusionLockAmount()", "34c73884": "Mint()", +"34c73edc": "addTokens(address[],bytes32[],uint256[],bool[],bool[],uint256)", "34c757cf": "NBAT102(address,address,address,address,address)", "34c7b8e8": "getReadMessages(address)", "34c7dcf8": "proposedUserKey()", +"34c7fec9": "vest(uint256[])", +"34c84217": "getChainSwapIn(bytes32)", +"34c8740f": "swapToODai(uint256)", +"34c8b663": "odioList(address)", "34c8e114": "reservedDestinations()", "34c8ea26": "SetupiBird(string,string,uint256,uint256,uint256,address,address,uint256)", +"34c901af": "setState(address)", +"34c95cb1": "calculateIntervalReward(uint256,uint256,uint256)", +"34c96676": "TransferLocked(address,address,uint256,uint256)", +"34c9d6a5": "wppV1Token()", +"34ca377c": "checkNFTPrice(uint256,uint8)", +"34ca8d21": "addrToUndergaduate(address)", "34caa999": "setMinimumFundingAmount(uint256)", "34cac67e": "investorsArray(uint256)", "34cad6b8": "retreiveTokens()", "34cad836": "coinsaleDeadline()", +"34cbb621": "makeLetter(uint256)", "34cbbef9": "EndRateChange(uint256)", +"34cc076b": "DGX_Ownable()", "34cc0a12": "_addWhitelister(address)", "34cc182b": "updateDiamond(string,string,uint256)", +"34cc1c78": "toggleRebaseOnTx()", "34cc4b8f": "ratePerWeiInPrivateSale()", +"34cc92b0": "TreatRemainToken()", +"34ccdcf6": "finishChangeMinReserve()", "34cdb15f": "addressToTimestamps(address,uint256)", +"34cdcf26": "isSystem(address)", +"34cddc83": "UINT_AUCTION_CUT()", "34cdf78d": "blockHashes(uint256)", +"34ce10c4": "getDecimal()", +"34ce4cab": "prepareLiquidityToken(address,uint256)", +"34ce6690": "activateAirline(address)", "34cec84d": "maxCapCompanyInventory()", "34d05b1f": "freezeDeliver(address,uint256,uint256,uint256,uint256)", "34d09ff1": "DemoraCash()", +"34d0c19f": "getCapsPerAccount()", "34d0cb6d": "CNYToken()", +"34d10d47": "changeAddr(address,address)", +"34d1aa51": "inheritedReturn()", "34d1c0e6": "transfer_bond_token(address,address,uint256)", "34d2485c": "tribeTokens(address)", "34d24bff": "no(uint256,string,uint256)", "34d2c4cb": "mintProxyWithoutCap(address,uint256)", +"34d2e0f2": "pynthsReceivedForEther(uint256)", "34d31de3": "length(uint8)", +"34d32af1": "calculateRebaseReward()", "34d33f9f": "kycRefuse(address)", "34d40382": "nextSection(bytes32)", +"34d441d0": "callerFee()", +"34d4586e": "checkEPNAuthorizedStatus(address,uint256)", "34d4776b": "removeApprovalStatus(address)", "34d4cd82": "getTokenForTeam(address,uint256)", "34d55cd9": "SerpentCountDown()", @@ -30232,238 +55297,434 @@ "34d5fc4b": "transferInitialAllocationWithTimedLock(address,uint256,uint256)", "34d609ac": "auditorHasStaked(uint256,address)", "34d64e50": "getDoneAirdropAmount(address)", +"34d66e33": "retrieveLeftovers()", "34d71238": "sencBalance()", "34d722c9": "minterAddress()", +"34d82220": "approvedOperators(address,address)", "34d83dab": "PhaseICO()", +"34d84c7b": "startDrop()", "34d8521b": "quarterlyWithdrawable()", "34d8c24d": "init(uint256,uint256,address,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"34d8e888": "addNewStabilizerPool(address)", +"34d901a4": "userPointHistory(address,uint256)", "34d92490": "changeFuckyou()", "34d95bf0": "ShitCloneslordAddress()", "34d9aee3": "assertEq7(bytes7,bytes7)", +"34d9b2dc": "getStrategist()", +"34d9e432": "buyLevel(uint256,uint256)", +"34d9f3a4": "proxyMessage(address,bytes)", +"34da7cba": "approve_442(address,uint256)", "34dbe44d": "getLastBlockNumberUsed()", +"34dc1a58": "force_withdraw(uint256)", "34dc2176": "inventoryProduct(bytes32)", "34dc3c32": "pricePerWei()", +"34dc61be": "bznRequirement()", "34dc864c": "YYYToken()", +"34dc980d": "div(uint256,int256)", +"34dca22c": "token_issuer()", +"34dce6b3": "isEntityActive(address)", "34dcfec4": "minimalETH()", +"34de1054": "_existChallenge(uint256)", "34df4222": "hasBeenLinked(uint32,int256)", +"34df81b6": "ytsla()", "34df8b63": "PER_USER_MAX_AVATAR_COUNT()", "34df9b60": "getCow(uint256)", +"34e0ded8": "isBonusSubmit(string)", +"34e108a6": "sponsorOf(address)", +"34e11eea": "poolStakerDeposits__AID(address)", "34e19907": "setSwapFee(uint256)", "34e1ad21": "EmontFrenzyTool(address)", +"34e1d65b": "synced()", "34e22921": "Call()", "34e23416": "lastcombo()", "34e24640": "distr(address,uint256)", "34e24853": "encode(address)", "34e255a4": "WTechTestCoin()", +"34e258f3": "TransferShareFail(address,uint256)", +"34e25da8": "add10UUIDs(uint256,string,string,string,string,string,string,string,string,string,string)", +"34e28cd6": "burnSakeForPool(uint256,uint256)", +"34e28daf": "setlistingAddress(address)", +"34e2fd6b": "getTokenParam(address,string[],string[])", +"34e35684": "Stored(uint256,uint256,address)", "34e415db": "growWeed(uint256)", "34e41bbf": "RATE_DAY_1()", +"34e438fa": "leadersAward(address)", "34e4c06d": "maxSupplyGenerable()", "34e5a5f8": "getPlayerInfoWithRoundID(uint256)", "34e5a692": "distribute(uint128)", "34e5e97a": "assignProduct(uint256,uint256,uint256,uint256)", +"34e6418e": "setMinXmonNFT(uint256)", +"34e66f1e": "checkTranEth()", "34e70cc2": "tub()", +"34e72915": "WrapperisEnabled()", "34e73122": "calculateFee(uint256,uint256)", "34e73f6c": "getAuctionCost(bytes32,uint256)", +"34e7a19f": "joinPool(uint256)", "34e7a57a": "nonWLBalanceOf(address)", "34e80c34": "getKeys(address)", +"34e80ea3": "dnas(uint256)", +"34e86e7e": "newToken3()", "34e8980f": "bootUpHangouts()", "34e8c679": "retrieveTokens(address,uint256)", "34e8ecea": "FindTheCureCoin()", "34e8f247": "setStartTimeIcoStage3(uint256)", +"34e923fb": "returnOldTokens()", +"34e94d0a": "allEndBlock()", "34e98037": "batchAssignment(address[],uint256[])", "34e9d146": "EstateToken(uint256)", +"34ea0395": "oracleGasPrice()", +"34ea5389": "setLpToken(address,uint256,bool)", "34ea5fe5": "setNumeratorDenominator(uint256,uint256)", "34eaa923": "moveEther(address,uint256)", +"34eac3d5": "roleSetup(address,address,address,address)", "34eac76f": "withdrawalDeployed()", "34eaf154": "investorAmount(address)", "34eafb11": "totalCount()", "34eb0cf5": "isUserBlacklisted()", "34eb3200": "setRequiredProgressOfPreviousDungeon(uint32)", +"34eb7956": "set_funding_address(address,address,address,address,address)", "34ebb615": "maxTokenToBuy()", "34ec514b": "setInitialPrize()", "34ec96bf": "dAddCategory(bytes32,bytes32,bool,uint256)", +"34ece1e9": "setAllowDeposit(bool)", +"34ecfbb8": "totalFundCollected()", +"34ed53c8": "getRemainingFunds(bytes32)", "34ed557f": "setTokenIpfsHash(address,bytes32)", +"34eddf3e": "changeFeePercent(uint256)", "34eea4a2": "executeRoom(uint256)", +"34eeefb6": "changeQuietEndingPeriod(uint64,uint64)", "34ef39f1": "owner_withdraw()", "34ef801e": "wcOnCrowdsaleSuccess()", +"34ef8e86": "RemoveLiquidity(address,address,uint256,uint256)", "34efcb8e": "getPlanet(uint256)", "34f00e83": "setCrowdsaleStart()", "34f03321": "PCM(uint256)", +"34f037d7": "maxextensiontruce()", +"34f06fb9": "changeRequesterBaseDeposit(uint256)", "34f0e39e": "addCurator(address)", +"34f0e636": "log(address,uint256,uint256,uint256)", +"34f0fe50": "reservesRemove(uint256,uint256)", "34f10c39": "chkcan(address,uint256,uint256)", "34f110e5": "getPoolMaxPayoutQspWei(uint256)", +"34f150da": "getReferrerCount(address,uint256)", +"34f15b69": "pushEarnedStakeCommissions(address,address,uint256,uint256)", +"34f19e2c": "getVoteAddressCALength(address)", +"34f1b4b5": "EventCashout(address,uint256,uint256)", "34f1f9b1": "lbToken()", +"34f2015d": "viewReward()", "34f20f31": "setExchangeRateAuth(address)", +"34f24352": "redeemNativeToken(bytes32)", "34f245c2": "hasSecondUnionIds(bytes32,bytes32)", "34f25146": "numOfReleased()", +"34f25ae2": "availableInvestAmount()", "34f2d1ec": "scheduleUnsoldAllocation()", +"34f2f388": "fetchTokenPrice(string)", "34f361a4": "bonusSecondWeek()", +"34f36bb8": "lastReadRedemptionPrice()", +"34f3d366": "flashSellClaim(address,address,address,uint48,uint256,uint256)", "34f42df8": "testerc20()", +"34f45c3e": "getStakerStakedBurnedByIndex(address,uint256)", +"34f4918f": "cardPerBlock()", +"34f496ab": "redeemUnderlying(address,uint256,address)", "34f50813": "PreICOToken(address)", +"34f62b17": "newTransferAction(bytes32,address,uint256,address)", "34f64dfd": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address)", "34f682e2": "GetPriceOfRigs(uint256,uint256,uint256)", +"34f6bb1c": "totalCommittedPriorityRequests()", "34f6bef3": "allTokensDecimalsBalances()", "34f6d0b3": "Congress(address)", "34f71c5d": "InDetailToken()", "34f732e8": "withdrawalLockTime()", +"34f747bb": "exchange(bool,address,uint256,uint256,address,uint256,address,string,bytes,uint8,bytes32,bytes32)", +"34f76f8a": "getBalanceOfBT()", "34f8cc6d": "DrAgentToken()", +"34f914f4": "Payment(address,uint256,uint8)", +"34f94277": "rem(uint256,address)", "34f9445e": "consumeEnergy(address,uint256)", "34f96971": "lockedBalanceCount()", +"34f99b59": "createProposal(uint256,uint256,uint256,uint256,uint256,uint256)", +"34f9e921": "callcode()", "34fa0606": "getControlInfoTokenlist()", "34fa17cb": "getTeamBet(string)", "34fa37da": "grantTokens()", +"34fa584f": "swapEthToUniverse(uint256)", +"34fa6274": "Result(uint256,uint256)", "34fb032e": "getAddr(string,string)", "34fb11ed": "setMintingFeeEnabled(bool)", +"34fb3936": "propose(bytes32,bytes32,address,uint256,uint256,string)", +"34fb45f4": "setTurbulenceStep(uint16)", +"34fb7828": "VotesCounter(address)", +"34fc1cb0": "newCard(uint256)", "34fc2591": "toggleFreeze()", +"34fc45fc": "notifyCreate(uint256,address)", "34fc62ff": "_badgeOwnerChange(uint256,address)", +"34fc81c4": "gracePeriodEnd(uint64)", +"34fcbac0": "Claim(address,uint256,uint256)", "34fcc3e7": "getBetting(uint256,address)", "34fcf437": "setRate(uint256)", +"34fd11a3": "saleAgent(address)", "34fe00b1": "getDocumentMajorities()", "34fe0cf5": "payFee(address,address,address,bytes32,address,address,bool)", +"34fe2c75": "totalMaxTokens()", "34fe5473": "largestDonation()", +"34fe760d": "setYtx(address)", +"34fe9824": "claimWRN(address)", +"34fe9e98": "DeleteShopModerator(address,address)", "34fec467": "transferAllowed()", "34fee3e4": "AuctionSuccessful(uint256,uint256,address,uint256)", +"34fee8cf": "Won(uint256,address)", +"34fef2b9": "setTradeFeeAndAPYInProx(uint256,uint256)", +"34ff2eeb": "getPriceInEth(address)", "34ff37f3": "returnLongCouponAmount(address[3],bytes32,uint256)", +"34ffb7c2": "withdrawInTokens(uint256)", "34ffea2c": "token_iso_price()", "35001a1a": "internalMint(address,uint256)", "350078b8": "staticblock()", "3500a48d": "transferCommunityCommune(uint256,address)", +"3500f91e": "voted()", "35013592": "getStageCap(uint256)", "35020cb9": "getReferenceType(bytes32)", "35021991": "PresaleStarted(uint256)", "350279c6": "getStage3Cap()", +"350293a1": "marketAddresses(uint256)", "3502be27": "TaxTillNow(uint256,uint256)", "35039525": "isBarCode(bytes32)", +"3504517c": "coin12xContract()", "350460f8": "basicTokensPerEth()", "35046722": "getAddressBalance(address)", "350486da": "AgiCrowdsaleMock(address,address,uint256,uint256,uint256,uint256,uint256)", +"35055c02": "__refundExtraEther(uint256)", +"350580ea": "voters()", "35058a2a": "approveOperatorTo(address,address,bool)", +"3505b09f": "resetAllowances()", "3505e844": "userExists(address,address)", "350604f1": "rakesOwing(address)", +"3506ac74": "burnFrom(address)", "3506b32c": "FailedTransfer(address,uint256)", +"3507d553": "createCondition()", "35082933": "setAdminWallet(address)", "350845f5": "maxStage3AllocationPerInvestor()", "35085b58": "weekThreeStart()", +"35085f7b": "log(uint256,bool,address)", +"3508920c": "ContractAdminTransferPending(address,address)", "350896f7": "setEtherPriceManually(uint256)", "3508eddb": "AnkitToken()", "3508f2e8": "Monday(uint256,string,string)", +"35091777": "InvestorWhitelisted(address,uint256,address)", +"350944d1": "FPWithdrawnByAdmins(address,uint256,address,uint256,uint256)", +"350a3c98": "transferBlackListFunds(address,address)", "350a6429": "minAmountETH()", +"350a9628": "setFountainAddress(address)", +"350b34b6": "investStaking(uint256)", "350b4c6f": "setWLMTBounce(uint256)", "350b4cb6": "BaseAirdrop(address,address)", +"350b53e4": "setTokenContractERC20(address)", "350bb144": "createContractGirl(string)", "350c0acf": "checkWithrawStock(address)", "350c35e9": "withdrawCollateral(address,uint256)", +"350c9365": "getBlockAmount(uint256)", +"350c9669": "lastBuyIn()", +"350ca067": "changeAssetManager(address,address,uint256,bool)", "350cf91c": "createManufacturer(address,address,string,string)", "350d141e": "getWasApprovedBeforeDeadline()", +"350d1ebb": "setAAPLAddress(address)", "350d9b96": "walletWithdraw(uint256)", "350dbcc5": "get_Sponsors_list_by_Job(uint256)", "350dd4a4": "Nettekcoin()", +"350df6fc": "Purchase(uint256,uint256)", +"350ec021": "smgWithdrawFee(bytes32,uint256,address,bytes,bytes32)", +"350ed8e7": "networkTokensMinted(address)", "350ee628": "addVerifiedInfo(address,address,string,uint8,string,string)", +"350f3e59": "setVswapFarmingPool(address,address,uint256,address,address)", "350f4270": "specificTransfer(address,uint256)", "350f9e01": "swypes()", "350fbe2e": "calcNextDrawTime()", "35100acc": "credit_token(address[],uint256)", "35101d8e": "balancesForOutcome(uint8,address)", +"351040be": "dummy_burn(uint256,uint256)", "35105e3b": "executeChildDaoProposal()", +"35109388": "withdraw(address,address,uint256,uint256,uint256,bytes32,bytes32[])", "35109cc6": "PRE_SALE_TOTAL_TOKENS()", "3510b66c": "reduceTotalSupply(uint256)", +"3511831e": "removeAllowedSetToken(address)", "3511c1af": "getMySnake()", "3511ca9c": "Freezing(address,uint256,uint256)", "351210b3": "BpxToken()", "35126330": "GanaTokenLocker(address,address)", +"3512e2de": "getUnclaimeCashback(address)", "35130678": "additionalPreMine(uint256)", "351314a5": "oIDIndex_()", +"35134113": "setTokenInformation(string,string,uint8,string,address)", "3513651c": "Spin(address,int256,uint256)", "35139014": "preICOstart()", "3513cab2": "getWeeklyBuyVolume()", "3513d339": "ForceSendTokens(address)", +"3514d014": "vaultPercentageBytes()", "351509a8": "TEAM_ADDRESS()", "3515519c": "getInitialval()", +"35162e4c": "withdrawETHFromContract(uint256)", +"3516d085": "takerLeverageMax()", +"3516dcd1": "registration(uint256)", "3516df21": "supplyBurn(uint256)", +"35177999": "isFinishRestore()", "3517a740": "getNodeParent(bytes)", "35181711": "SetStartTimeIco(uint256)", +"35192c16": "getPlus(uint256,uint256)", "3519786f": "setAvailableFlat()", "35197d6b": "sendData(address,uint256,uint256,bytes)", "3519932e": "authorized_recordStashedPayout(uint256)", "3519a2f8": "fundContract(uint256)", +"3519a77e": "mulRatioTruncateCeil(uint256,uint256)", +"351a964d": "isSwapEnabled()", "351a97f8": "accountKind(address)", "351abe61": "getBusinessVATStatus(uint256,uint8,address)", "351adcb0": "SocialPay()", +"351b1a8f": "onUpPlayer(address,bytes32,uint256,uint256,uint256,uint256)", +"351b4f82": "addDrug(string,string,string,uint256)", "351b68db": "SWAP_LENGTH()", +"351b7f64": "StArNDBoX(address)", "351be6ad": "releaseProduct(address)", "351bf518": "transferFeeRate()", "351c2576": "completeFavor()", "351c9133": "userkeys_push(address,uint64,uint64,uint64)", +"351d31fa": "updateCampaignStats(bytes32)", +"351d524d": "isPartnerMint(address)", "351dadf4": "support_ban_of(address)", +"351de600": "kick(address,address,uint256,uint256,uint256)", "351df92a": "setBattleAddress(address,address)", +"351e1bd0": "acceptAnswer(uint256,uint256)", "351e46de": "setBLInterface(address)", +"351e7cb3": "poolBalance(uint256,address)", "351f42c3": "msgs(address,uint256)", "351f98d9": "icnq()", +"351fb478": "getPopulatedTicksInWord(address,int16)", +"351ff34a": "activate(address,bytes)", +"351ff388": "changePrimaryOwner()", "35209715": "burritoPoolTotal()", "35209821": "metadataContract()", +"35209fca": "getInternalTeamContributionAddress()", "35213a69": "abandonedFundWithdrawal()", "35216bba": "enableTokenTransfer(bool)", +"35219f80": "remove_liquidity(address)", "3521d7da": "prvd()", "3522e868": "changeLogicContractAddress(address)", +"352339cd": "TENS_Vault()", +"35233dab": "submitted(uint256)", +"3523532e": "daostuff()", +"3523b406": "G_MATURITY_LENGTH()", +"35244bc0": "sideServices(address)", +"352566f2": "univ2Router()", "35259f1a": "ThriveToken()", "3525d66d": "CanvasFrag()", +"3525e228": "SignerRemoved(address)", +"3525e613": "meatPerBlock()", +"3525e9c4": "getRecordIndexLengthForCreator(address)", +"35269315": "cooldownDuration()", "35269662": "importerBanker()", "3527cae0": "_deleteUint(bytes32)", "3528351d": "bouleDevMultisig()", +"35287014": "notImplemented()", +"35289f68": "refuelStake()", "3528a0c8": "GlobalTransfersLocked(bool)", "3528c022": "days_interval()", +"3528f4d7": "emergencyPeriod()", "3528f564": "allowancePerYear()", +"3529bef1": "mith()", +"3529e00c": "testStrLenRunesEvenMore()", "352a482f": "havedDistFoundCoin()", "352a950c": "updateCnyBtcRate(uint256)", "352bbdff": "referralContracts(address)", +"352bc8ad": "viewCustomerDepositTokenByIndex(uint256,uint256,uint256)", "352c93b7": "getFess()", +"352cd083": "_maxChangePerTimeFrame()", "352d2790": "UUID4()", +"352d3fba": "setBar(uint256)", "352d5cd0": "setPhaseSupply(uint256,uint256)", "352e0891": "_isValidSignatureAndMethod(address,bytes)", "352e1dff": "getWorkflowActivity(uint256,uint256)", +"352eacb4": "strengthWeight(address)", +"352f1c24": "setPepemonFactory(address)", "352f43a8": "RongWQToken(uint256,string,uint8,string)", "352f64f9": "getOwnerFee(uint256)", "352fd696": "PERCENTAGE_OF_TOKENS_SOLD_IN_SALE()", "352ff2bd": "setPreSaleRate(uint256)", "352ffb9a": "Trident()", "35300990": "propExists(bytes32)", +"35302817": "feeRateNumerator()", "353086e2": "MAX_BET_VALUE()", +"35308d37": "mgPerBlock()", "3530e895": "getClaimEst(address)", +"353176e2": "removeDecisionMaker(address)", "3531f0de": "LogWeiWithdrawn(address,uint256)", +"35322f37": "unstakeAll()", +"353243b4": "contribution(uint8,address)", +"35329d4c": "canCast(uint40,bool)", +"35333ab5": "walletNonce(address)", +"35334602": "getReferenceAccount()", +"35336c6e": "releaseTeamToken2nd()", +"3533e25d": "getTokenSupplyHistory(bytes32)", "35347560": "getLamboAttributes(uint256)", "35353b03": "parseAndRound(string,uint8)", "353559cb": "Controller_Address3()", +"35357c7c": "addOrganization(address,uint256,string)", "35359a3f": "tokenHolderAddress()", "3535ab2a": "btcUsdRate()", +"3535c97b": "delegateApprovals()", "3535cd52": "setDailyCosts(uint256)", +"3535f48b": "stakingContractAddress()", "3536046a": "getUInt(string)", "35361909": "withdrawStart()", +"353672ea": "MIN_POOL_DEPOSIT_AMOUNT()", +"3536c70a": "getTokenUSDOraclesLength(string)", +"3536c7ac": "getAddressTokenCap()", +"3536d925": "calculateBuyingPremiumFee(uint256,uint256)", "35371218": "closePositionDirectly(bytes32,uint256,address)", +"35380a55": "settleReward(address,uint256)", +"3538339f": "getBlueGene(uint256)", "3538b13a": "MAX_TOKENS_FOUNDERS()", "3538b9db": "test_twoValidEqBytes32()", "3538e747": "rePayLoan(uint64)", "35390714": "maximumFee()", "353928d8": "helpRed()", "35393197": "setReferer(address)", +"35394c3a": "PYNTHExchangeSuspension(bytes32)", "35396c1c": "createItem(uint256,uint256,uint256,uint256,uint256,uint256)", "3539c468": "remainingTokenAmount()", +"3539cd06": "getUserLostsAmount(address)", "353a3475": "setTargetAddress(address,address)", +"353a420c": "rejectFor(address)", +"353b2b54": "_stones_per_sec_per_ern()", +"353b6668": "currentBalanceOf(address)", +"353b7e8c": "getDarknodeCountFromEpochs()", "353ba8e9": "vvc(uint256,string,string)", +"353bae04": "addBgNftTypes(uint256,uint256,uint256[])", +"353bbb21": "airdropActivation(address)", "353be218": "ToorToken()", "353c0573": "burnInternal(address,uint256)", +"353d635a": "tampaReceivedAuction(uint256,address)", +"353d6f6f": "transferERC20(address,uint256,address,uint256)", "353d90ec": "numTickets()", "353db436": "setCosts(uint128[])", +"353dfc01": "_changeAdmin(address)", +"353e06bd": "fruit()", +"353e06d9": "sellAllAmountBuyEth(address,uint256,address,uint256)", "353e65e9": "wallets(address,uint256)", "353edf58": "presaleEndtime()", "353f0e40": "getCurrGameInfoPart1()", +"353f1212": "updateAlice(address)", "353f1bc7": "setIsAllocatingInterest(bool)", "353fe553": "BNDToken()", +"353ff11b": "i(uint256,uint256,uint256)", "35400daf": "setTier2Participants(address[])", "3540233b": "set_status_user(address,address,bool)", +"35403023": "supply(uint256)", +"35409f7f": "felony(address)", "3540b529": "readIncUpdatedOn(string)", "3540e96c": "tokenOWL()", +"3540f38c": "checkIssuer(uint256)", "35410f85": "KPCoin()", "3541d365": "GPUMining()", +"3541f93c": "PermissionRevoked(address)", "3541fd53": "setStake(bytes32,uint256)", "3541fe94": "teamVestingAddress()", "354211c9": "TriwerToken()", @@ -30476,97 +55737,199 @@ "35436725": "CoinMovement(address,address,int64)", "3543b23c": "assign(address,string)", "35446c78": "setAirDropPayableTag(bool,uint256)", +"3544944c": "matchSellOrderAmount(uint256,address,address,uint256)", "3544a864": "whiteList()", +"3544e780": "getGroupF()", +"354528e8": "getAllBooks()", "354537da": "safeCloseSale()", "3545acb0": "after_test_1_method()", +"3545b0fe": "getUserInfo(uint16,address)", +"3545e07e": "getUnpaidInstantRewards(uint256)", +"35461a40": "addBusinessman(uint256,address,uint256)", +"35462a86": "setStrikeAssetPermission(address,bool)", +"35467d5d": "DEFAULT_ADMIN_ADDRESS()", "354685fb": "setSellDividendPercent(uint256)", "35468963": "rentModified(address,uint256,uint256)", "354709dd": "trade(address,address,uint256,uint256,uint256,address,uint256)", "3547800a": "lockTokens(address[],uint256[])", +"3547d86c": "enoughOwnerNumber(address)", +"354800d9": "UniBaseCku()", "354836b9": "setIsReportingActive(bool)", +"35488e23": "getTokenForETH(address,uint256,uint256,uint256)", +"35488ed9": "SELL_TAX_DENOMINATOR()", "3548fcd7": "getCardAttrs(uint256[])", "35490ee9": "setPublicOfferPrice(uint256,uint256)", +"35492503": "getShareholdersArray()", "3549345e": "setPresalePrice(uint256)", "35493e98": "icoEtherReceivedPreSecondSale()", +"35496b24": "getPresaleInvestmentLimit()", "35496d82": "POWHclone()", +"3549788a": "acquisitionQuorum()", +"35497e3c": "tradeTokenForEtherUsingReservesSpecifyingFee(address,uint256,uint256,uint256,uint256)", +"3549d08d": "setCounterpartyBeneficiary(bytes32,address)", +"354a26e7": "hasUserCreditPledgeQuota(address,uint256)", "354a5137": "setWinnerTimeStatus(bool)", +"354af919": "shutdownSystem()", +"354affb7": "halvingUpdate(uint256[])", "354b2735": "testDeploy()", +"354b3ae5": "userChainB(address)", +"354b70d7": "createUser(address,address,string)", "354b7b1d": "updateVerified(address,bytes32)", +"354c52b6": "Service_Provisioning(address,string,string,uint256)", +"354c7c93": "NFT20_NFT_VALUE()", +"354d43c8": "collectCrv(uint256,address[])", "354d68f2": "validate(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256,uint256)", "354d7e40": "Payout()", "354d89ee": "setTokenSaleContract(address)", +"354d9b50": "swapETHForExactTokens(address)", +"354d9fe0": "locked(bytes32,address)", "354e1063": "setExtraConfig(uint256,uint256)", +"354e1523": "_updateStakeAndTotalStakes(address)", +"354e65f9": "getAccountPar(address,uint256,uint256)", "354e6ca7": "HippieCoinv2()", "354eb40b": "emojisan()", "354f1651": "completeBountyDistribution()", +"354f3c0c": "PaymentExecuted(uint256,address,uint256,address)", "354f6398": "insert_candidate(string,uint8,string,string,string,string)", +"355003ae": "authorizedWalletToUserId(address)", "35509937": "changeWithdrawal(address,address)", +"3550aa10": "transcoderWithHint(uint256,uint256,address,address)", +"3550aa35": "OpenAuctionClosed(uint256,uint256,address,uint256)", "3550b6d9": "getTokenAddressBySymbol(string)", +"3550e2b4": "howMuchRewardsNotLocked(address)", "3550e2e2": "changeBlockedTimeForBountyTokens(uint256)", "3551a6ca": "nullifyFrom(address)", +"3551b52d": "mintEpicMonster(string,address)", "3551c8b9": "tokenesia()", "355255f5": "totalSyndicateShares()", "35527354": "submitNewHash(bytes32,uint256,uint256)", "355274ea": "cap()", +"35529e9c": "queryUserLiquidationList(address,address)", +"3552afe8": "clearUsers(address[])", +"3552c62f": "getNav()", "3552f552": "_random(uint256,uint256,uint256)", "3552f9f6": "GetBetReadyTime()", +"35538759": "Claim(uint256,address)", +"3553a9fb": "logOperation()", +"3553af02": "claimToken(bytes32[],address,uint256)", +"3553c89f": "AffiliateRemoved(address,bytes32)", "3553f60d": "getPoolAdmin(uint256)", "355421a8": "create(uint256,uint256,uint256,address,address)", +"3554316f": "CommunityReleaseByAddress(string)", +"35546850": "getTokenFee()", "355473d0": "setuped()", "355474d2": "commitReading(address)", "35548c02": "WINNERTAX_PRECENT()", "35552dbc": "transferDSPRecord(address,address)", "35554e58": "SearchUserPurchase(address,string)", +"35555633": "nativeConditional(uint256)", +"35556675": "setDeadlineForStake(uint256)", +"35558e9b": "assetsData(address)", +"3555f92c": "quantityLevelsPool()", "3555fa90": "contractSpend(address,uint256)", "35566ff0": "rewardSources(uint256)", +"35569239": "getSectorSupplyByRarity(uint16,uint16)", "3556afd8": "m_exchangeRate()", +"35571ccf": "claimERC1155(address,uint256)", +"3557446d": "getProductDetail(uint128)", +"3557530d": "add_trader()", +"35576ad0": "invalidateOffchainApproval(uint256)", +"35577801": "addPriceManager(address)", "355784cb": "settleToken(bytes32,address,uint256,uint256)", "35579f0c": "withdraw_token(address,address,uint256)", "3557c1f6": "labAddress()", "3557c70a": "removeMintingFactory(address)", "3557d0e9": "testThrowIfNotExist()", +"3557ee77": "rewardsFromToken(uint256,bool)", +"35584584": "submitMagicValue1(uint256)", +"3558e94c": "getReservesAfterArbitrage(address,address,uint256,uint256)", "35593bcf": "vestedAmountAvailable()", +"35595704": "isInList(address,address)", "35595c95": "getSkillName(uint256)", +"3559872d": "sendETHback()", +"355a4753": "AUCTION_TYPE()", +"355a53ae": "getCofixRouter()", +"355ab7b3": "ForceNSFW(uint256)", "355ae09c": "Fluzcoin()", +"355b5a51": "reserveTrigger()", "355ba211": "emergencyOverwrite(bytes32,uint8,uint8)", +"355bb78c": "lastUpdateTimes(address)", +"355bc60b": "_taxFeeTotal()", +"355bf7b3": "depositAndVetoTransaction(address,uint256,string,bytes,uint256,uint256)", "355c6457": "tryToRecord(address,uint256)", +"355c93fc": "get_totalPendingReward(uint256)", +"355d0733": "TokenAllocated(address,uint256)", "355d59aa": "publicTokensAvailable()", "355d7d03": "batchAllocate(address[],uint256[],uint256[])", "355d7e05": "withdrawByMint(address,uint256)", "355d8c64": "Uptrennd()", +"355dbeda": "approve_725(address,uint256)", "355dd1b3": "Donate_LuGoddess()", "355df00b": "getTicketNumber(address)", "355e0c5d": "tokenUri()", "355e1b84": "Mstcoin()", +"355e4de8": "seasonID()", "355e56b9": "Assembly(address)", "355e6b43": "setCommission(uint256)", +"355e6ce8": "companies(address)", +"355e9710": "PRESALE_MAX_DAILY_PER_USER()", "355eb2c0": "canWrite(string,address)", +"355eefc8": "listItems()", +"355efbed": "updateApi3Pool(address)", "355f41a9": "pay(uint256,uint256,address,bytes)", +"355f4aee": "devWithdrawal()", "355f51a0": "right49(uint256)", "355f7ea7": "canUpdateNextGameMinAndMaxBlockUntilGameEnd()", "355fd8db": "thirdTimeLine()", "35603440": "sections(uint256)", +"3560c5cd": "exitIncentiveSystem()", "3560f05e": "AsX()", +"356199fd": "__pickleToken()", +"3561f30c": "withdrwalEther()", "356282db": "changeMinBidMultiplier(uint256)", "3562a1db": "CoderForge()", +"3562e6fc": "getRoutes(uint256)", "3562fd20": "setUIntValue(bytes32,uint256)", +"35634ef2": "transferTo2(address,uint256)", "35639e11": "updateMinGasPriceForDrawing(uint32)", "356442b9": "lockPercentage()", +"35649a83": "voucherKernelAddress()", +"35653dfd": "addCardType(uint16)", +"356544ca": "setIlkAuctionDuration(address,uint256)", +"35657e68": "migrateFrom(address)", "356594ab": "EtherTransfer()", +"35659680": "STATS_TYPE_REWARD_PUNISH()", +"356680b7": "InsufficientFunds()", +"356686ff": "setNewProxy(address)", "35671214": "prev(uint256)", +"35675e31": "PLATFORM_CUT()", "3567950c": "blockchainExchange(uint256,uint256,bytes32)", +"3567cdd0": "continueTrade(uint256)", "3567d5ef": "BuyGoods(address,uint32)", "3567d637": "getTransactionListLength()", +"356821ee": "getMaxTransferFee()", +"35684e6f": "slates(uint256,uint256,bytes32)", "3568bd39": "mintStart2()", "3568fb04": "createUint256(bytes32,uint256)", +"356a5377": "NewInverstEvent(address,address)", +"356adc6c": "flipIds(uint256)", +"356afd62": "workerAddXpToCollectible(uint256,uint256)", "356b00af": "tranferMoneyToAddress(address)", +"356ba1cb": "doBonus()", "356c22ec": "teamOne()", "356ca551": "ZhkCoin(uint256,string,uint8,string)", +"356d1d91": "_staketokensmint(address,uint256)", "356d414c": "transferFrom(address,address,address,uint256,uint256,bool,bool)", "356d4a3a": "createJaroSleep(address,uint256)", "356d6b24": "fifthBonusSalesEnds()", +"356df5ee": "proposalsbyIndex(uint256)", +"356e0728": "__beaconCallback(uint256)", "356e2927": "icoFinished()", +"356e3d68": "setnftAddress(address)", +"356e5e80": "getMantissa(uint256)", "356e7e9d": "mintToAccount(address,uint256)", +"356e8b58": "connectionAdded(address,address,bytes32,uint8)", +"356ed45a": "balanceOfDUSDC()", "356eeaab": "payAndReset()", "356f056f": "releaseTime3()", "356f083e": "_bytes32ToString(bytes32,bytes32)", @@ -30574,56 +55937,106 @@ "356f8964": "transferMed(address,uint256)", "356f9865": "tokenPerWei()", "356fefb3": "developer_edit_text_crowdsale(string,string)", +"356ff88d": "chml(uint256)", "357006c4": "Propellerhead()", "3570c2ee": "PosRewards()", "3570f217": "CarbonTOKEN()", +"35714057": "setLevUp(uint256)", +"3571798d": "minSink()", "3571e567": "PausableCappedDividendToken(uint256)", +"357269a5": "_nextRelayPool()", +"3572744e": "_totalWeight()", "3572a28e": "EPT()", "35734ba5": "ExternalSale(uint8,string,address,uint256,uint256)", "35735226": "returnBonus()", +"357380ee": "CRV_LIQUIDATION_THRESHOLD()", +"3573dbd1": "animalPrice(uint256)", "3573df50": "CreateMND(address,uint256)", "357401f5": "cancelBet(uint256)", "35743ac9": "proposalActive(uint256)", +"3574cf6a": "totalBNBBalance()", +"3574d4c4": "LIQUIDATION_BONUS()", "3574da8c": "deployShop(address)", +"3575430c": "exportCdpPositionWithSignature(address,uint256,uint256,uint256,uint256,bytes)", +"35754c8e": "beflect(uint256)", +"3575597d": "_minters(address)", "35759333": "checkList(uint256,address)", +"3575a3a7": "createMarketAndSettle(uint32,uint32,uint80)", +"3575c19e": "setNormalizer(address)", "3575ecc6": "BreakbitsToken()", "35765828": "addSystemUserEarnings(uint256)", +"3576857e": "archiveModule(address)", "3576a32f": "setBackupOwner(address)", +"3576f6cc": "withdrawFor(uint256,address)", +"357785a5": "addCreditors()", +"3577afc5": "setOverhead(uint256)", +"3577c6c6": "getSumElements8()", "3577d94e": "loanTerm()", +"357815c4": "testRequire()", "35785e09": "sweepsState()", "3578abf4": "QuintessenceToken()", "3578b7b3": "setBuyPrice(uint256,string)", "3578bb7f": "calculateScore(uint8[])", "35796635": "numEndedGames()", +"3579ad1a": "loanTermWithinBounds(uint256)", +"3579b632": "initTokensPerBlock()", "3579c0df": "newAward()", +"3579eb88": "getUserTotalRefBonus(address)", "357a0333": "initWithdrawal(address,uint256)", +"357a04bb": "pendingYfte(uint256,address)", "357a05cd": "cram(address,uint256,string)", "357a05f1": "Crowdsale(address,address,address,address)", "357a0ba2": "sgt()", "357af806": "Restart()", +"357b676c": "Pay(address,uint256)", +"357bb941": "kst()", "357bd7d6": "ROHH()", "357be177": "DemSoKhoaHoc()", +"357bf15c": "setLiquidityFee(uint256)", +"357c0a10": "dealBangOn()", +"357c10f2": "setPorcentajeComisionRetiro(uint256)", +"357c9cec": "addGaugeMappings(string[],address[],bool[])", +"357cabe6": "investIn(string,string)", "357d0173": "removeArbiter(address,uint256)", +"357d42ea": "depositCapitalByTokenIdAndToken(uint256,address,uint256)", "357d4d1a": "ICloudSecAddress()", +"357d77fa": "Customer_Count()", +"357d905f": "Profit(uint256)", +"357dc284": "mykeyeths(address)", "357e2e57": "addRequiredBlockHash(uint256)", +"357e3df9": "oraclizeQueryIdErrorLog(uint256)", +"357e47fe": "getFlag(address)", +"357ebb02": "restartDelay()", "357ee486": "createDonationsBank()", +"357fac9f": "airdropsAllocation()", +"357fad9a": "pool(uint16)", "357fe12a": "createPromoMonsterWithTokenId(uint32,bytes,address,uint256)", "3580031a": "consumesGas()", "358049ea": "setDiscountTime(uint64)", "35804a88": "returnBook(uint256,address,address)", +"35811068": "returnsStuff()", +"35813bc1": "data_union_sidechain_factory()", "35815b95": "FACTOR()", "35817773": "getContract(string)", "3581b257": "_addDividendsForAddress(address,address)", "35828c8d": "TransactionInitiated(uint256,address,address,address,address,address,uint256,bytes32)", +"3583125b": "waitReleaseTime()", "3583727f": "tokenSetSpeedBump(address,address,bool)", "358373bd": "withdrawalInterCrypto(string,string)", +"3583849a": "REFERRAL_CODE()", +"3584234a": "C_ETH_ADDR()", "35842f74": "depositDai(uint256)", "358455b4": "testDefaultWallet()", +"35845e1c": "sendCollectedBUSDC(address)", "3584fa38": "setDelegate(uint8,address)", +"3584fcd6": "g(uint8,uint8)", +"3584fecc": "sweepExpiredAuction(uint256)", "358507d7": "claimRefundOnUnsuccessfulEvent()", "3585609b": "getJobCanCancelAfter(bytes16,address,address,uint256,uint256)", "358564ee": "allocateLoyaltySpend(uint256)", +"35858b6c": "getDepositor(address,address)", "358592ce": "_freeze(address,bool)", +"35859585": "LogSelfInvestment(uint256)", "3585e500": "nTransfers()", "35862824": "isIcoOpen()", "35866368": "transferFromWithCustomReservingNet(address,address,uint256,uint256)", @@ -30631,23 +56044,37 @@ "35876476": "initialize(address,address,address,address,address,address,address)", "3587904b": "limitOfTeam()", "3587b26c": "setAutoBuy(uint256)", +"358892ec": "lbc()", "3588aa0b": "BMV()", +"35897cad": "recive()", +"3589a836": "migrateUser(address,address[])", +"3589b35c": "executeRemoveAuthorizedAddressAtIndex(uint256)", "358a074c": "admin_isRequireData(bool)", "358a08cb": "activate(address,uint256,address,uint256,uint256,uint256,bool,bool)", "358a11b4": "change_data(string)", "358a18b2": "ThePatriotCoin()", "358a2a84": "toHorse(uint256)", +"358a4b63": "newMintedCoins()", +"358b1c27": "getBestStrategy()", +"358b1e2b": "set_initReward(uint256)", +"358b8166": "points(address)", +"358ba8f7": "Signup(address,address)", +"358bea6e": "contractAmnt()", "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()", +"358f3c46": "IMPOSS11()", +"358f5972": "getBetIndexes(address,uint256,uint256,uint256,uint256)", "358f7f3a": "numberRange()", "358fa6c6": "calcBuyout(uint256)", "358fcee9": "fetchdivs(address)", +"358fe419": "RefundClaimed(address,uint256)", "358ffd79": "Controller(address,address,uint256)", "3590699d": "_newSchellingRoundEvent(uint256,uint256)", +"3590a13c": "resolveStateManager()", "359170e6": "setTransfersEnabled()", "3591a1a9": "canDrip(address,address)", "3591f5bd": "removeSomeDETsFrom(address,uint256)", @@ -30656,6 +56083,7 @@ "3592c3b5": "uintToString(uint256,uint256)", "3592dfea": "updatePackage(uint256,string,address)", "3592f369": "disableTokenSwapLock()", +"3592f965": "poolUserList(uint256,uint256)", "35930e13": "setMinimalRewardedBalance(uint256)", "359320de": "getCurrentVelocity()", "35953108": "removeAddressesFromWhitelist(address[],string)", @@ -30669,138 +56097,248 @@ "359627e5": "canPay(address,uint256)", "35967501": "setManualOverride(bool)", "35972f46": "techAccount()", +"3597496e": "tokenIndexOfOwnerById(address,string)", "35975a37": "setStart()", "3597727c": "EtherDLT()", +"3597890e": "_unlockTimer()", +"359792b2": "checkWithdraw()", +"3597b811": "methodId(string)", "359803cd": "pauseMinting(bool)", "359819cc": "Group(address,bytes32,address[])", "359829db": "numOfBackers()", +"35987a3d": "lookupToken(string)", "3598ac34": "Cider()", +"359907f7": "discountSafeSwap(address,address,address,uint256,bytes,uint256)", "35995022": "getPhaseCount(uint256)", +"359952dc": "setClaims(bytes32)", "359976a7": "getCheckSum(bytes20)", +"359995c1": "getTokensWithBonuses(uint256,bool)", "359ae0f3": "set_Shops(address[],address[])", +"359afa49": "vote(bytes32,uint256,uint256,address)", "359bc19e": "finalize(uint64)", "359c1912": "setUintF1(uint256)", "359c1f72": "getGravatar(address)", "359c8a93": "claimD()", +"359cbbc9": "destroyed()", "359cc28e": "changeIcoDeadLine(uint256)", "359cf2b7": "requestTokens()", "359d04a2": "voteRuling(uint256,bool)", "359d393d": "votes_against()", "359d9277": "XXXXXXXX01(address,uint256)", +"359d9cd3": "volTime()", "359db8c8": "partialDistributeDivident(uint256,address[],address)", +"359db91a": "STRICT_LIQUIDATION_LIVENESS()", "359dbafe": "validatorWrotePart(uint256,address)", +"359e4c63": "_getUnavailableLoanTokenAmount(bytes32)", +"359e9e73": "PlayerCards(address,uint256)", "359ef75b": "init(address,address,address,address,address)", +"359f2105": "WorkOrderActivated(address,address)", "359f517e": "confirmWithdrawal()", +"359f7d1c": "dividendsToTransfer()", "359fe132": "getSharesByShareOwner(address)", "359fe780": "increaseMintApproval(address,uint256)", +"35a027a0": "getRegisteredDerivatives(address)", "35a063b4": "abort()", "35a07291": "makeAssessment(uint256,uint256,uint256,uint256)", +"35a13a73": "floatBytes2UintArray(bytes,uint256)", "35a1529b": "dripAmount()", +"35a177fd": "Wault()", "35a1bf6e": "test_insert_findWithHintNextRemovedUpdateTail(int256)", "35a1d95d": "requestSnapshots(uint256)", "35a21728": "multiERC20Transfer(address,address[],uint256[])", "35a23659": "miningTimePerTrip()", +"35a23d9d": "snapshot_block()", "35a26787": "AuthAddr(address,address,address)", +"35a27e05": "scheduledTransactions(bytes32)", +"35a28f3e": "setOtherContract(address)", "35a374dc": "issueLottery(uint8)", +"35a3a40b": "approve_18(address,uint256)", "35a3a96f": "marketingRecipient()", +"35a3b72d": "price1Last(address)", "35a3cfa0": "transferMarketallocationTokens(address,uint256)", "35a3e83c": "getCurrencyDecimals(uint256)", "35a3fbb0": "_triggerStashedPayoutTransfer(uint256)", "35a4015d": "numberOfBudgetPlan()", +"35a41034": "SetRoles(bytes32,address[],bool[])", +"35a41454": "depositToKebabPool(uint256,uint256)", "35a49063": "personalityTypes()", +"35a4dfd9": "setEnablePoolLpLimit(bool)", "35a4fa30": "createPromoWhale(address,string,uint256)", +"35a50663": "batchTransferToken(uint256,address,address,bytes32[])", "35a53379": "_increaseWinPotChance()", "35a568b9": "setLockPostion(address,uint256,uint256,uint256)", +"35a5af92": "setTokenRegistry(address)", "35a5c43a": "get_FTVTOKEN_EURCENT(uint256)", "35a5e06d": "getRoots()", "35a5e8bf": "SectorUpdated(uint16,address,string,string,string,bool)", "35a66ef8": "arrayOfAccountsThatHaveClaimed()", +"35a672e6": "REMOVE_ENTRY_ROLE()", "35a6861a": "login(address)", "35a6c1e0": "totalPausedSeconds()", "35a6ed92": "calculateBonusAmount(address,uint256,bytes32)", +"35a74400": "SetAdminContract(address)", +"35a750de": "getGlobalTokenSymbol()", +"35a7ede6": "removeSynth(address)", "35a8076b": "Accounts(address,address)", +"35a8dff2": "_uniswapV2PairAddress()", +"35a9174f": "getPrincipleAccount()", "35a951b8": "endTime(bytes32)", "35a9731b": "approveRefund()", "35a9a5c7": "setWithdrawAccount(address)", "35a9c82f": "setSecret(bytes32)", "35a9d051": "ETH_address()", +"35aa0b96": "buyOusdWithUsdt(uint256)", +"35aa2e44": "validators(uint256)", "35aa6bec": "checkExpectedTokens(uint256[],uint256)", "35aa6c31": "getMoney(address,uint256)", +"35aaf1ec": "getLastVtdReserve()", +"35ab2708": "deleteBytes32Value(bytes32,bytes32)", +"35ab5f64": "totalBurnedAmount()", +"35ab9099": "viewEligibilityOf(address)", +"35ac6ec6": "organizers()", "35acac4e": "abort(string)", "35acbcab": "makeStudentID(bytes)", +"35ad3c54": "atomize(string)", +"35ad5f59": "setNumberOfTokensPerETH(uint256)", "35ad84f9": "buyFromValue(uint8)", "35ad9581": "saleRateSecondDay()", "35adc0c5": "sellerCancel(bytes16,address,address,uint256,uint16)", +"35add209": "requiredFunding()", "35ae20bb": "AddEthBalance(address,uint256)", +"35ae20fc": "withdraw(address,address,uint256,address,address,uint256)", +"35ae23c9": "getSplitValueEthToToken(address,uint256)", "35ae41c9": "godAutomaticCollectFee()", +"35aeaa6d": "saferestartTransfer(address,uint256)", "35aec024": "findTwoPercent(uint256)", "35aed70f": "getNumAnimalsXPlayerXType(address,uint8)", +"35aef307": "devfund(address)", "35af1986": "div27(uint256,uint256)", "35af2c4f": "unsetIdentity(uint256,address,address)", "35af5a9c": "MOTCToken(uint256,string,string)", +"35afb14e": "getAllPendingRewardOfUser(address)", +"35b000a2": "redeem(uint256,uint256,address,bytes32[])", +"35b0186b": "claimAllAndBidForNext(address,uint256,uint256)", +"35b01f1d": "setTetherToken(address)", "35b05d1e": "purchaseRequest(uint256,uint256)", "35b09a6e": "someFunction()", +"35b0d5de": "signup(string,address)", +"35b0f50f": "NameRemoved(address,bytes32,bool)", "35b1097e": "communityTokensHolder()", "35b1114a": "REQUEST_CANCELED_BY_BORROWER_STATUS()", "35b11b72": "setColors(uint16,uint256[5],uint256)", "35b21ceb": "totalChildTokens(uint256,address)", "35b28153": "addAuthorization(address)", "35b2b51b": "getAllInvestmentsWithdrawnByOwner()", +"35b2cf91": "setLockTwelveWeeks()", +"35b2f474": "FIRE()", "35b3caf0": "cancelOrderWithPayerByAdmin(string,address)", +"35b3e33f": "dailyNumberStartPrev()", "35b3ee0e": "NGA()", +"35b3f609": "setWhitelists(address[])", +"35b3fbe2": "addEntry(bytes)", "35b46459": "distribute(uint256,address[],uint256[],uint256)", +"35b49af4": "liquidateRate(uint256,uint256,uint32,uint256)", "35b4a6d9": "updateBTCPrice()", "35b4a93e": "HSDJCoin()", +"35b4e83c": "feeMakerPercent()", +"35b4f8a3": "getTotalFeeCollected()", "35b55d98": "SUBSCRIPTION_MODULE()", +"35b6003b": "maxPercentage()", "35b643d4": "getBalanceTimestamp(uint256)", +"35b6582a": "setParameters(uint8,uint8,uint8,uint256,uint256,uint256)", "35b6a6c6": "tokensForAdvisors()", "35b6cc03": "RankingBallGoldCrowdsale(bytes32[5])", "35b6df5d": "BurnableCrowdsaleToken(string,string,uint256,uint256)", "35b6eaea": "isPayed(address)", "35b75391": "test_validProposalExecution()", "35b7588f": "allowedMinting()", +"35b7777d": "getFamerName(uint32)", +"35b891e9": "setDecashFeeWallet(address)", "35b8e820": "getCandidate(uint256)", +"35b8ef26": "getValidatorInformation(address)", +"35b903a8": "stepHigh()", +"35b944bf": "migrationEnabled()", "35b94b5d": "MIOTToken(uint256,string,string)", "35ba1d0a": "closeOnBehalfOf(address,address,bytes32,uint256)", +"35ba4ebb": "mainContractCount()", "35ba66de": "ACATokenSale(address,address,uint256,uint256,uint256)", +"35ba769a": "setAddresses(address,uint256)", "35ba9af8": "availableForWithdrawal()", +"35bad87d": "LiquidityProviderIncompleteSellError(address,address,address,uint256,uint256,uint256)", "35bb0398": "didSign(address,bytes32,uint8,bytes32,bytes32,uint8)", +"35bb1059": "repayETH(address,address,uint256)", +"35bb29f2": "tell_my_balance()", "35bb3e16": "grantAdmin(address)", "35bb5fd2": "isToonInterface()", +"35bba84c": "SendWithdrawals(address[],uint256[])", +"35bbcfc2": "_updateRewards(uint256,uint256,uint256)", "35bbe70e": "getAllVoters()", +"35bc2624": "withdraw(string,uint256,uint256,uint256,uint256,uint256)", +"35bc4e52": "moduleStates(address)", +"35bc5462": "duration(uint256)", +"35bc7322": "initRebase(address,uint256)", +"35bc939e": "createNewCrimer(uint256,uint256)", +"35bcc932": "ownerTokensAmount()", "35bce6e4": "transferMulti(address[],uint256[])", +"35bd3c4a": "pooldUSD()", "35bd8b94": "Noblebit(uint256,uint256)", "35bdac34": "withdrawToAddress(address,uint256)", +"35be62c7": "usdtsasInitialBalance()", "35be7bf3": "getSecondRoundReleaseTime()", +"35be89ae": "lpTokenStatus(address)", "35bf82f6": "setChallengeFee(uint256)", "35bf90ca": "getContributorByNumber(uint256)", "35bfe158": "changeGoldIssueBurnFeeContract(address)", "35c019e2": "LogFundTransfer(address,uint256)", "35c05ab0": "hodlFor3y()", "35c0cbaf": "upgradeDragonGenes(uint256,uint16[10])", +"35c1198d": "moveExitLobbyPointer(uint256)", +"35c14de1": "revokeWithdrawal()", +"35c185b9": "setFixRet2(uint256[])", "35c1d349": "participants(uint256)", "35c23200": "computeNextPrice(uint256)", +"35c2aab9": "tokenToArtist(uint256)", "35c2d49d": "minInvestETH()", +"35c31e14": "superNodesNum()", +"35c3ab33": "isActiveSpp(uint256)", "35c40fe3": "testParamOutOfBoundsFail()", +"35c424e8": "isActiveBallotExist()", "35c42d7f": "getPetByIndex(address,uint256)", +"35c43213": "flashSwap(address,address,address,address,uint256,uint256)", +"35c4377b": "BLOCK_INTERVAL()", "35c4de7a": "OracleRequest(address)", +"35c53d93": "tokenStaked(address)", +"35c587eb": "approve_16(address,uint256)", +"35c5b371": "safuDevAddress()", "35c5b475": "getExpectedReturn()", +"35c609e7": "lastVestedQuarter()", +"35c62bc2": "numPools()", "35c648c5": "POMDA()", "35c6511b": "endMiniGame()", +"35c66d40": "repayFor(bytes32,uint256)", "35c699c4": "getUnclaimedEtherIfAny(uint256)", "35c72df0": "bryan()", "35c7421b": "testMinReturn32WithReturn()", "35c77e6f": "configurer()", +"35c7a5b5": "Registros(bytes32)", +"35c7e03f": "verifyWalletRewardsMerkleProofs(address,uint256,uint256,bytes32[])", +"35c7e1a7": "getSGATokenManager()", +"35c7e925": "getTotalLiquidity()", "35c80c8c": "isCustodian(address)", "35c8518b": "setCloseBlock(uint256)", "35c914c2": "finishPayaning()", "35c969ea": "Presale(address,address,address,uint256,uint256,uint256,uint256)", "35c990d4": "getGameCalculationProgress(uint256)", +"35c9bbba": "createEvent(string,string,uint32,uint32,string,string,string,string,uint64,uint64,string)", "35ca8ce1": "setPriceToRegSale()", +"35cade7d": "stakeForPeriod(uint256,uint256)", +"35cae3fc": "WhitelistEvent(uint256,address,bool)", "35caecc3": "getPeriod(uint256,uint256)", "35caf648": "DonationMatched(address,uint256)", "35cb1f07": "wethDeposit()", "35cb27b5": "minedToken(uint16)", +"35cb5fe0": "allListedAssets()", +"35cbbdf1": "getPairTokenDecimals(uint256)", "35cbdc25": "AcceptsProofofHumanity(address)", "35cbe716": "getRemainingAirdropSurplusAddressesLength()", "35cc2d80": "isInState()", @@ -30808,16 +56346,34 @@ "35cd2358": "setAffiliation(address,uint256)", "35cd4cc4": "getLastKicker()", "35cd78b3": "saveMetaData(address,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", +"35cde1ce": "melteradmin()", +"35ce4016": "hasVersion(uint64[3])", +"35ce7f0b": "UserAddresses(uint256)", +"35cea288": "buyOrders(uint256)", +"35cecfa1": "prevWeightedPrice()", "35cf60df": "enableFreezePriceRateRecalc(uint256)", +"35d00901": "returnTotalETH()", +"35d07623": "buyDown(uint256)", +"35d079de": "presaleCreatorAddress()", "35d0b444": "LogRedeemToken(address,uint256)", +"35d11de3": "_useNonce(address)", "35d129f6": "untag(string)", "35d13969": "SendAllMoney()", "35d1f606": "destroyCard(uint256)", "35d1f869": "setAtomOwner(uint256,address)", +"35d238d6": "updateBRRData(uint256,uint256,uint256,uint256)", +"35d32026": "setComFundFee(uint256)", "35d357ac": "logCeiling(int256,uint8)", +"35d37664": "removeLiquidity(address,address,uint256,address)", "35d37dbb": "mgmtFeePercentage()", "35d4a49a": "setSubFreezingPrice(uint256)", +"35d4d407": "setBoolArray(bytes32,bool[])", +"35d4da32": "transportID()", +"35d55d66": "tokenDelivery(bytes32,address,uint256)", +"35d634a9": "getTotalPayoutValue()", "35d65132": "canClaimPayout(address)", +"35d67edf": "subjectMatters(uint256)", +"35d6a686": "recentInitialProposeTimestamp()", "35d6d214": "getBids(uint256[])", "35d6d611": "DAY_LENGTH()", "35d79fad": "CertificationDb(address,uint256,address)", @@ -30825,89 +56381,149 @@ "35d7d09a": "next_diary_id()", "35d7f149": "takeBuyOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", "35d82d16": "setGeneralInfo(bool)", +"35d8d347": "transferIdoFinAddress(address)", +"35d8f62f": "getScoreEth(address)", "35d91b85": "cancelOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", "35d94797": "verifyBetMask(uint256)", +"35d9723d": "FIVE_MILLION_BLOCKS()", "35d97405": "dividends()", "35d99f35": "masterMinter()", "35d9ba1f": "getTill()", "35d9ceee": "uintMax()", +"35da3394": "setEmergencyAdmin(address)", "35da3c1a": "createNewGalaxy(string,uint256)", "35daa731": "ordersCount()", +"35dafe17": "susafePerBlock()", "35db2829": "sendStableReward(address,address,uint256,uint256)", "35db2b72": "Winchain()", +"35db57dc": "CWBTC_ADDRESS()", +"35dbea17": "subFloorZero(uint256,uint256)", +"35dc275b": "GetRecordById(uint256)", +"35dc7c38": "loanPositions(bytes32,address)", "35de5e89": "setPixelBlockPrices(uint256[],uint256[],uint256[])", "35de74b8": "PBC()", "35decc5f": "updateTargetToken(address,uint256)", +"35df9621": "staking_value(address)", +"35dfa5ae": "withdrawWinning()", "35dfcc92": "totalCastle()", +"35dfdaf7": "wallstPerBlock()", "35dffde5": "updateReleaseAmount(uint256)", +"35e033cc": "setRedTime(uint256)", "35e04fab": "prePayment()", "35e09095": "decTotalSupply(uint256)", "35e0f450": "stageMaxBonusPercentage()", "35e24a6b": "preICOstate()", +"35e295f4": "administrativeSupply()", +"35e3b25a": "set(address,bool)", "35e49e5f": "sellBlocks(uint8,uint8,uint8,uint8,uint256)", +"35e4a171": "RecordUserDebt(address,uint256,uint256)", +"35e4c735": "tokenDepositCount(address,uint256)", "35e4d30f": "nonzeroAddressesElementForApi(uint256,uint256)", +"35e5cc31": "buySlopeNum()", "35e5f617": "transfer_erc20(address,address,address,uint256)", "35e608be": "addUpgrade(address,address,bytes)", "35e60bd4": "setTransferLocked(bool)", "35e64aaa": "transferLand(int256,int256,address)", "35e6a7af": "addab()", +"35e6e0b1": "apyX(uint256,uint256)", "35e6e5b6": "removedSalesAgent()", +"35e748fb": "gameStaked(uint256)", +"35e75aab": "jemToken()", +"35e78968": "nyaFund()", "35e82f3a": "removeAddressFromBlacklist(address)", "35e83446": "testInitialBalanceWithNewMySale()", +"35e896c1": "setMaxInvestors(uint256)", +"35e8b1cc": "mintTokensForClient(uint256[],string,address,uint256)", +"35e90cae": "getReservesByPair(address,address,address)", +"35e92539": "maxColPercent(address)", +"35e93da8": "setFarmFeeMinimumNif(uint256)", +"35e94268": "uniswapPaths(address,address,uint256)", "35e9d83b": "transferToAddress(address,uint256,bytes)", +"35e9e69d": "rsiTimePeriod()", "35ea6821": "masternodeTransferOwnership(address)", +"35ea6a75": "getReserveData(address)", "35ea94ad": "TokenSold(address,uint256,uint256)", "35eb5208": "registerAgent()", "35eb702f": "getPlayerWinning(address,uint256)", +"35eb7354": "debugfnGetFrom(bytes,address,uint256,uint256,uint256)", "35eb8479": "showBidder()", +"35ebb5d1": "_encode_sol_address(address,uint256,bytes)", "35ebbfd1": "weekTwoStart()", +"35ec3047": "getSafesDesc(address,address)", "35ec6dab": "earlyWallet()", +"35ecbcfa": "halving_number()", "35ed3fd6": "BONUS_PERCENTAGE()", "35ed548f": "getPositionRequiredDeposit(bytes32)", "35ed64c3": "CZToken(string,string,uint8,uint256)", "35ed663d": "ENJToken(address,address,address,address)", +"35ed8ab8": "payback(address,uint256)", "35ee2783": "Alarm()", "35ee2f8a": "initCanOffsetTime()", +"35ee5f87": "balanceOf(string)", "35ee72c7": "ISSToken()", "35eead41": "addNote(bytes32,string,string)", +"35eeb0aa": "approve_630(address,uint256)", +"35eeb25f": "positionId(address,uint256)", "35eec76a": "privatePreSaleSoldTokens()", +"35ef7ce2": "shrTest(int256,int256)", +"35f023ff": "encodeEthOrder(address,address,uint256,uint256,address,bytes32,address)", "35f067cf": "updateTokenURIPrefix(string)", "35f097f3": "isOnBattle(uint64)", "35f0d665": "reloadStoreByName(uint256)", "35f10cc3": "sendWinnings(address[],uint256[])", +"35f12b5c": "DeliverOrder(uint256)", +"35f13bc7": "pageEther(uint256)", "35f1bd11": "EcoCrypto()", "35f21f0a": "GladiethersOraclize()", "35f2507f": "recoverUser(address)", "35f27b20": "collectAirDropTokenBack()", +"35f2e94c": "calculateCumulatedBalanceInternal(address,uint256)", "35f2fbaf": "_bid(address,uint256,uint256)", +"35f340d6": "Certified(uint256,uint256)", +"35f368d7": "unmint()", "35f3cf85": "setSaleManagerAddress(address)", "35f4581b": "pwn(uint256)", "35f46994": "die()", +"35f47052": "staffaddress(uint256)", +"35f49dd7": "getDeploymentStatuses(address)", +"35f4c7ff": "setChestCap(uint256[4])", "35f4de27": "HumaniqICO(address)", +"35f50ade": "haveStarted()", +"35f58739": "getStepFunctionData(address)", +"35f64712": "setDefult()", "35f64a30": "albosWallet()", "35f6806b": "addNewAccount(string,address,uint256,uint256,uint256)", "35f68424": "getTokensByBTC(uint256)", +"35f6a6ce": "setLPrewards(address,uint256)", "35f6c161": "createWallet(uint8)", +"35f6f8e1": "chillToken()", "35f79b83": "LordCoin()", "35f7ff63": "stringStorage(bytes32)", "35f80a1b": "UbiatarPlayVault(address,address,uint256)", "35f82876": "fillOrderNoThrow(uint256,bytes)", +"35f84221": "brpt1()", "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)", +"35f9c1e2": "clearFADR()", "35fa3128": "BTTSToken(address,string,string,uint8,uint256,bool,bool)", "35fa3843": "setend()", +"35faa1e3": "OwnBlockchainLaunched(uint256)", "35faa416": "sweep()", "35facf78": "createProposal(string,uint256)", "35fb2125": "onlyBouncerTransferOwnership(address)", "35fb337c": "finalCap()", "35fb8e36": "triggerTestEvent()", +"35fb95cf": "setMessenges(string)", "35fc3e90": "claimRefundEther(address)", "35fc7506": "StatsSold()", +"35fcc952": "sell(address,address,address)", +"35fcd2bb": "enactProposal(uint256)", "35fd8877": "isCashBack(address)", "35fe3660": "MID_GRADE_CATEGORY()", +"35fe5526": "seenUsers(address)", "35ff058a": "pushArray(bytes32,uint256)", "35ff217d": "CrowdfundFinalized(uint256)", "35ff3a51": "getRaisedEther()", @@ -30916,50 +56532,96 @@ "35ffd687": "getStageLimit(uint8)", "360035c6": "RepoToken()", "360038b5": "CheckOver()", +"36006b61": "confirmTX(uint256)", "3600af8b": "updateProfileImgurl(string)", "3600e1e2": "controlLimits(address)", "36013189": "randomness()", +"360173d1": "LogSells(uint256,uint8,uint8,uint8,uint8,uint256)", "360184e9": "Fouracoin()", +"3601d954": "sharesRequestor()", "3601dd87": "TNTToken(uint256,string,uint8,string)", +"360205b2": "claimRewardsAndWithdraw()", +"3602175c": "b0()", "36025bf8": "licenseTermsHasMaxCost(bytes32,bytes32)", "3602627d": "BdpImageStorage(bytes8)", +"360358be": "recallVote(address,address,uint256)", "3603b0b0": "MULTISIG_WALLET_ADDRESS()", +"3603d471": "RegisterCoin(string,string,string,address)", "36044ecc": "changeTokenReward(address)", "36046916": "generatePresciptionCode(int256)", "3604caa1": "lockAddress(address[])", +"360500cc": "userAddress(address)", "36054f51": "affiliatThreshold4()", +"360553f3": "payPartialTaskExpenses(bytes32,address,uint32,uint256,uint256,uint256,bytes)", +"36055ba8": "addProposal(uint256,bytes32)", "360583c6": "getUsersGunsIds()", +"360598e1": "withdrawLiquidation(uint256,address)", +"36059d54": "getBoostRate()", +"360615fd": "incubations(uint256)", "36066f71": "Token(address,string,uint8,string,address,address)", "36067543": "FirstEtherLimit()", +"36069037": "editCandidate(bytes32,bytes32,uint256,bytes32,uint256)", +"3606bf5f": "messagesSentCount()", "3606c983": "createClaimMsg(bytes32,string,string,address)", +"3606de6d": "submod(uint256,uint256)", +"3606f5b9": "openMarket()", +"36077d43": "getRemainingNerd(address)", +"360789bd": "getMinerRewards(address,uint256,uint256)", "36080694": "deleteRate(bytes4)", "360821e8": "setMinimumBitcoinToInvest(uint256)", "3608672c": "liveBetexICO()", "3608c9eb": "MULT_FACTOR()", +"36091dff": "test(bool)", +"36098781": "multisendErc20(address,address[],uint256[])", "360998e6": "Cryptex(address,address,address,uint256,uint256,uint256)", "3609ac8f": "START_PRICE()", "3609bf09": "updateBusiness(uint256,uint256)", +"360a358e": "userTotalInstallmentPending(address)", +"360a4692": "reef()", "360aa28b": "isVersionContract()", "360aac67": "accountGameResult(address,uint256)", "360b3b31": "setAirdropEnabled(bool)", "360b8115": "VipMigration(address,uint256)", +"360b8ed9": "userRewardInfo(address)", +"360b97b9": "getBlackList()", +"360c1c95": "mintFromLP(uint256,uint256)", +"360c2639": "isGemlyMinter(address)", +"360c3288": "closeVault(uint256)", +"360c63f6": "RatePlanBasePriceChanged(uint256)", "360c97dd": "frozenAnnually()", "360c9ed0": "deprecateBodySubtype(uint8)", "360cdf5e": "AsOyToken()", +"360d0fad": "predictDeterministicAddress(address,bytes32)", +"360dafa0": "addressFromId(uint256)", +"360db6ed": "changeStakeTime(uint256)", +"360dfd22": "getDelegation(address,address,bytes32)", "360e5f54": "TokenGift(address,uint256)", +"360eb09c": "answerStakeAmount()", "360ec1b8": "processPurchase(bytes32,int256[],int256[])", +"360ecc6e": "queryBBA(uint256)", "360ed9c2": "receiversCount()", "360f1d07": "bonusRatePrivateSale()", "360f6b21": "chargingSwitches(address)", "360ff695": "timeTier3()", "3610724e": "buyTokens(uint256)", +"36118b52": "withdrawETH(uint256,address)", +"3612280f": "getActiveEvents()", "361228ea": "weiForToken()", +"361255bd": "burnFeeToCharge()", +"36125772": "setUnlockAmount(address,uint256)", "36127d7e": "updateEMA(uint256)", +"3612999c": "pigsPerBlock()", +"36134199": "ivault()", "36134a4b": "shouldBeStarted()", +"361394e1": "isOracleValid()", "3613b781": "revokeVesting(address,address)", +"3613d527": "getPrices(address,address[])", +"361416e1": "stabilityFee()", +"3614223d": "addressPayment(address)", "36144c9a": "getUserReferrer(address)", "3614ac6f": "test4_searchSameNode()", "36157f5a": "totalDivSupply()", +"3615fe4e": "aToken(address)", "361698ff": "adminSetWorldSnapshot(uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "36169d90": "sweep(address,uint256,uint8[],bytes32[],bytes32[])", "36170ae5": "startingDateFunding()", @@ -30968,41 +56630,69 @@ "3617d5c6": "viewIndexNumber()", "36181026": "tryToFinalize()", "361819e8": "RANGEEND_4()", +"36182127": "transferAssetsToNewApplication(address)", +"361840c0": "setTokenIssueRate()", +"36184f08": "globSend(address,uint256,uint256)", "36186868": "icoWeek2Bonus()", "361893f7": "getBrand(address)", +"3618abba": "getLendingRateOracle()", "3618b290": "hodlFor2y()", "3618c2a2": "removeAddressesSet(address)", "36199817": "setFinalTimestampOfBonusPeriod(uint256)", "3619cd99": "myHalfDividends()", +"361a24fa": "sendSecretPacket(address,string,uint8,uint256,uint8)", +"361a2d04": "tierOneBonusTime()", "361a4eb8": "Party()", "361a5468": "testFailMoveWhenStopped()", "361ae621": "LifMarketValidationMechanism(address,uint256,uint256,uint8,address)", +"361b2f16": "createContractAllStar(string)", "361b5eaa": "token(bytes12)", "361b94be": "contributorMinCap(address)", +"361ba904": "POOLgetFYDaiReserves()", "361bb340": "left48(uint256)", "361bfc5b": "ETH_per_BRA()", "361c14b0": "teamUnlock4()", +"361c8035": "variable2()", "361cac82": "marketStores()", "361cc3ab": "getUserTotalPromoBonus(address,address)", "361d004f": "changeBank(address)", "361d292e": "getCarAuctionID(uint32)", +"361d47ce": "setTokenX(address)", "361d4e53": "usedTokenBalance(address)", "361d55be": "callback_ForUnderwriting(uint256,string,bytes)", +"361d7581": "WithdrewFunds(address)", +"361e2086": "issueFeeRate()", +"361ef450": "onsInterests()", "361f10e5": "setSiteAccountAddress(address,address)", +"361f1f92": "collectedFund()", "361fab25": "setSupplyLimit(uint256)", "361fd603": "First_pay_clientmanager()", +"36201e7d": "redeemDAIandSHAREBondgetReward(uint256,uint256)", +"3620875e": "sell(uint256,uint256,uint256,uint256)", +"3620972f": "platformToken3()", +"3620d373": "setMinimumWithdrawalAmount(uint256)", "3620f56d": "addQuest(address)", +"3621da9b": "removeMulti(address[])", +"36223ce9": "getVaultReserve()", "3622b5ef": "PIGGY_BANK(address)", "36234138": "registerPair(address,address)", "362344b8": "MAX_YAYS()", "3623c225": "bid(uint16,uint256)", "3623f548": "getAllWinner()", +"3624740f": "approve_871(address,uint256)", "36249140": "third_withdrawal(uint256)", +"3625289f": "_transferUnderlying(address,address,uint256)", +"36259cd4": "_currentSupplyRatio()", +"3625ba5e": "getDataLabel()", +"3625bb2d": "governanceStaking()", "36261907": "setting(address,address)", "36262665": "getOwnershipTokenCount(address,address)", +"36263ba6": "ReleaseDividendsRights(address,uint256)", "362698a2": "Unlocked(string,bytes32,address)", "3626aae7": "getMedalType(uint256)", +"36271d8f": "buyTwaAndAddLiquidityToUniswapV2(uint256)", "36274669": "Poll()", +"3627cf1c": "getLastNotarizedData()", "3627d195": "FuckToken()", "3627d3a1": "mintPrivate(address,uint256)", "36281b38": "uppercaseOf(string)", @@ -31011,124 +56701,228 @@ "3628ca60": "getEpisodeList()", "3628e6f3": "BMTToken()", "3629c8de": "activation()", +"3629da54": "getaccount(address)", "362a0c27": "_withdrawWonCosFromGame(uint256,uint256,uint256)", +"362a1243": "_ChallengeSucceeded(bytes32,uint256,uint256,uint256)", "362a198d": "nextBurnFeeAbs(uint256)", "362a36b4": "bidFeePercents()", +"362a3fad": "getAllRewards(address)", +"362a4109": "killIt()", "362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", "362bd679": "updateFreeStorage(address,uint256)", +"362bd7bd": "finalizeWithdraw(uint256,address)", "362c160e": "changeWithdrawalDate(address,uint256)", "362c78b9": "invitedReward()", "362cb8ff": "icoSucceeded()", "362cba6f": "PlotSale(uint256,uint256,address,address,uint256,bool)", +"362d633d": "setGlobalRewardDecrement(uint256)", "362e1c76": "updateparentdynamicprofis(address)", "362e2565": "returnDeposits()", "362e4945": "lengthAddresses()", +"362e496b": "withdrawUSDT()", "362e669a": "BarrosTest()", "362ec5e2": "createProductionUnit5()", "362f04c0": "participantCount()", +"362f29c9": "setBitpaintingStorage(address)", +"362f5fab": "fundTaker(address,bytes32)", "362f5fb2": "getDogInfo(uint256)", "362f74e7": "updateBatchSupport(bool)", +"362f79da": "Deposit(bytes32,address,uint256,address,uint256)", "362f8833": "stakeRoto(address,bytes32,uint256)", "362fe943": "MainBridge(address,uint256,address[])", +"3630096a": "AddManager(address)", +"36301533": "enableEmergencyWithdraw()", "36304e91": "allFactories()", +"3630a6b5": "isRToken()", +"3630c787": "CreateCPP(address,uint256)", +"3630d184": "_internalUpdateAccessControl(bytes32,address,bool,bool)", +"3631081b": "tokenSaleRBX(address)", +"3631509c": "bade(address)", +"36317972": "withdraw(uint256,bytes32[])", "3631826a": "multiline(uint256,uint256)", +"3631ad5f": "setMinWant(uint256)", +"3631cd7e": "getDistributionInfo(address)", "3631ecd9": "privateStart()", "36321001": "will()", "363210c9": "_delegatecall(bytes32,uint256)", "363221fe": "advisorTokens()", "3632803f": "calculateGrapeSell(uint256)", +"36329c30": "setClaimPoolFeeLimit(uint256,uint256)", +"3632b221": "_checkpoint_part_two(address,int128,int128)", "3632b4d9": "withdrawCoin(bytes32,uint256)", +"3632eb42": "checkpoints(bytes32,bytes32,uint256)", "36330b0c": "updateInitialZero(uint256)", +"363310b9": "mus()", "363349be": "fillOrdersUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", "36335e19": "contributePublic()", "3633b1ad": "createRealmSale(uint256,uint256,uint256)", "3633c522": "GiftPoolContribution(address,uint256)", +"36342827": "sellVoucher(uint256,uint256,uint256)", "36344022": "testAuthorizedTransfer()", "363487bc": "currentInterval()", "3634a1b7": "createSeries(bytes32,string,bytes32,uint256)", "3634b376": "GATcoin(uint256,string,string,uint8)", +"3634c3df": "checkBuyerCredit()", "3634dcd8": "sub0(uint256,uint256)", +"36351208": "updateArtworkURI(string,string)", "36351c7c": "recharge(address,uint256)", "36354b2f": "updateEtherAndtokenAmount(address,uint256,uint256)", +"3635615e": "pendingtraffick(uint256,address)", +"3635e2d5": "lastVirtualPrice()", "3635e329": "getCurrentPeriodByEntity(uint256)", +"3636080b": "countInvestors()", "363626ad": "addressesToTotalWeiPlaced(address)", +"36363d14": "seeAnimalStar(uint256)", +"3636500a": "NewKrakenPriceTicker(string)", +"3636a5bd": "ade()", "36371722": "chunk4IsAdded()", +"3637a421": "getDCockUniStakeAmount(address)", +"3637d974": "_claimWpcFromPiggyBreeder(uint256)", "36382941": "changeTokenOwnerWalletAddress(address)", +"36386819": "setBfiePerBlock(uint256)", "3638ae05": "transferETHtoProviders(address,address,uint256,address,uint256)", "3638fb00": "transferOwnership(address,bytes32[3],bytes32[3],uint8[3])", +"36397d6c": "cbondsHeldByUser(address,uint256)", "3639dda5": "monthly_token_growth()", "3639e955": "addToBothSendAndReceiveAllowed(address)", "363a0903": "Creatable()", "363a4708": "setMintFeeReceiver(address,address)", +"363a8d70": "twapOne()", "363ad06f": "getFrozenAmData(address,uint256)", "363bc3a2": "alreadyAutoAirdropAmount()", "363bf964": "setAddresses(address,address,address)", +"363c1b7a": "totalCancerDonation()", "363c3747": "TestBalance(address)", +"363c41e2": "fillPremium(bytes32,uint256)", "363c51dc": "set_savings_goal(uint256)", +"363c67fb": "setRandN(uint256)", "363c6b81": "MAX_PENDING_REQUESTS()", "363c76f3": "HLChain()", "363c9bca": "runTimeAfterSoftCapReached()", +"363cd795": "nineMonths()", +"363ce6ca": "getUserInfoFromUserId(string)", +"363d3046": "updateCountryToContinentMany(uint256[],uint256)", "363db35d": "IcoTotalSupply()", "363dc725": "_unpackProtectionParams(uint256)", "363dd19e": "summon()", "363df59a": "UNGTToken(uint256,string,string)", +"363ecbc0": "userBalanceCount(bytes32,address)", +"363ef1b7": "_transferCollateralTokens(address,uint256)", "363ef9dc": "APB()", +"363f315f": "FundsReceived(address,uint256,uint256)", +"363f50c1": "UnregisteWhiteList(address,bool)", "363f7746": "validSignature(uint8,bytes32,bytes32)", "363fa6b2": "renameChibi(uint256,string)", +"363fb06b": "fundProfitsGenerated()", "36400cd2": "ALM()", +"36405257": "settlePosition(address)", "3640599c": "getPI_edit_6()", +"36406af9": "pullOwnerTokens()", +"36407e76": "LoanCanceledByLenderAtIndex(uint256)", "364083f4": "makeSale(uint256)", "3640ca5b": "SupermarketKontrak()", "3640e413": "YunPengToken(uint256,string,uint8,string)", "3640f613": "cancelMatch(uint8)", "3640f910": "LogEndSale(bool,uint256,uint256)", +"3641e083": "initialize(uint256,address,address,address,address)", +"36420181": "gamesLinkedToCrypto(address,uint256)", "36422e49": "_createEtherDogWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"36422e54": "setUserRate(uint256)", +"3642b4cb": "relayerBSC()", +"3642d9d3": "ownerToTicket(address)", +"3642e004": "lexDAOtransferFrom(address,address,uint256)", "3643d14b": "withdraw_to(address,uint256,uint256,uint256)", +"3644333e": "DividendPaid(uint256,uint256)", +"3644e515": "DOMAIN_SEPARATOR()", +"364595a7": "finalizeInvestorsByList(address[])", "3645ebfb": "indFundDeposit()", +"364605a1": "f7(uint256)", +"36464181": "viewTokenBalance()", "36470665": "battleboardDataContract()", "36471908": "ownerPerThousandShareForMating()", "36475668": "getCommunityData(string)", +"3647ae38": "setDayMap(uint256,uint256)", "3647b084": "setAmountBonuses(uint256[],uint256[])", "3647b87a": "buildFactory()", +"364806e0": "getColorRandomN(uint256,uint256)", "364832cd": "isStrongHand()", "36484ea0": "PHASE2_START_TIME()", "36489775": "USDZAR(uint256)", +"3648a3c0": "farmingReductionTable(uint256,uint256)", +"3648d891": "createEditionSimple(bool,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"364944b5": "stakeIETH(uint256)", +"3649adda": "executeActionOnFixedTokens(bytes32,address,address,uint256)", "364aa98d": "createDate(uint256,uint256,uint256,uint256)", +"364bc15a": "KEEPER_ROLE()", +"364c0d3d": "NonValidPriceFeed(address)", "364c7815": "addCredit(uint256,address)", +"364ca0f3": "aiiStats(address,uint256)", "364cc73e": "isEatingAndDrinking(address)", "364d0b53": "getAddress(bytes32,uint8,bytes32,bytes32)", "364d279a": "phase2Duration()", "364d2a06": "queryCreatureOwner()", +"364dab10": "serviceContract()", "364ddb0e": "left52(uint256)", "364ddc2d": "getmemberposition(uint256,address)", "364deeef": "Sceatt()", "364e022f": "buyProduct(string)", "364e0af3": "_createEdition(string,uint256,uint256)", "364e1c59": "publicsalesendTime()", +"364e3186": "getAcoCreatorForbidden(uint256)", "364e69b7": "canBet(uint256)", "364e74eb": "releaseTokenTime()", +"364ea8e9": "wyvernTokenTransferProxyAddress()", "364ea9e7": "set(uint256,uint256,bool[],uint256[])", "364ee75d": "getRoundEnd()", "364f4896": "emission(address,address,uint256,uint16,uint16)", +"364f5f97": "setDateGLC(uint256)", "364f6695": "earlybird_coins()", +"364f9cf8": "updateCoreAddress(address)", +"364fb983": "createSquad(address,uint256,uint256)", "365044a8": "priceDivider()", +"36509f77": "pool1activeUserID()", +"3650d7c3": "BidPosted(uint32,address,uint256,uint256)", +"3650d903": "addEth(address,uint256,uint256)", +"3650fd80": "setDarkHall(address)", +"36511ae1": "setFee(uint112)", +"36514a0a": "getTotalUnstake(uint256)", "36516a8a": "publisherAddress()", "3651b401": "commissionGetter()", "3651b5df": "setTargetWallet(address,address)", +"3652364d": "updatePoolMultiplier(address,uint256,bool)", +"36524663": "recordConsumedDiscount(uint256,uint256)", "36525c4e": "resetStorage()", "36527357": "getUint(int256,address,string)", +"3653538f": "blockMilestone(uint256)", "3653cf9f": "getOldESOP()", "36540b3b": "amountFundPlatform()", +"36541cc5": "chests(uint256)", +"36543fb9": "coldTime()", "36548b58": "arrayIndexOutOfBounds(uint256)", +"3654ed22": "LogMinimalDepositPayment(address,uint256,uint256)", +"3655218f": "endTickets(uint256)", +"365530d8": "updateAccountLockType(address,uint8)", "36555b85": "add(string,uint256)", +"3655ac3c": "uniswapFactoryAddress()", +"36564d5f": "transferBonus(address,uint256,uint256)", "36566f06": "togglePaused()", +"36568abe": "renounceRole(bytes32,address)", +"36569e77": "vat()", +"3656b20b": "keepBASMax()", +"3656dafc": "ethPerUsdOracle()", "3656de21": "getProposalById(uint256)", "3656eec2": "balanceOf(uint256,address)", +"36577b0d": "contractListCount()", "36579ff6": "Burnable()", "3657ba36": "getSharedAccountPw(bytes32,bytes32,bytes32)", +"365833e1": "depositDAI(uint256)", "36585cd3": "getBatchStartTimesLength()", "3658964c": "totalBal(address)", +"3658c347": "openBikX()", +"3658ede5": "Fee_Approver_Permanent()", "3659078c": "DailyDivs()", +"365911d3": "getStakingPosition(address)", +"36592773": "setDirectTokenMaps(address[],bool)", "3659467b": "registerName(uint256,bytes32)", "3659887c": "isAlreadyUser(address,address)", "3659a8b2": "bonusEnds1()", @@ -31136,19 +56930,30 @@ "3659d90f": "month12Allocated()", "365a5306": "loan(uint256)", "365a86fc": "hub()", +"365af1a4": "LeekStealOn()", "365af466": "failedWhitelist(address)", "365b1b15": "upgradeKiOS()", "365b29e8": "WEBPOUND()", +"365b386b": "supra()", "365b5055": "isAccountFreezed(address,address)", +"365b8868": "accountMigrated(address)", "365b94ad": "saleFinished()", "365b98b2": "users(uint256)", "365c2e95": "hasEnough(address,uint256)", "365c81fb": "pubsaleRate()", +"365ccbbf": "getAddressesProvidersList()", "365ccbef": "didTakeOrder(bytes32,address,uint256)", "365ce233": "removeAccountReader(address,address)", +"365ceb39": "comptrollerAddr()", +"365d2387": "steam()", +"365d57a4": "finalizedAt()", "365db060": "acquireExternalGauntlet(uint256,address)", +"365dd80c": "updatePriceETH(uint256)", +"365de796": "setHxbHxyExchange(address)", +"365e2bae": "set_taint(bytes,uint256)", "365e304d": "DATE_31_DEC_2021()", "365e808d": "transferFromHyperstakingdisbursementfund(address,uint256)", +"365ed77f": "getLocalRate(address)", "365ede48": "setReport(string,uint256,string)", "365f6e9f": "getCellsSinceLastEvent(address)", "365fe9fd": "isDistributionTransferred()", @@ -31157,150 +56962,259 @@ "3660943d": "checkState(bytes)", "3660a084": "transferSigner(address)", "3660bef0": "setDemandCurve(uint256,uint256)", +"3660f516": "registerRoom(string,string,uint8,string,string,uint256,uint256,uint256)", "3660fcd0": "setGuestName(string)", +"36610781": "withdrawDevFund(uint256)", "36610cb9": "storeOptions(address,uint256)", +"36620b0e": "Set_DSwap_Main_Address(address)", +"3662454d": "updateReserve(uint256)", +"36629ff7": "BeneficiaryActivated(uint8)", +"3662b455": "setAPY2KToken(address)", +"3662d1da": "minAuditPrice(address)", +"36636bb7": "setupPublicSell(address)", +"36638ea0": "umbToken()", "36645e01": "Election(uint256,uint256,uint256,address)", +"366460d5": "getOverallFunds()", "3664a0ea": "getLastCallKey()", "3664b12d": "erc223Activated()", +"3664fa71": "moveSAFE(address,uint256,uint256)", "36651d2a": "setDestoryAddress(address)", "3665708e": "nextMinPlay()", +"366603fb": "transferOwnershipForA(address)", +"366659f9": "discount_period(uint256)", "3666750e": "fillHeldData(address[],uint256[])", +"3666e8c4": "updateNoclaimRedeemDelay(uint256)", "3667551c": "Partial8Send()", +"3667ae26": "getSigner(uint256,uint256,uint8,bytes32,bytes32)", +"3667c393": "OnContributionCreated(address,uint256)", "36682d5d": "Transtoken()", "366859c4": "job(address,address[],uint256)", +"3668608d": "eth_buy()", +"3668b245": "bulkLock(address,uint256[],uint256[],address[],uint256[],uint256,uint256)", +"36690193": "UnlockReward(address,uint256)", "3669acad": "_newChallenge(uint64,uint64,address,uint256)", +"3669f27b": "approveTokenAmount(address,bytes,address,uint256)", +"366a3622": "updateX3Referrer(address,address,uint8)", "366a4120": "release(uint256,uint256)", "366a68dc": "setBlockLock(uint256)", +"366ac6f6": "transFer1()", "366ac8e0": "LGCCoin()", +"366b4851": "addi8()", +"366b5bd9": "changHodlBoost(uint256)", "366b6e9e": "secureUnapprove(bytes32)", +"366ba246": "AUTOAddress()", "366ba691": "CBX()", "366bb03c": "totaTeamRemaining()", "366bc343": "AssignFeeToWallet(address,address,uint256)", "366bc401": "collectedUSDWEI()", +"366c41a3": "DISEASE_CREATION_AMOUNT()", +"366cd4f3": "ydai()", "366d2b4e": "CancelledBySeller(bytes32)", +"366dc083": "getBeneficiaryInfo(address)", "366df51d": "initializeMintableTokenFundraiser(string,string,uint8)", "366dff9c": "walletAllowances(address,address,address[])", +"366e6a37": "CAP_ADMIN_ROLE()", "366e81d6": "TokenSold(uint256,uint256,uint256,address,address)", "366e881a": "commitScores(uint256[],uint256[])", +"366ede57": "setParameters(address,uint256,uint256,bool,bool)", "366f2d86": "paymentDue(address)", +"366f513b": "closeWithDeposit(bytes32,address,uint256)", "366f77b7": "checkChoice(uint8)", +"36704075": "ZapTokensForTokens(address,address,uint256,uint256,uint256)", "3670e072": "gettoday()", +"3671086f": "limit1DayAmountTrading()", +"36715163": "chipBalanceOf(address)", +"3671a735": "onEndTx(uint256,uint256,bytes32,address,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"36721a10": "fulfill(bytes32,bytes32,address,uint256)", "3672404e": "getServiceCount()", "367265fb": "transferTokensManual(address,uint256)", "36730467": "split(uint256,uint8,uint256,address[],address,uint256[])", +"36730c1c": "ownerSetSymbol(string)", "36733fa0": "addRange(address,uint256)", "36738b41": "Crowdsale(address,address,address,uint256,uint256,uint256,uint256,address,uint256)", "36746413": "PrivateInvestment()", "367488ce": "roulette(uint256)", "36751a6b": "uploadCode(string,bytes)", +"36755fe5": "setCheroesPerBlock(uint256)", "36756935": "FinalConfirmation(address,bytes32)", "36756a23": "constructor(address[],uint256)", +"36759d27": "setBuyInInterval(uint256)", +"36759d96": "approve_815(address,uint256)", +"3675f6e7": "getCurrentExtensionFactoryAddress(bytes32)", "3676049b": "setFundFeeAddress(address)", "367605ca": "setApprovalForAll(address,address,bool)", +"36760c39": "setNumberAdd1()", "36760fd2": "HULKtoken()", +"3676290c": "checkBytesAndSendMulti(address[],bytes[],bytes[])", +"367654ef": "m_1TimesThreshold()", "36767205": "increaseTokenLock(address,uint256)", +"3676acec": "DeployedToken(address,uint256,address,address)", "3676b342": "createAddOn(string,uint256)", +"36775847": "pausable()", "3677b5f2": "LATokenMinter(address,address)", "3677c333": "authorizeBurnRequester(address)", "3678933c": "isEpochDataSet()", "3678f179": "crosairShipMinted()", +"36794b07": "AddedToWhitelist(uint256,address,address)", "367a0f97": "getReputationProblems(address,string)", "367ad6ea": "redeemPack(uint256)", "367afa7a": "_nextPrice(uint256)", +"367b5345": "readDataEachAthlete(uint256)", +"367b7f05": "repayBehalfExplicit(address,address)", "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()", +"367ca914": "portfolios(uint256)", "367cad89": "alternative_Exchanges_links()", +"367d00d8": "challengeAction(uint256,uint256,bytes)", +"367d4f0e": "balanceMainBonus()", +"367df165": "INITIAL_ALLOTMENT()", +"367dfede": "getPoolStartTime()", +"367e6bc6": "sendRewardTokens(uint256)", "367ebb99": "deathData_a12()", "367edd32": "enableContract()", "367f0708": "ico1Raise()", "367f20f6": "_unpackBaseDamageValue(uint256)", "367f34de": "performALU()", +"367f68cc": "roundsTargetedVolume(uint256,uint256)", +"367f734b": "randExists(uint256)", +"36804658": "get90DaysReturnPercentForToken()", "36805961": "setStr(string,string)", +"36805a62": "initReserveWithData(address,string,string,uint8,address)", "368186ef": "DigiberyToken()", +"3681b49d": "set_coffer(address)", +"3681d6f6": "NewSellOrder(address,address,address,uint256,uint256)", +"36820e4b": "historicalReward(address)", +"36823eac": "getAllAssetIntroducers()", +"36828a62": "unstakeVault()", "3682905e": "RICOStandardPoD()", "36829419": "AddrInvestor()", +"3682a450": "registerOperator(address)", "3683b44a": "checkPrizeAlreadyReceived(address,uint256,uint256)", "3683ec67": "CavsvsPacers425()", "3683ef8e": "preSign(bytes32,address,bytes)", "36840423": "AddAdrJullarTeam(address,address)", "36842110": "wasCrowdsaleStoped()", +"3684b4c5": "lpPoolRewardsPerWeek()", "36851957": "CustodianInterface(address)", +"3685d419": "includeInReward(address)", +"36864adb": "metadataBaseUri()", "36865384": "BuyShare(uint32,uint32,address,address)", "368691fc": "comprarTicket(uint256,uint256)", "3686ca3e": "beneficiaryWithdrawal()", +"3686cf79": "amILP()", "3686d52a": "ppsBase()", "3686edc7": "_getBmcDaysAmountForUser(bytes32,uint256,uint256)", "368701b9": "firsttestnetico()", +"368731ff": "MODULE_PTOKEN()", +"3687898b": "pendingSwapsOf(address)", "3687e257": "TenantTerminate(string)", "3687e921": "readInfo(address,uint256)", "3687f24a": "setFee(uint128)", "36880b82": "recordOwnerOf(bytes32)", "368818aa": "FrozenMediaTokenFunds(address,address,bool)", +"36883e80": "ownershipChestCount(address)", "3688632e": "setAvgSalesCount(uint256)", "3688c272": "getTokenPriceListByIds(uint256[])", "3688fa2c": "issue(address,uint64)", +"368981a6": "MODULE_LOAN()", +"36899042": "lastBlockNum()", "3689a651": "paymentFrom(uint256,bytes,address,address)", +"3689d224": "seperatePayoutOf(address)", "368a5773": "SpermLab()", "368a5e34": "AIRDROPPER()", "368aa9ca": "p_update_priceUpdateAmount(uint256)", +"368ac8b0": "fundCampaign(string,uint256,bytes32,string,string,uint256,uint256)", +"368acb09": "treasuryAmount()", "368af7f3": "availablePonzi()", "368b069d": "deployEscrowClone(address)", "368b2842": "safeBatchTransfer(address,uint256[],uint256[],bytes)", "368b3c81": "PTTYC(uint256,string,string)", "368b8772": "setMessage(string)", +"368bb1fc": "viewSplitExactOut(address,address,uint256,uint256)", +"368bce02": "lua()", "368bf74e": "TEAM_LIMIT()", +"368c3c34": "RUN_SCRIPT_ROLE()", +"368c5e15": "transferAllToAdmin()", "368d09d8": "requestOracleValue()", "368d6b25": "setRushTimeChallengeRewardsPercent(uint256)", +"368d9f06": "getRedeemPrice(address)", +"368dab17": "getUserPoolsOwned(address)", "368daf8f": "goldMigrationsCount()", "368dde4b": "currentCost()", +"368e4fd5": "setBPoolAddress(address)", "368e5d4e": "BTC_SUISSE_TIER_4()", +"368e6516": "_getFeeCollector(bytes32)", "368e85ff": "IICO(uint256,uint256,uint256,uint256,uint256,address)", +"368f3012": "didDb(string)", "368f3492": "AnemoiSaleContract()", "368f76a9": "bossCutPercentage()", +"36900c11": "addConvertibleToken(address,address)", "36909ddd": "isATMHolder(address)", "3690fd03": "CPLPrivate()", "3691125a": "LianPaiToken()", "36917dfa": "getPony(uint256)", "3691dd11": "userApprove(address,uint256,uint256)", +"3691fc89": "endCycle(uint256)", +"369248f8": "add_trader(address)", +"3692bfe9": "addSupplier(address,string,uint256,uint256)", "3692d61a": "log(string,bytes32)", "3693396a": "getLastSignedTime()", "36937781": "initialize_proposal()", "369388cc": "EMISSION_FOR_BOUNTY()", "3693db0a": "FOUNDER_ONE()", +"3693edbe": "Bind(address,address)", "36944e49": "secondRefundRoundRateNumerator()", "36945328": "setAddrContractCaller(address)", "3694566e": "getRate(uint256,bytes32)", "3694569e": "IHateEos(string)", "3694629a": "getQuestionFinalizable(uint256)", +"36951858": "SaleComplete(address)", +"36953c16": "cryptonomicaVerification()", "3695507b": "IRC_PER_ETH_PRE_SALE()", "3695672b": "newBurnableOpenPayment(address,uint256,bool,uint256,string)", "36958413": "weaponEntities(uint256)", +"3695a06c": "withdrawTokenCommission(address,uint256,uint256)", "36965e3a": "SetAElfDevMultisig(address,address)", +"3696a084": "getUserDepositDetails(address)", +"36971cb6": "setPositiveRebase(uint256)", "3697d0a7": "renderLandingHash()", "3697efb2": "MinerEdgeCommunity()", "3697f055": "withdrawFunding(uint256)", +"36980f58": "requestTransferPosition()", "36988bc4": "currentLoanPerson()", "3698de0a": "soliditySha3(bytes32)", "369ac28f": "deltaTime()", "369b1ce5": "initialBuy(address[])", +"369b645b": "GetUserDividends(address)", "369badf1": "getCreditsAtIndex(uint256)", "369bcd64": "_checkPixelUnder(uint256)", +"369c190f": "AANCHOR()", +"369c7bcc": "isAnActivePromoter(address)", "369cbbb4": "checkMonthlyLimit(address)", +"369ccd2c": "RemoveOwnerRequestSetup(address,address)", "369cd460": "totalPilfered()", "369d32f1": "Items()", +"369d4d24": "setIncentivizedSlippageTolerance(uint256)", "369d8138": "createAsset(string,string,string,uint256)", +"369d9a91": "defixPerBlock()", "369de07d": "PDTX()", +"369dee42": "addCollector(address)", +"369e0b70": "LogFilterPass(address,bool)", "369e2422": "updateTokenPricePerUSD(uint256)", "369e8c1d": "commit(address)", +"369f61dc": "createGlyph()", "369f927f": "initBlockEpoch()", +"369fb4a9": "depositDai(uint256,uint256,uint256)", "369fe962": "getDisputeMemorySize(uint256)", +"36a00082": "allAvailableTokens(uint256)", "36a013c8": "LogInvestment(address,address,uint256)", "36a09eae": "SetPriceMultiple(uint256)", "36a0f511": "getPeriodMinting(uint256)", "36a128c2": "MyJioCoin()", +"36a1813f": "HIGH_MINT_PERCENT()", "36a1bbfd": "baseTargetReached()", "36a1c184": "IsArt()", "36a1fb5f": "changeUserStatus(address,bool)", @@ -31314,69 +57228,134 @@ "36a36f7c": "betexStorage()", "36a39882": "_proceedStage()", "36a42675": "combineInterest(uint8,uint8)", +"36a4360d": "emitEventDownstream()", +"36a4b19e": "initialize(uint256,address,uint256,address,uint8)", "36a4f2ba": "createBtcAddress(uint256,int256,uint256,int256)", +"36a52884": "createCycleMember(uint256,uint256,uint256,uint256,uint256,address,bool)", +"36a5a231": "secondaryOwner()", "36a60891": "setTrainingFeeMultiplier(uint256)", "36a6412b": "buyMicroKeysWithHandle(string,bytes32)", +"36a6802f": "collection(bytes32)", +"36a6aada": "startPresale1()", "36a6ad58": "mintPartnershipTokens()", "36a716da": "createOrderHash(address,address[3],uint256[5],int256)", "36a7cf1f": "setBallotFactory(address)", +"36a85062": "currentRoundIdCount()", +"36a8ac24": "regionIndexToOwner(uint256)", +"36a9e0c1": "Approval(address,address,bytes32)", "36a9f2f7": "xactionFeeNumerator()", +"36aa58f6": "FXS_FRAX_SUSHI_STAKING_CONTRACT()", "36aa972e": "FullPayChain()", +"36aad909": "denyCollector(address)", "36ab0f15": "getNewAllowancesEffectuation()", "36ab753e": "startRefunding()", +"36ab75c5": "jigsawCount()", +"36ab802e": "GetFreezingTime()", "36abffd4": "_receiveFunds()", +"36ac1dd0": "isOwnerOrOpsOrAdmin(address)", "36ac732e": "updateSecondChangeBlock(uint256)", +"36ac9a15": "createCard(address,uint256,uint256,address,uint256)", +"36ac9f6f": "recoverbep20(address,uint256)", +"36acd39f": "findBurnFee(uint256)", +"36acf63a": "delegatedWithdraw(uint256,address)", +"36ad34d3": "getElectionList()", "36ad6e46": "SendTokensToFounders(uint256,uint256,uint256)", +"36ad9954": "viewSaleKHM()", "36add1df": "interestDistribution()", +"36ae045a": "setWildcardList(address,bool)", "36ae22f0": "emitFeePeriodRollover(uint256)", +"36ae25a4": "getBasePointList()", "36ae31ec": "getCatOwners()", "36ae5040": "isMinted()", +"36ae84ff": "toSdrAmount(uint256)", "36aec5a3": "amountContributed(address)", "36af1954": "withdrawnReadable()", +"36af321e": "Deposit(address,uint256,uint256,uint256)", "36af50fd": "setSale(address)", +"36af74ad": "getUserEstimatedCurrentProfitWithoutFee(address,address)", "36af8151": "setSpareRecommAddr(address)", "36b024ab": "setTransferableDate(uint64)", +"36b04ca3": "deployerOf(uint256)", "36b09474": "winningNumbersPicked()", "36b1315c": "min64(uint64,uint64)", "36b19cd7": "adminWallet()", "36b1f6a3": "getDApp(uint256)", "36b222b3": "fillOptionOrder(address[3],uint256[3],uint256[2],bool,uint8,bytes32[2])", +"36b2c4b2": "honey()", "36b2e0f9": "acceptBidForCollectible(uint256,uint256,uint256)", +"36b2fb53": "vaultToWallet(uint256)", "36b2fe94": "setPurchaseAdmin(address)", "36b324ff": "unMap(address)", "36b33415": "modifyMemberInfo(string,string,string,string)", +"36b3a76e": "getCurrentPlan(address)", "36b3da05": "chargeBalance()", "36b40bb6": "leftOnLastMint()", +"36b4181c": "updateTenderStatusToBiddingComplete(address)", +"36b4809f": "GameError(address,uint256,bytes32)", +"36b4cb48": "getNumberOfTokensPerETH()", +"36b5aa2d": "computeAddress(address,uint256)", +"36b5d35a": "userInfo_single(uint256,address)", "36b61e3c": "otc()", +"36b62288": "wtf()", "36b641c2": "MakeMyToken(string,string,uint256)", "36b69367": "parentFees(address)", +"36b73908": "provide(address,uint256)", "36b77107": "lastDeposit()", +"36b7abd0": "getMaxSellTokens()", "36b81feb": "Deed(address)", +"36b853b1": "nyanAddress()", +"36b87dd4": "getFrost()", "36b97fd5": "TestToken5(address,address,address,address,address,address,address,address)", "36b9856d": "newOraclizeSetProof(string)", +"36ba0dfc": "directTokenMap(address)", +"36ba32f6": "teamRewardMin()", +"36ba8e3a": "BuyAKeyWithBalance(address,uint256,uint256)", +"36ba9794": "upgradeTo(address,string)", +"36ba9ace": "addReferrer(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"36babe7a": "rewardDistributer()", "36bacc7c": "getTentativeWinningPayoutDistributionHash()", +"36bb9122": "metaChangeBounty(bytes,uint256,uint256,address[],address[],string,uint256,uint256)", "36bb9ffa": "MANHATTANPROXYPARKAVE()", +"36bbb015": "payoutAndReset0(uint256)", +"36bc31f4": "setMUSE(address)", "36bc32a2": "expectedPayout(address)", "36bcb4c9": "changeAge(uint8)", "36bcb4cd": "ViteToken()", +"36bdc89c": "Butterfly()", "36bdee74": "totalETH()", "36be2a73": "setLedger(uint8,int256)", "36bee178": "add_to_withdraw_bounty()", +"36bef7b6": "read_law(uint8)", "36bf094b": "BonusPeriodsCount()", "36bf2e15": "ERC20ImplUpgradeable(address)", +"36bf3325": "DEPOSIT_SIZE()", "36bf392b": "distributeInvestorsFee(uint256,uint256)", +"36bf5aa3": "TokenMint(address,uint256)", +"36bfa47b": "topSponsors(uint256)", "36bffe1e": "nextCommonTTMTokenId7()", +"36c013e6": "trancheAddresses(uint256)", +"36c01ad9": "getProtectionByUser(address)", "36c0aada": "setValueAll(uint256)", "36c0c834": "buySignature(bytes16)", +"36c18441": "MorseCoin(uint256,string,string)", "36c1a50f": "notZeroNotSender(address)", +"36c1ad31": "pnt()", "36c28466": "Panel()", +"36c29850": "affiliateEdge()", "36c2a922": "KryptopyToken()", "36c2d72d": "getTotalSlaves(address)", "36c35f94": "finalize1()", +"36c3778b": "split(address,address,uint256,uint256,address)", +"36c38fd7": "loopCheck(address)", +"36c3ebf1": "updateContent(string,string)", +"36c40477": "flashloan(address)", +"36c41f13": "ecrecover1(bytes32,bytes32,bytes32,uint8)", "36c4a520": "Volks()", "36c4ad0c": "getEthFromKeys(uint256,uint256)", +"36c4b64a": "SELL_D()", "36c4db09": "setCOO(address,bytes)", "36c4ff7a": "payoutAddr()", +"36c56610": "lastSuperActionTimestamp(address)", "36c5787e": "setTokensWave(uint256,uint256[10])", "36c5bf8c": "_ownerReleaseLimit()", "36c5d724": "removeToken(uint256)", @@ -31384,28 +57363,56 @@ "36c61b60": "_buyToken(uint256,uint256,uint256)", "36c63b8d": "AbstractVirtualToken()", "36c6a410": "BatanCoin()", +"36c6b06e": "_ethRateSet(uint256)", +"36c6cf21": "outputToLp0Route(uint256)", +"36c6d469": "eventEndAttack(address,address,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"36c738ca": "setRCVRAddress(address)", +"36c7c12c": "randomizerContract()", +"36c7ce27": "getInvestRecordByAddress(address,uint32)", "36c7d4bd": "processReinvest(uint256,uint256,uint256)", "36c802a0": "priceStage2()", +"36c82707": "initialize(string,string,uint256,address,address,uint256,uint8,uint32,bool)", "36c84de5": "getPlayerDataByAddress(address)", +"36c8773f": "revokeHoldOperator(address)", "36c8af5d": "_getId()", "36c8c0e9": "addBonusBatch(uint256[],address[])", +"36c8c27d": "raiseTokenApprove(address,uint256)", "36c8c5ee": "voteForCandidate(uint256)", "36c8e831": "PhillionToken()", +"36c91f7c": "Trade(address,address,uint256,address,address,uint256,uint256,uint256)", "36c92c3f": "setRoundDuration(uint256)", +"36c96cc0": "support(address,uint256)", "36c9c62d": "transfer_opt(address,address,uint256)", +"36ca8bd9": "automaticLockupAdd(address,uint256)", "36ca97d6": "tokenFeePercent()", +"36ca9f7c": "_niftyTypeIPFSHash(uint256)", +"36cb0763": "totalSettledUnderlying()", "36cb4c48": "log256(uint256)", "36cb8098": "BouCrowdsale(uint256,address,address)", "36cb8740": "test_3_accessRestriction_vote_shouldThrow()", +"36cbd963": "jackpotReceived()", "36cbee23": "bountyFunds()", +"36cc1377": "LOLI()", "36cc17a7": "clientClaim(uint256,uint64)", "36cc18b5": "setPriceIdv(bytes32,address)", "36cc1ebb": "setCCH_edit_13(string)", "36cc6a10": "modifyTokenFee()", +"36ccf2d7": "addExtention(address)", "36cd24aa": "prepareVote(bytes32,uint256)", +"36cd6052": "lever()", +"36ce0a92": "userPendingDeposits(uint256,address)", +"36ce2a10": "tokenStrengthWeight()", +"36ce7df7": "initialize(uint256,address,address,uint256,string)", "36ce94bf": "bytesToAddress1(bytes)", +"36ce9957": "incomeday(uint256)", +"36cefff6": "getTokenHandlerAddr(uint256)", "36cf7c87": "dead()", +"36cf864e": "supplyed()", +"36cf893c": "convert_rate(address,address,uint256)", +"36cfcc7b": "saveUserLinkingInfo(address,string,string,string,string,string)", +"36cfd8ba": "getAccounting()", "36cfe3eb": "starbaseEarlyPurchase()", +"36d0054b": "auctionSuccessful()", "36d0288c": "CL()", "36d02c94": "changeSettings(uint256,uint256)", "36d03356": "setAdvisorsTeamAddress(address)", @@ -31418,41 +57425,83 @@ "36d22de7": "pokerbox(uint256,uint256)", "36d26647": "getReportHash(uint256)", "36d300b3": "addAction(uint256,uint256,uint256)", +"36d3208e": "SetAirdroper(address)", +"36d37347": "book(address,address,bytes,address,uint128,uint128,bytes)", "36d373c0": "writeDefinitions(uint8,string)", "36d38bd4": "scs()", +"36d3b9c6": "updateAMMImplementation(address)", "36d43c24": "withdrawId()", +"36d4da1b": "tokensGame()", "36d505cf": "_breedWith(uint256,uint256,uint256)", +"36d593a8": "offChainTrans(address,uint256,uint256,bool)", +"36d5a76d": "mintRedeemPart1(uint256)", +"36d5a945": "fee(string)", +"36d5cb39": "circulateSupply()", +"36d5ffa2": "mPricesLastRound(bytes32)", "36d61112": "getVendingStepQty(uint256)", +"36d62825": "NewRewardMatrix(uint256,uint256,uint256,uint256)", +"36d635fc": "exitBoradRoom()", "36d647cf": "bonusLine()", +"36d69910": "isGenesisAddressLevel2Or3(address)", +"36d7dd8e": "removePopAddress(address)", "36d81f07": "getUser1()", +"36d86c59": "LogError(uint8,bytes32)", "36d90c2d": "Dillionworldcoin()", "36d9377e": "GetAllNode()", "36d938d8": "Transaction(uint256,uint256,address,uint256,uint8,uint256,uint256,bytes)", "36d95f56": "MIN_FUNDING_GOAL()", +"36d9d23a": "serviceUpdateRefererFeePercent(uint8)", +"36d9d692": "viewData(string)", +"36d9d740": "requester(uint64)", "36da1471": "crowdSaleCheck()", "36da4468": "supplier()", "36da5cd8": "atomToken()", "36da9ec9": "roundTwoRate()", "36dac2cc": "getMeta(uint256)", +"36daf90f": "gonnaLockTransfer()", +"36dbd2f9": "getClaimStatus(uint256)", "36dc1dd2": "createBSMHash(string)", "36dc58f6": "total_SDCC_supply()", +"36dcb582": "depositComponentsAndHandleEth(address,uint256)", +"36dceb79": "NewMasterCopyProposal(address)", "36dd20a7": "getJobWorker(uint256)", "36dd58f2": "dispatch(address,uint256,string)", +"36dda36b": "cdcs(address)", "36de44e0": "GFC(uint256,string,string,uint8,address)", +"36def645": "autoDistribution()", "36df05bc": "wholesaleLeft()", +"36df7ea5": "work(address)", "36df99b6": "blackswanToken()", +"36dfac9c": "PaymentFailure(address)", "36dfe260": "payOneTimeReward()", +"36dffedf": "authorizeTransfer(address,address,uint256,bool)", "36e0004a": "multiSig()", "36e05d94": "fundariaShare()", +"36e08ce6": "getEthozBal()", "36e0e824": "asset(uint256,bytes)", "36e0f6cc": "allowSell()", +"36e1e392": "usdt_gwtb(uint256)", +"36e1f92d": "pokeToLp1Route(uint256)", +"36e21a57": "challengeAction(uint256,uint256,bool,bytes)", +"36e23466": "stakeDrop(uint256)", +"36e33086": "normalDragon(address)", +"36e347ad": "CapNhatThoiGianHoanThanh(uint256,uint256)", +"36e417d0": "addCollateral(address,uint256,address,bool)", "36e4e8fd": "tulipToOwner(uint256)", "36e4f915": "claimToken(bytes32,string,address)", "36e520bc": "verifyAddresses(address[])", +"36e5af1e": "viewUserReInvestCount(address,uint8,uint8)", +"36e5afab": "ThreeYearsBondCount()", "36e61cf7": "decTap(uint256)", "36e685f5": "setCLevelAddresses(address,address,address,address)", "36e6b92e": "taskProcessedWithCosting(uint256,uint256)", +"36e6da11": "VOX_ADDRESS()", "36e73918": "getRegionNextImageId(uint256)", +"36e748b5": "referralDataRow(address,uint32,uint8)", +"36e85d13": "redeemBP()", +"36e917f7": "IsIssueTime()", +"36e9332d": "farm()", +"36e9f1e1": "publisherExecutionID(address)", "36e9f43f": "SMRDistributionVault()", "36ea1938": "executeTrade(address,address,uint256,uint256,address)", "36ea76e2": "Hyperion()", @@ -31461,7 +57510,9 @@ "36eb3aa9": "LGBT()", "36eb5b47": "getResoSCParams()", "36ebc4dc": "__allocateTokens(address)", +"36ebcde6": "getTotalRefs(address)", "36eda23f": "setRST(address)", +"36eda306": "calcAmounts(uint256)", "36edbe17": "createPlayer(address,uint256)", "36ee1f2b": "SDTToken()", "36ee46f5": "killAnimal(uint8,uint16)", @@ -31470,47 +57521,94 @@ "36ee8812": "updateReleasedBalance()", "36eec28e": "allocated4Year()", "36eed01f": "getScoreWithCustomerAddr(address)", +"36eeed74": "withdrawAmount(uint256,uint8,uint8,bytes32,bytes32,uint256,address)", +"36eef862": "maxBProxBProValue(bytes32)", +"36ef088c": "unstakeFor(address,uint256)", "36ef0cea": "createStartingColors()", +"36ef12d5": "verifyPublisher(address)", "36ef1abb": "disburseDividends()", +"36ef5eb4": "setYaxPerBlock(uint256)", "36ef6c82": "addEmbassyOfCountry(address,uint256)", "36ef80db": "getId(address,address)", +"36efc6e1": "ReturnCereneum()", +"36efd16f": "depositFor(uint256,address)", "36f00e8a": "setFeeFlat(uint256)", +"36f0187e": "mergeEstate(uint256,uint256,string,uint256)", +"36f04e45": "increaseProductivity(address,uint256)", "36f19b77": "getPurchasedBlockhash(uint256)", +"36f1da4a": "crewPerBlock()", "36f2393e": "changeTokenURIPrefix(string)", "36f26095": "minimalCap()", "36f2b803": "Oceans8RT()", +"36f2fa68": "setParam(uint256,uint256)", +"36f379a7": "_set_managers(uint256,address)", "36f3dc2d": "STAGE_FOUR_ETHRaised()", +"36f40c61": "queryBalance()", +"36f44758": "returnFundETH(address,uint256)", +"36f4490d": "uplinePercentage(uint8,uint8)", +"36f4710c": "moveDonations()", +"36f4fb02": "updateEpoch()", "36f54767": "VitaminToken(uint256,string,string)", +"36f58588": "recipe()", "36f656d8": "assertEq(string,string,string)", "36f66528": "EtherDelta(address,uint256,uint256)", +"36f77b64": "lend(address,address,uint256,address,bytes32,bytes,bytes,bytes)", "36f78d77": "newGroup(address[],uint256,uint256)", "36f7992b": "putOnSale(uint256,uint256)", "36f7ab5e": "contactInformation()", "36f7cd70": "setPricePerStake(uint256)", +"36f7f80a": "ReInvest_With(uint256)", "36f8edc2": "getPlayerShipBattleLossesById(uint64)", "36f93a99": "cofoundersSupplyVestingStartDate()", +"36f97bb1": "changeRewards(uint256,uint256)", "36f9825f": "accountIndex(uint256)", "36f9f49c": "etherandomSeed()", "36faa509": "ssps(uint64)", +"36fafa19": "ReceivedPayment(address,uint256)", +"36fba8a8": "getGroupUnlockTime(uint256)", "36fbedd3": "existsAuditorFromMultiRequestAssignment(uint256,address)", +"36fc3caa": "_currentClaimDestrata()", +"36fc603f": "REPAY_GAS_COST()", "36fc75ee": "setRegsitrarAddress(address)", +"36fcc464": "TwoHSymbols(address,uint256)", +"36fd0291": "approve_894(address,uint256)", +"36fd5c0f": "overallBonus()", +"36fd711e": "setRefundFee(uint256)", +"36fda9f2": "getTokensForETH(address,uint256)", +"36fe15e6": "QUALITIES_COUNT()", +"36fe6e0e": "RingMined(uint256,bytes32,address,address,bytes32[],uint256[6][])", +"36fed975": "_gonBalances(address)", "36ff37f4": "UpdateEvent()", +"36ff50b0": "mload()", +"36ff6a70": "matchIds(uint256)", "36ffa905": "getMyProposals()", +"36ffb167": "getBLabs()", "370014f2": "sendFundHome()", "370097ac": "donotUSBDappToken()", "370099d4": "airSwap()", "370158ea": "info()", "37016a5f": "getAuctionStartedAt(uint256)", +"3701f582": "_addDPRequest(uint8,uint8,uint8,uint8,uint16,uint8,string,string,string,string)", "3701fada": "PFC()", +"3702872a": "GulpPools(uint256)", "370292eb": "clearApproval(address[16],address,uint256)", "3702ab03": "buyBasicCards(uint256,uint256)", +"3702db0b": "compareToTest()", +"370329c4": "LATE_PHASE_MINIMUM_INVESTMENT_CAP()", "37033be6": "processReservationFundContribution(address,uint256,uint256)", "37034853": "ownerHistoryCount()", +"3703bcdc": "getLenderBidAmount(address)", "3703d911": "createItem(string,uint256,uint256,address,uint32,string,uint32)", +"37040cb6": "executeOrder(address,address,uint256,uint256,address,bytes)", "370419e5": "arm()", +"37047a0b": "changeInitialPrice(uint256)", "37048f8f": "_newValidatorSetCallable()", "37049b06": "getTier(uint32,uint256)", +"3704f6e2": "UpdateCost(uint256)", +"37050117": "_setFlashloan(address)", +"370545d5": "orderview(uint256)", "3705f69e": "canRelease()", +"3706352b": "isInTopVoters(address,uint256,address)", "37072ec7": "getHealthCitizens(uint256)", "37074dae": "receivedEther(address)", "37077409": "_updatePurchasingState(address)", @@ -31518,163 +57616,300 @@ "3707cfc1": "update(uint256,uint256,address)", "3707ed7e": "gettops(address)", "37086c8e": "airdropWithLockup(address,address,uint256,bytes)", +"37088ffc": "maxAccountMergingDuration()", "3708c99e": "openWhitelistEndTime()", +"37090c2f": "maxBoost()", +"37091303": "userStakingBalances(address,uint256)", "370943e3": "ZionToken()", +"37098075": "getProposalSum()", +"3709d454": "maxAmountToTrade(address)", +"370b1cdd": "pendingTesta(uint256,address)", +"370b3ddf": "setDoomBalances(address,uint256)", "370b6939": "AdminSetDrawer(address)", "370b8c90": "info(bytes)", +"370c1df1": "Menu09(address)", +"370c24cf": "getSettingValue(bytes32)", +"370c34b5": "updateUserStateOnRebalanceInternal(address,address,uint256)", "370c6001": "abortTransaction()", "370d4c6e": "setGameOn(bool)", "370d62ad": "anyRateIsStale(bytes4[])", "370e052b": "addPreSaleTokensMulti(address[],uint256[])", "370e9161": "rollDice(uint256,uint256)", +"370eba74": "findAvailableSlot(address,address)", "370ec1c5": "_fillOrder(address,uint256)", +"370ef54f": "DEFAULT_VOTING_TIME()", "370f2827": "finishJackpot(uint256,uint256)", "370f388e": "MegaCandy(address)", "370fb47b": "triggerTime()", +"370fc810": "sReward(uint256)", "370fc812": "set_stopsell(bool)", +"370fe89f": "depositNFTs(address)", "370fed6e": "setProfile(string,string,string,uint32)", +"37103367": "log(bool,uint256,uint256)", "37110967": "eTokensToSend(address,uint256)", "371115d1": "LamboToken(uint256,string,uint8,string)", +"37117b7f": "_RATE()", "3711d9fb": "saleDuration()", +"3711e55c": "transferEths(address[],uint256)", "3711e829": "withdrawnAmountForSalePromotion()", "37126b38": "getTime5(address)", +"3712812b": "mintWithData(address,uint256,string,string,string,string,string)", +"37128339": "getConfirmators(uint256)", "3712880c": "changeTokenExchangeRate(uint256)", "37128a12": "initBoostData()", "371303c0": "inc()", "3713513a": "TOKENO()", "3713ab41": "WPXSold()", +"3713f742": "approveProposal(address,address,address,bytes)", "37142391": "GetPartManager(uint8,uint256)", +"37146c62": "sondashi(address,uint256)", "3714ae13": "newTokenPrice()", "3714e274": "mintAllBonuses()", +"37150140": "CROWDSALE_END()", +"3715a4f6": "FINALIZE_WAIT_DURATION()", "3715ae53": "sendApprovedTokensToInvestor(address,uint256)", "37164433": "withdrawConfirm(uint256,address)", "3716b8b4": "DonatorSetBanner(string)", "3716bd22": "showCertificationDetails(uint256)", +"3716c291": "swapTT(uint256,uint256,uint64,uint8,uint256,uint256,bytes32)", "3716ca33": "updateGenerationRatio(uint256)", "3716f65d": "withdrawDthShop(address)", "3717798b": "auctionStarted(string)", +"37179db8": "loomAddress()", "3717a7a7": "Omnic(string,string,uint256,uint256)", "3717f34c": "divRemain(uint256,uint256)", "37180750": "getTaskKeyAtIndex(uint256)", "3718766b": "EventQuitBattle(address,uint256)", "37189157": "checkWithdrawalAvailability(address,address)", "3718a923": "canShelf(string)", +"3718b885": "setColors(uint8,uint8,bytes32[32])", "3719427e": "acceptDividends(uint256,uint32)", +"3719bc6a": "tunnels(uint256)", +"3719efd1": "setStartDay(uint8)", "371a4ea8": "getProposalById(uint32)", +"371a7053": "getGainSettleFee()", "371aa158": "init(address[],uint256[])", "371ab702": "getMicroModuleByIdPart2(uint256)", +"371babdc": "calcTokensForAmount(uint256)", "371be589": "getconfig()", "371c7dba": "setAllowPriceUpdate(bool)", +"371cae2d": "rolloverAndAddLiquidityForAccount(address,address,uint48,address,uint256,uint256,bool)", "371db7af": "BlockPaymentSystem()", "371dd5ed": "initRound()", +"371ddfe6": "mintMythicMonster(string,address)", +"371e1444": "setLiquidityGenerationEventForHAL9K(uint256,uint256)", +"371e6e12": "getIdOfApiId(bytes32)", +"371e8304": "cancelLoanOrderWithHash(bytes32,uint256)", "371e8e27": "gameResultsLogged()", +"371e9c65": "rewardPerBlock2()", +"371eb669": "addrs(uint256)", "371ecfde": "_directTransfer(address,uint256)", "371f468c": "GlobalSuperGameToken(uint256,string,string)", +"371fa714": "myDepositIds(address)", +"371fd8e6": "repay(uint256)", "371fe247": "_checkHashAndTransferExecutorFee(bytes32,bytes,address,uint256,uint256)", +"371ff5b7": "healthGemPrice()", "37205d76": "isCrowdSaleSetup()", "3720e5b6": "E_AuctionStarted(address,uint256,uint256)", +"3721535e": "updateRewards(address,address,uint256,uint256,uint256)", "3721a634": "requestSpectatorRewardForGladiatorBattle(uint256)", +"3721e029": "signedUp(address)", "3721ee15": "ownerAccessoryCollection(address,uint256)", "372210d1": "addGenesis(address,bool)", "37227c07": "logFeeTokenTransferred(address,address,address,uint256)", +"3722931b": "ManagementWhitelisted(address,bool)", +"37230adc": "NearingHardCap(uint256,uint256)", "3723100d": "mutiEthTransfer(address[],uint256[])", "37235758": "currentEndsAt()", "3723bc0e": "shareholders()", +"3723c230": "allNames(address)", "3723f149": "FOUNDATION_SHARE()", +"372400cf": "frequency(address)", +"37242ef3": "setSupportedTokenLength(uint256)", "37246f43": "getVoteRulesOfTransaction(address,uint256,bytes)", "37247af5": "_recalculateAvailable(address)", "3724fb24": "tradeSpreadInvert()", "372500ab": "claimRewards()", "37253e35": "defrostTokens(uint256,uint256)", "37254184": "jvCoin()", +"37257532": "GFT()", "3725814a": "getMaxAddresses()", "37258302": "SubwooferToken()", +"3725add7": "compareSplitTrade(address,uint256)", "37268dbb": "_internalExchange(address,bytes4,uint256,bytes4,address,bool)", "37270069": "maxWeiRaised()", "37270936": "commander()", "37271cc7": "withdrawBid()", "37273b86": "PRICE_STAGE_PRESALE()", +"37277c3e": "setONEK(address)", +"372791b6": "viewNow()", "3727ae2d": "AthTokenBase()", +"3727c0b6": "getmsgsender()", +"37286752": "getMarginAddress(address)", +"372883ed": "CompositionPriceChanged(uint256,uint256,address)", "3728aa4c": "saleCapReached()", "3728bec2": "getCharacter(uint32)", "3728f1f7": "EthereumOne()", "37292eeb": "AVAILABLE_COMPANY_SUPPLY()", "3729847b": "processSalesForSingleBuyer(uint256,address)", "372a2a36": "DigitalArtChain()", +"372a395a": "priceDeviationThresholdFactor()", "372a49bd": "mspController()", +"372a53cc": "bootstrapCommitDuration()", +"372aa224": "setPriceProvider(address)", +"372af1b5": "totalDeposits(uint256)", +"372c12b1": "whiteList(address)", "372c1aff": "getPublicKeys(uint256)", "372c6533": "START_DATE()", "372c66e3": "updateAsset(uint256,string,string,string,uint256,address)", +"372caeb8": "unStake(uint256,uint256)", "372cb1d9": "CallCount()", "372cd183": "addAdmin(address,bytes32,bool)", "372cd7ad": "clearAuthOfPermission(address)", "372cfcc3": "noteSaleLocked(address,uint256,uint256,uint256)", "372d6b27": "getStatistics()", +"372d9448": "rewardPools(address)", +"372e0e9c": "releaseFundsToPayee(bytes32)", +"372e4ef5": "setupReleaseToken(address)", "372e80c3": "FLIPPINESS()", "372ea717": "test_oneInvalidEmptyAddress()", +"372ea71e": "payJackpotLog(address,uint256,uint256,uint256,uint256,bool)", "372ed8cc": "setOraclizeDelay(uint256)", +"372f3246": "ApplyRedenomination(address,bool,uint256)", "372f6bfe": "_refererUpdate(address,address)", "372f88b6": "ICC()", +"372f9661": "etherInPlans(uint256,bool,uint256)", "372fc8d3": "HTSupply()", "372ff945": "isInPhase(uint256)", +"37300c46": "erc721sReceived(address,uint256)", +"373058b8": "executeProposal()", "37305e2a": "withdrawFromCustody(uint256,address,address)", "37306299": "BurnableToken()", +"373071f2": "setFeesCollector(address)", +"3730837c": "_maxTotalSupply()", "3730bb40": "yxkTOKEN()", +"37315f44": "setAscensionActive(bool)", "37321bd7": "callstoredaddress(address)", "37323d19": "LuckyETH()", +"37324b51": "calculateInflationMinutes()", +"3732b394": "slippageFee()", "3732c86b": "doubleTransferWithBurn(address,address,uint256,uint256)", "3732e153": "ETHPrice()", +"37331695": "setMaxMonths(uint256)", +"37333af2": "tp(uint256)", "37334878": "SHORTADDRTOKEN()", "37338b05": "requireDing(uint256)", "37339506": "restrictedPercent()", "3733b378": "transferStackAndCall(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"3733c545": "openESQopenOFFER()", +"3733e6b3": "calculateBondsFromReinvest(uint256,uint256)", "3733faba": "forceStopCycle()", "3733ffca": "convertTo(uint256,string,string)", +"37345975": "GameEnd(uint256,address,uint256,uint256)", "37354a68": "luckyNumberOfAddress(address)", +"37359075": "memoire()", "3735ab75": "buyCastle(address)", "3735d57d": "PRESALE_BONUS_LIMIT()", "3736d853": "setAverageBlockTime(uint256)", "37371bc5": "getRandomRouter()", "37375a43": "createContractEditionForCollection(string,uint256,uint256)", "37376ca8": "cancelProposal(bytes32)", +"37377db9": "_getSignHash(bytes32)", +"37378b30": "updateDonatelloAdd(address)", +"3737bcb4": "lpPool()", +"37381a97": "getCosts(address,address,uint256,address,uint256)", "37383c2d": "getEventStart()", +"3738a609": "publicOffering(uint256)", "3738aa19": "ReleaseFundsToInvestor()", "3738eb8a": "GolfCoin()", +"37391c00": "newLotteryItem(address,uint8[4],uint256,uint256)", "37391ce2": "testUnescapedQuoteInString()", +"3739cec6": "pancakeFarmingPoolLpPairAddress()", +"3739e439": "bookCATokens(address)", "373a1bc3": "scheduleCall(address,bytes4)", +"373a2e1d": "LIQUIDATION_TIME_PERIOD()", "373a3af8": "intersect(uint256[],uint256[])", "373a7c01": "fundTotalSupply()", +"373a8dce": "up2uu(uint256)", "373ae230": "checkLimit(address,address,uint256)", +"373aff7f": "setLiquidityRecipient(address)", +"373b40d5": "triggerDelayUpdate(uint256,bool)", +"373b8fea": "disableHoldLimit()", "373c1df9": "test_3_destoryTokensAccrossBlocks_increaseBlocksBy1000()", +"373c72ef": "BeneficiaryChanged(address)", +"373c8cca": "setRewardParams(address,uint16,uint16)", "373c98a2": "authCall(address,bytes32)", "373d46b0": "IPOI(uint256)", +"373d5c18": "reassigneRole(address,uint256)", +"373d6132": "stakedAmount()", "373dde4f": "countPurchasedPixels()", +"373dfb14": "buyerRemainingBudgetForAudits(address,address)", "373e0c80": "setFreezeAccount(address,bool)", "373e441c": "addUserRole(string)", +"373e73f8": "relyContract(address,address)", "373eef4b": "ABsCoins(address,uint256)", "373f5ff0": "COLOR_GREY()", +"374028e3": "defaultRCAddress()", +"374032a1": "enableLock()", +"3740a42f": "lastPeriodCycleExecIdx()", +"3740d5a0": "PREFIX_SYMBOL()", "3740eee9": "SetFund(address)", +"37410ea6": "transferFromBunny(uint32)", "37411dc3": "createRandomZombie_Ether()", "3741b92b": "jrecover_y(uint256,uint256)", +"3741c30d": "getAllUserInTree(uint256)", "3741c90b": "setAuthorizedWithdrawalAmount(uint256)", +"37423a70": "hatchNest()", +"374261ab": "interestEarned()", +"37429d12": "refreshPieSpeeds()", +"3742a9f7": "getPurchase(uint256)", +"3742e5e1": "drawCollateral(address,uint256,address,uint256)", "3743f0bf": "teamReserveAllocation()", +"37440e9e": "ownerOfTokenMap(uint256)", +"37441429": "canStop(uint256)", +"37441996": "fulfill(bytes32,string)", +"37444d57": "usersActiveP7Levels(address,uint8)", +"37447635": "FinishShipping()", "3746010d": "createPrizeFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"37462dba": "getFinalizedState(bytes32)", +"3746332b": "exit(string,string)", "3746b446": "Predictor()", +"3746e82b": "addActiveSlot(uint256)", +"3746f5fc": "validate(bytes32,bytes32[],bytes32)", +"3746fd7c": "getCurrentLaws()", +"37471b9c": "ExecuteProposal(bytes32,address,uint256,uint256)", "37472c4b": "setDepository(address)", +"37482ef1": "withdrawAnnuity(address,uint256,uint256)", +"3748312f": "totalRaffles()", +"374936a7": "userTopNodes(address)", "3749ea8e": "contribute(address,address,uint256,uint256)", "374abace": "contractstarttime()", "374aed97": "getCells()", +"374b09f8": "curveReg()", "374b8cda": "getTrade(uint256,address,address)", "374b94c8": "MEC()", "374ba203": "get_hosp1(uint256,uint256,uint256)", "374bb090": "isAddressSet(address,address)", +"374bb4b2": "log(bool,uint256,uint256,uint256)", +"374be2f5": "AdviseFee(address,uint256)", "374bfba7": "claimFreeReferralPack()", +"374c6e1c": "totalBets(uint256)", +"374cb3cb": "Escribir(string)", +"374cc7ae": "initialize(bytes32,bytes32[10],uint256[4],uint256,bytes32[10],uint256[4])", +"374d496a": "incvRewardInfo()", +"374d592e": "setCHI(bool)", "374e164c": "addVirusDef(address,uint256)", "374e9aa1": "stageForBlock(uint256)", +"374ef2ae": "difficulty3()", "374f7b7e": "checkLoanStatus(address,uint256)", +"374fc815": "testCalculateAmountSeize_OverflowOnMaxUintAmountClose()", "375023f2": "total0xbtcReceived()", +"3750a8bd": "getLPFee()", "3750e05a": "TOKENS_BOUGHT()", +"37514295": "getTokenKey(uint256,bytes32)", +"3751522e": "DisableTransfers()", "37516ead": "microTip()", +"37517ce9": "MIN_ARTICLE_PRICE()", "375188dc": "nextTask()", "3751e6bc": "get_last_global_audit_document()", "37525ff0": "listItemFromRegistry(uint256)", @@ -31682,243 +57917,430 @@ "37531b45": "StudentCoin()", "37542d10": "addReferrer()", "37548549": "setRecipientString(string,string)", +"37551ec6": "pynths(uint256)", +"3755243b": "reportingCounter(address,uint256)", +"3755269b": "lockedLiquidity(uint256)", "37567d49": "maintenanceDeactivateUser(address)", "3756b62b": "toB32(uint256,address)", "3756bb45": "noOfTicketsOwned(address)", "3756e207": "ExtremiumToken()", +"3756f3c8": "drainBounty(address,uint256,uint256,uint256[])", +"37573609": "integrateAtPoint(uint256)", "37574b3d": "TOKEN_FOR_TEAM()", +"3757cd87": "swiftResolverRegistrations(address)", +"37580f90": "lockStates(address)", +"37582618": "relationship(address)", "37593f46": "queryN_fnc(uint256,string,bytes,uint256)", +"375a29fd": "editWithdrawLiqList(address,bool)", +"375a7cba": "allMarkets()", "375a8131": "addStudent(string,bytes32,string)", +"375ab629": "getFunctionCount(string)", "375b3c0a": "minStake()", +"375b4cd4": "checkpointsFromBlock(address,uint32)", "375b74c3": "custodian()", "375c0117": "BurnTokens(address,uint256,bool)", "375c21b0": "random(bytes32,uint32)", +"375c29e6": "withdrawAllDeposits(address)", "375c405d": "canIssueIndividual()", "375c4627": "supplyPICO(address)", +"375c5d0e": "rstakdlp()", "375c86dd": "m_pools()", +"375cea96": "dmmEtherFactory()", "375d6d90": "received_ethers(address)", "375d9dc6": "isLimited(address,address,uint256)", "375dce69": "getIssuable()", "375e3ea8": "payoutForBudget(uint256,uint256)", +"375e5c6c": "transferGrandOwnership(address)", "375e88bd": "increaseBTCRaised(uint256)", +"375f16a7": "getTotalOrders()", "375f2b96": "getCost(uint8)", "375f3a9d": "PERC_TOKENS_TO_INVESTOR()", "375f4498": "SetEditMode()", +"375fdf9d": "alphapoolsPerBlock()", "3760153c": "ETHero()", "37603132": "RollLottery(uint64)", +"3760390c": "lastRebasePositive()", "3760ceb0": "WAITTIMEUNTILWITHDRAWORTRANSFER()", "37612672": "producer()", +"3761804d": "pendingWithdrawals_DEPRECATED(uint32)", +"37618340": "getValuePayment(address,uint40)", +"376185a1": "CallExecutedEvent(address,uint256,uint256,bytes32)", "3761a3d6": "buyUcCoins()", +"3761af64": "h_payable()", "3761d23f": "setFeeDistributionAndStatusThreshold(uint8,uint8,uint256)", "3761dea8": "MarketPlace(address,address,uint256,uint256,address)", "37621da0": "setMinChildCount(uint256)", "3762346b": "externalPurchaseTokens(address,uint256,uint256)", +"37624000": "getDividendReward()", "37624204": "endPreIcoDate()", +"37628de8": "matrixLevelReward(address,uint256,uint256)", +"37628f61": "pendingUNIBLK(uint256,address)", "37629dda": "getArticleItem(uint256,uint256)", "3762f0fe": "initMembers()", "37632065": "claimUnderlying(address[2],uint256[7],uint8,bytes32[2])", "37633f29": "TokensGate(uint256,uint256,uint256,address)", +"37637f45": "setMinT(uint256)", "37638119": "getHouseEdgeAmount(uint256,uint256)", "3763965f": "private_profits()", +"3763c904": "PlyrRnds24_(address,uint256)", +"3763d0db": "getBorrowTotalAmount()", "3763d4b4": "generalSaleEndDate()", +"37640f39": "_stakeOf(bytes32,bytes32)", +"3764228d": "managerPending()", +"37646f2d": "getMaxMonths()", "3764cf3f": "NUMUS()", "3764e2be": "setup(string,string,uint256,uint256)", +"37654036": "withdrawSnowflakeBalanceFromVia(string,address,address,uint256,bytes)", +"3765cf02": "getMinimumStakeAmount()", "37664643": "retractLatestRevision(bytes32)", "376678e3": "BABYT()", "37668a8b": "create(bytes32,address,bytes32,address,bytes32)", "3766baba": "transferAllFromForcibly(address,address)", +"376756dd": "NoRefunds()", "3767aec6": "handleTimedTransitions()", +"3767e339": "extraGas()", "3767ea7e": "setTotalCapacity(uint256)", "37680f18": "ERC20Standard(uint256,string,string)", "37681083": "incrementReputation(uint256)", "3768304c": "autoMint()", "37689317": "generateLockedTokens(uint256)", +"37689c8d": "newTokenAddress()", "3768bd09": "mulToFraction(uint256,uint256,uint256)", +"3769209b": "baseRewardHistory(uint256)", "3769862f": "isAllowedUser(address,uint256,address)", +"376a2b69": "map(uint256,address)", "376a4ce0": "setstring(uint256,string)", +"376b7ed8": "DelegateToNewContract(address)", +"376b851a": "ReferrerBonus(address,address,uint8,uint256)", "376b9c25": "depositProvider()", "376c7374": "w_Bounty()", "376d1555": "sendAuto(address)", "376d567c": "setMod(address)", +"376d771a": "lockRewards()", "376db394": "setFreeze(address,uint256)", "376ed9c6": "totalHedgelyWinnings()", +"376edab6": "tokenconfigs(address,address)", "376edf93": "getBidsByAdslot(uint256,uint256)", "376ef9b8": "fromContractAddr()", +"376f72d6": "getTerminationInitiateDepositDetails(bytes32,uint256)", "376fc790": "fullTransfer(address)", "376fc952": "setMaxReferrerBonusRequirement(uint256)", +"376fe05b": "claimHodlDistribution()", "376fe102": "userId(address)", "376ff7f0": "isRefundAllowed()", "377002fb": "beArbitrator()", +"377090d7": "getEstimatedETHforJuice()", +"3770af0c": "uniswapLpDisable(address)", "37714274": "FrancevsArgentina()", "37717342": "breedOwn(uint256,uint256)", +"37719d64": "PropsChanged(address,string,bool,bool)", "3771ab97": "payDividents()", +"3771c514": "viewPlanPriceInEther(uint256)", +"37720049": "xUSDDecimal()", "37721ab7": "getDougName(string)", "377272b3": "createValue(address,uint256)", "3772c371": "getprize()", +"37737ff8": "trueStandingFalseEliminated(bool)", +"37738d03": "maxDenominator()", "3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", "377481ca": "unlockedAddress()", "3774e6f5": "starbaseMarketingCampaign()", "37751b35": "doTransfer(address,address,uint256)", +"377581a1": "excludeRecipientsAddresses(address)", +"37763b08": "setStartFreezePeriod(uint256)", +"3776fe2a": "registerVerifier(address,string)", "3777261d": "approvedFactories(address)", "37775807": "buyerBalances(address,address,uint256,address)", +"3777f156": "AccountNonceChanged(uint256,uint256)", "3777f5d0": "tokensPerWeiBonus333()", +"3777ff77": "addressAmountClaimable(address,uint256,bytes32[])", "3778e5b2": "groupInfo(uint32)", "37790454": "PrintWinningInfo(bytes32,uint256,uint256)", +"3779579f": "CeilingRaiseConfirmed(bytes32,uint256,uint256)", +"37797c08": "whitelistIndices(uint256)", "3779a3b6": "saleRunning()", "377a0f53": "bankAccount()", +"377a18c7": "mintFRAXForInvestments(uint256)", +"377a1ed6": "LIQUID_ADDR()", "377ab651": "nextTurn(uint256,uint256[3],uint8[176])", "377b2009": "isCanSell()", +"377b447c": "__isFeeManager(address)", "377b47a3": "logIn()", "377c6a3e": "eth(uint256,uint256)", +"377c93bf": "ipfsHashType()", "377d54ce": "assertOnlyParticipants(uint256)", "377d78ce": "defineProjectWallet(address)", "377dda1a": "NamiCrowdSale(address,address,address)", +"377e29e8": "dilutionTime()", +"377e32e6": "revokeManager(address)", +"377e9e98": "nextGovTime()", +"377fc0d7": "addToDataBase(address)", "37800bde": "calculateTransferFee(uint256)", "37806f07": "galleryOne()", +"37808932": "cleanPendingB()", +"37817a6c": "StopAdmin()", "3781afbc": "_isCorrectFullBuyin(uint256)", +"3781b6af": "lastRebaseEpoch()", +"3781cb0d": "createReceipt(uint256,string,string)", "3781d882": "setRate347()", "3781e576": "isOperatorForTranche(bytes32,address,address)", +"3781f9ca": "flashMint(uint256,uint256)", "37820c57": "bulkMint(address,string,uint256)", "378252f2": "closeAuction()", +"378274a4": "mbDeep(address,uint256)", "37828c52": "OTHER_STAKE()", "3782cae2": "set_max_contribution(uint256)", "37831b97": "payReward(address,address,uint256,uint256)", +"37834199": "mOldReward(address)", +"378400ac": "OAS_idOraclizeAccountingSettings()", +"37840373": "AddUSDUnitPrice(address,address,uint256)", "37848b6b": "getOwnedShipCount(address)", +"37849b3c": "user(uint256,address)", "3784f000": "setEndDate(uint256)", +"3784fa4b": "endorseVeto()", "378525bd": "bestAngel()", "378544df": "timeAfterSoftCap()", +"37859963": "updateProjectWebsite(uint256,string)", +"3785d1d6": "getMintableVAI(address)", "378652d2": "MultiTransper(address[],uint256)", +"3786dcee": "setAnft(address)", +"378721a9": "rankBonuses(address)", "3787a30a": "ownerWithdrawEth(address)", "3787b748": "WalletChange(address)", +"3787ef2d": "setSuccessfulTradeFeeInBasisPoints(uint256)", "3788036f": "isAgreementSigned(bytes32)", "37881299": "getCompare()", "37881810": "setCallbackAddress(address)", +"3788232f": "makeTransaction(address,address,uint256,uint256)", +"378827fb": "getEndpoint(uint64,uint64)", +"378885c5": "MPONDTokenId()", "3788e371": "BaldcoinCore(string,string,uint8,uint64,uint64,uint16,uint256,address[])", +"3789028a": "maxProjectPartyAmount()", "37890f94": "maliceReported(address)", +"378972c5": "external_transfer(uint256,address)", +"37899770": "getLastTimestamp()", +"3789addf": "GetMsgValueInfo()", +"3789ddd2": "addressToTurnInfo(address)", +"3789fb60": "lastGameTime()", "378a2178": "tallyVotes()", +"378a29b2": "ifBranches(uint256,bool,bool,bool,bool)", +"378a3686": "ajcosmetoken()", "378aa701": "getCurrentState()", +"378ac3db": "claimYieldContract(bytes32)", "378afddb": "withdrawMYB()", "378b6a89": "canContribute(address,uint256)", +"378b913e": "BuyInBatch(address,address,uint256,uint256[],uint256)", +"378bba3d": "ObtainReferrerEarnings(address,uint256,address,uint256)", "378bc89d": "findAddress(bytes32,bytes32)", +"378bd227": "balanceErc20(address)", "378c0605": "buyTickets(address)", +"378c279d": "ownerReclaim()", "378c4c1c": "computeMerkleRoot(bytes,bytes)", "378c7cd9": "logCheck(uint256,string,uint256)", "378c93ad": "setClaimable(bool)", "378ca888": "setMaxFinalizationTime(uint256)", "378cdb62": "proxyList(uint256)", +"378cfc21": "Allmap(uint256,uint256)", "378dc3dc": "initialSupply()", +"378dcfab": "delegateBySig(address,uint256[],uint256[],uint8[],bytes32[],bytes32[])", "378e061e": "inactive_payable()", "378e0fc1": "checkKwhDeployerAddress()", "378e25f2": "withdraw_2Completed()", +"378eb79a": "setMinOrder(uint256)", "378ebf93": "setTokenToEtherAllowed(bool)", +"378ec23b": "currentBlockNumber()", "378efa37": "divider()", +"378f5b93": "operationTimelockEnabled(string)", "37900d5a": "issuedFromOtherCurrencies()", "3790613f": "minChildCount()", "379080da": "PRICE_MULTIPLIER_PREICO1()", +"3790cf57": "retire(uint256)", +"3790fbeb": "hand(address)", +"379107b6": "setTokens(address[7])", "379119af": "SJT()", +"37915874": "vestingContracts(address)", "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()", +"3792eb98": "slotsData(bytes32)", "37930615": "extend(bytes16[],uint64)", +"37934e4a": "getCushionInfo(uint256,address,uint256)", +"37938720": "getTotalPurchased()", +"3793ab3c": "processWhitelistProposal(uint256)", "3793c1e8": "get_num_of_uses(address,address)", "3793ccb3": "isPlayerOnBoard(uint256,address)", +"3793d4b5": "changeFeeDivider(uint256)", "37941589": "test123token(uint256,string,string)", +"37947c29": "fetchPurchaseHistory(address)", +"3794aaff": "cannotSendUntil(address)", +"3794ef4c": "checkHoleForSchain(bytes32,uint256)", +"37951049": "get_lp_token(address)", +"37957504": "PAIR_SWITCH()", "3795ad25": "lockStartDate()", "379607f5": "claim(uint256)", "37960cd5": "publicKeySize()", "379698c1": "calculatePie()", +"3796a805": "exchangeLBT2ERC20(uint256,bytes32,uint256,uint256,uint256)", "37970dbe": "shouldAirdrop()", "379725ee": "queryName()", +"379749ae": "WithdrawRedress()", "3797528e": "IllusionDust()", "3797b4de": "forwardRemaining()", "37981c32": "pre_maxGoal()", "37983aed": "getMyCards(address)", "37986d2b": "freezeAndConfiscate(address)", "37989eb6": "setOwnerBurner(address)", +"3798fe56": "getMaxLevel()", +"3799203e": "TimeLocked(uint256,bytes32)", "379930f7": "WHEEL_SIZE()", "379986d9": "executeBurnProposal(uint256)", +"379990d6": "setLP(address,uint256)", "379995c3": "getDealerAndLuckyInfo(uint256)", +"3799a0c3": "buyBurn(address[])", "3799bbd3": "privatePresaleAllocatingToken()", "3799c5eb": "test_insert_findWithHintPrevRemovedUpdateHead()", "379abed8": "ANPlaceholder(address,address)", +"379afccc": "resetApprovals()", "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)", +"379c31bf": "countOrganizations()", "379c5131": "getByOwner(address)", "379c5d3f": "ModuleToken(uint256)", +"379c6761": "deRecycleTokeneaseApproval(address,uint256)", "379c8f6c": "_keepLastTransaction()", "379ca09e": "priceStep5()", +"379d4ebf": "tokenEXNT()", "379dbdeb": "accessAllowance(address,address)", "379e00d4": "maxTextLength()", "379e2919": "setDevFeePercent(uint256)", +"379e43ff": "startHomeland()", +"379e5c63": "getAssetBalace(address,address)", +"379e8140": "NewAnchor(bytes32)", "379e9957": "fiveMatchPayoutInPercent()", +"379eceaf": "queryAddr(address)", +"379ef195": "areTransfersEnabled()", +"379f4e66": "recover(address,bytes)", +"379f53e3": "rewarded(address)", +"379f5b12": "getDsr()", "379f946a": "initGeneralAttr(uint32,uint64)", "379fed9a": "isMasterOfCeremonyRemoved()", +"37a03dea": "sendOraclePayout()", "37a0b958": "DATAToken()", +"37a0fcf9": "SetMsgSenderInfo()", "37a14b52": "changeICODates(uint256,uint256,uint256)", +"37a14fad": "processUnpeg(bytes32,address,uint256,bytes)", "37a1c540": "founder1Wallet()", "37a1c84f": "registerNameResolver(string,address)", "37a2890d": "eraByIndex(uint256)", "37a28979": "setSettings(uint256,uint256)", +"37a2b30d": "clearDEFIX()", +"37a2b895": "NEW_ACCOUNT_FLAG()", +"37a30bbc": "setFXSMinDAO(uint256)", "37a30d3b": "current_price_atto_tokens_per_wei()", "37a31079": "pointsLimit()", "37a31895": "withdrawSelect(address)", +"37a35f6d": "set_managers(uint256,address)", "37a366d8": "loggedBalances(address,uint256)", "37a38bb1": "StateChanged(uint8,uint256,string)", "37a3931f": "invalidate(address)", +"37a440e6": "storageRead(bytes32)", "37a47106": "create(uint256,bytes32,uint256,uint256,uint256)", +"37a4c170": "lpRewardDivisor()", +"37a4dece": "ticketsExpiration(uint256)", +"37a58358": "nextRewardAmount()", "37a58bb4": "KudosPollFactory()", "37a59139": "estimate(string)", "37a5ae1f": "withdrawSingleBucket(address,uint256,uint256,uint256)", +"37a5d9ee": "nftID(uint256)", "37a5fbab": "SaleStart()", +"37a63200": "unstakeDai()", "37a66d85": "setPaused()", "37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", "37a6d42b": "participant()", "37a7095b": "LeviathanToken()", +"37a7113d": "depositAndTrade(bytes32,uint256,uint256,bytes32)", "37a74f7e": "p_update_currentPlotEmpireScore(uint256)", "37a7983b": "changeminContribAmount(uint256)", "37a7b7d8": "feed()", +"37a7ee02": "changeFeesOfTier(uint256,uint256,uint256)", "37a7f2b7": "MIN()", +"37a8129c": "invalidTokens()", +"37a82932": "createManuscript(bytes32,string)", "37a87dfa": "updateList(address,address,bool)", +"37a8c560": "getSubscriberOnchain(uint256)", "37a91776": "OSATOKEN()", "37a920f1": "Universe()", +"37a9cb20": "pendingCompound()", "37aa1689": "getIcoDiscount()", +"37aa4d79": "transfer721(address,uint256,bytes,bool,address)", "37aa7f91": "isAuthorisedMaker(address)", +"37aacf35": "getBalancerV1AmountOut(bool,address,uint256)", "37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", "37ab9dcf": "getCPFee()", +"37ac6fe4": "updateStateOnBorrow(address,address,uint256,uint256,uint8)", "37ac8236": "getPunchCardsOf(address)", "37ac9153": "Retrieve(string,address)", "37adf3a3": "hasRefBonus()", +"37ae1b82": "setCollatBorrowCap(uint256)", "37ae31c7": "DemSinhVienRequests()", "37ae43a3": "BetOnHashV81()", +"37ae67f5": "giveBounty(uint256,address)", +"37ae9e3a": "reservations()", +"37aeb95f": "referrerAdamRewards(address)", "37af5c32": "ANYtoken()", "37aff76d": "getSystemAvaliableState()", +"37b006a6": "detachStakingContract()", +"37b022c1": "setRMPL(address)", +"37b028ef": "minimumContributionAmount()", "37b0574a": "isClassic()", +"37b06dbc": "stkBMIToken()", "37b0786a": "icoInvestmentWei(address,uint256)", "37b0ac71": "confirmTeamWithdrawal()", "37b0f257": "setConfirmAddr(address)", +"37b1a75e": "GameHasOpened(uint256,string,string,string,uint256)", "37b34974": "reverse(bytes32)", +"37b4098b": "setTransferInteractions(bool)", +"37b43a94": "sidechainAddress()", "37b475d4": "SOFT_CAPACITY()", "37b4d863": "maxbet()", "37b4f299": "IMTERC20()", "37b54140": "buyTokensForAddress(address)", +"37b5567c": "exigirContrato()", "37b5dce4": "PDP()", +"37b5f7ae": "amendRewards0()", +"37b6bb37": "anyQueue(uint256[],address[],bytes[],uint256[])", +"37b6c887": "bear()", "37b6efeb": "engraveDefault(bytes32,string,string)", +"37b6f4e0": "cSWOP()", +"37b719ac": "getSongCandidate(uint256)", +"37b76e8e": "registerUriAuthority(bytes32)", +"37b79c48": "getChestPrice(uint256,uint256)", "37b7bf11": "Tile(int256,int256)", +"37b7eca1": "surplusTransferDelay()", +"37b7efef": "stakeTimeOf(address)", +"37b82fa1": "_adjustTrove(address,uint256,uint256,bool,address,address,uint256)", "37b89705": "getAgilityValue(uint256)", "37b8cade": "raisedEthAmt()", "37b8db1a": "executeVerdict(uint256,bool)", "37b9756b": "totalIssuanceDebt_limitedSum()", +"37ba04a0": "setRewardRates(uint256,uint256)", "37ba1b4d": "Fpgcchain(uint256,string,string)", "37ba682d": "END_TIME()", "37bb223e": "CUC()", "37bb25bc": "withdrawalLimit(address)", +"37bc03e5": "showCurrentLockPeriods()", +"37bc2808": "totalSoldToPublic()", +"37bc7f90": "callClaimEvent(uint256,address,uint256,uint256)", +"37bc863c": "lastCumulativePrice()", +"37bc8aa1": "joinFlexible()", +"37bcdcef": "audited(address)", "37bd0d28": "howManyFucksGiven(uint256,bool)", "37bd1868": "setHatchedEgg(uint64,uint64)", "37bd78a0": "secondsTimeLocked()", @@ -31926,117 +58348,223 @@ "37bdc99b": "release(uint256)", "37be04b4": "EZStandardToken(uint256,string,uint8,string)", "37be827d": "Sum()", +"37bea1ba": "TradeCancelled(bytes32,address)", +"37bf2685": "tknv()", +"37c03fb6": "getAllExchanges()", "37c08923": "totalContributions()", +"37c09316": "setSlowWithdrawDelay(uint256)", "37c0a5ef": "Finished(uint256,uint8,uint8,uint8,uint8,uint8)", +"37c11315": "priceFeedInterface()", +"37c27470": "changeKyberUniswapAddresses(address,address)", "37c2afda": "signJUR(address)", "37c30a98": "round_()", "37c345cd": "specialManagerAddressMap(address)", "37c35157": "updateTerm(uint256)", +"37c384df": "createPolicyManagerFor(address)", "37c390e3": "allow_move(uint16)", "37c3d50d": "buyAlt(address,uint256,string)", "37c3ee6e": "doDistro(address[],uint256)", "37c43088": "hashesSize()", "37c44802": "initMonsterClassConfig()", +"37c4d5f9": "lockmar()", "37c57718": "ListingBought(bytes32,address,uint256,uint256,uint256,address)", +"37c5785a": "stakingFeeRateSet(uint256,uint256)", +"37c5ba79": "addrToStudent(address)", +"37c605fc": "OLUSTURAN()", +"37c62eb1": "claimAvailable()", "37c62ed6": "createUnicornPriceInCandy()", +"37c6de96": "getPendingStrategy()", +"37c6f4d9": "hasPermission(uint8)", "37c6fcba": "LandlordTerminate(uint256,string)", "37c74948": "getPropertyPrivateMode(uint16)", "37c75992": "mintingIsFinished()", +"37c7df6b": "PrivateIcoInitialized(uint256,uint256,uint256,uint256,uint256)", +"37c8266d": "majorityConsensus()", "37c8d21f": "echo(string,string)", +"37c8d503": "summonMoloch(address[],address[],uint256,uint256,uint256,uint256,uint256,uint256,uint256[])", +"37c8dab9": "getSlashIndicator(address)", "37c8f1d1": "AIgathaToken(address,uint256,uint256,uint256,uint256,uint256)", +"37c97915": "accumulateCollateralStabilityFees(address,bytes32)", "37caa8b6": "getTop(uint256)", "37cb3c86": "distributeSlotBuy(address,uint256,uint256)", +"37cc4bc6": "send(address[],uint256[],address)", "37cc7761": "contractReservedBalance()", "37cc7cc0": "bannedCycles(uint256)", +"37cd2f7e": "returnFunds(uint256,uint256)", +"37ce1615": "lpPeriod()", +"37ce5ce8": "recieverList(uint256)", "37ceb05b": "getFixtures()", "37cef791": "getRate(address)", "37d004b3": "bulkRelayCMCT(address[],uint256[],bytes32)", "37d0208c": "bribe()", "37d044cd": "tokenCreationPreSaleCap()", "37d05434": "getCurrentRoundIssued()", +"37d09421": "myfrozentokens()", "37d1eb35": "setOffChainManagerAddress(address)", +"37d25b2d": "distributeWithAmount(address[],uint256[])", "37d2649a": "Ownedfunction()", +"37d277d4": "WETH_TOKEN()", "37d2d350": "setBOPSAddress(address)", +"37d32d3a": "redeemAndWithdrawGovToken()", "37d33438": "totalHedgelyInvested()", "37d3433f": "calculateAmountBoughtPreICO(uint256)", "37d35507": "tokenCreationMinConversion()", "37d365de": "admin_set_shopStoreRegister(address,address)", +"37d3a047": "setRewardsMultiplier(uint256,uint256)", "37d3ec7a": "ZBillionaire()", "37d45088": "transferAllowed_(uint256,address,address,uint256)", "37d48628": "totalSaleCapUnits()", "37d4fc84": "Alpha()", +"37d65460": "get_last()", +"37d6d000": "setUnstakeLPFee(uint256)", +"37d70f1d": "_mergePR(uint256)", "37d76636": "item(uint256,uint256,bytes)", +"37d79998": "totalBurnedFromSupply()", "37d876b6": "GVTTeamAllocator()", +"37d910b5": "initStaking(address,address,address)", +"37d9889b": "setBalancerPools(address,address,address)", +"37d9c20e": "useTickets(uint256)", +"37d9d58d": "isOwned(address,uint256)", "37d9d7fc": "getBytes32(bytes32,bytes32)", "37d9ffd1": "registerClient(address,uint32,uint256)", +"37da522a": "getStakingStart(address)", +"37da577c": "setMaxSupply(uint256,uint256)", "37da8058": "in_top_n(uint256,uint256)", "37daa09e": "getUpCount()", +"37daa2d4": "transferFromAt(address,address,uint256)", +"37dab6d2": "inSigningPeriod()", "37dac676": "getPOOL_edit_8()", +"37daea2d": "AssetPriceRecorded(uint128,uint128,uint128)", "37daf0ed": "getETHBalanceInfo()", "37db0703": "isClean(string)", "37db12c4": "PausePayment()", +"37db1777": "secretRevealSlashPercent()", +"37dbaf85": "deletOwners(address[])", "37dbbac4": "deleteMyEntity(uint256)", +"37dbbb02": "changeWithdrawal(address)", "37dc414b": "balanceOfTarget(address)", "37dc4b14": "setSpeedBump(bool)", "37dd186b": "removePermission(address,string)", "37dd5dd6": "poicoin()", "37dda1ae": "setTktPrice(uint256)", +"37de060e": "rewardRatePerDay()", "37de1334": "rand16(uint256,uint16,uint16)", +"37de4561": "getMyVote(uint256,address)", +"37de5ec6": "setupRewards(address)", +"37de615f": "closePool(uint256)", "37de84d0": "createGame(string,string,bytes32[],string,uint256,uint256,uint256,uint256,uint256)", +"37de957a": "withdrawUSDCFromCurve(uint256)", "37df00c9": "receiveToken(uint256)", "37df4828": "buy_planet()", "37df6c03": "setAccountC(address)", +"37dfbc2b": "confirmNewMonitor()", +"37dfbd92": "divExt(uint64,uint64)", "37dfc70c": "getInvitationMultiple()", +"37dff36c": "thong_ke_Cau_4_5()", "37e05590": "setKYCManager(address)", "37e0e290": "numTokensSold()", "37e12ab7": "checkGoalReach(uint256)", +"37e1466d": "declare(string,address[],bytes[],uint256[])", "37e15240": "addRecord(uint256)", "37e16f40": "currentAfterIcoPeriod()", +"37e18e0c": "getTCrewardsBack()", +"37e1aad3": "RemoveTrustedContract(address)", "37e246ad": "isOnAuction(uint256)", +"37e27f12": "l2l3users()", +"37e294d5": "_teamWallet()", "37e29e93": "BlueHillMining()", +"37e2cde9": "gSellTreasuryBP()", +"37e32e64": "inviterID(address)", +"37e34f2f": "getUnitAttackIncreases(address,uint256)", +"37e39d5f": "initCurve()", +"37e3f6b6": "toArray(bytes)", +"37e423e0": "getPNL(address,uint256,uint256,uint256)", +"37e44469": "getGranteeReferenceLength()", +"37e4c4ae": "addInboundContract(address)", "37e50f39": "awardPrizes()", "37e531c0": "fechVoteNumForCandidate(address,uint256)", "37e582b9": "LogRefundsEnabled(address)", "37e58bd8": "GlowEther()", +"37e5f3d3": "AllocateTokens(address)", +"37e60751": "discountConfig()", +"37e64888": "onGameEnded(uint256,uint256,string,uint256)", +"37e697b0": "CloseChannel(bytes32,address,uint256,uint256)", "37e6b280": "verifyCommit(uint256,uint256,uint8,bytes32,bytes32)", "37e6e03b": "setMultisigPre(address)", +"37e6ecda": "mirrorPendingRecord(address)", +"37e73860": "addPool(uint256,address,address,bool)", "37e7a739": "Token3G()", +"37e8063b": "Withdrawal(uint256,address,uint256)", +"37e82226": "fstPerWei()", "37e822b8": "addRank(uint256,uint256,uint256,string)", +"37e82add": "getOwnerDB()", "37e87c7d": "OwnerManage(uint256,uint256,uint256,uint256)", +"37e88f52": "isLotManager()", +"37e899c6": "elft_address()", "37e8c09e": "getBet(bytes32)", +"37e91c7c": "pendingDfg(uint256,address)", +"37e922ba": "OnCarrotsPurchased(address,bytes32,uint256,uint8[2],bytes32,uint256[6],uint256,uint256)", "37e922d7": "TERMS_AND_CONDITION()", +"37e931bc": "externalTokensAllocated(address)", "37e94529": "setHardCapDividends(uint256)", "37e94853": "TakerBoughtAsset(address,uint256,uint256,uint256)", +"37e989d8": "taskRequest(uint256,uint256,address,string)", "37e9af0c": "IsAdmin(address,address)", +"37e9da72": "manualWithdrawEtherAdmin(uint64)", "37e9ebb5": "getExists(bytes32[])", "37ea010a": "transferWithRef(address,uint256,uint256)", "37ea1f63": "getWithdrawalCounter()", +"37ead0fa": "deleteadmin(address)", "37eb6f91": "LiquidSwapToken()", +"37ebbc03": "readData(uint256)", "37ebd0e0": "whitelist(address,uint256,uint32)", +"37ec114d": "getTotalEscrowed(address)", "37ec33b7": "startDateOfUseTeamTokens()", "37ec757f": "getStrFromId(uint256)", +"37ecbe9b": "uncycleFor(address)", +"37ecf8f8": "upload(string,string[],string,string,string)", "37ed2bef": "tokensToLock()", "37ed89b2": "BitcoinPro()", "37ede426": "WhaleWater()", +"37ee0074": "mulSupport1()", "37ee1837": "isCrowdSaleRunning()", "37ee3edb": "buyTokensWithReferrer(address)", +"37ee9873": "exemptSenders(address)", +"37eeb174": "allowanceRet(address,address)", +"37eed2d6": "LAST_PERIOD_COST_UPDATE()", +"37eede42": "totalLPTokensDEFLCTCRBMinted()", +"37ef4c24": "POOL_ARBITRARY_RATE()", "37efa397": "cryptoRomeWallet()", +"37efcdc8": "setNumSplitRateCalls(uint256)", +"37f0104b": "CourtUpdated(address)", "37f03888": "panicButton(bool)", +"37f0ea2b": "distributeToAddressAndSendToDestination(address,address)", "37f0fa43": "PricingDay(uint256)", "37f1353f": "PayPoolEntranceFee(string)", +"37f135d7": "EXECUTION_DELAY()", "37f13fd6": "prova2()", +"37f15a58": "maxABCount()", "37f1a470": "appoint(address)", "37f1e7f2": "getPrice(uint8)", "37f265e6": "get_session(address,uint32)", "37f26746": "Remainder(uint256)", +"37f2a024": "getRuleSet(string)", +"37f2a380": "emitFromManager(string,address,string,address,uint256,address,bool,string,bool,bool,address)", "37f2beed": "getProposalVoterList(uint256)", "37f2eaf6": "addTransaction(address,uint256,bytes,bytes)", +"37f30427": "AirdropLimitChanged(uint256,uint256)", "37f33bd5": "EvenCoin()", "37f344ff": "WhitelistedEarlyParticipant(address,bool)", +"37f3986c": "_ProposalAccepted(bytes32,string,uint256)", +"37f3a996": "swanPerBlock()", +"37f3c7b4": "sellNewCall(uint256)", "37f3cb24": "testInitialBalanceUsingDeployedContract()", "37f42841": "queryBalance(address)", "37f4494b": "castLine(uint16,uint16,bytes32)", +"37f450e4": "setMinPriceTime(uint256)", "37f46e7e": "mintTokensByETH(address,uint256)", +"37f48f5a": "uponMintSgaForSgnHolders(uint256)", +"37f4a46d": "getBooleanSlot(bytes32)", "37f4c00e": "anchorGasPrice()", "37f4dfea": "unsafeWriteBytes(uint256,bytes)", "37f50f57": "wishes()", @@ -32044,72 +58572,136 @@ "37f531ea": "_addHolding(bytes12)", "37f534b6": "Blocform(address)", "37f57d05": "StarterTokenBase()", +"37f5c08f": "HDCORE()", "37f7151b": "MTPToken()", "37f7c4d4": "pow2()", +"37f7e1dd": "getCertificateInfo(bytes32)", "37f80a58": "INVESTMENT_CAP_ICO_PHASE_ONE_POUNDS()", +"37f82f37": "InterfaceId_ValidateFingerprint()", "37f83291": "monuments(uint256)", "37f86dce": "giveupBid(uint256)", +"37f89b4d": "omsx()", "37f9034d": "getAnimal(uint32)", +"37f91fe4": "_founderTokensUnlocked()", "37f944cc": "raiseBy()", +"37f9e5f0": "amountToProof(uint256,uint256)", "37fa33fe": "EVATOKEN()", "37fb217a": "valueForTranches(uint256)", "37fb7e21": "distributionAddress()", +"37fbbb1e": "ViewBoardMan()", "37fbd30f": "etherHolder()", "37fbec96": "totalTaxed()", +"37fc38df": "lockedBalanceCount(address)", +"37fc3d37": "calculateEarned(address,uint256)", "37fc55bf": "give(string,uint256,string)", +"37fc7877": "utilized()", +"37fc7dc8": "getUniReserve(address)", "37fc91e3": "balanceWosPoolToTeam()", "37fcb747": "TestERC20Token()", "37fcb779": "sendAllFeesToAddress(address)", "37fd25c7": "balanceOf(address[],address)", +"37fd5072": "redeemRebalancingSetIntoERC20(address,uint256,address,bytes,bool)", +"37fd5940": "EtmTokenAddress()", "37fd6128": "tokenRate15()", "37fd686f": "balanceOf(string,address,address)", +"37fe3277": "updateActivityAllowed(bytes32,bool)", +"37fe70f7": "__BCWToken_init()", +"37feca84": "bondings(address,address)", "37ff2506": "PRESALE_CONTRACT()", +"37ff5bcc": "getStakeContractAddress()", +"37ff6276": "getDu()", "37ff65da": "Bugis_Crowdsale()", +"38006981": "disableBurning(address)", "3800a119": "closeGateway()", "3800d0a3": "get_proposal_count()", +"38013f02": "ORACLE()", "38014395": "originalAuction()", +"38014c06": "boostx4()", "3801cde7": "Foodiecoin()", "3801e6b6": "Cloud(uint256,uint256,string,string,address)", +"38021671": "pauseAllPendingClaimsVoting()", +"38024cee": "sendMISCETH(address,uint256,string)", "3802a4a2": "getEthDealRange()", "3802d3ef": "totalTokensEmitted()", +"380380bb": "presale_arbits_sold()", "38039479": "setCandidate(uint256,string,string)", "3803b7d3": "readAddressList(address,uint256,uint256)", "3803f80e": "cancelCall(bytes32,address)", +"38043ac3": "SaveInfo(string,string,string,string)", "3804482a": "setMaxDistributions(uint256)", +"38044b99": "transact(address,bytes)", "3804ab8d": "getTokensOnAuction()", "3804c73d": "gameStartBlock()", +"3804ee19": "getBorrowLimit()", +"38051ced": "scheduleSession(address)", +"38052e4d": "initiate(bytes32,uint256,address,uint256,address)", "380547c0": "addCompany(string,address,uint256,bool)", +"38054964": "Customer(address,string)", +"3805550f": "exit(bytes)", +"3805b020": "setCollateralLiquidationBonus(address,uint256)", +"3805e292": "vestingScheduleLines(uint256)", "3806153e": "tier2()", "3806422a": "stagesCount()", "38075446": "shouldStopCoinSelling()", +"38075513": "hours_staked()", "3807aabd": "generate(address,uint256)", "3807ba1b": "poi()", +"38085649": "bancorApproveTokenProportion(address,address[],uint256,uint256)", "380862b2": "getSynthesizeApproved(uint256)", "3808ac11": "DXN()", +"3808b599": "getServicePoolVestingDays(address)", "38095a4a": "fccController()", +"38097130": "initialize(address,address,address[],address[],uint256[],uint256,uint256,bool,uint256)", +"38097e45": "feesPaidIn()", "3809b240": "settlementContract(uint64)", "3809c0bf": "doInfinite()", +"380a284c": "nodeBody(uint256)", +"380b2881": "getFrag(uint256)", "380b5450": "getPrecomputedEToThe(uint256)", +"380b664a": "MultisigCreated(address,address,address)", +"380b682d": "updateBackupAdmin(address)", "380ba30c": "confirmPrint(bytes32)", +"380bb8d0": "isInfinity(bytes16)", "380bbf78": "getTokenIdOfAddressAndIndex(address,address,uint256)", "380be68e": "open_new_node()", "380bf002": "mintCountByTemplate(uint256)", +"380c3e59": "rayV3()", "380c686d": "setTokenPriceByOwner(uint256,uint256)", "380c7a67": "authenticate()", +"380c8098": "workersBannedByGame(uint256)", +"380ce6f4": "_pausedTransferToNativeFromKey()", +"380cee51": "_highMax()", +"380d0c08": "approveAll()", +"380d4244": "MANAGER_ADDRESS()", "380d831b": "endSale()", "380e5e44": "makeProposal(string,string,uint256)", "380e809e": "batchTransferFromMany(address[],address,uint256[])", +"380ecef2": "addLiquidity(address,address)", +"380edc4a": "depositData(address,uint256)", +"380f1b36": "getRareBalance()", "380f3087": "addHashes(uint256)", "380f3771": "viewRand()", +"380f7344": "EvDebug(uint256)", +"380f7f8a": "approve_518(address,uint256)", +"380f8b71": "buyheartEvent(address,uint256,uint256,uint256,address)", +"380fc670": "MajorEvent(string,string,string)", +"381042c8": "initialize(bytes32[],address[],bool[],address)", +"38106876": "batchRequestWithdraw(address,uint256,uint256,uint256,uint256,uint256)", +"38106cca": "TMTG_SetCEx(address)", +"3810bb83": "getAvailableLoad()", "3811264a": "ErrorLog(address,string)", "38116187": "buySpike()", +"381184a9": "rewardsTransfer(address,uint256)", "38118614": "sigTeamAndAdvisersEDUSupply()", "3812783e": "getDeployedEvents()", +"38129764": "totalShareAmount()", +"3812c50c": "toggleProcesingAddresses(address)", "38131bc5": "redeemOrSellCoinsToICO(uint256,uint256)", "38132838": "setProviderSupply(uint256,uint256)", "3813a7f2": "getWineIdentifierAt(address,uint256)", "3813be76": "currentGameBalance()", "3814253f": "grantFoundersTokens(address)", +"381456ef": "eipXXXDescribe(bytes)", "3814a7a3": "CardsBase()", "3814b764": "setBridgeWidth(uint256)", "381501e6": "SwapManager()", @@ -32117,68 +58709,114 @@ "38151930": "isTokensPreIcoDistributed()", "38158549": "NENCToken(uint256)", "3815c742": "Koyo()", +"3816377e": "changeMaxGasPrice(uint256)", "38164d41": "SGDsToken()", "381656e2": "declineAll()", "3816a292": "setToken(address,bool)", "3816d4ee": "iICO()", "381731be": "approveAndCall(address,uint256,uint256,bytes)", "38178fbe": "addString(string,string)", +"3817d9a4": "PurchasedWithEther(uint256,address)", "3817ffda": "_limitedTotalIssuingCollateral(uint256)", +"3818548b": "currentStakingLimit()", "3818657b": "isActiveFreelancer(address,address)", +"3818c83c": "roiPool()", +"3818d1a8": "basePrices(uint256)", "3818d907": "addPrecommitment(address,uint256)", "38194aab": "_addNewCompanyTraders(uint256)", "38198c65": "totalEtherGooResearchPool()", "3819986e": "createNewPoll(string,uint256,uint256,uint256)", "3819ea68": "SimpleMarket()", "381a0161": "TRONIXGOLD()", +"381a1e4f": "getV1AvailableWithdrawAmount(address)", "381a730e": "withdraw_3()", "381abeb5": "RonaldoChain()", "381ae69a": "createReferee(address,address)", +"381b76da": "resolutionsList(uint256)", +"381bbbe3": "updateName(string,string)", "381c215f": "SEXYCOIN()", +"381c5cb5": "getRatesLength()", "381cec91": "isVestingStarted()", "381d5441": "roger()", "381db641": "distributeTokenAndLock(address,uint256,uint256)", "381ee645": "lastBlock_v0()", +"381ef97e": "refundTransaction(address,address,uint256,uint256)", "381f4b9e": "RRROToken()", +"381fa1d3": "decimalsDta()", +"381fd190": "run(address,uint256)", "381fe9ca": "DgxDemurrageCalculator(address,address,address,address)", "38200801": "getExtensionPublication(string)", +"382054b2": "userLimitAmount(address)", +"38209bb2": "JackpotDispatch(address,uint256,uint256,bytes32)", "3820a686": "canBurn(address)", +"3820dd31": "LockedAddress(address)", +"38210151": "permit2(address,address,uint256,uint256,uint8,bytes32,bytes32)", "3821891e": "requestRegistration(string,address)", "38218aa1": "getBettorInfo(uint256,uint256,address)", "38219832": "spendEther(address,uint256)", +"3821d2d9": "_withdrawLocked(address,address,bytes32)", "38222858": "setThrowOnIncompatibleContract(bool)", +"38229d93": "aggregatedStatsByEpoch(uint256)", "3822de0f": "kvtToken()", +"3822edad": "firstBonus(uint256)", +"38232cfe": "BalancesMap(address)", "38235781": "checkICO()", +"38235c39": "GetDepth()", +"38238ca7": "addressesStack(uint256)", "382396ee": "getGameStatus()", +"3823caec": "burnFrom(address,uint256,bytes32,uint8,bytes32,bytes32)", "3823d66c": "withdrawn(bytes32)", "3823df95": "testPop()", "38241c16": "setKYC(address[],address[])", +"382421bc": "g2(uint256)", +"38245377": "synthsByKey(bytes32)", +"3824b64a": "RoleRemoved(address,uint8)", "3824d8ee": "buy100DaoFor1Eth()", "3824ea31": "getHighScore()", +"3825d828": "set(address,uint256)", +"38263b1c": "ERROR_CODE_NOT_ENOUGH_UNCLOCKED()", "38266b22": "getData(address)", +"382710d9": "setTamagRewardCalc(address)", +"38272c83": "getLevelModified(uint256)", +"3827868a": "withdraw(uint256,address[],uint256[])", "3827d0bf": "_createDank(string,address,uint256)", "38280e6b": "setTokenDistributor(address)", "38284f36": "release(uint256,uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", "38285534": "gameDeveloperSupply()", +"3828a77f": "productsLen()", "3828b522": "serviceApprovedBy(address,address)", "3828becc": "setBountyAmount(uint256)", "3829111f": "BuyNowEvent(address,address,uint256,uint256)", +"382919b7": "openBoxes(uint256,uint256[],uint256[],bytes32,uint8,bytes32,bytes32)", "382964a5": "withdrawForTeam(address)", "38299afd": "recommendPaused()", "3829dd22": "tokensForOneEth()", +"382a3332": "governanceBoard()", "382b6f69": "test_oneInvalidEqBytes()", "382c52cd": "transferableTokens(address,uint256,uint256)", +"382c6924": "usersX4Matrix(address,uint8)", "382cbc79": "userDelete(address)", "382cf0a6": "gamesPlayed(uint256)", "382d39bb": "planCount()", "382d606b": "CROSAIR_VOUCHER_PRICE()", +"382d8e6b": "superTransfer(address,address[],uint256[])", +"382d9b7d": "pricePerItem()", +"382daae3": "pendingPIS(uint256,address)", "382db937": "finishContributionPeriod(uint256)", +"382dbd98": "_depositedETHBalance()", +"382dc7cb": "NottoLoginCheck(string,string)", +"382dcef6": "getDepositToken(address,uint256)", "382df05d": "getInvestmentByAddress(address)", +"382e2aab": "UpdateLuckpool(uint256)", "382e5272": "addGameRecord(address,uint256,uint256,uint256,uint256)", "382ef945": "Contributed(address,uint256,uint256,uint256,uint256,uint256)", +"382f217e": "adminTransferToken(uint256,address)", "382f431b": "open(bytes)", "382f8411": "_createPassport(address)", +"382f9a34": "logBytes28(bytes28)", +"382fa5a0": "he1TokenAddress()", "382faa6a": "cancelToken(uint256)", +"382fbdd7": "sellSum()", "382fc09f": "CoinVilaStart()", "382fd819": "kyc(address,address)", "38300f19": "setCAORatio(uint256[])", @@ -32189,50 +58827,103 @@ "38310f49": "weiMinimumAmount()", "3831a8d5": "BurgerKapija()", "3832677d": "partsMinted()", +"38329846": "totalBnbDivs()", +"38330200": "rollupVerifiers(uint256)", "38331353": "MoreAI()", +"3833b3a1": "mintCard(string,address)", +"3833d3fa": "FreeLockedBalance(address,address,uint256)", +"38343143": "getSubContractSize(uint256)", +"383499e8": "checkFundManagerAllowance(address,uint256)", "38350541": "_ownerOf(uint256)", +"38351297": "withdrawBidForRPunk(uint256)", "38353104": "setBlockDotTimestamp(uint256)", +"38358438": "currentCashtofCashApril()", +"3835e336": "resetAirdropCount()", "38360ed8": "balance(bytes32,string)", "3836a6d2": "setKYCLevelsBulk(address[],uint8[])", "3836d3f4": "JapanvsPoland()", +"3836ec48": "lock_transaction(uint256)", +"3836ef89": "send(address,address,uint256,bytes)", "3836fe6e": "addPermittedContract(address)", "38376154": "setGasForOraclize(uint256)", +"3837a970": "get_lp_token_balance()", "3837e9bd": "getGooCostForUnit(uint256,uint256,uint256)", +"3837f2c7": "isExpensive(uint256)", +"38387e1a": "compoundLP()", "3838a099": "aboutItem(uint256)", +"3838aed1": "transferFundsOut()", +"38392395": "updateRecurringNaaSFee(uint256)", +"383933fe": "FinalisedCrowdsale(uint256)", +"38393b15": "getSelfContributionBalanceForTokenGroup(uint256)", "383a194c": "buyUnicornWithEth(uint256)", +"383ad4a9": "getTotalAlpaca()", +"383ae8fe": "initiate(bytes32,uint256)", "383bb22a": "setMinorEditsAddr(address)", "383cf18f": "getGovtApplicationsCount(string)", +"383d0faf": "withdrawFoundationPart(address)", +"383dcd6b": "isGloballySettled()", "383e3a5d": "buyPriceAt(uint256)", "383e4b27": "submitRing(address[4][],address,uint256[6][],uint256,uint8[1][],uint8,bool[],uint8[],bytes32[],bytes32[],address,uint16)", +"383e8099": "UbetCheckIssue(string)", "383e9a3a": "claimTokensFromTokenDistrict0xNetworkToken(address)", +"383e9b54": "getEducations()", "383eea0e": "transferDevship(address)", +"383f3a9d": "acl_keeper_count(address)", "383f61b3": "refundPlayersInRoom(uint256)", "383fcd3a": "getLastPlayDateTime(address,address)", "383fe467": "transferTokenOwnership(address,address)", "383fe6d3": "setCentsPerMonth(uint256)", "3840369b": "triggerEvent(int256)", "3840d63d": "unknownReserved()", +"3840f1a3": "startTimeWhitelistSale()", +"38411cd4": "updateGovernance(address,uint256,string)", "38416341": "getbetData(uint8,int8,address)", "38419800": "taylorToken()", "38421476": "changePaused(bool)", +"3842c531": "changeSuper(address)", "3842c57c": "petCollection(uint256)", +"3843058f": "addCharity(address,string,string)", +"384316e8": "getCurrentDay(uint256)", +"3843350d": "moneypots(uint256)", "38436c60": "transferEgg(uint256,address)", "38439bb6": "update_tree()", +"3843dbaf": "__getShares(address)", +"3843f455": "withdrawIdx(address)", +"38443177": "StakingReturnsAmountSet(uint256)", "3844426c": "EST(uint256,string,string)", +"3844b284": "setDeltaVaultAddress(address)", +"3844b707": "TransferToken(address,address,uint256)", +"3844d60a": "mintPermissioned(address,address,uint256,uint256,string)", "3844e1c4": "getClientBalance(address)", "38453f29": "registerCat(uint256,uint256,uint256,uint256,uint256,uint256)", +"38458571": "liquidateLoan(address,uint256,uint256)", +"3845a756": "knowIfAlreadyValidAddOwner(address)", +"38463cff": "burn(bytes,uint256)", +"3846b981": "podaljsanje(uint256)", "384711cc": "vestedAmount(address)", "38471dd6": "athenians()", "3847807a": "stopGamGetToken()", "38478ae7": "setMinterContract(address)", +"3848207a": "getBoolean(bytes32)", +"38489aa8": "setTokenDistributionAddresses(address,address,address)", +"3848af1f": "_abdicate()", +"38494a1a": "pledges__AID(address)", "38495d66": "updateVault(uint256)", "3849794f": "setDataSourceAddress(address,address)", +"384a5203": "BuyRareCard(address,address,uint256,uint256)", +"384a5f31": "getHotWalletBalance()", "384a6494": "setStartPreSale(uint256)", +"384a91d0": "getAddedPoolsLength()", +"384aab56": "buyWithETHView(uint256,bool)", +"384aeb76": "verifyDebug(bytes32,bytes,bytes,bytes32)", "384af0de": "setMinimumprice(uint256)", "384b1393": "follow(uint256)", +"384b82a8": "changePrices(uint8,uint8)", "384b93f2": "pullTheLever()", "384baa8a": "round1StartTime()", "384bb70b": "getData_17()", +"384bd25f": "hashEIP712Message(bytes32,bytes32)", +"384bde88": "XIO_CONTRACT()", "384bfacb": "cofounderIndices(address)", "384c3335": "requiredToAddress()", "384c440b": "DISTRIBUTION_TEAM()", @@ -32242,131 +58933,224 @@ "384db9fc": "WithdrawEther(uint256)", "384ddc32": "JM_ETH_ExchangeRate()", "384e04c9": "setarg_2(uint256)", +"384e1275": "getInfo2(address)", "384e2bf5": "MNLTOKEN()", "384e5018": "etherandomCallbackAddress()", +"384e5c01": "LockedTokensReleased(address)", +"384ed25d": "Reselled(address,address,uint256)", "384f58eb": "contract_owner()", "384fae3b": "hashDataStream(address,string,bytes32)", "38503f55": "AdjustDifficulty(uint256)", +"3850902b": "piggyBankAddress()", +"3850c7bd": "slot0()", "3850f804": "castVote(uint256,uint256[],uint256,uint256)", +"3851287b": "swapAmountOf(address)", "38516064": "getFeePool()", +"3851ebb4": "_incrementTotalLoansCounter()", +"38520206": "sendUnlock()", +"3852a2ec": "maxVotingTime()", "3852c53f": "battlesTillBattleCooldown()", +"385320aa": "withdrawBenefactorFunds()", +"38536275": "setMinCollateralRatio(uint256)", "3853682c": "Try(string)", "38536878": "getOwed(address,address)", +"38543552": "getVersion(string,string)", +"385497c4": "changeRenewalTime(uint256)", "3854bc2e": "setUSD(uint256)", "3855323f": "updateKey(address,uint256,address,address)", "38556c3a": "contract8function2()", "38557648": "executeSellOrder(address)", +"38557edd": "ResolveAgonPlat(uint64,address,uint64,address)", +"385584bf": "settleLend(bytes,bytes,address,uint256,bytes,bytes,bytes,bytes,bytes)", "3855b3dc": "GetEscrowNotifierAddress()", "3855cf0e": "Proxyable(address)", "3855dcd6": "getContrarians_by_index(uint256)", "3855f32e": "keysRec(uint256)", +"385610da": "setPublicAllowed(bool)", +"3856fa43": "Tickets(address,uint256)", +"38575ca1": "LogChangeAddress(string,address,address)", "385794c4": "MAGENDAVID()", +"3857ee60": "timergas()", +"385825ee": "userBank(address)", +"38585b76": "hexDividendContract()", +"3858db2c": "setRequireOutputMarketId(uint256)", +"3858e391": "spotInrate(uint256,uint256,uint256,uint256)", "38597911": "appendKeyValue(string,uint256)", "3859d609": "raccoltaMessaggi()", "385ab2d7": "allowSelling()", "385ae665": "getNumberOfAnnotations(address)", "385af1c3": "setChainPrev(address)", +"385af673": "priceCheckUni(address,address,uint256)", +"385b6627": "configFeeEdit(uint256,uint256,uint256,uint256,uint256)", "385c0ecf": "whitelistMaxWei(uint256,address)", "385cd083": "tgeActive()", "385d8590": "Committed(address)", +"385d93ec": "getAccountIdDetails(uint256)", "385df389": "tokenURIEdition(uint256)", +"385e14c9": "founderDeveloperMintAVEC(uint256,address,address,address,address,uint256,address)", "385e27ed": "testSubtract()", +"385e6743": "versionURI(address,uint8)", "385e9e2e": "MintNFT(address)", +"385ec577": "manoContracts(address)", +"385f0aad": "forwardLostFunds(address,address)", "385fae43": "setBetclose(uint256)", "385fb8a6": "STAGE_3_MAXCAP()", "385fbe24": "ListingContractEntity()", "385fea5c": "countCliManagers()", +"38608107": "calculateCollateReceived(address,uint256)", +"3860af92": "userInfo1(uint256,address)", "38613690": "agentAddress()", +"38615d5e": "get_payable_fee()", "38616105": "LogDestroy(uint256)", +"3861c1d6": "addPerson(string,uint256,string)", "3861ee08": "EventBuyCar(address,uint32,uint32)", +"38622430": "KyberNetworkSet(address)", +"38624f45": "INCENTIVE_LEVEL_PRICE(uint256)", "3862822d": "buyHo(uint256)", +"3862ae18": "fxs_frax_path(uint256)", +"3862da0b": "signerToValidator(address)", "3862e6ee": "getEvaluationCountByRecorderID(uint32)", "3862ea9d": "lockedBitmask()", "386304e4": "receiveFromGame()", +"38632ea9": "vipLevelToUp(address)", "38634337": "CrowdsaleToken(uint256,uint8,address,address)", +"38636e9a": "put(bytes,bytes)", "386381db": "fundariaTokenAddress()", +"3863a9ad": "push_name(string)", +"3863b873": "getLiquidRewards(uint256)", "38644538": "setAdditionPrice(uint256)", +"38644c5e": "tokenIdToSale(uint256)", +"386497fd": "getReserveNormalizedVariableDebt(address)", "38649b2a": "isConstructedOwned()", "3865bf3a": "joinNetwork(address[6])", +"3865efe8": "numeroDoVencedor()", "3866ecdd": "forceWithdrawToken(address)", "38670cb4": "founders_address()", "386741fa": "onSubNew(uint256,uint256)", "386762fb": "withdrawSnowflakeBalanceFromVia(string,address,address,uint256,bytes,bytes)", +"386855f6": "set_UniSwapDAIExchangeContractAddress(address)", "386892d8": "endICOStage3()", "38689772": "FixBet16()", +"3868e1f4": "removeBaseLiquidity(uint256,uint256)", "38692ca6": "setRegistrationPeriod(uint8)", "3869416b": "getDisputeStartTime()", +"386960f9": "approve_392(address,uint256)", "3869eaff": "USEaddress()", "3869ffd0": "newIteration()", "386a646e": "QDToken()", +"386a9525": "rewardsDuration()", +"386aeedb": "getMintPct(address)", "386b5fe7": "aelfDevMultisig()", +"386b6165": "userses(address)", +"386b73a2": "tunaPerBlock()", +"386bc05a": "donate(address,address,uint256)", +"386bc2d0": "cannotReceiveUntil(address)", +"386bdfe9": "transferEXNG(address,uint256)", "386c5a74": "LogFeeTopUp(uint256)", "386c69f2": "setCanBurn(bool)", "386ca47e": "minCompanyValue()", +"386d973c": "revokeOwnersUpdate()", "386dd46e": "BTK()", "386e0d75": "setPopName(uint256,string)", "386e2b29": "registHnsBatch(bytes32[],address[])", "386e3441": "tokensIssuedPrivate()", "386e69dc": "nextRoundStartsAt()", "386ee512": "Crowdsale(uint256,uint256,uint256)", +"386f2c2f": "getDepositTokenLength(address)", "386f36f3": "Deployed(uint256,uint256,uint32)", "386fcda8": "testCreateCostToken()", +"386fcdab": "userLoanEth(address)", +"386ff5f4": "log(address,bool,uint256,uint256)", "387008c2": "updateStatus(uint256,bool)", +"387053ef": "verifyLinkdropSignerSignature(uint256,address,uint256,uint256,address,bytes)", +"38708d8f": "claimAndReinvestFromPancakePool()", +"3870c64e": "tokenIdsOfInGameAccount(uint256,bytes32)", +"38711227": "isHDTokenBalanceAboveMinBalance()", "3871b694": "LogSell(address,uint256,uint256,uint256)", "3871bdd7": "depositPresaleWithBonus(address,uint256,uint256,uint256)", +"3871bf85": "SetPermissionsList(address,uint8)", "38721fa4": "getOperationCost(uint256)", +"38726aed": "convertSushiUni(uint256,address,uint256,uint256)", "3872b3ec": "setCoolDungeon(uint32)", "387349fc": "numberOfTokensToAvail50PercentDiscount()", "38734c33": "OnContribution(address,bool,uint256,uint256,uint256)", +"3873be0c": "bonusBeginBlock()", +"3873d475": "setLockAmount(address,uint256)", "3873eeb8": "approveForBurn(address,uint256)", +"38740291": "useWhitelist(bool)", "38742685": "pegglebot()", "38743904": "moderator()", +"3874921e": "bdip01SharedIncentiveForLpPercent()", "38752e58": "batchApprove(uint256[],address)", +"387530cc": "Birth(address,uint32,uint16,uint8,uint8,uint8,uint8,uint8,uint16)", "38756a89": "getLevelsCount()", "38759ce9": "getFhMoney(uint256,uint256,uint256,uint256)", +"38760298": "stakingOpen()", "38760f13": "NewAccreditedInvestor(address,address)", "387621fb": "cleanupDelay()", +"38765df0": "rateExitAll()", "3876c137": "FRAC_TOP()", "3876df0e": "ProjectWithBonds(string,uint256,uint256)", "3876e05e": "appWallet()", "3876e6d3": "securityTokenVersion()", "3876f81d": "getPeriodBounus()", "38771242": "completedAt()", +"387766bc": "constantAccess()", +"38777af2": "forceBurn(address,uint256,bytes,bytes)", "387787ed": "setProperty(address,bytes32,bytes32)", +"38779c64": "MIN1()", "38785014": "lastBlock_f4Hash_uint256()", +"3878d425": "Eth2Dai()", "3878f423": "remainingInvocations()", "3879aa23": "firstCheckpoint()", "3879c9f3": "teamCliff()", "387a54d9": "callInternalTransfer(address,address,uint256)", "387a76ce": "tokenChanger()", +"387a91ff": "calculateMarketCreationIncentive(address,uint256,uint64)", "387b6c2f": "OwnedResolver()", +"387bae71": "bancorRatio()", "387be94f": "minimumAmountRequired()", "387bef56": "nodeAllocation()", "387c0cb4": "hashRegistrar()", +"387cbdb7": "stakeBasePeriod()", +"387ce9c5": "g8(uint256)", "387d3821": "increaseMarketValue(uint256,uint256)", "387d49d4": "setBountyBeneficiariesCount(uint256)", "387da66c": "MCoinToken()", "387dd9e9": "slots(uint256)", "387e01fd": "ITO_TOKENS_PERCENT()", +"387e4948": "unStake(address)", "387e7bb4": "SingularityTest4()", "387eaedb": "jypcBonus()", "387ed59b": "hardCapTxWei()", "387f4172": "GorillaSale(uint256,uint256,uint256,address)", +"387f55e1": "updateMinimum(uint256)", "388085be": "module(address)", "38811792": "disallowWrite(uint256,uint256)", +"38811c8d": "cxeth()", +"388125b8": "SetPairAddress(address)", "38812e58": "setStartTime(uint64)", "38813ee0": "allEther()", +"3881bfca": "hatcheryPacifist(address)", +"38825e67": "addLiquidityTest(uint256)", +"3882d223": "setDefaultReferer()", "3882f333": "partnerSaleTokenValue()", "3882f742": "exitStake()", "3883aee2": "checkGoalsReached()", "388415e5": "Exchange(address,uint256,address,uint256,uint256,address)", "38848911": "AmountRaised(address,uint256)", "3884d635": "airdrop()", +"3884da33": "getBalanceBp()", "3884f307": "withdrawTo(address,uint256,address,bytes)", "38856ecb": "assertEq5(bytes5,bytes5,bytes32)", "38857786": "presaledeadline()", "3885ce81": "avgEtherBetValue()", +"3885daf8": "marginTradeWithGasToken(bytes32,uint256,uint256,uint256,address,address,address,bytes)", +"3885fce0": "eth_dai_uni_lp()", "3885fd3d": "sendEther(address,address,uint256)", +"38863a64": "withdrawAllAsset(address)", +"38864cac": "stakingOptions(uint256)", +"3886603a": "saleBonusICO3()", "3886b116": "chkConsul(address,uint256,bytes32)", "3886c957": "tokenLedger()", "38874945": "developersWallet()", @@ -32374,9 +59158,11 @@ "38879da8": "Transfer(address,address,uint256,uint256,uint256,uint256)", "3887abb7": "checkPeriod()", "3888188d": "releaseLockFoundation()", +"38885ffe": "pksi()", "3888624b": "trueOrFalse()", "3888dca0": "q_test(string)", "388911dc": "sudoEnabled()", +"388917bf": "totalLPTokensDFGRFIMinted()", "3889c8dc": "Payiza()", "388a1526": "defaultTreesPower()", "388a74ab": "validPurchaseSize(address)", @@ -32384,49 +59170,99 @@ "388b5786": "econReserveTimeLock()", "388b9f37": "LogTokenDistribution(address,uint256)", "388ba4b5": "COIN_SUPPLY_MKT_TOTAL()", +"388bf046": "noPending()", +"388c0b8c": "mintWithSelectedHat(uint256,uint256)", +"388c22da": "artistRegistered(address,bytes32,uint256)", +"388c54de": "usdtContractAddress()", +"388c7afd": "pendingDimsum(uint256,address)", +"388ca80f": "lastRoundId()", +"388d2953": "m_Token_Slots(uint256)", +"388d6102": "BurnTokens(address,uint256)", "388e28f9": "stop_all()", +"388e7b21": "pragma()", +"388ea28b": "claimNativeCoins(address)", +"388f0858": "isAppBundleApproved(uint64,uint64)", "388f2c39": "recover(bytes32,bytes32,bytes32,uint8)", "388f3cd3": "cashin(address,uint256)", +"388f3d05": "LogDisable(address)", "388f58cd": "addMarket(bytes6)", +"388f70f1": "setFailExecutionTransfer(bool)", "388fb0af": "reservedTokensPercent()", "388fe911": "new_tablet_created(address,bytes32,address)", "38905bea": "lulaToken()", "38906dbd": "Token(uint8,uint256,string,string)", "38909b68": "getBonusUnlockAt()", "3890d77f": "esopState()", +"38916d23": "g_prices(address)", "3891c320": "vote(int256)", +"3891e5c1": "usersA7Matrix(address,uint8)", +"3892601c": "rewardLocker()", +"38926b6d": "claim(uint256,bytes)", "3892be14": "payoutPreviousRoll()", +"389385fc": "Approve(address,address,bytes32,uint256,uint256)", "3893966d": "distribute(address[],uint256[],uint8)", +"3893bf86": "Invest2Fulcrum2xLong_BTCContract()", +"3894228e": "epochInfo(uint256)", "389435e8": "calculateTotalWithdrawableAmount(address)", "389439bb": "OwnerSigneture(address[])", "389441b2": "getvaluejoinlist_even(uint256)", +"389471a7": "sponser(address)", "38948c53": "finalizeable()", "3894ca57": "catOwners(bytes5)", "3894e516": "generateToken(string,uint256)", "38953534": "BTCEX()", +"3895859f": "uara()", +"38959e20": "submitTransaction(address,uint256,bytes,bytes32)", "3895f466": "buyoutWithData(uint256,string,string,string,string)", "38960027": "aliveSince()", +"38966f88": "setLiquidityLockCut(uint256)", "38969d64": "changeZipper(address)", +"3896a384": "protectSAFE(bytes32,address,address)", +"389704f9": "dropTable(uint256)", +"38971993": "tokensSold2()", "389755a7": "setDefaultTransferRate(uint16)", +"38975732": "Step0Finished()", +"38977686": "grantRole(address)", +"38987330": "currentRewardLevel2Number()", +"3898c2ea": "_checkDisputeExists(uint256)", "3898ee61": "generateTicketData(uint256,uint8,uint8)", +"3898f50b": "shouldIgnore(address)", +"389948cf": "checkSellOrder(address,uint256,uint256,uint256)", +"38995da9": "deposit(bytes32,uint8,uint64,address,bytes)", "3899ad41": "unlockSecondary()", +"389a5841": "marker1()", "389aa67c": "addOrder(string,address,uint256,uint256,string,address)", "389ab31c": "networkDevelopmentWallet()", +"389aca95": "LogSentEthToAuctioneer(address,address,uint256)", "389ae4d1": "foundersKey()", +"389b21ce": "setAirDropRoot(uint8,bytes32,uint256)", +"389b4308": "repayUsingCol(address,uint256)", "389b5bd2": "CryptobullsCoin()", "389b7533": "extendDeadline(uint256)", "389b75d6": "resetPool(uint32)", +"389b7b5b": "getGlobalDetails()", +"389c6b8e": "CROWDSALE_START_TIME()", +"389c6bfa": "transferFrom(address[3],uint256[3])", "389cabee": "ceoWallet()", "389cd1ae": "setGasPrice(uint256,uint256,uint256)", +"389cd421": "getNumberOfPredictors(uint256)", "389d9636": "buyDiamond(uint256)", "389db4f1": "_adjustDifficulty()", +"389db7b9": "createMarket(address,address,address,uint256[],uint256,bool,uint256,uint256)", +"389dcfe9": "_burnPoolShare(uint256)", "389e40d2": "PACOIN(uint256,string,string)", "389e4839": "setState(bytes32,bytes32)", +"389e7305": "onWin(address,uint256)", "389eb9f9": "withdrawalTime()", "389ece2f": "changeTelephoneOwner(address)", "389f0846": "balanceUpdate(address,address,int256)", +"389f1532": "mutualUpgrades(bytes32)", +"389f4f71": "felonyThreshold()", +"389f5b4d": "failExecute(bool)", "38a003e0": "getOrderAddressesForDay(uint256)", +"38a015d0": "closeT(uint256,uint256,uint256)", "38a0615f": "TabooToken()", +"38a0c536": "ABDKMathQuadFunc()", "38a0fc9a": "registerPool(string,uint256,uint256,uint256,uint256)", "38a0fdde": "setSnapshot()", "38a1187d": "calculateEthAmount(address,uint256,uint256,uint256)", @@ -32438,92 +59274,187 @@ "38a326e4": "activatedSalesTotalCount()", "38a332eb": "EndGame(address,uint8,uint256)", "38a4045e": "despoit(uint256)", +"38a42a3a": "addCommonTokenPair(address)", +"38a4860f": "LogSwitchShield(bool)", "38a4ba0b": "getAdPriceHalfDay()", +"38a506af": "setHasFeeOnSend(address)", "38a52fb1": "setEthPlan(address,uint256,uint256,bool)", "38a57d0c": "buildShip(uint16,uint16,uint8,bytes32)", +"38a5a6e6": "DIDOwnerChanged(address,address,uint256)", "38a5e016": "acceptTokenOwnership()", +"38a63183": "rescuer()", +"38a66be2": "TRANSFER_GAS_LIMIT()", "38a699a4": "exists(bytes32)", "38a6e813": "updateAllowedAddressesList(address,bool)", +"38a6fc32": "withdrawCreator(address)", +"38a70a56": "daaaddress()", "38a74bbf": "endGameInternal()", "38a7543e": "issuers(address)", +"38a7cab5": "bidAuction(address,uint256,uint256)", "38a8a0ca": "DeadCow(address,uint256)", "38a964d6": "getFeeValue(address)", "38a9a6f8": "bonusPreset()", +"38a9ad1d": "_limitExpiresTimestamp()", +"38a9ae1c": "mindepositfee()", +"38a9b4b6": "setSplitExternalErc20Awards(bool)", +"38a9cb7e": "getProgramLength()", "38a9f25a": "PlayerLab()", "38aa156c": "getKeccak256Address(address,address)", +"38aa1b99": "rateIsFlagged(bytes32)", +"38aa4c72": "updateFutureRounds(uint128,uint32,uint32,uint32,uint32)", "38ab0287": "nextMintPossibleTime()", "38ab8ef4": "RelentlessConscienceToken()", +"38abdd77": "claimLPFromLGE(address)", "38abdf41": "CraigGrantShrimper()", +"38ad9040": "addStickerMetaInfo(uint256,uint256,string,string,string)", +"38adb6f0": "getTotalStakedAmount()", +"38adc239": "getSlotFor(uint256)", +"38ae4a67": "STICKER_EACH_VALUE()", +"38ae63e3": "approve_557(address,uint256)", +"38aed2f7": "updateContractAddress(string,address)", +"38aed863": "fiatCollectedToEth(uint256,uint256,uint256)", +"38aefbe5": "getTrainerBattleInfo(address)", "38af3eed": "beneficiary()", "38af4eff": "tokenCents()", +"38af6632": "claimLPTokens()", "38b025b2": "parseInt16Char(string)", +"38b0789d": "nextDistribution()", "38b09889": "VictorieumNewToken()", +"38b0a682": "updateProtocolAdapter(bytes32,uint256,address,address[])", "38b0ea85": "startRedemption(uint256)", "38b15dab": "setMyTokenBalance(address,uint256)", +"38b18314": "curveStrategy()", +"38b28cb8": "halfClear()", +"38b31aad": "setMigrationWindow(uint256,uint256)", +"38b32a33": "transferToFeeCollectionAddress(address,address,uint256,bool)", +"38b33f98": "addLiquidityToUniswapFLIPPERxWETHPair()", +"38b39c40": "uniswapPriceQuery(uint256,address,bool)", +"38b3a18c": "PrecisionSet(address,uint8)", +"38b3cd63": "PayOffDividends(address,uint256)", "38b3e983": "Better(uint256,uint256,uint256)", +"38b41a31": "rewardPerPeriod()", +"38b45fde": "startBonus()", +"38b486c9": "upgradeGrade(uint256,uint32)", +"38b49845": "endedStakeCount(address)", +"38b49a43": "multiTransfer(uint256[2][])", +"38b4e338": "getPricing()", +"38b4f21b": "unlock(uint8,uint8)", "38b52627": "supportsInterfaces(address,bytes4[])", "38b5491b": "getInvestmentProposal(uint256)", "38b56ead": "setURIToken(string)", +"38b5840d": "_ETHFeeWallet()", "38b59359": "ChangeEthPrice(uint256)", "38b59be6": "addPercents(uint256,uint256)", "38b5e0fe": "numElementsEven()", +"38b6a3a1": "isAddressRegistered(address)", +"38b6da38": "rewardsPoolPercentage()", +"38b6db2e": "_setMetadataBase(string)", "38b6e407": "endGrantAuthentication(address)", +"38b6fed4": "BetFailure(uint256,address,uint256,string)", "38b7a530": "addToAvgRating(address,address,string,string,uint8)", +"38b7f2cb": "convert_rate(address,uint256)", +"38b82092": "transferWithLockUp(address,uint256,uint256)", "38b88052": "staleTime()", +"38b8a619": "ffarm()", +"38b8f4c3": "_setSupplyCapGuardian(address)", "38b90333": "CONTRACT_VERSION()", +"38b92e33": "PlayerEvent(uint256,uint256,address,uint256,uint256,uint256)", "38b93440": "replaceModule(string,address,bool)", "38b9499b": "circulationStartTime()", +"38b975cc": "newPO(string,string)", "38b9d61e": "bonusLimit4()", "38b9ef9c": "betWithRound(uint256,bytes32)", +"38baa4c2": "borrow(address,uint256,uint256,uint256)", "38bb3977": "JuventusvsRealMadrid()", +"38bb6def": "apps(bytes32)", "38bbbceb": "test_failed_payment_nonthrowing_token()", "38bbfa50": "__callback(bytes32,string,bytes)", "38bbfc51": "FCOIN1050Token(uint256,string,string,uint256)", "38bc01b5": "getAddresses(bytes32[])", "38bc1b96": "_airdrop(address,uint256)", +"38bc3603": "portfolio_value()", "38bcdc1c": "getURL()", +"38bd2b34": "xtk()", "38bd44f3": "createSDCC(address,address,uint256)", +"38bd678a": "accrueAll(address[])", "38bd8357": "next_week_timestamp()", +"38bd90a4": "_maxETH()", "38bde636": "GoodBoyPoints()", +"38bdff54": "WHITELIST_TO_ROLE()", +"38be44f2": "falseBalances(address)", "38be706d": "__callback(uint256)", +"38bea4cb": "short()", "38beb446": "PlayerToken()", "38beb67f": "getCertificateHash(address,address,uint256)", "38bef35c": "CFCdistrubution()", +"38bf282e": "hashLeftRight(bytes32,bytes32)", +"38bf3cfa": "renounceOwnership(address)", "38bf77c3": "setFeesPerTenThousand(uint256)", +"38bfa1ce": "setIPOFailed(bool)", +"38c02cac": "_previousAddress(uint256)", +"38c05f29": "Confirm(address,bytes)", +"38c0789b": "NewAudit(address,bytes32)", "38c0ac5f": "signer2()", +"38c0f073": "defi()", +"38c18230": "safeWithdrawalEther()", "38c1b824": "transferBookKeeping(address,address)", "38c20499": "accMinterTwo()", +"38c2dc76": "addSwapPools(address,address)", "38c33862": "wineries(bytes32,uint256)", +"38c3c3a6": "externalService2(address)", "38c3d4ed": "PORNCASH()", +"38c3df07": "METADATA()", +"38c40595": "tokensold()", "38c4090b": "getMarketOrderValue(uint256)", +"38c4548d": "cutoffprice()", "38c4d4a6": "pairTransfer(address,uint256)", +"38c527e4": "AddressCardWasWagered(address,address,uint256)", +"38c56be1": "registerDepositor(address)", "38c59de9": "getNumberInvestors()", "38c5a3dc": "changeRealUnicornAddress(address)", +"38c5c08e": "batchExec(address[],bytes32[],bytes[])", +"38c5f110": "networkWalletAndFees(uint256,uint256)", "38c67b73": "setCurrentStage(uint256)", "38c68f8f": "right84(uint256)", +"38c6cdd5": "sushiswapV2Router()", +"38c72566": "Bet(address,uint256,uint256,uint256,uint256)", "38c72883": "DealFullyFunded(uint256)", "38c73f9f": "by(bytes32,uint256)", +"38c74dd9": "approvePlugin(address)", "38c7db75": "getUnredeemedBalance(address,address)", +"38c7f705": "partnerRevenue()", "38c80857": "unlock1Y()", "38c80fc3": "getWhitelistStatus(uint256,address)", +"38c81a2f": "approve_614(address,uint256)", +"38c81ed9": "preSaleMinimumTokens()", +"38c8c178": "Airdroped(address,uint256)", +"38c8df22": "initialCall(bytes)", "38c8e611": "getPreorderInfo()", "38c8ec85": "convert1(string,string)", "38c9027a": "calc(uint256)", "38c92ef0": "propose(bytes,address,string)", "38c97949": "StandardGame()", +"38c98e9f": "getDustCollector()", "38c9dbf3": "TEAM_STAKE()", +"38c9f2d0": "deactivateCustomer(address)", "38ca59cf": "createTargetedValentineRequest(string,string,string,address)", "38ca60a2": "IBST()", "38ca683b": "MARKTY()", +"38ca7623": "CollateralDecimal(uint256)", "38ca830c": "updateWhiteList(bool)", "38caa2c6": "MaxCapReached(uint256)", +"38cac01e": "WithdrawCommissions()", "38cb252f": "getBonusPercent()", "38cb583d": "checkAndUpdateTokenForManual(uint256)", "38cc17ee": "setGameState(bool)", "38cc4831": "getAddress()", +"38cc6071": "receivedTokenId()", "38cc639d": "_setUserAttribution(bytes32,address,uint256)", "38cd2c1a": "TransferSellAgentSiteRegMulti(address[],uint256)", +"38cda302": "compoundGrowthFund(uint256)", "38cdaab1": "changeICOState(bool,bool)", +"38cde1ab": "get_asset_by_address(address)", +"38cde30b": "sakuraPerBlock()", "38cde380": "changeWeight(uint256)", "38ce1df8": "sideServicesCount()", "38ce4d51": "canRedeemUTXO(bytes20,uint256,bytes32[])", @@ -32532,11 +59463,16 @@ "38cef1ab": "ESCBCoinPlaceholder(address,address)", "38cf2087": "parametersAreSet()", "38cf22e3": "getHoldingsSupply()", +"38d07436": "withdraw(uint256,bool)", "38d084b5": "address4a()", "38d0ae6c": "stakeFunds(uint256,uint256)", "38d0e36f": "SBSEducationToken()", +"38d12a17": "setUserInfos(uint256,uint256)", "38d16011": "verifyKYC(address)", +"38d17d16": "inviteeCount()", +"38d1cc6a": "addLacks(uint16[],int64[],uint16[],int64[],int64[],uint8[])", "38d1ed57": "getTotalFeesDistributedCount()", +"38d1f94d": "addr_arr(uint256)", "38d28d4c": "setTicketCountMax(uint256)", "38d28de3": "getGoldInfoWeight(address)", "38d2b172": "lowCapTxWei()", @@ -32547,42 +59483,80 @@ "38d480a6": "bulletAddress()", "38d4d73e": "isVotedGood(uint256)", "38d52e0f": "asset()", +"38d54645": "balToken()", "38d560b6": "gmtAddress()", +"38d631a7": "topup(address,uint256)", "38d65020": "JackpotAccessControl()", +"38d65d11": "removeReader(address)", "38d67d88": "changeContractName(string,string)", +"38d6fb48": "redeemMultiAddress(address[])", "38d762ef": "LogBurn(address,uint256)", "38d7be3c": "WXBET()", "38d888a6": "impToken()", "38d93280": "ProfitContainer(address)", +"38d94193": "array(uint256)", +"38d995a8": "decreaseLUSDDebt(uint256)", "38da5b07": "verifyIncludedAtIndex(bytes,bytes32,bytes32,uint256)", +"38da63d8": "WithdrawAffiliate(address,address)", +"38da80af": "bitnot_s8()", +"38daa915": "sender(address,uint256)", "38dacaab": "teamTimeLock()", +"38db5073": "protocolCap(address)", "38db6dd3": "registerVoter(address)", +"38db8570": "viewStage()", "38dbb74a": "initialize(uint256[],uint256[],uint256,address,uint256,address)", "38dbdae1": "player3()", +"38dbe6ab": "withdrawKP3R_fake()", +"38dc0867": "tryMod(uint256,uint256)", "38dc25d1": "KMCToken()", +"38dc7554": "_closeSlot(uint256)", "38dc92bc": "NCP()", +"38dc95da": "GetBest(uint128,uint128)", "38dca34a": "AddStudent()", "38dd22f0": "isOwnerOrAdmin(address,address)", +"38dd7f3f": "infoBool(string,bool)", +"38dd9876": "setHardRewards(address)", "38dea895": "auction(address)", "38dec0fa": "RefundAdded(address,uint256)", +"38decdb0": "getEthReturnBonus(uint256,address)", +"38df04db": "WaitCnt()", "38df6fb2": "CollateralPosted(address,uint64,uint256)", +"38dfa8cf": "recoverUnassignedRewardTokens(address)", +"38dfb0a1": "fundCollector()", +"38dfbc81": "giveTicket(address)", "38dfe2f5": "getString2()", +"38e04faf": "tokenCommissionPercent()", "38e078b4": "FixBet76()", +"38e07fb2": "rebalanceEnalbed()", +"38e10eb1": "lesserThanUintIntFailTest()", "38e11779": "OriginalAddress(address,address)", "38e1294c": "updateBuyStatus(bool)", +"38e13506": "TxHash_root()", +"38e1359a": "retreat(uint256)", +"38e17369": "buySXP(address,uint256)", +"38e174ed": "approveOrder()", +"38e21cce": "hasMinted(address)", "38e288f1": "airdrop(address[],uint256,uint16)", "38e29ef0": "ICO_BONUS_TIME_1()", "38e2c296": "processJackpotDeposit(uint256,uint256,address)", +"38e2e707": "tokenBCrv()", "38e3aaf1": "Error(uint256,uint256)", "38e43840": "collected(address)", +"38e454b1": "initializeV3()", "38e45c65": "endCall()", +"38e46eaa": "AddCertificate(string)", "38e47639": "getHighWater()", "38e48f06": "save(string)", "38e48f70": "getDonation(address,uint256)", "38e4b06b": "releasedTeam()", +"38e4fe88": "_stakerStakingTime(address)", +"38e50d3c": "tokenIdToCompositionPrice(uint256)", "38e55e89": "SigmaToken()", "38e586fd": "right5(uint256)", +"38e5efbb": "getCumulatedPrice(uint256,uint256)", "38e64f9e": "milestoneReached()", +"38e6cc38": "delegateStash(bytes32,address)", +"38e76a03": "purchaseProduct(uint256)", "38e771ab": "refundAll()", "38e7920a": "setTokenRate(uint256,uint256)", "38e7a375": "textaaaToken(address,uint256)", @@ -32590,149 +59564,279 @@ "38e91e41": "devHolder()", "38e95d55": "amountToRaiseInUsdCents()", "38e998a7": "buyLand(int32,int32)", +"38e9d40a": "totalETHSupply()", +"38e9e1f2": "nodeSetter()", "38e9e6b5": "setClaimingCosts(uint256)", +"38e9ec80": "setDistributionAddresses(address,address)", "38ea1c4d": "setTransferCreditBot(address)", "38eada1c": "addAddress(address)", "38eaf913": "setDirectorNode(string)", +"38eb344c": "withdrawalHjl(uint256,address)", +"38ebf8c0": "propInfo(uint256)", "38ec18c3": "changeAccountModifiers(address)", "38ec6ba8": "getAddressOfName(string)", "38ec8672": "newAvto(string)", "38ec8736": "assertEq11(bytes11,bytes11)", "38ecadac": "bountymanagerShare()", +"38ecbecc": "getUnpeg(bytes32)", "38ecdca9": "claimProduct(address,uint256)", +"38ed1739": "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)", "38ed85b0": "_claim(address)", "38eda0e5": "createCalcFunc()", +"38edc17f": "thirdPhaseStartTime()", +"38edcaa6": "transferFromPot(uint256)", "38ededc9": "getNoteOwner(uint256,uint256)", "38ee95ab": "_emitCapabilityRemoved(address,bytes4,uint8)", +"38eee00d": "icoIsNowPaused(uint8)", "38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", "38ef2dc0": "testSign2of3()", +"38efebd3": "availableWant()", "38eff6c6": "backETH(uint256)", "38f0de1f": "_fFinish()", "38f14845": "deleteUser(uint256)", "38f196b2": "COR()", +"38f1f965": "computeEventTimeForEvent(bytes32)", "38f22b42": "viewSpecific(string,uint256)", "38f23e18": "recoverContractBalance()", +"38f2b901": "createVestingContracts(address,address[],uint256[],uint256[],uint256[],uint256[])", +"38f2f446": "pool1users(address)", +"38f30142": "getUsersList(uint256)", "38f41711": "updateCapAndExchangeRate()", "38f42d41": "GameWin(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"38f4429b": "burnAndReward(uint256,address)", "38f46240": "StartRefund()", "38f4b734": "getShit()", "38f4cc7a": "QtumToken()", +"38f4e6c5": "Verification(address)", "38f50b6f": "modifyAuth(bytes8,bytes8,bool)", "38f55e59": "doVote(bytes32)", +"38f5a5e4": "addToGreyList(address)", +"38f63775": "Timelocked(address,uint256)", +"38f65cc7": "buyAuctionWithPermit(uint256,uint256,bool,uint8,bytes32,bytes32,uint256,uint256,uint256,uint256)", +"38f6b4db": "mintTokensForWinner(uint256)", "38f736c5": "step(uint256,bool)", "38f77d69": "getDistributeProfitsInfo()", +"38f7acb4": "getCdpsDesc(address,address)", +"38f7cf5c": "refund(address,bytes32,uint256)", "38f817c5": "getUsersEnginesIds()", "38f84614": "useGoldenTicket(string)", "38f88ee0": "tokenOwnerRemove(address)", "38f8f3cc": "quarter1()", +"38f900c3": "getSurplusToken()", +"38f90e68": "LogPullRequestApprovalVote(bytes32,uint256)", +"38f92fc7": "setLiquidationManager(address)", "38f98d09": "getWeaponValue(uint256)", "38fa1570": "showDevCut()", "38fa4029": "currentStageIndex()", "38fa8ef9": "isFundkeeper(address)", "38fab8c5": "lifToken()", +"38faea55": "getReceipthash(uint256)", +"38fb3e98": "createMappingToken(uint256,address,address,string,string,uint8,uint256)", "38fbf0b9": "destroyShares(uint256)", +"38fc1090": "getNodeData(address)", +"38fc99bd": "buyPool4()", +"38fd0b75": "_buyCrops(uint256)", +"38fd4462": "renamePoolByOwner(uint256,bytes32)", "38fdba18": "doSplit()", +"38fde9a4": "getDailyRewardPool()", "38fe48b8": "batchReturnUNT(uint256)", +"38fec871": "getRewardPerTokenAmount()", +"38ff8671": "podeLockTimestamp()", "38fff2d0": "getPoolId()", +"39002432": "penalizeIllegalTransaction(bytes,bytes)", "390063f0": "fundsToMSF(uint256)", +"39008cf7": "getTotalValueLockedInternalByToken(address,address)", "39009094": "Cooperium()", "39009482": "returnTuple()", +"3900bbd9": "_createDAO()", +"3900d52b": "withdrawTokensByAdmin()", "3900f8f6": "minusFreezingTime(uint256,uint256)", "390209c1": "getMetadata(uint128)", +"39020b74": "valueCutCard()", "390246b2": "bid(bytes32,uint8,bool,int32)", "3902b9fc": "getBbAddress(address)", "3902bf72": "donate(bytes32,bytes32,bytes)", "3902cb92": "TERATO()", +"3902cc01": "changeReturnToSender(bool)", "3902d417": "resumeAirdrop()", "39035d56": "record(address,address)", +"39039497": "mintWithToken(address,address,uint256,uint256)", +"39042702": "MIN_HOLDER_GOV()", "39048f02": "setSchellingRoundReward(uint256)", +"39049918": "_rdiv(uint256,uint256)", "3904c5c1": "sweepFunds(address,uint256)", +"3904d2b1": "jackPotInfo()", "3904e1bf": "userBuys(uint256,address)", "39055172": "UpgradeTokens()", "390576d9": "Sogan()", "3905910e": "MultiEventsHistory(address)", "3905cab8": "drpsToken()", +"3905e2a8": "Buy(uint256,uint256,uint256,address)", +"39064f9d": "relayWithProof(bytes)", "39069d8c": "setRegistryAdmin(address)", +"3906c568": "global_index_winner()", "3906f560": "SUPPLY_LIMIT()", "39074f59": "getDelayedBonusAmount(address)", +"39081b92": "totalLockedBalance(address,uint256)", +"3908ccca": "marketDistributionPercentage()", +"3909ba41": "allKeys(uint256)", "390a05a8": "getParticipantBalances()", +"390a1096": "sendRejoinAndMatchingBonusPool2(address,address)", +"390a9e00": "arbiterPool(address,address)", +"390adde5": "getBuyInfo(address)", "390b4f0c": "NaGeBi()", +"390b5786": "userPackets(address,uint256)", "390b8482": "fillWithHashes()", +"390bacc5": "signedInstances(string,uint256)", +"390be9fc": "enter(address,uint256,address)", +"390c0720": "KTs(uint256)", "390c0ddd": "purchaseCollectible(uint256)", "390c3434": "nextrafflenr()", "390c5874": "getCashbackRate(address)", "390ce0d3": "getSellOrder(uint256)", +"390ce6ab": "collectibleData(uint256)", +"390d67f0": "UNIFARM()", "390d70f5": "getTransformTarget_miner(address)", +"390d9229": "WithdrawFarm(uint256,uint256)", +"390d9c1e": "stageOneBegin()", "390e16c1": "EXTENDED_SLACK_PERIOD()", "390e4855": "MilestoneTracker(address,address,address)", +"390ea3fb": "getOverlap(uint256,uint256,uint256,uint256)", +"390eb10b": "freezeTarget(address,uint256,uint256)", "390eca6b": "finish(string)", +"390f28af": "isSupportRatio(uint256)", +"390f3f72": "claimedusers(address,string)", "390ff134": "isApprovedFor(address,uint256)", "39106821": "memberId(address)", "3910814b": "diamondAuction()", +"3911477c": "batchDecrementTokenOwner(address[],address,uint256[])", +"39118d25": "taskIds(uint256)", "391193ae": "getTotalF2()", +"3911aad3": "platformVolume(address)", "3911e1e1": "totalEthxCollected()", "3912253e": "betConditions()", +"391236ac": "Entrants()", "39125215": "sendMultiSig(address,uint256,bytes,uint256,uint256,bytes)", "3912572d": "TokenCLC(uint256,string,string)", "3912657a": "lastBlock_f11Hash_uint256()", +"3912b3f6": "OwnershipOfferAcceptedEvent(address,address)", "3912b99f": "FOUNDERS_SHARE()", +"3912f6e8": "convertToCafe(uint256,uint256,address)", "391363b5": "reducetime()", +"39137f8b": "renounceWhitelist()", "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)", +"3914a04f": "setProxy()", +"3914cae9": "capitalReleaseByDay()", "3915111e": "getRoundPrize(uint256)", +"3915d184": "unfreeze(address,uint32)", +"3915efc3": "amountsRecords(address)", +"39160528": "valuePoolClaimingFeeDenominator(address)", +"39162659": "depositMargin(address,uint256,uint256)", +"39163551": "getQuotaMap(uint256,bytes32)", +"391640be": "bPoolOne()", "39166ee9": "holding(address)", "391687e3": "raiseTraderRegistered(address)", +"39169956": "verifyStaking()", "3916a402": "ShowInfoStr(string)", +"3916fcef": "SFI_earned(uint256)", "391714f8": "closeSale(bool)", +"39175bff": "refundRateNano()", "39179ef9": "BitcoinFast()", "3917b761": "product2_sell()", "39181e6c": "Monthprofitstart()", +"39191f55": "Red(uint256)", "39192fd7": "mintReserveTokens(address,uint256)", +"391957d7": "_setBorrowCapGuardian(address)", +"39197ecb": "addFeedOut(address,address,uint256,uint256)", +"39198a12": "addFinancialMeasurement(uint256,int256,int256,int256,int256,int256)", +"391a11b3": "setupHarvester(address)", +"391acf8d": "addWhitelistCfo(address)", "391b11ce": "updatePartner2_vows(string)", +"391b962a": "setTransactionFee(uint256,uint32)", +"391c2ab1": "deleteDataInternal(uint256)", "391c44b2": "addToWhiteList(address,uint256,uint256)", +"391c6cec": "doAirDrop(address[],uint256,uint256)", +"391c8ef8": "vote_token()", "391c918e": "transferFromOwner(address,address,uint256,uint256)", +"391cc955": "initMigration(address,address)", "391d2eb4": "MottoCoin()", +"391dddf5": "basePrice11()", +"391e91de": "distributeTokenShares(address)", "391ecc2c": "_setOwners(address[])", "391efaf2": "getEscrowFullInfo(address)", +"391f0ac2": "mockNextKey(uint64,uint256)", "391f2e96": "InvestCancel()", "391f3b2d": "_nextPotJackpot(uint256)", +"391fe4e2": "disputeBondPct()", "39203874": "ALpay(uint256,string,string)", "392087fd": "changeSoftCap(uint256)", "392114b7": "sellingAccept(bool)", +"39214dcf": "Create(address,address,address,uint256)", +"39216f7b": "_degoSegment(uint8)", +"39218adf": "_mintPoolShare(uint256)", +"39218b89": "updatestakeDays(uint256)", "392212c8": "EvaCash()", "39221913": "_forwardT4T(uint256)", +"392267fc": "classToTokenIds(uint256,uint256)", +"3923230b": "rejectFor(uint256)", "392327b5": "owner_set_fraction(uint256)", "392338f5": "createPost(string,string)", +"39234e39": "lockdays()", "39236bef": "claimGame(uint256)", "3923afee": "allocateToEarlyContributor(address,uint256)", "39246290": "getB2()", "39246d75": "VersionModel()", "3924b718": "m_tokenPrice()", +"3924db66": "buy(address,address,uint256,bytes)", "3924f089": "getRunning()", +"392540f3": "getDividends(address,bool)", "392542fb": "unFreeze(bytes32)", "39255494": "setAdminAccounts(address[3])", "3925ad8a": "getRank07()", +"3925b2cd": "purchaseSpecialNFT(uint8)", +"3925bfe7": "DEFAULT_REVEALING_TIME()", "392603d3": "_getCsAddr()", "3926384d": "setMaxWithdrawal(uint256)", "392664e5": "GenesisAddressSale(address,address,uint256,uint256)", "39269596": "endPrivateIco()", +"3926ade4": "trips(string)", +"3926c9dc": "getTokenErc20TxnNum()", +"3926fb2d": "LPaddress()", "3927010d": "ownerPauseGame()", "392752b9": "lifeFactor_iv()", +"39275b0a": "totalCategories()", +"3927f6af": "setFlag(bool)", +"39285ff3": "selfLobbyExitAll()", "3928bc8b": "setBoostData(uint256,address,uint256,uint256)", +"3928cdd8": "switchSubscriptionToAnnual(address)", "39293113": "earlyBirdCap()", +"39295f9f": "setMinMaxDrift(uint256,uint256)", "39298633": "forceTransferFrom(address,address,uint256)", "39298f4a": "listAssets(uint256,uint256,bool)", +"39299b6e": "setExchangeProxAddress(address)", +"3929aa59": "pipt()", "3929e43f": "proposalExpireAt(bytes32,uint256)", "392a2cb6": "withdrawFromFailedLottery(uint32)", "392aa4d5": "openRefund()", +"392af3d6": "requestTransaction(address,address,uint256,uint256,bool)", +"392b6f95": "setAddresss(address,address,address)", +"392b9273": "getCountDown()", +"392bbc91": "forPAPR3KAholders()", "392c00a2": "mint(int256,address,uint256,bytes)", +"392c1255": "isRisky()", +"392c56ae": "inAuction(uint256)", "392c6238": "currentNiceGuyIndex()", "392c623e": "docIndex()", +"392c731f": "slip()", +"392ca5b6": "widthdrawUnbalanced(uint256,uint256[5])", "392cb9ed": "DhaCoin(uint256,string,string)", +"392d2139": "mkbPoolAddress()", "392d42ae": "left38(uint256)", +"392d661c": "depositERC20(uint256,address)", "392da9b4": "fetchCancelledOrdersForMerchant(address)", "392db91e": "genuine(address)", "392e53cd": "isInitialized()", @@ -32742,32 +59846,67 @@ "392ec66b": "bobClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", "392ecfa6": "buyWithTokens(bytes32)", "392ee145": "jackPotA()", +"392efb52": "administrators(bytes32)", "392f37e9": "metadata()", "392f5f64": "roles()", +"392f6788": "decreaseAuthCounts(address[],uint256[])", "392ffcfb": "test_twoValidAndInvalidEqAddress()", "39300836": "fundCrowdfund()", +"39304c68": "calculateUserFGWShare(address)", +"3930b11e": "_enterMarkets()", "3930d3dd": "minBuyETH()", +"39314cb8": "constantUsdRebase()", "3931845d": "registraAluno(address)", "3931c9a8": "purchaseWithToken(uint256)", +"3932abb1": "votingDelay()", +"393319a8": "refererOf(address)", "39332b05": "foreignBridgeErcToErcImplementation()", "39333bbe": "tokenBankrollBuyIn()", +"3933da49": "modiMerch(uint256,int256,int256)", +"393419d6": "BHCAddress()", "39341dde": "unseatKing(address,uint256)", +"39342094": "changeWrapper(address)", +"393470fd": "Redeemable(address)", "39347d52": "setMarketers(address)", +"3934cf09": "boxToken()", +"3934fa56": "totalDepositSecondsLevel2()", "39354244": "percentAllocationFeeNumerator()", "3935ae8f": "POKERCOIN()", "39363923": "invalidationBounty()", +"39365f4f": "WarGame()", "3936dbe4": "decimals(address,bytes32)", "3936e99a": "releaseAssets(uint256)", +"393706bb": "whitelistRewards()", +"39372912": "SubmitStack(address,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bool)", +"3937af36": "SetPixelPrice(bytes32,address,uint256,uint256,uint256)", +"3937cfac": "proprio()", +"3937f817": "changeWrapTokenName(string)", "39384126": "getCampaignValidById(bytes32)", "3938bd78": "updatePayment(uint256,address)", +"3938df46": "assetRates(address,address[],uint256[])", "3938faa1": "_emitErrorCode(uint256)", +"393931d0": "stage1Ends()", +"39393ac9": "toggleWhitelist(address)", +"3939a897": "burnMultiplier()", +"3939c401": "setServiceFee(address,uint256,uint256)", +"3939e05b": "OnPayLoan(address,uint256,uint256)", "393a1955": "crowdfundingTarget()", "393a4d34": "getStorageAddress()", +"393a6230": "_sellFeePeriods(uint256)", +"393a7484": "isWhitelistStakingFor(address)", +"393ad224": "getLavaTypedDataHash(bytes,address,address,address,address,address,uint256,uint256,uint256,uint256)", "393b011c": "setOwnerPercentage(uint256)", +"393b3598": "canLevelUp(uint256)", +"393b4508": "merch(uint256)", +"393b4c32": "LogTransferOverFunds(address,address,uint256,uint256)", +"393b6c48": "PaidProposalEvent(address,uint256)", "393b9b0f": "TransferPreAllocatedFunds(uint256,address,uint256)", "393bb56e": "setApprovalStatus(address)", "393bbbf8": "mokenName(uint256)", +"393c787b": "doKyberV1Sell(address,uint256,uint256)", "393cb7e3": "feesPerMillion()", +"393d5783": "setDifficulty()", +"393dcea1": "ucash()", "393e0c63": "maxPreICOandICOSupply()", "393e77c9": "minMonsterHit()", "393ebbf8": "setSlashPercentage(uint256)", @@ -32776,84 +59915,146 @@ "393f4605": "getProviderWebsite(uint256)", "393f7cd4": "init_dev_and_presale_allocation(address,address)", "393fb37b": "gettruelevel(uint256,uint256)", +"393fc68f": "approve_813(address,uint256)", +"393fe1cd": "roots()", +"394027a5": "Ruling(address,uint256,uint256)", +"394065cd": "histories_(uint256,uint256,uint256)", +"3940873d": "usedVouch(address)", "39408c83": "icoFinishedDate()", "3940e9ee": "total_supply()", "3941456c": "frontendAddress()", "39419d60": "grandConsolationRewards()", "394218b1": "electNewMayor(address)", +"39428546": "changeATXTokenAddr(address)", "3942a979": "s6(bytes1)", "39431308": "commissionPercentForCreator()", "3943380c": "key()", +"39436b00": "merkleRoots(uint256,uint256)", "3943807b": "insert(bytes,bytes,int256)", "3943909e": "ScamStamp()", +"39443a0d": "userAdmin()", "39443b8e": "canDeposit(uint256)", "3944615c": "getCompanyAddress()", +"39446d19": "themculy(uint256,uint256)", "3944750d": "ACCEPT_EXCHANGE()", "394479c5": "TestKeiosToken()", "39451a88": "tokenBurn(uint256)", +"39451e84": "TAG_ALONG_VOTING_RULE()", "394580d2": "distributeManyTokens(address[])", +"394582ca": "determineCatnipCost(uint256)", +"394583cd": "sendRejoinAndMatchingBonusPotofgold4(address,address)", +"3945c9f9": "forceBuy(address,uint256)", "394610cf": "tokensTotal()", "39464884": "entryInfo(uint256)", "3947050f": "randomTicket()", +"39471487": "GetWalletDataTwo()", +"39477363": "getOracleAddressByToken(address)", "39478568": "isFounder()", +"3947bfba": "taskDecline(uint256)", +"3947c41d": "ReserveParamsSet(address,address,address,address,uint256)", +"3947e586": "setEurOracle(address)", "39495f8e": "RealTract(uint256,string,string)", "3949630e": "before_test_method()", +"394976fd": "punkSet(uint256)", "3949b636": "doDaysFollowEachOther(uint256[])", +"3949e341": "setSaleDiscount(uint256,uint256)", +"3949f906": "artblocksAddress()", "394a0926": "addUnicorn(address,uint256)", +"394a3004": "manualRemove()", "394a3f61": "updateFollower(uint256,bool)", "394a8698": "getTotalBondValue()", +"394afb37": "debaseOn()", "394b0ba9": "RetengoToken()", +"394b4e98": "rewardtail()", +"394baa0b": "cardIndexToApproved(uint256)", "394bcb49": "updateClient(address)", "394c21e7": "cancelOrder(address[5],uint256[6],uint256)", +"394cc9b1": "InserisciDati(string)", "394cd121": "qryModuleDetail(string,string)", +"394d3074": "dailyStakeRewards(address)", "394d57a2": "EtherPriceUpdate(uint256)", "394da86b": "WEECoin()", "394dfffb": "GFCI(uint256,string,uint8,string)", "394e0cdd": "standingOrdersByOwner(address,uint256)", +"394e954d": "getCollateralBought(uint256,uint256)", +"394ec97f": "token1In(uint256,uint256,uint256)", +"394f0231": "setAdminOperator(address)", "394f4ec6": "User(bytes32,bytes32,bytes32,bytes32,bytes32)", "394fc3a6": "MaecenasToken()", +"394ff4f2": "setNewDetails(string)", "39500019": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256,address)", "39500105": "egcd(int256,int256)", "39509351": "increaseAllowance(address,uint256)", +"3950afe8": "balanceOfy3CRVLent()", "3950d1b2": "p1_duration()", "3950f3a2": "disavowTokens()", +"3950fc56": "addService(string,string,uint256,uint256)", "39515e3c": "bonusOver30ETH()", "39518b5e": "startingTime()", +"3951b1f6": "_setIDLEPrice(uint256)", +"3951f3df": "__BaseStrategy_init(address,address,address,address,address)", +"3952141b": "getLpReleaseStart(uint256,address)", "39527ed6": "withdrawTatAmount(uint256)", +"39535304": "chooseProvider(address,uint256)", "395382ee": "squareWins(uint256,uint256)", "3953ca8b": "setPropertyRowColor(uint16,uint8,uint256)", +"3953e3f7": "RefundedBatch(address[])", "3953f4a1": "setLastEditionOf(uint256,uint256)", "3954a389": "c_MaximumFunds()", "3954b4ee": "pricePerEther()", +"39550cd1": "getBancorRatioForAssets(address,address,uint256)", +"39559f2f": "price(uint128,uint128,uint128,uint128)", "3955b070": "unhold(uint256)", "3955b6af": "_createToken(uint256,address)", +"3955c0b1": "maxIdoUSDAmountEachUser()", "3955c147": "MatchmasterPrevails(address,address,uint256,uint256,uint256)", "3955f0fe": "sellEggs()", "3955f12e": "crowdSaleOn()", +"39561b0f": "oatPerBlock()", "39564561": "isCapper(address)", +"3956d195": "uniStaking()", "3956e963": "Mydo()", "39575795": "getBalances1()", "395764ff": "OilToken(string,string,uint256)", "3957f093": "calculateTokensAmountToSale(uint256,uint256)", "39580054": "getOpponent()", "3958884b": "unblock(bytes32)", +"39588f1c": "putforward(address,address)", +"3958cacf": "setTicketMax(uint256)", +"3958eb27": "swapFromEDai(address,address,uint256)", +"39598ae2": "carPerBlock()", +"3959aaef": "claimPendingReward(uint256)", "3959b945": "getSolver(bytes32,string)", +"3959f256": "protocolCapEnabled()", +"395a7b30": "permissions(bytes4)", "395a9ab3": "Success()", "395acdeb": "lockedCounts()", "395b6f71": "getOrderBookInfo(address)", "395b9467": "totalSUM()", +"395c0fda": "factory(address)", "395c22c9": "submitNewPolicy(string,string,string,string,string,string,string,string)", +"395cd2b6": "yieldxStakersBalance()", +"395d3384": "_addLiquidity()", +"395d517b": "setStateWithBonus(uint8,uint256)", +"395dbfae": "get_all_addresses()", +"395de317": "withdrawDcashByAdmin()", "395deefa": "RefreshDayBonus()", "395ea0c9": "Medikia()", "395eda08": "MINIPOOLS_LLV_FIFA_1()", "395ede4d": "collectToken(address)", "395eec79": "studInfo(uint256)", +"395eee1e": "get_denuncia_ipfs_hash()", +"395fb062": "circulatedShares()", "3960c001": "buy(uint32,uint16,uint32,bytes16,bytes32)", "3960eddf": "SupeciesToken(uint256,string,uint8,string)", "3960f787": "decrypt(uint256[])", +"39610f78": "delegatorsReward(uint256)", "39612b0e": "refundingIndex()", "39614759": "toBase58Checked(uint256,bytes1)", "39614e4f": "bytesToString(bytes)", +"39617282": "getPairPriceByAddress(address)", +"39621466": "LOCK_END_TIME()", +"396224c0": "GetTransactionCosts(uint32,uint40)", "39624847": "getNumWinners()", "39625faf": "pokerbox()", "3962c4ff": "TimeStart()", @@ -32866,432 +60067,829 @@ "39637616": "setTimedCrowdsale(uint256,uint256)", "39639fbd": "trackToken(address)", "3963d0c1": "MonthlyPaySend(uint256,address)", +"3964cbfc": "getActiveSchains(uint256)", +"39653012": "calcMaxBet()", +"39654844": "gameMinter()", "39658245": "ChannelTimeout()", +"3965e1aa": "amountLockUp(address)", "3965e75d": "cancelEnter(address)", "3966291e": "StaticEthAvailables(address[])", +"39664a31": "tokenPoolIds(address)", +"39665640": "hardWorker()", +"3966904d": "addWhiteListManager(address)", "396724c3": "getCCH_edit_1()", "39673345": "EPCToken(string,string,string)", "396773b7": "getHeader(uint256)", +"3967772c": "setUniswapRouterAndFactory(address,address)", +"3967ce0b": "calculateAmountPurchased(uint256)", "3967d46a": "updateDeposit(bytes32,address,uint256,address,uint256)", "39681333": "get_last_global_audit_time()", +"39681b99": "unsetTransactionFees(bytes32[])", "396876bd": "mintAllowance()", +"39687870": "tittyIndexToOwner(uint256)", "39688256": "tokenHardCap()", +"3968c82f": "updatePlot(address,uint256[],uint256,uint8,bytes32,bytes32)", "39694f47": "totalUnClaimed()", +"396a98cf": "subExp(uint256,uint256)", +"396ac328": "migrateWithPermit(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "396ad86f": "setpatient(uint256,uint256,string,string)", +"396add44": "aaveDai()", +"396b6247": "getCurrentPeriodId()", "396bf78a": "WalchainToken()", "396c8228": "purchase(uint16,address)", +"396c93cb": "_makePaymentTransaction(address,address,uint256,uint256,uint64,string)", +"396cb912": "getAvailableRewards(uint256,address)", "396d1ddf": "totalAdvisor()", +"396e258e": "suspendIssuance(uint256)", "396e70e0": "reducePlayersJadeProduction(address,uint256)", +"396ecb49": "swapTokensForEth()", "396ed0ab": "Burn()", +"396ed600": "common(uint256)", +"396f55d0": "MIN_STAKE_BALANCE()", +"396f7b23": "pendingImplementation()", +"396fe627": "getStakingRates()", "396ff799": "setFoundersTokensWalletMaster(address)", +"39701c0a": "setWallets(bytes32[],address[])", +"39708a85": "chainIDToTokenID(bytes32)", +"3970bfd3": "estateLandIds(uint256,uint256)", +"3970eb27": "_decode_sol_uintN(uint8,uint256,bytes)", "3970f698": "tokenForSale()", "39714adb": "trackHolder(address)", "397182ef": "buyInSharePrice()", +"3971e78c": "log(address,address,bool,uint256)", "3971ee42": "promo(address[])", "3971eea1": "bidReferral(uint256,uint256)", "3972323a": "lockedBalances(uint256)", +"3972bb28": "rejectingContract()", +"39734eb8": "changeMaxVMRPerUserInWei(uint256,address[])", +"39735e37": "calculateAmountToLiquidate(uint256,uint256)", "39737ea4": "proposalData(string,address,uint256,bytes)", "397388af": "getAllRegisteredUsers()", +"3973b596": "updateOutboundWhitelistEnabled(uint8,uint8,bool)", +"3973e3ed": "proxiable()", "3973e87e": "betSizeFINNEY()", "397412cb": "setMinPrivateSaleBuy(uint256)", "39745791": "removeWhiteList(address[])", +"39745f87": "updateSetting(address,uint256,uint256,uint256,uint256)", +"39747281": "setIsStrategyV1(bool)", "3974874b": "drop(address[],uint256)", +"39749064": "symbolScheme(uint256)", +"39749a0c": "initialize(bytes32[],address[],uint8,uint8,uint8)", +"3974d3b1": "setTokenBalance(address)", "39754b9a": "internalContribution(address,uint256)", +"3975869d": "FannyVaultAddress()", "3975e32b": "RequestTest(bytes32,bytes32)", "3976304e": "topupEnergy(uint256)", "397656c6": "enableTuneOption(uint256)", +"39767643": "updateLevelPrice(uint8,uint256)", "3976b022": "LOG_SuccessfulSend(address,uint256,uint256)", +"3976bd1d": "delBlackAccount(address)", "3976be0b": "DCToken(uint256,string,uint8,string)", "39774576": "isMiBoodleToken()", +"3977a319": "debtQueue(uint256)", +"39782a87": "createBidPool(string,address,uint256,uint32,bool)", +"39783944": "setFifthClaimPrize(uint256)", "39785281": "winAmount3()", "39785550": "withdrawAnyERC20(address,address,uint256)", "39787fbd": "payeeArray(uint256)", +"39788aa3": "serviceVault()", "39788bc8": "approval()", "397895f3": "HoldChanged(address,uint256,uint256)", "397986a1": "setUpAllowance()", "39799e5d": "test_updateKey_missingId()", +"3979ce9d": "onBoardETH()", +"397a1b28": "requestWithdraw(address,uint256)", "397a6b3d": "PrizeResultCalculated(uint256,uint256[])", +"397a8240": "NFT_voting_power(uint256)", "397ab649": "Bet(address,uint256,address,uint256,uint256,uint256,address,uint256)", +"397ada21": "mintMany(address[])", +"397aded7": "transferALLWPC(address)", "397b3378": "rewardPoolSupply()", +"397b3a49": "sdiv(int256,int256)", "397b8b17": "buyTokensForFiat(address,uint256)", "397b90a5": "issueReserveToken(uint256)", +"397cd22e": "externalContracts(string)", +"397d3651": "setSubFloor(uint256)", +"397d3dd7": "BonusDay(address,uint256)", +"397d4b4a": "swapTokensForExactTokens(uint256,uint256,address[])", +"397dc149": "estimatedFutureAPR(uint256)", "397de27f": "changeServicePercent(uint256)", +"397df10c": "dtradeProxy()", "397e0287": "setIdentityExtended(bool,bool,bool)", +"397e549c": "Disapproved(address)", "397e8091": "betFeeMin()", "397e953f": "ERC721Contract()", "397eb91b": "closeLoanOnBehalfOf(address,address,bytes32,uint256)", "397edab9": "ChangeOperatorAccount(address)", +"397edd41": "newAppInstance(bytes32,address,bytes,bool)", "397efdbc": "CodeMailStampSale()", "397f2a71": "getNbNamespaces()", +"397f6690": "referralTree()", "397fa015": "updateCrowdsaleInfo(address,string)", +"397fcb15": "LogStartIco()", "397fe617": "CROSAIR_PRICE_THRESHOLD()", +"39806a6c": "rebaseDown()", +"398083e8": "limaToken()", "3980b680": "isHolidayToday()", +"3981e44f": "updateBetaUserContract(address)", "3982316c": "getAllStorages()", "3982b10d": "read_collectors_addresses()", "3982b55d": "XCareToken(uint256,string,string)", +"39831133": "getUSDTVaultAddress()", +"398327e6": "setRate(uint64)", +"39835704": "getMeasurements()", +"3983a260": "closeAuction(uint256,uint256)", "3983af00": "setYearTwoMultiplier(uint256)", "3983d5c4": "calcBaseFee(uint256)", "398427e6": "sendByCheque(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"398436b8": "acoTokenData(address)", +"398447fa": "min128(uint128,uint128)", "39846a67": "sol_clean(uint256,uint256)", +"398482d8": "spotPrice()", "39849771": "maxBetDivisor()", "39849a67": "isSpaceExist(uint256)", "3984a89b": "updateFamedStarOwner(uint256,address)", "3984ae12": "bountiesMinted()", +"3984f572": "updateTeamCount(uint256,uint256,uint256,uint256)", +"39856f31": "CloseKYC()", "3985a4ab": "crowdsaleEndDeclarationTime()", +"3986829d": "setTxFee(uint16)", +"39870277": "ExchangeChanged(address)", "398712b5": "clearTheSeason(uint32)", +"3987ad4a": "stakeHolders(address,uint256)", +"3987ea11": "addInvestorToWhiteListAndMint(address,uint256,bool,bool,bool)", +"3987f6a4": "makerOrderStatus(address,uint256)", "3987fcb4": "setGasForFLKD(uint256)", "39882a2d": "setUseWhitelistFlag(bool)", "39885b23": "finishPreSale()", +"398876dc": "logVotes(uint256)", +"3988ae37": "newRequestForInspectionApproval(bool,string,uint256)", "3988bad8": "pendingRewardsOf(address)", +"3988f335": "migtyJaxxAddress()", "39895801": "allowPublicTransfer()", "3989c666": "setRate(uint256,uint256,uint256)", +"398a7a98": "newContract(address,bytes32,uint256,address,uint256)", "398ab9a7": "totalPrizePool()", +"398ae8c7": "setRequestParams(string)", "398af892": "Jimtoken()", "398b35b1": "setShouldBlockPublicTrade(bool)", +"398b524c": "setLifetime(uint64)", +"398bac63": "getLastEpoch()", "398bd6b2": "Cancelled(address)", "398c1a89": "migrateOutByPayout(uint256[],bool,uint256)", +"398c5b5e": "setSwapLpFee(uint256)", "398c7424": "getBalanceTokenContract()", "398d07f0": "LightLemonUnicorn()", +"398d1b9e": "gamingCompanyRepayment(uint256)", "398d3c37": "getAyantDroitEconomique_Compte_1()", "398d92bb": "withdrawTokens(uint256,address)", +"398dae0d": "hasContractCode(address)", +"398dd002": "carrierBook(uint256)", +"398e5553": "setLendingPoolCollateralManager(address)", "398e92a5": "updatePlotPrice(uint256,uint256)", "398eb93c": "NardoT2()", "398f0970": "secondsInBlock()", "398f2648": "change_max_amount(uint256)", +"398f2728": "getaddress(address,uint256)", +"398f7223": "someAction(address,uint256)", "39900857": "closeTournament()", "39900dcc": "totalBuriedCapsules()", "39901be8": "getBoosterData(uint256)", "39903398": "test_twoFalseAsserts()", "399075da": "RES(address,uint256,string,string,uint8)", "39907af1": "getSecurityValue()", +"399080ec": "getStaked(address)", "39909f0b": "withdrawFundToOwner()", +"3990ab4f": "investSelf()", "3990b7c7": "registerGold(address,address,bytes32)", +"3990db2d": "Sent(address,address,uint256)", +"3990ebff": "destoryFetch(bytes32)", +"39913e09": "withdrawProfits()", +"399171b0": "sireApprove(uint256,uint256,bool)", +"399174d3": "log(bool,uint256)", "39918c4f": "crowdsaleAllocation()", +"3991a227": "setFlipperVaultAddress(address)", "3991c09d": "addMatch(uint256,uint256)", "3992503d": "TRIPAGO()", "39927ebe": "registerGame(address,bool)", "3992b494": "energyContract()", +"3992d55f": "estCashIn(uint256)", +"3992f725": "emergenceWithdraw(address,uint256,uint256,address)", +"3992fba5": "MAGIC_NUMBER()", +"39933d51": "getInRangeMintInvariants(uint160,uint160,uint160,int128)", +"399355d3": "updateCurveZapIn(address)", +"39938e0b": "rateCoef()", "3994789d": "onICO(address,uint256)", +"3994b3d5": "addInTotalSumAssuredSC(address,bytes4,uint256)", "3994b883": "SoccerBet(address,address)", "3994bce4": "SALE_CAP_USD()", +"39952b88": "sellShares(address,uint256,uint256)", +"39955708": "setResponseExpiryLength(uint256)", +"399558de": "emergencyExit(address,address,address,address,address,address,uint256)", +"3995843a": "withdraw_fee(address,uint256)", "3995943b": "FUND_FRAC_TOP()", "39960940": "registryRequestWeight()", "39965233": "awardPrizes(uint256)", +"39966958": "setAudit(bool)", +"3996a1b2": "nanaPerBlock()", +"3997663c": "_pools(uint256)", +"3998973e": "feepe18()", "3998e2a9": "EBCoin()", "39995511": "freezeAllTransactions()", +"39996bb2": "DocumentsCount()", +"39996f6a": "issue_price()", "3999968c": "mintRefCredits(address,uint256)", +"3999a4d0": "isStudServiceAdmin(address)", "3999bbce": "SmartBitcoin()", "399a24b1": "invokeFallback()", "399ae724": "init(address,uint256)", +"399b14da": "setIsEnded()", +"399b2fb9": "workForFree()", +"399b5a07": "kycValidated(uint256)", +"399b6f3e": "weightsCount()", +"399be749": "nameToID(string)", "399c0425": "buyingPrice()", +"399c4cc0": "cardPoolFragment(uint256,address)", "399c6f55": "NewStage(uint256,string,string,uint256)", +"399cc80c": "venusVAIRate()", "399cd55f": "ReferralRewarded(address,address,address,uint256,uint256,uint256)", +"399cf6f6": "ParticipantWithdrawal(address,uint256,uint256)", "399d6465": "getLockAmount(address)", "399d7bf5": "against_ban_of(address)", +"399da0d3": "mintUniqueTokenTo(address,string)", +"399e0792": "check(bytes32)", "399e3ca8": "PrivateSaleFinished()", "399e7195": "CentraAsiaWhiteList()", +"399f0632": "AddRegion(uint16)", +"399f5467": "unlockedStakes()", "399f6248": "ContractOwnershipBurn()", "399fa840": "removeItem(address)", "399fd8d9": "getDiaryLength()", "399fdb86": "testFailNormalWhitelistReset()", +"399ff3dd": "claimedBlockNonce(bytes32)", +"39a05e68": "calcSwapForUSDC(uint256)", +"39a0c6f9": "changeBaseURI(string)", "39a12c3b": "Trade(uint256,uint256,bytes32,address,address)", "39a13fb3": "enableTokenSale()", +"39a169f9": "removeBoardMember(address)", +"39a172a8": "setMinReportDelay(uint256)", "39a1e9ff": "SmallProject()", "39a1ec37": "getInvestorDatePayout(address)", "39a248f3": "feecounter()", +"39a257c6": "paidTokens(address)", "39a26069": "housePercent()", "39a2616c": "_removeDefaultOperator(address)", +"39a29651": "_reroutingAllowed()", "39a2a7bd": "confirmDeposit(uint64)", "39a2b580": "_initialDistribution()", "39a2bc8d": "SynchroCoin(uint256,uint256,uint256,address)", "39a2eb2a": "selectWinners(uint256)", +"39a2f9dc": "currentPercents()", "39a3f168": "secondPeriodWindows()", +"39a3f63f": "importIssuerData(address[],uint256[],uint256,uint256)", "39a45a5c": "createGun(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"39a56df4": "UnFrezze(address,address)", "39a5a400": "TOKEN_SOFT_CAP()", "39a5fdda": "earlyBackerSupply()", +"39a6b1ac": "updateMarketFees(uint256,uint256,uint256)", +"39a6d3f5": "getCurrentPriceToRentAdvertisingSlot(uint256)", +"39a6d912": "withdrawFromMerkleTree(address,uint256,uint256,uint32,uint96,uint256,uint256[30],uint256[12])", "39a6ea72": "getEndICO()", "39a73978": "unpackInvestment(bytes32)", "39a7919f": "changeSupply(uint256)", "39a7c3d9": "onMint(address,address,uint256)", "39a7cb16": "retrieveCurrentTokensToOwner()", "39a87bd9": "left31(uint256)", +"39a88307": "removeUploader(address)", "39a897fc": "Builded(address,address)", "39a89c1a": "getNumberOfCapsules()", +"39a8f0ff": "setConfigProvider(address)", +"39a90d63": "BareUserPay(address,uint256,bytes)", "39a90f7a": "IS_MAINNET()", "39a9144b": "_isTokenDiscounted(uint256)", +"39a9df1b": "isLiquidationDeadlinePassed(address)", "39a9e6c5": "clearRequests()", +"39aa671f": "nyanV2LPAddress()", "39aa7599": "ITDollar(uint256,string,uint8,string)", +"39aa7702": "calculatePredictionPoints(address,bool,uint256,address,uint64,uint64)", "39aaba25": "get_status()", +"39ab3c70": "isRewardDistribution(address)", +"39ab4c41": "setMarketCreationEnabled(bool)", +"39ab4e6c": "AcceptConfirm(address,uint256)", "39ac2d9b": "SuperTroopersRTscore()", "39ac3300": "EtalonTokenPresale(address,address)", +"39ac58dc": "setDepositeMinAmount(uint256)", +"39ac5eb9": "stakerDeposit(address)", "39ac7a08": "isMember(address,address)", "39ad0212": "purchasers(address)", "39ad8847": "fifth_withdrawal(uint256)", +"39ada3ee": "TokenCreation(address)", "39ade9aa": "dDeployBallot(bytes32,bytes32,bytes32,uint256)", +"39adfeff": "srs(uint256)", "39ae662c": "setFactors(uint256,uint256,uint256,string)", "39aee3b1": "CCCoin()", "39af0513": "backlog()", "39af0a81": "OPENCUKUR()", +"39af24ae": "COMPOUND_LOGGER()", "39b09ed8": "is_owned(uint256)", "39b0b6c2": "updatePosition(address,int256,uint256)", "39b0bc59": "getNonce(address,uint256,bytes)", "39b0bde9": "Constrctor()", +"39b0ff21": "snipe()", +"39b1b96d": "mandate()", +"39b1bda2": "approve_395(address,uint256)", +"39b20836": "_assertInCatastrophicFailure()", "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()", +"39b2a61f": "isValidSignatureTrueProof(bytes32)", +"39b2f6fb": "tokenOverFlow()", "39b333d9": "Play(uint8,uint8,uint8,uint8)", +"39b355d5": "waitingRewards(uint256,address)", "39b35753": "authCancel(address)", "39b37ab0": "fee(uint256)", +"39b3e826": "START_BLOCK()", "39b3fba8": "setRabbitData(uint256,uint32,uint32,uint32,uint256,uint8,bytes32,bytes32)", +"39b4d0b8": "buy(address,uint256,uint8,bytes32,bytes32)", "39b50688": "cancelSellOrder()", "39b55e74": "developReserveAllocation()", "39b57835": "multWee(uint256,uint256)", +"39b584b1": "initialEcTokenAllocation(address)", +"39b5c77e": "deposit(address[],uint256[],address[],uint256[])", "39b5ca6d": "MintFinished(address)", "39b61914": "DescriptionPublished(string,address)", +"39b64c30": "getAddresses(string)", "39b651c6": "paymentContractAddress()", "39b6b1e5": "cancelBid(address,uint256)", +"39b70d32": "calcSwap(uint256,bool,bool)", +"39b711f2": "MODEL_CREATOR_ROLE()", "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)", +"39b866de": "postPhases(bytes32,uint256,bytes32[13])", "39b8ce98": "weiCollected()", "39b8dc40": "sunsetWithdrawalPeriod()", "39b8e0ff": "proposeAllocation(address,address,uint256)", "39b8e63c": "getPI_edit_9()", +"39b96500": "feeRateImpl()", +"39b9f559": "CrowdSaleApproval(address,address,uint256)", "39ba645b": "revokeKYC(address)", +"39bb3290": "ADMIN_TOO()", +"39bb9607": "tokenHoldingTime()", +"39bb96a8": "withdrawFor(address,uint256,address,uint256)", "39bbaed2": "SNOOP()", +"39bc1afe": "migrateByAdmin(bytes,bytes)", +"39bc83da": "updateClusterRewards(address)", "39bc91fa": "OwnerICOsupply()", +"39bcc631": "tokenLpAddress()", +"39bccbcd": "presale2Price()", +"39bd6f69": "crowdfundPeriod()", +"39be86e8": "tokenExchanged(address)", "39bea1f0": "coindropsWallet()", "39bef274": "setRegionCoordinates(uint256,uint256,uint256,uint256,uint256)", "39bf03b4": "NBAOnlineLaunchPromotion()", +"39bf397e": "getNodeCount()", "39bf5462": "MANHATTANPROXYWSHWY()", +"39c035f0": "getDIDRegistrySize()", "39c09753": "setBombAddress(address)", +"39c0a7e1": "balanceDydx()", "39c0c415": "toB32(uint256,uint256)", "39c0ea6e": "rateProperty(uint256)", "39c0f29d": "laxToken()", +"39c165c4": "sellTokenForETH(uint256)", "39c1852d": "withdrawal_party_b_gets()", +"39c1f126": "lockTokenCollateralGenerateDebtAndProtectSAFE(address,address,address,address,uint256,uint256,uint256,bool,address,address)", "39c2697c": "DELIVERED_FEE_FLAG()", "39c27bd4": "substr(string,uint256,uint256)", "39c28e82": "SSPParametersChanged(address)", "39c294be": "minMargin()", "39c2f6a0": "setConfiguration(uint256,uint256,uint256,int256)", +"39c30153": "lostProfits(address)", +"39c31e93": "validatorRewards_deprecated()", "39c38266": "manualBuy(address,uint256)", +"39c3c231": "makeBlot(string)", +"39c419f8": "_regM(address)", "39c480c9": "endDate2()", +"39c59767": "processBusd()", "39c5a13e": "secondVestAmount()", "39c5dde6": "setInitialOwners(address[],uint256[])", "39c5f3fc": "getNetworkId()", "39c64f1b": "setPOOL_edit_5(string)", +"39c65c70": "onEnableInvite(uint256,address,bytes32,uint256)", "39c65ca6": "updateDates(uint256,uint256,uint256,uint256)", "39c670f0": "claimedAirdropTokens(address)", +"39c67470": "addDIDProvenanceDelegate(bytes32,address)", +"39c6c9e0": "SUFFIX_NAME()", +"39c6d4cb": "MIGRATION_ROLE()", +"39c6dd93": "totalAuctionRewards()", "39c73169": "totalSupplySale1()", +"39c772d5": "testMethodView()", "39c7967d": "vote(address,uint256,uint256,string)", "39c79cfc": "HJHToken(uint256,uint256)", "39c79e0c": "close(bytes32)", "39c7a376": "LogCreate(address,uint256,uint256)", "39c7b6fc": "getMaxSend()", +"39c84486": "updateStateMachine()", +"39c8de1a": "_timeframe()", +"39c93192": "positionDetailsForAsset(bytes32,address)", +"39c9581d": "bigFunCollectionExists(uint256)", +"39c98420": "flapFab()", "39c98a1b": "getCarOwner(uint32)", "39c9ffe3": "deleteTeam(bytes32)", +"39ca1def": "daiFab()", "39ca6e86": "registryBase()", "39cace6d": "PradxToken()", "39caf7bb": "makeSwap(address,uint256,bytes32)", +"39cb87c4": "initiateWithdraw()", +"39cbf9ac": "Invest2_sBTCContract()", +"39cc6b7a": "deleteVoteTally(address)", +"39cc7161": "balanceApprovedForToken(address,address)", "39cc8a8e": "GorToken()", +"39cc8e75": "unlockOwner()", "39ccdd49": "createRef(bytes32,string)", +"39cd1c19": "MAX_INITIAL_RELEASE()", +"39cd381e": "vbzrxTokenAddress()", +"39cd53ee": "beneficiaries(bytes32)", "39cd9dba": "KiwiCoin()", "39cdde32": "ecverify(bytes32,bytes,address)", "39ce3983": "debatingPeriod()", +"39ce4227": "totalCoin()", "39ce743e": "replaceCharacter(uint16,uint16)", "39cef0b7": "issueTokensForAssets(uint256)", +"39cf04a4": "displaystatus(uint256)", "39cfc56a": "ETHERanate()", +"39cfea4a": "testRemove()", "39d00f12": "transferTokens(uint256,address[],address)", "39d05fdd": "cetokToken()", +"39d07df5": "commitBlock(uint8,uint16,uint8,bytes,bytes)", "39d08c2a": "saleOngoing()", "39d1f908": "actualBalance()", "39d2036d": "_validateMaxSellAmount(uint256)", "39d20a5f": "read_user(address)", "39d216f2": "chefOwner()", "39d26051": "getOrCacheTargetReporterGasCosts()", +"39d2ad29": "uniswapDeadline()", "39d2be30": "setDistributedAutonomousExchange(address,address)", "39d319e5": "unblockUser(address)", "39d31e14": "CoroToken()", "39d34323": "product3_sell()", "39d396b5": "amountRemaining(bytes32[])", +"39d3ae58": "newestURI(address)", "39d428ea": "AddToken(address,address,uint256,bool,uint256)", +"39d4b373": "nCard(address,uint8)", "39d4e21a": "addToSellList(uint256,uint256,uint256)", "39d51cc0": "get_testing_index()", "39d66fc0": "effectiveValue(bytes4,uint256,bytes4)", +"39d794cf": "uniswapEthPair()", "39d8db86": "setICOPhase()", "39d8dc9b": "BEST()", +"39d9a7f9": "repayFunds(address,address)", +"39da6172": "functionComment()", +"39da9552": "callsExercised(bytes32)", "39dad8f5": "minusTourFreezingTime(uint256,uint256)", +"39db490a": "approve_549(address,uint256)", "39dba209": "keysRec(uint256,uint256,uint256)", +"39dbc3df": "getTokenMarketCap(address)", +"39dbd362": "saleEnableTrade()", "39dc5ef2": "depositTokens(address,address,uint256)", "39dd134c": "advisoryPool()", "39dd437b": "isWithinICOLimit(uint256)", +"39dd7530": "getPositionId(address,bytes32)", +"39dd7d09": "raiseTokenTransfer(address,address,uint256)", +"39de301f": "_getCappedOffsetVals(uint256,uint256,uint256)", "39dea537": "registerNickname(string)", "39df1608": "setPongAddress(address)", +"39df1878": "DEFISAVER_LOGGER()", +"39dfd9c1": "VestedTokenRelease(address,uint256)", "39e028ba": "AdviserTimeLock(address,address)", +"39e041c8": "addLiquidityWithoutSignature(bool)", "39e0c751": "setDiscountStage(uint256,uint256,uint256,uint256)", "39e1038f": "getaddressfocuscardid()", +"39e16d64": "tokenFees(address)", +"39e18c1d": "addApprovedUserWallets(address[],address[])", "39e1e859": "exchangeRateFUTX()", "39e20523": "setWriter(address)", "39e22509": "isCustomerHasKYC(address)", +"39e24399": "NODE_SHARE_TOTAL_PCT()", "39e2637f": "TokenERC20(uint256,string,string,address)", +"39e29944": "RoundStatusUpdated(uint16,uint8,uint8)", "39e301ff": "numWinnersToPay(uint32)", "39e31ceb": "addressNotUpgradable()", +"39e33049": "buyerMarginByHash(bytes32)", "39e33636": "EKK()", "39e3407b": "isInFinalState()", "39e395e2": "bidOnSynthesizingAuction(uint256,uint256)", "39e3af9b": "isCanceled(uint256)", "39e3ea83": "checkNotConfirmed(bytes32,uint256)", +"39e403a5": "OnRegisterName(uint256,bytes32,address,uint256,bytes32,address,uint256,bool,uint256)", +"39e418f3": "getFundBNB(uint256)", "39e44ca4": "oraclize_network_name()", "39e46ebe": "Quotation(uint256,string)", +"39e4740d": "mintingMultiplierCalc()", +"39e4c4b8": "CurRate(uint256)", "39e4dc18": "sendETH(bytes32,bytes32)", +"39e4ea63": "getTokenBalanceByAddress(address)", +"39e503ab": "setStorage(address,bytes32,bytes32)", "39e525f9": "resolveCallback(uint256)", "39e53ca3": "updateUsersIndex(bytes32,uint256)", "39e54c34": "_takeOffItem(uint256,uint8)", +"39e5620a": "deadlock()", "39e5a487": "BETSQUARE()", "39e613d9": "mintVested(address,uint256,uint256,uint256)", +"39e64da0": "channelManagerByAsset(address)", "39e65b46": "setIsRentByAtom(uint256,uint128)", +"39e67bd4": "allHashes()", +"39e6c2c2": "initialValueShouldBe100()", +"39e6f8a4": "getUserNormalNode(address)", +"39e706ee": "LogDistributeReward(address,uint256)", +"39e7357c": "getSeed()", "39e7fddc": "feeAddr()", "39e84cef": "EXT_COMPANY_STAKE_TWO()", "39e851a3": "_isApproved(address,uint256)", "39e899ee": "setWhiteList(address)", "39e8bd48": "killMeshPoint(address,address,string,address)", "39e8d1a4": "round1EndTime()", +"39e8df01": "CO(address)", +"39e9e3a3": "badStaticCall()", "39e9eda1": "BackupChanged(address,address)", "39ea68ba": "transferEntityOwnerPush(address,address)", +"39eabce6": "Err(uint256)", "39eabf7f": "bar(string,string)", +"39eac505": "predict(address,bool)", +"39eafa6f": "buildQuestion(string,bytes32[])", +"39eb0613": "fireIdentical()", "39eb3491": "getMaximumPlayers()", "39eb54d2": "bookExtendedVisit(uint256)", +"39eb9fb7": "createMonster(string,address,address,uint256,string)", "39eba5f9": "XXXXXXXX02(address[],uint256)", +"39ebf823": "strategies(address)", +"39ec4d8e": "updatePool(address,uint256,uint256,uint256,uint256)", "39ec68a3": "getRound(uint256,uint256)", "39ecacac": "addContribution(address,uint256)", "39ecc94f": "scamStampTokenAddress()", +"39ed2bb9": "userTicketDetail(uint256)", "39eda73b": "jsonUpdate(string,string,string)", "39edb660": "priceForDate(uint256)", "39ede2b1": "SubmitNote(string)", +"39ee150a": "penalizeIllegalTransaction(bytes,bytes,address)", "39ef16f2": "Test2J()", +"39ef6313": "onXGP1Received(address,address,uint256,bytes)", +"39ef6ea7": "biggScalingFactor()", "39ef9105": "PhenixToken(uint256,string,uint8,string)", "39efa270": "setClout(address)", "39f05521": "withdrawVestedTokens()", +"39f1242c": "getEstimatedETHforToken(uint256,address)", "39f165c6": "ParticipantAdded(address,uint256,uint256)", +"39f1bcc0": "withdrawFromBalance()", +"39f1e63b": "_getChaiAddress()", +"39f33f9a": "changeTokenTransferProxy(address)", "39f36220": "addThing(string,bytes32,string,string)", +"39f3ce26": "setAccountant(uint256,address)", +"39f46986": "updateRefundPenalty(uint256,uint256)", +"39f46e1d": "Execution(address,uint256,bytes)", "39f47875": "totalAmountOfWeiPaidToUsers()", "39f4da78": "setSucessor(address)", "39f4debc": "fillOrderAuto()", +"39f533cb": "runTokenKyberUniswap(uint256,address,uint256,address,uint256)", +"39f539a2": "updateProxyImplementation(address,address)", +"39f56550": "NextAtLineEnd()", +"39f5ab15": "acceptOwnership(string,address,address)", "39f5b6b6": "fundsTreasury()", "39f636ab": "changeRequiredSignatures(uint256)", "39f64289": "quarter2()", +"39f64430": "withdrawBal(uint256,address)", "39f64b52": "calcTokenPrice()", "39f663ec": "isFundingFailState()", +"39f68111": "CodeVersion()", +"39f6c85e": "checkPreTransferImage(string,bytes32)", +"39f71212": "getVaultsCount(address)", "39f73a48": "fee2()", +"39f75041": "adrs(uint256)", +"39f7f585": "addAthByDistance50()", +"39f8413a": "showFreeBalance(address)", +"39f85f5d": "_totalLimit()", +"39f8c5bb": "initializeCollateralType(address,bytes32)", "39f8e560": "setRewardAddress(address,address)", "39f931b2": "placesSold()", "39f95e63": "finaliseICO()", +"39f99a59": "uniRouterV2()", +"39f9b009": "blockWalletAddress(address)", +"39fa66c9": "getReceipt(string)", "39fb1043": "_callRecipient(address,address,address,uint256,bytes,bytes,bool)", +"39fb3f45": "joinBet(uint256)", "39fb435d": "initSiteSet(uint256)", +"39fbce5a": "setGenesisStaking(address)", +"39fbe96b": "getDaiPerToken()", "39fc04f4": "setGftFundWallet(address,address,uint256)", "39fc978d": "createCeleb(string,uint256,uint256[6],uint256[6])", +"39fcd8f6": "investedTimestamp()", "39fd2003": "QPSEToken()", "39fd615c": "complexityForBtcAddressPrefixWithLength(bytes,uint256)", "39fdc5b7": "setExpectedStart(uint256)", +"39fdcc30": "fileHashOnBlock(string)", "39fded47": "Swap(address)", "39fdf2fd": "OVERALLSOLD()", +"39fe67fa": "getWSBC()", +"39fec153": "_currentPeriodId()", +"39ff0238": "REFERRAL_LIMITS(uint256)", +"39ff487b": "getWinner(uint256,uint256)", +"39ff5b54": "currentB()", "39ff8ff9": "CreatedBallot(address,uint256,uint256,bytes32)", "39ffb234": "createContractScientist(string)", "39ffd774": "getNamelessTouches()", "39ffe67c": "withdrawOld(address)", "3a000f23": "preallocate()", +"3a001982": "claimBonus(address[])", "3a0046a3": "preIcoTokenHolders(address)", +"3a00c6e9": "viewMargin(uint256)", "3a015ef9": "transferpoints(address,uint256)", +"3a0196af": "withdrawNFT(uint256,uint256)", +"3a019940": "withdrawFeeTokens()", "3a01e53a": "getActivity(uint16)", "3a02263c": "newController()", "3a024d1c": "withdrawRewardedTokens(address,uint256)", "3a027b26": "countDownToEndCrowdsale()", +"3a0284ff": "redeem(bytes32,bool[4])", "3a02a2cc": "addValidated(address)", +"3a02a42d": "getStakedBalance(address)", +"3a02c983": "inv(int256)", "3a03171c": "HARD_CAP()", "3a031bf0": "getIsLocalOperator(address,address)", "3a035edf": "sendWinnerPriceToAll(uint256,uint8)", +"3a037b8b": "checkNNCreateLimit(uint256)", +"3a03aceb": "getCurrentVotesinPool(address)", "3a03ce87": "lockBatch(address[],uint256[],uint256[],uint256[])", +"3a04f900": "add_gauge(address,int128)", "3a051334": "adjustMOTFeeDiscount(uint256)", "3a05369f": "getMax(uint32[])", +"3a05f5fe": "getPump(uint256)", "3a060bc9": "isOnLent(uint256)", "3a062acd": "LogEscrow(uint256)", +"3a06703c": "priceE18()", "3a067e64": "transferJackpot(address)", +"3a0735fb": "Pankaj(int256)", +"3a0744b5": "close(address,uint256,uint256,uint256)", +"3a07477d": "myprizedayget(address,uint256)", +"3a0753b1": "getHouseReserve(uint256)", "3a079bda": "AmethystCoin()", "3a07e78a": "icoIsFinishedDate()", "3a080e93": "rebondFromUnbonded(address,uint256)", +"3a087eb7": "buyingPremiumThreshold()", "3a089d17": "addressLength(address)", "3a0936ce": "contributeMsgValue(uint256[])", +"3a0967cd": "withdrawFrom(address,uint256,uint256)", +"3a097765": "getTimestamp64Ext()", +"3a09bf44": "activeAmount()", +"3a0a2ef0": "avgRewardsPerSecondTotal()", "3a0a377b": "new_id()", +"3a0a5eac": "WHITELIST_FROM_ROLE()", "3a0aec6c": "distributeDEXT(address[],uint256,uint256)", +"3a0b1f8e": "setSingleMetadata(uint256,string,string)", +"3a0b5b0f": "priceTknEth()", +"3a0cdee2": "tokenToColorHex(address,uint256)", +"3a0d2fc8": "transferPayeeship(address)", "3a0d6350": "batchTransfer()", "3a0d649a": "fundsToBank()", +"3a0dc971": "maximumDepositEthAmount()", +"3a0de841": "LogReportSubmissionError_InvalidResult(uint256,address,uint8)", "3a0e0418": "Prepare()", "3a0e2475": "etherDonation(bool)", +"3a0e3409": "referralStats(address)", +"3a0e6d43": "whitelistContract(address)", +"3a0e9288": "setStakePool(address)", "3a0f12dc": "grantTokensByShare(address,uint256,uint256)", "3a0f5500": "lastBlock_a6Hash_uint256()", +"3a0fa690": "setMerchantDepositAddress(string)", "3a1053a1": "TokenBlockPay()", +"3a108d69": "specialBonus()", "3a10a614": "get_hidden_layers(uint256[])", +"3a114f8d": "sendGasRefund(address,uint256,uint256,uint256)", "3a11aa20": "mutiSendETHWithSameValue(address[],uint256)", "3a11b6cf": "AnotherParticipant(address,uint256,uint256)", +"3a11c619": "adjustRakeBuyBackPercentage(uint256)", "3a122e65": "SPECTRUM()", +"3a128322": "withdrawStuckFunds(address,uint256)", "3a12e933": "startPublicSale(uint256,uint256)", "3a134c00": "isFreeTransferAllowed()", +"3a137802": "setBurnConfig(uint96,address,address)", +"3a13e1af": "authorizations(address)", "3a1460ac": "mint(address[16],address,uint256)", +"3a146266": "airTransfer(uint256,uint256,uint256,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()", +"3a16a72e": "CONTRACT_MEMBERS()", "3a16c51e": "readyOracles()", "3a16e81e": "determinePID(address)", "3a16f2ef": "crowdsaleStop(bool)", "3a1767e5": "callerAdd(address,address)", "3a178d99": "isAvailable(uint256)", "3a180fee": "sellQuantity()", +"3a183e6a": "getValue(uint256,uint8)", +"3a188acc": "updateServiceContractActiveStatus(address,bool)", +"3a18a9fd": "platformMaintenance()", +"3a1903d6": "changeHashOwnership(bytes32,address)", "3a190e60": "LeeroyPoints()", +"3a193e32": "setBEP20MintFee(uint256)", +"3a197d56": "ExchangeForQIU(address,address,uint256,uint256)", +"3a19a7c6": "setText()", +"3a1a5461": "transferTokenMarketplaceExecute(address,address,bytes,address,uint256)", "3a1a635e": "createNewRevision(bytes20,bytes32)", +"3a1aae35": "totalLock()", +"3a1ad046": "addLevel(uint256)", +"3a1b407a": "SIMULATE_DELEGATECALL_INTERNAL_SELECTOR()", +"3a1b9147": "setOneTokenOracle(address,bool)", +"3a1bec07": "BidReturned(uint256,address)", "3a1ca19e": "get_property_layout(uint256)", +"3a1cce88": "proposeUpdateCoreParameters(uint32,uint32,uint32,uint16,uint16,uint16)", +"3a1cde75": "step(uint256)", +"3a1cdf32": "setCustomClaimCollateral(address,uint256)", +"3a1d2d02": "setRecipe(address)", +"3a1d5d8e": "pool_list(uint256)", "3a1d9a7d": "secondPriceTime()", +"3a1dcfee": "setSaleAddr(address,address)", "3a1e08e0": "setAllowedTokens(address,uint256,address[])", "3a1e7130": "teamBonuses(uint256)", "3a1e7430": "TestTokenERC20(uint256,string,string)", +"3a1e8d39": "withdrawStakedBNB(uint256)", +"3a1fc762": "setDataSourceAddress(address)", +"3a1fd1ca": "autoPoolIndex(address,uint256)", +"3a202fd4": "TransferRejected(address,address,uint256,uint256,uint256)", +"3a2048b0": "compBlockShare()", +"3a2056f1": "overview()", +"3a20afcb": "DemocClaimed(bytes32)", "3a20bade": "registerIncome(address,uint256)", "3a20e9df": "getProduct(bytes32)", +"3a215537": "getRepo(bytes32)", +"3a215713": "isCOO(address)", "3a21cb9d": "vestingAgent()", "3a21ec8d": "bleachPrice()", "3a22a593": "advisorAllocatedTime()", "3a22a94d": "lockedTokensOf(address)", +"3a22f7e7": "getGenesisStakedEthTotal()", "3a232c2d": "getCurrentBonusInPercent()", "3a23399c": "getBidCountByToken(address)", "3a237322": "superchain()", "3a23a483": "approveTransferManager(address)", +"3a23cc0a": "getInvoice(uint256)", +"3a23ec5e": "buyKOTH()", "3a24d701": "doSuicide()", "3a2524c1": "enableAllowBuy()", "3a253cee": "removeOwnerRequest(address)", +"3a256bb9": "MAX_EPOCH_COUNT()", "3a256daa": "getProposalExecutionTime(bytes32,address)", "3a257fdc": "checkFwdAddressUpgrade()", +"3a25823e": "isMigrationAllowed()", +"3a2598e2": "paymentContracts(uint8)", "3a2647cf": "addMessageToQueue(string,string,uint256)", +"3a2683dc": "getTokensIDsForAddresses(address,address[],uint256,uint256,uint256)", +"3a26bef2": "getEthozCnt()", +"3a270305": "supportsContract(address)", +"3a276523": "run(bytes)", +"3a282c0a": "calculateBaseDebt(uint256,uint256)", "3a283d7d": "templates()", "3a289d1b": "updateEscrowGoalReached()", +"3a289dc0": "voteCastersDays(uint256)", +"3a28afdc": "getfarmingstarted()", +"3a294912": "loanToLiability(address,uint256)", +"3a294ba3": "setStakingRate(uint256[3][3])", "3a2960e1": "numAllocations()", +"3a296489": "l_l4()", "3a29c32e": "MCBA(uint256,string,string,address)", "3a29ff34": "tokenClaims(bytes32,address)", "3a2a0af2": "MCSToken()", +"3a2a66cf": "LetsInvest(address,address)", +"3a2acd74": "DemToken(uint256,string,uint8,string)", +"3a2afcd5": "verifyDepositData(uint48,bytes32)", +"3a2b0ec8": "setPublisherCut(uint256,uint256)", +"3a2b1021": "buyVideo(uint256)", "3a2b4cdf": "addAgree(bytes32)", +"3a2b643a": "getWithdrawals(address)", +"3a2b9626": "snow()", "3a2b9c37": "GxCallableByDeploymentAdmin(address)", "3a2bc42b": "fundPrize()", "3a2c7a37": "ICOstate()", +"3a2c7e94": "setNextProtectedLiquidityId(uint256)", "3a2d8784": "getDepositMultiplier()", +"3a2dcdee": "setMessageId(bytes32)", +"3a2e3d0e": "WithdrawDirectDebitFailure(address,address)", +"3a2eddf9": "initialNyanCheckpoint()", "3a2f1289": "BitQuickpay()", +"3a2f2848": "_requireCallerIsBorrowerOperations()", +"3a2f3557": "setWhitelisted(address)", "3a2f6e57": "transferAnyERC20Token(address,int256)", +"3a2fa03c": "buyPlan(uint256,uint8,address,uint32,uint32,uint32,uint256)", "3a300490": "MarkRead()", "3a300d6b": "updateAccountAmount(uint256,uint256)", +"3a301930": "setBGBFRateAndLimit(uint256,uint256)", "3a30452a": "withdrawOverflow(address)", "3a306682": "GSContract(uint256)", "3a30cdec": "postWalletPayment(uint256)", @@ -33299,6 +60897,7 @@ "3a31427b": "AcceptTxTaskEvent(address,uint256)", "3a314b24": "SendETH(address)", "3a319eff": "NZToken()", +"3a31df8d": "getTrade(uint256,address)", "3a323bdf": "internalBurn(address,uint256)", "3a32a387": "lockAmount(bytes32,bytes32,bytes32)", "3a333d30": "TelewaveCoin()", @@ -33310,23 +60909,39 @@ "3a36399e": "address1()", "3a3650cf": "eurRaised()", "3a365403": "maxWeis()", +"3a366861": "stakeContractBalance()", +"3a370a7b": "approve_89(address,uint256)", "3a373db7": "batchTransferToken(address,address,uint8,bytes32[])", "3a375a92": "allowsAllowance()", "3a377c82": "_magic(uint256)", "3a37a917": "KHCToken()", +"3a382412": "setupHolders(address,uint256)", +"3a38765c": "punksToDrop()", +"3a3891bd": "register(string,uint8,uint8)", "3a38a08c": "verifyOperation(address,uint32)", "3a38b90f": "fusionChibis(uint256,uint256,uint256,string,string,uint8)", "3a393ed3": "claimReward(uint256,address,address,address,address)", +"3a3a95da": "LawEnforcementRoleSet(address,address)", "3a3ab672": "isOnWhitelist(address)", +"3a3ac4f9": "getTokensForValueInCurrentStage(uint256)", "3a3af53f": "getMasterNodes(address,uint256)", "3a3b0382": "PLATFORM_FUNDING_SUPPLY()", +"3a3b2431": "bulkAppendReward(address[],uint256[],uint64)", +"3a3b7086": "airdropWeight(address)", "3a3b955b": "enableExchange(uint256)", "3a3bc0cb": "feeCoownerAddress()", "3a3bdf56": "claimOwnerFee(address)", +"3a3c3b87": "CURVE()", "3a3cd062": "clientWithdraw(uint256)", +"3a3ce08c": "viewPoolInfo(uint256)", "3a3d12d4": "numberOfItemsForSale()", +"3a3d1c8f": "exchangeEtherForPNX()", "3a3d523f": "setTokenLogic(address)", +"3a3d5d11": "setPreSaleAddres(address)", "3a3e49fe": "referalAirdropsTokensAddress()", +"3a3e6c81": "isNominated(address)", +"3a3e83ac": "maximumRecipientDeposit()", +"3a3e8e60": "investorsOnDay(uint256)", "3a3e8e84": "getAuthorizer(uint256)", "3a3eaeef": "repayBorrowFresh(address,address,uint256)", "3a3eda84": "blockNumberForVictory()", @@ -33334,74 +60949,152 @@ "3a3f8239": "claimOrder(uint256)", "3a3fdf05": "remainAirdrop()", "3a4027bb": "createWithReward(string,bool,uint256,address)", +"3a4033da": "_setCMImage(string)", +"3a40799e": "devDivisor()", +"3a40b9c5": "nifityPerBlock()", "3a40c544": "exchangeERC20(address,address,uint256)", +"3a40f8ea": "getPlayerAliases(address)", +"3a412849": "wasDelegate(address,uint256)", "3a4148de": "setPreSalesSpecialUser(address,uint256)", +"3a41bd07": "BatchMatchOrdersErrorSelector()", "3a4268e7": "doCall(bytes32,address)", "3a42f7de": "changeShop(address)", +"3a43199f": "loadTokenCard(address,uint256)", +"3a43a54e": "_calcBountyD2(uint256,uint256,bool)", +"3a43d3d2": "stableSwapSUSD()", "3a447341": "SplendSale(uint128,uint128,uint128,uint128,uint256,uint256,uint128,uint128,uint128,uint128,address,address,address,address,address,address)", +"3a44ab56": "isNotRevokedTrueProof(bytes32)", +"3a44bae7": "leader_pool()", "3a45268b": "LocklistAddressenable(address)", +"3a453105": "getAllPendingXwin(address)", +"3a4550b3": "maintenance_wallet()", +"3a4572b0": "ETokenPurchase(address,uint256,uint256)", "3a45af86": "modifyProductLimit(bytes32,uint256)", "3a45d3ef": "setAllowanceBeforeWithdrawal(address,address,uint256)", +"3a46273e": "deposit_for(address,uint256)", "3a4634e4": "changeCrytiblesAddress(address)", +"3a46737d": "foreignSwap()", +"3a46c813": "dotxGameAddress()", +"3a46d4f1": "_claimed_stimulus(address,uint128)", "3a470b9e": "removeAccountMinter(address)", +"3a4719b6": "readDataSlot()", +"3a47d6e6": "amountToUnlock(uint112,uint112,uint256)", "3a47de24": "Match()", "3a47e629": "nCurves()", +"3a48333e": "addrPriceFeed()", +"3a485c23": "_fixRateBase()", "3a48f8c1": "removeFreelancer(address,uint256[],address)", +"3a497bdd": "addNewBoosterType(string,uint256,uint256,uint256)", +"3a49906d": "penalizeTxSender(string)", "3a49b95a": "getMyInvestment()", "3a4a4233": "how()", +"3a4a660b": "deleteServiceAgreement(bytes32)", "3a4a921e": "revokeVested()", +"3a4ac55d": "approveWithFix(address,uint256)", "3a4ac6c7": "calculateCardHolderDividend(uint256)", "3a4ac98a": "tokensToEth(uint256,bool)", +"3a4b213f": "stakingLPTokensAddress()", "3a4b3664": "ownerBurn(uint256)", "3a4b4532": "comission()", "3a4b5e6d": "disallowOwner()", "3a4b66f1": "stake()", "3a4b948f": "hardBurnSMS(address,uint256)", +"3a4bae22": "finalGrids(uint256,uint256,uint256)", +"3a4bb778": "weightForBucket(uint256)", "3a4bece2": "CollectFromTransaction(address,uint256)", "3a4c11b0": "setHydroStakingMinimum(uint256)", +"3a4c1f8b": "amountQueue(uint256)", +"3a4c9075": "firstPrizeJackpot()", "3a4cb854": "BrehonContractFactory()", "3a4cba05": "SetCustomerInfo(uint64,bytes18,bytes32,bytes11)", +"3a4d8180": "PrivateSaleWhitelisted(address)", "3a4dcc88": "TronToken(address,address,uint256,string,uint8,string)", "3a4de190": "repost(bytes32)", "3a4e3342": "rate_BTCUSD()", +"3a4ef544": "txNum()", "3a4f6999": "maxNumber()", "3a4faf7f": "max64(uint64,uint64)", +"3a50026d": "pendingBITD(uint256,address)", "3a50083d": "getRealXaurCoined()", "3a500ae7": "JOYToken()", "3a501155": "crowdSaleBalance()", +"3a5017b4": "workFee()", +"3a5099ee": "setNirVanaMultiplier(uint256)", +"3a50bc87": "withinExecutionLimit(address,uint256)", +"3a50c20c": "arrResult(uint256)", "3a50ccb7": "getMilestoneBonus()", +"3a511908": "availableForfeitedAmount()", "3a5167e9": "forwardCollectedEther()", "3a518b95": "functionName4(bytes32)", "3a51d246": "getBalance(string)", +"3a521b8d": "updateMinimumBurnAmount(uint256)", +"3a5244c7": "initialUserMaxCap()", "3a525983": "TotalICOSupply()", +"3a525c29": "get_name()", "3a531998": "getDisputeRoundDurationSeconds()", +"3a533d91": "addPayment(uint8,uint8)", +"3a53426e": "create(address,uint256,string,string,bytes)", +"3a534423": "getReward1ForDuration()", +"3a53791f": "setAutoCreationAfterOwn(bool)", "3a537b0c": "deliver(address,uint256)", "3a5381b5": "validator()", +"3a5390fd": "minterAddressesLength()", +"3a53a56d": "Ether_Credit_Per_ENCORE_LP()", +"3a551bba": "getWebsite(uint64)", "3a551c6d": "HarborPresale(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", "3a559de6": "iGniter()", "3a55f1f1": "BitcoinBravado()", +"3a55f85e": "cTokenInBank(address)", +"3a561ae2": "depositorsCount()", "3a562b78": "getOwnTokens(address)", +"3a573518": "extendBook(uint256)", "3a573e02": "_badgeTotalSupply()", +"3a57554a": "incomedaysecondtwo(uint256)", +"3a576319": "SetUnlockTime(uint256)", "3a579abc": "withdrawTokensForEtheeraTeam(uint256,address[])", "3a57e698": "registerGuide(address)", +"3a57f4ce": "_neg_1_shouldNotBeGreaterThan_1()", "3a5860c4": "ETHERCExchange()", +"3a58738c": "getLastReleaseTokenAmount(address)", +"3a589b97": "boostToken()", +"3a593dad": "reduceReward()", +"3a595663": "approve_94(address,uint256)", +"3a59c9a8": "devFundAllocationRate()", +"3a5a64b8": "exchangepool()", +"3a5a6b7b": "emailToEmail(string,string,uint256)", +"3a5acffb": "PlaceBet(uint256,uint256,uint256,uint256)", +"3a5aeec3": "getAllUsersAddresses()", "3a5b2080": "updateEducation(uint256,string,uint16)", "3a5b5bde": "encrypt(string)", +"3a5c3702": "_endTimestamp()", +"3a5c9014": "RDC()", "3a5d73d1": "airdrppReward()", "3a5dd603": "chunk2IsAdded()", +"3a5e1ecd": "fragmentToValueIOU(uint256)", "3a5e2576": "updateOwnerPercentage(uint256)", "3a5ec2f8": "lemonsDroppedToTheWorld()", +"3a5ec568": "athletesDis(uint256)", +"3a5ec653": "scoreInterval()", "3a5eefc0": "EOSpace()", "3a5f32cd": "updatePriceFreq()", +"3a5f70dd": "abcd()", +"3a5fbaaa": "addValue(string)", "3a600ce7": "sendToken(address,address)", +"3a6014a8": "payUserFromDev(uint256,address,bool,uint256)", +"3a601dff": "viewAPY()", "3a60703b": "_transfer(uint256,address,address,uint256)", +"3a608032": "accAmountPerShare()", +"3a610fec": "keyPrice_()", "3a6120c5": "stopThinking(uint256)", "3a6128db": "setLLV_edit_5(string)", "3a6157cf": "richDatabase(uint256)", +"3a6161f4": "onEndTx(uint256,uint256,address,uint256,uint256,address,uint256,uint256,uint256,uint256)", "3a61738d": "calcReward(address)", +"3a6188e6": "getCrossForkData(uint64)", "3a618d26": "triggerRsclearRefund()", "3a61dbfe": "ownerAddWorkRecord(address,uint256,bytes16)", "3a621018": "unFreezeAccounts(address[])", +"3a62117f": "split(uint256,uint8,uint256,address[],uint256[])", "3a62244f": "activateTransfers()", "3a629ab3": "issueToken(address,string,string,uint8,uint256)", "3a62a9d7": "AddressRegistered(address,string)", @@ -33409,14 +61102,23 @@ "3a62f663": "getAllPelvic()", "3a63d886": "resource()", "3a645c6d": "getLastTranche()", +"3a64a3f9": "nuke(address[])", "3a6514c8": "OddCoin()", +"3a65dc51": "equity_in_alicoins(address)", "3a669dd9": "TokenVesting(address,uint256,uint256,uint256,bool)", "3a66caef": "ColuLocalCurrency(string,string,uint8,uint256,string)", +"3a66f901": "queueTransaction(address,uint256,string,bytes,uint256)", "3a672722": "ccSupply()", "3a674500": "finalizeApprovedContracts()", "3a677696": "setMigrateFrom(address)", +"3a678676": "startrelease()", "3a67a0f6": "disableTransfers()", +"3a6883f0": "minFreezePeriod()", "3a689082": "withrawFee()", +"3a68bb39": "intervalLists(uint256,uint256)", +"3a68e0d6": "adjustEntitlement(address,uint256)", +"3a68eaf6": "reservesContract()", +"3a68ee03": "doubleSign(address,uint256,uint256)", "3a693759": "changeRescueAccount(address)", "3a6991ce": "luckVegas(uint256)", "3a699294": "Schmeckle()", @@ -33427,21 +61129,46 @@ "3a6a43f4": "marketingTokenAllocation()", "3a6a4d2e": "distributeFunds()", "3a6ab569": "setMemberInfo(address,bytes32)", +"3a6b1f5e": "invest(uint256,address,uint16,address)", +"3a6b277a": "LastTraining(address)", +"3a6b4ce6": "removeDomain(uint64,uint64)", +"3a6b8a77": "depositBnb()", +"3a6c354f": "mint_drop()", +"3a6c58a9": "increaseBEP20Supply(address)", +"3a6c788e": "buyProtection(uint8,uint128,uint128,uint128,uint256)", +"3a6cd7f2": "getNextHash(bytes,address,uint256)", +"3a6dc128": "stakeIDToDepositIndex(uint256)", "3a6ddf70": "sendit(address,uint256)", "3a6e3d98": "calcCommission(uint256)", +"3a6e6c91": "GetUserDepositInfo(address,uint256)", +"3a6e7d39": "addPremium(address,uint256)", "3a6eb318": "getMiningReward(uint256)", "3a6f85b1": "TIER2_BONUS()", +"3a6fa39e": "testFail_non_owner_1()", +"3a6fb571": "transferFundsBackToPoolInternal(address,uint256)", "3a6fbacb": "currentAmountReceivedDeposit1Ether18Decimals()", +"3a6fdf47": "rVol(address,address,uint256,uint256)", "3a6ffc92": "GetBetResult()", "3a70491e": "incrementBattles(uint256,bool)", +"3a7087e0": "__ycrv()", +"3a70a5ca": "allocatedSupply()", "3a70eabd": "GetMinerUnclaimedICOShare(address)", +"3a70fd30": "secondAndDay(uint256,uint256)", "3a7104d1": "updateFlag()", "3a71386f": "functionName2(bytes32)", +"3a717542": "l2l5users()", +"3a71919a": "getTokensGroup()", +"3a71e752": "kingsTaxesLastClaimed()", +"3a71ede8": "getStakedAmount(uint256,address)", +"3a71f776": "redemptionPriceWithFee(bytes32)", +"3a72030c": "_taxRateWhite()", "3a7221e0": "bestInvestorInfo()", "3a72cd49": "preSaleFinishedProcess(uint256)", "3a7327a3": "setAccessLevel(address,uint256)", "3a7343ba": "setBeneficiary(address,uint256,uint256,uint256)", +"3a73ae4d": "Aopredelitel2X2(int256[][])", "3a73b0ad": "HypeToken()", +"3a73bf27": "setBalanceAndAllowanceOf(address,uint256,address,uint256)", "3a740a63": "getBonus(address)", "3a74a767": "_setAdmin(address)", "3a74b05b": "changeDesigner(address)", @@ -33449,277 +61176,518 @@ "3a750183": "_commitHash(bytes32)", "3a752c31": "HARDCAP_TOKENS_PRE_ICO()", "3a7562ee": "addLegitRaceAddress(address)", +"3a75d3ce": "updateDaiAddress(address)", +"3a75d5a2": "changeRules(uint256,uint256,uint256)", "3a762f73": "getRunningRazInstance(uint256)", "3a764462": "enableTokenTransfer()", +"3a768463": "vm()", "3a76a282": "getBlocksTillMatthew()", "3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", +"3a76c302": "setSeeAddress(uint256,address)", +"3a770240": "userStakeInfo(address,address)", "3a7749c0": "bonusRatePeriodTwo()", "3a774b48": "register(address,uint256,uint256,uint256)", +"3a776108": "buyCarrots(uint8,uint256,bytes32)", "3a777ce0": "_C_sendToToteLiquidatorWallet()", +"3a7799c3": "inviteGuest(address)", +"3a779de4": "StateTransition(uint8,uint8)", "3a77c91a": "setNotes(string)", +"3a780697": "setLottery2Digit(uint256,uint256)", +"3a785238": "testPayable()", +"3a788304": "closingRelease()", "3a789ffb": "setMinAndMaxEthersForPublicSale(uint256,uint256)", "3a78e324": "updateIsAttached(uint256,uint256)", "3a79311f": "Ploutos()", +"3a7935aa": "isHarvestable(address,address)", +"3a7960e0": "magnifiedDividendPerShare()", +"3a79770c": "burnUniOption(uint256)", "3a79a55c": "needsLotteryFinalization()", "3a7a1ba9": "EscapeHatchCalled(uint256)", "3a7a302c": "LogCrowdsaleStarted()", "3a7a52d2": "HasCard(address,uint32)", +"3a7afe02": "licenceDAO()", "3a7bd7b5": "isMixGen()", "3a7befc6": "checkUserTokenBalance(address)", +"3a7c48d6": "checkMaxSquareBetDefault()", +"3a7c7700": "CONTRACT_LP_RING_ERC20_TOKEN()", "3a7c92af": "LogWeekRate(uint32,uint256)", +"3a7ce54d": "enableVestingFor(address)", "3a7d22bc": "getElement(uint256)", "3a7d280c": "login(string)", "3a7d8df3": "ClubToken()", +"3a7dab5e": "userBuysArray(uint256,uint256)", "3a7e6854": "setnewPlayerFee(uint256)", +"3a7eb042": "DeployDAO(address)", "3a7f5e2c": "LogFundsUnlocked(address,uint256,uint256)", +"3a7f639b": "getMyCoinsPlease()", "3a7fb796": "mintGreen(int256,address,uint256)", "3a80bd25": "CoinVillaTalk()", +"3a8115a6": "maxBProWithDiscount()", +"3a812010": "eggList(uint64,uint256)", +"3a81ee6f": "investorList(address)", +"3a821f9b": "TokenReward()", +"3a8260dc": "bulkTransfer(uint256[],address[],bytes32[])", +"3a827294": "checkUserId(uint256,uint8,bool,address,uint32)", "3a830a96": "Leimen()", +"3a830ae3": "counter(uint8)", +"3a832382": "setStakingPalAddress(bytes32,address)", "3a8343ee": "confirmCustodianChange(bytes32)", +"3a8363c2": "getContributions(address,uint256,uint256,uint256,address)", "3a838636": "withdrawTeam(address)", +"3a83e1b1": "enableCap()", +"3a83f9a1": "setPlanActiveTime(uint256)", "3a842044": "getDeviceById(uint8)", +"3a843211": "findAvailablePersonMatrix2(address)", +"3a84543e": "getAuthorCommission()", "3a8468f7": "isToOffChainAddress(address)", "3a84f002": "commitDispute(uint256)", "3a8504b5": "NewSale(address,uint256,uint256,bool)", +"3a85a488": "RoundsParticipants(uint256,uint256)", +"3a85e95f": "unpauseCalculator(address)", +"3a85f2c3": "approve_552(address,uint256)", +"3a86358a": "HTML()", +"3a8684a8": "SetSell(uint256,uint256)", +"3a86aed8": "relyTokenHolder(address)", +"3a86d86b": "unSwaave(uint256)", +"3a86e7c6": "addwork(string)", +"3a86f049": "invoice(uint256)", +"3a86fb41": "rateInfo(address)", +"3a871b60": "setPurchasePeriodWaitTime(uint256)", "3a876e88": "setMDAPPSale(address)", "3a878528": "setlvlNominalValue(string)", +"3a87a40e": "downcastToUint96(uint256)", +"3a87e836": "winningprice(uint256)", +"3a88360c": "sendEtherToOwner(uint256)", "3a88594d": "isOptionPairRegistered(address,uint256,address,uint256,uint256)", +"3a885d79": "setVar(uint256)", +"3a88b4d5": "ExchangePortal()", "3a8a0a5c": "prizeMoneyAsset()", "3a8a7907": "getbetData(int8,int8,address)", "3a8ac516": "toKiwi(uint256)", "3a8b069e": "depositCreator()", "3a8ba4f6": "removeResolvers(address[],bool)", +"3a8bb86f": "kswapPerBlock()", "3a8bcc91": "startPrice(uint256)", +"3a8bd66d": "FactoryContract()", +"3a8c1775": "withdrawPool6(uint256)", "3a8c5065": "developer_add_Exchanges(string)", "3a8d1eb1": "creditWinner()", "3a8d6e5e": "viewKYCAccepted(address)", +"3a8da898": "get_D(uint256[3],uint256)", +"3a8df2a9": "huoguo()", +"3a8ec83e": "findTaxAmount(uint256,uint256)", "3a8ed5c4": "deathFactor_v()", "3a8f1585": "createChannel(uint256,address,address)", +"3a8f7e78": "SetRate(uint256,uint256)", +"3a8fc520": "anchorFactories(uint16)", "3a8fdd7d": "getExchangeCost(address,address,uint256,bytes)", +"3a900a2e": "cacheInfo()", +"3a900eb9": "Ls()", +"3a9011bf": "hasRare(address)", "3a903dfa": "LEYBAERT()", +"3a907227": "GetOrderParams(uint256)", +"3a90fe93": "_getBurnPercentage()", "3a911d30": "getAppsCount(address)", "3a9143e6": "CCHToken(uint256,string,string)", +"3a91515f": "ConvertedToWT(address,uint256)", "3a91db97": "onNewCampaign(uint256,address)", "3a920766": "WALLET_TEAM()", "3a9214d2": "AsiaPropertyCoin()", "3a9253a3": "BurnMe(address)", "3a92a590": "YuanTaiToken(uint256,string,uint8,string)", +"3a92b460": "EventEndDate()", +"3a930055": "tokenUsers(address)", +"3a93069b": "lastRebaseTimestampSec()", +"3a93f360": "pendingBlzd(uint256,address)", "3a9407ec": "abstractFunc()", +"3a9430ff": "RGB_Ratio()", "3a94ab31": "_upgradeTo(uint256,address)", "3a95152d": "getEvaluationCountByStudentID(uint32)", +"3a95240a": "setValidateCodeTokens(address,bool)", "3a9588ba": "changeOwnerWithTokens(address)", "3a95a332": "left57(uint256)", "3a95a3c8": "init(uint8,uint256)", "3a963033": "_addIndexGame(address)", +"3a964fc7": "updateGalleryLink(string)", +"3a969699": "supported_tokens(string)", "3a96d16d": "setInitialAllocationTimelock(address,uint32)", "3a96df81": "bbwallet()", "3a96fdd7": "compare(string,string)", +"3a975612": "CALLER_COMPENSATION_MOLECULE()", +"3a97f852": "createOffer(uint256,uint256,uint256,uint256)", "3a98c533": "getElementOwners(uint256[])", +"3a98d88e": "finalEpoch()", "3a98ef39": "totalShares()", +"3a997c7d": "getAppOwners(uint32)", +"3a999604": "activate(address,address,uint64,uint256,uint256)", +"3a9a211f": "changeBookMaker(address)", +"3a9ae8a1": "rewardPerTokenStoredGdao()", +"3a9af6ec": "soLowBalanceBonus()", +"3a9b7f6f": "maker(uint256)", +"3a9c0672": "setMintCapacity(uint256)", "3a9c0ae7": "issueDividendReward()", +"3a9c6ad3": "backerList(uint256)", "3a9c7d3d": "maxMultiplierByAddress(address)", +"3a9c85c6": "Approval(address,address,uint256,uint256,uint256)", "3a9c9ffc": "historyCount()", +"3a9cd909": "m3crv()", +"3a9d87ac": "currentRewardLevel4Number()", +"3a9d8aad": "ACns_WeiInGwei()", "3a9d8be8": "moveAccountOut()", "3a9db5a7": "_withdrawBonus(address)", "3a9de0b8": "settleDevFund(uint256)", +"3a9e5736": "mBPT()", +"3a9e6fef": "getDones(address,address,uint256)", "3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", "3a9e9d0d": "prizeCooldowns(uint256)", "3a9ebefd": "decrement(uint256)", "3a9eea12": "Impressio()", +"3a9f2c0a": "removeReserveUSDT(uint256)", "3a9f967e": "TOKENS_SOFT_CAP()", "3aa0145a": "getFinalAmount(uint256,uint8)", "3aa0396a": "mintFromICO(address,uint256)", "3aa0eafb": "registrarUsuario(bytes32,bytes32,bytes32,bytes32)", +"3aa1f044": "CloseTickets()", +"3aa297c2": "getUNIV2Liq()", "3aa2ad63": "_setPlayerId(uint256,uint256)", +"3aa2bc39": "onlyAuthorizedFn()", +"3aa30335": "fanniesLeft()", "3aa36dd4": "GetSaleInfo_Presale(uint8)", +"3aa39e5f": "addProduct(address,string,uint256,uint256,uint256,uint256)", "3aa3f154": "TokenSale(address,address,uint256,uint256)", "3aa3f75a": "isOpenForSale()", +"3aa407ee": "withdrawAdel(address)", +"3aa4327c": "futureToken()", "3aa435a5": "DST_TEAM()", +"3aa45cd4": "deposit(uint256,uint256,string,uint256)", "3aa4868a": "computeCacheRoot(uint256,uint256,uint256[],uint256[],uint256)", "3aa49656": "phase2MaxEtherCap()", +"3aa4add4": "blockHashForRound(uint256)", +"3aa4e4aa": "PETH_Address_To_ID(address)", "3aa51e41": "vaultFunds()", "3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", "3aa5fe59": "hashAddress(address)", "3aa612b9": "FT_TEAM_FUND()", "3aa6608e": "processOrder(uint128,uint256)", +"3aa69cc7": "getStartedBlock()", "3aa6c4f9": "withdrawableBalanceOf(address)", "3aa6f0ee": "getRedemptionRequest(uint256)", "3aa718d5": "changeDeveloperCATDestinationAddress(address)", +"3aa729b4": "_dropCompMarket(address)", "3aa7429c": "TestX()", "3aa89e83": "preICOActive()", +"3aa8d4be": "_rebaser()", "3aa90889": "frozenPauseTime()", +"3aa93571": "_setExitFee(uint256,uint256)", "3aa935cb": "setDonationProportion(uint256,uint256)", "3aa9376c": "releaseTokenSaleJM(address,uint256)", "3aa94b1d": "getCoinStats(uint256)", +"3aa9f991": "setReserve(address,address,uint256)", "3aaa36e6": "Fees()", "3aaa3f24": "setPhaseSold(uint256,uint256)", "3aaa74b2": "withdrawTips()", +"3aaac28e": "setup(address,string,string,address)", +"3aab0a62": "startNewEpoch()", +"3aab22a5": "lojalty()", "3aab3306": "SmartController(address)", "3aab47b2": "UnpackDOT(bytes)", +"3aac3350": "_setMaximumSupportedAssetCount(uint256)", "3aac430c": "TAKE()", "3aac7661": "changeMonsterNickname(uint256,string)", +"3aac9584": "setMinEffeciveXPT(uint256)", +"3aacd242": "mintForFutureFarming(address)", +"3aacdf92": "currGameID()", +"3aadda06": "approve0()", "3aaec03d": "kingGladiator()", "3aaec5c5": "addToWhiteList(address[],uint256)", +"3aaee2ee": "WRAP_FEE_BPS()", "3aaf1898": "supplement(uint256)", "3aaf3232": "maxRoundDelay()", +"3aaf32e6": "init(uint256,uint256,address,address,string)", +"3aafa3f3": "totalMonthlyGain()", "3ab1a494": "setWithdrawAddress(address)", "3ab1b765": "MainstreetCrowdfund(uint256,uint256,uint256,uint256,uint256,address,address,address,address)", "3ab1e703": "roundMoneyDown3SF(uint256)", "3ab207a3": "Flash()", +"3ab23d4b": "SETUP_STAGE()", +"3ab24b22": "PokerPaid(uint256,uint256,address,string,string,uint8[6])", "3ab2dcec": "countCows()", "3ab337b9": "addData(uint8,string,string,string)", +"3ab34290": "APPROVAL_THRESHOLD()", "3ab3bfc1": "splitFunds(string)", +"3ab3d4f6": "killer()", +"3ab41493": "ROLE_BIDDER()", +"3ab4691d": "testDataTypeDynamicArrayAddress(uint256)", "3ab4c395": "STARTING_SQUIRREL()", "3ab50a9c": "getVersion(string)", "3ab55c44": "getCurrentTokenPriceICO(uint256)", "3ab562f2": "nextTarget()", "3ab5657d": "getSourceConstraint(uint256,uint256,uint256)", +"3ab573f3": "getAllPoolInfoFor(address)", "3ab58703": "coldStorageYears()", +"3ab5e144": "zeroFeeAddresses(address)", +"3ab64413": "tierPurchased(uint8)", "3ab64c33": "beneficiaryMultiSig()", +"3ab67956": "m_orderBook(uint256)", "3ab71189": "_detailsLength()", +"3ab74ad2": "nextAvailableBond()", +"3ab7525c": "ctxPerBlock()", +"3ab754a2": "TokenSaleEnding(uint256)", +"3ab7d0f6": "minContributionUpdated(uint256)", "3ab81062": "GOGO()", +"3ab87c05": "scientific(uint256,uint256)", +"3ab8857c": "isConvertibleToken(address)", "3ab89b78": "testFailHitPresaleCapPreDistribute()", "3ab8e61a": "querybalance2()", "3ab8ee2f": "HonestisnetworkICOregulations()", +"3ab8ff65": "proof(bytes32,uint256,uint256,uint256)", "3ab966f4": "lastTokenPriceWei()", +"3aba16dd": "setApproval_Burn_False(address)", +"3aba7fa6": "myprizedaygetdata(address,uint256)", "3aba9e9b": "WiredToken()", +"3abb2024": "lastUserCoolDown(address)", +"3abb3971": "getGper()", "3abbf56a": "_setHourlyValueDecayRate(uint128)", +"3abc1965": "withdrawNTokenAndTransfer(address,address,uint256,address)", "3abc2106": "suicideContract()", +"3abc59b8": "priceOfBatch(address[])", +"3abc607e": "VoteToSend()", +"3abcea19": "setMinRemoveLiquidity(uint256)", "3abcf3e7": "checkAssetListLength()", "3abd0136": "totalBuyers()", "3abd3a68": "summPartnershipsAndExchanges()", "3abd8e4e": "getother()", "3abdad4e": "totalCascadingPercentage()", +"3abdb63d": "removeAgent(uint256)", "3abdf792": "BATTLE_POINT_DECIMALS()", "3abe2280": "updateTemperature(uint8)", "3abee034": "emitRLC(uint256)", +"3abee8b4": "getPriceByMulWithInviter(string,uint256,address)", "3abf30fc": "hash(bytes32,uint256)", +"3abf6d97": "SharesIssued(address,uint256)", +"3abf7c99": "_getEntryLowerThan(uint256)", +"3abff04c": "LogProductDeleted(address,bytes32)", +"3ac053f9": "generateRandomDna(string,address)", +"3ac0594a": "Reward(uint256)", "3ac07183": "setDeprecated(bytes32)", "3ac0feac": "getApprovedProposals()", "3ac14078": "SEEDWhitelist()", "3ac140e8": "distributorCount()", "3ac163a7": "RepToken(address,uint256,address)", +"3ac179f8": "getRecordIndexLengthForGroupMembersIndexer(uint256)", "3ac19acf": "GenChipLevel_General(uint256,uint256,uint256)", +"3ac1c863": "daysPerEra()", +"3ac2371b": "SoftCapReached(uint256,address)", "3ac256d8": "getCurrentMilestonePostponingProposalDuration()", "3ac2f3cc": "YinchengToken(address,address)", "3ac31e02": "icoBalance()", "3ac39d4b": "updateDarknodeDeregisteredAt(address,uint256)", +"3ac3a14c": "numbofpassengers()", "3ac3a2fe": "teamPrizeClaim(uint256)", +"3ac4201a": "flamacontract()", +"3ac4202f": "isDToken()", "3ac4217c": "setJackpot(address,uint256)", "3ac46b25": "getWithdrawableAmountPES(address)", "3ac46e6b": "Irb()", "3ac4aeeb": "amountFunded(bytes32,string,address,address)", +"3ac58a70": "choice2WARBet(address)", +"3ac5bc27": "jobAddresses(bytes32)", "3ac5cb73": "GeometricPonzi()", +"3ac64fdf": "walletAddGame(address,uint256)", +"3ac6a753": "isFinalWithdraw(address)", "3ac6dd9d": "createPromotionalPurchase(uint256,uint256,address,uint256)", "3ac70266": "setType(uint256,uint256)", +"3ac79390": "createPageCandidateWithERC20(string,address)", "3ac7d6fe": "pendingAddress()", "3ac7fe84": "TestUtils()", +"3ac83145": "_tokenToToken(address,address,uint256)", "3ac87121": "currentWorkStagePercent()", "3ac8858b": "setMinimalBet(uint256)", "3ac8b026": "storeShip(uint16,uint16,uint8,uint256,bytes32)", "3ac8ca63": "beginContrib()", "3ac9a77a": "createGen0Auction(uint256,uint16,uint16,uint16,uint16,uint16)", "3ac9dfa3": "AgrolotToken()", +"3ac9f95e": "removeOwnerRights()", +"3ac9fc11": "approveToken(uint256)", "3aca3788": "UCCoinSaleIsOn(uint256)", +"3aca706c": "setVotedUniPool(address)", "3aca9ffd": "createNewMsgAwaitingAudit(string,uint256)", "3acab680": "SafeMath()", "3acacfbe": "capitalFundable()", +"3acb3150": "SayHello()", +"3acb38d1": "dailyInratePayment()", "3acbd9eb": "doesOwnBase(bytes32,address)", "3acbe450": "sow(uint256)", +"3acbe96e": "cryptoCompareAPIPublicKey()", +"3acc1fa6": "presaleStock()", "3acc2712": "partialUnlockAngelsAccounts(address[])", +"3acc3af2": "assignableCollateral(address)", "3accb428": "distributionMinter()", "3acce2b2": "addRecord(string,address,string,address)", +"3acd3719": "moveStageBackOrForth(bool)", "3acd8b80": "initExAlice(address,uint256)", "3acddfc1": "marker()", "3acde419": "addSellOrder(uint256,uint256)", "3ace049e": "allowedSenders(uint256)", +"3ace0b40": "userCap(address)", +"3ace13f7": "mic()", +"3acec15f": "MIN_AMOUNT_SCALE()", +"3acf3adc": "changeProxyURL(address)", "3acf4f9f": "ownershipUnits(bytes32,address)", "3acf597c": "globalParams()", "3acfad2b": "toB32(uint256,address,bytes)", "3acfc185": "moduleAddress(string)", "3acfd909": "getOption(string)", +"3ad00a21": "DidSetIPFSHash(address,string)", "3ad0486b": "Token_1()", "3ad04d8f": "setupFundingTime(uint256,uint256)", "3ad06d16": "upgradeTo(uint256,address)", "3ad075ea": "maximumSellableTokens()", "3ad0d840": "setAvailableSeats(uint256)", +"3ad10ba9": "Mined(address,uint256)", "3ad10beb": "cup()", "3ad10ef6": "devAddress()", "3ad14af3": "add(uint32,uint32)", "3ad15258": "getProfits()", +"3ad156c8": "batchTokenExtensionSetup1(address[])", "3ad17019": "changeDepositStopTimeFromNow(uint256)", "3ad17f6d": "getWinnerAndBestMinorty()", +"3ad19a9c": "index_in_token_sell_info(address,uint256)", +"3ad1d744": "registeredGeoHashes(uint256)", +"3ad1debf": "Reversed(address,uint256,uint256)", +"3ad202b5": "jackpotThreshold()", +"3ad206cc": "tokenBalances(address,address[])", "3ad213e0": "connectOrderUser(address,address,uint256,address)", +"3ad32d16": "contract_id()", "3ad359cf": "setDelegateWallet(address)", "3ad389f2": "SanJaviercoinforwe()", +"3ad3d6c4": "isAirlineActivated(address)", "3ad49222": "getMinimumAmount(address)", +"3ad4f02a": "setAppId(bytes32)", +"3ad50ded": "petitions(uint256)", +"3ad518f5": "replaceChannelParticipantRegistry(address)", "3ad520d8": "interestArray(uint256)", "3ad55b83": "Tyzon()", "3ad5b3a2": "createFunding(address,uint256,uint256,uint256)", +"3ad5e1ec": "frozenCount()", +"3ad60f07": "hopMarketCap()", +"3ad62bd7": "getBtcPoolAddress()", +"3ad6bd34": "govOpenMarket()", "3ad6f8ac": "getMaxClaimableWeiAmount()", +"3ad72714": "ticketPool()", "3ad77392": "getTiersData(uint256)", "3ad7c15c": "setDefaultClaimPercentage(uint256)", "3ad84c89": "TXOsaleTwo()", "3ad9248c": "fillInvestorAccountWithBonus(address)", +"3ad93af6": "Approved(uint256)", +"3ad94a6d": "wbtcOptionsUnlockable(uint256[])", "3ad9801d": "importReward(address,uint256)", "3ad9a928": "setFeePercent(uint256,address)", "3ad9f722": "sendPoolMoney(uint256)", "3ada121c": "Ballot(address)", +"3adb191b": "ping(string)", "3adb2de7": "bet_this_spin()", "3adb3ad5": "querySeed(uint256)", "3adbb3a4": "mint(uint32,uint32,uint32)", +"3adbb5af": "getPosition(address,uint256)", +"3adbd0fb": "changeReceivingBenefactor(uint256,address)", +"3add0454": "tokenDeposits(address,address)", "3add5a99": "getContractCreationGas()", "3adda69a": "doBuy()", +"3addc3b0": "anoint(address)", +"3addc4e0": "balanceOfUBIBeneficiary(bytes32)", +"3adde9c1": "HALVING_PERIOD()", "3addedd3": "getCostForAttack(uint8)", +"3ade0006": "endTesting()", +"3adeedf2": "setdTradeProxy(address)", "3adf7280": "getTotalHashRate()", "3adf96d7": "_createProxy(address)", +"3adff160": "DidLCClose(bytes32,uint256,uint256,uint256,uint256,uint256)", "3ae01f84": "USDOracle()", "3ae033a0": "payBounties(address[],uint256[])", "3ae0e63f": "BtradeWhiteList()", +"3ae0e72f": "claimOtherFund()", "3ae15692": "EEFcoin(address)", "3ae1786f": "returnTokens(uint256)", "3ae192bd": "changeFactorySubscriptionFee(uint256)", +"3ae1c76e": "setmktcapOracle(address)", "3ae2119b": "selfKill()", "3ae24412": "addAddWhitelist(address)", "3ae25075": "_getBonusAmount(uint256,uint256)", "3ae26afa": "getRate(bytes32,bytes)", "3ae34403": "stage1Bonus()", +"3ae39497": "unaccountBonds(uint256[])", +"3ae41a67": "setHydrazPerBlock(uint256)", +"3ae434ba": "usedPasswordHashes(bytes32)", "3ae46aed": "UruguayvsPortugal()", "3ae49204": "setWaracoinPerEther(uint256)", "3ae4b008": "createBounty(string,address[],uint256)", +"3ae4ce0a": "publicCreateOrder(uint8,uint256,uint256,address,uint256,bytes32,bytes32,bytes32)", +"3ae4e050": "kyberToUniSwapArb(address)", +"3ae4f003": "dyn(uint256)", +"3ae50b73": "deposit(address,uint96)", "3ae50ce7": "createPresaleUnicorns(uint256,address)", +"3ae5f980": "ReleaseDateExtended(address,uint256)", +"3ae64e0c": "tokenShares(uint256)", "3ae69708": "cryptaurBackend()", +"3ae6e66a": "dailyNumberEndPrev()", +"3ae73259": "totalStakedTokens()", +"3ae79b34": "deflctDevAddr()", "3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", "3ae7f938": "hash(uint256,uint256,uint256,uint256)", "3ae83bd4": "transferFreeze()", +"3ae84a82": "setPrice(uint128)", +"3ae8c6d0": "configPercenRanking(uint256[])", "3ae9133d": "coupon(uint256,uint16,uint8,bytes32,bytes32)", +"3ae91f6e": "testsm(address)", "3ae983a8": "OriginalMyAccessControl()", "3ae9b510": "getLatestMajorTree(bytes32)", "3ae9de9b": "StatusSecurity()", +"3aea64d3": "aoperate()", +"3aea7068": "updateDivPercentage(uint256)", +"3aeab1a1": "_maxTokenWad()", "3aeac4e1": "withdrawToken(address,address)", "3aeaccf5": "Address()", "3aeb512c": "updateTranscoderWithFees(address,uint256,uint256)", "3aeb6c71": "vestingPercent()", "3aeb850a": "DaysTillUnlock()", +"3aebabe6": "firesIllegalUtf8StringEvent()", +"3aebc0d8": "readBytecode2()", "3aebe2a3": "GluuTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,address,address,address)", +"3aebe5f3": "getScore(bytes32,bytes32,uint256,uint256,uint256)", +"3aec3108": "start_maddness()", "3aec4439": "NSCBurnToken()", "3aec5458": "callEmitter(uint256)", "3aecca37": "newManuscript(bytes32,string,address[])", "3aecd0e3": "getTokenBalance(address)", +"3aed58a1": "balanceOfm3CRVinWant()", +"3aedc42e": "getWithdrawnBefore(uint256,address)", "3aedded5": "PUBLIC_SALES_3_RATE()", +"3aedef14": "changeBlockLimit(uint32)", +"3aedf3c9": "addAssociatedAddress(address,address,uint8,bytes32,bytes32,uint256)", "3aedf90a": "wei_raised()", "3aedfb8b": "withdrawl()", "3aee0254": "addWinner(uint256)", +"3aee2f7c": "getClaimFromNewStart(uint256,address)", +"3aee5ec8": "activeGoals(uint256)", "3aee69bb": "changeTeamAddress(address)", +"3aee7d56": "pendingVege(uint256,address)", +"3aeef3d3": "getChainlinkPrice()", "3aef157b": "wingsTokensReward()", "3aef3900": "proposalContract()", +"3aef4d0b": "currentFundingRate()", "3aefaa75": "computeHash(string)", "3aefaeb8": "setTransferRate(uint256)", "3af05903": "deleteApprovedWalletAddress(address)", +"3af07256": "getClassKey(bytes32)", "3af0dbc1": "contributionsOf(address)", +"3af1b741": "setZeroRate(bool)", "3af1e17e": "createCelebrity(string,address,address,uint256,uint256,bool,uint256[])", +"3af1e1df": "REIGAI01()", "3af242fd": "_createTrainer(string,uint16,address)", +"3af2888b": "getVolatility()", "3af2b770": "BOBOTOKEN3()", +"3af2c012": "transferFromWithReferenceAndFee(address,uint256,address[],bytes,uint256,address,uint256,uint256)", "3af32abf": "isWhitelisted(address)", "3af34254": "LogChangeAccountAddressForSponseeAddress(address)", "3af39c21": "undefined()", @@ -33734,82 +61702,145 @@ "3af74940": "setRemainingTokenHolder(address)", "3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", "3af76638": "deployAndSetANT(address)", +"3af7c521": "setStartTimeTLP1(uint256)", "3af7d71c": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"3af7e591": "approve_19(address,uint256)", +"3af7f326": "AirDrop(uint256,uint256)", "3af826a4": "auctionCancel(uint256)", "3af8286f": "ContractFPC()", "3af8470d": "Rate6()", +"3af85d9e": "lastLT_TXtime(address)", +"3af867e3": "customerEnergyQty(address)", "3af88261": "deleteTokens(address,uint256)", +"3af89d03": "directWithdrawal(address,uint256)", +"3af8b5c7": "importMappingsFromPreviousFactory(uint256,uint256,address)", +"3af8cd2c": "CacheHit(address,bytes32,uint256,uint256)", "3af8e4ab": "backupOwner()", +"3af8e5eb": "shareDecimals()", +"3af90474": "acceptClaim(bytes32)", "3af90f35": "requiresAuction(bytes32)", "3af91491": "convertMinimalToSignal(uint256)", "3af923ff": "CreateRCN(address,uint256)", "3af946d2": "testnetWithdrawn(address,uint256)", "3af94817": "getPongvalRemote()", +"3af973b1": "chain_id()", "3af9e169": "setStartIcoMainICO(uint256)", "3af9e669": "balanceOfUnderlying(address)", "3af9f8ac": "ArrowCOin()", +"3afa41f4": "voteForProposal(address,uint256,address)", +"3afa443c": "punishForUnreveal()", "3afa476c": "unstash(uint256)", "3afa895f": "deleteSecondaryAddress(address,address)", +"3afada39": "RemoveFromBlacklist(address)", +"3afafd52": "minBetUSDT()", "3afb01d4": "testGetProgress()", +"3afb1540": "beginterritories()", "3afbf039": "pastTenMinutes()", "3afc7282": "getVoting(uint256)", +"3afc7571": "viewWrappedUNIv2()", "3afd4b5e": "coef()", +"3afd51cd": "offerWithdrawZero(uint256)", "3afd716f": "setVIPLibraryAddress(address)", "3afdbd83": "Activate(bytes32,string,string)", "3afdce53": "newCrowdSale(string,string,string,uint256)", "3afe3a8a": "GetEntityDelegatedRevoker(bytes32,uint8)", +"3afeddb8": "updateRoundAnswer(uint32)", +"3afee4c8": "usdToEther(uint256)", +"3aff0397": "test_addToRewardPool_zero()", +"3aff9ef6": "AAVE_SAVER_PROXY()", "3b0007eb": "MinterChanged(address,address)", +"3b007512": "ICDClaims(address)", "3b0107fc": "calculatePerformanceBonus(uint256)", "3b011b30": "getSeedForTokenId(uint256)", "3b016d83": "getAllBonus(uint256,uint256)", "3b01788a": "throwIfSetPresaleTokensAfterActivation()", +"3b01cf3c": "findBoundingOrders(uint8,uint256,bytes32,bytes32,bytes32,bytes32)", +"3b025fbe": "shardAdditionProposal()", "3b0363fa": "summFutureInvest()", "3b039176": "CreateEvidence(bytes32,string)", +"3b03eb8b": "HasVoted(uint256,address)", "3b040fb8": "failedKycCount()", "3b048123": "onlyInEmergency()", "3b048284": "totalCoinCap()", +"3b04f099": "pendingDoom(address)", "3b0506f7": "getVoteByAddress(address,uint256)", +"3b050e7e": "_getDraftConfig(uint64)", +"3b058aa7": "releaseDots(address,address,bytes32,uint256)", "3b05a861": "setEthDepositAddress(address,address)", +"3b05b72f": "getInfo1()", "3b05c869": "StoreTest()", "3b066dd7": "BunkToken()", "3b06903e": "reassignModerator(address)", "3b06a6fc": "toggleAuthorization(address,bytes32)", "3b0732a4": "interaddtoken(address,uint256,uint256)", +"3b073c61": "createTrust(string,string,string)", "3b078de3": "changeIsPayableEnabledForAll()", "3b079e10": "manualTransferToken()", +"3b07d04c": "_maxClassLong()", "3b0819b8": "create(uint256,uint256,address,address,uint256,uint256,address,uint256,bool)", +"3b08502b": "OAS_oraclizeRandomGwei()", "3b08d35e": "setAuditReportBlockNumber(uint256,uint256)", +"3b09280a": "remainingIssuablePynths(address)", +"3b094b7d": "updateStakingProfitsTillEpoch(address,uint256)", "3b098c8c": "assertEq13(bytes13,bytes13,bytes32)", +"3b09bf9c": "rolloverAccount(address,address,uint48)", +"3b0a08a0": "calcAmountToLiquidate(address,uint256)", +"3b0a7292": "solve(bytes32[6],uint256)", "3b0a895d": "setUsdEthRate(uint256)", "3b0a9555": "_callReturn(address,bytes,uint256)", "3b0ad68a": "InitializedToken(address)", "3b0b037a": "getPriceChange(uint256)", +"3b0b9c98": "getUnsignedInteger()", +"3b0bf066": "balanceOfByGen0(address,uint256)", "3b0c197e": "getBook()", +"3b0c64f7": "setRedeemLockTxLimit(uint256)", +"3b0cb86a": "reBalance(uint256,uint256,uint256)", +"3b0cbb65": "approve_660(address,uint256)", +"3b0cded8": "setWearableTypeMintCap(uint32,uint256)", "3b0d2764": "SNT(address)", "3b0da260": "revokeVesting(address)", "3b0da3b8": "updatePolicy2(bytes32,string,uint256,uint32,string)", +"3b0dd0de": "removeERC20Address(uint256)", +"3b0e0133": "blackListAddress(address)", +"3b0e07e4": "setParams2(bytes32,bytes32,uint256)", +"3b0ea442": "pcsFactory()", "3b0f0f2f": "getReferral(address)", "3b0f343b": "getDividendAmount(address,address)", "3b0f3ed3": "attend(uint32,string)", +"3b0febba": "selfBuyOf(address)", "3b1019ef": "getAdvisersConsultantsTokens()", "3b102248": "withdrawFromBalance(address,uint256)", "3b107682": "DualIndex()", +"3b10acdf": "createSale(string,address[],uint256[],uint96,address,uint128,address,uint128,string)", +"3b10dd74": "getCurrentInvestDay(uint256)", +"3b10f499": "isIntraWhitelistTransfer(address,address)", "3b111bf3": "EtherTwitter()", "3b116370": "GalacticX(uint256,string,string)", +"3b1175eb": "isLegitMiner(address)", "3b11b577": "CampaignOpen(uint256)", +"3b12321b": "calculateSetToSellForRebalanceSetToEth()", +"3b124fe7": "_taxFee()", +"3b1299df": "landlordCancelLease(string,uint256)", "3b130649": "div256_128By256(uint256,uint256,uint256)", "3b13873c": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", +"3b139e65": "amountDropNeeded()", "3b13f8a6": "setDealerCut(uint8)", "3b143184": "Congress(uint256,uint256,int256,address)", "3b143b51": "untrustedProposals(uint256)", "3b14ab12": "GetAquiredAssetBalance()", +"3b154b73": "upgradeNoticePeriodStarted()", +"3b1590cb": "registerTrustedSigner(address,bool)", "3b15a398": "rewardContributor(address,uint256)", "3b161361": "VoidAccount(address,address,uint256)", +"3b162be4": "getMakerOrders(address,address)", "3b1663be": "changeAdvisor(address)", +"3b16a6a3": "functionThatReturnsTuple(uint256,uint256)", "3b16c27a": "ta()", "3b16f5f6": "releaseMultiWithStage(address[])", "3b172a32": "bancorToken()", "3b172fb9": "AuctusToken()", +"3b1796e3": "extractEarnings()", +"3b17eadc": "withdrawAllBalance()", "3b17ebb1": "adminAddWinner()", "3b186bfc": "logFeeWindowRedeemed(address,address,uint256,uint256)", "3b192105": "_getLastDate()", @@ -33817,53 +61848,113 @@ "3b19c868": "BookingUpdate(address,uint256,uint8,uint256)", "3b19d67a": "dateICO()", "3b19e84a": "getTreasury()", +"3b1a2533": "getTradeIds()", +"3b1a3371": "removeFromLending(address,uint256)", "3b1a4170": "cmulpow2(uint256)", "3b1a520d": "testSimpleBurning()", +"3b1a7fd3": "NetStakesChange(uint256)", "3b1b69f9": "Upgradable(string)", "3b1b8ca0": "trustedClients(address)", +"3b1b9cdb": "approveCollateralPool(address,address,uint256)", "3b1bebd1": "referee()", +"3b1c54fa": "setMessengerProxy(address)", +"3b1c5fc6": "disputeItemCache(address,uint256)", +"3b1ca3b5": "setCode(address)", "3b1cbad8": "getArraySize()", "3b1cda49": "GetBaseN(uint256)", +"3b1d0f57": "setPrivateRgtAllocation(address,uint256)", "3b1d21a2": "getCash()", +"3b1d8c84": "sortCountAthletes()", "3b1e2542": "updateToken(uint256,address,uint8)", +"3b1e4f2e": "good(address,bytes)", +"3b1eb772": "AlpacaCore_Address()", "3b1ecef0": "private_getGameState()", "3b1ede9a": "LOOMIA2_ADDR()", "3b1ef91c": "NeyrosNetwork()", +"3b1f18dd": "collateral(uint256)", +"3b1f6a01": "bridgeBalance()", +"3b1f927f": "removeLockUntil(address)", +"3b1fa43c": "CONTRACT_LP_WOOD_ERC20_TOKEN()", +"3b1fe1fa": "hopeNonTradable()", "3b1fe51b": "changeTimestamp(address,uint256,uint256)", +"3b1ffca3": "ApprovedBlacklistedAddressSpender(address,address,uint256)", +"3b20884a": "tuneParameters(uint256,uint256,uint256,uint256,uint256)", "3b20c3f3": "rocketLaunch(uint256)", +"3b211757": "removeAddressFP(address)", +"3b214a74": "proposalQueue(uint256)", "3b215823": "taxFeeBps()", "3b22263c": "move(uint16,uint8,uint8)", +"3b223aa6": "lastMove(address)", "3b2269cf": "systemAcc()", +"3b228b3e": "poolLiquidity()", +"3b22b53e": "setInitialize()", "3b22c8e3": "resolveGameByHand(uint32,uint32)", +"3b22f35f": "gStorage(bytes32)", +"3b22fc03": "lpSupply()", +"3b230bc9": "getReserveAuctionConfig()", +"3b23805b": "setpercentForBurn(uint256)", +"3b239a7f": "updateCountry(address,uint16)", "3b23a5ca": "switchStatus(bool)", +"3b23c36d": "proposalDetails(address)", +"3b23d9bb": "weddingTime()", "3b242439": "ratioDenominator()", +"3b249637": "multisendErcRBX(address[])", +"3b249810": "reviewPeriod()", "3b24b547": "getTransactionData(uint256)", +"3b24d896": "updateAMO(address)", +"3b252e15": "tokenSell(address,address)", "3b25a6b9": "processDeposits(address,uint256)", "3b25cf37": "PintOd()", +"3b25f6a0": "getIpfsHash(uint256,string)", +"3b260893": "flashSupply(address)", +"3b2638bf": "GetMemberByTeamId(uint256)", "3b265d35": "MatchingEngine()", +"3b266cb5": "requsestId()", +"3b26cf5c": "withdrawCapital(uint256,bool,uint256)", "3b270710": "ico1stPrice()", "3b278f2a": "icoPaused()", "3b2812ad": "newWindow(uint8,uint256)", "3b283ff9": "TransferAllowanceFor(address,bool)", "3b29c470": "calcTokensAvailableToBuyback()", "3b29fe55": "isSecondLockTimeEnd()", +"3b2a5ce0": "log(bool,bool,bool,bool)", "3b2aa8cd": "getWeaponEntity(uint256)", +"3b2ae941": "_lpRewardFee()", "3b2b7fec": "setCompte_21(string)", "3b2b8ce9": "setAirdropped(address)", +"3b2bcbf1": "COORDINATOR()", +"3b2d081c": "buybackFee()", "3b2dbb7f": "token2Player(address,uint256)", +"3b2dff39": "LogTokenRegistered(uint32,address,uint8)", "3b2e5f94": "getDepositValue(address)", +"3b2ed539": "TRDbalancesPending(address)", +"3b2eff34": "transferFromGaslessRequest(address,address,uint256,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "3b2f3d4d": "BitCoin(address,uint256,uint256,uint256,address,address)", "3b2fd34d": "backProjectXOwner()", "3b2fe781": "sendEth(address[])", "3b304147": "draw(uint256)", "3b305964": "accBonusTokens()", +"3b308579": "liquidityLoanCurrent()", "3b30ba59": "ZRX_TOKEN_CONTRACT()", +"3b30ef1c": "ignoreRequestIds(bytes32)", +"3b312643": "binaryLiftR(int256)", +"3b317dab": "stakeBalances(address)", "3b31cbad": "ContractFunded(address,uint256,uint256)", +"3b320994": "current_time()", +"3b3221b1": "simpleKyberProxy()", +"3b3264c0": "publicSaleIssue(address)", +"3b32a10b": "adjustWeights(uint8,uint256,uint256)", +"3b32a268": "addTradingProxy(address)", "3b33175b": "setWhitelistIn(address,bool)", +"3b331cf9": "burn(uint96)", "3b338da0": "getActionsCount(bytes)", +"3b33b61a": "getAllContractAddresses()", +"3b33c702": "seats(uint256)", "3b33fe73": "setAuctionPrice(uint256)", "3b340ceb": "DWEToken()", +"3b342e8e": "Contents(uint256)", "3b343a13": "getNodeAddress(bytes)", +"3b3443e5": "COLLECTIBLES()", "3b3493d3": "lost()", "3b355af6": "baseData()", "3b3561ea": "PresaleCapUpdated(uint256)", @@ -33873,37 +61964,61 @@ "3b35cde5": "Genesis(address)", "3b360c7f": "getInvestorsAndTheirBalances()", "3b3672bd": "getAddressLength()", +"3b3680d4": "approve_516(address,uint256)", "3b37044d": "WWWToken(uint256,string,string)", +"3b37374c": "getWinnersList()", "3b3783e7": "ETHLotteryManager()", +"3b37f793": "updateDefaultErc721ApprovedUser(address)", +"3b385af7": "setbuyPrice(uint128,uint128,uint128,uint128)", +"3b38bf72": "changeReferrer(address,address)", "3b38e7d1": "totalSupplyByAsset(bytes32,int256)", "3b393b03": "Zorro02Token()", "3b39becd": "isMainSaleRunning()", +"3b39de70": "emitFarmUri(string)", "3b3a1a7a": "tokenIdPointer()", +"3b3a38dd": "getSecondsLeftToClaimLP()", +"3b3a4a5e": "distributeBountyTokens()", "3b3ae670": "getBaseRandom()", "3b3b57de": "addr(bytes32)", +"3b3beb4e": "setMinDurationTime(uint256)", +"3b3bff0f": "unpauseToken(address)", "3b3c0717": "switchRecycleAllowed(bool)", "3b3c594b": "updateOldToken(address)", "3b3c5aed": "addSpecialRateConditions(address,uint256)", +"3b3d1210": "depositAllFor(address,address,uint256[],uint256)", "3b3d5b88": "completeUnlock(bytes32,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"3b3d7e56": "viewTask(uint256)", "3b3d9485": "calcRandomNumber()", "3b3dca76": "rand()", +"3b3de031": "setPoolType(address,uint8)", "3b3df3d5": "tradeIn(address,uint256)", +"3b3e12f4": "topicsRegistry()", "3b3e672f": "transferBatch(address[],uint256[])", "3b3fa917": "setStartTimePreIco(uint256)", "3b3fb38b": "rebuySum(address)", +"3b3fb414": "AssetProxyDispatchErrorSelector()", +"3b400dec": "batchTransfer(address[],address[],uint256[],uint256[],bytes[],address[])", "3b404266": "getDeployAt(uint32,uint32)", "3b4159da": "voteProposal(address,address,uint256,string,bytes)", +"3b417a82": "tre()", "3b41b5f2": "setTotalProjectEscrow(uint256)", "3b421f9e": "greeter(bytes32)", "3b424f09": "setPermission(address,bytes32,bool)", "3b427b20": "changeWhitelistCornerstoneStatus(address,bool)", "3b428c9b": "tokenForWei(uint256)", "3b42dfad": "saleWeiLimitWithoutKYC()", +"3b42f5e8": "settleLiquidations(address)", +"3b430d41": "paymentrequest(uint256)", +"3b431d5d": "settleERC20(address)", "3b434169": "setUsdPerHundredEth(uint256)", "3b43fa0a": "DSAuth()", "3b441344": "setOtherRich3D(address)", "3b442edf": "deathData_a14()", "3b44383f": "TokenERC20(uint256,string,string,uint8)", +"3b443e3b": "kncPerEthBaseRatePrecision()", +"3b44a0fe": "STAGE_3_BONUS_RT()", +"3b44b73e": "paybackTo(uint256)", +"3b45ac41": "globalReward()", "3b45afed": "internalTransferFrom(address,address,uint256,uint256)", "3b462d5b": "bounty(address[],uint256[])", "3b46321f": "setMultisendLimit(uint256)", @@ -33915,40 +62030,76 @@ "3b470582": "getOverall()", "3b4719d0": "getJockey(uint256)", "3b47513b": "onlyWhitelisted(bytes,address,uint256,uint256,uint256)", +"3b4755f3": "gALoc(address)", "3b478fc5": "ethUsdRate()", +"3b479208": "setMaxLiquidationSlippagePercent(uint256)", "3b4793fc": "sendGift(address,uint256,string)", +"3b47a9ac": "getSubscriptions()", "3b47d37a": "RealTimeRayTracing()", "3b47dab6": "setSaleMinter(address,uint256)", +"3b4803a6": "getCommon()", +"3b486a25": "ratePerSec()", +"3b48c00b": "exp_one(uint256)", "3b4920b8": "batchMintPresaleTokens(address[],uint256[])", "3b495d6b": "Petcoin()", "3b496f53": "IssueAccepted(uint256)", +"3b499ae9": "extractLiquidity(uint256)", "3b49a77b": "hasConfirmed(bytes,address)", +"3b49b84f": "generateFlipToken()", "3b49c216": "_createSchedule(address,uint256,uint256,uint256,uint256,uint256)", "3b49f84b": "TokenD(uint256,string,uint8,string)", "3b4a00b4": "unPauseBuy()", "3b4a20f2": "getExternalFundsRaised(string)", "3b4a40cc": "ManagerAdded(address)", +"3b4ad9f9": "removeUnitByCode(uint32)", +"3b4b4d8d": "stakingRewardPool()", "3b4b7808": "returnEthReceived()", +"3b4b79c2": "HJL()", +"3b4bbd85": "AddLiquidityPoolAmountOut(address,uint256,uint256)", +"3b4bc978": "Order(address[8],uint256[6],uint256,address)", +"3b4bd8df": "shr_zero(uint256)", "3b4c4b25": "setSupply(uint256)", "3b4cb5e5": "GoldFees()", "3b4cc7a3": "totalCompanies()", +"3b4d01a7": "getProposalDetails(uint256)", +"3b4d2d39": "setFactoryGovernanceAddress(address)", "3b4d75d8": "withdrawRemainPrivateCoin(uint256)", +"3b4d8a7d": "withdrawFunds(bool,uint256)", "3b4d900a": "NANO()", +"3b4da69f": "join(address,uint256)", "3b4dbf8b": "setSecret(uint256)", "3b4e06e6": "getTokenAmounts(uint256)", +"3b4e71ad": "feePercentX100()", "3b4e8dbf": "tokenDev()", +"3b4f3db0": "MarketParticipantsDisavowed(address,address)", "3b4fb68f": "LXKToken()", +"3b4fd14e": "setMaxBetTimes(uint256)", +"3b4febf9": "requiesterInd()", +"3b502754": "register_game_asset(string,uint256)", +"3b508f23": "getEtherFromToken(uint256)", +"3b5134ca": "GrantVoter(address)", "3b52147f": "LogFundsCommitted(address,address,uint256,uint256,uint256,address)", "3b5251b7": "getPlayerVoteRewards(address,uint256)", +"3b52de3b": "hasRebalanceFailed(address)", "3b52f2be": "winnersLength()", +"3b530528": "setTransferRules(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "3b53f274": "LogInt(string,uint256)", "3b540814": "transferFundWallet(address)", "3b545d2f": "etherToSendCharity()", +"3b5511cf": "GiveETH(address,uint256)", +"3b551961": "_setTest2(string)", +"3b552052": "Change_Owner2(string,address)", "3b5535b9": "getLastWeekStake(address)", "3b55d26f": "workDone(address)", "3b561709": "initTransferArr(address[],uint256[],uint256[])", +"3b561afc": "getAccountInfo(uint256)", "3b563137": "transferBeer(address,uint256)", +"3b565563": "currentRoadmapUsedSupply()", +"3b56621f": "auctionEndTimestamp()", +"3b56711b": "blacklistExchange(string)", +"3b56cd01": "replaceCreditProfileAtIndex(uint32,uint32,string,uint8,address,uint256,uint256,uint256)", "3b574beb": "minTokensToBuy()", +"3b5778cf": "_getAmountsForExchangeMinusFees(uint256,bytes32,bytes32)", "3b57aa90": "setHash(address,uint16,bytes32)", "3b57fdff": "emitMint(address,uint256)", "3b58524d": "setAddress(address,address)", @@ -33958,19 +62109,35 @@ "3b594cd0": "_delegateAssetOwnerRemoved(bytes32,address)", "3b599b18": "ChainclubToken()", "3b59cb24": "bulkApproveMints(uint256[])", +"3b59f694": "setCopyright(string,string,string)", +"3b5a2a3b": "HALF_TIME_ATK_BOSS()", "3b5a3357": "transferForFinanceTeam(address,uint256)", "3b5a938a": "kick(uint32)", "3b5adcef": "reservedFundsCharging(address)", "3b5ae589": "Bitcash()", +"3b5aff12": "getListAddress()", +"3b5b1064": "RoadSold(uint256,uint256,uint8,address,address,uint256)", "3b5b64f4": "conversionsCount()", +"3b5baced": "approve_t(address)", "3b5c020d": "BOT_ELEMENT_4()", +"3b5c7966": "announceAt()", +"3b5c9271": "saveValueAndTransfer(uint256)", +"3b5d441e": "lastRewardTime(address)", "3b5dd70b": "bigBonusPercent()", "3b5e295c": "maxmoneypercent()", "3b5e5376": "baseComparable()", +"3b5f096c": "setPeakHourTaxes(uint256[],bool)", "3b5f24eb": "percentile(uint256)", "3b5f30db": "EKKChain()", "3b5fdb83": "buyP3D()", +"3b60b659": "changeQuantity(uint256,uint256)", +"3b60e86a": "getissue(address)", +"3b612044": "AddressAuthorized(address,uint32)", +"3b612e8c": "validityBondTotal()", +"3b613bef": "setReferee(address,uint256)", +"3b614dd8": "LPperDFGRFIUnit()", "3b615624": "getEndorsements(bytes32)", +"3b616752": "getLinkedNft(uint256)", "3b61db4c": "stopIco(address)", "3b61f5f5": "ChangeAuctionMaster(address)", "3b623c19": "StripperToken()", @@ -33978,24 +62145,48 @@ "3b626b83": "getWidthrawStatFor(string)", "3b630493": "DAPPToken()", "3b632a74": "getInterMixed()", +"3b63ff44": "totalFrozenShares()", +"3b643b1c": "getPointsForStake(uint8,uint256)", +"3b6479b0": "napV2contract()", "3b64e77e": "enableCrowdsaleRefund()", +"3b650d29": "setClaims(address[],uint256[])", "3b653755": "seedMarket(uint256)", +"3b65afa9": "stake_balance(address)", +"3b65dc91": "checkDevPool()", +"3b6615cb": "changeDistributionWeekday(int256)", "3b663195": "init(bytes32)", "3b664dc7": "addRoleForUser(address,string)", "3b666e48": "getCurHash()", "3b668059": "ContractBalance()", "3b66c415": "EmergencyWithdrawalFailed(address)", "3b66d02b": "tokenFallback(address,uint256)", +"3b66f3a3": "trustSwapAddress()", +"3b67b067": "UnfreezeFreeMint()", "3b68f8aa": "deleteDonator(address)", +"3b690488": "activeLUCAXPlan500(address)", +"3b692f52": "getProtocolNames()", +"3b698197": "unpauseWithdrawal()", "3b69eed4": "updatePlanetName(uint256,uint256,uint256,string)", +"3b6a6849": "addRAMRewardsOwner(uint256)", +"3b6afe40": "getSynths(bytes32[])", +"3b6b1961": "_setBurnFee(uint256)", "3b6b639c": "luckyStoneEarning()", "3b6b9a5e": "fuckingkill()", +"3b6baf2e": "getTokenPriceIndex(uint256,address)", "3b6c35c3": "MubsToken()", +"3b6c4fa8": "upgrade_running()", "3b6c6c72": "SALE_MIN_CAP()", +"3b6c7af3": "burnAllOfCrowdSale()", "3b6cbaeb": "OverseasReturneesToken()", +"3b6cc28f": "updateClientEndorsementStatus(uint256,address,bool)", "3b6ccee7": "switchMinting()", "3b6d05c7": "mdtTeamAddress()", "3b6d2544": "Found(uint8)", +"3b6d2b93": "TWELVE_MONTHS_DURATION()", +"3b6d8ebe": "mappingTokenMappeds(address,uint256)", +"3b6da765": "transferSnowflakeBalance(uint256,uint256)", +"3b6daf06": "deliverInrate(bytes32,uint256)", +"3b6dc6b4": "signatureAddress()", "3b6dde13": "getRandomNumber(address)", "3b6e2970": "ContractStakeToken(address)", "3b6e31bb": "isAllowedToUpdateProxy(address)", @@ -34005,69 +62196,127 @@ "3b6ed0a7": "processSteps(uint256,uint256)", "3b6ed992": "STBToken()", "3b6eeb23": "HighestBidChanged(address,uint256)", +"3b6f387f": "marketSellOrdersFillOrKill(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes,uint256,bytes[])", +"3b6f9ef9": "validatorFelony(address,uint256)", +"3b6fa127": "getDepositFeeRate(address,uint256)", +"3b6fbc07": "numberDifferentBunnies()", +"3b701bba": "totalBonusPot()", "3b704588": "BCT()", "3b709e8d": "WeiN()", "3b70b171": "saveBlock(string)", "3b70cf44": "firstRoundCosmosEnd()", "3b7104f2": "checkStatus()", +"3b714199": "stopMining(uint256)", "3b7169fb": "setopVaultAddr(address)", +"3b718dc1": "Roll(address,uint256)", +"3b71be59": "interestData()", +"3b721f61": "setRoundAndYield()", +"3b727d18": "fstAddress()", "3b72a1b6": "approveDeliverable(bytes32)", +"3b730cfd": "revoke_request(bytes32)", +"3b73d67f": "getRequiredSignatures(address,bytes)", "3b7404bc": "createDepositProxy(address)", "3b746963": "minLimitPrivateSale()", +"3b749f6b": "hasStream(uint256)", +"3b74cb3a": "getSmartContractAddress()", "3b750f86": "DDJDTCoin()", "3b751f7f": "claimThroneRP(string)", +"3b75a497": "TEST_addProfit(address)", +"3b760c22": "regUser(uint32)", "3b7616ff": "fwdToResolver(bytes)", "3b76594d": "depositFunds(uint256)", "3b768433": "getByReferenceCode(bytes32)", +"3b76da43": "isAstrodrop(address,address)", "3b77227c": "_addIndex(address)", +"3b7760e2": "userVoteTracker(address)", "3b7773cd": "WanchainContribution(address,uint256)", +"3b77d606": "queryTokens(bytes32,uint256,bool[8],bool,address)", "3b784e9e": "SafeOwnable()", +"3b788e11": "getRangeRandomWithInviter(uint256,uint256,address)", "3b789750": "transferAllFunds(address)", "3b7a3b7f": "thisVotersName()", "3b7a8ff5": "addInvestors(address[],uint256[],bool[])", +"3b7aa036": "getAuctionByPage(address,uint256,uint256)", +"3b7b0045": "adjustedValue()", +"3b7b5a16": "addAllowanceIfNeeded(address,address,uint256)", +"3b7b6188": "stakeTokens(uint256,uint256)", "3b7b9d83": "marketToken2021()", +"3b7ba25f": "supplyErc20ToCompound(address,address,uint256)", +"3b7bed81": "_xTransfersAllowed()", "3b7bfda0": "boolStorage(bytes32)", "3b7cbfcf": "depositPercents()", +"3b7cc88a": "setKoCommission(uint256)", +"3b7cd520": "SCALE_SCALE()", "3b7d0946": "removePool(address)", "3b7da659": "changeLocalCryptoContract(address,string)", "3b7dc55e": "onMintCalled()", +"3b7dd6ed": "_initPendingAccount(address)", +"3b7e6d4a": "_tOwned(address)", +"3b7e891c": "durationVesting()", "3b7e9825": "appendArray(uint8[],uint8)", +"3b7eb3a3": "_buySplitFee()", +"3b7f6f6c": "birdBorrowState(address)", "3b7f7cfa": "getValidity()", "3b7f9649": "localsTruth(address,uint256)", +"3b7fdcff": "epochMdoPerBlock(uint256)", +"3b7fdf09": "getContractsWhiteList()", "3b7ff404": "getVotersPartyVote()", +"3b8074b9": "getVoterslist()", +"3b807c47": "setApproval_Mint_False(address)", "3b809273": "unlockedReserveAndTeamFunds()", "3b80938e": "setDeposit(address)", +"3b80a793": "const()", "3b80fac0": "updateVisa(address,uint256,uint256,bytes32,uint256,uint256,uint256,uint256)", "3b80fc5f": "elc()", +"3b8157ef": "delBurnlist(address)", +"3b818f97": "transferUNIAPPOwnership(address)", "3b81a5a4": "assertEq23(bytes23,bytes23,bytes32)", "3b81b785": "showVotes(address)", "3b81caf7": "TransferAdminPending(address)", "3b825302": "deleteTokenGrant(address)", "3b82fe0e": "sellItem(string,string,uint256,string)", +"3b841a6f": "changeWinRatio(uint8)", "3b84333e": "FaucetToken()", +"3b845232": "removeAppOwners(uint32,address[])", +"3b846697": "_putContractStorage(address,bytes32,bytes32)", +"3b84a304": "getOperationsAreInvalid(bytes32[])", "3b84bec7": "setTIME_TO_MAKE_TOMATOES(uint256)", "3b84edbd": "setRNG(address)", "3b85746f": "existsCountsByName(bytes32)", "3b86758a": "window3TokenCreationCap()", "3b8678de": "setDefenceBoss(uint256)", "3b871b4a": "awards(uint256,uint256)", +"3b87361b": "TokensAllocated(address,uint256)", "3b874521": "withdrow()", +"3b878be7": "accreditationMember(address)", "3b87ec2d": "ecoSystemFund()", +"3b8805d7": "pendingWhale(uint256,address)", "3b882832": "updateIsReverted(bool)", +"3b884de6": "setBreakerTable(address,bool)", +"3b88eed5": "toggleContractOwnsTokens()", "3b8908f2": "investmentsCount()", "3b8918df": "submitMilestone(bytes32)", "3b89332e": "verify_signature(uint256[4],bytes32,uint256[2])", "3b893c2d": "icoTotalBalance()", "3b895f28": "stageTwo()", "3b89a83a": "adminRefund()", +"3b89bb86": "execute(address,uint256)", "3b89be73": "registerUser(address,string,uint256,uint256)", +"3b8a2bdf": "ParticipantUnregistered(uint256,address)", "3b8a3d5e": "setPI_edit_4(string)", +"3b8ae397": "approveStrategy(address)", "3b8b44d0": "getUnissuedBP(uint256,uint256,uint256)", "3b8b4a61": "createRefund()", +"3b8c5839": "stakeInUni(uint256,address,address)", +"3b8d60d8": "procesingQueries(bytes32)", +"3b8d674f": "stopSetup(address)", "3b8dbf6d": "operatorSendByTranche(bytes32,address,address,uint256,bytes,bytes)", "3b8e2a26": "weiCapReached()", "3b8e603c": "outputb(bytes32)", +"3b8e661d": "getBillHistory(bytes32)", "3b8e6f2e": "balanceAt(address,uint256)", +"3b8e7811": "setDestStartNonce(uint8,uint64)", +"3b8e7fb9": "getCodeContractAddressView(address)", "3b8ea9e7": "getValuePayment(address,uint256)", "3b8ecdf9": "right3(uint256)", "3b8eee6d": "checkDistance(uint256,uint256)", @@ -34077,91 +62326,170 @@ "3b90176f": "getTotalNormalTokensByAddress(address)", "3b903521": "setModel(address,uint256)", "3b9056bf": "userWithdraw(uint256)", +"3b909b8e": "_createRepository(string,string)", +"3b90a663": "ownerDisableRound(uint256)", +"3b90b9bf": "isFeeCollector(address)", +"3b90dfa8": "respond3(uint256,string,string,string)", "3b9178f7": "transferEntireStake(address)", +"3b9191d7": "createRelease(bytes32,string)", +"3b919ba8": "totalGranted()", "3b91c253": "getSkillNames(uint256,uint256)", "3b91ceef": "setMax(uint256,uint256)", "3b91ee26": "agency()", "3b92015e": "setTokenDiscountThreshold(uint256)", +"3b928b7b": "cows(uint256)", +"3b929300": "getTotalOwed(uint256)", "3b92d384": "barrierStrength()", +"3b92da72": "closeAction(uint256)", "3b92f3df": "payment(address)", "3b930294": "voteTokenBalance(address)", "3b932584": "buyTokens(address,string,string)", +"3b9335b1": "remainingToshiCoinForSale()", "3b9341f4": "setTransactionFeeRefundSettings(bool,uint256,uint256)", "3b936961": "HuatUSD03()", +"3b93c166": "investor_pool()", "3b942742": "totalCoinSupply()", "3b947d2b": "removeStablecoin(address)", +"3b949661": "changeLifetime(bytes32,uint256,uint256)", "3b949785": "raiseDollarsWithdrawalCancelled(address,uint160,int160)", +"3b949824": "testBuyerAddressMustBeValid()", +"3b94a782": "calculateSetQuantity(uint256)", "3b94b012": "restartMinting(string)", +"3b9559e5": "userRewardDetailsFromReward(uint256,uint256,uint256,uint256,uint256)", "3b957b67": "getSumAmountOfDisputedStepsProDoctor()", +"3b95a23f": "regUser()", +"3b95d02d": "changeRedeemLimitPerDay(uint256)", "3b95f23e": "deactivatePackage(uint256)", +"3b962ba1": "holyPool()", "3b968963": "shortAirdropTime()", "3b971f9f": "_tokenPrice()", "3b97e856": "tokenDecimals()", +"3b980073": "equipements(uint256)", "3b9855ea": "experienceToLevel(uint256)", "3b9901cc": "getChannelsByRanks(address,uint256,uint256)", +"3b991724": "flashLoanAndLiquidate(bytes32)", +"3b9920e1": "daoSupply()", "3b9927df": "HVZSupply()", "3b996f40": "quarter(uint32,uint32,uint32,uint32)", "3b99915d": "getMarketWallet()", +"3b999693": "viewSplitTradeEthToUsdc(uint256)", +"3b9a67f4": "approve_316(address,uint256)", "3b9aa6f8": "getRare(string)", "3b9aaae4": "avt()", +"3b9ac53d": "LastDepositPoolTopInfo()", +"3b9b10fa": "_nextBorrowInterestRate(uint256,bool)", "3b9bbb2f": "withdrawTotalBalanceCommissionWei(address)", "3b9bd54d": "ClientsHandler()", +"3b9beb57": "takeAction(address,uint256,bytes,bytes)", "3b9c0fdc": "deleteRound(uint256)", "3b9c67e1": "Press(uint256,uint256)", "3b9c7ac2": "claimLockedTokens()", "3b9ca2d0": "migrate(address,uint256,address)", +"3b9d0a05": "SetTimelock(uint256,uint256)", +"3b9d1d86": "dvdPool()", +"3b9da2e9": "SimpleGamePlayed(address,address,bool,bool,uint256)", +"3b9dce05": "addCreator(address)", "3b9e1497": "updateVirus(address)", "3b9e9c91": "testSettle()", +"3b9ea76e": "withdrawMXX(uint256)", +"3b9eac4b": "num1()", "3b9ed710": "caculateFill(uint256,uint256,uint256,uint256)", "3b9f7d6b": "m_unclaimedHolderIdx()", "3b9f87a5": "setNeedToReserve(uint256)", +"3b9fbf92": "middleManConfirmed()", "3b9ff58e": "Academicon(uint256,uint256)", +"3b9ff843": "removeAffiliate(address)", "3ba04463": "p_setInvestorsPercent(uint256,uint256)", +"3ba06452": "maxProfit(uint256)", "3ba0b9a9": "exchangeRate()", "3ba1356c": "earnedOf(address)", "3ba15036": "getWei()", +"3ba16aad": "adminGrantRole(bytes32,address)", +"3ba20f2a": "timeToJoin()", "3ba2a67e": "lockFund(uint256)", "3ba2aaf2": "setOwnerToken(address)", "3ba2cfc1": "createBitcoinAddressPrefixTask(bytes,uint256,uint256,int256,uint256,int256)", +"3ba2fd0a": "sendMessageToChild(address,address,bytes)", +"3ba30551": "issueRebalancingSetWrappingEther(address,uint256,bool)", "3ba308dd": "preSaleTokenBalances()", +"3ba452f5": "setElapsedTime(uint256)", +"3ba4701b": "supplyHistory(bytes32)", +"3ba4d4ca": "borrowBook(uint256,address)", +"3ba53417": "GetShareIndexDebugForTestRPCSubmissionIndex(uint256)", +"3ba5d96d": "getBullToken()", +"3ba6f8de": "groupTeamTotalRelease()", "3ba72b88": "checkAvailability(address,address)", "3ba7ecc0": "BuzFinancialStrategy()", +"3ba7f8ed": "viewAllStatsFor(address)", "3ba86465": "oraclizeQueryCost()", +"3ba86c44": "claimDeadline()", "3ba87e3e": "setMultiRequestFirstRequestId(uint256,uint256)", +"3ba88ca1": "cancel_auction()", "3ba8b0a8": "setPendingSignatureStatus(address,uint256)", +"3ba8b243": "userTop3RewardInfo(address)", "3ba8c9a7": "mintingFinish()", "3ba8f108": "SetOwner(string,address)", +"3ba91368": "TransferData(bytes)", "3ba93114": "getEtherMonsterInfo(uint256)", +"3ba93f26": "setAllowance(uint256)", +"3ba97cf1": "addValueMulti(address[],uint256[])", +"3ba9a5a2": "set(string,address,uint32)", +"3baa380d": "lor()", +"3baa4e2e": "rg()", "3baa8170": "setName(string,uint256)", +"3baa8eb8": "symbol_of_currency()", "3baad248": "delWhitelist(address,address[])", +"3baad894": "AddBudget(uint256,uint256)", +"3bab293f": "ClaimChanged(bytes32,uint256,uint256,address,bytes,bytes,string)", "3bab3088": "DOCTokenSale()", +"3bab38ee": "changeDelayBeforeRewardWithdrawnInSeconds(uint256)", "3baba4d7": "milestonesLength()", +"3baba6de": "metaFarm()", +"3babaad5": "setPoolPrivate(bool)", +"3babade2": "startChangeZSToken(address)", +"3babddcb": "lock(bytes,uint256)", "3bac2837": "SSAToken()", "3bacf5ed": "changeTokenHolder(address,address)", +"3bad5426": "removeSigner(address,uint256)", "3badca25": "batchTransfers(address[],uint256[])", "3bae15df": "deleteOwner()", "3bae795e": "ActionAuction(address)", +"3baebaeb": "frax_usdc()", "3baf35fb": "nPayments()", "3baf4e1e": "newPayment(uint256,uint256)", "3baf6e3f": "setReferral(address,address,uint256)", "3baf77aa": "increaseClaimsBalance(address,uint256)", "3bafc5c0": "removeBankroll(uint256)", +"3bb081f6": "updateRewardPerBlock2(uint256)", +"3bb0cc4e": "convertFromBobToAlice(uint256)", "3bb0cc55": "tokensReceived()", +"3bb0ed2b": "dequeueProposalsIfReady()", +"3bb1056d": "setFountainToken(address)", "3bb168a1": "isPresaleFull(uint256)", "3bb197cf": "icoPhaseAmount3()", "3bb1a882": "TradeListing(address,address,address,uint256,uint256,uint256)", +"3bb2047f": "transferMultiFrom(address,address[],uint256[])", +"3bb20ece": "stableCoinPerTokenStored()", "3bb28957": "p2_start()", -"3bb2dead": "resolveAddressLight(address)", +"3bb2dead": "initialFundsReleaseNumerator()", "3bb33d56": "checkAtkPlayerQuest(address)", +"3bb36ae1": "arbitrageSell(address,address,address,uint48,uint256)", "3bb3a24d": "getTokenURI(uint256)", "3bb4218a": "requireContractExists(uint256,bool)", +"3bb421ca": "getRewardPointsByToken(address)", "3bb4497c": "getAllProviders()", +"3bb48518": "updatePositionAmounts(uint256,uint256,uint256)", +"3bb53229": "getMeasure()", "3bb54b4c": "LOG_ContractStopped()", +"3bb54b93": "CONTRACT_DEFAULT_REFERRER()", "3bb5a02c": "unsetAllowedMultivest(address)", "3bb5d604": "ExchangeWhitelist(address,address)", +"3bb66292": "_isEmployeeActive(uint256)", "3bb66a7b": "getETHBalance(address)", "3bb735e7": "Arrholders(uint256)", +"3bb75a53": "setClaimPayment(uint256)", "3bb81b60": "total_bet_purchased()", +"3bb82023": "pendingRewardTokens(uint256,address)", "3bb8a87f": "getConsideredTokens()", "3bb8bd85": "TICDist(uint256)", "3bb8da29": "GetWorldData()", @@ -34170,180 +62498,325 @@ "3bba16da": "ifClaimedNow(address)", "3bba21dc": "swapTokenToEther(address,uint256,uint256)", "3bba340c": "dateMainEnd()", +"3bba5b5d": "powerPoke()", +"3bba6a36": "HERO()", "3bba72c3": "TzTToken()", +"3bba8eed": "COMMUNITY_FUND_POOL_ALLOCATION()", "3bbac579": "isBot(address)", "3bbacb55": "STVCOIN(uint256,string,string)", +"3bbaf5e4": "mmm()", "3bbb0025": "ownerOfRobot(uint256)", "3bbb11a1": "getImageMetadata(uint256)", "3bbb44ca": "eth_is_seeded()", +"3bbb6f23": "setAmountMax(uint256)", +"3bbbc7c9": "unAuthorize(address)", "3bbbce82": "computeCurrentPrice(uint32)", +"3bbc77d0": "changOwnerAddress(address)", "3bbca7b4": "ImpToken(string,string,uint256,uint256)", +"3bbd11ea": "baseFragmentsPrice()", +"3bbd64bc": "keepers(address)", "3bbe0b5c": "OKFCrowdsale()", "3bbed4a0": "setRecipient(address)", +"3bbef0e9": "leverage(uint256,uint256,uint256,uint256)", "3bbf41d9": "GameState()", +"3bbfd22d": "getUnlockLPAmount(bool,address)", +"3bbfe015": "onepct()", +"3bc007a8": "setPoints(address,uint256)", +"3bc00faa": "transferFroms(address[],address[],address[],uint256[])", "3bc0461a": "devFee(uint256)", "3bc058c7": "setBS(bytes32,string)", +"3bc0aee6": "submitVAA(bytes)", +"3bc1122e": "currentNativeRewardToDistribute(address,uint256,uint256,uint256,address[])", "3bc17b28": "round3TokensRemaning()", +"3bc17c10": "CreateLoanType(bytes32,uint256,uint256,uint256,uint256,bytes32)", "3bc17fc3": "CreateNewPool(address,address,uint256,uint256,uint256,bool,address[],uint256,uint256)", +"3bc199da": "setScoreVaultAddress(address)", "3bc19bba": "webGiftSentAmount()", "3bc1e0f1": "depositCoin(bytes32,uint256)", +"3bc207d0": "approve_408(address,uint256)", "3bc261bb": "balanceTokenContract()", "3bc273b0": "changeWelcome(string)", "3bc2859e": "blockOffset(uint256)", "3bc2b866": "getBla()", "3bc2bc42": "AddSubscriber(address,string,string)", "3bc325ee": "withdrawTokenToInvestor()", +"3bc36ede": "mint_(uint256)", "3bc3c7f9": "ERC20Token(string,string,uint256,uint256)", +"3bc3f5de": "lastPayDate()", +"3bc3f793": "IMPOSS04()", "3bc45598": "update_SRNT_price(uint256)", "3bc47fbe": "campaignEnded()", +"3bc4ac0a": "setEmaCalculationBlockSpan(uint256)", "3bc4be52": "ownersTokenIndex(address,uint256)", +"3bc4d185": "PayInterestEvent(address,uint256)", "3bc518ea": "getTokenBySelf()", "3bc578fe": "getClosingTimeByStage(uint256)", "3bc58532": "hodler()", "3bc5a0b7": "updateBytesSetting(uint256,bytes32,address,string,string)", "3bc5b73e": "_saleSupply()", "3bc5de30": "getData()", +"3bc5e3f3": "createBountyAndLockFunds(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "3bc5f48a": "addBook(string)", +"3bc6606f": "unpackData(bytes)", +"3bc6cf47": "every()", "3bc6db30": "settleAndClose()", "3bc70184": "getPurchase(uint256,uint256)", +"3bc71427": "setPoolMap(address,int16,bool)", +"3bc74e68": "getApproved721(address,uint256)", "3bc756d0": "NACToken(uint256,string,uint8,string)", "3bc764f7": "depositCPT(address,uint256,bytes32)", +"3bc76741": "unlockTimeDeveloptment()", +"3bc7820d": "lockWithdraw(address)", "3bc7ebac": "pinnedCode()", "3bc834fc": "usersAddress(address)", "3bc867f5": "getLockedEth()", "3bc91e28": "setCurrentRound(uint256)", "3bc983d3": "decreaseAssuranvePayments(address,uint256)", "3bca915f": "NickSterBate()", +"3bcac64e": "Votes(address,uint256,uint256)", "3bcb1edb": "_payoutDividends(address,address,uint256)", +"3bcb2e66": "sent(address,uint256)", +"3bcb7f5d": "addAddressToGovernance(address)", "3bcbb6d8": "Zarina()", +"3bcbdaa4": "tokenToTokenSwapInput(address,address,uint256,uint256,uint256)", +"3bcc45ba": "getCollateralType(address)", "3bccbbbc": "phase3TokenSold()", +"3bccbbc9": "reverts()", +"3bccf4fd": "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)", "3bcd6624": "approveTokensAndCall(address,uint256,uint256,bytes)", +"3bcda6b2": "ListAddress(address,uint256,uint256,uint256)", "3bcdbd22": "TweedentityClaimer()", "3bce14c8": "numberOfRecentPlayers()", +"3bce1d48": "allowPrivateTransactions()", +"3bce73e8": "setSwissFeePercentX100(uint256)", "3bceb170": "raisedByAddress(address)", "3bced141": "transcodeReceiptHash(string,uint256,bytes32,bytes32,bytes)", +"3bceeb90": "auctionPivotPercentage()", "3bcf7d22": "newBribedCitizen(address)", +"3bcf7ec1": "_setMintPaused(address,bool)", +"3bcfaa14": "mockFunctionThrows()", +"3bcfc4b8": "apy()", "3bcff3b0": "getProjectCount()", "3bd04d69": "addWhiteList(bytes32)", +"3bd092b8": "stakeMap(address,address)", +"3bd0991e": "OracleEnteringInOneHourInitiated()", "3bd099d3": "ICO_RATE()", "3bd0a6e5": "clickButton()", "3bd0aa47": "modifyItem(string,address,uint256,address,uint128)", +"3bd0d9b6": "GS_minStartAgentAmountBets()", "3bd0dd47": "getBackEther()", "3bd0f412": "changeMin(uint256)", "3bd10bf1": "_seekOdd(uint256,uint256)", "3bd137e0": "makerDAOMedianizer()", "3bd13b4a": "completeBounty(address)", +"3bd1becf": "disperseBatchToken(address,uint256[],address[],uint256[][],address)", +"3bd1db77": "ONESPLIT_ADDRESS()", +"3bd1ece2": "destructHoldingToken()", +"3bd2c8a0": "Kuser(address,address)", "3bd3593f": "_PurchaseInsurance()", +"3bd37b3c": "buyTokens(address,uint8,uint256,uint256,uint256)", +"3bd47eef": "withdraw(bytes3,uint256)", +"3bd48581": "nextIPO()", "3bd4aab7": "_thirdLevelEth()", +"3bd54344": "followup(address)", "3bd575fa": "acceptTrustSC(address)", "3bd5aceb": "nProposals()", +"3bd5afe4": "getNewPuts()", +"3bd5b4ea": "setTrans100(uint256)", "3bd5c209": "getContractCreationData()", +"3bd5d173": "deliver(uint256)", +"3bd6020b": "ThreeYearsBondBuiltCount()", "3bd6695e": "testCoin()", +"3bd6ad89": "setAddressValues(bytes32,bytes32[],address[])", "3bd74880": "HARDCAP()", "3bd756b6": "addPrivateFund(address,uint256)", +"3bd777a8": "setDevTreasury(address)", "3bd794d0": "solveDispute(address,bytes32,address,bool)", "3bd797b0": "Tasks(address,address)", "3bd7a51a": "IfContractRegist(string,string,string,string)", +"3bd7d3cf": "approve_691(address,uint256)", +"3bd7fff4": "fundChannelWithSig(uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "3bd87ebd": "hardCapTime()", "3bd89deb": "DAX()", +"3bd9a309": "resumeTokenTransfer(uint256)", +"3bd9c1c6": "painter(uint256)", +"3bd9ef28": "call(address,uint256)", +"3bda1231": "withdraws(address[],uint256[])", +"3bda4886": "pendingHydraz(uint256,address)", +"3bdac13d": "set_COMPOUND_TOKEN_ADDRESS(address)", +"3bdadc82": "lockupPhase3(address)", +"3bdafc43": "stripRoles(address)", +"3bdafce6": "setFeeDataOnAcoPool(address[],uint256[],address[])", +"3bdb647c": "Transform(address,address,uint256,uint256)", +"3bdbd5c4": "toggleProjectIsDynamic(uint256)", +"3bdc0922": "NewMemberName(uint8,bytes32)", "3bdc5173": "disallowNorthPoleMinting()", "3bdcaab9": "getEndpointBroker(address,bytes32,int256)", +"3bdcb5ef": "MIN_NUMBER_OF_TOKENS()", +"3bdcc923": "setManagers(address[],bool[])", "3bdd504a": "rateOfZNT()", +"3bddc951": "pool5activeUserID()", "3bde045f": "numberOfRounds()", +"3bde0f07": "gsnAllowed()", "3bde3072": "onAssetReceived(uint256,address,address,bytes,address,bytes)", "3bde5ba8": "targetReached()", +"3bde7d2e": "setDependencies(address,address,address,address)", "3bdebbe1": "withdrawERC20Token(address)", "3bdf157a": "setoraclegasprice(uint256)", "3bdf2c0c": "setBaseValue(uint256,uint256)", +"3bdf41d0": "setUpperTransferLimit(uint256)", +"3bdf5878": "roomnights(uint256)", "3bdfafac": "randomJackpot()", "3bdff827": "StaticArbiter(address[])", "3be08dab": "setAddress(address,address,address)", +"3be094a6": "getDaysInterval()", +"3be0978a": "Device_Registeration(address)", "3be1212b": "approveValidDurationData(uint256)", "3be1c410": "dev2Wallet2Pct()", "3be1e952": "freezeTo(address,uint256,uint64)", +"3be22149": "setSavingsRate(uint256)", "3be258bb": "getBuyPriceDecimals()", "3be272aa": "createRoom()", +"3be273a9": "getMlp(uint256)", "3be2b60c": "joinwithreferral(address)", "3be31d63": "updateVerificationStatuses(address[],bool)", "3be32f7d": "deleteAccount()", "3be3a3f5": "setCloseTime(uint256)", "3be3bdd9": "offTimeLock()", +"3be444c9": "invest(uint8)", "3be46378": "getAffiliate(uint256)", +"3be47363": "adjustLevelExpiry(address,uint256,uint256)", "3be4ee30": "getUserTokenLocalBalance(address,address)", "3be52c2c": "setStatusBurn(bool,bool)", +"3be52fc4": "notifyRewards()", "3be546a2": "raiseDollarsAdded(address,uint160,int160)", "3be554d4": "setCostPerDay(uint256)", +"3be58489": "updateClaimsManager(address)", "3be59443": "_setOracle(address)", +"3be613ce": "ProductAdded(uint256,address,string,string,uint256,string)", "3be64ed7": "addPeriod(uint256,uint256,uint256)", "3be6ccd9": "freezeWithdraw(address,uint256,uint256,bool)", +"3be6e637": "SetFees(uint256,uint256)", "3be746b6": "lockState(string)", "3be75aa3": "shareLimit()", +"3be79310": "_unbasePercent()", "3be86ba1": "setIcoAgent(address,bool)", "3be8fd6a": "setContent(string)", "3be924fa": "hasAuth(string)", "3be92863": "burnLotById(bytes32)", "3be93b98": "createCountry(string,string,string,uint256)", "3be94219": "purchaseAttack()", +"3be95901": "death(address)", +"3be99e6f": "setResolverAndSyncCache(address)", "3be9cfb7": "changeDropper(address)", +"3bea844f": "addPost(uint256,string)", "3bea92a3": "addToTipperQueue(uint256,address)", +"3beaaefc": "bxh()", "3bead271": "sale3(address,uint256)", "3beb0044": "hminus(uint256,uint256)", "3beb26c4": "setTime(uint256)", "3beb4db1": "setIcoStage(uint256)", +"3bec97f8": "jpyc_address()", +"3bec9d8e": "getStimulusVersion()", +"3bece31b": "setPayReferral(bool)", "3bed33ce": "withdrawEther(uint256)", +"3bed5043": "getPendingDivsEth(address)", "3bed93f2": "MAX_COLLECTORS()", +"3bedd97a": "getTokenBalanceV2(address)", "3bee0613": "updateExchangeStatus(bool)", "3bee8726": "getMaxContenders()", "3beea695": "corruptElite()", "3beedf6d": "lotteryAddress()", +"3befcd63": "getEncryptedResourceDecryptionKey(uint256,uint256)", +"3befe562": "computeLiquidityValue(uint256,uint256,uint256,uint256,bool,uint256)", "3befedea": "getPersonParents(uint256,bool)", "3bf03e9e": "HelloWorldContract()", +"3bf0d3d4": "Payreward(address,uint256)", "3bf11a6c": "initToken(address,address,uint256,uint256)", "3bf12c88": "Rate1()", "3bf13ded": "changERC20(address)", "3bf17f75": "initializeCompanyTokens(uint256)", +"3bf19e29": "offerPrice()", +"3bf1a4ef": "setMixGenAddress(address)", "3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", +"3bf272d8": "PL_Address()", "3bf2a861": "cancelOrder(bool,uint32)", "3bf2b4cd": "approveDisband()", "3bf2cade": "justPureFunction(int256)", "3bf30f85": "execute(address[],bytes)", +"3bf31254": "CONTRACT_ERC721_GEGO()", "3bf329bf": "fraction(int216,int216)", +"3bf3301c": "tf()", +"3bf39de5": "REWARDS_FEE()", "3bf3d531": "miningThreePlat()", +"3bf43fc2": "_isValidStakingContract(address)", +"3bf467da": "add(address,uint256,uint16)", "3bf47720": "totalTransfers()", "3bf48672": "BattleToken(address)", "3bf4ac5c": "day3Start()", +"3bf4adeb": "token1_amount()", "3bf53a89": "unVoteAll()", +"3bf5711b": "getMinTokenPurchase()", "3bf5b9c0": "getNumberByChoice(uint256)", +"3bf5e537": "log(address,uint256,bool,bool)", "3bf5f781": "Trendercoin()", +"3bf6b478": "_setPrecision(uint256)", +"3bf6cbe3": "consumerAuthorisedProviders(address,address)", "3bf6de96": "max(uint256[])", +"3bf77935": "increaseBAndBuy(uint256,uint256[],uint256[],uint256)", +"3bf7a83e": "Q112()", +"3bf7d3ba": "priceUSDETH()", "3bf81b91": "testAddVoter()", "3bf8f34a": "designatedReporterShowed()", +"3bf934de": "setReference(address,bytes32)", "3bf99b3f": "buyTokensByBTC(address,uint256)", "3bf9b801": "_Hit()", "3bfa0de9": "changeFundWallet2(address)", "3bfa4449": "createFreeToken(string,address)", +"3bfa66ee": "safestakemaxuserlimit()", +"3bfb2a48": "VendorAdded(address,string)", "3bfb3246": "_detectInvestorGroup(uint256,address)", "3bfb3c35": "fourthBonusEnds()", +"3bfb4aa2": "getVersionAward(uint256,address)", +"3bfc1b25": "totalEarningsGenerated()", "3bfca20f": "TokenToken(address)", "3bfd7fd3": "incrementValue()", +"3bfd87e9": "rewardGet(uint256)", "3bfdd7de": "transferManagment(address)", +"3bfdefa0": "investDisabled()", +"3bfec254": "setLoadLimit(uint256)", "3bfecbf0": "setNeverdieSignerAddress(address)", "3bfed5dc": "DolyToken2()", "3bffb839": "Cryptolotto1Hour(address,address,address,address)", +"3bffbbe2": "liquidationRatio(address)", "3bffd31e": "depositaPagamento()", "3bfffc49": "getSumOfValues(uint256[])", "3c0093a6": "MithrilToken()", +"3c01223b": "g(int256,uint256)", "3c01a9fa": "getEscapeRequests(uint32)", +"3c023a4c": "apeingFromToken(uint256,bool)", "3c027d4f": "isTokenSelling(uint256)", +"3c02e351": "SetHourlyRate(uint256)", "3c0359a4": "certifications(uint256)", "3c03d8be": "judgeAddress()", "3c0471a2": "pregnantLinglongCats()", "3c05187b": "execute(uint8,bytes32,bytes32,address,address,uint256,bytes,address,uint256)", +"3c05b330": "pastGameNr(uint256)", +"3c05eca1": "userData(address,uint256)", +"3c05f3f0": "checkRemainingAmount()", +"3c0676ab": "PlayerWithdrew(address)", "3c067945": "fundBalance()", "3c06ae68": "raiseBuyOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", +"3c06e514": "numberOfPendingWithdrawals()", "3c070b60": "dataSourceCallbackFinals(uint256,uint8[4])", +"3c0759c3": "CityNotForSale(uint16)", "3c077a48": "getAll(uint256)", +"3c080e6a": "indexPriceID()", +"3c0819e0": "getTransactionShort(uint256)", "3c0870ae": "challenge(uint256,uint256,uint256,bool)", +"3c08a615": "_calcBounty(uint256,uint256,bool)", +"3c094d00": "ProducerStatement(string)", +"3c095c0a": "adminMigrateNFT(address,uint256,address,uint256,string)", "3c096005": "managerAmount()", "3c09ee26": "Token(address[],uint256)", "3c0ab650": "buyAllAmount(address,address,uint256,address,uint256)", @@ -34353,30 +62826,53 @@ "3c0b8577": "getUserApproval(address)", "3c0b9db2": "PolyDistribution(uint256)", "3c0ba651": "getDutchAuctionToBuyAddress()", +"3c0bbcd9": "attacking()", +"3c0bc48c": "onAffiliateDistributeLeft(uint256,uint256)", +"3c0be45c": "createUniqueArt(bytes32,string,string)", +"3c0bf68c": "getQuotes(address)", +"3c0c10a2": "setData(address,bytes32)", +"3c0c4566": "getPlatformAddress()", "3c0cd36b": "manualPurchaseTokens(address,uint256)", "3c0ce567": "fetchConfirm(address,bytes32)", "3c0cfb3d": "mintMigrationTokens(address,uint256)", +"3c0d0cb8": "isFree()", +"3c0d84de": "totalOut()", +"3c0d8fb1": "UNSOLD_RESERVE()", "3c0dabdb": "getMidgradeCarSupply(uint256)", "3c0dde1c": "_addPools(address,address)", "3c0de47c": "probabilities()", "3c0e1cc2": "revealPhaseMinSecondsWaitForClearMajority()", "3c0e5d74": "frozenCheck(address,address)", "3c0e6adc": "reset_individual_shares(address)", +"3c0ebf60": "etherBalanceOf()", "3c0f60ad": "setSecondaryStorage(address)", +"3c0f7c60": "taxOutput(uint256,uint256)", "3c0f92e3": "supportAddOn(uint16,uint256)", +"3c0fc58b": "MetadataOGSerialNumber(uint256)", "3c0fc6ea": "kill(address[])", "3c0fcdd1": "depositEgereg(uint256)", +"3c0ff791": "distributeEther(address[])", "3c1008bb": "internal_transferFrom(address,address,uint256)", +"3c101710": "purchasedToken(address)", "3c107402": "LongPlace(address[2],uint256[7],uint8,bytes32[2],uint256)", "3c10d7cd": "bonusInPhase2()", +"3c10e560": "lockEndAt()", +"3c11196a": "approveSuperAdmin(address)", +"3c1148f6": "ValidateProposal(uint256)", +"3c115a2b": "getAccountLockType2(address)", "3c11845e": "ContractConstructor(string)", "3c11f969": "sentSecond()", "3c121ef5": "is_empty()", "3c126795": "OMIVIA()", +"3c127736": "registerUser(address,uint256,uint256)", "3c130d90": "tokenURI()", +"3c133421": "setSpawnFee(uint256)", "3c133818": "winningVote(bytes32)", +"3c13685b": "pack2activeUserID()", "3c13ec32": "team1LockEndTime()", "3c13fc33": "transferBase(uint256)", +"3c156b9d": "IdeasBought(address,uint256)", +"3c157e64": "ramp_A(uint256,uint256)", "3c1593ab": "endFirstWeek()", "3c15d28f": "createQuestion(string,address,uint128,uint256)", "3c1650ff": "getData_23()", @@ -34384,12 +62880,22 @@ "3c168093": "addOrder(uint256,uint256,address,address,uint256)", "3c173bf0": "ZarfundsToken()", "3c17494d": "set(uint16[],string,string,string,bool)", +"3c1756a5": "forGTRENDholders()", "3c17622a": "setFreelancerSkills(address,address,uint256[])", +"3c177f10": "getSavingPackage(address,uint256)", +"3c1783b3": "salePriceInfo(uint256)", "3c17b656": "investmentGateway()", +"3c17e88c": "DumpPrize(uint256,uint256)", "3c1800cd": "isPresaleEnd()", "3c1853e7": "etherBack()", +"3c186ff3": "getPosition(uint256,address,address)", +"3c18797c": "_iBaseTokenPresale()", +"3c18bf29": "getTimestampDirect()", "3c18d318": "sweeperOf(address)", +"3c18e458": "setTunnel(address)", +"3c195423": "generation(address,uint256)", "3c198047": "RollToken()", +"3c19954f": "toWKingERC1155Id()", "3c19df06": "stakeCreativeCommonsContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256)", "3c19fc06": "Holder()", "3c1a7c6f": "getCountApplyForCertification()", @@ -34401,12 +62907,18 @@ "3c1b87f9": "setSettings(uint256,uint64,uint64,uint256)", "3c1c423c": "getInfoLibra(bytes32)", "3c1c5931": "promoCodeToContractAddress(bytes16)", +"3c1cbb34": "CreateChangeRequest(uint256,uint256,uint256)", "3c1cc14e": "stopTokenSwap()", +"3c1ce1c6": "rewardPrize(uint256)", "3c1ce6a5": "mintDigm(uint256)", "3c1d28a3": "redeemLevAndFee(address)", "3c1d7078": "BookCreated(address)", +"3c1e05c5": "concede()", +"3c1e17f8": "orders_sell_amount(address)", "3c1e60a6": "tokenParametersSet()", +"3c1e7ae5": "non_payable_func()", "3c1f1cb7": "ethSaver()", +"3c1fe4b2": "fundMin(uint256)", "3c20307b": "CTWtoken()", "3c203d44": "PreCrowdAllocation()", "3c2040c1": "setInviteAdmin(address)", @@ -34417,6 +62929,8 @@ "3c20d1a5": "getStageCap(uint8)", "3c20ee6e": "_end()", "3c21001d": "getMySentTradeOfferId()", +"3c213108": "close(address,address,uint256,uint256)", +"3c2163dc": "redeemExternalToken(bytes32)", "3c21acc6": "extraMintArrayPending(address[])", "3c21b968": "loadBalances(uint256[])", "3c21db0a": "theGames(uint256)", @@ -34424,70 +62938,114 @@ "3c21fa2e": "setELHeroTokenAddr(address)", "3c226cd9": "ChangeDeadLine(uint256,bool,uint256)", "3c22c935": "processMilestoneFinished()", +"3c22d7a9": "unstake(address[])", "3c232bb6": "set_traded_token_as_seeded()", "3c237167": "getProductivityCitizens(uint256)", +"3c23bcd6": "hegicStakingWBTC()", +"3c23ebda": "initAccounts(address[],uint256[])", "3c240a63": "updateFourthExhangeRate(uint256)", "3c24550c": "isRefundTime()", +"3c24f530": "zzzV2contract()", +"3c250522": "depositBlocks(address)", "3c263cf4": "savingPoints()", "3c264820": "getWinningPayoutNumerator(uint256)", "3c26777b": "StartedGame(address,uint256,uint256,uint256)", +"3c267902": "removeCreditProfileAtId(uint32)", "3c2698d5": "YUNLAI()", "3c269b96": "setExchange(bool)", +"3c26ad79": "setInvestMin(uint256)", "3c26cfe3": "drawLottery(string)", "3c275e24": "getInfo(address,uint256,uint256)", "3c276d86": "saleStartTimestamp()", +"3c277fc5": "getWethContract()", "3c278bd5": "lift(address)", "3c279f1f": "submitWithdrawTokenTransaction(uint256,address,uint256)", "3c28308a": "rndNo()", "3c287a3f": "BitcoinDiamondToken()", "3c28b9c0": "expirationInSeconds()", +"3c28e88b": "getFundsGovernor()", "3c28ee5b": "addDeactivatedList(address)", +"3c291834": "eGas(uint256)", +"3c2971c1": "DKT()", +"3c29f4ff": "CreateWorkerPool(address,address,string)", +"3c2ab1ba": "fundingForBeneficiaryPct()", "3c2aba9f": "manageApprovedTransferModule(address,bool)", +"3c2b004b": "becameCertifier()", "3c2b0725": "delegateContract()", "3c2b2508": "PREMINER_ADDED(address,address,uint256)", +"3c2bab5a": "setStarAuction(uint8,address)", +"3c2bb5d2": "showDrugOwnersDetail(string)", "3c2c21a0": "scheduleCall(address,uint256,bytes4)", "3c2c4b5e": "MASTER_WALLET()", +"3c2c6e54": "LogPublicsalesSpecialUserAdd(address)", "3c2cf368": "BIGTTokenDeposit()", +"3c2cff5e": "_unshiftValue(uint256)", +"3c2d4daf": "getCoverMemberAddress(uint256)", "3c2d55e6": "GetSubscribers()", "3c2d6447": "setIcoPercent(uint256)", "3c2d70e9": "start(address,uint256)", "3c2dba23": "stakedForPollID(address,bytes32)", +"3c2de789": "NewTokenClaim(address,uint256)", "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)", +"3c2ecfe5": "vaultOwner(uint256)", "3c2efb22": "isContributionRegistered(bytes32)", "3c2f24af": "loopFor(uint256,uint256,uint256)", "3c2f7df5": "incGen0Limit()", +"3c2fdb65": "dividendPeriodOf(uint256)", "3c306250": "mybalance(address)", +"3c308d74": "seniorDebt()", +"3c30d567": "votedPerformanceFee()", "3c311f3c": "previous(uint256)", +"3c3142a5": "voteCancelled()", "3c314a91": "playerGetPendingTxByAddress(address)", +"3c3159ee": "create(address,address[],uint256[],uint256[],uint256,uint256)", "3c31762c": "setMinPurchaseValue(uint256)", "3c31fa62": "setFeeRates(uint16,uint16,uint16)", "3c324c2e": "totalCollectableToken()", "3c32673f": "BTTSTokenUpdated(address,address)", +"3c3284d1": "Mint(address)", +"3c328c5d": "Redenomination(uint256)", "3c329dc4": "delModule(string)", "3c32d8ef": "getOffChainIdentity(address,address)", +"3c33056f": "benchmark(uint256)", "3c3313a8": "registerLoan(address)", +"3c3333d9": "EventLayEgg(address,uint256,uint256)", "3c335b0e": "getRetractable(bytes20)", "3c33808d": "preallocateSecondStage(address,uint256,uint256)", "3c33863c": "computeGroupPhasePoints(uint8,uint8)", "3c33d473": "setLargeCapDelay(uint256)", "3c345335": "addSignature(uint256)", "3c347cbd": "_0xTestToken()", +"3c34b9f0": "artistSetBonusContractAddress(uint256,address)", +"3c35149f": "view_BagID()", "3c358483": "setData_10(string)", "3c35a858": "processProcessableAllocations()", "3c35c88a": "sendFundHome2()", +"3c36477a": "isIgnoreOfBakery(address,address)", +"3c3691b5": "invost(uint256)", +"3c37a374": "AugmintTransfer(address,address,uint256,string,uint256)", "3c37a88b": "stage4_start()", "3c37b640": "commitHash(bytes32)", "3c3861b6": "getRace(uint32)", "3c389cc4": "erc20Impl()", +"3c38a9f5": "grab(bytes32,bytes32,uint8,bytes32,bytes32,bytes32,address,uint128,uint128,uint256,uint128,address,bytes,bytes32[])", +"3c38ccbb": "poolStatus(address)", +"3c38d967": "setLinaAddress(address)", +"3c390531": "clearPixels(uint256,uint256,uint256,uint256)", "3c391c95": "preSaleBonus2Time()", +"3c39e63c": "nextOrderPrice(address,address,uint256)", +"3c3a220d": "voteCounts(uint256)", +"3c3a304f": "swapCallback(bytes32,uint256)", +"3c3a738b": "contributeWithToken(uint256,address,uint256,uint256,uint256,address,address,uint8,bytes32,bytes32)", "3c3a8c39": "UpcToken()", "3c3ad016": "forceUpgrade(address[])", "3c3b4b31": "getHouseTraits(uint256)", "3c3b7995": "privateLimit()", +"3c3b8a5e": "ahash(uint256)", "3c3bdb7a": "changeExchange(address)", "3c3be494": "dtCreateCityData(address,uint256,uint256)", "3c3c22b3": "oldest()", @@ -34497,6 +63055,7 @@ "3c3ce17d": "insure()", "3c3d1385": "tinhtong(uint256,uint256)", "3c3d3af6": "amountInvested(address)", +"3c3d5adb": "PERCENT_FACTOR()", "3c3d9ada": "_bctc(uint256,uint256,uint256,uint256,address)", "3c3deb54": "contractCreatedTimestamp()", "3c3e1662": "ctf_challenge_add_authorized_sender(address)", @@ -34504,312 +63063,566 @@ "3c3e6af4": "QTX()", "3c3efdc9": "calculateEarnings(uint256)", "3c3f4c63": "maxSpend()", +"3c3f9125": "getObservationListLength()", "3c3ff394": "IRECToken()", "3c40066d": "investByLegalTender(address,uint256,uint256)", "3c402bd1": "AMTBToken()", +"3c40afbd": "isDeviceMintable(bytes32)", +"3c40b1f0": "getCurrenciesByIndex(uint256)", +"3c417b77": "setNyaFund(address)", "3c41c816": "EthlanceUser(address)", +"3c422214": "withdrawByLabel(bytes32,address)", +"3c423068": "setBankBNB(address)", +"3c427547": "NewEtherPriceUSD(uint256)", "3c4293d8": "refund_my_ether()", "3c42f95a": "setMetadata(string,uint256,bytes)", +"3c437ad2": "approve_617(address,uint256)", "3c43b91d": "setStage2Ends(uint256)", "3c444637": "setSaleBonus(uint256)", +"3c4461be": "transferAndCall(address,uint256,bytes4,bytes)", +"3c448b05": "setAmoutIn(address)", +"3c448d3a": "_getBNBCurPriceOfUSDP(uint256)", +"3c44940d": "getRecordIndexLengthForGroupCycles(uint256)", +"3c4505a5": "learnDeFiAddress()", +"3c4534a2": "Rurchase(address,uint256,uint256,uint256)", "3c454d7f": "getper()", +"3c459f88": "test1(string)", "3c45b373": "addVoting(address,uint256)", "3c46f604": "testDeleteCase()", +"3c47034e": "setDevFeeReceiver(address)", "3c473336": "isEndedTrack(bytes32)", +"3c477f91": "mainOwner()", +"3c482a9e": "eggToLp0Route(uint256)", "3c4857a7": "_approve(uint256,address,address)", +"3c48664c": "attack(address,address)", "3c489238": "HappyFutureToken()", "3c48d7de": "shapeshiftTransfer(uint256,string,string)", "3c490a70": "getGlobal(uint256)", "3c4961ff": "_processAirdrop(address,uint256)", +"3c4966b7": "getOwnerWallet()", +"3c49cbb5": "unstakeAmount(uint32)", "3c49dde4": "registerDonation(address,uint256)", "3c49ec88": "getMyKebabs()", "3c49ff0c": "StarCoinPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"3c4a25d0": "addGovernor(address)", "3c4a2989": "POPCHAINCASH()", "3c4a4b1e": "createTokenTimelock(address,uint256)", +"3c4ad6c5": "BakerySwapFactory()", "3c4b07de": "extUnlockBot(uint256,uint16)", "3c4b303d": "token_decimals()", +"3c4b3fe5": "testCheckEpoch()", "3c4b40b8": "fundingWallet()", "3c4b5e2b": "setInviteeAccumulator(address,uint256)", +"3c4b6199": "getSignersFromSignatures(bytes32,bytes)", +"3c4badb0": "checkInvestedETH(address)", +"3c4bc701": "_cruToken()", +"3c4be957": "withdrawSponsorshipAndFee(uint256)", +"3c4c04bf": "sxp()", +"3c4c06c2": "changeIpfsIndex(string)", "3c4c51c9": "getClue()", +"3c4c8abf": "releaseTeamToken3rd()", +"3c4dbb05": "Set(address)", "3c4dbb17": "PriceWeekOne()", +"3c4dd32e": "getTokenKey(address,uint256)", +"3c4e10df": "_trader(address)", +"3c4e5323": "atTime(address)", "3c4e7d9f": "setESCBDevMultisig(address)", +"3c4e9c05": "getKOTH()", +"3c4eb4de": "updateEthBP(uint256,uint256)", "3c4ec769": "VCT()", "3c4f3c12": "issueTokensSale(address,uint256)", "3c4f5a66": "getActivePlayers()", "3c4f5be3": "registrantOfToken(uint256)", +"3c4fa5d4": "poolRewardBalance(address)", "3c50afe1": "_icoSupply()", "3c50edbd": "getSidesById(uint256,uint256)", +"3c512900": "unLockAccount(address)", "3c5192b7": "EscrowEscalation(uint256,uint256)", +"3c51b9ae": "EventUpAd(address,uint256,uint256)", +"3c51d64e": "whitelistCapsRound_1(address)", "3c520944": "getPromoCodeForFish(bytes16)", "3c526ef1": "_divideDecimalRound(uint256,uint256,uint256)", "3c530ace": "registerProducer(address)", "3c536938": "executeTransaction(uint256,uint256)", "3c5395b2": "revokeAdmin(address,address)", +"3c53c7b3": "stopPool()", "3c53cb96": "lastBlock_v0Hash_uint256()", "3c53dabe": "BeggarBetting()", +"3c53eddd": "setStrategy(address,address,uint256,uint256,uint256)", +"3c53f7cb": "stakeSDC(address,uint256)", "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()", +"3c555f3f": "_enableAndRefundNonZeroBalance()", "3c560064": "mintPartner(address,uint256)", +"3c564cab": "changeSettings(uint256,uint8[3])", +"3c565c71": "revokeSign(bytes32)", "3c566f0f": "shopStoreAddress(uint256)", "3c56d236": "HashLotto()", "3c56e2ae": "register(address,uint8,bytes32,bytes32)", "3c56eae3": "setForceReadyTime(uint256)", "3c5746dd": "recipientExtraMIT(address)", +"3c575db1": "_trLaunchMaxBuySecs()", +"3c57a7b7": "dataUnlock()", +"3c57b863": "pendingERC20()", "3c580e92": "setLocalGame(uint16,address)", +"3c5833e6": "splitNFT(address,uint256,uint256)", "3c584d86": "convertWT(uint256)", +"3c586898": "setReduceIntervalBlock(uint256,bool)", +"3c5873c0": "_setUniswapAddress(address)", "3c58795d": "hasFetchedProfit(address)", "3c58d378": "lockChanges()", "3c58ef44": "getWishIdxesAt(address)", +"3c594059": "result(uint256)", "3c594844": "leftToday()", +"3c595835": "delegateToViewAndReturn()", "3c5972ff": "multiSetWhiteList(uint256[])", "3c59c17a": "AgentWallet()", +"3c59e848": "zapStEthIn(uint256,uint256)", "3c5a12cb": "getVal(string)", +"3c5a3cea": "init(address,address[])", +"3c5aace6": "stakeCardPool(uint256,uint256)", +"3c5abb66": "setTermLimits(uint256,uint256)", "3c5ad147": "Debug(string,uint256)", +"3c5b643d": "viewHoldTotalLost()", "3c5b7d3f": "buyTkn(uint256)", "3c5bd949": "mine_jade()", "3c5bdcc4": "FCOIN0939Token(uint256,string,string,uint256)", "3c5c6331": "addAddressToUniqueMap(address)", "3c5d1812": "totalPhases()", +"3c5d56fe": "totalHxyLpFrozen()", +"3c5dae94": "getSafeLeverageColFactor()", "3c5e270f": "teamSupplyAddress()", "3c5e28d6": "setClientIdentRejectList(address[],uint8)", "3c5e417e": "_mintApproveClear(address,address)", "3c5e57e4": "_getRarity(uint8)", +"3c5e64d1": "createchunk(bytes32,string,string)", "3c5e94dd": "bulkRegisterPoA(bytes32,bytes32,bytes32,uint256)", +"3c5f07cb": "seedMarket()", "3c5f10a3": "winning_ticket()", "3c5f2bf2": "getFullRace(uint256)", +"3c5f914e": "getCurrencyPricesInUsd()", "3c5fc608": "preDGZtoDGZExchangeRate()", +"3c5fcc0d": "correspondenceReceivers(uint256)", +"3c6044ba": "mintIcoEnablersTokens(address,uint256)", +"3c609e38": "allowanceToken(address,uint256)", +"3c60b5ba": "decimalLossLP()", "3c612c11": "authorize(address,address,address,uint256)", "3c617685": "SocialMediaPay()", +"3c619d5b": "TransferFromParent(address,uint256,uint256)", +"3c61bede": "viewBot(uint256)", +"3c61c742": "purchasePost(uint256)", "3c61d003": "advertisingDeposit(uint256)", +"3c6216a6": "withdrawFor(uint256,uint256[],address)", "3c6251bd": "test_oneValidEqUint1()", "3c627c9b": "releaseAndDistribute()", +"3c62b4c5": "changeBenefitiary(address)", +"3c62cf33": "isToken0s(uint256)", +"3c630108": "uni_mic_usdt_lp()", "3c630356": "AirCrash()", +"3c637d74": "getAllowGroupTransferTime(uint256,uint256)", +"3c638fb9": "startSaleMDS(uint256,uint256,uint256,uint256,uint256)", "3c63d000": "setBurnRequestStringMap(uint256,string,string)", +"3c640301": "getCertificateForWallet(address,address)", "3c6403b4": "GetAccountIsNotFrozenCount()", +"3c641910": "cancelUpTo(uint256)", +"3c6444bc": "isValidRewardToken(address)", +"3c6461a9": "balancesToWithdraw(bytes22)", "3c647fbd": "angelMaxAmount()", "3c648ddd": "voteSvp01(bool)", +"3c64cfc6": "setBalanceStakes(address,uint256)", "3c64f9aa": "ClusterToken()", +"3c658348": "testDataTypeUint256()", +"3c65baeb": "engine1_index_winner()", "3c65c506": "adjust_difficulty()", +"3c6652ef": "mi_wallet(uint256)", "3c6677d6": "promoBun(address,address)", "3c667b13": "rentalsContract()", "3c671e53": "collectPayout(address)", +"3c672eb7": "setSpendLimit(uint256)", "3c673470": "createGroup(address,bytes32,address[])", +"3c67396e": "TokensTransferred(address,address,address,address,uint256,uint8,address)", "3c673c19": "deleteTopic(uint256)", +"3c6765da": "get_commission_03_fee()", "3c67b6b7": "getClaimLeft(address)", +"3c67ba2e": "submitMlp(address,address,uint256,uint256)", "3c67c51e": "testLogs()", "3c67dad5": "revertLuckyCoin(address)", "3c6806b8": "getDiary(uint256)", "3c681da0": "getCandy(string)", "3c6867c3": "CallBack(string,bytes32)", "3c68eb81": "transferFunds()", +"3c68f634": "ash(uint256,uint256)", +"3c692f77": "_neg_2_shouldBeLesserThan_neg_1()", "3c695d4e": "authorityAddress()", "3c69a5e6": "mintPresaleBonuses()", +"3c69e26b": "canIssueAmount()", "3c6a2929": "setArrIntF2ArrUintF3ArrBoolF1(int256[],uint256[],bool[])", +"3c6a2efb": "crToken()", "3c6a71f7": "exchangeRatePreIco()", +"3c6a9b5e": "withdrawByTokenWhenOutOfSeason(address,address,address)", +"3c6aa7b7": "isDIDProvider(bytes32,address)", "3c6aa9f1": "decimalsValue()", +"3c6afd66": "withdrawProxy(address)", +"3c6b16ab": "notifyRewardAmount(uint256)", "3c6b97c9": "TokenContribution()", "3c6b9d8c": "captains()", "3c6bb436": "val()", "3c6bc24b": "getBrickDetail(uint256)", +"3c6bc48e": "VerificationStatusUpdated(address,bool)", "3c6bf582": "ElementBought(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3c6c0b4b": "payoutPercentageSum(uint256,uint256)", +"3c6c55d8": "editAd(uint256,string)", "3c6c67e2": "etherAllowance()", "3c6d2610": "TalentToken(address)", "3c6d2e19": "contributionsETH(address)", +"3c6d3212": "AllowBurn()", "3c6d736d": "ZZZCoinERC20Token()", "3c6d7b47": "setDebugNumber(uint256)", +"3c6dc59a": "transferSAFEOwnershipToProxy(address,address,uint256,address)", "3c6dfba1": "buy(uint8,bytes6,uint32,uint32)", "3c6e03d7": "thewhalegame()", +"3c6e03e7": "cevaClearTitle(uint256,uint256,address)", +"3c6e1b7c": "_isPotentiallyDestructible(address)", "3c6e5927": "getMonsterCurrentStats(uint64)", "3c6ea2a5": "HooyToken()", "3c6eab08": "KICKICOCrowdsale(address,address,address,address,address,address,address)", +"3c6ec779": "addCompensationfund(uint256)", "3c6ee392": "createTokens(uint256,uint256)", "3c6f2cc4": "sendICOTokens(address,uint256)", +"3c6f6af8": "setDoubleFarming(uint256,address,uint256)", "3c704089": "DigitalCash()", "3c7045fe": "takeEtherBack()", "3c7066d1": "feeCMT(uint256)", +"3c7093b5": "collateralCall(address,address,uint256,address)", "3c7097a3": "setMaxCharId(uint32)", +"3c70af01": "SetPaused(bool)", "3c70bd42": "sell_(uint256)", +"3c711e3b": "canRuleDispute(uint256)", +"3c7147e9": "dev(uint256,address)", +"3c715f00": "proposeDelayTimestamp()", "3c716e08": "updateAuthority(address)", "3c71b186": "ElementeumToken(uint256,address[],address[])", "3c71b7b6": "validDelegateSignature(address,string,uint8,bytes32,bytes32,bytes32)", "3c71faf2": "BMToken()", +"3c725cbb": "numActiveTranscodersDEPRECATED()", "3c72751e": "lerp(uint256,uint256,uint256,uint256,uint256)", "3c72a83e": "getKyberNetworkAddress()", +"3c72ada8": "LogOwnerBurn(address,uint256)", "3c72e9bf": "IMDEXadminWithdraw(address,uint256,address,uint256)", "3c72f070": "initialTokensBalance()", +"3c732815": "getStudentAddress()", "3c73db77": "RecycleToken()", "3c745371": "finalAddress()", "3c745ad5": "nextProfile()", "3c74db0f": "expirations(address)", +"3c75bc8c": "ImplAll()", +"3c7611a5": "BurnFrom(address,address,uint256)", +"3c766394": "updateRate(uint8,uint256)", "3c76aa19": "CWCreturnQueryData()", +"3c76cc3b": "approve_351(address,uint256)", "3c771309": "setSiringRate(uint256,uint256)", +"3c772b6c": "getExpectedReturnAmount(uint256,address,address)", "3c774dbb": "buyChickenParkCoin(address)", "3c775b08": "airdropLimit()", "3c77b95c": "testExpUnroll16(int256,int256,uint256)", "3c77e474": "_updateKeyPrice(uint256)", "3c7818a1": "startRoundD()", +"3c78904d": "giveBirth(uint256,address,uint256)", "3c78929e": "lockUntil()", +"3c78b244": "mintNoSwap(uint256,uint256,uint256,int128,address,uint256,bytes32,bytes)", "3c78fe07": "getReceiver(uint32)", +"3c79377e": "modifyIndividualRestrictionMulti(address[],uint256[],uint256[],uint256[],uint256[],uint8[])", "3c796430": "getOneTimePayment()", +"3c798c6d": "placeBatch(address,bytes32[],uint256,bytes32[])", "3c799547": "amountAvailable()", +"3c799957": "currentOnAuctionSystemCoins()", +"3c79ca03": "getExtraData(uint256)", "3c7a337a": "InDeepToken()", "3c7a3aff": "commit()", +"3c7af096": "getUnfinished(uint256)", "3c7b3d90": "rewardAirdrop(address,uint256)", +"3c7b4a29": "wasLoanTokenEverSupported(address)", "3c7b682d": "PunkOffered(uint256,uint256,address)", "3c7b6869": "finishPresale(uint256)", +"3c7bb542": "Totsia()", +"3c7c1f75": "ownerpro(address,address[])", "3c7c2563": "createtoken(string,string,string,string)", +"3c7c3961": "ansCount()", +"3c7c8dd0": "getGasCostOfCannotBeDelegateCalled()", "3c7cc806": "validateOrderAuthorization_(bytes32,address,uint8,bytes32,bytes32)", "3c7d6f30": "publicStartRegularPhase()", +"3c7d73d8": "displayBalance()", "3c7e03c1": "getRelayingKing()", "3c7e31f0": "addCutie(uint32,uint128,uint128,uint128,uint128)", +"3c7e758a": "setPlaceNumber(string)", +"3c7eadd5": "stranke(uint256)", +"3c7eb9a1": "provideLiquidity(address,uint256,address,uint256,bool)", "3c7fdc70": "fibonacciNotify(uint256)", "3c807878": "stageOne()", +"3c807f83": "number_smart()", +"3c809058": "subscriptionPrice(address,uint8)", +"3c80d14f": "memberCount(string)", "3c811ee0": "putSellOrder(address,uint256,uint256,uint256)", +"3c81385c": "maxBurnFee()", +"3c815d9e": "originator()", "3c8161c5": "KVC(uint256,string,uint8,string)", "3c816217": "killBoard(uint16)", +"3c818e72": "mintToFull(address)", "3c81df21": "getMultisig()", +"3c81dfeb": "_artdBalances(address)", +"3c82559f": "UNICORE_Total_LP_Supply()", "3c8259b4": "SACoin()", +"3c827f4c": "coinbaseToken()", +"3c82b507": "setTransaction(bytes32,address)", +"3c836e52": "getClaimbyIndex(uint256)", "3c837b7d": "changeSettings_only_Dev(uint256,uint256,uint8,uint8,uint256)", "3c8394ac": "ICORaised()", "3c83f7aa": "rateForPhase2()", "3c842a26": "_Test_Oraclize()", "3c847e52": "withdrawVested(address)", +"3c848d78": "getCleared()", +"3c84a78a": "getHQBase()", "3c84f868": "set(int256,address,uint256)", "3c8515b1": "_createCrypton(string,address,uint256,uint256,bool,uint8)", "3c86063c": "insertInfo(string,uint256,uint256)", +"3c866241": "getWaitingPeriods()", "3c875a35": "buyFuel(uint256,uint256,uint256,uint256,address)", "3c8766c6": "sendProfitsReward(address)", "3c876c6f": "newIdShipProduct()", "3c87b8ef": "get_player_state()", "3c889e6f": "getBid(uint256)", "3c889fe1": "masterCalculator(uint256)", +"3c88ee18": "allMarketSummaries()", +"3c88ff48": "onRecieveEth(address,uint256,uint256)", "3c890e4c": "getVoteStake(uint256,uint256,uint256,bool)", +"3c8935b9": "datasetCount()", "3c893718": "transferCity(address,address,uint256)", +"3c893ec9": "setUnitBudget(uint32,uint256)", "3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", +"3c897463": "cancelTransactionInternal(uint256)", +"3c89edce": "setUnpaused()", "3c89f9d4": "accept(uint256,address[],uint256[])", "3c8a072e": "temporalUnit()", +"3c8a0b13": "getEloRating(address)", "3c8a321c": "setPaymentGatewayList(address)", +"3c8a7d8d": "mint(address,int24,int24,uint128,bytes)", "3c8ac88e": "createIdentityWithCall(address,address,address,bytes)", "3c8b0c55": "set_arbits_min_contribution(address,uint256)", +"3c8b3f34": "setInitialDelay(uint256)", +"3c8b4b79": "noAmlMax()", "3c8b6597": "addPrivateSaleTokensMulti(address[],uint256[])", "3c8bb3e6": "wmultiply(uint256,uint256)", "3c8bccd9": "getCommission(uint256)", +"3c8c4ab4": "close(address,uint8,address)", "3c8c681a": "RoundCSold()", "3c8c6a1e": "sendToken(address,address,address,uint256)", "3c8ca83d": "gameBeginTime()", +"3c8cc3f5": "checkFairDistribution(address)", "3c8cd434": "getCabCoinsAmount()", +"3c8cd4bb": "toggleRecollateralize(bool)", +"3c8cf1a1": "maxMessageIndex()", "3c8d284b": "receiveBtcPrice(uint256)", "3c8da588": "priceInWei()", +"3c8dbb93": "readStore()", +"3c8e1bc0": "setGovenors1(address,bool)", "3c8e3b52": "getTotalPercent()", "3c8e66fb": "calculateTotalDirectDebitAmount(uint256,uint256,uint256)", "3c8eac87": "getTransactionState(uint256)", +"3c8eb7c4": "CapUpdated(uint256)", "3c8f202e": "Dashicoin(uint256,string,uint8,string)", "3c8f3278": "hmax(uint128,uint128)", +"3c8f3d68": "ownerWithdrawEther(address,uint256)", +"3c8f53a9": "ChangePCWallet(address)", "3c8f96f1": "bonusTokens(uint256)", "3c9046c9": "yearTwoClaimed()", "3c9070b5": "ConsultaProva(address)", "3c90861c": "Enigma()", "3c90ee6a": "DNARtoGoldXchgRate()", +"3c915e12": "Publication(bytes32,string)", "3c918bae": "wallet3()", "3c920d0d": "liquidityPoolTotal()", "3c925f16": "getAccountHolder()", "3c9266e0": "sendSalary(address)", +"3c92b726": "executeTokenErc20Txn(uint256)", "3c9340ae": "orderForDays(bool[])", "3c936e97": "lockBonusTokens(address,uint256,bytes1)", +"3c93c031": "rules(address)", "3c93d8be": "uint2hexstr(uint256)", "3c941423": "getDesignatedCaller(bytes32,uint256)", +"3c943c14": "StagePriceChanged(address,uint8,uint256)", +"3c946028": "_castVote(address,uint256,bool)", +"3c94786f": "_mintGuardianPaused()", +"3c94dd0a": "applyFee(address,address,uint256)", "3c959aca": "CheckTickets()", "3c960be9": "transferFromSenderPaysFee(address,address,uint256,bytes)", "3c961202": "getHighscore()", "3c96a7a8": "withdrawOwnerFee()", +"3c96c9ae": "managerFundStatus()", "3c96d048": "setnow(uint256)", "3c9719a7": "getReleasableFunds(address)", +"3c980804": "hasFunctionality(string)", "3c984f4a": "sellTokensForEur(string,address,uint256,uint256)", +"3c98626b": "approve_125(address,uint256)", +"3c98c38e": "getPixel(uint8,uint8)", +"3c98f706": "documentsCount(bytes)", "3c993482": "_payfee()", +"3c994071": "DisputeFee_seller(uint256)", +"3c9a33aa": "requireTokens()", "3c9a4baa": "requestOutput(bytes)", "3c9a5d59": "getAuditAuditor(uint256)", +"3c9a7ca9": "timelockedAccounts(address)", "3c9ad41b": "tokenIssuedToday()", +"3c9ad861": "_usdRateSet(uint256)", "3c9af31c": "getSponsor(uint32,int256)", +"3c9b1f5b": "meth()", +"3c9c3d83": "depositedMibWBNB(address)", "3c9c4001": "whitehat()", +"3c9c6d65": "Defi99PlusClaimThreshold()", +"3c9c790c": "calPrice(uint256)", "3c9c97f0": "setBlocksPerRound(uint64)", "3c9d377d": "f5()", +"3c9d9267": "comfundaddr()", "3c9d93b8": "removeAllowedAddress(address)", +"3c9dc74d": "setBalanceAndAllowance(address,address,uint256,uint256)", +"3c9dcebe": "burnWithData(uint256,bytes)", +"3c9e5fe4": "createVestingSchedule(uint256[],uint256[],uint256[],uint256[],uint256[])", "3c9ee04c": "previousstageplayer2()", "3c9f861d": "totalBurn()", +"3c9f94ff": "_getWithdrawAction(uint256,uint256)", "3c9ff012": "timeRangeCreateGen0()", +"3ca0f56b": "enableFreeMarketCreation()", "3ca1595a": "addNewRaz(uint256,uint256,uint256,uint256,string)", "3ca19952": "getBookingCount(address)", "3ca22916": "dollarPerEtherRatio()", +"3ca2fc54": "nextBlockFrom(address)", +"3ca36f88": "rd()", +"3ca45ae1": "updateRewardPercent(uint256)", "3ca520f5": "LaunchPartnersAmount()", +"3ca5b234": "busd()", "3ca5c69c": "AllMake()", "3ca5c8b8": "createFilmToken(string,uint256)", +"3ca5f9e7": "transferTreasuryFundsToDAO(uint256)", "3ca6268e": "log(string,int256)", "3ca63675": "getNumberOfVotes(uint128)", +"3ca63726": "devTotalAmt()", "3ca65e77": "JMJToken()", +"3ca6a095": "Info256(string,uint256)", "3ca6a437": "assignedGameContract()", "3ca6b228": "getEmployee(address,address)", +"3ca6bb92": "contractNames(uint256)", "3ca6c07a": "setTokenAdd(address)", +"3ca6c0ba": "calculateResult(uint256,bool,bool,uint8)", "3ca6d100": "create(string,string,uint256)", "3ca6d5a9": "initialBuyPrice()", +"3ca6e80a": "createSmartFund(string,uint256,bool)", +"3ca6f220": "approveSpendETH(address,uint256)", +"3ca779a9": "getTokenURIData(uint256)", +"3ca798bb": "topUpFaucet()", "3ca7aad7": "xorReduce(uint8[],uint256)", "3ca805ba": "pwrFloat(uint256,uint256,uint256,uint256)", "3ca84001": "transferFromContractTo(address,uint256)", "3ca88a2f": "canBuy(uint256)", "3ca8b002": "isDeploymentAdmin(address)", +"3ca8b1a7": "testBytes(bytes)", "3ca95c89": "getCompte_26()", "3ca967f3": "getCurrentExchangeRate()", "3ca96e0e": "teamBonusAllocatedTokens()", +"3ca9d85c": "appendExchangeEntry(address,bytes32,uint256,bytes32,uint256,uint256,uint256,uint256,uint256)", +"3caa10dc": "setNFTName(string)", +"3caa2ea1": "valueHeld(address)", "3cab648a": "getModuleAddressByName(string)", "3cac14c8": "returnArray()", "3cac2387": "trustedTokens(address)", "3cac38e4": "advanceStep()", +"3cac828d": "vanilla()", +"3caca2a1": "totalUnclaimedExtFarmReward(address)", +"3cacceff": "setAutoSwitch(bool)", "3cacf895": "doPayments()", "3cad71cf": "RetStatic(uint128)", "3cad7c4e": "setLockQtyToAllowTrading(uint256)", +"3cad9b0d": "issue(string)", +"3cadcb67": "exchange_ratio()", "3cae09ac": "silencePeriod()", +"3cae77f7": "assimilator(address)", "3caebce4": "BRFToken()", "3caed876": "submitTransaction()", +"3caf861a": "setFacultyDetails(string,uint256,uint256,string)", "3cb00fd2": "get_presale_iconiq_arbits_per_ether(address)", "3cb025e2": "SimpleSafeToken()", +"3cb03212": "makerdaoMaxDaiDebt()", "3cb0b51b": "Redeem200AFTK16SeptSandbox()", +"3cb0e560": "getSignInRecordByAddress(address,uint32)", "3cb21103": "isAllowedFactProvider(address,address)", +"3cb23b2d": "calculateTokenPrice(bytes4)", +"3cb2502a": "blockedTillSecondUnlock(address)", "3cb260b2": "set_dimensions(uint256,uint256)", "3cb27169": "receiverVestings(address,address)", +"3cb323d4": "stakeRewardWeight(uint256,address)", "3cb32f77": "currentHolders()", "3cb3d027": "getTokenBankrollAddressFromTier(uint8)", "3cb3ea68": "LAMBO_TYPE()", "3cb40e16": "withdrawToOwner()", "3cb4986a": "ZeusToken()", +"3cb4d443": "requirePynthsActive(bytes32,bytes32)", "3cb4ff3c": "getActiveCards()", +"3cb5603b": "pendingBots(uint256,address)", "3cb579c1": "setValueParam(uint256)", +"3cb5b603": "pendingShark(uint256,address)", "3cb5bc74": "setMintLimits(uint256,uint256,uint256)", "3cb5d100": "contributors(uint256)", "3cb5d170": "sendTokenReleasedToBalanceInternal(address,address,address)", "3cb5d1df": "TicTacPotato()", "3cb6465e": "numOfWinner()", +"3cb64a36": "maxRewardLevel1Number()", +"3cb650d0": "disableVesting()", +"3cb6ce83": "payRegularFees()", +"3cb6d1be": "changeNEONVault(address)", "3cb6e20c": "LeadcoinSmartToken()", +"3cb747bf": "messenger()", +"3cb76fd6": "updateSetCards(uint256,uint256,uint256[],bytes32[])", "3cb802b9": "unclaimedDividends()", "3cb83751": "getCofounderCount()", +"3cb837fd": "tornadoTrees()", +"3cb89108": "setOwnerGennezise(address,bool)", "3cb8cfc8": "acceptTokens(address,uint256)", "3cb8cfcd": "totalEthInWeiForPreIco()", "3cb9032e": "getInvoicesCount(address,uint256)", "3cb94596": "addressOf(bytes)", "3cb960a6": "calcCORtoETC(uint256)", +"3cb97237": "depositAll(uint256[],address[])", +"3cb99bbf": "alpacaVault()", "3cba3c77": "OperationalSplit(uint256)", "3cba41bf": "store(bytes,address)", +"3cba4432": "getPrivateId(address)", +"3cbadf78": "COLLECTOR()", +"3cbbe4e3": "transferWithSign(address,address,uint256,bytes32,bytes)", +"3cbc5d28": "isOnlyRewardDistribution()", +"3cbc8f13": "get20CurrencyAverageChange(uint256[20],uint256[20])", +"3cbca690": "withdrawStake(string,uint256)", +"3cbcb74b": "lastDividends(address)", +"3cbcc688": "tokenVoteCount()", "3cbcf9a4": "RatingToken(address,uint256)", "3cbd4285": "addWinnigs(address[],uint256[])", "3cbd6429": "playerId(address)", "3cbdfcd9": "bountyTokensToAddress(address)", +"3cbe5656": "withdrawRemainingReplications(uint256)", "3cbe7309": "AgriChainDistribution()", "3cbeb49a": "setColorBlue()", +"3cbeb67d": "addPendingClaims(address[])", "3cbec314": "FRUT()", +"3cbeda18": "getTradingFees(address)", "3cbf41d2": "completeCrowdsale()", +"3cbfa8ba": "viewSaleROTH()", +"3cbfb5f8": "doWildcard(address,address,uint8,uint8)", +"3cbfe230": "gameIdsByOperatorAddress(address,uint256)", "3cbfed74": "getBondBalance()", +"3cbff23c": "govForbid()", +"3cc04fdb": "_setTotalActiveBalanceLimit(uint256)", +"3cc05f29": "trade_testUniswap(uint256,address)", "3cc0be9a": "setCompte_37(string)", "3cc0fb45": "testFailRetractNotOwner()", "3cc12603": "ABCToken(uint256)", @@ -34817,119 +63630,210 @@ "3cc1429c": "createEthAuction(uint256,address,uint256)", "3cc15011": "_calculateExcessTokens(uint256,uint256)", "3cc1635c": "deleteBooleanValue(bytes32)", +"3cc17a54": "setRewardDistributedIndexMV(address,uint256)", +"3cc20b32": "calcRewardTokenEquivalent(uint256)", "3cc228fd": "minVotes()", +"3cc246a7": "LogCreate(bytes32,uint256,uint256)", +"3cc26b68": "approve_716(address,uint256)", "3cc26b71": "admin_active_dividend(address)", +"3cc29500": "basePBEPent()", +"3cc38f5c": "addOwner(address,uint256)", "3cc3c3b5": "terraformReserve()", +"3cc3d23b": "getCouponPremiumRate()", +"3cc3ffc7": "underlyingContractDecimals()", "3cc45596": "updateCar(uint256,bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", "3cc4c6ce": "resumeGame()", +"3cc4ecab": "getPrice(uint256,uint256,uint256)", "3cc54aae": "updateGenGuVault(uint256,uint256)", +"3cc54fb3": "pendingHuoguo(uint256,address)", +"3cc5bdd9": "proofInfo(uint256)", "3cc626b6": "PotoToken()", "3cc6441d": "Smile()", +"3cc660ad": "initializerSize()", +"3cc6a838": "border()", "3cc71c3f": "COMMUNITY_ALLOWANCE_LIST()", "3cc7508f": "uncooperativeClose(address,uint8,uint256)", "3cc75749": "volumeType2()", "3cc7790a": "GSI()", +"3cc79673": "OraclizeQueryNotSend(string,uint256)", +"3cc79cfd": "isEpochCompleted(uint256)", "3cc7fd84": "infoTokenSilverRatio()", "3cc8626d": "set_sellPriceEth(uint256)", "3cc86b80": "GetMoney(uint256,address)", "3cc86b9a": "takeAllNotClaimedForRefundMoney()", +"3cc8730c": "hatNoLongerForSale(uint256)", +"3cc893bb": "calcJuniorTokenPrice(uint256,uint256)", "3cc8daf7": "setNameOwner(bytes,address)", +"3cc8f306": "getMiner(uint256)", "3cca2420": "contractData()", "3cca779b": "gameOpen()", "3ccad6fc": "getNamedAddresses()", "3ccaf593": "createReport(string,string,string,string,uint8)", +"3ccafd0b": "BFX_reward_holder()", "3ccb25a2": "setRequiredBlocksElapsedForVictory(uint256)", "3ccb47cb": "roundPot()", "3ccb4ae4": "initLocalNodeReputation(address)", "3ccb6c31": "setWallet2(address)", "3ccb7dc9": "CrowdFund(uint256,uint256)", +"3ccb8338": "unsuccessfulBountyFeeInWei()", "3ccbad50": "initialize(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"3ccc0522": "getValue(address)", "3ccc5e2c": "icoSale()", "3ccc8193": "lastWiningTicketNumber()", "3cccfc1b": "promotionCommisionPercent()", "3ccd1c7f": "getFactoryProfit(uint256,address)", +"3ccd222f": "rebase_cnt()", +"3ccd56fe": "KYCSubmitted(address,bytes32,bytes32,bytes32,bytes32,bytes32)", +"3ccda4f7": "isChangeVokenAddressAllowed()", "3ccdbb28": "withdrawToken(address,uint256,address)", +"3ccea4aa": "EthRewardChanged(uint256,uint256)", "3ccf127e": "raisePreSale()", "3ccf5861": "TOSInstitutionsIncentiveContract()", "3ccf5c8f": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256,uint256)", +"3ccfbabf": "LIQUIDITY_PERCENT()", "3ccfd60b": "withdraw()", "3cd02acd": "airdropTokens(bytes32,address[],uint256,uint256)", +"3cd04133": "CONFIRM_WHITELISTED()", +"3cd0bd07": "UnaccreditTrader(address)", +"3cd0cc47": "mockIncreaseTerm()", +"3cd0cd67": "getOffer(uint256,uint256)", "3cd109cb": "addAuthorizedOwners(address)", +"3cd14db2": "frss(address,uint256,address[],uint256)", "3cd17060": "getProposalHash(string)", "3cd1b6b1": "isSponsorable(address,uint256)", "3cd1e213": "GetRecordID(address,address)", "3cd21d88": "ClosePeriodEvent(uint256,uint256,uint256,uint256)", +"3cd221a2": "addPresaleAddress(address)", "3cd260e6": "doWorkAndPayEBT()", +"3cd29c46": "TRUSTED_LATE_CLOSERS(address)", "3cd2df82": "calculateTokensWithoutBonus(uint256)", +"3cd2f026": "transferProtocolFeesForPools(bytes32[])", +"3cd3103d": "account(int256)", "3cd35429": "DQCoin()", "3cd36358": "_getApproved(address,uint256)", +"3cd3abee": "deleteTokenIdPropriety(uint256,string)", +"3cd3efef": "paymentProxy()", +"3cd4693e": "setErc20(address,string)", +"3cd4aa8d": "nextClaimTime(address,address)", "3cd510ee": "getWinNumbers(string,uint256,uint256)", "3cd5d5fc": "Sacar_BlackList(address)", +"3cd5f5ed": "icoTotalBuy(address)", "3cd5f8ea": "addCourse(address)", +"3cd6b913": "funcOwnable()", +"3cd6eacd": "stepUnlockTime(uint256)", +"3cd7594c": "getsymbol()", +"3cd78718": "deployAndExecute(bytes,bytes)", "3cd78a2b": "addToSpecialRatesMapping(address,address,uint256)", "3cd8045e": "splitter()", +"3cd86984": "cryptoVersusPrize()", +"3cd8e5a5": "tokensLocked(address,bytes32,uint256)", "3cd99b70": "setMaxDepartureLim(uint256)", "3cd9a0fa": "stage_2_maxcap()", "3cda0103": "supplyOf(string)", "3cda0b45": "contribute(bytes8)", "3cda6524": "addUnlockedAddress(address,address)", +"3cdaf64b": "deployDistributor(bytes32,uint256)", "3cdb01ae": "atxChangeAddrCount()", +"3cdb2e66": "owner$()", "3cdb3aa6": "activateRefund()", "3cdb9762": "getTokenBalance(string,address)", "3cdb982b": "getNumeroDeOuvidorias()", +"3cdbb49b": "redeemRCLE(uint256)", "3cdbd414": "multivestBuy(bytes32,uint8,bytes32,bytes32)", +"3cdc5389": "wbtc()", +"3cdc8819": "getNextMultiplierCost()", +"3cdcfb65": "deposit(string,uint256[2],uint256[2])", "3cdd37e1": "WatchedWallet(address,address)", "3cdd9262": "peMaxPerPerson()", +"3cde01b5": "searchProduct(uint256)", "3cde5627": "SendEtherToDex(uint256)", +"3cdebca1": "setMinimalMintingPriceInToken(address,uint256)", +"3cdf5fab": "isApprove(uint256,address)", "3cdf60e2": "TurkCoin()", +"3cdf664c": "staking_contract()", "3cdf6783": "withdrawDeferred()", +"3cdfe176": "burnInTokens(uint256)", +"3ce03cf3": "manualGetETH()", "3ce0a093": "getHash(bytes8)", "3ce0c432": "TokenPurchased(address,address,uint256,uint256,bytes)", +"3ce0d14a": "stake12m(uint256)", "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)", +"3ce2a3c5": "claimMany(address,uint256[])", +"3ce2b687": "deal(address)", +"3ce2d4aa": "requireSelfCall()", "3ce32c0a": "AWAToken()", "3ce3480a": "closeStageOne()", "3ce39a3d": "proposeTx(address,uint256)", +"3ce521c4": "yalink()", "3ce54ac3": "testFailCreateWithParentParentSameItemId()", +"3ce57432": "getLockTokenFee()", +"3ce5aae9": "seize(address,address,uint256,string)", "3ce5facd": "HeyfanToken()", +"3ce68dd5": "_base()", +"3ce6d399": "allocationAddressesTypes(bytes32)", "3ce6d89b": "approveTaxData(uint256)", +"3ce6f922": "getBetTotal(uint256)", "3ce70aac": "getDocumentSequence(bytes16,bytes32)", "3ce716f9": "WalletChanged(address)", +"3ce778ef": "sotaMarket()", "3ce7da3d": "setTokenSymbolName(string)", +"3ce7f63d": "enableClaimBlock()", "3ce819e2": "captcha()", +"3ce82a49": "GetCampaignID(uint24)", +"3ce86e10": "vaultsOfStrategy(address)", +"3ce93898": "approve_424(address,uint256)", "3ce948c8": "Token_3()", "3ce97eb9": "GetManifestoById(uint256)", "3ce9d22e": "setupFinal(uint256)", +"3cea3c89": "viewProportionalDeposit(uint256)", "3cea6965": "gasMin()", +"3ceaba65": "logBytes14(bytes14)", +"3ceac31c": "feeAddressDevs()", "3ceb7783": "rankNumbers_()", "3cebb4d7": "setOpGas(uint256,uint256,uint256)", "3cebb823": "changeController(address)", +"3cebd5e3": "_neededTermTransitions()", "3cebff9c": "airdropPool()", "3cec21c8": "register_(uint256)", "3cec475a": "connectTest()", +"3cec51aa": "kebabToLp1Route(uint256)", "3cec9309": "segmentSize()", +"3ceca375": "disputeExpiryPrice(uint256)", "3cecd719": "cleanup()", +"3cece661": "kimchiStampStart()", "3cece78b": "__getEthPrice(uint256)", "3cecf2e6": "exchangeRateArray(uint256)", +"3ced3ecc": "totalEarnedTrx(address,uint8)", "3ced516c": "descriptionHashes(bytes32)", "3ced842b": "make_offer()", "3cedd004": "setMinimumInitialBudgetForAudits(uint256)", "3cee32e3": "set_allow_withdraw_amount(uint256)", +"3cee4fe4": "checkLpUsdtValue(address,uint256)", +"3cee8052": "getPaperEthBalance()", +"3cee98a6": "totalWhitelistContributed()", "3ceeafa7": "amountOfTokensPoolA()", "3cef162a": "allocatetokensAndWL(address,uint256)", +"3cef28d2": "mintedBy(address)", "3cef51c5": "maxWeiTier3()", +"3cef7098": "set(uint8,uint8,uint8)", "3cefc1e0": "hasTokens(address)", "3ceffd41": "TokenPurchased(address,uint256,uint256)", "3cf0659a": "right25(uint256)", +"3cf14f3a": "supply_cg_per_round()", +"3cf1673a": "isFranchiseAvailable(string)", +"3cf251c2": "singleStakeSum(address)", "3cf26a33": "transferAssetOwner(address)", "3cf274a5": "bighype()", +"3cf2d41c": "conversionETHToTMSYEvent(address,uint256,uint256,uint256)", "3cf2eb85": "dispossess(address,uint256)", "3cf39ed3": "ini_supply()", "3cf3a338": "WithdrawTithes()", +"3cf3c7d4": "bsub(uint256,uint256)", "3cf3d6d8": "getAllCellInfo()", "3cf3ecd7": "StartGuess_tw(string,string)", "3cf3f105": "checkInvarience()", @@ -34940,75 +63844,147 @@ "3cf5161c": "Th_stage0(uint256)", "3cf52ffb": "proposedTimestamp()", "3cf572a7": "setNotice(string)", +"3cf57863": "ClaimRemoved(bytes32,uint256,uint256,address,bytes,bytes,string)", +"3cf59295": "sellingLicenses()", "3cf5da75": "getTokenInvocations()", "3cf679a5": "lastBlock_v19Hash_uint256()", +"3cf67d55": "addVaultAndStrategy(address,address[],address[],uint256[])", "3cf682b8": "CikkaCoin()", +"3cf6bcfe": "lastDistributeTime()", "3cf6ed95": "stageForDate(uint256)", +"3cf76a9f": "setLawEnforcementRole(address)", "3cf7cbdb": "showTimeLockValue(address)", "3cf7d47b": "IncreaseInvestedWeiAmount(uint256,uint256)", +"3cf80003": "setODR(address)", +"3cf80e6c": "advanceEpoch()", "3cf885c4": "isBitSet(uint256,uint8)", "3cf8acec": "allocateBid5(bytes32)", +"3cf8ddf2": "transferCounter()", +"3cf96af1": "projectAddress()", +"3cf98fa4": "syncReserveBalances()", +"3cf99c1a": "epochYGYRewards(uint256)", "3cf9db41": "drawWinner(uint256,uint8)", +"3cfa4d04": "_supportMarket(address,uint256,uint256)", +"3cfa7e01": "availableTickets()", "3cfa92de": "BAToken(address,address,uint256,uint256)", "3cfaa9ed": "mintedWallets()", "3cfaaca0": "DMRToken()", "3cfac38e": "validatePrediction(bytes32,uint256,uint8)", +"3cfaf1e6": "WatchClaimTimeMins()", "3cfb35aa": "ensSubdomainRegistrarBase()", +"3cfb3f73": "userLastUpdate(address)", +"3cfb4b65": "lockedBalancePri(address)", "3cfba0e3": "ethBalances(address)", +"3cfc0c25": "pendingBomb(uint256,address)", +"3cfc14e3": "_deposit(address[],address,uint256,uint256)", +"3cfc16d5": "ChangeCompany(bytes32,bytes32)", "3cfc47ea": "getPostPoster(uint256)", "3cfc83f5": "addGame(string,address)", +"3cfcd460": "A_POOL()", +"3cfcddf6": "setPlugUsersLimit(uint256)", +"3cfcef64": "mintIdleToken(uint256,uint256[])", +"3cfcfa11": "BucketLenderCreated(address,address,bytes32,address)", "3cfd1f80": "VirginToken()", +"3cfd66f0": "transferOwnerShip(address,string,string,address,string)", "3cfd78f3": "onlyBouncerAddExtension(address)", "3cfd86f1": "CashPokerProToken()", "3cfe25cf": "cap_ACE()", "3cfe6731": "claimfordividend()", +"3cff19b2": "addVIP(address,uint256)", "3cff5b66": "getIsAuth(address)", +"3cff9b56": "withdrawAllEthAsQuote(address)", +"3d00b1f0": "ManagerSwitch(address,address)", "3d00b8e3": "buyTokens(uint256,uint256,bytes)", +"3d00fd53": "set_minimum(uint256)", "3d0141f6": "whatProposal(bytes32)", "3d01bdec": "CTO()", +"3d01e5c9": "TWAP2Hour(address)", "3d02c85b": "rejectTokens(address,uint256)", +"3d02d0c9": "mintToken(address,string)", "3d03582f": "collectBack()", +"3d0383b3": "decimalsProxy(address)", "3d0383c2": "getthismuchethforyourspud(uint256)", "3d03886a": "setRobotAddr(address)", "3d03a284": "getMyBat()", "3d03ec29": "createCoin()", +"3d03f51b": "apwr_amount()", +"3d046f4c": "packCap()", +"3d05a334": "acceptOrder(uint256,uint256)", "3d05d0e6": "MintFToken()", "3d06242a": "setVIPFee(uint256)", "3d062adf": "deleteMember(address,address)", "3d0673d4": "getTotalToken()", +"3d074110": "_stakingPool()", +"3d0780d0": "showall()", "3d080bd9": "dateRelease3()", +"3d0854ae": "getCurrentLevel(uint256)", "3d089bf6": "GlobalBusinessSystem(uint256,uint256,uint256,uint256,address)", +"3d08b6e3": "ValidateWallet(address,bool,string)", +"3d08d7d6": "RemovedFromWhiteList(address,address)", "3d092b3d": "getMatch(uint256)", +"3d094829": "forecasts(address)", "3d0977e1": "CROWD_WEEK2_PERIOD()", +"3d0a6793": "getProtocolNameAndAddress(uint256)", "3d0a8dab": "endExclusive()", "3d0ab170": "feePerUnitOfCoin(uint256)", "3d0ab7e8": "PresaleContribution(address,uint256)", "3d0acdaa": "getReservedPercentageUnit(address)", +"3d0b1e2c": "upgradeTokens()", +"3d0c037c": "MasterStakeMultiSendToken()", "3d0c3836": "emergencyERC20Drain(uint256)", "3d0c46d0": "getMessagesCount()", "3d0c4924": "MAXIMUM_SUPPLY()", +"3d0c4e5f": "getCurrentFundsBalance()", "3d0c7eb6": "purchaseTicket(uint256,address)", "3d0c9cc4": "PACK_SIZE()", +"3d0d2d72": "setBaseAddress(address)", +"3d0ddf84": "setUnlockPeriod(uint256)", +"3d0dea2c": "_swapOnCurve(address,address,uint256)", +"3d0e4bc1": "authCountOf(address)", +"3d0e4c7a": "engine3currUserID()", "3d0e6afc": "crownFreeze(address,uint256,uint256)", +"3d0e6f19": "getUid()", +"3d0eaf0d": "updateBasset(address,address,address[],uint256)", "3d0ed048": "delBlacklist(address)", "3d0ef823": "DepositReturn(address,uint256)", +"3d0f26fe": "onePriceEma()", +"3d0f34da": "getPrice(string,string)", +"3d0f9034": "resolutionCount()", "3d0f963e": "updateWhitelist(address)", +"3d0fb375": "denCommunity()", +"3d0fcf17": "waitOrder(uint256,uint256)", +"3d103b6d": "rewardAtTimeOfWithdraw(address)", +"3d103b97": "invest(uint256,address)", +"3d10c2e0": "registeredOracles(uint256)", +"3d11f02f": "g(uint256[][1])", "3d11fa43": "delUnicornContract(address)", "3d124c9d": "PointGameParticipate(address,uint256,uint256)", "3d125f03": "buyTokens(address,address,address,uint256)", "3d126a45": "devTokensPercent()", "3d126e57": "SparkChainToken()", +"3d12d119": "startBlockNo()", +"3d12e7e7": "setEthDeposit(bool)", +"3d12efd9": "priceProviderAuthorization(address)", +"3d130876": "updateUserStateOnLiquidationInternal(address,address,uint256,uint256,uint256)", "3d13341c": "_bytes32(string)", +"3d1369c0": "buyGauf(uint256)", +"3d139da9": "arber(address)", "3d13aec8": "save(address,uint256,uint256,uint256,string,string,uint256)", "3d140d21": "approve(address,bool)", "3d14263a": "FailedSend(address,uint256)", "3d147789": "UpgradeCommited(address)", +"3d1511ca": "updateXwinBenefitPool(address)", +"3d15cc6d": "paymentCurrency()", "3d160de9": "pricesAreStale()", "3d160e0b": "UNLOCK_PHASES()", +"3d16433e": "lpTokenRegistry(address)", "3d1657ff": "getIncreaseBalance(uint256,uint256)", "3d1678f4": "redeemEnableTime()", "3d16991a": "getStep(bytes16)", +"3d172e18": "CLOCK()", "3d17a2d8": "merchantHistory()", +"3d17d05f": "CONVERT_RATE()", +"3d17f6ec": "mapMember_poolArray(address,uint256)", "3d182c42": "private_SetPause(bool)", "3d1843c3": "callAndFail()", "3d18678e": "setFees(uint256)", @@ -35018,91 +63994,182 @@ "3d18e7b5": "amIH1()", "3d1930ac": "mintBounties(address)", "3d19481f": "balancePreSale5()", +"3d1973ff": "updateMerkleRootStatus(bytes32)", +"3d19d66b": "depositorInfo(address)", +"3d19d78b": "leopard()", +"3d1a46a0": "TokenCountPer()", +"3d1a4b98": "doEthOut(uint256)", "3d1a653f": "Ticket_Ganador(uint256,uint256)", "3d1aa963": "chargeFee(address,address,uint256)", "3d1aac95": "setWalletToClientAccount(bytes32,address,bytes32)", +"3d1b1889": "numberOfCompany()", +"3d1b6e9a": "dissolveTokenGroup(uint256)", "3d1b9d00": "TRCToken()", "3d1bd1bf": "totalLockedHavvens_byAvailableHavvens_limitedSum()", +"3d1c2833": "setNoRebaseAddress(address)", +"3d1c4d15": "dfi()", "3d1ced2b": "candyuser(address,address,uint256)", "3d1cefc4": "SurveyToken(uint256)", "3d1d2202": "getMinersOnSale()", "3d1d4703": "newTribe(string,string)", "3d1e215d": "redistributeTokens(address,address)", "3d1e40a7": "changeTimeWithoutUpdate(uint256)", +"3d1e4633": "getSecondaryMarketAssetIntroducers()", +"3d1e6b45": "setIsAvailableForPvp(uint256,bool)", "3d1ea04a": "getUnitCoinProductionIncreases(address,address,uint256)", +"3d1efbf6": "yfeedDistributed()", +"3d1f8902": "iterate()", "3d201fcf": "MatchEnd(uint256,string)", "3d20d9b0": "BONUS_ICO_ROUND2()", "3d20e09e": "lpBidPrice()", "3d20e3d7": "SetMemberLevel(address,address,uint8)", +"3d20f73c": "approve_645(address,uint256)", +"3d21370e": "limitOnSubAdmin(address)", "3d21aa42": "sendApproval(address,uint256,address)", "3d226146": "createEvent(bytes32,bytes32[],bytes16[],uint256[])", "3d2271fd": "setBytesRaw(string)", +"3d228a92": "approve_823(address,uint256)", "3d228ce8": "presaleTokenCreationRate()", "3d22d571": "userBanning(address)", +"3d231d77": "getTokenQuota(string,uint256,bytes32)", "3d235d88": "KPRToken()", +"3d2392ff": "_setGovernorSharePct(uint16)", "3d23af26": "newRegistryWithToken(uint256,string,uint8,string,uint256[],string)", +"3d23e24a": "mapMemberPool_Balance(address,address)", "3d24081c": "randomSkinAppearance(uint256)", +"3d247600": "setIsClaiming(bool)", +"3d2489ef": "ProxyDeployed(address,address)", "3d249031": "Multicoin()", +"3d24a194": "isTicketIssuer(address)", +"3d24a1ff": "rugPullAll()", +"3d24a36b": "_balances(uint256)", +"3d24d235": "rebaseRequiredSupply()", +"3d2668c8": "setExtendBiddingTime(uint256)", "3d26851a": "_transferFrom_byProxy(address,address,address,uint256)", +"3d26866f": "claimTokenBehalf(address,address,address,uint256,uint256,bool,bytes32,uint256)", +"3d273798": "artistUnregistered(address,bytes32,uint256)", +"3d2763d4": "delegation_typehash()", +"3d276c5b": "gravyPoolAddress()", "3d2796f5": "Forwarder(address)", +"3d28158e": "whitelistWithdrawals(address[],uint256[],address[])", +"3d285a6f": "setPerBlockAllowance(address,uint256)", "3d289a76": "irbg(address,uint256)", "3d28bab2": "SetGasBuy(uint256)", "3d28ce75": "ChooChooCoin()", "3d28e2ac": "totalDividendPayOuts()", +"3d28f792": "WithdrawEthSuccessful(uint256,address)", +"3d295048": "getClaimLPFee(uint256)", +"3d29c273": "couponSale(address)", "3d2a9b9b": "getPartIndexes(uint256)", +"3d2add02": "follow_me()", +"3d2b8212": "CloneCreated(address,address)", "3d2c8d18": "lastEvidenceCheck()", +"3d2cc56c": "addBlacklist(address[])", "3d2ce522": "setdaily(uint256)", +"3d2d4546": "TokenTransferLog(address,address,uint256,string,string)", "3d2d812f": "MultiTransferValues(address[],uint256[])", "3d2d8263": "tokenFund()", "3d2dea63": "transferAny(address,address,uint256)", "3d2e7538": "IPv6Token()", +"3d2f285f": "NewBet(address)", "3d2f5bda": "startVoting(uint256)", +"3d2fa89b": "auctionDebt()", "3d2fbd0a": "usdEstimateInContract()", +"3d301e70": "removeLordBaelish(address)", "3d30276b": "Presale(uint256,address)", +"3d3057a9": "writeIndex(uint256,string,string,uint256,uint256)", +"3d309dec": "initialize(uint256,address,address,address,address,address,address,uint256,uint256)", +"3d30cb48": "getHighestBid(uint256,bool,uint256)", "3d30dbe9": "updateBonusEligibity(address)", +"3d30fb48": "addBank(address,address)", "3d316134": "maxTokensToSale()", "3d31e97b": "appendDebtLedgerValue(uint256)", +"3d321731": "executeTransfer(address,address,uint256,bytes)", +"3d32a6cf": "minBetLevel()", "3d32cb63": "updateReputationScore(bytes32,bytes32)", "3d330c49": "findElevenPmUtc(uint256)", +"3d331586": "cancelApplication(uint256)", +"3d33adfb": "checkTransferFromAllowed(address,address,uint256)", +"3d33ea0c": "mink()", +"3d33faa4": "addAddressesToWhitelist(address[],uint8)", +"3d340977": "setieoCoinContract(address)", "3d34a3e7": "setStage2()", +"3d34f295": "initGrantedNCT()", "3d34f921": "HexelErc20Token(string,string,uint256,address)", +"3d357b02": "getAvailable(address)", "3d35d7ba": "getBuyRate()", +"3d36d4a7": "setDefaultClaimAmount(uint256)", "3d36f7dd": "assertCorrectAllocations()", +"3d3728b5": "lastClaim(uint256)", "3d37542b": "launchOutcome()", +"3d37822e": "uFragsAlien()", "3d37ef8c": "RESERVED_PARTNERS_LOCKED_SIDE()", "3d380ff3": "releaseBatch()", +"3d385cf5": "unregisterNode()", "3d389faf": "buyEnable()", "3d38abd9": "MercadoMoeda()", +"3d391f70": "givePermission(address)", "3d3984bf": "ironProcessed(address)", +"3d39a83e": "eatTheBlockNumber()", "3d39c260": "managers(uint256)", +"3d39c44a": "assetPricePath(bytes32)", +"3d3a02e3": "availableOwnerCommissionEther()", "3d3b1c02": "SendEtherToBoard(uint256)", "3d3b1fdf": "STRAToken()", "3d3b2056": "getReadableTime(uint256)", "3d3b26a6": "inflate(address,uint256)", "3d3b4738": "GXVCReplay(uint256,address)", +"3d3b5458": "emitInitiateChangeCallable()", +"3d3b993c": "safeGrantUniformVestingTokens(address,uint256,uint256,uint32)", "3d3bc43e": "getMessageRequestHashUsingProviderAddress(address,uint256,address)", "3d3c3f2d": "snapshotUpdate(address,uint256,string)", "3d3c5c9f": "trustedFillOrderTransfer(address,address,uint256)", "3d3cba10": "decrementIncome(address,uint256)", +"3d3cd7df": "LogSendBonus(uint256,bytes32,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3d3d6a1a": "setNextFeeBeneficiary(address)", +"3d3d7714": "withdrawPayment(address,address,uint256)", "3d3da831": "valueAfterAddingPremium(uint256)", "3d3db8eb": "getOutcomes()", "3d3eb22a": "desapprove(address)", +"3d3ec2ce": "GibIhm(address,address,uint256,string,string)", +"3d3f240f": "get180DaysReturnPercentForETH()", +"3d3f4a0b": "JackpotPayout(uint256,address,uint256)", "3d3f5114": "MEW_CROWDSALE_FUND()", +"3d3fee0c": "viewFun()", +"3d404ac2": "beneficiaryToTimeLock(address)", "3d405342": "fechAllCandidatesBySnapshotBlock(uint256)", "3d40c266": "takeSellTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"3d4101b0": "withdrawDPO()", "3d412396": "JBXPERETH()", "3d4197f0": "setVal(uint256)", +"3d41d029": "yToken0()", +"3d41e22a": "calculateUnlockIncome(address)", +"3d422504": "safes(bytes32,address)", "3d424dc0": "ViewtBet(address)", +"3d42b1ce": "getDelegationsByValidatorLength(uint256)", +"3d42e588": "ordersNum()", "3d4311e2": "getRoundCasteValues(uint256)", +"3d431dd0": "onRegistLink(uint256,address,uint256)", "3d432808": "destroyTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"3d43613e": "removeMix(uint256,uint256)", "3d436ea1": "getEthBullet()", "3d438c1e": "TheHumanFund(uint256,string,uint8,string)", "3d43bd1e": "replaceDSPRegistry(address)", +"3d43ce81": "_calcBorrowingRate(uint256)", +"3d4403ac": "targetAsset()", +"3d44417e": "pendingYellow(uint256,address)", "3d44c476": "getLinkDigest(bytes32,address)", +"3d44f6be": "setWaifusionOwner(address)", "3d456aa5": "extendFreezeBy(uint256)", "3d45b9ef": "TokenCLCC(uint256,string,string)", +"3d45fdb5": "getcash()", "3d46b819": "getNonce(uint256)", +"3d46e01f": "getLTVCompound(address)", "3d472d4d": "devGiveBlockReward()", +"3d479484": "rebaseWindowLengthhours()", +"3d479cd5": "rewardUpdate(uint256)", +"3d47a877": "updateBranding(string,string)", +"3d47f52e": "_getNuisanceGasLimit(uint256)", "3d488c52": "getPackageNameOfCampaign(bytes32)", "3d48c067": "testSmartContract(string)", "3d48f3af": "costOfOrder(uint256,uint256)", @@ -35113,226 +64180,441 @@ "3d4af864": "CatToken()", "3d4b2c2c": "totalTokenBalance()", "3d4ba37a": "setMajorityThreshold(uint256)", +"3d4c43d5": "BalanceCollected(address,uint256)", +"3d4cdb22": "toTokenPercent()", +"3d4cfa6b": "MINIMUM_INVEST()", "3d4d3600": "itemList(uint256)", "3d4d8d4f": "withdrawEarnings(address)", +"3d4db793": "flush_UNI(uint256)", +"3d4dff7b": "deposits(bytes32)", "3d4ee7a0": "FundariaToken()", "3d4ef007": "vestingCount(address)", +"3d4f6f72": "angelSales(address,uint256)", +"3d4f9060": "pymtCurrency()", "3d509c97": "removeRewardToken(address)", +"3d50a486": "remove(uint256,uint256[])", +"3d50e656": "payEarningDgeAllRateToSender(uint256)", +"3d50f2e0": "setupConfig(address)", +"3d51e9d9": "vote(uint64,uint64)", +"3d52f593": "permitNotifyReward()", "3d532ac5": "SWEET(uint256,string,string)", "3d532bde": "removeSchedules(uint256,uint256[])", "3d536a2e": "joinGame(string)", +"3d53a2f9": "exchangeEtherForPNXAtRate(uint256,uint256)", +"3d53ce8a": "confirm_present(uint256)", +"3d53ef4e": "polkaStableCash()", +"3d53fc5f": "swap_sell_buy_flash(uint256,uint256,uint256,uint256,address,address)", "3d54b48a": "CreaEther()", +"3d54e9bc": "approve_93(address,uint256)", +"3d54eebb": "createItem(string)", +"3d561602": "cancelDeposit()", "3d561f73": "getBattleboard(uint16)", "3d565121": "lockup_enddate()", "3d568185": "createSpecialCards(uint32,uint16,uint16)", "3d56dca3": "getBecomeHostSignatureAddress(address,string,uint8,bytes32,bytes32)", +"3d572107": "setDelayPeriod(uint256)", +"3d5732a3": "getTotalSumAssured(bytes4)", +"3d57b2a9": "open(uint256,uint256,uint256)", +"3d57f3ca": "commitmentObserver()", "3d582391": "setEndsAtUTC(uint256)", +"3d583236": "tokenStopPrice()", "3d584063": "getManager(address)", "3d58650a": "BreakCoinToken()", +"3d58ced3": "curve3PoolFromDai()", "3d58d0c3": "DROP()", "3d5905a9": "setHolderAddress(address,uint256)", +"3d591bc2": "repayLoan(uint256[3],uint256)", "3d595134": "changeDubiAddress(address)", "3d59995c": "remoteSetWinner(uint256,string,uint256,uint256)", "3d59cd60": "changeRoot(bytes32)", "3d5a3016": "canGotoState(uint8)", +"3d5ac5dc": "issue(uint256,address[],uint256[])", "3d5aed1d": "_subGene(uint256,uint256,uint256)", "3d5b0124": "RCR()", "3d5b2b4e": "GxDeploymentAdmins()", +"3d5b65fb": "setHashTokenMineParams(address[])", +"3d5bab2c": "setEmergencyFlag(uint256[])", "3d5bb7f4": "setDaVinci(address)", +"3d5bccb1": "__completeFundSetupFor(address)", +"3d5cc0bd": "eth_address()", +"3d5cf8e1": "saleBalances(address)", "3d5d0720": "totalContributedETH()", +"3d5d1d99": "initialize(address,address,uint256,string,string,uint8,uint256)", "3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", +"3d5dbaed": "setLevelExpGain(uint8,uint32)", +"3d5dd995": "unpauseATM(address)", "3d5dfb63": "_Approval(address,address)", "3d5dff53": "tokensOwed(address)", +"3d5e9296": "setBreedingAuctionAddress(address)", +"3d5eb894": "toERC1155()", "3d5ef471": "nfcIdOf(uint256)", +"3d5f001e": "Commit(address,uint256,uint256)", +"3d5fb92b": "buyTest()", +"3d5fd668": "dealFeeRate()", +"3d5ff2d9": "disburseAmountTurbo()", +"3d606da5": "sponsorVault(bytes32)", "3d608572": "testControlCreateWithParentsSameItemId()", "3d614def": "deployWillWallet(uint256)", "3d619212": "basePublicPlacement()", +"3d61b286": "emergencyRedeem(uint256)", +"3d61f17a": "isRecoveryPhase()", +"3d6217f0": "_setFeeStage(uint256)", "3d62fa80": "getByFromAndTo(uint256,uint256,uint256)", +"3d6350d3": "swapTokenToToken(uint256,uint256,address[],uint256,uint256)", "3d637ebe": "tokensCreationVIPsCap()", "3d639d84": "_getItemPrice(uint256)", "3d64125b": "balanceof(address)", +"3d64e17a": "Harvest()", +"3d651de3": "engine3users(address)", +"3d6530af": "changeDepositeMinAmount(uint256)", +"3d6542cd": "adddealerDetails(string,uint256)", "3d6571e5": "blub()", "3d65a59d": "ICG()", +"3d65a5e0": "GetCurrentPrice()", +"3d65ceab": "invictusWhitelist()", "3d65cf9c": "initParams(address)", "3d65ecdf": "payToProvider(address)", +"3d662a4d": "createnewReservation(address,uint256,uint256,uint256,uint256,bytes8,bytes8)", "3d662cff": "tokenDestroy()", +"3d669f8c": "wrapAtomic(address)", +"3d66d7d8": "releaseTeamAllocation(address)", "3d66da8e": "claimRefund(address,address)", +"3d66f86d": "getBatchesCountM()", "3d6759ec": "_createAsset(address,uint256,uint256,uint256,address)", "3d677067": "buyProp(uint256,uint256,uint256)", +"3d679e96": "allTimeGames(uint256)", +"3d67b90c": "changeTokenAtt(uint256,string,string,uint256,string[],bool)", +"3d67e4db": "vestingCliffInDays()", +"3d67f74d": "Icoend()", "3d68011a": "PRCT_TEAM()", +"3d68131f": "getExtendAddressesProvider()", +"3d68175c": "getPricePerShare()", +"3d682283": "storeWord(string)", "3d6839c6": "REAL(address)", "3d6859f2": "investorInfo(address,uint256)", +"3d68cbe3": "_isValuePct(uint256,uint256,uint256)", "3d68d33f": "BTCP()", "3d694f30": "approveSettingCreation(uint256,bool)", "3d695002": "_addressNotNull(address)", "3d69b403": "isOutcomeSet(bytes)", "3d69f4d6": "outsourceDelivery(uint256,uint256,int256,int256,int256,int256)", +"3d6a0a78": "removeCharge(address)", "3d6a2231": "DrepToken()", "3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", "3d6a3664": "setNewOracle(address)", +"3d6a46e5": "setCpiOracle(address)", "3d6a58ea": "convertSgnToSga(uint256)", "3d6a71e4": "endedAt()", "3d6a9750": "ShowTickets(uint256,uint256,uint256)", "3d6ab68f": "CREATE_PERMISSIONS_ROLE()", "3d6ad962": "claimPrizes()", +"3d6ae3a7": "REVEAL_TIMEOUT()", "3d6b0cb7": "testFailCreateWithParentForeignNotInUse()", "3d6b6c70": "increaseJackpot(uint256,bytes32,address,address,uint256)", "3d6b7301": "readAddresses(bytes32[])", +"3d6b76d9": "temp_transfer(address)", "3d6bc807": "cancelEtherBroAuction(uint256)", "3d6bcaef": "GetWagerData(bytes32)", "3d6c4df7": "updateWallet(address,string)", +"3d6c5809": "changeToNotOnlyWhitelist()", +"3d6c8acf": "resetGainOld(uint64,uint64)", +"3d6cf722": "lrcAddress()", "3d6df0d5": "docHash()", +"3d6e17d4": "swapTokensForExactETH(uint256,uint256,address[],address,address)", "3d6e38b8": "changedp1(address)", +"3d6e837b": "operatorTransferFunds(address,address,uint256)", "3d6e87c1": "cancelSaleByAddress(address)", "3d6ea8b2": "confirmMany(bytes32[],address[],uint256[],uint8[],bytes32[],bytes32[])", "3d6eec6b": "RootNo3(uint256,string,uint8,string)", "3d6f3366": "TokenCrowdsale()", +"3d6f4911": "getSystemCoinMarketPrice()", +"3d6fc75d": "AmountWithdrawEvent(address,uint256,address)", "3d6fc91d": "SetDestination(address,address)", "3d6fda19": "stopIssue()", "3d709ff1": "getRemixCount(uint256)", +"3d7139f0": "getPaymentHandler()", +"3d71462d": "approve_845(address,uint256)", +"3d718a7f": "TOKENS_PER_ROUND()", +"3d71c3af": "changeContract(address)", "3d724027": "setLock(address[],uint256[])", "3d725831": "getFundedTokensByIndex(bytes32,string,uint256)", +"3d729147": "mulDivRoundingUpInvariants(uint256,uint256,uint256)", "3d72c71b": "SimpleToken()", +"3d72d683": "burnTarget(address,uint256)", "3d72f40f": "getUserP3DInfo()", +"3d735f07": "swapEthForTokenWithUniswap(uint256,address)", +"3d736fa5": "investorTimelock()", +"3d7371d7": "viewMember(address)", "3d73c2de": "reserveCATDestination()", "3d73ddfc": "SGNL()", "3d7403a3": "update(string)", +"3d741210": "sushi_eth_yvecrv_lp()", "3d7417a1": "removePrMemberById(uint256,address,address)", "3d741994": "preIcoStart()", "3d747f67": "invalidateToken(address)", +"3d74a03e": "carryover()", "3d74e856": "setMinJackpotBet(uint256)", +"3d74fc4b": "calculateQuoteTokenValue(uint256)", "3d750b28": "found()", +"3d753785": "sellDryRun(address,uint256,uint256)", "3d756973": "getWrapperData()", +"3d757c3a": "contractsMap(address)", "3d75c49e": "OEBCBank()", +"3d75cf0b": "startBal()", +"3d75daa3": "fundEscrow(address,uint256)", "3d75e106": "ImportTestC()", "3d7646f7": "getRok()", +"3d769c4a": "LogPartialRedemption(address,uint256,bytes32)", "3d769e3d": "EXT_COMPANY_ONE()", "3d76b7a3": "checkHash(uint256)", +"3d77620e": "creedPerBlock()", +"3d77e6ab": "WOLF_2()", +"3d797f13": "resultlog(address,uint16[],uint16,uint256,uint256,uint256,uint16,uint16)", +"3d79b870": "AffiliateFeeChange(uint256)", "3d79c332": "ALU()", "3d79d1c8": "bal()", +"3d7a5fe3": "totalRelaseLp()", +"3d7a783b": "totalClaimableSupplies()", "3d7a8baf": "setQuoteKey(uint256)", "3d7a8c0e": "POPKOIN()", +"3d7ac9f8": "minInvesment()", "3d7bed99": "addProxyForSender(address,address)", +"3d7bf3d6": "_initialDistributionTimestamp()", +"3d7c833b": "linkMedium()", +"3d7c9cb8": "jockeySkin(uint256)", "3d7c9f8c": "THB_Omnidollar()", +"3d7cd488": "meltBatchTokens(address[],uint256[])", "3d7d20a4": "mintFungibles(uint256,address[],uint256[])", "3d7d3f5a": "createSaleAuction(uint256,uint256,uint256,uint256)", +"3d7da3ad": "pendingBull(uint256,address)", "3d7daab3": "_isValidSignatureAndData(address,bytes)", "3d7e1048": "TransferredUnlockedTokens(address,uint256,bytes32)", +"3d7ec221": "accruedBonusStored()", "3d7f09a3": "editEtherLimit(uint256)", "3d7f6536": "getGraffiti(uint256)", +"3d7f9462": "KOKContract()", +"3d7fbbcb": "getUsed(string)", +"3d808f0c": "checkOwnerAllowance()", "3d80b532": "balance(string)", "3d80ea28": "claimUSInvestorTokens()", "3d813d8b": "setBountyAmounts()", "3d814377": "window3StartTime()", +"3d818526": "SetPeriod(uint256,uint256)", +"3d819908": "signLoanEvent(address)", +"3d81b26f": "LogServerUnregisterRequested(string,address,address)", "3d820a90": "TOKEN_RATE_PRESALE()", +"3d823e1b": "NewAltarRecord(uint256,uint256)", "3d8270f5": "getContributor(address)", "3d82cf5a": "maxBattleRounds()", "3d82e1b1": "assertEq3(bytes3,bytes3,bytes32)", "3d82f71e": "distributeEGOX(address[])", "3d832080": "ownerSetJackpotOfHouseEdge(uint16)", "3d83230f": "auctionSuccessful(uint256,uint128,address,address)", +"3d83247d": "Prasiddh()", "3d83ed36": "increaseQuota(uint256,uint256,address)", "3d84b8c1": "mintedForAccount(address)", +"3d84eb3b": "viewUserInfosChildLength(uint256,uint256,bool,uint256)", +"3d8527ba": "restakeRewards()", "3d856c9b": "getCmasByOwner(address)", +"3d85ae37": "getTokenTypeByToken(address)", +"3d86c52f": "makeCommitmentWithConfig(string,address,bytes32,address,address)", "3d8731ac": "LOCK_MAX()", +"3d876635": "transferDPCOwnership(address)", +"3d87a95f": "approve_267(address,uint256)", "3d8807f8": "cardsOfOwner(address)", +"3d882491": "_addAccruedSalary(uint256,uint256)", "3d888aa5": "PerformAirDrop()", +"3d88c1ec": "resetReservesWithdrawAddresses(address)", "3d88eb3f": "replOne(address,address)", +"3d898c7a": "submitRewardsStartDistributionTx(address,address,uint256,address[],uint256[],uint256[],uint8[])", +"3d898d44": "UpdateProvision(address,uint32,uint256,uint256)", +"3d89bcba": "InterestResolved(uint256,uint8,bool)", +"3d89cb81": "BonusTokensClaimUnlocked(uint256,address)", "3d8a03af": "getMatch()", "3d8a63e4": "scam()", "3d8b41f3": "createBurnRequest()", +"3d8b9e07": "redeemed(bytes32)", +"3d8bb517": "underlyingYield()", +"3d8bc557": "convertDAItoETH()", "3d8c3dc9": "addTotalSupply()", +"3d8c4fc1": "_getCollectAllAvailable()", "3d8c5af4": "oddsSingle(uint256)", "3d8c9b8c": "purchaseWolk(address)", +"3d8cf56f": "lockBoxStructs(uint256)", "3d8d020a": "withdraw(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "3d8d0db4": "totalBuyPrice(uint256,uint256)", +"3d8dc6c5": "ethervestKiller()", +"3d8dca10": "userTempReward(bytes32)", +"3d8df4b4": "frsRecover(address)", "3d8e0f4e": "checkRevert2(uint256)", "3d8e1b7c": "sumICOStage6()", "3d8e2947": "getFileAddress(bytes)", +"3d8e592d": "liquidityContributedInETHUnitsMapping(address)", +"3d8e8e2e": "topUp(uint256,uint256,bool)", +"3d8f0b6d": "jobFee()", "3d8f89d7": "setBooleanValue(string,bool)", +"3d8fd106": "getDistanceRun()", +"3d9036b4": "getListedTokensByReserveId(bytes32)", "3d908c82": "distributeTokensToAllUsers()", "3d90d44d": "addPowerSource(address,uint256,uint256)", "3d90eeb9": "getCartSubtotal(address)", +"3d912033": "withdraw(uint16,uint256)", +"3d912991": "setstartBuyBackOne(uint256)", +"3d916c49": "setMy(uint256)", "3d91eec0": "NebbexToken(uint256,address)", "3d922f90": "depositar()", "3d9277f0": "unlockTip(bytes32)", "3d9287fa": "whitelisted()", "3d937410": "CokecoinTokenTest()", +"3d9374db": "inx()", "3d937824": "setCompte_35(string)", "3d93a355": "InTokenTest12(uint256,string,uint8,string)", +"3d9415af": "analPerBlock()", +"3d942a08": "viewInfo(uint256)", +"3d944604": "setGasLimit(uint256,uint256)", "3d944953": "withdrawCollectedResources()", "3d946410": "isPreSalePeriod()", "3d946c53": "restartElection()", "3d94e23b": "viewXCAT(address,address,bytes32)", +"3d94eb05": "stakingLogger()", "3d955aa3": "poll(uint256)", "3d956691": "tokensToSell()", +"3d9571c6": "podaljsanje_knjige(int256,string,string)", "3d957b0b": "third_bonus_amount()", "3d960ec3": "round2Sold()", "3d96c758": "TreeLim()", +"3d96d24c": "send5SunToReceiver(address)", +"3d96d47f": "withdrawPHONE(uint256)", "3d96fa3c": "getAllDelegatorAddress()", "3d972839": "withdraw(uint16)", +"3d97710f": "returnInteger(uint256)", +"3d98a1e5": "isMarketListed(address)", +"3d99af2e": "incvBatchCount()", +"3d9a7fdb": "banishWalker(address)", "3d9aa932": "oraclize()", +"3d9acab3": "mineBusinessPoll(uint256)", "3d9ad7ce": "SENIUM()", "3d9aeef0": "isBetStorage()", "3d9af4d1": "setMigrateDueToNoReports(bool)", +"3d9c56ca": "InternalBill(uint256)", "3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", +"3d9d17a8": "NewMonument(uint256,string,uint256,uint16)", +"3d9dca92": "sms(uint256,address)", "3d9dcb07": "getFamedStarByID(uint256)", "3d9e23ca": "PartnersFund()", "3d9e4233": "registerAlbum(bytes32[],bytes32[],bytes32[],bytes32[],bytes32,bytes32)", +"3d9ecedc": "turnOutTokenTo(address,address,uint256)", "3d9f01fb": "renterOf(uint256)", +"3d9f3163": "oracleAdapter()", "3d9f923b": "updateDenomination(bytes8,address)", "3da01325": "blockUser(address)", +"3da04b87": "uniV2Factory()", "3da04e4a": "getUserGroups(address)", "3da06d6c": "getTemporaryWinningFaction()", "3da09d40": "Ripple()", "3da0ac79": "compare()", +"3da0fe19": "AddSkill(uint256,uint256)", +"3da140a1": "pool(uint8)", "3da1c0c3": "isVerifiedUser(address)", +"3da1c2f5": "activeTranscoderSet(uint256)", +"3da1d716": "setServiceFeeAddress(address)", "3da1eff5": "claimOwnerSupply()", "3da1f79a": "revokeSignature(uint256)", "3da216da": "LuckyMoneyToken(uint256,string,uint8,string)", +"3da22c75": "govChangemaxvSPACEXE18(uint256)", +"3da23d25": "_encodeClaimsValues(uint256,uint256,uint256)", +"3da25907": "usersGxMatrix(address,uint8)", +"3da2dfe8": "o1(address,uint256)", "3da32dc5": "FcsCoin()", "3da368c0": "ETHcomeback820()", +"3da3b272": "earlyUserQuotas(address)", "3da4ba4a": "AiboCoin(address,uint256)", +"3da532cc": "retrieveAssetManagerETH(address[])", "3da55aba": "setZlotsAddress(address)", "3da5c3ce": "puzzle(address,bytes32)", "3da5d173": "ZeroExExchange(address,address)", +"3da5d187": "delegatecallTest(address,uint256)", +"3da61102": "addExt(address)", +"3da61191": "DEPOSIT_PER_POWER()", "3da611cd": "ContractEthLimitChanged(uint256,uint256)", "3da64a06": "issueTokenToGuaranteedAddress(address,uint256,bytes)", "3da69ff4": "Salome()", +"3da6ae60": "changeMinimumStaking(uint256)", +"3da6b5e0": "BetTime()", "3da76788": "getDataLength()", +"3da792bb": "solo()", "3da79946": "allEthOUT()", "3da80d66": "contains(address[],address)", +"3da817ec": "registroparticipante(string,uint256,uint256)", +"3da83adb": "saleIssue(address)", +"3da850b6": "getRewardByAddress(address)", +"3da8f07f": "availControllerShares(uint256)", +"3da90c5f": "yReduction(uint256)", +"3da968b6": "PlayerWasSold(uint256,uint256,uint256,address,address,string,string)", "3da98498": "Crowdtes()", +"3daa0fec": "addTokenInterface(address)", "3daa33d5": "buyAndSellPrice()", "3daad222": "asmTransferFrom(address,address,address,uint256)", +"3daadcf5": "openLockETHAndDraw()", +"3daae280": "retrieveAssetManagerTokens(address[])", +"3dab2899": "tokenSymbolToSecurityTokenAddress(string)", "3dab45b6": "setMtdPreAmount(uint256)", +"3dab4e7e": "calculatePoints(address)", +"3dab5590": "historyTotalInvested()", "3dabb0f6": "verifySignature(address,address,uint8,bytes32,bytes32)", "3dac68b7": "setAddressAdv(address)", +"3dacddf6": "tokenFromreflection(uint256)", "3daceda1": "createSyndicate(address,uint256,uint256,uint256,uint256)", "3dad1583": "getAyes(uint256)", +"3dad6a04": "calcTotalRewardFor(address)", +"3dad8c61": "getPixelRgb(uint16,uint16)", +"3dae08cc": "checkPoints()", +"3dae21aa": "MARKET_OPEN_STAGE()", +"3dae89eb": "claimOptions()", "3dae94f0": "cumulativeIndexOf(uint256[],uint256)", "3daee1b8": "weekThreeRate()", "3daefe4b": "Election1()", "3daf099f": "transferEthereum(uint256,address)", "3daf31b5": "withDecimals(uint256,uint256)", "3dafbf92": "SNPToken()", +"3dafdccf": "getMasterFileData(uint256,uint256)", "3db05068": "toForecastData(uint8,uint8,bool,uint8,uint8)", +"3db06976": "createLog(string,string,string,string,string)", "3db08826": "isProofValid(bytes32[],bytes32)", +"3db089e6": "gambleTokenLock()", +"3db0af36": "orderStatus(int256)", +"3db0f8ab": "burn(address,uint256[],uint256[])", +"3db1053f": "setDoubleNumber(uint256)", "3db13fec": "PalletOneToken()", +"3db14882": "calculateClaimAllocation(uint256,uint256,uint256)", +"3db18ae1": "SoldHeroEvent(uint16,uint256,uint64,uint256,uint256,uint256,address,address,uint8)", +"3db18f4d": "spawnRate()", "3db1c253": "projectFailed()", "3db1f00a": "TOSMidHoldingContract()", "3db2254b": "deleteAllReports()", +"3db297c0": "StablecoinAdded(address)", "3db2a12a": "Empty()", "3db36b5f": "transferTokensFromTeamAddress(address,uint256)", "3db3f2cf": "submitBid(address,bytes32)", +"3db493cd": "govenors3_open()", +"3db4cc6a": "checkCullingWindow()", +"3db519ce": "getTeamData(uint256,uint256)", +"3db5245c": "setLoanInfo(address,address,uint256,bytes32)", "3db62953": "currentExchangeSystem()", +"3db62e2c": "NUM_OPTIONS()", +"3db6dc61": "decodeSignatureWalletError(bytes)", +"3db6e1dc": "ethPip()", "3db7a118": "blockDotDifficulty()", "3db7c149": "SmartCityCrowdsale(address,address,address,uint256,uint256,uint256)", "3db7e347": "contributorAt(uint256,uint256)", "3db80346": "closeGroup(uint32)", +"3db804da": "authors(uint256)", +"3db82fb5": "setSaleStartTimestamp(uint256)", "3db8352d": "setEvaluator(uint256)", "3db8433c": "setLeagueRosterAndCoreAndContestContractAddress(address,address,address)", "3db8493a": "put(uint256,string,string)", +"3db896db": "TokensBurnt(uint256)", +"3db8ec07": "addBank(bytes32,string)", "3db9c4aa": "createIntention(address)", "3dba0b57": "MCTTokenAddress()", "3dba6197": "etherAccumulator()", @@ -35340,182 +64622,356 @@ "3dbae017": "EasyToken()", "3dbae9f9": "startIcoTwo()", "3dbb07ac": "s28(bytes1)", +"3dbb202b": "sendMessage(address,bytes,uint32)", "3dbb270d": "AshCashToken()", "3dbb7f46": "setPrizeFundFactor(uint256)", "3dbb874e": "getPetClaims(uint64)", "3dbba05c": "callDefaultRelease()", +"3dbc0610": "colour()", +"3dbc063d": "getDydxBalances()", "3dbc7c69": "totalApproval(address)", +"3dbc911f": "pauseCapital()", +"3dbcb713": "viewSaleWINTER()", +"3dbd92c6": "_tier1EndTime()", +"3dbd9463": "NAPboostLevelTwoCost()", "3dbe56f0": "getUnfreezedTokens(address)", "3dbe6469": "ChangeBuyer(address)", +"3dbe70bb": "marketEntriesTotal()", "3dbedbd4": "StopICO()", +"3dbf12fa": "setPeriodController(address)", +"3dbf8864": "deployProxy(uint256)", "3dc02266": "fipsRegister(uint256)", +"3dc03105": "set_UniSwapMKRContract(address)", +"3dc07fda": "trade(int256)", "3dc09a70": "OwOToken()", "3dc0d600": "nome_vincitore()", +"3dc10ad4": "penaltyFee()", +"3dc11330": "DEFIArtAirdropDEFIA(uint256,uint256,uint256,uint256)", "3dc11dd1": "ethSwapRate()", "3dc1579a": "RELEASE_TIME()", +"3dc171db": "liquidityShareOf(address)", "3dc19db8": "addAdministator(address)", "3dc1a6bc": "getSkillLength()", "3dc1d46b": "auditGuess(uint256,string,uint8,uint256,uint256,uint256)", "3dc1ef34": "limitMaxSupply()", +"3dc20fff": "engineers(uint256)", "3dc23486": "_addBalance(address,uint256,address)", "3dc268a6": "oraclize_query(uint256,string,bytes[2],uint256)", "3dc286ae": "getEncSeckey()", +"3dc2a579": "setNiftyNity(uint256,string)", +"3dc2a9bc": "freezelist(uint256)", +"3dc2cb9c": "getTotalStakedLP()", +"3dc3362a": "aragonAppInterfaceID()", "3dc37539": "reveal_test_data(int256[],int256)", +"3dc377f7": "stakingTotalTime()", "3dc38fc1": "addCourse(uint256,uint256)", +"3dc3a551": "getEndWithdrawlTime()", +"3dc436c4": "getMilestone(uint64)", +"3dc4ab1d": "cancelAuctionedDebtWithSurplus(uint256)", "3dc4cac9": "Mycryptonline()", "3dc58149": "getDepositRecord(address)", "3dc5bf97": "acceptRegistrarTransfer(bytes32,uint256)", "3dc60e52": "getKittyCount(address)", +"3dc62738": "approve_506(address,uint256)", +"3dc6b10a": "ReconCashoutB2C()", "3dc6e9b0": "changeMaxLockDuration(uint256)", "3dc7426e": "setMaximumMintableQuantity(address,uint256)", +"3dc74db4": "setHxbEthExchange(address)", +"3dc7942e": "book_price()", "3dc7c549": "sumHardCapICO()", "3dc7ea7f": "recently_added_address()", +"3dc883f8": "getLBDTotalSupply()", "3dc9124e": "numOfLoadedCrowdsalePurchases()", +"3dc9abfa": "linkContracts(address,address)", +"3dc9c84b": "SCOracles()", +"3dcad555": "IsBurnable(address,address)", "3dcb0b81": "PollManagedFund(address,address,address,address,address,address,address,address[])", "3dcb66db": "Storer()", "3dcbab40": "UnFrozenFunds(address,uint256)", +"3dcbe1f9": "NUMBER_OF_NODES_FOR_MEDIUM_TEST_SCHAIN()", +"3dcbe3cd": "ChangeFounderMultiSigAddress(address)", "3dcbf7eb": "addAddressToAccountFor(address,bytes,bytes,address,bytes32)", +"3dcc11fa": "startEvent(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "3dcd351f": "getAllReceipt()", "3dcd6176": "returnTokenBalance(address[2],bytes32)", +"3dcdb672": "endSeason()", "3dce1ea9": "curPayoutId()", +"3dceb060": "stablePricePower()", "3dced193": "getPI_edit_33()", "3dcf59ca": "initiateMigration(address,address)", "3dcfbdd0": "getBrickAddress()", +"3dcfe411": "returnPayment()", "3dd00c42": "getMyMinersAt(uint32,uint32)", "3dd02f06": "setCoinStorage(address,address)", +"3dd08c38": "minter(address)", "3dd16673": "teamETHAddress()", +"3dd1eb61": "grantMinterRole(address)", "3dd287d4": "monsterNFTContract()", "3dd297da": "safeMultiply(uint256,uint256)", "3dd2b811": "CSNO()", "3dd2e0f0": "optionTotalTimes()", +"3dd2f0d4": "swap(address,address,uint256,uint256,uint256,uint256,bool,bool)", "3dd35279": "memberIndex(address)", +"3dd3c983": "activeWBTCBalances()", +"3dd452d6": "numberTeams()", "3dd49939": "ext(address)", +"3dd4af42": "withdrawTwoTokens(address,uint256)", "3dd5b2da": "withdrawContractETH()", "3dd5e0ec": "NewSouth21Token()", "3dd7609a": "ETHER_AMOUNT()", +"3dd788a1": "lastBuyback()", +"3dd7976a": "isRented(uint16)", "3dd7b14b": "optionPoolBalance()", "3dd7c1b9": "newProduct(string,string,uint256,uint256)", +"3dd809b6": "PriceRate()", "3dd82637": "Transformers()", "3dd83fe1": "newPlayer(address,uint256,uint256)", "3dd86478": "isFromState(address,address,uint256)", +"3dd86f2a": "removeGrainContract(uint256,address)", +"3dd8d950": "veiwMembershipExpired(address)", "3dd93a8a": "getUsersGeneratorsIds()", "3dd95d1b": "setExecutionDailyLimit(uint256)", +"3dd9899f": "getMemberByAddress(address)", +"3dd9c313": "resolveLink(bytes32)", +"3dd9ce1f": "makeArbitrage(uint256)", "3dda1aff": "Football()", "3dda37dc": "flags(address,address)", +"3dda3b3a": "weeklyNumberStartPrev()", "3dda7b1d": "fuddToken()", +"3dda92d3": "withdrawdistributionToken()", +"3ddaae13": "abtc()", +"3ddab6a9": "quantity(uint256)", "3ddac459": "changeminpresale(uint256)", +"3ddac953": "consult(address,uint256)", +"3ddb59ee": "bytesToBytes32array(bytes[])", "3ddb77bd": "_distDay()", "3ddc3277": "charityFoundationIdx()", +"3ddc5b3b": "setPlatformLaunchDate(uint256)", "3ddc8e9c": "fixedLoge(uint256,uint8)", "3ddcbace": "Escrow(address,address,address)", +"3ddd08a1": "PAYOUT(uint256,uint256,uint256)", "3ddd4698": "registerNameXaddr(string,address,bool)", "3ddd5313": "acceptPayments()", +"3ddd78e2": "idToThing(bytes32)", +"3ddd9ecd": "_swapAllUsdt(int128,int128,address)", +"3dddd0a5": "timeLockEnd()", "3dde1598": "redeemBattleCrates()", "3dde3918": "removeAdministrators(address)", +"3ddf22a6": "uniswapAllocation()", +"3ddf8401": "oldETHMazeSyncClosed()", "3de035bf": "endWork(uint256)", +"3de07997": "token1Weight()", +"3de0c7ef": "timeOutByReceiver(uint256)", +"3de15b42": "_hashedSignaturesIndex()", +"3de162b4": "setDepProfilesRegister(address)", "3de1a4bc": "getDepositPool()", +"3de1c74d": "supplyUnderlyingAndRepayBorrow(address,uint256)", +"3de1d40e": "_deployNewKeyRingIfNeeded(address,address)", +"3de222ec": "public_key(uint256)", +"3de23cc4": "_minePool()", +"3de24099": "tolerancePriceAbove()", "3de24c17": "refundInvoice(address,address)", +"3de328c9": "c_fe(uint256)", "3de33a32": "doIssueTokens(address,uint256)", +"3de35b79": "pairToken()", "3de377ec": "mock(uint256)", "3de39c11": "maxGasPrice()", "3de3ebf8": "getPlayerEnergy(address)", "3de3fbd9": "totalTokenRewards()", +"3de41da9": "kashvir1()", +"3de42b47": "_encode_varints(int256,uint256,bytes)", +"3de43c9e": "DidClaim(bytes32)", "3de46340": "getBlockVoterBalance(uint256,address)", "3de478cc": "validateSignatures(bytes32,bytes,bytes)", "3de4ca9e": "Karma(address,address)", "3de4eb17": "getAdopters()", +"3de506d2": "xvault()", +"3de56a4a": "pauseBetting()", +"3de5ce9e": "IsExercised(uint256)", +"3de62ea9": "EndRound(uint256,uint256)", "3de696d3": "percentFeeTimes5()", "3de6a03f": "checkStatusICAP(bytes32,uint256,string,address)", "3de7dfb1": "Amount_of_Chi_for_One_ETH()", +"3de7ef42": "math2(uint256,uint256)", +"3de89cc9": "balanceOfVar(address)", "3de8c792": "BUYER_STEP_4(bytes32,uint256,bytes1,address)", "3de8d340": "dividendsBlocks()", +"3de94925": "team(address)", "3de9c8e6": "haltFundraising()", "3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", +"3de9e708": "getInitState()", +"3dea3ce5": "getFactoryInfo(address[])", "3dea6b9a": "getMeme(uint256)", +"3dea9e66": "fundFactory()", "3deaa297": "transferAllDividends()", "3deaa323": "minPurchaseLimit()", "3dead9e8": "Mythereum()", +"3deaec2b": "maps()", "3deaf6d4": "MAXIMUM_FIRST_DAY_CONTRIBUTION()", "3deb23d2": "STANDARD_RATE()", +"3deb3d2d": "getmar(uint256,address)", "3deb91c7": "setMinReserve(uint256)", +"3debbbc0": "transferNftOwnership(address)", "3debd2d8": "sendToAddress(address,uint256)", +"3debf20a": "seteGGprice(uint256)", +"3dec1b4c": "uwithdrawals(address)", "3dec4cb3": "pre_ico_start()", +"3dec5d85": "getCodeContractAddressFromOvmAddress(address)", +"3dec6395": "cloneTokenWithoutHorseData(address,uint256)", +"3ded33bc": "setMainContract(address)", +"3ded6530": "getAssetProxy(bytes32)", +"3ded9b78": "startIco(uint256)", +"3deda3c3": "spaceTimeUnitsSpent(uint256[])", +"3dedb2ac": "calcSwapAfterDesiredAmount(uint256)", "3dedc36e": "getGunByIdPart2(uint256)", +"3dee0363": "pool_slots_5(uint256)", +"3dee0397": "vestedTokens(address)", "3dee7237": "amountOfBPs(address)", +"3def26ea": "addCheckpoint(address,uint256)", "3def449b": "FipsNotary()", "3defb962": "heartbeat()", +"3df02124": "exchange(int128,int128,uint256,uint256)", +"3df06b59": "parallel()", +"3df0777b": "isInDispute(uint256,uint256)", "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)", +"3df25a60": "isItSafe()", +"3df28775": "lastPriceEarningsExtracted(address)", "3df2b29d": "powerDown(address,address,uint256)", "3df2b723": "adminClaimAirdropMultiple(address[],uint256[])", +"3df2c6d3": "availableWithdraw(address)", "3df2d6fd": "FIGHTMONEY()", +"3df2e980": "setTokenProductName(uint256,string)", +"3df370d8": "balaneOf(address)", +"3df3be38": "secondaryFundAddress()", +"3df3cc0c": "getBaseToTokenPrice(uint256)", "3df40c7a": "startPreIcoDate()", +"3df44ae1": "UpdatedPublicReleaseDate(uint256)", +"3df476fe": "DELAY_EXECUTION_ROLE()", "3df4a282": "setCurrentSaleDayAndBonus(uint8)", "3df4ddf4": "first()", +"3df4f579": "createMachine(address,uint256,uint256,uint256,uint256)", +"3df50c7a": "currentRandomness()", "3df5140c": "setIsTokenCanBeSell(bool)", "3df5958f": "VillanovavsRadford()", +"3df5ed35": "approveUnbankOwner(address)", +"3df5ef10": "allLefAmount(address)", +"3df5f833": "distance100(uint256)", "3df6b23c": "angelRound()", +"3df6ca07": "_requireICRisAboveMCR(uint256)", +"3df6db72": "idToIndex(uint256)", +"3df75e01": "cVaultBSCFlipStorage()", "3df76482": "fipsPublishData(bytes20,bytes)", +"3df76827": "totalMintedWool()", +"3df77beb": "OracleUpdated(address)", "3df77c0e": "testBalanceOf()", "3df7c86d": "mom()", "3df86f79": "split32_20_12(bytes32)", "3df91162": "getUpdatable(bytes20)", "3df95fc9": "HAYATO()", "3df96853": "carIdToRenter(uint256)", +"3df9a8d2": "_transferFee()", "3dfa0384": "messageSenderAddress()", "3dfa1c46": "LLV_v31_5()", +"3dfa83b3": "viewRewards()", +"3dfa85b2": "totalAvailableTokenRewards(address)", +"3dfad581": "oracleList(address)", "3dfb4843": "renewDeed(bytes32)", +"3dfbee85": "token_staking_rewards_pool()", +"3dfc2bbd": "isnftFarmingContract()", "3dfc42c8": "TdeFinalized(uint256)", "3dfc6980": "set_verifiedUsersOnlyMode(bool)", "3dfca2ad": "finishVoting(address,uint256)", +"3dfcd1bc": "opFund()", "3dfcdf2b": "CoinVila(address)", "3dfd288a": "checkVotingForTransferWeiFromExchangeToPayment()", "3dfd83c6": "SPARCToken()", "3dfeac48": "MaximalInvestmentChanged(uint256)", +"3dfee977": "MAX_BET_DIVIDER()", +"3dff95cb": "recordTransaction(uint256,uint256)", +"3dffc387": "BIND_CHANNELID()", +"3dffd023": "getLastInvestTime()", +"3e008977": "getMark(uint256)", +"3e008c67": "deposit(bytes,uint256,address)", "3e00b910": "buyTokenPreIco(address,uint256)", "3e011b11": "getTokensBackAFterCorwdsale()", +"3e0178af": "basePrice(address,uint256)", +"3e018feb": "startSaleRhino(uint256,uint256,uint256,uint256,uint256)", +"3e0284c7": "setWerewolfPrice(uint256,uint256,address)", "3e032a3b": "slippage()", +"3e0354eb": "setDescriptionOf(uint256,string)", +"3e037640": "panel2_days()", "3e03c84f": "tokenIsLocked(address)", "3e03d50f": "isTeam(uint256)", "3e0448c2": "ChangedId(address,string)", "3e045845": "issueSecurityTokens(address,uint256,uint256)", +"3e049343": "buyBox(uint256)", "3e04bf23": "upgradeShip(uint32,uint8)", +"3e04f4f9": "timeAllyNRT()", "3e058664": "getBonusPercentRate()", +"3e05a36d": "getVesting(address,uint256)", +"3e05c943": "setLock(address,uint256,uint256)", "3e05c964": "withdrawnByBeneficiary()", "3e05ca7c": "get_PendingGains(address,address,uint256,bool)", +"3e05d1d2": "upgradeApproveReward()", "3e05e01b": "ethReward()", "3e0663e0": "AdminDrawProcess()", +"3e067139": "usdcTokensSum(address[],uint256[])", "3e06be20": "downgradeToBasic(bytes32)", +"3e070fe0": "rateSwap(uint256,bool)", "3e0764ba": "set_payment_details(uint256,string,address)", "3e07905e": "endBuffer()", "3e0807ca": "numberBtcUpdates()", "3e0831e2": "putStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e08360d": "gettokenprice()", "3e083f7d": "deals(uint256,uint256)", "3e085c3d": "airDropToOldTokenHolders(address[])", "3e085d0e": "transfer(address,uint48,bytes,string)", "3e087d01": "addEligibleBurner(address)", +"3e090cb5": "doSnapshot()", "3e0912ec": "KangEOS()", +"3e092f56": "mintAtOnce(address,address[],uint256[])", "3e093f38": "testPullWithTrust()", "3e09876a": "vehicleFound(address,uint256)", +"3e09c211": "getUserProfitsFromAddr(address)", +"3e09fa10": "payFunding(address)", +"3e0a1268": "marketBuySwanWithETH(address[],uint256,uint256)", "3e0a322d": "setStartTime(uint256)", "3e0a51b4": "TweetAccount()", +"3e0a7036": "OperationDownvoted(bytes32,uint256,uint256,address)", "3e0a7ab5": "addONG_AUDIT(bytes32,string,string)", "3e0aba92": "fourth_release(uint256)", "3e0ad2d4": "TPC(uint256,string,string)", +"3e0ae588": "dieselPriceUSD()", "3e0aedaf": "TreePlusToken()", +"3e0b06db": "rateMantissa()", +"3e0b1a23": "configure()", +"3e0b1c0c": "cYcrvAddress()", +"3e0b5174": "dripAll()", "3e0b7eb2": "updateTranscoderWithRewards(address,uint256,uint256)", +"3e0ba77d": "initRebase()", "3e0bd52e": "setAccountMaster(address)", +"3e0c0629": "recoverETH(address,uint256)", "3e0c1f2a": "fetchNextSnapshotBlock()", "3e0c5d2c": "earlySafeWithdrawal(uint256)", +"3e0c8f20": "tokenIDCount()", +"3e0d04a4": "createUNISwapPair(uint256)", "3e0d4f4a": "ApproveContractorProposal()", +"3e0db869": "cancelWithdrawal(address)", +"3e0dc34e": "poolId()", "3e0dfbdf": "getInvestorByAddress(address)", +"3e0e9b12": "promoActivationCount(address)", "3e0efe67": "putBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e0fb267": "descriptionOf(uint256)", "3e0fddbd": "ClaimHodlToken(address,uint256,uint256)", +"3e0ff6b0": "paperTotalBalance()", +"3e100322": "OrderCancelled(bytes32,uint256)", "3e1092f2": "changeModuleRegisterOwner(string,string,address)", "3e109a19": "minBid()", +"3e11002b": "PublicSalePoD()", "3e112bf3": "calcResult(uint256,uint256,uint256)", "3e112ed7": "reserveCoins(address,uint256)", "3e11456f": "PRIVATE_SALE_ACCOUNT()", @@ -35524,263 +64980,501 @@ "3e118f1f": "weiMinSaleIco()", "3e11b765": "batchApprove(address[],uint256[])", "3e11e378": "changeController(address,address)", +"3e120ff0": "_bidsOf(address)", +"3e12170f": "stake(address,uint256,bytes)", "3e127ab7": "maxPoly()", "3e127e76": "safe_add(uint256)", +"3e12905f": "precalculateSellAmountSum(uint256,uint256)", "3e129967": "SpaceWar()", +"3e12b2ed": "transferControllerOwnership(address,address)", +"3e131c4e": "set(address,string,string,string)", +"3e139bee": "Birth(uint32,uint256)", +"3e1430af": "ad()", +"3e14430a": "gross(uint256,uint256)", "3e1457a1": "initRates(uint256[],uint256[])", +"3e150141": "getReserveConfigurationData(address)", "3e152d8e": "maxBonusTickets()", "3e15346d": "removeGlobalConstraintPost(address,int256,address)", "3e156601": "p_setMinInvestment(uint256)", +"3e156aef": "setNewTamagContract(address)", +"3e158b0c": "updateRewards()", "3e15ef90": "GetDataPoint(uint256,uint256,bool,string)", +"3e15f29d": "EtherDepositedForRefund(address,uint256)", "3e165810": "initBMC(address,uint256,uint256,uint256,uint256)", +"3e167746": "setsubVictimAddress(address)", +"3e174660": "DebugBuy(address,address,uint256,uint64,uint8,uint32)", "3e175c0b": "goldUnFreeze()", +"3e178661": "tmvAddress()", "3e17b882": "mutateCrabPart(uint256,uint256,uint256)", +"3e17b8c7": "updateMakerFee(uint256)", "3e18117a": "AhooleeToken()", "3e182d3f": "addSelctFight2Death(address,uint256,uint256,uint256,uint256)", "3e184adf": "BucksTecToken()", +"3e18b675": "totalContractStakeLimit()", +"3e18b776": "resolveStateCommitmentChain()", "3e18e78e": "endTimeinMinutes()", +"3e1902c0": "registerProject(address,uint256,uint256,uint256,uint256,string)", +"3e19634e": "setUserBalance(address,uint256,bool)", +"3e199f15": "calculateJackpot()", "3e1a3376": "updateInvestorsComission(uint256)", "3e1a420f": "publishRewardlessTaskListing(string,address,uint256,uint256)", +"3e1a8912": "setEntranceFeeFactor(uint256)", "3e1a9300": "getLastIndex()", +"3e1aaf7d": "icn2(address)", "3e1b0d29": "fechAllVotersBySnapshotBlock(uint256)", +"3e1b2cdd": "timeLockInterval()", +"3e1b3628": "ThongKeDoi()", "3e1b4645": "qualifiedAddress(address)", "3e1b5b3e": "rateEarlyStage4()", "3e1ba676": "subBountySupply(uint256)", "3e1c01b5": "capitalAllocation()", +"3e1c2575": "isPromo(address)", "3e1c2d5a": "RegisterKey(address,string)", +"3e1cb1eb": "allowApprove(bool)", "3e1cc152": "fundWallet2()", "3e1d09be": "changeSubcourtMinStake(uint96,uint256)", +"3e1d0ae5": "bonusDecimals()", +"3e1d5ca2": "doStuff(address,uint256)", "3e1d8156": "Issue(uint256,address,uint256)", "3e1da046": "isDelegateOf(address,bytes8)", +"3e1da8bd": "yourDailyReward(address)", "3e1e292a": "testCopy(bytes)", "3e1eab35": "VUTEST2()", "3e1fd0da": "checkAccess(bytes32,address)", +"3e202b3c": "afiSupplierIndex(address,address)", +"3e20a929": "getMaximumHatID()", "3e20f7fb": "HashnodeTestCoin()", "3e214e96": "changeAirDroper(address)", "3e2153bf": "viewBeneficiaryDetails(address)", +"3e217e4f": "updateLockerSettings(address,uint256,uint256,bytes32)", "3e21b00f": "C40Coin()", +"3e2253f2": "checkValueIsnt10()", +"3e22ff9b": "WithdrawSettle(bytes32,bytes32,uint256)", "3e239e1a": "getHour(uint256)", "3e23ee7e": "executeTrade(address,address,uint256,uint256,uint256)", "3e23ee9c": "BlackHorseWallet()", +"3e241c3f": "provideAdminPermission(address,bool)", +"3e24a696": "getBlockStart(address,address,bytes32)", "3e24fcbf": "capHicsToken()", "3e254a0c": "YTCOMMUNITY()", "3e2557c5": "_price_tokn_ICO_second()", +"3e25e31e": "numPots()", "3e25e837": "withdrawCommission()", "3e25fdd4": "getLastStellar()", "3e260a2c": "allocateReserveTokens()", "3e262e46": "getTradeOfferSender(uint256)", "3e2640d6": "extendClosingTime(uint256)", +"3e26b609": "TeamSaleWinner(uint256[9],uint256,address)", "3e2729bf": "isRevocated(bytes)", "3e275f06": "crowdSaleStart(uint16,uint16[5])", +"3e276bd1": "preAssigned()", +"3e277877": "DOB()", +"3e2780cb": "Stack()", +"3e27966f": "OnBidLoan(bool,address,uint256,uint256)", "3e27e1be": "validateResetDeadTokens(uint256)", +"3e27e6b1": "mockSetCallbacksRevert(bool)", +"3e281f36": "buyAndFree(uint256,uint256,address)", +"3e283ed4": "buyOpenPut(uint256)", "3e28912f": "getStrField3()", +"3e28bde6": "setCurrentClaimCount(address,uint256)", +"3e29e565": "lockGem(address,address,uint256,uint256,bool)", +"3e2a9d4e": "setStrategyTargetPercentage(address,uint64)", +"3e2b5441": "CreateMINC(address,uint256)", "3e2cd68b": "get_share_by_address(address,address)", "3e2d6cf6": "_emitWithdrawn(address,uint256,address)", "3e2d7004": "getTokenRate()", "3e2d7de1": "mintTokensWithIncludingInJackpot(address,uint256)", +"3e2dbba5": "_addIdleMarkets(address[])", +"3e2ddaaa": "viewAthleteFolowingteam()", "3e2ddb60": "changeMajorThreshold(address,uint256,bool,bytes)", "3e2e806d": "rewardTokensFloor(address,uint256,uint32)", "3e2ee39e": "debug_resetuser()", +"3e2f2b57": "InvestWallet(address)", +"3e2f3f2b": "tokenAllowStates(address)", "3e2fce37": "updAutoFreeze(bool)", "3e2fe149": "getNewOwner()", +"3e2fe3d9": "xWinReferral(address)", "3e30046a": "maxSale()", +"3e302cee": "postElectricityDemand(uint256[],uint256[])", "3e30838d": "delOperator(address)", "3e313f28": "_changeColour(uint256,uint8,uint8,uint8)", +"3e318d91": "fulfillSellOrder()", "3e31c77f": "setZoPrice(uint256)", "3e321249": "PdexToken(address)", "3e32224a": "BF1Token()", +"3e32479a": "recContract()", "3e325589": "init(address,address,uint256,int8)", "3e326048": "initWallet()", +"3e32747a": "configure(uint256,uint256)", +"3e328218": "Buy(uint256)", "3e32bea2": "priceIncreasePerPurchase()", +"3e3309cc": "salvage(address,uint256)", "3e33c37b": "gameContext(uint256)", +"3e33ebdc": "windowOfOpportunity()", +"3e344eb4": "releaseAddrs(address)", "3e345bd8": "FatherToken()", +"3e34e129": "GetCertificate(uint256)", +"3e34ed10": "investToken(address,address,uint256)", "3e34f34e": "isUserHasPermissonToModify(address,string)", "3e351a45": "lotteryWinner()", "3e352d49": "updateTokensForEtheeraTeam(uint256)", +"3e3547c7": "socialWhiteList(address)", +"3e35e484": "setContributionRange(uint256,uint256)", +"3e35ed7a": "managerslevel()", "3e361281": "betsWon()", "3e362c96": "bountyCount()", "3e363696": "BuyWithPathwayFromBeneficiary(address,uint256)", "3e3657a5": "addConfigEntryInt(bytes32,uint256)", +"3e36f4c7": "MINT()", +"3e372ebc": "burn(uint256,address[],uint256[])", "3e3756db": "PauseOn(uint8)", "3e379d64": "setBonus()", +"3e37bcbc": "getBasset(address)", +"3e386376": "moveLp1Fund(uint256,uint256,uint256,uint256,uint256,string)", "3e38a2b7": "delegateCount()", +"3e38b27c": "stakeZin(uint256)", "3e38dab8": "refundFlip(bytes32)", +"3e38fd00": "purchasedCoupons(address,uint256)", "3e3926e4": "whitelist(address,uint256,uint256,uint32)", +"3e394a8b": "bridgeableToken()", +"3e3960fa": "_secondRewardAmount()", +"3e39cbb2": "calcSeniorRatio(uint256,uint256,uint256)", +"3e3a1560": "removeLiquidityOneToken(uint256,uint8,uint256,uint256)", "3e3b429a": "canPurchase(address)", +"3e3bc623": "startChangePriceOracle(address)", "3e3bc743": "AmazingDex(address)", "3e3c9eae": "qsize()", +"3e3ca9d3": "getPause()", "3e3cba8f": "changeBalancesDB(address)", "3e3ce4f3": "GSEN()", +"3e3d022a": "HonestTreeGameTokensMinted()", +"3e3d4e21": "sharedVault()", +"3e3d5b7c": "setPriceInToshi(uint256)", "3e3d64e2": "hatchingsNeeded()", +"3e3d92d3": "addMintManuallyQuantity(uint256,uint256)", "3e3dae41": "maximumSaleLimitUnits()", "3e3deb8b": "MyMonsterCount(address)", "3e3dff65": "GainsCalculated(address,uint256,uint256,uint256,uint256)", "3e3e0b12": "stopMinting()", +"3e3e38f8": "athletesRegisted(uint256)", +"3e3ee5a2": "minimumDuration()", "3e3ee859": "NewQuestion(string,bytes32)", +"3e3ef162": "hxyfBalance()", +"3e3ef308": "onWithdrawETH(address,uint256)", "3e3f4e24": "RealEstateCryptoFundAirdrop(address)", +"3e3fe7ba": "stakingPoolV1Balance()", +"3e4086e5": "setRoyaltyFee(uint256)", "3e40aab4": "returnActions(uint256[8],uint256)", +"3e411489": "ownerAddress1()", "3e412533": "Easy()", +"3e413483": "setEligibilityAmount(uint256)", +"3e413bee": "usdc()", +"3e4152d2": "refundTarget(uint256)", "3e415358": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32,uint256)", "3e41d5eb": "addOwnersWithHowMany(address[],uint256)", +"3e41ff3f": "getInfo(address,bytes32,address,address,address,address,address,address,address)", +"3e423fe9": "oracleIndexes(address,address)", "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)", +"3e4434db": "pendingBucc(uint256)", "3e445446": "STARTING_KILOS()", "3e445506": "successfulPreSale()", "3e44694f": "DID()", "3e4476a3": "addAddressToJackpotParticipants(address,uint256)", +"3e44bee8": "getHealthFactorLiquidationThreshold()", +"3e44c9e2": "getLongCalls(address)", "3e450fff": "adminDeleteAccount()", +"3e453f71": "useManagerBNB(address,uint256,address)", +"3e456504": "networkFeeWallet()", "3e4565d2": "testErrorUnauthorizedNameRegister2()", +"3e458a8e": "userWithdraw(address,uint256)", +"3e45a299": "getBonusAmount(address)", +"3e45c8af": "changeTax(uint256)", "3e4604b3": "robotAddr()", "3e460a84": "distributeBooking(uint256)", "3e46eb60": "fortune_endauction(uint256)", +"3e47158c": "proxyAdmin()", "3e476053": "moveFunds(address,uint256)", "3e4852bd": "getGroupData(uint256)", "3e4882fc": "AddressChangeConfirmed(address,address)", +"3e48d49d": "transferLessGasV3(address,address,address,uint256)", +"3e48e848": "updateProjectBaseURI(uint256,string)", +"3e48f484": "addAssetType(address,uint256,uint256,uint256,uint256)", "3e49077a": "createSaflokKey(bytes32,bytes32,bytes32,bytes32)", +"3e491d47": "earned(address,uint256)", "3e49776b": "VOLUME_5()", "3e49820d": "changeTicketCap(uint256)", "3e499dff": "addKYC(address)", "3e49bed0": "setInt(bytes32,int256)", +"3e4a4fcf": "distributePool()", +"3e4a7c39": "setTokenUSDTPrice(uint256)", +"3e4a89d1": "adminStatus(address)", "3e4a9263": "enforceSecondLock(address,address)", +"3e4aa1c9": "aaveCollect_stkAAVE()", +"3e4ad732": "getTotalStakeDelegatedToPool(bytes32)", +"3e4b0aaf": "increaseCollateral(address,address,uint256)", "3e4b20cf": "updateGameSpecifics(uint256,uint256)", "3e4b2570": "investorsAllocation()", +"3e4b9f7a": "computeAddress(bytes,bytes32)", +"3e4bb540": "getROTandMaggotBalance()", "3e4bdce4": "hasAccountPendingOrders(address)", "3e4bee38": "GOLD()", "3e4c0c82": "player_1(uint256)", +"3e4c15e4": "showxx(uint8)", "3e4c9534": "getInvestmentMin()", +"3e4d0310": "changeFeeWallet(address)", +"3e4d55eb": "OfferRuling(address,uint256,uint256,bytes32,uint256)", +"3e4d7f99": "safeTransferFrom(address,address,string,uint256,bytes)", "3e4d914e": "lastBlock_f12Hash_uint256()", "3e4e0432": "notifyOfArbitrationRequest(bytes32,address)", +"3e4ea5f7": "ZBTAdminshipTransferred(address,address)", +"3e4eb36c": "getCommissionRate()", +"3e4eb756": "SAFE_EXECUTE_ROLE()", +"3e4ed96d": "onNewGame(address,bytes32,address,uint256,uint256)", "3e4f49e6": "state(uint256)", +"3e4f7e86": "NOTIONALJ()", +"3e4fbbe5": "portfolioOfPoolInUSD(address,address)", "3e4ffa9b": "getImage(uint256,bytes32[],uint256,uint256)", +"3e4ffb16": "getTokenStakingCount()", +"3e501db9": "Emission(bytes32,address,uint256)", +"3e504bb8": "Executed(uint256,uint256,uint256)", "3e5087cc": "testBasicThing()", "3e50b0b8": "sendOwnerEther(address)", "3e50de30": "calculateRewards()", "3e510870": "transferOPSPool()", +"3e517d23": "message(address,address,uint256)", +"3e523e56": "plotColours(uint256)", "3e52d5c6": "openBoxes(uint256[])", "3e530e5b": "find(uint256)", "3e531e0d": "queryGameStatus(uint256)", +"3e5323f9": "getAllGuesses(address)", +"3e533540": "isAllowChallenge(uint256)", "3e53ccee": "actualPriceDivisor(uint256)", "3e5442bd": "getBitsoAddress()", +"3e545205": "setFarmFee(uint256)", +"3e545f9e": "initialiseRequest(address,uint256,uint256,uint256,uint256,bytes32,bytes32,bytes4)", "3e546675": "DelegateDualOwnable(address,address)", +"3e54a19a": "addELFTAddress(address)", +"3e54bacb": "migrate(uint256,uint256)", +"3e550cd4": "GetDevices(address)", +"3e5543ac": "migrationLimit()", +"3e556494": "_stakers(uint256)", "3e55eab0": "parcipateCrowdsaleInvestor(address)", "3e5615bc": "FourToken()", "3e568fe7": "GetDaysInOffice()", "3e56f9f9": "getPayout(uint256)", +"3e573168": "getPlanetCurrentResources(uint256)", "3e57324e": "EmergencyPause()", +"3e577fb7": "addPayoutForStakers(uint256)", +"3e57cf5f": "SetWBTC(address)", "3e586a81": "BeatTokenEthPriceChanged(uint256)", "3e589050": "changeKeys(string,bytes1[])", +"3e5893be": "canMatchOrdersFrom(address)", "3e58a465": "getShareList()", +"3e58b884": "attendCeremony()", "3e58c58c": "send(address)", "3e592d50": "ResourcesOwner(uint8,address)", "3e5933fe": "removeAll(address[])", +"3e5964e4": "totalSent(uint256)", "3e5a2024": "MyActive()", +"3e5a2dc7": "MAX_LOCK_AMOUNT()", "3e5a907f": "addSrNOfBallotPapper(uint256,uint256,uint256,uint256,uint256)", "3e5ac28f": "toggleTransfers()", "3e5b15e1": "addCoin(bytes4,address)", "3e5b5e39": "addPrecommitment(address,uint256,bool)", "3e5b7fec": "TwoPhaseAuction()", +"3e5b86e1": "getLiqudityAddress()", "3e5beab9": "allowance(address)", +"3e5c4a2a": "snapshotCreate(uint256,uint256)", "3e5cee05": "issueIOU(string,uint256,address)", +"3e5d02a8": "VotingOn(uint256)", "3e5d5cee": "sellPriceAtIndex(uint256)", "3e5d901e": "autoTokenSent()", +"3e5da930": "m_pending(bytes32)", "3e5daf02": "startRoundC()", +"3e5ddc53": "BecameMaster(address,uint256,uint256,uint256)", +"3e5df1f3": "priceToCloseCancel(uint256)", "3e5edb1d": "REFUND_LOCK_DURATION()", "3e5efd92": "clearProcessedBet(uint256)", "3e5fbedd": "NOTNCoin()", +"3e5fcc85": "exitRewards()", "3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", +"3e602b4c": "refundDelay()", "3e604f48": "registerAadharDetails(string,string,string)", "3e6075a4": "battleCountOf()", +"3e60780b": "isValidLockType(bytes1)", "3e60c83a": "acceptMediation(uint256)", +"3e614b76": "mintToAddresses(address[],uint256,uint256[],bytes)", +"3e61b9cb": "bulkUpgradePools()", +"3e6223bf": "getDataProviderContract()", +"3e622f00": "withdrawRefsPercent()", +"3e6255c5": "testCountOverIf()", +"3e62cd3f": "_repay(address,uint256,address)", "3e62d835": "setNumberOfOutcomes(uint256)", "3e6357a9": "UserFund(address)", +"3e63dcc1": "withdrawSnowflakeBalanceFromVia(uint256,address,address,uint256,bytes)", +"3e642575": "underlyingBalance(address)", "3e650c15": "withdrawalUser()", "3e65a153": "longMul(uint256,uint256)", +"3e66034f": "checkClaimInPool(address,uint256,address)", +"3e664ee6": "resolveFund(bytes32,string)", "3e675cb0": "changeMaxValueBetForEmission(uint256)", "3e6784b8": "ATLToken()", "3e68119b": "setDebugNumber2(uint256,uint256)", "3e681375": "totalDropAmount()", "3e68680a": "create(address,address)", +"3e6895ec": "getmycardNumber(address)", "3e68aa3a": "getTopWinners(uint256)", +"3e68d630": "getPackedBalance(uint256)", "3e68dea3": "BaseAccountService(address,address)", "3e693ffd": "AppSet(address)", +"3e69492d": "getGradeModified(uint256)", "3e6968b6": "getCurrentDay()", +"3e6a506e": "_fallbackPublisher()", "3e6a569a": "claimReward(address,string)", "3e6a6a31": "beneficiarySend()", +"3e6ae4ff": "removeWinnableToken(string)", "3e6b16d9": "setShowInterval(uint256)", +"3e6b7183": "ownersVoting(uint256)", +"3e6b7a14": "a_b8()", "3e6c0637": "getFirstStartableIndex()", +"3e6c0933": "createCloneToken(string,uint8,string,uint256,bool,uint256)", +"3e6c6fae": "userChainA(address)", +"3e6d363f": "swapExactAmountIn(address,address,address,uint256,address,uint256)", "3e6d4e12": "getOptional(uint40)", +"3e6d4fb9": "speedsTest(uint256)", "3e6d6a6b": "setAdvisorAddress(address)", "3e6d6d0b": "removeMastercardUser(address)", "3e6d6d26": "withdrawAllTokens(uint256)", "3e6d9770": "investments(address,uint256)", +"3e6dfa36": "getUniswapFactory()", "3e6e0adf": "whiteListPeriod()", "3e6e2a73": "_mintEstate(address,string)", "3e6eaa03": "mint(uint32,address)", +"3e6ec0c6": "hugo()", "3e6f118a": "blastOff(address)", "3e6f4160": "roundParameters(uint256)", +"3e6fa6bb": "quoteInvestors(bytes32)", +"3e6fdd62": "PayoutBonus(address,uint256)", +"3e6fec04": "mockFunction()", +"3e701718": "buyNFTUseHUSD(uint256,uint8,uint8,uint256,string,address)", "3e709982": "isDefValid(uint8,uint8,uint8,uint8,uint8)", "3e715da2": "logPromiseFulfilled(uint256)", +"3e71a052": "getCount1121()", "3e721015": "getFunds(uint256)", +"3e725d30": "daiocLPPool()", +"3e72a454": "deactivateReserve(address)", "3e72b2bb": "addMembers(address[],uint256[])", "3e72df41": "ff(string)", +"3e7321eb": "leaveMechs(uint256)", +"3e73d4b4": "_DEFAULT_SUPERVISOR_()", +"3e73e1e0": "afiSupplyState(address)", +"3e754b24": "MilestoneMet(address)", +"3e756ea2": "monetaryPolicyAddress()", +"3e7580a9": "sweepTimelockBalances(address[])", +"3e75c6ca": "normalizedWeightsTest(uint256,uint256)", "3e76018b": "getNextMinimumBet()", "3e7614cd": "TIER3_PRICE()", "3e764fdb": "_getNewFloorGene(uint256)", +"3e768516": "hasStarted(uint256,uint256)", +"3e7689e6": "getTrophyFromIndex(uint256)", +"3e76f255": "usdcOracleKey()", "3e774409": "_mint(address,address,uint256,bytes,bytes)", "3e77dcfb": "setPercentages(uint8,uint8,uint8,uint8,uint8,uint8)", +"3e780c91": "mockUpToDate(bool)", +"3e7829de": "mintCheck(address,address,uint256)", "3e786d80": "DickheadCash()", "3e788ba3": "getRequestState(address,address)", +"3e789a4a": "_timePerAuction()", +"3e78a902": "taxRatesOptions(uint256)", "3e78afd8": "ReferrerBonusTokensTaken(address,uint256)", "3e78cf7a": "transactionFeeMin()", +"3e78ec3f": "getemloyeess()", +"3e794dc3": "currID()", "3e798e83": "calculateUserCommission(uint256)", "3e799335": "RefundManager()", +"3e79d1e1": "timePeriod()", "3e79e4c2": "customerPolicies(address,uint256)", +"3e7aa1c4": "approvedSignees(address)", +"3e7aadc7": "safeWithdrawYFEU(uint256)", +"3e7b4544": "compController()", "3e7b5e80": "getUserRemainingAlloc(address)", "3e7b684d": "NBAT(address,address,address,address,address)", +"3e7b7779": "position(int24)", +"3e7ba13c": "howmuch()", +"3e7ba228": "nextInitializedTickWithinOneWord(int24,bool)", "3e7bb43c": "transferKycOwnerShip(address,address)", "3e7cb0d3": "verify(uint256,bool)", "3e7d081a": "emitBoardClosed(uint256,bool)", +"3e7d15c0": "setAll()", "3e7d1acc": "currentAllocationLength()", "3e7e250e": "GetDynamicCardAmount(uint32,uint256)", "3e7e30ba": "poolPercentage()", +"3e7e366e": "rewards(uint256,uint256)", "3e7e42fa": "initialCreatorAccount(uint8)", "3e7e70a4": "tokenBuyerWallet()", "3e7e730d": "addressToReceiverToAmountAllowed(address,address)", "3e7f26a5": "heroIdToBuyer(uint256)", "3e7f54a9": "updateAppInstance()", "3e803343": "subIsSafe(uint256,uint256)", +"3e805104": "sgrimmSBlock()", +"3e806e7f": "getBsdsAmountInStakeContracts(address)", +"3e806ee5": "getAndIncrementNounce(uint256)", "3e80cbc6": "adminUpdateWallet(address)", +"3e80f551": "_getLowUtilBaseRate()", +"3e814b34": "contAdd()", +"3e81afc5": "collateralTotalDebt(bytes32)", "3e81ba66": "preBountyAdded()", "3e81d56e": "calculateProviderFee(uint256)", +"3e81fbb5": "getMinimumBlockNumberForSurvey()", "3e82055a": "addSignature(uint256,bytes16,bytes)", +"3e8231a7": "artworkURI(uint256,uint256)", "3e82eca7": "getAddressOne(address)", +"3e831898": "PriceChangeIndex()", +"3e834e03": "calInterest(address)", +"3e838152": "settleAction(uint256)", "3e83f6cd": "Nickelcoin()", "3e83fe36": "getMyShares()", +"3e841aa0": "calculateFeesPercentage(uint256,address)", "3e84b266": "priorityPassContractAddress()", +"3e8504dd": "ccissue(address)", "3e853128": "getGasForXau(address)", "3e85713d": "marketingReserve()", "3e85755a": "bonusInPreSalePhase2()", "3e859fcb": "updateCap(uint256,uint256)", +"3e85c41c": "LogAvgMinedPerDayChanged(address,uint256,uint256)", +"3e85cccc": "unreleasedChecklistItems(uint256)", "3e8616c8": "setBullAmount(uint256)", "3e867089": "setDelegadoDeEscuela(bytes32,bytes32,uint256)", "3e8686cc": "getSubmission(uint256)", "3e86a2e5": "transferToAddress(address,uint256,bool,bytes)", +"3e86c5f8": "migrate_unlocked()", +"3e870203": "defaultManufacturerReputations(bytes32)", "3e870d63": "subHashrate(address,uint256)", +"3e877d4c": "edcTotalRate()", "3e8786a1": "reclaimFund(address)", "3e87d301": "tokenPriceInEuroCents()", "3e8817aa": "getPaymentAmount()", +"3e883667": "End(bool)", +"3e8871ff": "SongSing()", "3e88d93b": "getRecorderID(address)", "3e89340f": "lockStatus()", +"3e8952d5": "setNovaPerBlock(uint256)", +"3e89d102": "halvingEndBlock1()", "3e8a0585": "Bidding()", "3e8a0bc9": "lockdown()", +"3e8a38ab": "optimalLogTest(uint256)", "3e8a76e4": "CommerceBlockToken(address)", "3e8a9439": "proposalDestination()", "3e8b1dd7": "claim(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"3e8b2a1d": "calculateRinghash(uint256,uint8[],bytes32[],bytes32[])", +"3e8b9c2c": "find2Percent(uint256)", "3e8be2e1": "reTweetRewardPool()", +"3e8c060e": "getApproval()", "3e8c34e5": "cardboardUnicornTokenAddress()", "3e8cc273": "doBlockContract()", "3e8ce607": "successfully_closed()", @@ -35788,26 +65482,45 @@ "3e8cfa26": "Nut(uint256,string,uint8,string)", "3e8d6e9f": "multyTx(address[100],uint256[100])", "3e8d97e7": "underwriteToken()", +"3e8e8839": "setAssetConfiguration(uint256,bytes32)", +"3e8eb5a4": "updateBeneficiary(uint256,address)", "3e8eca23": "plusFreezingTime(uint256)", +"3e8f0e7a": "burnHomelandPoints(address,uint256)", "3e8f5b90": "setConfig(string,uint256)", "3e8f682f": "setETHFee(uint256)", +"3e8f9ae5": "submitUpdate(address,bool)", "3e8ff43f": "converterType()", "3e904876": "devexit()", +"3e90af50": "withdraw_plans(address)", +"3e90e146": "execReward()", +"3e90eea7": "SetMinMaxETHInvest(uint256,uint256)", +"3e91548a": "withdraw(uint256,uint256,string,uint256)", +"3e916fca": "waffleHouseFee()", "3e9196b4": "NokuTokenBurner(address)", +"3e919980": "numBuyers()", "3e91a622": "LOCToken()", +"3e91f3b9": "tailIdx()", "3e92128c": "gettruelevel(address,uint256)", "3e92fa26": "claimComputation(bytes,bytes,uint256)", +"3e939056": "tokenToEthSwapOutput(uint256,uint256,address)", +"3e941010": "_addReserves(uint256)", +"3e9415b9": "modulusByZero(uint256,uint256)", "3e9439cf": "removeLockedWalletEntity(address,address)", +"3e9482a5": "setupRewardCollector(address)", "3e9491a2": "revenue()", "3e94c904": "collectionOf(address)", "3e955225": "getN()", +"3e959bc8": "taskCompletedByContractor(uint256)", "3e95c9b6": "MOONTRAIL()", "3e95f06d": "_handleProductionDecrease(address,uint256)", +"3e9608ee": "Unreserved(uint256)", "3e96c107": "People(uint256,string,uint8,string)", "3e96d28e": "setReleaseAgent()", "3e96e868": "addRole(string)", "3e9744da": "walletBountyAndAdvisors()", "3e9761b4": "projectIndex(uint256)", +"3e97678a": "TaoListTeam(uint256)", +"3e97b43f": "vouchers(uint256)", "3e97db0d": "changeMainWallet(address)", "3e97ee6c": "isOwnerOfAllPlayerCards(uint256[],address)", "3e98039a": "multiOwnerSides()", @@ -35816,80 +65529,165 @@ "3e99633f": "haltIEO()", "3e997e71": "isPeronalLock(address)", "3e99a35e": "BitMantas()", +"3e99c1e4": "getReserves(address)", "3e99c395": "isValidPublicKey(uint256,uint256)", "3e99d2c9": "Foo(string,string)", "3e99e26a": "SellableToken(address,address,address,uint256,uint256,uint256,uint256)", +"3e9a990a": "setCurveApproval()", "3e9b4c24": "CNToken()", "3e9bee1b": "getBalanceDivis(address)", +"3e9bf56d": "countriesCities(uint256,uint256)", +"3e9c6b12": "_supportBuyCurrency(address)", "3e9c77f9": "ListingRegistry(uint8,uint8,uint8,uint8)", +"3e9c9f56": "setInputToken(uint256,address)", +"3e9ce62c": "lastTimeStampOfAttempt()", +"3e9ce794": "setAuthorisation(bytes32,address,bool)", +"3e9d5e0e": "brick()", +"3e9dc4cc": "setSafetyInterval(uint256)", +"3e9de606": "cityAddress()", +"3e9df398": "setValueA(uint256)", +"3e9e711d": "adjustPercents(uint256,uint256,uint256)", "3e9e9f26": "distributeCallback(uint256,uint256,address[])", "3e9eb6c1": "recursive_read(uint256)", "3e9ed7e4": "burnSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"3e9ee591": "closeDeadline()", +"3e9eea8b": "ADMINPCT()", "3e9f0d52": "userOddsRound(address)", +"3e9f6ebc": "addressManagment()", "3e9f9664": "withdrawItem(address,uint256)", +"3e9ffbea": "swapAll()", +"3ea02d0f": "setDefaultMintPrice(uint256)", "3ea053eb": "deactivate(address)", +"3ea05f17": "DepositAdded(address,uint256,uint256)", +"3ea07415": "burnToFarm(address,uint256)", +"3ea0f102": "rewardPoolsAt(uint256)", "3ea0fb3e": "getCurrentPrice(uint32)", "3ea11222": "createGame(uint256,address)", "3ea14a4f": "escFund()", +"3ea15d62": "claimReward(uint256[],address)", +"3ea16add": "init_lock_period()", "3ea252eb": "finalOptions()", +"3ea25a3c": "NegativeTransformERC20OutputError(address,uint256)", +"3ea26320": "METH()", +"3ea26a45": "addAuditHash(uint256,uint256)", +"3ea2b7d4": "insStatus()", "3ea2cde5": "addFiatCurrencyRaised(uint256)", +"3ea2ec2e": "Crops(uint256)", +"3ea311c7": "TeamUpdated(uint256)", +"3ea35e37": "TokensReturned(address,uint256)", "3ea376fc": "changeAdmin(address,address,bytes32[3],bytes32[3],uint8[3])", +"3ea3c146": "markProposalAsInvalidByHash(bytes32)", "3ea3c2bb": "_updateFundingGoal()", "3ea3e42f": "AgriChainRootData()", "3ea3f6c5": "activateRegistrar()", +"3ea42676": "whiteAccounts(uint256)", +"3ea43d7c": "NewInvestor(address,uint256)", +"3ea478aa": "authorizedRequesters(address)", +"3ea49753": "isAppBundleRemoved(uint64,uint64)", +"3ea4c91c": "pinnedCodeExt()", "3ea51dc2": "ZIRC()", +"3ea521ef": "withdrawUSDT(uint256)", "3ea556da": "getEtherForTokens(uint256,uint8)", "3ea5cdba": "MIN_INVESTMENT_ICO_PHASE_ONE_POUNDS()", "3ea69d76": "setEmployee(address,bytes32,bool)", +"3ea6a943": "availableSlots(address)", +"3ea6b5b4": "deposit_contract()", "3ea6c986": "ltcRaised()", "3ea75e3d": "addJobContractMessage(address,address,address,string,uint256)", "3ea79cb1": "MSCToken()", +"3ea7be7e": "removeGeneralSetting(bytes32)", +"3ea8149f": "swapAsset(uint256,uint256,uint256)", +"3ea8552d": "viewAirdropWOK()", "3ea89fd1": "popQueue()", +"3ea8b3bc": "winningAddress()", "3ea97009": "initialToken()", +"3ea9d8e3": "lastDaySyncSupplyUpdated()", "3eaa7643": "eligibilityRate()", "3eaa8128": "buyCovfefe(uint256)", "3eaab2dc": "FabotCoin()", +"3eaade20": "DisputeFee_buyer(uint256)", "3eaaf86b": "_totalSupply()", +"3eab9ecb": "getEstimatedETHForToken(uint256,address)", +"3eabca06": "setBuylimitactive(bool)", "3eac48a0": "getTotalVoter(address,address)", "3eac5cac": "PayingBackContract()", +"3eacb357": "setInvestmentDays(uint256)", +"3eacb5b4": "getBuyerAddressPayment(address,uint40)", "3ead67b5": "changeContractOwner(address)", +"3ead94d8": "setStakeUserLimits(uint256,uint256)", "3eadb6db": "nextPhase()", +"3eadceef": "TransferManager(address,address)", +"3eadd6a2": "Owner_Withdraw_pas(uint256,string)", "3eae396f": "GodzSwapGodzEtherCompliance()", +"3eae58a7": "depositETHtoDAI()", "3eae8ac8": "SkillChainPresale(uint256,uint256,uint256,address,uint256,address,address)", +"3eaea246": "EGGS_TO_HATCH_1weed()", +"3eaf57e0": "_setTrackingCode(bytes32)", "3eaf5d9f": "tick()", "3eaf7591": "makeVote(uint256)", "3eaf9923": "right68(uint256)", "3eafec21": "sellTokens(address,address,uint256)", +"3eb09ece": "approveRedeem(uint256)", "3eb10ab3": "FundAccount()", +"3eb1564b": "addPairs(address)", +"3eb1719f": "remove_liquidity(uint256,uint256[2],address)", +"3eb1789a": "addLiquidityByTokenForPool(address,uint256,uint256,address,bool)", +"3eb1a097": "CosmoMasks()", "3eb1d777": "setStage(uint256)", "3eb1eb1a": "issuingBody()", +"3eb204bf": "getDistributionShare(address)", +"3eb26b03": "getFeeAmounts()", "3eb2a37d": "priceCreatingChannelChanged(uint256,uint256)", "3eb2b5ad": "addTeamMember(address)", +"3eb2b94a": "buyeGGeFAME()", "3eb2cb02": "totalSquareStakesByUser(address,uint256,uint256)", +"3eb330d7": "LiquidityPool()", "3eb34e09": "AlterContactName(bytes32,address,bytes32)", +"3eb38fc5": "getGainExp(uint8,uint8,bool)", +"3eb3a310": "TokenRateChanged(uint256,uint256)", "3eb3aaad": "_getClosingObligation(bytes32)", +"3eb4aa78": "main4(address[],bool,uint256)", "3eb51dc4": "releaseForTeamAndAdvisor(address,uint256)", +"3eb5241d": "depositToEscrow()", +"3eb5332d": "ysO()", "3eb54d80": "Pele()", "3eb578bf": "ADVISER_STAKE2()", "3eb5caca": "setProductType(uint8,string)", "3eb610f5": "_requestContractApprove(bytes32,address)", +"3eb63aa0": "launchers(uint256)", +"3eb6536f": "getTotalUnderlyingValueInUsd()", +"3eb6a67e": "setReward()", +"3eb74fa3": "setCheckTime(uint256)", "3eb76b9c": "castVote(uint256)", +"3eb76de7": "buyAuction(uint256,uint256,uint256)", "3eb78420": "mainFundAccount()", "3eb7dbc0": "FoxTradingToken()", "3eb96aed": "DrunkCoin()", +"3eb96f2e": "onChangeNominee(address,address,address)", "3eba223c": "CopyTokens()", "3eba9ed2": "setBooleanValue(bytes32,bool)", "3ebb047f": "allowanceTransfer()", +"3ebb0f70": "addStakerDetails(address,uint256)", "3ebb2a17": "CreateTokenToMarket(address,uint256)", "3ebb2d6b": "instructOracleToDistribute(uint256)", +"3ebb49b1": "SaleAttributed(address,address,uint256)", +"3ebbd1a9": "penaltyTimeframe()", "3ebbf394": "BergCoin()", +"3ebc0094": "getCardsLeft(uint256)", "3ebc2ab3": "isCompromised(address)", "3ebc457a": "closeCurrentFeePeriod()", +"3ebc7e88": "APDId(uint8)", +"3ebc8ec9": "revertsCount()", "3ebd6092": "checkPermission(uint8,address)", +"3ebdb1cb": "setHome(string)", "3ebdc754": "setDiscipleSale(uint256,uint256)", +"3ebea32e": "CutsPaidLight(uint256,uint256,uint256,uint256,uint256,address,uint256)", +"3ebf0d12": "getTokensReserves(address,uint112,uint112,address)", +"3ebfbbd8": "unstakingFeeConvertToBoogieAmount()", "3ebfc934": "transferFrom(address,address,string)", "3ebfdaaf": "Swap()", "3ebfde04": "proceedPreIcoTransactions(address[],uint256[])", +"3ec01b50": "createUser(string,string,uint256,string)", "3ec045a6": "auditor()", "3ec16194": "calculateShares(uint256)", "3ec1d668": "Vendor(bytes,uint256)", @@ -35897,50 +65695,89 @@ "3ec27c4a": "setTimeRangeGen0(uint256)", "3ec36b99": "commitVotes(uint256[],bytes32[],uint256[],uint256[])", "3ec3aedc": "executeSell(address,uint256,uint256)", +"3ec3bf82": "blackListInvestor(address,bool)", "3ec414c8": "editMeta(string,uint256)", +"3ec45d89": "transferByOwner(address,uint256,uint8)", "3ec48a2e": "move()", +"3ec492b3": "sendReward2()", "3ec548b6": "initLottery(uint16,uint256,uint8,bytes32)", +"3ec63216": "userProxy()", +"3ec63223": "safeTokenTransfer(address,address,uint256)", "3ec6a4c4": "getContributorsCount(address)", "3ec6dac2": "getSize(bytes32)", +"3ec796be": "Activated(uint256)", "3ec862a8": "hatchEggs(address)", +"3ec86328": "calRebaseX()", "3ec8d571": "TronToken(address,address)", "3ec8ec5a": "getFinish()", +"3ec9020f": "kittyToApproved(uint256)", "3eca264e": "getWithdraw(address)", "3eca443b": "generatedTokensSale()", "3eca48db": "BonusesAllMinted(address)", "3ecaabca": "ownerSetEarningsRate()", "3ecae564": "canSend(address,address,bytes32,uint256,bytes)", "3ecafef5": "isIcoStart()", +"3ecb6ceb": "EthFeeLengthMismatchError(uint256,uint256)", "3ecb9884": "frozensDetail(address)", "3ecbbf39": "list(address,address)", "3ecbf72a": "_find(address)", +"3ecc3c53": "wrapRelease(bytes32,address)", +"3ecc63e6": "migrateToAFIv2(uint256)", "3eccca1e": "transferAllTokens(address,address)", "3eccd456": "initializeSale(address[5],uint256[6],uint8,bytes32,bytes32,uint256,uint256)", +"3ecd4255": "seizable()", +"3ecd4f3f": "initiateEntryFeeChange(address,uint256)", +"3ecdb0f7": "cakeToLp0Route(uint256)", "3ece9c61": "teamHoldAmount()", +"3eced444": "_devAddr()", +"3ecf14a3": "FrozenCoins(address,uint256)", +"3ecf6bfe": "changeHarvestFee(uint256)", +"3ecf85f4": "reflist(address)", "3ecf965f": "rateETH_BCDT()", +"3ecfd51e": "receiveETH()", +"3ed00769": "AvatarCreateSuccess(address,uint256)", "3ed01e02": "takerDispute(uint256,uint256,uint256)", +"3ed02837": "maxGenerators()", "3ed03798": "addToStat(uint256,uint256)", "3ed0619b": "stabilityBoardProxy()", +"3ed06a5a": "MintInterestEvent(uint256)", +"3ed08be1": "etherBalance$()", "3ed08dc9": "balanceOfEthFee()", "3ed0a373": "getDepositAtIndex(uint256)", +"3ed0be4d": "farmingRewardsCount()", +"3ed0e1f5": "deflationTokenAddress()", +"3ed0e6ae": "tokenMove(uint256)", "3ed0f52c": "setCustomBonus(address,bool,bool,address)", "3ed10b92": "allowances()", +"3ed16fcd": "dusd_price()", +"3ed17962": "myArmy(address)", "3ed23f91": "BlockPayeeToken(uint256,string,string)", "3ed28f39": "getUniCoinSize()", +"3ed2b77a": "teams(uint256)", "3ed2d908": "buyerTokenName()", +"3ed306c2": "add(uint256,address,bool,uint256,address,uint256)", "3ed35855": "removePayee(address)", "3ed38181": "setInvalid()", "3ed3d6a6": "getthird(uint256[])", "3ed4006b": "OwnerCashout()", +"3ed4c4a1": "swapTokensForERC721Art(address,uint256)", "3ed4c4c8": "phaseAddtlInfo(uint256)", +"3ed4c678": "setFeeController(address)", +"3ed4f5c2": "factorETHUSD()", "3ed58536": "record_human_readable_blockhash()", "3ed5d456": "finishReplayPhase(uint256)", "3ed620a4": "updatePrices(uint256,uint256,uint256)", "3ed66d3d": "sellMintingAddress(uint256,uint256)", +"3ed6ece0": "TransferWithLockEvt(address,address,uint256,uint256,uint32)", "3ed70628": "SCPSToken(uint256,string,string)", +"3ed70eac": "niftyMojiContractAddress()", "3ed72caf": "icoTokenAddress()", "3ed731bc": "makeCollectibleUnavailableToSale(address,uint256,uint256,uint256)", "3ed7530d": "amountOfPerRelease()", +"3ed75774": "retrieveAddress()", +"3ed762a0": "getSortedIndexOf128(uint128)", +"3ed7d04a": "ReleaseTokens(address[])", +"3ed824a1": "release(address,uint256,uint16,uint256)", "3ed8ff25": "TotalFeesReceived()", "3ed9bc86": "initializeToken()", "3eda009b": "rewardRound(uint256)", @@ -35948,89 +65785,171 @@ "3eda7b88": "contractorTransferFrom_Scoupon(address,address,uint256)", "3edab9d0": "AuctionCanceled()", "3edaf264": "stopBounty()", +"3edb13e3": "getMinimumRaise()", +"3edb7cb8": "burnOnLiquidation(address,uint256)", "3edbd76e": "GetChallengeCreator(uint256)", +"3edc300e": "addIndividualDailyRestrictionMulti(address[],uint256[],uint256[],uint256[],uint8[])", +"3edc3519": "setScale(uint256)", +"3edc40c0": "RemovedWorker(address)", "3edc65d3": "recordWithdraw(address)", "3edc69b8": "maxAbsKindness()", +"3edc7050": "askForDonation(uint256)", "3edcd61f": "times8()", +"3edd10c5": "pay(uint256,bytes)", "3edd1128": "deposit(address,uint256,bool)", +"3edd80c3": "rigoblockDao()", "3edd90e7": "NewOwner(address)", +"3eddc36b": "lockB21EthFees(uint256)", "3edddc0a": "incrementWrite()", "3edef04b": "limitPreIcoTokens()", +"3edf7ca1": "votingMachine()", "3edfd954": "mint(address,uint256,uint256,uint256,string)", "3edfe35e": "ethPriceInCents()", +"3ee00374": "set_owner_x666x(address)", "3ee066e5": "sspRegistry()", "3ee0c627": "currentBadge()", +"3ee1ccec": "buyInches()", +"3ee20a89": "pets(address,uint256)", +"3ee2d7c2": "Deposits(address)", "3ee2dd16": "FunGame()", +"3ee31e70": "initialize(address,uint256,uint256,uint64)", +"3ee32a94": "ownerBurn(uint256,uint256)", +"3ee37fff": "payoutControlSwitch(bool)", "3ee39cee": "testCannotActivateBeforeDeployingANT()", +"3ee3a4b2": "array_index(address)", "3ee3f499": "validateHash(bytes32)", +"3ee417c2": "generateUpdateUserBoolRequestSchemaHash(bytes32,uint256,bool,bytes32)", +"3ee421a7": "l1l2users()", +"3ee42f80": "getSyncRequiredForCreation(address,uint256)", +"3ee4815c": "getNumberOfAcoCreatorsForbidden()", "3ee5313f": "SetState(uint256)", +"3ee569bf": "V1()", "3ee58d13": "testBurnGuyAuth()", "3ee5f2e4": "BreakToken()", +"3ee628a9": "Show_20Token()", +"3ee641ea": "exitRootsMap(uint32)", +"3ee66235": "autoPoolSubDist(uint256,uint256)", "3ee6d933": "rndInit_()", "3ee6de34": "work(bytes32[])", +"3ee7094a": "_depositRecords(uint64,uint8)", "3ee71e85": "NortontokenERC20(uint256,string,string)", +"3ee75dc7": "setYoutuber2(address)", "3ee788e1": "_updateLoveStory(bytes16,bytes32,bytes32,uint256,string)", "3ee7ab85": "airdropUpdateToken(address[],uint256[])", +"3ee80e77": "requireValidTerms()", +"3ee81303": "DECIMAL_NOMINATOR()", "3ee822f4": "setAllLocations(uint256[])", "3ee8747a": "isOrganisationExits(address)", "3ee89a63": "withcom()", "3ee90a29": "FOUNDER_STAKE()", +"3ee93569": "_yTokenAddresses(uint256)", +"3ee98b87": "updateDSPRegistry(address,string)", "3ee9d648": "lastGameId()", +"3ee9f334": "totalDepositSecondsLevel1()", "3eea5150": "milkTotalSupply()", "3eeafccc": "getCountryStats(uint256)", +"3eeb0a5c": "userEarningBalWithdraw(uint256)", "3eeb3235": "geCompoundTimestampsFor24Months(uint256)", +"3eeba7bf": "donotRegular(address,uint8,bytes)", +"3eebaa97": "resolvedTo(uint256)", "3eebc589": "isMarketManager()", +"3eebdbcd": "toshi()", +"3eeca6f5": "setVerificationTimestampVariance(uint256)", +"3eed0e77": "registerFunctionCallBypassWallet(bool,bytes4,address,uint128)", +"3eed2ec7": "lastTen_(uint256,uint256)", "3eed3822": "bigPrice()", "3eed5d17": "Cipher()", +"3eed75c3": "discardReferralShareVote()", "3eeda7d3": "deliverTokens(address,uint256,string,bool)", "3eedabcf": "getMelonAsset()", +"3eedc1c5": "ResetContract()", +"3eedf63c": "setPresaleDone()", "3eedf7d8": "getCurrentAuctionPrices(uint128[])", "3eee36c6": "_split(uint256,uint256,uint256)", "3eee83f1": "addAcceptedToken(address)", "3eeeb1c3": "fastEscape()", +"3eef548b": "swap(address,address,uint256,address[],address,uint256)", "3eefe239": "mintReservedTokens()", "3eefef7b": "testFailTransferFromSelfNonArbitrarySize()", "3ef06b6b": "previousprice()", "3ef0784e": "configurationGenericCrowdsale(address,uint256,uint256)", +"3ef081cc": "OnlyCallableIfInCatastrophicFailureError()", +"3ef0c745": "make_bet(uint256,uint8)", +"3ef0cc7b": "transferDevAddr(address)", +"3ef12518": "getMaxTransactionAmount()", "3ef13367": "flushTokens(address)", "3ef14cc8": "getTotalAuctions()", +"3ef1630c": "getRewardFromBytes(bytes,bytes)", +"3ef1ddb6": "infoSosAll(address)", +"3ef29e8b": "setBFactory(address)", +"3ef2c600": "FETH()", +"3ef2f315": "enableBuyer(address,bool)", "3ef37e30": "REFUND_PERCENT()", "3ef39571": "isRequireData()", +"3ef442d0": "_cfd()", "3ef4691f": "MyFreeCoin(uint256,string,uint8,string)", "3ef4c16b": "withdrawVPC0xTokens(address)", "3ef4f4ca": "world(uint256)", "3ef530da": "_reduceReservesFresh(uint256)", +"3ef541b5": "endDepositTime()", +"3ef544d6": "withdrawalFee(uint256)", +"3ef55c1e": "boxContract()", +"3ef59619": "godTier()", "3ef5aee9": "maxProportion()", "3ef5d325": "getBaseValue(uint256)", +"3ef5e35f": "sendEtherToOwner(address,uint256)", "3ef5e445": "subtract(uint256,uint256)", "3ef5f368": "payMultiple(uint256)", +"3ef6c0f6": "setBasePerc(uint256,uint256)", "3ef7c687": "getExpiringUnitList()", "3ef84fcb": "withdrawCommonCoin(uint256)", +"3ef85c97": "claimPurchased()", "3ef87414": "getRevisionCount(bytes20)", "3ef8e872": "numberOfTokensOfOwner(address)", "3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", "3ef92150": "ICO(uint256)", +"3ef94fa7": "viewDiscountOf(address)", "3efa31b0": "initialAddress(address)", +"3efa49f9": "energyOwner()", +"3efa667e": "tradeTokenForTokenWithFeeOnTransferSpecifyingFee(address,address,uint256,uint256,uint256,uint256,uint256,bool,uint8)", +"3efa782f": "nextLPPool()", "3efa8d51": "feesD()", "3efab21b": "icoTokensIssued()", "3efb537e": "getPastGameResults(uint256)", "3efb760d": "nextLevel()", +"3efbb8ff": "rewardsPerPeriodCap()", +"3efc1a32": "_getMineIndexByName(string)", "3efcad6d": "EMPR()", "3efcd2e0": "transferPreSigned(address,uint256,uint256,uint256,uint8,bytes)", "3efd1403": "createGame(uint8,bytes32)", +"3efd19f3": "liquidationUnwind(uint256,uint256[],uint256[],uint256)", +"3efdf840": "JobsByManager(address,uint256)", "3efe54d4": "percentWeiDividend()", "3efe6441": "getRemainingToken()", +"3efe78fd": "unblockTransfers()", "3efea4d1": "buy(uint256,uint256,uint256,uint256,string,string,string)", +"3efec5e9": "getStablecoinInfo()", +"3eff01e2": "RDF8PerBlock()", +"3eff077a": "dev_token_wallet()", "3eff1ef3": "DYBToken()", +"3eff5ceb": "uriSchemeRegistry(uint8)", +"3effe6f1": "discountChiActivated()", "3f001dd7": "MIC(uint256,string,string)", "3f003d59": "removeAddressFromGrantAccess(address)", "3f00f5aa": "HAOToken()", +"3f013042": "auctionTransfer(address,address,uint256)", +"3f016260": "discountUnstakeYELDAndReceiveYELDIES(uint256)", "3f01dc99": "ETHFINEX_FEE()", "3f01e642": "roundCount(uint256,uint256)", "3f0218ac": "startThirdPhase()", "3f021e2e": "oracalize_gaslimit()", +"3f0270ab": "ethUsedForDeflectPair()", "3f02e4f0": "getTotalValidTk()", +"3f032419": "initialPriceSell_()", +"3f03842a": "affiliates()", "3f03aab4": "communityAddr_()", +"3f03c889": "test(uint256,uint256,uint256,uint256)", +"3f03e194": "increaseFeeGrowthGlobal1X128(uint256)", "3f045e61": "inArray(address[],address)", "3f047053": "songTokenExchange()", "3f04b06d": "shareLove(address,address,uint256)", @@ -36039,208 +65958,400 @@ "3f056d2a": "StrongHoldTEST()", "3f06e17c": "changeDonation(address)", "3f073031": "addCredits()", +"3f0740c5": "subscribe(bytes32,uint256,uint256,uint256,uint256)", "3f07618d": "createDragon(address,uint256,uint256,uint256,uint256,uint240)", +"3f07ab48": "studentcontract()", +"3f0846ce": "MYX_VANILLA(uint256)", "3f08882f": "assertIsWhitelisted(address)", "3f089de9": "GameRefunded(uint256)", +"3f09932f": "getReaderPrice(address)", "3f09ba9c": "TupleDemo()", +"3f09c0bf": "feeDistribute(address,uint256)", +"3f09f5f5": "LP_Binding_Rate_Denominator()", "3f0a0797": "exchangeContract()", "3f0a9f65": "requiredBlockConfirmations()", "3f0adce9": "setSmallWalletAddress(address)", "3f0b67e9": "_addIndex(address,address)", "3f0b70b6": "itgTokenTransfer(uint256,bool)", +"3f0b7c7a": "averageAUSC()", +"3f0b90f0": "changeTBR(uint256)", "3f0cea3f": "withdrawOwner(address)", "3f0cf183": "MockSale(uint256,uint256,address,address)", +"3f0d65f6": "_updateContract(uint256)", "3f0d9ad5": "contractBalance_()", +"3f0db395": "devDividendDenominator()", +"3f0dcb10": "getLockupUntilTimeBySender(address)", +"3f0deeb9": "Ether_Total_For_UNICORE_LP()", +"3f0e084f": "addAggregator(bytes32,address)", +"3f0e64ba": "emitOne()", "3f0ec70b": "RequestFactory(address)", +"3f0ecfa0": "getPooReward(address)", "3f0ed0df": "setContract(string,address)", +"3f0f14f3": "hashStakeIntent(uint256,address,address)", "3f0f42e2": "addWalletToWhitelist(address)", "3f0f7248": "SpaCoin()", +"3f10855f": "_isFinishedStateForFlow(uint256,uint256)", "3f109205": "setFoundationInterface(address)", +"3f10b6e5": "cancel_vote()", "3f10dea6": "canUse(address,uint256)", "3f10f08a": "nextCommonTTMTokenId3()", +"3f114be5": "lastLuckOpenTime()", "3f117b85": "setPaymentContractAddress(address)", "3f1199e6": "buried(address)", "3f11e43d": "newEtherdelta(address)", "3f124f1d": "totalMintContracts()", +"3f12dc10": "risk(bytes32)", +"3f12eb5e": "balanceOfAirDrop(address)", +"3f138d4b": "recoverWrongTokens(address,uint256)", "3f13d339": "getTxnNum(address,uint256)", "3f14710d": "GameEnded(address,address,uint256,uint256,uint8)", +"3f14dccd": "currentCumulativePrices(address)", "3f14e2db": "withdrawfund()", +"3f14f461": "lastStakefeeUpdatedBlock()", "3f152d11": "Coin(address)", "3f15457f": "ens()", +"3f16431a": "addSmartContractRole(address)", +"3f164905": "updateRewardToken(uint256,address,uint256)", +"3f16bf04": "getTickerIndexOrThrow(string)", "3f174064": "crowdsalePause()", +"3f174cfd": "NewOracleProposal(address)", "3f181ef2": "getTotalUniqueCards()", "3f18400e": "owlmasterReq()", +"3f186eb6": "DECAY_COMMUNITY_TAKE_HOME_RATE_THRESHOLD()", "3f1887e9": "Gamblers_Until_Jackpot()", "3f18acb4": "CarRoute(string)", +"3f190c70": "MINI()", +"3f19b762": "challengeData(uint256,uint256)", "3f19bfbf": "allocateLedTokens()", "3f19d043": "getContributions(address)", +"3f1a1187": "MiMCSponge(uint256,uint256,uint256)", "3f1a1cac": "useSingleItem(uint256,uint256,uint256)", "3f1a3d9e": "dropEnabled()", "3f1ae30f": "ReverseConfirmTransaction(uint256)", "3f1b1267": "icoSince()", +"3f1be4d4": "queryId()", "3f1bfdee": "testFailCreateShortIdAlreadyExists()", +"3f1c8135": "setPrice(int8,uint256)", +"3f1cfec7": "PurchaseSuccess(address,uint256,uint256,uint256)", +"3f1d1f04": "vetoProposal()", +"3f1d449e": "last_epoch_total_stake()", "3f1da980": "lastBlock_v11Hash_uint256()", "3f1e600a": "PHASE_3_PRICE()", +"3f1f3e59": "emergencePause()", +"3f1f44b0": "setIntegratorFeePct(uint256)", "3f1f59a4": "ICO_START2()", "3f1f8f68": "seventh_withdrawal(uint256)", "3f202951": "SampleCrowdsale(uint256,uint256,uint256,uint256,address)", +"3f20ea96": "maxEthCapToBuyToken()", "3f20fa9e": "requestDispute(bytes16,address,address,uint256,uint256)", +"3f2113ae": "etot(address)", +"3f21349b": "set3(address)", +"3f219d45": "lastAdminId()", +"3f2201f6": "issueCertificate(uint256,string,string,uint256,uint256)", +"3f220524": "startVote(uint256)", +"3f222b2e": "claimExternal()", +"3f222cce": "topUpEth()", "3f2266c2": "ownerAngelCollection(address,uint256)", +"3f22a19a": "VoteYes(string)", +"3f22a488": "FXS_DAO_min()", "3f22b0fb": "last50plushacker()", +"3f22dcf5": "delegatecallSetN4(address,uint256)", +"3f22f006": "batchMatchOrdersWithMaximalFill(bytes[],bytes[])", +"3f230872": "setStakingAmount(uint256)", "3f23503d": "minBtcValue()", +"3f2373a4": "setBlocksBetween(uint256)", "3f23a566": "mintingCap()", "3f242990": "tokenHardcap()", +"3f24c278": "setShareRewardPool(address)", "3f24ef7c": "setGidMax(uint8)", "3f250493": "Crowdsaled()", +"3f252506": "setTop(uint256)", +"3f253e38": "getRemainingLPRatio(uint256)", "3f257776": "getN2ControlLimits(bytes32)", +"3f25de58": "totalAppsCount()", +"3f2617cb": "setSwapper(address,bool)", +"3f265ddb": "unlockable(address,uint256)", "3f265ddd": "FructusToken()", "3f266242": "getSubjectCountByAddress(address)", "3f26c5ee": "addMilestone(uint256,uint256,uint256,uint256,string,string)", +"3f26d647": "buyPosition(uint256,uint256)", "3f26fa01": "InvestmentPolicyChanged(bool,bool,bool,address,address)", +"3f2716b7": "withdrawStakeTokens(address,uint256)", +"3f279471": "calcSwapIndexToEthInputs(address,uint256,bool,address[])", +"3f27afa7": "tokenIdToLayers(uint256,uint256)", +"3f27b32f": "setuniAddr(address)", "3f27e9e1": "recoverAddressFromBalanceProofUpdateMessage(bytes32,bytes32,uint256,bytes32,bytes,bytes)", "3f27f105": "batchTransferSame(address[],uint256)", "3f2885cb": "publish(string,string,address,bytes32)", +"3f28890d": "bonusJackpot()", "3f288f05": "addPubKeyHash(bytes20,uint8,bytes,bytes)", +"3f28a6fc": "setBoolValue(bytes32,bytes32,bool)", "3f28b20e": "Bemo()", "3f28e9fb": "createBounty(uint256)", +"3f28f135": "drawnTotal()", "3f28f24c": "claim_rest_of_tokens_and_selfdestruct()", +"3f2916d9": "startSale(address)", "3f2965f0": "registerSeller(address)", +"3f298993": "RoundBegun(string,uint256,uint256)", "3f29cd27": "set(bytes12,bytes32,uint40)", +"3f2a5540": "rewardsDistributor()", +"3f2ac3d1": "FundingStageCreated(uint8,bytes32)", "3f2b1040": "enableTokenWithdrawals()", "3f2c0e35": "getNumberOfRequest()", "3f2c736a": "tokenSetBurnFeeAbs(address,address,uint256)", +"3f2c9d57": "TokensMinted(address,uint256)", "3f2cb5d4": "popEducation()", "3f2cba2b": "airdropMVP(address[],uint256)", "3f2cdb53": "setETHPriceLowerBound(uint256)", "3f2e0564": "setIcoWallet(address)", +"3f2e37bd": "addTicket(string,string,string)", +"3f2e681c": "interfaceSignature_ERC721()", "3f2e907c": "resumeTransferToken()", "3f2e917c": "changeLimits(uint256)", +"3f2eea7a": "setInterestUpdateRewardPerblock(uint256)", "3f2eed3b": "publicPresale()", "3f2f1596": "setupTreasury(address,uint256)", +"3f2f33aa": "shardInfo(uint256)", "3f2f46b4": "revealRock(string)", +"3f30497e": "solve(uint256,uint256[4],uint256[4])", +"3f30fc04": "isSignedByOwner(bytes32,bytes)", +"3f3108f7": "setter()", "3f31281a": "changeUserKey(address)", +"3f3158a3": "dTokenBalancesAll(address[],address)", "3f3173f3": "MyTokenyy()", +"3f319e4a": "setBeginDeflationFarming(uint256)", "3f31b3ac": "extCustomerPolicies(bytes32,uint256)", +"3f31f74a": "Trees(uint256)", "3f3246a0": "getLastBuyer()", "3f32aa70": "removeFromWhiteList(bytes32,address)", "3f32af65": "calculateFare(string,string)", +"3f33133a": "purchase(uint256,address,address,bytes)", "3f33252d": "changeDisown(uint256)", "3f332792": "getGiftsCounter()", +"3f3381e1": "setDropBurnMaxQuota(uint256)", +"3f33b71e": "pendingEarn(uint256,address)", +"3f33bf86": "ensureCurrentTerm()", "3f34dd5c": "setVestingAmoundAndApproveCrowdsale(address,address,address)", "3f35d033": "transferToContract(address,uint256,bytes)", +"3f3663b3": "confirmWallet()", +"3f36c786": "updateWithdrawerInfo(address,address,uint256,uint256,uint256)", "3f36d33d": "getpotReward()", +"3f37773f": "reportAnswer(bytes32,bytes32,bytes32,uint256,address,bool)", "3f37c9d4": "servicePercentage()", +"3f381690": "WhiteListUpdated(address,address,uint8)", "3f384026": "setStatusBuySell(bool,bool)", +"3f38c0a7": "reserveTFWithToken(address,uint256,uint8[],address)", "3f392b42": "trade(address[5],uint256[11],uint8[3],bytes32[6])", "3f3935d1": "confirmReverse(string)", +"3f39469c": "eth_rate_1()", "3f395781": "Capsule(uint256,address)", "3f3a1ed2": "alottTokensExchange(address,uint256)", "3f3a279d": "getBetResult()", "3f3a4966": "getVotingPower(uint256,uint256,address)", +"3f3a5027": "cancelBid(address)", "3f3a78d5": "rateAngelDay()", +"3f3b096b": "TokenExchangeReleased(address)", +"3f3b7043": "ejected()", "3f3bdc6c": "upgradeAllowance(address,address)", "3f3c212d": "kittenTalk()", "3f3c51c3": "Setmyadress(address)", "3f3c594c": "TestingToken()", +"3f3c9218": "claimDeveloptment(address,uint256)", "3f3cde05": "whitelistFilteringSwitch()", +"3f3cf56c": "setMaxTxPercent(uint256,uint256)", +"3f3d6bb9": "inactiveSIP(uint256)", "3f3d83c3": "purchasable()", +"3f3dc5f1": "activeSlot_ap5()", "3f3e4c11": "setMaxTotalSupply(uint256)", "3f3edfa4": "RootCoin()", "3f3f43a8": "setPreDGZtoDgzRate(uint256)", +"3f3f80c3": "swapTokenToToken(address,address,uint256,address)", +"3f3ff1aa": "transferTokenFunds(address)", "3f402dfc": "CreateGameIco(address,uint256)", +"3f4039ba": "arrayAirDropReceivers(uint256)", +"3f40406c": "_revertTransfersInLockUpPeriod(address)", "3f40adb8": "createPetition(string,string,uint256,bool,string)", +"3f4128f6": "UNICORE_Token()", "3f415772": "releaseExists(bytes32)", +"3f416eb3": "getAddrs()", "3f419c40": "getMessageMaxCharacters()", +"3f41aa9a": "getRegisteredIntegrationAdapters()", +"3f423653": "createBondingCurveToken(address,address,uint256,uint256,bool,uint256,uint256,address,address,uint256[])", "3f423afe": "DIVISOR_STAKE()", "3f4263ef": "x(uint256)", "3f430616": "getThirdRoundReleaseTime()", +"3f43adf3": "isTypeRegistred(bytes32)", +"3f43c119": "StartedMortgage(uint256)", "3f43c7cf": "open(uint256,uint256,uint256,string)", +"3f43d797": "poolinfo(uint256)", "3f444db1": "internalDoRoll(bytes32,bytes32,uint256,uint256,uint256)", +"3f44c1d1": "kycSigners(uint256)", "3f44d89f": "NigerianNairaToken()", "3f450915": "_mateWith(uint256,uint256,uint8)", "3f454406": "tokenEscape(address)", +"3f461af4": "initializeContract(uint256)", "3f4628c1": "disputeLimitedReporters()", +"3f463b44": "basix()", "3f46a2ea": "DucLongToken()", "3f478372": "newDeposit(uint256)", "3f479562": "kingGladiatorFounder()", "3f47e662": "decimals(uint256)", +"3f486549": "PausedOrUnpaused(uint256,bool)", "3f487b8b": "securityGuardLastCheckin()", +"3f489729": "updateRewardPerBlock1(uint256)", +"3f489914": "withdraw(uint8,uint256)", +"3f48a543": "HXB()", +"3f48a952": "_updateAccountSnapshot(address)", "3f48ae1a": "initInsecure(address)", +"3f48be2d": "revokeAuthorized(address)", +"3f491a9d": "getElectricityToProduce()", "3f493a1d": "Playforfreetoken()", +"3f494a31": "timestampById(uint256)", "3f497d52": "batchAirDrop(address,address,address[],uint256)", +"3f4985cf": "registerUpgrader(address,bytes32)", +"3f4990a0": "getvPUREBalance()", +"3f49ae69": "setInitialLoanDuration(uint256)", "3f4a6484": "removeCapper(address)", +"3f4a7efa": "getStakerTotalReedmedStakeCommission(address)", "3f4acbe8": "_teamTax(uint256,bool)", "3f4ad13d": "LOTE(uint256,string,string)", +"3f4af712": "IPFS_PROVENANCE()", "3f4b1401": "releaseDragonTokens()", "3f4ba83a": "unpause()", "3f4be889": "callContractAddress()", "3f4c0733": "batchTransferEtherWithSameAmount(address[],uint256)", "3f4c89ca": "show_minimum_amount()", "3f4d2fc2": "addConnector(address,uint32,bool)", +"3f4d58c4": "freezeEpoch(address[])", "3f4d97f0": "TOTAL_TEAM_TOKENS()", +"3f4dbda2": "getTotalEscrows()", "3f4dd268": "releaseTokens(uint256,uint256)", +"3f4e2597": "updatePrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"3f4e4251": "getOracleCount()", "3f4e5ab9": "getB1()", "3f4e6d66": "CryptoFamous(address)", "3f4e95d7": "investorsAccounts(address)", "3f4eb701": "updateUnderlying(string,uint256)", +"3f4ec406": "PreTokenSalesCapReached(address)", "3f4f057f": "candidateBlockNumberHash()", "3f4f070c": "newSpaceshipUpgrade(bytes1,uint8,uint256)", +"3f4f2ca5": "allow_buyer_out(bool)", "3f4f3075": "setRenewable(uint256,bool)", "3f4f50c8": "EvtUnlock(address,uint256)", +"3f4fdda0": "aluminium()", +"3f4febbc": "deletePixel(uint256)", "3f50331d": "batchTransferPaidTokens(address[],uint256[])", +"3f50d041": "WhitelistChange(address,bool)", +"3f511f23": "allTicketsPrice()", +"3f51251e": "approve_69(address,uint256)", "3f516018": "setCreator(address)", "3f5174df": "numberOfEarlyPurchases()", "3f5228c7": "fifishICO()", +"3f5274d9": "withdrawEvent(address,uint256,uint256)", "3f52c660": "TokenPerETH()", "3f52e589": "setStartingTime(uint256)", +"3f52ee9d": "__LnExchangeSystem_init(address)", +"3f5309de": "addOperater(address)", +"3f53fbec": "setSideToken(address)", "3f541d08": "burnTokens(address,address)", "3f541ffc": "exchangeEtherForHavvens()", +"3f5489d9": "getUserRankBonus(address)", "3f549d87": "contributeByOracle(address,uint256)", +"3f54acef": "alohaERC721()", +"3f54c754": "swap(bool,address,uint256,uint256,address,uint256)", +"3f550dd9": "buyWithRef(address,uint256)", +"3f553586": "getInvestorsAt(uint256)", "3f55b895": "delegate(uint8,bytes32,bytes32)", +"3f55bc08": "batchTokenRolesInfos(address[])", +"3f56ac91": "getTotalStakingReward()", +"3f56ad9d": "authereumEnsManagerVersion()", "3f572432": "investment(uint256,address,string,uint256)", "3f5750c6": "distributeCoins()", "3f576af0": "GoodDayTokens()", +"3f57966c": "migrateV1(address,uint256)", "3f579f42": "executeTransaction(address,uint256,bytes)", +"3f57c280": "faucetMaxBalance()", +"3f57faa9": "getVestingAmount()", "3f58774b": "ecbuy(uint256)", "3f58a043": "ceoEtherBalance()", "3f58f8c0": "voteRuling(uint256,uint256,uint256[])", "3f590062": "getTokenCreationTime(string)", +"3f595602": "redemptionValue(string)", +"3f5969e6": "muld(int256,int256,uint8)", "3f59b1ab": "TokenImpl(string,string,uint256)", "3f59e45a": "bincentiveLogger()", +"3f59f910": "addDataProvider(uint8,address)", "3f5a0bdd": "selfDestruct(address)", "3f5a9e22": "getAmountOfTitties()", "3f5ab2fe": "seed_eth()", "3f5adb8e": "LIRAX()", "3f5b7675": "periodTwo()", "3f5bc9b6": "makeACall(address,uint256)", +"3f5bdcec": "BaseTokenCreated(uint256)", +"3f5c1534": "discountSteps(uint256,uint256)", +"3f5c5561": "canChallengeAscendingWizard()", "3f5c6a50": "MinimumDonation()", +"3f5c84c1": "executeTransferFrom(address,address,uint256)", +"3f5caa97": "resetStartBlock(uint256)", "3f5cbdb6": "returnWei()", "3f5cd055": "advisorsVesting()", +"3f5ce94b": "upgradeToV2(uint256,address)", "3f5d0203": "getCreationWeiCost()", "3f5d2b79": "CrowdsaleFinished(uint256,uint256)", "3f5d8056": "currRound()", +"3f5db281": "changeDepositFee(uint256,uint256,uint256)", +"3f5df8db": "issue(uint256,uint256)", "3f5e268f": "convictInitial(uint256,uint256)", +"3f5e364f": "viewAirdropZOOMEN()", "3f5e3ec1": "changeTransactionStorage(address)", +"3f5e5eea": "approve_582(address,uint256)", "3f5ea068": "addLockAccount(address,uint256)", +"3f5eb856": "pixel_credit(address)", "3f5f5217": "sellAth(uint256)", +"3f5f7738": "TransferToOtherAddress(address,uint256)", +"3f5f82b2": "burnForGateway(address,string,uint64)", +"3f5f91e6": "LogItemsContractSet(address,address,address)", "3f601972": "TotalToken()", "3f606cfc": "enableAutoSeller()", +"3f60d799": "REPORTER_ROLE()", "3f60efa2": "HANDLE()", +"3f613879": "configurePrizes(uint256[],uint256[])", "3f615272": "sendICO(address,uint256,address)", +"3f61981f": "tokenConfigSize()", +"3f61d30c": "newToken2(address)", "3f61dcf6": "enableTransfering()", +"3f626a84": "maxOneTimeBuy()", +"3f627ac2": "CREATOR_APPROVER_ROLE()", "3f62c084": "collectMessage(address,address,uint256)", "3f635e30": "ethTransfer(uint256,address,uint256)", +"3f63a1d7": "DeliveryEvent(uint256,uint8,string)", +"3f647a97": "add(string,string,string,uint256)", "3f64a7ab": "devFeePercent()", "3f64b318": "initSale(address,address,address,address)", +"3f650414": "mines(address)", "3f651bab": "TOURNAMENT_ENDS()", +"3f657a46": "getPledge(uint64)", +"3f65c6f7": "ownerUnlock(address)", "3f65d97f": "removeEndorsement(bytes32,bytes32)", +"3f664062": "mes()", +"3f6699da": "withdrawTeamActivationGain(uint32)", +"3f66d160": "deposites(uint256)", +"3f66edb5": "XNOUsers()", +"3f66fc7e": "lastNegativeRebase()", "3f67364a": "PayValsToList(address[],uint256[])", +"3f6738a9": "setEthFee(uint256)", +"3f67633a": "_fcfsDurationSeconds()", "3f67a94e": "getOffChainAddresses()", +"3f67ee0d": "calculateCurrentPrice_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes)", "3f683b6a": "isStopped()", "3f6849eb": "listedMonForMon(uint64)", +"3f685398": "transfergenesis(address,uint256)", "3f686170": "freezeAll(bool)", +"3f68b119": "setApp(address)", +"3f68dcfb": "viewRecoLostMoneyDL_3(address)", "3f68fde4": "removeVote(uint256)", "3f69034f": "enableGeneration()", +"3f695b45": "setRewardsDistributor(address,address)", "3f697ce9": "startBlock(address)", "3f69babd": "cancelEvent(uint256)", "3f6a2c97": "calculatePoints()", @@ -36258,126 +66369,242 @@ "3f6d8256": "validatorFee()", "3f6dd911": "multisig_owner()", "3f6ddb75": "Allocated(address,uint256,bool)", +"3f6e5e26": "xdexFarmMaster()", "3f6ea2a8": "MIN_LEADER_FRAC_TOP()", "3f6ec73a": "itemVoteUp(address,uint256)", "3f6f7ed6": "updateEthRate(uint256)", "3f6fa655": "resolved()", "3f6fff4e": "closeCycle(uint256)", +"3f701e97": "ANGEL_INVESTORS_SUPPLY()", +"3f70a6e2": "buyComic(uint256,uint256,uint256,address)", "3f70c2b4": "getProductById(uint256)", +"3f711b0a": "_initToken(address,uint8)", +"3f713709": "FAILURE_PAUSED()", "3f720922": "setConfig(uint256,uint256,uint256,uint256,uint256)", "3f723c62": "addRecord(string,string,string)", +"3f724d5c": "BPs(uint256)", +"3f726b78": "setStakingAmount(uint256,address)", +"3f72b458": "registerPullPayment(uint8,bytes32,bytes32,bytes32[4],address[3],uint256[3],uint256[4],string)", +"3f72c922": "WithdrawCommission(uint256)", +"3f72fb76": "platformVolumeRatd(address)", "3f73365f": "getOneFree(address)", +"3f733e48": "getSummary(address)", +"3f73412f": "HARDCAP_ROUND_2()", "3f738402": "goalIncrement()", +"3f73e3b0": "depositdelegate()", "3f74a3b7": "MINIMUM_VESTING_PERIOD()", "3f74a8be": "totalEthJackpotCollected()", +"3f74aa38": "PRESALE_INFO()", "3f74fecb": "DSTrueFallbackTest()", "3f751ad0": "addTxToCustomerRegistry(address,uint256,uint256)", "3f7525bf": "getAddressesSet()", +"3f7617fc": "addMinterAdmin(address)", +"3f764be2": "totalRewardAtBlock(uint256)", +"3f7658fd": "executeSignatures(bytes,bytes)", +"3f7671ac": "PurchaseWithTether(uint256)", +"3f768c06": "getMinimumGasUsage(bytes)", "3f76fbd3": "dhopakcoin()", +"3f7784a1": "addOrEditStakingContract(string,address,address)", "3f77b560": "newDocument(bytes)", +"3f77cf11": "oracleToJobid(address)", "3f77e1e9": "testFee()", +"3f77ea65": "getHoldedCoverDetailsByID1(uint256)", +"3f782ad2": "checkLimitTime()", +"3f7864b7": "WantsToDistribute(uint256,uint256,uint256)", +"3f78eeb7": "maxYfnpSupply()", "3f79a0a9": "NewGame(bytes32,bytes32,bytes32,bytes32,address,uint256)", +"3f79a882": "ethToTokenTransferInput(uint256,address)", "3f7a0270": "setN(uint256)", "3f7aea39": "getCET4ById(uint32)", +"3f7b06d8": "referredCount(address)", +"3f7b1ca1": "SAVINGS_FULCRUM_ADDRESS()", "3f7b2ea9": "testMintInvalid()", "3f7b54f9": "DevChangeMiningReward(uint256)", "3f7b6be8": "createProductionUnit2()", "3f7c42a7": "setJob(address,uint256,address,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", +"3f7c4da3": "enchant(uint256,uint256[],address[],uint256[])", +"3f7c5904": "StateUpdated(address)", "3f7ca612": "FMWL()", +"3f7cdb8e": "extras()", "3f7d3969": "fetchAllCandidates()", "3f7d5361": "changeSafetyLimit(uint256)", "3f7d72d8": "rSetE(address)", "3f7da39a": "whitelisterAddress()", +"3f7db053": "advertisementAddress()", +"3f7df3ff": "VOTE_ADDRESS()", "3f7e2120": "CloseGift()", "3f7eabc9": "setRobot(address)", +"3f7eaf4a": "_setMaxJurorsPerDraftBatch(uint64)", "3f7eb0fe": "func_1()", +"3f7ef211": "transferMultiple(address[],uint256)", "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)", +"3f7fd60a": "earlyWithdrawReward()", +"3f7fe502": "tronToTokens__(uint256)", +"3f7ff98d": "lookupAffiliateVault(address,address)", +"3f800bdd": "getRewardAForDuration()", "3f80135f": "test_threeInvalidEqAddress()", "3f801f91": "proxyAssert(address,uint8,bytes)", "3f802220": "ProposalAdded(uint256)", "3f802ca0": "singleValueBatchTransfer(address[],uint256)", +"3f8035f2": "partnerFixedAmount(uint256)", +"3f804ee3": "e_add_owner(address,address)", "3f806783": "potSizeChanged(uint256)", "3f807199": "changeParticipants(address[])", "3f80a82b": "getbuyPrice()", +"3f80b575": "changeMinParticipant(uint256)", +"3f80cff8": "setTransferProxy()", "3f80db69": "_totalTokenSold()", "3f811b80": "createContract(bytes32)", "3f8126d5": "GetStatus(uint256)", +"3f814e02": "testbid()", +"3f815d69": "distributeParliamentTaxes()", "3f817449": "tokenSmartcontract()", +"3f81a2c0": "put(uint256)", "3f81e4be": "lastBlock_a9Hash_uint256()", "3f82065b": "setDiscipleVend(uint256,uint256)", +"3f825ed8": "createFeeManager()", +"3f825f64": "LogbuyNums(address,uint256,uint256)", +"3f82ce2f": "userAmount(address,uint256)", +"3f82e20c": "setPOLYNUsdt(uint8)", "3f82e2c6": "PUBLIC_RESOLVER_NODE()", "3f836dcf": "addAsAddress(bytes32,address)", "3f83acff": "get_contract(bytes32)", +"3f83e597": "addOrEditTier2ChildStakingContract(string,address)", "3f8416fb": "doUpgrade(address)", +"3f843bae": "managerPropose(address)", +"3f84561f": "setCifiContract(address)", +"3f8516a5": "changeContractInfo(string,string,string,uint8)", +"3f854393": "releaseBuyerPayment(bytes32,address,address,uint256,uint256,uint256,bytes,uint8)", +"3f858e7a": "triceratopsLider()", "3f85be9c": "calcChanges(uint256,uint256,uint256)", "3f85f916": "founderContract()", "3f862a19": "remainUserTokenBalance(address)", +"3f863848": "importKeepers(address,address[],uint256[],address[],uint256[])", +"3f8678cf": "wellAddr()", +"3f8679b2": "ReceivedValue(address,uint256)", +"3f869207": "blocksPerHalvingCycle()", +"3f86a2f5": "swapETH2Token(uint256,address,address,address)", +"3f870ec7": "PHOENIX()", +"3f877f72": "addRole(address)", +"3f87e046": "withdrawAndReset(uint256,string)", +"3f87e765": "cryptonIndexToApproved(uint256)", "3f87f870": "checkRequest(string,string,string)", "3f883dfb": "transferExternalValue(bytes32[])", +"3f886988": "Tokensell(uint256)", "3f887fad": "buyShares(uint256,uint8,uint256,uint256)", "3f89b09c": "update_fee(uint256,uint256)", +"3f8a037d": "getGovernanceToken()", "3f8a04aa": "getCurrentUserPromoBonus()", "3f8a4c13": "previousSnailPot()", "3f8a92b3": "setmangeruser(address,bool)", +"3f8ab725": "isAttributeType(uint256)", +"3f8ac26a": "getContractDay()", +"3f8ac33e": "beneficiariesGeneration()", "3f8ae6d9": "GetUserExpire(address)", "3f8af40c": "amendedEarlyPurchases(uint256)", "3f8b0a1d": "getIssuedBy()", "3f8c2582": "ethSale(address)", "3f8c75a6": "_createLicense(uint256,uint256,address,uint256,address)", "3f8cfba6": "lifeVestingStages()", +"3f8d0549": "setWithdrawMinTrc10(uint256)", "3f8d9568": "buyins(address)", "3f8d95bd": "_delete(address)", "3f8df98d": "calculateMyReward(uint256)", "3f8e0298": "parseTicket(uint256)", "3f8f0714": "SimpleLife()", +"3f8f6d59": "newContinent(string,uint256,uint256)", +"3f8faee0": "farmFee()", "3f900962": "manualRaffle()", +"3f90225c": "setCycleLength(uint32)", +"3f90916a": "totalPending()", +"3f9095b7": "gauge_types(address)", +"3f90b454": "allTasks(uint256)", +"3f911726": "setUniswapLPTokenAddress(address)", +"3f9148fa": "PaidOut(uint256)", "3f914aef": "setWhitelistAddress(address,bool)", +"3f918cbb": "bool3()", +"3f91e745": "approve_758(address,uint256)", "3f923f9d": "NIZIGEN()", +"3f92ad66": "setPreICOBonus(uint8)", +"3f92b472": "USDTToExchcoin(address,uint256)", "3f92edaf": "getMaxDropsPerTx()", +"3f9326af": "BET_AMOUNT()", "3f935379": "_isSingleFlag(uint256)", +"3f937aae": "endpoints(uint256)", +"3f942002": "stockShares(address)", "3f94904a": "bankValReserve()", "3f95c0c2": "timeboundTest(address,uint256,uint256)", "3f9628e8": "addOldWithdrawals(address[],uint256[])", +"3f96440e": "getPresaleAddress()", "3f966082": "exchangesOwner()", "3f96f3a3": "toInt()", +"3f973e26": "setHdcoreVaultAddress(address)", +"3f975d5f": "canSwapFromV1(address,address,uint256,uint256)", +"3f976ca9": "wizardFingerprint(uint256)", "3f97b106": "GetSuspend()", +"3f97d087": "EditionCreated(address,uint256,uint256,uint8)", "3f97d995": "VALIDITY()", "3f982b74": "createInitialAllotment(string,uint256)", +"3f99189d": "diamondPayment(address)", "3f9942ff": "canceled()", "3f9945d2": "ByThePeople(address)", "3f99a12b": "saleEndBlock()", "3f99fa54": "addInitialMember(address,uint256)", "3f9a3886": "OWNERS_ALLOCATED_TOKENS()", +"3f9a8690": "tokendecimals()", +"3f9a8e7e": "failedMessageReceiver(bytes32)", "3f9af464": "AK4Token()", +"3f9b0af2": "calculateTransactionFee(uint256,bool)", "3f9b250a": "getDocument(uint256)", +"3f9b3582": "flRatio()", "3f9b8fdc": "updateAllowedTransfers(address,address,bool)", +"3f9bcc6c": "mintRatio()", +"3f9bf2c8": "setContributionPercent(uint256)", "3f9c7822": "print(int256,uint256)", "3f9cbd65": "mainSaleTokenWallet()", +"3f9cc6d1": "batchDepairTokens(bytes32[])", "3f9ce517": "getRefAddress()", "3f9d0954": "FarChainToken()", +"3f9d28f1": "manus(string)", +"3f9d48a6": "dyn(uint256,uint256,uint256)", "3f9d95ed": "addAcceptedToken(address,uint256,uint256)", "3f9da856": "_addFreezer(address)", "3f9e0eb7": "_getDaysInMonth(uint256,uint256)", "3f9e23e5": "migrationFinished()", "3f9e3494": "ReleaseSupply(address,uint256,uint256)", +"3f9e3f04": "latestSnapshotIndex()", "3f9e50fd": "LitToken()", +"3f9e58ca": "usdCoef()", "3f9e9a37": "getBonusesAmount(uint256)", "3f9e9df2": "removeInWhiteList(address)", +"3f9ed88c": "announcementsByAddress(address)", "3f9f5b68": "setPreviousID(uint256,int256)", "3f9f7779": "BitCronus1()", +"3f9fe75a": "disableStakingFor(address)", "3fa10e0a": "CountryJackpot()", "3fa1436e": "updateTokenSaleState()", "3fa1930d": "getPlayerBet(uint256)", +"3fa1967a": "fulfillLinkPrice(bytes32,uint256)", "3fa19804": "updateTeller(int8,bytes16,int8,int16,bool)", +"3fa1d5b9": "_poolPercent()", "3fa21806": "lastHash()", +"3fa24586": "lastchildaddr()", "3fa2dd2a": "getStage2Cap()", "3fa2fe7a": "getActiveUserCount()", +"3fa364cd": "rewardDelegators()", +"3fa375b9": "getBlindedCommit(bytes32)", +"3fa378e8": "calculateRewardToken(uint256,uint256,uint256,uint256,uint256)", "3fa40f94": "mintTokens(address[])", +"3fa43818": "OutsourceConfirmNode(uint256,address)", "3fa4687b": "bytesToAddres(bytes)", +"3fa48830": "setMappingDetailcodeurl(string,string,string)", +"3fa4baf8": "sliceOverflowStart33Throw()", +"3fa4d42f": "view_client_balance()", +"3fa4d9ca": "getSurveyEndBlock()", "3fa4ed06": "updateValue(bytes32,uint256)", "3fa4f245": "value()", "3fa54ed8": "setTileTypeAt(uint16,uint16,uint8,uint16)", @@ -36388,16 +66615,29 @@ "3fa68836": "removeParticipant(uint8)", "3fa69faa": "testtoken()", "3fa6c7ca": "findLaptopUsage(address,address)", +"3fa70f45": "CIRCUIT_BREAKER_SUSPENSION_REASON()", +"3fa7444b": "toVoters()", +"3fa7b2cc": "ToSalesPartner(address,address,uint256,uint256)", +"3fa7b937": "usersActiveG4Levels(address,uint8)", "3fa8543a": "IMEXToken()", +"3fa8574c": "boolCardActive()", "3fa8a7b8": "releaseTokenOwnership(address)", +"3fa8c92a": "_INSURANCE_FUND_()", "3fa911ae": "refundAllowed()", +"3fa9baf1": "createAndBuyAllAmountBuyEth(address,address,uint256,address,uint256)", "3fa9fcf8": "createPlayer()", +"3faa3877": "reviewTerms()", +"3faa7962": "nonPayable(uint256)", +"3faa9033": "weth_()", "3faaef28": "BurnFSATokens(uint256)", "3faaffdb": "SCToken()", +"3fab62ba": "AcceptOwnership()", "3fab8fb0": "EatToken()", +"3fabf52a": "bidNative(uint32,address)", "3fabf8c0": "developmentAuditPromotionTokensPercent()", "3fac68d5": "payOff()", "3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", +"3facdd3e": "swapExactTokensForTokensSushiswap(address,uint256,address[])", "3facdfb6": "gatFund()", "3fad1834": "getRequestCount()", "3fad9ae0": "question()", @@ -36406,39 +66646,81 @@ "3fae1928": "timenow()", "3faed436": "setXTVTokenAirdropStatus(bool)", "3faf511f": "vouch(bytes32)", +"3fafa911": "adminTransferDeposit(address,uint256)", "3faff9d5": "purchaseTokens(uint256,address,bool)", +"3fb0581e": "getDigitalMediaSaleVersion()", +"3fb0a024": "swapWithGasToken(bool,address,uint256,uint256,address,uint256)", "3fb0b2c9": "CancelRoundAndRefundAll()", +"3fb0fbb7": "setMaintenanceFunds(address)", "3fb18aec": "contains(string,string)", "3fb1ab52": "_getUserSupportForTeamInTournament(uint256,uint256)", +"3fb1d1cf": "addWearable(string,uint256)", +"3fb1edd9": "TileOfferCancelled(uint16,uint256,address)", "3fb1fed4": "startingExchangePrice()", "3fb23166": "TeamVesting()", "3fb23865": "fundingStatus()", +"3fb239d0": "crop()", "3fb27b85": "seal()", "3fb326ba": "MAX_ETHER_CONTR()", +"3fb36a59": "toReal(uint216)", "3fb39b8b": "rewardBeneficiary(address,uint256)", "3fb3bec2": "deactivateTime()", +"3fb3d35e": "setMinterPackId(uint256)", "3fb3ec28": "delegatedAmountsByDelegate(address)", "3fb48c4c": "AAACoin()", "3fb51a76": "frozenDaysforTestExchange()", +"3fb56343": "getKey(address,address,uint32,bytes32)", "3fb58819": "getMinGasPrice()", +"3fb5b711": "lastCoverArticle()", "3fb5c1cb": "setNumber(uint256)", +"3fb6463c": "isRepoAdded(bytes32)", "3fb64e75": "gameInProgress()", "3fb655a3": "CPLTokenDeposit()", +"3fb66cd4": "investor_payout(address)", +"3fb6d3e7": "getContractClients(uint256)", +"3fb7a0ab": "entropy_counter()", +"3fb7ef10": "showRaised()", +"3fb856ce": "IdentityToDad(address)", +"3fb86bc2": "MinAmount4Round()", +"3fb86ebe": "cap(bytes32)", "3fb8b692": "affiliateAddresses(uint256)", "3fb92b10": "gameNbr()", +"3fb9337b": "setNFTSymbol(string)", +"3fb9707c": "hashToSignToGetWhiteListed()", "3fb97857": "getCouponMulFactor()", +"3fba640b": "ownerControlDta(uint256)", +"3fbb2c01": "lockingTime(address)", +"3fbb468a": "User(uint256)", "3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", "3fbb8f98": "drawTertiaryDWinners(uint256)", +"3fbba9a6": "recordedVote(address,address)", +"3fbbaccb": "deleteLot(uint32)", +"3fbc234a": "div(int256,uint256)", "3fbc2a1e": "preSaleTLYperETH()", "3fbc6345": "Token_Remaining()", +"3fbc81a2": "NJNJnjKjjVCFdxx(address)", "3fbd40fd": "ProcessDraw()", "3fbda23f": "CharityToken()", +"3fbf3627": "Previligedallowed(address,address,uint256)", +"3fbfc785": "getBestEthToUsdcReserves20Eth()", +"3fbfd4df": "initialize(uint256,uint256,address,address,address)", +"3fbfded2": "determineExchange(string)", "3fbfdefc": "checkMyAging(address)", "3fbffca6": "getTeamB(uint256)", "3fbffcef": "bidsCount()", "3fc0234d": "train1(uint256,uint256)", +"3fc07129": "batchTokensTransfer(address,address[],uint256[])", +"3fc0c912": "WinnerSetted(address,uint256,bytes32,uint256)", "3fc15f15": "mainToken()", +"3fc1b514": "getMiningRawSpeed(uint256)", +"3fc1e799": "unwrapFinish(bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"3fc226ae": "s_th(uint256)", "3fc22c51": "buyPreSaleTokens(address)", +"3fc24bba": "proposedToKick(address)", +"3fc2e1ef": "mixerAllocPoints(address)", +"3fc3027e": "pctIncrease(uint256,uint16)", +"3fc35497": "loadByDis(uint256)", +"3fc3db08": "togglePayETH()", "3fc3e53f": "Funding()", "3fc44ab3": "setCustomEvent(uint256,uint256,bool,string,uint256)", "3fc499b2": "ihomekey()", @@ -36451,42 +66733,84 @@ "3fc6a97a": "sellNow()", "3fc6bc94": "payDAO()", "3fc6d75a": "crowdsaleTokenPrice()", +"3fc6df6e": "rewardsDistribution()", +"3fc770d2": "icoprograms(uint256)", "3fc7e3d5": "volumeType3()", "3fc821ee": "getStackholderConfirmationCount(uint256)", +"3fc83dc9": "chestProducts(uint256)", "3fc86d32": "newInvestor(uint16,address,uint256,uint256)", "3fc8b029": "testSaleHasOwnerOnCreation()", "3fc8ca58": "JetherToken()", "3fc8cef3": "weth()", +"3fc90a29": "PromoCodeUsed(bytes32,address,uint256)", "3fc90f7c": "addresses1(uint256)", +"3fc91ba1": "seal(uint256,uint256)", +"3fc93641": "_scrv()", "3fc98bd5": "robotInfo(uint256)", +"3fc9d3ae": "Generic(string)", +"3fcad964": "getCurrentValue(uint256)", "3fcb21d3": "ecoFundingSupply()", +"3fcbaa7d": "isFeeManager(address)", +"3fccacef": "m_txs(bytes32)", "3fcce626": "setDeprecated(address,string,string)", +"3fcceff0": "approve_879(address,uint256)", "3fcd06fa": "checkMinimalGoal()", +"3fcd19bf": "changeHal9kVaultAddress(address)", +"3fcd2240": "recentFeePeriods(uint256)", +"3fcdcdfd": "singleLockFinished(address)", "3fcdd2d3": "transfertoken(uint256,address)", +"3fcdfcf1": "getCustomersDepositsItem(uint256)", +"3fcdfe26": "changePriceSource(address)", "3fce1b82": "addAnimal(uint8)", +"3fce4328": "userClaimVotePausedOn(address)", +"3fce824a": "setBurnMiniLimit(uint256)", "3fcead58": "TKRPToken()", +"3fcf8f80": "eventStatusChanged(uint256)", "3fd01a77": "is_purchase_allowed()", +"3fd08bb0": "adminRole(address,string)", +"3fd09c11": "GetIcoRule(uint256,uint256,uint256,uint256,bool)", "3fd0f727": "isIcoTrue()", +"3fd0f918": "withdrawToken(address,address[],uint256[],string)", +"3fd18f65": "exchangeRateBurn()", "3fd1f232": "LookAtAllTheseTastyFees()", "3fd2300d": "curveIntegral(uint256)", +"3fd23887": "currentStakeId(uint256)", +"3fd24419": "getSendTxPermissionCheck()", "3fd2799d": "newShortPosition(address[7],uint256[4],uint32[3])", "3fd29369": "offer(string,string,string,uint256)", +"3fd2acfc": "updateRedirectedBalanceOfRedirectionAddressInternal(address,uint256,uint256)", +"3fd2e14f": "countActiveRewardPool()", "3fd3370a": "FooTime()", +"3fd35e0d": "_isUserStart()", +"3fd38c6b": "GfceToken()", "3fd3a371": "stageThreeEnd()", "3fd3c997": "assetProxies(bytes4)", +"3fd46068": "fundsBucket()", +"3fd50001": "epochEndBlocks(uint256)", "3fd68ca7": "lastCheckedToken()", "3fd6b1db": "InoCoin(uint256,string,string)", "3fd76a98": "MANAGEMENT_LOCKED_ALLOC()", +"3fd79a31": "_encode_sol_int16(int16,uint256,bytes)", +"3fd7ca41": "getNFTMarket()", +"3fd80006": "addPairToTrack(address)", +"3fd8108e": "crp()", "3fd8b02f": "lockPeriod()", "3fd8cc4e": "isPermitted(address)", +"3fd8cd98": "setAllowLiquidityShortage(bool)", "3fd8cd9b": "ETHReturn(address,uint256)", +"3fd93833": "approve_119(address,uint256)", "3fd94686": "changeEligibleDonkeys(uint256)", +"3fd9640b": "percentMultiplier(uint256)", "3fd97621": "testTransferHandlesTooLargeRequest()", "3fd9c56d": "checkDoubledProfit(uint256,uint256)", +"3fd9da94": "setLoanpercentage(uint256)", "3fda1281": "get_keys()", +"3fda1a1d": "MIN_HELD_TOKEN_NUMERATOR()", "3fda417a": "LADCoin(uint256,string,string)", "3fda5389": "fill(uint256)", "3fda926e": "addGame(address,string)", +"3fdaae4d": "setMintPct(address,uint256)", +"3fdada7a": "getAddresses(bytes32)", "3fdb03ca": "getselfaddress()", "3fdb3628": "aggregateCDPValues(bytes32)", "3fdb372a": "buildWinery()", @@ -36494,103 +66818,203 @@ "3fdb705b": "platformTokenSupply()", "3fdb8cbd": "dt()", "3fdbb6c7": "RATE_THRESHOLD_PERCENTAGE()", +"3fdbdd64": "Get_Best_Wishes(string,uint256)", +"3fdc3cbe": "approve_636(address,uint256)", +"3fdc699e": "withdrawPreMine(uint256)", "3fdccd8d": "setDCNForGas(uint256)", +"3fdcd9dd": "LogGift(address,address,address)", +"3fdcdd1e": "fund(bytes16,bytes32)", "3fdcef0d": "PRICE_BEFORE_SOFTCAP()", "3fdcefe0": "doSelfdestruct()", +"3fdcfa41": "ERC223Received(address,uint256,bytes)", +"3fdd420e": "staticBalanceOf(address)", +"3fdd49fa": "depositInto(address,uint256)", +"3fdd6762": "tradeRatio()", +"3fdd7075": "NoTokensRemaining(address)", +"3fdd98f1": "removeNonPayableAddr(address)", +"3fdda130": "poolDeposit(address,address,uint256,uint8,bool)", "3fddd97d": "XCoin(uint256,string,string)", +"3fdddaa2": "rebind(address,uint256,uint256)", "3fdddf01": "EGGS_TO_HATCH_1PACIFIST()", "3fdde728": "MTP_PER_ETH_SALE()", "3fddee64": "isAgency(address)", +"3fde08d5": "setDedicatedCharityForNextRound(address)", "3fded490": "referralDiscountPercentage(address)", "3fdeef90": "fstSold()", +"3fdf99c4": "claimAToken(bytes)", +"3fdfaa25": "approve_604(address,uint256)", "3fe0522c": "setTravelCore(address)", +"3fe057c3": "marketClosureTime()", +"3fe13712": "timesEnabled(uint256)", +"3fe14c4b": "PetPreSelled(address,uint16)", "3fe14e03": "setAuthor(string)", +"3fe15017": "upgradeDocs(address)", +"3fe16140": "uidcheck(uint256)", "3fe3347a": "assetType()", +"3fe3376f": "arNxm()", +"3fe3755a": "getArrayLenth()", "3fe3df76": "leaf_from_address_and_num_tokens(address,uint256)", "3fe3f427": "depositTokens(address,address,uint256,uint256,bytes32)", "3fe43020": "decreaseRepAvailableForExtraBondPayouts(uint256)", "3fe43822": "Collect(uint256)", +"3fe49a2e": "lockAccounts(address)", +"3fe53b39": "totalGift()", +"3fe561cf": "transfer(address[],address)", +"3fe5d425": "enterMarket(address)", +"3fe5f054": "claimReserve()", +"3fe6106b": "moduleRedeemHook(address,uint256)", +"3fe6341f": "_swapTokens(uint256,address,address,uint256,address)", +"3fe67075": "wrapEthAndDepositAndLockCollateral(address,address,uint256)", +"3fe695ba": "deployVestingContracts(uint256,address[],address[],uint256[],uint256[],uint256[],uint256[])", +"3fe6a278": "addYGYRewardsOwner(uint256)", +"3fe7039d": "getPreviousPoolValue()", "3fe75b8d": "Unity()", +"3fe79685": "getNumZap(address,bytes32)", "3fe80d6e": "begin(uint256)", +"3fe974cf": "numBlessing(address)", "3fe97ead": "left49(uint256)", +"3fe98ad7": "zapROTforMAGGOTtoHFLY(uint256)", "3fe9bf0e": "createContract(bytes,uint256)", +"3fe9d803": "getLGE()", +"3fe9d898": "decideWinner(uint256,uint8)", "3fe9f2a4": "EventCentsPerEtherChanged(uint256,uint256)", "3fe9f2b2": "totalPublicFundingSupply()", "3fea1c2b": "getIHand(uint32)", "3fea2313": "ProposalAdded(address,address,uint256)", +"3fea64a7": "getUserPendingReward(uint256,address)", +"3feaaaa1": "AddedBurnWallet(address)", "3feab517": "DreamCoin(uint256,string,uint8,string)", +"3feade83": "totalDividentPoints()", "3feafa87": "NucleusVisionToken_ASTER8793()", +"3feb04b0": "removeReader(string,address)", "3feb1bd8": "transfer(bytes32,address,uint256)", "3feb4f83": "BankeraToken(uint256,uint64)", "3feb5f2b": "investors(uint256)", +"3feb925b": "EXTERNAL_STAKER_ROLE()", "3febb070": "backlogAmount()", +"3febb504": "getClaimableDividend(address)", "3febe823": "ClapClapToken()", "3fec0561": "addclip(address)", "3fec156b": "timeLockTeam(address)", "3fec1a75": "setIcoDiscount(uint256)", "3fec4a4c": "queryjingzhi(uint256,string)", "3fec91a4": "addProposal(uint256)", +"3fecab5a": "replaceMemberRegistry(address)", "3fecde21": "setTilePrice(uint8,uint256,address)", "3feced03": "minAmountWei()", "3fed491f": "testStoreBalanceAfterCheckout()", "3fedcc31": "transfer(uint256,address,address,address,uint256,bytes,bytes)", "3fee28b1": "logEthTx(bytes32)", +"3fef6c2a": "updateProjectIpfsHash(uint256,string)", "3fefc25d": "getFundByManager(address)", "3fefdb01": "setStageGenomes(uint8,string,string,string,string,string)", "3feff510": "showMainERC20()", "3feff76d": "tokenaddress()", "3ff00ba5": "airdropMinting(address[],uint256[])", +"3ff0751e": "addRound(uint256,uint256,uint256,uint256,uint256,uint256)", "3ff0a1e5": "FoundToken()", "3ff0ab0b": "updateUserDetails(bytes32)", "3ff11c8b": "right85(uint256)", "3ff1a578": "IsCheckNeeded(uint256,uint256)", +"3ff1c029": "selfClaimProfit(uint64)", "3ff1d68f": "_totalXT()", "3ff1dcf6": "PermianICO()", "3ff1e05b": "viewBalance()", "3ff20c8a": "setPause(uint8)", +"3ff233b3": "DevRate()", +"3ff24c0f": "accruedDebtValOf(address,address)", +"3ff25c64": "outOfCirculation(uint8)", "3ff26c01": "catches(address)", +"3ff285d9": "customerService(address)", +"3ff2df24": "pancakePriceToken(address)", +"3ff2e50c": "Cambiar_Direccion_de_Fractal_Founds(address)", "3ff33185": "newCaller(address)", +"3ff38068": "getHistoricLobby(bool)", +"3ff3961a": "createEpicMonster(string,address,address,uint256)", +"3ff428c7": "set_affiliate(address,bool)", "3ff42b92": "marketingAddr()", +"3ff4b178": "usersE2(address)", "3ff4d491": "checkFile(bytes32)", +"3ff53d26": "totalNovasSwapped()", "3ff5481d": "cancelSellBlock(uint256,uint256)", "3ff54c71": "issueTokens(address)", +"3ff5aa02": "bindToken(address)", +"3ff64755": "foo_1()", "3ff66381": "ACCC()", +"3ff67514": "dropEther(address[],uint256[])", +"3ff68f27": "LogRegisterImport(address,bytes8,bytes8,uint256)", "3ff69113": "myEntityCount()", +"3ff728af": "StopChicago()", +"3ff7d365": "getRoundBalance(uint256)", "3ff7f21c": "mulFactor()", +"3ff7f2d7": "transferWithdrawalWallet(address)", +"3ff83b51": "Buscar_Inversor(address)", +"3ff85bfb": "withdrawAllDustTo(address,address)", +"3ff87c8c": "feesMap(address)", +"3ff8bb9c": "oracleProposed(address,address,uint256)", "3ff8c954": "addAnimals(uint8)", "3ff8da5f": "recipient3()", "3ff98455": "set_participant(address,address,uint256,uint256,uint256,bool,uint8)", "3ff9a877": "makeXID(uint256)", +"3ff9f5bd": "softCapEthAmount()", +"3ff9fd35": "setMaxFundingRate(uint256)", "3ffa274a": "transfersAllowedTo(address)", +"3ffa6a8f": "LogUI(string,uint256)", +"3ffaf552": "approve_658(address,uint256)", +"3ffb7cfe": "jt()", "3ffb8f27": "changeMinter(address,int256,address)", "3ffbd47f": "register(string,string)", +"3ffc0006": "getArbitrator(uint256)", +"3ffc203a": "initThisContract()", "3ffc2832": "_buyIcsTokens(address,uint256)", +"3ffc354e": "_getDais()", "3ffc813f": "toCompare(uint256,uint256)", "3ffd2798": "distributeAdviserBounty(address,uint256,bool)", +"3ffd5b67": "get_withdrawal_address(address,uint256)", +"3ffd8931": "LogSweep(address,address,uint256)", "3ffdabda": "poi_token()", +"3ffdd14b": "hashOfOrder(address,address,address,uint256,uint256,address,uint256)", +"3ffe164e": "TRANS(address,uint256)", +"3ffe1ffe": "getToDecimals()", "3ffe5eb7": "claimWork(uint256,uint256[2],bytes32)", +"3ffeed65": "removeUniPair(address)", +"3fff4dfe": "yield(address,string)", +"3fffaa58": "MintEvent(address,uint256)", "3fffebbd": "setBonusUser(address)", "400002c4": "modifyOpenStatus(bool)", "4000164d": "getClaimData2(uint256)", "4000601f": "sellStakes(address,address,uint256,uint256)", +"4000851f": "migratedAddress()", "4000aea0": "transferAndCall(address,uint256,bytes)", "4000d5c3": "BACTest1Token(uint256,string,uint8,string)", +"4000e4f6": "store(bytes32,bytes32)", "4001261e": "activeTier()", "40015d99": "getProviderInfo(uint256)", +"4001a267": "getTraitIdByGenerationGeneAndVariation(uint8,uint8,uint8)", "4001cee6": "getPeerOwnership(address)", "4001e364": "SendEthOff()", +"40020707": "faucetName()", +"40021cdd": "setCVaultRelayer(address)", +"400244ec": "aliasExist(string)", +"400254c4": "minLockDayLength()", "40026c87": "getSubcourt(uint96)", "4002d3fd": "LargeFunction()", +"4002d554": "impactProvider1()", "4002eda6": "nextRoundId()", "4002f0b0": "CheckCourse(uint256)", "40032d8d": "checking(string,uint8,bytes32,bytes32)", "400351cb": "applyForCandidate(string,uint256,string,string,string,uint256,bool)", +"400356c9": "bidderDetails(uint256)", +"4003b040": "stakeYELD(uint256)", "4004b6da": "getAmbassador(address)", "40058f61": "TIER2()", +"4005905d": "usersActivePL(address,uint8)", "40066733": "getTotalVotersCount()", "40067c91": "VoteFactory()", "4006ccc5": "exchangeRatio()", +"40070712": "withdrawBatch(uint256[],address[])", "400718ea": "expressBuyNumSec(uint256,uint256[],uint256[])", +"40073516": "raised(uint8)", "40079df0": "getDividendIndex(uint256,int256)", "40086158": "calculateHash()", "40086aa0": "directDebit(address,address)", @@ -36598,92 +67022,168 @@ "400a4deb": "sendPresaleTokens()", "400aaab7": "CTOC()", "400aae08": "isInCurrentGeneration(address)", +"400ada75": "initialize(address,bool)", "400adee3": "releaseByCount(address,uint256)", "400b56e5": "setReg2(uint256)", "400b8bf8": "releaseMintTokens()", "400ba069": "calculateFee(uint256,address)", +"400ba15f": "DOG_3()", "400bb308": "SimpleTGE(address,uint256,uint256,uint256,uint256)", "400bbbd8": "rebalanceGetTokensToSellAndBuy()", +"400bec77": "setArbitrationTimeout(uint256)", +"400c14a3": "getCarAmount()", "400d1f45": "dtGetEthBalance(address)", +"400db8f5": "u_l2()", "400e3949": "numProposals()", +"400e3d9b": "CLOSE_ROLE()", "400eb4f5": "ParaType()", "400ee783": "TOKENS_LOCKED_1Y_TOTAL()", "400f7a1e": "getPairInfo(address,address)", "400ff9a4": "BuyGold()", +"401007a2": "pendingFrogx(uint256,address)", "4010a018": "fundAvailable(address)", +"4010e5d4": "totalVaultDeposits()", +"4010e60f": "updateBooOwner(address)", +"40110544": "removeMappedAddress(address)", +"40110a60": "ethBeneficiaryAccount()", "40111f6d": "RESERVED_TOKENS_BACE_TEAM()", "40117f50": "CanalToken()", +"4011ba5e": "getPricesM()", "4011baf9": "MARKETING_POOL_TOKENS()", +"4011e6c7": "setTimeLine(uint256[])", "401214a7": "updateParams(uint256,uint256,uint256,uint256,uint256)", "40128db3": "registerAsDelegate(bytes32)", "40129a40": "updateAddress(bytes32,address)", "4012e02e": "Info()", +"4013124a": "refreshCollateralRatio()", "401356f1": "Salt()", "40135913": "releaseImpl(uint256)", +"4013a08e": "mintingFactorForPayingDebt()", +"4013be10": "Campaigns(uint256)", +"401485aa": "buyGird(uint16,uint16,uint16,uint16,address)", "4014c1c7": "changeMutagen2FaceContract(address)", +"4014c5c4": "getBsovTokenFee()", +"4015ba81": "getUserLostsToAddr(address)", "4015e83b": "renExTokensContract()", "401611ed": "acceptEndorsement(bytes32,bytes32)", +"40161728": "checkAllowCallers(address)", "4016535a": "parseBlock(bytes,uint256)", "4016e969": "allowOwner()", +"4016efe6": "doDocRedeem(address,uint256,uint256)", +"401748d9": "bets(address,address)", +"40175833": "Governmental()", +"4017afdc": "getTxIdByHash(string)", +"4017d2d1": "getTotalWithdrawalAmount(address)", +"401809f9": "MIRROR_STATUS_ALREADY_BOUND()", +"4018d9aa": "setX(uint256)", "4018e263": "stageTwoCap()", "40193883": "goal()", "40193d17": "getPongvalConstant()", "40194596": "RealBloq()", "4019fc54": "masterTokenBalanceHolder()", +"401a2a87": "setCurrencies()", +"401b4bde": "_excludedTrader(uint256)", "401b57b5": "transferLockedToken(uint256)", +"401bc76d": "initialize(uint8,uint8)", "401bd3fe": "distributeEth(address[],uint256[])", +"401c0347": "turns()", "401c3ba1": "LogClaimRefund(address,uint256)", +"401c8067": "getCurrentReturnRate()", +"401d4482": "adminWithdraw(address,uint256)", "401d7175": "_buyShip(uint256,address)", +"401da284": "minHDTokenBalance()", "401dc09f": "setGeneSynthesisAddress(address,address)", +"401dc0aa": "isend()", +"401ddd5d": "parliamentWithdrawTaxes()", "401e3367": "transferFrom(address,address,uint256,bytes32)", +"401e52f9": "getOutputAmount(uint256)", "401e77de": "GameCreated(bytes32,address,string,string,uint16,uint64)", +"401e9daa": "_isRewardSellerDandy()", "401f2be5": "collectRemainingFunds()", +"401f4ed8": "forMarketing()", +"401f5c2d": "checkVirtualPrice()", +"401f7d80": "tokenUniswapPairRFIETH()", +"40202cfc": "getAuctionInitData(address,address,uint256,uint256,uint256,address,uint256,uint256,address)", "40202f9d": "LogTransaction(address,uint256)", +"40209d87": "setlive()", +"4020c2f9": "cennzContractAddress()", +"40212916": "removeDapp(uint8,address)", "4021581a": "dollarBalance(address)", "40217452": "ProdBToken()", "40217786": "setRatePerOneEther(uint256)", "4021d93c": "Alibabacoin()", "40220b03": "previousVersion(bytes32,bytes32)", "40222b64": "allocationsIndex(uint256)", +"40226b32": "divRoundingUp(uint256,uint256)", +"40229d8e": "TotalReward()", "40229e14": "B_Com()", +"4022b75e": "airdropTokens(address,address[],uint256[])", +"4023282b": "consult(uint256,address,uint256)", +"4023a7d0": "BurnOnpair(uint256)", "4023da38": "Bacini(uint256,string,uint8,string)", "40243ecd": "SimplePaymentChannel(address,uint256)", "402456c0": "bank1Val()", "4024a33e": "stageBonusPercentage(uint256)", "4024db80": "license(bytes32)", "4024eb2a": "approveAndCallN(address,uint256,uint256)", +"4025004e": "hematologistSignup(bool,string,string)", "4025005a": "SmartIdentity()", +"40250766": "_TokensRescued(uint256,address)", +"4025119e": "migrateTokenTo(uint256,address)", +"40255e59": "lastUpdateBlock(uint256)", +"40259b90": "IMP08()", +"4025a4a6": "undistributedAddress()", "4025b22d": "getShip(uint256)", "4025b293": "redeemAllOutcomes(bytes32,uint256)", "4025b5a8": "ownerUpdateContractBalance(uint256)", "40267e53": "updateWhitelistBatch(address[],uint8)", +"4026896c": "mainnetDepositContractAddress()", "4026b261": "PlatoToken()", "4026c101": "deathFactor_iii()", "4026eb92": "endround()", +"4026f0fc": "RestartAuction(uint256)", +"4027175c": "LogRewardPullRequest(bytes32,bytes32,uint128)", "4027522c": "DanetonToken()", "40275f73": "addMapping(string)", "40275f85": "getPersonalDepositAddress(address)", "40277604": "collectedFeesInTwei()", "40278124": "setListedTime(uint256)", +"40278e3b": "vaultDepositDeadlineTime()", "4027b475": "MasterCardEscrow()", "4027d4d8": "spendFromSwap(bytes32,uint256,address)", +"40282252": "totalStakes(uint256)", "4028354b": "PlaceADiceBet(uint8)", +"4028358a": "addNewSupportedPool(address,address)", "40285ad5": "setfees(uint256)", +"40288ca3": "withdrawBidForGol(uint256)", "4028db79": "isFrozenAccount(address)", +"4028e8ea": "unsafeBatchTransferFrom(address,address,uint256[],uint256[])", "402914f5": "claimable(address)", "402962bc": "deleteAddressesFromWhitelist(address[])", "4029a3ce": "mintMany(address[],uint256[])", "402a1533": "angelAmountRemaining()", +"402af467": "updateAll(bytes32[],uint256[],uint256)", "402b2bca": "IcoStartDate()", +"402b84a3": "getFinalGrid(uint8)", +"402ba4b7": "getMyGifters(address)", "402bf0ab": "_delHolder(address)", +"402c1794": "memberAddressByDelegateKey(address)", +"402c3dc1": "addEntry(address,string)", "402c5644": "XNON()", "402c569c": "unlockBonusTokensClaim()", +"402c62b7": "freezeAndTransfer(address,uint256,uint256)", "402caccd": "RANGESTART_6()", +"402cb9dd": "setPlayerLev(address,uint256)", "402d1c9c": "CONFIG_MAX_EXPOSURE_MUL()", +"402d44fb": "addDelta(uint128,int128)", "402d5f2e": "unlockTokenPriceChange()", "402d8883": "repay()", +"402e1abf": "pairObservations(address)", +"402e4317": "getGaugeAddress(address)", "402e46b9": "finito()", "402e6230": "getTotalGambles()", +"402e699d": "coinFlip(uint256)", +"402e8dce": "withdrawFromGame(uint256,address,uint256)", "402e912f": "issuedInsurance()", "402eb694": "reliabilityPercentage()", "40307cdd": "setCOMMUNITY_POOL_ADDR(address)", @@ -36692,89 +67192,163 @@ "4031f60d": "INMCOIN()", "40326686": "paymentsFinished(uint256)", "4032b72b": "addKeeper(address)", +"4032c15f": "switchUSDTbuy()", "4033236e": "getProofOfStakeReward(address,address)", +"403325b6": "setAddressFeeState(address,bool)", +"40339830": "addMint(uint256)", "4033c268": "isFullInvest(address,bytes5)", "4033cd77": "applyForCertification(string,string,string,uint256,bool)", +"4034175e": "ethContribution(address)", "403446bd": "getPlayersFibokens()", +"40346c49": "capUpdate(uint256)", +"403495a3": "startNewRound(uint256,uint256,address,address,uint256,uint256)", +"4034ae61": "TechVestingBalances(uint256)", "4034af00": "setWhitelistInternal(address,bool)", "4034b817": "loadVersion(address)", "4034cfed": "fundWallet1()", +"4035573d": "setDoomFee(uint256)", "403575f7": "setMaxMessagesTop(int32)", +"4035a1a0": "isRoundOpening()", "4035d16a": "createPromoCovfefe(address,string,string,uint16,uint256)", +"4036337d": "bMxxTokenAddress()", "403639d5": "StartSale(address,uint256,uint256,address,address,uint256,uint256,uint256)", "40365852": "roundStart()", "4036778f": "reveal(uint256,bytes32)", +"4036aa44": "updateMonthlyEarningPercent(uint256)", "4036ab78": "getType(uint256)", +"4036c6ac": "MAX_CONTRIBUTION_EACH_BACKER()", "4036ff30": "changeHouseCutPercentage(uint256)", +"40379fca": "setStatusICO(uint256)", +"4037caad": "pendingXml(uint256,address)", +"4037d6ca": "superAdminOwnershipTransferred(address,address)", "403911a6": "tokenSaleStart()", "40394dcc": "freezeAccountByTime(address,uint256)", "403988c6": "setCustodianName(address,bytes32)", +"4039ad0d": "isTrader(address)", "403a0a78": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint256)", "403a734a": "MMMbCoin(uint256)", "403a8f53": "registerForRaffle2()", "403abbc7": "updateFirstActiveGamble()", +"403aef82": "checkCoverage(address,address,uint256,uint256)", "403b0cfd": "LogErr(uint256)", "403b3757": "getValueTip(uint256)", "403b7d9b": "secondRoundICOEnd()", +"403b8882": "Increase_Token_Supply(uint256)", "403bb94e": "StatsEthereumRaised()", +"403c355e": "createMembershipProgram(address,string,string,uint256)", "403c617e": "Hydrogen()", "403c9fa8": "getPot()", "403d8a6a": "initialMartialTimes()", "403dca55": "totalIssuedSynths(bytes4)", "403de107": "executeDecision(uint256)", "403e73ea": "_DemSinhVienDat()", +"403eb4cb": "validateClaim(bytes32,uint8,bytes32)", +"403ec4af": "alertTime1()", +"403ecbb3": "reflect(uint256,bool)", +"403ed223": "combinedFeeRatio()", +"403f136e": "updateAggregators(address[],address[])", +"403f1ffa": "updateDistributionContract(address)", +"403f3731": "setCustodian(address)", +"403f4447": "increaseLockAmount(uint256)", "403f6cff": "putInWinnerPool(uint256)", +"403f75b4": "setNewSystemFee(uint128,uint256)", "403fbf54": "initiateEthUsdOracleUpdate(address)", "40400fa7": "getBurnedItemCount()", +"4041ef41": "notifyRewardRate(uint256)", +"40420e39": "balan()", +"40421c15": "tempSnapshots(address)", "404239f6": "validateLegalRate(uint256,uint256,bool)", +"40423f60": "trainerDex(address,uint256)", +"4042606b": "setProfitRewardRatio(uint256)", "40426fb0": "stopIssuing(uint256)", +"4042955c": "InvestmentWithdrawn(address,uint256,uint256,uint8)", "40429946": "oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)", "4042b66f": "weiRaised()", +"4042c9ca": "metapoolWithdrawFrax(uint256,bool)", +"4042d4ad": "getCdpInfo(uint256)", +"40433169": "OUR_PROXY()", +"4043a900": "check_account_balance(address)", "40440891": "Donate_some_amount_and_save_your_stake_rewards(uint256)", "40441eec": "balance2()", +"4044474c": "setExtraData(uint256,string)", "40445a4f": "numTiers()", "4044856a": "preIcoEthers()", "4044e8ec": "cancelOrderWithPayer(string,address)", "4045c846": "setAccreditationActive(bytes32,bytes32,bool)", "404635db": "_canBreedViaAuction(uint256,uint256)", +"40465227": "CreatedBallot(bytes32,uint64,uint64,uint16)", +"4046841d": "addMintToken(address)", +"4046ebae": "liquidator()", "404704b9": "sendBounty(address,uint256)", +"40473673": "pauseIncubate()", +"40473c05": "helloCallback(address,uint256,uint256)", +"40474873": "calcExecuteCallBounty(bytes32)", "40477126": "exchangeTokens(uint256)", "404823d1": "wagerPool()", "40482475": "startTokenSwap()", +"4048a257": "workers(address)", +"4048bbb3": "addFileRecord(string,string,string)", "4048c449": "getParent(bytes32)", "40490a90": "getMultiplier()", "40496aef": "SecuredWithRoles(string,address)", +"404971fd": "getTimeRewardInterval()", "404983fb": "addsm(uint256,uint256)", "40499ae8": "approvedTill()", +"4049be3a": "tokenPriceData(uint256)", +"4049f198": "getNewCurrentVariables()", +"4049ffca": "EscapeRoomCounter()", +"404a5a6a": "WalletRemoved(address)", "404a9272": "promoEndTime()", "404ae80c": "_randomCardSetIndex(uint256,uint256)", +"404b5536": "distributeTopPromoters()", +"404c7cdd": "changeMaxSupply(uint256)", "404cbffb": "entityList(uint256)", +"404cd129": "buyHEX(uint256)", "404cf932": "mintStart3()", "404d0e3e": "gen0CreationLimit()", +"404d3883": "gemPerBlock()", +"404d39ba": "ChangeBasicInfo(address,bytes,bytes,bytes)", +"404d5d62": "getAllowBalance(address)", +"404d6e77": "ResolverRemoved(string,address)", +"404e3645": "setRemovePosOnly(bool)", +"404e60c4": "totalKct_temp(uint256)", "404ed1fa": "_founder_two()", "404ef602": "disapproveToSell(uint256)", +"404efb4c": "getStartPoint()", "404efc53": "left26(uint256)", +"404f0ba7": "panel3_days()", +"404f1f1c": "_PollCreated(uint256,uint256,uint256,uint256,address)", +"404f2a36": "debugPool(address,uint256[9])", "404f7d66": "challengeExit(uint256,uint256,uint256,bytes,bytes)", "404f8dc8": "KRW_Omnidollar()", "404fdfdf": "_setTempHeroPower()", +"40504b3e": "setDateToYield(uint256,uint256)", "4050a394": "getWishName(uint256)", "40510399": "miningKing()", "40512dcc": "TotalDividendsPerShare()", "405136fa": "multiSendEth()", "40517083": "dig(uint256)", +"4051b384": "initialSetup()", +"4051ba94": "Seize(address,uint256)", "4051ddac": "getSummary()", "4051ed26": "BONUS_SLAB()", "40520f85": "tokenToEtherRate()", "40523946": "spectreTeam()", +"40527fb5": "yvm3crv()", "40528f98": "ownerUnlock(address,uint256)", +"4052973b": "safeWipe(uint256,uint256,address)", "4052c02a": "ProToken(uint256,string,uint8,string)", +"4052f672": "Client_Registeration(address,string)", "405353b5": "NPToken()", "4053873c": "_safeTransferTkn(address,address,uint256)", "4053c797": "save(bytes32)", +"40543339": "_lotteryFee()", "40543538": "get_asset_events_count(bytes32)", "4054834a": "refferedBy()", "4054f5de": "EthVentures3()", +"4054f697": "cobbDouglas(uint256,uint256,uint256,uint256,uint256,uint32,uint32)", "40556191": "getCrowdsaleWhitelist()", +"4055786a": "setPeriodITO_startTime(uint256)", "40557cf1": "saleRate()", "40557e87": "totalBondSupply_BEAR()", "405665fb": "isMeInWhiteList()", @@ -36782,34 +67356,71 @@ "4056f8a8": "minimumTokens()", "4056fe06": "MAX_GOAL_EBC()", "405710a8": "sentTokensToCompany()", +"405714b6": "showUserInfoNew(address)", +"405755d2": "InitialFinished()", +"405816c3": "Invest2_sETHContract()", "40582f13": "getWeiRaised()", "405871e5": "SealPrivateCrowdsale()", +"40588921": "setTenderAdvanced(string[],string[],uint256[],string[])", +"4058a5ab": "fulfillOrderSeller(uint256)", "4059240c": "intervalNow()", +"4059e887": "harsh(bytes,string)", "405a66da": "claimOtherTokens(address)", "405abb41": "updateRate(uint256,uint256)", +"405afeef": "createStakingPool(address,address,uint256,uint256,uint256)", +"405b3053": "emitDAIReleasedAsIncome(address,uint256)", +"405b6587": "_100m()", "405b8816": "testIsContractZero()", "405bd7bb": "getCurrentNumberOfVoters()", "405c649c": "timeLeft(address)", "405c6f6e": "addDelegate(string)", +"405c74f1": "update_receiver(address)", +"405ca219": "snatchWindowOf(uint256)", "405cae3b": "LOG_SpinExecuted(bytes32,address,uint256,uint256,uint256)", "405cb7f6": "KimJCoin()", +"405cec67": "relayCall(address,address,bytes,uint256,uint256,uint256,uint256,bytes,bytes)", "405d1c32": "_getVATToPay(uint256,uint256,address)", "405d3adf": "exchange(bytes4,uint256,bytes4,address)", +"405d8419": "bigCheckOut(address[])", +"405d9db1": "dozen()", +"405dac78": "getMaxMintBPro()", "405dd87c": "EAT()", "405df338": "start_PREICO()", +"405e0f6c": "drmMinFee()", +"405e28f8": "admin_actions_deadline()", +"405e3c5c": "TransferFail(address,uint256)", +"405e3cc1": "_burned()", +"405eae91": "isTime()", +"405f2fd1": "setFunction(uint256)", "405f63e7": "MANHATTANPROXY9THCOLAVE()", "405f8006": "BlocToken()", "405fea2f": "setTokenAudit(address,address,address,address)", +"4060160a": "upgradePool(uint256)", +"40603cc4": "poolStarsRegistered(uint32,uint16)", +"406072a9": "released(address,address)", +"4060b25e": "openSeaVersion()", "4060d9f5": "isCarSpecial(uint256)", +"4060e868": "BuySilver(address,uint256,uint256)", +"4061e219": "UnicornSold(uint256)", "40621412": "BetexICO(uint256,uint256,uint256,address,address,address)", +"4062300b": "hasLottoTicket(address)", +"4062c607": "setDV(string,string)", +"40637ba7": "isActivatedState(uint256,uint256)", "4063d563": "advertise(address)", +"40640be7": "LineStartTimeChanged(uint256,uint256)", "406499d2": "Redhorse()", +"40649e8c": "sideTokens(uint256)", +"4064a5eb": "DeployBidsContract(uint256,address)", "40650c91": "MIN_CONTRIBUTION()", "40652435": "BURENCY()", "40654e14": "balanceOfEth(address)", "40656963": "contribute(bool)", +"4065b81b": "canOpenLoans()", +"4065eabb": "orderByAssetIdWithFee(uint256)", "40664496": "getTransferFee(address,address,uint256)", +"40669881": "updatePoolInfo(address,address,uint256,uint256,uint256,uint256,uint256)", "4066fdea": "feeProvider()", +"40676a51": "getUserClaimCount(address)", "4067ffda": "transactionsOnForHolder(address)", "406838b3": "etoken2()", "40684172": "getICORaisedAmount()", @@ -36822,22 +67433,42 @@ "4069de8b": "MultiSender(address,address)", "406a0e61": "VOLUME_50()", "406a1180": "FATRANSOM()", +"406a12cb": "onStateReceiveTest(uint256,uint256)", "406a318e": "getCitationRecordsLength(bytes32)", "406a6f60": "attachToken(address)", +"406aa368": "minRequiredSnapshotId()", "406af848": "ArenplayToken()", "406b0593": "tokenHoldersByIndex()", +"406b19bd": "getmagnificationAmount(uint256)", "406b9394": "level0(address,bytes32,uint256)", +"406bcd7b": "priceAndInvalid()", +"406bf616": "payoutLK3R()", +"406c000f": "acceptMilestone(uint64)", +"406c17f5": "ethToFiat(uint256,uint256,uint256)", "406c22d3": "getLocalNodeReputation(address)", "406c52d5": "changeElectorate(address)", "406c5590": "FILO()", "406c6633": "moveToNextCeiling()", "406c92b5": "PRIVATE_SALE_MAX_ETHER()", +"406cab16": "turbulenceStepPercent()", +"406cf229": "claimYield()", "406d7e98": "isAllowingTransfers()", "406d81c7": "safeSendFunds(address,uint256)", +"406d861e": "approve_483(address,uint256)", +"406dade3": "Transfer()", +"406dbf7f": "doTransmitETH()", +"406ecda7": "setTrustSwapAddress(address)", +"406f11f5": "freezed(address)", "406f1d22": "crowdSaleApprove(address,uint256)", "406f390c": "_unsafeCall(address,uint256)", +"406f762a": "SEND_HOLDS(address,address,uint256)", +"406f928c": "cloneHorseData(address,uint256,string,bytes32,uint256,uint256,uint256,bytes32,bytes32)", "407001c6": "TruSale(uint256,uint256,address,address)", +"40700759": "getPredpath()", +"40702adc": "initialLiquidity()", "4070372d": "earlyInvestorsMintedTokens()", +"4070a0c9": "setMintCap(uint256)", +"4070e7fb": "depend(address)", "40710587": "usersCanSell(bool)", "407167b6": "cantEntidades()", "40716fc7": "DunderBet()", @@ -36845,20 +67476,30 @@ "40722e3e": "getNameReaderId(bytes32)", "407235ba": "LogStop()", "407255b5": "getWhitelistByIndex(uint256,address)", +"407256b6": "unlock(uint32,uint32,bytes)", +"407279d0": "setMeterPoint(address)", "407299ba": "getWarriors(uint32[])", "4072eee2": "getTopic(address,uint256)", "4073002e": "AssetCollectionNum()", "40731c24": "getPost(uint256)", "40732c89": "makeDeposit()", +"40732f7d": "assetMultiSignAddress(string)", "40734387": "termination()", +"40734f8c": "_playerethnuminsmallpool(address)", +"4073fc4b": "killProxy(address)", +"407413e1": "getRewardBalanceByOwnerAndToken(address,address)", "407456d1": "fundsOf()", "407489ff": "concat_nodes(address[])", "4074c648": "createPromoCollectibleWithMining(uint256,address,uint256,uint256,uint256,uint256)", "407532bb": "presaleFundingTargetInEther()", "40753a76": "addSupply(uint256)", "40754714": "blockClient(address)", +"40755a29": "updateMarketingLevelValue(uint256,uint256)", +"407599dc": "Commission(uint256)", "407617e5": "updateAmountIncrease(uint256)", +"4076a009": "getObjectClassExt(uint256)", "4076a248": "BetPower()", +"407702a1": "lpTokensGenerated()", "40773279": "pay_Bounty(address,uint256)", "407787e6": "Division(uint256,uint256)", "4077aa14": "coreStaffAmount()", @@ -36867,9 +67508,14 @@ "40784ebd": "slashInvalidUsername(string,uint256,uint256)", "40786dec": "mint(bytes32,uint256,bytes32)", "4078fca8": "feeETH()", +"40792a5f": "approve_840(address,uint256)", "40799f4c": "currentDayRate10000()", +"4079c682": "stakePoolProofOf(uint256,address)", +"407a4b08": "getReserves(address[])", "407a5c92": "getAdminLogN()", "407a6727": "totalVIP()", +"407ad044": "LotteryWinnerDetermined(address,uint256,address,uint256,uint256)", +"407b4547": "mineAndStake(address)", "407b899b": "returnInt64(int64)", "407c554a": "getTSTTokenAddress()", "407ca6f8": "BsktToken(address[],uint256[],uint256,string,string)", @@ -36878,7 +67524,9 @@ "407d0cd0": "addGame(string,uint256,bytes32[])", "407d1a0c": "unstoreHorsey(uint256)", "407d2a67": "_figthCommander(address)", +"407d4a88": "editAddon(uint256,string,uint256,uint256,uint256,string,address,uint256,uint256,bool)", "407d552a": "jackpotTokenWinRewardRate()", +"407d91ed": "LogRoleGranted(bytes32,string,address)", "407e5e5d": "newVoting(bytes,string)", "407e9588": "rejectMintRequest(uint256,string)", "407e9e2c": "setcommissionCompany(uint256)", @@ -36898,63 +67546,112 @@ "40809acd": "stake(uint256,uint256,address,address)", "40809f9d": "calcEma(uint256,uint256,uint32,uint256)", "4080c884": "XstarToken()", +"4080de2d": "pushBalanceToTreasury(uint256)", +"4080eb7e": "swapWithReferral(address,address,uint256,uint256,uint256[],uint256,address,uint256)", +"408119d9": "approve_688(address,uint256)", "40811e90": "transferDataAuthority(address)", "4081c065": "massGrant(address[])", +"4081d73a": "flopper()", "4081d916": "checkPlayerExists(address)", +"4081db51": "userIds(address)", +"40822344": "removeScribe(address)", "408275bb": "transferToVault(bytes32,address,address,uint256)", "40828698": "s(address,address,uint256)", +"40828784": "aboveMintingLimit()", "4082b499": "totalNumberOfPurchases()", +"4082de67": "open(uint256,uint256)", "4082defb": "isBasicAccount(address)", +"4082fcf5": "rewardsExtraTotalCap()", "408318ae": "addAllowCnsContract(bytes32,address,bytes32)", +"40837092": "GetSV()", "4083c555": "Oasis(uint256,string,uint8,string)", "4083cdbb": "changeTokensLimit(uint256)", "4083e2af": "getFinalRoundPoints(uint160)", "4083e935": "transferEthersInternal()", "40844a8d": "safeDeduct(uint256,uint256)", +"40847514": "setFeeBurnerWrapper(address)", "40848af5": "markMyWord(bytes32,uint32)", "4084c3ab": "finalizedBlock()", +"4084e0b3": "_taxRate()", +"40851210": "featuredSprites(uint256)", "40857e02": "create(address,address,uint256,bytes32,int256)", +"4085d9de": "ethAddressClaims(address)", +"4086571e": "quickSwap()", +"4086820d": "getUnconfirmedBalance(string,uint240)", "4086b620": "sweepsCreationTime()", +"4086b960": "exchangeAndDeposit(string,uint256,string)", +"4086ee9d": "RAGEQUIT()", "408760b8": "setAngelLastVsBattleTime(uint64)", +"40876d1f": "arbitrage(uint256,uint256,address[])", "40876f6e": "getMaxMakerAmount(address,address,bytes)", "4087908f": "RicoToken()", +"40883740": "getBitProInterestAddress()", "40884c52": "getOracles()", +"408862d9": "interestAccruedAsOfBlock()", +"4088a6a1": "spreadRewards(uint256)", +"4088c73e": "mintVAIGuardianPaused()", "40890bc2": "getCurrentProvider()", +"4089382d": "totalUNIRewards()", "408938d0": "testUpdatePackageDb()", "4089462d": "registerPackage(bytes32,string)", +"40894c94": "issuetoken(address,uint256)", "40896550": "bountyTotal()", +"4089aa9a": "hasFinalized()", "4089b170": "totalPayouts()", +"4089b7fa": "sliced()", "4089d22a": "buyDepo(address)", +"4089eab7": "sell(address,int256)", +"408a184f": "STATE_COMPLETED()", +"408a2640": "getModulesGovernor()", "408a2ac9": "addNewSupplier(address,address,uint256)", "408a8094": "releaseTeamTokensAfter24Months()", +"408ab10f": "setPriceTarget(uint256)", +"408acd33": "documentStore()", "408aee81": "removeVendorByAddress(address)", "408b9945": "getBuyerNumber()", "408bcbda": "getBalancesLength()", "408bf4c3": "getAllCompanies()", "408c1932": "distributeDisputeFunds(address,address,address,address,uint8,bool,address,uint256,uint256,uint8)", +"408ccbdf": "totalFees(uint256)", "408cfe24": "iToken()", +"408d3aad": "docsToBtc(uint256)", "408d407d": "getClaimData(uint256,uint256,uint256)", "408d5773": "createContractCovfefe(string,string,uint16)", "408d947e": "SmartToken(string,string)", "408d9e35": "ExecutorChanged(address)", +"408def1e": "setVersion(uint256)", "408e097c": "createDestructibleCloneToken(address,uint256,string,uint8,string,bool)", "408e2727": "votingActive()", "408e2eb4": "ico2Tokens()", +"408e82af": "claimableBalancesOf(address)", +"408e8b7a": "createOrSignUpgrade(string,address,bytes)", +"408e9c86": "addressTreasury()", "408ee7fe": "addAlerter(address)", +"408fd3fb": "_getRepaymentAmountInternal(uint256)", +"408fef05": "last_harvest()", "408fef2e": "requiredMessageLength()", "40901b08": "p_setLimitedReferralsMode(bool)", +"40903d8b": "updateRndSeed(address)", "40908298": "allowedAddress(address)", "4090cb64": "getWToken()", "4090e696": "GetMinCost(uint256,uint256,uint256)", +"40911a91": "getList50Percent()", +"40914b06": "isValidAuthKeySignature(bytes,bytes)", "4091adf5": "onlyOwnerGetCompanyWallet()", +"4091c6a9": "calcProfit(address,uint8,uint256)", "4091ca4c": "gettopuser(address)", "4091f4c6": "refreshMonarchyGames()", +"40921340": "fsid(address,uint256)", +"40924173": "changePassengerStatus(uint256,string,uint256,uint256)", "409242fc": "citation(uint256)", "4092a611": "upVote(bytes12,bytes12)", "4092acdd": "tokenFulfillmentDeposit(address[2],uint256[8],uint8,bytes32[2])", "4092e2c2": "addMember(bytes32,address)", +"4092feba": "_checkNeedsNewEpoch(uint256)", "409315ce": "executePure()", +"409388f8": "theFirstDay()", "4093b49c": "votes_for()", +"4094099a": "closeSeries()", "4094ac75": "ProofOfWeakHandsClassic()", "4094ef5e": "addDataRequest(string)", "40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", @@ -36963,33 +67660,55 @@ "40966a97": "CMCEthereumTicker(address,uint256)", "40976b60": "setNewAgent(address)", "4097d865": "increaseRound()", +"409808b3": "getSouvenir()", "40980953": "setWhitelistOff(bool)", "409817b1": "FOTToken(address)", +"40982cca": "finishChangeBurnRateLong()", +"4098da35": "approveContract(address,bool)", +"40990e30": "addKid(address,uint256)", "40992e9d": "getTotalAirDroppedAmount()", +"40993b26": "buy(uint256,uint256,uint256)", "40998845": "_recordName(address)", +"4099fc7a": "provisionedId(address)", "409a3d8f": "ALLANCOIN()", +"409a44e7": "getScriptACLParam(bytes)", "409b479c": "GetTotalPlayers()", +"409bb8ab": "locatario()", "409bc43c": "changePersonalMaxcap(uint256)", "409bd95b": "getProductionTimeBusiness(uint256)", +"409c1ba4": "calculateCollateralRedeemAmount(uint256,address)", "409c7baf": "BONUS_MIN_DURATION()", +"409c8828": "disputeIDToItem(uint256)", "409c962e": "view34()", "409dba83": "calcKeysReceived(uint256)", +"409de91c": "depositRewardDistributor()", +"409deaca": "getUnsortedIndexOf64(uint64)", +"409e2205": "options(uint256)", "409e81a4": "Create(uint256,uint256,uint256,uint256,bool)", +"409e88d7": "chaiContract()", "409ed1db": "setCCH_edit_5(string)", +"409f01b4": "DEV_REWARD()", +"409f0ce9": "GiveAllMaggotToHFLYContract()", "409f2607": "ESCOToken()", "409f33c1": "sumPublicSale()", "409fb4c0": "configMaxKeys()", +"409fbdae": "CWPercentageChanged(uint256,uint256)", "409fc358": "canGiveMoneyBack()", +"40a05acb": "converters(address)", "40a0dd4b": "updateStateBasedOnTime()", "40a141ff": "removeValidator(address)", +"40a16688": "addToken(address,uint256,uint256,uint256,uint8)", "40a19a71": "BLOCKSUNTILCLEANUPSTACK()", "40a1b96e": "getTickets(uint8)", +"40a1bad6": "deleteInsured(address)", +"40a1c09b": "employeesAddress()", "40a1f4d5": "invalidateStage(uint256)", "40a1f87d": "getTotalLockedTokensPerUser(address)", "40a203c4": "CoinVillaIssued()", "40a2bfc1": "setXPAAssets(address)", "40a3a9c7": "createTokenLocker(address,address)", "40a3d246": "toggle()", +"40a3f671": "marketTermsCount()", "40a401d0": "setMonsterIndexToOwner(uint256,address)", "40a4437e": "setBattleProviderAddress(address)", "40a45440": "getPlayerBetNumbers(address)", @@ -37003,74 +67722,142 @@ "40a5737f": "setIndex(uint256)", "40a57cb8": "makeAdmin(address,bool)", "40a5bfc5": "PentacoreToken()", +"40a65823": "totalStakeTokens()", +"40a65ad2": "harvestWMasterChef()", +"40a6701c": "Roll(address,uint256,bool[6])", +"40a71d64": "CoolduwnMother(uint32,uint256)", "40a72363": "sigTeamAndAdvisersAddress()", +"40a7267a": "changeStatus(int256)", +"40a73fb4": "pendingNameTransfers(address)", "40a7ed8b": "uintFunc(uint256,uint256,uint256)", +"40a7f151": "TestOraclizeCall()", "40a806ed": "_borrowTokenFinal(address,bytes32,uint256,uint256,address,address,bool)", +"40a831a3": "_setGovernor(address)", "40a8a96c": "KingdomCreatedEvent(uint256)", "40a915a5": "setTokensLocked(bool)", "40a92f0f": "setMinSign(uint40)", +"40a93a40": "setDepositRewardDistributor(address)", +"40a9bdf3": "pendingAbq(uint256,address)", +"40a9d81d": "func_1EE8()", +"40aa607a": "pairs(address,address,uint48,uint256)", +"40aa649c": "totalLockedReserve()", "40aab81b": "UpdatedBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32,address)", "40aad0fe": "getUserPair(address)", "40ab2634": "lastBlock_f8()", +"40ab3e16": "widthdraw(address,address,uint256)", "40ab4879": "pePrice()", +"40ab6ad4": "lastSalePrices(uint256)", "40ab7b8c": "bnt()", "40ac40b2": "setInvitationMultiple(uint256)", "40ac89a2": "returnInvestment()", "40acbee3": "TokenFactoryAirdropToken()", +"40acd120": "_push(string,string)", "40acf805": "setCompanyInfo(bytes32,string)", +"40ad015b": "minPoolCost()", +"40ad0416": "depositToGame()", "40ad654c": "transferForVote(address,uint256)", +"40adac5f": "idToOwnerIndex(uint256)", "40adf94e": "setOraclizeGasPrice(uint256,uint256)", "40ae0851": "withdrawEtc(address,uint256)", +"40ae7a5c": "stacks(bytes32)", +"40aeb68b": "REI19()", "40aec640": "bonusState()", "40aee1a9": "numHashTypes()", "40af1a45": "PrivateSaleDays()", +"40af5e29": "_totalUnhold()", +"40af7ba5": "setPremiumPercent(uint256)", +"40afea2a": "getBalanceBatch(address[],uint256[])", +"40aff2b5": "AllExistingVersions()", "40b00033": "deposit(string,uint256,bytes,uint8,bytes32,bytes32)", +"40b01038": "forwardAll(uint256)", "40b0a77f": "updateInstantTrade(address)", "40b0c3d1": "DiligenceToken()", +"40b0f846": "limitNetwork(uint256)", "40b12b40": "testIsTrue()", "40b14606": "getOverPLayer()", +"40b18c18": "approve_817(address,uint256)", "40b1ad52": "slashReservedUsername(string,bytes32[],uint256)", +"40b20b09": "setFeeParameters(uint256,address)", +"40b2d3af": "Register(string)", +"40b3091a": "disableWalletBatch(address[])", "40b31937": "pledgeDecline(uint256)", "40b359f5": "markTaskCompleted(address,bytes32)", "40b43701": "getSetting(uint256)", +"40b447eb": "createRequestTo(address,bytes32,uint256,string,string)", +"40b5085c": "getFullTokenBalance(bytes32,address)", "40b5336d": "_updateDepositCountry(uint256,uint256,uint256)", +"40b584b4": "updateParameterAdmin(address)", "40b5886b": "getHotWalletAddress()", +"40b5c875": "addressMine(address)", "40b5ce01": "fightStartTime()", +"40b5f69c": "totalBuyerETHMap(address)", "40b60b85": "forceBuyback(address)", "40b61fe9": "removeOperator(address,address)", "40b6290f": "acceptSale()", "40b6c71f": "EthLyteToken()", +"40b6d909": "changeBxtbFoundation(address)", "40b73897": "getFeeWindow(uint256)", "40b74c91": "dislikeArtist(address)", "40b7802d": "GiveUpTheDough(address)", +"40b79d8f": "healthPercents()", "40b7b240": "calculateAmount(address)", +"40b7cd3f": "freezeFunds(uint256)", "40b80684": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE4()", +"40b8405a": "updateBalance(address)", +"40b86de7": "topPromotersVault()", "40b8783d": "raiseSlammer(bytes32,bytes32,bytes32)", +"40b8cc02": "increaseAllowanceAvailable(address,uint256)", +"40b8d029": "brokersMap(address,uint256)", "40b8d53a": "startFeeExit(address,uint256)", +"40b8d988": "SOS()", "40b98253": "canContribute()", +"40b9a54b": "_buyFee()", +"40b9b4dc": "setMigration()", "40ba0e94": "getRegion(uint256)", +"40ba1b1e": "getProposalIds()", "40bb28e8": "watchVideoB(address)", +"40bb43c0": "packageRelayersSubmitCount(address)", "40bb8474": "RENEETOKEN()", +"40bbd775": "stableFee()", +"40bbee52": "paymentInterface()", "40bbf5b9": "ChunksToken()", +"40bc33ff": "_increasePoolRewards(bytes32,uint256)", +"40bc617c": "switchRefSys()", "40bc9308": "startTimeRound1()", "40bcff15": "bet1000_01eth()", +"40bd5fb4": "airdropTokens2()", +"40bd647e": "addWearables(bytes32[],uint256[])", "40bd8720": "_changeOslikiFoundation(address)", +"40bda402": "recipientFee()", "40bdd3e9": "bytesEqual(bytes,bytes)", "40bea8d2": "lockedEndTimeOf(address)", "40beafc9": "depositToTWI(uint256)", +"40bee0ed": "setVestingPeriod(uint256)", "40beee2b": "setPermanentPlatinumLevel(address,string)", +"40bf2fb7": "minimumWeight()", "40bf6424": "removalPrice()", "40bff23d": "_createCard(uint256,address)", "40c00acf": "invest_mined()", +"40c0423e": "withdrawAll(address,uint256,uint256,uint256)", "40c05401": "getWithdrawableAmountFIIT(address)", +"40c08997": "easyswap(uint256,address[])", "40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", "40c0c5ff": "PityToken()", +"40c0ea64": "transferAndDestroy(address[],bool)", "40c0ece3": "updateMyReturns(uint256)", "40c10f19": "mint(address,uint256)", +"40c124a4": "confirmRefund()", +"40c177db": "setAcoPoolFeeDestination(address)", +"40c1a064": "tokenCreator(uint256)", +"40c1a0b2": "bountyaddress(uint256)", +"40c1b478": "BURN_ASSET_ROLE()", +"40c1b7ad": "getStreet(uint256)", +"40c222aa": "getSeats_SideB(uint256)", "40c243c9": "totalEthRefunded()", "40c2dc4a": "getCCH_edit_6()", "40c3198e": "getBenzByOwner(address)", "40c3418c": "sendCrowdsaleBalance(address,uint256)", +"40c34b58": "masterchefAddress()", "40c36524": "getFreeHatchCnt()", "40c37ed2": "sellGameLockedToken(uint256)", "40c3a6db": "MaxNumberOfBetsChanged(uint256)", @@ -37078,20 +67865,31 @@ "40c3b18e": "approveTransferableToggle()", "40c44c5b": "DivisibleFirstCommonsForumToken()", "40c44f6a": "setNewCFO(address)", +"40c45e36": "registryRecordRights(address,uint256)", "40c48c8d": "setNewPriceInFinney(uint256)", "40c48dfa": "Entropy()", +"40c4da46": "calculateDailyReward(address)", +"40c5547d": "pendingGDAO(uint256,address)", "40c558b2": "releaseCatIndexUpperBound(uint256)", "40c58b2b": "get_foreign_balance(address)", "40c5b34e": "currentPhaseId()", +"40c5dc67": "getPrepaidBadDebt(address)", +"40c60007": "azr()", "40c65003": "bonusEnds()", "40c657c7": "buyTokens(address,uint256,uint256,uint256,uint256)", +"40c6a2a9": "shareTransfer(address,address,uint256,address,address,uint256,uint256,uint256)", +"40c6d864": "clearTransfer(address,uint256)", +"40c6e47f": "storeDailyDataBefore(uint256)", "40c73d17": "changeAnimator(address)", "40c7535b": "TangToken()", "40c7e279": "requiredPlayers()", "40c7e707": "contributeBTC(address,uint256)", +"40c84b0e": "baseURL()", "40c85a59": "getLestCommonMulArray(uint256)", "40c87214": "_startNewMiningEpoch()", +"40c881c6": "join_game()", "40c8a90a": "GetLastMsg()", +"40c8e2db": "setConversionPath(address,address,address[])", "40c91c05": "submod(uint256,uint256,uint256)", "40c92ae6": "multisigwallet(address[],uint256)", "40c97617": "getReferralAddressShare()", @@ -37100,214 +67898,385 @@ "40ca0f05": "W0keAFPresale(uint256,uint256,uint256,address)", "40ca925d": "ChannelManagerContract(address,address)", "40caae06": "setOwner()", +"40cb7660": "set(uint256,uint256,uint256,uint256,uint256,uint256)", "40cc1239": "TokenEmission(string,string,uint8,uint256)", "40cc35ce": "teamWithdrawalProposed()", "40cc8854": "bite(bytes32)", +"40cc8883": "addLiquidityForTokens(address,uint256,uint256,uint256,uint256)", +"40cc8a83": "UpdateAuctionBid(bytes32,uint256,bytes32,address,uint256,uint256)", +"40cccf2a": "updateDepositAmounts()", "40cd988d": "refundBroadcaster(uint256)", "40cde403": "exchangeBalanceOf(address)", +"40ce0b68": "frozenTokensMap(uint256)", "40ce1d43": "EWWCOIN()", "40ce5062": "isPublicSaleNoBonus()", +"40cea8d1": "yield21Jun30Maturity()", "40ceb451": "increasePromoCreatedCount()", +"40d00b68": "_set(uint256,uint256,uint16,bool)", "40d0a103": "MarketOrderEvent(uint256,uint128,uint8,uint16,uint256,uint256)", "40d113da": "sqrtAsm(uint256)", +"40d1410b": "setGlobalOperatorStatus(address,bool)", +"40d16a40": "vether()", +"40d18c38": "getUserVaultInToken(address,address)", +"40d193fd": "currQueue()", +"40d1a002": "NewHash(uint256)", "40d1d255": "claimEndTime()", "40d1df53": "etStringValue(bytes32)", +"40d1f9af": "diff(address)", "40d21e6a": "getRelations(uint256)", "40d22cf8": "completedTasks(uint256)", "40d2e73c": "VanHardwareResourcesChain()", "40d32df9": "MetaIdentityManager(uint256,uint256,uint256,address)", +"40d35e0b": "gaz()", "40d3d25a": "playersStorage(address)", +"40d3dc87": "doHalvingCheck(bool)", "40d40a72": "MANAGE_CAP()", "40d48958": "_endTime()", +"40d4a15f": "getAccountLockType(address)", +"40d4ce98": "fulfillWithNFTLock(bytes32,bytes32,address,uint256,bytes32)", +"40d4eeff": "countSuccessSignForWithdraw(uint256,bytes32)", +"40d53b0b": "SupplyControllerSet(address,address)", +"40d58a4a": "MIN_CONVERSION_RATE()", "40d67116": "setTokensPerOneETH(uint256)", "40d681cb": "setupPresaleClaim()", "40d699b7": "deathData_a4()", +"40d70dcb": "getBestTeam()", "40d75432": "provideExchangeRate(uint256,uint256,uint256)", "40d7b7b8": "dollarPrice()", "40d7f7e8": "Staked(address,bytes32,uint256,uint256,uint256,uint256)", "40d815cf": "Cyberium()", "40d84b52": "updateCase(address,uint256)", +"40d871fc": "KYC_status(address,bool)", "40d8c74f": "checkForPayout()", "40d96e6c": "finalizeSale3()", +"40d970b3": "charityAddr()", +"40d979b3": "Derivation(uint256)", "40da948f": "updateUnit(uint256)", +"40daa6a2": "executeTrade(uint256,uint256,uint256,address,uint256,uint256)", +"40db3b50": "unbindToken(address)", "40db4b09": "tokensOwedByInterval(uint256,uint256,uint256)", +"40db5718": "setLimitOrder(int256)", +"40dc0859": "updateBeneficiaryImplementation(address)", +"40dc0e37": "desiredLiquidity()", +"40dc3a41": "getSecondaryOwners()", +"40dc7bff": "toInteroperableInterfaceAmount(uint256,uint256)", +"40dc95c5": "getAllowTransferTime(address,address)", "40dca307": "buyCoinsUpdateState(uint256)", +"40dcb0cb": "BBOXAddress()", +"40dcbb08": "h(uint256[])", +"40dd4f85": "revertWant(uint256)", +"40dd52b5": "lastNyanCheckpoint()", "40dda9af": "USER_LOCK_BLOCKS()", "40de2784": "buildICOStageTwo()", "40debefd": "SomeCoin(string,string,uint8)", +"40dedeb4": "_weekThree()", "40dee0c5": "LogRedeem(address,uint256,bytes32)", "40df280e": "alliesContract()", +"40df5497": "shuffler(uint256,uint256)", "40df78b6": "bankBurnFrom(address,uint256)", +"40e05d08": "toggleOnline()", "40e0653c": "_getLevel(uint256)", "40e099ac": "makePromise(uint256)", +"40e0e91c": "commitBuyWaifus(uint256)", +"40e0f2b1": "getEarlyRedemption(address)", +"40e10bcc": "getReturns(address,address,address,uint256[])", "40e15134": "presaleDist()", "40e1e62b": "RedSoxYankees412()", "40e2ad58": "buyOwnedPixels(bytes32)", "40e31490": "killAnimal(uint16)", +"40e36b99": "_removeOpenMakeOrder(address,address)", "40e40765": "setTokenSaleHardCap(uint256)", "40e424ee": "chooseWinner(bytes32)", +"40e49686": "versionChecksum(address,uint8)", +"40e4a5af": "setProxyFund(address,address)", "40e4ebf4": "GenDayRatio(uint256)", +"40e4f4eb": "ALLOTER_ROLE()", "40e50d00": "gcsc(uint256)", "40e58ee5": "cancel(uint256)", "40e5f3cb": "getEtherBalanceOnCrowdsale()", "40e63ef3": "getPubKeyByHash(string)", +"40e687a8": "PRIVATESALE_START()", "40e687a9": "blockno()", "40e6b00a": "createRefundPoll()", "40e7261d": "Golem()", +"40e733b8": "totalprofit()", +"40e73d98": "testTransferTrxInsufficientBalance(uint256)", +"40e7bdf4": "totalTaxAlloc()", "40e87f13": "dropTokenV2(address[])", +"40e90463": "FiatCollectedEvent(uint256,uint256,uint256)", +"40e92bfb": "roomsByCategory(uint8,uint256)", +"40e9cd2e": "setBorrow(address)", +"40ea0ee1": "sendTokensOneToMany(address,address[],uint256[])", +"40ea2bba": "getFinalProfit()", "40ebe5bc": "SHARD()", "40ec0b6a": "isCurioAuction()", +"40ec35fa": "AFFFF98456()", "40ecb7f2": "isTransferValid(address,address,uint256)", +"40ecd7b8": "buyGftUseHUSD(uint256,address)", +"40ed7333": "revenueRecipients(address)", "40ed79f4": "hashimoto(bytes32,bytes8,uint256[],uint256[],uint256)", +"40edcbdd": "approvedBuyers(address)", +"40edcd90": "assignDone()", "40eddc4e": "getCollectedEther()", +"40ee0278": "isFarmPool(address)", +"40ee2005": "workFactor(address)", "40ee2485": "CryptoCovfefes()", +"40ee684c": "disableRule(string)", +"40ee7db2": "uraniumContract()", +"40eeba11": "OracleLiquidty()", "40eedabb": "leader()", "40ef4704": "getState(bytes10)", "40ef78a7": "getExploreData(uint256)", +"40f02ab6": "stakeDuration()", "40f03605": "existingContribution(address,address)", "40f04616": "_buyDiscountTTW(uint256,uint256,address,address)", +"40f0792b": "dividendAddress(address)", "40f0a21f": "ceil(uint256)", +"40f0b0f1": "bancorTransferTokenAmount(address,address[],uint256)", "40f10af2": "revokeAttribute(address,address,string,bytes)", "40f12a02": "getPureWeaponDamageFromTokenId(uint256)", "40f13c0f": "mintingFoundersFinish()", "40f13db5": "addWhitelisted(address,address)", +"40f1712d": "balancerLiquidityDeposit(uint256)", "40f19da7": "isFinish(bytes32,bytes32)", +"40f1a34d": "filledAmounts(bytes32)", +"40f1e0b3": "BrickStarted()", +"40f20881": "startRewards(uint256,address[],uint256[],uint256)", "40f29da3": "testReturnsProductInformation()", "40f2a50b": "findDsp(address)", "40f313b9": "ImportRemappingTestA()", +"40f32be6": "allAdmins()", "40f354f3": "insertTopic(bytes15,address,string,string)", "40f3633e": "icoMin()", "40f3b6f1": "yourShares(address)", "40f3c364": "ProjectTag()", +"40f3e707": "setInvestorAMO(address)", "40f47d41": "registerNameByCOO(string,address)", "40f523f9": "TourMEToken()", "40f54c08": "TrumpCoins()", "40f56cfb": "PYPToken()", +"40f59c21": "isAddressMaintainer(address)", "40f5c954": "sumICOStage8USD()", "40f5ed88": "XPS()", +"40f6a70f": "nonRedeemableTokenClaim(address,address[])", +"40f6ac31": "burnFees()", +"40f6e237": "executeMinPct()", "40f702b4": "userInfo(string,uint256)", +"40f74566": "unsubscribe(bytes32,uint256)", +"40f78693": "getbytes(string,uint256)", +"40f797bb": "setShareToken(address)", +"40f80644": "joyWallet()", "40f81cb5": "providerAllowance(address,bool)", +"40f82755": "ySupplyIndex(address)", "40f828a2": "setLiquid(bool)", +"40f8db93": "changeOddDetails(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"40f8dd86": "executionDailyLimit(address)", +"40f9561f": "setMetapool(address)", +"40f99516": "CarBought(uint256,uint256,address,uint256)", "40f9b34c": "BetrTokenPurchase(address,address,uint256,uint256)", "40f9c62c": "setLargeWalletAddress(address)", "40f9cdf9": "get_tokens_count(uint256)", +"40fa332b": "BEP20TokenRequestsLength()", "40fa368c": "getOrderHash(bytes32,uint256[2],address,bool,uint96)", "40fa61f7": "upgradeFee()", +"40fa78fa": "timetravel()", +"40fbe74f": "setFeesTo(address)", +"40fbfd4b": "coincideEn(bytes1,uint8)", +"40fc3b92": "withdrawlETH(uint256)", "40fc5e7a": "upgradeableTarget()", +"40fd9ee0": "setS1Global(address)", +"40fdcadc": "setLendingPoolManager(address)", "40fdef80": "administration(uint256,string,uint256,uint256,address)", "40fdf515": "issuetender(address,uint256,uint256)", +"40fe799a": "MintShort()", "40fe90d0": "setFreezeOut(address[],bool)", "40ff26ba": "adminAdd(address,string)", "40ff38b2": "rootDomain()", +"40ff4e05": "sellPoolViaBancorV2(address,uint256,bytes)", +"40ffae2e": "create(uint256,string,string,bytes)", +"40fff189": "retrieveUndistributedAuctionRewards()", "40fff80c": "setCommissionAddress(address)", "41002439": "amIReady(address,address)", +"41004025": "GetPoolMoreData(uint256)", "410085df": "refund(address,uint256)", "410090db": "ChangeEmissionGrowthCoefficient(uint8)", +"4100b5aa": "changeReserveAmount(uint256)", +"410112fd": "minPricePerEdition()", "410158cd": "Winsshar(address)", +"410169f3": "isOG2(uint256)", "4102bf5c": "getAvailableAmount(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"4102e546": "addMarketDapp(address)", "4102f4e8": "mToken(address,uint256)", "41031b1d": "NutzEnabled(address,address)", "4103257e": "ReceivedETH(address,uint256)", +"410346b3": "choices(address)", "410366c1": "settleDispute(bytes32,uint256,uint256)", "4103c4c4": "OwnedHelper()", +"4103c557": "getConfigCommon()", "410453ae": "serverEndGame(uint32,int256,bytes32,bytes32,uint256,address,address,bytes)", "4104df21": "cardsMinted()", "4105048d": "Revealed(uint256,uint8)", "410520f7": "PrivateReserveCoin()", +"410521b7": "calcBasePPinToken(address,uint256)", +"4105c395": "getDiffDays(uint256,uint256)", "4105e02f": "remark1()", +"4105f8c7": "LicenseSale(bytes32,bytes32,address,address,uint256,uint256,uint256,uint256,bytes4)", "41061c04": "addVestingMember(address,address,uint256,uint256,uint256)", "410646e0": "getUnclaimedAmount(address,uint16)", +"410673e5": "tally()", "41068ae2": "LicenseCore()", +"41075338": "input_tuple(uint256,uint256)", +"410765e9": "levelPriceUSDCent(uint32)", +"41077bf6": "isP3Submit(string)", +"4107d4c6": "setAddressMap(string,address)", +"4107f10a": "setTokenHandlersLength(uint256)", +"41080415": "getTotalMined(address)", "41080cfa": "getLLV_edit_7()", +"41087dfa": "vaultList(address)", +"4108a00b": "Eligibility_Group_5(address,address,uint256)", +"4108ba28": "RingMined(uint256,uint256,uint256,bytes32,address,address,bool)", "41095b60": "voteForUltimateOutcome(bytes,uint16)", "410968d8": "MajLastNotVal()", "41097886": "LogAirDrop(address,uint256)", "4109a71a": "CerttifyCrowdsale(address,address,address)", +"4109d1c4": "upLove(uint256)", "410a1d32": "getDonation(address)", "410a1db1": "setCommunityPool(address)", "410a6734": "setAllBlockHashes()", "410a68b5": "setOraclizeCallbackGasPrice(uint256)", +"410a7715": "contractUsdTokensSum(address,address[])", +"410a9e51": "randomLuckyWithoutEvent()", +"410abcc7": "bondMarket()", "410ace1f": "EOSBetSlots()", +"410ad8e5": "lockAndTransfer(address,uint256)", "410af6b6": "allowAddressDelegate(address,address)", "410b1da8": "currentTotalSupply()", +"410bc9e3": "token1Raised()", "410bf4bf": "CloudMoolah()", "410c2601": "testGetAccountBalance()", "410c47a0": "bb(uint256)", "410c8005": "SetReciver(address)", "410c83a3": "get_amount_get_buy(uint256)", +"410cb3f8": "getLandType(uint256)", "410cbcc6": "YaoToken(uint256)", +"410d504d": "wdivRound(uint256,uint256)", +"410d59cc": "getItems()", "410da27d": "surveyEndAt()", "410dbad6": "setaddress(address,address,address,address)", "410dcc42": "setSeedHash(uint256,bytes32)", "410e05b3": "bdevIssue(address,uint256)", +"410e1b07": "_totalMiningSupply()", +"410e66f1": "_stakeWeightes(uint256)", "410e7b42": "TestCoin()", "410e8340": "checkAndConfirm(address,bytes32)", +"410e846c": "poolRewardOf(uint8)", +"410e8e4b": "profitedOf(address)", +"410fa5d9": "transferPoolOwnership()", +"410ff91f": "CarrotBalance(address)", "41104ef9": "GlobalOperatorChanged(address,address)", "41107bee": "parseSums(bytes)", +"41108cf2": "fundingSequence(uint256)", "4110a489": "validatorsState(address)", "4110b2c9": "addCapital()", +"41114538": "setSealedSeed(bytes32)", "411273d8": "getTokenToEthAddOrderHint(uint128,uint128)", "4112987c": "strConcat(string,string,string)", "4112b7f1": "tryGetNameOwner(bytes)", "4112ea75": "SongTokenExchangeContractSet(address,address,bool)", "41130267": "fxxkicotestToken()", +"411330bd": "setTokenPerBlock(uint256)", "4113d05b": "createGen0TokenWithDna(uint256)", +"411426dc": "storageEntropy()", +"41154270": "getAPYStake(uint256)", +"41154cbc": "getWBalance()", +"4115a2b6": "delegatedManagers(bytes32,address)", "4115f883": "requestAuditWithPriceHint(string,uint256,uint256)", +"4115fe6b": "getCdpInfo(address,uint256,bytes32)", "411615fd": "investorWithdrew(address,address)", "41161aac": "X(uint256,string,string)", "41163f7c": "deedCount()", "4116dfc3": "getMetaDataCount(address,bytes32)", "411735ee": "getAddressGains(address)", +"411778ce": "burnRenBTC(bytes,uint256)", "41179685": "finalizeContruibute()", +"41181158": "withdrawNFY(address,uint256)", +"411829d1": "appenddetails(string,string)", +"41188ab0": "setWhitelistedRebaserAddress(address,bool)", +"4118bdde": "breakdownAndWithdrawUnderlying(uint256)", "4118cbc9": "setTokenExchangeRate(address,uint256)", +"4118cc46": "createDWeb(bytes32,string,string,bytes32)", "41192788": "refund(address,address[],uint256[])", "41193c18": "blockPlaylist(string)", +"411972ff": "numberofproductsofproducer(int256)", "411a1714": "setOperational(address[],bool)", "411a1ac1": "BitcoinEye()", "411a3dcf": "forward(address,uint256,uint256)", "411a42ea": "ConeTest()", "411a492e": "getNumOfLotteryTickets()", +"411a9801": "getScalingFactorBase()", +"411aa09d": "mintFungibleBatch(address,uint256[],uint256[])", "411ae567": "setSlogan(uint256,bytes)", "411b007e": "founders()", "411b65ef": "setPropertyLastUpdate(uint16,uint256)", +"411c075a": "invitation()", +"411c2a6d": "IncreasedReward(address,uint256)", "411c4e72": "ModifyFeeFraction(uint256)", +"411c9e11": "distributionStartBlock()", "411cc791": "transferWithParams(address,uint256,uint256,uint256,uint256)", "411d3021": "MahalaCoin()", "411d6e19": "USDETH()", +"411d9085": "Payment(address,uint256,uint256,uint256,uint8)", +"411db1ad": "bscsDevAddress()", "411dddb2": "TrueVeganCoinPresale()", "411e6832": "tokenObj()", +"411e74b5": "vote_user_power(address)", +"411f097c": "SetIDChain(address)", "411f93d1": "transferTicket(address,address)", "411fcce5": "BitcoinSoft()", "41203243": "dateOfBonusRelease()", +"41206272": "LPdecimals()", +"4120657a": "allowedAddresses(address)", "4120a236": "FreeNapkins()", "4120a800": "PrepareRollEvent(address,uint256)", "4120bcec": "forceRecoverCollateralOnBehalfOf(address,bytes32,address)", "41215aff": "NewUpgradeMaster(address)", "4121b9f8": "SBECoin()", +"4121c28c": "Invest(address)", "41224405": "get_planet_price()", "41225b0e": "broadcastSchellingRound(uint256,uint256)", "412282cd": "addOwnerAccount(address)", "41228803": "updateBalance(address,uint256,bool)", +"41229530": "approve_423(address,uint256)", "4123057e": "update_oraclize()", "41237fd5": "levBlocks(address)", "4123a0ac": "deleteToken()", "4123a482": "transferTx(address,uint256)", "4123cb6b": "m_numOwners()", +"4123ef60": "isSmartToken(address)", "41240314": "teamTwoSharePrice()", +"41243a79": "lenderPosition(address)", "4124a6a7": "getLockedFunds()", +"4124abf4": "_storeLiquidationEntry(address,uint256,address)", "41252b55": "FreezeTransfers(address,bool)", +"4125ff90": "MAX_DELAY()", +"41263725": "setSupplierBounty(uint256,uint256,uint256)", "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])", +"41268b42": "codeToAddress(uint64)", +"4126b737": "NewGame(bytes32,address,uint256)", "4126d29e": "justFailRequire()", +"41270763": "NewGameLeader(address,uint256,uint256)", "412740c5": "balanceWithInterest(address)", "41275358": "feeAddress()", "4127d54a": "tokensForPresale1()", +"4128076d": "set_rxp_as_seeded()", "41282fe0": "usersCanUnfreeze()", "41288e76": "sendEtherToMultisig()", "412956ce": "goBackToPrivateSale()", +"412979b5": "getDisputePacingOn()", "412988e7": "subSupply(uint256)", "4129912c": "misub(uint64,uint64)", "4129a9d5": "newIcoRound(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", @@ -37315,78 +68284,138 @@ "4129b8ed": "remainingTokenHolder()", "4129d7d1": "MessageSent(address,address,uint256,string,string,uint256)", "412a5a6d": "createContract()", +"412a5fcd": "approve_70(address,uint256)", "412a7be0": "athlete()", "412b2ee0": "forkMe()", "412c0b58": "initiate(bytes32,address,bytes32,uint256)", "412c0c2d": "getWin(uint256)", "412c7dfb": "FOUNDER_WALET()", "412cbc06": "assetsCount(address)", +"412d9738": "_adjustedElapsedTime(uint256)", +"412dfe49": "venusDistributionAddress()", +"412e554e": "upgradePlug(uint256)", "412e829f": "LoveTracker()", "412ec94f": "updateTokenPoolAddress(address)", "412edecd": "setDAOAndMultiSig(address,address)", "412eee05": "enactProp(uint256)", +"412f53a2": "buyMineEmerald()", "412f83b6": "getDelegatorUnbondingLock(address,uint256)", "41300d03": "secondBonusRate()", +"41300e40": "finalGainAmount(address)", "41304fac": "log(string)", +"4130e5a5": "CloneChanged(address,uint8,bool)", "413100e0": "getLeftoverWei(address)", +"41313f8b": "saveBlockNumber(uint256)", "4131775e": "_removeUserCity(address,uint256)", +"4131bc3f": "closeBikX()", +"4131ea5c": "convertFromBep2Amount(uint256,uint256)", "4131f609": "verifyWining(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", "41326679": "inVaults()", "4132bae8": "calculateRAUS()", +"413350bd": "submissionBlock()", +"41339cfb": "setMintMeta(bool)", "4133e7a1": "GxCancelOrders(address)", +"4134110f": "burn(address,uint256,bytes,uint256)", "41348053": "ratePlanOfVendor(uint256,uint256)", "413499f1": "deleteVoters()", "4134a92a": "registerResource(bytes32,uint256,bytes32,string)", +"413520ff": "GetInvestList(address)", "41354590": "setAtomIsBuy(uint256,uint128)", +"4135d870": "feedMultiple(uint256,uint256[],uint256[],bool)", +"41361284": "numberOfRevealedValues()", +"41366962": "directBuyAllowed()", +"4136826d": "_totalSupplyCars()", "413699de": "setOwnerName(address,string)", "4136aa35": "isAlive()", +"413713c1": "getPriceFor(address,address,uint256)", +"4137156c": "NEW_DAI_TOKEN_ADDRESS()", +"41375645": "valuePools(uint256)", +"4137bcd5": "isForked()", "41388aed": "TokenHash(string,string,uint8,uint256)", "41388c71": "DolyToken()", +"41393ca8": "box(uint16,uint16,uint256)", "41395efa": "dgxBalance()", "41398b15": "ethAddress()", "413992b3": "createWarranty(string,string,address,uint256,uint256,uint256)", +"4139ff25": "_latestTimestamp()", "413a7f9a": "MethNSupply()", +"413aac78": "tokenIdByGenerationWaveAndSerial(uint8,uint8,uint256)", "413ab4a8": "_reserve()", "413abc3d": "min_share_price()", +"413abe48": "buyUNIAPPTokens(address)", "413bac7a": "jackpotinfo()", "413bba97": "withdraw(uint256,bytes,address[])", "413bc8eb": "TableDeRapprochement_322()", +"413bf38f": "offers(address)", +"413c2b25": "disableUsableLimitMode(address)", "413c6d13": "setAddressValue(string,address)", +"413cf1e1": "Winners(address[],uint256)", "413d18cb": "currentMessage(uint256)", "413d7b08": "mainSaleTLYperETH()", "413d9c3a": "LOCK_TIME()", "413dc451": "countPerfClients(address)", +"413e1306": "addUpgradePath(uint256,string,uint8)", "413e31a8": "Testita()", "413e4aaf": "calculateOwnerFee(uint256)", +"413e7000": "LockedToken(address)", "413e90e7": "putHashes(uint256)", "413e920d": "oneMillion()", "413ed292": "logState(string,uint8)", +"413ed7b7": "testTransferTokenCompiled()", "413f50da": "addAddressToWhitelist(uint256,address)", "413f7d4c": "SECONDS_BETWEEN_ROUNDS()", +"413fad71": "cancelLoan(uint256,string)", +"414000b5": "resume(uint256)", "414053be": "best_adjustment_for(bool,uint128)", "41409437": "publishMetaData(bytes32,bytes1)", +"4140c93f": "TOTAL_RATIO_SHARES()", +"4141150e": "BuyToken(uint256,uint256,address,address)", +"41418632": "getTokenHandlerMarginCallLimit(uint256)", "4141a121": "ETHERlemon()", +"4141ba8a": "approve_amounts()", +"4141bf32": "stakeMyEth()", "4142f460": "segundos()", "4143125f": "dusttorafflepot()", "41431908": "setManagerAddress(address)", "41434351": "oneday()", +"41441d3b": "enterStaking(uint256)", +"41443a39": "undelegateWithAmount(uint256)", "41445fd2": "c4c()", "41446e0a": "bankersAcceptanceOfDeal()", "4145aa9d": "grantMythexTokens(address,uint256)", "41461bad": "gracePeriodStartBlock()", "414689ff": "unlockAmount()", +"4146c92c": "device_length()", "4146e099": "getCurRoundInfo()", "4147060a": "LogRequirementChange(uint256)", "41470877": "returnVesting()", +"414708ed": "disableUniswap(address)", +"4147cde8": "pool9currUserID()", +"4147da13": "addExp(uint256,uint256)", "4147e15e": "verifyOptionPoolMembers(address)", +"4147e891": "skipPayment(uint256,bool)", +"4147f91d": "updateVotingPeriodInBlocks(uint256)", "4147ffe5": "bitfwdToken()", "41481372": "Fight(uint256,uint256,bool,bool)", +"4148245f": "_poolLimit()", +"4148446b": "timeUntilNextTLP(string,uint8)", "41488cc9": "depositData(bytes32,address,uint256,address,uint256)", +"41493253": "Finalized(bool)", +"41493562": "multisendErc20STA(address[])", +"41493976": "OwnerTransfer(address,address,address,uint256)", "4149953d": "transferRestore(address,address,uint256)", +"4149d9d5": "createLocation(uint256,string,string,string,string,string)", +"4149db48": "NUM_TOKENS()", +"414a37ba": "FIELD_SIZE()", +"414a6811": "seeOwners()", +"414ac85b": "EXPIRED()", "414b49a2": "setFreeLOT(address)", +"414b5064": "countPlanetsByRarity(uint256)", "414b7ad6": "updateAff(uint256,uint256,uint256,uint256)", "414b85e4": "isPreIco(uint256)", +"414b9cf9": "change_subordinate_status(address,bool)", "414bbda2": "declineCoins(address,uint256)", +"414bf7a1": "bbra()", "414c2aab": "MemberHandler(string,address)", "414c377b": "updateSaleLimit(uint256)", "414c4a8d": "maxAmountToSell()", @@ -37397,93 +68426,163 @@ "414e2e9e": "walkTowardsBlock(uint256)", "414e5738": "panicOn()", "414ee145": "lastBlock_f18Hash_uint256()", +"414eff13": "getReferralReward(address)", "415016f4": "getBalance(uint16)", "4150f4cd": "setSysAcc(address)", +"4151003c": "initMine(address)", +"41516162": "MINIMUM_ETH_CONTRIBUTION()", "415194fb": "referral_ledger(address)", +"41521dc0": "addSignedTransaction(uint256,bytes32,bytes)", "41522e41": "setHighWater(uint256)", "41524433": "sellKissBTCWithCallback(uint256,address,uint256)", +"41527ea6": "setSFToken(address)", +"4152e2eb": "wallets(uint256,uint256)", "4153090e": "startFavorEscrow(uint256,uint256,uint256)", "41533ba7": "getRateByTime()", +"41539d4a": "headerBlocks(uint256)", "4153d65b": "securePay(uint256)", "4153d751": "onTransferOwnership(address,address)", "41541318": "createPromoNinja(uint256,address)", "4154aede": "refund(address,uint256,address)", +"4154ddff": "oldBMContractAddress()", "415510df": "addressPreSale()", +"4155361f": "documents(bytes,uint256)", "41554a2e": "issua(uint256)", "41555acd": "storeOwner(address)", "41562e69": "insertNodeBatch(bytes32,bytes32[2][5])", "41566585": "whitelistAddress(address)", "4156fdb7": "createSwap(uint256)", +"41576ca5": "burnMining(uint256)", "41583c4b": "_updateCardClaimerAddress(uint256,address)", "4158506a": "participantsLength()", "41585a0c": "increaseCount(bytes32)", "41587b08": "addWeapon(uint8[176],uint8,uint8)", +"4158a326": "_voteOnBehalfOf(uint256,bool,address,address)", "4158d848": "fundChecking()", "41595f04": "ALLOC_RESERVED()", "4159712a": "LogOwnerEthWithdrawn(address,uint256,string)", "415a0d46": "_preValidateTokenTransfer(address,uint256)", +"415a1f90": "CreateItem(uint256,uint8,uint8,uint8,uint8,uint256,uint256,address)", +"415a7de2": "holdAmount(address)", +"415b2795": "prizelevelsuns(uint256)", "415bc701": "HCPTToken()", +"415bc839": "investmentBalance()", "415bd3fa": "_report(bool,string)", +"415bf1aa": "splitLP(address,uint256)", "415c7593": "autoRentByAtom(uint256,uint256)", +"415d9ef5": "EthTradeCreated(uint256,uint8,uint8,uint256,uint256,address)", "415dd7d8": "newRandomValue(bytes,address,uint256)", +"415e2f2c": "countStaking()", +"415e4de6": "existOrder(address,address,uint256,uint256,address,bytes32)", "415eea1b": "vaultNum()", "415ef37c": "weiSold()", "415efb15": "setup(string,string,string,uint256,string,string,uint256)", "415f1240": "liquidate(uint256)", +"415f1867": "gdaoRewardRate()", "415f47ea": "decodeOrderUserId(uint256)", "415f9498": "commission2()", "415fad10": "test_threeInvalidEqInt()", +"415fe9c4": "voterProposals(uint256)", "415ffba7": "close(uint256,bytes)", +"41602765": "setRewardMin(uint256)", "416108e2": "ERRLCoin()", +"416123af": "checkStartReturn()", +"4161d770": "pendingBose(uint256,address)", "4162169f": "dao()", "416232af": "CampaignContract(address,address,address,address,uint256,string)", +"4162b8fe": "_unirouter()", +"4162cc88": "jobIds(uint256)", +"4162e093": "loaddewegrgrer()", "4163afb6": "MANHATTANPROXY8THAVE()", "4163b5a4": "weiUsdRate()", "4163d75d": "delPokemonFromSellingList(address,uint256)", +"41640201": "changeSharePrice(uint256)", +"416405d7": "getCompBalanceMetadata(address,address)", +"41644f8c": "UPDATE_BENEFICIARY_ROLE()", "4165295a": "getMixParticipantIdByAddress(bytes32,uint256,address,address)", +"41658341": "sharedStakeMultiplier()", +"41658f3c": "initialize(string,string,uint256,uint8)", +"41659cdb": "getPendingTransactionIds(uint256,uint256)", +"4165cedd": "developmentSupply()", +"4165f458": "makeCombinedTransaction(address,address,uint256,uint256)", +"4165fb51": "butterflyPerBlock()", "416608a9": "updateTemplate(uint256,uint256,uint256,string,string)", +"41663812": "getAppBundleCount(uint64)", +"4166aea6": "totalmaxparticipantes()", "4166c1fd": "getElevation(uint8,uint8)", "4166eab4": "zeastadscredits()", +"41674028": "startTimePublicSale()", +"4167566c": "Lock(address,bool)", +"41675c33": "add_voting(string,string[])", "41676f15": "isOrganizer(address)", +"416781f2": "secondTokenScale()", +"41679fd2": "pair(bytes32)", "4167c2fd": "setVaults(address,address,address,address,address)", "416851a0": "testOracleQuery(string,string)", "4168614a": "volumeBonus(uint256)", +"416880b0": "getAndUpdateEffectiveDelegatedToValidator(uint256,uint256)", "4168de57": "teamIssueVesting(address,uint256)", +"41693dd8": "PHARAOH_REQ_START()", +"41694062": "EARLY_PHASE_MINIMUM_INVESTMENT_CAP()", "41696fa8": "updateMyEntity(uint256,bytes32,bytes32,bool,address,uint256,uint256)", +"41698235": "exited(address,address)", "416a1b62": "Liquet()", +"416a5d81": "getBrokersCount()", +"416a8b20": "ray()", +"416ad58d": "ItemsBought(address,uint256,uint256)", "416ae768": "getUserState(address)", +"416b10bf": "createCollateral(uint256,uint8,uint8)", +"416b1ca5": "maxTimeToMaturity()", +"416bc745": "diceData(bytes32)", "416bc7f6": "createSplitter(address[],string)", +"416bf61e": "MintRejected(address,uint256,uint256,uint256,uint256)", "416c0d38": "adminRetrieveContractConfig()", "416c334d": "withdrawDistributedToPoolOwners()", +"416c35c9": "buySpin(uint256,uint8)", "416c3f16": "eligibleAmount(address,uint256)", "416c6383": "testConcatMemory31Bytes()", "416c8701": "beyond()", +"416c8900": "createBet(string,string,string,string,string,uint256,uint256,uint256,address)", "416c9627": "updatePresaleBonus(uint256)", "416ccd02": "limitVIP()", "416cf34e": "ULCToken(address,uint256)", +"416d69b1": "SubmitStakePool()", +"416da145": "setCIO(address)", "416da702": "TOKEN_USDCENT_PRICE()", "416dc762": "endThirdPeriodTimestamp()", "416dffb0": "cleanupURLs()", "416e517e": "setOutcome(uint256)", "416e6d5e": "balanceManager()", "416e70f6": "linkToMasterWallet(address,address)", +"416e8604": "na()", +"416edaa0": "renounceSuperAdmin()", "416f222a": "submitBid(uint256,uint256,uint256)", +"416f281d": "DOMAIN_CHAIN_ID()", "416f5483": "changeEthAddress(address)", +"416f87b8": "changeSettlementAdmin(address)", +"416fe85c": "setSystem(address,bool)", "41709748": "getTotalDrone()", "4170a419": "setCCH_edit_34(string)", "4170e191": "MiniMeBaseCrowdsale(address)", "4170ee08": "reVote(uint256)", "41713a37": "directTradeAllowed()", "41718066": "hitFoundationPrecent()", +"417180d1": "refreshCompSpeedsInternal()", +"4171a537": "depositTRC20(address,uint64)", +"4171d79a": "underlyingLoanable()", +"41727a0e": "ethRaised(uint256)", "417297a0": "issueTokensSale(address[])", "4172d080": "tokenExchangeRate()", "41733f7a": "fooToken()", "4173b181": "setWeiPrice(uint256)", "4173c27a": "REEFToken()", +"4173cce3": "massUpdateSafes()", "4173ffbc": "getRand(uint256,uint256)", "41744dd4": "feeRatio()", "4174a943": "Deposited(address,address,address,uint256)", "4174f1a5": "TOKEN_RATE()", +"41753368": "setAcceleratedCalls(address,uint32,bool)", +"41757683": "DailyDividendPayout(address,uint256,uint256,uint256,uint256)", "4175b307": "addAddresses(address[],string)", "41760afc": "_setEventsHistory(address)", "41763225": "createRewardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", @@ -37493,88 +68592,166 @@ "4177340d": "openGamePlayNo(uint256)", "4177afa6": "TIER_2_BUYIN()", "4178617f": "addAllowedToken(address)", +"41787aad": "nodeAddressReward()", +"4178b249": "receipts(uint256,address)", +"417918b7": "CurrentCoin(address)", +"41795692": "transferERC(address,address,uint256)", "41796bea": "OfferCreated(uint256,bytes,address)", +"4179740b": "getGulpDetails()", "41799883": "decreaseSoldSaleSupply(uint256)", +"4179b4fb": "HALVING_AT_BLOCK(uint256)", +"4179e36e": "virtTokenHolders__limit(address)", +"417a0698": "tokenLimits(address)", "417a2909": "getUpdateTimes()", "417a767e": "getBetsBlock()", "417a7d60": "checkMessageData(address)", "417b3409": "DownloadMusic(uint256,address,uint256)", +"417b6591": "getKernelAppBasesNamespace()", "417b86fb": "getPolicyDetailsByHash(bytes32)", "417ba840": "checkMemberLevel(address)", +"417bba80": "getNumberEth()", +"417bd604": "Bid(address)", +"417bf0fb": "pendingSWP(uint256,address)", "417c73a7": "addToBlackList(address)", "417c8d40": "SEK_Omnidollar()", "417cb353": "totalDecimals()", +"417cd6c2": "requestEventResult(string,string)", +"417cde02": "get_special_pairs(uint256)", +"417d37d7": "createAsset(address,uint256,bytes)", "417d5fb4": "advisersPeriodsNumber()", +"417d6cd3": "getAvailableReInvestInAmount(address)", +"417d9e4b": "getInboxMessageStatus(bytes32)", +"417da02e": "checkOrderStatus(int256)", "417de5b5": "mintAirdropToken(uint256)", "417e8e67": "getCompoundedInterest(uint256,uint256,uint256)", "417ea2dc": "platformSupplyRemaining()", +"417f037f": "approve_107(address,uint256)", "417f204e": "GATC(uint256,string,string)", "417fd6b6": "setMinBidAmount(uint256)", "41808d4a": "test_remove_tail()", "4180b70d": "KKday()", "4180c2d5": "payout(address[])", +"4180ddad": "outgoingTransferNonce()", +"4180e5b5": "approveClaimOnBehalf(address)", +"4180ed65": "last_update()", "4180f6ec": "RESERVED_TOKENS_FOUNDERS_TEAM()", +"41813d72": "forceRedeem(address,uint256)", +"418160d0": "lptSellOrders(address)", "4181641b": "engrave(string,bytes32)", +"4181ebe0": "openLockEvent()", +"41826c2d": "getCurrentAllocations()", "41829445": "createNewCE(bytes32)", +"4182cb9a": "endsecondroundtime()", "4182e5eb": "deleteContract(uint256,address,uint8[],bytes32[],bytes32[])", "4182fa46": "getHouseAddressShare()", "41831218": "maxPerPersion()", "41832bed": "generateOrderHashes(address[4],uint256[8])", "4183689f": "initSignetures()", +"41837a2f": "magicNumber()", "4183f0b3": "startCardSale()", "41843aa5": "subusermoney(address,uint256)", "4184907e": "ESPlatts()", "41852eb2": "BuyToken()", +"418573b7": "announceVerifierRemovalIntent(address)", "418599cb": "SerenityTeamAllocator()", +"4185af51": "caseWins(uint256)", "4185f8eb": "receiveEth()", "4185fdc5": "decreaseFrozen(address,uint256)", +"4185ff83": "getVoteOnProposal(uint256,address)", +"4186252b": "team_addresses_token_percentage(address)", "41863a7d": "victorieumICO1Token()", +"41865f48": "getHubInfo()", "41867384": "new_bonus_for_next_period()", "41868769": "CallAborted(address,bytes)", +"41872748": "viewSaleRBX()", "4187a193": "stageThreeStart()", +"4187b7d6": "mothership()", +"4187e525": "getDiamondIssuerAndReport(uint256)", "41883b78": "withdrawHouseEarnings()", +"418866a5": "referalUpline(uint256)", "4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", +"41891d0e": "allocationContract()", "418939c0": "fillBid()", "4189a68e": "sell(uint256,address)", +"4189bb49": "totalOpenLoanCount()", +"418a091b": "getListDistance()", +"418ac0d6": "escrowedProjectPayees(uint256)", +"418ad7eb": "poolFeeOwner()", "418ae602": "verificationAddressHoldersListCountMap(address)", +"418b79ab": "getBookById(uint256)", "418bc2ee": "updateHatchingRange(uint16,uint16)", "418bc76c": "gasForKWH()", +"418bed88": "voters(address,uint256,uint256)", +"418c091c": "boostFunds(uint256,uint256,uint256,uint256,address)", +"418c3f7a": "contractStart_Timestamp()", "418c7de1": "currentFulfillment(string)", "418ca0c7": "subOnStage(address,uint256,uint256)", "418cb077": "CustomToken()", "418cf199": "setEstimateCost(uint256,uint256)", +"418cf5b1": "setState(uint256,uint8,uint256,bytes32)", "418d4dcc": "collectPayoutForAddress(address,address)", +"418d70f7": "getSplitThresholdEthToToken(address)", "418d75b6": "getBuyerOption()", +"418d78d4": "relay(string[],uint64[],uint64[],uint64[])", "418f1487": "confirmDividendsFromPot()", +"418f3128": "totalDepositors()", +"418f35cc": "getCurrentPosition()", "418f3a9b": "Invest(address,uint32,uint32,uint256)", +"418fabe4": "_encode_varint(uint256,uint256,bytes)", "4190af2e": "walletTokenReservation()", "4190cfc1": "getAllQuestionAddresses()", "4190f365": "PUBLIC_MAX_CONTRIBUTION()", "41910104": "returnSuspendedPayments(address)", "41910112": "DecentBetToken(address,address,address,uint256,uint256,uint256)", "41910f90": "BASE_RATE()", +"4191a509": "Mystring()", "41923c0c": "PRICE_ICO1()", "419259ef": "reissueCert(bytes32,bytes,bytes32,uint256,bytes32,bytes,uint256)", "4192610e": "callThisToStop()", +"4192b287": "setNewExternalContract(string,address)", "419308f7": "getPreviousNode(bytes32)", +"41938b02": "maxWindowSize()", "4193b8b7": "bytesToUint(int256,bytes)", "4193e15f": "OrbusToken()", "419469fe": "calculateCellSell(uint256)", "41953e90": "CoinTel()", +"419544a0": "createVestingSchedule(address,uint256)", +"4195acdf": "topReferrer()", +"4195f5c2": "propose_new_owner(uint256,address)", +"4195facb": "_addEmployee(address,uint256,uint64,string)", +"419638f9": "betTimeDelay()", +"4196901b": "medalType(uint256)", +"4196ca84": "tokenUserDateOfBirth(uint256)", "4196cd4a": "stateIndexToApproved(uint256)", +"4196ee75": "currentRoundTotalActiveStake()", "4196fad9": "mop()", "419759f5": "depositAmount()", +"41975af8": "withdrawPayments(uint256)", "41976e09": "getPrice(address)", +"41977bec": "totalAccumulatedRewardGdao()", +"4198709a": "tokenPerBlock()", "4198d24a": "mintAllocations()", "4198e94d": "setbounty(uint256)", "419905e5": "pray()", +"41992092": "highestCardId()", +"41994140": "cardIdToOwner(uint256)", "419945f8": "ExpiringMarket(uint256)", +"4199977a": "Explore(uint256,uint256,uint256,uint256)", +"4199c1e9": "viewPrivEnd()", "4199dbe6": "avvia_votazioni()", "419a3de6": "allotItem(uint256,uint256)", +"419a4a65": "stageSpending()", +"419a7f92": "kickEvilPoolInRank(uint256)", "419a88b6": "XPA()", "419ab31e": "USERS_address()", +"419adcd8": "minTokenBeforeSwap()", +"419b19fe": "_debasePercent()", "419b96fa": "removeBusiness(address)", "419bd6c0": "Nairotex()", +"419be624": "getMaturingBalance(address)", +"419c65ff": "testAssertEqualFailure()", +"419cb550": "sendCrossDomainMessage(bytes)", +"419cc953": "resetCrimCashSupply()", "419ce264": "ercToNativeBridgesAllowed()", "419db07b": "generousFee()", "419e6e5c": "getTotalNamesCount()", @@ -37582,18 +68759,28 @@ "419eafdc": "winPercent(uint256)", "419ef898": "IBRToken()", "419f6a3a": "isAirdropOver()", +"419f7753": "beforeWithdraw()", "419ffa03": "fipsRegister(address)", +"41a0622c": "UniSwapAddLiquityV2_GeneralAddress()", "41a0894d": "getReferrals(address)", "41a08aaf": "judge(uint256,bool)", "41a0be7b": "renameHorsey(uint256,string)", +"41a0c2c6": "l2Address()", "41a1053f": "strRemoveLastCharacter(string)", +"41a18d2c": "venusSupplierIndex(address,address)", +"41a1914e": "instances(string)", "41a1a582": "getOwnerPayout(uint256)", +"41a1b920": "meePriceOne()", "41a1d66c": "sendTokensToExchange(uint256)", +"41a259a6": "nonceHolder()", "41a2625f": "endPreico()", "41a28df6": "setAdminAddr(address)", "41a292be": "calcPriceAt(uint256)", +"41a2ac70": "setRewardFee(uint256)", +"41a2d655": "getAlphaLastUpdated()", "41a41523": "TIMEDEX()", "41a42ba2": "updateNetworkConnection(string,string,address)", +"41a4396e": "winThisTx(uint256,uint256)", "41a461fb": "SDAToken()", "41a49409": "setWhitelistManager(address)", "41a494c5": "award()", @@ -37601,8 +68788,11 @@ "41a4c5bf": "changeBonus(uint256,uint256,uint256,uint256,uint256)", "41a51d00": "total0xbtcBalance()", "41a5518f": "getMineInfoInDay(address,uint256,uint256)", +"41a58223": "approve_136(address,uint256)", "41a59cef": "SDGT(uint256,string,uint8,string)", "41a5b33d": "withdrawFromToken(address,address,uint256)", +"41a61807": "vaccMultiplier(address)", +"41a6990f": "getLatestTimestamp(address)", "41a6cfda": "ROSCcoin(uint256,string,string)", "41a6f46e": "FIESTA()", "41a70b4c": "addArgumentToRequestString(uint256,bytes32,bytes32)", @@ -37611,25 +68801,46 @@ "41a806ca": "addFamily(address)", "41a82cc1": "ruleB(uint256)", "41a84a0d": "getTokensForContribution(address,uint16)", +"41a896e7": "BondPayoutsMNE(address,uint256)", +"41a89972": "setSpecialBonus(uint256)", "41a928fe": "downTick(uint256,uint256)", "41a943e2": "addAdmin(address,address,bool,bool,bytes32)", +"41a9b98e": "getAssetDecimals(bytes32)", +"41aa645b": "ORDER_SELECTOR()", +"41aaa059": "coverReward()", +"41aaa9b6": "UpdateBurnBal(uint256)", "41aaccb0": "claim_eth_by_address()", +"41ab5e55": "_borrowDaiAtomic(uint256,address)", +"41abc85d": "convertToSLVT(uint256,uint256,uint256,bytes)", "41abe705": "doCount(address)", +"41ac49a3": "signerAuthorizations(address,address)", "41ac59b7": "massTransfer(address[])", "41ac5dd0": "updateFulfillment(uint256,uint256,string)", "41ad3f57": "chickenToAltar(uint256)", "41ad5c72": "createGroup(bytes32,uint256)", "41ad785e": "payAndDonate(address,address)", "41adb3f5": "saveInfo(string)", +"41adca42": "stableCoinVesting(address)", "41ade6b7": "setRegisteredFirm(string,bool)", +"41ae5f7b": "deregisterPrimitive(address)", "41aeaea7": "restWei()", +"41aec0ed": "MintingAmountPerUser()", +"41aec538": "getBalance1()", +"41aec547": "arb(uint256,uint256)", "41aed7cb": "isActiveEmployer(address,address)", "41af1524": "verificationCodeHash()", "41affe19": "publicSaleWallets(uint256)", +"41b0012b": "poolsUsedByUser(address,uint256)", +"41b01672": "setEthPrice(uint256,uint256,uint256,uint256,uint256,uint256)", "41b0b4cd": "distributedTeamStakes()", +"41b0e795": "withdrawBNB1(uint256)", +"41b0eb53": "getSizeArrayType(uint8,uint64)", +"41b1b0d8": "updatePriceValidSeconds(uint256)", "41b2121c": "newInvestor(address,uint256,uint256)", +"41b2264c": "actSetStartTime(uint256)", "41b2485b": "fiatContract()", "41b280d2": "getTXwithCode(bytes32)", +"41b2aa4b": "_isEnterPhase()", "41b3203c": "PlaySimpleGame(uint8,bool)", "41b3a0d9": "contractEnabled()", "41b3d185": "minDeposit()", @@ -37637,72 +68848,118 @@ "41b4a626": "cashSale(address,uint256)", "41b4be87": "getPoolbyGtype(uint8)", "41b5467a": "getUnpaidPerfit(uint32,uint32,uint256)", +"41b56fae": "eventNum()", "41b6f6ce": "getStatusDeal(bytes32)", "41b6fcf7": "paymentDigest(bytes32,uint256)", +"41b74358": "transferToUplineDiamond(address,address)", +"41b75cec": "__calcSharesDueWithInflation(int256,int256)", "41b80184": "lastProfitTransferTimestamp()", "41b8547c": "Dev_Supply()", +"41b932e7": "ico_investor(address)", "41b94f10": "_toTaxed(uint256)", "41b989d0": "CashDeposit(address,uint256)", +"41b98c76": "concent()", +"41b9c135": "myWalletForETH()", "41b9c14c": "getShipsByOwner()", "41b9dc2b": "has(bytes32,bytes32)", "41ba4738": "GOLD_AMOUNT_NDC()", +"41ba7011": "setLeagueRosterContractAddress(address)", "41ba9a17": "removeMilestones(uint8)", +"41bad6c2": "JoinPool(address,uint256,bytes32,bytes2)", "41bb0559": "symbol(string)", "41bb26d3": "handlePayment(address)", "41bb50f7": "eachIssuedAmount()", "41bc0b6a": "LivepeerVerifier(address,address,string)", +"41bc18b1": "unwhitelistOnEmission(address)", "41bc2bea": "setProviderOwner(uint256,address)", "41bc7b1f": "getOracleDetails()", "41bcd712": "RTPToken()", +"41bceced": "setMinters(address[],bool[])", +"41bd5071": "PRODUCT_DEVELOPMENT_ADDRESS()", +"41bd5638": "CrowdsToSale(uint256)", "41bd84aa": "_removeAffiliate(uint256)", +"41bdddbe": "changeSupplyCgPerRound(uint256)", +"41bdf59b": "setUsdcPrice(uint256)", "41be0a14": "SPOT9()", "41be44d5": "XAUDToken()", +"41be5f64": "minSubscription()", +"41be79ac": "startChangeTreasuryFurnace(address)", "41be84cf": "getWingsValue(uint256)", "41beb00c": "getResult(bytes32,uint256)", "41bec0d2": "setERC20Address(address)", "41becaef": "tokenIssueIndex()", +"41becc07": "getRewardAndClaimedStatus(uint256,uint256)", "41beef9d": "getSpareRecommAddr()", +"41bf4e2b": "fusionFee()", "41c06b2a": "_reached(uint256)", "41c0aa0e": "lockUnsoldTokens(address)", "41c0dc59": "PAYOUT_FRAC_TOP()", "41c0e1b5": "kill()", +"41c11666": "changeTokenSymbol(uint256,string)", "41c12a70": "voteNo()", "41c14eb4": "BrokerImp(address,address,uint256,address)", "41c173e2": "preICO(address,uint256)", +"41c17da5": "currentRateCount()", +"41c1ef38": "b21Contract()", "41c1f017": "CONFIG_MAX_EXPOSURE_DIV()", "41c1f5b4": "dreamToken()", "41c1f60e": "instruct_5()", +"41c228b9": "getHoneyNumOfLevel(uint256,uint256)", +"41c256c1": "unlockSetProxy(address)", "41c2c8f6": "FutaToken()", "41c3e7c7": "report(address,bytes32,uint256[],bool)", "41c41025": "updateFunders(address,bytes32,string,uint256)", "41c41923": "freeze_contract()", +"41c43c35": "ConsoleLog()", "41c46ff7": "PALToken8(uint256,address)", "41c4c7eb": "sellBreeding(uint256,uint256,uint256,uint16,bool)", +"41c53162": "startingSupply()", +"41c57c8d": "withdrawDydx(uint256)", +"41c5b064": "buySupra(uint256)", "41c5cf5c": "ICOend()", +"41c607ec": "setPeriodPreITO_startTime(uint256)", "41c61383": "totalClaims()", +"41c6280a": "UNLOCK_REWARD_PERCENT()", +"41c66d0a": "devSupply()", +"41c678a9": "MaxTemperature()", "41c6f609": "registerNewMember(address,uint256)", +"41c728b9": "mintVerify(address,address,uint256,uint256)", +"41c74383": "closeList(uint256)", "41c7eb41": "populateTrancheRates()", "41c8146c": "changeTimeBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", "41c838cb": "getSANitized(string)", +"41c88139": "getSuccessIncubation(uint256)", +"41c881a0": "mintToBalance(address,uint256)", "41c8b1de": "lendingInterestRatePercentage()", "41c8ba1e": "MIN_CONTRIBUTION_CHF()", +"41c91cb5": "approveBuyers(address[])", "41c9692b": "phase1Duration()", "41c96964": "getInvestorInfo(uint256)", "41c9c72d": "updateDelegatorRewards(address[],uint256[])", "41ca641e": "getShareholders()", +"41ca6d7c": "mintBegin(address,uint256)", "41ca7242": "maxCapPre()", +"41ca9b8e": "SystemChangeMaxNumMC(uint256,uint256)", "41caea7d": "EventWithdraw(address,uint256)", +"41cb2bbf": "plotDescriptors(uint256)", +"41cb4c05": "scheduleSet(address,uint256,uint256,bool,bytes32,bytes32)", +"41cb8c20": "totalStaked(uint256)", "41cbd6ea": "getTrustedPartner(address)", +"41cbec09": "emitWithdrawn(address,uint256)", +"41cbf54a": "DELEGATE_TYPEHASH()", "41cbfc7b": "getKeysByType(uint256)", "41cc0aa5": "RET_MUL()", "41cc8912": "renameToken(string,string)", "41ccf987": "ownedPool()", "41cd47bf": "FEE_NUMERATOR()", "41cdd253": "TestFMA(uint256,string,string)", +"41ce2012": "unexpectedPackage(uint8,bytes)", +"41ce5521": "DanhSachVanDongVien()", "41ce7f23": "BACToken(uint256,string,uint8,string)", "41ce909f": "Bitroneum()", "41ce979d": "VanityReleased(string)", "41ce9f0e": "setBZRxTokenContractAddress(address)", +"41cf3650": "seterctokenAddress(address)", "41cfbb96": "test_someOtherFalseTest()", "41d003cb": "setBonusCreationRate(uint256)", "41d00774": "CoefRew()", @@ -37711,22 +68968,40 @@ "41d09fbe": "sendWinnings()", "41d0fcb6": "setSanctuaryAddress(address,address)", "41d15b54": "createProductionUnitTokenContract(uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"41d1a1dc": "sendMultiSig(address,uint256,bytes,uint256,uint64,address[],bytes[])", "41d1a4d6": "getStrategyAtIndex(uint256)", "41d1da19": "Cloudeb()", +"41d1de97": "allPools(uint256)", "41d20767": "ethMinContribution()", "41d2c748": "applyCoeff(uint256,address)", "41d31feb": "get_read_only_keys()", +"41d33fa3": "getEstimatedOutputUni(uint256,address)", +"41d36451": "engine3userList(uint256)", +"41d3b9a9": "resultValue(uint256)", +"41d3c84c": "fundingRate()", "41d45f4a": "UNEK()", "41d4a1ab": "bonusToken()", "41d4a39e": "setCrowdsaleClosed(bool,bool)", +"41d57616": "getReference(address)", +"41d59345": "marginShares()", +"41d5c33c": "activeExchange()", "41d5da6b": "getMyStatus(bytes32,bytes32)", "41d5e10c": "BittwattToken(uint256)", +"41d5f619": "safeGrantVestingTokens(address,uint256,uint256,uint32,uint32,uint32,uint32,bool)", "41d5f7ac": "eligibleAmountCheck(address,uint256)", +"41d610d3": "tulipIdToApproved(uint256)", +"41d6864e": "int_max()", "41d76a9c": "firstTime()", +"41d7bdbe": "DepositReceived(uint256,uint256,uint256)", "41d80050": "FundsGot(address,uint256)", +"41d8010a": "handleFees(uint256)", +"41d83e7a": "setHighestCardId(uint256)", "41d875dc": "setStr(uint256,string)", "41d8bc5f": "setExchangeRateOracle(address)", +"41d8ca41": "ISWPerBlock()", +"41d8e755": "userTransfered(address)", "41d966a3": "sendFyle(address,address,string,string)", +"41d9c2c4": "TMTG_Unstash(uint256)", "41d9cc43": "forgeItems(uint256,uint256)", "41da7538": "getJadeProduction(address)", "41da7555": "ownerPercentage()", @@ -37736,198 +69011,360 @@ "41db8c93": "_startCrowdsale(address,uint256)", "41dbb51e": "IsFrozen()", "41dbbb61": "SmartexFundsManager()", +"41dbe524": "acceptedSynthAsset(address)", "41dbe546": "HedeCoin()", "41dc02cf": "changePatentSale(uint16,uint256)", +"41dc4751": "rareArray(uint256)", +"41dc5490": "newBareInstance()", +"41dc6584": "NextRate(uint256)", +"41dcaf34": "FUTURE_EACH_MINT()", "41dcf454": "tokenURI(uint256,string)", +"41dd21f1": "setTop(uint256,address,uint256)", +"41de1127": "attend(uint256)", "41de2164": "getPhaseStartTime(uint256)", "41de4181": "fireDepositToChildEvent(uint256)", "41de4f16": "queenchUSBToken()", "41dedc58": "gradeinfo()", "41defd82": "cancelJobByAdmin(bytes32,uint256,address,uint256)", +"41defe0c": "getBeneficiaryAtIndex(uint256)", +"41df5b74": "ROLE_SRV()", "41df696e": "start_play_quiz(string,string)", "41dfed3a": "viewCurrentPrice()", +"41e00bb9": "decreaseTax()", +"41e03e9a": "setMarketManagerAddr(address)", "41e0b5d4": "Fenerbahce()", "41e0c407": "getStudentCount()", +"41e0e575": "NextRoundStarted(uint256,uint256,uint256)", +"41e10b88": "getOutputAmount(bytes32,bytes32,uint256)", "41e1234e": "presaleFemaleStart()", "41e14251": "devuelveUsers()", "41e18398": "batchTransferFromManyToMany(address[],address[],uint256[])", +"41e2516c": "changeDeposit(bytes32,uint256,bytes32,uint256,address)", +"41e285e7": "buyingWETHTokenFee()", +"41e2b933": "setnum(uint256)", "41e2cdf4": "myGauntletType()", +"41e339e2": "getUserVotedOn(address)", "41e34be9": "unitSellable(uint256)", +"41e383ed": "FEE_FOR_LISTING_TOKEN_IN_OWL()", "41e3a6b5": "updateSplitBalances()", +"41e461a0": "init(string,string,string)", "41e50814": "DEVCoin(uint256,uint256)", "41e51e89": "approveZeroTokensTest(address)", +"41e5a5d4": "getDynamicWeightSettings(address)", "41e60c86": "unsign()", "41e62be6": "VRToken()", "41e6fd4b": "hasSecret(uint256)", +"41e70801": "ManualTokensTransferred(address,uint256)", +"41e72016": "hundingBets(uint256)", +"41e763a6": "setXmonToken(address)", "41e7a787": "ERC223StandardToken(string,string,uint8,address,uint256)", +"41e7aaae": "wethDebt()", "41e7c47e": "FBR2()", "41e831b0": "Oboc(uint256,string,string)", "41e884d4": "viewLastClaimedDividend(address,address)", +"41e88a9b": "mkatPerBlock()", "41e8b94c": "isThereABlockAtCoordinates(uint16,uint16)", "41e8da52": "makeBet(uint256,uint256,address,uint256,uint256)", "41e8fe9f": "EventRandomLedgerRevealed(address,uint256,uint256,address)", "41e906e5": "getExercised(address)", +"41e91d90": "cerc20()", "41ea5127": "BaseAuction()", "41ea59a9": "isFoundationSupplyAssigned()", "41eb1a4a": "setUintCoinProduction(address,address,uint256,uint256,bool)", "41eb24bb": "renouncePauser(address)", "41ebb063": "KRHCoin(uint256,string,uint8,string)", "41ebe9c6": "ScarcecoinStart()", +"41ebf4df": "frozenAccountMapping(address)", +"41ec2ec6": "setDirectDrop(bool)", +"41ec7bde": "ST1OP1(address,uint256,uint256,uint256)", +"41eccbd5": "ethTotal()", "41ecd1cd": "withdrawOwnerUnrevealed(uint256,address)", "41ece976": "updateMinInvestmentForPreIco(uint256)", +"41ecf355": "getUsernameFromWallet(address,address)", "41ecf95b": "ParticipantJoined(uint8,uint16,uint32,address)", +"41ecfa1c": "populateWhitelisted(address[],uint256[])", +"41ed1711": "lockOnTime(int8)", "41ed2c12": "marketManager()", "41eddf00": "checkIfCurrentlyActive(uint256)", +"41edf65a": "indexOfOrders()", +"41ee021b": "approve_3(address,uint256)", +"41ee8b15": "privateFourthWallet(address)", "41ee903e": "clear(uint256,uint256)", "41eeb105": "doRelease(bytes16,address,address,uint256,uint16,uint128)", "41ef3879": "stage1_price()", +"41ef421a": "feeForAmount(uint256)", "41ef6bb7": "uncirculatedSupplyCount()", "41ef858f": "whitelistAddress(address,address,uint256)", "41ef9184": "Pretorian()", +"41efa5c7": "W_WALLET(address)", +"41eff485": "_getBorrowAmountAndRate(bytes32,uint256)", +"41f00310": "setRedemptionTimeout(uint32)", +"41f059fa": "setTokenPools(uint256,uint256,address[],uint256[])", +"41f08b52": "minterList()", +"41f0b723": "gem(bytes32)", +"41f0d806": "my_func()", "41f18b43": "claimEarlyIncomebyAddress(address)", +"41f1a231": "swapPBRToPOBR(uint256)", "41f1d4dd": "whitelistControl()", "41f1e76c": "minFundingGoalReached()", "41f1f3e5": "getPayeeIndex(bytes32,address,address)", +"41f2085b": "uopToken()", +"41f2395c": "custodiesServedBBD(uint256,address)", +"41f2c457": "approve_263(address,uint256)", "41f2ce14": "setABalance(address,uint256)", +"41f2fb7e": "sushiMineClaim()", "41f31724": "Tzedakah()", "41f36984": "collectGamePayout(uint256,uint256)", +"41f431fd": "moveERC20(address,address,uint256)", "41f4793a": "getCurrentImpeachmentVotesSupporting()", "41f48ebf": "currentIco()", "41f4ab98": "addManyToPresaleWhitelist(address[])", "41f4fcaf": "isDrop(uint256,address)", "41f51941": "doActivateSale(address)", +"41f5947b": "isNameAvailable(bytes32)", "41f59e81": "initBonuses()", "41f64b85": "deleteBag(uint256)", "41f65507": "pendingOracleA()", "41f6e77e": "FindTheCureCoin2()", "41f70465": "startCoinOffering(uint256,uint256,uint256,uint256)", +"41f7551b": "base9Percent()", +"41f75d26": "noramlDistributionMean()", "41f77260": "withdrawSyndicateTokens()", +"41f7deb8": "_FQ2Inv(uint256,uint256)", +"41f89cf6": "getAllReserves(address)", "41f8a524": "Verificator()", +"41f8aa88": "setNewRegistrar(address)", "41f99b69": "setWithdrawalCoolingPeriod(uint256)", "41f99e2f": "getPostDonationAmount(address,uint256)", +"41f9ae04": "balanceOfy3CRVin3CRV()", "41fa4876": "multiBlockRandomGen(uint256,uint256)", "41fade8f": "getconfig(address)", +"41fb2393": "transferTokenWithValue(address,uint256)", "41fb55c6": "mMaxAppCode()", "41fbb050": "foundation()", +"41fbbc31": "release(uint64)", +"41fc048d": "setAMMStatus(bool)", "41fcb0f7": "buyNapkins(address)", +"41fcd35d": "poolClosing()", +"41fd2b84": "getPassSecondsFromLastClaim()", "41fd32cf": "SafecontractsTREXCrowdfunding()", +"41fdda5a": "activateLevelearnings(address)", "41fe0a24": "buyCrystalDemand(uint256,uint256,string,string)", +"41fe4502": "setDelegatedVault(address)", +"41fe9789": "setTargetLiquidity(uint256,bool)", "41fee898": "refundPercent()", +"41ff1bcc": "userBurn(bytes32,uint256,uint256,uint256,address,bytes)", "41ff4275": "_calculateUnlockedTokens(uint256,uint256,uint256,uint256,uint8)", +"41ff7da4": "_doTransfer(uint256,address,address,uint256)", "41ffbc1f": "ringIndex()", "42007fd3": "MarkRazAsComplete(uint256)", +"42009203": "addEligibleRecipients(address[],uint256[])", +"4200a400": "forGTRENDholdersv1(address)", +"4200e4fc": "setWhitelistFlag(bool)", +"42019e4c": "farmingPoolTypes(address)", "4202d214": "isActiveUser(address)", +"4203e395": "lendingFeeTokensHeld(address)", "4203ea57": "minInvestmentPreICO()", +"420467d7": "g4()", +"42048cf0": "pID2Round_(uint256,uint256)", +"42049a72": "getUserPayingUsd(address)", "4204f7d5": "deployMinersTest(uint32,address,uint32[],uint32[],uint32[])", +"42050b5b": "kassiahomesScalingFactor()", +"42055d50": "miso()", +"42056990": "allRegisteredPairs(uint256)", "4205875f": "ROUND_6_PRESALE_BONUS()", "4205e5af": "pauseClosingTime()", "4206311b": "TimeLockSend(address,address,uint256)", "420714bd": "requestIndex()", "42071a73": "bltRetained()", +"4207a6b3": "delegateConsume(uint256,uint256,uint256,bytes32,uint8,uint8,bytes32,bytes32)", "4207d648": "directorJurisdication()", +"4208824a": "IMP18()", "42091137": "addStringSetting(string,string,address,address,string)", "42091e76": "saltoken(address,address)", "42095679": "lindyhanCoin()", "420977d8": "viewStudent(uint256)", "4209a1ef": "registerPlayer(string,uint256)", +"4209d65c": "setTimeBoundSaleLimit(uint256)", "4209fff1": "isUser(address)", "420a83e7": "tokenHolder()", +"420a8996": "reservationDaysRemaining()", "420a8ac8": "NanoPyramid()", "420a8b76": "Dancer()", "420aa07d": "serviceTrasferToDist(bytes32,uint256)", "420aadb8": "_execute()", +"420acff3": "getExerciseData(uint256)", +"420adac0": "buyAmt()", "420ae446": "allocatetokensAndWLExp(address,uint256,uint256)", +"420af085": "setFlask(address)", "420b5fe0": "initializeVestingFor(address)", "420b81f6": "peekData()", "420b9921": "ecsubtract(uint256,uint256,uint256,uint256,uint256,uint256)", +"420b9e03": "setMinMaxCost(uint256)", +"420be0e1": "unStakeZin(uint256)", "420c96ea": "newArtwork(bytes32,uint256,string,string,string,uint256)", +"420cc0a7": "nameProxy(address)", "420d0ba4": "nobodyCanDoThis()", "420d23fd": "POOL_EDIT_1()", "420d4a02": "getUnlockedAmount(address)", "420d4bdd": "CRYPTAU()", +"420d4f35": "ReturnFundsFor(address)", "420dd15a": "getLast(string)", "420ddaa6": "encodeKYCFlag(bool)", "420e1f51": "tokenExchanges()", +"420e3c25": "checkTimeExtra()", +"420e4f47": "viewInterest(address,uint256,uint256)", "420e7ea6": "tokenAmountRasied()", +"420e811d": "depositAToken(uint256,address,address)", "420ef2b3": "TargetHash()", +"42104aae": "saveIARankDetails(bytes4,uint64,bytes4,uint64,uint64)", "4210ad0e": "newBurnableOpenPayment(address,uint256)", "42111339": "contributeLocal()", +"421135be": "getNextPrice(address,uint256)", "42118f51": "manualLCs()", "4212616b": "localsUser()", +"4212991b": "microWalletPaymentBlockNr(uint256)", +"42136b08": "getPricesData(address[])", "4214352d": "write_what_where_gadget(uint256,uint256)", +"421472dd": "approve_561(address,uint256)", +"42148265": "UniversidadesAlta(uint256)", +"4214d50a": "tokenFromEmission(uint256)", "4214d52f": "updateIndex(address,address)", +"4214e3ce": "defaultOwners(uint256)", +"4215134c": "nyanRewards()", "421521b1": "finalizeOpenSale()", "42154e9c": "countAddress()", "42159ca3": "getMaxDelayDays()", "4215a39b": "getCreateMarketNumOutcomesValue()", +"4215ca04": "cevaWhitelistMintRequest(address,bool,bytes32)", "4215da7d": "investorsStorage()", "4216503c": "setFunStr(string)", +"42169e48": "voterCount()", +"4216f972": "farmed(address)", "42170736": "secondPhaseStartTime()", "421715c2": "canBorrow()", "42172a6a": "_emitERC20DividendDepositedEvent(uint256,int256,uint256,uint256,address,uint256,uint256,uint256,bytes32)", "42173c98": "purchaseCompany(bytes32,bool)", +"42181b8e": "allowedCountries(uint256)", +"4218303b": "yieldMarBestYield()", +"421928e9": "issueCertificate(address)", "42193473": "DUST_LIMIT()", "421983d7": "confiscate(address,address)", +"421a4eaf": "listItems(uint256,string,uint256)", "421a5727": "stealPot()", +"421a7944": "unresolveRef(uint256)", +"421a8a86": "loteryCount(uint256,uint256)", +"421ad8c5": "claimNNReward()", +"421adfa0": "farms(address)", +"421ae502": "HorseyFreed(uint256)", "421ae949": "thawTokenTransfers()", "421aeba2": "setEditedFalse(address)", "421aeda6": "Set_your_game_number(string)", "421b2395": "UltiCoinICO()", "421b2d8b": "addUser(address)", +"421b8a1e": "newDelOwnerAction(bytes32,address,address)", "421c0d9c": "unregisterDsp(address)", +"421cc337": "setClaimTime(uint256)", +"421ccd5e": "setPwdr(address)", "421d72e2": "isPaymentForked(uint256)", "421db384": "leftICOTokens()", +"421dd5b4": "implementsMintibleInterface(address)", "421e2dc2": "getPartnerAmount(address)", "421e52e3": "card_gold_minamount()", +"421e5b4d": "setGeneralInfo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "421ed7dd": "balancesInitialized()", +"421efdd1": "setVotingAaveAddress(address)", +"421f1461": "increaseApprove(address,uint256)", +"421f2c4d": "strategyPermitted(address)", "4220324b": "mainSaleStart()", "42207083": "getGameRoundOpen(uint256,uint256)", +"4220bd46": "unlockVersion()", "4221115c": "SfomoToken(uint256,string,string)", +"42220f34": "depositBNB()", "42226e02": "setMaxEth(uint256)", "4222e211": "getPhaseState(uint256)", "42235da6": "minimumTarget()", +"42239927": "_delegates(address)", "4223ac0f": "ABCToken()", "4223ad89": "NewRefundTransaction(uint256,uint88)", +"4223ca7d": "DrawFailure(uint256,address,uint32,uint8,string)", +"422490ee": "executeAttack()", +"4224bfe2": "addInvestor(bytes32,uint8,bool)", "4224f2ca": "HzxhcToken(address,address)", +"42253cd1": "getShortPuts(address)", +"4225c32f": "setRaisingAmount(uint256)", +"4225e5bb": "allocated(address)", "42261ea4": "cancelSale(address[])", "422624d2": "destroycontract(address)", "422627c3": "getDna(uint256)", "42263aa2": "set_token_address(address)", +"422677ef": "prepareUrl(uint256)", "422752bf": "getPartialAmountFloor(uint256,uint256,uint256)", +"42276255": "setFeeAddressBb(address)", "42279e82": "removeFromPreSaleRefunds(address,uint256)", "422810ea": "transData(address,uint256,bytes)", "42285bc5": "_ensureRef(address)", "42287b66": "createPromoPerson(address,string,uint256)", "4228974c": "Videos()", +"4228a1cd": "pixelsOwned(bytes32)", +"42293e20": "findSchainAtSchainsForNode(uint256,bytes32)", +"422945f5": "charityExists(address)", "4229616d": "collectPercentOfFees(uint256)", "4229c35e": "setItemPrice(uint256,uint256)", +"422a042e": "revertPhase()", "422b00bb": "dataentryclerk()", "422b1c70": "setMinweiAmount(uint256)", "422b423e": "getCheatWarrant()", "422b7964": "_approve(uint256,address)", +"422bafa1": "CancelAgonPlat(uint64,address,uint64)", +"422beeba": "setScore(uint256)", "422c29a4": "getWallets(address)", "422c3ad9": "changeEndTime(address,uint256,uint256)", +"422c4bab": "retrieveBEP20(address,address,uint256)", +"422c795f": "isAlias(string)", "422cbb48": "MarkosToken()", +"422ceaf6": "getEthXLockBP()", +"422d0171": "getInitialPrice(uint256)", +"422d1aa0": "isTeamTokensAllocated()", "422d3374": "tbitfwdToken()", "422d37c4": "mintWithEvent(int256,address,uint256)", "422d4cd6": "increasePayout(uint256,uint256,uint256)", "422dabac": "allocateEther(uint256,address)", +"422ddf56": "overdueBeneficiaryOpenRemainingAssets()", +"422e2e61": "unwrap(bytes,uint256,bytes)", "422e33f3": "migrationNewAddress(address)", "422e82a7": "EthToCoins1()", +"422edc7b": "ypool()", +"422ee44a": "participantPayout(uint256)", "422f1043": "addLiquidity(uint256,uint256,uint256)", +"422f16da": "trade(address[],uint256[],address[],address)", "422f3a2c": "nestedFirstAnyToSome(uint256,uint256)", +"422f961d": "cDAI_NEWPercentage()", "422fcbd5": "MCST()", +"42304972": "getRouterVer(uint256)", +"423054a4": "exploreData(uint256)", "4230bb10": "badgeLedger()", +"42313ec3": "TEST_regRandomUsers_new(address[],address)", "42317bbc": "flipRefundSwitchTo(bool)", "42318e3d": "percent(uint256,uint256)", "4231a2c3": "getLastRound()", +"4231b0bd": "emergencyExit(uint256)", "4231e2d7": "transferFreezership(address)", +"4231eb9d": "trigRewardsVault()", "4231ee16": "addInBountyProgramMap(address)", "42320732": "allSupply()", "423252f9": "buscarDocumentoPorTitulo(bytes32)", +"42327bbf": "startNewEpoch(address)", "4232a399": "XC()", +"4232b7af": "x_ownerRenounceOwnership()", +"4232e67e": "setMinFeeRatio(uint256)", +"42331443": "inamt(uint64)", "42340458": "disable(uint8)", +"42340a56": "poolInfos(address)", "42346c5e": "parseInt(string)", +"42347ff5": "setInvestMax(uint256)", +"4234bff7": "currentRoundCapReached()", +"423537ac": "getPosition(address[],address[])", "423592ce": "startTde()", "4235e336": "BetDirectory()", "4235e98e": "Buy(uint8,string,string)", @@ -37935,120 +69372,218 @@ "4236b312": "dealContract(uint256,string,uint256,uint256,string)", "4236da98": "INTREPID_PRICE_INCREMENT()", "42382353": "restartTheQueue()", +"42382705": "queryUserTotalCanSellAmount(address)", "4238b84c": "DMBToken()", "423948fd": "changeCollateralAmount(uint256)", "42399220": "setCampaignOwnerById(bytes32,address)", +"423a273e": "viewUserDirectReferral(address)", +"423a40c2": "getProposalNoAddr(uint256)", "423a7954": "developerfee()", "423a968d": "_setRSPScienceAddress(address)", "423b1ca3": "battleContract()", +"423b217f": "biddingEnd()", +"423c347b": "transferPoll(address,address,address,uint256)", "423c3a48": "burnTokens(address,address,uint256)", "423c485a": "depositFee(uint256)", +"423cd729": "AppRemoved(uint32,uint256)", "423d4ef2": "createChannel()", +"423d4f80": "updateTenderToContract(address,address)", +"423d6fa0": "addPendingRewards(uint256)", "423da88e": "Unix_Timestamp_Binary_Trading(uint256)", "423dcf29": "dustToEtherPrice()", "423e1298": "setDoNotAutoRefundTo(bool)", +"423e3071": "stopImport()", "423e7e79": "_dispatchEarnings()", +"423ecb05": "cannotBeDelegateCalled()", "423f0b6e": "replaceModule(address)", "423f6cef": "safeTransfer(address,uint256)", "423fb140": "CrowdsaleToken(string,string,uint256,uint256)", "423fcd5e": "_promo()", "42402c2c": "fipsTransferMulti(bytes20[],address)", +"42404e07": "_getImplementation()", +"4240760a": "progressStake(bytes32,bytes32)", "4240a978": "ICO_TILL()", +"4240c584": "updateMangerInfo(uint256,string,string)", +"42413315": "addData(uint256,string)", +"42419255": "depositFeesBPS()", "42419336": "ICO_BONUS_RATE()", "42427bf8": "upgradeController(address,address)", +"42429110": "setCbrDev(address)", +"4242ec52": "swapBtoA(uint256,uint256)", +"4243666e": "defineTransport(string,uint256,address,address,int256,int256,uint256,uint256)", "4243cb36": "payConversionFromTransaction(uint256,address,uint256)", "4244e09f": "getBetterBettingInfo(address)", "4245508a": "getRoundMaxNumberOfBets(uint256)", "424592ca": "calculateDistributedIntervalEarning(uint256,uint256)", +"424593b0": "saveApiDetails(bytes32,bytes4,uint256)", "424599c4": "seedSaleTokenLeft(address)", "4245b0f7": "Lottery()", "4245d48e": "getHashes()", "4245f3da": "tokenOfOwnerByIndex(uint256)", +"4246554f": "volumeDiscounts(uint256)", "42465a1e": "getTokenUnits(address)", "42469e97": "_setBonusRate(uint256)", +"4246a577": "ICO_deposit()", "4246ad24": "calculateMinedCoinsForTX(uint256,uint256)", +"42472be4": "tokenWinnerName(uint256)", +"4247a0ba": "consensusCloseChannel(bytes32,uint256,uint256[4],string,string)", "4247f52d": "DoRoll()", "4248083b": "approveUser(address,uint256)", +"42486d63": "meteorites(uint256)", "4248aefe": "awardMiniGamePrize()", "4248afe8": "addCrowdSaleTokensMulti(address[],uint256[])", +"4248fe23": "mintGas(uint256)", +"42495937": "sendETHtoContract()", "424976f9": "registryRead(bytes32,bytes32)", "42498389": "transferLimitedFundToAccount(address,uint256)", +"4249a143": "_decode_sol_bytes26(uint256,bytes)", "424a8993": "selectOfferingProposal(uint8)", "424a8c0d": "constructorReconToken(address,string,string,uint8,uint256,bool,bool)", "424aa0e5": "StockusToken()", +"424acc98": "getProductById(int256)", +"424b6905": "_updatedBalance(address)", "424b828f": "CharityReservesWallet()", "424bc2e9": "newGame(string,string)", +"424c39e2": "encodePayload(address,address,uint256,bytes,uint256,bytes)", +"424d2519": "fire_deposit(uint256,uint256,uint256,uint256,address)", +"424d3061": "eostoethAddress(bytes32)", +"424d3894": "diseasechunks(bytes32,uint256)", "424d6bb1": "changeApi(address,address)", +"424dbb1b": "EXit(uint256)", "424ddaac": "get_available_interest_amount()", "424e418f": "setMinSecondaryAmount(uint256)", +"424e6575": "mintRequests(uint256)", "424e94da": "VoteHub(address)", "424ea3b2": "refund_deposits(string)", "424ea872": "startTimestampIco()", "424eb9fe": "getInitBalance(address)", +"424f33a8": "getMethodID(string)", "424f4fef": "vendingMachine()", "424f9947": "privateIcoBonus()", "424fa9ec": "Prismacoin()", "424fed48": "EBPtandardToken(uint256,string,uint8,string)", "424fffda": "updateContact(string)", +"42506449": "setCircuitBreaker(bool)", +"425068ee": "sdvdEthPool()", "4251447a": "WhiteListSet(address,uint256)", "42516f1d": "startAirdropBy0Eth()", +"42516fc0": "requestLinkPrice(address,string)", +"42518579": "SetWhitelistExpiration(uint256)", "425189e0": "getFashion(uint256)", "4251a7a4": "totalNihilum()", "4251ecb4": "nMsg()", +"4252016c": "setLockToken(address)", +"4252237e": "finishChangeTargetPrice()", "42526e4e": "bytesToAddress(bytes)", +"4253cba6": "getTotalClones()", "425432b1": "tokensPerAddress(address)", "42545825": "hasVoted(address,uint256)", "4254704f": "TOKEN_CLAIM_WAIT_PERIOD()", "4254b155": "register(bytes32,string,address,address,address)", +"4254b506": "balanceCInToken()", "425543f1": "CreateDummyPlayer(bytes32,uint8,uint256,address)", +"4255cdde": "getProductByCompany(string)", "4255e808": "jackpotContract()", +"4256450e": "artistPercentages(uint256)", "42565405": "setNeuroChainAddress(string)", "42569ff3": "limitedPrinter()", +"4256a058": "Collect(address,uint256)", "4256dbe3": "setReserve(uint256)", +"4256e4c3": "getDeltaTokenSupply(uint256)", "4256fa5a": "timeToBorn()", "4256fa9f": "exchangeTokens(address,uint256)", +"425714ec": "accessGranted(address,uint8)", "4257347e": "freezeAccountToken(address,uint256,uint256)", +"42574bd6": "transferSign(address,address,address,uint256,bytes32,bytes)", "42577935": "createPanda(uint256,uint256)", +"4257d2c0": "SystemChangeValidMCAmount(uint256,uint256)", "4257d3e0": "currentGameBlockNumber()", +"4257f6bc": "teamMemberCount()", +"42580ed0": "calculateFee(uint256,address,address)", +"42583a3a": "setPreSaleEnd(bool)", "42585b34": "getSnap(uint256)", "42587795": "deploySimpleContract(string,string,uint256)", +"4258bea1": "insurancesum()", "4258cb76": "Ultracash()", "4258d771": "funding_ended()", +"4259243f": "getProviderAmounts(uint256)", "425946e3": "setCurrentMember(address)", "4259701b": "getSocialAccountPw(bytes32,bytes32)", +"42598e83": "SetUniSwapSaleEnds()", "4259b52e": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8)", +"425a2a3c": "generateTransactionHashData(address,uint256,bytes,uint8,uint256)", +"425a675d": "setResolverByController(uint256,address)", +"425a71c0": "changeContractDetails(string,string,uint8)", +"425ab577": "positionsByAddress(address,uint256)", "425adae7": "isBonusEnabled()", +"425af373": "seedToOwner(uint256)", +"425b682e": "isBuyBackActive()", +"425c8abd": "updateReward(uint256)", +"425d0e6f": "createSquad(address,uint256)", "425d4980": "mintAddress()", "425d512a": "setDAOContract(address)", "425e0d3c": "BasicToken(uint256,string,uint256,string)", "425ef4b5": "modify_str(string)", +"425ef709": "start_sale()", +"425f2c80": "loadderer()", "425f7857": "taxTokenCreated()", +"425fad58": "protocolPaused()", +"425fc08a": "navFeed()", +"426033b0": "LogJoinGameSuccessed(uint256)", +"42603602": "boostLevelTwoCost()", "4260c779": "start_ico()", "42616d21": "goldTotalSupply()", +"42618b8a": "goldPriceOne()", "42618b91": "buyRoundKey(uint256)", +"42619f66": "randomResult()", "426201ef": "lastBlock_v19()", "42623360": "stakeOf(address)", +"4262a0db": "getBidofAccount(address)", +"4262a21d": "issuer_info()", +"42635a59": "readTweet()", "426365ad": "setForceOffsetAmount(uint256,uint256)", "42636c09": "existIdAfterVersion(bytes32)", +"42637939": "lazyFundStream(uint256,uint256)", +"4263958a": "configureMint$(bool,uint256)", "4263ed83": "hasNextSeedHashA()", "4264b4e0": "ownerPayout()", +"4264ecf9": "transferNodeOwnership(address)", "4266806b": "cf1Wallet2Pct()", "4266873f": "setAicPrice(uint256)", "426695c6": "getDeedId(bytes32,uint256)", +"4267438b": "removeWhitelisteds(address[])", +"42679683": "isMinterBurner(address)", +"42679bfa": "replaceOrders(address,uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[],uint256,bytes)", "4267e19c": "getOwnedTokensIndex(uint256)", +"4267ee79": "loadContracts()", +"4268121e": "emergencyUnstake(address,uint256)", "42686bbe": "GetPartLimit(uint8,uint256)", "4268a257": "updateRoundInformation()", "4268db7d": "cite(string,string)", +"4268ff2d": "addProduct(uint256,string,uint256)", +"4269508a": "BeneficiaryBalanceChanged(address,uint256)", +"426963d8": "createThing(uint256,uint256)", +"4269b3ea": "halfLifeClear()", +"4269b5e7": "CRY_BLACK_LIST(address)", "4269d8ef": "_safeSend(address,uint256)", "426a0af3": "updateManyLandData(uint256,uint256[],string)", +"426a445e": "setDefaultUserCap(address,uint256)", "426a8493": "approve(address,uint256,uint256)", +"426a87f5": "weaponTotal(uint256)", "426aa87f": "deleteRecording(uint256)", "426ad3f5": "getChainName(uint32)", +"426b189a": "validateUint48(uint256)", +"426b5382": "usersById(uint256)", "426b7113": "tokensSoldPre()", +"426b7407": "addBackup(address,address)", "426bc60c": "Educoin(uint256,string,uint8,string)", +"426c014b": "updateUser(uint256,string,string,string,string,uint256)", +"426cfd68": "h1()", "426d4f22": "expandNegative128BitCast(uint256)", +"426d58e5": "depositSponsorship(uint256)", "426d5ef1": "oraclizeCallbacks(bytes32)", "426d70fa": "isPrivateIcoActive()", +"426db9cd": "raiseWethWithdraw(uint256)", "426dd27c": "getGroup(uint256,uint256)", "426e0b20": "daoStakeClaimed()", "426e5ae6": "senderTokenBalance()", @@ -38059,171 +69594,331 @@ "426f8f6b": "viewNumberOfRequests()", "426fa499": "isIcoStarted()", "426fe411": "contributorDeposit()", +"426fe4f1": "add_BASE(address)", "4270d48a": "nextmarketoffer()", +"42712a67": "swapTokensForExactTokens(uint256,uint256,address[],address)", +"427148ae": "allowAuthority(address)", "42714978": "removeInvestor(address)", "427163dc": "refundBid(bytes32)", +"42719faa": "updateHolder(address)", "4272f2d5": "heroTokenContract()", "4273601c": "factoryOwner()", "4273bc59": "bids_sorted_refunded()", +"427400d2": "CapperRemoved(address)", "42740286": "maxMintPoS()", +"42745141": "issueToAccount(address,uint256)", +"4274c36a": "setIcv(uint256)", "42750020": "tokensCreated()", +"427539c9": "lastRevenueBnum()", "42753e7e": "isInSale()", "4276016f": "oversightAddress()", "427654da": "getDailyLimitUsed()", +"4276622f": "airDropPool()", "42767018": "smallRate()", "4276d082": "FrozenEther()", "42772947": "callEndRoundControl()", "4277b5b1": "check(address,address,address,uint256)", +"4277de19": "setContractAsTest()", "4277e497": "PaymentRejected(address,bytes8,uint256)", "4277e823": "TravelHelperToken(address,address,address,address,address,address)", +"42780d95": "hiredTechnician()", "42787798": "grantedContracts(address)", +"4278f7e3": "ZOOM_USDT()", "4278ff31": "setTangibleAssetAddress(address)", "427913f2": "getClaimedFinancialData()", "4279523e": "serviceChangeOwner(address)", "427982f2": "tokenSaleMax()", "427a2fc2": "getClaim(uint256,uint256)", +"427a8511": "mintSubURIWithResolver(address,uint256,string,address)", "427ac5e4": "checkForUpdates()", "427b59d3": "HiPrecious()", +"427b5b4d": "bonusEndBlocks(uint256)", "427b72fc": "proofFailed(address,uint256)", +"427c0374": "xTransfer(bytes32,bytes32,uint256,uint256)", +"427c4c9c": "addAllowedErc1155Contracts(address[])", +"427c7f38": "getStakeBalance()", "427c854d": "_createSkull(uint256,uint256,uint256,address)", "427c9aca": "LogPayoutFailed(address,uint256,uint256)", +"427d4cfe": "LetsInvest(uint256)", "427d5f2e": "tierAmountCaps(uint256)", "427da275": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32)", +"427db380": "pendingBeneficiary()", "427e024a": "AdministratorRemoved(address,address)", "427e332f": "lastBlock_a8()", "427eebfc": "returnOwnershipOfToken()", "427f0b00": "roundInfo(uint256)", "427f56ff": "bonusAllocAddress()", +"427f91a6": "tokenIndex(address)", "427f9614": "getReference(bytes32)", "427fa1d2": "getLastNode(address)", "427fc2df": "preIcoPeriod()", +"427fd051": "getRefundParams(address)", +"427fdc0c": "calcPoolValue(uint256)", "4280606b": "addCondition(bytes32,bytes32,address,int256,bytes32,address,int256,bytes32)", +"4280bf8f": "setBidInteval(uint256)", +"4280f980": "playSitAndGo(uint256,uint256,uint256,bytes32,bytes32,bytes32,uint8)", +"4280fd23": "_interestPerDay()", +"42810967": "pauseStake()", "4281267b": "buyLCARS()", +"428147ee": "withdrawAllTokensFromContract(address)", "4281a651": "SponsoredItemGooRaffle()", "4281b13f": "getAllbetByNum(uint8,int8)", "4281b34b": "play(uint256,uint256[])", +"4281b36e": "changeBonusWallet(address)", +"428201f5": "registerTopic(string,address)", +"428217a2": "daot()", +"42824217": "getApiServer()", +"4282a7cd": "startTreasure(uint256,uint256)", +"4282b1d5": "getProjectDetails(uint32)", "42836c2e": "hasAddress(address,address)", +"428392da": "viewUserBalanceInfo(address,address)", +"4283a462": "takerValues(address)", "4283fbe5": "dummyGasBurner()", "42842e0e": "safeTransferFrom(address,address,uint256)", "42846c09": "Bonus(address)", "42849570": "myReward()", +"4285512d": "crab()", +"42856d03": "TokenWithdrawal(address,address,uint256)", "4285d477": "teamTokensFreeze(address)", +"4286084b": "_decode_sol_uint128(uint256,bytes)", "428657f7": "storeNewVesting(address,string,uint256)", +"4286cc2d": "minTokenHold()", "4286ed3e": "callBtoWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"428732d7": "Liquidations(address,uint256,uint256)", +"428786cc": "removeVotes(uint256,uint256)", "4287eef9": "fechStageBlockByIndex(uint256)", "4287f14a": "teamReserve()", "428840f6": "fadd()", "4288d759": "betOf(address)", +"428928fe": "UpdateTaxPercentages(uint256,uint256)", +"42895ba9": "omnifarm(uint256)", +"42895e65": "atoq(uint256)", +"42899bbf": "view_string()", "4289c781": "setSellPrice(uint256,string)", +"4289d619": "Upgraded(uint256,address)", +"428a0319": "seedExists(uint256)", +"428a0673": "CampaignDist(address,uint256)", "428a2ece": "createTokenVault(uint256)", "428a8120": "tier0Total()", "428afcd1": "setUpgraded(uint256)", +"428b72aa": "addToMintWhitelist(address)", +"428b8617": "botCount()", +"428bb988": "pendingXUSD(uint256,address)", "428be33f": "ReleaseFundsAndTokens()", +"428c7855": "updatePackagePrice(uint8,uint256)", "428c91ae": "genAddressFromGTIN13date(string,string)", +"428cb171": "getOvmTransactionHash(bytes32)", "428d189c": "takeTokens(uint256)", "428d475a": "beConstant()", "428d5630": "mintOnDemand(address,uint256)", "428d64bd": "getShares(address,bytes32[])", +"428dfd38": "notariseMCR()", +"428e24d7": "claimedbyAddress(address,uint256)", "428e2d64": "getMsg(address)", "428e357b": "getUInt8(bytes32,bytes32)", "428e5aaa": "addToPrize()", "428eb006": "batchAirdropWithLock(address[],uint256,bool)", "428eb5cf": "getRandomNumber(int256,int256)", +"428eeccf": "withdrawfunds(uint256,address)", +"428eecf0": "paymentDetailsHash()", +"428ef8c8": "clearkhm()", "428f180c": "minimumSpend()", "428f4146": "SimplePHXExchange()", "42906029": "newManager()", +"42906909": "ethFeeForTokenICOSet(uint256)", "42909a9e": "create_game()", "4290a5b9": "uninject(address)", "4290bd4d": "isTokenOfferedToken(address)", "4290db52": "burnFromAnotherAccount(address,uint256)", "4290e6b6": "setTokenName(address,uint256,string)", +"4290f3dc": "nm_players(uint256,uint256)", "42915914": "test_dispersal()", +"4291931a": "pullOutExcessRTK(address,uint256)", +"429211d4": "designers(uint256)", +"4292156d": "withdrawAlienTokens(address)", "4292327c": "_isMyLeague(uint8)", "42923409": "ArinToken()", "4292a797": "ZAZA()", "4293253c": "tokenSaleLowerLimit()", +"42934518": "increasePriceIncrement(uint256)", "429374f3": "ScorpioCoin(address)", +"429393ba": "beforetransfer(address,uint256)", +"42942c7a": "ltim()", +"42944f8a": "SetSaleEndDate(uint256)", "42946d88": "getIGOAccoountByAddr(address)", "4294857f": "isRevoked(bytes32)", "42948e18": "getSenderAddress()", "4294bea0": "BarcelonavsRoma()", "4294cdb2": "BixcPro(uint256,string,uint8,string)", +"4294e96a": "claimReward(string,uint256)", "42958b54": "issue(address[],uint256)", "42966c68": "burn(uint256)", +"4296a2e8": "gView()", "4296a9cb": "getNodeRightChild(bytes)", "4296b4a7": "freezePlayer(address)", +"42971e24": "AuctionCreated(uint40,uint128,uint128,uint40,uint256)", "42974b1e": "freeReferralPacksClaimed()", "42980e20": "LifeToken()", "429838e0": "Allow_Entries()", +"429866e6": "migrate(address,address,address,uint256,bytes)", +"4298b92e": "getRiskPosition()", +"4298bdbd": "totalAllocPoints(address)", +"4298e695": "userInfos(uint256,uint256,bool,uint256)", "42992dd5": "icoStartTimestampStage2()", "4299431e": "REALMock(address)", "42995e12": "canReceiveMintWhitelist()", "4299c213": "lastReading(address)", +"4299ecaf": "add(uint256,address,bool,bool,uint256)", "4299f706": "PonziScheme(uint256)", "429a2591": "convertAmountToTokens(uint256)", "429aa0a4": "DAILYC()", "429adcb9": "minSumICOStage7USD()", +"429b1442": "DECENTRALAND_LAND_REGISTRY()", +"429b4ae6": "setCollectedFee(uint256)", +"429b603c": "setdToken(string,uint256,address)", "429b62e5": "admins(address)", "429b92bf": "getProposalName(uint256)", "429c1561": "setReputationProblems(address,string)", +"429c48cc": "airDropAddress()", "429c6e5b": "getClaimedAmount(uint256)", +"429c7f28": "testCall5(address,uint256,uint256)", +"429c9fef": "foundersShare()", "429cddca": "selectOwnerAddressForTransactionFee(address)", "429d15ba": "testCorrectFunctionIsCalledOnTransfer()", +"429d506f": "batchFetchStreamingFeeInfo(address,address[])", "429d6a69": "walletBeneficiary()", +"429d7e8f": "listSynth(address,address,address,uint256)", +"429dc3bd": "MIP27()", +"429dcf15": "e(bytes32,uint8,bytes32,bytes32)", +"429df262": "publicSaleSum()", +"429e3846": "distributeShares()", +"429ea975": "process(uint256,address)", +"429f24bc": "lastMoveAmmPriceTime()", "429f3b48": "blockAccount(uint256)", +"429f8c87": "testCall3(address,uint256,uint256)", +"42a049cd": "changeInvestmentAssetStatus(bytes4,bool)", "42a04fea": "getBadges()", +"42a062c6": "remainderOf(address)", +"42a08c38": "slt(int256,int256)", +"42a0b5bc": "_nonceToPendingDeposit(uint256)", +"42a1003f": "subDeposit(address,uint256)", "42a173a5": "transferByCasino(address,address,uint256)", "42a1928b": "initSale(uint256,uint256,uint256)", "42a19c71": "giveProjectTokens(address,uint256)", +"42a1b6a0": "reserve_token_now()", +"42a1bbd2": "userFee()", "42a1f3eb": "ProvToken()", +"42a20de2": "createFunctionSignature(string)", +"42a25fef": "put2()", +"42a28e21": "requireSynthActive(bytes32)", +"42a2cd6d": "findK(address)", +"42a35a5a": "CURES()", "42a37176": "showMyEtherBalance()", "42a38a00": "mediatorWallet()", +"42a3e092": "pushCommissionToBeatCommission(uint256,uint256)", +"42a435f6": "thirdPartyCut()", +"42a47abc": "batchForcedTransfer(address[],address[],uint256[])", "42a4af66": "updateCatReleasePrice(uint32,uint256)", "42a5000d": "startPRESALE()", +"42a50181": "nftIndicies(uint256)", +"42a59155": "setSCBAddress(address)", +"42a5f978": "Dodaj_Knjigo(string,string,string,string)", +"42a6112b": "setTokenContract(address,uint256)", "42a63361": "updateTribeProducts(address)", +"42a64f1c": "maxDepositProgressProc()", "42a657fd": "primaryListing()", "42a6617d": "stepTwoRate()", "42a66f68": "totalRate()", "42a6739b": "acceptRandom(bytes32,bytes)", +"42a6a44a": "is_trusted(address)", "42a6b21a": "getContributionLimit(address)", "42a6c4dd": "getBidByToken(address,uint256,uint256)", +"42a71371": "plaasTokenContract()", "42a745cb": "testBitEqualSuccess()", +"42a75083": "releaseReducibleFreezingOnceFor(address,address)", "42a787fa": "determinePlayer(int128,uint128,uint8,bytes32,bytes32)", +"42a78883": "existFunc(uint256)", "42a7a8e0": "SmartzToken()", "42a7c40e": "ThiccCoin()", "42a7cfd5": "naturalUnit()", +"42a84d1c": "setHxpUnlock(uint256)", +"42a8aad0": "Selfdrop(address,uint256,uint256)", "42a8f2f4": "internalTransfer()", +"42a92d36": "getBalanceSnapshot(address,uint256)", +"42a96cd7": "calcSwapEthToIndexInputs(address,uint256,address[])", +"42a9d051": "OnCancelEscrowByProvider(address,uint256)", +"42ab4e37": "measurementStatus(uint256)", "42abfde8": "getLunckyIndex(uint256)", +"42ac2950": "air_drop_address()", +"42ac39a8": "saleAmounts(bytes32)", +"42ad0341": "addWhitelistedBulk(address[])", "42ad2c6f": "maxPreIcoDuration()", +"42ad3526": "orderListIndex(bytes32,address)", "42ae07c0": "RateRemove(address)", "42ae0a16": "crowdsaleBalance()", "42aeba30": "Shipment(address,address,string,string,int256,int256,uint256,uint256)", +"42aedb24": "numberOfAllCanceledHashes()", +"42af089a": "SetStuckAddress(address)", "42af2478": "PartialFundsTransfer(uint256)", +"42af302c": "isBucketLiquidationReached(bytes32)", +"42af35fd": "getSequenceNumber()", "42af4821": "TUDOR()", "42af8f0c": "buy(uint256,uint256,address,address,address)", +"42b01272": "priceOfLavel(uint256)", "42b053ce": "SyedaMahaAliTestCoin()", "42b07d6d": "cashBackFromProject(address)", +"42b0aefa": "guardian_sets(uint32)", +"42b0b0c4": "purchaseVideoGameItem(uint256)", "42b1295a": "addMultipleAllowedAddresses(address[])", +"42b14996": "getAllTokenIds(address)", "42b2106c": "FoundationTransferred(address,address)", +"42b21e55": "expiryId(address)", "42b222bd": "showTokenValue(address)", +"42b25b85": "DailyTokenAdmin(address)", +"42b273a3": "setFactorLP(uint256)", +"42b2d066": "REMOVE_PROTECTED_TOKEN_ROLE()", +"42b3198b": "getLiquidityHistoryLength()", "42b31b1f": "Elythrium()", +"42b343a3": "attempts(uint256)", "42b38674": "isValidValidatorSignature(address,bytes32,address,bytes)", +"42b39a5e": "calcReward(uint256,uint256,uint256)", +"42b39ca5": "createContractToken(uint256,uint256,uint256,address)", "42b41aa4": "sendCoin(address,address,address,uint256)", +"42b41b63": "underlyingPair(address)", +"42b425aa": "transaction(string,address,address,uint256,address)", "42b4632e": "canPropose(address)", "42b4807a": "getRegionCoordinates(uint256)", +"42b4bd05": "_updatePosition(address,int24,int24,int128,int24)", "42b4ef95": "Helper()", "42b50a7a": "getOrderById(uint256)", "42b594cb": "buyTicketByEth(uint256,bytes32,bytes32,bytes32)", "42b5a2a9": "maxTxGasPrice()", +"42b5b43d": "userRegistry(bytes32)", +"42b5f375": "getBurnRate(address)", "42b614a9": "round_after()", "42b64a59": "VisionX()", +"42b7512c": "EthTweetSent(string,string,uint256,string,uint256)", +"42b81415": "exitswapExternAmountOut(address,address,uint256,uint256)", "42b8c415": "balanceTotal()", +"42b95df8": "bigJackpot()", +"42ba61bb": "_uniRouter()", +"42bb20e1": "deleteTopic(uint256,string)", +"42bb316e": "getVoteTally(address)", +"42bb42d7": "tokenAcceptor()", +"42bb491e": "rewardPerTrader()", "42bb5709": "FundsTransfer()", +"42bb5a26": "FallbackCalledTopic()", "42bb66c4": "setInvest(uint256,uint256)", +"42bc608f": "approve_463(address,uint256)", +"42bcbb2a": "outstandingLoans()", "42bd0959": "setIsBuyByAtom(uint256,uint128)", +"42bd2647": "getContributes()", "42be5eea": "thing(string,string,uint8,string)", +"42be8379": "updateChildChainAndStateSender()", "42be9307": "changeSale(bool)", "42beb58b": "setPreSaleOff()", +"42bf0964": "_canTransfer(address,uint256)", +"42bf0999": "setRGPTokenAddress(address)", "42bf1270": "cslToken()", "42bf41ae": "drainStrayEther(uint256)", "42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", @@ -38231,13 +69926,19 @@ "42bf8db3": "getRate(string,uint64)", "42bff0d0": "setExchangeAdapterManager(address)", "42c01f66": "setRateEarlyStage3(uint256)", +"42c0ae9a": "invest_panel1()", "42c102a5": "GetSnail(address)", +"42c14cfe": "calculateBonusRate()", "42c1867b": "mintAgents(address)", "42c1ea29": "evidenceInterval()", +"42c1eb4e": "MONITOR_ADDRESS()", "42c23db5": "AddToDividends(uint256)", +"42c2482f": "getGoldForAddress(address)", +"42c2b2b6": "addNewLagBreakpoint(bool,int256,int256,int256)", "42c2d31a": "EtheremonToken(address,address,address,address)", "42c304be": "accountsListLength()", "42c3301a": "showJackpotThisRd()", +"42c3fcda": "payoutRewardT1(address,uint256)", "42c469e0": "GameSpiritCoin()", "42c501a1": "LogOwnerTransfer(address,uint256)", "42c50f75": "TeamMembersAmount()", @@ -38245,163 +69946,284 @@ "42c5d7ad": "sendAdvisorsBalance(address,uint256)", "42c62865": "withdrawsCount()", "42c62882": "getMyDividends(bool)", +"42c63760": "_wallet_team1()", "42c6498a": "genesisTime()", "42c65ae5": "eUSD()", "42c69566": "get_address(address,string)", "42c71f1d": "getApp(bytes32)", +"42c72474": "batchDeposit(uint256[],uint32[],uint256[][],uint32)", "42c74c73": "EPVToken()", "42c7551e": "tokenRemain()", +"42c7ce00": "getFirst40Addresses()", "42c7ea5f": "totalNumberAvailable()", "42c80fc9": "isUpgraded()", +"42c81aea": "minutesInOneMonth()", "42c81f45": "MLB_Legal()", "42c8705b": "Mine()", "42c87205": "VirgoContract()", +"42c956bc": "getExpectedReturnUniswap(address,uint256,address[],uint256)", "42c96767": "EtherHiLo()", "42ca08cf": "applyFadeoutToOptions(uint32,uint32,uint32,uint256,uint256)", +"42ca1882": "nftRegistryByType(string)", "42ca2fe3": "FCOIN1110Token(uint256,string,string,uint256)", "42cb1fbc": "ETHER()", "42cbb15c": "getBlockNumber()", +"42cc0575": "CertificationAdded(address,uint256)", "42cc6b04": "addAuthorizedEditAgent(address)", +"42cd18f4": "regUser(uint64)", +"42cdc83b": "getGasRefund(uint256,uint256,uint256)", "42cde4e8": "threshold()", "42cdfe37": "tokenWithdrawEther(address)", "42ce0555": "DisableSuicide()", "42ce0aff": "registerAndValidateToken(address,string,string,uint256,uint256)", "42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", "42ce1488": "upload(string)", +"42ce39cb": "getStakerData(address,uint256)", +"42ceea67": "maturedUnstakedBNBEachDay(uint64)", "42cf0a4b": "increaseEthBalance(address,uint256)", "42cf0e72": "searchByOwner(address)", "42cf2f81": "getSequence(bytes)", +"42cf6e74": "safeTransferChildFrom(uint256,address,address,uint256,uint256,bytes)", +"42cfa405": "pendingCrane(uint256,address)", "42cfd792": "postJob(uint256,uint256,uint256,bytes32)", "42cffda9": "TREETOKEN()", "42d01878": "keyRequired()", "42d02b30": "HARD_CAP_IN_TOKENS()", +"42d09209": "getExternalErc721Awards()", +"42d0b16b": "ndaoTokenid()", +"42d0d517": "dailyDepositLimit()", +"42d15aec": "toggleRecollateralize()", "42d16748": "getMinDailyWithdrawalLimit()", +"42d16abf": "totalProviderAmount(address,address,address)", "42d1b202": "_adoptSameClassAxies(address,uint8,uint256,address)", +"42d1c4e5": "Reinvestment(bytes32,address,uint256,uint256,address)", "42d1f17f": "bankrollerTable()", +"42d1f51c": "UnBurn(address,uint256)", +"42d209c6": "maxClaimedBy()", +"42d21ef7": "status(uint256)", +"42d29f87": "pendingyarn(uint256,address)", +"42d2ae3d": "mintTeamAndAdvisorsYear1Part10(uint256)", "42d2c127": "getStagesBeginEnd()", +"42d31e0a": "NewHouses(address,uint256[])", +"42d41964": "DefiIndexFunds()", "42d46a9a": "castVote(uint256,uint256,bytes32,string,bytes32)", +"42d4f932": "TokenPlaced(address,uint256)", +"42d54347": "toogleCanBuy(bool)", "42d544fb": "disallowSale()", "42d596e0": "isPoint(int256,uint256,uint256)", +"42d644a3": "IsReversalEnabled()", "42d64601": "pacifistmasterReq()", +"42d6c335": "mydecode()", +"42d6c779": "getTerminationConfirmDepositDetails(bytes32,uint256)", +"42d6f0d5": "specials(address)", +"42d74707": "STATS_TYPE_REWARD_TOTAL()", "42d7cc8e": "Tx(address,uint256,string)", +"42d86693": "withdrawRewards(address)", +"42d882e1": "systemToken(address)", +"42d8edea": "allTokensIndex(uint256)", "42d8f5be": "customPayment(address,uint256)", +"42d92106": "createLock(uint256,address,uint256,uint256,string,bytes12)", "42d928fc": "SWIFTSCO(address)", +"42d932d8": "transferFromExcluded(address,address,uint256)", "42d9643c": "KYCLimitValue()", "42da3b6b": "getAmount(uint256,address)", +"42da4eb3": "wantLockedTotal()", +"42dad49e": "save()", "42daedea": "win_by_timeout()", "42daf6ee": "icoStartP6()", +"42db277f": "uniswapAddLiquidity1(uint256,uint256,uint256)", "42db2fba": "renounceRecoverer()", +"42db931a": "moveToNewRewardPools(address)", "42dbad44": "makerOf(string)", "42dbcdba": "weiRaised(address)", +"42dbe75b": "durationRemaining(address)", +"42dca725": "availableVolume(address,uint256,address,uint256,address,address,uint256,uint256,address,uint8,bytes32,bytes32)", "42dca9ea": "getManifestIdsByRegistrant(address)", +"42dd11bb": "exitGem(address,address,uint256,uint256)", "42dd519c": "getClients(uint256)", "42dd96f7": "killswitch()", "42df7085": "ROLE_EXCHANGER()", +"42df801b": "_decode_sint64(uint256,bytes)", "42dfb036": "calcRateFromQty(uint256,uint256,uint256,uint256)", "42e06ee7": "HotCold()", "42e11316": "claimReadership(uint256,string)", "42e1452a": "PolarisUniversalToken()", "42e15c74": "managedTokenLedger()", "42e16015": "AddedBlackList(address)", +"42e1c774": "AirDrop_MultiSender(address[],uint256[])", +"42e27dbb": "maxPriceOf(uint256)", "42e296d3": "soundEffects(uint256,uint256)", "42e2d18c": "presaleIsRunning()", "42e2da09": "QuantorPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", "42e2f54c": "shutDownFund(address)", +"42e32f13": "isPynthManaged(bytes32)", "42e35f63": "addGoal(string)", "42e3b919": "NMFToken()", "42e49d5a": "FUNDING_GOAL()", "42e4d72b": "oxen()", +"42e4f54f": "votingAddr()", "42e5033e": "mainSaleEndDate()", +"42e51c81": "seriesToken(bytes32)", "42e59afa": "reloadRound(address,uint256)", "42e5b9f1": "totalDistributedDividends()", "42e5d5c8": "getPI_edit_17()", "42e5da0d": "UpdatePlatformContract(string,address)", "42e6377f": "LabtorumToken()", +"42e66959": "SetWithdrawalCoolingPeriod(uint256)", +"42e68872": "toggleHALT(bool)", +"42e699f1": "swapExactTokensForTokensUniswap(address,uint256,address[])", "42e6c88a": "approveObjectReception(uint256)", +"42e73a25": "acceptMarriage()", "42e7ba7b": "hasManagerAccess(address)", "42e8051c": "testExternal()", "42e81b0c": "dislikeCelebrity(uint256,uint256)", +"42e823c3": "shieldMiningAddress()", "42e86d27": "callData(address,bytes)", "42e90c33": "Store()", "42e94c90": "contributions(address)", "42e9555e": "getProviderLastSupplyID(uint256)", "42e956f6": "addtoMarketingBusinessDev(address,address,uint256,uint256)", "42e9c6ce": "pullTokens(address)", +"42e9c9fd": "isATMForMarket(address,address,address)", "42ea74c0": "getTokenPriceInWEI()", +"42eaab31": "changeAllowedAddress(address,bool)", "42eabc29": "posibleRedemptionOf(address)", "42ead91f": "getMegabox(uint256)", "42eafaf5": "showFPInfoAll()", +"42eb7be9": "getOwner753()", "42ec38e2": "tokenOf(address)", +"42ec4f06": "NAPboostLevelFourCost()", +"42ecfa08": "sendEthAmount(uint256,uint256)", "42ed00da": "getSenderArmyDetails()", +"42ed1d29": "allCardTypes(uint32)", "42ed567c": "tmpQuerySeed(uint256,uint256)", "42ed5816": "ethDailyLimit()", "42ed6072": "publicBattlepm2()", +"42ed9938": "dieEvent(address,address)", +"42edadfe": "approveTokensSpender(address[],address)", +"42edd8e0": "govTransferAddr(address)", "42ee4e0b": "ICO_PRICE5()", "42ef4c1a": "hodlerTime6M()", +"42ef6182": "SoftCapReached(uint256)", "42ef8c76": "alsToken()", "42efdebf": "exchangeAdmin()", +"42efe489": "approve_348(address,uint256)", +"42efffec": "freezeOfUser(address)", +"42f00a92": "isInfluencer(address)", "42f030e4": "minusTourFreezingTime(uint256)", "42f0b07e": "BountyFund()", "42f0ca0d": "setPreSaleEndDate(uint256)", +"42f0f413": "packPrice(uint256)", "42f1181e": "addAuthorizedAddress(address)", +"42f12af6": "totalWolfingBets()", +"42f17298": "sale_arbits_per_ether()", +"42f1bd5d": "rpToken()", +"42f200ad": "CoinMinted(address,uint256,uint256)", +"42f2a55d": "transferTokensToFounders(address,uint256)", +"42f2ca6a": "setusdtMsUniContract(address)", "42f362aa": "registerNameCore(uint256,address,uint256,bytes32,bool,bool)", +"42f371c6": "ethPriceSource()", +"42f37c75": "ctrl()", "42f39381": "presaleRate()", "42f39a6f": "ARXPackageSale()", +"42f3b163": "pendingAirdroper(uint256,address)", "42f3f7e0": "activate_reserve()", "42f45790": "testAddress(address)", +"42f4594f": "CoinIssuedSale(address,uint256,uint256,uint256,uint256)", +"42f4a8bc": "getETHUSDCPrice()", "42f57e4c": "enableUser(address,bool)", "42f5b7e0": "setGenome(uint256,uint256[4])", +"42f5c015": "mgasQueryAddr()", "42f5d95d": "AllUnLock()", +"42f5ddf3": "mintAmount(bytes32)", "42f6208e": "lock(address[])", "42f6487a": "payment()", "42f6e389": "isModule(address)", +"42f6fb29": "ethUsdPriceFeed()", +"42f721d1": "getInternalStateWithoutViewTag()", +"42f760cb": "burnPynthsOnBehalf(address,uint256)", +"42f7cc3e": "approve_376(address,uint256)", +"42f7fcd0": "tokenSend(address,uint256,uint256)", "42f81580": "CLAIM_DEADLINE()", "42f85ce5": "pay(address,uint256,uint256[])", "42f88548": "updateRegionPixelPrice(address[16],uint256,uint256)", "42f88699": "ExShellToken()", "42f9192a": "nameFilter(string)", "42f91e9e": "BcxssToken()", +"42f966ba": "_processTradingRewards(uint256,address)", +"42f96ee6": "ad4()", "42f989e2": "setUnlockTimeStamp(uint256)", "42f98b14": "buyIssuerTokens()", +"42f98e84": "wildcardsPercentages(uint256)", "42f9b306": "teamLockTransfer(address,uint256)", "42fa3967": "toSlice(bytes,uint32)", +"42fa8c83": "claimedBonus(address)", "42fa98e0": "Orange()", +"42fb71c0": "AddNewToken(address)", "42fba0f5": "grantedTokensHardCap()", +"42fba7ae": "ceil(int256)", +"42fbae81": "withdrowOwner()", "42fbbc9c": "managerPercentage(bytes32)", +"42fc00f4": "CollateralEth()", +"42fc40c2": "play(address[],uint256,uint256,uint8[],uint8[],uint128[],bytes32,uint8[],uint8,uint8[])", +"42fc47fb": "childChain()", "42fc63be": "DebugHash(bytes)", +"42fc9abe": "manaBonus(uint256)", +"42fd3880": "positionCount(address)", "42fd6acc": "checkProof(bytes32[],bytes32)", "42fd7d4c": "_buy(address)", +"42fd9246": "getManagerBalance()", "42fdbed7": "isDeDeContract(address)", "42fea02b": "confirmPayer(uint256,uint256)", "42feba84": "arbiterResponseRate(address)", +"42fece4c": "unSaave(uint256)", +"42fefe15": "PauseRebases()", "42ff1c1a": "getMetadataURL()", "42ffb76b": "getWorkflowName()", +"42ffd71c": "partner2LockedValue()", "4300705d": "withdrawGTO()", +"430080bc": "IncreaseSupply(address,uint256)", "4300e8ef": "addContract(address,string)", +"4300f5e1": "stakeNft(uint256)", "4301b55b": "MintOpened()", "4301cbe5": "getAllNames(string)", "43021054": "BTestToken(address,string,string,uint256,uint256)", "43021202": "fundValuePublish(uint256,uint256,uint256)", +"430251fd": "mintDump(uint256)", +"4302a2f2": "tokenTotalStaked(address)", "4302b3c8": "myTotalSupply()", "43031e9b": "getSumOfPlayers()", "4303707e": "generateRandomNumber(uint256)", "43039433": "handleReturnData()", +"4303d4f7": "totalCouponUnderlying()", "43046844": "placeBet(uint8)", "4304a43f": "updatedBalance()", "4304a6b9": "setUnfreezeStartTime(uint256)", "430558c2": "buyGifto()", "43062beb": "getAvailableTokensToSellTillPhaseIdxValue(uint256)", "43062ea7": "changePurchaseCap(uint256)", +"430648de": "Withdrawn(uint256)", "430694cf": "getProposal(bytes32)", +"4306ba6c": "UCS()", "4306cc3f": "queryEarnings(address)", +"43074c7f": "minEthRequired()", +"4307998a": "setFundingAssetAddress(address)", +"4307b14a": "GAS_UNIT_PENALTY()", "4307d081": "jazzxToken()", "4308a36b": "getIcoPrice()", +"4308a94f": "rateAndUpdatedTime(bytes32)", +"4308f053": "addScan(uint256,string,string)", +"43090116": "getKeyStatus(address,uint256)", "43090357": "readUserPurchasedToday(address)", "4309b4b2": "getPollIdentifier(address,bytes32,bytes32)", +"4309c214": "Holders(uint256)", +"4309e447": "openingTimeArray(uint256)", "430a74b7": "CrypcenToken()", "430ab56a": "sendAllLocalEthers(address)", "430ae7a2": "AvtcToken()", +"430b4400": "getPersonalChallenge()", "430bf08a": "vaultAddress()", +"430bf6df": "cvpVestingPool()", "430c2081": "isApprovedOrOwner(address,uint256)", "430c2a69": "crdjetToken()", "430c73c5": "setMarketAddress(address,address)", @@ -38412,73 +70234,128 @@ "430de98a": "GetCardNumber(uint8,uint8)", "430e484a": "setupNetwork()", "430ecff8": "blksze()", +"430efdc7": "dayOrNightinJapan()", +"430f39fc": "StakedInTheLab(uint256,address)", "430fe5f0": "changeWorkerPrice(uint256)", "430fe9c1": "getDate()", "4310033d": "Gotoken()", "43102eab": "isItConstantinopleYet()", "43104d92": "addMultipleRecordsStrict(uint256[])", "43107290": "createRequest(address,address[],int256[],address,string)", +"4311483d": "authorizs(address)", "43114842": "acceptChallenge(uint256,uint256,uint256)", +"431176de": "BattleHistoryDefender(uint256,uint256,uint8,uint16,uint32,uint32,uint32,uint32,uint16,uint256)", "4311de8f": "ownerWithdraw()", +"43125f36": "isTokenListedInMarkets(address)", +"43127c21": "usdt_balance()", "43128a4c": "feeUSD()", +"4312ae31": "swap(uint256,bool,uint256)", +"4312aee1": "getNumberOfValues()", "4312f19c": "setTransferEmittables(address,bool,bool)", "4312fece": "addAddressToIndex(address,address)", "43133b07": "gameBeginPlayNo()", +"431384b0": "autobegin()", "4313b9e5": "setup(uint256)", "4313de82": "closeBidOrder()", +"43140328": "StakeLP(address,uint256,uint256,uint256)", "4314162d": "untsqm()", "431454fb": "totalMintedBountyTokens()", "43146f36": "resetBet()", +"43148d23": "getStakerInitialStakedAmountOnContract(address,uint256)", +"43154907": "getMultLPAddress(uint256)", "431562b9": "countWithdraws()", "43156db6": "withdrawOldToken(address,uint256)", +"4315a5eb": "qwe()", +"4315b4d2": "getFunctionDelay(address,bytes4)", "4315f545": "proofType_NONE()", "43160e3d": "rootOfTrust()", +"4316199a": "TokenStart(address,address,uint256)", "4316abbb": "newJester(address)", "4316fae5": "NABC()", +"43170256": "getEscrowContractAddress()", "43171485": "tokensHasSoldOut()", "4317f04a": "Transfer(address,string,address)", "431851ad": "NenoToken()", +"4318834d": "mintTeamAndAdvisorsPart7(uint256)", +"4318a614": "SOSTransfer(address,address,uint256)", "431993b9": "endPrivate()", "4319dfd9": "defence(address,uint256,uint16,bytes,uint256[])", +"431a00f7": "projectVestingContract()", +"431a0713": "raresupply3()", "431a4d46": "getContractSample(string)", "431ab1f2": "xmasFundWallet()", "431ab233": "allOperations(uint256)", "431adcb1": "isSellOpen()", +"431b0a5a": "end_time(address)", "431bff74": "MINING_POOL_AMOUNT()", "431cc3dd": "batchWithdraw(address[])", +"431ce540": "removeIssueOnBehalf(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)", +"431ddc9a": "proposeUpdateIncentiveFund(address[],uint256[])", "431e0a48": "AnteilToken()", "431e83ce": "absMaxFee()", +"431e8878": "buyCompleteSetsForTrade(address,uint256,uint256,address,address)", "431ec601": "get_exchange_count()", "431ef9b5": "OptionsConversionOffered(address,address,uint32,uint32)", "431f188c": "set_presale_arbits_per_ether(uint256)", "431f21da": "createAuction(uint256,uint256,uint256,uint256)", +"431f2445": "allowedSlippage()", +"431f3885": "Round2Time()", "431f63c9": "setTokenPrice(address,uint256)", +"431f6ecc": "setGradeOne(uint256)", "4320ea1c": "CrowdsaleBase(uint256,uint256,uint256,address,address[])", "43212413": "Addr2()", "43212c3c": "getHighestMilesAt(uint256)", +"43212cf1": "getAllPackageIds(uint256,uint256)", "43214675": "setMintAgent(address,bool)", "43216a11": "MAX_NUM_AVAIL()", +"43217fe4": "exchangeRateAmplifier()", +"43218e19": "simulateDelegatecallInternal(address,bytes)", "43226631": "CURRENTLY_ISSUED()", +"4322a833": "setReferRewardRate(address,uint256,uint256)", +"4322b714": "reserveFactor()", "4322b73b": "getAdd(uint256)", +"4322ec83": "_MAINTAINER_()", +"432326a9": "metaContribute(bytes,uint256,uint256,uint256)", +"43232e4b": "dsrDeposit(uint256,bool)", "43235a24": "_transferProperty(uint16,address,uint256,uint256,uint8,address)", "43243797": "fundsOf(address)", +"43244795": "_getTestValues(uint256)", "43245816": "tokensToEther_(uint256)", "43245953": "CoinToken(uint256,string,uint8,string)", +"432495c2": "luckBoylist(uint256)", "4324aa21": "classOf(uint256)", "4324ae4f": "PhoenixExchangeDeposit()", +"4324e1fb": "ConfirmWithdraw(address,uint256,uint256,uint256,uint256,uint256)", +"43254d2a": "getLockTypeAmount(bytes1)", +"43258999": "getContributorAddress(uint256)", "4325f6bb": "OfferToCastle(uint256,uint256)", "432607fc": "cancel(address,address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"43264349": "swap(uint256,address,uint256)", +"4326a12b": "_minDepositBNBAmount()", +"4326be0d": "voteAgainstProposal(uint256,bytes32)", "4326e22b": "getMerkleTreeRoot(bytes20,uint8)", +"4326e3d9": "getSlopes()", "4326f3f6": "setMinimumPriceCount(uint256)", +"4326fc27": "combine(uint256[],uint32[],uint32,bytes)", "4327115b": "_AddedToGeneration(address,uint256)", +"43271d79": "cancel(bool,bytes32)", "4327979a": "getPaymentParams(uint8)", "4327acda": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256)", +"43281547": "updateDac(uint64,string,string,uint64)", +"432848dc": "proposeContributionReward(string,int256,uint256[3],address,address,address)", +"43287b9e": "rewardPermille()", "4328894f": "showReportForMonth(uint16,uint8)", +"4328d60f": "beezToLp0Route(uint256)", +"43291583": "changeReceipt(address)", +"43299780": "sayNumbers()", +"4329a310": "releaseUnlockedTokens()", +"4329aaec": "sbiraffleingreso()", +"4329cff5": "percentForFuture()", "4329db46": "transferETH(uint256)", "432a042b": "makeRegistration(bytes32)", "432a3dfb": "roundState(uint256,uint256)", @@ -38486,164 +70363,300 @@ "432a84d9": "ownerDepositInterest()", "432a89aa": "GetBuildingParam(uint256)", "432af6e9": "calculateTokensForMonth(address)", +"432afd71": "protocolPlan(bytes32)", +"432b0cdf": "userRewardPerTokenPaidGdao(address)", +"432b162e": "getRecordIndexLengthForGroupMembers(uint256)", "432b3f85": "fetchVoteResultForCandidateBySnapshotBlock(address,uint256)", "432ba8be": "voterToBallotID(address)", +"432bb0c9": "pOLY()", +"432c2bb6": "productprofile(uint256)", "432c4209": "IQT_DECIMALSFACTOR()", +"432c42d7": "NbUsers()", "432c685f": "trustClient(address)", +"432cc597": "tokenManagement(address)", "432ce549": "sendToUser(address,address,uint256)", "432ced04": "reserve(bytes32)", +"432d5802": "letThisGuyIn(address)", +"432d6c67": "visibleOrAdmin()", "432d7a1e": "_dividendsOutstanding(address)", +"432df17b": "moveUSDT()", +"432e7668": "getBalanceInfo(address,address,address,bytes32,address,address)", "432e83c5": "resetReferedCount(address)", "432e8946": "disableTransfer(address)", +"432eb278": "getPendingLiquidationCountOnETH()", +"432eb2bf": "approve_101(address,uint256)", +"432ef805": "approve_325(address,uint256)", "432f0d20": "EVA(uint256)", "432f3223": "AceFund()", "432f3c22": "request_until()", +"43300369": "setPICOPSCertifier(address)", "43302ff3": "getMaintainFee()", "4330301f": "_ratio()", +"43304e87": "deleteTokenOnlyOwner(uint256)", +"4330c263": "bzrxVesting(address)", +"4330efe5": "leftRewardAmount()", +"43312451": "getEpochStake(address,uint128)", "4331576f": "BITVM()", +"43319cf0": "submitTransaction(address,address,uint256,bytes)", +"4331baca": "getPayableAmount(address,uint256)", "4331e00f": "pay_claimed(address)", "4331e8dd": "setLeader(address)", "433288a2": "setCurrency(string,address,address,uint8,bool)", +"4332d3aa": "TransferReward(address,address,uint256)", +"4332e77a": "miningWarDeadline()", +"43334ce8": "CreditRate()", "4334614a": "isBurner(address)", "4334a8a5": "CHAD()", "433503f6": "ChangeEmissionSumm(uint256)", +"433521f8": "bookHashesDefendant(address)", +"43352d61": "getStakers()", "4335b046": "CRAWDSALE_EARLYBIRD_END_DAY()", "4335dfc0": "getPurchaseTimestamp()", "43361a6e": "MineralBase()", +"433624e9": "NewNomination(address,uint256,uint256)", +"4336a12d": "stakeAmount(uint256,uint8)", "4336a5a8": "EtherGold()", "433740f8": "Purchase(address,uint256,uint32)", +"433771dd": "contractTotalBalance()", "4337b391": "PriceDiscovery(address,address)", "433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", +"43383ac3": "getUsersPaginated(address,uint16)", +"4338543a": "addFunctions(address,bytes4,string)", "43386ea9": "getUniqueValue(uint256)", +"4338707d": "_internalSettle(address,bytes32,bool)", +"43387983": "withdraw(uint64,uint256)", "433900db": "presaleTokensLimit()", "433914c9": "VeChainX()", +"43394190": "feePayout()", "43398685": "BancorFormula()", +"43398c02": "setKingLock(uint256,bool,bool)", +"4339b421": "ISSUER()", "4339bc30": "changePool(address)", +"433a3caf": "getStopIco()", +"433a60d8": "MultiSendEth()", "433a8323": "UnityCoin()", "433adb05": "tokensReserved()", +"433b0fdc": "teamIdToContestId(uint32)", +"433b3c05": "otherToken()", "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)", +"433bdbfe": "setLeadTime(bytes32)", "433c39ff": "transferVoteController(address)", +"433c76bf": "updateExitPeriod(uint256)", +"433cc204": "forPublicSell()", "433cdc26": "PriceAdjusted(uint256,uint256)", "433d0f33": "canUserCancelArtwork(address,address)", +"433d2d7a": "drawEvt(uint256,uint256)", "433d4aab": "resolve(uint8,uint8)", "433d7110": "provas(address)", +"433d9d38": "_decode_uint64(uint256,bytes)", +"433e07ef": "DIRECT_BONUS_MAX()", "433e852d": "flushDividends(uint256)", "433fc1da": "Bandit()", "43406182": "enableLotteryGiveHunt()", "43409bc5": "linkData(bytes)", +"43410855": "addLockType(uint8,uint256)", "4341274f": "_sameClassAxiesPrice(uint8,uint256)", "4341aebc": "distributeTokensToRank(uint256[],uint256)", +"43425119": "deflectBalance(address)", "434253ff": "createItem(string,address,uint256,uint256,uint256,uint256)", +"43428c5e": "batchEarlyAngelSales(address[],uint256[])", "43428e45": "minimumNumberOfBlocksToEndGame()", "4342e966": "approve(address,uint8)", "4342ffe5": "changeMinimumContributionForPrivatePhase(uint256)", +"43430438": "calculateTokensToMint(address,address,uint256,uint256)", +"434339f3": "transferDevFee()", "4343ede6": "currentStageNumber()", "43441a2c": "totalGivenBountyTokens()", +"434450e8": "claimWhitelistAdmin()", +"43445ca8": "bothRevealed()", +"4344cc9b": "thong_tin_doi(uint256)", "4344f73d": "AssToken()", +"4344fa13": "setSecsPerBlock(uint256)", +"43459efd": "sakeBomb()", +"4345bd30": "BoughtIn(address)", "4345c7c9": "_upgradeTo(string,address)", +"4345e90d": "dpoSellTotalAmount()", "434622fe": "additionalMint()", "43463b98": "getconf()", "43463c3a": "UnityToken(uint256)", +"4346962b": "newHighestBid(uint256,address)", "4346aa58": "ITTM()", +"4346b97d": "airDropAddress(address)", "4346ea77": "PrimasToken()", +"4346eead": "changeBallotByteHash(bytes32)", +"4346f03e": "getRethValue(uint256)", +"434707d0": "BalanceOwner()", "43471101": "getSenderFunds(address)", "434786f4": "getBalacne()", +"43479885": "whitelistedPools()", "434847e0": "withDrawFees()", "4349168e": "GenesisSalesPriceCount()", "43496568": "timeLock(address)", +"434a2da1": "gasReward()", "434a55eb": "bonusFirstTwoDaysPeriod()", "434afdfc": "totalObol()", "434b1208": "rescueOrder(uint256)", "434b14e7": "randomGen(uint256)", +"434b231c": "remainBalanced1()", +"434b33ac": "setUnderlyingAggregator(uint256,address,uint256)", "434b349c": "LCEToken()", +"434b55b8": "_mergeArrayToUint40(uint256[5])", "434b635e": "getMaxBetAmount(uint256)", +"434b9f42": "ConfirmWhitelisted(address,address)", "434c4498": "EthperPoe()", +"434c8b5a": "withraw(uint256,uint256)", +"434caf25": "_setCompSpeed(address,uint256)", "434cb64c": "startNextGeneration()", +"434ccff6": "generateOTP(uint256)", "434d16f5": "rotate_left(uint32,uint32)", "434d185c": "getKingdomOwner(string)", +"434d4944": "RemoveWhitelistedBuyer(address)", +"434d7d92": "mainInterfaceVersion()", +"434dceea": "sendT(uint256,address,address)", "434df07e": "NewSerpent(uint256)", "434e0618": "addMedicalProviderReply(address,string,string)", "434e6a55": "addWebsite(address,string)", +"434e91d3": "TMTG_SetInvestor(address)", "434ea7d3": "_lottery5(uint256,address,address)", "434ec416": "EXT_COMPANY_STAKE_ONE()", +"434eff7f": "modifyParameters(address,bytes32,bytes32,uint256)", "434f5f27": "checked_in(address)", "434f811b": "partIndexToApproved(uint256)", +"434f967c": "bid(bytes32,bytes32)", "434fb2ae": "PRICE_MULTIPLIER_ICO3()", "435010d8": "SrcToken()", +"4350283e": "submitMiningSolution(string,uint256[5],uint256[5])", "43503fac": "getWord(uint256)", +"43508b05": "batchMint(address,uint256)", "43509138": "div(int256,int256)", +"435130e8": "redeemAllDUSDC()", "43516832": "getSuppliers()", +"43518b1e": "gg1ToLp0Route(uint256)", +"4351e6b6": "initialize(uint8)", "43525d73": "MAX_FUNDING_SUPPLY()", "435263ef": "ecosystemWallet()", "4352e407": "RozetkaCoins()", "4352fa9f": "setPrices(address[],uint256[])", "4353401f": "NetkillerAdvancedTokenAirDrop(uint256,string,string,uint256)", +"4353d324": "createCampaign(string,uint64,uint64)", +"4353f19b": "setMaxIdoUSDAmountEachUser(uint256)", "43543242": "isSignatureOkay(address,bytes32,uint256[3])", +"43549b2f": "updateM4Wallet(address)", +"43555720": "setPornstarsContractAddress(address)", "4355644d": "addMonths(uint256,uint256)", "43558826": "exchangequeue(address)", "43559743": "edgePigment(uint8)", "4355b9d2": "approveTransfer(address)", "43562bd0": "NextRewardBonus()", +"43569ffb": "verifiers(uint256,uint256)", "4356f35b": "addIntermediary(address)", "43574d9e": "owner2Of(uint256)", "4357855e": "fulfill(bytes32,uint256)", "43579fe8": "deleteShop()", +"4357a543": "getContractIntroduction()", "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)", +"435868a4": "holdWithdraw(bool)", "4358c156": "isBonus()", "43596b8b": "getLLV_edit_25()", +"4359b7ef": "logEvent(uint256,string)", +"4359da8f": "tuning()", "435a0803": "testNowClock()", "435a1220": "createERC20TokenNetwork(address,address)", +"435abb5d": "penalty_renter(uint256)", "435ad5c1": "getMixedStack(bytes32)", "435adacc": "EtherrateUpd(uint256,uint256)", "435ae547": "ResumeTokenAllOperation()", "435afa54": "changeRepoSettings(uint256,uint8,uint8)", "435bb6b9": "nextJackpotTime()", +"435bd91c": "tokenOwnersBalance(uint256,address)", +"435c0878": "_gameStarted()", "435c35b6": "startGeneralSale()", "435ce40a": "isAccount(address,address)", "435cebda": "createMember(address,address,bool,bool)", "435cf753": "winCount(bytes32,address,address)", +"435d0e14": "getEthFee()", "435dc3fb": "setGenesisAddress(address,address,uint256)", "435e119e": "SetupRaffle(uint256)", "435e33a5": "TokenRewardsAdded(address,uint256)", +"435e60ae": "DEBT_SYSTEM()", +"435ea130": "pool4userList(uint256)", +"435edacd": "withdrawCommittedDeposit(uint256)", "435f02f9": "ACIFToken()", +"435f220c": "MEDALS_COUNT()", +"435f456d": "implem()", +"435f7056": "claimableProfit()", +"435f7a65": "calculateOptionRange(uint256,uint64,uint8,address)", "435ffe94": "setHello(string)", +"43603c43": "userRewardPerStakePaid(address)", "4360617b": "Sell(bytes32,address,uint256,uint256,address,address)", "4360f90f": "getOfferState(bytes)", "436108ce": "changePasswd(bytes32,address,uint8,bytes32,bytes32)", +"436116cb": "getBrandsNumber()", +"43613f42": "_payWax(uint256)", "4361443f": "getClaim(address,bytes32)", "43614f8b": "endFinalStage1()", "4361b3f9": "TokensCreated(address,uint256)", +"43620e71": "updateMinter(address,bool)", "43620f24": "startWork(uint256,bytes32,bytes32)", "43626c52": "AllInvestorsRefunded(uint256)", +"436298b0": "buy4mint(address,address[],address[],uint256[],bytes,bytes,bytes,bytes)", +"4362a049": "entryArr(uint256)", +"4362bb48": "setTxtPrices(uint256)", "4362c088": "affiliateLevel()", "4362c116": "transfert(address,uint256)", +"4362c266": "getZeroExV2OrderDetails(bytes32)", +"4362c9ef": "outputToBELUGARoute(uint256)", "43634c39": "useSuperPowers()", +"43634ca5": "coopDataContract()", "436393ab": "AlrzshTest()", +"43639623": "updateForexOracleAddress(address)", "4363e888": "withdrawERC20Tokens(address,address,address,uint256)", +"43644d33": "setTokenUriWithSignature(uint256,string,uint256,bytes32,bytes32,uint8,uint8)", +"436474c7": "approve_243(address,uint256)", +"43654ecd": "FreezeOut(address[],bool)", "43655fd3": "votesItem(address,uint8)", "436577ae": "createIssuance(uint256,uint256,uint256,uint256,string,string,uint8,uint256)", +"436596c4": "distributeAll()", "4365e11e": "BingoLight()", "43668efa": "ProposalAdd(uint256,address,string)", "4366af55": "RTC(uint256,string,string)", +"4366df0a": "token2address()", +"4366fc68": "YieldMaster()", +"43672fb8": "ownerField()", +"4367612e": "returnFirstValue(uint256,uint256)", "43677ca7": "checkInternalBalance()", "4367aa3c": "_isReserveUnlocked()", +"4367ac7c": "rewardStored()", +"43682648": "yvdai()", +"43684b21": "whitelistFrom(address)", "4368600c": "initDeposit()", +"43690526": "resetDeployer()", +"43691f33": "pricePerTx()", "436962b4": "_setTarget(address)", "4369a2c2": "charityAmtToCharity(address)", "4369c250": "rewardsFactor()", +"436a0158": "getTRIPPoolReward(uint256,uint256,uint256)", +"436a510f": "getPathogenData3(uint256)", "436a66e7": "length(string)", +"436a81d7": "addCitiesPopulation(uint256[],uint256[])", "436a88c1": "DEV_FEE()", "436b6158": "card2PowerConverter(uint256[])", +"436b7868": "insAddr()", "436b8fa5": "Salman_nomaniTestCoin()", +"436bb583": "fyDaisSupported(address)", +"436bdf31": "makeSecondMove(bytes32,uint8)", +"436c732a": "r_b25()", +"436cdb03": "EQUITY_TOKENS_PER_SHARE()", +"436d16ae": "approve_82(address,uint256)", "436d4ff5": "hash(string,address)", "436d796c": "startPreIco(uint256)", "436d8fd6": "setGameBanker(address)", @@ -38651,185 +70664,380 @@ "436e1e2e": "computeAirdrop(address)", "436e388d": "enterWallet()", "436ee4af": "SEEDS_TO_HATCH_1RICE()", +"436f1edf": "getColorBlockHash(uint256)", +"436f1fc5": "maxVoteThreshold()", "436f64ac": "rInFp()", +"436f80be": "arrayMembers(uint256)", +"436f997a": "withdrawAdministratorETH(uint256)", +"436fb313": "artical(uint256)", "436fdc0e": "getBattleCardsInfo(uint256)", "436fedc3": "getRegionUpdatedAt(uint256)", "43700afe": "strConcat(string,string,string,string,string,string)", +"43702fee": "getOrders(string,uint8)", "43703b0e": "getEventData(bytes)", +"4370ab96": "tokenURIPrefix(string)", +"437100ce": "accountInSeason(address,uint16)", +"4371377a": "alreadyDraw()", "437159de": "SYCPrivateEarlyPurchase()", "4371c465": "isWeekEnd(uint256)", "4371e46e": "blockCount(uint64)", "43722993": "NPSTToken(address)", "43722b09": "extOwner()", +"43725026": "registerLand(uint256,uint256,string)", "437257bd": "handlePointer(uint256,int256,uint256)", "4372df99": "getNotaryForSeller(address)", +"43735c3a": "setTokenList(address[],uint256[])", "4373f3b4": "setFunding(uint256,uint256,uint256,uint256,uint256,bool,uint256)", "4374356b": "DRUGS_TO_PRODUCE_1KILO()", +"4374aa77": "adminBNBDeposit()", +"43753b4d": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[1])", +"437552c0": "setDust(uint256)", +"43755d41": "registrationCreator(address,address)", +"43756e5c": "SLASH_CONTRACT_ADDR()", "437583a9": "updateReserveToken()", +"4376497f": "rows()", +"43765079": "balanceRefundable(address,address)", "4376890e": "egcToken()", +"4376abf1": "getDiscountedRate(address)", "437764df": "getBridgeMode()", "43777117": "getMarketOptions()", +"4377c1cf": "removeCastleFromActive(uint32)", "4377cf65": "numberOfContributors()", "4377d12c": "ChooseWHGReturnAddress(uint256)", +"4378040c": "createConcorditito(uint256,uint256,string,string)", +"437823ec": "excludeFromFee(address)", "437852b6": "getRefererAddress(bytes)", +"43789b30": "Test1(uint256)", "4378a6e3": "getAttributes(uint256)", "437933cc": "setDataFeedHash(string)", +"43794dda": "mortgage(address,uint256)", "437a8ae6": "multiple()", "437b1a1d": "KITTY_BURN_LIMIT()", +"437b2473": "stateAddress()", +"437c050d": "lockTokenCollateralAndGenerateDebt(address,address,address,address,uint256,uint256,uint256,bool)", "437c58a8": "YourtekToken()", "437c9162": "pre_mined_supply()", +"437ccef7": "setFounderPoolFundAddr(address)", +"437cd894": "MAX_SWING()", +"437cde07": "NewSubPayee(bytes32,address)", "437cfa4a": "setContractICOAddress(address)", "437d07d5": "mktCoinCap()", "437dbf49": "_isAuctionAble(uint256)", +"437e65a6": "getSecretPacketId(string)", +"437e68b5": "addEventVoteResult(address,uint256,uint256,uint256,uint256)", +"437e95f1": "sendToken(uint256)", +"437ec21d": "wallet(address,uint256)", +"437f1760": "one_time()", "437f5b65": "isLUNVault()", "437f6a4b": "userMakeOrder(address,address,uint256,uint256,address)", "437fa667": "appAccountsLength()", +"43808c50": "setStakeAmount(uint256)", "4380ab6d": "clock(bytes32)", "438195f9": "MAX_WHITELISTED_COUNT()", "4381a07b": "setCustomDisputeFee(bytes32,uint256)", "4381e1c5": "verificationAddressHoldersListNumberMap(address,uint256)", +"4381e29d": "ranking(uint256[],uint256[],uint256[],uint256[])", +"438209f5": "drawingPhase()", +"438235dc": "emaTimeSeriesFeeds(uint256)", +"438292f9": "liquidExit(uint256)", +"43835a3c": "testCreateTrxInsufficientBalance(uint256)", "4383603b": "setAllowHalfLife(bool)", +"438364a1": "closeAuction(address,uint256)", +"4383ea6d": "_random(address,address,address,uint256,uint256,bytes32)", "43846074": "getPreviousDarknodes(address,uint256)", "43846fc8": "shortLock()", +"43847b21": "allowHandler(address,address,uint256)", +"4384a0d2": "TypesZeroWei()", "4384d53a": "BunnyCoin()", "43859632": "hasVoted(uint256,address)", "43863045": "addUintSetting(string,uint256,address,address,string)", "438652e0": "addTransferWhiteList(address)", +"4386cca5": "storageAlloc()", "4386fe0d": "changeMinTokenSale(uint256)", +"438752f5": "totalDistributedTokens(address)", "43876776": "setPubKey(uint256,uint256)", +"438787d0": "transferProxy(address)", "4387d35a": "lockedWallet()", +"4387fd1d": "stakeLengthMultiplier(uint256)", +"438858d2": "_addLiquidity(address,address,uint256)", "43886946": "getPlayerTeam(uint256)", +"4388c62f": "notSuspended()", "43894ac3": "setMintMarketMakerApproval(address,address,address)", "438af924": "buy(uint256,bool,uint256)", +"438b0bb8": "Unpause(bool)", +"438b12d1": "organisation()", +"438b1b4b": "mintTo(address,uint256,address)", "438b2aed": "setSettings(uint256,uint256,uint256)", "438b7b99": "setProfitRatio(uint256)", "438b9ff2": "payForUrl(address,string)", +"438bacaa": "changeFee(uint8)", +"438bdc6d": "DescriptionFinalized()", +"438c2a42": "getPendingDepositAmount(address,address)", "438c3585": "releaseTokensBlock()", "438c3aff": "contractIds(uint256)", +"438c6369": "viewMyEthPaid()", "438c9068": "ownersProductCommissionInPerc()", "438c9509": "test_invalidTokenFreeze()", "438cd2d3": "UnPause()", "438d1bd7": "storeBubbleSort(uint256[])", +"438d1df0": "isPositionOpen(bytes32,address)", "438d359e": "buyXname(bytes32)", +"438dd087": "ints(address)", +"438df0a9": "setAMMSubsidyFactor(uint256)", "438e1316": "next(uint80)", "438e15fc": "contains(uint256,uint256)", "438f1eee": "PowZoneToken()", +"438f444f": "AddressUnclaimed(address,string)", +"438f45a3": "updateConfig(address,address,address,address,uint256,bool,uint256,uint256,uint256)", +"43900183": "permanentlyDisable()", +"43907122": "setEnforceDepositLimits(bool,uint256)", "4390921e": "distributeOne(address,uint256)", "43909d76": "EthCannabis(address)", "4390a4f8": "batchTransferToken(address,address,address,uint8,bytes32[])", +"4390d2a8": "devFund()", +"4390d819": "getNestPrice()", +"43918ad8": "toggleVisibility()", "439198af": "timeLeftToContestStart()", +"4391c75b": "donFundCut(address,uint256)", "4392281e": "SCTX()", "43923258": "addAddressToAccessControl(address,uint8)", "43925cc3": "getRoomPlayers(uint256)", "43927707": "NehalCoin()", "43928cfd": "addClient(address)", +"43931e7a": "setMSVToken(address)", +"43934789": "getFromStaking(uint256)", "439370b1": "depositEth()", +"4393b0e5": "checkTimeout(bytes32)", +"439413a0": "_depositTokens(address,uint256,address,bool,uint256,uint256)", +"4394380b": "startingCurrentSetAmount()", +"43943b6b": "perSecondCallerRewardIncrease()", +"439455e4": "getSameItemCount(uint256)", "4394aaad": "getNextAvailableReward(address,uint256)", "4394cc96": "versionBase(bytes32,bytes32)", +"4394dad6": "getTokenBalancePermission()", +"4394f6f3": "init(uint256,uint256,uint256,bytes32)", +"4394f784": "withdrawNonNative(string,address,uint256)", "43951999": "getReportingWindowForForkEndTime()", +"4395d8ba": "applyCreditToJob(address,address,address)", "4395dc06": "getTokenInfoTokenList()", +"43962b06": "getTeamInvest(address)", +"43962d2c": "getRefStakes()", +"43968c77": "isTrust(string,string)", "43973140": "check_lock_period(address,address)", "439766ce": "pauseContract()", +"43977790": "ooops()", "43977911": "addFreezeList(address)", +"43978088": "_rebaseLastPriceUSD()", +"4398c010": "ForSaleDeclared(uint256,address,uint256,address)", "4398da85": "tokensPercentageForKeyHolder()", "4398fbd6": "treeWater(uint256,uint256)", +"43993218": "totalVotingProposals()", +"439973f1": "CityCreated(uint256,string,string,address)", "439abc5b": "getLockByIdx(address,address,uint32)", +"439b5e41": "valOf(address)", "439b91c4": "addBlockeddUser(address)", +"439bb83f": "_governanceAddress()", "439be05c": "getLoanFilledAmount(bytes32)", +"439c1f74": "SanMaxAmountChange(uint256)", +"439c27d8": "setOraclePayment(uint256)", +"439c62d8": "VotingStarted(uint256,uint8)", +"439cc54c": "initialize(uint256,uint256,uint256,uint256,address,address)", "439d4265": "recordToTransfer(address,uint256,uint256)", "439d7275": "issuerSymbol()", +"439db73e": "view_bytes()", "439e10e5": "createUniqueSpinner(string,address,uint256)", +"439e261c": "C18(bytes)", "439e97c4": "alertCreators(uint256)", +"439ec2ee": "lockTemporarily()", +"439f0528": "getVaultByIds(uint256[])", +"439f2a5f": "deposit_to_gauge()", "439f5ac2": "getEndTime()", "439f7d3c": "getSponsor(uint32)", "439fab91": "initialize(bytes)", +"43a00463": "priceAssetUSDMint(address)", +"43a020fd": "doStarEntry(address,uint8)", +"43a07f2b": "transferFromViaSignature(address,address,address,uint256,uint256,address,uint256,uint256,bytes,uint8)", "43a085c2": "ProsperPresaleToken(address,string,string,uint256,uint8)", +"43a08b78": "transferSecondOwnership(address)", +"43a0a7f2": "swap(address,address,uint256,bytes)", +"43a0d066": "deposit(uint256,uint256,bool)", +"43a19910": "preliminarySupply(address,uint256)", +"43a22026": "ApprovalPreSigned(address,address,address,uint256,uint256)", +"43a28ece": "setNftParamsRange(uint256,uint256,uint256,uint256)", +"43a2a302": "getQuota(address)", +"43a2d789": "createAirdropByUser(address,uint256)", "43a335d6": "CreditCarToken()", +"43a36721": "contractNumberInTheLedger()", +"43a3db81": "StartLottery()", "43a4344f": "calcNetworkFee(uint256)", +"43a43ae5": "faloper()", "43a44f1e": "bonusTimes(address)", "43a468c8": "delegateBalanceOf(address)", "43a47345": "floatHolder()", "43a47ae2": "EthTermDeposits()", +"43a4f526": "watchTurbo()", +"43a5b0e6": "withdraw_com()", "43a61a8e": "rootOwnerOf(uint256)", "43a68f3a": "NegToken(uint256,string,uint8,string)", +"43a6a82b": "getdetails(string)", +"43a6b1c8": "listToken(address,uint256,bool,string,string)", "43a6e680": "DonationSentButNotDoubled(address,uint256)", +"43a6f4ee": "userInfo()", +"43a7190e": "ReconManager()", +"43a73d9a": "getProxyAddress()", "43a77530": "serviceAgent()", "43a78b50": "MyAddress()", +"43a7ee3a": "multivestBuy(address,string)", "43a7f749": "getInitialPriceOfToken(uint256)", +"43a826aa": "Health(address)", +"43a869de": "isMatingPaused()", "43a8775a": "amountOfBagTypes()", "43a886ea": "filterBrick(uint256,bytes32[],uint256,uint256,uint256)", "43a88da6": "buyOpen()", +"43a8c0d9": "viewSaleDEFIA()", "43a8d9d5": "authorizeWithdrawal()", "43a92f24": "getAvatarInfo(uint256)", +"43a98951": "approve_134(address,uint256)", "43a98caf": "reinvest(bool)", "43aa8784": "endedGameCount()", +"43aafcc8": "flipper()", +"43ab009d": "pIDxCount_(uint256)", +"43ab4316": "EscrowUpdated(address)", "43ab599f": "EPSCoin()", "43ab850b": "setDividends(uint32)", "43abab26": "whitelist_addys(address[])", +"43abd319": "setSchedulerAddr(address)", +"43abf5fe": "ALLOWANCE_TRANSFER_TYPEHASH()", +"43ac1dc6": "swapEtherToToken(uint256,address,uint256)", "43acb067": "ChefICO()", "43acd7bc": "Bailout()", +"43ad2310": "lpb()", +"43ad92d5": "releaseLp()", +"43ae2681": "totalReferralsOf(address)", "43ae2695": "propertyToken()", +"43ae78be": "prepareRedeemMulti()", +"43ae80d3": "adopters(uint256)", +"43ae9547": "participantRelease(uint256)", "43aefca0": "withdrawThetokens(address)", +"43af53f2": "buy10mint(address,address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes)", "43af755a": "blockedDeadLine()", +"43afb85d": "setExpireTime(uint32,uint32)", +"43afdaaf": "comm()", +"43b0215f": "userInfos(address)", "43b03d37": "i(address,address,uint256)", +"43b086da": "AddressHeldFor(uint256,address,uint256)", "43b0e8df": "set(uint256,uint256,uint256)", "43b114fd": "getMyCoins()", "43b12e95": "BCEToken()", +"43b1878a": "unstakeAndRedeem(uint256)", "43b1938d": "getPhaseSale(uint256,uint256)", "43b1c529": "getSig(string,bytes4)", +"43b1d9a8": "last_rate()", "43b25452": "createPortfolio(uint256)", "43b3181c": "AIOS()", "43b3769e": "checkStatus(address,uint256,string,address)", +"43b37b45": "renameCastle(uint32,string)", "43b37dd3": "executionDailyLimit()", "43b3aa46": "getTokenAmountOf(address)", +"43b3d92c": "limit(string)", +"43b45932": "ecoSystemDevelopmentAndOperationFund()", "43b50d8e": "evKickoff(address,uint256,uint256)", "43b5126d": "getVendingPrice(uint256)", +"43b55f35": "getPid(address)", +"43b57356": "UserWorkers(address)", +"43b58b2c": "setPlsContract(address)", +"43b59f8b": "tellChad(address,bool)", +"43b5eabe": "siProxy(bytes)", +"43b63b9d": "totalLiquidityAdded()", +"43b65e61": "createProxy(string,bytes,string)", +"43b66dac": "isClone(address,address)", "43b6c7d0": "setClaimedFlag(bool)", "43b6caf3": "setMintPerBlock(uint256)", +"43b72d0d": "interestSetter()", "43b7d9c8": "ITToken()", "43b7fd58": "RoomRoundAdd(uint8)", +"43b8063a": "registeredPools__remainingReward(address)", "43b812ef": "r2VaultAddr()", +"43b826b0": "tokens_per_k_gt()", "43b89c62": "getTransactionAtIndex(address,uint256)", "43b8aedf": "gimmeTendies(address,uint256)", +"43b903ea": "AccountIsNotLock(address)", "43b978b3": "playerNames(address)", "43ba2cf5": "transferPreSaleTokens(uint256,address)", +"43ba83e4": "setInvestDenominator(uint256)", +"43babb11": "LogHash(uint256)", +"43bad081": "setPrimaryOwner(address)", +"43bae1ba": "tier1(address)", +"43baeb5c": "isAdminOrOwner(address)", "43bb6a63": "getmemreqscount(uint256)", "43bc1612": "artist()", "43bc867e": "claimStupidFluffyPink(uint64)", +"43bc930e": "timeperiods(uint256)", "43bcf52a": "bbdToken()", +"43bcfab6": "redeem(address,uint256,uint256,address)", "43bd262e": "injectAvatarService(address)", "43bd6e6f": "changeColorYellow()", +"43bda14a": "setOneTimePrice(uint256)", "43bdaacb": "getPlayerInternalWallet()", +"43bdae3b": "stakeAmountOf(uint256,address)", "43bddf40": "horses()", "43bdfb72": "updatedTime()", +"43be1213": "lowestRebateFlag()", +"43be294b": "trustRelayer()", +"43be88b4": "balanceOfAnx()", +"43bebfbf": "rate(uint256,uint256)", "43bf63e8": "priceInWeiEdition(uint256)", "43bf6756": "getMixItemStore(bytes32)", "43bf718e": "getHashOfTheProposalDocument()", "43bf74ef": "setKYC(address,uint256,uint8,uint256)", +"43bf9936": "checkDeadline()", +"43bfdd5d": "total_withdrawn()", +"43bff006": "getCollect(uint256)", "43bff765": "tokensPerMicroEther()", +"43c08663": "transferViaSignature(address,address,uint256,uint256,address,uint256,uint256,bytes,uint8)", +"43c0948e": "getMyReceipts(address)", "43c09e77": "updateNote(uint64,uint16,bytes12,bytes)", +"43c0baf4": "kraken()", "43c0d38c": "getSlotId(address,uint256)", "43c14b22": "revokeVote()", "43c1598d": "maxProfitDivisor()", +"43c1ac38": "UserNamed(address,bytes32)", "43c1f0ed": "timeBeforeJackpot()", "43c238db": "POMCOIN()", +"43c249c5": "approve(address,address[])", "43c273c7": "DevSupply_Released()", "43c29522": "PUBLICSALE_USD_PER_MSENC()", "43c33ac9": "submitShares(uint256,uint256)", "43c35651": "completeCrowdSale()", "43c3658e": "EmporeumToken()", "43c37393": "solveTask(uint256,uint256)", +"43c3a43a": "callTest(address,uint256)", +"43c3f632": "setApproval(address,address,uint32)", +"43c449b0": "changePass(bytes32,bytes32)", +"43c45db9": "getCost(uint256,uint256,address)", +"43c49852": "getRouteF(uint256,uint256,uint256)", +"43c4f727": "pendingSpam(uint256,address)", "43c569f4": "TotalWin()", +"43c5cd74": "JACKPOT()", "43c5d889": "locationOf(bytes,uint256)", +"43c5df4e": "getMinus(uint256,uint256)", "43c639e7": "ownerResetLockedShares()", +"43c65583": "requestSafeRandom(uint8)", +"43c6a16f": "presaleHasEnded()", "43c6b1f2": "_transferAsset(address,address,uint256)", "43c6d558": "SportsBet(string,uint256)", "43c6e10d": "getAffiliateCommision()", "43c6eff1": "submitClaim(uint256,uint256,uint256,uint256,bool)", +"43c71aff": "KECCAK256_ETH_ASSET_DATA()", +"43c7dad3": "getRemainingQtyInSupply(uint256,address)", "43c8124d": "PoolAdvisors()", "43c885ba": "inited()", "43c8c30e": "removeModeratorship()", +"43c8c943": "gumToken()", +"43c8fc6f": "grantTransferAdmin(address)", +"43c99dfd": "tokensToClaimAddress(address)", "43c9a189": "allocate1ProjectToken()", +"43c9d4dc": "continents(uint256)", "43ca46dd": "_ownsToken(address,uint256)", "43ca57bc": "getRetailerStatus(address)", "43ca78a2": "getNotaryInfo(address)", @@ -38840,57 +71048,105 @@ "43cb0af7": "getBytesArrayLength(bytes32)", "43cb2b03": "getCurrentTokenCost()", "43cb3189": "ETHZToken()", +"43cb6901": "andThird()", "43cbbce6": "icoRound2()", "43cc113b": "holdersBonus(address)", +"43cca294": "stakeData(address,uint256)", +"43cccd06": "OrderEvent(uint128,bytes32)", +"43cce08e": "targetBalance()", +"43ccee12": "progressProcKoef()", "43cd1638": "deposit3()", "43cd2c40": "UpdateForecast(bytes32,bytes32,bytes32,bytes12)", +"43cd5c7e": "getCurrentLimit(address)", "43cd5ea1": "sendBussinessByOwner(address,uint256)", +"43cd8f7e": "liquidityToken()", "43cd9655": "XBTexToken()", "43cdaad2": "modelId()", +"43cdc33e": "sBountyClaim(address)", "43cdc49e": "unlockTokens(address,uint64)", "43ce179e": "issueOwnerMore(uint256)", "43ce7422": "getMyEggs()", "43cf5f0c": "PunaniSupply()", "43cfbd65": "getCompanyName()", "43cfd44c": "recover_unclaimed_bets()", +"43cfe6b2": "organizationsRegistry(address,address)", "43cffefe": "challenge(bytes32,string)", +"43cfffdd": "ethPayed(address)", "43d018a0": "whitelistMaxTok(address)", +"43d068de": "deposit(address[],uint256[],uint8[],bytes)", "43d0ee54": "userRounds(address)", +"43d0eeba": "ReconrecoveredAddress()", "43d111ae": "binScan(uint256,address)", "43d1498b": "setCoAuthor(address)", "43d1be7b": "setPresalePhase()", +"43d21f75": "revokeCard_Auction(uint256)", +"43d22196": "fnxBalanceAll(address)", +"43d239bd": "comment(string,string)", "43d24a5e": "addUpdater(address)", +"43d28533": "hlandPerBlock()", "43d2b618": "_removeToken(address)", +"43d2d6d2": "transferByMetricPlan(address,address,uint256)", +"43d32c7a": "addmintingPool(address)", "43d32e9c": "getSellPrice()", +"43d3461a": "transcoder(uint256,uint256)", "43d3a4c1": "getTotalVoters(uint256)", +"43d3b1be": "priceOfUrl()", +"43d3f318": "burnMyTokensFOREVER(uint256)", "43d42780": "icoSoldTokens()", "43d4759f": "HuuuumanStandardToken(uint256,string,uint8,string)", "43d47f82": "ProjectFund()", +"43d4a049": "fundraisingStartTimestamp()", +"43d4b470": "DebugUint256(uint256)", "43d4b78b": "stateIsWaitingReplay(uint256)", +"43d4df8a": "battleWinReward()", +"43d4f984": "escrowSubstract(uint256,address)", "43d5773b": "SpaceCraftCore()", +"43d5d586": "transferGrabLP(address,uint256)", "43d64976": "OwnershipDeleted(address,address)", +"43d681de": "BuyFromEth(address,uint256,uint256)", "43d6add1": "accessoryOnLeaderboards(uint64)", "43d6cac5": "removeTokenMetadata(uint256)", +"43d6d4da": "UNLOCK_BURN_PERCENT()", "43d6ec16": "LIFEFORM()", "43d6fab6": "RegularContract()", +"43d717ae": "igniteEth(uint256)", "43d726d6": "close()", +"43d7430d": "endorsedUsers(uint256)", +"43d76f99": "getServicePools()", +"43d770f8": "NewProposal(uint256,uint256,bytes32)", "43d77c7b": "platContract()", "43d7bfcb": "mintBountyTokens(address[],uint256)", +"43d7cbe4": "rxp_amount_judgment(uint8)", "43d7cce6": "getToken(address,uint256)", +"43d7d321": "finishTimestamp()", +"43d7e7c8": "mrDynamicRewardTotalRelease()", +"43d7e8f3": "setLinkUrlOf(uint256,string)", +"43d7f86f": "bufReward()", "43d84d49": "updateCrowdsaleInfo(string)", "43d8b570": "isTeamVestingInitiated()", +"43d9c935": "callGasLeft()", "43d9e070": "sencSold()", +"43da09cd": "getDepositStates(address[])", "43db053e": "withdrawDevShare()", "43db24ad": "EthereumWings()", "43db5324": "ownerSetCanMining(bool)", +"43db73c3": "__resolve(uint256,bytes32)", "43db7821": "BINKEY()", +"43db89b4": "approve_303(address,uint256)", "43dbb2de": "MAX_ETH_FUND()", +"43dbf2a9": "swap(uint256,bytes32)", +"43dc09c3": "user_details1(address,uint256)", "43dc3ab2": "register(address[])", "43dc7233": "getTokenCreationRate()", "43dcbc86": "hasNotaryBeenAdded(address)", +"43dcd390": "Turn_On_Pause()", +"43dceed1": "TXDM()", "43dd8b30": "updateWhitelistMapping(address[],address,bool)", "43ddc1b0": "callETH(address)", +"43ddeae7": "ChangedRoot(address)", +"43ddf9b1": "MasterStakeMultiSendEth()", "43de34dc": "impl_cancelRedeem(address,uint256)", +"43de4fd0": "exchangePynthsForPERI(uint256)", "43de6f90": "createHero(string,uint16,uint16)", "43de82f3": "revealVote(uint256,uint8,bytes32,bytes32,uint32,bytes32)", "43deb064": "LemonSelfDrop()", @@ -38898,10 +71154,17 @@ "43ded8e3": "MyGlobeToken(uint256,string,string)", "43defc10": "getVendorByAddress(address)", "43defdac": "AudtStandardToken(uint256,string,uint8,string)", +"43df3174": "approve_230(address,uint256)", +"43df339d": "addSigner(address,string)", +"43df828d": "TotalAmount(address)", +"43e01a17": "getIPhoneData(uint256)", "43e08ad1": "addHash(bytes32)", +"43e08d78": "BetPlaced(address,uint256)", "43e09695": "deactivatePass(bytes32)", "43e0c65a": "allowToBurn(address)", "43e0dfdd": "Leverage()", +"43e110e3": "rareWhiteList(address)", +"43e19bf9": "profitBuyBackReserveReceiver()", "43e1b94f": "AnyName()", "43e1eb82": "setSiftContractAddress(address)", "43e204b3": "isTokenLock(address,address)", @@ -38909,10 +71172,16 @@ "43e271ad": "woodworksCities(uint256)", "43e2e504": "GetBalance(address)", "43e332c5": "Last_block_number_and_blockhash_used()", +"43e38da8": "underlyingToCredits(uint256)", "43e3e527": "Weko()", "43e41c44": "Kotlind()", +"43e4771b": "totalPositionCollateral()", +"43e4957c": "FrozenTotal(address,uint256)", +"43e4c7d1": "callerAll()", "43e4cef1": "processPrivatePurchase(uint256,address)", "43e57976": "EthMsig(address[])", +"43e5e41c": "endfirstroundtime()", +"43e5f734": "resolutionsCount()", "43e6125d": "Badge(address)", "43e6cc40": "issueTokens(uint256[])", "43e6cc64": "StopToken()", @@ -38920,18 +71189,36 @@ "43e74f46": "sendPrepaidEthTweet(uint256,string,string,string)", "43e76a26": "SellerRequestedCancel(bytes32)", "43e7aa1d": "commitPhaseLength()", +"43e7d18f": "pool3CrvTokens(uint256)", "43e91384": "setICOEndDate(uint256)", "43e92866": "reservingPercentage()", +"43e97339": "totalHeartsTransformed()", +"43e9bfe0": "sashimiSupplierIndex(address,address)", +"43e9c6b0": "setTotalAllowance(address,uint256)", "43ea0313": "setRitualFee(uint256)", +"43ea5a2b": "LogRepayment(bytes32,address,address,uint256,address)", "43ea8d7b": "newWithdraWallet(address)", +"43eabd24": "approveMlp(uint256,uint256)", +"43eb1b64": "_addVenusMarkets(address[])", +"43eb253b": "internalTokenReceiverAddresses(uint256,uint256)", +"43eb28e6": "lapTotals(uint256)", "43eb37e2": "initChargeJNT(address,string)", "43eb5ac7": "getData_21()", "43ec31e2": "TdToken(address)", "43ec3f38": "toSliceB32(bytes32)", +"43ed257c": "getDaiSplitTradeGas()", "43ed2863": "StandardToken(string,string,uint8)", +"43edb2c7": "MAX_BET(uint256,uint256)", "43edcb07": "_itransfer(address,address,uint256)", +"43ee21f0": "oneSplit()", "43ee67cf": "_transferFallback(address,uint256,bytes)", +"43ef32c3": "nftTeamIndexToCollectibleCount(uint256)", +"43efca82": "tokenTemplateId()", "43f0179b": "takerFee()", +"43f03ab6": "getDeployed(address)", +"43f0ccbf": "setMaxActiveIncubationsPerUser(uint256)", +"43f1068a": "transferTreasuryMetal(address,uint256)", +"43f1e1f4": "viewUserPackageStatus(address,uint8,uint8)", "43f29372": "redeemWinningTokens()", "43f294a6": "setCrowdsaleStop()", "43f3d27c": "setPrPercent(uint256)", @@ -38939,224 +71226,435 @@ "43f46a5c": "getPolicyState(uint256)", "43f48fbd": "rates()", "43f4cb4b": "GetCurrentTypeDuration(uint256)", +"43f531fa": "handleReserve(address,uint256)", "43f58f9f": "createNetwork(string,uint256,uint256,uint256,uint256)", +"43f5ae36": "oracleLength(address)", +"43f5e989": "balanceComision()", +"43f5f876": "calcAPY()", +"43f6150f": "whitelistTrader()", +"43f68a49": "setMaxSlippage(uint256)", "43f6c643": "purchaseRequest(uint256)", "43f6c741": "HGToken()", "43f70917": "create(address,address,address,address,address,address)", "43f70f60": "dna5(uint256)", "43f73a3d": "UpdateCurrency(uint256,string,string,string,string)", +"43f7505a": "drainTokens(uint256,address,address)", "43f76b98": "generateLuckyNumbers(uint256)", +"43f7b7aa": "triggerUpdate()", +"43f810b5": "syncUniswapPair()", +"43f823bb": "checkRule(uint256)", +"43f86ee2": "getPlayerRemainingTime(uint256,uint8)", +"43f8ab56": "setLockTokenInfoList(address[],uint256[],uint256[])", "43f8c639": "tickets100kprice()", +"43f924a2": "testTransferTokenCompiledLongMin1()", "43f97628": "EcosystemFund()", "43f98345": "calculateAllReclaimedNow()", "43f98a56": "tradingDate()", "43f99e68": "refundExternalPurchase(address,uint256,uint256)", +"43fa42b6": "totalUnsettledBetAmt()", +"43fa9276": "individualBalance()", +"43fb1ef4": "setWhitelist1(address[])", +"43fb5f69": "setRegistrable(bool)", +"43fb75e8": "ETH2DAI_WRAPPER()", "43fb86d2": "getGameLength()", +"43fc00b8": "init(address,uint256,address)", +"43fc29b5": "launchwindow()", +"43fc2d19": "totalDistributionUnits()", +"43fc60be": "setAllowedTransferBeforeUniswap(address,bool)", +"43fca754": "PresaleInvestment(address,uint256,uint256)", +"43fcb255": "generateModelID(string,bytes32)", "43fce818": "createAngelCardSeries(uint8,uint256,uint64,uint8,uint16,uint64)", +"43fd0116": "transferPoints(address)", "43fd377a": "ChannelNew(address,address,address,address,uint256,uint256,uint256)", "43fd6b21": "revokeStackholderConfirmation(uint256)", "43fe32fc": "activateProvider(address)", "43fedd01": "setDisputeData(uint256[3])", +"44002fde": "Bond(address,uint256,uint256,uint256)", "44004cc1": "withdrawERC20(address,address,uint256)", "44013585": "setPaymentTime(address,uint256)", +"4401699a": "unlockAmount(address)", "44017cd6": "test_BondPostedButNoMajority()", "44019db3": "testCreateWithParents()", "4401a6e4": "safeSend(address)", "4401c905": "INTREPID_PRICE_THRESHOLD()", "4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", +"4402027f": "_depositRecords(uint8,uint64)", "440208c3": "right12(uint256)", "440235c0": "changeTrade(address,address)", +"440277e8": "getCurrentBalance(address)", "44030e71": "getIsBlockRevenueCalculated(uint256)", +"440368a3": "tend()", "44036b6f": "setFeePercentTenths(uint256)", "44036c41": "getTrustedTransferDestinationValue()", +"44038f90": "REFERRAL_PERCENTS()", +"4403df3b": "setTAIYAKIAddress(address)", "4403e2ab": "nextLotteryTTWTokenId3()", "4403ee2b": "setIFS(address,uint256)", +"44043b82": "multiWhitelistAdd(address[])", "44048aa5": "getContributorUSD(address)", +"4404f907": "replaceMigrate(uint256)", "440574eb": "adminUpdatePayout(uint256,uint256,uint256,bool)", +"44059e58": "participantRegister(address)", "4405a339": "logReputationTokenBurned(address,address,uint256)", +"44064be7": "isDelegatedVault(address)", +"44066744": "stageFiveBegin()", "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)", +"4407c56d": "AddMarket(address,address,address,address)", +"4407cd20": "blocPerEth()", +"4407f6c1": "payDue(uint64,uint256,address)", +"440878b4": "addBlackLists(address[])", "440878c4": "store(bytes,address,uint256,uint8)", "4408c38a": "HIKEN(uint256,string,uint8,string)", +"4408d2ba": "getCurrentEpochNumber()", "4408f3f9": "place_bet(uint8)", "44090448": "to(bytes32,uint256)", "440961c3": "adjustPointsDecayFactor(uint256)", +"44096609": "getUserFeeRate(address)", +"4409770d": "defaultSecondGuaranteeTime()", +"4409785b": "titlefab()", +"44097c48": "meme()", "44097d70": "costWei()", "440991bd": "freezeDuration()", "440a16c4": "SEC(uint256,string,string)", "440a7a0c": "unblockFirstStake()", "440a926a": "home(uint256)", +"440a96e1": "protocolStart()", +"440aa0a8": "villtakeover(address,address,uint256)", +"440ab710": "transferStore(address,address,uint256)", +"440ab9d1": "hasPool(address[],uint256[])", "440adb38": "BullsFundToken()", +"440bfff5": "seedRate1()", +"440c96e4": "topHolder(uint256)", "440d2437": "designatedReport()", "440d2ad0": "PRICELESS()", +"440d7248": "isReservedToken(address)", +"440de6bb": "depositBlock()", +"440e1e69": "tokenAllocation(address)", +"440e8cd7": "testEmptySize()", "440f19ba": "draw(bytes32,uint256)", +"440f1d67": "threeMonthPercentage()", +"440f2e9b": "updatePools(uint256,uint256)", "440f807e": "loadMesa(bytes32,bytes32[],uint8[])", "4410121f": "test_voteSpammingFor()", +"4410c8bb": "AP_nowRoundBankBalanceWei()", +"441142a3": "claimLevel()", "441156cf": "Plutaneum()", +"44117db1": "removeLiquidtyPoolToken(uint256)", +"44118ce1": "busdToToken(uint256)", +"4411935e": "blackScholesEstimate(uint256,uint256,uint256)", +"4411b711": "changePromoter(address)", "4411b8f8": "disputeFavor()", "4411c36f": "avgTokenlossValue()", "441230e4": "registerHandle(bytes32,bytes32,address)", +"44125ee0": "CODE_STATUS_NOT_USED()", +"4412d552": "includeWhiteList(address)", "4412e104": "getZombiesByOwner(address)", +"4412f8c4": "getUserDividendsReinvestable(address)", "4413a688": "setPreallocations()", +"441425db": "id_vdv_tiep_theo()", "4414356b": "sale3Accepting()", "44146c26": "setExpectedTimes(uint256,uint256)", "441478c3": "prepareToRewardProcess()", "4414a5c8": "totalLose()", "4414d940": "napkinPrice()", +"4415279e": "swapETHToBBT(uint256)", "4415516b": "getType(uint16)", +"441573fe": "purchaseProducts(uint256[],uint256[],uint256)", "4415a0bf": "preSaleDiscountPrice()", +"4415a302": "rulings(uint256,uint256)", "441628f1": "sendTokensToBountyWallet(address)", "441666c5": "SimpleContract()", "441691f2": "LexitToken()", "44169752": "WALLET_ADDR()", +"441750a4": "stakeNyanV2LP(uint256)", +"4417a583": "getUserConfiguration(address)", "4417bc66": "VESTED_TEAM_ADVISORS_SHARE()", "4417f4db": "burnOWL(address,uint256)", +"4418783f": "totalLockTokenFeeMined()", "44187d45": "HerdiusToken()", "44188b72": "openPreICOPublic()", +"4418a89c": "setWhiteFrom(address)", "44191d9d": "TokensCreated(address,address,uint256)", "44195fd2": "ApolloSeptemFinalized()", "4419cd81": "isContractNodeOwner()", "4419da33": "changeInvestorAddress(address,address)", +"4419ed20": "changeServiceWallet(address)", "4419f969": "QuaLed()", "441a174c": "multiCallTightlyPacked(bytes32[],address)", "441a2ee3": "Mangocoin()", "441a3e70": "withdraw(uint256,uint256)", +"441a7a27": "setAnotherValue()", +"441ab67e": "setDescription(uint16,string)", +"441ac4a7": "minGagePerArtist()", "441b09d9": "allShares()", "441b1b44": "getPartialValue(uint256,uint256,uint256)", "441b4f01": "investContractDeposited()", "441c3499": "getRefers()", "441c77c0": "revealPeriodActive(uint256)", +"441d2e50": "changeAdminKeyWithoutDelay(address,address)", "441d6a61": "timeWait()", +"441da1ba": "quotation()", +"441daef0": "currentTokenNumbers(uint256)", "441deede": "getSafeContract(address)", "441e354c": "_checkoutCost()", "441ea478": "GetLandId(uint256)", +"441eac5f": "calcRemaining(uint256)", +"441f4049": "totalUnlockedDDai()", +"442026ed": "approveMakerAssetProxy(bytes)", +"44203faf": "xfLobbyMembers(uint256,address)", "442085b2": "contributorCap(address)", +"4420c6f4": "linearReduceRatio()", "4420e486": "register(address)", "44210bbd": "claimPlotWithData(uint256,uint256,string,string,string,string)", +"44211869": "isRoboToken(address)", "44219b05": "getGamePlayingStatus()", +"4421ea21": "transferPauser(address)", +"4421ecec": "getCommonPetIdsSize()", +"4422d372": "globalConstraintsPre(uint256)", +"4422df34": "_setInterest(uint256,uint256)", +"44231025": "mirBuyback()", +"4423c5f1": "bids(uint256)", +"4423c7ab": "getTokenOut()", +"442427df": "APInternalUserList(uint8,uint256)", "442484ff": "ExtTokenPurchase(address,address,uint256)", "44249f04": "tokensForCharity()", +"44250fc2": "pendingSmoke(uint256,address)", "4425c0eb": "claimWhitelistPack(bool)", "4425d66d": "backup_exchangeEthStb(uint256,uint256)", "44261964": "claimFullPrize(address)", +"44261ffa": "getDepositeMaxAmount()", +"44263f66": "cancel(uint8,address,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"44264d3d": "feePermill()", "44268655": "addCroupier(address)", "4426cdc9": "changeEtherContract(address)", +"4426ebd0": "SP()", +"44272b2f": "direct_drop_range_start()", "44276733": "getRole(address)", +"4427a042": "minimalMintingPrice()", +"4427cab2": "endLiquidityDeployment()", "442890d5": "getContractOwner()", "4428b072": "getReply(bytes32,uint256,uint256)", +"44291ade": "matchTime(uint32)", "44292e88": "setZRXToken(address)", "442a494f": "NewRegistrar(address)", +"442a66c8": "twt()", "442b7ffb": "pow2(uint256)", "442b8c79": "addYears(uint256,uint256)", "442bc74f": "placeQuestion(uint256,uint8,uint256,string)", +"442c29ca": "getBuyPriceInWei(uint256)", "442cbcb3": "addParticipant(address,uint8)", "442cf0ee": "sellTokensForLtc(string,address,uint256,uint256)", "442d0927": "isSellPossible()", "442d1759": "GIRLToken()", "442d27dc": "getLoanTuple(uint256)", "442d31ca": "ChefToken()", +"442da82f": "periodEndBlock()", +"442daef8": "changeSuperAdminToOperator(address,address)", "442dfae2": "mktSupply()", "442e1079": "MIN_ICO_GOAL()", +"442e2152": "callVoting(address,bytes4,bytes,uint256)", +"442e309d": "setBattleReward(uint256,uint256)", "442e501d": "createDeposit(address,uint256)", "442eb683": "YouthToken()", "442edd03": "listItem(uint256,uint256,address)", +"442edf51": "createMaster(string,string,string,string,uint256,bool,uint256)", "442efdc1": "MigrateController(address)", "442f52ab": "bilateralCancel(address,address,address,address,bytes32)", +"442f574c": "escrowPercentage()", +"442f69fb": "changeNonprofit(address)", +"44300ca6": "setDevPercentages(uint256,uint256)", "44304edf": "TGCTokenBase(uint256,string,string,uint8)", +"4430dfce": "workingHashRate()", +"4430f4b2": "maxAllowedToClaim(address)", "44314116": "totalRollsByUser()", +"44325fe0": "_getDefaultTimelockInterval(bytes4)", "44326354": "pauseITO()", "4432ce5f": "setTradersProxyContract(address)", +"44333ef3": "replace(uint64,address,address)", +"443355d1": "getPlayerBetValue(address)", "44337ea1": "addToBlacklist(address)", "4433a440": "ADXSold()", +"44346a12": "withdrawAllWithPermit(address,uint256,uint256,bytes32)", "44346e3b": "cancelOngoingTxByAdmin(bytes32)", +"44347397": "minDrift()", +"44347b1a": "AirDrop(address,address,uint256)", "44348a78": "referralIndex(uint256)", +"4434ac3d": "setGsnTrustedSigner(address)", "44350d5f": "neo()", "4435947c": "CoinyMcCoinface(uint256,string,uint8,string)", "4435f1c3": "SlashToken()", +"4436153e": "_stepChronos()", +"44366635": "subers(uint256)", +"44366b07": "calcArbyBuy(address,address,address,uint48,uint256,address)", +"4436ed61": "depositAsERC777(address,address,uint256,uint256,uint256,uint256,bytes)", "4437152a": "setPool(address)", "44377ebb": "getTokenAmount(uint256,uint8)", +"4437d99e": "blocksTillUnlock()", "4437e7a0": "FlogmallAirdropper(address,uint256)", "4438744b": "unlockGrant()", +"44387cc2": "subscription()", "44389678": "isAcceptedExportingAuthority(address)", "4438c8ab": "ExchangeRate()", "4438cf6f": "burnRestTokens()", "4438d222": "userHasKYC(address)", +"4438dd2a": "setBasicData(address,address,uint256)", +"4438f9d4": "delegateDDRclient(uint256,address)", +"4439022d": "updateDittoRate(uint256)", +"4439341b": "BetConcluded(address,uint256)", +"44394cc1": "tamount(address)", "4439ab32": "addRecordEntry(address)", "4439defa": "getNonce(bytes32[])", +"443a58ab": "unlockHeightOfPubIEO()", +"443a5b95": "maxStakeValue()", +"443a8330": "allowanceForContractWithToAddress(address,address)", +"443aa533": "mintInfo(uint256)", "443ace5b": "InitiateWhaleCard()", +"443ae8b2": "setUnstakeTreasuryFee(uint256)", "443af072": "percentToPresalersFromICO()", "443afe2b": "bssTotalSuply()", "443b22e6": "ActiveSalesPhase()", +"443bb293": "withdrawableFundsOf(address)", +"443bd1d0": "registration()", "443bd56f": "getHandleOwner(bytes32)", "443bdc43": "setStepOneRate(uint256)", +"443cb4bc": "reserve0()", "443d4c9c": "sendPayout()", "443d8967": "batchWithdraw(uint128[],address[],uint256[],uint128[])", +"443dd2a4": "tokenAddressArray()", +"443ddba2": "k(uint256)", "443de10c": "getCurrentStaked(address)", "443e1cf7": "isFightClockAuction()", +"443e3244": "releaseDates(uint256)", "443f19f4": "numberOfTokens(uint256,uint256)", "443f41d5": "tokenDeposit(address,uint256)", "443f45a4": "awardprize(uint256)", "443f577e": "getTotalBalance(bytes4)", +"443f8992": "currentStore(uint256)", "443f95dc": "allStart()", +"4440469d": "Transfer_To_Reward_Token(uint256)", +"44407134": "ArbitrageKyberKyber(address,address,address,uint256,uint256,address)", +"44408e58": "tradeTokenForEtherSpecifyingFee(address,uint256,uint256,uint256,uint256)", "444115f6": "acceptOffer(uint256,string)", +"44413984": "createEscrow(bytes8)", +"44414d7c": "pendingRmt(uint256,address)", "444195a3": "partnersFundAddress()", "4441bbd9": "schemaRegistry()", +"4441c23a": "withdrawFromMerkleTreeFor(address,address,uint256,uint256,uint32,uint96,uint256,uint256[30],uint256[12])", "44420311": "setInt(uint256)", "444257a3": "_includes(string[3],string)", +"44427e30": "Locked(address)", +"444282de": "callback(bytes32,uint256)", +"4442981c": "lay_tat_ca_vdv()", "4442bf02": "closeArea(uint256)", "444316e8": "MiniMeToken(address,uint256,string,uint8,string)", +"44431705": "loyaltyPayoutsTo_(address)", "44431e52": "minOVC()", +"444340df": "clearROBX()", +"444361f9": "ItemsToSell(uint256)", +"44437190": "numberTwo1()", +"444378c9": "getCurrentRewardString(string,address,uint256)", +"4443870e": "uint256_uint256_to_uint256(uint256,uint256)", +"44439209": "setSpender(address)", "44440a59": "isDistributionReady()", "44447f47": "lockTokenSupply()", +"44449fba": "setIndCap(uint256)", "4444c51f": "_recalculateTopQuestionsOnVote(uint256,uint256,uint256)", "4444e3cd": "totalSupply(address,bytes32)", +"4445065e": "getCharityUrl(address)", "444581da": "createCloneToken(string,uint8,string,uint256,bool,address)", +"4445b2a9": "requestCreateOrder_TKN_ETH(address,uint256[])", "4445b569": "voteWeightOf(uint256,uint256)", +"4445c1ea": "arrayAdmins(uint256)", +"4445c997": "moveFromStake(address,uint64)", +"4445d799": "gemJoinMapping(bytes32)", +"4445f099": "setTiming(uint256,uint256,uint256)", +"44466b81": "moveTokens(address,bytes16,uint256)", "4446bb11": "verify_signature(bytes32,uint8,bytes32,bytes32,address)", "4446c98c": "foundersFundTimelock1Address()", +"44470762": "LockAccount(address,bool)", +"4447098c": "EventAppEntityInitAssetsToThis(uint8)", +"44470c8d": "assessorAdmin()", +"44471fd9": "withdrawUSDC(address,uint256)", +"4447d1d7": "powerDecimal(uint256,uint256)", "4447e48c": "configureKeys(uint32,bytes32,bytes32,uint32,bool)", +"444820fb": "tentativeDevAddress()", "44482ab8": "w0keAFPresaleAddress()", +"44483d53": "removeLiquidity(address,address,uint256,uint256,uint256,uint256)", "4448604b": "testFailPreDistribute()", +"4448d5e1": "getGroupForCreatorIndexer(address,uint256)", +"4448e180": "v2Initialize(address)", "4448f5fb": "getEscapeRequestsCount(uint32)", "4449307b": "addKycAddress(address,bool)", "44495d7e": "migrateGold(string)", +"4449d905": "_bscWBNBPair()", +"444aa92f": "buyWithETH(address)", "444b0c90": "bonusThirdWeekPeriod()", +"444b3610": "addBurnSaleAddress(address)", "444b6048": "setMerchantDealsHistory(address)", "444bb28d": "TownCrier()", "444c3d9a": "isCompetitionActive()", +"444c668d": "approve_380(address,uint256)", "444c8daf": "tipoCongelamento()", "444cef88": "sentToken()", +"444d1d6d": "defineArbiter(address)", "444d95b0": "proofs(bytes32)", "444da733": "isRoundEnd()", "444da951": "extractWei(uint256)", +"444db70e": "registerFile(string,string,string,string,uint256,uint256)", "444dd6f3": "Elcoin()", +"444e2153": "testMultiMint(address,uint256)", +"444e3566": "getHarvestableStrategies()", +"444e443f": "AccreditTrader(address)", +"444e6269": "setAssignment(uint256)", "444e8b43": "pubkeys1(uint256)", "444e984b": "triggerAttack(uint32)", +"444f9dff": "recreateMokens(address[],string,uint256)", "444fda82": "subYears(uint256,uint256)", +"444fef8e": "initiateTest(address,uint256)", +"44500342": "bnbbasePerBlock()", "44501404": "goldPrice()", +"44502158": "sendEthers(uint256,address)", "445045cc": "_bid(uint256,uint256,address)", "4451967c": "FOUNDATION_POOL_ADDR()", "4451cfd9": "DeductFees(address,uint256)", "4451d89f": "claimToken()", +"445218f2": "feeTransfer(address)", "44525ace": "roundLatLng(uint8,int256)", "445264db": "adventurePresale()", +"4452ff74": "setCurrentContextAddressIfRequired(address,address)", +"44530f3a": "premiumAmount()", +"445327b6": "setVanillaAddress(address)", "44536d27": "Create_AutoGame(uint256)", "44539c72": "setManyWhitelist(address[],bool)", +"4453cb2f": "TotalFarmingRewards(address,address)", +"4453dbf7": "addRefferal(address)", "44540e57": "ownerBurnOccurred()", +"445447d8": "claimingTokensView()", +"4454b20d": "executeProposal(uint8,uint64,bytes,bytes32)", "44554cef": "getRedbulls()", +"44555f48": "changeOracleKey(address)", "44558192": "FMT_Crowdsale()", "44559f80": "start_token_time()", "44566fe0": "HumanStandardToken()", +"4456e327": "transferAfterRebaseFreezeTime()", "4456eda2": "isOperator()", +"445759e5": "blockNumberQueue(uint256)", "44578558": "addPlayerMapping(string,string,uint256,uint256,uint256)", "4457ce5b": "CCH_LLV_303()", "4457d5f0": "createProject(string,string,uint256,address)", +"4458020b": "bifi()", "44587e3e": "_setNumber(uint256)", "4458ddca": "ChristCoin()", +"44593ec4": "pendingOxe(uint256,address)", "44598c11": "hasOfferingStarted()", +"445995aa": "getTranscoderFeePool()", +"445a06e4": "maxMintBProAvalaible()", +"445a6797": "updateChildChainManager(address)", +"445a796e": "getDbAddress()", "445a7a23": "isOracleProxy()", "445b8477": "transferAuditor(address)", "445cb2df": "getVoting(bytes32)", @@ -39165,137 +71663,264 @@ "445d46e1": "onlyInvestor(address)", "445d60d3": "placeBuyRequest(uint256,uint256,uint256)", "445d688b": "COTTToken()", +"445d6def": "interpolationThreshold()", "445d9936": "setTempHeroPower()", "445df0ac": "last_completed_migration()", "445df9d6": "getAllPrices()", "445e4979": "_rejectCertificate(uint256,bool)", +"445e5b06": "SellToken(uint256)", +"445e7688": "leaveStaking(uint256,bool)", +"445e8010": "getInterestRedirectionAddress(address)", "445f153a": "showBlockmaticsCertificate()", +"445f227d": "updateCollateralToken(address,address,uint256,uint256)", +"445fac77": "setupUser(address)", +"445fcefe": "queryRequiredLockAmountForBind(string)", "44602a7d": "testFallbackReturn()", +"44605332": "updateNftToken(uint256,uint256,uint256,uint256)", "44605ea0": "phase_1_remaining_tokens()", +"446074f7": "setSPRewardCal(address)", "4460a2ca": "initializeVesting(address,uint256,uint256,uint8)", +"4460b4df": "setDepreciationNumerator(uint256)", +"4460bdd6": "SUPER_ADMIN_ROLE()", +"4460d3cf": "rescueToken(address)", "4460fb6d": "burn(address,bytes32,uint256)", +"446144ad": "lastRateUpdateTimeForCurrency(bytes32)", "4461550b": "devETHDestination()", "44621145": "goodsOK(uint256)", +"44622604": "getBackoInfo()", "446294ad": "multiAccessGetOwners()", "446298e2": "Rubid()", "446303f3": "preSaleCap()", +"446456e5": "borrowAsset()", "4464aec7": "testTryGet()", "4464c35e": "GNTAllocation(address)", +"44651c28": "investmentsLevelTwo(address)", +"44652481": "unstakeFromPool(uint256)", +"4465c618": "usersX8Matrix(address,uint8)", "4465e38c": "EligmaTokenContract()", +"4465ee2c": "callImpl(bytes)", +"44665679": "setDefaultInitialDiscount(uint256,bool)", "4466862a": "randomtest()", "44669e40": "purgeVoter(address,uint256)", +"4466ee89": "init(uint256,uint256,uint256,uint256,uint256,string,string,string,string)", +"44672119": "CurrentPoolPlayer(uint256)", +"44672793": "etherReserve()", "44673b2d": "NextOwner()", +"44674be9": "addListToWhitelist(address[])", +"4468117b": "mktVestingBalances(uint256)", +"44685eb3": "staketokens_mint(address,uint256)", +"44686799": "getRateTokenReward(uint256)", +"44689f34": "cardTids(uint32)", "44691f2b": "Dispute()", "44691f7e": "hasStarted()", "4469981f": "arrayInfoForDeposit(uint256)", +"4469e30e": "get_price_cumulative_last()", +"4469ed14": "ADMIN_FEE()", +"446a2ec8": "rewardPerShare()", +"446a37e0": "getResult(address)", "446a45b7": "fun1()", +"446a65ad": "WithdrawUpdate(bytes32,bytes32,uint256,uint256)", "446a7974": "Fokitol()", +"446aac8d": "getAffiliateId()", "446b512e": "orderedTokens(address)", +"446b7695": "finishAuctionIndexes(uint256,uint256)", +"446bc453": "registerVaultAggregator(address)", "446bffba": "add(bytes32)", "446c0955": "addWifi(string,string)", +"446c306e": "publicDeposit(uint256)", +"446ccf10": "detachOwner()", "446d5aa4": "getAttributes(address)", +"446d7496": "changeFiniteGamesCommision(uint256)", "446d750b": "setMonthly()", "446da9c2": "xper()", "446dba8f": "getBonus(uint256,address)", "446dde9b": "MilestoneCashBackTime()", "446e0b40": "onSubExecuted(uint256)", "446e5079": "SendDividend(address,uint256,uint256)", +"446e6215": "updateFininisedDistance(address,uint256)", "446f608c": "EscrowEscalation(uint256,uint256,address)", "446f6c1f": "sellStorj(uint256)", "446fbcd1": "CredSign()", "446fcf22": "refundPlayer(address)", "44708f7d": "change_time_stamp_status(uint256,uint256,string)", +"4470ccf5": "mint_many(address[])", "4470da90": "register(bytes32,bytes32,address,bytes32,bytes32)", "44710181": "parseChannelCompatible(bytes)", +"4471408a": "checkPlayer(address)", +"447178c7": "MinimumGoalReached()", +"4471924b": "maxMKTBDSupply()", +"4471f325": "betAdjust(uint256,uint256)", +"4471fa59": "buyDAIforWETH(uint256,uint256)", "44720ed5": "TigerCash()", "4472287e": "numDistributions()", "4472d3bc": "getShopOwnerAllProductList(string)", +"44731da4": "update_price(uint256)", "447400bf": "mutate(uint256,uint256)", +"447449e0": "ChangeFashion(address,uint256,uint16)", +"44747486": "bogdavaultSupply()", "4474809f": "tournamentEndBlock()", "4474e057": "ICOSwapRate()", "44751760": "read(bytes,uint256)", "44751e3c": "starCoinAddress()", +"44751e43": "setStartSwapTime(uint256)", "447615df": "Whitelist(address,uint256)", "44767548": "rectangle(uint256,uint256)", +"4476aed4": "seedAllocations(uint256,bytes32)", "4476d23b": "destructor()", "4476d66a": "mintedInBlock(uint256)", "4476e9a9": "epcwallet(address)", "44772899": "round6StartTime()", "44773a6c": "sendToMultipleAccount(address[],uint256[])", "4477c5da": "stopFunding()", +"4477c974": "stakeRewards(uint256)", "44781a00": "notEqual(bool,bool,string)", "447843cf": "approveChild(address,address)", +"4478830f": "testCalculateAmountSeize_OverflowOnMaxUintBorrowPrice()", "447885f0": "get(bytes32,address,address)", +"447889b8": "stakedFor3()", "4478fbb2": "chOwner(address,bool)", "44795c13": "RecoverySha256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"4479839d": "setLockup(uint8,address)", +"447a05f0": "recordRedeem(uint256,address,address,uint256,uint256)", +"447a06f5": "decodeData(bytes)", "447a64c4": "usdContribution(address,uint256)", +"447a91fd": "addNft(address)", +"447b15f4": "shareValue()", +"447bb620": "buyTokensWhitelist()", +"447c1e8c": "openOrders(uint256)", +"447c5d87": "Like(uint256)", "447cd682": "scheduleTransaction(address,uint256)", +"447d48c7": "poolTotalSupply()", "447d7a1d": "_toLower(string)", +"447da8a6": "stake(uint256,bool,uint256)", "447e2dc6": "c(address,address)", "447e52a0": "answerQuestion(uint256,string)", "447e6967": "endPublicSaleStage()", +"447edb0e": "exitAllSharePool()", "447ee48f": "maxUserCreatedPerformance()", +"447eed28": "handleSplit()", +"447f544e": "EVMChainID()", "447fa561": "CAST()", "447fa8b7": "setDex(address)", "447fbbe3": "manualSendEther(address,address,uint256)", +"447fbc63": "approveExchangeOnBehalf(address)", +"447fd0e7": "AcceptSharingRequest()", "447ffa91": "MineCooldown(uint256)", "44804664": "OriginSportToken(address)", +"44808b56": "revokeIdentityKey(bytes32,address,bytes)", +"4480f84e": "playerRoundAmount(uint256,address)", +"44814802": "createContractEmoji(string)", "44816e2d": "readhistoricalrounds()", "4481a486": "transferECOMTokenToContract(uint256)", +"4482394b": "withdrawBalances(address[],uint256[],bool)", "448246c3": "updateReferralMasks(uint256)", +"44825a4b": "Revoked()", "44830788": "estimateTokensWithActualPayment(uint256)", "44831edf": "developmentTeamTokensMinted()", "44834aca": "buyerAddress()", +"4484046a": "tokenToReserveTransferOutput(address,uint256,uint256,uint256,address)", "44845c28": "MediaCash()", "4484780b": "checkRecentInvestment(address)", "4484a2a6": "forceBuyback(address,uint256)", +"4484a9cd": "calcCurrentTokenDivs()", "4484d92b": "getTotalCommission(uint32)", +"448555cd": "DepositReceived(address,uint256,uint256,uint256,uint256)", +"4485a286": "_setEnableDistributeTransferWpc(bool)", "4485cece": "EndTimeChanged(uint256)", "4485d32c": "storePortfolio(uint256,uint256[],uint256[],uint256[])", +"448622b1": "depositCountTotal()", +"448627d7": "whaleClubInfo()", "4486598e": "zeeshanabbc()", "44866955": "champion()", +"44869380": "ManuscriptFactory(address)", +"4487152f": "delegateToViewImplementation(bytes)", +"448721fa": "getCompTokenInfo(address,address,address)", "448735e7": "BTN4()", +"44879b3b": "setStableCoinAddress(address)", "4487b392": "removeVerified(address)", +"4487d3df": "distributions(uint256)", +"4488750e": "addToAdmins(address)", "448883d7": "claimTax()", +"4488c99c": "buyNFT(uint32,uint256,address,uint256)", "4488ca9b": "hasApproval(address,address)", "4488cc43": "_addExcluded(address)", +"4488d1a1": "distributeTradingFees(address,uint256)", "44890014": "setFxBpsRate(string,uint256,string)", +"44894cd7": "setREBASEcontract(address)", "4489b2ec": "getABaddressByIndex(uint256)", +"4489d94e": "totalStakedIceAmount()", "448a064f": "YunMint(address)", +"448a0bb3": "_deprecated_getStakerUnlockableTokensOnSmartContract(address,address,uint256)", "448a0ceb": "setRoughSupply(uint256)", +"448a1047": "withdrawAndClaim(uint256)", +"448a2638": "pidCalculator()", "448a5e11": "mintForDisputeCrowdsourcer(int256,uint256)", "448a5f0b": "getTestimonialCount()", "448a627c": "SetConfirmRound(bytes32,uint8,bool)", "448a9915": "oneBillion()", +"448aa40e": "getName(int256)", +"448ab1e6": "setLiftoffPartnerships(address)", +"448ac9d0": "TokenPerEtherUpdated(uint256)", +"448b1aac": "doubles(uint256)", "448b1f29": "tokensForTrivial()", +"448bd890": "sellcap()", +"448bda80": "basePrice14()", +"448bf820": "registerCompany(address,string,string,string,string,uint256)", "448c0341": "FXRATE()", "448c6656": "nodePhases()", "448d76a3": "grantReserveSupply()", "448d8910": "solve(int8)", +"448e2c9c": "getDefaultOperator(address)", +"448ed493": "SenateCouncil()", "448f1ec1": "tranferPresaleTokens(address,uint256)", "448f30a3": "nothing()", "448f8c86": "Acentiex()", +"44902cef": "NewHighscore(address,uint256,uint256)", +"44903827": "set_commission_03_fee(uint256)", +"44903fb6": "setLiquidationRoute(address[])", +"44909b74": "BURN_TO_STAKE_FACTOR()", "44909c99": "Doftcoin()", +"4490a4e2": "fundShareRemainLastRound(uint8)", +"4490c46f": "viewLevelExpired(address,uint256)", "4490efe3": "EthernetCashWebsite()", "449106ac": "stageCap()", +"44913604": "initiateDispute(bytes32,address,address,uint256,uint256,bytes)", +"4491645b": "toggleDebug(bool)", "4491fe8f": "onlyPay()", +"44922420": "OfferAccepted(address,uint256,uint256,bytes32)", +"4492694d": "setRetireAddress(address)", +"44927f49": "mintedVAIOf(address)", +"44937a31": "legalIssue(address)", "44938e94": "checkPartner(address,address)", "4493b8a4": "addrDevTeam()", +"4493bc91": "tipOpenESQ()", "4493ff1c": "vestedBalanceOf(address,address)", +"449472f6": "setDepositPercent(uint256)", "44947b9d": "getOutcomeOfSecondPeriodByEntity(uint256)", "4494fd9f": "getGame()", "4495147b": "RtcCoin(uint256)", "4495bbf7": "DOXYCOIN()", +"4496223b": "minFreezeDayLength()", +"44963170": "withdrawLp(address,uint256)", "44964dcb": "theList()", "4496a7ea": "_getCurrentRoundInfo()", "4497ce22": "getLicenseReimbursement(address)", "4498acba": "provenAddress(address,bool)", +"449921fb": "blackListedAddress()", "44997a58": "MinusToken()", +"44999683": "nxcAddress()", +"4499ade7": "getUnclaimedTokens(address)", "4499af81": "setChainLedger(address)", +"4499d867": "cobbDouglas(uint256,uint256,uint256,uint256,uint256)", "4499e043": "UNSOLD_ALLOCATION_EXPONENT()", "449a058d": "getParentsLength()", "449a09a4": "interfaceAddr(address,string)", +"449a1d55": "ethSent(address)", "449a52f8": "mintTo(address,uint256)", +"449ab53e": "solariteAddress()", +"449b466f": "getUserEthByTrxAddr(string)", +"449b9ffa": "ERR_NOT_ZEROX_EXCHANGE()", +"449c0922": "blacklistManyUsers(address[])", "449c198d": "setSealed()", "449c7ad3": "withdrawHouseCutFromGame(uint256)", "449d0eb1": "checkAccountSchedule(address)", @@ -39303,32 +71928,68 @@ "449d1ba4": "fundBountyAndTeam()", "449d2712": "LEF()", "449daa9a": "setCostPerEnergy(uint256)", +"449dcc2a": "sellPower(uint256)", "449de356": "isIncluded(uint256)", +"449deb6b": "reserveRecipients(address)", +"449e395b": "manuallydeclarewinner(uint256,uint256)", "449e815d": "getPrice(address,uint256)", "449ed7e0": "callback(bytes32,string)", +"449f14f2": "onNewBet(address,uint256,uint256,uint256,uint256,uint256)", +"449f6bda": "stakeRewardWeightTotal(uint256)", "44a040f5": "getRewardAmount(address)", +"44a043d5": "showInfo(address)", +"44a08411": "previousCumulatedRewardPerToken(address)", "44a08b36": "checkAccess(string,address)", +"44a09f37": "newPurchaseOption(address)", "44a0d68a": "setCost(uint256)", +"44a100ca": "_getSig(bytes)", "44a17516": "Configurable()", +"44a2053d": "totalStakedLpBalance()", +"44a21dd0": "autoCreateCampaign()", "44a2542a": "initiateRefund(bytes32)", +"44a287ca": "setBurnRatio(uint8)", +"44a2ac82": "getContractTokensBalance(address)", "44a2d0d2": "contributorsKeys(uint256)", +"44a3955e": "sharesTotal()", "44a3982d": "getTokenPriceForPeriod(uint256)", "44a3bb82": "getGameIndex()", +"44a4a003": "avgBorrowInterestRate()", +"44a4adfe": "g7(uint256)", "44a5450f": "PRESALE_WALLET()", +"44a58a66": "GLUWA_ADMIN_ROLE()", "44a5b69c": "Reederem(uint256)", "44a60878": "DCXToken(string,string,uint256,string)", +"44a6958b": "getOwnerStakeByStatus(address,uint8)", +"44a6a612": "setTerms(address,uint256,uint256)", "44a6a8f0": "getDonationLength()", +"44a6cfcf": "approveErc20(address,uint256)", +"44a70686": "AMM()", "44a71bc6": "fundingMaxCapInWei()", +"44a78dff": "setMinTrade(uint256)", "44a7a992": "ParametersChanged(uint256,uint256,uint256)", +"44a7da3c": "dcashPerBlock()", "44a7f501": "getOwnersGeneration()", +"44a8c4bf": "tokenStakeBalanceLedger_(address)", +"44a91499": "cardMintFee(address,uint256)", "44a926f9": "assigned_shares()", +"44a95cab": "sashimiSpeeds(address)", +"44a9c0d6": "generatePool()", +"44a9ecb7": "getSharesOfAccount(address)", +"44a9f9ff": "isRoot()", "44a9ff76": "getLastHatchPrice(address)", +"44aa0448": "darker(address,address,uint256)", "44aa1826": "_minChild(uint256)", "44aa470a": "addressVerified(address,string)", "44aa5782": "LagToken()", +"44aa6836": "toInt(uint256)", "44aa768f": "getLLV_edit_26()", +"44aa796a": "swapAttemptPeriod()", "44aa8b0e": "createAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"44ab1409": "newTokenDeposit(address,uint256,uint256)", +"44ab16dc": "HashOutput(bytes32)", "44ab1c2f": "calcHouseEdge(uint256)", +"44ab37b4": "getAccumulated(address)", +"44ab504c": "getCitizen(string)", "44ab6970": "redeemBool()", "44ab6efa": "comB_()", "44ab7e6f": "setParamsUnOrdered(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", @@ -39338,178 +71999,330 @@ "44ac9d81": "resumePreSale()", "44acb8da": "crowdsaleTokenSupply()", "44ace7c3": "Tribe(address,string,string,address)", +"44ad0bf7": "repayStake(uint256)", +"44ad4f2a": "lastMintRate()", "44ad5535": "ProofOfContractSnipers()", "44ae0567": "advisorsReleased()", "44ae2c03": "getAppNickname()", "44ae58f6": "Bittrees(uint256,string,string)", +"44ae7b67": "matchOrders(uint256,address,uint256[4],uint256[4][])", "44af11a3": "startBuyBackOne()", "44af18c2": "goolaTeamAddress()", +"44af18e8": "removeEth(uint256)", "44af1f4b": "replaceOfficials(address[])", "44af24d6": "getCurrentPercentage(address)", "44af946f": "calculateEndTime()", +"44afc5c6": "combToken()", "44afda9c": "_isValidBaseLayersOnly(uint256[],uint256)", "44b0245d": "addPurchased(uint256,uint256,uint256)", +"44b049bc": "redeemableTokens()", "44b07838": "setPaidPackage(uint256,uint256,uint256,uint256)", +"44b07848": "viewCoinAddress(string)", "44b07a3e": "newProposal(uint256,string,bytes32)", "44b11f26": "Registry(bytes32,uint16)", "44b1231f": "vestedAmount()", +"44b12aea": "totalTip(uint256)", +"44b19dfc": "getVaultsLength()", "44b1d6e3": "DEXLITE()", "44b1e09d": "checkTargetReached()", "44b1e61a": "isFirstInit()", "44b20e7a": "drawNum_()", +"44b20ee9": "_UNUSED_BASE_()", +"44b22fdd": "registerConsumer(address)", +"44b25052": "getTokenBinder()", "44b28d59": "enableMint()", "44b2a172": "cards_metal(uint256)", +"44b2d717": "sellReqCount(address)", +"44b3b11b": "mixGenes(uint256,uint256,uint256,uint256)", "44b49958": "presaleEtherRaised()", "44b4d279": "payoutDividends()", "44b55187": "DollarToken()", "44b55c3a": "setParking(uint32)", +"44b5a802": "getSpreadPerBlock()", +"44b6bd2d": "defix()", +"44b6fd81": "votingPowerChangeNonce()", "44b70d79": "LiquidityNetwork()", "44b76b9e": "ICOTimer()", "44b77680": "init(address,address,uint256[])", "44b786a1": "setRate_BTCUSD(uint256)", "44b7a3b7": "_createScrapPartAuction(uint256)", +"44b7a8ac": "approve_532(address,uint256)", +"44b7e5f2": "setSafeMode(bool)", "44b8074c": "changeTotalAmount()", "44b81854": "STSTEST1()", "44b81a77": "BitcoinToken()", +"44b86c1b": "_setBoolValue(bytes32,bytes32,bool)", "44b88a6d": "scannedBronzeCaps()", "44b8ccda": "EthLongExercised(address[2],uint256[8],uint256)", +"44b965f4": "drillOf(uint256,uint256)", "44b9cab5": "roundBlockCount_()", "44b9efb2": "setInputData(uint256,uint256,uint256)", +"44ba0618": "juryYesVoters(uint256,uint256)", +"44ba1165": "Do_Unstacking(uint256)", "44ba16a2": "COLOR_PINK()", "44bb3b2f": "stopBlock()", +"44bb49c5": "WithAss(bytes32,address,uint256)", +"44bb4c7c": "_amountRaisedTier2()", "44bb60cf": "sigDestinationApprove()", +"44bbf4d8": "startSaleRHINO(uint256,uint256,uint256,uint256,uint256)", +"44bbfd30": "EtherLogged(uint256,address)", +"44bc253a": "rewardDelta()", "44bc3e27": "BetWEA(address,uint256)", +"44bd1afd": "setDefaultSlippage(uint256)", +"44bd5cbb": "setupEvent(bytes32,uint256,uint256,uint256,uint256,uint256)", "44bd7186": "GestiToken()", "44bd7b71": "setBountyPercent(uint256)", +"44be421d": "withdrawNKSN(uint256,uint256)", +"44beb4f2": "setNewTargetSupply(uint256)", "44bec848": "thirdRoundPercent()", "44bee639": "distributeSupply(address,uint256)", +"44bf3c72": "liquidationEngine()", +"44bf67d7": "regUser(uint256,uint256)", +"44bf7703": "newReceipt(uint256,string,string,uint256)", "44bfa56e": "getBytesValue(bytes32)", +"44bfc6bf": "depositedBalance()", +"44c00e91": "zapDeposit(uint256)", "44c010c6": "_getReferralBonus(uint256)", +"44c028fe": "execute(uint256,address,uint256,bytes)", "44c040a6": "MyAdvancedToken(uint256,string,string,address)", +"44c07a9f": "setLimitOrder(uint256,uint256)", "44c11fe4": "currentTransferableTokens(address)", +"44c1568c": "lposition1(address)", "44c18aa7": "setPayout(uint256)", +"44c19402": "setCpPoolInfo(address,address,int256,address,address)", "44c20957": "setPhase(uint8,uint256,uint256,uint256)", "44c20e6f": "retrieveExcessEther()", +"44c23fa3": "enableLottery(bool)", "44c2dd52": "RDPMoney()", "44c2dd71": "HSCToken(uint256,string,string,address)", +"44c318ec": "setupOwner(address)", +"44c370d3": "stakingCap()", "44c3cb29": "validPlayer(uint256,address)", "44c3cc68": "BasePoll(address,address,uint256,uint256,bool)", "44c47561": "whiteListed()", "44c4bf10": "setBlacklist(bool)", "44c4dc31": "totalContributedAmount()", "44c4dcc1": "purchasedAmount(address)", +"44c51252": "rollupNumPubInputs()", "44c526c1": "devRewardClaimed()", "44c55801": "setVaribles(string,string,uint256)", "44c5bbf8": "updateStatus(address,uint8)", "44c5e758": "getCustomerPolicyCount(address)", "44c63eec": "vesting()", +"44c649ee": "isUnfreezable(uint256)", +"44c70628": "SignatureErrorSelector()", "44c71ef2": "changeSaleSettings(address,address,uint256,uint256,uint256)", "44c73459": "weiPerBlock()", +"44c7c867": "proposalsLength()", "44c7d6ef": "claimStake(uint256)", +"44c7e5e1": "revokeGemlyMinter(address)", +"44c80dfd": "quoteDecimal()", +"44c816fa": "endTime(uint256)", "44c9716a": "BVA()", +"44c9a34a": "viewX_and_R()", "44c9af28": "getState(uint256)", +"44c9db5b": "addNextTopCoin(address,string)", "44c9e83d": "purchaseAuthorizer()", +"44ca108a": "createNewStake(uint256,uint8,bool)", "44ca361f": "Log1(string,uint256)", "44caa8d6": "isArrAccountIsFrozen(address)", "44cb1c33": "lastTokens(address)", +"44cbe5de": "sendToUniswap()", "44cc129e": "count_bytes(uint256)", +"44cc3c7f": "_addMetadataToRequest(uint256,string,string)", "44cc5f7e": "m_externalMintingEnabled()", "44cc7f5e": "validWithdrawToken(address,address,uint256)", "44ccbed0": "getAssetCollectedOreBallances(uint256)", +"44cccea7": "ExpireEvent(uint256,address,uint256,uint256)", +"44cdc454": "communityFundRewardRate()", +"44cdf4c6": "getTokenPriceInUsdCents()", +"44ce2a89": "ICOstatus()", +"44ce3660": "equip(uint256,uint256,address,uint256)", +"44ce375b": "setLendingPoolLiquidationManager(address)", +"44ce3d12": "getTimelockEndBlock()", +"44ce7214": "minimumsAdd(address,uint256,uint256,bool)", +"44ce97c9": "createAgreement(uint256,uint256)", +"44cebfef": "Locked(address,uint256,uint256,uint256)", +"44ceee8c": "btcToBProDisc(uint256)", "44cef69b": "CreateTokenToOperation(address,uint256)", +"44cefb69": "getStoremanGroupConfig(bytes32)", "44cf262a": "addressChangeBlock(address)", "44cff104": "setMarketManagerAddress(address,address)", +"44d00f82": "getVaults()", "44d02c2a": "infoICO()", "44d03ac6": "BlockhashFetch(address)", "44d0afbc": "signingLogic()", +"44d0c937": "getLiquidationRatio(bytes32)", "44d15446": "setDevelopmentAuditPromotionTokensPercent(uint256)", +"44d17187": "burn(address,uint256,bytes)", "44d19d2b": "reservedSupply()", "44d1a074": "marketsubscribers()", "44d1a9ae": "setCardDrawPrice(uint256)", "44d1ef3b": "setTCRHelper(address)", +"44d333ff": "tiger()", "44d345f9": "UnclaimedRewardTransfer(uint256,uint256)", +"44d3d337": "mapEraAsset_Reward(uint256,address)", "44d4fd19": "Now()", +"44d52508": "withdrawTFCEAfterPresaleOver()", "44d60e67": "TransferAssets(address,uint256,address)", +"44d615e3": "getIndividualRestriction(address)", +"44d64c76": "yVIT_token()", +"44d650cb": "orbsRegistry()", "44d6d259": "AdminAdded(address)", +"44d75c0b": "getImpactLinked(bytes32)", "44d75fa9": "updateMinorTree(bytes32)", +"44d78bc3": "getSubkData2(address,bytes32)", +"44d7e455": "mapMemberEraPool_Claim(address,uint256,address)", "44d7e4ed": "stopIssuing()", +"44d8563b": "_setDecimalShift(int256)", +"44d8ab26": "adminClaimAirdropMultipleAddressMultiAmount(address[],uint256[])", +"44d8e77a": "TransferAndLock(address,address,uint256,uint256)", +"44d9385f": "hash8()", +"44d96e95": "totalBonded()", +"44d9947f": "gROOT()", "44d9bc5f": "gameEndTime()", +"44da4abd": "EasyZapIn(address,address,uint256,uint256)", "44daf94a": "showEthBalance()", "44dbb571": "SALE_START_TIME()", "44dbc282": "processCallback(bool,address,address,uint256)", +"44dbd5ec": "dflSupplierIndex(address)", "44dc028d": "lockedtokensOf(address)", "44dc4dec": "registerForRace(uint256)", "44dd4b3b": "lookupGeneration(uint256)", "44dd4b5e": "scheduleTransaction(address,uint256,bytes)", +"44de240a": "assetId()", +"44ded7bd": "penaltyLiquidity()", "44dedf4d": "returnFundsForUsers(address[])", +"44dee17f": "giveMe(uint256)", "44defdfd": "paidInstallments()", "44df8e70": "burn()", +"44dfb31e": "NMP_RANDOM_DEVIDER()", "44dfdce0": "getNameOwner(bytes)", +"44dfef34": "votedForOption(address,uint256)", "44e02dbc": "returnCollateral(uint256)", +"44e0b2ce": "lastForgedBatch()", "44e14e59": "lockReferralTokens(uint256,address,uint256)", +"44e182d7": "reqSig(string,string,string,string)", "44e191fa": "increaseApproveAndCall(address,uint256,bytes)", +"44e1ae85": "Add_hunter()", "44e2024f": "createNewFreelanceContract(string)", "44e20fd2": "EasyPocketCoin(uint256,string,uint8,string)", "44e2651c": "whiteListOf(address)", +"44e2a5a8": "drip(bytes32)", "44e2adeb": "claimedFlag()", "44e2cc24": "JackpotTimer()", "44e2f9ad": "buyerInfoOf(address)", +"44e330c4": "transferExtraSurplus()", +"44e33b85": "getFee(uint256,address,address,uint256)", +"44e393cb": "addGrantor(address,bool)", +"44e3fa3c": "startRampA(uint256,uint256)", +"44e43c98": "getCurrentInterval()", "44e43cb8": "depositRevenue()", +"44e44545": "battle()", +"44e446a4": "getContractAdvanced()", "44e44e0d": "Profeee()", +"44e46dff": "setTransfersPaused(bool)", "44e4c366": "rmTrusted(address)", "44e4d226": "alreadyVoted(string)", "44e52420": "TRADERSCOIN()", "44e5d154": "GenesisGlobalTestToken()", +"44e60c2f": "Menu05(address,address,uint256)", "44e63717": "LaboToken()", "44e66ee2": "updateMeterValue(uint256,uint8,uint256)", +"44e75e93": "depositype()", "44e780b7": "PrepareRollEvent(address,uint256,uint256,uint256)", "44e78d93": "wipeDAI(uint256,uint256)", "44e796de": "doubleBonusArray(address[])", +"44e797e9": "removeSale(uint256)", "44e7faa4": "limitedWalletsManager()", "44e86b2f": "left71(uint256)", "44e880c1": "gasAfter_()", +"44e8c0b1": "withdrawFinney(uint256)", +"44e8d12c": "setup(string,string,address,address,uint256)", +"44e9506c": "AddDeposit(address,uint256)", +"44e9f83d": "initiatePotGrab()", "44ea1c71": "addNFBTNY(address,uint256)", "44ea4a7c": "TokenCreated(uint8,uint8)", "44ea54fe": "changeSoundcoinsContract(address)", +"44ea559a": "addReward(address,uint256,uint256)", +"44ea6686": "approve_820(address,uint256)", +"44ea9e49": "isPromoOver()", +"44eaabb0": "setAddressAllowance(address,bool)", +"44eb804a": "Hatched(address,uint256,uint256)", "44ec1a0d": "getContestStatusForDateAdmin(uint32)", "44ec2c03": "addTransaction(uint256,uint256,uint256,uint16,bytes32,uint256)", +"44ec4021": "lockEndTime()", +"44ec6b62": "issueSynthsOnBehalf(address,address,uint256)", +"44eca78e": "changeYieldFarmAddress(uint256,address)", "44eccf16": "PSTBCoin()", +"44ed26a4": "PurchaseTokens()", +"44ed5df4": "setGemDifficulty(uint256,uint256)", "44ed9039": "FLTTToken()", +"44ede015": "hasCardExpired()", "44edf6b2": "preIcoEndDate()", +"44ee1986": "exchange_underlying(int128,int128,uint256,uint256,address)", "44ee398b": "secondThawDate()", "44ee3a1c": "extendLock(uint256)", +"44eec623": "manualCheckout()", +"44eee868": "daiUser()", "44eef96c": "sellShip(uint32,uint256,uint256,uint256)", "44ef231b": "argumentCount()", +"44effcef": "aboutid()", "44f04404": "forging(uint256,uint256)", +"44f05140": "shoppingRecipientAddress()", +"44f05beb": "dividendPayingSDVDSupply()", "44f06bc7": "getChampStats(uint256)", "44f09d2a": "createDungeon(uint256,uint256,address)", "44f0a4a8": "tdeStartTime()", "44f0c3ce": "totalLost(address)", +"44f0de75": "xfLobbyPendingDays(address)", "44f11e7e": "tokenBoughtPerTime(uint256)", +"44f1325a": "setLockTypeInterval(uint64)", +"44f18430": "setWithdrawFeeTo(address)", "44f1bbad": "giftRatioOf(address)", "44f1beed": "Marble()", +"44f1c2ee": "startAirdropbADR(uint256,uint256,uint256,uint256)", "44f1ee5b": "Proof(address)", "44f2428a": "adjustL(uint256)", "44f252a0": "confiscate(address)", "44f26d89": "forceUnstake(address)", "44f27e30": "getAuctionData(uint256)", +"44f2c0c9": "approve_445(address,uint256)", "44f34576": "setTokensBought(uint256)", +"44f38008": "setMint(uint256,uint256,uint256)", "44f38756": "icoState()", "44f396fa": "startStage2()", "44f39803": "setBubbled(address)", +"44f3bc38": "AllScore()", +"44f3d2ed": "donateChallengerStakes(uint256,address,uint256,uint256)", +"44f3f7df": "remove_liquid(uint256,uint256,uint256)", +"44f49e73": "changeAllocPointsForSwapReward(uint16,uint16)", +"44f4b506": "repayCheck(address)", +"44f58e20": "cAPYAddress()", +"44f5b110": "upperCollateralMedianDeviation()", "44f5e447": "operatorFeeAcct()", +"44f5e54e": "yfvLockedBalance()", +"44f62b3c": "setUserSigningKey(address,uint256,bytes,bytes)", +"44f67a7b": "getMonetaryModel()", +"44f6bc11": "CROWDSALE_END_TIME()", "44f6d70c": "giftOwnerByIndex(address,uint256)", "44f7335b": "_verifyAvailability(uint256)", +"44f73b07": "luckBoyFirst()", "44f75cbd": "isAffiliate()", "44f7636c": "publicOfferingWallet()", "44f7787f": "ln(uint256,uint256)", "44f7d03d": "valueOf(uint8,bool)", "44f84579": "JP_winner()", +"44f84af2": "price1AverageUNI()", +"44f91c1e": "auctions(address,uint256)", +"44f9413c": "startAddNewPool(address,bool)", "44f96b36": "getRemainingPartnerTokensAllocation()", "44f96bc6": "matured_timestamp()", "44f977de": "setStore(string,address,uint256)", +"44f98fa5": "TicketPool(bytes32)", "44f9ac5c": "getPendingWithdrawals(uint256)", "44f9d060": "_getMinimum(bytes32)", +"44fa7b24": "updateRelease()", "44fa961d": "deleteLawyer(address)", "44fa9ca6": "oracleIsUpdating()", "44faa139": "Withdraw(uint32)", @@ -39517,6 +72330,7 @@ "44fbaf08": "bountyAmountLeft()", "44fbc1ef": "Dollar()", "44fbd125": "increasToken(uint256)", +"44fbd15c": "ModifyOffer(uint256)", "44fbe5f5": "NewBiggestDick(string,string,uint256)", "44fc2a9b": "NOLLYCOINCrowdFund()", "44fc364c": "setMarket3(address)", @@ -39524,153 +72338,305 @@ "44fc83dd": "LogTokenReward(address,uint256)", "44fc9361": "maximumInvestmentInWei()", "44fcbd79": "getLocksForAddress(address,uint256)", +"44fcf94a": "callFinalize()", "44fd1557": "ERC20Token(string)", +"44fd4fa0": "callB()", "44fd584d": "cancelLeaseOffer(uint8)", +"44fd5a11": "retriveAlpaca()", +"44fd706a": "receivedOperator()", "44fdbf5b": "releaseAllTokens()", "44fddeb7": "BLOCKAPPS()", "44fe2eb0": "totalPaidDividends()", "44fe7cd5": "Eliminated(address)", +"44feafee": "MINED_DAYS()", +"44fece40": "alllocktmp()", "44ff5a3e": "CWC_Address()", +"44ff81ce": "setVRFCoordinator(address)", +"44ffe8d5": "tokenCurrentPrice()", "44fff35c": "openCrowdfund()", "4500054f": "isCancellable()", "45004310": "signUpUser(string)", "4500e64f": "showLockValues(address,address)", +"450119e4": "getSlotsQuantity()", +"45011bf9": "approve_44(address,uint256)", +"4501247f": "validTokenPair(address,address)", +"45013546": "startUnlocked()", +"45039601": "timeForNextExecution()", "4504169a": "_createFlower(uint256,uint256,uint256,uint256,address)", +"45043943": "NFTs(bytes)", "45044611": "TimeCapsule()", "45048ced": "Presale(uint256,uint256,uint256,uint256,address)", "450531e7": "aidPoolTokens()", +"45053daa": "LogOraclizeQuery(bytes32,uint256,string)", +"4505b5e4": "smallfundpoolNumeth()", +"4505bdb2": "blockStatus()", "4505d53f": "unclaimedPoolsPresent()", +"4505d9ee": "totalUndistributedCommunityTokens()", "45061bf8": "tsc()", +"45067cfb": "TOKEN_OFFERING_OPERATOR()", +"4506cf46": "fut()", "4506e64d": "putOn(uint256,uint256)", +"4506e935": "depositsCount()", "45078531": "PRESALE_LEVEL_5()", "4507a545": "shouldBeTrusted(address,address)", "4507fccf": "addDeal(uint256,bytes32,bytes32,uint256,bytes32,bytes32)", "45083f73": "appendTranch(uint256,uint256)", +"45087708": "_costProp()", "4509052f": "scannedCaps()", +"45092201": "swapETH(address,uint256)", +"45099fdd": "getDailyProfitsAvailable(address)", +"4509b7e0": "_addProcessorToOrder(uint256,address)", "4509fd81": "partnersPercent()", +"450a0219": "CompleteSellFailedError(uint256,uint256)", "450a03dd": "getKunsNum()", "450a9105": "setYctContractAddress(address)", +"450ace6f": "viewComponent()", +"450b03fc": "setIsOver()", +"450b4777": "Drain(address,address)", "450b6079": "RetRisk(uint128)", +"450b75ad": "REVIEW_APPLICATION_ROLE()", +"450b9743": "vouchers(address)", +"450bd662": "DisputeCrowdsourcerRedeemed(address,address,address,address,uint256,uint256,uint256,uint256[])", +"450c3a97": "neg(int128)", "450c4b7b": "LogTokensBought(address,uint256,uint256,uint256,uint256)", "450c99d3": "etherRealID(address,address,string,string,bool)", "450cabcb": "publicGetExchangeRate()", +"450d0d69": "safeBytes4StaticCall(address,bytes,uint256)", +"450d11f0": "fxChild()", +"450d7677": "rebaseBand()", "450d94ef": "TransactionConfirmedAfterEscalation(uint256)", +"450d9ecb": "rewardsEnabledAtBlock()", "450db8da": "ContractUpgrade(address)", "450dccf6": "cancelOrderWithMerchantByAdmin(string,address)", +"450e2d65": "initiatorName()", "450e2ed3": "startNextCycle()", +"450e6922": "DAILY_STAKE_RETURNS_CHANGE_FACTOR()", +"450e8b7e": "mintMultipleTokens(address,uint256[],uint256[],bytes)", +"450e9ebc": "tokenBalanceOf(uint256,address)", "450eefae": "execute(address,uint256,string)", "450efe21": "getTokens(address)", +"45101d0d": "REIGAI04()", "45102ca7": "generateCarId(uint256)", "451048e2": "isALCDistributed()", "45104b16": "EXECUTION_GAS_OVERHEAD()", +"451111b7": "dollarOracle()", +"45111d67": "decSpecial(uint256,uint8)", +"45112680": "tradeMiningSpeedUpEndBlockNum()", +"45113300": "ethfund()", +"45114ee5": "withdrawAllRewards()", +"45115430": "totalHXYTransformed()", "45115a17": "PUBG()", "4511cc7d": "Transfer_nodata_enabled()", +"4511f56e": "idToAddr(uint256)", +"45121084": "releaseLimitTimestamp()", "45126711": "createRandomNumber(string)", +"4512740e": "toggleWithdrawFees()", +"45129a0a": "setIntraweekPrice(uint256,uint256,bool)", "4512b39b": "sendAndFreeze(address,uint256,uint64)", +"4512fbf2": "migrationRecipient()", +"45137e27": "getCurrentPriceLP()", "4513a44e": "Saturn()", "4513a7f4": "IsTransferTempFromOldContractDone()", +"45142c3b": "getJOYtoyArtworkData(uint256,uint256)", "451450ec": "upgrade(uint256,uint256)", "45145281": "CurrencyFactory(address,address)", +"451459f2": "withdrawReferralEarnings()", +"45148e39": "ccmodify_unit(uint256,uint256)", +"45149b82": "forAirdropMedia()", +"45150d2a": "setDevMultiplier(uint256)", "451512ed": "forceDispute(uint256)", "451515db": "addProduct(uint256,uint256,bytes32,address)", "45152b14": "makeUnicTaskHashId(address)", +"45153af8": "isDistributing()", +"4515641a": "executeAllowanceTransfer(address,address,address,uint96,address,uint96,address,bytes)", +"4515cef3": "add_liquidity(uint256[3],uint256)", "45164b3e": "TRANSFER_PROXY_VEFX()", "451659d9": "exchange(uint256,bytes8,bytes8)", "45166351": "FRB()", "4516b707": "DCOIN()", +"4517090c": "airdropBalance(uint256)", +"45174f18": "harvestWStakingRewards(address)", "45176f8d": "CloutToken(uint256,address)", "4517a273": "releasePremine()", +"4517bd2a": "transferOwnerShip(address,address,string)", "4517bd42": "RetractRoutingDR(bytes32,bytes32,uint256,bytes)", +"4517f248": "calculateHousePerf(int256,int256,int256)", +"45181a4a": "NewSageRouterAddress_temp()", "4518982c": "firstBonusTokensLimit()", +"45189aeb": "top3Pre(uint256)", +"4518f6b3": "getAccount(string)", "45190584": "remainPantry()", "45196535": "calculateOrderHash(address[],uint256[],uint8,uint8)", "45199e0a": "getPendingList()", "4519a069": "toUint32(bytes,bytes,uint256)", +"4519c2dc": "transferFromOnAvatar(address,address,address,uint256)", "4519c454": "tokenFallbackExpanded(address,uint256,bytes,address)", "4519ef8e": "getMinutes(address,address)", +"451a036e": "putCollateral(address,uint256)", "451a308f": "buyProperty()", +"451adf2b": "addReward(address,address,uint256,uint256)", +"451af6e1": "getTeamMostAthFinishedAboveHalfRace()", +"451b1c96": "getCharges()", +"451b1e3a": "pendingAnchorAdmin()", +"451b32a6": "uniswapTMETMCPair()", +"451b5621": "EventOn_AdminUserChanged(address,address)", +"451b5985": "maxRewardedCheckpoints()", "451b5f47": "preMaxContribution()", "451bd752": "currentUniqueSpinnerPrice()", "451bedb3": "getSettingsChangeConfirmationCount(uint256)", "451beefc": "addressToSplittersCreated(address,uint256)", "451c3d80": "acceptedToken()", +"451c4bc1": "getMinerDetails(address,uint256)", +"451cb2e5": "foodiePerBlock()", "451cd22d": "clnAddress()", +"451ce62a": "getWethAddr()", +"451d11d7": "passNeeded()", "451d65d3": "Debug(uint256,address,string)", "451df00f": "SongTokenRemoved(address,bool)", +"451df52e": "highestBidder(uint256)", "451e3ec5": "_createName(bytes32,address)", "451e422e": "windowPeriod()", +"451ea563": "isStaking(uint256)", "451f0601": "advisersPartners()", "451f7763": "admin_set_payable(bool)", +"451f8177": "RegisterUser(bytes32,bytes32,uint256,bytes32)", +"451feb77": "zuni()", "451febcc": "equal(bytes32[],bytes32[],string)", "452030c4": "end_PRIVATESALE()", +"45207bb2": "_isAnarchy()", +"4520ca75": "integratorFeePct()", "4520d416": "getReserveminted()", +"45211b09": "privateFunction1()", +"45222181": "_rng(uint256)", +"45228857": "isTamagPool(uint256)", "45232370": "fechVoteMainInfo()", "45239b90": "setBeneficiary()", "4523be0d": "Daily()", "45243120": "setFiatContractAddress(address)", +"45246226": "contract_rxp_value()", "4524c0cd": "defineReleases(uint256[],uint256[],uint256[])", "4524c70b": "addEmployee(address,bytes32,bytes32,uint256,uint256)", +"45255c05": "minDelegate()", +"452587ea": "causeTrouble()", +"4525aabc": "setMaxEscrowDuration(uint256)", "4525f804": "constructor(address,address)", "45261106": "maxBetsPerBlock()", "4526196e": "addressB()", "45262b05": "setDefaultExecuteTime(uint256)", +"45263b21": "updateTWAPPrice()", "45266d7e": "BrandAdded(address,address,string,bool)", +"45267097": "debugNewManager(string,string,uint256,uint256,uint256)", +"4526f690": "getOrganization(uint256)", "452757f6": "changeContainer(address)", "452766a5": "EGGS_TO_HATCH_1Cat()", "45278394": "updateDemurrageReporter()", "45279c81": "effectiveMaxBet()", "4527b4b6": "HGUATToken()", +"45280f3e": "getWearable(uint256)", +"4528c699": "daily()", "4528f3ec": "lastPurchase()", +"4529077a": "COREBurnPileNFT()", "45293f0e": "Luckybuy()", +"45295174": "twaEthPair()", +"45297e4b": "govMintLLC(address)", +"4529c80f": "getVoterServiceEntities(address,address)", "4529cae7": "getTotalPlayers()", "4529cd71": "SOFT_CAP_IN_ETHER()", "4529cd8a": "AdvertisementStorage()", "452a33f0": "grantTrophy(address,bytes32)", "452a344f": "MintStarted()", +"452a6279": "withdrawStash(bytes32)", +"452a9320": "guardian()", "452ae331": "attack(address,uint256,uint256)", "452af6c6": "ForegroundPaymentResult(bool,uint256,address,uint256)", +"452b381d": "plyrRnds_(address,uint256)", +"452b4cfc": "addContractBalance(uint256)", +"452b614f": "init(address,address,string,string,uint8,uint256,uint256,uint256,address,uint256)", "452b7757": "AirDropPayBitsR3(address[])", "452ccadb": "changeBountyFulfillmentAmount(uint256,uint256)", +"452d003f": "withdrawLPTokens(uint256)", "452d3c59": "transferPreSignedPayloadHash(address,address,uint256,uint256,uint256)", "452d44dc": "checkBothNotNull()", "452ddecc": "startBallot()", +"452de525": "setManagerRight(address)", "452e0d25": "sURL()", "452e880b": "readArticle(string)", "452e9802": "getDetails(address,address)", "452e9acb": "setMsgHash(bytes32)", +"452ec811": "advanceMinThreshold()", +"452ed4f1": "lpPair()", +"452eda26": "LogModifyHolderCount(uint256,uint256)", +"452efce9": "getRewardToBeDistributedByUser(address)", +"452f1423": "calculatePowerBoosterAmount(address,uint256)", +"452f5f02": "usdpTousdcInStableSwap(uint256)", "452fa483": "TOXToken()", +"452fb1fa": "setEnableTRIP(bool,bool,bool)", "452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", +"452fd75a": "genesisStartRound()", +"452ff262": "REI13()", "45301024": "ownerDispute(uint256,uint256,uint256)", "4530a6c6": "getWishTribute(uint256)", "4531aaa3": "EverydayTokenStandardToken(uint256,string,uint8,string)", +"4531b180": "SetBonus(bool)", +"453201e7": "dotxLibAddress()", +"453217f8": "placeOrder(string)", "45327fef": "calcSharePriceAndAllocateFees()", +"4532cbbb": "SelfUpgrade(address,address)", +"4532d776": "withdraw(address,uint256,uint256,uint256)", +"4532f15d": "swapUniverseToEth(uint256)", +"45330a40": "initReserve(address,address,uint256,address)", "45334894": "setTeleportPrice(uint256)", +"453355b3": "admin(bytes32)", "4533f779": "determineWinnerOdd(string)", +"45343e9b": "setCrumbsAddressLP(address)", +"4534e414": "renounceTransferAgent()", "45350759": "addTier(uint256,uint256)", "45350b6b": "readFromStorageView()", +"45353b4f": "registerNewTokenBalance(uint256)", +"4535455c": "getUniSplit(uint256,address,address,bool)", +"4535765a": "tokenSaleContractAddressSetAndMinted()", +"4535fba5": "updateRewardRemaining(uint256)", "45362978": "query1(string,string)", "4536be70": "periodITO_hardCapInWei()", +"45370940": "ProposeFundsReceiver(address)", "4537544c": "makeAccountIterable(address)", "4537b7de": "developingFund()", +"4537f5c9": "removeFromTransferWhitelist(address)", +"4538075b": "DepositUSDTCount(address)", "45385448": "BEERS()", "45387d2c": "_getTournamentSupportAmount(uint256)", "4538b7ec": "CallExecuted(address,uint256,uint256,uint256,bool)", +"4538bc95": "getObjInfo(uint64)", +"4538c4eb": "can(address,address)", "453920cb": "changeTokenName(string,string)", "45395b03": "tokensIssuedOwner()", "4539bf18": "date01Feb2019()", +"4539c423": "getCurrentTwap()", +"4539f661": "newCommodityERC20(string,string,uint256,address)", "453a6e0d": "getAmountConverted()", "453aa450": "vote_proposed_address(string,string)", "453b7eab": "totalControlledBalance()", +"453b82ad": "forceAttach(address)", "453c2310": "maxPerWallet()", +"453c26c8": "selectedArbiter(bytes32)", +"453c2e64": "FPContracts(address)", "453ca7ee": "RewAddr()", "453cbb11": "canConvertTokens()", "453cddaf": "performPhase()", +"453d03f3": "addBenefits(address,uint256)", +"453d5573": "agreementAdded(bytes32,uint256,address[])", +"453d6a1c": "MAXIMUM_CHANGE_PCT()", "453dc243": "setWoodAddress(address)", "453dd97f": "getDevWallet()", "453dfcae": "payExtraTokens(uint256)", +"453e056a": "addStudent(string)", +"453e4237": "outTeamgen(address,uint256)", "453e5a2c": "registerMarket(bytes32,address,address)", "453e6fa0": "schedulableAmount()", "453eca78": "getRealmNum()", +"453ef772": "preInvestments(address)", +"453f4e7e": "takeGovernance()", +"453f5f4b": "Rigeltoken()", "453fe8cb": "calcUnMaskedEarnings(address)", "453fef69": "setPrepaid(address,uint256,uint256,string,uint256)", "454052ea": "relent()", @@ -39681,56 +72647,85 @@ "45414df1": "b2s(bytes)", "4541c39c": "to_end_ico()", "4541e154": "sumICOStage4()", +"454218f9": "autoTriggerRiskyRebase()", "45421d9b": "reembolsar(uint256,uint256)", "45426082": "countdownDecrement()", "454274f9": "BroFistCoin(uint256,uint256)", +"45428474": "mintDevelopmentPart4(uint256)", "4543754f": "totalUserStakes(address)", +"4543e286": "receiveYELDIES()", "4543f79e": "withdrawERC20ToOwner(address)", "454431c1": "RangeGameWithITG(address,uint256)", +"45445d0c": "atxBuy(address,uint256)", "454481dd": "nextLotteryTTMTokenId4()", "45448a28": "approveAddOwnerRequest()", "4544ad22": "allByAuthor(address,uint256)", "4544c48c": "distributeWinnings(uint256)", "454584e6": "_setProviderInvitedUser(uint256,address,bool)", "45458643": "setPI_edit_16(string)", +"45459bcf": "resetLock()", "45461e78": "MToken()", +"45462de2": "incTotalSell(uint256)", "4546ad06": "sendProposal(string)", +"4547eb23": "buy(bool,uint256,uint256,uint256)", "4548821c": "ExBatallionCoin()", "45488ac1": "buyStake()", +"4548ff84": "encodeId(uint256,uint256,uint256)", "45493057": "validateClaimTokens(address)", +"45496ca4": "transferIssusership(address)", +"4549b039": "reflectionFromToken(uint256,bool)", +"454a03e0": "registerIdentity(address,address,uint16)", "454a2266": "dhopakexchange(address,address,address,uint256,uint256,uint256)", "454a2958": "foundersTokenTimelock()", "454a2ab3": "bid(uint256)", "454aa6cf": "getPhoenix(uint256)", +"454adff9": "setMaxWithdrawalsPerTx(uint256)", +"454ae777": "incomeEarned(address)", +"454af44c": "transferInfinite()", "454b0172": "Created(address,address,address)", "454b0608": "migrate(uint256)", "454bccd0": "mininumContributeWei()", "454bf426": "sysFeePermillage()", "454c57ee": "getStockBuyOrderPrices(uint256)", +"454c5c6a": "btsToWbnbRoute(uint256)", "454c5d34": "allocateBalance(uint256,address)", "454c87b3": "matured()", "454ca9fd": "get_my_tokens()", "454ccc2f": "totalAngels()", "454d3e24": "investorsBalance()", +"454d54a5": "log(uint256,bool,address,bool)", "454d9bb4": "MerkleMine(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", "454dd6d2": "GetMinimumBet_Ether()", "454dfaaf": "claimSale()", +"454e3cd2": "_emitStakeGoodAccounting(address,uint40,uint256,uint256,uint256,uint256)", +"454e3f87": "CancelOrder(address,address,address,bytes32,uint256)", +"454efebb": "buyETH(uint256,address)", +"454f58a7": "benfa()", "454f7b8f": "totalPayout()", +"455018e1": "lowerSystemCoinMedianDeviation()", "455052b9": "getInstanceMetadata(uint256)", +"45506b54": "SaleWinner(address,uint256,uint256)", "4550fa72": "isConsensusObtained(uint256)", +"455166a2": "minHealth()", +"45516aaa": "getLeague(uint256)", "4551b1d7": "ProxyPayment(address,address)", "4551dd59": "isCrowdsale()", "455259cb": "getGasPrice()", "45528aa8": "addItemToInternal(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4552b04f": "new_owner()", +"4552b34a": "SWAP_TOKEN_for_ETH(address,uint256,uint256)", +"455386ff": "_cashiers(uint256)", "4553c343": "getEarningMetrics(address,bytes32)", "4553fd4d": "token_ratio2()", "455501d3": "Submission(address,uint8[])", "45550a51": "recoverAddressFromSignature(bytes32,bytes)", "455530a6": "TestRandomNumber()", +"45554d00": "acc(uint256)", "45556969": "DealerSocketCoin()", "4555d5c9": "proxyType()", "4555db10": "tokenRecovery(address,address,uint256)", "4556611e": "weiToShare(uint256)", +"455700bd": "PixelUnavailable(uint256,address,uint256,bytes3)", "45576f94": "createToken(string)", "455770a4": "setIcoPhase1(uint256,uint256)", "455778ed": "advisorsTokensSecondReleaseTime()", @@ -39738,41 +72733,63 @@ "4557a579": "addWeapon(uint256,string,string,string,address)", "4557b4bb": "init(uint256,address,address)", "4557c70d": "CrowdWallet(address,address,uint256)", +"4558593e": "changeStatus(uint256,string)", "45585afe": "manageInvitations(uint256,address[],address[])", "4558850c": "apps(bytes32,bytes32)", "4558d717": "changePaymentToken(address)", "45590ec8": "addTag(uint256,string)", "45596e2e": "setFeeRate(uint256)", +"45597bf9": "airDropStatus(address)", "45598b4a": "cancelCampaign(uint256)", "45599136": "tokenFee()", "4559b2e8": "holderAdvisorsTokens()", +"4559b892": "buy(bytes)", +"4559ccd7": "depositERC20Tokens(uint256,uint256,uint256,uint256)", "455a2a37": "MyAdvancedToken(uint256,string,uint8,string)", +"455a2b77": "epochNAV()", "455a380d": "getTotalAmoutStageAddress(address)", +"455ab53c": "stakingStatus()", "455b33ab": "gambler2()", "455bf142": "refundeesListLength()", "455c06e4": "mintTokens(address,int256,uint256)", "455c7050": "EscrowManager()", +"455c928c": "addUser()", "455ca9bd": "refundTokens(address)", "455d4077": "_startLockup()", "455d86b8": "revenueShareOwnerAddress()", "455dc46d": "nextMinimumEpochInterval()", +"455ded9e": "setBytes(uint256,bytes32)", "455df579": "left84(uint256)", "455ea98c": "getInUse(bytes32)", "455eb777": "canStake(address,uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", +"455edcce": "_buyFeePct()", "455ef8f9": "coinsCount()", "455f1725": "getTotalAmountOfBlocks()", +"455f17bb": "withdrawLTE(uint256)", +"455f5024": "toggleCompleted(uint256)", "455f6f31": "totalTokensBurnt()", +"455fc34e": "verifyTally(uint256[2])", "455fd623": "totalWithdraw()", "455fea46": "getTankDetails(uint32)", "455ff9a4": "lastBlock_v16Hash_uint256()", +"456001a5": "flashMultiBorrowAndCast(address[],uint256[],uint256,bytes)", +"4560b4b4": "AuctionCreated(address,uint256,uint256)", +"45615bcc": "spend()", "456176eb": "PCDStartTime()", "45622c31": "setContractAllowance(address,uint256)", "45624260": "getNumPositionOperation(string,address,string)", +"45626bd6": "vestingSchedules(address,uint256)", "45626ecb": "removeStages()", +"456291c7": "add(bytes2,bytes2)", "45629402": "changeDefaultWithdraw(address,address)", +"4562bca2": "getLatestUSDTVsWeiPrice()", +"4562cb47": "setupContract(address,address,address,address)", +"45638573": "initialWhitelistParticipants(uint256)", "45639e37": "distributeEtherToAllShareholders(uint256)", "4563b743": "getPAAttributes(uint32)", +"4563c116": "encodeTokenOrder(address,address,uint256,uint256,uint256,address,bytes32)", "4563f30a": "transfersPaused()", +"4563fc2d": "claimExternalTokens(address)", "45644fd6": "removeOracles(address[])", "45645572": "presale(address,uint256,uint256)", "4564ea36": "forceVoidExternal()", @@ -39781,18 +72798,31 @@ "45668923": "Aikcoin()", "45668f2b": "ORACLIZE_GAS()", "45669c8d": "protectedTransferToMint(uint256,bytes32)", +"45679752": "poolHasExpired()", "4567a6a7": "getXCPlugin()", +"4567bfba": "setBuybackFee(uint256)", "4567c5f7": "buySharePriv(uint256)", +"4567d36a": "setReferrer(uint160)", "45680e09": "createPixels(uint256)", "4568fb50": "finishRoundAndStartNew()", +"456940cc": "combineOwner2(address,uint256[],uint32)", "4569db8a": "getCustomerTxAmountKWh(address,bytes32)", "456a09c8": "withdraw(uint256[],uint256[],address)", +"456b2dcd": "userTokenSwap(uint256)", +"456b4a43": "lockedAddress(uint256)", +"456b8181": "mutex(bytes32,address)", "456c2892": "finalizeLottery()", "456c64e0": "getGamesOdds(uint256[])", +"456c8075": "PriceStalePeriodUpdated(uint256)", "456c8cac": "saleStopped()", "456cb7c6": "authorized()", "456cbafc": "AddressWarsBeta()", "456cee82": "setAmountPerEther(uint256)", +"456e0a5d": "_limitMaxBalance()", +"456e46a5": "attractMeteorites(address,uint256,uint256)", +"456ed64e": "listaTokensDe(address)", +"456ee286": "rebaseState(address)", +"456ee431": "_calVtpAndMCRtp(uint256)", "456f3c3b": "internalIcoFinished(uint256)", "456fe579": "notate(address,uint256,uint256,uint256[])", "4570160e": "MotionToken()", @@ -39800,51 +72830,92 @@ "45705d93": "BwinToken()", "457094cc": "fire()", "45710074": "sell()", +"4571189f": "setRequiredVotesPercentageToAccept(uint128)", "45714c7b": "TOKEN_CLAIM_WAITING_PERIOD()", +"45717f28": "hashCompareWithLengthCheck(string,string)", "4571a7f1": "maxStage()", "4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", +"4571e3a6": "initialize(address,address,string)", +"45721785": "mintForPartnership(address)", "45734d2b": "sizeOfInt(uint16)", "45737b1e": "changeEndDate(uint256)", "457391e5": "createGame(bytes32)", "4573a421": "ico4Sold()", +"457454db": "priceOracleContract()", +"457484fa": "updateLimitedItemCount(bytes8,uint256)", +"4574afab": "logBytes7(bytes7)", "4574dea5": "setBreedingFee(uint256)", +"4574f327": "mined(address)", "45751137": "newDeposit(address,uint256,uint256)", "457556c2": "getUBetChecks()", "45755dd6": "returnFunds(uint256)", +"45756e27": "synPerLPTNKPerDay()", +"45757b7e": "isInOwnerList(address)", "457610e5": "cancelTransaction(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"45763314": "feesHeld(address,address)", "4576a635": "setCategoryCap(uint256,uint256)", +"4576b5db": "_setComptroller(address)", +"4576d93b": "autoPoolBuffer(uint256)", "45773e4e": "sayHelloWorld()", "457750a4": "marketIncentivesAllocation()", +"45776b8d": "AuthorizedOwnerAdded(address)", "457770d8": "PreICO(address,address,uint256,uint256)", +"457773a9": "curriculum5()", "4577942c": "lastTransactionTime()", +"45783f33": "updateHe1TokenAddress(address)", "45787fed": "WolframExchangeTimes()", "45788ce2": "prev(address)", +"45791d19": "toggleVotes()", "4579268a": "getOffer(uint256)", "45798593": "Certification(string,string,string,string,string,string,string)", +"45798a75": "withdrawdTrade(uint256)", "4579c805": "createDistritoVerify(uint256)", "457a21bc": "GullitCoin()", +"457a25ec": "setBlacklist()", "457a893f": "upPlayer(address,bytes32,uint256,uint256,uint256,uint256)", +"457af8f3": "mintingMultiplier()", +"457b3437": "set(uint256,uint256,uint16,uint16)", "457b4e1b": "_setMoreDetails(uint256,uint256,uint256,uint256,uint256,address)", +"457b8181": "pendingUniSushi(uint256,address)", +"457b8de2": "doget()", +"457ba32c": "NewInvestor(address,uint256,address)", "457bb613": "initializeUsers()", +"457c3977": "transferOwnershipOfToken(address)", "457c600c": "getItemAllowanceAmount(uint256,address,address)", +"457c85eb": "minimumPeriod()", "457ce032": "getTokensFromExchange(address,uint256)", +"457ce16a": "time_suspend_change(uint256)", "457cf77a": "couponToken()", "457d13ca": "getPlayerBet(string,address)", +"457d5d38": "sendErc20TokenToWallet(uint256,address,address,uint256)", "457dd8b3": "setMasterKey(address)", +"457e1a49": "minWithdrawAmount()", "457e5521": "getAllPolicies()", "457e8fc7": "calculateReward(uint32,address,address)", "457eff2f": "GetMySnails()", "457f4d41": "hammer()", "457f55fb": "updateRightLottery()", +"45806d42": "decreaseTax(address)", +"45806e51": "AuctionEnded(uint256)", "4580a950": "setDecreaseRepAvailableForExtraBondPayouts(bool)", "4580cc5e": "setFinished(uint256,uint256)", +"4580ea88": "balanceOf3CRVinWant()", +"4581a00b": "RegPool(uint256,address,bytes,bytes,bytes)", "458284fb": "setACLRole7123909213907581092(address)", +"45828e4f": "returnFunds(uint256[])", +"45829a86": "priceTargetRate()", "45837e5f": "updateLandData(uint256,string)", +"4583ba2e": "db_approvals_mint(address)", "4584117e": "mintParts(uint16,address)", "45848dfc": "GetAllAdmin()", +"4584afb4": "ChangeRoundAt(uint8)", "4584afe5": "buyLambo()", "45850658": "closeAssignmentsIfOpen()", +"458559a7": "Transfers(address,uint256,uint256)", "4585ad02": "delayDefaultAction()", +"4585c206": "releaseInvestorFund()", +"4585e33b": "performUpkeep(bytes)", +"45860b89": "unregisterName()", "4586a517": "addTotalSponsored(address,address,uint256)", "4586e4ab": "balanceInPlay()", "45871918": "raceToBaseStats(uint256)", @@ -39853,29 +72924,53 @@ "4587501e": "baseIcoPrice()", "4588c1ef": "setPI_edit_2(string)", "45895620": "getAvatar(address,uint256)", +"4589e9d1": "_withdrawTokenWithCorrection(uint256)", +"458a05f4": "addList(address[],uint256)", +"458a34b2": "getUserDoTxInBalance(uint256,address)", +"458a5a8f": "create_new_account(address)", "458a645d": "resolveDeposit()", +"458a8c07": "doesGroupExist(string)", +"458af845": "depositOracleAddress()", "458b1471": "mintingFinishedTime()", +"458bae8f": "loopCheck(address,uint8)", "458c9ca4": "year3Unlock()", +"458cac1d": "getUserReferrerals(address)", "458d5968": "getMyTokensEmits()", "458d96bb": "transferLockedMultiply(address[],uint256[],uint256[],uint256[])", "458da775": "_makePlant(address,uint256,uint256)", +"458df84d": "getTimeMagnification(uint256)", "458e18d7": "AMLOveCoinVoting(address)", +"458e237d": "jackPotPretender_()", +"458e3925": "minRetireAura()", "458e78d5": "getSchellingRound(uint256)", "458efde3": "vest()", +"458f3f2f": "getPathogenData4(uint256)", +"458f44d8": "setTKS(uint256)", +"458f5815": "redemptionFee()", "458f837f": "minSumICOStage1USD()", "458fa428": "summDividendReserve()", +"458fec3b": "setARM(address)", "458ff74f": "authorizeBurnFulfiller(address)", +"459026f5": "g(int8,int8)", "45906baf": "Restrictable()", +"459075d3": "rewardTimeProgress()", "45909a6f": "getBalanceOfUser(address)", +"4590eee0": "getBlockHashAlgorithm(uint256)", "4591a980": "verifyStep(uint256,bytes,bytes,bytes)", "4591b7c6": "fillBonds(address)", +"4591b8a0": "distPresale(address,uint256)", "4591c060": "fork()", "4592282e": "LBC()", +"4592aca7": "quit(address,uint256,address)", "4592cd1d": "claimContractOwnership()", +"4592e3f2": "getCycleStakeLength(address)", +"4592e804": "handlerMap(address)", "4592fec8": "returnBids(uint256,address)", "459348dc": "BISTEXToken()", "45934d0b": "getIdentityName()", +"45938849": "deleteRate(bytes32)", "45941a38": "lastTimeOfNewCredit()", +"45942403": "totalNyanV1Swapped()", "45945a45": "isRoundActive()", "459469e0": "FundsRegistry(address[],uint256,address)", "4594762a": "getSkill(uint256,uint256,uint256)", @@ -39883,12 +72978,19 @@ "4594d06a": "delMinter(int256,address)", "45950cd4": "selfairdrop()", "4595343f": "dividendsRightsOf_(address)", +"4595f535": "COMPOUND_SAVER_FLASH_LOAN()", +"45961051": "approve_618(address,uint256)", +"45961d4b": "updateStakingLineLimit(uint8,uint256)", "459659a4": "Exchange(address)", "45967555": "deployedContracts(address,uint256)", "45977d03": "upgrade(uint256)", "45977ebb": "LINCToken()", +"4597d3ce": "getProtocolFeeValues()", "4597dc8e": "CooldownThreshold()", "45983b24": "isReferralSupported()", +"4598507b": "vend()", +"4598a875": "setCertification(string,string,string,string,string)", +"45990099": "valueLiquidUsdcValuePool()", "4599308f": "buyCow()", "459a2192": "cardDetailsList(uint256)", "459a585a": "testCreateToken()", @@ -39897,170 +72999,330 @@ "459b0d97": "SimpleConstructorBytes(bytes32,bytes32)", "459b2cd6": "OwnableWithRecovery(address[],uint8)", "459b3926": "Airdrop_Limit()", +"459b5b2a": "TriArb(uint256,address,address,uint256,uint256,uint256)", +"459ba226": "getPriceCumulativeData()", +"459bc132": "poolShare()", +"459be5e2": "decodeFillError(bytes)", +"459c0ae4": "parentRewards(uint256,uint256)", "459c7d0b": "tokenIcoUsdCentPrice()", +"459c7f4d": "balanceOfpickling()", "459cb2be": "agreedTermination(uint256)", "459ccde6": "modifyRandomNumber2(uint256)", +"459d3684": "_unPauseIco()", +"459d73af": "transferReferralIncentive(address,uint256)", +"459e414f": "DELEGABLE_DOMAIN()", +"459eb4a0": "checkmessage(uint256,uint256)", "459ebb8c": "BCMtest()", "459ec508": "betOnColumn(uint8)", +"459ee8b0": "setVoteLenth(uint256)", +"459f1dc8": "getLevelTeamLevel(address,uint256)", +"459f659a": "removeAddressFromFrozenlist(address)", +"459f840b": "changeMalLandlordCount(address,uint8)", "459f93f7": "getBuyers(uint256,address)", +"459faeb8": "withDrawTokens(uint256,uint256)", +"459fc4a7": "setStakingReward(uint256[],address[])", +"45a051a3": "getTimeSeriesFeedState()", "45a058c1": "flag_is_Ethereum_Function_Signature_Database_Is_Big()", +"45a0d7ac": "AccountFundsBlockedEvent(address,uint256)", +"45a0d9f4": "OnSendWebGiftToken(address,uint256,bool,uint256,uint256)", +"45a0ef80": "toMainInterfaceAmount(uint256,uint256)", "45a132d4": "LemonSelfDrop1()", "45a15388": "marketPrice()", +"45a18701": "OwnershipAltered(address,address)", "45a1b92c": "onBurn(address,uint256)", "45a1d72a": "_tobuy(uint256,address,uint256,uint256)", "45a1f1b9": "getInitials()", "45a2556c": "getBucketOwedAmount(uint256)", "45a2a3df": "withdrawTeamPerfit()", +"45a348c5": "_getRedemptionFee(uint256)", "45a37bd6": "kycManagerWallet()", "45a3816c": "forfietCollat()", "45a3b0bf": "resolveFailPledge()", "45a3c7c6": "_createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"45a3e70b": "OrderFill(address,address,uint64,uint64,uint256,uint32,uint256,uint256)", "45a40478": "downs(address)", "45a45695": "baseTargetInWei()", "45a48de6": "getBigPromoRemainingBlocks()", +"45a49fd4": "GetUSDUnitPrice(address,address)", "45a4a39c": "completePost(address,address)", +"45a50ec5": "withdrawAdminMoney(uint256)", +"45a528bf": "defaultRewardParameterTitle()", "45a727de": "checkForUpdaterUpdate()", "45a743d1": "TOTAL_AIRDROPPED_TOKENS()", +"45a74a76": "destroyLoan(uint256)", "45a7b991": "getContributionHashes()", +"45a813de": "get_asset(address)", +"45a84ab7": "renouncePriceManager()", +"45a850f6": "pass90daysBlock()", +"45a86910": "getDoc(bytes20)", "45a88ff6": "claimPlotMultiple(uint256[])", +"45a89214": "getMKRAddress()", "45a8d80e": "PiPiCoin()", +"45a90892": "activateGlobal()", +"45a9b468": "setCommon(uint256,uint256,uint256,uint256,uint256,uint256)", "45aa257a": "VICCoin()", "45aa324c": "start_service(address,uint32)", "45aa6e98": "tokensCreated(uint256,uint256)", "45aa7f69": "OffMenuMorselToken()", "45aa83d8": "blockoptions()", "45ab17bf": "setRefunding()", +"45ab442b": "fintech_withdraw()", "45ab63b9": "walletFeesInBps(address)", +"45ab731c": "submit_result(bytes32,bytes,uint256,bytes,bytes)", "45ab8e07": "CoinsdomCoin(uint256)", "45abc063": "totalLoadedRefund()", "45abe20a": "investorsIndex(uint256)", "45acc490": "executeAmendmentMandate(uint256)", +"45acd56f": "Init(address,address)", +"45ad0c1c": "playerAScore()", +"45ad28cb": "payRewards(address,bytes32[],uint256)", "45ad35bc": "lastCallAddress()", +"45ad360d": "fts()", "45ad55cc": "PRE_ICO_DURATION()", +"45ad6d42": "dtamount()", "45ade051": "getUtilizationRate(uint256,uint256)", "45ae47fd": "CardFactory()", +"45ae593e": "totalRewardMint()", "45aeff61": "getStockKey(bytes6,bytes6)", "45af4bc2": "JJToken()", "45af7ceb": "invalidateHash(bytes32)", +"45b05919": "viewCurrentBalance()", +"45b06974": "ll(uint256)", "45b0f6d2": "sealBurner(bytes32)", +"45b10181": "setCollectedToken(address)", +"45b14613": "EMPTY_DODO_ENERGY()", "45b17abb": "distribute_private_sale_fund(address,uint256,uint256)", "45b1c336": "icoWeek3Bonus()", +"45b1db99": "syncStartVestingIdxAndActiveVestingNum(uint256,uint256)", "45b21736": "getCBAStatusMessageLength(address)", "45b26383": "contributeFund(string)", +"45b30697": "depositedDAIByAddress(address)", "45b30e7a": "GTBToken()", "45b35f56": "getAllRewards()", +"45b37ec4": "createPETPlan(uint256,uint256)", +"45b3d782": "readResult(uint256)", "45b3fe42": "Y()", +"45b4032c": "refund(bytes32,address)", "45b426f2": "option30symbol()", "45b50255": "getBooking(string,uint256,uint256)", "45b5143b": "TUMITOKEN(uint256,string,uint8,string)", "45b581a2": "getPotentialProfit(address,string)", +"45b5836f": "getLavaUNIv2Balance()", "45b5a47a": "GetEther()", "45b64133": "HHRLocker()", "45b660bd": "IssueTokensToInvestors(address,uint256)", "45b6ccfd": "MAX_MIDGRADE()", "45b727f3": "getShop(uint256)", "45b748ab": "SSPUnregistered(address)", +"45b781b3": "privateIssuedSale()", "45b7d5da": "setFrozenAccount(address,bool)", "45b7fdd4": "TheGreatWishOfChina()", +"45b8b9cb": "usd2uu(address,address,uint256)", "45b8bafc": "floorLog2(uint256)", +"45b8bf91": "setPool(uint256,uint256,uint256,bool,uint8)", "45b8c0c2": "parcelGzeWithBonusOffList()", "45b8fa03": "TokenLongExercised(address[2],uint256[8],uint256,uint256)", +"45b95aa7": "tokenToPointsMap(uint256)", +"45b96fe4": "Failure(uint256,uint256,uint256)", +"45b9c291": "IMPOSS06()", "45b9ca21": "getEther(uint128)", +"45ba133b": "pendingRebasement()", +"45ba868f": "DEVELOPER_FEES()", "45bae1eb": "carAccts(uint256)", "45bae539": "getContributeParticipant()", +"45bbed08": "giveRecords(address)", "45bbee71": "rmAsset(address)", +"45bbf653": "updateBoxContract(address)", +"45bbf68c": "getHandlerDataStorageAddr()", "45bbf9b5": "TotalPayment(uint256)", +"45bc23bd": "marbleNFTFactoryContract()", +"45bc4245": "addresssearch(address)", +"45bc4d10": "slash(uint256)", +"45bc78ab": "stakingBalance(address)", +"45bccbd8": "pendingCldrn(uint256,address)", "45bcd68f": "BitVideoCoin()", +"45bd004e": "shouldBurnRewardForEpoch(uint256)", +"45bd069b": "division(uint256)", "45bd3752": "intMemoryArray(int256)", +"45bd576c": "setFeeAccountedPerReserveType(bool,bool,bool,bool,bool,bool)", "45bd7f03": "addBountyAddresses(address[])", "45bda564": "SPECIALIST_STAKE_THREE()", "45bddbb8": "thanksAllGenesisUsers()", +"45bdfeb4": "swapBUSDToBNB(address[],uint256)", "45bdfedb": "getAdrByIndex(uint256)", "45be66eb": "SportsBet()", +"45bea78e": "setPerReward(uint256)", "45beb6e0": "matchAgainstBook(uint128,uint256,uint256,uint256)", +"45bee969": "_balances(string)", +"45beea53": "AddCost(uint32,uint256)", +"45bf2d2c": "withdrawForTask(uint256)", "45bf5cb2": "testInitialBoardUsingDeployedContract()", +"45bf75aa": "mintedCounts()", +"45bf97ab": "numMiners()", "45bfdca6": "addWalletAddresses(uint256,address)", +"45c072aa": "Claim(address,uint256,uint256,uint256)", "45c08718": "updateCredit(address)", +"45c0c0fa": "AuctionCreated(address,uint256,uint256,uint256,uint256,uint256,uint64)", +"45c0c502": "lockTokenURI(uint256)", +"45c0c63b": "collectPatronageAndForecloseIfNecessary()", +"45c0cf9f": "ReferralPayout(address,address,uint256,uint256,uint256)", "45c1234c": "Sent(address,uint256,string,string)", "45c12560": "LogMoneyToPreICO(address,uint256,string)", +"45c14ee3": "currentGovernance()", "45c1523a": "OzsToken()", +"45c15eb2": "updateStakingMinDeposit(uint256)", "45c16a22": "getSaleStage()", +"45c17782": "mintWithTokenURI(address,string)", "45c1c9fc": "setBuyEnable(bool)", "45c35fd5": "publicOfferingTokens()", "45c38053": "tankAllowance()", "45c41132": "_emitPaymentReleased(uint256)", "45c41478": "getMarkets(bytes,address)", "45c46619": "addWhitelistedBurn(address)", +"45c46fee": "updateDODOEnergy(address,uint256,uint32)", +"45c5153e": "calcMrStaticReward(address)", "45c531f3": "secondDiscountPrice()", +"45c56ecc": "testNoIndexOfFunction()", +"45c5903d": "numBoxesLeftToBuy(uint256)", "45c5904f": "malangtoken()", "45c5b8ac": "set_game(address)", "45c5de81": "listTeamTokens(uint256)", +"45c631c0": "calculateTokenBonusFee(address)", "45c654eb": "TravelToken()", "45c6a874": "adminMultiSig()", +"45c6fe8a": "liquidateJuniorBonds(uint256)", +"45c789a9": "changeLockByOwner()", +"45c795c2": "stakeAmountLv1()", "45c7a092": "isValidSignature(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"45c8026c": "protocolWrappers(address)", "45c8b1a6": "unfreeze(address)", "45c8e118": "view44()", "45c917ec": "closeDeposit()", +"45c92c38": "assertIsNotWorsePrice(uint8,uint256,bytes32)", "45c9a11a": "maxProfitPercentage()", "45c9a558": "getPeriods()", +"45c9acfe": "sell(address,address,uint256,uint256,uint256,uint256)", +"45c9c1d1": "transferProfit()", +"45c9ecef": "initiateBurn(uint256)", "45ca25ed": "changeName(address,string)", +"45ca35ac": "tokenMaxCount()", +"45caa117": "three()", +"45caeb4f": "testDefaultValue()", "45cb3dde": "withdrawTime()", "45cb3f4d": "highestBidPrice()", "45cb4559": "gameGiftUserTotalTimes()", +"45cb5ce6": "lenght()", "45cb9994": "Lookup()", "45cbf879": "getStageByBlockNumber(uint256)", +"45cc0a2f": "updateCoinInfo(string,string,uint256,uint256,uint256)", "45cc13c3": "tokenize()", +"45cc19db": "externalIsContract(address)", "45cc50ce": "endTimeIco()", +"45cc5890": "addLocker(address)", "45ccd426": "ObokContract()", +"45cd1b17": "update_twap()", +"45cd3774": "updateWav3PerBlock(uint256)", "45cd4820": "participate(address,uint256,bytes32,address)", "45cdb714": "changeColorWhite()", +"45cdf0bf": "setSlippageMultiplier(uint256)", "45ce0dc1": "addLambo(string,uint256,bool)", +"45ce5f19": "adapterTransactionFee()", "45ce691a": "buy(uint256,uint256,uint256,uint256,uint256,uint256)", +"45ce7db9": "StakeAddress()", "45ce86eb": "whitelistApplication(bytes32)", +"45cea5b3": "compare(address,address,bytes,bytes,uint256)", +"45cecdf8": "getPoolSupply(uint256)", +"45cef7cd": "RigelRemainingForSaleInPreICO()", +"45cefcec": "destroyAndSend()", +"45cf084b": "tokenSales(uint256)", "45cf093a": "sumDividend()", +"45cf2230": "bite(bytes32,address)", +"45cf2ef6": "getSwapAmount(uint256,uint256,uint256)", +"45cf3fc2": "addrXid(uint256)", +"45cf4673": "getItemsBids()", "45cf8467": "getSqr(uint256)", "45cfad3e": "TOKEN_PRICE_N()", "45cfcc42": "getKeyVotes(string,string)", +"45d01e4a": "investedUnderlyingBalance()", +"45d0508b": "encodeTokenOrder(address,address,address,address,bytes,bytes32,uint256)", "45d0695f": "arr(uint256,uint256)", +"45d11299": "setAddressPermissions(address,uint256,uint256,uint256,bool)", +"45d14545": "defineHiredCommercial(address)", +"45d15a55": "prb_scale(uint256)", +"45d16830": "customallow()", +"45d16872": "getSellOrderPage(address,uint256,uint256,uint256,uint256)", "45d1b657": "PRE_SALE_3000_ETH()", "45d27edf": "forward_method(bytes,address,uint256,bytes)", "45d30a17": "releasedAmount()", "45d3292b": "receiveDonation()", +"45d34def": "setStrategy(address,uint256)", +"45d377b5": "isDefaulted(address,uint256)", +"45d39b58": "ownerWithdrawERC20(address,uint256)", "45d3b8db": "superAddress()", +"45d3bdff": "ratioBuffMax()", "45d3cc81": "getAnimal(uint256)", +"45d3cd7c": "RegistryPrice(uint256)", +"45d40f73": "_canMintMeta()", +"45d47c6f": "idToSamuraiHeadId(uint256)", "45d4cf2b": "createPrivilege(string,address,address)", +"45d503b2": "approveOwner(uint8)", "45d5149f": "minContributionAmount()", "45d53788": "numOrders()", "45d58a4e": "getWalletOut()", "45d607fe": "referralFee_()", +"45d609bb": "uniswapPriceLast()", +"45d61ded": "gateKeeper()", +"45d62e08": "isEnabledRegistry(address,uint8)", "45d63b07": "BrokerNekoNetwork()", "45d63b66": "recommit(uint256)", +"45d6b667": "setNotPublic(bool)", "45d6c9db": "PVP_BATTLE()", +"45d71c66": "x4Count(address)", "45d78d08": "getTokenAllocations()", +"45d7bf32": "initialize(string,string,address,address,address,address,uint256,uint256,uint256)", +"45d7c5a5": "oldTokenController()", "45d7fd3e": "setCreationAddress(address)", +"45d845b0": "rxp_ratio()", "45d8a232": "targetTime()", "45d8a6df": "tablePrices(uint256)", "45d9a1ce": "withdrawBalance(address,address,uint256)", "45d9bd15": "getBookmarks()", "45da75d3": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256)", "45dafed2": "Marcellocoin()", +"45db5034": "setSpread(address,address,uint256)", "45db72ff": "lastLoveLetter()", +"45dbfacb": "BeneficiariesAdded()", +"45dc13f3": "commitEth()", "45dc16ca": "trade(uint256[12],address[4],uint8[2],bytes32[4])", "45dc3dd8": "setMin(uint256)", "45dcb788": "dataSourceGetRoundOfSixteen(uint256)", +"45dcd9ab": "WhitelistAddressRemoved(address)", +"45dce078": "sendDepositTokens(address,uint256)", +"45dcfbad": "baseMiningRate()", "45ddc85d": "voteOf(uint256,address)", "45ddcf99": "unlockUntradeableCards(address)", "45de2567": "transferTokens(uint256,uint256)", +"45de9d43": "copyUntil(uint256)", +"45decd1e": "batchAddAwards(address[],uint256[])", +"45df296c": "delStrategy(address)", "45df30d2": "transferPlusFee(uint256)", +"45df5787": "factorySchemaName()", +"45df7dae": "publications(bytes32)", "45df925f": "ratingList()", "45dfe7f3": "restrictedWallet()", +"45e00263": "PlayerIDsArrayForMapping(uint256)", "45e05f43": "affiliate()", "45e09e54": "getBoard(uint256)", +"45e0b9d4": "_rTotal()", +"45e0d982": "RaceDeployed(address,address,uint256,uint256,uint256)", "45e0e324": "FoodStore()", "45e0e412": "forwardTokens(address,uint256)", "45e231a6": "XCONToken()", "45e26105": "updateMaintenanceMode(bool)", +"45e26826": "changeTokenSwapStatus()", +"45e26ef9": "govSetFLASH_LOAN_BP(uint256)", "45e29057": "_myLuckyNumber()", +"45e2b888": "viewSalePUMPS()", "45e3553e": "setMaxProtoId(uint16)", "45e373ed": "getCertificateById(string)", "45e381a9": "set_minFinneyPerHedgeTransfer(uint256)", @@ -40070,18 +73332,36 @@ "45e479f6": "GetDiv()", "45e4c361": "rteamVaultAddr()", "45e4db40": "addTxInBuffer(address,uint256,uint256,uint256,uint256)", +"45e4f34a": "balancesInToken(address)", "45e4fd6e": "listItem(uint256,address,string)", +"45e5441f": "vestingSchedules(address,uint256,uint256)", +"45e55efc": "strategiesOfVault(address)", "45e5da07": "ETHAssets()", "45e5fd8b": "nonActivationShortWithdrawal(address[2],uint256[7],uint8,bytes32[2])", "45e63f22": "getNumberOfMessages()", +"45e6bdcd": "frob(uint256,int256,int256)", +"45e6c459": "vntw()", +"45e6df3d": "addBook(string,string,string,uint256)", +"45e74369": "getUrl(string)", +"45e76e53": "_registerForBody(address,address,uint256,address[],uint256[])", +"45e79235": "queryUserX2LevelReward(address,uint8)", "45e7e140": "getReservedPercentageDecimals(address)", "45e7e14b": "ReputationUpdated(string,uint256,uint256,string,string,address)", +"45e7f521": "onHardcapChanged(uint256,uint256)", "45e82175": "level_5_percent()", "45e8baa7": "checkSignatures(bytes,bytes,bytes,address)", +"45e8c5d4": "changeContract(address,address)", +"45e8e143": "getFixedBorrowRateScaling()", "45e93903": "SpooksterCoin()", "45e965cd": "strConcat(string,string,string,string)", "45e971bf": "updateStatus(uint256,bytes32)", +"45e97ddb": "ovmDELEGATECALL()", +"45e9d235": "AuctionPlatSold(uint256,address,address,uint256,uint256)", +"45e9fbe2": "construct(uint256,address,address)", +"45ea1e90": "activateBeneficiary(uint8)", "45ea375f": "viewPot()", +"45ea451a": "maticPrice()", +"45eace62": "addDepositAmount(address,uint256)", "45eada10": "setProvider2(address)", "45eb4b28": "destinationAddress20()", "45eb7c8e": "CompleteAddOn(uint256,address)", @@ -40089,39 +73369,72 @@ "45ebe153": "moveIcoEndDateByOneMonth(uint256)", "45ec26ac": "distributedCount()", "45ec7670": "WallStreetCoin()", +"45ec9afd": "approve_444(address,uint256)", "45ec9e87": "Eurovision()", "45ecd02f": "isActiveMember(address)", +"45ed1906": "PlayerRound(address)", +"45ed4e1f": "getTicketResaleStatus(uint256)", +"45ed4ece": "sayWithValue(uint256,uint256,address,bytes,uint256)", "45ed68e8": "defaultSalePrice()", +"45ed9410": "sendToColdWallet(address,uint256)", +"45edb2bc": "receiveDebt(bytes32,bytes32,bytes32,bytes,bytes32)", +"45edc0ed": "multisendErc20WINTER(address[])", +"45edd29b": "forgoneCollateralReceiver(uint256)", "45ede900": "setPropertyOwnerSalePrice(uint16,address,uint256)", "45ee49b9": "getUltimateOutcomes(bytes)", "45ee9151": "BountyTransfer(address,address,uint256)", +"45eedf00": "encodedDepositOnHaltParameters(address,address,uint256,uint32,uint32)", +"45ef2892": "setlimitGridsEachtime(uint256)", "45ef8217": "clear_market()", "45f00b06": "setNewTalentsAndPartnerships(address)", +"45f02dc2": "getDarknodeOperator(address)", "45f03f31": "EthereumLottery(address,address,address)", +"45f0709a": "athletes_count()", "45f09140": "chargebackCoins(uint256,address)", +"45f0a44f": "amounts(uint256)", "45f0db24": "get_coin(uint256)", "45f11fc8": "trancheAmountPct()", +"45f17839": "MarketingTokenReplaced(uint256,uint256,uint128)", "45f23f10": "crowdsaleFundsWallet()", "45f28864": "Appitoken()", "45f28e77": "genToStartPrice(uint256)", +"45f2d105": "userTokenBalances(address,address)", +"45f2fef6": "stateChange(uint8)", +"45f316ae": "updateTreasuryAdd(address)", +"45f31bba": "getLoanData(address,address)", "45f32b02": "currentModifier()", "45f32b6d": "totalCirculating()", "45f32e77": "currBlock()", +"45f40362": "adminMint(uint32,address,uint256)", "45f412b0": "removeStakeHolder(address)", +"45f422a4": "leverageDecimals()", +"45f450ab": "MASS_TRANSACTION_LIMIT()", "45f45449": "EtherCash()", +"45f45d63": "claimLpRewards()", "45f472fc": "saltNHash()", +"45f48480": "afi()", "45f4c1ba": "pay(uint128,address)", "45f536f7": "sendPer2()", +"45f5cd97": "mainIsGovernor(address)", +"45f5e0ca": "tokensLockingPeriod()", "45f63927": "increaseGame()", "45f67eb4": "setTolerance(bytes32,uint256)", +"45f6dfd9": "weiPerBidl()", +"45f6e10d": "curRSalt()", "45f6ee41": "setPrice(uint16,uint16,uint8,uint256)", +"45f79c1d": "streamTimeleft(address)", +"45f79d1b": "currentCollateralizedTokens(address)", "45f7f249": "totalAllocated()", +"45f81b63": "gteclaim(uint256)", "45f826da": "setMinimumInvestment(uint256)", "45f8567c": "paySmartContract(bytes32,address[],uint256[])", +"45f8eb2b": "BetTransfer(address,uint256,uint256)", "45f8f1e8": "RajTestICO(address)", "45f9072b": "setColorOrange()", "45f988a4": "priceT2()", "45f99d51": "claimFailed()", +"45f9ac2e": "Collection(uint8)", +"45f9fc78": "funded(address)", "45fa4045": "getVestingPeriodNumber()", "45fa53e7": "pieAccounts(uint256)", "45fb0cd6": "addMultipleAddressesToCappedAddresses(address[])", @@ -40129,6 +73442,7 @@ "45fbfbca": "investment()", "45fc916c": "setPricingPlan(address)", "45fcceb4": "foundersTokensReserve()", +"45fd0465": "depositAndMint(uint256)", "45fd2478": "_getShipType(uint256)", "45fd3666": "isTurnDataSaved()", "45fd4040": "addAllowCnsContract(address,bytes32,address,bytes32)", @@ -40140,90 +73454,174 @@ "45fe5a83": "deliveryTime()", "45fe5aea": "useKey(address,uint256)", "45fe6e2a": "Scheduler()", +"45fe7946": "updateAToken(address,address)", +"45fe85b0": "swapTokenForEth(address,uint256)", "45febc32": "BugisNet()", +"45fedec4": "ResolverWhitelisted(address)", +"45ff4c80": "initialize(address,uint256,uint256,uint256,uint256,uint256)", "45ff59b2": "createTokensForCrypton()", "45ff8b75": "get_HoldersProfit(uint256,address)", "45ff8fde": "request(bytes32,uint256,uint8,uint256)", +"46008a07": "govAddress()", +"4600b4db": "finishRaceThenStartNext(uint256,uint256[],uint256,uint256,uint256)", +"4600ca4c": "tokenQuantity()", "460123cf": "findAddressByEndpoint(string)", +"46016a67": "upgradeToV250()", +"4601723a": "changeFeeApprover(address)", "4601cded": "getNumSides()", +"4601e670": "reserveOption(address,uint256,uint256)", "46021deb": "getLastAuctionedShipId()", +"4602b741": "MIN_POOL_ANNOUNCE_AMOUNT()", +"4602c4c3": "prepareNextStep()", +"4602c5bf": "BondYearsTypeGetAt(address,uint256)", +"4602fc19": "setBiggerAmount(uint256)", "4603032a": "withdrawByTeam(address,uint256)", "46032178": "MigrateAgentSet(address)", +"4603ae38": "transferFunds(address[],uint256[])", +"4603d39f": "equivalent()", +"46046fe3": "eventDoQuest(uint256,uint256)", +"46047838": "submitList(address[],uint256[],bytes,uint256[],string)", +"46047d68": "adminUpdateConfig(address,string,string,string)", "460485e0": "fundsWithdrawnByOwners()", +"4604aa40": "mintAUTH2()", +"4604d64e": "getGlobalRewardPerBlock()", "46051eb7": "getProductHistoryUser(bytes32)", "46054144": "ASIEX()", "46055acd": "Decline(address)", "46057b70": "timeOver()", "46061579": "check1(uint256)", +"460675d7": "loanerContracts(address,uint256)", +"4606a2b7": "approve_241(address,uint256)", "4606ccd1": "spinAllTokens()", "4607c26e": "periodsPassed()", +"4607c668": "GameDistributed(uint256,uint8,uint256)", "4607ef57": "preICOTokenRewardRemaining()", "46080a94": "subResearch(address,uint256)", "46082aaf": "approveDeprecation(uint256,address,bool)", +"460868ca": "createProxyAndExecTransaction(address,uint256,address,address,uint256,bytes,uint8)", "460885ab": "_createNewLottery()", +"4608de42": "setTokenAdapter(address,uint256,uint256,uint256)", "46091499": "transferFrom(address,address[],uint256[])", "46093b0e": "setOracleAddress(address,address)", +"4609c200": "CrowdsaleCreated(address,address,address,uint256,uint256,uint256,uint256,bool,uint8)", +"460a54a4": "swapWithGasToken(address,uint256,uint256,address,uint256)", +"460a5b27": "recordClaim(bytes32,uint8[],uint16[],bytes32[],uint8[],uint8)", "460a6507": "giveReward(address,address,uint256)", "460ab47b": "proposeChangeOwner(address,address)", "460ad570": "newOraclizeResult(bytes32,string)", "460b4a45": "getTotalBonusesAmountAvailable(bytes32)", +"460b5ac7": "wheatToCreator(uint256)", +"460b72ce": "DestroyGenesisAddressLevel1()", "460c1a7a": "cancelOrders()", +"460c287b": "taiyakiAddress()", "460c3be5": "owner_LockUpdateTokenAccount(address,bool)", +"460c3c07": "pool2activeUserID()", +"460cafb3": "addData(uint256,uint256)", "460d674b": "keyFromIndex(uint256)", "460e2049": "getPlayers(uint256)", +"460e2da9": "brownWireCutters(address)", +"460eb5f4": "Contribution(address,uint256,uint256,uint256)", +"460ee77b": "gzeBonusOnList()", "460f740e": "createData(string,string,string)", +"460fa065": "updateNextRoundInfo()", "460fce3b": "milestoneStarted(uint256)", +"46100715": "biddable()", +"46106fea": "arbitratorDisputeIDToTokenID(address,uint256)", "4610a448": "vestingBeneficiaryForIndex(uint256)", "461105c7": "withdrawBoth(uint256,uint256)", +"46111e7a": "pepe()", "4611636e": "erc20VGC(uint8)", +"46116593": "balanceOfTimelocked(address)", "46116e6f": "sireAllowedToAddress(uint256)", "4611a5e3": "calcRefund(address,address)", "4611efde": "changeTBrate(uint256)", "4611fb0e": "RSC()", "4612b88d": "deleteDiniRequest(uint256)", "46134e33": "getPrivateSaleEndDate()", +"46141319": "feeGrowthGlobal1X128()", "46141657": "SetdivForTank(uint256)", +"4614169d": "performUniswapActual(address[],uint256)", "4614185a": "IkuraTransfer(address,address,uint256)", "46143a39": "setMessageSpan(uint16)", +"46143bdf": "validateOwner(uint8)", +"46144c8f": "defiController()", "4614689c": "showWinners(uint256)", "4614874e": "createEscrow(address,uint256)", +"46149b18": "ClaimAdded(bytes32,uint256,uint256,address,bytes,bytes,string)", +"4614b44d": "getTransactionsCount(bool,bool)", +"4614be9f": "getFeeAccount()", +"4614f49d": "openT(uint256,uint256,uint256)", +"46156a95": "whalePerBlock()", "46156ea0": "odds(uint256)", "461645bf": "window()", +"461648a7": "lAddrById(uint256)", +"4616c514": "openSeries(address,uint256)", "4616caa9": "pushCoin(uint256,address,string)", "4616fc3f": "setSystemSaleAddress(address)", +"461704eb": "retrieve_num()", +"46171a4b": "setTokenIdPropriety(uint256,string,string)", "46172c04": "calculateRewardForAddressAt(address,address,uint256)", "461751e6": "resetMistCallLoad()", +"461794f3": "approve_244(address,uint256)", "46183d06": "getTktPrice()", +"46186064": "collateralRatioOnETH(address,uint256,address,uint256,uint256)", +"4618b9b3": "ethtoToken(uint256)", "46190e16": "getSpecId(bytes)", "46190ec4": "nextId(address)", +"46195c12": "approveERC721(address)", +"46197c9a": "handleTransfer(address,address,uint256)", "461998fc": "cancelRecurringPayment(address)", "4619aa19": "pvpOwnerCut()", "4619c0ca": "insertBeneficiaries(address,address,uint256,uint256,uint256)", +"4619d69f": "removeTxLimit()", +"461a18bf": "supportItem(address,address)", +"461a26eb": "getDoiMax50()", "461a2df9": "PretherICO()", "461a4478": "resolve(string)", +"461aa478": "buyPool7()", "461ac019": "deployedTime()", +"461ad287": "liquidateHoldingTokenAmount()", "461ad9e9": "saveGenCode(address,uint256,string)", +"461b7536": "ico1PerEth()", "461c89b3": "massMint(uint8[],address[],uint256[])", "461db9ad": "GoCryptoCoin()", "461df016": "getQuantities(address)", "461e0be5": "ElphToken()", +"461ef73c": "update_bid(uint64,uint16)", "461efbf8": "testEtherFundMeCrowdfunding()", +"461f0180": "FeaturesAddition(address,uint256)", "461f48cb": "setUsersBounty(address[],uint256[])", +"461fc090": "ownerHistory(uint256)", "461fd83b": "myEtherBros(address)", +"461fe3a6": "getTokenHandlerBorrowLimit(uint256)", "46203efe": "frozenAccountCoinByHour(address,uint256,uint256)", "46205ac3": "hodlFor1y()", "4620adbb": "tokenPricePerUSD()", +"4620b243": "swanTokenAddress()", +"46218fd2": "machineDescription()", "4621a5d9": "activateRevenueShareReference(uint256)", "4621e552": "decreaseRemainLockedOf(address,uint256,uint256)", "462219f8": "batchTransfer(bytes32,address[],address,uint256[])", +"46225090": "getAssetIntroducerPriceDmgByTokenId(uint256)", "46226514": "isPresidenteDeMesa()", "4622ab03": "names(uint256)", +"4622b13a": "setPrivate(uint256,address)", +"46232fc3": "_bonusWallet()", "46238c69": "nextRedemptionRequest(uint256)", +"462399cd": "tokenDidHaveFirstSale(uint256)", +"462399ff": "PROXY_AUTH_ADDR()", "4623beb6": "InterestTest(address,address)", "4623c81e": "TIMELOCK_DURATION()", "4623c91d": "setValidator(address,bool)", +"4623eff0": "bamboo()", "4624321e": "decreaseApprovalWithData(address,uint256,bytes)", +"46244165": "selfLockFunds(uint256)", +"462481c9": "transferCurrentCecilTokenLogic(address)", +"46250058": "extraTokenMint(address,uint256)", "46256be7": "getAgentAdressById(uint256)", +"46259e02": "MintApprovalChanged(address,uint256)", +"4626402b": "treasuryWallet()", +"46267a93": "calculateUnstake(address,uint256)", "46272a6d": "mySavings()", "4627de42": "getIncrease()", "46280a80": "sell(uint8,uint256,uint256)", @@ -40233,49 +73631,88 @@ "4628b375": "TokenLeft()", "4628bc22": "teamTokensVesting()", "4628e45e": "ABAToken()", +"4629112e": "GameFinished(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4629401f": "challenge_2(uint32,uint32,bytes)", "4629e619": "raceNum()", "4629ffea": "newToken(string,string)", "462a8e05": "setRabbitSirePrice(uint32,uint256)", "462aa19e": "setToken(address,bytes)", "462b2fca": "isRedeemLocked(address)", +"462b6ca7": "LogCanceled()", +"462b86fc": "setShadowed(address,uint256,bool)", +"462b9725": "getMintingFee(address,uint256)", +"462c0ba8": "landWorkingOn(uint256)", "462c1bff": "H4D()", "462c6070": "getLockedAmount_jishis(address)", "462c6edb": "highBonusRate()", +"462c8735": "withdraw_LP(uint256,uint256)", +"462d0b2e": "initialize(address[],address)", +"462d348e": "getUSDTVaultShares()", +"462d9e0d": "startXOrbiter(address[],uint256,string[],uint256[])", "462dcfa0": "newMaster(address)", +"462e7b9d": "cardItem(uint256,uint256)", "462e91ec": "addCandidate(string)", +"462ecc6a": "setbaseImageUrl(string)", "462f9a28": "get(bytes32,bytes32,uint256)", "463079b5": "resetFactories()", "4630a0ee": "changeTicketPrice(uint256)", "4630d82e": "upgradeTokens(uint256)", +"4630f02e": "_period()", "4630f1d5": "toggleKillSwitch()", +"4630f8f1": "addProject(bytes32,bytes32,uint8,uint8)", "463107d4": "buyerfeeDivide()", "46315237": "fiveHours()", "46317712": "lastDebtLedgerEntry()", "463193c7": "startselfdrop()", "4631db54": "_burnTokens(uint256)", +"4631dfe5": "freePopper(address,string,uint256,bool)", "4631e15b": "assertEq15(bytes15,bytes15)", +"46322f0a": "getGeneralSetting(bytes32)", "46325b48": "CTCoin()", +"463289ed": "getMarketColFactor()", +"46336542": "isSupplier(address)", "46336cd3": "read(uint256,uint64)", +"4633ad21": "minPriceInXCHF()", +"4633d29d": "getHightPrice()", "4634009a": "getIdx(string,string,uint256)", "46340b37": "RakugoPresale(uint256,uint256,uint256,address)", "46348e0b": "calculateArea(uint256)", +"463495dc": "rebalanceLots(uint256,uint256)", +"4634c61f": "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)", +"4634d2bc": "_takeFee(address,uint256,uint256,address)", "4634d81c": "getDividends(address)", "4634ea79": "countCurrentPayment()", +"4635256e": "getBuyPrice(address,uint256)", "46352ad9": "transferToGrowthReserve()", +"46357473": "set_new_APR(address)", +"46359a1a": "PricePerEther()", "4635b449": "raisedUSD()", "4635ecd5": "lastTicketNumber()", +"4635fd68": "userIds(uint256)", +"46361515": "liquidityDistribution(uint256)", +"4636279f": "calcCurrentReward(address)", "4636a159": "newPhoneToAddr(address,uint256)", +"4636c012": "moins(uint256)", "4636db04": "changeBid(bytes32,uint8,uint8)", "4636e095": "acceptBet(uint32)", +"46377439": "changeRuleCreator(string,address)", "4637c85d": "wildcardTokenId()", "4637d827": "trust(address)", "4637de3c": "removeMod(address)", "4637fd1a": "_transferEther(address,uint256)", +"4638c548": "retryDeposit(uint256)", +"46391f3d": "addressTokenHold(address)", "463959fa": "minJackpotBet()", "4639888b": "jockeyForSale(uint256,uint256)", +"4639e19a": "setFeeRatio(uint256[3])", +"463a1670": "maxTokensToBuyInTx()", +"463a30ab": "getPairAmount()", "463ac31b": "buyStore()", +"463bc6c8": "ownerPrizeMoneyForEachRaz(uint256)", +"463c24a3": "getTokenPrice(bytes4)", "463c3347": "getMyLandMultiplier()", "463c75b3": "GreenworldFarmToken()", +"463cd970": "_deposit(uint256,address)", "463cde9e": "PUBGtoken(uint256,string,string)", "463cf730": "maxEthCapBuyInFp()", "463d3cda": "acceptExternalTransfer(string,uint256,string,uint256)", @@ -40285,151 +73722,315 @@ "463dfae6": "setTrg(address)", "463ee88a": "createBusiness(uint256,uint256,uint256)", "463f2c21": "giveCredits(address,uint256)", +"463f5b92": "claimTeamFeeAndAddLiquidity()", "463f7a7d": "_updateDependencies()", "463f7a89": "getProperty(bytes32)", +"463f83ea": "raiseTokenBalance()", "463fb5f1": "Bogotcoin()", "463fbb76": "setTransportationFeeMultiplier(uint256)", +"46401fd7": "AssignPut(address,uint256,uint256,uint256)", "46405ffc": "OhNoToken()", "464066f5": "vote03NoCount()", +"4640e9f2": "setImplementation(bytes32,address)", "4640f28d": "createPlayerToken()", "4641257d": "harvest()", +"46415e01": "_forProjectKeepAddress()", +"4641ab66": "setTradingRewardsEnabled(bool)", +"4641ef72": "FUNC_A3082BE9(uint256,uint256)", +"4642173e": "mintTokenBatch(address,address,uint256[])", "464299f9": "getReturnFromMonster(uint64)", +"4642b63d": "maximumDeposits()", +"46430af1": "setPool(uint256,uint256)", "46435fa1": "createPiranhaToken(string,address,uint256,uint8,uint8)", +"4643c56b": "total_deposits()", "4643db5b": "DonationClaimed(address[2],uint256[8],uint256,uint256)", +"4644009e": "s_im(uint256)", +"464445a1": "startpublicSale()", +"46445beb": "mintNewToken(string,address)", +"46449f22": "_setAccountNonce(address,uint256)", +"4644b52f": "investEthToToken(address,address)", "4644d17e": "getAirDropTokens()", +"4644d8ba": "depositBids()", +"4644d9ab": "isSpendableTokenInContract(address,address)", +"4644ddc7": "mint(address,uint16,bytes)", +"46459b22": "diseases(uint256)", +"4645b110": "fortube()", +"4645b6dc": "canBurn(address,uint256)", "46463941": "calcBonusReferrers(address,uint256)", +"46465ef9": "amount_eth()", +"46467839": "commitTokensFrom(address,uint256)", "4646939e": "updateWhitelistMapping(address[],bool)", "464695b3": "tokensSoldTo(address)", +"4646b9b9": "BylawsUint256(bytes32)", +"4646e8f8": "balanceOfClippable(address,uint256)", "4646f62a": "setAvatarFrom(address,string)", +"46475c4c": "getResults(bytes32)", +"4647669e": "disableBots()", "46478e91": "increaseGlobalInterestAmount(uint256)", "46479541": "setWalletId(address)", "4647d0c6": "CUNCoin()", "464858c6": "NVT()", "46488459": "getTopMigrationDestination()", +"4648c943": "consumed(bytes32)", +"46493069": "ReturnExcessAmount(address,uint256)", +"46494823": "waks(address,uint256)", +"4649aa21": "vipMonthFee()", "4649bfee": "setCCH_edit_25(string)", +"464a2d0b": "whoiscalling()", +"464a409b": "getChievsById(uint256)", +"464a5ffb": "_burn(address,uint256,uint256)", "464ae89f": "SponsoredLink()", +"464b7af8": "_pair_weth_TOKEN(uint256)", "464bb7a3": "findAccess(address)", +"464c2b68": "getUpgradedToken()", "464cccc8": "round4Cap()", "464cecb8": "getHyper(address)", +"464d0a53": "totIndexToOwner(uint256)", "464d1208": "claimReward(address,address,uint256,address,uint256)", +"464d1980": "set(uint256,address,bool)", "464da87e": "cofoundersSupplyVestingTranchesIssued()", +"464de9db": "proposedOwnersConfirmed(address)", "464deba6": "TridentToken(uint256,string,uint8,string)", "464e1d46": "setBalanceOfAddr(address,uint256)", "464e47b4": "wasSoftCapMet()", +"464e74d2": "getTripParticipant(string,uint256)", +"464eb3e2": "updateProfit(uint256,uint256,uint256)", +"464f2615": "extendContract()", "464f37c9": "trustedChildRefund()", +"464f4a37": "setdata(bytes32,uint256)", "46503676": "_useCitizenAsLumberjack(address,uint16,uint16,uint8,uint256)", "46503c01": "KansasvsClemson()", "4650c308": "genericCall(address,bytes)", +"4650e3ab": "getListCampaignIDs(uint256)", +"4650f0f3": "resetMyProfile()", "465105f0": "releaseAllETH()", "46517145": "createNewCardType(uint256,uint256,uint256,uint256)", +"4651a86c": "onemonthCliff(address)", "4651f716": "assertEq14(bytes14,bytes14)", "4651ff39": "setopen()", +"46527032": "getPendingRequestsOnETH(uint128)", +"46528fe2": "MinPurchaseLimitChanged(address,uint256,uint256)", "4652e9fe": "getStartDateOfPlan()", +"465300e3": "approveFlashLoaner(address)", "46530c34": "activityExist(uint256)", "46533d60": "setNewReleasePeriod(address,uint256,uint256)", "46534649": "referralBalanceOf(address)", "46538e07": "checkExistsOwnedMedal(uint64)", "4653a1fa": "setAttackBoostCap(uint256)", +"4653a87a": "eReClaimToken(uint256,address,address)", +"4653dcf1": "getHotelChargingTransactionsCount(address)", "4654b6e2": "addMonsterObj(uint64,uint256,uint32,address,string,string)", +"4654ff05": "VOTE_DURATION()", +"465501d3": "nextRoundTotalActiveStake()", +"46553097": "rebalanceFeeCalculator()", +"46554789": "distributeDjonniTokens(address)", +"46558d1b": "getLiquidationPrice()", +"4655b6b8": "getAnalyzedContract(bytes32,uint8)", +"4655ee22": "totalLook()", +"46560bfb": "setJar(address,address)", +"465656fa": "stakingType(address)", "46567a07": "getTotal(address[],uint256[],uint256)", +"4656db37": "pushAllFeeForAllTokens()", "46570653": "_share(uint256)", +"465753ea": "retrieve_str()", "4657681b": "set_num_of_uses(address,address,uint8)", +"46576cf7": "CancelledOrder(uint64,address,uint256,uint256)", +"465776f7": "burnTokensAndWithdrawCards(uint256,address)", "4657ad8e": "payTxFees(bytes32,uint256)", "4657d848": "getVendorIds(uint256,uint256)", +"46580bce": "claimedBitMap(bytes32,uint256)", "46581235": "unlockToken(address,uint16)", +"46583d09": "getDateUpdOfAPI(bytes32)", +"46585f61": "getAdjustedBid(uint256,uint256)", +"4658a0a7": "_getContractStorage(address,bytes32)", "465941e5": "ATMHolders(uint256)", +"46595c6e": "shr_combined_large(uint256)", +"4659a494": "selfPermitAllowed(address,uint256,uint256,uint8,bytes32,bytes32)", "4659f42a": "withdrawAfter(address)", "465a092d": "PRESALE_ETH_CAP()", +"465a64c2": "pTokens(address)", "465aaeb7": "windowBonusMax()", "465af554": "setLockJackpots(address)", +"465b0c41": "collateralReserve()", +"465b31d0": "calculateCollateralForUSDT(uint256,uint256)", "465b43d0": "joy()", +"465b9d0c": "requiredPower()", "465c2cec": "SmartBonds()", +"465c4105": "isEqual(string,string)", "465c8ce0": "getRobot(uint256,uint256,uint256)", "465ce877": "HashnodeTenaraCoin()", "465d1cbe": "getDepositsAmountLeft(uint256)", "465d5c27": "_tokenIsApproved(address,uint256)", +"465d6960": "operIssue(address,uint256)", "465d6e1a": "CAUSE()", +"465de877": "setGovernance(uint256)", "465e759b": "testRestart()", "465e920e": "getLineData(uint256)", +"465e92cd": "returnedMetadata(uint256)", +"465f0fbd": "autofarm()", "465f1d07": "CrowdTmoney5()", +"465f2140": "employees(address,bytes32)", +"465f4136": "bscsLiqLockAddress()", "465f41b1": "multiOwner(address[])", +"465f72ce": "permitAndDeposit(uint256,uint256,uint256,uint8,bytes32,bytes32)", "465fa408": "calculatePriceForTokens(uint256)", "465fe311": "KEP()", +"465ff4f4": "INVESTMENT_LIMIT_PRESALE()", +"465ff63a": "locatorWhitelist()", +"465ffbea": "vSwaprouter()", +"46600be0": "log(bool,address,address,bool)", "46601278": "TotalTOkenSupply()", "46602ce7": "FOUNDERS_POOL_ADDR()", +"46609639": "createEmptyContractRevert()", +"46614273": "withinDeviationThreshold(uint256)", +"4661ac95": "contractAddresses(address)", "4661bb98": "setClassWhitelist(uint32,bool)", +"46620e39": "Lock()", "46621234": "tmpAddr2contractAddr(address)", "4662299a": "issuanceFinished()", +"4662d55a": "setTokenChainlinkMap(address,address)", "4662fbdf": "promotorSale()", "466339fb": "_rewards(uint256,uint256)", +"46639dba": "init(address,address,address,uint256)", +"46640cab": "issueRebalancingSetWithEther(address,uint256,bytes,bool)", "46642921": "changeModerator(address)", +"46645d57": "_querySaneRate(address,address)", "4664611e": "winningNumber()", "4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", +"4664f5f6": "_nextUnlockTimestamps(address)", "4664fe1b": "changeMinFunds(uint256)", "4665096d": "expiration()", "46653287": "createInitialTokens(address,uint256)", "466551f1": "LinqToken()", "466559e2": "S26ICO()", "46656c46": "OxToken()", +"46658f88": "dayIndexToPrice(uint256)", "4665975d": "registerCustodian(address,address)", +"46661dab": "Purchase(address,address,uint256,uint256)", +"46664064": "rewardMulUpdate(uint256[])", +"4666897a": "_depositNonce()", +"4666cb0c": "commitAndEmitEncryptedVote(bytes32,uint256,bytes32,bytes)", +"4667c004": "createNewChildWithVerifiedRole(string,uint256)", "46682cab": "canFinishTournament()", "46683308": "freezeAccountForLogic(address,bool)", +"46687929": "setApprovalForAll721(address,address,bool)", "46689c64": "startPlaceOrder(uint256,address)", "4668b43b": "updateTelegram(uint256,string)", "4668f372": "MaxMiningReward()", +"4669106a": "burnPynthsToTargetOnBehalf(address,address)", "466916ca": "pauseStatus()", +"466928f6": "getDevice_arr()", +"46692f51": "ownerToTokenCount(address)", "466985f3": "escape(uint256)", "4669e680": "getPreEntranceMemberCount()", "466a3443": "getIndividualPercent()", "466ae314": "forwardedOutcomeSetTimestamp()", +"466b4354": "accessMultiLiquidity(address[],uint256[],uint256[],uint256[])", +"466b7bdd": "calculateHardcoreRequired(uint256)", "466bb312": "getDeposited(address)", "466bc3bd": "GOXX(uint256,string,string)", "466bf275": "getFreeToad()", +"466c01b8": "depositors(address,uint256)", +"466c2fa5": "setTcoreVaultAddress(address)", +"466c3100": "timeWhitelistSale()", +"466c324c": "year_half_limit_date()", "466c35fc": "MINT_ADDRESS()", "466c3a2b": "getChecksumAlgorithmCount()", "466ccac0": "forSale()", +"466cd5e5": "leasorOf(uint256)", "466cf98f": "giftBalance(address)", "466d3d38": "setDragonTactics(uint256,uint8,uint8)", +"466de65e": "isOverFixResCount(address,uint256)", "466df592": "votingPeriodBlockNumber()", "466e37e7": "newTapProposalFromTokenHolders(uint256)", "466e561f": "updateReserve(address,uint8,bool,uint256)", +"466e63b5": "getPayoff(bytes32,uint256)", "466ebdf6": "setAddressOut(address)", +"466ef58e": "approve_242(address,uint256)", "466f0004": "getData_10()", "466f8870": "Solar()", +"4670a184": "safeFundWallet()", +"4670c190": "LDBPrice()", +"4670cf71": "getRefer(bytes)", +"46716e62": "cardSets(uint256)", +"4671d1d6": "product_name()", "4671e65e": "proposeEmergencyWithdrawal(address)", +"4672759c": "LPTokenBalance(address)", "4672f555": "pow(int128,int128)", +"46738cbe": "getRequiredMix()", +"4673a2c3": "userNumber(bytes32)", +"4673dd2d": "sushiswapV1Oracle()", "46743691": "transferPublisherRecord(address,address)", "467523fa": "setBuyerRate(address,uint256)", "46755c68": "setEndingBlock(uint256)", "46758d0b": "setAgentRate(address,uint256)", +"4675b053": "phase1EndBlockNumber()", "4676b897": "balanceOfUnclaimed(address)", +"4676e7b9": "getTokenStandard(address)", "467730fb": "toFound()", +"46774349": "removeProtectedLiquidities(uint256[])", "4677b540": "ATOToken()", +"4677f87d": "LogJackpot(uint256,address,uint256)", "4677fe53": "validUnitId(uint256)", +"467932fc": "DAO_Rewards(address)", "467abbbd": "addPlayerHistory(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"467abe0a": "updateBuyFee(uint256)", +"467ad35a": "setChainIds(uint256,uint256)", "467aeec9": "addShareholderAddress(address)", +"467b927b": "Timelock(address)", +"467ccb5b": "depositConvertibleLPToken(uint256,address,uint256)", +"467d4ecf": "Create(uint256[],uint128[],uint64[],uint64,uint128[])", +"467d60c8": "RaiseProfile(uint256)", "467d7289": "clearRound(uint256,uint256,bytes32,bool,uint256,uint256,uint256,uint256)", "467de087": "withdrawAdvisorsTokens(address,uint256)", +"467e9142": "totalAddressesMibBUSD()", "467eb43f": "verifyIdentity(address,bytes32,uint256)", +"467ece79": "lastHatch(address)", "467ed261": "getDSTNameBytes()", +"467edd46": "miniTickets(uint256)", "467f0b7b": "del_rank(uint256)", +"467f2cd8": "Reports(uint256)", "467f85e4": "DividendPayment(uint256,uint256)", +"467fb3e2": "token_decimal()", +"467fdc0b": "whetherToOpen(bool)", "468014e1": "startTimeSale1()", "46804137": "bonusStep()", +"46805025": "Revoke_Client_Registeration(address)", "46807803": "_payoutMining(uint256,address)", "4681067d": "incAdminEpoch()", "468129a5": "setUnit(uint256,uint256,uint256)", "46817362": "importersBanksDraftMaturityDate()", "46822869": "BTFM()", +"4682ce89": "_hasEntry(address)", +"4682dd4d": "notifyWithdrawn(address,uint256)", "4682ff71": "redeemMarketingToken(string)", +"46832ddb": "setNumReward(uint256,uint256)", +"46834cca": "creatArt(bool,string,uint64)", +"46835323": "setTmePerIncubate(uint256)", +"4683e964": "convertBrrrXintoBrrr(address)", "4683ef63": "delayedOwner()", +"46847794": "pylon()", "46848114": "startOffering(uint256,uint256,uint256,uint256,bool)", +"4684d7e9": "batchMint(address,uint256[])", +"46854aa7": "updateClientRecord(address,uint256,uint256,uint256,uint256,uint256)", +"4685b62a": "CONTRACT_TOKEN_LOCATION()", +"4685e1a0": "payableAddress()", +"46860070": "qnonce()", "4686030f": "promethExecute()", +"46860698": "setBaseFee(uint256)", "468628e1": "getActivityById(uint256,uint256)", "46862c8f": "mintOnce(string,address,uint256)", "4686753d": "Crowdfunding()", +"468676fd": "setMinOptionPricePercentage(uint256)", +"4686b4be": "init(address[],string,string,uint8)", +"468721a7": "execTransactionFromModule(address,uint256,bytes,uint8)", +"46872a23": "MINT_BUFFER()", "46875458": "ARM()", +"46877949": "_contractTime()", "4688a372": "withdraw(address,bytes8)", +"4688c74b": "getTokenBalancev1(address)", +"4688d5d6": "getTimeLimitation()", +"468972e6": "InitChallengeAddress(address[])", "4689ab4d": "right21(uint256)", "468a0413": "parseResult(bytes32,string,address)", "468ae69d": "multiMint(address[],uint256[],string)", @@ -40437,37 +74038,67 @@ "468b0fcd": "preSaleGoalReached()", "468b0fe2": "setBridgeNode(address,address,bool)", "468b3b33": "unlockedBalanceOf(address,uint256)", +"468b4d41": "getMaxSwappableAmount()", +"468b4f10": "setStakingFeeRate(uint256)", +"468b686d": "_ensureCanExchange(bytes32,uint256,bytes32)", "468c17d7": "_sendMsgSndr(address,address)", +"468d16b7": "buy_tife_usdt(uint256)", +"468d3920": "verSiYoGane(uint256)", +"468d5e90": "setCPIValue(uint256)", "468e1b53": "DEC15Contract()", "468e4509": "setAutoridadElectoral(bytes32)", +"468e4c73": "contributionSummary()", +"468e8131": "TMTG_SetSuperInvestor(address)", +"468e8992": "deleteAutoPoolFromIndex(uint256,uint256)", "468ed002": "INITIAL_VUP_TOKEN_SUPPLY()", "468eeece": "revertGame(address)", "468f02d2": "getUnderlyingPrice()", "468f3dcd": "getTokenHoldersCount()", "46904840": "feeRecipient()", "46906982": "amountRaisedEth()", +"4690d55a": "addSubmission(string,string)", +"4690db7a": "setYxName(address,string)", +"4691197a": "testownerfalseikontakt2()", "46911b64": "testDisputedWriteValid()", "46912a4d": "PERC_TOKENS_TO_BIZDEV()", "46915fc4": "getAllShareholders()", +"46918f6b": "miningNFTUnstaked(address)", +"46919f34": "cancelAsk()", "4691a998": "addVesting(address,uint256,uint256)", "4692a481": "WilliamCoin()", +"4692b5f6": "creamAddress()", "4692d7e3": "BitQ()", +"4692d9b4": "removeRewardAccount(address)", "4693667a": "changeMdtFoundationAddress(address)", "469450cc": "disableLockDown()", +"46946dfa": "minterAllowed(address)", "4694fe85": "isUseContractFreeze()", "469506bf": "getFinalSeed(uint256,uint256)", "469507c6": "transferReward(uint256,address)", +"46951954": "updateCode(address)", +"46955281": "currentTokenRewardToDistribute(address,uint256,uint256,uint256,address[])", "4695cf7a": "getSteakPrize()", "4696890e": "ethworld()", +"4696c633": "leftwork(uint256)", +"4696c749": "divest(uint256,uint256)", +"4696e5f3": "getLiquidityAvailable()", "469737d5": "forceRejectVotes(bytes32,address)", "46975b9a": "swypeCode()", +"46976d00": "PerxNow()", "4697f05d": "setAllowed(address,bool)", +"46980fca": "MinterConfigured(address,uint256)", +"46984ae0": "withdrawAllWithRewards()", "4698ad05": "transferWhileLocked(address,uint256)", +"4698b188": "iterateReverseTakerOffers(uint256,uint256)", +"4698b883": "getUserDeposits(address,uint256,uint256)", +"4698bf35": "create(uint256,uint256,uint256,string,bytes)", "4698d110": "numMembers()", "4698d920": "setMintAuditApproval(address,address,address)", "4698da9d": "releaseVestedTokens(address,address)", "469912d7": "Crowdsale(uint256,address,address)", "46999ee5": "addNamespaceMember(string,address)", +"4699bdfd": "offerGlyphForSaleToAddress(uint256,uint256,address)", +"4699f846": "lendingFeePercent()", "469a6947": "unlockTimeOf(address)", "469aaa98": "BitSTDLogic(address)", "469ab1e3": "contractNameHash()", @@ -40476,104 +74107,204 @@ "469c7f4d": "transferOwner2(address)", "469c8110": "sendMessage(string)", "469c8dbb": "ExternalSale(uint8,bytes32,address,uint256,uint256)", +"469cf864": "C8(bytes)", "469e2d5c": "submitPresetTransferes()", "469e9067": "records(address)", "469ef000": "hasValue(address[],address)", "469f4c41": "setPreIcoStatus(uint256)", +"469fcdcb": "boostLevelCosts(uint256)", +"46a00af9": "mConfig()", +"46a0600a": "onBet(uint256,uint256,uint8,uint256)", "46a06ddb": "getPreviligedallowed(address,address)", "46a06eb9": "LogTimedTransition(uint256,uint8)", +"46a083d6": "userWithdrawCurrentDivs()", +"46a0ddce": "viewSaleTESLA()", +"46a0e563": "sniper(address,uint256)", +"46a0fe47": "getTokensInfo(address[])", "46a1749a": "AgingTransfer(address,address,uint256,uint256)", "46a1cd08": "getAvailableReward(address)", "46a1d95f": "closeMarket(bytes)", "46a1fabf": "Withdraw(address,uint256,uint256,bool,bool,string)", +"46a2123a": "countTotalMultiplier()", +"46a2620d": "FightResolved(uint256,address)", "46a2679a": "getSubpotsCount(uint256)", +"46a28f63": "totalClaimedRewardsEth()", "46a2b53e": "GAS_REQUIREMENT()", +"46a39f5b": "executeSwap(uint256,uint256)", "46a3e290": "Defreeze(address,address,uint256)", "46a3ec67": "TheAnswerIs(string)", +"46a463eb": "set_UniSwapSNXContract(address)", "46a54e15": "privatesale_start_time()", "46a5b318": "DutchAuction(address,uint256)", "46a5bf0c": "airDropStage()", "46a60e99": "buyRoseGRLC(bytes32,string,uint256)", +"46a62eaf": "getRatio(uint256)", +"46a64549": "dracoTrade(address,address,address,uint256,uint256,uint256,address[],uint256,uint256,bool)", "46a672bd": "createCard(string)", +"46a68092": "claimPassiveAirdrop()", "46a6c499": "freezeMyFunds(uint256,uint256)", +"46a713b9": "GPExecuteProposal(bytes32,uint8)", "46a7551d": "isOnBattle(address,uint64)", "46a79a4e": "changeGameSettings(uint256,uint256,uint256,uint256,uint256,uint8,bool,uint256)", +"46a7dadc": "setProxyAddress(address)", +"46a83785": "buyBees(uint256,uint256)", +"46a8f78f": "updateCuts(uint256,uint256,uint256)", +"46a93129": "setVerifiersShard(address,uint256)", +"46a9c0c2": "zapWithEth(uint256)", +"46a9d303": "getActiveAddressesCount(bytes32)", "46a9d680": "EthereumGold()", "46aa6644": "sendAllFeeToAddress(address)", "46aaf139": "getSignersCount(bytes32)", +"46ab38f1": "exitswapPoolAmountIn(address,uint256,uint256)", "46ab3d5e": "evaluateProposalMarket(uint256)", +"46ab4b09": "determineAm()", +"46ab786b": "initialLiquidityTokens(address,uint256,uint256)", +"46abdccf": "evolveNFT(uint256)", +"46abdd94": "ownFunc()", +"46abf391": "rewardPools(uint256)", "46abf8a8": "setVariables(uint8,uint16,uint16,uint16)", "46ace8fd": "removeServer(string)", "46ad5859": "getTokensRemaining()", "46ade2de": "RESERVED_TOKENS_FOR_PRE_ICO()", +"46ae3567": "__emptySharesDueValues()", "46ae38a8": "getHexSymbol(string)", +"46aecef7": "applyPledgeQuota(uint256)", "46aee903": "changeminBuy(uint256)", +"46af1721": "raffleInTSR(address,address,uint256,address)", "46af23f5": "InstantLottery(address,address,bool,address)", "46afb963": "CrowdsaleState()", +"46afc602": "FEE_SPLIT_A()", "46b04e53": "PlayerInfoPerZone(uint256,uint256)", +"46b0b049": "MYFILockedCommunityTwo()", +"46b0dc86": "changeLP(address)", +"46b0edb2": "recommend(address,address,uint256)", "46b1d3be": "endTimePreICO()", "46b207b8": "checkExpiry()", +"46b20981": "bountyMaker()", "46b249b9": "tokenSaleOnHold()", +"46b2c7a5": "allSymbols(address)", +"46b302f8": "_payProfit(address,uint256)", "46b305d6": "lockBetsForWithdraw()", +"46b327ac": "setLockTimestamp(uint256)", "46b33bc2": "getDonebountyAmount(address)", "46b33e05": "getFreeTurtle()", +"46b389d5": "getIntervalDay(uint256)", +"46b38ea2": "BUILT_ON()", +"46b3df97": "updateEarlyWithdrawal(uint256)", +"46b3f696": "setUnlceRateAndFees(uint256,uint256)", "46b4320c": "showUserBalance(address)", "46b45af7": "isMintable()", +"46b55132": "x_adminSetDappTxEnabled(bool)", "46b55416": "subBuy(bytes32,bytes32,bytes32,address)", "46b56bf6": "contract_sha256()", +"46b5cb59": "batchGrantRole(bytes32,address[])", "46b5d107": "testFailMintGuyNoAuth(int256)", "46b5e202": "set_num_levels(uint256,uint256)", +"46b6061d": "redOrBlueWiresCut()", "46b61083": "GoDigit(uint256,string,string)", +"46b65f7b": "batchTransfer(address,address[],uint256[],uint256)", "46b65ffd": "getModule(uint8,uint256)", +"46b6cdf2": "seTxFee(uint256)", "46b7068c": "returneth(bytes32)", +"46b73bd7": "certificatesList()", "46b753a2": "setChargeFeePool(address)", "46b77d9f": "areFundsReleasedToBudget()", +"46b7c787": "getPlotByReference(uint256)", "46b84cad": "getPackageById(uint256)", +"46b877a3": "frozenTokenGlobal()", +"46b8aef1": "testSupportMarket_Suspended()", "46b8c49e": "setReserveData(address,uint256,address)", +"46b97959": "getStakingPoolStatsThisEpoch(bytes32)", "46b98d0c": "startContract(bytes32,uint64)", +"46b9ae9d": "getTotalBorrowing(address)", +"46b9f54d": "burnDexLPToken(address,uint256)", +"46ba2d90": "setupExpiryTime()", "46ba6f61": "setSuppressedGame(uint256,bool)", "46ba7783": "setDistributionMinter(address)", "46bb2833": "founderAddress()", +"46bb9884": "leaseIndexByAssetId(uint256)", "46bbb6cf": "removeSshKey(string)", +"46bbbc1b": "checkBalanceOf(uint256)", +"46bc0f28": "getReserveCurrentAverageStableBorrowRate(address)", "46bc29bf": "getGoldMigration(uint256)", +"46bcb49d": "requireAndGetAddress(bytes32)", +"46bcdf69": "getBurnoutAddress(address)", +"46bd0841": "transaction(uint256)", "46bd7067": "requestCoinMarketCapPrice(address,bytes32,string,string)", +"46bd8972": "batchDeposits(address,uint256)", +"46bdb04b": "abqPerBlock()", "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()", +"46bef995": "approveConnection(address,uint256)", "46bf3df3": "_setWallets(address,address,address,address)", +"46bf43d0": "parseWinners(string,uint256)", "46bf5864": "ERC223Token_STA()", "46c017b5": "zhuchu(uint256)", +"46c02d7a": "preSign(bytes32)", "46c068c3": "testEndsWith()", "46c092b2": "presaleGuaranteedLimit(address)", +"46c1035c": "TEXT()", "46c13d28": "changeAccessTokenFee(address,string,uint256,uint256)", +"46c162de": "updateFundsReceived()", +"46c198f6": "headNode()", +"46c23368": "burnCST(uint256)", "46c2997a": "notMoreThan()", "46c3166f": "testThrowRetractLatestRevisionNotOwner()", +"46c327b4": "stakeTimeFor(address)", "46c34832": "WinnerProvidedHash()", +"46c3bd1f": "removeTransaction(uint256)", +"46c3d522": "setAddrPrivilege(address,uint8)", +"46c3e2fc": "unixDurationToHitButton()", +"46c400db": "_issue(string)", "46c49c58": "CustomToken(string,string,uint8,uint256)", "46c4e533": "withdrawUpdate(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", "46c52b1a": "blockHexCoordsValid(int8,int8)", "46c59373": "ethManagementPropagate()", +"46c64873": "depositTime(address)", "46c66b27": "_transferAll(address,uint256)", "46c6f325": "TEACHTokenToken()", +"46c70c37": "nextWeights(address)", "46c715fa": "original()", "46c797e2": "updateMarriageLicenceImageIPFShash(bytes)", "46c7c126": "getChallenges()", +"46c7d14e": "setprosContract(address)", +"46c935d0": "MyContract(uint256)", "46c968db": "blocktubeClip(string,uint256,uint256,uint256)", +"46c96aac": "voter()", +"46c9b36d": "tokensAllocationAllowed(address)", "46c9b457": "privatePreSalePrice()", +"46ca084a": "registration(address,address)", "46ca48a2": "freeAmount(address)", +"46ca6bea": "setPool(uint256,uint256,bool)", +"46cabf39": "last_A_volume()", +"46caf2ae": "currentLiquidity()", "46caf5e8": "BTB()", +"46cb59c2": "person1()", +"46cb755f": "increaseTokenSupply(uint256,uint256)", +"46cb989e": "newOraclizeQuery(string)", "46cc3179": "getComponent(string,string)", "46cc43fb": "decodedSecret()", +"46cc599e": "kycStatus(address)", +"46cc5a4a": "PrizeRemoved(uint16,address,uint256,uint256)", +"46cd6801": "lpName()", +"46cd79c0": "_runConstructor(address,bytes)", +"46cd87f9": "ClosedPeriod(address,uint256)", "46cd9b23": "_triggerNewPVPContender(address,uint256,uint256)", "46cdb099": "shareholderID(address)", +"46cdf5c7": "NewDropIn(address,uint256,uint256,uint256)", "46ce33d4": "clearLockBalance(address)", +"46ce46ad": "StageBegin(uint8,uint256)", "46cee8f7": "TemporaryPyramid()", "46cf1bb5": "lockState(address,uint256)", +"46cf460c": "setReferee(address,uint64)", "46cf6d2e": "_validate(uint256,uint256,uint256,uint256,uint256)", +"46cfebab": "keepMIRMax()", "46cffffd": "NewAreaStatus(uint256,uint8,uint8,uint8,uint8,uint256)", +"46d07cb5": "getVoucherIssuer(uint256)", "46d0a022": "transfer(address,address,address,address[],uint256[])", "46d0e892": "makeOptions(uint256,address,uint256)", "46d0eb60": "addAlias(address,string)", @@ -40582,126 +74313,248 @@ "46d17bfd": "LongBought(address[2],uint256[2],uint8,bytes32[3],uint256)", "46d17c3a": "Unregister(address,uint256)", "46d1c605": "balanceOfButter(address)", +"46d21f21": "_sz_uint64(uint64)", "46d22c70": "canBreedWith(uint256,uint256)", "46d24cbb": "refundedWei()", +"46d256c5": "setGlobalOperator(address,bool)", +"46d2fbbb": "plot(address,bytes32,bytes,uint256)", +"46d34994": "setAuthorityAndDelay(address,address,address,uint256)", "46d36fa0": "ChristopherRobinRT()", +"46d421cd": "EXEC_TIME()", +"46d4294d": "rowCount()", +"46d4577d": "diss(address[])", "46d46a6a": "CashTelex()", "46d47cdf": "testFailCreateWithParentsParentNotInUse0()", +"46d4d817": "buyTokensWithUSDC(uint256,address)", +"46d55161": "hatcheryTurtle(address)", "46d5688e": "RATE_CROWDSALE_S1()", +"46d5a568": "setApproved(bool)", "46d64aa2": "Kuberand()", "46d667db": "setBytes32(bytes)", +"46d6773b": "COMPTROLLER_ADDR()", "46d6b1e8": "getChampsForSale()", "46d6c93b": "addFeed()", +"46d6ea87": "finishChangeMinClaimTime()", "46d7195d": "vote_until()", "46d73def": "hasHalted()", +"46d7a6e4": "whiteListUserStatus(address,address)", "46d7df42": "setTokenContactInformation(string)", "46d89444": "getCrowdsaleTierList()", +"46d8a6eb": "makeOrder(uint128[8],uint128[8],address[4],uint8[2],bytes32[4])", +"46d8cf3f": "externalOracle()", +"46d8d9fc": "_rebaseNegativePercent()", "46d95146": "anvlTechToken()", +"46da04cf": "sell_amount()", +"46da6eee": "PullRequestsAddress()", +"46db50d1": "callPaidAmount(uint256,uint256,uint256)", "46db63d7": "rewardUser(uint256,address,uint256)", +"46db70fb": "createProof(address,address)", +"46dbe685": "withdrawERC1155(uint256)", "46dbf9b0": "pickupProduct(uint256)", +"46dc7c68": "retrieveMsg()", "46ddb7db": "setAccountBalance(address,uint256)", +"46ddc1ce": "_totalGameToken()", +"46ddd1ff": "requestedBytes(bytes32,bytes)", "46de0fb1": "isFrozen(address,address)", +"46de3412": "updateDistributionInfo(address,uint256)", +"46de90cc": "bpiw()", "46deb279": "ElementUpgraded(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"46debf31": "userBalanceAtIndex(bytes32,address,uint256)", "46df1578": "refferBonus()", +"46df22da": "randomNumberConsumer()", "46df2ccb": "setRate(uint256,uint256)", +"46e01a8e": "bountyUsersAmounts(address)", +"46e04866": "beginMigration(address,address)", "46e04a2f": "claimTokens(uint256)", "46e06634": "approveKYC(address,bool,uint256,string)", "46e0c223": "_createOfAthlete(address,string,address,uint256,uint256,uint256)", "46e184da": "Olife()", +"46e198f6": "icoAmount(address)", "46e1bfbb": "acceptAtGroup(address,uint256)", +"46e1c341": "canBuyAdmin()", "46e1f732": "investorsProcessed()", "46e1fa55": "_removeDefaultOperatorByTranche(bytes32,address)", +"46e2520e": "_whiteTokenAddress()", "46e2577a": "addProvider(address)", +"46e25bfd": "pendingBearn(uint256,address)", +"46e2737c": "MintAndBid(uint256,uint256,uint256)", "46e2a174": "preIcoTokensSold()", "46e33afc": "getFACTOR()", "46e34823": "tan(uint256,string,string)", +"46e356b1": "MESSAGE_TYPEHASH()", +"46e35bf5": "viewUserInfos(address)", "46e36060": "subBalances(address[],uint256[])", "46e3cb1a": "sellTradeConfir()", +"46e3cc8b": "sendEther(address,bytes32,bytes32,bytes32)", +"46e42711": "mintSouvenir(address,string)", "46e44f63": "getCheckRecordTS(bytes)", +"46e494a2": "partnersLimit(address)", "46e4959d": "mintMulti(address[],uint256[])", +"46e4c41c": "getAdminConfig()", "46e4d35d": "numOfLoadedEarlyPurchases()", +"46e51772": "PLAN_PRICE(uint256)", +"46e54a58": "setEndOfLife(bool)", "46e5500f": "LogFinalized(address,uint256)", +"46e583ee": "tim(address,address)", "46e5c323": "largestHODLERBalance()", +"46e5f5d3": "reduceCredit(address,uint256)", +"46e63e63": "deltaDivsSum(address)", "46e6ffdd": "OwnableStorage()", +"46e7462c": "initializeBase(address)", "46e767bc": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", "46e780b0": "getLinkHash(address)", +"46e7c85f": "timeRemaningDays()", "46e7ccac": "isAuthorizer(address)", "46e7f38e": "BayCoin()", +"46e80720": "royaltyInfo()", +"46e827f5": "initEggs(uint8)", "46e87b1e": "RgiftTokenSale()", "46e93dbc": "maturityProcess(string,bool,uint256,uint256)", +"46e9903a": "CouponRedemption(address,uint256,uint256)", "46e9ab22": "Gateway()", +"46e9df6b": "transferERC2665(address,address,address)", "46e9e3c2": "reclaimPeriod()", "46ea2552": "transferManager()", +"46ea7466": "minimalSchainLifetime()", +"46ea865f": "TokenListed(uint256,address)", +"46eaab32": "boostLevelFourMultiplier()", "46eac50e": "superTransfer(address,uint256)", +"46eb65cb": "revertIfInvalidAssetData(bytes)", +"46eb9a1d": "overfillE18()", "46eba0c1": "fundWithdraw(address,uint256)", "46ebb5e2": "TimedPresaleCrowdsale(uint256,uint256,uint256,uint256)", +"46ec0259": "verifyMessage(address,uint256,uint256,address,uint256,address,uint8,bytes32,bytes32)", "46ec56c5": "getNumInvestments()", +"46ecfbd6": "getMaxPoolTokens()", "46ed24a3": "setAirdropToken(uint256)", +"46ed2c77": "NTS()", "46ed3199": "ATCToken()", +"46ed62c9": "init2(address,address,uint256,uint256,uint256,address,address,address)", +"46ed8e89": "LIFE()", "46edef6c": "accICO()", +"46edfd0a": "roomNightApprovals(uint256)", +"46ee84b0": "removeMembers(address[])", +"46ee8d00": "amountOut()", "46eea9a1": "secondStageRaised()", +"46eed3f3": "MAX_REWARD_ERA()", +"46eee1c4": "getNewValueCountbyRequestId(uint256)", "46eeed5f": "rolloverFee(address,uint256,uint256)", +"46ef0f25": "ownerCanChangePool()", "46ef6660": "createTokenContract(address,bytes32)", "46f02832": "queryPermissions()", +"46f04170": "upgradePMM(address,bool)", "46f04694": "periodICOStage8()", +"46f05c33": "defaultAllocation(uint256)", "46f0975a": "signers()", +"46f10d2e": "ConstantsUpdated(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"46f13619": "EXTENSION()", "46f19888": "get_total_info()", +"46f201b1": "activeBonusCacl_4()", "46f24c6a": "functionSix(uint256,uint256,uint256,uint256)", "46f25cad": "setAuthor(string,string,address)", +"46f2cf4e": "marketDistributionFund()", "46f2e880": "payForMyselfWithChecksum(uint128,bytes1)", +"46f31d7b": "oneThought()", +"46f390e2": "activateZIR()", +"46f3e81c": "rad(uint256)", "46f42dff": "Win(uint256,uint256,uint256,address,uint256)", "46f43f15": "StierBitToken()", +"46f46cd3": "DistributionStarted(uint256)", +"46f4da57": "changeFinalVerdict(uint256,int8)", +"46f4f8d1": "getRebalanceDownRateDelta()", "46f74c6d": "setArbitrationPercentage(uint8)", "46f76648": "getTotalEthSended()", "46f7a883": "BuyTicket(uint8,uint8,uint8)", "46f7cf87": "insert(address,uint256,address,address)", +"46f7f4e7": "uniLoan(address,address,uint256,uint256,uint256[],address[])", +"46f81a87": "create(string,uint256)", "46f84dc4": "grantPermission(address,address,bytes4,address)", +"46f86717": "Owner_Withdraw(uint256)", "46f8e5ec": "getBlocksUntilStart()", +"46f90748": "unclaimedRewards(uint256,address)", "46f92818": "setCreditDaoAddress(address)", "46f99063": "totalSent()", "46f9bedf": "costPerTicket()", "46fa14e5": "MyFeed2Token()", "46fa2574": "preIcoMembers(address)", +"46fa7c12": "acceptTokenOwnership(uint256)", +"46fa9c7f": "doAddGuardian(address,address)", "46fae630": "getAllCardsAttack()", +"46fae703": "_removeAuthorizedAddressAtIndex(address,uint256)", +"46fb3805": "boostFor(bytes32,uint256)", "46fbf68e": "isPauser(address)", "46fc0294": "senderRefund(bytes32,uint256,bytes20,address,address)", "46fc9037": "__beneficiaryTransfer(uint256)", "46fcafe2": "etherContributions(address)", "46fcff4c": "availableFunds()", +"46fd5522": "createBoxMould(uint128,uint128,uint256,address[],uint256[],string,string,string,string,string)", "46fd9446": "setUsdEtherPrice(uint256)", +"46fdcb46": "buy(uint256,uint256,uint8,bytes32,bytes32)", "46fde171": "closeCdp(address,uint256,uint256,address)", +"46fdf1b9": "curveYPool()", "46fe2edb": "reserveIAMDestination()", "46fec37b": "LogBounty256(address,uint256,string)", +"46fed670": "_orderBeer(address,uint256)", "46ff099d": "cancelOrderByPayer(string)", "46ff43dc": "totalInCents()", "46ff4ce6": "betRedCoin()", "46ff64f3": "setOraclizeRoundGasFee(uint256)", "46ff7eac": "depositContrac(uint256)", +"46ff9847": "approve_494(address,uint256)", "46ffb216": "m_startTimestamp()", "46ffdfbc": "getMax(uint16[])", "47002c6d": "TOTAL_RECEIVED_ETH()", "47006460": "maximumInitialBuyoutPrice(uint256)", +"4700a5cd": "acceptSwap()", "4700d305": "panic()", "4700dc57": "setFirstBonusTokensLimit(uint256)", +"4700ec1a": "setJobState(uint256,uint256)", "4700fada": "GVToken(address,address)", +"4701bb01": "setMediationTimeLimit(uint256)", +"4701eaa8": "acoFee()", "47021780": "QSBH()", "47026d90": "Volkstest3()", +"470272b5": "onPK(uint256,uint256,uint256,uint256)", "47028fcf": "getSponsorshipAmount(address,uint256)", +"47029e4b": "calculateTokensToMintWithEth(uint256,uint256,uint256,uint256,bool)", "4702d115": "dataCalc(uint256,uint256)", "4702fa12": "_getCurrentRound()", "47040cb4": "getStateProofAndHash(bytes,uint256)", +"47042212": "payEventLog(address,uint256,uint256,uint256,uint256,bool)", +"47046891": "depositYield()", "47048c7b": "getMemberBoss(address)", +"470503ad": "ListingUpdated(address,uint256,bytes32)", +"470534b1": "ePairs(address)", "47055321": "deduct(address,uint256)", +"47056f0b": "getDailyDividendByAddress(address)", "4705b55b": "XCOIN()", +"4705d059": "beautyToOwner(uint256)", "4705d888": "getlastmoney()", "47062402": "buyFee()", +"47062658": "safeCrowTransfer(address,uint256)", +"4706408f": "createPledge(uint256,string,string)", "47064d6a": "setData(string)", "4706840e": "destroykill()", "4706c375": "_withdrawEquity(address,uint256)", +"4706f19b": "checkSameSenderReentranted()", +"470707d6": "setDirectShare(uint256)", +"4707904e": "divExt(uint8,uint8)", +"4707d000": "rescueToken(address,address)", "4707f44f": "tokensOfOwnerByIndex(address,uint256)", +"4708293e": "reg(string)", +"47082db3": "levels(address)", +"470838a0": "pairForWETH(address)", "47085958": "SetIndustry(string)", +"47088c18": "ampl_eth_uni_lp()", "47089f62": "addVerified(address,bytes32)", +"4708ba4a": "notifyRewardAmount(address,address,address,uint256,uint256)", "470905b1": "Founder3()", +"47095994": "printTo(address,uint256)", +"4709904d": "callerInfo(address)", +"47099914": "Paid(address,uint256,uint256,bool)", +"4709b2ab": "approve_655(address,uint256)", +"4709d6ef": "suShiInUniOut2(uint256,uint256,address,address,address[],address[])", +"4709fd5a": "tk_getReward(address,address)", "470a5f4e": "reinvest(uint256,bytes32)", "470b1984": "investedBTC()", "470b1f7c": "AnetCoin()", @@ -40710,22 +74563,45 @@ "470bb62b": "record(string,string)", "470ca291": "referrerLevel3Ether()", "470d7722": "batchAddAddresses(address[],uint256[])", +"470d970f": "prec()", "470e872c": "transferBill(address)", +"470eb892": "companyPresident()", +"470ec76c": "addTree(address,uint256)", +"470f42f5": "UNISWAP_FACTORY_A()", +"470ffb33": "_meta()", "47102a5d": "ETC(address,uint256)", +"471035a9": "sysman()", +"4710362d": "batchUnfreezePartialTokens(address[],uint256[])", "4710411d": "twenty_percent_of_amount()", "4710c5bf": "preSale3()", "4710c63c": "excavation()", "4710cfd7": "nContract()", +"4710f2db": "changeHarvester(address)", +"47110e26": "GetStudentGroup()", "47115192": "voteCut()", +"47115f2e": "DAYS_IN_SECONDS_30()", +"47116c6e": "versionSM()", "4711748d": "setNDCContractAddress(address)", +"47118798": "getUserByAddress(address,uint256)", +"4711beac": "warpOut(uint256,uint256)", +"4711d89b": "investorTotalEarned()", "4711dbe1": "registrationBounty()", +"4712ee7d": "mintVAI(uint256)", +"47136c07": "approve_326(address,uint256)", "4713f29b": "setBuyingCostumeRate(uint256)", +"47144421": "approve(bytes32,uint256)", +"47144e0f": "setNirvanaReward(uint256)", "47146b28": "setFiscal(uint256,uint256,bytes32)", "4714c0aa": "proxyAccountingCreation(address,uint256,uint256)", +"4714c4c9": "pendingSFI(uint256,address)", +"47153e62": "_usdRateUp(uint256)", "47156810": "scheduleNewDerivativeToken(address,address,uint256)", "4715b308": "decreaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", "47166f62": "Quarkchain(uint256,uint256)", +"47167a04": "callProxyHandler_getUserMaxRepayAmount(address,address)", +"4716e2c4": "setupRewards(uint256,uint256[],uint256[],uint256[])", "47170eb8": "LogEtherTransfer(address,uint256,uint256)", +"4717ce9a": "mintIjin(uint8,uint32,uint8,uint16,uint16,uint16,uint64,uint24,bool,uint24,address)", "4717dea9": "getTicket(address)", "4717f25a": "charonsBoat()", "4717f97c": "getResults()", @@ -40735,64 +74611,120 @@ "471a20e7": "getResponses(uint256,uint256)", "471a2270": "Lottery(uint8)", "471a23c8": "burnMe(uint256)", +"471a751e": "addStaker(address,uint256)", +"471aa6cf": "depositUsdtPools(address[],uint256[],uint256[])", "471ab294": "handleTokensFromOtherContracts(address,address,uint256)", "471ad963": "redeemProposalFunds(bytes32)", "471b37cf": "VESTING_ADVISOR_DURATION()", "471c95db": "TransferFees(address,uint256)", "471d0481": "randomB()", "471d4118": "releaseTimeFund()", +"471d5eb8": "Sign(address,string,uint256)", "471d66cb": "exceedsMaxInvocations()", +"471e07f0": "level_bonuses(uint256)", +"471e6c37": "getAlternate(uint256)", "471eab5c": "removeAllowedSender(address)", +"471eb9cc": "transferInSuccess(address,address,uint256)", "471efce5": "tokensForPreICO()", "471efe66": "set_addresses(address,address)", "471f11ec": "purchaseTown(uint256)", +"471f2bb5": "top3Withdraw(uint256)", +"471f2d5c": "earlyWithdrawAll()", "471f4722": "setOnSaleAmount(uint256)", +"471f580d": "loopDepositAndBorrowAndWithdraw(address,uint256,address,uint16,uint256)", "471f7cdf": "favoriteNumber()", "471fabfd": "eexploitOwnn()", +"471fcb41": "yopRewards()", "472016da": "playersAddresses(uint256)", "47202819": "unregisterInit(address)", +"4720cbeb": "cccc()", "4721ed6f": "enableRedemption()", "47220f25": "maxPremiumDragonsCount()", "4722361c": "canStartSettling(bytes32,address)", "4722b4a5": "getFeeParameters()", +"4722e6c4": "CrowdsaleStarted()", +"472376ef": "BondYearsType(address,uint256)", +"4723778c": "grantContractAdmin(address)", "47237f47": "freeStorage(uint256)", +"4723e124": "UnLockTokens(address)", "47241a27": "setAdditionalBonusPercent(uint8)", +"47241fad": "removeLiquidityAllAlpha(uint256,uint256,address,uint256)", "47244212": "Product(string)", "472457cb": "addDragonName(uint256,string)", +"47248df6": "coinNotTrasnferred()", "47249b1a": "GetEventInfo()", +"47249bc8": "newTriggerOraclize(bytes32,uint256,uint256,uint256,uint256,uint256)", "4725211b": "recordNameCount()", "47255591": "setOuverture_des_droits(uint256)", +"4725ae83": "SlingySlingSling()", "4725d544": "_utoa(uint256,uint8)", +"4726128c": "waid(uint256,uint256,uint256)", +"4726c050": "isCloseSwap()", +"47272771": "euw(uint256)", "47274dbe": "disableUser(address,address)", +"4727884a": "sub(bytes16,bytes16)", "4727925a": "KEKEcon()", +"4727b431": "hashtag_contract()", +"4727cad2": "amountToWon()", "4728537c": "lockupBalanceOf(address)", "4728d3ae": "CreatedEDU(address,uint256)", +"4728ff0b": "getUnderlyingSymbol(address)", "472905ca": "makeAdmin(address)", "47293d15": "getAddressesCount()", +"4729927b": "POOL_REWARD_RATE()", +"472a1b36": "is_premium(address)", +"472a349c": "updateRewardPerBlockStorage(uint256)", "472aa7df": "createProduct(bytes32,uint128,uint256)", +"472abf68": "initialize2()", "472ad331": "InvestmentsCount()", +"472b370d": "arbitrate()", +"472b43f3": "swapExactTokensForTokens(uint256,uint256,address[],address)", "472b6492": "AddEth()", "472b6efa": "getWinRate(uint8)", +"472bccb9": "eth_deposit(address,uint256)", +"472c00f3": "changeOwnerToken(address)", "472c681f": "addPack(address[],uint24[],uint24[],uint16)", +"472c75fb": "shortIds(bytes32)", +"472c9de4": "ParliamentTaxesClaimed(address)", "472ca5e4": "allocateBid3(bytes32)", +"472cfc03": "FeeChange(uint256,uint256,uint256)", "472d35b9": "setFeeManager(address)", +"472db27c": "sendTokenFromPresale(address,uint256)", +"472dded2": "slotRewardPool(address)", "472e1910": "verifyOpenSignature(address,bytes,bytes32)", "472eb03d": "payLoan()", +"472f0bcc": "registerContributor(address,uint256)", "472f36e2": "Allocated(address,uint256)", +"472fd0d0": "InitialBlockNumber()", "472fdb67": "totalTokensReserve()", "4730725d": "addToTimeLockedList(address)", +"47308d62": "isSupplyLessThan1Hundred()", +"4730be98": "prepareInstance()", "4730bf06": "STAGE_1()", +"47314f8f": "approve_246(address,uint256)", +"4732376d": "rebalanceCheck()", +"47323eae": "calculateMonthPayoutDays()", +"47328452": "returnAllDetails(address)", "4732a7dc": "setMigrationAddress(address)", +"4732c415": "setWlStart(bool)", "47337aab": "Btencoin()", +"473399e4": "addPool(string,address,uint256,uint256,uint256,uint256)", "4733a341": "SubmitClaim(address,string,string)", "4733dc8f": "transferProxy(address,address,uint256)", "4733ec90": "preparePayment()", +"4733f211": "GameUnlocked(uint256)", +"473430cb": "fiatTrasnferred()", "4734922a": "generateOrderByAdmin(address,address,uint256,string,string,string)", "473528b2": "_updatePurchasingState(address,uint256,uint256)", "473533e6": "estimatedWeight()", +"473555b8": "allowAllocation(address,bool)", "47355ba5": "PiplToken()", "47356bd9": "show_automated_Buy_price()", "47356dd8": "getServiceUpdateAddresses(address,uint32)", +"473587bb": "setwhaleVaultAddress(address)", +"47358882": "refreshDistributionSpeeds(uint8,uint256)", +"4735ab45": "UserDelete(address)", +"4735b00c": "viewMyDividendPotential_(address)", "4735b35f": "createDiamondAuction(uint256,uint256,uint256,uint256)", "4735c747": "CrowdsaleToken(string,string,uint256,uint8,address,bool)", "4735e00a": "CollectibleBought(uint256,uint256,uint256,address,address)", @@ -40800,65 +74732,124 @@ "47369a7c": "getPositionDeedHolder(bytes32)", "4736b531": "TdeStarted(uint256)", "47372325": "getChannelSize(address)", +"4737287d": "proportionalDeposit(uint256,uint256)", "47373033": "enableStartBattle(string)", "473753cb": "batchCancel()", "47378145": "getBlockNumber(bytes32)", "4737e852": "viewContractHoldingToken()", +"473848f5": "folia()", "47387404": "_getGameStartAuctionMoney()", +"473897d1": "tokenHoldings(address)", +"4738a883": "presaleOver()", +"47392ad8": "getKOTHAmount(uint256)", +"4739326b": "employees(uint256)", "47395ced": "append(string,string,string)", +"4739b8f4": "liquidityAddr()", "473a223d": "getClosingTime(bytes32)", "473aa2a5": "getFile(bytes32)", +"473ac3ed": "closeLoanPartiallyIfHealthy(bytes32,uint256)", "473ae9fe": "testCreateWithParent()", "473b0d46": "setMinContribution(uint256)", +"473b4c24": "erc20Deposit(address,address,address,uint256,uint256)", "473b4c53": "BrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"473b736f": "Add(address,address)", "473bc223": "gameName()", "473bca32": "secondAllocation()", "473ca96c": "win()", +"473dbde8": "suspenseAccount()", +"473e0d5a": "Transfer(address,string,bytes32,address)", +"473e2738": "DefaultReputationRewardUpdated(address,uint256)", +"473e3ce7": "totalCollateralShare()", "473e9408": "_getAttributesOfToken(uint256)", "473edf73": "Award(address,uint256)", "473f0117": "contributionID(uint256,address,uint256)", "473f1803": "claimRewardForUser(uint256,address)", +"47400269": "mapToken(address,address)", +"4740728c": "getFactoryForProtocolAndVersion(bytes32,uint8,uint8,uint8)", "4740a08b": "getEggData(uint256)", "474154bc": "divIsSafe(uint256,uint256)", "47416aec": "setTokenContract()", "4741b95c": "setPercentFrozenWhenBought(uint256)", "47428855": "assertEq32(bytes32,bytes32)", +"4742add1": "getname(address)", "47430b36": "parnter()", +"47436432": "getMonthlyWinner(uint256)", "474448c4": "finishResolveFund(bytes32,string)", +"474487bf": "flashLoanAttack(address)", "47448e8a": "set(bytes32,string,bytes32)", "4746041f": "burnIndexedFrom(address,uint256)", "4746cef8": "_confirmAndCheck(address,bytes32)", +"4747109b": "btcIncomePerTPerSecInWei()", "47471183": "freeOf(uint256)", "474740b1": "batchLimit()", +"47475d41": "SignUp(string,uint256,uint256,uint256,string)", +"47477f29": "setBuyFee(uint32)", "4748f7c2": "icoPhase1TimeBonusInPercentage()", "47492352": "ROLE_PAUSE_ADMIN()", +"474932b0": "remove_pool(address)", +"4749680a": "getSavedBalance(uint256,address)", +"4749a9fb": "sUniBaseSBlock()", +"4749b355": "getAdvertiserRegistry()", "474a5a09": "AssetBackedToken(uint256,string,uint8,string)", +"474a5e05": "_setBorrowSafeRatio(uint256)", +"474a74a9": "DRILL_OBJECT_CLASS()", "474a88cb": "failsafe()", "474a898b": "miniGameInfo()", +"474acacb": "updateLagBreakpoint(bool,uint256,int256,int256,int256)", +"474af593": "hasUsedFreeRenameEth(uint32)", +"474b07bf": "extR1()", "474b2541": "setRevision(address)", "474bbab2": "calculateTokensToSend(uint256,uint256)", +"474bfbf7": "secondaryTransfer(address,address)", "474c0868": "getActiveBuySize(bytes32)", +"474c796d": "updatePieSupplyIndex(address)", +"474c8712": "unlockRemainingToken()", "474cdca2": "countTotalInvestors()", "474ce368": "Computer()", "474ce872": "promisee()", "474ceb4d": "setCrowdsaleDate(uint256,uint256,uint256,uint256)", +"474cef3e": "BeerSupplied(address,uint256)", +"474d3ff0": "offers(bytes32)", +"474d660d": "setNyanV2LPAddress(address)", +"474d6dea": "burnNonce()", "474d904b": "totalTokensWithoutBonuses(address)", "474da79a": "contracts(uint256)", "474e9e74": "MaxICOSellSupply()", "474ea7e9": "Cyrus()", +"474ec7b0": "agreementOwners(address)", "474f067f": "setType(bytes32,string)", +"474f249a": "setGlobalConfiguration(bytes32)", "474fa131": "extraMintArrayPendingProcess(uint256)", +"474fa494": "forward(address,bytes,address,bytes)", +"474fa88c": "disableOpenTransfer()", "47516910": "FileHash()", "4751757a": "Metronome()", +"4751b79c": "divScalar(uint256,uint256)", +"4751ebab": "uniswapSwap(address,uint256,uint256,bytes,uint256)", +"47521006": "resolveAddress()", "475289da": "numberOfMoods()", "475297bc": "closeBets(bytes16,bytes16,uint256,uint256)", "4752a3ce": "StdUInt32(uint32)", +"4752f9ef": "isBlacklisted(uint256)", +"4753188e": "stakeLUCAX(uint256,uint256,uint256,uint8)", +"47531df8": "getAllUser()", "47535d7b": "isOpen()", +"4753a67d": "fun_x()", "47540b31": "setTeamAddress(address,address,address)", +"475411ab": "collateralValue(uint256)", +"47547041": "debtCeilingIsReachedExplicit(uint256,uint256,string)", "4754a311": "StatusContract()", "4754d136": "rerollFee()", +"4754d644": "stamp(address,uint256,uint256)", "47556b73": "isSuperInvestor(address)", +"475588ad": "setMinBuyForPrize(uint256)", +"4755a871": "firstMinStakeValue()", +"4755abbb": "pool_address()", +"47560eb8": "getPrice(uint256,bytes32)", +"47568dff": "Lottery(address,uint256,uint256,uint256,bool)", +"4757158a": "recordProof(bytes32,string,string)", "4757ace4": "milestoneCompleted(uint256)", +"4757ef13": "withdrawNonceUsed(address,uint256,uint256)", "4757f1d2": "redeemAllOutcomes(uint256,uint256)", "47582291": "totalstakeamount()", "4758871d": "FOUNDER_EXCHANGE_RATE()", @@ -40868,68 +74859,115 @@ "475a2ac6": "mainSale(address,uint256)", "475a9fa9": "issueTokens(address,uint256)", "475abbb7": "PLATAMOUNT()", +"475b10f9": "add(address,address,bool)", "475b54c9": "AdvancedOwnable()", "475b723a": "setRate362()", "475c051d": "grantPermissionBatch(address[],string)", +"475c2c65": "freeId(uint256)", "475c3001": "FinishTokenSale()", "475c420c": "setHelpMeTokenParts(address[])", "475c578c": "walletPercentage()", "475c5ed1": "contributedToSTO(address)", "475c7605": "ImpeachmentSupport(address,uint256)", +"475c85f7": "WALLET_GAW()", "475ca435": "get_record_by_row(uint256)", "475d41f9": "SISKCoin()", "475d599b": "wolf2Balance()", +"475d8733": "makeUnchangeable()", "475e0062": "RoundEnd()", +"475e3122": "SetNextVault(address)", +"475e42da": "subscribeOption(uint256)", "475e4c0f": "buscarDocumentoPorHash(bytes32)", "475ec95a": "PRESALE_MINIMUM_FUNDING()", +"475ef76a": "unlockAirdropBees(address)", +"475f4422": "INX_SetOperator(address)", +"475f7677": "addScan(string,string,string)", +"475fcbf6": "period1()", "475fd055": "supplyLeftAtOrigin()", +"4760eb25": "safuId()", "4760eee3": "getStartersProxyAddress()", "47615fa1": "RankScore(address)", +"47616df7": "_bond(uint256)", +"4761703c": "weekly(address,uint256,address,uint256)", +"4761a29d": "manageTrustedRelays(address[],bool)", +"4761b86d": "ERR_EMPTY_PREV_ADDR()", +"4761d996": "_locked(address)", +"4761f9d8": "v3Token()", "47625694": "getPerformance(uint256)", +"47626531": "getSumOfMonthlyAnnuity(address,uint256,uint256,uint256)", "476343ee": "withdrawFees()", "47635dac": "transferContract(address)", "4763e3fe": "LOG_ZeroSend()", +"4763f00b": "getPairByIndex(address,uint256)", "4765fb39": "userstaticprofis()", +"4766162c": "isCollateralToken(address)", "4766551d": "getExCoins()", "47665ae8": "setMaxEthPerAddress(uint256)", +"4766ac77": "WinTokenAddress()", "4766ae68": "RareToken()", +"4766da72": "log(uint256,uint256,bool)", +"4766f262": "setDeshFeePercentX100(uint256)", "476711cb": "currentPeriodEtherCollected()", +"47675e4c": "getVoteForServicePoolsCount()", +"47679fcb": "reward_level_3(address)", "4767aeec": "_getaward(uint256)", "4767d305": "EventCreateRisk(address,uint128,uint256,uint256)", "476810b5": "ico1Min()", "4768136e": "MelonWallet()", +"4768399e": "poolProgram(address)", "47683f00": "isInTier2(address)", +"476865d2": "RewardLeft()", "47688c74": "userAmount()", +"4768b497": "getDepositorAddress()", +"4768d4ef": "matches(uint256)", "47695e60": "MENTORS()", "4769ed8f": "buyFromRC(address,uint256,uint256)", +"4769f137": "ChangeMintingAmountPerUser(uint256)", "476a29e2": "pauseStateSwithcer()", "476a4558": "DigitalMaterai(uint256)", "476a73ec": "transferEthToMultisig()", "476aa607": "saleHardCapReached()", "476b7e3b": "readyToFulfill()", +"476bb6ef": "transferSAFECollateralAndDebt(bytes32,address,address,int256,int256)", "476c089a": "finalyze()", "476c494c": "newAnswer(uint256,uint256)", "476c9f41": "SecurityToken(string,string)", +"476d16da": "carAuctionCurrentPrice(uint256)", +"476d44e6": "getDefaultVaultAppId()", "476d7c13": "userToNumCities(bytes32)", +"476ddeba": "checkSig(bytes32,bytes,bool)", "476e04c7": "NewMessage(string)", +"476e0db8": "HIGHEST_DIVIDEND_PERCENTS()", +"476e492f": "recoverRevokeHash(bytes,bytes32,uint256)", "476e4aa4": "Remove(uint256)", +"476e5045": "awardRankings(uint256)", "476e6172": "getCurrentPlayer()", +"476ef851": "getBgCategories(uint256)", "476fe919": "setReleaseTime(address,uint256)", +"47701215": "reverseApprove(address,uint256)", "4770ca3c": "AddBTCTransactionFromArray(address[],uint256[],uint256[],bytes4[])", +"4770d239": "setBBOXthresh(uint256)", +"4771218a": "checkPool()", +"4771c92f": "batch(address,uint256[],address[])", "47722218": "setKycAdmin(address)", +"47724b65": "connectContract(address)", "477269c0": "setHpbNodeAddress(address)", "4772eb77": "callDisableCallback(string)", "47734892": "getUserBalance(address)", +"4773a6a9": "SELL_FEE()", "4773e0be": "didCloseLoan(bytes32,address,bool,uint256)", "4774027c": "changeOffchainUploaderAddress(address)", +"4774136c": "_blackAddress(address)", "477492dc": "MAIN_COIN_PER_ETHER_ICO()", "4774ef06": "forwardGas(address,uint256)", "47751b98": "validUpgradeId(uint256)", "477523c2": "flushERC20(address)", +"47757fb6": "proposeNewImplementation(address)", "47767c5d": "CRYPTOZOLToken()", "4776ed69": "AngelTokensHolder(address,address,address)", "477721e9": "FrozenContract(bool)", "4777338c": "lastPricePaid()", +"4777a534": "getAddrs(uint256,uint256)", "4777c1f4": "setUnownedPriceInEth(uint256,uint256)", "4777dbcf": "EternalStorageProxyForStormMultisender(address)", "477801b1": "getLastRoundResults_by_index(uint256)", @@ -40940,280 +74978,509 @@ "47799da8": "last()", "4779fad9": "setMentorsTokensPercent(uint256)", "477a0eb3": "removeAtIndex(bytes32[],uint256)", +"477a5c98": "getVar()", "477a7042": "getCanvasState(uint32)", +"477a7941": "rateTransaction_relayed(address,uint256,uint256)", +"477a8a95": "UNI_PRINCIPAL_AMOUNT()", +"477a9543": "SushiSwap()", "477adb83": "eggtracker()", "477af741": "firstMaxAmount()", +"477b65cf": "Exchange(address,address,uint256)", "477bda31": "qnt10k()", "477bddaa": "setContractAddress(address)", +"477c7e23": "redeemMaximum()", "477cdbb5": "create(uint256,uint256,uint256,address)", "477ce277": "cost(address,uint256,bytes,bytes)", "477d47b5": "viewPreSaleRefundsInMainSale(address)", +"477d66cf": "getBorrowingFeeWithDecay(uint256)", "477d6c6c": "_emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"477e292d": "maxRank()", +"477e488d": "isUserGaftTokenID(address,uint256)", "477e5d24": "pvpQueue(uint256)", "477eab0a": "taxman()", +"477ef912": "pauseHatch()", +"477f1eba": "presaleContributions(address)", +"477f3b70": "_ensureAgreement()", +"477fda9f": "getOrderByIdProducer(address,int256)", "477fe4e6": "payForTask(uint256)", "477ff120": "addTokenAddress(address,address)", +"47800068": "openSupply()", "47803e97": "tokensOnHold()", "4780eac1": "wethContract()", "47810b3e": "LTY()", "47816131": "EphronTestCoin(uint256,uint256,uint256,string,string,uint256)", +"4782bc26": "FrozenAmt(address,uint256)", +"4782c2c6": "updateDCPRecorderAddress(address)", +"4782e407": "changeUSDT(address)", "4782f6fc": "removeOwners()", +"4782f779": "withdrawETH(address,uint256)", "4783c35b": "multisig()", +"4783d2d8": "NewPlayerCreated(uint256,uint256,string,string,address,uint256)", +"4783f1d1": "get365DaysReturnPercentForETH()", +"4784eb42": "CompToken()", +"47853802": "WITHDRAWTASK()", +"47854b87": "companions(address)", "478573ca": "getMainWallets()", "47858c79": "finalizedUpgrade()", "478609f7": "mintTokens(int256,address,uint256,uint256)", +"47863e04": "afiClaimThreshold()", +"47865bef": "_gameRate()", +"4786b0cb": "setWithdrawalThreshold(uint256)", +"4786c34e": "changeAirdropPhase(uint8)", "4786cfea": "_estimateSupply(uint256,uint256,uint256,uint256)", "47872b42": "unsealBid(bytes32,uint256,bytes32)", "4787513a": "tokenHoldersCount()", +"47879507": "getLevelDiffedReferrers(address)", "4787e261": "calcQuickPromoBonus(uint256)", +"478810b2": "decayBurnrate()", +"4788312f": "TotalWithdrawn()", +"47883c37": "isEthItem(address)", "47883fd9": "product4_luckybuyTracker()", "4788cabf": "getContractId()", +"47890337": "danhsach(uint256)", +"478904eb": "fromaddr(address)", +"4789a244": "LUCKY_EXTRAS(uint256)", "4789aaef": "EthereumDice()", +"4789e8de": "weeklyWeightPoints(uint256)", +"4789eed7": "mashroomPerBlock()", +"478a0d5f": "AddSupply(address,uint256)", +"478a4251": "setHandlerAddr(address)", "478aa69e": "unauthorizeUser(address)", "478ae93c": "playToWin(uint256)", "478b2f8b": "trieValue(bytes,bytes,bytes,bytes32)", +"478b3bf4": "setUp(address,uint256,address,uint256,address,uint256)", +"478b9a1f": "getLastEventId()", "478bdce2": "WinningNumbersEvent(uint256,string)", "478c4238": "p_update_mResalePlotOwnerPercent(uint256)", "478c4e0e": "resetData()", +"478c9b08": "earningByIDExt(uint256)", "478cd032": "getLevelAmount(uint256)", +"478d1240": "payoutMiningAll(address,uint256[])", +"478d1c62": "log(address,uint256,address,address)", "478d2136": "proposalsByShareholder()", +"478d80ed": "getUBDEntries(address)", "478db7e7": "getDataTrackingParameters(uint256)", +"478dc704": "transferSecurityAssetToken(address,address,uint256)", +"478dc962": "launchERC20TransferTax(string,string,uint256,uint256,uint256,address)", +"478dd366": "swap(bytes32,bytes32,address,bytes32,uint256,uint256)", +"478e14ab": "viewLostMoney(address,uint256)", "478e25bf": "resetAction(bytes32)", +"478e3568": "_setMarketMinted(address,bool)", +"478e3ff8": "removeListEnlisted(address[])", +"478e721b": "operVestingTimer(uint256)", "478e7d7f": "getSponsorableJobs()", "478f0735": "Jamatoken()", +"478f5152": "Registration(address)", "478f796a": "ownersWallet()", "478f7b52": "mainSaleMinPaymentWei()", "478f7eca": "CnytCoin()", +"478fe603": "trancheRate(uint256)", +"478ffa6a": "safeCmbstTransfer(address,uint256)", +"4790a4ad": "WhitelistAdded(address)", +"479119be": "withdrawalDevFundMax()", "47913dfe": "staticArrayChangeValue(int8,uint256)", "47923d6f": "_addDividendsForAddress(address)", "479245bb": "_transferOwnership(address,address)", +"47925c64": "M5LogicUpgrade(address,address)", +"4792b148": "updatePledge(uint256,string,string,uint256)", "4793017d": "stageLending()", "47930567": "hashPosition(uint32,int64[2],bytes16)", "4793504e": "Divider(uint256)", +"4793bbcc": "testEmptySortedSpot()", "4793cebe": "allocateRemainingTokens()", +"47943f47": "mintLegendaryMonster(string,address)", "479487e3": "getCar(string)", +"4794947b": "riskystakemaximumuserlimit()", +"4794997f": "leaderBoardPlayers(uint256)", +"4794afd5": "JUNIOR_TRANCHE()", +"4794d696": "STFactory()", "4794db02": "existenceDecimals(address)", +"4795394c": "Update(string)", "479564d5": "getAssociatedTAOSettingDeprecation(bytes32)", "4795ac60": "collectPayment(uint256)", "47963cf8": "COINEIUM()", +"479646b2": "lawmaker()", "47966bc2": "spam()", +"47979b73": "voteCasterVestingDays()", "4797debe": "approveAmountAndSetFirstUseTime(uint256,address,uint256,uint256)", +"4797e316": "exitLobby(uint256)", "4797f21b": "setLog(address)", "479834ca": "generateRandomMonster(uint8[14],uint32)", "4798a2e3": "limorico()", +"4798a5d5": "releaseVesting(uint8,address,address)", +"47990443": "getUserFundETH(address)", "47992b25": "DST_RESERVE()", +"47993ca7": "myVoteValue()", +"4799c254": "Transferownership(address)", "479a4ae9": "isSHA256HashRegistered(bytes32)", "479a5d53": "setOtherMigrationSources(address[])", "479ad4c3": "removeListing(uint256)", +"479b0aa6": "pendingOVEN(uint256,address)", "479b321e": "CyberCash()", +"479b3d95": "setAssetPermitSupport(uint256,bool)", +"479b9c6c": "shelf()", "479ba3a5": "_resetPlayRound()", "479ba7ae": "rewardsOf(address)", +"479cea15": "groupStaked(address)", +"479d10fd": "LogFallbackTracer(address,uint256)", "479d29f4": "BiyuleCoin(uint256,string,string)", "479e24e6": "setNewInvestCommission(uint256)", "479e393c": "getBettingStastics()", +"479e7136": "mintQuoteAt(address,uint256,address,uint8)", "479e840f": "playValue()", "479ed225": "getMyGameCompleted(address,uint256)", +"479f31ad": "Create(address,uint256,uint16)", +"479f81f1": "DMEX_ETH_CONTRACT()", "479f8d33": "threeHotHoursDuration()", "479fb784": "approveBalancesWaitingKYC(address[])", +"47a013fa": "PRESALE_RELEASE_PERIOD()", "47a08955": "_Deposit(address,address,uint256)", +"47a0d032": "privatorForBaseUnlockTimes()", "47a0fd7e": "shieldsUp()", "47a11f26": "lIKETOKEN(uint256,string,string)", "47a1a2d6": "usdCollected()", +"47a1e3a4": "frax_deployer()", +"47a21261": "acceptContactEvent(address,address)", "47a21679": "sellKeys(uint256,uint256,bytes32)", "47a21eda": "buySharesFor(address)", "47a22ca4": "devChangeMiningReward(uint256)", "47a34bcb": "getBlockMaxVotes(uint256,uint256)", "47a36afd": "totalFeeFlows()", +"47a3ad55": "checkKYCAdmin(address)", +"47a425ed": "limitoff()", "47a42ff7": "buy_sale()", +"47a48176": "setFeeTransfer(address,uint256)", "47a5046a": "isKYCRequiredToReceiveFunds()", "47a5b1b3": "addApprovedContractAddress(address)", +"47a5bf4f": "sqrtValue()", +"47a5d9d8": "availableSubsidyToDraw()", "47a64f44": "lockAccount(address)", "47a66b57": "addUserEndorsement(address,bool,string,string)", "47a68cd4": "EOSBetDice()", "47a69105": "NewSmartSharingContract(string,uint256,uint256,string,string,string,string)", +"47a695a7": "getTotalPendingDeposit()", "47a69dfd": "Vegetoken(uint256,string,uint8,string)", "47a6e601": "getATMHoldersNumber()", +"47a7327a": "voteGame(uint256,uint256)", +"47a75aa3": "AllocateReservedTokens(address,uint256)", "47a7aad5": "_vest(address,uint256,uint256,bool)", +"47a7d107": "lockCollateral(address,uint256)", +"47a7ecc2": "either(bool,bool)", +"47a7f445": "NewJackpotTimestamp(uint256,uint256)", "47a8205f": "privateWeiRaised()", "47a90325": "maxCapEcosystem()", "47a98ed2": "WithdrawFailed(address,uint256,bool)", "47a99264": "setBwServiceValidCaller(address)", +"47a99e43": "cancelOrder(address[3],uint256[7],bool,uint8,uint8,bytes32,bytes32)", +"47a9b6db": "addSynths(address[])", "47a9fd81": "rob(address)", +"47aa2007": "setBlockNotSynced(bool)", "47aa7cd4": "setPoolStatus()", "47aaf4eb": "resetOldAndSetNewDiscounts(uint256[],uint256[])", +"47ab2d02": "tokenPerBlocks()", +"47ab2eb8": "transferUSDT(address,address,uint256)", +"47ab394e": "OrderNotFillableError(bytes32,uint8)", "47ab58ec": "valuationAndCutOff()", +"47abd52f": "RedeemUSDT(uint256)", +"47abd7f1": "changeDeity(address)", "47ac704f": "oldTokenSale()", +"47acbf2e": "ApprovalWithAmount(address,address,uint256,uint256)", "47ad396b": "setFundingRules(address,uint256,uint256,uint256,uint256,uint256)", +"47ad5835": "companyaddress()", +"47ae58b3": "updateRewardDelegators(address)", +"47ae73ee": "getSoldItem(address,uint256)", +"47ae9cd8": "getLiqLockBudget(uint256)", +"47aec836": "lpIncomeRateChanged()", "47aee603": "DIW(address,uint256)", "47aef0a9": "battles()", +"47af8c40": "EthTransferred(string)", "47af954d": "creationAddress()", "47af9957": "pauseTransfers()", "47afa4e4": "change_pre_ico_start(uint256)", +"47afd495": "getCommonPetIdAt(uint256)", +"47b0b5b3": "getLon(string)", +"47b1a0cd": "getStakingUser(address)", "47b24f15": "LavaWallet(address)", "47b272c0": "startMining(uint256)", "47b27b8b": "unblockTokens(address,address,uint256)", "47b27fd0": "testIsComplete()", +"47b2c736": "sellerAmount()", +"47b30922": "isValidVerifierAddress(address)", +"47b32448": "setAggregatorAddress(address)", +"47b33e2e": "releaseFundsToPlayer(string,uint256)", "47b3aff8": "bundles(uint8)", "47b40ba2": "betFreeGame(uint256,uint8)", +"47b42fe6": "addLiquidity(uint256,uint256[4])", +"47b45652": "RECOVERY_DELAY()", "47b47102": "bakeCookie(string)", +"47b47b8c": "PotWithdrawConstant(uint256,uint256,uint256,uint256,uint256)", +"47b4a2b9": "setBirthLastTime(uint32,uint256)", "47b4e272": "depositBTC(address,uint256,uint256,bytes32)", "47b4f943": "canmint()", +"47b50326": "secondHouseOpen(bytes32,uint256)", "47b55a9d": "pendingWhitelistAddition()", +"47b59672": "totalVMR()", +"47b5ab52": "setminPriceInXCHF(uint256)", "47b5acfd": "getProposalPublishedAt(bytes32,bytes32)", +"47b5c92a": "IPHONE_FAILED()", "47b5dd54": "burnedTokens()", +"47b60708": "setFundCollector(address)", "47b60ec0": "investorsGrantsAmount()", +"47b61bcc": "CounterStack(address,uint256,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", "47b64eb0": "setServerAddress(address)", +"47b67d05": "forceWithdraw(address,address,uint32)", "47b6ab59": "Token(address,uint256,string,string,uint8)", +"47b6e375": "_emitWithdrawn(address,uint256)", +"47b6fa28": "gxs(uint256)", "47b7142b": "safeSubtrZJF(uint256,uint256)", "47b72b89": "getdeptmembershipstatus(uint256,address)", +"47b75a0f": "testBalanceOfFunction()", +"47b76eab": "goldMigrations(uint256)", "47b79a31": "remainingTransfered()", "47b79a40": "manVault(uint256)", +"47b7e348": "withdrawRemoveLiquidityRepayDebt(address,address,uint256,address,uint256,address,uint256[2])", "47b82bec": "FUTURAX()", "47b84579": "getCompte_30()", +"47b855cf": "setClaimPayoutAddress(address)", "47b87e48": "GetSaleInfo(uint8)", "47b8b30b": "toCancel()", "47b950b6": "setWorkerDtPort(uint256)", "47b989af": "MyReferrer()", "47b98c2e": "RDWToken()", +"47b99295": "getOneTimeData()", +"47b9bc22": "setMultipliers(uint256)", +"47ba436b": "addGroupAccess(address[])", "47ba65d2": "get(bytes8)", +"47ba7a9e": "onPayEarningsDone(uint256,uint256,uint256,uint256)", +"47bacf1e": "isExchangeInitialized()", +"47bad83b": "accountAccruedIndex(address)", "47bafa82": "refundingComplete()", "47bb0613": "deactivateContract(address,address)", "47bb159d": "getByFromAndToCount(uint256,uint256)", "47bb1883": "computeReward(uint256)", "47bb89f0": "balance(uint256)", "47bba01d": "inactivateSelf()", +"47bbac05": "dividend(address)", +"47bbd65b": "pendingClaim(uint256,address)", "47bbe867": "purchaseMembership()", +"47bc0c8c": "IssuingRecordAdd(uint256,bytes32,uint256,uint256,uint256,string,uint256)", "47bc1f94": "tokenSaleSupplyRemaining()", "47bc3e51": "mintBounty(address[],uint256[])", "47bc7093": "removeIssuer(address)", +"47bd3718": "totalBorrows()", +"47bd4fd1": "getValueOfToken(address,bool,uint256)", +"47bd6c80": "recipientDesiredBalance()", "47bda66d": "createAMIS(address)", "47bdb7f4": "transferDisable(bytes20)", "47bdc8b4": "oraclize_query(string,bytes[5],uint256)", "47bdeedf": "getPlayerUsableTokensCount()", "47be11ae": "addArrayItem(address,string,string,uint256)", +"47be577c": "setUserUseReserveAsCollateralIfNeeded(address,address)", "47be7bce": "formulaPrecision()", +"47bed998": "calculateNextPrizePeriodStartTime(uint256)", "47bf7924": "ClaimSHIT(address,uint256)", +"47bfe2e4": "setMinNetworkCompensation(uint256)", +"47c05069": "emergencyCommit(address)", "47c05c22": "massSending(address[])", +"47c07e88": "mintERC20(address,address,uint256)", "47c0ea6b": "_invest(address,uint256)", "47c1303a": "MeetsOne()", +"47c130f0": "seedAtIndex(uint256)", "47c14648": "claimTokenReserveLife()", +"47c15069": "statusSnapshots(uint256)", "47c17bac": "getMonsterDexSize(address)", +"47c1ac26": "ethRewardBalance(address)", "47c1b5cf": "setGGEFee(uint8)", +"47c1b610": "marketHashes(bytes32)", +"47c1b775": "BalanceReserved(uint256,uint256)", "47c1caff": "getDividendsOf_(address,bool)", "47c23bff": "setproduct(string,string,uint256,uint256)", +"47c2495a": "TokenSold(uint256,string,bytes5,uint256,uint256,address,address)", +"47c27aed": "batchSetRefund(address[],uint256[])", +"47c30845": "setRelayHandler(address,bool)", "47c3114e": "OpenContract()", +"47c3197b": "viewMyReserved()", +"47c34c7e": "safeCatTransfer(address,uint256)", "47c35910": "authorize(address,address,uint256)", +"47c37f3f": "debtPlusTotalInterest(uint256)", +"47c3a432": "BuyerAdded(address,string,string,string,string,string)", +"47c3c220": "LogNokuCustomCrowdsaleServiceCreated(address)", "47c3ebf3": "is_presale_open()", "47c421b5": "changeOracle(address)", +"47c433c9": "getAllocationInGroup(uint256,uint256)", +"47c4670f": "LogWithdrawal(uint128,address,uint128)", "47c51f73": "VisibilityDemo()", "47c55045": "transferTokensFromTeamAddress1(address,uint256)", +"47c5ef43": "transfer(uint64,uint64,uint256,uint64)", +"47c62c5b": "marketOpenTime()", "47c66140": "getProposalVotes(uint256)", +"47c693da": "updateTokenNames(address[],string[])", "47c6ecc0": "TokenFrozen(bool,string)", "47c705b9": "Update(uint256,address,address,string)", +"47c70a31": "holdUntil()", +"47c76a9f": "getOwnershipModified(uint256)", "47c7b6e2": "initEthDeal(bytes32,address,bytes20,bytes20)", +"47c7b702": "maxvSPACEXE18()", +"47c7c0e6": "getLPRewardByAddress(address)", "47c7e6a8": "getAssetPackName(uint256)", +"47c7f642": "apexGoldaddress()", "47c81699": "set(string,string,uint256)", "47c81f22": "TTT(uint256,string,uint8,string)", +"47c84687": "depositETHSupportingFeeSubsidy(address,uint256,uint256)", "47c848e4": "_toPct(uint256,uint256)", "47c85634": "setEmergencyWithdrawAddress(address)", "47c8771c": "rsVerifyPoint(uint256,uint256)", "47c8cc69": "getCurrentTDEBonus()", "47c8efa7": "name1()", "47c9301f": "erc20MRL(uint8)", +"47c938ea": "dolomiteMarginProtocolAddress()", "47c98521": "rewardTheWinner(uint8)", "47c9f9e8": "getNextTimeAirdropJoin(address)", "47ca16a2": "setMaximumClaimPriceWeiRP(uint256)", "47ca78d7": "paymentFallBack(address,uint256)", "47cade2b": "unlockPublic()", +"47cae448": "diffDecimal()", "47cb1b35": "getDailyJackpot(uint32)", +"47cb4b72": "getAllCurrencies()", "47cb7a68": "timeLeft(uint256)", +"47cb9c23": "newTokenUnitsPerOldToken()", "47cbc4f1": "HasNoElement()", +"47cbc525": "onEndRound(uint256,uint256,address,bytes32,uint256)", +"47cc1047": "_setPool(address,address,address)", +"47cc7ae7": "fcfsOneRound()", +"47cc9303": "ESDS()", "47ccca02": "nft()", "47cd3fda": "removeTransferRate(address)", "47cda525": "TribeProducts()", "47ce07d7": "NewPassManager(address,address,address,address)", +"47ce1415": "get_athletes_by_team(uint256,uint256)", +"47cee97c": "Claim(address,uint256)", "47cf6f76": "isVotingActive()", "47cf7e1d": "calcDoubleBindedBlindHash256(string,address,address)", +"47cf8971": "attackCastle(uint32,uint64,uint64,uint64,uint64,uint64,uint64)", "47cfbaf4": "DMDPangea()", "47d01637": "ProofOfCommunity()", "47d04c71": "getWithdrawCount()", +"47d0b686": "roundDivTest(uint256,uint256)", "47d0dd3c": "COPIthereum(uint256,string,string)", +"47d0fa7f": "pendingGossip(uint256,address)", "47d1045f": "setNextSeedHash(uint256)", "47d137c5": "unFrozen()", +"47d1c22a": "SignerAdded(address)", "47d1d135": "setPixelColor(uint256,uint32)", "47d20373": "stages()", +"47d28372": "currentCheckpoint()", "47d289a9": "setDapCarToken(address)", "47d3523c": "_sumThem(uint256,uint256)", "47d3856a": "awardPot(string,uint256)", "47d38af4": "NaNoDigitalToken()", +"47d38b8b": "Sell(bytes32,address,uint256,uint256)", +"47d38f4d": "checkGetSqrtRatioAtTickInvariants(int24)", "47d3def9": "listAddress(address,uint256)", +"47d3e95b": "setLotManager(address)", "47d3ed10": "newDepositContract(address,address)", +"47d40609": "allowedArray(uint256)", "47d4106f": "CryptoSagaArenaRecord(address,uint8,uint8)", "47d42c73": "PaymentStatusBlockNum(address,address)", +"47d42d9e": "drug()", +"47d4f1cf": "renderByDis()", +"47d500c1": "redirectInterestStreamInternal(address,address)", "47d52d86": "getMessageValue()", "47d54bff": "finishedAt()", +"47d5a091": "updateInfo(string,string)", +"47d5bf62": "test_sub()", "47d5d5b5": "ERC721TokenMock(string,string)", "47d690b4": "limitDateCrowdWave1()", "47d6cd6b": "_airdropAmount()", "47d70f74": "icoEndBlock()", +"47d72d69": "loanPercentage()", +"47d7ee36": "totalDistributionCount_T(address)", "47d8167d": "buyBack(uint256,uint256)", "47d83127": "sendFrom(bytes32,address,uint256)", +"47d83507": "assign(uint256,address,uint256)", "47d84bab": "MultiSigStub(address[],uint256)", +"47d8a059": "canWrap(address,uint256)", "47d8fcb3": "emergencySetABackend(bytes32,address)", "47d98eb4": "QUASI()", "47d9b0aa": "FXTOKEN()", "47da115a": "changeETH2Token(uint256)", "47daf09c": "SmthToken()", "47db0a24": "buyCreditsAndSpend(string,uint256,uint8,address,uint256)", +"47dcad03": "grantExtraSpin(address,uint256)", "47dd33fb": "VerumToken()", "47dd5138": "EPSBets()", "47dd5172": "perAddressCap()", +"47dd98d4": "f(bytes16)", "47ddb165": "HODLIT()", "47ddf87e": "allTimeJackpot()", "47de074f": "getNodes(uint256)", +"47de319b": "taxFreeSenders(address)", "47de3b76": "addSubmittal(bytes,address)", +"47dedcdd": "releaseBP()", "47df1cff": "callTokenTransferFrom(address,uint256)", +"47df44d1": "setPrizeAddress(address)", +"47dfb09a": "lockerTerms()", +"47dfb261": "getCurrentContentId()", +"47dfe70d": "_setMigrator(address)", "47e0d54a": "winningTickets()", "47e122dc": "earlyBirdTokenRate()", +"47e1413f": "setLock(uint256,bool)", "47e17101": "PRIZE_TOKENS()", "47e17349": "addBonuses(uint256)", "47e1d550": "getGameInfo(uint256)", "47e20183": "point(address)", +"47e20565": "divi(int256,int256)", "47e2688d": "getFinalSupply()", +"47e26f1a": "getBlockTimestamp(uint256)", "47e271b8": "getWeeklyLotteryParticipants(uint256)", "47e2a6f9": "GetSellingTokenSymbol()", "47e2b978": "RESERVED_COMPANY_UNLOCK_AT()", "47e2d3f5": "zeroInt()", +"47e35740": "getMinBidAmount(uint256)", "47e40553": "nextRound()", "47e46806": "toString()", +"47e4b718": "threeYearsasBlock()", "47e4ddf2": "createFreeze(uint256,uint256)", "47e4e65e": "INFLIV()", +"47e4fdfb": "pizzaIdToDivs(uint256)", "47e51d38": "getConfigs(bytes32[])", +"47e546ed": "UseLock(address)", "47e57351": "withdrawTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", "47e5912a": "decreaseTokens(address,uint256)", "47e5bec3": "closeTransaction(uint256)", "47e60236": "setICOaddr(address,bool)", "47e621b7": "backingToken()", +"47e6473f": "tokenDue(address)", "47e6924f": "sanityRatesContract()", "47e74409": "leadingGang()", +"47e772fd": "Burn(address,uint256,string)", "47e7bce6": "roundStartedTimestamp()", "47e7ef24": "deposit(address,uint256)", "47e81c5f": "setBuildingContract(address)", +"47e851fa": "getbalanceOf(address)", +"47e86662": "kTokens(address)", +"47e87dab": "addSub(string,string,string,uint32)", "47e87fcd": "maxSaleBalance()", "47e9633c": "PaymentAuthorized(uint256,address,uint256)", "47e99232": "doRebuy()", "47ea13df": "setCurrentOwnerFeePercent(uint256)", +"47ea96a6": "__CirclePool_init_unchained(address)", "47eacc78": "rateAngel()", "47eafefc": "mainStartTime()", "47eb86f1": "changeTokenPrice(uint256,uint256,uint256)", +"47eb8d43": "compoundRegistry()", "47ec8138": "transferWithLock(address,uint256,uint32)", "47ec8d82": "AltSocialAccountPw(bytes32,bytes32,bytes32)", "47ec8e21": "be()", +"47eca03d": "_setMiniMiniTxAmount(uint256)", "47ecb665": "telegram()", "47ed0112": "setAddressFundReferal(address)", +"47ed7dd1": "metaApproveHash(uint256,address,uint256,uint256)", "47ee0394": "addToWhiteList(address)", "47ee0a69": "decreaseApprovalInternal(address,uint256)", "47ee2992": "COINS_PER_ETH()", +"47ee2fbb": "buyTokensWithBTC(address,string,uint256)", +"47ee8558": "executeCode(address,string,bytes)", "47eeb75f": "claimMethodABI()", "47eed11e": "test_fourInvalidFalseEqLog()", "47eef00a": "issueUnsoldToken()", @@ -41221,41 +75488,64 @@ "47ef3b3b": "liquidateBorrowVerify(address,address,address,address,uint256,uint256)", "47ef55fe": "buyCore(uint256,uint256,uint256)", "47f03d0b": "getFallbackDeposit()", +"47f06cf6": "getInvestmentPlanByUID(uint256)", "47f07880": "ChatLinkToken()", +"47f1aae7": "myValue()", "47f1d8d7": "minBalanceForAccounts()", +"47f1f76e": "topEth()", "47f2748a": "getMixerTypes()", "47f280aa": "DefaultToken(string,string,uint256,address)", +"47f291aa": "_extendTime(uint256)", +"47f2dc5b": "setTaxless(address,bool)", +"47f37a21": "setSafetyVars(bool,bool,uint112)", "47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", "47f3dde5": "rewards(address,address,uint256,uint256)", "47f4034a": "getUnitJadeStealingIncreases(address,address,uint256)", +"47f543bc": "setModule(address)", +"47f54f36": "setflpToHarvest(uint256)", "47f5666f": "getSanIdFromName(string)", "47f57b32": "retract()", "47f61a47": "Habits()", "47f66790": "addThing(string,string,bytes32,bytes32)", "47f66d15": "bestPromouterInfo()", "47f67eab": "setActionPrice(string,uint256)", +"47f6ac11": "arrayPush()", "47f710a7": "free_transfer()", "47f7af67": "sealdate()", "47f7b304": "ownerApproves(uint256)", "47f7d412": "withdrawFrozen()", +"47f849cd": "GetSafe(uint256)", "47f8b863": "getNextCutoffTime()", +"47f8ffc7": "setAddrBulk(bytes32[],address[])", +"47f958a7": "tokenBuy(address,address)", "47f95923": "alterPeerToPeerMarketplaceTransactionFee(uint256)", "47f980e5": "claimTokenAddress(address)", +"47f99d1f": "create(uint256,uint256,string,bytes,uint256,uint256)", "47f9aa9f": "auditors(address)", "47f9c371": "Proof_of_Stake()", "47fa061e": "deposited(uint8,address)", "47fa15e2": "ICOSuccess()", "47fa1cbd": "evIssueManagementFee(address,uint256,uint256,bool)", "47fa5648": "Minewar()", +"47fac12d": "createCloneToken(address,uint256,string,uint8,string,bool,address,address)", "47fafe7d": "setAccountProvider(uint8,address)", +"47faffcb": "triggerAirDrops(address[])", "47fb0bed": "checkSender()", +"47fb23c1": "claimStatus(address,uint256,uint256)", "47fc216e": "getEventsLength()", "47fc4306": "contractWithdraw()", "47fc822f": "setTargetContract(address)", "47fdbfb7": "StageChanged(string)", +"47fe82bd": "unpauseTokenSale()", +"47fe8b1d": "UPGRADE_DELAY()", +"47fe96c0": "CT_swap_ETH(uint256,address)", "47fee755": "getGeneralAttr(uint32,uint8)", "47ff6d7b": "buildId(address,uint256)", +"47ffa4f2": "EscrowMoved(address,address,bytes32,uint256,bytes32[],bytes32,bytes32)", +"47fff92b": "take0xTrade(address,address,uint256,bytes,bytes)", +"480000bb": "KeyAdded(bytes32,uint256,uint256)", "48006daf": "removeBreedingFromSale(uint256)", +"4800d97f": "ASSET()", "480111b0": "potShare(address)", "4801206e": "OodlebitToken()", "480140ca": "checkSidePledge(uint256)", @@ -41263,6 +75553,9 @@ "480184a9": "getNewToken(uint256)", "48025070": "setGivenReadings(bytes32,bool,bool)", "48027610": "transferPaidOut(address,address,uint256)", +"48028d63": "pendingSuperAdmin()", +"4802b403": "getTotalAlreadSaleAmount(uint256,uint8)", +"480352aa": "ActualSupply(uint256,uint256)", "4803724e": "removeLock()", "4803b482": "UpdatedBlockingState(address,uint256,uint256,uint256)", "48042e0b": "makerArguments(address)", @@ -41271,14 +75564,29 @@ "4804e06f": "firstStageMintingDate()", "4804e1a2": "transferBlocked()", "4804e2a5": "WalletConnector(uint256,address)", +"480529f7": "LOCKED_PERIOD()", +"480544ea": "getBorrowerAccount(address,address)", +"48059dea": "transferFromAndCallData(address,address,uint256,bytes)", +"4805a96a": "checkIfBeneficiary(address)", "4805b069": "NCRToken()", "4806249e": "badgerWallet()", "4806a0bd": "declineTradeOffer(uint256)", "4806b2d2": "getPoolPrices()", +"4806fa27": "investorsDepositedARGON(address)", "4807270b": "cancelOffer(uint16)", "480744e0": "setOwnerAsAdmin()", +"48074f34": "WOLF()", +"4807d3eb": "ContractExecuted(bytes32)", +"4807f51f": "transfersnartcool(address)", +"4808282f": "sharesFromDai(uint256)", "4808bf1c": "paymentsByCustomer()", +"4808d18b": "_short()", +"4808f969": "numberofproducers()", +"480905a8": "total_record()", +"48098609": "withdrawOwnersEarnings()", "480a434d": "baseprice()", +"480a7472": "setNFTTokenAddress(address)", +"480aa03b": "getlockLoad()", "480b1f21": "rateWin()", "480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", "480b890d": "setPercentRate(uint256)", @@ -41286,177 +75594,346 @@ "480b9707": "updateSecondWallet(address)", "480bc31f": "getTotalPot()", "480c6ca5": "getTokensIssued()", +"480cafb5": "Transferdata(address,address,uint256,bytes)", +"480cd578": "getTroveColl(address)", "480d3b2f": "manualCheckInvestmentRequired(uint256,uint256)", +"480d42bd": "createPool(uint256,uint256,uint256,uint256,uint256,address)", "480d7504": "getMineTokenAmount()", +"480dacfa": "getPrimeReplicationByTokenId(uint256)", +"480dada3": "STATS_TYPE_INVITE_ZERO_TOTAL_REWARD()", +"480df058": "BURN_FEE()", +"480df6d4": "getLenderAccount(address,address)", "480e2f8e": "LastContributorChanged(address)", +"480e8c17": "totalTCwinners()", +"480ea628": "trg()", +"480eed3e": "buyRaffleTickets(uint256)", "4810034a": "AirDropper(address[],uint256[])", "48103077": "set_tokens_received()", "48107843": "getNextCallSibling(address)", +"4810ac1c": "changeAdminFeePct(uint256)", +"4810bc59": "characters(uint256)", +"48115385": "claimBzrx()", "4811647c": "withdrawTip(uint256)", "4811af4a": "preIcoMax()", "4811c070": "team1Address()", +"4812059b": "wLuckyDog(uint256)", +"48123e7e": "AddParty(address,address,uint256)", "4812663f": "nAuditorsRequired()", +"481286e6": "computeAddress(bytes32,bytes32)", +"4813228f": "StoreSet(string,address)", +"48132f48": "ethRescue(address,uint256)", +"4813c91d": "twelveMonthPercentage()", "4813d8a6": "isAllowedToMint(address)", "4813e3e5": "halvingCycle()", "48144ef6": "BillHenryTestCoin()", "481456f9": "probability()", "48146113": "userDeposit()", "48146341": "updateMaxGasPrice(uint256)", +"481476e2": "LoyaltyWalletAddressChanged(address,address)", "4814bee8": "useDragonSpecialPeacefulSkill(uint256,uint256)", +"4814f0da": "setCurricular(address)", "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)", +"4815ea59": "dividendContractAdderess()", +"4816a53a": "enablecontrol()", +"481759e6": "ownerAndRootStatus(address)", +"48179ee5": "withdraws(address)", "4817c3e2": "_modifyTopUpLimit(uint256)", "4817db70": "approveAndCall1(address,uint256,bytes)", +"4818a49c": "getDirectsPayout(address)", +"4818c445": "stakeExpired(address)", +"48199392": "initAccounts(address[],uint256[],uint256[])", "4819d270": "approveRobot(address,uint256)", +"481a02e3": "Bind(address)", "481a3fc4": "close(address,uint256,uint256)", "481a4f2a": "fundLockTransferFrom(address,address,uint256)", "481ae5d0": "setColdLedger(address)", "481af3d3": "kittyIndexToApproved(uint256)", +"481af4aa": "earlyFoundersShare()", "481b3dbb": "CentsToken()", "481b659d": "permitPermanentApproval(address)", +"481b8cf5": "setUnlockIntervalBlock(uint256,uint256)", +"481c320f": "withdrawFromSharePool(address,uint256)", +"481c3524": "min_eth_required()", "481c6a75": "manager()", +"481cb0d7": "maxNumOfPaymentsLimit()", +"481d0fb4": "mineParam()", "481d3bd5": "setRegionUpdatedAt(uint256,uint256)", +"481d4412": "transferSubOwnership(address)", "481dbaa4": "amountWithTip(uint256)", +"481ddf83": "calcDesiredAmount(uint256)", +"481e20bb": "addName(uint256,string,address,uint256,uint256,uint256,uint256)", +"481ea473": "investedRef(address)", "481ed14c": "YetAnotherUselessToken()", "481ef4fd": "getAdPriceDay()", +"481f1248": "preDestruct()", "481f9555": "ALLOC_SC()", "481fb72a": "numRentStatuses()", "481fcbf4": "ApolloCoinTokenSale(uint256,uint256,uint256)", "4820059f": "setDisallowedForMinting(address,address)", "482076b6": "preICOHolders(address)", "4820946a": "getContributorRemainingSaleAmount(address)", +"4820e9c4": "available_message_id()", +"48210772": "SetDiscipleSale(uint256,uint256)", +"4821e630": "CFD()", +"48220722": "tenDays()", +"482243d5": "setwithdrawGas(uint256)", "48224f67": "SUPPLY_FOR_SALE()", "4822d008": "hexControllerAddr()", +"4823907e": "addHunter(uint256)", +"4823b2e1": "to_de_coffer()", +"4824be1c": "getCurrentCardSupply(string)", +"4824fba6": "lockTokenFeePrice()", +"48257018": "provideCapital(uint256,uint256)", "4825fc0d": "_ownerWallet()", +"48260504": "withdraw(address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint8,address)", "48261921": "getLotteryPrizeInfo(uint256,uint256)", "4826a425": "sub_codicefiscale(string,uint256)", +"4826bc8f": "TransferToBackupAccount(address,address,uint256)", "4826e9c5": "UTC2MYT()", "482717a4": "GetAddrCallQty(address)", "482769f3": "distributeFunds(uint256,uint256)", +"482787b4": "HolderRedemption(address,uint256,uint256,uint256)", "482871ed": "_transferSigner(address)", +"482879aa": "sablier()", +"482885da": "FundsTransfer(address,uint256,bool)", +"48289787": "getLiquidationPrice(uint256,uint256)", "4828a833": "MultiTransfer()", +"4828c369": "consumeLimitedProofs(address,uint256)", "4828f4a2": "recover(uint256,uint8,uint256,uint256)", +"48292395": "addBountyUser(address,uint256)", "48293aae": "showKeys(uint256)", +"48295e34": "WSCRT()", "482961e1": "updateReading(uint256,uint256)", "4829b393": "Tombola()", "482a0bc9": "computeTokenAmountAll(uint256)", +"482a6193": "source(bytes,bytes)", +"482a6c57": "multitokenChangeAmount(address,address,address,uint256,uint256)", "482ae8a2": "lastBlock_v8Hash_uint256()", "482b27c9": "GetAdminAddress()", +"482b97c5": "RegistryUpdated(address,address)", +"482bd6b3": "approve_83(address,uint256)", +"482c18e3": "setUnitJadeStealingMultiplier(address,uint256,uint256,bool)", +"482c2fa3": "setFactoryContractSwitch()", +"482cb8e2": "setInviterXAddr(address,address)", "482ccedd": "_payFees(address,uint256,bytes4)", +"482cd6c5": "getBurnRate()", +"482d291c": "PurchasedTokensClaimUnlocked(uint256,address)", "482d3af0": "allOwnerOperations(address)", "482d51e0": "startNewGame()", +"482d6398": "matchDonorM2(uint256,uint256)", "482d7d5a": "_mine(uint256)", +"482d9628": "isLAdmin()", +"482d9ab2": "_availableCurrencyKeysWithOptionalSNX(bool)", "482da403": "buyme()", +"482e68b0": "setIncentivizedLeverageRatio(uint256)", +"482ed2a2": "depositedEther(address)", +"482edb07": "usdtBalance()", +"482f2024": "predictAddress(bytes,bytes32)", "482f63b0": "postMessage(bytes32,bytes)", "482fbae2": "_resultToRoll(string)", +"48301892": "students(uint8)", "4830868b": "setPrWallet(address)", +"4830a258": "buyERC(uint256)", "4830d5d9": "removeRestriction()", "4830e266": "buyReferral(address)", "4830e636": "setFreeClaimAllowance(address,uint256)", +"4830f3e7": "LAYERS(uint256)", "4830fd5f": "TotalLose()", +"483133fb": "clearAnchorRatio()", "48318cbc": "newIdTankProduct()", +"4831bdd9": "TokenClaimed(address,address,uint256)", +"4832a868": "arAsset(uint256)", +"4832b0e6": "getMostRecentDepositTimestampByOwnerAndToken(address,address)", "48330262": "priceIncrease_20_January()", "48330cf6": "updateAvailability(uint256)", "48335238": "FrozenFunds(address,bool)", "48338323": "getRanomSecret()", "48338756": "withdrawArbFunds()", "4833c47c": "getTokenByBid(uint32)", +"483456d5": "dusd_eth_oracle_address()", +"48348480": "getOTP(uint256)", +"48349da3": "exchangeSushiForUnderlying()", "48351617": "consultarSerie(string)", +"48355cf0": "ownerChangeGameAllocation(uint8,address,int256)", +"4835e621": "transferRelay(address,address,uint256)", "483699f4": "tokensFor1EthP6()", "4836f823": "salesRates(uint256)", "48370565": "tradeValue(address)", +"48373cc6": "_shutdown()", +"4837435f": "createUniverse(address,address,bytes32)", "4837715a": "___initialize(address,address,address)", +"483771bd": "userOnPools(uint256,uint256)", "48378eea": "getBool2()", "4837e2fa": "amountOfLegs()", +"4837e52e": "__ReferPool_init(address,address,address,address,address,address)", +"4837eb1f": "stakingStatus(address)", +"4837f83c": "uniLPBalance()", "48389870": "cutToInvestorsDividendPool(uint256)", +"4838c5f1": "emergencyWithraw()", "4838d165": "blackList(address)", +"4838ed19": "totalClaimable()", +"48390abb": "clearTime()", +"4839ac30": "preIcoTokenPrice(uint256)", "483a15ed": "getManagerFor(address)", "483a20b2": "setCrowdsale(address)", +"483a3dcf": "setBurnrateOFF()", "483a6cf9": "transferForExchange(address,uint256,string)", "483a83df": "setKYC(address)", +"483a8df9": "transferMelterAdmin(address)", +"483a8f5d": "getUserFlags(uint256,address)", "483b04e3": "angelExchangeRate()", "483b1a76": "isInPassFilter(address)", +"483b8cb1": "takeSwap(uint256,uint256,string)", "483ba09e": "setBitcoinBridge(address)", +"483c3842": "toBeDistributed(uint256)", +"483c5090": "changeOwnerMgr(address)", "483c8400": "MIN_FUNDING()", "483c8abd": "UpSuccess(string,address)", +"483c95f7": "burnFromPool()", "483d31e9": "sfc(uint256,string,string)", "483d45bd": "getProvider()", "483d8b77": "onehour()", +"483db68d": "longOffsetOf(uint256)", "483e3956": "killPoll()", +"483e5163": "hatcheryChicken(address)", "483e7872": "changeRealZipper(address)", "483ea316": "bindOrderStakes(address,int256)", "483eef18": "comminglerSellsProductSKUWithProRataIngred(address,uint256,string,uint256,string,string)", "483f1b18": "MigratedTokens(address,uint256)", "483f31ab": "consume(uint256)", "483f5082": "getPriceTicket()", +"483f5a7f": "sendToAddress(address)", "483f69c0": "HPToken()", "483fa94b": "placeorder(uint256,uint256)", "48401f1a": "joinBytes(bytes,bytes,bytes)", "48403ad4": "preICOtokensSold()", "4840d354": "XNGToken()", +"4840dade": "LogAuditRequested(uint256,address,string,uint256)", "48410f80": "hexToString(bytes32)", +"48415ada": "setMaxUnstakingAmountPerUser(uint256)", "48419aed": "tokensRemainingStage1()", +"4841cd36": "OASIS_DIRECT_PROXY()", +"4841d50b": "calculateNinetyPercent(uint256)", +"48423408": "xValue()", +"484267a4": "redeemable(address)", "484293a7": "VertexCoin()", "4842f639": "setBreedingAddr(address,address)", "4843b358": "withdrawalsAllowed()", "484412e5": "A5DToken()", "48447983": "QiMingCoinToken(uint256,string,uint8,string)", +"4844e43e": "challengeWinner(uint256,uint256)", "4844f367": "placeBet(string,string)", +"48454433": "remainingCurrentSets(address)", "484595fa": "encode(uint256,uint256,uint256)", +"4845be76": "token_network_deposit_limit()", "4845d3f8": "closingTimeExtensionPeriod()", "4845d40c": "withdrawATokens(address)", +"48461991": "ReleaseVoteResults()", +"484621d5": "metaPerformAction(bytes,uint256,string,uint256)", +"484685b0": "revokeApproval(address)", "4846f559": "getIsWinnerSelected()", +"4846ff7e": "cashout(address)", +"48474cca": "internalCheck(bool)", "4847a79c": "_transfer(address,uint256)", +"4847be6f": "performCreate2(uint256,bytes,bytes32)", +"4847e01b": "addPerson(string,string,uint256)", "48481979": "getHorsey(uint256)", "48481b8a": "ElepigCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address)", "4848b1a5": "setData(uint256,uint256)", +"4848d074": "NewBestLover(address,uint256,uint256)", "484916a3": "NewInvestor(address,uint32,uint256)", "48498729": "_fetchOrdersForPayer(address)", +"4849b6c8": "trade(address,address,uint256,uint256)", +"4849dc0d": "viewSingleDividendPotential(address)", +"4849f5c8": "heapTop()", +"484aba99": "updateAuctionStartTime(uint256)", "484b8d33": "setWalletAmount(address,uint256)", "484b973c": "ownerMint(address,uint256)", +"484c05e5": "listStudent(uint256)", "484c4056": "Redeemed(address,uint256,uint256,uint256)", +"484c51ba": "lastBakeTime()", "484c8675": "allocateTokens(address[])", "484c98af": "supplyAtIndex(uint256)", +"484c98f3": "addLiquidityUniPool(uint256,uint256,uint256,address)", "484cb173": "MiddleClass()", +"484ce829": "forceRefer()", "484db63f": "firstRate()", "484dd086": "preFundingStart()", "484dd472": "shobozilToken()", +"484ec046": "getDayBlockSpan()", "484ec26c": "onPayout(uint256,uint256)", "484eccb4": "lastGen0SalePrices(uint256)", +"484eebcf": "EventHatchEgg(address,uint256,uint256)", "484f4bc0": "noStoresSet()", +"484f4e7d": "basicMintCost()", +"484f4ea9": "BUSD()", "484f5a61": "GetChallengeInformation(uint256)", +"484f6e3e": "getMaximumMarketEndDate()", +"48503568": "addReader(address,address)", +"485040fb": "claim_handler()", "48509d2c": "updateCapsAndRate(uint256,uint256,uint256,uint256)", +"4850ba10": "_claimTime()", +"485112e3": "_dsrDeposit()", +"48514ebe": "dcsusdtInitialBalance()", "48519189": "MonedaAlcala(string,string)", +"4851d526": "OnClaimTokens(address,address,uint256)", +"4851f91a": "resolveEarnings(address)", +"4852980b": "GameInvited(uint256,address,uint256)", "4852a273": "setWhitelistStatus(address,address,bool)", "4852e54b": "SolarNA(address[],uint256[])", "48538112": "totalRaisedAmountInCny()", +"4853ae1b": "Transfer(address,address)", +"4853b194": "getContextInfo(uint256)", +"4853b4f5": "setVSwaprouter(address)", +"4853c407": "certifyAdmin()", +"4853d8a5": "mint(address,address,uint256,string,string,string,uint256,uint256)", "485458a1": "GetContractStageTermination()", "48546971": "closeIco()", +"48547d69": "slots()", "4854bde0": "pvt_plmt_set()", "485587a2": "employeePoolTokens()", "48558be7": "getOnTokenTransferValueValue()", "48560630": "bonus3Ends()", +"4856177e": "gstDeploy2(uint256,bytes)", +"485686f6": "onboardSuperAdmin(address,address)", +"48569696": "add(uint256,address,bool,bool,bool)", +"48578237": "approveToOwner(address,uint256)", "4857d52d": "setLiquidityParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "48582a2a": "units40percentExtra()", +"48588ca4": "calculateUnstake(uint256)", +"4858b015": "stickerPack()", "48593bae": "getEnumValue()", +"4859477a": "ticketIsVaild(address)", "48594f43": "powerAddr()", +"4859b3f4": "getLoan()", "4859f430": "registerVehicle(string,string,uint8,address)", "485ac9fd": "_canSetGameOver()", +"485ae168": "ownerBuyBackAndBurn()", +"485b10bb": "setVestingRate(address,uint256)", +"485bc78e": "twoooxCrowdsale(address,string)", +"485be402": "withdrawFunds(address,address,address,address)", +"485c4dc6": "d2AssetAddress(uint256)", "485c5e96": "generateTokensAll(address[],uint256[])", +"485cbea3": "getRewardPending(uint256,uint256)", "485cc955": "initialize(address,address)", +"485d3ad7": "maxGameId()", "485d5d7b": "TSTORZCv1()", "485d5dd2": "DayInSecs()", "485d7d94": "removeAuthorized(address)", "485d992c": "getDoc(address)", "485dc6cf": "create21KittiesTokens()", +"485e0496": "approve_739(address,uint256)", "485e16a5": "summReserve()", +"485e2459": "refundStake(uint256)", "485e35d3": "updateWhiteList(address,address,bool)", "485e82d7": "tokenIdsForTeam(uint32)", "485f2ce3": "AccendiCassaAutomatica()", "485f7a7e": "preSaleAllotment()", +"485feabe": "numBlocksPerPeriod()", "4860165c": "destroyIdentifier(bytes32)", "48601a7d": "getTxnNum()", "486083fe": "itemLottery()", @@ -41464,13 +75941,19 @@ "4861b2cc": "Create(string)", "4861f39b": "getDepositedOrderDetails(uint256,address)", "486201ab": "deapprove()", +"48620589": "totalContractDeposit()", +"48622018": "MAX_ITEM_ID()", "48624e44": "ATTPlaceHolder(address,address,address)", +"48625469": "accreditation(address)", "4862e650": "setVerificationCodeHash(string)", +"4862fe85": "govUpdateSettings(address,uint256,string)", +"48634581": "getCurrentSwapAmount(uint256)", "48636254": "setWhiteBacker(address,bool)", "4863ba17": "setLibraryAddress(address)", "4863ed97": "setCoins(address,address)", "48640aba": "phase1WeiRaised()", "48642e21": "bleachDailyLimit()", +"4864ca17": "bulkTokenSend(address[],uint256[],string)", "4864d140": "baseAmount()", "4864d8d9": "activeStage()", "48650338": "withdrawDividends(address)", @@ -41480,268 +75963,508 @@ "4865c7bf": "timeInfo()", "4866352b": "scrapCounter()", "48663e7d": "modifyHoldings(address,uint256[],uint256[],bool)", +"48663e95": "safeBox()", "48664c16": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"48674922": "externalFunction(address,uint256,address[],uint256[])", +"48677dbe": "getMostPremium()", "4867ec4f": "decodeParamOp(uint256)", "4868204b": "FundTransfer(address,uint256,uint256)", "48686205": "DevConSchoolReward()", "48688367": "fundMintingAgent()", +"48689540": "SetSafePriceFeed(address)", "4868ab47": "Yumerium()", +"48693688": "betForJackpot(uint256)", "4869687b": "getAgreedMediators()", "4869854a": "StfuTokenCrowdsale()", +"4869929a": "paymentsSet()", "486a03e0": "approveMappingProposal(address,address)", "486a7e6b": "burnAmount()", +"486a85d6": "maxTotalVMR()", +"486b6cf9": "addEpochReward(uint256)", "486b7217": "getnumber()", +"486b9f88": "lastHarvest(address)", +"486c1585": "convertToValueTokens(uint256)", "486c182c": "minAcceptEther()", "486c363d": "_transfer_token(address,address,uint256)", "486c50f3": "getDiscountHourglass(bytes32,uint8)", +"486c5971": "getExpectedAvgPrice()", +"486c96fa": "primaryWallet()", +"486ca157": "founderTimelock()", +"486ce80c": "getBetting(uint256)", "486d6aa8": "factorReward()", "486de794": "_pay(address,uint256)", "486e60f5": "createGoldBuyOrder(uint256,uint256)", "486e66da": "hungry(uint256)", "486e97ad": "VLUToken()", "486ea48d": "Nodes()", +"486ed6e2": "calculateBurnDivisor(uint256,uint256,uint256)", "486fc7e8": "tokenOwnership(address)", +"486fe981": "pairUpdateIdx()", +"486ff0cd": "versionRecipient()", +"486ff763": "getCirculatingUserKrk(address)", "48700c7c": "EVEN()", "48709183": "bountyBeneficiariesCount()", "4870b81d": "transferToWallet()", "4870dd9a": "PERCENT_DIVISOR()", "4871052b": "LogSignature(address,bytes)", +"48712bbe": "incBalanceOf(uint256)", "48719120": "renewFarmerCertificate(address,uint256)", "4871c4c1": "ownerWithdrawTo()", +"4872100a": "quickAuditFiatDelivered(uint256)", "48724227": "KickOwned()", +"487257af": "adminProfitWithdraw(address,uint256)", "487260bb": "startBlockBonus()", "487269fb": "VLCToken()", "48727dca": "TradeBitToken()", "4873c721": "_remainingBlocks(address)", +"48746c41": "migratePompContract(address)", "48749616": "getPoolInformation()", "4874a41f": "Tfarm()", "4874e62d": "concat(string,string,string)", "48758697": "getRarity(uint256)", +"4875e9fd": "uploadVideo(string,string,string)", +"4875ea55": "reclaimTokens(address)", "487621cc": "addNewbond(uint256)", "4876a339": "accept1(uint256,uint256)", "4876f3e5": "comfirmRedeem(uint256)", +"48785016": "removeAccounts(address[])", +"4878d1e4": "frsb(uint256,uint256,address[],uint256)", +"4878d26e": "abandonPoint()", "48794149": "credosReserveAllocation()", "4879e07c": "happyNewYear()", +"487a2395": "price(uint256,uint256)", "487a5057": "getGameStart(address,uint256)", "487a6e32": "deliver(uint64,bytes32,uint64,bytes32)", "487a8043": "receiveApproval(address,uint256,address,bytes,bytes)", "487a9e27": "USD_CAP()", +"487abbd7": "setFailsafeMaxInitialDiscount(uint256)", +"487b5c20": "getProtocolFeeMultiplier()", +"487ba353": "totalPoolUSDTCollateral()", +"487bf082": "dsr()", +"487c0685": "_nindexes(string)", +"487c70fc": "_maxTokens()", +"487c88ac": "SYNC_STATUS_TIMEOUT()", "487cd86f": "right34(uint256)", +"487cda0d": "depositTokens(address,address,uint256,uint256)", +"487d2d00": "getCurrencyAssetVarMin(bytes4)", +"487d48fb": "GuardianVendToTime(uint256)", +"487e0b06": "_decode_sol_bytes10(uint256,bytes)", "487e1d1f": "getNameOfAddress(address,address)", "487f3f06": "team_address_count()", +"487f4cf3": "availableLandResources(uint256,address[])", +"487f6630": "validContracts(address)", +"487f7540": "AccountCreated(uint256,address)", +"487fa716": "saleBonusICO4()", "487ff8b6": "winningaddr()", "48803406": "removeFundAccount(address)", "48807db1": "getPI_edit_12()", +"4880f951": "balanceOfUnderlying()", "4881148e": "safeGetPartialAmountFloor(uint256,uint256,uint256)", "4881ae73": "add(uint16,uint16)", "48823786": "allstocksFund()", "4882419d": "isEpocum()", +"488269c0": "depositAll1()", +"4882b6d2": "numDIDRequiredToAddTaskParameter()", +"4882d291": "ownerToNumActiveIncubations(address,uint8)", +"48832f32": "drmTransferToTeam(address,address,uint256,string)", +"4883400d": "enterMarkets(address,address[])", +"4883666e": "WorkStarted(uint256,address)", +"48838f45": "topUpChannel(address,uint32,bytes32,uint64)", "48839789": "ProofOfAIDS()", "4883b6ce": "CryptoTorch()", +"4883c329": "allPercentWithdraw(address)", "4883c9dc": "prevHodlers()", "48849c5a": "blockTransferFrom(address)", +"4884ef74": "revokeTransaction(bytes32)", "4884f459": "buyListing(uint256)", +"48852fc4": "getNirvanaStatus(uint256)", +"488551af": "getTokenHandlerLimit()", "4885b254": "batchTransferFrom(address,address[],uint256[])", +"4885bd5f": "bondingPeriodInBlocks()", "4885d732": "TokensAllocated(address,uint256,uint256)", +"4885fe11": "setMinimumTimeBetweenExecutions(uint256)", +"488603df": "addAllowedMinter(address)", +"4886654e": "eurs()", "488683f3": "_Token(string,string)", "48868ac8": "sanityCheck(bytes32,bytes32)", "4886d2d5": "setIsOver(bool)", +"4886f62c": "completeMigration()", "48870630": "abi()", "488725a0": "versions(address)", "48887c8b": "setFreeAlien(uint16)", "48889813": "mintedPercentOfTokens()", "4888bc11": "getCompensation(uint256,uint8,address)", "4888c619": "cryptocompareBtcOracleUrl(bytes32)", +"48891aa9": "taxedAmount()", "48894ad6": "FiveBalance()", +"48896480": "maxHighRateD()", +"48897c52": "flush(address[])", "488981cd": "countCourse()", "4889ca88": "receiveApproval(address,uint256,address)", "488a24c6": "isWalletContract()", "488a6705": "AddConsentData(uint256)", +"488a8cb4": "withdrawERC20TokenTo(address,address,uint256)", "488ab2c0": "TOKEN_EXCHANGE_RATE()", +"488b1bc5": "teamToken1stReleased()", "488b3538": "shares(address,bytes32,int256)", "488b380b": "setLpIsStart(bool)", +"488bb6d7": "legendaryWhiteList(address)", "488bfa0b": "claimPaymentTokens(address,uint256)", "488c1709": "setRefundAgent(address)", "488c65fc": "stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)", "488c7951": "abstractFn(uint256)", "488cec69": "tokensAreAvailable()", +"488d8695": "_privateSeedTokens()", "488dc208": "updateUrl(address,bytes32[5],address)", +"488dc79a": "FOUNDERS_AND_EMPLOYEES_SUPPLY()", +"488df87f": "changePriceSource(address,address,address,address,uint256)", +"488e05dc": "testDataTypeUint()", +"488e7f2d": "mintLock()", "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)", +"4890087f": "HERO_TYPE_OFFSET()", +"48905b02": "buyCrops()", "48906c27": "evaluateMany(address,uint256,uint256[],uint256[],uint8[])", +"489082df": "takeToken(address)", +"4890bb51": "UpgradeToLevel2FromLevel1()", "48916211": "checkSigs(bytes32,bytes32,uint256,bytes)", "48917d5d": "lastDrawTs()", "4891c06a": "contributionPool()", "4891f401": "PRICE_1()", +"4892e8e8": "getChildren()", "4892f0af": "tokenPorter()", "489306eb": "oraclize_query(string,string)", "48931352": "TOTAL_SUPPLY_CAP()", +"48931e25": "getPlotId(uint256)", +"4893d1ff": "LogInfection(uint256,bytes32)", "4893de2a": "rewardUnicornAmount()", "4893ed5b": "proposedUserKeyPendingUntil()", "48940815": "doTriggerJackpot()", "48941312": "CoinAdvisorCrowdSale(address,address,uint256,uint256)", +"489432fd": "burnSignature(string,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"489498b8": "createElection(bytes32,uint256[],uint256,uint256)", "4894e37f": "__callback(bytes,string,bytes)", +"489541a3": "maxMultiItems()", "48957fb8": "getAyantDroitEconomique_Compte_4()", +"489582a4": "approveLIFEForContract(address,uint256)", +"4896181f": "Redeemed(address,uint256)", "4896672e": "updateSalePrice(uint256,uint256)", "489667e6": "_isSynthesizingAllowed(uint256,uint256)", +"48968864": "ReferralTokensSent(address,uint256,uint256)", +"4896a6f8": "getApplicationData(address)", +"48972abd": "hecoPoolId()", +"48979fc0": "resolveDR(uint256,uint256,uint256)", +"4897cae8": "releaseBeneficiaryAllotment(address)", "489807a5": "Donate(uint256,uint256)", "4898556e": "SaleStopped(address,uint256)", +"48986e4c": "handleIndex(bytes32,bytes32)", "4898722d": "setSink(address[],uint256[])", "48989182": "ethMax()", +"4898d294": "takeExchangeOrder(uint256)", +"4898ef5f": "StakeMultiSendToken()", +"489967b4": "benificier()", "489979a3": "allocateTopupToken(address,uint256,uint256)", "4899e4c6": "addrDistribution()", +"489a0fdc": "mintGift(address,uint256)", +"489a8916": "getExpiresOn()", +"489a9020": "listGameUser(uint256,address)", "489acecc": "requireMultiple(uint256)", "489b1636": "icoPhaseCountdown()", +"489b3fee": "getExpiringUnitListPlayer(address)", "489b5046": "GetBankerCandidate(uint8)", "489ba092": "setNameLink(string,string)", +"489be7cb": "destroyBTCPToken(address,uint256)", "489c1202": "isGuard(address)", "489c14fd": "pathAdvisorVault()", "489c18b0": "getLocksLength()", +"489c1b25": "FAILURE_PAUSED_MESSAGE()", "489d2104": "changePaymentContract(address)", "489d2844": "notifyBuyToken(address,uint256,uint256)", "489d426e": "ratePreSale()", "489da639": "COIN_SUPPLY_COMPANY_TOTAL()", +"489e0b2d": "regulate(uint256,uint256[])", "489e5656": "MAX_CANVAS_NAME_LENGTH()", +"489ea320": "directory(address)", +"489ed2e9": "isOperationDisabled(uint8)", +"489ed47c": "consumption_value()", "489f3c88": "ping(address,uint256,uint256,uint256)", "489fde35": "setEnforce(bool)", +"48a0c5bd": "getAmount1Delta(uint160,uint160,uint128,bool)", "48a0c8dd": "isDepositable()", "48a0d754": "available()", +"48a0ef50": "Cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,string)", "48a0fa29": "toggleTokenExchange()", +"48a14acb": "sellVault()", "48a15250": "setBurnRequestUintMap(uint256,string,uint256)", "48a16b8c": "_itoa(int256,uint8)", "48a1befb": "UserFactory(address)", +"48a1d0ec": "onePercent(uint256)", +"48a1e66b": "premint()", +"48a23784": "BSC()", +"48a2a789": "ShowMasterChefETH()", +"48a31229": "getRemainingVestingDays()", +"48a357bc": "speeds(uint256)", "48a3cbdf": "fundTeam()", +"48a40a64": "TokenSold(uint256,uint256,uint256,address,address,string,uint256[])", +"48a46473": "setMinTokensBeforeSwap(uint256)", "48a46bd3": "isRejected(address)", "48a490fb": "transferFromTreasury(address,uint256)", +"48a4e513": "buyBackSeparately(address,uint256,bool,uint256)", "48a50a54": "saleClosedTimestamp()", "48a54fc5": "checkContract(bytes32)", "48a5d7bb": "AssetPool(address,uint256,uint256,uint256,uint256)", "48a60b6c": "getPlayerBets()", +"48a611c8": "deployGatlingGun(address)", "48a73e96": "getFreeNapkins()", "48a76740": "TokenData(uint256,uint256)", +"48a7a008": "votesSpentThisRound(uint256,address)", "48a7f1f9": "proposeOfferingContract(address,address)", "48a860dd": "confirmTransactionAfterExpiryFee(uint256)", "48a87fa8": "emptyTTT()", +"48a8856c": "govenors2(address)", "48a8b427": "calculateShareCrystal(uint256)", +"48a8e4bc": "WhitelistingLog(address)", +"48a9151f": "_getCompInvestNum(uint256)", "48a935e2": "setIndividualCaps(address[],uint256[])", +"48a93a0d": "setRafflePrice(uint256)", +"48a95ade": "showUnderlying(address)", "48a9866b": "kill(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "48aa71f4": "isInCrowdsale()", +"48aaa4a2": "setCandidateMinStake(uint256)", "48aac336": "getNumberOfParticipantsPerLevel()", +"48ab3ea1": "LOG_PolicyManualPayout(uint256,bytes32)", "48ab41d3": "getPOOL_edit_3()", +"48ab5e6c": "set(uint8,uint256)", +"48ab6a27": "getContractInitialAddress(string)", +"48ab8b2a": "drainValidatorShares(uint256,address,address,uint256)", "48ac0f3c": "CORPORATE_SUPPLY()", "48acce46": "ponziAddress()", +"48acd29f": "callBalanceOf(address)", "48acd9b1": "changeFeeAccount2(address)", "48ad5cd0": "product3()", +"48ad8572": "lockWaitTime(bytes32)", "48adfbdb": "getModerator()", +"48aef370": "_unsetFee(bytes32)", +"48aefc32": "isApproved(bytes32)", +"48af6b15": "setNewMinter(address)", "48afc0fe": "FOMO3DLite()", "48afd1b3": "hasReturns(address,uint256)", "48afe4f5": "currentPersonalLimit(address)", "48b15166": "blockTime()", +"48b164d2": "hatchery()", "48b17b64": "currSaleComplete()", +"48b1d74a": "addBSCSwapWallet(address)", "48b24b88": "IAM_PER_ETH_BASE_RATE()", +"48b294b6": "getOwnersByIdx(uint8)", +"48b2b9a4": "addToTreasure()", +"48b309ca": "__isVault(address)", +"48b35a57": "casting(uint256)", +"48b3c2bb": "mintStableBond(uint256,uint256)", "48b43020": "_setDistrictAddresss(address,address)", "48b45d92": "isRequestApprove(bytes32)", "48b49fa7": "buyGem(uint256)", "48b4d3a4": "EmitTransactionIds(uint256[])", +"48b4e484": "isOnlyAdmin()", "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)", +"48b68140": "ownerPayable()", +"48b69103": "calculateMintable(uint256)", +"48b6b24d": "saleStat(address)", +"48b70d6b": "whitelistChecking(address)", "48b741de": "greaterPriceMsgComparator(uint256,uint256)", "48b75044": "release(address,address)", "48b84cde": "testCreateElectionOptions()", +"48b8ff4f": "TokensReceivedSinceLastCheck(uint256)", "48b8ff83": "tokensForArtist()", +"48b92c20": "powerToCost(uint256)", +"48b96687": "oraclePriceCallback(uint256,uint256)", "48b9ed30": "getdisdone()", "48b9f88f": "blockDiff()", "48ba2d51": "LogBidRewardClaimed(uint256,address,uint256)", +"48ba5b77": "totalRewardsPerEpoch()", +"48ba9f0c": "tBoxManager()", "48bafd0e": "newGame(string)", +"48bb082b": "setGain(address)", "48bb4067": "teamIssuedTimestamp(address)", "48bb4347": "_checkOpenings()", +"48bb51f2": "setManGasPairAddr(address)", +"48bb9069": "POT()", +"48bbd107": "mintMaster(uint256)", +"48bbde5d": "addUploader(address)", +"48bbf032": "getPlayerSlot_SideA(address)", +"48bc0a40": "wait(address)", "48bc2a21": "bonusSecondIco()", "48bc3e2a": "twoStepRate()", "48bc4edf": "startAndSetParams(uint256,uint256)", +"48bd19a1": "set_ROUND_1_START_TIME(uint256)", "48bd64c0": "getArrayHashLibry(bytes16)", +"48bd9b31": "approve_659(address,uint256)", "48bdaaff": "TradeStatus(address,address,uint256,uint256)", +"48bdd198": "lockVault()", +"48be01c6": "initialize(string,string,uint8,uint256,address,address[],address[])", "48be4030": "INDToken()", +"48be8cda": "configureDao(address,address,uint256,uint256,address)", "48beae6a": "kkTestCoin1()", +"48beb292": "setRecipientEthAddress(address)", +"48bf1971": "updateAccessControl(bytes32,address,bool,bool)", "48bf51f5": "setInterestRatePunitory(uint256)", "48bf9179": "Extradecoin(address,address)", "48bf9cea": "serialNumberIsUsed(string)", +"48bfc467": "deployCoordinator()", +"48bfda39": "mulr(uint256,uint256,uint256)", +"48bfe40f": "multisetUserCategory(address[],uint256,address)", "48c0b782": "intermediariesCount()", "48c0dc5b": "Inonit(uint256,string,string,string)", +"48c172b6": "getBattleUnit(uint256)", +"48c1d5e9": "GetStuckTokens()", "48c1ee9b": "wadmin_transferOr(address)", "48c20a24": "getChildsAmount(address)", "48c22f3f": "RateClient(uint256)", +"48c25902": "SetPublisherAffiliate(uint256,address)", "48c26e22": "purchaseRate()", +"48c284e1": "DAOEcosystemDoq()", "48c2f845": "purchased_tokens()", +"48c35ad4": "projectIds(uint256)", +"48c37203": "getUserReferralTotalBonus(address)", +"48c3b537": "pairTokenAddress()", +"48c3c51f": "adminProfitWithdraw(uint8,address)", +"48c4086f": "setSharesRequestor(address)", "48c40dbd": "transferTokensThroughProxyToContract(address,address,uint256)", "48c44712": "refundERC20(address,address,uint256)", +"48c4aa70": "__setRegistry(address)", "48c4cae9": "setNameReaderId(bytes32,bytes32)", "48c4d7ce": "descendingCount()", +"48c525ed": "viewUserLevelExpired(address,uint8)", "48c54b9d": "claimTokens()", "48c5be67": "numDistributionsRemaining()", +"48c5e307": "divi()", +"48c65648": "SWAP_ARTT_for_ETH(uint256)", "48c6af04": "test_oneInvalidEqString()", "48c6e2f7": "BaoFengCheng(uint256,string,uint8,string)", "48c7a0bf": "SharePrice()", "48c7f438": "setOldest()", "48c81c16": "GamersToken()", "48c834c0": "tier4Rate()", +"48c84e68": "accrueBonus()", "48c875cf": "resetRequest(string)", +"48c88923": "getGroupIndexer(uint256)", +"48c88d4e": "inversionInicial()", +"48c8a266": "voteWeightedRandomQuip()", "48c8cd41": "dateTime()", +"48c8f882": "setBudget(uint64,uint256,string)", "48c91284": "setM1(address)", "48c981e2": "sendEther(address)", "48c9ecf8": "allowTokenOperations(address)", +"48ca1300": "swapBorrowRateMode(address)", +"48ca25f2": "supplyVault(uint256)", +"48ca72e2": "Revaluation(uint256,uint256,uint256,uint256)", +"48ca8fd3": "MaxPhase2Updated(uint256)", +"48caa206": "internalInventoryMin(address)", +"48cb55c7": "deposit(address,address[],uint256[],uint256[])", "48cb5aeb": "Easticoin(uint256,string,string)", +"48cbf570": "tokenEXNG()", "48cc38e1": "nestedFirstAllToAll2(uint256)", +"48cc78a2": "stringMap(bytes)", "48cc7b6e": "startForge()", +"48cd4258": "prizeDelay()", "48cd4cb1": "startBlock()", +"48cd5a60": "curRTicketSum()", "48cd65d9": "getInPlayGames()", +"48cda04a": "oneTimePadDecryptWithMasterKey(bytes,bytes,bytes32)", "48cdb451": "initializeVesting(address,uint256,uint256)", +"48ce19f4": "curValidators()", "48ce382d": "addActivityAccount(address,uint256,string)", +"48ce8584": "setPresaleTime(uint256)", "48cebd67": "presaleSold()", +"48cec680": "setWithdrawSlipCheck(bool)", +"48cf0884": "calculateUserShare(address)", +"48cf4c88": "burnSignature(bytes,address,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"48cf6591": "getUSDPPriceForBTCB()", "48cf9e5c": "getGroupIndex(uint256)", "48cfa939": "minContribution_mBTC()", +"48cfb756": "setFelice()", "48cfc6c6": "crowdSaleEnabled()", +"48cff27f": "recordContribution(address,uint256)", +"48d02328": "startChangeEffectiveSupply(uint256)", +"48d0973e": "setAirdroperPerBlock(uint256)", "48d0aff3": "drainexcess()", +"48d0c121": "saave(uint256)", +"48d0f7f5": "Converted(address,uint256,address,address,uint256,uint256)", +"48d134a0": "raiseTokenToTokenTransferInput(uint256,uint256,uint256,uint256,address,address)", "48d21789": "burnFunction(address,uint256)", +"48d23036": "ProofFailed(bool)", +"48d23829": "changeRelayer(address)", "48d24f35": "transferMintingAddress(address,address)", "48d26dd1": "finalizeType()", +"48d2b4e3": "Transactions(bytes32)", +"48d2b708": "getUserReleasedToken(address)", +"48d2d3a2": "setReferReward(address)", "48d2df48": "userBuys(address)", "48d317ce": "stepTwo(int256)", "48d3297c": "stageStatus(uint16)", +"48d3321f": "transferFromFrozenAccount(address,address,uint256)", "48d34bc6": "getHashInternal(address,uint256,uint256,uint256,uint256)", "48d37a58": "withdrawPrize()", +"48d399e7": "collateralAddress()", +"48d3ceb0": "stakeAmountLv2()", +"48d43fcb": "artworkList()", +"48d44bd1": "PROJECT_FEE()", "48d453ee": "gcEndTime()", +"48d4681b": "tokenHxbLockedBalances(address)", "48d47e7e": "clc()", "48d4eaf7": "storeData(bool,uint256,address,bytes32,string)", +"48d507d7": "acceptedCodes(bytes32)", "48d51a0d": "submitProposal(bytes32,uint32,uint32)", "48d597e5": "addFromMapping(uint256,uint256)", "48d5a5c0": "consensusAddress(address)", "48d6002a": "otherPlayer(address,address[])", "48d6047c": "WhitelistWalletUpdated(address)", "48d64fd5": "changeTradeTracker(address)", +"48d67e1b": "decayPeriod()", +"48d6bbc2": "transmit(address,uint256)", "48d6ca55": "getChangeFeeAmount(uint256)", +"48d73fed": "purchaseRate(uint256,uint256,uint32,uint256)", +"48d74fd6": "TransferManual(address,address,uint256[],uint256[])", +"48d7d9eb": "getRevenue()", "48d7de63": "setTenant(bytes32,address,uint256,string)", "48d82608": "InvestmentPolicyChanged(bool,bool,address)", "48d848d0": "returnBoolean(bool)", +"48d85b38": "usersActiveX30Levels(address,uint8)", +"48d89b05": "modifyTokenLock(address,uint256,uint256,uint256,uint256)", +"48d89b6b": "claimBeneficiary()", "48d8bb3f": "setIco(address,address)", +"48d90c49": "kstPerBlock()", "48d9614d": "GetFee()", "48d9a374": "blockTransfer(address,uint256)", +"48d9be16": "bidAmount(uint256)", "48da08e6": "SilverCoin()", "48da1532": "node_side(uint256)", +"48da1617": "CEx(address)", "48da60af": "limitClosedSale()", "48da95b8": "VirtualExchange(address)", "48db409a": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64)", "48db5f89": "player()", +"48db8cc4": "work(uint256,address,uint256,bytes)", +"48dc0b6e": "InterestRate()", +"48dc35af": "EarningsWithdrawn(address,uint256)", +"48dc5893": "calculateAmount(uint256)", +"48dc9d2b": "setCurve(address)", "48ddc01f": "changeFisherMansFeeCalculator(address)", "48dddca8": "minSpend()", +"48ddf57d": "createNewTokenMetadata()", "48de0cdc": "withdrawInBatch(address[],address[],uint256[])", +"48debd24": "paymentHandlerCancelled(address,uint256)", +"48dec2a7": "userDetails(address)", +"48dec51d": "setLocality(uint256[],string)", +"48df121c": "minersPaginated(uint256,uint256)", "48dfe175": "tier3Total()", "48e021e9": "weiCostOfToken()", "48e06300": "isEquipedAny2(address,uint256,uint256)", @@ -41749,69 +76472,122 @@ "48e0f410": "fundRaising()", "48e11f70": "OMGCatCoin()", "48e12ae3": "getAllowancePeriod()", +"48e196d1": "completeSetSpender()", "48e1a760": "getttttttt(uint256)", "48e1c18b": "itemsOwned(address)", +"48e1efca": "getcrowdsaleClosed()", "48e252ab": "CryptoMilitary()", +"48e257cb": "c2()", "48e25bd2": "WinToken()", +"48e266a8": "popPerBlockCycleThree()", "48e278f9": "NauticusToken()", +"48e2f808": "userFundedProject(uint256,address)", +"48e30c3f": "collateralRequirement()", +"48e369a3": "printDildoUpAndRefundRest(address,uint256)", "48e37220": "presaleDateStart()", "48e3a033": "mulPay(address[],uint256[])", "48e3a064": "StandardCampaign(string,uint256,uint256,address,address)", +"48e3e530": "getRedeemByLpTokenAmount(uint256,uint256)", +"48e4163e": "userBorrowPart(address)", +"48e43af4": "pendingToken(uint256,address)", "48e4e297": "allowedToPurchase()", +"48e51e20": "UnfreezeEthHxpLP()", +"48e56223": "inCaseDarkStuck()", +"48e56fa1": "three_pool_to_collateral(uint256)", "48e591ac": "getVote(address,address,uint32)", "48e5c71f": "whoIS(string,bool)", +"48e5d9f8": "rewardData(address)", +"48e5f608": "RecommandCount(address)", "48e61782": "left4(uint256)", "48e624eb": "holderAdvPercent(address)", "48e66722": "getRedeemRequestsLength()", +"48e68950": "verifyPayment(bytes32)", "48e68e30": "synthesizeWithAuto(uint256,uint256)", "48e6b393": "test_logs()", +"48e6f296": "termInDays()", "48e7575d": "ecrecoverFromSig(bytes32,bytes32)", "48e76563": "oraclize_setNetworkName(string)", "48e7a100": "reparametrizeMultisig(bytes32,uint256)", "48e837b9": "createGame(uint256)", +"48e83d64": "withdrawDailyLimit()", +"48e889ed": "getTrainerInfo(uint8)", +"48e92587": "stakesBySender(address)", "48e9657d": "getSignatureAtIndex(string,uint256)", +"48e989c6": "input_uint256(uint256)", "48e9f1ea": "EPXCrowdsale()", "48ea97be": "tokenSalePausedDuration()", "48eaa435": "safeExp(uint256,uint256)", +"48eab007": "debtToEntry(bytes32)", "48eab053": "fourthTeamWithdrawal()", +"48eac902": "forge_running()", "48eaeb72": "BPCC(uint256,string,string)", "48eb4ac1": "getAllMilestonesHashes()", "48eb76ee": "attacker()", +"48ec02f0": "splitStakeReward(uint256)", +"48ec1f28": "getBancorConnectorsByRelay(address)", +"48ec2e80": "allocationsTotal(address)", "48ec8a0c": "getSecurityLimits()", "48ed190a": "lastBlock_f11()", "48ed1e3b": "LookUpAvailableDivInt(address)", "48ed3e00": "date610()", +"48ed7b82": "STAGE_6_BONUS_RT()", "48ed994c": "newLottery(uint256)", "48edbf1d": "SKS()", +"48edcd6d": "store_str(string)", +"48edef5b": "setCFOAddress(address)", +"48ee6ab1": "getLinkUser(bytes32)", "48ef245b": "createFaucet(string)", +"48ef3f03": "Players(uint256)", "48ef5aa8": "UpdateMaintaining(bool)", "48ef670e": "UportRegistry(address)", "48f001e6": "decreaseFreezeValue(address,uint256)", +"48f02557": "bnbPriceInUSD()", "48f05187": "scheduleCall(address,bytes4,bytes,uint256)", "48f082e8": "dayToMinusToken()", "48f0b8e3": "getNumberOfGamesCompleted()", "48f134f6": "closeSetup()", +"48f1cfdb": "changeUnlockTime(uint256)", "48f1e9c2": "getCertificationDocument(address,uint256)", "48f2090b": "distributionPercent()", "48f213e0": "PER_USER_AMOUNT()", "48f221b6": "changePartner1(address)", +"48f25dab": "disarmCommits(address)", +"48f33cf0": "lockForSwapTo(address,uint256)", +"48f343f3": "items(bytes32)", "48f36144": "claimOracle()", "48f3e6f4": "getFourthAddressBalance()", "48f549a4": "CreateToken(address,uint8,uint16)", +"48f5feff": "endStake(address,uint256)", "48f6647b": "matchWithTheirs(uint256,uint128,uint16)", "48f69212": "YELLQASH()", "48f6cc0a": "_removeManager(address)", +"48f74b7a": "changeLifeTime(uint256)", +"48f7a2c6": "totalSupplyRefer()", "48f7f2a3": "daoFactory()", "48f83e86": "authorizeAccess(address,address)", +"48f8459c": "abiEncodePacked()", +"48f86c11": "release_NFT(address,uint256,address)", "48f8fe69": "fnv(uint256,uint256)", "48f918e0": "reclaimLeftoverEth()", +"48f94464": "balanceOff(address)", "48f95a7d": "depositsCountForUser(address)", +"48f962cb": "DowngradeToBasic(bytes32)", +"48f96506": "govSetMIGRATION_TIMESTAMP(uint256)", +"48f9a60f": "gradeMap(uint256)", "48f9e246": "requestImplChange(address)", +"48fa21ee": "ownerEthWithdrawal(uint256)", "48fab2b0": "emitOracleUpdated(address)", +"48fb53bc": "CurrentBurnFee()", +"48fb61a8": "requireAmountGreaterThanZeroInternal(uint256)", "48fb7332": "INTREPID_MAX_PRICE()", +"48fbfcde": "setTotalRestrictions(address[],uint256[])", "48fc66e9": "NzmLToken()", "48fcb4e8": "getFrozenAccountCoinCount(address)", +"48fdab02": "depositCollateralViaGaslessRequest(address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", "48fdb8c1": "partnernames()", +"48fde295": "setSettings(bytes32,address)", +"48fe2807": "getWhitelistPending()", +"48fe5f8b": "sell(bool,uint256,uint256,uint256)", "48fee60f": "Criptohubcoin()", "48fefd9b": "supportsToken(string,address,address)", "48fefed2": "setNewGreeting(string)", @@ -41820,80 +76596,156 @@ "48ff1387": "rebuy(uint256)", "48ff15b3": "acceptManager()", "48ff30ff": "Breakup(uint256)", +"48ff5665": "tokenBalances(address,uint256)", "48ff6525": "applyRedenomination()", +"48ff76aa": "removeWithdrawToGroup(address[])", +"48ff82ae": "Trade(bytes32,address,uint256,address,uint256,address,address)", +"48fff63f": "addLiquidityToUniswapJoCorexWETHPair()", +"48fff692": "getLineUserId(uint256,uint256)", +"4900526f": "stakeStarted(address)", "490052a8": "playerRoll(uint8,uint8)", +"490069fa": "dataControlAddr()", "49007329": "CCCRSale(address)", +"49008ee4": "addressToMoneyPot(address,uint256)", "4900b48c": "checkOracle(address,address,address,bytes32,uint256[])", +"4900c02f": "collectProtocolFee(bytes32)", +"4900ca51": "initiateAcquisition(uint256)", +"49010f76": "fnxTokenBalance(address)", +"490145c8": "propose(address[],uint256[],string[],bytes[],string,string)", "4901a205": "canShelf(string,address)", +"4901d711": "SpecialNFT()", "490203a7": "getMiningReward()", +"49021dc7": "transerToContract(uint256,uint8,uint256,uint256,bool)", +"49023276": "externalSafeAdd(uint256,uint256)", "4902d163": "pendingOwnedOwner()", "4902e4aa": "removeSuperAdmin(address)", "490377a7": "setParameters(address)", +"4903b0d1": "balances(uint256)", "4903c401": "Admins(address,address,address)", "49041903": "getGame(uint64)", "49044cc5": "premiumValue()", +"49045e16": "isAuthorizedSigner(address)", +"49050d85": "listedMedal(uint256)", "49051c1d": "threshold2()", "49055da2": "getCurrGameInfoPart2()", +"4905b4f2": "store(string,string,string,string,string,uint256)", "4905c5b0": "_isUserInGame(address)", "4905c769": "newLoan(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,address)", "490618d1": "deregisterBroker(address)", "49063d37": "checkDivs(address)", "4906da1e": "getMaxEther()", +"49071e76": "transferToken2(address,address[],uint256,uint256)", +"49074c8f": "IsExpiried(uint256)", +"49078ee1": "TContracts(address)", +"4907c36a": "getBrandAddress(uint256)", +"4907c580": "maxSpending()", "4907cd0f": "subscribe(address,uint256,uint256,uint256)", +"4907de7e": "Unbond(address,address)", "490825a9": "testControlTransferEnableNotTransferable()", "49082bef": "TWO_YEAR_KEEPING()", "4908d1de": "allUnsoldTokensAllocated()", +"4908e386": "rewardRateSet(uint256)", +"4909513c": "ceofee()", +"490a0fa5": "getWiz()", "490a32c6": "message(bytes32)", +"490a5dd6": "SWF()", "490a65c8": "PlutonDistribution()", +"490a662b": "_burnFees()", "490a6dac": "setWinner(uint256,bytes32,uint256,uint256,bytes32)", +"490ab76e": "Resumed(uint256,address)", +"490ad464": "BunnyName(uint32,string)", +"490adbaf": "getBalances(uint256)", +"490ae210": "setDepositFee(uint256)", +"490af129": "Birth(uint256,address)", "490b4f92": "coinAgeForAddressAt(address,address,uint256)", +"490b7acf": "queryAccountInSeason(address,uint16)", "490bf04f": "rateToEther()", +"490c148c": "GetAll(address)", "490c58f0": "addTokenTo(address,uint256)", "490cce74": "FincontractMarketplace()", "490d6d11": "Resume()", +"490d7193": "initialize(address,address,address,uint256,address,uint256,uint256)", "490e25c1": "C4FEscrow(address,uint256,address,uint256,uint8)", "490e2bd1": "Autolen()", +"490ee00b": "LogMintedTokens(address,uint256)", "490f027a": "setPrizes(uint256[28])", "490f611e": "Or(bytes32,bytes32)", +"490f6d98": "isFirstConditionInChain(uint256)", +"490fad31": "PutOnSale(address,uint256)", "490fc399": "votedKickoff(uint256,address)", "490fdbd7": "transferTile(uint16,uint16,uint8,address)", "490fea4d": "addBounty(address,address,uint256)", +"491031be": "tokenOfOwnerByIndex2(address,uint256)", "491045af": "LifeSet_002()", +"49110e93": "BetPlaced(address,address)", +"4911d293": "myAddresses(uint256)", +"4911e24e": "pauseATM(address)", +"491217a7": "executeBid(string,string,address[],uint256[],string[],bytes[])", +"4912300d": "distributionPaused()", +"49123445": "_withdraw(uint256,address,uint256)", "491274a8": "presaleContributorCount()", "49128cdb": "updateRoundState()", +"4912f287": "totalSynRewards()", "49135b0f": "getAllAlgos()", "4913732e": "buyTokenFromModerator(uint256,address,uint256,bool)", "49137bca": "reading_cards()", +"491386dd": "getContributionBalanceForTokenGroup(uint256,address)", "4913ec88": "EnergisToken()", +"49142d2a": "_rebaseTokensMinSupplyPercent()", "49144618": "Wasted(address,uint256,uint256)", +"491460cf": "getValue2(uint256)", "4914fb27": "approveWithdrawal(address)", "4915020f": "verifyLinkPrivateKey(address,address,address,uint256,uint8,bytes32,bytes32)", +"49153430": "totalEth(address)", +"491547f5": "minBlockFreeze()", +"4915a97d": "setLiquidityInitialized()", "4915ef4a": "refund_contract_eth_value()", "49164b41": "CryptoDivert()", "491737f2": "ico3cap()", "491759aa": "sendEthTweet(string,string,string)", +"49177065": "addMintAmount(uint256)", +"49178ad5": "setTransferFeeDivisor(uint32)", +"4917a562": "spentTokensPerContract(address,address,address)", "4917c302": "ACCEPTED_AMOUNT()", +"49183534": "set_DURATION(uint256)", "4918d588": "test_BondPostedAndOverMajority()", +"4918f569": "execution()", +"49190466": "setBuySellDelaySecs(uint256)", +"491979ab": "setDepositBlock(uint256)", +"4919b070": "listPairForSupplier(address,address,address,bool)", +"4919ebda": "changeDepositContract(address)", "491a6155": "REFERRAL_BONUS_PERMILLE()", "491a7904": "transferTokenTo(uint256,address)", "491abe0c": "servicePayment(uint256)", +"491ad0c6": "SetAdvisorLockTime(uint256,uint256)", "491b0712": "snpb(uint256)", "491b8c45": "setWARTokenAddress(address)", +"491c5fe3": "setDepositeMaxAmount(uint256)", "491c8e08": "lastBlock_a6()", +"491ce4d0": "setFundToken(address)", "491cfc1c": "setNextRoundDuration(uint256)", +"491d4afd": "taskConfirm(uint256)", "491d525a": "pMintTokens(uint256,int256,address,uint256,uint256)", +"491d5ea4": "callBack(uint256[5])", +"491d638a": "getRemunerationQueue(uint256)", "491d75f4": "configurationTokenTranchePricing(uint256[])", +"491daff1": "f(uint32,uint32)", "491dcfe9": "batchActive()", "491e0df0": "totalContributorsContribution()", +"491e3ff8": "Runners(uint256)", "491e55db": "GAME_COST()", "491e74f3": "YICHAINCoin()", "491eeb3a": "resumeInvest()", +"491f8076": "getMidRates()", +"491fa2e3": "hashtag_length(uint256)", "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)", +"492179f9": "getClamingTokensAmount(address,uint256)", +"4921970a": "canReinvest(address,address)", "4921a91a": "giveMe()", "4921cea6": "transferFeeOwner()", "4921e147": "setMinWeiToPurchase(uint256)", @@ -41901,95 +76753,171 @@ "4922d481": "recovery(address)", "49231598": "fetchAllVotersBySnapshotBlock(uint256)", "49231b28": "changeRates(uint256,uint256)", +"49232500": "usf()", +"49238ce0": "pairCreateTime()", "49239e10": "refundStageStartTime()", "492430f6": "DissolutionRoom(uint8,bool)", "4924d397": "Respond(address,uint256)", "49251b18": "FrozenFunds(address,address,string)", "4925480e": "fireAdmin(address)", +"49256047": "emergencyWithdrawToken()", "49260304": "nDEX()", "4926248f": "setListener(address,address)", "49264032": "Spendcoin()", +"4926439f": "withdrawMyDividendNAll()", "49266f2f": "maxBidEth()", +"4926e923": "nada()", +"49270080": "shares_holders_balance(address)", +"492723ff": "lockupPeriods(uint256)", +"4927abf2": "nextIncreaseDirection()", "4927f408": "Vertex_Token(uint256,address,uint256)", +"49282538": "xTransfer(bytes32,bytes32,uint256)", +"492831b8": "cancel(bytes16)", +"4928430e": "getSecondsLeftBeforeStartEvent()", "49285b58": "getVotingToChangeKeys()", +"4929dfa1": "getLastBlock(address)", +"4929fbf7": "changeHatFor(address,uint256)", +"492a8bf6": "setSellFloorCrv(uint256)", "492abc67": "signerIsApproved(bytes32,bytes)", +"492b2b37": "forceRegister(address)", "492b3bf7": "baseTokenCapPerAddress()", "492b67ea": "Etherdoc()", +"492b84df": "getNoIndexOf256(uint256,bool)", "492b8d45": "POWToken()", "492bd276": "getIntervals()", +"492bfa18": "myString()", "492c0325": "calculateNewRate(uint256,uint256)", +"492c5b9e": "numStores()", "492c70fb": "swipeToken()", "492c981b": "entryInformation(address,bytes32)", "492cc769": "buy(string)", "492d06cf": "unFreeze(uint8)", +"492d9b93": "rpsDev()", +"492dbcdd": "synthsTotalSupplies()", "492dda05": "reTweetReward()", "492e333f": "allocate5ProjectToken()", +"492e4475": "newContractor(address,address)", "492e672e": "DCETToken()", "492eec25": "bountyOfflineTokens()", "492f190d": "availableCommission()", "492f8724": "subscriptionStatus(uint256)", +"492f9b3a": "disableTimestamp()", "492fb343": "feeBeneficiary()", "492fea53": "_createPet(uint256,uint256,address,uint256,uint256,uint256,uint256)", +"492ffc09": "StakerCount(uint256,uint256)", +"49304665": "changeSeniorAsset(uint256,uint256,uint256)", +"49312195": "slimeToWbnbRoute(uint256)", "4931b3b4": "setData_30(string)", +"4932488c": "getPackedCollection(address)", +"493279b1": "bscChainID()", "4932a80b": "unownedPlanet(uint256)", +"4932c9b1": "fifthClaimPrize()", "4932ce32": "changeGame(address,uint256)", +"4932cfe3": "NEONVault()", "4932f35e": "NomToken()", +"4932f4b3": "oracleIpfsHash()", +"4932f98d": "info_address()", "49330cb8": "getVote(uint256,uint256)", "493322c0": "calculateRewardInternal(address,address,uint256)", "49336245": "getEntry(bytes)", "49337227": "testCanCloneAfterTransfer()", +"4933863e": "knjige1(uint256)", "49339f0f": "Delegate(address)", +"4933a887": "payOracleFeesErc20(address)", +"4933b3c7": "goldenID()", +"4933fe7f": "goodPractice(address,uint256)", +"49343cee": "isRetired()", "4934453a": "TPIToken()", +"49350b88": "openTable(address,uint256)", "4935b3b6": "PDTC()", "4935e740": "withdrawMyFunds()", +"49360ade": "Friseurcoin()", "49361cfe": "lastInvestmentTime()", +"49363246": "car1Price()", +"49364919": "createEscrow(uint256,uint256,uint256,address,string,string,string,uint256,bytes)", "493770cc": "setTransferStatus(bool)", +"4938436c": "FoundationWithdraw(uint256)", "4938649a": "stopEverything()", +"49386b16": "ampBps()", "49386f26": "getlistedItems()", +"49389b7d": "gusdRequirement()", +"49393db0": "_hdcoreToken()", "493953de": "addOwnToken()", "49399729": "minimumBidAmount()", "4939bfde": "requestedBy()", "4939ce85": "CLASS_BEAST()", +"493a2714": "setDelayQuicksell(bool)", +"493a5f8e": "jungle()", +"493a5fc4": "returnBack(address)", "493a64e4": "SetParticipantRole(address,address,uint8)", "493a7209": "stopBuy()", "493a8d0c": "tokenActive()", +"493adb7c": "getUserInvestInfo(address)", +"493af8e5": "getPrizePoolLessCommission(uint256)", "493b284e": "exchangeNominsForHavvens(uint256)", "493bccc8": "awardMissedBlockBonus(address,bytes32)", +"493c160f": "preClaims(address)", +"493c2049": "giveToProxy(address,address,uint256,address)", "493ca31a": "EPAYCLUB()", "493caeea": "removeMemberWithAddress(address)", +"493cc235": "OwnBank(uint256,uint256,address,uint256,uint256)", +"493da651": "sst(address)", "493dbd02": "forceEndGame(address)", +"493ed284": "addDefaultDailyRestriction(uint256,uint256,uint256,uint8)", +"493f4f74": "get_address(uint256)", +"493f584c": "getNumberCandidates()", "493f8d30": "read_demurrage_config_underlying()", "493fcf1c": "taxRateNumerator()", +"49401ebe": "getUniswapBuyPrice(string)", "49403183": "isPassed(uint256)", +"49404437": "ERC20ContractAddr()", +"49404b7c": "unwrapWETH9(uint256,address)", "49404d25": "lastBlock_v13()", "494054f4": "createNota(string,string)", "49407a44": "claimEther(uint256)", +"49407a72": "calcTokenPPinBase(address,uint256)", "4940c807": "sumElements(uint8[])", +"49413c77": "CreateDataset(address,address,string,uint256,string)", "49416e45": "RCD()", +"4941a0f1": "bep20TokenApp()", +"4941b9e1": "currentlyPaying()", "4941d059": "editRestrictedAddress(address,bool)", "4941d296": "periodITO_startTime()", "49420759": "changeWithdrawable(uint256)", "494278e3": "getgamecardaddress(uint256)", "4942a71f": "getFromBank(uint256)", +"4942adc6": "logBytes6(bytes6)", +"4942e4cf": "withdrawAll(uint256,uint256,bytes32[])", +"4942edf9": "toTokens(uint256,uint256)", "49432923": "participationHistory(address)", "49433942": "PointerChanged(uint8)", +"494347e7": "updateAccounting()", "49435c0d": "whitelistSupplier()", "49437210": "getUpdatable(bytes32)", +"4943bbca": "setRequestPath(string)", "49440b91": "lockMntpTransfers(bool)", "49441fc3": "MIN_ETHER_CONTR()", +"49447fb9": "distForLevel(uint256)", +"494503d4": "authorities(uint256)", "4945a575": "childApproved(address,uint256)", +"49462b53": "minigames(uint256)", "494630cd": "PullRequestAlreadyClaimed(uint256,uint256,bool)", "49463b8e": "SeeleToken()", "49465a50": "changeTakerDeadline(uint256)", "49465d33": "lastPriceFeed()", +"494666b6": "requestFunds(address,uint256)", "4946c574": "getTransformMineInDay(address,uint256,uint256)", "4946e206": "rescueCat(bytes32)", +"4946fef3": "runSolution1(uint256)", +"494773b0": "Menu06(address)", "4947c8d0": "setFinishTime(uint256)", "49480bc1": "releasePrivilege()", "49484450": "ProofOfNoSnipers()", "4948c2db": "stage4_price()", +"4948d8e5": "childrenClaimable(uint256,address)", "4948d91d": "SicBo(address)", "4948e51a": "freezeToken(address,uint256)", +"4949745e": "CrowdsaleInstantiated(address,address,uint256)", "49499e14": "setCompte_15(string)", "4949d9fa": "bankrolledBy(address)", "494ac14c": "LOTTERY()", @@ -41998,35 +76926,65 @@ "494b90e8": "teamPoolAddress()", "494bf608": "distributeEther()", "494c2a0f": "STQCrowdsale(address[],address,address)", +"494c5ed0": "setMortgageFactor(uint256)", "494cf333": "getAddressUIntMapping(address)", "494cfc6c": "getTokens(uint256,uint256)", +"494d3ea4": "studentDocumentNumber()", "494d93cc": "result_block()", +"494dc617": "maxWeiPurchasable()", +"494de9f7": "balanceOfCredit(address,address)", "494e49a4": "createAccountWithBalance(string,uint16)", "494e4bc3": "fundtransfer(address,uint256)", +"494f0850": "getGlobalRewardTotalAmount()", +"494f2093": "calcDynamicProfit(uint256,uint256)", +"494f67c2": "getGenesisContribution(uint256)", "494fb622": "SetData(uint256,string,string,string,string)", +"494feb26": "getAllRewardDebtByAddress(address)", "494fee7d": "estimateDistribution(address)", "4950b392": "exerciseCall(uint256,uint256,uint256)", +"49512214": "minNodes()", +"495139c0": "getOasisSwap(address,uint256)", +"495160a8": "getLockerAccount()", "49517b41": "addSolution(uint256,string,string,string,string,string)", "4951a18f": "crowdsaleCap()", "495289be": "setIssuer(address,bool)", "4952d2dd": "logPromiseUnfulfillable(uint256,address,uint256)", "4953b57d": "isAdminOwnersValid()", +"4953c782": "claimReward(address,address)", +"49548e20": "sniper(address,uint256,uint256)", "49550d66": "tryTakeBack(uint256,uint256)", +"49554d62": "processItem(uint256,address,string,string,string,string)", "49556aff": "fulfillEthereumLastMarket(bytes32,bytes32)", +"49556b49": "_editTokenName(uint256,string)", "4955a79e": "transferOwnershipOperation()", +"4955d7f0": "amountOfMNEForTokenICOSet(uint256)", "4955f280": "createContractPerson(string)", +"495621fb": "whitelistERC1155(address)", +"4956a7dc": "updateBitcoinPriceInWei(uint256)", "4956cf1c": "migrating()", "4956eaf0": "deploy(address,uint256)", "49570293": "_addPurchasedTo(address,uint256)", "49573edd": "tgeSettingsChange(uint256,uint256)", +"4957677c": "increase_amount(uint256)", +"49579a86": "weightSeniorSupply()", +"4957f340": "freezeWallet()", "495816b4": "BOUNTY_TOKENS_AMOUNT()", "49582509": "ICO_ON()", "49582a20": "initializeSupply(uint256,uint256,uint256)", +"49586ba6": "viewAPInternalUserReferral(uint256,uint8)", +"4958a632": "disableInvestorTransfers()", "4958abb7": "switchFeePolicy(bool)", "4958ace2": "restartSale(address)", +"49590657": "getMerkleRoot()", +"49593350": "twoBytesUTF8()", "49593f53": "submit(string,uint64,uint32,uint32,bytes32)", "4959642c": "isUserKyced(address)", "49596a65": "initProject(string,string,string)", +"4959e729": "modelInfo()", +"495a9825": "isFrozen(bytes4)", +"495ad535": "erc721ArrayIndex(address,uint256)", +"495aff25": "getTotalConsume()", +"495b1b5b": "A11(bytes)", "495b3bcc": "LSEscrowContract()", "495bbcae": "testNeededBalanceForContractCreation()", "495bf26b": "lengthOf(string)", @@ -42036,8 +76994,15 @@ "495ccca3": "WEEFundWallet()", "495d32cb": "par()", "495d7b26": "processScore(bytes32,string)", +"495dcbe3": "subscribe(string,uint256)", +"495dddbe": "approve_752(address,uint256)", +"495df025": "updateResult(address)", "495df195": "CollectEarning()", "495e1b3d": "etherEscrowAddress()", +"495e426d": "ExternalTokenDecreaseApproval(address,address,uint256)", +"495ef705": "withdrawFeePercent()", +"495f5930": "reloadStakingAddress(address)", +"495f6343": "enrollStudent(string,uint256,address,bool,uint8,uint8,uint256)", "495f9bae": "getProposalVoterVotesCount(uint256,address)", "495fe25b": "transferTo(address,uint256,bytes)", "49602f5c": "OpusToken()", @@ -42047,32 +77012,76 @@ "4960d2bc": "getLandTaxRate(uint256)", "496128ec": "prosperaToken()", "49614e91": "isRegisteredAddress(address,address)", +"49616d79": "validateAddress(address,address)", +"49618dad": "UNISWAPV2_ROUTER()", +"496192b0": "onHatchEggs(address,uint256,address)", "4961b40c": "getReleaseValidator()", +"49625e4f": "transferCommunityWallet(address)", +"49628ca4": "StateChange(uint256)", "4962aa66": "discountedRates(uint256)", "4962ab01": "removeMembers(address,bytes32,address[])", "4962ad08": "approveAlgo()", "4962b964": "getPuppetCount()", +"4962d10e": "pendingUBXTReward(uint256,address)", "49630dda": "removeQuestion(address)", "4963513e": "Reserved(bytes32,address)", +"49640919": "userBurn(uint256)", "49649fbf": "withdrawAllFunds()", +"4965302e": "performTrade(address,address,address,address,address,address,uint256)", +"496595ce": "Set(string,address)", +"4965d5d8": "getPassiveIncomeDay(uint256)", "4965fc89": "getForfeited(address)", "49661fcf": "stage2Tokens()", +"496634e9": "pigsTransBurnRate(uint256)", +"49670928": "queryRewardUSDTAmount()", "49671d28": "setAmountSoldPerPeriod(uint256)", +"4967377b": "CapTesla()", +"49677085": "getStorageView(address,bytes32)", +"496786e8": "getMovingRatio()", +"4967bc13": "noVote()", "4968694a": "setCoolness(uint256,uint32)", +"4968d8ab": "peerBlockBonus()", +"4969938c": "rewardsDuration(uint256)", +"496a36f2": "lock(uint256,bytes32)", "496a698d": "currentAuction()", +"496aa0be": "REVPOP_FOUNDATION_PERIOD_LENGTH()", +"496abe8a": "withdrawNKCN(uint256,uint256)", +"496b35b9": "_token1()", +"496b4886": "changeCurrencyAssetBaseMin(bytes4,uint256)", +"496b723f": "wbtcOptions()", +"496b9239": "DayBought(uint16)", "496bd844": "round_up_division(int256,int256)", "496be2cf": "atxControllerAddr()", +"496c47b0": "approve_154(address,uint256)", "496c4fad": "setPriceAgent(address)", "496c5ad8": "throwsWhenGettingTokensWithStoppedSale()", +"496c6c69": "ceilReward(address,uint256)", +"496cc164": "accountStats(address)", +"496d1fe9": "SetGameParams(uint8,uint256,uint8,uint256,uint256,uint8,uint256)", +"496d6302": "retreiveUInt2()", +"496e2c4b": "evt_createRoomFailed(address)", +"496e332b": "isReadyForReveal(uint256)", +"496e3a07": "getCharacterNo()", "496e41d2": "quotaUsed(address)", +"496eab37": "getBTCOraclePrice()", +"496ef217": "claimBulk(uint256[])", +"496f9195": "currentDNyanPulled()", +"496fb52c": "approve_196(address,uint256)", "496fbeb3": "transportationFeeMultiplier()", "496fc976": "setC4FContractProvider(address,address)", "496fd2c5": "ICOStartToken(uint256)", +"49701d43": "originalsMinted()", +"49705117": "Authorized(address,uint256,uint8)", +"49706271": "farmingFeeDistributor()", +"4970e387": "amount_num()", "4970fb36": "armagedeon(address[])", "4971129d": "CatTransfer(address,address,uint256)", "49713811": "winnersCount()", "49714815": "ownerKillContract()", "49716f5a": "originalTotalWeight()", +"4971e629": "calReward(uint256)", +"49721832": "reqAmount()", +"4972cca2": "adminFeeD()", "4973219d": "outputi(uint256)", "497347b2": "_storeContent(address,string,uint256,bytes32,address)", "4973dbf6": "RATE_ETH_CUE()", @@ -42082,132 +77091,262 @@ "4974af1f": "testPublic(uint256[20])", "4974bc27": "download()", "4974da81": "addWord(string)", +"49751788": "minBidAmount()", "49752baf": "chronoBankPlatform()", +"49753581": "xmlXML()", "49755b9e": "issueSynths(bytes4,uint256)", "4975d202": "balanceOfOwner()", "4975e893": "getProposalCreatedAt(bytes32,bytes32)", +"497624b8": "GetVDVTheoCuLy(uint8)", "49776581": "getDocumentUpdatedVersionId(uint256)", "497777d5": "collect(bytes32)", +"49778e3e": "setTokenOpen(address,bool)", "4977d6a4": "DreamToken()", +"49780bba": "_computeStakePropotion(uint256)", "49786571": "Economeme()", "4978ddcc": "transferAPIOwnership(address)", +"4978e111": "setAtomicSwapAddress()", "4979440a": "getHighestBid()", +"4979b037": "logBytes23(bytes23)", +"4979bfaa": "getUserMonstersCount(address)", "4979c012": "ClosingTimeForCloning()", "4979d6ec": "setUserManagerContract(address)", +"497a049c": "addCap(uint256,uint256)", "497a7b48": "taskRewardVote(bytes32,uint256)", +"497aa232": "ChangeMinInvestment(address,uint256,uint256)", "497aed49": "PRIMARY_START_PRICE()", +"497aef28": "totalPurchased(address)", "497b383e": "buyReferTokens(address,uint8)", "497b8018": "getBallotOptNumber()", +"497bf681": "setHardCapForRound(uint8,uint256)", "497cc504": "claimE()", "497cd327": "TMONEY272708()", "497cd426": "updateRewardDistributor(address)", +"497cfa80": "getBuyAmountMultiWithGas(address[],uint256,uint256,uint256[],uint256[],uint256[])", +"497d42f3": "icoTokenPrice(uint256)", +"497d46e9": "LogOpen(bytes32,address,bytes32)", +"497d704a": "burnSynthsToTarget(address)", "497d709d": "icoNumberBalanceOf(address,uint256)", +"497d85c5": "mix(bytes18,bytes18)", +"497d8abf": "currentTokenUsdcPrice(address)", "497dbce9": "_assertAmount(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint8,uint256)", "497dd0cb": "migrateContributors(address[])", +"497e3fa1": "checkCycle(address,uint256)", +"497e4003": "adminRemoveVoter(address)", +"497ec9ca": "getSell(uint256,address)", +"497eedcf": "MIN_RR()", "497f3132": "getLastRegistration(string,int256)", "497fb5b9": "tokensWithdrawn()", +"497fea1d": "mint_derp(uint8)", "498022ea": "evalTransitionState()", +"4980500b": "event()", +"4980d1d8": "pendingCrow(uint256,address)", +"4980e1be": "R()", +"49811f11": "acceptedTokensByAddress(address)", "49813e26": "MenovaToken()", +"4981ae8b": "initialPwdrRewardPerDay()", "4981b3ca": "performSell(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", +"4981f2c5": "set_platform_fee(uint256)", +"4982b9b3": "update_car(uint256,uint256,uint256,uint256,uint256,bytes32)", +"4982d52d": "generalLogTest(uint256)", +"4982e3b7": "unwrapAll()", +"49831b84": "set_randomness(address)", +"4983542e": "batchExecuteOrder(address[4][],uint256[8][],uint8[2][],bytes32[4][])", +"4983b6e9": "removeAllowedReceivers(address[])", "49843982": "Coin(uint256)", +"49857c1d": "test_swap_exactIn_oneForZero(uint128)", +"49858898": "leftByteShift(bytes6,uint256)", "4985acee": "getTransferFromToValue()", "4985b325": "addSurplus()", +"4986094b": "totalFixedDeposit()", "49866ec0": "finishTokensSale(uint256)", +"4986c792": "getPrivateSale()", +"49880051": "burn_GLEX(uint256)", "4988ef98": "LOCK_TOKENS_DURATION()", "4989ae8e": "RESERVED_TOKENS_FOUNDERS()", "4989b0b6": "setCustomBuyerLimit(address,address,uint256)", +"4989c1a9": "ALLDIFFICULTIES(uint256)", "498a37f0": "setSmallInvestor(address,uint256,uint256)", "498a3944": "setNameWriterId(bytes32,bytes32)", "498a4c2d": "startBlockNumber()", "498a690f": "issuingRecordAdd(uint256,bytes32,uint256,uint256,uint256,string,uint256)", "498a6de7": "setRevenueContract(address)", +"498aeb82": "transferPie(uint256,address)", +"498b0990": "balancesCallback(address,address,uint256,uint256,uint256,uint256)", "498b7718": "J8T_DECIMALS_FACTOR()", +"498b8df6": "_minted_pizza_count()", "498be109": "FAPFounderFund()", +"498c02fd": "minCollateralCeiling()", "498c07f3": "startCrowdsale1(address)", +"498c620a": "birdBorrowerIndex(address,address)", "498cb7cb": "setDelegadoDeEscuelaVerify(bytes32,uint256,uint256)", "498cc70d": "getResult(string)", +"498d0a55": "ewfth()", +"498d147f": "blacklistRecipient(address)", "498d2ae0": "getMintRequestAddressMap(uint256,int256,string)", +"498d7ba9": "Bids(uint256[],bytes32,uint256[],string,string)", +"498da964": "saving(uint256)", +"498dd0c1": "projectIdToCurrencyAddress(uint256)", +"498df3ae": "IncompleteFillBuyQuoteError(address,uint256,uint256)", "498e78b1": "unregisterManager(address,address)", +"498e7e81": "TokenTransferExecuted(address,address,uint256)", "498e87a9": "setPI_edit_21(string)", +"498e8f76": "onBuyTicketAndDistribute(address,address,uint256,uint256,uint256)", +"498eb75f": "declareLottery()", "498eecb2": "getLimitedReportersDisputeBondToken()", "498f27ae": "countCampaigns(address)", "498f6fbe": "NewSubscription(address,uint256,uint256)", +"498fb99a": "globalStabilityFee()", +"498fd79b": "stableSwapBUSD()", "498fd833": "priceDT()", "498ff49a": "repayImmediately(uint256)", +"498ffb90": "feeException(address)", +"4990f6dc": "__underlying()", "49911610": "getDay(uint16)", "49912f88": "appeal(uint256,bytes)", "49917511": "buyCoinsCrowdSale(address,uint256,address)", +"499188c6": "elasticityAt(uint256)", +"499199a6": "removeMarketDapp(uint256)", +"499200db": "updateDeploymentFee(uint256)", "49926028": "typeHash()", "499260d6": "get_activity_by_id(uint256,uint256,address)", +"4992d23e": "minConsensus()", "49937e25": "buyPrimordialToken()", +"4993e636": "annotate(uint256,string)", "49942483": "ICO_PHASE2_BONUS_PERCENTAGE()", "49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", +"49943394": "FinalizeSale()", "49943a13": "PARTICIPATION_FEE()", +"49949c23": "returnsUnnamedStaticArray()", +"49954ae2": "func_1674()", "49955431": "cupi()", "4995b458": "week()", "4995e9fb": "FOUNDER_ADDRESS2()", +"4995f92e": "GrantAdded(address,uint256,uint128,uint16,uint16)", +"49965e9f": "_uniswapRouterAddress()", +"4996d51d": "AmountOne()", "4996e899": "getGuaranteedContributorsLenght()", "49970e16": "forwardPlay(address,address,bytes,bytes32,bytes)", "499831f2": "pauseGame()", +"499856d5": "viewBurnRandomPositionBurnAmount(uint128,uint128)", "4998ce40": "setbonusTokens(uint256)", +"49995e5d": "Burn(address,uint256,uint256)", "49996698": "trustedAddressSize()", "499a1bcd": "setAQL(address,uint256)", +"499a2818": "removeFee(uint256)", "499a8fea": "setClue3(string)", +"499aabf3": "calculateRate(address,uint256)", "499ac979": "redistributeTokensForAddresses(uint256,address[])", +"499af201": "another(uint256)", "499af77c": "current_spin_number()", +"499b7211": "setupGovernance(address)", +"499b78a6": "balanceAt(address)", +"499b8394": "setOperationsAddress(address)", +"499c80ca": "activationInterval()", +"499ca0ef": "changeCount(uint256)", "499caf09": "secondTime()", "499cd176": "endAttack(address,address,bool,uint256,uint256,uint256,uint256)", "499cf7ce": "BOXEX()", +"499cfd70": "flashLoan(uint256,address)", "499d1081": "mint(address,uint256,uint128)", +"499d4f4d": "_attachStakingContract(address)", +"499d7f96": "stakingRewards(address)", "499dae56": "getMultiRequestRequestor(uint256)", "499e2c81": "getOrCreateWaitingBoard(uint256)", "499e6c10": "isTheContract()", +"499ef4d0": "projectPower(address,address,uint256)", +"499f15d3": "_getUserID(address)", +"499f3f19": "setMintingFactorForPayingDebt(uint256)", "499fa529": "ALLOC_SALE()", "499fd141": "getDrupeCoin()", "499ff236": "maxAnonymousContribution()", +"49a001e0": "validity_date()", +"49a0158c": "pendingYucan(uint256,address)", +"49a046c1": "payoutPercentages(uint256)", +"49a08c75": "FighterReady(uint32)", "49a0a3b3": "resetTokens(address[],uint256[])", "49a0c976": "unlockEmission()", "49a0e681": "rst()", "49a24a7d": "DolyToken4()", +"49a31322": "hyfiPerBlock()", +"49a3218d": "gearToken()", +"49a32261": "tako()", "49a3d2bb": "updateAllowed(address,address,uint256)", +"49a3d737": "sendFullContractBalance(address,address)", +"49a4cd9b": "DeleteName(bytes32,bytes32)", +"49a5039f": "Vote(uint16,uint256,uint16,uint256)", "49a51839": "EGGS_TO_HATCH_1LOBSTER()", +"49a58205": "convert(uint256,string)", +"49a59fc5": "initialize(uint256,uint256,uint256,address,address,address,bool)", "49a634f0": "LTS()", +"49a64cc7": "StartingTimestamp()", "49a67b55": "commitStart(bytes32)", "49a69078": "lastBlock_f5()", "49a6a4de": "showAssetInfo(bytes32)", +"49a6d794": "getIndexByCode(bytes32)", "49a742eb": "validRate(uint256)", "49a76444": "Hygen()", +"49a764cd": "collections(address,uint256)", +"49a76ae9": "crowdsaleTokenLimit()", +"49a76d0a": "to_bank()", +"49a79a50": "addProvidersFor(address,address[],uint8,bytes32,bytes32,uint256)", "49a7a26d": "solver()", +"49a7ac67": "ratioGoodAfter(uint8,uint256,uint256)", "49a86c9e": "addToAccesslist(address)", +"49a876e4": "bnb()", "49a8d337": "lockedTeamAllocationTokens()", +"49a8f4c8": "_getBalanceHash(address,uint256,uint256)", "49a92910": "setPlayer(address,uint64,uint64,uint64,uint64,uint64,uint64)", "49a9d5ad": "CGENToken(uint256)", +"49aa2434": "numberCake()", "49aa480a": "VixCoin()", "49aa4ee2": "removeVote()", "49aafad7": "allowedToBurn(uint256)", "49ab1d86": "setGeneLab(address)", +"49abe94b": "whitelistedRates(address)", "49abee50": "phaseStart()", "49abf2d6": "staticoins(uint256)", +"49ac35fd": "getTokenStakePoolAddress()", +"49aca00c": "getUserPartners(address)", "49acce72": "AnkitVictoContractToken()", "49ad12a5": "getItemRarity(uint256)", "49adf14f": "Claim_TRAC_1850()", "49adf314": "_updateDividends(address)", +"49ae11e8": "updateTokenMinAmount(address,uint256)", "49ae1f17": "KWHToken(address,address,address)", "49ae8dc3": "getChildren(uint256)", "49ae9b31": "canReadName(address,bytes32)", "49af0af1": "baseEthCap()", +"49af20a0": "calPerBlockToken(uint256)", "49af63a9": "setWaitTime(uint8)", +"49afc265": "yToken1()", "49afc6e5": "tokenBalance(uint256)", "49afcc0e": "dataSourceGetSemiResult(uint256)", +"49aff91c": "pendingMiso(uint256,address)", +"49b01650": "_transferRefund(uint256)", "49b11f24": "dailyAuctionStartTime()", +"49b16dc7": "CDF(uint256,uint256)", "49b1b2d9": "newBonus_and_newPeriod()", +"49b2b7e6": "JackpotDispatchAll(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"49b2cc5f": "stubF()", +"49b2cff5": "numberCakeToRegister()", +"49b2d34a": "stableFeeUpdateTime()", "49b2f5ff": "technicalCommunitySupply()", +"49b3709f": "getAllTokenOnSale()", +"49b39ea5": "config_employee(uint64,address,uint256,uint256)", +"49b39fd6": "updateTokenConfigBaseUnit(address,uint256)", "49b3b29f": "costs(uint256)", +"49b3b6ab": "allocateToken(address,address[],uint256)", "49b40402": "exchangeThreshold()", "49b48e66": "setCheckOwner(bool)", "49b54685": "updateDps(uint256)", +"49b593b6": "transferPersonhoodKey(address)", +"49b59552": "setPublicSwap(bool)", +"49b5a104": "SaleStarted(uint8,uint256,uint8)", "49b5b541": "compute(address,uint256)", "49b6313c": "getCurrentSellOffer(uint32)", +"49b646d6": "tokenBankrollMapping(uint8)", +"49b7060e": "setTerm(address,uint256,uint256)", "49b71e47": "distributeWinnerPool(string,uint256)", "49b76501": "getStorageRate()", "49b7a9c2": "dividendManagerAddress()", @@ -42218,86 +77357,173 @@ "49b8f5d9": "tokensDuringPhaseOne()", "49b90557": "isAuditor(address)", "49b9734d": "changeMainEndTime(uint256)", +"49b9935c": "piToBalancer(address,address,uint256)", "49b9a2d0": "address_to_tickets(address)", "49b9a7af": "lastPriceUpdateTime()", +"49b9b4c5": "farmAtIndex(uint256)", +"49ba1b49": "disableWhitelist(bool)", "49ba5a48": "checkSavedEthBalance(address)", "49babd2a": "initiate(address,uint256,bytes32,address)", +"49babf15": "userAddAssets(string,string)", "49bac542": "E4RowEscrowU()", +"49badb41": "basisShare()", +"49bb1215": "obtainDynamicGains(address,uint256)", +"49bd01ca": "getSingleLoan(bytes32,address)", +"49bd5a5e": "uniswapV2Pair()", +"49bd72c0": "getCompoundRPBPerTranche(uint256)", +"49be29c6": "divsBalance(address)", +"49be4c33": "lrc(address)", "49bedf42": "setLookup(address)", "49beee4f": "adjust_Transfer_nodata(bool)", "49bf2caf": "disputeTransaction(uint256)", "49bf66d3": "addRegistryIntoNameIndex(address)", "49bfb061": "txFeeDenominator()", "49bff0d7": "setPI_edit_29(string)", +"49c02814": "addressPresent(address)", "49c03373": "changeGTOAddress(address)", "49c04f27": "WorldBitEvent(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", +"49c082cd": "ZapOut(address,address,uint256,uint256)", "49c15bd9": "Purchase()", +"49c1670a": "eam(uint256)", "49c16cc3": "CMCLToken(uint256,string,string)", +"49c16da0": "PriceOfToken()", "49c16e15": "toUint()", +"49c17ff5": "updateUserMetadata(string)", +"49c1ac24": "transferKeepCDai(address,uint256)", "49c1ad0f": "gotoNextState()", +"49c1cf6e": "distributionTime()", +"49c1d43b": "stackFees(address)", "49c1d54d": "trusteeAddress()", +"49c228e5": "LogTokenExchangeEnabled(address,uint256)", "49c2a1a6": "createProposal(string)", +"49c31174": "BondPayoutsPaidDateGetAt(address,uint256)", +"49c34a1a": "extractDaiFromVenusFarm(uint256)", +"49c35605": "multiSigTransfer(address,uint256,uint64,uint8,bytes32,bytes32,address)", "49c3567c": "ArbaCoin(uint256,string,string)", +"49c3735f": "addUserDCP(address,uint256)", +"49c3736f": "ItemCreated(address,uint256,uint8)", "49c37f8c": "main(address,address)", "49c3a91e": "getSponsorshipsTotal(address,uint256)", +"49c3d477": "injectSaleAmount(bytes32[],uint256[])", +"49c42ba1": "blockRollback(address,address,uint256)", +"49c42fe6": "messageToken(bytes32)", +"49c4503b": "setTier2EndTime(uint256)", "49c462d7": "createInvite(bytes)", +"49c47240": "totalClaim(address)", "49c53b2d": "doMidnightRun()", +"49c5468d": "contractStartBlock()", +"49c5c2ac": "__adapterIsEnabled(address)", +"49c5f32b": "getConvertibleTokenAnchorCount(address)", +"49c603ba": "getGovernanceToken(address)", "49c60cc9": "MICROMINESx()", "49c6353c": "getInvId()", "49c71fa8": "unholdTeamTokens()", "49c7634f": "WorldwideGiftCode()", +"49c7e639": "subscribe(uint8)", "49c83e86": "unlist(address,uint256)", +"49c8d37c": "MAX_GOV_TOKENS_LENGTH()", +"49c910c0": "hold(uint256)", "49c91267": "getSeedByWinner(address)", "49c9d17a": "updateReceivers(address[])", "49c9dcf5": "awardRafflePrize(address,uint256)", "49ca30ab": "receiveIndex(uint256,uint256,uint256,uint256,bool)", "49ca7656": "changeOwnerOfMonethaUserClaimStorage(address)", +"49ca7b8a": "changedPriceFeed(address)", +"49ca8b15": "RECEIVE_USD()", "49ca8cc9": "getEventId(address,bytes32)", "49cacb12": "dropOwner(address)", +"49cb99e6": "migrationBegin()", "49cbe338": "tryRead(uint64)", "49cc2eb1": "Fairsale(uint256,uint256)", "49cc635d": "receivePlayerInfo(uint256,address,bytes32,uint256)", "49cc8513": "_geneOfCrab(uint256)", "49cc954b": "twoYearsPassed()", +"49ccd1c1": "_farmXDEXCreator()", +"49ccd69e": "unlockDate(address)", +"49cce571": "setIssuer1(address)", +"49ccf849": "bonusPoolPoint(uint256)", "49cd4554": "afterIco(uint256)", +"49cd56ed": "TotalClaimedTokens()", +"49cd7c8a": "tokenInvestment(address,uint256)", +"49ce09f4": "ShoePerBlock()", "49ce0a11": "hexToken()", +"49ce468d": "dataSize()", "49ce5804": "setSectorOwnerCut(uint256)", +"49ce6d43": "migrationWithdraw()", +"49ce7fba": "globalTargetCollateralization()", +"49ce8997": "commitments(uint256)", +"49cef723": "bull()", "49cf211e": "storenumber()", +"49cf216c": "addLPToken(uint256)", "49cf2eae": "certifierAddress()", +"49cf39dd": "studentPersonalName()", "49cf5f1b": "DSProxy(address)", +"49cfca8b": "DistributedBatch(uint256,uint256)", +"49d07426": "getActiveTokenExchangeId()", "49d0cd85": "functionSignatures()", "49d10b64": "updateRegistry()", +"49d165f6": "attack(uint8,uint8,uint16[6],uint16[6])", +"49d19c7b": "cdptab()", "49d246e5": "getBetBasic()", "49d24ae8": "withdrawAdmin(uint40)", "49d2ca11": "Election(address,address,address,address,address)", "49d3060f": "selectWinner50()", +"49d3fed2": "flexable(uint256)", "49d45693": "changeminprivatesale(uint256)", "49d463e6": "sendBoard(bytes10,uint256,uint8,bytes32,bytes32)", "49d4a344": "right99(uint256)", +"49d5034d": "setCreditLimit(address,uint256)", "49d55d9d": "receiveTransfer(uint256)", +"49d59517": "batchAngelSales(address[],uint256[])", "49d596fe": "FSM()", +"49d5bb0c": "CountryCodeAdded(uint256,uint256,uint256)", +"49d5e604": "TEAM_ROLE()", +"49d63489": "takeCollateral(address,uint256)", +"49d6550f": "challengeYoungestInput(bytes32[],bytes32[],uint8,uint8,address)", +"49d65ff9": "ovmCREATE()", +"49d66644": "getBuyRate(address,address,uint256,bytes)", +"49d67408": "setMaxTicketPerAddress(uint256)", "49d689f4": "setJackpotAddress(address,address)", +"49d71a67": "current_profit_p4()", +"49d71d64": "transferColdwallet(address)", +"49d74e21": "startOnlyMinPrizes()", "49d7e0b3": "mutiTransferFrom(address,address[],uint256[])", +"49d7e8c2": "GetFundDataAll()", "49d800a1": "ReleaseableToken(uint256,uint256,uint256)", "49d834cd": "TSTEST()", +"49d8e2df": "joysPerDay(uint256,uint256,uint256)", "49d8ef13": "ETHERFUNDME_ONLINE_FEE()", +"49d90f2f": "dividendIncome(address)", "49d94871": "bonusRates(address)", "49d94c83": "CappedCrowdsale(uint256)", +"49d95229": "approveUberHaus()", +"49d9b86c": "setUniswapSellTaxFee(uint256)", +"49d9be4b": "addReserveCurrency(address)", +"49da0d0f": "makeBet(uint256,address,uint256)", +"49da4fea": "setStakingBurnPercentage(uint256,uint256)", "49da847b": "iPay()", "49daca7a": "tradeAddress()", "49dbdf30": "initializeRefund()", +"49dbf0b3": "_verify(address)", +"49dc1baf": "getMinStakeAmt(address)", +"49dc2a60": "ExternalTokenTransfer(address,address,uint256)", "49dc2b83": "miningFinished()", "49dc5376": "getTokensBack(uint256)", "49dc8fab": "Menu06(address,address,uint256)", "49dcbc5e": "sendEth(address,uint256)", "49dcd756": "getCurrentEthCapPerAddress()", +"49dcf638": "teamFrozenBalances(address,uint64)", "49dd0fe3": "minechain()", "49dd1262": "updatePrices()", "49dd2880": "Gold(address,uint256)", "49de0485": "addContributorManually(address,uint256,uint256)", "49de3995": "EthlanceMessage(address)", +"49de3f08": "uintOfName(bytes32)", +"49df44c2": "getNumberOfCategoryIds(uint64)", "49df7208": "addMember(address,bytes32)", "49df728c": "withdrawTokens(address)", +"49df8d33": "getRewardPerBlock()", +"49e084e0": "LogRedeemExcluded(address,bytes32)", "49e09da6": "genesisTransfer(address,uint256)", "49e0cf2a": "createComunity(bytes32,bytes32)", "49e0dada": "level_4_percent()", @@ -42305,8 +77531,11 @@ "49e1432c": "donateToPot()", "49e1c2b7": "ATMToken()", "49e284d1": "ZoologicalGarden()", +"49e2f366": "SufficientFundingReached(uint256)", "49e347ae": "getContents(uint256[],uint256)", +"49e38908": "unbind(uint8)", "49e3ec5e": "setMediator(address)", +"49e42c2a": "viewMinSupply()", "49e4347b": "completeICO()", "49e44f44": "ManagerProxy(address,bytes32)", "49e4b3e5": "setPermissionManager(address)", @@ -42316,14 +77545,24 @@ "49e65440": "setSymbol(bytes32)", "49e67544": "TeamFund()", "49e6c454": "getMyEntityOwner(uint256)", +"49e70159": "updateMintValues()", "49e77c8b": "hasEnoughTokensToPurchase(address,uint8)", "49e9449a": "presalesCap()", "49e9cee9": "GetMaxPrestigeLevel()", +"49e9cf89": "userFetchUsdt(uint256)", "49ea33df": "icoEndDatetime()", +"49ea8867": "getTvl(address)", "49ead9b4": "createAsset(string,uint256,uint256)", +"49eaf494": "Lock(address,uint256,uint256)", +"49eb0102": "registerIdentityKeysAndSignContract(bytes32,bytes16,address,bytes,bytes16,address,bytes)", +"49eb2e66": "kickback()", "49eb6d6f": "NumberAddresses()", "49ec1ff0": "setSoftwareTokensWallet(address)", +"49ec51e3": "qianMax()", "49ec7c3f": "giveBirth(uint256,uint256,uint256,bytes)", +"49ed393c": "decreaseRewardSupply(uint256,uint256)", +"49ed510f": "designatedVotingContracts(address)", +"49ed9a88": "ForcedTransferEvent(address,address,uint256)", "49edfb94": "FEE_OWNER()", "49edfed9": "getEtherForStakes(uint256)", "49ee161b": "getLockPosition1(address)", @@ -42332,13 +77571,16 @@ "49ee6c50": "getNewItemId(bytes32)", "49ee72fc": "addCountryCities(uint256,uint256[],uint256,uint256)", "49eee1a4": "setRoundRate(uint256,uint256,uint256)", +"49eefeee": "getTroveOwnersCount()", "49ef026f": "raisedFunding()", "49efdbbf": "purchaseShow(uint256)", +"49efe5ae": "setRecoveryAddress(address)", "49f00964": "founders_2()", "49f02baf": "YondToken()", "49f0726d": "Centhereum()", "49f0c90d": "adminSetAccountAdministrator(address)", "49f12aa7": "hashState(address,uint256,uint256)", +"49f164f0": "userRefs(address)", "49f16ad1": "setTransferEnabled()", "49f194a1": "setIco(address)", "49f1fa67": "GetLiasonName(uint256,uint256,uint256)", @@ -42350,101 +77592,199 @@ "49f2a049": "registerInternal(string)", "49f30178": "nextFinalTimeout()", "49f307a6": "setNewPriceToItem(string,uint256,uint256)", +"49f32cd8": "tokenPancakePair()", +"49f34b88": "setUniChatGroupAddr(address)", +"49f40d86": "proxyKyberSwap()", +"49f415c8": "farmRewards()", "49f41a42": "updateAgent(address)", "49f4cc17": "transferAssets(address,address,uint256)", "49f4f5da": "XLifeCoin()", +"49f5124b": "TRANSFER_WITH_METADATA_EVENT_SIG()", +"49f539b2": "time_locked_reclaim_addresses(address,uint256)", "49f6444e": "buyLuckyStone()", +"49f6559c": "LogNonlistedUser(address)", "49f65ce4": "handleDividends()", +"49f6a413": "addressIndexs(uint256)", +"49f713a4": "sdel(address)", "49f73d3d": "calculateCountryCut(uint256)", "49f7825b": "lockAddressByKYC(address)", +"49f7ad4c": "raffleinfo(uint256)", +"49f7c02d": "getTrackingCode()", +"49f835de": "harpoonConfig()", "49f856ea": "setERC820compatibility(bool)", +"49f87978": "mintsusd(uint256)", +"49f8c3bd": "EndBid(uint256)", "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)", +"49fa3a2e": "repeatP()", "49fa84ef": "hon1ninja()", +"49fa92cb": "transferByAdmin(bytes,bytes)", "49fa991f": "removeAttestation(address)", +"49fad27d": "so(uint256)", "49fb2dc5": "add_to_association(uint256,uint256,uint256)", +"49fbfdd1": "MinTokenBeforeSwap(uint256)", +"49fc5710": "dividendRemainder()", +"49fc9df7": "stakesLength(address)", "49fcea4a": "Lyfecoin()", "49fcfce7": "saleInited()", "49fd5791": "_removeLastOwnerHoldingsFromToken(address,uint256,uint256)", "49fd5f64": "getAllAssembly(address)", "49fdaea6": "isBrickOwner(uint256,address,address)", +"49fdb03b": "transferPoolProxyAdmin(address,address[])", "49fe5261": "CROSAIR_PRICE_INCREMENT()", +"49fef8dd": "getStaticConnectors()", +"49ff305f": "UnclockVerification(string,uint256)", "49ffeb8f": "recursiveCalculation()", +"49ffefd1": "changeTraderToAdmin(address,address)", +"4a001c92": "percentMultiplierTokenId(address)", "4a0023cd": "findAuraComposite(uint64,uint64)", +"4a005297": "showSample(address)", +"4a007092": "sampleAuthor()", "4a00a522": "homebase(int256,int256)", "4a00dc38": "getAreaPrice(uint8,uint8,uint8,uint8)", "4a013296": "canEscapeTo(uint32,uint32)", +"4a0186a5": "dTokenMetadataAll(address[])", +"4a019ca2": "LogAuctionEndVoucherSubmitted(bytes32,address,uint256,address,address,uint256,bytes32)", "4a024928": "D00KIE()", +"4a02a9f2": "setDapp(address)", +"4a036c50": "pendingWanFarmImplementation()", "4a03707c": "draw(address,uint256)", "4a03e7e3": "TrinityContract(address,address,uint256)", +"4a0413a0": "withdrawQuarterlyReward()", +"4a042674": "depositFor(address,address,address,uint256,uint256)", "4a042f0d": "joinBattle(uint256)", "4a046d82": "usdPerEther()", "4a0473fe": "votings_(address)", "4a0483c5": "trustedAddressLUT(uint256)", +"4a052a21": "deposit_rewards_pool(uint256)", +"4a0534a0": "healthGemScore()", +"4a057dbb": "yearBlock()", +"4a05e0cc": "_decode_sol_bytes22(uint256,bytes)", +"4a0687ef": "initializeProxy(address)", +"4a0706be": "mint(address,string,string,string)", "4a0767cc": "setIsPreventedAddr(address,bool,bool)", +"4a0805b0": "simpleWithdraw(uint256)", +"4a080c9f": "swapAllNovasForETH()", "4a084736": "updateTokenToEthOrderWHint(uint32,uint128,uint128,uint32,int256)", +"4a088019": "isModuleProvided(address,address)", +"4a08accb": "getReserveIsFreezed(address)", +"4a090341": "YFICG()", +"4a097f26": "transferxxxxx(address,uint256)", "4a09d3cf": "withdrawAdvisersTokens(address,uint256)", "4a0a7f2d": "doDistributionRange(uint256,address[],uint256[])", "4a0af245": "startPreSale(address,uint256,uint256,uint256)", "4a0b132a": "TIME_TO_MAKE_1_SHITCLONE()", +"4a0b4ce4": "isEligibleForReward(uint256)", "4a0ba49d": "pay(address,address,address,uint256)", "4a0bb6a4": "WeQuest()", +"4a0bc0b7": "createAndExecute(address,bytes,uint256)", +"4a0c3c3b": "delegateAddress(address)", "4a0cd926": "addBankerAddress(address)", "4a0d89ba": "getSwap(uint256)", "4a0d8b53": "setHasMaxPurchaseLimit(bool)", +"4a0d95d6": "saveIADetails(bytes4[],uint64[],uint64,bool)", +"4a0ebae3": "GameError(address,uint256,uint256)", +"4a0ef768": "mintSize()", "4a0f0bfe": "ServiceRegistry(address)", "4a0f3134": "FundTransfered(address,uint256)", "4a0f5974": "left27(uint256)", +"4a105e78": "minutes_staked()", +"4a106080": "limitPaused()", +"4a109fbe": "withdrawETH(address,uint256,uint256,address,uint256)", +"4a10c12e": "getBondPremium(uint256)", +"4a10eaa6": "flow(bytes32)", +"4a1179f4": "NewInvest(uint256,uint256)", +"4a11825e": "modifyCollateralBalance(bytes32,address,int256)", "4a122266": "getForwardPurchaseFeesTo()", "4a12389a": "MyToken(string,string,uint8,address)", "4a123e1d": "setLev2(uint256)", +"4a127651": "calcAsymmetricShare(uint256,uint256,uint256)", "4a1281c6": "numTokensIssued()", "4a1311f9": "openingManualyMining()", +"4a131672": "createUniswapPair()", +"4a136854": "ethsharediv()", +"4a14ad71": "_gameId()", +"4a14cd84": "getMaxAgeDepositUntilWithdrawable()", +"4a14ce96": "registerWithdrawal(string,string,uint256)", "4a14e3b2": "SentAmountToOwner(uint256,address)", "4a150e2c": "getDonationsCount(address)", +"4a1523dd": "numberStakeHandlersRegistered()", +"4a154164": "check_tick_feegrowth_invariant()", +"4a157c7b": "trackFullPricePerShare()", +"4a15aa51": "moveAllTokens(address,bytes16)", +"4a15b662": "getNonce(address,uint256,address)", "4a15ebce": "addCbAddress(address,bytes1,address)", +"4a15fd93": "setOpenDate(uint64)", "4a16673b": "shouldSelectWinner()", +"4a166f68": "engage()", "4a168859": "getAvaIcoAmount()", "4a169e4b": "setCoinInfo(address)", +"4a16ca49": "creatorStartRunning(address,uint256)", "4a173383": "determineWinner(address,uint256,bytes32)", "4a1753a6": "setCurrentGame(address)", +"4a17588c": "routes(uint256,uint256)", "4a176017": "finalizeAdd(uint256,address)", "4a176ba5": "getaddr(uint256)", +"4a178472": "verifyCoverDetails(address,address,bytes4,uint256[],uint16,uint8,bytes32,bytes32)", "4a17bbde": "getEventId()", "4a180cb3": "removeSpecialFeeTake(uint256)", +"4a183ffc": "renbtcBuyback()", +"4a184239": "tokenRanks(address)", "4a184f51": "startCrowdsale(address,address)", "4a186d69": "buyTokenFor(address)", "4a187785": "aaandItBurnsBurnsBurns(address,uint256)", +"4a1894c5": "approve_146(address,uint256)", +"4a189bed": "rebState()", "4a18c25e": "EUEBToken()", +"4a18fe7e": "addBurnamintable(address,address,bool,uint256)", +"4a191c0d": "CHANGE_CONTROLLER_ROLE()", +"4a194903": "updateAndGetQuantityHeldInExchange(address)", "4a197057": "GameEnded(uint256,address,uint256,uint256,uint256,uint8,uint8)", "4a1993e4": "firstDepositDate()", +"4a19cb87": "syshasbuypayed()", +"4a1a032c": "pendingDebtValOf(address,address)", +"4a1a066b": "cdpId()", "4a1a27a8": "qtAccount()", +"4a1a2d5a": "recordFillOrder(bytes32,uint256,uint256,uint256)", "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)", +"4a1b0d57": "calculateCurrentWithdrawFee(address)", "4a1b13f0": "setPoliceTimeoutInBlocks(uint256)", "4a1b504f": "distributeBonus(address[])", "4a1b98b2": "exchangeUnderwrite(address,uint256)", "4a1ba4ba": "Multibot()", "4a1c13cd": "setIcoStartDate(uint256)", "4a1c6549": "ETHBITA()", +"4a1cd731": "updateSellCommissionPercentage(uint256)", +"4a1ce599": "unlockStake(address)", "4a1d08af": "drawRandomItemWinner()", "4a1df335": "addressCEO()", "4a1e004c": "blockedTimeForInvestedTokens()", +"4a1e7726": "_setMinTokensBeforeSwap(uint256)", +"4a1ec375": "skim(address,uint256,uint256)", "4a1f05f0": "setSaleImg(uint256,bool,address,uint256)", "4a1f0bf6": "inheritToNextGeneration(address)", +"4a1f0ef2": "bundle()", "4a1f11a7": "MT()", +"4a1f5242": "_encode_sol_bytes32(bytes32,uint256,bytes)", "4a1fb241": "fttIssued()", +"4a1fbd0e": "instaList()", "4a1fe393": "withdrawEther(uint32)", +"4a200fa5": "initialize(address,address[],address[])", +"4a20556c": "withdrawFeesRaw(address)", "4a208c38": "setIV_R2(uint256)", +"4a2101c6": "NewCapActivated(uint256)", +"4a2181be": "initWithdraw(address)", "4a21f8f7": "joinToPool(uint256,uint256)", +"4a221735": "CoreArb()", "4a2228f7": "_reducemoney(address,uint256)", "4a222b74": "ecoLock23()", "4a22c7fb": "tokens_rewards_allocated()", @@ -42452,69 +77792,112 @@ "4a2388ff": "setAllowedForMinting(address,address)", "4a23dc52": "FileStore()", "4a2479c0": "initialOwnersShares()", +"4a248d2a": "_BASE_TOKEN_()", +"4a2491a3": "ade(address)", "4a24edd6": "startSale(uint256,uint256,uint256,uint256)", "4a24f6d9": "getVendorApplicationScoringTrackCount(string)", "4a254431": "MappingProposalIssued(address,address,uint256)", "4a25780b": "RedRibbonCoin()", "4a25b2fd": "deductCoin(address,uint256)", +"4a25d94a": "swapTokensForExactETH(uint256,uint256,address[],address,uint256)", +"4a260a10": "eth_rate12()", "4a26410b": "SetGenesisBuyPrice(uint256)", +"4a2645c2": "sympol()", +"4a26531b": "winBlocks(uint256)", "4a268f52": "ExchBtcToken()", "4a26920b": "sendTokens(address,address,address[],uint256[])", "4a2697fc": "balanceOfIssuer()", +"4a26b92f": "approve_740(address,uint256)", +"4a2712b6": "newTokenAndSurvey(address,uint256,string,uint256)", "4a272bff": "GetHoga(address,uint32,bool)", "4a275a1e": "Blockdrop(address)", +"4a278a4a": "openedCases()", +"4a27ae83": "bountiesRegistry()", "4a280a55": "transferFrom(address,address,address,uint256,bytes)", +"4a282670": "repayEth()", +"4a28918e": "ChangedInvestorWhitelisting(address,bool)", +"4a28a74d": "setPendingGroupMaxLife(uint256)", +"4a28cee6": "onGameClose(address,uint256,uint256)", "4a2929ee": "betLockTime()", "4a2951d2": "AsianCapitalChain(uint256,string,uint8,string)", "4a2a197e": "addBonus(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4a2a4ebc": "countries(uint8)", +"4a2afefb": "addi10()", "4a2b0c38": "DividendProfit()", "4a2b22f9": "GameBase()", "4a2b5235": "_addWhitelistAdmin(address)", +"4a2b9511": "blockIn2Weeks()", +"4a2bea85": "transferAndFreeze(address,address,uint256,uint256,uint256)", +"4a2c07f9": "absoluteTopUp(address,uint256)", "4a2c3204": "getUserFLCEarned(address,address)", "4a2cd48f": "getPreviousDate(bytes10)", +"4a2d2ae0": "referralAmountLv2(address,address)", +"4a2d315b": "WOLF_MINTER_ROLE()", "4a2d5b6b": "getReleaseRatios(address)", +"4a2d83b4": "setVistor(address,bool)", "4a2db4d8": "GetWinCards()", "4a2dfbb4": "artWorkChangeRequest(uint256,string,uint8,bytes32,bytes32)", "4a2e7752": "hashBid(address,uint256,address,address,address,uint256,uint256)", "4a2ee75f": "addArticle(bytes,bool)", +"4a2ef2cd": "setIsRewardBuyerDandy(bool)", "4a2f2333": "BitcoinMobile()", "4a2f37a6": "updateItemTraits(uint256,uint256)", "4a2fb1e4": "_mentors()", +"4a2fb3bf": "setHoneyLv4Num(uint256)", "4a2fed3d": "test_SixtyPercentRules()", "4a2ff078": "getRateFor(string)", "4a303d30": "optAddressIntoHolding(address,uint256)", +"4a30a3d3": "FUNDING_SALE_DURATION(uint256)", "4a30f976": "censorship(uint256,bool,bool)", +"4a311f4d": "bulksendToken(address,address[],uint256[])", "4a31259f": "totalNtsSoldWithBonus()", +"4a31d884": "AddressLockedByKYC(address)", "4a31dee2": "setTokenIdByIndex(uint256,uint256)", "4a3270d7": "bytesStorage(bytes32)", "4a330319": "tokensaleEndTime()", "4a3310b8": "hasConfirmed(bytes32,address,address)", "4a334c1c": "closePlacingPhase()", +"4a336ce9": "getKsjByOwner(address,uint256)", +"4a340993": "setFeeRecipent(address)", "4a348da9": "getProductCount()", +"4a3498ac": "foo(uint256,uint256,string)", "4a35035a": "dropNumber()", +"4a3552e4": "omgAddress()", "4a3573f1": "assignReservedTokens(address,uint8,uint256)", "4a35d3ba": "SetBuildingSale(uint256,uint256,uint256,uint256)", "4a35db7c": "restartValidation()", +"4a36314f": "ethozbal()", "4a363fbc": "testNetworkDeployment()", +"4a364354": "voteToBurn(address)", "4a366c46": "Th0m4z()", "4a367140": "FoundersContract(address)", +"4a3672c3": "setNum2(uint256)", "4a367827": "mintingStopDate()", "4a367c68": "PrivateSaleStartTime()", "4a367d73": "UpgradeMaster()", "4a36870a": "firstRewardPeriodPercent()", +"4a36a9c0": "setABS(address)", +"4a36b447": "burnBCByCardName(string)", "4a36df25": "setMigrateContract(address)", +"4a3740d4": "exercisePosition(uint256)", "4a375bc4": "FlagUint(uint256)", "4a376c97": "OpenToThePublic()", "4a37b5f7": "MyWill(address,string,string,string,address)", +"4a37efcc": "calculateReedemable(address)", "4a382c36": "freezeAccount(address,bool,uint256)", "4a387bef": "removeLock(address)", +"4a389442": "TxnSumbitted(uint256)", +"4a38df4d": "TokensRefunded(address,uint256)", "4a393149": "onTransfer(address,address,uint256)", "4a398c11": "SWIFTStandardToken(uint256,string,uint8,string)", "4a39a5f4": "ALC_DECIMALSFACTOR()", +"4a39e876": "PERCENT_STEP3()", +"4a39ec90": "bets(address,uint256)", +"4a39fa80": "setErc20Address(address)", "4a3a835c": "withdrawAfterEnd()", "4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", "4a3a92f6": "minusFreezingTime(uint256,uint64)", +"4a3adac1": "mintDcdc(address,address,uint256)", "4a3b0eec": "authorizeOpen(uint256,bool,string)", "4a3b68cc": "referrers(address)", "4a3bd672": "time1()", @@ -42525,86 +77908,155 @@ "4a3d3510": "updateVotesOnTransfer(address,address)", "4a3d3c09": "castleMinBrick()", "4a3d5ec9": "ProofImpl(address)", +"4a3d66dc": "getSeriesMetaURI(uint256)", "4a3d72a1": "balancesContract()", +"4a3d84e8": "GEN0_GENERATION_FACTOR()", "4a3db7e7": "_generate(uint256,address)", +"4a3e0053": "_checkRoundExists(uint256,uint256)", +"4a3e00f2": "Tender()", "4a3e2b21": "unpaid(bytes12)", "4a3e4f90": "scamFlags(address)", "4a3e8078": "emissionAddressUpdate(address)", +"4a3efb70": "_verifiedTokens(uint256)", "4a3f17e7": "hodlers(address)", +"4a3f5294": "getBuy(uint256,address)", +"4a3f6ecd": "setCardPrice(uint256,uint256)", "4a40e85b": "setMAYExchangeRate(uint256)", +"4a410ceb": "rewardLP()", "4a411f5a": "EventLuckyNumberRequested(address,uint256,uint256,uint8,address)", +"4a4131f7": "pkid()", "4a418b95": "logFlush(address,address,address,uint256)", "4a418fb7": "numOfTransferableCompanysTokens()", "4a41d1ac": "verify(address,bytes)", "4a41d6f5": "_clearAllApproval()", +"4a41d89d": "durations()", "4a41e045": "getUint8(int8)", "4a420138": "scheduleHeartbeat()", "4a4226a5": "TeamHeadsChoice(address)", +"4a427c0c": "gTransferFromBurnBP(address)", "4a42a397": "TakeSellOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"4a42ce9a": "BuyHistory(address,address,uint256,uint256,uint256)", "4a42d99b": "donGameGiftLineTime()", "4a432a46": "updatePrice(string,uint256)", +"4a432a99": "disapproveAll()", +"4a433079": "chiDeploy2(uint256,bytes)", +"4a439cc0": "onPurchase(bytes32,address,uint256,uint256,uint256)", +"4a440ad2": "getSumElements16()", "4a443471": "_money()", +"4a4442ec": "cachedDivisors(address)", +"4a44652f": "GetUserBlockchainAddress(string)", "4a44664b": "withdrawVPCxTokens(address)", "4a44bdb8": "getBlock(uint256,uint256)", +"4a44f379": "setbaseURI(string)", "4a4507ff": "testInitialBalance()", +"4a452a1a": "tokenDistributionRate()", +"4a4581aa": "burnTokenBal()", "4a45b60b": "unregister(address,address)", +"4a45b7d9": "allocationFromToken(uint256,bool)", "4a45beed": "Accept(bytes32,string)", "4a45d2e6": "setParam(uint256)", +"4a462dba": "getBuyClaimCost(address,address,address,uint48,uint256)", +"4a4643f7": "depositedAmount(address)", "4a4666c1": "addAuthorizer(address)", "4a4753bc": "BonusesDistributed()", "4a48314f": "hodlerTime3M()", +"4a49403a": "Deleted(bytes32[],address)", +"4a498429": "airdropDist()", "4a49ac4c": "removeFromBlackList(address)", +"4a49f166": "plus(int256)", +"4a4a1e81": "TransferSell(address,uint256,uint256)", "4a4a2569": "getAudCentWeiPrice()", "4a4a26d7": "EnChangToken()", "4a4a2a97": "performReentrancyAttack()", "4a4a2b52": "unfreezeAdministrationContract()", +"4a4b2730": "LOCKED(uint256)", +"4a4b498b": "Take4Angle()", "4a4b4eb0": "WISDOMCOIN()", +"4a4b52b4": "getLastHandledGroup()", "4a4b674a": "setPenalty(uint256)", "4a4b7202": "PPBC_API()", "4a4b7de6": "deedContract()", +"4a4baa8f": "viewUserReferral(address)", "4a4baed7": "setTokenControlInfos()", +"4a4c021b": "encodeData(address,bytes32,int64)", "4a4c1bcd": "LeviusDAO()", +"4a4c40cc": "factory1()", "4a4c560d": "whitelistUser(address)", "4a4c5e59": "proceedTokenDeals(uint256)", "4a4c82c6": "_resetSpentToday()", +"4a4d59fa": "power()", +"4a4d68a0": "deployCampaign(address,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"4a4d9b00": "setServicestationAddress(address)", "4a4e3bd5": "emergencyUnpause()", "4a4e5776": "stepDuration()", "4a4e6f95": "addFeedOut(address,address,int256,uint256,uint256)", +"4a4e7b65": "_activateOption(address,uint256,uint256,bool)", "4a4e8884": "getUserAddress(bytes32)", "4a4ede50": "transferSalesAgentPermissions(address)", "4a4ef738": "addAddressToPrivateWhiteList(address,uint256)", "4a4f76d5": "getInitializeEndTime()", +"4a4f77f3": "DividendsAdded(uint256,string)", +"4a4fb5d6": "totalEthTransformed()", "4a4fbeec": "isLocked(address)", "4a4fd24d": "addMileagePoint(address,uint256,int256)", +"4a5017ea": "Best_Wishes(uint256)", "4a5033eb": "Reverted()", "4a504a94": "Confirmation(address,uint256)", "4a50c3a7": "EtherToWei(uint256)", "4a5163b5": "numDefinedGames()", "4a51dcea": "TIER3_CAP()", +"4a522543": "setSellCap(uint256)", "4a522e4e": "winCosFromGame(uint256,uint256,string)", +"4a5245b4": "bLOTToken()", +"4a527ca7": "addTokenDetails(address,uint256,uint256,uint256)", "4a52a5f8": "TerraFirma()", +"4a52ac6a": "lockRewardsPercentages(uint256)", "4a52e506": "enableLostAndFound(address,uint256,address)", +"4a53165a": "addNewCustomZaToken(address)", +"4a5367bb": "sumVotingPowerProposer()", "4a53c127": "setTargetDiscountValue7(uint256)", +"4a53c482": "pendingMid(uint256,address)", +"4a542ae2": "SetTargetTemperature(int256)", "4a54315c": "registerUser(bytes32,string)", +"4a5479f3": "feeds(uint256)", "4a54c00d": "sendRemainingTokensBool(address)", "4a54fb0a": "updateProduct(bytes32,string,address,uint256,uint8,uint256)", "4a55308c": "firstSellPrice()", +"4a562885": "back(uint256)", "4a562d81": "returnDeed(address)", +"4a563694": "unstakeYFL(uint256)", +"4a56b7e8": "PrivateSalePlacementLimitSet(uint256)", +"4a56fcd4": "buyBackAddress2()", "4a574d18": "bonusMode()", "4a5791e0": "UnFreezeProduct(uint256)", +"4a57bc14": "Sredemption(uint256)", "4a57c032": "IcoDiscountLevelsChanged(address,uint256,uint256)", +"4a57cfce": "setConstantClaimableUSD(uint256)", "4a57e1c9": "finalizeTransaction(uint256)", "4a583ec5": "confirmSettlement(uint256,uint256)", +"4a583f83": "runMachine(uint256,uint256)", +"4a584432": "borrowCaps(address)", +"4a5862aa": "setStatedPeriod(uint256)", "4a588d87": "CYB(uint256,string,string)", +"4a588e9d": "tokenReward8()", "4a5891ac": "changeEternalStorageContractAddress(address)", +"4a58ba07": "getSchainsPartOfNode(bytes32)", "4a58c409": "changeStartSale(uint256)", +"4a58ca0e": "redeemOrder(uint256)", "4a58cf22": "totalSupplyInWei()", "4a58db19": "addDeposit()", +"4a58ddce": "getBasicTradeData(uint256)", +"4a599adb": "HirerRequestedCancel(bytes32,address)", +"4a59b415": "readLicenseByIndex(uint256)", +"4a59b4b6": "ChangedRegulator(address,address)", +"4a59e6ea": "DeleteMinter(address)", "4a5a3d76": "setETHPriceManually(uint256)", "4a5a831b": "EthlanceConfig(address)", "4a5baa1b": "VULCAN_POD_EXTRACTION_BASE()", "4a5c2d6e": "Change(address,uint256,address,uint256,address)", +"4a5c767a": "overload1(int256)", "4a5c8f1a": "getEarnEachBlock()", +"4a5cab98": "snapshotInEra(address,uint256)", "4a5db3b5": "authorizeAddress(address)", "4a5dcb5b": "Candy(address,address)", "4a5dcdc9": "RANGEEND_9()", @@ -42613,13 +78065,23 @@ "4a5e1cf3": "initLottery(uint16,uint256,uint8)", "4a5e4fa8": "setExpReward(uint32)", "4a5e70c0": "ObitanChainToken()", +"4a5e9c74": "Zap(address,uint256,uint256)", +"4a5ecb36": "isTeamWallet(address)", "4a5ecc66": "Sale(address,address)", +"4a5ed3c7": "LockBalance(address,uint256,uint256)", +"4a5f1d70": "getAssetValueETH(address,uint256)", "4a5f41b6": "checkCanInvestInternal(address,uint256)", +"4a5f5456": "__escrowSentTokens(uint256)", +"4a5f991b": "getDealD(address)", "4a5fca4f": "offChainTokens()", "4a5ff749": "teamAddr()", "4a601994": "WesTechToken()", +"4a6033db": "is_valid_time()", "4a606c53": "_db()", "4a60751f": "refundingEndtime()", +"4a610b04": "failedMessageSender(bytes32)", +"4a610d76": "rejectMintRequest(string)", +"4a610ea8": "rewardsPerDuration()", "4a61179b": "MANHATTANPROXY11THWEAVE()", "4a617faa": "shaBid(bytes32,uint256,bytes32)", "4a617fba": "gooDepositDivPercent()", @@ -42628,103 +78090,175 @@ "4a6213a1": "MAKERDAO_FEED_MULTIPLIER()", "4a624310": "getAngelInfoByTile(uint16,uint8)", "4a627e61": "someValue()", +"4a62ac75": "getIdRow(uint256)", "4a62cc73": "auditQueueExists()", "4a62f5eb": "_isTokenActive()", "4a63464d": "adminClaimAirdrop(address,uint256)", "4a635d05": "testCampaignGoalReached()", +"4a636a7f": "getLtPrice(uint256,uint256)", "4a63864b": "RATE_RATIO_SCALE()", +"4a63929f": "yourHype_BetBalance(address)", +"4a6399ed": "requestActivityDistance(address,address,string)", +"4a63aab1": "setBtcTxFeeRewardRateAndUpdateBtcPrice(uint256)", "4a63b3d3": "lockBlock()", "4a63f8a4": "presellTimer()", +"4a643326": "updateSoilContract(uint256)", "4a6458ae": "Rescued(address,uint256,uint256)", "4a64c23f": "removeCbAddress(address)", +"4a64d067": "setLendingToken(address,bool)", +"4a64e867": "getUserHoldBonus(address)", +"4a660998": "getNewLevel(address)", "4a661152": "get_exchange_wei()", +"4a661850": "suspendSynthExchange(bytes32,uint256)", +"4a661b31": "balanceOnIdle()", +"4a66403b": "runeAllocation(address)", +"4a667905": "isValidSignatureAndData(address,bytes)", "4a66ddff": "twin_contract()", "4a67fa7d": "setLotteryFee(uint256)", "4a681b1b": "EXPECTED()", "4a683a65": "addBTCTransaction(uint256,bytes16,address)", "4a68492c": "setTransferAgentStatus(address,bool)", +"4a68e283": "getNewRedShare(uint256)", +"4a690950": "totalKwh()", +"4a69ac50": "getTokenInfo(address[])", "4a6a225e": "proxyPayment(address,bytes4,bytes)", +"4a6a84a6": "Bem()", "4a6aac33": "DATE_31_DEC_2020()", "4a6b0b05": "NewArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", +"4a6b1ea7": "getRemainedDirectRegister()", +"4a6b52b5": "SPReward()", "4a6b8cf6": "setPretgeAddress(address)", +"4a6b9019": "get_commission_02_fee()", "4a6b9473": "registerActionEvent(bytes32)", +"4a6ba2f1": "setAdmins(address[],bool[])", "4a6bb4a5": "updateWallet(address,address)", +"4a6bdd6a": "withdrawTRX()", "4a6bfa2d": "salesActive()", +"4a6c0c3a": "_initMarginRatio()", "4a6c121d": "uintToBytes32(uint256,uint256)", +"4a6cc677": "batchBurn(address[],uint256[])", "4a6cfca7": "getAccessory(uint256,uint256)", "4a6d0292": "addSale(address)", +"4a6da481": "userHoldsSufficientRound1Token(address)", +"4a6dbfc8": "LogTokenNameChange(address,string,string)", "4a6de5c3": "_getAvailableBalance()", +"4a6e0dd0": "collateralConfigs(uint256)", "4a6e2ffe": "calculateReferral(uint8)", +"4a6ed0b4": "mulHero2()", +"4a6f01b1": "feelessSender(address)", "4a6f2691": "setBoolF1(bool)", +"4a6f3da4": "pendingAUSCPrice()", +"4a6f910e": "lock(address,uint256[],uint256[])", +"4a6fc0f6": "skipMap(uint256)", "4a7004b9": "getTotalTokenDepositByAddress(address)", "4a700545": "PrivateSaleAddress()", "4a701fc3": "setownerInfo(address,bytes32,bytes32,bytes32)", "4a7084bb": "setPublicOfferDate(uint256,uint256,uint256)", +"4a70a3b1": "whiteListedAddress()", +"4a70afe6": "RefererSet(address,address)", "4a714378": "toggleVending(uint256,uint256)", "4a714c24": "payers(address)", "4a7160a2": "addSet(bytes32)", "4a716adf": "transferVotes(uint256,address)", +"4a717da2": "openNonce(uint256)", "4a719a27": "getTargetRepMarketCapInAttoeth()", "4a71a768": "setWeiCapPerAddress(uint256)", +"4a71b469": "getSystemCoinCeilingDeviatedPrice(uint256)", "4a71d469": "collectRev()", +"4a71d52a": "obtenerCliente(uint256)", "4a720287": "setEarlyEndTime(uint256)", +"4a7269a6": "setTokenDifficulty(uint256,uint256,uint256)", +"4a729b4a": "MAX_HOUSE_RATE_BPS()", "4a729fe1": "pay(address,bytes12)", "4a733ded": "paybackContribution(uint256)", "4a738bea": "withdrawWithFee(address,uint256,bytes32,address,uint256,bool)", +"4a73d9cf": "userLocation(address,uint256)", +"4a7446eb": "initiateContract(address,uint256,uint256,uint256,address)", +"4a748ac0": "burnPerp(address,uint256,address)", +"4a74bb02": "swapAndLiquifyEnabled()", "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)", +"4a762d67": "initialize(bytes32,address,uint256,uint256,uint256)", "4a765625": "AliParsafar()", "4a76564e": "tokenReleased()", +"4a765f7d": "emergencyWithdrawAssets(address)", "4a76869f": "commitOrder(string)", "4a768eaa": "buytoken(address,uint256)", +"4a77089d": "TipMade(address,address,uint256)", "4a7759f8": "BALL()", "4a776104": "canFinishPVP()", +"4a7781d9": "sPrice()", "4a77f870": "migrateAll()", +"4a782bfa": "registerNewContractor(address,string,string,string,string,string)", "4a78a594": "getClaim(string,string,address,uint256)", "4a78cdba": "jackPot()", "4a7902d2": "changeRoot(address)", "4a790540": "getPastWinnerPrizes()", "4a793c0c": "cidTotalTokenSupply()", "4a797494": "priceRound3()", +"4a797b47": "beginning()", "4a7987a2": "setProvider(bytes32,address)", +"4a799582": "approve_806(address,uint256)", "4a79d50c": "title()", +"4a7b0336": "isACryptograph(address)", "4a7b1acc": "MapDemo()", "4a7b26ec": "join_game(uint256)", +"4a7b27e9": "votingPowerChangeCount(address)", "4a7b7ec3": "mintMarketMakerCancel(address,address)", "4a7b8f21": "addHarvestOperationEndorsement(string,bool,string,string)", "4a7bb697": "AssignGGCPoolOwner(address)", +"4a7c3d50": "positionListIndex(uint256)", "4a7c7e46": "uintToAscii(uint256)", "4a7cb0f5": "FoundationRequested(address,address,bytes32)", +"4a7cea10": "test2ContractAddress()", "4a7d505c": "initBetType()", "4a7d5899": "payOut(address[])", +"4a7d80b3": "withdrawalWallet()", "4a7d8bcc": "getCurrentTokenPricepreICO(uint256)", "4a7d9f0f": "getSettlementPeriodEnd()", +"4a7dbaf4": "unapprove0()", +"4a7dc745": "upgradePerm(address)", "4a7dd523": "generate(uint256)", "4a7de068": "finalizeSetDelegatedFrom()", "4a7e00de": "rejectCompanyAllocation(address)", "4a7e049e": "getFullCompany(address,uint256)", "4a7e130e": "remainTime()", +"4a7e235e": "YCT()", +"4a7e9708": "deployAndRegisterContract(string,uint256)", +"4a7faeb6": "PROPOSAL_CREATE_COST()", "4a7ffcbc": "daoContract()", "4a800b98": "cancelChampSale(uint256)", "4a803387": "insert(uint256,uint256,uint256)", "4a8075ac": "SaleAuction(address)", +"4a80928d": "setPayment(uint32)", +"4a80d7bd": "getCurrentBlockReward()", "4a80dcab": "getProjectMilestonesCount(bytes32)", "4a80f2ba": "registerKey(string)", +"4a811210": "deploy(string,address,uint256,uint256,uint256,address,uint256,uint256,bool)", "4a812023": "logUniverseForked()", +"4a815d75": "r(uint8)", +"4a81a9f1": "removeFeed(uint256)", "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)", +"4a828152": "_withdrawForDay(uint256,uint256,address)", +"4a82b269": "startAirdropCAKEX(uint256,uint256,uint256,uint256)", "4a8302a2": "SynixToken(uint256,string,uint8,string)", "4a8305b4": "newCoinOwner(address)", +"4a837bbf": "AddTokens(address,uint256)", "4a838caf": "ethfortnite()", +"4a8393f3": "sellOrders(uint256)", "4a83cfa9": "burnMedal(uint256)", +"4a8419fd": "withdraw20(address)", +"4a847390": "vatFab()", +"4a84ca5c": "setRewardRatePerDay(uint256)", "4a84fa81": "checkRokSold()", "4a85223b": "addUser(address,string,string,int256,string)", "4a85280e": "isAuthorizedAddress(address)", @@ -42732,166 +78266,327 @@ "4a85d0d5": "HeliumNetwork()", "4a85dbcd": "setVal(string,uint256)", "4a8646c3": "HomeLoansToken(uint256,string,uint256,string)", +"4a86705b": "updateKvalue(uint256)", "4a8671f1": "newWallet()", "4a867488": "setVestingPercent(uint256)", +"4a87afff": "getTreasuryUSD()", "4a87b419": "cancelApproveFee()", "4a87e08a": "BUY_CITY_FEE()", +"4a880942": "getEstimatedReturnOnExercise(address)", "4a881ac6": "addAddressDescription(string,address)", +"4a88b189": "unlock_tokenSale(address)", "4a88eb89": "altDeposits()", "4a88f9c7": "exFees(uint256)", +"4a8913a6": "getSchainOwner(bytes32)", "4a891e7f": "FinalizeMove(address,string,string)", +"4a895b04": "ServerAdded(address)", "4a896384": "ask()", "4a8967a6": "_today()", "4a8a6eac": "CarRegistered(uint256)", "4a8a83db": "calculateVestedTokensTime(uint256,uint256,uint256,uint256,uint256)", +"4a8aba01": "LogAdvertisement(address,address,uint256)", +"4a8b1e43": "set_recommender_cond(uint256)", "4a8b2b27": "testOne()", "4a8b5389": "allocateBountyAndEcosystemTokens()", "4a8beaf4": "decline(string)", +"4a8c086c": "getStartedWithGiftAmount()", "4a8c1fb4": "isActivated()", "4a8c2d64": "TopsXToken(uint256,string,uint8,string)", "4a8c3129": "MultiOwners()", "4a8cbae1": "charityPercent()", +"4a8cc5b7": "builders(uint256)", +"4a8cd3cd": "_seriesHash(uint256,uint8,uint256)", +"4a8cfa69": "investAllUnderlying()", +"4a8d27af": "bonusPercents(uint256)", +"4a8d4aae": "_resetContext()", +"4a8d632c": "orcl()", +"4a8dbdc3": "userEraStakedAmount(uint256,address)", +"4a8df3e2": "getlevelPrice(uint256)", "4a8e4d78": "getDuesIn(uint256)", "4a8e5651": "resultAccept()", "4a8ef4bd": "setOrderBookAcount(address)", "4a8ef851": "pushTicketSetToAccount(uint256,uint256)", +"4a8f0916": "rafflesLength()", +"4a8f14e6": "tapPerBlock()", +"4a8f22eb": "closeGrassland()", +"4a8f671d": "MintPack(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4a909d5f": "transferWithLockup(address,uint256,uint256)", +"4a90eb64": "createNFTSaleForERC20(address,uint256,uint256,address,uint256)", "4a910046": "getLastHash()", "4a914e8c": "calculateTotalExpenseWithdrawableAmount()", "4a915ea2": "votedHarvest()", +"4a9168c1": "paySignHash(uint256)", +"4a91787c": "removeProviderPool(address,address)", +"4a91d4b4": "PickMade(address,uint8,uint256)", "4a91e536": "getWinnerDetails(uint256)", "4a91ec80": "prospectors_dev_allocation()", "4a91ee2a": "allowByPassword(bytes8,bytes)", "4a91f195": "totalBought()", +"4a91f2e5": "resolveDDR(uint256,uint256,uint256)", "4a923199": "maximumTNB()", +"4a928ee5": "FundsClaimed(address,uint256,uint256)", +"4a92ae4f": "NotEnoughDaoErrorEvent(uint256,uint256)", +"4a92c4d4": "feeye18()", +"4a92e3fa": "WhitelistAdd(address)", "4a92fa06": "createPromoRide(address,string,bytes7,uint256)", "4a92fb3a": "proxyTransfer(address,address,uint256)", +"4a93aed0": "setBearAddress(address)", +"4a93e0da": "orderFilled(uint256)", "4a943eb3": "numsuccesses()", "4a945f8d": "setAddresses(address,address,address,address)", "4a947bdb": "putMatingRequest(uint256,uint256)", +"4a94c28c": "executeTransferInternal(address,address,uint256)", "4a950db6": "tradetxToken()", "4a950f00": "TurkeyBurgerToken(uint256)", "4a955659": "_getNewLotteryCreatedAt()", +"4a95adc0": "currentSmartpotTwo()", +"4a960261": "implement(address)", "4a96712e": "confirm(bytes32,address,uint256,uint8,bytes32,bytes32)", "4a96d129": "OfferTime()", "4a975d6b": "allocateRestrictedTokenTo(bytes32,bytes32,bytes32,uint256)", +"4a97919c": "redeemStream(uint256)", +"4a97f0e6": "leethContractAddress()", "4a980b49": "IRideToken()", "4a98146a": "VILLAGE_START_PRICE()", +"4a987bc3": "ICO(address,uint256,uint256)", +"4a98ecb2": "MakeCalls(uint256,bytes[2])", "4a994d22": "_getReleaseDate(uint256)", "4a994eef": "setDelegate(address,bool)", "4a9952c7": "setMintTokenOwner(int256,address,address)", +"4a99950b": "mintWithURI(address,uint256,string)", +"4a9a0b83": "swap3(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)", "4a9a6f15": "getFromFaucet(string)", +"4a9a75aa": "creditLimitOf(address)", +"4a9a7ce5": "OnEthWithdrawn(address,uint256)", "4a9b3f95": "personUpdateName(uint256,string)", +"4a9b4872": "BidDeclared(uint256,uint256,address)", "4a9b5c2e": "CREATOR_TOKEN_END()", +"4a9ba754": "approve_733(address,uint256)", "4a9bdb65": "byuoutCount()", +"4a9bea40": "verifySig(bytes32,bytes32,bytes32,uint8)", +"4a9c6c36": "lockingEnabled(address)", +"4a9c795b": "onReLoadAndDistribute(address,bytes32,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"4a9c9c83": "arAsset_coords(uint256)", +"4a9ca23b": "setParams(address,address,uint256,uint256)", "4a9cdfad": "setPlayerLAff(uint256,uint256)", +"4a9d2373": "_decreaseCollateral(uint256)", "4a9d367b": "RecipientChanged(address,address)", "4a9d9172": "test_testableStandardCampaignAbsolvementAfterPayout()", +"4a9e20f0": "change_employee_salary(uint64,address,uint256)", +"4a9ee335": "_TouchAndRemoved(bytes32)", "4a9f0110": "setSellDailyLimit(uint256,bytes2,uint256)", +"4a9f29f6": "getYeaHammerContract()", "4a9f6d4a": "setMaxPreCrowdAllocationPerInvestor(uint256)", +"4a9f9821": "WETHAdd()", "4a9fefc7": "getReferrer(address)", +"4aa00626": "get_voting_balance()", +"4aa028d8": "setNames(string)", +"4aa06652": "getAmountOut(address,address,uint256)", +"4aa12ec7": "updatingStakingReward(address)", +"4aa149e3": "__TermPool_init_unchained()", "4aa16737": "enter(uint8)", "4aa1acb3": "withdrawEth(uint256,bytes)", "4aa1d21b": "transferDryRun(address,address,uint256,uint256)", "4aa1dde4": "isDisclosureFullySigned(uint256)", +"4aa22f98": "usersLookup(address)", +"4aa28be8": "createBid(uint256,uint256,uint256,uint256)", +"4aa2efd2": "switchTransferLock()", "4aa2f0f5": "HKD_Omnidollar()", +"4aa3aaf5": "_harvest()", +"4aa3bf3b": "claimERC20Prize(address[],uint256[])", +"4aa3f624": "unStakeToken()", "4aa3fcd3": "_getSkillConfigs()", "4aa41e53": "minFinneyPerHedgeTransfer()", +"4aa420b3": "addStateReceiver(address)", +"4aa46fde": "spendLimitUpdateable()", "4aa47a50": "isIntermediateVault()", +"4aa4a4fc": "WETH9()", "4aa4ba9b": "storeBatch(string)", +"4aa4e0b5": "getUsedBalance(address)", +"4aa50e40": "getBcons()", "4aa5a05d": "maxP1Cap()", "4aa5b398": "voteCurrentResult()", +"4aa5bc8d": "getFPAddressByIndex(uint256)", +"4aa5bca3": "ticketsOpen()", +"4aa5e789": "mintAndCreatePools(address,address,uint48,uint256,address,uint256,uint256)", +"4aa5f391": "interrupted()", "4aa669d8": "Buy_Wall_level_in_wei()", "4aa66b28": "getBonus(uint256)", "4aa678c3": "getMyUnlockValue()", "4aa6c09a": "setTargetDiscountValue3(uint256)", +"4aa6c475": "withdrawTamag(uint256,uint256)", +"4aa6d417": "projectScriptInfo(uint256)", "4aa735c0": "BST()", "4aa74c27": "_emitFuture(bytes32,uint256,uint256,uint256)", "4aa77c71": "Visualrocktoken()", "4aa83079": "setSaleContractFinalised(address)", "4aa880c1": "SetFactoryParams(bool,bool,uint256)", +"4aa8cd92": "getEtherPerToken()", "4aa8e57e": "buyBox1()", "4aa8e773": "Cancel()", +"4aa91574": "setMintLessThanMinimum()", +"4aa91fbc": "teamBalanceMap(address)", +"4aa9a977": "nfi()", +"4aa9fc1a": "borrowTknAndTransfer(address,address,uint256)", +"4aaa831d": "n2()", "4aab421d": "tgrAmountCollected()", "4aab8c14": "setPonzi(uint8,uint256)", "4aabcec7": "SimpleWallet()", "4aac390a": "hasLanguage(address,address,uint256)", +"4aac4fae": "assetBaseInfo(uint256)", "4aac75a7": "setMainSaleDates(uint256,uint256)", +"4aac84e5": "getItemInfo(bytes32)", +"4aac86ba": "findFreeReferrer(address,uint8)", +"4aac9d24": "updateDFL(uint256)", "4aaca86d": "saleStage()", "4aacd437": "freezeAccountPartialy(address,uint256)", "4aaceed3": "icoBonus2()", +"4aad528f": "nkcnList(uint256,address,uint256)", +"4aad75b1": "addServicePool(address)", "4aada45f": "KittensDroped(uint256,uint256)", +"4aae13ca": "getTransaction(bytes32)", "4aae385f": "preSaleFirstStartDate()", +"4aaed378": "getBoosterInfo(uint256)", "4aaf4a12": "getOwner(string)", "4aaf6b86": "contract_state()", +"4aafef50": "lockTokenBalance(address)", +"4aaff006": "createCastle(string,uint64,uint64,uint64,uint64,uint64,uint64)", +"4ab080f8": "pigeonSend(uint256,uint256,uint256,uint256)", "4ab0c0ee": "testConcatMemory32Bytes()", +"4ab0cac9": "MEDALS_REWARDS(uint256)", +"4ab0d190": "fulfillOracleRequest(bytes32,uint256,address,bytes4,uint256,bytes32)", "4ab0fc08": "setDefaultURIEnd(string)", +"4ab176c9": "registerManyUsersExternal(address[],uint256)", "4ab1c98f": "requestControllerContractMigration(address)", "4ab24cf3": "pornToken()", "4ab273f0": "SellEggs()", "4ab320b4": "viewSettingsChange(uint256)", "4ab358c7": "recoverFunds(uint256)", +"4ab38a58": "XNOGames()", "4ab3bbdc": "_brokerFeeDistribute(uint256,uint256,uint256,uint256)", "4ab3bc23": "getSelfCardDatas()", "4ab3d487": "newEntry(uint256)", +"4ab3ff5a": "setUnitCoinProductionIncreases(address,uint256,uint256,bool)", "4ab40ac6": "allOpenTradesAmounts()", +"4ab45d33": "CETH_ADDRESS()", +"4ab49c1e": "calculateAssetOut(uint256)", +"4ab4c938": "isETHLGEOver()", "4ab5439b": "TEAM_POOL_ADDR()", "4ab54530": "inPreSale1Period()", "4ab5cc82": "latestValue()", +"4ab5d0b3": "deFiat_Token()", +"4ab5f8a5": "getSuppliesNow(address)", +"4ab6a73a": "getTotalYesVotes(address)", "4ab6d337": "getContributorsLength()", +"4ab6ee24": "batchTransferBTCGW(address[],uint256)", "4ab74a1e": "tok()", "4ab7508a": "multiWallet()", +"4ab75c40": "getBMember()", "4ab788cb": "prebridge()", "4ab798f1": "toggleTransfer()", "4ab7cbfe": "getMinerHalvingHashRateOf(address)", +"4ab7d581": "RelayedMessage(address,uint256,bytes32)", +"4ab83150": "updateAskPricePerItem(address,uint256,uint256)", +"4ab85df0": "convertExactEthToToken(address,uint256)", +"4ab88427": "setup(address[],uint256)", "4ab89400": "cancelRefund(address)", "4ab9792d": "setTokenFrom(address)", +"4ab994ad": "contributorBalance(address)", +"4aba4f6b": "isRngCompleted()", "4aba5f34": "getCandidatesList()", "4aba76a3": "ESlotsToken()", "4aba7f96": "setMixGenAddress(address,address)", +"4abab6e7": "_encode_uint32(uint32,uint256,bytes)", "4abad407": "startCrowdfund(uint256)", "4abb525a": "moonIncContract()", +"4abb54d0": "getTokenToTokenOutputPrice(address,address,uint256)", "4abb9d39": "depletable()", "4abc8652": "inPrivateSalePeriod()", +"4abd4c85": "setFreeSpins(address)", "4abd89bd": "MDICOStage2(address,address,uint256,uint256,uint256,uint256)", "4abd8e01": "putStcWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "4abd8f65": "updateEnabled()", +"4abda84a": "mintlock()", +"4abdb44d": "SECTION_ISSUANCE()", +"4abdc365": "flush_UNI()", "4abdf2e0": "setWithdrawLimit(uint256)", "4abe1a62": "settleEtherPolicy(address[],uint256[],uint256[],uint256[])", "4abe34f2": "TecToken(string,string,uint8,uint256)", +"4abe5357": "changeMaxTokensPerUser(uint256)", +"4abe5c4a": "admin_activate()", +"4abee39e": "upgradeTo_Split_2(address)", "4abefa36": "getEmployees()", +"4abfa163": "donors(uint256)", "4abfacfd": "createTeam(string,string,uint32,uint32,uint256)", "4abfbbe3": "getBlockInfo(uint8,uint8)", +"4ac022c5": "getPollIdsByTokenAddress(address)", +"4ac03ec2": "addProject(uint256,bool)", "4ac0b6b0": "preparePaymentReferrer(address,uint256)", +"4ac0ca0c": "placeBets(address,uint256[],uint256,string)", +"4ac0d0cb": "createRewardProject(bytes[],string,bytes[])", "4ac0d66e": "newGreeting(string)", +"4ac0fdf3": "totalgameplayeduser(address)", +"4ac17f83": "voteLenth()", +"4ac1a4c1": "_isValidAreaOrCategory(uint256)", "4ac1ad78": "getWeekday(uint256)", "4ac1b5ff": "GoldmintUnsold(address,address)", +"4ac22193": "addPool(address,uint256,uint256,bool)", +"4ac22b3c": "lockLicenceDAO()", +"4ac23904": "cap_tdat()", "4ac25224": "isChannelOpen()", "4ac2d103": "miningReward()", +"4ac2f28d": "weiMin()", +"4ac341cc": "validAcoCreators(address)", +"4ac3550c": "swapMStable(string,string,uint256)", "4ac36201": "Yachtco()", "4ac365c2": "DividendTransfered(uint256,address,uint256,uint256,uint256)", "4ac38f13": "BlupassToken()", "4ac39f37": "unsafeIsSigned(uint16)", +"4ac3c31b": "isColdWallet(address)", +"4ac3e116": "t1ArrayIndex(address,uint256)", +"4ac40764": "allFtokenMarkets(address)", "4ac429f2": "ConstantinopleCheckFunction()", +"4ac4a0f4": "price1Average(address)", +"4ac4e25a": "performAction(address,uint256,string)", "4ac54245": "_fulfill(bytes32)", +"4ac5434a": "enhanceStrengthRateByindex(address,uint256,uint256)", "4ac5aae5": "getTotalBonus()", "4ac5dea9": "getRoundPointer(uint256,uint256)", +"4ac5e5bc": "register(uint256,string,uint256)", +"4ac5f3dc": "curriculum6()", +"4ac68e51": "changeTokenAddy(address)", +"4ac69655": "mintObject(address,uint128)", "4ac6b2be": "getCheckRecordCreator(bytes)", "4ac6d5f4": "frostTokens()", "4ac79795": "removeLogic(address)", "4ac7becf": "SimpleSign()", +"4ac826da": "claimedReserve(address,address)", "4ac84218": "RequiredFeeNotMet(uint256,uint256)", "4ac84242": "CWT(uint256,string,string)", "4ac87af7": "frozenToken(uint256,string)", "4ac87e47": "Bittwatt(uint256)", +"4ac89714": "buy(uint8,uint8)", "4ac8a529": "createDispute(uint256)", +"4ac8eb5f": "totalCollateral()", +"4ac9052a": "RateChanged(uint256,uint256)", +"4ac948b8": "Distributor(address)", +"4ac9a05a": "finishDebit()", "4ac9f0d7": "behalfer()", "4ac9f881": "takeSellOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", "4ac9fc37": "updateConvertionRate(uint256)", +"4aca1c32": "startairdrop(uint256,uint256,string)", +"4aca7fb2": "transferNetworkFeeWalletOwnership(address)", +"4aca80fb": "burnSecurityAssetToken(uint256)", +"4acab03c": "setTIDE(uint256)", +"4acaf02e": "TokenAdded(address,uint256,string,string,string,address,string)", "4acb17c8": "getPeggedTokenAddress(address,address,uint256)", "4acb232b": "percentWeiMC()", "4acb3e59": "QCOToken(address,address,address,address,address)", +"4acb9a36": "Withdraw(bytes32,address,uint256,bytes32,bytes32)", +"4acb9d4f": "getDeployedCampaigns()", +"4acc296f": "initiateDispute()", "4acc50eb": "Invoked(address,address,bool,uint256)", +"4acc79ed": "fees(uint256)", "4acceeea": "togglePrebrdige()", "4acd058e": "auctionBonus(uint256)", "4acd44db": "offChainManager()", @@ -42899,62 +78594,118 @@ "4acdc150": "setupCrowdsale(uint256)", "4acdd29a": "statusPred(address,uint256[],uint256)", "4acddfa0": "register(address,string,uint256,string,string,string,bytes20)", +"4acdec5d": "getEpochTime()", +"4ace478b": "changeTPB(uint256)", "4ace9ccc": "ratePlansOfVendor(uint256,uint256,uint256)", "4acea254": "inviteAmountLimit()", "4acefeb1": "ethartArtAwarded()", "4acf071c": "setStepTwoTime(uint256,uint256)", +"4acf26dd": "AAAA_USER_MINT()", "4acf4a27": "withdraw(uint128,address,uint256,uint128)", "4acf8867": "PillarToken(address,address)", +"4acf9b07": "internalCreditOfficer()", +"4ad01036": "returnFromContractTokens()", "4ad07b0e": "oracleOutcomes(bytes32,address)", "4ad0a529": "currentMigrationTarget()", +"4ad0e590": "markDone(uint256)", "4ad1cbad": "withdrawTeamTokens(address,uint256)", +"4ad23303": "switchToICOStage()", "4ad25557": "getMonsterNum(uint256)", "4ad27ae1": "claimInternal(address,address)", +"4ad2f1c6": "sendERC20(address,address,uint256,bytes32,bytes32,bytes32)", +"4ad2fb22": "findFreeX30Referrer(address,uint8)", +"4ad31275": "OrderEpochError(address,address,uint256)", "4ad32970": "setUserAllocs(address[],uint256,uint256)", "4ad37241": "destroyCard(uint256,uint16)", "4ad37538": "DJPToken()", "4ad42500": "ico26()", "4ad447ba": "PutinCoin()", +"4ad49504": "EventOn_AdminUserChange(address,address)", "4ad4fa5d": "ERC223()", +"4ad52e02": "getTaskInfo(bytes32)", "4ad59c54": "overpays(address)", "4ad5a68c": "returnIdImage(uint32)", "4ad5f440": "totalIcoTokensSold()", +"4ad69405": "__ONE_init(address,address,address)", +"4ad6946b": "getJKPCount()", +"4ad69f4e": "geteth()", "4ad6e648": "fightFactor()", "4ad6f9f3": "checkTx(string)", +"4ad7521b": "claimMaximumReward()", +"4ad770f8": "_replaceMarket(address,address)", "4ad7799f": "VestingReleased(address,uint256)", +"4ad79ff4": "beforeLaunch(uint256,uint256,uint256,uint256,uint256)", +"4ad7b137": "__setTokenPrice(uint256,uint256)", +"4ad82965": "renewNFT(uint256)", +"4ad84b34": "availableReward()", "4ad857a1": "etherSent(uint256)", "4ad88363": "reset_application(address)", "4ad8c869": "reCommentReward()", "4ad8c938": "createSiringAuction(uint256,uint256,uint256,uint256)", +"4ad8eaf5": "manageBaseURL(string)", +"4ad90d2e": "TokenCreated(uint256,string,uint32,uint256,address)", +"4ad97126": "Set_Reward_Interval_Array(uint256,uint256)", +"4ad99662": "getDailyRate(address)", "4ad9b1c3": "addWallets(address[])", "4ad9d7ab": "getGoldStatusRegistered(address)", +"4ada035c": "addtoWhitelist(address,uint256)", "4ada218b": "tradingEnabled()", "4ada3b32": "approvedAccount(address,bool)", +"4ada60f0": "voteReceiversWeights(uint256)", +"4ada8076": "bulkRevoke(bytes32[])", +"4ada90af": "liquidationIncentiveMantissa()", +"4adae0da": "depositTotal()", "4adaedef": "send_allowed()", "4adaf5f6": "changeFundOwner(address)", "4adaf748": "eBlockPower()", "4adbe551": "whitelistAdmin()", "4adc0b09": "setMembershipPrice(uint8,uint256)", +"4adc80aa": "rewardDistribution_v2(address)", "4adcbd19": "isThisHardforkedVersion()", +"4add32fb": "ONEINCH_PROXY()", +"4add7899": "lastBrrTime()", +"4ade6dca": "setBullPerBlock(uint256)", +"4adf426f": "func_36A7()", "4adf6591": "setReportTimestamp(uint256)", "4ae00041": "call(address,bytes,uint256)", +"4ae05c7d": "addTokens(address[])", +"4ae05da7": "transferPeriodEnds()", +"4ae06098": "createAccount(string,string,string,string)", "4ae0ac60": "FobsCoin()", "4ae0f543": "publicAllocation()", "4ae12e9f": "FHFToken()", "4ae184f2": "createStandingOrder(address,uint256,uint256,uint256,string)", +"4ae26521": "setMinterReward(uint256)", +"4ae26ea1": "getPublicPools()", +"4ae2859c": "withdrawalFee(uint256,uint256)", "4ae2b849": "PHASE_DURATION()", "4ae2c351": "createCrowdsaleTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", +"4ae2dfac": "NewBuyAtom(address,uint256,address,uint256)", +"4ae2ffc0": "update(bytes32,address)", "4ae3164d": "getNewGens(address,uint256)", "4ae34a96": "changelp16(address)", "4ae34bb1": "EfectiveToken()", +"4ae34e3d": "note(bytes32,string)", "4ae3643f": "phase_4_token_price()", +"4ae36e8e": "Comptroller()", +"4ae3f703": "TurnInfo(uint256)", +"4ae40114": "bidSpan()", +"4ae44290": "getCardIdListOfTier(uint256,uint256)", "4ae4dd6b": "KeyRewardPool(uint256,address,address)", "4ae4e9ea": "m_currentTokensSold()", "4ae51a9a": "transferDevTokens(address)", +"4ae550cd": "mintToken(string,address)", "4ae55dd0": "amendedEarlyPurchaseIndexes()", +"4ae5b38c": "plans(uint16)", "4ae5d478": "setNodesVars(address)", +"4ae5e630": "subregisters(uint256)", "4ae5eecb": "getUserP3DDivEarnings(address)", +"4ae6a85f": "setFactory(uint256,address)", "4ae6ab70": "_getRevisionTimestamp(bytes20,uint256)", +"4ae701fe": "placeBet(bytes32,bytes32,uint256)", +"4ae73553": "_Tokensymbol()", +"4ae7cd03": "uniswapExchangeContract_forBalance()", +"4ae82485": "UniAddress()", "4ae85627": "grindUnicorns(uint256)", "4ae86038": "MultiBonusCrowdsale()", "4ae8c55f": "getWwLength()", @@ -42970,80 +78721,147 @@ "4aeb0241": "LisaToken()", "4aeba1a5": "removeCustomerService(address)", "4aec4677": "migrateLosingTokens()", +"4aec5bd7": "setDAOControl(bool)", "4aec6416": "removeTransferAndCallWhitelist(address)", +"4aec66da": "getBeatsById(uint256)", +"4aec7384": "createPlan(uint256,uint256,uint256)", "4aecf91d": "_emitContractRemoved(address,address)", +"4aed2c9a": "initilize(address,address)", +"4aed47cf": "userAddressById(uint256)", "4aed8a76": "inPreSalePeriod()", "4aeda70d": "changeAuctionContract(address)", +"4aedc052": "arbitrationOne(uint256)", "4aeddad0": "ConvertBkp(uint256)", "4aef05a5": "addSongWriter(string,uint256,address)", +"4aef8653": "isStateReceiver(address)", "4aef8b7c": "_isOddFlag(uint256)", "4aefc3c4": "ContributionStateChanged(address,uint8)", "4af0700b": "isUniqueBlindedProposal(uint256,bytes32)", +"4af076d8": "addReseller(address)", +"4af08b00": "marketBuyFatWithToken(address[],uint256,uint256)", +"4af0e3e1": "setStageEnds(uint256[])", +"4af0eec0": "TokenRateChanged(uint256,uint256,address)", "4af153a9": "_message(uint256)", "4af165cb": "EPause(address,string)", +"4af1758b": "vaultFractionToInvestNumerator()", +"4af18f4f": "calculateCost(uint256)", "4af1b8a7": "pullAddr()", "4af1f96a": "getActiveSellSize(bytes32)", +"4af202d0": "TOKEN_MAX_BUY()", "4af27ba2": "_redeem(address,address,uint256,bytes,bytes)", "4af3182a": "move_x(uint8,uint8)", "4af350eb": "transferTokens(address,uint256,address)", +"4af35b6a": "getPairPriceBySymbol(string,string)", "4af4a127": "bonusPeriod()", +"4af4be5a": "roundTransformed()", "4af4c191": "TIER4_RATE()", "4af54311": "burnSomeTokens(uint256)", +"4af56369": "CTItoken()", "4af56cb0": "getUseRegistry()", +"4af5b70f": "transferFromAmttoTrade(address,address,uint256)", +"4af63f02": "deploy(bytes,bytes32)", "4af69189": "sponsoredJackpotToken()", +"4af6b5c2": "contract2()", +"4af6c166": "updatexgtGenerationRatePool(uint256)", "4af6ffc2": "attest(uint256)", +"4af72234": "mapStoremanGroupConfig(bytes32)", +"4af7669c": "changeReturnPercentages(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4af79ba2": "getChallengesForMentor(address)", "4af7eedf": "VID(uint256,string,uint8,string)", +"4af80ceb": "setCOOAddress(address)", "4af80f0e": "setConversionWhitelist(address)", +"4af85d12": "extractERC721(uint256,address)", +"4af931ab": "allowAddingLPTime()", +"4af93e82": "executeSet(address,uint256,uint256,bool,bytes32,bytes32)", "4af98f1b": "setFeeDivider(uint256)", +"4af9b244": "ThreeGoldPyramids(address,uint256)", +"4afa66d6": "decreaseProductivity(address,uint256)", +"4afaf435": "myClaimed(address)", "4afb07c4": "getAccountActivity(address)", "4afb09c2": "listDTH()", "4afbac9c": "removeFromTokenList(address,uint256)", "4afbb7d7": "getDepositary_function()", +"4afbda3b": "payoutReviewedDelivery(bytes32,bytes32,bytes32)", "4afc0476": "RedPillCoin()", +"4afc0d7b": "_SETTLED_TIME_()", +"4afc1992": "matureDepositList(uint256)", +"4afc3147": "updateRewardState(uint256,uint256)", "4afc7774": "_is()", +"4afcb4a8": "Price(uint256,uint256,uint256)", "4afce471": "test_requires_depth(uint16)", +"4afd3b19": "feedResult(uint256)", "4afd74ff": "getRefunded(address)", +"4afd82e7": "boosts(uint256)", "4afd8a19": "getLendingInfo(address,uint256)", "4afd8a98": "testEthIcoToken()", "4afdcbde": "pauseOperator()", +"4afe28b7": "uniHEXHXB()", "4afe2f80": "setRate(uint8)", +"4afe49c2": "INVALID_CHARACTER_INDEX()", "4afe62b5": "placeBet(uint256,uint256)", +"4aff432c": "removeWhiteListManager(address)", "4affb863": "isPartner(address,address)", "4b00ebfb": "CheckExecution(string)", +"4b0112b0": "test_short()", "4b013f85": "_addVestor(address,uint256,uint256,uint256,bool)", +"4b02357c": "mintCapacity()", "4b023cf8": "setFeeAccount(address)", "4b02e328": "IncorrectFee(address,uint256)", +"4b02fc72": "tokensFrozen(address)", "4b0304ab": "DonationReceived(address,uint256,uint256)", "4b031397": "killAdminOnly()", "4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", +"4b0353bb": "tok(uint256)", +"4b0389b6": "depositAndMigrateEscrow(uint256,uint256[])", "4b03a15e": "_terminateSchedule(address)", "4b042c0b": "specialsInfo(uint256)", +"4b04d253": "pastGameNrLength()", "4b05de75": "seventhTeamWithdrawal()", +"4b05ffcf": "createGTProject(string,string,string,string,address,address)", +"4b0618cf": "lockTransfer(address,uint256)", +"4b066bbb": "soakToLp1Route(uint256)", "4b0697e4": "Manager(address)", "4b06e1c7": "declareWininingFighter(address)", "4b06fb28": "eatUnicornsAlive()", "4b0720a7": "customGasPrice()", +"4b075586": "transfer_byFirstOwner(address,uint256)", "4b079fa6": "ownerof()", "4b084d49": "checkEnd()", +"4b086f34": "MatchView(uint256)", "4b089b12": "withdrawManagerBonus()", +"4b08b777": "pendingCorlibri(uint256,address)", +"4b0902d6": "createLoanUSDb(uint256,address)", "4b09b72a": "reserveAmount()", +"4b09d1c0": "pendingVen(uint256,address)", +"4b09e7ec": "FinalizeSale(address)", "4b09ebb2": "e_exp(uint256)", "4b0a0d04": "checkRequestSignature(bytes,address[],uint256,bytes)", +"4b0a99ca": "isAddrSupporterOfValidator(address,uint256)", "4b0ad8fa": "getStakedShop(address)", "4b0adf6c": "MintingAgentChanged(address,bool)", +"4b0b4525": "rNEXPerBlock()", +"4b0b919d": "_depositCounts(uint8)", "4b0babdd": "releaseTokens(uint256)", +"4b0bba9c": "toBKingERC1155Id()", "4b0bbf84": "addEntropy()", +"4b0bca10": "editSchool(string,string,address)", "4b0bddd2": "setAdmin(address,bool)", +"4b0c085d": "createPromoPerson(address,string,uint64,uint64,string,uint256)", "4b0c79aa": "turnOnOraclize()", +"4b0c9a91": "spice()", +"4b0cb2fc": "viewSaleDOGZ()", "4b0d5417": "disableSellToken()", "4b0daadb": "getStaticArray()", "4b0df486": "assertEq23(bytes23,bytes23)", "4b0e2c90": "enableInternalLock()", "4b0e5044": "HoldToken(address)", "4b0e7216": "setBurnAddress(address)", +"4b0e890e": "CLAIMING_DURATION()", "4b0ee02a": "totalBalanceOf(address)", "4b0f43fd": "canExecute(address,uint256)", +"4b0f7c7f": "validKyc(address)", +"4b0f93fb": "viewSplitExactIn(address,address,uint256,uint256)", +"4b0fa847": "getJobIds()", "4b106893": "inactive_withdraw(address)", "4b11281e": "returnCreatorAddress(bytes32,uint8,bytes32[2])", "4b11452c": "changeFoundationAddress(address)", @@ -43051,85 +78869,149 @@ "4b1146ca": "TOKEN_SUPPLY_BOUNTY_LIMIT()", "4b11982e": "setCooldown(uint64)", "4b11e7a0": "getVotingStart()", +"4b12311c": "getVoterState(uint256,address)", +"4b12363a": "ProposalCreatedEvent(uint256,address)", "4b12416c": "setHeroTokenContract(address)", "4b12dd39": "BTSCoin()", "4b1325ea": "setNewOwnersCountToApprove(uint256)", +"4b134d63": "suicide1(address)", "4b143bb5": "harapan()", +"4b1444b6": "requestETHPayout()", "4b14e003": "transferAll(address,address)", +"4b14ec08": "delayBeforeRewardWithdrawn()", +"4b15764f": "changeShiftLength(uint256)", "4b16304f": "setTokenAddress(address,bytes)", +"4b165293": "creamToButterRoute(uint256)", "4b1700df": "TokenListingManager()", "4b1740ad": "tier3()", "4b17bdd8": "transferTokensFrom(address,address,address,uint256)", +"4b180da9": "init(address,address,uint256,address)", +"4b184522": "payRecords(address,uint256)", +"4b18bd0f": "requireActiveValidator(address)", "4b18be1d": "moveLeftOvertokensToartistPool()", +"4b193e23": "finaliseProposal(uint256)", "4b19eb09": "isStatePublic()", +"4b1a3237": "totalDEFLCTLPTokensMinted()", +"4b1a4c0c": "tokensForDistribution()", "4b1a5773": "createSwapTarget(bytes20,address,address,uint256,address)", +"4b1aa566": "getInvestorByInviteString(string)", +"4b1b32f6": "DeleteCost(uint32)", "4b1be424": "getVotesBetweenFor(uint256,uint256,uint256,address)", "4b1c5597": "dissolveFund()", "4b1c8506": "bonusesList(uint256)", "4b1cab4e": "calculateEthToToken(uint256,uint256)", +"4b1cca47": "teamRewardMax()", "4b1cdc2d": "token6DivsOwing(address)", "4b1cff0b": "pot_()", "4b1d00ee": "releasedCount()", "4b1d29b4": "maxLockPeriod()", +"4b1d3e33": "BecomeStarAngel(address,uint64,uint64)", +"4b1d3ede": "election()", +"4b1da4c9": "staked(uint256,address)", "4b1dc225": "founderWithdrawablePhase3()", "4b1dd21a": "getWhitelistLimit(address)", "4b1dd591": "firstDiscountCap()", +"4b1e3c9e": "withdrawLP1(uint256)", +"4b1e65c0": "isLockFinished(address)", "4b1ebc5a": "perpetuum()", "4b1ec20c": "setPropertyPrivateMode(uint16,bool)", "4b1ef6e1": "getMyRecord(address,uint256)", "4b1f15d1": "updateDragonPrice(uint256)", +"4b1f6d53": "calculateAvailableCollateralToLiquidate(address,address,uint256,uint256)", +"4b1f6f74": "splits(address)", "4b1fb6d4": "removeNacFromNetf(uint256)", "4b1fe17e": "ENSResolver(address)", "4b200fac": "ClearCoin()", +"4b2084e3": "withdraw(address,uint256,address,uint256)", +"4b208eef": "findX3ActiveReferrer(address,uint8)", "4b20ae39": "create(address,address,address,uint256,uint256,uint256,uint256)", +"4b20ea20": "setReRFETHsPaused(bool)", +"4b2116be": "proveOwnership(bytes)", "4b21433a": "CoolICOToken()", "4b21a587": "sellerfeeDivide()", "4b21aaae": "getBondPrice(uint256)", +"4b21aeed": "setColdPurse(address)", +"4b21b2c3": "getBigIndexUser(uint256)", +"4b221084": "newTokenTypeData(address,bytes32,bytes8,uint256,uint256,uint256,uint256)", "4b2233df": "buyTokenSub(uint256,address)", "4b227176": "pID_()", "4b236401": "claimPlot(uint256,uint256)", +"4b238bcb": "connectionRemoved(address,address,bytes32)", +"4b241491": "setMinMaxStake(uint256,uint256)", "4b242252": "levelByToken(uint256)", "4b24ea47": "controllerAddress()", "4b24f3a6": "setJackpotFee(uint256)", "4b24f7aa": "CSpacesToken()", "4b24fd0d": "getKeyType(address)", "4b256137": "lockingContract()", +"4b2596c7": "maxTeamSupply()", "4b259b5c": "getCumulativeAllowance()", "4b25bfce": "whitelist(uint256,address)", +"4b268268": "Issue(address,address,uint256)", "4b269a00": "withdraw(int256[])", +"4b26d19d": "tokensWithdrawnByInvestor(address)", "4b2702b3": "TokenSwitch(address,address,bool)", +"4b270b86": "_total_Supply()", "4b272c4a": "Greenbit()", "4b274458": "getUncleAmount(uint256)", +"4b277586": "adminState()", "4b27a2ca": "fechVoteMainInfoForVoterBySnapshotBlock(address,uint256)", +"4b282b41": "setAcoFactory(address)", +"4b283ea8": "maxRigel()", "4b28a674": "organizer2()", "4b28bdc2": "allRevealed()", "4b2930d0": "IsICOrunning()", +"4b295857": "createRunner(string,string)", "4b29c448": "setGoal(uint256)", "4b2a12da": "changeMinDeposit(uint256)", "4b2a4e18": "TradersWallet()", "4b2a649c": "ECRecoverWrapper(string,uint8,bytes32,bytes32)", +"4b2ac3a8": "upgradeSelf(uint256)", "4b2ac3fa": "swapID(bytes32,uint256)", "4b2acaa0": "openGateway()", +"4b2b4e36": "stake(bytes,bytes,bytes,bytes32)", "4b2ba0dd": "originalSupply()", +"4b2baa2f": "transferToPotofgold1Upline(address)", "4b2be022": "BinaxToken()", "4b2c0706": "getPeriod(uint256)", "4b2c2596": "MerchantDealsHistory(string)", "4b2c89d5": "redeemDeposits()", +"4b2ca210": "attack(address,bytes32)", "4b2cbc9d": "etherCollected()", +"4b2cc0a1": "getCoverStatusNo(uint256)", +"4b2cd118": "previousTarget()", "4b2d5164": "transfer_tokens_after_ICO(address[],uint256)", +"4b2d726d": "addTrancheToProtocol(address,string,string,string,string,uint256,uint8,uint8)", +"4b2d9ffc": "stakerFee()", +"4b2e3343": "updateSafu(address[])", "4b2f249a": "isTileLive(uint16,uint8)", +"4b2f336d": "WETHToken()", "4b2f9eb7": "declareNewMaster(address)", +"4b2fd9fd": "ethSynthToken()", "4b313043": "preIcoMaxLasts()", "4b314b34": "LogPause()", +"4b3161c2": "setFRAXAddress(address)", "4b319713": "totalWithdrawn()", +"4b31bb10": "investmentManager()", "4b321502": "addHours(uint256,uint256)", +"4b32dc10": "withdrawTreasuryReward()", "4b331ca0": "getCitation(uint256)", +"4b336d1d": "is_symbolic(uint256)", "4b33eac2": "updateTicketStructure(uint256,bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[])", "4b341aed": "totalStakedFor(address)", +"4b343306": "testMint(bytes32,uint256,address,uint256,uint256)", +"4b3521e0": "joinCost()", "4b3544d5": "Jakov()", "4b35ae33": "setTimeLimited(uint256)", +"4b360c3a": "recoverERC20ByAmount(address,uint256)", +"4b361b86": "getChildReferrerPercentage()", +"4b362202": "getEthForDaiActionID(uint256,uint256,address,bytes,uint256,uint256)", +"4b363fef": "_isActiveStateForFlow(uint256,uint256)", +"4b364570": "buyTokenWithStableCoin(address,uint256)", "4b369820": "setEntry(string)", +"4b36a24f": "LOG_TradeLost(address,uint256,bytes32,uint256,uint256,uint256,uint256,string,uint256,string)", "4b36bca9": "WagerGames()", +"4b36bf0e": "listNewTokens(uint256[],address[],uint256[])", "4b3727fb": "SshKey()", "4b374fbe": "BTEN()", "4b376513": "lastBlock_v13Hash_uint256()", @@ -43137,142 +79019,259 @@ "4b37c73f": "removeFactory(address)", "4b37cf47": "littIsCapsule(bytes32)", "4b3881ff": "StakeDestroyed(uint256,uint256,address,bytes32)", +"4b38dbfe": "addTradeVolume(address,uint256)", +"4b38de1a": "updateCreator(address,bool)", +"4b391fc1": "initiateFlashLoan(uint256,uint256,uint256,address)", +"4b393605": "cancelBid(uint256,uint256)", "4b3955a5": "tier0LOT()", "4b396ade": "TicketMultiTear(string,string[],uint256[])", "4b3985a4": "shareTime()", "4b398a5c": "mainnetLocked()", +"4b398e99": "depositTRX()", +"4b3a3ee1": "expansionPercentLpPool()", "4b3a5fa6": "saleStartFirstDayEnd()", "4b3ab5bf": "paySubscriptionFee()", "4b3ab9c5": "getShare(address)", +"4b3ac1c2": "_setInitialExchangeRate(uint256)", "4b3afdd2": "setEthernautsStorageContract(address)", "4b3b1d69": "notZero(uint256)", "4b3b548f": "preMine()", "4b3b6168": "SetNewBigContract(address)", "4b3c45db": "getDealDataByNumber(uint256)", "4b3ce14d": "set_minUETsPerReturnMoreThan(uint256)", +"4b3d2c68": "getPrimaryMarketAssetIntroducers()", +"4b3d36c7": "OldStake(address,uint256,uint256)", "4b3d81b6": "initialBlockTimestamp()", +"4b3db03f": "trancheOneBalances(address)", +"4b3df200": "boo()", "4b3ec03a": "TEAM_ACCOUNT()", +"4b3ef054": "confirmGuardianRevokation(address,address)", +"4b3ef181": "seeResultFee()", +"4b3f3378": "setMaxTradeSize(uint256)", "4b3f3987": "_updateLock(uint256,address)", +"4b3fb7f8": "SAI()", +"4b3fde21": "workReceipt(address,uint256)", +"4b400034": "mapPID_finalising(uint256)", +"4b413820": "REFERENCE_LEVEL2_RATE()", +"4b414671": "setIssuerFee(uint256)", +"4b418136": "totalinStaking()", "4b419b5f": "setcardPrice(uint256,uint256)", "4b41c74a": "Ticker()", "4b41cb60": "withdrawPreSigned(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32)", "4b41eb4a": "ZyryanovKubSU2018()", "4b41f4df": "transferableTime()", +"4b421808": "setOptionCol(address)", +"4b426178": "getPatientInfo(address)", "4b42d208": "getUint8FromByte32(bytes32,uint8)", +"4b42e431": "isOpenStrategy()", "4b432966": "max_fortunes()", +"4b438c34": "devFundAmount()", "4b43b582": "changeAdminWallet(address)", "4b43dc51": "testTokensAreLockedDuringSale()", +"4b43ed12": "tend(uint256,uint256,uint256)", +"4b447781": "algos(uint256)", +"4b447cd7": "numberOfTimesSold(address)", "4b449cba": "auctionEndTime()", +"4b44c6aa": "propsdatas(bytes32)", "4b452958": "_setStakingEpochStartBlock(uint256)", +"4b455515": "EBonusMinting(address,uint256)", +"4b45752b": "calcMintInterestValues(bytes32,uint256)", +"4b45752c": "mining(address[])", +"4b45b97d": "dailyTime()", +"4b45c555": "oneUint(uint256)", "4b467105": "walletCommunityReserve()", "4b467157": "stopEmergencyWithdrawal()", "4b468b0e": "JDAnteil()", "4b469490": "RichToken(address)", +"4b46beb8": "registerTopUpPayment(uint8,bytes32,bytes32,bytes32[2],address[3],uint256[5],string)", "4b471dd0": "setWithdrawalAndReinvestmentContracts(address,address)", +"4b484283": "participantsArr(uint256)", +"4b48ac7f": "voteReceiversDays(uint256)", "4b496444": "azatipToken()", +"4b4a0d2a": "calculateClaimAmount(address,uint256)", "4b4a456a": "ChargeFix(uint256)", "4b4a5088": "switchCompatible20(bool)", +"4b4acfd3": "getJuror(uint256,uint256,address)", "4b4af4db": "allocateTeam(address,uint256)", +"4b4b2c13": "pendingRootCanTransfer()", "4b4b6338": "MECoin(uint256)", "4b4b87c0": "PowerCoin()", "4b4bb75b": "DSToken(string,string)", "4b4c01f4": "RobincoinERC20(uint256,string,string)", "4b4c0d7c": "BONUS2()", "4b4c2039": "_B_sendToEthertoteDevelopmentWallet()", +"4b4cea6a": "setCircuitBreakWithOwner(bool)", +"4b4d0d45": "whiteLists(address,bytes32)", +"4b4dc1f1": "spriteOwningHistory(address)", +"4b4ddfa6": "itemsOfferedForSale(uint256)", "4b4e23e1": "TIMESTAMP_BUCKET_SIZE()", "4b4e38df": "GetCurrentPoolAmount()", +"4b4e6753": "setReserveFactor(address,uint256)", "4b4f8e36": "addCZRLock(address,uint256,uint256,uint256)", "4b4f90ef": "saleIsOn()", +"4b4fa550": "tokenToTokenSwapInput(address,uint256,uint256,address)", +"4b4fd03b": "getMode()", "4b504ecd": "logNewPlayer(address)", +"4b50af89": "minRefund()", +"4b50b21b": "paymentAmount(uint256)", "4b50c9f0": "getGameStartTime()", "4b513e82": "RegistrantApproval(address)", +"4b51fae5": "najdiPoKriterijih(string,uint256,string)", +"4b523bcf": "intMinA()", "4b5243b5": "ETGTestCoin()", +"4b527742": "LogGameEnded(address,uint256,uint8)", "4b52f48f": "withdrawLeft()", "4b52f89b": "setGiftToken(address)", +"4b52fce5": "addThing(uint256,string,string)", "4b530090": "nextDiscountTTWTokenId1()", "4b534c48": "unlockProjectToken()", +"4b53fe4c": "setSakeAddress(address,address,address)", +"4b545945": "lunaBankAddress()", +"4b546eb1": "defineToken(address,address,address,address,address)", +"4b54ac58": "team_fund_account()", "4b54d131": "wipeProposedActions()", "4b54f1fb": "S1Coin()", +"4b55d137": "convertEthToToken(uint256,address,address)", +"4b55fd1b": "inviteUp(address)", "4b561a16": "getMatchInfo(uint256)", +"4b563539": "adminBuy(address)", "4b563657": "setMessages(bytes32,bytes)", +"4b5683ef": "setName2()", "4b56b10d": "preIco()", +"4b56c071": "updateMaxErc20Deposit(uint256)", +"4b56c39e": "fullUnitsStaked_total()", "4b56cd27": "depositBoth(address,uint256)", +"4b56daf1": "setFinalizedState(bytes32)", "4b56dcf4": "LogChangeIsPayableEnabled()", "4b57b0be": "wethToken()", "4b57ed55": "EnonRToken()", "4b57fbaf": "SetMinChequeValue(uint256)", "4b5830b4": "SENC_CONTRACT_ADDRESS()", "4b58484d": "_createPlayer(address,address)", +"4b585d2d": "start(uint256,bool)", "4b58bb40": "timeUntilNextRound()", "4b58d0bb": "reserveFundAddress()", +"4b5914b3": "renewSubscription(address,address)", +"4b5929c2": "cyclesCompleted()", +"4b596212": "swapAlia(uint256,uint256,address,address)", "4b59e880": "puzzle(address,bytes32,bytes32)", "4b5a0e65": "getWinningStageInfo()", +"4b5a4268": "DEADPOOL_PROVENANCE()", "4b5a726d": "getProgramInfo(uint256)", +"4b5abeff": "rebalanceTowardsHedge(uint256,uint256[],uint256[],uint256)", "4b5c0234": "throwsWhenHittingHardCap()", "4b5c4277": "log(string,string)", "4b5c8bdf": "stakeTotal()", +"4b5cd42f": "createPayment(address,uint256,uint8)", "4b5dc8cb": "roundMoneyDown3SFExt(uint256)", "4b5dcad7": "ServiceStation(address)", +"4b5e4108": "delivered(uint256)", "4b5e8d63": "registerInvestor()", +"4b5ed7e4": "tokenSymbolAvailable(string)", +"4b5effc2": "stakeAmount(address,uint256)", +"4b5f284b": "minAPOOLTWAPIntervalSec()", "4b5f297a": "hasAttribute(address,uint256)", "4b5f2fa4": "TravelZediToken(uint256,string,uint8,string)", "4b5f3e0a": "getDate(bytes32)", +"4b5f64f9": "emergencyWithdrawMiningToken(address,uint256)", "4b5fd350": "withdrawHeldToken(uint256,uint256,uint256,uint256)", "4b5fea8a": "milestoneRecipients(uint256)", +"4b601c0b": "getShortRateAt(bytes32,uint256)", +"4b602282": "EXPIRY_TIME()", "4b602673": "artworks(uint256)", "4b603a83": "mintTokens_(address,uint256,address)", +"4b60ae63": "lastBlockHeight()", +"4b60ce77": "projectToken()", +"4b616023": "verifyReceiverSignature(address,address,bytes)", +"4b6199b0": "setMasterAddress()", "4b61cf17": "SWLPerEther()", +"4b620276": "EscapeHatchChanged(bool)", +"4b621f68": "CampaignCreated(bytes32,uint256,uint256,uint256,uint256,bool,address)", "4b623178": "removeFromPublicWhitelist(address)", "4b627107": "setValidatorDescription(address,string)", "4b62e0d9": "buyIns(uint256)", "4b63036d": "holderContract()", +"4b630b93": "addAssetProposals(address)", "4b63189c": "softcapPreSale()", +"4b6368cf": "STAKE_TOKEN_INFLATION_RATE()", "4b63e601": "scheduleCall(address,uint256,bytes)", +"4b6406d1": "maxsupply()", "4b641f52": "coinbaseInit()", "4b64a00f": "DiscountApplied(uint256,uint256,uint256)", "4b64e492": "execute(address)", "4b650d0b": "getPlayerClickCount(uint256,address)", "4b656b41": "totalWeiRaisedDuringPhase1()", +"4b666199": "wipe(address,address,uint256,uint256)", +"4b668bce": "setrecommendedapi(address)", +"4b66b680": "pairStatus(address,address)", +"4b66be7c": "BiometricTransferRequest(address,address,uint256,bytes32)", "4b66cb7e": "teamHolder()", +"4b67160d": "stopShop()", "4b6753bc": "closingTime()", "4b67f6af": "name2()", +"4b684326": "feeAccountChangeDisabled()", +"4b685a01": "devTeamAddress2()", "4b689cf0": "setCommunityAccountOwner(address)", +"4b68bb9a": "canConvert()", +"4b698aff": "idaddress(address,uint256)", "4b69c3d4": "getRegistryDataVendor()", +"4b69c3fa": "redeem(address,uint256,address,uint256,address)", "4b6a3334": "setEtherPrices(uint256,uint256)", "4b6a8604": "setBiddingRate(uint256,uint256)", "4b6a9f1d": "STORES_TO_UPGRADE_1CENTER()", "4b6acafb": "totalDividend()", "4b6ad918": "isCurrentUserRefAvailable()", "4b6b2300": "updateTopicAssetClass(bytes15,string)", +"4b6b87ce": "getAccountStateRoot()", "4b6bc655": "isFreeze(address,address)", "4b6bdf1d": "poker()", "4b6c144a": "getClaimById(string)", +"4b6c5936": "redeemFactor()", +"4b6c8879": "updateAggregator(address,address,address)", +"4b6cd6d4": "_tkn_sale_quantity(address)", +"4b6d4400": "hello(address,uint256,uint256)", "4b6dfe4e": "initialFundBalance()", +"4b6e5938": "claimReward(uint256[],uint256[],string,string)", "4b6e7d78": "Data()", "4b6ea677": "oracleURL()", "4b6ede29": "Users()", +"4b6f0819": "BurnRatePercentsDevider()", +"4b6f0fdd": "battleLooseReward()", +"4b6f1671": "earningsPerResolve()", +"4b6f6710": "priceFeedContract()", "4b702afa": "accountS()", "4b70cec4": "getTime(address)", +"4b70d84b": "cTokenMetadataAll(address[])", "4b71bff3": "airdropReward()", +"4b71c33c": "daily(address,uint256,address,uint256)", +"4b71f5c3": "DECREASE_ALLOWANCE_WITH_AUTHORIZATION_TYPEHASH()", "4b726f61": "checkCustomer(string,string)", "4b729aff": "buyNumber(uint256)", "4b72bbaf": "getSirePrice(uint32)", +"4b73210f": "enableSingleAssetStaking()", +"4b732312": "setRaveContract(address)", +"4b733a7d": "disableListAccess(bytes4)", "4b739b61": "payByEth(uint256)", "4b73ca04": "flipsCompleted()", +"4b73f0ac": "mock_deposit_btc(uint256)", "4b741395": "requestNewMint(address,uint256)", +"4b743bc1": "emptyVariable1()", "4b749535": "hardCapTokens()", "4b750334": "sellPrice()", "4b75f046": "tokensIssuedCrowd()", +"4b75f084": "refreshExchangeRate(uint256)", "4b75f54f": "formula()", "4b760612": "localsCointoken(uint256,string,uint8,uint256,string,string)", "4b763fe7": "PersistLimitChanged(uint256)", "4b766b95": "markRewardsSet(string)", "4b76cb13": "get_status_user(address,address)", +"4b76f669": "dflToken()", "4b76fe19": "EtherPredict()", "4b778445": "addRound(uint256,uint256,uint256)", "4b77b8d3": "stopCrowdfunding()", "4b77c468": "invite(address)", "4b77d17d": "is_king_found()", +"4b77dd9e": "startStaking(uint256,uint256)", "4b7829f1": "token_claim_waiting_period()", "4b7863fe": "setIBalance(uint256,uint256)", "4b78ab61": "notarizationList(uint256)", @@ -43285,361 +79284,665 @@ "4b7b45b4": "DreamMaker()", "4b7bb8e3": "CfoAddress()", "4b7c1d2c": "TransactionConfirmed(uint256,uint256)", +"4b7c3192": "wsb()", +"4b7daba5": "getUniswapTokenAmountByETH(address,uint256)", +"4b7df1e8": "_validateContractAddress(address)", "4b7e23b3": "ShapeshiftBotLookup()", +"4b7e99aa": "changeCertStatus(bytes32,uint8)", +"4b7f4baa": "setEXR(address,uint256,uint256)", "4b7fa6db": "viewFn(uint256)", "4b7fcee7": "ownerPausePayouts(bool)", +"4b8013ce": "priorityRequests_DEPRECATED(uint64)", "4b802dde": "rentals()", "4b803095": "processReferralSystem(address,address)", "4b813478": "FinishBallot(uint256)", "4b81780e": "ADDR_MAYA_ASSOCIATION()", +"4b820093": "user_checkpoint(address)", +"4b8243c9": "addReserve(uint256)", +"4b826d81": "decreaseTotalSupply(uint256,uint256)", +"4b827b57": "decreaseGHTAmount(uint256,address)", +"4b82bb81": "userDividendWeight()", "4b82d416": "preSaleSecondEndDate()", "4b82ee28": "frozenDaysForEarlyInvestor()", "4b82f437": "setFirstReporterCompensationCheck(uint256)", +"4b832735": "resetSupportRatios(uint256[])", +"4b833f16": "pantyPerBlock()", "4b836181": "BuyTicket(address)", "4b8399f4": "setEnum()", +"4b83fc92": "ContractRegistered(bytes32,string,address)", +"4b841d24": "stakeEndTimestamp()", +"4b841ddf": "createDisputeCrowdsourcer(address,address,uint256,bytes32,uint256[],bool)", "4b841fa9": "redeem(string,uint256,uint256,uint8,bytes32,bytes32)", +"4b844fd3": "privilegedBirther()", +"4b84bca6": "KYCDone(address)", "4b84ee81": "LogAddTokenPairWhitelist(address,address)", "4b851b23": "hasDefaultRelease()", "4b852c03": "setDuration(uint64)", "4b855c62": "purchaseKingdom(string,string,bool,address)", "4b8574ad": "AttestationManager()", +"4b859a60": "roundInf(uint256)", "4b85fd55": "setAutoBirthFee(uint256)", "4b8624c4": "BONUS()", "4b865846": "suspend(uint256)", "4b866981": "LP(uint256,string,string)", "4b869e15": "investeth2017()", +"4b86a91e": "setDebaseUniswapLPContract(address)", "4b86c225": "lock(address,address,uint256,uint256)", +"4b86f75f": "debtSystem()", "4b86faba": "claimHodlReward()", "4b86fc5b": "isEligible(address,string,string)", "4b8772c1": "buyUnit(uint256,uint256)", "4b886f09": "VantageCoin(uint256,string,uint8,string)", +"4b88ac0b": "cancelCard(uint256)", "4b891518": "_grantAccess(uint256,address)", +"4b8934e8": "getP1()", "4b89c41d": "setClosingTime(uint256)", +"4b89d0be": "approve_178(address,uint256)", +"4b89f847": "getLatestDaiVsEthPrice()", "4b8a3529": "borrow(address,uint256)", "4b8adcf7": "pauseContribution()", "4b8b4cee": "postExternalPayment(address,uint256,uint256,uint8,uint256)", +"4b8b66fa": "AMOUNT_MIN()", "4b8b704e": "icoTokensCount()", "4b8b7a2a": "addCourse(string,uint256,string,string,string,string)", +"4b8bd7db": "_vault4()", "4b8ca215": "Ornament()", "4b8d12f0": "migrateAddress()", +"4b8d1551": "BidDisqualifiedEvent(address,bytes32)", +"4b8d72dc": "updateSwitchUnlockTime(uint256)", "4b8dbd1a": "VRFtoken()", +"4b8dc189": "getUserOffersLength(address)", "4b8dc588": "closeRefundVault(bool)", +"4b8dfca2": "userLockAmount()", "4b8e1ba8": "isMinter(int256,address)", "4b8e31a2": "_erc20token()", "4b8e38db": "test(uint32[26],uint32[4])", +"4b8eb855": "linkDiscord()", "4b8f4b5e": "MordernToken()", +"4b8f7416": "rIDBet_(uint256)", +"4b8f93b2": "approveRelay(address,address,uint256)", "4b8f9f87": "ownerSetMinJackpoBet(uint256)", +"4b8fd9e6": "mint6()", "4b8fe5eb": "setPendingUserListLength(uint256)", "4b8feb4f": "multiSigWallet()", "4b901b72": "balanceOfByTranche(bytes32,address)", "4b9081bf": "getBonusSale(uint256,uint256)", "4b90ac86": "isBountySent()", +"4b90ad54": "expectedBaseTokenAmount(uint256)", "4b9143f7": "setSold(uint256)", "4b915a68": "aliceClaimsDeposit(bytes32,uint256,address,address,bytes20)", "4b91ab35": "unfollow(bytes32)", "4b922b12": "getDataColla_AB_01(string)", +"4b925019": "transferTokenTo(address)", "4b92738e": "migrateBalances(address[])", "4b92f39e": "tradingClass(address)", +"4b9304a4": "senderProtected(bytes32)", "4b930503": "registerName(address,string)", "4b931600": "evaluateCategory(address,uint8,uint256,uint256)", "4b932327": "novaluetoken(uint256,string,string)", +"4b939ed7": "getAuctionTemplate(uint256)", +"4b93c875": "isEther(address)", "4b93fec0": "BetContract()", +"4b940256": "privateAdmin()", "4b944b9b": "post(bytes32,bytes32)", "4b94f50e": "getTokenPrice()", +"4b951cbe": "reputation(address,uint256)", +"4b956717": "getDelegatedSigner()", "4b95dcc0": "ViberateCrowdsale()", "4b960794": "spotsLeft()", +"4b9622a7": "BUYINSURANCE(address,uint256,uint256,uint256)", "4b963025": "addUniqueSaleTokensMulti(address[],uint256[])", +"4b963bf4": "KPIsAdjusted(uint256,uint256)", +"4b969866": "setDebtNotifier(address)", "4b96b0ee": "registerZone(bytes8)", "4b96f855": "burnPercentageDefault()", +"4b973e9a": "_setCollateralAbility(address,uint256)", "4b97aed9": "numOptions()", "4b97e6cc": "withdrawEthBalanceSave()", +"4b98b6bc": "getMyPendingEth(address)", +"4b98f686": "sendLPTokens()", "4b991bde": "challenge(uint64,uint256,bytes,bytes,bytes)", "4b997d9a": "sendTokens(uint256,address,bool)", "4b99f0c5": "setTradingPairCutoffs(bytes20,uint256)", +"4b99f4bf": "hasControlAgentRights()", "4b9a22af": "teamWon()", +"4b9b2c40": "createDetail(uint256)", +"4b9b4658": "prevProxy()", "4b9b808d": "setResetVoteKindnessEvery(uint256)", +"4b9bd6ff": "startOracle(address)", "4b9c4358": "betPlaced(address,uint256,uint256)", +"4b9c4cb3": "setAddressInfo(address,address,address)", "4b9c78e5": "buyEngineer(uint256[])", +"4b9c7c19": "setAdminInstanceAddress(address)", "4b9cdbe7": "addCurrencyInternal(uint256)", "4b9ce83c": "recordAssetPrice(uint128,uint128,uint128)", +"4b9d11eb": "secondFee()", "4b9d5047": "PlutoToken()", "4b9d8624": "getLinks(address)", "4b9de7a2": "dataIdentifiers(uint256)", "4b9de81e": "endTimeRound2()", +"4b9e3e12": "ContractBonusCap()", +"4b9e7dc7": "Stages(uint256)", "4b9e7ecd": "test_1_restrictDoubleVote_shouldThrow()", +"4b9ea400": "clearDOG()", "4b9eb771": "CAT_PER_ETH_FIRST_EARLY_BIRD_RATE()", "4b9ed302": "setEarlyInvestorsBonus(uint256)", "4b9ee106": "setMetaBetWeight(uint256)", "4b9eea9b": "decodeKYCFlag(uint128)", "4b9f5c98": "vote(bool)", "4b9faf4c": "setTokenBalance(uint256,bool)", +"4b9fcbfb": "testUniqFunction()", +"4ba00d77": "referralrate()", "4ba034dc": "unlockGrowthPoolTokenSupply()", +"4ba07e66": "sar_combined(uint256)", +"4ba0a5ee": "migrated(address)", +"4ba0d11c": "_debased(address)", "4ba0dd3c": "BotFarmer()", "4ba1f098": "acceptRequest(uint256)", "4ba20050": "getProduct()", "4ba2363a": "pot()", +"4ba25656": "overseer()", "4ba26466": "TPP2018TOKEN()", "4ba2ab8a": "RockPaperScissorsAdvanced()", "4ba2d5ff": "setThreePowerAges(uint256,uint256,uint256,uint256,uint256,uint256)", "4ba336e5": "calculatePoolCut(uint256)", +"4ba3d748": "isOperatorOrMinion(uint256,address)", "4ba4079a": "enableSwitch(bytes32)", +"4ba44fd2": "scriptCount()", "4ba4c16b": "guess(uint8)", "4ba4d784": "getMinutes(uint256)", +"4ba558db": "__MappingToken_init(address,uint256,address,string,string,uint256)", +"4ba57882": "mintPoolShareFromLib(uint256)", "4ba5b7b3": "crowdsaleRefund()", +"4ba5fc3c": "test_boundary_check(uint256,uint256)", +"4ba67cbb": "buyoutTimes()", +"4ba69922": "twaVestingPool()", +"4ba6adf1": "emit_event1()", +"4ba6db0e": "getValueViaBancor(address,address,uint256)", "4ba6e72e": "advisoryTotalSupply()", "4ba71f3c": "OxToken(address)", "4ba79dfe": "removeAddress(address)", +"4ba8746f": "ovmBlockGasLimit()", +"4ba8f7a1": "oneCoinCollateralOracle(address)", "4ba8fde0": "_computeIncentiveCut(uint256,uint256)", "4ba90201": "setFinishPreICO(uint256)", +"4ba94ec9": "burnBalance(address,uint256)", +"4ba9a927": "bidEndTime()", "4ba9bb67": "arr(address,address,uint256)", +"4ba9c18d": "csaPerBlock()", "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)", +"4baac57a": "BaseTokenName()", +"4baadd47": "getStakedNyanV2LP(address)", +"4baae900": "ninjakey()", "4bab0236": "wercoin()", +"4bab58b7": "entryBlock(address)", +"4babf979": "communityRegulator()", +"4bac212e": "registerreferenceShortCode(string)", +"4bac5dc5": "_rebalance(uint256)", +"4bac78af": "getRoyaltyPrice(uint256)", +"4bac9d0f": "lastEvent(address)", +"4bacf382": "cancelOrders(uint256,uint256[])", "4bad0881": "P4WDToken()", "4bad294d": "asFunc(uint256)", "4bad3327": "_mul(uint256,uint256)", +"4bad34ea": "transferAndSetBonusContract()", +"4bad3e82": "Csa()", +"4badb753": "getBooksByIPFS(string)", +"4badb898": "generateMessage(address,uint256,uint256,address,uint256,string)", "4bae2ef1": "referrerBonus()", "4bae6659": "fixedDeposit(uint256)", +"4bae6f3f": "purchasedTokens(address)", +"4baee498": "op_n_plus_v(int128)", +"4baee898": "testCheckEstimatedOutPut(uint8,uint256,address,address)", "4baf4a76": "addToWhiteListMultiple(address[],address[])", +"4baf782e": "CLAIMREWARD()", "4baf7a30": "TypesToBytes()", +"4bafa101": "tburnPercent()", "4bafa2a4": "totalMIT()", "4bafa437": "setSECOND_STEP_MULTIPLIER(uint16)", "4baffdc6": "_withdrawHoldVault(uint256)", "4bb017a1": "destroySalesManager(address)", +"4bb01abb": "removeAddressFromWhiteList(address)", "4bb07665": "whitelistUser(address,uint128)", +"4bb09cb3": "latestConditionIndex()", +"4bb0f04e": "calculateLquidationPriceRatio(uint256)", +"4bb12139": "_setRequiredBlockConfirmations(uint256)", "4bb13055": "returnAllAvailableFunds()", "4bb13e63": "setTripleRoomMin(uint256)", +"4bb18e3f": "getWhitelistedUsersLength()", "4bb22b5a": "execReturnValue(uint256)", "4bb24399": "survive(address,address,uint256)", "4bb278f3": "finalize()", "4bb2e417": "SokToken()", "4bb32e8c": "setDNoEditors(bytes32)", "4bb37790": "restrictionExpiraton()", +"4bb3a832": "executeLiquidationOnETH()", +"4bb41f37": "pool_slots_7(uint256)", "4bb4b260": "cashAllOut()", "4bb593b2": "updateUser(address,string,uint256,uint256,uint256,string,bool)", +"4bb6dbbe": "setPlatformPower(bool)", "4bb6e766": "checkTransferAllowed(address,address)", +"4bb72bc7": "seizeTOKEN(address,uint256)", "4bb72dea": "setPriceStep4(uint256)", "4bb77d9d": "updateRates(uint256[])", +"4bb78b14": "withdraw(address,bytes)", "4bb8596e": "managerSet()", "4bb89c4d": "sendBounty()", +"4bb93ab1": "oracleRegistry()", "4bb9962f": "HexelErc20Token(string,string,uint256)", +"4bb9e2ce": "addContentActivity(uint256,uint256)", "4bba32fb": "round3StartTime()", "4bba38b8": "getRef(address,address)", "4bba863e": "getEthOfferor(uint256)", "4bba8a58": "RepostiX(address,address)", +"4bba98c8": "claimTokenShares(address)", "4bbaa946": "getAllArea()", "4bbb216c": "_target(address)", "4bbb58b2": "setVirusInfo(uint256,uint256)", "4bbbe0cc": "exporter()", "4bbc142c": "allowOwnership(address)", +"4bbc2987": "PROXY_REGISTRY()", "4bbc2a4a": "changebank(address)", +"4bbc5a61": "isExchange(string)", "4bbcc1bc": "payoutSelf(address)", "4bbcd6e8": "buyPresaleTokens(address)", +"4bbd3044": "permanent_top(uint8)", "4bbd3061": "DateCreateToken()", +"4bbe07a8": "setByuPriceDecimals(uint256)", +"4bbec1ce": "feesPercentages(uint256)", "4bbf2c69": "excludeInvestor(address)", "4bbf3a7a": "swapToken(uint256)", +"4bbf65fe": "claimMyTokens(uint256)", +"4bbf8177": "grantedMngPermission(address)", +"4bc04e57": "LogCancelSubscription(address,address)", "4bc091a3": "getCrowdsaleStartAndEndTimes()", +"4bc0fda7": "getstatrtTime(address)", "4bc18a64": "deleteLock(address,uint8)", "4bc1aa42": "VESTING_ADVISOR_CLIFF()", "4bc24ec5": "right61(uint256)", +"4bc27d67": "getUserStakedTamagByIndex(uint256,uint256)", "4bc2a657": "setVoter(address)", +"4bc2e48d": "calculateStepsFromStart()", +"4bc30ea7": "SWAP_TYPEHASH()", +"4bc32319": "getLat(string)", "4bc32ea2": "getBidCountForAuction(uint256)", "4bc36600": "reorganizeMembers()", "4bc3b153": "REWARD_FORWARD_POSITION()", "4bc3df81": "BuyBooster(uint256)", +"4bc43082": "viewTeamRewrd(uint256,address)", "4bc4549c": "todaySold()", "4bc4d2ba": "KIN_PER_WEI()", "4bc4e892": "startNextEra(bytes32)", "4bc53249": "toB32(uint256,bytes,uint256,address)", +"4bc56f13": "UserDeleted(address)", "4bc57a7c": "Medis()", +"4bc59269": "openNewPoolByOwner(address,uint256,uint256,uint16,uint256,uint64)", +"4bc5a135": "keyOwnerToNonce(address)", "4bc5d101": "CreatorWithdraw(uint256)", "4bc70b1e": "withdrawFunds(uint16)", +"4bc77afb": "getEstimateObligation(uint256)", +"4bc7f977": "hourglass()", +"4bc81c00": "BIND_STATUS_DECIMALS_MISMATCH()", "4bc8c477": "VirtualRealEstate()", "4bc935d7": "verifyProof(bytes32[],bytes32,bytes32)", +"4bc9f354": "mod(uint8,uint8)", "4bc9fdc2": "calcMaxWithdraw()", "4bca4626": "ethWeiRaised()", +"4bca49f1": "AddressDidEnlist(address)", "4bca5cc0": "_setAdmin(address,bool)", "4bca7f95": "NigeriaNairaToken()", "4bca893d": "Count(uint256,uint256)", +"4bca927f": "tokensToEther(uint256)", "4bcb776f": "sliceIndexThrow()", +"4bcb8975": "userEthSpenttInDistribution(address)", +"4bcbc3e6": "getDownline()", "4bcbcd89": "getEngineerLv1(address)", +"4bcc1709": "Deposit(uint256,address)", +"4bcc3f67": "getStakingPool(bytes32)", "4bcd245d": "gameStatusSet(bool)", +"4bcdd174": "totalNeedToReward()", +"4bcddb1f": "lastUpdateTime(uint256)", "4bce2e9b": "totalEnjSold()", +"4bce2f08": "Payment(address,uint256,string)", "4bce79a1": "getAllSocialAccounts(bytes32)", +"4bceaf29": "setRiskFund(uint256)", "4bcf244b": "ECRecoverWrapperF(bytes32,uint8,bytes32,bytes32)", "4bcf74b2": "AccountMinterAdded(address,address)", "4bcf8645": "returnFundsToClient()", +"4bcff460": "OnePeriodSecs()", +"4bd01087": "set(uint256,uint256,bool,bool,uint256)", +"4bd07ec6": "dcdcCustV(address,address)", "4bd09c2a": "distributeTokens(address[],uint256[])", +"4bd0be23": "creator_address()", +"4bd0f760": "giveZuniReward(address,uint256)", +"4bd13cdd": "spawnPassTo(uint256,uint256[],uint8,bytes32,bytes32,address)", +"4bd1b736": "initialize(address,uint64,uint128,uint128,uint128,uint128,string[],string,address,address)", "4bd1c253": "ChipExists(uint32)", "4bd21127": "setAdminLevel(address,uint8)", "4bd22521": "Electricity(string,string)", "4bd22766": "refundETH(address,uint256)", +"4bd23764": "BonusSent(address,address,uint256,uint256)", +"4bd2d6dd": "createToken(address,uint256,uint256,bytes)", "4bd3a225": "setMultiplePreSalesSpecialUsers(address[],uint256)", +"4bd3ab82": "withdraw(address,uint256,address,uint256,uint256)", "4bd3af72": "sellGolds()", "4bd3b4c6": "allowAuditor(address)", +"4bd3c697": "WOLF_3()", +"4bd46448": "getCandidate(uint256,uint256)", +"4bd49ccb": "setCompleted(address,uint256,address,uint256,uint256)", "4bd4d93a": "transferFromWithMsg(address,address,uint256,string)", "4bd4ddb9": "testThrow_invalidZeroValue1()", "4bd4e770": "CheckSign(string,string)", +"4bd4ee8a": "depositBalance_(address)", "4bd50dcf": "sendFromContract(address,uint256)", "4bd544e8": "isEligibleToPlay(address)", "4bd54f04": "dynamic()", "4bd5610d": "jsonCat(string,string,int256)", "4bd58c92": "LogBuyForFiat(address,uint256)", +"4bd5c26d": "setUsdtPrice(uint256,uint256,uint256,uint256,uint256,uint256)", +"4bd5fd5d": "stakeHandlers(uint256)", +"4bd609e2": "middlemanCommission()", +"4bd65a7b": "pack2users(uint256)", "4bd67ced": "get_last_asset_document(bytes32)", "4bd70ea3": "testFailGetUnset()", "4bd7730b": "Senpona(uint256,string,uint8,string)", +"4bd780b8": "leaders()", "4bd79ac1": "lastCalculationRewardTime()", +"4bd7a5a0": "getlevelStart()", +"4bd8588b": "references(bytes32)", "4bd889b4": "removePersonalLock(address)", "4bd8ae6f": "endCoinFlip(bytes32,bytes32,bytes32)", +"4bd8e706": "uintMinB()", +"4bd9351b": "oneDay()", +"4bd9390a": "setprice(address,uint256)", "4bd9d10e": "backOut()", "4bd9d76c": "payUnderwriter()", "4bda2ad0": "addNote(bytes20,string)", +"4bda2e20": "_acceptGov()", "4bda3f2b": "test_insert_findWithHintPrevUpdateTail()", "4bda87b5": "GCHToken(string,string,uint8,uint256)", +"4bdaddc2": "_totalPresaleSupply()", +"4bdaeac1": "harvester()", +"4bdb3b2c": "setPrice4()", "4bdb7369": "hasBoughtEgg(address)", "4bdbb944": "GodviewChain(uint256,string,uint8,string)", +"4bdbc747": "userBTokenOf(address)", "4bdbea2f": "latestBalanceCheck(address)", +"4bdc1b4c": "cancelOrders(uint16[])", "4bdc44ae": "setNote(uint256,bytes20,string)", "4bdc4ffe": "ProposalTallied(uint256,uint256,uint256,bool)", "4bdd6a8e": "KPOPIO_CONTRACT_ADDRESS()", +"4bddcebe": "buyMineGold()", +"4bdde33a": "getAmountOutForUniswap(address,uint256,bool)", +"4bde27e0": "putTotalBalanceToLock(address)", "4bde38c8": "platform()", +"4bde4b2e": "getPauzer()", +"4bde5e0a": "instantData(address,bytes4)", +"4bdec000": "sequenceNum()", "4bdec44a": "VotingRightsGranted(address,uint256)", +"4bdef796": "setLevelsVaultAddress(address)", "4bdf1b0e": "receiveApproval(address,uint256)", "4bdf6667": "IsGenesisAddress(address)", "4bdf7e8b": "_updateExperience(address)", "4bdfa061": "postGenesisSales(bytes32,uint256,uint256)", "4bdfa999": "Given(uint256,address)", "4bdfbb75": "isCanvasFinished(uint32)", +"4bdfdd52": "balanceOf(uint256,uint256,address)", +"4bdffff7": "setRewardTokenPerDay(uint256,uint256)", "4be02f32": "getPlayerWithdrawal(uint256,uint256)", "4be04fd9": "getMyLastScore()", +"4be071b7": "setPoolForPair(address,address,address)", +"4be12fe0": "crossMintAmount()", +"4be1502d": "withdrawFundsTo(address,uint256)", "4be185f0": "editionOf(uint256)", +"4be1c796": "S()", +"4be2c7ba": "getReducibleFreezing(address,address,uint256)", +"4be33c64": "externalSupportersMap(address)", "4be36323": "bonusRoundId_()", "4be366d5": "purch(address,address,uint256)", +"4be37cea": "secsLeftInWaitingPeriod()", +"4be382f4": "_getDai()", "4be39f2f": "FEED2()", +"4be41dba": "computeNewMultiplier(uint256,uint128,uint256,uint128)", "4be422ae": "logOut()", "4be42c08": "updateRewardAmount(bytes32,bytes32,uint256)", "4be4343d": "InterfaceApp(address,address)", +"4be4d790": "setMinimumStakeValue(uint256)", "4be5739e": "PUBLIC_SALE_LIMIT()", +"4be5f6cc": "getTradeByMarketId(string)", "4be62668": "MainSaleDistributed()", "4be6c20a": "Error(uint8,address,address)", "4be7183a": "init(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4be744ab": "LIQFEE()", "4be7ced7": "withdraw_team_fund(address)", +"4be80cb9": "getBondSymbol(uint256)", "4be860eb": "getMinGas()", +"4be8ab34": "isFrezze(address)", +"4be8b05e": "notPausable()", +"4be8d593": "DelWhiteList(address)", +"4be8e5a6": "CDP_MANAGER()", +"4be8f2dd": "createStrategy(address,address,uint256)", +"4be974b5": "getOfferById(bytes32)", +"4be98f94": "_getReward(address,address)", +"4be99404": "erfeduid()", "4be9b992": "THRESHOLD3()", "4be9d332": "jsonCat(string,string,string)", "4bea4df7": "addLeaderboard(string,uint256)", +"4bea96b3": "lockedValue(address)", +"4beaff40": "stepInfo(uint256)", "4beb031b": "numBallots()", "4beb536e": "allWagered()", +"4beb62b7": "joinPartStream()", "4beb9e32": "approveByAddress(address)", "4bebbf14": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4bebdab7": "uintArrayToString(uint256[])", +"4bebfffc": "OnCompleteEscrow(address,uint256)", +"4bec6def": "setOpiton(uint256,address)", "4bec70a8": "setAffirmationsSigned(bytes32,bool)", "4bec8335": "changeSafeguardStatus()", +"4bec97f6": "calcSwapForUSD(uint256)", "4becfd56": "getCurrentGameInitialMinBetSize()", "4bed33b8": "SHARE_PURCHASERS()", "4bed6c23": "donationAmount()", "4bed81c8": "getWalletUser(uint152)", "4beda18b": "BILLION()", +"4bedc548": "getMaximumSupply()", +"4bedf9a8": "contributionToken()", "4bee09e1": "changeTicket(address)", +"4bee9137": "withdrawAll(address,bool)", +"4beee487": "buyGoldAndReturnChange()", "4bef5e51": "assetRegistrant(bytes32,int256)", "4bef6de9": "determinePrize(uint256)", "4bef71ac": "changeColorTeal()", "4befc326": "temperatureMax()", +"4befe2ca": "MAX_FEE_BASIS_POINTS()", "4bf003fa": "After(uint256,bytes32)", "4bf02421": "calculateAttributeTotals(uint256)", "4bf0d331": "canDeposit(address)", +"4bf0e868": "lastTransferTime()", +"4bf17b0d": "wETHInvested()", "4bf1b68d": "setTokenSupplier(address)", +"4bf1e41d": "buyEnergy(address,uint32,uint64,address,uint64)", "4bf1e60a": "newDev(address)", +"4bf2500d": "hashClaimed(bytes32)", "4bf2c7c9": "setBurnFee(uint256)", "4bf2d314": "setAdvisoryPool(address)", +"4bf306d6": "enterInContract()", +"4bf31d43": "tokenSwapSupply()", +"4bf34f25": "setGrantSigner(address)", "4bf365df": "mintable()", +"4bf3e2d0": "trxToTokenSwapInput(uint256,uint256)", +"4bf45d6e": "getDataLevelInOneLine(address,uint256)", +"4bf46282": "LockedTo(address,bool,string)", "4bf49313": "requestPayment(uint256,uint256,string,address)", "4bf4e421": "client_address()", +"4bf50384": "uniDeusEth(uint256,address[],uint256)", +"4bf53055": "getPublicSale()", "4bf5ac36": "saleAgent2()", +"4bf60c4d": "r_b32()", +"4bf67fa6": "recipientWhitelisted(address)", "4bf69206": "stakeFor(address)", +"4bf6c882": "STAKING_CHANNELID()", +"4bf6e007": "setCoefficientTimeStep(uint256)", +"4bf70272": "migrateCollateral(bytes32,address[],uint256[])", +"4bf73b08": "internal_update(string,string,string,string,string,string,uint64)", +"4bf75214": "calcExpireBlock(uint256,uint256)", +"4bf768f3": "updateTrancheRate(uint256,uint256)", "4bf79cd9": "OutCloud(address,address)", "4bf80d39": "giveConsent()", "4bf899a3": "buyPosition(address,uint256)", +"4bf8ba65": "curveDepositGUSD()", "4bf8e7a2": "getPriceInPastAuction(address,address,uint256)", "4bf9407f": "changeRecipientAddress(address)", +"4bf9649b": "getAdapterBalance(address,address,address[])", "4bf96e60": "nextPurchasableBlocknumber()", +"4bf9ab29": "_setEmployeeAddress(uint256,address)", "4bfa0d11": "TDEEndDate()", +"4bfa652a": "addProtectedLiquidities(uint256[],address[],address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", "4bfa798a": "getWarlordChestAvailable()", "4bfad14d": "WinnerPicked(uint8,address,uint16)", "4bfaf2e8": "getPendingVersionTimestamp()", +"4bfbbe0b": "latestId()", "4bfbe5df": "eventDate()", "4bfc4782": "change_a(address)", +"4bfcb41f": "luckFristBonusRatio()", +"4bfcbaf3": "getTotalSaleAmountByAddAndSaleID(uint256,address)", +"4bfd5871": "createCompany(string,string,string,string)", +"4bfdab70": "pick()", +"4bfdc8b1": "setup(uint16,uint16,uint256)", "4bfde393": "myWinShare()", "4bfe2779": "setETHRate(uint256)", "4bfe642d": "proWallet()", +"4bfe8e7a": "nativeModel()", "4bff1b95": "STARTING_KEBAB()", "4bff5009": "getUserByName(string)", +"4bff7477": "tracking(uint256,uint256)", "4bff8e51": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4bffc5e4": "allowance(address,uint256,uint256)", +"4bffd2ab": "noOfUser()", "4c0019c3": "logDisputeCrowdsourcerCompleted(address,address,address)", "4c007b35": "BigerToken()", +"4c00edba": "initiateLockup()", +"4c013bd7": "SaleClosed()", +"4c01cb57": "_melodyAdditionProposals(uint64)", +"4c02102d": "_tokensPerEth()", +"4c029bcd": "feePaid(uint256)", +"4c029ee4": "Purchase(address,uint32,uint256)", +"4c0324ee": "priOfferingFinished()", "4c0348ee": "nInvalidatedHashes()", +"4c034ea9": "withdrawPool(uint256)", +"4c04500d": "redeemCTokenAmount(uint256,uint256)", "4c04f7f2": "addTranslatorContent(address)", +"4c051100": "getVotes(bytes32)", "4c05a636": "Registrar(bytes32,uint256)", "4c05b40e": "createShortId(bytes32,bytes32)", "4c05df98": "startEarlyBird()", +"4c0603ae": "_nerdVault()", "4c062c81": "moveNapkinsTo(uint256,address)", +"4c06dc17": "generatePack(uint256,uint256,bytes4[],address,bytes)", +"4c07b2ca": "getTokenExchangeRatio(address,address)", "4c07fb4f": "editAddressDescription(address,string)", "4c081138": "assign(uint256)", +"4c086b4a": "addGranella(string,string)", +"4c08bbbe": "govTokenUpdate(uint256,string)", "4c097cb4": "trigger(bytes32)", +"4c0981aa": "CCCoinToken(string,string,uint256,uint256,address,address,uint256)", "4c0999c7": "bytes32ToBytes(bytes32)", "4c0a6532": "lrcTokenAddress()", +"4c0a6af0": "startVote()", +"4c0a7258": "currentInvestors()", +"4c0a79fb": "userLoansCount(address)", "4c0aac9a": "WithdrawFunds()", "4c0b1c90": "getMarketer()", "4c0b2973": "mfrOf(bytes32)", +"4c0b4db7": "viewMinimumBalanceforinterest()", "4c0bcfe5": "getTransferableBalance(address)", "4c0bd3ef": "getLLV_edit_16()", "4c0c0ac2": "rewardsAllocation()", +"4c0d9c8b": "LogFundingFailed(uint256)", +"4c0db29b": "_clearTokenURI(uint256)", "4c0ddea8": "decodeTokenImbalanceData(uint256)", +"4c0de7b1": "getPositionSize()", "4c0e207a": "__outputCallback(uint256)", +"4c0e6a2e": "desiredWitnesses()", "4c0e9e6a": "acquisitionsWallet()", "4c0eceb5": "plusOnePonzi()", "4c0ee2e1": "unPausePriceRaise()", "4c0eed51": "addMarketMaker(address,address)", +"4c0f38c2": "getMaxSupply()", +"4c0f6a22": "approve_836(address,uint256)", "4c10d0a5": "addFrostTokensMulti(address[],uint256[],uint256[])", +"4c10fbd5": "getPlayerSlot_SideB(uint256,address)", "4c123019": "tokenFallback(address,address,uint256,bytes)", +"4c123d57": "log(bool,bool,address,uint256)", "4c125e79": "cancel(uint64)", +"4c127866": "withdrawDAILiquityTokens()", "4c12b33f": "burning()", "4c12d8b9": "recipientETH(address)", "4c12f8bb": "creditCEO()", +"4c12fa47": "createTransfer(uint256,address)", "4c13017e": "Transfer(bytes32,address,uint256)", "4c1334a8": "GoodTo(uint256,string,string)", "4c1344b7": "isGuilty(address)", "4c136ea8": "totalEDUSAllocated()", +"4c13a9cd": "_rebaseNextTimestamp()", +"4c13efb1": "swapOMNI()", "4c13fbb2": "ImageToken()", +"4c1444c3": "commun(uint256,string)", "4c146f38": "getFrontEndTokenBalanceOf(address)", "4c14743b": "UnlockedBalanceOf(address)", "4c148efb": "CollectPayment(address,address,uint256)", +"4c14b3a8": "depositCN(uint256)", "4c14f334": "getCouponBonus(string)", "4c15469c": "tresholds()", +"4c15676b": "createProposal(string,string,string,uint256)", +"4c15d6db": "testMulmod()", +"4c15fda8": "approve_570(address,uint256)", "4c1674e5": "descOf(uint256)", "4c167a6e": "approvePreSigned(bytes,address,uint256,uint256)", +"4c169f4f": "cancelAward()", +"4c16cd51": "updateDaiToHe3AddressAddress(address)", "4c1736a0": "subFrozen(address,uint256,uint256,bool)", "4c174ef0": "isWitness(address,address)", "4c176b21": "WALLET_SALE()", +"4c1782e5": "_getMyDPRequests()", +"4c17989a": "uniswapEthBP()", +"4c17ace4": "setInteractionDelay(uint256)", +"4c17afd4": "centerAddress()", "4c17b322": "performRead2()", +"4c17dd9e": "pendingGem(uint256,address)", "4c182a95": "doDeveloperGrant()", "4c18e57e": "PositiveWhuffiesSent(address,address,uint256,string)", "4c18e960": "allowRecurringBilling(uint256,uint256,uint256,uint256)", +"4c193153": "getLastWallet(uint256)", "4c19a199": "openGameResult(uint256,uint256,uint256,string)", +"4c19d065": "fomoPot()", "4c19dd1c": "VicDemToken()", +"4c1a0487": "phaseIQ()", +"4c1a4259": "hourly_strategy(address)", +"4c1aec4a": "checkAndWithdraw_sBTC()", "4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", "4c1b64cb": "deleteAccount(address)", +"4c1b78c4": "getSynthToEthInputAmount(bytes32,uint256)", "4c1b8ffd": "voteCost()", +"4c1b9c6b": "TMTG_Burn(address,uint256)", "4c1bbef8": "claimerKey()", "4c1ccadf": "SmartexInvoice(address,address)", +"4c1ccf12": "teamWallets(uint256)", "4c1d1fde": "withdrawTokens(address,uint256,uint256)", "4c1d79ee": "setSalePeriod(string)", "4c1d9d48": "tokenIndexById(uint256)", +"4c1dbf00": "createNewAsset(uint256,uint256,uint16,uint8,uint8,uint8[10])", +"4c1dc4f7": "setReleaseTimestamp(uint256)", +"4c1e02f7": "getTotalTimeInMaintenanceSeconds()", "4c1e4169": "BIZDEV_WALLET()", +"4c1ec9aa": "refuel()", +"4c1ee570": "getRecommendScaleBylevelandTim(uint256,uint256)", +"4c1f0cd7": "setBunnyPerBlock(uint256)", "4c1f20ec": "CEO_TEAM()", "4c1f524f": "convertToMiniTtc(uint256)", "4c1f7635": "getAccountRest(address)", @@ -43648,131 +79951,251 @@ "4c20179e": "devAllocation()", "4c2067c7": "expired()", "4c207ac8": "setTraps(uint256,uint16,bytes)", +"4c209b5f": "Mint(address,uint256,uint256)", +"4c20ac74": "getAssetAdd()", +"4c20d209": "commitAddToken(address,uint256,uint256)", +"4c2111cf": "setSiteAccountAddress(address)", "4c21eb07": "put(string)", "4c21fa45": "getNoteByIndex(uint256)", +"4c22017e": "smartpot_three(uint256)", "4c2233a5": "withdrawAll(uint256,address)", +"4c224017": "approve_863(address,uint256)", "4c228656": "advisorsAllocationTokenSend(address,uint256)", "4c22a8d1": "kvcAdd(uint256,uint256)", "4c22b792": "calc_wei_rewards(uint256,uint256,uint256)", "4c22c119": "isUser()", "4c2324bb": "toBytes(uint256[])", +"4c23648d": "stakeERC721(address,uint256)", +"4c2381b6": "mintDoc(uint256,int256)", "4c23ba50": "removePeer(address)", +"4c2402fa": "lockAmountAddress(address,uint256)", +"4c2412a2": "maxPlayers()", "4c24d4dd": "isPoliceNode()", +"4c2501b3": "register(address,uint256,uint256,uint256,uint256,bool)", "4c25162a": "Babatoken()", "4c2516de": "swapToken(uint256,address)", +"4c251adc": "brightIdContext()", +"4c255c97": "MAX_PERCENTAGE()", +"4c2568d7": "setFixed(uint256)", "4c25727b": "viewPollData(uint8)", "4c258eb1": "getQtyFilledOrCancelledFromOrder(bytes32)", "4c25deb5": "USER_GROWTH_TOKENS_RESERVED()", "4c26064b": "MVGcoin(uint256,string,string)", +"4c261247": "reveal(string)", "4c266e11": "setExchangeGroup(address,uint256)", +"4c268fc8": "calculateAmountAfterSettlement(address,bytes32,uint256,uint256)", "4c26aaa2": "TokenExchange()", "4c26b6eb": "total_buy()", +"4c26cf8a": "addLiquidityPool(uint256,address)", +"4c27d403": "init(bytes32,bytes32[])", "4c281603": "getPlayerMax(uint256)", +"4c28839b": "sendState(uint256)", +"4c289208": "testNegativeAbs(int128)", "4c28a043": "adminGetFeeDial()", +"4c28be57": "liquidateSAFE(bytes32,address)", "4c294188": "customer_tickets(address,uint256)", +"4c29ada3": "sweepAmountAvailable(address)", +"4c29b0af": "removePynth(bytes32)", "4c2a664b": "purchaseNotes(uint256)", "4c2a799f": "checkFileProof(bytes32,bytes32[10],uint256[4],bytes32[],uint256)", +"4c2a860d": "ice()", +"4c2a94cc": "_rewardCollector()", "4c2bc9a9": "assertEq26(bytes26,bytes26)", +"4c2bce5d": "deposit(uint256[7])", "4c2bd226": "getDescriptionHash(address)", "4c2d0378": "getAllTransactionIds()", "4c2d71b3": "setConfigAddress(bytes32,address)", +"4c2d8379": "punkIdToPunkJob(uint256)", "4c2d8649": "transferComplete(address,uint256,bytes)", "4c2db6d8": "buyCoin(uint16)", +"4c2e3a4c": "throwEmptyRevert()", +"4c2e589d": "setBeerPrice(uint256)", "4c2f04a4": "AddMessage(address,uint256,string)", +"4c2f61f2": "closeLandRegistry()", "4c2fac53": "requireFunction()", "4c2fc8b2": "acceptProposedMilestones(bytes32)", "4c2fe456": "right94(uint256)", "4c2ff0ae": "getLLV_edit_31()", +"4c300605": "getKrkReturn(uint256)", +"4c30215b": "getRoleMember(uint256)", +"4c303276": "editions(uint8)", +"4c304c78": "calculateTop5HeroesPower(address,uint256)", "4c3052de": "submissionGasPriceLimit()", +"4c3109c4": "injectedTotal()", "4c316f70": "mineCoins(uint256)", "4c31a0ca": "mintFoundersRewards(address,int256)", "4c31df50": "nextroundsolsforhire()", "4c3221e1": "complexityForBtcAddressPrefix(bytes)", "4c32a444": "_onCanvasCreated(uint256)", "4c330471": "getReferralBalance()", +"4c3304d4": "IcsTokenPurchase(address,address,uint256)", +"4c33ad09": "govUpdateSettings(address,string,string)", +"4c33ce59": "transferToken1(address,address[],uint256[])", "4c33fe94": "cancel(address)", +"4c347311": "CampaignInformation(bytes32,address,string,string,uint256[3],uint256[],string)", +"4c34c2f9": "LogBool(string,bool)", "4c34c8de": "USDCToken()", +"4c34c9de": "extLen()", "4c34d7e9": "UNITED_NATIONS_FUND()", "4c352323": "getNewVoting(uint256,bytes32[],address[],uint256[])", +"4c356ff6": "obtenerMemoria()", +"4c359a28": "recastPreSoldiers(uint256)", +"4c359aeb": "entityBlockLastClaimedOn(address)", +"4c359b49": "getCeilingPrice()", "4c364ceb": "createAccessory(uint8)", +"4c36b837": "aggregatorWarningFlags()", "4c36c36e": "resolveBet(uint256)", "4c36cf16": "addRoundPrice(uint256,uint256,uint256,address[])", +"4c36dd63": "luckPool(uint256,uint256,uint256)", +"4c36e321": "cancelSwapsOf(address)", "4c37077f": "chargeBuyer(uint256,address,uint256,uint256)", +"4c374f29": "swap_buy_sell_flash(uint256,uint256,uint256,uint256,address,address)", "4c381350": "meteredPrice(uint256)", "4c382d99": "terminateEmployee(address,uint32,uint8)", +"4c38454c": "getSIHandlerAddr()", "4c38661d": "lastPing(address)", +"4c386fb3": "getDeposits(address,bool)", "4c387d82": "NSCToken()", "4c38c366": "reLoadXaddr(uint256)", +"4c3925a3": "getGons()", "4c3997d4": "cancelBuyAuction(uint256,address)", +"4c39a749": "nftOwner()", "4c3a00cb": "totalTradeRecords()", "4c3a1a1a": "returnUserGrowthPoolTokens(address,uint256)", "4c3a6ae0": "isMultiSigWallet()", "4c3a9675": "ManagerProxyTargetMockV2(address)", +"4c3a998a": "Burn10percentOfHalfTokensSupply()", +"4c3aad0f": "fogRewardPercentage()", +"4c3ac80b": "limitTimePassed(uint32)", "4c3acb86": "debug(string,string)", +"4c3aec1f": "swapToBSC(uint256)", +"4c3b6760": "openBooks(uint256)", "4c3b67b4": "withdraw_for(address)", +"4c3b8912": "bulkSendETHWithSameValue(address[],uint256)", "4c3ba268": "getBySemanticVersion(uint16[3])", "4c3bf0b5": "changeInitialCost(uint256)", "4c3d1f00": "EthDailyLimitChange(uint256)", +"4c3d2bb0": "pairFor(address,address,address,bytes32,address)", "4c3dff01": "InitialBasicBalance()", +"4c3e3fe2": "getMemberProcesses(address,uint8)", +"4c3e49f0": "repay(bytes32,uint256,uint256,uint256)", +"4c3ea4fe": "toEnable()", "4c3ec50b": "FarziToken()", "4c3eea9e": "generalLog(uint256)", "4c3ef6dc": "minimumTokenThreshold()", +"4c3efd99": "wasForceClosed()", "4c3f333f": "Kalypso()", "4c3f8ec0": "Tier_Wildcat_Registration()", +"4c407c52": "operatorProposal(bytes32,bool,uint256,uint256,uint256,uint256,uint256,uint256,address)", "4c409b80": "ChangeWallet(address,address)", +"4c40a07b": "setBuyable(bool)", +"4c40bb60": "_registerInterfaceForAddress(bytes32,address)", "4c413139": "minutesToPost()", "4c418879": "getMyDino()", +"4c4190ba": "panel4_days()", "4c41a6c7": "blockThreshold()", "4c41bf9d": "getOnBurnTargetValue()", +"4c41c7e8": "getHatcheryTotalIncubations()", +"4c41d44f": "createLoanRequest(uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"4c425afe": "mintTemplate(uint256,uint256,uint256,uint256,string)", "4c4316c7": "donate(uint64,uint64,address,uint256)", "4c433843": "parityOwner()", "4c439436": "getTicketsAtAdress(address,address)", "4c44d53f": "test_fourInvalidEqBytes32Message()", +"4c4506fb": "userSwapData(address,uint256)", +"4c451a6a": "setVaults(address,address)", "4c45c7ec": "setPhase(uint8,uint256,uint256,uint256,uint256,uint256)", +"4c4660db": "GameEnded(uint256,uint256)", "4c466d37": "signer(bytes)", "4c46e52c": "trancheOneBalanceOf(address)", "4c46fb73": "stageCaps(uint256)", "4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", +"4c474434": "purchase(uint256,uint256,uint256,bytes)", "4c4766e8": "KittenRegistry()", +"4c477daf": "validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)", "4c478b62": "ERC827TokenMock(address,uint256)", +"4c47e71d": "lockForMemberVote(address,uint256)", "4c47e9ee": "setLockedConfig(address[],uint256[],uint256[])", +"4c47f0cc": "bet(bool,address)", +"4c480a88": "startNextMonth()", "4c480c2a": "ownerCandidat()", "4c4870c6": "checkGoal()", "4c488dac": "getChannelValidUntil(bytes)", +"4c48bdd3": "convertPortalAddress()", "4c49515d": "presaleTokensIssued()", +"4c498203": "mintPeriod()", +"4c49b9b3": "lastAverageBalance(address)", "4c4a386f": "refundEnabled()", +"4c4a3c25": "stateView()", "4c4a4c67": "assertEq2(bytes2,bytes2)", +"4c4a5e0d": "winnerPrizeMoneyForEachRaz(uint256)", +"4c4a884d": "wmulV(uint256,uint256,address)", "4c4a9761": "tokenRate4()", "4c4aea87": "getReleaseData(bytes32)", +"4c4bdd12": "addAndLockLiquidity()", +"4c4be8a6": "MAG()", "4c4bf936": "landData(int256,int256)", +"4c4c0e09": "maxEmission()", +"4c4c0efa": "getMiningUpgradeCost(uint256)", "4c4c23dd": "upgradeGreatCoin(address)", "4c4c447e": "cancelBattle(uint256)", +"4c4c4efc": "confirmReceipt(string,string,string)", "4c4cb69e": "INVEST_AMOUNT()", "4c4cea5a": "completeAt()", +"4c4cf652": "Donate(address,uint256,string)", "4c4cfc3b": "tokensForEcosystem()", "4c4d07e7": "isBouncer(address)", "4c4d460e": "LogCampaignCreated(address)", +"4c4d7571": "poolTokenAddress()", "4c4dc6e0": "docCount()", "4c4deecb": "__callback(uint256,string)", "4c4e03f2": "_getExtraParam(bytes)", +"4c4e2d7f": "viewPubSellRound()", +"4c4e2e51": "SUPREME()", +"4c4e30ad": "ownermess(address)", +"4c4e7f6f": "addLiquidator(address)", "4c4e829c": "TransactionRevoked(uint256)", +"4c4ec1e4": "technologyBalances()", +"4c4eef0e": "DSS_HASH()", +"4c4ef592": "updateEthWallet(address)", "4c4efef7": "totalCLNcustodian()", "4c4f1386": "WartecToken()", +"4c4f50f3": "underflowtostate(uint256)", "4c4fa89a": "getChildBranch(bytes32)", +"4c505441": "rt()", "4c50ea27": "RHOC(uint256,address)", "4c515fb5": "TEAM_VESTING_CLIFF()", +"4c51958f": "approve_754(address,uint256)", "4c51b021": "substract_individual_shares(uint256)", +"4c51b141": "claimableOCDividend(address)", "4c524be4": "selectWinner(uint256)", +"4c524dcf": "unpauseStake()", +"4c526bdb": "wbtcTokenAddress()", +"4c52dd8c": "transferto()", +"4c536f4d": "accumulatedCashConversion()", "4c53adb0": "blackFridayEndBlock()", +"4c542d3d": "nodeStart(address)", +"4c5430a0": "treasury(uint256)", "4c54cc1d": "managerETHaddress()", +"4c54d2f1": "emergencyDrain72hAfterLiquidityGenerationEventIsDone()", +"4c54df0f": "equalAddressFailTest()", +"4c54e1b5": "player(address)", +"4c555ece": "holdStateEnd(address)", +"4c5606dd": "getDebt(uint256,bytes32)", +"4c565992": "pendingLogics(address)", "4c56e992": "refillContract()", +"4c573121": "lastTokenBorrow()", "4c574afe": "unblockSecondStake()", "4c575fcc": "numberOfRawEarlyPurchases()", "4c57fc28": "setTokenMintFeeReceiver(address,address,address,address)", "4c5802c1": "getPhaseAddress()", +"4c5844e7": "addBenefits(uint256)", +"4c585010": "depositLPT(address,uint256)", "4c585ce4": "approveMultipleUsers(address[])", "4c5879cf": "WidinShares()", +"4c5879df": "pairStake(address,uint256)", "4c58994c": "TrypCrowdsale()", +"4c58cd8d": "redEnvelope()", "4c594c1e": "limitDateCrowdWave3()", "4c59b47c": "EthereumLottery(address,address)", "4c59f021": "CakCrowdsale(uint256,uint256,uint256,address)", @@ -43784,26 +80207,52 @@ "4c5be574": "getOdds()", "4c5cbe9a": "getBalancesForTeam(address)", "4c5d6d93": "totalCrowdSale()", +"4c5d8a0f": "jobCount()", +"4c5d8ccf": "NewOwner(uint256,address)", +"4c5dcfcc": "checkAscensionWindow()", +"4c5de51a": "Buy(address,address,address,uint256,uint256,uint256,uint256)", "4c5df57a": "createLoan(address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", "4c5df737": "addCar(string,string,string,uint16,string,address)", "4c5f338b": "CheckStudentofCourse(uint256)", +"4c5f6275": "bulkProcess(uint256[])", +"4c5f7f54": "transferLocks(uint256,address)", +"4c5f8e49": "getTeamPlayerCount(address)", "4c5f97b6": "PayThrone()", +"4c6001c7": "getLastEarnTimestamp()", +"4c6041d3": "getCheckpointTimes()", +"4c60fd52": "DroneEmployeeROS(address,address,address)", "4c610ba4": "totalRewardThisYear()", "4c611268": "balanceOfUnclaimedCookie(address)", +"4c61f047": "amountPerBlock()", "4c6226fc": "oraclizeFee()", +"4c623511": "GzeBonusOffListUpdated(uint256,uint256)", +"4c627bad": "resta(int256,int256)", "4c62a644": "withdrawComission()", +"4c62c078": "DeliveryProposalEvent(address,uint256)", +"4c62d88c": "contract1()", +"4c63e562": "assume(bool)", "4c64384c": "maxPrivateSale()", +"4c64ae47": "issue(address,bytes32,uint256)", "4c64cf92": "mint_time_locked_token(address,uint256)", "4c65b2b3": "ethOwner()", "4c65c62e": "AgentContracteGalaxy(address,address,address,uint256,uint256)", +"4c660f42": "nfsRead(uint256)", "4c661a2c": "DaoOwnershipTransferred(address,address)", "4c66326d": "deregisterCallback(address)", "4c6686d8": "CONFIG_FEES()", +"4c668ee9": "Supr3Address()", "4c66bcc1": "WorldWideLoveToken()", +"4c670773": "regVoter()", "4c67567a": "firstLockAmount()", +"4c6762a2": "updateBottlenose(uint256)", "4c676725": "fundTeamCompany()", +"4c67a429": "ethRemaining()", +"4c67cc3b": "getAllFlights()", +"4c67ee61": "FinalScoreUpdated(uint16,bytes32)", "4c68df67": "totalReserve()", +"4c6931d1": "startblocksMined()", "4c69c00f": "setOracleAddress(address)", +"4c69d497": "iaRatesTime()", "4c69ec93": "changeReceiver(address,address)", "4c6a3334": "buyEthLootbox(address)", "4c6adb31": "firstReporterCompensationCheck(address)", @@ -43812,260 +80261,482 @@ "4c6c27a1": "judgeCustom(bytes32,bytes32,bytes32,uint256,bytes32,uint256[4],bytes32[10],uint256[4],bytes32[])", "4c6c6a5c": "upgradeFrom(address,address,uint256)", "4c6c8bc3": "distribute(address[],uint256[],bytes32[])", +"4c6c9b78": "yes()", "4c6d1d9e": "checkOutTag(string)", "4c6d350b": "approveShutdown(uint256)", +"4c6d635c": "setAdditionalGasConsumption(uint256)", +"4c6d767b": "snapshotTime()", +"4c6d7c84": "ovmCALL()", "4c6d8aac": "hasParameters()", "4c6e4453": "EcoLend()", "4c6e5926": "send_to_side_chain(uint256,address,uint256)", +"4c6e62b6": "registerRewardToken(address,address,uint256)", "4c6ebbbe": "maxIcoTokenLimit()", +"4c6f7cd4": "governanceSetExpansionRequirment(bool)", "4c6fc20f": "setDisbursingAddr(address)", +"4c6fe569": "getSortedQoS()", "4c703ccd": "FirstERC20TestToken()", +"4c70536c": "nkcnToken()", "4c70b6b2": "deList(address)", "4c714ed4": "DescriptionChanged(string,string)", +"4c718be3": "updateCityAddress(address)", "4c7241f8": "Potentl()", +"4c725ab5": "payouts(uint256,address)", +"4c72b3f4": "approveSetTransferProxy(address)", +"4c736099": "expiringCouponsAtIndex(uint256,uint256)", "4c738909": "getMyBalance()", "4c73eef6": "card_black_minamount()", "4c743c45": "FCTOKEN()", +"4c748189": "initialEBTCRewardRate()", "4c750bca": "bountyFunds(address,uint256)", +"4c7552d6": "TokenB()", +"4c75a4d6": "adminslevel()", +"4c75b707": "withdrawTax(address)", +"4c75d2fa": "viewSaleDOGS()", "4c75dc8f": "EFOcallBack(string)", "4c75fbca": "getThirdAddressBalance()", +"4c7607a3": "SignatureValidationError(uint8,bytes32,address,bytes)", +"4c7624e0": "backupWallet(string,string)", "4c76318e": "award(bytes32)", +"4c76361e": "MAX_INVESTMENT()", +"4c769bc2": "testBidTransfer()", +"4c76cdf9": "returnKeyforUser()", +"4c76e765": "addBusinessman(uint256,uint256,bool,uint256,uint256,uint256,bytes32)", +"4c778221": "transferHolderRights(address,uint256)", +"4c779bc3": "unstakeAtIndex(uint256,bytes)", +"4c77a10f": "releaseBlock()", "4c77a28d": "AppleCoin()", "4c77c0e2": "period2Numerator()", "4c77e5ba": "getAddressValue(bytes32)", "4c780596": "UpgradeSpace(uint8,uint16)", "4c783bf5": "isControllable()", "4c78529e": "setOfficialUrl(string)", +"4c789db7": "addNewOwners(address)", "4c78b276": "getShare(address,uint256)", "4c7940c5": "getWithFrozenStockBalance(address,address,uint256)", +"4c794231": "claimAllRewardAndTickets(uint256[])", "4c79afe0": "EventBuyShip(address,uint32,uint32)", "4c7a0271": "buyMiner(uint256[8])", +"4c7a12a0": "uint2Str(uint256)", "4c7a2254": "checkMyWithdraw()", +"4c7a2603": "revealVote(bytes32,uint256,int256,int256)", "4c7a5c0f": "ArtifactCoin(address)", +"4c7a713d": "getTotalBud()", +"4c7a906a": "limitToken(address)", "4c7ab28d": "setMaxToSell(uint256)", "4c7ae3ac": "getNameFromKoikeToken()", +"4c7b0972": "getAssetSettings(address)", "4c7b18fd": "ratioUpdateTime()", +"4c7b1a79": "setStartMainSale(uint256)", "4c7b8fba": "contributionHashes(uint256)", +"4c7bd631": "swap_raw_limit_ex_spent(address)", +"4c7c2dc6": "frob(uint256,address,int256,int256)", "4c7c3ca1": "KryptopyCrowdsaleMock(uint256,uint256,uint256,uint256,uint256,address)", +"4c7c67e3": "ReinvestReferrals(bytes32,address,uint256,uint256,address)", "4c7c71fe": "startTimes()", +"4c7cb589": "withdrawMarketToken(address,uint256)", "4c7ce18a": "withdrawReturns()", "4c7cfd9b": "MarketboardListingPriceChanged(uint256,uint256)", "4c7d3e3f": "icoIsClosed()", "4c7d7d3f": "standardToken()", +"4c7dc1ea": "_claimFor(address)", +"4c7def7b": "getUserInformation(uint256)", +"4c7df18f": "getAnchor(uint256)", +"4c7e0d4d": "accountPublicSaleSeason(address,uint16)", "4c7e6bab": "tokensPerCentsDayOne()", +"4c7ec0b0": "presignHash(bytes32)", "4c7f0bdd": "isBackend(address)", "4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", "4c7fa728": "getPlayerLeftDividend(address)", +"4c7fafc0": "setAirdrop(address,address,uint256,uint256,uint256)", +"4c801cee": "externalTokensRecovery(address)", +"4c8024cc": "entityIndex(address)", "4c803feb": "fib1(uint256)", +"4c806ffc": "stopBorrowing(address,uint256)", +"4c808904": "mintBatchToken(address[],uint256[])", "4c808da8": "StageUpdated(string,string)", "4c80b03b": "minTransAmount()", "4c80c937": "getEpochData(uint256,uint256)", "4c80f5c1": "minimumAmountToParticipate()", "4c813d6d": "sendItDv(string)", +"4c818e03": "buyRigelTokens(address)", "4c81a1db": "addressPayableFunc(address,address)", +"4c81a727": "ERC721_Received()", "4c81c4d7": "startStage2Time()", "4c81e13a": "incentiveDistributionRoundDenominator()", "4c81e48b": "testToUint()", +"4c81ea24": "_pageCount(uint256,uint256)", +"4c82b3b4": "setSellTreshold(uint256)", +"4c82d0e4": "addNewSuperAdmin(address)", +"4c82e215": "viewInterest(address,uint256)", "4c8316a6": "showTokensStaked()", +"4c83174b": "cakeListingPriceInWei()", "4c833532": "resumeTransfer()", +"4c834a90": "usdt_rate()", "4c839beb": "getContributionTokens(address)", +"4c83a709": "xaaeth()", "4c840214": "getBackToken(address,address,uint256)", "4c841e5d": "_setBlacklistedUser(address)", +"4c8457bd": "totalTLPDecomposed(string)", "4c85a8f3": "isAllowedToMint(address,address)", "4c85b425": "buyShares(address)", +"4c85c4a3": "numberOfDownloaders()", +"4c85cd8e": "onSetInviter(uint256,address,uint256,address,bytes32,uint256)", "4c85d2e6": "addImmigrationOfCountry(address,uint256)", "4c86c2e5": "setPortUpdate(uint16)", "4c86e97b": "bonusTokensLeft()", "4c873c48": "tokenSetup(address,address,address)", +"4c8781c5": "player_getNukedCountries(address)", +"4c87a0a5": "reward_integral_for_(address,address)", "4c87effd": "delete(bytes32)", +"4c885c02": "calculateSupplyDivisor()", +"4c88aca3": "doubleInv(uint16)", "4c88bc26": "YEAR_TWO_SUPPLY()", +"4c88c1eb": "lastAddLPTime()", +"4c89867f": "getLastUpdate()", "4c899118": "getProposalFromID(bytes32,uint256)", +"4c89a851": "fnxClaimFNX_From_CFNX()", "4c89c4c7": "getHash(bytes10,uint8)", +"4c8a30ad": "sushiswapLp(uint256)", +"4c8a5b1d": "TWAP1Week()", +"4c8abf26": "updateDailyEarningPercent(uint256)", +"4c8b0fe7": "registerPayment(bytes32,int8,uint256,address,uint256)", "4c8b16f4": "setTimeStep(uint256)", "4c8b8ca7": "distroyBuyerToken(uint256)", "4c8bae93": "_isTradeable(uint256)", "4c8c121e": "getGameHash(address,uint256)", +"4c8c9ea1": "performCreate(uint256,bytes)", "4c8cab79": "largestStake()", "4c8cc20b": "toContentID(address,string,string,address,uint256)", +"4c8cdcd5": "stakeReputation()", "4c8d1e42": "DockCrowdsale(uint256,address,address)", +"4c8dc988": "registerMimeType(bytes32)", +"4c8ddddc": "smartContractStatus()", +"4c8e7d81": "disableToken(bytes32)", +"4c8e83bd": "ROLE_INFO()", +"4c8f06e9": "period_timestamp(int128)", +"4c8f2a78": "lockPeriods(uint256)", "4c8f3562": "computeCooldownSeconds(uint16,uint16)", "4c8f4810": "buyMCT(address,uint256)", +"4c8f70fd": "setAlpacaPerBlock(uint256)", +"4c8f868b": "LimitedEditionRunCreated(uint256)", +"4c8f911e": "latestWorkId()", "4c8fe526": "next()", "4c8fea7d": "_convertSgnToSga(uint256)", +"4c8ff75d": "buyBackToken(address)", +"4c8ff99e": "setFxRoot(address)", +"4c90042a": "addToArray1(uint256)", "4c90aaeb": "randomize(bytes32)", "4c9151e6": "TransferStarted(address,address,uint256[],uint256)", +"4c921e95": "setAirdropValue(uint256)", "4c922a9f": "changeColorPurple()", +"4c923e22": "year3_limit_date()", +"4c925032": "setReporter(address)", +"4c92771d": "getTotalRewardsToBeAccredited()", +"4c928a70": "Conversion(uint256,uint256,uint256)", "4c9297fa": "scheduleStart(uint256)", "4c93505f": "setRevoke(bool)", "4c9362aa": "addActiveUserListArr(address)", "4c93c1a6": "GetUpTickPrice(uint256)", +"4c93ea7d": "_balanceProfit(address)", +"4c9459f5": "AddonAltered(uint256)", "4c9478ce": "_yearThreeClaimed()", "4c947c86": "getInitInputDataBytes(address,address,address,address)", "4c94ac6a": "clearMilestones()", +"4c953c58": "finishlized(address,uint256)", "4c9599f2": "validityDate()", "4c95baf3": "compoundingFreq()", "4c95ca9c": "setRatePreICO(uint256)", "4c95cb98": "OracleBase()", "4c966822": "winnerWithdrawal()", "4c96a389": "deploy(address)", +"4c96b031": "smnAddress()", +"4c96dcc8": "changeTreasuryFee(uint16)", "4c96f0cc": "transferAllTokens()", "4c96f281": "getAllPublishers()", +"4c96f95a": "whitelistToggle()", "4c97057a": "LogWinner(string)", "4c970b2f": "foo(int256)", +"4c972b23": "ReserveNextPeriodFunds(uint256)", "4c977972": "Soft_Cap()", "4c97c836": "upgradeConstitution(uint256)", +"4c97f766": "collectedFees(address,address)", "4c982872": "ElextroCoin()", +"4c984185": "swaps()", "4c985dfb": "newTokens(address,uint256)", "4c98aec9": "CASHX()", +"4c98e243": "_currentEpoch()", +"4c99007d": "burnCounter()", +"4c990201": "onRoundEnd(uint256,uint256,uint256)", "4c990cc7": "startAirdrop(address[],uint256[])", +"4c995a7f": "totalFarms()", +"4c9987c8": "getHeightDimensionFileInPixel()", +"4c999f5e": "contractWhitelist(address)", +"4c99f4cf": "Lock_wallet(address,uint256,uint256)", "4c9b30b4": "allow(bytes8)", "4c9b60dc": "changeUserEthAddress(address,address)", "4c9b760d": "changeMaxContribution(address,uint256)", +"4c9be9f0": "lockAtts(address)", +"4c9c786c": "getMonsterRates(address,address,uint256)", +"4c9e1f49": "uploadMon(bytes)", "4c9e2779": "balancesLocked2Y()", "4c9e502e": "totalLoanAmount()", +"4c9e6dbf": "oneShare()", +"4c9e7ca5": "hashArray()", "4c9ed763": "requestTokensBack()", +"4c9f0ec0": "uncooperativeClose(address,uint32,bytes32,uint64)", "4c9f166d": "bettingAllowed()", "4c9f2bfc": "SOBU()", "4c9f45eb": "repossessionBountyPerHundred()", "4c9f66c7": "feePot()", +"4c9f670e": "approve_140(address,uint256)", +"4c9f9afc": "createPool(uint8,uint8,uint256)", +"4c9fb9b1": "incomeList(address,uint256)", +"4ca04688": "testDataTypeUint32()", +"4ca04cd7": "changeThresholdRatio(uint256)", +"4ca05c66": "ICOPaused(uint256)", "4ca0a305": "GlobalIdolCoinToken()", +"4ca0acf8": "claimCard(address,uint8,bytes32,bytes32)", "4ca14270": "AddressChanged(string,address,address)", "4ca15352": "airDropCount_()", +"4ca15376": "isD2Vault(uint256)", "4ca168cf": "register(bytes,uint256,address,string,uint256)", "4ca18ebd": "reject(uint256,string,uint256)", "4ca1c417": "isValidNameLength(string)", "4ca1fad8": "addRequest(uint256)", +"4ca21cf4": "_pairXBTWBTC()", +"4ca29923": "wat()", +"4ca39ea0": "setTargetPrice(uint8,uint256)", "4ca3a111": "getWeiPriceMicroKeys()", "4ca3e9b8": "getProjectAddress(uint256)", "4ca40518": "ReBornEnergyCoin(uint256,string,uint8,string)", "4ca43f41": "transferAny(address[],uint256)", +"4ca47ad1": "getTimeLock(address,uint8)", "4ca50f59": "sellsTokens()", "4ca5558c": "AllCaptcha()", +"4ca5d3e4": "totalValueTPT()", +"4ca5dcb2": "setDeleveragingOperator(address)", +"4ca618e2": "aliveBonds()", "4ca63a84": "TimeLimitedStoppable()", "4ca64b3a": "bulkTransfer(address[],uint256)", +"4ca66540": "callReclaimToken(address,address)", +"4ca6b71b": "minDepositBlock()", "4ca6ba2f": "AporooToken(uint256,string,uint8,string)", "4ca6d7e6": "tier2Time()", +"4ca6ef28": "CAKE()", "4ca6fcfc": "registerVIP(address,address,uint256)", +"4ca78541": "ycrv_pylon_uni_lp()", +"4ca7d3ed": "writeInvoice(string,string,string)", "4ca7fbd0": "updateTokenPriceWeekTwo()", "4ca82b52": "finalLoos()", "4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", "4ca8c1e8": "isInMaintainance()", +"4ca8f15c": "HicsTokenPurchase(address,address,uint256)", "4ca92e08": "deductExtraBalance(address,uint256)", "4ca98997": "getAmount(uint256,uint256)", +"4ca9a979": "updateHash(string,string)", +"4ca9af38": "notPayableFn()", "4ca9b258": "contributorRefund()", +"4ca9d624": "crowdsalePaid(address)", "4caa1a09": "_calculatePaymentToOwner(uint256)", +"4caa2ad3": "setSafuFee(uint256)", "4caa7f37": "withdrawSnowflakeBalanceFromVia(string,address,string,uint256,bytes,bytes)", +"4caa9134": "getPeriodFinishByPID(uint256)", +"4caaa746": "approveAmttoTrade(uint256,address)", +"4caacd75": "unchangeable()", +"4caadc42": "allocations3(address)", "4caaf45f": "changeSigningAddress(address)", +"4cac3da1": "enterSystem(address,address,uint256)", +"4cac9866": "withdrawWhenPaused(uint256)", "4cad12e0": "orders_sell_price(address)", "4cad3438": "setRateFinalStage1(uint256)", "4cad42d3": "testWager()", +"4cae3132": "viewStc()", "4cae5f99": "loanRepaymentNotification(uint256)", "4caeebd0": "STAGE_FOUR_TIME_END()", +"4caf163c": "buyDone()", +"4caf3010": "DESCRIPTION_CHANGE_PRICE()", "4caf6231": "COLOR_WHITE()", +"4cafe3f4": "makeProposition(address,address,address,uint256,uint256)", +"4cb0267f": "retrieveHoldData(string)", +"4cb04570": "setStrategyConverter(address[],address[],address)", +"4cb0b173": "calcRewardTimeProgress()", "4cb0c7a1": "getOrdersOfVendor(address,uint256,uint256,bool)", "4cb10ed3": "hasStartTimePassed(bytes32)", +"4cb16efa": "frax_usdt()", +"4cb3fad1": "isItReallyCharbetto()", +"4cb40400": "emergencyMode(bool)", "4cb44f8d": "getConfigEntryAddr(bytes32)", "4cb532db": "socWarefareAddr()", "4cb5465f": "transferWithLock(address,bytes32,uint256,uint256)", +"4cb58ed4": "withdraw_cETH(uint256)", "4cb5a45d": "GSUMedal()", "4cb5ef77": "closeVoteRevealPhaseIfAllowed(address,bytes32,bytes32)", "4cb5f1c6": "totalsum()", +"4cb60bc5": "miningWarAdministrator()", "4cb6bf73": "FZTToken(address)", "4cb6d6af": "finalizeCrowdsale(address)", "4cb6f4a5": "voteRequest(uint256)", +"4cb71222": "setCToken(address)", "4cb71b9b": "getAllReleaseHashes()", "4cb79536": "presaleStartBlock()", +"4cb7bc90": "addJOYtoyRoyalties(uint256,address[],uint256[])", "4cb7da65": "abortMatch(uint256)", "4cb7dd6f": "popLeader(address)", "4cb84b9a": "getIcoCap()", "4cb85312": "_addInvestor(address)", "4cb85356": "BranchSender(uint256,bytes32)", +"4cb876f2": "totalPositionSize()", "4cb88ad8": "ABEToken()", +"4cb8a68b": "getStakes(address,uint256)", "4cb93ff8": "capTokenAmount()", "4cba4ca4": "updateGene(uint256,bytes)", "4cba5c6a": "setResults(uint256[4])", "4cba67ce": "addAddressToAccountForUser(address,bytes,bytes,address,bytes32)", +"4cba7609": "poolerBalances()", +"4cbab330": "add_viewer(address)", "4cbabcdc": "invest(bool)", "4cbac3d2": "calculatePurchasedTokens(uint256,uint256)", "4cbb4a0a": "_removeTokenFromAllTokensEnumeration(uint256)", +"4cbb6614": "invite_reward_v3_ratio()", "4cbb7532": "setBorrowAgreement(uint256,uint256,string,string)", "4cbbb987": "DOSXToken()", "4cbc07f2": "weisPerBigToken()", +"4cbc410f": "approve_147(address,uint256)", "4cbc49ad": "claimRewardManually(address)", "4cbc82cd": "getTrackByArtist(address,uint256)", "4cbd2b74": "allowanceByLegacy(address,address)", "4cbd7a26": "withdraw(address[],uint256[],bytes,bytes,bytes32)", +"4cbdf0ec": "setSeedLimit(uint256)", "4cbe02a5": "createAuthorDrawings(bytes32,bytes32,address,string)", +"4cbe32b8": "numVoters()", +"4cbe4171": "rateToClaimReward()", "4cbe552c": "myEntityStructs(uint256)", "4cbee813": "logout(string)", +"4cbef36b": "_assertSenderIsAuthorized()", "4cbf3d4c": "getNumbersOfPick(uint256,uint8)", +"4cbf6302": "checkAddressPermission(address,uint256)", "4cbf6ba4": "hasDNSRecords(bytes32,bytes32)", "4cbf867d": "intervalSecs()", +"4cbf9e31": "resetGreeting()", "4cbfafd9": "DefaultReleaseDelayed()", "4cbfbf47": "REAPER_INTREPID_MAX_CARGO()", "4cc05a71": "withdrawCount()", +"4cc08a27": "createReceipt(uint256,string)", "4cc09eac": "tokenRatePre()", "4cc0a885": "maxRevealSeconds()", "4cc0ee3c": "modifyDescription(address,string)", +"4cc176fd": "WinnerAnnounced(string,address,uint256)", +"4cc18e57": "setKeep3r(address)", +"4cc1c2bb": "getChain(string)", "4cc22528": "setRateForOrder(bytes32,uint256)", "4cc22f9d": "getSaleEnd()", +"4cc2598e": "userWait(address)", +"4cc26c57": "getUnclaimedRgt(address)", "4cc2a4bb": "_preValidateTransfer(address,address,uint256)", "4cc2b5d0": "addPolicy(bytes32,uint256,uint256,uint256,string)", "4cc2c0fe": "getTotalFor(uint256,uint256)", +"4cc3350c": "requestNewProtectedAddress(address,uint256)", "4cc3a6b0": "ConvertQuote(uint256)", +"4cc3d2d2": "joinMember(string)", +"4cc3f63d": "totalUsdtAmountOfPriIEO()", "4cc45f50": "changeAddressQueen(address)", "4cc47910": "oraclizeQueryIdsToBetIndices(bytes32)", +"4cc4e2a1": "Bounty(address,uint256)", "4cc53838": "getSaleContractTargetEtherMin(address)", "4cc60757": "getOperator(address,address)", "4cc6083a": "totalTrading()", "4cc62409": "EOSOwned()", +"4cc64828": "checkRabbits()", "4cc653c8": "calculateDividends_(uint256)", +"4cc67b5b": "lastRewardedBlock()", "4cc682ee": "getPubKeyHash(bytes20,uint8)", +"4cc725ec": "updateShareholderTransferData(address,address,uint256,uint256)", "4cc747c8": "unlistAllOpenProposals()", "4cc78983": "setPreviousDungeoonId(uint32)", "4cc7a88d": "sendLoveToken(uint64,string,string,string)", "4cc82215": "remove(uint256)", "4cc87328": "adminWithdrawMiscTokens(address,uint256)", "4cc885d4": "right65(uint256)", +"4cc90115": "mythic(uint256)", +"4cc943c0": "freeCHI(uint256)", "4cc9f4e1": "lockTokenController()", +"4cca8859": "AxiesAdopted(address,uint8,uint256,address)", +"4ccaaa18": "buyToken(uint256,uint256,address,uint256,string,uint256,uint256,address)", +"4ccabae1": "viewPubSetable()", +"4ccaec7e": "MINIMUM_BASE_INTEREST_RATE()", "4ccb5a33": "canClosePot(string)", +"4ccb8c32": "batchSettleInvestments(uint256[])", "4ccb908f": "auctionSuccessBonus()", "4ccbd06b": "MIN_DEPARTURE_LIM()", "4ccbe888": "getLongExtra()", "4ccbf17b": "presaleAddressAmountHolder()", +"4ccc10d1": "setStakeToShareRatio(uint256)", "4ccc4c36": "getPendingOracleFor(address)", "4ccc5da0": "sold(bytes32)", +"4ccc6b5f": "lockedBoxes(uint256)", "4cccb7ba": "unrestrictedWithdraw(uint128,address,uint256,uint128)", "4ccd0e1e": "Flippitt(string,string,uint8,uint256,string)", +"4ccd8331": "legendaryResultNoLongerForSale(uint256)", +"4ccdcde1": "yucanPerBlock()", +"4ccddcd1": "EscapeFundsCalled(address,uint256)", "4cce4d63": "addNewCompany(string,uint256,uint256,uint256,uint256)", +"4cce63bd": "transferRole(address)", "4ccee9b6": "getAddr(bytes32)", "4cceeccd": "setFee(uint32,address)", "4ccef7e0": "averageSoldPrice()", "4ccf05cd": "CompanyTokenPushed(address,uint256)", +"4ccf403e": "setTimeSlotSize(uint256)", "4ccf8a35": "TokenSupplied(address,uint256,uint256)", +"4ccfc4ea": "buy_energy(address,uint256)", "4cd06a5f": "iterateNext(uint256)", "4cd08d03": "register(string,string,string)", +"4cd09835": "approve_653(address,uint256)", +"4cd0cb28": "deleteProject(uint256)", +"4cd0f50d": "i(bytes32)", "4cd11943": "NewManualInvestor(address,uint256)", "4cd18a83": "gimmeEtherr()", +"4cd212eb": "zeros()", "4cd217b7": "getPreEntranceTo()", +"4cd263e4": "depositTo(address,address,address,uint256,address,address)", "4cd273d1": "tilePrice()", "4cd280bc": "popClient()", "4cd28aa6": "_queue(address,address)", "4cd2b343": "RedBlueToken()", +"4cd2c09a": "unlockAmount(uint256)", +"4cd31a2c": "issuerMap(address)", +"4cd31e73": "updateAdminSplit(uint256)", +"4cd36531": "getOneDayReward(uint256,address,address,uint256)", +"4cd365cb": "importToken(uint256,string,bytes)", "4cd36fb7": "Mine(address,uint256,uint256)", "4cd3745d": "getRandomClassId(uint256)", +"4cd3f841": "twistedSisterToken()", "4cd412d5": "transferEnabled()", +"4cd42338": "denBurnFee()", +"4cd4423d": "aboveDustOrZero(bytes32,address)", "4cd44519": "stageTokensBought(uint8)", +"4cd46f00": "strategyTokens(uint256)", +"4cd488ab": "seedAllocations(uint256,bytes32,uint256)", +"4cd4d1dc": "updateWhitelist(address,string,bool)", "4cd52207": "_claim(address,uint256,bool)", +"4cd54b7a": "distributeTransferWpc(address,address,address,bool)", +"4cd55c2d": "supportAsset(address)", "4cd5af91": "CrowdFundClosed(uint256)", +"4cd5b9d9": "payable_func()", "4cd5d776": "FundingWithdrawn(address,uint256)", +"4cd6278d": "bet20(bool,address,uint256,address,uint256)", "4cd6bd32": "withdraw(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "4cd7699a": "eventCardRangeMax()", "4cd85837": "mintICOTokens(address,uint256,uint256)", "4cd88b76": "initialize(string,string)", +"4cd925b7": "trade(address,bytes32,uint256,uint256,bytes32)", +"4cd963cf": "getNomineeAllowedTimestamp(address,uint256,uint256)", +"4cd968c8": "setPairRMPL(address,address,address)", "4cd995da": "registerCompany(address,string)", "4cd9c3e4": "crowdsaleEndsAt()", +"4cda2925": "BonusDispatch(uint256,uint256,address,uint256,uint256)", "4cdabb16": "MAX_PREMIUM()", +"4cdae843": "submitMiningSolution(string,uint256[5],uint256[5],uint256)", "4cdb48e4": "isValidNym(address)", "4cdc6a73": "Marriage()", "4cdc9549": "_isApprovedOrOwner(address,uint256)", @@ -44074,6 +80745,7 @@ "4cdd3002": "setNote(uint256,bytes32,bytes20,string,string)", "4cdd3b43": "getScoreForName(string)", "4cddae28": "recharge()", +"4cde1618": "getPublicSwapSetter()", "4cdfc605": "Refund_user()", "4ce0032f": "TutorialToken(address)", "4ce01d86": "totalBetValue()", @@ -44081,35 +80753,54 @@ "4ce053ab": "approveAndPayout(uint16)", "4ce0ef95": "getStatus(address,uint256)", "4ce11c52": "children(bytes32)", +"4ce129db": "tradeLayersxToEth(uint256)", "4ce149d7": "setCandyLandSale(address)", "4ce14f8c": "FOMOCoin()", "4ce18d6b": "getAmount(bytes)", "4ce18ec3": "addInterval(uint256,uint256,uint256,bytes32)", +"4ce1907d": "dropAdmin(address)", "4ce197f3": "GetTempStuffExpire(address,uint32)", "4ce1e317": "TeamAndAdvisorsAllocation(address,uint256)", +"4ce274a8": "electronicSignatureGraphicHash()", +"4ce2f9c8": "changeLockForever(bool)", "4ce309f8": "getElection(address,address,uint256)", "4ce37426": "EtherOlympics()", "4ce4f927": "getJackpot(uint256)", "4ce51b92": "WithdrawSpecialEth(address,uint256)", +"4ce54021": "playerSlotCountUser(uint256)", +"4ce5505f": "initAuction(address,address,uint256,uint256,uint256,address,uint256,uint256,address)", +"4ce56141": "fundsToTokensUsePrice(address,uint256,uint256)", "4ce56c5d": "ethAvailable()", +"4ce5d088": "devBreedingPercentage()", "4ce61604": "InitializedTier(uint256,address)", +"4ce619b6": "GetLastBurn()", "4ce63074": "test_increaseBlockBy5000()", "4ce6962c": "numPurchasers()", "4ce6a521": "emitAdditionalTokens()", "4ce6a74e": "testerNonReentrant()", +"4ce6e96a": "preBackers(address)", +"4ce6eff1": "limitLevel()", "4ce7033d": "LogWithdraw(address,uint256)", "4ce71fac": "getRegionPurchasePixelPrice(uint256)", +"4ce73ef0": "_updatePoints(address)", "4ce75274": "setEnableSell(bool)", +"4ce75559": "transferNFT(address,address,address,uint256,bool,bytes)", +"4ce782b1": "getTotalDividends(address)", +"4ce7c2ca": "_INSURANCE_FEE_()", "4ce99591": "Vegan()", +"4cea5ee8": "getPriceFeedLength()", "4cea7af0": "MembershipChanged(address)", "4ceab75e": "newIdTank()", "4ceab858": "multiplex_add(address)", "4ceaeb35": "PleasePayMe(uint256,uint256)", "4ceb0173": "to(bytes32,bool)", +"4ceb1f13": "setTokenBalance(address,uint256)", "4ceba015": "LogCollect(uint256)", "4cec73b1": "checkClaimTokenByAddress(address)", +"4cec7c45": "Payin(address,uint256,uint256)", "4cecac6d": "requestReward()", "4ced0a26": "SetData(string,string)", +"4ced1be7": "frogPot()", "4ced4734": "isPreSale()", "4cedf74e": "get_party1()", "4cedfc02": "TornadoChain()", @@ -44117,34 +80808,57 @@ "4cee81cb": "Marriage(address,address,string,string)", "4cef0cb9": "usdPerEthMax()", "4cef0ff6": "approveMore(address,uint256)", +"4cef1adc": "importCollateral(address[])", "4cef2221": "ZazToken()", "4cef5a5c": "negligibleRateDiff()", +"4cef6465": "holdingsAdd(uint256,uint256)", +"4cef7bcd": "airDrops(uint256)", "4cf00716": "getCreateFeeTokenFeeWindowValue()", "4cf045d5": "addSoftwareExecRecord(bytes32,bytes32,uint256,uint256)", "4cf088d9": "staking()", "4cf0afca": "changeWallet(address,uint8)", +"4cf0b574": "push(address,uint256,uint128)", +"4cf0f90a": "debaseCoefficent()", "4cf1115d": "ethFee()", "4cf125de": "Ledger()", "4cf127bf": "modelSupply()", +"4cf13dd3": "liqPenaltyE10()", "4cf178c6": "POWEROFTHREE()", +"4cf1c52b": "feth()", +"4cf1c8ef": "offChainAddreses(uint256)", "4cf2010e": "addCar(uint256)", "4cf21f5f": "CFNDToken()", +"4cf25ffe": "curryPerBlock()", "4cf2c2a2": "Dexter()", "4cf2e2dc": "GameStart()", "4cf32de3": "getNumTransactions()", "4cf33010": "purchaseShare(uint256)", "4cf373e6": "addFortune(string)", "4cf37429": "AMOCoinSale(address,address)", +"4cf3a08a": "GS_maxAgentAmountBets()", +"4cf3e784": "updateWarpControl(address)", +"4cf432a3": "rewardsToUser(address)", "4cf43440": "Megaloh()", "4cf439d8": "_addToPools(address)", "4cf4a292": "getHouseEdge()", +"4cf4f63b": "interactManager(address,bytes)", "4cf50009": "genesisCreation()", "4cf52fa2": "buyBulkPremiumCar(address,uint256[],address)", +"4cf53e7b": "changeCycleLength(uint256)", "4cf5b6c7": "millWeiRate()", +"4cf5fbf5": "depositFor(address,uint256,uint256)", +"4cf61266": "accrualDeposit(uint256,uint256[],address[],string)", "4cf61aba": "_canTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"4cf63d8f": "getTokensSupply()", "4cf6475d": "getPlayerShipCount(address)", +"4cf687cf": "decisionMakersCount()", +"4cf73094": "reassignTranche(uint256,address)", "4cf76cca": "thirdDiscountPrice()", "4cf78170": "allowedAddress()", +"4cf7cc43": "lastJadeProductionUpdate(address)", +"4cf7d8ac": "login(string,uint256)", +"4cf7e0b7": "changemin(uint256)", +"4cf7ed0a": "mintAndSendFund(uint8)", "4cf812ea": "rateRoundSeed()", "4cf8b0f5": "BlipToken(string,string)", "4cf8dce7": "balanceOfOre(address)", @@ -44152,130 +80866,250 @@ "4cf93599": "getPaidInfo(string)", "4cf95c21": "shareholderIsToken()", "4cf96509": "safeWithdrawalAll()", +"4cfa24a3": "feeExemptionAmountForUserBaseData(uint256)", +"4cfa7a49": "estimatedAPR(address)", +"4cfac95e": "approve_464(address,uint256)", +"4cfb19ed": "claimGroupIds(address,uint256)", +"4cfb222d": "contractIndex(address)", "4cfb4c28": "roundProfit(address,uint256)", +"4cfbc21c": "withdrawDaiFromCurve(uint256)", "4cfc4d30": "VESTING_DURATION()", +"4cfc7f9e": "threeBytesUTF8()", +"4cfd170b": "autoCreationAfterOwnAllowed()", +"4cfd1ba5": "buyEth()", "4cfd5a82": "phaseOneLimit()", +"4cfd793e": "networkPrefix()", +"4cfd82b4": "updateEdgexTokenContract(address)", "4cfddcfb": "getMarketOrderCategory(uint256)", "4cfe3e7f": "debitAccount(address,uint256)", "4cfe4c69": "getProviderRateHistory(uint256,uint256,uint8)", "4cfe50cb": "BAFCToken()", "4cfe59a7": "simulateWithdrawalAmount(address,address)", +"4cfe5f3e": "publicSalesSpecialUsers(address)", "4cfe62c7": "transferRole(string,address)", "4cfea68a": "blocksPerDay()", "4cfef220": "getSpankPoints(address,uint256)", +"4cff0370": "STATS_TYPE_REWARD_FEE()", "4cff5d75": "setTokenAllocator(address)", "4cff6ae5": "AltToken(address)", "4cff7a82": "createDefaultGames()", "4d003070": "timestamp(bytes32)", +"4d009288": "getNumberOfUsers()", +"4d013daa": "IMPOSS17()", "4d015fcc": "Pong()", +"4d016f35": "totalMinerCount()", +"4d020e06": "setInterestRateTimeframe(uint256)", "4d0217b7": "firstSaleComplete()", "4d023404": "removeIntermediary(address)", "4d02438b": "getMaximumBetHome()", +"4d024b68": "bettingsum()", +"4d025fdf": "participantSigns(address,address)", +"4d025fed": "keyManagerOf(uint256)", +"4d029224": "chmPerBlock()", "4d02a8fb": "judgeFakeToken(uint256)", +"4d02f1c2": "blocksInAYear()", +"4d0387fb": "totalSellableDeposits()", +"4d0392a8": "pull(uint256)", +"4d03a9a5": "offers(uint256,uint256)", +"4d03e3d2": "c1Hash()", +"4d041514": "getCompBalanceMetadataExt(address)", +"4d0445d1": "PauseRefund()", "4d047055": "monsterIdToNickname(uint256)", +"4d049d98": "salesAmount(uint256)", +"4d04ad99": "unmineForVotesOnly(uint256)", "4d053af6": "removeAds(address)", "4d056f6d": "coolDown()", "4d057803": "TEAM_LOCK_TIME()", +"4d05a0e5": "_swap(address,uint256,address,address)", "4d05a822": "JusticeTokenV2()", +"4d05df62": "halfLifeAlert()", +"4d05f46b": "gameOperators(uint256,address)", "4d06068a": "airdropToken()", "4d0633f6": "assignedAmountToCornerstoneInvestment()", +"4d073e92": "from128x128(int256)", +"4d0757eb": "tradeEtherForTokenSpecifyingFee(address,uint256,uint256,uint256,uint8)", "4d07b23d": "buyPrice(uint8)", +"4d07c709": "unsetMilestoneWithWhitelist(uint256)", +"4d086b93": "approve_632(address,uint256)", "4d08e0b4": "mediaTokensName(address)", +"4d08ed97": "addrRegisted(address)", +"4d094534": "getBigPayDay()", +"4d09c1c5": "LOCKWITHDRAW(uint256)", +"4d09deb3": "_excluded(uint256)", +"4d0a2c24": "setOnSale(uint256,bool)", "4d0a32db": "minAmount(address)", "4d0a391c": "addPayment(uint256,uint256)", "4d0a5dbd": "addPermission(address)", "4d0ad141": "CAP_USD()", +"4d0b080b": "ExternalPurchase(address,string,string,uint256,uint256,uint256)", "4d0b2a29": "NUM_TILES()", +"4d0b5ea9": "getNodeRewardTokensRT(address)", +"4d0b8263": "sendBet(uint256,uint256,uint256)", +"4d0ba3b0": "takeOutCollat_Inv(uint256)", +"4d0bd033": "team_amount_2()", "4d0c381a": "Token99(uint256,address)", "4d0c5be4": "redemptionLocked(address)", "4d0c69d9": "EnterSwap(uint256,uint256,bool,address)", "4d0cac9d": "sendCancelValue(address,uint256,bool)", +"4d0cb098": "shouldReserve(uint256,uint256)", "4d0d1cb9": "processTransfer(address,address,uint256,bytes)", "4d0d35ff": "getPlayerAddr(uint256)", "4d0d80a2": "_getRandom(uint32)", "4d0de225": "getWorkerBalance(address)", "4d0e8a5f": "MYEX()", +"4d0eb9b0": "vestingStages(address)", +"4d0f35c8": "createExtensions(string[])", +"4d0fc6f0": "settedCoreNum()", +"4d10380e": "mneSentPerDay(address,uint256)", +"4d1107a5": "TokenTimeLockContract()", +"4d12616a": "_weights(address)", "4d126774": "validateWhitelisted(address)", "4d1271e3": "VersionedToken(address)", +"4d1273cf": "returnMultiLiquidity(address[],uint256[],uint256[])", +"4d128b77": "swapExactAmountOut(address,address,uint256,address,uint256,uint256)", "4d129486": "max_shares_to_sell()", "4d129fb5": "startPre()", +"4d12a831": "tokenPriceMultiplier()", "4d12b695": "unbanUser(address)", +"4d12d4b6": "initialize(address,string,string,uint256)", +"4d12e34e": "tokensList(uint256)", +"4d12e838": "getXBuoy()", "4d12fca4": "exchanger()", "4d130369": "interestPaid(address)", "4d130e64": "_collectFee(address,address,uint256)", "4d134f2f": "createAddresses(bytes32[],address[])", "4d13507d": "releaseFund(address)", "4d1387b4": "changeRatio(uint256,uint256)", +"4d1389be": "PERCENTAGE_GROUP_1()", "4d13a583": "PrepaidTokensClaimedEvent(address,uint256,uint256,uint256)", "4d13c565": "bVideoCost()", "4d13d134": "publicAllocatingToken()", "4d140467": "EARLY_CONTRIBUTOR_VESTING_CLIFF()", +"4d141d9f": "safeNiuTransfer(address,uint256)", "4d14c57e": "claimBasicResources()", +"4d14d7fd": "_decode_uintf(uint256,bytes,uint256)", "4d14e344": "numberOfChoices()", +"4d153825": "buy_Card(uint256,string)", +"4d154d4a": "Contribution(address,uint256)", +"4d154d4b": "generateACToken(address)", +"4d155561": "mintMax()", "4d15642a": "startMEAMission(uint256,uint256,uint8,uint256)", +"4d15c75c": "funcN()", "4d15d797": "_exists(int256,int256)", "4d1636c3": "onSold(address,uint256,uint256)", +"4d166095": "continentCount()", +"4d166bf2": "setDoTxTokenAddress(address)", "4d16dd41": "communityUnvested()", "4d17ed11": "LUVIToken()", "4d17f7fc": "sta()", "4d182bfc": "getEpisodeDataRandom(uint256,uint256,uint256)", +"4d18f576": "createNewPoolForPair(address,uint256,address,uint256)", "4d1975b4": "gameCount()", "4d199766": "WEI_CAP()", +"4d199cd3": "ReconVaultAdvancePaymentStock()", "4d19cdf8": "DME()", +"4d19d366": "doPay(uint256,uint256,uint256,uint256,uint256)", "4d1a08cd": "MIN_LIMIT()", "4d1a9763": "T8CToken(address)", +"4d1aa793": "getLeftLockedTime(bytes32)", +"4d1abf7a": "limaTokenHelper()", +"4d1b3352": "transferAllTokensToOwner(address)", "4d1b93b3": "allowedTransferWallet()", "4d1bc2df": "expertThreshold()", "4d1bd1fa": "product2_luckybuyTracker()", "4d1bfe99": "BenefitGameToken()", +"4d1c39fd": "NewBuyerFundsClaim(address,address,address,uint256,uint256,uint256)", "4d1c43b2": "ETHUSDPRICE()", "4d1c5f83": "EditMode()", +"4d1d03d1": "viewSale()", +"4d1e4ec8": "NameTransferAccepted(address,string)", "4d1ed74b": "maxGuaranteedLimit()", "4d1f8c31": "owner(uint64)", "4d1f97ba": "LastResult(address,uint8,uint256)", +"4d1fe3cc": "Unfreezed(address)", +"4d1ff0a1": "TakeDown(uint256,string)", "4d1ff181": "setPaymentEnabled(bool)", +"4d201ccb": "f(address,address)", "4d207d9a": "identify(address)", "4d20b992": "setLargeCapWhitelistParticipants(address[],uint256[])", "4d20d4bc": "BET_TYPEHASH()", +"4d2121e2": "getTokenToReserveOutputPrice(address,uint256)", "4d21a24c": "generateLockId()", +"4d21dff7": "bancorEth()", +"4d21efd3": "addd(int256,int256)", +"4d22b130": "userTeamOneShares(address)", "4d22b9c8": "DMSContract()", +"4d22c521": "Winner(uint256,address,uint256,uint256,uint256)", "4d22d1d1": "vestTime()", "4d2301cc": "getEthBalance(address)", "4d238c8e": "addValidator(address)", "4d23aaa8": "foreignBuy(address,uint256,uint256)", +"4d23bfa0": "last_timestamp()", +"4d24044c": "optimal()", "4d242bbc": "adjustTotalSupplyCheckpoints()", "4d253629": "updateChangeAttemptCount(address)", +"4d253b50": "unsetAdmin(address)", "4d25cc91": "transfer_token(address,uint256)", +"4d25e1ea": "burnUniswap(uint256)", +"4d26553d": "Bignite(uint256)", +"4d266fd3": "setupKeyRequired(uint256)", "4d268ddd": "payImporterBankForGoodsBought()", "4d269617": "XENIACOIN()", +"4d26e562": "userReinvestCapitalOnCycle(uint256)", +"4d26f67a": "totalDivCollection()", "4d27a548": "rICO(address,address)", +"4d2865b3": "withdrawRewardsByProfile(address,uint32)", +"4d286a3d": "USDT_TOKEN_ADDRESS()", +"4d28a567": "changeTreasuryRewardPeriod(uint256)", "4d28ca02": "addMultipleContracts(bytes32,bytes32,bytes32,bytes32,address[],bytes32)", +"4d290d81": "pendingRefReady(string)", "4d298265": "isWhitelistedPresale(address)", +"4d298a07": "minInvestmentAmount()", "4d2a16e6": "myTradeValue()", "4d2a30c1": "customerDepositedEther()", "4d2a99a5": "GVOptionProgram(address,address,address)", +"4d2aab9a": "changeRewardAddress(address)", +"4d2ab084": "verifyCurrent(address)", +"4d2ab9dc": "MANUAL_SERVICE_FEE()", +"4d2ace66": "instances()", "4d2b1444": "WAITING_TIME()", +"4d2b1978": "addDocument(string,string)", +"4d2b5cad": "autoglyphsAddress()", +"4d2bd621": "Owe(bytes32,address,uint256)", "4d2c29a0": "tokenOfferingAddr()", +"4d2cc685": "swapUniverseToErc20(address,uint256)", "4d2d0a3d": "token_totalSupply()", "4d2d35bc": "TokenPartners(address,address,uint256)", "4d2d3dfc": "_generateHash(bytes32,uint256,address,uint256)", +"4d2d8c12": "viewSaleFETH()", +"4d2d8d41": "LogSentEthToWinner(address,address,uint256)", "4d2db81f": "alreadySold()", +"4d2e1b7f": "multisend(address[])", +"4d2e800d": "trans1()", "4d2e9d04": "ShowDepositInfo(address)", +"4d2ebea3": "batchTokenExtensionSetup(address[])", "4d2ee8e7": "GetLoanInfo(uint256,bool)", "4d2efe4e": "collectOwedDividends()", +"4d2fd81d": "getReservesRatio()", "4d305073": "uintRound(uint256,uint256)", "4d307e3f": "getCurrentReward(address)", "4d30b6be": "balanceOf(address,bytes32)", "4d314b5a": "ERC20MIST(uint256,string,string)", "4d318b0e": "tallyVotes(uint256)", +"4d326fed": "setWinAmt(uint256)", +"4d327025": "remainingSpaceInEpoch()", "4d32a117": "documentsIds(uint256)", "4d32ef8c": "hurifymint(address,uint256,uint256)", +"4d33070b": "isPoolParticipating(address)", "4d3314f4": "TotalFee()", +"4d332457": "tokenUniswapPair()", +"4d339b8f": "thisFunctionWillRevert()", "4d33e6d7": "hasDisputeSolved(uint256)", "4d341bbc": "findSubscriberIndex(address)", "4d3465fd": "weicap()", "4d34dce1": "AHS(uint256,bytes32,bytes32)", "4d358a00": "PreSale(address,address)", +"4d35fa7e": "settleEpoch(uint256)", "4d366398": "runPeerBalance()", "4d36dd87": "finalizeTransferChild(uint256)", "4d37ec46": "__generateOrderHashes__(address[4],uint256[8])", @@ -44284,11 +81118,14 @@ "4d3830e5": "releaseFunds(uint16,address,address)", "4d387d35": "lockAccount(address,address,uint256)", "4d38f6c5": "signTruelove(bytes32,string,string)", +"4d38f747": "isMarketEnabledByDmmTokenAddress(address)", "4d3915e9": "testF3(uint256)", "4d392341": "ICO_BONUS1_RATE()", "4d392e49": "getSubjectById(uint256)", "4d395384": "configString()", +"4d3997f1": "notEqualUintFailTest()", "4d399cb3": "updateWhitelist(address,uint8)", +"4d39c9e2": "disableTerms(uint256)", "4d39ed06": "initialFoundersAmount()", "4d39f535": "transferFrom(uint40)", "4d39fa7d": "getMultiplierAtTime(uint256)", @@ -44297,49 +81134,75 @@ "4d3b915e": "minTokenSale()", "4d3bdb82": "KickcityToken()", "4d3cd84e": "setCanAnyMint(bool,int256)", +"4d3ced19": "claimed_rewards_for_(address,address)", "4d3ceef1": "freezeCheck(address,uint256)", "4d3cf035": "tokens2ether(uint256)", "4d3cfbcd": "NextStep(uint8)", "4d3d096b": "isExist(string)", "4d3d14f2": "calculateTransferFee(address,address,uint256)", +"4d3e1530": "SetStakeStartTime(uint256)", +"4d3e2e5e": "tokensByRarity(uint256)", "4d3e7682": "DataSellToken()", "4d3ec092": "LogReplaceToken(address,uint256)", "4d3eff3c": "setICOSpec(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "4d3f0a6e": "becomeRenown()", +"4d3f199e": "changeRepayGasCost(uint256)", "4d3fac53": "getRatingRange(uint256,uint256,uint256)", "4d40ed9c": "setSanMaxFree(uint256)", "4d40f03c": "SovietCoin()", +"4d411f82": "approve_621(address,uint256)", "4d414c18": "Victim()", +"4d418ea0": "actUserLevel(address,uint8,uint8)", +"4d41e347": "uniswapV2Router02Addr()", +"4d41f0c7": "targetCompoundToken()", "4d41fee4": "logit()", +"4d422c27": "countSales()", "4d425812": "getCountryCount()", "4d428204": "getTransferTime()", "4d4282e9": "bytes32IsEmpty(bytes32)", +"4d42845c": "machines(uint256)", "4d42b0e5": "getUserLogin(address)", "4d42c7e4": "getTotalIndividualWeiAmount(address)", "4d42c952": "destroyedToken()", "4d42fc66": "gen0Profit()", "4d437034": "getInvestedTokenBalance(address)", "4d437a62": "TPCToken()", +"4d43a124": "getCryptoWatchETHAmountById(uint256)", "4d43bec9": "emitEvent(uint256)", "4d4439fa": "ZipperMultisigFactory(address)", "4d444fac": "isDepositAllowed()", "4d4479a8": "FLC_address()", +"4d44e663": "take(address)", "4d44f108": "checkProof(bytes32)", +"4d45097a": "inWeiAmount()", "4d4549fb": "GDCNumber1()", "4d4582a1": "submitChallenge(bytes32,bytes32)", +"4d45c3f3": "getSTBZBalance(address)", +"4d45deb6": "getPublicRgtClaimFee(uint256)", "4d461ed1": "completeSale()", "4d46474a": "option10symbol()", +"4d46d581": "submitRRSet(bytes,bytes,bytes)", "4d474898": "mine(uint256)", "4d474d63": "MAPT()", +"4d47524e": "addTwo()", "4d4765dc": "complete_buy_exchange()", "4d47ae8c": "setPartyB(address)", "4d47ce56": "seek(uint256,uint256,bool)", +"4d47e7eb": "commitBallot(address,bytes32,uint256)", "4d47feaa": "ShareholderDB(uint256)", "4d480faa": "setMaxDelay(uint256,uint256)", "4d486406": "addEmbassy(address)", +"4d487936": "changeLpProvider(address)", +"4d489323": "getAsk(uint256,address)", +"4d48ac74": "StandarTransferLogic(address,address)", +"4d48e3cd": "decayedPrice(uint256,uint256)", "4d492b50": "transferMulti(address[])", "4d493f24": "maximumTokenIssue()", "4d49451c": "candidateExchange()", +"4d4977d6": "chkOwner(address)", +"4d49c470": "autorizarEleitor(address)", +"4d49e87d": "addLiquidity(uint256[],uint256,uint256)", +"4d4a76f5": "addVersion(string,string,address)", "4d4a919f": "bailout()", "4d4aa77f": "getTicketDetails(int256,uint256,uint256,address)", "4d4af36f": "setMins(uint256,uint256)", @@ -44347,28 +81210,65 @@ "4d4b298e": "creditAccount(address)", "4d4b3202": "getTrustedTransferSourceValue()", "4d4ba1d7": "changeDivestFee(uint256)", +"4d4bb197": "PERMIT_TYPE_HASH()", "4d4c277d": "MAINTENANCE_FEE_PERCENT()", +"4d4c7d3f": "referral_percent2()", +"4d4c9d7c": "inviteView(bytes)", +"4d4cb7a2": "allowReentrantRequests()", "4d4d2b1c": "hasVoted(address,address)", +"4d4d3b99": "deposiBalance(int256)", +"4d4d4e4e": "getCollateralEquivalent(bytes32,uint256)", +"4d4ddf7d": "categorie2(address)", +"4d4e0803": "viewMatrixDetails(address,uint8)", +"4d4e352d": "disableProposal(address)", +"4d4e4df2": "cdpDSProxy()", +"4d4e8dfa": "ships(uint256)", +"4d4e9ecc": "lawPropositions(uint256)", "4d4eeaa8": "logoPng()", +"4d4f6ea9": "canTransfer(uint256)", +"4d4f7d6b": "TXCount()", +"4d4fba43": "mintToNormal(address,uint256,uint256)", +"4d4fe11a": "lockedup(address,uint256)", "4d50169e": "distributionThresholds(uint256)", +"4d502df8": "weiRate()", "4d50d5f2": "firstPreSaleEndDate2()", +"4d50e016": "initialize(uint32,int24,uint128)", +"4d50f709": "transferFeePrepaid(uint256)", +"4d510e87": "LockedAccount(address,uint256)", +"4d51c658": "rescueTokensInMultipleProposals(address,uint256[])", "4d51fad6": "Bittoq(uint256,string,uint8,string)", +"4d526b4c": "autoVaultContract()", +"4d5276af": "setPlayerWithdraw(address)", +"4d528291": "getQuestionCID(uint256)", "4d52a512": "getSoftCap()", +"4d530a49": "mintTicket(address,uint8,address,uint256)", +"4d531af3": "pendingKoala(uint256,address)", "4d536c03": "buySaleNonReferral(uint8)", "4d536f9f": "validateNameExt(bytes)", "4d536fe3": "doit()", "4d53c30f": "t4tRaised()", +"4d53dd3d": "unregisterVendor(address)", "4d547ada": "worker()", +"4d54b2d0": "rewardLockLength()", +"4d54cdb6": "getTransformerDeployer()", "4d54dc96": "isNonlistedUser(address)", +"4d557c88": "REVPOP_COMPANY_SHARE()", +"4d559317": "exchange(address[],uint256,uint256,address,bool)", "4d55a924": "KudosRouter()", "4d561721": "etherandomSetNetwork()", "4d562c82": "freezeProhibited()", "4d563540": "HUN(uint256,string,uint8,string)", "4d56a130": "BitfuryToken()", +"4d56ea47": "etherBoxes(address)", +"4d57000a": "setInsuranceFundValuePerBlock(uint256)", +"4d573dd9": "isDABAdmin()", "4d586512": "_rand(uint256,uint256)", "4d589c5b": "curatorIDOf(address)", +"4d58b6e5": "approve_860(address,uint256)", "4d58e413": "pushDividendPaymentToAddresses(uint256,address[])", "4d597b2d": "totalTokensCompany()", +"4d599434": "stor3()", +"4d59f626": "isBlockSettled(uint64,uint64)", "4d5a1173": "calculateMaximumBurnAmount(uint256,uint256,uint256)", "4d5a225c": "ethCoin()", "4d5ad11e": "getAnnualGrantsLength()", @@ -44377,89 +81277,171 @@ "4d5b335d": "mintHeroAsset(address,uint256)", "4d5b608b": "testTransfer(address)", "4d5b85f1": "createLighthouse(uint256,uint256,string)", +"4d5b9595": "get_game_asset_owner(string)", "4d5c07aa": "CryptoSim()", +"4d5ca52f": "_getPermission(bytes32,address)", +"4d5cd98e": "changeLvlCap(uint8)", +"4d5cff35": "oracleCallbackAddr()", +"4d5d2c11": "isGap()", "4d5d528a": "FeibeiContract()", +"4d5d883b": "pendingCreed(uint256,address)", +"4d5dacd2": "getBetters(uint256)", +"4d5db855": "packNftAddress()", "4d5de6ba": "stageThreeSupply()", +"4d5e2d27": "TokenTimelockReleased(address,uint256)", "4d5e58a4": "purchasedTokensRaised()", "4d5e9a2a": "getInterestRatePunitory(uint256)", +"4d5ec747": "notifyAirdropAmount(uint256)", "4d5eceac": "nextAssigneeIndex()", +"4d5edd28": "userRanks(address)", +"4d5f02ad": "setIssuer2(address)", "4d5f327c": "supportsToken()", +"4d5f811e": "min_deposit()", +"4d5f9d11": "tokenFromGCB(uint256)", +"4d5fa3ff": "changeBZBBFIPair(address)", +"4d5fade8": "getFinalPriceWithoutFee(address,address)", "4d5fc38a": "amountOfGames()", +"4d607fb2": "calculateWithdrawFee()", "4d610837": "indPreSale()", "4d61537f": "secretSigner()", +"4d615d23": "_active()", +"4d618dde": "getZAddresses()", +"4d61b488": "LogDebtOrderFilled(bytes32,uint256,address,address,uint256,address,uint256)", "4d620299": "postSale(address,bytes32,uint256)", "4d622831": "getLast()", "4d624906": "PriceChanged(address,uint256,uint256)", "4d628c44": "setWagerWinner(uint256,address)", "4d62a9da": "MindCoin()", +"4d62be0b": "removeLiquidityFromPoolsWithPermit(address,address,uint256,address,uint256,bool,uint8,bytes32,bytes32)", "4d62f83c": "_distributeAuctionTax(uint256,address)", +"4d6352e5": "stickyRef(address)", +"4d647179": "swapTokenToEther(address,uint256,uint256,uint256)", +"4d6542a9": "NJhuvyIOnjKJBiyvuNVgc(uint256)", "4d655aff": "db()", +"4d657df1": "approvalRate()", +"4d65ae27": "withdrawEtheralTestToken()", "4d65beb1": "getVipInfo(uint256)", +"4d6615fa": "MasterAddressAdded(address)", +"4d6694a6": "claimTimeStamp()", "4d66a3ab": "testtxorigin()", "4d66d44d": "ArtToujourICO(uint256,uint256,uint256,uint256,uint256,address)", "4d677d32": "Manager(address,address,address)", "4d6804c2": "transferTokensFromVault(address,address,uint256)", "4d68282f": "releaseFunds(uint256)", +"4d683674": "referralReward()", +"4d6861a6": "isOpen(uint256)", +"4d68694a": "AirTrafficControllerROS(address,address)", +"4d687ff6": "setY0(address)", "4d689543": "mmLibAddress()", +"4d692db4": "RePaymentTicket()", +"4d69a6fc": "mintAndProvideLiquidity(address,address,uint48,uint256,address,uint256,address,uint256,bool)", +"4d6a0601": "getOpenCalls()", "4d6a26be": "tryOpenRoom(address,uint256,uint256,uint256)", "4d6a304c": "GetLatestCheckpoint()", "4d6a7d33": "collect(address,uint32[])", "4d6a813a": "isCutieCore()", "4d6aa2e5": "generateReferralAddress(address)", +"4d6ac6a1": "Holdplatform(address,uint256)", "4d6aed53": "getIssued()", "4d6b3d83": "Brave()", +"4d6b4499": "invitedBy(uint32)", +"4d6bb53b": "cfnxToken()", "4d6bc04e": "totalPerTokenPayout()", "4d6c3427": "REGULAR_TYPE_COUNT()", "4d6c3b6b": "setCompte_4(string)", +"4d6ce1e5": "Deposit(uint256)", +"4d6d1991": "removeDeposit(uint256)", +"4d6daf04": "BUILD_RATIO()", +"4d6e5ac9": "Lock(address[],uint256[])", +"4d6e7923": "setMigrator(address,bool)", "4d6f49b3": "updateChainlinkOracleWithENS()", "4d6f58d5": "proveOwnership(bytes,int256)", "4d70d1d7": "generateId(uint256)", "4d712228": "Storesumdata(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint64)", +"4d715a81": "multiSignForDepositTRC721(address,address,uint256,uint256)", +"4d71d534": "holdStake(uint256)", "4d71d6be": "finalizeDelegation()", "4d720209": "withdrawDistributionCRL()", "4d722c4c": "checkWinner(address)", +"4d726fed": "whitelistMultipleUsers(address[])", +"4d727424": "Set_Reward_Rate_Threshold(uint256,uint256)", "4d729be4": "calculateFishermansFee()", +"4d72ab38": "disableWithdrawRefund()", "4d730d51": "numOfPurchasedTokensOnEpBy(address)", "4d73452e": "START_WEEK_3()", +"4d73dd6d": "setDenyToken(address,bool)", +"4d73e9ba": "borrowBalance(address)", +"4d73f428": "renunceOnwership()", "4d7439cb": "getBusiness(uint256)", "4d7480ea": "_allowPublishSecret()", +"4d749e43": "proofOfPerformance(uint256)", "4d74d3b4": "setMetadataContractAddress(address)", +"4d752ec3": "bind(address,uint256,uint256,uint256,uint256)", "4d754715": "burningEnabled()", "4d7559a8": "totalGoldSupply()", "4d7569ac": "TOKEN_SUPPLY_CROWD()", +"4d757df6": "liveliness()", +"4d75a431": "transferReceipt(address,address,address,uint256,uint256,uint256,bytes)", +"4d76a106": "addressToLockupExpiry(address)", "4d77551a": "eleventhTime()", +"4d781ca0": "EthBonusSet(uint256)", "4d782655": "confirmCertificate(uint256)", "4d782cbc": "executeSellOrder()", +"4d78b460": "updateRef(address)", "4d78fdc6": "unblockAccount(address)", "4d794cfc": "START_ETH_TO_CENTS()", +"4d795e55": "mintWithChai(address,uint256)", +"4d798717": "floorContracts(uint32)", "4d79874e": "validateLandTakeover(address,uint256,uint256)", +"4d79af57": "setInterestRateInterface(address)", "4d79ddb2": "getVotesForItemFromVoterIndex(uint256,uint256,uint256)", "4d7a2052": "getTicketPrizeFromIndex(uint256)", +"4d7a3673": "spawnValue(bytes32,string,uint8)", "4d7a7577": "DURATION_VIPPLACEMENT()", +"4d7ab633": "calcExchangeUnit(address)", +"4d7abafb": "makerProfit(uint256)", "4d7ad1dd": "deleteProposal(bytes32,string)", "4d7ad205": "gasRewardPercent()", "4d7b8d2f": "DWBTICO(address,address,uint256,uint256,uint256,uint256)", +"4d7b8fa8": "approve_607(address,uint256)", "4d7b9bd5": "checkBalance(address,uint256)", "4d7ba587": "setDecider(address)", "4d7bc8c9": "removeCompanion(address)", "4d7c0192": "changeCanUpgrade(bool)", +"4d7c2d64": "OnPause()", "4d7c7485": "getActiveFlag(uint16)", +"4d7ca375": "uint256_to_string(uint256)", "4d7d003f": "dropCoinsSingle(address[],uint256)", +"4d7d052c": "_author(uint256)", "4d7d13e1": "getUniqueIdOfPlayerByPlayerAndCountryID(uint256)", +"4d7d1c42": "isPlatformAuthorized(uint256)", "4d7d87b2": "prodTokens(address,uint256)", "4d7d8a60": "marriageDate()", "4d7d9a91": "transferCoadminship(address)", "4d7dcfbd": "parseVarInt(bytes,uint256)", +"4d7de20c": "buyOrderFirst()", "4d7e2a6a": "Token_Unlocked()", "4d7e897f": "rollOne(address,uint8)", "4d7ec628": "requestToken()", "4d7ece70": "advisorVesting(address[],uint256[])", "4d7edc15": "assignTokens(address,uint256)", "4d7ee4ee": "changeGlobalOperator(address)", +"4d7efed7": "pendingLPGov()", +"4d7f3c3b": "getDateAndReleaseToCounter(uint256,uint256)", +"4d7f3db0": "beforeTokenMint(address,uint256,address,address)", +"4d7f917f": "ClaimTokens(address,uint256)", +"4d7fcebc": "sellpercent()", "4d804e60": "WITHDRAWAL_TRIGGER_AMOUNT()", "4d80bf14": "NewManager()", +"4d80efae": "isSignatureUsed(bytes32)", +"4d810db9": "commitProposal(uint256,bytes32,bytes)", +"4d817715": "eventEndTimestamp()", +"4d81838c": "harvestAt(address)", +"4d81fddd": "updateInflationEnabled(bool)", +"4d82d262": "referralCredits(address)", "4d82f25c": "VestingTrustee(address)", "4d831535": "allocatePVT_InvTokens(address[],uint256[])", +"4d83c843": "monthlyRewards(address)", "4d83ffdd": "createUser(address,uint256,bytes32)", "4d840bcc": "isWithdrawable()", "4d843acd": "getSalaryTokensTotalAddress(uint256)", @@ -44467,225 +81449,390 @@ "4d846c8e": "getCurrentCandyAmount()", "4d84ba37": "depositsAddress()", "4d85006d": "Incredibles2RT()", +"4d853dbe": "militaryBase()", "4d853ee5": "founder()", "4d8589c5": "getProofOfStakeRewardUpdateToken(address,address)", "4d85b8d0": "checkEndOfChallenge()", +"4d85bd9f": "removeStakedTokenReward(uint256)", +"4d85fbb9": "burn_rate()", +"4d861ece": "reserveFlashAmount()", "4d86b498": "BucoTestCoin()", "4d87a49b": "updateInvVault(uint256,uint256)", "4d882c97": "EthPenis()", "4d88a639": "getOrder(uint80)", "4d88a8cf": "getExitBySlotId(uint64)", "4d894d24": "getLevelByIndex(uint256)", +"4d896812": "getDebtTopupInfo(address,address)", +"4d89a08a": "authBalanceOfUBIBeneficiary(bytes32)", +"4d8a2bc5": "getPoolValue(address)", +"4d8a5a57": "emojiIndexToApproved(uint256)", "4d8a666b": "EnterEntidadesdonaciones(address)", "4d8a9310": "isCrowdsaleStopped()", +"4d8ab6aa": "notary(uint256,uint256,uint256,address[],uint32[],address[],uint64[],uint64,uint8[],bytes32[],bytes32[])", "4d8b7056": "Dd(address,address)", "4d8bd784": "getGuestToken()", "4d8c10a6": "AJCMToken()", "4d8c3ea6": "getTxVoteDetails(bytes32)", "4d8c61c1": "LogChangeTimestamp(address,uint256,uint256)", +"4d8c999b": "seasonalStart()", "4d8caa7e": "setTokensPerWei(uint256)", +"4d8cc21e": "defaultUserId()", "4d8d9e92": "tokensPerSecond()", "4d8dcc7a": "initDeposit(uint256)", "4d8de4fc": "unbond(bytes32,uint256)", "4d8e15f2": "KockToken()", +"4d8e3d3b": "addSupportedToken(address,uint256)", +"4d8e5037": "refreshCompSpeeds()", +"4d8e64ee": "setSystemContracts(address,address)", +"4d8e9270": "stateOf(address,address)", +"4d8ea0de": "LK3R()", "4d8f00f4": "RatingsContract(address,address)", +"4d8f2e2f": "decimalConst()", +"4d8f5105": "kyberDao()", +"4d8f59f0": "totalRetired()", +"4d8fe4a9": "third_num(address)", "4d8fef1c": "produceWiner()", "4d908a55": "InitiateCars()", "4d909110": "EtherBank()", +"4d9112d7": "updateDistance(uint8)", "4d912393": "mintReservation(address[],uint256[])", +"4d91605f": "weiPaid(address)", "4d918282": "addmoney(address,uint256,uint256)", "4d91c096": "stakeCommence()", "4d91d4f1": "incrementBasketsMinted(uint256,address)", +"4d91d7d9": "init(address,address,string,string)", +"4d923532": "setTokensSettings(address[],address[],bool[])", "4d9250c4": "TakeMyEther()", +"4d925ea3": "isKycWhitelist(address)", +"4d932e7a": "newPools()", +"4d93667e": "getManagerAddr(uint8)", "4d936889": "ConsentTemplate(string,uint256,string,string,string)", +"4d93978e": "pasta()", "4d93d1db": "EventCreateAngel(address,uint64)", +"4d9431ea": "init(address,uint8)", +"4d944478": "giveApproval(address,uint256,uint8)", +"4d948fea": "multisendErcWNT(address[])", "4d94994c": "lucky_number()", "4d94cee7": "opetWallet()", +"4d94ece5": "_setPolicyAddress(address)", +"4d950c74": "joinPoolFor(address,uint256,uint256[])", "4d9577af": "getFirstMilestoneStartsAt()", "4d95a7a2": "tokensToRecieve(uint256)", "4d95c76c": "activeCanvasCount()", "4d964da6": "GBBCOIN(uint256,string,string)", +"4d96b7b2": "dislikesHistory(address,uint256)", "4d96e062": "whenStakeCanBeReturned()", +"4d978258": "updateVariableDebtToken(address,address)", +"4d97ddbc": "swaporder()", "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)", +"4d9a807e": "PollCreated(address,uint256,uint256,uint256,uint256,string,string)", "4d9a81d4": "IsDistribStarted()", "4d9aa424": "crowdsaleEnd()", "4d9b3735": "getFunds()", "4d9b3d5d": "getbalance()", "4d9b8fcf": "allowTransfer(address,bool)", "4d9bcac4": "getProviderParameter(address,bytes32)", +"4d9bd4ac": "lottery_loop()", "4d9c1bf3": "payTokenBatch(bytes32[],uint256[],address,address,bytes)", +"4d9c80d5": "setUniSwapReciever(address,bool)", +"4d9c9647": "addLiquidityToUniswapSPOONxWETHPair()", "4d9e40af": "TOKEN_CREATORS_SUPPLY()", "4d9e4e22": "Etheria()", +"4d9f3832": "INVESTMENT_RATIO_DEVELOPER()", +"4d9f3ad7": "buyAssetIntroducerSlot(uint256,uint256,uint8)", +"4d9f7bb2": "buyBackRateMax()", "4d9fb121": "Trade()", +"4d9fb18f": "AAVE_IMPORT()", "4d9fcee9": "getExportingAuthority()", +"4da00b73": "ASSIGNED_REWARD_AMOUNT()", "4da07fe5": "getCardType(uint32)", +"4da08d73": "collectBalTokens(address)", "4da0a4fc": "promoToken()", +"4da0e8f8": "buyoutMulti(uint256[])", "4da1397c": "durationOfLock()", +"4da16433": "setPerParam(uint256,bool)", "4da1668d": "giftNFT(address,uint256,uint256)", "4da1b25d": "weiFundingCap()", "4da1e0b7": "cancelTokenSale(uint256,address,bool)", +"4da1e655": "SetUniSwapFactoryRouter(address)", "4da2317f": "payoutAll()", "4da25c74": "triCmp(uint256,uint256)", "4da2906b": "updateUser(bytes32,bytes32,bytes32,bytes32,bytes32)", "4da2b48e": "getCat(uint256)", "4da36913": "migrationIndex()", "4da3b6db": "otherF3D_()", +"4da43237": "clearSTA()", "4da47ba0": "TokenSale(address,uint256)", "4da51208": "OKMcoin(uint256,string,uint8,string)", "4da5160f": "getFirstDocumentIdStartingAtValidFrom(uint256)", "4da5598a": "syndicatePrecision()", +"4da56365": "checkWhiteListed(address)", "4da5d4c0": "isEthernautsExplore()", "4da5ed85": "disableContinuousDelivery()", +"4da6a556": "getStakedAmount(address)", "4da74ee6": "setVoteIntention(uint256,bool,bool,string)", "4da7c5d6": "LendingBlockTokenEvent(address)", +"4da82eb8": "withdrawLockedLPAfter1Year(address,uint256)", "4da837e3": "transferDevelopment(address)", +"4da8452a": "isObsolete(string)", "4da845b3": "swapWinner()", "4da86598": "getFileMd5(uint256)", "4da8a771": "INHERITANCECrowdsale(uint256,uint256,uint256)", "4da946d9": "TakeOffWorldwide()", "4da9cb07": "LilithToken(uint256,string,string,uint8)", "4daa1208": "SetPoolCreationFee(uint256)", +"4daa6e35": "add(uint256,bool,bool)", "4daaa98f": "doReward()", "4daade18": "TravelCoinToken()", +"4daadf12": "setPMMStatus(bool)", "4daadff9": "extractCLNfromMarketMaker()", +"4dab0431": "checkCrownFundingAmount(uint256)", "4dab54fd": "removeFromInxWhitelist(address)", "4dab63ff": "_unpackItemData(uint256)", +"4dab68b3": "setStrategyWeights(address[],uint256[])", "4dabb674": "changePhaseToNormalLife()", "4dac7d6f": "renewableOf(uint256)", +"4dac873b": "checkEther()", +"4dac985e": "daiFees()", "4dad66f5": "divForTank()", "4dad9003": "transferManyLand(int256[],int256[],address)", "4dadac8f": "STAKING_UNIT()", +"4dade834": "validateTransferERC20(address,address,uint256)", +"4dae755c": "tokenMinAmount(address)", "4daea42a": "TOWN_INCREASE_RATE()", +"4daf02b9": "getTikerDataById(string)", +"4daf1bb5": "addApprovers(address,uint256,uint256,address[])", +"4daf38df": "_getCacheDetails()", "4daf490c": "getFarm()", "4daf890a": "invokeLottery()", +"4dafd490": "medicineCount()", "4dafdc50": "exchangeId()", +"4daff8a3": "changeTWAPEpochPeriod(uint256)", "4db0040e": "createWonderNotAuction(string)", +"4db0412c": "getCategories()", "4db08aea": "SALE()", "4db08e5b": "getSaleContractTokensMinted(address)", +"4db12944": "nextWeightBlockDelay()", +"4db14b16": "user_amount()", +"4db17dd5": "ContractCreation(address)", "4db19e7e": "assertEq(bool,bool,string)", "4db1ba5a": "repossessionBountyPerTen()", "4db1c7b2": "changeId(uint256,uint256)", "4db208ba": "Titanization()", +"4db2180b": "checkLoss()", +"4db248f8": "clip(int256)", "4db2beef": "distroyToken(uint256)", "4db347a3": "acceptChallenge(address)", +"4db37249": "authOf(address)", +"4db3c2df": "kashvir()", "4db3c6d7": "buyTokensWithReferal(address)", "4db3da83": "scheduleCall(bytes4)", "4db3eef8": "delegateFromBonus(uint88)", +"4db47840": "guardian_set_expirity()", "4db4eae6": "_topBonus()", "4db4eff0": "hatchCoins(address)", +"4db4fee8": "sendDcx(address,uint256,uint8)", "4db52924": "setNumMessagesSigned(bytes32,uint256)", "4db53a70": "VTest()", "4db59565": "getHistoryRoundInfo(uint256)", +"4db5963b": "neuPoolfahrt(uint256,uint256,uint256,uint256)", "4db5d52b": "getWagerOwner(address)", "4db61d21": "compareNoCase(string,string)", +"4db6279f": "RandomValueCalculated(uint256,uint256)", "4db6397f": "calculatePlayerValue(address)", +"4db67caf": "tokenIsBanned(address)", +"4db686fe": "_getPiePercentage(address,uint256)", +"4db6f0a2": "gasView(address)", +"4db7764c": "baseShortRate()", "4db77d9d": "getMaxJump(uint256)", +"4db7baa3": "projectsAccts(uint256)", "4db8349e": "buyerToSentWeiOf(address)", "4db8cbc9": "wordCounter()", +"4db8f974": "GRAND_RATE()", "4db94441": "limitAgentBets()", "4db9bfe6": "getPostVoteCount(uint256)", "4dbaa16b": "recoverLeftoversPreICO()", "4dbac733": "INITIAL_RATE()", "4dbb1964": "setSalesAgent(address)", "4dbb37eb": "checkLeftToken()", +"4dbb4490": "PurchaseEvent(uint256,address,uint256,uint256)", "4dbb4da5": "increaseMaxContribTime()", "4dbb51f6": "Hashfex()", +"4dbba428": "myTotalReferralEarnings()", +"4dbbb6bc": "getuserPresaleTotalBuy(address)", +"4dbbd626": "Payed(address,address,address,uint256,bytes,bytes)", "4dbbddff": "BOBTokenVesting(address,uint256,uint256,uint256,bool)", "4dbbfcc6": "stageLength()", +"4dbbfd89": "setFeesContractAddress(address)", "4dbc355a": "releaseTeam()", +"4dbc7f5c": "turboStartTime()", +"4dbd1669": "testCall6()", +"4dbd19cd": "cycleUnstakeStatusOf(address,uint256)", +"4dbd6596": "cashOut(address,uint256,uint256,uint8,bytes32,bytes32)", +"4dbd71eb": "MINER_8_HOURS()", "4dbdb0fd": "signUpForPVP(uint256)", "4dbddc18": "getPoolID()", +"4dbdf81f": "UserLink(address)", "4dbe5889": "ownerClaim()", +"4dbf0f39": "getReservesByPairs(address[])", "4dbf27cc": "follow(address)", +"4dbf6c5a": "tokenBalances(address,address)", +"4dbf85ca": "lpUpdate(address)", "4dbfb6fb": "PredictionMarket(uint256)", +"4dbff840": "whiteListAdder(address)", "4dc0884f": "playerCards(uint256)", "4dc08ce2": "GameWon(uint256,address)", +"4dc09c0d": "getAllOwnerSymbolsDetailsAndSTData(address)", +"4dc0c0fb": "preSaleAllocations()", +"4dc0d7c7": "handleDepositEnd(address,uint256)", "4dc133a5": "stopTge(bool)", "4dc13951": "vendingAttachedState()", +"4dc14fa1": "sitInPoker()", "4dc189ef": "createContractWhale(string)", "4dc18c02": "finalSendTokens()", "4dc1dbec": "priceToMint()", +"4dc2007d": "Lose(address,uint256,uint256,bool,uint256)", +"4dc221f7": "markProposalAsInvalid(bytes32)", +"4dc244ed": "percentsRemaining()", "4dc266b4": "submitAnswerReveal(bytes32,bytes32,uint256,uint256)", "4dc2c67a": "veriPass(string)", +"4dc2d492": "getMultisigOwner(uint256)", "4dc3141b": "CalcAll()", +"4dc37f1b": "getBlockFCDone(uint256,bytes32)", "4dc3ba8f": "assignVoterMoreVotes(address,uint256)", "4dc3f289": "changeCommonDiscount(uint256)", "4dc41210": "preStartTime()", "4dc415de": "reject()", "4dc43eaf": "setTreasury(uint256,uint256)", +"4dc4694a": "initialSupplyFinishState()", +"4dc47d34": "epochRewards(uint256)", "4dc49b25": "InitialPointUnit()", +"4dc4b8d7": "onlyControllerOrGovernance()", +"4dc5057b": "setDivIntervalDays(uint256)", "4dc59196": "icoAllocation()", +"4dc5be41": "changeGameFeePercent(uint256)", "4dc5c69f": "getTotalDiscount(address)", "4dc5c771": "dividendsAccount()", "4dc5fa4e": "MEDIA_SUPPORT_WALLET()", +"4dc61a21": "getGWTB_USDT(uint256)", "4dc65411": "GEM()", "4dc666b3": "sendTokensManually(address,uint256,uint256)", "4dc6b523": "divestFee()", +"4dc6fb2b": "setTotalToBeMintAmount(uint256)", +"4dc6ff7c": "_toLiquidity_rate()", +"4dc70bac": "CALC_PRECISION()", "4dc73428": "transferFromByModule(address,address,uint256,bool)", "4dc7cc55": "terminateAlt()", "4dc7d31b": "transferRwrd(uint256)", +"4dc80e15": "tokensClaimable(address)", "4dc8ed02": "ICObonusStages(uint256)", "4dc936c0": "mintItem(uint256,address)", "4dc958e1": "addToBounty(uint256)", +"4dc95b85": "onBuyAndDistribute(address,bytes32,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"4dc95de1": "rebasingActive()", "4dc996d5": "updatetoken(string,string,string,string)", +"4dca0978": "setAddressValue(bytes32,bytes32,address)", +"4dca0bf7": "user_blocks_before_claim(uint256,address)", "4dca2770": "BecomeMemberCandidate(bytes32)", "4dcad927": "tokensSoldTotal()", +"4dcae947": "userAddressByID(uint256)", "4dcb05f9": "depositBond(uint256)", +"4dcb6194": "receiveInvest(address,uint256,bool)", "4dcbb8ee": "getAllAuditors()", +"4dcbbc5c": "lastRequestLastHashId()", +"4dcbc44c": "withdraw7()", +"4dcbc739": "lockNft(uint256)", +"4dcbe184": "StatusChanged(bool)", +"4dcc0134": "Bid(address,uint256,uint256,uint256)", "4dcc889d": "Conference(string,uint256,uint256,uint256,string)", +"4dcce38c": "STAR_FEE(uint256)", +"4dcd12a8": "addLiquidityToUniswapENCORExWETHPair()", +"4dcd1318": "isOven(address)", "4dcd4fb1": "MetaChanged(bytes32,bytes32,bytes32)", "4dcd85d8": "setPriceOfApis(uint256)", +"4dcd8b88": "uFFYI()", +"4dce0b4b": "withdrawBatch(address[],uint8[],uint256[])", "4dce4142": "opVaultAddr()", +"4dce7057": "startRebalance()", "4dcee2e0": "hashes(uint16)", +"4dcef16f": "registerIPO(address,bool,uint256,bytes32)", +"4dcf1ce0": "allOwners(address)", "4dcf2917": "allowUpgrades()", "4dcf7430": "receiveTokenLoot(uint256[],uint256,uint8,bytes32,bytes32)", +"4dd09f33": "approvalProxy()", "4dd0f157": "getWinnerType(uint256)", "4dd12329": "rightSharePrice()", +"4dd18bf5": "setPendingAdmin(address)", "4dd19434": "getLeaf2(uint256)", "4dd1e81c": "tokenBuyable(uint256,uint256)", +"4dd1f78e": "ForThreshold()", +"4dd2fc48": "setDoomMultiplier(uint256)", "4dd33832": "tokensSoldAtIco()", "4dd36a0e": "buyTokens(uint8,address)", "4dd37f19": "getHashRateOfCurrentHalving(address)", "4dd3e575": "endMinting(bool)", +"4dd448bf": "entityStructs(address)", "4dd4547d": "fireOnChanged(bytes32,uint256[])", "4dd49680": "SetEvaluate(uint32,uint8,uint8)", "4dd49ab4": "get(bytes,uint256)", "4dd49e08": "deliverTokens(address,uint256)", +"4dd5378f": "beamOrbiterTokens(address,uint256,uint256,address,string)", +"4dd5a973": "withdrawFromCycle(uint256,address)", "4dd5df8c": "setPOOL_edit_16(string)", "4dd60ff9": "buyNDC(uint256,uint256,uint8,bytes32,bytes32)", +"4dd6c25c": "athleteCount()", +"4dd6c8de": "claimed(address,uint256)", "4dd7f293": "Kayako()", "4dd83243": "hasNextKey(uint256)", "4dd83cb1": "refreshPublicFundingTime(uint256,uint256)", "4dd850fb": "UfoPonzi()", +"4dd85b5e": "mapEraPool_Balance(uint256,address)", "4dd8aefd": "DTT()", +"4dd9087f": "setNewDao(address)", "4dd93bd3": "getInvestmentValue()", +"4dd9ac75": "playerETHWon(address)", "4dd9e437": "transferUserToUser(address,address,address,uint256)", "4dda1764": "CafeMaker()", "4dda71a8": "newAuction(uint128,uint256,uint256)", +"4dda9927": "settlementGame()", "4ddad616": "genesMarket()", +"4ddaf8f2": "migrateTo(address)", +"4ddb2c35": "balanceOfDenominatedInDai(address)", "4ddb5f01": "ROPCOIN()", "4ddbf2b3": "teamTokenFund()", +"4ddc1bee": "minimumRentalPrice()", "4ddc36df": "renounceClearingPriceValidator()", +"4ddc4098": "pendingAbz(uint256,address)", "4ddc8f74": "SPEX()", +"4ddd093a": "findCandIndex(string)", "4ddd108a": "money()", +"4ddd19c3": "airdropSupplyAddress()", "4ddd648b": "buyer_profit_pool_amount()", +"4ddda4c9": "PaymentTransferredToPreviousOwner(uint256,uint256,uint256,address,address,string)", "4ddddd4c": "SearchIPR(string)", "4dde3fe1": "redemptionAddress()", +"4dde8031": "topup(address,address,uint256,bool)", "4dde88ad": "getGroupMembers(uint256,uint256,uint256)", "4dde8de6": "registerUBetCheck(address,string,string,string,uint256,string,int256)", +"4ddeeb82": "TriggerNextEpochAndRewards()", +"4ddf47d4": "init(bytes)", "4ddf6795": "getVoteRulesOfProposal(uint256)", +"4ddfce95": "OnAddYearToken(uint256,uint256,uint256,uint256,uint256)", "4ddfd20f": "offer_id()", +"4de006cb": "convertForPrioritized4(address[],uint256,uint256,address,uint256[],address,uint256)", "4de0089a": "becomeHipstermaster()", "4de037c7": "getTitulaire_Compte_8()", "4de0cdf2": "setICOParams(uint256,uint256,uint256)", "4de1454f": "targetReached(uint256)", "4de16053": "getLockProductCount()", "4de162e4": "extractAccountLength()", +"4de17040": "updatePowerNLuck(uint256)", +"4de1a1b9": "distributionStopBlock()", "4de1fc55": "submitAnswer(uint256[],uint256[])", "4de2578c": "reproduce(uint8,address,uint256)", "4de260a2": "hack()", @@ -44693,71 +81840,142 @@ "4de2d5d5": "checkPrize()", "4de2eee9": "zapVillain(uint256,uint256)", "4de2f146": "SentAmountToNeighbours(uint256,address)", +"4de30ac3": "updateMainSaleTime(uint256)", "4de315ea": "unlockAddressToken(address)", "4de4145f": "_transferSenderPaysFee_byProxy(address,address,uint256)", +"4de44e44": "U_userstatus(address,address)", +"4de456fb": "TransferToUserWithdrawalAccount(address,address,uint256,address,address,uint256)", +"4de4c952": "reinvestReferrals(bytes32,address)", +"4de4cf92": "fraction(uint112,uint112)", +"4de4eeff": "lastSyncTaskID()", +"4de4f10f": "REI10()", "4de4f479": "RiskPrice()", "4de504cd": "setTransferLockFree()", +"4de50a3a": "baseCallScript()", "4de5120e": "lastWithdrawalTime(address)", +"4de5ba6a": "daysPastMinFreezeTime(address)", "4de62cd6": "removeGemmyMusicLock(address)", +"4de6a405": "currentGiftAmount()", +"4de6c036": "epochsToClaimRewardFrom(address,address)", +"4de6e5df": "blockFinish()", "4de799c2": "cancelTeamWithdrawal()", +"4de7c7bd": "positionValue(address)", +"4de7e38d": "updateAccountLocation(address,address)", "4de85639": "failDivideFractionalByZero()", +"4de8737c": "vote(uint256,address,uint256)", "4de8a799": "addPrivateSaleBuyer(address,uint256)", +"4de8cff6": "setNegativeRebase()", "4de90f34": "minForNewTopic()", "4de94320": "logic_contract()", "4de946bf": "ideaProofDocument(bytes,uint256)", "4de952c7": "cmulpow2(address,uint256)", +"4de970c8": "yieldPerMonth(uint8)", "4de970fd": "RATE4()", "4de9e482": "ENDHarvest()", +"4de9e6a8": "getTokenTrackingStepById(uint256)", "4dea208b": "upgradeKingdomType(string,uint256)", "4dea4d15": "setConfig(uint64,string,uint256,uint256,address,string)", "4deaad5f": "reverseBytes(uint256)", +"4deb077b": "FundsWalletUpdated(address)", "4deb68a3": "auctionStart(bytes32,uint256,uint256)", +"4deb7826": "BONUS_MULTIPLIER_2()", "4deb9f47": "UnlockRig(uint8)", "4deba2e0": "LogCreateToken(address,uint256)", "4dec1014": "stageFokenCap(uint16)", +"4dec3f75": "requestLoss()", +"4dec4059": "isPrimaryOwner(address)", "4dec5dc4": "employeeExerciseOptions(bool)", "4dec9b57": "testView()", +"4ded0480": "g16(bytes16)", "4ded452e": "InviteCreated(address)", +"4ded5fb8": "Showwethaddress()", "4ded6e89": "airdropParticipants()", "4ded9bfe": "releaseMultiAccounts(address[])", +"4dede3de": "WBTC()", +"4dedf9aa": "JLASTIMPLIED()", +"4dee0431": "getShipStats(uint256)", +"4dee4498": "STATE_SYNCER_ROLE()", "4dee529a": "Muggelo()", +"4dee73c8": "lon()", +"4dee7533": "addrOfNNRewardPool()", "4def0453": "setContentURI(uint256,string)", +"4def5645": "totalVote(address)", "4defd1bf": "setCrowdsaleManager(address)", +"4defd349": "withdrawCommunityTwoTokens(address,uint256)", +"4defedc6": "multisendErc20DEFIX(address[])", "4df0b78a": "withdrewThisYear()", "4df0ca7e": "EarlyAdoptersAddress()", +"4df1249f": "file(address,address,address,bytes32,bytes32,uint256)", +"4df14341": "setTokenDebtLimit(address,uint256)", "4df17cdc": "maxEtherInvestment()", +"4df260d7": "isWalker(address)", "4df28ae4": "capTime()", "4df34124": "RyxEx(address,address,address,uint256,uint256,uint256)", "4df3ad68": "setTokenPriceInCent(uint256)", +"4df4818f": "buyRisk(uint256)", "4df498b2": "getPreSaleEnd()", +"4df4a87a": "mintInvestorToken(address,uint256)", "4df53a0f": "testSetApprovalDb()", +"4df53c5d": "ActiveLoanUpdatedByVolAddressToCompletion(uint256)", +"4df5df27": "_getHashToSign(address,address,uint256,uint256,uint256,bytes)", "4df62441": "percentOfPresaleSold()", +"4df645c9": "memoryArrays()", "4df65873": "getDefaultRgb(address)", "4df679e3": "BonusAllocation(address,string,string,uint256)", "4df68ada": "enable(bool)", "4df6b45d": "delegateTransferFrom(address,address,uint256,address)", "4df6ca2a": "setQuestionFee(uint256)", +"4df6d048": "playerTokenToApproved(uint256)", "4df6d6cc": "allowedRecipients(address)", "4df7e3d0": "b()", "4df86126": "SECONDS_PER_HOUR()", +"4df88a0b": "ApproveAndCall(address,uint256,bytes)", "4df93196": "Joe223()", +"4df96a4c": "takeLPReward(address)", +"4df97bc5": "buyerFeeSigner()", +"4df984a4": "moveReleaseTime(address,uint256)", +"4df9cbfa": "Invest(address,uint256,uint256,uint256)", +"4df9d6ba": "getPendingReward(address)", +"4df9dcd3": "SetName(string)", +"4dfa24f2": "calcSGNMinimumLimiterValue(uint256)", "4dfa2722": "CryptoWuxiaVoting()", "4dfa3f18": "createNewUser(string,string)", +"4dfa54d7": "isSingleCollaborator(uint256,address)", +"4dfa8103": "platformSecondSalePercentages(uint256)", +"4dfac85d": "getStartGameStatus()", "4dfad511": "_redeem(address,uint256)", +"4dfad8ec": "tokenDelivery(address,address,uint256,uint256)", "4dfb10bc": "realVotedSupply()", "4dfb4807": "etherTotal()", +"4dfc3a1a": "finishedTimeStamp()", +"4dfc3b0f": "tex()", "4dfc7aa1": "existsDistrito(uint256)", "4dfc97c5": "policyTokenBalance()", "4dfcf67a": "NeroSupply()", "4dfd14b2": "EMACCrowdsale(uint256,uint256,uint256,address,address)", "4dfd1b02": "setUint8(int8,uint8)", +"4dfd6422": "payComisionSponsorETH(address,uint256,uint256)", +"4dfd73ae": "fixedPoolClose(uint32)", "4dfd964f": "TSTCallAPI()", +"4dfdac20": "getBatchAssetProxyAllowances(address,bytes[])", "4dfdc21f": "maxNum()", +"4dfdc7e3": "removeAddressForDeduction(address)", "4dfdebe9": "ClientQty()", "4dfe13e7": "distributeTokensToWallets(address[])", +"4dfe165c": "getTokenTransferSetById(uint256)", "4dfe28e7": "releasedTokenOf(address)", +"4dfe89e7": "claimedDivs(address)", "4dfe950d": "purgeUpgrade()", +"4dfebfc2": "payableReward(address)", +"4dfed342": "traderOperators()", +"4dfefc4b": "exist(address)", +"4dfefebc": "unlockedAmount()", +"4dff4f3d": "BCPOwner()", "4dfff04f": "approveSiring(address,uint256)", +"4e000aa6": "startReleasingCompoundBlk()", +"4e0030b2": "finalDistribution()", +"4e006d83": "createChecksumPair(uint256,uint256)", +"4e009cf6": "setSeigniorageProxy(address)", "4e010942": "LogOraclizeCallback(uint256,bytes32,string,bytes)", "4e0128fb": "watchPrice()", "4e012918": "whitelister_address()", @@ -44765,88 +81983,166 @@ "4e01bb60": "RefundPeriodOver()", "4e01bd10": "emergencyTokenWithdrawal(uint256)", "4e02107a": "getWeddingData()", +"4e0212ab": "balanceOfCurve()", "4e022f11": "setSpark(address)", "4e023fc9": "FakeXUC()", "4e028c67": "SAC()", +"4e02a280": "checkLegal(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4e02e3ef": "isInviterExsit(address)", "4e02ed40": "CESCoin(uint256,string,string)", +"4e02edf1": "oracleUpdatesecondaryTime(uint256,uint256)", "4e039d26": "setPreallocationWhitelist(address,bool)", +"4e03a16b": "LogManifest(address,bytes32,uint256,bytes32,string)", +"4e03afc4": "WITHDRAWAL(address,uint256)", "4e0416a6": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", +"4e04a8a6": "addLiquidityForFORK(bool,uint256)", +"4e0516c2": "setupGame()", "4e054a67": "setBlacklist(address)", +"4e056005": "adminChangeRelayerThreshold(uint256)", "4e05ded6": "ClassicCheck()", "4e06369c": "getPurchasableAmount()", +"4e06c014": "getFinalVerdict(uint256)", +"4e06c968": "changeDragonDen()", +"4e07008d": "mintWithEther(address,uint256)", +"4e070f50": "tokenDecaySupplyForWeek(uint256)", "4e077f2a": "addGasEther()", "4e07a7a5": "thirdStageMinted()", +"4e083278": "depositPrize()", +"4e0853db": "_setVAIVaultInfo(address,uint256,uint256)", "4e088eb7": "stopPrivateSale()", "4e0896a1": "teamIndexToExist(uint256)", +"4e08b23f": "drainAllToken(address)", +"4e092a01": "setLockPeriodBasisPoints(uint256,uint256,uint256)", +"4e09a170": "setTopBid(address)", "4e0a0f21": "preICOstartTime()", +"4e0a3035": "setInternalWalletAddress(bytes32,address)", "4e0a3379": "setCFO(address)", +"4e0a53ec": "newProposal(string,bool,address,uint256,address,bool,string,string,bool,bool,string)", +"4e0ab4b4": "Carr(uint256)", +"4e0ab7f8": "distributeSupplierComp(address,address,bool)", "4e0ade00": "SmartWallet(address,address,address)", +"4e0aede3": "approve_685(address,uint256)", "4e0b7888": "_updateStage()", "4e0ba39d": "reserveAdd(uint256,uint256,uint256,uint256)", +"4e0bad78": "shutdown_pool(uint256)", "4e0be991": "removeChild(address,address)", "4e0c4a9c": "setCommissioner(address)", +"4e0cb323": "BUY_PRUF()", "4e0ce969": "moduleToken(uint256,uint8)", +"4e0d4091": "investProxiesStatuses(address)", "4e0d93a3": "increasePriceForNeighbours(uint256)", +"4e0e1a3e": "gameState(uint256)", "4e0e9675": "isIdentity(address)", +"4e0eae83": "setTaxDivisor(uint256)", "4e0f1064": "getMonthlyTransactionVolumeReceiving()", +"4e0fcfa9": "whitelistReferee(address)", "4e102951": "can_claim(address,address,address)", "4e1053cc": "RobinHoodPonzi()", "4e10c212": "TxAttackWallet()", "4e10c3ee": "transferWithoutReward(address,uint256)", +"4e11648a": "synthToToken(bytes32,address,uint256)", "4e116eb8": "unRegisterCertificationDb(address)", +"4e11826b": "air_drop_rate()", +"4e11db30": "foo10(address,uint256)", +"4e12131f": "jual(uint256,address)", "4e1243b6": "AddClaim(uint32,string,bytes32,bytes32,address,uint32)", "4e1273f4": "balanceOfBatch(address[],uint256[])", +"4e127ebd": "changeBZBAddress(address)", "4e12e51a": "getBonusList()", +"4e12ec9c": "moderation_gov_assess_period()", "4e1339fe": "HALT()", +"4e135adb": "setPricePerCollectable(uint256)", "4e13f066": "RedSoxRays48()", "4e140274": "isDiscount()", "4e1415ab": "testThrowExecuteSellOrderDaoChallengeRefusesZeroFunds()", +"4e14a967": "confiscateSAFECollateralAndDebt(bytes32,address,address,address,int256,int256)", "4e14e4c8": "CyberCapitalInvestToken()", +"4e14eb28": "withdrawRecord(address)", +"4e152527": "tokenReferrerDistribution(address,address)", "4e153418": "CreateLottery(uint32)", "4e159a05": "clacCooperateNeedLockAmount(uint256)", +"4e15baf0": "getPendingAmount(uint256,address)", "4e15dfe9": "wholeTokensPerEth()", +"4e1647fb": "isController()", "4e16bef5": "jack_max()", "4e16e0c7": "participantCanParticipate(address)", +"4e16fc8b": "getUri()", +"4e17a702": "isHashUsed(bytes32,address)", +"4e17cb21": "totalUbaseLpStaked()", +"4e17d154": "loanHolders(address,uint256)", +"4e1838e7": "jackpotBalance_()", "4e18405d": "TOTAL_ARK()", +"4e186d77": "initializeReward()", "4e18c1a7": "IcoPhaseAmountsChanged(uint256,uint256,uint256,uint256)", "4e191701": "lamboPresaleAddress()", "4e194cc0": "getCreateFeeToken()", "4e195faf": "totalEthereumRaised()", +"4e196624": "_oportunity(address[],uint256)", +"4e19b15d": "DateBonusPayoutPossible(address)", "4e19c112": "deleteOwner(address,uint8)", +"4e19c5da": "pricePerMachineHour()", "4e1a150b": "netherToken()", "4e1a1853": "ParentCoinAddress(address)", "4e1a50b7": "setBonuses(uint256,uint256,uint256,uint256)", +"4e1aca1e": "otcMember(address)", +"4e1af9ce": "FairStockEquity()", +"4e1b0ae9": "_count()", "4e1bdfdf": "withdrawOlder()", +"4e1c5914": "setWithdrawPartner(address)", +"4e1cae0c": "FUNC_C0CFDD65(uint256,uint256)", "4e1cfa8c": "batchAddCandidateByIndex(uint256,address[],bytes32[],bytes32[])", +"4e1d9df5": "seigniorage()", "4e1dc0d7": "LAYA()", +"4e1e505b": "setFarmingToken(address)", +"4e1ebe50": "updatePostPrice(uint256,uint256)", +"4e1f6a98": "lengthcheck()", "4e1f6c14": "FUTURE_WALLET()", +"4e1f8080": "MixStart(address,uint256,uint256)", "4e1fa837": "TestERC721()", "4e205cee": "signedApproveAndCallHash(address,address,uint256,bytes32,uint256,uint256)", +"4e209320": "DiscipleVendOffer(uint256,address,uint256)", "4e209678": "testFailBreach()", +"4e210fb4": "getSuccessDetail(uint256)", +"4e212ffc": "createChannel(address,bytes32,uint64)", "4e2133ba": "addExchangePartnerAddressAndRate(address,uint256)", +"4e218ac6": "swapHFLYintoROT(uint256)", +"4e2195ce": "onlyOwnerSetSaleMode(uint8)", "4e21f25e": "soldPresale()", +"4e21f9c0": "mediaContract()", "4e22102b": "LIMITS_END_DATE()", "4e2280c4": "clearQuickBuyPath()", "4e228d8f": "ExchangeableToken(address)", +"4e229738": "SwapIsToken()", "4e23176c": "buyRBCTokens()", "4e232730": "ownerOn(address)", "4e233065": "delKeyValue(uint256,bytes32)", +"4e235e7c": "mintReward(address,address,uint256,uint8)", +"4e2369c9": "maxBurntSFR()", "4e23a144": "fundUser(address,uint256)", +"4e23f0af": "cancelCompanyClosing()", +"4e242e75": "queryLiquidityList()", "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)", +"4e26c2a8": "LogResult(uint256,bytes32,address,uint256,uint256,uint256,uint256,int256,bytes)", "4e26c95e": "EASYLIFE(uint256,string,string)", +"4e27072a": "userPoolInfo(uint256,address)", "4e272768": "remove_bounty()", "4e2743b3": "setStack(uint256,uint256)", "4e275295": "tokensSell()", "4e2786fb": "roundNumber()", +"4e27d124": "adminClaimProfitAndInternalSwapToUSDT(uint256)", "4e27e916": "voteLock(address)", "4e2808da": "cancelOwnership()", "4e280fd6": "SolarioToken()", +"4e281560": "continentIndex(address)", +"4e28388f": "NMP_MIN_DONATED()", "4e284af1": "INCENT_FUND_NON_VESTING()", "4e285acb": "setsendgoods(uint256)", +"4e287df3": "endDacehte()", +"4e2953f1": "getUserReferrers(address,uint256)", "4e29cba6": "disbursements(uint256)", "4e2a953a": "gameStartedAt()", "4e2aae36": "setzUint256(uint256,int256)", @@ -44856,13 +82152,21 @@ "4e2ba115": "DFVToken()", "4e2bd9ce": "rescind(address)", "4e2bdfd4": "getBetMutableData()", +"4e2bfcf6": "setMaxLandFree(uint256)", "4e2c9524": "upgradeDuties()", +"4e2ca051": "Deposit(address,address,uint256,uint256,uint256)", +"4e2cecec": "getAmountOfETH(address,uint256)", +"4e2d3b43": "pendingJungle(uint256,address)", +"4e2dbca7": "master_fee()", +"4e2dc41f": "totalCBONDS()", "4e2de9e1": "setGzeBonusOffList(uint256)", +"4e2e7ec5": "withdrawForUserByCVault(uint256,address)", "4e2e8a10": "setTime3(address,uint256)", "4e2e94f7": "MAX_PRE_SALE_AMOUNT()", "4e2f220c": "createCentralizedOracle(bytes)", "4e2f2af4": "PayoutRedemption(uint256,uint256,uint256)", "4e2fa68f": "crowdsaleStarts()", +"4e2fc69d": "_requireAccessToResume(bytes32)", "4e2fd44e": "setPriv(address)", "4e304bfb": "CRAIC()", "4e30506f": "dropLast()", @@ -44870,49 +82174,94 @@ "4e317ead": "cancelTemplateProposal(address,uint256)", "4e31aea3": "firstThawDate()", "4e329bd3": "HealthCoin(uint256)", +"4e33300c": "getSIRandBIR(uint256,uint256)", +"4e33f83b": "playerBalance(address)", +"4e344f3f": "Cat14(address,uint256)", +"4e34b481": "getPowerPool(uint256)", +"4e353270": "addComponent(address)", "4e358ce7": "DITCOIN()", "4e35aacf": "createCompany(string,uint256)", "4e360eaf": "EmergencyStopActivated()", +"4e362459": "updateAnyoneTrade(bool)", +"4e362966": "setEndRewardBlock(uint256)", "4e3673a6": "connectCrowdsaleContract(address)", +"4e36bd12": "bytes2String(bytes)", "4e36fddf": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256)", "4e37af4e": "offlineCallback(bytes32)", "4e38413f": "setBytes32(bytes32,bytes32,bytes32,bool)", "4e385512": "setCampaignValidity(bytes32,bool)", +"4e38624b": "requestScore(address,bytes32,string)", +"4e3883c7": "Mint(uint256,address,uint256)", +"4e38c7f4": "createTradeableAsset(string,address[],uint256[])", "4e38f205": "generateWithdrawalHash(string,uint256,address)", "4e390f2a": "initLottery(uint256,uint256,uint256,uint256)", "4e395e2a": "isExecutable(uint256)", +"4e397aad": "buyCardFromAdmin(uint256)", +"4e3a730a": "nouni()", +"4e3ac2ba": "p22()", "4e3acafe": "Cr1tikalIsShort()", "4e3b33d4": "prepareRefund()", +"4e3b4f32": "startChangeStakersPercent(uint256)", "4e3b52fe": "metaCoin()", +"4e3bda30": "HODLER(address,uint256)", +"4e3c118e": "voteForProposal(address,uint256)", "4e3c2f47": "getCardDivs(uint256,uint256)", "4e3c50a0": "addBuyTokensRequest(address,string,string)", +"4e3c83f1": "signerUpdateLimit()", +"4e3c9071": "totalRFIContributed()", +"4e3ccea3": "theGraphIsAwesome(string,string)", "4e3d2745": "ManoloToken()", +"4e3d2bf9": "rebateSettings(uint256)", +"4e3d3aff": "CurrentHighest(uint256)", "4e3d539a": "newChainlinkWithENS(address,bytes32)", "4e3dc2f1": "STAT_MAX()", "4e3df857": "removeEA(uint32)", "4e3e4035": "notEqual(int256,int256,string)", +"4e3eb326": "whitepaper(uint256)", +"4e3ef09b": "SCRBAC(string)", "4e400bda": "getSenderStatus(address,uint256)", +"4e400d2a": "bufferMax()", "4e406167": "setContractICO(address)", +"4e40723c": "maximumFailRebalancePeriod()", "4e4081ef": "pregnantBots()", +"4e409f9f": "totalrefregreward()", +"4e40c260": "addLiquidityReturn(address,uint256)", +"4e40ea64": "partMember(address)", "4e41108d": "Bank()", "4e417a98": "callData()", "4e41a1fb": "symbol(uint256)", +"4e41de7f": "getUserStakedBalance(address,address,address)", "4e41ebf6": "createCommissionerAuction(uint32,uint256,uint256,uint256)", +"4e427f45": "initialize(address,address,address[],address[],uint256[],uint256,uint256,bool,uint256,uint256,uint256)", +"4e42b06d": "proposalCalldatas(uint256,uint256)", "4e42b632": "WEBcoin()", +"4e4317d5": "WBTC_ADDR()", "4e43502a": "BDSMTOKEN(uint256,string,uint8,string)", "4e43603a": "getUserStats(address)", +"4e43e495": "submitCheckpoint(bytes,uint256[3][])", +"4e443d9e": "checkRecoveryMode(uint256)", "4e448ffa": "winnerLuckyNumber()", "4e44b5cc": "Kiwi(address,uint256,string,string,uint8,uint8)", "4e44c855": "setGameStatus()", "4e44d956": "configureMinter(address,uint256)", +"4e4508c9": "getFacultyDetails()", +"4e45352b": "samplePayable()", +"4e455dbe": "CancelOffer(uint256)", "4e458cc2": "setNewEndTime(uint256)", "4e458eb6": "posstoken()", +"4e45f095": "winningNumbers(uint256)", "4e45fba9": "getProviderDetails(address,uint256)", +"4e462123": "g4(uint256)", "4e46869c": "accountAndSubcourtIDToStakePathID(address,uint96)", +"4e46ce8a": "_pID()", "4e46fc2c": "finalizePreICO()", +"4e47c85f": "getAaveAddress()", "4e47d99a": "WubCoin(address)", +"4e47f3a7": "partnersTokens()", +"4e480ba9": "setHXPExchange(address)", "4e4831d8": "removeDelegatorById(uint256,address,address)", "4e485c52": "closeTransfer()", +"4e485f88": "updateCloversMetadataAddress(address)", "4e48a495": "checkTransfer(address,address,uint256,uint256)", "4e4965ff": "AIPAY()", "4e49954e": "createReceipt(address,string)", @@ -44920,11 +82269,20 @@ "4e4a8c0d": "sendMessage(address,uint256,uint256,bytes)", "4e4ab830": "amIOwner()", "4e4ac577": "claimFeesForRound(address,uint256)", +"4e4ae5a5": "setShouldRevertSend(bool)", "4e4afa1b": "minimumTickets()", +"4e4b95af": "modifyCharity(uint256,string,uint8)", +"4e4bae81": "tokenFallbackWhiteList(address)", +"4e4c4540": "isEarlyExecutionAllowed()", +"4e4c7d9b": "revokeAccess()", "4e4cf65c": "forwardMoney()", "4e4d02db": "DeathFactor_iii()", "4e4d3e56": "get_funds_left_for_reinvestment()", +"4e4d4ce5": "exchangePynthsForPNXAtRate(uint256,uint256)", +"4e4d9fea": "repayBorrow()", +"4e4da573": "layTop3VDV(uint256)", "4e4e2d6d": "PaymentForwarded(address,uint256,uint128,address)", +"4e4e5250": "redirect(address,address)", "4e4e7862": "addWithdrawal(address,address,uint256)", "4e4f776c": "TCT(uint256,string,uint8,string)", "4e4fbee1": "renounceProxyManager()", @@ -44932,6 +82290,9 @@ "4e500760": "CreditUnits()", "4e504313": "Addr3()", "4e505367": "initialTokenAmount()", +"4e50d563": "updateLockTypes()", +"4e510922": "redeemedBlock(address)", +"4e5111a6": "transferCollateral(bytes32,address,address,uint256)", "4e51193b": "sealTimestamp()", "4e5141eb": "buyTokens(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "4e5146a9": "hexToAscii(uint8)", @@ -44940,19 +82301,35 @@ "4e523b91": "MonethaToken(address,uint256)", "4e52622b": "eth6DivsOwing(address)", "4e52678e": "digix()", +"4e52d850": "setPowerSellPriceRatio(uint32)", +"4e53231b": "getTargetFarm()", +"4e533572": "stakeInfo(uint256)", +"4e53385a": "depositSum()", "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)", +"4e54c2d0": "set_BDM_address(address)", +"4e54cee0": "churn(address,bytes32[],bool[],uint8,uint8,uint8,uint8)", "4e55936d": "NorthPoleMintingEnabled()", +"4e55a69b": "lastLiquidityTradeTrigger()", "4e56925f": "updateMasternodeAsTeamMember(address)", +"4e571cb0": "baseDebt(address)", +"4e577337": "NoEnteryGom()", "4e57d27d": "_getAllRevisionTimestamps(bytes20)", +"4e5842e1": "updateWithdrawFee(uint16)", +"4e589c84": "matureCBOND(uint256)", "4e58e920": "officialFacebook()", +"4e58fdca": "getDifficultyAdjustmentParameter(uint256)", +"4e5978e1": "subBalanceSubReserve(address,address,uint256,uint256)", "4e599551": "getPreviousWinners()", "4e59f947": "SucToken()", +"4e5a18e9": "CHARACTERS(uint256)", "4e5a33c5": "executeTokenRepartition(uint256)", +"4e5a9b25": "userLastGuessYsd(address)", +"4e5aa2a0": "subContracts(address,uint256,uint256)", "4e5aabe6": "resetStellarBalance()", "4e5ac744": "PDPCoin()", "4e5acb1a": "changeAutherOwner(address)", @@ -44961,50 +82338,96 @@ "4e5b5f54": "purchasePresale(address,uint256)", "4e5bec6e": "addTypeAddressById(uint256,address,address,uint256)", "4e5c0595": "tokenAdvisorsAllocated()", +"4e5d08e0": "addExternalErc20Award(address)", +"4e5d1fd8": "redeem_aave(uint256)", +"4e5d357f": "evt()", "4e5d49a0": "DariumToken(address)", "4e5d7186": "LogAccountRegistered(address,address,bytes32,bytes32,bytes32,bytes32)", "4e5d793f": "setAsset(address,uint256,uint256,uint256)", "4e5d8edd": "VOLUME_70()", +"4e5dc870": "generateOperatorID(string)", +"4e5e60e7": "payback(address,uint256,uint256,uint256,uint256)", +"4e5e68bc": "userLastGuessFromDay(address,uint256)", +"4e5eab9e": "manager3()", +"4e5ebaff": "getNumberOfPropertiesOnPropToken(address)", "4e5ed65b": "_indexAccount(address)", +"4e5eda11": "swapMining()", "4e5f13bc": "landPriceCurrent()", "4e5f8751": "newInvestWallet(address)", +"4e5ff248": "cumulativePrices(address)", "4e60321d": "userOddsMiniGame(address)", "4e605688": "setBtcBuyer(address)", "4e6093f8": "HeirChanged(address,address)", +"4e60f883": "template_hashes(uint256)", +"4e60fe78": "setEnableTCOREYield(bool)", "4e6106c5": "getRealisation()", +"4e618db0": "allocatedBalances(address)", +"4e619ace": "REENTRY_REQ()", "4e61c362": "transferMul(address,uint256)", "4e61df06": "DigixbotEthereum(address)", "4e61efc5": "getWizzTypeOf(uint256)", +"4e61f14f": "removeAddon(uint256,uint256)", +"4e622931": "determineMix(bytes18,bytes18,address)", +"4e632084": "setlpAddress(address)", +"4e635134": "grantAccess(address,address,uint8)", "4e637fab": "DepositsTransferred(address,uint256)", +"4e63f9b1": "updateRating(address,uint256)", +"4e64e0c0": "orderItems(uint256,uint256,uint256,address,address,bool,bool)", +"4e64edfd": "forNovator(address)", +"4e65912f": "faasRewardLength()", "4e659145": "levPerUser()", +"4e65f29b": "calcWeight(uint256)", "4e6630b0": "ethBalance()", +"4e66b853": "escrowStart(address)", +"4e66ce6a": "setTimerIntervals(uint256,uint256)", +"4e66f8ae": "activate_rebasing()", +"4e67339f": "setZrxVault(address)", +"4e6772a5": "_clearStorage()", +"4e680933": "testGetMaxFunction()", "4e68354e": "LogLockStateTransition(uint8,uint8)", "4e6885f3": "depositPresale(address)", +"4e68c9e9": "stakekushOGUni(uint256)", "4e6944cf": "totalStaticoinSupplys()", "4e696d3c": "startCoinSale(uint256,address)", "4e69d560": "getStatus()", +"4e69e152": "findThreeAthletesRunSoon(int256)", +"4e6a6ffc": "unfreezeTimeMap(uint256)", "4e6ab570": "insert_order(address,bool,uint32,uint128)", +"4e6afb9e": "extraSurplusReceiver()", +"4e6b0158": "countryData(uint256)", +"4e6b19a1": "writeLEETHresponse(uint256,string)", "4e6b29ee": "returnIsParentAddress(address)", "4e6b558a": "removeVerifiedAddress(address)", "4e6b97f3": "transferMultiSameVaule(address[],uint256)", "4e6ba0a9": "testCreateCostMultisig()", +"4e6c2a7e": "cannotReceive(address)", +"4e6c4133": "GirlUpgrade(uint256,uint64)", +"4e6c463c": "exchangeRateLastUpdatedTimestamp()", +"4e6c5645": "proxySigner(uint256)", "4e6c61aa": "testFailAddForeignChildNotChild()", +"4e6c9416": "NewSaleEndDate(uint256)", "4e6d1405": "invoices(uint256)", "4e6d35ea": "currentlyReleased()", "4e6d739d": "getSupernovaBalance()", "4e6d73da": "LogUserUserRemovedFromWhiteList(address)", "4e6e5d69": "unMint(address)", "4e6e6928": "latestFriend()", +"4e6ebf05": "myidkeys(uint256)", "4e6ec247": "_mint(address,uint256)", "4e6f42ba": "changeSeizedTokensWallet(address)", +"4e6faa8f": "parseConnectorsByPool(address,address,uint256)", "4e6fedb7": "remainOfStage(address,uint256)", "4e705549": "setDefinition(uint8,uint8,uint8,uint8,uint8)", "4e7073f1": "setMinETH(uint256)", "4e70a604": "Withdrawal(uint256)", "4e70b1dc": "num()", +"4e711801": "yggdrasilPlus(address,address,uint256)", +"4e713d04": "emaTimePeriod()", +"4e718659": "setDepositCNAmount(uint256,uint256)", "4e7196c7": "setReg1(uint256)", "4e71d92d": "claim()", "4e71e0c8": "claimOwnership()", +"4e722d0a": "underway()", "4e724f0f": "numBlocksLocked()", "4e725b7a": "test_hasClaimableShares_nonZeroClaimableStake()", "4e72ec91": "setPointer(uint8)", @@ -45013,31 +82436,55 @@ "4e7343ea": "verifyOrder(address,uint256,uint256,address)", "4e7344d5": "ABitcoin()", "4e7355d6": "RegistrantRemoval(address)", +"4e73a241": "newURI()", "4e7445c8": "drainRemainingToken(address)", "4e7455d0": "createMilestones(uint256,bool,uint256)", +"4e74f5e1": "totalAmountForBurn()", +"4e759755": "getMarketInfo(address,address)", +"4e75c8e7": "ReferralsAdded(address[],address[])", "4e7602d3": "setRecipients(address[])", "4e761a91": "STEP_SIZE()", "4e7654fe": "buyTokens(uint256,uint256,bytes16,uint256,uint8,bytes32,bytes32)", +"4e766e7b": "getNewCalls()", "4e76a725": "test_withAssertTrue()", "4e76a846": "numParticipants()", +"4e76edbb": "presalesLength()", "4e76f5d2": "GetMinimumBet_ether()", +"4e76fc9d": "onTokensBurnedForTrade(address,uint256)", "4e77a38e": "releaseTrickleDownBonuses()", +"4e77df84": "UpdateFeePrecision(uint256)", +"4e77ed20": "isStakeFinished(uint256)", "4e78e0c2": "setVerificationSlashingPeriod(uint256)", +"4e78e565": "BBPLP()", +"4e78f2a8": "distribute721s(address,address[],uint256[])", +"4e791a3a": "get_gauge_weight(address)", +"4e79238f": "getHypotheticalAccountLiquidity(address,address,uint256,uint256)", "4e79909c": "WithdrawalApproved(uint256,uint256,bool,uint256,bytes)", +"4e79ed3c": "xvs()", "4e79fd7c": "stepLockedToken()", "4e7a540b": "doUpgradeInternal(address)", "4e7a6978": "PersianTokenICO(uint256,uint256)", +"4e7a9cb0": "initialize(string,address,address,uint256,uint256,uint256,uint64,uint64,uint64)", "4e7ad367": "fireEventLog1Anonym()", "4e7b1ce1": "PayNihilumToContract()", +"4e7b2dbf": "set_payable_fee(uint256)", +"4e7c1d3a": "depositToken(uint32,address,uint256)", +"4e7c9a6d": "eventSaleParticipants(uint256,uint256)", "4e7ceacb": "getFeeAddress()", "4e7cff38": "toBytes20(bytes,uint256)", "4e7d656a": "EtherSpermBank()", "4e7dbb29": "TTARD()", +"4e7e7622": "twoDays(uint256,uint8,uint8)", "4e7e96f1": "buyBackInvestedValue()", +"4e7eaf12": "player_getPlayerJackpot(address,uint256)", "4e7ec0e4": "setGlobalTimeVault(uint256)", "4e7ec7e3": "RANGEEND_6()", "4e7f1264": "leaveMessage(string)", +"4e7f13d4": "isAddressWhitelist(address)", +"4e7f3be5": "setGameDefaultPeriod(uint256)", +"4e7f77d2": "calculateSusdToBurnToEclipseEscrowed(uint256)", "4e7f9b19": "getReport(uint256)", +"4e7ffecc": "usersUnderPool(address,uint256)", "4e80f241": "YCStandardToken(uint256,string,uint8,string)", "4e8127f6": "icoSupply()", "4e815698": "removeBlacklistAddress(address,address)", @@ -45045,59 +82492,118 @@ "4e81b17d": "createMonthlyBill(uint8,uint256,uint256)", "4e81eec9": "EventProductEndSale(uint32)", "4e8204a4": "NewRoundStarted(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4e8210aa": "confPay()", "4e82844d": "countWishes()", "4e82c134": "getAddressFromUsername(string)", +"4e82d413": "findFreeReferrerByAddress(address)", +"4e830466": "GetEsusuCycle(uint256)", +"4e831d7a": "confirmedBy(uint256,address)", +"4e83423c": "isRewardManager(address)", +"4e835980": "pendingFbt(uint256,address)", "4e83977a": "validationWallet()", "4e840bea": "IGTToken()", +"4e8440a5": "tradeOwnedAsset(address,address,uint256,uint256)", +"4e847427": "createCollectionTokens(address,uint256)", +"4e847fc7": "setPool(address,address)", "4e84c614": "getWaitingState()", +"4e8522fb": "contractsApprovedList(address)", +"4e857f95": "transferHeroOwnership(address)", "4e85a0e1": "cancelVoteForCandidateByIndex(uint256,address,uint256)", "4e860ebb": "disableTokenIssuance()", +"4e875a58": "calcUserReward(address)", "4e876ecc": "directSellRate()", "4e87c715": "DEFAULT_INITIAL_COST()", +"4e87f569": "NewGlobalConstraintsProposal(address,bytes32,address,address,bytes32,bytes32)", "4e880082": "distributeTheSameAmountOfTokens(address[],uint256)", +"4e881e20": "PrintSeries(uint256)", +"4e88f064": "getUserProfitsAndFeeAmount(address,address)", +"4e8912da": "getQuantizedDepositBalance(uint256,uint256,uint256)", +"4e8933de": "getPetCount()", +"4e89a711": "getUnderlying(address)", "4e89eb98": "bonusDicrement()", "4e8a411b": "deallocate(address,address,uint256)", "4e8afc5f": "getRegister(string,bytes32)", +"4e8b1dd5": "ttl()", +"4e8b4182": "get_init_and_lock_status()", "4e8b759c": "BuyOrdersOf(address,uint256)", "4e8b75d0": "IRtokenChain(uint256,string,string)", "4e8be64d": "TokenToken(uint256,string,string)", +"4e8bea04": "emergencyRecovery()", "4e8c185b": "setFeePropMaxGlobal(uint256)", "4e8c2927": "FreeToken()", +"4e8ca236": "BuyTokenForETH(address,address)", +"4e8cf3f0": "CreditsAdded(uint256,address,uint32,uint256)", +"4e8e5957": "getDepositEtherLength(address)", "4e8eaa13": "cancelAuction(uint256,address)", "4e8ec73e": "jockeyPr(uint256)", +"4e8ee2e5": "startCoinOffering()", "4e8f05d1": "setGrowthTokensWallet(address)", "4e8f7fdf": "allocateTokenForTeam(address)", "4e8fb35c": "referralBountyTokensAddress()", +"4e90083c": "WithdrawWEI(address,address,uint256,uint8)", +"4e9089a9": "yourAGOBalance(address)", +"4e90eeea": "ownerToAuraAmt(address)", "4e91025e": "Liquidate(address,uint256,uint256,uint256,uint256)", +"4e913cd9": "commitBlock(uint32,uint32,bytes32[],bytes,bytes,uint32[])", "4e91ca3a": "updateModuleStatus(address,bool)", +"4e91d2c6": "lockStake(uint64)", "4e91db08": "setBytes32(bytes32,bytes32)", +"4e91dc51": "registertoken(address,string,string)", +"4e91f811": "setProtocolFee(uint8)", "4e91f906": "getNewPetCard(uint8,uint8)", "4e922731": "calcRefBonus(uint256)", +"4e924119": "pendingISW(uint256,address)", +"4e925922": "signaturesCount(string)", +"4e92652d": "setBundle(address)", "4e926eab": "getInviteePIDs()", "4e9282af": "setBDApprove(uint256,bytes)", +"4e92bc4b": "getImpactCount(bytes32)", +"4e92c3fb": "resetLockWeek(address)", "4e930483": "addbtycmoney(address,uint256)", "4e9384da": "addSecondPreferences(bytes32[],bool)", "4e938539": "preSaleSecondBonus()", "4e93bf32": "maximumBuyBackAmountInWEI()", "4e9466f7": "withdrawToMany(address[])", "4e94917a": "Claim_TRAC_20000()", +"4e94c285": "rewardConfig()", "4e94c829": "getAugur()", +"4e94e292": "totalMaxWinnerTickets()", +"4e94f499": "children(address,uint256)", "4e94fbcf": "setIntervalCoefficient(bytes2,uint256,uint256,uint256)", "4e954f87": "IsEthereum()", +"4e959172": "removeReadersFromMedianWhitelist(address,address[])", "4e961921": "getCurrentTokenRate()", +"4e963fd8": "meePriceCeiling()", +"4e9694ac": "calcDepositAmount(uint256)", "4e96ea53": "addContract(address,address,address,string)", +"4e97415f": "accumulativeFundsOf(address)", "4e97bcfc": "EmergencyStop()", +"4e97f140": "totalSupplyEpoch(uint256)", "4e98323c": "setReturnAgent(address)", "4e9833ac": "changeHoldingTaxInterval(uint256)", "4e989a5b": "importPlayers(address,address[])", "4e98a5b3": "receiveAssets(uint256)", +"4e994ebb": "addStudServiceAdmin(address)", "4e99b800": "tokenBaseURI()", +"4e99bda9": "anySynthOrSNXRateIsInvalid()", +"4e9a542b": "godChangeHouseCost(uint256)", +"4e9a6c30": "removeLiquidityOnBehalf(address,uint32,uint128)", +"4e9a9913": "UNBONUS(address)", +"4e9aa2bf": "fulfillBasedPrice(bytes32,uint256)", "4e9b5db0": "BASEPRICE()", +"4e9bb419": "inviteClaimHero(address,uint256)", +"4e9bea41": "newTokenAndVote(address,uint256,string)", +"4e9c1118": "routers(uint256)", "4e9c6b1f": "million()", +"4e9cbef2": "UserTimestampSec(address)", "4e9cc134": "JPG1Token()", "4e9cf5b1": "changeOperational(bytes32,bool)", +"4e9d4a51": "powerToThePeople()", +"4e9d9e4f": "highestAskEntryIdx(uint256)", "4e9de828": "registerAuthContract(address)", "4e9e456b": "oraclize_query(uint256,string,bytes[1])", +"4e9eb1b6": "noVisibility4()", +"4e9eba03": "safeEndPresale()", "4e9ec8a6": "transferETHtoContract(uint256)", "4e9ee738": "test_8_basicTransfersBetweenAccounts_increaseBlocksBy300()", "4e9f0f06": "GimmerTokenSale(address,address,uint256,uint256)", @@ -45105,75 +82611,147 @@ "4e9faaba": "_sell(address,uint256)", "4e9feee6": "changeFrozenTime(uint256)", "4ea05686": "countSet()", +"4ea09797": "next(bool,bytes32)", "4ea0db6c": "HardCapReached(address,uint256)", "4ea10c74": "FounderAllocationTokens()", +"4ea12b62": "fu(uint256)", "4ea14479": "setProjectToVerify(address,uint256)", +"4ea17ef2": "setViewUriBase(string)", +"4ea18fab": "changeMinBalance(uint256)", "4ea1fcb6": "getWithdrawAmount(address)", "4ea201cc": "betInfo()", +"4ea20722": "_getAccountNonce(address)", "4ea28ee6": "MyToken(uint256,uint256)", "4ea2ea9f": "allocLastTxRewardByHand()", "4ea2f66a": "_claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", "4ea34cdb": "getActionContract(address)", "4ea37fec": "presaleStartTimestamp()", +"4ea39395": "virtualGoldPrice()", +"4ea409fa": "emojiIndexToOwner(uint256)", "4ea412f4": "setPrice3(uint256)", +"4ea41596": "addRepeaters(uint256)", "4ea44358": "setGen0Step(uint256)", +"4ea4618b": "userRewardPerTokenAPaid(address)", +"4ea49b5d": "airDropBlacklist(address)", +"4ea4bc9d": "startPresaleManually()", +"4ea4e6b8": "getStakeIndex(address)", +"4ea4f8e6": "distribute(uint256[])", +"4ea4fbec": "ratesProvider()", +"4ea5015a": "developer(uint256)", "4ea5195a": "participantRoundCalced(address,address,uint256)", +"4ea5606f": "SupplyReceived(address,address,uint256,uint256,uint256)", "4ea5a6ac": "getRocIndexToOwner(uint256)", "4ea611cd": "setPartnerDurance(uint256,uint256)", "4ea640da": "ManoAntrasToken()", "4ea66c38": "buyinInternal(address,uint256)", +"4ea6bc8e": "sealUnlockAmount()", "4ea6c89e": "isPreviousStageFinalized()", +"4ea71327": "active(address)", +"4ea7262b": "rebaseRewardUSDx()", +"4ea73046": "setUsdtRateUp(uint256)", "4ea73b07": "APOTokenCrowdsale()", +"4ea75021": "setTransactionFeeInEther(uint256)", +"4ea78b90": "addOnePendingClaim(address)", "4ea7d483": "priceStar5Now()", "4ea801c5": "writeRate(string,uint256)", "4ea8b6d0": "changeProfilePicture(bytes32)", "4ea9560e": "FoshaAirdrop()", "4ea9a27a": "registerHolder(bytes32,address,uint256)", "4ea9ea71": "_submitTransaction(address,uint256,bytes,bytes,address)", +"4ea9f789": "Adjusted(address,uint256)", +"4eaa0308": "_toHex(uint256)", +"4eaa1b87": "txs(address)", "4eaaad7b": "left72(uint256)", +"4eaaf628": "getBlockedAddressCount()", +"4eab1a4c": "addPartner(string,address,uint256,uint256,uint256,address,uint256,uint256,bool)", "4eab38f4": "depositReclaim(uint256,uint256)", "4eab3998": "Allocations()", +"4eab3c10": "tempLockedAddress(address)", +"4eab8731": "addPending(address)", +"4eab9ed3": "getRegisteredVerifiers()", +"4eabfbb2": "donateToLexDAO()", "4ead4771": "getBIDList()", +"4ead5b0c": "autoToWbnbRoute(uint256)", +"4ead6e51": "_getSyntheticDecimals(address)", +"4eae0e9f": "UpdateVictimAddress(address)", "4eae51f4": "getHeirs()", "4eae8e30": "isSenderApprovedFor(uint256)", "4eaef8a2": "getCEOHashing(address,uint256)", +"4eafbcd5": "isValidPlugin(address)", +"4eafd3ff": "createOption(uint256,uint256,uint256,uint8,address)", "4eb03f6e": "updateMinter(address)", +"4eb04f9a": "onCloseEntry(uint256)", "4eb054e6": "createPinMoTrade(bool,uint256,uint256)", "4eb06f61": "manualLockFunds()", "4eb09bf4": "getParametersHash(uint256,uint256,uint256,uint256,address,address)", +"4eb0d5a1": "WalletWithdrawChanged(address,address,address)", +"4eb129c8": "RemoveToken(address)", +"4eb12d7f": "communitySaleWhitelist(uint256)", "4eb1483d": "IcoAddress()", "4eb166af": "right73(uint256)", +"4eb1b7c1": "totalLpAllocPoint()", "4eb1e71c": "HashTestCoin()", "4eb1f578": "saleValve(bool)", "4eb21301": "currentSaleCap()", "4eb259aa": "burnAndReturnAfterEnded(address)", +"4eb26ec4": "approve_282(address,uint256)", "4eb2a8fb": "Banear_Oraculo(address)", "4eb3148e": "feesTakenFromPrize(uint256,uint256)", "4eb333c7": "setSynthesizingAuctionAddress(address,address)", "4eb37fe7": "Tournament(uint256,uint256,uint256,uint256,uint256)", "4eb396cd": "mintByMintable(address,uint256)", +"4eb3ca67": "testInitialParams()", +"4eb40e90": "claimAdvisorsTokens()", "4eb421e5": "MockFailUpgradeableToken()", +"4eb445e0": "setCoreVaultAddress(address)", +"4eb4dbc2": "mintToContract(uint256,bool)", "4eb4fe80": "getBackLendingItem(uint64)", "4eb5162e": "collectSellFee()", "4eb56999": "claimRefundVaultOwnership()", "4eb665af": "setLockDuration(uint256)", +"4eb67839": "EventSealed(address)", +"4eb696b8": "show_eth_balance()", "4eb7221a": "nameRegistry()", +"4eb7385d": "seed(address,address,address)", +"4eb76529": "Uunit(uint256)", +"4eb7be5b": "setDistrictAddress(address)", "4eb7d857": "getSite(uint256)", "4eb81ba4": "getSchellingRoundDetails()", +"4eb84bff": "withdrawERC1155(uint256,uint256)", +"4eb864ce": "launch_attack()", +"4eb8b448": "totalSupplyNN()", "4eb8ffb4": "ORACLIZE_GAS_LIMIT()", +"4eb9281f": "initializeDmgBalance()", "4eb933bf": "withdraw(bytes32[],address[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", "4eb94102": "setAuctionManagerAddress(address,address)", "4eb94872": "Err(string)", "4eb95b97": "DropNotice(uint256,string,string,string)", +"4eb9b592": "doubleProxy()", +"4eb9f3ce": "totalStakedUbxg()", +"4eba0383": "rewardTokensByProtocol(address)", +"4eba2e3d": "stakeToExistedLabel(bytes32,uint256)", +"4eba9577": "canUpdateReferrer()", "4ebab5cf": "specificApprove(address,uint256)", +"4ebb380e": "add_allowedAddress(address)", +"4ebbc92a": "exist(uint256)", +"4ebbe762": "setPoolParameters(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4ebbfc15": "contractEndTimestamp()", +"4ebc0694": "wTransfer(address,uint256)", "4ebc31f3": "managerETHcandidatAddress()", "4ebc7a9c": "processReinvest(address,bool)", "4ebcdc2b": "SwapStarted(uint256)", "4ebd7741": "extraMint(address)", +"4ebde053": "subUserDCP(address,uint256)", "4ebe2d46": "createMultisig()", +"4ebe8ae2": "getLeagueParticipantCount(uint256)", +"4ebf59d2": "isAgent(address,address)", +"4ebf68cf": "PendingYield(address,address)", "4ebfa8bc": "getUserBettingInfo(address,uint256)", "4ebfd6e8": "freeForAll()", "4ebfff02": "setAddressAPI(address,address)", +"4ec032ba": "amountOut(address,uint256)", +"4ec0568f": "sellVoucher_new(uint256,uint256,uint256)", +"4ec0692c": "totalActiveStakings(uint256)", "4ec06982": "paybackToDepositer(address,uint256)", "4ec0744d": "UtrustToken()", "4ec109f4": "receiveToken(address,address,uint256)", @@ -45181,6 +82759,7 @@ "4ec18db9": "poolSize()", "4ec19512": "calculateRunway()", "4ec1adf1": "callAMethod2(uint256)", +"4ec2051f": "rstakd()", "4ec24fa0": "getManagementProxy(uint32,int256)", "4ec2b417": "getBankKYC(address)", "4ec2cde6": "totalSupplyForCrowdsaleAndMint()", @@ -45188,60 +82767,125 @@ "4ec32507": "parentBlockInterval()", "4ec42e8e": "antToken()", "4ec4878b": "donateJackpot()", +"4ec4f153": "strikeAssetSpentBuying()", +"4ec5122c": "addContractTokens(uint256)", +"4ec5908d": "setFeeTaker(address)", +"4ec5a393": "setPresale(address,uint256)", "4ec6396d": "TransChain()", +"4ec63ffe": "getLocator(address)", +"4ec675a0": "retrieveDouble()", +"4ec67f6e": "balanceStaked(address)", "4ec6a61a": "InitializeCoinToUser(address)", +"4ec6e056": "voter2VotingValue(address,uint256,address)", +"4ec70a48": "getExpiration(address)", "4ec70fde": "publicMin()", "4ec7344e": "MetaFoxToken()", "4ec735ae": "revokePermission(address,address,bytes4)", "4ec79937": "approve(bytes32,bool)", "4ec7a6e7": "externalSale(address,uint256,uint256,uint256)", "4ec7b58b": "delSaleOwner(address)", +"4ec7c45b": "marketAuctionGetTokenPrice(uint256)", +"4ec7c973": "allRestrictionsLifted()", +"4ec7dbfd": "tradeOrders(uint256)", "4ec7ddc0": "addCommitteeVote(address)", +"4ec81af1": "initialize(address,uint256,uint256,uint256)", +"4ec844a7": "wrapHegicTest2(uint256)", "4ec883d1": "editRestrictedAddress(address)", "4ec8a8ff": "unpausecontract()", +"4ec8c03d": "percentageComplete()", +"4ec90c2e": "testCalculateInterestIndex_BackOfEnvelopeSmallInterest()", "4ec9ef9c": "calculateTokenPurchase(uint256,uint256)", "4eca4b19": "sendCoins(address,address,uint256)", +"4ecaecbb": "mappingTokens(uint256,address)", "4ecb02aa": "firstTierDiscountUpperLimitEther()", "4ecb1390": "saleTokens(address,uint256)", +"4ecb1ff4": "checkException(bytes32,uint256)", "4ecb35c4": "confirmations(address)", "4ecb5e79": "IamGROOT()", "4ecb8d0f": "transferOwnershipSend(address)", "4ecc6eab": "setDefaultBuyerLastPaidAt(uint256)", "4ecc7f59": "assignPreicoTokens()", +"4ecc92ea": "POOL_ON_CYCLE(uint256)", +"4eccc38f": "showPixel(uint256)", "4ecd4aa9": "createRequestAsPayeeAction(address[],bytes,int256[],address,bytes,string)", "4ecd73e2": "DistributeDividends(uint256)", "4ecd81b3": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32,address)", "4ecdf165": "rareIdRange()", +"4ece7ca3": "is_safe_withdraw_investment()", "4ece90a8": "getERC20()", +"4ecea80d": "nodeWithdraw(address)", +"4ecf518b": "levels()", +"4ecf55d2": "numberOfEndorsees()", "4ecf77d3": "getUnfinishedGames()", +"4ecfb52d": "waitNewOwner()", +"4ed02622": "getTickets()", +"4ed067dc": "transferFrom_t(address,address,address,uint256)", "4ed0694f": "kkICOTest77()", +"4ed0829a": "executeOrder(address,address,uint256,uint256,address,bytes32)", "4ed0efd1": "selfdestructs()", "4ed250bf": "freezeTime(uint256,uint256)", +"4ed300b9": "redeemUnderlyingAndTransfer(address,address,uint256,uint256)", +"4ed367a8": "approve_9(address,uint256)", +"4ed37f02": "LOT_PRICE()", "4ed3881e": "setTokenTransferIdentifier(string,bytes4)", "4ed3885e": "set(string)", +"4ed38faf": "adminAddresses(address)", +"4ed3faf2": "boxes(uint256)", +"4ed474d7": "finishBlock()", "4ed4831a": "all(bool[7])", "4ed4d42a": "transferTokenAddress(address)", +"4ed56c47": "confirmTransferRoot(bytes32,uint256[],uint256[])", "4ed577bb": "IssuedToken(string,string,uint256,uint256)", +"4ed57fa1": "WordSizeIncreased(string,uint256)", +"4ed5c558": "metadataURIs(uint256)", +"4ed5ce52": "safeSwap(address,address,address,uint256,bytes,uint256)", "4ed600d1": "confirmVestingSchedule(uint256,uint256,uint256,uint256)", +"4ed6a5f7": "mintFor(address,string)", +"4ed6f0f7": "BASE_AMOUNT_DALIY()", +"4ed734f5": "pendingFarmToken(uint256,address)", +"4ed73d28": "multiClaim(uint256[])", +"4ed75d47": "switchMembership(address)", "4ed767a1": "totalFinalised()", +"4ed79938": "changeDistributionAmount(uint32,uint256)", "4ed7cb10": "XXXXXXXX10(address)", +"4ed8491d": "_bfi()", "4ed8579e": "setGPSMaxEth(uint256)", +"4ed857ac": "addSignature4NextOperation()", "4ed87713": "ADVISORS()", +"4ed8b3b3": "commissionDivisor()", +"4ed90a64": "_TOTAL_BASE_()", +"4ed9a7b6": "streamLpDuration(address)", "4edac8ac": "num_claimed()", +"4edb34f1": "setSakePerBlockYieldFarming(uint256,bool)", "4edba7bf": "adapterEnabled()", "4edbca6e": "getCategory(uint256,uint256)", "4edbe9f7": "MintCommandBonus()", +"4edbfac5": "WalletUpdated(address)", +"4edc5201": "updatePair(address,address,uint256)", "4edc689d": "allowAddress(address,bool)", +"4edc74dd": "approve_353(address,uint256)", +"4edc7f81": "feeReviewNow()", +"4edc8348": "getSuccessMessage()", "4edc8ccf": "registerEIP777Interface()", +"4edc9354": "setOneToken(address)", "4edccd31": "replace_square(uint256,bool,uint256,address)", +"4edcd374": "getInitialTimestamp()", "4edce4e1": "push(int256,bool)", "4edd0d07": "setConsumeTokenAddress(address)", "4edd74e8": "reservesBalance()", +"4edd8ee2": "NewVotesFor(address,uint256,uint256)", "4eddbd8d": "getCurrentPrice(uint128,uint128,uint24,uint64)", +"4eddbea0": "harvestOnly()", "4eddcf5b": "setReleaseBlockNumber(uint256,uint256)", "4ede23c8": "addressNotNull(address)", +"4edeb834": "getFee(address,uint256)", "4edefd31": "setExpireDelay(uint256)", "4edefe83": "doBroadcast()", +"4edf3f28": "creatorToSeasonToContract(address,uint32)", +"4edf5b95": "set_duration(uint256)", +"4edf8d51": "startSaleCAKEX(uint256,uint256,uint256,uint256,uint256)", +"4edf9785": "md5TokenToRosterIndex(uint128)", +"4edfe823": "checkpoint(uint256,uint256,uint256,bytes)", "4ee0ab0d": "forceEnd()", "4ee0b9a9": "DaoHubVerify()", "4ee0cb8a": "CutieBit()", @@ -45249,114 +82893,193 @@ "4ee0d066": "setTotalsContract(address)", "4ee16aba": "contributeToPurse(uint256)", "4ee1d045": "secPerBlock()", +"4ee29278": "advanceEnd()", "4ee29ec5": "getNumberOfAssertions(uint128)", "4ee2a3df": "setTargetDiscountValue2(uint256)", "4ee2cd7e": "balanceOfAt(address,uint256)", "4ee3659d": "AGC()", +"4ee392ce": "minimalgoalReached()", "4ee3ad07": "HareemCoin()", "4ee3c579": "DurioToken(string,string,uint8,uint256)", "4ee3dc91": "publicToken()", +"4ee44819": "priceCheckBal(address,address,uint256)", "4ee4d731": "enableMETTransfers()", "4ee4d8fa": "isGlobalConstraintRegistered(address,int256,address)", "4ee51a27": "airdropTokens(address[])", +"4ee54ed1": "message(address,uint256)", +"4ee6085c": "drmMaxFee()", "4ee67d33": "Etheradium()", +"4ee6b167": "pairaddr()", +"4ee6d0e3": "createVesting(address,uint256,uint8,bool)", +"4ee6fa13": "SNAIL_REQ_REF()", "4ee7ca3a": "erc20FOBS(string,uint8,string)", +"4ee7de12": "ERROR_REASON_TO_FROZEN()", +"4ee8acc0": "wStableCoin()", +"4ee9159a": "getComptrollerAddress()", +"4ee99007": "getWidthDimensionArtworkInCm()", +"4ee9d0e2": "getEntry(address,bytes)", +"4ee9e616": "setPrimarySaleFee(uint256)", "4ee9eb70": "InformRebuyTo(uint256,address)", "4eea636f": "GROWCHAIN(uint256,string,string)", +"4eea66dd": "delegateCreateRole(address)", "4eea9a8d": "withdraw2(address)", +"4eeaa212": "contractaddress(address)", "4eec0185": "aomracoin()", "4eec44b4": "beforeBalanceChanges(address)", "4eeca076": "Counter()", "4eecafdb": "ifEndGetting()", +"4eecf64e": "giveMeDayLast()", +"4eed356c": "MakeAdded(uint256,uint256)", "4eed8a45": "LogTokenAllocation(address,uint256,uint256)", "4eed965e": "_createGame(string,address,uint256)", +"4eedafb8": "rewardTokensAddresses(uint256)", +"4eedb30d": "requestFutureStrategy(address,address)", "4eee121f": "setOrCacheTargetReporterGasCosts(uint256)", "4eee424a": "removeClaim(bytes32)", "4eee59b3": "guess(string)", "4eee8c25": "tokenBuyCost()", +"4eee8c94": "activeProjects(address)", +"4eee8d15": "setPublicSwapSetter(address)", "4eee966f": "setTokenInformation(string,string)", "4eeea29d": "transferPreSaleBalance(address,uint256)", +"4eeeccb9": "setApy(uint32,address)", "4eeedef1": "BCALAttToken()", "4eeee8ac": "updateFighterBattleStats(uint256,uint64,uint16,uint64,uint16,uint16)", +"4eeefbc0": "_SmallBig(address)", "4eef440c": "bonusLevel0PercentModifier()", "4eef683d": "PALAIR()", +"4eefee34": "buyTicket(uint16)", "4ef02cf3": "preicoEndDate()", +"4ef05a71": "issuingFinished()", "4ef05de3": "evacuate()", +"4ef0c5e9": "AppendSubBroker(uint256,uint256,address)", +"4ef0c6cc": "computeLiquidityShareValue(uint256,address,address)", "4ef1a23a": "manualInsuranceResolution(bytes32,uint8,bytes32)", "4ef20030": "_setTokenMeta(uint256,bytes)", +"4ef30cbc": "canSortPR(uint256)", +"4ef36620": "CanUpgradeLv(address)", "4ef37628": "getChallengeNumber()", "4ef39b75": "finalize(address)", +"4ef39c70": "exitDai()", "4ef3f235": "changeMaintenanceTime(uint256,uint256)", "4ef45cac": "Announcements()", +"4ef4c3e1": "mintAllowed(address,address,uint256)", +"4ef4d496": "GameEnd(bytes32,address,uint256)", +"4ef4ebaf": "_token0()", +"4ef501ac": "adapters(uint256)", "4ef50711": "apply4Redeem(uint256)", "4ef5710a": "WatchNumberOfPlayerInCurrentRound()", +"4ef5a008": "testOutOfMem(uint256)", "4ef65c3b": "setUint(uint256)", "4ef6b8ce": "Certificate()", +"4ef77781": "YOP()", +"4ef78c95": "ethv()", "4ef8086a": "switchManagerAndRemoveOldOne()", "4ef83a70": "withDrawEth(uint256)", "4ef85140": "CAOsale(uint256,uint256,string,string)", "4ef8885f": "getSocialAccountPw(bytes32,bytes32,bytes32)", +"4ef8ddfa": "balancess(uint256)", "4ef8ff33": "MIN_INVESTMENT()", "4ef94e34": "setMilestones(uint32[],uint8[],uint32[])", "4ef98616": "CelebsPartyGate()", +"4ef98ff9": "fingerprint()", +"4ef9e475": "LockPoolsCount()", +"4efa0d9c": "onbuyname(bytes32,uint256,bytes32,address)", "4efa45a1": "addAddressSetting(string,address,address,address,string)", +"4efa8f17": "claimCounter()", +"4efaaa1b": "voteUsingAssembly(address,uint256)", +"4efaaf85": "pendingToken(address,address)", +"4efac6c6": "getUserMaxPeriodId(address)", +"4efae47c": "_cancel(uint256)", +"4efaf879": "postElectricityOffer(uint256[],uint256[])", "4efb023e": "totalModerators()", "4efb04ff": "created_contracts(address)", "4efb7296": "updatePlotData(uint256,string,string)", "4efbb734": "PublisherRegistryReplaced(address,address)", +"4efbc58e": "getReconciliationAdjuster()", "4efbe933": "buyForHackerGold(uint256)", "4efc067f": "getAuraValue(uint256)", +"4efc9efd": "optionToSettings(uint256)", +"4efca911": "addOperatorAndAdmin(address)", "4efcc69e": "ExMoneyToken(uint256,string,string,address)", "4efd0848": "_refreshVoteForVoter(address)", "4efd1551": "add(address,address,uint256,uint256)", "4efd9e2c": "updateMinContribution(uint256)", +"4efdbf26": "toOnlyTaxExempt(address)", "4efdd4f9": "viewUnclaimedResearchDividends()", "4efddcd9": "artWorkChangeByAdmin(uint256,string,uint256)", +"4efe2df6": "_encode_sfixed64(int64,uint256,bytes)", "4efeb2cf": "crowdDistribution()", "4eff13dc": "OFFER_SIZE()", +"4eff3d3d": "getMonths(uint256,uint256)", "4eff86e7": "RBFToken(uint256,string,string)", +"4effae80": "claimFees(bytes32)", "4f0016d0": "endContract(uint256,uint256,uint8,bytes32,bytes32)", "4f002522": "set_creature_builder(address)", +"4f00513e": "createInsurance(uint256)", +"4f0092ab": "tokensTotal(uint256)", +"4f011356": "updateExerciseCost(string,uint256)", "4f011d9d": "getIntermediary(uint256)", "4f013184": "investInTheSystem()", "4f013ea6": "_THOUSAND()", "4f01541e": "setReceiverAddress(address,address)", +"4f016c95": "RequireThat1(bytes32,uint256)", "4f01d77e": "manual_lottery(bytes32)", +"4f01d977": "placeBet(uint256,address,uint256,uint256)", +"4f029c39": "artblocksPercentage()", "4f02c420": "minted()", +"4f030d3d": "newTimeLock(address,uint256,uint256)", +"4f036aaa": "distribution72()", +"4f0371e9": "addOffer(string)", +"4f038450": "exerciseETH(uint256)", "4f03c340": "proposeTx(address)", "4f046439": "updatePurchaseSize(uint256)", +"4f047e8a": "mintArtwork(string,string,string,string,uint256)", "4f04a36e": "setDesignatedReportPayoutHash(bytes32)", "4f04af35": "CORReserveAllocation()", +"4f0508ec": "CrowdSaleLocked(bool,uint256,uint256)", +"4f05160e": "getCofixETHSapn()", "4f052648": "XaurumDataContract()", "4f052b82": "UNLOCK_OUTINGRESERVE()", "4f057506": "Limit()", "4f059a43": "getClaimAmountForBlock()", +"4f05b254": "NewAgreement(address,bytes32,uint32,uint32)", "4f062c5a": "getTier(uint256)", "4f065672": "Start(string,bytes32)", "4f0693a1": "BONUS_LATCH()", "4f069517": "removePublicSalesSpecialUser(address)", +"4f069f66": "setIssueLimit(uint256)", "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()", +"4f07f403": "getPoolValue(address,bytes32)", "4f082843": "enableChain(uint256)", "4f084c0c": "payLast(uint256)", +"4f084c93": "ETHToNUX(uint256)", "4f089298": "Etch(bytes32)", "4f089898": "updateBlackListTrader(address,bool)", +"4f08e634": "setNftShard(address)", "4f090ab4": "burnPrimordialToken(uint256)", "4f0913ef": "MANHATTANPROXY6THST()", "4f092510": "allowIgnoreTokenFallback()", +"4f094d08": "pendingUnlock(address,uint256)", "4f09cfc5": "changeDiviRate(uint256)", "4f09eba7": "proxyApprove(address,uint256,bytes32)", "4f0a195e": "totalBasicIncome()", +"4f0a32de": "getNextResultWithValidity()", +"4f0a56ab": "RecoinOption()", "4f0a746f": "blacklistAddress(address,address)", "4f0a97b9": "test_basicThrow()", +"4f0addca": "updateRPMap(address,bool)", "4f0b0deb": "gameCreate()", "4f0b584e": "getCCH_edit_18()", "4f0b8374": "addToPrivilegedList(address)", "4f0b9a2b": "KarTokenERC20(uint256,string,string)", +"4f0be24d": "_hasEmptyAccount(address)", "4f0c563f": "depositBonus()", +"4f0c8fdf": "flipSwitch()", "4f0ca055": "getMiniPoolEdit_5()", "4f0cae88": "balanceThis(address)", "4f0cc59d": "swapID(address,bytes32,uint256)", @@ -45365,70 +83088,112 @@ "4f0cf7e1": "fillTradesInfo(bytes32,uint256,uint256[])", "4f0d8533": "addNewStreetType(string)", "4f0ddd27": "getTemplate(string,string)", +"4f0df281": "sellBlocks(address,uint256,uint16[])", +"4f0e0ef3": "wethAddress()", "4f0e3333": "wedaddress()", "4f0e3dad": "USD_GOAL()", "4f0e760a": "_takeOwnershipOfTokenFrom(uint256,address)", "4f0e8656": "showAdmin()", "4f0eaf96": "oraclizeCallbackGas()", +"4f0f4251": "set(uint256,uint256,bool,uint16,uint256)", "4f0f4aa9": "getNode(uint256)", "4f0f539e": "getActiveMessage()", "4f0f97ab": "TokenForSale()", +"4f1002dc": "pendingXYZD(uint256,address)", +"4f10196c": "accountRewardBlockNumber(address)", "4f1069ad": "serchIndexByAddress(address)", "4f10a0bd": "_createAvatar(string,address,uint256)", "4f10acc1": "updateGoldFeeData(uint256)", "4f1157aa": "EtheriumWall(string)", +"4f11815c": "timeSinceInterestAccrualOnLoan(address,uint256)", "4f118ad7": "GenericToken(string,uint8,string,uint256)", "4f11ca65": "distributeTeamTokens()", +"4f11d7d1": "HUSD()", "4f11e07d": "getProof(address,uint8,bytes32)", "4f1243d7": "pepsToken()", +"4f12fe97": "apply_new_fee()", "4f139314": "compensateLatestMonarch(uint256)", "4f13e130": "fightAsuriMonster()", "4f13fc0a": "setCompte_30(string)", +"4f144609": "getReserveLastUpdate(address)", "4f150787": "batchFillOrKillOrders(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"4f150a80": "fnWithDoWhileLoop(uint256)", +"4f1536ba": "disablePartnerKYC(address)", +"4f15386f": "trancheCounter()", +"4f15bfa3": "round2RATE()", +"4f15fc33": "calTotal(uint256)", "4f161245": "getUIntValue(string)", "4f162f8f": "icoEndTimestampStage4()", +"4f1652e0": "transferableAmount(uint256)", +"4f16c09e": "eSetAddr(string,address)", +"4f176eed": "setearlyBonusPercentage(uint256)", "4f18d6fb": "BITAD()", "4f190ed2": "changeDekzAddress(address)", "4f192fa3": "MajestyAssetsJunction()", "4f197ee7": "transferPackageOwner(string,address)", +"4f19c50e": "canBeginVoting()", "4f19e977": "INVALID_ORDER_SIGNATURE(bytes32)", +"4f19f8cc": "TotalStakingRewards(address)", +"4f1a0f7d": "emergencyDrain24hAfterLiquidityGenerationEventIsDone()", "4f1a5b86": "tokenReserved1()", +"4f1a720a": "maxProfitBasisPoints()", "4f1a7678": "getInsuranceDataByID(uint64)", "4f1a892b": "setSectionForSale(uint256,uint256)", +"4f1ad1ac": "completeSwap()", "4f1ae61a": "releaseFeesAndBountyJM(address,uint256)", "4f1afb63": "ownerforce()", +"4f1b14eb": "new_epok()", "4f1b2d4f": "toBool()", +"4f1b86eb": "tokenToBurn()", "4f1bbc4d": "SuccessAuctionEvent(address,address,uint256,uint256)", "4f1c3417": "getSpawnProxy(uint32,int256)", "4f1c3b66": "setAccountData(address,uint8,bytes32)", "4f1c8d0f": "milkBalanceOf(address)", "4f1d38c0": "activeCrowdsalePhase3(uint256)", +"4f1d4832": "giftNifty(address,uint256)", +"4f1d6546": "_startDates(uint256)", "4f1d76ef": "buyabletoken()", +"4f1db702": "mined(address,uint256)", "4f1e0d0b": "getGoldInfoCustodian(address)", "4f1e4334": "setMinBalanceForContractCreation(uint256)", +"4f1e7d91": "setBscxPerTicket(uint256)", "4f1ea770": "bc(uint256,address)", +"4f1eb3d8": "collect(address,int24,int24,uint128,uint128)", "4f1eb4b2": "proposalInProgress()", "4f1ef286": "upgradeToAndCall(address,bytes)", +"4f1f3540": "addBump()", "4f1f421b": "SuMain()", "4f1f99aa": "changeOzreal(address)", "4f1fa7ef": "streamityContractAddress()", +"4f1fb77b": "last_incoming_batch_block_num()", +"4f1fbeb0": "updateList(address[])", +"4f1fdc01": "newTemplate(address,uint256)", +"4f205577": "unsoldAllocationOrders(bytes32)", "4f20f35a": "payExpenses(address,uint256)", "4f219ceb": "getPlayRate(uint256,uint256)", "4f223fe3": "StatefulFactory(string,string,string)", "4f224baa": "setMetaBaseUrl(string)", "4f2253d4": "addStudent(string,string,string,bytes32)", +"4f226639": "addDocToVariableMappings(bytes32,string,string)", "4f22bcf8": "allocationAddressList(uint256)", +"4f22cbf9": "rfyPerBlock()", +"4f232d50": "stakingMultiplier(uint256)", "4f232f77": "transferFromRoot(address,address,uint256)", +"4f235207": "parties(address)", +"4f23618f": "withdrawCount(address)", "4f238029": "getSaleAuctionAddress()", "4f23cce0": "ownerBetsCount(address)", "4f23e50a": "defineReward(string,address,uint256,uint256)", +"4f24156d": "viewContractTokens()", "4f24186a": "newProposal(string)", "4f242cde": "startICO(uint256,address)", "4f245ef7": "auctionStart()", +"4f247d2e": "CrowdSalePurchaseCompleted(address,uint256,uint256)", "4f248409": "endICO()", "4f24e471": "numRewardsAvailableSetForChildAddress(address)", "4f255b80": "getCharacterIndex(uint32)", "4f256693": "addFile(bytes32,bytes32)", +"4f2571d6": "mintTokenForClient(address,string)", "4f2578ba": "getVestedFounderTokens()", "4f25a319": "PUBLICSALE_STARTTIMESTAMP()", "4f25d6dd": "solveTime()", @@ -45436,156 +83201,297 @@ "4f25eced": "distributeAmount()", "4f26ef80": "buyAd(uint256,string,string)", "4f271740": "UNFREEZE_DATE()", +"4f272305": "TransferAdminship(address)", "4f27869e": "defaultExit(uint256,bytes,bytes32,bytes,bytes,bytes32,bytes,bytes)", +"4f27c566": "HardCapReached(uint256)", "4f27ce68": "setSlogan(uint64,string)", "4f27de64": "ByteExtractor()", +"4f27f626": "openBoosterCard(uint256)", +"4f27fd28": "COMMUNITY_AND_AIRDROPS()", "4f28216a": "lowContributionAward(address)", +"4f283d6a": "WINTERrtAirdropWINTER(uint256,uint256,uint256,uint256)", "4f284594": "info_TotalSupply()", +"4f2896bb": "setProxyXdai(address)", +"4f2898c6": "getSbtFnMap(uint64)", "4f28af6a": "handleBet(uint256)", +"4f28bf2e": "sellContract(address[],uint256)", "4f28c443": "AIRDROP_TOKENS_PERCENT()", +"4f28cac2": "maxSwapSize()", "4f297b2b": "TokensGiven(address,uint256)", "4f2989af": "indexExists(bytes32)", "4f2996ab": "getBalanceByEscrowId(uint256)", +"4f29e848": "kingDeposit(uint256)", +"4f2a367e": "AccountFrozen(address)", "4f2af869": "lastCalculatedToken()", "4f2b0e41": "preSaleFund()", +"4f2b529d": "airDroppedStake(uint256,uint8,uint256,uint256,uint256,bytes32[])", +"4f2b9629": "removeUniPair(uint256)", +"4f2ba10c": "balanceOfAtTimestamp(address,uint256)", +"4f2ba577": "updateRef(string,string)", "4f2be91f": "add()", +"4f2bfe5b": "votingEscrow()", "4f2c9196": "getUsedBySoftwareLength()", +"4f2ca654": "bmem(uint256)", "4f2cc469": "transferZeroTokensTest(address)", +"4f2ccab3": "Approval(address,uint256,address,bytes)", "4f2cd9cc": "auditConfirm()", "4f2d7ab5": "contributionMinimum()", +"4f2eab85": "addi1()", +"4f2ee5c4": "UNIBLK()", "4f2eebc3": "PreSaleStartTime()", +"4f2f6f89": "self_info()", +"4f2f813c": "removeReward(bytes16,uint256,address)", +"4f2fbb9d": "setReleaseAmount(uint256)", +"4f3029c2": "setUint256(bytes32,uint256)", +"4f306a66": "OPEN_PROXY_ACTIONS()", +"4f30f09e": "mint(address,address,address,address,uint256,uint256)", "4f318dd8": "confirmVestingSchedule(uint256,uint256,uint256,uint256,uint256)", "4f31cc51": "frozenTokenTransfer(address,uint256,uint8)", "4f31e3ec": "minRoundSize()", "4f32c65b": "emitFuture(bytes32,uint256,uint256,uint256)", "4f32de0a": "request_payout_holder()", +"4f32e48a": "checkPermissionWithGroup(address,address)", +"4f32e979": "sendSellerPayback(bytes32,address,address,uint256,uint256,uint256,bytes)", "4f33428a": "setConsolationRewardsRequiredFaith(uint256)", +"4f335d0a": "feeOn()", +"4f337dd5": "DEV_FUND_POOL_ALLOCATION()", "4f33a013": "artHash()", +"4f3424df": "estimatePayValue(uint256)", "4f346a7d": "emit(address,uint256,uint256)", +"4f348176": "optionContract()", "4f348b46": "getTokenAmountOnAdd(uint256)", +"4f34e9ca": "DIGIT_MIN()", +"4f361988": "collectTransfer(address,uint256)", +"4f364b6b": "approve_427(address,uint256)", "4f3655a8": "verifyBet(uint256,uint256)", "4f36fbdc": "setMinMaxPriceInWei(uint256,uint256)", "4f36fec8": "hardCapSale()", "4f3741b5": "RateChanged(address,uint256,uint256,uint256)", +"4f377035": "getItemIDsByOwner(address)", +"4f377639": "setSaleParams(address,address,uint256[2],bool)", +"4f3780c1": "secsLeftInWaitingPeriodForExchange(uint256)", "4f37edfd": "burnAndRetrieve(uint256)", "4f383934": "setMyTokenList(address[])", +"4f38d666": "UniswapFactory()", +"4f392320": "collectOption(uint256)", +"4f393a07": "setReservePool(address)", +"4f39433f": "doSushiswapV1Buy(address,uint256)", "4f39ca59": "drop(bytes32)", +"4f3abbdf": "bonusPoolReward(uint256,address)", "4f3b1fb6": "unlock(string,address,bytes32,string)", "4f3b8938": "mythexTokenAddress()", "4f3bb920": "lockDownPeriod()", "4f3c1542": "getMarginRatio()", +"4f3c48de": "adminMigrateNFT(address,uint256,address,uint256,uint256,string)", +"4f3c5f06": "_ownedTokens(address,uint256)", +"4f3cef84": "lockSetProxy()", "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)", +"4f3dab0e": "Take_Token(address,uint256)", "4f3ded8a": "getFinalPaymentAmount()", "4f3df0a8": "getRemainingTimeOf(uint256)", +"4f3e1efc": "getCurrentSupply()", +"4f3e263c": "availableLPs(uint256,address)", +"4f3e4c4c": "disableSideChain(uint256)", +"4f3e8aca": "lotteryEnter()", +"4f3e98ab": "principalForBucket(uint256)", +"4f3ef503": "setOutAdjust(uint256)", +"4f3f23e4": "compute(address,int24,int24)", "4f3f2cbc": "changeFeeModifiers(address)", "4f3f4211": "awardDailyLottery(address,uint256)", "4f3f5746": "participatingIn(address)", "4f3fc162": "removeOriginByIndex(uint256)", +"4f3fc2df": "stakingRewardRate()", "4f3fd173": "get10Animals(uint16)", +"4f3fd79f": "getContractTokensBalanceOfArray(address,address[])", "4f3fed94": "tokenIncrease()", "4f4027d0": "SHAREHOLDERS_SHARE()", +"4f40439d": "monthlyStakePercentage(uint256)", +"4f411f7b": "lexDAO()", +"4f41e95d": "rewardPerSec()", "4f4200e5": "setAddressOfERC20Token(address,address)", "4f424da3": "Bounties_Wallet()", +"4f4306e5": "nftoken()", +"4f4329bc": "CreateManualWhiteList(uint256,address)", +"4f434285": "approval(string)", "4f438a12": "provideTransactionFeedback(uint256,uint8,bytes32)", "4f438ddb": "changePercent(uint256,uint8)", +"4f443850": "updateAirdrop(address,uint256,uint256,uint256,uint256)", "4f44728d": "ownerChangeOwner(address)", +"4f447327": "allocatedPerWeek()", "4f4522b0": "getIntelligenceValue(uint256)", "4f452b9a": "isStormBirdContract()", "4f4548f9": "registerAudit(bytes32,bytes,bool)", +"4f4573ee": "pools(uint32,uint16)", "4f45779f": "mintTokensWithinTime(address,uint256)", +"4f45ae25": "Address_Whitelisted(address)", "4f45c308": "DocumentSigned(uint256,address)", "4f466ce6": "TOTAL_T8EXTOKEN_SUPPLY()", +"4f480e50": "want_usdc()", "4f4821e1": "createGiftTemplate(uint256,uint256,string,string)", +"4f48da09": "getTokenToBasePrice(uint256)", "4f48e46d": "get_all_payment(uint256)", +"4f492726": "unlimitTokenTransfer(address)", "4f494cad": "createAuction(uint256,uint128,uint128)", "4f495513": "privateSaleTokens(address,uint256)", +"4f49692b": "etherOutPercentageSum(uint256)", +"4f4a1671": "balancerToPiGasOn(address,address,uint256,uint256)", +"4f4a2b7b": "inCaseChangeBlacksmithDiscount(uint256)", "4f4a69c8": "TestTokkSale()", "4f4a6a66": "GovernanceDelOwner(address,address)", "4f4b30ba": "dropManualState()", "4f4b890a": "getCET6ById(uint32)", +"4f4bc120": "swapKyberAndRepay(uint8,address,address,uint256,uint256,uint256,address,bytes,bool)", +"4f4c34bd": "kycData(address,bytes32,bytes32,bytes32[],bytes32)", "4f4cd650": "getAllTellers()", "4f4d022b": "upgradeQualificationByTokens()", +"4f4d3300": "systemRetain()", +"4f4d3fb5": "collect(address,address,uint48,uint256,uint256)", "4f4d4728": "offeringEnded()", +"4f4d919b": "set721To721Ids(address[],uint256[],uint256[],address)", +"4f4dc71d": "zeroDistrFinished()", "4f4df442": "approve(address,uint256,uint256,uint256)", "4f4e1b74": "founderSwitchRequest(bytes32,bytes32)", +"4f4e2784": "getAthleteFollowingDistance(uint256)", +"4f4e4694": "revokeDCA()", "4f4e47f1": "stopAirdrop()", +"4f4e6eea": "setCloneFactory(address)", "4f4ec991": "PubToken(uint256)", "4f4ef121": "firstBonusSalesEnds()", +"4f4f06b0": "executeSubscription(uint256,bytes)", "4f4f23ef": "SundayFundayToken()", "4f4fa5a6": "removeReferral(address)", "4f501f27": "changeOuts(address,address,address)", "4f504d72": "getBalanceInPlay()", "4f50ef53": "allBids()", "4f511102": "setDeveloper(address,address)", +"4f5137f7": "futuresContracts(bytes32)", "4f51bf46": "getBidIdList()", +"4f51d172": "rewardpool()", +"4f51e294": "affiliates(address)", "4f52b2bc": "findLockupIfCTD(address)", +"4f52b5be": "removeGlobalConstraint(address,address)", "4f52ccfa": "beneficiary1()", +"4f530565": "claimables(address,address)", "4f53126a": "pauseGame(bool)", "4f538ae1": "rain(address[],uint256)", "4f53e83e": "smartProperty(uint256,string,uint8,string,address,uint256,uint256,uint256)", +"4f544a13": "SupplyChainObserver()", +"4f54bb4e": "ShowLastWallet(string)", +"4f54d9cd": "readAuthor()", "4f54f4d8": "getMatchDetails(bytes32)", +"4f550545": "do_air_drop(address,address[],uint256)", +"4f550db2": "tokenlist(bytes32)", "4f5539c0": "SetPrice(uint256)", "4f556b23": "onceoutTimePer()", "4f558e79": "exists(uint256)", "4f55f292": "convertIntoHtlc(bytes32,address,uint256,uint256,uint256,bytes32)", +"4f56133e": "clean(address,uint256)", +"4f56b78a": "SeedInvestment()", +"4f56f3e9": "addSpace(uint256,uint8)", "4f573cb2": "withdrawRevenue()", "4f57641c": "getHorse(uint256)", +"4f57952c": "AvailableDecreased(uint256,uint256,uint256,uint256)", +"4f57b60a": "setByte(uint256,bytes1)", +"4f57ca44": "getSecondsFromStart()", +"4f57e1e3": "m_Block_weight_of_Stack_Options(uint256)", "4f58704c": "ARI()", +"4f588bf1": "requestInfo(uint256)", "4f58d5c9": "getTokenUSDRate()", +"4f59113f": "DepositFToken(uint256)", "4f5963fb": "calculateYourValueEven(uint256)", "4f5a4eb9": "setAssetOwner(uint256,address)", +"4f5aac40": "multiBuy(uint8[4][])", "4f5af739": "getBirthTime(uint256)", +"4f5b0d1f": "get_usdt_reward()", "4f5b3318": "dateEndIco()", +"4f5b4236": "popUpdatedContract()", "4f5b9f23": "power2(uint256,uint256,uint32,uint32)", "4f5ba601": "airdropOn()", +"4f5bee44": "setAdminStatus(address,bool)", "4f5c6e0a": "bonusOne(uint256)", "4f5d06c2": "getPurchasePrice(uint256,uint256)", "4f5d5295": "chairBalance()", +"4f5deb80": "Mint(address,address,bytes32,string,bytes32,uint256,bytes32,uint256)", +"4f5e54db": "renounceDJ(address)", "4f5e6a8d": "whitelistedTransfer(address)", "4f5f560a": "founderOf(uint256)", +"4f5f88aa": "_getDODORegistryAddress()", "4f5fca97": "LimitEther()", "4f5fcb34": "authorize(string)", "4f6065e0": "get_presale_arbits_total(address)", "4f60ae2e": "DividendReceived(address,uint256)", "4f60f334": "multiAccessAddOwner(address)", +"4f61050c": "mcdDeploy()", "4f610e74": "getDeclaration()", +"4f615512": "allowedToCategorize()", "4f617b81": "unsetSectionForSale(uint256)", +"4f61d2d4": "my_string()", "4f61db15": "VEGAS()", "4f61ff8b": "kyberNetworkContract()", +"4f6201f6": "SingleTransact(address,uint256,address)", +"4f620536": "setBoss2Address(address)", "4f6247f8": "setThirdAddressBalance(address)", +"4f629fbb": "UPDATE_SETTINGS_ROLE()", +"4f63a772": "setCompanyAddress(address)", "4f645993": "lastMiningBlock()", "4f64808d": "createCustody(address)", "4f64aa09": "advisorsLock()", "4f64b2be": "tokens(uint256)", +"4f64f785": "BonusValue()", "4f653f09": "_scheduleTournament()", "4f655a61": "setMinimum(uint256,bool)", +"4f656b86": "elasticMultiplier()", +"4f65ba4c": "__getRegistry(address)", +"4f65c3db": "setStartblock(uint256)", "4f65cc3c": "ethToTokens(uint256,bool)", +"4f6646cd": "exp_5(uint256)", +"4f6662a8": "PurchaseTokensPayable()", "4f66a8ec": "getVotingData(uint256)", +"4f66a9df": "_onBoardUSDT()", +"4f66acea": "WhitelistAddEvent(address)", +"4f66e22c": "validplayers(uint256)", +"4f6705ff": "_MOAPP()", "4f6716d3": "whitelistAddressArray(address[])", "4f674164": "addBookSigner(bytes16,address)", +"4f6745b4": "delayWithdrawTime()", "4f67498e": "updateUSeqIndex()", "4f6754d7": "tenEndTime()", +"4f67a222": "qasher()", "4f67bd9e": "numberFor(uint256)", "4f67fe22": "LOG_OwnerAddressChanged(address,address)", +"4f68ea5f": "exchangeName()", +"4f697c37": "USERS(address)", +"4f69c0d4": "joinPool(uint256,uint256[])", +"4f69ccbd": "metaTransferHash(uint256,address,uint256,uint256)", +"4f69d4de": "approve_727(address,uint256)", "4f69dd3d": "triggerWithdraw(address)", +"4f6a35c5": "binaryUsers(uint256)", "4f6a441c": "getRandom8(uint8,uint8)", "4f6a461a": "CatalogPlayers()", +"4f6a8cbe": "setPoolCapUSD(uint256)", "4f6acaa1": "getLedgerCount(string)", "4f6adf48": "setPayOuts(uint256,string)", "4f6b1a70": "vuePayETHDestination()", "4f6b472d": "tokenSupplies()", +"4f6b8aac": "Set_URI(string)", +"4f6bb730": "getUnallocation(address,bytes32)", +"4f6bb73d": "getpurchaseableTokensAddress()", +"4f6c0edf": "orderPayoutFrom(string,address,uint256,string)", "4f6c3372": "CrowdSale_Halt()", +"4f6c58d7": "WHITELIST_MIN()", "4f6c63ea": "TeamRegistered(string,address,string,bool)", +"4f6c69ea": "TrustedCloserSet(address,bool)", "4f6c87fb": "STARTToken()", "4f6cb43f": "advisers()", "4f6ccce7": "tokenByIndex(uint256)", "4f6d04e7": "createSeedCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", "4f6d150d": "LuvCoin(uint256)", "4f6d20a9": "getRewardForAddress(address,address)", +"4f6d38d0": "burnThreshold()", "4f6d3aed": "refundGas()", "4f6d97ed": "MakeTransaction(address,uint256,uint256,string,string,uint8)", "4f6d9e16": "_settleAndRestart()", @@ -45593,10 +83499,19 @@ "4f6de652": "_getDepositedOrderDetails(uint256,address)", "4f6de831": "testComplexCombination()", "4f6fcc46": "getAirdropList()", +"4f70225f": "emitDummyBool(bool)", "4f7035b4": "DeleteAllRequests()", +"4f70445c": "contributeToken(uint256)", +"4f70742b": "getFeeRateAll()", "4f7132c0": "TokenDemo(uint256,string,uint8,string)", "4f71473e": "withdrawAll(address,address[])", +"4f71771b": "txDone(uint256)", +"4f71d589": "testFeeTokenWeth(address)", "4f71ef81": "parse(bytes32)", +"4f729632": "Process(address)", +"4f72b54b": "birthdate()", +"4f72d846": "routerContract()", +"4f72def6": "aggregatorKeys(uint256)", "4f72e1c3": "buyChamp(uint256)", "4f731087": "checkTokenBalance()", "4f734965": "setBBDPrice(uint256)", @@ -45607,31 +83522,54 @@ "4f73f1f8": "withdrawToAdress(address,uint256)", "4f73f71d": "getOwlmasterReq()", "4f7474cb": "closeAnnouncement(uint256)", +"4f74787b": "_getDORequest(uint256)", "4f74acfe": "buyEggs()", "4f74d4f6": "ftechiz()", +"4f755c3e": "cashierAddress()", "4f755fe7": "financialAccount()", +"4f7592f4": "ptoken()", +"4f75acda": "logAddresses(address[])", "4f75af3a": "tokensSuppliedFromReferral()", "4f75c464": "startExit(bytes32[],uint256)", "4f75e930": "UNLOCKINTERVAL()", "4f7666a9": "VisionG8()", +"4f76689b": "kassiakommercial()", "4f76a077": "addInvestorToWhiteList(address)", +"4f76c058": "getTickAtSqrtRatio(uint160)", "4f76c87c": "createSportEvent(string,uint8,uint256)", "4f76cb02": "testGetBitFailIndexOOB()", "4f772420": "changeFundContract(address)", "4f779753": "DimaCoin()", +"4f77ab3d": "setRewards(address,address,address)", +"4f77f684": "requestNewGemRandom(uint256,string)", "4f77feec": "getPositionInterestRate(bytes32)", +"4f78aa82": "getMintRate(address)", +"4f78c4ce": "FeeBpsSet(uint256)", "4f79409f": "LogBuy(address,uint256)", +"4f796b09": "pendingGum(uint256,address)", +"4f798da7": "UpdateBonusCodeAt(uint256,uint256)", +"4f79f7da": "withdrawToken(address,address,uint256,string)", +"4f7a4748": "setGemFactoryAddress(address)", +"4f7a561b": "UnstakeAll()", +"4f7a6cba": "WhitelistedAddresses(address[])", "4f7ac7ab": "toteLiquidatorWallet()", "4f7aede9": "add(uint8,address,uint256)", +"4f7ba1b0": "getProtect()", "4f7baec0": "test_mint(int256)", +"4f7bba60": "_daiBuyOn()", +"4f7bdf31": "batchTransferChild(uint256,address,address,uint256[])", "4f7c6552": "calcDividends(address)", +"4f7c95e0": "getActorAddress(bytes32)", "4f7cd683": "setReportRegistrationFee(uint256)", "4f7d4951": "addVIP(address)", "4f7d5de9": "setTimeRC(uint256,uint256)", "4f7d87ac": "PoiseToken()", "4f7dad6a": "buyToken(uint256,string,string)", +"4f7e3b38": "vasaPowerSwitch(uint256)", "4f7e7086": "iconiqToken()", "4f7eb571": "getHowMuchUntilHardCap_(uint256)", +"4f7eee80": "offerRPunkForSaleToAddress(uint256,uint256,address)", +"4f7f399b": "modelFinish(uint256)", "4f7fc13f": "CLIENT_TIME_TO_DECIDE()", "4f801270": "releasableBalanceOf(address)", "4f802f8a": "unagreeAmendment()", @@ -45639,47 +83577,89 @@ "4f8115a2": "tokensAddress(uint256)", "4f817a2a": "tInstance()", "4f81b930": "_sendFunds(address,uint256)", +"4f81c3d3": "calcLiquidityDesiredByRomove(uint256)", +"4f82517c": "_addresses(uint256)", +"4f825938": "revokeBlocklist(address[])", "4f829ee8": "set2(uint256,uint256)", "4f82ff41": "isCertified(uint256)", +"4f83158a": "staff(address)", +"4f83ae46": "getAdminRoleMemberCount()", "4f83fe64": "timeLocked(address)", "4f840761": "demandTrial(uint256)", "4f840c2b": "setMigrateToAddress(address)", "4f8411e5": "_approvedFor(address,uint256)", "4f851d73": "BineuroToken()", "4f85769a": "closingTimePeriodOne()", +"4f85f3ea": "isImplementationLocked(bytes32)", "4f8632ba": "user()", +"4f863ea1": "updateFees(uint8)", "4f868b94": "etherSince20()", "4f86bde2": "BuyFromFollower(address)", "4f879ff0": "StackLottery()", "4f883783": "CheckProofOfOwnership(bytes32)", +"4f887183": "setSwapMining(address)", +"4f8871de": "deflateBurnCutOut()", +"4f8894a4": "INTEREST_PERIOD()", "4f88cc3c": "returnAllPollStakes(bytes32)", "4f895031": "finalizeSale(uint256,uint256,uint128)", "4f896d4f": "resolve(uint256)", +"4f8a5a10": "nofOfStakers()", +"4f8a81aa": "_mintingTokens()", "4f8b9e64": "getBuyersList()", +"4f8c1722": "latestAmountOut()", "4f8c2a8a": "block02w()", +"4f8c2ed2": "custodians(uint8,address)", +"4f8c3b36": "withdrawSigner()", +"4f8c4847": "liquidations(address,uint256)", +"4f8c4a45": "HODL_ASSET()", +"4f8ca4f5": "ownerWithdrawRound(uint256)", +"4f8cfde3": "Init(address)", "4f8d40e1": "closeTournament(bytes32)", +"4f8d65f6": "invitedCount(address)", "4f8da1fe": "RewardWallet(address,address,address,uint256)", "4f8dd40a": "getOpinion(uint256)", +"4f8dd50d": "c(uint256)", "4f8e2fdf": "LinkToken()", "4f8e624e": "Greeter(string)", +"4f8e9f2c": "stakeAny(uint256,uint256[],uint256[])", +"4f8eee8a": "LavevelToken()", "4f8fb544": "erc223Received(address,uint256,address,uint256)", +"4f8fc3b5": "updateAvailableFunds()", "4f8fc8ef": "setNonceForPublicKeyX(uint256,uint256)", +"4f8fd36d": "SetSellPrice(uint256)", "4f8fe6a4": "THREE_YEAR_KEEPING()", "4f8ffd1f": "set_contrib_arbits_min(uint256)", "4f9000a0": "nextPrizePoolPercent()", +"4f905d51": "test_DSProxyExecuteNot32Multiple()", +"4f90830e": "approve_481(address,uint256)", +"4f91440d": "restake()", +"4f916fb0": "removeNominee(uint256,address)", +"4f92471b": "getPendingDivsUser(address)", +"4f928ad8": "make_vote(string)", "4f932d44": "_generateIdentity(uint256,uint256,uint256,uint256)", "4f935945": "capReached()", +"4f936906": "v3Token_decimals()", +"4f93859f": "ChangeStake(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"4f939520": "twoMonths()", "4f93995d": "saleNotEnd()", "4f93b9e8": "setCommunityLock(address)", "4f945a8a": "transferOwnCoins(address,uint256)", +"4f94637b": "C_NestDAO()", +"4f948b45": "doUniswapV2Sell(address,uint256,uint256)", +"4f94c536": "senderAuthorizations(address,address)", +"4f94ff98": "mintop(address,uint256)", +"4f954d87": "lnTariffIdToInfo(uint256)", "4f9559b1": "cancelOrdersUpTo(uint256)", "4f958146": "LongLegs()", "4f95a04b": "ethTransfer(address,uint256)", +"4f95b5f0": "getCharacterOverView(uint256)", "4f95ddec": "shopStorePrice()", +"4f95e558": "rmulRound(uint256,uint256)", "4f95e960": "getTotalDropsOf(address)", "4f961a6b": "RATE_TIER3()", "4f962b72": "setPriceRate(uint256,uint256)", "4f9660ed": "sendToTeam()", +"4f9686f1": "cleanParent(address)", "4f968868": "PauseTokenContract()", "4f96ab8e": "retrieveUportInfo()", "4f96baf1": "createNewAccount(address)", @@ -45689,79 +83669,135 @@ "4f96e039": "waitingOracles()", "4f96f446": "tier1LOT()", "4f96fba7": "setAuditAssignBlockNumber(uint256,uint256)", +"4f972eaf": "withdrawToSellerRange(uint256,uint256,uint256)", +"4f97ba49": "getETHRate()", +"4f97da61": "changeAdaptionRequest(address,address,int256,uint256,uint256)", +"4f97e491": "inCaseTokenGetsStuckPartial(address,uint256)", "4f97f97f": "lastCrowdsale()", +"4f980e4e": "doCln()", "4f9899c3": "PythonCoin()", +"4f98c2f2": "nextBuyTime()", +"4f98d04f": "getUserOrders(string)", +"4f98f162": "lastUpdateSeniorInterest()", "4f990ef0": "card2PowerConverterSingle(uint256)", "4f995d08": "getPeople()", "4f996a07": "callerDel(address,address)", "4f99a96e": "getBorrowingItemByObjId(uint64)", "4f99b7c5": "currentDate()", "4f99b82d": "setBurntWalletAddress(address,address)", +"4f99ccaa": "createAcoToken(address,address,bool,uint256,uint256,uint256)", +"4f9a37c9": "drsCoinDividendRatio()", +"4f9a6815": "m_Block_Span_of_Stack_Options(uint256)", +"4f9afb66": "dev_addr(address)", +"4f9b098b": "RequestWithdrawn(address,address,bytes32,uint256)", "4f9b7bc8": "totalTokensSale()", +"4f9bc883": "giveOrderItsStatus(int256,string)", +"4f9bf3f3": "createProxiedUBIBeneficiary(string)", "4f9bf601": "totalTxFeePercent()", "4f9bfdac": "OVISBOOKED_BONUSTOKENS()", +"4f9c10d4": "hasher(address,uint256,uint256,uint256)", "4f9c5253": "Store(string)", "4f9c5bf3": "airdrop_percent()", +"4f9c751e": "transferEthGasCost()", "4f9d482a": "HALF_TIME()", +"4f9d58d8": "isAuthorizedToTransferSgn(uint256)", "4f9d719e": "testEvent()", "4f9da09f": "getAddressByIdSorteo(int256)", "4f9de158": "_sendTokens(address)", "4f9e01c3": "OCCT()", "4f9ea1c3": "flightDone(uint32)", "4f9ebe09": "getDonationPrice()", +"4f9f07f2": "mint(address,string,uint256,uint256,string,string,string)", +"4f9f6fe6": "getAgreement(uint256)", "4fa037c4": "setTokenMintFeeProp(address,address,uint256)", "4fa07325": "adddraw(uint256)", +"4fa084a8": "burnCar(address,uint256)", "4fa0a4b7": "_getCanvas(uint32)", +"4fa1096e": "setPercentForInvest(uint256,uint256)", "4fa10cfc": "getdata()", "4fa11dd2": "setAirdorpList(address[],bool)", +"4fa14470": "switchFund(address,address,uint256)", "4fa20a52": "isDelayed()", "4fa232fe": "getIcoDeflator()", +"4fa24985": "isFarmContract()", +"4fa2b0a5": "setHavven(address)", "4fa2cb50": "solved(string,string)", +"4fa31512": "amountRaisedInToken(uint256)", +"4fa369c4": "depositLiquidation(address,uint256)", "4fa3d029": "setSTFactory(address)", "4fa3eeff": "withdraw3()", +"4fa3f159": "drugPerBlock()", "4fa406ee": "BeforeChipCost(uint32)", +"4fa41305": "pseudonymEvent()", "4fa43991": "getArtistTrack(bytes32,address)", "4fa48a88": "isSameDay(uint256,uint256)", "4fa4a531": "getbackTB(uint256)", "4fa4d01a": "_averageSalePrice(uint256,uint256)", "4fa519fa": "setValue()", +"4fa5d854": "doHardWork()", +"4fa62924": "reCalculateDifficulty(address)", "4fa65d58": "WRLToken()", "4fa679d8": "forward(uint256)", +"4fa6944a": "craneList(address)", "4fa6a6d5": "crowdSaleStartTimestamp()", +"4fa6b272": "pendingClaimStart()", "4fa6caf6": "getSigner(bytes32,uint256)", "4fa6cde4": "requestEthUsd(uint256)", +"4fa7353c": "getEmail(address)", +"4fa74c69": "getActiveLocalContracts()", +"4fa76ec9": "quorumPercentage()", "4fa7e353": "pledgeFees(uint256)", +"4fa81f18": "changeMaximumSupply(uint256)", +"4fa85186": "isAffiliate(address)", "4fa87fd3": "frozenFunds(address,uint256)", "4fa88720": "setBypassStatus(address,bool)", +"4fa943a6": "_setupRole(bytes32,address)", "4fa972e1": "maxSupplyForEra()", "4fa99402": "spinnerCountsByType(uint256)", "4fa99dd0": "Matching_Ethers()", "4fa9b5d5": "seed_base_token()", "4fa9e4dc": "getArticlesOwn()", +"4faa174e": "kingIncreaseBoard()", "4faa2d54": "getTimeElapsed()", "4faa8a26": "depositEtherFor(address)", +"4faad4c0": "proposeUpdateCoreParameters(uint256,uint256,uint256,uint256,uint256,uint256)", +"4faaefae": "proxyToken()", "4fab2035": "newSchellingRound(uint256,uint256)", "4fab2ca4": "testGetFrontend()", +"4fab4038": "forging(uint256)", +"4fab9e4c": "initializePair()", +"4faba107": "FEE_SPLIT_B()", +"4fabdd4b": "GetDealParams(uint256)", "4fac7e41": "getOwnedTokenIds(address)", "4fac9c65": "bonussale_WeiRaised()", "4faca8f4": "sendTokenTeamAdvisor(address,address)", "4fad404a": "confirmProposal(string,uint256)", "4fad5c8a": "depositAgent(uint256,uint256,string,string)", +"4fad7560": "TEAM_AND_ADVISORS()", "4fad96dd": "DST_ICO()", +"4fad9dbc": "beePerBlock()", "4fae3254": "setMaxAuditDuration(uint256)", "4faea4d6": "FrankTestToken1()", "4faed396": "checkVotingForSendWeiFromExchange()", +"4faeff1d": "disconnectSAFESaviour(address)", +"4faf61ab": "oracleRelayer()", "4faf9420": "airdropFor(address)", "4fafee40": "lottoPrice()", +"4fafef1a": "Posts(uint256)", "4fb057ad": "ContractInstantiation(address,address)", +"4fb068c5": "mAddress2Names(address)", "4fb0a3cd": "claimTeamReserve()", "4fb0d95e": "getLocalBountyBalance(uint16)", "4fb19db5": "dollarCost()", +"4fb1bf4c": "swap(uint256,uint16,bool)", +"4fb2975d": "isWhiteListReady(uint256)", +"4fb2cebe": "tokenIssuedRsv()", "4fb2e45d": "transferOwner(address)", "4fb30d8b": "txs()", "4fb31a6a": "replaceProto(uint16,uint8,uint8,uint8,uint8,uint8,uint8)", "4fb320b2": "setClaimRate(uint256)", "4fb34523": "deployStepFour()", +"4fb35e5e": "approve_478(address,uint256)", "4fb3d3b1": "getUserHistory(address)", "4fb3fef7": "totalExecutedPerDay(uint256)", "4fb46d5c": "getRoundStatuses(uint16)", @@ -45769,67 +83805,148 @@ "4fb4e833": "entryStorage(bytes32)", "4fb4f5a3": "ETHMCoin()", "4fb55858": "setTargetDiscountValue4(uint256)", +"4fb5f52b": "getStaticProfits(address)", +"4fb6314e": "_getPriceFromOracle()", +"4fb66790": "getExchangeAmount()", +"4fb66a0b": "set_contract(address,address)", "4fb67111": "utfStringLength(bytes4)", +"4fb6c57a": "usdtBuyback()", +"4fb75d2c": "withdrawDcash(uint256)", +"4fb76205": "RequiredBlockConfirmationChanged(uint256)", "4fb764c9": "orders()", +"4fb7ad83": "getExchangeInfo(uint256)", +"4fb7db3f": "KYBER_PROXY()", "4fb7f1d7": "getPastWinnerAddresses()", +"4fb801d7": "currentBorrowIndex()", +"4fb8118c": "cookie()", "4fb8843c": "getAllBonus()", +"4fb8b270": "cannabinoidProfileCount()", +"4fb912d7": "getNextReceiver()", +"4fba5adf": "timing()", "4fba68c5": "pWhitelist(address)", +"4fba7fc3": "RegistryAdminChanged(address,address)", +"4fbb2be2": "tokensNodes()", +"4fbb30ed": "getBorrowAmount()", +"4fbb4af8": "StartProfitedGamesAllowedChanged(bool)", +"4fbbafcb": "setUtilContract(address)", +"4fbbd94c": "liquidationBonus(uint256)", +"4fbc36c1": "calcBestBuy(address,uint256,address[][])", "4fbc7e11": "enableTokenWithdrawals(address,bool)", +"4fbc9f50": "STATS_TYPE_INVITE_RELATION()", +"4fbccdb1": "LogRoleRevoked(bytes32,string,address)", "4fbcd6d5": "DepositFunds()", "4fbd051d": "verifyCertification(address,uint256)", +"4fbd241d": "organs(uint256)", "4fbda01f": "LogPenaltyDisbursed(address,uint256,address,address)", +"4fbdea4d": "totalClaimedReward()", "4fbe30d4": "changeTokenRate(uint256)", +"4fbe39e9": "createPrintSeries(uint256,uint256,string)", "4fbea8ea": "approveKyber(address[])", +"4fbee193": "isExcludedFromFees(address)", "4fbf6e9f": "getFish(uint32)", "4fbf6fbb": "getMultiRequestLastRequestId(uint256)", "4fc09275": "tokenOfCreatorByIndex(address,uint256)", +"4fc0c688": "getRewardDetailsByUserId(uint256)", +"4fc0e9b4": "registroPessoas(address)", "4fc0ee17": "setCreditMCCurator(address)", +"4fc10403": "SetAllowedAddress(address)", +"4fc15c04": "setIssuableFXB(uint256,uint256)", "4fc28f68": "getUndistributedBalanceOf(address,uint256)", "4fc2d3be": "setBaseExchangeRate(uint256)", +"4fc36be6": "verifyProof(bytes32[],bytes32,bytes32,uint256)", +"4fc377eb": "setupRoles(address,address,address,address,address)", +"4fc3aa7c": "setAccept(bool)", "4fc3f41a": "setCooldown(uint256)", "4fc4b5a0": "highEtherBonusValue()", +"4fc5492f": "melter(uint256)", "4fc573c7": "addrDevelopment()", "4fc59e6b": "set_Rate(uint256)", "4fc5a549": "StartAuction(string,uint256)", "4fc63e02": "ExToke(address,address,address,uint256,uint256,uint256)", +"4fc697b7": "changeStrategy(address[],uint256[],uint256)", "4fc78cf1": "add_reward()", "4fc7a47d": "extra_time_bought()", "4fc84791": "senderAddress()", "4fc91633": "setNotLessThan(uint256)", "4fc9584a": "messageSpanStep()", "4fc9c91a": "identityOf(bytes32)", +"4fc9d4aa": "betOnWolfings(uint256)", "4fca3159": "rawBuy(bytes32)", "4fca329a": "drawBookLotto()", "4fcaadae": "_createDivCard(string,address,uint256,uint256)", "4fcb2968": "kingSpirit()", +"4fcb6f3a": "pointsPerToken()", "4fcb9e2f": "getLastPayoutDate()", +"4fcc1fc0": "lockbins(address,uint256)", "4fcc30d9": "AuctionSuccessful(uint256,uint256,address)", +"4fcc9912": "fnxUnRedeemFPT_FRAXForFRAX(uint256)", "4fcc9e07": "getDynamicArraySize()", +"4fccb89d": "maxDaysToRepayLoan()", +"4fcd9d7e": "eggN()", +"4fce2e1b": "isValidatorCanJoin(uint256)", +"4fce7a2a": "bud(address)", +"4fce9c84": "contractCreated()", "4fced032": "OneKeyToken(uint256,string,string)", "4fcf1f39": "revealWinner(string)", +"4fcf3eca": "removeHook(bytes4)", +"4fcf77c6": "pzssub()", "4fcf8210": "eraseRecord(bytes32)", +"4fcfab75": "updateParser(address)", +"4fcfe726": "totalReturnRate()", +"4fd0ada8": "getResultWithValidity()", "4fd0fcb6": "partnerAmountLimit(address)", +"4fd101d7": "validatorThreshold()", "4fd1519c": "getValidDurationBlocksData()", +"4fd1a856": "scaleDifference(uint256,uint256,uint256,uint256,uint256)", "4fd23dd4": "transferMulti(address,address,address,address,address,address,address,address,address,address,uint256)", +"4fd24d30": "BASIS_POINTS_DEN()", +"4fd27f16": "LoaneeAccounts(uint256)", +"4fd2d6e7": "yggdrasilMinus(address,uint256)", "4fd2ee52": "getTargetContactPubKey(bytes32,address)", +"4fd33dc1": "CancelledByHirer(bytes32,address)", +"4fd38960": "ProtectionTxDeclined(bytes32,address,bytes32)", "4fd394ba": "getMax(uint128[])", "4fd3d125": "onlyAdminsCanDoThis()", "4fd42e17": "_setLiquidationIncentive(uint256)", +"4fd43b3f": "buyTickets(int256)", +"4fd491ad": "withdrawLP(uint256,uint256,uint256)", +"4fd4c4b2": "initSwap()", "4fd4dbaa": "_emitError(bytes32)", +"4fd52f42": "setRateExpiryTime(uint64)", +"4fd5a63a": "CongressTransferred(address,address)", "4fd61333": "DataChanged(bytes32,address,string,string)", +"4fd6159a": "Get_Game_Info()", "4fd6194d": "setup(string,address[])", +"4fd63542": "numbersTaken(uint256,uint256)", "4fd64591": "tokenClient()", +"4fd672e3": "emergencyWithdrawForce(uint256,address,address)", +"4fd67e32": "widthdraw1(uint256)", "4fd6b325": "test_5_generateSecondAccountBalance_increaseBlocksBy1000()", "4fd6e8ac": "andTheWinnerIs()", "4fd6ff6e": "CROSAIR_SHIP_PRICE()", "4fd7718b": "firstStageDuration()", +"4fd774cd": "updateTransfersEnabledFrom(uint256)", "4fd798b1": "TsingDaToken()", +"4fd7c0dd": "getHatStats(uint256)", "4fd81926": "setMaxDividendDepth(uint256)", "4fd839c6": "getRabbitDNK(uint32)", "4fd8411c": "AddressChangeRequested(address,address)", "4fd88a1c": "spendFunds(address,uint256,string)", +"4fd88bbd": "unsetERC20Refundable()", +"4fd8936b": "numeroactualdeparticipantes()", +"4fd93c6a": "setTokenToBeConverted(address,uint256,string)", +"4fd96cb6": "setYeldToken(address)", +"4fd98ddc": "disperseMany(address,uint256[],address[],uint256[])", "4fd9c9ac": "ExposureClosed(bytes32,address,uint256,uint256)", +"4fd9efc4": "take(uint256)", +"4fda74cb": "moutai()", +"4fdac0ef": "balanceVenus()", +"4fdac7af": "aTA()", +"4fdafdc7": "getSurplusUnderlying()", +"4fdb4819": "pendingMinters(address)", "4fdb7c47": "RtbRpay(address,uint256)", +"4fdb7f44": "renounceOwnership(string)", +"4fdb85e5": "writec(uint256)", "4fdb91ab": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE1()", "4fdbe2c3": "changeFoundationAddress(address,string,address)", "4fdc1a70": "icoCore(uint256)", @@ -45837,45 +83954,85 @@ "4fdc53f6": "setTokenOwner(address,uint256)", "4fdc5f65": "LiverpoolvsManCity()", "4fdcd18d": "setHistory(address,uint256,uint256,uint256,uint256,uint256,string,string)", +"4fdcfa31": "_getArbitrator(uint256)", +"4fdd20f1": "stakeFor(address,uint256,uint256,bool,bytes)", "4fdd228d": "ownerOfPosition(bytes32)", +"4fdd283c": "delever(address,address,address,uint256,uint256,string,bytes)", +"4fddbc3b": "setRateFactors(uint32,uint16)", "4fde7cd9": "tokenToFounder()", "4fdf4c9a": "Icebox(uint256)", "4fdf64ce": "totalBorrowingItem()", "4fdf8a03": "VLTMultisig()", +"4fdf951d": "initCollections()", "4fdfcd42": "removeBytes32s(bytes32[])", +"4fe0040c": "claimCollateralAtMaturityForBuyers(address,uint256)", "4fe01d38": "setTokenReward(uint256)", "4fe06988": "toTimestamp(uint256,uint256,uint256)", +"4fe09390": "votingPeriodBlockLength()", "4fe0bd1e": "fundsAvailable()", "4fe0ff1a": "submitInitialMerkleState(bytes32,uint64,bytes32[],uint256[],uint256,uint256,bytes32,uint256[2],bytes32,bytes32,uint8)", +"4fe125a3": "newControllers(address)", +"4fe12be8": "integrityPercentage()", +"4fe17773": "drawPending_threshold()", +"4fe1c353": "dailyUpdate()", +"4fe2c3df": "LogTakeBet(uint256,address,uint256,address)", "4fe2e15a": "checkTicket(uint256,uint256)", "4fe2f085": "INVESTORS_TOKENS_RESERVED()", +"4fe41129": "extractETHIfStuck()", "4fe47cb4": "emitStoreAndPay()", "4fe47f70": "setMaxAmount(uint256)", "4fe4a909": "returnToken(address,address,uint256,uint256)", "4fe50bc6": "baseTokenGetRate()", "4fe51ee6": "ValkyrieNetwork()", +"4fe53021": "tokenForSale_()", "4fe5c2b4": "Vidnix()", +"4fe5d431": "upgradeTrueCurrencyProxyImplTo(address)", +"4fe5e055": "redeemInsurance()", "4fe5f587": "CCXToken()", "4fe61b9e": "disableBonus()", +"4fe66715": "_emitJoin(uint256,uint256,uint256,address)", +"4fe678aa": "multisend(uint256[],address[])", "4fe6adb4": "NewToken(string,string,string,address)", +"4fe6d26c": "betHistory(address,uint256)", +"4fe7190a": "end_trade(address,uint256)", "4fe71e95": "withdrawUserReward()", "4fe72439": "DEVELOPER_SUPPLY()", "4fe7940b": "show_Balance_available_for_Sale_in_ETH_equivalent()", +"4fe7a6e5": "reservesList(uint256)", +"4fe7f358": "exchcoinToUSDT(uint256)", +"4fe7f9b4": "onAffiliatePayout(uint256,address,bytes32,uint256,uint256,uint256)", +"4fe809cc": "performanceDevMax()", "4fe81ffd": "artistsArtworks()", "4fe82444": "addEthContribution(address,address,uint256)", "4fe85563": "RAGTOKEN()", +"4fe8625f": "realizedReturn()", +"4fe875a1": "multisend(bytes32[],uint256)", "4fe87fe0": "FundsWithdrawnEvent(address,address,uint256)", +"4fe88929": "getTrancheAExchangeRate(uint256)", "4fe8b1a8": "changesoldierreplenishrate(uint256)", "4fe8b4c1": "deleteData(uint256)", "4fe8d03f": "bountyTokensTransferred()", "4fe917fe": "reduceallmoney(address[],uint256[])", "4fe9cc63": "InitHostBalance(address,uint256)", +"4fea120c": "setAcceptEther(bool)", +"4fea1538": "teamPerfit()", +"4fea3c5f": "multisendBepaq(address[])", +"4fea42d9": "revokeIdentityKey(bytes16,address)", "4fea572e": "ERC20Token(string,string,uint8)", +"4fea5d7d": "ETHLGEEndBlock()", +"4feb0786": "waffleContract()", +"4feb22d0": "dataSourceCallbackMatch(uint160)", +"4feba02a": "registrationFeeWithoutReferrer()", "4febb4f9": "WorldCupTeam(address,string)", "4febe793": "NewText(string,string,address,uint256)", +"4febf53d": "exclude(address)", +"4fec0a52": "renounceOwnershipCLEAR(uint256)", +"4fec0fb6": "removeWearable(uint32,uint256)", "4fecf22d": "delegateManagement(address)", "4fecf9cf": "Helex()", "4fed1c94": "isTokenForSale(uint256)", +"4fed1ed4": "queryToken(address,address,address)", +"4fed46ee": "WeaponAdded(uint256,string,string,string)", "4fed6a10": "teamTimelock()", "4fed9a60": "Bonus(uint256,uint256)", "4fedebf6": "numOfTeam()", @@ -45884,177 +84041,323 @@ "4fee5360": "transferLike(address,uint256)", "4fee63da": "securitiesOf(address)", "4feeb18a": "priceQuerySent()", +"4fefc59d": "CharityModifiedEvent(uint256,string,uint8)", +"4fefd9f2": "updateBaseExpPerLevel(uint256)", +"4ff015ba": "depositTokens(uint8,address,uint256,uint256)", +"4ff03eec": "updateValuePoolVestingDays(address,uint256)", +"4ff0876a": "epochDuration()", "4ff0b071": "SILENT_Token()", "4ff13571": "x2()", +"4ff1b6ff": "voteByAddress(address)", "4ff1ddec": "TransactionConfirmedAfterExpiry(uint256,uint256)", +"4ff1f093": "setCoMBUSTVaultAddress(address)", "4ff2bcb7": "getStageBonus(uint256,uint256)", +"4ff2cd63": "forceSwapTokens(bool)", "4ff30c5f": "nextMintPossibleDate()", "4ff3a989": "BLOCK()", +"4ff3cb14": "executePayout(uint64,uint64,uint256)", +"4ff4428c": "delGov(address)", "4ff44fda": "_holding()", "4ff45d73": "unapproveDisbursement()", "4ff4ab6c": "ticketsOwners(address,uint256)", "4ff57e9f": "airdropAndBurn()", "4ff62627": "convertCore(address,uint256,uint256)", +"4ff63845": "SetController(address)", +"4ff68d2b": "getUsersListLength(uint256)", "4ff6aa46": "deactivateTeam()", "4ff6e86e": "getProviderPublicKey(address)", +"4ff7986e": "FALSE()", "4ff7ff32": "withdrawERC20Tokens(address)", +"4ff81443": "getCompositeDebt(uint256)", +"4ff85794": "balancesPerShard(uint256)", "4ff92d6f": "getAssignedSupply()", +"4ff9448e": "_closingTime()", +"4ffa3a4a": "bVideoWatched(address)", +"4ffa5dcf": "DAILY_JACKPOT_PERIOD()", "4ffb01ce": "RemoveEvidence(bytes32)", "4ffb32d3": "BlackSnailE()", "4ffb861e": "_addAuthorization(address,address)", "4ffc9204": "centralBankAddress()", +"4ffcad2a": "_appendVestingEntry(address,uint256)", "4ffcd9df": "exchangeRates()", "4ffcfefe": "m_weiBalances(address)", +"4ffd14cb": "updateJOYContractAddress(address)", "4ffd23a7": "sell(uint32)", +"4ffd964f": "getAcceptedTokenSymbols()", +"4ffe34db": "totals(address)", +"4ffe4941": "updateServicePoolWeight(address,uint256,uint256)", +"4fff5226": "ETRM()", "50003ca6": "calculate(address)", +"500065d2": "setDataStore(address)", "5000a443": "jingZhiManager()", +"5000f531": "getAPY(address,address)", "50010427": "bet(address,uint256,uint256,uint256)", +"5001257e": "updateArtworkPrice(uint256,uint256)", +"50013118": "geq()", "50013a53": "LICERIOToken()", "5001780b": "maxFundingGoal()", +"50017f3e": "topUp(uint256)", "5001f3b5": "base()", "50020560": "Accessible()", "5002b2b9": "FusoraToken()", +"500325d0": "PastelTransfers(address,string)", "50035eb8": "getInUse(bytes20)", "5003c2cc": "setPriceProgression(uint16)", "5003c81d": "ERC223StandardTokenFactory(address)", "5003d58f": "returnTokenBalance(address[2],uint256[8],uint8,bytes32[2])", +"5003df9b": "teamToken2ndReleased()", "5003e4d1": "Token(uint256,string,uint8,string,address)", "5003efca": "extendedTokenCap()", "50048174": "addItemLendingList(address,uint256)", +"5004a218": "getLastBalance()", +"5004b7a2": "userEtherOf(address)", +"5004d36c": "chainlinkAggregator()", "5004e7a6": "CoinFast()", "50050769": "changeRegistrationFee(uint256)", "50051c20": "CELToken()", +"50057351": "completeXConversion(address[],uint256,uint256,uint256,uint8,bytes32,bytes32)", "50058508": "getPubkey(address,address)", +"500594da": "setMinDevFeeInWei(uint256)", "5005ba47": "setDestroyEnabled(bool)", "50060f34": "getBatch(address,uint8)", +"500625e9": "changeFundMultiplier(address,uint256)", +"50067d58": "getBalanceOfStaged()", "5006bf0b": "internalExecuteDelegatecall(address,uint256,bytes)", "5006e60a": "ownershipToCreator()", +"5007166b": "setblocksMined(uint256)", "5007364f": "getLeaderboard(uint16)", "50077f00": "jsonCat(string,string,uint256)", +"500788d5": "_recentlyUsedBlock()", "5007e47e": "getIntrospectionRegistry()", "5007ec95": "IbzCoin()", +"5007eec1": "getRenameFeesAvailableToClaimERC20(address,uint32)", "5007ff15": "GridcubePlatformToken()", +"50083035": "TokenPurchase(address,address,uint256,uint16)", "500844dd": "setTotalStakingHistory()", "5008b7dd": "buyProduct(address,address,uint256)", "5008cfcc": "votePerETH()", "5008f699": "setRollover(uint256)", "5009432d": "MAX_PRIVATE_FUNDING_SUPPLY()", +"50099dd3": "EightXMultiplier(address)", +"5009a613": "updatePoolLockSeconds(uint256)", +"500a0964": "getValueMultiplier(uint256)", +"500a2b59": "calculateHash(uint256,bytes)", +"500a5c23": "LOG(string,uint256)", +"500aaa38": "unauthorizeHub(address,address)", +"500b245e": "nextDueBlock()", +"500b38ce": "UnlockedAll(address)", "500b6b3e": "calculationTotalSupply()", "500b9426": "accountLocked(address)", +"500c3332": "reclaimable(uint256)", "500c6755": "DepositAmount(uint256,uint16)", "500c6f21": "setManagementFeeChargePercentage(uint256,uint256)", +"500c7bac": "readMemberInTeam()", +"500d0395": "vortexTransferSynAck(uint256,address,address,uint256,bool)", "500d22db": "setData_14(string)", +"500db70d": "sponsorship()", +"500e4297": "getCacheClassSize(uint32)", +"500e72a0": "onEndTx(uint256,uint256,bytes32,address,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", "500e73a4": "SSChainToken()", +"500e91d8": "getNumberOfShips()", "500e9eaa": "finishZeroDistribution()", "500ec41b": "setAirState(bool)", +"5010005c": "dccusdtLPPool()", +"501070be": "sushiswapFactory()", "50107c77": "addThing(string,bytes32,string,bytes32)", +"5010a4e1": "whitelistBalances(uint256,address)", +"501109c5": "setMessageCallStatus(bytes32,bool)", "501146b4": "_updateNextPeriodPoints(address,uint256)", "50114925": "transferDelegated(address,address,uint256,uint256,uint256,uint256,bytes)", +"501168b5": "zbtadmin()", "50116afb": "decreaseAssetsCertified(uint256)", "5011e399": "replaceSigner(address,uint256,uint8,bytes32,bytes32)", +"501213e9": "createGrant(string,string,uint256,address)", "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()", +"50131cd4": "drmTransfer(address,uint256,string)", "50133d50": "MinimumViableToken(uint256)", +"50135c3a": "issueAttribute(address,uint256,uint256)", "5013bb79": "TheTokenB()", "50140fe5": "distributeBountyTokens(address,uint256)", +"50141ed8": "approve_211(address,uint256)", +"501421bf": "getIsToken()", +"50146d0e": "OwnerSet(address)", +"5014748c": "maxUnclaimedPoolRatio()", "50148ed2": "initEpochBalance()", +"50149f52": "TokenCreated(uint256,bytes32,uint256,address)", "5014a18e": "node_parent(uint256)", +"5014b4f4": "removeEscapeHatch()", "501578ca": "EntryAdded(bytes32,uint256,uint256)", "50159de6": "ownerRemoveCeo(address)", +"5015f5f1": "removeSecondaryOwner(address)", "5016128e": "isLock(address)", "5016b9b1": "buyFromBlackMarket(uint256,uint256)", "5016d29f": "refundedAmount(address)", +"50174016": "setRewardsPoolPercentage(uint256)", +"501788af": "distributeDailyRewards()", "5017f1f1": "constructor_()", "50180944": "NEST()", +"501830df": "_payHoney(uint256)", +"50185946": "unsalvagableTokens(address)", "50188301": "withdrawable()", +"501895ae": "hashes(uint256)", "5018a0fd": "withdrawAddr(address)", +"501923d3": "redeemUnderlyingRoboTokens(address,uint256,uint256,address,uint256)", "50192ae6": "test_31_assertGasUsage50Boards()", +"50193485": "openBalanceOf(address)", "501957b8": "getManifest(address,bytes32,bytes32)", "50197646": "rId()", +"501a00e2": "now_balance()", "501a4d68": "changeNameSymbol(string,string)", "501a7a74": "uint256Min(uint256,uint256)", +"501a7d67": "estimateEarnings(uint256)", "501b0b18": "receiveLoanOwnership(address,bytes32)", "501bae76": "setr2VaultAddr(address)", "501bfb60": "transferStampsToOwner(uint256)", +"501c48a2": "bestSwap(uint256,uint256,address,address[])", "501c5205": "_updateLandData(uint256,uint256,string)", +"501c54a8": "unisageAddr()", +"501cafe9": "getAllowanceDetails(address)", "501e3a2c": "_icoPercent()", "501e8428": "getPart(bytes,uint256)", +"501e852e": "FrozenBalanceDefrosted(address,uint256,bool)", +"501f18f8": "issueUnlock(bytes32,bytes32)", "501fdd5d": "setSpecID(bytes32)", "5020dcf4": "convertToEach(uint256,string,uint256)", "5021051e": "setInflation()", "50213c9f": "EXPERTS_POOL_ADDR()", "502146db": "modify_addr(address)", "5021783a": "addPerformer(address,string,uint8,string)", +"5021c6bb": "rewardPoolLength()", +"5021dca8": "_transferAdministratorship(address)", "5021e534": "_dividendsSum(uint256[])", "5022238f": "AVAILABLE_IN_PRE_SALE()", +"502237d7": "STUPID_EXCHANGE()", "50228201": "getCollector()", "5022d232": "CelebrityBreederToken()", "5022e940": "experty()", "50234173": "addNotary(address,uint256,uint256,string)", +"50235d5b": "COMP_ADDR()", +"50237ac9": "curverenGauge()", +"5023b6a7": "alreadyPayed(bytes32)", "5023d124": "TestFactory()", "50240158": "rejectContribution(address)", "50240a34": "onLotteryInsurance(address)", "502414e4": "marketMaker(string)", "50248cd1": "ownerYHT()", +"50249956": "minimumSwapPercentage()", +"5025146e": "setNFTRewardContract(address)", "50259cd3": "privatePreICOFreeBonusPercent()", +"5025a2f5": "updateMaterial(bytes32,bytes32)", +"5025b548": "openSeaProxyRegistry()", "5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", +"502644b7": "polyn_usdt()", +"50264b55": "pool9userList(uint256)", +"5026a859": "grantProviderPermission(address)", +"50271ce5": "approve_163(address,uint256)", +"50272449": "peekUpdatedContract()", +"5027d70f": "bounty(address,bool)", "5028594a": "setBlockDotGasLimit(uint256)", +"5028c6ce": "ResourceTradeCancelled(uint256,uint8,uint8,uint256,address)", +"5028ed72": "callIncomeStakerTrigger(address,uint256,uint256,uint256,uint256)", +"50297d8c": "recenteringSpeed()", +"502a7c3b": "isUnderlyingTokens(address)", "502a86bf": "gameGiftUserDayTimes()", "502aa3b5": "usersList(uint256)", +"502b2333": "carAuctionCurrentPriceHelper(uint256,uint256)", "502b31d2": "splitEther()", +"502b710c": "WaveVote()", +"502b7a4a": "setReserveParams(address,address,address,address,address,uint256)", "502b8bda": "synths(bytes4)", "502be15e": "unregisterByList(address[],bool)", +"502c0b65": "minEarlyRedeemFee()", +"502c2451": "delayMultiplier()", "502c9bd5": "userAddresses(uint256)", "502cc114": "KittyToken()", +"502d145f": "_didPass(uint256)", "502d7599": "IssueTokens(address,uint256,uint256)", "502dadb0": "disableWhitelist(address[])", +"502e1a16": "nonces(address,uint256)", "502e3b46": "EffectAdded(uint256,uint8[])", +"502efb2c": "calcLiquidatePawnAmount(uint256,uint256)", "502f2dee": "sendFromTeamWallet(address,uint256)", +"502f53b7": "PresaleFallBack(uint256)", +"502f7446": "routerV2()", +"502fad5f": "setRates(address,address,uint256)", "502fe251": "getUidLastUpdate(string)", +"50307c42": "modify_unit(uint256,uint256,uint256)", "5030c325": "signBuyer(uint256)", "503129c3": "ISC()", "50312c9e": "checkContractBalance()", +"5031ea31": "setLotSell(uint256)", "503248fe": "minPriceForMiningUpgrade()", "5032f33b": "TokenLocker(address,address)", +"5033fdfc": "setSyncMinimum(uint256)", +"5034709c": "setPriceFeed(address[],address[])", +"50348a34": "currentDistributionAmountClaimed()", +"5035664d": "predecr_u8(uint8)", +"50356ab7": "payback(address,address,uint256,uint256)", "50357beb": "buyCard(uint256,address)", +"5035b622": "removeTask(bytes32)", "5036258b": "disableAddress(address)", "50364825": "InsertImage(string)", "503667bd": "_burnFor(address,uint256)", +"50366faf": "bridgeCounterAddress()", "503687bc": "getTokenReleasePercentage()", "5036d610": "Presale()", +"50370794": "setGasMintPrice(uint256)", "50372085": "isTokenContract()", "503765c6": "LOCKTokenCOINLock(address,uint256,uint256,uint256)", "50379b5b": "IPFSHashStore(uint256)", "5037ec62": "changeDelay(uint256)", +"503863d1": "betArray(bytes32,uint256)", +"5038742c": "_become(address,uint256,address[])", +"5038b8cd": "restoreContractContext(address,address)", +"5038c2da": "getFirstKeyRingAdminActionID(address,address)", "5038c9c5": "getListingAtPosition(uint64)", "50391932": "findContractVersionByAddress(address)", "503919b1": "unblockTokens(address)", "50392bcc": "CleanFoodCrypto()", "50395188": "tan_lian()", +"50395ba5": "receiveItem(uint256,string)", +"5039972a": "init(address,address,address,uint256,address,uint256,uint256,bool)", "5039c62c": "inviteHandler(bytes32)", +"5039cdb1": "massTransfer(address[],address,uint256)", "503a0ef8": "requestLoans(address,uint256)", "503a3609": "mainSaleSecondStartDate()", "503adbf6": "changeableToken(uint16)", +"503aeafb": "savingTotal(uint256)", +"503b3452": "maxSusdToSell(address)", +"503b35a3": "checkUserPack3Exist(address)", "503b64c0": "setRequestProcessed(uint256,uint256)", +"503b7c40": "returnPay(uint256,address)", +"503b8e81": "isUserBlacklisted(address)", "503c449f": "decreasePregnantCounter()", "503c849e": "cashOutRate()", "503caa1b": "performPayout()", "503caa53": "phase2TokenPriceInEth()", "503de95b": "newCash()", "503e11de": "getAssetIdCargoArray(uint32)", +"503e1ac8": "challenge_success(uint32,uint32)", "503e9d33": "changeWeTrustSigner(address)", +"503ea3fb": "switchOldPoolCheck()", "503eb429": "destEthFoundation()", +"503ecf06": "skip(bytes32,uint256)", "503ef9fe": "changeFeeAmt(uint8)", "50400128": "RiskPrice(uint128)", +"504006ca": "getLoan(uint256)", "5040307c": "amountOfOrderQueue()", "50405fdf": "setMemberLevel(address,uint8)", "50409041": "_computeSalesCut(uint256)", "5040c6e7": "HardCap()", +"5040cf40": "UnFreezed(address)", +"5040fb76": "guardianCount(address)", "50411552": "challengeWinnerReward(uint256)", +"50415c46": "initializeMagic()", "50416b93": "batchClaim(uint256,uint256)", "5041742a": "bidOnEthSiringAuction(uint256,uint256,uint8,bytes)", "50428f84": "insertLastPlys(uint256)", @@ -46062,39 +84365,70 @@ "5042ffbe": "contributeInIco()", "504321e0": "toTeamEthContract()", "504334c2": "setNameSymbol(string,string)", +"50447938": "addClass(string,string)", "50449d9d": "whiteListPreSaleDuration()", +"5044a868": "icoReached()", "5044b112": "getChecksumCount()", +"504563c0": "getUniswap()", +"5045670b": "flashloanUniswapToCurve(address,uint256,address,address,uint256,uint256,address,uint32,uint32)", +"5045a4a1": "pendingtfk(uint256,address)", +"50464eed": "defiPortal()", "50473c82": "deathData_f15()", "50479065": "cancelCreation()", "5047b337": "changeName(bytes16)", "5047f867": "setAirdropParams(bool,uint256)", +"50480fd2": "claimingStartTime()", +"5048adf1": "getLockToken()", +"50496ff8": "executeOrder(address,address,address,uint256,uint256,uint256,address,uint256,bytes32,bytes)", +"5049a64f": "BNB_KLAN()", "5049b238": "potentialWinner()", +"5049b278": "redeemBond()", +"5049ece9": "changeQuietEndingConfiguration(uint64,uint64)", "5049f497": "nominate(address,address)", +"504a1647": "performanceFeeStrategist()", +"504ac383": "actionsList(uint256)", "504ac982": "transfer(string,string)", "504b0ae8": "LOG_ValueIsTooBig()", "504b122f": "readMulti(bytes32,bytes32[])", +"504b449c": "revokeRecipient(address)", "504b91b5": "GeishaCoin()", "504b97ae": "getcertifieddata(uint256)", "504bcde7": "getAuctionTokenIDsOfOwner(address)", "504c9582": "PARTNERS_SHARE()", "504cceac": "purchaseTokens(uint256,address)", +"504cf507": "removeLiquidityDisabled(address)", "504d080b": "getActions()", "504d27fd": "transferAmount()", +"504dbcf1": "getCoverPremiumSOTE(uint256)", "504e6827": "setWhiteListInvestor(address)", +"504e8751": "calculateOptionPrice(uint256[],address)", "504f1671": "getSize(address)", +"504f3a83": "getWithdrawalOf(address)", "504f5e56": "floor(uint256)", "504f6085": "serviceTransfer(address,uint256)", "504fac70": "getGiftTemplateById(uint256)", "504fbb19": "LifeChain(uint256,string,string)", "50500934": "right28(uint256)", +"50500a8a": "governanceContracts(address)", "50500fac": "LaunchPartnersAddress()", "50512420": "getPlayerDiscount(address)", "505158bb": "getRecordsCount()", "50515d5a": "resolveDispute(bytes16,bool)", +"50515f05": "recycleJoysToken(address)", +"5051eab4": "Log1_fnc(address,bytes32,uint256,string,string,function,uint256,bytes1,uint256)", "50520b1f": "contribution()", +"505239bf": "transferSurplusFunds()", "5052587f": "Show_automated_Sell_price()", "5052abad": "viewContribution(address)", +"5053067f": "refFactor()", +"5053aacc": "setLinearReduceRatio(uint256)", +"5053c105": "transferAnyLegacyERC20Tokens(address,address,uint256)", +"5053e461": "epochTime()", +"50544211": "BNB_TOKEN()", +"505450d4": "unlockAddrs(address)", +"50546e66": "RevokedOperator(address,address)", "50548d85": "LogMakeDeposit(address,uint256,string)", +"5054c0a3": "gamesList(uint256)", "5054e8bf": "collectDevFees()", "5055225f": "preSaleStartDate()", "5055557a": "perform_selfdestruct(uint256)", @@ -46103,207 +84437,383 @@ "50560a1a": "_oraclizeQueueWinner(bool)", "5056a36a": "AuthorizationSet(address,bool)", "5056b309": "getSetting()", +"50575ab8": "multiStake(address[],uint256[])", +"5057674c": "setDollarPriceToSell(uint256)", +"5057f2dc": "REIGAI07()", "50584827": "getInvestorBalances(address)", +"50586b40": "userCurrentId()", "5058c460": "safeWithdraw(address,uint256)", "5058f013": "periodWeek()", "505903ba": "GetEthBalance()", "50591478": "getChainDrawingsByChainID(bytes32)", +"50598719": "_proposals(uint72,bytes32)", "5059d25a": "setContributor(address,bool)", +"5059d67f": "equalsA(uint256)", "5059fad1": "transferIssuer(uint256,address,address)", +"5059ffde": "getUSDPCurPriceOfBTCB(uint256)", "505a202b": "priceChangeName()", +"505a4c28": "blockPerPhase(uint256)", "505a7bce": "pullEther(uint256,address)", "505ba497": "processInvestment(address,uint256,address)", +"505bb681": "liquidityCreditsMapping(address)", +"505bd3da": "unclaimed(address)", "505c3c58": "MasAnu()", "505c3d5e": "piecesOwned()", +"505ca249": "attackhappened(address,address)", +"505d1624": "viewTokenID()", +"505d29c3": "unpauseWithdrawal(address)", "505d394d": "GetSeries2()", "505da5c7": "_bonusToFighters(uint32,uint8,uint256)", "505e71d0": "test_twoInvalidFalseEqLog()", "505ed108": "createPetCardSeries(uint8,uint32)", +"505ef22f": "checkRole(address,uint256)", "505f2697": "rejectCertification()", +"505f2b68": "setCoinMaxPrice(uint256)", "505f5a8c": "freezeByValue(address,uint256)", "505fb46c": "add(uint256,uint256,uint256)", +"505fcc49": "removeNotAllowedAddress(address)", "505ff574": "register(address,uint256,bool)", +"505ff6a4": "InvalidTransformDataError(uint8,bytes)", "506092f7": "getAmbientLightException(bytes32)", "50609cea": "onTokenTransferCalled()", "5061029d": "MINE()", "50613afe": "getDropNotice()", +"50621317": "addGift(address,uint256)", +"50623152": "integer_2()", +"50628140": "loanValue(address)", +"5062c988": "freeMarketCreation()", "5062ef16": "readOpentasks()", "50635394": "claimBonus()", "50635e2f": "CYPHERX()", "50636a68": "ERC223Token(uint256)", "50637dd2": "stageName()", +"5063ddee": "buyLong(uint256)", "5063f361": "addMembers(bytes32,address[])", +"506439e3": "buyXaddr(uint256,string)", "50648403": "registerWithInviterID(uint256)", "506535f3": "verify(address,bytes32,uint8,bytes32,bytes32)", "50655d8c": "maker()", +"5065bd00": "pendingGold(uint256,address)", "5065cbab": "geteth(address)", +"50660346": "escrowownaddress()", "50669508": "DatasetHub()", "50669a03": "unpauseToken()", "5066a9ac": "setLPTargetPostion(uint256)", "5066e2bd": "teamKeepingWithdraw(uint256)", +"506737bf": "weiRaisedRound2()", +"506795e9": "commitToCutGreenWire(bytes32)", "5067f32d": "KALToken()", "50685c81": "SwarmRedistribution()", +"50689530": "set_lottery_ticket_price(uint256)", "50692d9a": "toContentID(address,string,string,address,bytes32)", +"50695a02": "symbols(address)", "50699e89": "requestBuywithFX(uint256)", "5069a6a6": "calculateKebabSell(uint256)", "506a0aaa": "reverseSplitTokensBeforeDistribution(uint256)", +"506a509f": "addGov(address)", "506a6a10": "tokenBonusForThird()", "506aaede": "issueDividend()", +"506ab57a": "componentWhiteList()", "506b56da": "centralBanker()", +"506b8ca4": "addProducer(string)", "506bd3a6": "removeExchanger(address)", +"506be6e4": "approveDao(address,uint256)", "506bff11": "left7(uint256)", "506cb188": "NewOrder(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"506cddbe": "ATGas()", "506cf560": "blackil()", +"506d3c96": "excludedTransferRates(address)", "506d54c7": "getBigWinner()", +"506d7d00": "getCorrespondingIntegerValue(bytes32,uint8)", "506d9ebd": "getData_8()", "506dc7e1": "getUsageDetails()", "506e106c": "setToS(string)", +"506e72ce": "userPoollength(uint256)", "506ec095": "periodEnd()", "506ee1ef": "traderNonces(address)", +"506f1773": "grantAccessToDoctor(address,uint256)", +"506fb4fc": "removeERC721Contract(address)", +"507020d0": "usersActiveA7Levels(address,uint8)", +"50709698": "log(bool,bool,bool)", "50710ef5": "_finalRoundWinnersFight()", "50713dc0": "transferOwnershipManualMinter(address)", "5071fcf0": "recoverSouls(address[],uint256[],uint256[])", +"50724c7d": "getRate(address,uint256,uint256,int256,uint256,bool)", +"507277e8": "_assertSchedulerNotInitialized()", "5072a21b": "_createPotato(uint256,uint256,uint256,uint256,address)", +"5072bbb8": "transferBondEvent(address,address,uint256)", +"5072e790": "numberOfSuccessfullExecutions()", "5073eda3": "setPOOL_edit_25(string)", "5074449d": "isTradable()", "50750497": "VestingTransfer(address,address,uint256,uint256)", +"50750f25": "currentEvent()", "50754fac": "totalNetworkCollateralisation()", +"5075788b": "sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)", "5076d445": "AdminClaimAirdrop(address,uint256)", +"50771849": "redeemFreeDoc(uint256)", +"50777153": "curve(uint256)", "5077ac0e": "registerImage(uint256,bytes,uint256)", "507843f8": "assemblyShamir(uint256,uint256,uint256,uint256)", "50787341": "normalizedEarlyPurchases()", "507959e1": "newBeneficiary(address)", +"507a0c9b": "startAirdropChicago(uint256,uint256,uint256,uint256)", +"507a7328": "closePeriod()", "507a83ea": "arand(address,uint256)", "507a8e40": "AssetToken(uint256,string,uint8,string,address)", +"507ac39e": "Stake(uint256,address,uint256,uint256)", "507afbec": "processBuyAmount(uint256)", "507b3450": "getKNCRateRangeSignatures()", +"507b4063": "START_ROLE()", "507bbc7e": "isRunUpStage()", "507d17bb": "MultiplyContract(address,address,uint256,uint256,uint256,uint256)", "507d5954": "stopCrowdsale()", +"507d68cc": "addPoolSig(bytes32)", "507d8887": "setCompte_19(string)", +"507d8a27": "verify(address,address,uint256,uint256,uint256,bytes,bytes)", +"507dbfa1": "getStartStage_2()", "507e7888": "subscribe(string)", "507e97a9": "setBUA(bytes32,uint256,address)", "507eeff9": "trade(address[2],address,bytes,bytes)", +"507f55f4": "lastChildData()", +"507f6549": "rejectTransaction(address,address,uint256,uint256,bool)", +"507fcdaf": "icoOpenTime()", "50807ecc": "getSellerfee()", +"5080dafc": "accreditations(bytes32,bytes32)", "50818fbb": "internalGetHowMuchUntilHardCap(uint256)", +"5081d725": "AdBought(uint256)", +"5082027a": "newBatchLotteryItem(address,uint8[4][],uint256,uint256)", +"50825207": "changeVaultDao(address)", +"5082f6ab": "govUpdatemaintLTVCounterVaultE10(uint256)", +"50832084": "delegateRewardsFactor()", "50833515": "RestartReceivingContributions()", "508335e6": "maxRentPeriod()", "508343d6": "initiateEscrow(uint64,uint256,uint256,address,address,address,address)", +"5083896d": "getAuthorities(uint256)", +"50839170": "userIdToUser(uint256)", "5083b29f": "changeBookingFee(uint256)", "508493bc": "tokens(address,address)", "50849c3b": "placeoffer(uint256,uint256)", "5084b2a3": "MintAuthority(address)", "5084da18": "fipsOwner(bytes20)", +"50852e60": "pendingOnX(uint256,address)", +"5085a074": "mcrOracliseFail(uint256,uint256)", "5085c9f1": "numTokensInCurrentCompactData()", +"50861bdc": "pia()", "50867236": "debug_token_balanceof_faucet()", +"5086774c": "personalBurn(uint256)", +"5086cd8e": "oraclePriceCallback(uint256,uint256[])", +"5086f091": "PurchaseWithEther()", "50872d1e": "onTransferFrom(address,address,address,uint256)", "50872e32": "EUROQUINNToken(uint256,string,string,uint256)", "50875b6c": "remainingLockDate()", "508762c1": "right10(uint256)", +"50877c77": "filledBSCTx(bytes32)", +"5087821a": "hashMultipleArgs()", "5087abc7": "joinOutBattle(string)", +"5088dfcb": "readDataByAddress(address)", +"5088e7fe": "getKeccakOfPairCreationCode()", +"5089117c": "_withdrawAllOut(address)", "50894456": "manuallyMakeOraclizeCall(uint256,uint256,bool,bool,bool)", +"50895090": "mntpMigrationIndexes(address)", +"508954f8": "setJobId(bytes32)", +"5089e29d": "cEmoji()", "508a0a9e": "NitrToken()", +"508a8571": "setPoolLpLimit(uint256)", "508a8976": "saleSuspended()", +"508a9417": "koCommission()", "508ab47a": "showPoolContract(uint256)", +"508af5cd": "viewCore()", "508b0955": "testNoTokensTwoCalls()", +"508b5a51": "SetupUNIS(string,string,uint256,uint256,uint256,address,address,uint256)", +"508b74fe": "nodeUnbond(uint256,uint256,address)", "508bb866": "getMyBet(uint256)", +"508c1dbd": "setSalePrice(address,uint256,uint256)", +"508cad88": "LinkRequested(address,address)", "508cde13": "getMappingID(string,address)", "508d0f57": "getNumberOfPeriods(uint256,uint256)", "508d60aa": "teamETHUnlock2()", +"508d932c": "positionDetails(uint256)", +"508d962b": "frozenTokens()", "508df5df": "numResponseOptions()", +"508e2998": "executeAndBurn(bytes,bytes)", "508e3718": "setValidKYC(bool)", +"508ed799": "EmitTwo()", "508f352d": "heapSort(uint16[])", +"508f3630": "getOracleKey()", "508f46a0": "getGameSettings()", +"508fd979": "createJob(string,bytes32[],uint256,uint256,uint256,uint256)", +"508ff520": "deposit(uint256,address,uint256,uint256,uint256,uint256)", "50904081": "purchasesCount()", "509065b8": "mintTokensForFirstStage()", "50909851": "ownerEmit()", +"509108a2": "TapVoted(address,bool)", +"50917658": "addCard(string,uint256,string,uint256,uint256,address)", +"50917b1d": "doStuffWithFlashLoan(address,address,uint256,address,address,string,bytes)", +"50918e5f": "LogForwarded(address,uint256,uint256)", "5091c49e": "bonusSeed()", "5091e7c4": "selfdestroy()", "5091f881": "updateArtistCommission(uint256,uint256)", +"50920759": "merchantTaxAlloc()", "50921b6c": "EGGS_TO_HATCH_1CROCS()", +"509222cd": "isUserExists(address)", "509239c0": "amountContributedBy(address)", "50928ba4": "canCreateGames()", +"5092f2ec": "h2()", "5092f97e": "Company()", "50930ca5": "doFailingTransferFrom()", "50933a0f": "Bitnusu()", +"50935952": "SetDenyPremium(bytes32,bool)", +"50938af6": "withdrawAccruedYieldAndAdd(uint256,uint256)", +"5093b67d": "lockTokensFrom(address,uint256)", "5093cb38": "setEtherDelta(address)", "5093dc7d": "setValue(int256)", +"5093e6f5": "disableRefundUntilEndFunction()", +"50942535": "totalHxpLpFrozen()", "50944a8f": "setMembership(address)", "509484d5": "setStakeContract(address)", +"50949c7d": "getChannelStartedBlock(bytes32)", "509515b5": "getWinnerAccount()", +"50952f26": "escrowErc20Payments(uint256,address)", +"50953f23": "NewBet(address,uint256,uint256,uint256,uint256,uint256)", +"50959c9b": "DrawResult(uint256,uint256[20])", +"5095d089": "testDataTypeAddress()", +"5096265f": "mock_resetLatestTokenAllocation(address)", "50963bc4": "returnTokensTo(address)", "50965f57": "currentWulinMasterPrice()", "509720a6": "putUint(bytes32,uint256)", "50977faf": "fetchTokenBalance()", "5097e51f": "Public()", +"5097eecc": "RateChanged(address,uint8,uint256,uint256)", +"5098e165": "locador()", +"5099a9dc": "getDistributionTokens()", +"5099dd6d": "Win(uint256,address)", +"5099e006": "proposeScheme(address,address,bytes32,bytes4,string)", +"5099e5ab": "cardIdForTokenId(uint256)", +"509a1061": "isContainerForShareToken(address)", "509a13dd": "RoundId()", +"509a5fca": "grantPermissionFeeless(uint256,bool,bytes32)", "509a7e54": "getRoot(bytes32,uint64,bytes)", +"509ab6d6": "mintStakingAndFarming(uint256)", +"509b1a08": "approve_771(address,uint256)", +"509bd337": "voteOption(uint256,uint256)", +"509beb67": "loanExpirationPeriod()", "509bf2bf": "axe()", "509c3fc8": "createTestNetContract(address,address,address,uint256,uint256,uint256)", "509c5df6": "reservedFunds()", "509c5eee": "ASGToken()", "509c90b3": "callTokenFallback(address,address,uint256,bytes)", +"509ca8e6": "satay()", "509cd360": "Board()", "509d6d72": "mediumPrice()", "509d8c72": "VALUE()", +"509db2f6": "setParams(address,address,uint256)", +"509e3e32": "contractPause()", +"509e66ba": "maximalNumberOfParticipants()", +"509e88d5": "claimablePop(address)", +"509ef27c": "WINDOW_SIZE()", +"509ef437": "repeatBlock()", "509f0fe4": "setupFundingTime(uint256,uint256,uint256)", +"509f5b14": "LP_RELEASE_TRUNK()", +"509f6ab8": "setBurnRestricted(bool)", "509f6ff8": "AquaToken(uint256,string,string,uint8,uint8,address)", "509f7cf2": "testingForFun(uint256[])", "509f8633": "create_account()", +"509fce5b": "UNRECOVERABLE_ETI()", "50a09c7a": "refBonusPercent()", "50a09d60": "SaleIsLive()", "50a0f733": "final_shares_sold()", "50a107cc": "setVotingPhase()", "50a13702": "denyChangesMultitoken(uint256)", +"50a138df": "logBytes9(bytes9)", "50a14ea4": "returnPreSaleTokens(address,uint256)", "50a1676e": "createdAt(uint256)", "50a1debd": "robAll()", "50a22ee1": "BancorGasPriceLimit(uint256)", "50a2f067": "getfromid(address)", +"50a314c9": "exit_(address)", "50a3bd39": "enterPool()", +"50a3fd6c": "maxPrizeShare()", "50a49f5f": "getBurnDelegates()", +"50a55fe6": "LIQUIDATION()", "50a58b3f": "exist(address,address[])", "50a5c872": "host_reveal(uint256)", "50a5ebd9": "updateSpaceshipStatus()", +"50a63046": "creed()", +"50a635b7": "tokensToEthereum_(uint256,bool)", +"50a66a3d": "setLiquidityLoop(address)", "50a675fe": "QQBToken(address)", "50a6887c": "UpgradedNodelist()", +"50a6aaf4": "capper()", "50a6b423": "settlementPayOut(bytes32,uint256)", +"50a75fae": "_getUnderlying()", "50a7755e": "newDad()", +"50a7af76": "pausedProvided()", +"50a7f7d3": "courier()", "50a82265": "EventEmergencyStop()", "50a8246f": "testRIPEMD160()", "50a85d36": "DeathNode()", "50a8d2b9": "getNumSigsOwned(bytes32)", +"50a8dbb7": "LockTokens(address,uint256)", +"50a9ae4b": "xbalance2()", "50a9b541": "bootyToken()", "50a9cbd1": "partyCoincieded(address,uint256,address)", "50a9e127": "backup()", "50a9eddb": "testControlSetNotUpdatableNotOwner()", +"50aa9fa8": "wrapUNIv2(uint256)", "50ab6f7f": "getMsgs()", +"50ac2f69": "ethFeeToUpgradeToLevel2Set(uint256)", +"50ac3f74": "fakeTokenContract()", "50ac9828": "FileData()", +"50ace3ef": "PurchaseFinished()", +"50ad08f5": "GameStarted(uint256)", +"50ad19a6": "getLeagueContractAddress(uint256)", "50ad2f76": "vendGuardian(uint256)", "50ad7321": "GPSDecayingTokenEnvironment(uint256,uint256)", +"50adbd7a": "payoutReferralBatch(uint256,uint256)", "50adc70a": "winning_country_string()", "50adcdb7": "fundToken()", "50ae28ea": "StandardCertificate(string,string,string,string,uint256)", +"50ae3c44": "pure_bytes1()", +"50ae4ba8": "filler(uint256)", "50ae85d8": "reservedAddr()", "50aeddcf": "censorChatMessage(uint256)", +"50af3160": "TransferRightGiven(address)", +"50afa34b": "notifyExternalReward(uint256)", "50b0021c": "currentRandom()", "50b04a4e": "getCountryById(uint8)", "50b066b2": "changelp13(address)", +"50b0952b": "MAX_BLOCK_DISTANCE()", +"50b0c917": "setupGameTest2()", +"50b0ce9f": "rescueRatioLock(address)", +"50b11174": "setKstPerBlock(uint256)", "50b149a9": "setPriceStep1(uint256)", "50b1a697": "toReferrer(uint256)", "50b1ab69": "PET(uint256,string,string)", "50b1f058": "fetchPaidOrdersForPayer(address)", +"50b23e85": "ethUniswapRate()", +"50b28af7": "getGovTokensAmounts(address)", +"50b2a881": "setMarketingAccount(address)", "50b2ae66": "transferChips(address,address,uint256)", +"50b3d1c2": "stake1()", +"50b3e0cd": "megaUpdate(uint256)", "50b44712": "tickets(uint256)", +"50b48710": "bnbPerBlock()", "50b48c5e": "autonomousConverter()", +"50b492ba": "distributors(uint256)", "50b58c06": "JuggernautToken()", "50b5bc93": "unlockFirstTokens()", +"50b5c16a": "adapterRegistry()", "50b62939": "getAddressBalance(address,address)", "50b6ba0b": "getWtoken(uint8)", +"50b6bbc2": "updateMaxGarmentsPerCollection(uint256)", +"50b71261": "buyLevelPool(uint256)", "50b79722": "setSanLength(uint256,uint256)", "50b7b7a2": "setRating(bytes32,uint256)", "50b7e942": "acquireTokens(uint256,uint256,address,uint256)", +"50b814a0": "swapWithFeeRewardDistribution(uint256,address,uint256)", "50b82a48": "objectSack()", +"50b84fc3": "totalNyanV2Held()", +"50b89817": "getUnitDefenseIncreases(address,uint256)", "50b91881": "setKycWhitelist(address,address,bool)", "50b926fd": "UnityToken()", "50b93b3b": "sendBuzzCafe()", @@ -46312,98 +84822,176 @@ "50baa622": "withdrawToken(uint256)", "50bacea9": "icoPhaseAmount1()", "50bb117a": "defrostDate(address)", +"50bb1c50": "lostTickets(uint256)", "50bb4e7f": "mintWithTokenURI(address,uint256,string)", +"50bb9a75": "deposit(string,uint256,uint256,uint256)", "50bc051e": "lockedForAsset(bytes32)", "50bc373d": "regionAvailable(uint256,uint256)", +"50bc4a98": "getResults(address)", "50bc4ae6": "_joinToProvider(uint256,address)", +"50bc4dea": "startLock(address)", "50bc6bba": "createSaleAuction(uint40,uint128,uint128,uint40)", +"50bc7bda": "addAgentOnIdentityRegistryContract(address)", "50bd1933": "UberDelta()", "50bd5cb9": "logDisputeCrowdsourcerTokensTransferred(address,address,address,uint256)", +"50bd6a35": "teamTimelock5()", "50bda35a": "setCharge(bool)", +"50bda767": "BSPAM_IECI_Network_Activation()", "50bda77e": "updateJobRate(bytes32,uint256)", "50be7503": "giveToken(address,uint256,address,bool)", +"50be99ad": "reInvest()", "50beb835": "getDeploy(uint256,uint256)", "50beca78": "isTrainer(address)", "50bed043": "sendFunds(address,uint8,uint256)", +"50bf2642": "perpetualAltruism()", +"50bf28b6": "hexDivs()", +"50bfba99": "pointerContract()", "50bfeadc": "initialTokens()", +"50bff6bf": "testThrow()", "50c007c6": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[5])", +"50c03c27": "totalplayedgames()", +"50c083fc": "getInternalSoftwareDevTeamsAddress()", +"50c0db14": "ClaimResult(uint256)", "50c0f2b9": "licenseTermsRegistry()", "50c0fbe4": "getBlockNumber(uint256)", "50c15c93": "depositChecking(address,uint32)", +"50c190a9": "setupBase()", +"50c1b923": "setUSDT(address)", +"50c234ea": "totallocked()", +"50c28588": "MyTokens(address)", "50c2e4f6": "ADVISOR_SUPPLY()", "50c34878": "priceOfAUnicornInFinney()", "50c35227": "central_account()", +"50c358a4": "isDeployer(address)", +"50c36580": "getNeededTermTransitions()", "50c38479": "resetCurrentTokenOfferingRaised()", "50c3e676": "resolveErrorReport(uint256,bool)", "50c40877": "Nai()", "50c42921": "replicate()", "50c4b64c": "_unpackAuraValue(uint256)", "50c4ebc4": "finalTimestampOfBonusPeriod()", +"50c54370": "ordersBalance(bytes32,address)", "50c5c99a": "setScrapyard(address)", "50c67734": "setPricingStrategy(address)", "50c6784d": "ShareableMock(address[],uint256)", "50c6a4e0": "_buyPixelBlock(uint256,uint256,uint256,uint256,bytes32)", +"50c6e9a5": "MIN_HEROES()", "50c6ef88": "setChampsName(uint256,string)", +"50c727ad": "_beforeFallback()", +"50c73391": "presaleCreatorClaimTime()", +"50c73740": "SoftGoalReached(uint256)", +"50c7a35c": "AdminSetSharesAddress(address)", "50c7ac75": "addint8(int8,int8)", +"50c7e003": "sotaExchangeContract()", "50c8512b": "CollectibleNoLongerForSale(uint256,uint256)", +"50c86219": "payoutPercent()", +"50c86de5": "SERVICE_FEE()", "50c88103": "setEruptionThreshold(uint256)", +"50c8aae4": "f64(int256)", "50c8dbd2": "totalBlocksMined()", "50c90136": "fixedLog(uint256)", "50c90af0": "unLockAddr()", +"50c90b0f": "getProposalsName()", "50c946fe": "getNode(bytes32)", +"50c9dc70": "getapplyCoinListData(uint256)", +"50c9ecd9": "toggleBuyBack()", "50ca6227": "getTokenInfoData()", "50ca73c8": "aSetLaunch(uint256)", +"50cadc85": "getProvider(string)", +"50cbbe3a": "renounceManagement(address)", +"50cc23ff": "buyBackRateBr34p()", "50cc5d4b": "totalWeiVolume()", "50cca1e1": "rejectMail(uint256)", "50ccf36b": "getWeiPriceOneUsd()", +"50cd3fc0": "addHotel(address)", "50cd4df2": "o()", "50cd4f3f": "ScratchTickets(string,uint256,uint256,address)", "50cdbb6b": "setEarlyParticipantWhitelist(address,uint256)", +"50ce1962": "exitAdharmaContingency(address,address,address)", +"50ce486d": "getTop3Teams()", "50ce761d": "NumberCreated(address)", +"50ce8995": "validate(uint8)", "50cee5a0": "addToWallet(address,uint256)", +"50cee683": "allowedDistances(uint256)", +"50ceebd7": "winningChoices(uint256,uint8)", "50cf20dd": "richtestff(uint256,string,uint8,string)", "50cf569c": "getUserAttribution(bytes32,address)", "50d00b95": "authorizeProcessor(address,address,string,string)", +"50d02dcd": "registerAffiliate(address,uint8)", +"50d03996": "adminTokenWithdraw(address,uint256,address)", +"50d04816": "createContractTime()", +"50d08433": "getBindingAddress(address,uint8)", "50d0b060": "createVestingForFounder(address)", "50d12a72": "payReferrer(address,uint256)", "50d15fbe": "skills(uint256)", "50d17749": "BuyLimits(uint256,uint256)", +"50d20c7b": "_refundStake(uint256)", +"50d25bcd": "latestAnswer()", +"50d27312": "tokenOperatorApprovals(bool,address,address)", "50d279bd": "changeRewardMintingAmount(uint256,int256)", "50d2bfab": "set_exchange_rate(uint256[])", +"50d30914": "topCandidateVotes()", +"50d37bff": "currentRoundVolume()", +"50d405b8": "enableDegenMode()", +"50d41191": "createPerFirstWindow()", "50d491ab": "userGetPendingTxByAddress(address,address)", "50d4a2b9": "crowdsaleGoalReached()", "50d4bf15": "buy100ktickets()", +"50d4cdb6": "createPromoCharge(address,uint256)", "50d50324": "stopSaleDepo()", "50d5914a": "TOKENS_PER_ETHER_PRESALE()", +"50d60041": "calcUserStakeAndInterest(address)", +"50d62ba8": "noOfPeopleVoted()", +"50d6c1e8": "getWithdrawals()", +"50d6c47c": "BrickCancelled(uint256)", "50d6d893": "_rejectTransaction(uint256,address)", +"50d7496e": "Fee1(address,address,uint256)", "50d78f7d": "QueryFrozenCoins(address)", "50d7bf09": "record(string,string,string,address,bool,string,string,string)", +"50d7c72d": "calculatePriceTest(uint256)", "50d7d290": "withdraw_refund()", "50d7da00": "GSH(uint256,string,string)", +"50d7ede2": "abond()", "50d808d4": "StartTradable()", "50d80fef": "addOffChainAddress(address,address)", +"50d85315": "speak()", "50d8bcf3": "SMLToken(address)", +"50d91deb": "addOrderBatch(bool[],uint128[],uint128[],uint32[],bool[])", "50d925fb": "REBELCOIN()", +"50d95105": "take_fees_rxp_dev()", +"50d9533e": "lotteriesCount()", "50d9b932": "PatronOneWithdrawal()", "50d9d472": "numberOfAuctions()", +"50da3e8a": "CnyBtcRateUpdated(uint256)", "50da9f6d": "SellENS()", "50dad350": "Hodling(bool)", "50db7247": "maxCapPreSale()", +"50db949d": "options(int256,int256)", +"50dbb4cb": "getInitcode()", "50dc26ec": "TokenUser(address)", "50dc43a1": "addGameMachine(address)", "50dc4bfe": "addUserFeedback(address,uint256,address,string,string,string,string,string,string,uint8)", +"50dc78f9": "onUpgradeComplete()", +"50dcb3bd": "initStartBlock()", "50dcce5a": "upPrice()", +"50dd74f7": "LogRegisterChain(address,bytes8,uint256,bool)", +"50dd94ba": "buyParticipationTokens(address,uint256)", +"50dda22c": "_payProtocolFeeToFeeCollector(bytes32,address,uint256,uint256,address,address)", "50ddd6f7": "addToEmployerAvgRating(address,address,uint8)", +"50de215d": "canModifySAFE(address,address)", "50de84c1": "CesiraeToken()", "50deda1c": "addtoken(address,uint256,uint256)", "50dede35": "marketDrugs()", "50df10c3": "lockTill(address,uint256)", +"50df386b": "Created(address,bytes32,address)", +"50df52bc": "getRandomBlock()", "50df7eb4": "unsoldTokensAmount()", "50df8f71": "isReady(uint256)", "50e01e16": "Registered(address,bytes4,string)", "50e036ff": "allowedContractsCount()", "50e06b57": "Etherization()", "50e08ddb": "devidendsOf(address)", +"50e0bc6c": "usdtAddressForBuy()", "50e14731": "BKEXComToken()", "50e17308": "maxMineSize()", "50e17975": "_badgeFreeze(uint256)", @@ -46411,26 +84999,40 @@ "50e26c23": "getAssetBaseInfo()", "50e27f2d": "TicTacToeLockedState(address,address,address,address,address)", "50e28cb3": "SECOND_USER_CUT()", +"50e2aee0": "addWhitelisteds(address[])", "50e2ccad": "CoreTeamAndFoundersSupply()", +"50e2dd36": "removeBluelisted(address)", +"50e2e8af": "voterList(uint256)", "50e343d0": "prWallet()", "50e37961": "setWhitelisting(address,uint128)", "50e38e63": "groupMemberInfo(uint32,address)", "50e3b157": "sharesValue(uint256)", +"50e3b2e7": "setMinLoanSize(uint256)", +"50e3bc6d": "ifStaking(address)", "50e43c9c": "c(address,int256,int256)", +"50e455ad": "del(uint256,uint256)", +"50e46f2f": "countSmartpotThree()", +"50e49764": "claimUnlocked()", "50e4b069": "set0xExchangeWrapper(address)", "50e513ac": "destroyUser()", "50e59eb3": "isMinter()", "50e706fb": "getProposalFunds(uint256)", +"50e70d48": "wrapped()", "50e72f61": "Break()", "50e78690": "getHomeGasPrice(bytes)", "50e7dde2": "setParetoToken(address)", "50e81a3b": "setProviderCompleted(bool)", "50e81e08": "_releaseToken(address)", +"50e82fe5": "disableValidUntilBlock()", "50e84925": "saleEnd3()", +"50e85599": "juniorName()", "50e8587e": "multiApprove(address[],uint256[])", "50e862db": "mint(bytes32,string,uint256)", "50e86e1e": "setOwnerValidateAddress(address)", "50e878df": "updateOrderAmount(address,address,uint256,address,uint256,bool)", +"50e8cc79": "decreaseMintAllowance(address,uint256)", +"50e9623d": "exitSwap()", +"50e9bf32": "gameItemIndexToOwner(uint256)", "50e9f948": "initialFiatPerEthRate()", "50ea1932": "lookupISO3116_1_alpha_2(bytes)", "50ea1c95": "MyIdolCoinToken()", @@ -46442,76 +85044,140 @@ "50ec2a6a": "batchCancel(address[5][],uint256[6][],uint256[])", "50ec5903": "blackListSwithcer(address)", "50ec6b1b": "getNamelistLength()", +"50eca7ef": "sendAEthTo(address,uint256)", +"50ed07fa": "yourStakedGLXY(address)", "50ed2a2c": "poke(uint128,uint32)", +"50ed52fe": "userInfoes(address)", "50ed6264": "lastStakings(address)", +"50ed6aac": "seedNextProtectedLiquidityId(uint256)", "50edd8c2": "nestedFirstAnyToAny(uint256)", +"50ee5fa9": "playerCommentsIndex_(uint256)", "50ee6de2": "candyLand()", "50eebaf7": "mininumPurchaseTokenQuantity()", +"50eec2a1": "AddressCardWasTransferred(address,address,address)", +"50eefdb4": "_afterCall(bytes32)", +"50ef1f5d": "trades(bytes32,uint256)", "50ef3bae": "getQuestionVote(string,uint256)", +"50ef5c35": "getLiquidationInfo(uint256)", +"50ef8159": "finalizeRestore(address,address,uint256,uint256,uint256)", +"50efa210": "roomRefunded(uint256,address[])", "50efc7c0": "districtToBuildingsCount(uint256)", +"50f068c8": "calculateMatchCount(uint256)", "50f07cf9": "setReadingDelay(uint256)", "50f0880e": "sendLimitTokensToCompany(uint256)", +"50f0e432": "_peter()", "50f0f83d": "getTransferFromFromValue()", "50f1179a": "setPriceOfAss(uint256,uint256)", "50f1c695": "authorizedLoggers()", +"50f1c94f": "feePaused()", +"50f1dedc": "_signerCount()", +"50f23727": "getTokensLimit(address[])", "50f2fb7f": "getCalls()", +"50f34976": "CastleOfferAccept(uint256,uint256,address,uint256)", +"50f3bf30": "geticodate()", "50f3dd7a": "assembleUnicorn()", +"50f3fc81": "providers(uint256)", "50f4556b": "WhiteRhino()", "50f462a4": "validationFailed(address)", "50f46eef": "calcToken(uint256)", +"50f475b6": "completeOrderBuyer(uint256)", +"50f49846": "rawLiquidationCollateral()", "50f49db1": "getSlideEndTime(uint256)", "50f4f9f8": "addShare(address,uint256)", "50f503c1": "isSspRegistered(address)", "50f5ef78": "getWork(address,address,uint256)", +"50f610eb": "buyTokensWithDAI(uint256,address)", +"50f62da7": "depositAmount(address)", +"50f63054": "withdrawn_admins(address)", "50f71526": "necashToken()", +"50f7a03b": "isSwapExist(bytes32)", "50f7c204": "maxTokenSupply()", +"50f84af1": "b58_encode(bytes)", +"50f8a803": "normalizePledge(uint64)", "50f8fc97": "LogCertificationDocumentRemoved(address,bytes32)", "50f91ee3": "withdrawTokensRemaining()", "50f93381": "logDisputeCrowdsourcerContribution(address,address,address,address,uint256)", "50f956db": "nextAmount()", "50f96b5d": "minEthPerNotification()", "50f9b39e": "getReward(address,uint256,uint256)", +"50f9b6cd": "called()", "50fa5d13": "stage4BeginTime()", +"50fa8221": "pendingInterest()", +"50faaeff": "broadcastSignedRequestAsPayerAction(bytes,address[],uint256[],uint256[],uint256,bytes)", "50fb5a92": "buyWithReferral(uint128)", +"50fb94ff": "sellToDex(uint256)", +"50fbd642": "CETH_ADDR()", +"50fcced8": "setMaxSpending(uint256)", "50fcff5c": "extCheckHalfLife()", +"50fd7367": "list(uint256,uint256)", "50fdb01a": "setNewWinner(address,uint256)", +"50fe4261": "ContractRepo()", "50fe533b": "getLevitatingBirds(bytes32,uint64)", +"50fe874c": "wethaddr()", "50feacc5": "PriceManual()", +"50fecace": "OnSold(uint256,address,address,uint256,uint256,string)", "50fed3b4": "buy(address,uint256,uint256,uint256,bool)", +"50fee927": "noVisibility2()", "50fef2e4": "tokenAirdropLeft()", "50ff0761": "R_N_D_WALLET()", "50ff2015": "endAtBlock()", +"50ff40fb": "disableItem(uint8,uint8)", "50ff722b": "getChannelsGuids()", "50ffbe81": "checkBan(address)", "51003cab": "minimumIcoRate()", "510040cb": "releaseLocked()", "5100602a": "preallocate(address,uint256)", +"5100625a": "totalProfitByAddress()", +"5100b572": "emitBridgeTransferFromCalled(address,uint256,address,address,address,address,uint256)", "5100beab": "luxuriumGold()", "5100db6f": "SYCC()", +"51012ba9": "unBlockAccount(address)", "51017702": "isOutcomeSet(bytes32)", +"51018715": "partner2Wallet()", "5101880f": "CPXWallet()", +"51018f03": "recommendSlate(address,uint256[],bytes)", +"5101e128": "add(address,uint256,uint256)", "510219cd": "defaultAuctionDuration()", +"51024fbc": "inflateWithDonor(uint256,address)", "51027320": "EUNOMIA()", "5102ad69": "setImpactRegistry(address)", +"5102b170": "setAllowSharePriceDecrease(bool)", "5102bc9d": "setTitle(uint256,string)", "5102e238": "test_oneInvalidEqAddress()", +"5102f36b": "archivedGoldInfos(address,uint256,uint256)", +"5102f656": "stageAmounts(uint8)", "5103a5a3": "certify(address,bytes32)", "5104a3a7": "burnedTokensCount()", "5104cb5c": "refundOnBehalf(address)", +"5105d1d4": "onSellEggs(address,uint256,uint256)", "5105df3b": "buyTicketByEth(uint256,bytes32,bytes32,bytes32,bytes32)", +"5105ee71": "SetLockedAmount(address,uint256)", +"51061331": "targetStake()", +"510647c4": "readableResults(uint256)", "5106b8fe": "transfer(address,address[],uint256)", "510792c8": "hydroPartnerMap(uint256,address)", +"51079643": "rfi_rico_uni_lp()", "5107c0a8": "FBEE()", "5107fde8": "lockedTeam()", +"5108a558": "pendingStrategy(address)", +"5108baf8": "OnUpdated(address,uint256,uint256)", +"51093a76": "callDepositTRX()", +"510948d7": "getUserPendingEMAX(address)", "510a3e2a": "round2Bonus()", "510ae121": "Yangshuai(uint256,string,uint8,string)", "510b1529": "issueTranche(uint256)", "510b5158": "creator(uint256)", +"510b78d0": "CRV3()", +"510b82fe": "Refund(uint256,address)", +"510be014": "_balancesAccounting(address)", "510bf040": "launchVesting()", "510c27ad": "getOracleList()", +"510c3005": "getAuctionLobbyParticipateAvailableCycle(address)", "510c58c9": "Gig9()", "510c8243": "CategoryDeleted(uint256)", "510ccb43": "getRewards(address[])", +"510d4fc7": "maxFreeWithdraw()", +"510d876f": "firstRoundLosers(uint256)", "510de15a": "ICOSaleExtended(uint256)", "510e23eb": "invalidEarlyPurchaseIndexes(uint256)", "510e4235": "_createForecast(uint256,uint256,uint256)", @@ -46521,126 +85187,230 @@ "510ef1de": "setTokenMetadata(uint256,string)", "510f44cb": "TestFactoryUser()", "510fbf8d": "setValue(address,string)", +"510fc61a": "rm()", +"510ffc9b": "renounceMinting()", +"51105bd4": "setLiquidityProgressRate(uint256)", "511075a9": "getIpfsForAssets(uint256[])", "5110d31c": "TradeEthShop(address,uint256)", "5111249e": "checkMultOverflow(uint256,uint256)", "51114b24": "interSendWithOtherEvent(address,uint256)", +"51116722": "setOpeningTime(uint32)", "51118f1d": "transferFromSystem(address,address,uint256)", +"511257a9": "withdrawMainToken(uint256)", "5112f02c": "getCard()", "51131017": "setUpdateGasCost(uint256)", "511354a1": "phase2MaxTokenForSale()", "5113d5f7": "BTCETC(uint256)", "51142cc3": "secondStageCap()", +"511447de": "ymi()", +"51146bf7": "tradeIdToTrade(uint256)", "5114a9aa": "TheBestICO()", "5114cb52": "makePayment(uint256)", +"5114d0d9": "flagAggregator(address)", +"51154a8b": "softCapTimer()", +"51157329": "checkTimestamp()", +"5115905b": "ChangeHardCapToken(uint256,uint256)", +"5115e997": "JobCreated(address,uint256,uint256,uint256,string)", +"51160630": "settlement()", +"51160aeb": "getETHForToken(address,uint256,uint256,uint256)", +"511627c6": "COTCoinAddress()", +"51163ad0": "UserLink(bytes32)", +"51169eaa": "setNewRoundInterval(uint256)", +"51169f6b": "borrow(address,address,uint256,bool)", +"511715bc": "stageFourBegin()", "51172285": "TwoAfrica(uint256,string,string)", "51175e01": "setNumRewardsAvailableForAddresses(uint256[],address[])", "51180c63": "removeValue(bytes32)", +"5119003b": "setMinIdoUSDAmountEachDeposit(uint256)", "51192814": "GenesisBuyPrice(address,address)", +"51193102": "hashAddress()", "51193bad": "LUVTOKEN()", "5119a342": "GetUserInfo()", +"511a464d": "_claimableBalances(string)", +"511a650f": "getDepositSingleToken(address,address,uint256)", "511aae8b": "addFreelancerContract(address,address,uint256)", "511acd53": "TOKEN_RATE_30_PERCENT_BONUS()", "511b1df9": "addr(string)", +"511b3983": "GetFunctionData()", "511b445b": "nowperiod()", "511bb41c": "rebateTwoFenmu_()", "511bc0f6": "_addOwner(address)", +"511bf864": "validateProviderOfContract(uint256,address,string)", "511c5d66": "SetAddressForReturn(address)", +"511d09cf": "userLastDividened(address)", "511d2299": "processBNBContribution()", "511e2613": "getoddAndEvenBets(uint256,uint256)", "511e5639": "KamuToken()", "511e84ce": "setIsAutoRestart(bool)", +"511e9b3d": "getPersonalRounds()", "511eb8da": "confirmOrder(address,address,address,address,bytes32)", +"511f4073": "fundDepositAndReserve(uint256,uint256)", +"511f5e7d": "totalDai(address)", "511fa487": "getMinSell(address)", +"511ffbff": "redeems(address)", +"512001b1": "setReduceRate(uint256,bool)", "5120429c": "TokenSold(uint256,uint256)", "51206d81": "getRefWallet()", +"5120869c": "_getGemLPDifficulty()", "5120bb20": "transactionsOn()", "5120f028": "sendAmount(uint256,address)", +"5121220c": "systemBalance(address)", +"5121546c": "adjustMinter(address,bool)", +"51215eff": "getHardLimit()", "512202d7": "getOuvidoriaEndpoint(int256,address)", +"51221873": "delete_blockedAddress(address)", +"51222d50": "setStake(address,uint64)", "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[])", +"5123a0da": "priceOfBNB()", "5123e1fa": "etch(address[])", "51243676": "LogBookTicket(uint256,address,string)", +"512469c5": "flashloan(address,uint256,address)", "5124ae95": "getNonces(address)", "51252412": "crowdsaleTargetBRA()", "51254729": "CynkciarzToken()", "512570d6": "updateBrand(address,string,bool)", "5125796a": "changeOraclizeProofType(bytes1)", +"51258616": "BurnEvent(address,uint256)", "51259770": "GetEthShop(address)", +"51260791": "GetUserTotalCollateralInUsd(address)", "51274842": "logEvent(uint256,string,uint256,uint16,address,uint256,uint256)", +"51278759": "batchPrepareRewardTable(uint256)", "5127a94a": "getRaisedAmount(string)", "5127ad4c": "getTokens(address,uint256,uint256,uint256,uint256)", "5127cab5": "rateFirstRound()", +"5127dfc0": "getRiskAndValue(bytes32)", +"5127ed43": "redeem__(uint256)", "5128ab7b": "GetSaleInfo_Airdrop(uint8)", +"5128fd85": "typeTwomapping(string)", "5129096c": "INGCL()", "51290d06": "cofounderB()", +"512933a3": "_severePunishment()", +"51293866": "registerDevs(address[])", +"51294de7": "resetInvestment()", "51297cc6": "airDropTokenEnabled()", +"512a2011": "allDate()", "512a9c33": "startCrowdsale(string,string,uint8,uint256,uint256,uint256,uint256,uint256,uint256,address,string)", +"512b466a": "setBuyThreshold(uint256)", "512b64c6": "_productDoesNotExist(uint256)", "512b658d": "mintToAddress(uint256,address)", +"512b7ab6": "Emission(uint256)", "512c0b9c": "randomDS_updateSessionPubKeysHash(bytes32[])", +"512c3aea": "readWalletInfos(uint256)", +"512c6271": "inviteCoachBack(address,address,uint256)", "512d62df": "getClass(uint256)", "512d8a87": "EdwanzToken()", +"512da898": "migratePayFeeWithDebt(address,bytes32,address,uint256,uint256)", "512dd020": "getItemsCount()", +"512e5f9b": "getLoansForLender(address,uint256,bool)", +"512ea840": "createToken(uint256,bytes)", +"512eba64": "AddPrizeBalance(address,uint256)", "512f1e64": "orderBookLength()", +"512f2a94": "confirmWithdraw(address,address)", "512f8f92": "changeLottery(address)", "512f9890": "airDropFinished()", "512fcd60": "changeOwner3(address)", "512ff2c9": "CHEXToken(address,address,uint256,uint256)", +"513054bf": "NewPetitionShareholder(uint256,address,uint256,uint256,uint256)", "51306a80": "_isVotable(bytes32)", "5130b405": "setMinimumBidAmount(uint256)", "5130c857": "forking()", +"5130d734": "totalBuy(address)", +"5130f5f5": "Breed(uint256,uint256)", +"51310c45": "getEcosystemAddress()", +"51318b51": "toggleDefaultInitialDiscount()", "5131d3e9": "setUseFreeze(bool)", "5131f01d": "available_shares()", +"51322bf9": "addSproofAccount(address)", +"51323f72": "setAssetPrice(address,uint256)", +"513269f6": "withdrawalProposals(uint256)", "51327a6a": "emptyToWallet()", "513284c6": "createShop(address)", +"513295eb": "newFarm(address)", "5132faca": "stakeTokenContract()", +"5132fe13": "customerAccess(address)", "51331732": "ICO_start()", +"5133193c": "benzTickets(uint256)", "51331ad7": "getRoleManager()", +"513332fe": "momoPerBlock()", +"51339950": "hashLock()", +"5133ae24": "dates(uint256)", +"5133ca91": "period_block_num()", +"51340a5b": "MANAGING()", "513419e3": "updateStartTimeManually(uint256,uint256)", +"51344683": "depositBNB(string)", +"51346424": "expectedProfit(bool)", +"51348454": "loanIDCounter()", "513485fc": "CallRejected(address,bytes32)", "51349d5f": "scheduleTier(uint256,uint256)", "5135077b": "setContentName(string)", +"51354832": "getYieldToken(uint256)", "51355362": "transferWithFee(address,uint256,uint256)", "51355cfb": "getTier(uint256,uint256)", "51356817": "doPull(address,uint256)", "5135d28d": "getScore(uint256,uint256,uint256[])", +"5135da4f": "StarAngels(address)", "5135dffa": "NonActivationWithdrawal(address[2],uint256[8],uint256)", "5135f714": "Basic(address)", "5136099c": "premium(bool,address,address,address,address[],uint256[])", "513611e5": "setStatusTransferFrom(bool)", "5136260d": "getLockedFundsReleaseTime()", +"51368e25": "math(uint256,uint256)", +"5136c3d0": "mochiPerBlock()", "51379adb": "Crowdsale(address[],uint256,uint256)", "5137aa7b": "reveal(bytes32,uint256,bytes32)", "5137dd99": "only666()", "5137de7a": "privateReleaseTime()", +"513856c8": "agents(uint256)", "5138574b": "setNextCommonTTMTokenId3(uint64)", +"513872bd": "time_total()", +"51389626": "procNormalBuyBack(address)", +"5138b08c": "settleAuction(address,uint256)", "51392041": "getDividendTokenBalanceOf(address)", "513a0149": "setRocCoreAddress(address)", +"513a3dba": "modifyParameters(bytes32,bytes32,address)", "513a976e": "YaqootToken()", +"513ab464": "balanceOfStaged(address,address)", "513ad9cb": "EvTokenRm(uint256,uint256,uint256)", +"513c29b5": "updateEthRecipientAddress(address)", +"513c508a": "rewardPerTokenBStored()", +"513c7006": "calculateTokenFromUSD(uint256)", "513cb145": "convertToUSD(uint256,uint256)", +"513cd47a": "lastMember()", +"513d029f": "OrderCanceled(address,address,address,bytes32,uint8,uint256,uint256)", "513d085b": "Pandemica()", "513d16a7": "setFundingStartTime(uint256)", +"513d9792": "isCanReg(address)", +"513da948": "emissionStart()", "513de1d3": "changeDivisor(uint256)", +"513e2971": "setChainlinkWrapper(address)", +"513ea755": "cancelTopUpPayment(uint8,bytes32,bytes32,bytes32)", "513f7d1e": "tokenValue(address)", "513f99e7": "tokenFrozen(uint256)", "513fdce9": "addClearingPriceValidator(address)", "51401d4d": "gameMaxBetAmount()", "51404cbe": "forceDivestOfOneInvestor(address)", "51409f51": "currentTradingSystem()", +"51411081": "getStorageBool(bytes32)", +"514198be": "_decode_sol_bytes9(uint256,bytes)", +"5141c6c7": "TokenVerify(address,bool)", +"514254ea": "relaseTime4()", +"514276e5": "balanceOfBank(address)", +"514289eb": "cloudDoRound1(uint256,uint256)", "5142ba74": "rolloverFeePeriod()", "5142bc1e": "getAllowedRangeOfChoices()", "5142c3ec": "assertEq13(bytes13,bytes13)", +"5142f2db": "test_long()", "51430cb3": "claimMaxAmount()", "51431800": "getSendableEther()", "5143284d": "start4NormalPeriod()", "5143659d": "claimCooldowns()", "51436641": "convertToMiniCQS(uint256)", +"514367b0": "allowedAdresses(address)", "5143821e": "_moveToArea(uint16,address)", "514385be": "disableConnectorPurchases(address,bool)", "5143a9fe": "deposit(address,uint256,address,bytes)", @@ -46648,54 +85418,97 @@ "5143eea2": "addOwnerFromRecovery(address,address)", "514403b3": "setnodemoney(address,uint256)", "5144417c": "news()", +"514467b9": "setMyWishAddress(address)", "51446e85": "CITRUX()", +"51456061": "getSynth(bytes32)", +"5145cbc0": "getSmartContractBalance()", "51464905": "updateGoldInvestor(address)", +"51465030": "sendMISCETH(address,uint256)", "5146585a": "calcInterestRateNumerator(uint256)", "5146690e": "reservesWallet()", "5147af92": "buyGasLimit()", +"5147fba1": "templateOf(string,uint256)", "51489551": "getToken(bool)", "5148ccb9": "DynamicCeiling(address,address)", +"5148d831": "setBalanceOfZrxVault(uint256)", "5148de8d": "minimumTimeBeforeUpdate()", "5149ffcb": "calculateSubmissionIndex(uint256)", "514a48ae": "_changeApproveDate(uint256)", +"514a554d": "getGetallen()", +"514a783c": "lcpMint(uint256,address,uint256,bytes)", "514a88ae": "revokeSchedule(address,address,address,address)", +"514ad1f5": "artId()", "514ae8a6": "MagneticsToken(uint256)", "514b13f2": "presaleConversionRate()", +"514b2fd8": "DepositRewardsPool(uint256,uint256,uint256)", +"514bb531": "index2groupName(uint256)", +"514c399a": "__getValueInterpreter(address)", "514d6e07": "horseShoeFS(uint256)", "514d7067": "workOrderCallback(address,string,string,string)", "514d717c": "developReserveWallet()", "514dcfe3": "seller_accept()", +"514e5372": "userLotteryTicker(address,uint256)", +"514ea4bf": "positions(bytes32)", "514ec8ae": "TOKEN_CENTS()", "514f0330": "changeProtocolFeeRecipient(address)", +"514f0754": "NewBase(bytes32,address)", +"514f220f": "TokenFrozen()", "514f310f": "_NewChallenge(address,bytes32,uint256)", "514f4711": "In(address,uint256)", "514fcac7": "cancelOrder(uint256)", +"514ff45b": "brap()", +"5150179c": "reward_level_1(address)", "515053c6": "depositBond(address,uint256)", +"51508f0a": "setRewardContract(address)", "5150e8ce": "CPPGToken()", "515134b3": "TianZhuCoin()", "5151e2cc": "GREENBIT()", +"5151f579": "delegatecallSetN1(address,uint256)", "5152249c": "Paladin(uint256,string,string)", "51524e5b": "AirDrop(address[],uint256[])", +"51527c80": "defaultMediator()", "5152abf9": "OrderCancelled(bytes32)", +"5152b14c": "contractOwner(address)", "515361f6": "assertEq(address,address)", "515371a3": "getWinnerAddress(uint256)", +"5153786b": "getToken1Balance()", +"5153e94a": "setPinnedCode(address)", +"51541b5d": "ResistWhiteList(address,bool)", +"51544bc0": "leaseDetailByNftTypeAssetId(string,uint256)", +"5154796b": "testCloseMintFunction()", "5154865a": "crowdFundAddress()", "51548a2d": "TOKEN_AMOUNT_ICO_STAGE2()", "5155287a": "whitelistedMin(address)", "51553205": "PreSale(address)", +"515535e8": "getLastBatchId()", +"51554041": "ovens(uint256)", +"51557289": "_ADMIN()", +"5155b3ce": "updateTotals()", "5155bafa": "maxPeriods()", +"5155cb16": "viewers(uint256)", "5155d9c6": "getPetCardSeries(uint8)", "51560da9": "topDogInfo()", "51563527": "passDao()", +"51563679": "addWETHTokenPair(uint256,address,bool)", +"51569d17": "signatoryFromDelegateSig(address,uint256,uint256,uint8,bytes32,bytes32)", "51576510": "bountiesWallet()", +"51577ea9": "getContentHash(bytes32)", +"5157ced5": "unpauseDeposit()", +"5157d01b": "kyberTest2()", "51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", "51584916": "allowexternalContract(address,uint256,bool)", +"51589902": "getPositionsCount(address)", "5158c829": "RECFCO(address,address)", "5158ea5e": "disallowUsers(address,address[])", "51593759": "carCountOf(address)", +"51599b15": "isCandidate(string)", "515a20ba": "setExpiration(uint256)", +"515a4016": "getNextBatchTime(uint8,address,uint256)", "515b1e41": "zss()", "515b3557": "STARTING_CROCS()", +"515b5ae2": "calcMinAmountsIn(uint256,address[])", +"515bd8cd": "currentFoundationPool()", +"515be4e0": "getAvailableClaimAmount()", "515c1457": "emitTransfer(address,address,bytes32,uint256,string)", "515cbcb4": "dropCoinsMulti(address[],uint256[])", "515ced53": "best_submission_index()", @@ -46704,14 +85517,21 @@ "515da4b9": "transactionList()", "515f128b": "COMMUNITY_POOL_TOKENS()", "515f25ae": "launchShipOnMEA(uint256,uint8)", +"515f6548": "approve_317(address,uint256)", +"515f903f": "getRequiredVotesPercentageToAccept()", "515fdde3": "migrateFunds(address,address[])", +"515ffb03": "setWildcard(uint256)", "51602590": "threeHotHoursPriceOfTokenInWei()", "51605d80": "imageHash()", +"5160696c": "setGovernor(address,bool)", "5160a21e": "AddDomainInfoDocument(string,string)", "51613683": "crowdSaleStart()", +"51617b78": "confirmRedeemIntent(address,uint256,address,uint256,uint256,uint256,uint256,bytes32,bytes)", "5162b2b2": "isAddressWhitelist(address,address)", +"5162f6af": "batchTokenDecimals(address[])", "5163311e": "getLastWinnerTicket()", "51640fee": "getCertificate(uint256)", +"51646542": "log(bytes10,bytes11,bytes12,bytes13,bytes14,bytes15,bytes16,bytes17,bytes18,bytes19,bytes20,bytes21)", "5164bb4d": "getCurrentStinkyLinkys()", "51651003": "redenom_dao_fund()", "516517ab": "make(uint256)", @@ -46719,66 +85539,119 @@ "51656f08": "AgesToken()", "5165749e": "createToken(string,string,uint8,uint256,address)", "516583fe": "depositFrom(uint256)", +"516595fc": "addBorrowAssets(address,address[])", "5165a03d": "payout(uint256,bytes32,bytes32,uint8)", +"5165da30": "create(address,uint256,uint256)", "5166b68f": "unfreezeTransfersUntil(string)", "5166cf3d": "canAttack(address,address)", +"5167a0b6": "setCommission(uint256,uint256)", "5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", +"5169448b": "claimWpc(address[],address[],bool,bool)", +"51694f95": "chgBlockReward(uint256)", "5169ed0e": "getCCH_edit_29()", "516a6b22": "PingoToken()", "516ae993": "setChargeFee(uint256)", "516af259": "setCurrentStage()", "516b48fb": "insertList1(uint256,string,string,string,string,string)", +"516b5e0d": "resolve(address,address,uint256)", +"516b6d07": "sell(string,string,uint256,uint256)", +"516b6e5b": "mintMultiple(uint256,address[])", +"516b77c0": "preApproveTokens(address,uint256)", +"516b9d37": "proposeCompetition(string,int256,uint256[3],address,uint256[],uint256[5],bool)", +"516bc450": "mfi()", +"516c7207": "tokenallowance(address,address,address)", "516c731c": "setOwner(address,bool)", "516cbe1a": "efwtest()", "516cd39b": "revokePermissionFrom(address)", "516d70c3": "lockAllocationAddress(address)", +"516da39d": "swaptoken(uint256,uint256)", "516dde43": "expiryDate()", "516de876": "go(bytes16)", "516dea30": "post_relayed_call(address,address,bytes,bool,uint256,uint256)", +"516e1671": "novaPerBlock()", "516e7be7": "contractFailed()", +"516e9917": "upgradeFundManager(address)", "516e9aec": "lockAndDraw(address,uint256)", "516ed622": "registerDINs(uint256)", "516edc99": "UNITYCOIN()", "516f279e": "location()", +"516f291b": "SendMail(string,string,string,string,address)", "516f6afd": "Project_Enable(uint256)", "516f8986": "TOKENADDRESS()", +"516fb343": "motherName()", +"516fb422": "_getPoolBalance(uint8,string)", +"51707e46": "bestToken()", "5170a9d0": "returnSender()", "517125fa": "minTokensForSale()", "51714d2d": "CIRCLECOIN()", +"5171762c": "multi(uint256,uint256)", "517186f3": "ownerModOperator(address,bool,uint256)", +"5171990f": "streamRewardDuration(address)", "5171bdec": "AllocationProcessed(address,address,uint256)", "51720b41": "targetContractId()", +"517258d0": "weaponMeta()", +"5172a605": "claimLIFE()", "51731f21": "changeFreezeTrading(bool)", +"517373ba": "viewEventById(uint256)", +"517403f5": "borrowingDict(uint64)", +"517429eb": "AllowBurnByCreator()", +"517457b6": "removeAllowableToken(address)", +"51746bb2": "stakeFor(uint256,address)", +"5174e853": "mintAndApproveMarket(string)", "51751612": "EtchToken()", "51758666": "getMesa(uint256)", +"5175a7c9": "lastStakeTimeOf(address)", +"5175ca5e": "authKeys(address)", "5175f65c": "_ownerApproved(address,uint256)", +"5175f878": "onTRC721Received(address,address,uint256,bytes)", "51764a94": "Lesson_3(address,uint256)", +"51767f45": "storMsgData()", "51768e4d": "updateItem(uint256,string,uint256,uint256,uint256)", +"51769d29": "setBurnLimit(uint256)", +"5176eb1d": "crowdSaleEnd()", "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)", +"5178dd35": "setAscensionInterval(uint256)", +"51794761": "RatePropsChanged(address,uint8,string,bool)", +"51796c47": "cashBack(uint256,address)", +"5179bee5": "getEthReturnNoBonus(uint256)", +"517a14e0": "register_map(address)", +"517a55a3": "remove_liquidity_one_coin(uint256,int128,uint256,bool)", "517a626f": "getUserLengthOnEther()", "517a70d4": "mintAmount3()", "517a9d64": "share(address,address)", "517afbcf": "votingController()", "517b1d8f": "setRegionCurrentPixelPrice(uint256,uint256)", "517b2fa8": "depositDaiFor(uint256,address)", +"517c2826": "setMintDecreaseConstant(uint256)", "517c48c3": "LATPToken()", "517c8b12": "GetTicketOwner()", "517cf73e": "getSupplyRate(address,uint256,uint256)", +"517d0411": "stakingEnd()", +"517d60c6": "updateAccessControls(bytes32[],address[],bool[],bool[])", "517d95fa": "addusermoney(address,uint256)", "517e62ab": "getTxTimestampPaymentKWh(bytes32)", +"517e64f1": "payRent(string,uint256)", +"517e89fe": "setRaisingAccessController(address)", "517ebace": "eosOf(address)", "517ee2e8": "CSLottery()", "517ee30d": "CreateHOLY(address,uint256)", +"517ee477": "claimairdrop(uint256)", "517f4a23": "SalesManager()", "517f6c51": "HardcodedCrowdsale(uint256,uint256,uint256,uint256,address)", "517fe4de": "showUser(address)", +"51802bfd": "forgePoolParams(uint128)", +"51803cd8": "externalTokenApproval(address,address,uint256,address)", "51804743": "LandAccessControl(address)", "5180629d": "transferByOwnerContract(address,uint256)", +"51806a4d": "uniswapSETHtoETHPriceQuery(uint256)", +"51810fb5": "createPool(address,address,uint256)", +"518117ec": "setup(address,address,address,address,bool)", +"51814c5a": "PRIVATE_VESTING_PERIOD()", "5181500d": "ExoplanetToken()", "51819edb": "emergencyWithdrawParsecs(uint256)", "5181aa01": "RELEASE_END()", @@ -46795,14 +85668,20 @@ "51867b19": "withdrawnFrom(address)", "5187527f": "reversePurchase(address)", "5187a7d7": "GetSign(string,address)", +"5187c091": "uniswapV2()", "51883f6e": "RecievedAnonDonation(address,uint256)", "5188875b": "withdrawalToken()", "51888969": "weiRaisedPreIco()", +"5188b755": "_getRateAndTimestampAtRound(bytes32,uint256)", "5188f996": "addContract(bytes32,address)", "51892c0f": "BIGER(address)", "51892f07": "changeMintingAddress(address)", +"51896b39": "tokenDials(uint256)", "518995cd": "addClip(string)", "518999f2": "TSTORZCo()", +"5189bcfd": "createSmartFund(string,uint256,uint256,bool)", +"5189e8b0": "test(uint256,uint256,bytes)", +"518a1a3e": "admin_getBidlAmountToDeposit()", "518a5b7a": "implementsMethod(address,bytes4)", "518ab2a8": "tokensSold()", "518ada3b": "GetUserBets(address)", @@ -46810,89 +85689,173 @@ "518b1a33": "ALLOC_LIQUID_TEAM()", "518b4372": "getInvoices(address,uint256)", "518b7a29": "totalDETsSold()", +"518bb7c9": "setCalculateOracleTerm(uint256)", +"518bd3dd": "getBlockVotersCount(uint256)", "518bddd9": "getCustomer(string)", "518bed3f": "calculateTokensAmount(uint256)", "518c0f17": "tokensOnThisChain()", +"518cafea": "setLoyaltyTranche(uint256,uint256)", +"518cd996": "getBetaRate()", +"518d1738": "netNetworkConversionAmounts()", "518d3b64": "getTotalSent()", +"518d507c": "getActivityContentDetailplayer(string,uint256,uint256)", "518d6c2d": "_preApprove(address)", "518d7981": "adjustBalance(address,address,int256)", +"518de6f5": "hxyDividendContract()", "518e62db": "createOrder(address,address,uint256,uint256,uint256)", "518f2f10": "setAddressAuthorization(address,address,bool)", "518fd40e": "cdtTokenAddress()", "5190674b": "resignAsCurator(address)", "51906bb0": "endTimeStamp()", +"519077d2": "stakeraddr(uint256)", +"5190dfdc": "linkedBlocks(uint256)", +"51911f10": "fundsRepaidTotal()", "51913124": "batchTransferMSM(address[],uint256[])", "5191e37f": "listMultipleItems(uint256[],uint256,uint8)", "51922341": "transferICOFundingToWallet(uint256)", +"51925187": "setCoeffScore(uint256)", +"51927ad9": "WEEK1()", +"51927e85": "batchMintWithUri(address,uint256,string)", +"5192a8f7": "addToken(string,string)", +"5192c82c": "burnRatio()", "5192f3c0": "boolToInt(bool)", +"5192fbc3": "setDiscountTranches(uint256,uint256)", +"51935285": "getDSAWallets(uint256)", +"51940882": "transferOutT(uint256)", +"51955263": "_checkNetworkPrefix(bytes)", "519559ed": "contractMax()", +"51955a0e": "freezeCap()", +"519561e3": "signaturesByAddress(address,uint256)", +"5195afa5": "used(address,address)", "5195e8c5": "mintData()", +"519613c0": "minLPStakeTime()", "51965e75": "getRocrocId(uint256)", "51971109": "UntungWaluyo()", "51973391": "sentBonus()", +"51973807": "computeFairReserves(uint256,uint256,uint256,uint256,uint256,uint256)", "51973ec9": "log()", +"51974cc0": "getUserReservesData(address,address)", +"5197b16a": "accumulateWithdraw(address)", "5197c7aa": "getX()", "519903f1": "unionBalance()", "51992fcb": "addTokenAddress(address)", "519936db": "StartAuction(string,uint256,uint256)", +"5199ad82": "updateVotesUsed(address,uint256)", +"5199dcbd": "exchangeAcorns()", +"5199e418": "updateAnySetAllowed(bool)", "5199f1de": "lastYearTotalSupply()", "519a078f": "getCommunitybyIndex(uint256)", "519a1a41": "getSetup(address,bytes32)", "519a73c3": "stopAcceptingDonation()", "519af30e": "withdrawAllEth()", +"519b7885": "theNewBoss()", +"519baf94": "sellOrderFirst()", "519be2f5": "resetDemo()", "519bf602": "reward8()", +"519c2f19": "bigPerBlock()", "519c6377": "signup(string)", +"519cb220": "roundRobinFee()", +"519cddab": "uSE()", "519d1059": "setPurchased(address,address,uint256,uint256)", +"519dc8d2": "getUserTokens(address)", +"519dcf94": "_allocPointForBZBReward()", +"519dd153": "complianceRole()", "519e55da": "getStorage(string)", "519e9a92": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1)", "519ee19e": "tokenSold()", +"519f01dc": "createMaster(string[],string,string,string[],uint256)", +"519f5099": "getPositionInfo(uint256)", "519f9590": "appointNewCFO(address)", "51a073fb": "removeFromSpecialRatesMapping(address,address)", "51a0aff0": "stockBuyOrder(uint256,uint256,uint256)", "51a0c395": "myUsingOraclize()", +"51a0daf9": "ROLE_DAPP()", "51a11e94": "tokenIssued()", "51a14c9f": "GetPartWeight(uint8,uint256)", "51a1ad6b": "VikkyTokenAirdrop(address,address)", +"51a1bed8": "revokeCard(uint256)", "51a1c192": "get_solution()", +"51a1fcb3": "placeRequest(uint256)", +"51a1fce4": "approve_593(address,uint256)", "51a282ae": "bidEMONTIncrement()", "51a28572": "SALE0_RATE()", +"51a2dae0": "payoutSharesOutstanding()", +"51a34ca5": "addLiquidity(address,address,address[],uint256[],uint256)", "51a36e34": "changeCrowdfundContract(address)", "51a3aed5": "getCompanyPreferences(string)", +"51a40994": "getCollateralPrice(address)", +"51a416bb": "limitForBlacksmith()", +"51a45b4e": "setMinTokenPurchase(uint256)", +"51a47099": "cancelMintRequest(string)", +"51a485e4": "_setMarketSupplyCaps(address[],uint256[])", "51a4cd73": "sellCoins(uint256)", "51a4f7f2": "Har(address,address,address,uint256,uint256,uint256)", +"51a54f3a": "swapIn(string,address,uint256)", +"51a58abb": "submitHash(string,bytes)", "51a5f2f2": "ConsultingHalf(address,address)", +"51a61870": "isGoblin()", +"51a6349d": "sendPrepaidESDifferent(address[],uint256[])", "51a6b851": "actual_feedout()", +"51a6f7c4": "isUserQualified(address)", +"51a7532b": "func_2E56()", +"51a76691": "yield21Dec31AnnualizedYield()", "51a76924": "getSpeed(uint64,uint64)", "51a784e3": "currentCirculating()", +"51a7c716": "unstake(uint256,address,uint256)", +"51a7c985": "_totalRaised()", +"51a7cdda": "TeamVestingLockDate()", +"51a7f65c": "Message(string)", +"51a810a2": "VaultLiquidationQs(address)", +"51a885c0": "getRatio(uint256,bytes32)", "51a88a38": "PictureLibraryCoin(uint256)", +"51a89ce8": "getEscrowDetails(bytes32)", "51a8a8a4": "clearDividends(address)", "51a8c3d7": "PausableCrowdsale(bool)", "51a9111a": "BONUS_PRE_ICO()", +"51a9b7cb": "IMP09()", +"51a9c9d9": "getMessageIdsByPerson(address)", +"51a9df2e": "listMatrixReferals(bytes3)", "51aa0199": "ethereumPrice()", "51aa0a30": "modifyPMTAccount(address)", +"51aa50bf": "LPTokenSurgETH()", "51aadcdf": "crowdSaleContract()", +"51ab01b5": "BOSS_HP_DEFAULT()", +"51ab3020": "ONE_MASK_TOKEN()", "51ab351c": "BONUSONE_DATE()", "51ab720d": "numOfTimesSteal()", +"51abf0de": "token_type(address)", "51ac0d10": "getTimeBasedBonusRate()", +"51ac6e7e": "withdrawFor(address,uint256,uint256)", "51ad0299": "Ship(string,uint256)", +"51ad3a0f": "stakeMax()", +"51ad8d30": "transferAnyDealCoinToken(address,uint256)", +"51adeb57": "dollar()", "51ae7f95": "COMPANY_TOKENS_LOCK_PERIOD()", "51ae8754": "calcSectionTickets(uint256[],uint256[])", +"51aecb51": "getNumEntries(address,uint256)", "51af083b": "MONTH_IN_MINUTES()", "51afc4af": "_getMinAuctionSeconds()", +"51b04143": "GetProjectTotalContributors(uint256)", "51b07a96": "getUSDT(uint256)", "51b0b931": "updataLockPercent()", +"51b18250": "makeOffer(uint256,bytes32,uint256,address,uint256,uint256,address,address)", "51b2270f": "getICOLength()", "51b30900": "generateMemoryProof(uint256[],uint256)", "51b3666f": "applyBooster(uint256,uint256)", +"51b3795c": "bunnyMintingStation()", "51b3d7b9": "_transferWithReference(address,uint256,string)", +"51b3d8ba": "startChangeETHSpentOracleUse(uint256)", "51b41b62": "getAllOwnersOfCard(address)", "51b42b00": "deactivate()", "51b46399": "triggerUnpauseEvent()", "51b488d4": "throwsWhenGettingTokensInNotInitiatedSale()", +"51b4eca4": "MINING_REWARDS(uint256)", "51b546af": "EDCoreVersion1(address,address,address,address)", "51b59341": "MoncryptToken()", +"51b59751": "seed_lockedBalances(address[],uint256[],uint256[])", "51b644c0": "roundedDiv(uint256,uint256)", +"51b64b53": "revealBids(uint256,uint256[],bool[],bytes32[])", +"51b66700": "CreateUnicorn(address,uint256,uint256,uint256)", "51b6914a": "Lara(uint256)", "51b699cd": "isAuthorised(address)", "51b6fe96": "distributeTokens(address,address[],uint256[])", @@ -46901,17 +85864,29 @@ "51b79d55": "maxPremium()", "51b95400": "SophosToken()", "51b98927": "_withdrawProfit()", +"51b994d7": "propose(address,int256,uint256,uint256,uint256)", "51b9a2f8": "ballotVoters(uint32,address)", "51b9c785": "step_level()", +"51ba162c": "disperseTokenSimple(address,address[],uint256[])", "51ba24c7": "Token_ExchangeValue()", "51ba5f04": "registerImpact(string,uint256,uint256)", "51ba7534": "LastExec()", "51babf0c": "sellToken(address,uint256,uint256,bool)", "51bba1cc": "itemTransferred(bytes32,uint256,address,address)", +"51bbe088": "organId()", +"51bc4953": "setLastFullPaymentBlock(uint256)", "51bcc53e": "checkFloatingOwnSupply(address,uint256,bool,uint256)", +"51bd70b1": "marketingAndRNR()", "51bdd585": "currentChallenge()", "51bdf229": "DummyContract(uint256,uint256,uint256[10])", "51be2361": "InterCrypto_Wallet()", +"51be4b8f": "numSplitRateIteration()", +"51be4eaa": "getGasLeft()", +"51be62fa": "approveKyberProxyContract(address,bool)", +"51bf21d8": "fluidUntil(address)", +"51bf4c49": "minimumUnstake()", +"51bf814e": "jellyPerBlock()", +"51bfb961": "totalSupplyOnHold()", "51c03b85": "makeBid(uint16)", "51c08f4d": "gameTimeOut()", "51c13af3": "MAX_ALLOWED_BOUNTY()", @@ -46924,106 +85899,198 @@ "51c3a5d3": "getPollsSize()", "51c3b8a6": "setFreezing(address,uint256,uint256,uint8)", "51c40c6f": "setIntrospectionRegistry(address)", +"51c42aa3": "totalCollateralOf(address)", +"51c46476": "eth2DepositContract()", +"51c4a631": "sendContractBalance(address,address,uint256)", +"51c4d95e": "tokenIdFromAddress(address)", "51c4e395": "logMarketCreatedCalled()", "51c54c68": "buySprite(uint256)", "51c54ec6": "transferAllBalance(address)", +"51c58228": "setMinVolume(uint256)", "51c5d54d": "rateSecondWeekEnd()", "51c65298": "exportFund()", +"51c6590a": "addLiquidity(uint256)", +"51c65bdf": "setWinningAddresses(address[],bool)", "51c69b12": "twoMonthsLater()", +"51c6ff67": "proto()", "51c72c87": "ProofTeamVote(address)", +"51c72f81": "getXfLobbyEntry(address,uint256)", "51c74a9e": "addCertificate(bytes,bytes,bytes,address)", "51c81f01": "setBursar(address)", "51c85565": "nextTournamentBank()", +"51c86437": "weight(uint256,uint256,uint256)", "51c875d2": "DB()", "51c8d4d0": "get_arbits_whitelist(address,address)", "51c8e02a": "setStore(int256)", +"51c9a08c": "approveAndCallViaSignature(address,address,uint256,bytes,uint256,uint256,uint256,bytes,uint8)", "51c9b233": "changepublicbonus(uint256)", "51ca0eb8": "FACTOR_PRESALE()", +"51ca4a4b": "registerHeights(address)", "51ca6966": "RefundableCrowdsale()", "51ca7a94": "addNodes(string,address)", +"51caac7b": "stakerVotes(address)", +"51cabd43": "receiveDebt(bytes32,bytes32)", +"51cace05": "bestSubmission()", "51cb21ff": "getgamecardname(uint256)", +"51cb5d50": "WalletChanged(address,address,uint8)", "51cb6ecd": "addRandomFight2Death(uint256)", "51cb860a": "setAccountNote(string)", "51cb9712": "newExpertise(uint256,uint256)", +"51cbaf1c": "bytes16ToBytes(bytes16)", "51cbb299": "getClosingObligation(uint256)", +"51cc21ac": "removeFarmTemplate(uint256)", "51cc391d": "MULTI_SIG()", "51cc4d1d": "payDemurrage(address,address)", "51cc508d": "Zeinun()", "51cc7cbe": "PawCoin()", +"51cc8599": "changeParameters(uint256,uint256,uint256,uint256,uint256)", +"51cd214a": "_setDefi99PlusRate(uint256)", "51cd7c0f": "MatchPayoff(uint256,uint256,uint256,uint256)", "51cdac6b": "find(address)", "51ce3207": "getStockOwnerInfo(address,address)", +"51ce6567": "recordPrice()", +"51ce6b59": "time_type_weight(uint256)", +"51ce9fae": "isClusterValid(address)", "51cf6b22": "burnInvestorTokens(address,address,uint256)", "51cfa44b": "getStarTotalSupply(uint8)", "51cfc731": "transferFromContract(address[],uint256[])", "51cfdd58": "Dewcoin()", "51cff8d9": "withdraw(address)", +"51d0403d": "setInactiveActionDelta(uint256)", +"51d05001": "unlck(address,uint256)", +"51d0524c": "mintCirculationSupply(uint256)", +"51d0eac4": "sendEths(address[],uint256[])", "51d10161": "boughtToday(address)", +"51d12f8d": "getDataModel()", +"51d18786": "Freeze(address,address)", "51d20c7c": "Exchange_ETH2LuToken(uint256)", "51d24a33": "addNewBoard(bytes32,string)", +"51d271be": "editNoFeeList(address,bool)", "51d28a7e": "saleTokenPrice()", "51d2a1e4": "getDepositRoot(bytes)", "51d2a8fe": "BIKSPRO(uint256,string,uint8,string)", "51d2cc8f": "grid(uint256)", "51d31822": "setMarketAddr(address)", "51d34040": "returnBet(bytes32)", +"51d34dc9": "includeDunk(address)", +"51d34e2f": "approve_332(address,uint256)", "51d38d5f": "addDeveloper(address,string)", "51d467f5": "getLogFillArguments()", +"51d52c07": "setkey(uint256)", "51d53bee": "HRHToken(uint256,string,uint8,string)", "51d550d2": "getPendingBalance(address)", "51d59a20": "impl_incomeOf10k()", "51d5d98d": "hasEnoughTokensLeft(uint256)", "51d5f44f": "saleHero(uint256)", +"51d6541f": "setDapp(string)", "51d6e547": "getNonce(bytes)", +"51d70bc4": "userInfo(uint256)", "51d74ce5": "SetWageredWei(bytes32,uint256)", "51d75dc6": "BUYER_STEP_2(bytes32)", +"51d76d06": "resetDataOnZeroBalanceInternal(address)", +"51d81161": "getVoterPubKey(address)", +"51d8e103": "_attacker()", +"51d8ef23": "total_dsec(uint256)", "51d962e1": "endRelease()", +"51d9752b": "overloadedGet()", "51d977a6": "TEST()", +"51d97d57": "getConversionRateContractForReserveX(address)", "51d997b2": "isAbstainAllow()", "51da463a": "_revokeAccess(bytes32,address,address)", "51dabd45": "disapproveAll(address)", +"51dac207": "bulkBonuses(uint256)", +"51dbb2a7": "selectiveDeposit(address[],uint256[],uint256,uint256)", +"51dbbab9": "GetETH(uint256)", "51dbc419": "_drainGame(bytes32,address,uint256[10])", +"51dc516b": "resultados()", +"51dc7189": "ghost()", "51dc7659": "winNum()", +"51dc7851": "donateOrgan(string,string)", +"51dc78df": "roundContribution(uint256)", "51dc7f7d": "setPreferredCurrency(address,bytes4)", +"51dcb0aa": "pairDescs(address)", +"51dcb1c3": "revealTimeLeft()", +"51dd00d9": "setMaxVolume(uint256)", +"51dd0a60": "LogNewReferral(address,uint256,uint256)", +"51dd2a87": "isValidPrice(address)", "51dd3164": "getCurrentMinimum()", +"51dd5e19": "approveWaitPeriodChange(bytes32)", +"51dd6d00": "seizeTOKEN(address)", "51dd8119": "announceFork(string,string,uint256)", +"51dd8bdf": "numpaid()", +"51ddb67b": "getActivityContentDetailplayersub(string,uint256,uint256,uint256)", "51de097f": "e_Withdraw(uint256,uint256,uint256)", +"51de0cfa": "batchTrx(address[],uint256[])", "51de5541": "castUpgradeVote(uint8,address,bool)", +"51de989b": "getCardIdListOfEvent(uint256)", "51dea0ae": "updateOwnerShares(address[],uint256[])", +"51deb244": "withdraw2Address(address)", +"51dec173": "A2(bytes)", "51ded741": "rateThirdWeekEnd()", +"51df4143": "allowedAddressMP(address)", "51df6d27": "GlobalLotteryToken()", "51df9db9": "newPrice()", +"51dfa9f7": "asmConditional(uint256)", "51dfc14d": "tokensOfferedOf(address)", +"51dfc5e6": "maxIssuableNomins(address,bytes4)", "51dff989": "redeemVerify(address,address,uint256,uint256)", "51e00935": "Arrays()", +"51e02e08": "votedExtPool()", +"51e03bed": "getDaiAllowance()", "51e09631": "totalVestedTokens()", "51e0e26b": "allowedContracts(address)", +"51e102f5": "mul(uint256,int256)", "51e10aa6": "calculateToFund()", +"51e11fd5": "hasUniqueUserId(address)", "51e16546": "_payFee(uint128,address)", "51e1d427": "boolMemoryArray()", "51e1ee12": "ContractorProposalClosed(uint256,uint256,address,uint256)", "51e22125": "addPresaleWhitelist(address,uint256)", +"51e238e3": "genesis_supply()", +"51e241eb": "slimeToLp1Route(uint256)", +"51e292bb": "getLockedAmount(uint256,uint256,string,uint256)", +"51e3fc17": "withdrawLocked(bytes32)", +"51e41700": "withdrawDeposit(address)", "51e4eb07": "setContributionLockPeriod(uint256)", "51e51b55": "startPreSalePhase()", "51e55767": "getWeiPerContributor(address)", +"51e59ffb": "readers(address)", +"51e5aca4": "setRight(address,uint256)", +"51e67e49": "SolTransactionOrdering()", +"51e684ba": "ClaimingInterval()", "51e699a8": "setMainSaleDates(uint256)", "51e6ba1d": "toggleContractFreeze()", "51e6edee": "RETZO()", +"51e75e8b": "MERKLE_ROOT()", +"51e78efe": "constructAndCallWithChi(address,uint256,string,bytes)", +"51e7efdf": "defistake()", "51e7f12e": "_doDestroyTokens(address,uint256)", +"51e80672": "CROSS_CHAIN_CONTRACT_ADDR()", +"51e8097c": "_txCounter()", +"51e82b96": "calculateTradeIncrements(uint256[],uint256)", "51e82eec": "totalSetCredit()", +"51e86b2c": "INX_Blacklisted(address)", +"51e938bc": "setCxcTokenAddress(address)", "51e94406": "weiRaisedPreSale()", "51e946d5": "freezeAddress(address)", +"51e97869": "calculateROI(address)", "51ea468b": "getSupportersAddress()", +"51ea7d80": "claimROI(address)", "51eace10": "unfreezeStartTime()", +"51eb05a6": "updatePool(uint256)", "51eb5e93": "overdraftPeriodLength()", "51ebe2f1": "bursarAddress()", "51ec4285": "unvote(uint256)", "51ec4525": "first_player()", "51ec4fc7": "limitAddress(address)", +"51ec53ef": "getInputAmounts(address,address,uint256)", "51ec8433": "STTadmin2()", "51ecabd6": "toPayable(address)", +"51ecf2c2": "deleteLockUserInfoIdx(address,uint256)", "51ecfd16": "getCatPrice(uint256)", "51ed17a4": "reservedTokensList(address)", +"51ed6a30": "stakeToken()", +"51ed7673": "addBountyReward(uint256,uint256,address,uint256,address[],bytes[],uint256[])", "51ed8288": "buyNFT(uint256)", "51ed96b9": "enableContribPeriod()", "51edbdbb": "setForeignBridgeErcToErcImplementation(address)", @@ -47032,25 +86099,43 @@ "51ee43e5": "lottery(int8)", "51eec810": "setCapitalization(uint256)", "51eecc23": "setupBounty(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"51f0ab11": "buyWithUSDT(uint256,bytes)", "51f1333e": "relievePool(uint256)", "51f1fa97": "POHStartTime()", +"51f22a72": "ownerList(address)", +"51f25a7d": "GenerateTokens(uint64,address,uint256)", +"51f28c89": "GetTop3OfTypeDistanceInDecodeOutPut(uint256)", +"51f28e14": "marketItems(uint256)", "51f2f1d1": "timeTransferbleUntil()", "51f364d5": "currentCostToPress()", "51f3a7bd": "CoinFlip()", "51f3b4bd": "collectFees(uint256,address)", +"51f3d0b8": "withdrawalDevFundFee()", "51f468c0": "setClaimPrice(uint256)", +"51f4abec": "tokenToEthSwapInput(uint256,uint256,address)", +"51f4d5c5": "Encrypt(uint256,address)", "51f4ec50": "setWriterId(bytes32,bytes32)", +"51f4ff7a": "dHBTC()", "51f514d3": "computePayeeBalance(address,address,uint256)", "51f550be": "IcoSupply()", "51f59db2": "test_claimShares_emptyFeePool_notTranscoder()", +"51f5b506": "addMarket(address,address,address)", "51f68d80": "calculateLRCUnlockAmount(uint256,uint256)", +"51f6cca0": "ERROR_REASON_NOT_ENOUGH_UNLOCKED()", +"51f6cf2f": "unlockSchedules(address,uint256)", "51f6d8c6": "setBalances(address[],address,uint256[])", "51f6f870": "createMicroModule(uint256)", +"51f7b9bd": "auctionToEntry(uint256)", "51f80746": "DXBToken()", +"51f87964": "borrowBook(uint256,uint256)", +"51f8e1aa": "modifyTaxAddress(address)", "51f91066": "tag()", +"51f922ac": "BuyPacket(address,uint256,address)", "51f93215": "bond(bytes32,uint256)", +"51f95eb2": "transfer_rxp_to_contract()", "51f96d33": "verifySignature(address,address,address,uint8,bytes32,bytes32)", "51f9ff35": "lastDividendIncreaseDate()", +"51fa495e": "convertPriceFromWeiToTokens(address,uint256)", "51fa5810": "getEnginesIds()", "51fa7efd": "returnAmountToMainAccount(uint256)", "51fab7ff": "transferRemaining()", @@ -47063,34 +86148,61 @@ "51fba575": "NRB_Users()", "51fbd91e": "donationsReceiver_()", "51fbfe9d": "migrationCountComplete()", +"51fc00ed": "delegateFunctionSignatures(address)", +"51fc5d4f": "injectImageData(uint256,string,string,string)", "51fc6f59": "TokenManagerEntity()", "51fd2c69": "quantityHeldInCustodyOfExchange(address)", "51fdaf92": "checkExpiredfunds()", +"51fde4bb": "_rewardFee()", "51ff1a06": "PaparazzoToken()", "51ff4847": "signature()", "51ffcab3": "bid(uint32)", "51ffd9e7": "getRatePerTimeUnits(uint256,uint256)", +"51ffe193": "getMaxDiscountRate()", +"520009df": "setOptimal(uint256)", +"52002ae7": "marketingAllocationReleaseAt()", "52006050": "setBurnBounds(uint256,uint256)", "5200d643": "OPENING_TIME()", "52013484": "CalcWinnersAndReward(uint256[],uint256)", "52019dc3": "payTokens()", +"5201c028": "getCrossDomainMessengerWrapper(uint256)", +"5201cdd7": "BonusPaid(address,uint256)", +"5201d1af": "basePrice16()", "5201effb": "setCompletionTime(uint256)", +"52021726": "legendaryResultIndexToAddress(uint256)", +"52027193": "allWithdrawalBalances(uint256[],uint256)", "520282d0": "getBcouponAllocationFactor()", +"520298a0": "roundStarter()", "5202b615": "numberOfClosedGames()", "52030899": "preSaleBlockNumber()", +"5203c544": "onEventReset(address)", +"52041a4e": "confirm(address,address,address)", "5204cfe1": "OpenRedEnvelope(string)", "520543ab": "endStage2()", "52058d8a": "tokenSupplyCap()", +"5205a741": "ResiveFromStubFund(uint256)", "5205b80f": "getLeftToken()", +"5205cac3": "PolicyAttributeModified(uint8,uint256,uint8)", +"5205cfaf": "operationBalances()", "52063985": "unlockAddr()", +"5206e91f": "getPerformTransactionSignatureThreshold()", "5206fea3": "_transfer(string,string,uint256)", "5207c391": "setWhitelistedBatch(address[],uint256)", +"5207cc0d": "setPoolWithdrawable(uint256,bool)", +"5207efa6": "findNFT2()", +"520835e8": "getRecommander(address)", "5208a157": "getCardsFromHash(uint256,uint256,uint256)", "5208ce36": "STQPreICOTestHelper(address,address)", +"5208ee0c": "titoAddress()", "52091047": "changeVotingRules(address,uint256,uint256)", "520929b6": "AlgeriaToken()", +"52093f8a": "_checkAccountChange(address)", +"5209cb98": "withdrawalRequest(uint256)", +"520ab54d": "getUserProfit(address)", +"520ab6f0": "scheduleCooldown()", "520aea97": "setNote(uint256,bytes32,bytes20,string)", "520b1b65": "testGetAllCases()", +"520b9355": "quote(address,address,uint256,uint256)", "520ba154": "changeAcct2(address)", "520bbba3": "generateRequestAttestationSchemaHash(address,address,address,bytes32,uint256[],bytes32)", "520bf4d8": "SmallInts()", @@ -47099,71 +86211,114 @@ "520c5828": "whitelisting()", "520c7c8c": "bountiesAllocation()", "520c7d6f": "PAYOUT_ATTEMPT_INTERVAL()", +"520cb1ef": "add1(uint256,address,bool)", "520ce36a": "Permian()", "520ce39e": "DamnRocks()", "520d3f0d": "getrate()", +"520d8921": "stackPlayers(uint256)", "520e12d7": "getCertAddressByID(string)", "520e7b0e": "offer_energy(uint32,uint32,uint64,uint64)", "520e8143": "returnTokenToWallet()", "520eb620": "getTemplateByProposal(address,uint8)", "520ee757": "NewSandwichTicket(string,address,string,string)", +"520f7078": "fecorers(uint256)", "520fa2c1": "BetleyToken()", "520fd799": "Nplay()", +"521015af": "tbtc_pool()", "52108d4c": "setCCH_edit_30(string)", "5210eb56": "targetAddress()", "5211ac2e": "withdrawWei()", "5211e91e": "CSTToken()", "5211f843": "bbNetworkGrowthWallet()", +"5211fb00": "getTwoKeyDefaultIntegratorFeeFromAdmin()", "52122abf": "JackpotHits()", +"52123059": "notAttributed()", +"521230fe": "RegisterScheme(address,address,address)", "52125b86": "eventcount()", +"521278e5": "registerVoters()", "5212e6ea": "firstExtendedBonusSalesEnds()", "5213cca8": "AdvisorPoolAddress()", +"521417b4": "_MULTIPLIER()", "52146744": "AteamBets(uint256)", "52159bcf": "CreateCityData(address,uint256,uint256)", "5215ad0b": "batchTransfer(address,address[],uint256)", "5215cb88": "onPresaleComplete()", +"5215fbf7": "setContributionAddress(address)", +"52161907": "setBscsDevFeesExempted(bool)", +"521630e5": "transfersToken(address,uint256)", "5216509a": "numCandidates()", +"521699e4": "_ethBuy()", "5216aeec": "totalInvested()", "5217b774": "redeem_withdraw(address,address,uint256)", "5217cdff": "greyToken()", +"5217ea29": "initiateBattle(uint256,uint256)", "52180208": "take(address,uint256)", +"5218289c": "totalStakes(uint8)", "5218402d": "claim_bix_with_not_start()", "52185f0e": "isWithinAllocation(address,uint256)", +"5218811f": "addAdditionalRewards(address,uint256)", +"52189fa3": "bankETH()", +"5218a0a0": "PriceEDEXUpdate(uint256,uint256)", "5218bfbb": "getOffer(bytes32,address)", "5218c37d": "bulkRejectTransfers(uint256[],uint256[])", +"5218e383": "AdminAccessChanged(address,uint8,uint8)", "5218f3b3": "CoinStocker()", +"52192989": "masterChefWallet()", "52194acf": "addBank(address,address,uint256)", "52196812": "getLoanCount()", "5219823a": "hashMessage(bytes)", "52199094": "setBurningPercentage(uint256)", "5219a566": "hashForSignature(bytes32,uint256,address,bytes32)", "5219a72a": "mcgregortoken()", +"5219cfa5": "newInstance()", "5219ffb8": "withdraw_tokens_for(address)", "521af962": "DataBrokerDaoToken(address)", +"521b0dcc": "getVoteStatus(address)", "521b20ec": "highestBidAddress()", +"521b3231": "pay5()", "521b601a": "setData_26(string)", "521b7499": "setStageVolumeBonuses(uint256,uint256[],uint8[])", +"521bb2dd": "_getRelayedCallSender()", +"521be3d9": "burnableWalletArray(uint256)", "521be69c": "applyTokens(address,uint256)", +"521c27f2": "setMigrationEnabled(bool)", "521c82be": "getCCH_edit_17()", +"521c9670": "updateTokenUSDRate(uint256,uint256)", +"521ca105": "harvestInterval(address)", +"521cb590": "dropTask(bytes32)", "521cd656": "playersAmounts(address)", "521ceba7": "pusherTracker_()", "521d56c6": "regeneration()", "521d80f8": "fundsTransfered()", +"521e1e17": "getEthUsdDataProvider()", "521e5770": "fechCurrentSnapshotBlockIndex()", +"521e76ec": "onBRLxReceivedForFunding(address,uint256,uint256)", "521eb273": "wallet()", "521ec3af": "MGLTToken()", "521ee1ae": "purchaseFor(address,address)", +"521f291e": "migrateToStakingAddresses2()", "521f4195": "isOwn(address,uint64)", "521fba45": "setTokenInfo(string,address,address)", "521fba71": "getRandom256()", "521fbd3a": "deploytime()", "521fd5be": "getSingleBet(uint32,uint32)", "52200a13": "getNumHolders(uint256)", +"52205f1c": "getInviteNum()", "522103fa": "changeUnicorn(uint256,address)", +"52213663": "changeManager(address,string)", +"5221e882": "popDebtDelay()", "5222cd8a": "Deal(bool,uint8)", +"5222e453": "remove_PlyAddress(address)", +"52233fc6": "get(uint256[],address)", "5223478a": "setIsPoop(bool)", +"52236146": "setLiquidityReserve(address)", "52238fdd": "calculateFees(uint256)", +"5223a290": "matchIds_(uint256)", +"5223c8fd": "swapTokensForExactBNB(uint256,uint256,address[],address)", +"5224372c": "borrow(address,address,uint256)", "522471fc": "setTotalWithdraw(uint256,address,uint256,address,bytes,bytes)", +"5224a816": "unlockBox(uint256)", +"5224d172": "setLiquidationManagerAddr(address)", "5224dfbe": "mainTokensPerDollar()", "52251884": "setForwardPurchaseFeesTo(address)", "52253542": "playSingleDiceBet(uint256,uint256)", @@ -47172,15 +86327,36 @@ "52256d44": "MuratCoin()", "522577e9": "totalIncome()", "522637e7": "CMCLToken(uint256,string,string,address)", +"522643e7": "TokensPurchaseRefunded(address,uint256,uint256,uint256,uint256,uint256,address)", +"52264b89": "GasPriceChanged(uint256)", +"5226f8c6": "filesHash(uint256)", +"52273494": "releaseVesting(uint8,address)", +"522760a1": "saaveTo(address,uint256)", "52279295": "interestRatePerCycle()", +"522849e4": "jobs(uint64)", +"52284ea1": "removeRewardPool(address)", +"5228733f": "finaliseAuction()", "52288195": "Sell(uint256)", +"52289c51": "Creation()", +"5229073f": "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)", +"5229ba18": "eventEndAtkBoss(uint256,address,uint256)", "5229c56f": "getDecreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", +"5229e030": "unwrapETH(address,uint256)", +"522a63db": "getPoolInterests(address)", "522a6cf3": "computeMilkSellPrice()", +"522aa2d2": "rareWhiteLister(address[])", "522afaec": "increase(address,uint256)", +"522b8463": "ConverterUpgrade(address,address)", "522bb704": "run(address)", +"522c628f": "reloadPublicArrays(address,uint256)", +"522c72ce": "deposit_cETH(uint256)", +"522c8067": "flashMint(uint256,bytes)", "522c8401": "bidOnSiring(uint256,uint256,uint256)", +"522cff25": "mapAsset_Rewards(address)", +"522d3571": "liquidityBalance(address,address)", "522dba5b": "GoldTokenMinter()", "522dc0b1": "walletsFromUser()", +"522dcfbb": "CMCUpdate(string,uint256)", "522dd549": "advisor3Sum()", "522de7d3": "verifySubmissionIndex(uint256,uint256,uint256)", "522dff9a": "setMocount(uint256)", @@ -47188,98 +86364,170 @@ "522e2d3c": "BiathlonToken(address,address,string,string,uint256,address)", "522e35fb": "changeIssueManager(address)", "522e4c8a": "addStaff(address)", +"522e793f": "getNumericFCDs(uint256,bytes32[])", +"522f5af8": "dLINK()", +"522f6286": "get_signers()", "522f6815": "withdrawEther(address,uint256)", "522f9585": "setNewWallet2(address)", +"522fe98e": "purchased(address)", "52306f4a": "isCBE(address)", +"5230bcdf": "viewNFTProfilesPrices()", +"5230c069": "getDelegator(address,uint256)", +"5230c396": "positionMultiplier()", +"52311839": "getMinDepositToCreate(uint256)", "52314508": "registerOutcome(string,uint256)", +"5231e1f2": "reward_level_2(address)", "5232d457": "PayoutEvent(uint256,address,uint256)", +"52330e21": "redeem_bounty(uint256,uint256)", "52337ab0": "interact()", +"52342f13": "maximum()", "52346412": "transfers(address[],uint256[])", +"523484a1": "accountActive(address)", "52353e5b": "assetsOnDeposit()", "52357779": "currentRId_()", +"52357ad2": "bankFund()", +"5235934d": "totalUnstaked()", +"5235c000": "holdEnd(address)", "523615aa": "AddApprovedAddress(address,address)", +"52363587": "decreaseCollateral(uint256,uint256)", +"523656bc": "adminZRECommission()", +"5236a4e6": "set_price_at()", "52374af1": "bitPremiumToken()", "52375093": "m_lastDay()", +"52375bb1": "getPoolBalances()", +"5237703a": "returnIsValidSignatureMagicNumber(bool)", "5237d235": "getRightToken()", "5237e325": "getAdIdByCat(uint256,uint256)", +"5237f097": "lpWeekTime()", +"5237f731": "getPoolUsers(uint256)", "52380eba": "entitled()", "52380f65": "MoneyAddedForRefund(address,uint256,uint256)", "52388c1b": "AndreisToken()", "523898f4": "cooperativeClose(address,uint8,uint256,bytes,bytes)", +"5238ffe0": "ownerClaimFirstTwoDays()", +"52390c02": "excludeFromReward(address)", "523934bb": "registerExport(bytes8,bytes8,uint256)", "52393d45": "SGDT()", +"523993da": "UNLOCK()", "523a0b0d": "privateMaxEtherCap()", +"523a311c": "addFunder(address,uint256,uint256)", "523a3f08": "withdrawReward(uint256)", +"523a57cf": "readyToSellToken(uint256,uint256)", +"523a72d9": "ParliamentsTaxesDistributed(address,uint256,uint256)", "523ad959": "bullAmount()", "523aee69": "changeTokenContract(address)", "523afb0d": "bet(bool)", "523b6ae3": "MycoinToken(address,address)", +"523bf257": "outputRawAndGetBalance(address,uint256)", "523c02f5": "getRateForExternal(string)", +"523c2033": "usersG4Matrix(address,uint8)", +"523ccd3b": "changeTokenActiveStatus(address,bool)", "523ccfa8": "isKnownCall(address)", +"523d126f": "setDAIReferenceValue(address,uint256)", "523d897e": "wsub(uint128,uint128)", "523da442": "getCurrentBonusTier()", "523deadb": "getOwner(address,address)", "523e27d4": "currentInvestor()", "523e57be": "mintForHolders(address[],uint256[])", "523e9551": "increaseCap(uint256)", +"523eb537": "cancelOrder(uint64)", +"523ebcd4": "mintTeamAndAdvisorsYear1Part3(uint256)", "523f110e": "updateRegion(address[16],uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", +"523f3d34": "mockAmounts(uint256)", "523f52c6": "setTgeIssuer(address)", "523f53a6": "IntigoTest()", "523f891c": "totalEligibleVotes()", "523fba7f": "tokenBalances(address)", +"524024e2": "updateReentryStatus(address,uint256,uint256,string)", "5240346d": "TV()", "52405f56": "getMilestoneInformation(uint256)", +"5240c93c": "mintCollection(address,string,address,uint256,uint256[],uint256[])", +"5240eb32": "addAuthorizedSigner(address)", +"52410197": "phaseCountdownTime()", "52411891": "add(uint256[2])", +"524122bf": "sxoxo()", +"52412e9f": "withdrawGasByOwner()", "52415840": "testMe()", "5241590d": "addToAddressBalancesInfo(address,uint256)", "52416347": "ParameterSet(string,string)", "5241b39d": "renewal()", "52437187": "callLib(uint256)", +"5243d71e": "emergencyStartRefund()", "5244128a": "_claimableTokens(address)", "52441d7d": "getCurrentUserShareBonus()", "52447ad2": "doMint(int256,uint256)", "52447d92": "burn_from(address,address,uint256)", "5244d9a8": "removeIdentifier(bytes32)", "5244ed87": "joinToTrack(uint256)", +"5244fa41": "OneYearYield()", +"52454986": "unlockAdjuster()", "524559a3": "periodPreICO()", +"5245766d": "didCommit(uint256,address)", "5245849e": "allowedAmountToTransferToPool()", +"524651f2": "nodeSignIn(bytes32,string)", "5246a8df": "verifySig(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,address)", +"5246b3ee": "indexOfHodler(address)", +"5246f2b9": "decrementShorts(bytes32,uint256)", "524705ef": "getsysdayeths()", +"524721ed": "basePriceSpecialNFT()", +"524729b6": "PaymentUpdated(address,address)", "52476ceb": "shareTimeGap()", "524773ce": "burnCount()", "5247b9e9": "firstMintRound0For(address[],uint256[],bool[])", +"524878c5": "DrawingCompleted()", "5248f2c8": "removeBankroll()", +"524900b5": "getUniswapRouter()", "52494a14": "_isOwner()", "5249be25": "tokenPriceUsd()", "524a2ed9": "setBAUU(bytes32,address,uint256,uint256)", +"524a6731": "setDappManager(address)", "524a8131": "STARTING_ASSET_BASE()", "524aa413": "ValidateWorldSnapshot(uint256)", "524aae98": "getPromoLOTEarnt(uint256)", +"524b1bbf": "changeMaxSquareBet(uint256,uint256)", "524b5cb9": "approveMintDelegate(address,int256)", +"524bd1ad": "withdrawMarkitingPart(uint256)", "524bd747": "getNbDemandes()", +"524bef8a": "participants_hash_to_channel_identifier(bytes32)", +"524c3901": "donate_admin_fees()", +"524c9957": "readData1(string)", +"524c9aa4": "addMultipleWhitelistedAddresses(address[])", +"524cfe0d": "__collect(uint256,bytes32)", "524d5ddb": "wagerPool5()", "524d7daf": "verifyGame(uint256)", "524d81d3": "numContracts()", "524dcda3": "MINT_LOCK_DURATION_IN_WEEKS()", +"524df28a": "_expired()", "524e1149": "joinCreateGame()", "524e2444": "setPI_edit_32(string)", "524e4e61": "testDistribution()", +"524e5407": "setCobjBucketX2(uint256)", "524e65b9": "_getWinnerBetted(uint32,uint32)", +"524e6c06": "Pool24_(uint256)", "524e915d": "player4Timestamp()", "524eb29c": "setRequestBurnerContract(address)", "524ee639": "setSpaceImpulse(address)", +"524efd4b": "queryPrecision(address,address)", +"524f2b35": "liquidityContributionsArray(uint256)", +"524f2cbd": "Minted(address,uint256,bytes32,bytes32)", "524f3889": "getPrice(string)", "524fa7b9": "whitelistAdd(address)", +"525050e1": "constructorCheck()", "52507790": "transferAfterDeadline()", +"5250fec7": "index(bytes32)", "52512599": "latpToken()", +"5251876b": "Winner(address,uint256,uint8,uint32)", "5251a343": "stopPurchaseTokens()", +"5251d91c": "userAccounts(address)", "52529852": "W0kiT0ken()", "5252cb2f": "generateUnsoldTokens(uint256)", "525417f1": "getNextKeyTime()", "52541b68": "takeAGuess(uint8)", "525426fd": "increaseUSDRaised(uint256)", "52545021": "AkshayToken(uint256,string,string)", +"52545410": "getOpenInterestNotionalCap()", "52548946": "isSimple()", +"52549cf9": "stakingPurchaser()", "5254a38c": "onERC721Received(uint256,address,bytes)", "5254b595": "TransferIndex()", "5254b660": "canDeCompose(string)", @@ -47293,28 +86541,50 @@ "5256fcaf": "_giveRNG(uint256,uint256)", "52573529": "setupPeg(address,address)", "52578012": "createService(string)", +"5257b566": "getInterestRate()", "5257c2b3": "soldTokenInPresale()", "5257c508": "ico1Cap()", "5257c825": "registerNameXIDFromDapp(address,bytes32,uint256,bool,uint8)", "5257cd90": "randomNumbers(uint256)", +"5258c96d": "usdsc()", "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)", +"525af047": "app(uint32)", "525b25b1": "getDeploymentReward()", "525b3fe3": "presaleLimit()", +"525b4162": "claimICOToken()", "525c3966": "GMCB()", +"525c5e0f": "transferToBackupAddresses()", "525cedae": "TeamTokensAllocation()", +"525d02b8": "redeemETH(uint256)", "525d0537": "getWinnerFunds(uint256[])", +"525d0da7": "viewTargetSwap(address,address,uint256)", +"525d509e": "UniSwapFactoryAddress()", +"525db64f": "setIronBankLeverage(uint256)", +"525df39d": "GiftsOfOwner(address)", +"525e77d2": "LockedAmountDecreased(uint256)", +"525ea631": "getQuoteLimit(uint256)", "525f8a5c": "setSaleStartTime(uint256)", +"525fb194": "depositWithdrawalLockPeriod()", +"525fde00": "mintParentWithoutChildren(string,address,address)", "525ffb7c": "ownersPayed()", +"526000eb": "funnelMaxWaifus()", +"52600344": "ddimTokenAddress()", +"526045f0": "AccreditationChange(bytes32,bytes32,bool)", "52608d85": "rateEth()", "5260de57": "numberOfTokensPerUser()", "52613423": "OLOVE(uint256,string,string)", "52617234": "changeSalePeriod(uint256,uint256)", "5261ee83": "amountOfOwners()", +"52620421": "routerOf(address,address)", +"52620c79": "cashoutable(address)", +"52625b1c": "token_owners_rewards_pool()", +"52627331": "dUSD()", +"5262b0a0": "addWhitelistAddrByList(address[])", "5262c873": "calcGain()", "52631ab4": "lastNonce()", "52638d75": "create(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", @@ -47327,15 +86597,27 @@ "5265565e": "_ecosysSupply()", "5265a078": "getMemoryWordsLog2()", "5265db80": "setPriceRatePhase1(uint256)", +"5265f966": "topTokens(uint256)", "526606c9": "addFreezer(address)", +"526608db": "getTaskIDListLength()", +"52661118": "juniorBondsMaturingAt(uint256)", +"52665f47": "getConfig(bytes32,address)", "52666403": "lockRewardToken(address)", +"5266b109": "orfeed()", "5266cc7b": "init(address,uint256[],uint256,uint256,uint256,uint256,uint8,string,string,uint8,bool)", "52675be3": "getElectionName(uint256)", "5267bd0c": "allowedRefund()", +"5267e1d6": "stakeAmountTotal(address)", "5267e681": "Tokens_Per_Dollar_Numerator()", +"526810d8": "_setDefaultReferer()", "526825af": "updateFcontracts(uint256)", +"5268cd93": "adminFeesAmount()", "526938f8": "left35(uint256)", +"5269569f": "getmaximumAverage()", "5269660c": "createInvestment(uint8[])", +"5269d90e": "totalCommissionFunds()", +"526a1152": "Crowdsale(address,uint256,uint256,uint256,uint256)", +"526a315d": "Claims(address)", "526a6b48": "transferTo(address,uint256,bytes,bytes)", "526a99c8": "getJackpotLoseSide(address,address)", "526aadc2": "mintBaseLockedTokens(address,uint256,uint256,uint256)", @@ -47344,125 +86626,237 @@ "526b91d1": "transferSysAdmin(address)", "526ba9fa": "TSB()", "526bc7fa": "getGenCode()", +"526c460b": "committeeAddress(uint256)", "526cb803": "getAllOfferingProposals(address)", +"526cbca0": "_devFeeTotal()", +"526cfddf": "updateMichelangeloAdd(address)", +"526d1df1": "LogWithdrawalVoucherSubmitted(address,uint256,bytes32)", +"526d4ccf": "NewRepo(bytes32,string,address)", +"526d6461": "BOT_REGISTRY_ADDRESS()", +"526d81f6": "__PauserPausable__init()", +"526dbd91": "novaV2()", "526de5ea": "addChunk2ToWhiteList()", "526e4d79": "requestRemainingTokens()", +"526e738f": "setModulesByPartition(bytes32,address[])", "526e7f3a": "AWD()", +"526f4823": "increaseAllocation(uint256,uint256)", "526f652d": "propertyIdToOwner(uint256)", +"526fdf26": "isUserAgent(address,address)", "526ff1f0": "TLB()", "52700ef0": "_changeClosingTime()", "52704644": "transferFromInternalstaffdisbursementfund(address,uint256)", +"52705c01": "calcSwapBeforeDesiredAmount(uint256)", +"52707d8c": "getAmountOut(uint256,uint256,uint256,uint256)", "52709725": "owner2()", "5270aa7d": "EtherGoToken()", "5270d70d": "readBytes32s(bytes32[])", "5271027b": "rentFlatDaily(uint256)", "5271309f": "migrationInfoSetter()", "5271500b": "batchAddCandidate(address[],bytes32[],bytes32[])", +"52717a5e": "getProposalExternalTokenReward(bytes32)", +"5272a3df": "getDataTypeByHash(uint256)", +"52732bc8": "stakerDisallowMigrator(address)", "52736814": "dutchAuctionToBuy()", +"5273c62e": "updateMinProposalTimeIntervalSec(uint256)", "52748cfe": "addDataResponseToOrder(address,address,address,string,bytes)", +"5274ac3f": "initialize(address[],address[],address)", "52753640": "registerXRateProvider(address)", "52757292": "getEventSecond(uint256)", "527596bf": "getDeployedChildContracts()", "5276b91c": "BlackHToken()", +"527718f2": "buy_refund_reject(uint256,uint256)", "52772264": "Contract(bytes32)", "52774565": "getMyLockedFunds()", "527749a4": "add_bounty(uint256,bytes32)", +"5277b4ae": "voted(uint256,address)", "5277fda5": "bookWithEth(uint256,uint256,bytes,string,uint256[],bytes32)", +"527814b3": "request_renter(uint256,bytes32,bytes,uint256)", "52782648": "emitSkillAreasSet(address,uint256)", +"5278366a": "addBalanceSubReserve(address,address,uint256,uint256)", +"5278d52c": "referreeCount(address)", "527942ac": "secondWeekPreICOBonusEstimate()", "52798dae": "buyTicketByEarnings(uint256,uint256,string)", +"52799cc9": "borrowProxy()", +"52799e4d": "getPayoutOutcome(uint256)", "5279a5f8": "levelThreeTokenNum()", +"527a3498": "statusCount(uint256,bool)", +"527a52c8": "setReserveContract(address)", +"527ad77a": "setParameters(address,address,address,uint256,uint256)", "527aea0a": "getWeiBalance(address,address)", +"527b2afd": "upload_fund()", +"527b90c8": "UNSTAKE(uint256)", "527ba1e1": "setIV_S(uint256)", +"527bf3f5": "SetCommunityBallotFee(uint256)", "527c08ec": "Max_CAP()", +"527cb1d7": "getMinStakeAmount()", "527cc85a": "Zxcvbnm()", +"527d1922": "payToEntry(uint256)", +"527d50e4": "brStudenata()", +"527d8bc4": "validatorRewardPercent(address)", "527d8f12": "ping(uint256,bool)", +"527e7a18": "testSupportMarket_NotAdmin()", +"527e8684": "getRewardsRemaining()", "527f0900": "IncPrivateSupply(uint256)", "527f4ff1": "setTransferAddressUser(address,address)", +"52800037": "checkMemory()", "52802121": "depositEther(address)", +"5280463d": "HALVING_MULTIPLIER_2()", "528050a9": "salePreiodChanged(uint256)", "5280b8ad": "getAmountBounus(uint256)", "5280c3ee": "dealToken()", +"52810b43": "playMove(string,int256)", "52810d5e": "UnitToken(uint256,string,string)", "52812053": "outstandingQuarters()", "5281947d": "cancelAdoptionOffer(bytes5)", "5281bbe9": "contractExpirationTime()", +"528204d0": "addPreTransfer(uint256,bytes32)", +"528286c8": "CindicatorsDroped(uint256,uint256)", "5282f649": "risedUSD()", "5283f339": "getAddress(address,string)", "5283fd87": "giveReward(uint256[4],bool,uint32[4])", +"528407e5": "addData(string,string)", "52848d8d": "kcck256strstr(string,string)", "5284a4c7": "allocateReferalBonus(address)", "5284b044": "Products()", +"5284d13c": "kycAuthority()", "5284e3d8": "RobotTradingIco(address)", "5284e660": "_getEndOfLastMiningDay()", "52855882": "confirmAddress(bytes16)", +"528575b5": "updateSeed(uint256,string)", +"5285f0ad": "TransferEnabled(address)", "52860ea2": "ADDITIONAL_BONUS_DENOM()", "528626fc": "updateNextStealTimeByOperator(uint32)", +"52866fdb": "rewardStarttime()", +"52875bc3": "setSupplyController(address)", "52879334": "requireNotZero(address)", "52879ba6": "roleCheck(string,address,address)", "5287ce12": "getDepositInfo(address)", "52883fc6": "addTokenBalance(address,address,uint256)", +"5288606e": "kscTransferToPartner(address,address,uint256,string)", "52892478": "disburseAuthorizedPayment(uint256)", "52892baf": "localConst()", "52894449": "lastBlock_f17Hash_uint256()", "528976de": "issueRefunds(address[])", +"52897d31": "yield21Mar31Maturity()", +"528a20f8": "claimOperator(address)", "528a683c": "keyExists(string,string)", +"528aedb4": "raiseDispute(uint256,uint256,string,string,string)", "528b5176": "zgetOtherContract()", +"528b7b8f": "zombieToOwner(uint256)", "528b8ed8": "MaxBusiness()", +"528c198a": "mintShares(address,uint256)", +"528c87d2": "productList(uint256)", +"528c9141": "withdrawAllDEBUG()", +"528c9448": "setBoardRoom(address)", "528ce7de": "withdrawByRndNo(uint256)", +"528d2d68": "isEmergencyPlugPlugged()", "528d4156": "authorizedCreateTokens(address,uint256)", +"528d454f": "P1_REWARD_PERCENTAGE()", +"528d6d30": "setPackPriceInToshiCoin(uint256)", "528d8797": "ModiTokenERC20(uint256,string,string)", "528d9479": "FeeUpdated(uint256,uint256)", +"528e1607": "baseAssetOracle()", +"528e5657": "goldKeyJackpot()", +"528e830a": "verifyProposal(address)", "528eb417": "Demome()", +"528ebbda": "courtStakeAddress()", "528ebdd5": "noSales()", "528eedcb": "sendSafe(address,address,uint256)", "528ef5a1": "UNINAcoin()", +"528f4eb0": "setupTokenUSDCOnce(address)", "528fa135": "changeStartTime(uint64)", "528fd7b0": "manualPayExpiredDuel()", +"528fd901": "set_param(uint64,uint256,uint256)", "52909fc2": "dynamicExchangeChecks(bytes,uint256)", +"5290b005": "setUpgradeActive(bool)", +"5290b321": "adminWhitelistCEVA(address,bool)", "5290d773": "amountBurned()", +"5290ffbb": "protectedLiquidity(uint256)", "52911bd8": "doesOwnEthHandle(bytes32,address)", "52916687": "setAuditRegistrar(uint256,address)", +"52917129": "PurchaseEnable(address,bool)", +"5291a186": "totalAllocatedMxx()", +"529216a6": "totalPrincipalAndInterest()", "52929a0c": "disable_throwing()", "5292af1f": "sendBalance(address)", "5292c1a9": "testThrowsRestartEnforceRevisions()", "5292c8f1": "validContribution(address,address,uint256)", "5293a436": "EscapeHatchCallerChanged(address)", "5293f22f": "EOSRegistration(string)", +"5293ff31": "getDiv(uint256,uint256)", "5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", "5294188b": "randomizerLottery(bytes32,address)", "5294409f": "Mineable()", +"52944123": "reassign(address,address,uint256)", "5294924d": "getMyLastFreeLotteryTimestamp()", "5294bb2b": "unpayPooling()", "5294d0e8": "tokensUnlockable(address,bytes32)", +"5294e09b": "CampaignCalncelled()", +"529509ef": "updateNoFeeList(address,bool)", +"52950e5e": "token_address2()", "52954e5a": "makerTransferAsset(address,uint256)", "52959d16": "ambiC()", +"5295fa8a": "initMISOFarmFactory(address)", "5296085e": "callServer(address,uint256)", +"5296a431": "flashLoan(uint256,bytes)", +"52974c3a": "InvalidMetaTransactionsArrayLengthsError(uint256,uint256)", +"52981457": "manager(uint256)", +"5298409d": "unsetBurnable()", +"529849e9": "beneficiaries(address,uint256)", "529865c9": "preBuy2()", +"5298948e": "grow()", +"52991170": "createBox(uint256,uint256[2],int256[13],bool[3])", +"52991a90": "BEP20Token(address)", +"52994187": "getChannelInfo(address,address,uint32,bytes32)", "5299ccc6": "isSubjectApproved()", +"5299e1ad": "LogNewInvestor(address,uint256,uint256)", +"5299e39b": "ricochet(uint256)", +"529a0cf1": "setUNIBLKPerBlock(uint256)", +"529a1baf": "bank(address)", "529a7d6c": "BurnProposalAdded(uint256,address,uint256)", +"529a837f": "_encode_sol_bytes4(bytes4,uint256,bytes)", "529ae0bf": "maxEthPerAddress()", "529af369": "createAndSellAllAmountPayEth(address,address,address,address,uint256)", "529b8e60": "ergebnis()", +"529bdc01": "addressToSendDai()", +"529c08f7": "updateEndDepositTime(uint256)", "529d15cc": "sequence()", +"529d2cea": "getImageRoot()", "529d4800": "getLockedWalletGroup(address)", +"529d8cd3": "poolconfigs(address,address,address,address)", "529db099": "viewAllControls(bool)", "529dbdb5": "getMs(uint256)", "529e65e1": "removeShopModerator(address)", "529e6713": "setCustodyFactory(address)", "529f0fb8": "setFee2(uint256)", +"529f35e9": "setPoolEnabled(bool)", +"529f4e88": "roomActive()", +"529f6f2d": "insertNnumbers(uint256,uint256)", +"529f9d7d": "setFIREAddress(address)", "52a00779": "bountyDelivered()", "52a08c29": "jackpotPersent()", "52a0b5ac": "registerBasket(address,address,string,string,address[],uint256[])", "52a0cf38": "p2pUnlocker(address)", +"52a12f59": "validateCoreConstraints(uint256,uint256,uint256,uint256,uint256,uint256)", "52a16bb0": "amountSold()", "52a23bbb": "approveTokenTransfer(address,address,uint256)", "52a2695c": "isReachedGoal()", "52a2720c": "extraTokensTransferred()", "52a27baf": "read_user_daily_limit(address)", +"52a3258d": "WithdrawLP(address,address,uint256,uint256,uint256,uint256)", "52a36938": "initDisabled()", +"52a387ab": "withdrawReserve(address)", +"52a4037b": "getRewardPools(address)", +"52a438b8": "stakeStart(uint256,uint256)", +"52a4c433": "swapIntoLoanToken(address,uint256)", +"52a4de29": "addLiquidityToJob(address,address,uint256)", "52a554a1": "voteBoardProposal(uint256,address,bool)", +"52a55cbc": "unlockableScheduleShares(uint256,uint256)", +"52a5aff9": "pendingLaser(uint256,address)", "52a5b002": "lastInterestCycle()", +"52a613f1": "setSendSuccessSeq(uint256)", +"52a69aa0": "MASS_LIMIT()", +"52a6cdf6": "ReceivedEth(address,uint256)", "52a6f970": "ZHEY()", "52a74b82": "getDebugNumber()", "52a7cae5": "BitAlphaAirdrop(address[])", @@ -47471,144 +86865,309 @@ "52a8aeab": "controller1()", "52a8fe93": "kscBurnWhenUseInSidechain(address,uint256,string)", "52a9039c": "allocations(address)", +"52a90c42": "balanceReceived()", +"52a91a54": "doover()", "52a94adb": "TRMCrowdsale()", +"52a97d52": "blacklistTarget(address)", "52a982d3": "distributeTokensRange(uint256,uint256)", "52a9a35e": "retireAdmin(address)", "52a9cd2d": "changeOwnerVault(address)", +"52a9d49a": "updateApprovedBalance(address,uint256)", "52aa2ae9": "enterPreSale()", +"52aa4c50": "Check_user_balnace()", +"52aa533e": "earn_crv()", "52aadf3b": "generateLuckFactor(uint128)", "52aaead8": "priceLastUpdated()", +"52abe540": "updateSaleMode(bool)", "52ac3235": "amountOfQuotations()", +"52ac3bca": "liquidateShort(bytes32,uint256)", +"52ac593a": "EconomyParametersUpdated(uint128,uint128,uint128,uint128,uint128,uint128,uint128)", "52ac882c": "retirementManager()", +"52ad0d5e": "status(bytes32)", "52ad2aa8": "__getStore(uint256)", +"52ad2e62": "withdrawAndExit()", "52ad4116": "getCrowdsaleStartAndEndTimes(address,bytes32)", "52ad6468": "SHARE_FOUNDATION()", +"52adb889": "buildBurnSystem()", +"52ae23a9": "FEE_SYS_KEY()", "52ae68f6": "getRoundBonusPot(uint256)", +"52ae7cd5": "setFeeReturnAddress(address)", +"52aecb24": "unwrap(address,uint256,uint256,address,bytes)", "52af1c04": "parseMessage(bytes)", +"52af7035": "ReservedAddress(uint256)", "52af719f": "initialize(uint256,address[],address)", "52af89af": "getsum(uint256[])", "52afbc33": "scheduleCall(address,bytes4,bytes32,uint256,uint8,uint256)", +"52afdbfe": "wpcAccrued(address)", +"52b07b34": "getMachines()", +"52b0f196": "multiTransfer(uint256,address[],uint256[])", +"52b0f638": "isKeyGranter(address)", +"52b120b1": "ChangedOwnership(uint256,address,address,uint256)", +"52b176e7": "getAirdropAddresses(address)", "52b1e14a": "insertUser(address,string,uint256)", +"52b27c5c": "distributedTotalAmountTillNow_T(address)", +"52b284c4": "getSrc20toSwmRatio(address)", +"52b29dbf": "getMinTransferFee()", +"52b2d341": "safeTransferURI(address,address,string,bytes)", +"52b31f1d": "upForecastPrice(uint256,uint256)", "52b33d64": "clientmanagerShare()", +"52b33fd1": "createCompetition(string,string,uint256,uint256,uint256)", +"52b3a66e": "getRebalanceableCount()", +"52b3fae3": "setBlockAmount(uint16)", "52b4643c": "Fallback()", "52b4be89": "totalBuyCardNumber()", +"52b4cbe2": "tenantCancelLease(string,uint256)", +"52b50a2a": "widthdraw()", "52b566e4": "CitiDynamicsCoin()", "52b5e85c": "firstPhaseEndTime()", +"52b5fdb8": "CodeUpdate(uint8,bytes32,uint256,uint256)", "52b5ff39": "RBAC()", +"52b7480d": "divisionFunction(uint256,uint256)", +"52b7493b": "hydroStakeDelegatedUser()", "52b75219": "freezeToken(address,uint256,uint256)", +"52b7a7ca": "ownerSetZethrAddress(address)", "52b7fddb": "createMechVRC(uint256,address)", +"52b8115d": "dethroneAndStake(address,uint256,uint256,uint256,bool,bytes)", "52b860eb": "tokenBonusForFifth()", +"52b8dfc5": "setLength(bytes,uint256)", +"52b9048f": "user_potato()", +"52b92de4": "setMocProportion(uint256)", +"52b9f8a2": "feePoolEternalStorage()", "52baee20": "getAllHpbNodesByStageNum(uint256)", "52bafbfa": "vestingBeneficiaryForIndex(address,uint256)", "52bafde9": "playersSignedUp()", +"52bb2085": "_register(address,bytes32,bytes,bytes)", +"52bb525c": "transformLevels(uint32)", +"52bb5449": "accessDeniedText()", "52bbde34": "BiddingRing(address,uint256)", +"52bc00c4": "incrementEtherDeposit(uint256)", +"52bc0e46": "updateConditionState(bytes32,uint8)", +"52bc0e60": "getContributions(bytes32,uint256,uint256,address)", "52bca4c3": "phaseOneCap()", +"52bcd7c8": "payout(address,uint256,string)", "52bd6945": "sellReply(uint256,uint256,uint256)", +"52bd6da4": "supplyOfCircle(uint256)", "52bd9914": "TimeEnd()", +"52bdcaea": "catnipConstructor(address,address,address,uint256)", "52bddee6": "uintCeil(uint256,uint256)", +"52be1674": "eurs_crv()", +"52bed6e8": "removeLiquidityFromETHPoolsWithPermit(address,uint256,address,uint256,bool,uint8,bytes32,bytes32)", +"52bf17d4": "_heartbeatStatus()", "52bf74b3": "airDropCoin(uint256)", +"52bfa3e3": "setException(address,uint256,uint256)", +"52bfb631": "globalMaxBPro()", +"52bfdd27": "wrappedCTokenToWrapper(address)", "52c01fab": "isEntrant(address)", +"52c038c0": "totalWineTransferredFromVineyard(address)", "52c05ca5": "setWeiPerBlock(uint256)", +"52c06865": "govSetBuyLimit(uint256)", "52c0b9f7": "ICO_START3()", +"52c0dd07": "LOG_Transfer(address,address,uint256,bytes)", +"52c15f04": "getShareOf(address)", "52c1c03a": "removeUnlockedAddress(address,address)", +"52c1ccb8": "CurrentTransBurnRate(uint256)", "52c1d3d5": "ZenomeCrowdsale()", "52c204d0": "ICOMeetupToken()", "52c22a72": "cancelContract(address,address,uint256,string)", "52c28fab": "add(address,address)", "52c34e68": "getStandardRobot()", +"52c3f3ed": "isStakeEnded(uint256)", +"52c4aeaf": "Top3distance100(uint256)", "52c53cb7": "checkPoint(int256,uint8,int256,uint16)", +"52c54d46": "_computeUniswapOutputAmount(address,address,address,uint256)", "52c5785b": "purchaseTokensPreSale(address)", "52c5b4cc": "setAuthorizations(address,address[])", "52c5d892": "withdrawOwnersFunds()", "52c700ea": "crowdsaleStop()", +"52c720a3": "TokensaleFinished(uint256,uint256)", +"52c7420d": "getBytecode()", "52c743d2": "callDestination()", +"52c74639": "withDrawFunc(uint256)", +"52c754fa": "reEntry()", "52c76b8e": "TokenGame(uint256)", "52c76de9": "addDiscountPhase(string,uint8,uint256,uint256)", "52c790ee": "confirmTokens(address)", "52c7c9e4": "isSubmission(bytes32)", +"52c89d9a": "globalDivDistPart(uint256)", +"52c8b2f9": "accountShares(address)", +"52c8c75c": "relayTokens(address,address,uint256,address)", "52c8df64": "getFund(uint256)", +"52c90582": "getSecurityScoreBytes4(address,bytes4)", "52c91d43": "getLinkedWETHAddress()", "52c944b2": "removeFromTokenLocked(address[])", "52c98e33": "checkClaim(address,uint256,uint256)", "52c9b906": "founderTokenWithdrawnPhase1()", +"52ca97a7": "createMarket(address,address,address,uint256[],uint256,bool,uint256,uint256,uint256)", "52cb2a7b": "calcTransfer(uint256)", "52cb36cd": "_getUtTotal()", "52cb7688": "suspendSale(bool)", +"52cbe344": "initiatorPercentage()", "52cbfe09": "summAirdrop()", "52cc5fdc": "retrieveMyEth(string)", +"52ccc4a5": "approve_432(address,uint256)", +"52cccdb3": "depositCollateral(bytes32,address,uint256)", +"52ccd7b3": "functionCallWithValue(address,bytes)", +"52cd0d40": "lift(uint256)", +"52cd22e8": "NAPboostVaultFee()", "52cd972d": "PreSaleCloseTime()", +"52ce28cf": "getCurrentBidForToken(uint256,address)", "52ceac34": "bytesToUint(bytes,int256,bytes)", +"52cf02f6": "calculateTokenPercentage(address)", "52cf4078": "transfertWDiscount(address,uint256)", "52cf46d4": "transferAllowed(address,uint256)", +"52cf4fd4": "getEarlyAccessTokenAtIndex(uint256)", +"52cf9533": "ReceiveCreateAuction(address,uint256,address)", "52cfd41f": "advisorFee()", "52d005d6": "findNewExchangeContract()", +"52d05985": "setFeeBlackList(address,uint256)", +"52d07cd0": "getEnterpriseCount()", "52d08730": "DogeCoin()", "52d0bf14": "setDataColla_AA_02(string,string)", +"52d10e8e": "endMiningBlockNum()", +"52d1902d": "proxiableUUID()", +"52d1cfbd": "getapplyCoin(address)", "52d214a7": "removeUnitMultipliers(address,uint256,uint256,uint256)", "52d23633": "getNumDividends()", +"52d287c7": "IMPOSS20()", "52d28a17": "muscFundDeposit()", +"52d2cfdd": "remove_liquidity_imbalance(uint256[2],uint256,address)", "52d2d83d": "setBoolValue(bytes32,bool)", +"52d34afb": "getListAuthor()", "52d35197": "JLL()", "52d3592a": "VoteExecuted(uint256)", "52d3642d": "sellToContract()", +"52d38243": "getSecurityScore(address)", +"52d38e5d": "rebaseThreshold()", +"52d3a5d6": "queryUserAddr(uint256)", "52d3a9dd": "rentAuctionContract()", +"52d3f849": "purchases(address,uint256)", +"52d43b46": "setKeyData(address,uint256,address)", "52d472eb": "rewardPercentage()", "52d4747f": "BurnTokensFrom(address,uint256)", "52d48a95": "getXPub(address)", +"52d49ff8": "ipfsIndex()", +"52d4ce1e": "govWithdrawToken(address,uint256)", "52d4e76c": "ControllerRetiredForever(address)", "52d50408": "statusContribution()", +"52d5999f": "recoverEther(address)", +"52d5aa93": "onRoundEnded2(uint256,uint256,uint256,uint256)", "52d5ad25": "currentRecords()", +"52d5b971": "updateDam(uint256,uint256)", +"52d5d815": "adminFraction()", "52d63b7e": "setNextSale(address)", "52d6804d": "minimum()", +"52d68d6c": "setEquipmentContract(address)", +"52d6a8e4": "getCancelAndRefundValueFor(address)", +"52d6abdc": "RemoveEmployee(address)", "52d714e8": "approveMintingManager(address)", "52d7d861": "AddrChanged(bytes32,address)", +"52d8215f": "bondsAddress()", +"52d84d1e": "allMarkets(uint256)", "52d850d1": "tstinx()", +"52d86b91": "setMaxAllowedToClaim(address,uint256)", "52d8bfc2": "recoverEther()", +"52d9f48c": "mojito()", +"52da800a": "setQuotaPrice(uint256)", +"52da86d5": "nonPayable()", +"52db0a06": "LiquidityParamsSet(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "52dbb027": "newModelShipProduct()", +"52dbd6a1": "_getUSDPCurPriceOfBTCB(uint256)", "52dc09a5": "test_4_assertGasUsage700Boards()", +"52dc1189": "updateBotPrice(uint256,uint256)", +"52dc7dcc": "addDelegate(string,string,uint64,address)", "52dca247": "ttlInvestCount()", +"52dcacd0": "curveZapIn()", "52dd336a": "_tokenAllocate(uint8)", +"52dd35b9": "addKyberProxy(address)", +"52dd9ac8": "allowse(bool)", +"52ddacef": "GOLDPerBlock()", +"52dde1c3": "payWithToken(uint256,address)", +"52de1b99": "Birth(uint256,uint256)", +"52de58a7": "ProductInventoryAdjusted(uint256,uint256)", +"52df8d4e": "LandIdToName(uint256)", "52e021c2": "securityReg(address)", +"52e0b235": "isInvested(address)", "52e0d025": "maxUserPayment()", "52e0d0fa": "BIPOOH_DAO_32_a()", +"52e0d9a8": "userScams(address)", "52e11d12": "DanCoin()", +"52e11ff7": "TIMESTAMP_OF_20190501000001()", "52e1ea89": "setDonator(address)", "52e2525f": "ownerSetFee(uint256)", +"52e2c41b": "BDPMaster()", "52e2f9ea": "MerculetToken(uint256,uint8,string,string)", "52e32a55": "bounty0xToken()", "52e34245": "disputeTX(uint256)", +"52e38435": "isSchoolStudents(address)", +"52e3b413": "getMyStatus()", +"52e3b827": "donateToTarget()", "52e3d369": "saleConversionRate()", "52e40d96": "PPKToken()", +"52e432c5": "setSupportedToken(uint256,address)", "52e43613": "approveToMint(uint256)", +"52e4899d": "batchSettlePositions(bytes32[],bool[],address[],address[],uint256[])", +"52e4b5d2": "prePercentBonus()", "52e536ad": "icoLeftSupply()", "52e578ad": "LOG_EmergencyAutoStop()", "52e57d1f": "makeLogError(uint8,uint256,uint256)", +"52e5bb55": "NFT_ETH_CONTRIBUTION()", +"52e5bcc3": "config(address,address,address,address,address,uint256,string)", "52e60b90": "setTalentCardAddress(address)", +"52e67e42": "onTRC20Received(address,uint256)", "52e686a0": "EnableReturnFunds()", "52e68c46": "list_token_ask(address)", +"52e69c81": "getStudentsData()", +"52e6c6cd": "serviceEntityBlockLastClaimedOn(address,address)", +"52e70b35": "getUserLevelExpiresAt(address,uint256)", +"52e831dd": "cloneConstructor(bytes)", +"52e83c6d": "quitSystem(address,uint256,address)", +"52e877d2": "whitelistRelayer(address,uint256)", "52e8f2c3": "deleteRecord(uint256,string,string,bytes32)", +"52e92d48": "NewPlayer(address)", "52e94beb": "setPrice(uint256,bool)", "52e97326": "changeTotalSupply(uint256)", +"52e9ad07": "entryid()", +"52e9b970": "reBitbasesPaused()", +"52e9fe97": "mainDao()", "52ea5667": "getMPbyIndex(uint256)", "52ea8a71": "setRandomApiKey(string)", "52eae80b": "doProvideStateRoots(uint256,bytes32,bytes32[])", "52eb2580": "Tethered(address,string,string,uint256,uint32,uint256,uint256,string)", "52eb5751": "MedicoHealthContract()", +"52ec2910": "_claimOptions()", +"52ec4c78": "enterBondCoolDown(address)", "52ec8a58": "mint_and_transfer(address,uint256)", "52ece9be": "freezeAllowance(uint256)", "52ecf7c4": "pickWinner(uint256,bool,bool,bool,bool,bool,bool)", +"52ecfc3d": "whitelistToken(uint256)", +"52edbb78": "office()", +"52edf31f": "setJGNAddress(address)", +"52ee365e": "setInterestAccruedAsOfBlock(uint256)", +"52ee38d1": "$getMyTokens()", +"52ee5bc7": "gelatoMaxGas()", +"52ef2caf": "powToken()", "52efd35f": "INCENT_FUND_VESTING()", +"52efd685": "s(uint256)", "52efea6e": "clear()", "52effe11": "transferOwnershipTo(address)", +"52f04f8a": "ShowDuration(uint256)", +"52f0ffe0": "mmrRootPool(uint32)", +"52f12bd9": "Is_Manager(address)", "52f17ce9": "pomda()", "52f18042": "addAdditionalBonusMember(address)", +"52f19cbe": "r_b1()", +"52f1c7b9": "shl_zero(uint256)", "52f1e07b": "ethRefundAmount(uint256)", "52f1f48c": "setInv3(address)", +"52f206a9": "SetBotADD(address)", "52f29a25": "nextPunkIndexToAssign()", "52f37c40": "isHodler(address)", +"52f39e70": "claimablechalz(address)", +"52f41fc1": "registerDistributor(address,string,string,string,string,uint256)", "52f445ca": "setAssociatedContract(address)", "52f46769": "InitializedTier(uint256,uint256,uint256,uint256,uint256)", "52f50db7": "initiate(uint256,bytes20,address,address,uint256)", +"52f52092": "executeTopUpPayment(bytes32,uint256)", "52f59e0e": "AICH()", "52f62195": "picops_enabled()", "52f662bb": "sendTokensToInvestors(address)", @@ -47616,79 +87175,161 @@ "52f6ca76": "deadDragons()", "52f6ee58": "exponent()", "52f775c8": "ViewSecretBet(address)", +"52f779e8": "m_Stacking_Block_Number_Stop()", "52f7c988": "setFee(uint256,uint256)", +"52f7f4b0": "all_time_selling(address)", "52f804a8": "burnPollStake(address,bytes32)", "52f84b1b": "BlangsakToken()", +"52f887a6": "workingBuyLevel(uint8)", "52f8a766": "TimeStampSubstructOneDay()", +"52f8e8ba": "updateSeed(string)", "52f9058b": "getFreeRickAndMorty()", "52f91acf": "triggerDispute()", "52f97117": "createContract(bool,string)", +"52f97e43": "shr_2()", +"52f98e21": "getPF(string)", +"52fa005c": "setLotBuy(uint256)", "52fa1ac2": "createUnicornForCandy()", "52fa2650": "withdrawPercents(uint64)", "52fa3712": "makeBet(address,uint256,bytes32)", +"52fa5f3f": "strategyStruct(address)", +"52fa95ec": "effectiveValues(uint256)", +"52fa9d57": "_tokenOfQuota(uint256)", "52fb0561": "setWhitelistedTransferer(address,bool)", +"52fb1c9d": "LPTokenWeightStored()", "52fba25c": "attack(address,uint256)", "52fbeb57": "transferToContractWithCustomFallback(address,uint256,bytes,string)", "52fc01f9": "func_1(uint256,uint256)", "52fd2c15": "ServiceStation()", +"52fd55fb": "pendingIcecream(uint256,address)", +"52fd856b": "NAV()", +"52fd9f13": "failSafe(address,uint256)", "52fdcc65": "GAME_SUPPLY()", "52fdeef5": "_addToFundHWC(uint256)", +"52fe2510": "getIpfs(string)", "52fe8163": "randomDS_sessionPubKeysHash()", "52fea23c": "teamAllocator()", "52fedceb": "getMarketComissionRatio()", "52fedefa": "decrementBalance(address,address,uint256)", +"52ff02a1": "getBurnDivisor(address,uint256)", +"52ff6d63": "index2txKey(uint256)", +"52ffe699": "snapshotUNICORE(address[],uint256[])", "52ffeb30": "highestBidTime()", +"52ffff5f": "inj()", "52ffff99": "addAllowContractList(address)", +"53003a57": "earlyExercised(address)", "5300a306": "changeTransactionFee(uint256)", +"5300a7d9": "unipair()", +"5300f841": "relayers(address)", +"5301d63c": "end(uint256,uint256)", "5301fa52": "setPromoCode(address)", +"53020dea": "contentPurchased(address,address,uint256)", "5302470a": "submitPlaintext(uint32,uint32,uint256,uint256)", "530266c7": "getSellOrderInfo(address,address)", "5302a136": "fourthPriceTime()", +"5302bd6d": "userStructs(bytes32)", "53030d91": "investmentAddress()", "5303a5d7": "RESEARCH_DEVELOPMENT()", +"5303a663": "addLiquidtyPoolToken(address,uint256)", +"5303ad21": "setQuantityRules(uint256,uint256,uint256)", +"530402f7": "buyTokenRef(address,address)", "53043490": "ownerTransferFrom(address,address,uint256)", "53047154": "createPromoMovie(address,string,uint256)", +"5304aa65": "DiceRolled(address,bytes32,uint256,uint256,address)", +"5305466d": "setAwardPartner(uint256)", "53055262": "awardMarble(uint256,address)", "53055481": "totalDeposited(address)", "53056351": "DIGIPLACEDS()", +"5305c994": "sendErc20NoReturn(address,address[],uint256[])", "53067968": "GetSellingTokenContractAddress()", +"530680d8": "depositsByWithdrawalAddress(address,uint256)", "53069df6": "getRepaidAmount()", "5306a5af": "LogRollbackTransfer(address,address,uint256)", +"5306fa8b": "getVerifiedStatus(address)", +"53070152": "OfferPrice()", "530795fb": "initNormal()", +"5307e60f": "getHistoryBalance(string,uint240)", +"53084eff": "latestPrice(address)", "5308db4b": "finalizeBundleIPFS(bytes32,string,bytes32)", +"5308f901": "getLidPoolManager()", +"5309cdb3": "hard()", "5309ce38": "PrintLimiter(address,address,address,uint256)", +"5309d0f8": "createContract(uint256,uint256,uint256,uint256,uint256,uint256)", "530abf0f": "distributeTokensToContributor(uint256,uint256)", +"530b1cf8": "_burnToken(uint256,uint256)", "530b1e1a": "recording(address,uint256)", +"530b97a4": "initialize(address,address,address,uint256,address)", +"530bedaa": "AllowStakingPayoutToOtherAddress(bool)", +"530c06b4": "checkAccountBalance(address)", "530c435f": "whaleWantMyEther()", "530c4ca6": "setGames(address)", "530c515e": "stake(uint256,address,uint256,uint256,uint256)", "530c6868": "getContributorETH(address)", +"530c77f8": "tobContract()", +"530c7c00": "checkErc20()", +"530cd5ab": "removeWhitelistedAddress(address)", +"530d217c": "getplayercount()", "530d26b0": "MattewWon(string,address,uint256,uint256)", +"530d3e07": "set(uint256,uint16)", "530d44f4": "normalRate()", +"530d8129": "yourEDCBalance(address)", +"530d8d50": "updatedChainRequest(uint256,string)", "530dfad3": "addItemToUserDebt(address,bytes32)", "530e3543": "addMemberToGroup(address,uint256)", +"530e3b52": "changeETHPrice(uint256)", "530e784f": "setPriceOracle(address)", +"530ee1dd": "manageContract(address,address,bool)", +"530f2f56": "fetchUserBets(address,uint256)", +"530f702c": "vestingTimeInSeconds()", +"530fb87d": "getDac(uint64)", "53105fbc": "tokenConversionFactor()", +"5310dc85": "addUnit(uint32,uint32,string,address)", +"5310e75d": "synthInitiatedFeePayment(address,bytes32,uint256)", "5310f0f4": "priceInUsd()", +"5311312f": "quotes(address)", "531163c1": "TOKEN_MAIN_CAP()", +"53120549": "pollTxtPrices()", +"53121661": "redeemLimit(address)", +"531228f2": "getNumPeopleRecruitedBy(address)", +"53122f56": "streamityTransfers(bytes32)", "53127b88": "encrypt(uint32[26],uint32[4])", "5312918b": "VestingEndedByOwner(address,uint256,uint256)", "5312aa24": "Bigchaintoken()", "5312ab19": "HoviiExchange()", "5312b4bb": "pyrBalanceOf(address)", +"5312ea8e": "emergencyWithdraw(uint256)", +"5312ebba": "lockupExpirations(address)", +"5313461b": "powNumber()", "53135ca0": "presaleActive()", +"53138bf8": "func_2E90()", "5313d890": "_markCredit(address,uint256)", +"5313e303": "isCdpSafe(bytes32,uint256)", +"53140983": "Profit(address,uint256)", "53147d4f": "TokenCrowdsale(uint256,uint256,address,uint256,address,address)", +"53148a46": "setup_bigbonuslim(uint256)", +"5314eec0": "viewProfit()", "531571a9": "connectTokens(address,address)", "5315810e": "isSponsor(uint32,int256,uint32)", +"53159b37": "permitedStable()", +"53160ef6": "maxburnrate()", +"53168b16": "getNFTPriceSum(uint256)", "53176195": "witnesses()", +"5317857a": "WithdrawFromMyWallet(uint256)", "53179413": "transfersBlocked()", +"5317e046": "mscContractAddress()", "5317e444": "removeUserPermission(address,bytes4)", +"5318b6fa": "approve_635(address,uint256)", +"5319022e": "setNetworkFeeAddress(address)", "5319418a": "transferLockedBalance(address)", +"5319504a": "distributeDividend(address)", "5319ae10": "generateInstance(address[2],bytes,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", +"531a1fac": "NGOStamp(uint256,string,string)", "531a7f29": "dateProductCompleted()", +"531aa03e": "getPool(address,address)", +"531acc13": "minimumDepositUSD()", "531b6d98": "LogHodlSetStake(address,address,uint256)", "531b97d7": "oneCentOfWei()", +"531ba2f2": "simpleSet(uint256)", "531c1b33": "getOperatingBudget()", "531c267e": "getGameResolverData(uint256)", "531c8628": "amount_referral_invest()", @@ -47696,45 +87337,75 @@ "531ca478": "VantageCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", "531ce262": "bankWithdraw(address,uint256)", "531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", +"531db222": "queryPublicAirDropMintStatus()", "531e1ee0": "EarlyPurchaseInvalidated(uint256)", "531e4827": "poolTimeLastMinted()", "531ebce5": "getReceiverAddress()", +"531ec3a0": "ChangeDepositeStatus(bool)", "531ef079": "setBvToBpFee(uint256)", "531efbee": "_score(bytes32)", "531f0ade": "_adjustValue(uint256,uint256,uint256)", "531f4c40": "accept(bytes32,bytes32)", +"531f868b": "onek()", "531ff93b": "setMrkContract(address)", +"53208024": "roiPayoutOfUser(address)", "53214e5a": "kilo()", "53216223": "TravelCoin()", +"5321b2c6": "l0cked()", "5321fe04": "subFromBalance(address,address,uint256)", +"53220a42": "REFERRAL_COMMISSION_PERCENT()", "5322f0c5": "getChannelOwner(bytes)", "5322f9d1": "switchSale()", +"53230d17": "tradersVolumeUsed(address,address)", "532399d9": "setTransContractLocked(bool)", "5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", "5323df9e": "getShipDetails(uint32)", "53240172": "midiv(uint64,uint64)", +"5324f2ac": "AdjustAirdropAmount(uint256)", +"5324f9aa": "getTokenIdsOf(address)", "53251389": "addBridgeNativeFeeReceivers(uint256)", +"53252e2c": "evt_gameRecord(address,uint256,int256,uint256,uint256,uint256,address,uint256,uint256)", +"53257e00": "CEther()", "5325dc16": "test_validShouldBe3()", +"5325e144": "validatorAuction(uint256)", +"53263599": "trig()", "53269475": "loveToken()", "5326ba37": "setSaleAuctionERC20Address(address,address)", "53270910": "deedOfOwnerByIndex(address,uint256)", +"53271907": "specificDrain(uint256)", +"5327d4af": "stakescsldt(uint256,uint256,uint256)", +"5327e4f8": "getHexContractDay()", "5327f96e": "OwnerTransfer(address,address)", +"53281ca8": "_burnAddresser()", "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)", +"5329aabe": "getHoldingDelay()", "5329c681": "checkTimeout(uint256)", +"5329dd31": "getImbalancePerToken(address,uint256)", "532af7d2": "calculateResult(uint256,uint256)", +"532afa69": "setTokenPriceInt(uint256)", +"532b4b3e": "AppleInc()", "532b581c": "round2()", "532b5f86": "createBytes32(bytes32,bytes32)", +"532c1d4a": "MAX_SUBTRAN_COUNT()", "532c3dc5": "nAuditors()", +"532cc5e8": "X12Transfers(uint8,address,uint256,address,address,address,address,address,address,address,address,address,address,address)", +"532d1da2": "goldBonus()", +"532d6a29": "addAdmin(address,uint8)", "532da8f9": "getDelayDays(uint256)", +"532ddcb2": "clientCache(uint256,uint256,uint256[],uint256[])", +"532e1809": "IMP11()", +"532e19a9": "logStakeUpdate(uint256)", "532e4849": "setTokenUriPrefix(string)", +"532e4bf3": "piToBalancer(address,address,uint256,uint256)", "532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", "532e87e4": "setTimeForCrowdsalePeriods()", "532eb619": "_sellTokens(uint8,address)", +"532efe60": "getUnitCount(uint32)", "532f1041": "setFormat(bool)", "532f1179": "refundsEnabled()", "532fb092": "isApproveConfirm(uint256)", @@ -47744,107 +87415,189 @@ "5330a4c6": "buyMicroKeys(string)", "5330bc61": "disallowTransfer(address,bool)", "533178e5": "get_rate()", +"53321c88": "TicketPrice()", "53322527": "EthlanceViews(address)", +"53322c0b": "push_signal()", "5332510b": "EthernautsLogic()", "533265e6": "Database()", "53329856": "secondBuyPrice()", +"53338826": "getPulicName(address)", "5333c507": "allowTransferFor(address,bool)", "5333ee4d": "buyEgg(uint256,uint256)", "533425a5": "icoPeriod()", +"533426d1": "currentMediator()", "5334398f": "addRecordwithReward(bytes32,string,string,address)", "53344481": "isInTier1(address)", +"533452d1": "emptyFaucet()", +"53347169": "getAffiliateInfo(uint256)", "5334c231": "currentSwapRate()", +"53350755": "cancelProposal(address,uint256)", "533574ca": "getLastDividends(uint256)", "53358fc4": "castVote(address)", +"5335bacc": "issueMaxPynthsUsdc()", +"533638d0": "getSbtAndLbtFnMap(uint64)", +"53364c50": "calculateCost(address,address,uint256)", +"53364da0": "_poolRewardRate()", "5336cd16": "_getEndIndexKey(uint256)", +"533723e2": "__LimaTokenStorage_init_unchained(address,address,address,address[],uint256,uint256,uint256)", "5337421a": "TrumpBingo()", "5337448e": "payWinners()", "53376d1f": "revokeAuthentication(address)", "5337fa10": "awardPoint(int256,bytes32)", +"53382f62": "monDataWithAnimation(uint256)", "53384da7": "updateTier(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "5338b3e4": "miningTokenLeftInCurrent()", +"53393e35": "setMaxStakedCifi(uint256)", "533945df": "editMemeTemplate(uint256,string,string,string,string)", +"53396275": "changeGameSettings(uint256,uint256,uint256,uint256,bool,uint256)", +"53396893": "ethFeeForTokenSet(uint256)", "53397be3": "lastConsolationPrize(uint256)", "53398119": "emergency(bool)", +"533995cd": "__internal__getMockCall()", +"5339c296": "tickBitmap(int16)", +"533a32fd": "myBonusProfits(address)", +"533a526f": "changeTokenWantAndPrice(uint256,address,uint256)", "533a645c": "minTx()", "533ae8e5": "inTipperQueue(uint256,address)", +"533b134d": "burningPermille()", "533b180e": "LAcoin()", "533c023b": "getGroupRight(string,string)", +"533c42ee": "withdrawDustTo(address,address,uint256)", +"533c835b": "sendTok(address,address,uint256)", +"533d3c46": "poolIncrease(string,uint256,uint256,uint256)", "533d4270": "ClipperCoin(uint256,uint8,string,string)", +"533d96db": "setPurchase(uint256)", "533da8df": "getAreaOwner(string)", "533de9e5": "addSmartContractByAddress(address)", "533e00ec": "approveAndDo(address,uint256,address,bytes32,string)", +"533eaedb": "emitAuthorizationGranted(address)", +"533f3ba8": "addMarket(address,string,string,uint8,uint256,uint256,uint256)", "533f6730": "clearInventory(uint256)", "53400e7f": "debugNow()", "534104df": "UnilotTailEther(uint256,address)", +"53410e35": "totalPoolCHIPCommissionsAvailable()", +"53411038": "setLCPAddress(address)", "5341903b": "upgradeMe(address)", "5341d618": "setDataColla_AB_02(string,string)", "53423e50": "MaengDevToken()", +"53424cbf": "deleteContractData(address)", +"5342acb4": "isExcludedFromFee(address)", "5342da41": "testBeyond()", +"53438cbf": "jigoutuighanamount()", "5343e6a4": "rateFinalStage1()", "5343f1a0": "cancelOrderWithMerchant(string,address)", "534439a3": "mintingDec()", "53448316": "MIN_SALE_AMOUNT()", "53449d26": "TourPool()", "534514ee": "adminCharge_p3()", +"534567cf": "depositToGateway(address,string,uint256[])", "53458f5e": "defaultTreesOwner()", "5345c415": "LogOwnerAdded(address)", "534607fb": "info_OwnerOfContract()", "53462d6b": "getReleaseTime()", "53462fd8": "NCPTokenDeposit()", +"53467d22": "prepareCoinsForRedeeming(uint256)", "5346dcc5": "calculateTokensEnabledforAirdrop(address[],uint256)", "5347d58c": "Paradime01()", "534844a2": "withdrawAmount()", +"53484a1e": "getGeneral(uint256)", "534878fb": "reply(address,address,bytes32,bytes32)", +"53488deb": "updateProduct(uint256,string,uint256)", "53488f0a": "activateAuction(uint256)", "5348ac95": "makeTokensTransferable()", +"5348c444": "AIRDROP_Mint14(address,address,address,address,address,address,address,address,address,address,address,address,address,address)", +"5348dacf": "initialize(address,address,address,address,address,address[2],uint256,uint256[3])", "53490c67": "earlySuccessBlock()", "53490fbb": "EPR()", "53497794": "RepublicKey(address[])", "534992c8": "showTokenBalance(address)", "5349a335": "setThirdAdmin(address)", +"5349c107": "lockedAllRewards(address,uint256)", "5349cdb6": "Testcoin()", "5349efdc": "generatetoken(uint256)", "534a2f7c": "WTechCoin()", +"534b007a": "setRefundParams(address,address,uint256[2])", "534b0391": "getVerifiedInfo(address,address,string)", "534c2609": "checkBtcRequestSignature(bytes,bytes,uint256,bytes)", +"534c6c40": "AvailableSupply()", +"534caae5": "decrementUnitPerBlock()", +"534cef2d": "getCurrentCashTofCashJuly(uint128)", +"534cfb60": "blockNow()", +"534d4f3d": "setMaxPoolTokens(uint256)", "534d5acb": "initialBSTSupply()", "534d5ce3": "RobaToken()", "534ddf19": "reclaimContributionDefault(address)", "534e05c1": "_goldFreeze(uint256)", "534e2645": "getLucy()", "534e3f81": "finishPVP()", +"534e95be": "offer(bytes32,address)", +"534ea9a2": "checksupply()", "534eb1d4": "offerBonus(uint256)", +"534eb459": "PurchasedCallbackOnAccept(uint256,address[])", "534eec2c": "Yacksoncoin(uint256,uint256)", +"534f36c5": "TokenPerETHBuy()", "534f6a2d": "LogGrantClaimed(bytes32,uint256)", +"534fff0e": "withdrawPrizes(uint256)", "53501052": "extraTokensPercent()", +"53501a9c": "verydangerous(uint256)", "53511819": "triggerAssertError()", "53515226": "getEtherProceedsAccount()", +"53515e58": "distributeChai(address[],uint256)", +"535188f9": "Summary(uint256,uint256,uint256,address)", +"5351a63d": "registerAsShareholderAndSignArbitrationAgreement(bool,string,string,string,string)", "5351ad81": "FrellyToken()", "5352aadb": "allowedBetAmount()", "5352b889": "isNewRound()", +"5352b91f": "arb(uint256,uint256,address,address)", +"53531e39": "initialize(uint256,address,uint256,string,string,string,uint8)", "53535db9": "deployWallet()", "53537303": "bonusRatePeriodOne()", +"53539029": "noInput()", "5353a2d8": "changeName(string)", +"5353c9f8": "FADRrtSaleFADR(uint256,uint256,uint256,uint256,uint256)", +"5353d0e3": "_changeExecutionDelay(uint64)", "5353e168": "rlc_team()", +"53543d46": "OfferGamePlayed(address,address,bool,bool,uint256,uint8)", "53547d3f": "mintBooty()", +"5354e6e4": "iec()", +"53551a83": "nftCity(uint256)", "53554015": "newZeusPriceTicker(string)", "53556559": "exchange(uint256)", +"5355d473": "TournamentClosed(bytes32)", +"5355e221": "changeTeam(address)", "5355ee2f": "CryptoSneakersCoin()", +"5355faed": "tokenApprovals(bool,uint256)", +"53560fd2": "UpdateToken(uint256,string)", +"53571325": "updateSale(uint256,uint256,bool)", +"53571a64": "setOpFund(address)", +"535729e2": "sigDestinationTransferfrom()", +"53572b7c": "SacrificeOffered(address)", "535779ef": "removeFromAddresses(address)", "5357b989": "calculateFee(uint256,uint256,uint256)", +"5357e56c": "weiPervSPACEXSecondary()", +"5358065d": "listRejectedAdmin()", "53584939": "bytesToBytes32(bytes,uint256)", +"53585888": "setOtc(address)", "5358677c": "BACKUP_FOUR()", "5358c119": "getFaucetByCreator()", +"5358fbda": "depositETH(uint256)", +"53593ed2": "totaleth()", "535999aa": "getarg_3_input()", +"535999fe": "_ensureVoterCanReveal(uint256,address)", +"5359a01a": "getMarketSymbol(string,uint256,bool)", +"5359f6eb": "BiddersAll(uint256,uint256,uint256)", "535a920c": "setLANDRegistry(address)", "535b27dd": "BitImageTokenSale()", "535b4e58": "adminResetLottery()", +"535b51f2": "merkleTreeWhiteList()", "535bf003": "appVersionList(bytes32)", "535c69b6": "setEthAuction(address)", +"535cd529": "weekTotalStakes(uint256)", +"535d0390": "withdrawableAaveFees()", "535d1ab3": "claimWork(uint256,uint256,uint256)", "535d3f22": "RankingBallGoldToken(address)", "535d4156": "killWithBenefits()", +"535d604a": "unbanThisMachine()", "535d9289": "RDPTicks()", "535dc2b0": "_b1(string,uint256,string)", "535e401c": "check(bytes32,bytes32,bytes)", @@ -47854,31 +87607,55 @@ "53613273": "setTymTokensWallet(address)", "53613769": "setDistributorAmount(address,bool,uint256)", "53613dd3": "creatorFeePercent()", +"53615c85": "decreaseAllowence(address,uint256)", +"53623489": "getMonster(uint8)", "536253a9": "getRandomForContractClanwar(uint256,uint256)", +"536265a9": "getTotalLpLiquidityAndUnrealizedPNL(address)", +"5362b209": "handoverEthfundMintage(address)", +"53634c2a": "swapContract(address)", "53636220": "depositToExchange(uint256,uint256)", +"536414b8": "batchTransfer(address[],uint8)", +"53644378": "GetReceiverFromOrderID(uint32)", "53645caa": "rewardDays()", +"5364d039": "verifyOwnerOrAuthorisedFeature(address,address)", "5364e45d": "setStartBalance(uint256)", "5364f721": "getArbInfo(uint256)", "536529dd": "WarpSpeed()", +"53653394": "shouldAllocateEthToEthReserve(uint256,uint256,uint256)", +"53658354": "pendingHKS(uint256,address)", "5365939c": "unlockedTokensInternal(address)", "5365ccf7": "CCH_MENA_1()", +"5365ce1c": "lastDayTokenSupplyUpdated(address)", "53661f87": "initStorageOwner(address)", "53663c0b": "distributeAIC(address[],uint256)", "53667f10": "getContracts(address,address[],uint256)", "5366d0fd": "operationalExpensesWallet()", +"5366d9ea": "LOG_ChangeRegulator(address,bool)", "5366f338": "publishFor(bytes12,address)", "53677154": "placeAnswer(uint256,string)", +"53687705": "newFund(address,address,string,uint8,string,uint256,uint256,bool,bool,bool,bool)", +"5368aeac": "upgradeToV3(uint256[],address,uint256,uint256,uint256)", "5368cc55": "getBack2()", +"53690bb4": "setStepTime(uint256)", "536942b6": "finalizeAndRestart()", +"536a12ab": "storedCollateral(bytes32)", "536a3ddc": "currentGameId()", +"536a58fc": "MEM()", +"536aa9ec": "tranferWeapoon(address,uint256,uint256)", "536aace8": "setUserSignupTokens(uint256)", "536ab151": "onFailedAffirmation(address,uint256,bytes32)", +"536b0445": "setMarketState(uint8)", +"536b5576": "luckyper()", +"536b7709": "setTradingTime(uint256)", "536bd93a": "SetAccessoryDataContact(address)", +"536bfe0d": "buyAllAmountAndMigrateSai(address,address,uint256,address,uint256,address)", "536c1ddd": "SampleERC23Token(address,uint256)", "536c26e5": "MiniMeIrrevocableVestedToken(address,address,uint256,string,uint8,string,bool)", "536c2e4a": "sendEmail(address,string,bytes32,string)", +"536c4d10": "setLPaddressAndSize(address,uint256)", "536c8c15": "jurySize()", "536c9a7f": "dividendFundAddress()", +"536ca7c6": "stFlpToDeposit(uint256)", "536cb736": "setPreUri2(string)", "536cfceb": "todaysSupply()", "536d888b": "isServiceOwner(bytes32,address)", @@ -47889,94 +87666,176 @@ "536e2800": "buyForWorkOrder(uint256,address,address,address,string,address,address)", "536e2c75": "challengeCanBeResolved(uint256,bytes32)", "536e3f6a": "getOracleData(uint256)", +"536f7570": "coinAgeForAddress(address)", "537038c3": "BOUNTY_PERCENT()", "5370a049": "thebank()", "5370e3d4": "Ozreal()", +"53710f49": "setRewardsInterval(uint256)", +"53712bf8": "articoloAdded(bytes,bytes,bytes10)", "53718569": "generateRandomStats(string)", "537187a3": "transferWithMsg(address,uint256,string)", +"53718af6": "addReceivedToken(address,string,uint256)", "53719b6e": "lockedTokens(address,uint256)", "5371e490": "Presalezillion()", "53729273": "getLLV_edit_9()", "5372a9ce": "addService(address)", "5372c1db": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool)", +"537331f9": "noVisibility5()", +"53734ce3": "setFromWhitelistAddress(address,bool)", "53734dc5": "refundContribution()", "53738a4c": "distributeOwnedTokensFromOtherContracts(address,address,uint256)", +"5373a191": "EIP712_ORDER_TYPE()", +"5373d2c8": "setTester(address,bool)", "53749313": "PortToken()", "5374eec3": "hijack(uint256,uint256)", +"53755b8f": "authorizeSender(address)", "5375a828": "createLibraryWithFounder(string,string,address)", "5375f182": "IronHandsCoin()", +"53767936": "LIMIT_SUPPLY()", +"53769038": "getPeopleBeforeMe(address)", "5376a03d": "getProfitOrLoss(address,address,uint256,uint256)", +"5376f1a3": "withdrawFund(address)", "53770f9a": "isStateless()", "53775572": "_claimOreAndClear(uint32,uint8)", "53779c11": "claimDividendByIndex(address,uint256)", "5377f047": "allowedMultivests(address)", +"5378014f": "produceBlock(uint256,address,uint256)", +"53784869": "agrimmEBlock()", +"5378c917": "noOfInvestedUsers()", +"5378e99f": "Stopped(uint256)", "53790097": "Exhibition()", +"537946e9": "get_prf_reward()", "53799e7d": "frozenType(string)", "537a082c": "withdrawSaleRequest(uint256)", +"537a39bb": "totalTxs()", "537a924c": "Pay()", +"537aa33c": "userLockLength(address)", +"537aa868": "isValidNFT(address,uint256)", +"537af6c4": "HOUSE_EDGE_OF_TEN_THOUSAND()", "537afe94": "eastadscreditsx()", "537b9c93": "NotFomo3D()", "537bf9a3": "updatePermissionName(address,bytes32)", +"537c3d66": "lastOwnersAction(address)", "537ca660": "_setPetValue13(uint256)", +"537cd7be": "signs(address)", +"537db05f": "setPoolDollarPoints(uint256,uint256)", "537dbb80": "claimUserToken(address)", +"537dc21a": "epochSeniorAsset()", "537df3b6": "removeFromBlacklist(address)", +"537e7d61": "getEthReturnBonus(uint256)", +"537e9636": "MIN_XPER_AMOUNT_TO_PURCHASE_WIZARD()", +"537eccb0": "partialLiquidation(address,uint256,uint256,uint256)", "537f5312": "updateSymbol(string)", "537f74fc": "_transferFrom_byProxy(address,address,address,uint256,bytes)", +"537f9764": "auditToken(address)", "537fcd6b": "_computeAndSetBaseParameters16_18_22(uint256)", "537fdf59": "user_redeem()", +"53800009": "lastKnownBlockNumber()", "538082af": "UKG_FUND()", "53811553": "getCertificate(bytes32,bytes32,bytes32)", "53813af8": "getmy(address)", +"538140eb": "API_UpdateLatestSettTime(address)", "5381464c": "PRE_SALE_START_TIME()", +"5381615d": "STAGE_5_BONUS_RT()", +"53819833": "devFundDivRate()", "53819e85": "getTotalComission(address)", "53822cda": "createShortId(bytes32)", +"5382489b": "inBlocklist(address)", +"5383294a": "changeIterator(address)", +"538361a7": "sync(uint256,uint256)", "53844552": "addPayees(address[],uint256[])", "5384527a": "tokenResend()", "5384602d": "craetePartnerBytes(address,address)", "5384734e": "isConfirmedStackholder(uint256)", +"5384949d": "_becomeImplementation(address,address)", "53850db3": "getParticipantById(uint256)", +"53851372": "batchWithdraw(address[],address[],uint256[])", "538548c5": "recevedEthFromEvabot(address,uint256)", "538564de": "assegna_diritto_di_voto(address)", "5385726e": "maxTIPSupply()", +"5385c914": "refundAsset(bytes32)", +"538613b5": "totalDirectLifeTime(address)", +"538633df": "getPoolsLength(address,address)", +"53863613": "setDelegatedSigner(address)", "53865562": "CLOSING_TIME()", "5386b7ad": "dtTestWorldSnapshot(uint256)", "538739fa": "operatorManager(address[],uint8)", "538741c5": "getAllowedContracts()", +"5387614d": "LogMigration(address,address,uint256)", "5387a233": "feeLottery()", "538811cf": "hasAllocated()", "5388842c": "mintTicket(address,string)", +"5388aa9e": "setStartTheProject()", "53892496": "finney2LemoRate()", +"5389bd38": "viewNthInThisRound()", +"5389d836": "kunMax()", "538a289a": "getSandwichInfo(uint256)", "538a3f0e": "initializeFactory(address)", "538a849c": "newRound(uint256,uint256,uint256,uint256,uint256,bytes32,uint256)", +"538a85a1": "farm(uint256)", "538a8c21": "giveawayReserve()", +"538a942a": "causes(uint256)", +"538b5c98": "stakeList(address,uint256)", +"538b5d49": "plans(address,uint256)", "538b9618": "createElectionVerify(bytes32,bytes32[])", +"538ba4f9": "ZERO_ADDRESS()", "538c91b2": "validCandidate(string)", "538d1267": "Announcement()", "538df6f2": "claimedPrepaidUnits()", "538dfcac": "contributionRejected()", "538e0759": "refill()", "538e0ff4": "totUsers()", +"538e3af0": "setDelegation(uint256,uint256,address)", "538e8ae0": "assertEq19(bytes19,bytes19,bytes32)", "538eae06": "ZuperToken()", "538f5997": "getBalanceSize()", +"538f6afe": "addBorrowLog(address,uint256,string,string,bytes32)", +"538f9406": "updateState(uint256[],uint256[])", +"538fb4c7": "ecosystemFunds(uint256)", "538fb98c": "getCarProductCurrentPrice(uint32)", "53900bdd": "incirculation()", +"5391aafe": "initialize(address,address,address[],address[],uint256[],uint256,bool,uint256,string)", +"5391f483": "updateDepositId(uint256)", "5392279d": "CryptoWCRC(uint256,uint256,bool,address,address)", +"5392fb4e": "deletePoolAndProvider(bytes32)", +"53939373": "getVDVCount()", +"5393d71a": "setLists(address,address)", +"53940056": "syncUniswapPool()", "539407f6": "committeesNumber()", "53941a74": "addInviteId(uint256)", +"53945d7b": "uniV2PairAddress()", "5394772a": "MIN_BET_VALUE()", +"5394c671": "_dropPieMarket(address)", "5394e49e": "getRandomPosition(uint8,uint8)", +"53950e52": "incVersion()", +"53952687": "OpenAuctionStarted(uint256,uint256,address,uint256)", "53954574": "withDrawBack()", +"53958e56": "Lent(uint256,address,address)", +"539594e9": "getInitialArray(address)", +"53959ad0": "oat()", +"5395a17a": "investors_address_list(uint256)", +"5395cbd0": "InterestToken()", "5395dbb1": "createSchedule(address,uint256,uint256,uint256,uint256,uint256)", +"539687c7": "updateMatrixPrice(uint8,uint256)", "5397c83c": "distr0(address,uint256)", +"53986e75": "regulators(uint256)", +"53989c3c": "lockRevolution(string)", +"5398a96b": "select()", "53994d51": "ThreeDJSToken(uint256)", "53999040": "buyLandForCandy(uint256)", "53999339": "prepareLiquidityReserve()", +"53999cb7": "cancelAsDeployer()", +"539ad113": "uniswapUSDCforETH(uint256)", "539af982": "changeStartDate(string)", +"539b3cc9": "func_00D7()", "539b9648": "icoSmartcontract()", +"539c0da7": "_updateBalancesUntil(uint256)", "539c0f14": "deposit2()", +"539cd3b4": "tokensSequenceList(address,uint256)", +"539d1b36": "QuranStakeAmountbyAddress(address)", +"539dd9c1": "createMoneyPot(string,string,address,address[])", "539e2bfb": "secondChainedCallback(uint256)", +"539e6ded": "setHxbAddress(uint256)", "539f70d8": "setOperationState(uint8)", "539ff41a": "ADVISORS_WALLET()", "539ffb77": "cancelRedeem(uint256)", @@ -47985,62 +87844,114 @@ "53a023d1": "EUSBToken()", "53a04b05": "play(uint8)", "53a06609": "_incrementInventory(uint256,uint256)", +"53a0a0eb": "srmboost()", +"53a15edc": "setDeviationThreshold(uint256)", +"53a1991a": "getTopSmall(uint256)", +"53a1add4": "ETHAcceptor()", "53a1c51e": "getInitializeMarketValue()", +"53a25a1e": "isExcludedFromBBOX(address)", +"53a27943": "Pynths(bytes32)", +"53a29748": "changeTVault(address)", +"53a2a017": "fetchCoin(address,uint32,uint8)", +"53a36013": "setYEnabled(uint256,address)", "53a3b71e": "tossIntoTheFire()", "53a40850": "userHasPattern(address)", "53a454e0": "SubtractAmount(uint256)", +"53a469b3": "claimLoan(uint256)", "53a47bb7": "nominatedOwner()", +"53a4c31e": "_BURN()", "53a4c8a3": "TriggminePresale()", "53a4caee": "getMajorThreshold(address)", +"53a4f2c2": "addNewBoosterType(string,uint256,uint256)", "53a50f0f": "addDeal(uint256,uint256,string,string,uint256,bytes32)", +"53a58226": "buyAnimalsFromUser(uint256,uint256)", +"53a58de1": "deposits(uint256,address)", "53a5e2d9": "teamGrantsAmount()", "53a5e68f": "CircusToken(address)", "53a636dd": "updatePrice(uint256,uint256,string)", +"53a6bd44": "merchantDepositAddress(address)", "53a6e2c9": "Mantapjar()", +"53a6e2e6": "shoppingPoolInfo(uint256)", "53a73f6e": "setTotum(address)", +"53a7dbd4": "updateHA(address[],bool)", "53a8b307": "getObjective()", +"53a8d4ac": "CoinAgeRecordEvent(address,uint256,uint64)", +"53a8f1ec": "maxCurveDisagreement()", +"53a8faba": "upgradePartner()", "53a94aa6": "_computeNextSeedPrice(uint256,uint256)", "53a9698a": "isProviderFor(uint256,address)", "53a97873": "getPrice(bytes10)", "53a9fc9c": "ELVToken()", +"53aa3314": "FEE_PERCENT_X_100()", "53aa3f5e": "getUInt(bytes32,bytes32)", "53aa7dcd": "setCallerFee(uint256)", +"53aaa046": "defaultReferrerAddr()", +"53aaa63b": "referralRewards(address)", "53aaa63f": "collectBack2()", "53aab098": "addPriceFeed(uint256,uint256,uint256,uint256,bytes)", "53aab434": "buyIn()", "53aaef7d": "weiToTokens(uint256)", "53aaf7c7": "OperatorProductCommissionChanged(uint256)", +"53ab5352": "mintCustomTokenFromL1(address,address,address,uint256,bytes)", +"53ab658e": "requestCreateOrder_ETH_ETH(uint256[])", +"53ab9d87": "SubmitClaim(address,uint256,uint256)", "53abf7f4": "parseTrade(bytes)", +"53ac076c": "setCageSplit(uint256)", "53ac36f4": "DropReward()", +"53ac9912": "juniorMemberlist()", "53acae4a": "RANGESTART_4()", "53acb23f": "unlockPriceChange()", +"53ad42ef": "bounty(address,uint256)", +"53ad45b8": "msbankPeriod()", "53adce21": "getGroup(address)", "53ae8de6": "modify_Presale1StartDate(uint256)", "53af5d10": "closingAddress()", "53afda90": "initDiscounts(uint256[],uint256[])", +"53b081e1": "approve_386(address,uint256)", +"53b0ab33": "GetInfo(address)", "53b0b620": "allocateBid1(address,bytes32)", +"53b13102": "updateDistanceRun(uint256,uint256)", "53b15f31": "get_asset_details(bytes32)", "53b1b49b": "Human()", +"53b1e097": "addContractAddress(string,address)", "53b239c7": "setPoWtfContract(address)", "53b2dd41": "WGCToken()", +"53b37a04": "teamVestingSupplyPerTime()", "53b382ea": "manuallyEnded()", +"53b4af0f": "unearn()", "53b5015c": "getClientSupply(address)", "53b5306b": "getUnfreezingPrice(uint256)", "53b54f5e": "transferWithoutDecimals(address,uint256)", "53b5b427": "team4LockEndTime()", "53b5b50a": "publish(bytes32,string,bytes32)", +"53b609b5": "getAmountIn(address,address,uint256)", "53b64b0b": "setNumDepositsSigned(bytes32,uint256)", +"53b65005": "testDataTypeStaticArrayAddress(uint256)", +"53b66864": "transfer_Multi(address,address,uint256)", +"53b67363": "bigPayDayPool()", "53b6f766": "addTotalIndividualWeiAmount(address,uint256)", +"53b71a2a": "doTokenSpend(address,address,uint256)", +"53b7604e": "BeerOrdered(address,uint256)", "53b7a59b": "destinationWallet()", +"53b7a712": "sellCompleteSetsForTrade(address,uint256,uint256,address,address,address,address,uint256,address,bytes32)", "53b7b2e9": "cEthereumlotteryNet(bytes)", +"53b7f5d1": "set10Allowed(uint256,bool)", "53b86342": "withdrawOwnersMoney()", "53b8e278": "upgradedContract()", "53b90b5b": "addWalletEmail(address,string)", "53b93358": "_getPoS(address)", +"53b9a99f": "totalCommited()", +"53b9c3f3": "BALANCER_SwapTokensForEth(address,uint256,uint256,address)", +"53b9ed17": "disableTokens(address[])", "53ba11d0": "icoWalletAddress()", +"53ba3d43": "cardsDivRate()", +"53ba9c2f": "getPixel(uint16,uint16)", "53babaf9": "processStellarReward()", "53bad0b9": "boschcoin()", +"53bae5f7": "isPendingModule(address)", +"53bafcc1": "getDsTacGia()", "53bb2eb6": "buyOffer(uint256,uint256,address,bytes32)", +"53bc03e3": "LogFinalized()", "53bc147e": "lastKickoffDateBuffer()", "53bc1c12": "getJobState(uint256)", "53bc1d9b": "ONTOPToken(uint256,string,string)", @@ -48051,54 +87962,97 @@ "53bd755a": "__setTokenPrice(uint256)", "53bd8bdb": "isRequestExecutable(uint32)", "53beb1f8": "checkHalfLife()", +"53bec5d3": "recover(bytes32,uint8,bytes32,bytes32,uint256,bytes32)", +"53bf5af4": "endCrowdSaleRoundTwo()", "53bfd3d0": "getUserTearAward(address,uint256,uint256)", "53c048ce": "TICToken()", "53c06966": "startMining(address)", +"53c08ea2": "foundersPercentage()", +"53c11f99": "afterAgreementTerminated(address,address,bytes32,bytes,bytes,bytes)", "53c194af": "createIco(uint256,uint256,uint256,uint256,uint256,address)", "53c1b31f": "MooToken(uint256,string,string)", +"53c1d4cb": "sign(bytes16)", +"53c210eb": "expectedDebtMissmatch()", "53c24064": "EasyMineTokenWallet()", "53c2828f": "rentalBalanceRemaining()", +"53c2ddf1": "approveRouter(address,address,uint256)", +"53c2e414": "systemWithdraw(address,address)", "53c2e8ab": "FacebookCoin()", "53c3419b": "bet(uint256,uint256,uint256,uint256,uint256,uint256)", +"53c3492b": "refund(address,uint256,uint256,uint256,address,address,uint256)", "53c37276": "frozenDaysForPreICO()", "53c3a57d": "recalcFlags()", +"53c3b40c": "userIDToAddress(uint256)", "53c3cc1f": "ResumeEmergencyStop()", "53c3fe8a": "hasICOClosed()", "53c4aeac": "crowsaleSlots(uint256)", "53c549da": "LemonContract()", +"53c6113b": "customerDataString()", "53c64fbc": "peekQueue()", "53c66d90": "YEEToken()", "53c7186c": "test_token_creation()", +"53c7451a": "WhitelistTransferred(address,address)", +"53c76e13": "_totalRewardToken()", "53c7801c": "second_round_start()", "53c8388e": "updateMetadata(uint256,string)", "53c84526": "setSmartAffiliateContract(address)", "53c86cfc": "UvoCash()", +"53c8b648": "getPaymentsRemaining()", "53c9843f": "preIcoCashedOut()", +"53c99b54": "TokenPrice(address,uint256,uint256,uint256,uint256,uint256)", +"53c9a99b": "_antibot()", +"53c9e62e": "regUser(address,uint256)", "53ca1aa8": "GOLD_TO_COLLECT_1SWORD()", +"53ca8115": "Verifier()", +"53ca9f24": "rebasePaused()", +"53cad7d9": "ACTIVATE_STAKE()", "53cae7b8": "distributeAirdropMultiPresale(address[],uint256[],uint256[])", "53caf582": "testThrowSetNotUpdatableNotOwner()", "53cb26c6": "preciseDecimalToDecimal(uint256)", "53cb430f": "setoldtoken(address)", +"53cb9293": "factProviders(address)", +"53cc2634": "UnlockTokens()", "53cc2fae": "unFreezeAccount(address)", "53cc3e7a": "sysPrice()", +"53cd3fcd": "chkJudgeList(uint256)", "53ce0a71": "USACoin()", +"53ce30cc": "getWeeklyStaker(address)", +"53ce36a9": "pool3()", "53ce7de9": "participantIndex()", "53ce910e": "getSafeKey(uint256)", "53cea153": "claimableOwnerEth(uint256)", +"53ceb01c": "underlyingUnit()", "53ceee6c": "icoBuy()", "53cf4d2b": "indexshow(address)", "53cf51bc": "rewardSent()", +"53cfd7f6": "uniLPComponentToken0()", "53cfdda3": "setMonthlyPrice(uint256)", +"53d05302": "setGradeCountLimit(uint256,uint256)", +"53d0cd31": "exchangeFreezeTokens(uint8,address,uint256)", "53d0f255": "STEP()", "53d142a7": "setTokenInfo(uint16,string,address,uint64,uint256)", +"53d17a43": "delegateStake(address,bytes32,uint256)", +"53d2341d": "exchangeSystemAddress()", "53d2822d": "isVesterManager(address)", +"53d317f8": "updateTokenFee(uint256,uint256)", +"53d325ca": "transferCombCardOwnership(address)", +"53d35c5c": "top3EarliestRunnersFinishedEachDistanceType()", "53d3e848": "abortICO()", "53d3ed60": "isBotAt(address,uint64)", "53d3eeee": "profitsRatePercent()", "53d413c5": "removeKey(bytes32,uint256)", +"53d46778": "m_lastDividends(address)", +"53d4886b": "testHeapSortFunction()", +"53d4a5a3": "addRaffle(uint256[],uint256,uint256)", +"53d4e7f5": "getDepositRates()", "53d590bc": "softUndelete(bytes32)", +"53d5911b": "bonusLevel3()", +"53d5ec94": "partnerPercent()", +"53d64f56": "PlaceSellFciOrder(address,uint256,uint256)", +"53d683d6": "debugPrice(string)", "53d69b07": "setPreSaleStartAndEndTime(uint256,uint256)", "53d6fd59": "setWhitelist(address,bool)", +"53d700e5": "tell()", "53d70700": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "53d736ed": "CreateCard(uint256,string,string,string,string)", "53d73718": "voting_info()", @@ -48106,106 +88060,212 @@ "53d797c9": "GetGoodsInfo(uint32)", "53d7edbc": "_crowdsalePaused()", "53d838b6": "getMatchAwayPlayers(uint256)", +"53d878a6": "LogTokenSymbolChange(address,string,string)", +"53d9133e": "addToSupportedAssets(bytes32)", "53d97e65": "setPrizes(uint32[])", +"53d9811c": "secondarySetup(uint256,uint256,uint256)", "53d99c2a": "tokenToEthRate()", "53d9d910": "create(address[],uint256,uint256)", +"53d9fa95": "modifyBaseUrl(string)", +"53da026a": "getAvailableEthLiquidity()", "53da0c7e": "bonusesForAmountsCount()", "53da4859": "ACT()", +"53da9c46": "salesStartTimeStamp()", "53dad947": "oraclizeContract()", "53db1deb": "DredgrSwap()", +"53db23db": "PRE_ICO_POOL_AMOUNT()", "53db5fdb": "getCreatorTAOSettingDeprecation(bytes32)", "53db6b21": "AUMToken()", +"53dba45d": "addBulkPurchasers(address[],uint256[])", "53dba812": "Horizon0x()", +"53dbaf8a": "reclaimBLWStakingReward(uint256)", +"53dc2159": "collectible(uint256)", "53dc4cf1": "Greedy()", +"53dc840b": "whiteLists(address)", +"53dcca8b": "SendBouns(uint256)", +"53dd16a2": "StakeStartTime(uint256)", "53dd1902": "strcat(bytes,string,bytes,string)", +"53dd4bbc": "approveUnlimited(address)", +"53dd5876": "WinningBidLog(uint256,uint256,address,uint256,string)", "53dd8881": "tweakDailyDividends(uint256,uint256)", "53de63e3": "isMasterWallet(address)", +"53deaa9a": "DiscountPhaseAdded(uint256,string,uint8,uint256,uint256,uint256,address)", +"53df1812": "last_investor()", +"53df184d": "batchMint(uint8[],uint256[])", +"53df5c7c": "lockBaseURI()", +"53dfc4d0": "add_hunter()", +"53e03a9c": "activeReferralOwner(address)", +"53e06571": "plan()", "53e0b78f": "LandClaimContractSet(address)", "53e0c46d": "nuoyilian(uint256,string,uint8,string)", "53e1509c": "addExchangePartnerTargetAddress(address)", "53e1a169": "doPayment(address)", +"53e1cb27": "createVault(address,address,bool)", +"53e1d02f": "referenceBonus()", "53e1ead9": "companyAddress()", "53e215f4": "getNodeInfo(uint256)", +"53e297ad": "sm_charityShare()", +"53e385b1": "nftValues(bytes32)", +"53e389bb": "validateUint128(uint256)", "53e3926c": "compareNums()", +"53e3e81f": "setRewardsMultiplier(address,uint256,uint32)", +"53e42eb9": "ownerAllowDirectBuy()", +"53e4612e": "updateUser(uint256,string,string,uint256,string)", +"53e4c84c": "Nuked(address,uint256,uint256,uint256)", "53e4d8ef": "admin_set_withdrawable(bool)", "53e4e607": "get_parameters()", +"53e4f86d": "stakeMyToken(address,uint256)", +"53e52709": "processReferralBonuses(uint256,uint256)", "53e551ff": "createContractItem(string,bytes32,address,address)", +"53e5d935": "proxyCreationCode()", +"53e5e725": "availableSavings(uint256)", "53e68147": "emissionInternal(uint256)", "53e68720": "sendToBeneficiary()", "53e7168b": "setUInt(bytes32,bytes32,uint256)", +"53e73547": "tima(uint256)", +"53e736ba": "unsmashed()", +"53e79c71": "randomRewardAmount()", "53e7d39c": "batchTtransferEther(address[],uint256[])", "53e7daf2": "NewStandardToken(uint256,string,uint8,string)", +"53e7f069": "current_bounty()", "53e86a88": "contributorsTotal()", +"53e871ce": "MarkAppraised()", "53e8c040": "Winn()", +"53e8d052": "resourceType(uint256,uint256)", "53e9574a": "FOUNDERS_TOKENS_PERCENT()", "53e9dcae": "attributeType(uint256)", +"53e9e7e8": "initialize(address,address,uint256,uint256,address,uint256,address,address,uint256,uint256)", "53ea04fe": "AgencyLock2()", +"53eb3167": "PozFee()", "53ebf6bd": "setContractLock(bool)", "53ecbdd2": "getTankType(uint256)", +"53ed45b3": "balanceReal()", "53ed5143": "getAll()", "53ed589b": "LogNewProvider(address,string,bytes32)", +"53ed9cd4": "atx2HexWithBonus(uint256,uint256)", +"53edd8f7": "releaseToken(address,uint256)", +"53ee21bf": "WPDailyBal(address,uint8)", "53ee9114": "PassDao()", "53eeb430": "allPurchasedSprites(uint256)", "53ef5e03": "amount5()", "53ef6781": "_start()", "53efb13f": "setContractDurationInDays(uint16)", +"53f064c9": "announceManagerFeeIncrease(uint256)", "53f072e3": "numApis()", "53f11cb3": "asm_clean(uint256,uint256)", +"53f173f3": "AirdropETHByOwner(address[],uint256[])", +"53f217d5": "getBitmap(string)", "53f24e33": "isUpgradeInterface()", "53f25ca6": "isNameEmpty()", +"53f28ad9": "_end_time()", "53f3807c": "STATE_PLAYING()", +"53f3eb8f": "submitCommitment(bytes32)", "53f4a519": "queryResource()", "53f4b36f": "calcFin()", +"53f4d24b": "EventNewChildItem(bytes32,address,uint256)", "53f4db01": "totalWeiRaised()", +"53f4fe1c": "mysuns(address,uint256)", +"53f51d90": "AccessManager(address,address)", "53f63bb3": "setPreSaleFinishDate(uint256)", "53f65cf7": "forceRecoverCollateral(bytes32,address)", "53f6740d": "setKpopItemContractAddress(address,address)", +"53f6bc8b": "upgrade(address,address,address,address)", "53f6ef28": "EUFBToken()", "53f6f01f": "ADVISOR_STAKE_TWO()", "53f754e0": "tokensDue(uint256)", "53f818d6": "checkBetValue()", "53f81ef8": "getSubscriptionTo(bytes32)", +"53f865f3": "SNX_TOKEN_ADDRESS()", "53f8e415": "SetDonateStep(uint256)", "53f92e49": "UnableToRejectPayment(address,bytes8,uint256)", "53f95cc6": "THIRD_TIER_DISCOUNT()", +"53f9963f": "findBurnAmount(uint256,uint256)", "53f9ca96": "CCC(uint256,string,string)", "53f9ec67": "setIsInvalid(bool)", +"53f9f6ef": "withdrawRequestConfirmer(uint256,address)", +"53fa0410": "totalTokensForTokenSale()", +"53fa2eb7": "claimStakerReward(address,uint256)", +"53fa47ce": "doHal9kStaking(address,uint256,uint256)", "53faa9a9": "changeRecovery(address,address)", "53fafd15": "makeTransfer(uint256)", +"53fb6c5c": "rewardClaimed(uint256,address)", "53fb9233": "checkDocument(string)", +"53fbb096": "pixelRGB(uint16,uint16)", "53fc3923": "safeAdd40(uint40,uint40)", "53fc79d1": "setTargetDiscountValue5(uint256)", +"53fcb2f3": "topupRewardBucket(uint256)", "53fd0670": "sellArtworks(uint32[])", +"53fd1728": "registrationExt(address,uint256,bytes,uint256)", +"53fdfab0": "updateEpoch(uint256,uint256)", "53fe12b0": "setusertoken(address)", "53fe189c": "setAElfMultisig(address)", +"53fe56f2": "gasRefunds(bytes32,uint256)", "53fe7a59": "PURCHASER_MAX_TOKEN_CAP_DAY1()", +"53fec25d": "setG(address,uint256,uint256)", "53fefd7d": "changeMaxDeposit(uint256)", +"53ff0e09": "removeTokenSwap(uint256)", "53ff7766": "_escrowTheAOPaymentEarning(bytes32,uint256,uint256,uint256)", +"53ff87ac": "getPastContracts()", +"53ff8958": "getHorseIndex(uint256)", "53ffab1d": "disableconstruction()", "53ffe1f9": "setRentalPricePerSecond(uint256)", +"5400674b": "account_data(address)", +"54007d4b": "regPremium(uint256)", "5400a93e": "payoutMatch(uint256,uint8,bool)", +"5400c14c": "comp(uint256,address)", "54019949": "getShopOwnerCategorizedProducts(string,string)", +"5401b3d2": "endsOn()", +"540234ba": "liftoffEngine()", "540273bb": "changejp1(address)", +"5402a0e1": "updatePackWithId(uint256,uint256,uint256,uint256,uint256,uint256)", +"5402e07f": "updateMoleculeVault(address)", "54032862": "ZapCloud()", +"540379e5": "approve_451(address,uint256)", +"54037f76": "burnPynthsToTarget()", +"540385a3": "redemptionRate()", "5403a0e5": "getTeamToken()", +"540410e5": "intnum(uint8)", +"540455d4": "setTokenJUSReward(address)", +"54047e35": "startChangeDepositorPercent(uint256)", "5404bbf7": "getEntropy()", +"540503eb": "uniV2Address()", +"54057463": "_reflectionTotal()", "54057aa6": "setPriceClaim(uint256)", "5405e4f4": "SMILE()", "54063f4e": "sendETHfromContract()", +"5406c788": "tokensSoldPreIco()", +"5406c9cb": "maxBnbLimit()", "54070f83": "getTournamentAdmissionBlock()", +"5407218e": "rewardIndirectRefPct()", +"540779aa": "levelPricesMigratePool(uint256)", +"5407ca67": "lastStateId()", +"5407f5cb": "Get_Items(string)", +"5408b440": "providerPools(address)", "54091a20": "removeFromTransactionDisallowedList(address)", +"540943f1": "InvalidFunctionSelectorError(bytes4)", +"5409491a": "initial_A()", +"5409ea56": "close_queries(bytes32)", +"540a3b9f": "unlockMintDropWithdraw()", "540a5e4e": "cs()", "540a9db3": "getVestingAccount(address)", +"540acabc": "VAULT_ID()", "540ae26f": "MassERC20Sender(address)", +"540af0fc": "FailOverStakeContractSet(address)", "540b2255": "_invest(address,address)", "540b34a0": "listMOC()", +"540c1e97": "checkAddedPools(address)", +"540c2d53": "validPops(address)", +"540c6de4": "IssueTokens(address,uint256,uint256,uint256)", "540c755f": "ethWithdraw()", "540c97c8": "getAllRevisionIpfsHashes(bytes20)", "540cafe0": "storeHeaderWithFee(bytes,int256,address)", "540cc484": "getPreSaleTokensSold()", +"540cf01a": "getCommunityReleasable()", "540cf75e": "getPendingPresaleTokens(address)", "540d888e": "SendTaxFee(address,address,address,uint256)", "540d915e": "serviceGroupChange(address,uint8)", +"540dbf34": "_blackListDapp(address)", +"540e2617": "setMember(string,address)", "540e2f5b": "customTokenDefrosting(address[])", "540ea6db": "getuseraddress(uint256)", "540f3d6d": "feeProcess()", @@ -48213,98 +88273,170 @@ "540fd4df": "addressFundFoundation()", "54105974": "AdHiveToken(address,string,string,uint256,uint256)", "54107401": "declareLove(string,string)", +"5410913c": "addToAdmin(address)", "5410ac50": "raiseCap(uint256)", "5411029d": "_validSignature(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "54114dee": "Caps()", +"54123c12": "getSellRate(address,address,uint256,bytes)", +"541240c2": "_calcLbtLeverage(uint256,uint256,int256)", "5412af17": "Watsondog()", +"5412e4b7": "LOOPRING_PROTOCOL()", +"54130c85": "NewStage(uint64)", +"54133307": "ROUND_SIZE()", "541334f6": "isUnicornContract(address)", +"5413713a": "withdrawRaisedFunds()", +"54137e49": "withdrawTRC10(uint256,uint256)", +"54139126": "RemoveSupportedToken(address)", "5413d6f4": "ImmlaToken(address)", +"5413e192": "calcMint1t1FRAX(uint256,uint256)", +"54142b7c": "ContractDeauthorized(address)", "54147ecb": "withdrawForTokens(address)", "54149777": "getAirDropedToday()", "54149975": "DeleteToken()", "54151bc3": "createPostboyAccount(uint256,uint256,bytes16)", "54153f91": "getArrIntField1()", +"541582fd": "snipPerBlock()", +"54158fa5": "parseEventResult(bytes)", "5415b8f8": "setAssetFeesList(address[],uint256[],uint256[])", "5415c86e": "chngReNo(uint256)", "5415f3a7": "buyStudioStake(address,uint256)", +"54163fe0": "freezeOneAccount(address,bool)", +"54165261": "multisend(address[32],uint256)", "5416707c": "getEthOfferAmount(uint256)", "541694cf": "get_exchange(uint32)", "5416995e": "TGCToken()", "5416a724": "isUserKYCed(address)", +"5417240c": "highPriceN()", "54186bab": "SolarDaoToken()", "5418796c": "pubKeyToEthereumAddress(bytes)", "5418bea9": "getCountReadyPlayerByTrackId(uint256)", "5418ecdd": "setTokenHash(uint256,uint256)", "54192046": "setAuctionStart(address,address,uint256)", +"54198ce9": "profitOf(address)", +"54199536": "SetBonusValue(uint256)", "541a01ed": "presaleTokenVault()", "541a3656": "optionOrderCancelled(bytes32)", "541ac2b3": "locked_since()", +"541ad383": "myTotalReferrals()", "541aea0f": "put(uint256,uint256)", "541afaf6": "getWarriorDistributedRandom(uint256)", "541b2173": "IKT(uint256,string,uint8,string)", "541bb358": "setRarityTargetValue(uint8,uint256)", +"541bcb76": "UNI()", +"541bdfb1": "setPosition(int24,int24,int128)", "541c15eb": "changeLock(address,uint256,uint256)", +"541cd468": "setModule(bytes32,address)", +"541d1bcc": "getPossibleProposalStateKey(uint256)", +"541d5548": "isRelayer(address)", "541d920c": "commit(bytes,string)", "541dc9ba": "redeemPreSale(address,address)", +"541def9d": "testFunc(address)", +"541e15b6": "MIN_REMAINING_ORDER_RATIO()", "541e22ea": "sendRefBonuses()", "541e34a7": "QuantumPay()", +"541e3f59": "addLockType(bytes1,uint256)", +"541e771d": "records(string)", "541ee050": "bonusEnd10()", +"541f4d66": "tokenAcount()", "541f631a": "transferInternal(address,uint256)", +"541ffb95": "layhetvdv()", +"54202c4e": "WHITELIST_ADMIN_ROLE()", "54203101": "CTWorld()", "54204ad4": "triple()", +"5420b4b1": "totalTaxAmount()", +"54213983": "investment_perc()", "54215767": "upgradeTradeProfileImplementation(address)", "54217c21": "Q2(address)", "5421b037": "getDepositTransaction(address,uint256)", +"5422224e": "addAuth(address)", "542241d0": "fifthExtendedBonusSalesEnds()", +"5422bdb5": "dropTokens(address[],uint256[])", "5422cf34": "sellPop(uint256,uint256)", +"542360fd": "setTokensClaimable(bool)", "54238645": "closeICO()", +"54239777": "personIndexToOwnerGen1(uint256)", "5423a05d": "GoToken(address,address,address,address,uint256)", +"5423fa64": "SponsorAddresses(uint256)", "54244518": "coinIssuedRewardPool()", +"5424a4af": "setDogeTokenAddress(address)", +"5424f68d": "disabledList(bytes4)", "54260cb6": "getBuyLandInfo(address,uint256)", +"54269ff7": "percentSell()", +"54275324": "getClaimVote(uint256,int8)", "5427789c": "MINT_AMOUNT()", "54279bdd": "createAuction(uint256,uint256,address)", "5427e4e1": "APS(string,string,uint256)", "5427e8fa": "getTicketIsPaid(uint256)", "54280260": "balancesLocked()", +"5428368f": "debtOrderCancelled(bytes32)", +"54287383": "addUserStrategyDeposit(uint256)", "54290065": "getAsksCount()", +"542925b9": "typeCount(uint256)", "54292c53": "rewardAvailableCurrentDistribution()", +"54296154": "flashLoan(address[],uint256[],uint256[],bytes)", "5429a417": "getBasicBallotsPer30Days()", "5429d4b5": "mitfwdToken()", +"5429dd69": "ownersContract()", +"5429e0cc": "CheckStakeDetails()", "542a3368": "randomly_select_index(uint256[])", +"542a719a": "gstDeploy(bytes)", "542a90bd": "remove_quote(bytes32,bytes32)", "542aa99f": "stopSetup()", "542aee37": "getTotalTonsClaimed()", +"542b1c5d": "voteReward()", "542b5111": "MANXERC20()", +"542b57d2": "IPOpurchases(uint256,address)", "542b9a40": "ProjectOwner_DisableProject(int256)", +"542ba298": "mintingForBeneficiaryPct()", +"542bd448": "mintTeamAndAdvisorsYear1Part12(uint256)", "542bdb4d": "testMathOverloaded()", "542bee82": "addGlobalBlockValueBalance(uint256)", +"542c3f58": "devVestingAddr()", +"542c4f14": "RaffleNo()", "542c8f37": "isOnSell(uint256)", "542cad3d": "setCopaCoreAddress(address)", "542cae98": "checkGameOverByUser()", "542ccddb": "claimRoundReward(uint16,address)", +"542cdc1b": "checkWaitingPeriod(address,address,uint8)", +"542cdf02": "ZapOutWithPermit(address,address,uint256,uint256,bytes,address[],bytes,bytes,address)", "542ceaad": "countRequest()", +"542cecdb": "getMsgForSign(uint256,uint256,uint256,address)", "542cfdf0": "extendItem(address,uint256)", "542d397c": "tokensBlocked()", "542d3e34": "NewImage(uint256,uint8,uint8,uint8,uint8,string,string,string)", "542d8dc0": "Mag50()", "542de573": "BITHALALToken()", "542df7c7": "getGameConstants()", +"542e198c": "invest_bank()", "542e8618": "dynamic_profits(address)", "542e898e": "STC()", "542e9b18": "logFeeWindowBurned(address,address,uint256)", +"542f0ada": "MultisigInitialised(bytes32)", +"542f76a6": "primaryTaxReceiver()", "542fce21": "KergToken(uint256,string,uint8,string)", "542fd556": "getMakerProjects(address)", "542fe6c2": "withdrawFromAbandoned()", +"543068f0": "minLenderProfit(address)", "54311422": "giveTokens(uint256)", "54313b22": "tonextround()", +"54314c95": "getNextKeyRingAndSmartWallet(address)", +"54314d7c": "getGreenGene(uint256)", +"54317740": "expansionPercentStakePool()", +"543196eb": "callCodeHash(address)", +"5431c29a": "getLastString()", +"5431c94e": "rescueTokens(address,address)", "5431dfb8": "stage3Sale()", "5432202a": "isServiceAccount()", +"543319f6": "WrapperChanged(address,address)", +"543360e9": "startSwap(uint256,uint256,uint256)", "54353f2f": "example()", "543577f3": "LandManagement(address)", "543594b8": "verifySignature(uint8,bytes32,bytes32,address,bytes32)", "5435a774": "Permissioned()", "5435bac8": "itemsForSaleLimit(uint256,uint256)", "5435dbd4": "CPF()", +"5435e4cd": "updateWithdrawFee(uint256,uint256)", +"5435ff50": "beneficiaryForTokenTimeLock()", "54361699": "registerContributorPool(address,uint256,int256)", "54367179": "updateRealWorldPlayer(uint32,uint128,uint64,uint32,bool,bool)", "5436c163": "createVillain(string,uint256,uint256,uint256)", @@ -48312,9 +88444,13 @@ "54370a8d": "QueryMyBonus(address)", "5437988d": "setVerifier(address)", "5437b39b": "hasUnprocessedDividends(address)", +"5437b67c": "signatureTimeout()", "5437e401": "withdraw(address,bool)", "5437f098": "changeStartBlock(uint256)", +"5437fc7a": "getSAFU()", +"54382d31": "changeGovNFT(address)", "54385526": "setStatus(uint8,uint8,string)", +"54387706": "sosusu(uint256)", "5438a64e": "getContractSigners(bytes32)", "5438c5d2": "hasListener()", "54392a96": "simTotalObligation(bytes)", @@ -48322,85 +88458,178 @@ "5439c6a1": "nonFungibleByIndex(uint256,uint128)", "5439e185": "buyTreeTokens(address,uint256)", "5439f5d2": "TimeToken(uint256,string,uint8,string)", +"543a0f3b": "sashimiRate()", "543a3d62": "token_call()", +"543a4ec0": "newIpfsAddressAdded(bytes32,string)", "543a86f6": "dblShaFlip(bytes)", "543a9ce4": "setAStore(string,address)", "543ad1df": "MIN_TIMEOUT()", "543b4f6f": "endTimeTwo()", +"543b54b6": "SENIOR_TOKEN()", "543ba50a": "FundsDeposited(address,uint256)", +"543ba602": "CLAIMABLE_TOKEN_LIMIT()", +"543d9881": "ExchangeStarted()", +"543db406": "depositeforGameWallet(uint256)", +"543e062c": "tokenOwners(uint256,uint256)", "543e0a7b": "stringsEqual(string)", "543e10b4": "contributeTo(address,uint256)", "543e4dcd": "testFailUntrustedTransferFrom()", +"543e91ba": "_set_cashiers(uint256,address)", "543e9954": "freeBalanceOf(address)", "543e9c10": "containsAdmin(address)", +"543eebd1": "infect()", "543f8101": "activateOversightAddress(address)", +"543fcf03": "_tokenAddress()", +"543fd313": "earnings(address)", "54400c60": "right19(uint256)", +"544051aa": "transferTokenTestValueRandomIdBigInteger(address)", "544082e5": "authorShare()", "54409599": "SHIVToken()", "54413d29": "withdrawAllForAccount(address,address[])", +"5441c2b6": "getBalance(uint32,address)", +"5441eb5a": "getmatchBasic(uint256)", +"54439ad0": "getTokenStakingEndTimeById(uint256)", +"5443bad0": "getStakedAtBlockLP(address)", +"5443fed0": "peekTokenURI(uint256)", +"544438e8": "oneETHToDollarPrice()", "544447bb": "unicornToken()", +"5444ca75": "getTotalSumAssuredSC(address,bytes4)", +"5444e738": "setNarcosCoreAddress(address)", +"544584bb": "ksaver()", "5445cbf3": "assetsCertified()", "5445e38c": "_isCycleValid(uint256)", +"54461c94": "eth2etokens2contract(uint256,address[])", "5446b604": "unlockMintDate2()", +"5446d334": "approve_544(address,uint256)", +"5446d64d": "AddedNewOwner(address)", "5446d669": "ShitToken()", "544736e6": "isStarted()", +"54473c46": "pendingICE(uint256,address)", "544743d6": "getCharAt(uint256)", "5447ad71": "newGame(bytes32)", "5447b86f": "ipart(int256)", "5447c05d": "updateTemplateReputation(address,uint8)", +"5447f1c5": "grantLegalToken(address)", "5447fab0": "serviceController()", +"54486349": "DividendsPayment(uint256,address)", +"5448a0d5": "CreatePool(address,uint256,uint256,uint256,uint256,bool,address,bool,uint256)", "5448c674": "IBCA()", +"5448d425": "verifiedAccount(address)", +"5448e301": "init(uint16,uint16,uint256)", +"544952f9": "sellShitcoin(address,uint256,uint256,string)", +"5449aed5": "getDisputeWindowStartTimeAndDuration(uint256,bool)", +"5449d374": "getEstimatedETHforDAI(uint256,address[])", "544a026b": "protectCharacter(uint32,uint8)", +"544a288e": "_setReserveToken(address,address)", "544aa2cf": "LOG_BetLost(address,uint256,uint256)", +"544b08b5": "init(address,address,address,address,address,uint256)", "544b1b24": "onlyHarvest(uint256)", +"544b255a": "investorNum()", +"544b5f07": "RpunkBids(uint256)", "544b9606": "ICO_BONUS2_SLGN_LESS()", "544be427": "finalizeBurnUtility(address,uint256)", "544c465c": "calcReward(uint256)", +"544caa56": "sortTokens(address,address)", +"544cb1ce": "balanceOfyvm3CRVinm3CRV()", "544cdbda": "send_to_owner(address,uint256,uint32)", +"544ce5b3": "performStaking(uint256,uint256)", +"544cf2aa": "autoDeltaBalance(uint256)", "544cfead": "reignBlocks()", "544d6544": "transferPrivateSale(address,uint256)", +"544d84c0": "allocationDelay()", +"544d8564": "getDelegate(address)", "544d8ca2": "registerLog(string,string,uint256)", "544d9723": "itemAt(uint256)", +"544e3a5b": "approveStakingContract(bool)", +"544ef03d": "getUserCoverLength(address)", +"544f0b42": "isRewardWinner(address)", "544f113b": "startingAmount()", "544f43e3": "getRatePlansOfVendor(uint256,uint256,uint256,bool)", +"544f6793": "toORO(address,uint256)", +"544fd97e": "OnConstructed(address,uint256,uint256)", "544ffc9c": "proposalVotes(uint256)", +"54505517": "COLLATERAL_RATIO_PAUSER()", +"54509414": "transferWithData(address,uint256,uint256)", +"5450adca": "proposalCategory()", "5451436d": "EthLyte()", +"54517053": "safeFund(address,uint256)", "54517ddf": "transferFromByCrowdsale(address,address,uint256)", +"54518b1a": "WITHDRAWAL_MAX()", "5451a1e1": "addressFounders()", "5451cbcc": "ZEToken()", "5451fb26": "increaseLoanOnBehalfOf(address,bytes32,uint256,uint256)", +"545204fe": "setSubscriptionContract(address)", +"54523249": "openLockETHAndGenerateDebt(address,address,address,address,bytes32,uint256)", "5452644d": "createNewDynamicPaymentAddress(uint256,address)", "5452b7d4": "getReservedTokens(uint256)", "545305fb": "finalizeCrowdsaleAndToken()", "5453095b": "buyMNC(string)", +"54531014": "setWhitelistForBulk(address[],bool)", "545342a0": "ZaiZaiCoin()", +"54534afd": "TransferAnimalToAnotherUser5(uint256,address)", +"545350f4": "rewardTaskFinish(uint256)", "5453f4e7": "createTokenUri(address,address,address,address,address,address,address,uint256)", +"545421fe": "getWithdrawAmount(address,uint256,uint256)", +"54545bfb": "MIN_PURCHASE_AMOUNT()", "545464ff": "ConsentFactory(string,address)", +"545484ee": "advanceAndRedeemMax()", +"5454b842": "addCpPoolInfo(address,address,int256,address,address)", +"5454cf9a": "tulipIdToApprovedTranserAddress(uint256)", "5454d6e0": "isMilestonesSetted()", "5454fb7c": "ico1Sold()", "54557250": "getAgentIdByPositionBet(uint256)", +"545572da": "_calculateDROI(uint256)", +"54558d6c": "getTokenBalanceOfAddrV2(address,address)", "545599ff": "END_DATE()", "5455e1b8": "setAddressesThatCanList(bool,address[])", +"5456500a": "isSupplyLessThan10Thousand()", +"54566b2b": "allprizeused()", "54567923": "addServiceReward(uint256)", "54569a86": "Needit()", +"5456bf13": "log2(uint256)", "5456d8d2": "removeSpecialBonusConditions(address)", +"54571bac": "StakingToken(uint256,uint256)", "54573835": "withdrawEtherInternal(address,address,uint256)", "54573cfc": "setRule(uint256,uint256,uint256,uint256)", +"5457487a": "storeInformation(uint256,string)", +"54574d3d": "mintTasks(uint256)", +"54575099": "GandhijiMainContract()", +"54575af4": "governanceRecoverUnsupported(address,uint256,address)", +"5457a5c8": "getProvenanceEntry(bytes32)", +"5457eceb": "setOlyAddress(address)", +"54581984": "meloettaPerBlock()", "545842ff": "redeemLevAndFeeToStakers(address[])", +"5458524b": "getBlockCurrent()", +"54588637": "oneTokenOracle()", +"54589305": "setApwr(address)", +"5458f0a0": "takerFeeRate()", +"5459060d": "getFeeWallet()", "545921d9": "providerRegistry()", +"545938da": "newDrawingPublish(address[],string,string,string,string,string,string,uint256)", +"54594946": "multiBurn(address,uint256[],uint256[])", +"545993db": "testUni(address,address[])", "545a153a": "getId(uint256)", +"545a4a3c": "getTransactionHash(uint256,address,uint256,bytes)", "545a5896": "changeSolidStampContract(address)", "545ae0f6": "TokenFundTransfer(uint256)", "545b2f0d": "getUpgradeAmt(uint256)", +"545ba1ee": "_removeFromDelegatedByHolderToValidator(address,uint256,uint256,uint256)", +"545bb535": "Addtoken(address,string,string,uint256,uint256)", "545c50f0": "pointRootNode(int256,address)", +"545c53c0": "_closeAction(uint256)", "545c5a02": "setStepTwoLockEndTime(uint256)", "545c5d54": "deliveryService(uint256,uint256,uint256)", +"545cd083": "unpausePoolConfirmCount(address)", +"545d09c0": "getDailyTotalBNB(uint256)", "545d2e29": "invalidateAdvertiserRefund(uint256)", "545d5988": "claimCheckPriceReward()", "545d8b55": "minCapFail()", "545e6362": "PRE_ICO_BONUS_TIME_1()", "545e7c61": "deploy(address,address)", +"545f4103": "DMEX_TOKEN()", +"545f51a4": "reserveTimestampSlotHash()", "545f6837": "returnSenderBalance()", +"54603635": "currentEthPriceInUsdc()", "54604eec": "stopAssign()", "54605549": "setCoinBalance(address,uint256,uint8,bool)", "5460687c": "test_chain2_3()", @@ -48409,40 +88638,70 @@ "54612e27": "freeze(bytes32,bytes32,uint256,bytes)", "54616911": "burnICOTokens()", "54619b69": "eAccessTOKEN()", +"5461e24c": "getResolvingContractDetails(bytes32,uint256)", +"5461e677": "_kingsize()", +"54620da8": "updateLeverage(address,address,uint128,uint112,uint128,uint256)", "546216f1": "winningScore()", "54622cef": "multiMintPreIco(address[],uint256[])", +"54628652": "recomendators(address)", "5462870d": "multisigAddress()", +"5462aa7f": "unwhitelistSpender(address)", "5463a2e4": "reasonableDiffInBps(address)", +"5463a88e": "separate()", "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()", +"5465b15d": "callbackFunction(bytes32)", +"5465d857": "delegatecallHarvest()", "546639cf": "JacksToken(uint256)", +"54664959": "testfive4()", +"5466630d": "updateItem(uint256,uint256,uint256,address,uint256)", "546668bb": "conquesting()", +"5466ca2f": "EthTransform()", "54672768": "Instrument()", "54674ebc": "HackableToken()", "54675320": "EventProduct(uint32,string,uint32,uint32,uint256,uint256,uint256,uint256)", +"5467cec4": "EMERGENCY_ADDR()", "5467e0a7": "redemption()", "5467f508": "indPresaleDeposit()", +"546872cc": "upgrade(uint16,address[])", +"5468aee4": "lastTopPromoters(uint256)", "5468e4e1": "setGameStateFusion(bool)", +"54699a7b": "withdrawalPaused(address)", "5469a173": "getFifthRoundReleaseTime()", "5469aabb": "_diviSplit(uint256,address,address,uint256)", +"546a0282": "testCall2(address,uint256,uint256)", +"546a16d5": "removeCertificate(string)", +"546af3c3": "bpt()", "546b270d": "getServer(uint256)", "546b48b1": "makeSimpleBundle(uint256,address,bytes32,bytes32)", +"546b6242": "getStockBalance(address,uint256)", "546c2b93": "paid(uint256,uint256,bytes32)", +"546c3fa6": "distriubteEverything()", +"546c94c6": "nonProfit()", +"546c9eae": "addEndorsee(address,string)", +"546cb17e": "burnToEther(address,uint256,uint256)", "546d08fe": "dividendAddress()", +"546d8170": "requestRelayOnETH(address,address,uint8,uint128,uint256,uint256)", "546dc0ac": "collectAsset(address,uint256)", "546dc71c": "approveWithdrawAddress(address,address,bool)", "546dd883": "privateAmount()", +"546e0c9b": "selectiveWithdraw(address[],uint256[],uint256,uint256)", "546e1959": "changeOwnerStart(address)", +"546e28dd": "Hodl(address,uint256,uint256,uint256)", "546e428c": "modifySender(address,bool)", "546ea281": "currentAction()", "546efd98": "indiFundAndSocialVault()", +"546f7c10": "tokenUSDRate(uint256)", +"546f9354": "inboundContractTrustStatus(address,bool)", +"547051a6": "unsubAutomationInNeeded(address)", "547069bf": "crowdsaleWeiRaised()", "5470b13b": "getWallet(uint256)", "5470f6db": "setMaxSet(uint256)", +"5471191d": "unFreezeTokens(address)", "547173da": "endPresaleDate()", "54717ea9": "getValueBonusTokens(uint256,uint256)", "54718917": "determineWinner(string)", @@ -48453,19 +88712,29 @@ "54738157": "OwnerCloseContract()", "5473b4e9": "getTransactionConfirmCount(bytes32,uint256)", "5473c701": "test_oneInvalidFalseEqLog()", +"5473f814": "poolLisaTokens()", "54741525": "getTransactionCount(bool,bool)", "54741f8d": "getMemBestPromouter()", "5474d4d7": "_transferBag(address,address,uint256)", +"5474d5f1": "checktokentotalsuply(address)", "5474fbd3": "isDayThirtyChecked()", "547505e3": "tokenAdministrator()", +"54751eaf": "approve_152(address,uint256)", +"54754871": "whitelistAdr(address)", +"5475766d": "totalWithdrawalRequests(uint256)", "5475c22e": "bindOrderFunds(address,bool,int256)", +"54767fb9": "getRandomIndex(address)", "5476bd72": "addToken(address,address)", "5476ea9e": "auctionAddress()", "5476f49d": "m_totalAppCount()", +"5476f5fb": "senNewGetBancorData(address)", +"54771086": "createdTokens()", "5477d33f": "price_constant1()", "5477e571": "handleMultipleItems(address,uint256,uint256,uint256,uint256,uint256)", "54786b4e": "getDSTSymbol()", "5478786c": "IDLE()", +"54788a19": "playerBalance(address,uint8)", +"5478bc6b": "amountOfTokenToMint()", "5478dbb7": "play(uint256[3])", "5478f06f": "updateMDTRewardAmount(uint256)", "5478f468": "getHistoryLength()", @@ -48473,101 +88742,188 @@ "547916ea": "finishRound()", "54791f36": "_transferWithReference(address,uint256,string,address)", "5479d940": "isUpgradable()", +"5479f26b": "resetNotice()", +"5479f6a7": "depositsByInvestor(address)", +"547a2d58": "resultVoteCounts(uint256)", +"547a32a3": "MetaTransactionUnsupportedFunctionError(bytes32,bytes4)", "547a5168": "TomocoinTokens()", "547a5eee": "setWhitelistSetter(address)", "547ac053": "saveInitialParametersToStorage(uint256,uint256,uint256,address)", +"547af79f": "razpolozljivost(string)", +"547af8cd": "SWAP_TOKEN_for_ETHSupportingFeeOn(address)", +"547c0e77": "setSecondaryBurnToken(address)", "547c165f": "getApprenticeChestAvailable()", "547c1b6a": "SALE_START_DATE()", "547c4137": "setLLV_edit_32(string)", +"547c5f4d": "AddAuth(address)", "547c8011": "DemocraticPalette()", "547cae29": "uintToString(uint16)", "547cbaa5": "addFrozen(address,uint256,uint256,bool)", +"547d0738": "vBZRX()", +"547d8c4a": "NumberOfUsersOnThePlatform()", "547dd162": "_newAgon(uint64,uint64,address,uint256)", "547dfaf5": "WthdrawAllToCreator()", +"547e1c40": "callRemargin(address)", "547e3f06": "changeReceiver(address)", "547e6a5b": "simulate(uint256,uint8,uint8,uint8,uint8,uint8,uint8[176])", +"547ec9c4": "onEndTx(address,uint256,uint256,address,uint256,uint256,uint256,uint256)", "547eeac1": "acceptTransfer()", +"547f2fe7": "runningValidatorCount()", +"547f8da0": "createMarket(address,address,address,bool,uint256,uint256,uint256)", +"547fd821": "opThreshold()", "547fd950": "getTotalFrozenBalance()", +"548031ec": "overallRatio2(uint256)", +"5480479d": "userV2ItemNumber(address)", +"54811de8": "getSecretSwap(bytes32)", "54812d17": "initialize(address,address,uint256,uint256,address,uint256)", "54817301": "setFreezeEnd(uint256)", "5481c1ff": "referBenefitRate()", +"5481e4a4": "openLockETHAndDraw(uint256,address,address,bytes32,uint256)", +"5481eba3": "test_transfer_withInvalidAmount()", "5481f43e": "getProviderTitle(address)", "54823e66": "getStateHash(uint256)", +"54825c0c": "checkReferrerAcv(address)", +"54825f68": "lootboxContractAddr()", "54828eb7": "placeBetEven(uint256)", "54829cad": "dubi()", +"5482ba66": "ShopFrontEnd(address,address,uint256,uint256,uint256)", "5482d73c": "getDocument(bytes16,uint256)", "5482d88e": "telcoin()", +"5482e614": "difficulty12()", "54830df7": "getApprovedTokenCount()", +"5483d569": "usdToCrv(uint256)", +"54840526": "getLoanId()", "54840c6e": "tradable()", +"54842f14": "DESIGNATE_SIGNER_ROLE()", +"54843492": "_uniPairAddress()", "5484b5bf": "thelocation()", +"5484f4ef": "farmerRequestCertificate(address,uint256,string,string,string,string)", "5485868a": "roundFactory()", +"54858bae": "TokenSold(uint256,string,uint32,uint256,uint256,address,address)", "5485bb82": "w_Team()", +"54869d20": "setDoRateValidation(bool)", +"5486ad78": "_decode_sint32(uint256,bytes)", "5486dfb3": "distributeSupply()", +"5486e19b": "avgBlockTransaction()", "548707cd": "_bid(uint40,uint128)", +"5487404a": "defaultSlippage()", "54876921": "withdrawMoney(uint256)", +"5487aae2": "mineInfo(uint256)", "5487e055": "PRICE_MID()", +"5487e06e": "produce(bytes,bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"54885a3c": "SetStateEvent(uint8)", "5488cc80": "currentCheckpointId()", "548942e1": "UbecoinICO()", +"54895ec1": "queryFee(address,address,uint256)", +"5489ad72": "_protectedTokenIndex(address)", "548ad42e": "chfScale()", "548b273a": "outstandingEther()", +"548b514e": "isExecutorAuthorized(address)", "548b5e6b": "contractStartDate_()", "548c0ef4": "getRank(address)", "548c20be": "getMyName(bytes32)", +"548cfeba": "setPoolAllocationPoints(uint256[],uint256[],bool[],bool[],uint256)", "548d4a54": "updateTransferFeeRate(uint256)", "548d91b1": "getPage(uint256[],uint256,uint256,bool)", "548db174": "removeFromWhitelist(address[])", +"548dd437": "requestReleaseStake()", "548dd51e": "newContract(address,address,uint256)", "548e0846": "lastCallBlock(address)", +"548e73c7": "MIN_TICKET_EUR_ULPS()", +"548e9097": "accumulateStake(address)", +"548eaed0": "saveAddress(address)", +"548f6cac": "pendingShow(uint256,address)", "548f896c": "setHouseEdgeMinimumAmount(uint256)", "548fe136": "doWorkAndPayTOT()", +"549014b5": "dtradeReceivedForSynths(uint256)", +"54901ba8": "_ruleIds(uint256)", "549060bb": "Competition(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"54911e12": "categoryActionHashUpdated()", "54919a6c": "sendTokensSingleValue(address[],uint256)", "549215a3": "amendEpoch(uint256)", +"54924507": "maxUnlentPerc()", "54924aec": "adminsDisabledForever()", "549262ba": "put()", +"54929f68": "Lay_TenDoi()", +"5493121d": "modifyParameters(address,address,address,bytes32,bytes32,address)", "5493a7f4": "importAmountForAddress(uint256,address,address)", +"5493f09a": "lockFrom(address,uint256,uint256)", "549400bd": "valuee(uint256)", "549503e5": "executeSell(address,uint256)", +"54955e59": "dudududu()", "5495699f": "teamFund()", +"54956f86": "calcKfToUsdt(uint256)", "5495794b": "initialWei()", "5495ca36": "MDC9Token(uint256,string,uint8,string)", +"5495ec27": "withdrawRewardLP()", +"5496a7af": "adminImportOldMEBlock(uint8,uint8)", "5496b217": "createMintableBurnableToken(string,string,uint256,string)", +"5496b236": "NewEntry(address,uint256[])", "549737e3": "setIBalance3(uint256,uint256,uint256)", "549767c7": "balanceSpot(address)", "5498e9e5": "AmericanAirlinesCoin()", "5498eae4": "PAYA()", "54990b15": "sendTranche(bytes32,address,uint256,bytes)", +"549961dd": "changeFeeHoldingAddress(address)", +"5499716a": "withdrawEtherTokenProportion(address,uint256,uint256)", "54999f6d": "initAmount()", "5499c84e": "changeBonus(uint256,uint256,uint8)", +"5499d026": "getCreamPrice(address)", "5499dca5": "getMyStake()", +"549a65f4": "setKycAuthAddress(address)", "549a9ffd": "changePiranhaName(uint256,string)", +"549aa084": "marketBuyOrdersWithEth(uint256,bytes[],uint256,address)", "549aa194": "unreleasedAmount()", +"549b39fc": "recordsArr(uint256)", +"549b5bfc": "getStakesCount(address)", +"549b7688": "setStakingPools(address[],uint256[])", +"549ba568": "PlayerBet(bytes32,address,uint256,uint256)", "549bc193": "changeSwitchTime(uint256)", +"549be1b8": "claimUnsupportedToken(address,uint256,address)", "549bf4bf": "Liberty()", "549bf9b9": "SFCapitalToken(string,string,uint8,uint256)", +"549c1db5": "toggleDepositing()", "549c4627": "depositsOpen()", "549c6bbb": "refundTokens(address,uint256)", "549c7b58": "getAgon(uint256)", "549caf35": "oxced()", "549cbc7a": "startSale(uint256,uint256,uint256,address)", +"549cf9e5": "updateVoteCastersWeight(uint256,uint256)", "549d5e3b": "claimByAddress(address,address)", "549d776a": "upgradeContract(uint256,address)", "549ddcbd": "setFreezeHybridizationsCount(uint256,uint256)", "549df19f": "resetAllWallets()", +"549e6ff2": "GetCampaignDescription(uint24)", "549eca74": "fpDiv(uint256,uint256)", "54a019e2": "FOUNDER_FUND_2()", +"54a02f9e": "users(address,uint256)", "54a035aa": "_evaluateCategory(address,uint8,uint256,uint256)", "54a04d2f": "setMigrateAgent(address)", +"54a06ae8": "addLiquidity4Test(address,uint256,uint256,uint256)", +"54a0e769": "chainSelect()", "54a0ebf5": "updateEntityName(uint256,bytes32)", "54a1b431": "getVoteDetails(uint256)", +"54a1d217": "total_period_mint(uint256)", "54a1e232": "setSellOrdersContract(address)", "54a28ded": "bhCheck()", "54a2b2b8": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"54a2d28a": "giveUSDTToUser(uint256)", +"54a2e027": "stakerData(uint256)", "54a325a6": "setKyberNetwork(address)", +"54a365df": "getCurveUnset(address,bytes32)", +"54a384d8": "rebasesync()", +"54a45b44": "setPharmacist(string,string,string,string,string,address)", "54a46211": "_removeInvestor(address)", "54a598b0": "globalTokenTransferLock()", +"54a61978": "delegate_new(uint256[],uint256[],uint256)", +"54a6385a": "SetManager(address)", +"54a6be67": "testUpper()", "54a6c8c4": "toSmallrtc(uint256)", "54a6ff68": "isVersionLogic()", +"54a77738": "requestLoan(uint256,uint8,uint8)", +"54a7a9a0": "log(bool,bool,uint256,address)", +"54a7afa8": "LockedAccount(address)", +"54a7b0d8": "uninstallModule(address)", "54a874b4": "isSolved(address)", "54a8b217": "qryModules()", "54a8ca69": "transferAnyMEPToken(address,uint256)", @@ -48576,19 +88932,24 @@ "54a9de1c": "referrerBonus(address)", "54aa0546": "MCNC()", "54aa4e44": "setDisableBuyingTime(uint256)", +"54aac34e": "ownerDelegatecallSnipe(address,bytes)", "54aac764": "SALE2_CAP()", "54ab5561": "setOwnerTwo(address)", "54ac2119": "EMJACTestToken()", "54aca207": "iwithdrawal(uint256)", "54acbe7b": "setSaleShare(uint256,bool,address,uint256)", +"54acc3d1": "setPoolCreator(address)", "54accc88": "OOREDOOCHAIN()", "54ad2d22": "BitcoinCrown()", "54ad7e1c": "setDividendDistributionPool(address)", "54ad9718": "feePrice()", +"54adafe8": "price0CumulativeLastUNI()", "54adb7b1": "doNotAllocateBid(bytes32)", "54adc686": "claimRewards(bytes32[],uint256[])", "54ae8492": "CustodialForward()", "54aee843": "MANHATTANPROXYMANAVE()", +"54aeebe4": "aTot()", +"54af0555": "balanceOfGOV()", "54af0d4c": "validAfter(address)", "54af3548": "getSigner(address,uint256,address,uint256,bytes32,bytes32,uint8)", "54afc9a9": "MyFirstToken()", @@ -48596,114 +88957,193 @@ "54b02ba4": "cutoff()", "54b0a26a": "getCPModel(uint256)", "54b16510": "CreateProduct(string,string,string,string)", +"54b18c43": "pendingGoat(uint256,address)", +"54b23b98": "segister(address)", +"54b24210": "calTotalKmSignUp(uint256)", +"54b28713": "HirerReleased(bytes32,address,address,uint256)", "54b2a080": "valueAtIndexHasNext(uint256)", +"54b2b176": "mintBatchFrozenTokens(address[],uint256[])", +"54b2b37a": "LGEPeriod()", "54b302c5": "maximumDeposit()", +"54b36417": "updateSetting(uint256,uint256)", +"54b3c821": "PcUNI()", "54b3fa58": "ServiceTask(string)", +"54b42506": "getUnpaidVestedRewards(uint256)", "54b48428": "endTGE()", "54b49859": "fmpContractAddress()", +"54b4b618": "CatalogoOuvidorias(bytes32,uint8,bytes32,bytes32)", "54b51fcc": "testNumberOfElements()", +"54b598ec": "ballots(address,uint256)", "54b5aeac": "deleteDataPatternVoteRules(uint256)", +"54b61431": "swapExactTokensToTokens(uint256,uint256,uint256,address,address[],bool[],address)", "54b61723": "round3Cap()", "54b67057": "setTranformed(uint64,uint64)", +"54b6768b": "getContractFromIndexes(uint256[])", "54b6a520": "ICOFinished()", "54b6ba95": "durationInDays()", "54b6d871": "TempusToken()", +"54b6dced": "depositPrinciple(uint256)", "54b6ed85": "AddNewCurrency(string,string,string,string)", +"54b6f161": "NAME_CHANGE_PRICE()", +"54b762a6": "getTax()", "54b7636e": "isKYCVerified(address)", "54b84910": "needToReserve()", +"54b8a98e": "createExchange(address,string,uint256,uint256)", "54b8c024": "fieldOrder()", +"54b8c601": "delegationEnabled()", "54b8d5e3": "getName(bytes32)", "54b8dd66": "countryItems(uint256,uint256,uint256)", "54b8dfcb": "settleBuyer(address,uint256)", "54b9b4fa": "UNLOCK_TEAM_1()", +"54ba0f27": "mintNFT(address)", "54ba34b5": "available_slots()", "54ba7daa": "enter(bytes,bytes)", +"54bb1361": "l(uint256)", +"54bb3b29": "initialize(string,string,address,address,address,uint256,uint256,uint256)", +"54bb48b3": "updateMin(uint256)", "54bbd376": "getNextDate(uint32)", "54bc16f2": "Exchanges()", +"54bc33fe": "maxCapAmount(uint256)", +"54bc8543": "maxGaufUnits()", +"54bc978c": "testRng(string)", +"54bcb164": "baseMiningReward()", +"54bcd7ff": "minimumResponses()", "54bdbd4d": "changeMinPeriod(uint32)", +"54be2229": "queueTransaction(address,uint256,string,address,uint256)", "54be44f0": "updateMinimumStakingTokenPercentageEnabled()", "54be50a5": "lastHoldingTax()", "54beb2f4": "ProfitSharing(address)", "54bec662": "removeValidation(address,bytes32)", +"54bee0a1": "startMynetwork(uint256)", "54bef3b4": "getPlayerVaultsHelper(uint256,uint256,uint256,uint256,uint256)", +"54bef80f": "nonWhitelistedDepositLimit()", +"54bf24f2": "setDeposit(uint256,address,uint256,uint256,uint256,uint256)", "54bf3a73": "playerToDungeonID(address)", +"54bf9359": "calcTokenFee(uint256,uint8,uint32)", +"54c01b51": "setIlkMaxLiquidationAmount(address,bytes32,uint256)", +"54c03e25": "EMAX_TokenAddress()", "54c0775f": "GetItems(address)", +"54c0a42b": "migrateToBridgedSTAKE(address)", +"54c0d2bf": "setTokenStakePoolAddress(address)", "54c15020": "awardReferalBonus()", "54c15b82": "isGeneScience()", +"54c22121": "changeParameters(uint16,address,address)", +"54c22180": "shouldTriggerActive(uint256,uint256)", "54c29ce6": "assertOperationIsConsistent(bytes32)", +"54c2af24": "_deleverage(bool,uint256)", "54c35a3c": "setup(address,address,address,address)", "54c3b0c4": "icoPhase3EndTime()", "54c41fb9": "viewMerkleHash(uint16,uint8,uint8)", +"54c4a55f": "tUser()", "54c51813": "setFreelancer(bool,string,uint256,uint8,uint256[],uint256[],string)", "54c552db": "setNumber(bytes32,uint256)", "54c58dc9": "_getAllStorages()", +"54c5a75e": "mcdJoinUSDC()", "54c5aee1": "collectReward()", "54c5b696": "maxBonus()", +"54c5f3a1": "fingerprints(bytes32)", "54c5f850": "withdrawTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"54c6243e": "getMP(string)", +"54c6a8ed": "revokeMintDelegate(address)", +"54c6de48": "plyr(uint256)", "54c72ead": "_getHardCap()", +"54c73ef7": "LiqLP()", +"54c7f9bd": "_VANILLA(uint256)", "54c86628": "etsContract()", "54c91295": "getEloScore(address)", "54c916a1": "setOCPTokenContract(address)", "54c93a4e": "lockTeamTokens()", "54c990cf": "periodTimeFrame(uint256)", +"54c9a8ae": "runNoGas()", "54c9cc44": "changePlayersName(string)", "54ca435f": "PRESS_MARKETING()", +"54ca6b2b": "blockedtransfer(address)", "54ca9095": "newEntity(bytes32,bytes32,uint256,uint256)", "54cacaba": "QuarkChain()", "54caf101": "bonus(uint256,uint8)", "54cb5081": "getPromoMinPurchaseEth()", +"54cb9328": "DataEvent(uint256,string)", "54cbe1e6": "gamePayoutResolver(address,uint256)", "54cbffc4": "LimitOfMinutes()", "54cc463b": "PreICOPrice()", +"54cc56d8": "freeClaimHero(address)", "54cc61bc": "Krown(uint256,string,uint8,string,address)", "54ccdb0d": "seriesCSupply()", +"54cd4009": "deposit(uint64,uint32)", "54cdac25": "usd2weiTopSales(uint256)", "54ce0851": "round5TokensRemaning()", "54ce7616": "TestTalk()", "54cecb21": "AuthPending(address)", "54cf2aeb": "swapFee()", +"54cf2d79": "LockTime()", +"54cf428a": "contractCaller()", "54cf6668": "setEarlyInvestorExchangeRate(uint256)", "54cfcd1b": "DEAWCOIN()", "54cfe7d0": "nextForkName()", +"54d02880": "ndr()", "54d03b5c": "changeFeeMake(uint256)", "54d05ad2": "changelp10(address)", "54d06009": "whiteListAddress()", +"54d0c8a0": "base_asset_address()", +"54d0f8d8": "getClaimDateUpd(uint256)", "54d15005": "isDestroyed(string)", "54d15347": "adminSuspendDeposit(bool)", "54d18864": "totalProjectToken()", "54d1b356": "GetBankerProfit(uint8)", "54d1f77c": "UnpaidDivInt()", +"54d20439": "getUserAllLockedCNTokens(address)", "54d24f33": "TOKEN_PRESALE_LIMIT()", "54d271fb": "unpause_1()", "54d29b9a": "bidderWhitelist(uint256)", "54d2a34a": "getHouseFee()", "54d30c87": "release(uint256,bool)", +"54d39b34": "stakeTo(uint256,address)", "54d3f3e4": "getTopInfoDetail(address)", "54d41bbd": "unregisterAdmin(address)", "54d4b7b2": "DateOfDeath()", "54d4da57": "extractInvoicedLength()", "54d50378": "winner_pool_amount()", +"54d59505": "saleBonusICO5()", "54d5e127": "withdrawSettle(bytes32,bytes32)", "54d68405": "LogFundAnswerBounty(bytes32,uint256,uint256,address)", "54d6a2b7": "cancelSwap(uint256)", +"54d6e689": "_ensureAragonIdIsValid(address)", +"54d6f7ea": "addMargin(bytes32,address,bool,uint8,bytes32,bytes32,uint64)", "54d734e2": "createSubscriptionOffer(uint256,uint16,uint256,uint256,uint256,uint256,uint256,bytes)", +"54d74821": "totalSupplyField()", +"54d75aa6": "runtime()", "54d79868": "getPositionBalance(bytes32)", "54d7c34d": "transferAidrop()", +"54d7ece4": "possibleProposalStatesArray(uint256)", +"54d85c4e": "queryAccount(address)", +"54d85f3e": "isPayLock(address)", "54d87002": "showContributed()", +"54d89872": "LIQUIDITY_TOKEN()", "54d89c92": "numberParticipants()", +"54d8d239": "purchasingBuyer(address)", +"54d8e9e0": "CloseVoting(bool)", "54d92ba9": "getCurrAuctionPriceTankID(uint256)", "54d9d6f8": "findNextDay(uint256,bytes)", "54da44db": "GetUserBetsInRaz(address,uint256)", +"54da51ad": "communitySaleCap(uint256)", "54da5393": "Utils()", "54da80c9": "Patney()", +"54da8541": "memWallets(uint256)", "54dacb96": "numWhitelisted()", "54daedc3": "transferCoins(address)", "54db4547": "ethbuy(uint256)", +"54db6aa3": "mint(address,string,uint256,uint256,string,string,string,string,string)", +"54db83b9": "distributeBurned()", +"54dc3452": "buyPivot(address)", +"54dc7839": "Gpes()", "54dcc49b": "_withdraw(address,uint256,bool,uint256)", "54dcfb9b": "LinkToken(uint256,string,string,address)", "54dd1da4": "releaseVestedTokens()", "54ddd5d6": "retrieveRefund()", +"54de298e": "setMKTTokenAddress(address)", "54dea00a": "getTokenRate(address)", +"54df144d": "setClaimableAmount(uint256)", +"54df7b63": "whitelistHarvester(address)", "54dfbca8": "setExtra(uint256,address)", "54dfefb4": "DEEPPAYMENT()", "54e030b7": "bonusDistributionAddress()", @@ -48712,234 +89152,428 @@ "54e0b451": "claimReward(bytes32,uint256)", "54e0b464": "ICO_ADDR()", "54e16753": "BLUECoin()", +"54e19054": "AddLockAddress(address,uint256)", "54e2cf2d": "_getPartLevel(bytes,uint256)", +"54e2d1c9": "idToNftContract(uint256)", "54e2dc8d": "getAdditionalTime(uint256)", "54e30c37": "earlyBirdPrice()", "54e33cf0": "getRewardsIndex()", "54e35054": "getRoundResultInfoWithRoundID(uint256)", "54e35ba2": "issueTokens(uint256,uint256)", +"54e3c7f4": "revealNonce()", +"54e3e70d": "openLoan(uint256)", +"54e4067a": "getHolderInfo(address)", +"54e46127": "AdminUpdated(address)", "54e4df26": "test_0_testGenerateTokens()", +"54e54bfe": "volatilityTolerance()", "54e707a0": "START_WEEK_2()", "54e76d74": "minimumPoolPurchase()", "54e7aed8": "Frozenable(address)", +"54e7dc31": "startSaleSPS(uint256,uint256,uint256,uint256,uint256)", "54e7e98c": "PiexT(uint256,string,uint8,string)", +"54e841ad": "transfer_owner()", "54e8561b": "RDOCrowdsale(address,address)", +"54e88802": "setPrice6(uint256)", +"54e8ca94": "triggerUnfreeze(address)", "54e8e4e4": "Test_SignedInteger_AdditionOverflow(int256)", "54e921cb": "setFreezeMustCalculate(uint256,bool)", "54e9244e": "orderFills()", +"54e99236": "MAX_MONTH()", "54e9d5e1": "refundDonation(address)", "54ea1538": "sellDrago(uint256)", "54ea1af9": "flyDrop(address[],uint256[])", "54ea4000": "identify(address[])", +"54eaae46": "isBurningDisabled(address)", "54eae3e6": "streamEnd()", "54eb3f74": "getOptionState(address[2],uint256[7])", "54eb9e88": "_preValidateICOPurchase(address,uint256)", +"54ec0e2e": "issueAndCreateManyProductsOrder(uint128,uint128[],bytes32[],address[],uint256[],uint128)", +"54ec3f13": "transferBurnRate()", "54ec5d9b": "weiRaisedRound()", "54ec6a43": "taxPaid()", +"54eca4e4": "setSwapETH(uint256)", "54ecaba4": "COMPETITION_VERSION()", "54ecd994": "ALLOC_BOUNTIES()", +"54ece2d3": "buyCollateral(uint256,uint256)", "54ed08c8": "getPurchasedTokens(address)", "54ed44f7": "generateCostFromAttributes(uint8[14])", "54ed7b6e": "addHash(bytes)", +"54ee14c9": "getUserTrxByEthAddr(address)", +"54ee2090": "setManager(bytes32,address)", "54ee4d4b": "addCommunityGrant(address,uint256)", "54eea796": "setEpochLength(uint256)", "54ef356f": "isUserAdmitted(address)", +"54ef481d": "getUserFilledDeposits(address)", "54ef9c3c": "getEpisodeBranchData(uint256,uint256)", +"54f02b3e": "ethToWethAddr(address)", +"54f04a11": "buyBonds(uint256,uint256)", +"54f0a3ce": "excuteOption(uint256)", +"54f0bc79": "setRelayersValid(address[],bool[])", +"54f0bde7": "getSupporterInfo(uint64,uint64,uint64)", +"54f0c897": "donee()", +"54f0e080": "maxGarmentsPerCollection()", "54f10ed0": "IknewToken()", "54f11256": "retrieveCadvsLeftInRefunding()", "54f12a2c": "isAllowed(string,string)", "54f1469c": "shuffle(uint256[])", "54f1bb4b": "Etheraffle(address,address,address,address)", +"54f1c43f": "vaultDeployTime()", +"54f1e126": "removeMinterRole(address)", +"54f21fd9": "setPoolToUse(address)", +"54f22def": "proposeDelay()", +"54f33d4c": "getUsdtPrice(uint256)", "54f363a3": "addition(uint256,uint256)", +"54f3e083": "supplyOrderWithPermit(uint256,uint256,uint256,uint8,bytes32,bytes32)", "54f47346": "lastBlock_f12()", "54f47be7": "transformSettingContract()", "54f4824d": "myLastRef(address)", +"54f4854b": "DiscipleOfferAccept(uint256,uint256,address,uint256)", +"54f4d9a4": "YFGMLockOne()", "54f50f1b": "nicknameOf(uint256)", "54f5164b": "isLocked(bytes32,uint256)", "54f51d32": "SetCitySnapshot(address,uint256,bool,uint256,uint256,uint256,uint256)", "54f5675c": "OfferedForSale(uint256)", "54f56df1": "Shop(address)", +"54f5bffa": "totalSupplyBurnedElastic()", "54f60aea": "ONE_EMONT()", "54f6127f": "getData(bytes32)", "54f63105": "maxMintingPower()", "54f63ee5": "resumePresale()", "54f703f8": "factor()", +"54f7348c": "MajorityThresholdChanged(uint256,uint256)", +"54f78737": "setDocumentHash(uint256,string)", "54f78dad": "setBalanceSheet(address)", "54f7b493": "getMinimumFundsInEuroCents()", "54f7dd8c": "lotOfOwnerByIndex(address,uint256)", +"54f7e801": "_setSelling(bool)", "54f81786": "startTokenVotes(address[10])", "54f83483": "needsTick()", +"54f85da3": "DefineBundle(uint256,uint256[])", "54f8c2df": "getShipName(uint32)", +"54f8e615": "tokenAddress2()", "54f9962a": "getAffiliateLevel()", +"54f9abfa": "idByAddress(address)", +"54f9b1e3": "changeTermPeriod(uint32)", "54f9cbb3": "newVote(uint256,string)", +"54fa35a9": "mintSubURI(address,uint256,string)", "54fa8044": "sendKrs(address,uint256)", +"54fa9b25": "greylistEscrow()", "54fac919": "decay()", +"54fbc5bb": "redeem(uint256,address,uint256,uint256)", "54fbde65": "USDWEI()", "54fbed37": "tokenIsBeingTransferred(address,address,uint256)", +"54fc3305": "tokenSaleOpen()", +"54fc53dd": "preemptiveDisputeCrowdsourcer()", +"54fc69a9": "sellVirtualGold(uint256)", "54fc85ac": "maxEth()", "54fd4d50": "version()", +"54fd5e9a": "getWethByEth(uint256)", +"54fd7a2c": "m_User_Map(address)", +"54fd9238": "_get(address,uint32)", +"54fddc7f": "startJigsaw(uint256)", +"54fe6ea3": "pendingCmbst(uint256,address)", +"54fe9fd7": "values(address)", +"54fea698": "variableStorageWhile()", "54fead44": "_removeRecoverer(address)", "54fef819": "throwsWhenRedeployingANT()", +"54ff3a73": "lastProcessedVoteIdByProposal(uint256)", +"54ff7476": "commitBet(uint256,uint256)", "54ffb323": "MaxOffer()", +"54ffb7da": "setDevReward(address)", +"54ffc09a": "top3date()", "54ffe626": "_getBonusTokenAmount(uint256,uint256)", "550052b5": "iaOnInvested(address,uint256,bool)", +"55008277": "testNN(address,uint256)", "5502109e": "actualCap()", "550271c9": "Candle()", +"55027703": "pullDai(address,uint256)", "5502be83": "getBountiesByParticipant(address)", +"5502e3b8": "SetSource(bytes32,address,address,uint128,bool)", +"550325b5": "chains(uint256)", +"55032e59": "topOption()", "55036214": "priceRound2()", +"550385f0": "petrify()", "5503a659": "smallponzi()", "5503d9ba": "numberOfPledgeAdmins()", "55042668": "jobStarted(bytes16,address,address,uint256,uint256)", "55044042": "CreateGUNS(address,uint256)", +"5504baac": "viewLimitBuySellValue()", "5504bf71": "attackerPrizeByToken(bytes32,address,address)", "5504f45e": "getFrontEndTokenSupply(address)", "5505075b": "validArb(address,uint256)", "550538f6": "getOneTimeCosts()", "550563ba": "Iscm(uint256,string,string)", +"55060681": "timeout(bytes16)", "55061ccc": "setImageBlurredAt(uint256,uint256)", +"5506362c": "setRedme(address)", "55064d85": "exists(uint256,uint256,uint256)", "5506aa6c": "weiMaximumGoal()", "55072fef": "PRIVATE()", +"55076117": "IMP20()", "5507a82e": "setCalculatorAddress(address)", +"5507dddc": "mintNFT(address,uint256,uint256[2],uint256[2][2],uint256[2],uint256[2])", "5507e9c0": "lockForAll(bool)", +"5508d8e1": "NFTCounter()", +"5508efdb": "getShieldMiningRewards(address,address,address,address)", "5509b160": "weightLostPartLimit()", "5509f0f3": "minPurchasePreICO()", +"550a12f5": "getStakeDivsNow(address,uint256,uint256)", +"550a7489": "topInvestorsVault()", +"550a778b": "saleOf(uint256)", +"550a8ae6": "AuthorityAdded(address)", +"550b1706": "uniswap_pair_address()", "550b1f48": "eighthTime()", "550b47b8": "setCoinPrice(uint256)", +"550b521c": "contributions(address,uint256)", "550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", +"550bfa56": "set_new_goodwill(uint256)", +"550c963c": "addressNodes()", "550c99c6": "_createCutie(uint40,uint40,uint16,uint16,uint256,address,uint40)", +"550c9f36": "removeEscapeHatch(uint256,bytes,bytes)", +"550d6d38": "arbitrage(address,uint256,string[],string[])", "550d8dca": "secondPeriodSupply()", "550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", +"550dd2bd": "proUsers(uint256)", +"550e095a": "alwinToken()", +"550e1a2a": "reinvestRewards(bool,uint256)", "550e4f2b": "withdrawRemainingIPCToken()", +"550e7e46": "BorrowRepaid(address,address,uint256,uint256,uint256)", "550ed1f0": "getMaxBetAmount()", "550ed61b": "jpyc()", +"550eefa8": "totalSoldByPurchase()", +"550ef3a8": "updateLockName(string)", +"550f1a91": "SetIssueAssetRole(address[],bool[])", "55107916": "distributeMarketingShares()", "5510f804": "acceptToken()", "5510f8d7": "forkApprove(address,address,address,uint256)", +"55111a59": "akro()", +"551196d5": "inCaseTokengetsStuck(address)", "55119b1a": "addBeneficiary(address,uint256,uint256,uint256,uint256)", +"5511e335": "tokensSoldPreSale(address,uint256)", +"5511f319": "cancelledOrFilled(bytes32)", +"5511fc34": "setInternalWalletAddress(string,address)", "55121498": "getLenderBalance(uint256)", +"55123d49": "HotPotatoPassed(uint256,address)", "55126d30": "LogEvent(address,uint256,uint256,string)", "5512a353": "BONUSROLL()", "5512a8d8": "myohoTest()", +"551303dd": "LogErrorString(string)", +"5513232f": "IXTPayment(address,address,uint256,string)", "551336c5": "prophecise(bytes32,bytes32)", +"55133fab": "insertDetails(address,uint256,string,string,string,uint256,bool,string,string)", +"55134003": "KSCBurnWhenMoveToMainnet(address,address,uint256,string)", +"55137eab": "getUserLockInfo(uint256,address)", "55138534": "Transaction()", "55138d97": "addCar(address[4],uint256,uint256)", "55139163": "refereesRateBonus()", +"5513a184": "withdrawNFT(uint256[],uint256[])", "5513a2ac": "claimByProof(address,bytes32[],bytes32[],uint256)", "5513a34e": "getProductHistoryPrice(bytes32)", +"551402b3": "_tokenToBurn(uint256)", +"551461d0": "setActiveLCPAddress(address)", +"551467c5": "frog2PerBlock()", "5514738f": "_packWarriorPvpData(uint256,uint256,uint256,uint256,uint256)", "55152b9d": "DxChainToken()", +"5515e2d8": "_getTotalEscrowWithRate(bytes32,address,uint256,uint256)", +"5515fe0a": "protocols(bytes32)", "55161913": "charge()", +"55169b60": "newStablecoin(address)", "5516b6c5": "SECCoinSold()", "55171365": "bitshmToken()", "55173bb1": "ColaTokenToken()", "55176f51": "FOUNDATION_POOL_TOKENS_VESTED()", "55177ef1": "addressCoreSupply()", "55181fba": "TEXBToken()", +"55182ccb": "maxIssuablePynths(address)", "55186c99": "auditorCanWithdrawStake(uint256,address)", "55189100": "payRewards(address,uint256)", +"55189488": "frax_pools(address)", +"5518edf8": "relayReportMalicious(address,address,uint256,bytes)", +"55196bd9": "setDefaultController(address)", "551a450a": "tokenIdToListing(bytes5)", "551a5376": "haltTokenTransferFromAddress(address)", +"551a6588": "stop_ramp_A()", +"551b4106": "endBuyout()", +"551b42a8": "SALE_MANAGER_ROLE()", +"551c1d0d": "DappsRegistered(address,string,string)", +"551c4fd2": "withdraw(uint256[2],uint256[2][2],uint256[2],uint256[4])", +"551c66e2": "callJudge(bytes32,uint256,uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", "551cacfd": "extractEther(address)", +"551cb3b1": "auctionsStarted()", "551dc401": "StateChanged(uint8)", +"551de90f": "maxGasLeft(uint8)", "551e2e39": "changeDefaults(uint256,uint256,uint256,uint256,bool)", "551e44ca": "withdrawTokenForUser(uint256)", "551e4c27": "setPeggleBot(string)", "551e6ba6": "BoardRoom(address)", +"551ecfec": "amountChallenged()", "551ef860": "newRole(bytes32,address[])", "551f3108": "versionSelectors(bytes32,bytes32,address)", +"551f4197": "eCRVPool()", +"551f7189": "amountOfCitizens()", +"551f7c26": "updateTokenPriceTerm()", "551f8e2a": "add(address,address,uint256)", +"551fc7c7": "reloadFee(uint256)", "5520002a": "viewSharesSold()", "552033c4": "RAY()", +"55206f87": "removeNomin(bytes4)", "552079dc": "fallback()", "55207a07": "changeMood(string)", +"5520b5dc": "requestChangeController(address,address,address,uint256)", +"55210e36": "addOperatorWrappedContract(address)", "55212c89": "seeleToken()", +"552164ee": "getTotalRewards(uint256)", "55219d5a": "tokenAllowed(address)", "5521d17b": "betOnColor(bool)", "552200f5": "check_part_location(uint256)", +"5522498c": "approveFeeless(address,uint256)", +"552348f2": "itemData(uint256)", "55234ec0": "remaining()", +"5523c0d6": "soilContract()", "5523ec91": "fghcoin()", "552405b0": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "55241077": "setValue(uint256)", +"552439fa": "getUserRegistrationStatus(address)", "55247a52": "wantToBeWhale()", +"5524ae08": "setAudit(address,uint256,bytes32,bytes32,uint32)", +"5524bc9d": "withdrawTmvMax(uint256)", +"5524d548": "registered(bytes32)", "5524defd": "onPayoutFailure(address,uint256)", "5524e97a": "placeBet(uint256,uint256,uint256,bytes32,bytes32)", +"552530fd": "MakeCalls(uint256,address[2],bytes[2])", "552548b5": "setMaxDiscountPermille(uint256)", "55258a11": "updateAllScores()", "5525d87f": "setOracleQueryType(string)", "55265669": "showSupply()", +"55272586": "TooFewBrokerAssetsProvidedError(uint256)", +"552739b9": "seasonLimitAccounts(uint16,uint16)", "55274378": "updateInterCrypto()", +"5527f14e": "TokenAddressChanged(address,address)", +"552861e8": "setLastUnderlyingBalancePer1000(uint256)", +"55289d51": "convertEthtoUin(address,uint256,uint256,address)", +"5528bb85": "CheckLiquidityPercentage(address,uint8)", "55291dbd": "claimEther()", "552984b3": "stabilize()", +"55298871": "setPresaleTime(string)", +"5529b0e2": "LogStartRoundC()", "552a41a3": "getRemainingBountyTokens()", "552a6915": "getGood(uint256)", "552ac31e": "prod(address,bytes32,uint128)", "552b71aa": "executeDistributeCapital(uint256)", +"552bd01e": "_removeRetailer(address)", "552c190e": "_DoubleDown()", +"552c2bcd": "RequesProfitFail(address,uint256,uint256,uint256)", +"552c8b6c": "setTarget(string)", +"552c9de9": "bonusTotalTokens()", +"552ccd9d": "setDsampling(address)", "552d2d5c": "getPerson(address)", "552e387d": "XBVHandler(address,uint256)", +"552eb2e7": "_totalReferReward(address)", "552eb9e2": "ETStarPresale(address,uint256,uint256)", +"552ebf30": "getAvailableEth()", "552f1270": "startWeek(address,uint8)", +"552f23e8": "c_tokenPriceInCents()", "552f27f5": "setupEventsAdmin(address)", +"552f3a5e": "approve_185(address,uint256)", +"552f63a0": "setRedeemEndDate(uint256)", +"552f6da8": "setTaxRateRequest(uint256)", "552f8224": "fechAllForCandidate()", "552fee9d": "airdropTokens(address,uint256,uint256)", +"5530273c": "withdrawColl(uint256,address,address)", "55302ebd": "hasUnionId(bytes32)", "5530c519": "validate_pko(address,bytes32,bytes)", +"55313dea": "test_stop()", +"553156f6": "getTotalOrderedAmount(address)", "5531680c": "transferableBlock()", +"55316862": "addFiatBuyers(address,uint256)", "55325d87": "prizeWinners(uint256)", "55326893": "setPOOL_edit_24(string)", +"553275be": "user(uint256)", +"5532ed12": "ownedEther()", "5532edf2": "autorizadoraNuncaAutorizouCandidata(address,address)", "5533639e": "toB32(bytes,uint256,bytes32,bytes)", +"5533c69c": "setWallets3x(address)", "5533ffad": "setUserNotifications(bool[],bool,uint8[],uint8)", "5534236e": "AirDropPromo(string,string)", "55347cce": "Setuppackagesale(uint256,uint256)", "55348d9b": "addBeneficiaryVestor(address,uint256,uint256,uint256,uint256)", +"5534f354": "isChannelOpened(uint64)", "55352638": "updatePresaleMaxWei(uint256)", "553543c5": "tokenSoldPreSale()", "553594e4": "getActionHistorySize()", "5535cd2f": "setPOOL_edit_1(string)", "5535e7a8": "GameCreated(address,address,uint256,uint256,bytes32)", +"55362934": "TargetPriceChanged(uint8,uint256,uint256)", "55367ba9": "pauseSale()", "55368442": "removeMetadataObject(string)", +"5536b682": "logShareBurnedWithId(uint256,address,uint256,uint256,uint256)", "5536deb6": "finalizePhase()", "5536e2d6": "OCTACrypto()", +"5536e45d": "registerInterfaceForAddress(bytes32,address)", +"55372e46": "PhaseProgress(uint256,address)", +"55374799": "shortRatesLastUpdated(bytes32)", "5537f0ef": "betFinalize(uint256,uint8)", +"5537f99e": "setstring(string)", "55380ed8": "GOOGToken()", +"55381f00": "CLevelTxCount_()", "5538210e": "tokenSweep(address,address)", +"55382a6c": "ascensionInterval()", "5538689c": "changePartner3(address)", +"55389256": "setO(uint256)", "5538c964": "getPartnerInfo(uint256)", +"55390ad3": "Sold(uint256,uint256,address,address)", "55390b0d": "PrestoToken()", +"55399ac9": "_stakeBalances(address)", "5539a9c2": "refreshPublicFundingPersonalEthLimit(uint256)", +"5539bc69": "addCollateralBase(address,address,address,address,address,address,bytes32,address,address,address,address)", "5539d400": "authorizedAddress()", +"5539e462": "outOfGameSupply()", "553a48fd": "isFunctionRemoveAuthorizedAddress(bytes)", "553a5c85": "mintedTotally()", "553a90b8": "updateStopGameOnNextRound(bool)", "553aaafe": "MSPPlaceHolder(address,address,address,address)", "553b196f": "setPurchasingPaused(bool)", +"553b1a45": "get_old_user()", +"553b5329": "autoPoolIndex(address,uint8)", "553b6975": "setAmbassador(address)", "553b6f83": "lastOracleFee()", "553b74aa": "getNumberWallets()", +"553bc4cd": "getBeaconAddress(string,uint8)", "553bf56d": "accept(uint256,string,uint256)", +"553bfd20": "PrivateSaleTokenGenerated(address,address,uint256)", "553c02ec": "getCountryBet(uint256)", "553c6de9": "getPreIcoInvestor(uint256)", "553cc48d": "Player(string)", "553cd9c6": "MLC()", "553d0d12": "transferTokensThroughProxy(address,address,uint256)", +"553d1df3": "LINA()", "553df021": "deal()", +"553e8c1e": "exchangeA()", "553eb4db": "registerRewards(address[],uint256[],uint256)", "553ec6be": "batchCancelSale(uint256[])", "553f4fb3": "requestRand()", "553f9157": "completeSale(uint256,uint256)", "553fd043": "setMoneyRange(uint256)", "553fd8ee": "ALLOC_FOUNDATION()", +"554080c7": "coldWallet_40()", +"5540a03c": "addBBFarm(address)", "5540e6c1": "iMMCoinsellPrice()", +"55415116": "TokenDistribution(address,uint256)", "55416e06": "voteA()", "5541b817": "_leftChild(uint8)", +"5542189a": "getAvailableRedeemAmount(address)", +"55423669": "calc_token_amount_withdraw(address,uint256,address)", "554249b3": "delegateIncreaseApproval(address,uint256,address)", "55426bad": "processPresaleOrEarlyContributors(address[],uint256[])", "55427b42": "getBalanceofModifiedWeth()", "5542f680": "retrieveToken(uint256)", +"55432fb7": "farmMint(address,uint256)", +"55433d59": "claimrequests(uint256)", "55434bc9": "ToggleFreezeSelling()", +"5543aab3": "setupRoles(address,address,address)", +"5543dadc": "addPynths(address[])", +"55445249": "rate(uint256,address,address,uint256)", +"5545192b": "dates(string)", "55456f58": "maxcap()", "554571db": "updateNarco(uint256,string,string)", "5545f12b": "OnChainOrderBookV013bFactory()", @@ -48947,9 +89581,12 @@ "554600fa": "setOraclizeTimeTolerance(uint256)", "554644d5": "_removeHolding(bytes12)", "554652ce": "airdropToken(address[],uint256[])", +"55466c37": "withdraws(uint256)", "554680f2": "updateActivation()", "5546a12c": "setInformation(string,string)", "5546e1ab": "getMyRefund()", +"554792fd": "getBasicObjInfo(uint64)", +"5547c0f5": "_assetPrice()", "5547d2d9": "setHtlcSettlePeriod(uint256)", "554803c7": "RTCCOINTOKEN(uint256,string,string)", "55485779": "minGas4Accts()", @@ -48962,200 +89599,404 @@ "5549ce6d": "ticketTransfersPerAmount(uint256)", "5549f46c": "CustomerInsert(string,address,string,int256)", "554a854e": "TransferCryptibles(address,uint256)", +"554a9dcf": "Voted(uint256,uint256,bool,uint256)", "554ad7ff": "queryNTVUs(uint256,uint256)", +"554b9eff": "secretMsg()", "554bab3c": "updatePauser(address)", +"554c05b1": "arAsset_contents(uint256)", +"554c1b1f": "universe()", +"554c798a": "rewardTokenPerBlock()", +"554c9918": "createGirl(uint256,address,uint16)", +"554cd9ff": "onAffPayout(uint256,address,bytes32,uint256,uint256,uint256,uint256)", +"554ce136": "balanceOfDetail(address)", "554d0429": "getArrBoolField2()", "554d184b": "getPrices(address,address[],address[])", "554d27ca": "createOffer(address,uint256,uint256,bool,uint256)", "554d578d": "getCap()", "554d758e": "houseStatsOf(address)", "554dbfc2": "EMISSION_FOR_SALESTAGE6()", +"554de08c": "publicTradeWithLimit(uint8,address,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint256)", "554e00b4": "miniGameStart()", "554e6c61": "getTargetBNumber()", +"554e8c49": "AdminCheck(address)", "554ed8b6": "escrowTransferList(uint256)", +"554edf2a": "sideService2index(address)", +"554f4243": "deleteBugBountyTeamAddress(uint256)", +"554f8cc3": "totalAllocPoint(uint256)", +"554f94db": "updateDelay()", +"5550247b": "TWAP2Hour()", +"555027ed": "setDebugDates(uint256,uint256)", "5550e4f3": "blackBoxAddress()", +"5550e607": "setInitFailFlag()", +"5550e8c4": "idirr(address)", +"55513d1f": "userAddresses(uint256,uint256)", +"55513e23": "_ruler(uint256)", "5551b6b6": "isDelegateEnable()", "5551d1b7": "isAllowToIssue()", +"555200d5": "BalanceSelf()", +"55529f92": "currentDepositedAmount(address)", "5552a483": "newOffer(address,uint256,string,uint256,uint256)", "5552d1cb": "prizeIncr()", +"5552ea40": "providerType()", "55532953": "LOCKED_ADDRESS()", +"55535d98": "coefficientComp()", "5553dc1e": "THToken()", "55540004": "createCampaign(address,uint256,string)", +"555407ee": "set_flag_for_current_ico(string)", +"555413f7": "buyprice()", +"55541d08": "balanceCallback(address,address,uint256)", +"55549ed2": "f(int8,uint8)", +"5554a2f3": "liquidtyAddr()", +"5554fee5": "doAirDropAddition()", +"55552335": "soilPerTree()", "5555d6d6": "exist(uint256,address)", +"5555e92e": "WalletAddressChanged(address,address)", "55560fd5": "mLoadAndReturn(address)", "55566036": "getGamePool(uint256)", +"55568b03": "dg()", +"5556925c": "getFundDetails()", +"5556974d": "getChangeRequest(uint8)", +"5556ae72": "Keccak_Password(uint256)", "5556db65": "totalMined()", "5556f3f6": "RareCards()", +"5557443d": "updateSetReturnsBotAddress(address)", "55575ddb": "setRevokeAddress(address)", +"55579d32": "wrappedToUnderlying(address)", +"55583404": "changenumber(uint256)", "55589cdd": "addressOf(address,string)", "5558e1c3": "setMinToken(uint256)", +"55592675": "initialize(address,address,address[],uint256,uint256)", +"55596467": "stakerPoolsToDelegatorPools()", "555984fd": "cancelMintRequest(uint256,string)", +"5559d80d": "is_valid()", "5559d8d9": "getClamTax()", "555aaff6": "calculate_range_attempt(uint256,uint256)", "555ab116": "AhooleeTokenSale(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"555ac876": "makeOrder(uint256,uint256,address,address,uint256,uint256)", "555ae2c6": "STQPreICOBase(address)", "555af8f4": "addressFundHolder()", +"555b334a": "getAccruedRewards()", +"555b37be": "getPath()", "555b6162": "allBalances()", +"555bcc40": "_setImplementation(address,bool,bytes)", "555be5bd": "assignNewPlanet(address,uint256,uint256,uint256,string,string,string)", "555befa8": "set1RoundTime(uint256)", +"555c3c10": "_getSigner(address)", "555c4758": "distributeTimelockedTokens(address[],uint256[],uint256[],uint256[])", +"555c937d": "_transferCollateralTokensFrom(address,uint256)", +"555d45b2": "t(address,address,uint256)", +"555d563d": "maxPhase2()", "555d8e3c": "_printACourse(uint256)", "555db767": "test_2_accessRestriction_newProposal_shouldThrow()", +"555df340": "totalAt(uint64)", "555e6582": "executeMintProposal(uint256)", +"555e94f7": "getPaymentSize()", "555ea48c": "becomeHost(bytes32,uint8,bytes32,bytes32,string,string,string)", +"555ec74f": "modifyParameters(bytes32,uint256,uint256)", "555f323a": "totalBurnedTokens()", "555f498a": "getInvestorsTokens(address,uint256)", +"555f4ec7": "poolFilled(uint256)", "555fe48a": "batchTransferFrom(address,address,uint32[])", +"556043ef": "ias()", "55605eee": "claimTokenReserveEcon()", +"556063b5": "_getArraySlot(uint256,uint256)", "5560ada8": "rateAddress(address,uint256)", "5560d365": "horseShoeForSale(uint256,uint256)", "5560ede2": "LYToken(uint256,string,uint8,string)", "55616107": "setCOOAddress(address,address)", "55619911": "emergencyTransfer(uint256,address)", +"5561ae62": "paymentDate()", "5561c0e2": "registerChain(bytes8,uint256)", +"5562e45b": "adminRegistration(address,uint8)", "5563d919": "cancelCraftingAuction(uint256)", +"55640d99": "ownerCrowdWithdrawal()", "55642be7": "getRoundBets(uint16)", "55642cf9": "CappedBonusSale(uint256)", "55642e53": "blacklist(bytes32)", +"5564692f": "setNewCreator(address)", "5564a08e": "setGame()", +"55651f71": "isOnlyStateSyncerContract()", +"55658688": "changeStartedState(bool)", "5565ca9d": "buyShip(uint16,uint16,uint8,bytes32)", "5565ee7a": "exchangePointToCoin(address,uint256,string)", +"55664d37": "getLockedStakeBalance(address)", "556665db": "expireTimeLimit()", +"556696df": "voteChoices(uint256)", "55674064": "totalSupplyWithoutDecimals()", "55674efe": "BondkickToken(string,string,uint8,uint256,int256)", +"556754ad": "spawn(uint256,int256,int256)", +"55678cfc": "writers(address,address)", "55684aa6": "originBurn(uint256)", "55688000": "burnIndexedFromByAddress(address,address,uint256)", "5568fd5d": "icoPhase2End()", +"55695de6": "__withdrawTrial(uint256)", "5569e58c": "EthereumPocket()", "5569f5d0": "preSaleFinished()", "5569fc0b": "CreateSale(uint256,uint256,uint256,uint64,address)", +"556a3104": "_buyHoldersFee()", "556a3689": "mint_Crowdsale(address)", "556ae598": "depositBomb(uint256)", "556b22c1": "get_record_count()", "556b6384": "removeBlacklistDestroyer(address)", +"556b790f": "buyerAddresses(uint256)", "556bcece": "reinvest_color(address,uint256,uint256,uint256)", +"556be101": "registerFrontEnd(uint256)", +"556bf8ee": "betsOnFighter(uint256,uint256)", +"556c1a71": "projectFund()", +"556c4c72": "bonus(address,bool)", "556cbc03": "setDefaultWhitelistVestingParameters(uint256,uint256,uint256,uint256,uint256)", +"556d4777": "oracleWhiteList(address)", "556d5139": "getAverageTokenPrice(address)", +"556d8628": "expectedTokenSupply()", +"556d89dd": "setL2BridgeAddress(address)", "556db16a": "validatePurchase(address,uint256)", +"556dd641": "SetCTxRewardsAddress(address)", "556e2eb9": "TBL4TokenSale()", "556e56d1": "BurnupGameFinance(address)", "556e6edc": "indice()", "556ed30e": "deactivated()", "556f0dc7": "granularity()", +"556f4f01": "claimTokensBySpecialTeam()", +"556f6e6b": "updatePeriodFinish(uint256)", +"556f7fc0": "totalYeldFeeMined()", "556fe562": "notEqual(bytes32,bytes32,string)", +"5570aac6": "RegisteredPrefix(string,address)", +"5570f39c": "successor(address,address)", "55710346": "createTokensFromOther(address,uint256,address)", +"5571130c": "djonniPercent()", "557119db": "withdrawForCharity(address)", "5571954d": "_distributeRegistrationBonus(address)", +"557210ed": "SwingyRewardsTransfer(uint256,uint256)", "55728d04": "setIssuer(address,uint256)", +"5572c3be": "multisendErcTESLA(address[])", +"5572d1d5": "bnbRouter()", "5572f9c6": "exchangeEther(uint256)", +"5573265f": "PRESALE_MIN_DAILY_PER_USER()", "55737391": "LBRSMultitransfer(address,address)", "5573a34c": "FP_SCALE()", +"5573ad58": "brightIdVerifiers(uint256)", "5573c582": "walletTransfer(address,address,uint256)", +"5573e3ef": "verifyTask(uint256)", +"5573f517": "test_wmul_rounding()", +"557440d1": "_tierOneBonus()", "5574cff5": "LOVEYOUFOREVER()", +"557531af": "aliasesReversed(bytes32)", +"5575bf1e": "canTokenInvest()", +"5575ce11": "CockAccounta()", +"55761452": "_initMaxValue()", +"5576422c": "makePassiveIncomeInvestment(uint256)", "55764c81": "updatedTokensPerEth(uint256)", "55765e9a": "createMeme(string,uint256)", +"55767545": "getMyGoal(address)", "5576af7d": "TransactionConfirmedAfterDispute(uint256,uint256)", "5576b791": "transferWithVesting(address,uint256)", +"55776b77": "addLiquidity(address,uint256,uint256)", "5577e89f": "testEqualityUint()", +"55789db2": "userReinvestDivsOnCycle(uint256)", "5578b51e": "CorelliCoin(uint256,string,string)", "5578d24e": "addOldPresidents(uint256[],address[])", +"5578ef6f": "setTargetStock2Flow(uint256)", +"557901f9": "closedType()", "5579996d": "CHW()", "5579ac74": "dna3(uint256)", +"5579ed01": "rewardsVault()", "5579ff8e": "walletBlogs()", +"557a6403": "isRoot(address)", +"557a9a36": "withdraw(uint256,uint256,bytes32,bytes,address,bytes)", "557b0dc9": "addCar(string,string,string,uint16,string)", "557bed40": "SocialMediaPayToken()", +"557bf762": "juniorBondId()", +"557c77e3": "getRecomCount()", +"557cbe8c": "regUser(uint32,uint32)", +"557cc7e2": "HouseForSale(uint256,uint256,address,uint256)", "557d0195": "SuomenMarkka()", "557d0479": "aidrop(address[],uint256)", "557d0999": "userreinverst()", "557dc796": "endRoundSeed()", +"557de8ab": "configPartner(uint256,address[],uint256)", "557ed1ba": "getTime()", "557f4bc9": "changeContractOwnership(address)", "557f9ea6": "aDeposit(uint256,uint256)", +"557fbc95": "claimSwapFee(address)", "557feee1": "setRegionCurrentImageId(uint256,uint256)", +"558058fa": "negaWattString()", +"5580db65": "WorkerPoolEviction(address,address)", +"5580f72a": "bal(address)", "5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", "55810d11": "appFund()", "5581800c": "isCappedInEther()", "5581be8d": "privatePresaleSupply()", "558225fc": "setAtomSons(uint256,uint32)", "558234f0": "USD_PURCHASE_AMOUNT_REQUIRING_ID()", +"5582579f": "getEtherFund(uint256)", "55827137": "refreshVault(address,uint256)", +"55828c16": "releases(address)", +"5582a455": "changeInitialRatio(uint256,uint256)", "5582c08d": "startMonarchyGameReward()", "5582df33": "performInitialAllocations()", "558305f9": "isFreezeEnabled()", "55832ffc": "purchaseStartTime()", "5583318a": "TOL()", +"558360ca": "TokenIssued(address,address,uint256,uint256,uint256)", +"55837757": "setSystem(address)", "55838881": "STAGE_ONE_BET_LIMIT()", +"5583a930": "isDue(uint256)", +"5583be2e": "logBytes5(bytes5)", +"5583e7a3": "minXmonNFT()", "5584002b": "_isSimulation()", "55843fda": "getAdOwner(uint256)", "5584c4f9": "getActiveProposals()", +"55850ddd": "updateDPOTokenAddress(address)", +"55855ecc": "liquidityRewardData(address,uint256)", "558599ea": "SQR_TOKEN_DECIMALS()", "55866c8d": "isRefunded(uint256)", "55869af1": "fromVersion()", +"558708d9": "changeCanDepositStatus(string,bool)", +"55872813": "previousHodlers(uint256)", "558790d8": "testInitialTokenBalanceShouldBeZero()", "5588227e": "restCrowdSaleAddress(address)", "55889d01": "setMaxLockPeriod(uint256)", "5588b929": "streamerContract()", +"55892b74": "exp_zero(uint256)", +"55893bfe": "addTypeOneMapping(string,address)", +"5589f50b": "maggotAddress()", "558a7297": "setOperator(address,bool)", +"558a7c06": "auctionPriceParameters(address)", "558a8f47": "sendFutureSupplyToken(address,uint256)", "558b5aab": "setSellingToken(address,uint256,uint256)", +"558c135c": "getVirtualFloorLiquidityBalances()", +"558c3b2f": "depositCTkn(address,uint256)", +"558cb520": "setfucknance(address)", "558da2e3": "preSaleprice()", +"558db9f5": "testllPerBlock()", "558e223f": "_buyPutToOpen(uint256,uint256,uint256,uint256,address)", "558e44d3": "MAX_FEE_PERCENTAGE()", +"558ef78a": "Smith()", "558f285f": "unsetMyIdentity(uint256)", "558f46c8": "getZTKChecks()", "55909da3": "spreadTokens()", +"55909f87": "autoClearAuction()", "5590e4d2": "toBytes32(bool)", "55915b97": "initialSuppy()", +"559211ea": "mockChecksFailing(bool)", "55923471": "fiveHourCap()", "55923cc5": "ElementToken(string,string,uint256,uint8)", "5592d687": "settleBounty(uint128)", "5592fc71": "getLotteryWinners()", +"5594352b": "Associate(address,address,bytes32,bytes32)", +"55945d30": "_withdrawAnyToken(address,address,uint256)", "55947d16": "XJJ()", "5594e88c": "delegateToken(address,address)", "559510d8": "left53(uint256)", "55951e15": "dollarToLoveyRate()", "55954b49": "initVesting(address,uint256)", +"5595ac20": "setERC20TokenFrom(address)", "559659fa": "getTotalRefund()", +"55973a90": "onlyWhitelistedAddressesAllowed()", +"55974ce8": "changeWaitPeriod(bytes32,uint256)", "55976b05": "depositNotification(uint256)", "5597801a": "addwhitelistedBatch(address[],address)", "5597e9dd": "setCompte_36(string)", "5597f3a5": "createRecord(string,uint256,address,string,string,string)", +"559819e8": "getCommunityAvailable()", +"55988df0": "bitd()", "5598c576": "reveal_move(bytes32,uint8,bytes32,bytes32)", +"5598e66b": "listVoters(uint256)", +"5598f542": "zrxAllowlist(address)", "5598f8cc": "getCampaign(uint256)", +"559a959e": "ssdDaoAddr()", "559ac092": "getAirdropIdsByContractAddress(address)", "559b0432": "yearCap()", "559b0ed5": "giveBackOwnership(address)", "559b1df4": "TokenStoreUpdated(address,address)", "559b678c": "IsLimitPart(uint8,uint256)", +"559bbb83": "transferOwnership(string,address,uint64,address,uint64,uint256,uint256)", +"559bdcaf": "ownersPercent()", +"559c270e": "get_signatures_count(uint256)", +"559cd4ee": "debtBalanceOfAndTotalDebt(address,bytes32)", +"559d5532": "_getTimeHelpers()", +"559d5756": "deployedETFs(uint256)", +"559e051c": "extractWinner()", +"559e14f6": "UINT_MIX_TALENT()", +"559e3f3a": "allBorrowContract(uint256)", +"559e41a3": "getWETHBonusForReferrals()", "559e5e06": "updateTokenAge()", +"559ea9de": "setLifeDiversity(uint256)", "559ec80d": "settleDeposit()", "559ed339": "setTokens()", "559f05dc": "canTrade(address)", +"559f70dd": "yourStakedB2U(address)", +"559f9059": "AllowanceChanged(uint256,uint256)", "559fb6f5": "assertAvailable(uint256)", "559fd7ee": "setYearOneMultiplier(uint256)", +"559fde51": "getbuyPower(address)", "55a01845": "forceFinished()", "55a05335": "totalDragonLotteryNumber()", "55a0b387": "getFreeToken(bytes32,bytes32,uint8)", "55a129bd": "Tier(uint256,uint256,uint256,uint256,uint256,uint256)", +"55a17aba": "runtime(uint256)", +"55a1971d": "set_exchange_ratio(uint256)", +"55a1c69c": "updatehardCap(uint256)", +"55a204f9": "getFactory(uint256)", +"55a21b9e": "_curve()", +"55a2ba68": "transferERC20(address,address,uint256,uint256)", +"55a31309": "claimNFTs()", +"55a3194d": "cbondsHeldByUserCursor(address)", +"55a35d2b": "curverenPool()", "55a36746": "newDigitalContract(string,address[])", +"55a367e4": "setPackageLevels(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "55a373d6": "tokenContract()", "55a392ac": "ExerciseEndTime()", +"55a3b2c1": "amounts(address)", +"55a3c503": "getTotalInviteAmount(address)", +"55a3c666": "makeActiveToSell()", +"55a3e90f": "GetFieldModulus()", "55a3f425": "getBalanaceOf(address)", +"55a4f8d2": "FILL_TYPEHASH()", +"55a50ede": "setRebalanceEnabled(bool)", +"55a5194b": "SetAdmin(address,bool)", +"55a51956": "claimAfi(address[],address[])", +"55a51cde": "getEggDataById(uint64)", "55a53ed0": "EtherSteem()", +"55a584dc": "playDiceGame(address[],uint256[],uint256,uint256)", "55a5a8d4": "DHUBTest02()", "55a5dc3c": "SpegniCassaAutomatica()", "55a5f702": "right45(uint256)", +"55a60381": "trackedPairs(uint256)", +"55a604f1": "Cat3(address,uint256)", +"55a68ed3": "setGauge(address)", "55a6b827": "setPrices(uint32,uint32)", +"55a6ebd4": "Gajesh()", +"55a7f337": "encKey(address)", +"55a828dd": "approve_195(address,uint256)", +"55a83031": "setBuyoutSenderLimit(bool)", +"55a84057": "releaseLokedBIDS()", "55a85240": "random(bytes32,uint32,uint256)", +"55a8ceca": "setName(bytes3)", +"55a8deab": "registrable()", +"55a8f71a": "increaseCommitment(uint256,uint256,address)", +"55a94c56": "getSushiswapV1AmountOut(bool,address,uint256)", "55a964a7": "distributeALLY(address[],uint256,uint256)", "55a9794a": "extract(uint256,uint256[])", "55a9a87c": "fightMonster(uint16,uint8,uint8)", +"55a9f44f": "EndParking(uint256)", +"55aa41bf": "getPeriodRecordedFees(uint256)", "55aa8ad4": "Filesystem()", +"55aad167": "onepointtwentyfiveperc()", +"55aadf50": "getWithdrawingStartTime()", +"55aae7c2": "RateInfo(string,uint256)", "55ab314e": "setOrders(uint224,uint32,uint8,uint8,uint64,uint64,uint64)", +"55ab364e": "setRefRewardPer100(uint256)", +"55ab9688": "burnedTokensReceiver()", +"55ac54e7": "signAdmin()", +"55ac5b34": "SalaryBunny(uint32,uint256)", +"55aca1ec": "pausePool(address)", +"55ad3eef": "ceilSqrt(uint256)", "55ad798f": "removeRobot(address)", "55ae603e": "sell(uint16,uint16,uint8,address,uint256)", "55aea767": "batchClaim(uint256)", "55aed629": "SpinnersByAddress(address,uint256)", +"55aef0d6": "getDepositValue(address,address)", "55af5c59": "editBalanceOf(address,uint256)", "55afb12d": "isStbMintedForStaEx()", "55afee43": "validateKYC(address,bool)", @@ -49163,97 +90004,166 @@ "55aff703": "updatedBet(uint256)", "55b09c58": "myuseOf(address)", "55b1182c": "stakeholdersPoolAddress()", +"55b11f18": "unbox(uint256,uint16,uint16)", "55b12570": "TransferError(address,uint256)", "55b1aa23": "DEEPPASA()", +"55b23308": "transfere(address,string)", "55b23f4c": "econVestingStages()", +"55b26b38": "transactionRawToBytes(uint256,address,uint256,bool,bool)", +"55b280f9": "transferStuff(address,uint256,address)", "55b2bb0f": "MIN_FUND()", +"55b2df47": "FUNDING_SALE_BONUS(uint256)", "55b32c83": "sendFoundation()", +"55b36f41": "holderIDs(address)", "55b37685": "balancePreSale3()", +"55b3c6db": "trans2(address)", "55b4bb4b": "HeavyLitecoin()", "55b4f231": "vestTokensDetail(address,uint256,uint256,uint256,bool,uint256)", +"55b58cc6": "minStakeDurationDays()", "55b5ec64": "proceeds()", "55b62dcf": "getThresold(uint256)", +"55b64220": "setMaxLockedDays(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()", +"55b73e04": "oxygenPerBlock()", +"55b7611a": "BraveInvalidateStage(uint256,uint8)", "55b775ea": "setFeed(address)", +"55b787e1": "aaveCooldown_Show_Cooldowns()", "55b8415e": "processReward()", "55b860e1": "_updateDiscount(uint256,uint256)", +"55b87b5f": "sellTime(address)", "55b8ef5e": "UserInfo()", +"55b90eaf": "getDomain(uint64,uint64)", "55b93031": "minNumber()", +"55b95246": "_carMechanicsAddress()", "55b954ad": "getRestTokenBalance()", +"55b976fe": "yzyAddress()", +"55b9b4a8": "liquidityLoanTarget()", "55b9b9cf": "PXLToken(uint256,uint256,uint256,address,address)", "55b9ca40": "withdrawCell(uint256)", "55ba13da": "VaN(address)", +"55ba1cb8": "setVaccine(string,string,uint256,uint256,int8,int8,uint256)", +"55ba2f4f": "stakingLimit()", "55ba343f": "getMarket(bytes)", +"55ba6036": "getGasRateLimitEpochStart()", +"55baee63": "getIsCloseSwap()", +"55bb14f2": "poolInfoCount()", "55bb34e5": "enableEmission(bool)", +"55bb60eb": "currentMineRate()", +"55bbef67": "approve(address,uint256,string)", +"55bc07b6": "normalizedRatioTest(uint256,uint256,uint256)", "55bc0f07": "returnLongTokenAmount(address[3],bytes32)", +"55bc5c7e": "issueFlight(string,string,uint256,string)", "55bc8725": "bannedAddresses(address)", "55bcaf06": "halfMultiplier()", +"55bd03af": "rID2Round_(uint256)", +"55bd2ecb": "getLastCDP()", +"55bd513f": "transferPosition(uint256,address)", +"55bd615c": "addPynths(bytes32[],bytes32[])", "55bdd4ac": "offerCatForSaleToAddress(uint256,uint256,address)", +"55bddba0": "referree(address,uint256)", +"55bdeb7c": "getLatestDaiVsWeiPrice()", "55be1168": "view42()", "55bf3dbb": "OrangeToken()", "55bf5656": "crowdfundStartDate()", +"55bf98fe": "developmentTreasury()", "55bfe5b1": "chfRate()", +"55bfec88": "lockingStartTime()", +"55c00fb5": "setStimulusPriceChangeMax(uint256)", "55c01345": "coupon()", "55c081d4": "setTier(address)", "55c08200": "setSpecialPeacefulSkill(uint256,uint8)", "55c0a5f4": "appendSource(address[],uint256[])", +"55c0bd7d": "calculatePriceParams()", "55c1743d": "SEOS(uint256)", +"55c18555": "TokenPurchased(address,uint256)", "55c1e611": "cancelBets()", "55c208ad": "TimeDecayingTokenBoundaryRange(uint256,uint256,uint256,uint256,address)", "55c28ed0": "zeuscoin()", "55c2a0ac": "addQuantity(address,address,uint256,uint256)", +"55c32a23": "pullPoolShareFromLib(address,uint256)", "55c33624": "mock_set(address,address,uint256,uint256)", +"55c35cc9": "PrePresaleTokensValueChanged(uint256)", "55c39193": "removeBoardOnUser(address,address)", +"55c3b7a4": "getUserDifficultyConstant(address)", +"55c3bf10": "timeAcquired()", +"55c40e66": "getAssetForEth(address,uint256)", +"55c46bf7": "updateRegistry(bytes32,address,bytes32)", "55c47867": "withdrawTokensForCloudexchangeTeam(uint256,address[])", +"55c48b58": "CreateDepositAddress(address,address)", "55c4a8bf": "vig()", +"55c4adf1": "Stopped(address)", "55c4b226": "pushUpdate()", "55c4c5b3": "Cartycoin(uint256,string,string)", +"55c4d48f": "getLockedAsset(uint256)", "55c4e704": "enableAgency(address)", +"55c57ce0": "HatOfferedForSale(uint256)", +"55c5af6e": "MarkInspected()", "55c60500": "setRemainAirdrop(uint256)", "55c623c6": "bidEth(uint256)", "55c64ce1": "resetReward()", "55c797ce": "setBonusWallet(address)", "55c79f49": "payToEvaluator(uint256,uint256)", +"55c7b726": "airTransfer(uint256)", "55c81595": "raffleState()", "55c81ae9": "recipientContainer()", "55c8c6fd": "tokensSupplied()", "55c94f04": "closePosition(bytes32,uint256,address,address,bytes)", +"55c9664f": "totalBurntPTY()", "55c9e290": "DOI()", "55c9e926": "getNumPlayers()", +"55ca2902": "transferOutToken(address,address,uint256)", +"55ca6fd3": "totalrewardTokenReward()", "55ca92f8": "createBallot(uint256,uint256,address,string)", "55cacda5": "minimumEpochInterval()", "55cb155a": "WebcoinToken(uint256,address[])", +"55cb1c58": "canPlayTimestamp()", +"55cb2666": "UniswapV2Router02()", "55cb61ca": "EthTransferContract(address)", "55cc4e57": "setIssuer(address)", +"55ccf393": "setBeneficiary(bytes32,address)", "55cd1915": "GA_chain()", +"55cda15d": "last_timestamp_multi(address)", +"55ce06c2": "blackListFrom(address)", "55ce15f4": "transferAmount(address,uint256,uint256)", "55ce3b9a": "setFundWallet(address)", "55ce596b": "flowingHairAddress()", +"55ce7608": "getBsovToken()", "55ce76e6": "feeAmountThreshold()", +"55ce9353": "_setParams(uint256,uint32,uint256,uint32,uint32)", +"55ced933": "RRSetUpdated(bytes,bytes)", "55cf1008": "numberOfValidPartners(uint256,uint256)", "55cf4e30": "setAccesser(address)", +"55cf68e4": "setMkatPerBlock(uint256)", "55cf969d": "transferReverseProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", "55cfa833": "clientmanager()", "55d0012d": "signupUserWhitelist(address[],uint256[])", "55d04877": "_payRefund(bytes32)", +"55d0a1d0": "burnedSupply()", +"55d0ad18": "getReceived()", "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])", +"55d20484": "__ONS_init(address,address,address,address,address)", +"55d2842f": "setLimitBuySellValue(uint256)", "55d28f20": "configure(address,address,address)", "55d374e9": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "55d39bc0": "setETHPriceUpperBound(uint256)", +"55d41692": "pieceToken()", +"55d450ec": "upgradeProductImplementationsTo(address,address,address)", "55d4956f": "setEndSaleDate(uint256)", "55d55a76": "isActionAccount(address)", "55d56ddd": "_adoptAxies(address,uint8,uint256,address)", +"55d58a1b": "remedy(address,uint256,string,string,uint256,uint256)", "55d595d1": "rollbackContract(uint256,address)", +"55d5d326": "setBuyerFeeSigner(address)", "55d66c3e": "getMarketOrderWorkerpoolOwner(uint256)", "55d67ba0": "Begin(string)", "55d6d06e": "XIDToken()", @@ -49262,36 +90172,69 @@ "55d7592d": "emergencyETHDrain()", "55d79248": "miningTenPlat()", "55d7fe2b": "RATE_SALESTAGE5()", +"55d87d06": "ParticipantRegistered(bytes12,address,uint256,address,address)", "55d8bbd5": "beginSell()", +"55d8d135": "imageMetadata(uint256)", "55d9275e": "payMoneytoAuthor(address)", +"55d98cc5": "updateConditionState(bytes32,uint256)", +"55d9c22a": "autoSwapExactTokensForETH(address,uint256)", +"55d9d2b1": "informaQuantidade(address)", +"55d9dc5f": "getUserClaimByIndex(uint256)", +"55d9f711": "listInactiveAdmin()", "55dac078": "SecuredNotes()", "55daf6e6": "setInitialOwners(address[],uint256[],uint256[])", +"55db1265": "SellCallToOpen(address,uint256,uint256,uint256,uint256)", "55db4092": "setTOS(address,bool)", +"55db4acf": "lockInReward()", +"55db4f83": "tokenHistories(uint256,uint256)", +"55db510a": "totalONEKFeeMined()", +"55db55b7": "changeDividendContract(address)", +"55dbd8eb": "upgradeProxyTo(address)", +"55dc288a": "bonusPct()", +"55dc2d11": "list_athletes(uint256)", "55dc3b65": "DAVCoin()", "55dd16cd": "CrowdsalePhase1(uint256)", +"55dd18fc": "minimumEpochTime()", "55dd574c": "startPreSale()", "55dd8171": "bbFounderCoreStaffWallet()", "55ddc9f0": "mainSaleFirstStartDate()", +"55de1faf": "setAllowedContract(address,bool)", "55de28ae": "burnBadge(uint256)", "55de5a93": "getCurrentEdition()", "55de97ac": "OBR_Duration()", "55deb8fc": "tell(uint256)", +"55df17de": "totalTokensToBeClaimed()", "55df34f2": "leftOverTokens()", +"55df9566": "TrustUnset(address,address)", +"55dfaf3c": "updateOneArg(uint256)", "55dfb430": "Test1(int256)", "55dfc97c": "limitSupplyPerYear()", +"55dff82f": "MAX_VOTES_DEPOSIT()", "55e0aece": "getListingService(uint8)", +"55e0dd61": "OperationCancelled(bytes32,address)", "55e1726c": "LogSetStageStartTime(bytes32,uint256)", "55e17544": "Tardis()", +"55e1b4c6": "approve_647(address,uint256)", +"55e1ded7": "ethbToken()", +"55e20289": "ustd2dai(uint256)", "55e21474": "firstRoundCosmosTokensLimit()", "55e2305e": "preauthorize(address)", +"55e2da2c": "verifyTest(string,bytes)", "55e37cec": "discountRatePreIco()", "55e38f9b": "canAddNewClient(address)", +"55e39899": "updateDirectSellBurns(bool)", +"55e39d34": "getCertificateByTokenId(uint256)", "55e3f086": "startRound()", "55e40d98": "updateItem(uint256,string,uint256[6])", "55e447aa": "queryBalanceOf(address)", "55e46476": "createA()", +"55e47ca3": "allocations1(address)", +"55e5c4e4": "finishChangeTreasuryFurnace()", "55e61dcd": "operationsInQueue(uint256)", +"55e65bda": "sellerMarginByHash(bytes32)", +"55e6663a": "checkOwnRefBalance()", "55e6b18e": "victorieumStaticToken()", +"55e6ef34": "whitelistadmin()", "55e6fc50": "deposit_fee()", "55e79d29": "regex()", "55e7a663": "setLowerPricePercentage(uint256)", @@ -49301,418 +90244,814 @@ "55e9caa1": "log_move_fees(address,address,uint256)", "55ea14f2": "atomicxSupply()", "55ea2cf3": "GameBit()", +"55ea2d54": "totalWinnerTicketsExpiration(uint256)", +"55ea6c47": "resolve(address)", "55eb27c8": "getActualUserTokenBalance(address)", +"55eb3657": "RunnerUpSubmission(address,uint256)", +"55eba868": "setUSDTAddress(address)", "55ebcc83": "Market(bytes,uint256)", +"55ebdeef": "daoFundSharedPercent()", +"55ec014b": "signatureVerify(address,bytes,uint256,uint256)", "55ec4da9": "VaultMint(address)", "55ec671a": "canBet()", +"55edc878": "setSellEvent(uint256,uint256,uint256,uint256,uint256)", +"55ee1fe1": "_setPriceOracle(address)", "55ee684d": "initLogo()", "55ee6afb": "Wallet(address,address)", +"55ee9874": "Award(uint256,uint32)", "55eed9de": "developerFunds()", +"55ef1df2": "exchangeWallet()", "55ef2913": "isOperatorAuthorizedFor(address,address)", +"55efbeca": "getLandMinedBalance(uint256,address)", +"55efbfab": "MAX_USERS_BONUS()", "55efe565": "Caligula()", +"55eff2f6": "addAllow(address,bool)", "55f03816": "orderOnSaleAuction(uint256,uint256)", "55f0690d": "transferAndLockMulti(address[],uint256[],uint256[])", +"55f0cc45": "ReturnPayment()", "55f0d02c": "ResidualValue(uint256,string,string)", +"55f1170c": "treatmentDetails(uint256)", "55f13278": "presaleTokenCreationCap()", "55f14c30": "minter2()", "55f150f1": "desc()", "55f1a3c8": "disableTokenSale()", "55f21eb7": "getProvider(address)", +"55f25355": "predictToken(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "55f25e3f": "getLavaTypedDataHash(bytes,address,address,address,uint256,uint256,uint256,uint256)", "55f28260": "getOwnerAt(uint256)", "55f29166": "cancelUpgrade()", +"55f29365": "updateRanDistance(uint256)", +"55f2a7bf": "MarketTransferred(address,address,address,address)", "55f2dcb2": "GouBi()", "55f2de40": "abioSold()", +"55f2fe62": "getCommissionTotal()", "55f39677": "phase2WeiRaised()", "55f3c49c": "bookrequest(uint256)", "55f413c9": "presale3_startdate()", +"55f42eed": "_convertRealToVirtualUnit(int256)", +"55f48404": "_addBonus(uint256,uint256)", "55f48a46": "CUSTOM_ERC20_BURN_SERVICE_NAME()", +"55f4fdde": "setLoanFeeRationInLoan(uint256)", "55f54552": "setPaySize(uint256)", "55f57510": "positions(address)", "55f5856f": "transferToLimited(address,address,uint256,uint8)", "55f6a412": "modify_NovumAddress(address)", +"55f6e87a": "bulksend(address[],uint256[])", "55f78af8": "getLockBalance(address)", +"55f7f2e7": "AuditRegistered(address,bytes32,bool)", "55f804b3": "setBaseURI(string)", +"55f81371": "REPLENISH_AMOUNT()", "55f82589": "tryExec(address,uint256)", "55f86501": "exec(bytes)", +"55f8c539": "reInvest(uint256,uint256)", "55f92d23": "privateSaleContribution(address,uint256)", "55f953e6": "getTokensCountOfUser(address)", "55fa1348": "minimum_donation()", +"55fa94c1": "setVotingLimit(uint8,uint256,uint256)", +"55fae611": "thisMonth()", +"55faf1d1": "revokeAllowlist(address[])", "55fb8cee": "userCountsInAccount(uint256)", "55fb9765": "UniversalGamingCoin()", "55fbc8c2": "UpdateEthBalance(uint256,uint256)", "55fbf10e": "PanterX(uint256,string,uint8,string)", +"55fbf8e7": "mint(address,uint256,string,string,string,uint256)", +"55fc30be": "ReadHash()", +"55fc6275": "buyerList(address)", +"55fc62d2": "auctionData(uint256)", +"55fc9fc4": "setMinTimeBetweenWithdrawals(uint256)", +"55fccc46": "OwnershipSuccession(address,address)", +"55fd00db": "_saleContract()", +"55fd8661": "BrokerRegistered(uint256,address)", +"55fdbeec": "mintWizards(uint88[],uint8[],address)", "55fe13ea": "setBuyingEscrowAddress(address)", "55fecb0b": "payTheWinner()", +"55ff286a": "uniswapPairReverse()", "55ff440a": "castStringToUInt(string)", "55ff85c3": "returnBet(uint32)", +"55ffaf5a": "verifyTx(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"55ffdcc2": "versioned(address)", "56000acf": "processPayment(address,uint256,bool)", "56003f0f": "createTemporary(bytes32)", +"560061bb": "ReviewingAudit(uint256)", "5600e827": "elapsedMonthsFromICOStart()", "5600f04f": "url()", +"560118c2": "devFeeDivider()", "5601477b": "addMilestone(uint256,uint256)", +"5601c432": "DLimit()", "5601da3d": "innerTransfer(address,address,uint256,uint256)", "5601eaea": "execute(uint256,uint256)", "56025c9e": "DatareumCrowdsale(address)", +"56026f0a": "MAX_BRIGHTID_VERIFIERS()", "5602a812": "sumICOStage5USD()", "5602c05f": "AREF()", +"56030224": "SentToDev(uint256)", "560334c6": "angelPool()", +"560354ab": "setRevokeRewardDuration(uint256)", "5603a50d": "checkVesting(uint256,uint256)", +"5603a6ba": "luid()", "5603ac35": "NewBudget(address,uint256)", "5603b9f9": "registerReferral(address,address)", "56048edc": "getThresold()", "56049a86": "riddle()", "5604af49": "battleProvider()", +"5604cbb2": "RequireThatA1(bytes32,address,uint256)", +"56059ffb": "get_gauges(address)", "560667f1": "setDocToAddress(address,bytes)", +"5607395b": "addVoter(string,address)", "56075a98": "becomePlayer()", "56078480": "GoneTrippinToken()", +"56078872": "balanceOfsteCRVinWant()", "560791a9": "returnHolder(uint256)", "5607a548": "m_ownerIndex()", "5607f324": "checkLicense(address,address)", "5607f408": "freezeTokens(address)", "56084329": "SAATCoin()", "5608b6d9": "changeprivatebonus(uint256)", +"5608f92c": "EtherPerTokenId(uint256)", +"56095f2b": "destroyBonds(uint256[])", +"56097c2b": "LogChangeExpiryLimit(uint256,uint256)", "5609825e": "partyOwnsAsset(address,address,string)", "56098295": "getCandidateVotesByIndex(uint256)", +"5609d0a7": "getLuckCode(address)", "560a665a": "buyTokensByReferrer(address,address)", +"560a8470": "reApprove()", +"560b3cba": "orderFilled(address,bytes32)", "560bb612": "SignatureValidator(address)", "560bd3ec": "addCollaborate(uint256,address,bytes32,uint256)", +"560c92e9": "bxUSD()", "560cb0a5": "SikobaContinuousSale(uint256)", +"560cbd5e": "validUserId(address)", "560d3ca5": "toEXTwei(uint256)", +"560d9c16": "lastPrice0(address)", +"560dc0f8": "renounceWithdrawalAuthorization(address)", +"560ebbd1": "usedHash(bytes32)", "560ecab5": "setSellCeiling(uint256)", "560ed6a1": "refundEther()", "560ef1bf": "getLockedToken(address)", +"560f1b38": "LogStartAndEndTimeSet(uint256,uint256,address)", +"560f205f": "tadpole()", +"560f2dab": "TaxFeesSet(uint256)", "560f5d4b": "currentStateSales()", +"560f7eaf": "changeChallengePeriodDuration(uint256)", +"560f89c3": "setHostDetails(string,uint256,bool)", +"560f9687": "SuperStakeMultiSendEth()", "561015e2": "notEqual(uint256,uint256,string)", "56104861": "addEjariRule(string,string,uint256,uint256)", "56105a08": "DgxSwap()", "56111751": "respond(uint256,uint256,bytes32)", +"56117e5d": "safeWithdrawETH(uint256)", "561187ae": "russianBounty()", "5611bf3e": "AlerterAdded(address,bool)", "56129134": "createPromoKitty(uint256,address)", "561296e4": "GetReferralDataOfAddress(address)", +"5612a5ef": "optionTokenLibrary()", "5612acd3": "getScenariosInfo(bytes32)", "5612e139": "getWebsite(address,uint256)", "56131736": "wcf(address,uint256)", "561337eb": "contractMessage()", +"56133fc8": "_setBorrowPaused(bool)", "5613680a": "whitelistInvestors(address[])", "561387b1": "setPrice(string,string,string,uint256)", +"56140a60": "startNewPassiveAirDrop(uint256,uint256)", "5614678c": "calculateDayOwnerCut_(uint256)", +"56147c6b": "_setGovFee(uint256)", +"5614d0a1": "mintLockedProposals(address)", +"56150edf": "depositETH(uint256,address)", +"561536c7": "foo(uint256,uint16)", +"56159c62": "sell(address[],uint256)", "5615f415": "q2()", "56161605": "TestGOATToken()", +"56165fc4": "finishedCount()", +"5616a7cc": "logRestaked(uint256,uint256,uint256)", "5616cafd": "setGasForCLI(uint256)", +"5616edbe": "ConverterAvailableError(address,address,address,address,uint256)", "5616f7df": "getHatchCooldown(uint256)", +"5617151c": "transferPositionPassedRequest(address)", +"561778ea": "dmmTokenIdToIsDisabledMap(uint256)", "5617fb0d": "TKDToken()", +"56189236": "getCurrentTokenId()", "56189cb4": "approveInternal(address,address,uint256)", +"5618b810": "setDmexContract(address)", "561960b5": "activateStartBlockOf(address)", "56196d87": "pickReward(uint256)", "56196dc9": "getTagByModuleType(uint8)", +"561a01b8": "changeOwnerCandidate(address)", "561a0d65": "serviceClaimOwnership()", "561a28df": "market2018TokenCreated()", "561a4873": "buyAd(string,string,string,uint256,uint8,address)", +"561a61d0": "TransferLocked(address,address,uint256,uint8)", "561b1d72": "iDeal()", +"561b2d6d": "bearingToUnderlying(address,uint256)", +"561bb2a0": "INIT_NUM()", "561bbe1e": "getluckyprize()", +"561c33d2": "vault_stables()", +"561cb04a": "totalTip()", "561cce0a": "LONG()", +"561cd22b": "UserReferralKi(address)", "561cd462": "balanceOfETH(address)", +"561d02dc": "setBackTokenContractOwnership(address)", +"561d9663": "readTellorValueBefore(uint256,uint256)", +"561dae91": "unstakeMax()", "561e91a1": "makeBet()", "561ef5b6": "for_sale()", "561f1ba1": "sendToken(address,address,uint256,uint256)", "561f39c0": "getGameMaker()", "561fe29c": "createDeposit(address)", +"561fed4a": "dcdcs(address)", "56200819": "updatePayoutAddress(address)", "56206581": "MyInvestments()", "5620d1d7": "lastCompleteEpoch()", +"56213104": "updateDividendContractAddress(address)", "56216916": "changeFinishSale(uint256)", +"56219f9e": "lockedUpBalanceOf(address)", "5621df99": "ESMBCoin()", +"56220983": "valuePoolWeights(address,uint256)", +"56227214": "st(uint256)", +"56229606": "dvdPrice()", +"5622b051": "changePriceSource(address,address)", +"5622ce16": "secondPhase()", "5622d195": "SvEnsRegistry()", +"56230fe6": "mConfirmNumb()", "562328ec": "LogBidConfirmed(bytes32,address,bytes32)", "5623715b": "updateUpgradePoll(address)", "56238b02": "setTokensPerEth(uint256)", "56240b38": "PalestinePound()", +"562427e1": "mintCollection(address,string,address,uint256)", "56242e07": "customerDeposit()", +"5624350c": "changeSingleAirdropAmount(uint256)", "56247e6d": "createKingdom(address,string,string,uint256,bool)", +"5624b25b": "getStorageAt(uint256,uint256)", "5624e064": "makePurchase(address,uint32)", +"56250571": "getMembers(string)", "562557f7": "accountsUsed(uint256,uint256)", "56257ae1": "getFUTTotalSupply()", "562605f1": "refundOn()", "56264d6c": "setMaxTickets(uint256)", +"5626da24": "safeSaviours(address)", "5626e246": "Stage2Allocation()", "56277619": "setFiatRaisedConvertedToWei(uint256)", +"5627d322": "viewCurrentlyInvested(address)", +"562890cc": "setOwner(string,string)", "5628d443": "BTYCT(uint256,string,string)", "5628fc09": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address,address,address,address,address)", "5629365b": "playerWithdraw(uint256)", +"562975cb": "accReward()", +"56299481": "computeAddressWithDeployer(bytes32,bytes32,address)", "5629c69e": "ArtBC(uint256,string,uint8,string)", "5629c6d9": "doExecution(address)", "5629e70b": "NobarToken(uint256,string,string)", +"562a085f": "getOwnerByTokenId(address,uint256)", +"562a0b21": "tokenToToken(uint256,address,address)", +"562a2434": "bVaultsFundSharedPercent()", +"562a56b3": "_globaltFee()", +"562ae676": "getTermInfo()", "562b2ebc": "orderCalldataCanMatch(bytes,bytes,bytes,bytes)", +"562b4b75": "_getCurrentDay()", "562bde28": "transferMyName(address)", +"562bf023": "SetURI(string)", +"562bf2db": "getBlotsByOwner(address)", "562bfb9f": "getAllCardsModifier()", +"562c1b21": "createRevolution(string,string,uint256,uint256,bool)", +"562c2195": "Swap(address,uint256)", "562c45da": "withdrawDragonsPrime()", "562c4784": "targets(address)", +"562c655d": "ethAddressClaim(address,uint256,bytes32[],uint256,address)", "562c82ec": "aboveSevenBets()", "562c9dfa": "test2_verlappingIntervalNewNode()", "562cad23": "startCycle()", "562cb622": "setAffiliateLevel(uint256)", "562cc70c": "minWeiWhitelistInvestment()", +"562d0924": "ayrAYRReward()", "562d4570": "refundStart(address,uint256,address)", +"562df184": "OperatorAddressRemoved(address)", "562df3d5": "COMMISSION()", +"562e8abc": "totalAuctionsBySeller(address)", "562e9df9": "addressTeam()", +"562ea0e7": "approveMarkets()", "562ea884": "Explain()", "562fa0df": "deposit(address,address[],uint256[])", "56304e33": "addBalanceBlocks(address)", +"563092e0": "approve_888(address,uint256)", +"5630987c": "minimumCrabPerBlock()", +"5630ecd6": "notarizedDataEntries(uint32)", +"563170e3": "getDeposit(address,address,uint256)", "563183fc": "maskerOf(address)", "56318820": "setTokenSwarmHash(address,bytes)", +"5631f17b": "BUND_ETH_LP()", +"5631f699": "ttttt(address,address)", +"5632215d": "MasternodeContract()", +"56322586": "getDelta(uint256)", "56323b5d": "BenderCoin()", "5632b1fa": "payrolls(uint256)", +"5632bbdb": "teams(bytes32)", +"5632fe2a": "registrationFeeWithReferrer()", "56330403": "getDocsCount(string)", "5633af60": "HeliumNetworkAddress()", "5633c442": "lockedUpCount(address)", +"56342d8c": "getValidatorContract(uint256)", "563433d7": "setStock(address)", "5634653d": "verificationCountInt()", "5634c88c": "sumOfNGeom(uint256,uint256,uint256)", "563540a2": "startQueueing()", +"56360f71": "getVaultData(address)", +"563636e0": "New0xBTCHate(address,string)", +"5636494c": "indexAccess()", "5636548f": "enableWithdrawal(bool)", "56378983": "validTokenAmount(uint256)", +"5637af57": "StartBurnModeDuringTransactions()", +"5637f38b": "handtest()", "56387fa3": "toogleMinting()", +"5638e4d6": "getUserAvailableBalance(address)", "56394455": "getStageStartDate()", +"56396715": "getWithdrawalCredentials()", "56397c35": "ledger()", +"5639a660": "miners(address,address)", "5639bb3c": "buyPriceEth()", "5639d152": "NewRC(address)", +"5639e8cf": "DEV_ADDRESS()", "5639eb64": "IngridIsAHorribleHumanCoin(uint256,string,uint8,string)", +"563a7956": "valueOfVaultAndStrategy()", "563ad62b": "ConfToken()", +"563ada3a": "setDefaultAuctionPrices(uint256,uint256)", "563b1358": "approvePack(address)", "563b54b9": "getQueuesLength()", "563baca1": "fundForBounty()", "563bd001": "tokenPriceForPreICO()", "563bef94": "ShipSellMaster()", "563bf264": "slash(address,address,address)", +"563bfecc": "referralBalance(address)", "563c23a0": "timePaused()", +"563c61b1": "RejectSharingRequest()", "563c78b0": "SendPreReserved4()", +"563cc3c2": "assetPrice(uint256,address)", +"563d0d79": "underlyingBalanceInBundle()", +"563db9c8": "BlindBidPlaced(uint256,address,uint256)", +"563df32f": "Treasury()", +"563e17dd": "WithdrawDividends()", "563e8233": "envio_dinero(uint256)", +"563ea7f4": "transferToXDai(uint256)", "563ed6d0": "delAdminAddress(address,address)", +"563f0f2d": "addRedeemLog(address,uint256,string,string,bytes32)", "563fce0b": "mappings()", "56410637": "ethernautsStorage()", "56411a0f": "ChrizzxToken()", "56412d85": "getVote(uint256,uint32)", +"564130de": "boostFor(uint256[5],address[3],bytes,address)", "56416147": "getopenDdaListAssets()", +"5641a6a3": "vaultWallets(uint256)", "5641ec03": "emergencyExit()", +"5641f3c3": "serviceWallet()", "56423986": "DecreaseTheAllowance(address,uint256)", +"564294f7": "exitPool(address,uint256)", "56430201": "InvestmentMade(address,uint256,uint256,string,bytes)", +"5643412d": "approve_514(address,uint256)", "5643a711": "increaseMonsterExp(uint64,uint32)", "56442869": "destroyCrowdsale()", +"56446b17": "txPrice()", "56447520": "dteamVaultAddr4()", +"56447cab": "hashtag(string)", +"5644e44c": "bid(address,string[],uint256[],string[])", "56451bc2": "removeBalances(address[],uint256[])", "564566a8": "isSaleActive()", "5646435b": "burnTokens(address,address,address,uint256)", +"56465d8d": "showBetLeft(uint256)", +"5646c34b": "buyTrancheAToken(uint256,uint256)", +"5647416a": "team_accumuluated()", +"56476cb4": "groupDeltaBalance(uint256)", "564952d5": "trickleSum()", +"56496262": "venusAddress()", "5649efbc": "superFeed()", "564a187f": "getPopRemainingAsFixedPointForGameId(uint256)", "564a565d": "disputes(uint256)", "564a6b94": "cos(uint16)", +"564aa99d": "addKeyGranter(address)", "564ad142": "testSubItem(bytes,uint256)", +"564ae6a8": "getInactiveActionDelta()", +"564b1015": "pieSupplyState(address)", +"564b28a0": "availableToken()", +"564b81ef": "getChainID()", +"564bcae3": "addEthLiquidityLGETEST3(uint256)", +"564bffd7": "getStakedRank(address)", +"564c09dd": "pikaToken()", +"564c74a3": "onlyWhitelistAdminMock()", "564ca533": "setRelayedMessages(bytes32,bool)", "564e406f": "changeAgencyOwner(address)", "564ef91d": "PRNG()", +"564f4f88": "RecipientRecovered(address,uint256,uint256,bool)", "564f8d23": "rightmost_leaf(uint256)", "564f9728": "get_row(uint256,uint256)", +"564fd9a7": "Admin_2(address,address,uint256)", +"56500dd9": "updateHDRRate(uint256)", "5650152b": "getNextAvailableReward(uint256)", +"56507913": "timeInEpoch()", "5650e5e0": "Couchain(uint256,string,string)", "565118f7": "lockReleaseDate2year()", +"56512965": "dpm()", "565135ce": "removeUsersWhitelistB(address[])", "56514d83": "distributeReserveFunds()", "5651ce38": "priceStepDuration()", +"5651ec31": "UserLose(address,bytes32,uint256,uint256,uint256,uint256)", "5652077c": "finalizeProposal(uint256)", +"56521068": "getTokenByRfid(string)", "56522390": "addEditTokenFee(bytes8,uint256,uint256)", "565287c9": "votar(uint256,bytes32)", "5652ced0": "OpnMind()", "5652ec7e": "GnosisIssued()", +"5653b414": "rewardLiquidationThreshold()", +"5653cd69": "neonvault()", "5653de64": "tokenSold(uint256)", "56544af0": "taxTillNow()", "5654a341": "gameIndex()", "5654b526": "sumHardCapICOStage8()", "5654edb8": "btcUpdates(uint256)", +"56552fe9": "changeArtisAccount(address)", "56553a95": "transferIssue(address,uint256)", +"56554d82": "getTenderBasic()", +"56559a17": "SupplyWithdrawn(address,address,uint256,uint256,uint256)", "5655c490": "setProviderCurrentRate(uint256,uint8)", "5655e37b": "CONTRIBUTION_MAX_NO_WHITELIST()", +"5656c81d": "pushresult()", +"5656ecd2": "isWinValAddr(address)", "56570671": "GetContractStageLiving()", "565707a8": "getDErc20(bytes32)", +"56570b58": "addGameUsers(uint256,uint256,uint256,uint256)", +"56571fc3": "getLastDate()", +"56574b8c": "delegationsByHolder(address,uint256)", +"565759ae": "comToEther(uint256)", "56575bd7": "setParticipateDailyLootContribution(uint256)", +"565836e7": "_liquidityFeeSell()", "5658d212": "getFactoryForCountry(string)", "565974d3": "details()", "56597e65": "circulationCap()", "5659856c": "addApprovedAddresses(address[],uint8)", +"5659b742": "stakeFirstEpoch(address,address)", "565a2e2c": "getBeneficiary()", "565a2ecf": "classicTransfer(address)", +"565a42bf": "bonusInc()", +"565a6821": "quickExecuteMinPct()", "565a7c4c": "epm_system()", +"565ae6f8": "claimedLP(address)", +"565aea65": "imageUrlOf(uint256)", "565af6a8": "referralRegistration(address,address)", "565b3324": "intMin()", +"565c0ebb": "ETRRATE()", +"565c1714": "disableMarket(uint256)", +"565c56b3": "getIncoming(address)", +"565ca6dd": "postponeSale(uint128)", "565cee48": "ALLOC_ILLIQUID_TEAM()", +"565db458": "buyNewPut(uint256,uint256)", "565e2220": "view24()", "565e4fa1": "subtractScalar(int256[],int256)", +"565e5db3": "REWARD_SHARE()", +"565e77d5": "usersLength(uint256)", +"565e7c11": "partnerDirectPercent()", "565eab8e": "TransferMyGGTokens()", +"565ebfed": "getCurrentMarginAndCollateralSize(address,address,address,uint256,uint256,uint256)", "565ed5a2": "LogMigrationFinalized(address,address,address)", +"565eea19": "getPayout(address,uint256)", +"565ef4ea": "togglePauseContract(bool)", "565f2da9": "lockTokensForTeamAndReserve(address)", "565f3297": "bindkey(uint256)", "565f3624": "testArgOutOfBoundsFail()", +"565f7994": "isReissueAllowed()", "565fd2a7": "registerCoinData(address,uint256,uint256)", "5660000a": "tokenRewardRate()", "566038fb": "cancelTransferRight(address)", +"56604d02": "tokenToIsSetup(address)", "56605326": "DTFCToken()", +"5660cffa": "edc2Token()", "56610400": "Proposals()", +"56613421": "setPause(bool,bytes)", "566150a3": "GenerateTokenContract()", "5661ba15": "setDungeonTokenContract(address)", "5661bcd8": "saosao3()", +"5661d616": "LogPayInterest(bytes32,address,address,uint256,uint256)", +"56620530": "limaGovernance()", +"56623118": "toAmount(address,uint256,bool)", "56624ce6": "minVoteWeightK()", +"56629286": "buyLevel(uint8,uint32)", +"5662a6ce": "makeSellOrder(address,address,uint256,uint256)", +"5662c2b8": "activeNode(uint256)", "56630bce": "KycVerified(address,bool)", +"566316eb": "airdropEther(address[],uint256[])", "56632637": "node_dupes(uint256)", "5663896e": "setSecondsPerBlock(uint256)", "56639a8e": "fixUSDPriceTime()", "56639ef6": "PikewoodFund()", "56640afe": "getCampaignLength(uint256)", +"566456d1": "LogTokenBurned(address,uint256,uint256)", "5664a5a3": "MonsterCreatorInterface()", +"5664b199": "updateBlockTime(uint256)", +"5664b852": "ReconVaultPrivatStock()", +"56650ebb": "showrouter()", +"56654968": "testSetRiskParameters_LiquidationDiscountPlusOneEqualsCollateralRatioFails()", +"5665f1ae": "withdrawETHAndTokens(address)", +"5665fe80": "changeRateUpdateDelay(uint256)", +"56662df6": "soldPhase2()", "5666496a": "_applyForCertifation(string,uint256,bool,string,string,uint256)", +"5666621d": "isAlreadyUsed(bytes32)", +"566690ec": "transaction(address)", "5666da53": "RYXEX(address,address,address,uint256,uint256,uint256)", "566735d8": "PreVNK(uint256,string,string,uint8)", +"5667d853": "getDebtGlobalScore(address,uint256)", +"566802fb": "RemoveFromSale(address)", +"56685770": "setInsuranceFundAddress(address)", +"56688700": "addLiquidity(address,uint256)", +"5668af1a": "showAirdropThreshold()", +"5668c2e8": "lastUpdateAt(address)", +"5668c8fb": "kickOut(address)", "5669c94f": "issueToken(address,string)", +"566a2372": "_validateOnlyModule()", "566a3cb5": "getTokensHolder()", +"566aac2f": "setMaxEditionSize(uint256)", +"566b0521": "postExists(uint256)", "566b28f0": "m_tokenDiscountThreshold()", "566bbee7": "EventCentsPerTokenChanged(uint256,uint256)", +"566bceef": "totalProduct()", "566bd6c3": "offerSigner()", "566c20fc": "writeMessage(string,string,string,string)", "566c23ad": "setLock(bytes32,string)", "566c37de": "teamTokenHolder()", +"566c65f0": "setCoinVelocityVerifier(address)", +"566c8307": "confirm_payment_many()", "566c8ed2": "TCI_client(bytes32,address,address)", +"566caf5b": "createUser(uint256,string,string,string,address,address)", +"566d09a8": "SLIPPAGE_TOLERANCE_X_100()", +"566d672c": "Retjeh()", "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()", +"566ef7fd": "setProofOfUseLockUpPeriod(uint256)", "566f4ac5": "payMasters()", +"566f7aca": "changeFactor(uint256)", +"566f8b07": "artemBorrowState(address)", "566fc6de": "getProfitPercent()", "566fca87": "GazpromCoin()", +"566ff04f": "swapItToMe()", +"56702efb": "airdrop_max()", "5670d6f1": "stopAirdrop(bool)", +"5670dd48": "proposeAction(address,uint256,bytes,string)", +"5670e9e8": "approve_769(address,uint256)", "5670ef72": "setConfigs(bytes32[],uint256[])", +"56711b6e": "getHeapSort8()", "56715761": "minDuration()", "567188da": "getTotalBuyBySkull(uint256)", +"5671d3da": "clearRevealSkips()", "5671ec30": "totalCardCount()", +"56728e9d": "_lastStakedTime(address)", +"5672ab55": "mdx()", "5672f548": "physicalString()", +"5673017a": "getTokenLockStatus(uint256)", +"5673b02d": "swap(uint256,uint256,uint256,uint256)", +"5674427b": "burnLeftoverMine()", +"56746c7d": "setMinimumStakingSeconds(uint256,uint256)", +"56749013": "necroBurnCount(uint8)", "5674a3ed": "runLottery()", +"5674ac0f": "legalPersonSkipsCountryCheck()", +"5674ce58": "getEnabledPolicies()", +"5675161d": "levelUpFee(uint256)", "5675527f": "EtherIco(address,uint256,uint256)", "567556a4": "fundsTransfer()", +"5675688d": "setErc20TokenPairAddress(address)", +"5675c30a": "setPaperReward(uint256)", "5675db9c": "setShouldGenerateDna(bool)", "5675ef9d": "BetPlaced(bytes32,uint8,address,bool,uint256,int32)", "56765c51": "WITHDRAWAL_WINDOW()", "56768538": "registerForeignAddress(address)", "5676d075": "hardCapETHInWeiValue()", +"5676e41a": "remainingAllocation(address)", +"567761a3": "numManager()", +"5677a6de": "_addCapper(address)", +"5677abcc": "Multiplier(uint256)", "56780085": "TOKEN_DECIMAL_MULTIPLIER()", +"56781388": "castVote(uint256,uint8)", "56782e5b": "hplus(uint256,uint256)", "5678494f": "ProvePrivKey(bytes32,uint8,bytes32,bytes32,bytes32,bytes32,address,uint256)", "5678524f": "nextBuyoutPrice(uint256)", +"56793bc7": "poolsMap(address,uint256)", "5679623b": "initializationDelay()", "567990ae": "LogNoticeMsg(address,uint256,string)", "5679f636": "toggleBankrollReachedCap(bool)", "567a03a7": "grantBurner(address,bool)", "567a0f35": "testHitSoftCapPreDistribute()", +"567a372d": "misdemeanorThreshold()", "567a9c79": "claimedBountyTokens(address)", +"567b3d2e": "issueBounty(address,address[],address[],string,uint256,address,uint256)", +"567b7af7": "emitDebtEvent(address,uint256,bool,string)", +"567b9870": "convertRTKLXIntoRTK(address,uint256,uint256)", "567c08e2": "set_minFinneyToKeep(uint256)", "567c31f7": "taxEarningsAvailable()", "567c5b70": "getTicketParticipant(uint256)", +"567c8304": "Unifund()", "567cc2b6": "setProduction(uint256)", +"567d5910": "_poolHalvingIntervalMinutes()", "567dbf18": "__forward(address,uint256,uint256,bytes)", "567e75c4": "getLoanState(uint256)", +"567e98f9": "totalStakedAmount()", "5680a3ad": "childExists(address,uint256)", +"56810d5b": "recordHistory()", +"5681245d": "setPanAddr(address)", +"56812cbd": "getEthTokenConstant()", "56813535": "const_contract_eth_value()", "56814312": "NekoToken()", +"56815d02": "setPresaleStartTime()", +"56817a09": "addNewMonthDividend(uint256,uint256,uint256,uint256)", +"5681b30e": "setBlocking(address,bool)", "5681e00b": "getContractMetrics()", "56820930": "purchaseMakeCard(uint256)", "56826ee6": "receiveApproval(address,address,uint256,bytes)", +"56827a70": "getPoolConf(address)", "568287ee": "ShopperlyGlobalToken()", "5682d43d": "checkWithdrawAddress(address,bytes32,address)", "56833b16": "AYA()", +"56833b8a": "renounceRewardManager()", +"56838ede": "TOKENS_PREMINED()", "5683a9e0": "LASTTRIAL456()", "56841b36": "payToReferer(address,uint256,string)", +"56842df3": "l1ReferralShare()", "56845ca0": "updateProposalOwner(uint256,address)", "56848c05": "awardMILsTo(address,uint256)", "5684c219": "getReportingPeriodDurationInSeconds()", +"5684e3e5": "AAVE_POOL_CORE()", +"56851060": "changeBurnRate(uint256)", "568531cc": "accountRegistryLogic()", +"56858619": "withdrawFeesAndRewards(address,uint256,uint256,uint256)", +"5685e7b3": "betBlueCoin(uint256)", "5685f6bd": "DELTA_Token()", +"5685f99a": "setting(uint256,uint256,uint256,uint256)", "56860ddc": "GTDNToken()", "56861322": "RecievedTip(address,uint256)", "56861450": "isAtLeast(int256,int256,string)", +"56869c58": "taxId()", "5686b54b": "cancelAgreement(uint256)", +"5686bfd8": "verifyRequest(uint256,bytes32,bytes32)", +"568749ea": "releaseFarmAllocation(address,uint256)", +"5687763e": "getRunnerRegisted()", +"5687c1ab": "dinoPerBlock()", "5687f2b8": "emitApproval(address,address,uint256)", +"56880944": "dividends(address,address[],uint256[])", "56885cd8": "crowdfunding()", "56891412": "totalLocked()", +"56892630": "setComp(uint256,int256)", +"568970d2": "updatePlan(uint256,uint256,uint256)", +"56899dad": "getRootDetails(bytes32)", "568a2c55": "setNewStart(uint256)", +"568a60f7": "abiEncodeHash(bytes4,uint256,uint256)", "568a8077": "gameResult(uint256,address)", "568ab21e": "enter(bytes32)", +"568b19ed": "unregisterStakeHandler(uint256)", +"568b4ce4": "LogSetRealitio(address)", "568b5915": "votesMaskByOperation(bytes32)", +"568b80b5": "MAPPER_ROLE()", +"568bcaaf": "crossoverConfirmationMinTime()", "568c2163": "END_OF_MINT_DATE()", +"568c7ba1": "sakeMaster()", +"568c9a70": "incvFinishBlock()", "568d13eb": "calculateRegionInitialSalePixelPrice(uint256)", "568d3900": "getAgentIdByAddress(address)", +"568d4b6f": "tin()", +"568d4d9d": "transferList(address,uint256[])", +"568e3e10": "is_plan_completed_p1()", +"568ea091": "createProxy(uint256,string,bytes[])", +"568ef470": "getMarketId()", +"568f567a": "exit(address,address,address,address,address,address,uint256)", "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)", +"568fd72e": "getUSDPCurPriceOfLUCAX()", +"568ff497": "setNodeReward(uint256,uint256,uint256,uint256)", "5690d326": "initialize(address,address,uint256,address[],address,address,address,uint256,uint256,address)", +"5691ce59": "prevData(address)", +"5691fa48": "icoPerEth()", +"56922758": "setRegistrationPeriod(uint256)", +"56922dbc": "Tid()", +"569249d0": "totalFeesAvailable()", "5692b273": "finalTier()", "5692e367": "decodedExpiration()", "5692e54e": "test_0_ensureRegistryFunctions()", "5693077a": "registerCampaign(uint256,address)", "56930b55": "tokenOperationsFinished()", +"56933719": "generateCombinations(uint8[4])", +"56935e8e": "rewardedBoosts()", +"56936890": "erc20bank()", "56939048": "disqualified(address,uint256)", +"56940eac": "IUniswapV2PairAddr()", +"569560e8": "functions()", "5695dd8c": "FindX()", "5695fa58": "getTotalDistributed()", +"56961458": "getUnclaimedDivs()", "56963c31": "setDistributeAgent(address,bool)", +"569706eb": "convert2(address[],uint256,uint256,address,uint256)", +"5697635f": "LogNewProduct(address,bytes32,bytes32)", +"56976ea7": "MintProposalExecuted(bytes32,address,uint256,string)", "56979da7": "assignmentsClosed()", +"5697a3d3": "ubounties(uint256)", +"5697afae": "DIDDelegateChanged(address,string,address,uint256,uint256)", "5698176a": "getPlayersPoints(address)", +"569820b8": "ownerWithdrawExtraETH()", "56982986": "lastBlock_a11()", "5698fb44": "getTokenBonus()", "56990301": "FoundersVesting(address,address)", +"569925da": "saleCardEvent(address,uint256)", +"56992f67": "_requireMoreThanOneTroveInSystem(uint256)", "56996f6b": "TDESupplyRemaining()", +"569978c2": "betError(address,uint256)", "56997fb4": "potReserve()", +"56998259": "createMonsterStaking(string,address,address,uint256,string)", "5699c7b1": "getPendingWithdrawal(address,address)", +"569a1288": "cookieProduction(address)", +"569a59ce": "usrPenaltyUntill(address,address)", +"569a747d": "capRatio()", "569a7aab": "isLowercase(bytes32)", "569aa0d8": "getPlayerSubmissionFromCompetition(string,uint8,address)", +"569abd8d": "promoteAdmin(address)", +"569afbc8": "sponsorshipAndFeeBalanceOf(address)", +"569bca69": "isWhitelistedExchange(string)", "569bf836": "GYTToken(uint256,string,uint8,string)", +"569c1969": "dappTxEnabled()", +"569c426b": "stakeShares(uint256)", "569c5f6d": "getSum()", "569ca935": "_setRolePermissions(address,address)", +"569d18ef": "_swapMerelToEmelie(uint256)", "569d617b": "postRelayedCall(address,address,bytes,bool,uint256,uint256,bytes32)", "569d623f": "setEstimatedWeight(uint256)", +"569d6739": "swapTreasury()", +"569dce8d": "transferHFLYtoUser(uint256,address)", +"569e13d8": "StartMarket(uint32,uint256,uint256,uint256)", "569e9c82": "burnByAgent(address,uint256)", "569eaf61": "isPaidOut(uint256)", +"569ecab5": "eth_rate1()", +"569f7494": "createSet(address[],uint256[],uint256,bytes32,bytes32,bytes)", "569f76e1": "teamOneDivsTotal()", "569fa9f9": "releaseRecordsCount()", +"569fb177": "setProvider(uint256)", +"569fc1fb": "loanInterest(bytes32)", "56a041fc": "exception(address,address)", "56a060a2": "isTradingOpen()", +"56a12e43": "addEscrow(address,uint256)", +"56a1572a": "ReleaseFunds(address,uint256)", +"56a16cd3": "AccountIsNotLockForReturn(address)", +"56a1a276": "NameRegistered(address,string)", +"56a1c701": "setTrustedSigner(address)", +"56a1cf38": "_safu()", +"56a1e06c": "registerServer(string,uint256)", +"56a20f39": "globalSettings(uint32,uint32,address,uint256)", "56a24be0": "getPositionCallTimestamp(bytes32)", +"56a2f885": "__uniswapRouterV2()", "56a3015c": "Generation()", +"56a3d093": "paybackOnBehalf(address,address,uint256,address,address,uint256)", "56a3f4ef": "collectMyReturn()", "56a49b7a": "getStakeLockedStatus(address)", +"56a4cd3d": "participatePool1(uint256)", +"56a4d219": "isPresaleStopped()", "56a4e7f9": "GetGlobalProduction()", +"56a4f6e1": "Forcedistribute(bool)", +"56a5d1b1": "log(uint256,uint256,address,address)", "56a61fc4": "_trainPart2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "56a620aa": "decreaseAfterBurn(address,address,uint256)", +"56a64143": "updateUSDPrice(uint256)", "56a6d9ef": "transferBalance(address,uint256)", +"56a6dc7e": "pendingCheetah(uint256,address)", +"56a704b5": "pricePortal()", "56a70646": "giveBackEthers()", +"56a717a2": "GetAthleteByIndex(uint256)", +"56a72624": "backupWithdraw(address)", +"56a726c3": "getRoundV2(uint256,uint256)", "56a7564e": "undistributedTokens()", "56a765c4": "whitelistBonusAmount()", "56a7b0bf": "Burner(address,address)", +"56a7d2de": "sell_refund_reject(uint256,uint256)", "56a807d9": "mintvestedTokens(address,uint256)", +"56a87caa": "setMaxReserve(uint256)", "56a8a270": "competitionAddress()", +"56a8ddd3": "NewStellar(address,uint256)", "56a9399d": "YUNXIN3Token(uint256,string,uint8,string)", +"56a9480a": "createEscrow(uint256,uint256,uint256,string,string,string)", "56a9a68b": "updateAllowances()", +"56a9f39a": "Terminated()", +"56aa1768": "VoterAdded(address,uint256)", "56aa3892": "FooContract(address)", "56aa772f": "Use_EmergencyCode(uint256)", "56aa7cef": "PaymentFinished()", "56ab4b5d": "TokenPurchased(address,uint256,uint256,uint256,uint256,uint256)", +"56ab8f38": "checkusers(address)", "56abf07c": "giftStar(uint256,address)", "56ac1efa": "AcceptsProof(address)", "56ad2931": "_moveToken(address,address,uint256,bytes,bool)", "56ad41c8": "XandraSupply()", +"56ad56ec": "safeKiwiTransfer(address,uint256)", "56ad609e": "Addr1()", +"56ad8764": "dustId()", "56ad9f57": "CROWDSALE_SUPPLY()", +"56ae0d45": "voteOperator(address)", +"56ae35af": "Google2PerBlock()", +"56ae5359": "referrLevelCountInfo(uint256)", "56ae89a3": "UpdateUserBitFlag(address,uint256)", +"56aef98c": "getTotalEquity()", "56af3f2b": "PredatexTiga()", "56af4d4e": "AanshuToken()", "56afad92": "TSTORZContract()", @@ -49720,128 +91059,222 @@ "56afeed6": "SQUIRREL_BOOST()", "56b00cb5": "Horizon0x(uint256,string,string)", "56b0443f": "getMarketPrice(uint8)", +"56b05a5c": "approveAndTransfer(uint256)", "56b09382": "creditDaoAddress()", +"56b0dcf4": "defineRates(uint256[])", +"56b11e3d": "swapBackToExactAmount(uint256,address[],bool)", +"56b1349f": "getUniBalance(address)", "56b15308": "deleteProvider(address)", +"56b15fe3": "feistel(uint256,uint256,uint256)", "56b1ddbb": "HDT()", +"56b2b30d": "unlockStakeLock()", "56b2c5bb": "doSucceedingTransfer()", +"56b2ed53": "checkpointVotes(address)", "56b30aec": "getPendingWithdrawlListCount()", "56b30f33": "minAmountForDeal()", "56b32da1": "gameStarter()", +"56b3cbf2": "setarchiverent(uint256)", +"56b3f1a6": "LogBet(bytes32,address,uint256,uint256,uint256,uint256,uint256)", +"56b485d6": "last_change_percent()", +"56b4997f": "setMaxPayout(uint256)", "56b49ef0": "AuctusWhitelist(uint256,uint256)", +"56b4d2a1": "USERS_ON_CYCLE(uint256)", "56b4d760": "getHeroOwner(uint256)", "56b54bae": "blockRewardContract()", "56b558d3": "kingContract()", +"56b5998f": "changeChildImplementation(address)", "56b5d0eb": "_replaceModuleHandler(address)", +"56b5f9b6": "transfertoBank(uint256)", "56b6274b": "verifyEmail(address,string)", "56b62e2d": "JetCoin()", "56b63df7": "tokenLocks(address)", "56b644b0": "changeRake(uint256)", +"56b6491a": "getFundingDeadline()", +"56b6861c": "pendingDuration()", "56b6cb70": "foundersTokensWalletSlave()", "56b6dbe9": "AustraliavsPeru()", +"56b71f71": "cashbackcode(address)", "56b7538b": "nextRoundDonation()", "56b760f2": "numFabrics()", "56b83dc5": "info_Symbol()", "56b86bc2": "EtherDogCore()", +"56b88d80": "userTokenVote(address)", "56b8c164": "getCreatorTAOSetting(bytes32)", "56b8c724": "transfer(address,uint256,string)", "56b8edf0": "TransferEther(uint256)", +"56b97ec1": "moduleInfo(address)", "56b9a8ab": "tokenSales()", "56b9e9de": "getBrehonContract(bytes32)", +"56ba4bdc": "changeMinerFee(uint256)", +"56ba88b8": "garden()", +"56ba9927": "getPostBids(uint256,uint256)", "56bb4d4a": "ICO4Period()", +"56bb8705": "onNewRace(uint256,uint8[4],uint256)", "56bb9b43": "getAppCode(address)", +"56bbac14": "isAddressInAirdropList(address)", "56bc0c5e": "UserManager()", +"56bc92c5": "getTotalFPContracts()", +"56bcb648": "whitelisted_Presale(address)", "56bccf91": "depositTokens(address)", "56bd182d": "privateSupply()", +"56bd235e": "ViewUNISWAPaddress()", +"56bd7c8b": "setFinancialDetailsHash(bytes32)", "56bd928a": "platformLaunchDate()", "56bdb5c4": "isMainSaleBonusTime()", "56bdc4ae": "TokenLoot(address,address,address,address,address,address,address,address,address,address)", +"56be4a3e": "address_belongs(address)", +"56c05764": "isSecondaryReceiver(uint256)", +"56c0a576": "flashloanRate()", "56c11ba3": "priceSelectFight2Death()", "56c190ec": "processRefundEther(address,uint256)", +"56c1e949": "getTransferFee(uint256)", +"56c205e2": "setICOStartTime(uint256)", "56c21897": "PowerCoin(uint256,string,string)", "56c23836": "transferDirect(address,uint256)", +"56c25f82": "burnPynthsToTarget(address)", "56c26f25": "getPlayerOwner(uint256)", "56c290b8": "t_wallet()", +"56c2a220": "tokenIdToBidData(uint256)", "56c2c1f6": "VESTING_TEAM_CLIFF()", +"56c31637": "isApproved(uint256,address)", +"56c3399a": "pendingDba(uint256,address)", +"56c380e4": "danhsachthamgia()", "56c38b2e": "vestingGrant(address,address,uint256,uint256)", "56c3e31a": "mintContract(address,uint256)", "56c4339f": "isMainBridgeContract()", +"56c45b1f": "sellThree(address,address,uint256,uint256,bytes,uint256)", "56c46ac2": "getLockedContract(address,address)", "56c49c2a": "contractFeeMinAmount()", "56c4b246": "WrapperLock(address,string,string,uint256,address)", "56c4e05a": "_balance()", "56c51ea2": "getRestrictionStatus(uint256)", +"56c54ba9": "Withdraw(address,uint256,address)", +"56c5867d": "addMultLP(address)", "56c5df29": "PCFF()", "56c686b1": "getPendingWithdrawl()", +"56c692de": "OnMineToken(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "56c6a608": "WeBuyAnyHouse()", +"56c742dc": "oracleOwner(uint64)", "56c7627e": "tokenLimit()", +"56c7c1b3": "lockTimes(address)", "56c7eb7c": "_destroyTokens(address,uint256)", "56c7f461": "refundContributors()", "56c82ae5": "sendBalanceForDevelop(uint256)", +"56c861c0": "getStakingTokenDetail(uint8)", "56c88f5f": "mintAll(address)", "56c8c30c": "maxPossibleWithdrawal()", "56c8e12e": "refundBalance(address)", "56c8eaba": "KRE8()", +"56c921ae": "hardNerd(address)", +"56c993c4": "disableGlobalAccess()", +"56ca301a": "Withdraw(uint256,uint256)", "56ca528f": "right18(uint256)", "56ca623e": "toString(address)", "56ca7143": "INITIAL_FUND_BALANCE()", "56ca8d75": "setBuyingAmountRanges(uint256[])", "56cac2e0": "letItRain(uint8,uint256)", +"56cb121d": "queryCampaign(bytes32,address)", +"56cb4e9e": "recordReceipts()", "56cb6655": "stopTokenMinting()", "56cba008": "stopSales()", +"56cc63a0": "updateEpicURI(string)", +"56cc9378": "withdrawAave(uint256)", "56ccdadb": "last_roll()", "56ccf300": "ToptalToken()", "56cd26eb": "Digiblock()", "56ce0e6c": "updateMetadata(string,string)", +"56ce180a": "setQuoteSigner(address)", "56ce3f5c": "dCoinswapToken()", "56ce4bc5": "receiveEtherFromForegroundAddress(address,address,uint256,address)", "56ce6377": "WaveVoteContractRegistery()", "56cea4b2": "addressFounders1()", +"56cefd68": "DEFLATION_OUT()", +"56cf02d9": "CROSSER_ROLE()", +"56cf9a28": "findthreePercent(uint256)", +"56cff1b1": "approve_15(address,uint256)", "56cff99f": "calcGav()", +"56d05b77": "OnSetNewBanker(uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"56d06b40": "setHasFeeOnReceive(address)", "56d0adac": "freeToExtraMinting()", "56d0bc9a": "updateProfileEmail(string)", +"56d0cad3": "unreleasedRewardAmount(address)", "56d13e6e": "setMaxReferrerBonus(uint256)", "56d1c866": "getMsg(string)", "56d1d4a2": "setExchangeThreshold(uint256)", "56d26468": "appBase(bytes32,address)", "56d27150": "TheMMORPGToken()", "56d2ec1b": "internalBurn(uint256)", +"56d31658": "ParliamentOverthrown(uint256)", +"56d361ef": "GetUnlockableOptions(address,uint256)", "56d399e8": "stakingRequirement()", "56d3e57d": "_generateRandomNumber()", "56d400a1": "approveDispute(uint256)", "56d40468": "lockBountyTokens(uint256,address,uint256)", +"56d4183f": "multiMintPreico(address[],uint256[])", "56d44694": "PRICE_4()", +"56d498c7": "getCycleFinancialIndex(uint256)", +"56d4a7fe": "depositWithVesting(address,uint256,address,uint256,uint256)", "56d58452": "containsSender()", +"56d5938f": "DivsAddon()", "56d59777": "setAdministrator(address[])", +"56d5a04f": "reduceRewardBalance(address,uint256)", "56d5f541": "_getApprovedAddress(uint256)", +"56d62775": "UpdatedUser(address,string,uint256,uint256,uint256,string,bool)", "56d6cad0": "iFx()", +"56d6cec4": "getMyLuckyNum(address)", "56d73ad1": "getCertifierDb()", "56d7bc54": "altCreateTokens(address,uint256)", "56d7c0da": "ChooseAwea()", "56d7c2c8": "transferERC20Token(address)", "56d88e27": "len()", "56d89b1f": "AuctusBonusDistribution()", +"56d8c0d6": "getArtworkCreationTimestamp()", "56d906c7": "setBounty(address[],uint256[])", +"56d9447e": "DiscipleAuctionBid(uint256,address,uint256)", "56d95932": "getActualTokensPerEther()", +"56d9741b": "proofOfUseLockUpPeriodDays()", +"56d9b5cf": "hasValidInterface(address,bytes4)", "56d9bb9a": "viewAllCertificate(address)", "56d9c0e3": "requestReading(address)", +"56d9c99e": "approve_28(address,uint256)", "56da7743": "getBetsNums(address,uint256)", "56da934e": "addTowardsTarget(uint256,uint256)", "56daf2c1": "paymentWeiOwed(uint256)", "56daf906": "THAW_CYCLE_LENGTH()", "56db3df0": "weiForToken(uint256)", "56db6353": "buildChainlinkRequest(bytes32,address,bytes4)", +"56dbb150": "setOwnerV2(address)", "56dbc007": "isChild(address,address)", +"56dc04a1": "getReward(bytes32,address)", "56dcd2fa": "ICO_LEVEL_3()", +"56dd3895": "lock(uint256,bytes8)", +"56dd4755": "startAuction(address,uint256,uint256)", +"56ddabc1": "BetCreated(uint256)", +"56ddb51b": "BTAL()", "56ddbe7a": "setVRC(address,address,uint256)", +"56dded48": "UpdateDistance(uint256,uint256)", "56ddeea2": "getIcoDiscountPercentage()", "56ddf404": "Executed(string)", +"56de03bd": "newInstance(string,address[],uint64[3],uint64,bool,uint256[4])", "56de9219": "Arina_amount()", "56de96db": "setState(uint8)", +"56dec1f6": "decodeAverageRateN(uint256)", +"56df04eb": "PRICE_MULTIPLE()", +"56df0ee2": "isAnyLogic(uint32,address)", +"56df3b29": "weiPoolAmount()", +"56df3db1": "changeOwner(address,uint256)", "56dfe628": "viewa2(address)", +"56e07d70": "kinkLevel()", +"56e0d51f": "refundPenaltyBasisPoints()", +"56e0eec7": "beneficiary_()", +"56e103ed": "bonusCardsClaimed(address)", +"56e17612": "MIN_BID_TIME()", "56e19e6e": "DDNToken(uint256,string,uint8,string)", "56e1c40d": "burnFeeNumerator()", "56e27ce6": "LuxToken()", "56e2eab8": "listAddress(address,uint256,uint256)", +"56e30dea": "_mintPie(address,uint256)", +"56e33cf5": "cryptoVersusWallet()", "56e379c1": "setICOLimit(uint256,address)", "56e39c58": "ProtectedTransfer(address,address,uint256,bytes32)", "56e3df97": "getGeneration(uint256)", @@ -49849,6 +91282,7 @@ "56e428fc": "LogAccessChanged(address,address,bytes32,address,uint8,uint8)", "56e44954": "setExchangeRates(address)", "56e49287": "auctionsEndTime()", +"56e4945a": "sellTokenAmount()", "56e4b68b": "supervisor()", "56e4bc1f": "payed()", "56e4e073": "TestETHToken()", @@ -49859,44 +91293,77 @@ "56e5e12b": "fundariaPoolAddress()", "56e60a31": "TokenExchangeFailed(address,uint256)", "56e62326": "createMultiple(uint256[],uint256[],uint256[],address)", +"56e6318f": "bVaultBank()", +"56e6456f": "onx()", +"56e65530": "LogModuleBudgetChanged(uint8,address,uint256)", +"56e67728": "_becomeImplementation(bytes)", +"56e6a500": "StakingTimeLeft(address)", +"56e7170c": "swapIn(address,uint256)", "56e721b3": "_getRefBonus(uint256)", "56e789eb": "checkTotalSold()", +"56e7b7aa": "delegateCall(address,bytes)", "56e7bcd1": "putUsername(string)", "56e7f6c7": "layerCount()", +"56e81804": "availableTotalLiquidity()", +"56e82ee2": "rFactor(address)", "56e83e81": "randao()", "56e8596f": "grantContributorTokens(address)", "56e8b3ac": "PabloPlusToken()", "56e8efd4": "EventNotarise(address,bytes,bytes)", "56e8f53e": "_crownTotalSupply()", +"56e94897": "getOfferLength(address)", "56e97617": "bullcrapToken()", "56e9ae71": "OCTCOIN()", "56e9d1f3": "deList(bytes32)", "56e9ec88": "equipmentItem(uint256[],uint256[],uint256)", +"56ea763b": "b(address,uint256,uint256)", "56ea84b2": "getMarketCurrentIndex(uint256)", +"56eac7dc": "pos(bytes32)", "56eaf1c0": "commissionPoints()", "56eb5a79": "Bags()", "56ebb303": "rewardContributors(address[],uint256[])", "56ebd52d": "STRAAToken()", "56ed8636": "membershipStatus(address)", +"56edd180": "BetPlaced(uint256,uint16,uint256)", +"56eeafd9": "stakedTokens(uint256,address)", "56eeb3b0": "startAtBlockNumber()", +"56eebf0b": "getTotalCount(uint256)", "56ef9296": "getMultiRequestFirstRequestId(uint256)", +"56efa18e": "packPriceInToshiCoin()", +"56f01a2b": "setTokenConverter(address,address,address)", +"56f0889c": "getTokensPerEth(uint256)", "56f09125": "getConverters()", "56f10988": "GDCNumber4()", +"56f116c3": "claimETF(uint256,bytes32,bytes)", "56f14cf6": "_burn(address,uint256,uint256,uint256)", "56f1594e": "UpdateMoneyAt(address)", "56f19703": "rejectedBookingfc(uint256)", "56f1d2dc": "increaseSystemCreatedCount()", "56f1dd6b": "ifoodDev()", +"56f1ee96": "impl_suicide()", +"56f2969d": "onCryptoDODOEnergyChanged(uint256,uint256,uint256)", "56f2b308": "GDCNumber2()", "56f2eb90": "pendingRewardsToMint()", +"56f2f140": "getLockListLen(address)", "56f2fc89": "deployIdeas(address)", +"56f31fb9": "getUnstakeLPFee(uint256)", +"56f33ff3": "mAssetAddress()", "56f399a7": "getContractInvoices(uint256,uint8)", "56f43352": "tradingFee()", "56f464ea": "releaseFundsWhenBothSigned()", +"56f4a9e9": "checkIfEven()", "56f50473": "downPayment()", +"56f532fa": "newBattleCard(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"56f56518": "emergencyShowTransfer(address,uint256)", +"56f601e3": "setWi(address)", +"56f669db": "DEPOSIT_MAX()", "56f66f4c": "reportResult(uint32[],int8[],uint32,uint32,uint32,uint32,bytes32)", +"56f698a3": "createToken(string,string,uint256,uint256)", "56f6e184": "addToWhitelist(uint8,address)", +"56f735b1": "percentageOperations()", "56f7cafe": "registry_exec_id()", +"56f840a1": "IsRunningPool()", +"56f90d79": "headers(uint256)", "56f91399": "trCut()", "56f99fcb": "freezeLottery(uint32,bool)", "56fa47f0": "split(address)", @@ -49906,44 +91373,84 @@ "56fb8a34": "getPivot(uint256,uint256,uint256)", "56fbd029": "Saflok(bytes32,bytes32,bytes32,bytes32)", "56fbdca3": "whitelistInvestor(uint256)", +"56fbe486": "NERD_LOCKED_PERIOD_DAYS()", "56fbf488": "setPrix(uint256,uint256)", +"56fc1f50": "ExternalTokenDecreaseApproval(address,address,address,uint256)", "56fc35d3": "BunzolaToken()", "56fc6dae": "getUpline()", "56fcb29f": "selfPayout()", +"56fcdae3": "totalPercentages()", +"56fcde1f": "addPharmasist(address)", +"56feb11b": "swapTokensForEth(address,uint256)", +"56febaa0": "vest(address[],uint256[])", +"56fecc8e": "rebaseCooldown()", "56ff2318": "usersWithdrew(address)", +"56ff3ba4": "availableVolume(address,uint256,address,uint256,uint256,uint256,address)", "56ff55d1": "_isSchemeRegistered(address,address)", +"56ff8271": "UnlockedBalance(address,uint256)", "56ff83c8": "crowdsaleWallet()", "56ff918d": "getNextKillingAfter()", +"56ffeee4": "registerOutcome(bytes32,uint256)", "57006864": "checkBetParity(uint8)", "5700cb10": "getMainRemainCoins()", +"5700e2f1": "claimedSeeds(address)", +"570114f6": "getStakerRealizedYield(address)", +"57011b4a": "batchSweepETHandTokens(address[],bytes32[])", "570136ad": "liuToken(address,address)", "57014fee": "domainOwner(string,string)", +"57016b0a": "addToken(uint256,address)", "57016ded": "transfer_to_reserves(address,uint256,uint256)", "57019b37": "setControllerAddress(address,address)", "5701ac59": "calculateReferralFee(uint256,uint256)", "5701e9c0": "TrustlessTransaction_Refunded(uint256,uint256)", "570200c0": "setStarterPack(uint256,uint16)", +"5702104b": "add_remove_liqudity(uint256,uint256,uint256,uint256)", +"57027493": "mintTo(address,uint8,string,uint256,uint8,uint8,bytes32,bytes32)", "5702b530": "byteToString(bytes1)", +"5702ca1e": "getTaxPoolAddress()", "57035b60": "SWIZERStandardToken(uint256,string,uint8,string)", "570468f0": "SupportRemoved(address)", "5704b927": "ASXC(uint256,string,string)", "57056261": "insert(uint256,bytes32[])", +"5705a19d": "PauseOperatorTransferred(address,address)", "5705b612": "getUserId(address,address)", +"5706320e": "lockNextPurchase(address,uint256)", +"570669d5": "getRunnersByTeam(string)", +"57068728": "buyCollectibleOracleHashes(bytes32)", "5706d99a": "STAGES()", +"57073d4b": "existingIDs(bytes32)", +"57074510": "detachSelf()", "5707812e": "addToLists(address,bool,bool,bool,bool)", +"57084164": "bosoms(address)", +"5708447d": "getPriceUSD(address)", "5709013e": "changeToStage(uint8)", +"570903a2": "termsLength()", "570919a6": "retrunError()", +"570941d2": "setErc677TokenContract(address)", +"570953ee": "updateXRate(uint256)", "5709d7bd": "DevPromotionsMarketingWallet()", +"570a023d": "setShares(address)", "570a2a16": "right53(uint256)", "570a8496": "uploadData(bytes32[])", +"570ab1b5": "validateInputs(address,address,address,uint256)", +"570ab6df": "_getCurrentContentId()", +"570ae347": "burnoutQueueSize()", +"570aea8a": "getTotalProducts()", "570b615a": "tournamentDataIPFSHash()", +"570bb139": "explorePlanet(uint256)", "570bc25f": "makeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"570bd8ad": "newPurchase(address,uint32,uint8[],uint32[])", +"570c537e": "getMessage(address,uint256)", "570ca735": "operator()", "570d2f8f": "trustedWallet()", "570d31b7": "ConsultaRegistro(bytes32)", +"570d41dd": "dgeContractAddr1()", +"570d4235": "updateSupplier(address,string,uint256,uint256)", +"570d8e1d": "strategistAddr()", "570e0db5": "addDestination(bytes32)", "570e6729": "getOptionHash(address[3],uint256[3])", "570e997d": "gettnode(address)", +"570f3167": "getCombinedTokenArrayLength()", "570f65c4": "getProjectArbitrationFees(bytes32)", "570fceb0": "updateHashrate(address,uint256)", "570fe8c3": "cancel_payment(uint256)", @@ -49952,10 +91459,16 @@ "5710de14": "newProof()", "5710ed95": "contractBlock()", "5711b311": "executeRemoveAuthorizedAddress(uint256)", +"5711caaf": "issuer(address)", +"5712154d": "_checkAccountLoad(address)", "571218fa": "priceModel()", +"571251b8": "newFunc(address)", +"5712564c": "setLicenses(address,address)", "57128ec1": "userGrowPoolAddress()", "57135859": "BBBToken(uint256,string,string)", "57138106": "verifyKyc(address)", +"5713888f": "maintainence_pool_amount()", +"5713f8c4": "modifyIndividualRestriction(address,uint256,uint256,uint256,uint256,uint8)", "5713fcb7": "compatible20()", "5714db23": "AdvisoryPool(address,address)", "5714e01f": "ownsAddress(string,address,address)", @@ -49964,226 +91477,428 @@ "5715b530": "claimReservedTokens(string,address,uint256,string)", "5715c5b7": "getTokenAddressByIndex(uint256)", "57163cc3": "initAtx(address,address,address,uint256)", +"57168d13": "removeCollector(address)", "571694cd": "getHashOfSecret(bytes32)", +"5716e357": "addresslists(bytes32,address)", +"571833ab": "moveBrick(uint256)", "57183698": "addProject(uint256)", "57183c82": "instantiations(address,uint256)", +"571876a3": "ExplodedSupernova(address,uint256[])", "5718b760": "withdrawSize(address)", "5718b994": "checkEvent(address,bytes,bytes,uint256)", +"5719098b": "globalEpoch()", "571959e0": "getServiceProvider()", "57199334": "insertUser(address,bytes32,bytes32,bytes32,uint256)", "5719a565": "SignerChanged(address)", +"5719c7fa": "deal(address,uint256,uint128,uint8,uint8,bytes32,bytes32)", "5719dd22": "getTokenListLength()", "571a045d": "change_game_stic(string)", "571a0830": "withdrawAndKill()", "571a1f66": "erc165UpdateCache(address,bytes4)", "571a26a0": "auctions(uint256)", +"571a6972": "neolabToken()", +"571ac8b0": "approveMax(address)", "571af13b": "unlock10PercentTokensInBatch()", "571b0227": "createUserLottery(uint32,uint32)", +"571b1f8a": "WHITELIST_DURATION()", +"571b3b5f": "getLiqAddBudget(uint256)", "571b3d52": "createCitizen(address,uint16,uint16,uint8,bytes32,bytes32,bytes32)", "571c4539": "askQuestion(address,uint256,string,address[])", +"571dd744": "WinBet(address,uint256,uint256,uint256)", "571e4a6d": "addEngineer(address,uint256,uint256)", "571ebd3c": "addCandidate(address,bytes32)", "571ec8d9": "addBoardScore(bytes32,bytes32,uint256)", "571f4d9a": "getOffsets()", +"571f8261": "exitEth()", "571fe016": "MAX_SALE_SUPPLY()", +"571fe991": "approvedAccounts(address)", "57204a1d": "unlockat()", "57207703": "initBank(uint256)", "5720988b": "QLANCE()", +"5720d0db": "weightJuniorSupply()", +"5720f211": "complainOrderBuyer(uint256)", "57211ac0": "getPaidOut(address)", "5721b89a": "withdrawNoMoney(bytes32,address)", "5721e419": "getBuyer(address)", +"57225e1b": "fulfillBytes(bytes32,bytes32,uint256,bytes,address,bytes4)", "5722e24a": "setLogger(address)", +"57230f95": "rq()", "57230ff8": "createCity(uint256)", "57240913": "vouched(bytes32,uint256)", "57241f8e": "tokensOnSale()", +"57244119": "revertForwadingError()", "5724630c": "Disbursed(address,uint256)", "57246c1c": "getPartnerCash(uint8,bool)", "57246d23": "jackpotSize()", +"57247e39": "BuyLevel1Ownership(address)", +"5724a618": "getEthUsdTimestamp()", "57257a67": "startPrivateSales()", "5725b8c5": "_initRandom()", "57260364": "changeSubcourtTimesPerPeriod(uint96,uint256[4])", "57263ce1": "_isProviderValid(uint256)", "57266803": "casinoWithdraw(uint256)", +"5726a356": "getMaxDepositAmount()", +"5726f660": "removeResolversFor(uint256,address[])", "57271a93": "bountyP()", "57277b92": "storeEth()", +"5727cb59": "startNewLottery()", "5727dc5c": "BB()", "5727e25d": "getCurrentRoundId()", "5727e30b": "makeOraclizeQuery(uint256,string,string,uint256)", "5727eec0": "speed_limit()", "572816ef": "audit(uint8,uint8,uint256)", +"57282173": "getGetMinMiddle128()", "57282b96": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,bytes20,address,uint64)", +"57288d00": "withdrawFinal(address,uint256)", "5728ab6c": "kyberTrade(uint256,address,address,bytes32)", "57292af8": "bonusRateOneEth()", +"5729a578": "actvTttlInvs(address)", +"5729b394": "vaultDeposit(uint256)", +"5729bd4c": "activePool(uint256)", +"572a4100": "updateDev1(address)", +"572a794b": "PurchaseToken(address,address,uint256,uint256,uint256,uint256)", "572b130f": "addItem(uint256,uint256,uint256,uint256)", +"572b4032": "isFinishMint()", +"572b584e": "BountyDistributed()", +"572b6c05": "isTrustedForwarder(address)", "572b7a03": "minimumFeePlusDividendsPercentage()", "572bcb3e": "setLockByPass(address[],bool)", "572bcfe1": "deliverRewardedTokens(address,uint256,string)", "572c1517": "transfer(uint256,string,bytes)", +"572c1a4c": "approve_363(address,uint256)", +"572c3243": "calculateExecutionQuantity(address,uint256,bool)", "572c62ca": "poolSale()", +"572ca9e7": "ONE_DOLLAR()", "572d5298": "setProduct(string)", +"572d7689": "addDoc(address,string)", +"572d8474": "LASTPACKAGE()", +"572dc0d7": "marketMakerWithdraw(address,address,address,uint48,address,uint256,uint256)", +"572e0531": "New(address,address)", +"572e3543": "CONTRACT_KTON_ERC20_TOKEN()", "572e85ec": "getCurrentPhase(uint256)", +"572e9085": "VADRPerBlock()", +"572f1f0d": "_tokenMaxSupply(uint256)", "572f37b4": "notePrepurchase(address,uint256,uint256)", +"572ff227": "isEnoughBalance(uint256)", +"573074f9": "nextFormation()", "57315881": "getdoctor(uint256)", "5731d433": "balanceInLottery(uint32,address)", "5731d9cb": "seriesInfo(bytes32)", "5731d9e3": "onefive()", "5731f357": "oraclize_query(uint256,string,string,string)", +"57324529": "f1c()", +"573255f4": "judge()", "5732788a": "validateCompanyName(bytes32)", +"5732826e": "ESD()", "57329424": "getPorscheByOwner(address)", "5732a273": "backup_drawdown_amount(uint256)", +"5733281a": "pendingAnubis(uint256,address)", "573328ef": "advertising()", "57332f08": "Lexcoin()", "57337044": "randomByWeight()", +"57340f72": "BurnInterval()", "57344e6f": "getCredit(address)", +"57347976": "invests(address)", "57347f24": "playerWithDraw(uint256)", "573618f3": "eXchangeQualityCoin()", +"57365db6": "notifyTaker(address)", "5736c9d4": "getStageBuyers(uint8,uint16,uint8)", +"5737155d": "_wbtc()", +"57371ade": "setCourtStake(address)", +"57376198": "rescueTokens(address,uint256)", "57381228": "betInStageAndReturnExcess(uint256,uint256)", "57381ee4": "sendTokens(address,uint256,uint256,bytes32)", "57386c2a": "smallId()", +"5738e01f": "_latestTimeAdded()", "5738fa56": "hasDataStream(bytes32)", "57393674": "exhaustFusion(uint256)", "573939de": "_resetFrozenInfo(address)", +"57397edd": "CreatedBallot(address,uint256,uint256,bytes32,string,string,string,string,string)", +"5739e2b6": "PayoutProcessed(address,uint256,uint256)", +"573a6b2f": "htwo()", +"573ade81": "repay(address,uint256,uint256,address)", +"573b7df6": "_time_diff(address)", +"573be0fb": "roof()", +"573c0b0e": "earliestDelete()", "573c0bd3": "updateValue(uint256)", +"573c473e": "setSystemPartiallyPaused(bool)", +"573c67b6": "removeWhitelistes(address)", +"573c80fa": "mintTicket()", +"573cf574": "landsRedeemed(address,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()", +"573d7339": "transferNote(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[7],string,string)", "573dea96": "toWei()", +"573f322f": "conjureWizard(uint8)", +"573f3c19": "setCategory(uint256[],bool[])", +"573f5dae": "isWhiteListActive()", "573f642d": "_productDigest()", "573f7af5": "mintNFTsForSale(uint256[],bytes32[],uint256[])", +"573fb624": "getAgreementById(uint256)", +"573fef0a": "beforeDeposit()", "57400cf3": "currentJackPot()", "57405301": "creatorad()", +"57407795": "getAmountInForUniswap(address,uint256,bool)", +"57407c66": "distribution_contract_s_principal()", "57408a98": "getNode(int256)", "5740a4be": "CertifyDelegate(address,uint256)", "5740d43c": "setDeprecated(address,bool)", "57411a67": "getAddressDigit(address,uint8)", +"5741229c": "werc20()", +"57414c07": "setTransfer(address,uint256)", "57417e78": "insetMoney()", "5741fbce": "isPresellOpen()", +"5742006d": "changeRewardPercent(uint256)", "574356b4": "VULCAN_PROMETHEUS()", +"57439a43": "antenna(address,address)", +"5743b2b1": "redeemAll(address[],uint256[],uint256)", "5743cee0": "BwwToken()", +"574401e2": "_safeTransferBNB(address,uint256)", +"574419c3": "currentlyInLine()", +"57445591": "balanceOfUsername(string)", "57446636": "createContractOfAthlete(string,address,uint256,uint256,uint256)", "574479e6": "currentPot()", "574490cd": "ERC721Address()", "57451104": "bonus_for_add_stage()", +"5745c91a": "getCirculatingKrk()", +"5746402b": "getTokenToBnbInputPrice(uint256)", +"57466c8b": "init_twap()", +"574777a6": "userCurId()", "57478e38": "Free_Ether_A_Day_Funds_Return()", +"5747b56f": "cETHPerBlock()", "5747baf5": "Roles()", +"5747e69f": "emergencyWithdrawEnabled()", "57481222": "get_all_project_information(uint256,address)", "574844f4": "BLMFund()", +"5748d515": "UserAddressToName(address)", +"57495369": "callProxyManager_getManagerAddr()", "574a5e31": "weiPerAtom()", "574a89e9": "GOOGLE()", +"574aace4": "totalMoondayBalance()", +"574b054e": "setTreasuryFundRatio(uint256)", +"574b2163": "getStakingRewardNow()", +"574bad14": "batchFillOrders(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes,uint256[],bytes[])", +"574bae38": "PurchaseLog(address,address,uint256)", +"574bc49b": "TransferedToPool(uint256,uint8)", "574bea92": "bonusPhaseOneDeadline()", +"574bede3": "_ensureCurrentTerm()", "574c339a": "HackerSpaceBarneysToken()", +"574c7e9d": "paidRateOf(address)", "574c8776": "addAddressesToRole(address[],string)", +"574cb766": "f32(uint256)", "574cc0fe": "addManyToWhitelist(address[],uint16,uint256)", "574d6554": "setIPFSHash(string,string)", "574e9063": "crowdfundPercentOfTokens()", +"574eab01": "withdrawAllowed()", "574edd28": "updatePropertyData(uint256,string)", +"574f2ba3": "allPairsLength()", "574f9a81": "setAttr0(uint256)", +"57500bba": "deactivateVoting()", "5750644a": "setProviderParameter(bytes32,bytes)", +"575072c6": "afterPrizePoolAwarded(uint256,uint256)", "5750abfa": "BONUS_TIMES(uint256)", "5750daa0": "GameToken()", +"575128b0": "testOnlyInvestorCanPutOnSale()", "57518243": "addToWhitelist(address,address)", "575185ed": "createGroup()", "5751892f": "increaseProjectCompleteLevel()", +"5751bee2": "walletAngelSales(address)", +"575222f5": "NewTokenAddress(address)", +"57526b3f": "feeParts()", +"57529757": "minStimulusTimeIntervalSec()", "57530017": "setReservedTokensWallet(address)", +"57536e2f": "get_estates(uint256)", "57536e64": "GuessTheRandomNumberChallenge()", "5753a6b2": "construct(bytes32,string,bytes32,address,uint128,uint256,uint64,uint64,uint256)", +"5754371f": "acsFarm()", "57548f32": "_tokenPurchased(address,address,uint256)", "5754a042": "attempts()", +"5754a767": "BonusFromLength(address)", "5754aadc": "getEntryByName(bytes32)", +"5754ce4e": "customName(address)", +"5754f8d6": "poolBoostByLp(uint256)", +"57550cd8": "unClaimedDividends()", "57553101": "updateDetails(string,string,string)", +"575630db": "CLT()", +"5756400a": "getInsertedHashGroup(uint256[])", "5756572e": "Show_the_name_of_Option_B()", +"575765e2": "setApprovedAddress(address,bool)", "5757a66a": "_deployBallotChecks(bytes32,uint64)", "5757dcdf": "getCooldownIndexFromGeneration(uint16)", +"57582d38": "withdrawAllFromPool(uint8,string)", "5758537b": "payBonusAffiliate(address,uint256)", +"5758b1ff": "UniswapContract()", "57593c23": "TokensDelegated(address,uint256,address)", "57595e2a": "get_previous_global_audit_document(bytes32)", "57597321": "_findpos(uint256,uint256)", +"575979c5": "getHandlerID()", "57599dff": "curatorAddressOf(uint256)", +"5759adc0": "PayoutBond(uint256,address)", +"5759b5af": "perpetualAltruismCut()", "5759e7af": "getMilestonesLength()", "575a4187": "getClaimableStake()", +"575a43a3": "ERR_STARTEGY_NOT_ACTIVE()", "575a7722": "setPOOL_edit_29(string)", +"575a86b2": "masterChef()", "575ab848": "MatCashToken()", "575b4071": "currentPeriodEndTimestamp()", "575b6efe": "EARLY_INVESTORS_SUPPLY_LIMIT()", "575b8cc8": "kcck256str(string)", "575cb0f6": "block()", +"575cc5af": "Played_room(bytes32,address[2])", "575cea6b": "getUserReferrals(address)", +"575ceb4b": "removeMarketsByAsset(bytes32[])", "575d462a": "phase1EndBlock()", +"575d7ffe": "getHalvedReward()", +"575dc7b3": "overnightFeeLpShareRatio()", "575dfc4a": "Sale(uint256,uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,string,string,uint8)", "575eaf98": "fractionalize(address)", +"575ed201": "mintPOOH(uint256)", "575ed3de": "ViewGold()", +"575f63e9": "getTopBig(uint256)", "575f7832": "InterestFinal(address,address)", +"57601502": "disableLimitMode()", "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()", +"5761a7ae": "pool1currUserID()", +"5761b347": "setTaskInfo(bytes32,uint256,uint256)", "57623d59": "AttachAsset(uint256)", +"57629eca": "setTolerancePriceBelowOnAcoPool(uint256[],address[])", "5762a880": "standFeeBefore500()", +"5762b672": "amendProposals(bytes,bool,string,string)", "5762f25f": "test_1_validShouldBe5()", "57635dc1": "validate(address[5],address,uint256[12],uint256,bytes,uint256)", +"5763dbd0": "collectRewards(address)", "5763e103": "powercontract()", +"57642f5b": "affectCharacter(uint256,uint256)", +"57643d51": "setBid(string,uint256)", +"57646c1e": "zhuAddr1()", "57646d5d": "OkkamiToken()", "57650592": "getPlayerBackDataForMarketPlaceCards(uint256)", +"57651ac3": "startStake(uint256,uint256,address)", "57651be6": "replaceUser(address)", "57652f13": "assingAdminship(address,uint8)", +"57653836": "NewSeason(address)", +"57654fe4": "ZeroCantBeAuthorizedError()", +"57657081": "allDeposits()", "5765a796": "addRegistered(address)", "5765cc2a": "setmessiDevAddress(address)", "5765dd1a": "MTC(address,address,address,address,address,address,address)", "57670366": "getTargetReportsPerReporter()", "576709a2": "finishingWithdrawing()", +"576738f2": "totalPotatoYield()", +"5767b8de": "claimRgt(uint256)", "5767b9ab": "retrieveV(uint256)", +"5767bba5": "claimAll(address,address)", +"57687294": "PetitionShareholders(uint256)", "5768bc4a": "_createArmy(string,string,uint256,uint256,uint256)", "5768fca3": "paymentDestination()", +"5769126c": "numberOfShares(address)", +"57692f25": "_checkProUser(address)", "57693e9a": "NBB()", +"5769746f": "startTrade(string,uint256,bool)", +"57698263": "redeemedCoupons(uint256)", +"576a3714": "marPerBlock()", +"576b1f1d": "dmmPerBlock()", "576b8bba": "SeedMemberCanDraw()", +"576b9461": "issue3DTwistToken(string)", "576bc138": "NKCToken()", +"576be245": "GetShareRule(address,uint256,uint256,uint256)", +"576bebc7": "registeredEmail(bytes32)", +"576bf99a": "T0()", +"576c23ab": "boosterToken()", "576c3de7": "getTier(uint16)", "576c51bc": "countOfPublicKey()", +"576cc0f0": "payAppFees(bytes32,uint256)", +"576cc0f7": "burnItem(uint256)", "576cecdc": "checkStubs(bytes32,bytes32,address)", "576cfdd7": "window2EndTime()", "576d067b": "StageOneDisable()", "576d1ce1": "internalVerifyCert(bytes32,bytes32,address)", "576d4e13": "_createLinglongCat(uint256,uint256,uint256,uint256,address)", +"576d7271": "deploySimpleSwap(address,uint256)", +"576dcc3d": "preciseDivCeil(uint256,uint256)", +"576dde12": "bnbPrice()", +"576e51a9": "modifyBeneficiaries(address[],uint256[])", "576e6d4e": "_buyXaddr(address,uint256,bytes32)", "576eac66": "setFundingGoal(uint256)", +"576ebfde": "teamAndAdvisorsAndBountyAllocation()", "576f35e3": "setBatchSize(uint256)", "576f7e31": "getApprovedBuyerMappingCount(address)", +"576f7ea7": "getNFT(uint256)", "576f9cba": "isInDirectory(address)", +"576fcd1b": "updateUserEventPermission(address,bool,uint256)", "577000a3": "onlyPartnersOrAdmin(address)", +"5770190d": "GetTotalBonds()", +"57702a42": "claimRewardTaxDenominator()", +"5770f640": "requester(uint256,uint256)", "57712f37": "CappedBurnToken(uint256)", "577131ac": "bankrupt(address[])", "57717090": "transferWinnings(uint256,address)", "5771d6e4": "readMessage(string)", +"5771d9d6": "validChain(bytes8)", "5772437f": "unfreezeOf(address)", +"577255de": "updateCurrentSupply(uint256)", +"57727866": "TransferBecauseOf(address,uint32,uint256,address,address,uint256)", "57727a04": "ZZCoinToken()", "5772ae70": "setLoanManager(address)", +"5772bf05": "contingencyStatus()", +"577312eb": "l1l3users()", +"57738bbb": "triggerTransferEv(address,address,uint256)", +"57738e8f": "roundInfos(uint8)", +"5773b644": "stakeAllCars()", +"5773c0b8": "safeTokenApprore(address,address,uint256)", "5773faf9": "modifyVariable(address,uint256,uint256,uint256,uint256)", +"5774be4f": "testInvestorCanCancelInvestment()", "5774ce4d": "sendBonus(address,address,uint256)", "5775b57e": "totalBuyOrdersOf(address)", +"5775d711": "onAirDrop(address,uint256,uint256)", +"57763c08": "sell_goods(uint256,uint256,address)", "57764094": "getRate(uint256)", +"57767df5": "returnsUnnamedStaticNestedArray()", "5776af28": "shardAward(address,uint256,uint256)", "57771a23": "del(uint256)", +"5777bf50": "isDepositsEnabled()", "5778472a": "getOrder(bytes32)", +"57786198": "_calcSpeedBonus(uint256,uint256)", "57786394": "feeMake()", "57788716": "doKeccak256(uint256)", "577890f6": "presaleFallBackCalled()", "5778bec2": "Deal()", +"57793685": "getMarketClearAnchor(address)", "57796e1c": "setVote(uint256,uint256)", "577a75a0": "CRAWDSALE_END_DAY()", +"577bb86e": "logZeroXOrderCanceled(address,address,address,uint256,uint256,uint256,uint8,bytes32)", "577bd336": "progress()", +"577c6b1f": "getEthToTokenInputAmounts(address,uint256)", "577c78f1": "SitcomToken()", +"577c7fd4": "withdrawExactETH(uint256)", +"577c9b40": "freeze(uint256,bytes)", "577ccfe0": "tokenFrozenUntilNotice()", +"577d5920": "poolGRGminimumSatisfied(address,address,uint256)", +"577d8a79": "setRoutes(uint256,uint256[])", +"577e128d": "_upperTransferLimit()", +"577e5151": "_emitTransferred(address,address,uint256)", "577ec5ae": "cookieProductionMultiplier()", "577ef53d": "SetA(uint256)", "577f7133": "PHOENIX_CORSAIR()", +"577f8904": "referrerRateNormal()", +"578064f6": "currentAskForToken(uint256)", "57806705": "addpatient(uint256,uint256,string)", +"5780791d": "lastDistributionBlockNumber()", "5781d9e7": "isRegisteredRetailer(address,address)", "57820829": "UP_etherWin()", "578242c3": "CompositeCoinCrowdsale(uint256)", +"57829a4e": "takeaPeme(uint256)", +"5782a878": "remaininglockedTokens()", +"5782ce50": "BuyNetwork(address,uint256)", +"5782d176": "changeReceiptMaker(address)", "57831809": "payoutCount()", "57835720": "setSetupCompleted()", "578436a7": "CoinDisplayNetwork()", @@ -50193,180 +91908,336 @@ "57861e65": "VVDBCrowdsale(address,address)", "5786a552": "registerEmployee(address)", "5786cbdc": "sendBackSurplusEth()", +"5786ead2": "updateTitle(uint256,string)", "5786f28c": "regionsIsPurchased(uint256)", "5786fd40": "getProductsCount()", +"5787299e": "ClaimMaxable()", "57875631": "setAccessPolicy(address,address)", +"57877d99": "newTokenTypeData(address,bytes23,bytes8,uint256,uint256,uint256,uint256)", "578799b3": "QRTok()", +"5787d291": "getBorrowETHValue(uint256)", "57880042": "bulkPurchageEgg()", "57880c04": "releaseForce(address,uint256[],uint256[])", +"57880e3c": "taxDivisor()", "57885380": "ChannelAudited(uint256)", +"57885ade": "updateMappingAccount(string)", +"57888e92": "checkDepositConfirmations(address,uint256,uint256,bytes32)", "5788a081": "ownerAddressMap(address)", "57894c1b": "createClone(address)", "57895ca2": "setManagerContract(address)", +"5789880f": "closeVault(address,uint256)", +"57899399": "addStrat()", "5789a722": "LocusToken()", "5789b1cd": "transferAdminMessage(address,address)", "5789baa5": "isUnlockedBoth(address)", +"578a522d": "addParticularAddress(address)", "578a791d": "setExchangeFeeRate(uint256)", "578aa665": "_createToken(string,address,uint256)", "578affb4": "Logger(string,bool)", "578b08e2": "GPUxToken()", "578b2dab": "euroTeams(uint256)", "578b3a56": "normaliseCardIndices(uint256[])", +"578b40a2": "getcreatedTime(uint256)", +"578b48d4": "IsAttackContract(address)", "578bbdc1": "isSaleContract(address)", "578bcc20": "reduceDebt(address,address,uint256)", "578bcf35": "distributed(address)", "578bcfca": "AddedToHolder(address,uint256,uint8,uint256)", "578c3485": "iWantToKillMyself()", "578c6642": "BONUS_BATCH()", +"578ca557": "amountToBonus()", +"578ca7dc": "balanceOfUnFreezed(address)", "578cf4a9": "testTemp1()", "578d52b6": "GetDidPayOut(bytes32)", +"578d714b": "isUsed(string)", "578de482": "OCE()", "578de8aa": "addressToAsciiString(address,address)", "578e2f7d": "verifiPost(uint256,bool)", +"578e769e": "buyMineDiamond()", "578e9825": "burnEscrow(uint256)", +"578e9dc5": "cold()", +"578eb50b": "removeProtectedToken(address)", +"578ec33f": "_minter()", +"578ed034": "createGen0Bud(uint256,uint256,uint256,address)", "578ee866": "getCurrentTimeBonusRate()", +"578f2aa0": "latestIndex()", "578f9658": "shopTome()", +"578fd681": "oneMonthDuration()", "578ff67a": "new_hash(bytes32)", "57901b19": "genRandomArray(uint256,uint256,uint256)", "57902a75": "rateTier2()", +"579048be": "advisorsPercentage()", "579078cf": "TestAnyChain()", "5790de2c": "ProposalAdded(uint256,address,uint256,bool,string)", "579140e8": "BITSEACoinERC20Token(uint256,string,string,uint256)", "579140f4": "tokenInitialized()", "57915897": "faucet(uint256)", "57918052": "setPriceIncreasingRatio(uint16)", +"5791a30e": "plan_completed_p1()", +"57926f69": "acceptingSubmissions(uint32)", +"57928e92": "cakeToBnbPath(uint256)", "5792b512": "Bettereum()", "5792e1de": "CheckCarToken()", "5792e262": "registration_fee()", +"57930e79": "providerIsAuthorised(address,address)", "579327fd": "TOTAL_ETHER_HARD_CAP()", +"57933f9d": "FURNACE_APP()", "5793511f": "playersList()", "57938b2a": "requestCancellationMinimumTime()", "5793bfdc": "createSDC(address,address,uint256,uint256)", +"5793e155": "addKyberFeeHandler(address,address)", "579424e7": "HOWLToken()", "579425b7": "feeBurnerContract()", "57945e3e": "anyAssetHasChanges()", "57945ed1": "FindMyFish_EnterBarcode(bytes9)", "57946897": "Test11()", "57946a86": "SPEKToken()", +"579477e8": "homelandEarned(address)", +"57949b92": "withdrawAfterPresaleOver()", +"5794dc82": "ALASTIMPLIED()", "57950697": "testState()", "57955f3b": "ExampleIntervalTree()", "579599bd": "canCreateEdition(uint256,uint8)", +"57960e64": "PERIODS(uint256)", +"579632a9": "finaliseAuction(uint256)", +"5796d00b": "STAKE(uint256,uint256)", +"57970e93": "linkToken()", +"5797654d": "minSuperNodes()", +"57976fb4": "liquidityLocked()", "57978a75": "updateInviteInfo(address,uint8)", "5797cd52": "Settle(uint32,uint32)", +"57986129": "withdrawCheck(address,address,uint256)", "57987d38": "PSCN()", "57988a55": "card_gold_first()", "57989b4c": "IsCityNameExist(bytes32)", "5798d5bc": "rSetA(address)", +"57991d30": "getTokenIds(uint256)", "579952fc": "transferFromTo(address,address,uint256)", +"579984c7": "mintForBridge(address,uint256,uint256,uint256)", +"5799d884": "setKoalaAddressLP(address)", +"5799e222": "approve_179(address,uint256)", +"579a5c1c": "getOstanLogisticManager()", +"579a6988": "isRegistered(uint256)", +"579a7e1a": "WETH_TOKEN_ADDRESS()", +"579ac88f": "contractFees()", "579b9499": "estimatePurchasePayment(uint256,uint256)", "579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", +"579bb465": "imNotDeadYet()", +"579c7048": "totalDiceRollsByAddress(address)", "579cd3ca": "conversionFee()", "579cdf17": "getAdminName(address)", +"579d4038": "depositRAW_eth()", "579d4f7a": "changeHouseFeePercent(uint256)", "579d5fba": "debug_hash3Int(uint256)", "579da090": "needUpdate()", +"579db56a": "fee_accumulated()", "579db769": "getIudex(address)", +"579dfc9a": "bulkmint(address[],uint256[],uint256[])", "579e0b87": "assignAnotherOwner2(address)", +"579e526c": "swapBase()", "579f0789": "BNN_ALLOCATION()", +"579f154c": "issueEvent(bytes32)", "579f20d8": "submitProxyVote(bytes32[5],bytes)", "579f61d8": "valueDelete(string)", +"579f7fa0": "stopMintToken()", "579fc25e": "contractFallback(address,uint256,bytes)", "579fe761": "vote(uint80,uint80)", "579fea7d": "setDolRate(uint256)", "57a0685b": "privateSaleMinEth()", +"57a0bf0c": "buyAndWithdrawCards(uint256,address)", +"57a0dc46": "turnOutNestNodeForStateOfEmergency()", +"57a12403": "ownerDataString()", +"57a13a16": "BUCKET_X2()", "57a15c4f": "createOffspring(address,string,uint256,uint256)", +"57a17cde": "isProvableAddress()", "57a1a58e": "setCycleResetTime(uint256)", +"57a1c0b0": "provable_randomDS_getSessionPubKeyHash()", "57a218e6": "WeSource(bytes32)", "57a27a76": "checkCompletedCrowdsale()", +"57a281dc": "getDODOPool(address,address)", +"57a299b9": "contractLoanLogic()", "57a2e60c": "VoiceCoin()", "57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", +"57a3f919": "harvestable(address)", +"57a4ab2f": "returnBrrrForETH()", "57a533e9": "logPromiseCreated(uint256,address,uint256,uint256)", +"57a53799": "finishChangePriceOracle()", +"57a73c4d": "Approval(address,uint256,address)", "57a756d3": "walletC()", +"57a7eb40": "approve_624(address,uint256)", "57a83f25": "TKRToken()", "57a858fc": "shares(uint256)", +"57a86f7d": "Init()", +"57a8a0db": "donated_people(uint256,uint256)", "57a8c01f": "registerUser(address,uint256,uint256,uint256,uint256)", +"57a92363": "withdrawSota(address)", +"57a9579e": "getPriceUSD()", "57a967ca": "waitingForClaimTokens()", "57a96dd0": "proxyTransferWithReference(address,uint256,bytes32,string,address)", "57a9838a": "Tronerium()", +"57a99f31": "WelcomeSuperVIP(address)", +"57a9c9a8": "getRefIds(address)", +"57aa2063": "dividendsOf(bytes32,address)", "57aaafe2": "toggleArtworkVisibility(uint256)", "57aaf08b": "getAlgosByCreator(address)", "57abd75d": "_weiToMth(uint256)", +"57abf042": "IndividualMaxCapTokensChanged(uint256)", +"57ac5cc5": "approve_287(address,uint256)", +"57ac7703": "GetMemberCycleInfo(address,uint256)", +"57ac9264": "rollExpiredPut(uint256,uint256,uint256,uint256)", +"57aca724": "getBusdBnbRate()", +"57acb004": "LogStartIcoStage(uint256)", "57acc118": "setForward(address)", +"57ad4663": "pynths(bytes32)", "57ad693b": "MIN_UPDATE(bytes32,uint256)", +"57ad8a67": "changeSwapRatio1(uint256)", +"57adafb6": "mWithdraw(uint256[])", +"57adb295": "REFERRER_FEE()", "57adc83a": "angelTime()", +"57adfc2d": "getIncomeBTCInWeiPerSec()", +"57ae5f8e": "min_allowed()", +"57ae678b": "setQueryMode(bool)", "57aeb5c8": "convertToMiniCFT(uint256)", +"57aee366": "lookupUnderlying(address)", "57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", "57aeeb25": "becomeSquirrelmaster()", +"57af0515": "getCATokens(uint256,uint256)", +"57af2829": "providers(uint8)", +"57af302c": "isSynthRateInvalid(bytes32)", "57af3eec": "STARTING_HIPSTER()", "57afb890": "collectRemaining()", +"57afed15": "burnDeposit(uint256,uint256)", "57b001f9": "unpause(address)", +"57b00ad3": "mapOf(uint256)", "57b021f3": "dynamic_profits2(address,address,uint256)", "57b07cd9": "getReleaseHash(uint256)", +"57b154d5": "setMaximumDeposit(uint256)", "57b16811": "totalsInfo()", +"57b17476": "minwithdrawfee()", +"57b1cc14": "Untokenized(string,address)", +"57b21920": "totalIssuedPynths()", +"57b24e6b": "inviteCount(address)", +"57b26105": "timestampWindow(uint256)", +"57b3082c": "allBondingToken(uint256)", "57b34be7": "_moveStage()", "57b394bf": "walletWithdrawal(address,uint256,uint256)", "57b45386": "removeCode(string)", +"57b46f88": "kswap()", "57b473e2": "okamiMinPurchase_()", +"57b4c460": "proposeToRemoveScheme(address,address)", "57b543e2": "getOwnersLength()", +"57b58de1": "WARBet(uint8,uint256)", +"57b6033a": "approve_876(address,uint256)", +"57b60f7d": "getAllSavings()", "57b69e72": "_kittenContract()", +"57b6e966": "icoSharePrice()", "57b70510": "parseResult(bytes)", +"57b71ea7": "updateMarketPrice(uint256)", "57b7247e": "UserWallet(address,address)", "57b7a0b6": "Paye()", +"57b80e4c": "redeemSHAREBondgetReward(uint256,uint256)", +"57b81b87": "addNewMinter(address)", "57b8e8c3": "devcon2Token()", +"57b8f505": "logPrintedCertificate(bytes32,string,string,string,string,uint16)", +"57b91c5f": "ticketIdToKey(uint256)", +"57b9929c": "test(address,address,bytes32,bytes32,uint256,bytes)", "57ba8652": "getRank02()", "57babe2e": "collectedBcy()", "57bbf921": "salesaccount()", +"57bc2ef3": "getBytes(uint256)", +"57bc3516": "check_liquidity_invariant()", "57bcccb6": "revokePermanentApproval(address)", "57bce8b0": "sendWei()", +"57bcef22": "LtdParamsChanged(uint256,uint256,uint256)", "57bcfc09": "HomeChain()", "57bd2a65": "allocated3Year()", "57bd4f7b": "getTime1(address)", +"57bd97b9": "littafiAdminReassigned(address,address,string,uint256)", +"57be4275": "isSchainActive(bytes32)", "57bf04be": "changeOwnedOwnershipto(address)", +"57bf0717": "startLIDOSale()", "57bf66d4": "accountForIncrease(uint256,uint256)", "57bfab93": "getAllABaddress()", +"57bfd08a": "AuctionCancelled(address,address,uint256,uint256)", +"57c02db5": "ethBoost()", "57c07055": "scheduleCall(address,address,bytes4,bytes32,uint256,uint8,uint256)", +"57c0fac7": "alterRedeemRequestAmount(bool,uint256,address)", +"57c14628": "approvedWallets(address)", "57c19b4f": "postFreezeDestination()", "57c1a709": "travelUnitFee()", "57c1f9e2": "removeDistributor(address)", "57c1feca": "BonusChanged(uint256,uint256,uint8)", +"57c2bb01": "setKun(address)", "57c393fa": "transferSuperuser(address)", "57c3b376": "updateRandContract(address)", "57c3f997": "isReserved(address)", "57c508d3": "IsThisExternal()", +"57c51513": "LogPreparePayment(address,uint256,uint256,uint256)", +"57c59baf": "overtradeRestriction()", "57c60982": "calcProfit(address)", +"57c6559e": "SEND_TYPEHASH()", "57c67ad1": "RobotTradingIco()", "57c6c642": "MultiTranser()", +"57c7187b": "balTrx(uint256)", +"57c7bb87": "getMintableDevices(bytes32)", +"57c7bec1": "categoryActionHashes(uint256)", +"57c816fc": "internal_transfer(uint256,address)", "57c85787": "batchMint(address[],uint256[],uint128[])", +"57c8875d": "endAmbiguous()", "57c8b724": "addPresetTransfer(address,uint256)", +"57c90de5": "placeBid(uint256,uint256)", +"57c926eb": "halving_tick()", +"57c96a07": "idleYieldToken()", +"57c98afd": "_allBalance()", +"57c9bc91": "ShareSent(address,uint256)", +"57c9ca14": "isClaimed()", +"57ca770e": "totalBoughtTokens()", "57ca94fa": "_addUser(address)", "57cb2fc4": "getInt8()", "57cb48c9": "issuerTokenName()", "57cb4947": "mintRequest(address,uint256,uint256)", +"57cba534": "_loanWithdraw(uint256[3],uint256[3],address)", "57cc2d52": "testStoresParentChallenge()", "57cc5941": "getTileClaimerAndBlockValue(uint16)", "57ccbe28": "isPreICOPrivateOpened()", "57ccc80e": "putSmartContractOnSale(bool)", "57cd23a6": "TeamLockingPeriod24Months()", +"57cd3022": "getExectuableOrdersCount()", "57cd650d": "sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", "57cdd078": "isIcoInProgress()", "57cdf799": "createContractItem(string,bytes32)", "57ce0ec0": "MIN_PRE_ICO_SLOGN_COLLECTED()", +"57ce9403": "pilefab()", "57cea5c0": "weaponTokenIdToDamageForEncounter(uint256,uint256)", +"57cf7600": "registerSwap(uint256,address,address,uint256,address,uint256)", "57cf9add": "showOwnerContract()", +"57cfc183": "isTokenUsedAsColl(address,address)", "57cfd296": "getFurnace(address)", "57cfeeee": "transfer(address,uint256,bytes32)", "57cff409": "tpt()", "57cff437": "getKunsByOwner(address)", "57d0354b": "NothingToCancel(address)", "57d083b5": "_evaluateSkill(address,uint8,uint256,uint256,uint256)", +"57d0c179": "forwarderType()", "57d13917": "getCompany(uint256)", +"57d14ceb": "depositInto(uint256)", +"57d159c6": "togglePause(bool)", "57d15c6a": "_time()", +"57d16bb3": "icosharesupply()", +"57d17121": "Set_ERC20_Gen_Lib(address)", "57d17805": "getTokensSold(uint256)", "57d1c582": "TokenData(address,uint256,address)", +"57d1f0c3": "liquidateHoldingToken()", "57d25a0f": "retrieveAssets(address)", +"57d2db1f": "link_usd()", +"57d32b7a": "lendToWarpVault(uint256)", +"57d3810e": "biddingParameters()", +"57d3c7c3": "escrow(address)", "57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", "57d444fd": "detachController()", +"57d45d20": "viewUserLevelExpired(address)", "57d4617b": "getAllocatedTokenAddress(address,address,uint256)", +"57d4b78a": "authorizedNumbers(uint256)", "57d4f398": "unfreezeBalance(address)", "57d55116": "_safeApprove(address,uint256)", "57d55367": "publishResult(uint32,string)", @@ -50374,155 +92245,287 @@ "57d5927f": "LogOraclizeCall(uint256,bytes32,string,uint256)", "57d5939c": "IsValidated(string)", "57d61f3c": "TokensSold(address,uint256)", +"57d62450": "updateRestrictionsAndRules(address,address)", "57d62a30": "accountFeeModifiers(address)", +"57d63792": "setNodeTrusted(address,bool)", +"57d639ec": "finishPresaleByAdmin()", +"57d6897e": "setNewToken(address,string)", +"57d69314": "tokUsdPrice(string)", "57d6f5f2": "canLogIn(address)", "57d70c0b": "getIcoRuleList()", "57d713d5": "getPendingUserCount()", +"57d76454": "saffron_pool()", "57d775f8": "epochLength()", "57d786da": "_checkPolicyEnabled(uint8)", +"57d8bb83": "RateUpdated(string,uint256)", +"57d8dc85": "MiningMachines(string)", +"57d8df5a": "getOneBook(address)", "57d93329": "endCrowdsalePhase3Date()", "57d9fd41": "orderLastDate()", "57da1fb2": "isMonsterChampionship()", "57da9166": "Dodol()", +"57daa7b0": "partialLiquidationUser(address,uint256,address,uint256,uint256)", +"57dac16c": "setNftParamsRange(address,uint256,uint256,uint32,uint32)", +"57dac2ec": "protectedLiquidityCount(address)", "57db8024": "adminDeposit(address)", "57dbefdd": "addExcluded(address,address)", +"57dc13ec": "startingCurrentSets(address)", "57dc2658": "setLastCrowdsale(address)", "57dc561f": "assignTokenIJK(address,uint256)", +"57dc5d2e": "setLotteryNFT(address)", "57dc5d9d": "adminer()", "57dc9760": "DaoChallenge()", +"57dcfaa0": "lastSaleTime(address)", "57dd2f26": "AntriexToken(uint256,string,string)", "57dd8366": "jackpotGuaranteed()", +"57dd9097": "changeAdminToSuperAdmin(address,address)", "57ddf217": "gameoverGetYUM(uint256)", +"57de0c5b": "isExistedExchange(address)", "57de26a4": "read()", +"57de303b": "nftUpdate()", +"57ded9c9": "apr()", +"57df22c0": "liquidityProviderContract()", +"57df82e0": "makerOrdersEthToToken(address)", "57df844b": "getTokenTotalSupply()", +"57dfe39d": "includeDexAccount(address)", +"57e038be": "rewardProjects(uint256)", +"57e04f80": "Bettings(uint256,uint256,address,uint256[],bool,uint256,uint256,uint256,uint256)", +"57e061da": "LogSentDepotEth(address,uint256)", "57e07140": "testTransferFromCorrectlyAllowsDelegationOfTokenOwnership()", +"57e08c60": "setBalanceNormalAddress(address,uint256)", "57e0b222": "ERC20Store(address)", "57e18886": "reserveTokens(address,uint256,uint256,uint256)", "57e1fae2": "transferChild(address,address,uint256)", "57e233e2": "hardcapUSD()", "57e25a79": "PullPaymentCapable()", "57e2880d": "scheduleTransaction(uint256,uint256)", +"57e292ec": "fighterAddressess(uint256)", +"57e30188": "_BigSmall(address)", +"57e333ba": "maxPayout(uint256)", +"57e37af0": "calculateInterestRates(address,uint256,uint256,uint256,uint256)", +"57e3d5e2": "vestingSchedules(uint8,uint256)", +"57e45562": "updateMasterChef(address)", "57e49ca8": "safeTransferChild(address,address,uint256)", "57e4e95d": "burnerChangeable()", "57e53d4e": "currentStageETHContributions()", +"57e57eb8": "fat()", +"57e5ac60": "testGetPriceForAssetAmountMulCollatRatio_UnsetOracle()", "57e5be05": "current_mul()", "57e5eea5": "getCurrentBonus()", "57e60c27": "removeAccountReader(address)", +"57e61e29": "invoke1SignerSends(uint8,bytes32,bytes32,bytes)", "57e6a64c": "AddrRewardPlan()", "57e6a6af": "METS6()", "57e6c2f4": "isAuthorized()", +"57e6e44e": "swapTokenForCToken(address,address,address,uint256,uint256)", "57e71cd7": "setPreIcoHardCap(uint256)", "57e7afd0": "addIPFSFile(string,uint256,string,bytes32,uint256)", +"57e7e3df": "pendingYFIG(uint256,address)", "57e871e7": "blockNumber()", +"57e8a9a3": "defaultInfo(uint256)", "57e8f401": "getUserLandLimit(address)", "57e984cf": "changeMonthlyRate(bytes32,uint256)", "57ea563a": "tokensByLtcTx(string)", "57ea89b6": "Withdraw()", "57eabab4": "defaultMintingAddress()", "57eaeddf": "_isContract()", +"57eafbe9": "updateMinVotersValue(uint256)", "57eb3431": "recordPresalePurchase(address,uint256)", +"57eb6f43": "testAmount_1(uint256)", +"57eb6fa5": "LogModuleUpgrade(address,string)", "57eb95a7": "trainSpecial(uint256,uint256,uint256[2])", "57ebc286": "approve_fixed(address,uint256,uint256)", "57ebc7a8": "logLargeContribution(address,address,uint256)", +"57ec0120": "excludedRewards()", +"57ed015c": "addAdmin(address,uint64)", +"57ed2d3e": "transferFinancial(address)", +"57edab4e": "teller()", "57ee24af": "getNum(bytes32,uint256)", +"57ee2ab9": "addMARK(uint256,address)", +"57eea110": "saleprice()", +"57ef270e": "pack3users(uint256)", "57ef58c1": "canDefrostAdvisors()", +"57efda03": "balances(uint32,address)", "57f011b6": "destTokensEarlyInvestors()", "57f032e7": "changeAgent(address)", +"57f03a8f": "lesserThanUintFailTest()", "57f04d2b": "updateLedger(uint256,address[],address,uint256[],uint256[])", +"57f06a76": "statedPeriod()", +"57f0fbb6": "addReadersToMedianWhitelist(address,address[])", "57f1935f": "refundTokens(address,address)", "57f196fa": "lastBidID()", +"57f1d278": "tradingFund()", "57f1f6ca": "rareStartPrice(uint256)", +"57f21ba5": "removeAddressFromKYC(address)", "57f232e1": "buyFucks()", +"57f256e3": "depositETHAndBorrow(uint256)", +"57f28bed": "getFalse()", +"57f290ac": "dspGasUsed(address)", +"57f292c5": "requestFullFilled(uint256)", "57f2c6b7": "withdrawOfferForCollectible(uint256,uint256,int256)", "57f2d763": "LongTerm()", +"57f2d872": "_calculateDividends(uint256,uint256,uint256,uint256)", +"57f2e581": "updateIssueFee(uint256)", "57f32591": "changePriceChangeName(uint256)", +"57f383ec": "approve_679(address,uint256)", +"57f3a8e5": "findVoter(address)", +"57f46709": "removeTrustee(address,bytes32,bytes32)", "57f46cbe": "collect(uint256[])", "57f47bf9": "sh_doAgree()", +"57f4b0cb": "ownerDenyDirectBuy()", "57f4d5ec": "processDividends(address,uint256)", "57f5abe5": "setERC20TotalPromo(uint256,uint256)", +"57f5c63c": "toUint(uint256)", +"57f62052": "bet(string,uint256,uint256,uint256)", "57f6280e": "FundManager()", "57f65e24": "setArray(bytes32,string[])", "57f664ed": "TOKENS_ALLOCATED_TO_PROOF()", +"57f6b812": "allInfoFor(address)", "57f70b21": "WorldToken(uint256,string,uint8,string)", +"57f7789e": "setTokenUri(uint256,string)", "57f7b905": "balanceBonusOf(address)", "57f86b6a": "theRiver()", +"57f897ad": "isTimeExpired(bytes32)", +"57f8af15": "ICOWebsites(address,uint256)", +"57f901e2": "commit_smart_wallet_checker(address)", "57f91458": "sacredToken()", +"57f91983": "updateStakingTokens(address[],uint256[],uint8[])", +"57f9314a": "RemoveLiquidityExternAmountOut(address,uint256,uint256)", "57f94c82": "airDropTokenIssuedTotal()", +"57f9e41d": "customTimeLocks(bytes4)", "57f9fb11": "internalRefund(address)", +"57fa580e": "tokensReceived(address)", "57fa7044": "_changeCycleValue(uint256,uint256)", "57faa161": "TokenBonusGiven(address,uint256)", "57fb25cc": "initialize(address,address,uint256,uint256,address)", "57fbac06": "setAllowTransferExternal(bool)", +"57fbb441": "setDoTxUniLP(address)", "57fbb9df": "withdrawContractBalance(address)", +"57fc0363": "save(uint256,uint256)", "57fc3991": "returnTokens(address,address,uint256)", +"57fc86b4": "PERCENT_STEP()", "57fc8a20": "custom(address,bytes)", "57fc990f": "_createAuction(uint256,uint256,uint256,uint256,address)", +"57fd8a4a": "VoteToReplaceOwner()", +"57fdc1cd": "withdrawFeesByVoter(uint256)", "57fdf2b2": "transferrableBalance(address,uint256)", "57fe5a5f": "FREEREWARDPPOINT()", +"57fee4df": "minBondPriceOnONC()", +"57feed35": "doApproveToken(address,address,address,uint256)", "57ffd7cc": "createNewContract(uint256,address,address,address)", "57ffd863": "deleteHiddenPosition(bytes32)", +"57fff378": "cashier(address)", "5800827c": "mintExtraTokens(int256,uint256)", "580101c8": "startingSnailAmount()", +"580101da": "distributeBulk(address,address[],uint256[])", +"58013251": "getGrantAmountLeft(address)", "580215fc": "transferFinal()", "580225d5": "HomeBridge(uint256,address[])", +"580228f9": "setTwaVestingPeriodInBlocks(uint256)", "58022de4": "recoverSigner(bytes32,bytes32,bytes32,uint8)", "58022e3f": "AkbulutTokenICO()", +"58027054": "UsernameChange(address,bytes16)", +"5802a17e": "addLPT(address,address,address,uint256,address)", "5802c695": "setPendingValue(uint256,bool)", +"5802d497": "updatePartnerKYC(bytes32,address)", +"5802e2a4": "SellUniBuyBond(uint256)", "5802f02d": "SavingsAccount()", +"58037470": "_tokensOnAuction(uint256)", +"5803de2d": "endAuctionMulti(uint256[])", +"58042958": "bidder(address)", +"58042deb": "startAscension(uint256)", "58047913": "getWrappedContract()", +"58053e94": "BonusRound2()", "58056392": "setLockBalance(address)", +"5805698b": "pendingSalt(uint256,address)", "58057468": "confirmTransferOwner()", "58057d81": "transferDomainToBuyer(uint64)", "58058304": "clearFund(uint256)", "580588a1": "havedAirDrop()", +"5805c09b": "voteGameMinus(uint256,uint256)", +"5805c6d3": "wav3PerBlock()", "58062e66": "VIRTVEN()", +"5806b335": "calculateBorrowInterest(uint256,uint256,uint256)", "5806ba15": "InbotToken(string,string,uint8)", +"5806beaf": "payAll()", "580709cb": "downTheDrainImmediate()", "58074d8b": "keyIndex()", "5807630f": "transferEthToOnwer()", "5807703d": "getMainGasPrice(bytes)", +"58077dfa": "stakeLPToken(uint256)", "580786cf": "getRoundOpen(uint256)", +"58078806": "TxnConfirmed(uint256)", "58078a5a": "_checkAndAdd(bytes32,bytes32)", "58079e7b": "setStartOfPresale(uint256)", "580822da": "CoinLordToken(address)", +"58084858": "usdcEthBlockTimestampLast()", +"5808b75b": "incNounce()", "5808e1c2": "betOnNumber(uint256)", "5808ee15": "setDefroster(address)", +"5808f7a8": "changeDelayPeriod(uint64)", +"5809ae27": "removeCollateralAssets(address,address[])", "5809ea99": "hitPrice()", +"580a975c": "MAX_MINIMUM_STAKE_TIME()", +"580ad06f": "balanceInfoOf(address)", "580b72e1": "approveTokens(address,uint256,uint256)", "580bd977": "distributeFunds(uint8)", "580bdf3c": "disableBetting_only_Dev()", "580c0fd8": "COMIKETCOIN()", "580c2ae9": "numberOfPurchasers()", "580c5072": "IsPremature(uint256)", +"580c8544": "gContractCheckSellLevel()", "580cf318": "tokenRemainCap()", +"580d2882": "setFoundation(uint256)", +"580e1e95": "stakingMinInvest()", "580e77d4": "startMainSale()", "580ea491": "PatronageRegistry(address)", "580efd6b": "totalWageredForAddress(address,address)", "580f2427": "LeeSungCoin()", +"580f346f": "tranche_total_dsec(uint256,uint256)", "580f3904": "requestTokens(address)", "5810291a": "getplayerpool()", +"5810f662": "swapBalancerUni(address,address,address,uint256)", "581191f7": "DNATIXToken()", +"5811f0bf": "setApproval(address,uint256,address)", +"58126a64": "OwnertxFee()", "58128969": "cycleStart()", "5812f78a": "A2UToken()", +"581347cd": "log(bytes22,bytes23,bytes24,bytes25,bytes26,bytes27,bytes28,bytes29,bytes30,bytes31,bytes32)", +"581379fd": "ethRecipient()", +"58141f13": "getGetMaxMiddle16()", "58144fbd": "covmanAddress()", +"5814a875": "mqTesla()", +"5814ad80": "newInfluencer(address,bool)", "58150c8b": "GameRegistry()", "581515fd": "howManyEtherInWeiToBecomeOwner()", "5815528c": "setInviterEdge(uint256)", +"58155e38": "wearableCount()", +"581592f1": "getUSDT()", "581627bc": "ownerWithdrawl(uint256)", "58163c23": "calcBonus(uint256,bool)", +"581651af": "getEpochReward(uint256,uint256)", +"58169239": "sendETHUnsupported(address)", "5816ba9d": "unFrozen(address)", +"5816f904": "viewETHBalance()", "58172da1": "payBankroll()", "581732dc": "setLev1(uint256)", "5817465c": "RidgeToken()", "58178168": "punkIndexToAddress(uint256)", +"58178292": "CODE_STATUS_USED()", +"5817bd6c": "st0(uint256)", +"5817cd5a": "enablePoolLpLimit()", "581847d6": "changeDeveloperSFTDestinationAddress(address)", "58189259": "CerradoToken()", "58189e03": "processExits()", +"5818a0dc": "tvlOfPool_legacy(address)", +"58195eb0": "showMyBalance(address)", +"58197a9d": "sellEnabled()", "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[])", +"581bee2f": "getHero()", "581c1f47": "isFreeze(address,uint256)", "581c281c": "getVotingStatus()", "581c5ae6": "invest(address,uint8)", @@ -50531,212 +92534,426 @@ "581d1015": "publicsalesTokenPriceInWei()", "581d1d04": "devTokensIco3()", "581d416a": "Paid(uint256)", +"581e2d61": "mWinner(uint256)", "581e69de": "pauseRoundD()", +"581e807e": "_setT20Fee(uint256)", +"581ec322": "leftchild(address)", "581f1125": "returnUnsoldSafeSmall()", "581f3c50": "createAndOpen(address,address)", +"581fad66": "whiteListTransfer(uint256)", "581fc2ad": "getNextReleaseTimeOf(address,address)", "581ff6e2": "VerifyPublishedResults(uint16)", +"5820029e": "_growthChronos()", +"5820540f": "addBeneficiary(uint8,address)", +"58207802": "maxTimelockPeriod()", "5820c9ae": "round4()", "5820dce5": "abbuchen(uint256)", +"5821c3c2": "getMultiplier(uint256,uint256,uint256[],uint256[],uint256)", "5821c831": "AcceleratorStart()", +"5822198f": "setTipRate(uint256)", "58226a76": "isInTime()", "58229d91": "MasToken()", +"5822a6c7": "createProject(uint256,string,string,string)", +"58230231": "SnowflakeDeposit(string,address,uint256)", +"582386e6": "claimStimulus(uint128)", +"5823fd91": "getDsDoiThi()", "58240d5f": "listPrycto4()", "582420bb": "calculateMatchPrice_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", +"58243213": "redeemEther(bytes32)", +"58243f87": "JobCancelled(uint256)", "582518ac": "updateclaimableTokens(address,uint16)", "582527f8": "setNewData(uint256)", "5825884f": "setOwner2(address)", +"5825b75b": "emitTransferred(address,address,uint256)", +"5825d8fd": "burnBond(address,uint256[],uint256[],uint256[])", "5826344b": "frozenAccount()", +"58265c0d": "trade(uint256,uint256,address,uint256,uint256,address,uint256,uint256)", "582681d2": "compareDateTimesForContract(uint256,uint256)", "582747ba": "PLCCToken()", "58275869": "ETHReceived()", "5827834a": "DecenturionToken(uint256)", "5827b250": "completeInitialization()", +"5827b846": "buy_refund_accept(uint256,uint256)", "5827c0c8": "SSE()", +"582807f9": "st_players(uint256,uint256)", +"5828356b": "rebasePeriod()", +"5828c24b": "_collectionCount()", "5828fa47": "ThawTokenTransfers(address,bool)", +"582915c3": "noFunction()", "58292a3d": "emission(uint256)", +"58292aff": "batchDefaultPartitions(address[])", "58294575": "updateComplianceAddress(address)", "5829d310": "entries(int256)", +"582a2863": "addDocument(bytes32)", "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()", +"582b9ad2": "insertACryptograph(address,address)", "582bd287": "snapshotDelegators(uint256,address)", +"582c6d70": "boughtTokens()", +"582c7928": "rewardState()", "582ca57b": "get_associations()", "582cca06": "SafeCoin()", +"582cca60": "TENS_Liquidity_Transfered()", "582d14f8": "updateHpbNodeWithString(address,string,string)", "582d2d32": "removeFreeRoom()", +"582d5adc": "splitLock(address,uint256,uint256,uint256)", "582d6033": "listDda(address,uint256,uint256)", "582d9008": "willyWantTalkToken()", +"582daafe": "flashSupply()", +"582e1ac9": "tokenPriceHistory(uint256)", +"582e6414": "rewardTaxAlloc()", +"582e7e9e": "earthSecondsInMonth()", "582ee26e": "PendingFees(address)", +"582f1da2": "addChainId(uint256)", "582f5009": "calculateBonusToken(uint256)", +"583007bd": "proposalActive()", +"58303b10": "phaseId()", "58306772": "getAmountOfEtherSell(uint256)", "5830da9c": "Escrow(address,uint256,uint256,bool,address)", "5830f2ea": "subPrivateSale(uint256)", "58317685": "getBuy(uint256,address,address)", +"58319ac8": "viewEtherOutPlanLength(uint256)", "5831e95d": "_burn(address,address,uint256,bytes,bytes)", +"58324335": "usersBalance(address)", +"58326b7a": "drip(uint256)", +"5832cf59": "changeVotingPeriod(uint256)", "58339a40": "CryptoScalper()", "58341922": "totalSupplyLocked()", +"5834885e": "updateFactoryOwner(address[],uint8[])", +"5834eb9a": "getLendingPoolLiquidationManager()", +"5834fb85": "fundendtime()", "5835ac93": "extract(uint256,uint256,uint256)", +"58361183": "noteInfo(bytes20,string)", "5836746d": "deployStep()", +"5836d08a": "bannedUntil(address)", +"58370156": "getCollAndRaiInfo(bytes32)", "58371ccd": "endSaleTime()", "5837bb11": "ALLOC_FOUNDER()", "5837e083": "move_history(uint256)", +"583839ba": "flipOf(address)", +"5839289c": "_presale(address)", "58392aaa": "setSibling(address)", +"5839ad1e": "ownerCallSnipe(address,bytes,uint256)", +"583a269b": "getApprover()", "583ae991": "BitCharityToken()", "583b4715": "createTitty(uint256,string,uint256,address,string)", "583ba757": "getrestrictTime(address)", +"583bae42": "sushiSwapRouterV2()", "583be14e": "isCampaignRegistered(uint256)", +"583c2e7b": "maxHaltDuration()", +"583c38d2": "setTokenTypeAttributes(uint256,uint8,uint256)", "583c4be9": "PurchaseUnlocked()", "583d175f": "clientClaim(address,uint64)", +"583d2bbd": "addInvestors(address,bool)", +"583d42fd": "stakingTime(address)", "583d5435": "queryTokensOf(address)", "583dbacc": "specialKitties(uint256)", "583dbc09": "updateBonuses(address,bool)", +"583e0568": "_uniswapV2Router()", +"583eb57d": "safeMul128(uint128,uint128)", "583ed080": "End7()", "583f0ae6": "purchaseMembership(address,address)", "583f18ff": "totalRemainingTokens()", +"583fb463": "convertEthToDai(uint256,uint256)", "583fe287": "ReussitexCoin()", +"583fee69": "_changeQuietEndingPeriod(uint64,uint64)", "584084d9": "_setString(bytes32,string)", "5840b0f8": "getPixelData(uint256)", +"5840ee44": "stakerContractsArray(address)", "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)", +"5842ca8e": "nowFilter()", "58439b9f": "EtheraffleLOTPromo(address,address)", +"58439fa5": "buySlopeDen()", +"5843a538": "_getWipeDart(uint256,address,bytes32)", +"5843a5ad": "bounds()", "5843b811": "_setPendingUpgradeabilityOwner(address)", +"5843d06b": "LogListingCreated(address,address,uint256,uint256,uint256)", "58441a58": "minimumBid(string)", +"5844e902": "setMgasQueryAddr(address)", "58451f97": "totalAccounts()", +"58452334": "setDoTxNFT(address)", "58453569": "initializeSpendLimit(uint256)", "58453fef": "updateBalance(uint256,uint256)", +"58454d79": "meowthToLp1Route(uint256)", +"5845b24f": "createRequest(uint256,uint256,string,bool)", "5845d13c": "NamdoToken()", "58462b36": "contBuy(address,uint256)", "58463e11": "FeedBackedCall()", +"58467dbc": "login(string,string)", "58469cd1": "generateStakeForDelegationSchemaHash(address,uint256,bytes32,bytes32,uint256[],bytes32,uint256)", +"584720f5": "RemoveMaster(address)", +"58472bf3": "setNewStakePercentage(uint256)", "58476a7a": "mintForSale(address,uint256)", "58480d41": "setVotesPerProposal(uint256)", "584855f0": "shopShoes()", "58487bee": "request(uint8,address,bytes4,uint256,bytes32[])", "5848a7fa": "getOwnerPotatoes(address)", +"5848ce71": "submitPeriod(bytes32,bytes32)", "58491ad9": "ICNQCrowdsale(uint256,uint256,uint256,address,uint256,address)", "58491ecb": "companyPeriodsElapsed()", +"584957c8": "depAmount()", +"5849c0c6": "getLandIdByItem(address,uint256)", "5849cf77": "registerDINWithResolver(address,address)", "5849f66b": "claim_ico()", +"584ae175": "createCodeUpgradeProposal(address,bytes32)", "584af2c3": "approveOwnerTransfer(bytes32)", +"584b153e": "isOperationPending(bytes32)", +"584b62a1": "stakes(address,uint256)", +"584b6e8b": "busdt()", +"584bc50b": "transfer_funds(address,uint256)", +"584d4262": "getTokenBalanceTest(address)", +"584dcefc": "bTokenMetadata(address)", "584df977": "LimitPerUserEBC()", +"584e11b8": "vipYearFee()", "584e492a": "arr(address,uint256)", +"584e5957": "getRefs()", "584e86ad": "suggestUrl(bytes32,bytes32)", "584ed064": "getBattleCardList(address)", +"584fbfb5": "serviceUpdateTransferFeePercent(uint8)", +"584fc325": "initializeMokensContract(address)", +"58504ceb": "viewDividendsOnCycle(uint256)", +"58509d58": "_popDaoCache()", +"5850b383": "getTenderCount()", +"5850c179": "sushi_eth_yfi_lp()", "5851166c": "endOfRound()", "58516661": "agents()", "5851bc4f": "FJH()", "5851f1e2": "trexdevshop()", +"5851fe96": "trams()", "58525fda": "tokenAllocation()", +"58528aa5": "changeLogo(string,uint256)", "5852f5c1": "buildingToUnits(uint256,uint256)", +"585314cf": "borrowOrTradeFromPool(bytes32,bytes32,bool,uint256,address[4],uint256[5],bytes)", +"58533e0a": "totalTime()", "58541aba": "jackpotLastPayout()", "58543fbd": "getRoomIdxByNameElseLargest(string)", +"58544968": "genesisblock()", +"5854b567": "heldForNextCycle(uint256,uint256)", +"5854be3c": "setNewClaimer(address)", +"58551d09": "ENCORE_Transfers_Closed()", "5855279e": "whitelistAccounts(address[])", +"58553371": "pctCalc_minusScale(uint256,uint256)", "58553baa": "cycleInfo()", +"5855486f": "delayedRewards(address,uint256)", +"5855a25a": "INIT_CODE_PAIR_HASH()", "5855da3d": "extractAddress(bytes,uint256)", +"5855e5f8": "createProduct(uint256,address,string,uint256,string,string,string,string,string)", +"58568320": "makeInvestment(uint256,uint256,uint256)", +"58569081": "shutdownTime()", +"5856bc37": "_specialInitState(address,address[])", +"5856d735": "getCodeMapping(address)", "5856db43": "isIcoClosed()", "585789cd": "startPreDistribution(uint256,uint256,address,address,address)", +"5857943f": "PreEndTimeStamp()", "5857b86f": "getAuctionByAuctionId(uint64)", "5858e7d0": "bigBearCoin()", "5858ef10": "testErrorNonOwnerCantBreach()", "58593578": "toss(bool)", +"58594ce4": "createBPTStakingPoll(address,address)", +"585a4aef": "KeyRemoved(bytes32,uint256,uint256)", "585a8aba": "getCredit(address,address)", "585a9385": "icoProceeding()", "585aa91e": "setSpecialDefense(uint256,uint8)", "585ac3e8": "icoEnded()", +"585ac5ab": "State(uint8)", +"585b03f0": "BoughtAd(address,uint256)", "585b0f05": "BitcoinMax()", "585b143a": "getVariableReleasableAmount(address)", "585b7752": "setOraclizeString(string,string,string,string)", "585bc25b": "weiRaisedDuringRound(uint8)", +"585bc281": "maxEarlyStake()", "585bc523": "cooAddManager(address)", "585bf3e4": "totalLux()", +"585c1178": "mine_slots_6(uint256)", "585c6fc9": "EtherHealth()", +"585cd34b": "removeAdapter(address)", "585ce259": "VitToken()", "585d2133": "newDeliverable(uint256)", "585da351": "setUnitAttackMultiplier(address,address,uint256,uint256,bool)", "585e1af6": "hard_cap()", +"585e554e": "addPostOnUser(address)", "585eb90c": "withDrawAmount(uint256)", +"585efc1c": "convertedDonation(address,address,uint256,uint256)", "585f9b7a": "addVoteOption(uint256,string)", +"585f9eb5": "depositeBalance(int256)", +"58600106": "entityOwnerChangeRequested(address,address,address)", +"58609e44": "maxSubmissionCount()", "58613568": "estimateNeumarkReward(uint256)", "58619076": "OwnerRemoved(address)", +"5861b227": "removePair(address,address)", +"5861cab1": "redeemWithSignature(address,bytes32,uint256,bytes)", +"58620a51": "mStaking()", "58620daf": "RegistryAddress()", "58623642": "minStartDelay()", +"5862b284": "kassiahotelAddress()", +"5862c7b6": "fire_emergencyWithdraw(uint256,uint256,address)", "5862fd31": "ethCrowdsale()", "5863115e": "parseId(uint256)", "586360ce": "distributedTokens()", +"58644191": "beforeVoting()", +"586448ea": "StakeDividends()", +"58645d95": "getETHCapitalPool()", +"58648588": "contractsByUser(address,uint256)", "5864c56c": "numberOfSuccessfulPings()", +"58656e8c": "TileFortified(uint16,address,uint256,uint256,uint256)", +"58658064": "setFixRetBet(uint256[])", +"5865a6a8": "ContributionRemoved(address,uint256,uint256,uint256)", "5865c60c": "getOperator(address)", +"586601ac": "deleverageOnce(uint256)", +"58662362": "migratePets(uint8)", +"58666c04": "doEmit(string)", "58669d6d": "updateMinimal(uint256)", +"5866aaee": "forYFINholders()", +"5866b381": "addCar(bytes32)", +"586770b0": "paraswapInterface()", +"5867e4ea": "FinishPrivateSale()", +"58680d0b": "future_fee()", +"5868679d": "approve_453(address,uint256)", +"586905c5": "strategyConverters(address,address)", +"58697ca7": "saccoInfo(bytes32)", +"58699c55": "make_contact()", "586a2d02": "Anastomos()", "586a2d79": "_decreaseBalance(address,uint256)", +"586a40d6": "_usedNonce(address,uint256)", "586a4be5": "Bitsurge()", "586a52e0": "GenerationSupply()", "586a69fa": "getMaximumStackCheck()", "586a94ba": "MassivelyMultiplayerOnlineGameToken()", "586ab7a9": "MYSYMBOL()", +"586abc5a": "lotteryEnded()", "586ac27d": "ProofOfPassiveDividends()", +"586ad2e2": "_getRoundData(uint256)", +"586ae7a4": "setlotteryTaxAlloc(uint256)", "586b1c8f": "DetherCore()", +"586c64d2": "stake(uint32,address,uint256,uint256,uint32)", "586ccfa7": "deathData_f11()", +"586ce7ec": "mineUNIAll(address)", "586cf767": "MintedEthCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", "586cf845": "setTierEndTime()", +"586d8b60": "noInputFunction()", "586dd1d5": "CCXTokenERC20()", "586e416e": "updateMaxWei(uint256)", "586e8283": "deliveredEth()", +"586e8733": "executeResultDeclaration()", +"586f6679": "placeOrders(address,uint16[],uint16[],uint32[],uint32[],uint128[],uint128[],uint256,bytes)", +"586f7c3a": "calculateNearestWeeklyAuction()", "586facb4": "adminSetMarket(address,uint8,uint256)", "586fc5b5": "lastMint()", +"586feb40": "getFlashLoanFeesInBips()", +"587074b4": "invalidPlayer(address)", +"58707e06": "parametersProvider()", "58708479": "setWinningChance(uint256)", "587097ab": "test_FiftySixPercent()", +"587115b2": "TIMESTAMP_OF_20181001000001()", "58712633": "GetCommission()", "587181d1": "getVaultLock(address)", +"587205bb": "InitialAllotmentClaimed(bytes)", "5872282d": "icoReferralBonusInPercentage()", +"587261db": "CrowdsaleClose()", +"5872a91f": "setRAPIDScontract(address)", "5872fe45": "getAccountAddress(address)", +"58733494": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32)", "5873533d": "playGame(uint256)", "587378a4": "updateQualifiedPartnerCapAmount(address,uint256)", +"5873aaa3": "getUniswapRouterV2()", "5873cbe6": "setFile(string,string,uint256,address)", +"5873eb9b": "rewardDebt(address)", "587419d5": "depositStartTime()", +"58742a3f": "unlockDateCommunityOne()", +"587436e4": "getActiveStrategies()", +"5874becc": "RemoveSupporter(address)", "58750784": "getUniqueKey(string,string,uint32)", +"58755880": "Hakka()", "5875caaf": "objectKnife()", +"58761920": "standardProtectRatio()", "587631eb": "PlayX5()", "587695cd": "tokenGiveAway()", "58769981": "transferAdminship1(address)", "5876d2ef": "rwGas()", +"5876ec67": "drmDecreaseApproval(address,uint256,string)", +"58779c14": "approve_457(address,uint256)", +"5877b2b8": "getAccumulatedFunds()", +"5877b3dd": "setPaths(address[][])", +"5877dac9": "backX4()", +"58782c21": "fulcrum()", +"5878a93c": "approve_674(address,uint256)", "58793050": "Setup()", "58793ad4": "submitHKGProposal(uint256,string)", +"587977dd": "Lucky(address,uint256,uint256,uint256)", "5879f7ad": "myDroneList(address,uint256)", +"587a6ecb": "VOTE_EXTEND_TIME()", "587ac47c": "sendFromAdvisorWallet(address,uint256)", "587af98d": "GetConfirmRound(bytes32,uint8)", "587b060e": "_setUpgradeContract(address,address)", +"587b2b66": "FeedingTrigger(address)", "587c2b8e": "setContributionDates(uint64,uint64)", +"587c49de": "_gettokenURI(uint256)", +"587c9571": "revokeContractAdmin(address)", +"587cc509": "pushForeignReceipt(bytes,bytes,bool,uint256)", "587cde1e": "delegates(address)", "587d044f": "saveHistory(address,address,uint256,uint32)", "587d6a20": "ICOactive()", +"587da023": "currentEpochStartTimeInSeconds()", +"587ece4c": "Created(address,address)", +"587ed156": "bxtbTokenRatio()", "587ed791": "getPoolPayPeriodInBlocks(uint256)", "587f2e50": "putInStud(uint256,uint256,uint256)", +"587f5ed7": "accumulatedFees()", "587fa8dc": "closeHouse()", +"587faab6": "sendToken(address,uint256,uint256)", "587fae93": "release(uint8,address)", "58802e24": "BancarCrowdsale()", +"58805e72": "deleteFunction()", "5880b7da": "CAAction(address)", +"5880b873": "_setTaxFee(uint256)", +"5880dcd4": "LONGESTFARMINGPOOLID()", "588100d4": "DIP_TGE()", "588198c4": "getBonusByETH(uint256)", +"5881e612": "setVoteDiv(uint256)", "5882128d": "tradeActive()", +"5882532f": "gameRecords(uint256)", +"58825b10": "setValue(bytes32)", "588268a8": "tokensForCreators()", +"588279e2": "newUserId_ap8()", +"588338c6": "writeLEETHreview(uint256,string)", +"58834348": "setIds(uint256[],uint256[],uint256[],uint256[])", "588378c8": "fillGoldSellOrder(address,uint256,uint256)", "58838594": "anacoContract()", +"58838f89": "EngineerContract()", +"5883f032": "getOfferings(uint256,uint256)", +"58846c42": "getMinRedemptionRatio()", +"58849734": "revoke(bytes4,address)", "5884afe1": "setBetLimit(uint256,uint256)", "5884f2f5": "GeneralUpdate(uint256,uint256,uint256)", +"58855f36": "redeemOrder(uint256,uint256,uint256,bytes)", "5885c626": "allocateTokensToMany(address[],uint256[])", "58864d04": "Clost(uint256,string,string,uint256)", "588666e2": "updatePriceManualy(uint256)", "5886c51e": "setnotice(string,string)", +"5886d33b": "Cat2(address,uint256)", +"58871c81": "addLiquidityETH(uint256,address,uint256,uint256,uint256)", +"58876e2a": "SetParticipantName(address,string)", +"588796f6": "TotalCards(address)", +"5887ab91": "Upgraded(address,uint256)", +"58881304": "updateMaxBuy(uint256)", "58883688": "setAvailableToken()", +"58886dba": "permissions(uint256)", +"5888799c": "whitelistApproveNode(address)", "58888b40": "_calculateUnlockedTokens(uint256,uint256,uint256,uint8,uint256)", +"58889a00": "getUserProfitFromCustomIndex(address,uint64,uint256)", +"5888e828": "getProductbyId(address,int256)", "58892f63": "setCrowdsaleStartDate(uint256)", +"58893f7d": "LogNewCallbackGasLimit(uint256)", +"58895e3d": "loanTermsConsensus()", +"58895f62": "setProperty(uint256,bytes32,bytes32)", "588a9db5": "CoreBuyShare(address,address,uint32,uint256,uint32,address,address)", "588b1578": "contractEth()", "588b5c7b": "approveExchange(address,address)", @@ -50744,132 +92961,249 @@ "588bf923": "removeEmailHash(uint256)", "588c2a6d": "WithdrawReserve(address)", "588cbbea": "changeSettings(uint64,uint8,uint8,uint8,uint8)", +"588ccb94": "earlyAdopterBonus(address)", +"588cfb84": "folds()", "588cff4c": "emitPublicCapabilityRemoved(address,bytes4)", "588d376f": "BoleroToken()", +"588d429d": "addValAddr(address)", "588d6a17": "findSemiRandomWinner(uint16)", "588dadc6": "contestChampion(uint256)", +"588dc614": "set_NEW_DAI_TOKEN_ADDRESS(address)", "588e6b83": "giveTurnToPlay(address)", "588e730c": "numOfMythical()", +"588eb50f": "referrerTotalAmount(address)", "588ec17f": "minContributionInUsdCents()", +"588ecc9c": "liquidateAsset(address[])", +"588ecffd": "governedTransfer(address,address,uint256)", "588ee29b": "debug()", +"588f08c4": "set_new_cDAI_TokenContractAddress(address)", "588f27e6": "CloudCredit()", "588f7e12": "lotteryRatio()", "588f85b3": "IHPM()", "588f9acc": "toggle(address)", "58902cc6": "sendFromGftWallet(address,uint256)", +"5890ef79": "validatorList()", "5891215c": "getAllGas()", "58919155": "DOGE()", "5891c8aa": "removeExceptAddress(address,address)", +"5891fd70": "SELL_PRICE_RATE()", +"58920e3f": "checkPrize(uint256,uint256,bytes)", +"589210d9": "buyLimit()", "58924b81": "getClaim(address,string)", +"589252aa": "getReferrer1(address)", +"58927bc4": "getBancorNetworkContract()", +"589308e3": "_divsFeeWallet()", "589316f6": "level_2_amount()", +"58931c46": "mul()", "58931f7a": "buyWhiteByName(bytes32)", +"5893253c": "registry(uint256)", "58932f50": "btcTokenBoughtAddress()", "58933dbc": "totalTokensRemind()", "5893d481": "rndTmEth_(uint256,uint256)", +"58940e30": "repayFor(uint256[5],address[3],bytes,address)", "58950108": "BucksCoin()", +"5895490c": "setFeeWhitelist(address)", "58958be3": "_getTxDataBlockNumber(address,bytes32)", +"5895e44a": "ownerWithdrawEther()", "58963c85": "setBilateral(bytes32,bool,bool)", +"5896476c": "nPlusOne()", "5896521b": "getCurrentTotalFunders()", "5896749a": "getAssetRate(address)", "5896f37f": "getDistritos()", "5897164a": "ADDR_MAYA_ORG()", "589737fb": "getOwnPartnerMessage(uint256)", +"58975919": "userId()", +"58979bfe": "setUsdt(address)", "5897a1c6": "getValueToInvest()", "5897a5a0": "setupInitialState()", "5897e3e4": "splitTheBet(address)", +"5897e663": "isKnownFeeSender(address)", +"58986200": "liquidateAfterPrice(uint256[])", +"5898c267": "getEventResult(string,string)", +"5898d883": "UpdateDepositRecordMapping(uint256,uint256,uint256,uint256,uint256,address,bool)", "5898f402": "compaundIntrest(uint256,bytes5,uint256,uint256)", "58990372": "changeColorBlue()", +"58993640": "Accept()", "589a1743": "creatorOf(uint256)", +"589a47aa": "StarbasePurchasedWithEth(address,uint256,uint256,uint256,uint256)", +"589a9e6e": "crossBurn(address,uint256)", "589b88bd": "pauseRoundC()", +"589c4228": "getUserStructure(address)", +"589c4dd4": "recoverERC721Approve(address,address,uint256)", "589c6beb": "_deleteDefender(uint32,uint8)", "589d7a3c": "setupViaAuthority(string,string,string,string,address,uint8,bytes32,bytes32,uint256)", +"589dba79": "setRewardMul(uint256[])", "589dca45": "_emitEmission(bytes32,address,uint256)", +"589e2459": "SingleInvestToken(address,address,uint256,uint256,uint256)", "589e5edd": "InvestorsQty()", "589e74be": "giveSticker(address,uint256)", +"589ecbe2": "verifyUser(uint256,address)", "589f30c7": "FAPFundDeposit5()", "589fd72a": "vehicleDates()", +"58a06f07": "pToken()", "58a0bcdd": "checkPayout(address,uint32)", "58a122a2": "cancelRequestUnpause()", "58a191c3": "changeFactorySetupFee(uint256)", "58a1cabf": "lastPayoutTime()", "58a2982a": "_deleteSmallestBidder()", +"58a3363d": "genePathv1(uint256,uint256,uint256)", "58a356d0": "sendMoney(uint32)", "58a383fd": "jsonArrayLength(string,string)", "58a3d1a1": "getUnclaimedTokenAmount(address,address)", +"58a3d963": "tokensToBeSwapped()", +"58a4630f": "LastBurnStamp()", "58a4903f": "cards()", +"58a4c3dc": "priceFeedKey()", "58a50ce8": "setEtherAddress(address)", "58a53130": "getABaddress(uint256)", "58a5b0f6": "tournamentStartTime()", +"58a5d596": "allHashedNotes(uint256)", +"58a5f493": "currentSupplyRatio()", "58a687ec": "finalizeSale()", +"58a6a893": "claimAt(address)", "58a70a15": "acceptReturning(uint256)", +"58a7172b": "scorePrdzEq()", "58a74333": "singularDTVFund()", "58a79319": "GetWildCardOwner(uint256)", +"58a7a580": "migrateCSaiToCDai(uint256)", +"58a86e1d": "ticketContract()", "58a87b69": "withdrawTokenFromCrowdsale(address)", +"58a8d6ae": "BecamePrince(address,uint256,uint256)", +"58a8faee": "cancelWaffle(uint256)", +"58a90679": "lockedVestingStages(address)", "58a94e73": "DigitalValleyToken()", +"58a9cfcc": "upateTrueRemainingReward()", +"58aa0d5d": "getRewardPeriodById(uint256)", "58aa0f1b": "numOfRare()", +"58aa1eaf": "withdrawBatchToken(address[],address)", +"58aa3429": "callAnother(address,address,uint256)", +"58aab84a": "feesClaimable(address)", "58aabdf8": "MaxMinersXblock()", "58aaf48a": "gasForShuffle()", "58ab010d": "buyParticipationTokens(uint256)", +"58ab7e89": "OracleRemoved(bytes4,address)", "58aba00f": "updateManager(address)", +"58ac505f": "executeShortSqueeze()", "58acf31b": "findJob(uint256)", +"58ad40e8": "syncCompletedRelaysOnBSC(uint128)", "58ad4673": "LEXTokensContract()", +"58ad495c": "cutPurpleWire(string)", +"58ada526": "orchestration(address,bytes4)", "58adc9ae": "transferToWalletAfterHalt()", "58ae6242": "AOIS()", "58ae8bcf": "voteInMasterKey(address)", +"58ae922a": "ethcap()", "58af7794": "create_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", "58b092d7": "addRaiseTapProposal(string,uint256)", "58b0a2aa": "setPriorityPassContract(address)", +"58b0b954": "setFingerprint(bytes32)", "58b1effb": "bidOfBidder(address,uint256)", "58b1f29c": "refundBounty(uint256)", "58b255ea": "fechVoteNumForCandidate(address)", +"58b36dac": "exercise(uint256,address[])", "58b435fb": "MeritICO()", "58b4370b": "round(int256)", "58b4a3c4": "testInitalBalance()", "58b4c035": "createNewGoBoard(uint256)", +"58b4e4b4": "claimWeek(address,uint256,uint256,bytes32[])", "58b5525d": "depositCharge()", +"58b5581c": "NewPayment(uint256,uint256,uint256,uint256)", +"58b5a6c8": "YFNRPerBlock()", +"58b5b244": "spendCommunityTax(address,uint256)", "58b5e775": "batchAllocateExp(address[],uint256[],uint256[])", +"58b69f57": "Pong(uint256)", +"58b6cccf": "aaveCode()", +"58b7a4da": "calculateRewardTesting(address)", +"58b81ea0": "Patterns(address,uint256)", "58b8dc61": "promoCreationPlayerCount()", +"58b90575": "sunflower()", +"58b92c1e": "numberTwo(uint256[])", "58b92d57": "UserAuthorized(address,address)", +"58b9d179": "swapOnUniswap(uint256,uint256,address[],uint8)", "58b9dcef": "registerVotingPrepareFailure()", "58bad3eb": "setEarlyParticipantWhitelist(address,bool)", +"58bae88b": "registeredStakers(uint256)", +"58bae999": "ub(address)", "58bafdbc": "contribute(address,uint256,uint256,bytes)", "58bb7d70": "checkEthSold()", "58bc3456": "addtokensWL(address,uint256,uint256)", +"58bc8337": "ETH_TOKEN()", "58bcdb5e": "collectCredits(address)", "58be0830": "_refSystem(address)", "58be98dd": "migrateBlockjack()", +"58becdf9": "TransferFrom(address,uint256)", "58beec9f": "summBounty()", "58bf7067": "setBlockedAccount(address,bool)", +"58bf7b5c": "setOpenLockForce(bool)", +"58bf8840": "baretax()", +"58bfb15a": "hasDisabledEscapeHatchForSmartWallet(address)", +"58c02b72": "getOpenTime()", +"58c05246": "setDefaultBaker(address)", "58c0bde0": "feeNewThread()", +"58c0bde6": "setMinPc(uint256)", +"58c0c772": "winnerFee()", +"58c0f729": "collectFees(address[])", +"58c13a75": "setToken(address,address,uint256,uint256,uint256)", "58c16557": "disableTypeById(uint256,uint256)", +"58c18d01": "migrateFloatTarget(uint256)", +"58c1a343": "registerDirect()", "58c1c328": "_validateId(bytes32)", +"58c1c355": "getInvestorWeiBalance(address)", +"58c1c595": "setExploitCompensationFundValuePerBlock(uint256)", "58c23767": "setCXLExchangeRate(uint256)", +"58c23bf0": "init(string,uint256,uint256,uint256,uint256,address,address)", "58c264f6": "preico_holdersAmountInvestWithBonus()", +"58c2d469": "todoList(uint256)", "58c31603": "loanCollectionNotification(uint256)", +"58c352f8": "doCallToRevert()", "58c3b0eb": "updateTokensApproved()", "58c3b870": "memo()", "58c3c193": "newBatch(bytes32)", +"58c4092c": "logNoShowBondChanged(uint256)", +"58c551cf": "BonusTokensSent(address,uint256,uint256)", +"58c56109": "setRepresentative(address)", "58c56f1e": "C20Token()", "58c60d5e": "gracePeriodCap()", +"58c612cb": "_ownershipOwner()", "58c62b12": "SingularDTVWorkshopFee()", "58c6bce8": "getCustomBuyerForIndex(address,uint256)", "58c6f08b": "takeTokensBack()", "58c721ce": "majorEvents(uint256)", "58c75136": "currentPremiumSale()", "58c757ba": "associateWithSig(bytes32,bytes32,address,uint256,uint256,bytes32,bytes32,uint8)", +"58c8a999": "getLastBlockNumber(address)", "58c8c0a7": "getVoteNumberList()", +"58c8c774": "revertUnstaking(bytes32)", "58c8ca0c": "_clearInventory(uint256)", +"58c933cf": "insertHash(string,bytes)", +"58c93f30": "_weight_factor(uint256)", +"58c9737e": "tokenContractStartTime(uint256)", "58c9e484": "buyPoints(uint256)", +"58ca41f5": "OneToken(address)", "58ca5419": "CheckBest(uint256,address)", +"58caa569": "frozenEnd(address)", +"58caed23": "setupDistribution(address,address[],uint256[],uint256[])", +"58caeee6": "adminStatusCtrl(address,uint8)", +"58cb0340": "isExchange()", +"58cb548b": "db(string)", "58cb7323": "MainnetETCSurvey()", +"58cbdee3": "PauseToken(uint256)", "58cc13f3": "asserts(bool)", +"58ccd7f5": "personalStats(address)", +"58cce5a3": "PreSaleReady()", "58cda0ab": "requestData(address,address,uint256)", "58cdddf9": "getRoundDifficultyBlock(uint32)", +"58ce1c1c": "ReservedPresale(address,uint256)", "58ce4b48": "setFundingStartTime(uint256,uint256)", "58cea888": "getWinOutcome(bytes16)", +"58cee0c4": "smgMint(bytes32,bytes32,uint256,uint256,address,address,bytes,bytes32)", +"58cf6e9a": "Females(address)", "58cf7c71": "unfreezePrice()", "58cf9570": "transferFeeRate(address)", +"58cf9672": "debitGasFees(address,uint256)", +"58cfdf04": "assignSpToDefence(uint256,uint256)", "58d0390b": "getCurrentICORoundInfo()", +"58d04fdc": "computeFarmingReward()", "58d10aae": "BlackJack()", "58d162da": "potSplit_()", "58d168b7": "generatePermutationKey(uint8[4])", @@ -50877,140 +93211,259 @@ "58d213ae": "InToken()", "58d25b93": "LogSendFunds(address,uint8,uint256)", "58d2ab45": "numberOfPixels()", +"58d2b4a5": "getBlacklistStatus(address)", +"58d2d2fb": "_midMax()", +"58d2f987": "setACSFarmContract(address)", "58d37dc5": "lastMintingAmount()", +"58d37f62": "callWithSuper()", "58d38231": "broughtSprites(uint256)", "58d3b2c8": "babyBornEndVoting(string,uint256)", "58d3b617": "Notifier(string)", "58d3ce8a": "thirdExchangeRate()", +"58d3e10f": "getBalanceAmount()", +"58d40279": "submitPeriodWithCas(uint256,bytes32,bytes32,bytes32)", "58d40f7e": "existsUserByEmail(bytes32)", +"58d441ec": "xoxoPerBlock()", +"58d4dc38": "changeCompany(address)", +"58d4df0c": "setFlashLoanRate(uint256)", "58d4e051": "YSS(uint256,string,string,uint8,address)", +"58d5b459": "jackpotCollected()", +"58d62e46": "lockETH(bytes32,uint8,uint32)", "58d63255": "GandhiJi()", +"58d65629": "dataDescription()", "58d6a99e": "CTChinaCoin()", +"58d6bc15": "setRewardStrategy(uint256,uint256)", +"58d742d5": "LOG_TradeDraw(address,uint256,bytes32,uint256,uint256,uint256,uint256,string,uint256,string)", "58d75180": "ECToken()", "58d782be": "getLotteryDetails(uint16)", +"58d7889c": "most()", "58d7bf80": "reserveRate()", +"58d7da09": "ENVPerBlock()", +"58d7df5e": "mbaccToken()", "58d80a8c": "doSetSettings(uint64,uint64,uint256)", "58d8652e": "addIssue(string)", +"58d8e814": "_getWethAddress()", "58d8f76f": "getPlayerBet(uint256,uint256,address)", "58d90108": "COLOR_RED()", +"58d94fbc": "salvageStrategy(address,address,uint256)", +"58d9c14f": "checkIfValidTokenIdsForMultipleNFTUser(address[],uint256[],address[])", +"58d9e0f7": "collateralOfPool(address,address)", +"58d9e6c6": "initialize(address,string,string,uint8,uint256,uint256,uint256)", "58d9e758": "DeleteUserByID(uint32)", "58d9f95d": "VIETNAMTOKENTEST()", "58d9fa04": "addUser(uint256,address)", "58da3ca9": "jdecompose(uint256,uint256,uint256)", "58da9bbc": "getAssetPackData(uint256)", +"58daf59e": "equals(address,address)", "58db3258": "removeFromPrivateWhitelist(address)", +"58db569a": "MAKE_BUY_ORDER_ROLE()", "58dc03f9": "TigerCashToken()", +"58dc2230": "useSend(address)", "58dc2a8b": "RESEARCH_AND_DEVELOPMENT_WALLET()", +"58dc2cdb": "redeemNFT(uint256)", +"58dc30e2": "getCeresBalance(address)", +"58dc3a75": "newResource(string,string,string,string,bool)", +"58dc81a5": "TokenTapAdjusted(uint256)", "58dc8807": "updateMintAuthority(address,int256)", "58dd0eb1": "propose(address,string,string,string,string,uint256,uint256,uint256,uint256)", "58dd6f23": "setTokenTransfer(bool)", +"58de2922": "balanceOfKSJS(address)", +"58de9ec0": "ensureERC20TokenExists(address,uint8)", +"58deacc9": "luckyPool()", +"58deeacf": "withdrawEthv1(uint256,address)", +"58defc2c": "showAmountMax(address)", "58df0383": "burnFinish()", "58df8ed8": "adminGetEnabled()", "58dfb058": "LNCH()", +"58dfd4e5": "DigestCode_New()", +"58e02d4e": "swapExactETHForTokens(address,uint8,bool)", "58e039bd": "listContractByModTextAndCttName(string,string,uint256,uint256)", "58e0a9d7": "YanToken()", +"58e0e1f0": "MintStopped()", +"58e16be1": "Update(bytes32)", "58e1c174": "RTI()", +"58e23f72": "allowFuturesContractForUserByFuturesContract(address,uint8,bytes32,bytes32)", +"58e25678": "newUser(uint256)", "58e29e17": "initiateProof()", +"58e2b676": "updateProtocolAddress(address)", "58e2cd76": "watch(address)", "58e3815c": "BASalesPrice()", +"58e3b8f8": "isToppedUp()", "58e3e914": "devuelveNombreApp(address)", +"58e3f1bc": "addressToElo(address)", "58e46275": "calculateTheEndPrice(uint256)", +"58e46a73": "deadLine(address)", +"58e482bd": "AFIv2()", +"58e4cff1": "getBzbReward(address)", +"58e53199": "approve_304(address,uint256)", "58e55365": "marketingBalance()", +"58e56db4": "getRequiredDeposit()", "58e59c32": "get_entry(uint256,uint256,uint256)", +"58e5bc88": "ZOOM()", "58e5d5a5": "PunkBought(uint256,uint256,address,address)", "58e61e12": "contribute(uint256[],bool,uint256)", "58e66522": "CoolTourToken()", +"58e67435": "addi7()", "58e69c5a": "hashimoto(bytes32,bytes8,uint256,uint256[],uint256[],uint256,uint256)", "58e71b15": "Organization()", +"58e72bf3": "IsIcoTime()", "58e756b6": "NewQ(string,bytes32)", "58e77a92": "setSelfPretorian(address,address,address)", +"58e81b4e": "upgrade(address[],address)", "58e85e03": "LogTokensBought(address,uint256)", "58e868c9": "DisableMember(address)", "58e879f3": "nextThaw()", "58e8922b": "payImportTax(address,uint256)", +"58e8f06b": "createAuction(uint256,uint256,uint256[],uint256,uint256,uint256,uint256)", "58e92fb0": "setFreezeForPEInvestors(uint256,address,uint256)", +"58e95370": "All_Cards(uint256)", "58e9a706": "checkLargeContributionsLock(address,address,uint256)", "58e9b208": "Controlled()", +"58e9f7d9": "spendFrom(uint256,uint256,uint256)", +"58e9fff0": "proposeByDelegate(address,address,string)", "58ea80e5": "setThroneCreationPrice(uint256)", +"58ea82e6": "mintFungible(address,uint256,uint256)", "58eae004": "awardBuyers()", "58eafc37": "addVirusDefence(uint256)", +"58eb39e8": "setCurrentPointIndex(uint256)", +"58eb8d88": "addVipPoolPoint(uint256,uint256)", +"58eb9700": "addRewardTokens(uint256)", "58ebde43": "generic_holder()", +"58ec1ca3": "deposit_AD(uint8,uint256)", "58ec63bc": "setAccountMilestone(address,uint8)", "58ecaa45": "StgThreebonusEnds()", +"58ecb030": "slashStake(uint256)", +"58ed4ba3": "withdrawTokenFromContract(address,uint256)", "58ed766d": "priceETHUSD()", "58eda67a": "get_Holders(uint256)", "58edaa9c": "getController(uint256)", "58edbc84": "mkDelegation(bytes32,bytes32,uint256)", +"58ede56d": "A7(bytes)", +"58ee82fe": "totalEarnedEth(address)", +"58eef9f4": "PrincipalIncreased(uint256,uint256,uint256,uint256)", "58ef82a0": "setMilFold(address)", +"58ef93a1": "tokensForFoundingBoardWallet()", "58efa06f": "bytesToBytes5(bytes)", "58efe3cd": "changeLink(bytes,address)", "58f0cbc7": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "58f10528": "eggExists(uint256)", "58f11566": "ReserveAccount()", +"58f11a02": "pepemonFactory()", "58f1490f": "addTransaction(address,uint256,bytes,bytes,uint256)", +"58f1f4aa": "getIntaggregate()", +"58f1faf6": "updateDepositFundings(uint256[])", "58f24f3d": "transferFromGate()", +"58f294de": "idToVotersArray1(uint256,uint256)", "58f33e98": "isTaker(address)", "58f35f10": "createT513(uint256,address)", "58f3a115": "tokenDistribution(address[])", "58f3da21": "adminGetContractBalance()", +"58f44c1f": "globalHalt()", +"58f461a2": "getIAIStats(uint256,address)", "58f4996f": "verifyIncluded(bytes,bytes32,bytes32)", "58f4be1e": "getIntention(uint256)", "58f4f160": "Halo3D()", "58f5382e": "challenge(string)", +"58f56b42": "getNick(address)", +"58f57f4d": "claimDevAwards()", "58f65330": "_checkPixelUnderLeft(uint256)", "58f693de": "tokenForSP()", "58f7f6d2": "BNB()", "58f816bf": "redeployProduct(bytes32)", "58f8e99e": "Jackypot()", "58f94f13": "CarParkCoin()", +"58fa63ca": "ZERO()", "58fa67f9": "calculateMintTotal(uint256,uint256,int256)", "58fa812b": "TRANSFERS_PER_TRANSACTION()", +"58faf104": "TreeWatered(uint256,uint256)", "58fb9f36": "_addBonus(uint256)", +"58fbaef0": "numMons()", +"58fbceb4": "_wBscToken()", "58fc0151": "getRequired(address,uint256,bool,uint256)", +"58fc5966": "getCustomerDB()", +"58fce2de": "getICOTokenAmount(uint256)", +"58fce854": "transferMainOwnership(address)", +"58fd3d29": "eligibleFrom(address)", "58fd6aec": "register(bytes32,string,string)", "58fd6fe2": "getBonusMultiplier(uint256)", "58fd955c": "rateETHUSD()", "58fd989b": "getLockedStructPulseLockHash(address,address,uint256)", +"58fe06ca": "setLookByte(uint256,bytes1,uint8)", +"58fe372a": "normalize(uint256,uint256)", "58fe54a1": "GetBoilerInfo(address,uint256)", "58fe8847": "BIRC()", "58feb4a3": "earlyCommunityAddress()", "58ff5111": "buyTokenForAddress(address)", "58ff7613": "RxEALSaleContractExtended()", +"58ff8cf4": "setBigPayDayPercentage(uint256)", +"58ffca2a": "signerWithName(string)", +"58ffcae0": "tradeMulti(address[],uint256[],address[],uint256[],address[],address[],uint256[],uint256[],address[],uint256[],uint8[],bytes32[],bytes32[])", "5900477a": "settleCancel(bytes,bytes)", "59004b28": "checkIfExists(uint256,uint256[],uint256)", "5900a09c": "addFunder(address,address,uint256,uint256)", +"5900bc7e": "seniorSymbol()", "59011400": "RewardDAO(address,address,address)", +"590158a7": "question_claims(bytes32)", "59015ed5": "getAccountModifiers()", "59016c79": "getContent()", +"5902555d": "generateNewSecurityToken(string,string,uint8,string)", +"59031199": "AAAA_TEAM_MINT()", "59032232": "setPatch(uint256,uint8,uint8)", "59032614": "FipsTransfer(bytes20,address,address)", "5903eff2": "root_10(uint256)", "5903f01b": "giveEthBankRollAddress()", "5904941b": "CoinealToken()", +"5904e28a": "closeShort(bytes32,uint256)", +"5905265b": "onBuyAndDistribute(address,bytes32,uint256,uint256,uint256,address,bytes32,uint256,uint256,uint256)", "590528a9": "sellShares(uint256,uint8,uint256,uint256)", "590589fd": "WithdrawToMember(address,uint256)", "5905b171": "getNextAssignedRequest(uint256)", "5905d314": "Added(bytes32)", "5905e1c5": "askPrice(address)", +"5906f520": "daysusereths(address,uint256)", "590731b7": "secondarySaleCut()", +"590745c5": "depositSavings(uint256,address)", "590791f2": "getOwnerBalance()", +"59081112": "roundIdCheck(address)", "59084ea9": "setWhitelistedWallet(address,bool)", +"59086a5e": "repayBorrowBehalf(address,address,uint256)", +"59086c95": "mintTeamAndAdvisorsPart5(uint256)", "5908984b": "foreignPurchase(address,uint256)", "59092c29": "XtremCoin()", +"590951e0": "ROICap()", +"5909865a": "resetWhitelist()", +"5909c0d5": "price0CumulativeLast()", +"5909c12f": "ROOT()", "5909e897": "buyRate(uint256,uint256)", "590a1c78": "LogBidFailed(address,uint256,uint256)", "590a4595": "createNewChain(bytes)", +"590aa875": "encodeERC20AssetData(address)", +"590b2fc0": "getYBPriceInUSD()", +"590ba492": "trade(address,address,uint256,bytes,uint256,bytes,uint256,bytes32,bytes)", +"590ba68a": "NewBid(uint256,uint256,uint256,address)", "590ba734": "getUint(int256)", +"590bab2e": "preSignWithdraw(address,address,uint256,uint256,uint8,bytes32,bytes32,uint256)", +"590bbb60": "revokeStrategy(address,address)", +"590bbc0f": "onAffiliatePayout(uint256,address,bytes32,uint256,uint256,uint256,uint256)", +"590c2a8b": "stakeInfo(uint256,uint256)", +"590c3948": "claim(address,address,address,uint256)", +"590cea52": "regOrg(string)", "590d431a": "wavesId()", "590d5a67": "multipleTokenDistribute(uint256)", +"590da10a": "fetch(address[])", "590daaec": "setTokenDeskProxy(address)", +"590deeaf": "API_AddStaticTotalAmount(address,uint256)", "590def78": "IndonesiaRupiah()", "590e1ae3": "refund()", +"590e6d3f": "ShareContract()", "590efa59": "setContrAddr(address,address)", "590efee1": "isExec()", +"590f897e": "_sellFee()", +"590f940b": "submitProposal(address,uint256,uint256,uint256,address,uint256,address,string)", "590f9ece": "getShow(uint256)", "590fcc5b": "debugVal2()", "591016bc": "generateId(bytes32,address)", +"59103ca3": "DGAS_DECIMAL()", "591090ee": "ELIXAddressSet()", "5910a18b": "addEntry(bytes32)", "5910ce39": "_mint(string,string,uint8,uint256,bool,uint256)", @@ -51020,73 +93473,127 @@ "59117bae": "getRoomID(uint256)", "59118221": "setTokenData(uint256,bytes32[])", "59118ff2": "amount4()", +"591193a5": "wrapMultipleTokens(uint256[],address,uint256[])", "5911fb9a": "setRate(address,address,uint256)", +"59122c36": "strainzTrades(uint256)", "59125397": "indexedDocs(uint256)", +"5912c046": "totalTokensClaimed()", +"5912c946": "rejectOffer(uint256,uint256)", +"59133538": "ContractEarnings(uint256,uint256,string)", "59137533": "PillowCoin()", "5913cacc": "unlockBonusDrop(address,uint256)", "59144baa": "setFundContract(address)", +"591451f7": "repRewardConstA()", "591451fe": "setHostingProfitAddress(address)", "5914589c": "RLC()", "59151701": "VerifiedUser(bytes32,address)", "591552da": "currentFee(address)", "5915589e": "Dataset(address,string,uint256,string)", +"59157f82": "getServicePoolClaimingFee(address)", +"591590ff": "tokenWeightage(address)", +"5915b6df": "etherSpent(address)", +"5915d806": "withdraw(uint256,uint256[])", "59161e57": "releseToken(address)", +"591663e1": "setMaxDebtRatioPercent(uint256)", "59167b9d": "setTokenContract(uint256,address,uint8[],bytes32[],bytes32[])", "59167fcc": "getUserAccountInfo()", "59169d06": "setBountyTokensPercent(uint256)", +"5916c226": "switchMinter(bool)", "5916c2c9": "NeuroWire()", "5916c5fa": "sellEgg(uint256,uint256,uint256,uint16,bool)", +"59170dbd": "amIOrca()", "59179dbd": "createSaleAuction(uint256,uint256,uint256,uint256,uint256,uint256)", +"59185fe5": "getAmountMagnification(uint256,uint256)", +"5918668b": "setPbaseEthPairAddress(address)", "59187cec": "getEarningAmount()", "5918bc7f": "addTerms(string,string)", "5918f00c": "fillOrder(address,address,uint256,address,uint256)", "5918f348": "hmcAddress()", "59193981": "token_sale_end_block()", +"59193f37": "getWithdrawalAmount(address,uint256)", "59194d0c": "totalEthBalance()", +"591966c2": "reactiveUnbankOwner(address)", +"59197c58": "debaseWhitelist(address)", "59197f51": "ethEt4Rate()", "59198827": "initiateDocumentVote(string,bytes32)", "5919896f": "Taracoin()", +"59198fab": "getLockingContractDetails(bytes32)", "5919978b": "create_safe(address,string,string)", "591a0d87": "foundersWallet2()", +"591a3da2": "logBytes15(bytes15)", +"591a5eb6": "post(uint256,string)", "591a6ec4": "toBeDistributedFree()", "591a89b2": "Voted(address,bool,uint256)", +"591ad13a": "clearWINTER()", "591b05b1": "domainHtml(bytes32)", "591b41c6": "Multisend()", +"591b6fff": "teamsHasLargestNumberOfMembers()", +"591bc092": "shareNumerator()", +"591bc226": "discardRelayer(address,uint256)", "591beea8": "guardIntervalFinished()", "591c515f": "append(string,string)", +"591c65da": "hegicFutureProfit()", +"591cec86": "getSCAddress()", +"591cf5cb": "withdrawOtherToken(address,uint256)", "591d5236": "getDifference(int256,int256)", +"591d7d8e": "maxCompensation(address)", "591d8bd0": "constantFn(uint256)", "591ead36": "SplitTransfer(address,uint256,uint256)", +"591f3428": "getLockBoxBeneficiary(uint256)", "591f36a6": "updatePreICOMaxTokenSupply(uint256)", +"591f3f58": "setJCompoundAddress(address)", +"591fcdfe": "cancelTransaction(address,uint256,string,bytes,uint256)", "5920375c": "thaw()", +"592068a7": "_decode_sol_bytes3(uint256,bytes)", "59208b8a": "userRefundWithoutGuaranteeEther()", +"59209f39": "founderPoolFundAddr()", +"5920b7da": "withdrawTETH()", +"5920c0ce": "valueToTokens_(uint256)", +"592126fc": "setOstanTotalBudget(uint256)", +"59214291": "protocolIdentifier(address)", "59214765": "sendBonus(address,uint256)", +"59221a68": "subscribers(uint256)", +"59227d61": "isConfirmedTransaction(uint256)", "5922b831": "refundPlayers(uint256)", +"5922ff7d": "_calculateRewards(uint256,uint256,uint256)", "592311ed": "freeze(address,address,bool)", +"592315d1": "UpdateTokenInfo(bytes32,address,uint256,bool)", "592341df": "whatsMyJuryNumber(uint256,address)", +"5923958a": "UpgradeCardBought(address,uint256)", "5923c7f9": "maxSaleToken()", "59242d11": "SmartIndustrialToken()", "59245ff3": "fundAnswerBounty(bytes32)", "59249c46": "duper()", +"5924ee2a": "totalDepositedDividend(address)", "5924f811": "tier2Reached()", +"592545bd": "_default()", "592572e2": "getLoanCanceledAmount(bytes32)", "5925cfe3": "getCCH_edit_7()", +"5925e37e": "checkStakeCliqReward(address,uint256)", "5926651d": "addBeneficiary(address)", "592685d5": "getWindowStart(address,address)", "5926b55a": "setArray(bytes1[],bytes8[],bytes32[],int256[],uint256[],bool[])", "5926c826": "Mitronex()", "5926cf13": "setGameId(uint256)", +"59274a04": "setKeepSUSHI(uint256)", "59275c84": "minerAddress()", "59276653": "getTicketCount(address,string)", +"59276e58": "assignedChainIds(uint256)", +"59283c3c": "preR0()", "59287ce9": "setPbulicOfferingPrice(uint256,uint256)", +"59289540": "HasLocked(address)", "5928aedc": "setEndStage2(uint256)", "5928bdc4": "LatiumLocker()", "5928c7db": "changeDividendWallet(address)", "5928e80c": "updateNoteTitle(uint64,bytes12)", +"59290c08": "SetAmountOfMountRentAndDeposit(address,uint256,uint16,uint8,uint8,uint16,uint8,uint8,uint256,uint256)", "59291e2f": "MinedBlocks()", +"59292e57": "offsetTransaction(address,address,uint256,string,string,address)", "59292ef3": "gasLimitDepositRelay()", +"59294a5a": "GameDestroyed(bytes32)", "59296490": "CharityCommonweal(uint256,string,uint8,string)", "59296e7b": "getCredit()", +"5929a63b": "liquidityEpochLength()", "5929b837": "_setRate()", "592a5f9b": "ValidToken()", "592a97de": "encodeUInt(uint8,uint256)", @@ -51097,98 +93604,166 @@ "592bd705": "setowner(address)", "592c0f09": "onLotteryFinalized(uint32)", "592c518f": "ADDR_TKG_CHARITY()", +"592c878e": "LogStepAdvanced()", +"592ca850": "removeFromBlocklist(address)", "592d4c7e": "CAD_Omnidollar()", +"592d5a49": "lockWithData(string,address,uint256,bytes)", "592dc0a6": "setAyantDroitEconomique_Compte_2(uint256)", +"592dc0c2": "getCovTokenAddress(bytes32,uint48,address,uint256,bool)", +"592e3a5b": "initialAccruedIndex()", "592e6f59": "initialise()", +"592e998a": "getMetaCoins()", "592ea64f": "LLV_v30_12()", "592eef5a": "postIdToDonationAmount(address,uint256)", "592efdab": "presaleWhitelistTokensLimit()", "59301cb2": "_callRecipient(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"5930a0a1": "rewardTokenAddress(uint256)", "5930a295": "changeBetLimits(uint256,uint256)", "5931228b": "endTimeDay()", +"5931598d": "addCrowdsale(address)", "59317ea2": "buyImplementation(address,uint64,uint256,uint8,bytes32,bytes32)", "59318b2c": "unFrozenBalanceByIndex(uint256)", "59328401": "getPlayerInfo(address)", "5932c02c": "tradesCount()", "59330b8e": "hashDetails(uint256,address,uint256,uint8)", +"59339982": "messageFixed(bytes32)", +"5933b459": "claimInitialSupply(uint256)", +"5933fde8": "CPProxyContract()", +"593488ab": "JANCHOR()", +"59351e17": "updateMyStakes()", +"593524ed": "exchangeRates(uint256)", "59354c77": "changeSubcourtJurorFee(uint96,uint256)", "59355736": "lockedBalanceOf(address)", +"59356c5c": "underlyingBalance()", "59357045": "getDueTime(uint256)", "5935fba5": "addContractor(address,uint256)", "5936259c": "BullsFarmer()", "59362835": "JPCoin()", +"59362b88": "getFeeRatio()", "5936387c": "checkOpposited(uint256,bool)", +"59363bca": "getMyShare(uint256)", "59366245": "bonusInPhase5()", +"593669aa": "GetDaiLendingAdapterAddress()", "5936812b": "changeLockedBalanceManually(address,uint256)", +"5936cf61": "getResult(uint8,uint256)", +"59378a81": "onRefundTicket(uint256,uint256)", "5937de14": "STATUS_DEAL_RELEASE()", "5937e534": "appealSkip()", "5937e86a": "setTokensQuantity(uint256[],uint248[])", +"5937e88a": "getSeeds(address)", "5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", "59388d78": "decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", +"5938d97a": "wizardsById(uint256)", "59391a67": "earlyResolve(bytes32,uint256,bytes)", +"59399b60": "ownerToOperators(address,address)", "5939a84e": "isLawyer(address)", "5939dd31": "setEthartRevenueReward(uint256)", "5939ee04": "registrationPeriod()", +"593a426a": "Erne()", "593a5bff": "KUISToken()", "593a6297": "getPlayerLaff(uint256)", +"593a9375": "approve_56(address,uint256)", "593aa283": "setMetadata(uint256,string)", "593af09f": "assertEq20(bytes20,bytes20)", "593af4f1": "_fYou(address,uint256,string,string)", "593af56a": "editionType(uint256)", +"593b06fe": "createReceivers(uint8)", "593b4530": "proxyMergeMint(uint256,bytes32,address[])", "593b79fe": "toBytes(address)", "593be1f8": "_removeAuctionManager(address)", "593c993c": "presaleWeiContributed()", "593cca56": "checkExplore(uint256,uint256)", +"593d00e0": "isConditionTimeLocked(bytes32)", +"593d132c": "rampA(uint256,uint256)", +"593d1a27": "lexDAOmintLLCbatch(address[])", +"593d1b89": "setupRoles(address,address,address,address)", "593d280d": "KToken()", +"593e0906": "caseMap(string)", "593ea3e7": "VERDICT()", "593efdf1": "setCurrentPassportLogic(string)", "593f3a6c": "AllMarkingsProcessed(address,uint256,uint256,uint256)", +"593f47c8": "yDepositUSDC(uint256)", +"593fc23e": "EthToUsdRate()", +"59405488": "bestaetigePoolfahrt(uint256,uint256,uint256)", "5940f55c": "setEncryptionPublicKey(string)", "594151e0": "Dice()", +"594153a0": "poolProxy()", +"5941b3d8": "_nullCardFactory()", "5941bb80": "transferFromBatch(address[],uint256[])", "5941d8d4": "RtbSettlementContract(address,address,address,uint256)", "5941ff52": "impl_yield7Day()", "59423a7f": "BuySnail(address)", "59424b78": "approveArtist(address)", +"5942a9a3": "Delivered(address,uint256)", +"5942d391": "withdraw20k()", "594337a9": "investorsLength()", +"5943d8bb": "BountyAmountUpdate(uint256)", +"5943ff14": "setReservedAddr(address)", +"59441eae": "mintable(address)", "5944427b": "getRequestResult(uint256)", "5944b7d9": "setCCH_edit_1(string)", +"5944bcad": "bidPoolJoin(uint32,uint256)", +"5945365e": "flipToken()", "594548d5": "newStakesAllowed()", "5945793d": "getCorrectedTotalBPOfAddress(address,address)", "5945841b": "ELIXAddress()", "5945bdc5": "token2GT()", "59462295": "WhiteWallToken()", +"59466d9a": "resolve(uint256,uint256,uint256,string)", "5946e7eb": "Tier_Rainmaker_Registration()", +"59470163": "Apply(address,uint256)", "594733c6": "getInvestorId(address,address)", "594742da": "forecastOfToken(uint256)", "59475891": "TransferHash(bytes32,bytes32,uint256)", +"59477dde": "setRound1Length(uint256)", "59478411": "modifyProductPrice(bytes32,uint256,uint256)", "5947cc6a": "level_2_percent()", "5947d616": "updateAskingPrice(uint256,string)", "59485790": "_emitPricesUpdated(uint256,uint256)", +"594883b9": "permittedExchanges()", "5948f733": "getAddressArray(bytes32)", +"59497ed7": "lockForSwap(uint256)", "5949a8f7": "notifyDeposit(uint256)", "5949e525": "fundingUnlockFractionInvert()", "594aa668": "getCourseList(string)", +"594ac0b4": "SaleLive(bool)", +"594ae021": "DidLCJoin(bytes32,uint256,uint256)", "594afcff": "tgrContributedAmount()", "594b18b5": "_transferToLock(address,uint256,string)", "594bbe8f": "Corolexcoin()", +"594bef41": "getEstimatedEthFromJpy(uint256)", +"594c01aa": "getCirculatingTokens()", +"594c7a17": "Birth(address,uint64,uint16,uint256)", +"594d47e1": "erc20ToPhoneToken(address,uint256)", +"594dd432": "claimRewards(uint256,uint256)", "594de857": "getDealsCount()", +"594e95a9": "handOverDebtToTreasury(address,address)", "594eda64": "getBackend()", +"594fef80": "contributeToTokenGroup(uint256)", "594ffb4e": "setReferralFee(uint8)", +"59508878": "pendingCat(uint256,address)", +"59509444": "to_staking(uint256)", "5950cb8c": "setCasinoName(uint16,string,string)", "5950cee4": "checkProviderSupported(address,address)", "5950d395": "recallPercent()", "5951317a": "doFinalizeSale()", "59514593": "addFreezableAddresses(address[])", +"59515276": "cancelPhotoAcquisition(uint256)", +"5951883e": "assetsList(uint256,address[])", +"59518e86": "awardToMany(uint256,address[],uint256[],uint256[],bytes,uint256[])", +"5951a7f6": "businessName()", +"5951b2e6": "setChi(address)", "595210ad": "openDispute(string)", "5952176e": "removeBusinessOwner(address)", "5953c806": "setSendCost(uint256)", +"5954036a": "getTotalCanReleaseCountByRound(uint256)", "5954c8c5": "manualWithdrawEther()", "5954ee54": "actualPriceInCents()", "595539cd": "modexp_naive(bytes,uint256,bytes)", +"59557a77": "isSalePublic()", +"59564219": "getCompVotes(address,address,uint32[])", "5956b853": "soldAddresses(address)", +"5957dc59": "setFeeAddressDevs(address)", "5957eb17": "PeterToken()", "5957ee49": "getProjectUsedTokens()", "5958188d": "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(address[],uint256,uint256,address)", @@ -51196,15 +93771,22 @@ "5958621e": "setRewardWallet(address)", "595882b3": "mintAll()", "5958978c": "day_blocks()", +"5958b301": "updateLocalContract(address,bool)", "595a161b": "amountOfZeros(uint256,uint256)", "595a30f1": "RateChanged(uint256)", "595a4fc2": "recomputeAccountLastAverageBalance(address)", +"595a5ebc": "setAuthPubkeyHash(bytes,uint32)", "595a69e8": "add_address(address,address)", "595a7273": "QbaseIssued()", +"595a99c2": "setToWhitelistAddress(address,bool)", +"595adaba": "setLpFeePct(uint256)", "595aed65": "_getChild(address,uint256,address,uint256)", +"595aefe3": "ico2PerEth()", "595b1a3e": "getUsersLength()", "595b35d1": "NUMBER_OF_COUNTRIES()", "595c3f61": "FactomTalk()", +"595c465b": "_decode_string(uint256,bytes)", +"595ca76a": "tranche_TFI_earned(uint256,uint256)", "595cb7a3": "changePrice(address,bytes32,uint256)", "595d0392": "transferHoldFrom(address,address,uint256)", "595d71a5": "MintFinished(uint256)", @@ -51214,60 +93796,112 @@ "595e615f": "betPool(address)", "595ecbb3": "Int256(uint256)", "595ee7a4": "MajListVal()", +"595f052e": "lpTaxAlloc()", "595f0e5e": "test_CuratorRules()", "595f40d6": "getDevelopersFee()", "5960b74f": "advisorTimelock()", +"59610a7a": "adminAddAdmin(address)", +"59617616": "withdrawStrategy(uint256)", "59622aa6": "maxAmountForSalePromotion()", +"596252fc": "balanceInVault()", "5962581e": "isInRoundOneState()", "59626877": "AiToken(uint256)", "59627b84": "getReduce(uint256,uint256)", "5962a941": "totalPurchases()", "5962ad30": "dkSB(string)", +"5962eb69": "settleReward3(address,uint256)", "59633a1c": "removeBeneficiary(address)", +"5963b352": "LOG_ContractStopped(string)", +"5963e011": "investNext(uint256)", +"59646eb4": "wCoin()", "59647984": "isValid(address,uint256)", +"5964c242": "getFreeReferrer(address)", +"59650270": "workingPlanLoopCheck(address,uint8)", +"59653ec9": "getFNXMinePoolAddress()", +"59658607": "returnTokensAndBurn(uint256)", +"5965916f": "initiatormsg()", +"5965da77": "addToX(uint256)", "5965e7c3": "SimpleCrowdsaleBase(address)", +"59660d17": "horseDataContract()", "59667c24": "withdrawRound(uint256)", +"5966c3e7": "sortedVoteScoreList(uint256)", "59679b0f": "_implementation()", "5967dee8": "transferLOT()", +"5967e4c5": "buyNewLevelE1(uint8,uint8)", +"596822cc": "adminLDBCommission()", +"596849fd": "getCurrentTotalAPY(address)", "5968c2a4": "getOrderTokenAllocationStatus(uint256)", "596925d6": "expByTable(uint8)", "596939f5": "addAgent(address,uint256)", "5969549e": "modifyBeneficiary(bytes32,address)", "59695754": "setMinimumPayout(uint256)", +"5969aa84": "poof()", +"5969b062": "auto_lock()", "5969c0e1": "resetSignature(bytes32)", "596a072c": "setOraGasLimit(uint32)", "596a2735": "DICE_RANGE()", +"596a3966": "canPerform(address,address,address,bytes32,uint256[])", "596aadaf": "transferFromCrowdsaleToUserAdoptionPool()", +"596b6f5c": "ownedOptions(uint256)", +"596b93e4": "requiredPaidDebt(uint256)", "596b975a": "maxFunding()", +"596b996b": "stakeMultiplier(address)", "596bda14": "_set9()", "596c02fb": "assertEq22(bytes22,bytes22,bytes32)", "596c0531": "bch()", +"596c422e": "ID2P3Hex(string)", "596c49bd": "TimeControlled()", "596c8976": "close(uint256,uint256)", "596d6f08": "Blizzard(uint256,string,string)", +"596d9064": "receiveTransaction(address,address,uint256,uint256,bool)", +"596da6dd": "balancerAddress()", +"596db0af": "doNotSellList(address)", +"596dec17": "LogNewOraclizeQuery(uint256,bytes32,string)", +"596df685": "closeWithDepositWithGasToken(bytes32,address,address,uint256)", +"596e2551": "requestEthereumPrice(address,bytes32,uint256,string,string)", "596ea3db": "allowTransferTime()", "596f3473": "applyToBeAReviewer()", +"596fa9e3": "uniswapRouterV2()", "596fab6c": "calculateLockAmount(uint256)", +"596fb770": "videoPartnerAdmin()", "59704013": "setVar(string,string)", "5970c40a": "addForecast(bytes32,uint256,uint8)", "59716eed": "lockedEthBalanceOf(address)", +"5971aa21": "initialRewardRate()", "59724977": "getwin011050(address,uint256)", "59727e83": "registryTransfer(address,address,bytes32,uint256)", "5972e062": "deleteNodeGroup(uint256,uint16)", +"5972f1d2": "lastDividendPointsEuro(address)", "5973016b": "Multiven()", +"597357c2": "pendingBunny(address,address)", +"59739ec4": "performanceTreasuryFee()", "59748c98": "plain()", "5974ec50": "founderTokenUnlockPhase3()", +"5974f509": "addDiploma(address,string,string,string,string,string,uint8)", +"59753fb1": "setSponsor(address)", "59756526": "getJobHash(bytes16,address,address,uint256,uint256)", +"59758571": "_setMinTokenForfusion(uint256)", "59758ebe": "repayLoan(address,uint256,string)", "5975ce80": "mintApproveReset(address,address)", +"5975db02": "lastUser(uint256)", "59761fcb": "test(address[5],uint256[5])", +"5976317f": "setLiquidationAllowed(bool)", "59764714": "MyDFSToken()", "59769073": "totalBalancingTokens()", +"5976c67c": "mapSynth_EMP(address)", "5976ddd0": "getScenarioNamesAndEventStatus(bytes32)", "59770438": "getToken(address)", "59780224": "joinGameWithInviterIDForAddress(uint256,address,address)", +"59781034": "addCollateral(address,address,uint256)", +"597816e3": "setTickeData(string,string)", +"5978a654": "setX(address)", "59790701": "updateFeeSchedule(uint256,uint256,uint256)", "59793b3a": "derivativeTokens(uint256)", +"597ade41": "getOpenLobbyDays()", +"597aeaa6": "setfuelVaultAddress(address)", +"597af758": "setCollateralDcdc(uint256,uint256,address)", +"597b2279": "addUnderlyingPrice(uint256,address,address)", +"597bea42": "transferTeamAndAdvisorsAndBountyAllocation(address,uint256)", "597c255f": "receiveChild(address,uint256,address,uint256)", "597c69cc": "saveToColdWallet(uint256)", "597cae8d": "getFeeWindowBurnAmountValue()", @@ -51277,111 +93911,200 @@ "597df768": "buyPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", "597dfbaf": "confirmNode(uint256)", "597e1fb5": "closed()", +"597e4734": "collectFunds(uint256)", +"597e57a9": "setEarnFound(uint256)", "597ea5cc": "getUint8FromByte32(int8,bytes32,uint8)", +"597ea83a": "addCredit(uint256)", +"597ece84": "pynthsBalances(address)", "597efd85": "UblastiToken(uint256,string,string)", "597f7c35": "transferTechSupport(address,address)", "597fef79": "funderBalance_()", +"59800d96": "Frozen(bool)", "59802e15": "makeBonus(address[],uint256[])", "598052a3": "winPooling()", "598077b9": "ownerPart()", "5980d0d7": "_crowdSaleSupply()", +"5980d48e": "registerNewEthBalance(uint256)", "5980e72d": "getSeedPercentageForGameId(uint256)", +"5980f980": "flpToHarvest()", "59810024": "VICETOKEN_ICO_IS_A_SCAM()", "59813a0e": "allowToken(address,address,uint256,bool)", +"59815826": "StartBonus(uint256)", +"5981b942": "sendReserves(address)", +"5981c746": "buyOusdWithDai(uint256)", "5981f187": "bookingBalanceOf(address,address)", "5982688f": "revenueShareList(address)", +"598270d2": "emptyTokenByUnderlying(address)", +"59827215": "viewStakerTokenAmount(address)", "59828c99": "FLIPPINESSROUNDBONUS()", "5982a30f": "setFriendsFingersRateForCrowdsale(address,uint256)", "5982a6bb": "DiipCoin()", "59830bf4": "LogBidCompleted(bytes32,bytes32,bytes32)", +"598362f0": "ampData()", "5983ae4e": "hasher(address,bytes32,uint256)", +"5983e6b0": "revokeOracle(address)", +"5983e974": "getUserOrdersCount(address)", +"5983f7cd": "staker(uint256,address)", "59841fe9": "newRun(bytes32,address,string)", "59849d30": "maxCreatorWithdraw()", "5984d7ad": "buyHeart(address)", +"5984ec14": "cityPerBlock()", "59852686": "transferEth()", "5985ac40": "affiliateNetwork()", +"5985b624": "hashHex()", +"5985f597": "rewardsPercentage(address)", +"5985feec": "CHANGE_PERIOD_ROLE()", +"59861976": "issuersOrFulfillers(uint256)", "598647f8": "bid(uint256,uint256)", "59869576": "TestERC20Token(string,string,uint8)", +"5986a13d": "returnETher(address)", "5986ce23": "setdteamVaultAddr1(address)", "5986dbe4": "ccUserCount()", +"59871e35": "registerUBetCheck(address,string,string,string,uint256,string)", +"5987714f": "gBBB()", "5987e370": "canJoin(uint256)", "5987f859": "setInputs(string,string,string)", "5988899c": "estimateDaiSaleProceeds(uint256)", +"5988b0a8": "LogNewWave(uint256)", +"5988b3df": "CancelStack(address,uint256,bytes32)", +"5988c716": "getGemNum(uint256)", +"5988e4c1": "Exchange(address,uint256)", "59890fd2": "mod_product(uint256,uint256,string,string,string,string,string)", +"59897448": "golNoLongerForSale(uint256)", "5989c283": "createChannelERC20(address,uint192)", +"598a4037": "StageChanged(uint8,uint8,uint256)", "598aa1fc": "checkEndorsement(address,uint256,address)", "598ab2c9": "supplyRest()", "598abc9c": "getListTeam(uint256)", "598ac8f2": "permille(uint256)", "598adef6": "addDepositor()", "598af9e7": "allowance(address,address,uint256)", +"598b0cc6": "setEmergencyFlag(uint256)", +"598b34aa": "removeIpfsHash(uint256,string)", +"598b47dd": "REWARD_MULTIPLIER()", "598b771d": "IOVContract()", +"598c2704": "unclaimedNNReward()", "598d34b7": "distributeBTR(address[])", "598d772a": "changeEtherVault(address)", +"598d7d0f": "MINING_POOL()", +"598da1d1": "verifyProof(bytes,uint256[7])", "598db132": "setProviderIsForRent(uint256,bool)", "598e3183": "newToken(string,string,uint256,address,uint256)", "598e728a": "TIXIToken()", +"598e832f": "copyBestReserves(address,uint256[])", "598e9eeb": "transferir(uint256,address)", +"598ee1cb": "_setContributorCompSpeed(address,uint256)", +"598f2f50": "yycrv()", +"598f31c6": "percentOf(address)", "598f512b": "Token(uint256,string,uint8,string,bool)", "598f6dec": "reserveTimeLock()", +"598f85db": "kickIt(address,address,uint256,uint256)", "5990e665": "NetworkSocietyToken()", +"5990fea6": "sellCompleteSets(address,address,address,uint256,bytes32)", +"59911bf2": "orderBalanceOf(address,uint256)", "59912df1": "totalTokensDestroyed()", "59915fd3": "CheckRefundIsFair()", +"5991a0e4": "dealdetail(address)", "5991c0dd": "TSTEST3()", "5991db0f": "contains(uint8[],uint8)", "5991faf5": "contributors_countdownDate(address)", +"59921b7b": "getLavaPacketHash(string,address,address,address,address,address,uint256,uint256,uint256,uint256)", "59923274": "sendFromBountyWallet(address,uint256)", +"599238ee": "step0_createSwap(address,uint256)", "59927044": "teamWallet()", "5992f2a1": "_createVoter(string)", "599312ec": "rescueCatHashCheck(bytes32)", "599362d0": "_setBackgroundValue15(uint256)", +"59936da6": "addTrustees(address[],bytes32,bytes32)", "59939e21": "getApprove(uint8)", "599466fe": "abortCrowdfund()", +"59948f44": "getAllDeposit(address)", "5994d984": "TRUE()", "59953744": "createVestingContract()", +"5995c406": "exec(uint256,uint8,address,address,uint256,uint256)", "5996228e": "upgradeResistance(uint256)", "599651f3": "setStartAuctionFee(uint256)", "59966ae1": "allowClaimer(address[])", "5996769e": "_getDefaultOperators(bool)", +"59968999": "lockaddress()", +"5996a300": "RemoveTIFE()", +"5996b9da": "pricingToken()", "59970a08": "OneKeyToken(uint256,string,uint8,string)", "59974e38": "distributeRewards(uint256)", +"5997bb37": "REWARD_RATE()", "5997ed4c": "DevFee()", "59988dce": "newQuestioner(address)", +"5998a692": "TransferToCon(address,address,uint256,bytes)", +"5998caa6": "pendingTeste(uint256,address)", "5998e641": "getStrategyTokenByIndex(uint256,uint256)", +"59994c98": "amIFlipper()", "5999917c": "get_cross_chain_nonce()", +"59999b41": "collectTokens(address)", "5999d385": "walletICO()", +"5999dc4d": "floor(uint224)", +"599a46fc": "getLiquidityProviderPayout(address,uint16[])", +"599b0e88": "both(bool,bool)", +"599b11b5": "stakeLedger_(address)", "599b3e21": "buytokens2()", "599b6808": "balanceList(uint256)", +"599b83fa": "period_number()", +"599b9348": "setNetworkContract(address)", "599c8761": "decodeParamsList(uint256)", +"599cde6e": "unclaimedShares()", +"599cf1da": "reinvestAllEarnings()", +"599d64e9": "stakeAnnualPercent()", +"599d8e5a": "RefundsEnabled()", "599db6bd": "unsowed(address)", "599dc6be": "setItemStoppedStatus(bool)", +"599dd909": "setpkKushPairAddress(address)", "599e2364": "tokenItems(uint256)", +"599e4c70": "setPermission(bytes32,address,bool)", +"599ed3ff": "tokensData(uint256)", +"599ee9af": "TileOfferCreated(uint16,address,uint256,uint256)", "599efa6b": "refundEscrow(address,uint256)", +"599f36d1": "voteCounter()", +"599f5810": "executeSwap()", +"599fe7f0": "joinswapExternAmountIn(address,address,uint256,uint256,uint8)", "59a02589": "ico_PRICE()", "59a02652": "miningWarContractAddress()", "59a0b995": "AiraEtherFunds(address,string,string)", "59a0e583": "lastBlock_v9()", "59a131e2": "CrankysLottery()", "59a23200": "authorizeTransaction(uint256,address)", +"59a253f3": "stakeMin()", "59a29c6f": "no_of_tokens()", "59a2c86f": "requestPayout(uint256,address,address)", +"59a2f19f": "isFeesClaimable(address)", +"59a397d1": "restoreAllowance(address,address,uint256)", +"59a3b0cf": "revealBallot(uint256,address,address[],uint256[],uint256[],uint256)", "59a3e577": "createClaim(address[],uint256,address)", +"59a408a7": "delUni(uint256)", "59a4669f": "increaseJackpot(string)", +"59a515ba": "usedTickets(bytes32)", +"59a51c6f": "_removeCollateral(address,address,uint256)", "59a536b0": "presaleWei()", "59a547b0": "recordCommission(uint256)", "59a58647": "setMaxCards(uint256)", "59a591be": "setCrowdsaleTimes(uint256,uint256,uint256)", +"59a5c6ae": "queryPairReserve(address[],address[])", "59a5f12d": "player2()", "59a69426": "setStatuses(address)", +"59a6ad5a": "approve_192(address,uint256)", +"59a6b9e3": "beyondToken()", "59a765f9": "sendInvoice(string,string,string,string)", +"59a7715a": "totalMint()", "59a78c1a": "deathData_v8()", "59a7b3fe": "hourlyRate()", +"59a7cf83": "setupToken(address,string,address,address[],bool,bool,address[])", "59a7f754": "acquireWildcard(uint16)", "59a80f0f": "setCurs(uint256)", "59a83074": "set_participant_num_of_pro_rata_tokens_alloted(address,uint256)", "59a87bc1": "buy(uint256,uint256,address)", "59a8b6a3": "OptaToken()", +"59a8f5dd": "createCandidate(bytes32,string,uint256,bytes32)", "59a941a6": "setApp(string,string,string,uint256)", +"59a95654": "mirrorInviteToken()", +"59a9a1f1": "claimedKnowledge(address)", "59a9a63f": "isVulnerable(uint64,int8)", "59a9a980": "isCosd(string)", "59aa80b8": "getTransfer(string,uint256)", @@ -51389,11 +94112,18 @@ "59aaaf86": "changeBlocPerEth(uint256)", "59ab0306": "BuyTickets(uint256)", "59ab0dd1": "JACKPOT_TOKENS_PERCENT()", +"59ab5277": "transferAsset(address,string)", +"59abef9a": "closeDonation()", "59ac5b32": "createProject2()", "59ac5c6d": "_shift(uint8)", +"59ac67cd": "RewardTokensBalance()", "59ac70ae": "totalTimeRange()", +"59ac7fe3": "getMoneyBagBalance()", "59acb42c": "createdAtBlock()", "59acbcb1": "crownTransfer(address,uint256)", +"59ad0209": "usernameMinLength()", +"59ad153c": "NFTIndex()", +"59ad31d1": "setAddressRecipient(address)", "59adb2df": "returnUint256(uint256)", "59adda9b": "checkOwnerFailedToSetTimeOnMeeting()", "59ae2073": "GameNeedsTick(uint256,address,uint256)", @@ -51401,6 +94131,9 @@ "59ae6e34": "placeImage(uint8,uint8,uint8,uint8,string,string,string)", "59aef196": "pauseCutoffTime()", "59af143d": "beBanker()", +"59aff6a3": "comissionDiv()", +"59b02eb3": "userPendingRewards(uint256,address)", +"59b07e7a": "removeTokenAddressFromArr(address)", "59b09b25": "makeCount()", "59b0a174": "transferLockUntil(address)", "59b0d931": "removeBlockList(address)", @@ -51408,34 +94141,55 @@ "59b119dc": "ComeCoin()", "59b11d6c": "setBetclose(bool)", "59b17b43": "getTellerBalance(address)", +"59b1bb82": "getUnderlyingTokenByFarmToken(address)", +"59b1e9b2": "getRisk(uint256,uint256)", "59b25720": "fillUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", "59b2da20": "Raffled(uint256,address,uint256)", +"59b32210": "team_ljh()", "59b350fb": "time_of_token_swap_start()", +"59b36936": "setDeveloper1Account(address)", "59b36e3e": "partnerSaleWei(address)", "59b373f2": "getExistsStatus(uint256)", +"59b38c22": "blockedPair(address)", +"59b4958a": "enableERC1155TokenReceiver(address)", "59b4993c": "userAddressCheck(bytes32)", "59b4ee89": "addVpf(bytes32,uint256,uint256,uint256,string,uint256,uint256[])", "59b51bd1": "approveCertification()", +"59b55c6e": "xemm()", "59b563b5": "addRobot(address)", "59b56a59": "HYIPToken(address,string,string,uint256,uint256)", "59b58dba": "createCloneToken(address,uint256,string,string)", +"59b5e75e": "privatePool()", +"59b60f0d": "setUniV2PairAddress(address)", "59b62658": "AddFishByToken(address,uint256)", "59b6a0c9": "maxCapacity()", "59b6f377": "transferFromContract(address,uint256,uint256)", "59b79610": "sendUnsoldTDETokensToPlatform()", +"59b8c599": "tradingState(address,address)", "59b8d74e": "ACasadiAmiciToken()", "59b910d6": "setStorageAddress(address)", +"59b912a4": "setAcoPoolImplementation(address)", +"59b92789": "getContractAddrByBEP2Symbol(bytes32)", "59b9510a": "isAddressAllowedInPresale(address)", "59b95f5a": "buyBlocks(uint8,uint8,uint8,uint8)", +"59b976ec": "IcoFinished(bool)", +"59b97eca": "joinForsage()", "59b9a192": "buildToken(uint192,uint192,uint160,uint32)", +"59ba0efd": "LogGameEnded(address,uint256,uint32,int256,uint8)", "59ba1dd5": "_fulfillPreapprovedPayment(address,address,uint256,address)", "59ba2628": "transferCampaignCreator(address)", "59ba59f1": "ETHFundDeposit()", +"59ba7608": "maxliquidationFee()", "59badbec": "CheckPhException(bytes32,uint32)", "59baef40": "setNewController(address)", +"59bb180e": "getPreviousTimestamp(bytes32,uint256)", "59bb6b5f": "TretanToken()", "59bb7867": "setTournamentEntranceFeeCut(uint256)", +"59bc2b30": "getPollInfo(address)", "59bc3d47": "Agreement()", +"59bca679": "setColFactorSyncBuffer(uint256)", +"59bcbd68": "historyNumbers(uint256,uint256)", +"59bdfbef": "pendingUdons(uint256,address)", "59be5e45": "getTotalSoldTokens()", "59be7e99": "getDonationAmount()", "59be9cc0": "devTokensHolder()", @@ -51444,49 +94198,83 @@ "59bf1abe": "getBlackListStatus(address)", "59bf5d39": "getReserve()", "59bf77df": "confirmationCount(bytes32)", +"59bfaf81": "tokenStaked_()", "59bfd388": "setupPeriodForSecondStep(uint256,uint256)", +"59c00d45": "vegetablePrice(uint256)", +"59c077d7": "setReserveMin(uint256)", +"59c1334b": "dailyAmount()", "59c13403": "FEE_MIN()", "59c140be": "insertBonus(uint8,uint256,uint256)", "59c14cf1": "mastery(address)", +"59c153be": "withdrawCollateral()", "59c19cee": "batchWithdraw(bytes32[])", +"59c1d2dd": "burnAmount(bytes32)", "59c21fd8": "initDepth()", "59c27917": "GenChipLevel_Extra(uint256,uint256,uint256)", "59c281da": "openFirstRound(uint256,bytes32)", +"59c29fd1": "getBlockStaked(address)", "59c2aad0": "unitsToSell()", "59c2af55": "StagedCrowdsale()", "59c2b584": "reserve_fund()", "59c2e1ef": "changeEthDefaultBackRate(uint8)", "59c2edee": "CrowdsaleContribution(address,uint256,uint256)", +"59c32e40": "get_secret()", "59c33f94": "PriceUpdate(uint256,address)", "59c39094": "withdrawDate()", +"59c3b989": "ZapEthForTokens(address,uint256,uint256,uint256)", "59c3f3e0": "setPoolContract(address)", "59c3f7f0": "createWallets(uint256)", +"59c42cc4": "etherlessTransferEnabled()", "59c42f75": "unreleasedCount()", "59c44539": "GotecoinToken()", "59c4e612": "icoSoftcap()", +"59c53662": "setChallengeAmountDivisor(uint256)", "59c55429": "refundBond(uint256)", +"59c5583d": "zapOut(uint256,uint256)", +"59c59789": "withdrawUSDTFromCurve(uint256)", "59c634b0": "getContributorAmount()", "59c656df": "allowRefunds()", +"59c6d24b": "expiryOf()", "59c77133": "createNewHodl(uint256)", "59c7a893": "participantsOf(uint32)", +"59c86a40": "setMinRewardRateRange(uint128,uint128,uint128)", "59c87d70": "request(bytes32)", "59c88347": "isEmitting()", "59c8969e": "withdraw(address,uint256,bytes32[],uint256[],bytes32[],uint256)", +"59c8bf00": "enableTerms(uint256)", "59c8bf9c": "OrpheusMarinaBangkok()", "59c8d647": "buy(bytes32,bytes32)", +"59c9176c": "updateBurnFee(uint16)", +"59c99ef5": "unlockDevFund()", "59c9e118": "buyAndTransfer(address,address,uint8)", +"59ca8774": "mintSetPrice(address,string,uint256)", "59cbf125": "GetETH(address,uint256)", +"59cc1364": "erc20BounsToken()", "59cc334a": "getItem(uint256,uint256)", +"59cc454a": "poolIsOpen()", "59cc721c": "BONUS_TIER1()", +"59cc8149": "OnDrawFinished(uint32,uint8[5])", +"59ccecc9": "allowedUserBalance()", +"59cd0938": "epUnit()", +"59cdff62": "pendingEthfund(uint256,address)", "59ce0a8f": "RuletkaIo()", "59ce0bb8": "_saveParams(uint256[])", "59ceb36f": "last_demurrageable_balance()", +"59cec3d6": "removeBurnOnBehalf(address)", +"59ceef76": "setBuyBackProfitReceiver(address)", +"59cf1564": "capfarm()", "59cf3173": "Reclaim(uint256)", "59cf901a": "preIcoTokensDistributed()", +"59cf9350": "getrewards()", "59cfaf6e": "gameWithdraw(uint256)", +"59d0f713": "uniswapV2Factory()", +"59d10c71": "_addKiboRewards(address,uint256)", +"59d19e9d": "__MappingToken_init_unchained(uint256,address)", +"59d1b1c2": "setEthmainAddress(address)", "59d1d43c": "text(bytes32,string)", "59d20b55": "committedValidators(uint256)", "59d213fe": "contributePreSale()", +"59d22f0e": "Purchased(address,uint256,string)", "59d27be8": "endEthGetToken()", "59d2af39": "testFooSend()", "59d313de": "MatchResetDeadline(uint256,uint256)", @@ -51495,31 +94283,63 @@ "59d3d57e": "totalUserLost()", "59d3d632": "verifierAllocation()", "59d3dad9": "miscNotLocked()", +"59d41a2a": "emergencyTokenWithdrawal(address,uint256)", "59d4447a": "MingToken()", +"59d45d3b": "setwethddt()", +"59d4bc64": "tknUnlocked()", +"59d4d188": "getNotarizedData(uint32)", +"59d523a2": "proven(address,bool)", "59d52e2b": "XmonetaSale()", "59d5335b": "refPercent()", "59d55194": "getPet(uint256)", +"59d56bfe": "ticketCardInfo(uint256)", +"59d56ef0": "mscale()", +"59d58bcd": "nextThreshold()", "59d5d02a": "transferFee(address,address,uint256)", +"59d5d07a": "lq_share_bonus(uint256)", "59d5dc11": "PhardusNetwork()", +"59d62894": "gh(uint256[])", "59d667a5": "bid(address,uint256)", +"59d684cf": "addAggregator(bytes32)", "59d6b35b": "lastProof()", +"59d6b78a": "isDebtCeilingReached(address,uint256,uint256,string)", +"59d6dd9d": "alpa()", +"59d7c819": "khmAddress()", "59d7d46f": "doInvest(address,uint256,address)", +"59d7e845": "setAiVault(address,address)", "59d89175": "setSellCommissionBps(uint256)", +"59d8b2bc": "nomes(uint256)", "59d90c19": "addLockedAmount(uint256)", "59d96db5": "terminate(uint256,string)", +"59d97925": "approve_285(address,uint256)", +"59d99805": "maxUniswapDisagreement()", "59d998e4": "transferHashOwnership(uint256,address)", "59d9b2b7": "getTokenOwnership()", +"59da552f": "setSwap(address,bool)", +"59daa684": "approve_118(address,uint256)", "59dac714": "hashTo256(bytes)", +"59daf8b2": "BuyerFunded(address,uint8,uint8)", "59db5bac": "VisitCount()", +"59db80f8": "withdrawUSDT(address)", +"59db93bc": "VersionUpdated(uint256)", "59db9eb0": "deallocate(address,uint256)", +"59dc2eec": "rabbits(uint256)", "59dc6d5c": "setDollarBalance(address,int160)", "59dc735c": "getClient()", +"59dc826c": "canProduceBlock(uint256,address,uint256)", +"59dcadcf": "offChainFilledTrades(string,string,uint256,uint256,uint256,string,string,string,address,address)", +"59dcf522": "balanceOfStored(address)", +"59dd3313": "activeSubAccount(address,uint256)", "59dd35da": "ICOPrice()", "59dd7ad4": "batchTransferFroms(address,address[],uint256[])", "59dd8f34": "NRB_Tokens()", +"59dda57c": "hasStream(address)", +"59de7a5c": "voteinCompany(address,uint256,bool)", +"59ded940": "_fluxCapacitor()", "59dfdec8": "totalPlayCount()", "59e026f7": "internalTransfer(address,address,uint256)", "59e02dd7": "peek()", +"59e05685": "Image_root()", "59e05c5f": "delay_pool_drain_block(uint256)", "59e08fe1": "isSaleOver()", "59e09fec": "getLockedAmount_dakehus(address)", @@ -51527,23 +94347,39 @@ "59e0cf23": "setOraclize(address)", "59e148fc": "getLastOfferId()", "59e1667d": "testControlCreateWithForeignParentNotInUse()", +"59e1c40c": "ROLE_ADD_CANDIDATES()", "59e20f69": "addJobInvitation(uint256,address,string)", "59e239af": "donateAsset(address)", "59e23ccf": "computeBlockPrice(uint256,uint256,uint256)", +"59e26be1": "addWitness(address)", "59e2d30e": "testThrowBlobStoreNotRegistered()", "59e30226": "getTradeOfferSenderItems(uint256)", "59e33e35": "indexdate()", "59e3e1ea": "testDivAdd(uint256,uint256,uint256,uint256)", "59e415d3": "crowdETHTotal()", "59e4c4ca": "createLover(string,string,string)", +"59e4d967": "getVAIMintRate()", "59e4eec9": "startMarket(uint32,uint256)", +"59e51d2e": "costStake(uint256,uint256,string)", "59e529cc": "extra_bonus()", "59e54095": "getRefundValue()", "59e541af": "getTokenInfoMaxPerBlockImbalanceList()", "59e5d4b5": "hicsToken()", +"59e5f05c": "everydayIncome()", +"59e5f43a": "mintAndAttemptSwap(address,uint256,uint256,uint256)", +"59e61ef8": "votesForProposalByAddress(address,uint256)", +"59e64d1e": "bondAddress()", "59e6800c": "depositToken(address,uint8,uint256)", +"59e6b60a": "BurnTransferred(address,address)", +"59e6f7d6": "Iskanje_Knjige(string)", +"59e741d2": "RATIO()", +"59e764ad": "approve_842(address,uint256)", "59e777f6": "newHeir(address,uint256)", +"59e798dd": "TokenActivated()", +"59e82fbc": "TestMyToken()", +"59e859e2": "proxyRegistryAddrMD()", "59e86488": "hasteamadjacency(uint16,uint16)", +"59e90ce4": "trade(address,uint256,address,uint256,bytes32[],bytes)", "59e94862": "getEthToTokenOutputPrice(uint256)", "59e994ca": "endTimeOfBids()", "59e99db2": "_mint(bytes32,uint256,bytes32,address)", @@ -51551,185 +94387,342 @@ "59ea2647": "yearTwoMultiplier()", "59ea287d": "pre()", "59ea6d80": "setNegativeArray(int256,int256)", +"59eaa095": "decreaseTokenSupply(uint256)", +"59eab7b7": "getElysiaAddress()", "59eb8224": "trancheCount()", +"59eba454": "approve(address,address,address,uint256)", "59ebb321": "isManagementProxy(uint32,int256,address)", "59ebbe35": "cancelFinishMintingRequest()", "59ebeb90": "Open()", +"59ec0a8b": "checkRegThis()", "59ec29fe": "successICO()", +"59ec2a9d": "distributeDEFI(address,uint256)", +"59ec4e46": "actionsBook(address)", +"59ec5cf1": "getLastTokenLevelForUser(address,address,address)", "59eca3e2": "manipulateSecret()", +"59ecc691": "LogStartPreIcoStage(uint256)", +"59ed55e1": "pendingOperation(uint256)", +"59ed6005": "addExchangeFee(uint256)", +"59eddca2": "API_BindEx(address,address,bytes6)", "59eddf34": "getSchool(uint256,address)", +"59ee1a45": "triggerLimitUpdate(uint256,bool)", "59eecbf9": "assert1(bool)", +"59eed7d9": "fulfillExternalRequest(address,bytes4,bytes)", "59eee5c7": "hosting(uint256)", +"59ef01fe": "FrozenFunds(address,bool,bool)", +"59ef06c3": "f(int256[])", +"59ef3950": "Hash(address)", +"59ef67c9": "BurnRate()", "59efcb15": "execute(uint256,bytes)", "59f02c4d": "getOraclizePolicyId(bytes32)", +"59f07f48": "setrats(uint256)", "59f121a8": "setCreator()", "59f1286d": "queryCredit(address)", +"59f1707d": "_setDevFee(uint256)", +"59f1bbc5": "checkElection(uint64)", +"59f231a3": "addSkipTokenOut(address)", +"59f2ea07": "getUserPoolRate(address,uint256,uint256)", +"59f3f645": "distroy()", +"59f4075f": "event_senderAddress(address)", +"59f46652": "get_product_component_by_index(uint256,uint256)", "59f47523": "newUserBonusCardTradable()", +"59f4a844": "transferAnyUSDT(uint256,address)", "59f4bbd2": "indexPaidAffiliate()", "59f568b9": "setDefaultNumberJuror(uint16)", +"59f5a164": "transferContractOwnership(address,address)", "59f5e0ce": "purchase(string)", "59f61c74": "nextKey(uint256)", "59f62cdc": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256)", "59f69ab6": "enforceWhitelist(bool)", +"59f6ecce": "approve_327(address,uint256)", +"59f723b7": "__sushiswapRouterV2()", "59f769a9": "activeBalanceOf(address)", "59f8714b": "changeableTokenCount()", +"59f8fecb": "unzapToTokens()", "59f96737": "convertMetToEth(uint256,uint256,int256)", "59f96ae5": "postSellOrder(address,address,uint256,uint256)", "59f974ce": "checkFundingGoalReached()", +"59f98880": "set_contract_address(address)", "59f9a58f": "_vouchersInSharedPool(uint16)", +"59f9e1d5": "changeexecuteProposalPeriod(uint256)", "59f9edd0": "sultantoken()", "59fa0663": "setWhitelistOut(address,bool)", +"59fa21a7": "usersActiveX4Levels(address,uint8)", "59fa34df": "findCurrentIndex(address)", "59faf062": "bidPrice(bytes32)", "59fb34bd": "_createRide(string,bytes7,address,uint256)", +"59fbfd48": "emergencyWithdraw2(uint256)", "59fc2ba4": "DRONEXTOKEN()", +"59fcc13e": "joinSwapExternAmountIn(address,address,uint256,uint256)", +"59fd30c0": "setMVDFunctionalitiesManagerAddress(address)", "59fd510a": "extraBalanceNeeded(uint256)", "59fd95ae": "BTCCToken()", +"59fdd80e": "YieldMasterMaxSupply()", "59fde1e0": "distributeRevenue(uint256)", "59fe2720": "updatePollDescription(uint256,bytes,uint8)", "59fe7279": "ADMINISTRATOR()", +"59ff2acd": "jpBalance()", "59ff5b55": "getMagicNumber()", "59ff6473": "redistributeFees(uint256)", +"59ff6a79": "pubper()", +"59ffd5a0": "setGasRateLimitEpochStart(uint256)", "5a0024ae": "VerifyCheque(string,string)", +"5a00600c": "getAllOwnerOf()", "5a0089d3": "getChildContractAddress(uint8)", +"5a011326": "CommunityBallot(bytes32,uint256)", "5a012b17": "landsSold()", "5a0178af": "update(uint256,uint256,bytes32)", "5a018e01": "RESERVES_STAKE()", +"5a02c6b7": "nutsProfitPerShare()", "5a02dcde": "budgetWallet()", "5a02ec19": "depositVault(uint256)", "5a0391f2": "BuyForEtherTransaction(address,uint256,uint256,uint256,uint256)", +"5a04216e": "enterMine(uint256)", "5a044e91": "get_difficulty_list()", +"5a04783d": "AddToVestMap(address)", +"5a0485b2": "uniswapPrice(address,address,string,uint256)", +"5a049a70": "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)", "5a04ce5b": "setMinBalance(uint32)", +"5a04d456": "pushOutcome(bytes32,uint48,uint48,bytes32,address,bytes)", "5a051c47": "_purchaseLoopFifo(uint256,uint256)", "5a052dff": "buyPixel(address,uint16,uint24,string)", "5a055a33": "Enterprise()", "5a059a44": "composeJingle(address,uint256[5],uint256[5],string,string)", +"5a05ae50": "setCardPaymentToken(uint256,address)", "5a05fff0": "bountyRewards(address)", "5a061a7a": "TradexOne(address,address)", "5a0646e2": "InitAssignCTC()", +"5a06c3b8": "approve_55(address,uint256)", "5a06f1e3": "TMEXAddressSet()", "5a071517": "existPublicKey(address)", "5a0718d0": "ICOadvisor1()", +"5a074cea": "treasurePercent()", "5a0753ac": "devFeeBalance()", +"5a0763b8": "bproxBProPrice(bytes32)", +"5a0785f5": "AllocateSalesTokens(address,uint256)", "5a079207": "Hydro()", +"5a083f01": "getInterestSetter()", "5a083f54": "transferFromCheck(address,address,uint256)", +"5a09a413": "adminWithdraw(uint256,address)", "5a09f2f4": "setHouseFee(uint256)", +"5a09f64b": "Divided(uint256,uint256,uint256,uint256,uint256,uint256)", +"5a0a6618": "newConverter(uint16,string,string,uint8,uint32,address[],uint32[])", "5a0ae8d5": "emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", +"5a0b2213": "setGetterRegistry(address)", +"5a0b27e5": "getSalesPrice(uint256)", "5a0b7663": "getMaxResponseStates(uint256)", +"5a0c9f66": "SetPOZBenefitAddress(address)", +"5a0ca283": "ownerToNumIncubations(address,uint8)", "5a0ce676": "setParams(uint256,uint256,uint256)", +"5a0d11d7": "openDeposit(address,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"5a0d31f7": "migrateCDaiToDDai()", "5a0d9627": "updatePlayerMask(uint256,uint256,uint256,uint256,uint256)", +"5a0d9fac": "setDmmController(address)", "5a0db89e": "test_mul(uint256,uint256)", +"5a0eac04": "mcdDai()", "5a0ebf94": "TokensReceived(address,uint256)", "5a0f385a": "reverseTransfer(address,uint256)", "5a0f3c40": "_foundationSupply()", +"5a0f83e6": "pendingMoonGain(uint256,address)", +"5a0fc79c": "seigniorageSaved()", "5a1024d5": "setSinistre(uint256)", "5a10d868": "Diyflex()", "5a119ef2": "addIcoAddress(address)", +"5a122041": "createAuction(address,uint256,uint256,uint256,address,uint256,uint256,address,uint256)", "5a1230bf": "computeCallKey(address,address,bytes4,bytes32,uint256,uint8,uint256)", "5a129164": "vestingBeneficiary()", "5a129e97": "byte32ToString(bytes1[32])", +"5a129efe": "isSpent(uint256)", "5a12b581": "GetUser(string)", "5a13340f": "GetApplicant(bytes32)", +"5a1383a2": "setnextRelayPool(address)", +"5a138b70": "updateGrainContract(uint256,string,string,uint8,address)", +"5a13a0a3": "setTingsPerDay(uint256,uint256)", +"5a13eac1": "executeOperation2()", "5a140df0": "_remove(uint256)", "5a142887": "grantAccessDeposit(address)", "5a149f08": "finalizeNextUpgrade()", +"5a14ba3e": "keepMphMax()", +"5a1500e5": "changeRewardPeriod(uint256,uint256)", "5a15656c": "developerCommissionFee(uint256)", +"5a15adae": "freeMintFrozenBalances(address)", "5a15c373": "transferByOwner(address,address,uint256)", +"5a161ba5": "antiSpamFees(bytes32)", +"5a1779ec": "queryStakeInfo()", "5a17877a": "LCDToken(address,address,address,address,address,address)", "5a17aa41": "getContentTip(bytes32,address)", "5a181478": "setPayoutCumulativeInterval(uint256)", "5a182b8b": "SellLoan(uint256,uint256)", +"5a184938": "divideUpWinnings(address,address,uint256,uint256)", +"5a18664c": "withdrawNativeToken()", "5a186c77": "init(address,uint256,uint256,uint256,uint256[],uint256,uint256,uint8)", "5a18ae3d": "apply(string)", "5a18f9ff": "isFundingNeeded(address,address)", +"5a191a07": "updateProbabilitiesRare(uint256[])", "5a1a1b67": "zTransferWinningBets()", +"5a1a23e4": "validLockingAmountToPeriod(uint256)", +"5a1a4633": "swapFromRewardAdel(uint256,uint256,bytes32[])", +"5a1a66af": "registerAssetProxy(address,bool)", +"5a1a7c30": "extendTraitArt(uint256,string)", "5a1a8593": "bidBatch(uint256[],address)", +"5a1acde1": "se(uint256)", +"5a1ad29d": "changeEthToUsd(uint256)", "5a1b0c0b": "LogBidCanceled(uint256)", +"5a1b155b": "contributorEthCollected(address)", "5a1b472c": "getmykeyid(address)", +"5a1b65ae": "collectRewards(uint256[])", "5a1b96a2": "FiduxaCoinCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"5a1bcca6": "bets60(uint256)", "5a1bdaa1": "deusETH()", +"5a1cb2cd": "pool4activeUserID()", "5a1cc358": "getChannelRank(address,uint256)", +"5a1cf178": "isTeamOneMember(address)", +"5a1d249d": "calculate(uint256,address)", +"5a1d7477": "getSave(address,uint256,address[],uint256[])", +"5a1db8c4": "addModule(address,address)", "5a1e0a46": "cancelVote(uint8)", "5a1e6ca1": "endRound(uint256)", "5a1e6fc6": "setEmployeeAddress(uint256,address,address)", "5a1e921b": "isTradeSupported(address,address,uint256)", "5a1e9c79": "ProofOfKennyCoin()", "5a1f3c28": "getCollection(uint256)", +"5a1f7406": "organizations(address)", "5a1f892c": "addPresaleContributors(address[])", +"5a1fa503": "setGuardianFunds(address,address)", "5a2056ba": "rejectPayments()", +"5a20b7b0": "doSomrthing()", +"5a20c2d4": "update_whitelist(address,bool)", +"5a2105ac": "calc_token_amount_deposit(uint256)", "5a212e99": "stringandbytes(bytes)", +"5a217551": "setWhitelistedRecipient(address,bool)", +"5a2206ac": "isPreResponsePossible(bytes32,uint256)", "5a22d81a": "buyCEO()", "5a236389": "getFileLoc(uint256)", "5a237491": "nextWithdrawDayTeam()", "5a23932b": "cryptaurus()", +"5a23be5b": "test_DSProxyDepositETH()", +"5a242349": "mycantime(address,uint256)", "5a2450c3": "EventHub(address)", "5a24c6a9": "chart_call()", +"5a250066": "onNewRound(uint256,uint32,uint32,uint32,uint32[4],uint32[4],uint32[4],uint32[4],uint256,uint256,address)", +"5a267064": "VendorUpdated(address,string)", +"5a26734c": "tokenQuantityWithId(uint256)", "5a272403": "SetAdmin(address)", +"5a273b79": "TaxTokenContract()", +"5a274684": "DFLbalanceOf()", "5a275879": "toHex(address)", "5a2791ed": "block24h()", +"5a27e746": "wipeFreeGemAndShut(uint256,address)", +"5a2804ad": "regAndComInvestOf(address)", +"5a283370": "TextChanged(uint256,string)", "5a28340a": "accessOperatingBudget(uint256)", +"5a292f08": "getInterestRewardUpdated()", "5a297cae": "claimApis(address)", "5a29ee7b": "sendRemaningBalanceToOwner(address)", "5a2a3039": "setTopWinnerPrizes()", "5a2a4452": "_addRole(address,string)", "5a2a553f": "isCollateralWithinMargin(uint256,uint256,uint32)", +"5a2a6fb9": "withdrawBidForGlyph(uint256)", "5a2a75a9": "getTranscoderPoolMaxSize()", "5a2b043c": "updateNextRound()", "5a2b31d9": "B24Token()", "5a2b488e": "calculateRefundedEth(uint256,uint256)", +"5a2bc22d": "chunks(uint256)", "5a2bcc18": "mintAmount()", +"5a2bef74": "init(uint8,address,address,string,string,uint8,uint256,uint32)", "5a2bf25a": "setAddressValue(bytes32,address)", "5a2c0f78": "mintMarketMakerApproval(address,address,uint256)", +"5a2c9009": "initContracts(address)", +"5a2cd226": "getIssuanceNumber()", +"5a2d012b": "transferAdrr()", "5a2de12f": "ChipTreasury()", "5a2e311b": "capDefault()", "5a2e4a11": "raisedWithdrawal()", +"5a2e62ad": "BONUS_MULTIPLIER_8()", "5a2e73a2": "usd2Foken(uint256)", "5a2ee019": "m()", +"5a2f0085": "assignTrustee(address)", +"5a2f3d09": "poolInfo()", "5a2f71d4": "setEquipmentTrainingFeeMultiplier(uint256)", +"5a2fdc8a": "FinishGame()", "5a2fe63a": "isInMainSale()", +"5a307e0b": "rescission()", "5a30b194": "__address0__()", "5a317cb3": "SHA256HashRegister()", +"5a319df9": "latestStateId()", "5a31ab2f": "PresaleClosed(bool)", "5a325fb3": "_setPlatformFeeRate(uint128)", +"5a32a262": "setBtnRewards(uint8)", "5a32d070": "trickleDownBonusesReleased()", "5a3320ff": "isCrowdsaleOpen()", +"5a335c59": "bulkDeposit(address[],uint256[])", "5a338506": "airdropToAddresses(address[],uint256)", "5a34508b": "delistAddress(address)", +"5a34928e": "harvestReward()", "5a34ced1": "disableFundingWallets(address,address)", "5a353193": "KrakenPriceTicker()", "5a353f98": "T20coin()", "5a354e04": "ProxyUser(address)", "5a35eb7c": "isWinSlot(uint256,uint256)", +"5a35f834": "votingQuorum()", "5a36c394": "executeOrder(uint256,address,address,uint256,uint256,uint256,uint256)", "5a36e0da": "getProjectCreator(uint256)", "5a36f4f3": "setMintableProperty(uint256,bytes32,bytes32)", +"5a378375": "_nonceTaken(uint256)", "5a37ae58": "Show_the_name_of_Option_A()", +"5a385ac0": "calcCumulativeCost(uint256[])", +"5a38719b": "samplePure(uint256)", +"5a3874ac": "stableSwap3Pool()", "5a388a43": "MVM()", "5a390a5f": "breedingMarket()", +"5a392d2e": "add(string,uint16,uint16,bool,uint16,bytes32[],uint256[],uint256[])", "5a3a05bd": "subRegistrar(bytes32)", "5a3a6ef8": "TXL()", +"5a3b09e2": "setVerifierShard(address,uint256)", +"5a3b74b9": "setUserUseReserveAsCollateral(address,bool)", "5a3b7e42": "standard()", +"5a3b9073": "szoToken()", +"5a3bda85": "usdcEthPrice0CumulativeLast()", "5a3c0287": "claimTokensFromTokenAiNetworkToken(address)", +"5a3c3bc5": "setMaxTriggerTotal(uint256)", "5a3c8826": "dynamicCeiling()", +"5a3c9476": "getApplicantsLength(bytes32,uint256)", +"5a3d5493": "price1CumulativeLast()", +"5a3d588e": "callRetryDeposit(uint256)", "5a3dd13f": "getScoreTotal()", +"5a3dfb89": "unfreezingWallet(address)", "5a3e251f": "halvingPeriod()", +"5a3e66ef": "ProxyOwnershipTransferred(address,address)", +"5a3f04f8": "createReward(string,string,string,address,uint256)", "5a3f2672": "tokensOf(address)", "5a3f88f0": "changeGeneration(uint40,uint16)", +"5a3f8939": "EtherBoxPublished(address,bytes32,address,bytes32,uint256)", +"5a3fd60d": "OracleBoughtFor(address,address,address,uint256,bytes,address)", +"5a402061": "getRestoreJobState(uint256)", "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)", +"5a41ae40": "GetContributionsCount()", +"5a41c855": "imgHash()", +"5a41d3ec": "addProtocolAdapters(bytes32,address[],address[][])", "5a41d508": "setFlightPrice(uint256)", +"5a41f67d": "clearCommitsReveals(address,uint256,uint256)", "5a42e85f": "SICX()", "5a4362e5": "closeDown()", +"5a43dc00": "createProposal(uint256)", "5a43fa90": "getTokenProposalDetails(uint256)", "5a4426bc": "proposeLOC(string,address,uint256,string,uint256)", "5a444139": "canBurnWhiteList()", "5a446215": "setNameAndSymbol(string,string)", +"5a4463a8": "create(uint256,string,string)", +"5a44a767": "isChallenged(uint256,uint256)", "5a4528c2": "distributionContract()", "5a4537b0": "TransferableMultsig(uint256,address[])", +"5a453d40": "updateAffinity(uint256)", +"5a466bf7": "assetReserve()", "5a46bb2b": "initChain(bytes,uint32)", "5a46d3b5": "lockOf(address)", "5a46f06c": "BANCOR_CONVERTER_FACTORY()", @@ -51738,191 +94731,359 @@ "5a476e5a": "buyOrderBalances(bytes32)", "5a481a7e": "ARBITRAGEToken(address)", "5a4877c0": "timeLockedBeneficiariesDisbursedTo()", +"5a48b46b": "getOperatorID(address)", +"5a48c0b0": "checkpoints()", "5a4a04a7": "OWNER_CLAWBACK_DATE()", +"5a4ab063": "cancel_present(uint256)", +"5a4adb68": "handleDelegationRemoving(uint256,uint256)", "5a4bffb8": "tokenPurchaseAmount(address)", +"5a4c03a6": "NewVoting(uint256,uint256)", "5a4c07a0": "fillBlank()", "5a4c822d": "setAdminPercent(uint256,uint256)", +"5a4ca740": "whitelistAddress(address,bool,bool)", "5a4cc5da": "Dunhil()", +"5a4d8e54": "setBidInterval(uint256)", "5a4d8e59": "getBAU2Length(bytes32,address)", "5a4ded51": "tokenBuyCalc(uint256)", +"5a4e0907": "FoundationTokenTransfer(address,uint256)", "5a4e69f0": "KyberContirbutorWhitelistOptimized()", +"5a4e9289": "funcAmount(address,uint256)", +"5a4ea53f": "burnOrder(string,uint256)", +"5a4ec0ca": "addPool(address,uint256,uint256,uint256)", +"5a4f2a06": "issueNewProducts(address,uint128[],bytes32[])", "5a4fc9c5": "lookup(int256)", +"5a4ff679": "emptyBalance()", "5a500066": "WSXToken()", "5a5132be": "ambix()", "5a51d1df": "sendReward(uint256[])", +"5a51da4e": "reStakePoolProfit(uint256)", +"5a51fd43": "isFeatureAuthorised(address,address)", +"5a520004": "TheLastSamuraiBorn(uint256,bytes32,uint256)", "5a520f8b": "buyDragon(uint256,uint256,bool)", "5a525491": "safeIndexOfTaskId(uint256)", "5a527afb": "testFooApprove(uint256)", "5a52da30": "didVoteForName(address,string)", "5a52ecf6": "getSignedConfiguration()", +"5a5309e6": "isTokenSwapAllowed(uint256)", "5a531015": "getLotteryAtIndex(uint256)", +"5a536cc7": "lend(address,address,uint256,address,uint256,bytes32,bytes,bytes,bytes)", "5a5383ac": "canExitPool()", "5a53fe20": "multiApprove(uint256[])", "5a543683": "BuyerLotteryTimes(address)", +"5a549158": "time_sum(uint256)", "5a54cd46": "proceedEtherDeals(uint256)", "5a54e755": "hashMachine()", "5a55c1f0": "getVote(uint256)", "5a5638dc": "policyTokenBalanceFromEther()", +"5a565085": "maximumTimeToPivot()", "5a56a31c": "FeeApplied(string,address,uint256)", +"5a570c0c": "maxTokenID()", "5a57a901": "VIPSToken()", "5a5804b3": "getAllocation(uint256)", +"5a582260": "failedTransferCredits(address)", "5a589fc9": "authUser(string)", "5a58cd4c": "deleteContract()", +"5a58fc78": "firstSellFee()", +"5a58fe4b": "TOKEN_FACTORY()", "5a591a4e": "promotionDataRecord(address,uint256)", "5a592380": "vestingPlans(uint256)", "5a593a6e": "totalreleaseblances()", "5a596aa4": "CheckBalance(address,address)", +"5a596d1c": "minReserveRatio()", +"5a59f630": "getBeneficiaryAddressAtIndex(uint256)", +"5a5a3cb8": "LogTradingEnabled(uint256)", "5a5a433b": "checkHash(uint256,uint256,uint256)", +"5a5ad601": "removeSwap(uint256)", +"5a5b2a0a": "Jackpot(address,uint256,uint16)", "5a5b32b7": "_setHatValue10(uint256)", +"5a5b6e9f": "proofInfo(address,uint256)", +"5a5b8b97": "Grafico(uint256,uint256,uint256)", "5a5c8068": "oraclize_setNetworkAuto()", +"5a5c9b23": "unlockAddressForWithdrawal(address)", +"5a5cd45e": "estimatedAPR()", +"5a5cd6eb": "getMinimumTimeForNextExecution(address)", "5a5d096c": "isOwner(uint256,address)", "5a5d3350": "KKToken()", +"5a5d8a47": "IYPtoken()", "5a5ddcf6": "startStopICO(bool)", "5a5e0024": "SecondEtherLimit()", "5a5e0074": "etherForOwner()", "5a5e861e": "currentPayment()", "5a5ebebf": "withdrawRent(address)", "5a5ec54a": "neglectOwner()", +"5a5f14c8": "updateAddressCache(address)", +"5a5fc341": "getAgree()", +"5a5fe81e": "AssetPackCreated(uint256,address)", +"5a604c52": "RATE_DECIMALS()", "5a609b96": "investorsIter()", +"5a61549b": "testCopyRead()", +"5a6196d7": "preTotalTokens(address)", "5a61c40a": "setwithtoken(address)", "5a625393": "ValueTokenBase(uint256,string,string,uint8)", "5a628525": "reveal(address,bytes32)", "5a628e17": "getWishIdxAt(address,uint256)", +"5a62fccb": "amountToPlay()", +"5a630d7a": "setFee(uint64)", +"5a632c28": "totalRewardPaid()", +"5a63561c": "changeInterest(uint256)", "5a63cba0": "checkSaleLimit(uint256)", +"5a63fbc9": "ContractOwner()", "5a63feb8": "__targetExchangeAndSpendCallback(address,uint256)", +"5a640d14": "issueCards(uint256,uint256,uint256)", +"5a64306b": "GetUserCIN()", "5a648bc5": "WithdrawAll()", "5a64ad95": "mintingFee()", "5a64b786": "deposit_dividends()", "5a650f45": "numBountyCredits()", +"5a6518e0": "setSwapAddressv2(address)", "5a6535fc": "call(bytes)", +"5a6563c9": "aTesla()", "5a657452": "COD()", "5a658f6b": "directorNode()", +"5a65d4c9": "shouldUseInternalInventory(address,uint256,address,uint256,uint256,uint256)", "5a65f004": "isSynthesizeAllowed()", "5a67a20d": "endingPrice()", "5a67f389": "timeGone(uint256)", +"5a680367": "cancelLoanRequest(uint256)", "5a6814ec": "thisisfine()", "5a686699": "post(uint128,uint32,address)", +"5a688ffa": "IndexToApproved(uint256)", +"5a68c154": "maxTotalStaked()", +"5a68dce2": "StakingInterval(uint256,uint256)", "5a69fe0e": "TokenERC20(address)", "5a6ad1e1": "multivestBuy(address,uint8,bytes32,bytes32)", "5a6af33b": "subtrBalance(address,uint256)", "5a6b26ba": "withdrawal(address,uint256)", +"5a6b315f": "setup(string,string,address,address)", "5a6b3a79": "assignBounty(address,uint256)", +"5a6c4158": "initAccount(address)", "5a6c6408": "updatePolicy(bytes32,address,uint32,uint32,uint256,uint256,bool)", +"5a6c72d0": "defaultFee()", "5a6c787e": "updateWithMPO()", +"5a6ca75b": "getTotalBNB()", "5a6cd237": "latestTokenBalance()", "5a6d663c": "notifyTransfer(address,address,uint256)", "5a6dad3c": "setFreelancerParams(uint256,uint256)", +"5a6e0fc7": "porscheTickets(uint256)", +"5a6e834b": "f(uint16,uint16)", "5a6e8980": "editusetaddress(uint256,string)", "5a6f7aef": "tweakUpgrading()", +"5a6f93c9": "investUSDT(address,uint256)", +"5a702d5c": "GetBalanceArrCount()", "5a703223": "GetToken(address,uint256)", "5a70686a": "mintChip(bytes32)", +"5a708bd8": "updateTaxInfo(address,uint256)", +"5a70ad28": "FEE_RATE_DENOMINATOR()", +"5a70b387": "dev(address,uint256,uint256)", "5a70fe72": "GetInvestedAmount()", "5a71be21": "ethEur()", +"5a71e6d3": "getCurrentKnowledgeOfOwner(address)", +"5a72bbef": "rescueFundsFromStakingPool(address,address,uint256)", +"5a730d8d": "setsharePayout(uint256)", "5a732dd5": "CCPayoutArb()", +"5a73b0bf": "withdraw(string,address,uint256)", +"5a7432d2": "dinterest()", "5a74a715": "setWeiForMcr(uint256)", "5a74dee5": "multiAccessRemoveOwnerD(address,address)", "5a7511d0": "put(uint256,string)", "5a753c6e": "getWarlordDistributedRandom(uint256)", "5a75aa1c": "ChangeRate(uint256)", "5a75b8d5": "currentHodlerId()", +"5a75bdf8": "getSignatureLength()", "5a764631": "setSkillName(uint256,bytes32)", +"5a76531d": "setFee(uint192)", "5a766620": "neglectGuess(int256)", +"5a76665c": "tokenHolders(uint256,address)", "5a768e4a": "ECONOMY_BOOST_TRADE()", "5a769366": "sadf(address)", "5a76e73e": "getNoOfTokens(uint256,uint256)", "5a778cf9": "batchPresale(address[],uint256[])", +"5a77eeea": "servicePoolWeights(address,uint256)", "5a78897b": "setFunctionSixPrice(uint256)", +"5a78be2f": "closeAllMoneypot()", +"5a79a5b1": "swapExactBNBForTokens(uint256,address[],address)", +"5a79c371": "finishWithdrawForGovernance()", "5a7a4c1e": "_applyPct(uint256,uint256)", "5a7a8850": "rollWithSeed(bytes32)", "5a7adf7f": "preSale()", +"5a7afbce": "yfrb()", "5a7b4097": "fundBalanceOf(address,address)", "5a7b57f2": "MadoffCoin()", +"5a7c6be2": "openseaEnabled()", +"5a7c896e": "MeltDone(uint256,uint256)", "5a7cb38f": "tokenTransferAddress()", +"5a7da281": "buyShitcoin(address,uint256,uint256,string)", "5a7da6b5": "burnUpdateTokenFrom(address,uint256)", "5a7db533": "getRef(address)", +"5a7dbd48": "assignedSantas(uint256)", +"5a7deb1f": "claimAirdrop(uint256[])", +"5a7e0c3b": "GetDoi()", +"5a7e1083": "transferBonds(bytes32)", +"5a7e1098": "footballerToApproved(uint256)", +"5a7e1b67": "cd_pool_balance()", +"5a7e381b": "getETHConverter()", +"5a7f3cb6": "startChangeGovernance(address)", "5a803611": "addDealerForSender(string)", "5a81018a": "getClientCount()", "5a811766": "replaceAdmin(address,address)", +"5a813929": "DISTRIBUTOR_IMPL()", "5a813fd5": "test_insert_findWithHintPrevAtPosition(int256)", "5a8194d2": "getVersionIndex(bytes32,bytes32,bytes32)", "5a81b5b9": "collectMegaJackpot(uint256)", +"5a81b8ec": "stakedHero(uint256)", +"5a81c346": "depositPynths(uint256)", +"5a81d05c": "CuraAnnonae()", "5a825cbb": "getPayment(uint256,uint256)", +"5a8342d8": "gradualUpdate()", +"5a837efd": "swap(address,uint256,address,address)", +"5a83e1e4": "swmNeeded(address,uint256)", +"5a851232": "referralsCountt(address,uint256)", "5a851ffb": "calculateDiceWinner(bytes32,bytes32,uint256)", "5a857565": "buyTokensInternal(address,uint256)", +"5a857e58": "initialize(address,bytes32,uint256,uint256,uint256,uint256,address,address)", +"5a859d86": "SetReservingStep(uint256)", +"5a85aeea": "referal_withdraw(uint256)", "5a85d2fa": "playerSignUp(address)", +"5a860bab": "updateAnyoneCallable(bool)", +"5a860c87": "getTokenLimit(address)", "5a861838": "addHpbNodeBatch(address[],bytes32[],bytes32[])", +"5a862dcc": "withdrawWeth()", +"5a864e1c": "onCryptoAlpacaEnergyChanged(uint256,uint256,uint256)", "5a8654ad": "End6()", "5a86c914": "getRateIcoWithBonusByDate(uint256)", "5a87053e": "privateBonus()", +"5a876854": "DiscountPercentagesChanged(uint8,uint8,uint8,uint8)", +"5a8776be": "virtTokenHolders__isHolder(address)", "5a87c380": "getRewardListLength()", +"5a87e943": "poolFarmId()", "5a8830e2": "partial_refund_my_ether()", +"5a885806": "PepeNamed(uint256)", +"5a88a32f": "ppp()", "5a88b15f": "Halo3DShrimpFarmer(address)", +"5a88e19c": "transferToDevFund()", +"5a8907a9": "getContractParties(bytes32)", +"5a890c0e": "isPToken()", +"5a89a4d8": "provideCoverage(address,address,uint48,uint256,address)", "5a89b376": "contractDecimalsUpdate(uint256,bool)", +"5a89eee0": "rctFund()", +"5a8a8e44": "uintMinA()", +"5a8aa1a1": "onOpenNewRound(uint256,uint256,uint256,uint256,uint256,uint256)", "5a8ac02d": "second()", "5a8b1a9f": "upgradeTo(string,address)", "5a8b55e2": "IsWildCardCreatedForCategory(string)", "5a8bbba9": "createNewSecret(string,bytes32,bool)", "5a8bbee1": "Group_4()", +"5a8bfbed": "calcCurrentPayoutT1(address,address,uint256)", "5a8cadb1": "migrateAll(address)", "5a8cf571": "changeControlWallet(address)", "5a8d580e": "forceNSFW(uint256)", "5a8d6cea": "transferUnsoldIcoTokens()", +"5a8dbdb5": "totalFstSoldValue()", "5a8dd79f": "getDesignatedCaller(address,uint256)", +"5a8e1ca9": "ballotTypes(address)", +"5a8e77a5": "withdrawBounty(uint256)", "5a8e9d66": "settle(address,uint32)", "5a8ef28a": "GBP(uint256)", +"5a8ef49d": "updateBoosterURI(uint256,string)", +"5a8f7dca": "setCurrentPool(address)", +"5a9003fe": "purchaseCoupons(uint256,uint256)", +"5a903303": "UserData(address,address)", "5a90a49e": "exemptFromFees(address)", +"5a913599": "setBondShareRatio(uint256)", "5a9156f0": "LogAddUser(address)", +"5a919b22": "getTotalInsurance()", +"5a91b39c": "borrowToken(address,uint256)", "5a91e5e9": "removeFabric(address,address)", +"5a928fb3": "getPowTokenPrice()", +"5a92fa85": "ADJUSTMENT_SPEED()", "5a93bf71": "delReferral(address,address)", "5a93cc8f": "addBonus(address,uint256)", +"5a93f031": "increaseBidSize(uint256,uint256,uint256)", "5a93f1a1": "_deleteCompany(bytes32)", "5a9448e2": "multisigFunds()", "5a94cd0c": "requestChangeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", +"5a9511a8": "TokensReverted(address,uint256)", +"5a95cdb7": "DUST_PER_PEPE()", +"5a95e800": "requesterInitializeNewRound(uint32)", "5a95edd9": "OTHERCRUISER_FTL_SPEED()", "5a960216": "ethUsd()", +"5a963bea": "Progress(uint256,uint256)", +"5a9647ba": "setEpochTimingParameters(uint256,uint256,uint256)", +"5a9652c9": "totalSwappedToken()", +"5a967ea5": "createIdentityDelegated(address,address,address[],string,uint8,bytes32,bytes32,uint256)", "5a969f94": "InternationalModelChain()", "5a975128": "minGamble()", +"5a978f3b": "weeklyIncentive()", "5a979a5c": "LockContractOwner(address)", "5a97b84a": "finishUserDistribution()", "5a983451": "totalTokenMintedAngel()", +"5a9887d2": "_circulating_supply()", +"5a98c361": "ovmNUMBER()", +"5a990460": "removeProgram(address)", "5a992188": "getUserBet(uint256,uint256)", "5a99719e": "getMaster()", "5a998a09": "totalRoyalty()", "5a99b525": "payoutRoyalties()", "5a99d123": "unsetNotaio(address)", "5a9a49c7": "verify(bytes32[],bytes32,bytes32)", +"5a9a93fc": "userLockTime(address)", "5a9aa592": "currentWallet()", +"5a9ade8b": "values(string)", "5a9b0b89": "getInfo()", +"5a9b5ed5": "log(uint256,address,uint256)", +"5a9b6d12": "enablePhase2()", "5a9bb087": "claimContractTokens(address)", +"5a9c0644": "setEpochController(address)", "5a9c0a49": "setBasePrice(uint256[20],uint256,uint256,uint256,uint256)", "5a9c2724": "create(string,string,address)", "5a9c3ee4": "mainSaleDeadline()", +"5a9c6690": "UNISWAP_ALLOCATION()", +"5a9c80e5": "setRewardFee(address,uint256)", "5a9c84f3": "maximumTokensForSecond()", "5a9cfac8": "hasPosts()", "5a9d27dc": "createReleaseTokenAuction(string,uint256,uint256,uint256)", "5a9d5c3c": "PCPP()", +"5a9daf46": "getEventHash(string)", "5a9e03ca": "isIssuedBefore(bytes32,uint256)", "5a9e426b": "refundMe()", +"5a9e5671": "totalDNyanV2LPStaked()", "5a9e75a2": "maxBorrowAmount(address)", "5a9e91df": "zlotsJackpot()", +"5a9ee20c": "checkDividendsOf(address,uint8)", +"5a9ef341": "reapplySubmission(string,string)", +"5a9f0bdd": "TrainingCompleted(address)", "5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", "5a9f97d1": "currentSaleDay()", +"5a9fd8c7": "wpcRate()", "5a9ffc35": "circulatingFame()", "5aa00cc4": "_emitJobCanceled(uint256)", "5aa037dc": "purchasedTokenBalanceOf(address)", +"5aa137fb": "exitGem(uint256,address,uint256)", +"5aa1a6a5": "SendFreeCoinToUserBalance()", "5aa1eb4c": "createAdjudicator()", "5aa23a52": "sendRewardBILL(address,uint256)", +"5aa269e3": "readDecimals(address)", +"5aa2b206": "ETO_TERMS_CONSTRAINTS()", +"5aa2f64c": "INITIAL_REBASE_DIVISOR()", "5aa3952a": "GERCoinCrowdsale(uint256,uint256,uint256,address)", +"5aa3a2a0": "UUID_ALCHEMIST()", +"5aa3b771": "pieClaimThreshold()", "5aa3d2b0": "purchasedAmountBy(address)", +"5aa40eb9": "paperLP()", +"5aa430a7": "editDataUser(address,uint256,uint256[8])", "5aa4470f": "setLogicContract(address)", "5aa451e9": "updateOfferingReputation(address,uint8)", +"5aa49095": "memeLtdAddress()", "5aa4c8a9": "addToMap(uint256,uint256)", "5aa5b9d1": "LogPersonNew(address,uint256,uint256)", "5aa61ec6": "getExchangeRatesLength()", "5aa63592": "DeadMansSwitch(address,address,uint256)", +"5aa66d71": "Droppingjelly(address[],uint256[])", +"5aa67a99": "BBNO()", "5aa68ac0": "getParticipants()", "5aa6b1f0": "reduceFiatCurrencyRaised(uint256)", "5aa6cf97": "payout(uint256,uint256)", +"5aa6e675": "governance()", "5aa720c3": "linkTaskToUser(address,address)", "5aa77d3c": "pendingContractOwner()", "5aa83129": "store(bytes,uint256,uint256,address)", @@ -51933,221 +95094,396 @@ "5aa97a3b": "agreeNeg(string,uint256)", "5aa97e16": "BBCPrimeEx()", "5aa97eeb": "getMarkets(bytes32[],address)", +"5aa9892e": "totalOwedValue()", +"5aaa17c9": "usersX5Matrix(address,uint8)", "5aaa250a": "TokensCappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"5aaab8ce": "isInEpoch()", "5aaac1d1": "fundingMaxCapUSD()", "5aab1822": "stateEndDate()", "5aab25b6": "isRedenominated()", "5aab4ac8": "motd()", +"5aab7b3f": "dNyanV2LPUnstaked(address,uint256)", +"5aabecf9": "getAaveCollAddr(address)", "5aac8aad": "ICO_TokenValue()", "5aad0450": "addVestingAllocation(address,uint256)", "5aad507b": "userTotalCredit(address)", +"5aad6cf0": "stakingPools(uint256)", "5aad7c56": "calculatePMAFromFiat(uint256,string)", +"5aae35e7": "OfferForCity(uint256,uint16,uint256,address,address)", "5aae456a": "potatoTotalSupply()", "5aae843e": "doPreAllocations()", "5aaec2b1": "isdelegatinglisted(address)", +"5aaf1c5e": "noOfProjectsAdded()", +"5aaf27b7": "changePayment(address)", +"5aaf82e2": "g128(int128)", "5ab01088": "joinPreSale(address,uint256)", "5ab027b0": "masterAddress2()", +"5ab05c78": "poolxUSD()", +"5ab0bc73": "hasProxy(address)", "5ab0e470": "getShortPositionState()", +"5ab0f787": "destroyOMContract(bytes32)", "5ab14385": "doProxyAccounting(address,uint256,uint256)", "5ab1a0e2": "JungleScratch()", "5ab1bd53": "getRegistry()", +"5ab25e49": "Finalize(uint256)", "5ab2ff61": "read_u64_array()", +"5ab30959": "updateSpec(uint256,string,string,uint256,bytes)", "5ab30d95": "bobMakesEthPayment(bytes32,address,bytes20,uint64)", "5ab31a60": "drawNumber(uint256,string)", "5ab35302": "ProofofHumanity()", +"5ab376fe": "GetReturnUniTriArb(uint256,address,address)", "5ab3ae21": "privatesaleTokens()", "5ab3ded3": "changeDonationWallet(address)", +"5ab3f343": "votingPowerLimitParameter()", "5ab3fbc9": "BGB_Token()", +"5ab40573": "jackpotRed()", "5ab47550": "firstDayCap()", "5ab4f162": "getVote(address,address)", "5ab50913": "_recalculateAirdrop(address)", +"5ab54dcb": "rewardAdd()", "5ab58d64": "totalLockedHavvens_limitedSum()", "5ab5956e": "startICOStage6()", +"5ab59720": "removeShareHolder(address)", "5ab5d07d": "CROWDSALE_MAX_ACES()", +"5ab5ee37": "setRecord(bytes32,string)", +"5ab673b1": "based()", "5ab68072": "carTaxiCrowdsale()", +"5ab691ab": "setVotingQuorum(uint256)", "5ab6eb7a": "Tabbo()", +"5ab73f01": "rewardAccountsCount()", "5ab7603a": "multivestBuy(address,address,string)", +"5ab78ee1": "isValidPool(address)", +"5ab7e363": "uint8value()", "5ab7f1a8": "donatedAmount()", "5ab81246": "newItem(uint256,string,string)", "5ab827f6": "claimableRefund()", +"5ab83131": "refreshDrift()", "5ab89248": "AAcontributors()", +"5ab8d6f8": "withdrawWEI(uint256)", +"5ab8ea33": "buyToken(string,uint256,uint256)", "5ab92022": "frozenTransfer(address,uint256,uint256,bool)", "5ab98b8d": "DragonReleaseableToken(address)", +"5ab98d5a": "updateGracePeriod(uint256)", "5ab9bb26": "changeBonus(uint8)", +"5ab9f52d": "buy_sai()", +"5ab9ff9b": "setmaintanceMode(bool)", +"5aba0dea": "statusOf(address,uint256)", "5abaaa01": "unicornTokenAddress()", "5abacc89": "RANGESTART_9()", +"5abae4cd": "getAddressTokens(address)", +"5abb0bf0": "UserCreated(uint256)", "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)", +"5abd992a": "log(uint256,address,bool,uint256)", +"5abdb0dc": "setMinWithdrawAmount(uint256)", +"5abe6f7e": "setSecondaryPool(address)", +"5abe9d89": "addi2()", "5abedab2": "getAllTheFunds()", +"5abeffe2": "addScore(uint256,uint256,address)", +"5abf3838": "getSubscriber(address)", "5abfafe2": "holdAddress3()", "5abfc588": "CreatedDebt(uint256,address)", "5ac04bed": "CreateMUSC(address,uint256)", +"5ac072d7": "TRY()", +"5ac09391": "set3PercentWalletReceiver(address)", +"5ac0d9c0": "lastReleasedAt()", "5ac0dc11": "doTimeoutForComplainant(uint256)", +"5ac0e1d2": "getDepositWeight(uint256,uint256)", "5ac14935": "test_0_createOpenController_test_methods()", +"5ac154ce": "addPool(uint256,bool,address)", "5ac1caa0": "_getCurrentRound(uint256)", +"5ac1ee84": "forwardFunds(uint256,address)", +"5ac1f0a8": "check_to_buy(uint256)", +"5ac1f357": "xfLobbyFlush()", "5ac207ff": "totalLossAmount()", "5ac2523a": "minimalTokens()", "5ac26ebd": "devuelveTodasEncuestas()", +"5ac27e47": "UpdatedName(address,string)", +"5ac2dacc": "returnKVTToSomeone(address)", "5ac31e68": "getOrdersForNotary(address)", "5ac36d70": "setTeams(address[],uint256[])", "5ac3835d": "verifyTransferSignature(address,address,uint8,bytes32,bytes32)", +"5ac38c4f": "sale_owners(address)", +"5ac3bff3": "getNftListLength()", +"5ac3cb51": "isStakerRegistered(address)", +"5ac3d58a": "EventGetBackItem(address,address,uint256)", +"5ac419e1": "setB(uint256,uint256,uint256)", "5ac44089": "setHardCapInCents(uint256)", +"5ac44282": "getBatch(uint256)", +"5ac46958": "addCustomer(int256,string)", "5ac48043": "slice(uint256[],uint256,uint256)", "5ac49ba1": "CORE_TEAM_TOKENS()", +"5ac5ba71": "blacklistParty(address,bool)", "5ac5c4f7": "Out(uint256)", +"5ac5cf1b": "defaultPack()", "5ac5ec65": "UsableToken(uint256,string,uint8,string)", "5ac5f82c": "computeBonus(uint256)", +"5ac60608": "voiceCreditFactor()", +"5ac64d85": "CurrentUserBonus(address)", +"5ac699bb": "myPurchases(address,uint256)", +"5ac6a53b": "arb(address,uint256,uint256)", +"5ac6c394": "enter(bytes,bytes,bytes,uint256,uint256)", +"5ac6ff00": "timeManager()", "5ac72734": "tkt()", +"5ac74dea": "toDerivativeForReclaim(uint256)", "5ac77ad1": "isLockedOpen()", "5ac7a8d0": "UTBToken(uint256,string,string)", "5ac7b9f3": "reapFarm()", "5ac7d17c": "getMarketIsClosing(uint256)", "5ac801fe": "setName(bytes32)", "5ac849d2": "liveBlocksNumber()", +"5ac85e17": "setRouterAMM(address)", "5ac87d76": "addToWhiteList(address,uint256)", +"5ac8b005": "REFERER_ROLE()", "5ac942a7": "getIdentifierByIndex(address,uint256)", +"5ac983f4": "getStakedAmount(address,address,address)", "5ac9e90f": "readLib()", +"5aca41f6": "getPendingBalance(address,address)", +"5aca47f6": "revealSkips(uint256,address)", "5aca6153": "setJackpot(uint8[4])", +"5acadad2": "getGivenAmount(address)", +"5acaf2e0": "ZREPrice()", "5acb053b": "toggleDead()", "5acb6787": "createRegion(uint256,uint256,uint256,uint256)", "5acba201": "canOverride(address,address,address,uint256)", "5acbd8e1": "ProxyStorage(address)", +"5acc0991": "allowed(uint256,uint256,address,address)", +"5acc2bf7": "EmergencyWithdrawalCoins(address)", +"5acc7d6c": "Record(address,uint256)", "5acce36b": "getEndowmentBalance()", +"5ace0219": "updateLiquidationCollateralRatio(uint256)", +"5ace4d96": "Index()", "5ace5128": "_emitBoardClosed(uint256,bool)", "5ace83d7": "approveWinner()", +"5ace9515": "IMPOSS05()", +"5acecd40": "redeem(address,bytes32,uint256)", "5acee3d6": "getFutureTransLength()", "5acf061a": "validateContract(address)", "5acf34df": "check_data(bytes32)", "5acf36ca": "fwithdrawal(uint256,uint256)", "5acfefee": "sendProfits()", +"5ad10ee6": "commit(bytes32,address,uint256)", "5ad1854b": "advisersPeriodAmount()", +"5ad1c791": "getDonation(uint256,uint32)", +"5ad1def3": "rollupProviders(address)", +"5ad20c3a": "getAllTokensLength()", "5ad22eb3": "canonizedPLCR()", +"5ad298bd": "bytesToUint(bytes4)", +"5ad2bcf3": "airdropper(address[],uint256)", "5ad35ac0": "numberOfTokensAllocated()", +"5ad3c931": "formatReturnAbiParametersArray(string)", +"5ad3cd60": "bonus_periods(uint256)", "5ad4997e": "getResult(uint8,uint8)", +"5ad5211a": "helpUserWithdraw(address)", "5ad550bc": "testAbsMax()", "5ad55aa5": "setCurrentSchellingRound(uint256)", "5ad5ca74": "createXMLYTrade(bool,uint256,uint256)", +"5ad5f6ae": "GetDealInfo(uint256)", "5ad64dc5": "deletePick(uint256)", "5ad6ba47": "getChronus()", +"5ad6c34f": "depositFecoreForLP(uint256)", +"5ad6d8c6": "setCofixETHSapn(uint256)", +"5ad6fa5c": "debugString()", "5ad701c2": "getTier()", +"5ad726b4": "settleLottery()", "5ad74742": "ICO_Contract()", "5ad7c05c": "getUserRequests()", +"5ad7c851": "removeIndividualRestrictionMulti(address[])", +"5ad7ea2a": "circulatingBzb()", "5ad82148": "getUserid(address)", +"5ad83c60": "setPlatFormFeePercentage(uint256)", "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)", +"5ada9753": "athleteIdToApproved(uint256)", "5adada87": "getPaymentsHeld(address)", "5adb5813": "_setTokenURIBase(string)", "5adb6ddb": "unfreeze(address,address)", +"5adbe49c": "dailyExpLimit()", "5adbe6fb": "ComputeMyEgg(address)", "5adc02ab": "confirmWhitelistAddition(bytes32)", "5adc0c68": "getAddTokenParameters()", +"5adca4f1": "poolClosed()", "5adcba0e": "getEntryStatus(address,uint32)", "5adcf475": "loikikdidad()", +"5add8e0f": "voteSong(bytes32)", "5addc540": "forceToken()", "5addcc8f": "finishFromDutchAuction()", +"5addf4fb": "enterPresale()", +"5ade228a": "REWARD_DURATION()", "5ade3f8f": "NectarChina()", +"5ade4a7c": "approve_87(address,uint256)", +"5ade667e": "execute(uint256[],address,uint256,uint256)", "5ade7c8a": "getMyChest(address)", "5ade9c3a": "removePass(bytes32,address)", +"5adec104": "destructERC20(address,uint256)", +"5adf1b5a": "priceDecrementTime()", "5adf292f": "updateKittenCoinsRemainingToDrop()", +"5adf30c5": "cashbackOfToken(uint256)", +"5adf6d4e": "approve_791(address,uint256)", "5adfafdf": "updateRewardPercentageByIndex(uint256,uint256)", "5adfff91": "_hashTheSecret(bytes32)", "5ae11d5d": "order(address,uint256,address,uint256,uint256)", "5ae17907": "getLossCount(address)", +"5ae21bb1": "totalNode()", "5ae23da2": "host_claim_earnings(address)", "5ae23f84": "getTimeRangeInfo()", "5ae270aa": "GToken()", "5ae28fc9": "setMaxAge(uint256)", +"5ae3d8ad": "settlePayments(uint256)", +"5ae44ad4": "twaVestingPeriodInBlocks()", "5ae46e93": "RaffleDappBook(string,uint256)", "5ae4c04a": "viewprice()", +"5ae4e2df": "ERC20TokenAddress2()", "5ae59132": "havvensReceivedForNomins(uint256)", "5ae5b24f": "eosPizzaSliceSafe()", +"5ae5d4aa": "Greet()", "5ae5df8f": "deleteRef(string)", "5ae61377": "getMaxBusinessesPerCity(uint256)", +"5ae6256d": "getLastBlockNumber()", "5ae63989": "WaraCoin()", +"5ae68f11": "adminWithdrawERC20(address,uint256)", +"5ae6bd37": "signedMessages(bytes32)", +"5ae6ea70": "auctionsOf_(address)", +"5ae7287b": "depositEtherToToken(address,address,uint256)", +"5ae78152": "addNftMetaSecondary(address,uint256,uint256,uint256)", +"5ae7a42c": "givepool()", "5ae7ab32": "revokeKey(address)", +"5ae80ce8": "setRewardDistribution(address,bool)", "5ae81492": "canceloffer()", "5ae82dfd": "ariseWarrior(uint256,address,uint256)", "5ae8a1e0": "updateUserPolicy(bool,bool,bool,bool)", "5ae8daea": "getRoundJackPot(uint256)", "5ae9c4d8": "getLineData2(uint256)", "5aea5955": "ltc()", +"5aea90ab": "approve_194(address,uint256)", "5aea92f5": "LingYanToken()", "5aea9905": "BitrustToken(address,address,address,uint256)", +"5aeac8c9": "add(uint256,address,bool,uint256,uint256,uint256)", "5aeb45dc": "TetherToken()", +"5aeb7f7c": "getwithdrawAllow()", +"5aebb460": "cdpCan(address,uint256,address)", "5aebd1cb": "isRefundable(address)", "5aebf21a": "getProviderAdmin(address)", "5aebfd14": "createFile(bytes)", "5aec11d4": "canUnshelf(string)", "5aec2247": "balanceOfPreSale(address)", "5aec57d8": "NewRound(uint256,uint256,uint256)", +"5aec60b0": "_voteOptions(uint256,uint256[],uint256[])", "5aec6259": "getUInt(bytes32)", +"5aec8011": "distributeRewards(address,address,uint256,uint256)", "5aed37ef": "manualWithdrawEtherAdditionalOnly()", +"5aed4ec3": "createToken(uint8)", "5aed4fa0": "safetyCheck(uint256)", +"5aed85f9": "rewardsTotal(address)", +"5aedbd68": "flashBorrow(address,uint256,uint256,uint256)", +"5aedf007": "TreasuryDeposited(bytes32,uint256,uint256)", "5aee1bc0": "AirdropBeggarsCommunity()", +"5aee4076": "DormantState()", "5aee42bc": "createICOToken()", +"5aee8703": "getBuyerInfo(uint256)", "5aee9431": "method1()", "5aeee9f9": "incFightLose(uint256)", +"5aef021f": "setLendingPoolImpl(address)", "5aef2447": "getClaim(uint256)", "5aef447c": "presaleBonusTokens()", "5aef7de6": "avatar()", "5aefd89d": "Freezing()", "5af0649e": "confirmNewNotary(address)", +"5af09fe2": "nextTaskID()", +"5af0ac8c": "AddLiq(uint256)", "5af0dc98": "blockSkills(address,uint256[])", "5af0e1ae": "MyWillCrowdsale(uint32,uint32,uint256,uint256)", "5af0f053": "approveMove(address,bool)", +"5af107c5": "setUserPayingUsd(address,uint256)", +"5af11a97": "swapTokenForNativeCurrency(uint256,uint256,address,uint8,bytes32,bytes32)", "5af123f4": "bonusRate()", "5af14603": "GetSetting(uint8,uint8)", +"5af1975c": "LogPrepaidTokenBuilt(address,bytes32)", +"5af1c8f7": "removeAddressFromExcludes(address)", "5af1cf27": "foundersWallet1()", "5af1e55d": "op1()", "5af25671": "HugMathou()", "5af2f821": "getCounterProposals()", +"5af2f826": "IMMORTAL()", "5af36e3e": "refund(uint256,uint256)", "5af3741b": "getAddressAnserKeccak256(uint256)", +"5af3adf9": "withdrawAllBNB()", "5af3d5bf": "CWCfallback(address,uint256,bytes)", "5af3e9d7": "bonusLOT()", "5af40b77": "buildPreICOStage()", +"5af41713": "Stake(address,uint256,uint256)", +"5af42b93": "buyAgain(uint256)", +"5af45fd4": "layTop3Doi()", "5af4cd99": "canBurnAddress()", +"5af5147d": "setOnTopWithdrawFee(bool)", +"5af52de8": "awardFromMany(uint256[],address,uint256[],bytes,uint256[])", +"5af5e093": "onBuy(address,address,uint256,uint256)", +"5af5ec46": "AMMO_TOKEN()", "5af5f7ba": "setWhitelisting(bool)", +"5af60212": "getAmountOutAndPenalty(uint256,uint256)", +"5af62619": "getReservesAvailable(address)", "5af6333d": "getGoldInfoSerial(address)", "5af73f3f": "getMinimalBalance(uint256,address)", +"5af7462f": "paraswap()", "5af77fff": "Contract()", +"5af78833": "approvedAddress2()", +"5af82719": "setSwap2Token(address[])", "5af82abf": "director()", "5af86018": "VPE_Token()", "5af89094": "getPMul()", +"5af8dcf3": "scoreSolution(uint256,uint256,uint256,uint256)", "5af95010": "Lenders(address)", "5af9f68f": "getTxPaymentMCW(bytes32)", "5af9f9d5": "TheSchmeckle()", +"5afa3f5f": "startLimitedTrading()", "5afa5036": "isCertified(address)", +"5afa57d0": "getETHForToken(address,uint256)", "5afa5bb6": "minValue2()", +"5afb1374": "curveYGauge()", "5afb408a": "Penchant()", "5afb540c": "getTokenCount(bytes32,string)", +"5afba66b": "can_be_true(bool)", +"5afbde7c": "MinHold()", +"5afbfd38": "getCurrentPairTokenAddress()", "5afbfd4f": "getPublicBattlePokemon2()", "5afc190d": "DrawHouse()", "5afc250f": "getDad(address)", "5afc7e59": "issueFrts(address,address,uint256,uint256,uint256,address)", +"5afccf72": "isBitProInterestEnabled()", "5afd7627": "setCrowdsaleCompleted()", "5afdc02c": "_9_dataSmerti()", "5afe16ca": "GetProfile(uint256)", "5afe5207": "setTokenSaleAddress(address)", +"5afe68d0": "removeValidPlugin(bytes32)", "5afe9ee1": "verifySignedBy(bytes32,bytes,address)", "5afeb106": "Sqrt()", +"5afeca38": "Payout(address,uint256)", "5afecaaa": "getAllArtworksByOwner()", +"5afef307": "PRIRate()", "5aff457f": "createAuctionFromArray(address,uint256[],uint256,uint256)", +"5aff5999": "recipientAddress()", "5aff59e3": "addrCanPurchase(address)", "5aff7e54": "returnBalance(address,bytes32)", "5affcbb0": "cancelIndexedSaleByAddress(address)", "5b00763e": "ProofOfTrevonJames2()", "5b0088fb": "setPlotData(uint256,string,string,string,string)", +"5b00d57d": "voken2()", +"5b019b80": "superClaim(uint256,uint256,uint256)", "5b01b5b3": "teamEmail()", "5b01e233": "getyestodayget()", +"5b0217c8": "runSettlement(uint256)", +"5b026f61": "getLastNewValues(uint256,uint256)", "5b02b729": "setLockUpPeriod(uint256)", +"5b033889": "_moveDelegates(address,address,uint96)", +"5b03c050": "removeLiquidity4Test(address,uint256,uint256,uint256)", +"5b044800": "getComplaintData(bytes32)", "5b04cbb5": "current_state()", "5b04e512": "defaultLockin(address,uint256)", "5b050e77": "isInGame()", @@ -52155,67 +95491,124 @@ "5b054f9b": "chainStartTime()", "5b060530": "createToken(string,string,uint256)", "5b064754": "LogChiSale(address,uint256)", +"5b0648ee": "kbaseToken()", "5b067cce": "testCreateCostMain()", +"5b06a1d1": "updateStakingAddress(address)", "5b06fc49": "HASHPERETH()", +"5b072333": "editLexScript(uint256,string,address)", "5b07371e": "getAttackRanking()", "5b0783f3": "setCapRec(uint256[],uint256[],uint256)", "5b07d7d6": "_generateGene()", +"5b08eedc": "setDayUnblock(uint256)", "5b091f92": "updateID(address,uint256)", "5b09a518": "process(bytes32,bytes[])", +"5b09ca26": "euroCentInWei()", "5b0a3843": "emergencyWithdrawal()", "5b0a6c58": "EasyMineIco(address)", +"5b0a9811": "safeWETHTransfer(address,uint256)", "5b0ad787": "getBonusSetter()", "5b0b02ec": "deathData_f4()", +"5b0b5312": "LogPrivatesaleExtend(uint256)", "5b0b7cc8": "payday(uint256)", +"5b0b8596": "withdrawBUSD()", +"5b0bd8b3": "refCode(address)", +"5b0bea1e": "INX_Pause()", "5b0c12a1": "DeploymentInfo()", "5b0cfcd8": "KillContract()", "5b0d4eff": "mineral()", +"5b0d5984": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)", "5b0d5b55": "getTankEarning(uint32)", "5b0d823a": "referalFundBalanceMap(address)", +"5b0d926b": "setDividendsPoolAddressOnce(address)", "5b0dad8e": "bcdcMultisig()", +"5b0dd3a6": "LogChangeTraderOwnership(bytes32,address,address)", "5b0e1a2f": "releaseMyTokens()", "5b0e52b0": "unlockExternalTransfer()", +"5b0e6fbe": "sendeFAME(uint256)", "5b0e70ff": "RetireHodl(uint256)", "5b0e8b82": "admin_list()", "5b0ec73e": "MNCToken()", +"5b0ed0ef": "addApprovedSellers(address[])", +"5b0ed334": "changedMaximumLockPeriod(uint256)", "5b0ef4a4": "getEtherTicket()", "5b0efb03": "MintAndTransfer(address,uint256,bytes32)", +"5b0f2fcb": "pricePerToken(address)", "5b0fc9c3": "setOwner(bytes32,address)", "5b1052f1": "getCoinBySlotId(uint64)", "5b10b796": "_removeCapper(address)", "5b10d05d": "donotDKKDappToken()", "5b113414": "mul(uint32,uint32)", "5b11380d": "ExTokeB()", +"5b1194b2": "closeBidding(uint256)", +"5b1199f0": "AddedAuditor(address)", "5b1214c6": "setCrowdsale(uint256,uint256,uint256)", +"5b122779": "KYCSet(address,address,uint256,uint8,uint256)", +"5b122e0e": "randomPerBlock()", "5b1295d2": "LNDToken()", "5b12f1b6": "getAuthorizeContractIds(uint256,uint256)", +"5b12ff9b": "proposeStrat(address)", +"5b13155d": "checkWeight(uint256)", +"5b131f5d": "auditedList(uint256)", +"5b132348": "addLiquidityAddresses(address[])", "5b135806": "test_basicWithTwoAssertAfterThrow()", +"5b136512": "registerToModule(address,address)", +"5b14319c": "setDepositTokens(address[],uint256[])", +"5b144229": "x_adminSetFeesRewards(uint256,uint256)", +"5b144253": "distributeManagementShare()", +"5b14dbc8": "CHANGE_BUDGETS_ROLE()", "5b14f183": "isPaused(address)", +"5b151f1e": "LogServiceRemoved(bytes32,uint256)", "5b151fd2": "fifty_fifty()", "5b154394": "GANA()", +"5b1571f7": "returnsubscriptionFee()", "5b15afb6": "isOuvidoriaCadastrada(address)", +"5b166165": "approveLock()", "5b16ebb7": "isPool(address)", +"5b16fe4e": "setDevFeePercentage(uint256)", +"5b171ba1": "isFundAdmin()", +"5b173cab": "tranfer(uint8,uint8,uint256)", "5b174f0b": "EtheremonTransform(address,address,address,address,address)", "5b17b190": "onLEXpaContract()", +"5b17d04b": "setDepositEnabled(bool)", +"5b17e0eb": "getCanClaimTime(address)", "5b18056b": "contributionCount()", +"5b182221": "executeSwap(address[][],uint256[],uint256,uint256[])", +"5b188d40": "deductTrainerBrick(address,uint32)", +"5b18a000": "removeReserve()", +"5b18e4a3": "depositedTokens(bool,address)", +"5b190143": "can_claim(address,address)", "5b195526": "getMyCenter()", "5b195c86": "transfer(address,uint24)", "5b196dae": "getOuvidoriaNome(address)", +"5b19963b": "Close(address)", "5b19a8f3": "prossWinOrLoss(uint256)", +"5b19f79a": "LogTokenIpfsHashChange(address,bytes,bytes)", +"5b1a2083": "depositInfo(uint256,address,uint256)", +"5b1a4c24": "lockInfo(uint256)", "5b1a77fe": "sentTokensToBountyOwner()", +"5b1a8042": "copyToMemory()", "5b1aa9b1": "eugToken()", +"5b1ae157": "maxBondDailyRate()", +"5b1b1347": "getDifficultyConstant()", "5b1b5d90": "getTransfer(bytes32,uint256)", +"5b1b60de": "GP_roundNum()", "5b1b9316": "firstRoundCosmosStart()", "5b1c1625": "prepareClaim(bytes32)", "5b1c893a": "UBC()", +"5b1caa2f": "remove_liquidity(address,uint256,address,uint256)", "5b1cba31": "freezeAddress(address,address,bool)", "5b1d0d1e": "getOwnerAccessoryCount(address)", +"5b1d7350": "mintForTeam(address)", "5b1dac60": "getSharePrice()", "5b1dadc7": "PRICE_PRESALE_WEEK2()", +"5b1dc86f": "getPools(address,address)", +"5b1e8ea5": "notarizzaDato(string)", "5b1ea858": "signedTransferSig()", "5b1eca38": "getTotalDevs()", "5b1fe0cb": "sendGift(uint256,address)", "5b1fef12": "GetPVPData(address)", +"5b20270e": "addTargetAddress(address)", +"5b202afb": "RevertAt(uint32)", "5b206edb": "initAmount_()", "5b208f76": "PlayX2()", "5b209615": "ecrecover1(bytes32,uint8,bytes32,bytes32)", @@ -52224,105 +95617,175 @@ "5b21e539": "decline(uint256,bytes32,bytes)", "5b225526": "permissions(address,bytes32)", "5b225d25": "getLatestManifestByName(address,bytes32)", +"5b227f9b": "sets(uint256)", "5b228f88": "CLCToken()", "5b229869": "getSenderArmyCount()", "5b2298c8": "getSumAmountOfDisputedDealsProPatient()", "5b229ae4": "dungeonRequirements(uint256)", +"5b229bf9": "disablePurchases()", "5b22bbd2": "maxRaiseAmount()", "5b2329d4": "checkGoalReached(uint256)", "5b23bf8a": "forcePayout()", +"5b248a12": "setNum1(uint256)", +"5b24dc4d": "flappcontract()", "5b24f87d": "addManyToAllocationList(address[],uint256[])", "5b250462": "join_private_room(bytes32)", "5b251342": "KAnsariCoin()", "5b25c137": "kycVerifiedBonusBps()", "5b25ed6a": "tokensLimit()", +"5b26d990": "computeSteamAmount(uint256)", +"5b2725ed": "SHIELD()", "5b284ecd": "InsertRank(uint256,uint256,uint256)", "5b28919c": "getShipType(uint256)", "5b28ad15": "dna6(uint256)", "5b290c1d": "continueRedeeming(uint256)", +"5b29688d": "CalcminewithLPtoken(address)", +"5b29be0f": "getCardWeightListOfPack(uint256)", +"5b29e57f": "device_arr(uint256)", "5b29f2e4": "icoSold()", "5b2a0e96": "multiSend(address,address[],uint256)", "5b2a372d": "setTxDataBlockNumber(bytes32,bytes)", "5b2aa4ae": "getMatchInfoList01()", +"5b2ace64": "timeAcquired(uint256)", +"5b2adb74": "halvingYfnpSupply()", +"5b2addb6": "nonWhiteListed(bytes4)", "5b2b0168": "_refundTokensPurchase(address,uint256)", "5b2b2194": "addRange(address)", "5b2b345c": "TOKENS_ACCOUNT_MAX()", +"5b2bd79e": "baseMetadataURI()", +"5b2bd86e": "caleReadyTime(uint256,uint8)", "5b2c44e1": "updateWhitelistInternal(address,address,uint8)", +"5b2c8483": "_accessDuration()", +"5b2ca641": "resetCrowdSaleaddress(address)", "5b2ccdec": "hirerCancel(bytes16,address,address,uint256,uint256)", "5b2cdda3": "returnWalletAddress()", "5b2d2bcf": "set_car_dealer(address)", +"5b2d39c9": "engine3Winners(uint256)", "5b2d7ad1": "calculate_shares_and_return(uint256,uint256,uint256,uint256,uint256,uint256)", +"5b2dd100": "revertWithReason()", "5b2e1eb1": "ETHPonzi()", "5b2e299c": "Hypercoin()", "5b2e39e0": "releaseEcosystemJM(address)", +"5b2e7f14": "inbound(uint256)", "5b2e9a81": "UpdateSellAgentSiteReg(address)", +"5b2ea1ce": "ethBuySwitch()", +"5b2ea4fe": "getScoreInfo(address,address)", "5b2ec3a5": "createInternalAuction(bytes32,bytes32,uint256,uint256,uint256,string)", +"5b2f03ef": "TokenIdToOwner(uint256)", "5b2f515b": "artistName()", +"5b2f529d": "processFeePool()", "5b2f8752": "claimLoss()", +"5b30116a": "isNyanEligible(address)", "5b303e16": "eatUnicorns(uint256)", "5b30535d": "updateFactorReward()", +"5b306986": "pickLotteryWinner()", +"5b30a11a": "joinFarmPool()", "5b30a647": "checkapproval(uint256,address,bool)", +"5b30b428": "allSales(uint256)", +"5b30c369": "registerManager(address,string,string)", "5b31035d": "getReward(uint64)", +"5b310c9f": "setproposalTime(uint256)", +"5b318b66": "recordPrenup(string)", +"5b323e43": "inviteYieldRate()", +"5b324661": "onBuyBet(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", "5b325e94": "AddTransactionAgainstExistingEntity(address,uint256,uint256,string,string)", "5b329058": "DSGroup(address[],uint256,uint256)", "5b33233b": "increaseOwnershipTokenCount(address,address)", +"5b3411c2": "currentMinerBlock()", +"5b347c19": "RoleRemovedAll(string)", "5b34b966": "incrementCounter()", "5b34f4e2": "newUserAccount(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", "5b353cfa": "PMC()", "5b35f9c9": "rewardsWallet()", +"5b36389c": "remove_liquidity(uint256,uint256[2])", "5b364f3b": "chkend(uint256)", "5b366096": "changeHDXcontract(address)", "5b36fea6": "transferToICAPWithReferenceCallGas()", "5b372532": "press()", +"5b373092": "retrieveBonus()", +"5b3750ce": "removeCustomToken(address)", "5b378d39": "ContractorCreated(address,address,address,address)", "5b379044": "dateTier3()", +"5b37de5d": "EventTransform(address,uint256,uint256)", "5b37e150": "create(bytes32,bytes)", "5b387273": "allowWhiteList()", "5b38863a": "btcRateMax()", "5b389666": "USDCryptoToken()", "5b389dbb": "powerUpContract()", "5b38a8e6": "updateAssets(address,int256)", +"5b3930de": "resultados(address)", "5b3a4895": "totalInvestedWithBonuses()", "5b3a6f9e": "DomusToken()", +"5b3ad80e": "EstateRegistrySet(address)", +"5b3aff5c": "_isRoundingErrorFloor(uint256,uint256,uint256)", "5b3b136a": "getMyTokens()", "5b3b20e1": "CLN_PER_ETH()", "5b3b449f": "incentiveTokensLimit()", +"5b3b5381": "shareKct(uint256)", +"5b3b99fd": "getTotalCirculating()", "5b3bab74": "NeCashTokenSale()", +"5b3bcc19": "addCommonPetId(uint256)", "5b3be4d7": "mintAirDropTokens(uint256,address[])", "5b3bf07a": "getPrizeNumbers()", +"5b3cc0cf": "_votingSnapshots(address,uint256)", +"5b3d0bc1": "keyCertificateValidUntil(address)", "5b3d386b": "transferAnyCaerusToken(address,uint256)", "5b3d4b16": "SCUDO()", +"5b3db6a3": "bnbUserProvisions()", "5b3ddbf2": "firstAuctionConcluded()", "5b3de1c8": "getBankEth(string)", +"5b3def17": "getHugo()", "5b3ea961": "ChangeSharedExpense(uint256,uint256,uint256)", +"5b3eed5c": "setPayableAddress(address)", "5b3f4d24": "PrelievoProprietario(uint256,uint256)", +"5b3fb92d": "updateSynthAddress(address)", "5b405418": "CallSpread()", "5b4078de": "decodePriceFeed(uint256)", "5b40a584": "curId()", "5b40d5dd": "unlockInBatches(address[])", "5b419a65": "join(bytes32,bytes32)", +"5b41d177": "buyTokenWithE()", "5b42109d": "getNarcoLocation(uint256)", +"5b4238c7": "createContractPizza(string)", "5b4246d4": "proportion()", +"5b427270": "myAStake()", +"5b42f48b": "maxLockingBatches()", +"5b430a57": "LogAPICallsPaid(uint256,address,uint256,uint256,uint256)", +"5b43bc99": "name(string)", +"5b43c265": "canPay(address)", "5b440596": "getWithdrawValue(address)", +"5b44c658": "Order(address,address,uint256,address,uint256,uint256)", "5b453810": "changeEtherBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", "5b454832": "declareDefaultAsBorrower(uint256)", +"5b454fef": "dcdcV(address)", +"5b45ae95": "readInvoice(string)", "5b45b999": "setMiniMeToken(address)", "5b46016e": "KickTheCoinFactory()", +"5b4649db": "blockIdToRentDeal(uint16)", "5b467404": "getCounts(address)", +"5b46ff8e": "dayseths(uint256)", "5b472771": "level_8_amount()", "5b475e22": "STARTING_ANTHILL()", +"5b47613b": "SaleSuccessful(address,uint256,uint256,address)", "5b477c53": "updoot(uint256)", "5b4786ea": "getValusTokenIssuance(uint256,uint256)", +"5b47aca4": "bidsN()", "5b48165f": "lastBlock_v17Hash_uint256()", "5b482ec1": "disconnectModule()", "5b485314": "IEFBR14()", "5b48684e": "optIn()", +"5b48a884": "SetNormalAddressForSale(uint256)", "5b48c11b": "regRefcode(bytes32)", "5b48e66a": "changeCroStatus(address,uint8)", +"5b49129e": "matchRatio()", +"5b494c65": "uintMinC()", +"5b495796": "SuppressedGame(uint256,bool)", "5b49ebdf": "GiantWeedKiller()", "5b4a54a9": "isCrowdsaleOver()", +"5b4a74cf": "boogiePool()", "5b4b1c0e": "orientation()", "5b4b73a9": "setData(uint256)", +"5b4bd537": "getNumActiveSlots()", "5b4be32b": "setSellStatus(bool)", "5b4c084a": "updateHpbNode(address,bytes32,bytes32)", "5b4c3543": "options(bytes32)", @@ -52330,69 +95793,136 @@ "5b4cc249": "newSale(address,uint256,uint256)", "5b4cc320": "onOwnershipTransfer(address,uint256,bytes)", "5b4ccc9d": "addParticipants(address[])", +"5b4cde6d": "HybridizationAccept(uint256,uint256,uint256)", "5b4d20d2": "requireWhitelistedAddress()", +"5b4d9971": "stakingRewardWeightTotal()", "5b4df1ca": "ROLE_CONTROLLER()", +"5b4e07fc": "claimFunds(uint256,uint256,uint256[][],uint256,uint256,uint256[][],uint256)", +"5b4e1277": "BsH(bytes)", +"5b4e128c": "initializeV2(uint256)", "5b4ef70b": "eth(uint256)", "5b4ef819": "increaseNumber()", "5b4f472a": "tradingStarted()", "5b4f5feb": "assignCardOwner(address,uint64)", +"5b500826": "updateValue(uint256,uint256)", "5b500996": "bringuPort(address)", "5b508cf0": "createRegulatorProxy(address)", +"5b50c888": "setSupplyIncreaseAddress(address)", +"5b510239": "getPendingResponsesOnBSC(uint128)", "5b511030": "activateSecondPreIco()", +"5b5155de": "onTokenReceived(address,address,address,address,uint256,bytes,bytes)", "5b519132": "getInitHash(bytes32)", "5b51a6d8": "getMintDelegates()", "5b51acff": "migrationTarget()", +"5b525ae3": "releaseCollatteralRatio()", "5b525b2c": "changeItemName(uint256,string)", +"5b5267b1": "withdrawRoiBonusDirectly()", "5b528aaf": "KaiKuangChain(uint256,string,string)", "5b528ba1": "bonusPer(uint256)", "5b52b9db": "WLMTfinney()", "5b52c7fb": "GROWTH_SUPPLY()", +"5b52cc01": "halvingEndBlock2()", "5b530196": "tokensOfkitty(uint32)", "5b53d291": "advisersTotal()", +"5b53d64f": "swapSourceAddress1()", "5b5416ca": "unfreezeTimestamp()", +"5b544877": "_mintingFinished()", "5b548ab4": "mixAuto(uint256,uint256)", +"5b54cf96": "approveDeployer(address)", +"5b54e803": "propertyAmountETH()", +"5b54e896": "versionBeginUsage(address,address,address,bytes)", "5b54f077": "promissoryUnits()", "5b55169c": "minContribAmount()", "5b556bf0": "ZeroExHandler(address,address)", +"5b56425f": "_dropIdleMarket(address)", "5b56af1e": "freezeAccountTimeAndValue(address,uint256[],uint256[])", "5b56be8b": "prevEndTime()", "5b56d57f": "getGameStartBlock(uint256)", +"5b56d6f5": "setInterestFee(uint256)", +"5b57014c": "candidate2()", +"5b575e86": "lockHash(bytes32)", +"5b57c11e": "TokenPayRobCash(address,address,uint256)", +"5b586313": "redeemWithDeed(uint256,address,uint256)", "5b588f26": "cfoWithdraw(uint256)", +"5b58d319": "ETHPriceOutOfBounds(uint256)", +"5b592754": "calculateBetId(string,address,uint256,uint256,uint256,uint256)", +"5b594bcd": "approve_620(address,uint256)", "5b59af9c": "OwnershipAdded(address,address)", +"5b59c418": "NewBunny(uint32,uint256,uint256,uint256)", +"5b5a0e70": "Vault_Permanent()", +"5b5a1467": "commit_new_fee(uint256,uint256)", +"5b5a2846": "repeatBiz(uint256)", "5b5a9160": "JackCoin()", +"5b5a9a56": "execute(uint256,uint256,int256,uint256[],uint256)", "5b5ae956": "Bytes4ToByteArrayWithLength4()", "5b5aed3a": "identityExists(uint256)", "5b5b45ef": "privateOfferingExchangeRate()", +"5b5b8732": "diggFaucet()", "5b5bbb31": "changeSettings(uint64,uint64,uint8,uint8,uint16)", "5b5c7705": "withdrawPlayer()", +"5b5cb8cc": "complaintTimelimit()", "5b5cf8cf": "PacersvsCavaliers420()", "5b5d1d88": "TMRToken()", "5b5d2c8f": "updateValue(bytes32,uint256,uint256)", +"5b5dacf1": "auctionOwner(uint256)", "5b5ddb94": "read(bytes,uint256,uint256)", "5b5e450b": "masterKeyIndex(uint256)", +"5b5e51a9": "buyModel3()", "5b5e760c": "getTokenWinValue(uint256)", "5b5e7bbe": "setAssetsOnDeposit(uint256)", +"5b5ec22c": "_ProjectFund()", "5b5ecf19": "CryptoSagaArenaRecord(address,uint32,uint8,uint8)", +"5b5f3e87": "getSecondsLeftInLiquidityGenerationEvent()", "5b5f8b88": "transerFrom(address,address,uint256)", "5b5fa6ba": "ownerTemp()", +"5b60b9af": "pendingCircularity(uint256,address)", "5b60fa6b": "createTeam(uint256,uint256)", +"5b6127cc": "preMintedToken()", "5b61291c": "aekS()", +"5b616994": "approve_286(address,uint256)", "5b621b2c": "_setMintableProperty(uint256,bytes32,bytes32)", "5b624b6e": "setinfo(string,string,string)", +"5b626339": "getClassPropertyValue(uint32,uint8,uint256)", +"5b6283db": "playerRolls(bytes32)", "5b630d59": "EFH(uint256,string,uint8,string)", +"5b6333eb": "getReserveInfo(address)", +"5b633a6d": "ethToTokenSwapOutput(uint256,uint256,address)", "5b633cf2": "getItemsIdsByTypeAndOwner(string,address)", "5b63831a": "getMinimumPurchaseVZTLimit()", +"5b638fa5": "kodaV2()", +"5b63ff9b": "EMPTY_LOCKED_BALANCE_FACTORY()", +"5b640129": "withdrawReward(uint256[],uint256)", "5b6427fc": "nextNumberOfWagersToMinimumTimeout()", +"5b642bee": "setState(bytes32,uint256)", +"5b6435ae": "TeamWithdrawEnabled()", +"5b65118e": "boogiePoolAddress()", +"5b65268f": "RemoveAllowReceiveGenesisTransfers()", +"5b655e12": "MIMIRTOKEN()", +"5b65afe9": "mintCard(address,uint16,uint8)", +"5b65b0c1": "ContractUnpaused(address)", "5b65b9ab": "setFee(uint256,uint256,uint256)", "5b65da64": "getPhaseSupply(uint256)", +"5b6612ad": "lastTransfer(address)", +"5b667cf9": "getShortTokenId(bytes32)", "5b6682aa": "Tom(uint256,string,uint8,string)", +"5b66a818": "revokeableAmount(address)", "5b66cc84": "transferLog(address,uint256,string)", +"5b673532": "poolMap(address)", +"5b67a95b": "setAutoCompound(bool,bool,bool,bool,bool,bool,bool)", "5b680aa6": "spentAllowance()", +"5b6823b3": "dracoTrade(address,address,address,uint256,uint256,uint256,address[],uint256)", +"5b683354": "tokenRecipient()", "5b68a49d": "cancelVoteForCandidate(address,uint256)", +"5b68ce28": "setConverterMap(address,address)", "5b68e09b": "appAccounts(uint256)", "5b68f3a6": "Loggable()", +"5b697662": "getSurplusBalance(address)", +"5b6988cb": "setGrowFactor(uint256)", +"5b69a7d8": "oracles(uint256)", +"5b69f2ca": "allowances(uint256)", "5b6a42b8": "setNewMonster(uint256,uint32,address,string,string)", "5b6a54bc": "adjustTransactionFee(uint256)", +"5b6a8d26": "priceLevel(uint256)", "5b6a9eb4": "minCost()", "5b6aa3c2": "isMinTokensReached()", "5b6accb2": "manualBatchTransferToken(uint256[],address[])", @@ -52400,92 +95930,173 @@ "5b6beeb9": "getHash(string)", "5b6c508c": "exitAll()", "5b6ca99a": "setHint(string)", +"5b6de28f": "setNftPoolAddress(address)", +"5b6e2319": "completeHash()", "5b6e2492": "getDesignatedReporter()", "5b6e7be2": "updateTokenBalance()", "5b6edf78": "DISCOUNT_TOKEN_AMOUNT_T1()", +"5b6f36fc": "sell(address,address,uint256,bytes)", +"5b6f547e": "transferAnyERC20(address,address,uint256)", +"5b6f57de": "pureFuncWithoutPureTag()", +"5b6fda30": "unsetZeroFee(address)", +"5b708a39": "ERR_ENTRY_NON_EXISTENT()", "5b7121f8": "getMinter(uint256)", +"5b71317e": "initBalances(address[],uint64[])", "5b714690": "valueBeforeFeesWereReduced(uint256)", "5b715ae0": "referralProgrammeWallet()", +"5b71e6a4": "inCasedUSDStuck()", "5b7214b6": "m_ETHPriceUpperBound()", +"5b72a33a": "INTEREST_RATE()", "5b72b9fe": "pushId(bytes32)", "5b72c3b7": "eraFromMokenData(uint256)", "5b72cdd0": "estimateBalanceOf(address)", +"5b72e8c3": "uintReturn(uint256)", +"5b72f6e5": "ToshiCash()", "5b73024a": "opAddr()", +"5b730e69": "withdrawInterest(address,uint256)", "5b73b332": "extendTge(uint256)", +"5b74213f": "_cap1()", "5b7450fc": "isOperable(address)", +"5b748e20": "freshBlocks()", "5b752d5d": "getjackpot()", "5b754491": "transferFromTx(address,address,address,uint256)", +"5b756179": "allocateSeigniorage()", +"5b758da4": "_basisPointsRate()", "5b75dd8d": "getSubscription(address,address)", "5b7633d0": "signerAddress()", "5b764811": "_jMul(uint256,uint256,uint256,uint256)", "5b766089": "isCreditor()", "5b766196": "hasWon(address,uint256)", "5b767e86": "getArbiter(address)", +"5b769f3c": "setWETH(address)", +"5b77f077": "initSupply(address,address,address,address)", +"5b77f78d": "extractMoney()", +"5b782012": "mar()", +"5b78343a": "foo13(address,uint256[])", +"5b789856": "nbAssetMaxPerOptionID(uint256)", "5b791420": "isProxyForSender(address,address)", +"5b79818f": "swapMultipleAuthKeys(address[],address[])", "5b7991cd": "extensionsCount()", +"5b79b007": "TokenDataChange(uint256,bytes32[])", "5b79b275": "_currencyToToken(address,uint256,bytes)", "5b79dbe5": "reserveForTeam(address,address,uint256,uint256)", +"5b7a03e5": "bakeToLp1Route(uint256)", "5b7a50f7": "setOldToken(address)", +"5b7a7503": "balanceRebase(uint256)", "5b7a78c8": "test1_overlappingIntervalSameNode()", "5b7ab891": "BAT()", +"5b7acd83": "FounderSet(address,uint256)", +"5b7b018c": "changeMPC(address)", +"5b7b2c38": "_checkRole(bytes32,address)", +"5b7b5b35": "exchangeSynthsForSynthetixAtRate(uint256,uint256)", "5b7b716c": "tgrSettingsMaxStages()", "5b7b72c1": "createCloneToken(address,uint256,string,uint8,string,bool)", "5b7baf64": "claimRefund(uint256)", +"5b7c132d": "changeLiquidityAddress(address)", "5b7c2dad": "getUserPosition(address)", "5b7c38ad": "getLLV_edit_22()", "5b7c569a": "trustedServer()", +"5b7c8210": "isBurning()", "5b7ca9c6": "addPrizePool(uint256)", "5b7d47a9": "betOnColor(bool,bool)", +"5b7d5155": "CompanyCreated(bytes32,bytes32,uint256,uint256,address)", "5b7d9043": "creditAccount(address,uint256)", "5b7da338": "_balanceOf(uint256,bytes32)", "5b7db24d": "addRemoveCountry(string,string,bool)", "5b7dc56a": "updateLuckyblockSpend(bytes32,address[],uint256[],uint256)", +"5b7dcaed": "setRebalanceInterval(uint256)", +"5b7ede61": "cfnxAddress()", "5b7eed81": "T1898Token()", "5b7f415c": "TOKEN_DECIMALS()", +"5b7f6ea8": "miningFeeNumerator()", +"5b7fa2f9": "setERC20Address(address,uint256,uint256)", "5b7fc27f": "getInitializParentUniverseValue()", "5b7fd9b5": "brands(address)", "5b806645": "badgeCount()", +"5b807c73": "pairForCreate2(address,address,address)", +"5b80ba01": "sellerToTokens(address,uint256)", "5b80f497": "getAvailableIds()", "5b814e16": "freezing()", +"5b8179f7": "sushiLpToken()", +"5b81fe6e": "lastRewardsTotal(address)", "5b824208": "changeMinimumTimeBeforeUpdate(uint256)", +"5b82519c": "_getTokenLaunchLocker()", +"5b82989b": "areThereFinishers()", +"5b82ac0d": "getDrawnIds(address)", "5b82d694": "SetClaimFee(uint256,uint256)", "5b8315e4": "TokenSCADAEntity()", "5b833f1e": "nextTokenOwner()", "5b839dd2": "initBonusSystem()", "5b83b7f1": "investorExists(address)", +"5b8415b4": "setGovVaultProfitShareFee(uint256)", +"5b845287": "updateFeeSplitter(address)", +"5b84a1ed": "abc(string)", "5b84bb27": "MYTOKENNAME()", +"5b84f05e": "taxSingleAndModifyParameters(address,address,address,bytes32,bytes32,uint256,uint256)", "5b850d92": "PollCreated(address,address)", +"5b857a1b": "maxEthPayment()", "5b859394": "PunkBidEntered(uint256,uint256,address)", "5b859500": "hardcapInEther()", +"5b85c200": "setMigrateEntriesThresholdAmount(uint256)", +"5b85e5d0": "tokensReserves(address,address)", +"5b85eefa": "downgradable()", +"5b85ef90": "userStage(uint256,address)", "5b863b5a": "ZenomeSale(address,address,uint256)", +"5b868d83": "setpoolLevels(uint256[3])", "5b86914d": "bet_value()", "5b869e68": "DeviceAddr()", "5b86ce97": "buyEggWithToken(address)", "5b86f599": "increaseBalance(address,uint256)", "5b8710e5": "checkTransferRequirements(address,address,uint256)", +"5b874405": "lockLength()", "5b87a2f2": "confirmreward()", "5b8807d9": "claimReserveTokens()", "5b88349d": "claimAirdrop()", "5b889ab8": "ammount()", "5b8943ff": "addAffiliate(address,address)", +"5b8948f3": "setLiquidAddress(address)", +"5b897075": "getRecepitCount()", "5b89a48a": "lockEpochsMap(address,uint256)", +"5b89c2ac": "feeExemptionAmountForAucEscrowed()", +"5b8a9033": "disabledReserve(uint256,uint256)", "5b8aa811": "setRequiredParticipation(uint256)", "5b8ad515": "isUtilityHolder(address)", "5b8b4f91": "refererAllowed(address,address,address)", "5b8bcb53": "CappedSale(uint256)", "5b8be30c": "TheCoinSale()", +"5b8c1724": "addAllowReceiver(address)", "5b8c6b58": "RoundBHardCap()", +"5b8c9337": "getDailySpent(address)", +"5b8d0194": "_emitClaim(address,bytes20,uint8,uint256,uint256,uint256,address)", "5b8d02d7": "payoutAddress()", "5b8d8807": "setTokenMinAmountSell(address,uint256)", +"5b8d992b": "getEffectiveDelegatedSum()", "5b8e48df": "swypes(address)", +"5b8eed08": "killPerAttack()", +"5b8ef481": "crowdsourcers(bytes32)", +"5b8f4590": "lpAccount(address)", +"5b8f8a17": "TokenSender(address)", "5b8fa846": "payDividends(string)", "5b8fb4ae": "EthKing()", +"5b9028ee": "twapInit(address)", +"5b904cb7": "enableVesting()", +"5b905785": "gains(address,uint256)", "5b905b6c": "newProposal(string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"5b905e13": "TRANCHE_TFI_MULTIPLIER()", +"5b9067dc": "setWallets2(address)", +"5b90b752": "code(address)", "5b90ed39": "emitEscrowUpdated(address)", +"5b913286": "_transferContractAddress()", +"5b915dad": "mkrAddr()", "5b91aa6b": "underNumber()", +"5b91c510": "startPreSale(uint256)", "5b91fd60": "performTheMagicTrick()", +"5b922543": "transferShortCode(string,uint256)", +"5b923582": "periodOfOnePayments()", "5b9248aa": "correctResult(int8)", "5b9283e7": "isInvalidEarlyPurchase(uint256)", +"5b9297c4": "isAcceptableNft(uint256,address,uint256)", +"5b929edd": "__wbtc()", "5b92cdee": "bountyAffiliateWallet()", "5b92e548": "CreateCBT(address,uint256)", "5b93c2bc": "getWinnerAddressList()", @@ -52493,20 +96104,39 @@ "5b945c0e": "getLableList()", "5b947f36": "ItasToken()", "5b94db27": "nominateOwner(address)", +"5b95f0f4": "EventApplicationEntityProcessor(uint8,uint8)", "5b95f65e": "getAddressesByDocHash(bytes)", +"5b9605ec": "add1(uint256,address,bool,bool)", "5b9632ca": "minValue1()", +"5b965800": "TransmitDisabled()", "5b96c1e7": "oracleMasterCopy()", +"5b96ebb7": "approve_53(address,uint256)", +"5b96f6a7": "pinDivisor()", +"5b97aadd": "computeFinalFee(address)", "5b980628": "collectFunds()", +"5b9813ef": "getCompoundUnderlyingRatio(address,uint256)", "5b984ff6": "enableWithdraw()", +"5b98b4a0": "setAppleInc(address)", "5b9900ce": "getWeiforTokens(uint256,uint256,uint256,uint32)", "5b99cb2b": "joinGame(uint256,uint256,bytes32)", +"5b99d899": "unsale_owner_wallet()", "5b99df7f": "transferWithFee(address,address,uint256,address,address,uint256)", "5b9a4690": "convertToMiniRYC(uint256)", +"5b9a6b2e": "offerGlyphForSale(uint256,uint256)", +"5b9ac614": "playerOpened(address)", "5b9af12b": "addValue(uint256)", "5b9b0609": "maxContribAmount()", +"5b9b2b8b": "pendingMtest(uint256,address)", "5b9b44bf": "startDefinedGame(uint256)", +"5b9be4f2": "getInternalTransactionHash(bytes32)", +"5b9dac89": "setInterestRate(uint256,uint256)", +"5b9db898": "externalLink()", +"5b9ddfdc": "g_invalidated(bytes32)", +"5b9de1d3": "advAddress()", "5b9eb8ab": "CONVERSION_NUMINATOR()", "5b9f0016": "stakedBalance()", +"5b9f2079": "aTokenMapping(address)", +"5b9f3953": "ecr()", "5b9f7cbe": "createNode(bytes32,bytes32,bytes32,address)", "5b9fdc30": "getSecret()", "5ba05024": "getInsuranceByAddress(address)", @@ -52514,64 +96144,124 @@ "5ba13abf": "createMulti(uint256,address[])", "5ba17b2d": "NewtonTree()", "5ba1a1d4": "viewKarmaVotesBySymbol(string,address)", +"5ba25946": "changeOfferPrice(uint256)", "5ba2dd22": "conflictRes()", +"5ba30e14": "panel_2(address)", "5ba32008": "FDKToken()", +"5ba33426": "setAddressToExcludeRecipients(address)", +"5ba35701": "partnerAddr_()", "5ba39782": "getCommentAccounts()", +"5ba3c4be": "setRewardCutie(uint32,uint256,uint16)", "5ba3e63e": "MultiSigRules(address[])", "5ba58955": "beneficiaryBalance(address)", "5ba5b1b2": "setSoldPreSaleTokens(uint256)", +"5ba5cd2d": "_encode_sol_bytes5(bytes5,uint256,bytes)", +"5ba622c8": "renderTacgiaNhom2()", "5ba67330": "SendDivs()", +"5ba6807d": "viewBlockchainArceonMoneyNetwork(uint256)", "5ba6c017": "setTotalSpentPerDay(uint256,uint256)", +"5ba81c87": "getPosition(address,address[])", +"5ba8211c": "getBound2()", "5ba83c0d": "getMEATime()", +"5ba845a2": "limitAMT()", "5ba87a4d": "getWithdrawedToken()", "5ba88490": "privlocatumICO()", +"5ba88911": "pendingJoys(uint256,address)", "5ba88c28": "debug2()", +"5ba8a719": "setEthRateUp(uint256)", +"5ba8ab4c": "ProofOfWorthiness(address,bool,uint256)", +"5ba8c0f8": "provideLiquidityUniswap(address,address,uint256,uint256[2])", "5ba8c608": "activePoll()", +"5ba8d2ad": "initializeNonPayable(uint256)", "5ba8eb42": "getClearance(address,address)", "5ba91006": "Sports3D()", "5ba92d7d": "_freeze(address,uint8)", +"5ba9bd72": "deauthorize(bytes32,string)", "5ba9e48e": "nextPriceOf(uint256)", +"5baa7509": "renew(uint256)", +"5baa9771": "claimvPURE()", +"5baaa87d": "L2ToL1Transaction(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)", +"5baace14": "setFaasPools(address[])", "5bab1a63": "totalEthxRecieved()", +"5bab45f2": "DROIValutWithdrawal(uint256)", "5babb758": "testSetUp()", "5babe01b": "distributedBountyStakes()", +"5babf5ef": "addAdmin(address,string,string)", +"5bac0d4f": "LogForwarded(address,uint256)", "5bac1e11": "ReclaimBegun()", +"5bacbf8c": "approvePooling()", +"5bacef19": "needToAddAdminInfoList(address)", "5bad05bd": "hardCancelOrder(uint224)", "5bad9fa7": "walletOut2()", "5badbe4c": "requestCount()", "5badcd08": "TokenFulfillment(address[2],uint256[7],uint8,bytes32[2],uint256)", "5badf100": "fireOnChanged(bytes32)", +"5bae0bf5": "Spudgame(uint256)", "5bae2120": "test_doubleVotingFor()", +"5bae2931": "open(uint256,address,uint256,uint256)", "5bae3f75": "CategoryAdded(uint256,string)", "5bae4e98": "getOwnerRating()", "5bae510d": "deposits(uint32)", "5bae8c36": "isNewParent(address)", +"5bae9619": "rewardPrecision()", "5bae9ce9": "blacklisted()", "5baef4f3": "INCREMENT_RATE()", +"5baf008f": "convertBackUniAll(uint256,uint256)", "5baf039f": "add(address,address,address,address)", "5baf4a09": "ausgroupTransfer(address,uint256)", +"5bafe5a3": "retireSign()", "5bafecf5": "calculateFloatingValue(uint256,uint256,uint256,uint256,uint256,uint256)", "5bb0fa46": "RESERVE_EXCHANGE_SHARE()", +"5bb12446": "getDelegatedToValidator(uint256,uint256)", +"5bb142ba": "pendingPHOENIX(uint256,address)", "5bb18362": "isReadyToBear(uint256)", +"5bb1a054": "totalTicketPoolPrize()", +"5bb1db06": "NewBurner(address)", +"5bb2088d": "CollectAirDropTokenBack(address,uint256)", +"5bb244bf": "TowerWon(uint256)", +"5bb2860a": "approveToPool(uint8,string,uint256)", +"5bb2a528": "setTokenRatePerEth(uint256)", "5bb2b102": "registerNameCore(uint256,address,uint256,bytes32,bool,bool,uint8)", +"5bb2c0ca": "regCandidate(string)", "5bb31436": "transferKnightOwnership(address)", +"5bb31693": "borrowAllowed()", +"5bb37b4d": "setOnUniswap(bool)", "5bb3e5f6": "fixNoCallback(bytes32)", "5bb41203": "test_oneAssert()", "5bb447a8": "NOTtoken()", "5bb47808": "setFactory(address)", +"5bb496b3": "TransferOwner(address,address)", "5bb4df3c": "assignFrom(address,address)", "5bb59815": "claimWarranty(string,uint256,string)", "5bb5b917": "insureClient(address,address,uint64)", "5bb5bb86": "dtGetBuildingData(address,uint256)", +"5bb5e55b": "submitEvidence(address,string)", +"5bb5ebbe": "doApprove()", +"5bb61398": "getPriceFromOracle(string,string,string,string,uint256)", +"5bb662e9": "rebaseDisabled()", +"5bb6d007": "unpauseWithdraw()", +"5bb6eb56": "getDataProvider(uint8,uint256)", "5bb7cf11": "ERC20(address,uint256,string,uint8,string)", +"5bb80a5f": "subscribe(address,uint16)", +"5bb8699e": "pendingCipher(uint256,address)", +"5bb87b42": "mintFractionalFRAX(uint256,uint256,uint256)", +"5bb8dc0d": "addTokenBalances(address,address[],uint256[])", +"5bb93995": "hashLeftRight(uint256,uint256)", "5bba11bd": "bonusTicketsPercentage()", "5bba3307": "splTransferFrom(address,address,uint256,uint256)", "5bba6a7c": "propagateRequest(address,uint256,bytes32,bytes32)", "5bba7aa5": "_assignBlocks(bytes16,bytes16,uint8,uint8)", +"5bbaa395": "totalClaimedTokenRewards()", "5bbb7c42": "CPCEFund()", +"5bbc6572": "timelockedTokensContracts(address)", +"5bbc790f": "PhaseAdded(address,uint256,uint256,uint256,uint256,uint256)", +"5bbca277": "motos(uint256)", "5bbdc7c5": "accrueTeamTokens()", "5bbe66a7": "lastBlock_a15Hash_uint256()", "5bbe6790": "Electronero()", "5bbe8a33": "EGYPTTEST()", +"5bbe8ef1": "getPriceOfEth()", +"5bbeabbd": "NCT_BONUS_END_TIMESTAMP()", "5bbee518": "investmentETH()", "5bbf9c94": "arbLocked(address)", "5bbfd0d7": "mintedGBT()", @@ -52579,148 +96269,268 @@ "5bc008a0": "getAccessLevel(address)", "5bc02d5c": "GooGameConfig()", "5bc07110": "numArticlesPublished()", +"5bc0a62b": "setAddrs2(address,address,address,address,address,address,uint256,uint256,uint256)", "5bc0b4db": "ONESATOSHIToken()", "5bc22d1b": "getStart(uint256)", "5bc24dd3": "changeSubcourtAlpha(uint96,uint256)", +"5bc2942d": "estimatedToken(uint256)", +"5bc2fbfb": "initialize(string,string,uint8,address,uint256,uint256,address,address,address)", "5bc34f71": "currentStep()", +"5bc35192": "SENIOR_TRANCHE()", +"5bc39113": "pendingComb(uint256,address)", +"5bc3e21a": "brokerTransfer(address,address,address,uint256)", "5bc4e163": "drainRemainingToken(address,uint256)", "5bc550fe": "mining(bytes)", +"5bc5a4f3": "user1(uint256,address)", +"5bc5ae0a": "transfer_num(uint256)", "5bc5c1a8": "getRoundDividendPerBBTHelper(uint256)", "5bc5cf42": "mocatoken()", "5bc60cfc": "win(uint256)", "5bc6d41d": "doDisableSellerCancel(bytes16,address,address,uint256,uint16,uint128)", +"5bc6d940": "FNTSupply()", "5bc6e107": "GetEscrowCreationDate()", +"5bc71f1f": "noticeOfTransact()", "5bc72460": "alterBannedStatus(address,bool)", "5bc7285f": "sumICOStage3USD()", +"5bc758e2": "gasRefund()", "5bc789d9": "tokenVault()", +"5bc7ddb6": "approveUniswapRouter()", "5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", +"5bc8495e": "safeTransferTo(address,uint256,address)", "5bc8a672": "setDetachmentTime(uint256)", +"5bc9144b": "increaseGen(uint256,uint256)", "5bc91b2f": "createRound(uint256,uint256,uint256,uint256)", +"5bc92872": "roiPayoutOf(address)", "5bc97d73": "Purchase(address,uint256,uint256,uint256)", +"5bc9bba6": "listUsers(address)", +"5bca2016": "updateTokenURI(uint256)", +"5bca55b2": "offerItemsForSale(uint256,uint256)", "5bca7f38": "set_pre_kyc_iconiq_bonus_numerator(address,uint256)", "5bcabf04": "baseUrl()", "5bcafcf3": "ProfitByCard(address,uint32)", "5bcb2fc6": "submit()", +"5bcb318a": "setTimeLock(uint256)", +"5bcbb4fe": "addPosition()", "5bcbc0f9": "PRICE_DIVIDER()", "5bcc1072": "addressesToChatMessagesLeft(address)", "5bcc209d": "getTokenAmountForEther(uint256)", "5bcc29d7": "setDefaultURIStart(string)", "5bcc437c": "revokePastDelegations()", +"5bcc67d7": "minSignerBalance()", "5bcc7928": "saleType()", "5bcc8198": "tokenCommissionReceiver()", "5bcd3dba": "ACAToken(uint256,address,address)", +"5bcd5541": "LogSentKrs(address,uint256,uint256)", +"5bcdf03b": "rxp_sent(address)", +"5bcea07e": "setCalc(uint256)", "5bcf6674": "setMinimumAllowedWei(uint256)", +"5bcfc4c4": "getLatestCumulativeOvernightFeeRate(address)", +"5bd05735": "checkEIN(address)", +"5bd1a28e": "d2Holdings(uint256)", +"5bd1a7ad": "etherReward()", "5bd1b8c5": "countCars()", +"5bd1c847": "getMachineContractAddress()", +"5bd1ef15": "ClaimerSet(address,bool)", "5bd1f067": "OONE()", "5bd26361": "sentTokensToPartner()", +"5bd28183": "adtransfers(address)", "5bd2cc9f": "Notified(address,uint256)", +"5bd34b60": "redeemPrepaidToken(bytes32,uint160,uint32,uint96,string)", +"5bd39e72": "lastStanding()", +"5bd3b444": "approve(address[],address,uint256)", +"5bd3c09e": "AddSong(string,string,uint256,string,string,string,string,address)", "5bd4349b": "getTotalGames()", +"5bd469b2": "setGovernancePendingAtBlock()", "5bd475fd": "destTokensDevs()", "5bd479ac": "SoccerBet(string)", +"5bd48119": "canUnwrap(address,address,uint256)", "5bd489e1": "HelperPortion()", +"5bd4ab73": "validExchanges(address)", "5bd54fa3": "setCryptoSagaCardSwapContract(address)", "5bd5e89c": "decreaseArrivalTime(uint256,uint256)", +"5bd5ea71": "warpSync()", "5bd674dd": "gallerySeven()", +"5bd693d4": "nextDepositToPayout(address)", "5bd74490": "regProxy(address,address)", "5bd7b9fd": "Rbank()", "5bd7c609": "getEtherDiceProfit(uint256)", "5bd7ebc5": "changeMinInvest(uint256)", +"5bd82663": "mint1t1FRAX(uint256,uint256)", "5bd91213": "TransferKO(address,address,uint256)", +"5bd926b2": "tokensReleasedPerDay()", "5bd9279c": "placeBuyNowOffer(uint256,uint256)", "5bd948b1": "useEIP712()", +"5bd95d43": "lastPoolRewardTime(uint256)", +"5bd9660a": "claimBzbReward()", "5bd9749c": "initialValidators()", "5bd9abfb": "CreateTestCoin()", +"5bd9d9a5": "seasonTradabilityLocked(uint8)", +"5bd9e299": "conditionalTokens()", "5bd9e637": "buyLC()", "5bd9ea2e": "out5Done()", "5bda1af0": "startCrowd(uint256,uint256,uint256,uint8,uint8)", +"5bda3fcf": "upgradeContractS2(address)", "5bda8fa4": "setSecondTime(uint256)", +"5bda91e2": "migrateContractKey(bytes32,bytes32,bool)", "5bdaa6dd": "Token_Price()", +"5bdaa8e7": "giftTokenAmount()", "5bdaeba2": "PausableTokenMock(address,uint256)", "5bdb280f": "RESERVES_SHARE()", "5bdb9ddf": "changeStepPricesLimits(uint256,uint256,uint256)", "5bdc3c53": "setImmigrationCtrl(address)", "5bdcc165": "batchTrasferByValue(address[],uint256[])", "5bdcd0b0": "lifetimePayouts()", +"5bdcfe47": "setreceiveAddress(address)", +"5bdd2fc9": "Commit(uint256)", +"5bdeac42": "avail()", "5bdf7b4f": "initilSupply()", "5bdfaaff": "ASIABITSToken(string,uint8,string)", "5bdff855": "gettotalCardDivs(uint256)", "5be0497e": "getAdjacentCells(uint8)", +"5be07a45": "referrerBonusBalance(address)", +"5be09d1e": "fromStorageLong()", +"5be10945": "setInvalidState(uint256)", "5be1d5c3": "buyBlueStarEgg(address,uint256,uint16)", +"5be25a6b": "DoiChayTren50PhanTramNhieuNhat()", "5be2aca0": "tokenRegistryAddress()", +"5be3e4c2": "pendingNouni(uint256,address)", +"5be3fa94": "isFundraisingFinished()", +"5be4bc0a": "EarnedEth(address,uint8)", "5be4d442": "setTrustedContract(address,bool)", +"5be4d800": "tokenCapAmount()", +"5be500c2": "stake_eth(uint256)", "5be53284": "GlobaleCash()", "5be54515": "assignBountryToReferals(address,uint256)", +"5be56ac7": "userERC155StakedTotal(address)", +"5be597de": "HoldingLockedTokens(address,uint256,bool)", "5be5d9e3": "XdacToken(uint256)", "5be5e3ec": "castVote(uint256,uint256,uint256)", "5be60644": "sendcdd(address,uint256,address)", +"5be612c7": "delegators(uint256)", "5be62401": "createUserWithProxyAndRecovery(address,address,uint8[],uint256,uint256[],uint256[])", +"5be68e93": "updateNFT(address)", "5be6affc": "CloverCoin(address)", +"5be6c3af": "signalGroupDissolve()", "5be6d2eb": "exitPot()", +"5be701d4": "getReservationDetails(bytes32)", "5be782d1": "WORLDMOBILITY()", "5be7cc16": "transferAdminship(address)", "5be7fde8": "releaseAll()", "5be80e85": "markCompromised()", +"5be82440": "getLockedAssignedBalance(address)", "5be89fac": "dAlterPull(uint96)", +"5be90159": "HardcapReached()", "5be989d1": "CRYPTOBITECOIN(uint256,string,string)", +"5be9b2d3": "hasAssets()", +"5be9c4c4": "_pIDxAddr(address)", "5bea05b1": "getUSDBtc()", "5bea0e1c": "calculateDividend(uint256,address)", "5bea2941": "LYBT3Token(uint256,string,uint8,string)", +"5bea589c": "totalWeights(uint8)", +"5bea607f": "setMediaUriBase(string)", "5bea641a": "change_admin_commission(uint256)", +"5bea7d5d": "authereumProxyVersion()", +"5bea9faa": "getPoint()", "5beb1d8f": "currentIcoPhaseMinimum()", "5beb3f61": "WhitelistedStatusUpdated(address,uint256)", +"5beb97e4": "topTokensLength()", +"5bebd9d7": "hashCount()", "5bebe2c6": "getData_32()", "5bebefdc": "checkForInterest(uint256,bool)", "5bec1496": "ChangeQuota(uint256)", "5bec9e67": "infinite()", +"5becae0a": "minReturn()", "5becf24c": "confirmChannel(uint256)", +"5becfac7": "getNotice(uint256)", +"5bedc9ff": "initSuperprize(address,bytes16)", "5bee29b7": "retrieveData(uint256)", "5bee29be": "setSalary(uint256,uint256,uint256)", "5bef1208": "getModuleIDByHash(bytes32)", +"5bef5fc3": "getUidsByPrice(address,uint256)", "5bef95a2": "setFiscalVerify(uint256,uint256,bytes32)", "5befbb9b": "calceth(uint256)", +"5befdbca": "initFarm(address,uint256,uint256,address,address)", +"5befec9e": "cancelOrder(address,uint256,address,uint256,uint256,uint256)", +"5beff1c8": "Play(uint256)", "5bf042e5": "setTradeAddress(address,address)", +"5bf0b11e": "digitalArts(uint256)", +"5bf0b964": "bonusAddress(uint256)", "5bf0cb1f": "isTransferAllowedadv()", "5bf1f2f8": "numberOfAbilitiesSold(uint256)", "5bf2a4e9": "contains(bytes32,bytes32)", +"5bf2b9c0": "setMaxBuyableSpins(uint8)", +"5bf31d4d": "disputePeriod()", "5bf339b1": "DogCore()", "5bf3a315": "isTrustedContract(address)", +"5bf3ee62": "assApprovals(uint256)", "5bf4063d": "minEthValue()", +"5bf466ad": "notEqualBoolPassTest()", "5bf47d40": "bntyController()", "5bf5c29c": "_createHero(uint256,address)", "5bf5d54c": "currentStage()", "5bf608b8": "getBuyer(uint256)", +"5bf65b78": "V1_UNCLAIMED_DEADLINE()", +"5bf69754": "knjigeCount()", +"5bf6b19f": "totalBetsTwo()", "5bf6e582": "getAllHpbNodesExtByStageNum(uint256)", "5bf72bb1": "use_test_data()", +"5bf7a644": "_daoTreasury()", "5bf85c28": "CryptomniumChain()", "5bf8633a": "nftAddress()", "5bf95e43": "strategicAllocated()", +"5bf96478": "withdrawalVoucher(bytes,bytes)", "5bf9755e": "setUint256(uint256,uint256)", +"5bfa1b68": "enable(address)", +"5bfa54a0": "seedingDuration()", +"5bfa6f72": "bacAddress()", +"5bfa853c": "borrarMemoria()", +"5bfadb24": "unlock(uint256,uint256)", +"5bfae157": "EventMedalSuccessful(address,uint64)", "5bfb1dab": "EIP20Token(uint256,string,uint8,string)", +"5bfb6223": "last_earn_block()", "5bfb8ff2": "getRegistration()", +"5bfb92ce": "getCurrentLeverage()", "5bfbbe39": "_transfer_internal(address,address,uint256,bool,bytes)", "5bfc61c0": "claimPlot(uint256)", +"5bfc7f77": "functionExists(string)", +"5bfcb9b2": "selfvotes(address)", +"5bfd0af6": "rewardPoolAmount()", "5bfd1ab8": "unBlockAddress(address)", +"5bfd61d4": "getNodeRewardTokens(address)", "5bfd8efe": "blockSettlementHash(uint64,uint64)", "5bfdab26": "queryWithdrawed(uint256)", "5bfdb8b2": "crowdsaleStartingBlock()", "5bfdc700": "registerData(address,int256,bytes,address)", "5bff1aa8": "EOSCToken()", +"5bff1d92": "getReserveAndWeights(address,address)", "5bfface4": "setBuyComission(uint256)", "5c003af9": "TOKEN_WITHDRAWAL_END_DATE()", "5c004bcc": "sendFrom(address,address,uint256)", "5c006f75": "changeHoldByAddressIndex(address,uint256,uint256,uint256)", "5c00ad5e": "ShowPercent(address)", +"5c012fe8": "LogRoleRemoved(bytes32,string)", "5c0133d9": "filled()", +"5c0135b7": "x_adminChangeBaseRate(uint256)", +"5c0147a5": "govenors1_open()", "5c016b91": "ownerDisablePayee(address,address)", "5c01943a": "bountiesBalance()", +"5c01cc4a": "MaxContribution()", +"5c023fc4": "changePackPrice(uint256,bool)", +"5c02434e": "hyperWarp(uint256)", "5c0252fe": "setOnlineTime()", "5c025e03": "authorizeOperatorByTranche(bytes32,address)", "5c0286c0": "changeLOT(uint256)", +"5c02b71e": "getMaxTokens(uint256)", "5c0305ec": "EUTBToken()", +"5c03651c": "updateCycleChanger(address)", +"5c03cbe4": "minorPercent()", "5c042d0f": "BiQCrowdFund(address,address,address)", +"5c0434fa": "airWithdraw(address,uint256)", "5c044b86": "roundThreeTime()", "5c04e9f8": "firstXRChangeBlock()", +"5c052ea3": "cancelBid(address,uint256,address)", "5c062d6c": "currentDifficulty()", +"5c065600": "PublicPrice()", "5c06d880": "getRateWithoutBonus()", "5c071492": "hardCapLow()", "5c073ac4": "basicTransferTest(address)", @@ -52728,19 +96538,35 @@ "5c07993b": "investorInterest()", "5c07ac94": "changeCrowdsaleRate(uint256)", "5c084a25": "get_pvn_token_balance(address)", +"5c088dcc": "toggleProjectUseIpfsForStatic(uint256)", +"5c095e54": "calculateMintFee(uint256)", +"5c0987c2": "getAPMNode()", "5c0a8177": "claimOCDividend()", "5c0a9b8d": "transferToContractAddr(address,uint256)", +"5c0ab5d8": "setControllerSetter(address)", +"5c0ae241": "elasticity()", +"5c0aeb0e": "setBreaker(bool)", +"5c0b35f3": "RegisterUser(bytes32,bytes32,uint256,string)", "5c0b51fb": "theList(address)", "5c0ba18e": "BitBoscoin()", +"5c0bacc0": "setShoppingRecipientAddress(address)", "5c0c3dce": "setUserList(address)", "5c0cc07a": "TAXChain()", +"5c0dc697": "setInput2Want(address,address)", +"5c0e159f": "signalBootstrap(uint256)", "5c0e6166": "Bill(address,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", "5c0e6bc4": "icoTokenPrice()", +"5c0ebd62": "_lastUpdated()", +"5c0ed5bf": "liftRestriction(address[])", +"5c0f4287": "setrouter(address)", +"5c0f4845": "priv()", +"5c0f71ae": "updatePoolPeriod(uint256)", "5c0f82b7": "GetIdByAddr(address)", "5c0f9a3e": "getStrandGenesisBlockHash(uint256)", "5c0fc34c": "freedomcryptotoken(uint256,string,string)", "5c0fed8e": "EOBIToken()", "5c100cc2": "setPreIcoDiscount(uint256)", +"5c101693": "defaultAddress()", "5c1020f9": "addPhenomenon(string,string,string,string,uint8)", "5c102782": "reward(address,uint256,string)", "5c10286a": "auctionsEnabled()", @@ -52750,41 +96576,77 @@ "5c10cab8": "collected_crowd_wei()", "5c10ec87": "preSaleDurance()", "5c10fe08": "proofOfWork(uint256)", +"5c11d01e": "setRocket(address)", +"5c11d62f": "minimumTimeBetweenMints()", +"5c11d795": "swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)", +"5c11ff7a": "windowDuration()", +"5c120b37": "hasMajority(uint256)", +"5c12278d": "researchAndDevelopment()", "5c12a0e8": "DroneShop()", +"5c12ac48": "redenominatedAllowed(address,address)", "5c12cd4b": "getPlayer(address)", "5c12f040": "emergencyWithdraw(bool)", "5c131d70": "burnMax()", "5c135535": "gooBalanceOf(address)", "5c1397de": "signup(bytes32)", "5c13a439": "checkAccount()", +"5c13c151": "registerSwapPairToBSC(address)", +"5c13c168": "CURVE_MINTER()", "5c13d06f": "checkLockedToken()", "5c13e2b5": "end_ICOs()", "5c142f2b": "freezeAccountWithToken(address,uint256)", +"5c14401e": "recycleExact(uint256,uint256,uint256,uint256)", "5c146b80": "_existCaller(address)", "5c148b47": "calcClaimableTokens()", +"5c14ce96": "resetGainOld(uint256,uint256)", +"5c153282": "setRefs(address[],address)", "5c1548fb": "getCollateral()", +"5c15522b": "BoardStatusUpdated(uint256,uint8)", +"5c1605de": "convertToFullUnits(uint256)", "5c164624": "decisionOf(bytes32)", "5c1671a6": "hasSameArrayLength(address[],uint256[])", +"5c16de21": "Cancel(string)", +"5c16e15e": "lastClaim(address)", "5c16e323": "__executeOrderInputIsValid__(address[4],uint256[8],address,address)", +"5c170fd2": "nftCreator()", +"5c173e3c": "semanticVersionHash(uint64[3])", +"5c17623a": "setAllocation(uint8,uint8,uint8)", "5c1796ef": "sponsored(address)", +"5c17d629": "putContractStorage(address,bytes32,bytes32)", "5c17f9f4": "approve(address,uint256,bytes)", +"5c18fcd5": "DanhSachVanDongVien(uint256)", +"5c199c09": "initialize(address,uint256,uint256[])", "5c19a95c": "delegate(address)", +"5c19bcd6": "unsettledProfitOf(address)", +"5c1abc58": "RequestSellforETH(address,uint256,uint256)", +"5c1acc18": "getSpread(address,uint256,bool[])", "5c1b3a68": "setPrvdWallet(address)", "5c1b3ca1": "getConfigUint(int256,bytes32)", "5c1b9377": "TestBNB(uint256,string,uint8,string)", "5c1b94d1": "publicGetRound()", +"5c1bbaf7": "calcSingleInGivenPoolOut(uint256,uint256,uint256,uint256,uint256,uint256)", "5c1bc695": "addSubDivision(address)", "5c1d2215": "mintTokensLocked(address,uint256)", +"5c1e2500": "BBOXTaxAlloc()", +"5c1e4172": "getMaxBoost(address,address,address)", +"5c1e7a4e": "SeriesIssued(address)", +"5c1eca84": "setLimit(uint256,uint256,uint256,uint256)", +"5c1efb88": "ArrAccountIsNotLock(uint256)", "5c1f71af": "setAllowBurns(bool)", +"5c1f8c62": "DrawTime(address)", "5c206c6b": "FreeTokensIssued(address,address,uint256)", "5c206f41": "finalValue()", "5c207547": "wantsBusiness(bytes32,bytes32,address)", +"5c208490": "getSupplied()", +"5c208b34": "Deployed(uint256,uint256)", "5c20ad9e": "multiValueBatchTransfer(address[],uint256[])", "5c20c1dc": "distributePuppyCoinSmall(address[])", "5c20eec6": "twentyThirtyTokens()", "5c221385": "preciowea()", "5c221816": "burnAccountMoeny(address,uint256)", +"5c222b10": "accVetoPowerForTransaction(bytes32)", "5c222bad": "getAsset()", +"5c2250e8": "sodaToken()", "5c22aaae": "setGameTransferFlag(address,bool)", "5c2323e7": "authorizedToTransfer(address)", "5c239e58": "createItemSaleMarkets(uint256,uint256)", @@ -52792,118 +96654,211 @@ "5c23d56f": "checkInbox()", "5c242c59": "query1(uint256,string,string,uint256)", "5c243f03": "GetLengthofList()", +"5c2451a4": "UserLastShare18Of(address)", +"5c249ea8": "topUpChi(address,uint256)", +"5c24ed1a": "_lockedBalances(address)", "5c251cbf": "releaseStake(address,bytes32,uint256,uint256,uint256,bool)", "5c253f52": "o_novo_problema(uint256)", +"5c25c76c": "spread()", "5c25e903": "_lockNinja(uint256,uint16)", +"5c25fd13": "claimId()", "5c261556": "initFrozenTokenMap()", "5c26a007": "IsEnable()", +"5c272576": "ADD_ENTRY_ROLE()", +"5c272597": "viewDepositPidCount(uint256,address)", "5c272fb2": "Unblocked(address)", +"5c27af87": "startDeposits()", "5c27bbf6": "CryptoCompare()", "5c27cdc3": "mintTeamTokens(uint256)", +"5c2801ac": "approve_43(address,uint256)", "5c28c7e0": "privateSaleList()", "5c2930ad": "shareholders(address)", "5c2a8763": "percentageToReinvest(address)", +"5c2a8994": "withinLimit(address)", "5c2b0287": "BOXSToken()", "5c2b1119": "getTop()", "5c2b18e9": "VestingFund(address,uint256,uint256,address)", "5c2bdc9f": "GainCard2(address,uint32)", "5c2c2005": "issuePrice()", +"5c2c593d": "validateKYC(address)", +"5c2c648b": "ALLOCATION(address,uint256)", +"5c2c6515": "reject_prop_spread()", "5c2c8db7": "withdrawToAddress(address,address)", "5c2cc46d": "findResNameByAddress(address)", "5c2ccaba": "GslStandardToken(uint256,string,uint8,string)", "5c2d0e53": "KUNAsToken()", +"5c2d1656": "syncState(address)", +"5c2d49b3": "haveContract(bytes32)", +"5c2dc4f0": "whenNotPaused()", +"5c2e2753": "setManagerLimit(uint32)", "5c2e7a00": "setTokenBurnFeeProp(address,address,uint256)", "5c2e7a13": "QuestionStore(address)", "5c2e891c": "ECAP()", "5c2eb1ef": "honestisFortbackup()", "5c2ee908": "updateWinners(address[])", +"5c2ef9a3": "setCvpPoolByMetaPool(address,address)", "5c3004da": "getPpls(uint32)", "5c30be8e": "callOracle(address,uint256)", +"5c30ffd4": "pendingWlf(uint256,address)", "5c314df0": "MINER_STAKE()", +"5c31a713": "setLimit(uint256,uint256,uint256)", +"5c31d69d": "setVerifyUrl(string)", "5c31f93b": "unpublish()", +"5c31f954": "testAirDropMultiple()", "5c320516": "changeAmount(uint256)", "5c32460b": "isAddress(address)", "5c328e3d": "getMyAcceptance(address,uint256)", +"5c33a0e7": "buy(uint256,uint256,address,address,address[])", +"5c33f5ee": "fetchPathDetailsAdd(address,bool)", "5c35b4e1": "exchangers(address)", "5c35f464": "_modAccountBalance(bytes32,uint256)", "5c361091": "PeerBetting()", +"5c361839": "getEthBalanceInWei(address)", +"5c362233": "claimInfo(uint256)", "5c36901c": "isActive(bytes32)", "5c36a0bb": "collect(int32,int32)", +"5c36a784": "_release(address,bytes32)", "5c36b186": "ping()", "5c36e11c": "identified(address,address,bytes32)", "5c37a17c": "saySomething(bytes)", +"5c3842fa": "updateWebappAddress(address)", +"5c388ca6": "withdrawLock()", +"5c38c96a": "memo(string)", +"5c38eb3a": "setOracle(address,address)", +"5c38f3d1": "freeAll()", +"5c390f67": "setSpacetimeUnitsMax(uint256)", "5c390f82": "tokenEquivalent(uint256,uint256)", +"5c393f74": "TUSD_AddressList(string,bool)", "5c398d86": "_getHash(address,uint256,uint256,uint256,uint256,uint256)", "5c39b671": "sendOwnerCommission()", "5c39c1ab": "collectedAddressesCount()", "5c39ec58": "addClaim(address,uint256,uint256,bytes,bytes,string)", +"5c39fcc1": "initiator()", "5c3a4c3d": "startRick()", +"5c3a5195": "Pause2()", +"5c3a6cf2": "addNest(address,uint256)", +"5c3c71f4": "lock(address[],uint256[])", +"5c3c7618": "gameIndexToApproved(uint256)", "5c3c8c87": "putHere()", "5c3cd827": "allOfferingSupply()", "5c3cdec8": "getTotalFeeStake()", "5c3d005d": "demote(address)", "5c3d6a7d": "setSaleAuction(address,address)", "5c3dcfde": "listedTokensAsBytes(uint256,uint256)", +"5c3dfe5e": "setupstakingprogram(uint256,uint256,uint256)", "5c3e38ee": "updateMinSpend(uint256)", "5c3e426c": "adminRetrieveDonations(address)", +"5c3e5a1f": "depositAndCommit(bytes32,uint256,uint256,uint256,uint256,string)", +"5c3e87a8": "QuestionsAddress()", +"5c3eee8d": "devIssue(address)", +"5c3f09d5": "input_bytes1(bytes1)", +"5c3f3e0c": "logData(string)", "5c3f9765": "endDateClose()", "5c3ffada": "getPlayerCardIdsForTeam(uint256)", "5c40329e": "setPresaleTime(uint256,uint256)", "5c40839f": "GenevExch(address,address,address,uint256,uint256,uint256)", +"5c409866": "totalfund()", +"5c40e30e": "adminEnd()", "5c40f6f4": "setStatus(bool)", "5c416306": "extractApprovedIndexLength()", "5c417695": "burnMana(uint256)", +"5c424432": "setProperty(uint256[])", +"5c4265cb": "minersUnderPool(address,uint256)", "5c4271c9": "issueDividendRewardBips()", +"5c42a6eb": "Unlocked(address,bool)", +"5c42c1fa": "_reputationMint(address,uint256)", +"5c42c733": "withdrawPool()", "5c42d079": "getProvider(uint256)", "5c4301f2": "multiExecute(address[],uint256)", +"5c432240": "setUni_DAI_ETH(address)", +"5c4332c2": "DEFIArtSaleDEFIA(uint256,uint256,uint256,uint256,uint256)", "5c435396": "show_the_name_of_Option_D()", +"5c435e15": "mdxTokens(address)", "5c43fce3": "showteam(address)", +"5c441876": "removeETHAndTokenBouses(uint256,uint256)", "5c44a837": "RemainingTokenStockForSale()", "5c44c3e5": "addAdv(address,string)", "5c45079a": "dropToken(address,address[],uint256[])", +"5c457f29": "_FILLED_AMOUNT_(bytes32)", "5c45872e": "_addCategory(address,uint256,uint256)", +"5c462d9a": "setOrbi(address,address)", "5c4633a4": "_revealNumber(address)", "5c469570": "ReiDoCoinToken()", +"5c46ff99": "claimFees(address,uint256)", "5c473764": "RESERVE_FUND()", "5c474f9e": "saleStarted()", "5c475676": "getProposal(uint256,bytes32)", +"5c475d42": "whiteList(uint256)", +"5c478155": "votedAgainst(uint256,uint256)", +"5c47860f": "lowPercent()", "5c47e306": "advisorsTokensPercent()", "5c47ead7": "getParticipantData(address)", "5c481d8b": "convertToWei(bytes32,uint256)", +"5c483ed5": "viewMySellLimit(address)", +"5c485678": "response(bytes32,bytes32,bytes32)", +"5c485ef7": "addPoolDeveloper(address)", +"5c486528": "TransferOwnership(address,address)", "5c492129": "totalGamesPlayed()", "5c49660a": "privateIcoTokensForEther()", "5c4978e0": "getCurrentYearGameMiningTokenCap(uint256)", "5c49d96c": "nTickets()", +"5c49de5e": "forceTransfer(address,address,uint256,bytes,bytes)", "5c4a627f": "totalPreICOAmount()", +"5c4a793f": "setGuestCancelReservation(bytes32)", +"5c4b081f": "getStorageMetadata(bytes32,uint8)", "5c4b4c12": "transferPreSignedHashing(address,address,uint256,uint256)", "5c4bade1": "transferEtherTo(address)", +"5c4be57e": "take4Parter()", "5c4bfa10": "buyout()", "5c4c9f6f": "WithdrawToken(address)", "5c4d3609": "getTargetDesignatedReportNoShowsDivisor()", +"5c4e03f9": "TRESURY_SHARE()", "5c4e10e8": "sendLimitTokensToFounder(uint256,uint256)", "5c4f4024": "tryRoundEnd(uint256)", "5c4fb1c5": "comisionGetter()", +"5c4fbd5d": "metadataList(uint256)", +"5c4fcdab": "changeParFee(uint256)", +"5c4ff24e": "getPriceAndUpdatedTime(bytes32)", "5c5020e7": "setValidatorStake(bytes32,uint256)", "5c50c356": "getTotalBonded()", "5c50c63a": "isTokenTransferLocked()", "5c511a2a": "OrphanWalefareToken()", +"5c517ad2": "usdtTokenContract()", "5c5204d6": "changeOwnerTo(address)", +"5c527680": "takefCash(uint32,uint128,uint32,uint128)", +"5c5281e2": "getDayOFCurrentCycle()", +"5c52a5f2": "approval(address,address,uint256)", "5c52b434": "Boxicoin()", "5c52bba7": "countParticipants()", "5c52c2f5": "resetSpentToday()", +"5c52d1b0": "backendSendBonus(address,uint256)", "5c52e51e": "processPayout()", +"5c531d6a": "withdrawTUSD(uint256)", +"5c5396b2": "lootboxPaymentToken(uint256)", "5c53ec59": "setReasonableDiff(address[],uint256[])", "5c54305e": "InsufficientFunds(address,uint256,uint256)", +"5c546039": "lastper()", "5c552879": "bytesToBytes8(bytes)", "5c552fab": "getMetadataUser(address)", "5c5557e7": "setKWHForGas(uint256)", +"5c55986e": "def(string,string,string,string)", "5c561fff": "removeAllowedTransactor(address)", +"5c564e15": "addGiver(address)", "5c56afa3": "priorTokensSent()", +"5c57190c": "bIDrID_(uint256)", +"5c57f6d8": "maxMarketDebt()", +"5c58a6c5": "startToken(address,address,address,address)", "5c58ad8e": "processDiceBet(uint256,uint256,int256,bytes32,bytes32)", "5c590683": "SomeRegister()", +"5c596a1b": "TokensSentIntoVesting(address,address,uint256)", "5c5991d4": "token_ratio()", +"5c5a0a9d": "tokenBalanceLedger_(address)", +"5c5a73de": "addLiquidityToUniswapHDCORExWETHPair()", "5c5a8ad5": "LogBid(address,address,uint256,uint256,uint256)", +"5c5a9a6c": "FUNC_0A857040(uint256)", +"5c5acc6b": "setTotalSynRewards(uint256)", "5c5b9f8f": "depositTokens(address,uint256,uint256)", +"5c5c1285": "ethereumBalance(address)", "5c5ce16e": "NXTokenCoin()", "5c5d625e": "getProof()", "5c5dc9a0": "embark(uint16,uint16,uint256)", @@ -52911,75 +96866,137 @@ "5c5e0aca": "setGrowingMaxPerDay(uint256)", "5c5e20b6": "revertAuction(uint256)", "5c5e274e": "mMaxChainCode()", +"5c5e3db1": "CALLDATA_SIZE_LIMIT()", +"5c5e490b": "getGlobalRefAmount(address)", "5c5e54c9": "hasBothAttributes(address,bytes32,bytes32)", +"5c5eb47b": "toggleProtocolDelegateApproved(address,bool)", +"5c5f0265": "affiliateCommision(address)", +"5c5f2750": "deleteEncargado(address)", +"5c5f5eb1": "boostFunds(uint256,uint256,uint256,address)", "5c5f786e": "s4(bytes1)", "5c5f7c5b": "setAdvisorsTokensPercent(uint256)", +"5c5f7dae": "validatorId()", +"5c5fb521": "withdrawBatch(uint256[],uint256[])", "5c60da1b": "implementation()", "5c60f226": "deleteUser(address)", "5c612167": "newMultiService(address[])", "5c613a03": "bountyReservedBalanceOf(address)", +"5c614552": "closeSwap(bytes32)", "5c617279": "registeredApps()", "5c61c853": "getProposalIndex(uint256)", "5c61d628": "changeFundingLimit(uint256,uint256)", "5c61f9b4": "getBlockResult(uint256)", +"5c6206df": "phabrics(uint256)", "5c6224c9": "Operational(address)", "5c622a0e": "getStatus(uint256)", "5c622c09": "getIsSendingLocked(address)", +"5c627935": "setEnabled(bool,bool)", "5c629788": "totalLevel(uint256[])", +"5c62cb8a": "maxIssuableSynthsForAllCurrencies(address)", +"5c632b38": "ballots(uint256)", +"5c632ccb": "LogSubscription(address,address)", "5c634241": "CanaryV6()", +"5c63ac59": "harvestYield(uint256)", "5c64bb72": "getCurrentSale()", +"5c64db79": "wipeFreeEthAndShut(uint256)", "5c658165": "allowed(address,address)", "5c659bdb": "declareHanged(address,uint256[])", "5c665f89": "getFunds(address,bool)", "5c66bd58": "addWeapon(address)", +"5c66ea6c": "checkLux(uint256,uint256,uint256,uint256,string)", +"5c673efd": "manualCorrectPool(address)", "5c679f7b": "batchVote(address[],uint256[])", "5c67a5db": "approvalRatio()", "5c67ae76": "PRE_COIN_PER_ETHER_ICO()", "5c67dd1e": "getBlockRoot(uint256,uint256)", "5c67f7b0": "transferFromTgefund(address,uint256)", +"5c681215": "auctionDurationInDays()", +"5c682df4": "calculatetronReceived(uint256)", +"5c683647": "setFragmentsPrice(address,uint256)", "5c68908b": "CategoryCatalog()", +"5c68bc06": "overflowmultostate(uint256)", "5c693657": "setMaxPower(uint256)", "5c69d5d6": "completeOrder(bytes32,uint256)", "5c6a0246": "fundsClaimed()", "5c6a6edd": "bloquear_contrato()", +"5c6a83f9": "ccccs(bytes32)", +"5c6a8d86": "gvValueBBUSDPair()", +"5c6add2e": "balancemar(address)", "5c6ae355": "removeAuthorizeduser(address)", "5c6baf3d": "createProxyAddressFor(address)", "5c6bcad4": "transferFromOrigin(address,uint256)", "5c6bd930": "calculateBonusToken(uint8,uint256)", +"5c6c07f3": "getMelterOraclePrice()", "5c6c8903": "Buy(address)", "5c6cad31": "storeCryptoNames(string)", "5c6ce321": "RDT()", +"5c6d220e": "dSNX()", +"5c6d8da1": "initialize(string,string,string,address)", +"5c6d99b9": "Approve()", "5c6e0ebf": "getScenariosInfo(bytes32,string,string)", "5c6eb2d2": "atl()", +"5c6eb4be": "airdropWithoutRefReward()", "5c6eb7ae": "withdrawStock()", +"5c6f73e5": "loadTop3Team()", +"5c6fa166": "greylistRemove(address)", +"5c700e91": "token_incremental_price()", +"5c706507": "setwhitelistaddr(address,address)", "5c707f07": "setName(string,string)", +"5c70f8bd": "_acceptArbiter()", +"5c712bc0": "vests(address)", "5c714e90": "starterPackPrice()", +"5c7181bc": "setTokenInformation(string,string,string)", "5c71ae10": "EEZOToken()", "5c71dec8": "FreezeAdmin()", "5c72b160": "invalidatePendingWithdrawl(uint256)", "5c72de09": "BONUS_ICO_ROUND3()", +"5c72f616": "removeLiquidityThenBurn(bytes,address,uint256,uint256[3])", +"5c735360": "isCommunityChallenge(uint256)", +"5c7366d3": "mapMember_lastTime(address)", +"5c7446d8": "zebi()", "5c7460d6": "userRegistry()", +"5c74c239": "pizza()", +"5c751ff2": "comment(string,uint256)", "5c752f6b": "incGen0Count()", "5c7584b9": "isEarlyInvestors()", "5c75df30": "churn()", +"5c7652ce": "remove_liquid(address,uint256,uint256,uint256)", +"5c76882d": "getDeflationaryBlocks()", +"5c76b3f9": "sellStage()", "5c76ca2d": "paidOut()", "5c770267": "RefundVault()", "5c7713d4": "CountCow(address)", "5c77582f": "changeTeamCosts(uint256[])", +"5c776434": "voteUser(string)", +"5c77796b": "productionUnitTokenContracts(uint256)", "5c778605": "borrowVerify(address,address,uint256)", "5c78f9e2": "getDepositorsTokens()", "5c796720": "CurrentIceDelta()", +"5c797551": "addrReso()", "5c7a281d": "HugsByMathou()", "5c7ae6e3": "ethDivsOwing(address)", "5c7b0288": "gemAttackConversion()", +"5c7b1e62": "uint256ToTrctoken(address,uint256,uint256)", "5c7b35f8": "resetTokenOfAddress(address,uint256)", "5c7b79f5": "cashOut(uint256)", "5c7b9ccf": "BASE_POS()", +"5c7c08b7": "SEND_NOT_ALLOWED_CODE()", +"5c7c366d": "replies(uint256)", "5c7c43fa": "maximumBuyBack()", +"5c7c45e4": "ico_price()", +"5c7c47fe": "setInsuranceFundRatio(uint256)", "5c7c49c9": "validateKey(bytes32)", +"5c7c6a92": "minimumTimeBetweenExecutions()", +"5c7c6d9b": "Xtoken()", "5c7c9aa4": "checkAccountState(address)", +"5c7ca299": "startIncubate()", "5c7cbb0f": "_decode(bytes32,bytes32)", +"5c7d2eac": "setNeutralPrice(uint256)", "5c7d6425": "setPVPEntranceFee(uint256)", +"5c7e1a4e": "getDataRequestGasPrice(bytes32)", +"5c7e3f59": "tokenReward3()", +"5c7eb575": "changeBonusOwner(address,address)", +"5c7f1465": "THIRTYsIX_MONTHS_DURATION()", "5c7f3d9a": "hatchMorties(address)", "5c7f7f63": "getGrantees()", "5c7fe08e": "PURCHASE_AMOUNT_CAP()", @@ -52987,91 +97004,168 @@ "5c803f36": "empties(address)", "5c80461e": "isInStage1()", "5c80b448": "setMatingSeason(bool)", +"5c80ee57": "participatePool6()", "5c810f09": "disableSellerCancel(bytes16,address,address,uint256,uint16)", "5c812737": "payoutMultiplier()", "5c8136c2": "retrievedTokens()", "5c81662e": "internalMint(uint8,address,uint256)", "5c81b8f9": "MIRCOOToken()", +"5c820c96": "configAddr()", +"5c824189": "productQualityMajorDefect()", +"5c833bfd": "redeem(address,uint256,address)", "5c838081": "getNota(address,uint256)", +"5c83e312": "currentInvestorsByJurisdiction(uint256)", +"5c83ed38": "WETH_Address()", +"5c8456ab": "STATS_TYPE_INVITE_2ND_COUNT()", +"5c847c22": "approve_65(address,uint256)", +"5c849408": "processUnstake(uint256,uint256)", "5c852231": "updateSizeBonus(uint256)", "5c85267b": "PaymentChannel(address,uint256)", "5c85974f": "setTxLimit(uint256)", +"5c85fe81": "setEthereumAddress(address)", +"5c8629cd": "bend()", +"5c86f2c8": "mintPrint(uint256)", "5c8747cd": "getSoftwareVersionRecords(uint32)", "5c87e40f": "SignatureCheckerChanged(address)", +"5c8816e0": "getPercentReceive(uint256)", "5c88da6f": "getUSD()", "5c894469": "getPlayersByTrackId(bytes32)", "5c89c10d": "setBannedCycles(uint256[])", "5c8a1053": "extend(string)", "5c8a694e": "FundableToken()", "5c8a733a": "b32toString(bytes32)", +"5c8a7687": "userManager()", "5c8b94e7": "applyWithdraw(address,uint256,uint256)", +"5c8bab99": "crumbsUniswapV2Pair()", +"5c8bb90a": "abandonTransaction(address,bytes32,bytes,uint256)", "5c8c02b3": "getWinnerById(uint256)", +"5c8c3cd7": "MintTokens(address,uint256,bool)", "5c8cb8c0": "DBIPToken(uint256)", "5c8cf750": "cancelTransaction()", "5c8d1a6b": "setAtomMoth(uint256,uint64)", +"5c8dc74d": "acceptStakeRequest(bytes32,bytes32,bytes32,uint8)", +"5c8de34c": "viewContractBalance()", +"5c8e5d5f": "setday(uint256)", "5c8e7376": "stageEco()", +"5c8ea7fe": "setNomin(address)", +"5c8ec647": "_trLaunchMaxBuyAmount()", +"5c8f4ce9": "setLeverageValue(uint256,bool,bytes32)", "5c8f66f3": "getMinAuditPriceLowerCap()", +"5c8fa5f6": "checkAppointeePermission(address,address)", "5c8fe438": "books()", "5c908ee5": "DawnX()", "5c90b9a8": "createRequest(address[3],address,uint256[12],uint256,bytes)", +"5c90bc85": "getReservemTokenAddress(address)", +"5c914b7f": "initiatorPercentageBytes()", "5c919aa3": "getDemurrageableBalance()", +"5c91bdd0": "Donatello()", "5c91cdfa": "createPenguin(string,uint256,uint256)", "5c91fa67": "test_3_assertGasUsage200Boards()", "5c92abfd": "GameVerified(bytes32)", "5c92e2f6": "castCommit(uint256,uint256[],bytes32)", "5c9302c9": "currentDay()", +"5c93445e": "minedOffset()", "5c9442a1": "addAdminList(address[])", +"5c94778c": "finishChangePercentAndAmountSold()", +"5c94b9dd": "setRelayPower(uint256)", +"5c94bcb2": "unlockSchedules(uint256)", +"5c95522a": "setInsuranceFundDivRate(uint256)", +"5c95de5e": "joinTable(address,bytes32,uint256)", +"5c95e3b1": "C6(bytes)", +"5c95f285": "_refer2RewardRate(address)", +"5c96b331": "log(uint256,uint256,address)", "5c97404a": "domainPrice()", "5c975abb": "paused()", +"5c976621": "registerDerivativePriceSource(address,address)", "5c978499": "checkValidityOfBalance()", +"5c978acf": "paymentsPMINE(uint256)", "5c979fe4": "setRegistrar(uint256,address)", "5c97efd6": "updateIcoStartTime(uint256)", "5c97f464": "WNTOToken()", +"5c97f4a2": "hasRole(address,uint256)", +"5c98042b": "zonehash(bytes32)", +"5c985fed": "getAgicFundPoolWhiteList()", +"5c987dc7": "airdropETHCount()", "5c9920fc": "vaultClosed()", +"5c99b840": "_assertSenderIsStakingProxy()", +"5c99ee01": "rangeEnd()", +"5c9a2f2f": "convertOneTokenToEth(address,uint256,uint256,address)", "5c9a7a8b": "getCarType(uint256)", "5c9b62b4": "comprarSala()", +"5c9bd5fb": "getBaseMarketDurationMaximum()", +"5c9bfc2b": "getMaximumManagerFeeNumeratorChange()", +"5c9c2116": "convertComp()", "5c9c5a6f": "checkGameIndex()", "5c9cc81f": "getFundDetails(address)", "5c9d0fb1": "CROWDSALE_ALLOWANCE()", "5c9d4528": "mainCapInWei()", +"5c9ddbc9": "isOnHold(address)", +"5c9ec233": "setState(bytes8,uint256)", +"5c9f0a80": "achd()", +"5c9f5b87": "removeCustomZaToken(address)", +"5c9fa19b": "onlyReferral(address)", "5c9fa6ad": "bidSpread(bytes32,bool,int32)", +"5ca0d723": "flapper()", "5ca11c34": "minSalePrice()", "5ca177cb": "LINK(uint256)", "5ca1bad5": "CallScheduled(bytes32)", +"5ca1bc12": "startMining(uint256,uint256,address)", "5ca1c5a0": "getNodeValue(bytes)", "5ca1cacc": "changeMinEth(uint256)", +"5ca1ce8b": "getClaimMVote(uint256,int8)", "5ca1e165": "getRoot()", "5ca20102": "_checkPixelUnderRight(uint256)", "5ca21490": "BitMilleCrowdsale()", "5ca26ff9": "updateGuPhrase()", +"5ca2fc53": "addTokenGrant(address,uint256,uint256,uint16,uint16)", +"5ca33897": "totalSupplNormal()", "5ca3400c": "WithBeneficiary(address)", "5ca3bf76": "setSendErrorValue(address,uint256)", +"5ca45fe2": "hash_unit(uint256,uint256)", "5ca48d8c": "tokensLocked(address,bytes32)", "5ca4d4bb": "disableScriptExecutor(uint256)", +"5ca4d7c1": "setPatient(uint256,string,string,string,string,string,string,string)", +"5ca57e18": "jackpotBlue()", "5ca5b054": "metherToken()", "5ca5b334": "enableManager(address)", +"5ca644ec": "AddLiquidity(address,address,address,uint256,uint256,address,address,bytes)", +"5ca6cea4": "last_sent_value()", "5ca6fa4a": "Nostradamus()", "5ca7f2f0": "LivepeerVerifier(address,address[],string)", +"5ca80416": "ConstructorTest(uint256,string)", +"5ca80d6f": "revokeOffChainPurchasedToken(uint256,uint256)", "5ca81139": "createOnDay(uint256)", "5ca86447": "put(address,uint256,uint256,uint256,uint256)", +"5ca86ccf": "SetGuardianVend(uint256,uint256)", +"5ca895bc": "changeStakeLengthMultiplier(uint256,uint256)", "5ca8bc52": "returnIt()", +"5ca8bea9": "protocolFeeDistributor()", "5ca8e2ad": "ModultradeStorage()", "5ca91d7f": "faddress(address)", +"5ca971e4": "arrPercentForInvest(uint256)", +"5ca9798a": "exitContractLobbyDay(uint256,uint40)", +"5caa0b05": "PoolNotFinalizedError(bytes32,uint256)", "5caa0dec": "currentSeries()", +"5caa72bf": "lol3(address,string)", "5caaa536": "confirmReference(address,uint256,uint256)", "5caabecf": "transferFromWithReservingNet(address,address,uint256)", +"5cab4673": "getEstimatedDAIforBAC(uint256)", "5cac0176": "MJT()", "5cac79b2": "LockedCrowdSale(address)", "5cac8b27": "amazing()", +"5caca7b4": "getCoverPrice(address,address,uint256,uint16,uint8,bytes)", "5cacd319": "nfcDetails(bytes32)", "5cacdf29": "testChickenCnt()", "5cad249c": "getLastWinNumber()", +"5cad3383": "STICKER_PACK_VALUE()", "5cad7cfb": "getCrowdsaleStatus()", "5cade372": "payAllOut()", "5cae7767": "removeTrustedPartner(address)", "5caed029": "tokenDecimal()", +"5caf27f3": "updateWaitTimeUnit(uint256)", "5cafbafb": "newMember(address)", "5caff1a7": "Criptolira()", +"5cb0011a": "getInitializationBlockPosition()", "5cb047e8": "toInt(bytes,uint8,uint8)", "5cb0887c": "contractExists(address,address)", "5cb0c16f": "totalInCirculation()", @@ -53082,17 +97176,31 @@ "5cb2d86e": "totalBlockContribution(uint256)", "5cb2ffb5": "updateMinCapEthOnce(uint256)", "5cb318bf": "unregisterUser(address,address)", +"5cb335f4": "test3(address,address,uint256,uint256,address)", "5cb3ce15": "calculateMemoryState(uint256)", "5cb4502c": "SCORE_TO_WIN()", +"5cb47469": "setExchangeGovernanceAddress(address)", +"5cb48592": "WHT()", +"5cb48ba0": "depositKAI(address,uint256)", +"5cb4cf82": "dUSDDecimal()", +"5cb4e296": "sendERC20FromReceiverTo(uint256,address,address)", "5cb4f548": "partnerInfo(address)", "5cb5de63": "recReward(uint256,uint256)", "5cb603dd": "_getYearIndex(uint256,uint256,uint256)", +"5cb65e8c": "isSeasonOver()", "5cb7226d": "prePreIcoStartAt()", "5cb732be": "refundToken()", "5cb7dd98": "BlueChipGame()", +"5cb7f43d": "recomB_(uint256)", +"5cb82997": "closeOwner()", "5cb85cd2": "changeCost(uint256)", +"5cb8c909": "viewTeamReward(address)", "5cb8dd09": "isAllowed(address,bytes32)", +"5cb8eca4": "indexHash()", "5cb92dc7": "_enableRefunds()", +"5cb95859": "checkEntry(string,address)", +"5cb9a714": "setConsultLeniency(uint256)", +"5cb9c4ec": "takeProtocolFee(address[])", "5cb9ceaa": "okAddress(address,address)", "5cba658f": "setState(address[],uint256[],address,uint256)", "5cba6caa": "notarizeHash(uint256,string,string,bytes32,string,string,string)", @@ -53105,20 +97213,37 @@ "5cbc65b2": "getplayersurplus()", "5cbc85d0": "returnBounty(uint256)", "5cbcb302": "pre_ico_allocation()", +"5cbccdbf": "getModeldigestByID(bytes32)", +"5cbd35f5": "addPuppy(string,uint256,bytes32,uint8,uint256,uint256,address)", +"5cbd99d4": "addServer(address)", "5cbdf177": "emailVerified()", +"5cbe03d1": "isApprovedBySignature(address,bytes32,bytes32,uint8)", +"5cbe1b2b": "getAdminAccount()", "5cbe5f8f": "DIV_DIST()", +"5cbe68af": "lowestBidEntryIdx(uint256)", +"5cbe86bc": "stopDeposits()", "5cbee9ba": "releaseLockedTokens(address)", "5cbf0850": "BTN()", +"5cbf8a17": "getWLLength()", +"5cbf9434": "plugLimit()", "5cbfdd8d": "preBuy(address,uint256,bool)", +"5cc04838": "payoutTokenAddress()", +"5cc07076": "withdrawals(uint256)", "5cc15001": "getContent(bytes32)", "5cc18780": "StabilizationFund()", "5cc1ad7f": "toTileId(uint8,uint8)", +"5cc236ce": "challenge(uint256,uint32[5],uint256,uint256,uint16)", +"5cc26c3e": "_useNuisanceGas(uint256)", +"5cc27614": "depotEth(address)", "5cc2e6aa": "getFirstAuctionsRemainingDuration()", "5cc2f6d8": "_processPurchaseInWei(address,uint256)", +"5cc33321": "EIP712_DOMAIN_VERSION()", "5cc3623a": "currentSection()", "5cc373c7": "TestJ()", "5cc39659": "preSaleBonus2Amount()", +"5cc3ab8e": "tldrAddress()", "5cc3c951": "purchase_with_dai(uint256,address,uint256,uint256,uint256,address,bytes)", +"5cc3d29a": "cakeAddress()", "5cc3f5d7": "Deauthorization(address,address)", "5cc41dad": "initiateCertificate(bool,string,uint256,uint256,uint256,uint256)", "5cc422a1": "sumofsquares(uint256,uint256)", @@ -53128,278 +97253,494 @@ "5cc57501": "_computeHeight(uint256,uint256,uint256)", "5cc5c5cf": "jackpotDifficulty()", "5cc5ca50": "formulaContract()", +"5cc5da3c": "getSamuraiInfo(uint256)", +"5cc61bbc": "addLp(uint256,address)", +"5cc66106": "updateMintFee(uint16)", +"5cc73faa": "ecoSystemDevelopmentAndOperationFundAllocated()", +"5cc7815c": "checkIsAddressMaintainer(address)", +"5cc7de1f": "eth_crv_path(uint256)", +"5cc88123": "delegate_new(uint256[],uint256[])", "5cc8a6ed": "PRE_SALE_4WEEK_BONUS()", "5cc8ce33": "dev_settledBalance()", +"5cc91ab9": "maxPerDay()", +"5cc91d7a": "ratesForCurrenciesSorted(bytes32[])", "5cc95422": "getVestingReleasedAmount(address,address)", "5cca3905": "getDeveloperMiningPowerForGameId(uint256)", +"5cca6084": "returnBrrrForBrrr()", +"5cca7952": "testTypeName()", +"5ccb2979": "viewTimeExceed(address)", "5ccb4f8f": "UmbrellaCoin()", "5ccb5460": "ethInvestedDuringICO()", "5ccb54c4": "BGD()", +"5ccb949a": "addResolution(string,string)", +"5ccbbdf1": "getDebtBalance()", "5ccbddeb": "IcelandvsCroatia()", +"5ccbf05e": "minimumETHPair()", +"5ccbf176": "trade(address,uint256,address,uint256,address,bytes)", "5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", +"5ccc5302": "changeMaxSquareBetDefault(uint128)", +"5ccc6c0c": "calculateRewardForAddressAt(address,uint256)", +"5cccad9e": "viewSaleSTA()", "5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", +"5ccd4afd": "viewSelectiveDeposit(address[],uint256[])", +"5cce4409": "pendingNINJA(uint256,address)", "5cce7dbb": "removeHolderAddress(bytes32,address,address)", +"5cce92fe": "uniLevelDistPart(uint64)", "5ccee1de": "newValidatorSet()", +"5ccef468": "ChangeEndTimeEvent(address,uint256,uint256)", "5ccf49ed": "isGenome()", "5ccf9f43": "BonusCrowdsaleMock()", +"5ccfb71d": "getDepositAmount(address,address,uint256)", "5ccfe157": "getDataById(uint8)", "5cd03621": "periodRound()", "5cd03a3f": "removeIdArrayItem(address,uint256[],string,address)", +"5cd064f0": "allocate(address,bytes16,uint256)", +"5cd0783e": "blocks(uint32)", +"5cd092e0": "viewBetEther(uint256)", +"5cd0a555": "bootstrapPrice()", "5cd137b4": "LogDonation(address,string)", +"5cd17d9a": "keysToken()", +"5cd23502": "renounceWithdrawAbility()", "5cd27e8d": "init3(int256[],int256)", "5cd2f4d3": "approve(address,bytes32)", "5cd31795": "HavenToken()", "5cd31e83": "LastWillContract(address,address[],uint8[])", +"5cd36325": "updateEthToTokenOrderWHint(uint32,uint128,uint128,uint32)", "5cd3b917": "numberOfDeployedTokens()", "5cd3f3a1": "decompress(bytes)", "5cd42150": "KY8000Token()", "5cd45e61": "getUuidsSize()", "5cd48caa": "bet(uint256[],address)", "5cd50b3f": "quater2()", +"5cd51857": "ChangeManager(address)", +"5cd60cd1": "amountWithdraw(address,uint256)", "5cd60dad": "add(address,int256)", +"5cd64248": "tokenSmart(address)", "5cd689e6": "sell_label(address,uint256)", "5cd6bd0e": "getPlayerDividendByStage(uint256,uint256,address)", +"5cd6c7b7": "paybackToken(uint256,address[])", +"5cd6f6b3": "liftAllRestrictions()", "5cd72340": "SetEpochData(address,uint256,uint256)", "5cd72b15": "setAllowedMultivest(address)", "5cd7815b": "testInternalCall()", "5cd7c8bc": "createLastDay()", "5cd7d478": "isYesWinning()", +"5cd82390": "setMonitor(address)", "5cd82ee5": "Act()", "5cd85187": "MIN_ETHER()", "5cd87c71": "supportsTradingPair(address,address)", +"5cd8a76b": "initializeV2()", +"5cd8c024": "setWithDrawPercert(uint256,uint256)", "5cd8d2ad": "buyAndTransfer(uint256,address,address)", "5cd925cd": "assetSize()", "5cd96091": "enable_refunds()", "5cd9814f": "Mybalance()", +"5cd9953b": "Last_Level()", +"5cd9b90b": "transferLINK(address,uint256)", "5cda31dd": "GTN()", "5cda4b41": "checkApproval(address,address)", "5cdaab48": "previousEpoch()", "5cdb0798": "burnMemberToken(address)", "5cdb1bd7": "setRefundPercent(uint256)", +"5cdb4642": "updateRequest(uint256,uint256)", "5cdb88bc": "addClaim(string,string,uint256,string)", "5cdbd2d1": "Constructor(string)", "5cdc9eda": "peggedETHUSD()", +"5cdcd640": "updatePunkName(string,uint256)", "5cdcf33d": "milieurs_per_eth()", "5cdd7560": "STEToken()", "5cdd95e3": "MintableToken(uint256,address,bool)", "5cddb74b": "becomeShitClonelord()", "5cddd93d": "referalsMinInvestLimit()", +"5cdddc7c": "IsTokenFilterOn()", "5cde15b9": "_Application(bytes32,uint256,string)", +"5cde5055": "createHat(address[],uint32[],bool)", "5cde871e": "_depositOrderBalance(uint256,address,address,uint256)", "5cdf3450": "changeParticipationLimits(uint256,uint256)", "5cdf76f8": "setServiceFee(uint256)", +"5cdfc8fa": "crownfundTokenBalanceToOwner(address)", "5cdfcd69": "car_expense(uint256)", "5cdfd08c": "managementFees()", "5cdfe733": "fastBuyBonus()", +"5ce06c6d": "getDistributedETH(uint256)", +"5ce0713b": "CommissionPaidSuccessfully(address,uint256,uint256)", +"5ce0cef6": "addCompoundMarket(address,address)", +"5ce15f7e": "setMinEthBeforeSwap(uint256)", +"5ce1c56d": "updateRequiredEarnAmount(address,uint256)", "5ce1d810": "SmartN()", +"5ce1e2ff": "checkContractData(address)", +"5ce1e89e": "subCap(uint256,uint256)", +"5ce1fb54": "payAmguInEther()", "5ce22019": "getEtherInContract()", +"5ce24749": "swapETHToExactTokens(uint256,uint256,address,address,bool)", +"5ce29e24": "__Ownable_init_unchained()", +"5ce2d262": "ltcRate()", +"5ce2fd85": "redo(uint256)", "5ce2fea1": "CleosContract()", +"5ce302b9": "workerUpdateTradeLock(uint256,uint256)", "5ce308a7": "addEntry(string,string)", +"5ce32360": "getUniChatPersonAddr()", "5ce32aca": "getAirdrop(bytes32)", +"5ce345cc": "doUniswapV2Buy(address,uint256)", +"5ce35412": "isZsnark(address,uint256)", +"5ce38d8c": "getCycleMember(uint256)", "5ce398c4": "Riddle()", "5ce3dec1": "self_destruct()", +"5ce4017c": "Send(uint256,address)", +"5ce40e8d": "lockMyWithdraw()", "5ce49fbf": "amountBets()", +"5ce4a049": "getGasReserveRefiller()", "5ce4f8dc": "PoWHrGlass()", "5ce57b50": "setPenalizedStatus(uint256,address,bool)", +"5ce5991d": "modifyParameters(address,address,address,bytes32,int256,uint256)", "5ce5ba9b": "queryParent()", +"5ce6288c": "NUM_RULING_OPTIONS()", "5ce62aa4": "checkStoredFile(address)", +"5ce65b1d": "currentBoost(address)", "5ce7514e": "allowPublicWithdraw()", +"5ce7517b": "playerrolls(bytes32)", "5ce75c7c": "PRESALE_SECOND_DAY_START()", "5ce7c7e0": "tokenSetCrowdsaleManager(address,address)", +"5ce7d299": "setNewVersion(address)", "5ce800ac": "user_off_freeze()", "5ce8050f": "BuildCoinUtilityToken()", "5ce83f70": "updateEndsAt(uint256)", "5ce885ee": "initial_withdrawal(uint256)", +"5ce8e0fc": "wonderArray(uint256)", +"5ce92976": "migrateRewardsToAccumulatedRewards(uint256)", "5ce94328": "balanceOf(uint152)", +"5ce94650": "getCapPrice(uint256)", "5ce97dbb": "totalAirdrop()", +"5ce9ca98": "NEO()", +"5cea5568": "bulkProcessCHI(uint256[])", +"5cea9825": "pack1userList(address)", "5ceaa0bf": "modifyCurrentHardCap(uint256)", +"5ceaaba4": "OnBuyed(address,bytes32,uint256,uint256)", +"5ceae9c4": "repay(address,uint256,address)", +"5ceaf4f4": "_transferByProxy(address,address,uint256)", +"5ceb0510": "maximumOpenAco()", +"5ceb78ed": "claimUnclaimedFees()", "5ceb8bc8": "isPromoPause()", "5cebcbf0": "setMaxGamePerBlock(uint256)", "5cec2054": "dteamVaultAddr1()", "5cec4cb9": "fundsTokensHaveBeenMinted()", "5cec5ded": "balanceComisionOf(address)", +"5cec653b": "OnlyCallableByDeployerError(address,address)", +"5cecc1a0": "proposed_product()", "5cecd728": "setWillContents(address,bytes)", +"5ced058e": "bytes32ToAddress(bytes32)", +"5ced493b": "testGetAccountValues_HappyPath()", +"5ced7d40": "time(uint256)", "5cedff32": "takeTokensForBacking(address,uint256)", "5cee9ea7": "buyNew(uint256,uint256,uint256)", +"5ceeea60": "ffff(uint256)", "5cef51a6": "BdpDataStorage(bytes8)", +"5cefb291": "feeReceiverUserId()", +"5cefe4b4": "redeemBProx(bytes32,uint256)", "5cf00394": "getResoPeriod()", +"5cf0144a": "externalRebasingPriceUSD()", "5cf054f8": "SetRewAddr(address)", "5cf0769c": "ETHERCOIN()", +"5cf0f357": "servers(uint256)", "5cf1469d": "addPayout(uint256,string)", +"5cf174d0": "chm()", +"5cf17bbb": "isBetterPrice(uint8,uint256,bytes32)", +"5cf20c7b": "claimAll(address,uint256)", +"5cf25f45": "migrateLPtokens()", "5cf28fa4": "minDai()", "5cf29ecf": "forOwner()", +"5cf2a1c3": "SHAREHOLDERS()", +"5cf2afd7": "MigrateNFT()", "5cf2befc": "getEthAddressesLength()", +"5cf2e656": "isReserveBorrowingEnabled(address)", "5cf2f261": "ProofOfBitconnect()", +"5cf2ff17": "rewardInternal()", "5cf3125c": "NASDAQ()", "5cf34bcf": "getMinFee()", "5cf3508a": "whiteListControllerAddress()", "5cf38f24": "togglePlotBlockedTag(uint256,bool)", +"5cf3b15f": "totalToken(address)", "5cf3cd96": "payNode(bytes32,bytes32)", "5cf3d346": "names(address)", +"5cf42ebb": "startMarketOwner(uint32,uint256)", "5cf469ca": "tokenPreSaleCap()", +"5cf4a0da": "tokenMinSrcAmount(address)", "5cf4ee91": "getPrice(uint256,uint256)", +"5cf4f865": "withdrawMarketing()", +"5cf565ed": "maxWeiAmount()", +"5cf56c22": "memberTeam(uint256)", +"5cf57389": "warpTeam()", "5cf5ad2e": "registerNameCore(uint256,address,uint256,bytes32,bool)", +"5cf5d07e": "getRenameFeesAvailableToClaimEth(uint32)", "5cf5e386": "guardian2()", "5cf6040b": "ERC20Token(uint256,uint8,string,string)", "5cf6208a": "oraclizeTimeTolerance()", "5cf625f0": "OffChainManagerImpl(address,address)", +"5cf67ba5": "superPrivilegeCount(address)", "5cf6a536": "InternetWall()", "5cf6a763": "receiveApproval(address,int256,address,bytes)", +"5cf756d2": "_setMarketInterestRateModel(address,address)", +"5cf75c27": "mintFOPFtoken()", "5cf858aa": "TOKEN_ESCALE()", "5cf89f1e": "setDateRelease(uint256)", +"5cf8ac5d": "PendingWithdrawableDividendOf(address)", "5cf8ca60": "isCase(uint256)", +"5cf95430": "_totalTokensInvested()", +"5cf99042": "GS_idGameSettings()", +"5cf9c3dc": "SendEther(address,uint256)", "5cfa353a": "updateTotalGasCost(uint256)", +"5cfa8376": "showhellow()", +"5cfa8864": "getEasyBidETH(uint256)", +"5cfa91f4": "getRewardPool(uint256)", +"5cfa9297": "safeMint(address,uint256,uint256,bytes)", +"5cfab572": "transferApproved(address,address,uint256)", +"5cfadc2e": "hasTokenValue()", "5cfae3ba": "UNPC()", "5cfaf2ef": "setNameTAOPositionAddress(address)", +"5cfb28e7": "setVal()", "5cfb4aa4": "getMessageTimestamp(uint256)", +"5cfb5ff5": "showAmount()", "5cfbcdbb": "committedEther()", +"5cfbfc6d": "setOperators(address,bool)", "5cfc1a51": "capacity()", "5cfc53c1": "calculateForValue(uint256)", "5cfc6432": "EcosystemPart()", "5cfd5f89": "product4_pot()", "5cfd8c24": "ResetPonzi()", +"5cfda8bd": "viewSaleFRUIT()", "5cfe237a": "TCGC(address)", "5cfe585a": "calcDisputeEnds()", "5cfea6fb": "TokensPerWei()", +"5cfec9c4": "PARTNER_REFERRALS(uint256)", +"5cfed870": "tokensale_open()", "5cff876b": "carrotsCaught()", +"5cffe9de": "flashLoan(address,address,uint256,bytes)", "5d000c07": "getFreeFuck()", "5d004e85": "getCommentsCountByAd(uint256)", +"5d00f50f": "getScans(string)", "5d01615f": "queryFusionData(uint256)", +"5d0175d9": "whitelistantToMaxBuyin(address)", "5d01b261": "_placeBet(uint256,address)", "5d0213f7": "transferTokenOwnerShip(string,address)", +"5d0254cb": "testsqrt(uint256)", +"5d028b75": "_matured()", "5d029d1e": "indexedByTag(bytes32,uint256)", "5d02b2f7": "hasPresaleEnded()", +"5d02c281": "flashBeamOrbiterTokens(address,uint256,address)", "5d03147a": "ownership()", +"5d03364e": "calculateConvenienceFee(uint256)", "5d0341ba": "approvals(address)", "5d036c8b": "payEther(address[],uint256[])", "5d0413d1": "calculatePlotPrice()", "5d04af9c": "iMMCoinbuyPrice()", "5d064bab": "MoreGainCoin(uint256,string,string)", "5d068051": "sendFees(address)", +"5d068771": "withdrawById(uint256)", "5d06a05c": "lockupAccounts(address[],uint256,uint256)", +"5d06f38e": "SILVER_BOX_PRICE(uint256)", +"5d0725f0": "eligibleCount(uint256)", "5d0792b7": "minimumInvest(uint256)", +"5d080749": "publicCalculate(uint256[20])", "5d0808f2": "listedMartialsLength()", "5d08225e": "getGidOfId(uint64)", +"5d085b57": "maxNumMonths()", "5d088fc6": "changeRandomFight2DeathContract(address)", "5d08c1ae": "salePaused()", +"5d093fea": "OnOpenGameResult(uint256,uint256,address,uint256,uint256,uint256)", +"5d09601e": "getParams1(uint256)", "5d09e625": "setMustSkipFee(address,address,bool)", "5d0a740a": "GetSeries()", "5d0a7628": "lockPresaleBalances()", +"5d0a7faa": "trigger4(address)", "5d0ad8d0": "testFail_set_owner_unauth()", +"5d0aec41": "getPool(address,address,uint24,address)", +"5d0aecdf": "valuePoolAccepted(address)", "5d0b4e5c": "isTradeFeasible(address,address,uint256)", "5d0b6774": "counterFor(address)", +"5d0b8776": "CreatedEvent(uint256,uint8)", +"5d0b905a": "TokenCreated(uint256,uint64,string,address)", +"5d0be4ba": "getKvps()", "5d0be9de": "softWithdrawRevenueFor(address)", "5d0c0161": "IXCASHToken()", "5d0cb15d": "TOKEN_SALE_SUPPLY()", "5d0dd712": "bet_amount()", +"5d0e0350": "setEpochRewardPerBlock(uint256,uint256)", +"5d0e1ff9": "changePenaltyFeePercent(uint256)", "5d0e550a": "safetyModeOn()", +"5d0e6b2a": "registerInvest(address)", +"5d0eaaaf": "usersInfo(address)", "5d0ef098": "burnUnsoldCoins()", +"5d0f2b2d": "batchTotals(uint256)", "5d0f4ee0": "isChampionAccount(address)", "5d108ca2": "TokenChanged(address)", "5d109aea": "maxResult()", "5d10a60d": "createPost(string,string,bytes32)", +"5d10b425": "avgFactor_buyInTimeSum(address)", +"5d10facf": "setNotice(uint8,string,uint256,uint256)", "5d113b03": "PayWinners(uint256,address)", +"5d11fef8": "TokenProcurement(address,address,uint256,uint256,address,uint256)", "5d121289": "addPreSaleEndDate(uint256)", +"5d1222aa": "_nonce()", "5d123014": "setGameTax(uint8)", +"5d12928b": "createVault()", "5d12ace4": "playGame(uint256,uint256,uint256)", "5d12fc0c": "ONE_BILLION()", +"5d133945": "canInitiateCodeUpgrade(address)", "5d14076c": "lowercaseString(string)", "5d145c5b": "setIcoTimeStartEnd(uint256,uint256)", +"5d148e5c": "baseURILocked()", +"5d14f294": "getClientContracts()", "5d14f925": "Invested(address,uint256,uint256,string)", "5d15001e": "SupplyOp(uint256,uint256,uint256)", "5d15b46a": "emitSkillCategoriesSet(address,uint256,uint256)", +"5d15d341": "createTokenPool(address,uint256)", +"5d1608dd": "mapScans(string,uint256)", "5d161310": "DataMining()", "5d161c3f": "useAbility(uint256)", "5d16a6f9": "lockedBalances(address,uint256)", "5d16b8de": "take_back_money()", +"5d16cf42": "decreaseVaultBalance(uint8,address,uint256)", +"5d17774f": "notifyWithdrawnAll(address,address,uint128,uint112,uint256,uint256)", +"5d178733": "const_contract_rxp_value()", +"5d17bfcd": "changeTimelockDuration(uint256)", "5d183b60": "supplyRound2()", "5d184107": "AddCategory(string)", "5d19212e": "markUserAsFounder(address)", +"5d193f15": "setTmeReturnOnFail(uint256)", "5d19606e": "transferIssuer(uint256,address)", "5d19a99f": "isLimitReached()", +"5d19d794": "resetRequests(uint256,uint256,uint256)", +"5d1a0a54": "minimumTokensPerInvestor()", +"5d1a2229": "setAccountLoanLimit(uint256)", "5d1a3b82": "getOutcome(bytes32)", +"5d1a52ca": "creatToken(uint256,uint8,string,string,uint256)", +"5d1a9c1a": "GasAddress()", +"5d1b1e6d": "transferFrom(string,string,uint256)", "5d1b45b5": "getEntityCount()", "5d1b56c4": "TestUser(address,address,address,bytes32)", +"5d1bcbb6": "reviseDatas(uint32[],uint16[],uint64[],bytes32[])", "5d1bd962": "getArrayValue(uint256)", "5d1be4e5": "deathData_f14()", "5d1be58e": "pecunioToken()", "5d1c01e0": "signedApproveAndCallCheck(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", +"5d1c0a8a": "getBeneficiaryAllotments(address)", "5d1c3171": "luck()", +"5d1c8b75": "outaddress(uint64)", "5d1c985b": "setReceivers(address,address,address)", "5d1ca631": "getId()", +"5d1cac48": "removeUniswap(address)", "5d1ce03f": "tokensRaisedDuringRound(uint8)", "5d1e2d1b": "split(address,uint256)", +"5d1e9eeb": "whoBigger(uint256)", "5d1edfa0": "checkContributedETH(address)", "5d1f8098": "RoshaanCoin()", "5d200f84": "GetPlayer(uint256)", "5d201596": "getCategoryInfo(address,uint256,uint256)", "5d202249": "totalCollectedETH()", "5d204869": "slice(bytes,bytes,uint256,uint256)", +"5d2052a8": "removeSubscription(address)", "5d208872": "setTimesEnabled(uint8,bool)", +"5d20a168": "onDistributeRegisterFee(uint256,bytes32,uint8,uint256,uint256,uint256,uint256,uint256)", "5d216562": "changeLockTransfer(bool)", "5d2195dc": "getToBalance(uint256)", +"5d21ed6a": "moneyToGoal()", "5d2230d7": "numfails()", "5d2247a5": "stakeAirdrop(uint256,bytes)", "5d228eb0": "getProviderDetailFields(uint256)", "5d22a352": "manualWithdrawToken(uint256)", +"5d22acd6": "advertiseOnBlocks(address,uint16[],string,string,string)", "5d22e222": "BTCAir()", +"5d22f75a": "nestingTest(string,string,string,string,string)", +"5d2362a8": "spendLimitAvailable()", +"5d238c49": "_premiumFee()", "5d2392d6": "latchContract()", "5d239d3e": "getSlice(uint256,uint256)", "5d240c58": "addExperience(uint256,uint256)", "5d2434ec": "transferFromTangibleassetdisbursementfund(address,uint256)", +"5d2462e4": "getVoteToken(uint256,uint256,uint8)", "5d25cccc": "createVesting(address,uint256,uint256,uint256,uint256,bool,address,uint256)", "5d25d021": "withdrawForeignTokensMultiple(address,address[],uint256)", +"5d266a54": "deltaPeriod()", "5d267042": "PointlessToken()", "5d268629": "Refund()", +"5d26896f": "secondsPassed(uint256)", "5d2694da": "BlackPearlETH()", "5d270cdc": "setExpectedRate(address)", "5d272468": "isLiquid()", +"5d272d6f": "_activate(address,address)", "5d27976a": "Final(string,string,uint8)", "5d27bff3": "registerWithEncryption(string,string)", "5d27e9a6": "SEPARATOR()", "5d281384": "_isValidSignatureAndMethod(address,address,bytes)", +"5d283303": "calcSeniorAssetValue(uint256,uint256)", +"5d28560a": "create(string,string,string)", "5d285eca": "preICOspecial()", +"5d290dc4": "changeBountyData(uint256,string,address,uint256,address[],bytes[],uint256[])", "5d29206b": "createTokenEscrow(address,uint256,address)", "5d293581": "ApplyForCertification(string,string,string,string,uint256)", "5d2946f5": "futDevAddr()", "5d295f67": "maxDGAME()", "5d2973cd": "applyVIPLevel(address,uint256)", +"5d299881": "setUSDPPriceForBTCB(uint256)", "5d29bd40": "rollThree(address,uint8,uint8,uint8)", +"5d29ce27": "setBuybackPrice(uint256)", "5d2a5d3d": "sentPreSaleTokens()", "5d2a70a8": "getActualFee()", "5d2a9b6a": "_randomIndex(uint256,uint8,uint8,uint8)", "5d2aa757": "getSides(string,uint256)", +"5d2b7b15": "removeListWhitelisted(address[])", "5d2b811d": "getLastRegisterDate()", "5d2bafed": "gee()", "5d2c0af2": "Invest(address,bool,uint256,uint256,uint256)", "5d2c53a7": "withdraw_funds(uint256)", +"5d2c79c3": "shardMarket()", "5d2cce82": "LemonsDroppedToTheWorld()", "5d2d5c37": "registered(string)", +"5d2dc484": "flipMask(uint256)", "5d2dc5fa": "FraCoinAuct(string,uint256,address)", +"5d2dde1d": "sharesToFragments(uint256)", "5d2dec87": "PRNG(address)", +"5d2f4f58": "getCdpCR(bytes32,uint256)", +"5d2fb768": "stakeForAddress(address,uint256)", "5d2fea9d": "reissuedTransactions(uint256)", "5d302ba1": "UpgradeAgentEnabledToken(address)", "5d306f34": "getRefundAmount(address)", "5d307c6f": "giveToVoter(uint256,uint256)", "5d3171d9": "transferFromPrivileged(address,address,uint256)", +"5d31a013": "cooAddresses(uint256)", "5d31c3bc": "deliveryApprove(address)", "5d3235bd": "NutrioCoin()", "5d3278f0": "LooneyFifty()", +"5d32798a": "getMerchant(uint256)", +"5d330018": "OrderNotFillableByTakerError(bytes32,address,address)", +"5d33361a": "taxFreeSender(address,bool)", "5d337b01": "largeSize()", "5d3458ea": "DolToken()", "5d346bd6": "addSaleOwner(address)", "5d34b70c": "LavaDeposit(address)", +"5d34d98e": "burnA(uint256,uint256)", +"5d35239b": "currentGetMaskPrice()", "5d354b4d": "foundingTime()", "5d355804": "endPtopDeposit(address,address,bytes32)", "5d359fbd": "transfer(address,uint64)", "5d35a3d9": "approve(uint256,uint256)", +"5d35c1c5": "disputeDR(uint256)", "5d3601d2": "_isRegularAddress(address)", +"5d3608d1": "setNextSummonTime(address,uint256)", "5d36a791": "PartyToken()", +"5d36b190": "claimGovernance()", "5d36d182": "recycle(address,uint256)", +"5d36d508": "NewFHFToken(address)", +"5d3760c8": "balanceByGameOf(address)", +"5d3786da": "setYieldFarmContract(address)", +"5d37a8dd": "_SolveQuadraticFunctionForTrade(uint256,uint256,uint256,uint256,uint256)", "5d37c840": "level_4_amount()", +"5d381204": "workingGroupIds(uint256)", "5d383eaa": "registerTokenPayment(address,uint256)", "5d385031": "getCustomerTxOrigMcwTransfer(address,bytes32)", +"5d388818": "factionSum(uint8)", "5d3899af": "place_to_push(uint256,bytes32)", +"5d392c30": "isVaultUnsafe(uint256,address,bytes,uint256)", "5d397767": "publicBattlepm1()", "5d3a08d7": "setNodePhases(address)", "5d3a1f9d": "setText(string)", @@ -53408,101 +97749,199 @@ "5d3aac49": "PublishInterfaces()", "5d3afb19": "CNYB()", "5d3b2f37": "getNextGameId(address)", +"5d3b48ef": "contractNo1()", +"5d3b5f80": "needApprove()", "5d3bb19e": "XXXXXXXX09()", "5d3c1d4c": "_getRequest(uint256)", "5d3c7c9b": "AGASCrowdsale()", "5d3c81a5": "feeWithdrawTokenAmount(address,uint256)", "5d3ca4ab": "lotteryReinvest(string,uint256)", +"5d3cc44b": "CostChanged(uint256)", "5d3cd79f": "endPrivateICO()", +"5d3ce564": "countFecoreDeposited(address)", "5d3d08a8": "cancelExchange(uint256)", +"5d3d4158": "crpool()", +"5d3e2648": "toggleRoundActive(bool)", "5d3e64bf": "ttlPlayers()", +"5d3e9deb": "clearProposals()", +"5d3eea91": "unStake(uint256)", "5d3f4fe4": "withdrawMyTokens()", "5d3fdd19": "updateDiscount(uint256)", +"5d3feba6": "getStakePercentageReward(uint256)", "5d40124e": "YunJiaMi(address,address,address,uint256,uint256,uint256)", +"5d404ddd": "createYieldContract(address,uint256,uint16)", "5d40533f": "AnemoiToken()", +"5d405c25": "addRoles(address[],string)", +"5d405cec": "TransferToOwner()", +"5d40a19e": "lastSupplyOfLevelsInPair()", +"5d40a54c": "createEPN(address,uint256)", "5d40c0ae": "createAccessorySeries(uint8,uint32,uint256)", "5d41363f": "rateRound1()", "5d416cc2": "setIsTokenCanBeBuy(bool)", "5d41dd6f": "ExampleToken(address[])", +"5d420533": "getLoyaltyFee(uint256)", +"5d423cd9": "_decode_sol_bytes6(uint256,bytes)", "5d42513b": "test_withdraw()", "5d428e08": "addTrader(address)", "5d4293a0": "hatchPoohs(address)", +"5d42f611": "metaIncreaseAllowanceHash(uint256,address,uint256,uint256)", "5d439cf3": "transferEvent(address,address,uint256)", +"5d43cda3": "getTeamRunedOver50percentRegisted()", +"5d43d36d": "check_Contract_Balance()", "5d43e769": "batchTransfer(uint256,uint256[])", +"5d44011e": "open(bytes32,uint256,address,address,bytes32,uint256)", "5d444ffb": "minMintingPower()", "5d4453ba": "getGuess(address,uint8)", "5d449d7d": "refererFeePercent()", "5d44b508": "calculateRewardToWithdraw(uint32,address,address)", +"5d44ec0a": "pTokenRedeem(address,uint256,string)", "5d450bab": "setJobRating(address,uint8,uint256)", +"5d451966": "setFannyTokenAddress(address)", "5d451a9a": "Wallet8()", "5d4521dd": "updateWeedTotal(uint256,uint16)", "5d452201": "ico()", +"5d4545a0": "allowedTransferee(address)", "5d4559ca": "get_coins_count()", "5d45b4a7": "increaseMonthlyTransactionVolumeSending(uint256)", +"5d45d061": "everMadeDepositsLen()", "5d461de5": "sendAmount(address,uint256)", "5d4626f6": "getInvoiceStatus(bytes32)", "5d468d38": "releaseAuctionEnded(uint256)", "5d469b74": "redeemUnderlyingInternal(uint256)", +"5d46d133": "productStructs(bytes32)", +"5d4743f5": "pendingLoad(uint256,address)", +"5d474a00": "REDEMPTION_PERIOD()", +"5d475fdd": "setChallengePeriod(uint256)", "5d47762d": "Member_AssingTokensToProject(uint256,uint256)", "5d47f4f2": "CanHandleAuth(address)", +"5d480404": "releaseTimeOfCompanyBBKs()", "5d484e17": "StaticEthAvailables()", "5d485e5d": "_hostContent(address,bytes32,string,string,string)", +"5d48a3ec": "getGeneralInfo(uint256,address,address,address,address)", +"5d4942bf": "allocateEgression(uint256,address)", "5d495aea": "pickWinner()", +"5d496818": "_setPoster(address)", "5d49705b": "getEmployer(address,uint256)", "5d49719d": "SHA3_512()", +"5d499b1b": "TEN_DECIMALS()", +"5d49a41a": "initialize(address,address,uint8,uint8,uint8)", "5d49c199": "finishPreSale2()", +"5d49cf51": "swapAnyway(int128,int128,uint256,bool)", +"5d4a18d9": "pendingFlipper(uint256,address)", +"5d4a2f92": "CONTRACT_WOOD_ERC20_TOKEN()", +"5d4a6745": "calculateHashWithPrefix(address,uint256)", "5d4a8f74": "ATTRToken()", "5d4aaf1c": "registerWithUserAgreement(address,bytes32)", +"5d4b4491": "testSettingOfWalletAddress()", +"5d4b8378": "enter(address,address)", +"5d4bc0ce": "raffles(uint256)", "5d4befc0": "emitSynthAdded(bytes4,address)", "5d4c5cca": "participantsForPreSale(address)", +"5d4c7785": "setSealDate(uint256)", +"5d4ccdcb": "limitContracts()", "5d4d061e": "keyValueStorage()", +"5d4d7028": "seasonReferrals(uint16)", +"5d4dcf12": "rc(address)", "5d4dda72": "DirectInput()", +"5d4df3bf": "claim(uint256,uint256,address,uint256,bytes32[])", "5d4e1e5c": "substract(uint256,uint256)", "5d4f012b": "tgeCurrentStage()", "5d4f30e7": "get_address(address)", +"5d4f3b2a": "handleBridgedTokens(address,uint256,bytes,bytes32)", +"5d4f7742": "doApprovals()", "5d50601b": "getsumdata1(bytes32)", "5d506a2e": "minPotSum()", +"5d50bec3": "IEE504I(address,uint256)", +"5d5143e2": "claimUnpaidETH(uint256)", "5d51b550": "haltCrowdsale()", +"5d520e64": "mintWithFee(address,uint256)", +"5d521a34": "Currency_ETH()", +"5d5267ce": "partialMergeTokens(uint256,bytes32,uint256)", "5d52fe64": "buyRemaining(address)", "5d54322d": "canPurchase(address,uint256)", +"5d543b07": "Book_flight(uint256)", "5d5483b3": "WatchAppliedFeePercentage()", +"5d54bda4": "notifyReward()", "5d54cb1f": "is_transfer_allowed()", "5d54e612": "whitelistAll()", +"5d551edd": "approve_704(address,uint256)", "5d552c72": "BasicToken()", "5d5576f8": "renounceCapper()", +"5d560e91": "userCurrentPledgeQuota(address)", +"5d562083": "calculateWithdrawalPrice()", "5d56550a": "buyCore(address,uint256,string)", "5d5655dd": "BOOKIE()", "5d567259": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address,uint64)", +"5d5696ad": "setTransferRate(uint256,uint256)", "5d56e0a4": "developerMiningPower()", "5d57135a": "KEBABER_TO_MAKE_1KEBAB()", +"5d5740db": "farmTokenPlusFarmNames(uint256)", +"5d57792e": "pir()", +"5d577c18": "epochCalculationStartBlock()", +"5d57d4b7": "setMasterchef(address,bool)", +"5d580284": "notEqualStringPassTest()", "5d582870": "requestInvestment(uint256,uint256,address)", "5d585176": "GolemSupply()", "5d586bfd": "deposit(string,address,uint256,string)", +"5d58ce36": "contractEthBalance()", "5d59072a": "OFFICAL_VOTING_DAY_OF_MONTH()", "5d593462": "init(address,address,string,string,uint256,uint256)", +"5d593f8d": "numValidators()", +"5d594e72": "GetAthleteByDistance(uint256)", +"5d595500": "getPriceOfBTC()", +"5d597ba5": "rewardFee(uint256)", +"5d59a6a4": "freeze(bytes32,uint64,bytes32)", +"5d59bb36": "starData(uint256)", +"5d59d1a4": "mainsaleWeiRaised()", "5d5a1614": "STQCrowdsaleTestHelper(address[],address,address,address)", +"5d5a7316": "changeAddressSet(address)", +"5d5a835c": "seizeEth()", +"5d5a92fb": "pullFunds(address)", "5d5aa277": "tokenSaleContract()", +"5d5aadec": "boostActive()", +"5d5acad1": "claimSwapAvailableReward()", "5d5b35f3": "dividendsTotal()", "5d5b82fd": "Blockjack(address,address)", "5d5b9021": "acceptTradeOffer(uint256)", "5d5b92b1": "teamOneSharePrice()", "5d5bc4cb": "BetOnRed()", +"5d5bf178": "setIdentity(address)", "5d5c3011": "ctyCoin()", +"5d5c3de4": "setMinAddLiquidityAmount(uint256)", "5d5c606f": "DAOPolskaTokenICOregulations()", +"5d5cbe09": "getParentAndBlockhash(bytes)", +"5d5cf6e6": "approve_370(address,uint256)", "5d5d4fab": "TACTICALCRUISER_EXTRACTION_BASE()", +"5d5ddeee": "startAirdropPUMPS(uint256,uint256,uint256,uint256)", +"5d5e135b": "uniswapETHforSETH()", "5d5e22cd": "transferFromWithSender(address,address,address,uint256)", "5d5e507b": "create_price()", +"5d5e8ce7": "reweighTokens(address[],uint96[])", +"5d5f229f": "swapExactTokensForTokensSF(uint256,uint256,address[],address,uint256)", +"5d6067d0": "certify(address[])", +"5d60a7a0": "AmountToPayStaking(address,bool,uint256)", +"5d60de6e": "getCanWithdrawal(uint256,string)", "5d61dd5a": "removeSingleAddressFromWhitelist(address)", +"5d624d66": "GasRebateFailed(address,uint256)", "5d62917b": "pickWinners(uint8,address,address,address,uint8,uint8,uint8)", +"5d62c15b": "buyOpenPut(uint256,uint256)", +"5d6308f3": "queryUserEpochDetailByIndex(address,uint256)", "5d63b758": "minAcceptedETH()", "5d63b77c": "divideSafely(uint256,uint256)", +"5d63f6c6": "submit(uint256,string)", "5d644069": "request_face_proof(string,address)", +"5d64509d": "countBonus_EliteStart()", "5d6470a4": "STAGE_1_TIME()", +"5d649ea9": "revokeReward()", "5d64aa68": "dragonIndexToOwner(uint256)", +"5d64b86e": "queryUserByUserId(uint256)", +"5d64fb46": "dropkick(uint256)", "5d651b62": "TimeLockSendCreated(address,address,uint256,address)", "5d6542af": "way()", "5d65432d": "IndorsePreSale()", "5d65c37b": "Assessment(address,uint256,uint256,uint256,uint256)", +"5d66118b": "REFERRER_PROFIT(uint256)", +"5d6624b7": "declareInvalid(address,uint256,string)", "5d666d3c": "getRurus(string)", "5d667464": "usePrecompiledContracts(bytes32,uint8,bytes32,bytes32)", "5d66ccf0": "updatePerSell(uint16,uint256,bool)", @@ -53510,6 +97949,8 @@ "5d671fc0": "switch_period()", "5d6720b4": "getFreeMineral(address)", "5d67830a": "doLogFighter(uint32,uint256,uint256)", +"5d680c9c": "getTwoKeyDefaultNetworkTaxPercent()", +"5d68153e": "getIndices(bytes32)", "5d685185": "periodITO_softCapInWei()", "5d68564e": "ZontoToken()", "5d6952d7": "changeSaleStartBlock(uint256)", @@ -53517,79 +97958,161 @@ "5d69d600": "presold()", "5d69f16f": "offerAsSacrifice()", "5d69f68c": "getVotersName()", +"5d69fbe3": "lastActionDateAddress(address)", +"5d6a64df": "m_nextWave()", +"5d6ac9b7": "IncomingTx(uint256,address,uint256,uint256)", "5d6af2af": "getOffChainRootAddress()", "5d6b2f26": "destroyAllTokens()", +"5d6b480f": "setTroveStatus(address,uint256)", "5d6b70ae": "getSignedTable()", "5d6b7798": "BCQ()", "5d6c3ea7": "mined_coin_supply()", +"5d6c7244": "uploadDrug(string,string,string,string,string)", "5d6c8e10": "getDHash(bytes13)", "5d6cb67e": "ecosystemTokenSupply()", "5d6cdfae": "EthereumPot()", "5d6ceeb5": "returnMoneyToBuyers()", "5d6d2992": "ownFiles(address,string,string)", +"5d6de796": "battle(uint256)", +"5d6dee7b": "potToPayout()", +"5d6dfcec": "addLiquidity(uint32,uint128,uint128,uint32,uint32,uint32)", +"5d6e441b": "channel_participant_deposit_limit()", +"5d6eb9d8": "overTax()", +"5d6f2984": "getInvitesCount(address)", "5d705fe2": "MBCashSupply()", +"5d70952d": "SetFeeTransfer(address,uint256)", +"5d70e120": "setBusinessAccount(address)", +"5d70e3f4": "SearchForContent(uint256)", "5d711db1": "get_candidates()", "5d718818": "getHolderCountryCode(bytes32)", "5d71cf46": "spendableAllowance(address,address)", +"5d71dca3": "setBunnyName(uint8,string)", "5d723298": "PartialPayment(address,address,uint256)", +"5d727d04": "sweepFeesByAsset(address[])", "5d728582": "hasAuthoritySignedSideToMain(address,bytes)", "5d72b30d": "changePlayerName(uint256,string)", +"5d732ff2": "maxAffiliateFee()", "5d73e2bf": "startPlay(bytes32,uint8,bytes32,bytes32)", +"5d73efce": "assetConverter()", "5d740d62": "YFJToken()", "5d751443": "updateWebappMinBalance(uint256)", +"5d75a84f": "setMaci(address)", "5d760b45": "forceWithdrawPayments(address)", +"5d7611b9": "getSignerInformation(address)", "5d766d35": "INITIAL_GLOBAL_DAILY_SUPPLY()", "5d76a039": "PresaleReStarted()", +"5d7716e8": "openProfitOfHost()", "5d771933": "BOUNTY_SUPPLY()", "5d777893": "GetPlayers(uint8)", "5d77aec8": "receiver3()", "5d77d8d0": "getBlacklist(address)", +"5d77f706": "idMaker()", "5d78650e": "getAccountData(address)", +"5d78c137": "getSortedIndexOf32(uint32)", +"5d793a7d": "setTokenRedeemable(address,bool)", "5d796c05": "mintAuditCancel(address,address)", +"5d799306": "arbiterAddress()", +"5d799f87": "rescueERC20(address,address)", "5d79eda7": "Digixbot(address)", +"5d79fe13": "changeTargetPrice(uint256,uint256)", "5d7a6b10": "nextDerivativeTokenScheduled()", +"5d7a8949": "varifyTransferApproval(address,address)", "5d7b0758": "controllerMint(address,uint256)", +"5d7bdccd": "multiSigSend(address,uint256,uint64,uint8,bytes32,bytes32,address)", +"5d7c1e40": "investorDistRound()", "5d7c3ad2": "ICO(address,address,uint256,uint256,uint256)", "5d7c3b78": "costructor()", +"5d7c5c94": "getOutputPrice(uint256)", "5d7c829d": "_messageToRecover(address,uint256)", +"5d7c83f1": "getEndpoints()", "5d7cf3e2": "Meltdown(uint256)", +"5d7d3e71": "_vaultAmount()", +"5d7d7341": "inlineAsmLoops()", +"5d7dc9da": "addNFTProfile(uint32,uint256,uint256,string,uint32)", +"5d7df8e7": "getTestaReward()", +"5d7e1c9a": "setRates(uint256,uint256,uint256,uint256)", "5d7e6b8d": "Schengencoin()", "5d7e7219": "setFeeFor(address,uint128[2])", "5d7e8c15": "ethToCents()", "5d7e994a": "RewardStart()", +"5d7ebde4": "_uint2str(uint256)", +"5d7f2095": "setSellCrv(bool)", +"5d7f5cdb": "EMERGENCY_ALLOW_REFUNDS()", +"5d7f64a3": "yourStakedHype(address)", +"5d7f7e77": "storeUInt(uint256)", +"5d7f850c": "getInventory()", "5d801ec4": "SetmaxTokens(uint256)", +"5d8026c5": "isDebtClean(bytes32)", +"5d80ca32": "maxStakeAmount()", "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)", +"5d82c462": "getPriceById(uint32)", "5d82ddc8": "freezeEnabled()", +"5d82e384": "freeETH(uint256,address,uint256)", "5d8302f2": "CrypTollBoothToken(uint256,string,uint8,string)", +"5d8307b9": "getBBFarmAddressAndBallotId(address,bytes32,uint256)", "5d831ca1": "FUT5()", +"5d837d7a": "userDepositSeconds(address)", +"5d83c2b8": "ticketSupply()", +"5d841af5": "setRedeemFee(uint256)", +"5d847e18": "update_staking(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint8)", +"5d857051": "m_Updater_Address()", +"5d85af0c": "currentAID()", +"5d85ff6c": "setTokenConfigs(address[],address[],uint256[],uint256[])", +"5d861345": "_unholdtime()", +"5d864ced": "lockForgeValidator()", +"5d8668a2": "hasSetting(bytes32)", "5d8749ed": "workStages(uint256)", "5d878b4f": "isInWhitelist(uint256,address)", +"5d87b6e6": "_getMetadataCountForRequest(uint256)", +"5d87cf2e": "removeSyncPool(uint256)", +"5d87eb33": "RefundSubmission(address,uint256)", "5d88383e": "retrieveEth(address,uint256)", +"5d889bb2": "bidRequest(uint256,uint256,uint256,string)", +"5d88a6fe": "setEthUsdtPairAddr(address)", +"5d88e740": "findstudent(string)", +"5d88e860": "components(uint256,uint256)", "5d891d12": "foundersTokensWalletMaster()", "5d895dac": "parse(string,uint256)", "5d89c01a": "getCatIds()", "5d8a776e": "award(address,uint256)", +"5d8ae565": "requiredMarginOf(address)", "5d8aef9f": "_calculateLockedBalance(address,uint8)", +"5d8b66b6": "mintTokensExist()", +"5d8ba615": "addFeedIn(address,address,uint256,uint256)", "5d8bc2a8": "assertEq12(bytes12,bytes12,bytes32)", +"5d8bc849": "Donation(address,uint256)", +"5d8be03a": "burnBlackListAmount(address,uint256)", +"5d8c31d8": "RotStorageAddress()", "5d8c5b87": "orderPlace(address,bool,uint256,uint256)", +"5d8c9609": "getPendingETHReward(address)", "5d8ca2ac": "getApprovalsFor(address)", "5d8d1585": "getUserInfo()", "5d8d2904": "setKeyPermissions(bytes32,bool,bool,bool)", "5d8d4415": "rawUseName(bytes32)", +"5d8daa04": "WrongTokenEmptied(address,address,uint256)", "5d8dd304": "founderTokensAvailable()", "5d8e0c2c": "isManualTradingAllowed()", "5d8e7376": "DAOBalanceSnapShot()", "5d8e772f": "gameCore(uint256,uint256,uint256,bytes32)", +"5d8ef4e9": "checkRecipient(address,address)", "5d8f2640": "store(bytes32,bytes32,bytes32)", "5d8f3b76": "createPercentageRequest(uint256)", +"5d8f7f2a": "createOrUpdateNode(address,string)", +"5d90b87c": "_bottlenose()", +"5d90d670": "notifyDeposited(address,address,uint128,uint112,uint256,uint256)", "5d90df32": "TRONIX()", +"5d91121d": "decreaseStakingPoolOperatorShare(bytes32,uint32)", +"5d91407c": "pack(address,uint256,uint256)", "5d9169f0": "ICO(address,address,address,address)", +"5d91bd0c": "Approved(address)", "5d91e27b": "MVM24PeriodsCapUSD()", +"5d929f91": "MemberHeartbeated(uint8)", +"5d92e486": "clientGoldmine(uint256)", "5d92e5d2": "ipyh()", "5d946afa": "trashed(address)", "5d94e35c": "contractRefundStarted()", @@ -53597,109 +98120,207 @@ "5d956b3e": "changeGroveAddress(address)", "5d95738b": "vHasVoted(uint256,address)", "5d95a08b": "MizuCoin()", +"5d969ee4": "balanceOfDai()", "5d969f8f": "updateCustomerACC(address,address,address)", +"5d96a2ba": "hardDeposit(uint256)", "5d96ec65": "setAdministrator(address,string,bool)", "5d975d70": "mx(bytes32)", "5d977c02": "withdrawalFor(uint256,uint256)", "5d9796eb": "WELTCOIN()", +"5d98535c": "alreadyWithdraw(address)", +"5d986cd3": "managerSetTokenURI(uint256,string)", "5d989a0c": "NyronChain_Crowdsale()", +"5d98c373": "updateFeeRecipient(address,address)", "5d98d9ee": "ChannelCreated(string,address)", "5d98fd9f": "Presale(address,address)", "5d990791": "getDenominationByIndex(uint256)", "5d99e02f": "myPinerTokenTest1()", "5d9adc94": "withdrawPendingTransactions()", +"5d9b1cfc": "_existBattleGround(string)", +"5d9c45db": "setUsedNonce(address,uint256,bool)", +"5d9c4afe": "encodeRequest(uint128,address,address,address,address,uint256,uint64,address,bytes)", "5d9c4f0f": "getFeeRecipient(address)", +"5d9d2b2b": "unpropose(uint256)", "5d9d595c": "sendWingsRewardsOnce()", "5d9d5b9a": "CreatedCAT(address,uint256)", "5d9d8dd9": "makeupShiny(uint256)", "5d9dacb5": "OPEN_VOTE_PERIOD()", +"5d9dbc1e": "maxAdvSupply()", +"5d9dcca7": "reinvest(bytes32,address)", +"5d9dddfa": "totalInterestPerYear()", +"5d9dfb05": "drainUSDT()", "5d9ec210": "signTransaction(uint256)", +"5d9ec2f8": "initTokens(address,address)", +"5d9f783d": "adminTransferEthFund()", "5d9fa6fc": "getContractBal()", "5d9fd8b0": "listPersons()", "5da01a5b": "configure(bytes32,bytes32,uint256,uint256,uint256,address)", +"5da02c6a": "computeLockedLP(uint256,address)", "5da03ff8": "EthergotchiOwnershipV2(address)", "5da05e2e": "setCoinLimit(uint32)", "5da08c42": "createSeedTeam(uint8,uint256[9],uint256[9])", +"5da09b88": "isRetailer(address)", "5da0a987": "Run()", +"5da10c1c": "finishIndexes(uint256)", "5da12d50": "Oduwacoin()", +"5da1d83c": "deleteHashTimer(bytes32)", +"5da22b21": "onBuyUseBalance(address,uint256,uint256)", "5da24f90": "closeTimer()", +"5da26c7c": "totalFlappsforSale()", +"5da270fc": "ZERO_EX_EXCHANGE()", +"5da2b295": "shareNFTeGG(address,uint256)", "5da34093": "bonusRemain()", +"5da3c240": "addNftAddress(address)", "5da3d3d2": "minHEXCap()", +"5da3e9cd": "bonusValues(uint256)", +"5da42660": "addWhiteListTransfer(address)", "5da47721": "getVIPLevel(address)", "5da4a1d3": "setPercentage(uint256)", +"5da4a5f6": "teamPower(address,uint256)", "5da54cee": "DragonCrowdsale()", "5da5a9b1": "ownerUpdateMinMaxNumber(uint256,uint256)", +"5da5ad73": "ContestExited(uint256,uint256)", +"5da5bc55": "wNxm()", +"5da5cf3c": "calcEthReserveOutByLPIn(address,uint256)", "5da5f5ab": "Distribution()", +"5da6058e": "basePrice4()", +"5da65ada": "getSteps()", "5da6628a": "transferExt(address,uint256)", +"5da6a9ff": "freeCollateral(bytes32)", "5da6bf67": "movePlayer(uint8[176],uint8,uint8,uint8)", "5da6c04d": "getFeesOwedToOperator()", "5da6c418": "burnMintFrom(address,uint256)", "5da6e035": "_openAndJoinCDPWETH(uint256)", "5da6ec5b": "t8exToken()", +"5da79d63": "setUniRouterAddress(address)", +"5da7c8ec": "fundingFeeLpShareRatio()", "5da85a16": "setCEx(address)", +"5da87a24": "PostInvested(address,uint256,uint256,uint256,uint256)", +"5da8825e": "set_UniMKRLiquidityContract(address)", "5da888aa": "ChainKeyToken()", "5da89ac0": "weiRefunded()", "5da96520": "transferTeam2Tokens(address,uint256)", "5da9781b": "readUint256s(bytes32[])", +"5da98876": "setFnx(address)", "5da99f5e": "upgradeCardDamage(uint256)", "5daa0c37": "referrerLinkedSales(bytes32)", +"5daa3160": "beneficiary(uint256)", +"5daa4e16": "_areRefundsDisabled()", "5daa87a0": "Initialized()", "5daab236": "runIco()", +"5daab756": "marketIndex(address)", +"5dab0fe3": "OWNER_FEE()", +"5dab1f51": "SHUW()", +"5dab2420": "account()", "5dab2e0f": "left82(uint256)", +"5dabb16e": "calculateNetworkTradeDecrements(uint256[],uint256)", +"5dabda40": "extraSurplusIsTransferred()", "5dac1601": "SimpleStablecoin()", "5dac48bb": "approvePreSignedHashing(address,address,uint256,uint256)", "5dac5682": "removeAuthorization(address,address)", "5dac7044": "checkHardCap(uint256)", +"5dacc815": "withdrawAll(address[],uint256[],uint64[],uint256)", +"5dacca44": "getTerminationContractDetails(bytes32,uint256)", "5dacf084": "THACO2()", +"5dad24f3": "lockallll()", "5dada964": "expectedRateContract()", +"5dadd57a": "modifyParameters(address,bytes32,bytes32,address)", +"5dadd771": "underlyingLiquidationThresholds(address)", "5dadf485": "takePosition(uint256)", +"5dae4a23": "approve_681(address,uint256)", "5dae4e50": "makeItRain()", "5daf08ca": "members(uint256)", "5daf7514": "redeemTokens(uint256,uint256,bytes32[])", "5daf8a71": "DestroyToken(uint256)", "5db07aee": "mintFeeDenominator()", "5db09db5": "getSplitPotAsFixedPointForGameId(uint256,bool)", +"5db0aa26": "investor_ETH_bonus(address)", +"5db0aac1": "setMaxSellBatch(uint256)", +"5db0ad40": "setBBOXAddress(address)", +"5db107a9": "setResults(uint256)", +"5db13476": "thousand()", "5db17dab": "CDTToken(uint256)", +"5db1ad7b": "integer_1()", +"5db1d912": "addProduct(int256,string,int256,int256)", +"5db214da": "getBearToken()", "5db2a233": "awailableDividends(address)", "5db30bb1": "getMaxTotalSupply()", +"5db31c63": "Referral(address,uint256)", +"5db34277": "joinswapExternAmountIn(address,uint256,uint256)", +"5db34566": "renameTeam(uint256,string,string)", "5db38c63": "nDemocs()", "5db39a1e": "totalFails()", "5db39d74": "HayaCoin()", "5db3f963": "registerSimple()", "5db3ffa5": "getUBetCheck(address,address)", +"5db41658": "replaceDepositProfileAtId(uint32,string,uint8,address,uint256,uint256)", "5db42841": "createContractGameItem(string,uint256)", "5db46961": "proxyExchange(address,uint256,string,bytes32)", "5db4cd21": "ir()", "5db524ad": "finishDividends()", "5db5301f": "unsubcribe(address)", +"5db531a1": "syncVotes()", +"5db531fa": "burnPollFinance(uint256)", "5db5d1fb": "startTimeTLP2()", +"5db5f57b": "lockoutReleaseRates(address)", "5db5fc24": "alterInitialPricePerShare(uint256)", +"5db62cf2": "getShortIdent(uint256)", "5db62dab": "getBalanceForUser(bytes32)", "5db6687b": "Dev_TokenReleased()", +"5db6984e": "refundNFT(uint256)", "5db6a31f": "transferBroker(address,uint256,uint256)", +"5db7de6f": "vikingPerBlock()", "5db7ef3d": "intoverflow_mul(uint256)", +"5db88e85": "totalDepositCap()", "5db8e202": "evaluateProposalAction(uint256)", "5db8f084": "getNeighbourReward()", +"5db94a9c": "transfer_ownership()", +"5db9ee0a": "Unpaused(address)", +"5dba4c4a": "decayBaseRateFromBorrowing()", +"5dbade68": "getSaiAddress()", +"5dbadee8": "getSurplusCollateral()", +"5dbafb0a": "adminTokenDeposit(uint256)", "5dbb0ef8": "TuZaiCoin(uint256,string,uint8,string)", +"5dbb16e7": "l3l1users()", "5dbbd139": "CentraSale()", "5dbbfc47": "getMaxLoss(address)", "5dbc374f": "UBCoin()", +"5dbd37a6": "getDais()", +"5dbdda69": "REWARD_INTERVAL()", +"5dbe11b8": "list_arbone(uint256)", "5dbe47e8": "contains(address)", +"5dbe71c7": "sdx()", +"5dbec4ff": "getTotalRemainingRewards()", +"5dbeffe5": "__comp()", +"5dc0369f": "usdGetCount()", +"5dc0409a": "pethCollateral(bytes32,address)", +"5dc0b6df": "getCurrent_S()", "5dc10a45": "whitelistMultiForTier(uint256,address[],uint256[],uint256[])", "5dc11a89": "setNumTicks(uint256)", +"5dc12891": "f(uint256[3])", +"5dc1aad3": "register(string,uint256,address)", "5dc1ba1b": "closeLotteryAndPickWinner()", "5dc1bb52": "removeLocked(address,uint256)", "5dc1c79d": "KANYE()", +"5dc20ace": "purchaseHT()", "5dc2157d": "getBalancesOfAddress(address)", "5dc22cce": "attackPlayer(address)", +"5dc2803a": "MAX_OPERATIONS()", "5dc2944a": "ratesForCurrencies(bytes4[])", "5dc3d02d": "rc5()", +"5dc40c0a": "changeFileUser(bytes32,address,bytes32,bytes32,uint64)", "5dc43f6e": "AddAuthority()", +"5dc47b57": "undelegateStash(bytes32)", "5dc49bf8": "SellENSCreated(address)", +"5dc4c93b": "joinDaiJoin(address,uint256)", "5dc4d8a6": "proposalTarget(uint256)", "5dc4dcd1": "TicketPurchased(address,uint256,uint256,uint256,uint256)", "5dc54308": "KickSportsManager()", +"5dc5820a": "ChangePrice(uint256,string)", "5dc5aefe": "startIncentiveDistribution()", +"5dc5d9c2": "clearBook()", +"5dc6116f": "setFreezeAgent(address,bool)", +"5dc683c6": "totalBidderTokens()", "5dc6bfe4": "distributeLRN(address[],uint256)", "5dc6f3df": "registerNameCore(uint256,address,bytes32,bool,bool)", "5dc70cda": "_shareToPreviousOwner(address,uint256,uint256)", @@ -53707,25 +98328,41 @@ "5dc77e26": "andThen(string,address)", "5dc824b9": "voteNoLock(address,uint256)", "5dc86b85": "adminGetAmountAddressDial(address,address)", +"5dc8abb2": "steal(address)", "5dc94af6": "getTokensTotal()", "5dc96d16": "burnEnabled()", +"5dc98fb6": "getRateWithEth(address,address,uint256)", +"5dca3452": "initialize(uint256,string,string,string,uint8)", "5dca53d3": "right30(uint256)", +"5dca6bf9": "noDelegateCallPrivate()", +"5dca714c": "disburseJob(string,address[],uint256[])", +"5dcb60c7": "addemp(address)", "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)", +"5dcc528c": "setAddressAsProxy(bytes32,address)", "5dcc6dbc": "spawnAxie(uint256,address)", +"5dccb917": "getAssetIntroducerPriceDmgByCountryCodeAndIntroducerType(string,uint8)", +"5dcd3ea9": "preSaleSum()", "5dcd967d": "ndc()", "5dcdddd1": "testSafeToAddFix()", +"5dce0515": "mintGuardianPaused()", "5dce431b": "addGame(address,uint256)", "5dce9948": "getTranscoder(address)", "5dcf1b77": "fileMerkle(bytes32[],uint256,uint256)", "5dcf451b": "CoinDogToken()", "5dcf7c8c": "proxies(address,uint256)", +"5dcfb4fa": "pop(uint256)", +"5dd06004": "setSalesWallet(address)", +"5dd0a830": "secondItem()", +"5dd15cc5": "blockReference()", "5dd18a22": "setItemsNotForSale(uint256[])", "5dd19463": "angelFoundationAddress()", +"5dd23e4f": "set1UsdPegOnAllCurrencies(bool)", +"5dd2458e": "set_new_DAI_TokenContractAddress(address)", "5dd283cb": "pickSmallWinner()", "5dd284e3": "getAllGoldTransactionsCount()", "5dd39c12": "SOD()", @@ -53733,67 +98370,125 @@ "5dd48b04": "PURCHASE_PREMIUM_RATE()", "5dd4a65f": "lookup(address,bytes32)", "5dd588df": "isAuthorizedToTransferFrom(address,address,address)", +"5dd6286d": "wrapETH(address,uint256,uint256)", "5dd672ec": "latestBid()", "5dd68acd": "setAddresses(address,address,address,address,address)", "5dd68f36": "getTotalInvest()", +"5dd697dc": "collateralOriginationFee(address)", +"5dd7736b": "TokenMineSupply(uint256)", +"5dd80855": "receiveResult(bytes32,bytes)", +"5dd84f2f": "f1b()", +"5dd85a7d": "TokenDeleted(uint256)", +"5dd86241": "setDepositFee(uint256,uint256)", "5dd871a3": "canMint(uint256)", +"5dd882dd": "getOwnerRequiredNum()", "5dd8e1d5": "kek()", "5dd8eb50": "rate4()", +"5dd9147c": "getPower(address)", +"5dd927d0": "realBalance()", +"5dd941cb": "DeployAPM(bytes32,address)", +"5dd9d9fa": "getImpactUnmatchedValue(bytes32)", +"5dda3bdc": "querywithdraw(uint256,uint256,uint256)", "5dda837f": "mineBalance()", +"5ddab4d4": "boo(uint32)", "5ddae283": "transferRegistrars(bytes32)", "5ddaf07f": "StarbaseToken(address,address,address)", "5ddb2585": "icoStartTimestampStage4()", "5ddb8a2e": "sendBonusTokens(address[],uint256[])", "5ddbc632": "setHardCapToken(uint256)", +"5ddc3ecd": "deployFeed()", +"5ddc916a": "getDaiBalance()", "5ddc98ba": "updateKYCWallet(address)", +"5ddced68": "onBuy(address,uint256,uint256,uint256,bytes32)", "5ddd81b0": "firstPeriodCap()", "5ddd8248": "setBurnerOwner(address,address)", "5dddea66": "updateState(uint256,uint8,uint256)", "5dde2066": "addBlocks(uint256,bytes,uint256[])", +"5dde3df2": "quoteRaised(bytes32)", "5ddf2998": "setOwnerValidatorAddress(address)", "5de01497": "ownerWithdrawERC20Token(address,uint256)", +"5de0398e": "goodwill()", "5de047d3": "existPlatform(bytes32)", +"5de08d3b": "getHash(bytes,address,uint256,bytes32)", "5de0e689": "startPromotion()", +"5de1360a": "endReleasingCompoundBlk()", +"5de1f8e4": "VestedTeamTokens(address,address,address,address)", +"5de22ea0": "setProposalFail()", "5de270c5": "adminFixCurve(uint32)", "5de28ae0": "getStatus(bytes32)", "5de2a21b": "onIncreaseApproval(address,address,uint256)", +"5de3326c": "tierData()", +"5de3476c": "burnNFTeGG(uint256)", +"5de39934": "setRewardEscrow(address)", +"5de3a979": "getKey(address,address,uint256)", "5de3ba97": "getAllIdentifiers()", +"5de4003a": "validateCPCCampaign(address,string)", "5de40f30": "innerContract()", "5de4381b": "_addItemToParent(bytes32,bytes32)", +"5de4a7dc": "passwordb()", "5de4c6fc": "lock(address,bool,uint256[],uint256[])", "5de4ccb0": "upgradeAgent()", +"5de512b1": "QUARTER_LENGTH()", +"5de52ce5": "addPlayer2(address[])", "5de52fb7": "TakeMyEtherTeamAddress()", +"5de67e77": "adminWhiteListAdder(address,bool)", +"5de6ad7e": "TokensAllocatedForSale(uint256,uint256)", +"5de6c42f": "buyerFee()", "5de6dc55": "getTokensOfOwner(address)", "5de6f040": "unlockFundrBal(bool)", +"5de70f79": "minterAdders(address)", +"5de7453e": "unlock100Days()", +"5de7da0a": "changePresaleSupply(uint256)", "5de7e350": "getTokensFromAddressEmits(address,address)", +"5de7fcd0": "SHARES_PRECISION()", "5de81534": "getEditionsCount(uint256)", +"5de81fcd": "addadmin(address)", +"5de82199": "DrawSuccess(uint256,address,uint32,uint32,uint8,uint8)", +"5de84ddd": "CastleAuctionCreate(uint256,uint256,uint256,uint256,uint256)", +"5de88174": "teamAddBonus()", "5de910bc": "subSegmentation(address,uint256,uint256,uint256)", "5de924bf": "DeepCoinToken()", +"5de929c8": "kycers(address)", "5de97c8d": "setIntervalTimeAdjust(uint8)", +"5de9a137": "locks(address)", "5dea186c": "accept_relayed_call(address,address,bytes,uint256,uint256)", "5dea19f5": "getHolderExternalIdByAddress(address,address)", +"5dea3b2f": "DCASH_DECIMALS()", "5deab0ec": "grantLoanOwnership(bytes32,address,address)", "5deb2cec": "fundsRecord(address,uint256)", +"5deb689e": "crowdBalanceInUsd(uint256)", "5debb827": "SCFToken()", +"5debc26a": "balanceOfEachStake(address,uint256)", "5debc7af": "get_tokenTime()", "5dec18d4": "motto()", +"5dec2fd3": "bsfPerBlock()", "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)", +"5ded3a09": "recordCommittedSnapshot(address)", +"5ded8b06": "cancelProposal(uint256,uint256)", "5dedd9cc": "resetWinners(uint256)", +"5dedfce4": "FoundersWalletChanged(address)", "5dee2492": "AIR_2_SUPPLY()", +"5dee5cff": "getAdminData(address,string)", "5deeab39": "freeTokensIssued()", "5deeffb2": "getSoftcapReached()", "5def5814": "getByDistrict(uint256)", "5defaec6": "createVirtualAddress()", "5defe3d9": "grantAccessDeposit(address,address)", "5deff965": "getEtherum()", +"5df012f6": "userRewardPerTokenPaid(bytes32)", +"5df12834": "ImplChangeRequested(bytes32,address,address)", +"5df1539c": "CashbackCode(address)", +"5df25bda": "noFeeRecipent(address)", "5df285c8": "getBonusTokens(uint256,uint256,uint256)", "5df29b4f": "settleBetUncleMerkleProof(bytes20,bytes20,uint40)", "5df2df2f": "multiSendTokenComplete()", +"5df345db": "referrers_(address)", "5df34ff2": "buyMintingAddress(uint256,uint256)", "5df350ee": "setStableCoinAddress(address,address)", +"5df3b1f4": "lapFinishTime(uint256)", "5df3bdb9": "ABRATOKEN()", "5df3d87e": "bet1()", "5df58352": "calculateScoresIfCellIsBought(address,address,uint256)", @@ -53806,11 +98501,19 @@ "5df73398": "loadMesaVerify(bytes32,bytes32[],uint8[])", "5df75bdf": "totalTokensICO2()", "5df8122f": "setManager(address,address)", +"5df81330": "votes(uint256)", "5df86d29": "etherInContract()", "5df8d74e": "bytesCallWithArray(bytes,bytes32[4])", "5df8f17b": "createVote(uint256,address[])", "5df93f99": "MICL()", "5df95255": "Rating(address,address,int256)", +"5df99266": "D100BNBPrice0CumulativeLast()", +"5df9c0e0": "DETOAddress()", +"5dfa3a53": "sellPool(uint256,uint256,address)", +"5dfa41df": "CompleteOrder(uint256)", +"5dfa6408": "getCRV()", +"5dfa7396": "stakescount(address)", +"5dfab1f8": "fullUnitsVested_total()", "5dfb94cf": "nextBurnFeeProp(uint256)", "5dfc09a4": "getCurrencySymbol()", "5dfc273c": "Cloudbric(address)", @@ -53818,67 +98521,127 @@ "5dfc3459": "maxIncrease()", "5dfd1bff": "MeetingTimeSetFailure()", "5dfd3278": "VOTE_AGAINST()", +"5dfd76b0": "useAddon(uint256,uint256)", +"5dfd7876": "buyXnameQR(address,uint256)", "5dfde910": "STELLARGOLD()", +"5dfdf3a4": "LogPayDividendsOutOfFunds(address,uint256,uint256,uint256)", +"5dfe4198": "checkRegistryRequest(address,address,uint256)", +"5dfec676": "roundNo()", "5dfed2bb": "setCompte_14(string)", "5dfee9bb": "refundTokens(uint256)", "5dffe6dc": "contrEntrance(address)", "5e0055e7": "ThreeStarToken()", +"5e007176": "_claimableBalanceOf(uint256,uint256,uint256)", "5e007742": "Propethy()", +"5e0092fc": "balancerRegistry()", "5e00a177": "revokeVesting(address,string)", "5e00b9a9": "incompletePercent(uint256[3])", "5e00bd96": "DoNotBloodyDeployThisGetTheRightOne()", +"5e00e679": "setRewardAddress(address)", "5e00e7b2": "getNoContributors()", +"5e010bad": "sushi_eth_wbtc_lp()", +"5e0117d6": "setLiquidationDelay(uint256)", +"5e013b01": "addBonusToken(address,address,uint256,uint256,uint256)", +"5e019c4a": "setRewardOutTwo(address)", "5e01b2e6": "Gobi()", "5e01d395": "getCapAtTime(uint32)", "5e01eb5a": "getSender()", "5e01ed34": "associatedAddresses(uint256)", +"5e021c51": "repayAtFixedRate(uint256)", +"5e027601": "updateCurrency(address)", "5e02b84d": "Voiptoken()", +"5e02c341": "releaseDate(address)", +"5e02c51e": "boardroom()", "5e031606": "round2TokensRemaning()", +"5e031f4a": "setr2(uint256)", +"5e03a2b9": "ImageBought(uint256,address,uint256)", "5e03d0c6": "getCreationDateOfHistoricalMetadata(string,uint256)", "5e03d393": "setAccountFrozenStatus(address,bool)", "5e04672b": "approveSynthesizing(address,address,uint256)", "5e047822": "fundOf(address)", "5e047975": "recoverSigner(bytes,address,uint256,uint256,uint256)", +"5e04d124": "IcoClosed()", +"5e04d483": "logUnstakeInit(address,uint256,uint256,uint256)", +"5e051192": "lastTimeSell(address)", "5e05bd6d": "timestampFromDateTime(uint256,uint256,uint256,uint256,uint256,uint256)", "5e05e84d": "buyCells()", +"5e064d9a": "_ensureOwnershipOfSmartWalletAndKeyRingControllers()", +"5e067446": "targetVersion()", +"5e0685c3": "cancelOrder(address,address,uint256,uint256,address,address)", "5e068da5": "proxyVersion()", +"5e068de1": "timeRestrictionEnabled()", "5e06911e": "SpecialTrained(uint256,uint256,uint256,uint256[2])", +"5e069d0d": "reinvest(address,uint256,uint256)", +"5e069f33": "techIssue(address,uint256)", +"5e0740ed": "f1s()", "5e079aa5": "giveEthFundAddress()", "5e07c354": "vestingTokens()", +"5e07dd5b": "newDesignatedVoting(address)", "5e07f240": "shiftBitsLeft(bytes,uint256)", "5e0842d7": "VEToken(uint256,string,string)", +"5e08b9d5": "given_gift(uint256,uint256)", +"5e08e62c": "CroupierTransferred(address,address)", "5e08f5fa": "setCGO(address)", +"5e098f05": "isTargetReached()", +"5e0a2134": "draftBobTokens(uint256[],uint256[])", "5e0a6049": "LOG_newGasLimit(uint256)", +"5e0acb62": "slippage(address)", +"5e0af46c": "getFullBlockBonuses(uint256,uint256)", +"5e0afccc": "updateRank(address,uint256)", "5e0b1259": "end_block()", "5e0b1597": "_unpackRatingValue(uint256)", "5e0b4cb6": "setData_2(uint256)", "5e0b5d9b": "changeStartAndEndTime(uint256,uint256)", +"5e0b6b9c": "setIsDyDxActive(bool)", +"5e0b8432": "claimStakingLP()", "5e0be607": "unlockAllTokens()", "5e0be75c": "setDividendPayout(uint256,uint256)", +"5e0c8c15": "LogSetMinter(address)", "5e0c8c8c": "getCountSales(uint256,uint256)", "5e0c923a": "RinneganToken()", "5e0d0f30": "krsUsd()", +"5e0d443f": "get_dy(int128,int128,uint256)", +"5e0df401": "actUserNodeLevel(address,uint256)", "5e0e2118": "removeSignature(string,int256)", "5e0e2957": "dumpOut()", +"5e0e5b9f": "stage_prod_cdps(uint256,uint256)", +"5e0f9e06": "interfaceSignature_ERC165()", "5e0fac2e": "unlockedBalance(address)", "5e0fec6a": "knownReserved()", "5e0ff394": "setCompetitionAdmin(address)", "5e10177b": "confirmDelivery()", "5e101e51": "editionController(uint256)", "5e1045ec": "addWhiteList(address[])", +"5e106864": "setLotetryAddress(address)", +"5e10ecc2": "_NGNS()", +"5e10f6d6": "Lp0ToLp1Route(uint256)", +"5e110f8b": "FeesWithdrawn(address,address,uint256)", "5e11544b": "newPeriod()", +"5e117a2c": "_lpWithdrawFeeRatio()", "5e11dc0b": "openDistribution()", "5e123ce4": "gameStarted()", +"5e12845e": "getElectionCandidates(uint256)", +"5e129c85": "canReset()", "5e131fa2": "removeLocker(address,address)", +"5e1331e0": "P(uint256)", +"5e134264": "swapExactTokensForETH(bytes)", +"5e134eda": "alreadyRefunded(address)", +"5e1372a1": "withdraw0()", "5e1372f4": "lockup(address,uint256,uint256)", +"5e14fb35": "availableTags(uint8,uint256)", "5e159cd4": "LogOwnerRemoved(address,address,address)", "5e15d642": "totalNumberOfTokensForSale()", +"5e1620cf": "buyAssetIntroducerSlot(uint256)", +"5e1648cb": "multiTransferSingleValue(address[],uint256)", "5e1665f3": "SmartParkApp()", +"5e172024": "DistributeLottery(uint256[],uint256)", "5e172fa3": "allowtransferaddress(address)", "5e17580a": "setTime5(address,uint256)", "5e1758fa": "addPermission(address,bytes32)", "5e17b694": "promisedTokens()", +"5e17cfd2": "stake24m(uint256)", "5e17d423": "getBountyRate(address,address)", +"5e18da76": "messageSentEvent(address,address,bytes,bytes32)", "5e191293": "emitBoardRatingGiven(address,uint256,uint8)", "5e1936d4": "testThrowSetNotTransferableNotOwner()", "5e199157": "setWalletOut1(address)", @@ -53887,8 +98650,14 @@ "5e19d316": "clearICObyAddress(address)", "5e19deda": "preCap()", "5e1a01c3": "createAndJoinCDPAllDai()", +"5e1a3243": "ThreeRockets(address,uint256)", +"5e1a39d0": "CheckBal()", "5e1a6c17": "requesters(uint256)", +"5e1b5b60": "tendCounter()", +"5e1babc6": "exAss(uint256,uint256)", "5e1bd33e": "getBuildCost(int32,int32,bytes16)", +"5e1bd52a": "transferToChain(uint256,uint256)", +"5e1c1059": "fulfillRandomnessRequest(bytes)", "5e1c8f89": "scoreOf(address,address)", "5e1ce5b0": "phasePresale_To()", "5e1d5482": "about()", @@ -53897,87 +98666,170 @@ "5e1d8cb7": "TextChanged(string)", "5e1d9aba": "sanCurrentTotal()", "5e1dca04": "shareholder1()", +"5e1dd8c4": "Commit(address,uint256)", +"5e1ddf29": "generateCreateData()", "5e1e1004": "setPaymentAddress(address)", +"5e1e35e3": "getWhitelistToUserTotal(uint8,address)", "5e1e547d": "unsign(uint256)", "5e1e5c88": "betByte()", +"5e1e6325": "getAmountOut(uint256,address,address)", +"5e1ea031": "_getAndUpdateLockedAmount(address)", "5e1eabd2": "soldPerCurrentRound()", "5e1f3fa8": "CREATE_REPO_ROLE()", "5e1f56d9": "changeWalletOwner(address)", "5e1f8b59": "_totalAssetSupply(uint256)", +"5e1fab0f": "renounceAdmin(address)", "5e1fc56e": "close(uint64,uint256,bytes32,bytes32,bytes)", +"5e200090": "setLimitValidatorsPerDelegator(uint256)", +"5e20fcbb": "GetAddressContract()", +"5e2160ef": "idxEnd300()", "5e217162": "availableSTCDRTokensOF(address)", "5e21f687": "getMarketID()", +"5e225621": "stakers(uint256,address)", "5e22a2fb": "getTokenIdByHash(string)", "5e22b760": "buyDEV()", +"5e230527": "bgbf()", "5e23464e": "TOTAL_REQUEST_TOKEN_SUPPLY()", "5e24de11": "ownerSetCrowdsaleClosed(bool)", "5e25495e": "getProviderSupply(uint256)", +"5e25d23f": "writeAddress(address)", "5e25f96d": "setYccContractAddress(address)", "5e2642c9": "isInitialSupplied()", +"5e26fc63": "gaufDelivered()", +"5e2733e0": "changeBlocTokenAdress(address)", "5e280e4e": "validateTransaction()", "5e280f11": "endpoint()", +"5e288c3b": "rankPlayers_(uint256)", +"5e292c4c": "getLotteryRewards()", +"5e297233": "mintBulk(uint256)", "5e29c47c": "walletCreatedTimestamp(address)", +"5e2a291f": "vypisCislo()", +"5e2a6065": "initializeMock()", "5e2a725c": "enableEmergencyBlock()", +"5e2afd96": "acceptedPayTokenAddress()", +"5e2bb5c5": "upperDeviationThreshold()", "5e2bd421": "enableLogic(address)", +"5e2c19db": "hasWithdrawn(address)", +"5e2c1b3a": "initiateFlashLoan(address,uint256)", +"5e2caeb9": "calculateIssueTokenPrice(uint256,uint256,uint256,uint256)", "5e2cb4f1": "BluToken()", "5e2d13af": "addONG_AUDIT(bytes32,string,string,bool)", "5e2d1f0d": "withdrawAfterTime()", "5e2d285a": "GICTLock(address,uint256,uint256,uint256)", "5e2d3798": "ETHERberry()", +"5e2d8264": "seller_total_products(address)", "5e2dff7a": "foundersTokensLockedPeriod()", "5e2e555f": "RogisterToVoteOnTransfer(address)", +"5e2e88cf": "addSynthsToFlexibleStorage()", "5e2ea5bd": "FIRST_PHASE_MAX_SPAN()", "5e2ea799": "currentFlowerPrice()", +"5e2eef54": "nonEthPurchases(address[],uint256[])", +"5e2fd393": "AvatarCreate(address,uint256)", "5e2fe372": "getLastOrderIndex()", "5e3013f1": "PlayX30()", "5e3045c8": "getImpactTotalValue(string)", +"5e30865e": "mintFromEth(uint256)", +"5e309e41": "registerNewTokenSymbol(address,string)", "5e30b8a6": "refund(address,address)", "5e30c961": "premium(address,address)", "5e31005d": "scoreThresholdParams(address)", "5e310670": "cancelTokenToEthOrder(uint32)", "5e311cd7": "largestDonor()", "5e318e07": "withdrawFees(uint256)", +"5e318f27": "depositBalancesDelegated(address,address,uint256)", +"5e3198f8": "setDBudget(uint256)", +"5e31da3b": "TotalLPSupply(address)", +"5e32410a": "transferStakeOwnerShip(uint256,uint256)", "5e326b92": "setPreSaleStatus(bool)", +"5e32f57e": "lockRewardsOfOneNFT(uint256)", "5e331e62": "iterate_get(uint256)", +"5e33b41c": "Movies(uint256)", +"5e33cea4": "getPackageIdByIndexS(uint256)", "5e33f94d": "ApolloSeptemCappedCrowdsale()", +"5e34b802": "getUserTeamDeposits(address)", "5e35359e": "withdrawTokens(address,address,uint256)", +"5e35580f": "shareMonthlyRewards(uint256)", "5e355dcc": "PJRToken()", "5e3568b8": "session()", +"5e365a5d": "vestableTwa(uint256,address)", +"5e371bce": "mint(string,string,uint256,uint256,uint256)", +"5e371c34": "approve_103(address,uint256)", "5e377b51": "Jackpot()", +"5e379797": "updateCommissionPercent(uint256)", +"5e37e106": "sendRemainingTokensIfSixMonthsPassed()", +"5e383515": "startWithAllReserves()", "5e383d21": "values(uint256)", "5e38ab4c": "BabyCoin(uint256,string,string)", "5e38c77d": "getProductHistoryDate(bytes32)", +"5e39174e": "updateMaticPriceManually(uint256)", "5e393973": "get_contrib_arbits_max()", +"5e39776e": "setDeleverAmtFactorMax(uint256)", +"5e3a02cb": "amountToRaise(uint256)", +"5e3aea12": "spell(uint256)", +"5e3b2818": "EventRemoveSellOrder(address,uint256)", +"5e3b4365": "getProposals(uint256,uint256)", "5e3b456c": "creatTokens()", +"5e3b7a9c": "MinterAssigned(address,address)", "5e3ba8ac": "usersGetter()", "5e3bb4cc": "minimalSuccessTokens()", +"5e3bc626": "isClientOfContract(uint256,address)", "5e3bcaf7": "Fee(address[],string,uint8,string)", +"5e3c02ac": "govSettingsUpdate(address,uint256,string)", +"5e3c87b1": "takeCoin(address,uint256)", "5e3cb7b0": "setTotalUsdAmount(uint256)", "5e3cbb7c": "dayWithdraw()", +"5e3cd7bc": "voteCount(address)", "5e3ced74": "callSurplus()", +"5e3d3957": "lastBid()", "5e3d3b8a": "isPREICO()", +"5e3d3f7e": "cPancakeSwapRouter()", +"5e3d536d": "totalAmountForReferrer()", "5e3dbedb": "getTokenDescriptions(address,uint256[])", +"5e3dc9b7": "lpPow()", "5e3df83f": "setFundingtokens(uint256)", +"5e3dfde9": "supportSubordinateAddress(uint256,address)", "5e3e2687": "transferFromParent(address,uint256,address,uint256,bytes)", "5e3e37d1": "XfiniteAsset()", +"5e3e51f1": "setFinishedCount(uint256)", "5e3e6092": "newService()", +"5e3e8852": "delExt(uint256)", "5e3e9158": "createWine(string,string,string,string,string,string,bytes32)", +"5e3f9657": "pixel(uint16,uint16)", "5e3fa843": "registerContract(string,bytes)", "5e3fcbd1": "mintNewTokens(address,uint256)", +"5e3fe63b": "_setArtemRate(uint256)", +"5e3ffee6": "boughtBy(address)", "5e402ae2": "getCurrentTokensPerEther()", "5e402bb5": "setInfoTokenSilverRatio(string)", "5e403a9c": "phase7Price()", "5e404de3": "setMaximumCredit(uint256)", +"5e40a439": "RemoveAdministrator(address)", +"5e40e293": "getMachineCount()", +"5e412858": "initializeCollateralType(bytes32)", +"5e417700": "chargeGasFee(address,uint256)", +"5e425538": "debug(address,uint256)", +"5e42793c": "addCardTypes(uint16[])", "5e4293ba": "i_am_generous()", +"5e42b455": "getRewardBalance()", "5e431709": "sealedBids(address,bytes32)", "5e431a6f": "phasePublicSale1_To()", "5e439f66": "changeAge(uint256)", +"5e43a145": "getWalletByUsername(string)", "5e43f719": "enablePublicTransfers()", +"5e44154d": "PayChallan(string,string,uint256)", "5e44423c": "ChangePreSaleDates(uint256,uint256)", +"5e446ab7": "setProgressive(int256,int256)", "5e44daf3": "vote(uint256,int256)", "5e44e0a4": "modifyHorseyTier(uint256,uint8)", +"5e45f54c": "skull()", +"5e46bf8d": "setAccountName(uint256,string)", "5e46f419": "leed()", "5e475bb6": "createKT(string)", +"5e47655f": "slash(bytes)", +"5e476ba0": "approve_846(address,uint256)", +"5e479175": "buyNEX(address)", +"5e48128f": "AffiliateAdded(address,bytes32)", +"5e482a46": "getPoolStatsFromEpoch(uint256,bytes32)", "5e48379a": "changePriceContract(address)", "5e488540": "claimRefund(address,bytes32)", "5e4887bd": "initializeTime()", @@ -53985,283 +98837,541 @@ "5e48f58f": "PRESALE_PERCENTAGE_2()", "5e49db8c": "getUsersFuelsIds()", "5e49fbfc": "WOS()", +"5e4a1848": "setInited()", "5e4a1d36": "getSavingsBalance(address)", "5e4a627d": "RN()", "5e4a8a20": "setAppCode(bytes32,address)", +"5e4a9a65": "redemptionRequests(address)", +"5e4abebf": "UNICLP()", "5e4b587b": "_BLOCK_REWARD()", "5e4b5f7d": "setColdAddress(address)", +"5e4b79be": "buyLeaves(uint256,address)", "5e4ba17c": "remove(address[])", +"5e4c57a4": "enableDeposits()", +"5e4ccacf": "computeHolderAddressManyToOne(bytes32)", +"5e4cef9c": "initialize(string,string,uint256,address,address,uint256,uint8,uint32)", +"5e4d0262": "approve_450(address,uint256)", +"5e4d7b49": "buyTicketOne()", +"5e4e0350": "activateDecision()", "5e4e7cbc": "record(string,string,string,address,bool)", +"5e4ee2fd": "Feedback(string)", "5e4f63ec": "extendLockPeriods(uint256,bool)", +"5e4f8949": "Negotiation(address,address,address,uint256)", "5e5098c2": "setmangerallow(address,uint256)", "5e50f037": "reward(address,address,uint256,uint256,uint256)", "5e511afa": "sendTokensBackToWallet()", "5e5144eb": "change(address,address,uint256,uint256)", +"5e5185d0": "OnBid(uint256,address,address,uint256,bool,uint256,uint256,uint256)", "5e520c29": "tokensPerWei10()", +"5e521fd6": "_mintedStakeTokens()", +"5e52757c": "addRevenue(address,uint256,address)", "5e5294b7": "endingTimestamp()", "5e52a00b": "getReferrer()", +"5e53043c": "computeEarlyWithdrawal(address,uint256)", +"5e533216": "penultimateQuestion()", +"5e53cb95": "max_supply(uint256)", "5e53e2f9": "EXACOIN(uint256,string,string)", +"5e547cf0": "yftePerBlock()", "5e556a4a": "faucetTo(address,uint256)", "5e5571ac": "pay(address,uint256,bytes32)", +"5e5571ba": "updateFeeDistribution(uint8,uint8)", +"5e558d22": "lockTarget(address,uint256,uint256)", "5e5650ef": "admin_set_Apply_Store_Id_Fee(address,address)", "5e571440": "presalesTokenPriceInWei()", +"5e5741f3": "removeAgentOnIdentityRegistryContract(address)", "5e57966d": "addressToString(address)", "5e58217d": "hardCapIco()", "5e58331c": "SAGA()", "5e585889": "claimDeposit(bytes32)", "5e58f141": "shares(address,bytes,int256)", "5e593cd3": "Funding_Setting_cashback_duration()", +"5e5a3cb6": "getValidatorSets()", "5e5a77e6": "getQuestionAnswer(uint256,uint256)", "5e5a7eb0": "createCase(uint256,address,address,uint256)", "5e5ae1fe": "invalidateAllPendingMints()", "5e5b1e61": "closeTokensale()", +"5e5b3bc3": "tokenToFarmMapping(address)", +"5e5c06e2": "accounts(address)", +"5e5c428f": "calcLiquidityShare(uint256,address,address,address)", +"5e5ca58f": "implAddress()", "5e5ca8d4": "BuyerSeller()", +"5e5cbfdf": "balances_2(address)", +"5e5ce05e": "wpcClaimThreshold()", "5e5d2adb": "HUBUToken()", +"5e5d2b33": "emergencyTransferExecute()", "5e5d4320": "deleteUser(bytes32)", "5e5d73b5": "CloseSaleFund()", +"5e5d8ac7": "getNextEvent(bytes32)", "5e5d926c": "makeDai(uint256,address,address)", +"5e5dd9d2": "revertBAckPayment()", "5e5de297": "getUidAsInteger(address,address)", "5e5e305e": "bbAirdropWallet()", "5e5e4cc5": "ownerToArmy(address)", +"5e5e995c": "Sell(address,uint256)", +"5e5ebb43": "swapMyShareToDai(uint256)", "5e5f2e26": "allowedTokens(uint256)", "5e5f2e37": "startedNewVote(address,uint256,string,uint256)", +"5e5f4462": "swapTT_e11(bytes32,bytes32,uint256,uint256,uint8,uint8)", +"5e5fda85": "airdropIds(uint256)", "5e5ff24b": "addUsersToGroup(bytes32,address[])", "5e601fed": "changePaymentAddress(address,uint256)", "5e604b60": "addWhiteListedContracts(address)", "5e6096c5": "setMinimumTokenSell(uint256)", "5e60d438": "LicerioToken()", +"5e610e26": "playersAddr(uint256)", +"5e612bab": "removeBlacklistAdmin(address)", "5e615a6b": "getParams()", +"5e61c802": "GetAmount(uint256)", +"5e61e741": "addressTRDbalancesPending(uint256)", +"5e61ff65": "FINAL_PRIVATE_RGT_ALLOCATION()", +"5e621887": "searchFlights()", "5e62463a": "TransferLimitedToken(uint256,address,address[],address)", "5e62af4d": "grandJackpot(uint256,uint256)", +"5e62d0c0": "treasuryZap()", +"5e63e526": "ReentranceExploit()", +"5e641496": "takeBanner(uint256,uint256,bytes32)", "5e645680": "getRegulatoryAuthorities(address)", +"5e648038": "LIMIT4()", "5e64f392": "_completeTask(uint256)", +"5e65266d": "giveFor(uint256)", "5e6558e5": "addAtkPlayerQuest(address)", +"5e658549": "getTokenLiquidity(address)", +"5e659f48": "SILVER_COINS()", "5e65db7f": "deleteThis(uint256)", +"5e664758": "signaturesAllowed(bytes4)", "5e66dfee": "regularPayment()", "5e66eb1b": "phaseClaim()", +"5e670265": "rangePrice()", "5e675098": "addFoundation(address,uint256,uint256,uint256)", +"5e678fce": "calculateMediatorFee(uint256)", +"5e67a4a3": "existingAuction(uint256,uint256)", +"5e67d521": "withdrawPullFunds()", "5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", "5e68d459": "_getRNGValue(uint256)", +"5e68e11f": "signerMinimumNonce(address)", "5e6911af": "hardcapReached()", "5e6936ac": "HitToken(uint256,string,uint8,string)", "5e6992e3": "rcnFundDeposit()", +"5e69d7b8": "retrieveExcessProjectTokens(uint256)", "5e6a7777": "setCompte_39(string)", +"5e6aaf2c": "price1Average()", "5e6ad49d": "_setCosignerAddress(address)", "5e6b4ee5": "increaseRate(uint256,address)", "5e6b7a5c": "getUnitsDefense(address,uint256,uint256)", +"5e6c57cf": "recoverInrate(bytes32,uint256)", "5e6c5d77": "number_of_deals()", "5e6cbd6d": "_getRandom(uint256,address)", +"5e6d0c4f": "approveall()", +"5e6d4f5a": "currentLinkPrice()", "5e6db193": "Bithenet()", +"5e6de340": "splitInvestEthToToken(address,address[],uint256[])", +"5e6df25c": "removeBorrowingOfferItem(uint64)", "5e6e91ac": "Mint(uint256,address,string)", "5e6eb33a": "CampaignClosed(uint256)", +"5e6efca0": "changeSafeGuard()", "5e6f6045": "vestingContract()", "5e6fa5ea": "inclusionEnExchange()", "5e6fc129": "isRecord(string)", "5e6fc8b4": "getChildrenCount()", +"5e6fef01": "elections(uint256)", +"5e6ffac7": "ipfsGateway()", +"5e702b1b": "isblacklistedAccount(address)", "5e7037d0": "removeSpriteFromSale(uint256)", "5e7051cd": "setQuickPromoInterval(uint128)", "5e70a6dc": "increaseLock(uint256,uint256)", +"5e7103c8": "setNTokenToToken(address,address)", +"5e71430f": "getDepositedTokens()", "5e715c16": "ICO_CONTRACT()", "5e717e2d": "readDeal(string,address)", "5e71823b": "numPositions()", +"5e71a135": "ERUYFHF834R34(address,uint256)", "5e71c7fa": "testCheckRokSold()", +"5e72effc": "_claimDarknodeReward(address)", +"5e72f435": "setFakePriceBTC(int256)", +"5e72f8a6": "setQuotas(address[],uint256[],bool)", +"5e730d3b": "beth()", +"5e731928": "seniorPartners()", "5e733baa": "openEgg(uint64,uint16)", "5e734f5c": "revealBid(bytes32,uint256,address,bytes32,bytes32,uint256,uint256)", "5e73dd37": "tokenCapPhaseOne()", +"5e73f484": "blocksToSettlement()", +"5e745fe3": "forwardfees()", +"5e74e602": "disableTokenTransfer(uint256)", +"5e75228f": "swap(address,uint256,address,uint256,uint256)", +"5e754d55": "forward(bytes,bytes)", +"5e75574b": "freeGSTTokens(uint256)", "5e7591e2": "register(bytes32,address,address,bytes32,bytes32)", +"5e7600fd": "getPendingUnbankOwnerApprovalCounter(address)", "5e763377": "ModifyMarking(bytes32,uint256,uint256)", "5e763946": "setTaxationPeriod(uint256)", "5e76a101": "onlyOwnerSetTeamWallet(address)", +"5e76ccc2": "depositToRedemptionContract()", +"5e774bfc": "pendingBnbmarket(uint256,address)", +"5e775a27": "papers(uint256)", +"5e77d806": "teamBuy(address,uint256,uint256,string)", "5e77eec0": "setAdminsAddress(uint256,address)", +"5e7858cc": "BOOTSTRAP()", "5e7893e2": "showprize()", "5e78998e": "BatLimitAsk()", +"5e79ef26": "setPow(uint256,uint256,uint256)", "5e79f1cb": "approvedByAdmin(address,uint256)", "5e7aa842": "createEvent(bytes32,bytes32[],address,uint256)", +"5e7b61dc": "inVault()", +"5e7b7c16": "currentTaxPoolUsesType()", +"5e7b8dab": "query1_fnc(uint256,string,string,bytes24,uint256)", "5e7b9832": "updateItem(uint256,uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool)", "5e7be40d": "getBeneficiaries(address,address)", +"5e7c02e4": "approve_804(address,uint256)", +"5e7c0c4a": "distributeRandomly(uint256)", +"5e7c4841": "activeStakeOf(address)", "5e7c85b1": "totalContrib(address)", "5e7cafa4": "startPayments(uint256,uint256)", +"5e7d6c3d": "updatePairGPInfo(address[],uint256[])", "5e7d6fd0": "airdropHasExpired(address,uint256)", +"5e7e7792": "newGovernances(uint256)", "5e7f092c": "_createNFTCollectible(uint8,uint256,address,uint256,uint256[5])", "5e7f22c2": "postBuyOrder(address,address,uint256,uint256)", "5e7f322b": "exchangeEthToEur(uint256)", +"5e7f637a": "totalSwappedEth()", "5e8023d1": "cascades(uint256)", "5e80377b": "buySaleReferred(uint8,address)", +"5e80536a": "users(address,address)", +"5e80701b": "outexact(uint64)", +"5e81300a": "getAccountBalance(uint256,address)", "5e815320": "forward_pass2(uint256[],int256[],int256[],int256[],int256[],int256[])", "5e816740": "rollDice(uint256,address)", +"5e81987e": "blockAddr(address)", "5e81b958": "isNonFungibleItem(uint256)", "5e81ba96": "DestroyedBy(uint256,address)", +"5e8232ed": "prinToken()", "5e8254ea": "commitVoteOnProposal(bytes32,uint8,bytes32)", "5e825564": "setFactory(address,address)", +"5e82c389": "updateGroup(uint256,string,string,address)", +"5e83612f": "binaryOptionsSet()", "5e83b463": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32)", +"5e83ce57": "findFreePLReferrer(address,uint8)", "5e84d723": "publicSupply()", +"5e84dba6": "_calculateDelegationAmountAfterSlashing(uint256)", "5e850225": "closePeriod(uint256,uint256,uint256)", "5e8507f8": "destTokensAngel()", +"5e854bf9": "ChangeWallet(address)", "5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "5e85db0a": "getMinSkills(uint256)", +"5e860052": "addFundSettings(bytes)", +"5e8669f0": "addRecord(bytes32,string,uint256,uint8)", +"5e86c852": "reInvestIn(uint256)", "5e8714d5": "changeSaleAgent(address)", "5e871f0c": "dividendDistributionDuration()", +"5e87a153": "getCR()", +"5e87bb4d": "incomeshare(uint256,uint256,uint256)", +"5e88249c": "_NewChallenge(bytes32,uint256,uint256,uint256)", "5e885c63": "getPack(uint8,uint128)", +"5e886236": "createTemplate(bytes32,bytes32,uint256,address,address,bytes4,bytes)", +"5e886d0f": "QuitBidIfNotWin(uint256)", +"5e88bc14": "apple()", "5e89d92a": "Credentials(bytes32,bool)", "5e8a6044": "foundersFundTimelock3Address()", +"5e8a626e": "depositTime()", "5e8a79e1": "setRef()", "5e8a8b00": "setDocHash(string,bytes32)", "5e8aedce": "SubajToken()", "5e8af735": "placeBet(uint256,string)", +"5e8bcd55": "shouldTriggerOnePass()", "5e8be190": "getCar(uint256)", "5e8c63bb": "vehicle_assembled(uint256)", +"5e8cddbb": "LogPenaltyPayment(address,uint256,uint256,address,uint256,uint256,uint256,uint256)", +"5e8d375b": "LogStr(string)", +"5e8e30a6": "validateAddress(address)", +"5e8e80fa": "_rebaseNextSeconds()", +"5e8e829a": "_ICOstarttime()", "5e8e9589": "_createPenguin(string,uint256,uint256)", +"5e8f3eab": "bountyAdresses(uint256)", +"5e8f494f": "scheme(uint256,uint256,uint256,uint256[],uint256)", "5e8f5022": "issueTokensWithReferral(address,uint256)", "5e8f6597": "distributeInvestorsTokens(address,uint256)", +"5e9040d3": "eventDividend(string,address,uint256,uint256,uint256,uint256,uint256[],uint256,address,uint256,uint256)", +"5e9050fb": "doService(uint256)", "5e90852d": "proposeTransaction(address,uint256,bytes)", "5e90a9ff": "_getLotteryNum(uint256,uint256)", +"5e916758": "sendL1FundedContractTransaction(uint256,uint256,address,bytes)", "5e916b46": "rinkeby2()", +"5e91734c": "authorizeSybil(address)", "5e91ba21": "checkSecret(address,string,bytes32)", "5e91c37d": "tokensSoldInPresale()", "5e91c5ed": "specialTransfer(address,uint256)", "5e91d8ec": "updateEmployee(address,uint256)", +"5e9210ec": "maptest(address,uint256)", +"5e93d015": "UserDividendPayed(address,uint256)", +"5e941ef1": "MarkupChanged(string,uint256)", "5e943a30": "calculateReferralBonus(uint256)", "5e949fa0": "changeDestination(address)", +"5e94b2c2": "currentPrice(uint128,uint128)", +"5e94bbb5": "bitbaseDevAddr()", +"5e9567f1": "safeTransferFrom(address,address,string,uint256)", "5e956abf": "createMeshPoint(string)", "5e959287": "getSignature(string)", "5e95ff98": "updateFreeze(address)", +"5e96263c": "leverage(uint256,uint256)", +"5e96644d": "reachsoftcap()", "5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", +"5e971aeb": "FundWithdrawal(uint256)", "5e97894a": "TNPC()", +"5e983011": "Locked(address,uint256,uint8,uint256,uint64)", "5e983156": "getJudgeVoted(uint256,address)", "5e983d08": "setPrices()", +"5e9846f0": "ROUND_1_CAP_MAX()", "5e986ec7": "PoezenVoting(uint256,uint256)", "5e987d32": "last_slot()", +"5e98a320": "withdrawFromReserveWallet(address,uint256)", +"5e98e38b": "setSecondaryValidation(address,address)", "5e98e4c7": "abstain()", +"5e996246": "once(address,uint256)", +"5e999fc9": "forgePoolPositions(uint128,int24,uint24,int24)", +"5e99bd65": "addThree(uint256,uint256,uint256)", +"5e99cbe9": "stakeWithSender(address,uint256,uint256)", "5e9a1849": "numDonations()", "5e9a31fb": "MINBET_perSPIN()", "5e9a523c": "assetPrices(address)", "5e9a8c42": "get_deal_state(uint256)", +"5e9ab149": "init(address,address,address,address,uint256)", +"5e9ac845": "totaltokenstaked()", "5e9afc0e": "ERC223TestToken(string,string,uint8,uint256,address)", "5e9bcab0": "getReferrerRates(address)", +"5e9c0b37": "rReset(address)", "5e9d2b1f": "roundSize()", "5e9d2e7b": "exchangesWallet()", "5e9dbcb7": "_tag(string,string)", "5e9e2226": "setOraclizeWinnerGasFee(uint256)", "5e9f9613": "availableReserve()", +"5ea02492": "usdInvestment(address)", "5ea050ec": "InitiateCompanies()", +"5ea06e5e": "setMineParam(address)", "5ea102b0": "Base()", "5ea187c9": "BuildByteArray(bytes)", +"5ea18b9e": "changeOwnerBack(address)", "5ea194a3": "createScalarEvent(address,address,int256,int256)", "5ea1bb17": "winInternal(address,bytes32)", +"5ea1bcce": "OfferDelete(uint256)", "5ea1d6f8": "commissionRate()", "5ea1fc6a": "NAME_SATOSHI()", +"5ea212b2": "circularity()", +"5ea2145b": "void(uint256)", +"5ea24d9a": "addOpenMakeOrder(address,address,address,address,uint256,uint256)", "5ea27e40": "PRESALE_END_TIME()", +"5ea2a609": "monitorProxyContract()", +"5ea2f134": "getPreSaleContractAddress()", "5ea36bd6": "MultiHolderVault(address,uint256)", "5ea39624": "ATTR_SEEDED()", +"5ea3ab85": "calculateTotalAmount(uint256[])", "5ea3ad0a": "doWithdrawal(uint256)", +"5ea3fb90": "proof(uint256,bytes32)", "5ea40983": "addMember(address,uint256,bool,string)", +"5ea49d8c": "removeFlashLoaner(address)", "5ea4cf50": "AMPTToken()", +"5ea54eee": "getGasLimits()", "5ea56918": "BIAToken()", "5ea63913": "getInvestorBalance(address)", "5ea6474d": "getPVPBattleResult(uint256,uint256,uint256)", "5ea67956": "CrowdtesICO()", "5ea81231": "ownerAddRole(address,string)", "5ea81e07": "editAccountData(address,string,bytes)", +"5ea82934": "vaultInterface()", "5ea82efb": "MariaToken()", +"5ea84ad6": "SetMinPoz(uint256)", +"5ea891f6": "assetsTransaction(uint256)", "5ea8cd12": "setMinPrice(uint256)", "5ea8cf00": "PardiICO()", +"5ea8d05d": "pubSaleEnd()", +"5ea90ab3": "checkForCopyright(bytes32)", +"5ea925a3": "getServicePoolRewards(address,uint256)", +"5ea93181": "enableStopBots()", "5ea94bcf": "updateUserTrustRankForMultipleChannels(address,bytes12[],int256[])", "5ea95215": "SpaceXToken()", "5ea98520": "changeNewExchange(address)", +"5ea98941": "_isLocked(address,uint256)", "5ea9caff": "FrozenFund(address,bool)", +"5ea9eb33": "buyNewCall(uint256,uint256)", +"5eaa3f08": "executorSwapTokens(address,uint256)", "5eaa6ca4": "_cancelMarkets(uint256)", +"5eaa8163": "priceShare()", "5eaaa699": "SALES_SUPPLY()", +"5eaab2e8": "registerOfficer(address,string,string,string,string)", "5eaad235": "getDataByDeviceId(uint8,uint8)", "5eab15e4": "devuelveApps(bytes32)", +"5eab74fc": "mytoken()", +"5eab7dea": "_verifyIndex(address,uint256,address)", "5eabc684": "updateIssuanceData(address,uint256,uint256)", "5eabe01e": "saleSuccessful()", +"5eabf577": "numberOfStakers()", +"5eac0007": "getDeployedCampaign()", "5eac1414": "UNIQ(uint256,string,string)", +"5eac4bde": "buyLevel(uint64)", +"5eac54aa": "toppedUpAmount()", "5eac6239": "claimRewards(uint256[])", "5eac85d5": "burnGasAndFreeFrom(address,uint256,address,address[],bytes)", +"5ead224b": "setMUN(address)", "5ead330c": "getDungeonFloorDetails(uint256)", +"5ead86c6": "getOperatorsContract()", "5ead8846": "updateFundsOwner(bytes32,bytes32)", +"5eadba8b": "networkConfirmations()", "5eadd607": "debugResetSubmissions()", "5eae177c": "isTransferAllowed(address,uint256)", +"5eae375b": "registerEighteenK()", +"5eae7959": "initialize(address[],uint256,uint256)", "5eaefac1": "reservePricing()", "5eaefb31": "CARD_TAKE_SHARE()", +"5eaf2ea7": "getStableTokenAddress()", +"5eaf43b2": "taskByHash(bytes32)", "5eafe515": "newDeveloper(address,string)", +"5eb07dbd": "setUintArray(bytes32,uint256[])", "5eb08d8a": "setBurnRate(uint8)", "5eb101c3": "capped()", "5eb17cdb": "setBeginTime(uint256)", +"5eb186f8": "dappToken()", "5eb19ad1": "recalcAmountWithFees(uint256,bool)", "5eb19eda": "InitiatePlanets()", "5eb1f936": "JBToken()", +"5eb24332": "changeMinAcceptQuorumPct(uint64)", "5eb28fb2": "Robot()", +"5eb2ad01": "addRewardsContracts(address,bytes32)", +"5eb2ba36": "getBurnBonusPercent(uint256,uint256,uint256,uint256,uint256)", "5eb332da": "updateAward(uint256)", +"5eb35df8": "emeraldPayment(address)", "5eb38bef": "setcommissionPer(uint256)", +"5eb3c82c": "rwToken()", "5eb3f639": "assertTrue(bool,bytes)", "5eb456c1": "goldIssueBurnFee()", +"5eb45c00": "initialize(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,address,address)", +"5eb478d5": "SetYieldCollectionFee(uint256)", +"5eb4c06e": "mintedCardAmountWithId(uint256)", +"5eb4f562": "AMOUNT_MULTIPLES()", "5eb51d3c": "setTrancheMinTx(uint256)", "5eb53bfa": "test_standardCampaignConstructionValuesFailsDueToNoParameterValidation()", +"5eb5614f": "batchExerciseOption(address,uint256[],uint256[],address)", +"5eb572ad": "changeOraclizeGas(uint256)", +"5eb5c8fe": "secondPartyActiveBets(address,uint256)", "5eb604bc": "GongChuangToken()", +"5eb60706": "showSpercent()", "5eb61aa9": "executeSignedCall(address,uint256,uint256,bytes,bytes)", "5eb62178": "getMinAmount(address)", "5eb62d75": "sendPrivateSaleTokens(address,uint256)", +"5eb64b18": "chaiPrice()", +"5eb69a95": "f(uint256,uint256,uint256,uint256,uint256,uint256)", "5eb6a78f": "gamesCounter()", +"5eb73830": "goldmineSettingsPer(uint256)", "5eb7413a": "lockedTokens(address)", "5eb7556f": "currentRoundIsActive()", +"5eb7c112": "isEthDepoPaused()", +"5eb8640e": "getOfferingInfo(bytes32)", +"5eb8cf25": "max_duration()", +"5eb96412": "txNumber(address)", +"5eb995f4": "tvlOfPool(address)", "5eb9bbf7": "founderTokenUnlockPhase4()", "5eba2472": "Migrations3()", +"5eba6e47": "updateUserBalance(address,uint256)", "5ebad2ab": "GrowthPool_Supply()", "5ebaf1db": "staker()", "5ebb7077": "mkDomain(bytes32,address)", +"5ebb7660": "accountTicket(address)", "5ebc1db8": "positionScount1(address,address)", +"5ebc44c9": "flushForwarder(address,address)", "5ebc7826": "CasCoin()", "5ebca187": "testFailTransferWhenStopped()", "5ebcaf7e": "sendBuyAgent(int256,int256,int256,int256)", "5ebcc621": "endFundraising()", +"5ebce330": "setReallyPrice(uint256)", "5ebcfe50": "taxTransfer(address,address,uint256)", "5ebd2196": "getMyBalanceDNT()", +"5ebd95af": "rv()", "5ebd9a83": "add(bytes32,address,address)", "5ebdd159": "tokenAvailable()", "5ebe4746": "CCPLUS(uint256,string,string)", "5ebe7c72": "reply(string)", +"5ebedcd5": "lambertNeg1(uint256)", +"5ebf0d44": "updateProtectedLiquidities(uint256[],uint256[],uint256[])", +"5ebf234f": "obelixFarming()", +"5ebfc142": "AssCreated(bool)", "5ebfed78": "buyRegion(uint256,uint256,uint256,string)", "5ec01e4d": "random()", +"5ec02866": "MAX_BOUND()", +"5ec028c3": "createPreSale(uint256,uint256,uint256,address,address,uint256,uint256)", +"5ec0c142": "getRegisteredStakersLength()", "5ec0c707": "winnerFromGas(uint256)", "5ec112a2": "setPreSaleOpened(bool)", +"5ec12dc9": "_supportCurrency(address)", +"5ec13592": "fundFee_()", "5ec1b499": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"5ec1d76f": "makePoolSnapshot()", +"5ec1ddfc": "BONUS_TIME()", "5ec1fc19": "convertMint(address,uint256)", "5ec211a1": "accountOfN(address)", +"5ec29272": "_authorizeUpgrade(address)", "5ec2c7bf": "auctioneer()", "5ec2dc8d": "depositReward()", "5ec30be2": "assignListingDB(address)", +"5ec313b3": "claimDisarmReward()", +"5ec36b07": "currentTokenPricePerETH()", "5ec38bec": "updateFundWallet(address)", +"5ec39037": "EventEarlyInvestor(address,bool)", +"5ec390d8": "pauseMarket(bool)", "5ec3f160": "secondsInDay()", +"5ec41682": "admintransfer(uint256,address)", +"5ec445da": "getWalletDepositAmount(address)", +"5ec49ff1": "_info(uint256,uint256,uint256)", +"5ec4b7a8": "setReceiveAddress(address)", "5ec4eb95": "GoldWhitelist(address,bool)", +"5ec54659": "getETHRate(address)", "5ec5bc8e": "pushOrderOfOwner(address,uint256,bool)", "5ec5bed6": "coupon(uint256,uint8,uint8,bytes32,bytes32)", "5ec70cd2": "_getProviderPriv(uint256)", "5ec72a90": "maxCumAcceptedDeposits()", +"5ec7b353": "safetransferFrom(address,address,uint256)", +"5ec7c537": "ITEM_ID_BITS()", "5ec81130": "calcBonusRate()", "5ec88c79": "getAccountLiquidity(address)", +"5ec93381": "tokens_for_selling()", "5ec93cb2": "withdrawal_gas()", "5ec94770": "RhinexFundCoin()", +"5ec96a23": "abiencodePackedHash(uint256,uint256)", +"5ec9ef61": "swapTokensForExactTokens(uint256,uint256,address[],address,address)", "5eca2aeb": "getBytesArrayIndex(bytes32,uint256)", +"5ecaa4ff": "getDAppsCount()", "5ecb16cd": "withdrawTokens(address[])", "5ecb6594": "isCoreContract()", "5ecb7d20": "testGetCaseCount()", +"5ecbbf98": "getLpSupply(uint256)", "5ecc33ac": "testPrivacy()", "5ecc7975": "YUPVesting(address,uint256,uint256,uint256)", +"5eccd56a": "resolveExecutionManager()", "5ecd62b9": "divCut()", +"5ecd62ec": "CFDVault()", +"5ece9840": "userNicknames(address)", "5ecef65f": "setTactics(uint256,uint8,uint8)", +"5ecf17cc": "buyBids(uint8,uint8,uint256)", "5ecf36f7": "Print(string,uint256)", "5ecf71c5": "decreasePower(uint256)", "5ecfdcfc": "KnownTokens(address,address,address)", "5ecff851": "p_setDevAddress(address)", +"5ed0063a": "checkMintIDOf(address)", +"5ed061cc": "transferAsset(bytes32,bytes32,bytes32,bytes,bytes32)", "5ed0f3fd": "changeVariables(address[],uint256[],address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"5ed1057d": "calculateSubmissionIndex(address,uint256)", +"5ed13ba5": "MODERATION_APPROB_MIN_VOTE_COUNT()", "5ed16294": "nacBalance()", "5ed188c9": "MNTToken(address)", "5ed18d95": "CollatLending()", +"5ed1c2c1": "deletework(uint256)", +"5ed1f8a2": "CoinIssuedSale(address,uint256,uint256,uint256)", +"5ed214dc": "tradeContractPaySeller(address,uint256,uint256,bool)", +"5ed2ad0c": "print(bytes32)", "5ed31991": "lastLockingTime()", +"5ed363c4": "LogAds(uint256,uint8,uint8,uint8,uint8,string,string,string,address)", "5ed411e5": "setNewToken(address)", +"5ed43766": "triggerUpdatePendingTime()", "5ed4382f": "fourthStageMinting()", +"5ed43cf1": "userTotalStakedAmount(address)", "5ed49e9b": "ADVISERS_AND_FRIENDS_WALLET()", +"5ed4bf81": "executePendingTransfer(address,address,address,uint256,bytes,uint256)", "5ed4d7ae": "_getTokenAmount()", "5ed50033": "myetherpay(uint256,string,string)", "5ed5684c": "HCHToken(uint256,string,string)", @@ -54272,242 +99382,455 @@ "5ed66998": "usingOwnership()", "5ed6a8e7": "setData_13(string)", "5ed73bc7": "distribute(address,uint256,address[],uint256[],uint256)", +"5ed74bfd": "setUserInputCollateral(address,address,uint256)", "5ed75366": "DEVELOPER_FEE_FRAC_TOP()", +"5ed7660e": "authorized(address,uint256)", "5ed7ca5b": "halt()", "5ed81ebe": "getInspireTokens(address,address,uint256)", "5ed84aa6": "getNymCenterAPIURL()", "5ed85753": "ergoam(uint256,string,string)", +"5ed86d5c": "compute(uint256)", +"5ed8952a": "pendingFarm(uint256,address)", +"5ed9156d": "virtualBalancesForRemoval(address)", "5ed9ebfc": "soldTokens()", +"5ed9fb51": "approve_709(address,uint256)", +"5eda06e7": "LPperRFIETHUnit()", "5eda17bc": "_tuneLambo(uint256,uint256)", "5eda232d": "getTokenStakeByIndex(uint256)", "5eda5b9a": "interestCollected()", +"5eda807a": "kethAddress()", "5edabc99": "getPresaleEndTime()", +"5edac156": "oneWeekasBlock()", "5edb2fb3": "uint256ToBytes32(uint256)", +"5edbae31": "getAllWithdrawableRevenue(uint256)", "5edc1ac8": "discountDecimal()", +"5edc430d": "setWithdrawOpenPositionPenaltyOnAcoPool(uint256[],address[])", +"5edc958d": "getLotterySize()", "5edc9bff": "upgradeUnitMultipliers(address,uint256,uint256,uint256)", +"5edc9fc5": "getPriceView(string,uint256,address,address)", +"5edca25b": "setWant(address)", "5edca2b4": "unsuccessfulWithdrawal()", +"5edcd5ec": "setGamePool(address)", "5edd4436": "newOffer(bytes32,string)", +"5edd8722": "cWBTC()", +"5edd9c12": "icecreamPerBlock()", +"5edda4c9": "purchaseLicense(bytes32)", "5eddd157": "claim(uint256,uint256,bytes)", +"5ede788f": "totalSharesAmount()", +"5edeb7cc": "WithdrawContributorsToken(address,uint256,uint256)", +"5edf23b1": "LIQUID_POOL()", "5edf34d4": "Transfer(address,address,address,address)", "5edf413e": "burn(bytes32,address,uint256,bytes)", +"5edf738c": "setChillToken(address)", "5edf8d3c": "SetAdOwner(uint256,address,address)", "5edfa1f8": "calculateFees()", "5edfd788": "completedGames()", +"5ee0637c": "calculateEthPerNec(uint256)", +"5ee0aca0": "miners()", "5ee0f535": "_mint(address,bytes32,string,uint256)", +"5ee0fe32": "disputerDisputeRewardPct()", "5ee10f3b": "instruct_2()", +"5ee167c0": "lpToken0()", +"5ee230b7": "boardMembersList(uint256)", "5ee2a018": "deployMultiToken()", "5ee2cec2": "issuerDateMinutes()", +"5ee2fd96": "getDelegatee(address,uint256)", +"5ee343a4": "secondaryDeposit()", "5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", +"5ee387d1": "Bounty(address[],uint256[])", +"5ee3accf": "initialEETHRewardRate()", +"5ee41656": "testAddmod()", "5ee4e3f8": "LocklistAddressisListed(address)", "5ee58efc": "distribution()", "5ee5a409": "transfer_token1_toContract(address,address,uint256)", +"5ee5b477": "getLatestRepresentative(address)", +"5ee5e14e": "BetPlaced(address,string,uint256[])", "5ee5e9ee": "SaleStarted(uint256,uint256,uint256)", "5ee679f9": "removePolicyFrom(address)", +"5ee6c6e5": "setSqueezePoolSettings(uint256)", "5ee6cc38": "buyToken(address,address)", "5ee7144c": "_removeTopic(string)", +"5ee71a36": "Pause(address)", +"5ee71ea2": "unstakeBas(uint256)", "5ee759e8": "encodeCurrency(string)", "5ee760a5": "hashHardCap(uint256,uint256)", "5ee7b392": "sendToken_internal(address,uint256)", +"5ee7ba1e": "calcNFTTokensValue(uint256[])", "5ee7cd23": "isBCFBuyMarket()", +"5ee7d2c4": "transEth()", "5ee7e96d": "grant(address,uint256,uint256,uint256,uint256,bool)", "5ee857d1": "test_insert_findWithHintPrevUpdateTail(int256)", +"5ee87cdd": "TokenTransferRequest(string,address,address,uint256)", +"5ee89ff9": "INITIAL_MINIMUM_DELAY()", +"5ee8ee84": "AddBonus(address,uint256,uint256,uint256)", +"5ee972e1": "Referrer(address,address)", +"5ee99286": "makeOffer(uint256,uint8,bytes32,bytes32)", +"5eea77d1": "redeemStakePoolProfit(uint256)", +"5eeb6710": "rewardsPerBlock()", +"5eeb727e": "modifyLoanParameters(bytes32,uint256)", "5eeb9ff9": "get_transferLock()", "5eebc031": "newReadAddr()", "5eebea20": "pending(address)", +"5eec0870": "updateAdminWallet(address)", +"5eec2b16": "updateReturns(int256[5],int256[5])", +"5eec68b5": "LogPauseRoundB()", "5eec743b": "minContributionMainSale()", "5eec9df0": "softCapWei()", "5eecbad8": "getFunderByIndex(bytes32,string,uint256)", +"5eecc9d9": "getEscrowAddresses()", "5eecdec0": "unLockup()", "5eed1f1a": "setTotalIndividualWeiAmount(address,uint256)", "5eed3dcb": "donorList(uint256)", "5eed886b": "minimumPerTransaction()", "5eedbceb": "emitTransferFeeUpdated(uint256)", +"5eedfceb": "Vault(address,address,uint8)", "5eee006a": "secondStageStartsAt()", "5eee7078": "sendETH(uint256)", "5eeeee22": "setMaxWin(uint8)", +"5eef0361": "transferCash(address,address,uint256,address,address,uint256)", +"5eef45a8": "oneH()", +"5eef8f79": "ReconPromo()", +"5eefb092": "getBorrowedView()", +"5eefce8c": "totalLiquidator()", +"5ef00fab": "checklastposneg()", "5ef013d0": "Ico()", +"5ef05056": "txOutCrowdCb(address,uint256)", +"5ef057be": "stakingFeeRate()", +"5ef103ad": "registerAllPlayers(address[])", +"5ef16321": "claimAndStakeLP()", +"5ef16bbc": "activeRacers(uint256)", +"5ef17012": "calculateAmountAndFee(address,uint256)", "5ef17eff": "getSettingValuesById(uint256)", +"5ef1be48": "checkaddressblockheight(address)", "5ef1bfdb": "landPriceWei()", +"5ef24214": "LogHouseWithdraw(uint256)", "5ef27d1a": "hasRazCompleted(uint256)", +"5ef29aea": "channelMasterKey(uint64)", +"5ef29c97": "swapAllUSDT()", "5ef2a3f4": "giveAwayInProgress()", "5ef2c79a": "getMyNmBet(uint256,uint256)", +"5ef2c7f0": "setSubnodeRecord(bytes32,bytes32,address,address,uint64)", +"5ef3c963": "setMythicAddress(address)", "5ef3f3d1": "voteRelease()", "5ef3f9e1": "BETS_CLOSING_TIME()", "5ef4d2af": "_calculateTokenAmount(uint256)", "5ef4ed42": "setBattleTokenAddress(address,address)", "5ef505c0": "discoveryBlocksUntilAllowed(uint256)", +"5ef53ded": "getquality(bytes)", "5ef572ad": "stageMgmtSystem()", +"5ef5a9e3": "getRefferalProfit(address)", "5ef5cdb2": "doFailedOffer(uint256)", "5ef6228c": "bytesToAddr(bytes)", "5ef652ad": "EtherFarmDevSim()", "5ef6543c": "YDMediaToken()", +"5ef65949": "name_of_currency()", "5ef680df": "flushTokens(address,address)", +"5ef6822a": "feeSplitNumerator()", +"5ef68ef9": "burnToMany(uint256[])", "5ef6ad57": "Delivery()", +"5ef6f30c": "getLendCost(address,address,address,bytes32,bytes,bytes)", "5ef74958": "Epam()", +"5ef74c9d": "balanceOnC2()", +"5ef76292": "maxLeverageRatio()", "5ef78561": "cashWallet(address)", "5ef79434": "DATE_PRESALE_END()", "5ef7ac4d": "startRedeem(uint256,bool)", "5ef7b303": "getPI_edit_14()", "5ef80c87": "create20ContractToy()", "5ef82429": "tixPromo()", +"5ef87ff7": "getPrivatePools()", +"5ef88539": "safeBdayTransfer(address,uint256)", "5ef8ce5d": "setPollType(uint256,address)", "5ef8da77": "Altruism()", "5ef97145": "BokkyPooBahsAutonomousRefundathonFacility()", "5ef9dde8": "removeApprovedGame(address)", +"5efa2372": "ownersv1(address)", +"5efa69bf": "PriceAdjust(address,uint256,uint256,uint256)", +"5efac6c2": "projectInvestor(address)", "5eface14": "numStakersForPoll(bytes32)", +"5efb38ad": "CitySold(uint16,uint256,address,address,uint256)", "5efb4dc5": "deathData_a7()", "5efb8266": "setGoldContractAddress(address)", "5efbb728": "transferold(address,uint256)", "5efbcfba": "minWeiToBuy()", "5efbdc47": "setLastBidId(bytes32)", +"5efc071a": "tether()", "5efc156f": "Roles2LibraryAdapter(address)", "5efd1682": "transferPreSigned(address,address,uint256,uint256,uint256,bytes,bytes32,bytes32,uint8)", "5efd3c41": "whiteListEndBlock()", +"5efd6f04": "addTP(bytes32)", +"5efd8daa": "approveAndInvokePurchase(address,string,uint256)", +"5efd9f72": "isEEZOToken()", "5efdb1e4": "percentToTakeAsSeed()", "5efe2fcf": "releasedLockedAmount()", +"5efe3047": "BebUsers(address)", +"5efebac0": "approve_467(address,uint256)", +"5efee797": "_playerGego(address,uint256)", +"5eff3f29": "MAX_LOCKING_BATCHES_HARDCAP()", "5eff7d8f": "getAccountLiquidityInternal(address)", "5eff7dae": "getInstructors()", +"5eff82db": "setCurve(uint256,uint256,uint256)", "5eff8b48": "Prakashcoin()", "5effd20d": "withdrawForAddress(address,uint256)", +"5f00baa7": "dbToken()", +"5f011bc1": "ServiceChanged(address,uint32)", +"5f018303": "getDocumentLength(bytes32)", "5f01b42f": "alloweRefund()", "5f02116f": "claimRewards(uint256[],uint256[])", +"5f022b34": "currentSharesTotalSupply()", "5f024e91": "testCheckEthBalance()", "5f0379f5": "firstPriceChange()", "5f038b6d": "refillFunds()", +"5f042423": "Win(address,address,uint256)", +"5f046cb0": "mortgageSub(uint256)", +"5f048ea8": "workForDaoFund()", +"5f04908e": "getFlashloan(address,uint256,address,address,address,bytes,uint256,uint256[])", +"5f054d0e": "Topwinner_1()", +"5f05532f": "crowdsaleFailed(address)", +"5f058529": "_hal9kVault()", "5f05b3e4": "HappyToken(uint256,string,uint8,string)", "5f05b9df": "removeTWhitelist(address)", "5f065346": "pay(address,uint256,uint256)", "5f06541d": "resetOwner()", "5f065b4a": "checkItem(bytes32)", "5f06900b": "changeBattleFee(uint256)", +"5f06b415": "distributeYieldRewards(address[],address)", +"5f072ef2": "_stakingOpen()", +"5f0736a1": "withdrawApproval(address,address)", "5f073f49": "gatherDetails(uint64[])", +"5f0765cb": "completeConversions(uint256,uint256)", "5f07a3e5": "addAllNewTicket(uint256,bytes32[],uint256[],uint256[],uint256[])", "5f07bd15": "take_fees_eth_owner()", +"5f07cbc2": "hodlTRedeem(uint256)", +"5f08d451": "ChallengeAgonPlat(uint64,address,uint64,address)", "5f09952e": "voteAllowTransactions(bool)", +"5f0a1862": "buy(address,address,uint256,uint256,address,bytes)", +"5f0ab535": "swapETHPoolWithFee(uint256,address,address,uint256)", +"5f0acff6": "fetchLoan(uint256)", +"5f0afee6": "sendOutToken(uint256,address[])", "5f0b37e4": "VeritokenToken()", +"5f0b3a8d": "addERC1155Multiplier(uint256,uint256)", +"5f0c0f2b": "getEpochRewards(uint256)", +"5f0c80cc": "totalStake_deprecated()", "5f0d5296": "reserveAllowance()", +"5f0d78b5": "mediatorTimeoutHandler(uint256)", +"5f0d92ac": "getAccumulateFee()", "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)", +"5f0e66c4": "OfferFundsAdded(address,uint256,uint256,bytes32)", +"5f0e6fc6": "getBurnedTokensReceiver()", +"5f0e8dac": "bidOnRide(uint256,uint256)", "5f0edfb8": "create(bytes,bytes32,bytes1)", "5f0f1f85": "transferProposalEnd()", "5f0f7786": "IssuedToken(address[],uint256[],uint256,uint256,address,string,uint8,string)", "5f0fc2e8": "RealMoneyToken()", +"5f0fd8e2": "amountAddressesForVoting(uint256)", +"5f100fc3": "setAcoPoolLendingPoolReferral(uint16)", "5f104c5f": "SalesAgentPermissionsTransferred(address,address)", +"5f1067ba": "temp3()", "5f111074": "picopsCertifier()", "5f112c68": "renounceMinter(address)", "5f11301b": "setServiceURI(string)", "5f1231ea": "getMemberInfo(address)", +"5f13f387": "calcMint1t1FRAX_1(uint256,uint256,uint256)", "5f141a0f": "confirmWrite(bytes32,address)", "5f14af16": "Subscribe(address,address,uint256,uint256,uint256)", "5f14e108": "openTokensale(address)", +"5f14ff0f": "isUsedCode(string)", +"5f151b3d": "checkFightWindow()", "5f159e60": "TimeBoundaryChanged(string,uint256)", +"5f16663f": "provideWeeklyFarmIncentives(address)", "5f167276": "getNumElements()", +"5f16e0f5": "equityCommitment()", +"5f16ed88": "TNI()", "5f17114e": "TimeDeposit()", +"5f1764f4": "tokenSaleCAKEX(address)", "5f1768c1": "buyerHistory()", +"5f17e523": "updateRewardsSplit(uint32)", +"5f182859": "getPriceBandCalculator()", "5f1845f6": "transferDecimalAmountFrom(address,address,uint256)", "5f184eda": "withdrawFactoryResourceBalance(uint16)", "5f185329": "submitOrder(bytes)", "5f1877a8": "productPrice(string)", +"5f18890a": "actSet_FoundationAndDevAddrAddr(address,address)", +"5f18929b": "CommitValue(bytes32)", +"5f1893d0": "fulfillSwapSupportingFeeOnTransferTokens(uint64,address[])", "5f18aa0c": "decimals(bytes32)", +"5f18ad5e": "exchcoinToUSDTCoinDeliver(uint256)", "5f196876": "allPromotions(uint256)", "5f19c7b2": "doSetSettings(uint256)", +"5f1a2740": "getExchageAmount(uint256)", +"5f1a683f": "changeRebase(uint256)", "5f1a6f4b": "BARL()", +"5f1b0168": "emitAccountLiquidated(address,uint256,uint256,address)", "5f1b3ee6": "getAPAddressSize()", "5f1b46ab": "inflateToken(address,uint256)", +"5f1b50fe": "getConvertibleTokens()", +"5f1ba1fd": "spotPriceTwapInterval()", +"5f1bbebc": "wrapperContractsCreated()", +"5f1c0617": "setBurnRatePerThousandth(uint32)", +"5f1c17c0": "bonds(uint256)", +"5f1c1adc": "YFIM(uint256,string,uint8,string)", "5f1ca2fc": "ReferralRegistered(address,address)", +"5f1cc0e6": "getMyIndexes()", "5f1d146e": "eeeeeeeeeeeee()", "5f1d7037": "KEDToken()", +"5f1d78ae": "sources(bytes32)", "5f1d804f": "checkTxProof(bytes32,bytes,uint256[],bytes,bytes)", "5f1d90ae": "getCurrentOpinion()", +"5f1ddae2": "disperseToken(address[],uint256[])", +"5f1def1c": "PUREURL()", +"5f1e0355": "bidderPrice(uint256,address)", +"5f1e09d9": "filterCandidatePricesByDeviation(uint256,address[],uint256[])", "5f1e1c28": "__transfer(address,address,uint256,bytes)", "5f1e580d": "ETUToken()", +"5f1e6f6d": "initialize(address,string,string,string)", +"5f1e8134": "settleBatch(address)", "5f1e8c1b": "MAX_MODULES()", +"5f1eec41": "MCD_JUG()", +"5f1eecea": "SendTokensExcess(address,uint256)", "5f1f6c5e": "delFromList(uint256,address[])", +"5f1f7855": "divi(uint256,uint256)", "5f1fc571": "set_prices(uint256,uint256,uint256)", +"5f1fcedc": "receivedB()", "5f1ff549": "issued()", +"5f208681": "community(address)", +"5f20ac69": "depositBondPrincipleWithPermit(uint256,uint256,uint8,bytes32,bytes32)", +"5f2147fb": "Transfer(address,address,uint256,address)", +"5f219356": "queryAddressByIndex(uint256)", +"5f221cb7": "setDscoring(uint256)", "5f222da1": "latestMomentOf(uint256,address)", "5f227bfc": "totalPlayerTokenContracts()", "5f22c42f": "getBuyerReceipt(address)", +"5f22eab2": "setTaxTierLargeFee(uint256)", +"5f231075": "CosmoMasksLimitedPack()", +"5f237bb4": "getWhitelistedUsers(uint256)", "5f238402": "lastAllowancePaymentTimestamp()", "5f241c8e": "AnythingToken(uint256)", +"5f244623": "normalize(uint256,uint256,uint256)", "5f24f6fe": "setUpgradedAddress(address)", "5f2536f7": "calculateMaxContribution(address)", +"5f25794a": "getOpenData(uint256,uint256,address,uint256)", +"5f25a7d0": "SetDappinfo(string,address,string,string)", +"5f27de99": "autoBuy(uint256)", "5f27e47d": "GetWinnerAt(uint256)", "5f27f6e3": "getPlayerGeneralAll(uint32)", "5f27f946": "handleTokens(address,address,uint256)", "5f28213b": "SCTC(uint256,string,string)", +"5f28507a": "g_makerFilledAmount(bytes32)", +"5f2855a2": "seedRewards(uint256)", +"5f285ea6": "setUpgradeOperator(address)", "5f28b383": "minPerUser()", "5f28cb74": "getSubscription(bytes32,address)", +"5f292aaa": "calculateBridgedERC20Address(address)", "5f2961e1": "walletFounder1()", +"5f2a2518": "estimateSwapAmount(address,address,uint256)", "5f2a9f41": "MAX_GAS()", "5f2aeae9": "executeCreator(uint256)", "5f2af8d9": "Logocoin()", "5f2b9ac0": "startPhase3()", "5f2bb66e": "BatchTransfer(address)", +"5f2bb955": "blockNumberStart()", "5f2befb9": "hasTerminated()", "5f2bf49a": "BitcoinRateUpdated(uint256,uint256)", +"5f2bf94f": "getPairsFull(address,address[])", +"5f2c1b6a": "setPriceAgent(address,bool)", +"5f2c8b61": "poolTempAmount()", "5f2da7ec": "todayDays()", +"5f2dd7a7": "lastSlippageBlocks()", "5f2e0c20": "giveConsent(uint8,bytes32,bytes32)", "5f2e2b45": "freeFrom(address,uint256)", "5f2e4b31": "testDisputedInvalidSequenceWrongWriteAddress()", +"5f2e5778": "FuckFeeInitial(uint256)", "5f2e686d": "Ethereum_eight_bagger()", "5f2e8493": "addmoney(address,uint256)", "5f2ebcf2": "GMRToken()", "5f2ef12d": "tokenFactory(uint256)", +"5f2f3536": "setXgp1ContractOwnerByGen(address,uint256)", "5f2f83ba": "getMul(uint256)", "5f2fb08e": "removeElement(address)", +"5f2fc459": "getbaseImageUrl()", "5f3040bf": "getMIRABALANCE()", "5f304615": "earlyAllocation()", "5f309123": "sale2(address,uint256)", "5f30ed2a": "withdrawAmountFromToken(uint256,uint256)", +"5f31335b": "MintTokens(address,address,uint256,address)", +"5f316876": "mintToFarm(uint256)", +"5f31d92b": "purchaseTokens(address,address,uint256)", "5f31ea82": "holdTokenInvestors(uint256)", "5f32714d": "ChannelSettled(address,address,uint32,uint192,uint192)", "5f3292d7": "DMCTCoin()", "5f330669": "dateMove(uint256)", +"5f337b85": "_minDepositETHAmount()", "5f33afdb": "preallocCoins()", "5f33c5e1": "Payout(bytes32,address,address)", "5f34165d": "isRightBranch()", +"5f343a76": "gameLedger(address)", +"5f35a49d": "jugFab()", "5f3616eb": "getNextOnce(address,uint256,uint256,uint256)", +"5f361805": "removeTokenMeta(address)", +"5f3618e4": "setBeluga(address)", "5f3619b1": "getProfitFromSender()", +"5f367d3d": "subsu(uint256)", "5f373c22": "setHydroContractAddress(address)", "5f37b43f": "_getType(uint256,uint256)", "5f3893ef": "getReward(address,uint256,address)", +"5f38b99c": "reveal(uint256,address,uint8,bytes32)", +"5f39579d": "getRewardStatus(uint256)", "5f399d28": "TokenIceBox(address)", "5f39fd73": "approveUpdate(uint256,address,bool)", "5f3aa2bb": "checkIfRewarded(bytes,uint256,bytes,bytes)", +"5f3ad709": "MIN_QUORUM()", "5f3bc04c": "addressFundInvestment()", +"5f3bc8e7": "getLoanDataArr(address[])", +"5f3be9f9": "I_PAY_AMOUNT()", "5f3c15ed": "radtokenSupply()", "5f3c23be": "isProposalNotExpired(bytes32,uint256)", "5f3c6686": "challengeBook(address,address)", "5f3c91ad": "accrueEther()", +"5f3c9948": "afiAccrued(address)", "5f3ca167": "crowdSaleInitialized()", "5f3cebcd": "incrementalInverse(uint256,uint256)", +"5f3d34a5": "sendPurchased(uint256,uint256)", "5f3d634f": "freezeMulti(address[],uint256[],uint256[],uint256[])", "5f3d7fa1": "maxAttendees()", "5f3e3db0": "increaseWeeklyTransactionVolumeSending(uint256)", +"5f3e849f": "recoverTokens(address,address,uint256)", +"5f3eeb84": "getStats(int24,int24)", +"5f3f6414": "peddingPoolReward(uint256,address,uint8)", "5f3f703c": "gifter()", "5f403edc": "addThenSub(uint256,uint256,uint256)", +"5f40cd77": "CWGPrice()", "5f40fc27": "withdrawGoldMoney()", "5f412d4f": "releaseTokenTransfer()", "5f412ff1": "ownerEnablePayee(address,address)", +"5f413152": "documentDetails()", +"5f416772": "depositBetToken(address,uint256)", "5f41ccef": "multMint(address[],uint256[])", "5f421776": "switchONfreeForAll()", "5f429ba5": "Risk()", +"5f433e7d": "targetAddresses(uint256)", +"5f434fe4": "getPriceLevel1()", "5f437e48": "settingsState()", "5f43e49c": "isDataYes(bytes)", +"5f43e63f": "MAX_INACTIVE_BLOCKNUMBER()", "5f4402c5": "distributeTokenToAddressesAndAmounts(address,address,address[],uint256[])", +"5f447e04": "eBTC()", "5f45161f": "payToInviter(uint256)", "5f45221d": "retrieveIncompleteProof(bytes32)", "5f452df1": "approveCrowdsale(address)", +"5f45527b": "total_invested()", "5f456c1f": "assignedAmountToEcoReward()", "5f45c179": "ABYSS(address,address[],address)", +"5f4623f1": "setKittyContractAddress(address)", "5f46d750": "amountOfDividendsPayouts()", "5f4784a5": "allOf(address)", "5f478f74": "Milestone(string,uint8)", "5f47ba42": "Plendito()", "5f4821ab": "ContractFactory()", +"5f482e59": "CompanyLogoUpdated(bytes32,bytes32,address)", "5f4874e4": "multiTransfer(address[],address[],uint256[],string)", "5f48f393": "maxAmount()", "5f493f63": "convertToMini(uint256)", @@ -54516,245 +99839,484 @@ "5f497a09": "adminCharge_p1()", "5f49c5ac": "_addRecoverer(address)", "5f49d562": "QSTPerEth()", +"5f49eb77": "initialRewardAndStakeSupply()", +"5f4a14ad": "paidTeamBonusGain(uint32,uint256)", "5f4a47c3": "updateUpdater(address,string)", +"5f4a6656": "pendingDeph(uint256,address)", +"5f4b019d": "needDelFromAdminInfoList(address)", "5f4b125b": "get_pre_kyc_bonus_numerator()", "5f4b2873": "getDepositedValue(address)", +"5f4b9b01": "weiPriceUnitTokenList(address,address)", "5f4b9b4f": "getPolicyCount(address)", +"5f4c042c": "capTokenSale(uint256)", +"5f4c1894": "IMP03()", +"5f4c6994": "getDODO()", "5f4c71f1": "getTotalETH()", "5f4dd2d8": "mintPreico(address,uint256)", "5f4eab65": "hasEditionInProgress(uint256)", "5f4ed0b1": "rebalanceBucketsInternal()", "5f4f35d5": "setFullName(string)", +"5f4f40dd": "addSupporterlist(address[])", +"5f4fef5d": "Topwinner_2()", +"5f502ab3": "LogMintTokens(address,uint256,uint256,uint256)", "5f504a82": "ownerCandidate()", +"5f504c7d": "uniswapEthPairToken0(address)", "5f5082dd": "setLast(uint256,address)", "5f51028d": "checkIsReleaseRecordExist(uint256)", "5f515226": "checkBalance(address)", "5f516131": "ReserveUnknown(bool,uint32,uint256,uint256)", +"5f516836": "tokenSeed(uint256)", +"5f5177e2": "REPAY_ENABLE()", +"5f51a73e": "invalidateXLong()", +"5f51b34e": "yank(address,address,bool)", +"5f51b755": "hisTX(uint256)", +"5f51cf95": "zygomaAddress()", "5f51d526": "balanceMapPos(address)", "5f51db02": "Memes()", +"5f520b65": "checkRequirementAndTransfer(address,uint256,address)", +"5f521b3b": "totalEarnedether(address)", +"5f521db3": "SetManualOverride(bool,uint256)", "5f52583b": "processStorageRoot(address,uint256,bytes,bytes)", "5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", +"5f5300ff": "totalVoters()", +"5f537f4d": "patronageNumerator()", +"5f53837f": "initializeOwner()", "5f538fd4": "openMigrationPhase()", "5f539d69": "addContract(address)", +"5f53b786": "CONTRACT_SIRING_AUCTION()", "5f53e077": "setPausedTransfers(bool)", "5f5404af": "PriceProvider(string)", "5f542c94": "emitAreaEvaluated(address,address,uint8,uint256)", +"5f54892b": "enabled(bytes4)", "5f54a1c7": "requestEndCall()", "5f54ae17": "buy50Price()", +"5f54c0a7": "takoPerBlock()", +"5f54d2ba": "setTokenApproval(address,address,address,uint256)", "5f54fa98": "conventionId()", +"5f555dbf": "onDisputableAllowed(uint256)", +"5f558f86": "BIND_STATUS_SYMBOL_MISMATCH()", "5f561763": "rolloverPosition(address,uint256,uint256,address)", "5f56315b": "enableSell()", "5f56b6fe": "safeWithdrawal(uint256)", "5f56e134": "averageArtworkSalePrice()", +"5f56fe12": "repayErc20(address,uint256)", +"5f570e43": "getPositiveCollateral()", +"5f575529": "swap(string,address,uint256,bytes)", +"5f57697c": "c1()", "5f5810ea": "UBIT2018069()", +"5f5817e3": "getActiveTokens()", +"5f583846": "refundPollDates(uint256)", +"5f583c1d": "stakingPool2()", "5f5868db": "freezedValue()", +"5f586c20": "setPackagePercentage(uint256,string)", "5f589599": "resultsPublished()", +"5f589e42": "withdrawFromContract()", "5f58ed2a": "disableBot(address,uint64)", +"5f58faba": "playTimeFinish()", +"5f593995": "v_to_children(address,uint256)", "5f596681": "setShpExchangeRate(uint256)", "5f598510": "KVMToken()", "5f59940c": "addressToSpentEther(address)", +"5f59bbb6": "NewRate(uint256)", +"5f59f457": "_citizens(uint256)", "5f5a98ee": "dragonGirlLotteryPrice()", +"5f5aa664": "idleRate()", +"5f5aedd8": "addServiceCharge(address,uint256)", +"5f5af1aa": "_setPauseGuardian(address)", +"5f5b70de": "Result(uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"5f5b91e1": "Selling(address,address,uint256)", +"5f5ba27d": "getTicketProfitAndDividend(uint256,uint256)", "5f5bb161": "set(bytes20,uint256)", +"5f5be1f4": "flipCoin(uint256)", +"5f5c7ea0": "_hal9kWETHPair()", +"5f5d5f00": "getMemberList()", "5f5d867b": "CryptoPoosToken()", +"5f5d9638": "updateSaviorCallerFee(uint256)", "5f5db5dc": "setVariables(string,address,uint256,int256,bool,bytes32,address[2],uint256[2],int256)", "5f5df710": "updateCertifier(address)", +"5f5e2553": "getBurnedPart()", "5f5e38b6": "setBuyPrice(uint16,uint16,uint8,address,uint256)", +"5f5f01b6": "get_employee_info_with_account(address)", "5f5f23a0": "charityFactor()", "5f5f2aef": "amendRetention(uint8,uint8)", "5f5f62f9": "setControler(address)", "5f5fa782": "getCurrencyByte(uint256,uint256)", "5f5fca9a": "setEnforceAddressMatch(bool)", +"5f606b1b": "viewScLevel(address)", "5f6076bf": "Access()", "5f60a5d4": "CompleteWildcard(uint256,address)", "5f60ef47": "get_heaps(uint256)", "5f60f485": "updateStatus()", +"5f6108ff": "sellFor(address,uint256,uint256)", "5f61a26e": "PRESALE_ETHER_MIN_CONTRIB()", "5f61bf99": "claimG()", "5f623e15": "divisible_units()", +"5f624829": "tobeClaimed()", +"5f6449ad": "addTicker(string)", "5f645f16": "setInputFile(uint256,bytes32)", "5f647d5a": "ethSignedMessagePrefix()", "5f64b55b": "tokenB()", +"5f6529a3": "recoveryAdmin()", "5f65545d": "Raffle_Prize()", +"5f6556e9": "enterMarkets()", "5f65d621": "setSkill(uint256,uint256,uint256,bytes32)", "5f65d703": "setInfo(bytes32,uint256)", "5f65faf1": "isProduct(bytes32)", +"5f66cc76": "fulfillActivityDistance(bytes32,uint256)", +"5f66d2a9": "Update(address,uint256)", +"5f674c87": "initReserve(address,uint256,uint256,address)", "5f677404": "INITIAL_VALUE()", +"5f679530": "initiateModifyTimelockInterval(bytes4,uint256,uint256)", "5f68688f": "endFirstBonus()", "5f68804e": "SimpleLotto()", "5f689fed": "startPVE(uint256)", +"5f68afec": "valueIOUToFragment(uint256)", +"5f68c9fd": "percentSale()", +"5f695e87": "sixMonths()", +"5f699730": "walletbp()", "5f6a1301": "clearPending()", "5f6a4546": "ROLE_REVIEWER()", "5f6acfe9": "_updateRate(uint256,uint256)", +"5f6b1d06": "getClaimableAssets(address[],address)", +"5f6be614": "migrateToken(uint256)", +"5f6c5cfc": "getTrip(string)", +"5f6ccd9c": "clearExtraEth()", "5f6d0ded": "ReservationFund(address)", +"5f6d50f7": "LogClientIdentRejectListChange(address,uint8)", +"5f6d9e5b": "setPhysicalAddressOfOperation(string)", "5f6dd297": "getProjectEndDate(bytes32)", "5f6e388a": "ProofOfCloneWars()", "5f6ea340": "revokeAccess(address,address)", +"5f6eca90": "SWPF()", "5f6ecea0": "vestedTransfer(address,uint256,uint256)", "5f6edff8": "assureDAppIsReady()", +"5f6ef447": "urnAllow(address,address,uint256)", +"5f6f0150": "ForgeStop()", "5f6f8b5f": "setExclude(address)", "5f7033e5": "getCurrentStartTime()", "5f704f3e": "updatePrice(bytes32,uint256)", +"5f7062ac": "updateShare(address,uint256)", +"5f707c0c": "modelExists(uint256)", "5f70d9ac": "getBot(uint256)", +"5f70df5f": "authereumEnsManager()", +"5f70edcf": "add(uint256,address,bool,address)", +"5f711389": "createNewChildrenWithBalances(string[],uint256[],address)", "5f7118c7": "setRevealOpen(uint256)", "5f71249c": "changeOrganisationName(string)", +"5f716528": "ReferrerSet(address,address)", +"5f71ce23": "startAndIncreaseBidSize(address,uint256)", +"5f71f317": "refundBuyer(address)", +"5f720951": "auctionAddress(address,address)", +"5f72243c": "setBasicMintCost(uint256)", "5f722859": "updateHashValue(bytes32,bytes32)", "5f723b50": "getInitialReportMinValue()", +"5f72a2a7": "oneTokenOracleHasUpdate()", "5f72a508": "playerPopMining(uint256,bool)", +"5f72b943": "transferException(address)", +"5f72cb7f": "STATE_PENDING()", "5f72f450": "check(uint256)", "5f73d6c0": "promisedTokenBalance()", +"5f743a7c": "log(uint256,address,uint256,bool)", +"5f743c4b": "currentUNIAPPTokenUSDRate()", "5f746233": "dispense(address)", "5f74a5ec": "pecunioWallet()", "5f74bbde": "vote(address,uint256)", "5f74c16c": "getPrizePot()", +"5f75076d": "adelRewardsSwapped(address)", +"5f751766": "investorsList(bytes32)", +"5f754285": "TransferFrom(address,address,address,uint256)", "5f75b5ef": "whitelistAddress(address,address)", "5f75cb6b": "getCountTransferInsToken(address,address)", "5f75d62d": "addCard(uint256,string,bool)", "5f7619a4": "takeFee(uint256)", +"5f763c1f": "getMsPoolReward()", "5f766118": "salutaAndonio()", +"5f7675b0": "Contribution(address,uint256,uint256)", +"5f76dfc0": "createVault(address,uint256)", "5f76e49a": "addPerson(bytes32,bytes32,bytes32,bytes32,uint256,bytes32,address)", +"5f76f6ab": "set(bool)", "5f770d47": "HyperSale()", "5f77ace0": "stop_token_time()", "5f7807a4": "transferToUser(address,uint256)", "5f788531": "buy5Price()", +"5f788d65": "provideToSP(uint256,address)", +"5f78d6bd": "depositDividend(address,uint256)", +"5f78dd86": "getOvmContractNonceView(address)", "5f791c7c": "ZRSToken()", +"5f792cc6": "sirenToken()", +"5f799235": "addbalance()", +"5f7a3d16": "getMultipleValues(uint256)", "5f7a7bb5": "returnRegDate(address)", "5f7b68be": "addKey(address)", "5f7b73b2": "getInvestorCredit()", "5f7b764f": "_getLuckySpaceshipMoney(uint256,uint256)", +"5f7b9afb": "log(bool,address,uint256)", +"5f7ba52d": "ProposalCanceledByHostAtIndex(uint256)", "5f7bb7f1": "setMaxProfit(uint128)", +"5f7bf38a": "EnableReb()", +"5f7c7f97": "getReferralDataFor(address)", "5f7c944f": "mintAccount(uint256,uint256,uint16,bytes32,uint256)", "5f7cbc39": "addressOfTokenUsedAsReward2()", +"5f7ce89f": "contingencyFundsBal()", "5f7cfe49": "internalSalt(bytes32)", +"5f7d744c": "RequireThatB0(bytes32,bytes32)", +"5f7d78e3": "mint_GLEX(uint256)", "5f7d897e": "checkVendor()", "5f7dfd3f": "totalPaidToFunders(bytes32)", +"5f7e28f2": "minTokenHold2()", "5f7e61fa": "SendTo(address)", "5f7e7138": "setDth(address)", +"5f7ec6db": "newUserId_ap4()", "5f7ee166": "setupOpenDistribution(uint256,uint256,address,address)", "5f7eed5d": "LeajoeToken()", "5f7f9482": "statusQuery()", "5f800348": "balancesImporter1()", "5f802448": "specialAttacks(uint256)", +"5f805e74": "getClaimAbleBalance(address)", +"5f80d412": "_assertNotInCatastrophicFailure()", "5f8162bb": "transferTokenContractOwnership(address)", +"5f81a57c": "totalVolume()", +"5f81a961": "approve_323(address,uint256)", "5f824297": "SellOrderPlaced(uint32,address)", +"5f8256b6": "setTargetCompoundToken(address)", +"5f8268dd": "wnrz()", +"5f82ad07": "quantityOf(uint256)", +"5f82c67e": "COMPTROLLER()", +"5f82e4d1": "earningByAddressExt(address)", +"5f841a8a": "ownerAddPercentToParent(address)", +"5f84aa9b": "pendingrNEX(uint256,address)", "5f84d0f9": "tokenR0()", "5f84e343": "Artemine()", "5f84f302": "setInterestRate(uint256)", "5f852975": "randomtests()", "5f8534ae": "claimDeposit(uint256)", "5f856dbf": "Token_AllowTransfer()", +"5f857bdb": "Set_20Token(address)", +"5f85a63c": "setLeverageAmount(uint256)", "5f85abdc": "contains(int256,int256)", +"5f8627d7": "reduceReward(address[],address)", +"5f863b53": "bonusRewardAllocation()", "5f865912": "addContract(address,address,uint256,string,bool)", "5f877108": "sendToCharger(uint256)", +"5f8821e1": "treasuryFundRatio()", "5f88bff0": "presaleFundingGoal()", +"5f88d837": "transferOwnTokens(uint256[],address)", "5f88e83d": "checkAndCallTransfer(address,address,uint256,bytes)", "5f88eade": "opened()", "5f88ffed": "wallet10()", "5f8909bd": "biddingPeriod()", +"5f8932ff": "calculateSum(uint256)", +"5f89584e": "PUBLIC_SALE()", +"5f89aacb": "cancelTransferRequest(uint256)", "5f8a3029": "Standard_4()", +"5f8a33af": "finCagnotte()", +"5f8a5afa": "addManufacturer(address)", "5f8a7eab": "getReleaseAmount()", "5f8aaa69": "sourceToken()", "5f8aaef7": "contractStakeToken()", "5f8af054": "getMessageLength(string)", "5f8b93d2": "SingularityTest13()", +"5f8b9570": "decreaseIlkDebtCeiling(address,bytes32,uint256,bool)", "5f8bad42": "getCommunityBallotWeiPrice()", "5f8c1fce": "nextBracket()", "5f8c494f": "IntIDQuery(address)", +"5f8c7fd8": "txFeePerMillion()", "5f8cb3f6": "bounty_paid()", "5f8cf6c4": "SMILO_SALES_AMOUNT()", "5f8cf7c5": "PermissionGroups()", +"5f8cfa8f": "GameMetadataUpdated(uint256,string,uint256,bytes32[])", +"5f8d760f": "getLastedLocation(address)", "5f8d96de": "getDeadline()", +"5f8dda7f": "fpsTotal()", +"5f8dead3": "created(address,uint256)", +"5f8e1151": "lastTimeBalanceNegative(address)", +"5f8e1978": "STRICT_WITHDRAWAL_LIVENESS()", +"5f8e26a7": "getLotteryNumbers(uint256)", "5f8e38e1": "depositERC20Compatible(address,uint256,uint256,uint256)", "5f8eb4c7": "jsub(uint256,uint256,uint256,uint256,uint256,uint256)", +"5f8ee763": "priceAverageLast()", "5f8f0483": "buyBankerAgreementFromImporterBank()", +"5f8f59a6": "setdengji(address,uint64,uint256)", +"5f8f9c5d": "lock(address,bool)", +"5f906823": "updateUSDTTokenAddress(address)", "5f9094f5": "GetCreditsPerEth()", "5f9145ef": "RefundReceived(uint256)", "5f918b05": "ServiceProviderDisabled(address,bytes)", "5f91af39": "_increasePlayerDivis(address,uint256)", +"5f91b0af": "logAddress(address)", +"5f91c0d1": "unlockdate_T1(uint256)", +"5f91e6b4": "updateUserStateOnRepayInternal(address,address,uint256,uint256,uint256,bool)", "5f9209ad": "getPositioninterestPeriod(bytes32)", +"5f92c004": "getReferralPayout(address,uint16[])", "5f92dee8": "adminGetWorldSnapshot(uint256)", +"5f92f30a": "_tradingWallet()", "5f932d71": "walletSetSigner(address)", +"5f93b125": "updateTokenLimit(uint256)", +"5f9406b4": "auctionBetOf(uint256,address)", "5f945733": "getTotalInvested()", "5f94e3de": "setSecondaryOperator(address)", "5f94e82c": "setBridgeValidatorsProxyOwner(address)", "5f956244": "TribePlatform()", +"5f956d1a": "requestVolumeData(string)", +"5f9570aa": "withdrawFDBeforeMaturity(uint256)", "5f9590fc": "_isValidDataHash(bytes32,bytes)", "5f95ad43": "HasNoEtherTest()", "5f9602e8": "perClaim()", +"5f963991": "getDividendsAmount(address)", "5f96d9fa": "gemSpeedConversion()", +"5f96dc11": "poolStartTime()", "5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", +"5f97709a": "createShareToken(address,address,uint256)", +"5f97f23e": "kimchiStampOff()", +"5f98457b": "devLock(uint256)", "5f984bf6": "changeFounder(address,string)", +"5f987012": "tokenToTokenSwapOutput(address,uint256,uint256,address)", +"5f98c477": "MintedLog(address,uint256)", +"5f98cd6c": "getSpecificKey(address)", +"5f9903b5": "blockAgreement()", "5f9973b9": "WeiToken()", "5f99c1b2": "_landholderJackpot(uint256)", "5f99e8f5": "GetSeries1()", +"5f9a29a6": "bricks(uint256)", "5f9a2c23": "endFourthWeek()", +"5f9a3f33": "Acquisition(address,uint256,uint256,uint256)", +"5f9a4bca": "isLastFloor(uint256)", "5f9aa94f": "SpiceRates(address,uint256)", +"5f9ab1ae": "billStates(uint256)", "5f9ac1a5": "distributeLeaderboardRewards()", "5f9adf84": "getUserSentTradeOfferId(address,address)", +"5f9b105d": "changeMPCOwner(address)", "5f9b71ce": "bet(uint256,address)", +"5f9ba13b": "wantTokens(uint256)", +"5f9baa38": "burn(address,address,address,address,uint256,uint256)", "5f9bad28": "saleBonus()", +"5f9be6d6": "uniSymbol()", "5f9c84b5": "transferirSala(address,uint256)", "5f9cb50d": "updateMasks(uint256,uint256,uint256,uint256,uint256)", +"5f9d4f0c": "GEN_SHIP_QUANTITY(uint256)", +"5f9df44c": "changeDoggy(uint256)", "5f9dfc79": "minBuyTokenAmount()", "5f9e1080": "settleBet(uint256,address,uint256)", +"5f9e1afe": "setRefuelHoldingTokenAmount(uint256)", "5f9e3c98": "canSetNewOwnerPercentage(uint256)", +"5f9e7d77": "beforeAgreementTerminated(address,address,bytes32,bytes,bytes)", +"5f9f10d2": "tokenRaised_()", "5f9f3f46": "MakeSharesFromAmount(uint256)", "5f9f4734": "birthday()", +"5f9fbe3b": "TokenBanned(address)", +"5fa01cf8": "getTaskList(uint256,uint256)", +"5fa0b65f": "contributionAmount()", +"5fa0e8ca": "awardedInitialWaitSeconds()", "5fa13b49": "shweta()", "5fa21f1f": "enableBetting()", "5fa27af0": "GITC()", +"5fa31d78": "addBet(address,uint256,uint256)", +"5fa37c5b": "tokenVoteIndex()", "5fa382ea": "getPixelsOwned(address)", "5fa3df98": "changeKYCStatus(address,bool)", "5fa413b0": "ownerShareInPercent()", "5fa44602": "tokenCreationDate()", "5fa458b7": "buysoldiers(uint256)", +"5fa4a6cd": "updatePeriodLimitWei(uint256)", "5fa51277": "emergencyExtract()", "5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", "5fa58268": "approveRequestPause()", +"5fa5e4e6": "EXECUTE_ROLE()", "5fa60fc8": "DCAsset(address)", +"5fa66f6c": "secondPool()", "5fa67c00": "Credit(address,address)", +"5fa6e5ef": "setOnesplit(address)", "5fa77dac": "all(bool[6])", "5fa7b584": "removeToken(address)", "5fa7dc56": "getCurrentRateWithBonus()", "5fa7df6b": "setDelegateAndLockTokens(uint256,address)", "5fa87163": "viewlisting(uint256,uint256)", +"5fa8c7a8": "exchangeWoolPrice()", "5fa8c869": "_getRandomPartSubtype(uint256,uint8[])", +"5fa8e6f4": "OnCompleteJob(address,bytes32)", +"5fa96654": "getP()", +"5fa9991f": "_emitXfLobbyExit(uint256,uint256,uint256,address)", +"5faa4ea6": "assignOwnerToContract(address,address,address)", +"5faae7b9": "s(uint256,uint256,uint256,uint256,uint256,uint256)", "5fab11a5": "startICO(uint256,uint256,uint256)", +"5fab6845": "getMarketHandlerAddr()", +"5fac1fee": "uniswapDaiforETH()", "5fac4996": "findSignedSubscriberIndex(address)", +"5fac726b": "tokenRemainingForSaleInICO()", "5fad18e4": "Visualrockcoin()", "5fad3b1a": "initialiseContract(address,uint256)", +"5fad4549": "fastCrossMinValue()", "5fad663e": "expectedDividends(address)", "5fae0576": "isWhitelistedAddress(address)", +"5fae8b3d": "liquidate(uint256,address)", +"5faead1f": "existOrder(address,address,uint256,uint256,address,address)", "5faeb944": "setData_22(string)", "5faeced2": "removeFromUserCounter(uint256)", "5faf2880": "changeDna(uint256,uint256)", +"5faf500f": "STARTING_SHARE_PRICE()", "5faf6675": "forecastInfo(uint256)", +"5faf8554": "presaleDone()", +"5fafc6c8": "getBalanceToClaimTokens(address)", +"5faff90d": "NewSBIToken(address)", "5fb02f4d": "startContract()", "5fb07a62": "getDrugs()", +"5fb0aabb": "Cat1(address,uint256)", "5fb0ac18": "birthDragon(uint256)", +"5fb10303": "changeteamrewardrate(uint256)", +"5fb10858": "addTradingPlatform(string)", +"5fb11d7e": "allocPoints(address)", "5fb130af": "retry(address)", "5fb135f9": "distributeAff(uint256,uint256,uint256,uint256)", "5fb1552c": "GanaLocker(address,address)", +"5fb163c6": "func_2B47()", +"5fb1900b": "CONTRACT_FIRE_ERC20_TOKEN()", "5fb1ef8e": "checkOrder(address)", "5fb1f1d7": "getSketchesOnOffer()", +"5fb2386e": "whitelistTokens(address)", +"5fb2f1af": "transferFeeAddress(address)", +"5fb31d77": "calculateReceiveAmount(address,address,uint256)", "5fb3b944": "privateSaleSoldTokens()", "5fb3e119": "Auction()", "5fb42c59": "goldListPeriod()", "5fb437f2": "setWithdrowRate(uint256,uint256)", +"5fb4d177": "AddBounty(address,uint256)", "5fb4f78c": "finishConfiguration()", "5fb500a5": "ETT(uint256,string,uint8,string)", +"5fb56527": "OnGetAward(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", "5fb64fd6": "checkMembership(address)", "5fb6bca2": "fighterCore()", "5fb77b9c": "revealBracket(bytes8,bytes16)", +"5fb79e1c": "calculateWithdrawTime(address,uint256)", "5fb7a643": "enableServiceProvider(address,bytes)", +"5fb7eba8": "processStake()", "5fb80f20": "weiPerAnimal()", "5fb8dc8b": "MasternodeTransferred(address,address)", "5fb8fed6": "PJR()", +"5fb9340c": "disableCooldown()", "5fb93bb7": "transferDataEntryClerk(address)", +"5fb9b898": "accountProtect(address)", +"5fb9cf20": "notify(address)", "5fba26a6": "getBorrowedBooksCount(uint256)", +"5fba3171": "cancelRaffle(uint256)", +"5fba554e": "delegatorShare(uint256,uint256,uint256,uint256,uint256)", +"5fba7a56": "createCandidate(string)", "5fbaa390": "haltSale()", "5fbabc49": "setSkill(uint32,uint8,uint32,uint32,uint32,uint32,uint32)", +"5fbae649": "MAX_SHIBAS()", +"5fbb5359": "hashTypeIdLookup(bytes32)", +"5fbb8a16": "createTrans(uint256,string,string,uint8)", +"5fbbc0d2": "getFeeConfig()", +"5fbbce8a": "triggerTransfer(uint256)", +"5fbc1031": "renBTC()", +"5fbc7333": "getBatchUserOrders(address,uint256)", +"5fbd32df": "SEED_POOL()", +"5fbd83f4": "tft()", "5fbddcf3": "isLivingMonarch()", +"5fbe2920": "_otc(address)", +"5fbe2a65": "ORDER(uint32,uint40,string,uint32)", "5fbe4d1d": "tokenAddr()", +"5fbe6c1a": "LP_ACCUMULATION_FEE()", +"5fbef867": "sendTokens(uint256,address,address)", "5fbf0577": "sayYes(uint256)", "5fbf17ac": "totalUBetCheckAmounts()", "5fbf79a2": "EmergencyStopSell(bool)", @@ -54762,31 +100324,58 @@ "5fbff3e2": "preferentialRate()", "5fbff3fc": "KuangJinLian()", "5fc02dcd": "freezeAccountForOwner(address,bool)", +"5fc0d2dd": "sendProfit(uint256)", +"5fc0fe55": "limitTransfer(address)", +"5fc11161": "ethDeposit()", +"5fc1188d": "setTemplate(uint256)", "5fc13e0f": "initTransaction(address,uint256,bytes)", +"5fc1604e": "isAlrightPossible(bytes32,uint256)", "5fc1a4b8": "treasurySupply()", +"5fc1aa39": "rewardPerToken1Stored()", "5fc1afac": "forwarders_count()", +"5fc25372": "POT_ADDRESS()", "5fc2b479": "unlock(address,uint256,uint8)", "5fc2cb39": "buyTokensWithProperEvent(address,uint8)", "5fc31aeb": "_rawGetTokenDelegation(address,address)", +"5fc35f74": "swapTokenBalanceOf(address)", "5fc378df": "sawcoin()", +"5fc3a312": "balanceLocked(address)", +"5fc3c84d": "addressMinCap(address)", "5fc3ea0b": "withdrawERC20(address,uint256,address)", +"5fc40151": "activityKeyList(uint256)", "5fc42ebf": "KTZ()", +"5fc463da": "FeeChanged(uint256,uint256)", +"5fc47332": "registeDid(string,string)", "5fc483c5": "OnlyOwner()", "5fc4a6f3": "getCurrentBonusSystem()", +"5fc526ff": "getReserveConfiguration(address)", +"5fc56e78": "stakeFromNestPool(address,uint256)", "5fc5d48b": "burnUnsoldCoins(address)", "5fc5e727": "investedSumOnIco()", +"5fc5f4de": "TRUSTEE_FEE_POOL()", +"5fc6518f": "agentBooks(address)", +"5fc6b623": "getPrice(address,address,uint256,bytes32)", "5fc6bd17": "pendingParsecs()", "5fc71288": "GOTPAY()", "5fc75bf2": "viewCreatePetitionFee()", "5fc7e71e": "liquidateBorrowAllowed(address,address,address,address,uint256)", +"5fc83722": "MismanagedMemoryError(uint256,uint256)", +"5fc890c2": "marketSizes()", "5fc8cc16": "returnAmountOfELIXAddressCanProduce(address)", +"5fc9119c": "ethForLiquidity()", "5fc9309c": "transferFrom(address,address,uint256,address)", "5fc93ed7": "BirthdayBoyClickHere()", +"5fc978a7": "swapExactETHToTokens(uint256,uint256,address,address,bool)", +"5fc987c1": "nxmMaster()", "5fc9d392": "setMessageStatus(bool)", "5fc9e75e": "historyCountOf()", "5fca5a92": "set_arbits_max_contribution(address,uint256)", +"5fcadc32": "pendingAllPizza(address)", +"5fcae9c3": "approve_712(address,uint256)", +"5fcaea32": "approve_773(address,uint256)", "5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", "5fcba9ae": "DURIANX()", +"5fcbd285": "lpToken()", "5fcbd5b6": "countDown()", "5fcc2edb": "IndividualityTokenRoot(address)", "5fcc6277": "changeModuleBudget(uint8,uint8,uint256)", @@ -54796,37 +100385,61 @@ "5fccf40a": "redeemBonusLot()", "5fccfda4": "postICOSale()", "5fcd7fe6": "OWNER_TOKENS()", +"5fce4a18": "NECTAR_TOKEN()", "5fce627e": "hasArea(address,uint256)", +"5fce693d": "claim_bounty(bytes32)", "5fceab11": "incomingTransaction(uint256)", +"5fced646": "isAccountOwner(uint256)", +"5fced9d1": "LOG_ChangeStatusGame(address,uint256,uint8)", "5fcee7a0": "CEOAddress()", "5fcf0455": "interestEarnedAccount()", +"5fcf81cc": "_getBeePower(uint256)", "5fcf92ef": "received_tokens()", "5fd030c0": "setLicenseNFT(address)", +"5fd035b1": "_requireManagerNotPaused()", "5fd0526e": "getReleasableBonusAmount(uint256,address)", "5fd0f8b2": "smartContractSaleEnded()", +"5fd1020c": "rewardsTokenA()", "5fd1bbc4": "publicStartTime()", "5fd23730": "LogSwapToken(address,uint256)", +"5fd25768": "set_epoch(uint256)", "5fd33b1b": "freezeTrading()", "5fd357fc": "PortfolioContent(uint256,uint256,uint256)", +"5fd42775": "increaseAllowanceAndCall(address,uint256,bytes)", "5fd4b08a": "getName(address)", +"5fd55293": "processAllSlashes(address)", +"5fd55c6d": "min_buy_amount()", "5fd56dfc": "AllInOne()", "5fd56e98": "whoHadTheBiggestDick(uint256)", +"5fd5cc70": "getCanSpendAmount(address,address,uint256)", "5fd5e3b4": "newEvent(uint256,address[],uint256,uint256)", "5fd65f0f": "swapStorage()", +"5fd6ac03": "mintedHxp(address)", +"5fd6d0b7": "ContributorAdded(address,uint256)", "5fd72d16": "addAllowance(address,address,uint256)", "5fd7793a": "setStreamerContract(address,uint256)", +"5fd82fad": "GFBRCEDetails(uint256)", +"5fd8acf7": "getLockedAddress(address)", "5fd8c710": "withdrawBalance()", "5fd8d3d1": "maxInvestorCap()", +"5fd93be1": "yourUNIBalance(address)", "5fd9d610": "verifyGameResult(bytes32)", "5fd9dff6": "allowance(address,address,bytes)", "5fd9e124": "pStopBlock()", "5fd9e693": "Crear_rifa(uint256,address)", +"5fda0d96": "calculateDekla(uint256)", "5fda0dc1": "isOnExchange(uint256)", "5fda83f6": "TokenTransferDisallowed(uint256,address)", +"5fdabd53": "configureMinter(address)", "5fdba1de": "setIBalance5(uint256,uint256,uint256)", "5fdbba04": "debatePeriodOf(uint256)", +"5fdbe7ea": "NewCRLToken(address,uint256,uint256)", "5fdc1a97": "AllSportsCoin()", +"5fdc7c12": "settle(bytes,bytes)", +"5fdc7f65": "hashInt()", "5fdc9e0a": "dropSupply()", +"5fdcb2c5": "_rewardProjectCounter()", +"5fdcc92e": "governmentOptions(uint256)", "5fdcd306": "check_status()", "5fdd59f8": "messages(address)", "5fde0ed5": "getCountBySeller(address)", @@ -54834,73 +100447,119 @@ "5fdf05d7": "two()", "5fdf5357": "sortDescBy(uint256[],uint256[])", "5fdf60fb": "circulation()", +"5fdfa45f": "currentBlockStart()", +"5fdfa5cd": "depositToken(address,uint256,uint256,address)", "5fe07013": "revokePermission(address,bytes32)", +"5fe07974": "batchAssignTokens(address[],uint256[],uint8[])", "5fe0e081": "changePeriod(uint256,uint256)", "5fe16454": "Fragment()", +"5fe1ba92": "firstReserveRand(uint256,uint256)", +"5fe1eac5": "viewWorkingReferral(address,uint8)", "5fe22c8b": "testFailTransferWithoutApproval()", +"5fe2535c": "completedRaces(uint256)", "5fe27ab0": "createHKG(address)", "5fe2d689": "getInterest(uint256)", +"5fe2f33c": "ChangesDisabled()", +"5fe30bc7": "approve_164(address,uint256)", "5fe36964": "TEAMS_TOTAL()", "5fe3854e": "calculatePrice(uint256,bool)", "5fe3b567": "comptroller()", "5fe44141": "getRegistryDataRegistered()", +"5fe45abe": "getTokensAmount(uint256,uint256,uint256)", +"5fe4b6ea": "amountOfBasicIncomeCanBeIncreased()", "5fe4c0f3": "validationTime()", +"5fe51e6d": "futureStrategy()", "5fe59b9d": "setMotd(string)", "5fe5b825": "AuthComplete(address,address)", +"5fe690b7": "checkCSP(bytes32,address,address,uint112,uint112,bool)", +"5fe6e413": "beforeDeadline(uint256)", "5fe6fb19": "ConsultaProva(string)", +"5fe710d6": "participationIndex(address)", "5fe736e9": "createContractPlayer(string,uint256)", "5fe745ea": "unlockOwnFunds()", "5fe75764": "specialAccounts(address)", "5fe772c6": "buyStakes(address,address)", "5fe78b9b": "_getCurrentBonus()", +"5fe8082d": "enableUnstakeEarly()", "5fe825f8": "getHodlOwner(uint256)", +"5fe83572": "findFilesByShaHash(string)", +"5fe8c13b": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[4])", +"5fe8e166": "calculateAvailableBorrowsETHInternal(uint256,uint256,uint256,uint256)", "5fe8e7cc": "getHolders()", "5fe9219a": "transferToMainViaRelay(address,uint256,uint256)", "5fe98f99": "_getPayOut()", +"5fe9da93": "priceToRemoveLiquidity(uint256,uint256,uint256)", "5fea13f8": "distributeToken(address,uint256,uint256)", "5fea3de9": "getDuration(uint256,uint256)", +"5feaab23": "getSeriesId(uint256)", +"5feb954f": "Disassociate(bytes32,bytes32)", +"5feba99c": "freeSpinDelay()", +"5fec1c0f": "onePercentAddress()", "5fec4be9": "issue(address[],uint256[],uint16[])", "5fec5d0b": "isDelegate(address,address)", +"5fec7197": "setDefaultRoyalties(address,address,uint8,uint8)", +"5fecd926": "removeBot(address)", "5fed2091": "addLovers(bytes32,string,string)", "5fed22a4": "payOffClientDebt(uint256,uint256)", "5fed2edd": "pushArray(bytes32,bytes32)", "5fee0aac": "giveBattleBonus(address,uint256)", +"5fee257f": "swap2INXRouting(uint256)", "5fee63c3": "calculatedTo()", "5fee8a4b": "getCommitThreshold()", +"5feeb794": "worked(address)", "5fef2094": "qryModuleDetail(string)", "5fef4d34": "setOwner(address,address,bool)", +"5fef7643": "candidateMinStake()", +"5fefe6c6": "JudgeIDInfo(uint256)", +"5ff092cd": "updateNumberCombust(uint256,uint256,uint256)", +"5ff0a9d0": "_redeemMasset(uint256,address)", +"5ff10c89": "setForSaleBalance(address,address)", +"5ff132f9": "_stakeTokenToPiggyBreeder(address,uint256)", "5ff149ba": "UpdateEthBalance(uint256,uint256,uint256,uint256)", "5ff1569e": "developmentPercent()", "5ff19392": "strToUnderlierType(bytes32)", "5ff1a9c0": "setPlAAdress(address)", +"5ff3a382": "dent(uint256,uint256,uint256)", "5ff3b980": "getCooloffPeriod()", "5ff456cb": "refundToOwner(uint256,uint256)", "5ff46857": "getEthToTokenMakerOrderIds(address)", "5ff4909b": "setAbel(address)", "5ff4ae32": "setGasForDCN(uint256)", "5ff4f876": "NFTBalanceOf(address)", +"5ff62a9d": "getBreedType(uint256)", "5ff63abc": "ETimesChain()", "5ff65026": "addNodeToStakedList(address)", "5ff65efe": "MaxPoSXblock()", "5ff6b342": "getValidDurationNonce()", "5ff6cbf3": "getMessages()", +"5ff6d8e8": "_setFeelessSender(address,bool)", "5ff6e9d0": "investtokens()", +"5ff72159": "hasCdp()", +"5ff76c8a": "getNestedValue()", +"5ff7710d": "MAX_VOTING_VALUE()", "5ff77b22": "checkTeamToAdd(uint64,uint64,uint64)", "5ff79c07": "DenmarkvsFrance()", "5ff7ec2f": "SoldTokensFromCroupier(address,uint256,uint256)", "5ff7f947": "setSinistre_effectif(uint256)", "5ff85cc0": "feeUnit()", +"5ff88219": "enableDistributeSeizeWpc()", "5ff8b778": "findWinners()", "5ff97818": "setMetadata0(string)", +"5ff9c077": "inStaking()", "5ffabbce": "teamReserveTimeLock()", "5ffb1578": "pushArrayValue(uint256)", "5ffbba3f": "relativeDateSave()", +"5ffc10cc": "halvingAtBlocks(uint256,uint256)", +"5ffc35ed": "ben()", "5ffc7cc7": "transferProfit(uint256,uint256)", "5ffcb734": "setTokensControlInfo()", "5ffcbe30": "voteForCandidateViaProxy(uint256,address)", "5ffce121": "getTopCompanyCount()", "5ffd59bd": "GetBalanceOwnerForTransfer(uint256)", +"5ffd968c": "lv1()", "5ffde7be": "priceUpdateInterval()", +"5ffe6146": "updateMultiplier(uint256)", +"5fff8cd3": "reassign(address,address)", "5fffad5a": "setselfdropvalue(uint256)", "5fffb7c7": "changeTokenAddress(address,int256,address)", "600005b3": "Delegation(address)", @@ -54908,85 +100567,146 @@ "6000eb9f": "getTeamInvest(uint256,uint256)", "6001279f": "decreaseApprovalByLegacy(address,address,uint256)", "600160a3": "bet_luse()", +"6001ac53": "proposedGetRoundData(uint80)", "6001b23e": "getCustomerTxAtIndex(address,uint256)", +"60023628": "removePuppy(uint256)", +"600243a7": "eventaddr()", "60027c25": "bankrollLockedUntil()", +"60031bd4": "changeOwnerForce(address)", +"60034cd5": "xEuro()", "60035c3f": "swipeHoney()", "600440cb": "upgradeMaster()", "60048290": "Kanzhang()", +"6004e140": "assignMinter(address)", +"6005035d": "looprc(address,uint256,address,uint16,uint256)", +"60053c32": "getVotesByLoanID(uint256)", +"6005d423": "bonuses1()", +"60060ccd": "flashCloseLongOptionsThenSwap(address,address,uint256,uint256,address[],address)", "60063887": "transferDebt(address,address,address,uint256)", "6006eb9b": "Demor(uint256,string,string)", "6006f178": "WitdrawLenderProfit()", "600720c2": "sponsoredJackpotAmount()", +"60074939": "addingLiquidity()", "6007c4f8": "isTokenSaleOngoing()", "6007c836": "setIndividualMaxCap(uint256)", "60084004": "getRectangleArea(uint256,uint256)", +"6008cd1f": "isTransactionApproved(address,bytes32)", "6008fb07": "EtherGit(address)", "60095dcb": "stopCharging()", "60098088": "deleteCar(uint256)", +"6009a2d8": "creditBalances(address)", +"6009a7e3": "paybackToken(address[],bool)", "6009eed3": "crowdSaleOpen()", +"600a35d4": "allocateTeamAndFounderFund()", "600a686e": "setResponse(address,string)", "600b1ff2": "setBlackBox(address)", +"600b2cd6": "from_balancer_to_uniswap(address,uint256,uint256,uint256,address[],address[])", +"600bb6e5": "newToken(string,string,uint256,string[],bool)", +"600bc4ea": "getRand()", "600c200e": "ANIToken(uint256,string,string)", "600c523b": "LogIssue(address,uint256)", +"600c557d": "routes(address,address,uint256)", "600cf0d9": "getOrdersOfOwner(address,uint256,uint256,bool)", "600d05ac": "XZARToken()", "600d0beb": "isInRaffle(address,address)", +"600d20ce": "REFERRAL_PERCENTS(uint256)", +"600d2286": "sponserTokenCount()", +"600d2dbc": "setKYCRegistry(address)", +"600d3308": "findCharge()", "600d7003": "retrieveTokens()", +"600d7598": "setFeeCycle()", "600da23a": "checkTimeBonusPercentage()", "600de26a": "getDigitFromUint(int256,uint256,uint256,uint8)", "600e0ee7": "getMySeeds()", +"600e0ff3": "qcdbuy(address,uint256)", "600e85b7": "tokenGrant(address,uint256)", +"600f30c3": "depositToken(address,uint128,address)", +"600f7dc1": "StartBurnModeDuringTransfer()", "600f8cfc": "registerByList(address[])", "60104cef": "createGame(uint256,uint256)", +"60109566": "Ended(uint256)", "6010d60c": "lockomio()", "60116397": "Registrar(address,bytes32,uint256)", +"60119e99": "getEntityReward(address,address)", "6012042e": "verifyPayment(bytes32,uint256,uint256,uint8,bytes32,bytes32)", "60136123": "NTToken()", "6013aa44": "testControlCreateSameNonce()", "6013d092": "tokenSaleLimit()", +"6013f7b3": "setToyTokenContractAddress(address)", +"6014488b": "getLenderWithdrawn(address)", "6014e37c": "getLLV_edit_15()", "60154e85": "payComision()", "60155673": "TEC_TEAM_WALLET()", "601570ea": "getResponseString(uint256,bytes32)", +"6015f4ef": "removeLiquidityExactOut(address,uint256,uint256,uint256)", "6016db70": "getAssetMinAmount(address)", +"6016dd0a": "bankrollpercentage()", "6016dd4a": "credentials(address)", "60173ede": "FondoNetwork()", "60175bcb": "ActivityCore(address,address)", +"60175c4a": "isValidRedeem(address,uint256)", +"60178810": "logSwap(address,address,uint256,uint256,address)", "6017bb61": "Death()", +"6017c458": "removePynths(bytes32[])", "6017d51d": "testInt(int256)", +"601839ae": "__MerkleDistributor_init(address,bytes32)", +"601846df": "timelockFactory()", +"60185f56": "ChangeHardCap(uint256)", "6019061b": "createSale(uint256,uint256)", "60192799": "steps()", "60196008": "replaceLevel(uint256,uint256,uint256)", "601a0bf1": "_reduceReserves(uint256)", "601a0e77": "pseudoRandomUint8(uint8)", +"601a19c0": "cock()", +"601a1ab8": "untop(uint256)", "601ab918": "CashBetCoin(uint256)", +"601ace93": "CoinsMinted(address,address,uint256)", +"601ae125": "ExpandX(address)", "601b349c": "removeCollaborator(uint256,address)", +"601b5a64": "player1Turn()", "601ba73a": "setMainSale(uint256)", +"601c1977": "isOwnerTransferred()", +"601c7489": "changesettings(uint16,uint16,uint256,uint256,uint256)", "601cd624": "transfersAreLocked()", "601d3910": "reconcile(address[],int256[],uint8[],bytes32[],bytes32[])", "601d54eb": "ZTCrowdsale(address,address,address,uint256)", +"601e50fa": "DecreaseCap(uint256)", "601ee75e": "SPINToken(address,address,uint256,uint256)", +"601f8cf5": "addViewer(address)", "601fba02": "activateBuyback(uint256,uint256)", "601fc832": "getObserverAtIndex(uint256)", +"601fdff3": "getAmountLocked(address)", +"601ffb86": "lostMoneyDL_4(address,uint256)", "6020b90a": "_internalTransfer(address,address,uint256,bytes)", "6020d2c5": "_newSaddle(uint256,uint256,uint256,bool,address)", "60213b88": "getInitialWithdrawal()", +"602146ad": "monthTime()", "60214c6f": "test_method()", "60217267": "stakedBalance(address)", "60219c7b": "totalTokensForSale()", +"6021abac": "requestVolumeData()", "6022e6f8": "createProposal(address,uint256,string,bytes)", "602451ea": "showAuthorizerOneAmount()", "60246c88": "getPoolInfo()", "60249827": "Puzzle()", +"6024c34b": "callDapp(address)", "602501a1": "SGD_Omnidollar()", "602512e1": "setDifficulty(uint256)", +"6025b220": "addQuestion(uint256,uint256,string,string,uint256[])", "6025d3e5": "finalizeAll()", "60261ce6": "deadlinePreIcoOne()", +"6026978c": "implementationExists(bytes32)", "6026bb86": "battleUnitIdRange()", "6026c151": "offerGanTokenForSale(uint256,uint256)", +"6026e277": "_tokenContract()", "60274396": "createDutchAuctionToBuy(uint256,uint256,uint256,uint256)", +"60279b06": "get_employee_info_with_index(uint256)", "60281080": "HBVToken()", +"6028323c": "createMultipleTokens(uint256[],uint256[],address,uint256[])", +"6028bc63": "_setFundsGovernor(address)", +"60291a51": "getLuckPoint()", "6029755e": "_generatePersonalNumber(string,uint256)", +"60297783": "setWithdrawalLimitPercent(uint256)", "60299843": "minWeightDeduct()", "6029b13f": "collect(address,address,uint256,bytes32,bytes32,uint8)", "6029bf9f": "distributeFees(uint256)", @@ -54994,73 +100714,137 @@ "6029f53f": "getOrderTakerTokenAmount()", "602a3fee": "sendMiningProfit(address[],uint256)", "602acca1": "InchainICO(address[],uint256)", +"602b386e": "getUsers(address)", "602b7001": "updateRefundApplications(address,uint256,bool)", +"602bc098": "ogn()", "602bc62b": "getUnlockTime()", "602cd226": "DelayedPayment(address,uint256,address)", "602cf359": "IOXToken()", +"602d0efc": "bTokenBuy(uint256,uint256,uint256)", "602d7d62": "stateFail(uint256)", +"602d8608": "poolLockSeconds()", +"602d94c1": "cheroesPerBlock()", "602e2533": "_fee(uint256)", "602e496c": "fundcruVaultLockTime()", +"602e4ae7": "useMyTicketsForAnotherAddress(address,uint256)", +"602e5b42": "setfundingID(string)", "602e6623": "minePool()", "602ea880": "AlphoTestTokenCoin()", +"602eb00b": "enterSwap(address,uint256)", +"602f49ae": "updateValue(bytes32,string,uint8)", +"602fb129": "OwnerTransfer(address,uint256)", "602fbd79": "afterCrowdSale()", "603066a4": "foundationReserve()", +"60310e14": "maxRsvSupply()", +"60310e8d": "reduceRewardOne(address[],address)", "60312cdd": "LazyToken()", "60316801": "getTokenMetadata(uint256)", "6031749c": "updatePassport(address,uint256,bytes32,bool)", "60319f71": "EOEToken()", +"6031a094": "setCreatorBeneficiary(bytes32,address)", "6032f4a6": "fulfill()", "603318ad": "getContributions(uint256,address,address)", +"6033478a": "country_getCountriesGeneralInfo()", +"60338dff": "finishRageQuit()", +"60339701": "redeemReward(uint256,uint256,uint256)", "60339c7b": "resetUserPromoBonus(address,address)", "6033abd5": "CafePayed()", "6033cdc6": "voteToUpdateMaritalStatus()", +"6033e5c9": "runTokenUniswapTransferThisAddressintransfer(uint256,address,address)", "60344938": "changeCongress(address)", +"6034c140": "m_Accelerator_Address()", "603510cb": "USDYToken()", "60351748": "genericAction(bytes32[],address)", +"6035351c": "set_DOMAIN_SEPARATOR_Multi(address)", "603546b9": "UnMint(address,uint256)", "603553df": "ReederemEvent(address,uint256,uint256,uint256)", "603601d5": "esercita_potere_pubblico()", +"60362514": "doubleNumber()", +"60362e3a": "setNyanV2(address)", "60368a33": "totalBribery()", "60368f30": "XLedger()", +"6036cba3": "currencies(address)", "603709e3": "get10Characters(uint16)", +"60372c98": "areownerscreated()", +"60378cea": "dodoCall(bool,uint256,uint256,bytes)", +"6037b04c": "RevertNoReason()", +"6037d2a3": "monthlyNRTAmount()", +"6038f739": "wtfPerBlock()", "60393a55": "addPeriod(uint256,uint256)", "6039c60c": "fiveTimes(address,uint256)", "6039fbdb": "addTokens(address,uint256)", "603a552e": "engineer()", +"603a740c": "onReLoadAndDistribute(address,bytes32,uint256,uint256,address,bytes32,uint256,uint256,uint256)", +"603af06f": "withdrawPoll(uint256)", +"603b4d14": "UNBOND()", "603c1370": "onNewLoan(uint256,address,uint256)", "603c5e52": "SetCreditsPerEth(uint256)", +"603c6860": "removeLiquidityFromJob(address,address)", +"603c89e8": "withdrawFeeForTokens(address[])", "603ccf5e": "AMBASSADOR_SEVEN()", "603d1b98": "guardian1()", "603d1d1c": "setSellOpen(bool)", "603d1ed9": "createdOn(uint256)", +"603d22d8": "etherDeposit(bytes32,uint256)", +"603d456a": "updateModelIPFS(bytes32,string)", "603daf9a": "getBuyer()", +"603dc317": "yAffiliateTokens()", +"603def9c": "func_00001D6C(uint256,uint256)", +"603dfcda": "setStakingPoolShareFee(uint256)", "603e3a40": "bulkBuy(uint8[],bytes6[],uint32[],uint32[])", "603f4d52": "saleState()", +"603f51e4": "getConvertibleTokenAnchor(address,uint256)", +"60401497": "verifyZKPVote(uint256[2],uint256[3],uint256[2][2],uint256[2][],uint256[2][10],uint256[2][10])", +"60401581": "isPayoutOperatorFor(address,address)", +"6040b668": "getTotalSaleAmountForAllSale()", +"6041344f": "getElapsedReward()", +"60415df0": "getExpiredTenders()", +"6041f7a9": "timeLockRate()", +"6041fc88": "deactivateStorageOracle(address)", +"6042110b": "stake36m(uint256)", "60425c48": "TokenSellPercentage()", "604269d1": "isMain()", "6042a760": "icapTransfer(bytes32,address,bytes32,uint256)", +"6042bcba": "RoundMyPayMask(uint256,address)", "6042fbe1": "maxPower_()", +"6043227a": "rFactor()", "60434dcf": "getGitHub()", "60445142": "depositCntr()", "604497a2": "_transferFrom(address,address,uint256,bytes,bool)", "6044ce6e": "cancelAgonForce(uint64)", +"60452eb7": "Deposit(address,uint256,bytes32,uint256)", +"604544f9": "FetchedDeposits(uint256)", "60456068": "appreciationStep()", "60457034": "setVerificationStatus(bytes32,bool)", "6045804f": "delManager()", +"6045c20c": "setAdes(bytes[])", +"6045c771": "eventUserBet(string,address,uint256,uint256,uint256,uint256,uint256[],uint256)", +"6045f189": "grantDevelopmentToken(address)", +"60461073": "clearROTH()", "60464627": "totalWithdrawals()", "6046c37f": "activateEmergencyProtectedMode()", +"6046cd99": "poolAddr()", "6046d718": "loggedTransfer(uint256,bytes32,address,address)", +"6046f67c": "depositStatus(uint256)", "6046f71d": "getProposalEthReward(bytes32,address)", +"604704f9": "countEthDeposited(address)", "6047a00e": "bonusTokensPool()", "6047f7f5": "getTotalBmcDaysAmount(uint256)", "60483a3f": "submitEtherProposal(uint256,string)", +"6048651e": "setSendFeeToOwner(bool)", +"60487159": "addIssuedSynthsByERC(address,bytes32,uint256,uint256)", +"6048d498": "viewEtherOutPlanSetting(uint256,uint256,uint256)", "6048e89e": "setEthToBeClaimed()", +"60491d24": "relock(address,uint256,uint256,uint256)", "60493ea4": "ico4Raise()", +"604a21a4": "startNextMonth_()", "604a4bc8": "createTrackFromBack(bytes32,uint256)", "604a4f9d": "regularTicketPrice()", "604a6fa9": "Random()", +"604a7c13": "setNewEventName(string)", "604aa2cb": "backResiliumOwner()", "604b2399": "_hasFlag(uint256,uint256)", +"604b6a9c": "setFeeBPS(uint256)", "604bf292": "safeSubtrNCP(uint256,uint256)", "604c0b60": "transferBuyer(address,uint256)", "604c7ef4": "BCBtuCoin()", @@ -55068,66 +100852,111 @@ "604cc1a5": "startGiveaway(uint32,uint256)", "604ce56c": "MAX_ACTIVE_CANVAS()", "604d3943": "poolCut()", +"604d996e": "getWhitelistContract()", "604e3588": "SmartDollar()", "604e4732": "tryFinializeLastProposal()", "604e5fb8": "structureIco(uint256)", "604e7af6": "totalDropTransactions()", +"604ef2e5": "rewardEndBlock()", +"604f2177": "stake(uint8)", +"604f488d": "decayRatio()", +"604f70c1": "offerInfos(uint256)", "604f87d8": "transferFromCallGas()", "604f90a8": "getGladiatorChestAvailable()", "604fc446": "getAddOnNeeded(uint16)", "60500245": "registerName(string,bool)", "60506aff": "initialDeposit(address)", +"60506cba": "newBuyBack(address)", +"6050a4c4": "secondTokenLPAddress()", "6050eeb4": "_createLibrary(string,string,address,address,uint256,uint256)", +"605154be": "sleeve(uint256)", "6051c7cd": "acquireTokens(uint256,uint256,address,uint256,address)", +"6051e195": "token90FrozenBalances(address)", "6051fa2c": "logTradingProceedsClaimed(address,address,address,address,uint256,uint256,uint256)", "60521116": "showPoolInfo(uint256)", "60528e7b": "proxyWithdraw(address)", +"6052970c": "feeSplitter()", +"60529c42": "_tokenDta()", "6052a22b": "toTimestamp(uint256,uint256,uint256,uint256,uint256)", "6052a849": "getEtherToBuy(uint256,bool)", +"6052ccb0": "lastClaimDate(address)", +"6052dc52": "setGoalFailed(uint256,bytes32)", +"60530d0d": "gladiators(address)", +"605317bd": "applyForLoan(uint256,string,uint256,string)", "60536172": "takeOwnership()", "60542557": "SmartExchange(string,string,uint8,uint256)", "60546602": "isAbsent(bytes32)", +"6054a626": "setExtraRewardRate(uint256)", "6054da0b": "setNextCommonTTMTokenId8(uint64)", +"60554011": "oracleUpdateAllowance()", +"60562255": "getEarn(uint256,address)", +"605629d6": "transferWithPermit(address,address,uint256,uint256,uint8,bytes32,bytes32)", "60566675": "LeoCoin()", "6056969b": "announce(bytes32)", +"60570b2e": "projectList(uint256)", "6057361d": "store(uint256)", "60577043": "tixFund()", +"6057e73c": "KamiSenzuCoun()", "6057f2ca": "addDealer(string,address,uint256)", +"6057feff": "changePairExchangeRate(bytes32,bytes32,uint256)", "60583488": "get_info()", +"605836cf": "bunny()", "60585358": "getByte()", "60589137": "ListingCancelled(bytes32,uint256)", +"6058997c": "checkAmount(uint256,uint256,address)", "60595433": "Pass()", "6059838b": "tierTwoPurchase()", +"6059c384": "cioAddress()", "605a18c2": "setTokenTransferFeeProp(address,address,uint256)", "605a42db": "superDragon(uint256)", "605a8ea3": "AvailableCommission()", "605ae1d0": "BIDTToken(address)", "605b24be": "gcard(uint256,address)", +"605be9be": "logDelegatorUnstaked(uint256,address,uint256)", "605c0209": "ZorffToken()", "605c2dbf": "ManagerChanged(address,address)", "605c43de": "getBetById(uint256)", "605cee71": "delWallet(uint256)", +"605d04d1": "PUSDStablecoinAdd()", +"605da1b2": "collectTokens(address,uint256,uint64)", "605de51d": "getTotalSponsorship(uint256)", +"605e25ac": "setTokenListener(address)", "605e5ee1": "delWhiteList(address)", "605f2ca4": "distributeTokensToContributorByIndex(uint256)", +"605f9998": "isProducerRegistered(address)", +"605fed87": "activateAuction()", "605ff295": "CelebrityToken()", +"6060663e": "setCollateralRatio(uint256)", "60608438": "setCurrentAndNextSnapshotBalance(address,uint256,uint256)", +"6060e753": "openVault(address,address)", "60616ae2": "BllotPro(bytes32[])", "6061d692": "month30Unlock()", "60621984": "Mining24(uint256,uint256)", "606224f8": "sendPendingAmounts(uint256,uint256,address)", +"60631757": "updateFarmRewards(int256)", +"6063214e": "test_eq()", +"606407b6": "CHANGE_MULTIPLIER_AT_BLOCK(uint256)", "60643652": "maxEntrants()", +"6064389b": "giveCocaCola()", "6064d863": "revealedCeilings()", "6065140b": "setKYCVerificationContract(address)", "60654e47": "getLotteryBalance()", +"60655ba7": "totalFeesOnLoan(address,uint256)", +"60657b0c": "FundsChange(uint256)", "60659a92": "tokensAvailable()", "6065fb33": "genesisAddress()", +"6066297d": "settleAuction(uint256[])", "60662fe2": "TOKENS_TOTAL_SUPPLY()", +"606647c8": "redeemEnd()", +"60667fa9": "set_a1()", "60668e58": "getData_5()", "6066b066": "isSaleMarket()", +"6066b9fe": "tributeToManager(string)", +"6066debd": "reviseWithdraw(uint256,address,uint256)", "6066ed11": "getCombatsCount()", "6067be79": "getInvestedSumToRound(uint256)", "60689557": "Rock()", +"6068e2c1": "pendingNifity(uint256,address)", "6069272c": "getAllEntityIds()", "60694549": "withdrawUserPrize()", "60699026": "mulSafe(uint256,uint256)", @@ -55137,8 +100966,12 @@ "606a7f01": "Addr4()", "606a9584": "_forwardPoly(address,address,uint256)", "606aed30": "withdrawOwedToken(uint256,uint256,uint256)", +"606b77cb": "testChickenInfo(uint32)", +"606ba309": "setPayBalance(uint256)", "606baff8": "minCrowdsaleAllocation()", "606bc9a5": "setOwnerHoverText(address,uint256[2])", +"606bcea4": "isWLManager(address)", +"606c0e5f": "yflStaked(address)", "606ce3bf": "set(uint256,uint256,uint256,uint256)", "606d0d14": "executeOffer(uint256,bytes)", "606d2e96": "battles(uint256)", @@ -55146,10 +100979,13 @@ "606da54e": "XBLContract_addr()", "606dc104": "openRaceCount()", "606deecd": "requestData()", +"606df88b": "create(address,address[],uint256[],uint256[],uint256,uint256,uint8)", "606ec65d": "TransferUpdated(address,uint256)", +"60701411": "getSpecialWallet()", "60702417": "MakeERC20(uint256,uint256,string,string)", "60704108": "getAssetProxy(bytes4)", "60708ae3": "issueAndCommit(address,address,uint256,uint256)", +"60709b18": "initRewardPerBlock()", "6070f1be": "NodeMCU_Endpoint()", "60711058": "getUserDeposit(address,uint256)", "6071eb5c": "ecosystemReserve()", @@ -55157,73 +100993,130 @@ "607267d3": "getPlayerRoundDividend(address,uint256)", "60726abb": "copy()", "60727416": "newUserFrom(address,string,string)", +"607288c4": "setExpansionPercentsDebtPhase(uint256,uint256,uint256,uint256)", +"60728cfd": "_allocPointForWBNB()", "6072ec64": "auditData()", "60733572": "setUnicornToken(address)", "60734859": "changeSaleTokenLimit(uint256,uint256)", "6073660a": "findNextDay(uint256,bytes2)", "60737a7c": "FaucetToken(string,string,uint8)", +"6073a75d": "setEnableFeeDiscount(bool)", "6073d045": "userDepositedWei(address,address)", "6074123c": "AthlierToken()", +"607414e5": "tokenTemplateKey()", "607485fe": "firstYearMinedTokenCap()", "6074b806": "updateOrderbook(address)", +"60750a4f": "generateHash(address,uint256)", "607531b6": "bitownToken()", +"60756f7c": "setFeeManagerContract(address)", +"607590ef": "convertBackUni(uint256,uint256,address)", +"60759603": "ReferralBalanceUpdated(address,address,address,uint256,uint256)", "6075eb7d": "openChest(uint256)", "6076a3d5": "setEarlyParams(bool,uint256,uint256)", "60771261": "scalarBaseMult(uint256)", "6077759c": "bubbleSortAllMatches()", +"6077da7d": "processPayment(uint256,bytes32)", "6078268b": "advisorsTokens()", "60785bd1": "easyUpdateMatriarch(address)", +"607871e9": "EggDistribute(uint256,uint256,address)", "6078b87e": "communityPeriodLength()", +"6078def5": "addTokenAdapters(bytes32[],address[])", +"60791b88": "getProposalDataHash(address,address,bytes4)", +"607929bf": "get_blockstart(uint256)", "60795d80": "requestAllowance()", +"60798cab": "deposit(uint256,uint8,uint256)", +"6079bc96": "getAwards(uint256[])", "607a124f": "setAttrs(address,address,address,uint8,uint256,uint256)", +"607ad0d7": "deployTimestamp()", +"607addec": "NewPayment(uint256,uint256,address,uint256)", "607af216": "getRepresentedDTH(address)", "607afbb5": "mySum(uint256,uint256)", "607b463a": "getCash(address)", +"607b6858": "CONTRACT_ITEM_BASE()", "607b9169": "toOwner()", "607b9f97": "safetyWallet()", +"607bba4a": "BlockInformationSubmitted(address,uint256,address)", +"607c12b5": "getDeployers()", +"607c219f": "setGovernanceWallet(address)", +"607c5c5f": "StakeLP2(address,uint256,uint256,uint256)", +"607cb2ce": "raffleAddr()", "607cbaff": "viewPetitionShareholder(uint256)", +"607cc707": "delegateToTarget(address)", "607d35c4": "uint5ToStr(uint256[5])", +"607d6458": "getRecordIndexLengthForGroupMembersByDepositor(address)", +"607d9c68": "setLook(uint256,bytes32)", "607db616": "tokenAllocate()", "607dbae5": "ProofOfIdleness()", "607dc1d6": "createNewCSCResource(string,string,uint256)", +"607df9b9": "updateLpTokenExists(address,bool)", +"607e60eb": "yo()", "607eaf70": "investorBankroll()", "607ecd96": "checkAccBalance()", +"607ef6c1": "_setMarketBorrowCaps(address[],uint256[])", +"607f2599": "enableBots()", +"607f2d42": "processedExits(bytes32)", +"607f35a0": "buyBackToken2()", "607fa5a4": "updateRequired(uint256)", "60805e5a": "unlockAddress(address,bool)", "60808037": "numTokensForContributor(uint256)", "6080af05": "setVoterStakesContract(address)", "6081f5cb": "calculateBonus(uint256)", "60820d80": "getOwnedTokens()", +"6082258f": "getActiveTokenExchangeById(uint256)", "60827be8": "IDChain()", "60829f8a": "unstake(address,address,uint256)", "6082a02c": "getPriceIdv(bytes32)", "6082a6ad": "Punani()", +"6082f6e6": "onClaimWinner(address,uint256,uint256)", "60834493": "Veetune(uint256)", +"608352f8": "stolLiquidity()", "60836aa4": "changeDevCut(uint256)", +"60837f29": "sntToken()", +"6083bce9": "AddVestingAddress(address,uint256)", "6083e59a": "maxDeposit()", "608427e6": "ApolloSeptemTokenPurchase(address,address,uint256,uint256)", "608458eb": "TOKEN_FOR_SALE()", +"60846bc6": "prices(bytes32)", "6084747f": "mostRecentBlock()", +"608512ff": "spread_token()", "60851f28": "viewThirdLotOfClauses()", "6085e6af": "tokenSellData()", +"6085f0e9": "callFoo()", +"6086647a": "LogGift(address,uint256,address,uint256,address,uint256)", "6086e22f": "calculateInitialPayerDeposit(uint256)", +"6086e7f8": "activityStopped(uint256)", +"60870165": "EventBmc(address,uint256,uint256)", "608716ad": "CryptoMoviesToken()", "60874b27": "SpankICO()", +"60886d00": "wlf()", "60887081": "IEOStarted()", "6088a917": "artworkRegister()", +"6088b76d": "userWithdrawDivsOnCycle(uint256)", "6088caf3": "tier4Time()", "608980eb": "intervalsAt(uint256,uint256,int256)", +"6089af9a": "memberDistance(uint256)", "6089e3c4": "BitCashPlatform()", "608a0ff0": "transferBet(address,address,uint256)", +"608a2596": "getTotalProduct(address)", +"608ad5a3": "UpdateAdapterWithdrawalDelegate(address)", +"608b0cec": "updateJobTrigger(uint64,uint256)", +"608b2b5f": "commissionJot(uint256)", +"608b2e3b": "legendaryWhiteLister(address[])", +"608b6058": "approve_278(address,uint256)", +"608b94b9": "Reconia()", +"608bac05": "ADD_COLLATERAL_TOKEN_ROLE()", "608bc08c": "airDrop(address,address,address[],uint256,bool,address)", "608bd7f4": "setLong(address)", "608be57f": "_startNextAccountingPeriod()", +"608c68d0": "uniTotalInline()", +"608c8d3a": "rewardsInThisEpoch()", "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)", +"608e4dd0": "unstakeTokens(uint256)", "608e7fa6": "addAlias(bytes32,address)", "608e9122": "InbestToken()", "608eaa6a": "setFiscalVerify(bytes32,uint256,uint256,uint256)", @@ -55234,15 +101127,32 @@ "60900c88": "coinprice()", "60909c51": "closeDataResponse(address,address,bool,bool,bytes)", "6090befe": "setCompanyWalletAddress(address)", +"6090dec5": "open(bytes32,address)", +"60911f2a": "Cake()", +"6091312d": "setrebateTwoRate(uint16,uint16)", "60913244": "botOnSale(uint256,uint256)", +"60918117": "customCollateralRate()", +"6091c814": "_exchangeSynthsForSNX(uint256)", "6092019a": "MAX_FUNDING()", +"609229ce": "remainingVotes()", +"609298e1": "exchangeSgrForEth(address,uint256)", +"6092a502": "SaarthiTasks(uint256)", +"6092c09e": "parse64BytesToTwoUint256(bytes)", "6092e55b": "createCDPLeveragedDai(uint256)", +"6092ff73": "get_special_pairs_length()", +"60931218": "RestValue()", +"609350cd": "nonRebasingCreditsPerToken(address)", "60938601": "approveOnly()", +"6093c975": "freeTokenCollateral(address,address,uint256,uint256)", +"6093def3": "initiatereplacevote()", +"60940e3d": "_rebasingPriceUSD()", "6094fae8": "finishTransfer(uint256)", +"60952274": "getChainIdV1()", "609526c2": "generateRandomNumber(uint256,uint256)", "60953744": "Mul(uint256,uint256)", "60958192": "getProposalTTL()", "6095c2d5": "setExchangeCommissionAddress(address)", +"60961528": "marketOracle()", "60961955": "addFakeVisitors()", "609619b4": "SecurityDepositRegistryReplaced(address,address)", "60965dc0": "firstRoundWMStart()", @@ -55252,200 +101162,388 @@ "609725ef": "getCurrentPassportLogic()", "60972a84": "reissuedTransactions()", "60975988": "PING_ORACLE_INTERVAL()", +"60978dea": "targetAddress(address)", "60979759": "p_setOwner(address)", "6097bca9": "atnSent()", +"6097e202": "setCommissionMax(address,uint32)", +"6097e7a3": "abiEncode()", +"60981705": "getPersonDetails(uint256)", +"6098fd4a": "getLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256)", +"60993b5b": "notifyReward(uint256)", "60994bb0": "_createRoc(uint256,string,uint256,address)", +"60998bc1": "swap(address,address,address,uint256,bytes,uint256)", "6099af40": "setConfigBool(bytes,bool)", +"6099d4c3": "that(bool,bytes32,bytes32,address,uint256)", "6099ecb2": "pendingRewards(address,uint256)", "609a54b0": "get_all_sellable_token()", "609ab538": "newSchellingRoundEvent(uint256,uint256)", "609ada00": "logEntropyTxDetails(string,uint256)", "609b5785": "_mainsaleSupply()", +"609b5b89": "getBaseContract()", "609b8394": "setAnimator(address)", "609ba988": "approveAdvertiserCharges()", "609bdc71": "MintableMultiownedTokenTestHelper(address[],uint256,address)", "609bec67": "period3Denominator()", "609bf323": "VestedTokenMock(address,uint256)", "609bf6ba": "GetGuestCount()", +"609c92b8": "TOKEN_TYPE()", "609d2bc5": "oraclize_setConfig(bytes)", +"609d90cb": "_repayAtFixedRate(address,uint256)", "609da897": "setupCompleted()", "609df32f": "listNode()", +"609e4427": "latestAction(uint256)", "609e5ca4": "getTournamentAmt()", "609ec605": "toBytes(bytes4)", "609f8fe2": "verify(string,uint8,bytes32,bytes32)", "609f9a8e": "betFromGame(uint32,bytes32)", "609ff0fb": "developersRecipient()", "609ff1bd": "winningProposal()", +"60a02590": "liquidityGenerationOngoing()", +"60a0c9e4": "MetadataPowerGTKType(uint256)", +"60a0d330": "UsEthBalance(address)", +"60a0f5b9": "ManagerSet(address)", "60a10fa7": "setBridgeHeight(uint256)", "60a11672": "safeTransferFromWithData(address,address,uint256,bytes)", "60a1623f": "_withdraw(string,string,bool)", +"60a17d39": "updateVoteForServicesCount(uint256)", +"60a1b056": "BOARD_RESERVED_YEARS(uint256)", +"60a1deec": "_restrictions()", "60a1f397": "_evaluateArea(address,uint8,uint256)", "60a22932": "totalSaledToken()", +"60a22ea7": "disagreeChangeManager()", "60a22fe4": "nextMinimumBond()", +"60a230e7": "subFromTotalSumAssured(bytes4,uint256)", +"60a2da44": "initialize(uint256,uint256,uint256,uint256)", "60a31921": "dividendsOf(address,address)", +"60a31e0f": "FrozenAccountToken(address,uint256,uint256)", +"60a31e9d": "_commitFor(uint256,address,bytes32)", +"60a4928c": "teamLeaders(uint256)", "60a4a929": "Assigned(address,uint256,uint256)", "60a4d104": "dteamVaultAddr2()", "60a4d1a5": "AddNewCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", "60a4d599": "getPreICOLength()", +"60a4eb9d": "addERC20ForStaking(address,uint128,uint128)", +"60a5343f": "setDaysLimit(uint256)", "60a59bdb": "random_number()", +"60a5d211": "MAX_C_RATIO()", "60a60fd8": "testProxyCallWithValue()", "60a64947": "getAdv(address)", +"60a660b6": "musicProtection(address,address,uint256)", +"60a6e23a": "converters(uint256)", "60a703ea": "ReceivedOwnership(address)", "60a72c29": "getAppData(address)", +"60a76aed": "perTrustee()", +"60a8b18a": "getSupportedAsset(uint256)", +"60a90dec": "disabledToken(address)", +"60a9f304": "rewardClaimStartTime()", +"60a9f458": "cal_out_pending(uint256,address)", "60aa0e1c": "ICO_token_supplyCap()", "60aa6b9e": "changeDueDate(uint256)", "60ab5852": "issueTokens()", +"60ac85d6": "addWithdrawOperator(address)", "60acf888": "token_transfer(address,address,uint256)", "60ad2391": "settlement(uint256)", +"60ad594e": "dokiBuybackAccount()", "60ad5bd0": "getCountrySpots(uint16)", +"60ad954c": "_setDeFILAddress(address)", "60ad970d": "getLoansForAddress(address,uint256)", "60ad9d7b": "burnByAddress(address,uint256)", +"60ade0f4": "freezeWindow()", +"60ae1e92": "createProject(string,string,address)", "60ae1eb5": "buySaleCardFromSys()", "60aeac18": "neverPayBack()", +"60aecb41": "feesContractAddress()", +"60aee625": "transferablePynthetix(address)", "60aef331": "buyTokensBonus(address)", +"60aef63a": "tokenSaleRhino(address)", "60af9f91": "masterRecruitment()", +"60afb13a": "openLockETHGenerateDebtProvideLiquidityUniswap(address,address,address,address,address,bytes32,uint256,uint256,uint256[2])", +"60afbef3": "__calcProtocolFeeAmount()", "60b0b0f0": "contribute(uint256,address)", +"60b19393": "setDefaultMediator(address)", +"60b1cc80": "initToken(bytes)", +"60b1da5b": "Stop_At(uint256)", "60b1e057": "EVMSCRIPT_REGISTRY_APP_ID()", "60b1e173": "getProof(uint256,address,address)", "60b2a56a": "drawWinner(uint256)", +"60b2aff3": "presaleOwners(uint256)", +"60b2f820": "createUBI(uint256)", "60b35739": "_multiMint(address[])", "60b38880": "TemperatureMeasurementA(address,int8,int8,uint16,string)", +"60b39943": "FavorTokenUser(address)", +"60b42f12": "systemSettings()", "60b431a4": "testGetSig()", "60b4a8fd": "getLastBidId()", +"60b4d34d": "refundedDeposits(address)", +"60b4eb98": "wethContractAddress()", +"60b5bb3f": "initialize(address[],uint256)", +"60b5bb7f": "requestRefund(address,address)", +"60b5ec46": "WEI_POINT()", +"60b616c1": "yield21Jun30AnnualizedYield()", +"60b67d6d": "COMPOUND_SUBSCRIPTION_ADDRESS()", +"60b6a370": "donateToUser(address)", "60b6aa92": "privateIcoEndTime()", +"60b6c7b9": "isAddressAlreadyPlayer(address)", "60b6ff5c": "ioucoin()", +"60b71d4e": "feeBalance()", "60b73223": "refundMoney(address,address)", "60b7b3f6": "getCurLotIndex()", "60b82e2e": "getRandomNumberList()", +"60b82fff": "luckyDrawVault_()", "60b831e5": "cancelCall(bytes32)", +"60b90acf": "chxAddress(address)", "60b95da5": "YclDoCoins(uint256,string,uint8,string)", "60b99afb": "getIconiqMaxInvestment(address)", +"60b9d900": "calculateEthereumReceived(bytes32,uint256)", +"60ba8353": "STAKINGPOOLCOUNT()", +"60baaaae": "expirerFee()", "60baabf3": "nizk_setup()", +"60bada0f": "setBullToken(address)", +"60bb3819": "x5Address()", +"60bb8080": "StageEvent(uint8)", "60bba03d": "setTeamMember(address,bool)", +"60bbb7b8": "candidateSuperOwnerMap(address)", +"60bbf6e2": "opium()", +"60bc5497": "__setTimelockPendingAdmin(address)", "60bc59b7": "__addressToString(address,address)", "60bc5a06": "airdropManually(address,uint256)", "60bce2f4": "usdPerEth()", +"60bd15d4": "getContractNameLen()", "60bd409e": "setAllowSellLands(uint16)", "60bd7a9d": "statuses()", +"60bdbb3f": "proposalsInfo(address,bytes32)", "60bddc04": "getRateScore(uint256)", "60be3547": "newLottery(uint256,uint256)", +"60be36cc": "withdrawUserBonus()", "60be5f70": "newUser(address,bytes20,uint64)", +"60be675f": "mockDecreaseTime(uint256)", "60bea672": "createPorscheTicket(address,uint256)", "60bebe98": "translateTileToWidth(uint16)", +"60bef33a": "validateOrder_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", "60bf1d2f": "ownsHive(address)", +"60bf412c": "hasUserClaimedTokens(address,uint256)", "60bf46ea": "setQuotePriority(address,uint256)", "60bf4dd5": "PGO_INTERNAL_RESERVE_CAP()", "60bf9a84": "getbetData(uint256,uint256,address)", +"60bfa645": "pendingWtrx(uint256,address)", "60bfe04e": "setRewardOpen(uint256)", "60bff45c": "_addHolder(address)", +"60c0fdc0": "isExecutedTx(address,bytes32)", +"60c127b2": "getOrderDataForLogs(bytes32)", "60c1461f": "setNewICOTime(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "60c17d1d": "freedWosPoolForSecondStage()", "60c17eec": "eventPaid(address,uint256,uint256,uint256)", +"60c1a8ca": "setRatioProfit2Cost(uint256)", "60c1e433": "getSellerTransaction(address,uint256,uint256)", "60c20c16": "addOffer(string,uint256,address)", +"60c2a348": "getFinalTokenStakeWithdraw(uint256)", "60c2db45": "walletTwitter()", "60c2f663": "toUINT128(uint256)", "60c311fd": "doBurnFromContract(address,uint256)", "60c31544": "exporterReceivedPayment()", "60c326ea": "setModel(address)", +"60c33c60": "is2D()", "60c46821": "fundContractForRefund()", +"60c495ef": "createCity(string,string,address,string)", +"60c4c6ab": "emeralds()", +"60c4d9aa": "uorder()", +"60c57217": "create(address[],string,string,uint8)", "60c5cc3a": "acceptProposal(uint256)", "60c6171c": "calculateGoldBuySimple(uint256)", +"60c634ee": "borrowedBalanceOf(address)", "60c66c5c": "maxNumOfPayoutCycles()", "60c677ff": "commanderAlive()", "60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", "60c6ccb2": "removeMonsterIdMapping(address,uint64)", +"60c6cdac": "rewardTillNowPerToken()", +"60c6d8ae": "totalFeesCollected()", "60c6ec6f": "validState()", "60c71546": "enableTransferEarlier()", "60c72285": "submitRemoveOwnerTransaction(address)", +"60c74bb6": "REGISTER_WITH_AUTHORIZATION_TYPEHASH()", +"60c757ba": "date(uint256)", +"60c75d68": "getBatch(address,uint256)", "60c79d00": "setNumTranscoders(uint256)", "60c7bb5a": "host_lottery(bytes32)", "60c7d295": "cache()", +"60c7dc47": "stakeAmount()", +"60c7efd3": "vasquez12(address,uint256)", "60c82d6f": "addAddressToWhiteList(address,address)", +"60c8b6dd": "isBalancesMigrated(address)", +"60c8d122": "updateCheckpointRewardParams(uint256,uint256,uint256)", +"60c959db": "_releaseStates(uint256)", +"60c97b22": "provideLiquidity()", +"60c9b774": "addLiquidityToUniswapLENREK1xWETHPair()", "60ca46cd": "toTokens(uint256)", "60ca6890": "_submitTransaction(address,uint256,bytes,bytes,address,uint256)", "60cb5fac": "deleteChannel(bytes32)", "60cb66d0": "sum(int256[])", +"60cb6d3f": "getKatrinaExitFee()", "60cb8884": "TokenBank()", "60cb96be": "CollectibleIndex0()", +"60cc1121": "transferNft(address,uint256)", "60cc2e8c": "maxGoalReached(uint256)", +"60cc5191": "ActivateRound(uint256,uint256)", +"60cc8796": "avoidBots(address)", "60cce8a5": "getValuableTokenAmount()", "60ccf311": "getPlayerMerits(address,uint256)", "60cd4ba4": "getTimeBasedBonus(uint256)", +"60cddd19": "setInterestModelAddr(address)", "60ce03d5": "totalTokenIssued()", +"60ce2e51": "prize_fund()", +"60cef5c4": "finishChangeGasPriceMax()", +"60cf30d1": "isEnabled(uint8)", "60cf7133": "testSetPermissions()", "60cfc624": "setLLV_edit_26(string)", "60cfd359": "mainSale()", +"60d05032": "houseChef()", "60d12fa0": "getExecutive()", +"60d1b93d": "Link(uint256,uint256)", "60d1c056": "usedPaymentSupply()", "60d1ce36": "collectibleIndexToApproved(uint256)", +"60d20c4c": "changeGFarming(address)", +"60d25071": "usingUniswap()", "60d26f01": "ownerTransferWei(address,uint256)", "60d2bee9": "addArtistSignature(uint256,bytes)", +"60d2f33d": "EXECUTE_TYPEHASH()", "60d3b4b0": "frwd()", "60d3e4c5": "isDistributionInProgress()", +"60d45945": "daibacInitialBalance()", +"60d46e43": "getStakeGenesisFeeBuy(address)", +"60d47088": "unfrozenStakeTime(address)", "60d4c79b": "burnOneBroGlobal(uint256)", +"60d4d23a": "childBalance(uint256,address,uint256)", "60d50130": "FineArtsToken(uint256,string,string)", +"60d50596": "allParties(uint256)", +"60d54d41": "addAdapter(address)", "60d586f8": "getValue1()", "60d60d2e": "countcomp()", "60d60dad": "mainSaleFirstEndDate()", "60d63425": "StakePool(string,string,uint8,uint256,uint256)", +"60d63a0f": "SET_MAX_CANDIDATES_ROLE()", +"60d6b0fa": "setInitialPaymentStatusOf(address,bool)", +"60d6c7cf": "getPermission(bytes32,address)", "60d704db": "getBank()", +"60d712fc": "setVaultStatus(address,bool)", +"60d7afbe": "COMPOUND_SUB_ADDRESS()", +"60d7c100": "getMinionGroup(bytes32)", +"60d7cef1": "enactProposal()", +"60d840f3": "getMultiplier2(uint256,uint256)", "60d8c2d2": "oneTokenWei()", +"60d8c466": "setOwnershipTransferContract()", "60d938dc": "isPresaleActive()", "60d975c9": "GG()", "60d9c823": "removeClientAuthority(address)", "60d9f0a8": "setNotarius(address)", +"60da3e83": "depositsPaused()", "60da4bd7": "batchCancelVoteForCandidate(address,address[],uint256[])", "60dab6be": "ActionAgon()", +"60dad0d2": "AffiliateDeployed(address,address,string,address)", +"60db2258": "updateTCContract(address)", +"60db5082": "airdrops(uint256)", +"60dbc5de": "cacheWallet()", +"60dc47cb": "percentForReferLv2()", +"60dc4810": "takeIncomeShare(uint256)", +"60dcb1a8": "IPO(uint256,uint256)", "60dccd89": "getContentAccount(uint256)", +"60dd1649": "_unsafeExecuteVote(uint256)", "60dd5f90": "getPolicy(string)", +"60dd7a5b": "tk_setTokenStatus(uint256,bool)", +"60dd9ffd": "getMaxProfitAndtoken(address[])", +"60ddd88d": "getParent(uint32)", "60ddd8e8": "sumICOStage2USD()", "60dddfb1": "votingWeightOf(address,uint256)", "60dde4c2": "queueFront()", +"60de1a9b": "lock(address,uint64,bytes,uint256,uint256,uint256)", "60de94d0": "setCCH_edit_11(string)", +"60df7f58": "createAndAddModules(address,bytes)", +"60df8a1f": "setTotalAmount(uint256)", +"60e02e13": "check_availability()", "60e036a0": "EtheremonAdventurePresale(uint256,uint256,uint256,uint256,uint256,uint256,address)", "60e092c6": "cancelOrder(address,address)", +"60e0acc7": "getExistingOrders1000(uint8,address,uint256)", +"60e0c49c": "waive(uint256)", +"60e0e72a": "pendingYvault(uint256,address)", "60e11e16": "Lira()", +"60e139c2": "contractByName(bytes32)", +"60e14b60": "UPDATE_FEES_ROLE()", "60e232a9": "changeVault(address)", +"60e24d95": "unholdTokens()", "60e2f6e8": "createProxyAndCall(bytes)", +"60e2fa51": "YMENCRBLPperETHUnit()", "60e30a02": "ChinaInvestmentExchangeToken(uint256,string,uint8,string)", +"60e38f6a": "getCollateralDetailsFromProx(address)", "60e393c6": "DEVELOPER2()", "60e39f73": "PotatoToken()", +"60e3f3fa": "castVote(string,int256)", "60e45f04": "UBSexToken()", +"60e4742d": "doThing(uint256)", "60e474e3": "_issue(address,uint256)", "60e4c1ac": "LogReceived(address,uint256)", +"60e4c4ce": "set(uint256,uint256,uint256,uint256,bool)", +"60e4f2e0": "getLatestStakerData(address)", "60e519c0": "computeMarginAmount()", "60e587f9": "goldReward()", +"60e59e7b": "compRateKeeperTimeframe()", +"60e5e9ef": "getCRBuffer()", "60e5ef3a": "getPrice(uint8,uint8)", +"60e65352": "getStakingAndAirdropAmount()", "60e65bb8": "startTrading(bool)", "60e68a25": "dash()", "60e6cfd8": "addKey(bytes32)", "60e6fb26": "resumePurchases()", "60e708b3": "balanceOfUnlockTokens(address)", +"60e71f2f": "rankTokens(uint256)", "60e794de": "stageDataStore(uint256)", "60e7a381": "o_aprendiz(uint256)", "60e805c5": "LogMigrationCanceled(address,address,address)", "60e85674": "checkLogin(address)", +"60e8ceed": "isKyberReserveX(address,address)", +"60e8d30c": "totalFstSold()", +"60e8ddb0": "getAllBrands()", +"60e96238": "tier1(uint256,uint256)", +"60e98f8b": "approve_52(address,uint256)", "60e99b77": "getProposalState(bytes32,bytes32)", +"60e9b1e4": "loteryCountLen(uint256)", "60e9c78b": "isNeedCheckTickets()", "60e9f17e": "CRDToken()", +"60e9f1dd": "setPoolValue(address,bytes32,uint256)", "60ea110b": "fromToken(uint256,uint256,uint256)", +"60ea59a2": "repayToken(address,address,uint256)", "60eabebd": "CreateAPP(address,uint256)", "60eb2826": "Badge()", +"60eb3aa7": "safeWithdrawalWPGO()", +"60eb3ff2": "addRewardDistribution(address,uint256)", +"60eba4f1": "repayAllDebtAndFreeETH(address,address,address,uint256,uint256)", "60ebb498": "adminCancelWithdrawal(address,uint160,string)", "60ec4f73": "starVoting(uint256,uint8)", +"60ecab60": "TokensPerEth3Updated(uint256)", +"60ed1a10": "dTesla()", +"60ed3dfc": "erc1155Rewards(address,uint256,address,uint256)", "60edc4c4": "timeOf(uint256)", +"60ee0afb": "hydron()", +"60ee1e87": "deploySenior()", "60ee66c9": "setSubcontinentDiscoveryVotingContract(address)", "60ef6037": "buySaddleShop(uint256)", +"60efe334": "claimable(address,uint256)", "60f01452": "updateEggs()", +"60f0a5ac": "removeRelayer(address)", "60f14509": "hodl()", +"60f17662": "maxApplyPledgeAmount(uint256)", "60f17941": "tokensGranted()", "60f1d148": "getMaximumBetAway()", +"60f1f75f": "setNextWeightBlockDelay(uint256)", "60f247b5": "confirmTransaction(uint256,address)", +"60f25f08": "approve_612(address,uint256)", "60f2b9af": "setDocumentData(string,string,string,string,string)", "60f2e1c0": "buyAndCrave(string)", +"60f2f07d": "changeRoundParameters(uint256,uint256,uint256,uint256)", "60f2f673": "setcoe(uint256)", +"60f34f09": "BSCserver()", "60f38d91": "endEarlyStage1()", +"60f39b48": "setArbChain(address)", +"60f48727": "leaveQuery(address,uint256)", +"60f51deb": "getUserIntraDepositAmount(address)", "60f5ac86": "campaignOpen()", "60f5d0d8": "ReloadKeys(uint256,uint256,uint256)", "60f61a4c": "buyUnitRaffleTicket(uint256)", @@ -55453,19 +101551,32 @@ "60f69dc0": "partnerReservedSum()", "60f6e71d": "KuendeToken()", "60f6fb2e": "chunkedWeiMultiple()", +"60f74caa": "getRewardBalane(address)", "60f75530": "countRemaining()", "60f75f3b": "closeMarketOrder(uint256)", +"60f81efe": "eventVestingTimer(uint256)", "60f8af90": "refundRound()", "60f8bbb8": "setPuppySports(address,address)", "60f8dab7": "userRefund()", "60f8e036": "manageStatus()", "60f96a8f": "parent()", +"60f9e80a": "GetInvestmentData(uint256)", +"60fa6767": "awardCzxp(address,uint256)", +"60fa8cc4": "getUserAssetRedeemed(address,address)", +"60fa96b3": "shortNoclaim(address,address,uint48,uint256,address)", +"60fa9a59": "pendingMG(uint256,address)", +"60fb3626": "earnedB(address)", "60fb4aa0": "founder4Wallet()", +"60fbd811": "getRegisteredPrimitives()", +"60fbf122": "pool9users(address)", +"60fca6c2": "miner2Index(uint256)", +"60fcfe70": "ownersWeis()", "60fd0668": "WAVcoin()", "60fd0e91": "mintlist(address[],uint256[])", "60fd1e66": "_movePendingToSetting(uint256,uint8)", "60fd902c": "gnosisToken()", "60fdd1c9": "setStakeRate(bytes32,uint256)", +"60fdd7c4": "GetPoolBaseData(uint256)", "60fdf8ff": "GameEnded(uint256,uint256,uint256)", "60fe103e": "logFeeWindowMinted(address,address,uint256)", "60fe136e": "BogdanoffCoin()", @@ -55474,131 +101585,215 @@ "60ff77cc": "ledgerRecordAdd(uint256,bytes32,uint256,string,uint256,bytes32,uint256)", "61001cd3": "testIsStarted()", "61004364": "depositTokenTo(address,address,uint256,uint256)", +"61004f39": "birthDate()", +"6100ad98": "SetLock(bool)", "6100b1e1": "resetDiscounts()", +"6100e557": "LIST_DGAS_AMOUNT()", "610103d9": "changeTxFee(uint256)", "61012e15": "phaseLength()", "6101a1f7": "unitStealingCapacity(uint256)", +"6101c166": "getStakerTotalEarnedStakeCommission(address)", "6101d16b": "getNumberOfSharesForAddress(uint256,address)", "6101d4f5": "payTheMan(uint256)", "6101f748": "FundsRegistryWalletConnector(address[],uint256)", +"61025502": "freezeEthAndToken(address,uint256,address,uint256)", "61025532": "permitBurning(bool)", "61027f78": "paying()", +"6102815d": "setD2AssetAddress(uint256,address)", "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])", +"6103341d": "pendingMlpCount()", "610358ae": "removePrivelegedWallet(address,address)", +"6103681a": "getVerificationStatus(address)", "61039bef": "releaseLocked(address)", "6103ae75": "AGENCY_ADDR()", +"6103b3b0": "LogDataSourceCallbackTwoInt(uint8,uint8)", "6103d70b": "withdrawPayments()", "6103d915": "Winners(uint256)", "6103dda6": "mutate(bytes32,bytes32)", +"610421b8": "stageLimits(uint256)", "6104464f": "previousPublishedVersion()", "61046d8b": "setRLCPerETH(uint256)", "61047ff4": "fibonacci(uint256)", "6104d75a": "deathData_f13()", +"6104ff54": "executeReward(string)", "61050bb7": "_fetchPaidOrdersForPayer(address)", "61053cd3": "tokensByUsdTx(string)", "6105b499": "artCopyright()", "6105c8af": "stubFunction(address,uint256)", +"610601f0": "lastTxs()", +"61060378": "isLicenseOwner(address)", "61064b48": "GetInvestorAddress()", "61064b5a": "processMarkings(address,uint256)", "61066dc3": "enableServiceMode()", "610757e4": "_wallet()", "6108b5ff": "channel_deposit_bugbounty_limit()", "6108bd0e": "sowCorn(address,uint8)", +"610936b9": "_burner()", +"61094e6c": "userApplyForWithdraw(uint256)", +"61095157": "nyaToWbnbRoute(uint256)", "61096820": "CETH()", +"61096af3": "testMultiResult(uint32)", "6109e255": "EtherSent(address,uint256)", "6109ff33": "BihuaToken()", "610af570": "voteOnDraft(bytes32,bool)", "610b16ab": "onTransferStack(address,uint256,uint256,uint256,uint256,uint256,bytes32)", "610b1abd": "lottery(uint256,uint256)", +"610b5925": "enableModule(address)", +"610bada5": "sendViaTransfer(uint256)", "610bafaa": "getTotalBPOfAddress(address)", "610bbebd": "Sensor()", "610be654": "closeContract()", +"610c0b05": "getConvertersByAnchors(address[])", "610c1d68": "addNtf(bytes32,uint256,address)", "610c3009": "badgeName()", +"610c867c": "pushAllFeeForToken(uint256)", "610cbcc7": "logHash(uint256)", +"610cd4ef": "finalizationCallback(uint256)", +"610cf109": "safeMultiplicationShouldRevert()", "610d006c": "getSourceConstraint(int256,uint256,uint256,uint256)", +"610d107e": "_batchMintOwnersMap(uint256)", "610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", +"610d808a": "constantinople()", "610da891": "debug3()", +"610db94e": "removeTransferAgent(address)", +"610dfa53": "EXPECTED_GAS()", +"610e386f": "aUniBaseBlock()", "610e9ed0": "postDisputeEth()", "610efc86": "RegisterMine(string,uint256)", +"610f7ff2": "ChangedThreshold(uint256)", "61101bed": "getTAmount(uint256,uint256)", "611067a1": "Rate7()", "6110e614": "duringSale(uint16)", "61116d1d": "masternodeDeregister()", "6111bd91": "cyberEntry2(address,bytes32)", +"6111be2e": "flux(bytes32,address,address,uint256)", "6111ca21": "enroll(address,uint256)", "6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", +"61121ccb": "addRfiLiquidityLGE(bool,uint256)", +"6112447d": "TileOfferAccepted(uint16,address,address,uint256,uint256)", +"61126d01": "resetStakeTimeDebug(address)", "61129a80": "getEarlyIncomeMul(uint256)", "6112c2ab": "summPartnerships()", "6112c7c9": "RedirectChanged(address,uint256)", "6112e8ac": "mint(address,uint256,uint8)", +"6112fe2e": "withdrawCollateral(uint256)", "6113611f": "stakeVoted_Eth()", "611408ff": "latestReleaseUrl()", +"6114730c": "all(uint256)", "6114dc0f": "lastFlight(address)", +"61150923": "usdtContract()", "61150aae": "ethusd()", +"6115e6d4": "reclaimableNow(uint256)", +"6115f4a5": "updateTokenAdapter(bytes32,address)", "61161aae": "bury()", "61162182": "storeDoc(string)", +"611649c1": "FAILURE_BLACKLIST_MESSAGE()", +"611693a9": "approveAppBundle(uint64,uint64)", "6116ec49": "VotingFinished(address,bool)", "6117525b": "initialClaesOffering()", "6117b80c": "getFixedAndShareFees()", "6117c9db": "retainedTokensVault()", +"6117d0a9": "claimIncome(address,uint256)", +"6118079a": "totalFreeAnimalsMax()", +"61180da6": "bulkUnWhitelistAccount(address[])", "61186e23": "getCountdownDate()", +"6118e0a9": "depositEthAndGetShares(address)", "611a20ae": "IotcToken(uint256,string,uint8,string)", +"611a3dff": "rsvEther()", +"611a74f1": "calcMsBankReward(address)", +"611b2fed": "mintToken(address,string,uint256)", "611b4095": "isWhitelisted()", +"611bbbf5": "registerNewUser(string,string,string)", "611c4662": "getPriceByDayIndex(uint16)", +"611c5974": "leg()", "611c7f50": "Core()", "611cb25f": "failStage()", +"611cb26a": "initialize(address,address,address,address,address,address[3],uint256[3])", "611cb6aa": "Vault(address,uint256,uint256,uint256)", +"611d48f2": "silverDollarAddress()", "611daa7e": "EmergencyBalanceReset(uint256)", +"611dd14f": "setPriceUpdateTerm(uint256)", +"611df3e0": "prod(uint256)", +"611df6ed": "myETH()", +"611e57cf": "airdropActivation(address,uint256,bytes)", +"611e68d4": "transferTreasurer(address)", "611eb470": "maximumICOCap()", +"611ed1ed": "extendedKeys(uint256)", "611ef452": "cancelDelivery(string)", "611efc09": "sale(address,uint256)", +"611f1931": "REFERRAL_AMOUNT()", "611f1fbe": "itsLikeChicago()", "611f64f9": "setTokenPrice(uint128)", "611f69de": "__proxy_motion(address,uint256,uint256,bytes)", +"611fb844": "updateDeviation(uint256)", +"611fbfc0": "approve_590(address,uint256)", "611fd026": "showApproveToken(address)", +"61200405": "WNFTE()", "61203265": "organizer()", +"61206f12": "artemRate()", "6120ada7": "setAuto(uint256)", "6120e125": "TUMIYUNTOKEN(uint256,string,uint8,string)", +"6120f0dc": "new_epoch(uint256,address[],address[])", "6120ffbc": "accountsPayableHeld()", +"612108df": "addWhiteLister(address)", "61211087": "firstAuctionsHighestBidder()", +"6121c207": "rcAddress()", "6121e522": "teleportPrice()", "612249fb": "communityContributionSupply()", +"6122f840": "getUintParameters(bytes8)", "6123218b": "registerPurchase(bytes32,address,uint256)", "61235639": "AcreToken(address,address)", +"61235c7b": "existsPool(address)", "6123c63f": "removeEmbassy(address)", "6123dfc3": "NoWinner(string)", +"6123ef3f": "setVaultsCore(address)", "6123f7ba": "onlyWithValidSignatureAndMethod(bytes)", "61241c28": "setTokenRate(uint256)", +"61242bdd": "accountStatus(address)", "612472fe": "toZT(uint256)", +"61247de3": "isExecutionOperator(address)", "6124a577": "whitelistController()", +"6124b40b": "DistributeMaximusFounder()", "6124e4e7": "dividendContract()", +"61252930": "verifiedRole(address)", "612544b3": "getReservedTokens(address)", +"612549f3": "offerGolForSaleToAddress(uint256,uint256,address)", +"6125514d": "covertDaiToBas(uint256)", +"6125f238": "setTrancheRedemptionPercentage(uint256,uint16)", "6125fd20": "voteForRefund(bool)", "6126cb99": "registerAsset(address,bytes32,bytes8,uint256,string,string,address[2],uint256[],bytes4[])", "6127421d": "tokenPayments(address)", +"61274d6c": "approve_54(address,uint256)", "6127a1ad": "_setRarityValue1(uint256)", "6127cfd9": "verify_withdraw()", "6127f246": "getActiveTasks()", "61282631": "tokenMintedSupply()", "612845fc": "claimQueen(uint8)", +"6128559e": "setperfomFee(uint256)", "612867c2": "calcRefund(bytes32)", +"612890f8": "pzsImpl()", "6128a4f3": "investorsLosses()", +"6128ea8e": "pendingBorshch(uint256,address)", "61296540": "rewarded_refresh()", "6129f25f": "setReferralPercent(uint256)", "612a711f": "SimpleERC20Token(uint256,address)", "612a7562": "setBountyRegistry(address)", +"612a9f76": "discardGovernanceShareVote()", "612ab238": "balanceOfOnForHolder(address)", +"612ac9df": "createBallot(address[],uint256)", "612acecc": "frozenForever()", "612bfae2": "description4()", "612c0968": "privateSaleRate()", "612c56fa": "submitVote(uint256,bool)", +"612c8f7f": "getUintVar(bytes32)", "612c9dea": "unreserveFor(address)", +"612cce89": "setBuybackNotifier(address,bool)", "612d6061": "getExpectedMinReturn(address,address,uint256)", "612d669e": "setMinStakingAmount(uint256)", +"612d8a15": "matchId2PartyId(uint256,uint256)", "612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", "612e731d": "TheGreatEtherRace(string)", "612eb5e7": "revokePermission(uint8,address)", @@ -55612,31 +101807,56 @@ "612ff19e": "PolicyPool(address)", "61301409": "minereum()", "61309e2a": "tryFinalizeProposal(uint256,address[],bool,int256)", +"6130aabf": "burnForParticipant(address,uint256)", "6130ced2": "UniCoin(uint256,string,string)", "6130d537": "createPartnerPlayer(uint256,uint256,uint256,address)", +"613107e6": "updateDevFundAddress(address)", "61314ee3": "managerAddressMap(address)", +"61316186": "updateOrgWallet(address)", +"61319de1": "getAnchorDate(bytes32)", +"61322d6d": "createToken(uint256,address,string,uint256,uint256)", +"61323ba6": "Kami()", +"613255ab": "maxFlashLoan(address)", "6132ca1a": "getResult(uint32,int8)", +"6132eba4": "requireSynthsActive(bytes32,bytes32)", +"61336a31": "pendingYaxis(uint256,address)", "6133a0eb": "PRE_SALE_300_ETH()", +"6133c27c": "getCumulativeTargetFunding()", +"6133cb1b": "SqueezeEnable(uint256)", +"6133f985": "initialize(address,address,bytes32)", "61347782": "getStakingRegistry()", +"6135711b": "add(uint256,address,address,uint256,uint256,uint256,bool,int256,int256,int256,uint112,address)", "6135a0ad": "getCallback(bytes32)", "6135e084": "myDividendTokens()", "6135f602": "contractPartTwo(uint256)", "61362b68": "reInitialize(address,address)", +"61368475": "BEP2_TOKEN_DECIMALS()", "613696eb": "burnCadvsLeftInRefunding()", +"6136a906": "getDonor(uint256)", +"6136ecdb": "retranslateToFeeRecipient(bytes32,address,uint256)", "6137412c": "monethaGateway()", "6137d670": "submitWhitelistRemoval(address[])", +"613861a7": "_computeDelegatorReward(bytes32,address,uint256,uint256)", "6138889b": "distribute(address[])", +"6138899a": "burnObject(address,uint128)", "61389e8b": "getTokensManual(address)", "6139a008": "numTokensLimit()", +"6139dbb9": "revokeConfirmation(address,uint256)", "6139faa6": "getAllTimes()", +"613a0048": "crv_token_addr()", "613a626b": "SnipCoin()", "613aa6e7": "ResetCardPriceAdmin()", +"613aad38": "logSendMemo(uint256,string)", +"613b7be0": "input(uint8[])", "613bc081": "ExternalAccountWalletConnector(address)", "613c36ae": "sendToStocks()", "613d8fcc": "oracleCount()", "613de7cb": "subWizard()", "613e0fb8": "reservationWallet()", "613e2de2": "getContractInfo(bytes32)", +"613e53a7": "reserveBalances()", +"613edbda": "TokenUnlocked(address,uint256)", +"613f2b7d": "taskSpecGasPriceCeil(address,bytes32)", "613f4594": "totalBetAmount()", "613f5b9f": "TokenContractAddress(address,address)", "613f5fe8": "MAX_USER_TOKENS_BALANCE()", @@ -55646,21 +101866,34 @@ "613fd998": "messageSpecial()", "613ff46f": "rewardPerNode()", "6140128f": "getTupleDetails()", +"6140133b": "setPriceBand(uint256)", "61402596": "setInitialSupply(uint256)", "6140af43": "preICOcollected()", "6140c54c": "createProxy(address)", "6140ca78": "setIsMiningOpen(bool)", "6141b54b": "FundsWithdrawn(uint256,address)", "6141d5d0": "CoffeeToken(address)", +"6141e1bb": "startSaleAPL(uint256,uint256,uint256,uint256,uint256)", +"61420e8c": "register(uint256,uint256,string)", "6142101a": "last_buyer()", "61425d79": "numRequesters()", "61426df4": "STCListing()", +"614293be": "setNako(string)", "6142e78f": "allowedAmountTransferedToPoolTotal()", "6142ff70": "createShipment(address,string,string,int256,int256,uint256,uint256)", "61432e81": "ConsumeGas(uint256)", +"61438a13": "withdrawDai(address,uint256)", "6143a80a": "isGameEnded(bytes32)", "6143abba": "totalCreatedOfType(uint256)", +"6143b580": "addonsOfNftByIndex(uint256,uint256)", +"6143bc3c": "swapBuyLevel(address,uint64)", "6144a8a1": "ZJFPrivate()", +"6144db36": "notAllowedAddresses(address)", +"61454542": "chainLinkMapping(string)", +"61455299": "sendwithgas(address,address,uint256,uint256)", +"61455567": "updateContract(address,string,string)", +"61459695": "depContractidToLottery(uint256)", +"6145a584": "pendingTcore(uint256,address)", "61461954": "execute()", "61463838": "getMyPlumbers()", "61463b64": "_hashToAscii(bytes32)", @@ -55670,120 +101903,212 @@ "614781f9": "atkBoss(uint256)", "6147a55c": "SwapPaused(uint256)", "6147bcb9": "getPVPState()", +"6147d166": "transferDirectTo(address)", +"6148b20b": "OnAddPlayer(address,address,uint256,uint256)", "6148fed5": "pollMap(uint256)", "614939b2": "allocateTokensForTeam()", "61493b97": "set_minimum_payment(uint256)", "61494714": "_createNewGame(uint64)", "61496b83": "endSplitAgreement()", "614984d1": "getUnicornGenByte(uint256,uint256)", +"6149ca12": "ClaimExplore(address,uint256,uint256,uint256,uint256)", +"6149d6fb": "LogProceedsIn(address,uint256)", +"6149e668": "surprisePot()", "614a31bf": "setII_R2(uint256)", +"614a568e": "_emit(uint256)", +"614a5887": "add_QUOTE(address)", +"614ad28a": "getUserLastRevenue(address)", "614af914": "_updateMargins()", "614b3e7f": "BCSToken()", +"614b800a": "PreviousEpochNotFinalizedError(uint256,uint256)", +"614b985e": "CrowdsaleCreated(address,uint256,uint256,uint256)", +"614b9f7e": "tokenDislike(address)", "614baf5c": "withdrawAffiliateRewards()", "614bbc33": "privateContribution(address,uint256)", +"614be035": "createKYCData(bytes32,bytes32,address)", "614be0c4": "getRemainShareAmountInternal(address)", +"614be261": "hasSigner(address)", +"614bfe2e": "_feePool()", +"614c0885": "stor2()", +"614c2241": "setNickname(string,address)", +"614c798b": "GPFK_XGP1_RATIO()", "614cb904": "isFinalizeAgent()", "614d08f8": "CONTRACT_NAME()", +"614d4171": "infoERC20(address)", "614d5f07": "stepForPrice()", +"614d63ab": "compenstaionCommission(uint256)", "614d85e1": "timeOut()", +"614ddc0c": "balanceOfCUSDT()", +"614f1eed": "participateWithAlias(string)", "614f2b3a": "_diff(uint256,uint256)", +"614f3364": "depositFor(address,uint256,uint256,uint256)", "614f3994": "SpeedyNetwork()", +"61500aa6": "archToken()", +"6150864c": "deploy(uint256,address,address,bytes)", +"6150ef6b": "getCurrentRoundNumber()", "61515334": "returnUserAccountAddress()", "615155dd": "getVesting(uint256)", "61523f2e": "changeEthReward(uint256)", +"615254d7": "swapFeeMax()", +"61534f2d": "addhouse(uint256,string)", "61537010": "Whitelisted(address,uint256,uint32)", +"61539de7": "rewardSetter()", +"6153a696": "CutoffTimestampChanged(address,uint256)", "6153b827": "BancorHandler(address)", +"6153c8c1": "setAddr(address,address,address)", +"61541ea0": "adminGenesis(address,address,address,address,address,address,address,address)", "6154274d": "deleteProposal(string)", "61543801": "currentPeriodIndex()", "6154c16f": "MineOwner(uint256)", +"6154c343": "getVestingEntry(address,uint256)", "6154db6e": "UroToken()", +"615543cb": "SYNTKN()", +"61556816": "ValidatorApprovalRemoved(address,uint256)", "61558349": "BitTeamToken()", +"6155c57a": "leaves(address)", +"6155d0ac": "increaseContribution()", +"6155e3de": "pauseWithdraw()", +"6155f0b2": "heroIdToLastRound(uint256)", "615664ba": "Market()", +"61568040": "testGetTokenAmount(uint256)", "6156e892": "checkOnlyContractOwner()", "61571ddd": "distributionFinishing()", +"61572ab9": "IsTransferEnable()", +"615737ef": "stablecoinAddress()", "6157c5ec": "getGoldInfoSku(address)", "615815f5": "releaseSecondUnlock()", "61584936": "sealedBids(bytes32)", "615878c8": "SkrumbleCandyToken()", "61591a7c": "personUpdateDOB(uint256,int256)", "61592b85": "getOrderDetails(uint32)", +"61599737": "getLatestSTOLUSD()", "615a4e0f": "ChangeMainAccount(address)", "615a604f": "setMarketer(address)", +"615a9346": "isRequestFutureVault(address)", "615acbae": "Freeze()", "615af5fb": "areTokensSended()", "615c2971": "Gametest()", +"615ce29e": "queue1Presence(address)", +"615db6e1": "a5()", "615dbebb": "setContract(address,address,address,address)", "615df83a": "remainderHolder()", "615dfa5c": "defaultParams()", +"615e5237": "checkpoint_gauge(address)", "615ea899": "changeHello(string)", "615ef639": "tokensClaimedAirdrop()", +"615f64fe": "getImplementations()", +"615f8d7f": "setAlpaPerBlock(uint256)", "615f9f1f": "testFailTransferNotEnabled()", "615fa416": "totalAtom()", +"615faf9f": "putsAssigned(bytes32)", +"615fb51b": "getAlias()", +"615feb48": "batchMintTokenPresale(address[],uint256[])", +"615ff3fc": "setCoreToken(address)", +"616006af": "AddSingleTokenInfo(address,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"61606860": "MetaEvidence(uint256,string)", "61616292": "STCBonus(uint256,uint256)", "6161eb18": "_burn(address,uint256)", +"61621c96": "INVESTOR_OFFERING_DOCUMENT_URL()", +"61625b6a": "_transferAdminship(address)", "61625c3a": "setLockByPass(address,bool)", "61632d4d": "institutionStageSetting()", "616361a7": "getArrUintField3()", "61638ed5": "depositFunds(uint256,uint256)", "61641bdc": "add(bytes32,address)", +"616451c5": "GetChangeRequestInfo(uint256)", +"616464f7": "setBSCFlipBalance(address,address,uint256)", +"61648d93": "pendingMushroom(uint256,address)", "61649472": "getPoolFreezePeriod()", +"6164e45d": "endEpoch(uint256)", "6165234c": "setPermissions(address,bool)", +"61652450": "_randomNumber()", "61665e40": "_premoveByValue(address)", "61669dfa": "setSpecialBonus(address,uint256)", +"61670d41": "ApproveAndCall(address,address,uint256,bytes)", +"61670d9e": "balanceOfKKCRV()", "61679629": "UniversalRewardProtocolToken()", "616852e9": "GoldBought(uint256,address,bytes32,string,string,bytes32,string,string,bool)", +"6168608b": "useCHI()", "61688a85": "Lwcoin()", "6168ba3c": "getWeiAggregateMayInvest()", "6168c9c3": "tosell(address,uint256,address,uint256,address,uint256,uint256)", +"6168d293": "getNodesCounter()", +"6168dfcf": "_requireRatesNotInvalid(bool)", +"616959e2": "_commonMaxChronos()", +"61697e3b": "maxOutLen()", "6169a7ed": "CashForHardwareReturn()", "616a0997": "TokenPurchase(address,address,uint8,uint256,uint256,uint256,uint256)", "616a3420": "verifySig(bytes32,bytes,bytes)", "616a6371": "SingleAccountRules(address)", +"616ac899": "vote(bytes,bool,bytes32,string)", +"616af934": "allocatedGooResearchSnapshots(uint256)", +"616b2221": "addLiquidityForAccount(address,address,uint256,address,uint256,bool)", +"616b25f4": "StartOptionsSelling()", "616b40e3": "totalInvest()", "616b59f6": "deleteBytes(bytes32)", "616b829d": "SwappedTokens(address,uint256,uint256)", "616c9469": "Finalized(address,uint256,uint256)", "616ceda7": "setJOYTokenAddress(address,address)", "616d1fab": "distributeToAlternateAddress(address,address)", +"616d2463": "nounce()", "616d5058": "userAccounts(uint256)", "616d50c3": "GCToken()", +"616db798": "getWindowId()", "616dcf0c": "calculateTotalSupply(uint256)", +"616df022": "checkDeviationFromScale()", "616e2fd0": "FortaToken()", +"616e6f13": "SendExactETH(uint256)", "616e9f8f": "getInterval(uint256)", +"616eb638": "clearETH()", "616eba4a": "getLocksrootIdentifier(address,address,bytes32)", +"616ed72f": "pendingGriffin(uint256,address)", "616f7bc9": "addAddressesSet(address)", +"616f865e": "temporaryBalances(address)", +"616fb415": "addErc20(address)", "616fbee7": "changeMinimumBet(uint256)", "616fca9b": "adopt(address)", "616fe92a": "emitFeePoolUpdated(address)", "616ffe83": "read(string)", +"61701fce": "retrieveArr()", +"61703da8": "pynthetixReceivedForEther(uint256)", "61708908": "prepareDisputeValid()", "6170a23e": "transferTech(address)", "6170b162": "join(bytes)", +"6170bc0e": "approve_400(address,uint256)", +"6170c4b1": "deposit(uint64,uint256)", +"6170eabb": "getStartTimes()", "6170feec": "getWinIndex(address,uint256)", "61711115": "RegistrationStatusChanged(address,bool)", "61718141": "totalSupplyIsLocked()", "61719785": "clockmaker()", "6171d7fc": "adjustTotalCoins(int32)", "61725795": "setAquaman(address)", +"61728f39": "keyHash()", +"6172983b": "lockedForGV(address)", "6172c0df": "updateDeposit(address,uint256,uint256)", "6172f071": "setIsAllTransfersLocked(bool)", "6173a70c": "initRandom(address)", +"6173c0b8": "getRequestIdByRequestQIndex(uint256)", "6173e456": "setAMLWhitelistedBulk(address[],bool[])", "617421c9": "calTripleRoom(uint256,uint256,uint256,bytes32)", +"6174bc63": "deactivatePlan(uint256)", "61751577": "addCET6(uint32,uint64,uint64,uint64,uint16,uint16,uint8,uint8,uint8)", "6175adee": "icoStandardPrice()", "6175bc9c": "preStartBlock()", "6175f9e2": "dragonHandler(uint256)", "617605a1": "Zillion()", "61764f59": "BitDATAToken()", +"617692dd": "mintedOf(address)", "6176caed": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,bool,uint256)", "617708dd": "getEscapeRequest(uint32,int256)", "61774704": "verifyBid(bytes32,bytes32)", "61775ee1": "onlyBouncerRemoveExtension(address)", "6177a197": "GoGoPay()", +"6177e37c": "revenueCommitmentBasisPoints()", "6177fa04": "setGenerateAddr(address)", "6178a8b1": "splitStarFunds()", "6178ac90": "_createCompanies(bytes32[],bytes32[])", +"6178c192": "pika(address,uint256)", "6178efee": "returnToken(uint256)", "617914be": "AUTH_CHANGEOWNEDOWNER()", "61794267": "oldExecuteDecayFunction(uint256,int256,int256,uint256,uint256)", @@ -55792,156 +102117,288 @@ "617a0951": "feeModifiers()", "617a2a15": "icoStartP2()", "617ac9a1": "SOSRcoinToken()", +"617aeb97": "withdrawEarn(uint256)", "617b293e": "getInvestStatus(uint256)", "617b390b": "approvePreSigned(bytes,address,uint256,uint256,uint256)", +"617b5a90": "devFee(uint256,uint256)", +"617b6212": "usersTokenFrozen(address)", +"617b87b1": "getPersonalStats(uint8,address)", "617bb8f5": "reject(uint32,uint32)", "617c2fb8": "sell_Exchg_Reg(uint256,uint256,address)", +"617cbe3b": "convertDate(uint256)", "617d2c84": "PRIMEx()", "617d3c47": "RemovalPriceSet(uint256)", "617d6bb4": "distributeEarningsBasedOnNumberOfCells(address,address)", +"617e3412": "getSignatureData(uint256)", "617e80b4": "getPlayerShipModelByIndex(address,uint256)", +"617ec5a3": "TIME_ROUND()", "617ee3a7": "MoonInc()", +"617f05a0": "LIQUIDATION_MARGIN()", "617f171f": "reopenDO()", +"617f2dff": "libID()", +"617f3e73": "registredInvestorTokens(uint256)", "617f4e3e": "set_got_refunded()", "617f8666": "testFailRestartNotOwner()", "617fba04": "getRecord(address)", "617fc592": "priceStages()", +"617fdd16": "feeTokenBalances(address)", +"61800fe0": "setKeepMph(uint256)", "61806891": "idVerification(address,address,uint256)", +"61808d6a": "_sellFeePercent()", +"61809150": "startChangeGasPriceMax(uint256)", +"6180a1ee": "mortgageAdjusts(address)", "6180e4ac": "getAvailableNumbersForRaz(uint256)", "6181d565": "getExpectAmount(uint256,uint256,uint256)", "6181fb0a": "ERC20(uint256)", +"6181fc99": "TEAM_RESERVED_PERCENT()", "618293ba": "_updateState(uint256,uint256)", "61829677": "claimdivs()", +"6182f9a4": "matrix(uint256)", "61836b0e": "lastUpdateEtherPrice()", +"6183785f": "player_howManyNuked(address)", "61837e41": "get_stats()", +"6183ae05": "calculateBonusFee(address)", "6183c5d6": "EthereumAI(address)", "618407e5": "tokenDrain()", "61840c69": "getSaleSold(uint256)", "61851416": "modifyCurrentVideoGamePrice(uint256,uint256)", "61851679": "Protecthor()", +"61853b42": "withdrawReserve(address,address)", "6185bb50": "AOC_available()", +"6185fc1c": "Factor()", +"61865abb": "rollIn(address,uint256)", +"61867419": "inactiveLP(address,bytes32)", "6186b3e3": "showMoneyTransfer(uint256)", "6186fe71": "CloseForecasting(uint16)", +"6187697d": "LEVEL_INCENTIVE(uint256)", +"61877815": "requestToComplete(uint256,uint256)", +"6187989b": "sepercentDev(uint256)", +"61879df3": "setUnstakingBP(uint256)", "6187ce34": "gameRandon2()", +"61880a92": "drawAmount()", "61886014": "combineDice(uint8,uint8)", "61888b40": "_percentSoldInPreICO()", +"6189168b": "maximalDepositStart()", "618943c3": "WhitelistItemChanged(address,bool,uint256,uint256)", "6189be15": "columnround(uint256,uint256)", "618a057a": "_bidFirstShip(uint256,address,address)", "618a1ec2": "getGoldDepositOfAddress(address,address)", +"618ada00": "tokenFromDistribution(uint256)", +"618ae03c": "METAL_BLOCK_REWARD_WEEKLY_MULTIPLIERS(uint256)", "618b870f": "setAmount2Claim(uint256)", "618c5772": "removeTransferableAddresses(address[])", +"618c797d": "vg()", "618cb85b": "GitCoinCrowdsale(uint256,uint256,address,address)", "618ce6d7": "setWhitelistedAddressMain(address[],bool)", "618de286": "addWhiteListMulti(address[])", +"618e24cf": "utilizationOfPool(address)", +"618e8ad3": "bancorTransferTokenProportion(address,address[],uint256,uint256)", +"618e9ce4": "functionalitiesToJSON()", "618ea1c4": "terra()", +"618f4574": "setdarkUSDAddress(address)", +"618f82e8": "setStoredAddress(address)", +"618f8bbb": "dislike(uint256)", "618fa9ce": "getBotBillingIndex(uint256,uint256)", "618fb1a6": "unsoldContract()", +"618fc38b": "setCurrentLevelCap(uint256)", +"618fdbb0": "tradeTokenForEtherWithFeeOnTransfer(address,uint256,uint256,uint256)", +"61900b71": "getGranella(string)", +"61902470": "cacheTokenAddress(address,uint256)", "61903971": "MajListAll()", "6190c931": "unclaimedCreditsWithdrawn()", "6190c9d5": "cycle()", +"6190d85b": "hello(uint256,uint256)", +"6190dd7a": "setDebtSnapshotStaleTime(uint256)", "6190e9ca": "authorizedTokenUsers(address,address)", "61919a08": "getWorks(bytes32)", +"6191c3ce": "drainEther(uint256)", +"6191e37b": "liqStrat()", "6191fe9d": "FFC()", +"6192346d": "autov2()", "61927adb": "setDelegatedFrom(address)", +"6192e69a": "multiClaim(address,uint256[],uint256[],bytes32[][])", "61930630": "tokenStore()", "61931f39": "zGetBothContractBalances()", +"619335f8": "investTypeOne(address)", +"619360df": "jackpotSeed()", "61936d0a": "Wings(address,address,address,address)", +"61937037": "landidNftAddress()", "619385bd": "newShare(address,uint256)", +"6193b396": "buyUniswap()", +"6193bff2": "LogErrorReportResolved(uint256,address,uint256)", +"619404cf": "setBeyondToken(address)", "619419d8": "setTopic(uint256,string)", "6194416b": "getProof(string,string,string)", "6194acb6": "_validateOrder(uint256,uint256,bytes32,address,uint256,uint256,uint256,uint256)", +"6195913f": "PermissionAdded(bytes4)", +"61959f85": "userID_Address(uint256)", "6195c713": "against_proposal()", "61962265": "PRESALE_MAXIMUM_FUNDING()", +"61962dd0": "_getExpectedRate(address,address,uint256,bool)", "6196ac5b": "RubidSupply()", +"6197114a": "subscribe(uint256,uint128,uint128,uint128,uint128,bool,bool)", "619792ba": "OwnershipGranted(address,address)", "6197aadd": "JANDA()", "6197bbab": "createRareAuction(uint256,string)", +"61983163": "bETH()", "61983863": "MintedTokenCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"61983c02": "DIVIDENDS_FRACTION()", "6198e339": "unlock(uint256)", "61990759": "maxRandom(uint256,address)", +"6199ac4a": "startProject(string,string,uint256,uint256,uint256,uint8)", "6199ca26": "AmbrosusSale()", "619a794d": "setAtomIsReady(uint256,uint32)", +"619adc15": "changeAdminFeeWallet(address)", +"619c218c": "buybacksOBELIX()", +"619c3b99": "addCashier(address)", "619c83ed": "completeTransfer(uint256)", "619c89fe": "changeForeignBridge(address)", "619caafa": "Reward(address,uint256)", "619cba1a": "requestEthereumChange(address,string)", +"619cc4ac": "changeAPR(uint256)", "619cec73": "DSHAckCoin()", "619cf5f9": "batchtransfer(address[],uint256[])", "619d2671": "acceptContract()", "619d3063": "getNftId(uint256,address,uint256)", "619d36ef": "DRAW()", "619d5194": "setLock(bool)", +"619de6d9": "ElectionOver()", +"619e4d0e": "log(bool,bool,uint256,bool)", "619e6e7c": "userWalletTokenBalances(address)", "619ebc4f": "GetTimeWeightedBet(uint256,uint256)", +"619ed1f8": "SURPLUS_AUCTION_TYPE()", +"619f0fbe": "updatePoolAccumalator(address)", +"619f3262": "withdrawHBZ(address)", "619f5e72": "takeExcess()", +"619f7cd0": "rewardPercentage(uint256)", "619fabfd": "addMultiplePublicSalesSpecialUser(address[])", "619fc641": "backup_exchangeStaStb(uint256,uint256)", +"619fdede": "erc721TokenContractToNFT(address)", "61a00f6d": "Ballot(bytes32[])", +"61a019c1": "PANews_award_2020()", +"61a04358": "getUnitPriceInUSD()", "61a07bc9": "AhihiToken(address,address)", "61a12160": "getPendingAddReserveData()", "61a1d8fa": "SchmeckleToken()", +"61a20689": "addUni(address)", "61a215e4": "Controller(address,address,address,address)", "61a227b6": "mtdAmount()", "61a23f42": "loadReferredInvestors(bytes32[],address[])", "61a2493a": "Jancok()", "61a255b5": "vote(string,string,uint256,bool)", "61a25f07": "lotteryFinished()", +"61a2ac39": "wbtcAddress()", "61a2d076": "isWhitelistOnlyPermissionSet()", +"61a30da6": "pullTrigger()", +"61a35bb1": "communityTaxVault()", "61a39946": "depositAgent(uint256,uint256,address[],uint256[],uint256)", "61a3a281": "deployDefaultVestingContract(address,uint256)", +"61a3be80": "UpgradeToLevel3FromDev()", +"61a5bff2": "dynamicPerShare()", "61a5c4bd": "updateTokenAmount(uint256)", "61a65433": "pot_total()", +"61a6592d": "aGCoinRate()", "61a65e2a": "discountSaleEnd()", "61a71303": "setMainSaleTLYperETH(uint256)", "61a76900": "decode(uint256)", +"61a7940e": "investorsCountLimit()", +"61a7a1bc": "setLGE(address)", "61a7b2f5": "transferFromIco(address,uint256)", +"61a7e80f": "approve_707(address,uint256)", +"61a80feb": "getUserBonusPending(address)", +"61a840a4": "mintM(uint256,address[])", +"61a8c8c4": "currentEpochStart()", +"61a92878": "PAPERSpent()", +"61a931ec": "ECTwistAdd(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"61a96314": "userCities(address,uint256)", +"61a9777f": "tokensForAddress(address)", +"61a9915a": "allTeamsScores(uint256)", "61a99c4b": "ethDeposits()", +"61aa00b5": "getBeneficiaryAllocations(address,uint256)", "61aa19d3": "icoAmountBonus1()", +"61aa7122": "setAllpool(address)", "61aa8d93": "processFee()", +"61aa9b0f": "teamToken4thReleased()", +"61aac4da": "factorOf(address)", "61ab8904": "updateStats(uint256,uint256,uint256)", +"61abc0e5": "toggleBuyBack(bool)", "61ad08b5": "setSupervisor(address,address)", "61ad487c": "PRESALE_PERCENTAGE_3()", +"61adcb7e": "lastUserOrderIdMap(address)", +"61ade426": "_removeAdmin(address)", "61adeef4": "setUUID4Bytes(bytes16)", +"61ae8b1a": "prm()", "61aebe59": "stopSell()", "61af1abd": "increasePriceAndDifficulty()", "61afc1d5": "IsActiveUser(address)", "61afd5ac": "denyAccess(address)", +"61b0a56e": "recoverTokens(address,uint256,address)", +"61b118c2": "godTierTokenId()", "61b121f5": "OneCoinOneBeerToken()", +"61b1752b": "_assertSenderIsOwner()", "61b1bd04": "HumanEvent(address,uint256,address,address)", "61b20d8c": "retrieveFunds()", +"61b2357f": "BoughtTokens(address,uint256)", "61b2bb37": "setHalfLifeTime(uint256)", +"61b2d42d": "adminClose()", "61b3516e": "MyCoins()", +"61b388d9": "totalRemainingStakedTokens()", +"61b39409": "ChangePriceSanityContract(address,address,address,address)", +"61b39d48": "CONTRACT_LP_GOLD_ERC20_TOKEN()", "61b3b8e3": "p_setInvestorFundPercent_out(uint256,uint256)", +"61b3eee0": "distributeTokensToDestinationWallet(address[],address)", +"61b4071e": "getMaxTotal()", +"61b447de": "checkLpWethValue(address,uint256)", "61b46d61": "buyHunterLicence()", +"61b4a537": "movingAverageDays()", +"61b6256d": "lessMassTransferWithFees(address[],uint256[])", "61b65fbe": "UpdateRank(address,uint256,uint256)", "61b6683c": "destroyedBots()", +"61b67ce0": "RevokeMintDelegate(address)", "61b69abd": "createProxy(address,bytes)", +"61b69fde": "isCanceled(bytes32)", +"61b6c00f": "updateDateUpdOfAPI(bytes32)", "61b6f889": "handleOffchainWhitelisted(address,bytes)", "61b7542d": "absMax(int256,int256)", "61b79ea4": "incentiveDistributionRound()", "61b7d7f4": "FiveBalanceToken()", "61b87f0d": "getTokenAddressIndex(address)", +"61b8b5dc": "stakingBalances(address)", "61b8ce8c": "nextId()", +"61b90541": "addSubmissionManually(address[],string[],string[])", "61b930ae": "ICOfundsReceiverAddress()", "61b94bc7": "LiverpoolvsRoma()", +"61b971d5": "createDumbKitty(address)", "61b9739a": "setPayTo(address)", "61b97435": "Register(address,bytes4,bytes18)", "61b98cb3": "buyShips(uint256,uint256,bool)", "61b9c6a3": "useBottle(address,uint256)", "61b9c9f4": "buySeat(string,string,string)", +"61b9d286": "DemocOwnerSet(bytes32,address)", "61b9e2bb": "proveInUnconfirmedBalances(bytes,bytes32,bytes32)", +"61b9e895": "commitRecord(string,string,uint256,string,bytes32)", +"61ba1508": "canLiquidate(bytes32)", "61ba228b": "LukSevenToken()", +"61ba29c6": "payWinner(string,address,uint256)", "61ba3377": "WatchLastTime()", "61ba89d4": "NSCDistributionContract()", +"61baa714": "BidAdded(uint256)", "61bb246c": "secondBonus()", +"61bb4e27": "rebalance(address,bytes32[],uint256[],bytes32[],uint256[])", +"61bb842d": "TTLAccounts(uint256)", "61bb9c52": "baseValue()", +"61bbe5cb": "MintTapSet(uint256,uint256)", "61bc1a49": "depositBalance()", "61bc221a": "counter()", "61bc6c57": "unauthoriseAddress(address)", "61bcbe6f": "goodluck(uint256)", +"61bced9d": "addNToken(address,address,uint256)", "61bd12e0": "FAILED_STATUS()", +"61bd22f1": "changeMemberContract(address)", +"61bd6725": "packCount()", "61bdc978": "unfreezeFrom(address,uint256)", +"61be4125": "changeShareContract(address)", +"61be647f": "file(address,address,address,bytes32,uint256)", "61be8456": "updateMarketData(address,address,uint256,uint256,uint256)", "61beb1d7": "createAuction(address,uint256,uint256,uint256)", "61bec256": "setContractActive(bool,bool)", @@ -55950,136 +102407,245 @@ "61bf2829": "RegistrationStatusChanged(address,bool,uint256,uint256,uint256,uint256)", "61bf49ee": "plots(uint256)", "61bf7692": "withdrawFoundationFunds()", +"61bf859e": "initializeVesting(address,address[],uint256,uint256[],uint256[],uint256[],uint256,uint256,address)", "61bf9c2a": "updatePoolContract()", "61bfdc5d": "PatentCoinPreICO(address,address)", "61bfe61b": "testAddUser(address,uint256)", "61bffe01": "addIdentities(bytes32[],bytes32[])", "61c003a7": "buyerNumDeals()", "61c028e7": "getTokenURI(address)", +"61c04f84": "nativeTokenAddress(address)", "61c083b9": "updateInflationRate()", +"61c1ec55": "balanceCompound()", "61c1f224": "Q8ECOIN()", +"61c21781": "setStartDate(address,address,uint256)", +"61c2c9b1": "lastItemObjectId()", "61c2c9c0": "getHowMuchUntilHardCap()", "61c2e349": "create_a_new_market(address,address,uint256,uint256,uint256)", +"61c3a7e6": "notes(uint256)", "61c3b7f1": "setCharityBeneficiary(address)", +"61c3e2d9": "stop_admin_mode()", +"61c3efb1": "FEE_RATE_BASE()", +"61c4adaa": "interestBaseUint()", "61c52660": "Said(address,bytes)", +"61c533b4": "locktime()", "61c5623d": "Vanadium()", "61c61309": "setTokenController(address,address)", "61c651b9": "oneQuarterInSeconds()", "61c6a8e4": "addMutagenFace(uint256,uint256)", "61c6bc82": "create(string,string,uint8,address)", +"61c6e08b": "getQoS()", "61c748c7": "TressexToken()", "61c76231": "resetBeneficiaryList()", "61c7eb81": "Millionaire()", +"61c83291": "onBondPurchase(address,uint256,uint256,uint256)", +"61c847ae": "multiTransferSingleAmount(address[],uint256)", +"61c8b577": "requestProof(address,bytes32,string,string)", "61c91c69": "webGiftLineTime()", "61c9559b": "get_arbits_presale_open()", "61c99b92": "msgsender()", +"61c9a20c": "treeSponsors(uint256)", +"61ca3ee1": "approve_335(address,uint256)", +"61ca493c": "removeMyProject()", "61cac1fb": "partnersReward()", +"61cb2175": "DAOShare()", "61cb5a01": "testString(string)", +"61cbbdee": "setMinBetValue(uint256)", "61cc576d": "evaluateOdds()", +"61cccff6": "MemberProclaimedInactive(uint8,uint8)", +"61cd014d": "updateFundingAddress(address)", "61cd5683": "testToByte(bytes)", +"61cd6df2": "afiController()", "61cd756e": "prevRegistry()", "61cd90b0": "revealY(uint256,uint256)", "61cdb1d7": "getByMesa(uint256,uint256,uint256)", "61cdd2dc": "rightAndRoles()", +"61ce802e": "_POOL_QUOTE_CAP_()", "61cec717": "changeCurrentCirculating(uint256)", +"61cf2213": "setMetaTxRelayer(address)", "61cf6d1c": "investeth2018()", +"61cf753b": "lastBlocktime()", "61d027b3": "treasury()", +"61d0acbb": "getDeadLine()", "61d0ad9e": "TransferFunds(uint256,uint256)", +"61d0e43a": "boost(address,uint256)", +"61d10bf0": "getConditionData(address,uint256,uint256,string)", "61d11318": "RedEnvelope()", +"61d12d7f": "eveReward(uint256,uint256,uint256,uint256,uint256,uint256)", "61d161ea": "unitsPerTransaction()", +"61d21875": "sellOrder(bytes32)", +"61d33880": "doubleSign(uint256,uint256)", +"61d3458f": "updateTransferability(bool)", "61d3ba8a": "addWhitelistAddresArray(address[])", "61d3d7a6": "isUpgradeAgent()", "61d3d902": "getPlayerReferrerID(uint256)", "61d43971": "updateGasCost()", +"61d47571": "SAI_TOKEN_ADDRESS()", "61d49ea8": "reveal(uint256,uint256,bytes32)", +"61d4e9a5": "vaiVault()", +"61d51bb7": "MAX_CLAIM_ETH()", "61d51df8": "SKYSWAP()", +"61d53176": "swapBusd(uint256)", "61d5593c": "calculatePoohSell(uint256)", +"61d57754": "baseBITX()", "61d585da": "state(bytes32)", +"61d5b144": "editMasterQuoteAsset(address)", +"61d5c23b": "slETH()", +"61d5f087": "addProtectedLiquidity(address,address,address,uint256,uint256,uint256,uint256,uint256)", "61d5f225": "minBetSize()", +"61d5f34f": "pendingGen(uint256,address)", "61d60021": "getCourseID(address,address)", "61d61998": "implementsERC721YC()", "61d689fa": "register(uint8)", "61d68b54": "requestConsent(address,address,uint256)", "61d6d385": "withdrawUnsold()", +"61d6f78a": "getLatestBlock()", +"61d737ce": "active_ico()", +"61d78262": "VAT()", +"61d789d3": "rewardTillNowPerReflection()", "61d7c713": "validPayDest()", +"61d7cb5e": "carmaToken()", +"61d7f381": "epochJuniorTokenPrice()", +"61d8008a": "DistributionCompleted(uint256,uint256,uint256)", +"61d807dc": "walletActivated(address)", "61d81aed": "exitBuyRequest(uint256)", +"61d92dd3": "createAnswer(string,string,uint256)", "61d942f3": "_removeLicenseTerms(bytes32,bytes32)", "61d97c41": "GetPartyRole(address,address)", +"61d9be69": "newAddNewOwnerAction(bytes32,address,address)", +"61d9e563": "addWhitelisted(address[],uint256[],uint256[])", +"61da0693": "setHas(bool)", "61da1439": "read(bytes32)", "61da46c4": "joinDraw(uint256)", +"61da57b5": "setFuse(address,bool)", "61db17ab": "_validatePurchase(uint256)", +"61db2445": "claimBoostsOf(uint256)", "61dbbc80": "LARGE_PURCHASE()", +"61dbbf51": "isManagerOrOwner()", +"61dbe432": "isStakingAllowed()", "61dbfc3f": "changeConfig(uint32,uint256,uint8)", "61dc648f": "LogExternal(uint256,address,bytes32)", "61dcd7ab": "createTime()", +"61dd35bb": "withdrawcSWOP()", "61dd8d13": "DexAlpha()", "61ddf923": "_getTokenAmount(address,uint256)", +"61de8389": "addWrappedVault(address)", +"61deff14": "TRANSACTION_PERCENT()", +"61df1a37": "clearArray(bool)", "61df46f6": "DatCoin()", "61df5c4d": "getEncounterResults(uint256,address)", +"61df8298": "changevanity(string)", +"61df9af9": "setLed(int8)", +"61dfa995": "rewardAdelPool()", "61dfacf2": "removeBuildingFromServer(uint256,uint8[10],uint8[10],uint8)", +"61dfcbc8": "EscrowManagerInitialized()", "61dfdae6": "setData(address)", +"61e0012a": "weeksSinceLPReleaseTilNow(uint256,address)", "61e01356": "randNonce()", "61e062a4": "_emitHardcapFinishedManually()", +"61e0b77f": "getPair(address,address,address)", "61e0f7a8": "swypeCode(address)", "61e1077d": "decreaseApprovalWithSender(address,address,uint256)", "61e1fe91": "setFreeDino(uint16)", +"61e20a1c": "principalOf(address)", "61e214d8": "isValidPurchase(uint256)", "61e25d23": "numActiveTranscoders()", +"61e283a0": "UpdateWhitelist(address,bool,uint256)", +"61e2dce8": "setNcardIndex(uint256,uint8,uint256,uint8)", "61e3564f": "approveAccount(address,bool)", "61e360b7": "maximumIndividualCap()", +"61e3891f": "nextDayAt()", +"61e3b183": "ILK_REGISTRY()", "61e3c944": "setUint(uint256,uint256)", "61e3f0a4": "setTimeBasedBonus(uint256[],uint256[],uint256[])", "61e42039": "priceString()", +"61e48b26": "FeesCollectedAll()", "61e49344": "buyinReturn(address)", "61e4a23a": "expireGame(uint256)", "61e4fd2b": "approveEscrow(address,uint256)", "61e539da": "testFailWrongAccountTransfers()", +"61e5a732": "WalletExecuteDelegateCallFailedError(address,address,bytes,bytes)", +"61e5de5b": "hashTokenTransferOrder(address,uint256,bytes32,uint256)", "61e5f5f2": "balEth()", "61e60550": "TransactionDisputed(uint256)", +"61e60b9d": "getMiningRealSpeed(uint256)", +"61e64202": "setFailedMessageDataHash(bytes32,bytes)", +"61e6982d": "renounceConsumer()", "61e6e66b": "DestroyedBlackFunds(address,uint256)", "61e76056": "denyByDelegate(bytes8,bytes8)", "61e7662b": "getAccountSpendingLimit(address)", +"61e78617": "questionIdCounter()", +"61e7f84c": "standalone()", +"61e80a9a": "getIlkPrice(bytes32)", +"61e8158f": "ownerUpdateUser(address,uint256,address,uint256,uint256)", +"61e8570a": "_burnPie(address,uint256)", "61e88f9a": "test_0_validOwner_construction()", "61e8ee04": "TOXTToken()", "61e91ea1": "getDataContractAddress()", +"61e98db8": "protocolBalance()", +"61e9a2d9": "calcBestSell(address,uint256,address[][])", +"61e9edb2": "_setupDecimals(uint8)", +"61ea53d0": "pricePercentagePerRound(uint256)", "61ea6ed7": "transferFromBase()", "61eb2e1a": "UNITStagesManager(bool,address)", "61eb3836": "getProjectStatus(address)", "61eb71c1": "setSellable(bool)", "61eba552": "getMetaData(uint256)", +"61eca19d": "_assertParamsNotInitialized()", +"61eca731": "getProfileLength(address)", "61ecc8b5": "isLogo(address)", +"61ed16d0": "AMOUNT_MINIMUM()", "61ed2094": "demicals()", "61ed373b": "comment(uint256,bytes32,bytes32)", "61ed8097": "SEOToken()", "61eda968": "cancelAssessment()", +"61edf276": "getAirdrop(uint256,address)", "61edfe6e": "p_setBankOfEthProfitPercent(uint256,uint256)", +"61ee1204": "settleIncrease(uint256,uint256)", +"61eea0ae": "cometsInGame()", +"61eeba3f": "pure_enum()", +"61eed2a9": "clients(address)", "61ef265b": "spaceAfterReturns()", "61ef669b": "dateTier2()", "61ef8d91": "setErc20Rate(string,uint256)", "61efc7db": "resolveDelegation(address,address)", "61efc807": "transferbatch(address[],uint256[])", +"61f00cef": "addRecord(uint256,address)", "61f00da2": "OMIVIAToken()", +"61f0ff25": "setup(uint256,uint256,uint256,uint256)", "61f127dd": "_price_tokn()", "61f134fa": "OZRealestatesToken()", +"61f13e00": "harvestStrategy(address)", "61f15236": "addHolder(address,uint256)", "61f17532": "tune(uint256,uint256)", "61f188de": "createTree(string,string)", "61f1c5ba": "vaultWallet()", "61f1d889": "setFlag(uint256,uint256)", +"61f2b87f": "getSellOrderList(address,uint256,uint256,uint256,uint256)", "61f2c8b0": "_addShareToNewOwner(address,uint256,uint256)", "61f2de50": "spawn(uint256,address)", "61f30408": "emitTimeAdded(uint256,uint256)", +"61f33d5a": "_depositCollateral(bytes32,address,address,address,uint256)", +"61f35cbb": "fullDataOf(uint256)", "61f37dff": "calculateIcoTokenAmount(uint256)", +"61f3afdc": "arb(address[],address[],address[],uint256[],uint256)", +"61f3be6a": "getTermRandomness(uint64)", "61f3c006": "setRoundMaxPerUser(uint256,uint256)", "61f3c62e": "remain()", "61f3cfb1": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256,string)", "61f43285": "gubberment()", +"61f49ed6": "forceApprove(address,address,uint256)", +"61f4bb80": "blang(uint8,address)", +"61f4fb50": "viewSaleAPL()", +"61f4fbd1": "whiteListCreators(address)", "61f529af": "initEthMultiplicator(address)", "61f54a79": "getNextUnsortedOffer(uint256)", +"61f59508": "_sz_lendelim(uint256)", "61f61867": "addSettingDeprecation(uint256,uint256,address,address,address)", "61f66dc4": "updateUserClaim(address,uint256)", "61f6b429": "myAvailableFunds()", "61f70161": "placeOrder(bytes16,address,address,uint256)", +"61f70242": "calculateShareRedeemAmount(uint256)", "61f7025f": "fetchBalanceByAddress(address[])", "61f721e8": "HGFCToken()", "61f76d67": "withdrawEtherToOwner()", @@ -56088,110 +102654,187 @@ "61f8e91a": "unitTestModifyStaker(uint256,uint256)", "61f9ca4d": "modifyGroup(uint256,string,string,string,uint256,uint256,uint256,uint256,uint256,bool,uint256)", "61f9e04d": "getWithdrawn(uint256)", +"61fabd05": "updateProposalMaxOperations(uint256)", "61faee9e": "noTransfer(address)", +"61faf143": "getAllTokensOf(address)", "61fba37d": "investorBalanceOf(address)", "61fbdf4e": "gameIsCalculated(uint256)", "61fc3790": "Monthprofitend()", "61fc65a0": "checkBirth(uint256)", "61fc703c": "Danku_demo()", +"61fcfd0c": "unlockXmasReward()", "61fd718f": "getOrderAllocatedToFundPool(uint256)", +"61fd78ce": "approveContractChange(bytes32)", "61fd8f1b": "sendTokensToCompany()", "61fda640": "ownerUpdateContractBalance(uint256,uint256)", "61fdfa9b": "returnDeed()", "61fe51a1": "rootAuthority()", "61fec3a4": "clearSponsorableJobApprovals(address,uint256,address[])", +"61fef560": "MultiInvestToken(address[],address[],uint256[],uint256,uint256)", "61ff715f": "deploy(uint256,bytes)", "61ff8191": "CirculationEnabled()", +"61ffa606": "RoundStarts(uint256,string)", +"620065c2": "B6(bytes)", "6200979e": "AngelInvestmentAddr()", "6201124f": "employeeDenyExerciseOptions()", "6201510a": "getPreSaleRank(address,uint256)", "62016083": "removeDestinationChain(bytes8)", "62017ebc": "left46(uint256)", +"620194b3": "getDollarAmountToManageByTokenId(uint256)", +"62019f12": "addNftMetaPrimary(address,uint256,uint256,uint256)", +"6201a40a": "orderFee(address,int256,uint256)", +"6201b838": "pendingSdt(uint256,address)", "6201d683": "createTokenUri(string)", "62024dce": "forceCrowdsaleRefund()", "62026229": "validateLand(address,int256[],int256[])", "6202745f": "specialPeacefulSkills(uint256)", "62027c1e": "changeCJTeamWallet(address)", +"62032c73": "NewRound()", "620346c6": "setStopReceive(bool)", +"6203ef28": "beforetransfer(uint256)", "6203f09f": "MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE()", "62040de3": "numberOfBoardMeetings()", "62040e50": "Bitscreen(bytes32,uint8,uint8,uint8,uint8,string)", +"620436d8": "comb()", "62043bd8": "DIVIDER()", +"6204c804": "onTopWithdrawFee()", +"62056a3c": "artemAccrued(address)", +"62057e04": "RoundIn(address,uint256,uint256,uint256,uint256,string)", "62059839": "_setOwner(uint256,address)", "62066eb3": "getMinimumAmount()", "6206880b": "contributorsLockdown()", "62074c31": "getProjectMaker(bytes32)", "62075af4": "giff(uint32,address)", +"62079b58": "setismFactory(address)", "6207c802": "getSubjectIdentById(uint256)", "6207d239": "privSaled()", +"6207d866": "gauge_relative_weight(address)", "620892bd": "NRB_address()", +"6208fc41": "mulScalarTruncateAddUInt(uint256,uint256,uint256)", +"62094529": "multisendBepad(address[])", +"6209a633": "GetAttributeCount(address,uint256)", +"6209d7e2": "communityInfo(uint256)", +"620a0674": "uVoteWeight()", "620a9c95": "BITSToken(uint256,string,uint8,string)", "620b0f23": "getMyAnthill()", "620b2731": "_getClientProviderUID(address)", "620b5cd2": "Crypto()", "620b75df": "portfolioManager()", +"620be067": "initialize(uint256,uint256,uint256,uint256,address,bytes32,address,uint256,uint256,uint256)", "620d025c": "roundFunds()", +"620d2939": "createContractColor(uint256,uint256,uint256,string)", +"620d540d": "awithdrawal(uint256)", +"620d9f0e": "_removeFromSupportedAssets(bytes32)", "620db609": "rubyToken()", "620eb8ee": "setDisbursementEndTime(uint256)", "620edb32": "allocatePrivateToken(address[],uint256[])", "620ffe99": "testFooUdate(uint256)", +"62102f3b": "mine_slots_7(uint256)", +"6210308c": "getFallbackOracle()", +"6210d62b": "nstExitCounter()", "6211db22": "querybalance1()", "621277cb": "hardCaps(uint256)", +"62129804": "isCollector(address)", "62133a6c": "getPlanetName(uint256)", "62135491": "distributeTokensToMembers(uint256,uint256)", +"62145036": "cSWOPPerBlock()", "62150b3f": "KaoPuToken(address,uint256)", +"6215558f": "pushReward(uint256,address)", +"62158099": "buyPackage()", "6215be77": "depositToken(uint256)", "6215f292": "updateBasePrice(uint256,uint256[],uint256[],uint16)", "62161235": "getRandomNumber(uint16,uint8,address)", +"6216b6e3": "getTrustee()", "6216bde5": "TokensRewarded(address,address,uint256,address,uint256,uint256)", +"6216c102": "setTradeMiningSpeedUpEndBlock(uint256)", "6217229b": "sellRate()", "62173282": "updateMVNRate(uint256)", +"62178478": "addBridgeTokenRewardReceivers(uint256)", "6217903f": "BNB_TOKEN_PRICE_NUM()", "62182636": "setParams(uint256[],uint256[])", +"62182b18": "LayDsVDVTheoCuLy()", +"62183fe4": "freezedList(address)", +"6218d400": "creatorStartRunningValidator(address,uint256)", "6218e5cd": "setGuardianVend(uint256,uint256)", "6218fd8b": "icoEndsAt()", "6219004d": "setPosttgeAddress(address)", +"62191e9c": "incrGStats(uint256,uint256)", +"621a1f74": "tokenIdToHash(uint256)", "621a25f8": "right66(uint256)", "621a61ac": "STATE_NOT_FINISHED()", "621ab11a": "bonustokn()", "621b23e2": "getOwner(uint32)", +"621ba1ba": "gasCycles()", "621bc379": "setReverseRate(address,int16)", "621bd8d7": "getPreviousReportingWindow()", +"621c2856": "LogNewOraclizeQuery(string)", "621c3275": "disembark(uint16,uint16,uint256)", "621d388c": "senderIsAdmin()", "621de5ac": "AUSBToken()", "621ded8b": "FinishCompetitionEvent(uint32)", "621df4be": "getCurrentElectionCycleBlock()", "621e9a45": "BAQToken()", +"621e9ec0": "verifyTx(uint256[2],uint256[2][2],uint256[2],uint256[2])", +"621eb093": "claimITokens()", +"621f199d": "payRefEventLog(address,address,uint256,uint256,uint256)", +"621f69bb": "sekus(address)", "621f7e45": "setPeriodRound(uint256)", "621fb946": "getLLV_edit_27()", +"621fd130": "get_deposit_count()", +"621fe543": "removeAllowCallers(address)", +"622051e5": "uniswapAddLiquidity1(uint256,uint256)", "62205bd8": "privatesaleFinalized()", +"6220a66d": "setDecentralandOperator(address,uint256)", "622104d9": "integration()", +"622152d9": "lineItemActivated(address)", "62219866": "getPercent(uint256,uint256)", +"6221a0f7": "backstopAdmin()", "6221c805": "supplyRound3()", "6221dc20": "HackableETH()", +"6221df58": "EtherWithdraw()", "6221e77b": "Logs(address,uint256,uint256)", "622235e6": "getPage(address[],uint256,uint256,bool)", "62228c17": "CTADevilleToken()", +"6222d88a": "getAsset(uint256,bytes32)", +"6223041f": "getVLTKEYBool(address)", +"62234634": "get_number_of_addrs()", +"62237749": "collateralFactorDenominator()", +"62239cd6": "withdrawOverTime(uint256)", +"6224163f": "_zapOut(address,uint256)", "62246c41": "setNickName(bytes32)", +"622472cb": "changeWithdrawFee(uint256,uint256,uint256,uint256)", +"6224f93e": "pendingFishing(bytes32)", "62251182": "_withdrawOwnerTokens()", +"62251752": "ERROR_REASON_BELOW_THRESHOLD()", +"62257470": "setTokenPaused(address,bool)", "6225924e": "_mint(bytes32)", "6225a8ad": "GetResult(uint256)", "6225b759": "setForceExecuteOfUsers(bool)", "6226bddb": "getProductStructById(uint256)", "6226d4b2": "addAddressToAdmin(address)", +"6227ab69": "yourStakedPEANUTS(address)", "6227ed6e": "createPerson(string,string,uint256,uint256,uint256)", +"6227ee67": "getUserInfo(address,address,uint256)", "6227fd3a": "firstItemWrong()", +"622837e0": "tokenOfOwnerByIndex(address)", +"62287b95": "bountyUsers(address)", +"62290f35": "vestTokensStartAtInt(address,uint256,uint256,uint256,uint256,uint256)", +"6229baf7": "setFounderToken(uint256)", "622a0a19": "playerBudget()", "622a10fd": "CORECoin()", "622a2d31": "setDistanceAndPrice(uint16,uint16)", +"622a69c6": "rTotal()", +"622a8ded": "IDidIt()", "622ac8ed": "countWishesAt(address)", "622ae7aa": "getDeployedTokens()", "622af809": "setMintContactAddress(address)", +"622b067f": "changeInterestsPerBlock(uint256)", "622b0b29": "StakeEvent(address,uint256,uint256,uint256)", "622b2a3c": "validDelegate(address,bytes32,address)", "622b6659": "doBigDrop(uint256,uint256,uint256,uint256)", +"622bba06": "onBoardDAI()", "622c77fe": "totalSupplyLocked2Y()", +"622ca425": "LockReleased(address,uint256)", "622d6c97": "ExecutionError(string)", "622d82df": "Buddha()", "622dda96": "chooseRandomNumber()", @@ -56200,43 +102843,91 @@ "622e88cb": "testBitsXorSuccess()", "622f9730": "forward(bytes,address,address,uint256,bytes,address,uint256)", "622fe39f": "getLoanData(uint256)", +"62303d3f": "addInfo(string,uint256,string,uint256)", +"62305cc2": "chainLinkUSDTAggregator(address)", +"6230882e": "sponsorIncentives(uint256,address,uint256)", +"62308b76": "createCustomToken(string,string,uint8,uint256,uint256)", +"6230a00c": "addToArrOfStructs1(string,uint256)", "6230ebda": "defrostFrozenTokens()", "6231775b": "miniGameId()", "623195b0": "setABI(bytes32,uint256,bytes)", +"6231ad99": "accETHReward(uint256)", +"62330556": "TotalLocked()", "623406d2": "setRecordContract(address,address)", +"623469fb": "ReputationScoreUpdated(bytes32,bytes32,bytes32,address,uint256,address,uint256)", +"62346c08": "requestDividendWorthyEntities(string)", +"6234dc21": "setMinDebt(uint256)", "6235e3a2": "getAddressCreatorById(bytes32)", "6235eef3": "getCurrentReportingWindow()", +"623602a7": "checkusersLP(address)", "62362cc2": "COIN_SUPPLY_TOTAL()", "623659b4": "doTransfer(address,address,uint256,uint256)", "623670b2": "sendTokensToPartner()", +"623697c9": "setLosingBoost(uint256)", +"6236ccf1": "bcashPerBlock()", +"6236db4d": "callProxyManager_getTokenPrice(uint256)", +"6237042b": "EventsList(uint256)", "62373537": "current_start_divholder()", +"623752c0": "transferrealestate(address,uint256,bytes)", "6237564c": "isDopeRaiderDistrictsCore()", +"6239bc36": "revokeVestingSchedule(address,uint256)", "6239f13d": "triggerSoftCap()", +"623a2583": "icoRates(uint256)", +"623a2987": "TokenStatus(address)", +"623a91ee": "slowWithdrawDelay()", +"623ac523": "getCurrentCrowRewardPerBlock()", +"623b3804": "TokenPurchase(address,address,uint256,uint256)", "623ba5c9": "callBackGasAmount()", +"623c2bca": "setUserClaimVotePausedOn(address)", +"623cc787": "getStockOwnerInfo(address)", "623d2295": "Minado(address,address)", "623d2b62": "getRequiredBetAmount(uint256)", "623d5652": "projectExists(address)", "623d5e56": "devolverBici()", +"623d6399": "DebugAction(bytes32,bool)", "623d96ed": "preDuration()", +"623d9ac9": "moloch()", +"623de5ad": "updateBidWithdrawalLockTime(uint256)", "623decaa": "unlockedTokensOf(address)", +"623e0d6a": "maxARGON()", "623e4fb8": "BBCToken()", +"623e5f5b": "firstCar(uint256)", +"623ef910": "updateStrongFee(uint256)", "623eff55": "tokensTransferred()", +"623effc0": "precent_of_reward_4()", +"623f4fa2": "transferBurnership(address)", +"623fea1b": "savedPresaleTokenBalance()", "62400e4c": "supplyOf(address)", "6240282c": "LiquidDemocracyControllerFactory(address)", +"62406110": "setOfferDAIFactor(uint256)", "6240c7aa": "COENXToken()", "6241bfd1": "Token(uint256)", +"6241c1d8": "addressTest()", +"6241d768": "assetRisks(address)", +"62425cf0": "setIsNeedStaked(bool)", +"6242cb31": "bwuifdnwkcdjcnw()", +"6242f49e": "mintNoDeposit(address,uint256,uint256[3],uint256,uint256,bytes32,bytes)", +"62435ef5": "SetRequiredTotal(uint256,uint256)", +"6243831d": "reStake(address,address,uint256,uint256,uint256)", +"6243b9d8": "charge_addresses_weth(uint256,address[])", +"6243d079": "dpassSoldCustV(address)", "6244326d": "humanityFund()", "6244b7ed": "unWhiteListInvestor(address)", +"62451be4": "gcu(address)", "624522f9": "accountFrozen(address)", "6245adff": "DirectlyDeposited(address,uint256)", "6245eb07": "setProvenance(address,uint256)", +"6245f084": "blockDeltaStartStage(uint256)", "62463079": "tier2End()", "62464576": "stage_2_add()", "62465f0a": "GenesisManager(address,address,address,address,uint256)", "62469353": "firstDepositTimestamp()", +"6246b28a": "bond_nonce()", +"6247077c": "liquidateAndSettleSAFE(address,address)", "6247c38f": "updateChargingRate(uint256)", "6247cfd9": "priceForKeys(uint256,uint256)", "6247f6f2": "whitelistToken(address)", +"6247f763": "uu()", "62486d42": "getTokensAmount()", "6248cf49": "_donationSupply()", "6248d6bf": "getOracleMetaData(address)", @@ -56245,26 +102936,45 @@ "62492e9d": "preIcoBonus()", "624964c3": "getBancorContractAddress()", "6249a5c7": "UnpauseEvent()", +"6249e93f": "usdLockAccountThreshold()", +"624a220f": "governanceSetExpansionRequirement(bool)", +"624a5ad9": "tokenManager0()", +"624a6cff": "loanIsAttractiveEnough(uint256)", +"624a7232": "getZrxVault()", "624a8bc3": "MyTotalWithdrew()", "624aba21": "_getWinCountWeight(uint256)", "624adc4c": "OwnershipTransferCompleted(address)", "624ae5c0": "rID_()", +"624b0d66": "pendingSeed(uint256,address)", +"624b4da3": "getTokensFromDistributorAndSend(address,uint256)", +"624b6631": "getInstantPoolInfo(uint256)", "624ba0a4": "maxImports()", "624bb58f": "marketingSupply()", "624bb8b3": "setCBaddress(address,address,address)", "624bd6c4": "depositToken(address,uint16,uint256)", +"624c0c91": "subPayees(bytes32,uint256)", "624c3dbd": "imageUploadComplete(uint256)", +"624c4d72": "superBurnFrom(address,uint256)", "624c5673": "USDollars()", +"624c86fc": "compareHashAndRecoverAddress(address,uint256[],uint256[],address,bytes32,bytes)", "624cc0a5": "teamMemberAtIndex(uint256)", "624d4309": "USBcoin()", "624dd6a9": "getInvestmentsByCountry(uint16)", "624de3d9": "InterfaceSignature_ERC721Optional()", +"624de725": "Number()", +"624dea1c": "GetIsPayble()", "624dee7c": "_release(address,address,uint256)", +"624e1fe5": "theFirst()", +"624e260f": "BORROW_RATE_MAX()", "624e3b36": "totalearners()", "624ecda9": "Sleep()", "624f011d": "doStop()", +"624f8dec": "currentCycleAddress()", +"624fbfdc": "echo(bytes)", +"624fcf3c": "sellArea(uint8,uint8,uint8,uint8,uint256)", "62502169": "sendCollateral(address,uint256)", "62502fe7": "getNameDigest(string)", +"62505d6c": "getRecent(uint64)", "6250bfa3": "createOrder(bytes32,bytes32,address)", "625101d5": "getOwnerMoney()", "625126ed": "shift_left(uint32,uint32)", @@ -56274,43 +102984,76 @@ "6252d651": "setForegroundColors(bytes3[])", "62531721": "getStack(uint256)", "6253367a": "queryChallenge(bytes32)", +"625387dc": "unixTime()", +"62548c7b": "setFlag()", +"6254a0ef": "buyPool2()", "6254add1": "PRIVATE_SALE_POOL()", "6254cf80": "setGameHostAddress(address)", +"6255f3df": "unSaaveTo(address,uint256)", "62564c48": "getProposals()", +"62564ed4": "getRecipientAddress(uint256,uint256,uint256)", "62568d83": "min_buy_block()", "62571cac": "getTodayOwnerName()", +"62574e30": "distance75(uint256)", +"625760a1": "transfer(uint256,uint256[])", +"625763c3": "BrokerImpChanged(address,address)", "625785bb": "productionCardIdRange()", +"6257fa97": "getBlockLast()", +"62581733": "openStaking()", "62581b79": "CubaazCoin()", "6258683e": "devMiningRewardTransfer(address,uint256)", +"62589100": "setSubscriber(address,uint256,string,string)", "6258d524": "saveEther()", "62598ae6": "PaymentExpected(bytes8)", "62599964": "usesThem()", "625a6726": "fixClock(bytes32,uint64)", +"625aa555": "undelegationWaitTime()", "625adaf2": "setTokens(address[])", "625b666c": "Luxury()", "625b8e60": "_redeemByPartition(bytes32,address,address,uint256,bytes,bytes)", "625bc37b": "releaseTeamTokensAfter12Months()", "625becbc": "showLockState(address)", +"625c3a5f": "changeMaximumBetAmount(uint8)", "625cbb23": "setWhiteListAddresses(address)", +"625cbfae": "recipientWhitelistEnabled()", "625cc465": "baseDonation()", "625cfc46": "sellRateZeroQuantity(uint256)", "625d1fe2": "viewSecondBatchOfClauses()", +"625d2055": "shout(string)", +"625d3fa6": "bsg_rewards()", +"625e7fc6": "setResults(address,uint256,int256)", +"625f556b": "BoughtStar(address,uint256,uint8)", "625fcce7": "dealer_cut()", "625fe9ec": "updateCrowdsale(uint256,uint256,uint256,uint256,uint256)", +"625fed98": "Lock(address,uint256)", +"626008f9": "getLot2(uint32)", +"6260412f": "ArtworkCreated(uint256,string,address,uint256)", "6260f55b": "ETH_USD()", "62612c6d": "PatronTwoWithdrawal()", "62614ae6": "BNT_CONVERTER()", "6261c662": "bonusStart()", "626263c5": "calculateEthToChargcoin(uint256)", +"62628e8e": "getDepositTokenPool(address,address,uint256)", +"62631ea2": "buyWithSupportedToken(address,uint256,uint256,uint256)", "626340b2": "block0()", +"626381a0": "CHILD_CHAIN_ID()", +"6263a27f": "numDIDRequiredToTaskRewardVoteParameterTitle()", "626452df": "test_feePoolShare_noClaimableStake()", +"6264f698": "executorProvidersCount(address)", +"626516e3": "Unlocked(address,uint256,uint64)", +"6265ed18": "_whiteListPurchases(address)", +"6266124e": "setOpenPositionFee(uint16)", +"62664080": "airdrop(uint64,address[])", +"62664a96": "removeLiquidity(uint256,uint256,address,uint256)", "6266e135": "Gmt()", +"626732ed": "RemoveLiquidityExtactAmountOut(address,uint256,uint256)", "62674e93": "getStepFunctionData(address,uint256,uint256)", "62676d78": "RANGEEND_8()", "6267967b": "batchReservedTokenAllocation(address[],uint256[])", "6267c456": "organizer7()", "6268a0cd": "stakeSDC(address,address,uint256)", "6268e921": "acceptGame()", +"626930ab": "NewUser(address,string,bytes32)", "6269420e": "seedAndPresaleTokenIssuedTotal()", "62694b68": "lastSignedBlockNumber()", "62695eae": "allowedTransfer(address)", @@ -56319,120 +103062,225 @@ "6269f9fc": "getGameId(string,string,uint16,uint64)", "626a0e1c": "addSoundEffect(uint256,uint256[])", "626a413a": "activateBounty(uint256,uint256)", +"626a6895": "getMinCap()", +"626a9198": "fixRate(address)", +"626ad88a": "deprecated_getStakerAllUnlockableStakedTokens(address)", "626b1070": "beneficiaryDeposit(uint256)", "626be567": "totalToken()", "626c0a45": "stock(uint16,uint16,address,uint256)", +"626c641d": "blockInADay()", "626c6bc6": "ETO()", +"626cb3c5": "vow()", "626d0358": "setTokenDefaultPartitions(bytes32[])", "626d4a36": "right55(uint256)", "626d666c": "theDao()", +"626e1ae7": "getTotalFees()", "626e4675": "directorLockDays()", "626e8fd3": "setBonusDate1(uint256)", "626ebe39": "toggleReceiveEth()", +"626f554a": "claimReferBenefit(string,address)", "626f9e20": "calculateMaxEthIssued()", "626fc458": "finalizeTrade(address,uint256,address,uint256,uint256)", "626fd353": "getSelection(uint256)", "627045bf": "changeActiveNameIndexTo(uint256)", "6270b780": "DebitClient(address)", +"6270cd18": "totalEarnedTokens(address)", "62714a14": "getPhone(address)", "62715547": "castVote(bytes32[])", +"62718b9a": "DrawUserWhileAddingAnother(string)", "62721129": "getMultiSigWallet()", +"6272a2b4": "allVals(uint256)", +"6272c8ba": "BrokerFeeDistrubution(uint256,address,uint256,uint256,address,uint256)", +"62730518": "update(string,string,string,string,string,string,uint64)", "6273106a": "payoutPool()", +"62731a1a": "youPriceOfPriIEO()", "62731ff1": "onDeposit(address,address,uint256,uint256)", +"62732746": "confirmRedemptionIntent(bytes32,address,uint256,address,uint256,uint256,bytes32)", "62735618": "finalizedCapital()", +"62738129": "totalCountries()", "62738998": "getInt()", +"6273d7e3": "garmentCollection()", "62744fee": "PallyCoin()", "6274a35c": "team_total_lock_days()", +"6274c3e3": "ICOClosed()", "6274ca4b": "setWeiPerUSDinTGE(uint256)", +"6274d205": "setConvergenceWindow(uint256)", "62751a06": "SFT_PER_ETH_FIRST_EARLY_BIRD_RATE()", "6275448e": "batchApprove(address,uint32[])", "62754563": "CelebsParty()", +"62757215": "mulSig()", +"6275865c": "hasNyanClaimStarted()", +"6275c9e6": "retrieveExpiredFunds(string,uint256)", "62765eb7": "receiveApproval(address,uint256,address,string)", +"62769676": "setAdd(address)", "6276b368": "rateOfCharging(address)", "62770252": "needsFuneral(uint256)", "62773951": "TrustReso(uint256[3],address,address,address[])", "627749e6": "closeTime()", +"62775223": "getRewardTokens(address,uint256)", +"62777662": "currentName()", "62779e15": "payFees()", +"62784793": "digitalPrintImageContract()", +"62789ee5": "getInventoryBalance(address)", +"627942da": "isTokenMappedAndGetPredicate(address)", "62797ef5": "dayPotHighscore()", "627992c7": "VULCAN_POD_MAX_CARGO()", "627a326b": "getBytes32Slice(bytes,uint256)", "627a3311": "QvoltaToken(address)", +"627a4e7d": "withdrawBidForMask(uint256)", +"627a91d9": "lastTXtime(address)", +"627aa5ff": "withdrawETHOwner(uint256)", "627aa6d2": "buyAndTransfer(address,address,bytes,uint8)", "627adaa6": "revealMulti(uint256[],uint256[],uint256[],bool[],bytes32[])", "627b3d9a": "BTCAUC()", +"627b4a9c": "withdrawalEther()", +"627bde92": "Counterparty()", "627c2516": "WizardsvsCeltics()", "627c2d1e": "getTX()", "627c34ad": "removeSubscriber(address)", +"627c55f6": "removeDapp(address)", "627c81ff": "erc20ContractByIndex(uint256,uint256)", +"627c96ca": "borrowedInUnderlying()", +"627cf930": "part()", "627d6f9f": "get_multiple(uint256,uint256)", "627e64d2": "getQuote(address,uint64)", "627e667b": "StandardToken(address,uint256)", +"627eb0d4": "sell(address,uint256,address,uint256)", "627eb56c": "setMaxContributionPhase1(uint256)", +"627ec052": "getHistoryWorkingRate()", "627f09c3": "setConfiguration(address)", "627f22fe": "GiftMetadata(uint256)", +"627f3e71": "getFirstAdminActionHash(address,address)", "627f47c6": "transferWithLock(address,uint256,uint256[])", +"627f66c6": "setVault(address,bool)", "627fd3bb": "addCbAddress(address,bytes1)", +"62800bd8": "endSubscriptionSubscriber(address,bytes32)", "6280382a": "cancelTrade(address,uint256,address,uint256,uint256)", "62806296": "transfer_coins(address,uint256)", "6280b0bb": "batchRegularTransfer(bytes32[],bytes32[])", +"6280f249": "dNyanV2LPStaked(address,uint256)", +"6281133d": "verify(address,uint256,uint256,bytes,bytes32,bytes32,uint8)", +"6281c018": "placeFreespinBet(uint256,bytes6)", +"6281efa4": "tryMul(uint256,uint256)", +"62822e43": "purchaseTokenIs0()", +"62828d10": "_getEth2DaiAddress()", "6283051f": "setOraclizeQuery(string)", "6283440b": "wingsTokensReserv()", +"62834462": "getImageHash(uint256)", "62838d8b": "getLastAddress(bytes32)", "628392bd": "bonusPhase1()", +"62846f8c": "getSwapProxy()", "62848f36": "tokenRate30()", "6284ae41": "exitFee()", +"6284f02d": "updateOrca(uint256)", "6284fd22": "getMyPubKey(bytes32)", "62850233": "transferWithDividends(address,uint256)", +"62852bbd": "createLease(uint256,uint256,uint256,string,uint256,bool,uint256)", "6285a259": "calculateTokensEnabledOne(address,uint256)", +"6285b5a2": "updateValidatorDataContract(address)", "6285d703": "NERO()", +"6286065a": "HAREMPurchase(uint256)", +"6286248c": "forceEarn(address)", +"62866d65": "createFeeToken()", +"62866f83": "synthetixEscrow()", +"628746e3": "getSecondChoiceVotes(uint256,address,uint256)", +"6287c20e": "nativeInvestors(address)", +"6287fe21": "govTokensLastBalances(address)", "6288020f": "endThirdWeekICO()", +"628806ef": "acceptAdmin(address)", +"62884c0d": "removePrincipleDepositor(address)", +"62889cdd": "TransferAssetOwner(address,address)", "6288a63c": "NotaryChain(uint256)", "6288a9a3": "maxUserContribution()", "62890063": "WhitePrivilegeToken()", "62891b5d": "multiAccessChangeRequirement(uint256)", +"6289af53": "SetRecipient(address)", +"6289fa61": "mintToken(uint256,address,string,string)", "6289fdbe": "VenomToken()", "628a01ce": "stakingMintRate()", +"628a7319": "remainingIssuableNomins(address,bytes4)", +"628b04c5": "jgagexchange()", +"628b1a53": "disableChangingAccountants()", +"628b3cb5": "_encode_sol_uint32(uint32,uint256,bytes)", "628b75bf": "slashDownRequest(uint256,address,uint256,bytes32)", "628c225c": "roomNight(uint256)", "628c2778": "DEXToken()", "628c866e": "setCurrentActiveGameID(uint256)", +"628d1c95": "Boss1()", "628d5ef1": "setWeiUsdRate(uint256)", +"628d6cba": "Swapout(uint256,address)", "628da35e": "get_termAmount(uint256)", "628dda8d": "VDGToken()", +"628e46cb": "resetFallbackMechanismDate()", "628e50b5": "brokerFee()", "628e7a38": "_initializeVesting(address,uint256,bool)", "628eaa88": "GeocashToken(uint256,uint256,uint256,address)", "628ee84f": "in_dispute_phase()", +"628f1518": "bombDetonated()", +"628fef21": "poolTotalSupply(uint256)", +"629058ca": "getTrack(uint256)", +"62906fec": "newERC20TokenBank(string,address,address,address)", +"6290865d": "compliance()", "6290a009": "bids_sorted_count()", +"6290bd96": "fundsExpire(address)", +"62910905": "farmingEnabled()", +"62914849": "setCreateFee(uint256)", +"62915564": "purchaseWithSilverDollar(address,uint256)", +"6291e026": "trustedContractList(address)", +"62927cd5": "ClonesDeployed(address,uint256)", +"62928748": "stakingRewardVault()", +"6292fabf": "newClaimsGroup(address,uint256,bytes32,uint256,string)", "62932301": "importer()", "62935a98": "getContractDataSK()", +"62939074": "getCumulativeRewardAtEpochRaw(bytes32,uint256)", "6293a989": "TRONVSupply()", "6293b5bb": "presaleMaxEtherCap()", +"6293c702": "removeValidPluginInstance(address)", +"6293e9ed": "indexOfPayee()", "6293fd1e": "payBack(address)", "6294f858": "distributeFinancialAward(address[],uint256[])", +"6295a2f4": "tradeValue()", "6295c61a": "transferItem(address,address,uint256)", +"629615df": "callbackCrossFork(uint64,uint256,bytes32)", +"62963803": "addVaultAndStrategy(address,address,address)", +"62977e2c": "setTypeCap(uint32)", "6297c16c": "deleteToken(uint256)", "6297dbf4": "existsMesa(uint256)", +"6298179e": "isRentDue2(uint256)", "62981b18": "deployBallot(bytes32,bytes32,bytes32,uint64[2],bool[2])", +"62985155": "cecilTokenLogic()", "62985882": "VSTA(string,string,uint8,uint256)", "62985b87": "NebuliToken()", "62986e27": "Canary(address,uint16)", "629873b2": "createRequestAsPayeeAction(address[],address[],int256[],address,address,string)", "6298c93a": "usdCap()", +"6298ca4f": "Activate(bool)", +"6298e902": "addProtectedToken(address)", +"629919e9": "kittyRounds_(uint256,uint256)", +"62995d22": "updateAuthorizedContract(address)", "6299a6ef": "update(int256)", "6299f8cf": "stop(uint256)", +"629a2aa0": "sChicagoChunk()", +"629a857f": "Import(address,uint256,uint256)", "629a9ce7": "coreTeamUnlockedAt()", "629ad124": "chancesBought()", "629aef56": "QuintToken(address)", "629b656e": "PryzeToken()", +"629b7d73": "getGene(uint256,uint256)", +"629b8753": "makeMemChange1(uint256,uint256,uint256)", "629b9cb1": "takeProjectBonus(address,uint256)", "629bc0b4": "getPlayerPayout(uint256)", "629bf9a8": "updateMinMaxBetPrice(uint256,uint256)", "629c1b67": "SoftCapReached()", "629c37c2": "HSShopSaleFee()", +"629c52a9": "uniqueId()", +"629c577e": "feeDivisors()", +"629c5ffc": "PositionClosedByDutchAuction(bytes32,address,address,uint256,uint256,uint256)", "629cefee": "adjustTiming(uint256,uint256)", "629d0f2f": "teamd()", +"629d2f34": "calcId(uint128,address,address,address,address,address,uint256,uint64,bytes)", "629d93db": "removePromo(bytes32)", +"629e0151": "apy2(address,uint256)", "629e89a0": "setMinDai(uint256)", "629f1486": "YoonContract()", "629f4028": "getVoteNum(address)", @@ -56440,48 +103288,79 @@ "629fb53d": "getOrderbookLength()", "62a09477": "changeOwner()", "62a0b56b": "testUnset()", +"62a0f631": "start(address,address,address)", "62a1029c": "YUPIE_PER_ETH_PRE_SALE()", "62a144d9": "safeMod(uint256,uint256)", +"62a16e62": "addData(uint32,uint16,uint64,bytes32)", "62a17a46": "AXPCoin()", +"62a2a47c": "FEE_COLLECTOR_ROLE()", "62a31c4a": "dynamicLength(bytes4,bytes)", +"62a33811": "withdraw(string,address,uint256,address)", "62a36a54": "Application()", +"62a38b2d": "_setOperatorAddress(address)", "62a39ff7": "setShareHolder(address)", +"62a3b176": "unWrapMultipleTokens(uint256[],uint256[])", "62a44fe9": "has_voted()", "62a49ae3": "depositTokensFor(address,uint256,address)", +"62a4b0a9": "userBalance(address,address)", "62a4b230": "setLockedRatio(uint256)", "62a4be31": "buyTokensByProxy(address)", +"62a4c393": "closeFuturesPositionForUser(bytes32,bool,address,address)", "62a4cd14": "endFunding(uint256)", "62a51eee": "move(uint80,uint80)", "62a52ed6": "set_price(bytes12,uint256)", +"62a581a6": "OwnerChang(address,address,uint256)", "62a59ade": "distributePuppyCoinCLarge(address[])", "62a5af3b": "freeze()", +"62a5bcd8": "getTokens(address,bytes32[],uint256[2])", +"62a6609d": "lastActionTimestamp(uint256,address)", +"62a7105d": "RegistrarRemoved(uint256,address)", "62a76ce1": "accrueAdvisorsTokens(address,address,uint256)", "62a7c5a6": "nextWithdrawDayFoundation()", +"62a7dab5": "setRewardFeeDistributor(address)", "62a80b42": "newToken(string,address)", "62a87466": "STATE_DONATION_ROUND_1()", +"62a945d1": "requestLoan(uint256[3])", "62a974b6": "vote01NoCount()", +"62a9ba14": "TotalActiveStakeAmount()", +"62aa2d0d": "checkInvestorHoldingToken(address)", "62aa9a00": "enehtoken()", "62aabb9e": "SafeToken()", "62aac84d": "setHaltSale(bool)", +"62aad5c2": "getGlobalDepositEXR()", "62aaf089": "getExchangeRate(uint256)", "62ab1216": "updateWithOracle()", "62ab8cc1": "howMany()", +"62ab9386": "tokenIssuedTech()", "62abb560": "transferSuperOwnership(address)", "62abda69": "totalIssuanceDebt()", +"62ac302d": "setGenomeContractAddress(address)", "62ac6115": "updateRequireKYC(bool)", "62aca822": "setNation(address)", +"62acb7f9": "REIGAI02()", "62ad1b83": "operatorSend(address,address,uint256,bytes,bytes)", "62ad9bda": "newProvider(address,string,bytes32,uint256)", +"62adb2e1": "diseaseproposals(bytes32,uint256)", "62addeed": "HumanX()", +"62adfe7a": "setAssetOracle(address,address)", +"62ae294c": "DelFromVestMap(address)", +"62ae3721": "isnotarise(address)", "62ae4d29": "OBIMOLOGIA()", "62aecc47": "totalBondSupply_BULL()", "62aee544": "ADVISOR_SHARE()", +"62af2ae4": "roadRealtyTransferOwnership(uint256,uint256,uint8,address,address)", +"62afb90e": "getCompoundPrice(uint256)", +"62afd4b0": "SUM_TREE_KEY()", "62afd64a": "unpaidPercentage(bytes32)", "62aff4d5": "commitPeriodStartedTimestamp(bytes32)", "62b08e70": "setVotingContractAddress(address)", "62b0ae87": "pack(bytes)", +"62b12feb": "batchSet(bytes32[],uint256[])", +"62b21ad7": "getElementInArrayType(uint8,uint64,uint256)", "62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", "62b26f95": "totalFish()", +"62b2b778": "f1(address,address,address)", +"62b348c3": "changeModuleBudget(address,uint256,bool)", "62b3b833": "createCoupon(string)", "62b40489": "businessPlannedPeriodEndTimestamp()", "62b40918": "addPersonalCaps(address[],uint256)", @@ -56489,189 +103368,373 @@ "62b45318": "exchangeEtherForNominsAtRate(uint256)", "62b4faa7": "Edujano(uint256,string,uint8,string)", "62b52b49": "LADCToken()", +"62b54873": "setupDirectDebit(uint256,uint256,uint256)", +"62b5c1cb": "knownFunders(address)", +"62b5f7f5": "transformPriceIdentifier(uint256)", +"62b632f4": "bulkSendCoinWithDifferentValue(address,address[],uint256[])", "62b6a282": "left42(uint256)", "62b6a963": "_batch2_icosaleEndTimestamp()", "62b6dc8e": "RektToken()", +"62b6ff4d": "addrCoinshare()", +"62b722e1": "dang_ki(string,uint256,uint256,int256)", +"62b72cf5": "previousHeight()", +"62b788fb": "_expireRequest(uint256)", "62b78bc4": "team_coins()", +"62b7e941": "MIN_PARTICIPANTS_FOR_VALIDITY()", +"62b7f94e": "setKittyContract(address)", "62b83c6b": "balanceAsCreator()", +"62b856b5": "uniswapExchange()", +"62b86ba5": "pureTokenApprove(address,address,uint256)", +"62b87f3e": "knowIfAlreadySignTransaction(uint256)", +"62b8d10c": "changeURI(address,uint256,string)", "62b96a18": "teamUnvested()", +"62b9e098": "setStartRewardBlock(uint256)", "62ba1649": "stopLottery(bool)", "62ba4aef": "payInvoice(bytes32,uint256)", "62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", +"62ba9ae6": "_onBoardETH()", +"62bb1472": "payDR(uint256)", +"62bb517a": "claimDecompose(string,uint8)", "62bb7533": "getTokenToEthOrderList()", "62bb758f": "userSecurity(address)", +"62bbb208": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", "62bc56e6": "getCompany(address)", "62bc63c4": "getCozyAgain(uint256)", +"62bc98f5": "bet(uint256,uint256,uint256,uint256,bool)", "62bca778": "withdrawalFX(uint256)", +"62bcaaee": "assert0_delegated()", "62bd689c": "setBonusPercent(uint256)", +"62bdc0e2": "setAPIBaseUrl(string)", +"62bdfceb": "safeMint(uint256,address)", "62be3172": "Message(address,address,address,string)", "62beaa82": "toData()", +"62bf0836": "CreateCategory(uint256,string,string,uint256)", +"62bf1aa1": "Owenrship(address)", "62bf6fa7": "medalDecimals()", +"62bf764e": "activeBonusCacl_9()", "62c01b2d": "apply_compensation(uint80)", "62c06767": "sweep(address,address,uint256)", +"62c0787c": "finishedCarCount(uint256)", "62c0e3b7": "SpoutMintableToken()", "62c0ffa8": "getDCountedBasicBallotID(bytes32,uint256)", "62c13ff3": "initSale(uint256,uint256)", "62c19061": "getYearDay(uint256)", "62c1adb0": "KittenCoin()", +"62c1c64a": "swapLPeeForTokenLP(uint256)", "62c1f389": "swap(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", "62c24067": "blockFunds(uint256)", +"62c265d3": "totalInvestmentBNB()", +"62c2754d": "buyView(address,uint256,bool)", +"62c2796b": "proposeVaultPriceAggregator(address)", "62c2b7c8": "getTTTAddress(string)", +"62c316d7": "getupperbound()", "62c335c1": "checkCallback(address,uint256,bytes,bytes)", +"62c36545": "getProgressive()", "62c375a7": "library15function()", +"62c387a1": "addPack(uint8,uint256,uint256)", +"62c38d97": "moderation_xdai_balance()", +"62c3c2e5": "getUserExpired(address)", "62c3dd5a": "prepareForRefund()", "62c3fdb2": "getFundsOwner(bytes32)", +"62c41dc0": "burnAuthor(uint256)", "62c47064": "setArbitrator1and2(address,address)", "62c48e20": "capFiatAndETH()", "62c49256": "whitelistBasketFactory(address)", +"62c4bc9f": "main4v1(uint256,uint256,uint256,bool,uint256)", "62c4c89e": "getMixParticipantByPubKey(uint256)", "62c509c3": "XYTgas()", +"62c510a3": "getStorage(address,bytes32)", +"62c587ef": "flashPaybackOrigin(address,address,uint256,uint256)", +"62c59ad4": "estimateBounty(uint256)", "62c5aecc": "getEthToTokenAddOrderHint(uint128,uint128)", "62c5c03a": "getbalance(uint256)", "62c5c254": "changeFounderMultiSigAddress(address)", "62c63e31": "NotFinalized(bytes32,bytes32)", "62c655f5": "removeVoters(uint256[])", +"62c66971": "getAuthorByHash(uint256)", "62c6beea": "_buy(uint256,address,uint256)", +"62c77a61": "getExternalErc20Awards()", "62c7855b": "getConfigBytes(bytes32)", +"62c7d79e": "mintTeamAndAdvisorsYear1Part8(uint256)", +"62c7e159": "setQuote(address,uint256)", "62c7e96c": "deathData_f16()", "62c7fa76": "lockStartTime()", +"62c8b219": "decDiff()", +"62c8c089": "PreICOPrivateClosed()", +"62c95728": "uniswapBlockTimestampLast()", "62c95aa1": "getMaxTickets()", "62c99e84": "_Approval(address,address,bytes32)", "62c9da62": "setCompte_1(string)", +"62ca7583": "initializeValues(address)", +"62cac6f9": "isSignatureValidConvert(address,uint256,uint256,uint256,bytes)", "62caf484": "GDCAcc03()", "62cb1ac2": "validateOrderHash(bytes32,address,uint8,bytes32,bytes32)", +"62cbe206": "getSymbolDetailsAndSTData(string)", +"62cc2cfe": "myTokens(bool)", +"62cc71bf": "getNumPendingTransactions()", +"62cd6453": "getTokenSaleForInsurance(uint256)", +"62cd70e2": "transferDeposit(address,address,uint256)", "62cdd872": "verifySignatures(uint8[],bytes32[],bytes32[],bytes32)", +"62cdead2": "titanRewardAmountAlready()", +"62cded90": "Lock(address,address,uint256,uint256)", "62ce071c": "publicTokenCap()", +"62ce6216": "approve_551(address,uint256)", "62ce7043": "reloadEarnings(uint256,uint256)", "62cee7ad": "staffInfo()", "62cf0197": "getVIATokens()", "62cf54c8": "setDeposits(uint64,address,uint16,uint64)", +"62cfb7a7": "squish(address,uint256)", "62d020d9": "addVersion(address,string,string)", "62d027bf": "GXVCSentByToken(uint256,address,uint256)", "62d05c78": "cancelOffer()", +"62d06aa7": "setExcessBuyAmount(uint256)", +"62d09b28": "tokenSaleRTXF(address)", +"62d0a3c7": "setIssuanceToken(address)", "62d0af7a": "set_BCDB_contract()", "62d0ce45": "TOKEN_RATE_05_PERCENT_BONUS()", +"62d13448": "setStopLimitOrder(int256,int256)", "62d176cb": "buyTokens(bytes32,address)", +"62d1d1dc": "liquidityDivisor()", "62d1dac2": "setUnofficialApplicationSignUpFee(uint256)", "62d1fee3": "addLegitDevAddress(address)", "62d21602": "bkaddress()", "62d246a4": "getBetsMas(uint32)", "62d2c393": "GenkiProject()", +"62d2c555": "adminsAddress()", "62d2ecb9": "setMaxSpend(uint256)", +"62d361cc": "getNumberOfAcoCreatorsAuthorized()", +"62d36dec": "getNumberOfCharacters()", "62d3755b": "fullTokenWallet()", "62d3b5c5": "maxAmmount()", +"62d40d83": "submitRemoveOwner(address)", +"62d419d9": "lastSupplyOfWETHInPair()", +"62d42d22": "OutPutAuthors()", +"62d43075": "yggdrasilTransfer(address,address,uint256,string)", +"62d46b6c": "checkStakeRateDay()", +"62d5038e": "initiateMembershipAndCover(address,bytes4,uint256[],uint16,uint8,bytes32,bytes32)", "62d55b6d": "VOTING_TIMESPAN()", "62d576bd": "periodITO_mainCapInUSD()", "62d590ac": "GrantToken(address,uint256,string)", "62d5acb1": "rebateOneFenzi_()", "62d6b7fb": "percentageOfRaisedAmountThatRemainsInContract()", +"62d6bbdf": "addItem(string,uint256)", "62d7216c": "unregister(uint256,bytes)", "62d72c08": "RozowkaCoin(uint256,string,string)", "62d73eb8": "startElection()", +"62d74202": "isRewarded(address,uint256)", +"62d7a974": "destroySomeTokens(uint256)", +"62d90b36": "viewLatestCertificateNumber()", "62d91855": "delAdmin(address)", "62d93527": "setBrokerFee(uint256)", +"62d93dd5": "_removeFromDelegatedToValidator(uint256,uint256,uint256)", "62d966c9": "changeEmployee(address)", "62d9c267": "ICOEnded()", +"62d9ca78": "_maxIndex(uint256)", +"62d9d0db": "mainsaleGoal()", +"62da5d90": "MIGRATION_ACTIONS_PROXY()", +"62dadfdb": "bulkremoveFromwhiteListIt(address[])", +"62daeaa3": "orderStatus(uint64)", +"62db7d38": "pom()", "62dbc55c": "DevTokensHolder(address,address,address)", "62dbdfef": "CompanyToken()", "62dbf261": "getTokensForEther(uint256)", "62dc0133": "HIGHER_PRICE_RESET_PERCENTAGE()", "62dc6e21": "PRESALE_PRICE()", "62dc9ced": "Roulette(uint256)", +"62dcbdb7": "oracleEpoch2()", "62dd748c": "toUpper(string)", "62dd9c71": "checkWinNobody(uint32)", +"62ddb8e1": "setVersion(uint32)", +"62ddffe5": "LogAddress(string,address)", "62de871e": "startBattle(string)", +"62ded3fa": "takeTimelockAddress()", +"62df39c0": "setCrumbsPairAddress(address)", "62df5b7d": "BD0Token()", +"62e006c7": "add(uint256,address,bool,uint256,uint256)", "62e05175": "setMotionDB(address)", +"62e0723f": "addPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"62e17606": "withdrawAward()", +"62e1c91b": "deleteIt()", +"62e1d9d3": "oldownertoreplace()", "62e1de00": "test_polarBoardInstance()", "62e23e9e": "NAME_NOT_AVAILABLE()", +"62e269ef": "increaseRepayment(address,address,uint256)", "62e26e45": "loanCompleted(uint256,uint256)", +"62e28808": "borrowerAccount(bytes32)", "62e28f7d": "channelModule(uint64)", "62e2aa00": "burn(uint256,string,uint256)", "62e2d0de": "get_foo()", +"62e2f994": "RecordStates(bytes32)", +"62e3384c": "__priceIsSane(uint256,uint256)", +"62e39948": "nAddrHash(address)", +"62e3efdd": "stakingBalanceOf(address)", +"62e40657": "updateBotRestrict(uint256,bool)", "62e4aeb8": "customExchange(address,address,uint256)", +"62e5005a": "serHoldTime(address,uint256)", "62e534d2": "setBlocklancerToken(address)", +"62e582e7": "earnedToAUTOPath(uint256)", "62e5b1f2": "_owns(address,address,uint256)", +"62e5f6f6": "getBlocksToMine()", +"62e603c9": "changeReferrerAddress(bytes32,address)", "62e69886": "RecipientUpdated(address,address)", +"62e6a511": "InvestorAdded(address)", "62e6e7c7": "disTrustDealer(address)", +"62e6f4e9": "renterOf(uint16)", +"62e713c1": "minterPointers(address)", "62e76013": "management(uint256)", "62e7707e": "whitelistAddresses(address[],bool)", +"62e78cea": "Paused(address)", +"62e7a176": "setSpotPriceTwapInterval(uint256)", +"62e7a3c7": "redeem(address,address,uint48,uint256,uint256)", "62e7ba3f": "consumptionPointer()", +"62e7ec89": "getAccruedROBO()", +"62e7f322": "getTargetRate()", +"62e81152": "collectCrv()", "62e838ef": "returnBet()", +"62e83b83": "_calculateTargetDebt(address,uint256,uint128)", +"62e87240": "statuses(uint8)", "62e881a4": "nextTournamentRound()", "62e888bb": "STRIKE_PRICE()", "62e8b948": "stepOneLockEndTime()", "62e8e8ac": "changeTokenPrice(uint256,uint256)", +"62e978c3": "RECEIVE_ETH()", +"62e9d1d6": "mintDoc(address,uint256,int256)", "62ea82db": "bids(address)", +"62ea9116": "get_poolLastBlockUpdate(uint256)", +"62eaba7f": "unclaimedRewards(bytes32)", +"62eaeac3": "mintSqETH()", +"62eaefe1": "TransferEdrIn(address,uint256)", "62eb0068": "redeemByPartition(bytes32,uint256,bytes)", "62eb33e3": "cr()", "62eb4c89": "is_started_payouts()", "62eb5789": "setLLV_edit_33(string)", +"62eb5961": "chgTreasury(address)", "62eb6da1": "registeredToken()", "62eba54c": "doesUserOwnItem(address,uint256)", "62ebcdcf": "setRtmContract(address)", +"62ec17bd": "getAccountAuthoritiesTypes(address)", "62ec8e53": "adminAddBallot(string,uint256,uint256)", "62ed4f04": "SSBToken()", +"62ed96c3": "storeBasket(uint256)", +"62edcae8": "start(address,address,address,uint256)", "62ee0082": "setTokenContractsAddress(address)", +"62ee1135": "getSameDistance()", "62ee37aa": "InfluToken()", "62ee4b26": "AUORANEX()", "62ee6d29": "changeHashtoLowOrHigh(uint256)", "62ee7b03": "startTakeToken()", "62ee922b": "unofficialApplicationSignUpFee()", +"62eee460": "checkSigner(uint256,uint256,uint8,bytes32,bytes32)", +"62ef0063": "oldETHMazeSync(uint256)", "62ef0e65": "withdrawPresale(address[])", "62ef1f81": "confirmPayment()", +"62ef4283": "getCodeHashByAddr()", "62ef7738": "total_money_back()", +"62efa7eb": "mintDevelopmentPart3(uint256)", +"62efeae7": "getFarmed(uint256)", "62f03290": "payRefund(bytes32,uint256)", +"62f04981": "ContractUpdated(bytes32,address,bytes32,string)", +"62f11797": "initMISOFarmFactory(address,address,uint256,uint256)", +"62f16e46": "tokensPerBlock(uint256)", +"62f21d67": "withdrawsETH()", "62f2296e": "_transfer(address,address,uint256,string)", +"62f3765e": "BASE_PERCENT()", +"62f384ad": "updateGovernor(address)", "62f3ed92": "PowerQuantumCoin()", "62f3febf": "isUserBlockedByContract(address)", "62f44d8a": "Dadyys()", +"62f46d15": "mint(address,string,string,string,string,uint256)", "62f4ed90": "isAuthorized(bytes32)", "62f54c18": "removeAllowedTokenInternal(address)", +"62f55112": "submitValue(uint256,uint256)", +"62f5548d": "maxSafeETH()", "62f57ff6": "GudTesteContratoF()", "62f5a23f": "transferToToken(address[])", "62f5aa4c": "getAirdropIds()", "62f5c2e3": "maxContributionPhase1()", "62f5ed61": "add_to_bounty()", "62f60954": "_reAdjustDifficulty()", +"62f629e7": "childChainManagerProxy()", "62f63c6e": "EarthMedz()", "62f69039": "unlockVault()", +"62f6b10f": "pile()", "62f6cf7f": "getRegisteredModuleAt(uint256)", +"62f73d7a": "testFairDistributionByValue(address,uint256)", "62f91eff": "AnythingAppToken()", "62f927d4": "getDefaultReportingFeeDivisor()", "62f96fc1": "splitBalanceAccordingToRatings(int256,int256,int256)", +"62f9acf9": "getCloverMoves(uint256)", +"62fa189f": "approveMany(address[],uint256)", "62fb09b2": "getRefDescr(uint256)", "62fb0ff8": "morties_TO_HATCH_1RickAndMorty()", +"62fb5dc9": "yourAGOBTCBalance(address)", "62fb6fe1": "getMonster(uint256)", "62fb9697": "diffSeconds(uint256,uint256)", +"62fb9ed6": "consideredTokens(uint256)", "62fc178b": "gasPriceOraclize()", +"62fc946f": "Durations(uint256)", +"62fca0b7": "investInfo(address,bytes5)", "62fca3fa": "mintTokenBulk(address[],uint256[])", +"62fcdb2a": "depositCASH(uint256)", "62fdaf1d": "removeFromBattle(uint64)", "62fde48a": "LogDeposited(address,uint256)", "62fe3b4d": "setEndOfPresale(uint256)", "62fec51b": "icoEndTimestampStage2()", "62feff3a": "developerAllocation()", +"62ff5c16": "getdToken(string,uint256)", +"62ff9767": "priceInDAI()", "62ffb195": "REFERRAL_REWARD_PERCENTAGE()", "62ffb3bf": "trueUSD()", +"62ffc7ac": "recoveryTime()", +"62fff3f6": "lenderInterest(address,address)", +"63003919": "companyRate()", "630061f3": "getTokensDistributeds()", "6300c768": "takeEther(address,uint256)", "63018e1a": "minTokensToSale()", +"63032d96": "choice2ETHPot()", +"63035f66": "approvals(uint256)", "63036f86": "totalIssuedEarlySale()", "63037b0c": "payees(uint256)", +"63037d7e": "cardSetCounts(uint256)", +"6304050b": "getAdminEth()", "6304335b": "betsCloseAt()", +"63047bd8": "isRegisteredUpgrader(address)", +"63048179": "_updateReserves(uint256,uint256,uint112,uint112)", "6304fa3a": "Test(uint256,string,uint8,string)", +"630524c7": "purchaseCryptoGamer(uint256)", "63052d82": "getOwnersIndex(address)", +"6305332b": "searchForAvailableBlock(uint256,uint256)", "63055d79": "fetchRate()", "6305d010": "registerTeam(string,address,string,bool)", +"630663a5": "withdrawfee(address)", "63066434": "getPlayerVaults(uint256)", +"630665b4": "awardBalance()", +"63067309": "getAggregatedStatsForPreviousEpoch()", "63069a35": "assign2(address,uint256)", +"6306e215": "undelegateStake(address,bytes32,uint256)", "63079315": "lengthOfCommonPrefix(bytes,bytes)", +"6307e98c": "withdrawStablesDiscounted()", +"630819c7": "DividendsDeposited(address,uint256)", +"63082446": "isModuleIssuanceHook(address,address)", "63086b5e": "afterSoftCapDuration()", "6308769e": "LogFinishICO(address)", "6308a76f": "_approveMint(uint256)", "6308ae65": "managersCount()", +"6308f1cd": "fees(uint256,uint256)", +"6308fd23": "LogFeeUpdated(uint256,uint256)", "6309242c": "setUserHatchRate()", +"6309a10c": "resumeSynthExchange(bytes32)", +"6309b37e": "r_b8()", +"6309dc8b": "epochBlockHashes(uint256)", +"630a1651": "_anftFactory()", +"630a1c9d": "changetokenaddress(address)", +"630a8026": "changeTicketType(uint256,string)", "630a9f94": "viewMemory(uint256)", +"630b0dbf": "Join()", +"630b21a9": "stakedDB()", +"630b3220": "updatePresale(address)", +"630b5ba1": "massUpdatePools()", +"630b76eb": "depositEtherTokenAmount(address,uint256)", "630babac": "WhitelistParticipant(address)", "630bae99": "payoutWithFee(uint256)", "630bcd99": "drawRandomItem(string,uint256)", @@ -56679,155 +103742,292 @@ "630cd1e9": "ratePrivateSaleStage()", "630cea8e": "submitSignature(bytes,bytes)", "630d0552": "ColorPurchased(address,address,uint256,uint256)", +"630d2b8c": "addMeasurement(address,uint32)", "630d43cc": "DoroDiamond()", +"630d4573": "TestLog(address,address,uint256,uint8)", +"630d8c63": "claimBalance(uint256,uint256)", +"630d8d21": "setBoost(uint256,uint256)", "630db9ee": "getRemoveMarketCalled()", "630dbe79": "StandardERC20Token(string,string,uint8)", "630dc19d": "_payoutJackpot()", +"630dc7cb": "EXECUTOR()", "630dd52f": "TOKEN_TREASURY()", +"630e031f": "withdrawTokenAll(address[])", "630e07f1": "RESERVED_TOKENS_FOR_ICO()", "630e0ae6": "createPersonGen0(string,string,uint64,bool)", "630e1d5f": "hasEnoughStake()", +"630e327d": "setMyIdentity(bytes)", +"630e799f": "getTiming()", +"630ea6e2": "DireccionContrato()", "630eb125": "getAuditAssignBlockNumber(uint256)", +"630ed97f": "spender1()", "630f1e6c": "withdrawAsset(bytes,uint256)", "630f479e": "perStageNxc()", +"630f5fa2": "FinalizedOK()", "630f6f47": "betWithAff(address)", +"630fcbfb": "initializeEIP712()", "630fd0ac": "totalSupplied()", +"630ff776": "setDividenPool(address)", +"631036ad": "SetBurnAssetRole(address[],bool[])", +"631070fc": "suspendPynth(bytes32,uint256)", "6310c722": "convert(address,uint256,uint256)", "6310d902": "getAddressBoughtCount(uint16,address)", "631121ca": "ISCToken()", +"6311d06a": "collateralDeposited()", +"6311e830": "fulfillOrder(uint256)", +"631203b0": "getBorrowingFee(uint256)", "63121665": "countPeriod(address,bytes5)", +"6312abcb": "addAsset(address,address,uint8)", +"6313531f": "idList(uint256)", +"63136bec": "createPassage(uint8[],uint256[],uint8[])", "6313bd30": "DEP()", "631407a2": "setTokenSupplierAddress(address)", +"6314724a": "prenupCount()", +"6314c59d": "setDaysFactor(uint256,uint256)", +"63152a50": "transferAllowances(address,address)", "6315592b": "orderModify(uint256,uint256,uint256)", "63155d2b": "craft(uint16[16],uint16[16],uint16[16],uint16[16])", "63157e2b": "issue(uint32,uint8,uint256,bool)", +"6315a84d": "approveForMythic(address,uint16)", +"63160282": "increaseLockLength(uint256)", +"63160786": "FADRrtAirdropFADR(uint256,uint256,uint256,uint256)", +"631667dd": "eRC1155Multiplier(uint256)", +"6316930e": "initialize(uint256,uint256,uint256,uint256,address,address,address,bytes32,address,uint256,uint256,uint256)", "6316f6d1": "getNotConstant()", "63175913": "StandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "63176ad9": "changeDealDate(uint256,uint256)", "6317cc5b": "tokenCapForThirdMainStage()", +"6317d427": "setBetMinimum(uint256)", +"631805fa": "providerPosition(uint256,address)", "631859d0": "calculatePotentialPayout(uint256)", +"63186e5f": "setDefaultFactory(address)", +"6318a75b": "beli(uint256,uint256,address,uint256)", +"631922f9": "getMyContribution(address)", +"63193251": "communitySaleAllowed(address)", +"6319d0ef": "updateDAO(address,string)", "6319d32f": "DOJI()", +"631a3ef8": "getDepositAmountForBorrow(uint256,uint256,address)", "631a4231": "createContract(string,string)", "631a925c": "Weekycoin()", +"631a982c": "stablecoins(string)", "631b0520": "getPaimentTime(address,uint256)", "631b3672": "roundSetUp()", +"631b4903": "claim(address,address,uint256,uint256,address,bytes)", +"631b5dfb": "controllerBurnFrom(address,address,uint256)", "631b7e83": "LogResult(bytes32,address,uint256,uint256,uint256,int256,bytes)", "631bdb63": "playerCurrentlyRegistered(address)", +"631bdf94": "BridgeChange(address)", "631c07f0": "getBonusByDate()", "631c42ae": "ethExchangeWallet()", "631c56ef": "depth()", +"631c70e7": "obsoleteExitTo()", "631ccb1d": "getInfoMarketItem(bytes16)", "631d3f3b": "liveDragons()", "631d551b": "FAMEToken()", +"631d5b3b": "ApproveERC20(address,address)", +"631d669c": "cycleSecs()", "631d9b1f": "LuxProject()", +"631d9cd1": "modExt(uint8,uint8)", "631dc853": "EquitySharingSystem()", "631dd1a2": "transferFreeze(address,uint256)", "631de4d6": "replace(address,address)", "631e0c69": "addMessage(string,string)", +"631e1444": "isResolverCached(address)", "631f0d66": "upgradeAddress()", "631f637f": "preSaleMaxCapInWei()", +"631f6d07": "buyItems(uint256)", "631f9852": "isSealed()", +"631fad36": "checkEmergencyNNAmount()", +"631fb726": "isApprovedOrOwner(uint256)", "63200443": "FindLettuce()", "6320212b": "refreshReputation(bytes32,address[])", "63204648": "setMultiWallet(address)", +"6321379d": "Top3dis100()", +"6321a5b6": "setStrengthRate(uint256,uint112,uint112)", "6321f298": "MeraToken()", +"63221084": "getMarketByMaker(address)", "632261c3": "removeVendor(uint256)", +"63227feb": "setBootstrapParams(uint256,uint256)", "63228b57": "KarmaToken(uint256,string,uint8,string)", "6322961d": "getAddressByUsername(string)", "6322bb39": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"6322ce38": "setI()", +"6322da2c": "upgradeLevelCommissions(uint256,uint256)", "6323b526": "transferFromTokenSell(address,address,uint256)", "6323dc26": "GCRTokenERC20()", "632447c9": "updateReward(address)", "632473da": "CNC()", "632488ff": "POOH()", "6324af1f": "advisorsBalance()", +"6324b8a7": "invest(uint64)", +"6324e6ff": "flashloan(string)", "6324e70b": "offerToLend(uint256,uint256,uint256)", +"63253196": "renewB4sePolicy(address)", "63258462": "setHomeMaxPerTx(uint256)", +"6325bee4": "wrapCryptoItems(uint256)", +"6325ec53": "siteRewards(uint256)", +"6325f968": "getEmaCalculationBlockSpan()", +"63260e36": "getCliff()", "63263858": "ethartArtReward()", +"63263a64": "PrivateSale_Cap(address)", "6326cb5b": "_purchaseCompany(uint256)", +"63270d3a": "calculateRewardTesting()", +"63270e1e": "fraxDiscountRate()", +"632807df": "issue_increase_ratio()", +"63284890": "uintsOwnerCount(address)", "6328af59": "YeedToken(uint256)", +"6328eee0": "approve_881(address,uint256)", "63299226": "teamOneId()", "6329cfa5": "settleLend(bytes32[8],bytes,address,uint256,bytes,bytes,bytes,bytes)", "632a3e52": "vestTokens(address,uint256)", +"632a4861": "lockOf(uint256)", "632a8144": "midasFounderAddress()", "632a9a52": "vote()", +"632ba2b5": "setCollateralBalance(address,uint256)", +"632bad0d": "setMultiAddress(bytes32[],address[])", "632ca5c9": "getArts()", "632ccecd": "IkuraAssociation()", "632ce0f8": "whoIsAdmin()", +"632cfd8f": "getEscrowed()", +"632d514c": "denomAsset()", "632e082a": "isMainFirstDay()", "632e1dfe": "OWNER_ADDR()", "632e2b95": "addWire(address,uint256,uint256)", "632e44af": "distributeBonusTokensByList(address[])", +"632e8a25": "_skipDisputes(uint256)", +"632eaa21": "test_Substring()", +"632ebc7b": "metaRefundMyContributions(bytes,uint256,uint256[],uint256)", "632ebd6b": "changeIsOpenFlag(bool)", +"632ef8ec": "Purchase(uint32,address,address,uint256,uint256)", "632f0ba6": "descriptionHashes(bytes)", +"632f751c": "get_trusted(uint256)", "632f83eb": "realWorldPlayerFromIndex(uint128)", "632fbda4": "replaceController(address)", "63301198": "AetherCore()", "63302789": "TOKEN_FOUNDERS()", "63304bc3": "m_lastFundsAmount()", "6330ac09": "get_price(string)", +"6330ea25": "adminPurchase(uint256,uint256,uint256)", +"6331883b": "entities(uint256)", "6331e7d4": "beforeEach()", "6331eae0": "saveTokenValues()", +"6331f17f": "getUnderlyingAmount(address,uint256)", +"6332abc9": "totalVoter()", +"6332fef6": "getAccountInfo(address,address)", "63334c58": "transferETC(address)", +"63338b17": "getActiveCount()", +"6333bbe9": "addrOfIndex(uint256)", "63340338": "fuint32(uint32)", "633423be": "paymentAddress()", +"63344007": "updateMulDivConverter1(uint256,uint256)", "6335010d": "getVestingRevokeDate(address,address)", +"63351d04": "pathExists(address,address)", +"63351deb": "limitsList(address)", +"6336049d": "slBNB()", +"633652c1": "lexDAOmintLLC(address)", "63365651": "InterfaceId_ERC721Enumerable()", "63367f4d": "tagline()", "6336ac19": "setTTGCoin(address)", +"6336cc61": "replaceMigrate(address)", +"63373964": "checkLength(string,uint256)", +"6337c2e5": "getObligation(uint256,uint64)", +"6337ed39": "TokensWithdrawn(address,address,uint256)", "63385ad1": "addNewAccount(address,uint256,uint256)", "63385b64": "BerryToken()", +"63386551": "BuyStakeMNE(address)", "633891c4": "getPlayerAff(uint256)", "6338977e": "setMetadataUser(string)", +"6338cb75": "legitRaces(address)", "6338f693": "Airdropped(address,address,uint256)", "63391689": "withdrawForFourStep()", "63392843": "decrease(bytes32)", +"63394fa9": "lastSetPrice10_6()", "63396109": "createGen0Token(address)", "63397825": "changeMerchantAccount(address)", "633982c5": "viewLatestEthTransactionRequest()", +"63398944": "min_tokens2()", +"63399041": "checkforReg(address)", +"6339a275": "change(uint8)", "6339b5f6": "SUSIToken(uint256,string,string)", "6339be39": "totalStarSupplyRemaining(uint8)", "6339fbcb": "finishGame(uint32,bytes32)", +"633a0e60": "getMyUltraDragon()", "633a6dde": "deathData_a9()", "633a7574": "CowToken(address,address,uint256)", "633ab5e0": "callchecked()", "633b1954": "finalizeMigration(address)", "633b4c04": "o_velho_problema(uint256,uint256)", "633b5b1f": "presaleTotalWei()", +"633b5c4f": "remainingUsdToMint()", +"633ba288": "isBucketBase(bytes32)", +"633bb522": "slashed(uint256,uint256,address)", "633c78b5": "create(uint256[],uint256[])", "633ce1d2": "premiumDomainK()", +"633cfeed": "withdrawDone(address,uint256)", "633d17eb": "toAscii()", "633de6aa": "setTime2Rest(uint256,uint256)", "633dfc70": "vote(bool,address)", +"633e9470": "bZx()", +"633e9e09": "getEpochStartTime(uint256)", +"633eb508": "_setUIntValue(bytes32,bytes32,uint256)", +"633eb934": "ud(string)", +"633ed833": "getContractClosed(bytes32)", +"633f3e5c": "DayClaimed(address,address,uint16,uint256)", "633f7a82": "queryType()", +"633fb7e4": "withdrawETH0Token()", +"63403801": "epochDurationInSeconds()", +"63409197": "multisigSet()", +"634107f8": "drawDown()", "6341b3fe": "subBrokerNum()", "6341ca0b": "retrieveTokens(address,address)", +"634235fc": "Payout(address,uint256,uint256)", +"634282af": "allTokens(uint256)", +"63428dd9": "showOwners()", +"6342987e": "getStakingTimeBonus(address)", +"6342d7ba": "getRandomWithInviter(address)", +"6342f104": "NewPress(address,uint256,uint256,uint32)", "634363f3": "amountOf()", +"6343e137": "EmergencyWithdrawal()", "63443679": "rateUpgrade(uint256)", +"63445989": "depositInfo(address)", "6344a898": "setWeiRaiseLimit(uint256)", "63453ae1": "distribute(address)", +"63455acf": "inverseFeeRate()", "63456fa9": "getTokenById(uint8)", "634663a5": "setPriceRatePhase2(uint256)", "634667b2": "claimAndTransfer(address)", "634710ae": "BYTC()", "63472fad": "setVote(address,string,uint256,address,bool)", "634758e5": "TodaNetwork()", +"63477109": "buySaleEarly(string)", "6347a377": "nextAuction()", "6347bb42": "SGACoin()", +"6348257c": "tkd_amount(address)", "63482cf0": "eachUnlockCounts()", "63488772": "WanersiLinkToken(uint256,string,string)", "6348c4cf": "Money(address)", "6348eae6": "neverPauseAgain()", +"63490a77": "revokeProtocolTransfer(address)", "634965da": "sendEther(uint256,address,address)", "634993c6": "refill(bytes32)", +"6349a116": "readNetworkFeeData()", +"6349c9ec": "debased(address)", "6349cafa": "changePrice(uint16,uint256)", +"6349f078": "setRatioProfit2BuyBLK(uint256)", +"634aa880": "ChangePermission(address,address,bool)", "634b3df9": "minPriceInWeiForPre()", "634b4a8f": "setOperater(address)", "634b5043": "collectWinnings()", "634b8dc3": "Altn()", +"634bb09c": "get_denuncia_status()", "634bc7db": "create(bytes32,bytes32)", +"634c4d94": "newFlowerboxVault(uint256,uint256,uint256,address,address,address)", "634c5c51": "authorized_triggerStashedPayoutTransfer(uint256)", "634c688a": "burnAllowed()", +"634c6f41": "calculateETHBonusFee(address)", +"634c7bb5": "keep3r()", +"634cb5df": "presaleEndAndCreateLiquidity()", +"634ce668": "investorMap(address)", "634d27c3": "getProviderIsForRent(uint256)", "634d6e57": "investorFullInfo(address)", "634df88e": "ENTA()", @@ -56836,353 +104036,658 @@ "634ec9f9": "buyKnowledge()", "634ef3ce": "Mqthereum(uint256,string,string)", "634ef8da": "_setSetting(string,uint256)", +"634f289a": "_ownerTokensInvested(address)", +"634f4546": "SeeCertificates(uint64)", "634f752b": "optionLibrary()", "634fcb8e": "setupCrowdsale(address,bool)", "634fe2a6": "others_prize()", "63505ae8": "getBidsCount()", "63506c16": "transferfromOwner(address,uint256)", +"6350865e": "f(bytes10)", "6350b2c2": "mints(uint256)", +"6350caf6": "addWithRestaking(uint256,bool,address)", +"6350d774": "getPairAmountIn(address,address,uint256)", "6350ec6f": "changeYumAddress(address,address)", +"63512159": "isStakeHolder(address)", "6351546d": "settleTransactionByMediatorFee(uint256,uint256)", "635179ca": "setHiddenCeilings(bytes32[])", +"6352170f": "revealvote(bytes32,bool,string)", "6352211e": "ownerOf(uint256)", +"6352248e": "buycoins()", "6352585c": "ENCToken(uint256,string,uint8,string)", "6352c538": "TokensWithdrawn(address,uint256)", "63534dd8": "seedContract()", "6353586b": "reward(address)", +"63538dab": "payOwnerETH(uint256)", +"6353c324": "register(string,bytes32[],bytes32)", +"6353ed68": "incorrectDesignatedReportTotal()", "63542c26": "approvedToken(address,uint256,bytes)", "635439ac": "updateCurrentGameCardId(uint256,uint256)", +"6354b661": "registerHook(address)", +"6354e6bb": "equals(uint256,uint256,uint256)", +"63552a49": "GetMyPoolsId()", +"63553e7c": "_txLimit()", "635550a6": "blockchainExchangeFrom(address,uint256,uint256,bytes32)", "63558f5c": "transferEscrowship(address)", "6355bf2f": "optionsSet()", +"63562659": "monthToMins()", +"635633d5": "getPrizePoolLevelAmount(address,uint256,uint256)", "635639b4": "_unpackPlayerData(uint256)", "6356443e": "TokenPreSaleTransfer(address,address,uint256)", "6356739d": "Sent(address,uint256,uint256)", "63567673": "createBet(address,address,uint256,uint256,bytes32[])", +"635677f2": "refCode()", "63569ca8": "rewardProjectCompletion(uint256)", +"6356bb2f": "authUsers(address)", "6356cdac": "Bonus(uint256)", "6357cc12": "startpublicBattle(uint256,uint256)", "6357ddaa": "getRandomTime(uint256)", +"63581665": "active(address,address,address,address,uint256,uint256,uint256,uint256)", "63581c04": "setFactoryAsset(uint256,uint16)", "63586d6a": "claimBondReward()", "635875d9": "changeMinimumCommission(uint256,uint256)", "6358aac0": "isInterestStatusUpdated()", +"6358ec57": "addTier(uint256,uint256,uint256)", "6359036b": "redeemDaoBounty(bytes32,address)", "63591d09": "poolMaxAmount()", +"635928e1": "liftIndividualCap()", "635994fd": "create(address,bytes32,address,bytes32,address,bytes32)", "6359a656": "EUnpause(address,string)", "6359a974": "TOTAL_TOKENS_TO_DISTRIBUTE()", "6359b5b1": "totalIssuingCollateral_limitedSum()", +"635a214e": "MathTo32(uint256)", +"635a3872": "setWaitingPeriodSecs(uint256)", "635a5d7b": "setHeartbeatTimeout(uint256)", +"635a6942": "isERC721Contract(address)", +"635a9f22": "login(bytes32,bytes32)", +"635ac435": "userStructure(address)", +"635ae901": "depositAlice(address,uint256)", "635b9047": "ExpandCoin()", "635ba8a1": "ApexTalk()", +"635c06ca": "adverisement()", "635ca669": "addBoardOnUser(address,address)", "635cfda2": "Incrementer()", "635d0239": "toUint(bytes,uint8,uint8)", "635da243": "autorizar(address)", +"635e100d": "updateReferralWallet(uint32,address)", "635e2abf": "_btcToken(address)", +"635e2cdb": "cancels(address)", +"635e99aa": "totalLoot()", "635eecea": "privateEventTokens()", "635f6a79": "method3(string)", +"6360775a": "initAttack(uint256)", +"63609799": "USDT_GWTB_IS_OPEN()", +"6360e1d9": "getWhiteListAddress(address)", "6360edc1": "getAllForPubKeyBetween(bytes32,uint256,uint256)", "6360fc3f": "bought_tokens()", "63615149": "withdraw(bytes32,bytes32)", +"63615c21": "setBurnrate(uint8)", "63617328": "setJackpotCompleted()", +"6361b0b9": "getTakerOffersLength(address)", +"6361c0eb": "withdrawTrial()", "6361d3e0": "unpauseActivity(uint16)", "6361d9e9": "testConstructorUsingDeployedContract()", "6362102d": "rebalanceEtherDelta(address,uint256)", "63621532": "setGasUpperBound(uint256)", +"63623745": "sape()", +"63627655": "setRoomCreateAddr(address)", +"63627cde": "approve_404(address,uint256)", "6362ffd3": "rebuyInformTime(address)", +"6363013a": "quorumVotesInWei()", "63637c87": "createNewPlayer(string)", +"6363a30d": "refusers(address)", +"6363e8b9": "PolicyUpdate(uint256,string)", +"63641cf7": "currentAnswers()", +"63644573": "betPayoutToken(address,uint256)", +"63644a5c": "poolProfitOf(address,uint256)", +"63644aca": "setMaxChecks(uint256)", +"6364c628": "pieAddress()", +"63650f2e": "initiateMiningForOne(uint256)", "636544be": "changeVeredictum(address)", +"63655ea6": "getTokensSpentPerContract(address,address,address)", "63655ebb": "DiaryLog(uint256,bytes)", +"63656798": "topUpForFee(address,uint256)", "63657855": "_removeFromDebtRegister(bytes4,uint256)", "6365dfd9": "RaisrToken()", "63665f2e": "addAirdrop(address,uint256)", +"63667eb7": "TIME_INDEX()", "63669424": "EthBird()", "6366b936": "freeUpTo(uint256)", "63670e42": "UpdateSellAgentSiteReg(address,address)", "636760a2": "Cyncrohnis()", +"63679efd": "succeedOwner(address)", +"63681c48": "setTokenTrades(address[],address[],bool[],uint256[],uint256[])", "636822fa": "FearOfMissingOut()", +"63685c92": "GameRounds(uint256)", +"6368818a": "emergencySwapExit()", "63689b4a": "moveTokens(address)", +"6368f178": "cmbst()", "6369313d": "isHouse()", +"63693807": "addToken()", "636a36e3": "ThingsbookChain()", +"636a3708": "Morder(uint256)", +"636a526c": "getFillValue(address,bytes32)", "636ae15d": "BROYALCOIN()", "636b2ac3": "createDefaultGen0LinglongCat(uint256,address,uint256,uint256)", "636b7e56": "pendingFunding()", "636bb5ae": "CalculateStageValue()", +"636bbaa9": "getDefrostTime(address)", "636bd9dc": "cooAddress3()", +"636be27a": "debit(address,uint256)", +"636bf730": "topBid()", +"636bfbab": "minimumDeposit()", "636c6524": "Superpack()", "636ca6c2": "EAAS()", "636ce4d7": "BTL_SPARTAN()", "636d37b1": "precrowdsalepricing(address,uint256)", "636d98b1": "referrerPercent()", +"636e4d72": "fixFunding(address[],uint256[],uint8[],uint8[])", +"636f02c7": "setBuySplitFee(uint256)", +"636f0cf8": "cusdAddress()", "636f12fe": "b2sother(bytes32,bytes32)", "636f6159": "tokenExchange()", +"636f6e08": "burnedSignatures(bytes32)", "636fa3c6": "preIcoToken()", +"636fc28b": "_pool()", "636ff44e": "BAGToken()", +"63700dc0": "calcUserRewardPerToken()", +"637013b0": "Revoke_Privilege_Certificate(uint256)", "63704e93": "getDocCount()", "6370920e": "grant(address,uint256)", "6370ef19": "updateDomainPrice(bytes32,uint256)", +"637180a8": "stakingBankContract()", +"6371fdd7": "getBonusStakesPermanently(address)", +"637209bc": "lottocheck()", "63722de4": "AllowSomeoneToViewMyKeys(address,string)", "63723373": "checkSignature(address,uint8,bytes32,bytes32,bytes32)", +"63724c16": "isOperatorOrAdmin(address)", "63727449": "getMfgDetails(string)", "6372ba1a": "dateEndICO()", +"6372df6a": "addVault(address,uint256)", +"63731080": "ZERO_ADDR()", "63732cf0": "RCN()", "63735598": "getPriceOfCampaign(bytes32)", "6373786a": "SaturnPresale(address,address,uint256)", +"6373a6b1": "PROVENANCE()", "637431ae": "testCreatePricelevelUsingNewContract()", "63746113": "resetCrowdSaleAddress(address)", "63746b03": "createContractRide(string,bytes7)", +"63748679": "stopBurn()", "63749225": "getPVPEntranceFee(uint256)", +"6374c20f": "split(address,address,uint256,uint256)", "63750dfb": "changeLedger(address)", +"63751583": "forceDecision(bool)", +"637530f9": "initiateFlashLoan(uint256,uint256,int8)", "63755c16": "withdrawStandardTokens(address)", +"6375ca17": "registrarFirmante(uint256,address)", +"63765f38": "getProductAddress(string)", +"63765f39": "manyExtended(uint256,uint256[])", "637666ce": "removeFromBlackList(string,address)", "6376c910": "StageThreeEnable()", +"6376d9bf": "setVividAddress(address)", "63772f33": "growthTokensPercent()", +"63773503": "Added(string,uint256)", +"6377961c": "GetVerifyCodes(string)", "6377aaa6": "setAdsContractAddress(address)", +"6377b28c": "WithdrewEther(address,uint256)", +"6377b2ec": "addMod(address,uint256)", "6377ebca": "close_time()", +"6377f86f": "setNewAaveCore(address)", "6377ff20": "totalInactive()", +"637830ca": "claimRewardAll()", "6378378a": "NxahCoin()", "63784191": "frozenForTeam()", +"63786df7": "approve_468(address,uint256)", +"6378ee2e": "buyDHPT(address,uint256)", "63791e3c": "setPriceSetter(address)", "63798661": "payPlace(uint256)", "6379a852": "multiOperatorSend(address,address[],uint256[],bytes,bytes)", "6379ed9d": "distributeFUD(address[],uint256,uint256)", +"637a0fd3": "AddessLocked(address)", +"637a834e": "dai_addr()", +"637aa950": "licenseRegistry(address,uint256)", "637af51c": "updateUpdater(address)", +"637b1c4f": "token_initialized()", "637b2541": "_allocateTokens(address,uint256)", "637b55eb": "exchangeEtherToToken()", +"637b887b": "funcCalled()", "637b93ed": "getInsuranceBalance(address)", "637bcd2a": "userIsWhitelisted(address)", "637c39d8": "systemAddresses(address,address)", "637cc5c6": "XBlockToken()", +"637d3c35": "_getETHPrice()", "637d3e00": "ProjectOwner_EnableProject(int256)", +"637d89d4": "user_deposit()", +"637dba06": "_apwr()", +"637dc555": "numberOf(string)", "637dda3f": "getBalanceByIndex(uint256,address)", "637e12f7": "getBlocksDesc(uint256,uint256)", +"637e4be8": "VaultCreation()", "637e86eb": "totBOTs()", +"637e9d5c": "setRegistrationCost(uint256)", "637ea3e5": "setlogaddr(address)", +"637eb11d": "addDealForInvitee(string,address)", "637ec389": "activated_time_()", +"637eea19": "steward()", +"637f0a2a": "getAmtPerSec()", +"637f3674": "balance_to_sell()", +"637f63fd": "removeGiver(address)", "637fcf95": "getBoardMember(address)", +"63800ddb": "claimSecretPacket(string)", +"638082bc": "uni_bsgs_dai_lp()", "63808773": "acceptContribution(bytes32)", +"63809299": "issuanceKindsData(address)", "63809953": "secondsPerDay()", +"6380bd75": "amendRewards(uint256,bool)", "6381ca26": "refundTransactionByMediator(uint256)", +"6381d981": "Unlock(address,uint256)", "63820550": "OwnerEvents(address,uint8)", +"6382162f": "bee()", "63822fdc": "addConsentTemplate(string,uint256,string,string,string)", +"63823472": "setApprovalForAllSender(address,address,bool)", "6382789d": "currentLowestCount()", +"6382d9ad": "emergencyWithdraw(address,address)", +"638386b0": "OnIsTokenTransferOpenUpdated(bool,bool)", "63839777": "getReturns(address,address)", +"63843c05": "emitText(string)", "63844a57": "mul32(uint32,uint32)", +"63845779": "SedoAddress()", +"6384c045": "depositers(address)", "638560cf": "registerBool(address,bool)", +"63858048": "setETHCollateralOracle(address,uint256)", +"63858f2d": "gracePeriodLength()", +"63859e23": "getBlockDetails(uint256,uint256)", "6385cbbe": "minimalGoal()", "6385f2fb": "DAZ()", "63860139": "nextPrizePool()", "63862fd5": "isSenderOriginalOwner()", +"638634ee": "lastTimeRewardApplicable(address)", "6386c1c7": "getUserInfo(address)", +"63871d25": "removeBeneficiary(uint256)", +"63874395": "returnInvestment(address,uint256)", "63875261": "paladinAddress()", +"6387c949": "Axiatoken()", +"6388749c": "profitRate()", "6388fafa": "niceguy1()", "63891019": "testFailStartTooEarly()", "63892068": "create(string,string,bool)", +"63895eb4": "InterfaceId_ERC721TokenReceiver()", "6389654e": "changeDailyWithdrawalLimit(uint256)", "63897c7e": "changeSettings(string,string,uint256,uint256,address,address,address,address,uint256)", "6389e019": "graceTransfer(address,uint256)", +"638a7979": "transfer(bytes32,bytes,uint256[])", "638a9ce9": "setProxy(address,bytes32)", "638b1b14": "developmentAddress()", "638b4463": "completeClosed()", +"638b5e53": "tokenHolders(address)", "638b9119": "soldCards()", "638bcce3": "multilevel(uint256)", +"638be77a": "hospitallist1(uint256)", "638c5ddc": "BonusListUpdated(address,address)", +"638cd350": "mintRenBTC(address,uint256,bytes32,bytes)", "638d4788": "draw(uint8,uint8)", +"638d943b": "approve_35(address,uint256)", "638dd56a": "getNumberOfEligibleMembers()", +"638df7e2": "getERC20TokenFrom()", "638e1e5d": "payTip()", "638e3724": "Locker(address,uint256,address[],uint256[])", +"638ea259": "startSalebADR(uint256,uint256,uint256,uint256,uint256)", +"638ecae3": "getBurnableWalletArray()", "638eea8d": "PLATFORM_MONTHLY()", "638f6575": "timeStarted()", "638f8da4": "castleMaxLevelGap()", "638fade2": "getMerchantPublicKey()", +"63900ca6": "pendingMints(uint256)", "63905232": "balanceAll(address[])", +"63905be8": "setInternalGasRequirement(uint256)", "63907180": "getDebrisNum(bytes32)", +"63907e46": "vote(uint256,string,uint256[],string,string)", +"639097a1": "deviation()", "6390f519": "getNumTeams(uint16,uint8)", +"63911aa7": "pegaPerBlock()", "6391c315": "FundsWithdrawnAndTokenStareted(address)", "6391d3b2": "getCountSenderLands(address)", "63921a74": "canReceiveListing(bytes32,uint256,bool,address,uint256,uint256)", "63929d3e": "getPendingKNCRateRange()", "6392a51f": "balancesOf(address)", "63937651": "batchTransferDiff(address[],uint256[])", +"6393ab24": "call_deleted_internal_func()", "6393b4eb": "expect(address,uint256,bytes,bytes32)", "6394536d": "cosign(uint256,uint256)", "639475ca": "TRIANGLE()", +"63955c52": "_approveRelayedCall()", "63958b5f": "sellSpecialTokensForPublicSale(address,uint256)", +"6395a91c": "rSettingXTypeID_(uint256)", +"63961069": "withdrawAnyTokens(address,uint256)", +"63961d40": "getAllReserves(address,uint256,uint256)", +"63977dff": "totalWithdrawnByUser_T(address)", +"6397d11e": "changeManyBnbRate(uint256)", "63981b33": "changedeposito(address)", "63981bbc": "TotalSpenders()", +"63988b79": "approve_112(address,uint256)", +"6398b5e5": "unWrapTokens(uint256,uint256)", "63991a36": "getGenomeChildren(uint32,uint32)", "639937d7": "maxSpinners()", +"6399af73": "totalBenefactorTokenNumerator(address)", "639a9a67": "saleOpened()", "639ab80b": "YTTD()", +"639af18d": "addressTokenBunny()", "639bbb37": "donated()", "639bd0bf": "proposeBountyTransfer(address,uint256)", "639bef41": "setRecommender(address,address)", +"639c09c0": "voterVotesOut(address)", +"639c29c3": "setStartBlockTime(uint256)", +"639c44cf": "CONVERT_WT_SIG()", +"639c5d36": "lastPayoutWeekByAccount(address)", "639cba6e": "getDetailsBattles(uint256)", "639cd59c": "totalFeesAvailable(bytes4)", +"639d250b": "newRaiseProposal(bytes32)", "639d3e69": "listSubName(bytes32,bytes32,uint256,uint256,uint256)", +"639d4e86": "vPriceOracle()", "639d57f2": "testGetBitSuccess()", +"639d6bc9": "getMintedSectorCount(uint16)", "639d71eb": "mixAmt()", +"639d7e86": "contributionPhase()", +"639da735": "BatchDistrib(uint8,uint256)", +"639db89f": "serialNumbers()", "639e01dd": "Team()", +"639e7990": "getNormalized()", "639ec4d2": "checkTokDev()", +"639efa86": "getDivider()", +"639f59c6": "withdrawfunds(address)", +"639f8079": "fill_pool(bytes32,uint256,uint256,string,string,address[],uint128[],address,uint256,uint256,address)", +"63a0209a": "sideTokenDecimals(uint256)", "63a0557b": "teamAvailable(address)", "63a0607b": "buyRock(uint256)", "63a10042": "approveComponents()", +"63a14345": "wipeAllAndFreeEth(uint256,address)", "63a1512e": "setOPM(address)", "63a167f2": "collectorWeiCap()", +"63a18f3d": "_crowdsaleAddress()", +"63a1b18c": "getPendingBalance(uint256)", +"63a200cf": "MintSuccess(bytes32)", "63a24174": "GxCoinTotals(address)", +"63a24277": "lay_ten_tac_gia()", +"63a24b7a": "initialize(uint256,address,uint256,address,uint256)", "63a2c393": "safeMulPercentage(uint256,uint256)", "63a2de29": "crearJuegos()", "63a2fdbf": "claimZeronium(uint64,uint64,uint64,uint64,uint64,uint64)", "63a37503": "test_rewardPoolShare_noClaimableStake()", +"63a3b54d": "syncCompoundMarkets()", "63a3c452": "getUnsold()", "63a3cc80": "currentTotalTokenOffering()", "63a3d383": "edoToken_()", +"63a3f97d": "getStoredEthereumAmount()", "63a411c0": "addDriver(address)", +"63a41ee3": "updateRecommander(address,address)", +"63a44f12": "totalLockedRewards()", +"63a45768": "faasPoolPercentage()", +"63a4a886": "batchEquip(uint256,uint256[],address[],uint256[])", "63a4b67b": "setArray(bytes32,uint256[])", +"63a560ec": "HARVESTER_ROLE()", "63a599a4": "emergencyStop()", "63a5bc71": "eitherAdminOrAdvisorCanDoThis()", +"63a5d298": "activateTimelock()", "63a6568f": "getPropertyLastUpdaterBecomePublic(uint16)", +"63a65872": "Payment(uint256,uint256,address,uint256,uint256,uint8)", +"63a6614d": "fees_wallet_decash()", "63a66d59": "bountyDeposit()", +"63a67c1c": "getStringData(bytes32)", +"63a6b1da": "curve3Pool()", "63a6cc7d": "getBuyers(uint16,uint8)", +"63a6d6b8": "UserRefer(address,address,uint256)", +"63a8374d": "pendingTransactions(uint256)", "63a846f8": "admin(address)", +"63a84c7a": "getMiningMachine(string)", "63a8b945": "removeCounter(address,uint32)", +"63a8bc18": "swapBNBToBUSD(address[],uint256)", "63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", +"63a8fd89": "pauseProxy()", +"63a90fc1": "editExternalPositionUnit(address,address,int256)", +"63a96131": "SaleCreated(uint256,uint256,uint256,uint256,uint64)", "63a97d3f": "decreaseAllowed(address,address,uint256)", "63a999cc": "uddr()", "63a9c3d7": "verify(address)", +"63a9e589": "MinBuyAmount()", "63aa109c": "summFounders3()", "63aa289b": "ownerTreesIds(address,uint256)", "63aa56b1": "amend(address[],address[])", +"63aaf8ec": "REBATE_RATE_BASE()", "63ab7a25": "clearWaitPairBets()", "63aba603": "AlphaToken(string,string)", "63abc381": "alreadyParticipated(address)", "63abfbaa": "tokensToFunds(uint256)", "63abfd86": "CCChainToken()", +"63ac07ca": "DAO_Convert(address)", "63ac0f99": "depositBonus(address,uint256)", +"63ac7ca7": "getRedemptionAndMarketPrices()", +"63ac8007": "yellowPerBlock()", +"63acc14d": "initialize(address,address,address,bytes32)", +"63acd96c": "quitExtFarm(address,address)", "63ad0bbe": "templateProposals(address,uint256)", +"63ad142c": "dmsrouter()", +"63ad236a": "getSupportedIDs()", +"63ad2c41": "flashloan(address,address,uint256,bytes)", "63ad803f": "EditTile(uint256,uint256,string,string,string,uint256)", "63ae10fe": "getClientProviderUID(address)", "63ae2bae": "updateUserCertification(string,string,string,string,uint16)", "63ae71ca": "affiliateProgramWalletAddress()", "63ae8d6c": "setBuyPrice(uint256)", +"63ae9f6e": "lockoutPeriods(address)", "63aea3e0": "PlayerInfo(uint256)", "63aec5ce": "getActiveUserLists()", +"63aef682": "confirmUpdate(uint256,address,uint256,uint256,uint256)", "63af8570": "tokensToGenerate(uint256)", "63b03896": "gcd(int256,int256)", +"63b041ec": "addTokentoVault(address,uint256,uint16,uint16)", "63b0545f": "transferfrom(address,address,uint256)", "63b0a5c3": "IdentityRegistry()", "63b0e66a": "helper()", "63b1152a": "releaseVault()", +"63b13f18": "getMinTokensToRebase()", "63b1806f": "NewReferralTransfer(address,address,uint256)", "63b20117": "totalTokensSold()", +"63b22b3c": "getcurrentBlockNumber()", +"63b22e09": "IssuanceRatioUpdated(uint256)", "63b2c2a9": "unlockTeamBBT(uint256,string)", +"63b2eca8": "totalRaisedInETH()", +"63b327d7": "approve_724(address,uint256)", "63b3c007": "canDefrost()", "63b3f4e6": "WinnerPayedTicketBought(address,address)", +"63b4062c": "save(address)", +"63b41fe9": "callback(uint256,bytes32[])", "63b452fb": "ICO_RATE4()", "63b45bd9": "socoreCheck()", +"63b4c527": "_supportMarkets(address[])", "63b4f786": "about(address,uint256)", "63b56431": "PRCT100_ETH_OP()", "63b57e34": "remainCap()", +"63b5ac41": "wethDeposit(address)", +"63b5d5e6": "tokenSaleZOOMEN(address)", +"63b5e132": "setHodlerPool(address)", +"63b5f015": "setExitFeeRatio(uint256,uint256)", "63b6240d": "computeEndowment(uint256,uint256,uint256,uint256,uint256)", +"63b635ea": "groupSize()", "63b68040": "lastBlock_v14Hash_uint256()", "63b6b31f": "transferBalance(address)", "63b700ff": "getStoryExpiryTime(bytes12)", "63b75b59": "setAssetValue(uint64)", +"63b7e173": "masterBuilderContract()", "63b7f00a": "calculatePercentsFor(address)", "63b80379": "AcceptDiscipleOffer(uint256)", "63b82524": "ethReceivedPresaleTwo()", +"63b84076": "dollarPriceToSell()", "63b851b9": "updateMinimumEpochInterval(uint256)", "63b87bb8": "openSale(uint256,uint256,uint256,uint256)", +"63b8817c": "getPaid(address)", "63b8bd44": "getBalanceofEthAgent()", "63b8f7f7": "W4T()", +"63b94531": "claimArtem(address[],address[],bool,bool)", +"63b9a0e6": "initiateContract(address)", "63ba26fa": "QwasderToken()", "63ba2c76": "toUintThrow()", "63ba5e44": "fundem()", "63ba7319": "BUILDING_PRICE()", +"63ba75f5": "setHash(address,string)", +"63babb0c": "monitorProxyUpdate(address[])", +"63bae7c3": "executeDailyLimit(address,address,uint256)", "63bafb96": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"63bb23be": "claimAllPendingReward(uint256)", "63bb51a9": "setHash(address,bytes32,address,bytes32,uint256,uint256)", +"63bb82ad": "didMine(bytes32,address)", "63bbe1b5": "transferAuthorizations()", +"63bc6c4a": "userDebtState(address)", +"63bc7477": "disperseNFTs(address,uint256[],address[])", "63bce4e7": "softCapUsd()", "63bd1d4a": "payout()", +"63bd3794": "getAccountCU(address,uint256)", +"63bd7f3b": "AddedToKyc(address,uint256,uint256)", +"63bd97c3": "setQueuePeriod(uint256)", +"63be2030": "ASSET_LIABILITY_MATCH_THRESHOLD()", "63be8fc8": "createNew(address)", +"63beafef": "addAUniToken(address,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)", +"63bfa88b": "passedDelay()", +"63bfbe9c": "setDBEthOracle(address,address)", "63bfe3d8": "SkillBeatsLuck()", "63bfe52a": "addAddressToCraneList(address[])", +"63c05443": "incrementIndirectly()", "63c05650": "addAddress(address,uint256)", "63c06fe9": "mintForwarder(uint256,bytes32,address[],int256)", +"63c099f7": "updateNode(address,string,uint192,uint64,uint256)", +"63c0d450": "Refund(address,bytes32,string,address,uint256)", "63c194f1": "NTFoundationAddr_()", "63c1b753": "getAddressIndex(uint256)", +"63c1f82b": "getDivdDate()", +"63c2558a": "MINER_4_HOURS()", "63c281a1": "hitFoundationBalance()", +"63c28db1": "getStakedTokens(address)", +"63c2a20a": "userRewards(address,uint256)", +"63c2b352": "apid(uint256)", "63c3600b": "__stringToUint(string)", "63c36549": "QueueIsEmpty()", "63c37984": "thirdExchangeRatePeriod()", "63c3e2e3": "clearTransferValue(uint256)", +"63c40d85": "addToPool(uint256,uint256,uint256)", "63c43415": "view60()", "63c439a6": "secondCrowdSaleDate()", "63c454ca": "ifFreeze(address)", "63c4f031": "stop(bytes32)", +"63c509d5": "refund(bytes16,address)", +"63c54f3b": "getarchiverent()", "63c6082f": "buyWithCustomerIdWithChecksum(uint128,bytes1)", +"63c6292e": "lookParams2()", +"63c64885": "aCiap()", "63c65056": "TradeEthShop(uint256)", +"63c65dd5": "readTest()", +"63c699a4": "containsOrder(uint256,bytes32)", "63c69f08": "getUserOrders(address)", "63c6fe04": "addCities(bytes32[],uint256[],uint256[])", +"63c766b9": "setLimitPerWallet(uint256)", "63c78e87": "withdrawEtherFromTrade(uint256)", "63c7d473": "GoldAmountMelted()", +"63c90b01": "invent(uint256)", "63c988f9": "isAlive(uint8[176],uint8)", +"63c9f725": "updateRateDelay()", +"63ca1cd4": "LUCKY_VERIFIER(bytes)", +"63ca4e21": "getPaymentQueue()", "63ca7aaf": "FeeUpdated(address,address,uint256,uint256)", +"63caa0cb": "AppSet(string,uint256,address)", +"63cadac3": "stake9m(uint256)", "63cb2afb": "reserve1Address()", +"63cb2d21": "ChangePreSale(address)", "63cb344e": "setNctEthExchangeRate(uint256)", +"63cb4843": "bitwordsCutOverride(uint256)", "63cbab8c": "SELLER_STEP_1_OPEN()", "63cc23ae": "Lesson_4(address,uint256)", "63cc4aa2": "transferRemainingTokens()", +"63ccb71e": "setTokenLengthLimit(uint256)", "63ccedfe": "MensariiCoin()", "63cd1c51": "_createLottery()", "63cd1da7": "dspcoin()", "63cd44c9": "GetType(bytes32)", +"63cd6106": "checkEmergencyTime()", "63cd99cb": "moo()", "63cdcc57": "motionConfirming(uint256)", +"63ce49a0": "setPassNeeded(uint256)", "63cea450": "closePresale()", "63ceb60d": "sponsor(uint256,address)", +"63ced092": "exitPool(address,uint256,uint256[])", "63cf1442": "JACK_DIST()", "63cf2ef3": "limitLessThan(uint256,uint256)", "63cf6ffa": "sellFish(uint16,uint16,uint8,address,uint256)", +"63d03945": "crowdSalePool()", +"63d03c5b": "checkUSDTAmount()", "63d06dd4": "createContractPow(string,uint256,uint256)", +"63d070a5": "safeLockGem(address,uint256,uint256)", +"63d0877e": "GetUserCommission(address,uint256)", "63d08ae5": "Timebankc(uint256,string,string)", +"63d0ac72": "removeLevel1AddressForOwnershipSale()", "63d1055c": "proposeGame(string,string,uint256,bytes)", +"63d1060c": "chainlinkETHUSDAggregator()", +"63d1302c": "fromAddress()", +"63d1347b": "transferCOREOut()", "63d177e6": "unpauseICO()", "63d17806": "operatingFund()", +"63d1a1aa": "updateX6(address,address,uint8,bool)", "63d1e70e": "PHXroll()", +"63d25276": "dealChangedStatus(bytes32,bytes1)", "63d256ce": "revoked()", +"63d26fe1": "EHashToken()", +"63d28cd0": "minimumBalanceForClaim()", +"63d28fc4": "zzznapV2()", "63d29135": "SetEventData(uint256,string,string)", "63d292d7": "STQCrowdsale(address[],address,address,address)", "63d2be9d": "ratingOf(uint16)", +"63d35d70": "pcsRouter()", "63d36c0b": "calculateFinalPrice(uint8,uint8,uint256,uint256,uint256,uint256)", +"63d3fb0c": "changePrintingFee(uint256,uint256)", +"63d44fae": "reporter_()", "63d494ea": "becomeVoter()", "63d4d4a9": "bonusRateInPercent0()", "63d5243a": "getDaysPassedSinceLastTeamFundsBallot()", +"63d53032": "_totalSupplyPerPool(uint256)", +"63d54188": "setPairAddr(uint8,address,address)", "63d5502f": "presaleCap()", "63d578c5": "ApolloSeptemTokenSpecialPurchase(address,address,uint256)", +"63d580f7": "ownerSetFeeAddress(address)", "63d60745": "transferCreditsInternally(string,uint256,uint8,string)", +"63d611bf": "withdrawFallback(address,uint256,bytes32[])", "63d64159": "max(uint8,uint8)", "63d6519a": "CPCEPrivate()", "63d6727a": "setStartStage3(uint256)", +"63d6ac1f": "startCrowdSaleRoundTwo()", +"63d6c138": "adjustMinDepositPeriod(uint256)", +"63d7036e": "UniSwapSNXContract()", "63d74226": "add_bounty()", "63d7edb9": "VRCOIN_DECIMALS()", +"63d8236e": "GoldUnhold(address,uint256)", +"63d84b9f": "executeTransaction(uint256,address,bytes,address,bytes,uint256[],bytes[])", +"63d859df": "RoundStart(uint256,uint256)", +"63d86866": "isGenePool()", +"63d8882a": "unpauseDeposits()", "63d8c5b7": "RefundVaultWithCommission(address,address)", +"63d8e2ae": "poolRouterContract()", "63d91851": "PUBLIC_CROWDSALE_CAP()", "63d93f88": "transferFromWithoutAllowanceTest(address)", +"63d9491f": "GAS_TOKEN_USER_ROLE()", +"63d984eb": "getValueWST(uint256)", "63d9b4b1": "sendGift(address,uint256)", "63d9b770": "exploit()", +"63d9bc0f": "getMCR(bytes32)", "63d9df85": "presaleContract()", "63da5531": "tokenPerUsdNumerator()", +"63da5bb0": "stakeAgeOf(address)", "63da9cf8": "signAttribute(uint256,uint256)", "63db30e8": "minInvestedAmount()", "63db3e63": "IPST()", +"63dc36e9": "setCommon(uint256,uint256,uint256,uint256,uint256)", +"63dc3b0e": "initDemo(uint256)", +"63dc4f95": "vaultInstance()", "63dc5400": "queryCurrentContractFunds()", "63dcf376": "offChainPurchase(address,uint256,uint256)", "63dcfa9e": "athleteAlreadyClaimed()", @@ -57191,16 +104696,27 @@ "63de5323": "applicants(uint256)", "63de6ad6": "purchaseCard(uint64)", "63de882b": "wlStopBlock()", +"63dea9fa": "oscarCash()", "63deb2c5": "changeMemberAddress(address)", +"63ded6bb": "TokenExchangeCreated(address,uint256,uint256)", "63def590": "untrustClient(address)", +"63df0ef7": "gameContractAddress()", "63df9769": "setReached(bool)", +"63dffca7": "blokcsMined()", "63e0c2f8": "whitelistAccount(address)", +"63e0cf4a": "accountRecoveryDisabled(address)", "63e0f8c3": "StanleyNickels()", "63e0f8c7": "referalBonus()", "63e12cdc": "addCCUser(bytes32)", "63e16fff": "nextGen()", +"63e17553": "grgAssetProxy()", +"63e1792e": "withdrawRemainingNewTokensTo(address)", +"63e1cbea": "toHexString(uint256,uint256)", "63e1d57c": "getMaxSize()", +"63e22be2": "change_region_admin(uint256,address)", +"63e25842": "seeDelgated(address)", "63e27a63": "unlockTeamTokens(address)", +"63e2a232": "addValidator(address,string)", "63e2c349": "transferTokenAndLock(address,uint256)", "63e321fe": "setDefaultHashes(uint8,uint8)", "63e33e96": "totalSupplyUnits()", @@ -57210,34 +104726,61 @@ "63e49fcd": "startPtopDeposit(address,address,bytes32,uint256,uint256)", "63e4bff4": "giveTo(address)", "63e4e5cc": "bountyPercentage()", +"63e52aee": "makeWithdrawal(uint256)", +"63e54bb1": "_borrow(uint256)", "63e561b6": "checkOrder(uint32[])", +"63e5ba97": "changeBlacklistedSellFee(uint256)", +"63e60230": "codeVersion()", "63e60df5": "GolemNetworkToken(address,address,uint256,uint256)", +"63e73625": "testGetPriceForAssetAmountMulCollatRatio_Success1()", "63e79315": "TokenERC20(uint256,string,string,uint256)", +"63e7e4d6": "futureGame()", +"63e857d6": "ownerUpdateMinAmount(uint256)", +"63e896b6": "waste_storage(uint256)", "63e8dd96": "getCurrentOwners()", "63e94cee": "getStage0End()", "63e95a3c": "isNegligable(uint256,uint256)", +"63e9c30f": "tittyVotes(uint256)", +"63e9cad6": "_WHITELIST_MODE_ON_()", "63ea0143": "setTotalDeposit(uint256,address,uint256,address)", "63ea6e44": "NewKing(address,uint256)", "63eaa14d": "relock(address,uint256,uint256,int256)", "63eac2d4": "getMyFalcon()", +"63eade47": "setWindow(uint256)", +"63eaf485": "InvalidTakerFeeTokenError(address)", +"63eb3992": "encodeStaticCallAssetData(address,bytes,bytes32)", +"63eb4286": "updateMaximumStake(address,uint256,uint256)", "63eb963a": "dat()", "63ebb3cf": "isValidSubmitter(address,bytes32)", "63ebd4ff": "getFunctionAuthorized(address,address,string,bytes32)", +"63ebe109": "stakebullshit(uint256)", "63ebf801": "ChelleToken()", +"63ec31b9": "userMinted()", "63ec3eb5": "WHENToken(string,string,address,address,address)", "63ec96b7": "LogVictory(uint256,uint8)", "63ed6d5d": "LogWhitelistRemove(address)", "63eda29d": "prevSeriesSelloutHours()", +"63ee71bb": "rePlayIn()", "63ee7c8d": "totalEscrows()", "63ee8b88": "ico2Sold()", "63eeb79a": "setMinEsteemAmount(uint256)", "63eed1d7": "Alice(address)", +"63ef1627": "releasePeriod()", +"63ef65a5": "rewardsReleased()", "63ef8d9e": "resetLotto()", +"63efaa35": "createAuction(string,uint256,string)", +"63effc74": "playGame(address,address,uint256,uint256)", "63f019f6": "canBurnSecurity(address,uint256)", +"63f030b8": "pendingXeti(uint256,address)", +"63f04b15": "fundsToken()", +"63f04d1a": "batchwithdrawfee(address,uint256)", "63f07aa4": "preSaleTokens(uint256,uint256)", "63f0ae2e": "ProfitDelivered(address,uint256)", +"63f0b157": "createCover(address,address,bytes4,uint256[],uint16,uint8,bytes32,bytes32)", "63f0ca5a": "BOUNTY_TOKENS()", +"63f0dc32": "fullRewardRate()", "63f114f2": "checkWithdrawValueForAddress(address,uint256)", +"63f12623": "_trytoken()", "63f160e6": "sentReveal(uint256,address)", "63f1a089": "_mint(uint256,uint256,uint256)", "63f1a9dc": "LogInvestorMigrated(address,uint256,uint256,uint256)", @@ -57245,93 +104788,188 @@ "63f225a7": "addLOCtoLHT(address,address)", "63f22c24": "checkDelegation(address)", "63f2493f": "settleETHBatch(address[],int256[],uint256,uint256)", +"63f289d9": "recordIncomingFloat(address,bytes32,bool,bytes32)", "63f32f63": "Price(uint256)", "63f3dbe5": "VESTING_CLIFF()", +"63f41624": "getCurvePrice()", +"63f44678": "distributionInfo(uint8)", +"63f44d1e": "bonusReceived(address)", +"63f5563b": "ask(address)", "63f55fc0": "setHolderGroup(address,uint256)", "63f5679e": "changeDragonsStatsContract(address)", +"63f5832a": "putdree()", "63f6100d": "buySome(uint256,uint256,uint256,uint256)", "63f6271f": "LEGLToken()", +"63f68693": "debtCache()", +"63f6d4c8": "rebaseLag()", +"63f705ba": "totalPurchasedBUSD()", "63f75343": "setF2mAddress(address,address)", +"63f76a6a": "test1(address,address)", +"63f76b71": "initialize(uint256,address,string,string,string,uint8)", +"63f781e4": "batchInfo(address,uint256)", +"63f78edf": "MAX_BROS()", +"63f8071c": "getTokenID(address)", "63f80de3": "issueCoin(address,uint256,uint256)", "63f8a211": "sellOneStep(uint256,uint256,address)", +"63f9109e": "transferExact()", +"63f9a0b2": "JoinCarveUp(address,uint256,uint256)", "63f9cb0e": "HLWCOIN()", "63fa32f1": "newWinner(uint256,uint256,address,uint256)", "63fa5716": "changeSoulReward(uint256,uint256,uint256)", "63fa9888": "PredatexDua()", +"63fad85e": "fix(bytes32)", +"63fb2929": "GetOrdersAmount()", "63fb5a1a": "putBuyOrder(address,uint256,uint256,uint256)", +"63fb716a": "_balances()", "63fbc7bc": "expectPayment(bytes8,bytes32)", +"63fc2d71": "printMediator()", "63fc98e3": "judgeEnableForTransfer(address,uint256)", "63fcabcb": "BilancioMinimoAccount(uint256)", "63fcf5de": "addtoContributos2(address,address,uint256,uint256)", "63fd420c": "payoutMining(uint256)", "63fd7552": "owedAt(uint256)", "63fd7eb0": "chickenOf(address)", +"63fd8188": "addStageOnePool(address,address)", "63fd91dc": "signUpForTournament(uint256[])", "63fd9e38": "minInvest()", "63fdca37": "HitCash()", +"63fdf812": "approve_71(address,uint256)", +"63fe3e3a": "wbnbAddress()", "63feeaaf": "smartContractStartDate()", "63ff195d": "stakeOnBehalf(address,uint256,bytes32,uint256,uint256,uint256)", "63ff6125": "donateToFeePool(uint256)", +"63ffe50d": "getMyFullBalance()", +"63ffec6e": "getEconomicalModel()", +"64000824": "getVoteCastersRewards(uint256)", "64004ea5": "getUserTotalPromoBonus(address)", +"640053e8": "E2B(uint256)", "640075f3": "isPositionClosed(bytes32)", "64009184": "threeHotHoursEnd()", +"6400e385": "reinitialize(address,address,address)", +"640146c0": "standShare()", "64017ea7": "submitExit(uint64,address,uint256,address,uint256)", "640191e2": "channelManagerAddresses()", +"6401d28c": "Bundle(address,address,uint256)", "64020842": "isDisavowed()", "640241b8": "acceptOnwership()", "64027fbb": "minbet()", "6402aca9": "getAllCardAddressesPriceOfOwner(address)", "6402efd3": "tier2Rate()", +"6402f065": "burnoutStepCount()", "64030441": "addCardsHash(uint256,string)", +"64039468": "debug_claimHistory_length()", +"64039d41": "NewTokenBuyRequest(address,string)", "6403a9ed": "getVoteCountForOption(uint8)", +"640415bf": "stake_token()", +"64045c97": "set_lock_list(address,uint256)", +"64046c95": "getZeroExV3OrderDetails(bytes32)", "6404865e": "OneOhana()", +"6404bc04": "RainbowToken()", +"6404e3aa": "_onlySynth()", "6406605b": "MetadataUpdated(uint256,address,string)", +"6406b6d0": "modifiedUnipool()", +"6406c10c": "burnRequests(uint256)", +"6406ca5f": "rebaseDelay()", "640708d6": "PRIORITY_SALE_START()", "64070b6f": "p_setNextRoundSeedPercent(uint256,uint256)", "6407e432": "mintTokens(uint256,address,address)", "640853bb": "amountSoldPerPeriod()", +"6408af7a": "bsc()", +"6408f9c0": "addArtItem(uint256,string,uint256)", "640959bc": "getQuoters()", +"64095b4f": "withdraw(address,uint256,uint256,uint256,uint256)", +"64097634": "getUserOffer(address,uint256)", "6409a4e3": "giveTokens(address,uint256,string)", +"6409f921": "rewardClaim()", "640a404a": "getgamecardpos(uint256)", "640a4d0c": "_deposited(address,address,uint256)", +"640ac176": "aTokenAssignments(address)", +"640b52a0": "yourStakedEMax(address)", "640bdd70": "setDividendFee(uint256)", +"640c1e47": "currentPulse()", "640c3dbd": "isChipPassword(uint256,string)", +"640ce709": "getEstimatedTokenforETH(address,uint256)", "640d3017": "SetMinSum(uint256)", +"640d37ee": "_playerInfo(uint256)", "640d84b5": "SetApplicant(uint32[],uint64[],uint32[],uint64[],int256,uint64[])", +"640e37a8": "Granted(address,uint256)", +"640e48f6": "looser()", "640ec47a": "assertTrue(bool,bytes32)", "640efb0d": "setTravelPrice(uint256)", +"640f0fea": "bproSpotDiscountRate()", +"640f124f": "_curvePool()", "640f244b": "findSuitableGen()", +"640f310e": "forLiquidity()", +"640fa882": "mineAndMint()", "640fe1e9": "availableForWithdraw(address)", "64100038": "deleteUserClaim(address)", +"64101d6d": "teamActivationGain(uint256,uint256)", +"64103606": "JudgeResponse(address,uint256)", "64109848": "tokemon20()", "64109ae0": "MAINT_PRICE()", "6410c41a": "priviledgedAddressBurnUnsoldCoins()", +"6411140a": "breedingPrice()", "6411273f": "tapFab()", +"64126d98": "tokenTransferCount(uint256)", "6412aeb1": "setBountyTokens(uint256)", +"6412bb71": "cooldownExpiryTimestamp()", +"64138230": "listed(address)", "641446eb": "splitPayment(uint256)", +"64156fed": "estimateAccumulated(address)", "641579a6": "setMultiplier(uint256)", +"641581cc": "greatWithdraw()", "641620a2": "createMulti(uint256,uint256)", +"64162f0e": "showAddrs()", +"641657cb": "setStop(bool)", +"6416c183": "isTokenMapped(address)", "6416ec30": "Geet()", +"6417803a": "poolReward(uint8)", "64179c1b": "ActivatedContract(uint256)", "6417c08b": "implementsERC721d()", +"6417d7b0": "developerTokens()", "6417dec3": "setHSShopSaleFee(uint256)", "6418345e": "updateMinimumInvestment(uint256)", "6418b903": "transferRewardPool()", "6418f643": "ClaimBlessings()", +"64193637": "registerplayername(string)", +"6419bcdb": "addAdmin(bytes32,address)", +"6419cfaf": "totalStakingWeight()", +"6419eb06": "deleteValue(bytes32,string)", +"641a1f05": "getArtworkDataHashForId(uint256)", "641a5f66": "getSendCoin()", "641a8cb3": "MANHATTANPROXYBRDWY()", "641ad8a9": "poolState()", +"641ae106": "tradersVolumeUsedInETH(address,address)", "641b58c2": "checkBet(uint256[],uint256[],uint256[],uint256,uint256)", +"641b6dfc": "WithdrawTokenEvent(address,address,uint256)", "641bbdfe": "claim(uint256,uint8,bytes32,bytes32,uint8)", +"641bda3d": "_revocable()", +"641c108f": "lastIDCount()", "641ca23f": "availableICO()", +"641ccd83": "start(uint256,uint256,uint256)", +"641d22d1": "insertVin(bytes32,string,string,string,string,string,string,string)", "641d55e0": "buyClixToken()", "641d6075": "getDailyWinners()", +"641d7383": "updateCommissionName(uint256,string)", "641e3f15": "notifyTokenIssued(uint256,uint256,uint256)", +"641e579a": "RemovedMetaData(uint256,address,string,uint256)", "641e6b9d": "TestingEnabled()", "641e8cca": "updateGameProprietaryData(uint256,string)", "641e90de": "price5()", +"641ec7ff": "foundersTokenVesting()", +"641eee02": "addUserData(address,uint256,string,string)", +"641ef0ca": "pendingTNI(uint256,address)", +"641f11ea": "stakeFeeTo()", +"641f359f": "matchesRegisteredCodeHash(address)", "641f3b46": "isTokenExchange()", +"641f7d19": "ForceCollectEvent(uint256,uint256,address)", "641f83a1": "calcEnvHash(bytes32)", +"641f974d": "totalPariticpants()", +"641ff325": "updateProposeDelay()", +"64202c9f": "approve(address[],address)", +"642045fe": "submitNullVote(address,uint256[2],uint256[3],uint256[3],uint256)", +"64204888": "buy(uint256,uint256,uint256,uint256,uint256)", +"64208f28": "MCD_SAVER_FLASH_LOAN()", "6420e71c": "rateForPhase1()", "64217bdf": "requestInterest(uint256,uint256)", "6421fc04": "LockedMANA(uint256)", @@ -57339,6 +104977,8 @@ "6422816b": "betBLenght()", "64228857": "getRevisionCount(bytes32)", "642289f2": "MarketEnabled(address,address,address)", +"6422bf16": "approve_592(address,uint256)", +"6422ca16": "lastHarvested()", "6423690f": "SmartDice()", "64239cce": "purchaseUpAndSpend(uint256,uint256,bytes32)", "6423b5f0": "miniMeToken()", @@ -57347,23 +104987,44 @@ "64245502": "STRegistrar()", "6424bd8c": "Remove()", "6424d686": "getEngineerCurrentVirus(address)", +"6425242f": "LogSalePaused(bool)", "64253d2f": "HashnodeTest()", "64256611": "collectedFunds()", "6425fbed": "getJobStatus(bytes16,address,address,uint256,uint256)", +"6426354e": "initialize(address,address,address,address,uint256,uint256,uint256,address)", "64265b1a": "share_transfered(string)", +"6426a220": "Unhalt()", +"6426b1e4": "maxPlayer()", +"6426be48": "setPaused(bool,bool)", +"6426d53d": "claim(bytes,bytes[])", +"64270164": "callsIntoNoDelegateCallFunction()", +"64278fe4": "convertTokensToTarget(address[],uint256[])", "6428366a": "payToGorgona()", +"64283ad6": "setMintingPool(address)", +"642852d5": "isSupplyLessThanTenMillion()", +"642870bd": "addJoyHolderCollab(uint256,uint256,uint256,bool)", "6428925d": "toSTAR(uint256)", "6428a652": "setPornstarsContractAddress(address,address)", +"6428a8c0": "platformFund()", +"6428e36c": "NnN9H7HH797h9()", "6428fed4": "pendingJackpotForWinner()", "6429161b": "createSaiLimitedEdition(uint256,address)", +"64295ca0": "createPancakePair()", +"64298618": "Sale_status(bool)", "642ab4b1": "lastBidTime()", +"642ad54a": "myDividends(bool,address)", "642b1759": "getMerkleLeave(uint256)", "642b4a4d": "mainNetLaunchIncentiveReserveWallet()", "642bdd15": "calculateNewPrice()", +"642c0199": "startAirdropSMTX(uint256,uint256,uint256,uint256)", "642c53e2": "GetData(bytes32,string,bytes32)", "642c7aa2": "snatchHero(uint256)", +"642ca8a5": "imagesJsonHash()", +"642cb19c": "collecter()", "642d345c": "byMaximum(bytes32,uint256)", "642d63a3": "buyLottery(uint8)", +"642d8744": "unlockAccountFromSendingTratok(address)", +"642dbbd8": "convertToMIX(address)", "642dfe55": "Bitmos(uint256,string,uint8,string)", "642e8271": "NigeriavsArgentina()", "642f1ddc": "nome_candidato_da_indice(uint256)", @@ -57372,104 +105033,191 @@ "642f825a": "randomPetAuraBoost(uint64,uint8)", "642fd0f6": "getPixelColour(uint256)", "64308a6a": "_getPartSkillColor(bytes,uint256,uint256)", +"643090bc": "pendingFee()", +"64312275": "setContractDB(address)", "643124cf": "INZEI()", +"64316d67": "withdraw12()", "64319ae6": "updateUserEmail(address,string)", +"6431e0bd": "removeShortCurrency(bytes32)", +"6431ee11": "registeredLawyerNoOf(uint256)", +"64321507": "getCheerfulness(uint256)", "64322c9c": "drawingIdToCollectibles(uint256)", +"64323665": "DividendsPaid(address,uint256,bytes32)", "64325ddb": "currentClaimPrice()", "6432679f": "getUserCapInWei(address)", +"64326be2": "oneInt(int256)", "64326c71": "getTotalGas()", "64329400": "setHardParticipationCap(uint256)", "6432dc4e": "sell_ppc()", "6432e3cd": "CaDataContract()", "6432e9e0": "calculatePayrollRunway()", +"64336cd0": "esmFab()", "6433ef42": "adjustWithdrawRate(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"643419e1": "isMatchValid(uint64)", "64341c0c": "getIPFSCode(bytes32)", +"643515f5": "approve_753(address,uint256)", +"64353345": "setPerfExemption(address,bool)", "643537aa": "getBFEX(address)", +"6435914e": "handleBridgedTokens(address,uint256,bytes32)", "64362587": "SetRevealBlock(bytes32,uint32)", "6436434e": "getAddressDnaIds(address)", +"64369525": "houseCost()", +"6436a751": "approve_841(address,uint256)", "6436b1b9": "getSpawningForCount(address)", +"6436f189": "receiverExecutePayment(uint256)", "64370755": "removeDistributionSources(address[])", "64371977": "set(uint256,string)", "64377452": "getUserHash(address)", +"64377fe4": "jackPotStartTime_()", "64379150": "setNumberClaimToken(uint256)", "6437ab0b": "checkCommitPeriod(bytes32)", +"6437ceaf": "removeIndividualDailyRestrictionMulti(address[])", +"643835f9": "setAirmoonPerBlock(uint256)", +"64383e93": "LotteryResult(address,address,uint256,uint256)", "64385828": "setDataColla_AB_01(string,string)", +"643880d1": "_eETH()", +"6438a310": "debug_harvest(uint256,uint256,uint256,bytes32,bytes)", "6438c43e": "getCurrentSchellingRound()", "6438f449": "noviceDungeonId()", "64392a80": "balanceOfOwnerInVault(address,address)", "6439437e": "cloneIt()", +"64399a7f": "collectSwapFeesForBTC(address,uint256,uint256)", +"6439bd23": "DepositIn(address,uint256,uint256)", "643a7695": "verifyParticipant(address)", +"643a81dc": "tcore()", "643ac0bd": "_unregisterAttack(bytes32)", "643aff0f": "investorWallet()", "643b18b6": "teamWallet_1()", +"643b29a1": "firstActivate()", +"643b2d60": "isApprovedConsumer(address)", +"643b81bf": "calculateProfitAfterTarget(address,address,uint256)", +"643b9340": "calcTotalEarnings(uint256)", +"643c4732": "rebaseOrbi(int256)", +"643c512d": "TimeOfInvestments(address)", "643c6d1f": "PureChainToken()", +"643cc613": "transferForTheSender(address,address,uint256)", "643ce525": "teamLimit()", "643d1be5": "setMainSaleStart(uint256)", +"643d56f7": "liquidityLoop()", +"643d6770": "cloneToken(address,uint256,string,bytes32,uint256,uint256,uint256,bytes32,bytes32)", "643d6dc0": "getInfos()", "643d71a2": "KODB(address)", "643e1aa5": "SetStartTimeTLP2(uint256)", "643e7365": "initialSaleContract()", "643e77d8": "calculateProfit(uint8,uint256,uint256)", +"643e927b": "Deposit(address,uint256,string)", +"643edef9": "minterApprove(address,uint256)", +"643ef9d1": "MARKETING_FEE_DIVIDER()", +"643f0e2a": "setFsTKAuthority(address)", +"643f2028": "Tim(uint256)", +"643f672a": "listOfPhases(uint256)", "643f7cdd": "DAOpaidOut(address)", "643f9b72": "SherolexToken()", "643fcd27": "addieren(uint256,uint256)", +"64404a4a": "updateSalePrice(string,uint256)", "64422ede": "createPoolsIfNeeded()", "64422f3c": "multiDeltaBalances(address[],address,address[])", +"64423739": "AuditLog(bytes32,string)", +"644241db": "renounceDistributor()", "64425055": "returnedDataDecoded()", "644280e2": "tokensForBounty()", "6442af8d": "_totalRemaining()", +"644315b7": "_updateToken(address)", +"64438bbe": "editState(uint256,uint256,uint256,uint256)", +"6443eadb": "updateTimeline(int256,int256,uint256)", +"64441529": "connectxPerBlock()", "644443ed": "addContractRole(bytes32,string)", "64445d9e": "adminEditBallotOption(uint32,uint32,string)", "6444a288": "setMinTokenForSP(uint256)", +"64451c2e": "_getBorrowAmountAndRate(bytes32,uint256,bool)", +"6445484c": "showReserves(address)", "6446169b": "sellStar(uint256,uint256)", "64461a55": "Synergy(address)", +"64464c36": "DETO()", +"64466181": "getUserLostsToId(address)", "6446a339": "addAddressToPublicBuyerList(address)", "6446afde": "getMappingElement(uint256)", "6446ebd8": "deleteResources(address,address[],bytes4[])", +"6447657a": "viewUserReferralMatrix1(address)", +"64478d6e": "jiaoziPerBlock()", +"6447d208": "finishRegistrationPhase()", +"6447fb6c": "addMinePool(uint256)", +"64482f79": "set(uint256,uint256,bool)", "644843f3": "LogNote(bytes4,address,bytes32,bytes32,uint256,bytes)", "6448adc6": "tierLevel()", "6448b46f": "pushCap(uint256)", "6448b6cb": "closeVaultAccess()", "644998ae": "maintain(int256,uint256,uint256)", +"644a3a2f": "setDcdcV(address,address)", "644a3d42": "ANKR()", "644a803d": "BlockTogether(address,uint256,uint256,uint256)", "644a9db8": "sign(uint256,address,uint256)", "644b1d1a": "CompetitionCompliance(address)", +"644b2b9f": "gameAccountStaked(uint256,address)", "644b7a43": "getTokenByIndex(uint256)", "644b7dc6": "_isOperatorFor(address,address)", +"644b98ed": "externalTokenIncreaseApproval(address,address,uint256,address)", +"644c156b": "setRebaseOracle(address)", "644cf307": "preSaleBonus2Percent()", +"644d47ec": "stage(uint16)", +"644d5373": "lastTurnTime()", "644d8164": "getDesc()", "644d8cce": "burnMas(address[],uint256[],uint256)", +"644de046": "payRobCash(address,uint256)", "644e4e4e": "LogVotes(uint8,uint256)", "644e8b24": "getPrices(uint256,uint256,uint256[],uint256)", +"644f29cc": "dedicated(address)", "644fab74": "setTimeLock(address,uint256)", +"644fc935": "getMaxLiquidationReward(address,uint256,uint256,uint256,uint256)", +"645006ca": "minDepositAmount()", +"64500f6d": "setPartner(uint256,address,string)", +"64502b17": "updateStakingProfits(address)", +"645058b3": "holdingsAt(uint256,uint256)", +"64505cac": "investorPercentages(address)", "64506302": "okamiCurrentPurchase_()", +"6450e862": "causeStakedShare(uint256)", "6451447d": "buyoutFeePercentage()", +"64516b99": "updateBuyTokensWithFee()", "6451ab58": "activeuser()", +"64525b22": "mintTimelocked(address,uint256,uint64)", "6452a10f": "emergencybeneficiary()", "6452f344": "sayGoodbye()", "6453558e": "founderTokenWithdrawnPhase3()", +"6453ef76": "withdrawFromAssetSwap()", +"64541275": "setTransferBurnRate(uint256)", +"6454e58d": "getPlayer(uint256,address)", "6455058e": "getStakedAudits(address)", "6455780c": "getImportingParty()", +"6455b018": "WhitelistingAddressChanged(address,address)", "6455cb97": "EPTest()", +"6455cc90": "prepare(address,address,address)", "64561370": "oraclize_query(uint256,string,bytes[5],uint256)", +"6456a645": "setEncoreVaultAddress(address)", "6456d071": "addPatientReply(address,string,string,address)", +"6456e66d": "miningStateBlock()", "64571245": "withdrawATN(address)", "6457237b": "indexOf(uint256[],uint256)", +"645751af": "pair(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()", +"645a26bd": "decodeCollateralObject(bytes32)", "645a8570": "teamAndAdvisorsAllocation()", +"645a8a56": "rewardAmount(address)", "645ac00b": "transferSignership(address)", +"645ae183": "mssRewardPool()", +"645af53c": "redeem1t1FRAX(uint256,uint256)", "645b8b1b": "status(address)", "645bcd3a": "checkBasketExists(address)", "645bd436": "clearDelegateAndUnlockTokens()", +"645be1ed": "tresuryaddr()", "645c4625": "get_orderAddress(address,address,uint256,uint256,uint256)", "645c6fae": "registerContract(bytes32,address)", "645c9931": "SHPToken()", "645c9ac8": "returnMixType()", +"645cc511": "IncrementEvent(address,uint256)", "645cd046": "bundleToken(uint256)", "645d95d4": "LogBidAccepted(uint256,address,uint256,bytes32,uint256,bytes32)", "645dbfd4": "updateRandom()", @@ -57477,77 +105225,162 @@ "645dfad7": "sellATR(uint256)", "645e175c": "publicGetNote(uint64,bytes2)", "645e6ddc": "bookingBalanceOf(address)", +"645efa40": "ERR_MIN_SENIOR_RATIO()", "645f0d11": "toggleFactoryPower()", "645f754a": "OZTToken()", +"64606743": "_decode_sol_bytesN(uint8,uint256,bytes)", +"6460970d": "secondTransferAddress()", "6460c353": "PoWMiB()", +"6460fc49": "pigs()", "64610c73": "ADA(uint256,string,string)", "646156aa": "cancelTournament()", "6461ed00": "TOTAL_TOKENS_SUPPLY()", "6461fe39": "transferFromWithReference(address,address,uint256,string)", +"646215ec": "AddUserDetails(address,address,uint256)", +"64629eb2": "withdrawOrbs(uint256)", +"64629ff7": "updateSale(uint256,uint256,bool,bool)", +"646304a1": "airdropRecipients(uint256)", "64631be6": "signatureOf(uint256,uint256)", +"64632789": "getTotalAccount()", "6463d6bc": "getMaxBidder(uint256)", +"646404e0": "GetAccountIsNotLockCount()", "646439a3": "tradeStream()", "64648589": "fundICO()", "6464b107": "TRIUM(uint256,string,string)", +"646503e8": "unregisterNotClaimed(address)", +"64650b3d": "setParallelAddressProvider(address)", "6465d25a": "Aliencoin()", +"64661994": "evtFirDrop(address,bytes32,uint256)", "64663ea6": "withdrawAndSend(address,uint256)", +"6466414b": "setVars(uint256)", "646668b6": "getMaxBet()", +"64668022": "approveFor(address)", "64669d1b": "BadBitchCoin()", "6466cfa1": "changeSellFee(uint256)", +"6466e680": "calc_add_liquidity(uint256,uint256)", +"6466f45e": "claimOnBehalf(address)", +"64671561": "AddNewAttack(address,uint256,uint256,uint256,bool)", "64679356": "Controller()", "64679806": "last_number()", +"6467c09a": "getPendingOffer()", +"6467d443": "m_lastAccountEmission(address)", +"64681083": "refreshConfiguration()", +"64682797": "idleClaimThreshold()", "6468328e": "executeTransfer(address,uint256,bytes)", +"64683445": "queryAgentDPOSellRecordDetailByIndex(address,uint8)", +"64683476": "AidropInvoked()", +"64688586": "checkTokenMapping(address)", +"6468b04f": "claimReward(string,uint256,uint256)", "6468c099": "addAnimalType(uint128)", +"6468ce08": "ProposalAdded(uint256,uint256,uint256,string)", +"6468dff6": "YFIG()", +"6468e317": "tokenTotalSupply(uint256)", +"64696f97": "claimTokensFromTokenContract(address,address,address)", "6469c348": "maintain()", "6469c89b": "getNiceBets(uint256)", +"6469cfac": "nthRoot(uint256,uint256,uint256,uint256)", "6469e87f": "isKickoffEnabled()", +"646a1b87": "maxContribETH()", +"646a9cd8": "chocofi()", +"646bc0df": "getLengthOfSchainsForNode(uint256)", +"646bdd1c": "stakeAccountDetails(address)", +"646c2e33": "contentHash()", "646cd69b": "postponeDueDate(uint256,uint256)", +"646cf20a": "rand_addr()", "646cf24d": "assignTokenContract(address)", "646d4f53": "PlayX100()", "646d525a": "NetCents()", +"646d75e0": "targetEndBlock()", "646d978b": "getKudosById(uint256)", +"646db1c4": "redeemRoboTokens(address,uint256,uint256,address,uint256)", +"646e25d8": "stableAssetDecimals()", +"646e6ed3": "nothingHereMultipleComments()", "646e90e7": "getAddBal()", +"646e9172": "monthlyShareRewards()", "646eba48": "releaseTokens(bool)", "646f22c5": "getTicketsLeft()", "646f2942": "CryptoJade()", "646f7834": "lockCountingFromTime()", +"646fcc02": "_setLiquidityPool(address)", "646fe5ee": "OwnershipTransferConfirmed(address,address)", "646fec02": "ProposalAdded(uint256,address,uint256,string)", "6470db2f": "removeAllowed(address)", +"6470e276": "newMonthStartTime()", "647151b5": "sellUnicorn(uint256,uint256)", +"64723c54": "deductFromPool()", +"6472eee1": "gauge_relative_weight_write(address,uint256)", "647308ee": "verifyWithdrawSignatures(bytes32,address,address,uint256,bytes,bytes)", +"647329c9": "subscription(uint256,uint256,uint256[5])", +"64738824": "CoinIssued(address,uint256,uint256,uint256)", "64738c23": "makeOrder(address,address,address,uint256,uint256)", +"6473b1eb": "retriveETH(address)", "6473b34a": "batchAllocate(address[],uint256[])", +"6473c242": "checkTicketOwnership(uint256)", +"647440c9": "Save(address,uint256,uint256,uint256,address,uint256,uint256)", "64744d22": "getPoolDepositQspWei(uint256)", +"64748294": "lockedGNO(address)", "6474dd4c": "LuckyWorldCupToken()", +"64753050": "getPublicPresaleInvestmentLimit()", +"64757332": "getAllPoolViews()", +"6475cb14": "Inflation()", +"6475e19b": "jadeBalance(address)", "6475e3d3": "MIN_BET_AMOUNT()", "6475e47d": "DGT_contract()", +"6476d13d": "rewardTreasuryRate()", "647734b2": "setValidationAddress(address)", "64779ad7": "pausedOwnerAdmin()", +"64779ce4": "finishDocRedemption()", +"6477f91d": "noOfeventsEmitted()", "647846a5": "feeToken()", +"64791196": "getContestInfo()", +"64793df8": "foooob(address,address)", "64794403": "setAddressOfERC20Tocken(address,address)", "647aac0c": "race(uint32)", +"647aaf00": "lockinProposal(bytes32)", +"647af8e6": "unPauseTransferForever()", +"647b34bc": "getCostPerValidator()", +"647b5923": "totalBlocksProven()", "647b5ced": "pubsaleCap()", "647b6065": "tokenIdToOwnerArrayIndex(uint256)", +"647c1bd8": "fetchUnclaimed(address,address)", +"647c75e2": "supporters(address)", "647d02d2": "closeFail()", "647d5f14": "dividendinfo()", "647dd08c": "callSender(address,address,address,uint256,bytes,bytes)", +"647dfbed": "issued(uint256)", "647e61f1": "setLargeInvestorApproval(address,uint256)", +"647e8036": "getCanonicalRate(address,address)", +"647e98ee": "OrderDetail(uint256)", "647f7058": "Commitment()", +"647fb9c0": "distributedShares()", +"647fbcfd": "totalBaked()", +"647fcf18": "getAllRegisteredDerivatives()", +"647fd1f2": "PurchaseError(address,uint256)", +"647fed25": "pendingdonut(uint256,address)", "64801da1": "reliefRatio()", "64802918": "div(uint16,uint16)", +"648057ba": "calculateRewardForHeaderRelayer(uint256)", +"64806a93": "loadImplementation()", "6480d014": "preicostarted()", "64812751": "finaliseState()", +"64812ebd": "registerations(uint256)", +"648136d4": "submitVote(uint256[4],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2])", +"64814559": "storKey()", +"6481ae58": "proposolIdCount()", "6481f081": "sellVouchers(uint256)", "64821338": "hasVoted()", "648236e3": "acceptBidForSketch(uint256,uint256)", "64826b7a": "publicSaleCap()", +"6482866e": "getTotalStackedBalance(address)", "6482c535": "rateOfParking(address)", +"6482e626": "d(int256)", +"64832bb7": "userLoyalty(address)", "64832c4c": "heatUp(address,uint256)", "648345c8": "setMessage(uint256,string)", "648351b9": "MarbellaCoin(uint256,string,uint8,string)", "64836227": "notifyWatcher()", "64838603": "skinColor(string)", +"64838c63": "tenancyDeposit(address,uint256)", "6483a330": "getPeriodInDispute(uint256)", "6483ec25": "append(bytes32)", "64847739": "isProposePhase()", @@ -57562,9 +105395,11 @@ "64864ca6": "Expand(address)", "64868f97": "roundTokenLeft(uint256)", "6486aa51": "isConfirmed(bytes32)", +"64875e70": "setFeesToLike(uint256)", "64887334": "setCompactData(bytes14[],bytes14[],uint256,uint256[])", "6488c20e": "TransferableChanged(bool)", "64893fcb": "totalVestedAmount()", +"6489aba5": "decreaseAuthQuota(address,uint256)", "648a0c91": "updateExchange(address)", "648a5903": "isShortPositionExpired()", "648aa3b1": "getComponentByName(string)", @@ -57572,8 +105407,11 @@ "648b3514": "CheckpointToken(string,string,uint256)", "648b45f6": "unequipMultipleUnits(uint256[])", "648b7ce8": "Increment()", +"648b8178": "getChildChainAndStateSender()", +"648bb3b7": "sectorToOwnerCut(uint256)", "648bf774": "recover(address,address)", "648c51eb": "isMyPlanet(uint256)", +"648c5844": "certifiedCount()", "648c925e": "backToAll(uint32)", "648d6367": "DocumentaryContract()", "648d7219": "setOCG(address)", @@ -57581,66 +105419,116 @@ "648e3006": "getPurchasedTokens()", "648e49e6": "dSET_XBL_ADDRESS(address)", "648e625a": "confirmTransaction(uint256,address,uint256)", +"648e85c6": "lpUnlockTime()", +"648ec7b9": "miners(address)", +"648edd9c": "addInitialABMembers(address[])", +"648efe8b": "sendToB3(address,address)", "648f0bde": "Play(string)", "648f4f0f": "tokenStoreAddress()", "648fb06f": "mintMultiple(address[],uint256)", "648fd473": "EBRK()", +"6490206d": "getConversionRates(address,address,uint256,uint256)", +"649079d5": "affirmReferrer(address,address)", "6490c7a8": "getArea(uint256)", "64913477": "setMultisigWallet(address)", "64916fcf": "WhitelistedCounterUpdated(uint256,uint256)", +"6491768f": "cancelGrant()", +"6491c54b": "perDayBlocks()", "6491f0b7": "setLLV_edit_6(string)", +"64920f9c": "totalScrap()", "64921844": "getTimePassed()", "64928d24": "wasSaleEnded()", +"6493154a": "idToRealty(uint256)", +"649319ee": "selfDestructAt()", +"64936b1e": "getGatewayBySymbol(string)", "649371e0": "oracleCurrentInt()", "649375da": "addEarned(uint256)", "6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", "6493e64c": "upgradeTo(string)", +"64941505": "updateActivityOracle(bytes32,address)", +"64945387": "addProduct(uint256,string,uint256,string,uint256)", "6494b55b": "ceoAddCoo(address)", "6494cde1": "endTransfer()", "6494d477": "saltHash()", "649564b3": "getOtherContractParticipant(address,uint256,address)", +"6495df27": "updateBasset(address,address,int128,address[],uint256,uint256)", +"64963ccf": "RevokeExchanger(address)", +"64966f3f": "Allowed(address,bool)", "649677e1": "entranceFee()", "64968f58": "set_presale_iconiq_arbits_per_ether(uint256)", +"6496d3fc": "addWhitelistedUsers(address[])", "6497129c": "getRoundNumber(uint256)", "64976b4d": "setNplay(address)", +"64978bf3": "clRebase()", "64978c7f": "jembex()", "6497b400": "_getFashionParam(uint256)", "6497bd3a": "newPriceTicker(string)", "6497d32e": "setCCH_edit_18(string)", "6498156e": "preICOBuy()", +"6498bfe3": "renounceDevAddr()", "64994978": "setFounder()", "64996a43": "_computeCycleSkip()", +"64997e01": "setDaoWallet(address)", +"64998c31": "boogie()", "6499e2d9": "ERC777DemoToken(string,string,uint256)", +"6499f1b2": "initialize(string,string,address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"649a08bf": "processVouches(address,uint256,uint256)", "649ae9c6": "lockDate()", +"649b2b95": "create(address,address,address,bytes)", "649c07d5": "is_contract(address)", "649c0b21": "addressOfMSF()", +"649d4a48": "transferTokenOut(address,address,address,address,address,uint256,uint256)", "649d56db": "getContractProps()", "649e3c46": "createDoc(string,string,string,string)", "649eea7f": "_transferCar(address,uint256,bool)", "649efd6e": "mintForEverybody()", "649f0153": "fiatBalance()", +"649f7916": "timeLocked()", +"649f7fcf": "bomb(address,uint256,address,uint256)", "64a04d07": "ReconOwned()", "64a08260": "adminRemoveRole(uint256,address,uint256)", +"64a0a12f": "ethGemJoin()", +"64a197f3": "sendETH(address,uint256)", +"64a1d059": "shutdownSystem(address,address,address,uint256)", "64a20e2d": "getImpactDonor(string,uint256)", "64a237f4": "VEGANToken()", +"64a2808b": "_claimTokens()", "64a31b80": "getRequiredReportsPerReporterForlimitedReporterMarkets()", +"64a325b0": "Controller(address)", +"64a33980": "tokenOverriden(address,uint256)", +"64a36726": "recordAssetPriceInternal(bytes32,uint256)", +"64a36b38": "settleCondition(uint256)", "64a41399": "contributeInCreditsToken()", "64a48499": "getIntegerValue()", +"64a48ffb": "x_temp()", "64a4a5d7": "testBitsEqualSuccess()", +"64a51c16": "purchaseRegistration(uint256)", "64a5a632": "getCompanyByName(bytes32)", "64a640ef": "Bosscoin()", +"64a64d60": "getBidDetail(address)", "64a666f2": "getAuthorizedInsertAgents()", "64a68943": "dividentSent(uint256,address,uint256)", +"64a6c866": "oneInchApprovalAddress()", +"64a7601b": "updateOrder(bytes32,uint256)", "64a7cc4b": "purchase(uint128)", "64a7d7c7": "bidAuction(uint256)", "64a80c0c": "openStream(address,uint256)", +"64a819c6": "deleteLockUserInfo(address,uint8,uint256,uint256)", "64a83d8b": "_removeTokenFromTranche(address,bytes32,uint256)", "64a8a11f": "voteJUR(address,address,uint256)", +"64a8a912": "viewAirdropWINTER()", +"64a8af6f": "delICOToken(address)", +"64a8cce9": "acceptOrder(uint256,string)", +"64a98857": "_setFeelessReciever(address,bool)", "64aabe92": "tryExec(address,bytes,uint256)", "64ab23c9": "finalizeChangeStakingFees()", +"64ab2de9": "isAllowedToCall(address[],bytes[],uint256[],address)", "64ab374b": "getUnreadMessagesArrayContent(uint256)", "64ab4702": "voteWeightUnit(uint256)", +"64ab8675": "calculateRewards(address)", "64aba263": "setInternalInfo(address,uint256,uint256,uint256,uint256)", +"64abb518": "withdrawETHByUser(uint256,address)", +"64abb80b": "auctionsSetOwner(uint256,uint256,address)", "64ac12b1": "multisig(address[],uint256)", "64ac2c4a": "WavesPresale()", "64acdb77": "disablePurchasing()", @@ -57649,122 +105537,236 @@ "64adc403": "getUserRewardPayouts(address,address)", "64ae4451": "stateIs(uint8)", "64aea551": "randnum()", +"64af2d87": "marketCreationEnabled()", +"64af47cf": "get_fee()", "64afab72": "remove(address,bytes32)", "64afcf2e": "minSecondsBetweenPublishing()", +"64b013a6": "determineEndBlock(uint256,uint256,uint256,uint256,uint256)", +"64b01721": "openExchangeToken()", +"64b07f21": "deployDai(uint256)", "64b09402": "setMetadataProvider(address)", "64b13270": "registerDeed(string,string)", "64b2eb2c": "publicOfferingExchangeRate()", +"64b32c4f": "getInitCode()", "64b3302d": "safeMult(uint256,uint256)", +"64b39a14": "ZodiacIndexToOwner(uint256)", "64b3b844": "getSaleInfo(uint256)", "64b494d9": "setValInt(uint256)", +"64b4c310": "getDepositRequest(uint256)", "64b4e6eb": "payRef(address,uint256)", +"64b550b5": "transferFromManyToOne(address[],address[],address,uint256[])", "64b55e8b": "SULTANT()", +"64b576a0": "erc20_token_addr()", +"64b60700": "getBtcUsdPrice()", +"64b61d0a": "stakerByDelegateKey(address)", +"64b68018": "viewRawImageData(uint256)", +"64b6e192": "last10Info(address)", "64b7571f": "distributeDividends(address,uint256)", "64b7f1d3": "Rules()", +"64b82024": "updateCreditRate(uint256)", "64b837ab": "stopBlockjack()", +"64b87a70": "stakingRewards()", +"64b8cb3f": "partial1LiquidateNonCompliantCounterVault(address)", +"64b91bbe": "LogAddCustomSecurityToken(string,string,address,uint256)", "64b9ca08": "noAdvert()", +"64ba7150": "feesAddr()", +"64baca41": "create_present(uint256,address)", +"64bb084d": "brokerMarginRequestApproval(address,address,uint256)", +"64bb43ee": "revokeLiquidity(address)", +"64bb44dc": "coverImplementation()", +"64bb4823": "getMarket(uint256,address)", +"64bb802d": "moderation_eth_balance()", +"64bbf154": "buccperBlock(uint256)", +"64bc4be0": "productAddr()", "64bc6a74": "AllPartnersSet(uint256)", "64bc82c3": "delegateAddresses(uint256)", "64bd3066": "dispute(address,bool)", "64bd7013": "wait()", "64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", +"64be08ea": "tempBytes()", +"64be41eb": "shareTokenPrecision()", +"64be7617": "updateCardJson(uint256,uint256,uint256,string)", "64be8453": "NewUserAdded(address,address)", "64beb745": "lockOwnership(uint256)", "64bebead": "_FreeDom()", +"64bec131": "test_DSProxyWithdrawETH()", +"64bf8a70": "ChangedAdd(bytes32,address,address)", "64bfc9a5": "stopBountyMint()", +"64bff667": "WETHTest(uint256)", +"64c0a772": "NewMember(address,uint256,uint256)", +"64c0ca5c": "pull(uint256,uint256)", "64c176eb": "setSmartToken(address)", +"64c1cf33": "lastEpochExecuted()", "64c2555d": "buyDay(uint16,uint256,string)", "64c27f2a": "isOwnerOrOps(address,address)", +"64c28868": "addSignerToOracles(address[],address,string)", +"64c2a9a5": "setInitChronos(uint256)", "64c2b768": "powered_up()", +"64c32255": "withEth(uint256)", "64c33c33": "setPrice(uint16,uint16,uint8,address,uint256)", "64c34364": "hodl(uint256,uint256,uint256)", "64c37043": "buyRareItem(address,uint256,uint256)", +"64c3eb46": "mock_contains(address)", "64c403d4": "getETHx2(uint256)", "64c40bbc": "DCoin()", "64c422d0": "participantToUBObought(address)", "64c487ef": "isStoppingIcoOnHardCap()", +"64c4bc49": "playerStageAccAmount(uint256,uint256,address)", +"64c573e6": "MCNLoginCheck(uint256,string,string)", +"64c59631": "nextPlatformWallet()", "64c638d5": "withdrawTokenToClientAccount(bytes32,bytes32,address,uint256)", "64c66395": "getUIntValue(uint256)", +"64c667ee": "swapEthToPipt(uint256)", +"64c6dcfe": "transfer(uint32,uint32,bytes)", "64c76117": "endDistribution()", +"64c786d9": "authorizeExecutors(address[])", "64c79bf3": "AddresstoString(address)", "64c7b3bf": "Journal(uint256)", "64c7b78c": "addOrg(string,string,string,string,string,string)", +"64c7d661": "getTokenRecord(address)", +"64c86dda": "submitRing(address[2][],uint256[7][],uint8[2][],bool[],uint8[],bytes32[],bytes32[],address,address,bool)", "64c877f1": "depositLiquidateThePool(uint256)", "64c88d62": "calcDemurrage(uint256)", "64c8cd8c": "unlockMinedBalances(uint256)", +"64c8e821": "initLPSupply(uint256)", "64c8e825": "PooCoin()", +"64c91158": "nutsDividendsOf(address)", +"64c926ef": "joinGame(uint256,uint256,uint256)", "64c96322": "setAllocationOpen(uint256)", "64c96572": "TokenLMTC(uint256,string,uint8,string)", +"64c98c6c": "ZapIn(address,address,address,uint256,uint256,address,bytes,address)", +"64c9ec6f": "bond()", +"64ca0ac3": "setTransferGroup(address,uint256)", +"64ca20f0": "showDeployedDealsAddresses()", +"64ca23ef": "sequenceNumber()", "64ca55d0": "checkUserDivsAvailable(address)", "64ca6478": "createImage(uint256[],uint256,uint256,bytes32[],string,string,string)", +"64ca6f8f": "totVote()", "64cab0e3": "setCurrentPrizePool(bytes4)", "64caf214": "setPlayerDetectGroup(address,address,uint8,uint32)", "64cb5338": "FundedAmount(uint256)", +"64cb907c": "systemStatus()", +"64cb9701": "getSha3Result(address,address,uint256,address)", "64cbbd34": "WalletChanged(address,address)", "64cbbdc7": "addDividendsForAddress(address,address)", "64cbfdd6": "p_update_planetCryptoUtilsAddress(address)", +"64cc0d64": "decreaseAuthQuotas(address,address[],uint256[])", +"64cc2fdf": "updateTokenInfo(address,uint256,address,uint256)", +"64cc4aa5": "flags()", +"64cc59d8": "deprecated_getStakerLockedTokensOnSmartContract(address,address,uint256)", "64cc7327": "retrieve(string)", "64cc7719": "getUserDataOnEther(uint256)", "64ccd7a0": "getAutomatedReporterDisputeBondToken()", +"64cd0d3e": "purchaseRecords(address)", "64cd1f69": "requestInvestment(uint256,uint256,bool)", +"64cd490a": "swapTransfer(address,address,uint256)", "64cd4a1a": "round4TokensRemaning()", +"64cdba23": "exit(address,uint256,bool)", "64ce1068": "lockExpiration()", +"64ce9fff": "hasHarvest(address)", +"64cee260": "getTroveStake(address)", "64ceed99": "foundersTimelock()", "64cefc90": "fliqToken()", +"64cf34bd": "setMaxTimeToMaturity(uint256)", "64cf6d71": "toBytes1(bytes,bytes,uint256)", "64cf9167": "Numisma()", +"64cfaf9f": "maxPhase1()", "64d03095": "getSpecificTransaction(address,uint256,uint256)", "64d03144": "Plaak(uint256)", +"64d041b1": "mintTypedNFT(address,uint256)", "64d05519": "createLastWill(address,string,string,string)", +"64d05f4d": "parameterTitles(uint256)", +"64d0a07a": "burnMetal(address,uint256)", "64d0bbc4": "increaseGenerationCount(uint256,uint8)", "64d0d64c": "testControlCreateWithParentNotInUse()", "64d0e83b": "jackpotWinCount()", "64d12ec6": "getRevisionIpfsHash(bytes20,uint256)", "64d17c08": "setServiceTokenAddress(address)", "64d188eb": "fixAssetsAboveLimits(bytes32,bool)", +"64d1998b": "AllocatedCommunity(address,uint256)", +"64d23086": "_lastlevel()", "64d34045": "setCCH_edit_20(string)", "64d3e7c9": "ReserveToken(string,string)", "64d40354": "limitAmount(uint256,uint256)", "64d414bf": "getTokens(uint256,uint256,uint256)", "64d4702f": "getNextKeyPrice(uint256)", +"64d47403": "Set_Trading_Charge_Lib(address)", "64d4c819": "TYPE_HASH()", +"64d4d700": "sup()", +"64d51f09": "satisfiesWaiver(address)", +"64d5276a": "getCardLoyaltyPrices(uint256,uint256)", +"64d537dc": "gameNo()", "64d538d3": "StartIco()", +"64d553a1": "setGovTokens(address[],address[])", "64d563f1": "doubleClaimSegmentSlash(uint256,uint256,uint256,uint256)", "64d57a03": "GainTempStuff(address,uint32,uint256)", "64d582c0": "incentiveDistributionInterval()", "64d5922f": "pingBlock()", +"64d5bae4": "getStakeAmounts()", "64d5d024": "isValidBox(uint8,uint8,uint16)", +"64d60d91": "streams(uint256)", +"64d62353": "updateDelay(uint256)", +"64d69efe": "apy(address,uint256)", "64d6a95f": "changeGameParameters(uint256,uint256)", +"64d6f4e3": "ROLE_CREATE_VOTES()", +"64d713e2": "refMap(address)", +"64d73cf6": "BatchTransfer(address,bool)", "64d75891": "XXXXXXXX03(uint256)", "64d79f20": "internalRegisterCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", +"64d7cabc": "batchIncreaseAllowance(address[],uint256[])", +"64d7f28e": "crowdSaleBonusBPercentage()", "64d85348": "deleteOffer(address,address)", +"64d8631c": "bytesNN()", "64d905c0": "awaitingParticipants()", +"64d92f59": "membersAccts(uint256)", "64d98bd3": "ownerTransferJackpotToken(address,uint256)", "64d98f6e": "isSolved()", "64d9a9e9": "AirDropToken(string,string,uint8,bytes32,uint256)", +"64d9b232": "addPolicyAddress(address)", +"64d9d3a7": "setPoolBonus(uint256,uint256)", +"64da5dfe": "getVaultRoot()", "64da8ad3": "settleSeller(address,uint256)", "64dab033": "landmarkPriceStepDenominator()", "64dab283": "getWHGDonationAddress()", "64dad32f": "isTokenUser(address)", "64db3a8a": "buyAura()", +"64db444a": "addNewToken(address)", "64db5aa8": "ARDBatchTransfer()", +"64dbe548": "cancelOrder(address,address,address,uint256,uint256,uint256,address,uint256,bytes32)", +"64dbe78c": "light()", +"64dbfbb5": "testUserCanAdoptionPet()", "64dc68b8": "ILove0xBTC(string)", "64dc807a": "burnUndistributedTokens(uint256)", +"64dc859a": "LPTaddress()", +"64dce968": "getnowDay()", +"64dcec81": "isMonsterExists(uint256)", +"64dd48f5": "internalDecimals()", +"64dd552e": "wearRate()", "64dd891a": "attack(uint256)", +"64ddbeec": "_addSeven(uint256)", "64ddc605": "lockupAccounts(address[],uint256[])", "64dde40f": "isTournament()", "64ddedc6": "Triangle(uint256)", "64ddfa29": "getAdminAddresses()", "64de4c1d": "setTatAddress(address,address)", +"64de8a07": "collectInterestRepayment(address,uint256)", "64df049e": "protocolFeeRecipient()", "64df19da": "removeCustomTimeLock(string)", +"64df1a93": "transferDiscountFee()", +"64df21e5": "farmRewards(address)", +"64dfaff8": "isBlacklistedExchange(string)", "64dfe85e": "Dsteem()", +"64dfea06": "lastVersion()", "64e08644": "stakeRemainingToVote_Eth()", "64e0bbc5": "checkMyTransactions()", "64e19bdd": "ownerAirdrop(address,uint256)", +"64e1ab41": "TSKToken()", +"64e1e3ea": "verifyLoanOwner(address,bytes32)", "64e1f38b": "howManyKeysCanBuy(uint256)", "64e21c9e": "DirectFundingProcessed()", +"64e225cb": "changeLicenseCost(uint256,uint256)", "64e24f4b": "UpdateClientTokenAccount(address)", +"64e27ee5": "ClaimBazarSwapTickets(address)", "64e28148": "clear(address,uint256,uint256)", "64e28636": "getLateFee(address)", "64e2ec50": "collectOtherTokens(address)", @@ -57777,61 +105779,121 @@ "64e48fcd": "testResetBet()", "64e48fde": "findPossibleDelegatorsOfRaw(bytes32)", "64e4a8fb": "xaurCoined()", +"64e4dfa5": "getPrivateRgtClaimFee(uint256)", +"64e506a0": "lockTokenCollateral(address,address,uint256,uint256,bool)", "64e50fb9": "setIco()", +"64e557a8": "markExitClaim(bytes32,uint256)", "64e593c0": "setStartTimeIco(uint256)", "64e5c8be": "getRoundPrizeShare()", +"64e60b4c": "getPriceConvertFrom(address,address,uint256)", "64e62afc": "setSegmentOwner(string,uint32,uint32,string,string)", +"64e68356": "isKnownContract(address)", +"64e6ad3f": "viewMyDividendPotential(address)", +"64e73566": "communityTakeHomeRateUpdatedAt()", "64e749ff": "getPosition(bytes12)", +"64e75d53": "poolGenFailed()", "64e779b1": "unmint(uint256)", +"64e77f46": "mintCoin(string,address,uint256)", +"64e79f7e": "bonusDecimalPercentByPeriod()", +"64e7b5d6": "cancelOrder_(uint256)", "64e7e4a4": "transferNotification(address,uint256,uint256)", "64e8687f": "withdrawTalao(uint256)", "64e8d682": "pre_startdate()", +"64e9f35f": "tokenList(address)", +"64ea9576": "gameRounds(address)", "64eaa454": "crowdsaleAmountLeft()", +"64eaf48a": "swapTokenForEthUniswapWithGasToken(address[],uint256,uint256,uint256)", "64eaff54": "getSquirrelmasterReq()", "64eb7327": "_getContent(bytes32)", "64ebd70d": "the365address()", +"64ec5d22": "bonusCoin()", "64ec8bdb": "creatorWithdraw()", +"64ecb0f6": "changeNFTSupply(uint256)", +"64ecf753": "pendingOds(uint256,address)", "64ed31fe": "authVotes(address)", +"64ed41bb": "fungi()", +"64ed5467": "poolDivisor()", +"64ed74cf": "getTotalCylindersCount()", "64eda74b": "setIsFrozen(bool)", "64eded20": "_getTokenAmountWithBonus(uint256)", "64edfbf0": "purchase()", +"64ee161f": "claimingAmounts(address)", "64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", +"64ee68de": "_depositNFTs(address,uint256,uint256)", "64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", "64ef563c": "reveal_registration(uint256,address,address)", +"64efb22b": "getAdmin(address)", "64f018d8": "issue(address,uint256,string,string)", +"64f01a8f": "test2PerBlock()", "64f05fd7": "calculateWithdrawableAmount()", "64f06b39": "setPC(uint256)", "64f101f0": "closeMint()", "64f15430": "fundVesting(address,uint256)", "64f1873b": "ICOstarttime()", +"64f197c8": "getKudoerList()", +"64f2c714": "profitTHT()", +"64f3448f": "sellingWallet()", "64f39b47": "return_funds()", +"64f402c9": "Governor()", "64f40a3c": "RESERVED_TOKENS_FUTURE_OPERATIONS()", "64f42a99": "addUser(address,bytes32)", "64f4b094": "getLowestBid(uint8)", "64f54a17": "getLatestItemRaffleInfo()", +"64f5af01": "sharkPerBlock()", +"64f5e43c": "dimsum()", +"64f5f298": "DoPayment(address,address,uint256)", "64f65cc0": "setFinished()", "64f67f33": "DIPToken()", "64f6f7b9": "setup(address,uint256,uint256)", +"64f741ba": "REFBACK_PERCENT()", +"64f766b0": "snatch()", +"64f79482": "lcpEndEpoch()", +"64f8724c": "collateralBid(uint256,uint256,address)", "64f8ad1f": "get_default_approval_duration()", +"64f9016b": "output(uint256)", "64f951e9": "sessionBlockSize()", +"64fa18c0": "balancetl(uint256,address)", +"64fa203d": "GUSD_ATOKEN()", "64fa3070": "getEscrowFee(address)", +"64fa70cd": "forward(address,uint256,address,bytes)", "64faf22c": "left18(uint256)", +"64fb3d1f": "updatePlots(uint256[],uint256[],bytes7[],bytes32[])", "64fb7d68": "coinMinter(uint256,uint256)", +"64fc1ae1": "referralInterest()", "64fc2d9d": "_tryCreateEtherMonster(uint256,uint256)", +"64fd2143": "AddedWhiteList(address)", +"64fd7078": "liquidateBorrow(address,address,uint256,address)", "64fe5cde": "MAX_UINT48()", +"64fe81e8": "Remit()", +"64feb7ca": "setPublicStart(bool)", +"64fecead": "setdToken(string,uint256,address,address)", +"64fed452": "getQuarterlyPendingReward(address)", +"64ff509e": "animalsLogic()", "64ffb47b": "getTotalMicroKeys()", +"64ffd5d6": "createRule(string,uint256,uint256,uint256,uint8)", +"65001f89": "setShardsFarm(address)", +"650075a7": "mint(address,uint256,bytes32,uint256,uint256,uint256,uint256,address,uint256)", +"6500b9bb": "totalStakeDaily(uint256)", "65011760": "DOCToken()", +"6501a820": "totalearnedInterest(address)", +"6501cd73": "LPUSDBalance(address,address)", +"65020269": "valuePoolUnminingFeeNumerator(address)", "650271d2": "makeMove(uint8)", "65030adb": "RESERVED_TOKENS_ICO()", "65030e75": "setSecretContract(address,uint256)", "6503178a": "setMinVeriAmount(uint32)", "65033845": "XiaoshiToken()", +"6503442e": "updateCommissionAddress(address)", "65036ca9": "zethrBuyIn()", "6503a701": "InitiatePayout(address,string,string)", +"6503e2db": "provable_randomDS_setCommitment(bytes32,bytes32)", "6503e5ff": "mFUNDING_BONUS()", +"65045206": "linkAggregatorTimestamp()", "65045a2b": "bottomName()", "650462ab": "tokensMasterNodes()", +"650492f8": "getCharityName(address)", "650500c1": "whatIsTheMeaningOfLife()", +"65050a68": "connectors()", "65050e27": "checkCandy(address)", "65054e55": "claimSellerFunds(address,address,address,uint256)", "65058f4c": "requestPayout()", @@ -57840,6 +105902,9 @@ "650669d2": "getCompte_1()", "6506b0d6": "setData(string,string,string,string,string,string)", "6506b623": "rotateBitsLeft(bytes,uint256)", +"6506daf1": "grantRef(address)", +"6506fd68": "withdrawBalanceFromExpiredPool(uint256)", +"65074690": "getBunnyCost(uint32)", "65084b76": "OpenRegistryRules(address)", "6508978b": "updateLatestSaleState()", "65089dd8": "freezeStatsSumHours(uint256)", @@ -57850,55 +105915,86 @@ "6509c195": "setPartnerPool(uint256,uint256)", "6509e776": "CC()", "650b147d": "paidToPartners()", +"650bf531": "FeeChange(uint256,uint256,uint256,uint256)", "650c2b28": "tokensPerDollar()", "650c4226": "changeFees(uint256,uint256,uint256,uint256)", +"650ccf90": "createMarket(string,string,address,address,uint256,uint256,uint256,uint256)", "650ce14c": "registerPublisher(address,bytes32[5])", +"650ce874": "buyOpenCall(uint256,uint256)", +"650cf03f": "setPortion(uint256,uint256)", +"650cf310": "betCindex()", "650d0aa3": "ChangeFee(uint16)", +"650d1880": "tendTrigger(uint256)", "650d22e8": "countryTimeLock()", "650d5d6b": "get_status(uint256)", "650d993b": "getCustomer()", "650dd4fb": "_createCountry(string,uint256)", "650e1505": "createLock(address,uint256,uint256)", "650e85af": "setUserRoles(address,uint256)", +"650e872c": "finalize(uint256,uint256,address[],uint256[])", +"650ee0ff": "pullRequestIds(uint256)", "650ee1ee": "NewSale(uint256,address,uint256)", "650f1dd3": "isSupplier(bytes16)", +"650fdf66": "Withdrawal(address,uint256,uint256,uint256)", "651006c0": "getCreateMarketDenominationTokenValue()", "6510076f": "giveTokensOne(address,uint256)", "65103f6e": "hasFees()", "651044a2": "BitcoinpalletToken()", "6510cc17": "INITIAL_mulFactor()", +"6510eb29": "batchRedeemedTotals(uint256)", "6510ef4d": "oraclize_query(uint256,string,string[5])", +"6510f25f": "changeCommission(uint256,uint256)", "65113528": "getBoosterType(uint256)", +"65113918": "poolInactiveIndex(address)", "65114459": "getOpenPackageId()", "6511a98b": "testRegisterProduct()", +"6511d1f5": "proposal19()", "6511eadb": "marketingProfitAddress()", "65121205": "calculateDevCut(uint256)", "65121f68": "add1Y(address,uint256)", +"65129042": "decodeOrderEpochError(bytes)", +"6512966b": "updateDividendPrice(uint256)", "6512c9b5": "OwnersProductCommissionChanged(uint256)", +"6512e8cd": "StoppedCrowdsale()", "65131f63": "getMembersOfTier(uint256)", "65132ad3": "Police_3()", "651398e6": "allocateTokenForAdvisor(address,uint256)", +"6513cde6": "displayag()", "6513fafe": "resistWhiteList(address)", "65141c20": "setRemixCount(uint256,uint256)", +"651460bc": "negativeown(address,uint256,uint256)", "65147784": "Pasband()", "65149a76": "calculateWinnings(bytes32,address)", +"6514a4e3": "uniswapTWAPOracle()", "6514aaca": "minimumCommission()", +"651526f7": "sommaiPerBlock()", "65153632": "assertEq11(bytes11,bytes11,bytes32)", +"65156b8c": "viewTriggerSubTreeLength(uint256,uint256,bool)", "65158b3b": "contributor(uint256)", "6515c1fa": "defineMecenas(address)", "6515c6a9": "paused2()", "6515d28c": "getLockingTypeCount()", "6516395a": "lockCustomer(address)", "651680af": "stage5Deadline()", +"6516f57a": "LogDealerWithdraw(address,uint256)", "65170435": "FASDF(uint256)", "651738a3": "setMinScaled(int8)", +"651744d5": "SELL_HOLDS(address,address,uint256,uint256)", +"6517ad5a": "notify(address,address)", +"6517de27": "_decode_sol_bytes7(uint256,bytes)", "6517ef33": "getNumberOfOrders(uint256)", "65181ad3": "GET_METADATA()", "6518361e": "SCT(uint256,string,uint8,string)", +"651879a9": "setPresaleAdd(address)", "651883c1": "batchSpawnAssetWithCreator(address[],uint256[],uint256[],uint256[],address[])", "6518ad22": "placeETHBid(uint8)", +"6518f80d": "setWhitelistingAddress(address)", "65195bc7": "DPNPlusToken()", "6519fac2": "userExisted(address)", +"651a76ff": "totalLockInPool(uint256)", +"651ab806": "setShareCap(uint256)", +"651b49a8": "lptNetValue(uint256)", +"651bad52": "replaceApprovers(address,uint256,uint256,address[])", "651bb617": "tokenlength()", "651bc2fb": "reserveNIMFAAddress()", "651bfd2d": "itemPrice(address,uint256,uint256)", @@ -57906,11 +106002,15 @@ "651c45d2": "addTicket(address,uint256)", "651c5c84": "TokenWalletHolder()", "651c5d2d": "getGiver()", +"651c79c8": "approve_389(address,uint256)", "651c9e99": "GOGRN()", "651cd08d": "validateStart(address,address)", +"651cd249": "WrapperSetup(address)", "651dd0de": "values(bytes12)", "651ed944": "startPreICOStage()", +"651efc17": "getLeftoverToken()", "651f066a": "playerBalance()", +"651fe611": "tokenSupply_()", "6520715a": "approveClaim(bytes32,string)", "6520768d": "modName(string)", "652084c0": "storeKey()", @@ -57924,169 +106024,305 @@ "65225665": "getPlayerAddress(uint256)", "65227c7d": "RenCap()", "65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6522b6fd": "addMasterRoyalties(uint256,address[10])", "6522bff1": "update(uint256,string,string,string)", "65243f87": "findNextWeekday(uint256,bytes2)", +"65246374": "mainUsers(uint256)", "6524f107": "BlobStore()", +"6525154a": "ETHpendingCashoutBTotal()", +"652518e8": "SetEndTime(uint256)", +"6525a15a": "INITsupply()", "6525a233": "ORACLIZE_COMMISSION()", +"6525b5f5": "logInt(int256)", "6525c29d": "rejectAdvertiserCharges()", +"65260be7": "companyRegNumber()", +"6526941b": "setMaxDebt(uint256)", "6526db7a": "remove(uint256,uint256)", "6526ecee": "KingOfTheEthill()", +"65272575": "getJarInfo(address,address[])", "652740a7": "TransparencyRelayer(address)", +"6527b8c0": "claimDefi99Plus(address[],address[],bool,bool)", +"6527ba5c": "settleLoan()", +"6527d5d3": "setreferrerEnable(bool)", +"65281d15": "remainingBalance(address)", +"652879db": "onendround()", "6528ef46": "BBY(uint256,string,string)", "6528f4cb": "getDivRate(uint256)", "652918bc": "updateProfit(uint256)", +"65295da7": "isexcist(address)", "6529abba": "setSellComission(uint256)", "6529d1c9": "pricesOfDate(uint256,uint256,uint256[],uint256)", +"652a2661": "_preSoldiers(uint256)", +"652a5ae1": "pancakeFarmingPoolId()", +"652aaf89": "luckCodeBurnTokenNum(uint256)", "652b51eb": "RefundEnabled(uint256)", "652b810c": "setInternalStakingAddress(address)", +"652b9b41": "isVault(address)", +"652bff2a": "removeVotes(uint256,bool)", "652c00c9": "maintainPlayer(address,uint256)", "652ca8f4": "cofoundersSupplyDistributed()", +"652cf133": "greaterThanUintIntPassTest()", "652d38fc": "getTotalIn(address)", +"652d3c48": "printNumber(uint256)", "652da5ff": "b(bool)", "652dad7b": "batchDecreaseApproval(address[],uint256[])", "652db9ab": "_distribute(address,uint256)", "652de5ad": "countPerfManagers()", +"652ea8db": "setBoringDAO(address)", "652ebb4c": "tokenPriceInETH()", "652edd41": "purchaseDatesEdition(uint256)", "652f1f16": "addSignature(string)", +"652f4e91": "LGE_DURATION()", "652f6494": "treasuryOfficials(uint256)", "652f78cc": "allocateCommunityToken(address[],uint256[])", +"653006f2": "numberOfVotersFor(uint256)", +"65302f68": "weiDeposited()", +"65303cad": "testTransferTokenCompiledLongMax()", +"65303fa3": "batchInsert(uint256[],uint256,string)", "6530b7f9": "_createDrink(string,address,uint256)", "6530e008": "STAGE2_TIME_END()", "6531041b": "updateMIN_CONTRIBUTION(uint256)", +"65312958": "userCredistAmount(uint256)", "6531a708": "getHolderEditions(address)", +"6531aab9": "setAutoPool(uint256,uint256[],uint256[])", +"6531aea0": "addEncryptedData(bytes,bytes32,bytes32)", "6531dbff": "totalFundedEther()", +"6532198d": "initialValueShouldBeHelloWorld()", "65325871": "transferableTokensOf(address)", +"6532834f": "aggregatedNormalizedStakeTimeframe()", "6532b646": "SFI()", +"6533081e": "getTokenInfoList(address)", +"65335505": "totalHxyfLpFrozen()", +"6533a6fc": "setTokenUriBase(string)", +"6533b4bb": "tokensOfImage(bytes32)", "65343fcb": "TrustEth()", "6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", "6534ccd2": "addHouse(address)", "6534eb76": "recycling(uint256)", +"6534f578": "govTokenWhitelist(address,uint256)", +"653557a5": "SettleCall(address,uint256,uint256)", +"65360843": "setOracle(address,bool)", "653704b1": "_changeName(string,uint256)", "65372147": "result()", "65375f38": "updateCustomerKYC(address,address,address)", +"6537d437": "distributeTokensMulti(uint256,uint256)", "6537e401": "setIII_S(uint256)", +"65384f36": "presaleAtIndex(uint256)", "653853c0": "AMLToken()", "6539335a": "toTipoEnte(uint8)", "65395242": "MathisTestToken()", "65397d5e": "refundOIDIndex_()", "653a8f14": "getNumTilesFromBoard(uint16)", +"653aafc7": "myUnclaimedTokens(uint256)", "653abf37": "setDecision(bytes32,address,address)", "653ac422": "invest(address,address,uint256)", +"653b1c37": "scand(uint256)", +"653b3a89": "ethReleased(address)", +"653b7fbb": "rescindCommission(uint256,uint256)", "653c3174": "investorsNumber()", +"653c50a1": "Earned()", "653c95b8": "getContribution(address,uint256)", "653c968a": "Bethopia(address,address)", "653c9eea": "isBS(address)", +"653ce73b": "getTotalReward(uint256,uint256)", "653cfd2f": "testTemp4()", "653d1ca4": "getPI_edit_21()", +"653d46e7": "liquidateTroves(uint256)", +"653dc9f1": "batchRegisterIdentity(address[],address[],uint16[])", "653e0f7f": "participants(bytes32)", "653e2e0d": "setLastPositions()", +"653e5385": "totalWithdrawnDirect(address)", +"653ec134": "unbonds(address)", +"653ecb9a": "updateAccountLockType4(address,uint8)", "653f23f8": "registerJuryMember(string,address)", "653f7219": "AddVerifiedInfo(bytes32)", "653fbca1": "payableEtherReceived()", "653fcf4c": "pewdiepie()", "65401882": "setDB(address)", +"6540600d": "unlockDate11()", "6540742f": "MIN_BET()", "6540dc07": "_destroyImpl()", "6540fcc2": "PRICE_PRESALE_WEEK1()", "654142c7": "getBoolField2()", +"6541536e": "Feeding(address)", "65419516": "bettingStart()", +"65421911": "stakeStartOf(address)", +"65424fd2": "updateSettings(address,address,uint256,uint256)", "654259dd": "availableAmount(address)", "654286d1": "changeFrozenBalanceAll(uint8)", +"6542a766": "initiateTimestamp()", +"6542ab6f": "getPriceFromOracle(string,string,uint256)", "6542fed7": "evaluateShareholders(address,address)", "65433e7f": "AntFundRobotToken()", +"65434457": "transferChainlinkLabs(address,address,address,uint256)", +"65435056": "getWithdrawCountdown(uint256)", "654470fc": "getTotalSellingItem()", "65449436": "CryptoConseilSuisse()", "65450a90": "ACEBlock()", "6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6546b140": "lengthMemoryWhile()", +"6546f16e": "uniswapLP()", "65472731": "lastBlock_a5()", +"6547331a": "expand_AMM_liquidity(uint256,bool)", +"65476ea3": "transferIns(address,uint256)", "6547c080": "Renmin(uint256,string,uint8,string)", +"65482a6c": "_carContract()", +"65483479": "mphToken()", "65483f69": "getBNTBalance(address)", +"654860e9": "getTimeTilNextIteration()", +"65486a3c": "setWithdrawAdmin(address)", "65488541": "Harimid(uint256)", +"6548aff0": "swap(address,uint256,address,uint256,address)", "6548b40d": "depositErc20(address,uint256)", +"6548b7ae": "claim(uint256,uint256,uint256,bytes)", "6548e9bc": "setRelayer(address)", +"6548fcfa": "removeCollateralAsset(address,address)", "65497caf": "limitDateSale()", +"6549846e": "batchReturnTokensIfFailed(uint256)", +"6549ff58": "liquidityTradeCallbackTime()", "654a1855": "CentToken(uint256,string,uint8,string)", +"654a60ac": "effectiveValue(bytes32,uint256,bytes32)", +"654a864a": "withdrawUnlock()", "654a95f2": "calculateEggSell(uint256,address)", "654a9f69": "CappedCrowdsale(uint256,uint256,uint256,uint256,address)", "654af496": "callDividend(address)", +"654b1d7d": "executeSwap(address,address,uint256,bytes)", "654b3110": "allowIssua()", "654b6105": "DestiNeedToken()", +"654b748a": "isSuperOperator(address)", +"654b9820": "getPriceAUSC()", "654c2111": "Cash311()", "654c6daf": "totalTeams()", "654c7381": "listItem(uint256,uint256,address,bytes32)", "654c8748": "setBitSTD(address,address)", +"654c9bdb": "externalCall(address,bytes)", "654cf88c": "store(bytes32)", +"654cfdff": "deposit(uint256,uint8)", +"654cfe80": "totalAmountSwappedInContract()", "654d146a": "costAndBuyTokens(uint256,uint256)", +"654d5933": "nextRedemptionTime(address)", +"654dcefa": "superUsers(address)", "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()", +"654f6c6d": "DividendRecycled(address,uint256,uint256,uint256,uint256,uint256)", "654f7d40": "ETHERRED()", "654f97a3": "setClaimStatus(bool)", +"654fbf38": "REIGAI15()", +"6550074f": "togglePancake()", "655012a9": "sumPrice()", "655042ee": "OSCoinToken()", "655059db": "create(bytes32,bytes32[])", +"655063d7": "pool_deposit()", +"65513fe5": "bankBalanceOf(address)", "655187b2": "Aragon()", "6551fb11": "localsStore(address,address)", "65521111": "isAble(address,uint8)", +"6552a4c5": "spawnCount(uint256)", "6552a562": "updModule(string)", "6552d8b4": "removeReceiver(address)", +"6552f187": "ge(int256,int256)", "655330f4": "NLog(uint256)", "65536ab3": "BFEXToken()", "655388be": "walkTowardsBlock()", "65538c73": "fireEventLog0()", "65538da0": "preSaleOpened()", +"65538fb2": "picklePerBlock()", "655391c9": "updateBaseTokenURI(string)", "6553b03c": "cloneContractor(address,uint256)", "65540940": "partnerAllocateRestrictedTokenTo(bytes32,bytes32,uint256)", +"6554266c": "maxDownLimit()", +"65543de0": "getTest(string)", +"6554941c": "setuseOraclize(bool)", "6554d179": "attachedSystemActive()", +"655501e2": "invitation(uint256)", "65550e70": "getNextAvailableCard()", "6555394b": "updatePrice(address,bytes32[],uint256[],uint256)", +"65555bcc": "getReferenceData(string,string)", +"6555715e": "getLastProfitSync()", "655584d6": "ChangeDate(uint32)", +"65560950": "set(uint256,string,string)", +"65568ecb": "mintNewNFT(address)", +"6556cd05": "transferTo(address,address,address,uint256)", "6556f767": "getBytes(address,bytes32)", +"65573a8f": "mintFromERC20(address,uint32)", +"655750ac": "prices(uint32)", +"65576fab": "next_index()", "6557a47c": "Tier_Wildcat()", "6557b677": "lowTokensToSellGoal()", +"6557cb18": "getUserMultiplierBalance(address)", "6557dfc8": "AnimeToken()", "65581793": "S2()", "6558488a": "scheduleSetBool(address,uint256,bool)", +"65599c72": "batchAirDrop(address,address[],uint256)", "6559aeb2": "transferTimelocked(address,uint256)", "6559c08d": "checkProblemsSolved()", +"6559e59a": "setStoreAddress(address)", "655a4ebf": "revokeAttribute(address,address,bytes32,bytes)", +"655a553b": "StateSet(address,uint8,uint8)", +"655ac12c": "getUserFilledOrders(address)", "655b08eb": "getRandom(uint256,uint256)", +"655b23b6": "setExploitCompensationFund(address)", "655b3667": "TOKEN_SUPPLY_AIRDROP_LIMIT()", "655b97db": "ownershipLookup(address,uint256)", "655bb0e8": "transferSubcontractsOwnership(address)", "655bb565": "changeGasPrice(uint256)", +"655bce22": "getCycle()", +"655be289": "show_invested_addresses(uint256)", +"655c51d5": "maxBetsToClear()", "655c737c": "getPositionOwedToken(bytes32)", "655cc366": "LogGoalReached(address,uint256)", +"655cf043": "setMinDeltaTwap(uint256)", "655d0862": "createSignedMessageOracle(bytes32,uint8,bytes32,bytes32)", "655d225f": "myTime()", +"655d2f31": "ViewDate(int256)", "655d65c4": "limitSell(uint256)", "655dc4c2": "getLawyerCount()", "655e0d38": "changeBroker(address)", "655e4224": "addEntryInSecondsPeriods(address,uint256,bool,uint256,uint256)", "655e51f2": "MIN_GOAL_EBC()", "655ec3e4": "transferSoul(address,address)", +"655f0c58": "setTransactionUser(bytes32,address)", "655f8294": "PreviousTime()", "655fc4db": "vault_releaseDeposit()", "655fcaf5": "feeReceiverWallet()", +"655ff07f": "commitment(address,uint256)", +"65601247": "buyTokenJUS(uint256,uint256)", "65604a11": "VESTING_WALLET()", "6560a307": "suggestedGas()", +"6560a9e7": "subUserPayingUsd(address,uint256)", +"6560cecc": "chainMapping()", +"6560d4ab": "keeperSize()", "656104f5": "_setOrganiser(address)", +"65614f81": "variableRateSlope2()", +"65615245": "DistributeSecond(address,uint256,uint256)", +"6561c24f": "FPSStock(string)", "6561e6ba": "feeWithdraw()", "6561e921": "becomeRenown(bytes32)", +"6561f12b": "custodiesServedETH(uint256,address)", "6561ffb9": "LOTTECHAIN()", "65620283": "transferTokens(address[],uint256[])", "65622cfd": "transferFor(address)", +"6562ca3b": "withdrawTheToken(address,uint256)", +"6562dda9": "_verifyTransfers(address,address,address,uint256,uint256,uint256,uint256,uint256)", "65630493": "ERC20Impl(address,address,address,address)", "656362b5": "regFactory()", "6563b2fc": "tokensLeftInPhase(int8)", +"6563f5d9": "affiliateRate(uint256)", +"65649166": "getMyReferrals()", "6564a7af": "DeployENS()", "6564ad28": "IFNToken(address,address,uint256,string,uint8,string)", +"6564d607": "MAX_TRIG()", "65651b6e": "addSkillName(address,bytes32,address)", +"656605d6": "hasRoyalties()", +"656644fd": "emitExchangeRatesUpdated(address)", +"656659af": "maxMay()", +"6566b8b6": "testRoot()", +"6566d544": "_refer1RewardRate()", +"6566f811": "amem(uint256)", "65670adc": "teamSupply18Months()", "65675074": "getAllTokensOfUser(address)", "65676c9e": "baseExchangeRate()", @@ -58095,51 +106331,100 @@ "65688182": "recomputeLastAverageBalance(address)", "65688cc9": "newGuard()", "6568a279": "withdrawAll(address[])", +"6568cfdc": "internal_func()", +"656925a7": "AuthorizationChanged(address,bool,string)", +"6569383d": "Get_Token_Quantity()", +"65696aeb": "cancelInvestment(uint256)", "656afdee": "register(string,bytes32)", "656b275c": "expandY()", +"656b6b6b": "trialDrops(address)", "656b9952": "produce()", +"656bd25e": "registerDomain(string,address,string,bool,bytes)", +"656c579f": "compoundRewards(uint256)", +"656c81be": "onWithdrawTokens(address,uint256)", "656ca11d": "CONFIG_FEES_MUL()", +"656cb0bc": "stop(address)", +"656cbc86": "GetOwnership(string,uint256)", +"656cf40b": "withdrawCommunityPart(address)", "656d2f63": "ManagedAccount(address)", "656d3091": "createEthSaleAuction(uint256,uint256)", "656d677e": "releaseTotal()", +"656e303a": "G_MAX_TRADE_SIZE()", "656e8d6f": "getTutorialBabyGen(uint16)", "656ea1f6": "snikerts()", +"656eacea": "withdraw_danger(uint256)", +"656f3d64": "cook(uint8[],uint256[],bytes[])", "656f416d": "uponTransferFrom(address,address,address,uint256)", "656f64f5": "pendingGDPOracle()", "656f6873": "ActualizePriceBeforeStart(uint256,uint256,uint256,uint256)", +"656f844e": "refundNonZeroBalanceExternal()", +"656fea2a": "List(uint256,address,uint256)", "65704506": "currentGame(address)", "657128a2": "altTokenOf(address,address)", "657157e5": "canTrade(address,address)", +"6571797d": "setKpopCelebContractAddress(address)", "657206ef": "getSignedAddresses()", +"65726857": "ethRewardWithdrawn(address)", "6572ab5b": "shareCycleIndex()", "6572ae13": "calculateWinner(uint256,uint256)", +"65733592": "AmountTwo()", +"65733af3": "PinMoTradeCreated(uint256,bool,uint256,uint256)", +"65735521": "sellMaxTokens(address,bool)", "6573ee1e": "doFailingApprove()", +"657428a3": "CRV_TOKEN()", +"6574ab43": "TechVestingTime()", +"6574ab93": "defaultFrozenEth(uint256)", "6574bdd2": "newDream(address,string,string)", +"6575243f": "lotteryInfo(uint256,uint256)", +"65756017": "retrieveStolenFunds()", "65757eeb": "removeDiscounts(uint256[])", +"65762209": "tProfit()", "65766b64": "stageBegin()", +"6576ffed": "changeNotariseAddress(address)", "6577ab77": "_checkSeal(address,address,address,uint256)", +"6577e55a": "refundFromCashbox()", +"65780a04": "DsVDVTheoCuLy(uint256)", "65781994": "SESAPACToken()", "65783c66": "checkTicket(uint32)", +"6578a4f9": "GetCampaignStartDate(uint24)", +"6578c471": "updateBonusPercent(uint8,uint256)", "6578d920": "_canSendGameGift()", +"657908d1": "deployedGames(uint256)", +"65791610": "idToAddress(uint32)", +"657917e8": "firstPartyActiveBetsIndexes(address,uint256)", "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()", +"657af343": "GUSD_VARIABLE_DEBT_TOKEN()", "657ba57b": "show_The_name_of_option_C()", "657c5dae": "ApproveTitle(uint256)", +"657c6dc7": "MAX_ISSUANCE_RATIO()", +"657ca40b": "AdvisorAddressChanged(address,address)", "657d38b8": "endICOp3()", +"657d396c": "stakeBalance(address,address)", "657db38d": "ten_wallet()", "657edc11": "removeLootbox(address)", +"657f3837": "STAKE_FEE()", "657f3ab0": "getPricePoint(uint256)", "657f4783": "getRealGoldBought()", "658030b3": "tokenInstance()", +"6580a257": "getTrueAmount(address,address,uint256)", +"6580af1b": "getPaymentsRecipient()", +"65819546": "store_num(uint256)", "65826666": "executePullPayment(address,string)", "658268c1": "StableCurrencyToken(uint256,string,string,uint256)", +"65826d9d": "signal_portfolio_diff_value()", +"6582ebcf": "setTest(bool)", "658311ab": "jackpotLevel()", "658389cb": "isFromCountry(address,address,uint256)", +"6583d12a": "WithdrawBySharesOnly(uint256)", "6583e239": "STATUS_DEAL_APPROVE()", +"65841b25": "approve_476(address,uint256)", +"658445a8": "buyBackFXS(uint256,uint256)", +"65848ff0": "ORO()", "6584a5b5": "removeLock(address[])", "6584ceb0": "StartNewEpoch()", "6584fcce": "ATCReserveLocker()", @@ -58147,9 +106432,12 @@ "65855010": "rateSale()", "658577e9": "buyXid()", "65857a5e": "parkingOn(address,uint256)", +"65858b93": "lastReceivedAmount(address)", +"65859286": "LogSetPriceOracle(uint256,address)", "65859862": "add_arbits(address,address,uint256)", "6585c27c": "getrandoms()", "6585dc12": "enableRefundPeriod()", +"6585fe98": "totalPendingToshicashOfAddress(address,bool)", "658612e9": "gasFee()", "65862330": "TestableStandardCampaign(string,uint256,uint256,address,address)", "65863b24": "getTotalCollectedPromoBonus()", @@ -58157,9 +106445,16 @@ "6586bd51": "getNodalblockSender(string)", "65879e72": "JED()", "6587ab3d": "toggleSafetyMode()", +"6587cb65": "freezePair(bytes32)", +"6588439c": "monthlyAmount()", "6588875e": "ShutterToken()", "6588c11c": "_startSwap()", +"6589b168": "lastPublishStartBlock()", +"6589d70f": "repayBorrowOnAvatar(address)", "658a5692": "_totalEthCollected()", +"658a986a": "batchBlocklisted(address[],address[])", +"658b6729": "getNumberOfStakers()", +"658b700e": "coverToken(string[],uint256[])", "658b98a9": "pointMultiplier()", "658bc083": "initDistribution(address,address,uint256)", "658bf147": "setArea(uint256,bytes32)", @@ -58171,67 +106466,117 @@ "658e587f": "getWithdrawConfirmationCount(uint256)", "658eefd1": "notifyRefundToken(uint256,address)", "658f2ad6": "CrowdSale_Resume()", +"658f99b6": "setLoanFee(uint256)", "658fbfbc": "transferOnError(address,uint256)", "659010e7": "m_spentToday()", +"65906ca3": "revertWith(bytes)", "65909081": "Brothel(address)", "6590f0ed": "DUKCoin()", +"65914ddc": "newInstance(string,address[],uint64[3],uint64,bool)", +"6591e2d2": "getTacGia(uint256)", "65921f02": "paladinEquity()", +"65925268": "approve_759(address,uint256)", +"65925b90": "verifyAddress()", "65926a20": "changeSaleOn(uint256)", "6593643c": "CreateIND(address,uint256)", "65937ab9": "isUpdateAuthorized(address,uint256)", "659382fb": "payoutETH()", +"6593c2c9": "setZap(address)", +"6593e540": "uniswapETHforUSDC(uint256)", "6594479f": "LTYP()", +"6594b8bb": "updateMulDivConverter3(uint256,uint256)", "6594d99b": "isDataNo(bytes)", "6594ea6c": "EGGS_TO_HATCH_1SQUIRREL()", +"6595171c": "addAdminRole(address)", "65957bf5": "getShareToken(uint256)", "6595c94e": "calculateTierBonus()", +"6595ece0": "getinfo(uint256)", +"65961f10": "totalAwardPartner()", "6596217b": "HAYATO_FTL_SPEED()", "659621b5": "r0()", +"65965021": "userWallet()", "65968727": "innocoinToken()", "6596cff3": "setCrowdsaleContract(address)", "65975691": "getDividends(uint256,uint256)", +"65976b22": "supportChainCount()", "6597a076": "getBonuses()", +"6597afdf": "priceToRemoveLiquidity(address,uint256,uint256,uint256)", +"6597e028": "winningAnswer()", +"65981d06": "jackpotSplit()", +"65989776": "flashBuyClaim(address,address,address,uint48,uint256,uint256)", "6598afb9": "yearlyBlockCount()", +"65991dbf": "grantedCount()", "65995733": "getSalaryTokenValue(address,address,address)", "65995cc8": "uploadAdvertisement(uint256,string,address,uint256)", +"6599bc5f": "getCollateralAddr(address)", +"659a1026": "verify(bytes32[],address)", "659a46e8": "coinLockRmoveMultiple(address[])", "659a7486": "inTradingTime()", "659a9cbc": "coinsUnit(uint256)", +"659ab4c3": "upgradeProvidersFor(address,address[],address[],uint8[2],bytes32[2],bytes32[2],uint256[2])", "659ae215": "saleDateFinish()", +"659b1c7c": "setProtection(bool)", +"659b35c1": "adminCharge()", "659b586e": "readQuantityList(address,uint256,uint256)", +"659b91b8": "jigoutuihuanlimit()", "659b9c72": "UsersNumber()", "659bd174": "TransferredTimelockedTokens(address,address,uint256)", +"659c713b": "PLATFORM_NEUMARK_SHARE()", +"659cf235": "changeTimeLimit(uint256)", "659d1185": "angelTimeLock()", "659d20eb": "getFoundersGames(address)", "659d6bd1": "readPower()", "659d7aaa": "sendEtherManually(address,uint256)", +"659d9662": "bonusHolders(address)", +"659dd2b4": "createBid(uint256)", "659de63b": "distributeToken(address[],uint256[])", "659e0729": "getFirstAmount(bytes32,bytes32)", "659e27b0": "setWhitelistingAddress(address,address)", "659e69e9": "setDelegateAdmin(address,address,string,bool)", +"659ec041": "isDepositMultipleUnsafe(uint256)", "659eeabc": "tokensWithAmount()", "659eeef1": "increasePaymentsBalance(address,uint256)", "659f9e3c": "lastEpochBlockHeight()", "659fb968": "getOracleOutcomes(bytes32[],address[])", +"659fdaad": "ExchangeInvalidContextErrorSelector()", +"65a08e29": "AFIPerBlock()", "65a096dc": "changeWithdrawableRound(uint256)", "65a114f1": "resetTime()", +"65a11acb": "internalToken2Meta(bytes32,uint16)", "65a178c0": "getTlength01()", "65a20ef9": "hasRole(uint256,address,uint256)", "65a26185": "updateGranted(address,address)", +"65a26e30": "getDisputableInfo(uint256)", +"65a2b9cf": "getBlockNumbers()", "65a31545": "doDeposit(address,uint256)", +"65a335bd": "checkFlipResult(address)", "65a3d8f0": "setEtherCentPrice(uint256)", +"65a46b38": "transfer_Profit(address,uint256,address)", +"65a4b86d": "setMVDFunctionalityModelsManagerAddress(address)", "65a4c957": "resultsDelay()", +"65a4d29c": "BurntSupply()", "65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", +"65a50d49": "Redenominate(address,bool,uint256)", +"65a544bd": "unclaimedTokenPool()", +"65a5585f": "getDirectTotal(address)", +"65a56f0c": "LOG_ChangeOraclizeAccountingSettings(address,uint256,uint256,uint256)", "65a572dc": "EGREngravedToken()", "65a5e708": "Upgraded(uint256)", +"65a5eed4": "searchBag(uint256)", "65a5f1cd": "changeFoundation(address)", "65a61ab4": "RWSC()", "65a6bb29": "getAllOracles()", "65a707bf": "DrugDealer()", +"65a72497": "APPROVAL_TYPEHASH()", +"65a78b1a": "updateLockup(uint256)", "65a7dcec": "addWinners()", +"65a81825": "verifySign(uint256[],uint16,bytes4,address,uint8,bytes32,bytes32)", +"65a8a037": "fusion(uint256,uint256)", "65a8a483": "setColdWallet2(address)", "65a91d4a": "createAmountFromTmedForAddress(uint256,address)", +"65a9af87": "resetTimestamp()", "65aa96bd": "postJobOffer(uint256,address,uint256,uint256,uint256)", +"65aab749": "supplyAave(uint256)", "65aade1a": "getEmployeeId(address)", "65ababe9": "createERC20Token(string,uint8,string,uint256)", "65abb3f2": "_doAddPollOption(uint256,bytes)", @@ -58239,50 +106584,90 @@ "65ac2320": "ownerName()", "65ac4341": "getTotalAmount()", "65ac8c2a": "getSellOrdersInfo()", +"65ad5dba": "wnrgtkjlnwkr(address,uint256)", +"65ad6122": "getEarnFound()", +"65ad9c2c": "downcastToUint32(uint256)", "65ad9f34": "setHardCap(uint256,uint256)", +"65adef50": "managerJob()", "65ae247e": "issueLockedTokensCustom(uint256,uint64)", "65aebe7b": "ind(address,address)", "65aec658": "_createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"65af1bed": "addSigner(address,uint256)", "65af2a7d": "investedDDT(address)", +"65af42e3": "venusClaimThreshold()", +"65af5248": "changeSetting(address,bool,string,bytes)", +"65af8527": "NFY()", "65afa594": "Member_GetMyTokens()", "65b040c8": "setPriceWithBonus(uint256)", "65b051b8": "MEWSToken()", "65b06136": "makePayouts()", +"65b077b1": "anySetInitializable()", "65b0bc85": "createNameAndPoint(bytes32,address)", "65b0d711": "updateApprovalOfToken(address[],bool)", "65b0e5b3": "setethrate(uint256)", +"65b10e86": "onICO(address,uint256,uint256,uint256,bool)", "65b1b92d": "unLinkNewHouse()", "65b1c987": "resetBurntTokens()", "65b1fdf4": "scheduleIssuePOIs()", +"65b25ee2": "profitDays(uint256)", +"65b26325": "blockGap()", "65b27205": "testFailMintWhenStopped()", "65b2a863": "revoke(string)", +"65b2e690": "pendingTestll(uint256,address)", "65b36bbb": "countpat(uint256)", "65b37d70": "HotManChain(uint256,string,uint8,string)", "65b3a7ca": "isGameExpired(uint256)", +"65b3e7d7": "authorAddressByHash(bytes32)", +"65b41e16": "remoteGateway()", +"65b4860e": "calc_token_amount_deposit(address,uint256)", +"65b53e3f": "AccountRegistryLogicChanged(address,address)", +"65b56b18": "getTotalValueForUser(address,address)", +"65b59015": "ade(address,address)", +"65b5c907": "aterBreakPoint()", +"65b61b77": "_uniswapRouter()", "65b686b0": "burnRemainTokenOffering()", +"65b6c4f0": "flashloan(uint256)", +"65b6cc8c": "UnfreezeTokens(address,uint256)", "65b6cd66": "setUserTransactions(string)", "65b6d9e2": "a(uint256,string)", "65b70e45": "UpMineLVL(uint256)", +"65b768fa": "claimerAddress()", "65b7a89d": "DeDeContract(address,address,address,uint256,uint256,address,address,uint256)", "65b7b357": "getVotersAnswer()", "65b892a1": "withdrawForOneStep()", +"65b89c01": "presale2Started()", +"65b937d4": "TokenSaleInitialized(uint256,uint256,uint256,uint256,uint256)", "65b980ab": "performTransaction(address,bytes32)", "65b9e37d": "hardParticipationCap()", +"65ba0835": "__UU_init(address,address)", "65ba12b8": "percentWeiJackpot()", "65ba331b": "IcoStagePeriod(uint256)", "65ba36c1": "interfaceHash(string)", "65baf5db": "tier2Start()", +"65bb141c": "setBlockInvalid(uint256)", "65bb193e": "createInsurance(string,address)", -"65bbb26a": "Linamyd()", +"65bb2c2c": "importCdp(address,uint256,uint256)", +"65bb9a8e": "ApprovedKyc(address[])", +"65bbb26a": "streamedFrom(address)", +"65bbdaa0": "propose(uint256[],address[],bytes,uint256[],string)", "65bc35fa": "Streem(uint256,string,string,uint8)", "65bcaf4a": "Ubiou(uint256,string,string)", "65bcfbe7": "payouts(address)", "65bdadf6": "ninthTime()", +"65bdfd2e": "changeInstitutionOwner(string,address)", +"65be32ad": "approve_880(address,uint256)", +"65be923f": "updateCurveAdd(address)", "65bf1ffc": "authorizedStartTrading()", +"65bf298a": "WatchProduced(address,uint256)", "65bfdb0b": "_receiveChild(address,uint256,address,uint256)", +"65c00470": "kmPards()", +"65c00b42": "createBurner()", +"65c01f23": "_sUSD()", "65c04faf": "random(uint32,uint256)", +"65c074f6": "freezedGearTokens()", "65c09830": "changeStatusGame(uint8)", "65c0eecf": "BitcoinLiza()", +"65c12031": "getCryptoGamer(uint256)", "65c13fdb": "changeGasPriceLimit(uint256)", "65c19af0": "getStringLength(string)", "65c24799": "getYayNum(uint256)", @@ -58291,67 +106676,130 @@ "65c2e8a1": "bossAdmin()", "65c2fab2": "NewIssue(address,uint256,uint256)", "65c301ab": "getDriver(address)", +"65c303bc": "triggerFinalizeVoucher(uint256)", +"65c363e2": "resolve(bool,uint256)", +"65c3a3fc": "pendingXDEX(uint256,address)", +"65c3c2b4": "rVolHourlyRecent(address,address)", +"65c3cd68": "totalAmountSecondaryLPStaked()", "65c40b07": "bonusesDates(uint256)", +"65c4284b": "numDIDRequiredToAddTaskParameterTitle()", "65c4a861": "cordY(uint256)", "65c4b463": "_tag(bool,string)", +"65c4ce7a": "diss(address)", +"65c53a03": "setNextFillAmount(uint256)", "65c5826f": "ENC()", +"65c59e7d": "availableForWithdrawal(address)", "65c5e683": "mine(address,uint8,bytes32,bytes32)", +"65c5f94a": "getNextEpochStart()", "65c683cf": "metadataOfToken(uint256)", +"65c6bbcb": "usedClaims(bytes32)", +"65c71bbf": "bondingPeriodSeconds()", "65c724cd": "dividendsCollected()", "65c72840": "getDay(uint256)", "65c7b711": "MockToken()", +"65c7bf41": "withdrawExcessXDAI()", +"65c84ee8": "KYCVerified(address)", +"65c8b402": "contractorTechnician()", "65c91b0b": "testFailTransferOnlyTrustedCaller()", +"65c92e32": "seeStandardNFT(uint256)", "65c95a6b": "setUFee(uint256)", "65c9e51e": "setDepositPeriod(uint256,uint256)", +"65ca1783": "changeDevaddr(address)", +"65ca78be": "totalTokensDisbursed()", "65cacaa4": "getVaultAddress()", +"65cb0a6c": "setBulkBlack20(address[])", +"65cc17c9": "initiateExchange(uint256,uint8)", +"65cc3e78": "placeValidFromOrders(uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])", +"65cc59c4": "_computePenaltyPropotion(uint256)", "65ccb687": "PULSToken()", +"65cccc80": "_presaleEth()", "65cd048b": "setDividendFee(uint8)", "65cd1bea": "PayToken(address,address,uint256)", "65cd3686": "setIsSendingLocked(address,bool)", +"65cd5526": "PermissionRemoved(bytes4)", +"65cdd03e": "deployCollector()", "65ce47fb": "_myDecimal()", "65ce5222": "specificTransferFrom(address,address,uint256)", "65ce7395": "setMinVote(uint256)", +"65ce8557": "CrownTransfer(address,address,uint256)", "65cf3a48": "bonusPrice()", +"65cf71b2": "stakeGoodAccounting(address,uint256,uint40)", +"65cf7c9b": "launchTimestamp()", +"65cfc059": "Halflife(address,uint256,uint256,uint256,uint256,uint256)", "65d0a890": "Daio(uint256)", +"65d0d874": "_totalSupplyAccounting()", "65d0e4a7": "addBot(address,address)", "65d1926d": "dropAddress()", "65d1df24": "s2s()", "65d27248": "setSellPrice(uint16,uint16,uint8,address,uint256)", +"65d272b1": "unapprove1()", "65d300ea": "CreateAds(address,uint256)", +"65d327b3": "setParticipants(string)", +"65d329ba": "updateReserveStateOnRebalanceInternal(address,address,uint256)", +"65d4176f": "getNodeExists(address)", "65d43868": "allowedOracleChangePercent()", "65d48d0b": "freezeBalancesOf(address)", "65d4bdab": "targetEth()", +"65d4fd9b": "RigelTokenBalance(address)", "65d51dd5": "_phase2Supply()", +"65d55287": "vaultsData()", +"65d5a9d0": "batchApprove(address,uint256[])", "65d5b48d": "PRECOMMITMENT_VESTING_SECONDS()", +"65d5cd15": "GetMemberByDistance(uint256)", "65d61ad6": "PwdHasBeenSet(bytes32)", "65d6759a": "getGenome(uint256)", "65d68308": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "65d6dbbd": "unPromisedPop()", +"65d6e436": "signalFromContract(address,uint32,uint8,uint256,bytes,address)", "65d6e6a4": "jackpotMaxTime()", "65d73851": "calculatePrizeCut(uint256)", "65d7d3d0": "LegacyReputationToken()", "65d80117": "getResource(string)", +"65d82b8a": "_userRewardPerTokenPaid(address)", +"65d87772": "waffleWinnerAddress(uint256)", "65d8a20a": "updateTransactionFeePercentage(uint8)", +"65d8ca18": "ClearedDeposit(address,uint256)", +"65d8d224": "addJudge(address,uint8)", "65d8e32e": "setProfileHash(string)", +"65d94373": "getXfLobbyPendingDays(address)", "65d967b0": "ETH_HARD_CAP()", +"65d9b827": "lastRewardPaidTime(address)", "65d9d8e2": "depositEtherForUser(address)", "65d9df9c": "totally_decrease_the_supply(uint256)", "65d9f31e": "addressFounders3()", "65d9f55a": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"65da1264": "delegatedTo(address)", "65da1cfc": "AdminClaimed(address,address)", "65da5603": "produce(uint256)", +"65da574f": "SurgedToken()", +"65daf20c": "getTRDBalancesPending(address)", +"65db48ee": "stakeLUCAX(uint256,uint256,uint256,uint8,uint256,uint256,bytes)", "65db63d0": "kittensDroppedToTheWorld()", "65db6c8c": "OPTIONAL_POOL()", +"65db878e": "addLiquidityInETH(address,uint256)", "65dba2b3": "removeTeamMember(address,bytes32)", "65dbcc0f": "addThenSubUInt(uint256,uint256,uint256)", "65dc128e": "p_setAirdropPercent(uint256,uint256)", "65dc4e3a": "addCollateralMarket(address)", +"65dc7454": "updateJurisdictionsForUserIds(address[],uint256[])", +"65dc7ef4": "lpAmount()", +"65dc803a": "compoundLeverageModule()", +"65dce777": "flashHyperBeam(address,uint256,address,address,uint256,uint256)", +"65dd43eb": "numChannels()", +"65ddcfbc": "RequestFailed(uint256)", +"65ddde07": "harvestStrategy(address,address,uint8)", +"65ddebcb": "MEDIANIZER_ADDRESS()", "65ddf33b": "productsShipped()", "65de1eb3": "getVendor(uint256)", +"65dee51c": "totalBattlesLost(uint256)", +"65df2918": "enableFund()", "65df517e": "CTHToken()", "65df7933": "totalDevelopers()", +"65df83f6": "getBorrowAmountByParams(bytes32,uint256)", "65dfc20f": "setWalletFees(address,uint256)", +"65dff1e1": "approve(address[],address[])", "65e00beb": "createFlowerAuction(uint256,uint256,uint256,uint256)", +"65e01fc6": "final_sell_redeem(uint256,uint256)", "65e0c718": "DisputeResolved(bytes32)", "65e0e117": "getSendersCalcTokens(address)", "65e0e9a2": "preIcoState()", @@ -58361,6 +106809,7 @@ "65e17c9d": "feeAccount()", "65e1cc85": "foundersPercent()", "65e21cb0": "transferNewBunny(address,uint32,uint256,uint256,uint32,uint32)", +"65e22517": "iterateTakerOffers(uint256,uint256)", "65e23ce3": "minimumEther()", "65e2406a": "takeEthForExchange(uint256)", "65e2409b": "getPlayerEnergyByAddress(address)", @@ -58369,36 +106818,61 @@ "65e47208": "lcBalance()", "65e49444": "claim_bix_with_maturity()", "65e4ad9e": "isAuthorized(address,address)", +"65e4e097": "minWETH()", +"65e5c6a5": "setMaxTotalIdoUSDAmount(uint256)", +"65e5eaee": "viewLastClaimedDividend(address)", "65e60ef2": "read(bytes32,bytes32)", "65e62ee6": "getInvestorKycLimit(bytes32,uint8)", +"65e64f50": "configAuction(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65e65fc0": "placeMultipleBet(uint256,uint256[],uint256[],uint256[],uint256)", +"65e6b000": "STATS_TYPE_INVITE_2ND_REWARD_AMOUNT()", "65e7096d": "allMaskGu_()", "65e7ee50": "RCCContractTest()", "65e807ab": "getTokenLossValue(uint256)", "65e83ae1": "getCrowdsaleTokens()", +"65e874d2": "challengeSwitch(uint256,uint256)", +"65e8eb8e": "interestSubmissions(address,uint256)", "65e8faf6": "isValidIndex(uint256,uint256)", "65e93b3f": "getUserVotes()", +"65e9736c": "UpdatedNickname(address,string)", +"65e9b20e": "YEAR6_BOUNTY()", "65e9cc4e": "contributionPending()", +"65e9f54f": "LogPublicsalesSpecialUserRemove(address)", "65ea19a8": "set_notary(address)", "65ea2b77": "ethaddrc()", "65ea62ff": "initTransfer(address,uint256,uint256)", "65eb0dec": "changeAllowedTakerBetsPerMakerBet(uint256,uint256)", +"65ec1c0b": "twelveHourTokenAddress()", +"65ec3734": "getClaimX(uint256)", "65ec4c2e": "retirarDinero(uint256)", +"65ec7ccf": "setDelayWithdrawTime(uint256)", "65ed16af": "_addBridgeNativeFee(uint256,uint256)", "65ed4a45": "getVerifiedNumOrganizers()", +"65ed50e9": "_freeze()", "65ed6e23": "getAllocations()", "65ed8a4a": "proposedTotal()", +"65ee049c": "depositFromUserMigration(address)", +"65ee9579": "chance_of(address)", "65eec589": "_markWithdraw(address,uint256)", "65ef1a3f": "setHotWalletAddress(address,address)", +"65ef53b1": "seedNewAllocations(bytes32,uint256)", "65ef617d": "AdminWalletUpdated(address)", "65ef7b95": "getStoreAddressById(uint256)", "65efd3a3": "addCertAdmin(address,bytes32)", +"65f0155d": "widthraw(uint256)", "65f0a00b": "ONETIDC()", +"65f124c9": "_depositTo(uint256,address)", +"65f16c64": "liquidtyQuotes(uint256,address[])", "65f17913": "monarchsByNumber(uint256)", +"65f212f9": "contractStake(address)", +"65f27597": "defimStake()", "65f27bea": "testSubBalanceFailsBelowZero()", "65f2bc2e": "unitsOneEthCanBuy()", +"65f39c40": "verifyMessage(address,uint256,uint256,address,uint256,address,string,uint8,bytes32,bytes32)", "65f3c31a": "Put(uint256)", "65f41211": "validStoreDest()", "65f42e7a": "APTV()", +"65f452a9": "updateStakingEnabled(bool)", "65f4d9f6": "failInvestPercents()", "65f520a7": "kittyData()", "65f5463e": "CLIP()", @@ -58408,169 +106882,319 @@ "65f6a049": "sellGrimReapersAgainstEther(uint256)", "65f6c15e": "ordersOf(uint256,uint256)", "65f6d6a2": "FOUNDERS_TOKENS()", +"65f6fcbb": "getBaseInput()", "65f77c63": "getCertAddressByID(string,bytes32)", +"65f79979": "amountToGetIfUnstaking(address,uint256)", "65f7aaff": "endRoundDecision()", +"65f80eed": "BORING_DAO()", +"65f82d59": "LogLoanClosed(address,address,bool,bytes32)", "65f84cbe": "_createWeightedMultiplierLot(address,uint256,uint256)", +"65f888ca": "decimrgals()", "65f88c0d": "getNumUsers()", "65f926ff": "getIdArrayItemsCount(address,address,string)", "65f937ed": "sumOfAvailableIcoCoins()", +"65f969f6": "rageQuit(uint256)", "65f97082": "startIco2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65fa0822": "setRewards(address[],address)", "65fa2b97": "calculate_with_fees(uint256)", "65fa2f7f": "getLastPrice(uint256)", +"65fac8ea": "targetStock2Flow()", "65facff0": "_isMember()", +"65fad027": "IDENTITY_REGISTRY()", +"65fad768": "getEstimatedTokenForTokenKyber(uint256,address,address)", +"65fadb1b": "shardsCreatorProportion()", +"65fae35e": "rely(address)", "65fae654": "Mychatcoin()", "65fb99ba": "findUnConference(string)", "65fba60d": "crowdsaleAllowance()", "65fbc99f": "distributedSaleStakes()", +"65fbf8a0": "crowdSaleRoundTwoLimit()", "65fc1253": "setExternalDependencies(address[])", +"65fc3873": "create_lock(uint256,uint256)", "65fc535b": "withdrawBenefit(address,uint256)", "65fc783c": "getNumOfVoters()", "65fcb49e": "maxContractBalance()", +"65fcd346": "councilList(uint256)", "65fcf1b5": "releaseFirstUnlock()", +"65fcfd24": "setPreSaleStart(uint256)", "65fddc81": "reducer()", +"65fe9451": "sumMiningPer()", +"65feacbd": "GetRoundHistoryAt(uint256)", "65ff0f5a": "TradeListing(address,address,address,uint256,uint256,uint256,bool,bool)", +"65ff42aa": "balanceOfCWBTC()", "65ff8220": "sampleContract()", "65ffe43d": "lastFund()", "66003666": "bountyTokens(address,uint256,string)", +"66003870": "_setInflationPerEpoch()", "66005ede": "vc1Wallet4Pct()", +"66007a9b": "cashETH(address,address,bytes32,uint256)", "6600811c": "tokenSaleHalted()", +"66008294": "sendPoint(uint32,uint32,address)", "6600d282": "releaseAngelFirstVested()", "6601345c": "changeTierController(address)", "66013bdd": "withdrawToken(address,address,uint256,address,uint256,uint256,address)", +"66017948": "changeVehicle(uint256)", +"66018cb3": "set_eth_rate_source(address)", "6601cd77": "getExchangeDetails()", +"660236cc": "escrowByAccount(address,uint256)", "66025047": "isCategory(uint256,uint8)", +"6602e3a2": "VoteOfUser(string)", +"6602eaf9": "userIDToAddress(uint48)", "660357f2": "removeWhiteListedContracts(address)", "66035cc0": "adPriceHalfDay()", +"660375dd": "log(address,bool,address,address)", +"6603e8ac": "getGamersAddresses()", "66040458": "signedApproveAndCall(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", "66042e7a": "etherToSendFund()", +"6604a6a3": "bonusPoolAddress()", "6604ca6b": "STO_KEY()", +"66055159": "courseCount()", "66056e8b": "destructSale()", "6605bfda": "setTreasuryAddress(address)", +"6605dfa7": "compToken()", "6605ff66": "totalSales()", +"66062f0d": "displayfanyongeth()", +"66067a95": "lastRewardsAddTime()", "660686de": "cutBAU2Length(bytes32,address,uint256)", "6606873b": "setMem(uint256)", "6606b7d4": "democFee()", "6606fe1e": "CABCrowdsale()", +"66076448": "investorContributed(address)", +"6607a8d9": "edcTotalAmount()", +"6607d692": "mkrAdd(uint256,uint256)", +"6607fe7f": "grantCreatorApprover(address)", "66081ec1": "JACKPOT_WALLET()", +"66082101": "TileToken()", +"66089655": "setFeeDecimal(uint256)", "66092ea8": "ignited()", "66098d4f": "plus(uint256,uint256)", "66099706": "getChannelCred(address,uint256)", "660a333e": "assetOwnerAdded(bytes32,address,address)", +"660a641c": "recievedRequest(address,uint256)", "660aab8e": "profileOf(address,bytes32)", +"660b1e7f": "setFarmAddress(address,bool)", "660b24b4": "emergencyTokenDrain(uint256)", +"660b3439": "setStoremanGroupConfig(bytes32,uint8,uint256,uint256[2],uint256[2],bytes,bytes,uint256,uint256)", "660b7ad5": "rentDue(bytes32,string)", "660ba74e": "_availableBetting(uint256,uint8,uint256)", "660c325e": "evPayOut(address,uint256,address,uint256)", +"660c5075": "airdropAll()", +"660c5132": "getBestReserve(address,uint256,address)", "660c6813": "crowdsaleStopDate()", +"660c91cb": "checkAssetAcceptToken(bytes32,address)", +"660cf986": "check01(uint256,uint256,uint256,address[])", "660d0d67": "dataStore()", "660d5887": "registeredUsers()", +"660da781": "ETH_SIG()", +"660db484": "setMethodologist(address)", "660dee82": "addTask(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"660e16c3": "getMarketPrice()", +"660e67a5": "transferAnyBEP20Token(address,uint256)", "660ef82d": "advisersAllocation()", +"660f006b": "burden()", "660f77aa": "CVDToken()", +"660fefa9": "bdo()", +"660ffae6": "setIdentityInfo(uint256,string,string,string,string,string,string)", +"661029d7": "Transfer(bytes20,address)", "6610a38a": "mountCitadel(address,address)", +"6610e3a2": "private_rooms(bytes32)", "6610f7a8": "previousBurners(address)", "6611611c": "MIN_INVESTEMENT()", "661195bc": "transferFromLowFunds(address)", +"6611ac35": "getBackTokensFromDistributor(uint256,uint256)", "6611f5f2": "ZTR_ETH_extra_price()", "6612283d": "subdivisionEnabled()", "66125b25": "boolFunc(bool,bool)", +"661284c5": "defaultRebateDays()", +"6612e66f": "setExcludedFromFee(address,bool)", "661309ac": "allowedTransfers(address)", +"66130d54": "Unmint(address,uint256)", "6613221f": "burnLand(uint256)", +"661335c7": "allowedTransferBeforeUniswap(address)", "66134794": "exploreCount()", +"6613810f": "divestFunding(address,uint256)", +"6613d871": "principalTotal()", "6613ee9c": "_isSigned(address,address,bytes32,uint8,bytes32,bytes32)", +"6614b24e": "transferBlacklist(address)", +"6614f010": "modifyParameters(bytes32,address)", "66154885": "getIncomingValueAsEth()", "6615827b": "LogEscrowEthReq(uint256)", +"6615c5dc": "setVipYearFee(uint256)", "6615dd83": "setSeedSourceB(address)", "6615e357": "setPortfolio(bytes32,bytes32[],uint256[])", "66161ed4": "setStopContract(bool)", "66167617": "bet_various()", "66167663": "subdomainTarget(string,string,string)", +"661684a1": "RemoveGlobalConstraintsProposal(address,bytes32,address,address)", "66168bd7": "depositTokens(address,uint256)", "6616c886": "canSetBanker()", +"66171bac": "Push_TenDoi()", +"6617b3b9": "grantVotingRightsAfterAppeal(address)", "6617e11a": "NiceGuyTax()", "66180bc7": "testTransferTwoTokensAndReturnFunds()", "66188463": "decreaseApproval(address,uint256)", "66188a26": "forwardable(address)", "6618b008": "cancelSellOrder(address)", +"6618b8f8": "costHistoryLen()", "66194d72": "childToken(address,uint256)", "661956fb": "depositInvestment()", "661990bc": "earlyInvestorWallet()", +"6619aa86": "usdPrice()", +"661a85f0": "updateM3Wallet(address)", +"661aaa36": "chainLinkOracles(address)", "661aba0d": "setMntpMigrated(address,bool,string)", +"661ac65f": "InfoChanged(address,string,string,string)", "661ad427": "setOraclizeUrl(string)", +"661af896": "setClearTime(uint256)", "661b6dae": "eth2qiuRate()", "661b9065": "getRelationWith(address)", "661be157": "account_address()", +"661c5135": "applyRuleLockup(address,address,uint256)", "661c866c": "requestNewEtherRealID(string,string,string,bool)", "661d3470": "LUXREUM()", +"661d881d": "electionInfo(uint256)", +"661d8829": "addFive()", +"661d8c69": "safeburn(address,uint256)", +"661d9255": "capOfRound(uint256)", +"661db79b": "pharaoh()", "661e3605": "ConstructorContract(uint256)", +"661e3c52": "CurrentPoolETH(uint256)", "661e5ec2": "getPlayerValues(uint8[],uint8[],uint8[])", +"661e7327": "highestPayment()", +"661e7ac4": "DEVELOPMENT()", +"661ed721": "unfarm()", "661edfee": "rewardFor(address)", +"661ef868": "transferRemarks(address,uint256,bytes32)", +"661f3bdf": "cinema()", +"661f4792": "commissionOf(address)", +"661f799d": "addAToken(address[])", +"661f905b": "getReferredAddresses(address)", +"661f9a98": "viewUnpaidVestRewards(address)", +"661fab7f": "Counted(address,uint256)", +"66200e13": "getAirdrop(address,uint256)", +"66201826": "muli(int128,int256)", +"662095bf": "getAaveData(address,uint256)", "6620a935": "sendToOwner()", "6620cc3c": "GanNFT()", "6620ffd3": "getNumAnimalsXType(uint8)", "66210532": "setVestingMasterAddress(address)", +"66216a3a": "updatePairs()", "6621b7be": "fiatValueMultiplier()", +"6621d472": "TulipCreation(uint256,uint256)", +"6621daac": "evnt_dAdppBridge_location(address)", +"662201f9": "bridgeWalletAddress()", +"66223fd4": "callForFactory()", +"6622483c": "futureRate()", +"6622c838": "takeWithAddress(address)", +"6623390b": "getParentChainId()", "66234c4a": "ReleaseManagerSet(address)", "6623fc46": "unfreeze(uint256)", +"66242eb9": "mintFromLP(uint256)", "662457c6": "nextProposalID()", "6625123b": "COINBIG()", "662512f1": "testThrowTranferZeroTokens()", +"662520bd": "removePriority(address,bytes4)", +"66253d07": "updateLeverage(address,uint128)", +"66259e7f": "removeOperator(bytes32)", "6625b349": "RESERVE_ALLOWANCE()", +"6626a37f": "sendETHFromReceiverTo(uint256,address)", +"6626abc9": "country_getInfoForCountry(uint256)", "6626b26d": "off()", "66272374": "setWithdrawRate(uint256)", "662723bb": "bulkTransfer(uint32[],address[],uint256[])", +"66272623": "listNames(uint256)", "66273fc6": "bountyTokenSupply()", "6627ace5": "getDCommBallotsEnabled(bytes32)", +"66285967": "setMessenger(address)", +"66295317": "decimalFactors(uint256)", "662959cc": "southadvisor()", +"662992a0": "onEventVerify(address)", +"6629ce79": "lockwithdrawl()", "662a3b81": "getHouseAddressTwo()", "662a6137": "developmentTokensWallet()", "662a719b": "RewardHalvingTimePeriod()", "662ad59b": "pixels()", "662bca97": "SetInRate(uint256)", +"662c125d": "getCdps()", "662c6230": "LogResultNoWinner(uint256,uint256,bytes)", "662d2ec8": "freeze(address,uint256[],uint8[])", +"662d45a2": "addJoinPartAgent(address)", "662d5aa9": "EduMetrix()", +"662d736f": "GrantedAccountTime(bytes32,uint256,bytes32)", "662da459": "newCostToken(uint256)", "662dbe96": "getNodeHeight(bytes)", "662de379": "registerAddress(bytes32,address)", +"662de6ca": "applDeal(address,uint256)", +"662de99f": "LeaveGroup(uint256,address,uint256,uint256)", +"662e0306": "IANA_addASN(uint32,address,uint256,bytes)", "662e2536": "cordZ(uint256)", "662e3470": "getSectionIndexFromRaw(uint256,uint256)", "662e4db0": "c_preICOBonusPercent()", "662e4ee4": "changeowner(address)", "662f0763": "sendTokenReward(address,uint256)", +"662f1229": "PreMintData(uint256)", "662f94c0": "approveBlacklistedAddressSpender(address)", "662fa2fb": "ProofOfRarePepe()", "662fac39": "mining()", "662feffc": "addStore(string)", "663083f6": "moneyTotal()", +"6630946e": "getAllMarathoner()", +"6630f88f": "postMessage(string)", +"66312e8e": "founder_supply()", "663152d1": "phaseOneEnd()", +"6631aa6e": "cd_pool_last_draw()", +"6631fa46": "accountInfosByIndex(uint256,uint256)", "6631ff1d": "grantToken(address,uint256,uint256,uint256,uint256)", +"66320579": "girlIndexToApproved(uint256)", +"66326507": "EventPause()", +"66327161": "UnlockTransformTokens()", +"6632776f": "withdrawReleasedPayments()", "6632a507": "testSetupPrecondition()", "66331bba": "isPriceOracle()", +"663349f3": "ownerWithdrawTokens(address,address,uint8,uint256,uint256[])", "6633a2bb": "_newPresserFee(uint256)", +"6633c122": "pauseTokenTransfer()", +"6633d4e1": "isClaimed(uint32,uint8)", "66341c97": "changelp14(address)", +"6634bfab": "buyDkl(uint16,bytes)", "6634cec6": "findProductAndIndexById(uint256)", "6634d917": "startEarlyStage2()", +"6634e2b9": "pendingHard(uint256,address)", +"663515d6": "SetBuyLimit(uint256,uint256)", "66357f57": "descriptionUpdate(string)", "6635da25": "Voting(bool)", "6635e0ea": "BlocklabTokenV1()", "6635e511": "availableForInvestment()", +"66361d2b": "viewIsRefunding()", "66365082": "dealRevert(uint256)", +"66367c10": "currentPrices(uint16)", "6636fca8": "retainers(address)", "6637324a": "Deploy(address,uint256,uint32,uint256)", +"66373d13": "setFbtPerBlock(uint256)", +"6637954e": "ResourceTradeCreated(uint256,uint8,uint8,uint256,uint256,address)", "6637b882": "setDao(address)", +"6637edc5": "cancelCampaignGetTokensFromDistributorAndSend(uint256,address,uint256)", +"66381d8a": "add_region_admin(uint256,address)", "66383d32": "getCurrentRoundIndex()", "663890b1": "FinalizableCrowdsaleImpl(uint256,uint256,uint256,address)", "66389f1f": "OwnerProclaimedDead(address,address,uint256)", +"6638abce": "refLockedBalances(address)", "6638c087": "createCloneToken(string,uint8,string,uint256,bool)", "6638d82f": "freezeTo(address,uint256)", "6639016b": "releaseETH()", +"66394eca": "_freezeTokenTransfers()", "663960cd": "NewWinner(address,uint8)", +"663992d1": "gx(int128)", +"6639adf1": "Set_System_Reward_Address(address)", "6639dc8e": "emissionLimit()", "663a0ebb": "tokensAmount()", "663a339d": "IsSetReferrer()", +"663af7de": "rebaseCounter()", "663b0534": "disablePayable()", +"663b27d7": "setAssetConverter(address)", +"663b3e22": "certificates(uint256)", "663b3f62": "balancesImporter6()", +"663b4221": "whalefee()", "663b8c5a": "_newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", "663bc990": "test_1()", "663c01af": "getAllProductIds()", @@ -58578,57 +107202,115 @@ "663c920a": "redenomiValue()", "663cebfc": "VeiagCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", "663d1e84": "createVotacion(bytes32,bytes32[],uint256[])", +"663d2607": "lastUse(address)", "663d6612": "defaultOperatorsTranche(bytes32)", "663e0f88": "getSpecifiedDecimal()", +"663e52d2": "updateSmolMuseumAddress(address)", +"663e64ce": "setMaxSupplyDiff(uint256)", "663e90d9": "setBuyNowListing(bytes32,uint256,bool)", +"663ecf1e": "asgardTransfer(address,address,uint256,string)", "663f2670": "AccountLinked(address,address)", +"663f46f5": "NewTeleport(uint32)", "663f70c3": "calculateBounty(uint256)", "663f8549": "mintReserved(address,uint256,uint256)", "663f9c0d": "loginState(address)", "663fc7e0": "highRoller()", "663ff5a9": "create(bytes32,address)", +"66408eb0": "CUSDC_ADDRESS()", "6640ca84": "AgreementPen(address)", +"6640da47": "setBlockStep(uint8)", +"66410a21": "querySellQuote(address,uint256)", "6641179e": "artistsEditions(address)", +"66412e9e": "DeployMiner(address,uint32,uint32,uint32,uint32)", "66417115": "positionOfJingle(uint256)", "6641cc27": "eliminarVotacion(bytes32)", "6641cc64": "kycApproved(address)", +"6641d9a0": "totalSupplyHistory(uint256)", +"6641df24": "cdpDebtValue()", "6641ea08": "ROUND_DURATION()", +"66425d36": "compoundRate()", +"6642642a": "changeCommissionRate(uint256)", +"66426dfb": "addMarketFromExistingDmmTokens(address[],address[])", +"66428efd": "setFsm(bytes32,address)", "6642c0bc": "executeExploit(address,address)", +"6643462f": "votePoolMap()", "66435abf": "getWeight(bytes32)", +"6643a800": "TIME_STEP2()", "6643caba": "generousDonation()", +"6643ef9f": "tokenSale(address)", +"66440d71": "propertyAddress()", +"66441ebd": "claimETHLPAndStake()", +"66448ae8": "EQUITY_TOKENS_PRECISION()", +"66449386": "accrueFeesAndDistribute()", +"6644cc2b": "minEthPayment()", "6645167d": "YourCrowdSale()", "664519bd": "wwamICOcontractAddress()", +"66458bbd": "grab(bytes32,bytes32,uint256,bytes32,uint8,bytes32,bytes32,uint128,uint128,uint256,uint128,address,address,bytes,bytes32[])", "6645c0dc": "transferVotes(address,uint256)", +"6646d457": "MAX_PLANETS()", +"66472261": "argue(uint8,bytes)", +"66476815": "dust(address,uint256,uint8)", "66476fcc": "flipTokenReward()", "66479c08": "payOraclize(uint256)", +"66486dd7": "getNAPMultiplier(address)", "6648cb52": "setPurchasePeriod(uint256)", +"664944dc": "frozenlist(address)", "66494ab6": "THAW_CYCLE_FUNDER()", +"6649a4e9": "approve_507(address,uint256)", "6649dfd5": "preCrowdsaleOn()", +"664a0376": "mintQuote(address,uint256)", "664a1ad6": "fundWallet()", +"664a7d01": "addOrSetNode(address,uint256)", +"664ab18e": "isOnline()", "664abc0f": "packedToEndTime(uint256)", +"664ac8a7": "operatorsCount()", +"664b07be": "delegateApprovals(address,address)", "664b3350": "createTransfer(address,uint256,bytes)", "664b885e": "AddNewPrestige(uint256,uint256,uint256)", +"664b937d": "isProposalExecutible(uint256)", +"664c2715": "__MATTER_init(address,address,address,address,address,address,address)", "664c7bf7": "ethEurFraction()", +"664caaee": "playerAGamesWon()", +"664cf8fe": "_getKey(bytes32,address,address)", "664d8629": "withdrawAuctionDklBalance()", +"664d93a3": "NewZombie(bytes32,uint8,uint16,bool)", +"664dc724": "unprohibit(address)", "664dcb93": "getMHTTotalSupply()", "664dd24f": "getUserTransactionIndexes(address)", "664e9704": "RATE()", "664eb12e": "updateCompanyPrice(uint256,uint256)", "664f4904": "sealMinter(bytes32)", +"664fcc3e": "depositTokenForUserWithFee(address,uint128,address,uint256)", +"665022a8": "setPayRate(uint64,uint64)", +"66503888": "maxUserProfit(uint256,uint256)", "66505d1d": "BitcoinisDumb()", +"665073b7": "pixelRgb(uint8,uint8)", +"66525409": "rewardUserPct()", +"6652827f": "decrAIIStats(address,uint256,uint256)", "665289d2": "adjustPriceAndOwnerOfPlayerDuringPresale(uint256,address,uint256)", +"66529e8d": "setEnablefee(uint256)", "66533014": "supportMessage(uint256)", +"6653302d": "registerMapping(uint256,address,uint256[],address[])", +"66535f30": "txPubInputLength()", "6653be1a": "getGameCardId(uint256)", +"6653efd7": "blackListedToken(uint256)", +"66549a14": "TrackedMines(uint256)", +"6654ffdf": "PossibleUnstakeTime()", "665502ec": "ContractToken(address,string,string,uint256)", "66550624": "CityLifePlusToken()", +"66551f8e": "commitToCutBrownWire(bytes32)", "66552e15": "addVestingForBeneficiaries(address[],uint256[])", +"66557033": "endEstPoolTime(uint256)", +"6655c9fc": "Wager(address,uint256,bytes)", "6655d7dd": "RedeemTokens(uint256)", "6655ff3d": "WebsiteHostingToken()", "66566947": "associateWithTeam(bytes32)", "66566abd": "multSender(address[],uint256[])", +"66573519": "EMPTY_POINT_FACTORY()", "66576514": "mintDRSCoin()", "665788f8": "firstCrowdSaleDate()", "6657b2c0": "reloadTickets(uint256,uint256)", +"66580e23": "updateRewardRecorderContract(address)", "665814d8": "_presaleStartTimestamp()", "6658238c": "Peculium()", "6658357e": "setCINTokenAddress(address,address)", @@ -58637,20 +107319,31 @@ "665905c6": "manuallyResetGame()", "665939cc": "setupFundingRate(uint256)", "6659889d": "setPromoWallet(address)", +"66598ed9": "totalUnstaking(address)", "66599a40": "setEtherPriceInPoundPences(uint32)", "665a11ca": "liquidityPool()", +"665a133d": "trackClick(address,address)", "665a6ab0": "calcBurntFees()", +"665a742c": "lastestWinner()", "665b0d5b": "_taskError(string)", "665b1bc0": "_mint(string,uint256)", "665b51ce": "getusedAPI()", +"665b8155": "keepSUSHI()", "665bcc32": "ProcessGames(uint256[],bool)", "665beae7": "ExecutableBase(bytes)", +"665bf134": "log(address,address,address,address)", "665c0b8e": "purchaseMembership(address)", +"665c1e38": "convertHydron()", +"665c5392": "changePoolAddress(address)", "665ca475": "VUToken()", +"665cb6ce": "removeProtocolFactory(bytes32,uint8,uint8,uint8)", "665d8a53": "MAIN_SALE_END_TIME()", +"665db73d": "totalInvestAmount()", +"665dd8ee": "setAutoRestart(bytes32,bool)", "665de19b": "mutiSendCoinWithDifferentValue(address,address[],uint256[])", "665df460": "sqrt(int256)", "665e06ac": "OATToken(address,uint256)", +"665e3bdc": "SetAdminMode(bool)", "665eba29": "playerForceGameEnd(uint256)", "665f09fa": "addCoinAmount(address,uint32)", "665f5149": "JOZ()", @@ -58658,71 +107351,125 @@ "665fb66a": "YBToken(uint256,string,uint8,string)", "66605ba4": "rename(string)", "66605c47": "GetBuildingData(uint256)", +"6660b195": "ClaimCompThree(address,address[],address[],uint256)", "6660b210": "kMinStake()", "6660da77": "addDiscountStruct(bytes32,uint256,uint256[2],uint256[],uint256[],uint256[])", "6660ead1": "RANGEEND_11()", +"66610799": "dada_decimals()", "66612f66": "MAX_DAILY_COSIGN_SEND()", +"66615d56": "attachStakingContract(address)", "666192b9": "___upgradeToAndCall(address,bytes)", +"6661a51e": "setAccountRegistry(address)", +"6661d06f": "percentRewardYearly()", +"66624e53": "stakeSDVD(uint256)", +"66625450": "swapExactTokenToToken(address,address,uint256,uint256,address[],uint256)", "66625bbd": "revokeContract()", +"6662c7c9": "_setVenusVAIVaultRate(uint256)", "6662e4be": "isWinningBet(uint256)", +"6663411f": "NeedToken(address,uint256)", "66634a16": "getAnimalCount()", "666375e5": "set_allow_contributions(bool)", +"6663a85e": "bproMaxDiscountRate()", +"6663b087": "LogRemoveAllocation(address,uint256)", "6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", +"6663d153": "DailyEarningPercent()", +"6663fb66": "fireDJ(address)", "66648dd3": "setRateIco(uint256)", +"6664c6b4": "claimOnePercent()", +"66653832": "mkbPoolActive()", "6665e0fd": "tradeActive(address)", +"6665e47b": "totalBackers()", "66663d78": "XPAAssets(uint256,address,address,address)", +"66664554": "approve_867(address,uint256)", "6666490c": "getPlayerSpaceshipBattleLossesById(uint256)", "66666aa9": "rewardPool()", "6666d22c": "timeBetweenRounds()", +"6666fa68": "ADs(address)", "66671c30": "FBLFounderFund()", "66671c71": "BaseScheduler(address,address)", "66675c57": "updateDecimals(uint256)", +"6667849d": "mintKong(bytes32[],bytes32,bytes32,address)", +"6667864d": "getReferralChain(address)", "66679ac7": "interfaceTransfer(address,address,uint256)", +"6667da5b": "setCrumbsAddress(address)", +"66683acd": "addAudit(address,bytes32,uint256,bytes32,uint256)", "6668df7f": "subCoinAllowance(address,address,uint256)", "6668ffc6": "isAuditor(address,address)", "666923ea": "lastBlock_v15Hash_uint256()", +"6669302a": "discardSlippageFeeVote()", +"66694bbd": "ReconInvestment()", "6669749f": "HamzaCoin()", +"666a17e8": "setCanMakeupReferrer(bool)", "666a3427": "removeOwnership(address)", "666afadc": "preparePreContribution(uint256,uint256,uint256)", +"666b2bec": "createPolicy(string,string,uint256,uint256)", +"666b36a1": "getTotalBotReward(address[],uint256[],uint256)", "666b7d32": "disableICO()", "666b9132": "PartialCoin()", "666be68a": "setIcoTokenSupply(uint256)", +"666c0153": "devRatioFromTax()", "666c11fa": "getuserdayruns(address)", "666c7ed0": "WIZE()", "666cd4bd": "calcId(uint128,address,address,address,address,uint256,uint64,bytes)", "666cdaa0": "getAnime(uint256)", "666da64f": "claimShare()", "666de8d5": "setSecretBonusFactor(uint256)", +"666dffbc": "getBlockRewardNow()", "666e1b39": "owner(address)", "666e587d": "fundICO(uint256,uint8)", +"666ed4f1": "mintSecondary(address,uint256)", "666efa0a": "walletFees()", "666f0354": "getMonthRefferals(address)", "666f4cad": "totalWeiWagered()", "666f6843": "reservedAddress()", "666fc4d4": "minimunEthereumToInvest()", +"667022fd": "bought(address)", +"66708b0f": "uniqueBets(bytes32)", "6670bdd8": "getDOwner(bytes32)", +"667143d4": "Edit(address,uint256)", +"6671459b": "lossPool()", +"66727d58": "creatArt(bool,string)", "66731e95": "LogNewWhitelistUser(address,uint256,uint256)", "667336d8": "available_without_bonus()", +"66733786": "infinteAmountOnlyAtEnd(uint256[])", +"66733a78": "closePositionFeePercent()", "66734eb0": "MainController(address,address)", "66735f4e": "_pickWinner()", +"6673816b": "tornado()", "667390c7": "SendmoneyTransfer(uint256)", +"66739d3b": "proposeRoot(bytes32,bytes32,uint256)", "6673ce2b": "Results_of_the_last_round()", "6673d5c6": "totalSoldTokenCount()", "6674bfaf": "closeOption(address[3],uint256[3])", +"667505a8": "approve_627(address,uint256)", +"6675f30f": "ownerNATIVEReward()", +"667641cb": "orcl(bytes32)", "6676871d": "reserved_funds()", "6676aaa2": "MplusCrowdsaleB(address,address)", +"6676d534": "uintMaxC()", "66772438": "computeResponse(uint16)", "6677cef1": "getCrowdsaleManager()", "6677febe": "get_all_accepted()", "667815a2": "getCanSellBalance()", "6678887f": "replacesOldContract()", +"6678aaa4": "adminAddVoter(address)", "66792ba1": "send(string)", +"667987c8": "viewAirdropDEFIX()", +"6679a44e": "newKeyRingAndAdditionalKey(address,address,bytes)", +"6679a8b8": "_addCumulativeReward(bytes32,uint256,uint256)", "667a2f58": "createDepositAddress()", +"667aedbc": "cullDivide()", "667b39b9": "nameOfToken(uint256)", "667cb72d": "soldIdeaWeiPreIco()", +"667d3168": "ff()", +"667d4191": "createMaster(string,string,string,string,uint256)", "667d5d22": "wager()", +"667e7802": "getGeneralProfit(uint256)", +"667e9394": "getExchangeRate(string,string,string,uint256)", "667ec46c": "getCurrentTierStats()", +"667ec5b7": "rewardPorBLoque()", "667f1656": "preSaleBotReserve()", +"667f75b7": "setBytesSequence(bytes32,bytes32,bytes)", "667f9510": "getBundinha()", "667fc6b9": "IchigoToken()", "66801384": "STAGE_2()", @@ -58731,119 +107478,211 @@ "668038e0": "claimDividends()", "66805de5": "closePool()", "6680624e": "gasPriceMaximum()", +"6680ac0b": "accrue(address)", +"66812697": "lastRecordedBlock()", "66816e2a": "setBaseStrength(uint256)", +"66817562": "addTokenLockAddress(address,uint256,uint256,uint256,uint256)", +"66818967": "setGovernerContract(address)", +"6681abd2": "submit(uint256,address,uint256,bytes,bytes[])", "6681b9fd": "fundsRaised()", "66829b16": "changeToken(address)", "6682eaf1": "setsecure(uint256)", "6683381b": "setDiscountToken(address,uint256,uint256)", "66836acf": "updateBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"66839480": "g3(uint256)", +"6683a533": "balances(address[],address)", "6683ee49": "BlockPlanet()", "6683f9ae": "isSettling(bytes32)", +"6684c808": "tcontract()", "6684ffcd": "burnerSet()", "66855dcc": "removeInt256s(bytes32[])", +"66861b05": "adminAddPauser(address)", +"6686bd94": "icoCaps(uint256)", "6686e174": "tokensReleasedAmount()", "66874cc5": "brokers(address)", "66875554": "resumeTokenSale()", "66875a31": "FOUNDER_TWO()", "668767bd": "transferFromForExchange(address,address,uint256,string)", "6687aa35": "onExecuteAffirmation(address,uint256)", +"6688114a": "SaleCreated(uint256,uint256,uint256,uint256,uint256)", +"6688455f": "multisendErc20CNDAO(address[])", "6688e305": "EIP20(uint256,string,uint8,string)", +"668908a3": "setNotUniformToken(uint256[],address[])", +"66892430": "modifyParameters(address,bytes32,int256)", +"66892b79": "shipPositions(string)", "66894d76": "releaseThreeHotHourTokens(address)", +"66898a95": "userMaxChronos(address)", "6689e28b": "distribution(uint8,address[],uint256[],uint256[])", +"6689e498": "getInt8(int8)", "668a0f02": "latestRound()", "668a2001": "removeParticipant(address)", "668a2f67": "boom(address)", "668aa824": "oraclePrice()", "668abff7": "lastRoundLengthUpdateStartBlock()", "668ad45f": "MyToken(uint256,string,uint8,string,string)", +"668b174f": "get_double_a()", "668b1b7e": "AOCTrader()", "668bd511": "BithelloToken()", "668c1a46": "refundBNBContributor()", +"668c6091": "getUserWithdrawalPenalty(uint256)", +"668c7934": "stakeExit()", "668c8573": "DATING()", "668cc7d8": "registerContest()", +"668cf86a": "calculateRewardToWithdraw(uint32,address)", "668cf93d": "LOSER_LOCK_TIME()", "668d5f48": "addBrick(uint256,string,string,uint32,string,bytes32[],uint256)", "668e0f6a": "addEntry(string,string,string,string,address)", "668e157f": "StandardQuickConverter()", +"668e39f6": "recycleUnreceivedBonus(address)", +"668e88f9": "LogAdminAddrChanged(address,uint256)", +"668e8d39": "tokensPerScorePoint()", +"668e912b": "investorsMap(address)", "668eef5b": "test_2_method()", +"668f6ace": "isMultisig(address)", "668faae8": "CollectibleIndex3()", "668fde45": "advSend(address,uint256,bytes)", "66901c5b": "clearTimeMap()", "66901efb": "getOwnerInfoByIndex(uint256)", +"66903e80": "curves(bytes32)", +"66904cce": "removeFreeToken(string)", "66905ba0": "overwrite(string,string)", +"669072c0": "isLGEActive()", "66907d13": "setNextOrderId(uint80)", "6690864e": "setTeamAddress(address)", +"66909637": "STA()", +"6690bd4c": "deletefromBanList(address)", "6690f30b": "set_Name(string)", +"66911d3e": "depositFeeBase()", +"66911db0": "kycVerification()", +"66913a30": "setMultiplierSToken(uint256)", "66914614": "getJackpotTotalValue()", "6691461a": "updateTokenAddress(address)", +"6691a7e7": "setNextPeriodWaitTime(uint256)", +"6691cb3d": "rebasingCreditsPerToken()", +"6692d3ce": "updateTeamLp(uint256,address,uint256,uint256)", +"669380ac": "ReductionAmount()", "6693b694": "unfreezeSupply()", "669459a7": "removeRegistryFromOwnerIndex(address)", "66949b56": "endMatch(uint256,int256,int256)", +"6694ba61": "creatorFees()", "6694e845": "numRewardedAxies(address,bool)", "669529df": "removeFromWhitelistMultiple(address[])", "669541d6": "setGasCost(uint128)", "66957377": "batman()", "669585a4": "_figthExecutor(address)", +"66959491": "getremainingLockDays(address,string)", +"6695a0f6": "TokensPurchaseLog(string,address,uint256,uint256,uint256)", "6695b592": "stemPriceInWei()", +"6695c981": "getLatestBRRDataWithCache()", "6695f930": "calculateAndSetRate(uint256)", +"66961ff4": "totalWithdrawnByUser(address)", +"66968221": "addExternalErc20Awards(address[])", +"6696860c": "_pair_weth_artt(uint256)", "6696ca51": "forceBurnFrom(address,uint256)", +"6696f8d9": "obterResultados()", "66971c8a": "setCurrentFundingRound(uint256)", "66973129": "PHEPToken()", +"6697a7be": "isParticipationAchieved(uint256)", "6697aa84": "getRequiredMinor()", "6698baaa": "STAGE_TWO_TIME_END()", "6698f141": "releaseTeamTokensAfter18Months()", +"66993d66": "person2()", +"6699b2f6": "registerOperator(address,string,string,address)", "6699d9cd": "Securities_2()", "6699e4c7": "isReadyForClose(uint256)", +"669a43b0": "Refunding()", "669a55ec": "initialPrizeBov()", +"669a6ba8": "transferCOMP()", "669a828b": "getProgramsValue()", +"669b0532": "TOKENS_SENDER_INTERFACE_HASH()", "669b7e69": "getBlockAddressCount(uint256)", +"669b8f20": "getWhiteListStatus(address)", +"669c0083": "auctionList(uint256)", +"669c62d4": "cdp_manager()", +"669c7c5a": "getLockAmountByRoleType(address,uint256)", "669cab39": "cancelBetByOwner(uint256)", +"669d0d9e": "multi2(uint256,uint256)", +"669d43d4": "verifyFee()", +"669d77fa": "SetRout(address)", "669d8dff": "AddorModifyRig(uint256,uint256,uint256,uint256)", "669dafe8": "toWei(uint256)", +"669dc7e0": "engine2users(address)", +"669e0ac2": "mint(address,uint256,uint256,string,uint256)", "669e48aa": "get(uint256,uint256)", "669e6684": "_rebalanceTree(bytes32)", "669eb768": "registerDonation(uint32)", "669ee827": "RegisterDevice()", "669ef86d": "getPriceByDayIndex(uint256)", +"669f5a51": "mintNFT(uint256,address)", +"669f618b": "messageId()", "669f6d80": "bountyRewardPercent()", +"669f8413": "dflAccrualBlockNumber()", "66a03098": "receivedFrom(address)", +"66a06908": "getAllTeamMembers()", +"66a08ec6": "decisionActivated()", +"66a0a800": "getloanDetails(address)", "66a0b81e": "safeMode(bytes4,bytes1,address)", "66a11615": "revokeMintingManager(address)", +"66a16cad": "setWhitelistTransfer(address,bool)", "66a192c6": "CurrentRate()", +"66a1d007": "fragmentsPerTokenStored()", +"66a1deb5": "_assertValidPair(address,address)", "66a200ba": "TokenDemo(uint256,string,uint8,string,address,address,address,address)", +"66a2263e": "NextRoundStarted(uint256,uint256,address,uint256)", "66a23c01": "ETOKEN2()", "66a26419": "cancel(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"66a2d0d6": "FeedCAVE(string)", +"66a2d888": "UpdatedLockingState(string,address,uint256,uint256)", "66a39350": "FAIL_FLAG()", +"66a3b992": "getIsLevel1SetForOwnershipSale(address)", "66a3de2a": "_safeTransferFrom(address,address,uint256,bytes)", +"66a497b7": "ethPercentStakeExchangeSet(uint256)", "66a4b6c0": "usdDecimals()", +"66a50c13": "updateClaimRedeemDelay(uint256)", "66a51d1d": "UcCoinMinimumSellingChanged(uint256,uint256)", +"66a5ef2f": "buyTicket(address,uint256)", "66a659b3": "readcolorXteam()", "66a65c99": "getLegacyCount()", "66a6cf1a": "mateWithAuto(uint256,uint256,uint8,bytes)", "66a78b40": "depositAgent(uint256,uint256,string,string,uint256)", "66a78e6c": "maxReward()", +"66a843c2": "MAX_TICKET_EUR_ULPS()", "66a857f4": "ChangeTokenSymbol(address)", "66a8c45b": "StarmidFunc()", "66a908a5": "foundersTokensUnlockTime()", "66a9234c": "addPhase(uint256,uint256,uint256)", "66a92cda": "releaseOnce()", +"66a990ee": "planetETH()", "66a9bc0d": "teamTokenVesting()", "66aa01ca": "permittedAddresses(address)", "66aa56c5": "initiate()", "66aa6f26": "payFee(bytes)", "66aa9aff": "adminDeposit()", +"66aaac19": "removeLiquidityOneCoinThenBurn(bytes,uint256,uint256)", "66aac9e4": "TPLusToken()", +"66aafc58": "setTokenLock(address,uint256)", +"66ab0f50": "revokeBadge(address,uint8,uint8)", +"66ab1d52": "placeBid(uint256,bytes32)", +"66ab3fe6": "getSanityRateContracts()", "66ab4e5f": "Grid(uint256,uint256,uint256)", "66ab5290": "transferSgaToSgnHolder(address,uint256)", +"66ab7970": "mnefee()", +"66ab917a": "retireLegacyPets(uint64,uint64,uint64,uint64,uint64,uint64)", +"66abbcbd": "orderBooks(address,address,uint256,address)", "66ac1c36": "stageFokenUsdPrice(uint16)", +"66ac3b68": "renounceController()", "66ac777e": "rotate_right(uint32,uint32)", "66ac8075": "payoutPrizes(address[])", +"66ad0fa2": "setStcPerior4Min(uint256)", "66ad3ffc": "building(uint256)", "66ad484c": "newfirst_player(address)", +"66ad7b2b": "estimateFromUSDT(address,uint256)", +"66adb1a0": "setTierRate(uint256,uint256)", "66adeb3a": "SmartToken()", "66adeb8c": "transferBalance()", "66adf835": "_setup(address,address,uint256,bool)", "66adfbbd": "sgc(uint256)", +"66ae70e9": "sha256ofString(string)", "66ae924b": "toUint16Throw()", "66ae935f": "balanceEqual(address,uint256,string)", "66aecfa7": "bankToCharm(string,uint256)", @@ -58851,117 +107690,222 @@ "66aef95b": "increaseTimeIfBidBeforeEnd()", "66af3914": "getTradeIsOpen()", "66af77ca": "totalMarks()", +"66af7e2a": "checkpoints2(address,uint32)", +"66afa893": "getVotesCalcContract()", +"66afe93f": "setNewOwAddress(address)", "66b005ee": "QueryUnlockTime(address)", "66b0a536": "MomaCoin()", +"66b0bae0": "callNonExistFunc()", "66b10f70": "learnMove(uint256,uint256)", +"66b38472": "Start(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"66b3bc77": "createTransaction(uint256,uint256)", +"66b3d743": "withdraw_fee_lost()", "66b3e4b9": "stageMarketing()", +"66b3edc7": "getTokenBalanceByName(string)", "66b3f6bf": "invested(address)", "66b3fe66": "setTimeScale(uint256)", +"66b4087b": "LogWithdrawToChanged(address,address,address)", +"66b42356": "pID_Player_(uint256)", "66b42dcb": "register(address,string,uint256,string)", "66b43da5": "computeSha3(uint256[8])", +"66b44611": "getDataBefore(uint256,uint256)", "66b46149": "fstring(string)", "66b464de": "goldBoxPrice()", "66b4ad74": "KudanilToken()", +"66b4d5a0": "lastPrizeTime()", "66b52b93": "addMeByRC()", "66b567da": "getNumMyHatchingUnits()", +"66b57cb5": "tokenSellPrice()", +"66b5c439": "REMOVE_REPO_ROLE()", "66b5e2d8": "getCountMembers()", "66b625d4": "bountiesAllocAddress()", +"66b627bd": "changeBurnPercentage(uint8)", "66b62bde": "isSetTeamWallet()", "66b668de": "RFUDToken()", "66b68516": "Finalized(address,uint256)", +"66b69d7b": "pIDxCards1_(uint256)", "66b728d5": "getVoteOptionId(uint256,string)", "66b7afbf": "init_level()", +"66b7cf1c": "inquiryRemainReward(address)", "66b7d5c6": "receivedWais()", "66b847e5": "assertQuantity(uint256)", +"66b84a6c": "transferWithMemo(address,uint256,string,string)", +"66b9113e": "TOP_LEVEL()", +"66b91da9": "GetMorePoolData(uint256)", +"66b9875a": "_redeemTo(address,uint256,address)", "66ba2670": "setOriginalPriceGen0()", "66ba707f": "ConsultaRegistro(string)", +"66ba97d9": "PushArrNameTeam()", "66bab099": "getCurrentSupplyVote()", "66badf4b": "BITCOINGAM()", "66bb28be": "_transferMultiple(address,address[],uint256[])", "66bb83b6": "batchlimits()", +"66bbb20b": "depositForUser(address,address,uint256)", +"66bbd928": "setReserveDecimals(address,uint256)", "66bc0d6d": "withdrawFundsAndStartToken()", "66bcc860": "TransferSiteReg(address,uint256)", +"66bcd88f": "beats(uint256)", +"66bce81e": "getMinUnwrapAmount()", "66bd6ff6": "DecentralizedExchangeHotPotato()", "66bd78fd": "getBalanceContract()", +"66bd8e27": "lastRebaser()", +"66be2322": "lpTotalSupply()", "66be24ba": "blockUntil()", "66bea821": "sendSupplyTokens(address,uint256)", +"66bf851c": "maxTotalUnclaimed()", +"66bf9186": "WithdrawFee(address,uint256)", "66c0276e": "CryptonewsIndonesia(uint256,uint256)", +"66c0a302": "validateOracleRound(address,uint32)", +"66c0bd24": "getTokenIndex(address)", "66c0e5e0": "revealPhaseMinSecondsWaitForReveals()", "66c14e0a": "dropCount()", "66c2355c": "requestNameChange(string,string)", +"66c247c4": "swapThatShit(uint256)", "66c2aa0e": "getStackholderTransactionCount(bool,bool)", "66c2ae95": "setHgtRates(uint256,uint256,uint256,uint256,uint256,uint256)", "66c2d620": "getTot(uint256)", "66c2d6a0": "BettingToken()", "66c313c6": "ETHER_THRESHOLD()", +"66c31db7": "balanceInPool()", "66c31f12": "emitUserBinded(uint256,address,bool)", +"66c335cb": "addRawImageData(uint256,string)", "66c376a1": "setResult(uint32,int8,int8)", "66c42517": "refundToken(bytes8,address,uint256)", "66c49da5": "viewThirdBatchOfClauses()", +"66c49e68": "preincr_u8(uint8)", +"66c4f64a": "InternalCloseDeal(uint256)", "66c5c4a0": "unfreezeAll()", +"66c5c69c": "recreateCondition(uint256)", "66c5cdf8": "updateTotal(uint256)", "66c618d4": "sameWhiteList(address,address)", "66c630bc": "honourWhitelistEnd()", +"66c64e51": "getItemHistory(uint256)", +"66c6ac0a": "firstPurchaseTime(address)", +"66c6bb0b": "harvest(address,bool,uint256)", +"66c70685": "yourStakedBSC(address)", "66c71952": "setDiscountPercent(uint256,uint256)", "66c76592": "_raffleDraw()", +"66c76ad9": "getAllRegions()", "66c7d1ed": "RozelCoin(uint256,string,string)", "66c7fb77": "generateDeed(string,bytes)", "66c82de8": "ContributorPool(address,uint256,int256,uint256,int256)", "66c89a13": "getAssetEmmiter(uint256)", +"66c8be98": "approve_625(address,uint256)", +"66c8f919": "updateSteamBurnFee(uint8,uint32)", +"66c8feac": "reservationChange()", "66c91053": "doubleTransfer(address,address,address,uint256,uint256)", "66c99139": "trans(uint256)", "66c9bc38": "etherExchangeLikeCoin()", +"66c9c780": "AttackingWithdraw()", "66c9d697": "executeVerdict(bool)", "66ca2bc0": "sendSignal(bytes32)", +"66ca4a21": "getBorrowingRateWithDecay()", +"66ca7abb": "releasePrivateSaleAllocation(address)", "66cab1f3": "isSponsorshipRefunded(address,uint256)", "66cab95c": "isDeployer()", +"66cb285d": "approve_637(address,uint256)", +"66cb427c": "unstakeAllUnlocked(bytes)", +"66cb8d2f": "getDefaultPositionRealUnit(address)", +"66cbca4f": "PriceUpdated(uint256)", +"66cc1672": "PUREContractType()", "66cc6064": "getPayout(uint256,uint256,uint256)", +"66cccc72": "ReleaseLockedBalance(address,uint256)", "66cd0663": "setCrowdsaleFinished()", "66ce10b7": "publicKeyVerify(uint256,uint256,uint256)", "66ce3bd2": "walletBalanceOf(address)", "66ce5c52": "minWeiToPurchase()", +"66ced602": "potAddress()", +"66ced93e": "transferTokenByAddress(address,address,uint256)", "66cf058a": "endIcoSaleRound2()", +"66cfcf8d": "isInvestmentAddressRefunded()", +"66cfd057": "pushSolution(string,string,string)", "66d003ac": "recipient()", +"66d06f6e": "_unifiedDebtShareKey()", +"66d0832c": "sponsorsPaid()", "66d0c603": "addExternalContributor(address)", +"66d0eb80": "withdraw(string,uint256,uint256,uint256,uint256)", +"66d0ee19": "merkleRootsTotalRewardsVested(uint256)", +"66d103f3": "getUserLastUpdate(address,address)", "66d10688": "getBoughtTicketCount()", +"66d113b5": "claimDevCommission()", "66d11c1a": "ContractAddress()", "66d12fad": "getStakeInOutcome(bytes32)", "66d16cc3": "profit()", +"66d19e72": "name_pID_(bytes32)", "66d1cac9": "updatePost(uint256,string,string)", +"66d1dd4c": "trialEndedOn()", +"66d256d6": "_mintCrowdsaleBlock(address,uint16)", "66d29324": "defrosting()", "66d2da12": "setUser(address,address,string,string,bytes32,uint256,uint256,uint256[],string,string)", +"66d3483c": "checkMyVote()", +"66d37029": "BakerySwapRouter02()", "66d38203": "setup(address)", "66d39035": "getContribution(bytes32,bytes32)", +"66d40f68": "privFixedPoolTakers(uint32)", "66d42b3f": "Betting(uint256,uint256)", +"66d48e0a": "profits(bytes6)", "66d49bab": "updateTotalSupply(uint256)", +"66d4b643": "network_fee()", +"66d561d2": "registerFile(string)", +"66d581f0": "_loan(address,address,uint256)", "66d598f0": "E18()", +"66d5bd9f": "setInitialSettings(address,uint256,uint256,uint256,uint256)", "66d5c8ed": "node_left_child(uint256)", "66d5eb9b": "openZoneShop(bytes2)", +"66d68a3c": "getEstimatedETHforHex(uint256)", +"66d6ea8b": "ProofOfBurn(uint256)", "66d76bb2": "rateETH_ROK()", +"66d7a11d": "hasWhiteList()", "66d7ffde": "left24(uint256)", +"66d81e4c": "getPriorImplementation(address,address,uint256)", +"66d8acfc": "setaddrr(address)", "66d8c463": "reveal(bytes32,string)", "66d8d040": "dividendsRightsFixUpdate_(address,address,uint256)", +"66d97b21": "caps(address)", +"66d97c29": "withdrawAnyOtherERC20Token(address)", +"66d995fc": "setLockLiquidityContract(address)", +"66da29a2": "Records(uint256)", +"66da3757": "CardPreSelled(address,uint16)", "66dacc48": "afterFirstRefundRoundFundsReleaseDenominator()", +"66db09c6": "checkAntiSpamConfirmations(uint256,uint256)", "66db11e7": "nodeExists(bytes32,bytes32)", "66db2a59": "competitorPAY(uint256)", +"66dc5618": "getTrophyCount()", +"66dc5dd5": "UpdateContributorsTokens(address,uint256)", "66dc860a": "getBreedingFee(uint40,uint40)", +"66dc974d": "updateTracking(address,uint256)", "66dd3bc0": "terminateAccount()", "66de5a4f": "createWorkerPool(string,uint256,uint256,uint256)", "66de6fa4": "isReachedLimit()", "66de84ec": "withdrawBonus()", +"66de8c01": "view_portfolio_token()", +"66dea52a": "MINIMUM_BEP20_SYMBOL_LEN()", +"66df015a": "claimIncome()", "66df8fe6": "secondStageTotalSupply()", +"66dfbfb4": "lock(uint256,address)", +"66e01677": "createEstate(string,string,string,string,uint256,string)", +"66e070aa": "setDataModel(address)", +"66e0793d": "btcToBProWithPrice(uint256,uint256)", "66e13d36": "stakeForWithLockup(address,address,uint256,bytes)", "66e144f9": "Futurescoin()", "66e159b8": "CreatedNIMFA(address,uint256)", "66e16aff": "mdbToken()", +"66e18bc2": "getMonsterPriceInTokens(address,uint256,uint256)", +"66e19a48": "_issueSynths(address,uint256,bool)", +"66e1a92b": "setExtensions(address,address)", "66e1aa99": "assignCertificate(address,string,string,string,string)", "66e1cebd": "getStakingGains(uint256)", "66e20b51": "crowdsourcers()", "66e20e77": "priceNumerator()", +"66e226bd": "setUSDTToken(address)", "66e23276": "ADVISERS_SUPPLY()", "66e264be": "p2Of(uint256)", +"66e28fcd": "totalDividends(address)", +"66e2c021": "pepeGrinder()", "66e305fd": "isEligible(address)", "66e34dc6": "registerUsername(bytes32)", +"66e38ec9": "isCompetitionOpen()", +"66e3c026": "getTrustedNodeCount()", "66e3c230": "callLibSet2(uint256)", "66e3cb68": "upgradedFrom(address)", "66e3e5e4": "contractTokenBalance(address)", @@ -58969,12 +107913,20 @@ "66e41cd7": "GetTime(uint8)", "66e4f8c8": "getLastSpinOutput(address)", "66e5cb50": "stopTransfer(uint256)", +"66e5d14c": "claimAndExit()", +"66e5e8bb": "setTxTreshold(uint256)", +"66e5f2c5": "voteProposal(address,uint256)", "66e61a31": "outProjectBinding(uint256,address,address)", +"66e6360d": "getPersonalStakeActualAmounts(address)", +"66e63fc3": "managerTransfer(uint256,bool)", "66e65eb1": "checkLocked(address,uint256)", +"66e6aa75": "updateIPFS(bytes32,string)", "66e6c8af": "authorise(address)", "66e7107e": "SCARABToken()", "66e722b0": "SecurityToken(string,string,uint256,uint8,address,uint256,uint256,uint8,address,address,address)", "66e72baa": "transferWithLock(address,uint256,uint256,uint32)", +"66e7a93b": "getWinPercentage(uint256)", +"66e7b0bd": "changeTokenAddresses(address,address,address,address,address,address)", "66e7ea0f": "incBalance(address,uint256)", "66e84652": "resetContribution()", "66e8a4d7": "testGetBonus()", @@ -58982,42 +107934,69 @@ "66e98c31": "createCoin(string,uint256,uint256,string,string,address)", "66e99a11": "lxhcoin4()", "66e9b336": "removeReturnableToken(address)", +"66e9c4a6": "upgradePoolBatch(uint256,uint256,uint256,uint256)", +"66ea495d": "addCodeUpgradeProposal(address,bytes32)", +"66ea4e7b": "addAsset(address,bytes32,string,uint256)", +"66eb399f": "setIsMinter(address,bool)", "66eb463f": "changeRootAdmin(address)", "66eb50b2": "startLeaderboard(uint64,uint64,uint64)", +"66eba031": "dividendsOf(uint256)", "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)", +"66efcb78": "setCurrentTimestamp(uint256)", +"66f00b4b": "submitStakingRewardsSetRewardsDurationTx(address,uint256)", +"66f048dc": "pairLimit(address)", "66f0a3f6": "getTokenRemain()", +"66f1652f": "getListCandidatesOfDistance(uint256)", +"66f1bc67": "log(address,uint256,uint256,bool)", "66f1e438": "getMiniPoolEdit_7()", +"66f249dd": "takeBonus()", "66f2d859": "setSellRatio(uint256)", "66f36b34": "Birth(uint256,string,address,bytes32)", "66f3882f": "setIcoPhase(uint256,uint256)", "66f3a2b8": "totalPreBuyers()", +"66f45ba6": "addYToken(address,address)", +"66f483ff": "getDmapDapp()", "66f4e1c7": "MAX_GRANTEE_TOKENS_ALLOWED()", "66f516fe": "changeTimeAndMax(uint256,uint256)", +"66f5cd88": "Sold(uint256,address,uint256)", +"66f5dd9e": "candidatesNumber()", "66f5f332": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"66f6e6e7": "queryUserValidatorInfo(address)", +"66f7172d": "setTokenAddress(uint256,address,address)", "66f7d730": "WithdrawalEnabled()", "66f7d9da": "accumulatedHours()", +"66f82a27": "addCoverAndCreatePoolsForAccount(address,address,address,uint48,uint256,address,uint256,uint256)", "66f83e91": "getRandom(address)", "66f84d30": "setParent(uint256,string)", +"66f8913d": "updateArtistName(string)", "66f8bbe0": "DMarketToken(address,uint256,uint256,uint256,uint256)", +"66f8cd93": "rebalanceFixedBorrowRate(address,address)", "66f8e86f": "MLQD()", "66f928d3": "updateShareRuleGroup(uint256,uint256,uint256,uint256,uint256)", +"66f94e0f": "index2memberAddress(uint256)", "66f9785a": "EtherShuffle(address[])", "66f99a11": "setOpenValueGasLimit(uint256)", "66f9c99e": "setUpgradeAddress(address)", "66fa2be9": "tickets(bytes4,uint256)", "66fa6efb": "unverify(address,address)", "66fb3831": "VALUEBACK()", +"66fb86d6": "earlyBirdAllocations()", "66fbc154": "earlier()", "66fc0dd7": "walletTeamAdvisors()", +"66fc237b": "lockFromBlock()", "66fc6937": "lastCharge(address)", +"66fc978f": "Drained(uint256,uint256)", "66fcf285": "distributeMulti(address[],uint256[])", "66fd3cd8": "commit(bytes)", +"66fd428e": "compoundInterestMultipliers(uint256)", +"66fd551d": "upgradeCapitalPool(address)", "66fd555f": "Comission(address,bytes32,uint256)", +"66fd806a": "Weight(uint256,address)", "66fda50b": "removeOracles(uint256,address[])", "66fe16e9": "emitIssued(address,uint256)", "66fe25a0": "IcoEndDate()", @@ -59025,184 +108004,373 @@ "66fe825a": "Gruptecoin()", "66fea1d4": "setRandomSeed(uint256)", "66ff8201": "GetChipNum(address,uint32)", +"66ffcf5f": "vestingInfo(uint256)", +"66ffd609": "renounceDepositor()", "66ffebb8": "changeHolderPercentage(uint256)", +"67002713": "waifusInDungeon(uint256)", +"670079eb": "getAccount(address,uint256)", +"67008f6d": "ExportReceiptLog(bytes8,address,address,uint256,uint256,bytes,uint256,uint256,bytes32,bytes32,uint256,uint256[],uint256,uint256,uint256)", "67013719": "enableControl(bool)", +"6701586a": "getMVDFunctionalitiesManagerAddress()", "67016c14": "issueTokensToBuyer(uint256)", "6702416e": "addDoctorTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", "67025dcf": "transferAll(address,uint256[])", +"6702859e": "SellerMap(uint256)", "670396e7": "CashToken()", "6703c429": "ETCReturn(address,uint256)", "67043001": "isEIP20Token()", "67043cae": "registerOffChainDonation(address,uint256,uint256,string,bytes32)", +"67047c4a": "getPeriod(uint64)", +"67057b6c": "withdrawFeeFactorMax()", +"67058d29": "setMinimumThreshold(uint256)", +"67059070": "setSeriesMetaURI(uint256,string)", "67061a55": "teamSharePercent()", +"6706467b": "batchSetTokenURI(uint256[],string[])", "67069544": "issueAssetToAddress(bytes32,uint256,string,string,uint8,bool,address)", "67069916": "OwnershipTransferCanceled()", +"67069ab4": "pPIE()", +"6706ab0f": "tokensStaked(uint256,address)", +"6706b08e": "transferTokensAvg(address,address,address[],uint256)", +"6706d0d0": "uBetCheckAccts(uint256)", "670733b5": "setBitwordsWithdrawlAddress(address)", "670744cf": "_createCobeFriend(uint256,uint256,uint256,uint256,address)", +"67079749": "persistentAsset(bytes32)", "6707b8aa": "BestEtherSupply()", +"6707bb06": "limits(bytes32,address)", +"6707d302": "getStakeAmountByUser(address)", "67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", "67084eb3": "houseBalance()", "67085633": "getMyGenes()", +"67085d36": "userDict(address,uint256)", "67085dab": "bnCheck()", +"6708b0f5": "rhinoPerBlock()", "6708cc63": "becomeKing()", +"6708ec14": "addEth(uint256)", "6708f91d": "Rurchase(address,uint256,uint256)", +"67097a4b": "durationInMonths()", "6709b337": "Token(string,string,uint256,bool,bool,string,string,uint256,uint256,uint256,bool)", "670a1e6f": "getEligibleAmount(address,uint256)", +"670a6fd9": "updateAdmin(address,bool)", +"670a8cb7": "witnesses(uint256)", +"670aaacd": "WITHDRAW_ALL()", +"670af6a9": "setClaimTopicsRegistry(address)", "670be445": "initialEPXSupply()", "670c00d0": "getMotPrice(bytes32)", "670c1500": "CoinCool()", "670c314e": "TimeFinish()", "670c3ac2": "priceUpdateTimeline()", "670c5370": "addCandidateByIndex(uint256,address,string,string)", +"670c5841": "ChangeAddressWallet(address,address,address)", +"670c61a2": "withdrawAllFromPoolOnUpgrade(uint8,string)", "670c884e": "setup(address,uint256,uint256,uint256,address)", "670ca672": "NTVToken()", +"670cec37": "activateContract(address)", "670d14b2": "keys(address)", +"670d1e6f": "calcSwapLunaToEthInputs(uint256,address[])", +"670d7034": "approve_825(address,uint256)", +"670d8bf6": "_decode_sol_bytes1(uint256,bytes)", "670da6f8": "getOwnerPetCount(address)", "670e2e7f": "DatumGenesisToken()", "670e64c8": "setWhitelistingAgent(address,address,bool)", "670eedba": "strConcat(string,string,string,string,string,string,string)", "670f4bd4": "releaseDivTokens()", +"670f773c": "getIntermediaryToken()", "670f8755": "_0xZibitToken()", "670fe0ff": "TootrTokenSale()", +"670fe742": "_encode_string(string,uint256,bytes)", +"671077e6": "greyIndexToOwner(uint256)", +"6710e0ca": "LogPayDividends(address,uint256,uint256)", "6710e801": "_createRabbit(uint256,uint256,uint256,uint256,uint256,address,uint8)", +"6710fb28": "distributable()", +"67112b7d": "setMun(address)", +"671137c4": "removeExternalErc721Award(address,address)", +"671273f4": "setPeriodDuration(uint64)", "6712a67f": "addNodesCache(address[],bytes32[],bytes32[],bytes32[])", "6712e0be": "tokenGenerationMin()", "67130e8c": "getWeiOwed(address)", "6713263d": "crowdsaleTokens()", "6713640d": "TierStarterDividendAddress(address)", +"671384fa": "modifyParameters(address,bytes32,uint256,uint256,address)", +"6713b748": "airDropAccount(address)", "6713e230": "isTrusted(address,address)", +"6713e2fe": "TIMEOUT1()", "67141690": "getEnabledTokensInformation()", "67141732": "createContractCity(string)", +"671457bf": "_getRelayedCallData()", "6714cfe2": "GetLuckyGamblers(uint256)", "6714e027": "deal(uint256[3],uint256,bytes32,bytes32,uint8)", +"6714f1eb": "setBaseVolatility(uint256)", "671528d4": "isCapped()", +"67157ff0": "getCoverLength()", +"6715a230": "_hasAccount(address)", +"6715bb2e": "AxieEvolved(uint256,uint256,uint256)", +"671616d5": "getPredictionStatus(uint256)", "6716a692": "setDVIP(address)", +"6717112e": "flashSwap(address,uint256,address,address,address[])", +"67172c7d": "isAuthorizedForTransactions(address)", +"6717e41c": "usedNonces(uint256)", +"6717f563": "restoreCollateral()", "6718484f": "create(uint256,address,string,string)", +"6718a1a1": "setPrivate(uint256,uint256)", +"67191fc0": "getBancorConnectorsAmountByRelayAmount(uint256,address)", +"671925ad": "icoend()", "67194bee": "AirdropClaim()", "67198207": "EARLY_CONTRIBUTION_DURATION()", +"6719d08c": "PauserAdded(address)", +"6719d7ac": "eurOracle()", +"671a11b5": "getAmountOut(uint256,uint256,uint256,uint32,uint32,uint32)", +"671a926f": "getRewordForHour(address)", +"671aa307": "refundEthAmount(uint256,uint256)", +"671aa7ba": "approve_792(address,uint256)", +"671aced4": "redeemTest(uint256)", +"671b0d7f": "usersActiveX5Levels(address,uint8)", +"671b3793": "totalVotingPower()", +"671b4d49": "_registerValidator()", "671baae3": "Sepp(uint256,string,uint8,string)", "671bd594": "setBigPrice(uint256)", "671bdc3d": "PrimebankCoin(uint256,address)", +"671c1806": "LogListerSet(address)", "671c7d68": "test02()", "671d3315": "bookAfternoonVisit(uint256)", +"671d5934": "setStopTransfers(bool)", "671d6429": "setTreasurer(address)", "671dacdc": "CalculateSqrt(uint256)", +"671dd275": "QUORUM_VOTES()", "671de554": "mintPreICO(address,address,uint256,uint256,uint256)", +"671dff8a": "contributions_2(address)", "671e4405": "isFinalize()", "671ec66c": "setDomainOwner(bytes32,address)", +"671f0f50": "fetchImplAddress()", +"671f30a6": "giveRating(uint256,int256)", "671fa0a0": "Inscription(string)", "67202d40": "fetchAllVotersByIndex(uint256)", +"6720388a": "wordValue()", +"67206d40": "inCaseTokensGetStuck(address,uint256,address)", +"67206d90": "onEndTx(uint256,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "6720ceb1": "sendPayment()", +"6721bb39": "thirmTokenAddress()", "6721ebe2": "airdropThroughput()", "67220fd7": "adminClaimAirdropMultiple(address[],uint256)", +"672216a7": "Reserved(uint256)", "67221df0": "isPendingA(address)", +"67227992": "array_example()", +"6722bbba": "create(uint256,address,uint256,string)", "672324ac": "cashInRate()", +"672326b8": "withdrawRevealerReward(uint256,address)", "672350bd": "getFreeExtension(bytes32)", +"672383c4": "factories(uint256)", "6723c20d": "testTrip(uint256[3])", +"6723e38d": "currVault()", "6723eab5": "batchCreateETHCardAsset(uint8[],uint256[],uint256[],uint256[],address[])", "67243482": "airdrop(address[],uint256[])", +"67244714": "getToken(address,address)", "67249254": "mintWithLock(address,uint256,uint256,uint256)", +"672519a0": "_removeDebt(uint256)", "672566a0": "Upgradeable()", +"6725b062": "getPassengerList(string,uint256,uint256)", "6725bed6": "CCH_RE_2()", "67268bbc": "removeTransfer(uint256)", +"6727283c": "addSlavePool(uint256,string)", "67272999": "claimETH()", +"6727527b": "getCurrentSupplier()", +"672756ad": "claimNFT()", "672781ed": "priceClaim()", +"6727a9aa": "setOffChainCurrencyValuator(address)", "6727cc2d": "removeWhiteListAddress(address[])", +"672815c2": "getDiscoveredPlanetsDensity(uint256,uint256)", "67286a83": "getGoldStatusAuditcount(address)", +"6728a142": "setup_contract_state(bool)", "6728b711": "RealAssetToken()", +"6728bb3b": "DeleteNodeGroup(uint256,uint256,uint256)", +"67291cbb": "dividedEvt(address,uint256)", +"67296fd7": "TeamSaleCreated(uint256[9],uint256,uint256,uint256,uint256)", +"6729a41e": "newOwners(uint256)", +"6729d9a9": "l2l4users()", +"672a0942": "addPhase(address,uint256)", +"672a11c5": "awardTitle()", +"672a7627": "AddFoundation(address,uint256,uint256,uint256)", "672acef0": "participantCapTier2()", +"672b3cf2": "getFContracts(address)", +"672b9f81": "getByHash(uint256,uint256)", "672c8dca": "ownerTakesAllNotClaimedFunds()", "672ce152": "HodlBox(uint256)", +"672d17fc": "setTokenTrade(address,address,bool,uint256,uint256)", "672d2921": "zasxzasxqaq()", +"672d5d3b": "getCurrentBlock()", +"672d6386": "totalPaymentProcessed()", +"672d7a0d": "registerNode(address)", "672e06d0": "withdrawForOneYear()", "672e20fe": "allocateRemainingTokens(address)", +"672e2e7a": "percentCanVest(address)", +"672edbb9": "withdrawGovToken()", +"672ee26b": "withdrawNotExecutedResult(uint256)", +"672f3507": "player2JoinBlockNumber()", "672f412c": "setAllowDisbursePaymentWhenPaused(bool)", +"672f8e4f": "wpow(uint256,uint256)", +"672f8e81": "TokensClaimed(address,uint256,uint256,uint256,uint256,uint256,address)", "672fcd82": "createBet(uint256,bool)", "67301dde": "IWWEE()", +"673067d5": "harvestBalance()", +"6730d965": "sendCommission(address)", "67316b3f": "addWhiteListAddress(address[])", +"67320164": "withdrawaBalance(int256)", "67337d1a": "ReporterTokenSale()", +"673402e5": "temp()", "673441db": "TokenAltPurchase(address,address,uint256,uint256,uint256,string,string)", "673448dd": "isApproved(address)", "673478c3": "getAssetIdOwnerIndex(uint256)", "6735a1cc": "previousStage()", +"6735b3a7": "addRole(string,address)", +"67361058": "getTotalMiningStrength(uint256,address)", "67374f3a": "setTargetWallet(address)", "673756d8": "SOFT_CAP_EUR()", +"67375a54": "withdrawMoondayETH(uint256)", +"6737b31e": "repayment(uint256)", "6737c877": "setAttributes(bytes)", +"673834a2": "initiateFlashLoan(address,address,uint256,address,address,address)", "6738426c": "enablesTransfers()", "67387d6b": "testThrowCreateWithNonceExistingNonce()", +"67387efb": "smallUintFunc(uint8)", +"6738929f": "SPOTTER_ADDRESS()", "67389944": "voteB(uint256)", "67389d17": "SuppliedTo(address,uint256)", +"6739695f": "WithdrawShare(address,uint256)", "6739afca": "network()", "6739f3a4": "getAuctionDuration(uint256)", +"6739f902": "Implt(uint256)", "6739fc52": "testOrd()", +"673a0481": "buy(uint8,uint8,uint256)", "673a2a1f": "getPools()", "673a456b": "setNumActiveTranscoders(uint256)", "673a5ae3": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256,uint256)", "673a7e28": "updatePrice()", +"673b1842": "modelOf(address)", "673b57e9": "deauthorizeProvider(address)", "673c0e53": "readAllFrzAcc()", "673cd98e": "total_amount()", +"673da154": "redeem(bytes32,uint256)", +"673dcc73": "testKeccak()", "673df0e0": "horseMaster()", +"673e0481": "pairs(bytes32)", +"673e97ea": "VestingScheduleRegistered(address,address,uint256,uint256)", +"673ea086": "updateFrequency()", "673f3807": "sell(uint256,uint8)", +"673f5000": "setValueHolder(address)", +"673f554b": "pool7currUserID()", "673fa8c9": "APaymentToken(uint256)", +"673fc96a": "ETH2USDT()", +"673fe185": "MNEFiveYearsBondsCount()", +"67403835": "tokenBackground(uint256)", +"6740775d": "OwnerRemovedEvent(address)", +"67407893": "addDetailContent(uint256,uint256)", +"674086f6": "checkNNUsedCreate()", +"6740b9c6": "totalLpFees()", "674106d8": "checkDragon(uint256)", "67412045": "balanceOf(address,uint8)", +"67412b27": "doERC20TransferIn(address,uint256)", "6741629c": "wasEmergencyCancelled()", +"6741813e": "getNextAmountDistributed()", "6741953e": "getPOOL_edit_15()", "674197f8": "getBuyRequestCount()", +"674247d6": "TOTAL_DISTRIBUTED_AMOUNT()", "67426ba4": "callgDistributed()", +"6743dcaf": "trustedCashTransfer(address,address,uint256)", "67441f52": "LOOMIA1()", +"6744386f": "tokenRewards(address,uint256,address[],uint256[])", "6744ea49": "GetEscrowTokenSymbol()", +"67453969": "ethicHubStorage()", "67457022": "rmul(uint256,uint256)", "67460c25": "createWikiPage(string,string,string,uint256)", "67460d58": "setGate(uint256,uint16)", "67465daf": "StorageExample()", +"6746cf1c": "priceCheckCreamToCreth(uint256)", +"674759e9": "escrowCharge()", "6747830d": "calculateRequiredFillingAmount(uint256)", "6747a33f": "accrualDeposits()", "6747f09e": "cashOutFallbackAmount()", +"6747f9ba": "mutantPerBlock()", +"6747fc13": "withdrawAdmin(address,uint256)", +"67481bcf": "sendETH(address,uint256,uint256)", +"6748355e": "whatDevCanWithdraw()", "6748a0c6": "releaseFinalizationDate()", "6748a106": "powLimit()", "674942eb": "VOTING_PREPARE_TIMESPAN()", +"6749ab9a": "preciseMulCeil(uint256,uint256)", "6749ec48": "issueLicenseNFT(bytes32)", +"674a0e69": "tokenMovePercent()", "674a1574": "claimedIdeas(address)", "674a62d0": "coinIssuedMkt()", +"674a64e0": "cacheSize()", +"674a932d": "_extractDESTSentByMistake(uint256,address)", +"674a99ae": "getKingPerBlock(uint256)", +"674aa712": "categoryAction(uint256)", "674aaa44": "transferToAnotherAddr(address,address,uint256,bytes32)", "674b3bd5": "originalArtwork(bytes32,address)", +"674b691a": "setOptionSettings(uint8,uint256,uint16[6],uint16[6])", +"674b81e6": "getNumRegistered()", "674c20a1": "test0_firstInterval()", "674c5eaf": "setReceiver3(address)", +"674c70d1": "foo11(address,uint256)", +"674c7ca8": "B5(bytes)", "674c85a7": "mdiv(uint128,uint128)", "674cc1f5": "getMarketHashes(bytes32[])", +"674cd0f8": "setReleaseSec(uint256)", +"674ce1b5": "coreVault()", +"674d106e": "setCollateral(address,uint256,uint256,uint256,uint256[])", "674d13c8": "totalReservedSupply()", "674d4691": "_getWeiValueOfTokens(uint256,bool)", "674e4e0e": "extendUnlockDate(uint256)", +"674e694f": "setSplit(uint256)", +"674e7292": "baseDFL()", "674ea3cb": "closeAgreement(bytes,uint8[2],bytes32[2],bytes32[2])", "674ebb3e": "cancelKimAuction(uint256)", +"674ec6b0": "membertokenid(string)", "674ed066": "minQuorumDivisor()", +"674ef0fa": "clean(uint256)", "674ef6c3": "initializeTier(uint256,address)", "674f220f": "previousOwner()", +"674f8d8e": "decreaseWeight(address,address,uint256,uint256)", +"674fb1b4": "withdraw(uint256,uint256,uint256,uint256)", +"67511f48": "tokenToBaseTransferInput(uint256,uint256,address)", "6751676f": "recentBuyers(uint256)", "6751ad3d": "_insertAttackLog(uint256,uint256,uint16,uint32,uint8,uint32,bool)", +"6751afa8": "getPartnerArr()", +"6752138e": "getLevelFreePet(uint8)", "67524d62": "setJackpotThreshold(uint256)", +"67527c0d": "sellWithAgent(address,address,uint256)", +"6752d37a": "pymtDecimals()", "67532c8e": "sendPurchase()", "67535a42": "setEthmainAddress(address,address)", "6753a3c1": "setMajorEvent(string,string,string)", "6753fc59": "PurchaseAdmin()", +"6754128a": "arbitrageSell(address,address,address,uint48,uint256,address)", "67541efa": "AlfaCoin()", "67546967": "EthBtcEscrow()", "6754ff3a": "addcrontime(address)", "67550a35": "vox()", "67551857": "clearAllRequest()", "675518b8": "mintAndCreatePreIcoBitex(address,address)", +"67556c6c": "tokenSaleZOOF(address)", +"67558520": "getTaxRate(uint256)", "67558b3a": "AzlanToken()", "67561d93": "authorizeContract(address)", "675629fe": "appendOnly()", +"67569c3a": "send_delegate()", "6756b1ae": "GameTable()", "67571f68": "handlePayouts_(uint256,uint256,uint256,address,address,address)", "67578f65": "users(bytes20,uint8)", "67579ad4": "currentwealth()", "675879d5": "GrantedOrganization(bool)", +"67588c94": "updateMasterPool(uint256)", "6758aa3f": "requestApproval(string,string)", +"6758fa7c": "Setfeeslog(uint256)", +"67591a9f": "assetTypeSaleCount(uint256)", +"675969be": "minLoanCollateralSize()", +"6759789f": "getUserBids(address)", +"675981b7": "issueBond(address,uint256,uint256)", +"6759d88f": "createValidator(bytes32,uint256,uint256,uint256)", "6759fac0": "CatsToken(address)", +"675a0eaf": "weiBountyAmount(uint256)", "675a1f0f": "batchAddCandidate(address[],bytes32[])", "675a4633": "dnaMixer()", "675a54b9": "getHalvingOf(address)", @@ -59210,100 +108378,182 @@ "675abc96": "corporateSupply()", "675ac67a": "escrowCount()", "675b09cd": "Niobium()", +"675b4ef1": "pairs(uint256,uint256)", +"675b7fc8": "Guesses(uint256)", +"675be4c9": "increaseStarSupply(uint256)", "675c3048": "getTxTimestampPaymentMCW(bytes32)", +"675c5410": "ambInstructionGas()", "675c9fcd": "setSecretSignerList(address[])", +"675ca043": "toAffinePoint(uint256,uint256,uint256)", "675cc788": "getDiplomaOrganizerById(uint256)", "675cef14": "etherMinimum()", "675d43cf": "buyPixel(uint16,uint16,uint24)", +"675d972c": "initialExchangeRateMantissa()", "675d9c35": "XRT()", +"675dd749": "transFer10()", +"675de895": "adminCommission(uint256)", "675df16f": "updateSubmissionGasPriceLimit(uint256)", +"675e0865": "yourStakedETH(address)", +"675e88ad": "balanceOfPcUNI()", +"675e8ad9": "validatePoolConstraints(uint256,uint256,uint256)", "675ec1cf": "minimalUSD()", +"675f274c": "updateJumpRateModelInternal(uint256,uint256,uint256,uint256)", "675f6537": "settleBet(bytes32)", "675f6d1e": "callBackVariations()", "675f818e": "disapproveInvestor(address)", +"675f8ddf": "COFFEE_ADDRESS()", "675f9ad9": "initStages()", +"675ff5b5": "GetUNIreserves(address[2])", +"676004e6": "tokenAddressList(uint256)", "6760115a": "BuyerFund()", "67602c59": "burnSequence()", "67608d38": "ICO_TOKEN_SOFT_CAP()", "676095b2": "profit2eggs()", +"6760c8d5": "sendERC20(address,address,address[],uint256[])", +"67610923": "ethMissPool()", +"6761320e": "CNDAOrtAirdropCNDAO(uint256,uint256,uint256,uint256)", +"676215ce": "listHERO(address,uint256,uint256)", "67630f43": "buyNapkins()", "6763150e": "setKyberAddress(address)", +"6763583e": "addOrg(address,string,string,string,string,uint8)", "67636574": "consumed()", "676391d3": "_removeWhitelister(address)", +"6763b95c": "setUSDPPriceForBNB(uint256)", "6763da56": "dish(string,address)", +"67641472": "SetNotUpdatable(bytes20)", "67642794": "_withdraw(address,uint256,bool)", "676452f4": "t3tokenExchangeRate()", +"67646a7f": "setAuctioneerCut(uint256)", "6764765d": "burnMyTokens(uint256)", "67653f3b": "test_threeInvalidEqUint()", "6765b49b": "getPunishXPA(address)", +"6765d6fb": "setRatioBuff(uint256)", +"6766804e": "editDelay(uint128)", +"6766923e": "firstBlockAllowedToMonitor(uint256,uint256,address,address,address)", "67669e29": "rocketIsLaunched(uint256)", "6766d1ba": "getTimeUntilStart()", "6766fafe": "disableTransferWhitelist()", "676796b6": "releaseFounderCoins()", +"6767991a": "total_period_withdrawal()", +"6767d137": "tokenSaleAPE(address)", "6767e368": "ValueTrader()", "67682441": "UserUpdate(address,address)", "6768893c": "AppHub()", +"67689938": "_assetToken()", +"67689eda": "getAdminAmount()", +"6768d746": "mintGov(uint256)", +"67699dc5": "setIeoCoinDao(address,uint256,uint256)", "6769c20b": "setPicture(address,bytes)", "6769d1f9": "soldToken()", "6769eb46": "createMasker()", "676a38d7": "get_current_price()", "676a675a": "changeJohanNygrensAddress(address)", +"676a96d8": "_cancelDPRequest(uint256)", "676aa496": "IbnzEtc20TestToken()", +"676ab885": "lastGameIds(uint256)", "676b064e": "allForPopulate(uint256)", "676b57ad": "getNays(uint256)", +"676b7e85": "getRawFundBalance()", +"676bc74f": "itemIdToApprovedRecipient(uint256)", +"676bea67": "register(address,address,string,string)", "676c0d77": "updateTokenPrice(uint256)", +"676c18bf": "newReply(uint256,string)", +"676c1c6b": "InitiallAllocationLocked(address)", "676c902f": "drawNumbers()", "676cb63d": "getMintingFinished()", +"676cd1ca": "inaddress(uint64)", "676cdcd6": "BurnExecuted(uint256,address,uint256)", "676cfec6": "rocks(uint256)", "676d1d9c": "WEI_TO_COGS()", "676d20ba": "WorkerToken(uint256,string,uint8,string)", "676d23a5": "isChangePriceLocked()", "676d2e62": "migrationMaster()", +"676d6395": "_update()", "676d7769": "test_curatorDoesNotVeto()", +"676dcbdc": "T3_ADDRESS()", +"676dd21e": "stakingDeposit(uint256)", "676e2eb1": "_addDemoc(bytes32,address,address,bool)", +"676e5550": "getLiquidRewards(address)", +"676e7119": "testDataTypeUint8()", +"676f0fff": "ReferalGain(address,address,uint256)", "676fc32b": "maximumTokensForThird()", +"676fcf7d": "sdarkBalanceOfThisContract()", +"676ff9cf": "upgradeWETH(address)", "67701187": "updateFighter(uint256,uint8,uint8,uint8,uint8,uint32,uint64,uint16,uint64,uint16,uint16)", +"677016f9": "calReward()", "6770260e": "ContributionMade(address,uint256)", "67707337": "CryptocarToken()", +"67707748": "renounceOwnershipFALSE()", +"67708dae": "firstPriorityRequestId()", "6770da62": "_stealCardWithSocialIdentity(uint256,uint256)", "67716abc": "learnFee()", "677170e1": "_span(address,address)", +"67718acd": "withdrawExcessiveTokens()", +"6771abe5": "_computePoolRewardsSplit(uint32,uint256,uint256)", "677342ce": "sqrt(uint256)", +"67739387": "rewardAllocation()", +"6773b3e0": "setUnderlyingTokenDecimal(uint256)", "6773b75f": "propertyIndexToApproved(uint256)", +"677412e4": "ethFoundation()", +"6774d97c": "ownerCertificates(address)", "6774f8e1": "getMonarchyController()", "67756fe9": "depositPayment(address)", +"67759aa2": "getMultiplier(uint256,uint256,uint256,uint256,uint256,uint256)", +"6775ef69": "setQuestionTimeout(uint32)", +"67767756": "WalletRegisteredForFeeSharing(address,address)", "6776ddd0": "currentHodler()", "6776e56a": "validateProposedKingdomName(string)", +"6776f506": "listDirectReferals(bytes3)", +"67772eb1": "next_count()", +"677788d0": "_getTokensCache(address)", "6777d177": "icostarted()", "6777e4eb": "dollarMultiplier()", "677885d3": "BITIFEX()", +"6778bd9d": "exchangePortalAddress()", +"6778e0e9": "encodeCollateralAsObject(address,uint256)", "677913e9": "setAmount(int32)", +"677973bd": "pendingBAL(uint256,address)", "677978ec": "increaseTokenCap(uint256)", +"67799bd8": "removeERC20TokenContractAddr(address)", "6779da43": "setAwardTokens(bool)", +"677a68e1": "owedBalance(address)", "677a7444": "Votaciones(bytes32)", "677a7735": "Shares(bytes32,bytes8,uint256,uint256)", "677a8870": "TeamWallet()", "677ab197": "processContribution()", "677ab667": "INITIAL_STARTTIME()", "677b1f0d": "_buyTokensFromSystem(uint256)", +"677b253f": "LockerFriendlyName()", "677ba3d3": "onTokenTransfer(address,address,uint256)", "677bcb89": "regularMinPerPerson()", +"677c0812": "enableVirtualBalances(uint16)", "677c102d": "getHostOrders(address,address)", "677cee54": "SafeConditionalHFTransfer()", +"677d3924": "changeMachineTitle(string)", +"677d9b40": "finalizePresale2()", +"677df79f": "viewOracleFee()", +"677e000b": "tokenSupported()", "677e2dc4": "setDailyPrice(uint256)", "677e2ef2": "getReplyFee(uint256)", "677e6fa4": "betOnColumn(uint256)", "677ebf2c": "InvestmentAsset(address,address,address,string,string,uint256,uint256,uint256,address)", "677f768d": "isOnTrading(uint256)", +"677ffa14": "getRefData(string)", "677ffb0d": "exerciseLong(address[2],uint256[8],uint8,bytes32[2])", "6780a311": "transferStop()", "6780b32e": "moveAccount(bytes32)", "67814109": "_mintTimelocked(address,uint256,uint256)", +"67815378": "GovNFT()", +"67816c92": "SetPool(address)", +"6781c700": "getChildsCount(address)", "6781cc04": "addPolicy(uint8,uint256[],uint8[])", +"678209a8": "log(address,uint256,bool)", +"67820d32": "ethManualHotWallet()", "678212d9": "tokensAuctioned()", "67821686": "setETHUSDRate(uint256)", "67823a4a": "limitDateCrowdWeek2()", +"67828c9e": "GameCreated(uint256,address,string,bytes32[])", +"6782ab84": "sellFXBintoAMM(uint256,uint256)", "678365ca": "RHEMA()", "678377d2": "core(address,uint256,address)", "67845835": "Irapid()", @@ -59311,92 +108561,170 @@ "67848d9c": "PayEther(address,uint256,uint256)", "6784b075": "removeValidContract(address)", "6784ccb7": "Deceum()", +"6785159c": "get_BoundedSale()", "67854643": "getGenerationMemberLength(uint256)", "6785744d": "phase1Price()", +"6785a08d": "PacksLoaded(uint8,uint32[])", "6785a8f6": "getCandidateIndexArray()", "6785b500": "getChannelsAddresses()", "67863c07": "earlybird()", "6786ed0e": "setPriceRate(uint256)", "6787416d": "NRM()", +"67875864": "fundReserv()", +"678789d1": "notifyDeposited(address,uint256)", +"67878e46": "calcBonus(address,address,uint256)", +"6787ec2e": "Dev(address)", "6788317a": "UnitySale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", "678886b4": "updateTokens2PerEth(uint256)", "678892c0": "rand_num()", "67899248": "processKick()", +"6789dafd": "checkInflation()", "678a1013": "monsterNFT()", +"678a3c04": "approve_689(address,uint256)", "678a6baf": "ROUND_3_PRESALE_BONUS()", "678a7dca": "setShareFee(uint8)", +"678aae5a": "ballSperm(address)", "678ae6a1": "updatePools(bytes32,uint256)", +"678af593": "checkSuccessOfTransferBySchedule()", +"678b11e7": "StartBurnerTimer()", "678bbf24": "getEarningsAmountByGoodsIndex(uint256)", +"678c03aa": "getCommissionByContract(address)", +"678c7103": "wall()", +"678cbd80": "ComplianceDetail()", "678d2204": "shouldFail()", +"678d55d7": "testNN(address,uint256,address)", "678d6eff": "createFuel(uint256)", +"678d8d63": "compareBytes(bytes32)", "678d9758": "setTile(uint256,string,string,uint256)", "678dd961": "getProviderClosed(uint256)", +"678edca3": "setGasFee(uint256)", "678ee795": "ComputationService()", +"678eea10": "_checkTransferAllowed(uint256,address)", +"678f2d77": "VOTE_QUORUM_TO_PASS_PERCENT()", "678f4467": "allocateTokenForTeam(address,uint256)", "678f7033": "set_percent_reduction(uint256)", +"6790081c": "nicknameOf(address)", "679019ba": "freezeDeliverMultiStandalone(address[],uint256[],uint256[],uint256,uint256)", "67907404": "recruitNarco(uint256,string,string)", +"6790baad": "seasonalNumberStartPrev()", "6790d2b5": "getRoomInfo(uint256)", "6790f3fe": "getAccumulatedDistributionPercentage()", +"67912175": "buyStock(address,uint256,uint256,uint8,bytes32,bytes32,uint256,uint256)", +"67916596": "getPacksLeft(uint256)", "67923240": "hatchsubscribers(address)", +"679307ed": "sashimi()", +"6793141f": "getTotalPaid()", +"6793850e": "popPerBlock()", +"679398c3": "balanceOfStash()", "6793c8e1": "currentMilestone(uint256)", "6793d383": "registryContractAddress()", +"67944d74": "adminEndLSWAndRefundEveryone()", "67946ea4": "getIdMax()", +"67951836": "updateMneContract(address)", "67955ffa": "maxGIRL()", "679577a5": "getEmployerFeedbackOn(address,uint256)", "6795dbcd": "getAddress(bytes32,string)", +"67963132": "geyser()", +"67968b4e": "Check_contract_balnace()", +"67969383": "initializeBroker(address)", +"67971080": "upload(bytes32)", +"67973021": "checkStakingAmount(address)", "67975213": "AddSWAndClaim(string,string,bytes32,bytes32,bytes32,string,bytes32,bytes32,address,uint32)", +"67979a5e": "betaUserAddress()", "6797b106": "strikePricePctX10()", +"67993e09": "withdrawBurnableTokens()", "6799c0e0": "vpe_per_Keos()", "6799d737": "releaseForEcosystem()", +"679a50f7": "pastWinnings(address,uint256)", "679a7a46": "WhoisOwner()", +"679ab22f": "jackpotWinner()", +"679adc88": "setFundingAddress(address)", "679aefce": "getRate()", +"679b0b8f": "pledge(address,uint256,uint256,uint256)", +"679b3763": "channel_counter()", "679b4567": "preicoStartDate()", +"679b6ded": "createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)", +"679b8115": "lifetimeHeartsStaked()", "679b948b": "switchSplitBonusValue(address,bool)", "679b9935": "setLeagueRosterContractAddress(address,address)", "679c0d40": "invariantBroken()", +"679c3cd2": "submitData(uint256,uint256,uint256)", +"679c4de1": "withdrawCollateral(address,address)", "679d0ecb": "getMetForEthResult(uint256)", +"679d317b": "LogStopCurrentGame(uint256,uint256)", "679d38e0": "selfdestruct()", +"679d52be": "getTokenETHOraclesLength(string)", "679dffb4": "getProfit()", "679e1149": "AcoraidaMonicaWantsToKnowTheNewAnswerHash(bytes32)", "679e5977": "EventRemoveAdmin(address,address)", "679ebf1a": "transferTicket(uint256,address)", +"679f1601": "ChengeSex(uint32,uint256)", "679f4d63": "CEEDCOIN()", "679f699e": "EOSERC20(uint256,string,string)", +"679fc4e5": "MintProposalAdded(bytes32,address,uint256,string)", "679fecd6": "refillArray(address[],uint256[])", "67a09c23": "payment(address,uint256)", "67a0a550": "_cancelOrderWithMerchant(string,address)", +"67a17b8d": "FrozenAccount(address,bool)", "67a19b20": "withdrawEthMaker(uint256,address)", "67a1b7dd": "addTicket(uint256,uint256,uint256)", "67a1bd55": "withdrawStuck()", +"67a1c605": "erc721Stakes(address,address,uint256)", "67a1d653": "YOO_UNIT()", "67a1f526": "curatorWrite(uint256,bytes32[])", "67a2072c": "setEtherHolder(address)", +"67a23d13": "getBar()", "67a2534b": "test(address[5])", "67a26cbc": "DuqueBrewingCompany()", "67a27811": "BonusGranted(address,uint256)", +"67a280b2": "resumeIssuance()", +"67a2928e": "hatcheryLobster(address)", +"67a34903": "ETHUSDSet(uint256)", +"67a36dc7": "marketingPart()", +"67a3839d": "updateFeeTarget(address)", "67a3eb65": "totalHardCap()", "67a449b8": "getLastRoundData()", +"67a4793e": "setLiquidityDivisor(uint256)", +"67a481b8": "getOrderHash(address[2],uint256[6])", +"67a4d1c3": "initializer(uint256)", "67a4e7c4": "isDecentBetToken()", +"67a52793": "depositFee()", "67a52fdb": "purchaseGold()", +"67a53be3": "isNode()", +"67a5641f": "_addProUser(address)", +"67a5669d": "refIDxpID_(uint256)", "67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", +"67a5b880": "setSmartPool(address)", "67a5cd06": "drip(address)", +"67a5e01f": "_interestScale()", "67a6ae62": "TOKEN_RATE_25_PERCENT_BONUS()", +"67a71e2b": "approveValue(address,uint256)", "67a7390d": "fundTransferred()", +"67a74ddc": "setPriceOracle(address,address)", "67a7804b": "influenceByToken(uint256)", "67a884e5": "latestBidder()", "67a88f78": "createBitcoinAddressPrefixTask(bytes,uint256,int256,uint256,int256,address)", +"67a92a5e": "TokenUnlock(string)", "67a9c971": "tgrSettingsAmount()", +"67a9fca6": "setLiquidityLockDivisor(uint256)", +"67aa0803": "whitelistLimits(uint256)", "67aa23e2": "getTicketsByOwner(address)", "67aa50ae": "updateBrokerVerifierContract(address)", "67aa863f": "setXto2()", +"67aa8ed9": "brRokova()", +"67aad7aa": "balancewk(address)", "67ab263a": "thisIsTheEnd(address)", +"67ab3aca": "lastDrillObjectId()", "67ab4381": "UnConf(string,address)", "67ab5486": "GET_MAX_UINT256()", "67aba225": "sellableToken()", "67acd805": "lowerMinWager(uint256)", +"67ad00b5": "burnX()", +"67ae5d84": "attachAddress(address)", "67ae9e8f": "hybridizationList(uint256)", +"67aea313": "safeEngine()", "67aea7d5": "buffs(uint256,uint8)", +"67aeef62": "cxcTokenAddress()", "67af1c81": "getRoundIndex()", "67af1cff": "ethRec(uint256,uint256)", "67af26fb": "transferOtherFrom(address,address,address,uint256)", @@ -59404,37 +108732,73 @@ "67aff919": "autoreleaseInterval()", "67b07d48": "entangleQuanticCloudIOTData(uint256)", "67b0e070": "FaceTech()", +"67b0f3a6": "oracledPerBlock()", "67b14a21": "getProposal(uint16,uint16)", "67b16407": "buyCup()", "67b16cd6": "getRealRndMaxTime(uint256)", "67b172c9": "Bloxxor(address,address,address,uint256,uint256,uint256)", +"67b1b7ac": "emitWithdrawal()", +"67b1bfc6": "sponser_pool_amount()", "67b1f5df": "setExchange(address)", "67b21506": "claimTokenReserveDevelop()", "67b220a5": "unblock(address)", +"67b25f94": "Transaction(address,uint256,bytes)", +"67b26af7": "safu()", "67b26cab": "getLastMaxInvestments()", +"67b2b21e": "addNo(uint256)", "67b327fa": "proposeMilestones(bytes)", "67b40639": "Dain()", +"67b40cf7": "rewardBalance(address)", +"67b4809b": "Unvote(uint256,address)", +"67b48f68": "newMom(address,address,address)", +"67b49de5": "DEV_TAX()", +"67b4ebfb": "returnTwoStrings()", "67b50af9": "gasAmount()", +"67b51d56": "sliceTokenHex(uint256,uint256)", +"67b52f54": "UNIfactory()", "67b5496a": "loseWager(uint256)", "67b55bf9": "getClickMetadata(uint256)", +"67b5cfe1": "epochWindowLengthSec()", "67b65656": "setStateStartTime(bytes32,uint256)", +"67b6d57c": "transferAnchorOwnership(address)", +"67b70b8c": "yourStakedUNIC(address)", "67b78d00": "fromHexChar(bytes1)", "67b7a4aa": "START_PRICE_IN_CENTS()", "67b7c034": "on()", "67b7d525": "getBlockPointer()", "67b830ad": "fillOrder(uint256)", +"67b8468e": "batchCollectETH(address,address[])", +"67b870af": "rpow(uint256,uint256,uint256)", "67b886e8": "left97(uint256)", +"67b8c319": "setUserBanStatus(address,bool)", +"67b905d7": "hexCurrentDay()", +"67b9a286": "removeLiquidity()", +"67b9d66c": "intraWeekPrice(uint256,uint256,bool)", +"67ba3d90": "getBoost(address)", +"67ba4bea": "_teamtokensmint(address,uint256)", +"67ba9b91": "getReleasingTimestamp(address)", +"67bb15ad": "shopModerators(address)", +"67bb422e": "registerCreatedContract(address)", "67bb474f": "allowBundling()", "67bb6d63": "maxWiteList()", +"67bbd907": "gnosisFactoryContracts(uint256)", +"67bc2692": "bets_(address)", "67bc480e": "MYSTERYCLASSICCOIN()", +"67bcbbc1": "yearTimePatronagDenominator()", +"67bccdb6": "updateMFactor(address,uint256)", "67bd15e3": "contractInitializationTime()", "67bd69a6": "getLastDuel2()", +"67bd7ba3": "calculateRedeemOutputs(uint256)", "67be0854": "partyHash(address,address,address,address)", +"67be4673": "elementCount()", "67be5eac": "claimLeftTokens()", "67be97a5": "BYToken()", "67bea493": "whitelistedPools(address)", "67beaccb": "scheduleCall(bytes)", +"67bf1030": "payoutAgent()", "67bfc445": "AddNewChallenge(uint256,uint256,uint256,uint256,uint256,bool,string)", +"67c145e0": "newAction(uint256,address,bytes)", +"67c1a6a2": "smar()", "67c1fb11": "christmasStocking()", "67c21fe5": "setFiscalVerify(uint256,bytes32)", "67c25a14": "TeamCreated(uint256,uint256[])", @@ -59443,102 +108807,167 @@ "67c33c80": "getInt8FromByte(bytes14,uint256)", "67c353b3": "LKCTotalSupply()", "67c36757": "IranToken()", +"67c369a4": "pendingxRune(uint256,address)", "67c3a6d9": "Khatamor()", "67c3ad8e": "burnStake(uint256,address)", +"67c3b483": "auctionOngoing()", "67c3e25e": "revokeAccessDeploy(address,address)", "67c45872": "ZzStandardToken(uint256,string,uint8,string)", "67c51be7": "viewTokensSold()", "67c5d6b1": "multihash(bytes32,string)", "67c623cf": "getTokenMetaData(uint256)", "67c6389e": "refreshlockedBalances(address,bool)", +"67c63bac": "accumulatedBNB()", +"67c6491a": "VoterChanged(address,address,uint256)", "67c6e39c": "convert(address,uint256)", +"67c71a13": "supersedable(uint32)", +"67c7ccfd": "getSeats_SideA()", "67c7f3a8": "setBwValidCaller(address)", "67c84919": "issueByPartition(bytes32,address,uint256,bytes)", +"67c8a506": "OAK()", +"67c8b15a": "hegicOption()", +"67c8bcf9": "getBucketNDoc(bytes32)", "67c9b017": "getEthPrice()", "67c9d266": "freezeUntil(address,bool)", +"67ca0103": "getContributorInfo()", "67ca1fdf": "market_communityStorageVault()", "67ca2298": "updateTokenName(uint256,string)", "67cab29d": "testGetAbiVersion()", "67cb103a": "PartnerUrl()", +"67cb1601": "enableAllTransfers()", "67cb61b6": "getChoice()", +"67cb6526": "recurringNaaSFeeInWei()", +"67cb77e7": "getFarmersCount()", "67cb9316": "get_header(uint256)", +"67cc1dad": "addVenueWrapper(uint256,address)", "67cc4882": "TokenHolder()", +"67cc71f0": "getWrapperMode()", +"67ccd1cb": "registerVault(address)", +"67cd21f4": "newRichest(address,uint256,uint256,uint256)", +"67cd2a21": "is_signed(address,bytes32)", "67cd3f64": "UNLOCKSTART()", "67cd5323": "PUBLIC_SALES_SPECIAL_USERS_RATE()", "67cd64dc": "LENDXCOIN()", "67cdbe8f": "newShip(uint16,uint256,uint256)", "67cdc1c2": "percentageToTeamEthContract()", +"67cddf4d": "getExchangeProxDetails()", "67ce38fb": "Vertex_Token(uint256,address)", "67ce940d": "getOverhead()", +"67cebd22": "LPtokensTotal()", +"67cf05ad": "getLastPauseTime()", "67cf17c2": "transferPrimordialTokenFrom(address,address,uint256)", "67cf7d9c": "createTeamTokens()", "67cf91c9": "lastKickoffDate()", "67cfdfc9": "getBrokerIncoming(address)", "67d0661d": "doPause()", +"67d0aa5d": "setBorrowProxy(address)", +"67d0ed38": "withdrawalLock()", "67d13f27": "receiveFromVendor(address,bytes32)", "67d15775": "PromToken()", "67d198cc": "getVaultsRoot()", "67d22967": "set_iconiq_pre_kyc_bonus_numerator(uint256)", "67d326ef": "finalizeFundAddress(address)", +"67d3a44b": "createInvestor()", "67d3d0ec": "changeEthBalance(address,uint256)", "67d3eff4": "setTeamWallet(address,address)", +"67d407df": "replayNonce(address)", "67d41253": "secondCheckpoint()", "67d42a8b": "release(bytes32)", +"67d475ea": "setReentrancyMutex(bool)", "67d49909": "secondWinnerTimestamp()", +"67d4c58b": "playerRoundData(address,uint256)", "67d4e98c": "RemoveShare(address,uint256,uint256)", "67d4f541": "window1TotalSupply()", "67d520bb": "deployWill(uint256)", +"67d528ad": "collectTestDrive(uint256,address,bytes32)", "67d5fae1": "getPremiumCount()", +"67d5fdb4": "IssuanceTransferred(uint256,address,address,uint256)", +"67d63b7b": "referraBonusRate()", +"67d66f16": "LogCancel(address,address,address,address,uint256,uint256,bytes32,bytes32)", "67d6bcbf": "distributeBonusTokens(address)", "67d6d142": "getPI_edit_19()", +"67d6d9db": "getAllowedErc1155ContractAt(uint256)", +"67d6f65f": "setPie(address)", +"67d6fd9b": "getUserMigration(address)", +"67d82ac3": "setMinVersion(uint256)", +"67d909bf": "_BurnAmount()", "67d96c24": "compensatePreSaleInvestors(address[])", "67da2831": "revealHiddenPosition(uint32,int64,bytes16)", "67da299b": "mcrAmmountForGas()", +"67da3184": "partialUnbonding(address,address)", +"67da69b4": "tradingCompFee()", "67da7b7a": "LabCoin(uint256)", +"67daeb72": "claimRewardMulti(address,address)", +"67db3b8f": "setURI(string,uint256)", "67dbaf93": "updateValueAndBurn(uint256,uint256)", "67dbf587": "Bridge(uint256,uint256,address,address)", +"67dc7736": "boost(bytes32,uint256,uint256,uint256)", +"67dcb881": "stakeEnd(uint256,uint256)", "67dcec06": "WealthInternet(uint256)", "67dd1730": "destPrecision(address)", "67dd74ca": "buyTicket(uint256)", "67dd7bb4": "tradingLocked()", +"67dd852f": "mainBackers(address)", +"67dd8b22": "UTUVerification(address)", +"67dd8e18": "GLXStaked(address,uint256)", "67de698d": "adjustCap()", "67de80db": "createMultiple(uint256[],uint256[],uint256[],address[],uint8[])", "67de81e8": "fundSucceeded()", +"67dea66a": "NarcoCreated(address,uint256,string)", +"67deb525": "releaseAdviserAllocation(address)", +"67dec7d5": "setOraiRewardPerBlock(uint256,bool)", "67deced2": "checkIn(uint256,string)", +"67df02ca": "get_dx(int128,int128,uint256)", "67df1187": "buysubscribers()", +"67df1f8e": "adjustFundManagerAllowance(address,uint256,uint256)", "67df5189": "archiveCrowdsale(uint256)", +"67df6e89": "getLiquidityForAmount0(uint160,uint160,uint256)", +"67df93f2": "send(address,uint256,uint256)", +"67dfd4c9": "leave(uint256)", "67dfe2d3": "addEthForSell()", "67e04a22": "initInviteAddr(address,uint256)", "67e06858": "Add()", "67e0badb": "getNum()", "67e0d78f": "sendFundHomeAmt(uint256)", +"67e114d6": "viewSaleSMTX()", "67e13ee0": "getDeveloper(address)", "67e1aee9": "setStage1()", "67e1c253": "getMyInviteCode()", +"67e20110": "EX_ID1_PARAM_LOC()", "67e22888": "bigMoney()", "67e2a647": "createAwardTokens()", "67e2d2ad": "wireInvestment(address,uint256,uint256)", +"67e2efc6": "getUserRecord(address)", "67e33df5": "SwftCoin(uint256,string,uint8,string)", +"67e3e00d": "devsRewardTokensBalance()", "67e404ce": "sender()", +"67e40fab": "updateEthTokenAddress(address)", "67e4373f": "CARIToken()", "67e43e43": "gsf()", "67e445d9": "FOMO()", "67e476d7": "getPublicSaleInfo(address)", "67e4ac2c": "getAssets()", +"67e4b740": "withdrawSomeFulcrum(uint256)", "67e4d41d": "ProdAToken()", "67e523bb": "iPeso()", "67e53196": "getAuthByCode(string)", "67e54367": "battleContractAddress()", +"67e559c2": "sellFRUITForJUICE()", +"67e57482": "deletePatient(uint256)", "67e5f18c": "getCurrentTierRatePercentage()", "67e6869d": "Withdraw_4()", "67e6bc2e": "hash(string,uint256,uint256,uint256)", "67e6bf06": "testPresaleRefund()", +"67e6cbcb": "addCoin(uint256,uint256)", "67e70e99": "setselfrdroplist(address[])", "67e7646f": "removeDelegate(address)", +"67e7ac80": "SetMinStakeLimit(uint256)", "67e817f4": "XOV()", "67e828bf": "source()", "67e874c0": "testMeta(uint256)", +"67e8c358": "poollimit()", "67e8cd0f": "bidOf(bytes32,uint256)", +"67e8d0eb": "TravelBust(uint256,uint16,uint16)", "67e8d3d2": "bonus2()", "67e8f6e1": "_multipleTransfer(address,address[],uint256[])", "67e8f90c": "heightAt(uint256)", @@ -59546,256 +108975,444 @@ "67e902d9": "ListingBought(uint256,uint256,uint256,address)", "67e933f6": "checkCustomer(address,address)", "67e94ae0": "listingFeeInWei()", +"67e971ce": "tokenDetailsOfOwnerByIndex(address,uint256)", "67e988e7": "bountyAvailabilityTime()", "67e9b860": "CreateSwap(uint256,uint256,bool,address)", +"67ea243b": "ch(address)", "67ea2fa0": "tasksSize()", "67ea43bd": "producedBronzeCaps()", "67eae672": "sendCoinFrom(address,uint256,address)", "67eb5fbe": "_train(uint256,uint256,uint256,uint256)", "67eb9bab": "createIssuerContract(string,string,string,uint256,uint256)", +"67ebdad0": "updateProtocolAdapters(bytes32[],address[],address[][])", "67ec00c0": "depositFrom(string,address,uint256)", "67ec68c4": "winningNumbersFor(uint256)", "67ecb82d": "transferAndLock(address,uint256,uint256,uint256,uint256)", "67eccc12": "founderTokenWithdrawnPhase2()", "67ed583f": "addPresaleHolder(address)", +"67ed92e6": "sendEth(uint256,bytes)", +"67ed93c0": "getGirlStarLevel(uint256)", +"67ed99f4": "BLACKLIST_ADMIN_ROLE()", "67edad0a": "preSaleSecondEtherCap()", +"67edc218": "setUniswapLpToken(address)", +"67edc769": "setAddresses(address,address,address,address,uint256)", +"67ee0a72": "bJiaozi()", +"67ee1904": "initiateFlashLoan(address,address,uint256,bool)", "67ee5f09": "getTotalDividends()", "67eeba0c": "dailyLimit()", +"67ef06aa": "increaseSupply(address,address,uint256)", +"67ef0711": "Request(string,string,address,uint256,uint256)", +"67ef3ab8": "sendL1FundedUnsignedTransaction(uint256,uint256,uint256,address,bytes)", "67ef5a37": "debugStuff()", "67ef5cb9": "setPrice(uint32,uint32)", "67efbab1": "changeAssignedAdmin(address,uint256,string)", "67f01c04": "ETH(uint256)", "67f04688": "LIMIT_TRANSFERS_PERIOD()", +"67f061a6": "PRIVATE_POOL()", "67f06f78": "_checkPixelAboveRight(uint256)", +"67f10585": "maxDevTreasuryPercentage()", +"67f10e8c": "updateInstitutionAsset(string,string,address)", "67f12ecf": "validate(address,uint256,uint256[101][])", "67f17405": "majorEvent(bytes32,bytes,uint256)", "67f239dd": "entry()", +"67f3c2a5": "whiter(address)", "67f4224f": "eventPause(bool)", +"67f4527e": "tokenYAX()", +"67f5395c": "getBallotCount(string)", +"67f59e70": "findFreeA7Referrer(address,uint8)", +"67f5d919": "take4Angle()", +"67f6413e": "removePurchaseList(address,uint256)", "67f690b5": "hasRequestedForMigration()", "67f6a258": "verifyCert(bytes32,bytes32,address)", "67f718a9": "getTokenIds()", +"67f72715": "bigBrain()", "67f76863": "EnishiCoin(address[])", +"67f7e81a": "callmarket()", +"67f7f80f": "removeInstanceOfCoin(string)", "67f809e9": "DynamicPyramid()", "67f83481": "isFounderUser()", +"67f84adc": "getFactoryAmountsIn(address,address,address,uint256,address[])", "67f8a8b8": "emergencyRefund(address,uint256)", "67f8ca42": "usingCanvasBoundaries()", +"67f8d85d": "setBlocksInAYear(uint256)", "67f8df84": "playerId(uint256)", +"67fa4a9f": "aam(uint256)", "67fad28d": "RCLTOKEN(uint256,string,string)", "67fbb7ba": "ownerAddSanSlotBatch(address[],uint256[])", +"67fbc75f": "getVirtualAmt(uint256)", "67fbd289": "destroyTokens(uint256)", +"67fbdc50": "unitDefenseMultiplier(address,uint256)", +"67fbde16": "reservesPerTokenSrc(address)", "67fc1c6a": "validateProposedMonarchName(string)", +"67fcfc3f": "setFees(uint256,uint256,uint256,uint256,uint8)", "67fd9da3": "multicastTransfer(address[],uint256[],uint256[])", +"67fd9f7e": "po(uint256)", "67fdc2fe": "CricketToken()", "67fdd509": "setIdRange(uint256,uint256)", "67fdff26": "REQUIRED()", +"67fe0502": "dripAndFile(address,address,address,bytes32,bytes32,uint256)", "67fe5a0c": "accepted()", "67fe6b47": "contractIsCompleted(string)", "67fe6f0e": "checkOverExceed(address)", +"67feda3e": "controller_address()", +"67ff4766": "AdminUnlockSelling()", +"67ffc074": "pieSpeeds(address)", +"67ffe960": "maxEntry()", +"68002ee2": "totalIntervals()", "68014cec": "participantExists(address)", "68019d75": "COCTokenBase(uint256,string,string,uint8)", "6801db98": "devoteToCar(string)", "6802c8a1": "FreeCoin()", "6802ff77": "seedSupply_()", "6803641c": "claimAllTokensForInvestor(address)", +"6803f195": "UNIT_POWER()", +"6803f612": "chargeAmountOf(address)", "680478b1": "offerAsSacrifice(address)", "68049361": "teamWallet_4()", +"6804d54a": "uniExchangeRate(uint256,address[])", "6805b84b": "getPaused()", "680660d4": "bulkAddCompany(address[],uint256[])", +"68067ecb": "initializeVaultStorage(address,uint256)", "6806fdce": "assignGenesisAddresses(address[])", +"6807079d": "leagueGame()", +"6807a637": "requireSync()", "6807b84d": "Timebound(uint256,uint256,bytes32)", "6807f752": "deleteBuyRequestInternal(uint256)", "680819eb": "setRate(bytes32,uint256)", +"6808a128": "twap(address,uint256)", +"6808ef24": "player_getNuker(uint256)", +"68092bd9": "setBlackList(address,bool)", +"680a3423": "withdrawUSDC(uint256,address,uint256,bytes,bytes)", "680a50cb": "shortenDeadline(uint256)", "680add7b": "preSoldSharesDistributed()", "680b0c5c": "tresholds(uint256)", "680b3bdf": "migrateAll(address[])", "680b5eba": "setHouseAddressTwo(address)", +"680b8ef5": "getPaymentTerms()", "680b9d49": "getStakedAddresses()", +"680bb5f4": "getPositionByAddress(address[])", "680bd2f4": "RiseCoinToken()", +"680c0b4c": "depositVcmfs(uint256)", "680c26bc": "ATP(address,address)", +"680c4772": "approve_824(address,uint256)", +"680c964a": "insertHodler(address)", "680caed2": "Contract(address)", +"680cb5b9": "withdrawalsByUser(address,uint256)", +"680d5762": "rewardExternal(address,uint256)", +"680db98c": "votesOwnerByOperation(bytes32,address)", "680def61": "market2019TokenCreated()", +"680df789": "inactive_burn()", "680e354a": "setSaleWindow(uint256,uint256)", +"680e6779": "setBuyingAssetsRate(uint256)", "680e6c9b": "receiveTokens()", "680eba27": "GEN0_CREATION_LIMIT()", "680f07b4": "getinitializeFeeWindowIdValue()", "680f0938": "pay_dividend(string)", "680f0eda": "set_harvest_amount(uint256)", +"680f2e4f": "WithdrawTokens(address,uint256)", "680fb685": "OpenClose(bool)", +"6810dfa6": "claimComp(address[],address[],bool,bool)", "6810e139": "shopSack()", +"68110b2f": "bump()", "68111cce": "getProduct(string)", "6811444a": "getLastComment(address)", "68116177": "getbalance(address)", +"681161a5": "verificarDocumento(bytes32)", "681185ab": "_extractRawResource(address,uint256,bytes)", "68118e95": "numberOfBlocksToEndLimitationPeriod()", "6811c332": "distributeTeamTokens(address,uint256)", +"6811cb15": "PublicSaleIssue(address)", "681232ad": "cosigner()", +"68123c33": "payedOut(uint256)", "68125a1b": "isFriend(address)", +"6812d874": "setLotteryRules(uint256,uint256,uint256,uint256,address,uint256)", "681312f5": "setRoundLength(uint256)", +"681356d8": "blockIn2Years()", +"6813925e": "prizeTokens(uint256)", "6813947f": "contributionOf(uint256,address)", +"6813a3c2": "setImplementationAddressOneToOne(address,address)", +"6813ef93": "AFICOMP()", "681478ab": "LegacyRepToken(address,uint256,address)", +"68149fa3": "bnbAmount()", +"681551d1": "catchMonster(uint32,string)", "68155ec1": "transferTokens(address,address,address,uint256)", "6815c19c": "DropdCoin()", "6815c992": "grantPermissionP(address,address,bytes32,uint256[])", +"6815e49c": "__usdt()", "681617c7": "changeEscapeCaller(address)", "68163034": "defaultTimeoutLength()", +"68163ae2": "transferToPotofgold3Upline(address)", "6816521a": "teamAllocation()", +"68166bb2": "CompleteSetsSold(address,address,address,uint256)", "6816d920": "guaranteedBuyersLimit()", "6816fcd6": "evMgmtDistributed(address,uint256,uint256,bool)", "6817031b": "setVault(address)", "68171516": "assetMethodIsAllowed(address,bytes4)", +"681720b4": "calculate(address,address,address)", "68173bcf": "deactivateToken(address)", "68177733": "MixinToken()", "6817c76c": "mintPrice()", +"6817dabb": "levelManager(uint256,address,uint256)", +"6817faa4": "exitRequests(uint32)", "681833d9": "bindAddr(address,bytes)", "6818da44": "setPlatformManager(address)", +"6818e2b6": "canAddLiquidity(uint256)", +"68196eb8": "show_balance_eth()", "68197360": "getVotes(uint256,address)", +"6819eb65": "deposited0()", +"681a1b1d": "distributeANT(address[],uint256,uint256)", +"681a2166": "LOG_NewTradeCreated(bytes32,address)", "681b23dd": "senderETH()", "681b3314": "get_pre_kyc_iconiq_bonus_numerator()", "681b5651": "setEthToUSDRate(uint256)", "681b742f": "changeFund(address)", +"681bff56": "Z00MrtSaleZ00M(uint256,uint256,uint256,uint256,uint256)", "681c2ad0": "getTknOfferPrice(uint256)", "681c3251": "addTotalSuply(uint256)", "681c7808": "setMinTime(uint40)", "681c7e2b": "VAAToken()", "681cb449": "VIcoin()", "681ce98a": "getNextPrice()", +"681d1649": "erc20Map(address)", "681d52de": "tokenImporter()", "681d8345": "getATMTotalSupply()", +"681d8627": "refBonuses(uint256)", +"681dda96": "set82Mode(bool)", +"681ddc67": "Sale(address,address,uint256,uint256)", "681e237d": "CommonToken()", "681e3356": "transferBankOwnership(address)", +"681ee6e2": "addTokenToProposal(bytes32,bytes32,bytes32,uint256)", "681f01f2": "IsICOOver()", "681f3e6d": "getUsername()", "681f6486": "SimpleBid(address,uint256,uint256)", "681f8116": "makeTradeable(uint8)", "681fd129": "addInvestContract(address)", "681fe70c": "isEmpty()", +"682000da": "RakeBuyBackRate()", "68203417": "thirdStage()", +"6820e8dd": "addKingReserves(address,uint256)", "6820f8d2": "setOneContract(uint256)", +"682105d3": "MODULE_LOAN_PROPOSALS()", "68213256": "crr()", +"68213329": "rewardPerTokenB()", +"68214d8d": "_setLock(address,uint256,bytes4)", +"68216381": "ethsReceived()", "68216ca7": "addNewBranchInEpisode(uint256,uint256)", "6821928b": "AddAuthority(address)", +"68220664": "getPercentageStaked(uint256)", +"68221036": "ReduceToLimit(address,uint256)", "6822abae": "getMinimumCallCost(uint256)", "68234a27": "getTransactionDescription(uint256)", +"6823b073": "Finalized()", "68240412": "calculateWeiForStage(int256)", +"68241310": "getMyPoolShare()", +"682458bd": "emergencyWithdrawToken(address,address)", "68250963": "preICODeadline()", +"682513e3": "testfive2()", "682594db": "totalAllowedFreeze()", "68259880": "ChangeOfRules(uint256,uint256,address)", "6825c843": "_address(uint256)", +"682662f3": "changePercentOfTax(uint256)", +"682667a9": "timeAlly()", "682677e8": "TunDrMahathirMohammad()", +"68267c97": "approve_132(address,uint256)", +"68269eeb": "getPOT(uint256)", "6826ebf8": "r(bytes)", +"68270a55": "_latestTimeGov()", +"6827192d": "NewMintPending(address,uint256,uint64)", "6827b9db": "getMonsterGender()", "6827e764": "devFee()", "682806a0": "ICOContract()", "68281708": "restrict(address)", "68283f4d": "claimBets()", +"682861aa": "newDepositInfoMode(address)", +"68286647": "usersm3Matrix(address,uint8)", "6828d549": "rejectContribution(bytes32)", +"6828fe6f": "tokenTokenAddress()", "68296073": "setSnowflakeAddress(address,address)", +"682a03d4": "tokenFromRefract(uint256)", +"682a3176": "botsPerBlock()", +"682a4bf6": "getDivdLoadV2(uint256)", "682a5e89": "returnDuration(uint256)", "682a90d2": "Store(bool,uint256)", "682a9449": "setCustomerService(address,address,bool)", +"682ab6f0": "_nerdWETHPair()", "682ab756": "LogItemRegistered(address,uint256,uint256,bytes32,bytes32,bytes32)", +"682ac2c4": "getPoolStat()", +"682ad959": "rewardRemaining()", +"682b2d5b": "userCapEnabled()", "682b6706": "___Kill()", "682b7100": "deleteRoom(uint256)", +"682b9c16": "claimOnBehalf(address,bytes32)", "682baa3a": "HATCH_COOLDOWN()", "682bc77e": "setStarterPackOnSale(bool)", "682bea5c": "setCallTable(uint256,uint256)", +"682cb911": "fundAddr()", +"682ceb79": "setLockStatus(uint256)", "682d1138": "failExecute()", "682d3bb0": "pdfCertificateProof(bytes)", +"682da36c": "poolIndex(string,uint256)", "682e1bb0": "isSTOProposed()", "682e60a9": "presses()", +"682e6495": "predictUserRatingOfMovie(uint256,uint256)", "682ed9ea": "sanMaxAmount()", "682f3d36": "OrderMatch(address,int256,address,int256,uint256,uint256)", +"682f5676": "isParticipant(address,uint32)", "68302467": "paySeller(uint256)", "68306e43": "dividends(address)", "6830cdc4": "getJobCount(address)", +"6830ffdb": "deflationBaseRates(uint256)", +"68310989": "FNACCOUPONS1()", +"68310bc9": "race_in_progress()", "6831c169": "totalPayedOut()", "6831e272": "mintTokens(address,uint256,uint256)", +"6832fb6d": "MintRate()", "683328bf": "takePet(uint64)", "6833716f": "ProofShrimpFarmer(address)", "6833d54f": "contains(string)", "6833f60d": "triggerPause()", "68342b33": "ownerInfoOf(uint256)", "683431e2": "SelfDesctruction()", +"68347262": "viewUserdReferred(address)", "68347fdf": "ICO_MIN_DEPOSIT()", "68348dfe": "_newGame(bytes32)", +"6834e3a8": "getUserNonce(address)", +"6834f315": "getCakeBack()", +"6834fc90": "setNativeToErcBridgesAllowed(address[])", +"6835bb54": "bm()", "6835df3e": "SFT_PER_ETH_BASE_RATE()", "6835f32c": "build(bytes)", +"683649af": "univ2ISWEthBalance()", "68365eb7": "NewProject(address)", "683674dc": "disconnectOrderUser(address,address,uint256,address)", +"6836d064": "getNumGamers()", "683799e6": "setMaximumPurchaseFraction(uint256)", +"6837a51f": "calculateStepTokenPrice(bytes4,uint256)", "6837ff1e": "newContract(address)", "68381874": "Trade(address,uint256,address,uint256,address,address,bytes32)", "68381b96": "getHighestUnitPriceIdxFromSell()", +"68382b47": "officialTransfer(address,bytes8,string,string,string,string)", +"68388448": "nodeStopInternal(address)", "68388b80": "banAccounts(address[])", "6838e7c5": "PrinzeToken()", "68393a4c": "getBonusByTime(uint256)", +"68399310": "convertExactEthToToken(address,uint256,address,uint256)", +"6839c3d6": "emitEvent(string,address,uint256,string)", +"683a229f": "init(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "683a6858": "Recoverable()", "683ad727": "getDeed(uint256)", +"683ae083": "executeTransaction(address,uint256)", "683b4184": "inflation_complete()", +"683bba51": "NFTMouldMetadata(uint256)", +"683c7d4a": "canGrow()", "683cde49": "upgradeBalanceOf(address)", "683cecc2": "addressFunc(address)", +"683d2431": "BetWithdrawn(address,uint256)", +"683d2fb6": "OutOfRange(uint256,address)", "683d4a4b": "minWithdrawalCoolingPeriod()", +"683d681a": "getUniChatMessageAddr()", "683d69e4": "checkEligibility(bytes32,address,address)", +"683dd191": "scaleFactor()", "683de015": "switchUpgradable(bool)", "683e0bcd": "ethPriceInUsd()", "683e2929": "getPSlotLength(address)", "683e3451": "CioCoinERC20Token(uint256,string,string,uint256)", +"683e52c5": "numApplications(address)", "683e70b6": "createWhaleTokens(address,uint256)", +"683f01d5": "getPendingProposal(string)", "683f7f27": "removeParticipant(uint256)", +"683f9287": "govSetContractCheckLevel(uint256,uint256)", +"683fa88d": "convertUni(uint256,uint256,address)", "68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", "68404cd9": "setValueSome(uint256,uint256)", "6840721d": "searchReport(string)", +"68409330": "setBulkWhite20(address[])", +"68409d17": "erc721Cache(address)", "6840c67d": "vestPartnerEquityReserve()", "6840f8e8": "returnEth(address,uint256)", "68412058": "getRank06()", "68412063": "distributeTokens(address,uint256,uint64,uint64,bool,bool)", +"68416fda": "NFTTokenId()", "6841f253": "currentRoundLocked()", "6841fd27": "remining(uint256)", +"684219f5": "rateOrInverted(bytes32,uint256)", +"684222b0": "Close(address,uint256)", "68428a1b": "saleActive()", +"6843581c": "respond1(uint256,string)", +"684376fa": "getRateNewest(address)", "68437b58": "bet_purchased(address)", +"68438014": "withdrawICO()", "6843aef9": "increaseLockReward(uint256)", "68445ce1": "insertNodeBefore(uint256,uint256,address)", "68447a55": "fetchFunds()", "68447c93": "referrer()", "6844ab43": "testControlCreateSameItemId()", +"684539a6": "saltPerBlock()", "68458fcf": "assignInitialAddresses(address[],address)", "6845950f": "getScriptActionsCount(bytes)", +"6845bc42": "initialize(address,address,address,address,address,bool,string,string)", "6846187f": "farmItems(address[],uint256[])", +"68462f69": "fakeSetOwner()", "684641b4": "cumulativeInverse(uint256,uint256,uint256)", "684649a6": "createProxy()", "6846fe64": "_sellCallToClose(uint256,uint256,uint256,uint256,address)", "684876a1": "migratePlayerRoundsData(uint256,uint256,uint256,uint256,uint256)", +"6848eab0": "HeadTail(bytes32)", +"6849a3ba": "getLatestAnswer(address)", "6849cb9d": "transferIssuer(address)", +"6849dbe5": "nominateArbiter(address,bool)", +"684a5181": "sendTokensArray(address[],uint256[])", +"684a6fc1": "_maintainer()", +"684ab804": "checkIfNft(address)", "684b369e": "everisumToken()", "684b49f5": "PriIcoSale2(address,uint256,uint256,address,address)", "684bd9d6": "getRemainCount(address)", +"684c86eb": "registeredAmount(address)", +"684ce28a": "ReceivedERC20(address,uint256,address,uint256)", "684d63bf": "mintAuditApproval()", +"684d8648": "SqueezeOn()", "684d9a04": "quarterSecond()", "684e2345": "AishaCoin()", "684ecd59": "getData_9()", "684edea8": "ponziPriceInWei()", "684efc40": "TravelNationCoin(uint256,string,uint8,string)", "684f19c9": "WorldCupFactory(uint256)", +"684f750f": "amountOut(bytes32,uint256)", "684fa447": "AppAdded(address,string,address,uint256,bool)", "684fbfdb": "sinLimited(int256,int216)", +"68501d94": "startArgs(uint256,uint256,uint256[])", "68503cdf": "getAvailableBalanceByAddress(address,address)", "68504158": "toggleTransfers(bool)", +"685063f5": "approve_63(address,uint256)", "68507757": "faucetBB0()", "6850fa6d": "onoff()", +"68525c7c": "SFToken()", +"685299cd": "calcSell(address,uint256,address)", "6853367f": "withdrawDevelopersCut()", "68533a1d": "closeUndercollaterizedPosition()", "68536341": "ratePerOneEther()", "6853920e": "removeRole(address,bytes32)", +"68539536": "SwapBalancer(address,address,address,uint256)", "6853e3a4": "setToKnown(address)", +"6854171d": "v1()", +"68541b9c": "getBalanceAlt()", +"68546364": "pendingFat(uint256,address)", +"68546a87": "root2()", "685485fb": "eth_sent()", "6854df55": "scannedDiamondCaps()", "6854f668": "buyDragoOnBehalf(address)", +"68551017": "ethDaiPath(uint256)", +"6855b2e7": "earnedToBuyBackToken1Path(uint256)", +"6855cbb8": "poolMembers(uint256)", "6855ded3": "WHITELIST_END_DATE()", +"68564037": "add(uint256,address,uint16,uint16)", +"6856db3e": "buyHTK_Tokens()", "685705ae": "getWeiValue()", +"68570eec": "tokenBunnyTotal()", "68573107": "batchMint(address[],uint256[])", "6857ab40": "seq()", "6857cb06": "manualTransfer(address,uint256)", +"685807a4": "SimpleGameList(uint256)", "68581ebd": "getJobs()", "68583bc0": "FC1Token()", "68586e57": "setPet(uint8,address,string,uint8,uint16,uint16,uint16)", @@ -59803,121 +109420,203 @@ "6859d08f": "addToActiveGroup(address)", "6859dc10": "rejectRequest(address,uint256)", "685a73e0": "claimHodlRewardsFor(address[])", +"685a9dd8": "removeRightToVote(address)", "685adf5e": "ALDEToken(uint256,string,uint8,string)", "685ae2a9": "itoEndTime()", +"685b2bcc": "executeSwap(address,uint256,address,address,uint256)", "685b2d8f": "transferPermissions(address)", +"685b4157": "withdrawToCustodian()", "685b47c7": "updatePresaleNumbers()", +"685bf76e": "LoggingData(uint256,uint256,uint256)", "685c234a": "checkAuthorization(address,address)", "685c60de": "transferERC23(address,uint256,bytes)", +"685c6d81": "setMintFees(uint256,uint256,uint256)", "685ca194": "withdrawalAllowed(address)", "685d1135": "recyclingRemainToken()", "685e2486": "migration(address)", "685e78fb": "SecondPriceAuction(address,address,address,address,address,uint256,uint256)", +"685e7fc2": "MAX_USD_PER_ETH()", +"685f384e": "setLinks(string[])", +"685f93bd": "filledAmountInOfHash(bytes32)", "685ffd83": "registerNameXname(string,bytes32,bool)", "6860dc1f": "isRefAvailable()", "6860fd58": "Fees(uint256)", +"68612782": "_emergencyStop()", +"68613e1f": "getLiveCount()", "686174ec": "QQQTokenBase()", "6861d3b8": "firstStageStartsAt()", "68621711": "assetMeta()", "68624bd7": "lockedValueOf(address)", +"68628c7d": "POOL_PRICES(uint256)", "68639a29": "setActivation(address)", +"6863c4f4": "adoptBASTARD(uint256)", "6863d3c7": "CreatedIRC(address,uint256)", +"686417d3": "buy_ticket()", +"68647db1": "addColl(address,address)", "68649c8a": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[3][4])", +"68653f24": "setMinCeiling(uint256)", "68654ef8": "bonusBalanceOf(address)", "68660b93": "updateDonateTokenAddress(address,uint256)", "68664430": "supplyDAICO()", "6866537d": "getCardPrice(uint256)", "6866566a": "Priced(uint256)", +"68669bc8": "transAsset(address,uint256,uint256)", +"6866a6fe": "approve_686(address,uint256)", "6866d144": "_tokenPrice(uint256)", "6866da59": "_lockOrUnlockAmount(uint24,uint256,uint256,uint256,uint256,uint256,uint8)", +"68677208": "kushOGV2UniswapV2Pair()", "686790e5": "freezeSignatureChecker()", "6867edeb": "getBuyOrderPrices()", "68690dd0": "NeedRefresh(uint256)", "68699224": "offlineAdjust(uint256,uint256)", +"686992de": "approve_42(address,uint256)", +"686996a3": "lastActor(bytes32)", "6869b20e": "saveToken(uint256)", "6869fb30": "maxWeiTier0()", +"686a8128": "pollBet(uint256,bytes32,uint256)", +"686ac266": "purchaseAppartment(uint256)", +"686b174f": "TokenReservation(address,uint256,uint256,uint256)", "686b2812": "addWhitelistUsers(address[])", +"686b37ca": "priceUSDMint(string)", "686b88cd": "calculateWinnerGameType1(uint256,uint256)", +"686c2fec": "getUnstakeRequest(uint256,uint256)", +"686c8ec8": "buyOneUnit()", +"686ca00d": "setPath(address[])", "686caf04": "lastBlock_a1()", +"686cf07e": "isStakingAllowed(bool)", "686d2d5c": "getCurrentBonusPct(uint256)", +"686d31ac": "earlyInvestment(address,uint256)", +"686d5da3": "NUMERATOR_SWAP_WAIT()", "686d5e00": "unRegisterCampaign(uint256)", "686da8ab": "UpdateRecord(uint256,address,uint256,bool)", +"686dc57c": "pauseOn()", +"686e11cc": "WhitelistedCrowdsaleImpl(uint256,uint256,uint256,address)", +"686e177b": "isUpgradable(address,string)", "686e2284": "isCosmosSale()", +"686e44ae": "sell(address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "686e8aaa": "GetMoney()", +"686f00cd": "UDID()", "686f21ba": "gainKarma(int256)", "686f2c90": "collectAllFees()", "686f4564": "redeemedCards()", +"686f998c": "mdapp()", "686fa3f7": "getGameId(address,string,string,uint16,uint64)", "68700891": "RLPReaderTest()", +"68700d71": "SystemContractsChanged(address,address)", "6870c65a": "InitialRateChange(uint256,uint256,uint256)", +"6870d2c2": "isWithdrawContribution(address)", "6870ef86": "getCurrentTokenFee()", +"687128b1": "unitJadeStealingIncreases(address,uint256)", "68715a75": "GCCHToken()", "68716e7a": "EutinMokoToken()", "6871819b": "getUserCollegeEducationDetails(string)", "6871d26b": "addMeterPoint(int256,address,int256)", "6872e300": "COPPER_AMOUNT_SKL()", +"68734416": "ticketsMap(address,uint256)", "68742da6": "withdrawFunds(address)", +"68744046": "books(uint256)", "68750bbc": "sendReserveTokens()", +"68757ddc": "createProduct(string,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[],uint256[])", +"687593a5": "userRewardDetailsFromReward(uint256,uint256,uint256)", "6875b6eb": "changeRestrictions()", "6875b746": "updateRelease(uint256)", "6875c319": "escalateDisputeToMediator(uint256)", "687711ec": "s25(bytes1)", +"6877a8d3": "start(address[],uint32[])", "6877dca7": "Token1_Transfer(address,address,uint256)", +"6877fe14": "buyAllAmountBuyEthAndMigrateSai(address,address,uint256,address,uint256,address)", +"687805d5": "getJobParameters(uint64)", "68784493": "votesUser(address,uint256)", "68788868": "decodedAmount()", "6878ac7d": "applicableRate()", +"6879418b": "DangKyThamGia(string,uint256,uint256,uint256)", "68794b87": "setState(string)", "687981ac": "getValidatorIndex(uint64,address)", "687a46c4": "upgradeQualificationByEther(uint256)", "687a48a1": "getBurnedCarCount()", +"687ab381": "emergency_token_withdraw(address)", +"687ba747": "nya()", "687bf382": "_useName(address,bytes32)", "687c317c": "setTokensUsedForReinvestment(uint256)", +"687c4fa7": "setOwnership(uint256,address)", "687cc2fd": "preSaleTokensAvailable()", "687cde1a": "tokenSelled()", "687d493c": "EverOwnedTokens(address)", "687d5aa9": "setBuyAllowed(bool)", "687db864": "END_ICO_TIMESTAMP()", +"687e3f0d": "fdv2()", "687e6b5f": "MavenCoin()", "687e6f44": "withdrawEthers()", +"687eaed6": "test2(uint256,uint256)", +"687ecf63": "TournamentCreated(bytes32,uint256,uint256)", "687f8427": "devCATDestination()", +"687fbed8": "stakeWithFeeRewardDistribution(uint256,address,uint256)", +"687fe7d8": "getUnstakeParams(address,uint256,uint40)", "68802712": "get_hedge()", "688057fc": "registerWalletForFeeSharing(address)", "68808769": "backers(address,uint256)", +"6880ce7d": "WarriorTotalPrice(uint256,uint256,uint256)", +"6880e4be": "closeStakingEvent(uint256)", "6880ff5b": "secondReserveWallet()", +"68811431": "getAllParticipantAddresses()", "6881385b": "payday()", +"68816ae9": "mneSentPerDayLength(address)", +"6881e763": "ensContract()", "6881f6f1": "minTradingStartTime()", "688225d6": "onemonth()", +"68824f72": "clearCode()", "688257e0": "SmartContractWorkshop(string)", "688263d7": "largestPenisOwner()", "6882d481": "priceStar4()", +"6882f5d1": "setAutoCrackingFee(uint256)", +"68831715": "LogResult(uint256,bytes32,address,uint256,uint256,uint256,int256,bytes,uint256)", "68832d14": "___proxyTarget()", "6883477f": "canBePurchasedByEMONT(uint16)", +"6883a331": "WithdrawFromSystemAccount(address,address,uint256,uint256,string)", +"6883c5a9": "emergencyTokenExtraction(address)", +"68840fa2": "setPresaleTaxFee(uint256)", +"68841431": "minTransferAmount()", +"6884e802": "getKongAmount(bytes32)", "688507e1": "SellEgg()", "688511bb": "timeoutBlock()", "688521b4": "coinsIssuedTotal()", "6885c572": "allowByDelegate(bytes8,bytes8)", +"6885daaa": "jumpStart()", "6885edcd": "desiredPrice(uint256)", "6885f63b": "TrustToken()", "6886bf1c": "mostSent()", "6886ce25": "ForkEthereum()", +"6886f10d": "transferFund(uint256)", "68873375": "CBRToken(uint256,string,string)", "6887398d": "getContestTeamCount(uint32)", +"68875913": "payAndDistribute(address,uint256,uint256,uint256,string)", "68879e5f": "RecoverySha3(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"6887fc8c": "killTransferState()", "68882b30": "buyCrab(uint256)", "68888300": "updateAngelCardSeries(uint8)", "68889db8": "setFreezingPeriod(address,bool,uint256)", +"68889ebc": "floor_price()", +"68891240": "etherTransfered(uint256,address)", +"688948a3": "wstPerBlock()", "68894a16": "changeMaxContribution(uint256)", +"68894acf": "setContractDay(uint256)", "68895979": "getUint256()", +"688968b4": "policyHookExecutionTime()", "6889cf86": "icoOver5()", "6889d646": "transferMoneyToOwner()", +"688a1582": "setMineStorage(address)", "688a54dc": "ATxAsset()", "688a7044": "CryptoRoulette()", "688abbf7": "myDividends(bool)", "688af37f": "QRL_Token()", "688b410f": "sendTokenUpdate(address,uint256)", "688b5c2b": "isMiningWarContract()", +"688b6f74": "buyStaking(address)", "688ba636": "walletTeam()", "688bf035": "calculateUSDcValue(uint256)", +"688c5ab3": "remAllowance(address)", +"688c94d7": "maxnn()", +"688cd9c9": "LogWithdrawProfit(bytes32,address,uint256,uint256,uint256)", "688cdba8": "ownerRate()", "688cf404": "setAyantDroitEconomique_Compte_4(uint256)", "688d3922": "isHardCapReached()", @@ -59925,25 +109624,42 @@ "688dcfd7": "setProofType(bytes1)", "688def07": "MMOToken()", "688e69d8": "ownerPowerUpContract()", +"688f20e6": "setCombinedFeeRatio(uint32)", "688f5ed2": "gracePeriodAfterRound1Target()", "688fad5d": "updateIdentitySocialURL(address,bytes32)", +"68903aec": "totalETHSent()", "68907360": "setRewardsContractHash(address,bytes32)", +"68908f4c": "settledConvertVaulttoWei()", +"68909825": "theWife()", +"68913200": "AccountRegistryChanged(address,address)", +"6891397b": "getLatestCumulativePremiumFraction(address)", +"68914e95": "withdrawErc721(address,address,uint256)", "68915c14": "seedInvestors()", "6891656e": "buyWithCustomerId(address,uint256,uint256,uint128,uint256,bool)", +"689198be": "userEtherSwap()", +"6891d9cb": "Farewell(address,address)", +"689216c7": "getAssetAddressByName(bytes32)", +"689271c6": "compoundDai()", "68927cd2": "isValidBNBContribution()", +"68928fa3": "SetParkingFee(uint256,uint256)", "68931b21": "getTotalBooks()", "68934e54": "approveBurnDelegate(address)", +"68936809": "deposit(address,uint256,uint256,uint256,uint256)", "6893cc22": "toUint(bytes32)", "6893e8d2": "_setLimits(uint256,uint256)", "6893f63f": "getTokensPerEth()", +"68942cd3": "PRIVATE_SALE_AMOUNT()", "689490a0": "whitelistedAddresses()", +"6894ad23": "releaseTokensForBurn()", "6895179d": "testToken()", "68955fb1": "icoPhase()", "6895adbb": "_addModule(address,bytes,uint256,uint256)", +"68961210": "addVault(address,address,uint256)", "68963dee": "ICOMinTresholdReached(uint256)", "68968564": "SaveYouAndMeToken()", "6896a342": "ADVISOR_STAKE_ONE()", "6896b999": "xConvertPrioritized(address[],uint256,uint256,bytes32,bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"6896c6ca": "getFuzz()", "6896ef4b": "currentRoundIndex()", "6896fabf": "getAccountBalance()", "68970ab4": "Created(address,address,uint256,bool,uint256,string)", @@ -59951,156 +109667,313 @@ "6897a1a2": "startingCostToPress()", "6897c1b6": "PrepareToStart(string,uint256,uint256,uint256,address,address)", "6897e974": "removeWhitelistAdmin(address)", +"68981a3a": "multiTokenMediator()", "689827b0": "modInverse(int256,int256)", "6898730f": "eip20Transfer(address,address,uint256)", +"68989a59": "pushBurn(address,uint256)", +"68989cba": "shouldBlockPublicTrade()", "6898f148": "beforeSale()", "6898f82b": "play(uint256)", +"68993aa9": "surfPoolAddress()", "68999d76": "exportTank(address,uint32)", "6899d8c2": "recoverAll()", "6899dac5": "finishVotingTeam(uint256)", +"689a2563": "getWinInfo()", "689a4608": "Test20()", "689a521d": "changeContractState(bool)", +"689aa174": "marketStarPrice()", "689b2d24": "AcceptsElyxr(address)", "689b3e2d": "Moonraker(address,address)", "689b732c": "FundValue(uint256,uint256,uint256,uint256)", +"689be959": "externalCall(bytes,address[],uint256[],uint256[],uint32)", +"689d01c3": "_priceIncreasePeriod()", +"689d14b9": "_to()", +"689d3d34": "chaiToDai(uint256,uint256)", +"689d84e4": "poolInfos(uint256)", "689da08e": "dad()", +"689dc1bc": "RotoReleased(address,uint256)", "689dcb02": "Buyin(address,uint256,uint256)", +"689dccd6": "invictusCommunityTokens()", +"689de724": "_getCurrentPeriodId()", +"689e1c03": "users(string)", +"689e41f9": "getMulsignWeight(bytes32)", +"689e7700": "setLatePaymentPenaltyPct(uint16)", "689e87c1": "GIRLBUFFERSIZE()", +"689e9a1f": "addWearable(uint32,uint32)", "689effad": "BookingTimeUtils(address)", "689f2456": "partial_refund()", "689f3f99": "unclaimedPlotPrice()", "689ffd82": "addressSalesSupply()", +"689ffed3": "LucoToken()", +"68a1328f": "ContractTransfer(address,address,uint256)", "68a1e07f": "_currencyToToken(bytes,bytes)", "68a287d8": "getTeamVault(address)", "68a29a31": "balanceEthPrivate(address)", +"68a2a0a6": "issueToken(bytes32[],address)", +"68a30952": "TeamVault()", +"68a3acfa": "baseAssetDecimals()", +"68a3ec79": "getMachineIdForAddress(address)", +"68a477fc": "initiateAccountRecovery(address,address,uint256)", +"68a4c576": "getTokenId(bytes32,uint256)", +"68a50c75": "overloadedSet(bytes32,uint256,uint256)", "68a52509": "getLastOrderId()", "68a52851": "setTokensContract(address)", +"68a54abc": "newReserveAddress(address)", "68a596c7": "ownerToTokenIds(address,uint256)", "68a59805": "setPayoutDistributionHash(bytes32)", +"68a5fc97": "feeCalculatorWhitelist()", "68a67030": "finalizeSale1()", +"68a6773b": "withdrawToken(uint256,address,uint256)", "68a6b26b": "setWeiRaisedInPresale(uint256)", "68a6e74b": "preICO()", +"68a720b8": "getPaymentAmount(uint256)", +"68a7212d": "walletFoundingInitiatorSales(address)", "68a72fba": "crowdTarget()", +"68a79c29": "genesisReward(address)", +"68a7d6cd": "createStakingPool(uint32,bool)", "68a7d7ea": "setAgriChainData(address)", "68a7e1c4": "setDelegadoDeEscuela(bytes32)", "68a7effc": "getOrCreateCurrentFeeWindow()", "68a7f6d6": "playerFastFlight(uint256,uint16)", +"68a82ef6": "updates()", "68a8659d": "SellOrdersOf(address,uint256)", +"68a8a51f": "amounttosend()", "68a8c5eb": "WyvernDAOProxy()", "68a958bc": "payrollSystem()", "68a9674d": "depositFrom(address,address,uint256)", +"68a9679c": "GLOBAL_USER()", +"68a9baff": "RefillCommisionIsChanged(string,uint256,uint256)", "68a9de13": "changeEndtime(uint256)", "68a9f31c": "secondOwner()", +"68aaeb2e": "itemAt(uint256,uint64)", +"68aaeb75": "RemainingNum()", "68aafcd9": "setUsageReportingAddress(address)", "68ab3db2": "createDefaultGen0EtherDog(uint256,address,uint256,uint256)", "68ab56ca": "get_bounty_count(uint256)", +"68abb5e0": "poolBalance(address)", "68abf22b": "BAC(uint256)", +"68ac805d": "amountSetToClaim()", "68acb7b7": "TOTAL_COMMUNITY_ALLOCATION()", "68acfcbb": "changeLinkedAddress(address,address)", "68ad1412": "registerUser(address,bytes32,address,bytes32,bytes32)", "68ad6719": "valueChanged(string,string)", +"68ad8ae3": "requestPrice(bytes32,uint256)", +"68adc593": "tokenSaleBADR(address)", +"68ae6494": "calcToNeedMinAmountIn(address,address,uint256)", "68aee9e8": "wed()", "68af1378": "playerGuess(int8)", "68af37df": "letter()", "68af4971": "registerListening()", +"68afc064": "buyAddr()", "68afc7c4": "test_rewardPoolShare_isTranscoder()", +"68afee9b": "mintWithIpfsHash(address,string,string)", "68b017ec": "sarahtoken()", +"68b01fa8": "calchsuStaticReward(address)", "68b07ebb": "_getMaxAuctionSeconds()", +"68b09502": "Pause(uint256)", "68b0d82e": "TransferredGNS(address,address,uint256)", +"68b0db28": "LockedSupply(bool)", +"68b0e831": "relayTx(address,bytes,uint256)", +"68b1a09e": "_getBTCBCurPriceOfUSDP(uint256)", "68b1a6d0": "GetBestWalletAddress(uint8)", +"68b1d223": "solarite_ycr_uni_lp()", +"68b1eefd": "secondTokenDifficulty()", "68b2cee0": "removeAssetsOwner(address)", +"68b31091": "getPrice1(address,uint256)", "68b35396": "gemPerMiner()", "68b43f38": "privateLockTime()", +"68b471a0": "disableAccess(bytes4)", "68b47d87": "SSOTHEALTH_FUNDS_ADDRESS()", "68b49b78": "changeKey(address,address)", "68b51ac7": "checkValidSignature(address,bytes)", "68b5c351": "tokenTrueUSD()", +"68b5f297": "changeBetToken(address)", "68b670af": "wmulfloor(uint128,uint128)", +"68b6c659": "isOnlyOwner(address)", "68b6d55d": "potSize()", "68b85aa5": "maxTimeout()", +"68b85fb1": "breed()", +"68b89f57": "_withdraw(address,address,uint256,bool)", "68b8c5a1": "numberOfAuthorizedPayments()", +"68b8f902": "revokeTransaction(string)", "68b91201": "createInvestorTokenTimeLock(address,uint256,uint256,address)", +"68b968f0": "submitRewardsSetupDistributionTx(address,address,address[],uint256[],uint256[],uint8[])", +"68b977e4": "startingtime()", +"68b9a64a": "GetNameByAddr(address)", "68ba170c": "isRegisteredTranscoder(address)", +"68ba52fc": "plebIncreaseBoard()", +"68ba67c0": "dailyCompoundValue()", "68ba745c": "releaseTeamVested()", "68bae934": "getAuctionItem(uint256)", +"68bb8bb6": "vote(uint256,bytes32)", "68bba4d0": "HARD_CAP_T()", +"68bcfb01": "hydrazPerBlock()", "68bd6efa": "getContract(address,address)", +"68bde41f": "comptrollerAddress()", +"68be20ad": "_CLAIMED_(address)", "68be7887": "getOrganisationByAddress(address)", "68be8007": "_updateRegionOwner(address[16],uint256,address)", +"68be92b4": "lastLoanId()", "68be948d": "setRegisteringContractAddress(address)", +"68beb4d6": "updateStateOnLiquidation(address,address,address,uint256,uint256,uint256,uint256,uint256,bool)", +"68bec271": "schoolStudents(uint256)", "68bee793": "LevelWhitelistedIICO(uint256,uint256,uint256,uint256,uint256,address,uint256)", +"68bf427b": "teamAndFounderFundAllocated()", +"68c0c1e3": "arbSushiAndUni(uint256,uint256,address[],address[])", +"68c10af1": "diffract(uint256)", "68c14a61": "AirdropCentral()", +"68c18beb": "isAdapter(address)", "68c197dd": "isWorkerPoolRegistered(address)", +"68c2e01c": "removeFromRootAccounts(address)", "68c31649": "checkWithdrawAmount(address,uint256,uint256)", +"68c31ccb": "created_token_numbers(bytes32)", +"68c31dd5": "isReserveToken(address)", +"68c32b9c": "setBalancer(address)", +"68c33627": "getTotalStakes()", "68c35c4b": "setEmail(address,string)", "68c49cc9": "collectOtherTokens(address,address)", +"68c49f3d": "tokenRewardUndistributed()", +"68c4ac26": "supportedTokens(address)", "68c4cac6": "tokensPerEther1()", "68c4eb74": "changeInvestorsAddress(address)", +"68c51428": "fetchBalance(address,address)", "68c51f8e": "lhkjTNB()", +"68c53dcf": "getBetterBets(address,uint256,uint256,uint256,uint256)", +"68c5dcef": "ROLE_SETTER()", +"68c618b4": "NewPeriod(uint8,uint256)", "68c64670": "RapidProfit(address)", "68c646f3": "LifeFactor_i()", +"68c6747a": "addMembers(bytes32,address[],uint256)", "68c6b11a": "subtract(address,uint256)", "68c6f45e": "issuedByStabilityBoard()", +"68c74b53": "timeleft()", +"68c76ffd": "getContributions(uint256,uint256,address)", +"68c77243": "changeBondingContract(address)", +"68c82b57": "autoToLp0Route(uint256)", "68c84260": "addEmployee(address,address[],uint256)", +"68c90539": "balanceByID(uint256)", "68c92b51": "doCall(address,uint256,bytes4,bytes32[])", +"68c95d75": "activeEggs(uint256)", +"68c9ba27": "erc20Wrappers()", +"68c9da6e": "updateChainLinkOracles(address[],address[])", +"68ca25c6": "minEthThreshold()", +"68cb812a": "claimFee(uint256,uint256,bytes)", "68cbce31": "setWinner(uint256,uint256)", "68cdafe6": "tokenTransfer(address,uint256)", "68cdf759": "getReffAdd(string)", +"68ce050c": "HorseyDeposit(uint256,uint256)", +"68ce74e7": "updateLicenceAmount(uint256)", "68ce77d0": "grant(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "68ce90ac": "handlePayment(address,uint256)", +"68cedd77": "mintUSDSynth(uint256,address)", "68cf5cf8": "setAdvisor(address)", "68cff8a9": "notEmpty()", "68d06724": "weisSoftCap()", "68d12938": "setDonatorReward(uint8,uint256[],uint8)", "68d155a0": "remove_participant()", +"68d27400": "setProtocolAsset(address)", "68d317f1": "buildGame(address,string,string,uint256,uint256,uint8,uint8,uint8)", "68d324e7": "changeCrowdSale(address)", "68d32aed": "getVerifiedHashID(address,bytes32)", +"68d385df": "supporterExitValidator(address,uint256)", "68d3d433": "specialDefenses(uint256)", "68d3fb7b": "initRegister()", +"68d466b8": "setY(uint256)", +"68d4e07c": "getTotalWithdrawableOf(address)", +"68d53c43": "notifyRewardAmount(uint256,address)", "68d5a014": "reveal(uint256,uint8[5],bytes32)", "68d5cb1a": "purchaseBuilding(uint256,uint256,uint256)", "68d64514": "getRemovableIdArrayItems(address,uint256,string,string,string)", +"68d66066": "Swap2LegTransactionReal(uint256,uint256,uint256,address,address)", "68d6a790": "timeOfreservations(address)", +"68d6b000": "checkerEmpty(uint256)", +"68d6d4dd": "getUtilizationInfo()", +"68d6fb5f": "getFarmerAddress(uint256)", "68d77366": "Coinlancer()", "68d7e4b5": "addDeal(uint256,string,string,uint256,string,bytes32,string)", "68d7f8d6": "nextPrice(uint256,uint256)", "68d830ae": "get_unlock_time()", "68d85d3e": "CloudexchangeCrowdsale(uint256,address)", +"68d8641a": "setBytes(string,bytes)", "68d88c25": "serviceRedirect(address,address,uint256)", "68d89792": "setCatAttributeValue(uint256,uint256,string)", +"68d8db9c": "setVerifierEnabled(address,bool)", +"68d90baa": "nomeDoVencedor()", "68d967dd": "changeDoublr(address)", +"68d9692a": "createEscrow_relayed(address,uint256,uint256,uint256,string,string,string)", "68d9e8c4": "DKoin()", +"68da10ae": "getTotalSupply(address)", +"68da163e": "nyanConnector()", "68da480b": "maxWeightBonus()", "68da5ee5": "guess(uint256[])", +"68da80af": "makeCoverBegin(address,bytes4,uint256[],uint16,uint8,bytes32,bytes32)", +"68da830c": "hasProxyPrivilege(address,address,bytes4)", +"68dac2ef": "TaskCreated(address,uint256,uint256)", "68dae6bb": "RoundClose(uint256,uint8,uint256,bytes32)", +"68db3be7": "bdip01LiquidityPools(uint256)", +"68db49ed": "isRegistred(address)", +"68db6c96": "modifyBalance(address,address,uint256,bool)", "68db96a6": "whitelistBonusRate()", "68dbc6c1": "fortune_bid(uint256)", "68dc3926": "unchanged(address)", "68dc9528": "giveTokens(address,uint256)", +"68dca2d2": "addRequestFeeless(address,bytes8,bytes32,bytes32)", "68dd43f6": "maxNumInterests()", +"68dd531a": "f8(uint256)", +"68ddd381": "LogReferralInvestment(address,uint256)", +"68defc0c": "tradeEtherForTokenUsingEtherizer(address,uint256,uint256,uint256)", +"68defcef": "Buy(uint256,bytes32,uint256,string,string)", "68df0d53": "_removeTokenFromOwnerEnumeration(address,uint256)", "68df4dda": "removeWhitelistedTokenAddr(address)", "68df5ca4": "testMinReturn0WithoutReturn()", +"68df84a7": "mEtherSpent(address)", "68e03bf9": "setEthEurRate(uint256)", "68e09ab5": "tokenEscape(address,uint256)", +"68e0d8c1": "Frozen(address,uint256)", "68e114db": "PFG(uint256,string,string,bool)", "68e12fa8": "addressCallWithArray(address,address[3])", +"68e14dac": "setParameters(bytes32,address)", "68e1569a": "parking()", +"68e17b24": "Votes(address,uint256)", "68e1bba4": "eth_ratio()", +"68e1e8c9": "getSaltHash(uint256)", "68e1f526": "WeMediaChainToken()", +"68e1fc7f": "removeCardSet(uint256)", "68e2076a": "Hub()", +"68e22f56": "finishOracle(uint64)", +"68e24327": "setStart(bool)", +"68e27690": "highscorePercent()", +"68e28412": "rewardOnBlock(uint256)", +"68e2dcf8": "stakeholdersPool()", +"68e357bf": "pendingDrug(uint256,address)", "68e39aac": "proxyWorking()", +"68e3b6f2": "hardPORN(address)", "68e453ed": "totalSaled()", "68e47f59": "accept(address,bool)", "68e4bd99": "testSetBitSuccess()", +"68e5585d": "userStake(address)", +"68e57c6b": "amountRemainingForSale()", "68e5a07e": "getExcludes(uint256,uint256)", +"68e5b7f3": "isFrozenInvestor(address)", +"68e5c066": "plusOne()", "68e5e22f": "buyAnalysis(address)", "68e67402": "RoomPlayersAdd(uint8,address,uint256,uint8)", +"68e6af4a": "getVictimBalance(address)", +"68e6c188": "EthDeposited(uint256,address,uint256)", +"68e6d15e": "setShit(address)", "68e757a0": "create_public_sale_token(address,uint256)", +"68e76346": "getDelegators(address)", "68e76403": "getTotalFeesCollectedCount()", "68e7bdba": "disableApi(address)", +"68e7cb15": "Crowdsale(address,uint256,uint256,uint256,address)", "68e7e309": "_saveVerification(address,address,uint32)", +"68e9a07e": "setPassword(uint256)", +"68e9c00a": "PRESALE_PRICE_USD()", +"68e9e9dd": "ConfirmPayment(uint256,bytes32)", +"68e9ee2f": "setInitRewards(uint256)", +"68ea307c": "BuyTickets(address,uint256[])", +"68eaa1f3": "setjgjiesou(uint64)", +"68eb4ba8": "takeCollateral(address,uint256,uint256)", "68eb59b0": "startGladiatorWithCoin(uint8,uint8,address)", "68ebd450": "bioLock()", "68ec0d99": "refundable(address)", @@ -60108,203 +109981,375 @@ "68ec9dba": "emptyPendingUserList()", "68eca613": "numShareholders()", "68ecabcf": "ankcwdsleToken()", +"68ed2bdf": "getPendingDevFeeRewards()", +"68edb2a2": "distributeToken(address,address[],uint256[])", "68ee137e": "bonusClaimedTokens()", +"68ee92c9": "getIndexOf(bytes32,address)", "68ef7946": "zazSupply()", "68ef8661": "isValidParticipant(bytes32)", "68efa030": "Dao1901()", "68efb367": "exile(uint8,uint8,uint8,bytes4)", +"68f01746": "carTypeSupply(uint256)", "68f04bbb": "openAirDrop()", "68f06b29": "redeemable(bytes32)", "68f0bcaa": "atomicize(address[],uint256[],uint256[],bytes)", +"68f11fa9": "addAuthorization(address,address,address,address)", +"68f1319d": "yarn()", +"68f15957": "calculateZReward(uint8,uint256)", "68f15aac": "DMChainToken(string,string,uint8,uint256)", "68f16293": "transferCooldown()", "68f169e1": "sellCut()", +"68f2001f": "GroupCreated(bytes32)", +"68f222fd": "inventory(address,uint256)", "68f269b4": "RATE_ETH_TXK()", "68f2ab8e": "Currency(string,string)", +"68f2ac11": "lockFinishUpdate(uint256)", "68f2c86a": "changeUserPerms(address,bool,bool,bool)", "68f2d6e2": "GEN0_MINIMAL_PRICE()", "68f319b1": "placeBet(uint8,bool,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "68f399f4": "BetSetAnswer(uint256)", +"68f414ae": "getInfoFor(address)", +"68f45632": "partner3Wallet()", +"68f4f840": "allShipsOfOwner(address)", +"68f54162": "withdrawFeeFactor()", +"68f5625f": "isInTopBig(address)", +"68f58814": "used_block_count()", "68f5aa0f": "setShareholderDB(address)", "68f5ccdf": "devFeePaid()", "68f5d173": "addAdminister(address)", +"68f5f406": "batchRevoke(address[],uint256)", "68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", "68f67330": "finalizedCrowdfunding()", "68f6e75f": "percent1()", +"68f7471e": "transferTreasuryFees()", +"68f7aee5": "stringify(uint256)", +"68f7dad2": "_beforeTokenTransfer(address,address,address,uint256)", "68f7ef1b": "BLKToken(address)", "68f88a26": "getMatchSummarizeInfo(uint256)", "68f8957a": "setAyantDroitEconomique_Compte_1(uint256)", +"68f8c2a4": "trade(address,uint256)", "68f8fc10": "buyToken(address,uint256)", "68f91814": "mainMultisigEther()", +"68f9379a": "input_uint8(uint8)", "68f9dab2": "hash(bytes,bytes,uint256)", "68fa8134": "removeAdministrator(address)", "68faaa6f": "getTotalSellCount()", +"68fab02a": "SOFT_DEADLINE_DURATION()", "68fad504": "burnExtraTokens()", "68faecdb": "depositedMYB(address)", "68fb81b7": "iCoTokensSold()", +"68fb95a1": "publicSaleContractAddress(address)", "68fbbab8": "giveMultipleItemsToMultipleRecipients(address[],uint256[])", "68fbd0a8": "TPTSchedules()", +"68fbe23e": "getAssetDetails(string)", +"68fc7f33": "init(address,uint256,uint256,uint256,address,address,address,address,uint256,uint256)", +"68fc8e22": "transfersUnlockTime()", "68fcb6ee": "purchaseCard(uint256,uint256)", +"68fcdeb8": "signerNonceTaken(address,uint256)", "68fd0455": "contractorCancel(bytes16,address,address,uint256,uint256)", "68fd22d3": "_addToList(address[],address)", +"68fd25cd": "_rewardRate()", +"68fdf24a": "jackpot2()", "68fe4405": "getBondHolder()", +"68fe58bf": "onRepaymentReceived(address,uint256)", +"68feaa1d": "setupBaseURI(string)", +"68ff50f3": "OwnerNotation(uint256,uint256,string)", "68ff8c4c": "UserList()", +"68fff3a6": "map_index(string,string)", "68fff456": "blackMask()", +"69000203": "sortTotalDis()", +"69005501": "changeCirculationProportion(uint256)", "69008fb6": "buyTileAuction(uint8,uint256,address)", "6900a3ae": "toString(uint256)", +"69010e3b": "setPoolLimit(uint256)", +"69019e04": "mintToMany(address[],uint256[],string[],string[],string[],string[])", +"6901b253": "delegationDeposit(uint256,uint256,address)", "6901f668": "validate()", "690252c8": "addSshKey(string)", "69025b5f": "_addTokenToOwnerEnumeration(address,uint256)", +"69026d63": "getMinersByRequestIdAndTimestamp(uint256,uint256)", +"69026e88": "pauseDeposit()", "6902a416": "AUMXToken()", +"6902ca61": "enableLimits()", +"6902fc06": "depositProfilesLength()", +"6902fcd1": "disputeResolutionAgreement()", "69030397": "addLocker(address,address)", "69032f15": "cantSetReferrer(address)", +"6903beb4": "currentEpochNumber()", +"6903f13e": "buy6TokenRef(address,address)", "69043895": "exOwner(address)", +"690448d7": "balancerToPie(address,address,uint256,uint256,uint256,address[],uint256[])", "6904c104": "getCampaignValidity(bytes32)", "6904c94d": "company()", "6904efc5": "BeatTokenIcoPhase3Started()", "6904f583": "econVestingStage()", +"690505a7": "startBoughtExit(bytes32[],bytes32[],uint8,uint8,bytes32[])", "6905877a": "totalOwedForApi(uint256)", "69061355": "claimOwnership(uint8,bytes32,bytes32)", +"690618ee": "darkusd_pools(address)", +"690641c7": "lastTotalTimestamp()", "6906679b": "getHistory(uint256,uint256)", "6906a137": "checkCharger(uint256)", +"69070463": "stakeToken_(uint256)", "69070772": "MyFreeCoins(uint256,string,uint8,string)", "69071418": "poolCLock()", "6907baa9": "Campaign(address,address,address)", +"69080e81": "setEarlyConfig(uint256,uint256)", "69081199": "WithdrawFunds(address)", "69086c21": "a(bool,bool,bool)", +"6908aa24": "headerIdx()", "6908d99c": "Extract(address,uint256)", "6908ea00": "_checkVotes(uint256,bytes32,bytes32)", +"69096223": "data(uint256,bool,uint256)", "690973b6": "placeSpectatorBetOnGladiatorBattle(uint256,bool,uint256)", "6909f5bf": "generateTokenWithAttributes(string,string,string)", "6909fd44": "isWhitelisted(uint256,bytes32)", +"690a20d5": "kbrToken()", +"690a6ce6": "checkPoint(uint8,uint16)", "690a946b": "getProjectEndDate(uint256)", +"690aa1c9": "ISRC()", +"690ac502": "zTokens(address)", "690b1897": "AragonTokenSale(uint256,uint256,address,address,uint256,uint256,uint8,bytes32)", +"690b390b": "EventCompleteSellOrder(address,address,uint256,uint256)", "690c11d5": "getcoursesLenght()", +"690c51b3": "totalValueUSdt(address)", "690c5de8": "phase4Cap()", +"690cd1ac": "LogServerRegistered(string,uint256,address,uint256)", "690cf0d1": "preSaleStarted()", +"690d08b1": "BonusMultiplier()", "690d0b1d": "STARCrowdsale()", "690d23be": "getItemAmountOf(uint256,address)", "690d3750": "lockBalances()", +"690d37c4": "_toBurn_rate()", +"690d7e70": "update8Reward(address[],address)", "690d8320": "withdrawETH(address)", +"690d986b": "tokenToEthList()", +"690deabd": "multisendErcSPS(address[])", +"690dfdff": "used_invoke_ids(bytes32)", "690e1d22": "showLockNum(address,address)", +"690e2609": "TReflectionFromToken()", +"690e30d5": "getapplyCoinListLenght()", +"690e6034": "getMostRecentIndexedDmgEarnedByOwnerAndToken(address,address)", "690e7c09": "open(uint256)", +"690e9cc2": "stuckVault(uint256,address)", "690eb3f8": "getTicketSumToRound(uint256)", "690f2f8e": "_addTokenAddress(address)", "690f411b": "VividoTokenTMP()", "690f4559": "createPersonalDepositAddressFor(address)", "690fa5df": "getPlayerRefById(uint256)", +"690ff8a1": "getListCandidates()", "69102190": "checkCount(address)", +"6910bdc7": "withdrawComponentsToSenderWithEther(address)", +"691104b4": "setupPrize(uint256[],uint256[])", "69111865": "LINDOToken()", "69115768": "hasItBeenReleased(uint256)", +"691260e0": "checkDestination(address)", +"6912911d": "updatePendingDuration(uint256)", "69129b4f": "StandardToken(uint256,string,string)", "6912c8ba": "thirtyPercentWithBonus()", +"6912f036": "licenseDetails(address)", "69132d43": "useBalanceOf(address)", "69132f72": "SALE2_END()", +"69137b91": "Uniswap_EthToToken(address,uint256,uint256)", "6913a63c": "addGuard(address)", +"6913c33e": "setDebtAddRate(uint256)", "6913d82d": "adminSetBlock(uint256,uint256)", +"691406be": "getInTokenBalance()", "6914db60": "tokenMetadata(uint256)", "6914f40f": "getPI_edit_27()", +"691562a0": "mint(address,uint8)", +"691594f0": "initiateSendTransaction(address,uint256,uint256,uint256,address,uint256)", +"6915f62d": "Top3distance50(uint256)", "69161b9e": "addAddressToGrantAccess(address,uint256)", +"691664c9": "rmIssueAuthAddr(address)", +"691678dd": "uniswapIdle(uint256)", "6917fd5e": "BONUS_ICO_PERIOD_ONE()", +"691901e0": "crowdSaleRoundOne()", +"6919b8f2": "ownerSays()", "6919d09a": "Y(uint256,uint256)", "6919ff17": "test_insert_findNoHintAtPosition(int256)", "691a38ab": "canBeWhitelisted(bytes32)", "691a3f64": "buyFrom(address)", "691a5842": "totalEtherRaised()", "691ae7c9": "setCandyPowerToken(address)", +"691b4895": "ExpectedRevenue()", +"691b6583": "numberOfEngineer()", "691b7ce0": "transferCMO(address)", +"691b87f8": "gameId(address)", +"691b98b5": "notifyExternal()", "691ba73a": "race()", +"691bd2ae": "setImpl(address)", +"691be4d8": "purchasedEpochs(address,uint256)", "691bf023": "LockTokens(address,uint256,string)", "691bfc89": "goods(uint16,uint256)", +"691bfee8": "sourceBufferPercent()", "691c65d4": "mintItem(address)", "691c71bd": "endTime2()", "691c9484": "registerInvestor(address)", "691cdb51": "CoinoorCrowdsale(address,address,address,address,address,uint256)", "691d58e7": "_applyRefund(uint256)", +"691d6ce1": "add(uint256,address,string,string,bool)", "691d933a": "getDeedByAddress(string,uint256)", +"691d9352": "executeSubscription(address,address,address,uint256,uint256,uint256,bytes)", +"691ddb47": "tDecimals()", "691de4a4": "add(string,bytes32)", "691e9961": "we_test_token()", +"691ea237": "getPeggedValue()", +"691eb62e": "distributeToken(address,address)", "691ed382": "THIRD_TIER_SALE_START_TIME()", "691edfda": "devAccount()", +"691ef663": "lastPeriodStart(address)", "691f2216": "User_1()", "691f3431": "name(bytes32)", +"691f5cd2": "setHolderDetail(string,string,string)", "691fb8ea": "jumpIn()", "692058c2": "dex()", "69205dfc": "TUNEZ()", +"6920f52b": "betNFT()", +"6921091a": "stakeValueAt(address,uint256)", "6921278a": "rateFee()", +"69213d03": "crossInGas()", "69215eb3": "ethMined()", +"692170c2": "addTocardType(uint32,uint256,uint256,uint256,uint8)", "692193cc": "MarketplaceAccessor(address)", +"692196a0": "getSoldvPURE()", +"692199d4": "sidechain_maxgas()", "6921af97": "payOutBounty(address,address)", +"6921ea41": "acceptProposedModules(bytes32[])", +"69222948": "_feePercent()", "69229b43": "ChangeOwnerContract(address)", +"6922d7b6": "setPriceCalculator(address)", "6922eb06": "sellPackToAddress(uint16,uint16,address)", +"69231804": "sky()", "692345ee": "elapsedPeriods()", +"692374e3": "anchors(address)", "692397a4": "testIssueTokens()", +"6923ab42": "totalSupplyCircle()", "69244c55": "getIcoReward(uint256)", "69245009": "cage()", +"69255678": "addBurnlist(address)", "6925ad77": "multiplex_target(address)", "6925b015": "contributionBy(address)", "6925ebb9": "fluxFeed(uint256,bool)", "6926890b": "createSale3()", "69269371": "newAmendment(string,uint256,uint256)", "6926cc7b": "_canSetReferrer(address,address)", +"6926e82f": "updateTokenBalance(address,uint256,uint256)", "692740b6": "_areStakeAndWithdrawAllowed()", +"69276c86": "log(uint256,address)", +"69276d96": "dedicatedCharityAddress()", +"6927af94": "giveMeString(uint256)", "6927bc38": "_isValidSignature(address,bytes)", +"6927ca29": "setrewardPrice(uint256)", "6927cac5": "trustedSender()", "6927e45a": "TOKEN_SHARE_OF_ADVISORS()", "6927f800": "Tango1Token()", +"69283341": "onlyExchangeFunction()", "69288540": "setDEV(address)", +"6928cdb1": "pendingfuel(uint256,address)", +"6928e142": "getChecksumAlgorithmById(uint256)", "6929dd0b": "confirmOrderCompletionByDoctor(bytes16,bool)", +"6929ebbf": "BondYieldGetAt(address,uint256)", +"692a76a7": "addUserPayingUsd(address,uint256)", "692aa97e": "isOpened()", "692ad3a9": "round(uint256,uint256,uint256,uint256)", +"692b1c89": "CreatePair()", +"692b3303": "isRebalanced()", "692b3712": "DMINT()", +"692b5f9c": "returnComplexType(uint256,uint256)", "692bf818": "isIntermediary(address)", +"692c1d44": "_setEnableAll(bool)", +"692c7141": "WithdrawLP(address,address,uint256,uint256,uint256)", "692cd610": "nextRewardPlayNo()", +"692ceafe": "usdtaddress()", "692d9ee5": "SALE_TOKENS()", +"692dc3dc": "OrderPlace(uint256,uint256,uint256,string,address,address)", +"692dd348": "getSessionStats(uint256)", "692dfe8e": "maxStakeHolders()", +"692e8ae4": "updateSwiftResolverStatus(string,bool)", "692f74aa": "getvehreqdetails(uint256,address)", +"69300c26": "setSCoinContractAddress(address)", +"69301dd2": "withdrawTokenByUser(uint256,address,address)", +"69305bc8": "theHusband()", "69306f24": "numberOfCommittees()", "69307c80": "rotateBits(bytes,int256)", "6930a020": "bruler(uint256)", "6930a7e9": "adminMode(bool)", "6930c5da": "depositSavings(address,uint32)", +"6930d0e6": "ProfitsSent(uint256,address,uint256)", +"6930fcc8": "phabricNum()", "6930fd2a": "claimAll(uint256)", "693103a0": "addAffiliates(address[],uint256[])", +"693159c0": "_defaultReferAddress()", "69318a79": "makeComment(string)", +"6931ae6b": "ERROR_CODE_BELOW_THRESHOLD()", "6931b550": "claimEthers()", "6931e19f": "productPrices(bytes32)", "69328dec": "withdraw(address,uint256,address)", +"69328ea1": "BetUpdated(uint256)", +"6932acdb": "emitEventOnMessageRequest(bytes32,bytes)", "6932af36": "proxies(bytes32)", "6932c9c5": "getSaleContractDepositAddress(address)", "6932cf81": "getName(string)", +"6932fe08": "addPool(address,address,uint256,uint256,uint256,uint256,uint256)", +"6933375c": "_getCurrentCTokenRates()", +"69334eeb": "finalStakes(uint256)", "69335938": "vestedDate()", "693382a9": "addToWhiteList(bytes32,address)", +"69338d1a": "XBTs()", "693391fe": "createNewUser(address,address,string)", +"6933f793": "boolToUint256(bool)", +"693470d1": "eFAMEprice()", "69347990": "ownerWithdrawl()", +"6934cf5a": "indexOfAddr(address)", "69358e2e": "getCompanyList()", "6935a0d0": "addNewEventToBusiness(uint256,address,string,string,uint256,uint256,uint256,uint256)", "6935a290": "OriginsTraceChainToken(address)", +"6935f4bc": "setLiquidityBuyback(address)", "69361de3": "I21Token()", "69361fe2": "FeeCalculated(uint256,uint256,uint256,uint256,uint256)", "693649aa": "mintRewardCore(address,uint256,uint256,uint256,uint256,uint256)", "6936c1cf": "XoloChain()", +"69373908": "NoneRegularTransfer(address,uint256)", +"69375083": "_getInterestInitialAmount(uint256,uint256)", +"69379102": "LogWithdrawContractToken(address,uint256)", "69389cac": "setPlayerForm(uint256,uint8)", +"6938a7a6": "setException(bytes32,uint256)", "6938d9b0": "allocatePresaleTokens(address,uint256,uint256)", +"6938ec7e": "calcFarmingInterest(address)", "6939864b": "lotteryState()", +"693986f6": "poolFeeVote(address,uint256)", +"693a090b": "uniRouterAddress()", +"693abb2b": "getMySentCards()", "693ac4fb": "getProof(bytes)", +"693ad6ff": "calcBpPoolIn(uint256)", "693b2b3f": "ticketTransferersAmount(address)", "693bd2d0": "cardContract()", +"693c1828": "Deposit(address,uint256,bool)", +"693c1987": "setAcceptToken(address,bool)", +"693cb42b": "balanceOfyvsteCRVinWant()", +"693cd4f9": "LogSwapTokens(address,uint256)", "693cf8ce": "amountToSeedNextRound(uint256)", "693d0141": "retireWildEasy(uint64,uint64,uint64,uint64,uint64,uint64)", "693d0df2": "claimFunds(address)", +"693d565c": "SwitchPause(bool)", "693dde5c": "getAppId()", +"693df64f": "tipVideoOwner(uint256)", "693e2279": "burntFounder()", "693e26dd": "createVirtualEntity()", +"693e320f": "TUSD_HasNoEther()", +"693e5418": "getSumElements128()", +"693eafff": "MAX_DAYS()", "693ec85e": "get(string)", +"693f917e": "M()", "6940030f": "disableTrade()", "69401027": "acceptClockmaker()", +"694091a2": "declareWantedRole(uint256,address)", "694094fd": "M5Token()", +"6941213f": "AddServerAddress(address)", "69414e7b": "SaveCryptoNetwork()", "6941a061": "IdxCoin()", +"6941f6b3": "truncateDecimals(string,uint256)", "69422924": "hasVotedOnDocumentPoll(uint8,bytes32)", "69423429": "getMyDividendAmount()", "694244f8": "PreSaleStart()", @@ -60316,114 +110361,227 @@ "69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", "69433e12": "setExchange(uint256)", "6943935e": "DPOS()", +"6943d69d": "getLenderInterestEarned(address)", "69443bf4": "CTAuction(address,address)", "694463a2": "totalEntrants()", +"6944ddb4": "CUSTODIAN()", +"6944f8f7": "JoinGreatHarmon(uint256,string,string,uint32)", "69454b86": "pairs(address,address)", +"6945b123": "buyShares(address,uint256)", +"6945c1fd": "getCurrency()", "6945c5ea": "setPlatform(address)", +"6945d800": "pricing(uint256)", +"6946c5e9": "UserTaskIDs(address,uint256)", "6946e33b": "GXVCNoToken(uint256,address)", +"6947029a": "balanceBonusPool()", "694702ec": "CommonTokensale(address,address,address,address,uint256,uint256)", "694719d8": "MIN_REFUND_RATE_DELIMITER()", +"694744ef": "_companyLocation()", +"694776cb": "MIN_STAKE_TO_START_PROPOSAL()", +"69479d7f": "nyanswopRouter()", "69488271": "AllocatePresale(address,uint256)", +"6948ab6f": "t3crv()", "6949a058": "sendOwnerEther()", +"6949b9d6": "lastBurnOrTokenDistributeTime()", "6949e1d4": "AngleToken()", "6949ed67": "omec(uint256,string,string)", +"694a2f5c": "ClaimFreeMoneyzzzz()", +"694a53d7": "level_2(bytes2,bytes3)", "694a813f": "bet1deltaOf(uint256)", "694b1727": "addServer(string,uint8,uint256,uint256)", "694c00d1": "reclaimBySender(address,address,bytes32)", "694c11eb": "buyCore(address,address)", +"694c3cfa": "updateS4FTokenPrice(uint256,uint256)", "694d3757": "isAuthDisabled(uint256)", +"694d3c92": "confirmWhitelist(address)", +"694d5051": "getCountDownStatus()", "694dcecc": "preCrowdsaleStartTime()", "694df50a": "freezeAddress(address,bool)", "694e0d5b": "StringPasser(uint8[])", +"694e0db7": "FreezeStatusChanged(bool,uint256)", "694e4277": "payment(uint256,address,uint256,bool)", +"694e63d5": "matrixUser(address)", "694e80c3": "changeThreshold(uint256)", +"694e91b8": "platformCommission()", "694ebe05": "createEscrow(address,uint256,address,uint256)", +"694ebe4f": "setLarge()", +"694f1b08": "changeStakingShare(uint256[])", +"694f55a3": "roboStaking()", "694f5a08": "_clearTotalNormalTokensByAddress(address)", "694f6276": "_approvedFor(address,uint40)", +"695155b0": "guessReduce(uint256,uint8)", +"69517310": "getUserRewardInfo(address)", "6951b995": "grantCompanyCoins(address,uint256)", +"6951cb7e": "swapWithRecipient(address,uint256,uint256,address,address,uint256,address,uint256,uint8,bytes32,bytes32)", +"6951e6da": "setGlobalKey(address,bytes)", +"69521650": "unfreezeWithoutDelay(address)", +"6952b556": "LATE_PHASE_CAP()", "695338b9": "ChillIssued()", +"69535c16": "getMappingAccount(address)", +"695363a3": "checkMulDivRounding(uint256,uint256,uint256)", +"69536651": "depositNonNative(string,address,uint256)", +"69537243": "revertCrossFork(string)", "6953ace4": "finalTokenExchangeRate()", "6953ba9a": "nextStarIndexToAssign()", +"6953e71a": "registerLiteNodeByAddress(address,address)", "69541be8": "DefaultReverseResolver()", "6954abee": "owner_supplied_eth()", "69557669": "changeContracts(address,address,address,address,address)", "6955c8fc": "getBuyPriceAndPreviousRecord(bytes32)", +"69569a03": "l3l3users()", "69569a51": "setFrontend(address)", "6956f3d5": "_totalTokens()", +"695730a5": "getTradeDetails(uint256)", "69573648": "remove(bytes,bytes)", "695741f8": "waitTimeBlocks()", +"695747c3": "dvdToReserve(uint256)", +"69574dc6": "burnGasAndFree(address,uint256,address,uint256,bytes32)", +"6957a0b2": "members(string)", "69580f63": "setVendorName(address,bytes32)", "6958420b": "arbYes(uint256,address,uint256,string,uint256)", +"695850fb": "safeMint(string)", +"6958839e": "mockSetTimestamp(uint256)", "69594cfa": "transactionLog(uint256)", "69598efe": "totalPartitions()", "69599168": "onEmergencyChanged(bool)", "6959d5c7": "getCitationRecord(string,uint256)", "695a4cad": "finishTransferFeePayment()", +"695a60c4": "_putInstud(uint256,uint256,uint256)", "695a7e9d": "CheckAmbientLightException(bytes32,uint32)", "695addc9": "newProposal(bytes32,address,uint256,bytes)", +"695af3d1": "setFaucetBounds(uint256,uint256)", "695b4700": "transfer_token_from(address,address,uint256)", +"695bcf85": "removeCalculator(address)", +"695c2fbb": "maxBalanceWei()", "695c5a26": "getCurrentPhaseCloseTime()", "695ca8c8": "Rhodium()", +"695ca924": "setAutoCreation(bool)", +"695cb485": "getAskLength()", +"695cb67a": "subtractNumber(uint256)", "695d027b": "EMoney(uint256,string,string)", +"695d3365": "getActivePool()", +"695d69ba": "end(address,uint256)", "695d7297": "updateRewardForDrawing(uint256)", "695d7797": "makeWallet(uint256)", +"695d794b": "_stakes(address,uint256)", +"695d8c81": "ChangedFee(address,uint256)", "695dcfa4": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", "695e1341": "UNGT()", "695e2a30": "METAXCrowdSale()", "695e54c3": "setCountWinnerPlace(uint256)", +"695e6105": "FillErrorSelector()", +"695e770d": "challengeAccepted()", +"695e89f6": "getCommitAndCipher(uint256,address)", +"695ec315": "OrderSuccessful(bytes32,uint256,address,address,uint256,address)", "695ec793": "secondRelease()", +"695ef6f9": "verifyProof(bytes,uint256[6])", +"695f3417": "ReclaimAndBurned(address,address,uint256)", "695f9db3": "createRocSaleMarkets(uint256,uint256)", "69606c61": "CompalTestCoin1(string,string,uint256,uint256)", "6960947d": "stockSize()", +"6960957a": "setNewGoodwillAddress(address)", "6960a0ed": "getArtWorkChangeFee(uint256)", +"6960a842": "daysPerEpoch()", +"6960d024": "changeFreezer(address)", +"6960f779": "DevMiningRewardChanges(uint256)", "69615c0c": "TransferSalPay(address,address,uint256)", +"69615e68": "getEfficency(address)", +"69619aaf": "stakeALT(uint256,uint256)", +"6961c008": "withdrawOwner(address,address,uint256)", "69623ae2": "addPlugin(address,address)", +"69628ae2": "unlockTokenSale()", "6962b010": "freezeEndsAt()", "69632f56": "unitAttack(uint256)", +"69634018": "resourceExchangeContract()", "69639749": "getMemberRole(address)", +"69639f9f": "LogNFTSetForSale(uint256,uint256,address)", +"6963ab0c": "beginLockDrop()", +"69640828": "isContractEnable()", +"69640b59": "log(uint256,bool,bool,address)", "696495f9": "GetLettuce(address)", +"69649820": "_m()", "6965193f": "_processTransactionFee(address,uint256)", "69652fcf": "resign()", +"69653f5c": "modifyRule(string,uint256,uint256,uint256,uint8)", "69658cf3": "checkMyTokens()", +"6965c128": "pendingSandwich(uint256,address)", +"6965ec49": "BeginReviewProcess()", +"6966299c": "CelebrityBought(uint256,address,address,uint256)", "69666811": "collectAllReturnBalance(address)", +"69667005": "getDraftConfig(uint64)", "69671622": "depositToken(address,uint8,uint256,uint256)", +"69673c7e": "Hype()", +"6967a47a": "startTransferVaultToNewClaimer(address)", +"696806c0": "BOOST_GAS_TOKEN()", "69683080": "totalRestrictedAssignments()", +"6968a319": "safeAddAsset(address[],uint256[],string[])", "6968ce29": "refundNonKYCInvestor()", +"6968f8b3": "timelockBalanceOf(address)", "6969d216": "topLevelDomainOwner(string)", "6969d5d8": "appointAdministrator(address)", +"6969dd09": "fundingCollectors(uint256)", +"696a573d": "payshopwithfees(address,uint256,uint256)", "696a7253": "setConstraint(bytes32,bool,bool)", +"696ae5e3": "getAssetToEthRate(address)", +"696af238": "setSlidingOracle(address)", "696b1030": "enableLimit()", "696b5fb7": "getAssetID()", "696bda86": "submitProposal(uint256,bytes)", "696c58c4": "getRefund(address)", +"696c6131": "changeSwapFee(uint256)", +"696c7b77": "addToFeePool(uint256)", "696c9c0a": "create(address,uint256,bytes)", +"696cc398": "rfiSantaToken()", "696cd82c": "_register()", +"696d153e": "stakeGemLP(uint256)", "696d25fb": "calcVestableToken(address)", "696d7ee9": "airdropPrize(address)", "696d816a": "endSell()", +"696d8c87": "swapEtherForGeo()", +"696da921": "getAgreementHash()", +"696de425": "Burned(address,uint256)", "696df08e": "FULL_TOKEN_WALLET()", +"696e3f41": "viewCustomerDepositByIndex(uint256,uint256)", +"696e5c6f": "SetBasicCentsPricePer30Days(uint256)", "696e6a6a": "Octiron()", "696e7a85": "listPrycto3()", +"696e957a": "setupAdmin(address)", "696ecc55": "trade(uint256,uint16[],uint8,bytes32,bytes32)", "696f541c": "getOrg(string)", +"696f554b": "AddIdentity(address)", "696f8a95": "CrowdCoinICO(address,address,address)", +"696fa674": "payDividendsByBundle(uint256)", "696fcc7c": "abortTime()", "696fd28a": "SBSToken()", "696fd68c": "makeTransferable()", +"696feca9": "basePrice18()", "697025b6": "transferEnablingDate()", "6970402c": "areAllTokensRegistered(address[],address)", +"6970423f": "getSlot(uint32,uint32,address)", "69706d9d": "unlockAmounts(uint256)", "69708616": "push(address,uint16,uint256[4],uint256[2],uint8[11])", +"6970a233": "UseUnLock(address)", +"6970a924": "g2()", "6970f46b": "BitFwdToken()", +"697102fd": "CheckOtherPlayer()", "69712ffa": "removeTokenLock()", +"69717349": "pauseWhitelist(address)", +"69717873": "view1(int256)", +"69718929": "getTokenstoburn()", "69719706": "Huangdashi(uint256,string,uint8,string)", "6971d64c": "func_0AB9()", +"69722aa9": "HardCapChanged(uint256)", "69732d4b": "ProjectX()", "6973a4f8": "backTransfer(address,uint256)", "6973cf58": "createEthSiringAuction(uint256,uint256)", +"6973d7fa": "closeLastAccount()", "6973e6db": "extraDataToNbJurors(bytes)", +"69746b19": "getCdpData(uint256[],address,uint256)", +"6974833d": "isLander(uint256)", "6974c632": "getItemPriceById(string,uint256)", +"69751448": "getProtocolAdapterNames()", "6975846a": "getCurrentBidAmount(uint256)", +"6975a893": "openCallBid(uint256,uint256,uint256,uint256)", "6975aa9f": "minGoalReached()", "69766079": "buyin()", "6977083e": "updateStrategyAddress(bytes15,address)", @@ -60432,66 +110590,113 @@ "6977aa62": "mintUnreleasedCard(uint8,address)", "6977d9de": "addEmployerTotalInvoiced(address,address,uint256)", "6977edc6": "dataControlAddOwner(address,address)", +"6977ff92": "get_total_weight()", "69793570": "_deleteOperation(bytes32,bool)", "69794795": "getRiskParams()", +"69794c3b": "bonusLevel4Percent()", "697952af": "updateHolder(uint256,bytes32,bytes32,bytes32,bytes32)", +"697a279c": "setNest(address)", "697a2902": "HDhundun()", "697a3083": "destroyforsecurities(uint256)", "697a60b3": "updateContract(string,address)", +"697ace62": "openAndWithdraw(uint256,uint256,address,address)", +"697adf33": "daiosLPPool()", +"697ae90c": "gammaSupply()", "697aefe2": "certificato(string)", +"697af909": "approve_371(address,uint256)", "697b139e": "changeGift(uint256)", +"697b8e82": "SHUF()", +"697b9573": "short_dyn()", "697c37c5": "cd1(address)", "697ca8bf": "getContributorInfo(address,string)", "697cca66": "safeRelease()", "697d1eaf": "getGroupTeamInvest(uint256,uint256)", "697d2e19": "getDisputeTimeoutState(uint256)", +"697d385a": "_twos_complement_128(int128)", "697ee181": "DemeterCrowdsaleInstance()", +"697ef9eb": "bakePool()", +"697efb78": "fess(uint256)", "697fa3e6": "forCommand()", "697fa43d": "isBatchCeateDrawings()", "697fb220": "addLockAddressInternal(address,uint256)", "697fc672": "creatorClaimFundTransfer(uint256)", "697fd39e": "randomNumberIncome()", +"6980671e": "getNumPendingReferralRewards(address)", +"6980ae1e": "viewOriginTrade(address,address,uint256)", "6980f4fb": "heroTypeIds(uint16,uint256)", "69810d0c": "TOTAL_SHIP()", +"69813ad8": "BonMinBuy()", +"69813c8e": "approve_726(address,uint256)", "69815435": "isAbove(uint256,uint256,string)", "69817410": "investHappened(address,uint256)", "69817dd4": "ProspectorsDevAllocation(address)", "6981b5f4": "getLength(string)", "6981c879": "updateDate(address)", "69820a80": "birthBlock_()", +"69822009": "dnftToken()", "698232fe": "balances1(uint256)", +"698247b3": "getMensaje()", "6982c6f4": "tickets100price()", +"6982da80": "_setUserSigningKey(address)", "6982f45a": "AutomobileCyberchainToken()", "69833668": "allocateEndBlock()", +"69836ab8": "makePayment(address,uint256,address,string)", "69837721": "accForBounty()", "6983f908": "isAllowedToBuyByAddress(address)", "69843940": "getValue(bytes32)", +"69848c2f": "tokenInfoMap(address)", +"69849d53": "IANA_addASN(uint32,address,bytes)", +"6984d070": "getRounds()", "6984d4a8": "getBigPromoPercent()", +"698518e5": "swapRate()", "6985a022": "Pause()", "6985a1b0": "endInstance(address,address)", "6985c57e": "createRare(string,uint256)", "6985e46e": "getConflictResolver()", "69863520": "getOrganizerName(uint256)", +"69863582": "registerCommercialMeasurement(string,int256,int256,bytes32,bytes32,bool,int256,int256,int256)", "6986ab82": "getNeedLockFundsFromPeriod(uint256,uint256)", +"6986b557": "fulfillPushReport(bytes32,int256)", "6986d405": "elapsedDays()", +"6987187c": "leftoverReceiver()", "6988e9cc": "tokenTotalSupply(address)", +"69891622": "XTEAddress()", +"69894f27": "upstreamOf(address)", "69898d64": "removeGift(uint256)", +"698996f8": "currentValue()", +"698a3494": "setupExtract(address)", +"698a5897": "daoWallet()", +"698a90c9": "startMintBlock()", "698a92fe": "CNKTToken(uint256,string,string)", +"698ae76b": "removePermittedAddress(address)", "698afd98": "withdrawFrom(string,address,uint256)", +"698bd0f3": "LogResult(address,uint256,uint256,uint256,uint256,bool,uint256)", "698bdd6f": "ViewtMyBets()", +"698c0f19": "viewUsers(address,uint256)", "698c1d17": "CoinBX(address)", +"698cb5c9": "C1(bytes)", "698d67aa": "registerBarcode(bytes9,bytes3,string,string,bytes19)", "698d8a1e": "completeProvision(address,uint32,uint256,uint256)", +"698e434b": "kycHashes(uint256)", +"698e6ae5": "Payout(uint256,uint256)", "698edc76": "getLawyer(address)", +"698f0da1": "GetRoundTotal()", "698f16aa": "pauseTrueUSD()", "698f2e84": "setVirtualExchange(address)", +"698f702a": "FastGamesChanged(uint256)", "698fbe92": "setWhitelisted(address,uint8)", "69902ffb": "buyPerUnit(address,uint256)", "699084f4": "CNBCoin(uint256,string,uint8,string)", +"6990b582": "addDex(string,address)", +"6990d935": "checkCirculationProportion()", +"6990f4a5": "isEthJoinAddr(address)", "69919447": "sclToken()", "6991bad0": "number_of_token()", "6991cb13": "EthlanceSponsorWallet()", +"6991fdb8": "getConfigChangeTermId()", +"69920f0e": "rewardPeriodsRegistry()", "69921c26": "checkAccount(address)", +"69930d06": "file(string)", "6993176a": "setMtdAmount(uint256)", "69934ee7": "becomeRichest()", "6993b507": "getDoublePeriod()", @@ -60502,33 +110707,65 @@ "69949c77": "getRestricted()", "6994a62b": "getRedemptionStatus(bytes32)", "6994a7a0": "getPlayerAmount(uint256,uint256,address)", +"6994be2c": "depositTokensSold()", +"6994dd06": "multi1(uint256,uint256)", "69950bd6": "addNewVendor(address)", +"69953053": "getChildTokensFromChildContract(address,uint256,address,uint256[])", "69953501": "setUtils(address)", "69958ab9": "cancelGame(uint256)", +"6995d7d0": "qsConfig()", +"6995db02": "getRecommanderByAddress(address)", +"69964e80": "getEmergencyUnlock(address)", +"6996742d": "VestingDefined(address,uint256,uint256,uint256)", "69972e07": "unvouch(bytes32,uint256)", "6997545f": "SetParticipantStatus(address)", +"69977470": "ModApprobationVote(bool[])", "6997bcab": "totalSpending()", "6997d166": "USER_VOTE(uint256,uint256)", "6997f429": "MacroProxyContract()", +"69984fa0": "set_sETH_TokenContractAddress(address)", "69986073": "mainSaleSuccessfull()", "6998a85b": "setTimeToBorn(uint256)", +"6998de35": "ownerFeePercent()", +"69991194": "removeIlkFromAutoLine(address,bytes32)", "69995128": "updateAccount()", "6999579f": "consolationRewardsClaimPercent()", "69997696": "updateLoveStoryWithData(bytes16,bytes32,bytes32,string)", "69997987": "distributeIQTToken()", +"6999ac93": "yieldRate()", +"6999b377": "feeController()", "6999d38f": "cancelBetByB(uint256)", +"6999e4d3": "getSharedFiles(bytes32)", "699a195d": "addEA(string,string,string,uint32,address,address,string)", "699a3a7f": "etherSince100()", +"699a9e59": "stakeAmount(uint32,uint32)", "699abb3c": "setTaxPercentage(uint256)", "699ac46f": "mintTransfer(bytes32,uint256,bytes32,address)", +"699ad07e": "pool10currUserID()", "699b328a": "randomize()", +"699b6a4e": "isValidFunctionality(address)", +"699bb979": "transferErc20(address,address[],uint256[])", +"699bcf58": "OracleUpgraded(address)", +"699bdca9": "harvestAll(address)", "699be1bb": "lastBlock_v9Hash_uint256()", +"699c0038": "mining(address,address,address,address,uint256)", "699c1687": "getProductBuyer(uint256)", "699c181e": "currentTokenPerETH()", "699c267a": "Jii()", +"699c6178": "NewSaleDiscount(uint256,uint256)", +"699c834b": "setExecutionOperator(address,bool)", +"699ca52b": "startTimeForTransfers()", +"699d36c1": "setBbaseDev(address)", +"699d9010": "panel_3(address)", "699dc8ff": "proxyMintTokens(address,uint256,bytes32)", "699dde66": "SiniCoin(string,uint256,uint8,string)", +"699de59a": "withdrawAward(uint256)", +"699e21c8": "etherReceived(uint256)", "699e2bc6": "getTradeInfo(uint256,address,address)", +"699e589a": "x_adminAddOrRemoveNFTFromBlackList(uint256,bool)", +"699e70d5": "mktVestingTimer(uint256)", +"699e7546": "getReturnNew()", +"699ecad4": "approve_721(address,uint256)", "699ef40c": "updateProfileAboutMe(string)", "699f0c72": "getOfferPriceEth(uint256)", "699f1fa9": "thisIsFork()", @@ -60540,61 +110777,107 @@ "69a1aa95": "bulkPurchageLand()", "69a1b0e2": "claimB1()", "69a1bca9": "refundSale()", +"69a1ebfd": "lastProfitDistIndex(address)", +"69a20469": "weiContribution(address)", "69a26fb8": "BuyStatus(uint256)", +"69a2b070": "addWETHTokenPair(address)", +"69a2fcbd": "getLiquidityValueAfterArbitrageToPrice(address,address,uint256,uint256,uint256)", "69a300f6": "getRangeID(uint256)", "69a3a65a": "HBXToken(address)", +"69a3f230": "tra(address,uint256)", "69a44176": "aTransfer(address,address[],uint256[])", "69a479e2": "IPETToken()", "69a4c408": "AdminSupply()", "69a4eda5": "calculatePositionProfit(uint256)", +"69a568c7": "getLastwinner()", "69a56df4": "testNewCounterValueAfterAIncrease()", +"69a5856f": "unpause(uint64)", +"69a58ae5": "safeStopAfterLGEFinish()", "69a5e902": "multiAccessCall(address,uint256,bytes)", "69a683f1": "pollCompleted()", "69a68f5f": "setPhase1AccountTokensMax(uint256)", "69a69658": "createCoreRequestInternal(address,address[],int256[],string)", "69a75868": "firstYearGameMiningTokenCap()", +"69a83a46": "toFixedSigned(int256)", "69a8c3bf": "CurrentGameId()", +"69a8f922": "getMyweed()", +"69a99348": "setTeamVestingContractAddress(address)", "69a9e6b8": "togglePayment(uint256,string)", +"69aa2327": "charIndexToApproved(uint256)", "69aa2c9f": "burnMultNom()", "69aaa388": "changeMultiSignatureWallet(address)", "69aab7e3": "withdrawNAC(uint256)", "69aad305": "getFromBalance(uint256)", +"69aade3e": "LineClosed(uint256,uint8,uint256)", "69ab0005": "setThreshold(uint256,uint256,uint256)", +"69ab3250": "NO_ERROR()", "69ab3404": "withdrawPartialDevelopersCut(uint256)", "69ab7895": "get_payment_by_id(uint256,uint256)", "69ab8c76": "ADVISORS_MONTHLY()", "69ab8e52": "IsICONotStarted()", +"69ab978a": "getInvestmentAssetMinHoldingPerc(bytes4)", "69ab98dd": "worldCupResultPart4()", +"69abaac9": "addressToToken(address)", +"69abe5ac": "sellistCounter()", "69abed8f": "updateReferralBonus(uint256)", +"69ac2192": "derivedFunction(bytes32)", "69ac5721": "unlockDate()", +"69ac64af": "PackOpened(uint256,uint16,address,uint256[])", "69ad56de": "_nextFifoStorageKey(uint256)", +"69ad6af2": "rebalance(uint256,uint256[])", "69add113": "tradeBancor(address[],uint256,uint256,address)", "69addb6e": "IssueToken(uint256,address,uint256,uint256)", +"69adf0f0": "getMinimumDeposit(address)", +"69adf796": "optionOneVotes(uint256)", +"69ae54fc": "SLVTReserve()", "69ae7757": "registerAntique(bytes32)", "69af0634": "cancelAllBuyOrders(address,uint256,uint256)", "69afa869": "setRoundTwo(bool)", "69b041bb": "swarmFundAddress()", "69b0abea": "remainingPurchaseAmount()", +"69b0b737": "getInvestmentAssetBalance()", +"69b11dd5": "totalRefBonus()", "69b144eb": "testThrowsCreateNewRevisionNotOwner()", +"69b1e9c8": "contractEthTokensSum(address,address[])", +"69b27a84": "addEthLiquidityLGETEST2()", "69b29b51": "saleLimitReachedForCurrentStage()", +"69b2af90": "govenors4(address)", +"69b30398": "getShare(uint256,uint256,uint256)", "69b31548": "ForwarderDeposited(address,uint256,bytes)", +"69b372f1": "emergencyWithdrawTokens()", "69b41170": "DELAY()", "69b492f9": "weisMinInvestment()", "69b4a1ef": "NUM_STAGES()", +"69b4b433": "RankRewardsForPCC(address[],uint256[])", "69b59e75": "collectFee(address)", "69b5fb58": "setAuthorName(string)", "69b6438e": "FUNDS_WALLET()", +"69b6de87": "LogAddOracle(address,string)", "69b71e06": "unblockFunds(uint256)", "69b7215d": "doesProofExist(bytes32)", +"69b73c96": "sponsorToComisionDone(address)", "69b7ca85": "getCaptainInfo(uint256)", +"69b7cc59": "createBakerySwapPairMainnet()", +"69b82226": "setMgasAddr(address)", "69b8f38d": "ICO_PERCENTAGE_2()", +"69b91432": "getNumAvailableForcedSlots()", "69b94cf0": "_transferWithData(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"69b98479": "smartysToken()", +"69b998da": "votingBuffer()", "69b9b787": "deposit2(address,address)", +"69b9b9da": "findDays(uint256,uint256)", "69b9e96b": "setBuyoutDividendPercentage(uint256)", "69ba0fe9": "getStringValues(bytes32)", +"69ba1c5f": "setReinvestHoldingTokenAmount(uint256)", +"69ba281a": "claimStageRefund(uint256,uint256)", "69ba3c06": "rejectErx20TransactionRequest()", +"69ba41b9": "NewTier2Participant(address)", +"69ba5d18": "inviDeal(address,uint256)", "69ba820e": "retrieveWalletForVanity(string)", +"69ba8a20": "taxRegistryAddress()", "69baa4ba": "TransferredToken(address,uint256)", +"69bae0b1": "collatteral(uint256,address)", +"69baf50e": "infoSosAll(address,uint256)", "69bb4dc2": "availableTokens()", "69bba72f": "getAirdropStats(address)", "69bbe5c7": "checkRound()", @@ -60602,65 +110885,107 @@ "69bc513a": "setGGEAddress(address)", "69bcdb7d": "getCommitment(uint256)", "69bd01c4": "getvalue()", +"69bd1cf4": "Do_Unstacking(uint256,uint256)", +"69bd26cd": "deployUniswapMarket(address,address)", "69bd28f0": "_buyToken(address)", "69bd3436": "debatingPeriodInMinutes()", "69bd4ec5": "processSellRequest(string,address,uint256,uint256)", +"69bdd113": "testUnavailableActionsWhenInvested()", "69bdd5dd": "appSet()", "69bdfd3a": "toContractDie(bytes,bytes,uint256)", +"69be4784": "getConvertibleTokenCount()", "69be51bb": "TOKENS_EARLY_BACKERS()", +"69be5468": "lockETHAndDraw(uint256,address,uint256)", +"69be5ab9": "switchbegin()", "69bee8a1": "getWorkerPoolsCount(address)", "69bef517": "balanceOfOnForHolderUpdate(address,uint256)", "69c0ad93": "setInternalDependencies(address[])", +"69c18e12": "infocheck()", "69c19d4c": "getOutcomeTokenDistribution(address)", "69c1a712": "lastHeartbeat()", "69c1da7c": "GetManifestoByCategory(string)", "69c212f6": "getUserByAddress(address)", +"69c228e8": "arraySlice(uint256,uint256)", "69c254b9": "getSSPRegistry()", "69c261ed": "setFreelancerCategories(address,address,uint256[])", +"69c2cddb": "POOL_LPTOKEN()", "69c338ff": "SomeContract()", +"69c38233": "Dividend(uint256)", "69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", +"69c42745": "OnPlay(uint256,address,uint256,uint256,uint256,uint256,uint256)", "69c46821": "checkReferrer(address)", +"69c46826": "addBook(string,string,string)", +"69c57e19": "CreatItem(string)", +"69c58383": "convertEthToToken(uint256,uint256,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)", +"69c7a051": "calcDisburse(address)", "69c7c180": "m_orderCount()", "69c7e386": "decreaseICOStartTime(uint256)", +"69c7f361": "LogAddCertificateAuthority(address)", +"69c7f4f3": "setBuyPrice(bytes18,uint256)", +"69c85ed7": "maxOldBetsAmountToClear()", "69c87817": "minimumWithdraw()", "69c89774": "removeWhitelistedTransfer(address[])", "69c8b344": "ownedToken(address)", "69c8c7ef": "subtrReferralDeposit(address,uint256)", +"69c8d338": "arbitrage()", +"69c90e96": "setPlatformKey(string)", "69c92c5a": "removeAddressFromBackend(address)", +"69c9f7f4": "updateIncomeSharePercentage(uint256)", "69ca02dd": "Transfer(address,uint256)", "69ca16fa": "eventLogHand()", "69cb418a": "RTeamCoin()", +"69cb88fd": "getTotalmTokenSupply(address)", "69cbb042": "getEncPubkey()", "69cbd0fe": "MintableBaseCrowdsale(address)", "69ccacd4": "setPercent4(address,uint256)", +"69cce2e7": "poolCommision()", "69cd5df1": "icoTokens(uint256,uint256,uint256)", "69cd61be": "lockOwner()", "69cdba9a": "approveChangeOwner(uint256)", +"69cddfe5": "registerRewardVelocity(uint256,uint256,uint256)", +"69ce1da1": "setLimitOfAction(uint256)", +"69ce2201": "_minPrice()", +"69ce6b77": "MIN_RESERVE_RATIO_BASE_RATE()", +"69ceb6bb": "flagCREATEException(bytes28)", "69cef46c": "uploadData(bytes)", +"69cf4c22": "getClaimOf(address)", "69cf7ac3": "miningToken()", +"69cfccbd": "poolNum(uint256)", +"69cffe96": "grandPermissionToBreed(address,uint256)", "69d01268": "concatUInt(uint256)", "69d0292d": "addPresale(address,uint256,uint256)", "69d03738": "setNFTAddress(address)", +"69d0b517": "CERTIFIER_ROLE()", "69d0b5e2": "buyInMarket(uint256,uint256)", "69d0e33c": "getPlayerPlayedTimes(uint256)", "69d0ef84": "callAndFailWithDivisionByZero()", +"69d14faf": "updateProjectArtistAddress(uint256,address)", +"69d18c62": "JoinGroup(uint256,address,uint256,uint256)", "69d196e1": "canAcceptPayment(uint256)", "69d19c19": "BDSM()", "69d1d1ca": "postGoods(string,uint32,string,uint256)", +"69d1ed4d": "claimTokensByTeam()", "69d20762": "MassivelymultiplayeronlineVideoGames()", +"69d23351": "WNFTL()", "69d24f63": "lifetime()", "69d25ff2": "updateCustomFee(uint256,address,address,address,address)", "69d29832": "startBonuses()", +"69d2989e": "yvault(address)", "69d2ce29": "countGames()", +"69d32965": "pendingNerd(address)", "69d38ed2": "FINAL_AML_DATE()", "69d3b252": "newVox()", +"69d3c464": "activateStake(uint256)", "69d3e20e": "mint(uint128)", +"69d43c88": "farmEnded(address)", +"69d44e7d": "frsWithdrawAll()", +"69d47537": "unlockTimeReserved()", "69d4e250": "_safeSubtract(uint256,uint256)", "69d4f28e": "officialSold()", "69d516b3": "acceptExecutorOwnership()", @@ -60670,62 +110995,114 @@ "69d62bf4": "revertTransfer(uint256,uint256,uint256,uint256,uint256,uint256)", "69d6b880": "mintAmount1()", "69d714c3": "getLargeInvestorApproval(address)", +"69d7453f": "ApproveBurner(address,address,uint256)", +"69d7697e": "totalFlipBalance()", "69d77740": "left92(uint256)", +"69d78e38": "NewPendingAdmin(address)", "69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", +"69d7f652": "setHexContractAddress(address,address)", "69d87ab1": "setETHUSDPrice(uint256)", "69d89575": "releaseFunds()", +"69d8ef4a": "LogDeposed(address,uint256)", +"69d9542e": "getItem23(uint256)", +"69d95d43": "changeUsdToEth(uint256)", "69da1b43": "NonceTick(uint256)", "69da66ea": "referralPromille()", +"69dacbc6": "beamOutOasisSwap(address,uint256,address,uint256)", +"69dadecd": "took(uint256)", "69dae8b0": "callAndReward_3(string,string,uint256)", "69db054c": "userComment(uint256)", +"69db72e7": "bannable(address)", +"69dbba94": "reinvestHoldingToken()", "69dbe3e1": "StepFunction(uint256,uint256,uint256)", +"69dc9ff3": "contracts(address)", "69dcafe9": "createGovernance()", "69dceb6a": "getCoinAge(address,address,uint256)", +"69dcf683": "voteForBid(address,uint256)", "69dd312f": "mintForContributorPool(uint256)", +"69dd3908": "state_peggyId()", "69dd3b2e": "transfer(address,bytes32,bytes32)", "69dd4524": "crowdsaleTransfer(address,uint256)", "69ddaad1": "resetQuote()", +"69ddd67d": "whitelistAddresses(address)", "69dded0e": "validateSet(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"69de1ed5": "rebaseRewardSynth()", "69de374d": "getProposalUint(uint256)", +"69de4a86": "batchERC1400Balances(address[],address[])", "69de4e84": "NimCoin()", +"69deb7b7": "claimThrone()", +"69dec276": "maxUpdateCallerReward()", "69ded293": "reserveBountyRecipient()", "69df3671": "friendsWith(address)", +"69df7d43": "LPTKN()", "69dfae6e": "productTokens(string)", +"69dfb363": "addToken(address,uint256,uint256,uint8)", "69dfc66e": "TestableStandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"69dfd845": "h_data()", "69e01731": "setDesignatedReportDisputeDueTimestamp(uint256)", "69e01e8d": "dividendsOwing()", +"69e0b367": "getminerLpTokenList(address)", +"69e0bb42": "setTransLock(address,uint256)", "69e0e346": "inWhiteList(address)", +"69e0f0f7": "unlockFundsWithdrawal()", "69e111ba": "needRelease()", +"69e13300": "setNumEpochs(uint256)", +"69e1412b": "_burnToVault(address,uint256)", "69e15404": "feeAmount()", "69e1b5ce": "NewStage()", "69e22b20": "addRequest(address,string,string,address)", "69e24b48": "getCrabStats(uint256)", "69e255c9": "removeHorseOWN(uint256)", +"69e295e8": "updateAllURIs(string)", "69e2c927": "canRecvEthDirect()", +"69e2d90d": "subscriptionContract()", +"69e2f0fb": "revokeMinterRole(address)", +"69e375a7": "issueTokensWithLocking(address,uint256,uint256,uint8,uint64)", +"69e4aaf2": "Approval(uint256,address,address,uint256)", +"69e527da": "cToken()", +"69e5783d": "TokenToWeth(uint256,address[],address,uint256,address,address)", "69e6bcdf": "smartUnBlockAddress(address)", "69e6e6c9": "amountOfPopDeveloperShouldMine(uint256)", +"69e6ef61": "contentDigests(uint256)", "69e78499": "removeKey(address)", "69e795be": "teamTokensCap()", "69e7ae85": "ipfsAttributeLookup()", "69e82500": "SoundbitToken()", +"69e82d0e": "waifuCount()", +"69e861e5": "get3MostFinishedAthForEachRange()", +"69e886e1": "getMultiplier_single(uint256,uint256,uint256)", +"69e8a048": "banUser(uint256,address)", +"69e8a15f": "polynomialInterestModel(uint256)", +"69e8cf07": "addCouncil(address,uint256)", "69e8d80f": "ednation()", "69e91994": "getReturnValue(uint256)", "69e936f0": "isMultiply()", +"69e99b5c": "m_scores(address)", "69e9ca8a": "calculatePayoutForAddress(address)", "69e9f8a8": "activateCurrentRound()", "69ea1771": "updateRate(uint256)", "69ea80d5": "HEIGHT()", +"69ea80e8": "admireStack()", "69eac83a": "_emitOracleAdded(bytes4,address)", +"69eaced2": "resumeSynthsExchange(bytes32[])", "69eadd76": "canAcceptTokens_()", +"69eb49ea": "getMinerMinMineDays()", "69eb6d32": "Annihilated(address,uint256,uint256)", "69ebb7e9": "getCurrentRound(uint128)", +"69ebf34e": "mintKey()", +"69ec638e": "lockAmountMulti(address[],uint256[])", "69ecc3cf": "invalidate(bytes32)", "69ed1b83": "callSomeFunctionViaInner2()", "69ed87b0": "FeesCalculated(uint256,uint256)", "69ed8a42": "LRKToken(uint256,uint256)", "69edd4fe": "callElection(uint256)", +"69eea1d6": "handleIsValid(bytes16)", +"69ef021a": "tolerancePriceBelow()", "69efe2bf": "stageAdmin()", "69efe471": "transferLimits(address)", +"69f03005": "mintToSellTo(uint256,uint256,uint256,address)", +"69f03fd2": "setWinnerPercentage(uint24)", +"69f066a3": "totalUnclaimedRewards()", "69f08449": "m_sale()", "69f0a549": "mintOther(address,uint256)", "69f10ce1": "issueRIU(address,uint256)", @@ -60733,57 +111110,105 @@ "69f173dc": "waveCap4()", "69f18967": "testSetBitFailIndexOOB()", "69f18b8c": "ROB()", +"69f18bfb": "joinFor(address,address,uint256)", +"69f2561a": "payRetainerFee(string)", +"69f25db5": "ReflectedPunksMarket()", +"69f29c51": "setAuthorizedAddress(address)", +"69f2e691": "calculateLinearInterest(uint256,uint40)", "69f30401": "bid(address,uint256[],uint256[])", "69f3331d": "nextOwner()", "69f35883": "updateBloomFilter(bytes,address,bytes32[])", +"69f39d0b": "takerOffers(address,uint256)", "69f3c66e": "Movieum()", +"69f3c780": "getBoughtTokens(address,bool)", +"69f3f041": "getRoundInfo(uint256,uint256,uint256)", "69f40ebc": "forwardInvestorTransaction(address,bytes)", "69f467c1": "unicorns(uint256)", "69f4aefc": "LATPTransaction(uint256,uint256,uint256)", +"69f5038c": "setParameters(bytes3,bytes32,bytes32,uint256,bool)", +"69f54687": "neutralPrice()", +"69f61fd0": "ysH()", "69f66950": "holderBountyTokens()", "69f6b766": "getSumInByLottery(uint32)", +"69f721e2": "mintNumbered(address,uint256,uint256)", +"69f7a661": "INCOME_DENOMINATOR()", +"69f7c1e6": "mintToken(uint256,string,uint256)", "69f80b4a": "addAddress(address,address,uint256,address)", "69f80c7a": "additionPrice()", "69f8408a": "MigratableToken()", "69f8ef0c": "flushETH()", +"69f92773": "playerEarnings(address)", "69f94209": "NewDrawReadyToPlay(uint256,bytes32,uint256,uint256)", +"69f94adf": "AUTO()", "69f95967": "vminEtherPerPurchase()", "69f99001": "hashDataBlock(string)", "69f9ad2f": "char(bytes1)", +"69f9d91c": "value(address)", "69fa2cae": "createMintableSale(uint256,uint256,uint256)", +"69fa4de2": "_createProxy(uint256,address)", +"69fa668f": "setClient(uint256)", +"69fa6d46": "removeDerivativeFactory(uint8)", +"69fb0f5d": "underflowlocalonly(uint256)", +"69fb2a20": "use(address,uint256)", +"69fba519": "unstakeClaimTokens(uint256)", "69fbad65": "_depositOldTokens(address,uint256,address)", "69fbae6c": "_sendToTeam(uint256)", "69fbfcc4": "upgradeStructure(uint256)", "69fc3481": "fundsRaisedFinalized()", "69fc551a": "create(address,uint256,string)", +"69fcb251": "swapBuyLevel(address,uint256)", "69fcbf70": "setPreSaleAmounts()", +"69fcd4ac": "calculateSaleReturn(uint256)", +"69fd2631": "oneInchFunctionSignature()", "69fd75b1": "GUPToken(address,uint256)", "69fe0e2d": "setFee(uint256)", +"69ff20c9": "updateRewardAdjustmentFactor(uint256)", "69ff2d11": "TOT()", "69ff5277": "set_activity_details(uint256,string,address)", +"69ff7744": "exceedsMaxLoanAmount(address,uint256)", "69ffa08a": "claimTokens(address,address)", "69ffadc9": "TDz(uint256,string,uint8,string)", +"6a00a097": "foo11(address,int256[])", "6a00da87": "sellBuyerTokens(uint256)", +"6a00ddd3": "setETHUSDpriceFeed(address)", "6a011ae5": "minRandomPrivilegeValue()", +"6a011c82": "_currentDebt()", "6a018302": "mul2Revert(uint256)", +"6a019389": "secondsInADay()", "6a01b6e6": "createToken(uint256,uint256,uint256,uint256,uint8,uint256,address)", "6a01f09c": "swapLimit()", +"6a020305": "baseBurnPercentage()", "6a02209c": "getMaxParticipants()", "6a028692": "totalAvailableEdition(uint256)", +"6a029f2b": "renounceFinance(address)", +"6a02caf1": "collectProfit(address,uint8)", +"6a02ed14": "cDAI_address()", "6a0323b2": "MusiconomiToken()", "6a0324b0": "_getBool(address,bytes32)", "6a032a3b": "isTimelocked(address,address)", "6a032a73": "generateTokensManually(uint256,address)", +"6a032d1e": "rewardClaimDate()", "6a03eaf9": "finalizeTime()", +"6a03f8a5": "_mintTo(address,uint256,address)", "6a048ddb": "createContractChar(string,uint256)", "6a049b62": "_buyMulti(address,bytes32)", +"6a05025f": "tokenTypesOf(address)", "6a054250": "update(uint256,uint256,uint256)", +"6a058966": "LIQUIDATION_CALLER()", +"6a060d69": "getElectronicSignatureHash()", "6a0665a4": "calculateGoldSell(uint256)", "6a06bf92": "enjinTeamAllocation()", "6a07089f": "Contents()", +"6a083b0c": "setupAccessList(address)", +"6a083c2c": "getQuip(uint256)", "6a08b403": "setFine(uint16)", +"6a09006e": "uniswapFactoryA()", "6a092e79": "transferTokens(address,address)", +"6a09c926": "getSortedIndexOf8(uint8)", +"6a09f6be": "bets(uint256,uint256)", "6a0a1f8e": "claimGrant(uint256)", +"6a0a5f95": "USDXGERateUpdate(uint256,uint256)", +"6a0a7c08": "getRepayAmount(address,address,uint256,address)", "6a0ac115": "libpow2(address,uint256)", "6a0b50e4": "pickFood(uint256,string,string,uint256)", "6a0b96b7": "IkuraTransferFee(address,address,address,uint256)", @@ -60791,12 +111216,15 @@ "6a0c5068": "getParticipantesA()", "6a0c5723": "getHasVoted(uint256,address)", "6a0c8730": "getTransactionPrice()", +"6a0cbf66": "SplitTokens(uint256)", "6a0cd52e": "admin_commission_activated()", +"6a0cfa71": "getRangeRandom(uint256,uint256)", "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[])", +"6a0e9f4e": "aCHICAGOBlock()", "6a0f7b7c": "getProductContractClients(address)", "6a0fd45c": "getMeter(string)", "6a100f37": "startAuctionFee()", @@ -60805,51 +111233,89 @@ "6a10d4d6": "createToken(address,uint256)", "6a11138c": "doRandom(uint64)", "6a12209c": "setRequestLimit(uint256)", +"6a12b273": "_toUnderlying(uint256,uint256,bool)", "6a12b86c": "continueGeneration()", "6a1353c9": "setMintPayoutThreshold(uint256)", +"6a137219": "setGovernmentAddress(address)", "6a13af72": "giveRiskToken(address,uint256)", "6a140b27": "_transferToContract(address,address,uint256,bytes)", "6a142015": "assignGenesisCallerAddress(address)", "6a146024": "WAD()", +"6a1463c8": "issueNewBond(uint256)", "6a14d131": "creatorsCreatedCount()", +"6a155903": "ReplenishEthEvent(address,uint256)", "6a15a080": "distribute_NRT(uint256)", +"6a162376": "LogBoardChange(address,uint256,string)", "6a16ae40": "wct2()", +"6a1722b1": "ForwarderCreated(address)", "6a172536": "firstPreSaleDate1()", "6a1729aa": "paymentAffiliate(address)", +"6a1744dc": "isERC20MethodSupported(address,bytes4)", +"6a187800": "getTitanPerBlockForTitanReward()", +"6a18eb48": "userContributionForProject(address,address)", +"6a18ff7a": "vote(uint256,uint256,bool)", +"6a196230": "setMetadata(string,uint256,string)", +"6a1972bd": "ownerToContracts(address,uint256)", "6a19b647": "addSuperPlayer(address,bytes32,uint8)", +"6a19c591": "lastRelayedBlockNumber()", "6a1af8b8": "setHeroData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", "6a1b52e1": "expirationCheck()", +"6a1b6f91": "LevelUp(uint256)", "6a1be7c6": "approveCollateral(address,uint256)", "6a1bf209": "setCCH_edit_8(string)", +"6a1c05ae": "apply_transfer_ownership()", +"6a1c0bfb": "createBid(address,uint256,uint112)", "6a1c3a4c": "getLastAPPeriod()", +"6a1c4758": "exchangeOnBehalf(address,address,bytes32,uint256,bytes32)", "6a1c6fc0": "costs(string,uint256)", "6a1cd82c": "crowdsaleRaised()", "6a1cdefb": "incBlockCount(uint256,uint256,bytes32,uint256)", +"6a1ceb2d": "currentStrategy()", "6a1cf721": "voteYes(uint256)", +"6a1d23ed": "viewSender()", +"6a1d7f90": "buyOrIncreaseContribution()", "6a1d8713": "setMaxReferrals(uint256)", +"6a1d8ce2": "sync(address[],address[])", "6a1db1bf": "changeFee(uint256)", "6a1dbf03": "getTokenMinted()", +"6a1e40e9": "swapTokenToToken(uint8,uint256,address,address)", +"6a1e5a4b": "sixMonthLock()", "6a1eb83f": "MeDao(address,address,address,address,address,uint256)", "6a1ecbbf": "maxHopefulsNumber()", +"6a1f1f21": "msg_types()", "6a1f9e19": "breakIt()", +"6a1feee1": "flashLoan(uint256[3],uint256,bool)", +"6a205812": "getUserProfitDate(address)", "6a206137": "cancelOrder(address,uint256)", +"6a210a0e": "dailyDataRange(uint256,uint256)", "6a2129d6": "delegateRecordExists()", "6a21857f": "manualSend(address,bytes5)", +"6a22028b": "currentPaymentIndex()", "6a221688": "TokenSaleQueue(address,address,address,address,uint256,uint256,uint256)", +"6a223df4": "getEscrowPairAmount(uint256)", "6a226077": "bidOnBreedingAuction(uint256,uint256)", "6a226a49": "addMessage(string)", +"6a2275db": "proposalName()", "6a22b09a": "lastAssigned()", +"6a231b03": "rewards1(address)", +"6a232b34": "erc721InterfaceIds(uint256)", +"6a2385e8": "deployers(address)", "6a23b9df": "sumICOStage2()", "6a23e308": "getIncubatorHashing(address,uint8,uint256)", "6a23e7cf": "setFeeDistributionAndStatusThreshold(uint8,uint8[5],uint256)", +"6a246e70": "contractDuration()", +"6a24a938": "getMoreDetails()", "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)", +"6a267aeb": "recoverSigningAddress(bytes32,uint8,bytes32,bytes32)", "6a26b7fe": "setClaimableToken(address)", +"6a270ba1": "Integer(uint256)", "6a272462": "sell(address,uint256,uint256)", +"6a279ec0": "reclaimETH(address)", "6a27c41d": "revealVote(address,bytes32,bytes32,address,uint256,uint256)", "6a280317": "isAuctionManager(address)", "6a2875c1": "incrementDIDFromContributions(address,uint256)", @@ -60860,46 +111326,87 @@ "6a293d04": "setAlias(string)", "6a294a80": "maxActivatedSalesTotalCount()", "6a29605f": "BOHUpgradeableToken(address)", +"6a29a705": "merkleTreeCount()", +"6a29bd0f": "LogModuleUsed(address,address)", +"6a29f539": "isQuoteFilled(bytes32)", "6a2a4c06": "get_released_by_manager()", "6a2a6657": "validateToken(address,uint256,uint256,uint256)", "6a2aac2b": "flowerBalances(address)", +"6a2ab602": "callable()", "6a2ab790": "PRIVATE_STAGE_MAX_CAP()", "6a2b171a": "applyDiscount(address,uint256)", "6a2b5656": "changeTransactionFeeRecipient(address)", +"6a2b618b": "insertPhrase(string)", "6a2b9e9d": "ERC20WithMetadata(string)", "6a2c1ace": "getStateHash(bytes,uint256)", +"6a2c5352": "withdrawReward(uint256,address)", +"6a2cea96": "getUserToUserTotal(address,address)", "6a2d1cb8": "MIN_INVEST_ETHER()", "6a2d5028": "getRaisedAmountOnToken(address)", "6a2dda87": "SettingAutoGame_BettingRankRange(uint256,uint256,uint256)", "6a2ddfce": "dragonsStatsContract()", +"6a2e0c1c": "refreshUniswapToAddr(address)", +"6a2e2bec": "updateVoteReceiverVestingDays(uint256)", "6a2e882b": "getBlockLimit()", +"6a2ea57e": "latestResult()", +"6a2efa76": "nodeCount(address,address)", "6a2f78a6": "submitStakeholderTransaction(address,bool)", +"6a2f796c": "contractStartTimestamp()", "6a2f9536": "calculateFraction(uint256,uint256,uint256)", +"6a2faef7": "multiBuy(address[],uint256)", +"6a2fe7a5": "clientList(uint256)", +"6a305f67": "L1_NovaExecutionManagerAddress()", +"6a3092a3": "yveCrvJar()", +"6a30b253": "creditGasFees(address,address,address,address,uint256,uint256,uint256,uint256)", +"6a30bf65": "setRoyalties(uint256,bool,bool,bool,uint8,uint8,uint8,address,address)", "6a30eb24": "hogsmashToken()", "6a310bac": "bizp()", +"6a3133cd": "private_setCharityAddress(address)", +"6a3176a7": "RVMT()", "6a31c6df": "getAdjustedAccountValues()", +"6a326ab1": "setPaymentToken(address)", +"6a327586": "WithdrawCapitalFromEsusuCycle(uint256)", "6a327b7d": "getSupportManager()", "6a333e51": "removeAvailablePack(uint256,bytes4)", "6a33440a": "MANHATTANPROXY12THAVE()", "6a3350c8": "invalidAirDrop(address)", +"6a336304": "lockLiquidity(address,uint256)", "6a33803b": "mintSaleTokens(uint256)", +"6a33d28e": "swap(address,address,uint256,uint256,uint256,address)", "6a343df3": "allowPrice()", +"6a343e3c": "_gegoFactory()", "6a34480b": "MAX_INVESTORS()", +"6a34c4c4": "updateManyUsersAllExtendedExternal(uint256[],uint256[])", "6a357465": "payHours(address,uint256)", +"6a35a582": "isAnyFreeNode(bytes32)", +"6a362f3f": "GrantedTokenReturned(address,address,uint256)", "6a368486": "Ethraffle()", "6a369137": "AfterSaleTransferableTime()", +"6a36c5b7": "roboRatePerBlock()", +"6a375c13": "_addExchange(address,address)", +"6a37d346": "debtOwing(address)", "6a3845fe": "artTokenoken()", "6a385043": "approveTokenTo(uint256,address)", "6a385ae9": "getBalances(address,address[])", +"6a387fc9": "completeWithdrawals(uint32)", "6a38c0fa": "DragonLock()", +"6a38c851": "userWRNRewards(address,address)", +"6a393e9a": "AddressCardWagerWasCancelled(address,address)", +"6a395ccb": "transferAnyERC20Tokens(address,address,uint256)", +"6a39b5ea": "mockDisputable(bool,bool)", +"6a39d32c": "_getBurnFee()", +"6a39e328": "expiringCoupons(uint256)", "6a3a2119": "injectEther()", "6a3b5aea": "setC4FContractProviderLock(address,bool)", "6a3baaea": "newForge(bytes32,bytes32,address)", "6a3bb8cc": "setFiscal(uint256,bytes32)", "6a3c1198": "_projectCancelNew()", "6a3c167b": "setInitialize(bool)", +"6a3c1ef8": "priceLast()", +"6a3c4c90": "initSuperprize(address,uint256)", "6a3c62a7": "beginReclaim()", "6a3c7945": "RequestUpdated(uint256)", +"6a3cb300": "confirmLocker(uint256)", "6a3d2a15": "AdvisorsAmount()", "6a3d42ef": "ANT(address)", "6a3d5a07": "AuctionCancelled(uint256,address,uint256)", @@ -60907,24 +111414,45 @@ "6a3f5146": "auctionExpired()", "6a3f79f4": "RaffleIssued(uint256,uint256,uint256)", "6a3f89f4": "setProofImpl(address)", +"6a3fd4f9": "canAwardExternal(address)", +"6a4003bb": "Island()", "6a40515a": "enhancer()", +"6a40cc71": "getbalanceOfDividendDistributorAtDistributionTimestamp()", "6a40dbd6": "mintInvestor(address,uint256)", "6a4113c7": "releaseLockFounders2()", +"6a414179": "setStarts(uint256)", +"6a4141d8": "TRANSFER_AGENT()", +"6a41ac7f": "changes_sum(int128,uint256)", "6a41ade3": "walletCoreTeam()", "6a420614": "setFreeCount(uint256)", "6a420bbc": "setHaltPurchase(bool)", +"6a4234eb": "setWETHAddress(address)", "6a42b8f8": "delay()", +"6a431371": "burn_address(address,uint256)", "6a4349a9": "getMicroModulesIds()", "6a43aae7": "removeName(string)", "6a43dc9a": "totalSupplyByLegacy()", +"6a43fe2d": "deposit8(uint256)", +"6a4447f1": "getCEthExchangeRate()", +"6a44cac9": "revokeAccess(address,string)", "6a4509f0": "paymentMax()", "6a457ee9": "allocatedBonus()", +"6a467394": "transfer(bytes32,uint256)", +"6a46c1e3": "removeWalletList(address[])", +"6a46cf0b": "testTokensSupply(address,uint256,uint256)", "6a470988": "getkEthPhiRate()", +"6a471721": "STATS_TYPE_INVITE_ZERO_TODAY_REWARD()", "6a474002": "withdrawDividend()", +"6a479fd3": "getOwnerBalance(address,uint256)", "6a47aa06": "halvingInterval()", +"6a47ecd7": "dartPeriod()", +"6a4874a1": "crv()", "6a48c04d": "GenExtWeightList(uint256,uint256,uint256)", +"6a491112": "_setCompRate(uint256)", "6a4967d6": "addToWhitelist(address,uint256,uint8,uint8)", "6a4987dc": "MARKETING_POOL_ADDR()", +"6a49d2c4": "addReserve(address,uint32)", +"6a4a2282": "mintSell(uint256)", "6a4a39e9": "presaleEndsAt()", "6a4a6b6e": "_myAddressHelper()", "6a4ad948": "setConvertionFee(uint256)", @@ -60934,224 +111462,455 @@ "6a4b27f4": "getRenter(address)", "6a4b3eca": "checkBankBalance()", "6a4b6aa5": "untrustedChildWithdraw()", +"6a4b86c9": "setLimitContracts(bool)", +"6a4b8883": "mint(address,string,uint8)", "6a4b8a3d": "BoxxToken()", "6a4b96d5": "PledgePayed(uint256)", "6a4c62ef": "getSecondUnionIds(bytes32)", "6a4d4bb8": "getInvestorPosition(uint256)", +"6a4de5d1": "getRemainingRatio(uint256)", +"6a4e2092": "changeCurveStrategy(address)", +"6a4e5e3f": "claim(uint256,address,uint256,uint256,address,bytes,address,bytes,address,uint256)", +"6a4e9268": "deprecated_getStakerAllLockedTokens(address)", +"6a4eddb8": "createBid(uint256,uint256,uint256,uint256,uint256,uint256)", +"6a4eeb3a": "updateRateAndModifyParameters(address,address,address,bytes32,uint256,uint256)", +"6a4f171e": "arbTradeX1UniswapV2Sushiswap(uint256,address,address,address,uint256)", "6a4f5495": "test_0_ensureServiceRegistryFunctions()", +"6a4f832b": "_safeMint(address,uint256,bytes)", "6a4f8f39": "RNGenerator()", "6a4fcddb": "Remyt()", +"6a5016be": "devAddress(address)", "6a502578": "totalSoldOnPresale()", +"6a506aa3": "cat5()", "6a50e3df": "PayWinners(address,address,address)", "6a514db7": "REOToken()", +"6a516451": "Test1(uint256,uint256)", "6a51b918": "cities(uint256)", +"6a51dc51": "getBestReservesRates(address,address[],uint256[])", +"6a520ea4": "safePepeTransfer(address,uint256)", "6a523c5e": "depositForUser(address)", +"6a5306a3": "REGISTER_TYPEHASH()", +"6a5362f6": "bidWithdrawalLockTime()", "6a5371b8": "nextTier()", "6a537e40": "getCollectiblePrice(uint256,uint256)", "6a5392d7": "generatedGze()", "6a53ab64": "undestroyable()", +"6a53b86e": "setSecurity(bool)", "6a53f98a": "pendingTxs(uint256)", +"6a540df0": "getReturnsForBonds(address,uint256)", "6a54293a": "internalOwnerOf(uint256)", +"6a545e11": "approve_80(address,uint256)", "6a54932c": "processTransaction(address,uint256)", +"6a554c72": "getStakedPoolBalanceByUser(string,address,address)", "6a561c11": "ownerResumeGame()", "6a561cb8": "testSender()", "6a5690f6": "ICO_GOAL()", "6a56947e": "transferVerify(address,address,address,uint256)", "6a56a48b": "_getRandomMineralId()", +"6a56b359": "marketplaces(address)", "6a570b98": "InGRedientToken()", +"6a5784ce": "drsCoin()", +"6a582146": "drunkPerBlock()", +"6a585ebf": "isFarmOpen()", "6a585fa3": "tokensPerWei20()", +"6a58901a": "LockTokens(uint256)", "6a596455": "getBatlordReq()", "6a59d0a4": "transferAndLockForever(address,uint256)", "6a59dc8c": "_unpackAgilityValue(uint256)", +"6a59e495": "resolverProxy()", "6a5a3625": "getTotalReqAmt(uint256[],uint256[])", "6a5b0151": "setGasForKWH(uint256)", +"6a5b061e": "setLiquidationPaths(address[],address[])", +"6a5b266d": "CHI()", "6a5b459c": "receivedWeiMin()", +"6a5b7a51": "dusd_pools(address)", +"6a5b8ed7": "setBaseQuota(uint256)", "6a5bbc1d": "withdrawToOwner(uint256)", +"6a5c16d9": "setDebasePercent(uint256)", "6a5c2cf2": "getTotalDividendsByAddress(address)", "6a5c44a9": "STTadmin1()", +"6a5c51b6": "testKyberV1ExpectedBuyRate(address,uint256)", +"6a5c7bf4": "g(bytes32)", "6a5cf2d0": "WifiBonusCoin()", +"6a5d5071": "clearRoyalties(uint256)", +"6a5d520f": "REIGAI06()", "6a5d7206": "doSafeSendWData(address,bytes,uint256)", "6a5da6e5": "followCampaign(uint256)", +"6a5dc8dd": "CHICAGOw()", "6a5e2650": "unlocked()", "6a5e4628": "externalFundDAO()", +"6a5ee55c": "__shake(uint256,bytes32)", +"6a5ef747": "checkCampaignGoal(uint256)", +"6a5f3d5e": "getNecessaryBalance(uint256)", "6a5fd362": "shitFund()", +"6a5fd644": "baseFactor()", +"6a608d8f": "setICOEndtime(uint256)", +"6a60ca02": "sellOnETH(bool,address,uint256,uint256,address,uint256)", +"6a61cbca": "accounting(address,address,uint256)", "6a61e5fc": "setTokenPrice(uint256)", +"6a61fd5c": "inCaseEmergencyWithdraw()", +"6a624aef": "claimableBalanceOfUsername(string)", "6a625bc8": "issueToMany(address[],uint256[])", "6a627842": "mint(address)", +"6a628a0d": "fee_collected()", "6a62936b": "PLUTUSTOKEN()", +"6a629671": "userAirdropRemainingTimes(address)", +"6a62b566": "createPackSticker()", "6a630559": "tokenLocked()", "6a630ee7": "__transferWithReference(address,uint256,string,address)", +"6a634023": "ROUND_3_TOKENSALE_RATE()", +"6a635a0c": "hardBsc(address)", "6a63606c": "set_tokens_total(uint256)", +"6a63700c": "customers_invests(address)", +"6a6394c6": "VestedTokensReleased(address)", "6a63d2f9": "getLastestRequestFundID()", "6a643ce6": "setBB(bytes32,bytes)", +"6a647607": "ManStamp(uint256,string,string)", "6a64790c": "toWholeShareUnit(uint256)", +"6a6496f5": "FIFTY_THOUAND_BLOCKS()", +"6a64eff8": "setTargetPrice(uint256)", +"6a652072": "allowAccessToUser(address)", +"6a66005a": "removeVersionFromWhitelist(uint8)", +"6a661755": "EXECUTION_EXPIRATION()", +"6a661eb5": "hasExecutableOrdersPending()", "6a666c86": "addressToPunkIndex()", "6a66a693": "beneficiaryContract()", +"6a66dc2b": "checkDaily()", +"6a6742dc": "pow(int256,uint256)", +"6a674e14": "stopBurningEmergency()", +"6a676ad5": "whitelistUserGettedBloc(address)", +"6a678a9c": "setLPToken(address)", "6a67acc5": "getAuctionData()", "6a67ec63": "minimum_buy_value()", +"6a681190": "grantMinterRights(address)", +"6a68c46c": "digital_signature(string)", +"6a68c481": "enterBid(uint256)", +"6a68ce1c": "activeGame(uint256,uint256)", "6a68d2d5": "nextGamePotSplit()", "6a69424b": "PaymentTimer()", +"6a6a37c3": "readtimeleft()", "6a6ae271": "assertPause()", +"6a6ae9f3": "requestLeftOverBCPFunds(uint256)", "6a6b8077": "StartICO()", "6a6ba5d7": "addressIsCrowdsale(address,address)", "6a6c526e": "AcceptsLYNIA(address)", +"6a6cc258": "deployed(bytes32)", +"6a6d05df": "readInternalDistributionSchedules(uint256)", "6a6d31db": "externalEnter()", +"6a6d964e": "poolBalance(uint256)", "6a6e79bb": "WithdrawPaymentForTest(address,uint256)", "6a6e88ba": "getBuyerInfoAt(uint256)", +"6a6ea92e": "PriceICO1()", "6a6f03a0": "returntrueifcurrentplayerwinsround()", +"6a6f66e6": "getClaimableFees(address)", +"6a6f7257": "getRealLengthArray()", +"6a704252": "totalSupplyHoldersAt(uint256)", "6a704d7b": "AddedToGeneration(address,uint256)", +"6a70d081": "_burnList(address)", +"6a710fd0": "open(uint256,address,address,uint256,address,uint256,uint256)", +"6a7142e1": "isMinterERC20(address)", "6a7149f6": "changeAgency(address)", +"6a718468": "changeAddr(address,address,address)", "6a71a584": "getFreeAllowance()", "6a71df43": "amountOfTokensPoolB()", +"6a723200": "shadowsReceivedForSynths(uint256)", "6a7245ef": "changeBurnBoundsOperation()", "6a7254a3": "specUWallet()", "6a7283ac": "buyTokenFromGame(address,address,address)", "6a7301b8": "setDestroyer(address)", +"6a7318f4": "CollectibleBidSuccess(address,uint256,uint256,bool)", +"6a731c74": "TilyToken()", +"6a734036": "changeTokensWallet(address)", "6a7360d8": "updateNav(uint256)", "6a7381bd": "TokensBought(address,uint256,uint256,uint256,uint256,uint256)", "6a739a9b": "getTokensUnlockedPercentage()", "6a739c44": "checkRegistrationStatus(address)", +"6a73c404": "maxBuyPerAddress()", "6a73de2c": "ZZZToken(uint256,string,uint8,string)", "6a745ce9": "PRESALE_ETH_RAISE()", "6a748ecf": "upLimit()", "6a749986": "issuePreferedTokens(uint256,uint256)", "6a749f6d": "indexshow2(address)", +"6a74c548": "loanBorrowers(uint256)", +"6a74e1fc": "LogServiceChanged(bytes32,uint256,uint256)", +"6a74f107": "canCompleteAward()", +"6a751447": "iterateValidTokens(uint256,uint256)", "6a751710": "transferTraderBalance(address,address)", "6a75f03d": "partnersAddress()", "6a75fac0": "pullBack(address)", +"6a760b80": "vest(uint256)", +"6a761202": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", "6a7625ca": "setRegionForSale(uint256,uint256,uint256)", +"6a76822e": "presaleEtherReceived()", "6a76c522": "totalContractMiniGame()", +"6a770435": "LogNokuConsumptionPlanCreated(address,address,address)", "6a7798ee": "EndAuction()", "6a77e17a": "initialSeedFarmingAdress()", "6a785191": "referralTokens(address,uint256)", +"6a786b07": "join(string)", "6a7882f2": "requiredGoldIncreaseFactor()", +"6a78e032": "isSplitted()", +"6a791f11": "submitHeaderBlock(bytes,bytes)", +"6a79b2b6": "latestCompletedAnswer()", +"6a79eb70": "setRuleId(uint256,bool)", +"6a7a313c": "test_simple(uint256)", +"6a7a4d8d": "_balancesOf(address)", "6a7a88aa": "isValidSignature(address,address,bytes)", +"6a7b0d8b": "leaveFarmPoolWithValue(uint256)", "6a7b28a2": "show_the_minimum__reward_period()", "6a7b988c": "votePopularity(bytes32)", +"6a7ba71e": "getClaimableLPToken()", "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)", +"6a7ce18d": "setRequiredSubmissions(uint256)", "6a7d1a7e": "getPlayersUnitTickets(address)", "6a7d3c1c": "FishbankChests(address)", "6a7d6b52": "updateOldOwnerProfit(uint256)", +"6a7d84a4": "requiredGas(uint256)", "6a7dabb9": "DEVCLASS_MAX_CARGO()", +"6a7e8e16": "LIMIT2()", "6a7eaf8f": "vestingRules()", +"6a7eed50": "fogRollingIn(uint256)", "6a7f0c69": "toTimestamp(uint256,uint256,uint256,uint256)", "6a7f42e4": "closeBetByCanceling(uint256)", +"6a7f63fa": "xconfig()", +"6a7fa6f7": "participatePool7()", "6a7fc8b7": "setDailyWithdrawLimit(uint128)", +"6a7fe54a": "get_prize_pool()", +"6a811e3b": "feeds(string)", "6a8141a1": "ParrotCoin()", +"6a815030": "redmeAddr()", "6a816548": "cancelOrder()", "6a81af17": "setConfigClass(uint32,uint8,uint8,uint8,uint32)", +"6a81d8bd": "controlledTokenProxyFactory()", "6a822760": "betB()", +"6a826709": "SurplusTokensRefunded(address,address,uint256)", "6a8269b4": "frozenList(address)", "6a8296d7": "_setPrizePoolAddress(address)", +"6a832c3c": "toad()", "6a833a6c": "addDelegateSigned(address,uint8,bytes32,bytes32,string,address,uint256)", +"6a833cc0": "getEntryCost(address)", "6a83662e": "getYESVotesByEntity(uint256)", "6a83b924": "btycownerof()", +"6a847981": "setPackContenthash(uint256,bytes)", +"6a84c991": "_validateSignedData(address,bytes32,uint8,bytes32,bytes32)", "6a84e143": "destroyUnsoldTokens()", +"6a857ed2": "mintFeeAddr()", +"6a8585ee": "updateWinnerBalance(address,uint256)", "6a85ac88": "answerCompare(uint256,bytes32)", "6a85d12e": "changeOuts(address)", "6a85e252": "ElementTransferred(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"6a860015": "JoinEsusu(uint256)", "6a868363": "CreatedVUP(address,uint256)", +"6a869381": "poolSupply()", "6a86a0f0": "DCCAdvancedToken(uint256,string,string)", +"6a86d7f1": "gooseToken()", "6a871e27": "airDropHeight()", +"6a877b5d": "checkMember(uint256,string)", "6a87f66d": "specialManagerOff(address)", "6a8896b6": "getPots()", +"6a88bcd7": "EtherSend(uint256)", +"6a8914d1": "minStakeBalance()", "6a893a8c": "stopWorkInternal()", "6a897999": "drainStack(bytes32,bytes32)", +"6a89934b": "proposedModules(bytes32)", "6a89a51e": "_delete_()", +"6a8a02c5": "totalCumulativeRewards()", +"6a8a3b96": "isPauser()", "6a8aa343": "m_maxTotalSupply()", +"6a8ab296": "setStakingListLimit(uint256)", "6a8ae136": "getContractBalance(address,address)", +"6a8ae915": "addNFT(address,string)", +"6a8b1448": "setHashTokenMineParam(address)", +"6a8b3ad2": "setRebaseOptions(bool,int256,uint256,int256,uint256,bool,uint256,uint256,uint256,uint8,uint256,uint256,uint256)", +"6a8b583d": "setEthCustomRateOff()", "6a8b9f7b": "BecomeSpiderQueen()", "6a8ba0fa": "createPromoPet(uint256,address,uint256,uint256,uint256,uint256)", "6a8be019": "cancelEscrow(uint256,uint256,address,uint256)", "6a8c2437": "totalRescues()", +"6a8c41e9": "transferToken(uint256,address,string)", +"6a8c4e39": "bidBTCPay(uint256,uint256,uint256)", "6a8c55b8": "_getSaleRound()", +"6a8c8171": "insuranceaddr()", +"6a8c996c": "LockRemove(address)", "6a8c9cce": "BITMUZE()", +"6a8ca691": "setStakingDuration(uint256)", "6a8cdb52": "setBondAddress(address)", "6a8d0bf4": "ReceiverChanged(uint256,address,address)", +"6a8d27fe": "delegatecallSetN5(address,uint256)", "6a8d3575": "UniversalToken(uint256,uint256,uint256)", +"6a8d62de": "Payout(address,uint256,uint256,uint256)", "6a8d7eb3": "isLSNFT()", "6a8d86db": "rawTransfer(address,address,uint256)", "6a8e8711": "max_bet()", "6a8ef2d3": "getMyShitClone()", "6a8f91ff": "createAccount(bytes32,bytes32,address,address)", +"6a906ca8": "BonusDayGetAt(address,uint256)", "6a907a78": "UserAddTicket(bytes5[])", "6a90ac63": "unlockWithdrawals(uint256)", +"6a90d179": "mintTokenList(uint256)", +"6a911ccf": "deregisterValidator()", "6a91205a": "rentLand(uint256,bool,uint256)", +"6a913c1c": "TokenDrop(address,uint256,string)", "6a91431e": "RefundableCrowdsale(uint256,uint256)", "6a914911": "getPlayerByBoard(bytes32,uint8)", +"6a9164df": "closeCancel(address,uint256)", +"6a91e7bc": "getInfo(address,uint256)", +"6a928e8f": "OPEN_ROLE()", "6a92a8b8": "UserAddressLoaded(bytes32,string)", +"6a92fc16": "showThisBallance()", "6a92fcf6": "paymentEnable()", "6a931aa8": "tokenVendor2()", "6a93316c": "getInvestorStatus(address)", +"6a93413d": "investInBTC(address,uint256,uint256,string,uint256)", "6a938567": "isValid(bytes32)", +"6a93a724": "changeHodlBoost(uint256)", +"6a93df11": "getPurchaseIds()", +"6a93e800": "SoftCapChanged(uint256)", "6a9412bd": "refundAvailable(address)", +"6a94216e": "initializeApprovedStaker(address)", +"6a942f7a": "launchLiquidityPool()", +"6a944435": "callOracleRandom()", +"6a953e09": "getEth(address)", +"6a954483": "revokeOffer()", +"6a954556": "distributeDivs()", "6a95dff4": "NOBSToken()", +"6a964451": "stakerMaxCommissionPer()", "6a96c63e": "getCreateUnicornFullPrice()", +"6a9705b4": "chainlinkCallback(bytes32,int256)", "6a98085a": "totalAmountToWhale()", "6a9812f9": "getPolicyByTaxCode(string,uint256)", "6a993130": "Ownables()", +"6a993e60": "LogTokenDistribution(uint256,uint256,bool,uint256)", +"6a99a304": "getInLine(string,address)", +"6a9a2e7c": "TransfersAllowed(address)", +"6a9acc2e": "callProxyMarket_getMarket()", "6a9b4daf": "Etros()", "6a9b515d": "TokenAuctionCreated(uint256,address,uint256)", +"6a9b80d4": "setPartnerApproval(address,bool)", "6a9ba3ce": "maxCapNotReached()", +"6a9c0757": "CRV2USDT(uint256)", +"6a9c2193": "setDevReward(uint256)", +"6a9c478b": "log(bool,address,bool,bool)", +"6a9c5acd": "MintTokens(uint256,address)", "6a9c97d6": "refundSender(address,uint256)", +"6a9ca2a0": "setPauseReward()", "6a9cd450": "upgradeKernel(address)", "6a9d02e9": "tokenFrozenSinceNotice()", "6a9d2afd": "playToWinTest(uint256)", "6a9d69a7": "rentalTotalTime()", "6a9d7629": "getOpenInterestInAttoEth()", +"6a9d86ea": "updateDividendLevelIncomePercentage(uint256)", "6a9db57a": "playerAmountOfBets(address)", "6a9dc9a8": "enrollUser(address)", +"6a9dd406": "getAssetsUnderManagement()", +"6a9e3402": "setLimitLevel(uint256)", "6a9e8480": "FinalLottery(address)", "6a9e8f27": "stockTransfer(address,uint256,uint256)", "6a9ecd21": "BidFailedEvent(address,uint256,string)", +"6a9f15c2": "StartLockup(uint256)", +"6a9f609b": "userProposalVoteStatus(address,uint256)", +"6a9f9f07": "availBal(address,uint8,uint8)", "6a9f9ff9": "isVisible(uint256)", +"6a9fb407": "inflationTokenAddressTokenAddress()", +"6aa00371": "collectionAddress()", "6aa084d7": "getBoardStatus(uint256)", +"6aa09363": "gameDetails(uint256)", "6aa0fd32": "performRebalance(bool,address,uint256,bool,uint256,uint256,address,bytes)", +"6aa0fe02": "runtimeBase()", +"6aa14a96": "submitClaim(uint256)", "6aa179d9": "_secondRoundLosersFight()", +"6aa181a6": "set_sETHContract(address)", +"6aa19a69": "getTownTokens(address)", +"6aa1e6d2": "buyHashRateWithHE3(uint256,address)", +"6aa1fd61": "setInitialCheckpoint(uint256)", +"6aa22091": "createVestingSchedules(address[],uint256[])", +"6aa26571": "latestRebaseTime()", "6aa3141f": "removeCustody(address,uint256)", "6aa31b1f": "starSell()", +"6aa384c1": "CSTPrice()", "6aa3bf8b": "finishBetFrom(address)", "6aa3e64d": "emptyTo(address)", +"6aa3ee11": "open(address,bytes32,address)", +"6aa45efc": "updateOracleUpdaterAddress(address)", +"6aa49dc5": "viewUserLevelExpiredMatrix2(address,uint256)", "6aa4b3cc": "calculateId(address,bytes32)", "6aa52288": "FisrtSupply(address,uint256)", +"6aa5332c": "decimalLength(uint256)", +"6aa5a286": "coverPrice()", "6aa5b37f": "maxBuyLimit()", "6aa5cdfa": "setLatestEdition(uint8)", +"6aa62930": "startWithdrawForGovernance(uint256)", "6aa633b6": "isEnabled()", "6aa66cd4": "targetDiscountValue10()", "6aa68a15": "phase2EndBlock()", +"6aa6fe56": "_finalized()", +"6aa7098c": "getPriorVotes(address,uint256,uint32,uint32)", "6aa737e0": "enableSellToken()", +"6aa86e5f": "encrypt(uint256,bytes32)", "6aa8e220": "WeaponRegistry()", "6aa96d7c": "Storychain()", "6aa9c59b": "_addMinions(uint32,uint8,uint64)", "6aa9c82b": "withdrawControl()", +"6aaa2c03": "uniLen()", +"6aaa6a86": "transferListeners(uint256)", +"6aaa7a53": "GirlAuctionCreated(address,uint256,uint256,uint256,uint256)", +"6aaa7bde": "eth2tkn()", "6aaaae68": "tokensForFoundersAndTeam()", "6aaab6f2": "updateTreasury(address,uint256)", "6aaacb3f": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", "6aab223d": "bonusMatchPayoutInPercent()", +"6aab68c3": "WEEK2()", "6aaba012": "ErrorGenerator()", "6aabd369": "verifyGame(uint256,bool)", +"6aabddee": "CONTRACT_BALANCE_STEP()", +"6aabe330": "ArbitrationReward(address,uint256,uint256)", "6aabe577": "getPuntos(uint256)", +"6aabe7ce": "WithdrawPayments(address,uint256)", +"6aac3462": "tier3(uint256,uint256)", +"6aac6530": "setAlpaOwner(address)", +"6aac7609": "tenPerRequest()", +"6aacbd58": "addliquidity_to_newpairBUSD(uint256)", +"6aacd1e4": "WithdrawStakeEvent(address,uint256)", +"6aacd506": "hashTimer(bytes32)", "6aad1a6b": "adminSetGasLimit(uint256)", "6aad70b6": "getAddTokenSignatures()", +"6aadbb64": "flashloan(address,bytes)", +"6aae7b26": "removeCountryRestriction(uint16)", "6aaee3f7": "biAdvance(uint32,uint64[2],uint64[2],int64[2],uint64)", "6aaf0a0d": "endRegisterTime()", +"6aaf69c6": "baseBreedingFee()", +"6aafa5e9": "batches(address,uint256)", "6aafb887": "getNewMaxProfit(uint256,uint256)", "6aafd194": "Fosha(uint256,uint256,uint256,uint256,uint256)", +"6ab00a38": "getStakersList()", "6ab03a7f": "OGPToken()", +"6ab0704c": "marketOfferExists(uint256)", "6ab09a5e": "listUsersBets()", +"6ab0a05d": "tokenOfferings()", +"6ab15071": "buyVoucher(uint256,uint256)", "6ab15436": "price(bool)", +"6ab206ab": "usdcToWBTC(uint256)", "6ab22536": "SMEToken(uint256,uint256,uint256,uint256)", "6ab28bc8": "lockedAmount()", +"6ab31839": "sendMoney(uint256)", +"6ab34a4a": "orderInfo(uint256)", "6ab368f8": "Burned(address,address,uint256)", "6ab3846b": "updateEndTime(uint256)", "6ab3c5bd": "KING_WIN_MULTIPLE_PER()", +"6ab44cd3": "mIdToIndex(uint16)", "6ab4936d": "presaleFail()", +"6ab4f921": "borrowerReturnDays()", "6ab5bcd0": "withdrawedTokens()", +"6ab5cc38": "isWhiteListedTransfer(address,address)", +"6ab63e80": "rate(uint256,uint256,uint256,uint256)", +"6ab6802b": "canChallenge(uint256)", +"6ab6a491": "freeGem(address,address,uint256,uint256)", +"6ab6fb39": "setEstDepositePoolAddress(address)", "6ab71276": "getOwners(address,uint256)", "6ab76510": "bulkTransferFrom(uint32[],address,address[],uint256[])", "6ab872f0": "setMaxBetThresholdPct(uint256)", @@ -61161,22 +111920,44 @@ "6ab9eb45": "getItemAllowancePrice(uint256,address,address)", "6aba2a0d": "donatorBonus(uint256)", "6aba899b": "refundStartTime()", +"6abaaab6": "viewDividendsAvailable(uint256,address)", +"6abab3e6": "interactModule(address,bytes)", "6abac115": "getActiveState()", "6abacfa4": "etherMasterWallet()", "6abb4a50": "getPartner()", "6abb51a5": "_completeTask(uint256,uint256)", +"6abb5976": "withdrawForDay(uint256)", +"6abbab1d": "getWeiTo1UsdPrice()", "6abc3fe4": "directMintAgent()", +"6abcd3de": "borrow(address,uint256,uint256,uint256,uint256)", +"6abcf69a": "checkValidLevel(uint8)", +"6abd07f9": "setBasicData(uint128,uint128[6],uint128[10],uint128[8],address,address,uint256)", +"6abd0f7d": "proofOfPersonhood(uint256,address)", "6abd3b88": "getWins(uint256,uint256,uint256)", +"6abddcbf": "changeMinTrade(uint256)", +"6abe0d23": "setExchangePortalAddress(address)", +"6abed53f": "swapSourceAddress2()", "6abf31eb": "confirmTransaction(address,uint256,uint256)", +"6abf7081": "blockAccounts(address[])", "6abfbf6f": "allowTokenContract(address)", +"6abfc022": "getPoolPendingUnstake(uint256)", +"6abfd183": "stakingStartTime()", +"6ac048df": "lockerIndex()", +"6ac05b43": "lastSetPriceTimestamp(address)", "6ac084fe": "OrderFilled(address,uint256)", "6ac0bf9c": "transferableSynthetix(address)", "6ac0fe25": "BUYER_STEP_5_CANCEL(bytes32)", +"6ac11f35": "myxReceived()", +"6ac22d15": "getActiveClaims()", +"6ac2584c": "confirmTermination(bytes32,uint256,uint256,uint256,bytes,uint256,bytes)", "6ac26d3d": "executeAddMemberProposal(uint256)", "6ac290e7": "getFirstReferrer()", "6ac29bcc": "FBR()", +"6ac2ffc8": "TokenUnfrozen(address,uint256)", "6ac36029": "get_invester_length()", "6ac3a100": "HLCN()", +"6ac3feee": "fortube_reward()", +"6ac4691f": "getIncrement()", "6ac47db5": "CloudbricSale(address,address)", "6ac4d582": "registrants(uint256)", "6ac4d97c": "createInitialCards(uint32,uint16,uint16)", @@ -61190,64 +111971,120 @@ "6ac5db19": "max()", "6ac6016f": "pepFarm(address,address,address,address,uint256)", "6ac6205c": "addDataPoint(int256,uint256,bool,string)", +"6ac6644c": "TokenTransfer(address,address,uint256,uint256,uint256)", "6ac68f7f": "getBestBidder(uint256)", +"6ac69a8e": "getAmount0ForLiquidity(uint160,uint160,uint128)", +"6ac70b03": "withdrawAndRepay_Eth(uint256,uint256,uint256)", "6ac777d3": "EEFucksToken()", "6ac878f3": "multiTransferDecimals(address[],uint256[])", +"6ac88367": "acceptAsGovernance()", "6ac96df8": "removeAddressesFromRole(address[],string)", "6ac98840": "SGCC()", +"6aca22bf": "purchasedSilverDollar(uint256)", +"6acaee63": "wearableTypeMintCount(uint32)", +"6acaf860": "updatePair()", +"6acb436f": "setBrrrAddress(address)", +"6acc25be": "tranche_A_multiplier()", +"6accc8cf": "lastVote(address)", +"6acd4f55": "setMint(address)", "6acd58d4": "arrayIndexOf(address[],address,address)", "6acd89f6": "Testerr()", "6acd8e4a": "getAddedTime(uint256,uint256)", +"6acda700": "setBegin(uint256,uint256,uint256,uint256)", "6acdf42b": "arrayOfNonTrivialAccounts(uint256)", +"6ace354c": "oracleQueryString()", "6ace6dc8": "setApprovedBuyer(address,address,bool)", +"6ace7c9b": "emergencyWithdraw1(uint256)", "6ace7d87": "getLastCandidates()", +"6acf082c": "UnBlockAddress(address)", +"6acf456f": "openingTimePhase2()", "6acf5cb3": "isUserKYCVerified(address)", "6acfb852": "ZiggleToken()", +"6acfc074": "chosenProviders(address)", "6ad001a5": "metalworksCities(uint256)", +"6ad01552": "uniDeusEthUni(uint256,address[],address[],uint256)", "6ad03feb": "GBTAddress()", +"6ad07c06": "NEX_DECIMALS()", "6ad0d6ce": "_startNewRound(address)", "6ad1246e": "content(string,uint256,uint256,address,uint256,uint256)", "6ad1a6d5": "PauseTradable()", "6ad1fe02": "sale()", "6ad26611": "removeFee(address)", "6ad2a0b3": "buildContract(address)", +"6ad2cd78": "getuserICOBonus(address)", +"6ad2fb77": "stakedTimes(address)", "6ad34a7a": "BAILSToken(uint256)", "6ad34dab": "getstartBlockNumber()", "6ad35d1a": "CMO()", "6ad38e61": "transmit(address,address,uint256)", +"6ad3e4b5": "inputpass()", "6ad3f723": "getContentAddress()", "6ad43a54": "setRateICO(uint256)", "6ad44174": "getVolumebasedBonusRate(uint256)", +"6ad453db": "countBallots()", "6ad49245": "FundingManagerEntity()", +"6ad4df9e": "getOrderBookByPair(address,address,uint256)", +"6ad4e251": "over(uint256)", +"6ad4f5f9": "Operater()", "6ad50ed4": "investmentEntryInfos()", +"6ad5a9cf": "handleDelegationAdd(uint256,uint256)", "6ad5b3ea": "walletAddress()", +"6ad60892": "zReward()", "6ad60e3d": "BubbleToneToken(address)", +"6ad68826": "getOwnerBlock(address)", "6ad6d45b": "setLister(address)", +"6ad72e5f": "testCalculateNeededCollateralShort()", "6ad7541c": "Kokos()", "6ad7aeb5": "BitsumCash()", "6ad80326": "walletFounder3()", +"6ad88269": "calculateBurnFee(uint256)", "6ad95317": "batchInvests(address[],uint256[])", "6ad95843": "icoUnitPrice()", +"6ada58dc": "balanceOfHBTCinIiquidity()", +"6ada7847": "getDepositEnabled()", "6ada94e0": "setDataInt(string,string)", "6adacb48": "priceStep4()", +"6adafab5": "_lastUpdateTime()", +"6adafbbb": "internal_update(string,string,string,uint64)", +"6adb9854": "gg32(int32)", +"6adbf1fe": "newDataset(uint256,uint256)", +"6adc136e": "updateBerry(uint256)", "6adc674e": "WaltixToken()", +"6adcc712": "SelfDestructTerminated()", "6adcef6b": "payDividends(uint256)", +"6add9524": "loadProxyOwner()", "6addb663": "tokenInfo()", "6addc649": "weekBonuses(uint8)", "6addf029": "setReferralRequirement(uint256)", +"6ade150d": "setsides(uint256)", "6ade6cea": "currentstageplayer2()", "6ade8aa2": "emptyWallet(address)", "6ade9bd1": "tokensFortorch()", +"6adf0c27": "crowdSaleRoundOneLimit()", "6adf3279": "leekStealOn_()", +"6adfa082": "getTeamRunHalf()", +"6adffd5c": "NewMinter(address)", "6ae00c4f": "ShareRoomDATA(address,string)", "6ae0646a": "_computeRollFee(uint256)", +"6ae0b154": "removeRouter(address)", +"6ae0e383": "NewSMTXModel(address)", +"6ae0efdc": "switchDex()", +"6ae14416": "getReserveInterestRateStrategyAddress(address)", +"6ae146c2": "teamClaim()", "6ae17283": "MinterAdded(address)", "6ae1a976": "numAffirmationsSigned(bytes32)", +"6ae21510": "compoundAllRewards()", "6ae22740": "reward7()", "6ae38577": "accPreICO()", +"6ae39f8c": "users_8(address)", "6ae413ab": "updateWebappAddress(address,address)", +"6ae43c0e": "UnstakeOBELIX(uint256)", "6ae459bd": "bulkMint(address[],uint256[])", +"6ae46547": "getGweiPerToken()", +"6ae4b4f7": "FEATURE_NAME()", "6ae4feed": "subtract(address,address,uint256)", +"6ae51ffe": "registerNameXName(string,string)", +"6ae613b6": "getWarIndex()", "6ae6151e": "acceptOffer(bytes32,address,uint256)", "6ae6921f": "_addPayee(address,uint256)", "6ae6b459": "setLockup(uint256)", @@ -61257,45 +112094,75 @@ "6ae85e0d": "isAddressNotVoted(address,address)", "6ae8f49a": "WebCoin()", "6ae8fefa": "NetareumToken()", +"6ae90765": "coinRate(uint16)", +"6ae924e7": "createStreamFromBonding(address,uint256,uint256)", +"6ae93635": "updateICOVars(uint8,uint256,uint256)", "6ae9eea8": "s39(bytes1)", +"6aea2be5": "getMaxPenalty(address)", +"6aea3abd": "NewCity(uint256,string,uint256,uint16)", "6aea5f1b": "current_supply()", "6aea6cce": "breakCompleteness(uint256,uint256,address)", +"6aea7bf7": "setAddressTax(address,bool)", +"6aeaec99": "pendingDfi(uint256,address)", "6aeaef97": "inheritedView()", "6aeb1ce7": "m_paymentChannels(uint256)", "6aebbbd9": "subUIntValue(bytes32,uint256)", "6aebc603": "Villj()", "6aebff5d": "lccxTeamAddress()", "6aec47b4": "getBalancesAgent(uint256)", +"6aec594b": "feedETHUSD()", "6aec82b3": "setSalesPipe(address)", "6aec95cc": "registerBalanceForReference(address)", "6aedc282": "MarriageContract(address,address,uint256,string)", "6aede5cd": "globalTimeVault()", +"6aedea73": "totalLpSupply()", "6aedf1d1": "SupportAdded(address)", +"6aee3918": "chainsLabel(bytes32)", "6aeeec7f": "_setStakingEpochDuration(uint256)", +"6aef90f0": "__createSharesFor(address)", "6aefef17": "test01CrowdsaleInit()", "6af04a57": "newContractAddress()", +"6af15505": "valueA()", "6af1898a": "refundErc20(address,address)", "6af1fdf7": "delegateTokens(address,uint96)", "6af2da2f": "testKeyedHash()", +"6af2ef7d": "setLim1(uint256)", +"6af3356b": "fixSaveTime(uint256)", +"6af33615": "SubmitTicket(bytes32,uint256,bytes32,address)", +"6af411cd": "activationCount()", "6af41534": "withholdToken()", "6af422fc": "RSPLT_H()", +"6af43470": "UpgradeToLevel3FromLevel2()", +"6af43ab6": "periodsList(uint256)", +"6af4f866": "bandOracleMapKeys(uint256)", "6af53f2f": "MaPToken2()", +"6af569f4": "BUYREASON()", "6af58d83": "getMin(uint256)", +"6af592f0": "setReceiverB(address)", "6af630d1": "DARKNODE_FEES_DENOMINATOR()", "6af6b06f": "setNextLotteryTTMTokenId9(uint64)", "6af6e64a": "VendorRegistry(address)", "6af78ab1": "startWeekFour()", "6af79112": "priceInWei(uint256)", +"6af7d13b": "totalSpecial()", "6af7dbbe": "sendPriceRequestToOracle(bytes16,uint256)", +"6af7f74e": "BIOX()", "6af81d6f": "_mintCategory(string)", "6af91799": "totalTokenSaled()", +"6af94adc": "idToNounce(uint256)", +"6af97991": "KamiAccount()", +"6af9d726": "BetMatch(address,uint256,uint256,uint256)", "6afa0381": "minInvestmentLimit()", +"6afa77c2": "ENCORE_Total_LP_Supply()", "6afa7b80": "toETH()", "6afb434f": "getPreIcoInvestment(address)", "6afb92a1": "MeepCoin()", "6afbd04f": "Mintable()", +"6afbde91": "_swapRatio1()", "6afc3474": "saleRoundsSet()", "6afd767f": "addParticipant(address,bool)", +"6afd99e5": "liquidityGenerationHasStarted()", +"6afe0cbc": "changeFundingInterval(uint256)", "6afe74c9": "test_oneValidEmptyAddress()", "6afeada3": "finishBountyAt()", "6afef23f": "submitPoliceReport(address,address,uint256,bytes,bool)", @@ -61304,13 +112171,21 @@ "6affe07b": "CirclesTokenOffering(address,uint256,uint256,uint256,uint256,uint256,address)", "6b0028b9": "initialSupplyInFrac()", "6b007e4f": "logMarketFinalizedCalled()", +"6b00bc0a": "Live(uint256)", +"6b013be2": "setProduce()", "6b015897": "minimumRewardWithdrawalLimit()", "6b01acf5": "counterToTokens(uint256)", "6b0235a0": "tla()", +"6b024330": "cUBIAuthToken()", +"6b0243bc": "setWithdrawalProtectionFee(uint256)", +"6b03757f": "addPrize(address[],uint256[])", "6b038742": "Archetypal()", "6b03ed5f": "clearClaim()", "6b041da2": "SEVENTNET()", "6b04f110": "mint_for(address,uint256)", +"6b0509b1": "CLAIM_TYPEHASH()", +"6b0523a2": "LP_Binding_Rate_Numerator()", +"6b053894": "Reward(address,address,uint256)", "6b061d7a": "changeRestarTime(uint32)", "6b06548c": "EarlyInvestorsTokensHolder(address,address,address)", "6b068e01": "collectWorks(bytes32,bytes32)", @@ -61319,111 +112194,193 @@ "6b06c3d4": "ActivateEscrow(uint256,uint256,uint256,uint256,address)", "6b06ea88": "ElementToken(uint256,string,string)", "6b06f908": "buyToken(string,address,uint256)", +"6b0701d1": "getRedButton()", +"6b073c25": "lambertPos1(uint256)", "6b074a07": "isProvider(address)", "6b08a833": "EDUTURN()", "6b08f2ef": "convertForPrioritized2(address[],uint256,uint256,address,uint256,uint8,bytes32,bytes32)", "6b091695": "getReward(address,address)", +"6b091897": "BonusChanged(uint256,uint256)", "6b095ca1": "apply(uint256,uint256,bytes32,bytes)", "6b097cd0": "KKOGToken()", +"6b0b99a2": "getLastestLocation(address)", "6b0bfc80": "feedAndMultiply(uint256,uint256,string)", +"6b0c341b": "rewardSupply()", "6b0c537b": "generateRequestId()", "6b0c932d": "lastDay()", "6b0c9d6a": "distributeA()", "6b0cba9c": "getUniqHash()", "6b0cc513": "_DifficultyCalulate(uint16,uint16)", "6b0d0329": "getTicketInfo(uint256,uint256)", +"6b0d3a12": "depositTotal(address)", +"6b0dce5a": "PonziPriceChanged(address,uint256)", "6b0dd90f": "getVote(address,uint256)", "6b0dfb76": "getLandDefender(uint8,uint32)", "6b0ead6a": "iudexIdToString(bytes32)", "6b0f02e6": "firstExchangeRate()", +"6b0f0aac": "_encode_sol_bytes29(bytes29,uint256,bytes)", "6b0f182e": "changeCofounderA(address)", +"6b0f1c81": "balanceOfToken()", +"6b0f2988": "DEVTEAM()", "6b0f65d7": "indSeedDeposit()", +"6b1056ae": "chief(address)", +"6b10649f": "aRobCap()", "6b1092f2": "ADV_BTY_SUPPLY()", +"6b10e567": "AdvisorTokensSent(address,uint256,uint256)", +"6b118aa8": "wayfarerTimeBetweenIncrease()", +"6b11b20d": "vote1(address,address)", "6b11c87a": "RealEstateCryptoFundBounty(address)", "6b11dabd": "MTYToken()", +"6b1278e8": "getUserIdLockup(address,uint256)", "6b128b2f": "upgradeFinance(address)", "6b12a7bf": "buyRealm(uint256,uint256,uint256)", +"6b131e06": "startPreparation()", +"6b13518d": "pool3Amount()", +"6b13d0b9": "Hold(address,uint256)", "6b13fabf": "SampleToken()", "6b140854": "totalWinValue()", "6b1426a4": "getWinners(uint256)", +"6b143bb8": "timelock(address)", +"6b1477f4": "refLed(address)", "6b149aac": "Cryptassist()", +"6b14c824": "PynthetixProxy()", +"6b14daf8": "hasAccess(address,bytes)", +"6b14db5f": "__getDecimalsForAsset(address)", "6b14dfe1": "SPEED_STAT_MAX()", "6b14ea36": "ASK_STAKE_RATIO()", "6b153322": "activateCampaign(string,uint256)", "6b15c47c": "tokenCalculate(uint256,uint256)", +"6b163875": "onlyConfigGovernorFn()", +"6b163fdb": "approve_517(address,uint256)", +"6b16deef": "EndSession(address,uint256,uint256,uint256[10],uint256)", "6b1781b6": "Emergency()", "6b17864f": "CommunityPool(address,address)", "6b1786bb": "cVideoCost()", "6b178b90": "NBACoin()", "6b178f47": "poolIssue()", +"6b180d69": "setAllTransfersLockStatus(bool)", +"6b18e4e8": "putEmptyAccount(address)", "6b190ee1": "MemeNetworkToken(address,uint256)", +"6b190f70": "strAdd(string,string,string)", "6b194a4a": "ALLOCATION_LOCK_END_TIMESTAMP()", "6b1970ab": "TheCoin()", "6b199471": "updateMasks(uint256,uint256,uint256)", +"6b19ad16": "maxDebtRate()", +"6b19ae08": "randomizerDAIContract()", "6b19e692": "getPaymentSupply()", "6b1ac900": "setPXLPropertyContract(address)", "6b1af75e": "sendReward(address,address,uint256)", +"6b1afd3d": "getParams2(uint256)", "6b1b3997": "ChronoDragonPowerCoin()", "6b1b68ad": "URMBToken(uint256,string,string,address)", +"6b1b68f4": "createWrapper(uint16,uint8)", +"6b1b863a": "award(address,uint256,address)", +"6b1bd1c5": "MIGRATION_LOCK_PERIOD()", "6b1bfd33": "setFundAccount(address)", +"6b1c63dd": "UpdateMaxFees(uint256)", "6b1c86fe": "sendBreakup(address)", "6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "6b1d4db7": "ethToTokenSwapOutput(uint256,uint256)", "6b1da364": "getWinnerInfo(uint256)", +"6b1dd7fd": "vybe()", "6b1e0420": "blockPendingTx(uint256)", +"6b1e4f21": "variableMemoryFor()", "6b1e564a": "challengeWinningOutcome(bytes32,uint16)", +"6b1e8989": "getTotalStakingBalance()", "6b1f513b": "makeDailyInvest(uint256)", "6b1f78c8": "joinSqr(uint256)", "6b1fbfdb": "sendWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"6b1fe0b6": "getTotalInvestor()", +"6b1feeca": "getEnabledConnectors()", "6b1feeeb": "get_my_sig()", +"6b20c454": "burnBatch(address,uint256[],uint256[])", +"6b20d03c": "REBASE_DELAY()", +"6b2113cd": "pull(address,address,uint128)", "6b212960": "offer(address,uint256)", "6b2148c2": "Deluxo()", "6b21a636": "startDisbursement()", +"6b21af9c": "auctionItemInfo(uint256)", +"6b220725": "sakeMaker()", +"6b221d14": "setLock(address,address,uint256)", "6b227a8f": "OrderApprovedPartTwo(bytes32,bytes,address,bytes,address,uint256,uint256,uint256,uint256,uint256,bool)", +"6b231938": "openLoan()", "6b2327d2": "previewStageEndTime()", "6b2351aa": "lockWithAfter(address,uint256,uint256)", "6b235bdc": "ChangeBeneficiary(address)", "6b236730": "solveChallenge(bytes32)", +"6b23bac1": "totalPurchasedBusd()", +"6b241fa8": "deposit(address,address,uint256,uint256,uint256,uint256,uint256)", +"6b24b8b2": "withdrawEthDust()", "6b24d827": "WalletHolder()", "6b252b47": "advisorsWallet()", +"6b2551a6": "brewToken()", "6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", "6b259690": "feesPool()", +"6b25a150": "redeemCost(uint256)", +"6b25d06c": "userWithDrawPro()", +"6b26060b": "LIQUIDITY_HCORE()", "6b263efa": "multiOwnableCreator()", +"6b26f0f9": "roundLengthInSeconds()", "6b270056": "Corporation()", "6b27909d": "getStopLockTime()", +"6b27a044": "triggerExodusIfNeeded()", "6b27be9f": "mayorcoin()", "6b281b64": "totalBalanceUp()", +"6b288d20": "isAllowedDeployer(address)", +"6b28a9ea": "UnfreezeTransfer()", "6b28d7a2": "blockTransfer()", "6b28f834": "getPeggedTokenCount(address,address)", "6b298df0": "disbursements(address)", +"6b29dcff": "confirmWinnerUnchallenged(uint256)", "6b2a2691": "winBrickReturn()", +"6b2a3412": "dailyWithdrawalRequest(uint256)", "6b2a77ed": "End5()", "6b2a86be": "dropToken(address[])", "6b2accac": "toDRP(uint256)", +"6b2ace87": "bentoBox()", "6b2ae2ab": "Notify_String(string,string)", +"6b2aee1a": "rewardCollectorFee()", +"6b2b6507": "setIlkAutoLineDebtCeiling(address,bytes32,uint256)", +"6b2ba269": "unLockToken(uint256)", "6b2bb92a": "finishTournament()", +"6b2bf27f": "updateOwnership(address)", "6b2c0f55": "removePauser(address)", "6b2c116c": "AmateurPlatinumToken()", +"6b2c46d5": "doesGroupExist(uint256)", +"6b2ccee5": "buyGlyph(uint256)", "6b2cd752": "getGpgKey()", "6b2ce4ce": "stakeForDuration(address,uint256,uint256,bytes)", "6b2ce7f1": "togglePresale(bool)", +"6b2cf9d7": "transactions_limit()", "6b2d95d4": "getLockedTokens(address)", "6b2e36b0": "canUpdateAmountToTakeAsRake()", +"6b2ea506": "getHistoryBalance(string)", "6b2ec90f": "_vestedDown(uint256,uint256,uint256,uint256)", "6b2ed1c0": "sellFci(address,uint256)", +"6b2eeff1": "changePayoutDenomination(uint256)", "6b2f4632": "totalEthereumBalance()", +"6b2f60c8": "getLevelUpFee()", "6b2f65b0": "isArtist(address)", "6b2f68f5": "assertEq22(bytes22,bytes22)", "6b2f73c2": "preICOLedger()", +"6b2f9da3": "products_price(uint256)", +"6b2fa374": "currencyToken()", "6b2fa6cc": "lastBlock_v7Hash_uint256()", "6b2fafa9": "getHash(uint256)", "6b2fd0e7": "catGenes(uint256)", +"6b300f51": "fromInt(int256)", "6b3032c6": "getSingleGuessInfo(uint256)", +"6b305808": "getFreezingInfo(address)", +"6b30611f": "updateChainRequest(uint256,uint256)", "6b308ee7": "subTourFreezingPrice()", +"6b309696": "isDharmaSmartWallet(address,address)", "6b30f243": "VCChainToken()", "6b318270": "addFile(bytes32)", "6b319f36": "tokenUnfreezeTime()", "6b31ee01": "jackpot()", +"6b3212f7": "RoadForSale(uint256,uint256,uint8,address,uint256)", +"6b3222e6": "getGlobalParams()", +"6b32810b": "getMinters()", "6b32bb25": "containsValue(address,uint256,string,uint8[])", "6b32c591": "userClaimAmt()", "6b334e49": "senderCheck(address,address)", @@ -61432,30 +112389,49 @@ "6b33e45d": "setWithdrawTo(address)", "6b3416b5": "transfer(uint256,uint256,uint256,uint256,uint256,uint256)", "6b342eb8": "_minimumBuy()", +"6b343d66": "_originalAddress(address)", +"6b34b18d": "setMemberRewardsOverInterval(bytes32,uint256,uint256,uint256,uint256)", "6b3559e1": "mintAndSetData(address,uint256)", "6b3578f2": "paymentEnabled()", "6b35bed2": "addAirdropParticipants(address[])", "6b35f7c1": "deleted()", "6b36028e": "setReferenceType(bytes32,string)", "6b361c80": "TokenPriceUpdated(uint256)", +"6b363836": "LogReportSubmissionError_InvalidState(uint256,address,uint8)", "6b36a76e": "MIPCoin()", +"6b3837c4": "takeSell(uint256,uint256,string)", "6b3868db": "getMemberByIdx(uint256)", +"6b386db3": "BiometricApprovalRequest(address,address,uint256,bytes32)", "6b3905c4": "getNextVestingTime(address)", "6b392680": "setFeeAmount(uint256)", +"6b39d1fc": "revokeice(uint256)", +"6b3a0984": "decrementTotalDeposited(uint256)", +"6b3a2845": "viewDetails(uint256,uint256)", "6b3a87d2": "WatchWinningPot()", "6b3a8e90": "tournamentJackpot()", "6b3ac430": "crowdsaleLive()", "6b3ad4f8": "setColorWhite()", "6b3b1d17": "tHasBeenPenalized(uint256,address)", "6b3b261c": "addSpaceshipMoney(uint256)", +"6b3b2800": "BuyGenesisLevel1FromNormal(address)", +"6b3b2cf9": "isDepot(address)", +"6b3b5c52": "referralRateBase()", +"6b3bb283": "swapAnyERC20WithYFOX(uint256,uint256,address[],address,uint256)", +"6b3bc244": "approveMint(bytes32,string,uint256,address,string)", "6b3bc4b6": "ovcPerEther()", +"6b3bcc60": "getProtocolAddress(bytes32)", +"6b3bd90d": "getLastfusion()", +"6b3bd9cc": "collectCommitments()", +"6b3c4a3e": "GWTB()", "6b3c9757": "advisorSecondLockTime()", "6b3ce49b": "getRoomBalance(uint256,uint256)", "6b3cedd6": "mintTokensForCrowdsaleParticipants(address[],uint256[])", +"6b3d5f34": "reportPlayer1(bytes32)", "6b3d998c": "Apputoken()", "6b3e2f97": "updateDiamond(string,string,string,string,string,uint256,uint256,string)", "6b3e8ca0": "setPrePresaleTokens(uint256)", "6b3ec0ac": "vestingExists(address)", +"6b3f1307": "approveBind(address,string)", "6b3f5f84": "OwnerReclaim(address,uint256)", "6b3f94ab": "GoldMintToken()", "6b3fb674": "noHash()", @@ -61464,139 +112440,269 @@ "6b3ffb91": "changevanity(string,address)", "6b404955": "depositDelta()", "6b407837": "sellerRequestCancel(bytes16,address,address,uint256,uint16)", +"6b409635": "totalPowerBalance()", "6b4097b2": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "6b40bba1": "requiredPeriodSeconds()", +"6b40cd40": "getEstimatedMarginDetails(uint256,uint256,uint256,address)", +"6b4158df": "signedInvestmentAgreementUrl()", +"6b4169c3": "getGlobalStats()", +"6b419bf7": "rewardFinishTime()", +"6b41ed6e": "pendingCombust(uint256,address)", "6b424d47": "h2g2()", +"6b424e2d": "createContract(address,address,uint256,uint256)", "6b425093": "sortTopPosts()", "6b433ccf": "_totalLandholderTax(uint256)", +"6b438fae": "mount(address,address,uint256[],uint256)", "6b440e9a": "finalAllocation()", +"6b441a40": "commit_transfer_ownership(address)", "6b441abc": "VIRTUALTALK()", +"6b44374d": "personList(uint256)", +"6b44c459": "get_underlying_exchange_rate()", +"6b44efd3": "addManagers(address)", +"6b44fa01": "EscapeHatchBlackistedToken(address)", +"6b453c1f": "addMaintainer(address)", "6b453fac": "hardWeiCap()", "6b454d4c": "next_item_index()", +"6b459949": "depositsByUser(address,uint256)", "6b45adf3": "cellsOf(address)", +"6b45b3e6": "_getEntry(uint256)", +"6b45b4e3": "getSignatures(bytes)", "6b45c9f2": "getPiece(uint256)", +"6b45ebcb": "challengers(uint256)", "6b462936": "transferQueue(address[],uint256[])", "6b4660f8": "getStockLength()", "6b46c8c3": "payoutAmount()", +"6b4751f5": "freeProposalDays()", "6b475df7": "release6m()", +"6b47e3f1": "safeSubtractShouldRevertUsingTryCatch()", +"6b47ffd7": "frozenUntil()", "6b486818": "hashFirst()", "6b489028": "DEVCLASS()", +"6b48aa2e": "colorIndexToApproved(uint256)", +"6b49368b": "SubmitIsses(address,uint256)", +"6b49f05b": "getOfferOwner(uint256)", "6b4a6ded": "TOKENS_PER_ETHER()", "6b4a8b78": "token_allowance(address,address)", "6b4b1f3a": "stringToAddress(string,address)", "6b4b63fa": "Bank_With_Interest()", +"6b4b6d0b": "getUserNumOfDeposits(address)", +"6b4bc3e4": "deployedDeal(uint256)", +"6b4bccb2": "getNum2()", +"6b4bd710": "swp()", +"6b4be2dd": "RemoveOperator(address)", "6b4bfeae": "checkClaimExpiry()", "6b4c0789": "freezeContract(bool)", "6b4c5856": "WyeContract()", "6b4ca2a8": "getMatchData()", +"6b4cad8d": "SWAP_2(uint256,uint256)", +"6b4cfc37": "distributeEthShares()", "6b4dd158": "getPrice(bytes)", "6b4dff1f": "validateGasPrice(uint256)", "6b4e243d": "callOperator(address,address,address,uint256,bytes,bytes,bool)", +"6b4e25d4": "voidWithdrawList(address)", "6b4e8bb0": "lastInflationUpdate()", "6b4ed21b": "holdersCount()", +"6b4f247c": "calculateBurn(address)", +"6b4f42e8": "priceHighest()", "6b4f518a": "preICOTokenReward()", +"6b4f54eb": "updateTokenWithdrawFee(address[],uint120[])", "6b4f6865": "unlockForWork(address,address,uint256)", +"6b4fa342": "calculateExitBlock(address)", "6b50b6b3": "_multiSigWallet()", "6b512327": "_deleteIPFSHash(bytes32)", "6b516ef0": "_handleDeposit(address)", +"6b51800d": "getStakeLength(address)", +"6b51e919": "getActiveNodes()", "6b523b68": "periodCrowdsale()", +"6b5289cc": "addmapperson(string,string)", "6b52a071": "SALE_FUNDS_ADDR()", +"6b52a32f": "renatus(uint256)", "6b52a86f": "DesTokenSale(address,address)", +"6b52ba17": "eraTotalStakedAmount(uint256)", +"6b533057": "totalSalaryBunny(uint32)", +"6b53509a": "startThirdPhaseBlock()", "6b5396dc": "batchPresaleVesting(address[],uint256[],uint256[],uint256[],uint256[],uint256[])", "6b5424b3": "HACHIKO()", +"6b547034": "totalDepositedCOREAndNotWithdrawed(address)", "6b54821f": "setupAuthentication(address,bool)", +"6b54acd9": "unlockLiquidity()", "6b550dd3": "setAgriChainDocuments(address)", "6b55264d": "setRegionName(uint16,string)", +"6b556ce3": "oneTokenCount()", "6b55ddd0": "getJobEmployerName(uint256)", "6b55e991": "transferEther(address)", +"6b563205": "_forLaterProgressAddress()", "6b56476b": "removePost(address,address)", "6b5648f5": "enabledMint()", "6b565345": "CANAToken()", +"6b56a8ce": "getMyNextOrderById(address,int256)", +"6b5718f9": "Disown(bytes20)", "6b57825c": "getCurrentUserTotalPromoBonus()", +"6b5788f7": "CrowdsaleChanged(address)", +"6b57aadc": "approve_780(address,uint256)", "6b57cb34": "lockedStagesNum(address)", +"6b580a2b": "_seller(address)", "6b584b10": "testFreeSpace()", "6b588775": "rateOfSpecificTier(uint256)", "6b58b2bc": "calculateInternalTokensAmount(uint256,uint256,uint256)", +"6b58cec2": "createTokenFromCard(uint256,uint256,uint256)", +"6b58f2f6": "isPoolLocked(uint256)", "6b590248": "getDigit()", "6b59084d": "test1()", +"6b590ec7": "LogWhitelistedUser(address)", +"6b59d0d0": "investmentsInfo(address)", "6b59f495": "tokenized()", "6b5a61ac": "changeTeamNIMFAAddress(address)", +"6b5ad723": "getExpectedTrade(address,address,uint256)", "6b5ae41c": "execute0(address,uint256,bytes)", "6b5aed93": "executeTransfer(string,string,uint256,uint256)", +"6b5afba4": "_rpow(uint256,uint256,uint256)", +"6b5b625a": "chargingTime()", "6b5b6285": "PBKtoken()", +"6b5b8808": "addTokens(uint256,address[])", "6b5bbf5f": "setCommunityMultisig(address)", +"6b5bc1d9": "_isValidSignature(address,address,uint256,bytes32,uint8,bytes32,bytes32)", +"6b5becf0": "sKimBapSBlock()", "6b5c4b16": "dateRelease12()", "6b5c5f39": "croupier()", "6b5c8fba": "confirmParties()", "6b5ca27d": "finalizeCampaign(uint256)", "6b5caec4": "setBot(address)", +"6b5cb95e": "lastTotalBalance()", "6b5cd8d0": "getWeaponDamageFromTokenId(uint256,uint256)", "6b5d18fd": "getProposedIpfs(bytes32)", "6b5d3287": "sellTokensForUsd(string,address,uint256,uint256)", +"6b5d9c60": "pendingOre(uint256,address)", "6b5de05a": "tokensForTournament()", "6b5e1a18": "payoutThreshold()", +"6b5e27ef": "transferFrom_(address,address,uint256)", "6b5e3ca4": "StaffWallet()", "6b5e7b06": "getPenndingBalances()", +"6b5ecfd3": "hasEverBeenStakingAddress(address)", +"6b5eec46": "transferSignBatch(address,address[],address[],uint256[],bytes32[],bytes[])", +"6b5f444c": "setEpochPeriod(uint256)", +"6b600462": "getAttributeTypeInformation(uint256)", "6b60386d": "init(uint256,uint256,address,address,address,uint256,uint256,address,uint256,bool)", +"6b60548d": "newProposal(address,string,bytes,uint64)", "6b6093c2": "FreezeBalances(address)", +"6b610e6a": "exitFor(address)", +"6b615abe": "openPack(bool)", "6b61c3c7": "acceptBet(bytes32,bytes32,bytes32,bool)", +"6b621593": "notEqualIntPassTest()", +"6b6216ad": "reduceReserve(uint256)", "6b628816": "getYumerium(address)", "6b6292d9": "securityTokensPercent()", "6b62cb1b": "createName(bytes32,address)", "6b62cd65": "bankerAllDeposit()", +"6b62eb34": "withdrawMinePool()", "6b634440": "tokensForPartners()", +"6b639ced": "ROLE_SEEDER()", "6b63d145": "OWNER_TOKENS_PERCENT()", +"6b63d697": "ownerWithdrawERC20(address)", "6b6438cc": "payoutCursor_Id_()", +"6b64a31b": "upgradeAddon(address)", "6b64c769": "startAuction()", +"6b64ec75": "getMemmersTeambyName(string)", "6b655e45": "getJuryMembers(uint256)", +"6b655fd0": "updateServiceMinMineAmountInWei(uint256)", "6b6566f0": "DiceOffline()", +"6b65715b": "redeemUnderlyingOnAvatar(address,uint256)", "6b65a834": "ratePlanIsExist(uint256,uint256)", "6b65be60": "usedPositions()", "6b668601": "preSaleConversionRate()", +"6b673a4b": "setMineAddress(address,uint256)", +"6b67417e": "_defaultPositionVirtualUnit(address)", "6b676966": "tokenNeedForBonusLevel1()", +"6b677a8f": "viewRawAmount(int128)", +"6b67a1b2": "pizzas(uint256)", +"6b67c4df": "marketingFee()", +"6b680237": "setPrivatesaleDuration(uint256)", +"6b683575": "claimReserveRebate(address,uint256,uint256,uint256,uint256)", "6b683896": "getImplementation(string)", +"6b6849e2": "requestFutureWeights(address,address)", +"6b6854b1": "getReferReward(address)", +"6b68636b": "withdrawBatchTokenV2(address[],address)", "6b6872c7": "OeTestCoin()", +"6b68be8f": "dsprice()", "6b68db6a": "FipsData(bytes20,address,bytes)", "6b68dd4b": "tokensOfOwnerWithinRange(address,uint256,uint256)", +"6b6908ea": "addGoodsToInventory(string,string,uint256,string,uint256,uint256)", +"6b69190e": "BorrowTaken(address,address,uint256,uint256,uint256,uint256)", "6b693027": "collateralizations(address,uint256)", "6b698377": "DogecoinPrivate()", "6b69ac58": "upgradeHealth(uint256,uint256)", +"6b69b0f5": "liInvestTime()", +"6b69c31d": "WithdrowErc20Token(address,address,uint256)", +"6b69e05b": "claimStakingRewards()", "6b6a08dc": "hashRevealedPositions(uint32,int64[])", "6b6a53fa": "testThrowsRestartNotOwner()", +"6b6acce8": "__init(bool,uint256)", "6b6b2740": "RetailLoyaltySystemBase(uint256,string,string,uint8)", +"6b6b6aa4": "UnstakeAxiaTokens(uint256)", +"6b6c0774": "CORE()", "6b6c5a7e": "getBracketData()", "6b6cc239": "isMaintenanceMode()", "6b6d294e": "worldCupResultPart3()", +"6b6d59f6": "_updateTroveRewardSnapshots(address)", "6b6d5c82": "encryptedBallots(uint256)", +"6b6d681f": "DAYS_IN_SECONDS_365()", +"6b6d858d": "mdoPerBlock()", +"6b6da869": "lockedUpAt(address,address,uint256)", +"6b6df5aa": "balanceOfGrgVault()", "6b6e71b9": "makeTransaction(address,uint256,uint256)", "6b6ece26": "ban(uint256)", +"6b6ecea8": "getNetWorthBalance(address)", "6b6ee875": "tokenSealer(uint256)", "6b6ef0ed": "transfer0(address,uint256)", +"6b6ef73b": "guess_password()", +"6b6f47e1": "SendTweet(string,string,address)", "6b6f4826": "minInvestmentICO()", "6b6f4a9d": "discount()", +"6b6f8ba2": "enterBidForMask(uint256)", "6b7006d7": "lockMana(address,uint256)", +"6b70829f": "NewImplementation(address)", +"6b708788": "getVaultsInfo()", "6b709a36": "lockWorker(address,address)", "6b7128ec": "getBetCount(uint256)", +"6b713f4f": "AddToBlacklist(address)", "6b71d93b": "VerifiedProxy(uint256)", +"6b71da21": "luniverseApprove(bytes32)", "6b722a32": "christmasTree()", "6b727312": "easyCommit(uint256,uint256,uint256)", "6b7285d7": "transferP2P(uint256,address)", +"6b740015": "endSyncSnapshot(uint32)", +"6b743a2c": "getExperience(address)", "6b74401a": "BuyTokensDirect(address,uint72,uint88,uint88)", +"6b745a9f": "approve_261(address,uint256)", +"6b749c47": "depositPayment(uint256)", "6b74c3d8": "getTxn(address,uint256,uint256)", "6b755aa2": "reCommentRewardPool()", +"6b75ddb2": "UpdateWhiteList(address,uint256,uint256,bool)", +"6b76222f": "migrateEscrowBalanceToRewardEscrowV2()", "6b764632": "KongToken()", "6b76484e": "swap(address,address)", +"6b76a911": "viewhardCap()", "6b76bd94": "CreateUser(string)", +"6b76d3bd": "depositMultiVault(address[],address,uint256[],uint256[],bool,uint8)", +"6b772d95": "_cancel(address,bytes32,uint256,address,uint256,address,uint256)", +"6b7823ab": "defensePayout()", "6b78aa08": "MarketHub(uint256)", "6b790be4": "getWeightMinusFees()", "6b792c4b": "emergencyWithdrawETH(uint256)", "6b7976c8": "calculateObtainedINA(uint256)", +"6b79c38d": "compSupplyState(address)", "6b7a247e": "setlvlSign(string)", +"6b7a2a95": "profitPool()", +"6b7a7e4e": "_publicSwap()", "6b7ae8dc": "foundationWallet()", "6b7ae8e6": "left74(uint256)", "6b7b0472": "getLastHash(bytes10)", +"6b7b44d7": "getStudent(address)", "6b7c0379": "HOPPToken()", +"6b7c4def": "Finalized(address,uint64,uint256,uint256,uint256,uint256)", +"6b7c5d43": "operational_eth_balance()", "6b7cc44f": "detail()", +"6b7d4d08": "BuyDisciple(uint256,uint256,address,uint256)", "6b7d5205": "Diamond()", "6b7d5dfd": "setTangibleAssetDisbursementAddress(address)", "6b7d90ff": "unVerifyKyc(address)", @@ -61604,56 +112710,112 @@ "6b7db8fc": "sendDividend(address,uint256)", "6b7e4175": "EphronIndiaCoinICO(address,address,address)", "6b7eba7d": "instantTransfer()", +"6b7f0a15": "getTotalGasDeposits()", "6b7f3a32": "Jojo(uint256,string,uint8,string)", "6b7fad1b": "ethToDividendsNeeds()", +"6b7fef14": "addToTransferFromBlacklist(address)", "6b7ffb92": "revote()", "6b802108": "checkValidSignatureAndMethod(address,bytes)", +"6b813675": "getOrderDetails(uint128)", +"6b817337": "viewCurrentCost()", "6b8184e2": "ImpeachmentAccepted(address)", +"6b818ad7": "pendingRDF8(uint256,address)", +"6b821495": "LEVEL_YIELD(uint256)", +"6b823877": "availableLiquidityOf(address)", "6b8263ed": "resumeOffering()", "6b8287a6": "getetherpriceinUSD(address,uint256)", +"6b828d62": "LogChangeLenderOwnership(bytes32,address,address)", +"6b82b985": "subs(bytes32)", +"6b82bc3b": "placeAds(uint8,uint8,uint8,uint8,string,string,string)", +"6b82d188": "Raise(address,uint256)", +"6b8357ac": "collect(address,uint256)", "6b8393dd": "getSold(address,uint256)", +"6b83cf26": "getGasCostOfLeastSignificantBit(uint256)", +"6b840b01": "current_mod_approval_vote_count()", "6b845d7e": "updateWithdrawalMode(uint32[])", "6b847dc0": "setDayWithdraw(uint256)", "6b8487be": "GigToken(bool)", "6b84dfcd": "setTransferRight(address[],address[])", +"6b84f8fd": "exitAdharmaContingency(address,address)", +"6b85f56e": "_revoked()", "6b863578": "noVoteSum()", +"6b87124e": "etherRecovery(bytes32)", "6b872309": "x(address,uint256,address,uint256,bytes32,bytes32)", "6b87d9f7": "BUBBLEToken()", +"6b87e6c6": "addr_pID_(address)", +"6b87f990": "setUniswapApproval(address)", +"6b880258": "setDepositWallet(address)", "6b881724": "assetWallet()", "6b886888": "isTemporary(bytes8)", "6b88719a": "PHOENIX_CORSAIR_FTL_SPEED()", "6b889cce": "call_test()", "6b88f4ae": "resetIndex(uint256)", +"6b891336": "selfcommission(address)", "6b89be03": "getActiveShareholdersArrayLength()", "6b89bfc7": "getStatusOf(address)", +"6b8a5418": "rewarded_minutes()", "6b8ab97d": "reset(address)", +"6b8afbda": "withdrawByPID(uint256,uint256,address)", "6b8b3268": "mintCrown(uint256)", +"6b8b57e1": "associateCodeContract(address,address)", +"6b8b74cc": "changeData()", +"6b8bf0af": "seeAmountOut(uint256,uint256,uint256)", +"6b8bfc4a": "setReferralLPToken(address)", "6b8c261e": "prizeByNow()", "6b8c4c48": "setDaxInBtcSatoshi(uint256)", "6b8c7180": "setupPeriodForPreSale(uint256,uint256)", +"6b8c926f": "exchangeRatios(address)", "6b8cc89d": "INVESTMENT_USER2()", "6b8ce30e": "partnerInfo_for_Owner(address,bytes32,uint8,bytes32,bytes32)", +"6b8d18e5": "findLeftOrRightNodeUser(address,uint256)", +"6b8d7a12": "executeTransaction(address,bytes,uint256)", +"6b8d7ea6": "lastVotePropogationBlock()", "6b8da9a2": "tgrLive()", +"6b8dc73d": "HashToId(bytes32)", +"6b8e53b6": "getRequiredComponentRedemptionUnits(address,uint256)", +"6b8eb403": "balanceOfStakingToken(address,bytes32)", "6b8f155a": "numberWhitelisted()", "6b8f9c43": "setPayoutWallet(address)", +"6b8fb491": "claimSecretPacket(string,bool)", "6b8fd600": "priceOfElements(uint256[])", "6b8fe0f0": "NewPlayer(address,uint256)", "6b8ff574": "getName(uint256)", +"6b902cf5": "encryptionPublicKey()", +"6b905fb1": "dthTellerBalance(address)", "6b90ce93": "simulated_snt()", +"6b90eb85": "MCRemoved(address)", "6b915d43": "melonToken()", "6b9168e6": "clearAngelsFromBoard(uint16)", +"6b918299": "FinalUnpause()", "6b919488": "removeOwner(uint256)", +"6b922191": "ehtamount()", +"6b9241fc": "getInterfaceId()", +"6b92a3b6": "secondsPerEra()", +"6b92cc7d": "addToonContract(address)", "6b930927": "preTgeTokenSupply()", "6b931cad": "replaceAdministrator(address,address)", +"6b93d2d1": "mostProfitableStrategyInETH()", +"6b940d0f": "calcBasePPinTokenWithPool(address,uint256)", "6b944bd6": "GoBlock()", "6b946680": "parentKidsLink(uint256,string,string)", "6b94692a": "isPresaleBuyer(address)", +"6b947f0c": "allAPIcall(uint256)", +"6b94c9ac": "reta(string)", +"6b94e3be": "getCoverAddress(bytes32,uint48,address,uint256)", +"6b950377": "validIndex(address)", +"6b9522af": "getStudTime(uint256)", +"6b953678": "tokenUserProvisions()", +"6b9565e4": "getMyReward(address)", "6b95767d": "giftSpaceship(uint16,address)", +"6b961abe": "loadTokenBalances(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)", +"6b96935b": "tradersVolumeRated(address,address)", +"6b9693fd": "createButton(uint64,uint64,uint64,uint64,uint64)", "6b97be1f": "transferPayable(uint256)", "6b97c6d7": "_transferOwnershipOfItemsStorage(address)", +"6b97dae1": "safeSushiToVault(address,uint256)", "6b97e5eb": "UnicronToken()", "6b9808a1": "buyWine()", "6b98419a": "_approveFor(address,uint256)", @@ -61662,99 +112824,185 @@ "6b98d78c": "setLandSlogan(uint256,string)", "6b99a13e": "editNumber(uint256)", "6b9a1db9": "wanUnit()", +"6b9a4111": "remainingScissor(address)", +"6b9a5bc5": "u_l1()", +"6b9a5c6c": "whitelistAddress(address,uint8)", "6b9b1006": "TransactionRecorder()", "6b9b2679": "setReserveForFoundersFirst(address)", "6b9c1d22": "managementFeeWallet()", +"6b9c546a": "getScans(uint256)", "6b9c6116": "PULSCrowdsale()", "6b9c9b9c": "TerraByte()", "6b9cadc1": "isValidMsgValue(uint256)", +"6b9cb295": "rewardMulUpdate(uint256)", "6b9cf534": "_minimumBuyAmount()", +"6b9cfa84": "updatestatus(uint256)", +"6b9d21e5": "setRequireInputMarketId(uint256)", +"6b9d8c4b": "AqueductAddress()", "6b9da657": "sendNewEntry(string)", "6b9db4e6": "getLock(address)", +"6b9dcb03": "startChangeLPTimeLock(uint256)", +"6b9e499c": "electricCharge()", +"6b9e598b": "assetIntroducerDiscount()", +"6b9e9b5b": "renounceScribe()", +"6b9ecfd5": "userethnum()", +"6b9f0acc": "getKOTHPrice()", +"6b9f1ef6": "setWithdrawFees(uint128)", +"6b9f5b01": "testCalculateInterestIndex_BackOfEnvelopeLargeInterest()", "6b9f96ea": "flush()", +"6ba03924": "getAllDepositIds()", +"6ba0831d": "Register(address,string)", "6ba0b4f2": "isKnownSelector(bytes4)", "6ba0b8bc": "getBonusPercent(uint256,uint256)", "6ba0f114": "EtherChain()", +"6ba1299a": "setBonusAddr(address)", +"6ba13a82": "usersCount()", "6ba15807": "evntCreateContract(address,address,address,address,uint256,string)", +"6ba170b5": "getUserInputCollateral(address,address)", +"6ba1f7de": "withdrawWETHtoETH(uint256)", "6ba20015": "maxplayers()", "6ba2482d": "GetUserNickName(address)", +"6ba2584b": "depositfunds()", "6ba2aefc": "transferMultisig(address,address,uint256)", +"6ba30e91": "initEnvForPub(uint256,uint256,uint256,uint256,uint256)", +"6ba320f9": "undelgate(address,uint256)", +"6ba37515": "BLOCKS_PER_MULTIPLIER()", +"6ba3751e": "cancelUnregisteringServer(uint256)", +"6ba3cc87": "addGiverAndDonate(uint64,address,uint256)", +"6ba40878": "swap(address,address,address,uint256,uint256,address,bytes)", "6ba42aaa": "isKeeper(address)", "6ba44d3c": "get_address(string)", "6ba47299": "buyDiscountTTWByETH(uint256,address)", +"6ba475de": "solarite()", +"6ba4c138": "claim(uint256[])", "6ba4c290": "modifyEscrowPrice(uint256,uint256,uint256)", "6ba4f143": "_setAuraValue23(uint256)", "6ba4fadb": "changePhaseToPreICO2()", "6ba55c6d": "coinIssuedFoundation()", +"6ba5c84e": "sar_combined_large(uint256)", "6ba5ef0d": "setMin(uint96)", +"6ba631cf": "UNISWAP_PAIR()", "6ba6984c": "setHBT(uint256)", +"6ba6ad0d": "governaddr()", +"6ba6bbc2": "getRollbackEntryAtIndex(bytes4,uint256)", "6ba6e2e0": "TGCToken(address)", +"6ba72b77": "onInfectiveStage(address,uint256,uint256,uint256,uint256,address)", "6ba75608": "claimAssetPack(uint256)", +"6ba77a38": "_BURNFROM()", +"6ba77ade": "periodPartnerAward()", "6ba7d28a": "checkVestingWithFrozen(address)", +"6ba7d970": "createNote(address,string)", "6ba7e31c": "PriceSet(string,uint64,uint8)", "6ba7ffd5": "requestCnt()", +"6ba86fe8": "stableCollateralAddress()", +"6ba8b271": "func_2A87()", "6ba8d421": "transferHackoinTokenOwnership(address)", +"6ba8fd8b": "calculateNovaPerBlock()", "6ba951c4": "EtherModifierTigro()", +"6ba9858f": "IPFSCert(string,string)", "6ba9a40b": "withDrawBalance(uint256)", "6ba9fd38": "openMinting()", +"6baa0330": "symbol(bytes32)", "6baa0f8e": "createSystemAuction(uint256)", "6baa2ff7": "preSale(address,uint256)", +"6baa9575": "emergencyRescue()", "6baae8e5": "_prand(uint256)", +"6bab0114": "OperationCreated(bytes32,uint256,uint256,address)", +"6bab3c74": "get_holdings()", +"6babf513": "buyFirstTokens(address,bytes,uint256[])", +"6bac84c9": "IMPOSS19()", "6bacc0fa": "hasSaleEnded()", +"6bacc53f": "getQuotaPrice()", +"6bacc5bf": "setBotHardCap(uint256,uint256)", +"6baccaba": "tollRatio()", "6bacdc87": "InterestFreeLending(address,address,uint256,uint256)", "6bacfe43": "getCCH_edit_16()", "6bad77e1": "getNumProducts()", "6bad8ed8": "freezingPercentage()", "6bae05cf": "preRegister(address)", "6bae116f": "getBonusMultipierInPercents(uint256)", +"6bafaa59": "unregisterSelf()", "6bb0ae10": "print(uint256)", +"6bb12049": "stake(uint256,address,uint256,uint256,uint256,bytes32)", "6bb15940": "getCurrentSaleRate()", "6bb1605b": "filehash()", "6bb164c9": "isCantonEmployee(address)", +"6bb17b21": "withdrawAdminSellCommissionBalance()", +"6bb18556": "getUserReferralWithdrawn(address)", +"6bb18a54": "isRegisteredModule(address[])", "6bb20f9b": "searchWhitelist(address,address)", +"6bb2374a": "playerTokenToOwner(uint256)", "6bb27584": "capRound1()", "6bb2c12f": "createRequest(address[4],address,uint256[12],uint256,bytes)", +"6bb2d2b3": "getAllHotelChargingTransactions(address)", "6bb3130e": "disbursementWei()", "6bb35840": "PowerGiggs()", +"6bb3b4a4": "setExchangeAddresss(address)", "6bb3c065": "round4Sold()", "6bb4cf76": "createToken(string,string,uint8,address[],uint256[],uint256[])", "6bb4d573": "evMinTokensReached(address,uint256,uint256)", "6bb50f4c": "_openGamePlayNo(uint256)", +"6bb51803": "getAsks()", "6bb53c90": "ticket(uint256,uint256,uint256,uint256,uint256)", "6bb56e8b": "crowdsaleEth()", +"6bb5a582": "createdisease(string)", "6bb60475": "_insertSortMemory(uint32[11])", "6bb6126e": "exec(address)", +"6bb62167": "migrateLeverage(uint256,uint256)", +"6bb6b007": "transferWithHash(address,uint256,address,string)", "6bb6ea30": "createInterceptor()", "6bb72c97": "numTokensInLottery()", +"6bb75584": "shareHolders()", +"6bb77fb9": "taxaddr()", "6bb7b7a4": "rare()", +"6bb7e542": "receiverA()", "6bb7f336": "updateUnsoldTokens()", "6bb7f98e": "getHighestMilesOwnerAt(uint256)", "6bb80acc": "_createCovfefe(string,string,uint16,address,uint256)", "6bb80d51": "dividendPercentage()", "6bb82e82": "addToWhitelist(address,uint256,bool)", +"6bb987fe": "BLOCKS_PER_DAY()", "6bb9b9ab": "getTodayDividendsByAddress(address)", "6bba3f2f": "kappa()", "6bba5c15": "changeParameters(uint256,uint8,uint256,uint256,uint256)", +"6bbaab78": "updateWhitelistedAdmins(address[],bool)", "6bbadf09": "addPokemonDetails(string,uint256,uint256)", "6bbae823": "LIMIT_STAR4()", +"6bbb3bc4": "setDestructHoldingTokenAmount(uint256)", +"6bbb8d70": "executeBid(string,string,address[],uint256[],string[],bytes32[])", "6bbbc182": "addVerified(address[])", "6bbbec85": "updateGameMeta(uint256,string,string)", "6bbc5748": "FeeChanged(uint256)", +"6bbc6425": "close_voting()", +"6bbd115e": "fixedPoolJoin(uint32,uint256)", +"6bbd2b6f": "affiliateFeeOf(uint256)", +"6bbe03cf": "seek(address,uint256)", "6bbe0410": "NewTransaction(string,uint64,string,uint64,uint8)", "6bbe24d4": "dataSourceGetQuarterResult(uint256)", "6bbe6f7f": "buyCoinsPreview(uint256)", +"6bbe7ec5": "setPutPrice(uint256,uint256,bool)", "6bbea781": "getApproveValueFor(address)", "6bbeb9de": "loginUser(address)", "6bbeba8a": "setService(bytes,address)", "6bbf54a4": "PCF()", "6bbf592d": "bytesCallWithArray(bytes32[4])", "6bc02730": "approveBreeding(address,uint256)", +"6bc03c86": "setKebabFarmingPool(address,uint256,address,address)", +"6bc05251": "totalPoolCHIPBackStopAvailable()", +"6bc07b2b": "getDelays()", "6bc0b3ba": "jackpotAddress()", +"6bc0cb9e": "ProposalDeleted(address,bytes32)", "6bc0f7fb": "isProxyLegit(address,address)", "6bc138f6": "getNumberOfIds()", "6bc1f1e4": "updatePriceAndInventories(uint256,uint256,uint256,uint256,uint256,uint16)", +"6bc20157": "WhiteList(address)", "6bc21808": "CategoryAuction(address)", +"6bc21ad8": "getRis3Address()", +"6bc25773": "stakeholdersPoolAuthorized()", +"6bc27714": "getDebtSnapshotStaleTime()", "6bc2805d": "cancelAllEnter()", +"6bc285c0": "setName(string,string,uint256)", +"6bc29efa": "saveOrder(uint8,address,uint256,uint256,address,uint256,uint256,uint256,bytes32,bytes32,bytes32)", "6bc31311": "EFFCoin(address)", "6bc32c7b": "get_train_data_length()", "6bc344bc": "payforflag(string)", @@ -61765,52 +113013,99 @@ "6bc46fb2": "totalHatcheryShrimp()", "6bc5063c": "VestedTokensReleased(address,uint256)", "6bc507b1": "getBlackflag(uint256,address)", +"6bc51429": "registerUniversalAgent(address,bool)", +"6bc55876": "switchDex(bool)", "6bc59f13": "transferFromChangeAllowanceTest(address)", +"6bc5a8ae": "topDonor()", "6bc5b964": "getMemberWhisper(address)", "6bc5c0cd": "releaseBonus()", +"6bc5fb19": "fullClear()", "6bc6147e": "unlockMainSaleToken()", "6bc64e0f": "preSaleEnd()", "6bc65778": "getAllProductList()", +"6bc767d4": "summonDelay(address)", +"6bc77abe": "setProposalData(address,address,bytes4,bytes32,address)", "6bc789cd": "getONG_AUDIT(bytes32)", "6bc85107": "isMemberInDescendant(address,bytes32)", +"6bc855cc": "setRef(address)", +"6bc87c3a": "_liquidityFee()", "6bc8a260": "getUserWinInTournament(uint256)", +"6bc98ba3": "ODDS_PRECISION()", +"6bc996f6": "setSwapEnableFlag()", "6bc99824": "VoltToken()", "6bc9b0d7": "getPromiseIds(uint256,uint256,address,bool)", +"6bc9b561": "userRewardPerTokenPaid(address,uint256)", "6bca81d4": "revealBid(bytes32,address,uint256,address,address,bytes32,uint256,uint256)", +"6bca820e": "change(bool)", "6bcaaed9": "PetmancoinToken()", "6bcab76c": "setDApp(address)", +"6bcaff0a": "vendor_remove()", "6bcc035a": "getStatusAndOutcome()", "6bcc28a9": "kittensRemainingToDrop()", "6bcc311c": "tokensForBonus()", "6bcc7241": "getPriceWei(uint256)", +"6bcd8382": "beneficiaryDevelopment()", "6bce23be": "setupTokenRate(uint256)", +"6bce267b": "blockIdToRentPrice(uint16)", "6bce6569": "reservedPercentTotal()", "6bce8a96": "whitelistedAddressCount()", +"6bcec593": "safeOctanTransfer(address,uint256)", +"6bced106": "myBzb()", +"6bced5a2": "uniswapOracles(address)", "6bceead7": "setSquareWins(uint256,uint256,uint256)", +"6bcf62f8": "getSymbol(string,uint256,uint256,string)", "6bd0021c": "bonusPhase()", +"6bd0091e": "getIAAStats(uint256,address)", +"6bd08049": "updateSupply(uint256)", +"6bd09b01": "AirdroppedBatch(address[])", +"6bd11c91": "Invested(address,uint256,uint256,uint256,uint256)", +"6bd2a397": "withdrawMaxPeriod()", "6bd31a56": "hardCapLowUsd()", "6bd37274": "Pixiu_Beta()", "6bd3a1c3": "PresiamDrop()", +"6bd3b87c": "lockInfo(address)", "6bd3d406": "totalPresale()", "6bd46bd2": "setTokenBurnFeeReceiver(address,address,address,address)", +"6bd482e9": "dynamicMincapIncrementx100()", "6bd484c4": "oracleCallbackGasLimit()", "6bd4dfce": "setStarterClass(uint256,uint32)", +"6bd4e04a": "mutateTokens(address,uint256)", "6bd5084a": "number_of_claims()", "6bd50cef": "getConfiguration()", +"6bd5450a": "winners(address)", "6bd58db5": "Total_Patient(uint256)", +"6bd5d591": "updateProjectBaseIpfsURI(uint256,string)", "6bd5e26a": "lockTo(address,string)", +"6bd5f1b0": "approve_858(address,uint256)", "6bd61a66": "nonHighestBidderRefund()", "6bd6775f": "Presale(address,address,address,address,uint256,uint256)", "6bd68a8f": "referralAmount()", +"6bd6ee7c": "pendingApex(uint256,address)", +"6bd6f696": "tranche_interest_earned(uint256,uint256)", "6bd70a1f": "MIN_IVESTMENT()", "6bd7e7dd": "CatBought(uint256,uint256,address,address)", "6bd7eeeb": "maximumTokensForFirst()", +"6bd7ef8d": "entityClaim(address)", +"6bd7f400": "rentPrice(uint256)", +"6bd80102": "onAffiliatePayout(uint256,address,uint256,uint256,uint256)", +"6bd83b22": "pendingQtc(uint256,address)", +"6bd876f3": "wrapperContractToNftContract(address)", "6bd87c86": "Try2222()", +"6bd89cdd": "updateBurnAddress(address)", "6bd8fd12": "currentMinBid()", "6bd92f7c": "activateAllowanceRecord(address,address)", +"6bd94cd2": "getContractSignatures(bytes32)", +"6bd97f1d": "claimableReward(address,uint256)", +"6bd97f50": "timelocked(address)", +"6bd9add4": "bondWithHint(uint256,address,address,address,address,address)", "6bd9b4da": "setMinETHin(uint256)", +"6bda1577": "maxWithdrawAllowed(address,address)", +"6bda2034": "_fundProposals(uint64)", "6bda3422": "Token(uint256,string,string)", "6bdaa520": "forciblyRequest_callback()", +"6bdb24e7": "hasCurrencySupport(bytes32)", +"6bdb6252": "Birth(address,uint256,uint256,uint256,uint256,uint16)", +"6bdb744e": "NFTDetails(uint256)", "6bdbc918": "BaseTransactionService(address,address)", "6bdbf8e6": "concat()", "6bdc06f5": "cancelRegistration(address)", @@ -61819,45 +113114,67 @@ "6bdc9546": "setCommunicationUri(bytes32)", "6bdcdb2d": "getAutomatedReportDueTimestamp()", "6bdcdeaa": "setMagicStore(address,address)", +"6bdd2327": "PRODUCT_DEVELOPMENT_SUPPLY()", +"6bdd265e": "createPaymentChannel(address,string,address,uint256,uint256)", "6bdd44aa": "createCard(string,uint256)", +"6bdd9e9f": "withdrawUnsupportedToken(address)", +"6bdde31b": "pendingNana(uint256,address)", +"6bddff94": "MembershipTransferred(uint8,address)", "6bde2e7f": "_setBodyColorValue3(uint256)", "6bdea7eb": "AddBonus(uint256)", "6bdebcc9": "destory()", "6bdee200": "enableTicker()", "6bdee235": "Zeroexchange()", "6bdfd723": "getNewEnglandBets(address)", +"6bdff08a": "zaTokens(address)", "6be00229": "exitAddress()", "6be03bd2": "configTimeInc()", +"6be03d0b": "WhiteListReqested(address)", "6be050d2": "FibokenUsed(uint8,address,uint256)", +"6be05442": "airdropsAddress()", +"6be06f14": "calcDebtRatio(uint256,uint256)", "6be0c670": "chipSize()", "6be13c92": "coldWallet()", +"6be195a9": "nameInfoMap(address)", "6be202cf": "addSomeDETsTo(address,uint256)", +"6be20d4a": "recentPlayers(uint256)", "6be24a47": "create(address,address,address,address,address,address,address,string,string,string)", +"6be2ca43": "RemoveNormalAddressFromSale()", "6be2f28e": "totalAmountOfWeiCollected()", "6be32e73": "tokenCallback(address,uint256,bytes)", "6be343cc": "setFoundAcc(address)", "6be39bda": "getTerms(bytes32)", +"6be3b095": "pendingLama(uint256,address)", "6be4097c": "currentLotteryId()", "6be422b2": "determinReferrer(address)", "6be47418": "latchFciUserController(uint256,address)", "6be47618": "deleteContract(uint8[],bytes32[],bytes32[])", +"6be49ae6": "viewUserLevel(address)", "6be4cf1f": "buyTokensFor(address)", "6be4d9b0": "changeResolverAllowances(address[],uint256[])", "6be505f5": "selectWinner(bytes32)", +"6be51c4f": "tokenListener()", "6be598b4": "SIGTToken()", +"6be59f39": "stopBorrowing(address,address,uint256)", "6be5f4a6": "checkVictoryByScore(uint256)", "6be60f8b": "underwrite(uint256)", "6be67db3": "contractNameUpdate(string,bool)", "6be6fa14": "getTransferFromValueValue()", +"6be74bdb": "allocationfund()", +"6be7658b": "removeMember(uint256,address)", "6be7eeba": "Vtoken(uint256,string,uint8,string)", "6be80de7": "investorIDs(address)", "6be82168": "NeycoinToken()", +"6be85df9": "redeem(bytes32,address,address)", "6be86f21": "bonussale_TokesSold()", "6be9564a": "ListingBought(bytes5,uint256,uint256,address)", "6be99794": "getTransferToValue()", +"6be99b53": "AuthorizedUser(address)", "6be9a8df": "GetGuestQueueNumber()", +"6be9f55b": "slavePoolUsers(uint256,address)", "6be9f7a0": "emitDeposited(address,uint256,address)", "6bea0b79": "getAccountData(address,string)", +"6bea5344": "getLastRngLockBlock()", "6bea8215": "createGenerator(uint256,string,uint256,uint256,uint256)", "6bea989d": "AUTH_FREEZEACCOUNT()", "6bea9d81": "BLOCKPIX_Coin()", @@ -61867,12 +113184,16 @@ "6bec32da": "mintToken(address,address,uint256)", "6bec454a": "buyCity(uint256)", "6bec51cc": "generate(address,address,uint256)", +"6bec5368": "balanceOfLp(address)", +"6bec69c1": "EventRunBeforeInit(bytes32)", "6bece548": "preSaleBonus1Time()", +"6bed0415": "transferableSynthetixAndAnyRateIsInvalid(address,uint256)", "6bed09be": "buyTokensUpdateState()", "6bed6de5": "sendObjectWithApproval(uint256,address)", "6bedb845": "MultiSig()", "6bee2cc3": "registerLottery(uint256)", "6bee5131": "FW(uint256,string,uint8,string)", +"6bee72f7": "vetoPowerForAccount(address)", "6bee73db": "testAllowance()", "6bee76ea": "withdrawBond(address,uint256,uint256)", "6bee9cfa": "offsetFeeRate()", @@ -61880,177 +113201,327 @@ "6bef90f8": "VUP_PER_ETH_BASE_RATE()", "6befa297": "WCT1(address)", "6bf006c8": "capReached(uint256)", +"6bf01952": "unisage()", +"6bf04521": "stakingID()", +"6bf062b2": "verifyProof(bytes,uint256[4])", "6bf06fde": "transferToNewContract(address,uint8,bytes32,bytes32,bool)", "6bf0873a": "birth(uint256,uint64[])", "6bf0a3bf": "LIQUID_ALLOCATION_PPM()", "6bf0c7fd": "getBracket(address)", "6bf0f4a1": "roll(uint8)", "6bf13959": "endAtCheck(uint256)", +"6bf1840e": "VERIFIED_MINTER_ROLE()", "6bf20a77": "unfrozenATAccount(address,address)", "6bf2606a": "PATCH_VERSION()", +"6bf301a4": "SCALAR()", "6bf30259": "checkIncentivisingBalance()", +"6bf3133b": "stolAddress()", "6bf32504": "markAsFailed(string)", "6bf341e7": "_fundowner()", +"6bf34d60": "nextRebaseTime()", +"6bf36f7a": "removeAuraEquip(uint256)", +"6bf3a80f": "SetLpMaxVolume(uint256)", +"6bf3f9e5": "setStakingProxy(address)", "6bf4223b": "getRoundEnd(uint256)", "6bf42646": "holdTokenInvestorsCount()", "6bf42ea5": "TokensBought(address,uint256,uint256,uint256,uint256,uint256,uint256)", "6bf4398d": "saniwallet()", +"6bf459cb": "getNetworkAddress()", +"6bf50b42": "addRebaseFunds(uint256)", "6bf51a18": "stepLockCheck()", "6bf52ffa": "Vote()", "6bf5595d": "CrowdSale(uint256,uint256,uint256,address)", +"6bf565f6": "_checkContractStorageChange(address,bytes32)", +"6bf5f38f": "MakerFeeUpdated(uint256,uint256)", +"6bf639a5": "createSaleCardEvent(address)", +"6bf6cb19": "shouldTriggerPassive()", "6bf6dd6f": "associate(bytes32,bytes32[],address[])", +"6bf79fd1": "CONTRACT_LAND_BASE()", +"6bf7c435": "currentSynthDebts(bytes32[])", "6bf807fc": "unlockTimes(address)", "6bf82d74": "ethFundMain()", +"6bf84e16": "setWhile(address,uint8)", "6bf84e51": "BECEXTEAMTOKENS()", "6bf8b92d": "changeSeed(uint32)", "6bf8bfab": "DutchAuction(address,uint256,uint256)", "6bf8f85a": "forceFinish()", +"6bf8f85c": "decryptionCounter()", "6bf91c63": "configOf(uint64)", "6bf99bbf": "ICOResumed(uint256,uint256,uint256,uint256,uint256)", +"6bf9ace7": "setRebaseMintPerc(uint256)", "6bf9b3e7": "approveWithdraw(address,address,uint256)", "6bf9b731": "claimFor(address,address,address)", "6bf9e633": "winnerIsA()", +"6bf9f9c1": "teamRunHalf(uint256)", +"6bfa24ea": "halfSuperNodes()", +"6bfa36f4": "emitEndedBudgetCampaign(address,uint256,uint256)", "6bfa379e": "readyTokens(address)", "6bfa5edc": "operatingOfficerAddress()", "6bfaa903": "increaseOwnershipTokenCount(address)", "6bfae928": "calcReserve(uint256,uint256,uint256)", +"6bfb05f9": "consultDollarPrice(address,uint256)", "6bfb0d01": "itemCount()", "6bfbbdf5": "DutchAuctionToCraft(address,address,address)", "6bfbc9f7": "HongToken(uint256,string,uint8,string)", +"6bfbdaf0": "current_profit_p1()", "6bfbf5e6": "levelChanger()", +"6bfc4afc": "setAddressToLender(address,uint8)", "6bfc8bb5": "setIPFSHash(bytes32,string)", "6bfc9561": "sellStake()", +"6bfc9b3b": "withdrawBidForSigil(uint16)", +"6bfd5e75": "PriceSet(uint256)", +"6bfd7835": "initiateEscrowMigration(uint256[][])", "6bfd9716": "SaleTracker(bool)", +"6bfdaece": "check_availability(bytes32)", "6bfdb7eb": "getBeneficiary(address,address)", "6bfdd3dd": "_sanMint(uint256,address,string,string)", "6bfe6bc0": "setEthPricies(uint8)", +"6bfe7f16": "lastMigrateDay()", +"6bfea891": "outTokenDebt()", +"6bfee813": "approve_212(address,uint256)", "6bfee863": "CipherToken(uint256,string,string)", "6bff1901": "coreTeamSupply()", +"6bff2c24": "setURIPrefix(string)", "6bff6575": "DaysToNextDestroy()", "6c00161a": "distributeWithMilestone(address,uint256,uint8)", +"6c003a9b": "claimableRewards()", "6c00bb44": "AuctionSuccessful(address,uint256,uint256,address)", +"6c00f310": "emitSynthExchange(address,bytes32,uint256,bytes32,uint256,address)", +"6c011d82": "getTeamReleasable()", "6c012923": "feeForSplitterCreation()", "6c021968": "RefundTransfer(uint256,uint256,uint256,address)", +"6c021b3b": "RuleModifier(string)", "6c026f59": "ii()", "6c02a931": "tokenName()", "6c0360eb": "baseURI()", +"6c03a451": "getNftInfo(address)", "6c03cd49": "getInviteRate()", "6c04066f": "BlockLockSet(uint256)", "6c042689": "endStage1()", "6c043773": "sendPacket(address,bytes)", +"6c046851": "Recovery(address,address,address)", "6c047c36": "evaluateProposalMetricStart(uint256)", "6c049b89": "toggleCrossForking()", +"6c04bbf2": "_removeDJ(address)", "6c04c1c9": "LuckyEthereumLotteryToken()", +"6c04eb53": "NTFS()", "6c050eae": "look()", "6c052cd8": "getGroupMembers(bytes32)", "6c054113": "setPhaseSale(uint256,uint256,uint256)", "6c054ad0": "createContractor(address,address,bool,address,string,string,bool)", "6c055ce2": "withdrawToPartner(address,uint256)", +"6c0601e6": "closeJOYtoyWindow(uint256)", "6c060a7a": "_batchPopularitySetting(uint256[],uint8[])", "6c062806": "addAdminAddress(address,address)", "6c062cc7": "Forge()", +"6c0636b4": "coutier_()", +"6c064524": "setSushiRouterAddr(address)", "6c064d63": "_setCompositionPrice(uint256,uint256)", +"6c066044": "airmoon()", +"6c06649d": "GrantEnable(address,bool)", +"6c06d61b": "stakeIn(uint256)", +"6c07ea43": "withdrawERC20(address,uint256,uint256)", +"6c085aaa": "userposts(address,uint256)", "6c08729e": "TransferToSAToE(address,uint256)", +"6c08a983": "getAssetIPFS(address)", +"6c08d5fc": "CrowdsaleFinished()", "6c08faf7": "getCaseCount()", "6c096192": "fetchCreatedOrdersForPayer(address)", "6c0a1117": "doCancelAll()", "6c0a1605": "EthTurnWCG(uint256)", +"6c0ade5a": "pendingApple(uint256,address)", "6c0b1e8c": "VESTING_START_TIME()", "6c0b66b9": "PGO_UNLOCKED_LIQUIDITY_CAP()", +"6c0b7e71": "getCurrentSessionNumber()", +"6c0c19cc": "editPosition(uint256,string,string,string,string,uint256,uint256,uint256)", +"6c0c1bcf": "uintarray(uint256)", "6c0c27e1": "acceptBet(uint256)", +"6c0c3b99": "callRestricted()", +"6c0cae68": "requestEthereumPrice(string)", +"6c0d104d": "updateInstance(address,bool)", "6c0d2c8b": "getHeroPower(uint256,uint256)", +"6c0d789d": "lendingPoolReferral()", "6c0daed8": "getRate(string)", "6c0db60e": "CatexToken()", "6c0e1ccd": "getAllCitizens()", "6c0eb56f": "LOG_EmergencyWithdrawalProposed()", "6c0ebc6c": "perform_withdrawal(address)", +"6c0f40cb": "xgt()", +"6c0f79b6": "contracts()", "6c0f7ee7": "multiAddDSource(bytes32[],uint256[])", +"6c0fce2d": "AddCoin(uint256,string,string)", +"6c106ce1": "direct_bonus()", "6c10dcdf": "ProvidenceCasinoToken()", +"6c10e5a5": "supporterJoinValidator(address,uint256)", "6c118f46": "TimeWindowUpdated(uint256,uint256)", "6c11bcd3": "sellTokens(uint256)", +"6c11c21c": "grantPauserRole(address)", +"6c1210e8": "createAndSellAllAmountBuyEth(address,address,address,uint256,uint256)", "6c1247e5": "databaseContract()", +"6c129981": "deactivateTrait(uint256)", +"6c12c4d1": "provisionCount()", +"6c12ed28": "transferFrom2(address,address,uint256)", "6c131dbe": "multiMint(int256,uint256[])", "6c1334bf": "SetDescript(string,string)", +"6c13b345": "mobsterIndexToOwner(uint256)", "6c13b5f2": "totalReceive()", +"6c143862": "getCurrentId()", "6c1475ad": "tryAdvance()", "6c14bb42": "buyAutos(uint256)", "6c14f2d1": "m_ETHPriceLastUpdateRequest()", "6c150f42": "initLeftICOTokens()", +"6c156a84": "lowerTotalSupplyOfLPTokens()", "6c15e8e6": "GlobalConstraintRegistrar(int256)", +"6c161353": "changeAuthereumProxyBytecodeHashMapping(bytes32,bytes32)", "6c169818": "isFreezeAccount(address)", +"6c169b0a": "alterAddon(uint256)", +"6c16a031": "_getCollateralRequired(address,address,address,uint256,uint256)", +"6c16b545": "createOrder(address,uint256)", "6c16c740": "Start9()", "6c172095": "gameCenter()", +"6c1743e7": "setPercent(uint256,uint256,uint256,uint256,uint256)", +"6c174ed8": "mint(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "6c17729b": "JoygoEOS(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", "6c17b018": "airDrop(uint32,uint64)", +"6c17da29": "balanceSavings()", "6c182e99": "lastTokenIsTransferableDate(address)", "6c188593": "setMinBetAmount(uint256)", "6c189c46": "releaseAmisToken()", "6c18cc1e": "firstSellHSShop(uint256,uint256,uint256)", +"6c192487": "getPartnership(uint256,uint8)", "6c194b59": "lastTransactionRec()", "6c197ff5": "sell(address,uint256)", "6c19e783": "setSigner(address)", "6c1a5b8c": "TOKEN_TARGET()", +"6c1ac9de": "updateFarmExposure(address)", +"6c1ae0d8": "PR_Address()", +"6c1b80e3": "twap(uint256)", "6c1c6d93": "setVipAddress(address,address)", "6c1c86f7": "PlanEX()", +"6c1cdb22": "bridgeSpecificActionsOnTokenTransfer(address,address,address,uint256)", +"6c1cf288": "BetCancelled(uint8,uint256)", +"6c1cf482": "onChangeBlockTimeAverage(uint256)", "6c1d0157": "distributeMoney(address,address,uint256)", +"6c1d0277": "TargetWeight(address)", +"6c1d13d3": "userPerPaid(address)", "6c1d4fd9": "advisorsTokensThirdReleaseTime()", +"6c1d9a6d": "approve_67(address,uint256)", +"6c1de8a5": "Owneed()", "6c1e039a": "playerRoll(uint8,uint8,address)", +"6c1e3a2c": "onUseOldName(uint256,address,bytes32,uint256)", +"6c1e704b": "cd_pool_cycle()", "6c1f05d2": "breakIdMaintenance(int128,address)", "6c1f27fe": "icoBonus5()", "6c1f2fb3": "ico3Sold()", +"6c1f306d": "postNr()", "6c1ff101": "Crowd()", +"6c201685": "Transfer(address,address,address,uint256,bool)", "6c204fd7": "certifyMany(bytes32[])", "6c2066bf": "MAX_TOKENS_ADVISORS_PARTNERS()", +"6c206e71": "srcDebtLock(bytes32,bytes32,bytes32,bytes,bytes32)", +"6c207480": "setValues(address,uint256,uint256,uint256)", +"6c208a53": "AddLiq()", +"6c20ae26": "wrappedNFTFactoryAddress()", "6c20ceb4": "DeltaChainToken()", "6c20d755": "getItemRafflePlayers(uint256)", "6c20fcdd": "MerkleTreeRootAdded(uint8,bytes)", "6c2187e7": "GameEnded(uint256,address,uint256,uint256,uint8,uint8)", +"6c21f3c9": "liq(uint256,address[])", +"6c223dc4": "getres1EthToDaiReserves100Eth()", "6c224487": "DEHT()", "6c226eef": "_processGameEnd()", +"6c23077d": "updateProject(address,address)", "6c231060": "buyCar(uint256)", +"6c232b62": "initMISOLiquidityLauncher(address,address)", +"6c2342fd": "daysParticipatedLength(address)", "6c237c1c": "admin_token_burn(uint256)", +"6c238843": "adminProfit(address)", "6c23c7b0": "canOperatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", +"6c23d4b9": "getStakedBalance(address,address)", "6c2412ae": "GetChipInfo(uint32)", "6c241bb1": "getCityData(uint256)", +"6c2443fd": "totalTimeLockTokens()", "6c24a76f": "getAvailableBalance(address)", "6c24c87d": "latestSenderOf(uint256)", "6c24d0e6": "toTimestamp(uint256,uint256,uint256,uint256,uint256,uint256)", "6c24e2db": "maskpot()", +"6c252eb2": "minRebalanceInterval()", +"6c25b346": "dai(address)", "6c26493c": "MyTestToken1()", "6c265dc3": "calcFeeE8(uint64,uint256,address)", +"6c2692cb": "_removeLiquidity(address,address,uint256)", "6c26df09": "addFootballMatch(uint256)", +"6c2701ac": "rewardlimit()", "6c27149f": "testInt(uint256)", "6c27b211": "registerBalanceForReference(address,uint256)", +"6c27c892": "isMarketResolved()", +"6c282993": "setUserId(uint256)", "6c286ff1": "removeCrowdsales(address,address)", +"6c28a7cc": "updateGsnFee(bytes4,uint256)", +"6c28dd47": "REWARD_END_BLOCK()", +"6c28e349": "initialize(address,uint256,uint256,uint256,address)", "6c28faee": "migration(address,uint256,bool)", "6c295936": "changeOptional(uint40,uint64)", "6c295e34": "Add_Doctor(uint256,uint256,string,string,string)", +"6c29847b": "addressOfBurnedNest()", +"6c29b781": "enterWithPermit(uint256,bool,uint256,uint8,bytes32,bytes32)", "6c29d714": "totalMarketplaces()", +"6c29ddb5": "getUsdcSplitValues(uint256)", +"6c29ed79": "ReturnEvent(uint256)", "6c2af4e5": "MithrilAxe()", "6c2b04fd": "isGovernment(address)", "6c2bcfdd": "MAXSALESCAP()", "6c2c5a19": "addCarSigned(string,string,string,uint16,string,address,bytes32,bytes32,uint8)", +"6c2c8f96": "beneficiaryFeePercent()", +"6c2ce2cb": "tradeEtherForERC20(uint256,address,address)", "6c2d5d26": "symbol(address,bytes32)", +"6c2db83f": "mintTeamAndAdvisorsYear1Part5(uint256)", +"6c2e3424": "tfk()", "6c2ec9ef": "guess_tx(bytes32)", +"6c2eefe1": "auctionTemplateId()", +"6c2ef524": "getDIDOwner(bytes32)", +"6c2f0d53": "UNLOCKED()", +"6c2f12e6": "UpgradeOthersToLevel3FromLevel2(address[])", "6c2f64fe": "removeContractAddress(address,address)", +"6c3012fe": "whitelisted_Cornerstone(address)", "6c303e1b": "Bitescia()", "6c3051c9": "setWonTeam(uint256)", "6c30ba53": "setTitulaire_Compte_4(uint256)", "6c30d170": "renounceIssuance()", "6c30f765": "testing(uint256)", +"6c3167e8": "file(bytes32,uint256,address,uint256)", +"6c317232": "setDeveloperFee(uint256)", +"6c321c8a": "utilizationRate()", "6c326a46": "prizeFundHWC()", "6c32c0a6": "gap()", "6c32e01c": "sendJackpot(address,uint256)", +"6c332503": "getProjectDescription(uint32)", +"6c3378dc": "feePrices(uint256)", +"6c337d78": "OnTV(address,address,string)", +"6c33d023": "CrowdsalePurchaseBonusLog(uint256,uint256,uint256)", "6c33e7eb": "setMockAddress(bytes4,address)", +"6c340d98": "_sz_sint32(int32)", "6c341889": "toUint(bytes,bytes,uint256)", "6c343afc": "destTokens(address)", "6c343ffe": "withdrawfunds()", +"6c346590": "JOYtoyMachine(uint256)", +"6c348498": "LogRewardVaultContractUpdated(address,address)", "6c349e57": "addrunmoney(address,uint256,uint256,uint256)", "6c34c97a": "setFIRST_STEP_LIMIT(uint256)", +"6c35c2b8": "RealmOfferAccept(uint256,uint256,address,uint256)", +"6c35dda7": "TokenTransfer(uint256)", +"6c361865": "approveContractAccess(address)", +"6c36511a": "validators(bytes)", +"6c36581c": "maxBassets()", +"6c376a4d": "totalUserReward(address)", "6c376cc5": "maintenance()", "6c3772fd": "totalpaidout()", +"6c37a4af": "setAddresses(address,address,address,address,address,address,address,address,address,address)", "6c3824ef": "removeTokens(address[])", +"6c386d62": "PharaohGameTokensMinted()", +"6c388e54": "gasTokenReceiver()", "6c38d4e4": "pauseMint(uint256)", +"6c3916be": "S_INTEREST_EARNED()", "6c3919fc": "getProviderCurrentRate(uint256)", "6c39b7ee": "gamesPlayed()", "6c3a208d": "VistaToken()", @@ -62058,41 +113529,83 @@ "6c3aaab7": "snailPot()", "6c3aacf9": "getTokenToEthOrder(uint32)", "6c3b6591": "right83(uint256)", +"6c3bb6cd": "calcDiscount(uint256,uint256,uint256)", "6c3c221b": "setFunctionTwoPrice(uint256)", +"6c3c4f4f": "TIMESTAMP_OF_20190201000001()", +"6c3ce676": "setr3(uint256)", +"6c3de1da": "OnShareProfit(address,uint256,uint256)", +"6c3e6036": "removeDIDProvenanceDelegate(bytes32,address)", "6c3e6a75": "forceBonds(address)", "6c3e6e0c": "iconomiTokenSupply()", "6c3e8e19": "_vestedAmount(address)", "6c3ea721": "memberHasRight(address,string)", +"6c3ec788": "addOrder(int256,int256)", +"6c3f865d": "pendingMedal(uint256,address)", +"6c3fb03d": "feeTokenBalance()", "6c4019f4": "createContest(string,address,uint32,uint64,uint64,uint128,uint128,uint32,uint32,uint8,uint32[])", +"6c401a13": "linkBulk(bytes7[],uint256[],bytes)", +"6c40393e": "approve_586(address,uint256)", "6c4040c5": "firstSaleSpenderTxDetails(uint256)", +"6c4056d0": "addSchainByFoundation(uint256,uint8,uint16,string)", "6c419326": "STC(address,uint256,uint256,uint256)", +"6c429a95": "LogResult(bytes32,address,uint256,uint256,uint256,uint256,uint8,uint256,bytes,uint256)", +"6c42b562": "getBestDexForSwap(address,address,uint256)", +"6c42deef": "sendToken(address,string,uint256)", +"6c42fa66": "getPlayerPairCount(address)", +"6c435494": "organizationName()", "6c43a2ca": "increaseAllowance(address,address,uint256)", +"6c43f88a": "UniswapGold()", +"6c442a35": "pendingMomo(uint256,address)", "6c4470fb": "participants()", +"6c449685": "startClaim(uint256,uint256,uint256,uint256,uint256)", +"6c4551e3": "updateMarketStatus()", "6c456d0f": "getERCContractAddress()", "6c457528": "createUsername(string)", +"6c46069c": "CalculateKiTraining(uint256,uint256)", +"6c460899": "relayRespondLimit()", +"6c4631e5": "rebased(uint256)", "6c463635": "getDistValues(string)", "6c464c3d": "recieveRelocation(address,uint256)", +"6c4668ea": "setMap(uint256,uint256)", "6c46a2c5": "addOwners(address[])", "6c46ae22": "phasePublicSale3_To()", +"6c46eb45": "UserUpdated(address,bytes32)", +"6c47a163": "UpdateUsdEthRate(uint256)", +"6c47c7ed": "getSave(uint256,uint256)", +"6c47e36f": "storedAddresses(bytes32)", +"6c47e98a": "getSwapConfig(string)", "6c4820bb": "callModifiedWithdraw(uint256)", +"6c484042": "stopDeliveringOrder(uint256)", +"6c4876a5": "setSusafePerBlock(uint256)", "6c48a097": "amount_investments()", "6c494843": "multiAccessChangeOwnerD(address,address,address)", +"6c495489": "_increaseAllowance(address,address,uint256)", "6c4b3197": "getSecureFees()", +"6c4ba760": "osms(bytes32)", "6c4be791": "hasAirdrop(address)", "6c4bf16b": "icoOwner()", +"6c4c02ea": "lastBlockFarmNum()", "6c4c174f": "hack(address)", +"6c4c94a5": "ZhongYingAddress()", "6c4ceaff": "getSourceHash(uint256,uint256,uint256)", "6c4d032e": "SOFTCAP_TIME()", "6c4d0c00": "wasGoalReached()", +"6c4d34eb": "approve_26(address,uint256)", "6c4d4f21": "setVotingProxy(address)", "6c4d7c59": "getBetProps(bytes32)", "6c4db7cc": "sendFoundersBalance(address[],uint256[])", "6c4dfffe": "BIKS(uint256,string,uint8,string)", "6c4e5c86": "decreaseLockBalance(address,uint256)", +"6c4e75ad": "openETHVault(uint256)", +"6c4e80b6": "isPartiallyLiquidated()", "6c4e838a": "wantNewTokens(uint256[])", "6c4e86af": "dailyGrowth_ppm()", +"6c4ea929": "getDepositEquity()", "6c4eca27": "tokenTransfer()", +"6c4ecd84": "issueCertificate(address,uint256)", "6c4ef21e": "canUnstakePartial(address,uint256,uint256,bytes8,uint256,uint256,uint256,uint256)", +"6c4f1f5f": "teamVestingAddr()", +"6c4f28aa": "updateBurnGasHelper(address)", "6c4f5e51": "testingContracts2(string)", "6c4f8c65": "DeviceIsActivated(address)", "6c4fbaa4": "requestCore()", @@ -62100,50 +113613,79 @@ "6c5077b1": "MintPaused(bool)", "6c5091e3": "getERC721AddrPawn(uint256,address)", "6c50bc2e": "getGeneralLength()", +"6c50c11e": "getSuperUser()", +"6c50dbba": "taxSingle(bytes32)", "6c510377": "transferOutAllEthers()", +"6c5103e4": "changePoolWallet(address)", +"6c515bce": "checkEmergencyPerson(address)", "6c51af67": "setPOOL_edit_17(string)", +"6c522c58": "TadToken()", "6c525b13": "unregisterSelf(address)", "6c525d04": "endMigration()", "6c526503": "AmountRaised()", "6c52660d": "checkIfNameValid(string)", +"6c5267c3": "matchRequestAsBorrower(uint256,uint256)", +"6c526d85": "getSubscription(address,address,bytes32)", "6c530ee3": "weiPerEth()", +"6c531712": "maxMintCumulation()", "6c5376c9": "addPassword(string,string,string)", +"6c540baf": "accrualBlockNumber()", +"6c542bc7": "verifyContractor(address,address)", "6c543c08": "_emitSkillCategoriesSet(address,uint256,uint256)", +"6c545348": "requestCreateOrder_ETH_TKN_WithPermit(address,uint256,uint256,uint8,bytes32,bytes32,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)", +"6c5681cf": "transferMutantToYmenStaking()", "6c56a3f1": "startRelease()", "6c56bf3e": "CreateARCD(address,uint256)", "6c56bfc0": "InitiateGame()", +"6c571933": "checkPaymentFor(address)", "6c572104": "TotalSantaCoinsGivenByNorthPole()", "6c57c01f": "MAXIMUM_CONTRIBUTION()", "6c57dbaa": "_max(uint256,uint8,uint256)", "6c57f5a9": "isDisabled()", +"6c580801": "startTrade()", "6c587491": "playGame(address,uint256)", +"6c587b47": "add(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256,uint256)", +"6c589218": "popUpdatedStorageSlot()", "6c595451": "addApp(string,address,uint256)", "6c597e41": "getCreditBitAddress()", +"6c59bd0c": "updateTime(uint256)", +"6c59c5cc": "teamValue()", "6c59fb29": "allocateToken()", +"6c5a339c": "reClaimUnsoldTokens(address,uint256)", +"6c5a34bd": "reward3()", +"6c5a4400": "EthReleased(uint256)", "6c5a7d1e": "setDisabled(bool)", "6c5aad6e": "fetchOrderByIdWithMerchantByAdmin(string,address)", "6c5aaf50": "getDelegateDetails(address)", +"6c5abaf9": "yaLINKDebt()", "6c5af719": "getHoldEarnings(address)", "6c5b685f": "icoPart()", +"6c5bc5c6": "burnBond()", "6c5bde2a": "CoInsureBlockToken()", "6c5c671f": "cancelIntl()", "6c5ca1fa": "exchangeRateRoundOne()", +"6c5ccfb0": "getLiftoffEngine()", "6c5ccfe8": "distributeFundsInEscrow(address,address,uint256,address)", "6c5d2787": "setTymTokensPercent(uint256)", "6c5d6156": "burn(address[])", +"6c5dbfa3": "parcelUsd()", "6c5dc78b": "setPublicSaleFinishDate(uint256)", "6c5dee17": "getFileAt(uint256)", +"6c5e0683": "ContestClosed(uint32)", "6c5e9ac1": "cmpEq(uint256,uint256,bool)", "6c5e9e18": "_phase1Supply()", +"6c5eb382": "tittyApproveIndex(uint256)", "6c5f71c7": "numberOfPingsReceived()", "6c5f8394": "DeneumToken()", +"6c5f8e11": "getCardsInPack(uint256)", "6c609906": "getTotalTokensAgainstAddress(address)", +"6c60c8e3": "DYDX_DUST_FEE()", "6c6101fd": "ContractManagementUpdate(string,address,address,bool)", "6c610f53": "getMinUnitPrice(uint8)", "6c617048": "reinvestFor(address)", @@ -62151,179 +113693,323 @@ "6c626ec6": "removeWinner(address,address,address)", "6c6288e4": "Thechampcoin()", "6c6295b8": "setValidRateDurationInBlocks(uint256)", +"6c62e81a": "initiateTermination(bytes32,uint32,uint256,string)", +"6c63692c": "affiliateFee_()", +"6c63e114": "setNextLeval()", "6c64a678": "unfreezeToken()", +"6c64a6d1": "logBuyTicketSumary(address,uint256[],uint256)", +"6c64edee": "setValid(bool)", "6c658a2c": "UpdateICOPhase(address,uint256,uint256)", "6c65c455": "swapETHMKR(uint256,uint256)", "6c65fd6a": "isFreezer(address)", +"6c6633b9": "getLoanee(address)", +"6c665a55": "borrow(address,uint256,address)", +"6c66f785": "setUnissuedFXB(uint256)", "6c675ae6": "tokens_buy()", "6c677d82": "SpentTokens(address,address,uint256)", +"6c67aa46": "available_star_count()", +"6c67b5bd": "getSupportListLength()", "6c68b5d5": "TicketOwner(uint256,uint256)", +"6c68c0e1": "undelegate(uint256)", "6c68c837": "verifyBalanceProof(address,uint32,uint192,bytes)", "6c690142": "redeemAllowedInternal(address,address,uint256)", "6c698882": "getActualNum(uint256)", "6c699905": "revealWinner()", "6c69ab24": "multitokensCount()", +"6c69f41d": "getHash(address,bytes)", +"6c6a0a0e": "wanFarmImplementation()", +"6c6acccb": "UnregisterScheme(address,address,address)", +"6c6b11f3": "FundTransfer(uint8,address,uint256,bool)", "6c6b23d2": "updateBalances(address,address)", "6c6b298a": "getMigrateInBonusIfInForkWindowValue()", +"6c6b33d5": "setVote(address)", "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)", +"6c6e401c": "withdrawFeeStatus(address)", "6c6e5108": "StoriqaCash()", "6c6eb9d1": "base(uint256)", "6c6f1d93": "getContractCreationValue()", "6c6f31f2": "allow(address,uint256)", "6c6f360e": "userRegister()", "6c6fbd70": "EnergiToken()", +"6c6fd7fa": "_balancesUSDT(address)", "6c7018cf": "single_card()", "6c706093": "logUniverseCreatedCalled()", "6c70abda": "use(uint8,uint8,uint8,uint8[176])", "6c70ad0d": "PublicMineCallsCount()", "6c7113e4": "getFundManager()", "6c712471": "testControlRetractLatestRevisionEnforceRevisions()", +"6c7131a6": "finishSpin(address)", +"6c713370": "artemClaimThreshold()", +"6c71aa45": "changeBonusValueInWei(uint256)", "6c71b1aa": "setGasReq(uint256)", "6c71d01d": "ratings(bytes32)", "6c720446": "isVotingPrepare()", "6c7272ce": "registerVendor(address,address)", +"6c7290ab": "transferFallBackToken(address,address,uint256)", "6c73d230": "logResult(string)", "6c741950": "setTTL(uint256)", "6c749c26": "EXA()", +"6c74d676": "releaseCollatteralRatio(uint256)", "6c74e341": "setFoundingTeam(uint256[],address[])", +"6c750432": "onFinalized()", "6c751622": "MacQueenToken()", +"6c751897": "sellVoucher(uint256)", "6c7521cb": "updateReputationScoreInBulk(address[],uint256[])", +"6c7575ae": "getFellowshipSize()", +"6c7674ba": "wallets2(address)", "6c767f20": "playerOneReveal(bytes32,bytes32)", "6c768200": "burnByOwner(address)", "6c76b8f4": "_changeReward(uint256)", +"6c76c0c9": "searchFlight(string,string)", +"6c773973": "NewPendingAnchorAdmin(address,address)", +"6c775dac": "open(address,address,uint256,address,address,uint256,address,uint256)", "6c779d57": "levelSplits(uint256)", "6c77f989": "joinLottery()", "6c780868": "getBurnLine()", "6c784995": "getBeneficiaryMarket()", "6c786b65": "bonusAccountCount()", +"6c786f26": "getReferralsInfo()", "6c787229": "availableOwnerWithdraw()", "6c788a0d": "bookingFee()", "6c789092": "Resource(bytes32,bytes32,bytes32,address)", "6c78cb81": "ETCToken(address)", "6c78da22": "getPrefixPrice(string)", +"6c797bfd": "removeContractAddress(address)", "6c79e379": "setGallerySevenPrice(uint256)", +"6c79fc80": "addDebt(address,uint256,uint256)", +"6c7a9d24": "withdrawAllFor(address,uint256,uint256,bytes32[])", +"6c7ac637": "doSub(uint256,uint256)", "6c7afaba": "regSpots(uint16,uint16,bytes32)", +"6c7b43b3": "postTimeLockActive(uint256)", +"6c7b4ef8": "whitelistTransfer(address)", +"6c7b7f2e": "getDepositors()", +"6c7b9f69": "setLockWeek(address,uint256,uint256,uint256,uint256)", "6c7bc902": "tgrCurrentPartInvestor()", +"6c7bcb47": "ownerWitETH()", "6c7c7c73": "bePure(uint256,uint256)", "6c7c909f": "FreshWaterFlow()", "6c7ca99f": "RequestBankrollPayment(address,uint256,uint256)", "6c7cc6d8": "sell(uint256,address,bool)", "6c7d4c4c": "unwhitelistAddress(address,address)", +"6c7dc0bc": "popup_period()", "6c7dde15": "validPayBuff()", "6c7de422": "investmoretokens()", "6c7e0236": "isNotaryVeredictValid(address,address,address,bool,bool,bytes)", "6c7e7082": "overflowAmount()", +"6c7eb274": "Vote(address,uint256,uint256,uint256)", +"6c7ee4ed": "strategyFeeMax()", "6c7f1542": "balanceOf(bytes32)", +"6c7f17fb": "patronageOwedRange(uint256)", +"6c7f1e9f": "updateUTYToken(address)", "6c7f3f17": "totalBuys()", +"6c80cf81": "renounceBridger()", "6c811247": "showPlayerSafeByAddress(address,uint256)", +"6c813d29": "croDefiSwapCall(address,uint256,uint256,bytes)", "6c814509": "setAdAccount(address)", +"6c816233": "updateSocialURI(string)", "6c81fd6d": "AddModerator(address)", +"6c823242": "issuanceIsPaused()", "6c82337e": "payJackpot4()", +"6c824487": "verifiers(address)", +"6c8244b8": "contractExists(bytes32)", "6c825035": "withdrawLRC()", +"6c825327": "inToken()", +"6c829c6e": "getRewardDays()", +"6c82b712": "getBidHash(uint256,uint256,address,uint256,uint256)", "6c830f4b": "getCompletedTasks()", "6c83444d": "FLOQI()", "6c8381f8": "candidate()", +"6c839135": "transferBondToContact()", "6c8429fd": "jpMinBet()", "6c843605": "BrownieCoin()", +"6c848dda": "kearn(address,address,uint256)", "6c84a4bf": "tokenContributionCap()", "6c84ae04": "setFirstYearAllowancePercentage(uint8)", "6c85acec": "RNCTokenERC20(uint256,string,string)", "6c85c727": "removeBankroll(uint256,string)", "6c85cf67": "canTransfer(address,address)", +"6c85e319": "lastBlockNr()", "6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "6c86ac5a": "getPublicData(uint256)", +"6c86cfcc": "coverPool()", "6c8716d8": "etherLowLimit()", +"6c872e3d": "tokenuse()", "6c876e5d": "s2(bytes1)", "6c8830c5": "_maxtotalSupply()", +"6c88beeb": "userToAddress(bytes32)", +"6c899b49": "_noTokensToSell()", +"6c89ae84": "swapInit(address)", "6c8a59f2": "addresses6(uint256)", "6c8ae38c": "r()", "6c8b052a": "numStakers()", "6c8b37eb": "MTRCToken(address,string,string,uint256,uint256)", "6c8b4e60": "communityLock()", +"6c8b5fe0": "EthozAdm(address,uint256)", +"6c8b703f": "tokenURIs(uint256)", +"6c8bc9fe": "removeClaimOnBehalf(address)", +"6c8c1388": "toshiCash()", +"6c8c1cb0": "addRecipe(uint256,uint256[],uint256[],uint256,uint256)", "6c8d0b1e": "getSubscriberStatus()", "6c8d0bcf": "getUserDAOsId(address,uint256)", +"6c8d4360": "getUniswapV2ConnectorsAmountByPoolAmount(uint256,address)", "6c8d65dc": "phepsToken()", +"6c8d6c58": "get_vote_variants(uint256)", "6c8dea3b": "claim_ENS_name()", "6c8e44c3": "ProductionUnitToken(address,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", "6c8e53e0": "PreSale()", +"6c8ed122": "processExternalMain(uint256,uint8,uint32,uint32,uint32,uint256,bool)", "6c8f093d": "PayForServiceCHLEvent(address,uint256)", +"6c8f1b91": "contract_signature()", "6c8f455c": "checkMembership(bytes32,uint256,bytes32,bytes)", +"6c8fae7b": "setStimulusTimingParameters(uint256,uint256)", +"6c901d1d": "stakeCar(uint256)", +"6c905ec9": "testert(string)", +"6c907b7f": "updateRandomizerAddress(address)", "6c90c3df": "setCanClaim(bool,bool)", +"6c90e818": "globalMinQuorum()", "6c90fe09": "CcoindDigital()", +"6c90fedb": "getCoordinatorEndpoint(address)", "6c912080": "minListingSeconds()", +"6c9128e2": "NFYToken()", "6c922038": "CMAPToken()", "6c9230db": "getCurrentTimestamp()", +"6c9231e1": "_item()", +"6c92a008": "fairDistributionTime()", +"6c92c2bf": "changePrice(int256,int256,int256)", +"6c92d0d1": "getTokensData(address[])", +"6c92df2a": "EthashValue(uint256)", +"6c92e85a": "setROTMAGGOTPair(address)", +"6c933346": "buyToken(address,uint256,uint256,address,bytes32,address)", +"6c933b7f": "availMint()", +"6c945221": "initialize(string,string,uint8,address,uint256)", "6c94d0e4": "INBETToken()", "6c953719": "CCASH(uint256,string,string)", +"6c956a54": "withdraw_donated_dust()", "6c958f74": "tokensOfferedOf()", +"6c95f7e2": "stimulus(address)", "6c963fc7": "PoWAdvCoinToken()", "6c965a81": "claim(address,bytes32,string,bool,uint256,bytes32,uint256,bytes)", "6c973248": "getVoteCount(uint256,uint256,uint256)", "6c9740c1": "transferOwnership(address,uint8)", +"6c977c32": "getProductAddress()", "6c9784b1": "_getTokenRaised(uint256)", "6c9789b0": "finalize(bool)", "6c97a812": "UTExchangeRate()", "6c97b731": "TimeEndChanged(string,uint256)", "6c97c237": "firstSellSaddleShop(uint256,uint256,uint256)", "6c981488": "paymentPeriods()", +"6c985a88": "depositExcess()", +"6c98c2b9": "note_contract()", +"6c9958e0": "getlist(uint256)", "6c996bbd": "disputeOpened(address)", "6c99b0da": "setFWDaddrETH(address)", +"6c99f624": "MaxSlippage()", "6c9a1e2a": "setPOOL_edit_12(string)", +"6c9a4e32": "RipcordRefund(address)", "6c9a5c61": "resolveExpiredBets(uint256)", +"6c9ab515": "sendBackRest()", "6c9c1d41": "checkServiceFee(address)", "6c9c2faf": "getSupply()", "6c9c5944": "freeze(address,uint256,uint256,uint256)", +"6c9c7cb6": "calcPrincipleValuation(uint256,uint256,uint256)", "6c9c97d8": "refundByToken(uint256)", +"6c9c9c7f": "Purchase(address,uint256,bytes32)", "6c9cb82f": "freeCash()", +"6c9cd097": "hasRole(string,address)", +"6c9d3c83": "ownerappeal(address,uint256)", +"6c9d43b6": "batchTime()", "6c9d99da": "teamTokensWallet()", +"6c9db773": "instantiate(address,address,address,uint256,uint256,uint256,uint256,address)", +"6c9e22d1": "whitelistAddr(address,bool)", "6c9e27d6": "ALLOC_WINGS()", "6c9e89b6": "addVesting(address[],uint256[],uint256[])", "6c9eafe7": "stillAllowed()", +"6c9ec78c": "tCA()", +"6c9ed8c8": "birdAccrued(address)", +"6c9f026f": "setPowerBurnRate(uint32)", +"6c9f0b47": "mis()", "6c9f65c5": "getBidInfo(uint32)", "6c9fa59e": "shareToken()", "6c9fca89": "updateAppInstance(bytes32)", +"6c9fd5f2": "marbleNFTContract()", "6ca0101e": "unopened_bid()", +"6ca0189e": "premiumHp()", "6ca06072": "getAttributeAdminAddr(address,bytes32)", "6ca0a099": "getInitialBlockHeight(uint256)", "6ca0f321": "setValue1(uint256)", +"6ca0f814": "executeTransaction(address,bytes)", "6ca100fb": "firstWeekMainICOBonusEstimate()", +"6ca1339c": "m_Dist_Address5_0()", "6ca13df1": "decreaseOwnershipTokenCount(address,address)", "6ca1f933": "setTest(uint256)", +"6ca20725": "TOKENS_SPONSORS()", +"6ca265b0": "registerEndpoint(uint64,string)", +"6ca2fc1b": "getBurnedStablecoin(address)", "6ca32280": "percentageBuyBackFund()", +"6ca33109": "unstakePenaltyPercent()", "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)", +"6ca3fdb7": "canRetreat(uint256)", +"6ca40093": "createNewAsset(uint256,address,uint256,uint16,uint8,uint8,uint8[10])", +"6ca402aa": "setUInt(bytes32,uint256)", +"6ca4110e": "queueFactory()", +"6ca4def4": "beneficiaryBought(address)", +"6ca506fd": "ReconToMicro()", +"6ca5161b": "updateMerkleRoot(uint256)", +"6ca534ea": "updateMyDiscountOf()", "6ca562d6": "switchCompatible223ex(bool)", "6ca596fa": "isPreICOClosed()", "6ca5b5b0": "r1()", "6ca5bdf2": "testIntDynArray(int256[])", +"6ca605a5": "transferSupervisor(address)", "6ca621bd": "setEmbassy(address)", +"6ca637ef": "leekStealWins_(uint256)", +"6ca6d998": "REBASE_CYCLE()", "6ca78a1c": "anyRequestAvailable()", "6ca78a1e": "setBorrowerReturnEthPerFiatRate(uint256)", "6ca7b99b": "getDirection(uint256,uint256)", "6ca7c216": "gas()", +"6ca95a4e": "networkToken()", +"6ca95e44": "betBalance()", "6caa2bda": "OxyToken()", "6caa736b": "fundDeposit()", "6caabc6f": "addCompany(string,address,uint256)", +"6cab0f82": "isUnrestrictedTransfer(address)", +"6cab5055": "generalExpTest(uint256,uint8)", +"6cab5e5b": "ticketsLeft()", +"6cabc400": "setA(int256)", +"6caca4a7": "distributeWpcPaused()", "6caca63a": "WhiteTigerToken()", "6cad3fb0": "updateFeePercentage(uint256)", "6cadd040": "EtherAuction()", "6caddb04": "orders(uint256,address)", +"6cae5055": "addAccount(int256,int256)", "6cae8f67": "setSellableToken(address)", "6caed305": "changeBonus(uint256,uint256)", +"6caed85f": "createMultiSig(address[])", "6caf25ce": "price1()", "6caf3673": "getPlayerSpaceshipBattleStakeById(uint256)", +"6caf9bf5": "searchName(string)", +"6cafdff9": "estimatedBlocksIntervalRewards(uint256,uint256,uint256)", +"6cb020f8": "LogMintingFinished()", "6cb04993": "forceNeuroChainAddress(address,string)", +"6cb0c947": "getOperatorAccountArgs(uint256)", "6cb0e9f0": "TXToken(address)", +"6cb0f8c1": "MDN()", +"6cb136b0": "setStateSender(address)", "6cb136ba": "isActive(uint16)", "6cb1630f": "withdrowTokens()", +"6cb18d4b": "uniswapETHforSETH(uint256)", +"6cb20212": "setUniOracle(address)", +"6cb21af5": "isLessRisky()", "6cb24199": "withdraw(bytes32,uint256,address,uint256,address)", "6cb30fee": "nettingContractsByAddress(address)", "6cb31171": "_currentHalfYear()", @@ -62331,138 +114017,246 @@ "6cb3c94e": "Filler()", "6cb3d30a": "triggerTryAuth()", "6cb3e8ef": "getApprovers()", +"6cb43cdf": "getRCodeMapping(address,uint256)", +"6cb455b7": "setStakingLimit(uint256)", "6cb45694": "LogDisbursement(address,uint256)", +"6cb503b6": "MinHoldToReward()", "6cb520c6": "_play(string,uint256)", "6cb5291e": "ICO_PRICE1()", "6cb5714c": "_sendByTranche(bytes32,address,address,address,uint256,bytes,bytes)", +"6cb58c93": "leave(address,uint256)", +"6cb58ce1": "queue2Presence(address)", "6cb5d070": "getCoinsSinceLastHatch(address)", +"6cb64d8f": "totalDebtInStrategy()", "6cb69c2c": "setDevTokensWallet(address)", "6cb69f42": "getSystemInfo()", "6cb6ea82": "CBITokenCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", "6cb7223c": "maxPurchaseOnce()", +"6cb74fa6": "setMaxCandidacy(uint256)", "6cb76408": "returned()", "6cb78983": "purchaseMIT(address)", +"6cb79c5f": "depositNomins(uint256)", +"6cb8135b": "forBurnRate()", +"6cb83d3d": "purchaseRandomShip(string)", "6cb90a2c": "pre_ico()", +"6cb91c08": "advertisingFund()", "6cb942ab": "GameItemNew()", +"6cb96287": "collectFundsRaised()", +"6cb99650": "onHarvest(address,uint256)", +"6cba0675": "showHello()", +"6cba13f3": "timeLockPoolAddr()", +"6cba31be": "adminWithdrawERC20()", "6cba45b8": "setDayFirst()", "6cbad471": "Rappo()", "6cbae51b": "firstPreSaleDate2()", "6cbaecbd": "normalRoomMin()", "6cbb1afa": "setTokenBag(address)", +"6cbb2e03": "checktimediff2()", +"6cbb5ae3": "arithmetic(uint256,uint256)", +"6cbb6050": "slash(uint256,uint256,uint256)", +"6cbb721f": "canLock()", "6cbb9d19": "releaseEscrow(bytes20,address)", "6cbc2ded": "endGame()", "6cbc9ca0": "ADDR_OWNER()", "6cbceeec": "theAddress()", +"6cbcf9a3": "closeCause(uint256,uint256)", +"6cbd45e1": "whoAreVoting()", +"6cbd6c37": "calcPenaltyMultiplier(uint256)", +"6cbd94de": "tokenIdOfOwnerByIndex(address,uint256,uint256)", "6cbdb7d0": "takers(uint256)", +"6cbe01ca": "withdrawableCollateral()", +"6cbe252e": "paySuperprize(address)", "6cbec01c": "Steel()", "6cbef5a7": "sumVote()", "6cbf3c8c": "ICO_POOL()", +"6cbf6f97": "setSynthAddress(string,address)", +"6cbf6fb8": "liqPenaltyCounterVaultE10()", "6cbf9c5e": "commitVote(uint256,bytes32,uint256,uint256)", +"6cbfd71f": "getFarmTemplate(uint256)", +"6cc014de": "s1()", "6cc03315": "getPaymentLogN()", "6cc09081": "getActualPrice()", +"6cc0cef6": "mint(address,uint256,string,string,address,uint256,uint256,uint256,address)", +"6cc12aeb": "getAllReserves(address[],uint256,uint256)", +"6cc13df8": "ActiveRegEth()", +"6cc1799b": "mintWeapon(uint32,uint32,uint32,uint32)", +"6cc1c69b": "getres1EthToUsdcReserves100Eth()", +"6cc20fc0": "page(address,uint256,uint256)", "6cc23437": "setIsContainerForFeeWindow(bool)", +"6cc23d94": "getContractionRate(address)", "6cc25db7": "ticket()", +"6cc29ea0": "getGroupById(uint256)", "6cc2c668": "_presaleEndTimestamp()", "6cc301e3": "permitted(address)", +"6cc306d8": "viewDoubleDividendPotential(address)", "6cc341f1": "getIndexOrder1(uint256)", "6cc37048": "EFFToken(address)", +"6cc37cbc": "valueChangeVal()", +"6cc39dee": "spinResult(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6cc3ec2a": "_ownertoken()", "6cc48d81": "_emitHeartBeat(bytes32,int256,int256)", "6cc5ab24": "digithothToken()", "6cc5f3ad": "getGames(uint256[])", "6cc5fdaa": "setBytes32(bytes,bytes)", "6cc61d86": "setSingleWithdrawMin(uint256)", +"6cc66412": "userAgainstVotes(uint256,address)", "6cc67aa5": "resetExplicitState(uint32,int64[2],int256,uint64,int8)", "6cc6971b": "setNewStartDate(uint256)", "6cc6cde1": "arbitrator()", "6cc70ee1": "GovernanceChangeMinApproval(uint8)", "6cc762d8": "lastWeiPricePerCWC()", +"6cc77244": "CreateKAA(address,uint256)", "6cc7d828": "investBalanceGot()", +"6cc84f6f": "unequip(uint256,uint256,uint256,string,uint8,bytes32,bytes32)", +"6cc8c590": "checkVerified(address)", "6cc919c8": "updateConfig(address)", +"6cc93648": "buy(uint8[5],string)", +"6cc93a2d": "izposojevalci(int256)", "6cc95f8d": "ALAX()", +"6cc9aaeb": "resumeNewLoans()", +"6cca423c": "Withdrawed(address,uint256)", "6cca5065": "QripplexToken()", +"6cca54da": "chand()", "6cca60ba": "gripWallet()", "6cca7023": "DoubleSend(address,address,uint256)", "6cca940a": "RusgasCrowdsale()", "6ccab1f3": "wwasCoin()", +"6ccae054": "rescueFunds(address,address,uint256)", "6ccb5d02": "getShareholder(uint256)", +"6ccbae5f": "nonceOf(uint256)", "6ccbb0ab": "withdrawBalances()", "6ccbdbf9": "getHodlAmount(uint256)", "6ccc3bdd": "whitelistBonusPercentage()", +"6ccca8e8": "preventClaimRewardsOnDeposit()", "6ccce7a8": "getCapOfWei()", "6ccd563d": "queueAuditRequest(uint256,uint256)", "6ccd5cbe": "getClassInfo(uint32)", "6ccd993b": "getDestroySharesFxpValueValue()", "6ccde640": "getGoodPreset(bytes32)", +"6ccdf9ff": "getUserView(address,address)", "6cce15d8": "ICOFails()", +"6ccf301a": "Depositors(uint256)", "6ccf93d3": "HeyueToken(address,uint256)", "6cd02297": "processOfflinePurchase(address,uint256)", "6cd05e41": "takeAllTheMoney(address)", "6cd0f102": "setHouseEdge(uint256)", +"6cd16c53": "LogNokuTokenBurnerCreated(address,address)", "6cd186ce": "setUncleSafeNr(uint256)", "6cd1b26c": "setQueue(uint256)", "6cd22eaf": "updateAuthority(address,bool)", +"6cd258b7": "addNotAllowTo(address)", "6cd2ad56": "distributeTo(address)", "6cd2b458": "splitsTotal(uint256,uint256)", "6cd2f731": "setTimePerPeriod(uint256[5])", +"6cd348ef": "getCompOracleAddress()", +"6cd388e7": "MIN_PRECISION()", +"6cd38db8": "gsg_foundation()", "6cd38ea0": "NebulasToken(address,uint256)", "6cd3d326": "getTotalChild(address,address)", +"6cd3e001": "stakingPoolV1RewardsLocked(address)", "6cd40993": "setNeironixProfitAddress(address)", "6cd44d55": "pushOrderOfVendor(address,uint256,bool)", "6cd49925": "currentLocation()", +"6cd4a8a4": "carModel()", "6cd51833": "initiateWithdraw(uint176,uint64)", "6cd522f2": "getContributionRNTB(address)", +"6cd55f9e": "Communityreleasetime()", "6cd56641": "EYrickCoin()", "6cd56878": "setDeveloperWallet(address)", "6cd5c39b": "deployContract()", "6cd6043a": "emitAndStore()", "6cd61739": "getbuyprice()", +"6cd67786": "testTokenWeth(address)", "6cd69864": "Total_Companies()", +"6cd6b09a": "submitStakingRewardsNotifyRewardAmountTx(address,uint256)", +"6cd6deba": "setSellerRewardDandy(uint256)", +"6cd76eeb": "BFX_PAIR_Reward_Ratio()", +"6cd799be": "vestingTimestamp()", "6cd7d86e": "setClaimRepository(address)", "6cd8015d": "setVestingWithDefaultSchedule(address,uint256)", +"6cd88cae": "ReconVaultSecurityStock()", "6cd8c204": "BuyEgg()", +"6cd8d790": "NewKing(address)", "6cd8f433": "canExport()", "6cd8f772": "fights()", "6cd8fa85": "burnTrusted(address,uint256)", "6cd902d0": "Casa()", +"6cd921a1": "setReturns(uint256,uint64,uint256,uint256)", "6cd9786a": "setCapETH(uint256)", "6cd98f30": "getResponseQueryType(uint256)", +"6cd98f3c": "get_buy_price(uint256)", "6cd9db29": "sub_matricola(string,uint256)", +"6cda375b": "changeFees(uint256)", "6cdacfc4": "startStage(uint256,uint256,uint256)", "6cdae459": "YuanBaoCoin()", +"6cdb0ac7": "paramChange(string,bytes)", +"6cdb1b75": "setCardsAddress(address)", "6cdb3389": "getEntriesCountForCompetition(uint256)", "6cdb711e": "ProposalAdded(uint256,address,uint256,uint256,address,uint256,uint256)", +"6cdc090f": "metaEvidenceUpdates()", +"6cdc3538": "reffered(address)", "6cdc644d": "CMTC()", "6cdcb1ca": "DEVELOPER_supply()", +"6cddae4e": "cloneStrategy(address,address,address,address,address,address,address,uint256)", "6cde3c75": "frozenAccountICO()", "6cde6380": "setHash(uint256,bytes32)", "6cde71ee": "enteredTotalAmount()", "6cde95ee": "getAccountAllowance(address)", +"6cdeefe3": "comments(address)", "6cdf4c90": "ownerSetMinBet(uint256)", "6cdf7cdf": "FRO()", +"6cdf804a": "canEndVoting(uint256)", "6cdfcc6e": "getTokenList(address,uint8,uint256,uint256)", "6cdffb3c": "fetchJugadas()", +"6ce05ea0": "setRewardsAllowed(bool)", "6ce066af": "Give(bytes32)", "6ce079fe": "getNumGames()", "6ce07efa": "AddSale(uint256,string,string,string,uint256)", "6ce0a6a4": "SafeBoxCoin()", +"6ce0aef3": "depositEtherToPool(address)", +"6ce0d5ed": "cantidades2(uint256)", +"6ce11d95": "getTokensWithReferral(address,address)", "6ce12737": "OX_TOKEN()", +"6ce13b61": "setOstanItManager(address)", "6ce1417e": "Fund()", "6ce15a54": "genericAction(address,bytes32[])", +"6ce15ba8": "zapOutToEth(uint256,uint256)", +"6ce1c4dc": "addConverter(address)", +"6ce1d315": "resetFeeAccumulated()", +"6ce2066c": "feeLess()", "6ce27c7b": "DECIMAL_INDEX()", "6ce37387": "KindAdsToken()", +"6ce3d2ad": "joinGainChain(address)", "6ce3fc06": "sendPrize()", "6ce41ab4": "Garuda()", "6ce4499c": "adjustCoins(address,int32,string)", +"6ce4814d": "returnPayoutFromSuspenseAccount(string)", "6ce4a9a8": "RAMTOKEN()", +"6ce5203d": "convertBackSushi(uint256,uint256)", "6ce5b3cf": "releaseHeldCoins()", +"6ce5edff": "multisig_contract()", "6ce62c61": "changeAllowances(address[],uint256[])", "6ce6833d": "test_updateKey_increaseNoHint()", +"6ce6c7b0": "_settlementOwing(address,bytes32)", "6ce768dd": "GetMainInvestor()", "6ce76ae3": "openOldCrates()", +"6ce77f35": "CreateBIU(address,uint256)", "6ce7e739": "getBonusRate(uint256,uint256)", "6ce912ab": "LongevityToken()", +"6ce95b90": "OnTokenBurned(uint256)", +"6ce9b49c": "rollover(address,address,uint256[],uint256[])", +"6ce9e4fe": "withdrawUnstakedBalance(uint256)", +"6cea158d": "depositGHT(uint256,address)", +"6cea271e": "setFaasPoolPercentage(uint256)", +"6cea2d81": "adminSetStage(address,uint256)", "6cea50a1": "crowdSaleStarted()", +"6ceaa791": "TokensBought(address,uint256,bytes4,bytes32)", +"6ceac6bd": "callArbiter(string)", "6ceac6e1": "TankDeposit()", +"6ceadbe5": "changeWithdrawCheckerAdmin(address)", +"6ceb5778": "userReceive(uint256,string)", +"6ceb63f2": "referralDataRowForAddress(address,address,uint8)", +"6ceb88b9": "bunnyPerBunnyBNBFlip()", "6ceba55e": "change_fee(uint256)", "6cebad98": "newUser()", "6cebd885": "waraCoinTransfer(address,uint256)", @@ -62470,37 +114264,73 @@ "6cec7f92": "canManage(uint32,int256,address)", "6ceccc82": "changeICOAddress(address)", "6cecdad9": "UpdateAttribute(uint256,address,bytes32,bytes32)", +"6ced1ae9": "getImage(bytes32)", +"6ced64e0": "withdrawLpToken()", +"6ced9b19": "setMaxSellTokenPerUnit(uint256)", "6cedc6ea": "tHasSubmitted(uint256,address)", "6cee0d8b": "checkIfAllIQTDistributed()", "6cee2d45": "STTR(uint256,string,uint8,string,address,address)", +"6cee7501": "Checked(bool)", "6ceec70d": "whitelistAdd()", "6cef5ff4": "FundingAssetAddress()", +"6cefc3fe": "setMegaPoolPrice(uint128[10])", +"6cefce6e": "addCount()", +"6cf06ac2": "setPriceByMetadataUri(string,uint256)", +"6cf1158f": "getCompleteInfo(uint256)", "6cf124c6": "toJackPotfromEveryTicket()", +"6cf14f89": "sellOrBuy()", +"6cf151f0": "bettingEnd(uint256)", +"6cf175a3": "withdrawRequestNonce(bytes32)", "6cf1a452": "chgExchangeRate(uint256)", +"6cf1be29": "emergencyShutdownTimestamp()", "6cf1cb29": "setGen0SellerAddress(address)", +"6cf258b0": "Price(bytes32,uint256)", +"6cf2660f": "chargingTransactions(address,uint256)", "6cf27311": "randomNumbers(address)", +"6cf2ad0c": "add(uint64,uint256)", "6cf32dde": "getMyGolds()", "6cf339f8": "CardiumToken()", "6cf35782": "m_funds()", +"6cf39c2b": "executeTransactionList(uint256,uint256,uint256)", "6cf3b9e9": "checkBalance(uint256[])", "6cf3c25e": "small()", "6cf3d099": "dropEnd()", +"6cf3f706": "checkAddressDeposit(address)", +"6cf3fdb9": "treasuryDebt()", +"6cf406d9": "newTokenWithMint(bytes32,string,string,string,uint8,uint256)", "6cf43347": "returnString()", "6cf49694": "tweakDailyDividends(uint256)", "6cf4c88f": "removeApprover(address)", +"6cf54212": "tokenStakingContract()", +"6cf55bcf": "Expire(uint256,address,address)", +"6cf57b70": "assignVoteRight(address,uint256)", +"6cf57ecf": "pendingCEFI(uint256,address)", +"6cf683da": "mixDNA(uint256,uint256)", "6cf69811": "trade(address,uint256,address,address,uint256,bool)", +"6cf69958": "getTicketAmount()", +"6cf6c5e4": "code_user(string)", "6cf6d675": "unbondingPeriod()", "6cf70679": "removeFees(uint256)", "6cf72694": "OAToken()", +"6cf73804": "getTotalFeesPaid()", "6cf75170": "cancelVote(address,uint256,uint256)", "6cf761d4": "getMinConfirmationsByAddr(address)", +"6cf7ccac": "withdrawTokensTransferFrom(address,address,address,uint256)", "6cf7cff6": "icoETHContributionLimit()", "6cf7da53": "setMinerPrice(uint256)", "6cf843ac": "LuckyToken()", +"6cf84491": "completedTaskIds(uint256)", +"6cf8a50b": "passiveAirdropTokensSold()", +"6cf8caf8": "stakingRewardsInfoByStakingToken(address)", +"6cf9282f": "setPriceManager(address)", "6cf9bbf8": "setJackpotFactor(uint256)", "6cf9cc58": "registerResource(bytes,uint256,bytes,string)", "6cf9ea99": "Rhinex()", +"6cf9ed9b": "isPotentiallyDestructible(address)", +"6cf9edff": "API_AddRedress(address,uint256)", "6cfab740": "RequiredBondRules(address)", +"6cfae105": "Masternode(address,uint256)", +"6cfaf88f": "vaultY()", "6cfb0a4a": "test_oneValidEqBytes()", "6cfb2c9c": "payoutToAddress(address[])", "6cfb7101": "_emitMonthLimitChanged(bytes32,uint256,uint256)", @@ -62508,48 +114338,79 @@ "6cfc4512": "authorSignUp(address)", "6cfc4ac5": "getGameEnd()", "6cfc82ed": "trancheSize()", +"6cfcd64d": "OnNewGame(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6cfce820": "removeLiqudityLP()", +"6cfd1553": "setRebalancer(address)", +"6cfd19ea": "setValue(bytes32,uint256)", +"6cfd80c9": "updateAccountAndDeposit(uint256,uint256,address,uint96,bytes)", +"6cfd892e": "totalAmountGemLPStaked()", "6cfdc242": "isSalesManager()", +"6cfe0ad1": "claimableAmount(uint256)", "6cfe5947": "getCurrentICOPhaseBonus()", "6cfedade": "refundTeamTokens()", "6cff6f9d": "payoutOrder()", +"6cff7487": "refundFinalBalanceFunction()", "6cff8244": "controllerSucceeded()", "6cffa0cd": "_transter(uint256)", "6cffd817": "burnByAmount(uint256)", "6cfff605": "releaseThreeHotHourTokens()", +"6d004559": "fetchedData()", +"6d00baed": "buyDa(uint256)", +"6d00e501": "getUnsoldTokens()", +"6d00e9a0": "executorStake(address)", "6d011a12": "scribes_hisory(uint256)", "6d013618": "mint(address,uint256,uint256,string,string)", +"6d019f35": "initialExchangeRate()", "6d01d12b": "XeToken()", +"6d01fa83": "farmFeeMinimumNif()", "6d022003": "ALLOC_SALE_PRIVATE()", +"6d028027": "getWhitelistedAddresses()", "6d029f6a": "totalYUPIESAllocated()", "6d02a595": "_setMintFeeAbs(uint256)", "6d03d3ec": "HolderAdded(address,uint256,uint256,uint256)", "6d03fa87": "getReferer(address)", +"6d049eb1": "concatInterceptAndCoef()", "6d04f50d": "mtronix()", "6d0501f6": "mediator()", "6d052b37": "getRequestByIndex(uint256)", "6d052f56": "testBitsSetSuccess()", +"6d0559b5": "cyclePercentage(uint256)", +"6d058c22": "etherWithdrawFromTheContract(address,uint256,uint256)", +"6d05aa3e": "CapOverflow(address,uint256,uint256)", "6d05c24d": "calcWidthraw(string,uint256)", "6d05cef4": "getStageSupplyLimit()", "6d05da7e": "tranchesCount()", +"6d06175a": "totalReinvestments()", "6d061b69": "deathData_a3()", "6d064875": "transferEducatedTokenOwnership(address)", "6d064962": "getOwnerByShipId(uint256)", "6d069c10": "_updateRaceWinner(uint256,uint256)", "6d06bf0d": "celebOf(uint256)", +"6d06dbc0": "minVotersCount()", "6d06de2d": "haveAttributes(address,bytes32,address,bytes32)", +"6d06dfa0": "joinswapPoolAmountOut(address,uint256,uint256)", +"6d06f0a4": "Vested(address,address,uint256,uint256)", +"6d0704ca": "extraRewardRate()", "6d076966": "VESTING_1_AMOUNT()", "6d0797fc": "_isMatingPermitted(uint256,uint256)", +"6d07d0af": "migrator_stakeLocked_for(address,uint256,uint256)", "6d07e3de": "sexToken()", "6d07f295": "minEatable()", +"6d0800bc": "totalReserves(address)", "6d081d83": "zero_fee_transaction(address,address,uint256)", "6d082bbb": "startSpreadingBlock()", "6d0831f0": "BNNToken()", "6d08bad2": "currencyToHash(string)", "6d08e8f9": "initiateChallengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"6d095514": "bRSLC(address)", +"6d09dd68": "scaledDividendBalanceOf(address)", "6d09e2ec": "commitCurrency(address,uint256,uint256)", +"6d0a11c3": "EntityStates(bytes32)", "6d0a98cc": "blockResolveDispute(uint64,uint64,bytes)", "6d0b5ee2": "TeamFundsTokens()", +"6d0c71fe": "testFail_wmul_overflow()", "6d0ca12a": "tokensBack()", +"6d0cac8e": "currentUserCount()", "6d0cc895": "getVersions()", "6d0def6c": "SimpleDividendToken()", "6d0e5c03": "stampToken(uint256,uint256,uint256)", @@ -62557,18 +114418,32 @@ "6d0f131a": "DrawEvent(uint256,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", "6d0f157d": "setAllFreeze(uint256,uint256)", "6d0f2a84": "changeDefendFee(uint256)", +"6d0f7e9f": "floatStrs2UintArray(string,uint256)", "6d0f8806": "refundAdveriser(uint256)", +"6d0f8bf2": "Release(address,uint256,uint256,uint256)", +"6d0fba92": "setSettlementToStall()", +"6d101d50": "_approve()", "6d102f71": "acceptOrder(bytes16)", "6d106885": "unitUserBalanceLimit()", +"6d110b96": "multiAddFounder(address[])", "6d1150de": "endCurrentPhaseIn(uint256)", "6d11cf72": "berrycoin()", "6d11fe82": "_initAwardInfo()", "6d121b91": "getMaxCap10X()", "6d12301c": "getBetValue(bytes32,uint8)", +"6d125f61": "isAirAddress(address,uint256)", +"6d12d4d0": "show_Reinvested_addresses(uint256)", "6d12fb5b": "setSellable(uint32,bool)", +"6d13582c": "sushiRouter()", +"6d135ff2": "releaseCompany()", +"6d142e5b": "addRewardPool(address,uint256,uint256,uint256,uint256,uint256,uint256)", "6d1478e9": "_addToDebtRegister(address,uint256)", +"6d147c84": "feerate(uint256)", "6d14b2a8": "JackpotAmount()", +"6d153a51": "noVisibility3()", +"6d154ea5": "borrowGuardianPaused(address)", "6d156add": "finalizePRETDE()", +"6d158202": "submitETHreputation()", "6d15a659": "Distribution(address,address,uint256,uint256)", "6d15cecd": "getTokenRaised()", "6d15dc5a": "BetPayout()", @@ -62576,107 +114451,196 @@ "6d160f31": "confirmReservedTokens(address,uint256)", "6d161bc1": "setdot(address)", "6d1669e1": "approveAndCall(address,address,uint256,bytes)", +"6d16acfe": "kToken(address)", "6d16f79c": "__transferWithReference(address,uint256,string)", "6d16fa41": "transferControl(address)", "6d171f0e": "changeRemainingSupply(uint256)", +"6d178306": "verifySnxMintSwap(uint256)", "6d17af94": "ContributionMinted(address,uint256,uint256)", "6d181a42": "FTV(address,address,address,address,address)", "6d1821aa": "OrenCoin()", +"6d182ed6": "updateTraderStatus(address[],bool[])", +"6d1837e2": "getbalance(address,uint256)", "6d1884e0": "getEvent(uint256)", "6d189422": "EtherFlipRaffleToken()", "6d18c778": "PSIToken()", "6d18dc63": "ATTR_TRADABLE()", "6d1909fc": "transferIDCContractOwnership(address)", "6d1917b5": "maxPurchaseNonWhiteListed()", +"6d1954e0": "response(address,uint256,uint256)", +"6d19921d": "bondOracle()", +"6d1996ba": "_newPeriod(uint64)", +"6d19bb8f": "changeSaleStatusToTrue(string)", "6d19ce04": "STARTING_Dragon()", +"6d19f63f": "addTokenAdapterName(bytes32,bytes32)", +"6d19fb5b": "servicePoolVestingDays(address)", "6d1a0d34": "ShowTime()", +"6d1a505b": "_totalSkills()", "6d1af018": "getAmountRaised()", "6d1b229d": "burnTokens(uint256)", +"6d1b8584": "refCompetitionAmount()", +"6d1c31d2": "getMemberLengthForAllRoles()", "6d1d71c5": "Note(address,string)", "6d1da953": "createWithNonce(bytes32,bytes)", "6d1e1f8d": "updateSale(uint256,uint256,uint256)", "6d1e2194": "SALES_ALLOCATION_PPM()", +"6d1e2406": "roundEnded_()", "6d1e8095": "transferGameOwnership(address)", "6d1e839c": "changeMaxCap(uint256)", "6d1ea3fa": "approvedTokens(address)", "6d1eab7d": "getRegistryVersion()", "6d1f00a6": "ThroneMaker(uint256)", +"6d1f3b04": "depositAaveV2(address,address,address,uint256,bool)", "6d1f451b": "multiSigWalletAddress()", +"6d1fcc47": "generalSettings(bytes32)", "6d201095": "PRICE_PRESALE_START()", +"6d20e45d": "lucax()", +"6d20ef46": "allowTransferToStaking(address,uint256)", "6d214c66": "MBSibalCoin()", +"6d21bd15": "IMPOSS12()", +"6d21e4e2": "setDelay(address,uint256)", "6d21f638": "SmartshareStandardToken(uint256,string,uint8,string)", +"6d223679": "setInvest(uint256)", "6d224b7b": "weiPerABIO()", +"6d227016": "transferOwnerShip(address,address,bytes32)", +"6d22a421": "dailyFeeIncrease()", +"6d22d5fa": "setRouter02(address)", "6d236703": "createMemoryArray(uint256)", "6d2381b3": "addressAndBalance()", "6d23bf0b": "ingresarFondos()", "6d23c516": "s8(bytes1)", "6d23cda3": "sub(uint16,uint16)", +"6d23e92e": "assetsSpecificData(address)", +"6d242c38": "setMaxEpochPeriod(uint256)", "6d245bda": "lockUnlockGamblingPartyForBetting(uint256,bool)", +"6d245c87": "EmergencyDrain(address)", +"6d248878": "setPigeonCost(uint256,uint256)", +"6d248c2f": "__MappingToken_init(address,uint256,string,string)", +"6d24c846": "updateVerifiedSign(address,string,uint8,string)", "6d2570fe": "Before(uint256,bytes32)", "6d25924d": "setn(uint256,uint256,uint256)", "6d25ba1d": "setTechBonus1(uint256,string)", +"6d25e377": "publish(string,string,string)", +"6d260595": "refractivesupply2()", "6d2666b9": "lockInLastSixteenPrize()", +"6d26871c": "Redeem(bytes32,address,address,uint256)", +"6d26ec18": "receiveMoney()", "6d275e9e": "distributeEbyte(address[],address,uint256,uint256,uint256)", "6d277279": "getAuctionsCreated(address)", "6d278b29": "setHoldMax(uint256)", "6d27a326": "turnOnFurnace(uint16[5],uint128)", +"6d27a74f": "setBuySizeLimit(uint256)", +"6d27c986": "EventUnpause()", +"6d27ff61": "finishStake(uint256)", +"6d2860bf": "signal_portfolio_diff_allovcation()", "6d28e805": "getInsurance(bytes32,uint256)", "6d290d34": "setAllocation(address,uint256,uint256,uint256,uint256)", +"6d291ba5": "DanPanAddress()", "6d295e24": "callDefaultAction()", "6d2980f6": "TEAM_LOCK_DURATION_PART1()", +"6d298bcd": "usd_balance()", +"6d2a2f76": "checkpointReset()", "6d2a7c8b": "createAuction(uint256,uint256,uint256,uint256,address,uint64)", +"6d2a8297": "setStringa(string)", "6d2ab982": "presaleFemaleDiscount()", +"6d2bb495": "seemyString()", "6d2bf99c": "updatePercentBase(uint256,uint256,uint256)", "6d2c51a7": "countrySupply(uint256)", "6d2cb794": "airaTransfer(address,address,uint256)", +"6d2cc304": "MAX_SQRT_RATIO()", "6d2d4e52": "lockSupplierAndLockPosition1(address,address)", "6d2d525d": "FFUELCoinTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", "6d2dd1a9": "getDividendsForOnePeriod(uint256,uint256,uint256,uint256)", +"6d2e4b1b": "transferCreatorship(address)", +"6d2f818f": "isSupportChainId(uint256)", "6d2ff3d3": "Geniota(uint256,string,uint8,string)", "6d301f38": "MIDO()", "6d3036a7": "MAGNITUDE()", +"6d306415": "claimedAmounts(address,uint256)", "6d308c40": "changehiddenOwner(address)", "6d30921c": "proceedDividends(uint256)", +"6d30a701": "partial2LiquidateNonCompliantCounterVault(address)", "6d30d07f": "getMiniPoolEdit_6()", +"6d30ebb2": "shouldThrow()", +"6d3123eb": "kycContract()", "6d312683": "feeInCirculation()", +"6d313600": "turnOffTuning()", "6d32028d": "bigAward(address,uint256,uint256)", "6d320b17": "minimumEntryThreshold()", +"6d32641b": "setStakingRewardWeights(address[],uint256[])", "6d32a4a6": "finishRoundD()", +"6d32c636": "sav3rPools(address,uint256)", "6d32dc4b": "startElection(uint256)", +"6d334135": "maskOfferedForSale(uint256)", +"6d337a8b": "exchangeShareBonds(uint256)", "6d338bd0": "setCCH_edit_22(string)", "6d339f02": "_oldConfig()", "6d33b42b": "changeLimit(uint256)", "6d33f5a6": "updateNoteContent(uint64,bytes)", "6d34a775": "getDatas()", +"6d353825": "currentM()", +"6d354617": "docRedemptionStep(uint256)", +"6d3566de": "setCurrentContextAddress(address)", +"6d357c9f": "migrateAccount(address,address,uint256)", "6d35b1dc": "getExtraDays()", "6d35bf91": "seizeVerify(address,address,address,address,uint256)", "6d361694": "getModel(uint256)", +"6d361bad": "greaterThanIntFailTest()", +"6d36b432": "Carrot()", "6d36ebf8": "addPlayer(address,bytes32)", "6d37a9dc": "LCT()", +"6d37aeb7": "pay(address[])", "6d38156f": "getCountOfIntegerTypes(uint8[])", +"6d38e194": "reimburseForNoPayment(address,address,uint256[],bytes32[],uint8[],bytes32[],bytes32[],uint256,uint256)", +"6d3920b1": "getBondTimestamp(uint256,uint256)", +"6d397736": "proposalAction()", "6d399eb7": "MAX_AIRDROP_VOLUME()", +"6d3a3ff5": "queryTokenItemInfo(address)", +"6d3add51": "LogCreation(address,uint256)", "6d3b5f18": "getUserByID(uint256)", +"6d3c09d8": "stakingFinishTime()", +"6d3c6275": "isRetired(address)", +"6d3c6d92": "getReward(uint8,address)", "6d3c7ec5": "setDefaultPrice(uint256)", "6d3d0a8f": "disagree()", +"6d3d1416": "test_revert()", +"6d3de7a9": "transferGas$(address,uint256)", "6d3de7ea": "beManagerInsurance()", "6d3e141e": "functional(address,uint256)", +"6d3e1716": "TWAP6Hour()", "6d3e1a74": "PiBetaToken()", +"6d3e313e": "poolTokens()", "6d3e4502": "DatToDtrcDenominator()", +"6d3ed54e": "setStake_Bonus_Interval(uint256)", "6d3f008a": "FinalizedTier(uint256,uint256)", "6d3f1277": "flagAndFinalize(uint256)", "6d4045a8": "EXOSO()", "6d40ee41": "CloseDonation()", "6d40f3b0": "PHASE_OPEN()", +"6d40f85b": "recipientList(uint256)", "6d417064": "expirationBlock()", "6d41a3fb": "firstAuctionsExtendedChunkDuration()", "6d425249": "minerNum()", +"6d42a149": "setSecondaryFundAddress(address,uint256)", +"6d4347da": "PoolsIndex(uint256)", "6d435421": "transferOwnership(address,address)", "6d43b489": "freeTokens(address,address,uint256)", +"6d440056": "updatePreventFlag(uint256,uint256)", "6d4419e5": "listTopics()", +"6d444bd0": "removeIndiv(uint256)", +"6d445d28": "afterMintSgrForSgnHolders(uint256)", +"6d4469bd": "quoteAssetOracle()", +"6d4475eb": "submitGuildKickProposal(address,bytes32)", "6d44a9cf": "KudosPresaleTokenLockup(address,address)", +"6d44e936": "deflateWithDonor(uint256,address)", "6d4546a2": "changeTsaLink(string)", +"6d4575d8": "lockSupplyAddress()", +"6d45b222": "easyBidInit(address,address,address,address,address,address,address,uint112,bool,bool)", +"6d45faea": "RegisterVoter(uint256,uint256)", +"6d4625a0": "_founderTokens()", "6d46398b": "newChannel(bytes32,address,address,bytes,uint256,bytes,bytes)", "6d467f04": "ContractTransfer(address,address,uint256,bytes)", +"6d46a1db": "token(address)", "6d46c6f5": "referrer1Percent()", "6d4717fe": "noFeesList()", "6d47ab72": "sellers(address)", @@ -62686,67 +114650,110 @@ "6d48ae25": "best_submission_accuracy()", "6d492f54": "sendFyle(address,address,string)", "6d493bf9": "SOLARCHAINToken(string,string,uint8,uint256)", +"6d495266": "PRICES_TYPEHASH()", "6d498093": "presaleFinalized()", "6d49817b": "refundPayment(address)", +"6d499b01": "mintFor(address,uint256,uint256,address,uint256)", "6d4a37ef": "cancelEscrow(bytes16,address,address,uint256)", +"6d4acd8f": "updateMapping(address[],address[],address[])", +"6d4b2615": "resetDeadTokens(uint256)", "6d4b38a2": "infraIndexToOwner(uint256)", +"6d4b7deb": "nftTokenId(address)", +"6d4b8585": "priceFeedDecimalMap(bytes32)", +"6d4b99e0": "encodeDomainSeperator(string,string)", "6d4bae72": "_register2(address,bytes32)", "6d4be70f": "ethereumSHA3(bytes20,uint24,uint32)", "6d4c80ea": "removeNamespaceMember(string,address)", "6d4ce63c": "get()", "6d4d907c": "maxNumVotesPerAccount()", +"6d4e1991": "lockModule(bytes32)", +"6d4e6105": "OrderPickupByCarrier(uint256,address)", "6d4ee68f": "SendBobsCoin()", +"6d4f7696": "changeNNUsedCreate(uint256)", "6d4fd0ad": "isNull(address[])", "6d4fd338": "PPToken()", "6d4fe435": "counter_in()", "6d505b49": "randgenNewHand()", "6d50a2b5": "deleteAllBackgroundImages()", +"6d50d0e8": "FinalGoalReached()", "6d50ef2a": "timelockedTokensDisbursed()", "6d510a64": "ourTEAM()", "6d510f6c": "updatePartners(address)", +"6d5161ec": "outboxes(uint256)", +"6d520e46": "LogMinimumPodSizeUpdated(uint256,uint256)", "6d5210d9": "showprize(address)", +"6d522418": "tokenNameByIndex(uint256)", "6d522b19": "multiAccessChangeRequirementD(uint256,address)", +"6d52b267": "Sortime(address,uint256)", "6d52f9d5": "mapToNewRange(uint256,uint256)", +"6d530fb3": "updateCollateralPrice(bytes32)", "6d53393b": "getInitializeCreatorValue()", +"6d533e9b": "removeLiquidityReturn(uint256,uint32,uint256)", "6d538264": "setMigrateAddress(address)", "6d53aa4e": "GetProd(address)", "6d540318": "revokeOracle(address,uint256)", +"6d541987": "DEC()", "6d5433e6": "max(uint256,uint256)", "6d54340a": "Blockbin()", "6d544e6e": "setStackSize(uint256)", "6d54ec91": "registerAndActivateDevice(bytes32,bytes32,bytes32)", +"6d55579e": "requestParams()", "6d568c43": "weiToCents(uint256)", +"6d56bcf0": "setNewPollAllow(bool)", "6d56d9f4": "setAuction(uint256,uint256,uint256)", "6d578781": "changeStageBlcok(uint256)", +"6d57ab0b": "claimSwapReward()", "6d57b2b1": "tokenInitialDetails()", "6d57dee4": "sendTokenAw(address,address,uint256)", "6d57e2a9": "getAgonIdArray(address)", "6d580320": "G2UFundDeposit()", "6d580bcb": "FOUNDERS_CAP()", "6d584266": "ALLOC_SALE_GENERAL_3()", +"6d585b52": "setSwapCallerFee(uint256)", "6d5860d4": "revert(string)", +"6d589d64": "setGrantorVestingSchedule(address,uint32,uint32,uint32,bool)", +"6d58ba46": "level1OwnewshipSalePrice(address)", "6d58c88f": "changeDepositAddress(address)", +"6d58dd60": "LEND_MIGRATOR_ADDR()", "6d599136": "personal_withdraw(uint256)", "6d59c3be": "buyUFT(address)", +"6d59f4c7": "loanWithdrawn()", +"6d5a573c": "dgeWebExAmountT2(address,string)", +"6d5a81c5": "setERC1155WrapperModel(address)", +"6d5ab4a9": "depositStartIndex()", "6d5b0f6f": "transferCustodian(address,address)", "6d5b9427": "onlyWithValidSignature(bytes)", +"6d5bcc1d": "balanceFor()", "6d5c1621": "LogInsert(address,uint256)", "6d5cae52": "QiongB(uint256,string,uint8,string)", "6d5d21a9": "setStubFund(address,address)", +"6d5d39ad": "showDistributorMess(address)", +"6d5d6eb1": "bAssetData(uint256)", "6d5d7612": "MAX_WITHDRAW_PCT_DAILY()", "6d5da09a": "LockChain()", +"6d5de372": "calculateMultiMinReceive(address[],address,uint256[])", "6d5e136d": "_getApproved(uint256)", +"6d5e3032": "levelOf(uint256)", "6d5e3587": "needsEther(string)", "6d5e53f6": "createInt256(bytes32,int256)", "6d5e78f9": "depositorLimit()", "6d5f3e15": "settleBet(address)", "6d5f6639": "objectProposal(bytes32)", +"6d5f6f11": "pool_bonuses(uint256)", +"6d6061f3": "unstakePercents(uint256)", "6d608402": "sendBPESOToken(address,uint256)", +"6d608fb6": "moneydata(uint256)", +"6d609415": "boughtAssetPacks(address,uint256)", +"6d60a662": "get_commission_fee()", "6d60bf39": "getPreEntranceFrom()", +"6d60cbee": "alpacaOutfit(uint256,uint32)", "6d60e6b4": "trustAddress()", "6d619daa": "storedValue()", "6d624e86": "SideJobCoin()", "6d62a4fe": "canTransfer(address,address,address,uint256)", +"6d62c33f": "measurementLabels(uint256)", +"6d633318": "getStudents(uint8)", +"6d636478": "isCall()", "6d63fa32": "getPixelNumber(bytes1,bytes1)", "6d640637": "testBetId()", "6d643308": "icoDeadLine()", @@ -62754,115 +114761,216 @@ "6d64a472": "claimSalesAgent()", "6d64abd6": "takeEther(address)", "6d650b2d": "level_7_percent()", +"6d651e2a": "addNewStrategy(bool,address[])", "6d66264f": "specifyController(address)", +"6d66a143": "view_contract_balance()", "6d6712d8": "hasPermission(address,address,bytes32)", "6d6755a6": "gvpe_per_eos()", +"6d67b1ab": "itemMinters(uint256,address)", +"6d67efdc": "sendRoi()", +"6d68b70b": "wipeAllAndFreeETH(address,address,address,uint256,uint256)", +"6d68c7d4": "stakingStarts()", +"6d68d47d": "pendingKing(uint256,address)", "6d6908bd": "mintTokensBatch(uint256,address[])", +"6d692788": "TriggerPayment(uint256)", "6d69fcaf": "addSupportedToken(address)", "6d6a01f6": "second_partner_address()", "6d6a2859": "assetID()", "6d6a4889": "nextReleaseTime()", +"6d6a5349": "addRecoveryAddress(address,uint16)", "6d6a6a4d": "decimalFactor()", "6d6a761e": "setCouponToken(address)", +"6d6aa34d": "childTunnel()", +"6d6ad2df": "storedNVTbyWeek(uint256)", +"6d6ae7ed": "addPay(address)", +"6d6af334": "getPositionDebts(uint256)", "6d6bc5f5": "identifierToCoordinate(uint256)", "6d6c0ec4": "mintProxy(address,uint256)", "6d6c2074": "totalTokensForSaleDuringICO3()", +"6d6c90d6": "clovercoin()", "6d6caeb2": "poolCapUSD()", +"6d6cb97b": "setLimaSwap(address)", +"6d6cc684": "getDeactivationRequest(address)", "6d6d69b6": "allowedToSell()", "6d6d70d9": "connectModule()", +"6d6daef3": "curMonth()", +"6d6dcb3a": "RemoveLiquidityPoolAmountIn(address,uint256,uint256)", "6d6dcbe7": "deleteResponse(uint256)", +"6d6dee58": "transferEtherToOwner(uint256)", "6d6e2710": "clearCrowdsaleOpenTimer()", +"6d6e50ec": "setMP(string,string)", +"6d6e6375": "deltaTokenAddress()", "6d6e8312": "addProviderAdmin(address)", +"6d6ea257": "loanGiven(uint256)", "6d6ead75": "reject(uint256,address,uint256,uint256,address)", "6d6ebb01": "thawSomeTokens(address,uint256)", +"6d6ee057": "aggregate(address,bytes)", +"6d6f091f": "minerTransfer(address,address,uint256)", "6d6f385c": "isSaleFinished()", +"6d6f41cc": "transact(bytes)", "6d6fa6b1": "FNKOSToken()", "6d6fb665": "CUSTOM_ERC20_MINT_SERVICE_NAME()", +"6d6fcf87": "testDataTypeInt()", "6d701f0a": "Eos()", "6d704159": "wdBefore()", +"6d7045c1": "log(bool,bool,bool,uint256)", "6d705ebb": "register(address,uint256)", "6d70f7ae": "isOperator(address)", +"6d716334": "walletVersions(address)", "6d717daf": "Albarit()", +"6d71a9c6": "isUniformGrantor(address)", "6d71be4c": "increaseReserve(uint256,uint256)", "6d7221d5": "doubleClaimSegmentSlashAmount()", +"6d72c24e": "getGrantAmount(address)", +"6d72d7e2": "USDT_Ledger(address)", "6d72da47": "addElection(address,uint256)", "6d72dc38": "getSwapLifetimeLimits()", "6d730453": "TokensTransferedToOwner(address,uint256)", +"6d736de2": "isUserSynced(address)", "6d736fac": "feeAccount2()", +"6d73e669": "approveAdmin(address)", +"6d73edca": "newBySponsor()", +"6d73fa91": "stageThreeBegin()", +"6d748239": "SoldAcorn(address,uint256,uint256)", +"6d748f09": "setPoolProfileImage(uint256,bytes32)", +"6d75b9ee": "addCollateral(address,uint256)", "6d763a6e": "getLeaderboard()", "6d771f77": "one_month()", "6d773cd0": "balance_out()", +"6d7746bc": "_addLiquidity(address,address,uint256,uint256,uint256,uint256)", +"6d7770c8": "delegateBySig(address)", "6d77cad6": "isOperatorForPartition(bytes32,address,address)", "6d77e144": "removeBlacklistItem(address)", "6d786740": "billingPeriod()", "6d788933": "_distribution(address[],uint256[])", "6d78a434": "IntegrativeWalletToken(uint256,uint256,uint256,address)", "6d78e48a": "candidateTillXPAAssets()", +"6d78f47a": "issue(address,uint256,address)", "6d79207c": "SALE_DURATION()", "6d796253": "configRoundKey()", +"6d79e6b1": "onEndTx(bytes32,address,uint256,uint256,uint256)", "6d7a0f89": "EmptiedToWallet(address)", "6d7a2609": "setSpenderAddress(address)", "6d7a37b6": "OCPresale(address,address,uint256)", +"6d7a3cb1": "unitAttackIncreases(address,uint256)", +"6d7aae87": "setMiddleMan(address)", "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()", +"6d7d6c2b": "set_ROUND_2_START_TIME(uint256)", "6d7da0b1": "MyContract()", +"6d7ddc8d": "setMaxUserBP(uint256)", +"6d7e534e": "hasValidKind(bytes4,address)", +"6d7e7633": "protestAgainstTransaction(address,bytes32,bytes)", +"6d7e9d3e": "ValidatorsUnderManagement()", +"6d7ebeaa": "ST1OPB(address,uint256,address)", +"6d7f10b3": "lfiPerBlock()", +"6d7f60d8": "getInputAmountsAndGas(address[],uint256)", "6d7fa14e": "CQC(uint256,string,uint8,string)", "6d7fd1bf": "getIpfs(uint256)", "6d7fd8a3": "pauseRefund()", +"6d800a3c": "limitEnabled()", "6d80244d": "createUnitOmni(uint32,address)", +"6d803f0b": "DeListing(uint256)", "6d805b2d": "withdrawMana(uint256)", +"6d8062ee": "createChecksum(uint256,uint256,bytes)", +"6d81250b": "MAJORITY()", "6d813e63": "owner_viewOnFlight()", "6d81779b": "teamCap()", +"6d81a01b": "Authorize(address)", +"6d81a956": "addScalingFundsAgent(address)", +"6d826772": "unwrapAllWETHFor(address)", +"6d82962a": "coinsUsedToRedeem(bytes32,address)", +"6d82f2d2": "UpdateInvites(address,uint256)", "6d836cde": "updCouponBonusEnabled(bool)", "6d8370e9": "upgradeTusdProxyImplTo(address)", +"6d8396c2": "initialOwnerToToken(address,uint256)", "6d842ad5": "NewBOP(address,address,uint256,uint256,string,string)", "6d843c2f": "participatedInAirdrop(address)", +"6d845aa8": "DOMAIN_SALT()", +"6d846e1c": "orderItems(uint256,uint256,uint256,address)", +"6d84b4ee": "setFrozenInvestors(address[],bool)", "6d84dbb0": "BeijingCoin()", "6d853ab6": "isSubUser(address)", +"6d85e14d": "ONBOARDING()", +"6d8622cd": "claimStakerReward(address,uint256,uint256,uint256,uint256,uint256)", "6d863fd7": "airDropSingleAmount(address[],uint256)", "6d86ac59": "DUMPSACK()", +"6d870bb0": "donateAirDrop(address,uint256)", "6d871c44": "set_a(uint256)", +"6d8737e1": "shareholder(uint256)", "6d8758c7": "editCuts(uint256[6])", +"6d8770c7": "computeAmountOut(address,address,uint256)", "6d877f91": "Bob()", +"6d87ae2b": "testIncrement(uint256)", "6d87b65c": "setPropertySalePrice(uint16,uint256)", +"6d87d0e3": "addNewNeutralToken(address)", +"6d886fae": "checkSub(uint256,uint256)", "6d88885e": "schoolOrdering()", +"6d88d12b": "withdrawDekla(address,bytes)", "6d892f7e": "deauthorize(address,address)", "6d893a5a": "deathData_a8()", "6d8941cb": "smallBonusPercent()", +"6d8a241b": "active_mods(uint256)", "6d8a3650": "dedex(address,address,address,uint256,uint256,uint256)", "6d8a5f8f": "CAP_ICO()", "6d8a74cb": "getRoom(uint256)", "6d8a9f92": "setSavedEthBalance(address,uint256)", "6d8ab124": "containsPosition(bytes32)", +"6d8ac22d": "underlyingDepositAssets()", +"6d8b1875": "hashForSignature(string,address,uint256,address,bytes32)", +"6d8b1c83": "userMissions(address,uint256)", +"6d8b33d7": "check_wallet()", "6d8b529a": "OwnerBase()", +"6d8bcbeb": "changeStamp(uint256,address)", "6d8c3912": "AicToken()", +"6d8c859a": "balance(address,uint256)", "6d8ccf2a": "sellToEther(uint256)", +"6d8ce7d6": "NAPboostLevel(address)", "6d8d151b": "determineBonus(uint256)", "6d8d16b9": "StandardToken(string,string,uint8,uint256)", +"6d8d7d52": "timeInitial()", +"6d8e1cf3": "cannibalize()", +"6d8ea5b4": "getHasValidKey(address)", "6d8f01d1": "CEOSignature()", "6d8f4221": "masternode()", "6d8f83cf": "_getBonusAmount(uint256)", +"6d8f9990": "addWhitelistByTokens(address,address,address)", "6d90164e": "GetPrice()", +"6d909240": "finishChangeInitialPercentAndTime()", +"6d90a168": "safeTacoTransfer(address,uint256)", +"6d911aca": "performBountyAction(uint256,string,address,uint256,address[],bytes[],uint256[])", "6d916598": "stakingUnits(address)", "6d91acba": "proposalText(uint256)", +"6d91c0e2": "pairFor(address,address,address)", "6d9218e5": "Notes(address,address)", "6d927db0": "withdrawBalanceMaxSteps(uint256)", +"6d93cb05": "approveBasForBoardroom(uint256)", +"6d944258": "urt()", "6d94425c": "_maxPeriodSalesLimit()", +"6d945c3f": "_getWipeDart(uint256,address)", +"6d946da4": "setIsaq(string,string,uint256)", +"6d94c8cf": "_getUnfinalizedPoolRewards(bytes32)", "6d94dce1": "createAndBookCanvas(address)", "6d952117": "maxBuyPrice()", "6d9634b7": "releaseTokens(address[])", "6d963a81": "buyp3d(uint256)", +"6d966e76": "getMinFeeRatio()", +"6d968a7e": "luckyBags(uint256)", "6d96a2aa": "delegateAddress()", "6d96b537": "_computeIncentiveReward(uint256,uint256)", "6d974ee2": "AcceptRealmOffer(uint256)", "6d97537a": "TestRushCoin()", "6d97786e": "sell(address,uint256,string)", +"6d97a315": "TokenAdded(string,address)", "6d97c665": "tokenBonusForSecond()", +"6d97c828": "alarmDone()", +"6d980006": "requestUniswapOraclePriceFulfillment()", "6d9814e1": "BToken()", +"6d9833e3": "isKnownRoot(bytes32)", "6d98571a": "generalTokens()", "6d9860d0": "makeFinality(uint256,address,address,bytes32,bytes32,uint256,uint256)", "6d98c5e7": "AppleToken(uint256,string,string,bool)", @@ -62871,30 +114979,53 @@ "6d991cce": "openGroupNumber()", "6d99aafd": "Collected_Ether()", "6d99f652": "resetRaffle()", +"6d9a2af9": "setLockFourWeeks()", +"6d9a640a": "swap(uint256,uint256,address)", "6d9aa034": "setNamePublicKeyAddress(address)", +"6d9aa5a8": "FUNC_77BCFC67(uint256)", "6d9af813": "updateprice(uint256,uint256)", "6d9b06e8": "setProposalDeposit(uint256)", +"6d9b1284": "getWithdrawCoin(uint256)", +"6d9b1823": "mimo()", +"6d9b21c2": "stakeMyself()", "6d9b501a": "returnWalletTxCount()", +"6d9bd664": "paramListeners(uint256)", +"6d9bf9e9": "prepareReferralBonuses(uint256,uint256)", "6d9c2bda": "ADV_TEAM_LOCK_TIME()", +"6d9c893b": "depositCatAndMintToken(uint256)", "6d9c8e86": "getCurrentSaddlePrice(uint256)", +"6d9ca9a0": "getPassports()", "6d9cb37d": "govtAccount()", "6d9cdbc6": "WALLET()", "6d9cebb2": "setDiscount(uint8)", +"6d9d327c": "setAllUints(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "6d9d39b6": "isItOpen()", "6d9d495f": "minMktTokens(address,uint256)", +"6d9d5675": "getNumberOfMyMoneyPots()", +"6d9d5934": "TRPC()", +"6d9db3c4": "appendFundList(uint256,uint8)", "6d9dcdb9": "tgrNextPartContributor()", +"6d9ec7e5": "lastTaxIncreasedTime()", "6d9f4eeb": "artistTrackCount(address)", +"6d9f99ce": "allowanceTickets(address,address)", "6d9fed84": "getJackPotInfo()", "6da05cc7": "sectionAvailable(uint256)", "6da05f0f": "_requestRandom(uint256)", +"6da0defb": "bonked()", +"6da0f1fc": "getSlipAdustment(uint256,uint256,uint256,uint256)", "6da1339c": "_deposit(address,uint256)", +"6da16478": "addDepositTotalAmount(uint256)", "6da1833c": "getInstitutionByName(string)", +"6da1a59e": "NEW_MONITOR_PROXY_ADDR()", "6da1d37a": "sumWei()", +"6da1dfac": "getBlockNumberPublic()", +"6da23543": "setResolveAddress(address)", "6da246ac": "approvePartnerAllocation(address)", "6da28481": "balanceOfLockup(address)", "6da36c06": "contract_admin()", "6da3cd1a": "verifiedUsersOnlyMode()", "6da44d61": "SportX()", +"6da47f15": "nerdAddress()", "6da49b83": "nodeCount()", "6da4edff": "getPriceSpeedPercent()", "6da4fd5c": "TheBeardToken()", @@ -62902,60 +115033,120 @@ "6da50777": "FreddieToken(address)", "6da61d1e": "payoutOf(address)", "6da66355": "pause(string)", +"6da68215": "FFYI()", +"6da6bad0": "rock()", "6da705f5": "isOwnerOfJob(address,bytes)", "6da72e7a": "reclaimByReceiver(uint256,address,bytes32)", +"6da774ff": "coaches(uint256)", +"6da7880e": "getBundle()", "6da78903": "SwapCreated(address,uint256)", "6da79a93": "bid(uint256,uint256,uint256,address)", +"6da7a485": "adminAddMinter(address)", +"6da7c943": "liquidatePositionWithAssetPrice(bytes32,address,bool,uint256,address)", +"6da847f5": "setBuyOutPrice(uint256)", "6da84ec0": "calcMarketFee(bytes32,uint256)", +"6da899b4": "userIdSeq()", +"6da8e464": "SetLastCloseFeePeriodAt(uint256)", +"6da99082": "AGO()", "6da9a969": "toBRFWEI(uint256)", "6daa212f": "applyPayback(address,uint256)", "6daa2d44": "raiseDispute()", "6daa9f56": "setExhaustionTime(uint256)", "6daaf67b": "REFERRAL_PROGRAMS()", +"6dab5dcf": "addCreditETH(address)", "6dabccc9": "setmsg(address)", "6dabd069": "emission(address,uint256,bytes32,uint256)", +"6dabe6f5": "approve_559(address,uint256)", +"6dac1c06": "getLvlUser(uint256)", +"6dac4fdd": "GibIhm(uint256,address,address,address,address,address,address,address,uint256)", +"6dac7cd5": "assumedOneMinusReserveFactorMantissa()", "6dac8bea": "PREMIUM_CATEGORY()", +"6dac9522": "SalePaused(string,uint256)", "6dacda85": "LOCKPERIOD()", "6dad2a91": "getWinningAmount()", "6dae014c": "test_basic_sanity()", "6dae022f": "verifyTx()", +"6dae2147": "getNoteNew()", +"6dae88eb": "setLossLimit(uint256)", +"6daeaae2": "DOSSetup()", +"6daf029f": "setRewardTokens(address[],bool[])", "6daf0866": "Hungrify()", +"6daf491d": "redeemShard(uint256)", +"6daf5035": "lockImplementationOneToOne(address)", "6dafc6b7": "destructOne(bytes32)", +"6db0b2dd": "pool_slots_6(uint256)", "6db1218d": "getAPSchedule()", +"6db1304c": "donutPerBlock()", "6db14a1c": "PaulSportsCoin()", "6db17f8d": "KriptoNeed(uint256,string,uint8,string)", +"6db18f79": "fLoop()", "6db19eb8": "specialGym()", +"6db23e85": "hxyRatio()", +"6db24998": "getTACounter()", +"6db269a5": "isRewardClaimable()", +"6db2989e": "ChangeMessage(address,string)", "6db31c25": "pay(string,address,uint256,bool,bytes)", "6db3a788": "createHero(string,uint256,uint256,uint256,uint256)", +"6db42ca5": "powerTokenNRT()", +"6db48b86": "vFirstAddress()", "6db4ba51": "requireNotEmptyAddress(address)", "6db4bbf0": "donotYYYDappToken()", +"6db5258c": "wrapRouter()", "6db5c8fd": "maxDuration()", "6db5d3b7": "modifyCommission(uint256,uint256)", +"6db65619": "emptyRevert()", "6db66268": "remainingTokensPerPeriod()", "6db736df": "Writers(address)", "6db75799": "set_amount(uint256,uint256)", "6db76efd": "decreaseFrozenBalances(address,uint256)", +"6db79437": "updateFees(uint256,uint256)", "6db7f77c": "requestEarlySettlement()", +"6db80995": "getClients()", +"6db87119": "modifyMon(uint256,bool,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", "6db90900": "returnAllRoomsBalance()", +"6db9241b": "cancelStream(uint256)", +"6db9dd93": "hasWithdrawnLastPeriodFees(address)", "6db9ec44": "IWTfund()", "6db9ee4d": "MixenCoin()", "6dba46ac": "aprMintAdjustment()", +"6dba4b0f": "hasWithdrawn(bytes32)", +"6dba746c": "petrifyMock()", "6dbb7bcd": "getExecutorRegistry()", +"6dbc132a": "zsTokenAddress()", +"6dbc86c3": "requestTokenFromPool(uint256)", "6dbd6689": "gupSold()", +"6dbda4e8": "totalPlayableFunds()", +"6dbdc508": "_blackList(address,bool)", +"6dbdd996": "setLatestBidTime(uint256)", "6dbe060d": "hashTest(string)", +"6dbe08df": "passParams(address,bytes32,bytes32[])", "6dbe21b8": "setBounty()", "6dbe2ebc": "calcUserDivsTotal(address)", "6dbe31eb": "testSubBalance()", "6dbe4bee": "MoonToken(uint256,string,string)", +"6dbe4ef2": "collateralPools(uint256)", +"6dbe83e0": "NewIsland(uint256,bytes32,address)", +"6dbf245c": "_decode_lendelim(uint256,bytes)", +"6dbf2fa0": "call(address,uint256,bytes)", +"6dbf6b0d": "offeror()", "6dbf8108": "withdrawBounty(address)", "6dc043d7": "draw_number()", +"6dc05bd3": "getVestingQuantity(address,uint256[])", "6dc0a997": "pushAllocation(address,uint256)", "6dc12f1c": "EvMigration(address,uint256,uint256)", "6dc1a075": "setMaxOpenAttacks(uint256)", "6dc1f360": "VersionControl()", "6dc214af": "bitCrystalEscrow()", +"6dc2527b": "addBorrowAmount(address,uint256)", +"6dc2cc8c": "getRealizedReward(address)", +"6dc2d787": "setNetContract(address)", +"6dc2dc6c": "setVoteExtendTime(uint256)", +"6dc335d0": "getFundsEvent(address,uint256)", "6dc34462": "Timed(uint256,uint256,uint8)", +"6dc3551f": "LogCreate(bytes32,uint256,uint8)", +"6dc36060": "StartTransactionsWithBurnMode()", "6dc37dee": "changeReviewRules(uint256)", +"6dc382e4": "op_rt_v(int128)", "6dc3e97e": "addGame(bytes32,address,address,uint256)", "6dc3edcf": "executeExecutable(uint256,uint256)", "6dc455a4": "WinnerWithdrew(address,uint256,uint256)", @@ -62965,51 +115156,95 @@ "6dc56397": "career_path()", "6dc57da6": "getTimestampOfDayStart(uint256)", "6dc585b6": "toRICH(uint256)", +"6dc64a02": "viewReferralEarned(address)", +"6dc6a01b": "reportTx(bytes32,uint256,address,uint256,uint256)", +"6dc6b1f3": "Gossip()", +"6dc6e6b9": "USKIContract()", +"6dc7742e": "LogKillContract(address)", "6dc7a627": "canClaim()", "6dc7d164": "addSignature(uint256,uint256,address)", "6dc88e1f": "addAngelIdMapping(address,uint64)", "6dc8dbd4": "calculateMaxTokensIssued()", "6dc92426": "makeSellOrder(address,uint256,uint256)", "6dc944f6": "withdrawTotalDevEarned()", +"6dc95e49": "importTokens(uint256,address[])", +"6dc95ee5": "payNow(address[],uint256[])", "6dc9ab89": "get_orderAddress(address,address,uint256,uint256,uint256,uint256)", "6dca35da": "newCampaign(uint256,address,uint256)", +"6dcadcdd": "fromPool(uint32)", "6dcb0cf8": "typeOf(address)", "6dcb672b": "EBanker()", +"6dcb7e44": "ContributedBTC(address,uint256,uint256,uint256)", +"6dcb9800": "stakeDecimalsSet(uint256)", "6dcba059": "goToNextStep()", +"6dcbf2a3": "tickets(address)", +"6dcc2b3a": "amtLevels()", "6dcd16d7": "computeBids(uint256)", +"6dcd64e5": "getExpectedReturn(address,address,uint256)", +"6dcd6b34": "enableSigner(address)", "6dcd6eb9": "withdrawPendingAmounts()", "6dcdd00f": "Allowance(address,address)", "6dce14cd": "LBTokenSale(uint256,uint256,uint256)", +"6dce1d72": "platfromAddress()", +"6dce27d5": "SHARE_ADDRESS()", +"6dce9b3d": "upgradeInvestmentPool(address)", +"6dcea3a9": "makerFactory()", "6dcea85f": "setMarket(address)", +"6dceb2a8": "_delegateStake(bytes32,address,uint256)", +"6dcf91cd": "gameFinishedBlock()", "6dd01116": "getWishContent(uint256)", "6dd0c3d8": "setENGDevAddress(address)", "6dd0c51e": "RESERVED_STAFF_GROUP()", "6dd0d091": "retaliate()", +"6dd0d6d8": "setAmount(address,uint256,uint256,uint256,uint256)", "6dd13a29": "ICOStarted(uint256,uint256,uint256,uint256)", "6dd186c4": "YeYingOil()", "6dd1f71c": "RTokenMain(uint256,string,string,uint8,address)", +"6dd21866": "team_pjm()", "6dd22ccd": "getMixParticipant(bytes32,uint256,uint256)", "6dd23b5b": "constructor(address,address,address)", +"6dd258d7": "getExpectedReturnRebalance(address)", "6dd28241": "deprecatedSince()", +"6dd2b3a8": "setmrToken(address)", "6dd2bfca": "setDevfee(uint256)", +"6dd3266d": "requestStashRedelegation(bytes32,address)", "6dd35c7b": "topBalance(address,uint256)", +"6dd37544": "NEW_HARD_CAP()", "6dd3a823": "Neptun()", "6dd40168": "preSaleMinimumWei()", "6dd40905": "getQuestionVotesAllCount(string)", "6dd43d1f": "attachSubscriptionModule(address)", +"6dd4480b": "initialize(address[],uint8[],string,string,uint256,uint256,uint256,uint256)", +"6dd47d15": "rndTms_(uint256,uint256)", "6dd4927b": "reName(string,string)", +"6dd4a7c9": "calculateRootHash(bytes32,bytes32[])", "6dd4c13c": "allowsSignup()", +"6dd589dc": "rewardThisBlock()", "6dd5b69d": "getConfig(bytes32)", "6dd5bb11": "oraclize_query(string)", +"6dd6a69e": "getActiveMaturities()", "6dd6e673": "buySanSlot(address,uint256)", "6dd6e87b": "checkOut(int256)", +"6dd6ec46": "liquidities()", "6dd749ba": "getSpaceById(uint256)", "6dd77c5d": "etherToUSDRate()", "6dd7d8ea": "vote(address)", +"6dd7dada": "_PoolLimit()", +"6dd80fc4": "withdrawEtherSnipe(uint256)", +"6dd825e9": "ownerReceive(uint256,string)", +"6dd82637": "LOG_OraclizeCall(uint256,bytes32,string)", +"6dd834b4": "getCSP(bytes32)", +"6dd86aa9": "updateRedeemFee(address,uint256)", +"6dd8a2e9": "getSubkData1(address,bytes32)", "6dd8d3bf": "buy_energy(address,uint32,uint32,uint64,uint32,uint64)", +"6dd95553": "wpcBorrowState(address)", "6dd9fde9": "transferTokensToNonEthBuyer(address,uint256)", "6dda1291": "hotPotatoPrize()", "6dda9b24": "bva(address,uint256,address)", +"6ddb4566": "wipeAll(address,uint256)", +"6ddb5c41": "executeAirdrop()", +"6ddb63bc": "failCalculatingTotalCollateralWithAbnormalPrices()", +"6ddbbaf5": "getReturnMoney(address)", "6ddc7e65": "gracePeriodAfterRound0Target()", "6ddcb442": "getPhaseStatus(uint256)", "6ddd07f8": "getEngineById(uint256)", @@ -63017,235 +115252,429 @@ "6dde33ea": "deathData_a13()", "6dde8b18": "removeWhitelistedTransfer(address,address)", "6ddeaae0": "investorReferrals(address,address)", +"6ddee2b9": "renewAPWR(uint256,uint256)", "6ddf09c4": "ICToken()", "6ddf12ae": "ecdouble(uint256[3])", "6de00927": "GetUserRank(uint8,address)", +"6de05912": "offerWithdrawCallFirst(uint256,uint256)", "6de09e28": "affiliatesAllocAddress()", "6de0b375": "openBet(uint256)", +"6de0cd8b": "getPrefer(bytes32,address)", "6de12905": "updateMeta(string,string)", +"6de23a16": "cappedSupply()", +"6de25623": "periodsPerWindow()", +"6de30350": "setUnderlyingPrice(uint256,address)", "6de343cd": "SNTPlaceHolder(address,address,address,address)", +"6de3ac3f": "upgradeDevelopmentFund(address)", "6de3afc9": "EduCoin()", +"6de4204d": "getPublishedTimeStamp()", +"6de49009": "v2Inited()", +"6de4a372": "isTimelockAllowed(address)", "6de53001": "clearApproval(address,uint256)", "6de5897c": "ECOMCASH()", "6de60a07": "ContinueSuspendedEmployee(address,uint32,uint32)", "6de6220b": "OwnerO()", +"6de62d0c": "fragmentsPerToken()", "6de65097": "OwnerRemoved(address,bytes32)", +"6de652b7": "PRICE_PER_TICKET()", "6de685f6": "START_TIME_SALE()", "6de725a3": "callTx(bytes,address,uint256,bytes)", "6de74bbe": "setratePreSale(uint256)", "6de758a1": "PWGLToken(address,address)", "6de79d17": "TIANYECoin()", "6de7a31d": "getEvotTokenAddress()", +"6de7da78": "getRoundCount()", +"6de7f6c4": "teamBonusGain(uint32,uint256)", +"6de813f1": "totalRewardsAvailable()", +"6de83b71": "emitReceivedTokensToDeepFreezeTokenPool(address,uint256)", "6de84a4f": "bankMultisig()", +"6de87c7a": "setLossFactor(uint256)", +"6de88d97": "getLiquidityLauncherTemplate(uint256)", +"6de8dd41": "isRelayManagerStaked(address,address,uint256,uint256)", +"6de98482": "setChampEC(address)", "6de996b4": "getPlayerSpaceshipAuctionPriceById(uint256)", +"6de9b192": "setParameters(uint256[14])", +"6de9b6d8": "isDuringSale()", "6de9ebb1": "setBlogRegistry(address)", "6de9f32b": "tokensMinted()", "6dea2088": "MAX_FUNDS_RAISED_DURING_PRESALE()", +"6dea726c": "nkjHByvIuouhyt6567gt(address)", +"6dea86ba": "mlm()", "6deaf623": "calculateEthToVibe(uint256,uint256)", "6deb515d": "disapproveInvestorsInBulk(address[])", +"6debdabf": "updateCategoryActionHashes()", +"6debf8fa": "setTakerFee(uint256,uint256)", +"6dec2b47": "getApprovedOraclesLength()", "6dec665e": "motionWaiting(uint256)", "6dec7a93": "setInfo(string,string,string)", +"6ded16b9": "dfkToken()", +"6ded1f1d": "registeredPoolTokens()", +"6ded5c68": "tokenUSDPrice(address)", "6ded82f8": "isPaid(address)", "6dee2032": "getOpenOrdersOf(address)", "6dee275a": "c_STQperETH()", "6deebae3": "subtract()", +"6deecdbe": "myBool()", "6deefc7a": "sellable()", "6def1efc": "getPreviousFeeWindow()", +"6def21e3": "eth_supply()", +"6def2d6c": "transferFundETH(uint256,address)", "6defbf80": "ready()", "6defd595": "getCovfefe(uint256)", "6defe0b9": "isTimeOver()", "6defe888": "Criptomedicina()", "6df006f3": "frozenToken()", +"6df02b47": "addLand(string,string,string,uint256,address)", +"6df02c6a": "getReferreds1(address,uint256)", "6df03165": "setTimeOutAuthentication(uint256)", "6df088bf": "winnerDecided(uint256,address,uint256)", "6df0a7e7": "setContract(string,string)", "6df0b557": "getPlayerSpaceshipAuctionById(uint256)", +"6df10e58": "_encode_sfixed32(int32,uint256,bytes)", "6df15719": "STWY()", "6df1667c": "same(string,string)", +"6df1fdb1": "updateMinimumStakeBalance(uint256)", +"6df238c3": "masterToReferral(address)", "6df26327": "additionalEmission()", +"6df26575": "wasabiPerBlock()", "6df26d14": "startEarlyStage1()", "6df3edef": "getSavedBytes()", +"6df4afeb": "createAssetIntroducersForPrimaryMarket(string[],uint8[])", +"6df4c963": "Approved(address,uint256,uint256)", +"6df51782": "getmyContract()", +"6df549b7": "pendingBrick(uint256,address)", "6df55024": "LogBuyTokens(address,uint256,string)", +"6df557a4": "setInitiatorPercentage(uint24)", +"6df59266": "foo4(address,int256)", "6df5ee2b": "withdrawPresale()", +"6df6b2ae": "depositedWEIByAddress(address)", +"6df6c216": "PolicyIn(address,uint256,uint256)", "6df6ca7a": "getDivsBalance(address,address)", +"6df7f1ac": "SetWinner(address,uint256,uint256,uint256)", "6df7f38f": "sellForBitcoin(address,uint256)", +"6df814be": "lockTournamentSuccess(uint256,bool)", "6df83012": "startLockUpSec()", "6df8359f": "WorkOrderStarted(uint128)", "6df86816": "ActionAgonPlat(address)", +"6df923a9": "AddNewLpCheck(address,address)", +"6df93c6c": "buyInstrument(string[],uint8[],uint256[],uint256[],bytes[])", "6df99d81": "CCH_TEL_AVIV_01()", +"6dfa64e5": "isInsolvency(uint256)", "6dfa8d99": "totalEarned()", "6dfada86": "mintToken(address,uint256,address)", +"6dfb0386": "setNumberOfWinners(uint256)", +"6dfb38bc": "addMasterFile(uint256,string,string,uint256)", +"6dfc0ddb": "swapExact0For1(address,uint256,address,uint160)", "6dfc15a4": "changelp6(address)", "6dfc2fa8": "isInProgress()", +"6dfccdb6": "transferAdmins(address)", "6dfd3c5a": "interestReceived()", +"6dfde8b4": "rewardsAllocationReleaseAt()", +"6dfe308d": "FarmingRate()", +"6dfe4e0c": "setInitialMaxTransfers(uint8)", "6dfe512e": "initPGOMonthlyInternalVault(address[],uint256[])", "6dfe869b": "Preallocation(address,uint256)", "6dfe8a34": "setSkillName(address,uint256,bytes32)", +"6dfeb12f": "tokenAdded(address)", +"6dff108d": "AddrNdx(address)", +"6dff132e": "rewardtoken()", +"6dff3584": "dataRoot()", "6dff8216": "cbAddresses()", +"6e002ce2": "log_in(string,string)", +"6e002e4f": "finishChangeEmissionRateLong()", "6e008b35": "calculateResult()", +"6e00f7f2": "m_startTime()", +"6e01793c": "enterPosition(address,uint256,bool,uint256)", +"6e01c312": "marketing_add()", "6e034f4d": "tokensaleBuyTokens()", "6e038c4f": "firstTotalSupply()", +"6e03b27c": "rewardV(uint256)", +"6e03b82d": "getUserRoundStatus(uint256,address)", +"6e045795": "stakingUsers(address)", +"6e047e6d": "portalMemberData(uint256)", +"6e0482c3": "createBet(uint256,bytes32,uint256)", "6e051dba": "ReserveTokensHolderMock(address,address,address)", +"6e052752": "createNewPoolForAccount(address,address,uint256,address,uint256)", "6e0550e5": "stepOneEndTime()", "6e0560c3": "doNotAutoRefund(address)", "6e05d3ca": "Z1CoinGenesis(address)", "6e064f6a": "HedglyStakingToken()", +"6e066e6d": "autoPoolSubDist(uint256)", "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()", +"6e07c014": "ownerOf721(address,uint256)", +"6e080816": "blockHeights(uint256)", "6e080d86": "register(string,string,bool,string,address,uint256,uint256)", "6e083bc7": "credoEthExchangeRate()", +"6e0857a6": "hasCloneOfGen0(address,uint256)", +"6e08865b": "destVaultWillBeSafeExplicit(uint256,uint256,uint256,string)", +"6e090c18": "setVotingAllowedForSenders(address,address[],bool[])", +"6e093596": "getSAV3XRPbalance()", "6e094b67": "TPS()", "6e09a4ab": "diff(uint256[],uint256[])", +"6e0a6176": "setNumEntries(uint256)", "6e0b0c80": "MIToken()", +"6e0b1d82": "getDivdEth()", "6e0bd282": "destroy(bytes32)", +"6e0c319a": "Referral(address,uint32,uint32,uint256)", "6e0c7867": "createDataObject(bytes32,address,bytes32,address,bytes32)", +"6e0ca71a": "miningRate(address)", "6e0cd415": "isPositionCalled(bytes32)", +"6e0d5ff1": "GetUserGrossRevenue()", "6e0d98fe": "setProbabilities(uint32[])", "6e0da3ee": "WoodToken(uint256,string,string)", "6e0da971": "tokensSoldIco()", "6e0dd984": "setCapUsd(uint256)", "6e0e7e85": "withdrawERC20Compatible(bytes32,uint256,uint256,uint256[])", +"6e0ee4aa": "oracleCallback(uint256,uint256)", +"6e0f5b48": "MBCOREToken()", +"6e0f767a": "_minTransferBalancePct()", "6e0f8d68": "stage_1_price()", "6e0fb1c5": "FOUNDER2_STAKE()", +"6e0fde58": "addERC721TokenContractToList(address)", "6e101967": "set_iconiq_pre_kyc_bonus_denominator(uint256)", "6e106628": "getWinningReportingParticipant()", +"6e1120f8": "setBuyerBalance(uint256,uint256)", +"6e112409": "getRequestInfo(address,uint256)", "6e114511": "decreaseTotalSupply(uint256)", "6e1180f8": "setOversightAddress(address,bool)", +"6e11975f": "testSendTrxSelf(uint256)", +"6e11fb1b": "Approve(address,address,uint256)", "6e120023": "TimestampScheduler(address,address,address)", +"6e12256b": "patched()", "6e125009": "contractTokensAvailable()", "6e1286fc": "getReward(uint256[])", "6e12b46e": "requiredPoints()", "6e13cdfe": "claimH2()", "6e13d418": "stakeAddress(uint256)", +"6e13d8c5": "setHoldedCoverIDStatus(uint256,uint256)", +"6e13fe76": "exchanges(address,bytes32,uint256)", "6e140e6c": "TetherToken(uint256,string,string,uint8)", "6e1479c0": "testControlCreateNewRevisionNotOwner()", "6e14b71b": "PetsCoin()", "6e15266a": "fifty_two_weeks()", +"6e159712": "getUNI(address)", +"6e160b21": "addressesPush(address)", "6e1636bb": "logOrderCanceled(address,address,address,bytes32,uint8,uint256,uint256)", "6e164e23": "claimTokens(uint256,address)", +"6e16de11": "setCoolDownTime(uint256)", "6e16f9ed": "iBird()", +"6e170558": "__mis()", "6e173a7f": "storeBlockHeader(bytes,bytes)", "6e17e7c2": "nextFieldIndex()", +"6e18113c": "proposalCanceled(uint256)", "6e18980a": "transferByLegacy(address,address,uint256)", +"6e18b6db": "referralReward(address)", "6e18eba5": "ethUSDPrice()", "6e18ff05": "getRefInfo(address,address)", "6e1907cc": "test21(uint256)", +"6e190b4e": "getAllSpecs()", +"6e196b68": "setETHtoCHFrate(uint256)", "6e1a1336": "setString(string,string)", +"6e1b14e7": "setSchedule(address,uint32,uint32,uint256,uint256)", "6e1b6bcc": "checkMyBet(address)", "6e1bd323": "MAX_TOKEN()", +"6e1c21e1": "_solveDispute(uint256,bool,address)", +"6e1cc498": "USDTToExchcoin(uint256)", +"6e1cca25": "diplomas(bytes32)", +"6e1ce394": "LogWithdraw(address,uint256,address)", "6e1cf038": "getNumNiceBets(uint256)", +"6e1cf5d7": "updateTrackerContract(address)", "6e1d3c0d": "sudoku()", "6e1d7d5e": "EtherIbe()", +"6e1d9d2d": "getFarmAddress()", +"6e1dc66e": "startTime(address)", "6e1e063f": "claimableRefund(address)", "6e1e34c7": "TokensBoughts(uint256)", +"6e1e4256": "listKAJS(address,uint256,uint256)", "6e1ece25": "totalFeesValue()", +"6e1f0f68": "getDailySoFar()", "6e1f777d": "createTokenToTeam()", "6e2117f7": "forFunction()", "6e217d30": "setBuyCourse(uint256)", "6e219667": "p3()", +"6e21f686": "tokenForWithdrawing()", "6e21fc87": "_airdrop(address)", "6e223710": "getRockInfo(uint256)", "6e224034": "totalCrowdCoin()", +"6e2246a7": "borrow(address,uint256,bytes)", "6e22aea0": "AIW(uint256,string,string)", "6e22d33e": "getBytesValue(string)", "6e22e32b": "setMonethaAddress(address,address,bool)", "6e233918": "buyTank(uint32)", +"6e23bd2c": "num24hPoints()", +"6e2402d9": "CountWork()", +"6e24081c": "AddOwnerRequestSetup(address,address)", "6e241c5c": "_createExoplanet(string,address,uint256,uint32,string,uint32,uint8,string)", "6e247f29": "Transfer_of_authority_logic(address)", +"6e261df1": "rescueFund(address,uint256)", +"6e262123": "setPresaleAllowed(uint8,address[])", "6e2653ca": "AirSwapHandler(address,address,address)", +"6e27034d": "getRecordIndexLengthForGroupCycleIndexer(uint256)", +"6e271467": "___referinit(address,address,address,address)", +"6e273f98": "getMSbankInfo()", "6e275bd2": "transferFrom(address,address,address,address,uint256)", +"6e276613": "affShare()", "6e27d889": "lockTokens(uint256)", +"6e2808ac": "dividendsTimestamps(uint256)", "6e2857f2": "setEscrow(address,address)", +"6e286671": "unwrap(uint256,uint256)", "6e287154": "setLocalRevenuPercent(uint256)", "6e293817": "transferWithReference(address,uint256,bytes32,string)", "6e2940eb": "NhCoin()", +"6e29b725": "queryRelease(address)", "6e2a2d0a": "result_amount()", "6e2adeee": "SweetToken(string,string,address)", +"6e2b723a": "MatchFailedPayoutRelease(uint8)", "6e2bf348": "getDiscountByAmount(uint256)", "6e2c10a1": "unitedNations()", "6e2c732d": "add(uint64,uint64)", "6e2cde85": "drawPot(string,string)", +"6e2ce58b": "avgAll()", +"6e2d5208": "dhptWhitelist(address)", "6e2d53a6": "TreasureCoin()", "6e2d604a": "thrash()", +"6e2d9c38": "tokenLockedBalances(address)", "6e2da4b3": "proposeAction(address)", "6e2db8d7": "addWhiteList(address,uint256)", +"6e2dd09e": "getOpenOrderETHAmountByAddress(address)", +"6e2e05fb": "NewWithdrawal(address,uint256)", +"6e2e2b23": "VestingContractFunded(address,address,uint256)", "6e2e2e4d": "showMessage(bytes32,uint256,string)", +"6e2e9c18": "checkSubscription()", "6e2e9c3b": "contributedUsd()", "6e2e9ee1": "setKYCRequiredToReceiveFunds(bool)", +"6e2eafcc": "dev(address,uint256)", +"6e2eb512": "removeOracle(bytes32)", "6e2ede03": "getCollateralMarketsLength()", "6e2edf30": "ETCSurvey(address)", "6e2f0bb8": "newSaddleryCon(address)", "6e2f10bd": "changeMerchantBeneficiaryAddress(uint256,address)", "6e2f5f12": "sendToFaucet(uint256)", +"6e2fb91d": "pool6users(address)", "6e2fd470": "sharedExpenseWithdrawn()", +"6e30199f": "tokenAddress(string)", "6e30418b": "totalPlayerBalance()", +"6e30cec8": "chargeWithSPPIndexes(address,uint256[],bool)", "6e30d411": "showDevBalance()", +"6e312d63": "buyPool(uint256,uint256,address,bytes32[],bytes)", "6e317da7": "changeRedeemer(address)", +"6e31a6fa": "joinGame(uint8[3],uint256)", +"6e31d80a": "isLoanToken()", "6e31f704": "DARIC()", "6e321105": "losePercent()", "6e32295e": "mDestroyTokens(address,uint256)", +"6e325519": "contributeTo(uint256)", "6e329aa9": "getPotato()", +"6e32a795": "gxt_address()", "6e32cf8e": "admin_transfer_tempLockAddress(address,uint256,uint256)", +"6e3393e1": "sendUSDT(string,uint256)", +"6e33a831": "buyWithToken(address,uint256)", +"6e33b062": "ceiling(uint256)", "6e33bc13": "COINS_TO_HATCH_1STRIPPERS()", +"6e33f316": "getAlpaca(uint256)", +"6e347e57": "swapTokensInComponent(address,address,uint256)", "6e349188": "MAXSOLD_SUPPLY()", "6e34b4e4": "getPoolOwner(uint256)", +"6e34d929": "getLatestPriceETH()", +"6e34e54d": "promoters(address,uint256)", "6e3532fa": "getSubscriptionFee()", "6e353435": "inputauction(uint256,uint256,string)", "6e353a1d": "emergencyWithdrawal(address)", "6e359afa": "changeTrueUSDOperation()", "6e36893a": "ICOInvestment(address,uint256,uint256,uint8)", "6e3706c8": "PRE_DURATION()", +"6e3706f4": "orders_(bytes32)", "6e377202": "isAuthed(address,address)", "6e3825d2": "checkMyTicket(uint32)", +"6e38d9bd": "numElections()", +"6e393975": "reply()", +"6e3979e2": "getUserClaimByIndex(uint256,address)", "6e39891c": "currentDividendAmount()", "6e39eb85": "resetNumberOfCandidates()", +"6e3a1b16": "numPendingAuthorized()", "6e3a1e5c": "requestEthereumChange(string,string)", +"6e3a7aae": "viewAdmin(address)", +"6e3ac99f": "invest(address,uint256,uint256,bytes32,uint8,bytes32,bytes32,uint256)", "6e3ae353": "changeOrigDev(address)", +"6e3ae51f": "setM(string)", "6e3aff90": "getOrderString()", "6e3bbebd": "ZJLTToken()", +"6e3bfda8": "addTicketLsit(string[],string[],string[])", +"6e3c005b": "CoinPurchase(address,uint256)", "6e3c5759": "claim_partnerPreICOTokens(address)", +"6e3c99a3": "trancheOneSaleTime()", +"6e3ca795": "getNonceFromKS(address,uint256)", +"6e3cc52c": "retrieveMimeTypeIndex(bytes32)", +"6e3cf885": "_tBlock()", +"6e3d4820": "getUnstakeTime(address)", "6e3d5a9d": "getTopCompanyBlocksInBetween()", +"6e3d9ff0": "upgrade(address,string)", +"6e3daae4": "sqrt(int128)", "6e3de78a": "UNFOMO(string,string,uint256,uint256,bool)", "6e3e1318": "takeFee(uint32)", "6e3e82f9": "_computeCut(uint256,uint256)", +"6e3ee8f1": "BuyGenesisLevel3FromNormal(address)", +"6e3f37e5": "changeMachineDescription(string)", "6e3f3f1a": "proposal(address,uint256,address)", +"6e3f5d52": "setInterestModel(address)", +"6e3f6f10": "safeLamaTransfer(address,uint256)", "6e3f7ba0": "TokenFrozen(uint256,string)", "6e3f8550": "walletReserve()", +"6e3ff71e": "cipherPerBlock()", +"6e403350": "_setExitFeeCooldown(uint256)", "6e403cd7": "sendBread(address,uint256)", "6e40975d": "ICOToken()", +"6e409fb8": "getStakeAmountByUserByLP(address,address)", +"6e41494b": "weis()", "6e415d37": "farewellTo(address)", "6e417c69": "executeRequest(uint256)", "6e41a78f": "DRC()", "6e41b1ad": "nameTaken(uint256)", "6e41efb2": "ThawTransfers(address,bool)", "6e4264ce": "initiateDeposit()", +"6e427b8f": "createRiskyStake(uint256)", "6e4324a3": "Cryptopus()", "6e439078": "makeLogCancel(address,address,address,address,uint256,uint256,uint256)", +"6e43a17c": "executeClear(uint256[])", "6e441752": "teamToken2019()", +"6e4457ac": "reward_pool(address)", "6e44fcea": "isHoldTokens()", "6e459cf1": "CrowdSale(address,uint256)", "6e4602c8": "TimereumX()", +"6e46048f": "_transferERC20(address,address,uint256)", "6e46408d": "indexOfOwners(address,address)", "6e4647d6": "vendingCreateCollectible(uint256,address)", "6e468a8a": "CelticsCoin()", +"6e46c9bb": "forceCloanLoan(bytes32,address)", +"6e47720e": "policyVotingBlocks()", +"6e47b341": "pIQ()", +"6e47b482": "INCENTIVIZE_ADDR()", +"6e47d0f4": "getSortedIndexOf16(uint16)", +"6e48288f": "soldEth()", "6e48670f": "zeroSub(uint256,uint256)", "6e48a035": "closeVote(uint256)", "6e49b1e1": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6e4a00da": "getPrincipleTokenBalance()", "6e4a6874": "setReceiver4()", "6e4a7b26": "initializeCoins()", +"6e4a8547": "DEBUG_str(string)", "6e4a9f4d": "Nguen()", "6e4ac25f": "TokenData(address,address)", +"6e4af83e": "removeFromGreyList(address)", "6e4b0222": "setactivelevel(uint256)", "6e4bfb37": "GenaroTokenSale(uint256,uint256,address,uint256,bytes32)", +"6e4c0460": "onSellEvent(address,uint256)", "6e4c42a0": "getGameSides()", "6e4c9829": "amountsOf(address)", "6e4ca716": "totalEthRecieved()", "6e4dd931": "GetPotInfo()", "6e4df96e": "produceWine()", +"6e4e1022": "registeredusers(address)", "6e4e5c1d": "revealedCurves()", "6e4e87e0": "sendQuickPromoBonus()", "6e4eb9cb": "getSeedsSinceLastEvent(address)", @@ -63253,66 +115682,118 @@ "6e4f33b0": "change_delay(uint256)", "6e4f68b5": "PONO()", "6e4f749e": "freezeMethod(address,bool)", +"6e4f88c8": "getAllStakers()", "6e500306": "Bst()", "6e50640c": "WinikToken()", "6e506ee4": "managementTokenAllocation()", "6e50c39c": "serializeState(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256)", +"6e50dce4": "getBounceID(string,address)", "6e50eb3f": "setEndsAt(uint256)", +"6e5158f4": "onBoardPRF()", +"6e519d10": "getMetaTransactionMessageHash(bytes4,bytes,uint256,bytes32)", "6e51be3d": "UmmahDinar()", "6e52dcd6": "pauseChannels()", "6e5320d1": "changeTokenInformation(string,string)", "6e53909a": "setLockAdmin(address,bool)", "6e5390d2": "woodAddress()", +"6e539c31": "voteActive()", +"6e53d065": "getItem(int256)", "6e5406e3": "_0xLitecoinToken()", +"6e540d22": "setUsageCalcContract(address)", "6e54181e": "right75(uint256)", "6e5452fe": "OUTCOME_RANGE()", +"6e54c664": "enableProvider(uint256)", +"6e550055": "RubyERC20Address()", "6e553f65": "deposit(uint256,address)", "6e555a18": "testCreateContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", "6e556725": "initialEndPrice()", +"6e55d859": "holdStake(uint256,uint256)", +"6e55ff9a": "changeCurrency(address)", +"6e563d9c": "setKOLP(address)", "6e56dce5": "collectEtherBack()", "6e56e5eb": "_emitUserBinded(uint256,address,bool)", "6e56e895": "test_defaultPermissions()", +"6e57307b": "extendLocking(uint256,uint256,uint256,bytes32)", +"6e575195": "NewSell(address,uint256,uint256,uint256,uint256)", "6e575537": "MAX_OWNER_PERS_SITE()", "6e57e7e0": "payOut(address,uint128,int256)", +"6e57f86a": "_buTemplates(uint256)", "6e581673": "buyPackWithERC20Tokens(uint8,address)", +"6e5893bf": "PlayerPassedTurn(uint256,uint8)", +"6e58ea64": "receiveAEthFrom(address,uint256)", "6e593210": "getActiveSellOrders(uint256)", "6e596aef": "moveCeiling(uint256)", +"6e59b606": "tokensUnstaked(uint256,address)", "6e59e570": "sendToOtherBlockchain2(string,string,address)", "6e59f3f3": "createChannel(address)", +"6e5a2d6c": "getAmountPaid(bytes32)", +"6e5a6d1b": "setUpSale(uint8,uint256,uint256,uint256,uint256)", +"6e5a8228": "safeSubtractShouldNotRevert()", "6e5ac882": "root(address)", "6e5aef4d": "getInitTime(uint256)", "6e5b064c": "basicPricePerEth()", +"6e5cbede": "disableWhitelist(address)", +"6e5d6bea": "setMediatorContractOnOtherSide(address)", "6e5deca4": "YaoDun()", +"6e5e74a5": "_nullcardToken()", +"6e5e8569": "batchERC20Balances(address[],address[])", "6e5ecdff": "updateDependencies()", +"6e5eedde": "AddAdministrator(address)", +"6e5f05eb": "getTotalAnswers()", "6e5f375e": "setGameStartedDividendPercentage(uint256)", +"6e5fc1ec": "MIN_BATCH_SWAPS()", "6e5fd38d": "registerMultiple(address[],bool)", +"6e609a9f": "swapForNote(uint256)", "6e609af2": "FulfillmentUpdated(uint256,uint256)", +"6e609c01": "getNumbers(string,uint256)", "6e60cf61": "freedWinPoolToTeam()", +"6e60e3c6": "raffleAddress(uint256)", +"6e613a7c": "gotBonus(address)", +"6e616a4c": "beneficiariesCount()", +"6e616a62": "bidTakerAmount(uint32,address)", +"6e6238d7": "getAmount1DeltaSignedInvariants(uint160,uint160,int128)", +"6e625a0c": "AppandtransfertokensUni(uint256,address)", "6e6260fa": "thresholdNewTokenPair()", "6e62825a": "SCDCToken1()", +"6e62a87a": "sUniBaseEDBlock()", "6e62cdab": "nextRoundWinner()", +"6e62d42f": "presaleDappAddr()", "6e62de19": "fundFailed()", +"6e62e22b": "registarEPublicarAto(string,string,string,string,string,string,string)", "6e63015c": "getCertifiersCount()", "6e630649": "changeState(uint256,uint8)", +"6e630eb1": "registerNameXaddr(address,string,address,bool)", "6e635673": "deletePullPayment(uint8,bytes32,bytes32,string,address,address)", "6e638d3b": "claimIFSReward(address)", "6e640f4c": "candidat()", +"6e6446fa": "TIE_PRICE_CHANGE_TOLERANCE()", +"6e6452cb": "Bid()", "6e658fbe": "myFundsExpireIn(uint256)", +"6e65d1b6": "ChangeLegacyNFTAddress(address)", +"6e660427": "C_NestMining()", "6e6656d8": "setCallStackSize(uint256)", "6e66644d": "changeStakingFeesOperation()", "6e667c35": "contentURI(uint256)", +"6e667db3": "transferProxy()", +"6e66c536": "setExemptRecipient(address,bool)", "6e66cc38": "TraceToToken(address,uint256,uint256,address)", "6e66f6e9": "tokenReward()", "6e676b69": "changeVotingRules(uint256,uint256,uint256)", +"6e677327": "rebalanceComponentWhitelist()", "6e67b803": "bid3(address,uint256[],uint256[])", "6e680ee7": "CREATORS_WALLET_ADDRESS()", +"6e686a7d": "claimMarketingTokens()", "6e68751c": "revokeVestedTokensFor(address)", "6e68ec59": "getSoilHumdtyException(bytes32)", +"6e69bebe": "getFileTransferProofs(bytes32,uint256)", "6e69e7d7": "maximumNumberOfLoops(uint256,uint256)", "6e6a1dc3": "weightedVoteCountsOf(uint256,uint256)", "6e6a42ec": "retraitStandard_1()", +"6e6a5272": "oracleWrapperAddress()", +"6e6a90ce": "validateSpenderAuthorization(address,address)", "6e6b4bed": "getArt(string)", "6e6b8004": "upgradeGemsSpecial()", +"6e6bcbc6": "member_of()", "6e6beb07": "PreSaleBuy()", "6e6bfca0": "cancelJobByProvider(bytes32)", "6e6c4c58": "CrowdTmoney2()", @@ -63320,6 +115801,9 @@ "6e6ca6f5": "getLastTransferred(address)", "6e6d83d2": "cancelLoanRequestAtIndexByLender(uint256)", "6e6d9a6c": "Token(address[],uint256[])", +"6e6e1d46": "testCreation()", +"6e6e4b5d": "idToMarbleNFTSource(uint256)", +"6e6e7804": "queryAmountToExtract()", "6e6e8a02": "addWhitelist(address,address[])", "6e6ed399": "priceValidSeconds()", "6e6f2fe5": "DentacoinToken()", @@ -63328,42 +115812,87 @@ "6e70096e": "withdrawEarnings(uint256)", "6e70cb07": "getAssetHolders()", "6e70de82": "transitionState()", +"6e719888": "budz()", +"6e71e2d8": "utilizationRate(uint256,uint256,uint256)", +"6e71ee90": "initiateRebasement(uint256,bool)", "6e720693": "RevokeEvent(address,address,uint32)", +"6e722920": "removeFromMinters(address)", "6e722fcb": "getIsBonusClaimed(uint256,address)", +"6e723382": "MIN_DEPOSITS()", "6e725302": "getRatio(uint256,uint256,uint256)", +"6e725b92": "invalidateIndexNFT(uint256)", +"6e72b452": "payArbitrationFeeByReceiver(uint256)", +"6e72ecb8": "vasquez1(address,uint256)", +"6e72fd4a": "NT(uint256)", "6e730a67": "setSecondStageEndsAt(uint256)", +"6e732286": "bosePerBlock()", "6e733f50": "getCap(string)", +"6e741c3a": "tokenInvestments(address)", "6e743fa9": "punkBids(uint256)", "6e74774a": "MHCTokenIssue(address)", +"6e74fb42": "availabletokens()", "6e752548": "finalizeStartTime()", "6e754efb": "daysnumber()", +"6e75d729": "pow_2(bytes16)", "6e761a73": "claimDevReward(address)", +"6e765c15": "Created(bytes32,address)", +"6e7666d6": "Motd(string)", "6e76a89f": "validateReserves()", "6e76fb4c": "MemberRemoved(address)", +"6e77037f": "setPaymentExpiryPeriod(uint256)", "6e779481": "ADVISORS_CAP()", "6e77d4bb": "CryptoMountainsToken()", +"6e77f0ff": "setmasterAddr(address)", "6e787a48": "correctOriginalSupply()", "6e78e95f": "CryptoLeaders()", "6e79ae56": "deleteOpenAction(string,string,string,string,string)", +"6e79e133": "getSellQuote(address,address,address,uint256)", "6e7a824f": "TestCoin(uint256,string,string)", "6e7b698f": "drops(address[],uint256)", "6e7bc3e5": "addContractOwner(address)", "6e7c1700": "getJobName(uint256)", "6e7c1c2b": "getWithdrawDigest(bytes32,address,uint256,uint64)", "6e7c77b6": "testClaimTokens()", +"6e7ce591": "migrateOut(address,uint256)", +"6e7d2c64": "depositTradingProfit(uint256)", +"6e7d3025": "team_(uint256)", +"6e7d4019": "poolToken(uint256)", "6e7d9dc6": "transferCreatureOwnership(address)", +"6e7dd917": "giveFunds(address,uint256)", +"6e7e1365": "forgeBatch(uint48,uint256,uint256,bytes,bytes,bytes,uint8,bool,uint256[2],uint256[2][2],uint256[2])", "6e7e3b2b": "contributors()", "6e7f26ab": "distributeToken(uint256,address[])", +"6e7f3172": "approve0xProxy(address,uint256)", +"6e801a71": "initReserve(address,address,address,uint8,address)", +"6e80240a": "_setPiggyDistribution(address)", +"6e802c6a": "addGiver(address,string,string,uint64,address)", "6e80a869": "minimalInvestmentInWei()", +"6e80b9cd": "closeLoan(address)", +"6e81221c": "swap(address,address,uint256,address)", +"6e81aa63": "nimbusReferralProgram()", "6e823b47": "controlledBurn(address,uint256)", "6e82e86a": "getHash(uint256[])", +"6e8326bf": "_lockBalance(address,uint256)", +"6e832f07": "officeHours()", +"6e83bbb2": "LogMinterRemove(address)", +"6e83ea35": "_combineIndex(uint256,uint8)", +"6e84061b": "h_pure()", "6e843a74": "AgreementUrlRu()", "6e8480e0": "TokenMetadata(string,uint8,string,string)", +"6e84920f": "setglobalCandidateSupportPct(uint256)", +"6e84f870": "Agents(address)", +"6e858b08": "uniTransferToken(uint256,address,address)", "6e8595f5": "CheckAddressVerified(address)", +"6e85aa69": "fsDivRate()", "6e861c0e": "deauthorizeContract(address)", +"6e8639b2": "updateBaseMultiplier(uint256,uint256)", +"6e86b770": "childToRootToken(address)", "6e8755af": "updateRewardsFor(address)", +"6e87b987": "SetMaxFee(uint256)", "6e880e4d": "PreminedAsset()", "6e88147e": "tradeReport()", +"6e881a96": "monthlyMints(uint256)", +"6e882486": "toggleRedeeming(bool)", "6e88274b": "GetBetBalance()", "6e883095": "checkPrizes(address)", "6e8851a9": "initSale2()", @@ -63372,15 +115901,20 @@ "6e88a7bd": "referrerFee()", "6e88b4ef": "tgeStageBlockLeft()", "6e88d5fa": "judgeFakeTokenAndTransfer(uint256,address)", +"6e890f3c": "commitManagerFeeIncrease()", +"6e898c8d": "minterTransfered(address,address)", "6e899550": "setString(bytes32,string)", +"6e89adf9": "votesIndicesByOperation(bytes32,uint256)", "6e89d517": "Deposited(address,uint256,bytes)", "6e8a3438": "TransferStatusChanged(bool)", "6e8a3d4b": "SerpentIsRunning()", +"6e8a6188": "redeemNativeTokenByRewarder(bytes32,address,uint256)", "6e8a6d12": "updatePriceAddress(address)", "6e8ab641": "Arbitragebit()", "6e8ac0c8": "developersAllocation()", "6e8add02": "setMainsale(address)", "6e8b7c23": "numcalls()", +"6e8c271b": "getLastUpdateTime(address)", "6e8c2caf": "gameRunning()", "6e8c57e6": "minBalanceToAllowContractCreation()", "6e8d3007": "CapitalTechCrowdsale(address,address,address)", @@ -63390,24 +115924,37 @@ "6e8dc135": "WinnerSelected(address,uint256,uint256,uint256)", "6e8ddc7a": "LuxArbitrageToken()", "6e8de595": "setBoardMember(uint256,uint256,uint256)", +"6e8e0739": "pendingBsc(uint256,address)", +"6e8e1f59": "OwnerWithDraw(address,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)", +"6e9094ea": "isChannelOpened(bytes32)", "6e90a590": "expectedTotalSupply()", +"6e910cc7": "kajp()", "6e914d97": "requestAdminTokenTransfer(address,address,uint256,string)", "6e929838": "PAXToken(address,address,address,bool)", "6e929d4c": "sendIBTCTokenToMultiAddr(address[],uint256[])", +"6e92bc21": "said()", +"6e92c843": "tokenWinner(uint256)", +"6e92e9d2": "onIssueTokens(address,address,uint256,uint256,uint256)", "6e932270": "dewhitelist(address)", "6e939d05": "moveFromState(bytes32,int8[128],uint256,uint256,bytes)", +"6e93a70f": "LOG_ChangePermissions(address,address,uint8)", "6e93dbdc": "koCommissionAccount()", "6e940a29": "changeHost(address)", "6e942390": "howMany(uint256,uint256)", "6e942f82": "buildingCostWei()", +"6e94426b": "NameChanged(uint256,bytes32,bytes32)", "6e947298": "getETHBalance()", +"6e94a629": "refundERC20(address)", "6e94d278": "burnReputation(uint256,address,address)", +"6e94ef52": "approve_264(address,uint256)", "6e95a066": "IouRootsPresaleToken(string,string,uint8)", +"6e95a8e8": "_sharesPerUNBASE()", +"6e9602e6": "enableTrading(address[])", "6e96433f": "multiPartyTransferFrom(address,address[],uint256[])", "6e96463f": "BonusesUpdated(address,bool)", "6e965a89": "calculateWeeklyTokensSupply()", @@ -63417,33 +115964,58 @@ "6e97041e": "SCPS1Token()", "6e970dfd": "retireMaster(address)", "6e974fd6": "approveWalletFeeData(uint256)", +"6e97684e": "percentUnfrozenAfterAwardedPerPeriod()", "6e977865": "dadFab()", "6e978d91": "right90(uint256)", +"6e97b84e": "teamCountOfLeg(uint32,uint256)", +"6e97c782": "changeStarPrice(uint256)", +"6e9821c2": "trusted(address)", +"6e983466": "add(address,bool)", +"6e985dc0": "updateSwapContract(address)", +"6e986ce4": "getGSushiOverSushiRatio()", +"6e98762d": "executeRequest(address)", +"6e98a04e": "getTrAValue(uint256)", "6e98a92b": "fundManagementAddress()", "6e995bd9": "updateChannelState(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", "6e9960c3": "getAdmin()", "6e997972": "modSymbol(string)", +"6e99c4e2": "RawTransfer(address,address,uint256)", "6e99d52f": "COOLDOWN_PERIOD()", "6e9a41c3": "DraftCrowdsale(uint256,uint256,uint256)", +"6e9a7129": "shareOfTreasury(uint256)", "6e9af3f7": "giveForce(address)", "6e9b134e": "LogCancelDelivery(address,string)", "6e9b41d4": "releaseForGoolaTeam()", +"6e9b8555": "registeredAddresses(uint256)", +"6e9c11f9": "nextUpdate()", "6e9c3683": "getIndexByProposalId(bytes32)", "6e9c4650": "prepaidUnits()", "6e9c4d0a": "rateTenant(uint256)", "6e9c931c": "stake(uint256,address,uint256)", "6e9cfb79": "itemReturn()", "6e9d3b9d": "AtoOneCoin(uint256,string,uint8,string)", +"6e9dde99": "setTransactionEnabled(uint256,bool)", +"6e9ddeaf": "LogReceiveQuery(bytes32,uint64,uint256,uint8)", +"6e9df653": "updatedSupply(uint256)", "6e9e48ef": "tokenIdToOwner(uint256)", +"6e9f1f34": "convertOneEthtoToken(address,uint256,uint256,address)", "6e9ffe2b": "updateTransferRestrictionVerifier(address)", "6ea007b3": "dailyLimitLeft()", +"6ea0338b": "NextRaffle()", +"6ea03fa3": "issuedDate()", "6ea056a9": "sweep(address,uint256)", "6ea07a36": "recoverSimple(bytes32,uint8,uint256,uint256)", +"6ea10e7d": "showMEs()", "6ea11f65": "togglePublicMatches()", "6ea141cb": "AddBonusToList(bytes32,uint256,uint256)", "6ea150e2": "changeWithdrawTimeRange(uint256,uint256)", +"6ea15e11": "_gatekeeper()", "6ea16f3a": "tryRefund()", "6ea16f81": "houseTraits(uint256,uint256)", +"6ea19d25": "totalSupplyCHIP()", +"6ea21f93": "repayvSPACEX(uint256)", +"6ea23722": "EtheralTest0()", +"6ea2ed98": "withdrawBonusCallback(address,uint256,uint256)", "6ea34ce4": "getPartById(uint256)", "6ea38199": "getMoreAuctionDetails(uint256)", "6ea3b6d1": "ICO_Finished()", @@ -63452,163 +116024,285 @@ "6ea412b1": "Exchanged(address,uint256)", "6ea42555": "pack(uint256)", "6ea451e4": "setSaleLimit(uint8)", +"6ea48aa0": "BlindBidsRevealed(uint256,address,uint256)", "6ea51811": "icoStartP4()", "6ea521d9": "_voteAs(address,uint256,uint256,uint256,string)", +"6ea58031": "SetCommission(uint256)", +"6ea5a231": "CYCLEBNBLastTotalSupply()", +"6ea64031": "Whitelisted(address,uint256)", +"6ea66fd1": "WETH_WOWS_STAKE_FARM()", "6ea68360": "newMasterCopy()", +"6ea685ab": "setMintAddr(address)", "6ea69c91": "closePositionOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"6ea69d62": "rewardContract()", "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)", +"6ea7317d": "deposit_time(address)", "6ea79583": "team_wallet()", "6ea798bc": "MyMiniToken(uint256)", +"6ea7b7d5": "callNonPayableProtocol(bytes,bytes32[])", +"6ea83dd3": "modifyTwoParameters(address,address,bytes32,bytes32,uint256,uint256)", +"6ea8bc10": "getPlatformFee()", "6ea8efea": "getGameNum()", "6ea928d9": "getSymbolHash()", +"6ea94a83": "subDepositAmount(address,uint256)", "6ea96bcd": "defaultBuyerLastPaidAt()", +"6ea9bfc5": "set(uint256[])", "6eaa0f16": "CCTOKEN()", +"6eaaa898": "WithdrawedEthToHold(uint256)", +"6eab0e5f": "_amountIn()", "6eabb2f6": "getWineryOperation(string,address,uint256)", "6eabcd69": "__abortFuse()", +"6eabee0c": "binaryFactor()", +"6eac22c5": "TokenFallback(address,uint256)", +"6eac6840": "getIndexMapping(address)", "6eac86d4": "settleTransaction(bytes32)", +"6eaca852": "userHunters(address,uint256[])", +"6eacc03e": "removeAddressfrom(string,address)", "6eaccf4c": "privilegedTransfer(address,address,uint256)", +"6eacd398": "totalBalance(address)", "6eacd48a": "ownerPauseGame(bool)", "6eadcc87": "tokenSetup(address,address,address,address,address)", "6eaddad2": "setDevPercent(uint256)", +"6eadde43": "initialize(address,uint256,address,uint256,uint256,string)", "6eadeba0": "resolve_block_hash(uint256)", "6eae0843": "getTeam(uint16,uint8)", "6eae555d": "amendDisputeDispersal(uint256[])", +"6eaef0cf": "myswapExactTokensForTokens(address,address,uint256)", "6eaefc87": "tokenExchangeRateBase()", "6eafbe88": "ChangeTeamHolder(address,address)", +"6eb0581d": "unpauseReleases()", "6eb060ea": "setMinBuyPublic()", "6eb09ce2": "ethbalance(address)", "6eb1546d": "_removeBid(uint256)", +"6eb1c20c": "refractFromToken(uint256,bool)", "6eb1e09a": "fechVoteMainInfoByStage(uint256)", "6eb21929": "softcapReached()", +"6eb224cb": "extend(bytes4,address)", "6eb227ce": "getCurrentWeek()", "6eb25ed8": "distributionOne(address)", "6eb267ab": "CxNtoken(address)", "6eb2a749": "isMaySale()", +"6eb2be69": "addressMap(string)", +"6eb2e1db": "setUnifundMultiplier(uint256)", "6eb2f0cc": "payShareholders(uint256)", "6eb305aa": "getTimestampInSeconds()", +"6eb31a3b": "BuyBackIssuance(address,address,uint256)", +"6eb46ec4": "ExpirationDate()", "6eb47ea7": "linkTeamToUser(address,bytes32)", +"6eb48096": "retrieveExcessTokens(uint256)", +"6eb4b91f": "addMembersBeforeLaunch(address[],uint256[])", +"6eb4c609": "recover(address,address,bytes32,uint8,bytes32,bytes32)", +"6eb4d36b": "BurnShort()", "6eb5197d": "getFirstAdmin()", "6eb58224": "castDocumentVote(uint8,bytes32,bool)", "6eb5ad4f": "lockPriceChange()", "6eb5bef0": "addressSupporters()", "6eb5ebae": "FidgETHSpinner()", +"6eb6c2de": "_plans(uint256)", "6eb6c8fb": "MoneyToken()", "6eb6ffa7": "initialQuorumPercent()", +"6eb76202": "fundErc20()", "6eb769d2": "tokenTotalSold()", "6eb7b4c2": "underdogInfo(uint256)", "6eb7c67b": "_getEthPrice()", +"6eb8012b": "withdrawAfterSystemClosed(uint256)", "6eb85627": "Stalincoin()", "6eb86537": "getAllPackage()", +"6eb86d6e": "useInviteCodeMap(address)", +"6eb910cf": "depositToGame(uint256,uint256)", "6eb91683": "donateForContractHealth()", "6eba2b13": "getOrder(address)", "6eba68f9": "ICOFactoryVersion()", +"6eba94ce": "EventChangedInt32(address,string,int32)", +"6eba998f": "getEstimatedTokenForTokenUniV2(uint256,address,address)", +"6ebb64a2": "setDevAddr(address)", "6ebb6d80": "attack(address,uint8)", +"6ebbda9f": "returnVariousTokenFromContract(address)", "6ebbe863": "updatePublishContract(address)", "6ebbfd5a": "addItemTo(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6ebc0155": "darkCockUniswapV2Pair()", "6ebc0af1": "tranche()", "6ebc6200": "CURRENSEE(address,address,address)", +"6ebc6e88": "LogMixerDeposit(bytes32,uint256,address,uint256)", "6ebc8c86": "getContract(uint256)", +"6ebcddb8": "auction__reserveStake()", "6ebcf607": "_balances(address)", +"6ebd2bb6": "setPerson(string,string)", +"6ebd362c": "initialize(uint256,string,string,address)", "6ebd9d7f": "setApiRegistryContractAddress(address)", "6ebdac12": "removeProductFromCart(uint256)", +"6ebdff2c": "setFundPool(address)", "6ebe299f": "adventureDataContract()", +"6ebeb5f6": "validate(string,uint256[],address[])", +"6ebeebd8": "updateFees(uint256,int256,int256)", "6ebf10fe": "storeHeader(bytes,address)", +"6ebf36c0": "convert2(address,address,uint256,uint256,address,uint256)", "6ebf5223": "ProofOfSheepM()", +"6ebf55d0": "tokensBought(address,uint256)", +"6ebfc750": "write(bool)", "6ec012e7": "saleIndex()", +"6ec02be9": "submissionCount()", "6ec03f7a": "removeCrydrView(string)", "6ec05f13": "EURWEI()", "6ec069f8": "teamOneDivsUnclaimed()", "6ec0ce6e": "_isController(address)", +"6ec190b9": "TransferToWinner(uint256,uint256,uint256,string,address,address)", +"6ec1da74": "Invite(uint256,uint256,uint256,uint256)", +"6ec21cc8": "totalPooled()", "6ec232d3": "gasprice()", "6ec236ed": "calculateTaskDeposit(uint256)", "6ec23e53": "OPTIToken()", "6ec25a06": "tokenCreated(address,uint256,string)", +"6ec26daa": "setAccountLockType(address,uint8)", +"6ec2b8a1": "k3(uint256)", "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()", +"6ec4ac0b": "toplama()", "6ec4c951": "claimWithdraw(address,uint256)", +"6ec4d9ae": "admin_address(uint256)", "6ec4e5b8": "callERC165SupportsInterface(address,bytes4)", "6ec5239f": "setAvatar(string)", +"6ec54254": "InvestClosed(address,uint256)", +"6ec55abb": "_getDharmaSigningKey()", +"6ec61caf": "convict(uint256,bytes32,uint256,uint8,bytes32,bytes32)", "6ec62f29": "assertEq28(bytes28,bytes28)", "6ec6d4a6": "setMinLimit(uint256)", "6ec7743d": "getSubjectClaimSetEntryAt(address,uint256,uint256,uint256)", "6ec782d9": "changeWaitTime(uint32)", "6ec84711": "organizer6()", +"6ec88976": "setStrategyFee(uint256)", +"6ec934da": "isMarket(address)", "6ec99dd0": "testGetBlobStore()", "6ec9b125": "EtherSphere()", +"6ec9b700": "ticketOptionValues_(uint256,uint256)", +"6ec9b897": "roll(uint256,uint256)", "6eca017e": "releaseForYoobaTeam()", "6eca4a50": "UKTTokenController(bytes32,bytes32)", "6eca6a9e": "updateRecordName(uint256,string)", "6ecaa195": "coolness(uint256)", +"6ecb0c41": "generateMessage(address,uint256,uint256,address,uint256)", "6ecb97cd": "getInitializeNumOutcomesValue()", "6ecbb556": "UAPCrowdsale(uint256,uint256,uint256,address,address)", +"6ecc064e": "changeExecutionDelay(uint64)", +"6ecc20da": "stakeETH(uint256)", +"6ecc46e0": "getServersNumber()", "6ecc7bcf": "CeezetTokin()", +"6ecc855f": "systemTransfer(uint256)", "6ecc9ad9": "getInstallments(uint256)", +"6eccc6a3": "otherOperators(address)", +"6ecd067f": "savingsRate()", "6ecd1129": "nextAvailableLevel()", +"6ecd2306": "mint(uint8)", "6ecd7b70": "CancelSale(uint256)", +"6ecdb81b": "multiplyByTwo(uint256)", +"6ece08ac": "decrease_allowance(address,uint256)", +"6ece4296": "stringvalue()", "6ece5937": "endGame(uint256,string,address)", "6ece7d88": "doVote(uint256,uint256)", +"6ecec0d9": "insuranceIsInitialized(uint256)", "6eced029": "getMsgGasAfter()", +"6ecf2b22": "initialize(address,address,uint32)", "6ecf9f7b": "hype()", +"6ed051f5": "onCardBuy(address,uint256,uint256,uint256,uint256)", +"6ed0ad95": "buyJuniorBond(uint256,uint256,uint256)", "6ed0b9d7": "changeStage(uint8,uint256,uint256)", +"6ed12bae": "destDebtRedeem(bytes32)", +"6ed145e1": "KOOL()", +"6ed1ac6c": "addPendingTaxRewards(uint256)", +"6ed25fbc": "pendingSdx(uint256,address)", "6ed28ed0": "store(uint256,uint256)", "6ed2d8c6": "giantFYou(address,uint256)", "6ed2fc5c": "PRESALE_WEI()", "6ed33343": "dsp()", "6ed33b98": "addSupportedToken(address,address,uint256,uint256,uint256)", "6ed34394": "totalLockPrincipal()", +"6ed35166": "disperseBatchToken(address,uint256[],address[],uint256[][])", +"6ed3876d": "listStake()", "6ed3f468": "sendsignature()", "6ed40f9d": "isValid(string,string,uint256,uint256)", +"6ed415b9": "deal(address,address,address,address,uint256,uint256,uint256,uint256)", "6ed43eb0": "getInvestorList(uint256)", "6ed4d0c7": "dataCenterGetResult(bytes32)", "6ed51d94": "isValidBuyOrder(address,address)", +"6ed54961": "getTokenByPatchId(string)", +"6ed54bf1": "multiMint(address,uint8)", +"6ed55665": "setTest(uint256[][4])", "6ed55eb5": "setUserRating(address,uint8)", "6ed5777e": "BuyHORSEtokens()", +"6ed59319": "convertOnetoUni(address,uint256,uint256,address)", "6ed5f880": "withdrawGTA(uint256)", "6ed65dae": "sendCount()", +"6ed671e8": "repay(address,address)", "6ed6da9e": "getUserById(uint256)", "6ed6e17a": "updateCurGamePrizeInfoWithDraw(uint256,address,uint256)", +"6ed77343": "setLiquidator(address,address,address)", "6ed776b2": "createToken(address,address)", +"6ed785ff": "withdrawCollectedFees(uint256)", "6ed7c013": "move_monsters()", "6ed7e058": "rememberAllRequiredBlockHashes()", "6ed84231": "TOURNAMENT_BATTLE()", "6ed89fbc": "_transport(uint256,uint256)", +"6ed8b028": "addSpaceShips(uint256,uint256)", +"6ed93cc5": "isConditionTimedOut(bytes32)", "6ed963b7": "EthereumTravelCrowdsale(uint256,address,address)", "6ed9c19f": "calculateMasked(address,uint256)", "6ed9fd89": "avgGas(address)", +"6eda1f89": "dpoAddr()", +"6eda32f9": "divestFromVault(uint256,bool)", +"6eda47b3": "julrouter()", +"6edaf245": "initialize(address,address,uint256,uint256,uint256,uint256,address,bytes32)", "6edb2e8a": "sellPropertyAndChangeOwnership(address)", "6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", "6edb9ab0": "batchDepositTo(address,address[],uint256[])", "6edbba2e": "numFree()", "6edbd134": "hasHash()", "6edbeb1c": "verificationHoldersTimestampMap(address)", +"6edc2c09": "virtualBalancesForAddition(address)", +"6edc2ccc": "payInrate(bytes32,uint256)", "6edc7ba7": "getExchangeFunctionSignatures(address)", +"6edd6cb9": "sendEthWhiteList(uint256)", +"6edde0bd": "categorizeProposal(uint256,uint256,uint256)", "6ede2106": "EtherIn(address,uint256)", "6ede696b": "PaymentProcessor(address)", "6edf1cc4": "getWithdrawalForAddress(address,address,uint256)", +"6edfcd23": "gasSponsor()", "6ee0400d": "ICOBonusPercent1week()", +"6ee13c4f": "pendingColor(uint256,address)", +"6ee15d66": "generateId(uint32,uint32,uint32)", "6ee1844e": "KnownOriginDigitalAsset(address)", "6ee18573": "addWhitelistOperator(address)", +"6ee1e4ab": "HARDCAP_ROUND_1()", "6ee2627b": "maxFundLimit()", +"6ee2786c": "getDetailContent(uint256)", +"6ee27979": "_addStudServiceAdmin(address)", "6ee2e362": "CleanCurrentRoomAndRound(address)", "6ee2ed5d": "totalSpinners()", "6ee31a18": "upgradeToken(address)", +"6ee379f5": "_withdrawalRootToNonce(bytes32)", "6ee3d453": "modifyGameItemPrice(uint256,uint256)", +"6ee3db6c": "getEFIL()", "6ee3e896": "setDefeats(uint256,uint16)", +"6ee49615": "EventOn_HardcapChanged(uint256,uint256)", "6ee4b475": "InitialBlockCount()", "6ee4d553": "cancelOracleRequest(bytes32,uint256,bytes4,uint256)", +"6ee5741a": "init(string,string,address)", +"6ee5bbe1": "from_balancer_to_sushiswap(address,uint256,uint256,uint256,address[],address[])", "6ee5d676": "getSumCourse()", +"6ee5fb01": "newToken(address,string,string,address)", "6ee61483": "changeBuyin(uint256)", "6ee63f1f": "MineableToken()", "6ee64345": "endMainSale()", "6ee678ae": "_burn(address,address,uint256)", +"6ee68cb7": "OfferCreated(address,uint256,uint256,bytes32)", +"6ee6bc5b": "batchReduceAllReserves(address[],address)", "6ee74b3c": "Test5()", "6ee7826f": "_getRoundedPrice(uint256)", "6ee78aea": "isMultiple(uint256)", @@ -63616,9 +116310,15 @@ "6ee8067f": "whitelistManagerAddr()", "6ee84bb7": "SDD_Erc223Token()", "6ee88301": "getRoomOwner(uint256)", +"6ee90d62": "sellPrices(uint256)", +"6ee97ee7": "endTournamentSuccess(uint256)", +"6ee9c55e": "setLimitTimeTransferEndDate(uint256)", "6eea4820": "QBT()", +"6eea7ee9": "checkPenality(address)", +"6eeb5431": "getCustomServiceFee(address)", "6eeb553f": "pollBurnCompleted()", "6eeb7a36": "setCreator(address,bool)", +"6eeb872b": "presentLevelNumber()", "6eeba5c6": "short_party()", "6eebad9e": "Jitech(uint256,string,uint8,string)", "6eebb73f": "activateZone(int32[],int32[],uint8[],uint8[])", @@ -63626,116 +116326,197 @@ "6eec2dd2": "Released(bytes32)", "6eec3db6": "allocateAdvisorTokens()", "6eecb7c2": "getDomainTypehash()", +"6eecc269": "LogReturnOtherCrypto(address,string)", "6eecf81a": "SetPrcntRate(uint256)", "6eedc46d": "tokenWalletChange(address)", +"6eedd175": "setBCoinContractAddress(address)", "6eee2dad": "mintRewardTokens(address,uint256)", +"6eeeaaa5": "joiningFee()", "6eeeca03": "finalizeSale2()", "6eef0326": "placeBetOdd(uint256)", "6eef2cb7": "functionTwo()", +"6eef5220": "resetSeason()", "6eef7a05": "bytesToString(bytes32)", "6eef908f": "startReceiveTicket()", +"6eef997f": "_toggleFrontRunGuard()", +"6eefcf75": "syncUserInfo(address)", +"6ef0507d": "allOrdersArr(uint256)", "6ef0a5cf": "singleTransferToken(address,uint256)", "6ef0c864": "SetDataAddress(address)", "6ef0f37f": "setHome(address)", "6ef181a8": "setRarityMultiplier(uint8)", "6ef1a114": "transfersRemaining()", +"6ef1d379": "query(address,uint256,uint256,function)", "6ef1f3a6": "luckyOne(uint256)", +"6ef25c3a": "baseFee()", "6ef27042": "CentraToken()", +"6ef2c89b": "knownReleaseTime()", +"6ef2fd27": "getMajorInfo(bytes32)", "6ef33b8f": "getInfo3(address,address)", "6ef3732d": "fixDividendBalances(address,bool)", +"6ef3da94": "updateAccessControls(address)", +"6ef3eacd": "updateCurrentSupplier()", "6ef3ef7e": "approveData(address,uint256,bytes)", +"6ef40889": "hotMap(address)", +"6ef46bbc": "lastUserRebase(address)", +"6ef4855b": "TokensBurned(uint256)", +"6ef4cb8f": "xyzInstance()", "6ef4e8db": "getCalcToken()", +"6ef5148a": "changeExecutorRegistryAddress(address)", +"6ef52ceb": "FEEWALLET()", "6ef61092": "withdrawn(address)", +"6ef63d25": "TapProposalClosed(uint256,uint256,bool)", +"6ef6f248": "allCertifiedTokens()", "6ef72aaa": "BattleResult(address,address,uint256[],uint256[],bool,uint16,uint256,uint32,uint32)", +"6ef747a2": "rewardFirstBlock()", "6ef791bb": "WylSistContract()", +"6ef7f513": "_getInterestSplit(uint256,uint256)", +"6ef89b5a": "_getRandomPositionIdx(uint128,uint256)", +"6ef8b541": "removeCanTransfer(address)", "6ef8c661": "addInfoListItem(bool,address,address,uint256,string)", "6ef8d66d": "renouncePauser()", "6ef958df": "changeSource(string,string,uint256)", +"6ef985e4": "TotalDepositsChanged(uint256)", "6ef98b21": "withdrawOwner(uint256)", +"6ef9a3e7": "upgradeProdutivity(address,address)", "6ef9bc29": "phase3EndingAt()", "6ef9e145": "weiBalances(address)", "6efa0621": "SPPSeriesB(uint256,string,uint8,string)", +"6efa49ac": "allowedBurners(uint256)", "6efa629d": "releaseFees()", "6efa6a67": "PAYOUT_PCT()", +"6efa8fed": "setDelayParam(uint256)", "6efab8f2": "overloadedMethod(address)", +"6efaed51": "setSupplyAndSector(uint16,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "6efaf16c": "disableAutoSeller()", +"6efbad0b": "debitingFinished()", "6efbb60a": "addONG(bytes32,string,string)", "6efbd610": "coownerPrice()", "6efd1adf": "RATE_EXPONENT()", "6efd5974": "signedApproveHash(address,address,address,uint256,uint256,uint256)", +"6efdadd7": "approve_669(address,uint256)", +"6efdbe0f": "STOCKTOKEN()", "6efe39a3": "getEncryptedKeyFromRequest(uint256,uint256)", "6efef04d": "setLevelEndDate(uint256,uint256)", "6eff2044": "onlyOwnerOrManager()", +"6eff2b6e": "pendingcSWOP(uint256,address)", "6eff8071": "addFuelFree(uint256,uint256,uint256,uint256)", +"6eff8285": "ProxyDestinationCannotBeNilError()", "6eff96f2": "rafflepot()", "6effb219": "changeCreditFundNIMFAAddress(address)", "6effb579": "stop_sell(uint256)", "6effdda7": "Trade(address,uint256,address,uint256,address,address)", "6effe1c7": "startSale2Phase()", "6effec50": "forwardCall(address,uint256,bytes)", +"6f00a2c9": "totalContractsGenerated()", "6f00a3cf": "DumpDivs()", "6f00ad8a": "lastmoney()", "6f00fd97": "createTokenTransaction(address,uint256,uint256,uint256,uint256,address,uint256)", +"6f011538": "setAirdropContract(address)", +"6f012b8d": "getCollateralOnExercise(uint256)", "6f015889": "Activate(address,uint256,string)", "6f0166c4": "GeoGems(address)", +"6f01a986": "emitExchangeRebate(address,bytes32,uint256)", "6f01d915": "addHedge(address,uint256,uint256,bytes3,bytes3,uint64,bytes32,bytes32)", "6f020775": "totalCoinLock()", "6f022ac4": "cancelMigration(address)", +"6f022cf9": "remainBalanced2()", +"6f024245": "engine3_balance_lotery()", "6f02483f": "EtherGang()", "6f024899": "Destructible()", "6f025aec": "MolikToken()", "6f025c84": "MithrilDemo()", +"6f027d35": "setERC20Wrapper(address)", +"6f02c2f1": "getBillNFTAddress()", +"6f031d90": "giveTicket(address,uint16[],uint256)", +"6f03421b": "TaoVanDongVien(string,string,uint256,uint256,string)", +"6f03a5d5": "keccak256()", +"6f03a63e": "verPremio()", +"6f03b684": "bonusStages(uint256)", "6f03e307": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[])", "6f03e4f9": "getClientBalances(address)", +"6f043253": "U_amount(address)", "6f0470aa": "candidates()", "6f04ff33": "increaseSalesBalance(address,uint256)", "6f0503ad": "setDerivePayoutDistributionHash(bytes32)", +"6f053a3b": "_releasedAmount()", +"6f055fce": "depositTokenPair(address,uint256,address,uint256)", "6f05994e": "addBalanceFor(address,uint256)", +"6f060b2c": "SGA_MINTED_FOR_SGN_HOLDERS()", "6f0663f0": "RadioCoin()", +"6f06810a": "subscribersPos(uint256)", "6f069cfe": "technik()", "6f06fdb3": "hasAgreement(uint256)", "6f079f90": "getPricingEndsAt()", +"6f0817b9": "keeperData(address)", "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)", +"6f0a3ae6": "getDenorm(address)", +"6f0a5e71": "mintLLC(address)", "6f0a74d5": "_8_poluchaetLesha()", "6f0ac394": "getCP(address)", +"6f0b0c1c": "claimCollateral()", "6f0b5180": "buyFor(address)", +"6f0b7c6d": "eth_rate22()", +"6f0c2890": "clearWhiteBlack(address)", +"6f0ca2f3": "setBTCBPriceForUSDP(uint256)", "6f0cd3a6": "m_active()", "6f0cfab6": "DNSResolver()", "6f0d0a38": "CrocsFarmer()", +"6f0d1172": "marketMakerWithdrawAndRedeem(address,address,address,address,uint48,address,uint256,uint256)", +"6f0dfe25": "qEC()", +"6f0ec39b": "fourBlock()", +"6f0f2f1a": "zgetMixLen()", "6f0f45d2": "OPERATIONS_ADDRESS()", "6f0fccab": "getTokenName(address)", "6f0fdce8": "Task(address)", +"6f0fe65d": "autoPrepare(address,uint256,uint256)", "6f1003c4": "minEsteemAmount()", "6f109879": "impl_transferMSM(address,address,uint256)", "6f10d1a0": "addNewToken(bytes32,address,address)", +"6f10e285": "res()", "6f10fdbd": "totalPlay()", +"6f11432d": "get_product(uint256)", "6f117190": "getInitialTerrain(uint256,uint256)", "6f11a859": "availableAirdrop(address)", "6f1236e1": "ETHPriceProvider(string)", +"6f123d3d": "Suspended(address)", "6f1296d2": "wrapEther()", +"6f12f596": "CURVE_REGISTRY_EXCHANGE_ID()", +"6f1383a2": "setMasternodeContractForData(address)", +"6f13ab00": "pollId()", "6f13b95d": "editTokensForHour(uint256)", "6f13e01b": "EthVenturePlugin()", "6f13eb09": "BlockChainZB(uint256,string,string)", +"6f13fd0f": "updateETHOracleContractAddress(address)", "6f1427b2": "icoInProgress()", "6f147f5c": "addWhiteListed(address[],uint256[],uint256[])", "6f14dc62": "storehouse(bytes32)", "6f152670": "max_fundingGoal()", "6f15847f": "recordInfo(bytes32,uint256,string)", "6f159c4f": "founder_token()", +"6f16a110": "protocolAdapterRegistry()", "6f16a595": "PRICE_MIN()", +"6f16ddca": "jelly()", +"6f171812": "fulfillRequest(bytes32,uint256,bytes)", "6f17a516": "ln_fixed3_lnr(uint256,uint256)", "6f181303": "ScriptCallable()", "6f18337d": "IHF(address,uint256)", "6f18d3f5": "traded_token_is_seeded()", +"6f19b916": "PROPOSAL_REWARD_AMOUNT()", +"6f19dbb5": "approve_751(address,uint256)", "6f1a5b72": "updateTokenHolder(address)", "6f1a78cc": "deleteWebsite(address)", "6f1aa1f5": "requestTokenIssue(address,uint256,string)", "6f1ae5de": "_itemRemoveMarkets(uint256)", +"6f1b526d": "removeTokenGrant(uint256)", +"6f1b5a29": "cancelGame(uint256,uint256,uint256,address)", +"6f1bde50": "initNode(address[],bool[])", +"6f1bfbb6": "getReferredAddressesLength(address)", "6f1c8a51": "_getHash(address,bytes32)", "6f1ca0c2": "preicoSupply()", "6f1cecd8": "unreadMessages(address,uint256)", @@ -63743,60 +116524,115 @@ "6f1e54c3": "sellMyTokensAmount(uint8,uint256)", "6f1e6419": "MANHATTANPROXYYORKAVE()", "6f1e738c": "updateISIN(string)", +"6f1e8533": "isStaker(address)", +"6f1f0803": "daoPercent()", +"6f1f54db": "getCycleFinancialsByIndex(uint256)", +"6f1f5c2a": "findBlockRefefrrerByAddress(address)", "6f1fb766": "sealedBids()", "6f200ce3": "transferBlock(address,address,uint256)", "6f204f20": "getChannelInfo(address,address,uint8)", +"6f2088c9": "fetchEthUsdcRate()", +"6f20a3c5": "Claimd()", "6f2130d3": "amountOfCRs(address)", +"6f214a6a": "get_weights_sum_per_type(int128)", +"6f21eb4c": "setCustodyVaultAddress(address)", +"6f220d98": "Confirmed(uint256,address)", "6f2223c5": "getRefereeAddress(address)", "6f227851": "USDValue()", "6f2293ab": "transferFrom(address,address,uint256,bool)", "6f22993c": "moveTokens(address,address,uint256)", +"6f229cc3": "setParameter(address,address,uint256,uint256,uint256)", "6f22d6a5": "losses()", "6f24fe30": "notifyPledgeNotPayed(uint256)", "6f253319": "CurrentGoldPrice()", +"6f25838d": "BetReceived(address,address,address)", "6f259077": "STAGE_ONE_TIME_END()", "6f2594a0": "moduleMultiOwner(address)", +"6f25ac3f": "getCreateContractPermissionCheck()", +"6f25bcfb": "A1(bytes)", +"6f25c350": "NUXToUSD(uint256)", +"6f2641e1": "extra(uint256)", "6f264776": "buy10tickets()", "6f264b2e": "requiredTokenAddress()", +"6f265b93": "spot()", +"6f265eaa": "libraryIndexToOwner(uint256)", +"6f269385": "storage8Char()", +"6f26beb3": "borrowTknAndTransfer(address,uint256)", "6f26d566": "dailyLottery()", +"6f27dac9": "isGumTokenHolder(address)", "6f28a853": "assertNotSpent(uint256,int256,bytes32,bytes32)", +"6f28d688": "rewardToken1()", "6f28ee09": "storeHash(string,string)", "6f290893": "Refund(address,uint256,uint256,int256)", +"6f296898": "balanceOfInvestor(string)", "6f29c88a": "exchangedNum()", +"6f2a4efd": "approve_866(address,uint256)", +"6f2a6791": "stream()", "6f2b1226": "upgradeBank(address)", +"6f2b1f0e": "link_collateral()", +"6f2b6ee6": "setLockProxy(address)", +"6f2bbec8": "IssuersUpdated(address,bool)", +"6f2c590a": "rewardMultiplier()", +"6f2ce315": "l2_swap_raw_limit(int256,uint256,address,address,uint256)", +"6f2d5142": "laws(address)", +"6f2d71ce": "Upgrade()", +"6f2ddd93": "template()", "6f2f098b": "Cite(bytes32)", "6f2f7a57": "getWinNumber()", "6f2fc06b": "proxyPayments(address)", "6f2feb0a": "approveAndSell(uint256,uint256)", +"6f300155": "requestingFeeInWei()", +"6f30048c": "setWrapped(address,address)", +"6f302bb9": "_transactionFee()", "6f307dc3": "underlying()", +"6f30b226": "repayWeiCounterVault()", "6f30e1ee": "PunkBidWithdrawn(uint256,uint256,address)", +"6f315638": "set2()", "6f3165d3": "UpgradeRig(uint8,uint256)", "6f320970": "vernamCrowdSale()", "6f322fef": "Atra()", +"6f32328e": "distributePremium(address,uint256,uint256)", "6f326ac6": "checkStorageProof(bytes32[],address)", "6f32a937": "min256(uint256,uint256,uint256)", "6f32b2ac": "setRSPScienceAddress(address)", "6f32b4cb": "mainICOSecondWeekEndTime()", +"6f331443": "readTradeData(address,uint8,uint256)", "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()", +"6f34aeea": "emergencyWithdraw_single(uint256)", +"6f34dc5b": "initialize(string,string,uint8,uint256,address,uint256,uint256,uint256,uint256)", +"6f350f7c": "totalVaultRewards()", +"6f356f4a": "finalFees(address)", "6f35c749": "SECONDS_OF_DAY()", +"6f35f448": "LIFEtoken()", "6f362c2b": "latestSpender()", "6f3640f7": "getRealUsdAmount()", +"6f366b71": "removeProtectedLiquidity(uint256)", +"6f36c10c": "updateNaaSRewardPerBlock(uint256,uint256)", "6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", +"6f36e56a": "getPriceCalculator()", +"6f36ef34": "nextPickerReward()", "6f370b20": "Austriachain()", "6f373cb7": "PullRequestClaimed(uint256,uint256)", "6f374a12": "setBool()", +"6f37e55b": "ONE_POINT_ZERO()", "6f37f48b": "firstToken(address)", +"6f37f671": "transactionsOffset(string)", "6f38e410": "maxLevels()", "6f3921ee": "extended()", +"6f395c83": "removeTimeLock(address,uint8)", +"6f395e9f": "hasPurchased(address,address)", +"6f39cfcd": "setFundAddr(address)", "6f3a7561": "SimpleAuction(address)", "6f3ad341": "ICO_ONE()", +"6f3ae2b0": "importAave(address,address[],bool)", "6f3b2819": "secondChainHNw2()", "6f3b4759": "lockMultiple(address[])", +"6f3b4a55": "receiveRefundTo(address,address)", "6f3b60d6": "latestOrderId()", "6f3b6d00": "RESERVED_TEAM_SIDE()", "6f3b8ce2": "getArrayAddress(bytes32)", @@ -63804,159 +116640,306 @@ "6f3bb97f": "unsetVipAddress(address,address)", "6f3be1da": "lift_ban()", "6f3be6b7": "ELEXTROCOIN()", +"6f3bf3fa": "Registered(address,uint256)", "6f3bf6ea": "GMC()", +"6f3c7281": "killCivilian(address)", "6f3c8566": "redeemWarriors()", +"6f3ca55d": "setUni(address)", "6f3d8043": "valueAfterReducingFee(uint256)", +"6f3dcde0": "Transfer(string,address,address,uint256,bytes)", +"6f3ebce8": "retrieveUriSchemeIndex(bytes32)", +"6f3f6618": "getOptionValueBonus(address)", "6f3f6870": "CertAdmins(address)", +"6f3f760f": "committerBalances(address)", "6f3fe404": "updateBalances()", "6f414fbb": "sale1Started()", +"6f416ce2": "agregarCliente(uint256,int256,int256,string)", +"6f4171c9": "logBytes1(bytes1)", +"6f41ab2f": "convertFromUnderlying(uint256)", "6f4215b1": "setEthRate(uint256)", "6f42879f": "wantsToFight(uint256,uint256)", "6f42934d": "getTimePurchase()", +"6f429fa9": "adminOracleHashes(bytes32)", "6f42c901": "teamAddresses(address)", "6f43233a": "getAnyAddressTokenBalance(address,address)", +"6f4359e8": "_isEmployeeIdActive(uint256)", +"6f43e6eb": "approveKyber(address)", "6f44c4d7": "recipientVIP()", +"6f460b12": "LogOracleNameChange(address,string,string)", "6f4618d8": "firstReserveAllocation()", +"6f466706": "RequireThatA2(bytes32,address,uint256,uint256)", "6f468289": "CONTRIB_PERIOD2_STAKE()", "6f475e7f": "validateTransfer(address,address)", "6f476cbc": "opMinted()", "6f479f57": "changeSellingPrice(uint256,uint128)", "6f47b075": "test_set_get_Policy()", "6f47e218": "sharesRaised()", +"6f47fabd": "createCityFee()", "6f4812e2": "testFailControllerInsufficientFundsTransfer()", "6f48455e": "checkMinMaxInvestment(uint256)", +"6f484a12": "totalRefLocked()", "6f488063": "getPOOL_edit_7()", +"6f48e79b": "setDonationAddress(address)", "6f494049": "registerPublicKey(uint256,uint256)", +"6f494349": "updateGrant(string,string,uint256,address)", +"6f49712b": "isStaking(address)", +"6f4977fa": "getBtcUsdTimestamp()", "6f49a3c0": "openChest()", +"6f49c34e": "REWARDS(address)", "6f4a2cd0": "distributeRewards()", +"6f4a3de9": "initialize(uint256,address,address,address,address,uint256,string,string,uint8)", +"6f4a5a35": "hostname()", +"6f4a61cd": "advertFee()", +"6f4b18df": "contestAcquisition()", +"6f4b2adf": "NewTokenPair(address,address)", "6f4b31cc": "Bastonet()", +"6f4bcf8c": "startQled(uint256,uint256,uint256,uint256,uint256)", "6f4bda17": "numberOfPlayers()", "6f4be234": "EMJAC()", +"6f4c4023": "setXgp1ContractByGen(address,uint256,uint256)", "6f4c6443": "invite(address,address)", +"6f4c982a": "_RewardClaimed(uint256,uint256,address)", "6f4ca36e": "Tracto()", +"6f4cc645": "setOG2_BONUS(uint256)", "6f4ce56a": "indexOf(bytes32)", "6f4d469b": "addMembers(address[])", "6f4d6f5d": "ShitToken(address)", "6f4d80e5": "m_state()", +"6f4d8d23": "getBNBStakedById(uint256)", "6f4db6a7": "hasRepeat(uint8[4])", "6f4dd69c": "testSetBalanceUpdatesSupply()", +"6f4df459": "basePrice2()", "6f4dfede": "GetExpireTime()", +"6f4e12d6": "tempDiceGame(address[],uint256[],uint256,uint256)", +"6f4e4387": "GetProjectGoal(uint256)", +"6f4eb635": "setLockType(uint256,uint8)", "6f4eb87e": "test_removeFromRegistry()", "6f4ebb70": "calculate_reward(uint256,address,uint256)", +"6f4ec6e7": "dDAI_ADDRESS()", "6f4efd53": "POTJ()", "6f4f2ec3": "ERC20Template(string,string,uint8,uint256,address)", +"6f4fa35b": "_addProtectedToken(address)", +"6f4fbf32": "auctconfim(address,uint256)", "6f500df5": "claimCofounditTokens(address)", +"6f502056": "setRewardPercentages(uint256,uint256)", "6f503750": "LogPermit(bytes32,bytes32,bytes32)", "6f503e67": "vestingOf(address,uint256)", +"6f50458d": "getDelegateeByType(address,uint8)", +"6f505882": "confirmBlacklist(address)", +"6f50f507": "setMultipliers(uint256,uint256)", "6f512e61": "setSgdToEthRate(uint256)", +"6f516c2c": "setContractUrl(string)", +"6f51782b": "removeBypassByTarget(uint32,address)", "6f51d01f": "getUserBlockNumber(bytes32)", +"6f51d8cf": "getProfilePicture(address)", "6f52167d": "payDuel(address,string,address,string)", +"6f528592": "bulkRemoveAddressesFromAirDrop(address[])", +"6f52cd7a": "leftshift(int256,uint256)", +"6f5378c6": "BetfromZ5D(uint256)", "6f53a48a": "Bitprize()", +"6f53aabf": "x_adminRescueToken(address,uint256)", "6f53da8f": "benefitFunds()", "6f53df6c": "EtheraffleLOTPromo()", +"6f53f62b": "bcdcPerBlock()", "6f540fe0": "setCampaign(address)", +"6f5453d0": "tokenReward2()", +"6f54cd08": "setUnStakeBurnCut(uint256)", "6f54e4df": "candyper()", "6f54e89e": "getMaximumFunds()", +"6f554641": "genesisTotalDollar()", +"6f55967b": "xcomb()", +"6f55b350": "polkaBridge()", "6f5736c6": "getFreeFalcon()", "6f5831cb": "startTokensSale(address,uint256,uint256,uint256,uint256)", +"6f583ba6": "activateStorageOracle(address)", "6f584bd8": "View_TrustlessTransaction_Info(uint256)", "6f58659b": "totalRewardIssuedOut(address)", "6f59a5cc": "curBubbleNumber()", +"6f5a43ef": "updateValsetAndSubmitBatch(address[],uint256[],uint256,address[],uint256[],uint256,uint8[],bytes32[],bytes32[],uint256[],address[],uint256[],uint256,address)", +"6f5a5f95": "withdrawByOwner(uint256)", +"6f5a66ff": "importCompound(address,address[])", +"6f5b2263": "getRecomCountByAddress(address)", "6f5b286d": "tokenUnsold()", +"6f5b3dc4": "updatePunksWebsite(string)", +"6f5babdd": "TMTG_DeleteSuperInvestor(address)", +"6f5bb8ea": "__MappingToken_init(address,uint256,address,address,string,string,uint8,uint256)", +"6f5cc3b9": "last_withdrawal_time()", "6f5cca83": "withdrawForCompany()", "6f5d616b": "execPermissions(address)", "6f5d64fa": "FSNASAddress()", "6f5d712e": "TOTAL_TOKEN_CAP()", +"6f5d75c7": "privateFirstWallet(address)", +"6f5d7a93": "CUSEaddr()", +"6f5da832": "initLockedBalance()", "6f5da839": "Token(uint256,string,string,uint8)", "6f5da961": "transferEntityOwnerPull(address)", +"6f5db87f": "redeemAlgorithmicFRAX(uint256,uint256)", +"6f5e0212": "setLpAddress(address)", +"6f5e5050": "lockSubmissions()", "6f5e7398": "dasToken()", "6f5eb4b5": "publicSell(uint16)", +"6f5ef6ed": "removeEth(address,uint256,uint256)", +"6f5efdd9": "isApproved(bytes)", "6f5f20ce": "INITIAL()", +"6f5f535d": "init(address[],uint256[],string,string,uint8)", "6f5f7ba2": "CreatedYUPIE(address,uint256)", "6f5f8f74": "Cryptoloans()", "6f5f9498": "InitializedManager(address)", "6f6007bb": "StartdatePresale()", +"6f60965d": "MyTotalStaked(address)", "6f609714": "FrameworkToken()", +"6f61037f": "CHI_ADDRESS()", +"6f619b6e": "l3l2users()", "6f625567": "roleAdd(address,string)", +"6f626eb3": "onList(address)", "6f62cba3": "resetUserRefBalance(address)", "6f62e755": "changeGatewayAddr(uint32,address,string)", "6f63d2ec": "left66(uint256)", +"6f640071": "TransferBounty(address,uint256)", "6f64234e": "sendFunds(address,uint256)", +"6f6455b2": "dfProfits()", "6f64824b": "setErc677token(address)", +"6f64a97d": "taxManyAndModifyParameters(address,uint256,uint256,bytes32,uint256)", "6f64ccf5": "checkVestingTimestamp(address)", "6f652e1a": "createOrder(address,uint256,uint256,uint256)", "6f6541e0": "SetLot(uint256)", "6f656c2d": "getPhaseEmissionType(uint256)", +"6f65e87d": "channelStorageHashes(bytes32)", +"6f65f236": "recentBlock(address)", +"6f65f2f8": "withdrawKF(address)", "6f6640c1": "AnthillFarmer()", +"6f664a9d": "WithdrawFromFixedDeposit(uint256,uint256)", "6f66d23b": "adminGetWorldData()", "6f6781d3": "getPosition(uint8)", +"6f682a53": "numberOfPools()", "6f68d634": "acceptTrusteeOwnership()", +"6f68e8d2": "lookup(bytes4)", +"6f68ebae": "holdLimit()", "6f68fffd": "setEndSaleTime(uint256)", "6f691500": "getMySecondAmount()", +"6f6941b9": "cDAI()", "6f698fb5": "setMinimumQuorum(uint256)", +"6f6a398b": "phaseIIR()", +"6f6a4a00": "distributeFinalExtReward(uint256,uint256)", +"6f6a5d44": "firstYearReward()", "6f6aadfb": "SnovPresale()", "6f6b32ad": "PVXToken()", +"6f6b3e96": "setChangelogAddress(address,bytes32,address)", "6f6b6963": "VestingCreated(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"6f6b71b5": "updateOwner(address,uint256)", +"6f6bb7a7": "calculateClosePositionFeePercent(uint256)", "6f6bdbe3": "specialUsers()", "6f6c0244": "generateShortLink()", "6f6c0759": "onlyPayForFuel()", +"6f6c454d": "setQianMax(uint256)", "6f6c7234": "setApoderadoVerify(bytes32,bytes32,bytes32)", +"6f6cbee4": "votesForYes()", "6f6cd9f5": "isElectionPeriodProposal(uint256)", "6f6d3694": "removeRound(uint256,uint256)", "6f6eacee": "availbleToken()", +"6f6f09b0": "adddegree(uint256,uint256)", +"6f6f7721": "getVerifiedOfficers()", "6f6f828e": "removeAllTournamentContenders()", "6f6f9bef": "getLandInfo(uint256)", "6f6ff3bc": "setVesting(address)", "6f7030f6": "calculateCuts(uint256)", "6f704aa6": "TreasureToken(address,address)", +"6f70a1de": "vrnitev(uint256)", "6f70a22f": "deadlineThree()", "6f70b9cb": "getWinningChildUniverse()", +"6f70dc4b": "isBController()", "6f7154c8": "getIsStopFunding()", "6f71f407": "freeze(address,uint8)", +"6f7267b7": "getShares(uint256)", +"6f726dda": "No()", "6f72fd20": "calculateBonus(uint256,uint256)", +"6f738425": "setKimchiManPeriod(uint256,uint256)", +"6f739206": "factoryOwnerMap(address)", "6f74174d": "finalizeIt(address)", +"6f741927": "yieldBestYield()", "6f741cff": "getPauserList()", "6f7429ab": "modifyDescriptionManual(uint256,address,string)", +"6f7484f7": "liquidityPoolRewards(address,uint256)", "6f7495cb": "unproducedCaps()", "6f74dafe": "getGodAddress()", "6f752f09": "backendContract()", "6f75b00c": "removeBuyer(address)", +"6f75be88": "nodepools(address)", "6f75cd14": "DappToken()", +"6f761662": "SetDynamicGains(address,uint256)", "6f766f20": "refundTRA()", +"6f76ba30": "BlockHashVerifyFailed(bytes32)", "6f7705c2": "becomeRichest(string)", "6f77926b": "getUser(address)", +"6f782b14": "setTaxParameters(address,uint256)", "6f784c5b": "totalAmountOnICO()", +"6f78d82b": "safeDivisionByZeroShouldRevert()", "6f78ee0d": "rap(bytes32)", +"6f791d29": "isMaster()", "6f7920fd": "tokenCreationCap()", "6f79301d": "getCreationTime(bytes32)", "6f796d86": "JACK(string,string,uint8,uint256)", "6f799cf9": "_amountRaised()", +"6f79f4de": "compound(address,uint8)", +"6f7a0c5a": "_tokenExist(address)", +"6f7a5199": "updateInflation(int256)", +"6f7a6b8b": "approvedToTransfer(uint256)", +"6f7ad0ed": "userEthBalance()", +"6f7b0a88": "EventAppAssetOwnerSet(bytes32,address)", "6f7b5a56": "getDEditorArbitraryData(bytes32,bytes)", +"6f7b6b46": "earthPerBlock()", +"6f7baa89": "_exitStaking()", +"6f7bbb5b": "approveERC(uint256)", +"6f7bc9be": "investors(address)", +"6f7c0e05": "updateBob(address)", "6f7d9acf": "setupInitialSupply()", "6f7f461d": "manager1()", +"6f7f7dfe": "set_user_isRe(address,address,string)", "6f7fc989": "teamIssue(address,uint256)", +"6f800277": "RECOMM_ADDR()", +"6f802ec1": "sendPurchasedYield(uint256,uint256)", "6f80602b": "NewOrleansCoin()", +"6f80886c": "getMemberById(uint256)", "6f80dc23": "obfuscatedHashDataBlock(string,string)", "6f8177f4": "MentalhealthToken()", +"6f817f15": "setMinFeeIncrement(uint256)", +"6f81a801": "debts(address,uint256)", "6f81adf6": "Resilium()", "6f81bdd8": "setRate(uint256,bool)", "6f826a7d": "testIsEmpty(bytes)", "6f82e068": "initialSupplyPerChildAddress()", +"6f83188e": "decodeZeroExTransactionData(bytes)", +"6f834086": "setReductionAmount(uint256)", "6f838a8e": "TESTCOIN1()", +"6f83e6d2": "Opened(uint256,uint64)", +"6f83f6a2": "totalRewardClaimed()", +"6f84246f": "takeOutETH(uint256)", +"6f84676e": "getPayoutNumerators()", "6f8489af": "CreateGMT(address,uint256)", "6f84eb6c": "setPatronReward(uint256)", +"6f84f05c": "maxOrdersPerTrade()", +"6f84ffa7": "buyingYFITokenFee()", +"6f850cda": "DidDeposit(bytes32,uint256)", "6f853964": "setPriceCoeff(uint256)", "6f8543a6": "CoWithdraw()", +"6f85add7": "XSushi()", "6f85c7e4": "WAITING_PERIOD()", "6f85e62c": "buyTokens(string)", "6f863c21": "inviteIter_()", +"6f86c897": "removeComponent(address)", +"6f86d345": "incInsurance()", "6f872022": "setSectionForSaleToAddress(uint256,uint256,address)", "6f874abb": "setgasUsed(uint256)", +"6f87bbd8": "initializeVault(address,address)", "6f87dddd": "getPlayerStageKeys()", "6f882086": "KNCBalance()", +"6f891f82": "blockTimeStamp()", "6f893e0d": "LeeroyPremiumToken()", +"6f8967ee": "pack1activeUserID()", +"6f89e409": "getLimits()", "6f8b44b0": "setMaxSupply(uint256)", "6f8b7574": "createTransaction(address,address,uint256,string,uint256,uint256)", +"6f8b81ab": "sppSubscriptionStats(uint256)", "6f8c33a6": "getGoldDepositOfAddress(address)", "6f8c3c0e": "MIToken(uint256,string,uint8,string)", "6f8c3e4c": "SaraAndMauroToken()", @@ -63966,110 +116949,199 @@ "6f8dca87": "GetCost(uint256,uint256,uint256)", "6f8e0a08": "getreward()", "6f8e1fb6": "testOverflowResistantFraction()", +"6f8ec04f": "requiredFee()", "6f8ee91c": "level_6_amount()", +"6f8eec3b": "updateAlpacaEnergy(address,uint256,uint32)", "6f8f1de5": "mock_resetLatestPayday(address,address)", +"6f8f587b": "setPoolWeights(uint256,uint256)", +"6f8f80a4": "sEBlocuk()", +"6f8f82b2": "queryUserPendingRewards(address)", "6f8fb2c3": "CROWDSALE_WEI_GOAL()", "6f8fccd7": "BioChainCoin()", +"6f905b78": "getSales(uint256)", +"6f9085fd": "arb(address,address,string[],uint256,string[])", "6f9090db": "setwinPercent(uint32)", "6f90be06": "playFromBalance()", +"6f90d4d0": "swapTokensforETH(uint256,uint256,address,uint256)", "6f910c4b": "checkProviderOwnerSupply(uint256,bool)", "6f9125a5": "pylonSelled()", +"6f9155fd": "contractsByExpBySecByIdx(uint256,uint256,uint256)", "6f9170f6": "isWhiteListed(address)", "6f919068": "LogUnPause(bytes32)", "6f91cec0": "ProvideWorkOrder(address,address,address,uint128)", +"6f91e802": "modMemoryCheck()", "6f92096b": "setGasForward(address)", "6f923a7c": "LockSAToE()", "6f925535": "revokeAccess(address,uint8)", "6f92f186": "multiply(address)", +"6f933762": "loanInformation(uint256)", "6f93638e": "isSolvent(uint256,uint256)", +"6f93bfb7": "submitVote(uint256,uint256)", +"6f93d2e6": "addReward(address,address,uint256,bool)", +"6f93dd91": "userExists(uint256)", +"6f941083": "ask(uint256,uint256)", "6f941290": "SelfDropTokens(address,uint256)", +"6f945a08": "removeResolvedProposals(address)", "6f9477c0": "BanAccount(address,bool)", "6f947d6d": "_emitPublicCapabilityAdded(address,bytes4)", "6f94e260": "buybackPriceOf(uint256)", "6f94e502": "getVoter(uint256,uint256)", +"6f95200b": "removeAllDelegatePowers(address)", "6f954161": "changePreJackpotBidLimit(uint256)", +"6f9568c4": "stageAmountsDirect(uint8)", "6f95dd0b": "RATE_DAY_21()", "6f9607e5": "countYears()", "6f964659": "depositMint(address,uint256,uint256)", "6f969c2d": "getNonFungibleBaseType(uint256)", +"6f96e99c": "setPayToken(address)", "6f96f269": "Mehrancoin()", "6f977413": "Property(string,string)", +"6f97854c": "_sharesPerFragment()", +"6f97857b": "xETHScalingFactor()", +"6f97a8c8": "placeOrder(uint256,bytes)", +"6f992a68": "getTitanPerBlockForSwapReward()", "6f993a74": "rollFour(address,uint8,uint8,uint8,uint8)", +"6f997dff": "setDelay(address,address,uint256,uint256)", "6f9a023c": "theultimatepyramid()", +"6f9a0ca6": "burnSUSD(address,uint256)", "6f9a5eab": "createTx(uint256,address,uint256)", +"6f9a5fb3": "forceDeactivateAdmin(address)", +"6f9a80e4": "queryUserPledgeRecordDetailByIndex(address,uint8)", +"6f9a98fb": "purchases(string)", "6f9b0b7d": "getCurrentGameState(bytes32)", +"6f9b4111": "viewSaleSHD()", +"6f9b4944": "getMsgsByOwner(address)", "6f9b4c1d": "createCastleSale(uint256,uint256,uint256,uint256,uint256)", +"6f9b4f72": "sendToDepositContract()", "6f9ba978": "_reward(address)", +"6f9bde6f": "getDSVDVtheoTeam(uint256)", "6f9c3c8f": "fundReserve()", "6f9c6194": "P2E()", "6f9cd7b2": "mirtestToken()", "6f9cdccd": "setMarketMaker(address,address)", "6f9d257d": "CONFLICT_END_FINE()", "6f9d73db": "BuyRocketForSaleEvent(address,address,uint32)", +"6f9dc959": "readImbalanceStepFunctions(address,address)", +"6f9e15cc": "LastId()", +"6f9e310f": "checkDeviate()", +"6f9f29bc": "createCreditRule(address,uint256,uint256,uint256,uint256,uint256,uint32,uint32,uint32,uint16)", "6f9f51c7": "RefundsDisabled()", +"6f9faab8": "ReleasedTokens(uint256)", "6f9fb98a": "getContractBalance()", "6f9fbd7c": "generateCrabHeart()", +"6f9fd2fc": "GiveReward(address,uint256)", "6f9fdd66": "trust()", "6f9ff0fa": "GetDynamicCardNum(uint32,uint256)", "6fa00f07": "agreementSignedAtBlock(address)", "6fa01c8e": "init(bool,address,uint128,uint128,address,uint64,address,uint256)", +"6fa01cee": "resulte()", +"6fa02d58": "exchangeAirdropCampaign()", "6fa07d0d": "oraclize_query(uint256,string,bytes[5])", "6fa0bf39": "getRankDynamic(uint256)", +"6fa0eb38": "membershipMap(uint256)", "6fa1532e": "UpdateBalance(address,uint256,bool,address)", "6fa15c21": "setPreIcoEndDate(uint256)", "6fa1d6da": "totalAwardCalculation()", +"6fa23795": "updateCreationFee(uint256)", "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)", +"6fa3612a": "pauseTokens(uint256,address[])", "6fa4095e": "emitHavvenUpdated(address)", "6fa42742": "arbitrator_question_fees(address)", "6fa4c766": "revertFunds(address,address,uint256)", "6fa4f5f7": "setRefPercent(uint256)", "6fa58335": "tgeDuration()", +"6fa59bbc": "proxyCode()", +"6fa6032c": "denGovernance()", "6fa64cd6": "miningIncentiveTokens()", +"6fa6503e": "want_usdt()", "6fa65c4f": "MICRODOLLARS_PER_DOLLAR()", "6fa668f3": "weiForPayment()", "6fa6ad21": "getDeprecated(bytes32)", "6fa6c360": "validateTranscriptHash(address,uint256,bytes32)", +"6fa6de59": "criticalBucket()", +"6fa7279d": "addWhitelistTo(address)", +"6fa7a5c4": "getBuyPath(address)", +"6fa8093a": "passHotPotato(address)", "6fa81a3a": "IcoTimeRangeChanged(address,uint256,uint256)", "6fa87f66": "Moongang(uint256,uint256,uint256)", "6fa88aa3": "BrazilvsCostaRica()", "6fa8de90": "changeMeatParameters(uint256,uint256)", +"6fa98cf8": "topUpDividends()", "6fa9ba07": "ShowMsg(bytes)", "6fa9e255": "LiftUpVets(string,string,uint8,uint256)", "6faa22a5": "polyToken()", "6faa52b3": "getOwnerHistoryAt(bytes32,uint256)", +"6faa886e": "reclaimNEO()", +"6faad94e": "swapExactAlphaForETH(uint256,uint256,address,uint256)", +"6faadcfb": "setCharityCut(uint256)", "6faaeca2": "finishBallot(bytes32)", "6fab5ddf": "Fal1out()", "6fab94c1": "BitplusToken()", +"6faba0f6": "laker(address,uint256)", "6fac46e5": "numberOfRazzes()", +"6fac889b": "nftType()", "6fad0a4d": "KPOP_CELEB_CONTRACT_ADDRESS()", +"6fadb370": "FiveYearsYield()", +"6fadc3ca": "setDaoShare(uint256)", +"6fadcf72": "forward(address,bytes)", +"6fae13a3": "EmotherCount(uint32,uint256)", "6fae3d76": "access(address)", "6faed0e5": "set_master_exchange_rate(uint256)", +"6faee173": "countstudentss()", +"6faee535": "sellSOTETokens(uint256)", +"6faf0397": "takeOut()", "6faf4803": "BitcoinDiamondTest()", +"6faf731a": "getSupportedTokens(bytes32)", "6faf9323": "TokensPurchased(address,address,uint256,uint256)", +"6fafb236": "sharesToScaledShares(uint256)", +"6fb0bd80": "getLostProfit_day_2()", +"6fb10d14": "balanceOfGame(uint256,address)", +"6fb1604a": "contractsUSD()", +"6fb1861f": "setUserRewardCount(address)", "6fb1eb0c": "commissionFee()", "6fb1edcd": "sellAllOutcomes(uint256)", +"6fb24f3a": "withdrawn(address,uint256)", +"6fb29d03": "openTier1()", "6fb2d01e": "calculateBonusForHours(uint256)", +"6fb31058": "approvedTakeover(uint256)", +"6fb34222": "setDAFIContract(address)", "6fb37c18": "TChainToken()", +"6fb38bb2": "CustomerServiceSet(address)", +"6fb39184": "justTend(uint256,uint256,uint256)", "6fb3ba9e": "setWorking(bool)", +"6fb3e89c": "migrateBassets(address[],address)", "6fb438dc": "getTotal(uint256[])", "6fb487fc": "getListener(address)", "6fb4adff": "changeFundWallet(address)", +"6fb4b18f": "updateRandomRewardAmount(uint256)", +"6fb4bb4e": "reportingRound()", +"6fb53cf3": "getAlphaPoolsTotalSupply()", +"6fb59bbe": "_createCondition(address)", +"6fb5c122": "approve_222(address,uint256)", +"6fb6075a": "ethy()", +"6fb61a75": "synthetixBridge()", "6fb642de": "setActionContract(address,bool)", "6fb65c7f": "grantReserveToken()", "6fb66278": "ratePreICO()", "6fb6fde6": "AuthAdmin(address,bool,uint256)", "6fb7110f": "BuckySalary()", +"6fb7389c": "changeAddress2(address)", "6fb7b52e": "addCheck(address,address,uint256,bool)", "6fb7e588": "encodeTokenId(int256,int256)", "6fb7f147": "getPendingExplore(address)", "6fb7fc8b": "deltaBalances(address,address,address[])", +"6fb7fdd4": "RemoveFromSale(address,bool)", +"6fb826f7": "OnCallDividend(address,uint256,uint256,uint256,uint256,uint256)", +"6fb83a57": "setStakingRewards(address)", "6fb84e84": "fetchVoteInfoForVoterByIndex(uint256,address)", "6fb8a70d": "responseCounts(uint256)", "6fb8b885": "RESERVED_TOKENS_FOR_ROI_ON_CAPITAL()", +"6fb8f350": "nominsIssued(address)", "6fb93e15": "BuyARXtokens()", +"6fb974bc": "acceptingNewStakes()", "6fb99dfb": "EventRemoveManager(address,address)", "6fb9a2b4": "newCrowdsale()", "6fba4aa9": "GUOcoin()", @@ -64077,81 +117149,157 @@ "6fbaaa1e": "currentMultiplier()", "6fbb222a": "setExtendedPlayerAttributesForPlayer(uint256,uint8[])", "6fbb439e": "assign(string)", +"6fbbbf1d": "diseasesCounter()", "6fbc15e9": "upgradeTo(address,bytes)", +"6fbc20e1": "CONTRACT_HABERG_POTION_SHOP()", +"6fbc6a5c": "getAddonBlock()", "6fbc8456": "setUID(uint256,uint32)", "6fbcbd4f": "WarriorGenerator(address,uint32[])", "6fbcd0f6": "AnitiToken(address,uint256,uint256)", "6fbcd1fb": "_getAltarRecord(uint256)", +"6fbcdf33": "allocateEgression(uint256)", +"6fbce940": "oracleCallBack(uint256)", +"6fbd0b57": "historyOfLiqudity(uint256)", +"6fbd0b76": "isRevoke(address)", "6fbd6f6b": "acceptContactRequest(address)", +"6fbd9db7": "genAndSendTokens(address,uint256)", +"6fbda78d": "getXpRequiredByHero(uint32)", "6fbdae47": "getArrayInfoForDepositCount()", "6fbde40d": "setSaleAuctionAddress(address)", +"6fbe4978": "PhaseDeleted(address,uint256)", +"6fbe5617": "holdersCounter()", "6fbe769d": "cards_black_total()", +"6fbeb45d": "isAntiBot()", +"6fbf12ad": "getDataFromRewardAndRebateWithValidation(uint256,uint256)", "6fbf466c": "unscannedCaps()", +"6fbf656a": "setOperator(string)", +"6fbfd409": "schedule(uint256)", +"6fbfe121": "CurrentBonus(uint256)", "6fc141da": "lastPaydayTS()", "6fc14837": "setMaxStake(uint256)", "6fc1cbbd": "RexToken()", +"6fc1f57e": "admin_initialized()", +"6fc20053": "ReleaseOwnersLockedTokens(address)", "6fc21429": "setgamecardintro(uint256,string)", +"6fc249b0": "recoverInterests(bytes32,uint256)", +"6fc2790e": "hatchEgg(uint256,uint256)", +"6fc2cf9b": "_minHolderAmount()", +"6fc2eae7": "removeOrder(uint256,uint256)", +"6fc327d6": "increaseCurrentAndNextBalance(uint256,uint256)", "6fc351c2": "Elsevier(uint256,uint256)", +"6fc37811": "timeTarget()", +"6fc39052": "outputNumeraire(address,int128)", "6fc3911c": "checkVerificationStatus(address)", "6fc39a38": "changeAgencyReceiver(address)", "6fc3b0b6": "getTime4(address)", +"6fc3c266": "payTokenForRange(uint256,uint256)", "6fc3c817": "confirmer()", +"6fc3d412": "setSnowPatrol(address)", +"6fc41a7e": "deputeBoss(address)", +"6fc4391d": "_addEventMinter(uint256,address)", +"6fc4769e": "setupStaking(uint256,uint256,uint256)", +"6fc49140": "upgradeTarget(address,bytes)", +"6fc4a4a2": "createAndBuyAllAmountPayEth(address,address,address,uint256)", +"6fc4bcef": "diamondHandReward(uint256)", "6fc4f2c2": "isOnPreAuction(uint256)", "6fc559bb": "tokenGrants(uint256)", +"6fc5abcc": "_pair_TOKEN_weth(uint256)", +"6fc6407c": "incentivizer()", "6fc651f3": "TokenAGC(uint256,string,string)", "6fc65924": "getDisputeEndTime()", +"6fc6a511": "isWitness(uint256,address)", "6fc6df36": "fYou(address,string,string)", +"6fc83db3": "setMinAuctionLength(uint256)", +"6fc840f2": "availableModels()", +"6fc8c2b3": "abort(address,uint256)", "6fc8e920": "icoBonus4EndDate()", "6fc90a2f": "submitSolution(uint256,string,bytes)", "6fc98ee1": "mintTokens(address,address,uint256)", "6fc9958a": "initBundle(uint8,uint256)", "6fc9d5e4": "changeCompareTo(uint256)", "6fca2023": "getSharedAccountsLength()", +"6fca4f8f": "EXCHANGE_PROXY()", "6fcac869": "BONUS_4_DAYS()", +"6fcae5d2": "isFreezeWaiver(address)", "6fcaea0c": "set_iconiq_presale_open(bool)", +"6fcafed4": "Unstaked(address,address)", "6fcb0153": "issuanceLastAverageBalance(address)", "6fcb1500": "defaultSweeper()", +"6fcb2e8d": "purchasedOfUp(uint256,address)", "6fcb4463": "signUpOn()", +"6fcba377": "setFees(uint256,uint256,uint256,uint256)", "6fcbb546": "extractOre(string)", +"6fcbdb62": "vote_statistics()", "6fcc52e7": "gujarat()", +"6fcca69b": "fee(address)", +"6fcceefe": "getWhitelistedExchangeCount()", "6fcdcb3e": "setOwnerLink(address,uint256[2])", +"6fcdfed6": "countPools()", "6fce2d65": "updateAccount(uint256,uint16,bytes32,uint16,bytes32)", +"6fce9d88": "renounceAdminship(address)", "6fceaea2": "convertToMiniGGC(uint256)", "6fcebff8": "ConversionSentToShapeShift(uint256,address,address,uint256)", "6fceecf8": "withdrawRestriction(address)", "6fcfbe85": "FAFA(address)", +"6fcfebad": "proposalTypes(string)", +"6fcfff45": "numCheckpoints(address)", +"6fd0223e": "f3(bool)", "6fd075fc": "addPlayer(address,uint256)", +"6fd094f4": "Donors(address)", "6fd09735": "createDistrito(uint256,address)", +"6fd09816": "closeLottery()", +"6fd0ed44": "outer(bytes32)", "6fd1bdea": "setProduct(uint256)", +"6fd22545": "getLpTokenInfosByPoolId(uint256)", "6fd2e6d0": "TFFC()", +"6fd2ff93": "statusMinBorders(uint256)", "6fd37039": "WebPaisa()", "6fd396d6": "lastRewardTo()", +"6fd39bdf": "cageMlive(uint256)", "6fd3a2bc": "createTokensManually(address,uint256)", "6fd3db86": "withdraw(uint256,bytes32,uint256)", "6fd42b32": "safeWithdrawal(address)", "6fd44086": "adviserSupply()", "6fd463ed": "addressOfTokenUsedAsReward1()", +"6fd4eed2": "swapInTokens(uint256,uint256,uint256)", +"6fd4f229": "timeOfLastNewValue()", "6fd5036d": "userChannelsCount(address)", "6fd507f2": "Tube()", +"6fd50ef9": "hasToken(bytes32)", "6fd5790d": "getCuota(uint256)", "6fd59b01": "foundationFundMultisig()", "6fd5ab58": "getTextBytes96()", "6fd5ae15": "level()", +"6fd62e8c": "exchangeEtherForPERI()", "6fd63728": "feeFunds()", +"6fd689e8": "claimStoreOwnership()", +"6fd68df4": "initialize(address[],uint8,uint8,address,address)", +"6fd6be35": "principleToken()", +"6fd7b03e": "indexOfowner(address)", "6fd7c035": "EventRedeemStatic(address,uint128,uint256,uint256)", "6fd7c34c": "setMemberRegistry(address)", "6fd8282f": "priceLastUpdateRequest()", "6fd86d44": "emitAccountUnfrozen(address)", +"6fd8d0bb": "burnStart()", "6fd902e1": "getCurrentBlockNumber()", "6fd9101f": "ACAToken(uint256,address)", "6fd9227e": "TokenSold(address,uint256,uint256,bool)", +"6fd9537f": "calculatePriceForToken(uint256)", +"6fd976bc": "nftid()", "6fd98bee": "updateTimes(uint256,uint256)", +"6fd992e0": "OROConversion()", +"6fd9e454": "setFflyDev(address)", "6fda5534": "rockOwningHistory(address)", +"6fdaa6d3": "idToValidators(uint256)", "6fdada81": "proofOfRich(string,string)", +"6fdb0eb6": "transferToDex(address,uint256)", "6fdb4f42": "revokeUsers(address[])", +"6fdb6a75": "ClaimedFutureUse(address,uint256)", +"6fdbabcd": "setTCoinContractAddress(address)", "6fdbc590": "CreateDil(string)", "6fdc202f": "ownerTransfership(address)", "6fdc45a3": "BangdiToken(address)", +"6fdc8845": "DYDX_EXPIRY_ADDRESS()", "6fdca5e0": "setOpen(bool)", "6fdcc8a9": "listRecords()", "6fdd2ab4": "createStage(uint8,uint256,uint256,uint256,uint256)", @@ -64162,35 +117310,67 @@ "6fdf9a3f": "sendToRstForAddress(address)", "6fdf9f28": "setBDError(uint256,bytes)", "6fe00356": "investorIDs()", +"6fe019e5": "unblockWalletAddress(address)", "6fe02e98": "tier3Rate()", +"6fe09fbf": "FROST_ROLE()", +"6fe0b5a5": "isRegisteredRewardToken(address)", +"6fe0c046": "getCharacterStats(uint256)", "6fe0e395": "initialize(string,string,uint256,uint256)", "6fe11695": "isMajority(uint256)", "6fe12f07": "proverka6()", +"6fe15b44": "wave()", "6fe1dbec": "sendSupportETH(address,uint256)", "6fe1f6b4": "BAD_ERC20()", +"6fe3137a": "loginCount(address)", "6fe33720": "YOTOKEN()", "6fe356ea": "moduleIsExist(string)", +"6fe39f64": "downvoteCost(bytes32)", "6fe3a567": "tokenMigrated()", "6fe3ef7c": "resolveEntityAddress(address)", +"6fe4136b": "getRewardsToken()", +"6fe424f5": "getLpBalanceOf(address,address)", "6fe497f0": "lockStatus(address,bool)", "6fe4c195": "lockAddress(address,address,uint256)", +"6fe4d540": "_isTransactionApproved(uint256,address)", +"6fe4d97a": "minimalDeposit()", +"6fe5033c": "certificateDetails(string)", "6fe5091e": "collectPayout(uint256)", +"6fe55aa1": "StarSold(uint256,address,address,uint256)", +"6fe57428": "adminUnlockTransfer()", "6fe5b536": "testFailSetEnforceRevisionsNotOwner()", "6fe64289": "RepuToken()", "6fe665e9": "SlotMachine()", "6fe691dc": "getUserTransactions()", "6fe69dee": "RealtyCashToken()", +"6fe74a21": "repayVAI(uint256)", "6fe7567b": "_subPurchasedFrom(address,uint256)", "6fe7f51c": "saleWasSet()", "6fe83236": "getAllCardAddressesCountOfOwner(address)", +"6fe83958": "approve_116(address,uint256)", "6fe8c29e": "JEY()", "6fe8f9c5": "freeTokens()", +"6fe99ccd": "drawingRecords(uint256)", +"6fe9b03d": "updateScore(string,uint8[])", "6fe9e7d7": "freezeUserFunds(address,address,uint256,uint256)", "6fe9f632": "preICOrates(uint256)", +"6fe9fe95": "__refund(uint256,bytes32)", +"6fea47e3": "getBurned()", +"6feb04ad": "yield21Sep30Return()", +"6feb1a35": "getAaveDataByReserve(address[],address,address)", +"6febdd50": "spreadRatio()", "6febfd02": "getSiteRewards(uint256)", +"6fec11a9": "MetaTransactionGasPriceError(bytes32,uint256,uint256,uint256)", +"6fec6acf": "f9(uint256)", +"6fecae2e": "startChangeClaimer(address)", +"6fecc9eb": "totalSupplyVar()", +"6fedd86a": "initVote()", +"6fedf9c0": "changeAdminAccount(address)", +"6fee07e0": "enqueue(address,uint256,bytes)", "6fee558c": "getHookOperatorContractAddress()", +"6fee5d2f": "timeToFinishJoins()", "6fee8458": "burnExcess()", "6feef2bf": "cancelTknOffer()", +"6feefd27": "totalMintedByOwnerForTokenID(uint256)", "6fef4fa9": "setAllowedToSell(bool)", "6ff026e7": "purchased_snt()", "6ff03fc2": "_removeMaster(address)", @@ -64199,100 +117379,197 @@ "6ff1c9bc": "emergencyWithdraw(address)", "6ff1ed71": "pickUp(uint256)", "6ff1f2b8": "refererPercent()", +"6ff2196e": "mainGift()", +"6ff26478": "_getTargetNextRateMultiplierValue(uint256)", "6ff26ebb": "longBuy()", +"6ff277de": "setKyberDaoContract(address)", "6ff2817c": "batchDetachAssets(uint256[])", "6ff28657": "Josephtoken()", +"6ff29e7d": "mintGETfee()", +"6ff2a263": "LatestPrice(address)", +"6ff2bf08": "getGeneratedYelds()", "6ff2c12a": "setMiniPoolEdit_6(string)", "6ff36340": "eTimesChain()", +"6ff3cd35": "chnagePart(address,address)", +"6ff3fa1d": "showJobOwnedCount()", +"6ff4206f": "getTokenAddr(string)", +"6ff43706": "ANCHOR()", "6ff46ba7": "deathData_a10()", +"6ff528de": "viewSaleTSLF()", "6ff5a670": "PortalToken()", +"6ff5eb39": "getPollInfoById(address,uint256)", +"6ff623fa": "getParaswapShare()", "6ff6c4b8": "setCreatorFeePercent(uint256)", +"6ff6cdf4": "_transferBothExcluded(address,address,uint256)", "6ff73201": "setCooldownTime(uint256)", "6ff79410": "numberOfComponents(address)", +"6ff817c2": "closePurchase()", +"6ff8621c": "_tokenAuctionStart(uint256)", +"6ff874bd": "setConsensusThreshold(uint256,address[],bytes[],uint256[])", "6ff89159": "revokePermission(address,string)", "6ff8a27e": "buyTokens(address,uint16,address)", "6ff8e332": "allowedAirDropTokens()", "6ff93476": "tokensAllocatedForFs(address,address)", "6ff968c3": "successor()", "6ff97f1d": "allTokens()", +"6ff9b43a": "getRewardExternal()", "6ff9db5b": "msgHash(bytes)", +"6ff9f2ca": "assembleYourIPhone(uint256,uint256,uint256)", +"6ff9f6fa": "swapTokensForExactTokens(bytes)", "6ffa1257": "etherSoftCap()", "6ffa1caa": "double(int256)", "6ffa1d48": "LogCreateICO(address,address,uint256)", "6ffa1ea7": "getRegulatorProxy(uint256)", "6ffa714d": "extractDepositCommitmentRecord(address[],uint256[])", "6ffb341e": "calculateKebabBuy(uint256,uint256)", +"6ffb4f11": "CAPTAINS_TREASURE()", "6ffbff9c": "importMET(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", "6ffc0896": "checkIfSuccess(bytes32)", "6ffc13ab": "POMPAMCOIN()", "6ffc22b8": "finalizeReservedAddress(address)", +"6ffc7cf1": "wETHaddress()", "6ffcc719": "bet(uint256,uint256)", +"6ffd15c8": "DidVCClose(bytes32,bytes32,uint256,uint256)", "6ffd673d": "getcomp()", +"6ffd773c": "setMyNumber(uint256)", +"6ffd8001": "flip(bytes32)", +"6ffdabcd": "addLicensCost(bytes32,uint256)", +"6ffdcf22": "addVideo(uint256)", "6ffe67f2": "autoDestruct()", "6ffea7bd": "preToken()", "6fff0652": "changePlayerTeam(uint256,uint256)", "6fff15ee": "percPoints(uint256,uint256)", +"6fffab0c": "getUserCurrentStableBorrowRate(address,address)", "6fffffff": "HDK_Crowdsale()", +"700035ec": "index(address,address)", "70011870": "credexx(address,address,address,uint256,uint256,uint256)", +"70016a65": "arAsset_name(uint256)", +"70019b35": "userName()", "7001a2a2": "elcoin()", "7001fcc2": "closeImports()", "700215d0": "SellFinishedAutos()", "70021705": "watchVideoC(address)", +"70027869": "MokenNameChange(uint256,string)", "7002a4e0": "setPartIndex(uint256,uint256[])", +"7002ce42": "children(uint256)", "7003433a": "setRealityCheck(address)", "70037a71": "setPresaleWhitelist(address,bool)", "7003a1a3": "EosBlock()", +"7003c080": "setExchange(string)", "7003ce6f": "UController()", +"70042587": "buyNewLevel(uint8,uint8,uint256,bytes,uint256)", +"70047eeb": "buyPool8()", "70049c1c": "forwardEherToOwner()", +"7004a083": "asses(uint256)", "7004a914": "ArbitraryLocker(address,uint256,uint256,uint256,uint256)", +"7004c056": "getGeneratedMUS()", +"7004f68f": "SurplusDepositLimitAll()", +"7005e199": "ChangedAllowedToBuyBack(bool)", +"70066951": "SEVERITY_LEVEL()", +"70068502": "addIndiv(uint256)", "7006d538": "verificaCertificato(string,bytes32)", +"70076203": "setCrossForkDistribution(address)", +"70076329": "unlockTimestamps(address)", "7007adc9": "finalBlockNumber()", +"700805e3": "resetClaim(address)", +"70082d08": "WithdrawTokens(address,address,uint256)", +"70085be0": "swap(uint256,address,address,uint256)", "7008a4a3": "firstWavePrice()", +"7008ad0d": "bonusOfDay(uint256)", +"7008b548": "getPauser()", "70090164": "PRIVATE_ADDRESS()", +"70092ecb": "setCustomMaxClaimedBy(address,uint256)", "70097106": "addContent(string,string,uint256)", +"7009ff3c": "NewLeader(address,uint256,uint256)", +"700a4a74": "rewardsPaid(address)", "700a7db1": "setCriterionTime(address,uint256)", +"700a92f6": "setActiveBonus(address,bool)", +"700a969e": "depositLimit(uint256)", +"700ae34f": "finalizeInstance(string,address[],uint256[],address[],uint64,bool,uint256[4])", +"700af395": "ASS()", "700b7025": "EthereumHotCoin()", +"700bd283": "testGovernanceDeployment()", "700c9474": "addUsers(address[])", +"700cda56": "allocateSeigniorageSalary()", +"700ce2e9": "pendingShoe(uint256,address)", "700d3230": "isPiSale()", "700dd5eb": "AuthorityNotified(string,string)", "700df1f6": "setMigrationStabitcoinAddress(string)", +"700e0170": "updateDiWav3(address)", "700e17b5": "setData(uint256,uint256,uint256,uint8[])", "700e8660": "Marriage(string,address)", +"700e96ce": "heroTraits(uint256)", "700ef803": "SafeBox()", +"700f04ef": "targetOf(address)", "700f1a77": "clampMax(uint256,uint256)", +"700f2540": "reviewAudit(address,bytes32,uint256,bytes32,uint256)", "700f3a1d": "addToken(string,int256,bytes)", "700f4e40": "test_invalidProxyOwnershipTransfer()", "700f55b2": "addTx(address,address,uint256,uint256)", +"700f89bd": "setOffChainAssetValuator(address)", +"700f8e18": "availableOwnerCommissionToken(address)", "700f9d03": "logEndBal()", +"70100148": "setInsuranceAddr(address)", "7010129a": "tokenTransferVIP(address,uint256)", "70101735": "releaseReservedTokens()", "70103ea7": "setPaperFee(uint128)", "70107c43": "_zthToken(address)", +"70108e32": "paybackDebt(address,uint256,bytes32,uint256,address)", +"701134ee": "playerDieResult(bytes32)", "70119d06": "incBy(uint256)", +"7011ead3": "addGems(address,uint256,uint256[],address)", +"701227e2": "press_C()", +"70124c5e": "changeUopPerBlock(uint256)", +"70130fdc": "_getUniswapExchangeFactoryAddress()", "70133e4f": "Xerium()", +"70135e65": "_maxIssuableSynths(address)", +"70135f52": "confirmGuardianAddition(address,address)", +"70137ad4": "WithdrawOfELYC(address,uint256)", +"7013846e": "setVoteCountPerProcess(uint256)", "70144f8f": "activate_kill_switch()", "70150282": "FMWorld(address,address,address)", "701513c0": "addBooking(uint8,uint256)", "70152dcf": "getPrivacyCoins()", "7015913c": "end(bytes32)", +"7015e95e": "rewardAddr()", +"7015eaeb": "tokenSaleSHD(address)", +"7015f19d": "tokensRegistered(address)", "70165470": "ICOFailed(uint256,uint256)", +"7017d4f1": "getNewId()", +"70182e96": "transferEth(address[],uint256[])", "70183a4d": "stakingExpiration(bytes32)", "70185b7e": "updateSafeBalance(uint256)", "7018665b": "transferMS(address,uint256)", +"70187a19": "updateConfig(uint16,uint8)", +"70189c8d": "getFundingPoolAmount()", "7018dcb9": "getCastleNum()", "7018e950": "affiliatesAllocation()", +"701902c8": "feeToMaker()", +"701956b1": "pairYieldBalance(uint256)", "701969e5": "Penny()", +"701a4ab1": "_swapBNBForToken(address,uint256,address)", "701ab8e2": "exitOnHaltFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", "701adee0": "setRequireWhitelistedAddress(bool,address)", "701b4063": "balanceOfAtBlock(address,uint256)", "701b4631": "hasPayroll(address)", +"701b70ac": "isMiner(address)", +"701b824e": "addRewardsss()", "701b8826": "forwardTo(address,address,address,uint256,bytes)", +"701baaf3": "calcSwapOutput(uint256,uint256,uint256)", +"701bd98f": "pendingrestart(uint256,address)", +"701c0fe6": "lotteryFeeRate()", +"701c1955": "TEAM_TOTAL_AMOUNT()", "701c3c28": "setApprovalRequirement(bytes4,uint8)", +"701ccdef": "timestampAdminKeyActive()", "701d9ced": "setTransferOCE(bool,bool)", +"701dbcf9": "burnBalance(uint256)", "701dfb92": "HTL()", +"701e00e0": "getStateAt(bytes32,uint256)", "701e1dfc": "lastInvestorsProfit()", "701e5729": "canInvest(address,uint256,uint256)", "701e5e71": "_purchaseCar(uint256)", +"701e99cb": "dollars()", +"701f6604": "exchangeRate(address,address,uint256)", "701fd0f1": "reveal(bytes32)", "702056de": "REKTtoken()", "70206b05": "RepoHandler(address)", @@ -64300,16 +117577,24 @@ "7020b511": "chainlinkTokenAddress()", "702123ae": "unitCoinProduction(uint256)", "70212761": "saleFinalize()", +"7021939f": "votesReceived(bytes32)", "7021fad7": "CheckoutLimDay(address,uint256)", "70220023": "participantsFor3rdSale(address)", "70228400": "isDonatedEthTransferred()", +"70228eea": "setConversionPath(address[])", "7022b58e": "confirm()", +"7022c79e": "reloadNormalAddress(address)", +"70230b0e": "getUSDPCurPriceOfBNB(uint256)", "70232f00": "ClaimESC(address,uint256)", "70239222": "testSHA256()", "70239f0b": "serverEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", +"7023b089": "bondFromPool(address,uint256)", +"70242015": "setMineAddress(address)", "70243248": "PeggleCoin()", +"70245963": "roundPower(uint256,uint8)", "70245bdc": "adoptCat()", "7024ce7b": "BONUS_ICO_ROUND1()", +"7024d264": "fiatNotTrasnferred()", "702510be": "payoutSelf()", "7025b3ac": "ROLE_KYC_VERIFIED_INVESTOR()", "70260363": "setSignatures(bytes32,bytes)", @@ -64317,130 +117602,220 @@ "70267867": "_addBridgeTokenFee(uint256,uint256)", "70269774": "changeOwnerOfMonethaUsersClaimStorage(address)", "7026aa04": "getProveHash(address,bytes32,string,bool,uint256,bytes32,uint256)", +"702742b0": "addToCart(uint256)", +"70276a55": "CustomerService(address)", "70279554": "budgetAllocation()", "7028439e": "bonusPreIco()", "70284d19": "grant(address)", "7028875e": "changeStrikePrice(uint256)", "7028b3b9": "GetConsentDataCount()", +"7028b6a3": "afflist(address,uint256)", +"7028e2cd": "SNAPSHOT_ROLE()", "7029144c": "init(string,string)", "702921f5": "month()", +"70293439": "refLimit()", "70296790": "clever()", +"7029fae9": "MinimumChanged(uint256)", "702a3eff": "advisorsCliff()", "702a5f4f": "setLLV_edit_31(string)", +"702acfa8": "feesRecipient()", +"702aecb8": "RateCalculated(uint256)", "702b5f0b": "calcHash(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", "702b7bc3": "insertValueBonus(uint8,uint256,uint256)", "702c25ee": "nextMinimumPodSize()", +"702c4474": "isBigBrain(uint256)", +"702c4f1a": "synthetixDepot()", +"702c5f8b": "setLPRewardsContract(address)", "702c728e": "changeCloudsPerEth(uint256)", "702c789e": "select_bua_position(uint256)", "702c9535": "distributeBalances(address[],uint256[])", "702cbbae": "isTokenAvailable(uint256)", "702d58d8": "JiJieHao(uint256,uint8,string,string)", +"702d5967": "Redeem(uint256)", +"702ddaab": "mcrFailTime()", "702efdf3": "suspended()", "702f23a6": "transferAndFreezeMulti(address[],bytes32[],address,address,uint256[],uint256[],uint256[])", +"702f2fa9": "minTokenBeforeReward()", +"702f5321": "setMiningContract(address)", "702f9019": "Start_qui_qz(string,string)", "702fc7da": "ReviewModel()", +"702fef3d": "updateAssetMarketSetting(address,bytes32,uint256)", +"70312de8": "stakerStatus(address)", "70316f00": "getUserPayedInCurrentRound(address)", +"7031b253": "getCurve(int24,int24,int24)", +"7031b517": "freeGem(address,uint256,uint256)", "70320126": "newWitness(address)", "70320234": "calcBonusTokens(uint256)", "70324b77": "darknodeBalances(address,address)", "70327ea1": "disableSelfDestruction()", +"70328615": "NewPost(uint256,address,bytes)", "70328770": "logBalance(uint256)", "7032d758": "SevillavsBayern()", +"7032d87d": "setReserveLimit(uint256)", +"70334daa": "storeMetadata(bytes32[],bytes3[])", "7033e4a6": "supportsHistory()", "7033f1ac": "TNTCoin()", +"7034956e": "somes(address)", "7034c939": "test_2_destroyTokens()", "7034d190": "MainSaleBuy()", "70354053": "UCCoinSaleIsOff(uint256)", +"7035571f": "x124()", "70357e79": "func_08D3()", "70359b36": "makeSuperVisor(address)", +"7035ab98": "userRewardPerTokenPaid(address,address)", "7036f9d9": "force_partial_refund(address)", +"703706aa": "setWhiteListForWantToken(address,bool)", +"70370dd6": "gameExists(uint256)", "7037602a": "setAccountData(address,uint256,uint256)", "7037ec6f": "payEntryFee()", +"703812cc": "reDelegate(address,address,uint256)", "70385f0d": "LogPolicyAccepted(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "70387c59": "hashVerification(bytes32)", "70393686": "getCOOHashing(address,uint256)", "703950ff": "viewKarmaVotes(uint256)", "7039dcdc": "setBEY(address)", +"703a619f": "getDelegationRewards(address)", "703a6beb": "getUnitsPerPeriod()", "703aca29": "competitorExists()", +"703ad901": "PosMint(address,uint256)", "703add31": "animatorAddress()", "703b1411": "requestSellforFX(uint256)", "703bf4a5": "disableGame(address)", "703bf91f": "betSingle(uint256)", +"703c2d50": "uniswap_rise_eth_pair()", "703c8a99": "_openProvider(bool,string,string,uint256,string,uint8,bool,address)", +"703ce4af": "user3()", "703dbd81": "setPI_edit_8(string)", "703df793": "updateHardCap(uint256)", +"703e874e": "ischalzGenesisMining()", "703e905b": "getIndexByHash(string)", "703eb724": "addShare(address)", "703ee574": "CoinvillaSupply()", "703f5e8a": "CaDataAddress()", "703fa81c": "DOSTToken()", +"703fbca3": "approve_104(address,uint256)", +"703fcf65": "clear_pending_list()", +"704025e8": "ethfundPerBlock()", +"70402bb9": "releaseAuth()", "7040bcc9": "createPlayer(uint256,uint256,string,string,string,string,string,string,address,uint256)", +"7040ee76": "tokenToEth(uint256,address[],address,uint256,address,address)", "7040f3e5": "Allowance()", +"70411a33": "NODE_SHARE_LV3_PCT()", "70416f7e": "getCurrentEthFee()", +"70418639": "TokenHolderChanged(address,address)", +"704189ca": "unremovableValidator()", "7041d925": "outsize(bytes4,bytes)", "704248ec": "tokensale()", +"7042bd21": "divPoolAllLevel()", +"7042cd5a": "tradingWhitelist(address)", +"70431d29": "startWithdrawal(uint256,uint256)", +"70436a79": "setTokensGame(uint256)", +"70439385": "teamAmount()", +"7043abbd": "hasTransfered(address)", "7043ca8e": "getOwnerNickName(address)", "7044ce75": "setTKC(address)", "70459be2": "transferLeftover()", "7045b469": "TotlePrimary(address)", +"70460299": "changeReqs(bytes32)", +"7046689a": "finishChangeMinSTBZ()", "704691e1": "LuckToken()", +"7046db52": "getDataParameter(address)", +"7046f55c": "destroyTicket(uint256)", "70477e2b": "Rozium()", "70480275": "addAdmin(address)", +"70481efe": "modifyParameters(address,address,address,bytes32,uint256,uint256,address)", +"7048594b": "tokenCurrency()", +"7048c3a9": "LIST_TOKEN_SUCCESS_BURN_PRECENT()", +"70495acd": "gAddrC()", "7049a425": "MarketboardListingDestroyed()", "7049cd98": "LinglongCatCore()", +"704a1391": "setPercentageToSidePot(uint256)", +"704a39f8": "allocateSeigniorageWithDiscount(address,uint256)", "704a60f1": "failUserRefund(uint256)", "704b164d": "setTradeIsOpen(bool)", +"704b452a": "maxBet(uint256,uint256)", +"704b48a3": "totalBonusUSDT()", "704b6c02": "setAdmin(address)", +"704c244c": "changeMagicNumber(uint8)", +"704d3512": "userLastClaimedId(address)", "704d4051": "periodSalesLimit()", "704d4ab1": "getLostAndFoundMaster()", "704d4db0": "poolTotal()", +"704dc09b": "addPool(address,string)", "704dcedd": "LSC(uint256,string,string,uint8)", "704dd019": "changeFeeCut(uint8,uint8)", "704e3dda": "TokenSalePaused(bool)", "704e7437": "bountyPart()", +"704e8c7f": "withdrawAvailableToken(address,uint256,uint256)", +"704f113f": "convertUsdtToToro(uint256)", "704f1b94": "registerUser(string)", "704f236c": "freezeAccount(address,address,bool)", +"704f66a0": "addBluelisted(address)", +"704f8b09": "AP_totalBalanceCommissionWei()", +"704fdd68": "setVirtTokenLimit(address,uint256)", "70502c5a": "testDeleteItem()", "70505653": "arbitrationAddress()", "705099b9": "refundTicket(address,uint256)", "7050a1ea": "TimetechToken()", +"7050ec89": "StakeTransferMNE(address,uint256)", +"70512fc8": "alphapools()", +"705142b8": "createStake(uint256,uint8,bool,address)", "705145c4": "quickCloseChannel(bytes32,address,uint256,address,uint256)", "7051a831": "setIsContainerForReportingParticipant(bool)", "7051b075": "TransferToBuyer(address,address,uint256,address)", "705211f4": "approveAccess(address)", +"70529163": "getMyInformation()", +"7052b902": "rebaseWindowOffsetSec()", "7052dad9": "withdrawRemainingTokens(uint256)", +"70539d69": "_schedule(bytes32,uint256)", "7053fe8d": "finalize_contract()", +"70540933": "takeSellFee()", +"70543271": "arber(uint256)", "70544b74": "emergencyDrain(uint256)", "70544eb9": "hijackPrice()", +"7054989b": "stealPrize()", "7055011b": "escrowHistory(address,address,uint256,uint256)", "7055060f": "bulkStoreHeader(bytes)", "7055410b": "retrait_5()", "70557298": "testTransferFrom()", "7055d368": "vote(uint256,uint256[])", +"70563d6b": "withdraw(uint8,address,uint256)", "7056b50f": "blockstillcontracthackable()", "7056d1f4": "burnLotIdsByAddress(address)", +"70571828": "getTokenByAddr(address)", +"70573ea1": "changeNextPriceDeviation(address,address,address,uint256,uint256)", +"70576e3c": "MoondayTokenPair()", "70578bda": "SPMTToken(address,uint256)", "705791f2": "TOKEN_STARTED()", "7057c20d": "CFD(address)", +"7057c8a9": "integral(uint256,uint256,uint256,uint256)", +"7057e439": "getAllLockedAssets()", +"7057f929": "WithdrawByShares(uint256,uint256)", +"7058346f": "getCurrencyPrice(address)", "705882f2": "setPOOL_edit_22(string)", "7058901e": "mtcDailyLimit()", "70590ca2": "batch(uint256[],address[])", "7059194e": "deletePlayer(uint256)", "70597cb1": "startCompanySell()", "70598a8e": "subTokenBalance(address,uint256)", +"7059c7e0": "setr1(uint256)", +"705a2369": "issuePynths(uint256)", "705a3644": "block3()", "705a940a": "disableBondingCurve()", +"705ac249": "bytesToBool(bytes)", "705b164f": "acquireFreeEgg()", "705b37f4": "getTotalF1()", "705b5c27": "transferVestingMonthlyAmount(address)", "705b7efd": "preSaleContributions()", "705b8845": "askQuestion(string,string)", +"705bbc01": "multLpToken()", "705bbf6b": "updatePrenup(string)", "705bbfe6": "eastadscredits()", "705bd32a": "fundDevelopment(string)", "705ca5cd": "getMultiRequestIdGivenRequestId(uint256)", +"705cab1b": "chik()", "705d528d": "_addMoney(address,uint256)", +"705d64ab": "YIELD_NR_OF_EPOCHS()", "705dae11": "cancelCraftAuction(uint256,address)", "705e798e": "getLastRoundInfo()", "705eeb90": "MultipleConstructorTest(bool)", @@ -64451,75 +117826,128 @@ "7060054d": "dynasty()", "70606cda": "supportFreezeQuorum()", "7060bfe4": "busyWork(address,uint256)", +"7060cc58": "recordRightsOffers(uint256)", +"7060ec02": "earningsOffset()", +"7060f9e8": "pynthToInversePynth(bytes32)", +"7060fc6e": "setBurnConfig(uint96,address)", +"706154ff": "m_mid()", +"706184b2": "addressLastClickedForGeneration(address)", "706194b9": "elenctraToken()", +"7061dba7": "percentageYield()", "7061e777": "Etats_financiers_10111011()", +"7061f24e": "upgradeMetadata(uint256,string)", "70620168": "createBroker()", +"7062428e": "ownerGone(address)", "706247a1": "SetVotingDescripion(string)", "7062640a": "newDeal(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7062add1": "updateReconciliationImplementation(address)", +"7062b97d": "administrador()", "706332d1": "right46(uint256)", "70634626": "getBTCAddr(bytes32,int256,bytes32,int256)", +"706438d1": "isEIP20(address)", "70646896": "DOWN_etherWin()", "70646de9": "canSend(uint32,uint32)", +"7064a82a": "getTokensSaleValue(uint256)", "7064aa96": "APPROVE_CONTRACT()", "7064b5aa": "getPendingExploreItem(address)", +"7064bea0": "removeLiquidityETHOnly(address,uint256)", +"7064cad3": "stakeholderIndex()", "7064d509": "tokenBonus()", "7064e50c": "tokenIssuedMainSaleIco()", "7064f0af": "COMPANY_ALLOCATION()", +"706557c0": "setAcceptContractDepositor(bool)", "7065bedc": "getSettingValuesByTAOName(address,string)", "7065cb48": "addOwner(address)", "706605b9": "withdraw_arbitrary_token(address)", "70660f7c": "stakeExistingContent(bytes32,uint256,uint256,bytes8,uint256)", +"70666dad": "usechainAddress()", +"7066a7fc": "periodInfoEcho()", +"7066e5eb": "resetAccountExceptNonceAndState(address,address)", "70670a20": "Ethash(address[3])", +"70676dc9": "internalRedeemPositionTokens(address,uint256)", "7067e881": "RATE_FACTOR()", "7067f915": "Constructed(address,uint256)", +"706848d2": "getPeriodAvailableRewards(uint256)", "706910ff": "buy(uint256,address,uint256,uint256)", +"7069177f": "numberStarts(uint256)", +"7069508a": "stakeSTOLLP(uint256)", "7069e746": "stakingEpochStartBlock()", +"706a0fd3": "canActivateZIR(address)", "706a3604": "sethardcap(uint256)", +"706a571c": "getmaintanceMode()", "706a99fb": "codeExportEnabled()", "706aba4a": "RNDInvestor()", +"706abf13": "deployMarket(uint256[],uint256[],address,uint256,uint256)", "706b5759": "RegisterDomain(string,string)", "706bfed4": "accessCheck()", +"706c034d": "setMaxForcedExitAge(uint256)", +"706cac35": "venusMarkets(uint256)", +"706d0186": "notifyRedistributionAmount(address,uint256)", +"706d16c8": "badPractice()", +"706dda99": "isFundraisingStarted()", "706df8d6": "getDonationInfo(uint256)", "706dfe54": "getIssueState(uint256,bytes32)", "706e11bc": "StartRebuy()", +"706e2f9b": "getTokenDecimals(address[])", "706e5b6e": "getOTCTotalSupply()", "706eb3ab": "ethUSDOracle()", "706ed71b": "Bomx()", "706f6496": "goldRate()", "706f6937": "airdropTokens(address[],uint256[])", +"706f82ff": "withdraw13()", "706f8856": "jiGouTotalBalance()", "706ff617": "mint(uint256,uint256,address,uint256)", +"70707c06": "swapNativeToken()", "70708a3c": "LocalToken()", +"70709a7c": "toggleFeeless(address)", "70712939": "removeAuthorizedAddress(address)", "70713209": "TJCoin()", +"70713960": "lockAssets(address,uint256,bytes32,uint8,uint32,bool)", "7071688a": "getValidatorCount()", +"70716971": "nextEarliestUpdate()", +"7071798d": "platformCallsFinalizeRefund(address)", "707188c1": "changeTime(uint256,uint256)", +"70720060": "getVotesByProposalsName(bytes32)", "70720fe4": "_maxTokenSoldICO()", "7072a977": "gasForOraclize()", "7072aaa3": "newSubdomain(bytes32,bytes32,bytes32,address,address)", +"7072b3e5": "iterateRebalance()", "7072c6b1": "restricted()", "70732188": "getUserTaskAtIndex(address,uint256)", "7073c072": "getRegisteredUsers()", +"7073f8c1": "adminWithdraw(address,address,uint256,uint256)", "70740aab": "purpose()", "70740ac9": "claimPrize()", "707424fe": "contributorsIndex()", +"7074304a": "LogPaymentIntervalChanged(address,uint256)", "70743768": "voteStake(bytes32,uint256)", "70747544": "currentCapLevel()", "7074c091": "preSaleBonus1Percent()", +"70751f5b": "trimBytes31(bytes31,uint8)", +"70756b53": "SnapshotTaken(uint256,uint256,uint256,uint256,uint256)", +"70756eb5": "allowSoloDeposit()", "7075b1d8": "latestMonarchInternal()", +"70766280": "pendingMelterAdmin()", "7076738b": "_emitWorkPaused(uint256,uint256)", "70767f6c": "fillBidByAddress(address)", +"7076b3b3": "setTheTought(bool,string)", "7076e27f": "riskcoins(uint256)", +"7076e802": "getVaultVLTBalance()", +"70772797": "calcAdditionalRatio()", "70775a59": "_generic(bytes,uint256,address)", "707789c5": "setOpsAddress(address)", "7077c11f": "SubOnHold(uint256,bool,address)", "70780a7a": "shareholder2()", +"70782837": "bondToShareRatio()", "70788340": "Marcelo()", "7078f424": "getHint(int256,uint256)", "707913f0": "Add_totalLotteryValue()", +"70795ce3": "swapEthForERC1155(address,uint256[],uint256[],address)", +"707a1df5": "UpgradedHouse(uint256,uint256,address,uint8)", "707a4e96": "start(uint256,uint256,uint256,uint256)", "707a7ab3": "acceptOwnerTransfer()", "707a92b8": "FoodCoinToken(uint256,string,uint8,string)", +"707af19f": "registrationExt(address,uint8)", "707afb1d": "closest(uint256,uint256,address)", "707b543d": "createNumber(uint256)", "707ba39e": "VilzToken()", @@ -64532,78 +117960,128 @@ "707d4349": "createPromoCity(address,string,uint256)", "707d5fe1": "payoutBonuses()", "707dd840": "TAGCASH()", +"707e05d3": "votingEndBlock()", +"707e71bd": "Deploy(bytes)", "707e8128": "all_referrals_count_by_address(address)", +"707f07bf": "twin1Address()", "707f4ecd": "crowdTokensTLP2()", +"707fb79e": "orderId(uint256)", +"707fcf19": "initiateDistribute()", "707fe454": "MODXCOIN()", +"70805434": "withinVolatilityTolerance(uint256,uint256,uint256,uint32)", "70809757": "dispute(uint256,uint256,bytes32)", +"7080e849": "setPut(bool)", +"70810188": "getReferRo(uint256,uint256)", "7081150a": "iconToken()", +"7081ac3d": "orderBook(address)", "7081d5da": "getPoolAvgHatchPrice()", +"70822171": "transferEarningsToWallet(address)", "708238a0": "mainSaleFirstBonus()", "708260b4": "teamToken2018()", +"70829157": "showbuyIn()", "7082b421": "parseBlockHeader()", "7082d203": "lend(address,uint256,uint256)", "70835d98": "CoinAllocation(address,int64,int64)", "70835f6b": "approveAddTokenData(uint256)", +"7083d1c2": "setRiskThreshold(uint256)", +"70841a0b": "nodeWithdrawable(address,address)", "70844f7a": "sendBadge(address,uint256)", "708484db": "blikedUntil(address)", +"7084f547": "Withdrawn(address,uint256)", "708547f3": "testUpdateLawyer()", "70858679": "YDHTOKEN_M(string,string,uint256)", "70859da8": "TokenReturn(address,address,uint256)", "7085b579": "b2s(bytes32)", +"7085d0e3": "AirDropped(address,uint256)", "70862562": "distributeTokens(address,address,uint256)", +"708625b4": "playerBonusRate()", "7086528e": "DemocracyVote()", +"7086625c": "concludeWeek(uint256,uint32,uint32,uint256)", "70876c98": "purchase(uint256,uint256)", +"708789e4": "Ethereum_Price()", "7087b272": "Coneus()", +"7087ec14": "newParameterizerBYOToken(address,uint256[])", "7087ed2c": "getClaimSeed(address)", +"70880e13": "encodeParticipant(address,uint32,uint8)", +"70884586": "prize_number()", "70887eb9": "totalSoldTokensWithBonus()", "7088abf0": "WhiteListCrowdsale(uint256)", +"70897b23": "setPerformanceFee(uint256)", +"70899f27": "addLiquidityEthToUniswap()", "7089e4f0": "LogBuyEnabled(bool)", "708a4947": "getOptionState(address[3],uint256[3])", +"708b0dbe": "wETHAddress()", "708b2097": "TKCC(uint256,string,string)", "708b34fe": "submitMessage(string)", "708b9d01": "lockThreshold()", +"708bde4b": "toggleUniversalDepositUnlock()", "708bf79a": "updateMember(address,address,uint256,uint256,string,uint256)", "708c2956": "YouGive(uint256,uint256,string,string,address,address)", +"708c3e44": "tokenAllowanceSet(address)", "708cfb25": "setTeamTokensHolder(address)", "708d0c57": "updateResolver()", +"708d5210": "curRewardPeriod()", +"708d5421": "NewDanPanPercent(uint256)", "708d9fd3": "group_key_confirmed()", "708da969": "verifyAddress(address,string)", "708ddf7b": "submitted()", "708e03d9": "distributionOfTokens()", +"708e3ebf": "harvestFor(uint256,address)", "708eef42": "transferOwnershipWithHowMany(address[],address,uint256)", "708f29a6": "getTotalPayments()", "708f8940": "getEXECUTION_GAS_OVERHEAD()", +"70904ded": "row()", "70905dce": "emergencyAdmin()", "7091e0c5": "setNewOwner(address,uint256)", "70926370": "EGGS_TO_HATCH_1BANKER()", +"70930a5c": "amountIssued()", "70936880": "defaultWaitTime()", "70936a6e": "freezeOf()", "7093ab11": "privateSell2LockEndTime()", "70948956": "PolicyPalNetworkToken(uint256,address)", +"7094a1aa": "changestop(bool)", "7094d21e": "isSuccessOver()", +"70954fe7": "SetUniSwapRouter(address)", "70961774": "getBlockCreatedOn()", "70964be7": "startSellingPhase()", +"70965b84": "capsuleOwnerCount(address)", +"70966910": "querySafety(address)", "7096b6cb": "receiverContractAddress()", "7097048a": "claimDerivativeTokens()", "70983e91": "startBoardProposal(uint256,address)", "70984e97": "bigBlind()", "70985eb6": "setCrowdsaleContract(address,address)", +"70989330": "governanceWallet()", "7098ad13": "PropertyCoin()", "7098e670": "getFincontractInfo(bytes32)", +"7099366b": "getFinalSettlementEnabled()", "70994b31": "getCollectibleDetails(uint256)", +"7099ff0d": "get_tx_info()", +"709a13e9": "setOracleImplementation(address)", "709a36e6": "getMiningMeta(uint256)", "709a5359": "updatepresaleRate(uint256)", +"709a7669": "_approveAndStake(uint256)", +"709ab72f": "lpUsdAmount()", +"709b7b81": "EIP1271SignatureErrorSelector()", +"709bb567": "getAmguPrice()", "709bc0ff": "AntitiredToken(uint256,string,uint8,string)", "709be206": "registerCreatorsPools(address[],uint256,int256)", +"709bfbbb": "ResetICO()", +"709ca0bc": "indiceComplementoAtosImobiliarios(uint256)", "709cc16e": "NewCup(address,uint256)", "709cf8c0": "saleTokensVault()", +"709d039d": "swapManager()", "709d8c4e": "DSPLT_A()", +"709e4172": "BurnForGateway(uint32,address,string,uint64)", "709e6ed4": "upgradeIdRange()", +"709e8ca8": "liquidate(bytes32,uint256)", "709eaa93": "minerCreatedCount()", +"709ec8b4": "blackList(uint256)", "709ecb39": "findPublisher(address)", "709ef231": "sellTokens(uint256,uint256,uint256)", "709f5ccc": "setDivisor(uint256)", "709f6f25": "setData_19(string)", +"709f728d": "xrpRate()", "709f84a4": "PriceStrategy()", "70a0014e": "projectFundingFail()", "70a01b3d": "addInvestor(address,bool)", @@ -64614,129 +118092,230 @@ "70a0f1fe": "numChametzForSale()", "70a14c21": "LogBump(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", "70a2b84a": "toggleAvailability()", +"70a30fd7": "NUSTOKEN()", +"70a342c2": "extractFee(uint256)", +"70a375ca": "pathogens(uint256)", +"70a423a9": "LPTokenDecimals()", +"70a42898": "getClaimable(address,string)", "70a4fc11": "toggleDataViewWindow(uint256)", +"70a51593": "Post(address,uint256,string,address)", +"70a53748": "setProposal(bytes32)", +"70a58ec6": "getCompToken()", +"70a5940f": "getBoosterCategory(uint256)", +"70a6221f": "perBakedJiaozi()", "70a6c4bb": "receiverWithdraw()", +"70a6efef": "addPeriod(uint256,uint256,uint256,uint256,uint256)", +"70a75ac2": "read(bool)", +"70a78adb": "amountOfBasicIncome()", +"70a7b04d": "queryUserId(address)", "70a7b3e8": "_validEstimate(uint256,uint256,uint256)", +"70a7b8d5": "setMoneyFeeRatio(uint256)", "70a7e2dd": "getBunny(uint32)", "70a8609e": "test_someOtherTest()", +"70a898bc": "hasMinimumAmount()", "70a89986": "addContribution(address,uint256,uint256)", +"70a8a2e6": "UpgradeToLevel3FromLevel1()", +"70a8be2a": "setOtherReserve(address)", +"70a93b36": "setLevel(uint256,uint256)", "70a951ce": "TripCash()", +"70a996a9": "addDelegation(address)", "70aac052": "getRequestedProductsBy(address)", "70ab2359": "MAX_CROWDSALE_CAP()", "70ab2822": "assertEq21(bytes21,bytes21,bytes32)", "70ab8ba8": "creditUpdate()", +"70abe960": "tokenLike(address)", +"70ac2fd9": "getWantTokenWhiteList()", "70ac4bb9": "right32(uint256)", "70ac62ec": "getTranslationLanguageList()", "70ac970b": "test_24_assertGasUsage700Boards()", "70aca69a": "lockUpEnd()", +"70aca6c8": "getID(string)", "70acbe0e": "rate_change(uint256)", "70aceae8": "upX(uint256)", "70ad0cc6": "delAddr(uint256)", +"70ad6dfe": "supplyErc20ToCompound(address)", "70ad858b": "infoWithdraw13()", "70ae882f": "finishNextGame()", "70ae92d2": "nonce(address)", "70ae992a": "pubKeyToAddress(bytes)", +"70aea8d8": "NewOwner(address,address)", "70aecf61": "getContractReceiver(address)", +"70af5647": "addLiquidity(bool,bytes32,bytes32,uint8)", +"70afbd24": "getUserPowerAndBTokenSpeed(address)", +"70aff70f": "depositTo(uint256,address)", +"70b0aec5": "marketCapThreshold()", +"70b0b3ec": "setCollatteralRatioInProx(uint256)", "70b0d4ac": "GetAccountIsNotFrozenForReturnCount()", +"70b0f660": "setVotingDelay(uint256)", +"70b1191f": "new_price(uint256)", +"70b119da": "ADR()", +"70b12988": "getNum(address)", "70b1d9d4": "requestCanonicalFormat(bytes)", "70b257a4": "pushClient(address,bytes32)", "70b2a30f": "tokenToEth(uint256)", +"70b2bdba": "getMyMembership(string)", "70b2ef56": "EntropyTestToken()", "70b2fb05": "bettingEnd()", +"70b34d36": "updateMarketplaceDiscountToPayInErc20(uint256)", "70b3b0e5": "countriesWallet()", "70b3c7de": "CrypteloPublicSale(address,address,address,address)", "70b3d68c": "signHash(uint256)", "70b3db6f": "getCoinAge(address,uint256)", "70b45ca0": "_rateFromDay(uint256)", +"70b51d93": "setBrRate(uint64)", +"70b5454a": "viewDirectCountTime(address)", "70b57415": "product2_pot()", "70b581ad": "finalize(string)", +"70b5f950": "A13(bytes)", "70b60760": "getNodeIdsLength()", +"70b6d7e6": "withdrawNKCM(uint256,uint256)", +"70b6e24e": "withdrawFromFarm(address,uint256,address,uint256)", +"70b741f3": "getCurrentRewardPeriod()", "70b7596b": "getWinnings()", +"70b781e5": "addOracle(string,address,bytes)", +"70b7b6c8": "healthGemDays()", +"70b7c52f": "notEqualBytes32FailTest()", "70b7f9f3": "setTradingAllowed(address,bool)", "70b80d77": "WCME()", "70b8206c": "getRoundRefIncome(address,address,uint256)", "70b84e50": "joinToGame(uint256,uint8)", +"70b895c7": "lef()", +"70b8abb3": "wheats(uint256)", "70b8d29a": "saveMsgByAdmin(string,string)", +"70b91576": "ICO_balance()", "70ba1113": "percent()", "70ba3339": "cancelTransaction(bytes32)", "70bab35d": "systemStartingPriceMin()", "70bad87e": "revokeFarmerCertificate(address)", +"70bb45b3": "collectRewards()", "70bb478f": "makeTrade(address,address,uint256,uint256,uint256,uint256)", +"70bb5959": "setPriceUpdateLock(bool)", +"70bbde42": "ADAPTER_FEE_PRECISION()", "70bc52fb": "protectAddress(address,bool)", +"70bcf609": "swapTokenToDai(address,uint256,uint256,bool)", +"70bd60e7": "choice1WARBet(address)", "70bdd155": "oracle_price_decimals_factor()", +"70bdda04": "calculateEggBuy(uint256)", "70be4ffa": "testErrorUnauthorizedSetPackage()", "70be564b": "Trump()", +"70be572f": "getSGRTokenContractAddress()", "70be61d1": "ApplicationInFundingOrDevelopment()", "70be89c1": "addAddressesToWhitelist(address[],uint256)", "70be8a86": "ownedCoin(address,uint256)", +"70bea988": "GameCreated(address,address,address,uint256,uint256)", "70bf7b96": "_collect_fee(address,address,uint256)", +"70bfb92b": "eventMaker()", +"70c076ba": "mAssetList(uint256)", "70c0b647": "getOwed(address)", "70c0c516": "directMintLimit()", "70c0f689": "getApplicationState()", "70c10578": "takeProfit()", +"70c1102c": "shifter2HNtokens(address,uint256)", +"70c12895": "piToBalancerGasOn(address,address,uint256)", "70c18199": "getResponse(uint256)", "70c1854e": "FLOCK()", "70c31afc": "tokenImprint(uint256)", "70c33b31": "changeGasRequired(uint256)", "70c35951": "referralPercentOfTotal()", +"70c364bd": "fulcrum(address)", "70c40842": "_setTokenOwner(address,uint256)", "70c4488d": "validNick(string)", +"70c460f8": "getProposalDataApproval(address,address,bytes4)", +"70c4834f": "test_transferFrom_withInvalidAllocation()", "70c494fc": "ATC()", "70c4ce24": "newListing(string,uint256,string)", "70c4f2e1": "MIN_SHARE_OF_POWER()", +"70c555f1": "DepositToChildEvent(address,uint256)", "70c55e1f": "getTradingPairCutoffs(address,address,address)", "70c5f786": "TEAM_CAN_CLAIM_AFTER()", "70c5fc9d": "clearTickets()", +"70c6817a": "getDIDRegisterIds()", +"70c6881a": "RemoteBettingCloseInfo(address)", "70c690f4": "MultiOwnable(address[],uint256)", +"70c6a17e": "totalStakingShares()", "70c6abf5": "resetAllData()", "70c6b20c": "newEntity(uint256,uint256)", +"70c6cea8": "close(uint256,uint256,uint256)", +"70c6df95": "blago()", "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)", +"70c85d46": "mgr()", "70c8658a": "getNewRegistry()", "70c8f8ad": "createFirstRound()", "70c9edb7": "BTCRelayTools(address)", "70ca4c26": "getLinkedAddress(address,address)", "70ca6446": "AnotherMethod(uint256,uint256,uint256)", +"70ca646c": "SALTPerBlock()", +"70ca8457": "modifyParameters(address,address,address,bytes32,bytes32,uint256,uint256)", +"70cafd65": "transferReward(uint256,uint256,address)", +"70cb3932": "oneSplitAudit()", +"70cb9605": "f(uint256,uint256,uint256,uint256)", +"70cba3c2": "usdcAmountFromShares(uint256)", "70cbed78": "oracleCallbackGasPrice()", +"70cc190e": "getPeriodDetail(uint256)", "70cc5e45": "kgtHolderCategory()", "70ccd928": "hashesLength()", +"70cd22ae": "boosters(uint256)", +"70cd3b36": "DemocDataSet(bytes32,bytes32)", "70cd89eb": "CRLperMicroEther()", "70cd9bfd": "GPRDSQToken()", "70cda533": "updateCoeff(address,uint8,uint128,uint256)", "70cddf74": "addApproval(address,address,uint256,uint256)", +"70cde4b5": "createCampaign(string,address,uint256)", +"70cdf476": "principal_token_addresses(uint256,uint256)", "70ce0765": "createPromoListing(uint256,uint256,uint256)", +"70ce39df": "eState()", "70ce90d5": "ConfirmManager()", +"70ceeeb2": "setEvent(uint8)", "70cef2b8": "getVisaPrice(address,uint256,uint256)", +"70cf41f6": "univ2SushiEthPoolId()", "70cf7508": "isValidAirDropForIndividual()", +"70cf754a": "maxLiquidityPerTick()", +"70cf7f6f": "setEpochRewardMultipler(uint8,uint256)", "70cfaa8d": "calledUpdate(address,address)", "70cfab63": "chargeFeeAndLockEthBalance(address,uint256)", +"70cfabb0": "IncreaseApprovalData(bytes)", +"70cfadcb": "minTimeBank()", +"70cfb159": "accrueAdvisorsTokens(address,uint256)", "70d01861": "adminSetCity(address)", "70d02691": "getAssetBalances(address)", +"70d05be4": "_setEnableDistributeRepayBorrowWpc(bool)", "70d07575": "awardTokens()", "70d084c0": "SingularDTVCrowdfunding()", "70d0c5d8": "EOUNCE()", "70d0cc86": "getElementView(uint256)", +"70d0ea46": "getAssetAPR(address)", "70d12c31": "resetPeerWallet()", "70d1383d": "createEditionMeta(uint256)", "70d17adb": "isDrawn(uint256,address,uint256)", "70d19a43": "itemCancelMarketsWhenPaused(uint256)", "70d1cde4": "randomCount()", "70d1e6b4": "minimalWeiTLP2()", +"70d1e85b": "rivalutazione()", "70d22f14": "addHash(address)", "70d25a9f": "lockUpAmountStrOf(address)", "70d271ab": "StartCampaign()", +"70d289c7": "updateUserWhiteList(address[],address[],bool[])", "70d290b5": "getDoneAddresses()", +"70d29c11": "bidderCount()", +"70d2ac80": "transferToLatestStakeAfterRetire()", +"70d2e259": "updateVoteReceiversWeight(uint256,uint256)", +"70d34587": "register(address,uint256,bytes32,bool)", +"70d34918": "totalTokenQuantity()", +"70d366a5": "payPoll(uint256,bytes32)", "70d37810": "makersCount()", "70d383dc": "createManyProxies(uint256,address,address)", +"70d4ac4e": "pool_interest()", "70d4d119": "giftEth(address,uint256,string)", "70d4d7b4": "promoGen0()", "70d53be5": "find()", "70d54287": "VantageToken()", "70d5ae05": "burnAddress()", "70d60adf": "acceptBid(string,uint64)", +"70d645ac": "LogEdoRateSet(uint256)", "70d66693": "drainToken()", "70d695f7": "VerifyEd25519Packed(bytes)", "70d70e9b": "getCofounders()", @@ -64744,119 +118323,243 @@ "70d762c2": "basicDayPercent()", "70d7a0e7": "authorizeKyc(address[])", "70d81666": "LogS(string)", +"70d85fbc": "harnessPleaseFail()", "70d8915a": "getApplicationAddress()", +"70d8b039": "coreExtraContract()", +"70d9235a": "flips(uint256)", +"70d92eb5": "latestLockerRegistration(address)", "70d94ed0": "getHoldAmount(address,uint256)", +"70d99813": "getPoolsByCurrency(string)", "70d9f7dc": "awardItemRafflePrize(address,uint256)", +"70da9399": "ipfshashById(uint256)", +"70daf187": "entityRewardPerBlockDenominator()", "70db69d6": "maxBuy()", +"70db8081": "changeSingleAirdropAmountForReferrer(uint256)", "70dbb783": "AMBASSADOR_TWO()", +"70dc232a": "getTotalPhotoCount()", +"70dc320c": "addressbook()", "70dc4de5": "withdrawKRI(uint256)", "70dc8259": "totalDistributedi()", "70dc86cd": "EARLY_FOUNDERS_CAP()", +"70dce926": "myMethod()", +"70dcf3fc": "getAllowedTokensArrayLength()", "70dd2e06": "setMinActivatedToken(uint256)", +"70dd39d3": "setNyanContracts(address,address)", +"70dd7f1a": "emergencyPause(address,uint256)", "70ddeb03": "CRMTToken()", +"70de0b8c": "createSwap(address,address,uint256,uint256)", "70de1e30": "getItemItemId(uint256)", +"70de3062": "getAccountLiquidityExcludeDeposit(address,address)", +"70de43f1": "revokeHash(bytes32)", "70de8c6e": "start(string,uint64,uint8,uint32)", "70dea79a": "timeout()", +"70debde8": "addIndividualRestrictionMulti(address[],uint256[],uint256[],uint256[],uint256[],uint8[])", "70df42e1": "changeBurnBounds(uint256,uint256)", "70e0abb1": "returnInvestmentRecursive(uint256)", "70e0bd61": "setTrustedMinterAddr(address)", +"70e0c4ce": "mock_resetLatestPayday(address)", +"70e0fdcb": "showTransactionInfo(uint256,uint256)", +"70e11b9a": "indexlist(uint256)", +"70e14530": "updateMarketplace(address,bytes)", +"70e14596": "bankController()", "70e18692": "cancelIncompleteOrders()", +"70e1d03b": "collectAll(uint256,uint256)", +"70e1d658": "getParticipantId(address)", +"70e1d99b": "addStakingPoolConfirm()", +"70e2630b": "getAllVoteLength()", +"70e2b625": "compositions(bytes32)", "70e32ae7": "firstBonusLimitPercent()", +"70e3bd35": "percFeeToWhitelist()", "70e3ccf7": "initMiaoMiaoAddress(address)", +"70e3fffe": "Unlock()", +"70e41eeb": "getTokenPriceUpdateTime(address)", +"70e43b8e": "B2E(uint256)", "70e44c6a": "Withdrawal()", +"70e4605b": "grossProduct()", "70e4b809": "_setBuyTime(uint256,uint32)", +"70e56030": "updateStagingReadyTime()", "70e5bf4d": "queryVote(uint256)", +"70e60661": "setBreedingMultiplierCoolDown(uint256)", +"70e61ec4": "setSporePerJem(uint256)", "70e6b2b9": "makePayableRegistration(bytes32)", "70e6d387": "evolveCryptoAvatar(uint256,uint256,uint256,uint256,uint256)", "70e71ea3": "etherandomSeedWithGasLimit(uint256)", +"70e72399": "failReasonWithStr(string)", "70e7732d": "getSpecificSellerTransaction(address,address,uint256)", +"70e7a207": "transferLiquidityToHoneyswap()", "70e87aaf": "move(uint8)", "70e8c1b3": "test_complexNewProposalAndVoting()", "70e8dffa": "TokenHold(address,uint256)", "70e9a612": "BariCoin()", +"70e9d93c": "setNoOfOptions(uint256)", "70e9ff60": "cancelBuyOrder(address,uint256)", +"70ea0547": "ContributionAdded(address,uint256,uint256,uint256,uint256)", +"70ea8194": "div_(uint256,uint256)", "70eaa1b4": "Error(uint32)", "70eae6c0": "travelTotalEarning()", "70eb6424": "setSmsCertificationRequired(bool)", +"70eb8e7f": "getMinWeight()", "70ebf814": "addUntrustedSelfDelegation(bytes32,bytes32,bytes32[2])", +"70ec481b": "Distributed(address,bytes32,uint256)", "70ed00e2": "repayBorrowBehalfInternal(address,uint256)", "70ed0ada": "getEthBalance()", "70ed1664": "organizer3()", "70ed2726": "updateUtilizedFundsByUser(address,address,uint256)", +"70ed27a5": "grillPool()", "70ee555c": "returnTickets(uint256)", "70ee9edd": "PublicMiningReward()", "70ef14de": "Drops(uint256)", +"70ef6148": "buyAddon(uint256,uint256)", +"70f01a28": "hashtags(uint256)", +"70f053ea": "voxHolderDiscount()", +"70f06892": "AirDropforBORGETH_toOneUser(address,uint256)", +"70f07e43": "tokensDetails(address)", "70f0c351": "purge()", "70f0dfee": "MultisigWalletZeppelin(address[],uint256,uint256)", +"70f0e27a": "conservativePreciseMul(int256,int256)", +"70f0f387": "stakingTaxRate()", "70f18295": "TokenPETER()", "70f18bcd": "UnlockToken()", "70f199d2": "indAddress()", +"70f2be0b": "CREATOR_AMOUNT()", +"70f30de3": "notifyForcedRequestTooOld(uint32,address)", +"70f37a63": "x_adminWithdrawETH()", "70f37d27": "fundPool()", +"70f3bde6": "fries()", "70f4a7b2": "Th_stage3(uint256)", "70f4c18c": "oracleQueryType()", +"70f57324": "doAirDropAll()", +"70f58b62": "getMarginCallLimit()", "70f5b71c": "createController(address,address)", "70f5d3de": "WthdrawToCreator(uint256)", "70f6489e": "WHOIS(address)", +"70f656b8": "setAllocation(uint256,uint256,bool)", "70f65977": "_migrateToken(address,address)", +"70f6956a": "lastBlock(bytes32)", "70f6ac15": "RegistrationDeposits(address,address)", "70f6c906": "_refundWEICustomer(uint256,uint256)", "70f705ba": "ChargersCount()", +"70f70e46": "approve_114(address,uint256)", "70f74228": "TokenATC(uint256,string,uint8,string)", "70f79b84": "SEO()", +"70f7cffc": "Airdrop(uint256,uint256)", +"70f7f89c": "tokenToEtherConversion(uint256)", +"70f80375": "setEggPrice(uint256)", "70f80828": "reactions(uint256)", "70f85731": "setPhaseEndingCriteria(uint256,uint256,uint256,uint256)", "70f8de1f": "changeGasFee(uint256)", +"70f985be": "testSetNumber(uint256)", "70f9c021": "forcePay(uint256,uint256)", +"70f9e52f": "withdraw_fee_ratio()", +"70fa5d52": "CanvasSold(uint32,uint256,address,address)", "70fa66db": "deauthorizeCasino(address,address,uint8,bytes32,bytes32)", +"70fa6953": "setTerm(uint256)", +"70fabbc1": "changeBuybackAddress(address)", +"70fada5f": "getIsInFightWindow(address)", +"70fb84f4": "setReserveLiquidationBonus(address,uint256)", "70fbf6e5": "openGamePlayNos(uint256[])", +"70fbff24": "rateAdjustment(address,address)", +"70fcb0a7": "out(address)", "70fd37cf": "totalInvestments()", +"70fd5bad": "TRANSFER_IN_CHANNELID()", +"70fdcb45": "maxTriggerTotal()", "70fde32c": "mul(uint96,uint96)", "70fe19a3": "blocktubeFarming()", +"70fe1ad1": "rewardDelay()", +"70fe251b": "uniswapV2factory()", +"70fe9538": "_extractNXN(uint256,address)", "70ff6325": "withdrawTuneBalances()", +"70ff6bd7": "resolverType()", +"70ff852b": "releasedTokens(address)", "70ffe53d": "mood()", +"70ffe78e": "approveERC(address,address,uint256)", +"70ffffec": "MAX_MARKETING_TOKENS()", +"71006c09": "exit(address,address,uint256)", "71007509": "refundTokens()", "7100a4e6": "addAccessory(uint256,string,uint256,uint256)", +"710115cb": "getUrlWithInviter(string,address)", +"7101472c": "usdtBaseOfEachUser(address)", "710164e7": "getVATCompensations(uint256,uint8,uint256,uint8)", +"7101fd92": "userBookContractAddress()", +"710227e3": "timeSchedule()", "71026acc": "EXPECTED_START()", +"7102909b": "find4Percent(uint256)", "7102b728": "vested(address)", "7102c138": "Standard_Token(uint256)", "7102f74d": "recalcTokenPrice()", +"7103353e": "aggregators(bytes32)", "71037b1e": "flagUSInvestor(address)", +"710388d1": "removeSynths(bytes32[],bytes32[])", "71039256": "BUCToken()", +"710475f6": "_DISTRIBUTE_FINISHED_()", "7104a142": "getNumberOfVerifiers()", +"7104da8a": "_unsetTransactionFee(bytes32)", +"7104dd03": "authority(address)", +"71053546": "getGasUsed()", +"71055682": "baseRateLookup(uint256)", +"710560f4": "callsOwned(bytes32,address)", "71056a78": "ChangeEtherGasProvider(address)", +"7105cdbc": "lookParams1()", "71061398": "getRoles()", "7106312c": "emergencyAddr()", +"7106767b": "pushMCRData(uint256,uint256,uint256,uint64)", +"7106a260": "tenureApyMap(uint256)", "7106bd46": "mintContractByIndex(uint256)", "7106cdb6": "CloudexchangeCrowdsale(uint256,uint256,uint256,address)", "7107283f": "create_tablet(bytes32)", +"710793a7": "privateBlocks()", "7107d7a6": "minBuy()", "710908c9": "levelThreeBonus()", +"71093359": "addRoute(address,address)", "71098a35": "startStop()", "71098e15": "totalSTC(uint256,uint256)", +"710a1549": "deliverTokens(address[])", +"710a8315": "permissionParams(bytes32,uint256)", +"710a89c2": "Trade(address,uint256,address,uint256,address,address,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"710a9f68": "execute(uint256,address,bytes)", "710ad128": "getHatchingEggData(address)", "710b2d8c": "getAddressRatio(address)", +"710b318b": "profitPerShare_()", "710bf322": "proposeOwnership(address)", +"710bff5b": "Attribute(bytes32,bytes32)", "710c6705": "updateCapFlex(uint32)", "710cba8b": "isAllowedOverrideAddress(address)", +"710ccb4c": "setmax(uint256)", +"710cf1ed": "draft(uint256)", +"710d33ca": "checkContributorBalance()", "710d6a61": "unPauseTransfers()", +"710d73e0": "SUPER_DUPER_EMERGENCY_ALLOW_REFUNDS_DO_NOT_FUCKING_CALL_IT_FOR_FUN()", +"710d7f6d": "giftAll(address)", "710dff42": "isdrawadm(address)", "710e5d2f": "setMaxFee(uint256)", +"710eb26c": "recoveryAddress()", +"710ec85b": "create(address[],uint256[],string)", "710ed77a": "revokeAccessbyDelegate(bytes32,address,address)", "710edb10": "multisignWallet()", +"710edf99": "tokenLINKPair()", "710ee68e": "DOGEToken()", "710f3953": "add_entity(string)", +"710f4a60": "eligibleUser_(address)", +"710fd5d5": "submitAction(bytes32,string)", "710fe6f8": "getWithdrawBalance()", "710ffc72": "changeTribeOwner()", "71101891": "DharmCoin()", +"71102819": "packages(bytes32)", "711085b2": "arr(address,address,uint256,uint256,uint256)", "7110ce25": "MyRefReward()", "7110eed7": "createRegistryInstance(address,address)", +"711114a0": "lockcheck(address)", +"71116320": "minimumUnstakeDelay()", +"71119030": "defaultReferralPercentage()", "7111abf2": "SessionOpen(uint256,uint256)", "7111ed97": "TopPayCoin()", +"71128d76": "revokeSwapper(address)", +"7112d97c": "venPerBlock()", +"71133be7": "ppay()", "71135f8b": "setStopped()", "7113d35d": "pickFood(uint256,string,string,uint256,uint256)", "7113e5e2": "findKey(address,uint256,uint256,uint256)", +"7113ee5e": "Blocks(uint256)", "71140942": "MIN_ETH_FUND()", "71145486": "rebuildManagerList()", "71147d32": "STRC_ADDR()", @@ -64865,179 +118568,344 @@ "71156c73": "TheFund()", "7115c8bd": "xdao(uint256,string,string)", "7115c988": "Batch(address)", +"7115dc33": "govPercent()", "711619de": "setPubEnd(uint256)", +"71167cd5": "tokenDecaySupplyForEpoch(uint256)", "711748a3": "removeModuleAtIndex(uint256)", "71175249": "INEXToken()", +"7117f3fa": "createWallet(address[],bytes32)", +"71188625": "poolPrograms()", +"7118d431": "requireExchangeActive()", "7118f854": "icoSuccess()", +"71190e4b": "addMarketTerms(string)", "711953ef": "setGameAddress(address)", +"71197484": "slope_changes(uint256)", "7119a490": "setBtcPriceProvider(address)", +"7119bb55": "setActivationPrice(uint256)", "7119c873": "transferSSPRecord(address,address)", +"711a4f62": "referrerInfo(address)", +"711a6f7a": "reserve_from(address,uint256)", +"711a8854": "f(int256,uint256)", +"711acf86": "getValidityOfCover(uint256)", +"711ae472": "setFromDecimals(uint256)", +"711af6ed": "RateTimeChanged(address,uint8,uint64,uint64,uint64,uint64)", +"711afe07": "DAIDToken()", "711b4871": "getOptionBuyOrders(uint256,uint256)", +"711b8881": "activity(uint256,uint256)", +"711bbfd9": "handleWithdrawal(address,uint256,uint256)", "711bf9b2": "setAuthorized(address,bool)", "711bfa89": "month12companyUnlock()", +"711c129d": "last_no_of_confirmed()", "711c2b94": "setTestMarket(bytes32,bool)", "711caf40": "transferStep3(address)", "711cbc26": "PartyRegistry()", "711d11bf": "ev(string,address,uint256)", +"711d2fd3": "addSignatureToCertificate(address,bytes32,bytes)", "711d4407": "updateBonuses(address,address,bool)", "711d649b": "getCatNames()", +"711e3215": "sequence(uint256)", +"711e9052": "minMMToSwap()", "711f63bf": "toBytes32(bytes,bytes,uint256)", +"711fa463": "purchase(uint256,bytes32,bytes32)", +"711fcc5a": "destroy_token(uint256)", +"71201a0e": "distributionInterval()", +"71209c8a": "changeMaxPoolSize(uint256)", +"7120a88b": "setFlag(uint8)", "7120d381": "getUpdateTokenAge(address,address,uint256)", "7120fab4": "discountCollect()", +"7120fe1e": "getTotalTContracts()", +"71211954": "ProductCreated(uint256,uint256,uint256,uint256,uint256,bool)", +"71211a5d": "setAllocatedPart(uint256)", "71215af6": "DAYS_28()", "712173de": "CrowdsaleStarted(uint256)", "71221e38": "RareCoinAuction(uint256)", +"7122ba06": "metadata(bytes32)", "7122e857": "setParticipantWhitelist(address,bool,uint256)", "7123691e": "removeSERAPHIM(address)", "71236b92": "Owner(address,uint256)", "712394b6": "nexumToken()", +"712413ee": "_isInFirstRound(uint64)", +"71245db0": "add_PlyAddress(address)", "71245f6e": "BTCValue()", "7124abf3": "getLastPayouts()", "7124c683": "setUpdateInterval(uint256)", "7124d613": "changePaymentAddress(address)", +"7125493b": "teleport(string)", "71254d9b": "setFeesDistributionPercentages(uint256,uint256,uint256)", +"712554f0": "setFeeRate(uint32)", +"7125fbb5": "entryTime(address)", +"71260e9e": "go(uint256,address,address,address,bytes)", +"71265eac": "refundGas(address,uint256,uint256)", "7126a855": "configure(uint256,uint256,uint256,uint256,uint256)", +"7126aac9": "setYieldXAddress(address)", "7126b6ff": "_grantAdmin(address)", "71270b46": "initCards(uint256)", +"7127b6b7": "maxGooseSupply()", +"7127beaa": "tokenPrice2()", +"7128666b": "storeAddress(address)", "7128ad73": "PaymentReceived()", "7128defb": "removeSupervisor(address)", +"7128e55b": "updatePaiementStatut(uint256,uint256)", "712980a2": "banUser()", +"71299f92": "returnExpiredCall(uint256)", "712a10bf": "COIN_SUPPLY_ICO_PHASE_2()", +"712a351d": "marbleMetatransactionsContract()", "712a5094": "balanceOfTheContract()", "712aa191": "isValidCustomerTxPaymentForKWh(address,bytes32)", "712ac60e": "onRemoval(string)", "712b1ed0": "triggerInput()", +"712b772f": "skim(address,address)", "712bb1b8": "getDataColla_AA_01(string)", +"712bb53e": "updateFunctions(address,string)", "712c0c5a": "withdrawDirectDebit(address[],bool)", +"712c352d": "getLastGameResults()", "712c3f7a": "addressPartnershipsAndExchanges()", "712ca0f8": "getOrder(string)", +"712d5604": "approve_664(address,uint256)", +"712d5fa2": "issueTokensCustom(address,uint256,uint256,uint256,string,uint64)", +"712d66cc": "eternalStorageLiquidations()", +"712d9171": "getLendingPoolCollateralManager()", "712dd575": "raiseSellOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"712de827": "rollOut(address,uint256)", +"712e4321": "verifyProofForBlockForNumber(uint256,bytes32[],bytes,bytes)", "712f22a0": "getVolumeBonus(uint256)", +"712f3f4c": "bonusMultipliers(address)", "712f4d70": "_generateShortLink()", "712f5e72": "SetRoundTime(uint256)", +"712f61dc": "setDefaultTokensAmount(uint256)", "712f7790": "publicGetStatus()", +"712ff885": "calcInPoolBp(uint256)", +"71301971": "settledConvertvSPYtoWei(uint256)", +"71302cf2": "depositVatDai(uint256)", "713081d0": "setPromoter(address)", "7130d7ce": "get_asset_event_details(bytes32,uint256)", "71313365": "ICO076()", +"713192b4": "getFeeCollector(bytes32)", +"7132048c": "updateMetadataUrl(string)", +"71329171": "removeItem(uint256)", "7132d337": "citadelTransfer(address,uint256)", "7132ebcd": "switchPaused(bool)", +"71337785": "INVESTORS_SUPPLY()", "7133c0c0": "calcAmount(uint256,uint256)", "713494d7": "setReferralFee(uint256)", +"7135ac7b": "getFunction()", +"713658f3": "high()", "7136982b": "getHolderCount()", +"7136a7a6": "redeemAll(uint256)", "7136d509": "playCEELO(bytes32,uint256[6])", +"7136db29": "getHolderRewardDetailsAt(uint256)", "7137047a": "setDealCancelRate(uint256)", +"71372e1e": "setUnfinalizedPoolRewards(bytes32,uint256,uint256)", +"71374dec": "items(address[],address[])", "7137b024": "Banliang()", +"7137bd1f": "WithdrawFeesFromCoinSparrowPool(address,address,uint256)", "7137e072": "getAllTemplateProposals(address)", +"7137e731": "calc_token_amount_withdraw(uint256)", "7137ed47": "setProxyContract(address)", +"7137ef99": "calcPoolValueInToken()", "7138364b": "adventureItem()", +"71383c32": "getUserPoints(address,uint256,uint256)", +"71384969": "settle(uint256,uint256[])", "7138bc92": "transfer(address,address,address)", "7138e0c9": "divForSellBack()", "7138ef52": "right9(uint256)", "71393c60": "storeLedgersInIpfs()", "713942f7": "getUserVerified(address)", +"71395428": "executeDirectOrder(address,uint256)", "713955e8": "ico2endTime()", "71395818": "ItemsMarket()", +"71396f6d": "getBest(address,address,uint256)", "71398637": "batchToApplyMilestone(uint8,address[])", "7139b1ca": "balanceOfRoutingCode(bytes32)", "7139b595": "withdrawDthShopAdmin(address,address)", "713a7eef": "Xingqiub()", +"713a8120": "send_to_dydx()", +"713a83e5": "wUNIv2()", +"713af27b": "EventAppEntityCodeUpgradeProposal(address,bytes32)", +"713b0a1e": "pixelChains(uint256)", "713b563f": "database()", +"713b9088": "Revoked(address,uint256)", "713be000": "checkoutCart()", "713be126": "changeRateSetter(address)", +"713ce6a3": "AcceptDraw(uint256,uint256)", "713d30c6": "updateState(int128,uint128,uint8,bytes32,bytes32)", +"713d856b": "orderCount(address)", +"713eab56": "provableGasLimit()", +"713eb400": "Frozen(address,bool)", "713eba52": "OwnershipRequested(address,address,bytes32)", "713ec905": "recordAddress()", +"713eca28": "addAndReturnProjectivePoint(uint256,uint256,uint256,uint256)", +"713f2216": "setCurrentRoundTotalActiveStake()", +"713f391d": "_mtTokens(address,uint256)", "713f5e4d": "sendEthToContract()", "713fd253": "Limit_Amount()", "713ffc3b": "setNextGameSettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"71404156": "removeGuardian(address)", "714064f3": "BreakableBond(address,address,uint256)", "7140bdf3": "get_all_best_offers()", +"7140e246": "AddLockupStage(uint256,uint8)", "7141856d": "getNumProps()", +"7141879b": "updateWithdrawData(address,uint256)", "7141aa8b": "getTitulaire_Compte_3()", +"7141e402": "returnFlashLoan(address,uint256)", "7142087c": "allowTransferGlobal()", +"714270ab": "calcPart(uint256,uint256)", "71427ac1": "SuperLitecoin()", "7142b17d": "dataForOwner(address)", "7142b191": "MultiplesaleAirdrop(address[],uint256[])", "7143059f": "getParticipant(address)", +"71434fa0": "updateInherit(string,uint256,uint256,uint256,address)", "714383ad": "HYPEToken()", +"714436f2": "getFinalSlotsSold()", "71443c4d": "soldDragons()", +"71444714": "rewardsForUser(address)", "714490ab": "WithdrawToBankroll()", "7144e81e": "Cremit()", +"7144e9a2": "cobj()", +"7144f996": "lastReapReward()", "71450e30": "tierIndexByWeiAmount(uint256)", "7145644c": "calculateBTS()", +"7145a6b2": "genTickets(uint256)", "71461be9": "getCurrentMilestoneProcessed()", +"71463599": "updateTime(address)", +"714690d9": "fetchFirstDayPrices(uint256)", "7146bd08": "MAX_PURCHASE()", +"71476c86": "devTreasuryPercentage()", "71476f35": "clear(address,address,int256)", +"71477fef": "currentWineAmount(address)", "71478fae": "_getTokenIdFromBytes(bytes)", +"7147f700": "soldOnPSale()", "714897df": "MAX_VALIDATORS()", "71489835": "isRed()", +"7148a4f0": "settleableReward()", +"7148b0b7": "ArbitrageUniswapUniswap(address,address,address,uint256,address)", "7148ba36": "_createCard(string,uint256)", +"7148ea66": "updateBatch(string,uint256,string,string,uint256,address,address,bytes32,bool)", "71492685": "getTo()", +"71499694": "rewardsToken3()", "714a2f13": "assertEq(int256,int256,string)", +"714a35fb": "mintBlock()", +"714a3f7e": "add_goods(string,string,uint256,address,string)", +"714a9518": "strategyNo1(uint256)", +"714aeabc": "buySellDelaySecs()", +"714af34b": "getMarket(address,address)", +"714b0fb1": "tokenHxpFrozenBalances(address)", "714b1443": "CancelBuyOrder(bytes32,address,uint256,address)", "714b4465": "MakerTransferredEther(address,uint256)", +"714b4658": "getLastSnapshotIndexOf(address)", +"714b6872": "investEther(uint256)", +"714b8246": "nextHalvingBlock()", +"714c5398": "getBaseURI()", "714c5d9d": "BMT(uint256,string,uint8,uint256,string)", "714ca446": "adopt(uint32,int256)", +"714cb50f": "harvestableAmount(uint256)", "714ccf7b": "setVault(address,address)", +"714cff56": "tokenIds()", "714d497a": "maxPerExchangeBP()", "714d582e": "sdc(address)", "714d5fae": "cancelRemoveOwnerRequest2()", +"714d6fd0": "setIncomeRate(uint256[10])", "714d9537": "cancelEvent(bytes16)", "714dc20d": "ownerChanged(address,address,address)", +"714df9cd": "stake(address,uint256,bytes,int256)", "714e2ec9": "vanilCoin()", "714e42a1": "getSaleRate(uint256)", +"714f0596": "Issue(bytes32,uint256,address,uint256)", +"714f8260": "devWalletRotation()", "715018a6": "renounceOwnership()", "71506977": "EXCHANGE_RATE_DECIMALS()", "7150773d": "donateFunds()", "7150d8ae": "buyer()", "71513e9d": "reSet()", "71515a36": "SXSYCoin()", +"7151e07f": "ExecuteLookUpP(string,string,string,string,uint256)", +"7152ce6b": "getOrderAnalytic()", "7152f800": "gameResult()", "71535f0d": "tenthTime()", "71543cfc": "unWhitelistUsers(address[])", "71543f39": "Eetgccoin(uint256,string,string)", "715469d0": "logoX()", +"715484ad": "ArbitratorRemoved(address)", "7154ae61": "CheckNumbers(uint8[5])", "7154b798": "addExploreData(address,uint256,uint256,uint256,uint256,uint256,uint256)", "7154b8b5": "setPercent(uint256)", +"7154fcde": "transferHook(address,address,uint256,uint256,uint256)", "71551178": "testDisputedInvalidSequenceWrongReadAddress()", +"71552adf": "_encode_uintf(uint256,uint256,bytes,uint256)", +"71553d46": "settledConvertvSPACEXtoWei(uint256)", +"71556c9a": "ContractAccept(uint256,address,address,string,uint64,string,uint64,uint64,uint256)", +"7155da27": "DisTokenTime()", +"7155de76": "C10(bytes)", +"7155fae0": "totalWithdrawnInMainNetwork(address)", +"71560855": "encore()", "71560f80": "emulatePurchase(address,address,uint256,uint256)", +"7156145c": "parkETH(uint256)", "71582f54": "IsSetReferrer(address)", "715851a0": "getCheckingBalance(address)", "71586383": "totalTokensReceived()", +"71586b1f": "removeReward(uint256,address)", "71587988": "setNewAddress(address)", "71589d6b": "newponzi()", +"7158da7c": "underlyingAsset()", "7158e346": "NatCoinCrowdsale(uint256,uint256,uint256,address)", "7159271d": "publicsalestartTime()", "71599987": "increasePendingTokenBalance(address,uint256)", "7159a618": "operate()", +"7159d460": "totalBuyBackRequested()", "7159db81": "lastTier()", +"715a01e8": "VotingEndTime(uint256)", +"715a6132": "_updateShifterRegistry(address)", "715b208b": "getAllAddress()", "715b99f8": "_isSignedPrefixed(address,address,bytes32,uint8,bytes32,bytes32)", "715d4a64": "sellsubscribers()", "715d574e": "CarboneumToken()", +"715d8ff6": "gameTransferFlagOf(address,address)", +"715d9402": "eligibilityAmount()", "715db6ea": "TheMark()", +"715dd0bf": "maxPoolContribution()", "715e0e4e": "repurchase(address,uint256)", +"715e372a": "getPlayerSlot_SideB(address)", +"715ecf47": "create(uint256,address,uint256,uint256,uint256,uint256)", "715ed24b": "setVIPThreshold(uint256)", "715eddda": "starbaseEpAmendment()", "715ede94": "auction(bytes32)", "715ef43d": "newPurchase(address,uint8,uint8)", "715ef4ff": "resendFailedPayment(uint256)", +"715f250c": "getStoremanFee(bytes32)", +"715f667d": "setCustomSymbol(address,string)", "715f8975": "JOINT_PER_ETH()", "7160138c": "unlockedTeamStorageVault()", +"71606419": "forcePositionRemoval(uint256,address)", +"71606e8e": "seasonGoal()", "71608d05": "getBalanceModificationRounds(address,address)", +"71609f68": "indicarHerederoTieneHijos(address)", +"7160c8a2": "convertUnitoOne(address,uint256,uint256,address)", "71612620": "transferFST(address,uint256)", +"71614071": "NewAdmin(address)", "71616b84": "calculateTokenCrowsale(uint256,uint256)", +"7161bb83": "saveCooldown()", "7161c5df": "setBracketPrice(uint256,uint256)", "7161c66d": "RunManager(bool)", "716210d8": "addHodler(address,uint64)", +"71629844": "Deposit(address,uint256,uint256,uint256,uint256)", +"71629bee": "TokenSalesCapReached(address)", "7162f182": "resetRip()", "716344f0": "preIcoEndTime()", +"7163d604": "approve_854(address,uint256)", "716437b5": "testApproveTransfer()", +"71644fab": "releAss(uint256)", "71645971": "toList()", +"71649551": "Temp(uint256)", +"716495b9": "setMaxUsersLimit(uint256)", +"71651dff": "cap_nhat_kc_da_chay(uint256,int256)", +"7165485d": "curve()", "71658552": "getUint(address,bytes32)", "71658896": "getTopic(uint256)", +"7165fc2d": "sendTokenToV4(address,uint256)", +"71663fe1": "getDataBetIndexes()", "71674ee5": "maximumIcoRate()", +"71682910": "refLevel2_()", +"7168d2c2": "removeSynths(bytes32[])", "7168e5d3": "ownerSetAdmin(address)", "71697efa": "getSumWithdrawals()", "7169a63e": "IcoCancelled()", @@ -65045,50 +118913,97 @@ "7169dd5d": "intial_supply()", "716adc36": "setMyOracle2(address)", "716af639": "minePoP(address,uint256)", +"716ba983": "j(uint256,uint256)", "716c0a31": "computingCharge(uint256)", +"716cec86": "applyInterest(address)", "716d3c6c": "adjustReward(uint256)", +"716dba9e": "buildToken(uint160,uint32,uint96,string)", +"716e1971": "initERC20Token(uint256,uint256,uint256)", "716e5604": "startItemRaffle(uint256,uint256)", "716f10bf": "isWhitelistOn()", "71716992": "ThankYouToken(uint256)", +"717186d1": "setBorrowCap(uint256)", +"7171be3c": "getSortedOrder()", "71726f69": "HOWEOToken()", "7172a1f2": "testLedgerCreation()", "7172d9f0": "OtomatizToken()", +"71738620": "getQuestion(uint16)", "71740d16": "numDarknodesPreviousEpoch()", "7174164b": "XPTToken()", "71748a8b": "WSR(address)", +"7174a870": "token3Crv()", "7174ac9e": "setEscrowedTaskBalances(uint256,uint256)", +"71750db6": "setGovernmentOfficer(address,string,string,string,string)", "71752d06": "getOwnerByItemTypeAndId(string,uint256)", +"7175d4f7": "smart_wallet_checker()", "7175d709": "SPARCAddress()", +"71763d41": "floorSqrtTest(uint256)", "71765e74": "VendMultiSigWallet(address[],uint256)", "71766ae3": "disableManuallyBurnTokens(bool)", +"71769ce3": "checkWithCode(address[],uint256[])", "71773fc2": "lasttimereduce()", "7177a7dd": "canTransferTokens()", "71781a79": "subToken(address,uint256)", "71784312": "distributeVariable(uint256,address[],uint256[])", +"717855ce": "setDecimals(string,uint8)", +"7178af45": "settlement_Dev()", +"7178b98a": "setDao(uint256)", +"7178cac7": "firstBuyersCount()", +"71790251": "callOnAddition()", "71793195": "__isFeatureEnabled(uint256)", +"71796136": "getUnitDefenseMultiplier(address,uint256)", "7179d079": "mainFundBalance()", "7179ed22": "autoPrice()", +"717a14ec": "signerGeneration()", "717a195a": "setOutcome(int256)", "717a945a": "USD_Omnidollar()", +"717ab112": "pID()", +"717ac538": "setDexStatus(bool)", "717b3726": "transferFromBank(address,uint256)", +"717b38f9": "startChangeEmissionRateLong(uint256)", +"717ba064": "ethicHubTeamFeeReclaimed()", +"717c01c0": "dayBlockSpan()", +"717c31e6": "sigfigsRounded(uint256,uint8)", +"717c521c": "project_funding()", +"717c8e4a": "curvecompGauge()", +"717ca2a5": "addCollateralAssets(address,address[])", "717cb858": "ZUE()", "717cee7d": "updatePeriodDuration(uint256)", +"717d0cb0": "unlockOwnership()", +"717d4a7b": "getDigGross(address)", "717d5527": "getMoney(address)", +"717d560c": "totalStones()", "717de52e": "creditCommons()", +"717df57b": "getLatestEstatusProducto(uint256)", "717e1418": "VebionX()", "717e9745": "setNewControllerAddress(address)", +"717ef65e": "cakePorBlque()", "717f24c6": "emergencyWithdraw(address,uint64)", +"717f2bc1": "updateSavingsContract(address,address)", +"717f6dfb": "withdrawCredits()", "717f6f7f": "MYCCToken(uint256)", "717fecea": "vesting2Withdrawn()", "717fedf0": "getFirstActiveDuel1()", "717ffe91": "buyTokensAsset(address,address,uint256)", +"71802cb3": "getManagerAssetCount(address)", +"7180c8ca": "setPauser(address,bool)", +"7180d26b": "l3l5users()", "7180dd8a": "_giveToken(uint256,uint256)", +"71812716": "pendingDino(uint256,address)", "718167c4": "AddValues(uint256,uint256)", +"7181b22d": "comp(uint256)", +"7181c0ff": "batchReduceAllReserves(address)", "718228fa": "totalTeamContributorIdsAllocated()", "7182774d": "exchanged()", "71827791": "nextContributorIndexToBeGivenTokens()", +"7182cf1d": "getTotalDeployedAssets()", "718350a9": "_removeMaliciousValidatorAuRa(address)", "7183616c": "notarize(string)", +"7183b834": "approve_421(address,uint256)", +"7183cfbb": "getAchor(uint256)", +"71849403": "frozenWallets(address)", +"7184bb42": "viewSalebADR()", +"7184ea8a": "fourthQuarterPerBlock()", "7185354b": "changePerEthToBlocNumber(uint256)", "7185393c": "updateAppExec(address)", "7185637b": "DailyDivsSavings()", @@ -65096,229 +119011,419 @@ "7185acb8": "viewMyComponent(uint256)", "7185f163": "stopTrading()", "71863031": "isPublicIcoActive()", +"71864fd5": "entryFeeBNB()", "71868032": "addOffChainAddresses(address[])", +"7186ed35": "dividends1token()", "71873971": "PROOF_TOKEN_WALLET()", +"71874148": "getOrdersFillable(uint256,uint256,address)", +"7187780e": "sha256_hashed_secret()", +"71881c0e": "emergencyWithdrawTamag(uint256,uint256)", +"71882795": "_wrappedTokens(uint256)", "71882ab0": "distributeContest()", +"7188a02f": "TokenTimelockRevoked(address)", +"7188b222": "getOfferIds(address)", "7188c8a4": "reFunding()", "71892e3f": "getMyKnowledge()", +"71894dba": "LogInvestEtherForDID(address,uint256)", +"7189c130": "internalDistributionLeftCounter()", +"7189c47a": "LetonToken()", +"7189f508": "edcUser(address)", +"718a3766": "WYFI()", +"718a4bca": "addCourse(uint256)", "718aa629": "NEX()", "718b0a32": "withdrawBuyDemand(uint256)", "718bd6dd": "setRequestUntil(uint8)", "718c025a": "ethPreAmount()", "718c6569": "TimeSecondToken(uint256,string,string)", +"718c7fc3": "gameDecision(uint256,bool)", +"718c8f2f": "getPropsals()", "718cc769": "makeBet(uint256)", +"718ccce9": "lockedAccount(address)", "718d763a": "playerCost()", "718da639": "addNewSecretHash(bytes32)", "718da7ee": "setReceiver(address)", +"718dceb9": "ONEDAY()", "718df9d7": "getPlayerSpaceshipUpgradesById(uint256)", "718dfb7e": "hasPreICOClosed()", +"718e30ef": "Trade_1155dvi(string,uint256,uint256)", "718e6302": "play(string)", +"718e6520": "ViewStake_Bonus_Interval()", "718e6c44": "isManageable(address)", "718eaa50": "setLayerParent(address)", "718ec079": "setMarketCreationCost(uint256)", "718f81c2": "getCCH_edit_11()", +"719017c5": "ethJoin()", "71906087": "airdropToAdresses(address[],uint256)", +"719068bf": "forceSwapTokens()", +"71907f17": "access()", +"71909d32": "useInviteCode(bytes4)", "719102d7": "createItem(uint256,uint256,uint256,uint32)", "7191474b": "pendingUFT()", +"719175d5": "phase5time()", +"71919288": "borrowTotalAmount()", "71929547": "OceanScapeCoinAdv(uint256,string,string)", +"7192cb55": "updateRefunding()", +"71938509": "execs(address[],bytes32[],bytes[])", "7193ab70": "balanceUnlocked(address,address)", "7193b1e4": "refundCfd(uint128)", "7193f2f0": "supported(bytes32)", +"71951058": "genesisEndTimestampLocked()", "719591c7": "requestComputation(string,string,uint256,uint256)", +"71959bb6": "proposeWinner(uint256)", +"7195bf23": "releaseDelay()", "7195d944": "dataOfPart(uint256,uint256,uint256)", +"7195e124": "fetchAuction(uint256)", "7195eed2": "EtalonGlobalToken()", +"7196a769": "auctionlistend(uint256)", "71974cbe": "lastBidBlock()", "7197c6d2": "firstTTax()", +"719830fb": "Subscribed(bytes32,uint8,address)", +"71986eae": "totalSupplyIncrease(uint256)", "719874da": "profitFromCrash()", "7198801d": "getWorkTime(uint256,uint256)", +"7198d065": "recoverERC20Amount(address,uint256,address)", "7198e08c": "createLoveBlock(string,bool)", +"7198f21f": "_rewardEarnedPerSecond(address)", "7199139f": "TheAbyssDAICO(address,address,address,address,address,address,address,address,address,address,address,address)", +"71995e0b": "pushAddress(bytes)", +"7199efde": "migrateGovernance(address)", "7199f6d4": "safedrawal(uint256)", "719a0f8c": "removeOfficer(address)", +"719ab952": "setstakingID(string)", +"719aba6d": "getRequestInfo(uint256,uint256)", "719b2e07": "setDisputeRoundDurationInSeconds(uint256)", +"719c6d56": "getPrice(bytes32,uint256,bytes)", "719c78ac": "setCodedate(uint256)", "719c86e3": "team_lock_count()", +"719ca564": "AccountBurning()", "719ce353": "Brokenwood()", +"719ce681": "newStakingCoins()", "719ce73e": "prizePool()", +"719e819a": "VALID_EXPIRATION_TIMESTAMPS(uint256)", +"719f07ac": "Transferred(address,address,uint256,uint256,uint256)", +"719f0cc7": "plan_completed_p2()", "719f2fb7": "_calTeamAttribute(uint8,uint8,uint8,uint32[11])", "719f3089": "getLocks(address)", +"719f701b": "releaseStartBlock()", "719f8d3a": "checkIfWhiteListed(address)", "71a009ad": "BRLTOKEN()", +"71a0232d": "setCallPrice(uint256,uint256,bool)", "71a03078": "TMCToken(uint256,string,string)", "71a04009": "newIssuer()", +"71a08d26": "ApproveBurnDelegate(address)", +"71a0a016": "SCHEME_COUNT()", +"71a0a68c": "retrieveAllBackups()", +"71a0ddfc": "getBalanceOfLocked(address)", "71a18bfb": "emergencyDrain(address)", +"71a1e274": "isOwnerForAddress(address)", +"71a20071": "getETHSpentSinceClaim(address)", "71a2e46d": "OWN_transferOwnership(address)", "71a2f964": "newPaymentAddress(address)", "71a4dc5e": "getLuckyblockEarn(bytes32)", "71a5367f": "setAllowPaymentsWhenPaused(bool)", "71a66e7c": "addOrUpdateHolder(address)", "71a67aa9": "getFunctionAuthorizationHash(address,address,string,bytes32)", +"71a6cf8a": "setNftParams(uint256,uint256,uint256)", "71a7462e": "balance_(address,address)", +"71a7523c": "setChangeMulAtBlock(uint256[])", "71a7c439": "distribute21ST(address[],uint256)", "71a80ba3": "setBurnFeeReceiver(address,address)", "71a8270a": "buyObizcoinTokens(address)", +"71a87ede": "usersActiveX_Levels(address,uint8)", +"71a8a6e6": "_StakeSlots(address,uint256)", "71a8ba25": "getEtherBoxes(address)", +"71a917b4": "getAllocatedRewards()", +"71a97305": "assets()", "71aa60fd": "calculateTokens(uint256)", +"71aaa27b": "hlWeapon()", +"71aac7f9": "endCampaign()", +"71aad10d": "toString(bytes)", "71aad2dd": "preICOamountBonusLimits(uint256)", "71ab0e3c": "sellDai(uint256,uint256,uint256,uint256)", +"71ab43ce": "getAuctionByAuctionId(address,uint256)", +"71ab7e67": "adminCancelList(uint256,address)", "71ac5c60": "WeToken(address,string,string,uint256,uint256)", +"71ad0700": "callDapp2(address,uint256,bool)", "71ad3e73": "isMakePermitted(uint256,uint256,address,address,uint256,uint256)", +"71ad9634": "vestingNonces(address)", "71ada3fb": "getCash(uint256,address)", "71ae8f02": "fundingMinimumTargetInWei()", "71ae973e": "createGen0Auction(string,string)", +"71ae9ac9": "depositDate(uint256)", "71aeae44": "hasBallotEnded(uint32)", "71aed703": "addCandidateCache(address[],bytes32[])", +"71af5099": "incr(uint8)", "71af5d0e": "setFailedVerificationSlashAmount(uint256)", "71af8630": "_suicide()", +"71af9475": "jackpot3()", "71afc713": "marketingTokenAmount()", +"71b04a3f": "hasTicker(string)", +"71b0cbfa": "startStaking()", +"71b15013": "blockFreezeSeconds()", "71b1d2d3": "RANGEEND_PRESALE()", +"71b1fd52": "getDecreaseDifficultyConstant()", "71b22e61": "EnableRefund()", "71b2354d": "MINC()", +"71b23889": "Pynthetix_escrow()", +"71b2b498": "estimateOut(address,address,uint256)", "71b3659e": "currentTokenPrice()", "71b397cf": "getCurrentRoundIsFinished()", +"71b3abe7": "setSurplusAuctionAmount(address,uint256)", "71b3e7f4": "payOffLoan(address)", +"71b4133c": "updateDarknodePayment(address)", "71b45696": "StcToken()", "71b475d0": "STQPreICO3(address,address)", +"71b47ec8": "totalAlloyBurned()", +"71b4ef0b": "_accrue(bool)", "71b4f4ef": "setDEXContractAddress(address)", "71b505ad": "setLargeCapWhitelistParticipant(address,uint256)", +"71b5da11": "allowTransaction(address,address,uint256)", "71b5ee71": "allowTokenTransfer()", "71b6663e": "play1(address,uint256)", "71b6a376": "setNumberOfPlayers(uint256)", "71b6d36d": "isNotaio(address)", "71b6d6ea": "getAttributeTimestamp(address,bytes32)", +"71b794e5": "bao()", +"71b7aaf6": "killingGap_()", "71b7d5c4": "priceUpdateWaitingTime()", +"71b7db53": "voteTiming()", "71b804ee": "getBettingPrice()", "71b80b8f": "upgradeCardConfig(address)", +"71b83f26": "Multisended()", +"71b8db54": "renounceFrozener(address)", +"71b8fb01": "terminate_contract()", +"71b9076a": "cachedWalletsCount()", +"71b92bb6": "perDayBonus()", +"71b93145": "removeReward(address,address,address[],uint256[])", +"71b942c2": "providerRewards(address,address,address)", "71b9b646": "saleEnabled()", "71ba3612": "Plasma()", +"71ba6882": "pendingGfc(uint256,address)", +"71ba8a32": "puts(uint256)", "71bad4d8": "jackpotMinimumAmount()", "71bb263d": "contractPartThree(uint256)", "71bb3cc8": "GivethCampaign(uint256,uint256,uint256,address,address)", +"71bb4341": "farmRateTeam()", +"71bb61f3": "reward(uint256,address)", "71bbefc7": "payPlatformOutgoingTransactionCommission()", +"71bc50a4": "setBfclEuroRateFor72h(uint256)", +"71bc6a83": "buyCoupons(uint256,uint256)", "71bc9d62": "_generateDetail(uint256)", "71bd1f47": "MinCapReached(uint256)", "71bdb914": "softCapLimit()", "71bdbc9a": "SetCityData(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"71bdd492": "totalRoseRewards(uint256)", "71bde852": "_startNextCompetition(string,uint32,uint88,uint8,uint8,uint16,uint64,uint32,bytes32,uint32[])", "71be0c27": "preSale5()", "71be1851": "ShopDeployed(address,uint256,uint256,uint32)", +"71be2e4a": "eventCount()", +"71be844e": "approve_456(address,uint256)", "71be8766": "Contribution(address,address,uint256)", "71beae97": "currentCoinsCreatedPercentage()", +"71bf0977": "PreIcoClosed(string,address)", "71bf35b6": "minMinutesPeriods()", "71bf439e": "CANVAS_WIDTH()", "71bf5a95": "setENS(address)", +"71bf644e": "tokenToIndex(uint256)", "71bfa03f": "getRedemptionBlockNumber()", "71bfabca": "resultOf(uint256)", "71bfd48b": "content(string,uint256,string,string,uint256)", +"71c00d65": "approve_843(address,uint256)", "71c02b7b": "BSAFE()", "71c03d76": "get_rest(uint256)", +"71c1019f": "OnFreeze(uint32)", "71c10778": "weiToPresalersFromICO()", +"71c10ec2": "totalIssue()", "71c147fb": "addAccount(string,uint256,string,string,uint256)", "71c157d1": "addInsuranceProduct(uint256,string)", +"71c1c549": "getAddressResolver()", "71c1d196": "numContributors(uint256)", "71c1dde5": "get_presale_arbits_per_ether()", "71c24e37": "narrowRoundPrize(uint256)", "71c2835e": "operater()", +"71c2c2a4": "CREATE_ALLOCATION_ROLE()", +"71c343b3": "updateMPONDTokenId(bytes32)", +"71c34f44": "shouldRebalance(address)", "71c396cc": "migrationAddress()", "71c4275a": "setWeight(bytes32,uint256)", +"71c46585": "bAssetToPToken(address)", "71c4980b": "getBlanace()", "71c57772": "eucDist2D(uint256,uint256,uint256,uint256)", "71c58b25": "internalTransfer(uint256,uint256,uint256)", "71c59097": "MainnetSurvey(uint256,string,bytes32[])", +"71c59274": "externalBuyToken(address,uint8,uint256,uint256)", +"71c599d7": "dealer_commit(uint8,uint256)", +"71c5ecb1": "merkleRoots(uint256)", +"71c64b3a": "getBatchTransfer(address)", "71c66459": "LogPaymentReceived(address,uint256)", +"71c6a34f": "isCampaignValidated(address)", +"71c6b7d7": "transfer(address,address,address[],uint256,uint256)", "71c6d4dc": "pearlContract()", "71c6dc50": "ProofOfCraigGrant()", "71c6e049": "addUsers(address,uint256)", "71c78ce7": "totalAirDropped()", "71c79588": "releaseName(bytes32)", +"71c7bfbd": "add_or_edit_student(uint256,string,string,string)", "71c7e923": "dDisableErc20OwnerClaim(bytes32)", +"71c7fad2": "revokeBulk(bytes32[])", "71c80c67": "COOPET(uint256,string,uint8,string)", +"71c813e2": "moneyBack(uint256)", "71c82c14": "setOraclizeGasPrice(uint256)", "71c847b2": "detailsOfEdition(uint256)", "71c85da2": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"71c8b3ac": "__report(uint256,bytes32)", +"71c8dbcd": "sp(uint256)", "71c8e333": "getSundownGraceTargetBlock()", "71c93fc7": "processDiceRoll(address,uint8)", "71c95040": "EFF(address)", "71c9572b": "maxBidInCentsPerAddress()", "71c9a754": "topiToken()", "71c9e177": "SpudToDivs(uint256)", +"71c9f31c": "inc2()", "71ca2117": "isAuditorRegistered(address)", +"71ca2ecf": "assignment()", "71ca337d": "ratio()", +"71ca4ea5": "getEstimatedDAForEth(uint256)", +"71ca543b": "disables(address[])", "71cabfb8": "getYumerium(uint256,address)", "71cacc9e": "addLotteryPrize(uint256,string,uint256,uint256)", "71cb9769": "addIdentity(bytes32,bytes32)", "71cbb22a": "fixed_value()", "71cbef8a": "sendTokensAfterCrowdsale(uint256,uint256)", +"71cbf381": "makeCheckpoint(address[],uint256[],uint256,bytes32)", +"71cbfdca": "safuFee()", +"71cc09a9": "updateTokenConfigFixedUsd(address,bool)", +"71cc29e5": "stakeWithPermit(uint256,bytes)", "71cc4f35": "Alecrypto()", "71cc805a": "refund(string,address)", "71cce314": "Kolak()", +"71cd3f47": "tokenSendFailures(uint256)", +"71cdfd68": "transferWithinContract(address,uint256)", +"71ce0b25": "NewTokenPriceUSD(uint256)", "71ce52ed": "senderIsAdvocate(address,address)", "71ce9a4a": "forwardCallGas()", +"71cea463": "StoryUpdate(string,string)", "71cea5ae": "transferAccessOff(address)", "71ced69d": "mintNewDNC(address,uint256)", +"71cf15f2": "processExternalMain(uint256,uint8,address,uint32,uint32,uint32,uint256,bool)", "71cf586f": "CanISuscribeTrial(uint256)", "71cf5979": "market_AcceptBid(uint256,uint256)", "71cf866e": "_redeemIsAllowed(uint256)", +"71d007cd": "idToAddressIndex(uint256)", +"71d02b38": "hashOrder_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes)", "71d06675": "getInteres(address)", +"71d08801": "buyTyphoon()", "71d0cf01": "setCustomerSignature(address,uint256,bytes)", "71d0ed05": "betsKeys(uint256)", "71d141f9": "doOraclize(bool)", +"71d17629": "transferResolver(address)", "71d1995e": "changeEmployee1(address)", +"71d1ae75": "addRevenue()", +"71d1e04d": "pct256(uint256,uint256)", +"71d21ce1": "isGameCoin()", +"71d22d4d": "cancelSubscription(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"71d27144": "externalWallet()", "71d30a17": "Match(address,address,bytes32,bytes32,uint256,uint256)", "71d31a13": "withdrawTokens5(uint256)", +"71d3b523": "_setEcosystemFee(uint256)", "71d3de1b": "setStates(uint256,uint256,uint256,uint256)", "71d3de2b": "JincorToken()", +"71d3f37a": "password(string)", +"71d424a3": "testFail_add()", "71d49910": "_emitAreaSet(uint256,bytes32)", "71d4aa3a": "fomo3D4eva()", +"71d4b3e8": "getHatcheryIncubation(uint256)", "71d4edaf": "setSaleLot4StartTime(uint256)", "71d50cc8": "payBets(bytes32)", "71d5af66": "Upfinex()", "71d5afb5": "extendCrowdsale(uint256)", "71d5b5dd": "getBonusPoolTotal()", "71d5d1c2": "updatePrincipal(uint256,uint256,bool)", +"71d5f7c5": "initialize(bool,uint256)", "71d5ffbe": "totalETHWagered()", +"71d66f00": "lockReason(address,uint256)", +"71d68ce8": "bondIsRedeemable(uint256,uint256)", +"71d69683": "setLpPool(address)", "71d6dbe1": "isClaimSegmentVerified(uint256,uint256,uint256)", "71d6e229": "queryRole()", +"71d753fb": "noOfPool()", "71d76096": "ICOcollected()", +"71d78b12": "NOT_OWNER()", "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)", +"71d946b4": "withdrawDeposits(uint256)", +"71d9e0df": "targetForEpoch(uint256)", +"71d9e19e": "history(uint256,uint256)", "71d9ffce": "priceChange()", "71da0e63": "_getValidRandomGenes()", "71daca00": "grantBackerToken()", +"71db310e": "ROLE_MODIFY_CANDIDATE_SUPPORT()", +"71db5869": "_rewardLiquidityProvidersETH(uint256)", +"71db9765": "onRoundUpdate(uint256,uint256,uint256,uint256,uint256)", +"71dbf3c7": "BallotCreated(string,uint256,address,bytes32[],uint256)", +"71dc08ce": "msgTokenValueAndTokenIdTest()", +"71dc760f": "getModuleAddress(string)", "71dc761e": "enableERC721()", +"71dc7fe0": "approve_673(address,uint256)", +"71dced38": "unFreezeAccount(address,uint256)", "71dd46a9": "left19(uint256)", +"71dd626b": "testA()", "71dd8862": "IndexOf()", +"71dd8f85": "distributeInflationaryRewards(uint256)", "71dd99fe": "BigRisk()", "71ddd3ad": "multifunctioncoin()", +"71dde6c6": "ETHtoContract()", "71de2ffc": "claimRefund(bytes32)", "71de6362": "certificateSigners(address)", +"71de98ab": "testMethodWithInputsWithOutputs(uint256)", "71df8d09": "bigInt(uint256)", +"71dfb281": "_onlyOwner()", "71dfc116": "Cryptolotto10Minutes(address,address,address,address)", "71e030d3": "TokensTransferedToHold(address,uint256)", +"71e03d9e": "setUnlockGasCost(uint256)", "71e07813": "issueDevsTokens()", +"71e10392": "makeSandwich(string,string)", "71e11354": "updateRegistration(string,string)", "71e12726": "getBlockStats()", +"71e14295": "bountyReduction()", "71e1fa95": "getHtlcTimeoutBlock(bytes32,bytes32)", "71e28126": "canFinalize()", "71e2a657": "addMinters(address[])", "71e2d919": "lol()", +"71e2f020": "userRate()", "71e30719": "ZEC()", "71e365a0": "AICQ()", +"71e36753": "updateBurnFee(uint256)", +"71e395a8": "HEGIC()", "71e3c76e": "claimGrant(bytes32)", "71e3c819": "DSToken(string)", "71e3fdc4": "moveMintTokens(address,address,uint256)", "71e4cfd7": "ROF()", +"71e4eaac": "setNewOrder(uint8)", +"71e4f413": "_twos_complement_16(int16)", +"71e52505": "openWhitelistMode()", +"71e578dc": "mintFor(address)", "71e5b9ec": "scanAddresses(address)", +"71e5e9fa": "topTrader(address)", "71e5ee5f": "arr(uint256)", "71e60fe6": "testFailTransferEnableNotTransferable()", "71e68cad": "claimUsername(bytes32)", +"71e6a9a4": "test_mint(uint128)", "71e70133": "TotalTokens()", +"71e71900": "approve_502(address,uint256)", +"71e724c1": "registerIdentityKey(bytes32,address,bytes)", +"71e75992": "MAX_SAFE_UINT256()", "71e777ae": "getMemBestInvestor()", +"71e780f3": "totalEscrowedBalance()", +"71e7a802": "currentBaseRate()", +"71e8560d": "getCumulativeSequencedGas()", +"71e87c3f": "availableMin()", "71e928af": "issue(address)", +"71e9a47e": "_getExchangeRates(bool)", "71e9f016": "CompetitionChainContract(uint256,string,string)", "71ea29df": "blockedContract()", "71ea3aad": "CollectERC20(address,uint256)", @@ -65327,58 +119432,106 @@ "71ea980c": "rewardPoolWallet()", "71eb125e": "oracleAddresses(address)", "71eb9710": "getDebitDigest(bytes32,uint256,uint64)", +"71ec0565": "getTootalLocked()", "71ec4cc1": "depositPayout(uint256,uint256)", +"71ec859e": "getBasePercent()", "71ec98dd": "issueTokensFromOtherCurrency(address,uint256)", "71ed4664": "refundTo(address)", +"71ed5d1a": "unstake(bytes32)", +"71ed8c79": "amountToEther(uint256,uint8)", "71edfe35": "hashOfTheDocument()", "71ee2ce1": "getResponses(uint256)", "71ee329f": "useCaptainAbility(uint256)", +"71ee3525": "cYYcrvAddress()", +"71ee46eb": "savingAssetOrignalAmount()", +"71ee5ca9": "changeMaxBurn(uint256)", "71ee872f": "TransactionSettledByMediator(uint256,uint256,uint256,uint256,uint256)", +"71eebf04": "test11(address,uint256)", "71eedb88": "refund(uint256,bytes32)", "71eee1f4": "IssueStateLoaded(bytes32,string)", "71ef0d0f": "phxCoin()", "71ef7862": "seventhTime()", +"71ef8592": "a(bytes32,uint8,bytes32,bytes32)", "71efb7f7": "SimpleSafeToken(uint256,uint8,string,string)", "71efdc21": "usedTickets(uint256)", "71efeff1": "transferCommunityBank(uint256,address)", +"71f01452": "queryCreateValidatorRequireDPOAmount()", "71f027fa": "updateOwnerOfWeapon(uint256,address)", "71f098c8": "LecBatchTransfer()", "71f0ad64": "TestCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"71f10f18": "approve_139(address,uint256)", "71f11552": "changeDNNHoldingMultisig(address)", "71f124c5": "getDropsOf(address)", +"71f1531c": "timelockActivated()", "71f16739": "_createContract(address,uint64)", +"71f1a564": "LogPriceUpdated(string)", +"71f22ec9": "lastIncreaseTime()", +"71f27e22": "authorizedContractIds(address)", "71f297cc": "XaurumToken(address)", +"71f29a66": "RaiseCap(uint256)", +"71f3c1b7": "applyFundingRate()", +"71f3feb1": "setNyanV2LP(address)", +"71f4686a": "requestedBy(uint256)", +"71f49cb2": "computePayoffForEvent(bytes32,bytes32)", "71f4c9ae": "GameClosed(uint256)", +"71f4d38c": "cancelBid(uint256,address,uint256)", +"71f4d91d": "setPurchasePercent(uint256)", "71f4f65e": "yearlyOwnerTokenWithdrawal()", +"71f508b5": "batchRepay(address[],uint256[],uint256[],address[])", "71f52bf3": "connectorTokenCount()", "71f5584f": "sponsoredLeaderboardDataContract()", +"71f58e8b": "setIsExitingPeriod(bool)", +"71f5afde": "getAuctionLobbyParticipateCycleEarned(address,uint256)", +"71f5fa2f": "customerDepositsLen(address)", +"71f61bfa": "setPatientDetails(bool,address,string,string[])", +"71f61cae": "incvWithdrawn(address)", +"71f631da": "contractShares()", "71f64a68": "executeTopic()", "71f6ec3c": "get_car_propse(uint256)", "71f6fb88": "transferWithReservingNet(address,uint256)", "71f7aaca": "dragonIndexToApproved(uint256)", "71f7ebf4": "_doTrade(address,address,uint256,uint256)", "71f805bf": "numFpBits()", +"71f83e15": "borrowerFee()", "71f84164": "_sendTo(address,uint256)", "71f8746f": "registerBuy()", +"71f8b3a7": "createNFTMould(string,string,string,string,address,string,string,uint256,string,string,string,address[],uint256[])", +"71f8d58a": "FreezeEthHxyLP(uint256)", +"71f8eb61": "packsSold(uint256)", "71f90109": "hideDonations(address)", "71f90fe6": "initializeABIHashForMod(uint256,bytes)", +"71f9100c": "getQuoteInput()", "71f96211": "assetOf(address)", "71f9b7f3": "addMultipleAddressesToPublicBuyerList(address[])", +"71f9de52": "investorsDepositedBNB(address)", "71f9ff89": "preICOcap()", "71fa632f": "newVoterAllocation()", +"71fa6b84": "currentTellor()", "71fa7f37": "createNewProject(uint256,uint256,address)", +"71fb5fc9": "setMaxFundingRateDelta(uint256)", +"71fb7cf1": "proposeFund(address,uint256,string)", +"71fc147d": "checkClaimParamsERC721(uint256,address,uint256,uint256,address,bytes,address,bytes,uint256)", "71fcc672": "setCryptaurRewards(address)", +"71fd94b7": "toRad(uint256)", "71fdd6d3": "_canBreedWithViaAuction(uint256,uint256)", "71feaac5": "greatgreatcoinERC20Token()", "71ff01b0": "maxSupplyReached()", "71ffcb16": "changeFeeAccount(address)", "72004a65": "getPremiumStatus(bytes32)", +"7200e261": "MerkleTreeMaximalLeafCount()", +"72012a0b": "localContracts(address)", "72012ef6": "test_oneInvalidEqString2()", +"720140f7": "reimburseForSubtask(address,address,uint256,bytes32,uint8,bytes32,bytes32,uint256)", +"72015efc": "releaseLiquidity()", "72016f75": "getNodeLength()", +"7201eb13": "_rebasingPriceLastBlock()", "7202997e": "LogAccepted(uint256)", "72030d03": "addresses2(uint256)", +"7204c703": "mainsaleEndTime()", "72052773": "deleteChallenge(bytes32)", "72054df4": "compatible223ex()", +"72066b1b": "ActiveTimes(uint256[],uint256[])", +"72066df3": "bridgeAddresses(address)", "72067d49": "getBountyBalance()", "72076c57": "ColorBayToken()", "72078e3b": "CORNERSTONEAMOUNT()", @@ -65386,136 +119539,248 @@ "7207d711": "RewardHalved()", "7207f9ce": "transactionFeeMax()", "7208b8f7": "setSkills(uint256,uint32,uint32,uint32,uint32,uint32)", +"7208c310": "offeredToken()", "7209036a": "fundReservCompany()", +"720ac67c": "nextRPunkIndexToAssign()", "720b43e8": "intercrypto_cancelConversion(uint256)", "720b7ee4": "getCardId(string)", "720be6c7": "CrapToken1A()", "720c142d": "setRNGCallbackGasPrice(uint256)", "720c4798": "workshop()", "720c5732": "TextMessage()", +"720d1760": "goals(bytes32)", +"720d5b90": "fightersToBattle(uint256,uint256)", +"720db6ed": "getCallData(bytes)", +"720dc00c": "callStarted()", +"720dd1c8": "ViewDLRequestLength(address)", "720de551": "deleteVoterForCandidate(uint256)", "720e2a06": "GadielToken()", +"720e3a5b": "newWallet1()", "720ed642": "getModuleById(uint256)", "720edd13": "theanswer()", +"720ee067": "settlementAdmin()", "720ee37c": "decrementBalance(address,uint256)", +"720f7dd8": "sponsorToComisionFromInversor(address)", +"720ffedb": "setConfig(uint8,uint8,uint8,uint32,uint8,uint16,uint8,uint8)", "72104205": "rewardMint(address,uint256)", "72108714": "updateHash(bytes32,bytes32,uint256)", "7211138c": "FreedomCoin()", "72112286": "closeChannel(address,uint256,uint256,bytes32,bytes32,bytes1)", "72112ebc": "set_Total(uint256)", +"72116e92": "addProject(string,string,address,uint64,uint64,address)", "72117821": "GetTokenAddress(address)", +"72117cf4": "getAddressLockedLength(address)", +"7211bbc9": "getPendingReward(uint256)", +"7211dbf1": "LogPurchaseLicense(address,uint256,uint256,bytes32)", "72121dac": "FooToken()", +"72125420": "SignatureWalletErrorSelector()", +"721263f5": "changeTeamContract(address,uint256)", "7212b67e": "add_potion(uint16)", "7212eadd": "trigger_game_end(uint256)", "7213cff1": "hasLockedUp(address)", "7213e335": "guthabenAnzeigen(address)", "72142c67": "MSECStandardToken(uint256,string,uint8,string)", +"72144fdd": "maxAmountPer(uint256)", +"72148ae8": "strAdd()", "7214d6c3": "isUIntPublic()", +"72151fa5": "unlock_liquidityReserve(address)", "721547eb": "maintainExternalContractTokenBalance(address,uint256)", "7215513f": "addTokenClaim(uint256,uint256,uint256)", +"72157356": "iskraToken()", "72159335": "voteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", "7215b96d": "CheckAllowance(address)", +"72162cb6": "_feeDistributor()", +"72162fe6": "setNewStakeAddress(address)", +"72163715": "liquidityLimit()", +"72166b6b": "getAddressFromId(uint256)", +"721678e2": "lockupActive()", +"7216a461": "Freezed(uint256,uint256)", "7216ab38": "getByteFromBytes14(bytes14,uint256,bytes1)", "7216b95c": "checkLicense(bytes32,uint8,bytes32,bytes32)", "7216e02d": "getOracleByName(string)", "7216ee00": "totalTrainer()", "7217523c": "addDays(uint256,uint256)", +"7217e0b9": "steps(uint256)", "721868f8": "queryTinyOracle(bytes)", +"7218744b": "clearUnremovableValidator()", "72198ead": "setDSTMultiSig(address)", "7219d7f7": "OrigamiTokenPurchase(address,uint256,uint256,uint256,uint256)", "7219dd7f": "allocateTokenETHConvert(address,uint256)", "7219fa11": "EIP20(uint256,string,string)", +"721a033f": "claimLiquidBalancePercent()", "721a1f57": "endorseCredit(address,uint256,uint256)", "721a37d2": "revokeTokens(address,uint256)", +"721b00c5": "NewTokenGrant(address,address,uint256,uint256,uint256,uint256)", +"721b01fe": "MemberUpdated(address,uint256)", "721b67ab": "CNYTokenPlus()", +"721bb170": "trustedDisputeWindowTransfer(address,address,uint256)", "721bba59": "getTokenBasicData(address)", +"721bc7f6": "govCount()", +"721c3710": "Contribution(address,uint256,uint8,uint32)", "721c555e": "queryEscrow(address,address)", "721d7d8e": "currentContract()", "721dd850": "getOwnedAvatars()", "721e117b": "getPurchaseRequirements(uint8)", "721e9969": "getPressCount()", +"721eb9c5": "migratorApprovedForStaker(address,address)", "721ed9ec": "tokensICO()", +"721f2092": "lockedTransferAmount(address)", "721fa630": "pubs(uint256)", "721fefac": "startNewDraw(uint256)", "721ff138": "tokenMintCap()", +"721ffd1c": "swap2(address,uint256,address)", "7220426f": "verifyTokens(uint64,uint64)", +"72205875": "get_owner(uint256)", +"7220c1cf": "reserveService(uint256)", +"7220fbc1": "createObjects()", "7221a26a": "storeValue(uint256)", "7221c3c0": "withdrawJackpotBalance(uint256)", +"7221f7a2": "CappedPricePosted(address,uint256,uint256,uint256)", +"72223c6c": "govSetBurnForAddress(address,uint256,uint256)", +"722264fd": "regDoc(address,string)", "72229abf": "setBetFee(uint256)", "7222e9e3": "sampleToken()", +"7222f335": "farmPerformanceFeeStrategist()", "7222fe1e": "MNY()", "72237d97": "setTargetDiscountValue10(uint256)", "72239313": "addAccountMinter(address)", +"72239db0": "newTap(address)", +"7223b902": "streamRewardTimeleft(address)", "7223cd19": "set(address,int256,uint256)", "7224267c": "addDeposit(address,uint256,uint256,uint256)", +"72243d9c": "smartpot_two(uint256)", +"7224bb92": "chainBalances(uint256)", +"7224f1d0": "whitelistId(uint256)", +"72252619": "contractBiLinkExchange()", +"72255bec": "GOD_TIMER_START()", "72258f96": "allergy(string)", "72259875": "addCourse(string,uint256,uint256,uint256,string,string)", +"7226060a": "setInteger(int256)", "72262699": "forwardOnBehalf(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", "7226d055": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "722713f7": "balanceOf()", +"72279966": "pushDivs()", "7227bff2": "setTransferOwnership(address,address)", "7227c5dd": "fundMark(uint256)", "7227c7ce": "hashNext()", "7228057f": "ibcFunded()", "7228b9db": "etherCap()", "7228becb": "crowdsaleDuration()", +"7228c9c1": "bft()", +"7228cd7d": "ethEarnCalc(uint256,uint256)", +"7228cdee": "test(uint8,uint16)", +"7229063f": "picksForUser(address,uint256)", "72298b82": "setEndTime(uint32)", +"7229c0d6": "studentInfo()", +"722ad878": "Top3_Doi()", +"722b11b3": "approve_319(address,uint256)", "722bb4a8": "getSuperManagerContractAddress()", "722bd85a": "bonusForDate(uint256)", +"722befe8": "reward_pooladdr()", +"722c314e": "getTotalAmountClaimed(address)", "722c885a": "endSeedStage()", "722d1267": "forceWithdrawTokensToAnAddress(address)", "722d1d13": "setProductCompletionDate()", "722ded24": "exeSequence(uint256,uint256[])", "722e1677": "getTotalPublicKeysCount(address)", +"722e38bf": "_fallbackSetDate()", "722e9c6d": "Luck()", "722f0835": "startPrivatePreICO()", +"722f973c": "join(string,uint256,string)", +"722fda7e": "setComissionList(address,address)", "722fe823": "getActionHistoryItem(uint256)", "72309714": "setPresellOpen(bool)", "7230bce8": "add(uint256,string)", "7230eb42": "AllocatedCrowdsaleMixin(address)", "7230ef7f": "totalGen0()", +"72311705": "managers()", "72317e7b": "totalWeiRaisedDuringICO1()", "7231a876": "itemsOf(address)", "7231af39": "getTotalGamesStarted()", "72325c5b": "initSiriusFund()", +"7232c91f": "scammerInChief()", +"7232e699": "isValidBot(address)", "72337396": "unholdFunds()", +"72339125": "onTokenSell(address,uint256,uint256,uint256)", +"7233947e": "removeLiquidityTokenOnly(address,uint256)", +"7233a632": "capz(uint256)", "7233d860": "BitcoinRich()", +"72345a55": "derives(address,uint256)", "7234ba0c": "MIN_CROWDSALE_TIME()", +"7235b154": "batchConfirmPayments(uint256[])", "7235c8dd": "PeerReview(address,bytes)", "7235d2b1": "maintenanceMode(bool)", +"723693fb": "freeze(uint32,uint8,uint256)", +"7236dc63": "getReferralReward(address,bool)", "7236f851": "exchangeByAdmin(uint256,address)", +"7237057b": "ContaLeiloeiro()", "72378554": "sendToken(uint256,address)", +"72379f60": "isSyndicate()", +"7237dc0b": "cancelQuery(uint256)", "7237e031": "tokenToEthTransferInput(uint256,uint256,uint256,address)", "72388610": "paybackAll()", "72388f7c": "mintSpecificCards(address,uint8,uint256[])", +"7238c915": "dustToken()", "7238ccdb": "getLockInfo(address)", +"72392890": "SUPER_BEE_INDEX()", +"72393f74": "submitVote(bytes32[],bool)", "72397287": "createOfAthleteCard(string,string)", +"7239d2b9": "transmuter()", +"723b075f": "positiverebase(uint256,uint256)", "723b2b58": "getMemberListCount()", +"723c2e2d": "DGAS()", "723c308f": "ahs()", "723c37f7": "TokensTransferrable()", +"723c6edd": "feesInEth()", +"723ca616": "relayerValidStorageId()", +"723cc507": "userHasBonus(address)", +"723cf177": "transferLogs(address)", +"723d6d3c": "mintAndBurn(address,address,address,uint256)", +"723e27ff": "setRate()", "723e357a": "pushRound(uint256,uint256,uint256,uint256,bool)", "723e435f": "setTokenRateInGwei(uint256)", "723eb2cc": "hurmint(address,uint256)", +"723ee2c4": "dollarPriceCeiling()", "723f291d": "cancelOpenBids(bytes32)", +"723f6226": "unlockableTimestamp(address)", "723fdfe5": "PaoTestToken()", "724020be": "GSCT()", "72405ab0": "approve(uint256,string)", +"724091e0": "convertFrom(address,uint256)", "7240976c": "trades(address,address)", "7240eccf": "approveLess(address,uint256)", "7240f67b": "countActiveType(uint256)", "72411849": "ChangeTankSellMaster(address)", +"72411aa4": "investTokenUsdtNum(uint256)", "724121ae": "contentExists(uint256)", "72413a3b": "VOLUME_BONUS()", "72414501": "SMILO_FOUNDERS_AMOUNT()", "7241450c": "deliver(address,uint256,string)", +"7241780a": "reclaimExpiredSwap()", +"7241800e": "aperouter()", +"7241c8d3": "setCheckpointValues()", +"7241e0a1": "reclaimERC20(address,address)", "7241eb8c": "_bpto(uint256,uint256,uint256,uint256,address)", +"7241f5ff": "liftGlobalLock()", "72422024": "lockMoneyOnCompoundCreation(address,uint256)", +"72423c17": "increaseTroveColl(address,uint256)", +"72425d9d": "getCurrentBlockDifficulty()", "72432965": "AdvisorsAddress()", +"72437abc": "fetchEdgexPrice()", +"7243bc2c": "synthSuspension(bytes32)", "7243cfbb": "releasableAmount(address,address)", "72440c31": "finalizeEndTime()", +"7244709f": "ChangeContractName(string,string)", +"72450e8e": "__getRegistry()", "72453422": "directSellSupply()", +"72454e58": "setEntryCost()", +"72456978": "allowCallers(address)", +"7245d367": "freezeSendState(address)", "7245f6e7": "stageEnd(uint256)", "72460869": "test_threeFalseAssert()", +"72461aa3": "distributeCycleAward()", +"72463d30": "setRefPerc(uint256)", +"724658c1": "f(address,uint256)", "72468368": "setBlockTargetDelay(uint256)", "724693ce": "TokenSale(uint256,uint256,address,uint256)", "7246de3d": "sanityCheck()", @@ -65525,202 +119790,402 @@ "7247959a": "referral(address)", "7247a50d": "virtualInvest(address,uint256)", "7247aafd": "Callous()", +"72483078": "boxPlayers(uint256,uint256)", "72490c69": "GREENECO()", "7249733c": "businessPercentage()", "7249fbb6": "refund(bytes32)", +"724a2824": "OnPlay(uint256,uint256,address,string,uint256,string,uint256,uint256,uint256,uint256)", "724a5144": "MuneebCoin()", "724a6246": "claimSeasonPrize(address,int8)", "724a8487": "getTargetBlocks()", "724ae9d0": "getMinInvestment()", +"724b1431": "delegatecallSetN2(address,uint256)", +"724b2124": "userHoldBalWithdraw(uint256)", +"724b6f43": "lockWithUnicrypt()", +"724b87aa": "addCardSet(uint256,uint256[],uint256,uint256,uint256[],bool)", +"724b99e8": "Defaulted(uint256,address)", "724bc3de": "getAirdropAmount(address)", "724bdbaf": "externalTxs(uint8,bytes32)", "724c8393": "changeCrown(address)", +"724d4924": "getPlayerAddresses()", "724dbf36": "isNewBattle(string)", "724df10a": "alreadyWithdrawn()", +"724e78da": "setPriceFeed(address)", +"724e79cc": "addMasterRoyalties(uint256,address[],uint256[])", +"724ec133": "RecipientUpdate(bytes32,bytes32)", "724edf00": "startTokenDistribution()", +"724ef94c": "multiValueAirdrop(address,address[],uint256[])", +"724f3dcf": "equityToReturnData(address,address,uint256,uint256,address)", +"724f89fc": "revertReservation(address)", "724fcd4c": "buyAndSetDivPercentage(address,uint8,string)", +"724fda67": "buyLicense(bytes32)", +"725006d3": "provable_gas_price()", +"72501976": "accessAllowed(address)", +"72504f70": "setIsBuyBackActive(bool)", "7250dc36": "getMemberName(uint256,address)", "7250e224": "addDistributor(address)", +"72511e47": "addMovie(string)", "72511fb4": "EventAddressChange(address,address,uint256)", +"72512c77": "UniSwapSaleEndsTime()", "72519531": "BagholderAddr()", +"7252096c": "totalcandidate()", +"72521550": "Uno()", +"72521dcd": "lockFeeCollector()", "7252518c": "setLockend2(uint256)", +"72529cb9": "bDevIssue(address,uint256)", "7252bbf2": "ethBalanceOf(address)", +"7252fac5": "InstanceAppraiser()", +"72530a0b": "updateRecentAverageRate()", "7253160b": "convertByteToStr(bytes1)", "725326dc": "setAllowedForTransfer(address,address)", +"725351a1": "swap_buy_token(uint256,uint256)", +"7253b7dd": "UG()", +"72540003": "decodeEvent(bytes32)", +"7254331b": "CustomTokenDefrosting(address,uint256,uint256)", "7254895a": "readCards()", "7254e1ba": "afterGeneratorHook()", +"72555967": "setApeCage(address)", +"72556fcc": "stakeToShareRatio()", +"725584ff": "EthToEnj()", "72558b73": "destroyValue(address,uint256)", +"7255b70d": "_removeFromDebtRegister(uint256)", +"7255bfdd": "setPathBuyPair(address,address)", "7255d729": "createGame()", "7255f7ad": "getLastImageId()", "72561235": "getCreditbitAddress()", "72565e3f": "offChainMint(address,uint256)", +"725783db": "getProposalData()", "7257dac1": "removeSomeUETsFrom(address,uint256)", +"72581cc0": "TOKENS_RECIPIENT_INTERFACE_HASH()", "7258b901": "masterCut()", +"725906f9": "resolveCustom(bytes32)", "72593831": "withdrow(address)", "72593b4c": "ordersCanMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes)", "7259ac60": "Rethen()", "7259bce3": "preSaleTokenPrice()", +"7259cd33": "erc20Withdraw(bytes32,address,address,uint256)", "725a731d": "setPendingKNCRateRange(uint256,uint256)", "725a7eea": "MEGA_HERO_MULTIPLIER()", "725ad47f": "TransferERCXTokenInitiationEvent(uint256,address,string,address,address,uint256)", +"725b2c54": "requestAirdrop()", +"725b8786": "isConvertibleTokenSmartToken(address,address)", +"725bc212": "createPoolInternal(uint256)", +"725be546": "secondAddress()", "725c8bdd": "LMITOKEN()", "725cedd3": "calculateReward()", "725d8524": "getOption(bool,address,uint128,uint128,address,uint64)", "725da7b4": "withdrawMicroDivs()", +"725dbc40": "check(string,string)", +"725e2642": "manualRequestData(uint256)", "725e70a3": "getnumDeposits()", "725ef390": "mod(uint16,uint16)", +"725f095e": "exchange(int128,int128,address,uint256)", +"72600d54": "withdrawOwnerEvent(uint256)", "72601e77": "setOracleFee(uint256,uint256)", "72601faa": "ROUND_DATA_COUNT()", +"726021be": "buyTicket(string,string,string)", +"7260bd93": "_allocPointForBETH()", "726199b5": "notarizeHash(uint256,string,string,string,bytes32)", +"7261a024": "thisFunctionWillNotRevert()", "7261e469": "burn(address,uint128)", "7261ffad": "spendGameLockedToken(address,uint256)", +"72621500": "Reinvest()", +"726254d2": "transferInterest(address,address,uint256)", "7262561c": "unsubscribe(address)", +"7262b5e3": "restore(address,address,uint256,uint256,uint256)", "7262eb66": "PRE_ICO_POOL()", +"7262f648": "endBal()", +"7262f993": "getWinningChildPayoutNumerator(uint256)", "726300c7": "releaseEscrow(uint256,uint256)", "72630a6d": "UpdateIndividualContributorCap(address,uint256)", +"7263bf2a": "getAppeal(uint256,uint256)", "7264727d": "STCToken()", "7265d040": "startAtBlock()", +"72660b8e": "x_adminChangeMiningFees(uint256)", "72664744": "setDelegadoDeDistritoVerify(bytes32,uint256)", "726678e7": "level2Bonus(uint256)", +"72667cdb": "getSushiRouter()", +"7266af38": "AllowFreeze(address)", "7266f4a4": "X3()", "72670119": "payBonus1Address(address)", +"72670361": "claimedEggs(address)", +"726707fa": "unRegisterActiveCaller(address[])", "72675562": "extraTokensWallet()", "7267a25b": "mainSaleMinimumWei()", +"7267ae1f": "ToPartner(address,address,uint256,uint256)", +"7267ea86": "closeLoanPartiallyFromCollateral(bytes32,uint256)", "7267f24a": "lrcReceived()", "726802a4": "addAddressToAccount(address,bytes,bytes,bytes32)", +"72681041": "collectRentIfExpired()", "7268475b": "ITSMToken()", +"7268a1d0": "setLinkedPool(address,address)", +"7268e507": "Debit(bytes32,uint256,uint256)", +"72691592": "TOTAL_RELEASE()", +"7269180c": "myWishQuotePercent()", +"72694af3": "drainUnsoldTokens()", "7269a327": "isNonFungibleBaseType(uint256)", +"7269ada1": "__name()", "7269daa5": "requestChangeStaker(address)", "726a3ad1": "removeReservedTokens(address)", "726a431a": "TARGET_USER()", +"726a96f5": "getLastTransactionPerUser(address)", "726ab4ef": "getParentHash(bytes)", "726aeb20": "costToCreateGame()", +"726af0f9": "numberThree(uint256[])", "726b23bf": "changeMinNac(uint256)", +"726b5b36": "getBundleInfoById(uint256)", "726b5bad": "endAirdrop()", "726bd6bf": "oraclizePrice()", "726c12c8": "FileDataInt()", "726c6382": "Error()", +"726c8641": "lastCastleLootDistributionTimestamp()", +"726cc796": "xgtGenerationRatePool()", "726d0a28": "getRequest(address,uint256)", +"726d294e": "getAchorsLength()", "726d50ee": "totalCampaignsBy(address)", "726d82a0": "SEN()", "726df9cc": "grantService(address,address)", +"726e0ace": "file(address,address,address,bytes32,bytes32,address)", "726ea051": "calculateCoinBuySimple(uint256)", "726ee493": "withdrawStakeTokens(uint256)", +"726eefb3": "interestPerBlock()", "726ef3da": "getCurrentWinnerMoveCount()", "726f63f6": "setTokenOffering(address,uint256)", +"726fbd91": "pendingKick(uint256,address)", +"72700241": "setBlackList(address)", "727089f1": "extractAllowanceLength()", +"72709977": "issueIn(address,uint256)", +"7270a7e1": "DiscountStructRemoved(uint256,uint256,address)", "72712bb8": "trophyAddress()", +"7271bb40": "redeemReputation(address)", +"7272135a": "hasPendingBurns()", "72729ff2": "amountRaisedInWei()", "7272ad49": "decreaseApproval(address,uint256,bytes)", +"7273060b": "checkValidMultiSignatures()", +"72730a4a": "purchasedRBT(address)", +"7273d32c": "aotuId()", +"727401ca": "tokenBankrollAllocation(address)", +"727414d0": "resolveSafetyTransactionQueue()", +"72745ee2": "withdrawDepositById(uint32)", +"7274e30d": "campaignCount()", "7274f35b": "getCoinIndex(bytes32,address)", "72750dc1": "PANICPERIOD()", +"7275ae14": "totalInvestorsCount()", "7275c8cb": "getRecord(bytes32,string)", +"7275d9f8": "WALLET_HKDC()", +"72760e46": "TimeMintSold(uint256,address,uint256)", "72761e96": "execute_transfer(uint256,uint256)", "727648a3": "submitWork(address,address,uint256,string)", "7276509c": "purchaseBuilding()", +"727682ad": "resetFee()", "72771d40": "sendList(address)", "7277236b": "icoInvestment(address,uint256)", +"72774f72": "verifyProof(bytes,uint256[12])", +"72775a8f": "isFlashSale()", +"72777649": "TRUSTEE_ROLE()", +"727790fa": "schools(address)", +"72781402": "hasLockups(address)", +"7278225f": "addPoints(uint8)", +"72783f6b": "uniETHHXB()", "7278d080": "BTCEarth()", "7278d623": "CurrentEntityState()", "7278ef8e": "createExchange(uint256,string,string,uint256,uint256,uint256)", +"7279fa62": "setTotalMaxCap(uint256,uint256)", "727a00a5": "LetsFunds()", +"727a2d66": "unLockTokens(uint256)", +"727a573c": "updateProtocol(address)", "727a666a": "totalLevelValue()", +"727a7c5a": "periodMerkleRoots(uint256)", "727a899a": "setHashes(uint8,string,string,string,string)", +"727a9bf5": "addLGELiquidityRFI(bool,uint256)", "727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", "727b4094": "transferStep()", "727b4276": "setBitGuildToken(address)", +"727b52b1": "transferTest()", +"727b5ab3": "gusdToken()", +"727b7acf": "emergencyRecovery(address,uint256)", +"727b9c95": "setFounderOffer(uint256)", "727c2ff0": "purchaseWithGze(uint256)", +"727c56c0": "completeAuthorize()", +"727cc320": "calcToMaxAmountOut(address,address,uint256)", +"727cc5d4": "getAmountV1(address)", "727cdf87": "setCut(uint256)", +"727d02a8": "updatePoolWeights(address[],uint256[])", +"727d0f35": "bold()", "727d508a": "isOpenForPublic()", "727da487": "TTGOracle()", "727e2422": "StudioToken()", +"727e8e78": "deploy(uint256,uint256,uint256,uint256,uint256)", "727f0067": "nextHash()", +"727f4614": "setUpperBoundAmount(uint256)", "727fc9fc": "SCAM()", "72801b53": "isInTimeRange(uint256,uint256)", "728064cd": "GetTotal()", "7280850e": "getHandRank(uint32)", +"7280f71f": "executeContract(address[],bytes)", +"72816eb1": "fatToken()", "728171ba": "addressRegister(address,address)", +"72817e04": "_usdToSnx(uint256,uint256)", "7281854d": "GetCategoryValue(uint8)", +"7281a682": "beautyToApproved(uint256)", +"7281dcd1": "terpeneCount()", +"728205ff": "createAcoPool(address,address,bool,uint256,uint256,uint256,uint256,address,uint256)", +"72820dbc": "setAirdrop(address)", "7282c5b1": "WithdrawFeeBalance(uint256,address,uint256)", +"7282db35": "balanceOfPerPool(address,uint256)", +"7282fd33": "retrieveUriAuthorityIndex(bytes32)", +"728345db": "snapshotPoolTotalStakeAmount(uint256,address)", "72840e32": "rentPeriod()", +"72840f0e": "getSchedule(string)", "72841e0c": "isMaxCapReached()", "728435a0": "ReverseProposed(string,address)", +"72843eec": "soplPrice()", "7284e416": "description()", "72850e7a": "priceNeedsUpdate()", "728516c2": "getProjectedPayout(bool,uint256,uint256)", "72852fe5": "attackTile(address,uint16,uint256,bool)", "72855080": "demurringFeeDenum()", +"728585c9": "initNewPrice(uint256)", +"72859049": "getDynamicRate(address,uint256)", +"7285c58b": "ledger(uint256,address)", +"7285f2e4": "rePlayInByWD(uint256)", +"72870786": "submitProposalWithSolution(uint256,string,bytes)", "72879610": "sencHardCap()", +"72880a6f": "SaleState()", "728880c2": "payOutVoterByAddress(address)", +"7288a28a": "submitAsk(uint256,uint256)", "7288b0a9": "numberOfPingsAttempted()", +"7288b344": "_supplyInterestRate(uint256,uint256)", "7288b50c": "engraveNamespace(string,string,bytes32)", "72892f4f": "newPlay(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", "7289f28e": "setLastRound(uint256)", +"7289f3c0": "numeroactualdesociabiraffle()", "7289f9aa": "setDiscountedInvestor(address,bool)", "728a6755": "buyBookLotto()", +"728abead": "faucetMinBalance()", "728addbc": "token_balanceOf(address)", "728af7ec": "getInterest(uint256,uint256)", +"728b21ef": "getForeignBridgeValidatorsInterfacesVersion()", +"728b2c22": "testelopio(uint256)", +"728b4293": "setSuccess()", "728b763c": "extendTde(uint256)", +"728bbbb5": "openingFee()", +"728bcb79": "pendingTGX(uint256,address)", +"728c0092": "PROXY_REGISTRY_INTERFACE_ADDRESS()", +"728c369a": "HasStake(address)", "728c3ea2": "getBorrower(bytes32)", "728c97ca": "returnEther(address)", "728cbc44": "userHeldTill(address)", "728cd741": "SnapshotAndDistributePot()", +"728cdbca": "initialize(address,address,address,uint256,uint256,uint256)", "728cf508": "bookingMetadataForKey()", "728d0e2b": "accrueDividendandCoupons(uint256,uint256)", +"728d0efc": "accountToBleachNum(address)", "728d3dd2": "newRaceDistCon(address)", "728d5e94": "baseTokensPerEther()", "728de91c": "preSale(address,address,uint256)", +"728dec29": "inversePricing(bytes32)", +"728dff6f": "SwapTokenChange(uint256,uint256)", +"728e0d48": "birdPlusClaimThreshold()", +"728e8c7f": "frac(uint256)", +"728e9e24": "getNumberOfLockedAddresses()", "728ec9f1": "YourCustomToken()", +"728f1112": "acceptInvitation()", +"728f2df9": "ruter()", "728f31e7": "setTransferEnablingDate(uint256)", "728f3a21": "isApprovedWallet(address)", +"728f7a11": "upgradeMining(uint256)", +"728f8eea": "taxes()", +"728ff029": "getSellOrderBook(string)", "72909e28": "calculateIdeaSell(uint256)", +"7290b7ab": "settleNewProfit(uint256,uint256)", "7290c21d": "auctionCancelled(uint256,address)", "7290f691": "horseShoePr(uint256)", "72910be0": "setTitle(string)", +"7291437c": "addKolOffering(uint256,address,uint256)", "7291acdf": "SaleWindowUpdated(uint256,uint256)", "72923378": "RockPaperScissors(address,address,uint256)", "72927b1e": "deleteEntryByName(bytes32)", "72929b56": "getKudosPerProject(address)", +"7292abec": "getMyPremiumDragons()", +"72947534": "nFutureTime()", "7294789b": "getWhaleCard()", +"72948acf": "tokenAllowAll(address,address,uint256)", +"72949618": "_minWei()", +"72949a96": "ustake()", +"7294f5b0": "cantBidUntil(address)", +"72956b69": "getNTokenFromToken(address)", +"7295a8ea": "set_and_approve(address)", +"7295cd6d": "setTME(address)", +"72962cc4": "takerMarginMin()", "7296359a": "fog()", +"72966418": "getCpi()", "729680c3": "epsAddress()", "7296dae6": "jsonCat(string,string,address)", +"7296f558": "updatePerson(address,string,uint256,uint256)", "7297be7f": "changeFixedCommissionFee(uint256)", +"72982cd2": "isApprovedOrOwner(address,address,uint256)", "72987457": "blocktrade()", +"72987fee": "ninjaIndexToApproved(uint256)", "7298b261": "_calcEditorKey(bytes)", +"7298d36e": "univ2()", "7299054c": "random(uint256,uint256,uint256)", +"7299626d": "changeEraDuration(uint256)", +"7299672c": "swapLeStep()", "72998d8e": "LotteryGameLogic(address,address)", "72998ee1": "addPreSalePurchaseTokens(address,uint256)", +"7299a729": "addressZero()", "729ad39e": "airdrop(address[])", +"729ae5f7": "stakingsMap(address,address,uint256)", "729aeea6": "isSetupRunning()", "729b3881": "setNewRound(uint256)", +"729b47e6": "_claimAmounts(address)", +"729bdee7": "tranDrug(string,address)", "729c04fd": "_yearTwoClaimed()", "729cc83e": "getPlayerKeyCount()", +"729d20e2": "modules(uint8,uint256)", "729e3ef8": "YOPT(uint256,string,uint8,string)", "729e6f2b": "getGameChance()", "729ee75b": "updateUSDXGE(uint256)", "729ef530": "additionalBonus()", "729f0e8e": "cmct()", "729f2439": "addK(uint256)", +"729fc613": "getCurrentUnit(address)", +"729fcd6a": "f3b()", +"72a00f85": "receiveRefund(address)", "72a02f1d": "finalizeInit()", "72a06b4d": "returnInt8(int8)", +"72a07da6": "teamPercentScaled()", "72a0c16e": "tulipToApproved(uint256)", +"72a1789a": "lockedStatus()", "72a1a8ae": "CanSignIn()", "72a1b73f": "createSale(uint256,uint256,uint256,uint256,address)", +"72a1d464": "canChallenge(address)", "72a1e258": "updateUser(address,string,uint256,uint256,uint256)", +"72a1e9fc": "FillMaxInterestRate1()", "72a20c78": "powers()", "72a22014": "firstAuctionsHighestBid()", "72a22d51": "unlockValueOf(address)", "72a2d90c": "quickWithdraw()", +"72a3bbfe": "m_user_swaped(address)", +"72a407f3": "getTotalTicket()", +"72a42f03": "getTodayBonus()", +"72a49dca": "noLockedOperatorSupply()", "72a4a02f": "runPreMint()", +"72a4b024": "isClaimingPossible()", +"72a4c30f": "nn()", "72a4d94b": "release(bool)", "72a503be": "transfer(address,address[],uint256[])", "72a52851": "checkProof(bytes32[],bytes32,bytes32)", "72a56d2c": "ICO_RATE1()", +"72a61128": "kun()", +"72a61178": "modifyTwoParameters(address,address,bytes32,bytes32,int256,int256)", "72a66507": "_isNewUser()", "72a6a480": "_validRating(uint8)", +"72a6f951": "totalSpend(address)", "72a7019c": "saleHardCapEther()", "72a74d5b": "confirmOffer(uint256)", +"72a764df": "getMyDailyIncome(address)", "72a7655e": "timestampMint()", "72a7b8ba": "multiDecreaseApproval(address[],uint256[])", "72a7c229": "right41(uint256)", @@ -65729,68 +120194,131 @@ "72a85604": "min_amount()", "72a86693": "ambassadorsNumber()", "72a88673": "nthRoot(int256,int8)", +"72a8b9d7": "issuanceModule()", +"72a965fd": "logEvent(int256,int256,uint256,string,string)", +"72a9665f": "spend(address,uint32)", "72a984b2": "blockMinedAt()", "72a9e232": "reserveFunds()", +"72aa0a60": "rewardPoolInfo(uint256)", "72aa18d7": "WALLET_ECOSYSTEM()", "72aa343a": "removeProof(address,bytes32)", +"72aa765c": "_canForward(address,bytes)", "72aa9349": "maxTickets(uint256)", "72aab7d7": "setGPSEndTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"72ab3b62": "cDAIxcCOREUniswapPair()", +"72ab7e40": "changeFactoryAddress(address)", "72abee88": "PreIco(uint256,uint256,address,uint256)", "72acad56": "check_reward()", +"72acba38": "get_share_record_number(address)", "72ad21c7": "protection(uint32)", "72ad3c9f": "OTCChain()", "72ad5bbe": "_isErcToNativeBridge(address)", +"72ad692e": "withdrawFees(uint256,address,uint256)", +"72ad6ded": "changeAllowance(uint256)", "72adc407": "getGuardianVend(uint256)", "72adcadd": "TOTAL_CONTRIBUTOR_COUNT()", +"72ae734e": "addUints(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "72ae74dd": "getCoinRemains()", "72ae9e54": "blocksCoordinates(uint256,uint256)", +"72aebece": "Privilege_Certificate_Revoked()", +"72af217e": "getPol()", +"72af2932": "lastUnstakeRequestId()", "72af7b43": "SkyeCryptoPrivate(uint256,string,string)", +"72af7e5f": "rs()", "72af805e": "sendPreIcoTokens(address,uint256)", +"72af9228": "calcValueInBaseWithPool(address,uint256)", +"72afc5bb": "clearPUMP()", +"72b04ab4": "setLockPeriod(uint256,uint256)", "72b0d90c": "withdrawTo(address)", +"72b1cfa7": "_totalAllocPoint()", +"72b21f8f": "priceAtElapsedTime(uint256)", "72b28d27": "getNext(address,uint256,uint256,uint256)", "72b2ee75": "investorsNum()", "72b30d39": "setLLV_edit_30(string)", +"72b36289": "finishChangeMaxPercent()", "72b38ab9": "refundUser(address)", "72b3936d": "EWBToken()", +"72b3b620": "createToken(string,uint256)", +"72b3cded": "frax_eth_oracle_address()", "72b3f570": "endBuy()", +"72b4129a": "targetSwap(address,address,uint256,uint256,uint256)", "72b44b2c": "getSaleReturn(address,uint256)", +"72b45522": "defaultWhitelistContractAddresses()", +"72b49d63": "COOLDOWN_SECONDS()", +"72b4ca89": "pushLaunchDate()", "72b4e98f": "Aecium()", "72b4f111": "COOPToken()", +"72b5036b": "setPriceFirst(uint256)", "72b50845": "eliminateSDCC(address,address,uint256)", "72b556c7": "emissionReleaseTime()", +"72b566f8": "buySum()", "72b59c68": "createNote(uint16,bytes2,bytes12,bytes)", +"72b5b57e": "RefundPayment(uint256,uint256,address)", "72b5e050": "LOCKED_ALLOCATION_PPM()", +"72b5e81f": "calc(uint256,uint256,uint16,uint256,uint256,bool)", +"72b5fb89": "stakeAmount(uint256,uint32)", "72b60682": "lockEndDate()", "72b614af": "itemsPerPage()", +"72b68103": "mintTeamAndAdvisorsPart4(uint256)", +"72b6f12a": "stabilityFeeTreasury()", "72b7094a": "tokensPerEthPresale()", "72b75585": "getOriginalClient()", "72b7f893": "metaIncreaseApproval(address,uint256,bytes,uint256,uint256)", "72b81b1c": "resolveLotteryByHand(uint32,uint32)", +"72b823c3": "initializeFund()", "72b8a5cf": "bonusPersent()", "72b8de14": "isChallengePeriodOver()", "72b902a7": "setvolumebounus(uint256,uint256,uint256)", "72b91e61": "seen(address)", +"72b9f03a": "notifyLiquidated(address,address,uint128,uint112,uint256,uint256)", "72ba8259": "testMinting()", +"72ba8c09": "_numNiftyPermitted(uint256)", +"72ba9c90": "submitVote(uint256[3],uint256[2][10],uint256[2][10],uint256[2][10])", "72baa12e": "withdrawQR(address)", "72baa779": "setItoEndTime(uint256)", +"72bb2bb4": "activeAdmins(address)", +"72bb8f9e": "returnETHFromContract(uint256)", +"72bc4d73": "pastGameTimestamp(uint256)", "72bc56fe": "IsMultiFreeze(address,address[],bool)", "72bc8fc6": "ether2tokens(uint256)", "72bc8ff2": "isOMITokenLockContract()", "72bc9240": "etherPerSale()", +"72bd7327": "createMainSale(uint256,uint256,uint256,address,address,uint256,uint256)", +"72bd9c45": "landId2Bars(uint256,uint256)", +"72bde421": "growInvestment()", "72be346c": "ZTR_ETH_initial_price()", +"72be4b3e": "collectCToken(address,address,uint256)", +"72be97bd": "tianUsdtReserve1()", "72becdee": "_generic(bytes,address)", "72bedcee": "operationState()", "72bf079e": "adjustPrice(uint256)", +"72bfd111": "outAnglegen(address,uint256)", "72bff5ad": "freezeMintingFor(uint256)", "72c03508": "contributorClaim()", +"72c054f9": "getRedeemableBonds()", +"72c0639f": "pure_bool()", +"72c07db3": "GorgonaKillerChanged(address,uint256)", "72c0e7a4": "setThreshold(bytes32,uint256,uint256,address)", +"72c10286": "generateOrderHash(bool,bool,address,bytes32,uint256[12])", +"72c11ad1": "gsnFee(bytes4)", "72c1591c": "testFail_basic_sanity()", "72c174db": "mintTokensForAdvisors()", "72c1df4c": "transferDirectorB(address)", +"72c21c2a": "checkIfOdd()", +"72c24454": "WalletCreated(uint256)", +"72c24707": "bankInterestOf(address)", +"72c25944": "toggleFreezeETHPayment()", +"72c2707c": "setPermTokenId(uint256,uint256)", "72c27b62": "setFeeBps(uint256)", +"72c28f16": "sdxPerBlock()", "72c3015c": "mint(int256,address,string)", +"72c462b9": "_faloper()", "72c4639e": "SummRew()", +"72c4657d": "SHUFPerBlock()", "72c4ae6b": "walletForCommunity()", +"72c4d85f": "checkUserByWallet(string)", +"72c4e086": "expireBind(string)", +"72c4f61e": "verifyValidRepayment(uint256,uint256)", "72c537e6": "FirstCryptoBank(uint256,string,string)", "72c5c349": "NinjaCore()", "72c5cb63": "getAmountTransferred()", @@ -65800,28 +120328,52 @@ "72c7c85a": "minority()", "72c7e48d": "addAddressesToWhitelist(address[],string)", "72c87075": "testBlockHeaderFetch()", +"72c874ae": "Aborted()", "72c87e37": "MahamHasanTestCoin()", +"72c896c3": "addCover(address,uint48,uint256)", +"72c8b26f": "balanceenquiry()", "72c91cdd": "maxTokenForPreSale()", +"72c920f9": "GameFinished(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"72c96aa2": "partnerBecomePercent()", +"72c987f1": "initialize(address,address,address,address,address,address[4],uint256[3])", "72c9a5e3": "approveFST(address,uint256)", "72c9e9e0": "placeBid(uint64)", +"72ca69d9": "ALLOW_BIDDERS()", "72ca7fce": "TrueVeganCoin()", +"72caacf1": "bulkWhitelistAccount(address[])", +"72cacdd4": "sbVotes()", +"72cb051f": "availableCurrencyKeys()", +"72cb5d97": "setStrategy(address,address)", "72cb8942": "everyCoin(address,uint256)", "72cb8a89": "TokenWithdraw(address,uint256,address)", "72cc1f5a": "knightAddress()", "72ccd03a": "delWord(string)", +"72ccfa7d": "getUsdBalanceByOwnerAndToken(address,address)", "72cd5576": "getImpactLinked(string)", "72cd700b": "totalSupplyExpansionTokens()", "72cd7b89": "foundationTarget()", +"72cdd764": "getMarketing2Account()", "72cde347": "setMiniPoolEdit_5(string)", +"72ce4275": "splitPosition(address,bytes32,bytes32,uint256[],uint256)", +"72ce47b0": "changeFakeTransfer(address)", +"72cec641": "executeLoginKeyMetaTx(address,bytes,uint256,uint256,bytes,bytes)", "72cee8ea": "getReferralProfit(address,address)", "72cef34b": "getRevisionIpfsHash(bytes32,uint256)", "72cf3b40": "recharge(bytes32,uint256,address)", +"72cf6752": "setRewardNftFixed(uint32,uint128,uint128)", "72cfea69": "presaleClosingTime()", "72d00e9f": "activeContracts(uint256)", "72d0774a": "presaleFinishTime()", "72d0979a": "AddBonusToListFromArray(bytes32[],uint256[],uint256[])", +"72d0b285": "UserPay(address,address,uint256,uint256,uint256)", +"72d0d42a": "Create(uint256,address,address,uint256,uint256)", +"72d11466": "generateCard(string,uint256)", +"72d12a61": "deployNonNativeToken(string,string,uint256)", "72d16358": "Oratium()", +"72d17093": "Declined(address,address)", +"72d17d03": "getMetaTransactionHashExecutedBlock(bytes32)", "72d209f5": "processRequest(bytes32[],bytes5,address)", +"72d21c89": "withdrawAllRewardTokens(address)", "72d29f64": "setValidatorName(address,string)", "72d2f8b8": "createHodler(address,bytes16,uint64)", "72d32586": "STOREDIG()", @@ -65829,28 +120381,61 @@ "72d376b6": "proofTokensAllocated()", "72d3880e": "mainICO()", "72d39ee4": "Credo(address,address,uint256,uint256)", +"72d455d9": "API_UpdateLatestDyProfitTime(address)", +"72d45e5d": "m_Address_of_System_Reward_Token()", +"72d4728f": "finishStc()", "72d475db": "getTotalHeartsByDappId(uint256)", +"72d47d36": "getLockedAddresses()", "72d4b93c": "VitManToken()", +"72d51c25": "submit_proposal(uint256,uint256,uint256[4],uint256,uint256,uint40,uint40,uint40)", +"72d52e63": "overthrowParliament()", +"72d55083": "removeProviderModules(address[])", +"72d556b4": "setBurnFactor(uint256)", "72d5637f": "AxieCore()", "72d5fe21": "changeProposer(address)", +"72d61dfa": "createScalarMarket(uint256,uint256,address,address,int256,int256,uint256,bytes32,string,string)", +"72d658d6": "trasnOwnership(address)", +"72d66e30": "maintainers(uint256)", +"72d6c74f": "setSpreadAndPrice(uint256,uint256)", "72d744e0": "feeFromTotalCost(uint256,uint256)", "72d8c1c7": "ForestCoin()", "72d8e442": "hasBeenRevealed(address,uint256)", +"72d9175e": "whoIsOwner(address,address)", "72d9733e": "add_AUTO_MANU()", "72d99675": "getCollectible(uint256)", +"72d998c8": "registerActiveReceiver(address[])", +"72d9a1b4": "supplyBalance(address)", "72d9b86f": "unpauseCrowdsale()", "72d9f13d": "setMaxEarningsClaimsRounds(uint256)", +"72da4d1d": "isAuthorizedToSellSgr(uint256)", +"72da828a": "setKeep3rHelper(address)", +"72dacd79": "incvRewardClaim()", "72dad9f9": "SuperCoinViewToken()", +"72db0dec": "getInitialSalePrice()", +"72db1761": "__test__init(uint256)", "72db2339": "ERC677Transfer(address,address,uint256,bytes)", +"72db6b36": "getNextAssetIntroducerTokenId(string,uint8)", +"72dcbde5": "wipeAllAndFreeGem(uint256,address)", +"72dcd629": "register(string,uint256,string,uint256)", +"72dcd7eb": "aUniBaseEBlock()", +"72dce8bf": "FXB_Outside_Contract()", "72dd236a": "setTokenOffering()", "72dd529b": "totalsupply()", "72dd52e3": "coinContract()", +"72dde3fe": "returnLoan()", +"72de0096": "mintWithdraw(address,uint256)", +"72de5b2f": "constants()", +"72de9c39": "emitIssuerUpdated(address,bool)", "72dee32b": "getEndGameStatus()", +"72deebf3": "deploy_all_capital()", "72df02a7": "setMintThresholds(uint256,uint256,uint256)", +"72df8da6": "approve_34(address,uint256)", "72dff527": "drawTertiaryBWinners(uint256)", "72e05569": "_sendRefund()", "72e09d48": "mokenId(string)", "72e0e984": "prime(uint256)", +"72e0fb40": "whitelistMine(uint256)", +"72e18b6a": "areSynthsAndCurrenciesSet(bytes32[],bytes32[])", "72e18c12": "placeSellOrder(uint256,uint256,uint256,uint256)", "72e208eb": "targetAddr()", "72e2cac8": "BONUS_WINDOW_4_END_TIME()", @@ -65860,19 +120445,30 @@ "72e3f040": "richestRoundId()", "72e4030d": "_freezeTransfer(address,uint256)", "72e496f3": "setRestrictedState(bool)", +"72e4c6de": "totalXFactor()", "72e4dc06": "changeProductAvailability(uint256,uint256)", +"72e4f1c1": "addVideoGameItem(string,address,uint256,uint256)", "72e4f262": "annotationLength()", "72e4f5cc": "CreateOffer_internal(uint8,bool)", "72e5186c": "depositTo(uint256,address,uint256)", "72e5c84f": "_getTokenBonus(uint256)", "72e67d06": "setPendingManager(address)", +"72e6831f": "depositERC1155(uint256)", "72e6aca3": "isWithinICOTimeLimit()", +"72e6df39": "rNEX()", "72e6e21a": "exchangeableTokens()", "72e7a69c": "isHardCapAchieved(uint256)", +"72e7cc0b": "registerVoter(address,bytes16,bytes16,uint8)", +"72e7e38c": "setOverrideCollatBalance(bool,uint256)", +"72e7f7d3": "knjige(int256)", "72e861ee": "private_setRandomAPIKey(string)", +"72e87aef": "withdrawToAllowed(address)", "72e87c35": "giveProduce(uint256,string)", +"72e8b9b1": "OPTION_SUPPORT_PARAM_LOC()", "72e8e6a4": "PublicMined(address,uint256)", +"72e91bd8": "resolveBonus(uint256,address)", "72e91fee": "initialPartnerAccount(uint8)", +"72e94bf6": "ETH_CONTRACT_ADDRESS()", "72e98a79": "transferBZxOwnership(address)", "72ea1eb0": "addressBytesFrom(address,uint256)", "72ea2e6d": "finishInitialExchangingPeriod(uint256)", @@ -65880,15 +120476,23 @@ "72ea4b8c": "getNumInvestors()", "72ea61e8": "dist_developer(address,uint256)", "72ea7243": "generateLand()", +"72ea766b": "recuperaMeusDados()", "72ea8bfe": "executeBet(address,address,bool,uint256)", +"72ea9076": "getSwapOutput(address,address,uint256)", "72eab193": "COMPLIANCE()", "72ead941": "getDelegate(address,uint8)", "72eae629": "multiMintBounty(address[],uint256[])", +"72eb08d9": "assignUpgradedTokens(address,address)", +"72eb293d": "setMarketBorrowRate(address,uint256)", +"72eb3688": "mainCancelNomination()", "72ebe2aa": "verifyYourBalance(address)", "72ec1993": "enablerefund(address,address)", "72ece81c": "_create_island(bytes32,address,uint256,uint256,uint256,uint256)", +"72ed1a97": "increaseCollateral()", +"72ed2161": "getTokenBalanceMatch(address)", "72ed2c7f": "setQualifiedInvestor(address,bool)", "72eda05f": "tokensAllocatedToCrowdFund()", +"72ee01b2": "setSeasonId(uint256)", "72ee91c2": "configSignOrganizers()", "72eec3a7": "refundToken(bytes32,string,address,address)", "72eefb8a": "getRareItemsOwner(uint256)", @@ -65897,11 +120501,21 @@ "72ef6a08": "rgbLimit(uint256)", "72ef90e4": "Shop(address,string,string,uint256,uint32)", "72efa4ef": "Showcoin()", +"72efba45": "finalizeSingleInvestor(address)", +"72efeb44": "buyPresale2(string,string,uint256)", "72f0424f": "getPriceToken()", +"72f0cb30": "setWithdrawDelay(uint256)", +"72f0d98c": "getCurrentCashTofCashAtTime(uint32,uint128,uint32)", +"72f0f272": "getDestinationsAndAmounts()", "72f12814": "_setIDLE(uint256)", "72f1301a": "USCCToken()", "72f159b7": "migratePlayerData2(uint256,address,uint256,uint256,uint256,uint256)", +"72f2cfa1": "_encode_sol_raw(uint256,uint256,bytes,uint256)", +"72f3338f": "DEBUG_addr(address)", +"72f33ea9": "prizePeriodStartedAt()", "72f3b3c4": "ownerAbandonOverride(uint256)", +"72f3dd39": "getEncodedUserOrders(address)", +"72f40e92": "luckybuyEvent(address,uint256,uint256)", "72f41f11": "approvedRatio(uint256)", "72f443be": "ChangeLicense(address,bool)", "72f4ecab": "Balances()", @@ -65918,99 +120532,184 @@ "72f71894": "backTTCOwner()", "72f74af8": "crowdfundAddress()", "72f79b56": "btcEthRate()", +"72f8393c": "transferableBalance(address,uint256)", "72f83d3a": "poolSub(uint256)", +"72f866a7": "xrunePerBlock()", +"72f86a9d": "TokenShift(address,uint256,int256)", +"72f897a8": "IndexToOwner(uint256)", +"72f8fb5c": "buyTrancheBToken(uint256,uint256)", +"72f94ed6": "FirstRoll(address,uint256,uint256,uint256)", "72faebdb": "addCustomerFromACC(address)", +"72faf2d9": "deceased()", "72faf84a": "tokenSTCDRforBurnInControlWallett()", +"72fb3e27": "updateUniOption(address)", +"72fb45c2": "approve_628(address,uint256)", +"72fb4a14": "multiplyScalar(uint256,uint256,uint256)", "72fb54e5": "PHASE_2_PRICE()", "72fb6f75": "MIN_INVEST_SUPPORT()", "72fb9703": "challenge(address)", +"72fba0ba": "Loss(address,uint256)", +"72fbc155": "Bal(address)", "72fc493d": "decFeeDeposit(uint256)", "72fc75d7": "_changeTrancheIfNeeded()", "72fd1a7c": "changeRateSale(uint256)", "72fd8772": "toekensForOthers()", "72fdbf25": "increaseDividendPayments(address,uint256)", +"72fdccfa": "get_type_weight(int128)", +"72fe4404": "RegDocument(address)", +"72fe8f83": "tokensBurner(uint96)", +"72fea4bb": "setLusdAddress(address)", "72fecf84": "upgradeUnitId(uint256)", "72ff1773": "bonus_percentage()", +"72ff1b2f": "depositeFortuna(uint256,address)", "72ff285e": "_calculatePayout(bytes32,uint256)", "72ff3d87": "signedBySystem(bytes32,bytes)", +"72ffc6eb": "metaReplaceApprovers(bytes,uint256,uint256,address[],uint256)", +"72ffdc47": "recoverButtcoins()", +"7300c45e": "setMaxOffers(uint256)", +"7301bc98": "getKernel()", +"7301c7a3": "approve_366(address,uint256)", +"7302730e": "BR34PBuyBackRate()", +"7302dacf": "timestamp(address)", +"73030259": "withdrawUnderlying(uint128)", +"73031690": "getIsOpenSwap()", "73032446": "censorAndCover(address,uint256,string)", +"73033030": "burntotal()", "730369a7": "tokensBounty()", "7303a559": "getCreatorMetadata(string)", "7303ed18": "trustedUniverseBuy(address,uint256)", +"7303f338": "getKyberSellPrice()", "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[])", +"73066763": "initUniLiquidityPool(address)", "73069f94": "_claimTokens(address)", +"7306a381": "getScBylevel(uint256)", "730720b8": "testControllerValidTransfers()", "730736c9": "DelSocialAccount(bytes32,bytes32,bytes32)", "730740f8": "_resumeWork(uint256)", +"7307534f": "getConfigPoolValues(address)", +"730762ba": "usdRateUp(uint256)", "7307b805": "dismissTokenOperator(address)", "73086e58": "isFreezeTimeout()", +"7309a525": "crvPathWeth(uint256)", "730a04fd": "ArnoldCoin()", "730a0d80": "unhold(address)", "730a1a16": "_medalUnFreeze(uint256)", "730a3127": "RECORDICO(address,address,uint256,uint256,uint256,uint256)", "730a9f1c": "UncleToken()", +"730aaa8c": "burnFeeMax()", "730ad454": "vote(bytes32,address,bool)", "730afd06": "_proposeAmendment(address,uint256[],uint256[],bytes32)", "730b1952": "test_insert_updateHead()", +"730b6e41": "approve_868(address,uint256)", "730bdc96": "getHeroDetails(uint256)", +"730bfec9": "setMinReferer(uint256)", "730c1faa": "LogUnpause()", +"730c532d": "functionPublication()", "730c635a": "_checkToiletFlush(bool,uint256)", +"730d1802": "getTotalStakedValueInPLOT(uint256)", "730d2221": "CWS(uint256,string,string)", +"730d8240": "setUsageFeeAddress(address)", +"730daead": "includeDude(address)", "730db1f8": "setNum(uint256,int256)", +"730ddaf9": "LOCKDOWN_ROLE()", +"730e0037": "marketDetails(address)", "730e90b7": "addTipBalance(uint256,address,uint256)", "730ef269": "getNumberOfItems()", "730f2a96": "_transfer(address,address)", +"730fc077": "AddOwnership(string,uint256,string)", +"730fd680": "maxFreeDai(address,bytes32)", +"7310561b": "priceBase()", "73107c99": "ICDStartTime()", "7310c2e0": "Daisee()", +"73111e07": "mcdFlap()", +"731133e9": "mint(address,uint256,uint256,bytes)", +"7311ad81": "getImplAddress()", +"73120663": "giveAmbassador(address)", "73124ced": "transferLock()", "73124ee9": "ContractDetector()", +"731278fe": "changeParam(bytes32,bytes32)", "7312aaae": "singleWithdrawMax()", "7312c065": "Receiver()", "7312d625": "paySuperprize()", "73137bd0": "buildInternalSalt(uint128,address,address,uint256,uint64)", "73138e4f": "PRESALE_SUPPLY()", "73139c0d": "getTokensForStage(uint256,uint256)", +"73139de6": "redeemNft(uint256)", "7313b3b1": "Drawing()", "7313ee5a": "vestingPeriod()", "7314221e": "_createDeveloper(string,uint256,uint256)", +"7314391b": "getStudInfo(uint256)", +"7314396c": "joys()", +"7314abb7": "freezeAccount(address,bool,uint256,bool,uint256,uint256,uint256)", +"7314c378": "setBurnWhitelistToAddress(address,bool)", "7315acc8": "getAllShareholdersOfArtwork(uint256)", "7315af6f": "LandmarkCoin()", "7315f446": "votedKickoff()", "7316453e": "setPrice1(uint256)", +"731696b6": "setHolderDetail(string,string,string,uint8)", +"73172488": "userCategory(address)", +"73178c0d": "TOKEN_DEFINER()", "7317a88d": "transferSingle(address,address,uint256)", +"7317c158": "testCalculateInterestIndex_AnotherComplicatedCalculation()", "7317c4f3": "replaceAnimal(uint8,uint16,bool)", "731859bc": "batchLockArray(address[],uint256[])", +"7318a730": "yfv()", "7318b453": "setVotetUntil(uint8)", +"7319576e": "getBusinessman(uint256,address)", "7319b43e": "playersList(uint256)", +"7319d65c": "setMultiplier(address,uint256)", "7319e5aa": "calculateBonus(address)", "731a00f5": "calculateVestedTokens(uint256)", +"731a0d9a": "setDefaultReferrerAddr(address)", "731a3b06": "unstakeFrom(address,uint256)", "731ac7ed": "choosePerk(uint8)", +"731adf7d": "hcore()", +"731ae03a": "takeLeverageOrder(uint256)", +"731af937": "progressive()", "731b185e": "LogSetPreICO(address,string)", "731b3284": "Lockable()", +"731b3e91": "DISTR_PERCENT()", +"731b5813": "firstStake(address)", "731bed8b": "WithdrawalStarted(address,uint256)", +"731bf4da": "setMinTokens(uint256,uint256)", +"731c0cad": "doctormapping(address)", "731c2f81": "feeRebate()", "731c7c62": "setServiceRegistryEntry(uint256,address)", +"731c886b": "DeleteFashion(address,uint256,uint16)", +"731d1819": "ROUND_2_TOKENSALE_LIMIT_PER_DAY()", +"731dae7e": "toPie(address,uint256)", +"731e059c": "x10Count(address)", +"731e19dd": "collectable()", "731e1c94": "setLastPrice(uint256,uint256)", "731e1ecd": "preMarketingSharesDistributed()", +"731e980f": "CockAccountx()", "731f03fc": "setMinimumBuy(uint256)", +"731f04a3": "busdRaised()", +"731f0c2b": "mintGuardianPaused(address)", "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)", +"732193a6": "_votingOwner()", "7321a17b": "getTotalBonusTokensByAddress(address)", +"7321cc97": "queryGroups()", "7321ffa6": "distributeFunds(address,uint256,address,address,address)", "73221a55": "unblock(address,bytes32)", "732264b4": "getCommitmentsOf(address)", "73228786": "setTokenAddresses(address[6])", "7322dccd": "lastBlock_a16()", +"7323532e": "TapHistory(uint256)", +"7323555f": "registerIssuer(address)", +"7323749f": "getAverageLockedTime()", "7323febe": "aa(uint256)", +"73242ff0": "depositLimitsNum()", +"73245a7e": "getBooster(uint256)", "73247269": "getPoolContractPolicy(uint256)", "73251628": "doAirdrop(address)", "732519d5": "getSellable(uint32)", @@ -66020,36 +120719,63 @@ "732606fc": "getCooldownIndexCount()", "732617bb": "switchAdmin(address)", "7326b901": "getPropertyCount()", +"7326c9c0": "pledge(uint256)", "7326cac8": "ethIn_()", "732726d1": "increaseLockedAmount(address,uint256)", "732783ac": "tokensBought()", +"7327a885": "_PHASE_BID_STARTTIME_()", +"7327d47d": "_popTokenCache(address)", "7328c6ec": "submitNewContract(string,address[],string,bytes32)", "7328f531": "evaluateSkill(address,uint8,uint256,uint256,uint256)", "7329036a": "getBlocksLeftInCurrentKick()", +"73298667": "changeRefPercent(uint128)", "732a37c9": "SnowdenAffact()", +"732a950d": "mintPayable()", "732b6963": "emitEnd()", +"732b942d": "user_control_accounts(uint256)", "732bdbbf": "clearApprovalAndTransfer(address[16],address,address,uint256)", +"732bf8d6": "balancesof()", "732c227f": "contributionCaps(uint256)", +"732c2b8a": "resetVoteResults()", +"732c3b08": "testWalletAddress(uint256)", "732d2da4": "testHasCinderToken()", "732d565b": "ONE_YEAR_KEEPING()", +"732e0a1d": "factoryContractAddress()", "732e632e": "assemblyTest()", "732e77d0": "EGGS_TO_HATCH_1SHRIMP()", "732e78d1": "_sign(address)", +"732e9270": "metapoolDeposit(uint256,uint256)", +"732e9859": "soakToWbnbRoute(uint256)", +"732ebff3": "AddSupportedToken(address,uint256,uint256,uint256)", "732ef12c": "fee_registration()", +"732f20f9": "rebalancePeriod()", "732f5d0c": "AdvancePayplus()", "732fe2ff": "buyerCapLowEther()", +"73301947": "setImplementations(bytes32,address)", +"733048ff": "_lgeAmountLeft()", "73305f14": "Quicketh()", +"73307e40": "nominatedReceiver(address)", +"73309b96": "updatePool(uint256,address)", "7330aba2": "getOracleAddresses()", "7330aca4": "_isTransferAllowed(address,address)", +"7330c91c": "kusdt()", "7330daac": "isOnList(address)", "73311631": "addBrand(address,string)", "733122aa": "fromMemory(uint8[])", +"7331cf22": "permis2()", +"7331de81": "intermediateSaleCommissionPercentage()", "73321f03": "GateToken()", +"7332245c": "disableExtEnableClaim(uint256)", "733261bf": "bountyAdress()", "7332b520": "getRewardsCount(uint256)", +"7332f8e9": "sushiMineStartTime()", +"7332fe8c": "LogTokenCollected(address,uint256)", "73333128": "out3Done()", "73335b46": "GlobfoneToken()", +"73338081": "usersAddresses(uint256)", "73339a13": "setNetworkState(uint256)", +"7333aad7": "stake(uint64,uint64)", +"7333cf22": "feelessReceiver(address)", "7333fd00": "lock4Dividend(uint256)", "73342168": "BFToken(string,string,uint8,uint256)", "733452bc": "Descript()", @@ -66057,99 +120783,206 @@ "7334a63f": "whatWouldPurchaseDo(uint256,uint256)", "7334b2d7": "isBurnWallet(address)", "7334d5e2": "editSpecial(uint256,uint256,uint16)", +"73355868": "stakeLedger(address)", "73357018": "RATE2()", +"7336991d": "claimIncentives(address,uint256)", "73373879": "RecoveryQuorum(address,address[])", "733746ba": "Snickers()", +"73377472": "auctionedAssId(uint256)", "73379c54": "SecretNoteUpdated(address,bytes32,bool)", "7337c993": "initiate(uint256,bytes20,address,address,bool,uint256)", +"73381410": "NoFeeSender(address)", "73383832": "barrierPrice()", "73384fd5": "addMultipleAddressesToUncappedAddresses(address[])", +"73385c91": "consume(address,address,address,uint256)", "7338c25c": "hasAttribute(address,bytes32)", "7338ddcc": "acm()", +"7338e39d": "decreaseLockingTimeByAddress(address,uint256)", +"7338f378": "CapChanged(uint256,uint256)", "7338faba": "setHardCapEther(uint256)", +"733948c1": "lp(address)", "73396ff4": "getLoanToDepositRatio()", "7339affc": "UbiqTalk()", +"733a9d7c": "whitelistMasterContract(address,bool)", +"733abbe2": "coreUtils()", "733ad6e3": "BHMBLU()", +"733b066c": "last_annotation()", "733b679e": "PRESALE_LEVEL_2()", "733bdef0": "getStakerInfo(address)", +"733be0fd": "VaultInitialized(address)", "733bf2f2": "setPercentageCut(uint256)", +"733c2d12": "setOwnerShip()", +"733c4162": "_exchangeRates()", "733ccaba": "setResolver(string,address)", +"733cd9c1": "upgradStateAddress(address)", "733d8053": "containsToken(address)", +"733dbe87": "setDaicoManager(address)", "733dca75": "registerCoin(bytes4,string,string,address)", +"733de6b6": "crowdfundNumber()", "733e193c": "saleHasEnded()", +"733e1cd4": "LayTop3Team()", +"733e75a0": "profiles(uint256,uint256)", +"733eec93": "_getAdminActionID(uint160,uint256)", "733ef936": "drainFunds()", "733efe16": "numSkinOfAccounts(address)", +"733f0e86": "pauesed()", +"733f28a8": "wallets(uint8)", +"733f7950": "addChargingTransaction(address,uint256,uint256,int256,int256)", +"733facaa": "arb(uint256,address,address,uint256,address[],address[],uint256,uint256)", +"734029bf": "depositETH(address,address)", +"73403395": "approve_88(address,uint256)", +"7340a2b8": "StartCliff()", +"73412e13": "requestToQuestions(bytes32)", +"7341367b": "setTolerancePercentageToOraclePrice(uint256)", +"73417166": "withdrawEB()", "7342048a": "transferOwnershipOfContract(address)", +"73422b31": "PRE_REVEAL_MULTIPLIER()", "7342c484": "airdropDistributedTokensAmount()", +"73439778": "withdrawAllETH(address,uint256,address,uint256)", +"7343ede3": "isSupportPair(address)", +"7343ee42": "viewInterestAmount(address,address)", "73440745": "listItem(uint256,uint256,address,bytes32,address)", +"7344ea83": "sendJUSToOwner()", +"73450c41": "priceToOpenCancel(uint256)", "73454fe4": "StuckOnStupidToken()", +"734573ed": "initNftTokenBatch(uint256[],uint256[],uint256[],uint256[])", "7345a3a2": "payExcess()", +"7345b10b": "hourOfDay()", "7345da39": "logPayerStatement(string)", +"7345dac8": "bigAuraRand()", +"73462281": "externalCallToTokenizedStrategy(address,bytes,uint256)", "73463965": "notifyPlaceSellOrder(uint256,uint256)", "73463c9c": "ReceivedETH(address,uint8,uint256)", +"7346914d": "maxTechSupply()", "7346ec57": "tokensToWei(uint256)", +"7347060c": "BuyGenesisLevel2FromNormal(address)", "73475373": "trySell(uint256,uint256)", "73479f39": "totalT8EXSold_CORNERSTONE()", "7347a25d": "BitcoinTrade()", +"73480084": "magic(address,bytes)", +"7348381f": "oasisFactory()", +"73484faa": "ClaimArbitrageReward()", "7348ac1f": "ecoSupplyAddress()", +"73491159": "payPoolAmount(uint256,address[],uint256[])", "73493f09": "getTokensCost(uint256)", +"73495a0b": "getPairForSorted(address,address)", +"7349959c": "getWaitInfo(address)", +"7349996a": "minDepositPeriod()", +"7349aebd": "burnByValue(uint256)", +"734a18a6": "StageInvalidated(uint256)", "734a2c72": "ProjectTestToken()", "734a56f0": "preSaleEtherPaid()", +"734b4495": "setupSniper(uint256,address,address)", "734b4861": "addOpenAction(string,address,string)", +"734b7c83": "Split(uint256)", "734b9a87": "mod(uint64,uint64)", "734bb97e": "checkcoursestudent(address)", +"734c509a": "addUnderlyingPrice(uint256,address)", "734ce665": "newProposal(address,uint256,bytes32,bytes32)", +"734d13b8": "ticketHolders(address)", +"734d37dd": "updateAdmin(address,uint256)", +"734d79ac": "stakingEpochs(uint256)", "734d8287": "unclaimedFees()", +"734d8ed1": "revokeParenthood(address)", "734e21bd": "getToken(address,address,uint256,address)", "734e3015": "newMegabox(address,uint256,uint256)", +"734e6e1c": "NotImplementedError(bytes4)", "734f2838": "FinishCompetition(uint32)", +"734f48eb": "testTrader()", +"734f851e": "tokenURILocked(uint256)", "734f8a4d": "kycValid()", "735056a3": "SpoolAmount()", +"73505d35": "sharedProxyAddresses(address)", +"73509064": "ovmCALLER()", +"735098e4": "topNodes(address)", +"7350ac76": "tr1(address,address,uint256)", +"7350f0ee": "updatemaxDiscRateValue(uint256)", "73520a2b": "getReservedTokenDestinationList()", "7352e4b8": "setAffiliate(address,address)", +"7352f2b4": "seeAlso(uint256)", "735307fb": "createTimeLockContract()", "73535aa7": "PixelUpdate(uint32,uint8)", "7353a21d": "queuedAmount()", +"7353b212": "approve_611(address,uint256)", +"7353b75c": "LogOperationFeeWithdraw(address,uint256)", +"7353cbcb": "blocksCount()", "7353f62b": "testGetApprovalDb()", +"73542c55": "stopMortgage()", +"73543daa": "minterChangeBlock()", "73545d44": "landmarkOwnershipCount(address)", "73549604": "getFinalTime(bytes32)", +"735498a9": "withdrawExtensionWithMint(address,uint256,bytes32)", +"7354b2e9": "percentageRetirementYield()", "7354eb04": "rocCoreAddress()", +"7354f138": "money_to_Seller()", "7355303e": "_priceOf(uint256,uint256)", +"73553a6b": "takenRewards(address)", +"73559c96": "priceRoadmap(uint8)", "7355a424": "getDataCount()", "735631ad": "revokeTransaction(uint256)", +"73569340": "hashCompareInternal(string,string)", "7356a8a9": "getTile(bytes)", +"7356cbb2": "burnpercentage()", +"7356ddcf": "getMaxStakeAmt(uint256)", +"73574880": "toLimiterValue(uint256)", +"7357d5cf": "setRewardHalvingPercent(uint256)", "73580358": "ColorBayTestToken(uint256,string,string)", "73582884": "releaseGrant(address,address,bool)", +"73586c7e": "MultiTransact(address,bytes32,uint256,address)", +"7358c57a": "initTimestamp()", "735958f2": "XPAAssetToken(string,string,uint256)", "73596cfc": "Bitcoincredit()", "73599205": "ProdDToken()", "7359f5cf": "FundAddress()", "735a3326": "getLeftTickets()", +"735a732a": "_transferLITToVestingAccount(uint256,uint256,uint256)", "735a80b1": "test_voteSpammingAgainst()", "735af2eb": "Rate10()", "735b232c": "addWhitelistedTransfer(address)", "735b266d": "icoStage1Deadline()", "735b38a3": "getCardCanPresaleCount()", +"735b3f8e": "IssueDate()", "735b81ab": "circulationAt(uint256)", +"735b8984": "denyClaim(bytes32)", "735bae84": "migrateRoundData(uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "735bb742": "sha256Docs(bytes32)", +"735c6f59": "distributionEndBlock()", "735cfff2": "valueTotalSupply()", "735d3e81": "updatedBalance(address)", "735d45e1": "RADIUM()", +"735d6a52": "cardPoints(uint256)", "735d8876": "getCurrentExpirationTime()", +"735daf33": "directshota()", "735dcc8b": "devfeetodev()", +"735de9f7": "uniswapRouter()", +"735e7c56": "wtcFundation()", +"735e87f1": "kyberPrice(address,address,string,uint256)", "735e9cbb": "disableModule(bool)", "735f11b4": "updateAndWithdraw(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"735f48e2": "RealmAuctionCreate(uint256,uint256,uint256)", +"735f62e5": "CobeFriendIndexToApproved(uint256)", "735fb8e0": "fundOwner()", "7360ab6e": "mint(address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"7360e8de": "checkBackToken(uint256)", "73611c48": "send3MilWeiToPong()", +"73613af7": "mintable_(address)", +"736158d0": "borrowableBalance(address)", +"736164f0": "A18(bytes)", +"73616bb8": "_isStartUserSales()", "73618371": "Molecule(uint256,string,string)", +"7361b1b2": "withdrawSNXLiquityTokens()", "7362377b": "withdrawEther()", "73627826": "getTime(uint256)", "7362d9c8": "addWhitelistAdmin(address)", +"7363216f": "registerManyUsersFullExternal(address[],uint256,uint256[])", +"7363257a": "buyIds(uint256)", "7363d85b": "TMEXAddress()", +"73642c0d": "TMTG_Stash(uint256)", +"736446c3": "addToRoot(uint256,uint256)", "73646c91": "updateMirroir(address,address)", +"73649174": "tokenOnboard(address,uint256,uint256)", "7364a8dc": "MyBalance(uint256)", +"736525cf": "claimAllExpiredTokens()", "73654b6d": "userTransferFrom(address,address,uint256)", "7365870b": "bet(uint256)", "7365babe": "MIN_TOKEN_INVEST()", @@ -66157,6 +120990,7 @@ "7365e2d7": "totalPresaleTokensSold()", "736660ac": "determiningWinner()", "7366794e": "distributeTokens(uint256)", +"73668817": "reloadPublicCalls(address,uint256)", "73668b06": "XCCCrowdsale(address)", "7366c68d": "calculateCommission(uint32)", "7366e3ff": "raisedInPresale()", @@ -66165,86 +120999,159 @@ "7367df4b": "Syndicate(uint256)", "7367e302": "ContractCreationTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", "7367f156": "gameSettings(uint256,uint256)", +"73680b03": "web()", "73681818": "EICQ()", +"73682748": "PoolRegistered(string,uint256)", +"7368309f": "LogPositionTraded(bytes32,address,address,address,uint256,uint256,uint256)", "73688914": "owner1()", +"73688e56": "usdcBalance()", +"73689da9": "viewNyanRewards(address)", "7368a8ce": "create(bytes32)", "7368b3cb": "DinsteinCoin(uint256,uint256,uint256,string,string)", +"7368c81c": "pendingWall(uint256,address)", +"7368f4cd": "PaymentApproved(address,uint256,uint256)", +"7369b0c5": "kingReserves()", +"7369e9a2": "isValidTicket(uint256,bytes32[],bytes32)", "736a0102": "bonusETH()", "736a1b9a": "AdjustClientAccountBalance(bytes32,bytes32,bytes32,string,uint256,string,uint256)", +"736a83a1": "getTotalClaimed()", "736b13ae": "setRefillFor(string,uint256,uint256)", +"736bf591": "_totalMinted()", +"736c0d5b": "signers(address)", "736c24b5": "AdsharesToken(address,address,address,uint256)", "736c3e82": "onPayment(address,uint256,bytes)", "736c983a": "setCurrentRevision(address)", +"736cb0e2": "sendOwnerBalance(address,uint256)", +"736cce08": "updateUser(address,address,uint256,uint256,uint256,uint256,uint256)", "736d323a": "setPausable(bool)", +"736d5275": "getKyberSellPrice(string)", +"736d7129": "proposeSubstitution(address,address,address)", "736d7c52": "isAlreadyDelegate()", "736d7ee9": "revokeAccess(address,int256,address)", +"736d965d": "harvestAllBeds(string)", +"736dcb1f": "initInvestors(address)", +"736dfa2a": "_challengeBalance(address,uint256)", +"736e077b": "champToName(uint256)", "736ead2c": "optionsCalculator()", "736ec05c": "setMigrateTo(address)", +"736ecb18": "tryDiv(uint256,uint256)", "736eec58": "TransferAnimalToAnotherUser(uint256,address)", +"736efbb6": "log(uint256,address,address,uint256)", +"736f4dd6": "buyTicketFifty()", +"736f9935": "eightReserveTimeLock()", "736fafd3": "setPreIco()", "736fe565": "withdrawAmount(address,uint256)", +"736ffea1": "estimateRoi(uint256)", +"73703a43": "getBirthLastTime(uint32)", +"73704d56": "withdrawTeamBonusGain(uint32)", "73705090": "teamOnePrefix()", +"73709417": "projectIdToBonus(uint256)", "7370a38d": "getNumPackages()", +"73716de7": "referralBalance()", +"737172df": "msgData(uint256)", "7372014e": "midnight()", "73720de9": "receiveMonthlyNRT()", "7372196c": "PHASE_4_PRICE()", "7372c2b5": "pull(address,address,uint256)", +"7372e9be": "transferToNewOwner(address)", "73732024": "isDeposited(address)", "737377fe": "getTokenVolumebasedBonusRateForPhase2(uint256)", "7373af84": "numberOfNarcosByDistrict(uint8)", +"7373bc5a": "balanceInStrategy()", "7373f41d": "getEthereumBalance()", "73741171": "createVCXVault(uint256,address)", "73743fbe": "prospectors_team()", "7374b013": "buyTDETokensWithoutETH(address,uint256,uint256)", "737517f5": "powerUp(address,uint256)", "73752db4": "getKYCPayload(bytes)", +"73759787": "com(uint256)", +"7375be26": "start_epoch_time()", "7375c0c3": "PonderGoldToken()", +"7375cc2e": "getAssetAndUnderlyingPrice(address,uint256)", "7375e0fe": "testSimpleObject()", "7375ed82": "LogLoss(address,uint256,uint256)", "7376678b": "finalizePreSale()", +"7376a755": "Cram(address,address,uint256,string)", +"7376ade2": "getProposalsToVerify(uint256)", "7376fc8d": "right67(uint256)", "73770c01": "Updater()", "737732b2": "DEVELOPERS_BONUS()", "7377a036": "CloudexchangeToken(address)", +"7377a09f": "KycFailedEvent(uint128)", +"73787c4f": "devFunds(uint256)", +"737891e9": "openLong(uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"73790ab3": "nextEpochStart()", "737a7698": "transferAssigner(address)", "737aa5a0": "remainingTokensWallet()", +"737ad7ba": "stakeT1(address,uint256)", +"737b83de": "initShares()", "737c2d8c": "checkAvailableTokens(address,address)", +"737c6922": "Paid(address,uint256)", "737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", +"737ce341": "safeSymbol(address)", "737ce916": "MT(uint256,string,string)", "737d5f39": "AccessAdmin()", "737d8c8e": "ChangeTokenWalletAddress(address,address)", "737e2835": "_minHouseEdgeClassic()", "737e7d4f": "getByVersionId(uint256)", +"737ee67d": "Attack(uint256,uint256,uint256,uint64,uint256,uint256,uint256)", +"737ee85a": "FEE_PERCENTAGE_DIVISION()", "737f18ff": "_weiToVouchers(uint256)", +"737ff424": "referrals_pool_amount()", +"7380a31c": "idToAddresses(uint256)", "7380fbf3": "removeMemberArrayToken(address,address,uint256)", "73815ab7": "nfc_simplehq()", "738198b4": "cast(uint256)", "738228cd": "testUmlaut()", +"738233d6": "tokenAllowAll(address)", +"7382375c": "BonusSale()", "73826a93": "updateTokenDetails(string)", +"73828e1b": "divestLiquidity(uint256)", "7382901e": "serverSeedHash()", +"738294ab": "DONUT_ADDRESS()", +"7382ddbc": "setMinHDTokenBalance(uint256)", "73835f35": "checkIfEligable(address)", +"73836edd": "removeProtocols(bytes32[])", "7383d709": "buyItem(uint256,address)", "7383d8ee": "getEachBindAddressAccount()", "73845cfa": "setLocked(address,uint256)", +"73845fed": "DISTRIBUTE_PERIOD_UNIT()", "738486bd": "BeerCoin(uint256)", +"7384d1aa": "myEnergy()", "7385c4be": "deleteHiddenPosition(uint32,int64[],bytes16)", "7385e1f3": "level_5_amount()", +"73864202": "hasConfirmedRefund(address)", +"73869663": "testLower()", "7386c2be": "Exilium()", +"7386c54c": "setRegistryAddressProvider(address)", +"7386c9a7": "getRecepitInfo(bytes32)", "7386f0a7": "reservedTokensDestinations(uint256)", +"7387150b": "treasure(uint256,uint256)", "7387479e": "reclaim_art_token()", +"7387c7ed": "numHeatOffers()", +"73884516": "VerifyAgt(uint256,uint256)", "73889677": "ownerLives()", "73889f4a": "getHoldersCount()", +"7388c086": "DXCToken()", +"7388c5cc": "_isExchangeIncluded(address)", "7388fb2b": "AltTokenDistribution(address)", "73898796": "Tier_Classic_Registration()", "738a2679": "left85(uint256)", "738a2cf8": "nextPaymentTime()", "738acb3b": "sha(string)", +"738accc4": "NO_TTOKENS_STAKED()", "738b2fac": "setSignedPublicEncKey(string)", "738b31b5": "minimumWithdrawal()", +"738b62e5": "pauseDeposits(bool)", +"738bbea8": "isRngTimedOut()", "738c2931": "rewardTwo()", +"738d127a": "multiTransferTokenEtherEqual(address,address[],uint256,uint256)", "738d8d82": "numberWikiPages()", "738ddabe": "getContentIndexedAccountCred(uint256,address,address)", +"738e4f37": "refstake()", "738e6d78": "checkRefund(address)", +"738ebf97": "arShieldPlusPercent()", +"738f4e82": "toToken(uint256)", "738fa7a4": "userRank()", "738fdd1a": "reg()", "7390a673": "MyEtherTellerEntityDB()", @@ -66253,45 +121160,71 @@ "73913545": "fundVesting(uint256)", "73916918": "getinfowinning(address,uint256)", "73918980": "multiTransferEth(address[],uint256[])", +"7391f4a5": "setOpt(bytes32,uint256)", +"739232ae": "externalPools(uint256)", "73925694": "take(uint256,address[])", "739294d2": "setAssignedID(address,address,uint256,string)", "7392ce80": "TokenDeployed()", +"7392ddd0": "heroClaimFee()", "73930ce2": "validAmount()", "73931bbf": "getGame(bytes32)", "73932bfd": "withDrawal()", "7393d262": "goldenTicketUsed(address,string)", "7393e0b2": "DayTrader()", +"73942bfc": "setPreSaleFlag(uint256)", "7394cb3f": "addLocationRecord(uint256,uint256,string,string)", +"7394fd8f": "getCurve3CrvTokenAddress()", +"7395ec1d": "DateStakingPayoutPossible(address)", "73962b26": "isReleased(uint256)", "73963bf0": "setIdArray(address,address,string,string,uint256[])", "73964787": "batchAddCancelledOrFilled(bytes32[])", +"7396a626": "getSafeSyncColFactor()", +"7396ff4f": "EV5_NAME()", +"73973fcb": "calculateCommitment(uint256)", +"7397871a": "minimumStakingSeconds(uint256)", "7397d5f1": "getMintForReportingParticipantAmountValue(int256)", "73980d69": "dollarRaised()", "739826c5": "changeAllowTransfer()", +"73982990": "buyingTokenRewardPeriod()", "739838be": "DigitalEnthusiasts()", "73984188": "delOwner(address)", +"73986106": "modifyParameters(address,bytes32,uint256,uint256)", "739890f0": "disqualifyTeam(address)", +"73989d29": "setWithdrawFlag()", "7398ab18": "getPosition()", "7399646a": "theRun()", "73998758": "smpToken()", +"7399a259": "wifeAddress()", +"739a3e02": "stakingAmount()", +"739a8827": "configBallots(address)", "739ab361": "needApprovesToConfirm()", +"739b1fa2": "totalPropertyCounter()", "739b47ca": "recordWin(address)", "739b5014": "Snatch(uint256,address,address)", +"739b508e": "exchangeSynthsForDOWS(uint256)", +"739b5384": "addRecipient(address,string)", "739b6214": "doProveMemoryWrite(uint256,bytes32,bytes32[])", "739b78ed": "LogSell(address,uint256,uint256)", +"739b78f4": "exit(address,address,uint256,uint8)", "739b8c48": "setForwardedOutcome()", "739bdcff": "pricePause()", "739beded": "mintSendTokens(int256)", "739cb57d": "setEndtDate(uint256)", +"739cc0dc": "getTransactionConfirmations(uint256)", "739d3307": "SetWho(address)", "739d980e": "address(address,uint256)", "739e40b7": "getMyPunchCards()", "739e7f48": "TeamChoice(address,uint256)", "739f2224": "SetActive(bool)", +"739f660d": "allowed(address,uint256)", +"739f6687": "getUnitCap(uint32)", "739f763e": "getListing(bytes5)", "739f888c": "setNewEstimate(int256,int256)", "739f9202": "dev_share()", "739fab1b": "getAvailableWithdrawInvestmentsForOwner()", +"739fc19e": "setExtDataProvider(address)", +"73a0018c": "canStartGame()", +"73a01b75": "MAX_ZERO_GEN_PEPES()", "73a070bc": "addressReserveFund()", "73a077a4": "sub16(int16,int16)", "73a17e6d": "setCompte_31(string)", @@ -66302,49 +121235,87 @@ "73a26a12": "CryptoDiamondCoin()", "73a29b5e": "get_presale_arbits_sold()", "73a2d1ff": "MexicovsSweden()", +"73a3a2b2": "enableTokenDeposit(address)", "73a3d9e4": "canUpdatePercentToTakeAsSeed()", "73a40efb": "_computeRarity(uint256,uint256,uint256,uint256,uint256,uint256)", +"73a48e67": "get_swap_fee()", "73a4c307": "COMMUNITY_SUPPLY()", +"73a4ee22": "pay_eth()", +"73a50cd5": "nonWhitelistedDustThreshold()", "73a55389": "setRarePrice(uint256,uint256)", "73a5717e": "BaironSupply()", "73a5f508": "getAuditorRegistry()", +"73a66943": "newManager(string,string,uint256,uint256,uint256)", +"73a69545": "astroOwnerToIDs(address,uint256)", "73a699ad": "isGenesMarket()", "73a6b2be": "isAccountValid(address)", +"73a6da71": "createJob(address,string,string,uint256,uint256,uint256,uint256,uint256)", +"73a71a50": "updateNewImplementation(address)", "73a72b18": "setFountainFoundationOwner(address)", "73a75c1f": "addVineyard(string,uint16,uint24,uint32,uint16)", +"73a77f22": "changeDistributionCycle(uint256)", +"73a7800b": "addressToSubmissions(address,uint256)", "73a7b8b2": "storeStages(uint256[])", "73a7dfda": "we()", "73a80336": "prizeWon()", "73a80b74": "_mintSqr(uint256,address,uint256,uint256)", +"73a84cec": "claimWarrantBadge(uint256)", +"73a888c3": "getCurrentTwaPerBlock()", "73a91544": "showMigrationStabitcoinAddress(address)", "73a95ddd": "redemptionPaused()", +"73a9615c": "resolverContract()", "73a97787": "sgcToken()", "73a97f42": "MetaRules(address,address[])", +"73a9fd70": "currentIntervalRound()", +"73aa209d": "marketSettleTime(uint256)", +"73aa9905": "totalGrilled()", "73aad472": "guaranteedBuyersBought(address)", +"73aafb53": "toBytes32(uint256)", "73ab7503": "FlightPlan(address)", "73abecbb": "kill1()", "73ac4739": "getOnSellCardIds()", +"73ac9a67": "ticketConsume()", +"73acb37b": "getLastCheckTime()", "73acbcb2": "switchBleachAllowed(bool)", "73acee98": "totalBorrowsCurrent()", +"73ad0b0b": "lpTokenBurn()", "73ad2a15": "AllowedRecipientChanged(address,bool)", "73ad468a": "maxBalance()", "73ad6c2d": "setMarketplace(address)", "73ae277b": "getDepositAddressVerify()", +"73ae3241": "updatePayoutDistribution(address,uint256,uint256,uint256,uint256)", +"73ae5c22": "last_collect_epoch()", "73aef263": "FDSToken()", "73aef2b6": "unFrozenControl(address,uint256)", +"73af0647": "toFixed(uint256)", +"73af24e7": "openLockGemAndDraw(address,address,bytes32,uint256,uint256)", "73af6308": "setTierLimit(uint256)", "73af652c": "setCollectibleExposure(address)", +"73afc25f": "_rebasingPriceStartBlock()", +"73aff5af": "totalSharesSold()", +"73b03e46": "mapMember_weight(address)", +"73b04380": "set_referral_code(string)", +"73b0487b": "fview()", +"73b0a974": "getUserEpochStakedAmount(uint256)", "73b1184e": "setupVote(uint256)", "73b14098": "getTotalDevelopmentFundEarned()", "73b1edce": "_lock(address)", +"73b20547": "state_lastEventNonce()", "73b24ca0": "indInflation()", +"73b26d54": "setMinRefAmount(uint256[10])", +"73b295c2": "WAVAX()", "73b2c384": "_computeBorder(uint256)", +"73b2d322": "withdrawGego(uint256)", "73b2e80e": "hasClaimed(address)", +"73b31190": "heroData(uint256)", +"73b32e30": "dNyanV1()", "73b34271": "ETH420on49()", "73b38101": "wipe(bytes32,uint256)", +"73b38569": "migrateLPtokens100()", "73b3dcde": "maxDestroyThreshold()", "73b4086b": "loans(address)", "73b40a5c": "forwardTo(address,address,uint256,bytes)", +"73b40afe": "devFeeBP(address,address)", "73b4484f": "registerA(string,string,string,address)", "73b47908": "_updateCounters(uint256,bytes32)", "73b4df05": "createToken(string,address,uint256)", @@ -66356,162 +121327,290 @@ "73b68be8": "preicoAddresses()", "73b6a48a": "GetDataRequest(uint256,bool,string,uint256)", "73b793a8": "PrizeFund()", +"73b7de15": "setCreatorSkewLimit(uint256)", +"73b81816": "topDev()", +"73b84933": "setAccountLockType2(address,uint8)", "73b8a8c1": "MeetOneCommunityBonus()", +"73b8bafc": "calculateMyBurnRate(address)", +"73b8c84a": "_updatePositions()", "73b913fa": "safeTransferManyFrom(address,address,uint256[])", +"73b928cc": "test_hasTranscoderRewardFeePool()", "73b972bc": "bonusTokensIssued()", +"73b9967f": "UpdatedGrantsLockDate(uint256)", "73b9aa91": "account(address)", "73baae7a": "KingKongCoin()", +"73bbb71c": "setPoster(address)", +"73bbc4a8": "pendingXAUPrice()", "73bbda81": "standardTokenDefrosting(address[])", "73bc1b2f": "customerPool()", +"73bc79cf": "removeLiquidityAVAXSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)", "73bc8b2f": "kvcSub(uint256,uint256)", "73bc8b77": "SPIDER_BOOST()", +"73bce765": "swap(address[],uint256[],uint256,address[],address[],uint256[],address[],uint256,address[],address[],uint256[],uint256)", +"73bd1675": "buyListing(address,address)", "73bda17e": "restrictedTokens()", "73be0a99": "getData_7()", "73be6ddd": "allowEscrow()", +"73bf2409": "SetCreator(address,bool)", "73bf2ce0": "getMilestoneHashById(uint256)", "73bfb566": "withdrawFromProject(address,uint256)", +"73c0a367": "totalAuctionLength()", "73c107b3": "checkWins(uint256,uint256,uint256)", "73c1af76": "deleteFreezeList(address)", +"73c21803": "poolDelegatorsInactive(address)", "73c24cb1": "Buy(uint256,address,uint256,uint256,uint256,bytes16,bytes32)", "73c261f4": "getRegionUpdatedAtPurchasedAt(uint256)", "73c28692": "disallowFunding()", "73c2ec65": "sendbal(address,uint256)", +"73c30b6c": "forceFailByUnicrypt()", "73c32a71": "get_property_basic_info(uint256)", "73c4726b": "minHouseStake(uint256)", "73c4942a": "depositStopTime()", +"73c4d255": "findDog(uint256)", +"73c50a70": "distributeDOGET(address[],uint256,uint256)", +"73c60778": "addCart(uint256)", +"73c64ea2": "Revoke_Resource_Registeration(bytes32)", "73c6a4ec": "acknowledgeCopieExecutoire(bytes32)", "73c6aa7d": "ExchangeEfx()", "73c74103": "recoverTokensTo(address,uint256)", +"73c79175": "fee(bytes4)", +"73c83e9a": "GetYearInterest(uint256)", +"73c87236": "LogCfdSettled(uint128,address,address,uint128,uint128,uint128,uint128,uint128)", +"73c887fd": "deployProxyWithSigner(uint256,address)", "73c8c4bf": "Leverages()", "73c8d8a2": "setMaxPaymentInEther(uint256)", "73c8de54": "issueByTranche(bytes32,address,uint256,bytes)", +"73c8f087": "withdrawHDUD(address,uint256)", "73c90b43": "calcBidAllocationFee(bytes32)", +"73c90ec1": "decreaseAmount(uint256,uint256)", +"73c95a7b": "isArrAccountIsNotLock(address)", +"73c9cac7": "precision(uint256)", +"73ca0d7e": "unstakeToken(address)", "73ca1b28": "WHYPHY()", "73cb0620": "fluffyCatAddress()", +"73cb33b5": "bznToken()", +"73cb6ff8": "Lock(bool)", +"73cb70db": "plugLevel()", "73cb8ab7": "enableTokensTransfer()", "73cbd8ce": "getPublicSupply()", "73cc3ec7": "iceFundDeposit()", +"73cc48a6": "digests(uint8)", +"73cc7c7d": "addressToPledge(address,uint256)", +"73cc802a": "resetOwner(address)", "73cc9153": "MeshPointManager()", "73cce6f1": "presaleAllocateTokens()", +"73cd0783": "authTransfer(address,address,uint256)", "73cd0a19": "allowanceBurn(address,address)", "73cd148e": "VariableConstructor(string)", "73cdcac4": "getPostsFromPublisher(address,string,uint256,bool,uint256)", "73ce3c72": "UpStats(uint256,uint256,uint256,uint256)", +"73ce5d94": "swapTokensForExactETH(address,uint256,uint256,uint256)", "73ce9920": "parseOrder(bytes)", +"73cea087": "DidLCUpdateState(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256)", +"73cec6be": "__LnFeeSystem_init(address)", "73cf013c": "isBlacklist(address,address)", +"73cf3e68": "sell_token(address,uint256,uint256)", +"73cf575a": "unStake()", "73cf8f97": "registryRequestSku()", +"73cf9f83": "lowestExistingParent(uint256)", +"73cfffa0": "transferWhitelistAdmin(address)", "73d00224": "swapTokens()", "73d01ead": "prepareForMigration()", +"73d06dde": "timeUntilProposalProtestDeadline(bytes32)", "73d08bc5": "prefill(address[],uint256[])", "73d0d693": "Set(address,uint32[],uint24[])", +"73d0df20": "setRabbitMother(uint32,uint32[5])", "73d0fe48": "totalLockedHavvens()", +"73d1bc4e": "MKR_TokenContractAddress()", +"73d24f19": "refresh(uint256,uint256,uint256,uint256[4],uint8,uint8,uint256,bool)", "73d28995": "isMidGrade(uint256)", "73d31240": "removeGame(uint256)", "73d3172e": "MXY_chain()", "73d384c8": "hasDeposits(address)", +"73d42a8d": "setTotalTokensToMintPerEpoch(uint256)", "73d45ba4": "owner_ActivatePOS(bool)", +"73d47437": "aiStats(address)", "73d4a13a": "data()", "73d4c0ff": "m_aOwner()", "73d4d500": "transferPayable(address,address,uint256)", "73d4d9f9": "checkMAC(bytes32,bytes32[],bytes32)", +"73d50400": "poolYearAmounts(uint256)", "73d55379": "Beneficiary()", "73d65c00": "GEN0_NO()", +"73d69489": "BlindAuctionClosed(uint256,uint256,uint256,address,uint256)", "73d69720": "checkWhitelistAddressValue(address,uint256)", "73d6c2ec": "init_ico(address)", +"73d72fca": "revertToken(uint256)", +"73d74876": "CLAIM()", +"73d7643e": "ownerAdress()", +"73d8903b": "blockTimestamp(uint256)", "73d901d6": "activityClosed()", "73d9170d": "GKBToken(uint256,string,string)", +"73d9cb49": "setMultivalidatesignSwitch(bool)", "73d9fd0c": "placeTokenBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8,uint256,address)", +"73da1aca": "NewBallot(bytes32,uint256)", +"73da27d9": "isCached(address)", "73da968d": "buySection(uint256,uint256,string)", "73dae7d6": "issueTokensForPrivateInvestor(uint256)", "73db0844": "ETHUSD()", "73db2350": "commentsLength()", +"73db53fd": "bonusPool(uint8)", "73dc7635": "openAttacksCount(address)", "73dd9073": "secondStage()", +"73ddca1f": "mintFromCollateral(uint256,uint256)", "73de3570": "calcaultePrizes(uint256,uint256)", "73de3e72": "_refundTokens()", +"73de85d1": "AddUserDL(address,string,string,string,bytes,string)", "73de975c": "alreadyMintedOnce()", "73def2b7": "subFreezingPrice()", +"73df1612": "getState(uint256,address)", "73df6b19": "visitLength(uint8)", +"73df956e": "hpMultiplier()", +"73dfccca": "Pools(uint256)", +"73e07d0d": "lastRebaseResult()", +"73e0ad83": "conf(address,uint256,uint256)", "73e1743a": "buildDSBasicAuthority()", "73e1851b": "migrateMyTokens()", "73e1c5c9": "getMyFreeCoin(address)", +"73e1d414": "_refer1RewardRate(address)", "73e2212e": "changepresalebonus(uint256)", +"73e2290c": "withdrawTo(address,uint256,bool)", +"73e29b0d": "getPartners()", "73e2ab69": "_removeWhitelistAdmin(address)", "73e2d75f": "changeClons(address,uint8,bool)", "73e2faa8": "destructionContractAddress()", "73e30e49": "majorEventFunc(uint256,bytes,bytes)", +"73e3c3fc": "WhitelistedNodeRemoved(address)", "73e3ce80": "fact()", "73e3de70": "CardSwap(address,uint256,uint256)", "73e3e7a7": "getAdultByAddress(address)", "73e40ed4": "REWARD_SUPPLY()", +"73e442ea": "issueRebalancingSetWithERC20(address,uint256,address,uint256,bytes,bool)", +"73e45444": "swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)", +"73e48724": "allowBonusTokens(address)", +"73e4b903": "MAX_VOTERS_PER_ITEM()", "73e4d829": "createLandmark(uint256,uint256,address,uint256)", +"73e502e5": "numWithdrawalConfirmations()", "73e52855": "crownUnFreeze()", "73e538fc": "availableTokensOnCurrentStage()", "73e55a57": "DAOstackPreSale(address,uint256,uint256)", "73e58a75": "balanceTeam()", +"73e58b14": "EventUpdateCastle(address,uint32)", +"73e58fb4": "exchangeAforBAT()", "73e61cf2": "changingEnabled()", "73e67a38": "GameGoldToken()", +"73e6b0b8": "setCustodianDepositAddress(address,string)", "73e6fc1b": "parseUint(string,uint256)", "73e7c8ce": "setErrorRest(bytes,uint256)", "73e81d88": "TrustMarketHubToken()", "73e87d74": "OTM()", "73e888fd": "contribute(address)", "73e8b3d4": "exist(bytes32)", +"73e8dc5e": "numberOfCanceledHashesOfFromToken(address)", +"73e945f6": "devFunds(address)", "73e9f3e6": "Crowdsale(address,uint256,uint256,uint256,address,address)", +"73eaaed5": "distributionSnapshot()", "73eab74b": "SoulTransfer(address,address)", "73eaddf0": "OMGBalance()", +"73ebcad3": "cakePriceInBNB()", +"73ec30cc": "addCA(address,string,string,string,string,string,string)", "73ec6bb5": "AMOUNT_PER_PHASE()", "73ec7df0": "joinCommunity(address)", +"73ec9479": "smallRound(uint256,uint256)", "73ecac3b": "setGiftTokenAmount(uint256)", "73ece9c4": "setEmployee(address,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint8)", "73eda3cc": "finalizePublicSale()", +"73ede12b": "validateVoteOption(uint256,uint256)", +"73edf189": "claimableBoosts()", +"73ee4d09": "executeReserveTrade(address,uint256,address,uint256,address)", "73eec3c5": "payoutDividends(address,uint256)", +"73eee22f": "tokensList(address)", "73eef753": "coinSendSameValue(address[],uint256)", "73ef6357": "selectplayer()", +"73ef9e0f": "fsToken()", "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()", +"73f03dff": "_setPendingGov(address)", +"73f04af9": "Refund(address,uint256,uint256)", +"73f08eb3": "loadConsingment(address,uint256,address)", +"73f0cc2d": "st()", +"73f16751": "getTotalPremium()", "73f1e6d7": "resolveLotteryByOraclize(uint32,uint32)", +"73f1ff69": "generateDebtAndProtectSAFE(address,address,address,uint256,uint256,address,address)", +"73f20cff": "AssociatedContractUpdated(address)", +"73f273fc": "accumulatedRewards(address)", "73f28451": "tokensRate()", +"73f2888c": "createFaucet(address,uint256,uint256)", +"73f2f983": "whiteListSize()", "73f310df": "multiAccessRemoveOwner(address)", "73f3312d": "setMentorsTokensWallet(address)", "73f3bd1f": "earlyInvestors()", +"73f41c4b": "monaErc20Token()", "73f42561": "burned()", "73f440fe": "prevRoundTweetId()", +"73f4823e": "createCompoundingSalary(address,uint256,address,uint256,uint256,uint256,uint256)", "73f58acd": "createTeamTokenTimeLock(address,uint256,uint256,address)", +"73f599da": "MAX_PRECISION()", "73f5cfb1": "isPhaseValid(uint256)", "73f5edce": "UpPlayerResult(string,address,uint256,uint256,uint256)", "73f5f8ee": "tokensAvailableAtCurrentTier()", +"73f61a11": "participationListLength()", "73f64212": "supplyMultiplier()", +"73f65f8a": "setMaxDeposit(address,uint256)", "73f69bc5": "TrustedDocument()", +"73f784c0": "_updateCumulativeReward(bytes32)", +"73f7a0ea": "updateSushiExchange(address)", +"73f7dca2": "createPromoCard(address,string)", +"73f80143": "getQuestionAsker(uint256)", +"73f8a3ed": "dumpBalances()", "73f8edc3": "configureMarketItem(uint256,uint8,uint8,uint8,string)", "73f8fd4b": "getUserTokenBalance(address,address)", "73f93a48": "getAccountContentTip(address,uint256)", "73f9421d": "getUpgradeCardsInfo(uint256,uint256)", +"73f95488": "getApiCallIndex(uint256)", "73f9d5a0": "eostContract()", "73f9ff23": "RaffleMakersBook(string,uint256)", +"73fa3e82": "WithdrawalPonzi(address,uint256)", "73fa9ce8": "getAmTokenBalance(address)", +"73faaf38": "GetGrossRevenue(address)", "73fac6f0": "confirmReceived()", +"73fb44c6": "putFundsInSuspenseInPayout(string)", +"73fb4644": "push(address,uint128,uint128)", "73fb7878": "dividendFor10kDaily()", "73fba0e8": "airdropReserve()", "73fc115f": "RubiToken(address)", +"73fc1dc8": "_stakerRewardRate(address)", +"73fc6dfe": "exchangeFromId(uint256)", +"73fc7676": "recoverRewardToken(address,uint256,address)", "73fc83fa": "updateDireccion(address,bool)", "73fc8420": "deployedOn()", "73fc9643": "calculateFLC(address,uint256)", +"73fca6ea": "CANCEL_TYPEHASH()", "73fcfea1": "withdrawPLAT()", "73fddd16": "refundEndTime()", +"73fde196": "sUSDToken()", "73fe1673": "cpow2(uint256)", +"73fe4a04": "stakingLimitConfig()", "73fe747c": "TransferCreators(address,uint256)", "73fee090": "setfee(uint256)", +"73fee469": "foreignFactory()", "73fef35a": "setStartTimeIcoStage2(uint256)", +"73ff0acf": "borrow(uint256[3],bytes)", +"73ff3da5": "calcDocRedInterestValues(uint256,uint256)", "73ff4d48": "getPlayerForCard(uint256)", "73ff81cc": "getOwnersCount()", +"73ffc732": "UpdateGlobalUnlockTime(uint256)", "73ffd5b7": "transferEther(uint256)", "73ffd969": "setMap(uint256,uint256,uint256)", +"73ffdb15": "sellEthForUSDTInUniswap(uint256)", "73ffecd0": "getPlayerHistories(address,uint256)", +"74001f97": "UpdateRateFees(uint256,uint256)", "74002b6c": "getTokenPriceInWeiAndPhaseIdxsForDate(uint256)", +"7400467d": "getDenominatedValue(address)", +"7400d073": "adminSetNodeDeposit(address,uint256)", "7400ed3b": "acceptDeposit(address,address,uint256)", "74019f87": "BATSafe(address)", "7401aaa3": "getPlayerRoundBought(uint256,uint256)", @@ -66519,89 +121618,160 @@ "740227d1": "receiveFunds(address,uint256)", "7402a9aa": "isFirstStageFinalized()", "74030531": "bet(string)", +"74032a9c": "fLocks(bytes4)", +"74037877": "getCycleStake(address,uint256)", +"7403c6cd": "initialize(address,address,address,address,address,uint256,uint256,uint256)", "7403db08": "getVerifiedHash(address,uint8,address,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", "7403e980": "initPGOMonthlyPresaleVault(address[],uint256[])", +"7403f8a2": "ownerProducer()", "74040424": "startPartnerSale(uint256)", "74040cd2": "setBidFeePercents(uint256)", "74041d1f": "liquidPledging()", "74043a70": "FRPUSD()", +"740499ab": "unlockableBalanceOf(address)", "740528a7": "GrantRevoked(address,uint256)", "7405322e": "checkBalance(address,string)", "74056b73": "crowdsaleMinUSD()", "7405cee9": "CGCToken(uint256,string,string)", +"740610c4": "InsuranceCreation(bytes32,uint32,uint32,bytes32)", +"74063c21": "extractProof(bytes,uint256,uint256)", "74063cc1": "tokenOfMakerByIndex(address,uint256)", "74068480": "setPresaleFail()", "7406d1a7": "updateRegistratorStatus(bool)", "7406d943": "BIGTPrivate()", "740707cf": "cancelSaleOfMintingAddress()", +"7407305a": "uniswapETHforERC20(uint256,address)", +"74078748": "_utilizationRate(uint256)", "74087040": "testBitsNotEqualSuccess()", "740907ea": "buySale(address)", "74091685": "setReservesForExchangeTokensPercent(uint256)", +"7409ae3c": "setItoContract(address)", +"7409df42": "newDeposit(uint256,address)", "7409e2eb": "swapTokenToToken(address,uint256,address,uint256)", "740a2a90": "registerEmployer(string,string,bytes32,uint256,uint256,uint256[],string,string,string)", "740ab8f4": "partitionsOf(address)", +"740b05a9": "getBotRewardByAmount(address,uint256)", +"740b4b60": "addedToList(address)", "740b63f9": "set_hedgeAddress(address)", "740b91b6": "horseOwnerIndex(uint256)", +"740bd4ac": "checkClaimStatuses(address,address[])", +"740c0f5c": "carIds(uint256)", +"740c53d2": "pairAddressFor(address,address)", "740d0a6f": "getAmbientHumidityException(bytes32)", "740d73f3": "addToWhiteList(address[])", +"740d8a6d": "promoCodes(bytes32)", +"740dc534": "setHdudStaking(address)", "740e2a29": "setFundRepository(address)", +"740e722c": "claimBTC(uint256,address)", "740ed4e0": "addNewStakeDiceGame(uint256)", +"740f10a2": "underlyingJuniors()", +"740f737c": "setBossAddress(address)", +"740f8938": "withDrawAddr()", +"7410c045": "weiParticipate(address)", +"74119cff": "_twos_complement_32(int32)", "7411b2b2": "TrendNetworkToken()", +"741226b7": "getETHAmountByAddress(address)", "741273d6": "testThrowRegisterContractAgain()", +"7412b41a": "RESERVE_ETH_UNIT()", "7412c223": "getCurrentTier()", +"7412e35d": "STE_TOKEN()", "74135154": "func1()", "7413801a": "initializeAdvisorVault(address)", +"74139d9b": "getBlockedAccount(uint256)", +"7413b530": "getLockReceiptBySender(address)", "7413dcc3": "DelistTitle(uint256)", +"7413f944": "ChangedWeiCostOfToken(uint256)", "74141266": "arbiterList(uint256)", "741430ad": "VINCToken()", +"74143703": "makePayment(uint256,address,bool)", +"74145f59": "getOwnerConwaysTable(address,uint256,uint256,bool)", "7414edc4": "ERC20Token(string,string,uint8,uint256,address,uint256)", "74151a2a": "retrieveUnsoldTokens()", "74158cd8": "updateAdministratorKey(address,address)", +"7415ba9b": "LogFailedSweep(address,address,uint256)", "7415fbdb": "_getGameInfoPart2(uint256)", "74163ab1": "minsignupeth()", "741677a5": "makeTrade(address,address,uint256,string)", "741685e5": "EtherFuture()", +"7416cd32": "updateClientAddress(address)", +"7416d14e": "resolveContract(bytes32,uint256,uint256,bytes)", +"7416ef02": "maxEventSupply()", "7417040e": "numberOfParticipants()", +"741733b0": "stakeAddr()", "7417575c": "_releaseEarning(bytes32,bytes32,bytes32,bool,address,uint8)", "74182009": "CreateWolk(address,uint256)", +"741828ec": "HALVING_TIMES()", +"74183635": "testFeeTokenWeth(address,address)", +"74185360": "rebuildCache()", +"74185c6d": "setGainSettleFee(uint256)", "74192209": "getTokenEnhanced(uint256,bool)", +"7419b736": "RedeemReputation(bytes32,address,address,uint256)", "7419e77a": "setMarketplace(address,bool)", "7419f190": "stakeStartTime()", +"741a1f4e": "registerLGE(bytes32,bytes32,uint8)", +"741a33eb": "ovmCREATEEOA(bytes32,uint8,bytes32,bytes32)", "741a35c4": "getTx(address,uint256)", "741ad7a3": "transferDividends()", "741b0508": "isSplitable()", "741b2239": "unfreeze_period_time()", +"741b2525": "updateContributorRewards(address)", "741b3c39": "depositBond()", +"741b447c": "UnpauseCrowdsale()", "741bcc93": "fillOrKillOrder(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", "741bd9c8": "ETHDeposir()", "741be410": "getOpenPackageIdOfOneAgency(address)", +"741be958": "feeAddressBuyBurn()", "741bef1a": "priceFeed()", "741c251d": "changeGamemaster(address)", +"741c8907": "triggered()", "741cb9ce": "setCurve(address,bytes32,int256,int256[])", +"741cbae4": "changePrice(address,uint256,uint256)", "741cdf27": "Library()", +"741d00f3": "newRHINOexchange(address)", +"741d036f": "getIncentiveNumByTime(uint256)", +"741d3c18": "setETHUSDOracle(address)", +"741de148": "getBlocksPerYear()", "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)", +"741fd3e5": "pendingTni(uint256,address)", +"741fe6ac": "NameUnset(address)", +"741ff5f9": "starStudio(uint256)", +"7420a0ec": "latestApply(address,address)", +"7420c40b": "_presaleAmount()", +"7420ca3e": "swapsImpl()", "74214c92": "StandardERC223Token(uint256)", +"7421859f": "maintenanceLock()", "74220f3d": "burnApproval(address,address,uint256)", "74229301": "isTokenized()", "7422a127": "is_valid_event()", +"742315c5": "set_new_sETH_TokenContractAddress(address)", "7423ab57": "Project_RemoveToken(uint256,uint256)", "7423d96e": "txnTax()", "7423e225": "getDataPointForSubject(int256,uint256,uint256,int256)", +"74243ced": "fire_harvest(uint256,uint256,uint256,address)", "7424bab1": "currentAirdropAmount()", "7424bebc": "bonusBasePoints()", +"7425ffec": "tranche_total_utilized(uint256,uint256)", +"742609ce": "gameSponsorPrice()", "7426172d": "addPurchaseFromOtherSource(address,string,uint256,uint256)", "74268ff2": "deleteOffer(uint256)", +"7426ae54": "back_manager()", +"7426b43b": "double(bytes32)", +"74273066": "getMintedSectorList(uint16)", +"7427a40c": "shareHolders(uint256)", "74281f95": "FNAToken()", +"74284efd": "assetPriceinWWC(uint256)", "74287872": "investedAmountOf()", "742887ff": "deleteAddress(address)", +"7428a141": "mIdApproved(uint256)", "7428c5f4": "Gamble()", "7428eed3": "IndieGameToken(string,string,uint8,uint256,address)", "74294070": "_createItem(string,address,uint256,bytes32,address,address)", "742978da": "getAssets(address)", +"74299b5a": "supplyOrder(address,uint256)", "7429c086": "repeat()", "7429d78b": "SUCC(uint256,string,uint8,string)", "7429f1eb": "multiAccessSetRecipientD(address,address)", @@ -66609,45 +121779,76 @@ "742a1a56": "CCTE()", "742a9fa0": "recursiveFloor(uint256,uint256,uint256)", "742aa578": "AddressRecovered(address,address)", +"742ae09a": "indexId(uint256)", +"742b20cd": "coupons(bytes32)", +"742b2f65": "governances(address)", +"742b496e": "ibg()", "742b8b9d": "_CallRejected(bytes32,bytes15)", "742ba8de": "declareProjectNotFunded()", "742bff62": "SoftDude()", +"742c595f": "getPackTokenPrice(uint256)", "742c81e4": "approveOwnership()", "742cd75d": "mintPCD(address,uint256)", +"742d26e4": "electronicCertificateGraphicHash()", "742d5355": "calcTokenOwnerReward(uint256)", "742d9f0b": "lastBlock_v7()", "742d9fa3": "userOfferSubmitElement(uint256,uint256,uint256,uint256,uint256,uint256)", +"742e08e3": "buy(address,uint256,address,bytes,uint256,uint8,address)", "742e2ebd": "AllowedSet(address)", "742e54b2": "_airdropSupply()", +"742ec164": "SetGenesisForSale(uint256)", +"742f0688": "certificates(bytes32)", "742f79d5": "preRate()", +"742fdb96": "changeDPOPrice(uint256)", +"7430a689": "decreaseCap(uint256)", +"7430e0c6": "finalizeReserveAuction(uint256)", "7430faf4": "fechSnapshotBlockByIndex(uint256)", +"74310355": "multiClaimReward(uint256[])", "74313b4a": "releaseTokens(address,address)", "7432542d": "_remainReward()", +"7432a384": "tokenHashes(uint256)", "74331be7": "sete(address)", +"7433e0d3": "clash(uint256)", +"7433e2e7": "devFundTotal()", "7434206e": "validateReceipt(string,uint256,bytes32,bytes32,bytes,bytes,bytes32)", +"743434db": "totalBondValue()", "743438ad": "id_for_address(address)", +"743480cc": "bsubSign(uint256,uint256)", "7434d180": "removeSmartContractByAddress(address)", "7434e60d": "HamsterToken()", "7435039d": "calculateBountyRewards(uint128)", "743521c6": "rewardBountyMany(address[],uint256[])", +"7435a3f9": "parkFunds(uint256)", +"74363daa": "getStakingAmount(address)", +"74375359": "availableLiquidity()", "7437681e": "maxTx()", +"7437aa32": "checkMsgIsExists(bytes)", +"7437c5b7": "MYFIToken()", "74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", "74389991": "breakit()", "7438b0df": "WIN_CUTOFF()", +"7439011e": "purchaseEth(uint256)", "74396ed1": "makeWithdrawal(address,address,uint256,uint256)", +"743976a0": "_baseURI()", "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)", +"743b3452": "pledge(address,uint256)", +"743b8954": "_swapTokenForBNB(address,uint256,address)", "743b8e1a": "ROHH(uint256,string,string)", +"743bbc2f": "estimatedGasForPurchase()", "743bd681": "OWNERS_AUCTION_CUT()", "743bdcef": "MAX_WITHDRAW_PCT_TX()", "743c006b": "iWantXKeys(uint256,uint256)", "743c6775": "investorBaseInfo(address)", "743c7f6b": "setPreSaleDate(uint256)", +"743de571": "top_proposal_id()", +"743e03d9": "isFreezeFinished(address)", "743e0c9b": "receiveTokens(uint256)", +"743e1847": "totalPro(bytes32)", "743e92ee": "getNode()", "743f78ab": "WalletSet(address)", "743f978f": "addValueToCovfefe(uint256)", @@ -66655,54 +121856,102 @@ "744013c4": "Gnome()", "74418368": "getAdvertisementStorageAddress()", "7441b8bb": "lockBalance(address)", +"74420f4c": "execute(address,uint256,bytes,uint256)", "7442f427": "subUserTokenLocalBalance(address,uint256)", "74439ca7": "classic()", "74449ca4": "getContentCount()", "7444b006": "transferCopyFrom(address)", "7444b227": "getMidgradeCarsForVariant(uint256)", +"74452808": "inverst(uint256)", "7445690b": "getLotteryClass(uint8[7],uint256)", +"74457ef3": "mintEthToken(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"74457f86": "getPccBalanceV1()", +"74458306": "linkTelegram()", "744598cd": "Phase1AccountTokensMaxUpdated(uint256)", "7445af4b": "pay_by_bond_contract(address,uint256)", "7445d659": "foreignBridge()", +"7445e0c3": "approvedPlugins(address)", "74467a1e": "FOR_SALE()", +"744692be": "schainsGroups(bytes32,uint256)", "7446ce1c": "addJob(bytes32,uint256)", +"74471436": "setMafiAddress(address)", +"744717c2": "NewTree(uint256,string,string,uint256)", +"74475319": "checkinCount()", "74478bb3": "isClaimable()", "74479db0": "fcontr()", +"7447d3f2": "standsFor()", +"74487938": "maggotAmountToBeMigratedWithROTAmount()", "7448d386": "getStageData(uint8,uint256)", "744927fd": "getWinnerWithRank(uint8)", +"744955a9": "openedCountryShop(bytes2)", +"7449dbc3": "RegisterShortCode(bytes6)", +"744a0416": "balanceEthToTokens(uint256)", +"744a59b3": "LogFinishRoundD(address,address,address,address)", "744a8f77": "chefPrice()", +"744aca14": "getPriceFeedLength(bytes32)", +"744aca2f": "addMembers(address,string,string)", +"744aeb93": "boosterGain(uint256,uint256)", "744b4b3f": "createNormalBank()", +"744b92e2": "removePool(address,address)", "744bb8d2": "crowdsaleHardCap()", "744bfe61": "withdrawFunds(uint256,address)", "744c7c7f": "proposeMinting(uint256)", "744c8c09": "chargeFee()", "744d0a92": "MINI_GAME_BONUS()", "744d3411": "getBidCount(uint256)", +"744d5153": "bfiePerBlock()", +"744d646e": "hasAllCollaterals(address[])", +"744d6e18": "swapFromNeo(address,string,uint256,uint256)", "744d8b4f": "recordWin(uint256,uint256)", +"744da3d7": "gkpOne()", +"744ebfb5": "setNewDiffDestionation(address,address)", +"744edd5e": "cancelInvestment(address,uint256)", +"744f31d7": "marketInformation(uint256,uint256)", "744f4994": "getBrickIdsByOwner(address)", +"744f4cf6": "accrue(uint256)", "744f5f1a": "modifyTaxRate(uint256)", "744f7c7d": "toUint256Safe(int256)", "744fa2c8": "submitTokenToEthOrder(uint128,uint128)", +"744fb6ca": "withdraw(uint256,uint256,bytes)", +"745074cd": "changeNetworkReward(bytes32,uint256)", +"74508bff": "setpercentVote(uint256)", +"7450e2de": "pools(uint256,uint256)", +"745101dc": "isVoteOpen(uint256)", +"74516f05": "FeePercentageUpdated(uint256)", "7451bf71": "admin_transfer(address,address,uint256)", +"7451c450": "tierTwoBonusRate()", +"74530e8d": "karmavoters(uint256)", "745332fe": "getRestarTime()", "74536403": "getAvar()", +"74536630": "lotoAddress()", "74539f98": "getEventResolvers()", "7453a417": "__address4__()", +"7453ace7": "redeemPresale()", "7453cfa1": "EtherPaint()", "7453de96": "approveTransaction(uint256,uint256,string,uint256)", +"7453e8bf": "setInterval(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7453f7dc": "approve_128(address,uint256)", "745400c9": "requestWithdraw(uint256)", +"74542f6f": "getFeatures(uint256)", "74544e2d": "setGrandFactory(address)", +"74548a40": "Refunding(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"74548f9a": "prf_reward()", "7454e74c": "setAudit(address,address)", "74552650": "left95(uint256)", +"745561ba": "repayAllAndWithdraw_Eth(uint256)", "74556ee9": "getQST()", +"7455e414": "EndSecondBlockTo()", +"74560037": "getLbtFnMap(uint64)", "7456be7d": "rent(uint256)", "7456f2b9": "getDistributionTime()", "74573f80": "lastPlayTimestamp()", "7457412e": "THIRD_PARTY_LOCKUP_ADDR()", +"74577bb7": "univ2ISWEthPoolId()", "7457a9e1": "Coupon(uint256)", "74580e2f": "changeCreator(address)", "745828ef": "ProofOfLongHodlV2()", "74583772": "adminSendTokens(address,uint256)", +"74585ee3": "depositedWEI(address)", "74590f64": "setApoderado(bytes32)", "745911d5": "getHolidayByIndex_(uint256)", "745944d5": "setCampaignValidById(bytes32,bool)", @@ -66710,32 +121959,61 @@ "7459f2a3": "registerArbiter(uint256,uint256,uint256,uint256,uint256)", "745a8be2": "flip32(bytes)", "745ab73d": "BrainIsToken()", +"745be576": "dailyPrizePools(uint256)", +"745c2bfb": "OnGetAward(uint256,address,uint256,uint256,uint256,uint8,uint256,uint256)", +"745c90b6": "Winner(address)", "745ce3bb": "iaInvestedBy(address)", "745ced49": "CORE_TEAM_PORTION()", "745cf221": "ArjunaCoin()", "745d1d64": "ethCollector()", "745dcd4d": "stop(string)", "745e77f9": "_createAnimecard(string,string,string,string,uint256,address)", +"745e96e6": "createBet(string,address,address,uint256,uint256,uint256,uint256,uint256)", "745e9da2": "GameProgress(uint256,uint256,uint256)", "745ea0c1": "registerNameXnameFromDapp(address,bytes32,bytes32,bool)", +"745f246f": "isFrozener(address)", "745f2860": "_buyTokens(address,uint256,uint8)", +"745f661b": "TokensBought(address,uint256)", +"745f6a00": "getMessageHash(uint256,address)", +"745f8737": "launchERC20(string,string,uint256,uint256)", +"745fc8ad": "stakePcity(uint256)", +"745fda9b": "getAdjustedClaimRate(address)", +"745ffb41": "auctionEndVoucherList(uint256)", "74601c3c": "availableToMint()", "746022c2": "oneGetMoneyBack()", "74607d91": "patient(uint256)", +"74609899": "voteOptions(uint256,uint256[],uint256[])", "74609d0c": "createDApp(bytes32,uint32,bytes,bytes32)", "746178ed": "escrowTokensWallet()", "7461dbff": "setOwnerAirDropRate(uint32)", "7462260b": "KEM()", +"74624c55": "submitGasTopUpLimitUpdate(uint256)", "7462beec": "renewSubscriptionByDays(uint256,uint256,uint256)", +"7462cefe": "fiveWith()", "7462e4f9": "Etheropoly()", +"74631924": "Birth(address,uint256,uint256,uint256,uint256,uint16,uint8,uint256,uint256,uint256,uint16)", "74635cfc": "setMembers(address[])", +"74636d16": "setCollateralLiquidationRatio(address,uint256)", +"74637aaa": "y3crv()", +"74644819": "TokenSaleFinished(uint256)", +"74645bc3": "addSupportedTokens(address,uint256)", +"74645ff3": "oracleData()", "74646086": "StreamityTariff(address)", +"74647d81": "init_Supply()", +"7464ce23": "log(uint256,bool,bool,uint256)", "7464d5d8": "rewardDistributionStart()", +"7464dcc1": "triggerPasswordUpdate(uint256,bool)", +"7464fc3d": "kLast()", "74651594": "tgeSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7465577a": "changeLenderOwnership(bytes32,address)", "746584b4": "setMintingContractAddress(address)", +"7465bccd": "createPriceFundAll(string,uint64,uint64,uint256[],address,uint256)", "7465df26": "totalAccessories(uint256)", "74664b34": "interestNextInPercent()", +"74668fcb": "neq()", "7466b2d0": "transferIsPossible()", +"7466dc21": "getRemainBuyBLKAmount()", +"7466e5d9": "getBuyOrderList(address,uint256,uint256,uint256,uint256)", "7466e67d": "mintToOtherCoinBuyer(address,uint256,string)", "7466ee48": "getAppAddress(uint32)", "74674256": "temroyToken()", @@ -66743,71 +122021,142 @@ "7467af07": "EladToken()", "7467bc92": "disbursementHandler()", "7467bcd9": "minPaymentWei()", +"7467f1bb": "_newDelayPeriod(uint64)", +"74686fd2": "enableEtherlessTransfer()", "74689990": "schedulePayoutOraclizeCall(uint256,bytes32,uint256)", +"746922d6": "treasuryCut()", +"746a21a7": "cashConversionLimit()", +"746a3aa8": "setEnd()", "746a9af2": "printCertificate(string,string,string,uint16,string)", "746abc79": "distributeRegistrationBonus(address)", "746ac67e": "PCNCrowdsale()", +"746b31c0": "expire(address,uint256)", +"746c0a60": "batchesIndexCap()", +"746c32f1": "ovmEXTCODECOPY(address,uint256,uint256)", +"746c73fd": "nodeClaim()", +"746c8ae1": "startReward()", "746c9171": "m_required()", +"746d26b5": "removeProposalType(string)", "746d3024": "perPrice()", +"746daa4e": "govTokens(uint256)", +"746dda9a": "rxp_decimal_num()", "746df633": "getTeamBallers(address)", "746eff8c": "_cancelRolePermissions(address,address)", "746f79d9": "TIER2_PERCENT()", "746fc8d0": "right47(uint256)", +"747026c9": "compClaimThreshold()", "74703123": "proceedKYC(address)", +"74704bf4": "removeNormalNode(address)", "74707e0d": "deleteWallet(address,address)", "747082b9": "FsTKAuthorityChanged(address)", "7470a835": "OliToken(uint256,string,uint8,string)", +"7470f378": "lockingWallets(address)", "7470f760": "createTeamTokenByPercentage()", "74711285": "restartSale()", "74715432": "renounceAuctionManager()", +"74717f09": "toshiCoinFarmDelegate()", "7471ea81": "IPayX()", "7471f6f6": "buy_beer(uint256,uint256)", +"74722e5a": "mithCash()", +"747265bd": "claimAllRevenue()", "747293fb": "addCaller(address)", +"7472ae40": "ticketsavailable(address)", +"7473708e": "mulTruncateScale(uint256,uint256,uint256)", "7473f4e0": "grantAccessbyDelegate(bytes32,address,address,string)", +"747442d3": "approve(uint256,bool)", "74748460": "balanceOfAtInternal(address,uint256)", "7474dfd0": "_getBetAmount(bytes32)", +"7475011b": "isUserQualifiedbuyMineSapphire(address)", "74754282": "manufacturer()", "747586b8": "setInt(int256)", "74759f43": "numberOfInvestments()", "7475baa6": "AirDropPayBitsBounty(address[])", +"7475f913": "resumeStaking()", +"747602c2": "_nextUnlockAmounts(address)", +"7476083b": "depositIntoPool(uint256)", "7476865f": "ToggleMaintenance()", "74772667": "changeMinContrib(uint256)", +"74772eb3": "is_successful(uint256)", +"74774370": "getUserAddressByID(uint256)", "74775cdd": "buyAtPrice(uint256)", +"7477e052": "withdrawStakingInterest(address)", "74780111": "assertEq16(bytes16,bytes16)", +"747853a3": "mintJOYtoy(uint256,uint256)", "747853bc": "test_validBoardFundTransfer()", +"7478901d": "invoiceAmount()", +"7478e944": "initNFTPrice()", +"7478fbe3": "reduceReputation(address,uint256)", "74796cc2": "getPlayersInGame(uint256)", "7479aa04": "getCurrentRoundStartTime()", "7479b9ac": "founderToken()", +"747a5560": "setPear(address)", +"747a5663": "bproUsdPrice()", +"747ace85": "payToAcceptOffer()", "747ad1c1": "getPeriodIdx(uint256)", +"747af0c9": "transferManyFrom(address,address[],uint256)", +"747ba037": "producer(int256)", +"747bbf7c": "getBurnedItemByIndex(uint256)", +"747bbfd5": "mint(address,uint256,uint256,uint8,uint8,string)", "747bcd72": "SCORE_UNITARY_SLASH()", "747c1d87": "getInvestorsAmount()", +"747c31d6": "licenceNode()", "747cb030": "SALE_3WEEK_BONUS()", +"747cef22": "getSkillsOfNcard(address,uint8)", +"747d5450": "startChangeMaxPercentAndTime(uint256,uint256)", +"747d6d6e": "getMarketCollateralFactorMantissa(address)", "747d6dd0": "_getCrabPartBonuses(uint256)", +"747dd950": "adminSetMaxRentPeriod(uint256)", "747dff42": "getCurrentRoundInfo()", "747e0670": "UseWish(string)", +"747e13b8": "increaseStakeErasure(address,address,uint256,uint256)", +"747e2a3b": "_multiplier()", "747f3380": "phoneNumber()", "747fc0d2": "maxReferrals()", +"74804316": "voteOnBehalfOf(uint256,bool,address[])", "7480a676": "Cryptosquirrel()", +"748120b5": "changeUniV2Address(address)", "74816d1e": "webGiftUnTransfer(address,address)", "74817d9b": "startPublicSale(uint256)", "74818530": "Creedex()", "7481a8aa": "TokenizedSplitter(string,string,uint248)", +"74823132": "initialize(string,string,address,uint256,uint256)", "7482e533": "EventLuckyNumberRevealed(address,uint256,uint256)", +"748365ef": "accessControls()", "7483883d": "getOrAddMasterWallet(address)", +"74839730": "setAdditionalGas(uint256)", "74845024": "scribes_hisory_length()", "748467b9": "callBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"74847c54": "SUSDPool()", +"7484c59b": "addProduct(address,string[],string[])", +"7485d6d5": "allTicketsForBlock(uint256)", +"74860095": "getConditionCreatedBy(bytes32)", +"748635c7": "g_poker()", +"7486a852": "buybackaddr()", "7486a8e3": "get_publisher(bytes32)", +"7486b156": "master_weight()", +"74872475": "swapEth(address,address)", +"748747e6": "setKeeper(address)", +"74875b66": "migrationEndTimestamp()", +"7487f528": "setAcceptedToken(address)", "748837b2": "getIsBonusUnlockExempt(uint256,address)", +"748853f2": "swapEnableFlag()", "74888914": "setHatchDurationMultiByGeneration(uint32[])", "7488aa3c": "getNextBonusIndex()", +"7488aa4d": "comparePermissions(uint32,uint32)", "7488ad7c": "minDepositInCents()", "74891e1b": "getCoinAgeInternal(address,address,uint256)", "7489308f": "lpTargetPosition()", "7489472a": "step_pay()", "748949e8": "setGalleryFourPrice(uint256)", +"74894ab4": "arbitrationTwo(uint256,uint256,int256,uint256,uint256,uint256,uint256,uint256)", +"7489b451": "withdrawRepayment()", "7489ec23": "cancelOrder(bytes32)", +"7489f085": "registeredAddress(uint256)", +"748ac8a3": "sushiTotalMine()", "748b659d": "pauseCollectToken()", "748b95b6": "decimls()", +"748c350b": "agonValues(uint256)", +"748ca14c": "propertyAmount()", "748ce291": "addRewardforNewContributor(address,uint256,string)", "748d071d": "seriesCreated(bytes32)", "748d1078": "updateDukeHistory(string,bool,string,address,uint256,uint256)", @@ -66815,86 +122164,165 @@ "748de225": "getFreezeAccount(address)", "748de5d3": "UpdateAddressPayForService(address)", "748e4f40": "sendTokensToTeam(address)", +"748e70a2": "idOf(address,uint256)", "748ed9a8": "getTargetIncorrectDesignatedReportMarketsDivisor()", "748efab5": "_copyToBytes(uint256,bytes,uint256)", "748f0810": "ProposalTallied(uint256,uint256,uint256,uint256,bool)", +"748f38e2": "setPricingStartegy(address)", "748f7215": "getUnlocktime()", +"748f967c": "autoPoolGain(uint32,uint8,uint256)", "748fa599": "someUnsafeAction(address)", +"748feebe": "Triger_Withdraw_Tail(address,address,uint256)", "748ffa5b": "cei(uint256,uint256)", +"74900048": "adminMintFor(address,string)", "74900c92": "MINIMUM_ETHER_SPEND()", "74912463": "tokenEmission()", +"74913933": "setMyLuckyNum(uint256)", "74914710": "getCrySolObjectsByOwner(address)", +"7491c97e": "onlyWhitelistedMock()", "7491ef60": "PrecommitmentAdded(address,uint256)", +"74923107": "startNewRace(uint256,uint256[],uint256,uint256,uint256)", "7492384a": "backTixOwner()", +"7492ec69": "reservesOf(uint256)", "7493357b": "reservedOwner()", "7493539b": "KOALAPROJECT()", +"74935b30": "weightJuniorRedeem()", "74935f11": "PLS()", +"749383c2": "freezeUserFunds(address,uint256,uint256)", +"749388c4": "burn(uint256,uint256,address)", +"74941603": "tSale()", "74942868": "rate8_end_at()", "74942c0f": "tokens_received()", "7494ad81": "judge(uint256,address)", +"74950be8": "agrimmBlock()", "749510d4": "BOUNTY_FUND()", +"749535a4": "maxFee(address)", "749555cd": "toggleIsLive()", +"74955c42": "mintThenSwap(uint256,uint256,uint256,address,uint256,bytes32,bytes)", +"7495781c": "getRefstake()", +"74958e35": "totalRewardsPaid()", "7495a1e4": "buyFor(string,address)", +"7495bf06": "fragmentsLastUpdateTime()", +"749696ee": "INITIAL_DISTRIBUTION()", +"74972557": "juniorBondsMaturities(uint256)", "7497a061": "getAuthorDrawings(uint256)", +"74983a0d": "getRightsManagerVersion()", "749843ea": "setPlatinumAddress(address,address)", +"74989f4c": "addTransfer(address)", +"7498a0f0": "liquidatePosition(address)", "74991569": "setVestingContract(address)", "74998f33": "Infinix()", +"749a27fb": "getblockhash()", "749a47b7": "minPreviewInterval()", +"749a6378": "initiateAuction(address,address,uint256,uint256,uint96,uint96,uint256,uint256,bool,address)", +"749a6a9e": "depositToken3()", "749aa2d9": "endRound()", +"749b2bac": "m_hMerkleTreeRoot()", "749b7820": "canBuy(address,uint256,uint256,uint256,bytes8)", +"749ba7ad": "_lockFixed()", "749be0c0": "GetTotalPot()", "749c190b": "getHashsLength()", +"749c1db8": "totalEtherInvested()", +"749c778b": "setERC20TokenContractAddr(address,bool)", +"749c84c5": "addSupplier(address,bool)", "749ca1f3": "setGameOnoff(uint256)", "749cab54": "setBlocks(uint256,uint256)", +"749cd60b": "poolBUSDyTokens(uint256)", +"749d6d79": "AuctionPaused()", +"749d9a2a": "daiBuySwitch(bool)", "749db2f6": "Contract(string,string,address)", "749dd65d": "_currentMonth2ndDayTimestamp(uint256,uint256)", "749e8b88": "BUYPRICE()", "749e93fc": "actualPriceDivisor()", "749ea598": "leaders(address)", +"749ebfb8": "setData(bytes32,bytes32)", +"749f1044": "feeTaker()", "749f1bc3": "agendaOf(address)", +"749f9006": "setFeePercentages(uint256)", +"749f95bf": "reserveType(address)", "749f9889": "changeAllowedRecipients(address,bool)", +"749f9f9a": "kolp()", "749fe7c4": "getPlayerEnergy(uint32)", +"74a00922": "callSync()", +"74a01fc2": "blockeds(address)", "74a042b5": "ClaimEthersEvent(address,uint256,uint256,uint256,uint256)", "74a0cd8c": "getCombinedWarriors()", +"74a10fda": "_closerAddress()", +"74a156bd": "adminClaimProfit(uint256,bytes)", "74a205d9": "ZIMBOCOIN()", "74a25d43": "startAuction(uint256,uint256,uint256,uint64)", +"74a2781e": "CountryRemoved(uint256)", +"74a28f79": "batchExec(address[],bytes[])", +"74a2c5b2": "setSettlePrice(uint256,uint256)", "74a32dd7": "TotalAirdropRequests()", "74a37efc": "setSalary(uint256,uint256)", +"74a3a0ed": "setSiHandlerDataStorage(address)", "74a3c5d5": "getVestingAmountByNow(address)", +"74a3e086": "initialize(string,address,address,address,address,address,uint256,uint256)", +"74a45126": "getFees(address,uint256,uint256)", "74a46050": "offer(address,uint256,uint256)", +"74a4f7d1": "fetchUserShare(address)", +"74a5e509": "getLastBet(address)", +"74a650f7": "_gammaMax()", +"74a72e41": "registerAddressesValue(address[],uint256)", "74a76649": "payTheWinner(uint256)", "74a76816": "dividendsOf(address,bool)", +"74a7c801": "claimPayment(address,uint256,uint256,bytes,address)", "74a7d6b9": "initNewPlayer(address,bytes)", "74a7d77c": "sellTokensNow(uint256)", +"74a7f91b": "createIoTDataProduct(string,uint256[],uint256[])", +"74a814ca": "isUnlockedMarketing()", "74a814fe": "getGeneral(uint32)", +"74a82f69": "Finish()", "74a85571": "addAccount(address,uint256,bool)", +"74a88b8b": "pool_users_refs_deposits_sum(uint256,address)", "74a8f103": "revoke(address)", "74a93e6c": "setTokenHolder(address,address)", "74a9446e": "_removeAllActiveTasksWithHoles(uint256,uint256)", +"74a9a9c9": "results(address,uint256,uint256)", "74a9ced9": "createPoll(string)", "74a9e440": "createProposal(uint256,address)", +"74aa6cf8": "XION_RESERVE()", "74aa9e2c": "PRESALE_RESERVERED_AMOUNT()", +"74aa9fae": "dividendReceived(uint16,address)", "74aac084": "joinDelta()", "74aaefcc": "SundaToken()", +"74ab1e04": "getEstimatedTokenToETH(uint256,address)", +"74ab1f6f": "removeFromVerifiedList(address)", "74ab3e4b": "updateCardStatistics(address)", +"74ab6700": "defineOrder(string,address,string,uint256,uint256,uint256,uint256)", +"74ac10e3": "prepareCoinsForRedeeming(address,address,uint256)", +"74ac4c3f": "WETH123()", "74ac5bb4": "erc20KGS(uint8)", "74ac6112": "HOPE()", "74acb5d6": "isAirdrop(address)", "74acf0b1": "communityDevelopmentWallet()", +"74ad3a06": "triggerCallback(uint256,uint8,bytes,uint256[2])", +"74ad5c33": "proposeUpgrade(address,address,string)", "74ad74e9": "getMinLockedAmount(address)", +"74adad1d": "requests(address)", "74ae26f7": "checkReleaseAmount(address)", +"74aec856": "liquidityBuyback()", "74af10cf": "setNeedToGetFree(uint256)", "74af3ee1": "getTournamentState()", "74b00a6c": "convertNums(uint256[])", "74b04fa7": "setArtistAccount(bytes16,address)", "74b10ae5": "checkWhale(uint256)", +"74b1ad92": "PublicWhitelistUpdated(address,bool)", +"74b1cba7": "Publish(address,uint256)", +"74b1d2f7": "onPotSwapDeposit(uint256,uint256)", +"74b2037c": "boostedRewardsFirst()", "74b26fa1": "delegateReferralTokensBulk(address[],uint88[])", "74b27b9b": "indexextend(address)", "74b38531": "stopBet()", "74b39158": "validateAttack(address,address)", "74b3ee18": "getFlag(string)", +"74b40262": "bid(uint256,uint256,address,uint256,uint256)", "74b433bd": "TOKEN_SUPPLY_MKT()", "74b491ff": "airdropCurrentTotal()", +"74b49353": "claimStatus(bool)", +"74b49dc4": "openAndImportFromManager(address,address,uint256,bytes32)", +"74b4f9f6": "PUBLIC_SALE_PERCENT()", "74b527b0": "getMintedCounts()", "74b5545a": "delCertAdmin(address,bytes32)", "74b57486": "DebugContract()", @@ -66902,19 +122330,36 @@ "74b58ae7": "setCCH_edit_10(string)", "74b5fb06": "_payout()", "74b67b27": "GameCoin()", +"74b6c106": "maxNumberOfKeys()", +"74b6f66f": "claimAmt()", +"74b76a68": "NewUserRegistered(string)", +"74b7708f": "setPrices(uint256,uint256,uint8)", "74b78b26": "payeth1(address,uint256)", "74b799af": "disableEdition(uint256)", "74b874a6": "liquidationTimestamp()", +"74b95b2d": "userInfoTotals(address)", "74b9dc6b": "assertEq9(bytes9,bytes9,bytes32)", "74b9f229": "buyTokensPreSale()", +"74ba4d36": "rescueTokens(address[],address)", +"74baf1b8": "balanceDir(address)", "74bb3cb4": "getOrderActualTotalRefundHelper(uint256,uint256)", +"74bc3e61": "LogAttack(uint256,address,uint256,uint256,uint256,bool,uint256)", +"74bca37e": "tokenWantDonated(address)", +"74bca413": "getModelDataSource()", +"74bd0ace": "sellNXMTokens(uint256)", "74bd6261": "AdsVenture()", +"74bdb372": "lastChangeBlock()", "74bdb7ee": "createApprovalEvent(bool,address,address,uint256)", "74bde311": "scheduleNewDerivativeToken(address,uint256)", "74be3c7f": "TRONV()", +"74be7592": "addSystem(address)", +"74bf7908": "changeCommunityAddress(address)", +"74bfb426": "setBudget(address,uint256)", "74bfb965": "addNewProxy(address)", "74bff257": "getCartItemInfo(address,uint256)", +"74c0643d": "maxWeiPerUser()", "74c06f5d": "saleHasFinished()", +"74c1098a": "yieldxStakersPercentScaled()", "74c1328a": "bytesToUInt(bytes)", "74c13fda": "defaultToken()", "74c1438c": "DeepGold()", @@ -66924,67 +122369,128 @@ "74c1d7d3": "_best(address,address)", "74c21059": "totalInvested(uint256)", "74c272b7": "Begin(string,string)", +"74c38e27": "unconfirmedPotatoYield()", +"74c3cecd": "updateQuangDuong(uint256,uint256)", +"74c3d9ae": "depositBenefits(uint256,uint256,uint256)", +"74c3e713": "applyTokenOf(address,address)", "74c40f2e": "dexTestTransferFrom(address,address,address,uint256)", "74c42e5d": "setuserlevel(address)", "74c43f26": "setFundariaBonusFundAddress(address)", +"74c50db4": "messagesArray(uint256)", "74c57fa1": "LogTeamTokensDelivered(address,uint256)", "74c65206": "Buy_Offer(uint256,uint256,uint256)", "74c6bd74": "privateSaleLockEndTime()", +"74c6c454": "delegation(address,bytes32)", +"74c6ea5c": "convertFor(uint256)", +"74c6f719": "isDJ(address)", +"74c71883": "assignEST()", "74c77b52": "SetupToken(string,string,uint256,uint256,uint256,address,address,uint256)", "74c80467": "createNewElections()", +"74c83ab8": "getAcumulatedFees(address)", "74c85591": "fundDepositAddress()", +"74c8a70f": "ptest()", +"74c8b88f": "setXmonNFT(address)", +"74c8c611": "totalEthClaimed()", "74c90d0d": "sellAllCookies()", "74c950fb": "TOKEN_TOTALSUPPLY()", "74c97c99": "manaToken()", +"74c9ab07": "BACTIONS()", +"74c9d42c": "deleveragingStepCount()", +"74ca45f9": "LOG_ForciblyRequest_CallbackOraclize(address,uint256,uint8)", +"74ca6745": "newERC20Wrappers(uint256[],string[],string[],uint8[])", "74cad0b7": "ForTester()", +"74cb3041": "lastProposalId()", +"74cb4e77": "addGeyser(address,address)", "74cb55fb": "fundsDistributor()", +"74cbd36e": "cashedOut()", +"74cc4804": "approve_314(address,uint256)", "74cc991c": "getBetValue(bytes32,uint8,uint8)", "74ccd7cc": "walletLock(address,uint256,bool,bool)", +"74cce4b5": "user_usdtdeposit_amount(address)", "74ccf06f": "addParsel(uint256,uint256,address[])", +"74cd0c40": "Bids(uint256)", "74cd5a31": "HXTtoken()", "74cd5c0b": "getOneWithdrawRec(uint256)", +"74cd694e": "energyObj(uint256)", +"74cdc0cf": "approve_498(address,uint256)", +"74ce052a": "pushOutcomeAndTransferAll(bytes32,uint48,uint48,bytes32,address,bytes)", "74ce52ce": "Kildoneum()", "74ce9067": "isCommitPhase()", "74ce97fe": "year3LockAddress()", +"74cf63ee": "isSafetyOn()", "74cf6f49": "withdrawNoLimit(address,uint256)", "74cfa35f": "ambassadorAddressOf(address)", "74d04f83": "addtoPrivateSale(address,address,uint256,uint256)", "74d050fb": "cardNumbersOf(uint256)", +"74d0a676": "addMember(uint256,address)", +"74d0f537": "hatch(uint256,address,uint32,uint8)", +"74d12643": "approve_337(address,uint256)", "74d15357": "virtualc()", "74d16c37": "getAssetsValue()", +"74d18447": "priceAtBid(address)", +"74d1a827": "UUIDAdded(uint256,string)", +"74d1bc8c": "ora()", "74d1eb3f": "MANToken(string,string,uint256,uint256)", "74d21ae0": "unlike(uint256)", +"74d24065": "vtoken()", "74d301d6": "sizeBonus()", +"74d317ba": "signalConfirmationMaxTime()", "74d33745": "REAPER_INTREPID_FTL_SPEED()", "74d3475c": "PowerofBubble()", +"74d35864": "totalLockedPreETHAmount()", "74d393f0": "setValue2(uint256)", "74d3b7cd": "LTR3Token()", +"74d41fa4": "captainIndxToCount(uint32)", "74d42916": "IINEToken()", "74d4ab27": "fipsRegister()", "74d50c1c": "TOPB()", +"74d523a8": "isUserAdmin(address)", "74d53cc2": "sendReferral(address,uint256)", "74d55ceb": "Rhemaxcoin()", +"74d5e100": "userRoles(address)", "74d5e1ea": "setteam(address,uint256)", "74d5f2aa": "BoxTrade()", "74d618cb": "setTransferActive(bool)", +"74d6588b": "purchaseLP()", +"74d66ecf": "setPriceForTokenList(address[],uint256[])", "74d699b6": "Sale(string,uint256,address)", +"74d6a01f": "getNumberOfDownPredictors(uint256)", "74d6aa1f": "getOrCreateFeeWindowForForkEndTime()", "74d76bc4": "_getGameInfoPart3(address,uint256)", +"74d7c62b": "fundingPeriod()", +"74d7ff47": "rxp_seed_amount()", "74d88c50": "submitEthToTokenOrder(uint128,uint128)", "74d89c47": "testUpdateNameDb()", "74d8b268": "getGunByIdPart1(uint256)", +"74d945d9": "swapOut(uint256)", +"74d96c23": "SetTokenDelegation(address,address,address)", "74d9c2ef": "tokenTosale()", +"74da0452": "OperatorTransferred(address,address)", "74da564f": "registerMeOnTokenCore(address,address,uint256,string)", +"74da8841": "adaptParam(uint256,uint256)", +"74da9fd2": "accTotalDeposit()", "74dacc7a": "m_attaching_enabled()", "74daf5cc": "setValidPriceDurationInBlocks(uint256)", +"74db07d8": "addTokenPauser(address)", "74db5b27": "totalOf(uint256[])", +"74db7757": "setTokenAdapterAddress2(address,uint256)", +"74dbbbe2": "FeeSet(uint256,uint256)", "74dbe5e6": "GetSpud(address)", +"74dc0a63": "toppedUpCToken()", "74dc1e04": "TokensDestroyed(address,uint256)", "74dcfd37": "NotakeyVerifierForICOP(address,address)", +"74dd0a67": "AddOwed(address,address,uint256)", +"74dd278c": "getVotePhase()", "74dd7be9": "setCompte_42(string)", +"74dd832c": "raresupply2()", +"74ddcc0c": "SOX()", +"74de1d29": "stakeDai(uint256)", "74de4ec4": "addReward(uint256)", "74de8caf": "ERC20transfer(address,uint256,bytes)", "74de9ebb": "MintEvent(uint256,address)", +"74deebae": "RealValue()", +"74df19c3": "dailyRate()", +"74df39c9": "finalizeStartingIndex()", "74dfcabc": "changeFreezeTransaction(string)", "74dff9d8": "stopCycle()", "74e00730": "DISTRIBUTION_COMMUNITY()", @@ -66993,7 +122499,10 @@ "74e104d3": "BITWORKCOIN()", "74e24367": "ownedTokensIndex(uint256)", "74e29ee6": "deleteService(uint256)", +"74e336db": "KycVerified(address,address,uint64,uint256)", "74e4435f": "getUserAddress(uint256,bytes32)", +"74e45f64": "wantPrice()", +"74e47a1e": "holderTaxAlloc()", "74e4f31d": "ZJLToken()", "74e5530d": "testHasRole()", "74e57397": "BrandUpdated(address,address,string,bool)", @@ -67001,224 +122510,420 @@ "74e5b122": "changeGenerator(address)", "74e5b186": "_mint(string,address)", "74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"74e699ca": "minDown(uint256)", +"74e7153d": "TREASURY_FUND_POOL_ALLOCATION()", "74e7493b": "changeRate(uint256)", "74e74f24": "rulesProposal(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "74e8288c": "SaiContest_Gaia()", "74e861d6": "getHubAddr()", +"74e889c9": "LIQUIDATION_DEADLINE()", +"74e8ae1e": "pushedEthLiquidity()", +"74e8bc4a": "gMin_()", +"74e8ea35": "getGrantVestingDurationLeft(address)", +"74e94deb": "getEndTimestamp()", +"74e9544b": "porscheToOwner(uint256)", "74e95828": "_distributeWinnerAndLandholderJackpot(uint256,uint256)", +"74e98147": "memberwithdraw(address,uint64,uint256)", "74e99f87": "AIWEBToken()", +"74e9a513": "upbasePeriod()", "74e9e102": "GetTempStuffList(address)", +"74ea5cd6": "isTimeframeExist(uint256)", "74ea9437": "transferICOToken(address,uint256)", "74eac2e6": "Beruqtoken()", "74ead7b7": "unstakePrimordialTokenFrom(address,uint256,uint256)", +"74eaed63": "StartShipping()", +"74eb1e5f": "books(address)", +"74eb313d": "setupBases()", "74eb7c90": "withdrawSaleManagerBalances()", "74eb936b": "ethQuantity()", "74eb9b68": "isAccountLocked(address)", "74ebe3ec": "isSet(address)", +"74ec0624": "token0Raised()", "74ec8682": "walletForETH()", "74ec89cb": "H2CToken()", "74ecf4b5": "getWinningNumber(uint256)", +"74ed31c1": "safeGoldTransfer(address,uint256)", +"74ed9ae4": "implementationPro()", +"74ee73c3": "delegatecallSetN3(address,uint256)", +"74ee9e07": "checkRefBalance(address)", "74eead66": "SFT_PER_ETH_SECOND_EARLY_BIRD_RATE()", "74eedd46": "fundingEndTime()", "74ef109b": "ChinaLifeCoin(uint256,string,uint8,string)", +"74ef62dc": "swapROTforMAGGOTwithROTAmount(uint256)", +"74efc0aa": "gAC()", "74f0314f": "SECONDS_PER_DAY()", +"74f0439d": "getHash(uint8,address,bytes32)", "74f059ad": "dateDefrost()", "74f0765a": "mintSeq(address[])", "74f079b8": "txCounter()", "74f12933": "devPaid()", +"74f1649a": "getContractAddressLocator()", +"74f1b02a": "getSaleableBalanceToken()", "74f1d6ce": "keccak(address,address,uint256)", +"74f2153e": "DELTA_FINANCIAL_MULTISIG()", +"74f2272d": "callerCompensationMolecule()", +"74f22fb5": "isArrAccountIsLock(address)", +"74f237c4": "changeRewardRate(uint256)", +"74f28997": "mintCollectedTkns(address,address,uint256)", "74f28eaf": "_set11()", +"74f2f0e4": "getActiveMiners(address)", +"74f4783e": "endOfSale()", "74f47a7a": "nextDrawTime()", +"74f4f671": "safeDiv128(uint128,uint128)", "74f519db": "setLastTimestamp(uint256,uint256)", +"74f52275": "setRecommendedToken(uint256)", "74f569e7": "EriCoin()", "74f61642": "rewardsRedeemed()", +"74f6c562": "commitBlock(bytes32)", +"74f724b2": "CurrentRound()", "74f760e4": "WithdrawWinnings(uint256)", +"74f7613b": "increaseKeyCount(address)", "74f78412": "market_DeclareBid(uint256)", "74f78437": "FD(uint256,string,uint8,string)", "74f79c8e": "DEFROST_INITIAL_PERCENT()", "74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", "74f8f7ac": "increaseUpdateMetadataCounter(uint256)", "74f91b56": "setXTVNetworkContractAddress(address)", +"74f99940": "payfixedpersonal()", "74fa01c9": "MilcToken()", +"74fa05fb": "minimumRaiseNotAchieved()", +"74fa0a63": "daiAddr()", "74fa4874": "getResultStatus(uint256)", "74fa98f5": "setInviteCodeFree(string)", +"74fb0aa7": "getByID(uint256)", "74fb381a": "inject(address,address)", +"74fb75c3": "DidSettle(bytes32)", +"74fb7b1a": "EGGS_TO_HATCH_1GOOSE()", "74fbbc86": "rate(uint256,uint256,string)", +"74fbd87a": "changeReceiveAddress(address)", "74fc27c1": "xfitcoin()", +"74fca19f": "EvConfimAddress(address,bytes16)", "74fcd919": "tokenMsg()", "74fd08cd": "whatSatoshiSays()", +"74fd4655": "totalFounders()", "74fd6176": "removeBulk(address[])", +"74fe2916": "initialize(string,address,address,uint256,uint256,uint256,uint256)", +"74fe2ad5": "voteSize()", "74fe6dea": "nameCat(bytes5,bytes32)", "74fe9247": "AddRevocationBounty(bytes32)", "74fefa2c": "findEndpointByAddress(int256,address)", "74ff2324": "requestMinimum()", "74ff32e9": "_percUp(uint256)", +"74ff6b90": "getCurrentRewardsRound()", "74ff90ba": "Disbursement(address,uint256,uint256)", +"74ffc143": "getOutUsdt(address,uint256)", "74ffdcd0": "WEI_PER_ETH()", +"75008441": "IcoCoinsIssued(address,uint256)", "75012c35": "setBonusTokenInDays(address,uint256,uint256)", "750142e6": "totalReward()", +"75014c5e": "LogUpdateFundraiser(address,bool)", +"750177f4": "VotingisComplete()", "7501f741": "maxMint()", "750225d0": "completeSale(uint256)", "750240a2": "setMaxResolvedAgonId()", "75030996": "getServiceName(address)", +"75030f9c": "signerFee()", +"7503110a": "NewNeedApprovesToConfirmRequestCanceled()", +"75033a84": "getReserveFromLp(address)", +"7503a613": "convertSubB()", "7503af06": "Test9J()", "7503cda7": "getLogOwnerAddr()", "7503cda9": "thinkLength()", "7503e1b7": "tournaments(uint256)", +"75042dee": "getRefFriend(address)", +"75043771": "teamLockLength()", +"75043ebb": "addCandidate()", "750446a3": "howManyTokensAreReservedFor(address,address)", "750482ba": "ownersBalance()", "75048ebd": "claimUnsold(address)", "7504aaaf": "updateTargetedMoney(uint256)", +"7504f9cb": "setInflationTime()", "750509ba": "getStateRoot(bytes,bytes32)", +"750521f5": "setMetadataURI(string)", "75052882": "modifyProductPrice(bytes32,uint256)", "75056811": "accountClaimedReward(address)", +"75057e1d": "getRarityName(uint8)", +"750588cf": "pendingRoot()", +"7505dea3": "submitTransaction(address,uint256,bytes,bool,uint256,bool)", "75067219": "MAX_UCCOIN_SUPPLY()", +"7506c8ce": "redeemSingleAddress(address)", +"7506f534": "milkPerBlock()", "75071c4c": "founderFund()", +"75073012": "SetSaleContract(address)", "750732ec": "addVineyardByRegulator(string,string,uint16,uint24,uint32,uint16)", +"75078e64": "unGreyListAccount(address)", "7507b2e5": "OVOToken()", "7507ba39": "remit()", +"75081fe7": "rebornMonsterIds(uint256)", "750852b3": "test_invalidThrowWithAsserts()", "7508f147": "setOperationalReserveAddress(address)", +"75090b67": "walletTokens(address,uint256)", "75090ebf": "changeDomain(uint256,uint256,uint256,address)", +"750a11d4": "backX8()", "750a687c": "GetRevealBlock(bytes32)", +"750a7ea3": "updateEarlyClaim(uint256)", "750a96ac": "_createPermission(address,address,bytes32,address)", +"750b2631": "FAILURE_WHITELIST_TRANSFER_LIMIT()", +"750baf29": "AdvisorAdded(address)", +"750c450d": "calculateUsdAmountFromTokenAmount(address,uint256)", "750c47a1": "TOKEN_PER_ETHER()", +"750c4aad": "queryUserRPOSStatus(address)", "750c77cb": "AccountMinterRemoved(address,address)", "750cae6a": "enableBetting_only_Dev()", +"750cb902": "addValidator(bytes,bytes,bytes,bytes32,uint256)", "750cc645": "_sendToken(address,address,uint256)", +"750dd2a1": "stakeAmountByCurrentEpoch(address,address)", "750dd523": "getContractCreationTxOrigin()", +"750dd953": "giveHeroRandomRarity(address,uint16,uint256)", +"750dfb66": "revokeContract(uint256)", "750e1f59": "transfer(address,uint256,bytes1[])", "750e443a": "voteAgainst(uint256)", +"750e6bbe": "PaymentReceived(address,uint256,uint256,uint256)", "750e75d5": "distributeJackpot(uint256)", "750ee24a": "changeIcoEndBlock(uint256)", "750f0acc": "withdraw(uint64)", "750f2d81": "ChangeFreezeTime(uint256,uint256)", "750f7daf": "hashBiometricTemplates(string,int256,string,string)", "750fd1d1": "startTimeRefund()", +"751014ff": "mapAddressPass(address)", +"75103e15": "_REVERSE_()", "7510a98c": "updateConfig(uint32,int256)", "7510c5a0": "encoding_description()", +"7510c86e": "joinfarm(address,uint256,uint256,uint256)", +"7510f47a": "defi99Rate()", +"7510f962": "nullifyTokenList()", +"75111276": "wasEverSetForSale(address)", +"75114b19": "reCreateAuction(uint256[])", "75114bcc": "addPhrase(string)", "7511828e": "Laxz()", "7511ef65": "setWithdrawAddr(address)", "7512071b": "doApprove(address)", "75121c2c": "FCOIN1448Token(uint256,string,string,uint256)", +"75123ff9": "dodoToken()", +"75128141": "calculateTaxFee(uint256)", +"751293ef": "SubdomainCreated(bytes32,address)", +"75130454": "ROUND_2_CAP_MIN()", "751318f4": "bountyAdded()", +"751329f6": "exactTokensForEth(uint256,uint256,uint256,address)", "7513eaa7": "HolyCoin()", "75143ef2": "mintFinished()", +"7514d3b2": "cTokenContracts(address)", +"75151b63": "isTokenSupported(address)", "75151f6b": "addCountryCode(uint256)", "751559e8": "transactionfee()", "7515b583": "exchangeCoin(uint256)", "7515b84a": "releaseRoto(address,bytes32,uint256)", +"7515d155": "mintCostBNB()", "75160a20": "pay_royalties()", +"7516147a": "lastElectionId()", "751634d9": "ChangeRules(uint256,uint256,uint256,uint256)", +"75165280": "commits(address,bytes32)", +"75166a42": "periodUtil()", "751686f7": "_maint_setBlockLimit(uint256)", "75172a8b": "reserves()", +"75173b70": "ifManager(address)", "7517b57e": "withdrawTaxEarning()", +"7517e781": "fake_revert(uint256)", "7517ea47": "configureSale(uint256,uint256,address,uint256,address,address,address,address)", "751823f2": "changePartnerCoinPercentage(uint256)", "751827ac": "setRareAddress(address,address)", "7518af71": "VGWToken(address)", +"7518c965": "feesBalance()", +"7518d35c": "tag(string)", "7518fa98": "tokensContract()", +"751981eb": "Gratoken()", "7519dd8e": "starsOf(uint256)", "751a0225": "addElement(address,bytes32)", "751a2d06": "Token_4()", "751a9108": "balancesof(address)", "751accd0": "executeGovernorProposal(address,uint256,bytes)", +"751ad560": "registerFunctionCall(bool,bytes4,address,uint128)", +"751bac5e": "recoverFrozenFunds(address,address,uint256)", "751c4d70": "contributeDelegated(address,uint256)", +"751c7ec0": "arbitrationCases(uint256)", +"751ca47c": "calculateAmountForArbitrage(address,bool)", "751ce8fb": "sendRewardBlockCDN(address,uint256)", +"751d0334": "getWalkerInformation(address,bytes32)", "751d9e65": "WALLET_FOUNDER()", +"751db42f": "sendDarkCockToFund(uint256)", "751e1079": "compareAndApprove(address,uint256,uint256)", +"751e9a9c": "disableAdmin(address)", "751ecea0": "FUTURE_DEVELOPMENT_POOL()", +"751edc1e": "Stage(uint256)", "751ef753": "toggle(uint256)", +"751f3212": "updatePool(address,uint256,uint256,uint256)", +"751f4891": "isEliminated(uint256)", "751fef65": "sellUnit(uint256,uint256)", "7520320f": "registerCustomer(address)", +"7520588c": "testfive()", "7520767f": "createNew(string)", "7520bf60": "gas_price_max()", +"752132dc": "registry_instance_info(bytes32)", +"75214073": "EtherBoxDeleted(address,bytes32,address,uint256)", "75217477": "Debit(address)", "75218a54": "getUserReactionCount()", "75219e4e": "transfer(address,address,uint256,bool)", +"7521b0f0": "notifyRouter(address)", "75229e28": "lockcheck(uint256)", "7522aff5": "rejectContract(bytes32)", +"752312a9": "mintToken(uint256,string)", "752329ec": "retainedEarning()", "7523a46e": "HARITECOIN()", +"752430df": "proposals(uint256,address)", +"75243a90": "setBirthCount(uint32,uint256)", +"7524446a": "AuthorizerAdded(address)", +"75247a58": "approval(address,uint256)", "75247ccb": "_calculateReward(uint256)", +"7524f4e3": "maxWeiPerBlock()", "75250e85": "limitDateCrowdWeek1()", +"75253aef": "settleRecommend(uint256,uint256)", "752551c9": "_END_DATE()", "75257013": "appendToDistributionList(string,address,uint256,uint8)", +"7525c371": "_withdrawEthFees(uint256)", +"7525cd90": "teamIndexToOwner(uint256)", "7526f98c": "getMin(uint16[])", +"75272043": "ONE_HUNDRED_PERCENTS()", "7527313d": "minedBlock(uint256)", "75286211": "finalizeChange()", "75287bab": "fetchAllResultByIndex(uint256)", "75288d95": "platformSupply()", "7528a6ab": "icoPhase4Start()", +"7528e215": "bCList(uint256)", "75298734": "getShare()", "7529b1d9": "upgradeHasBegun()", +"7529c202": "feedInventory()", +"7529e973": "_setClassProperty(bytes32,bytes32)", "752a3df6": "transferIfHardForked(address)", +"752a50a6": "updateInterestRate(uint256)", +"752a9a9c": "activeIndexes(uint256)", "752b016d": "DeletePatient()", +"752b45f4": "tokenizeOption(uint256)", +"752b46bd": "COMPANY_MANAGER_ROLE()", "752bacce": "getExecPrice()", +"752baf5f": "getRewardPercentageInPrecision(address,uint256)", +"752bb600": "calArberNum(address,uint256,bool)", +"752bc81a": "bonusPerShare()", "752bece8": "Minus(uint256,uint256)", "752bf6f8": "sale_pause()", "752c5628": "callSend(address,uint256)", "752c8777": "setArenaPool(address)", +"752c8daa": "ethtoeosAddress(address)", +"752d1548": "globalBlessPrice()", "752d2bfb": "addDividend(uint256)", "752d349c": "depthCheck(int256,int256)", +"752d49a1": "addTip(uint256,uint256)", "752da85a": "endContribution()", "752dd0dc": "unfreezeBonuses()", "752dd635": "ETHButton()", +"752e1d89": "getfCashToCurrentCashAtTime(uint32,uint128,uint32)", +"752eec52": "_addToAllStatistics(uint256)", "752efafc": "TIER5_RATE()", "752f3c8c": "relinquishOwnershipAddress()", +"752f5708": "OneMoonPrize(address,uint256)", +"752f67d4": "stakeTokens(uint8,bool,uint256)", +"752f9214": "getOwedLP(address)", "752faa51": "setLockedGroup(uint8,bool)", "752fc70e": "howManyEthersToChangeSymbolName()", +"75302c39": "enableUserLpLimit()", +"75305fc6": "closePrsale()", +"75308d2e": "ContactNumber()", "7530b54d": "PRESALE_LEVEL_3()", +"7530b9de": "setwethdai()", +"7530be6c": "newRegister(address)", "7530d99d": "addForgivedChar(string)", "7530fe1d": "getContractMessages(uint256)", "753117ff": "stealTheLeek()", +"75312e47": "transferOwnershipAccept()", +"75319644": "getEthToDaiFee(uint256)", +"753199be": "quienHaGanado()", +"7531d1b2": "getCurrentClaimedAddresses()", "7531e032": "resolveExchangeAddress()", "75321c35": "TransferAgentSet(address,bool)", "75321c4a": "getOpen(uint256)", "75322e47": "change(uint256)", +"7532b091": "getLengthOfClaimSubmittedAtEP()", "7532b4ac": "percent(uint256)", +"7532d824": "testInvest(address,uint256)", "7532eaac": "signedTransfer(address,address,uint256,uint256,uint256,bytes,address)", "7532ef1c": "accRecive()", +"75330737": "tooglePause(bool)", +"753331d9": "getAdminCommission()", "75335702": "GSDToken()", "753384fa": "TOKEN_BONUS_RATE()", "7534a714": "checkExpectedTokens(address[],uint256[],uint256)", +"75353197": "ProtectionTxVoteRevoked(bytes32,address,bytes32)", +"75354919": "OnConvertContractSet(address)", "75355e34": "giveExchangeRateAdvice(uint256)", "7535679a": "faucet(address,address)", "7535927a": "importAmountForAddress(uint256,address)", "7535c930": "priorityCap()", +"7535d246": "POOL()", +"7536185e": "callchecked(address)", +"75365c80": "timeCost(uint32)", "75367ab5": "addToWinners(address,uint256)", +"75367c4f": "CheckPairFromTokens(address,address)", +"75368064": "IMP12()", +"7536a01f": "genesisStaking()", +"7536a291": "priceCumulativeLast(uint256)", +"75371a62": "who(uint256,address)", +"75380df6": "setMintCoefficient(uint256,uint256)", "75383265": "TON()", "753868e3": "lockContract()", +"7538721e": "lastamountToRepay()", "753899e9": "alive()", +"7538e252": "sendTokensPerWei(address,uint256)", +"7538eecf": "Unstake()", "7539189c": "getData_3()", +"753956cf": "m_2TimesThreshold()", +"75395a01": "changeTrade(address)", "75395a58": "finalizeBlock()", +"7539e666": "Processed(address)", "753af202": "SpermToken()", "753b0dc1": "createFashion(address,uint16[9])", "753b8c02": "EthernautsMarket(uint256)", "753c619c": "emitTransferEvents(address,address[],uint256[])", +"753c7d52": "allMlp(uint256)", "753ca259": "PiXS()", "753cb4eb": "fetchVoteNumForCandidate(address)", "753cba93": "isPlatinumLevel(address,string)", +"753d3d09": "get_price_index()", +"753d7159": "getwithdrawalPool()", +"753d7563": "tokenWhitelist(address)", "753d764c": "unlistSubName(bytes32,bytes32)", "753d93e4": "changePlatform(address)", +"753da312": "RemoveLiquidity2PairTokenWithPermit(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "753ded15": "failsOf(address)", +"753e1457": "length_global()", +"753e7889": "wrap1(address,bytes32,uint256,uint256)", "753e88e5": "upgradeFrom(address,uint256)", "753ea1be": "_transferCoins(address,address,address,uint256)", +"753ec103": "proposal()", "753ed1bd": "ceiling()", "753f313f": "setPOOL_edit_26(string)", +"753f3f15": "TOKEN_PARTICIPATION_FEE_FRACTION()", +"753f40ca": "RemoveAdmin(address)", "753f416a": "send1(address)", +"753f6b07": "addReward(bytes32,uint256)", +"753fd5a0": "fatShare()", "75401eac": "_isSaleContract()", +"7540a891": "ContractBonus()", "7540b097": "inflateCount()", +"7541f41c": "taxPercent()", +"754215a1": "box()", "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)", +"7542ff95": "stakeManager()", +"75430ab5": "setMaxSpreadPercentage(uint256)", "75432ec4": "setStorageFee(uint256,address,uint256)", +"75436ecf": "Realizar_Pago(address)", "75438e49": "fillGas()", "7543af9c": "amount3()", +"7543e286": "LogChangeMakerDAO(address,address,uint256)", "7543e3f0": "setReferral(address,address)", +"75446e49": "callRetryWithdraw(uint256)", "7544ac1f": "CSAToken(uint256,string,string)", "75456b49": "fillIndexedBidByAddress(address,uint256)", "75457583": "Return(address,address,uint256)", @@ -67226,49 +122931,86 @@ "7545f9a1": "processTicketBuying(string,uint256,address)", "7546006b": "ContractCall(address,uint256)", "754628d0": "cancelTopUpLimit(uint256)", +"75474cd2": "addTokenBonus(uint256)", "75479c34": "newPlayer()", "7547c7a3": "stakeTokens(uint256)", +"7547fa04": "maxETH(address)", "7548014d": "recoverOnlyOnChainFunds()", +"7548caf0": "tell_balance()", +"7548cb94": "proposeByBoth(address,address,bytes)", "7548f65b": "END_AMOUNT()", +"75490068": "finish(address,uint256,uint256,uint256)", +"7549487c": "withdrawA()", +"754960e7": "cancelJoinGame(uint256)", +"7549f5c1": "settleCollatteralRation(uint256)", "754a347a": "transferViolated(string)", +"754a4641": "suspendPynthExchange(bytes32,uint256)", "754a77f5": "fcc()", +"754aa7e7": "RoundStop(uint256)", "754ad981": "MoveFish(uint256,uint256)", +"754b199c": "SetLPTargetPostion(uint256)", +"754b2707": "getRatio(address)", +"754b997f": "withdrawAvailableToken(address,uint256)", "754b9e3d": "hashFromHash(string)", +"754bdfff": "megaPoolGain(uint256,uint256)", +"754bf0aa": "setMinSurplusAuctionBidIncrease(address,uint256)", "754c16e8": "getAmountOfProposals()", "754c175e": "getTip()", "754c301d": "sumOfFreezing(address)", "754c3957": "benecifiary()", "754c67ad": "setTokedoToken(address)", +"754d1d54": "initialize(uint256,address,address,address)", "754d71e7": "getCurrentBuyOffer(uint32)", +"754db5ce": "did_address_sign(address)", "754db89b": "gameExists(bytes32)", "754dea40": "setBackendOwner(address)", "754e0b74": "solveDispute(bytes32,address,bool)", "754e1764": "DiceRoll()", "754e1e8e": "invalidateEarlyPurchase(uint256)", +"754ed54b": "getNumberToken()", "754efc98": "throwOnGasRefundFail()", "754f579d": "ownerSetGameName(string)", "754f9b37": "BasicAccessControl()", +"754fc38c": "createNewToken()", "754fd352": "addOwnerFromRecovery(address,address,address)", +"75502d3c": "liquidationCRatio(bytes32)", "75504b6e": "getAwardCost(uint256)", +"7550a47a": "makeCombinedTransaction(address,address,uint256,uint256,uint256)", +"755138e1": "freshWhiteList(address[])", +"75520e1b": "feedMap(bytes32)", "75524ffd": "mintBase()", "75526ed5": "setServiceAccount(address,address,bool)", +"75529fe4": "calle()", +"7552c5c5": "updateTotalSupply(uint256[2])", +"7552ff5d": "normalStars(uint256)", "7553044b": "setUserServerPermission(address,string)", +"75535abb": "internal1()", "75543074": "getOrganisation(uint256)", "75545949": "countMails()", "75545cb2": "processMyVestingRules()", "75549490": "isEarlyBird(address)", +"75549516": "setPaymentReleased(uint256)", +"7554bfaf": "loss_rights(address)", "7554fffd": "successFee()", "75556e32": "totalMaxBuyin()", "7555bfd7": "exchangeAndWithdrawToken(uint256)", +"7555e092": "getStakingTimestamp(address,uint256)", +"7555ff32": "approve_436(address,uint256)", "7556c9e9": "SilentNotaryToken()", "7556e07f": "hasRate()", "75570ea7": "closeBets(uint256)", "7557b2ae": "Advertisement()", +"755811ed": "onBuyAndDistribute(uint256,uint256,uint256,uint256,uint256,int256)", +"75583e0f": "tradersVolume(address,address)", +"7558541e": "defibase()", +"755871b7": "seasonalProcessed()", "7558d81e": "contractProgress()", "7558d9a6": "wallet_Mini_Address()", "75593a39": "fixPrice()", +"75596c2a": "addSomeStuff()", "755a11dc": "winnersPot()", "755a29f4": "set_minCWCsPerSaleMoreThan(uint256)", +"755a6d06": "balance_u(address)", "755a8d31": "getBattleTeamSize()", "755b5b75": "setNumUnits(uint256,uint256)", "755b9d63": "_addOrder(address,uint64)", @@ -67276,104 +123018,187 @@ "755c020e": "withdrawALTokenss(address)", "755c30a4": "earlyInvestorsBonus()", "755cc41e": "mintTimes()", +"755cc96b": "approve_13(address,uint256)", +"755d164a": "coolingState(address)", "755d43d3": "calculateAmountReceived(uint256)", "755d766c": "s27(bytes1)", "755d80ab": "MintDarioToken(int256,address,int256,uint256)", "755d98a3": "getTotalDividendPool()", "755db762": "addVestingAddress(address,uint256)", +"755db7b3": "useControlToken(uint256,uint256[],int256[])", "755dc018": "FANBASEToken()", +"755e3ca9": "setPoolDivisor(uint256)", "755e3e28": "tokensAllocated()", +"755e67b1": "setDataSource(address)", +"755edd17": "mintTo(address)", "755f047b": "projectDescription()", "755f12db": "totalTokensSoldInThisSale()", +"755f27ed": "dcsusdtLPPool()", +"755f5196": "addOffer(uint256,uint256)", "755f99c2": "AddNewSmallContract(address)", "755fa815": "getAllIndexesByAddress(address)", "755fd25c": "mintEditionCards(address,uint8,uint8)", "75608264": "get_hash(uint8,bytes32)", "7560a8d9": "_devTokens()", "7560cab5": "createListing(bytes5,uint256,uint256)", +"756120cd": "setDecentralandOperator(address,address,uint256)", +"75614a47": "max_allowed()", "75619ab5": "setDistributor(address)", +"7561dfbc": "setSushiMine(address)", +"756224c6": "getAssetManagerFee(address)", "7562b0cf": "process(address,uint256)", "7563113b": "mintPromoEtherBro(uint16)", +"75638e5f": "changeTimes(uint256,uint256,uint256)", "7563c81f": "WorldBetToken()", +"7563d33b": "unwindFunds(uint256,uint256,uint256,address)", "75640ef3": "calculateTotalMinePay(uint256,uint256)", +"75641618": "getNumberOfOdds(uint64)", "75643e1f": "setReward(uint128)", +"7564912b": "markets(bytes32)", +"7564c1da": "transferRoundstarter(address)", "75659508": "hasPayroll(address,address)", "7565a2b6": "transferTokens(address,address,uint256,uint256,uint256)", "7565d2eb": "coinfabrikAddress()", "7565ef66": "getTodayLotteryNumber()", "75661f4c": "calcPlayerICOPhaseKeys(uint256,uint256)", "75662b0e": "ChainSign()", +"756688c0": "unlockPercent()", "75669274": "XXXToken()", +"75669e89": "claim(uint256,address,uint256[],bytes32[])", +"7566d909": "updateCluster(uint256,bytes32,address,address)", +"75671d60": "addAddress(address,uint64)", "7567281d": "_addrunmoney(address,uint256,uint256)", "75678491": "AMSBToken()", +"7567a6f0": "starAttributes(uint256)", +"75680e7b": "setTokens(address[2])", +"7568272d": "getTotalIncubations()", "7568353c": "isKilled(uint256,uint8)", +"756865ec": "allAPIid(bytes32)", "7568a9af": "claimNametagToken(address,bytes32)", +"7568ace8": "Commit(address,uint256,uint256,int256)", "7568d562": "AssetToken(uint256,string,string,uint8,address)", +"756928ec": "isRegistered(bytes4)", "75698524": "UpdateUSDETHPriceAfter(uint256)", +"7569919d": "get_addr_amount(uint256)", "7569b369": "updateUnclaimedDividend()", "7569b3d7": "contributorsCount()", "756a288e": "getStageTokensSold(uint8)", "756a515f": "test_insert_findNoHintUpdateTail()", +"756a9b7a": "minkV2()", "756abb98": "timeSlicesCount()", "756af45f": "withdrawBalance(address)", "756afcab": "Mari()", +"756b0add": "getUserAccReward(address)", "756b1140": "Readings()", +"756b22cc": "pondPerMpond()", +"756b27f5": "getTotalOrder(address)", "756b397a": "GainmersSALE(uint256,uint256)", "756bae5c": "finish(bytes32,bytes32)", +"756bb153": "SwapAble(bool)", "756bf6e9": "Popcore(uint256,string,uint8,string)", +"756cc742": "atxInvestors(uint256)", +"756d100c": "_FEES_NOT_SET()", "756d5e0d": "EvGroupChanged(address,uint8,uint8)", +"756d9745": "approve_493(address,uint256)", "756dc34a": "PHASE_NUMBER()", +"756dcd13": "increaseAuthCount(address,uint256)", "756dd3a4": "getSubmission(bytes32)", +"756de201": "targetYouAmountOfPubIEO()", "756e15e5": "test_spamApproveAndFreeze()", +"756e7ee8": "mintODai(address,uint256)", +"756e8bec": "lockETH(uint256,address)", "756e8ed3": "innerGuess(uint32,uint16,uint32,address)", +"756f023d": "whatBalance()", +"756f4d0e": "GUSD_INTEREST_STRATEGY()", "756f6049": "CORE_NAMESPACE()", "756f7ce8": "fundariaStakesFrozen()", "756fb8c9": "getOptionChain()", "756feedc": "KingXChainToken()", "75700437": "query1_withGasLimit(uint256,string,string,uint256)", "757007f6": "CONFIG_MIN_VALUE()", +"75700d46": "bid(address,address,uint256,uint256)", +"757060a5": "distributeTokenProfit(address,address,uint256)", +"75708102": "_repay(address,uint256)", "757085e3": "fetchAllVoteResultForCurrent()", "7570acd4": "indVesting()", +"7570bff8": "U_status(address)", +"7570e69f": "pure_uint256()", "75718e2c": "_increaseTotalDivis(uint256,uint256)", +"7571af22": "getPendingAmount(address)", "7571ca36": "getTerminated()", +"75724589": "want(address)", "75724990": "addShareholder(address,uint256)", +"75725150": "editStream(uint256,uint256)", +"7572784c": "createOther(address,address)", +"7572e6ab": "tokensLeftAtCurrentRate()", "7572ead0": "halfyearteam()", "7572f341": "subtractWee(uint256,uint256)", "757387d0": "nextInListToReturn()", "75749f52": "LOCKED_BOARD_BONUS_TOKENS()", +"7574e786": "setUserUseReserveAsCollateralIfNeeded(address,address,address)", +"7574fa7d": "Dd(address)", "757501c5": "districtsCore()", +"75752a50": "CrowdsaleClosed(address,uint256)", "7575594b": "buyShip(uint16)", "7575884d": "InTokenTest11(uint256,string,uint8,string)", "75759319": "wthdraw(address,uint256)", +"7575aa8a": "MODIFIER_ROLE()", "7575db0a": "invalidateCache(bytes32)", "7575ecf6": "validateAndLower(string)", "75765249": "saveLottery(uint32,uint256,uint256)", "75766294": "teamPeriodAmount()", +"75774100": "refundTicket(uint256)", "757765f8": "setMaxBuyLimit(uint256)", "75776fa4": "createPromoPony(uint256,address)", "7577732e": "createController(address,address[],uint256)", +"7577ca37": "drugCount()", +"7577dec1": "withdrawAllCalled()", +"7577e98e": "libraryIndexToApproved(uint256)", "75780127": "testExecuteSellOrderShouldIncreaseBuyerTokens()", "75785afc": "createDefaultGen0CobeFriend(uint256,address,uint256,uint256)", "757861eb": "start_play_and_gain(string,string)", +"7578b9fe": "approveTokenToCandyShopArber(address,uint256)", "75790787": "getFeeCollectedByAsset(address)", +"75792143": "setLastMintedNFTId(uint256)", "75792f0d": "_transferToICAPWithReference(bytes32,uint256,string,address)", +"75793cc3": "revealOpen()", "75794a3c": "nextTokenId()", +"757957c4": "getAuthorityAccounts(address)", "75796f76": "setWithdrawalWallet(address)", +"757991a8": "getEpoch()", +"7579de8f": "generate(uint256,address)", "7579f2c9": "ArollaToken()", "7579fcb3": "mintPackSaleCard(uint8,address)", +"757a2ecb": "dateList(uint256)", "757a449e": "approveWithIndex(address,uint256,uint256)", "757a5522": "channelPartTimeout(uint64)", "757a61b9": "buyAssetPack(address,uint256)", +"757b0884": "requirement(uint256)", +"757b0edc": "getBurnPoolReward(uint256)", +"757b8cf4": "withdrawTokensApprove(address,address,uint256)", "757bd312": "getCrystalWrapper(address,uint256)", "757be78e": "PlayersStorage()", +"757bf890": "increaseRubyMineStats(uint256,uint256)", +"757cbc4f": "CardTransferred(uint256,uint256,address,address)", "757ccd3b": "canCreate()", +"757d0380": "initialize(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"757d4a00": "createContract(address,address,string,string,uint256,string[],uint256,string[],uint256[],uint256[],uint256)", "757d9b97": "getTradeRate(address,address)", "757de573": "setOwnerCut(uint256)", "757dfdcc": "SafeWalletCoin()", "757e5e73": "_giveShares(address,uint256)", +"757e6a55": "changeDevFee(uint16)", +"757e6cde": "getTaskSinglePaymentReward(bytes32,address,uint256)", +"757ece6a": "NewMortgage(address,uint256,uint256,uint256)", +"757f55d8": "updateAzumaContract(address)", "757f70fb": "SAMPLEToken()", "757f7302": "updateStateChangeAgent(address,bool)", +"757f7924": "splitToken(uint256,uint256)", "75806e6e": "setIssuerDelegate(address)", +"75807250": "creditOf(address)", +"75807416": "providers(int8)", +"75807742": "_totalMintable()", +"7580f41f": "getIsHolder(address)", "75811c15": "ownerChange(uint256,address)", "75812019": "getBurningReward(uint256)", "7581a8e6": "enableBurning()", @@ -67381,120 +123206,234 @@ "7581d62f": "genesisProtocol()", "75821d21": "changeTokenWallet(address)", "75829def": "transferAdmin(address)", +"7582ea4a": "gintoverflow_add(uint256)", "75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", +"7583116a": "getRebaseDivisor(address)", "758357b8": "fstPrice()", "7583902f": "getProviderInfo(address)", "7583a523": "maxEarlyPresaleEDUSupply()", +"7583b9a9": "league(address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"7583cd76": "RAINBOWBalanceInUniswap(address)", "75846a5e": "ZoueToken()", +"7584709e": "_getWipeAllWad(address,address,address,bytes32)", +"758497bb": "CurrentOwner()", "75849902": "forwardPurchaseFeesTo()", +"7584f24b": "getTxHashPre()", "75854fbd": "b(bool,bool)", +"75857eba": "AUTH_VERSION_INCREMENTOR()", +"75861c6f": "calcMaxBorrowAmountWithRatio(address,address)", +"75861f27": "mortgages(uint256)", "75862df4": "TokenWithEStop(address)", "75864416": "MeritToken(uint256)", "7586cd45": "getPokemonCurrentPrice(uint256)", +"7586d6ce": "withdrawProposal(uint64)", "7586fcc5": "AutoCoin(string,string,uint8,uint256,uint256)", "75872a5a": "evolveMonster(uint256,uint16)", "75874f3e": "Divineum(uint256,string,uint8,string)", "758822e6": "checkForValidity(string)", +"75884cda": "Disabled()", "75885f6a": "approveAndCall(address,uint256,bytes1)", "758866f0": "TOSToken()", "7588f82b": "currentVestedAmount()", +"7588fba8": "ethTokensSum(address[],uint256[])", +"758925cc": "topNode(address)", "75892cf1": "convert(address,address,uint256,uint256)", "75894e8c": "getEntity(address)", "758971e8": "ownerTakeProfit(bool)", "7589ca40": "BCV()", +"7589cf2f": "emergencyUnstake()", +"7589d77d": "tradePairId(uint256)", +"758a9932": "mWidthdrawRewardFromOldStaking()", +"758ad625": "FMALE()", +"758b06cf": "deleteCommissionChange(bool)", +"758b1ce3": "setBlockTime(uint256)", +"758b1f30": "_hasVoteEnded(uint256)", "758b31df": "premiumMod()", +"758b4e86": "MAXSUPPLY()", "758b5172": "setPlayersPerRound(uint256)", "758befae": "tokenPresaleCap()", +"758c23a6": "changeMintPerBlock(uint256)", "758e08d0": "Authorization(address)", "758ed826": "addDAppContract(address)", "758f39b8": "verifyProofOfStake(address,bytes32,uint64,uint256,bytes32[],uint256[],uint256,uint256)", +"758f7cfc": "btf()", "758fabcd": "MAX_CONTRIBUTION_SLOTS()", +"758fde52": "SuperNova(address,uint256)", "759014f0": "getChallenge()", +"75903d3a": "IMPOSS03()", +"759076e5": "currentDebt()", +"75908f7c": "BSCswapCall(address,uint256,uint256,bytes)", +"75912369": "set1()", "7591dfa0": "dmlToken()", "759234ec": "POLE()", +"75924282": "dealCallOff()", "759242fd": "WorldReserveCurrency()", "75924b95": "changeWinConfig(uint8[],uint8[])", "7592550b": "transferHomeViaRelay(address,uint256,uint256)", "759343d4": "sendTo(address,bytes,uint256)", "7593473c": "set_brain(address)", +"75936231": "setSlippageRate(uint256)", +"75937547": "qtcPerBlock()", +"75937900": "Triger_Claim_For_Head(address,address,address)", "7593ca71": "setExchangeInterval(uint256)", +"759438bc": "updateNftData(address,uint256,uint256,uint256,uint256,address,uint256,bool,bool,string)", +"759482f7": "Announce_winner(address,address,address,uint256)", "75949c13": "sendHalf(address)", +"7594dc73": "withdrawFundsUnlocked()", +"75952497": "yourStakedBBP(address)", +"75954a95": "uniswapPercent()", +"75964b55": "winnerHistory(uint256)", "7596732f": "MorzeF()", "759793c1": "buyInternal(uint256,address)", "7597eede": "isHoliday(uint256)", "7597fd6b": "escape(uint32,int256,uint32)", +"7598108c": "period_timestamp(uint256)", +"75981ab5": "participatePool2()", +"7598335c": "payExtra(address,uint256)", +"75986b50": "sent(uint256,address,uint256)", +"7598b9ea": "preSaleETHCap()", +"75990a0e": "maps(uint256)", +"75993783": "seedPoolAmount()", "7599609d": "getEventForHousePlaceBet(uint256)", "7599f8d9": "private_setRandomAPIURL(string)", "759a2753": "StakeIncreased(string,address,uint256,uint256)", "759b2ac4": "removeRole(uint256,address,uint256)", +"759b3b61": "zild()", +"759b5225": "synthetix()", +"759b5952": "tokensinvestor(address)", +"759b9a74": "SetPermission(address,address,bytes32,bool)", "759bca86": "TEMWallet()", "759c01dc": "SonDepTrai()", "759c676d": "removeAddressToWhitelist(address)", +"759c7265": "swapIn(uint256)", "759c7a58": "setAdOwner(uint256,address)", +"759c7d17": "getMatingPrice(uint256)", +"759d03db": "dropTokenSameValue(address,address[],uint256)", +"759dc902": "FixedDeposit(uint256,uint256)", "759e6558": "changelp9(address)", +"759e7120": "setAllAccount(address,address,address)", "759f0914": "createObject(string)", +"759f7e08": "remainingPaper(address)", "759f8712": "nonActivationShortWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"75a010c9": "getAllofBankRecepitsid(bytes32)", +"75a089d3": "invalidVotes(string)", "75a0a7a4": "generateNumberWinnerQuery()", +"75a0f521": "submitClaimAfterEPOff()", "75a0ff93": "BTKToken()", +"75a174a3": "getNetAssetValueUSD(address)", +"75a1d154": "pendingZyx(uint256,address)", +"75a1d7df": "Acquire_Coins(uint256)", +"75a269a5": "updateModelForTask(uint256,string,address)", +"75a2a53e": "LoanRequest(address,uint256,uint256,uint256,uint256)", "75a2b407": "createPromoFighter(uint256,uint8,uint8,uint8,uint8,address)", +"75a2d4ab": "getDataBetting()", +"75a2fcf2": "rebasedTime()", "75a35191": "Travelercoin()", +"75a356cc": "convertTokenAmount(address,address,uint256)", +"75a35a9f": "LogSetManualPrice(uint256,uint256,uint256)", "75a374ee": "transferMined(address,uint256)", "75a3eac0": "checkExistsOwnedAngel(uint64)", "75a4894b": "setReaderId(bytes32,bytes32)", +"75a4ac75": "userRewardRatePerDay()", "75a4e3a0": "unlock(bytes4)", "75a4ea52": "updateCandidateAddr(address,address)", "75a52506": "display(bytes32)", "75a53a8f": "changeTrusteeOwner()", "75a5425a": "DTesh()", "75a55a44": "CR7()", +"75a5917a": "tokenPriceMap(address)", "75a5b1ab": "registerDuration()", "75a5ba80": "delegateDklSiringAuction(uint256,uint256,bytes,uint256)", "75a66774": "stampDocument(bytes32,uint256)", +"75a66d12": "athleteIdToOwner(uint256)", "75a6a332": "testThrowRetractNotRetractable()", "75a6dbda": "delAdminUsrs(address)", +"75a70bb6": "getARCHStake(address)", "75a73ed3": "createMessage(bytes32)", "75a747dc": "_mint(address,uint256,bytes32)", "75a75ba9": "TRANSFERS_ALLOWED()", +"75a7720f": "stakerContractCount(address)", +"75a776d6": "stakeable()", "75a7db40": "existenceSymbol(address)", "75a806cd": "transferLoss(uint256,address)", +"75a83102": "ordersPromise(uint256)", "75a88bcf": "getPreClaimTimeStamp(address)", +"75a8e33f": "getFirstPartyActiveBets(address)", "75a90144": "voterExists(address)", "75a90e02": "readisnameregistered(string)", "75a949a3": "transferBlocToUsers()", "75a94af5": "JadetToken()", +"75a9621e": "setPwdrPool(address)", +"75a99b9f": "_saleStartTime()", +"75aa3230": "withDrawGasTopUpForProvider(address)", "75aa39bd": "getTeamScore(uint256)", +"75aa844b": "getTotalVestingCount()", "75aa8705": "begin(bytes32)", +"75aa92db": "approve_333(address,uint256)", +"75aacefa": "getTransferFeePercentage()", +"75ab058e": "changeReferrerCode(string)", "75ab9782": "tokensToSend(address,address,address,uint256,bytes,bytes)", +"75abe0e3": "transferMeAllAssets(address[],uint256[])", "75ac3b08": "presaleEndBlock()", +"75acca3a": "Purchase(uint32,address,uint256,bytes)", "75ace438": "setRdCollectorAddress(address)", +"75ad1a2a": "currentTotalTips()", "75ad319a": "makeLiquid(address)", "75ad31a0": "vesting1Withdrawn()", "75ad4787": "_processRefund(address,uint256)", +"75ad671a": "LogTokenWithdrawEther(uint256)", "75ad97bb": "_initSpaceship()", "75ada3d3": "getLicenseReimbursement()", +"75adc93d": "testSetRiskParameters_NotAdmin()", "75ae267d": "setCanTransfer(bool)", "75ae51ce": "minForceOffsetAmount()", +"75ae8102": "investorsFund()", "75aecd8d": "ContributionAdded(uint256,address,uint256)", "75af370f": "ChainToken()", "75af65d1": "discounts()", +"75aff3c1": "endFailedAuction()", +"75b0161e": "GrowWeedCompleted(uint256,uint256)", +"75b01b8f": "addGas()", "75b03941": "retrieveGains()", "75b0d9cd": "totalSupplyOf(uint256)", +"75b19c9f": "firstGameTime()", "75b1e894": "ProposalLog(uint256)", +"75b208bc": "createUniswapPairMainnet()", +"75b2135d": "AddToWhitelist(address)", "75b238fc": "ADMIN_ROLE()", +"75b24ebe": "canPause(address)", +"75b26686": "setTokenIdsForClass(uint8,uint256[])", +"75b2a087": "rebaseState(bool)", +"75b2d829": "theMostParticipantTeam()", "75b3a83e": "START_ICO_TIMESTAMP()", "75b3ea8e": "calculateExcessTokens(uint256,uint256,uint256,uint256)", "75b3f9f5": "currentRateLevel()", +"75b418fa": "NewMemberKey(uint8,string)", +"75b43dc3": "testelopionoarg()", "75b44aea": "getEthRate()", "75b466d1": "sendOrderedTokens()", +"75b4c05f": "setApiConsumer(address)", "75b4d78c": "bonus()", +"75b4ff13": "NewProposal(bytes32,address,uint256,address,bytes32)", "75b5243d": "editBasePrice(uint256)", "75b599c0": "changeFashionAttr(uint256,uint16[4],uint16[4],uint16)", +"75b5be2d": "tusd()", "75b5ec08": "DcatNetwork()", +"75b605d3": "log(address,bool)", +"75b6483b": "addShortableSynthsToState()", "75b65abf": "claim(uint16,uint16,uint16,uint16)", +"75b6a60e": "humid()", +"75b71a20": "addItem(int256,string,string)", +"75b72f5d": "registrarDocumento(string)", "75b77c4b": "PRICE_MAX()", "75b82a66": "distributeGameDividend()", +"75b84c89": "ScriptExecuted(address,bool)", +"75b86a01": "completeGameResult(uint256,uint256,uint256,string,address,uint256,uint256)", "75b88b82": "Beebit(bytes32)", +"75b8bcbe": "setTokenPriceOracle(address)", "75b8de15": "encodeInt(int256)", +"75b8edea": "setClaimLiquidBalancePcnt(uint256)", +"75b8f004": "FrozenAddress(address)", "75b8fa6f": "contractMoneyBalance()", "75b91305": "_removeDeposits(address,uint256)", "75b94133": "validatorReward()", @@ -67503,150 +123442,282 @@ "75b9b357": "updateData(uint256,string,string)", "75b9c384": "UpdatePay()", "75b9fd47": "BuyAcorns()", +"75ba796d": "swapEthToDai(uint256,uint256,bool)", "75bac6fd": "getLastDeedTimestampByAddress(string)", "75bae755": "AariTestToken()", "75bba189": "setModerator(address)", "75bbc15d": "isNeedDrawGame(uint256)", "75bbc204": "addJackpotGuaranteed(uint256)", +"75bbe111": "enableSocialistMode()", "75bc369a": "_triggerCoolCountDown(uint256)", +"75bcde6e": "takerValueMap(address)", +"75bcec5b": "Log(uint256,address,string)", "75bcf09f": "getFibo(uint256)", +"75bd1a33": "timeend()", +"75bd1cc9": "changeRequiredPower(uint256)", "75bd3237": "listingExists(bytes32)", +"75bd492b": "set20To721Ids(address[],uint256[],uint256[],address)", +"75be5010": "hexSignature()", "75be5846": "unlockForever()", "75bedf12": "valueOf(uint256,uint256)", +"75bf0582": "oracleDecimalFactor()", "75bf4777": "Presale(address,uint256,uint256)", +"75bf5434": "wheatExist(string,address,string,uint256,uint256,uint256)", +"75bf72f6": "emit_event3_overloaded()", +"75bf759f": "authorizedContractList()", "75bfb140": "teamInstantSent()", +"75c03262": "vokens()", +"75c04d0b": "latestReferrerCode()", "75c0ae13": "getSalaryTokenAddress(address,address,uint256)", +"75c0b9fe": "getShares(uint256,address)", +"75c0d047": "Sold(uint256,uint256,uint256,uint256,address)", +"75c10897": "brokers(bytes32,uint256)", "75c14f7d": "buyoutAndSetReferrer(uint256,bool,uint256,uint256,address)", +"75c1631d": "listToken(uint256,uint256)", "75c1b643": "setconfig(uint256,uint256,uint256)", +"75c1c7e7": "getServers()", +"75c1d95e": "trancheFab()", "75c268f3": "rateFeesDenominator()", "75c26c3f": "closeCrowdfund()", +"75c2f079": "_createWatchUser(address,string,string,string,string,string,uint256,string)", "75c3039c": "finalizeCapReached()", +"75c303c9": "orderLimit()", "75c304f7": "matchable(address)", "75c34d94": "BitcoinElena()", +"75c482fd": "totalDEFLCTYMENLPTokensMinted()", "75c48942": "restrictedVault()", "75c4a4d6": "isClaimable(int8)", "75c4aaa6": "addUnderDog(uint256)", "75c4e9ec": "token_reward()", "75c589a0": "getMinimumCallCost()", +"75c5e1f9": "tallyResult()", "75c5efd8": "teamFundsAddress()", +"75c6473a": "_capAddition()", +"75c64dd1": "MaxDuration()", "75c66e2f": "mintTokens(uint256,uint256,address)", "75c69e39": "SOLUSCRSToken()", +"75c6b74a": "bulkSendETHWithDifferentValue(address[],uint256[])", +"75c6c6da": "refs(address)", +"75c6e8c0": "getPartyA()", +"75c767f8": "ethRised()", +"75c7c82e": "reqTo()", "75c7d4e1": "sellMyTokensDaddy()", +"75c7d807": "getPerUserInfo(address,address[],address[])", +"75c7eaa7": "beluga()", "75c81ad0": "minProfit()", +"75c8319d": "getMaxAllowedTokens()", "75c8a66e": "MANHATTANPROXY7THST()", +"75c8b83c": "TopupTokenAllocated(address,uint256,uint256)", "75c8f04b": "addTenant(address)", +"75c9183a": "mintCallPrice(uint256,uint256)", +"75c93bb9": "addReward(uint256,uint256)", "75c9c4a4": "SQUIRREL_BASE_REQ()", +"75c9dbfc": "depositIncentives(address,uint256)", "75c9ee06": "teamFrozenTokens()", "75c9f351": "maxTokenNum()", +"75c9f3ac": "swapEthToToken()", "75ca1fad": "setcommissionPer(uint8)", +"75ca25b0": "individualEthCap()", "75ca3b2e": "getKittyInfo(uint256)", "75cb14bc": "panicOff()", "75cb1bd1": "setWallets(address,address,address)", "75cb2672": "configure(address)", "75cbe239": "rulesProposals(uint256)", "75cc21bd": "LogInvestshare(address,uint256)", +"75cc3166": "Purchase(uint256,uint256,uint256)", +"75cc48a8": "constantFee()", "75cc499f": "LogTokenPurchase(address,uint256,uint256)", +"75cc8160": "initFee()", "75cc90b3": "ADMINS_COUNT()", "75cd109a": "BurnSplit(uint256)", "75cd51ed": "accountExists(address)", +"75cd6de7": "Unregistered(address)", +"75cdff44": "delistReceiver(address)", "75ce2913": "pushOwnedToken(address,uint256)", +"75ce46a7": "numberOfUsers()", "75ce738e": "base_token()", +"75ceb341": "mintBatch(address,uint256[])", +"75cf5085": "updatePriceWhenClose(bytes32,uint256[])", "75cf567a": "TOKEN_RATE_15_PERCENT_BONUS()", "75cf77fb": "buyPoohs()", +"75cfbe6c": "symbolOf(uint256)", "75d04628": "updateMatchStartTime(uint8,uint256)", "75d049bb": "ApplyDividentsMultiplicator()", +"75d09c44": "noomPerBlock()", "75d0c0dc": "contractName()", "75d14478": "Chi_available()", "75d16a1e": "JaxBox()", "75d1722d": "_cancelOrderWithPayer(string,address)", "75d2fd7f": "setERC20compatibility(bool)", "75d32381": "Gave(uint256,address,address,uint256,uint256)", +"75d35070": "serviceAgreements(bytes32)", "75d3bda6": "Product()", +"75d3ceea": "addLiquidityToUniswapCOMBUSTxWETHPair()", "75d4066d": "getKeccak256(string,string)", +"75d40945": "supplyAndBorrow(address,uint256,address,uint256)", +"75d40aa0": "buyOTC()", "75d4115e": "orderSubmitter(bytes32)", "75d427e2": "greaterHash(bytes32,bytes32)", +"75d47a0a": "TOKEN_MANAGER_ADDR()", +"75d4eefd": "freezeRequest(uint256,uint256,uint256)", +"75d5024b": "bootstrappingAt(uint256)", "75d53a73": "approveMe(address)", "75d57f44": "Benable()", "75d5a7c6": "torchContractBalance()", +"75d5f530": "adelSwapped(address)", "75d60ba1": "PayToContract()", +"75d671c6": "getStakedLiquidity()", "75d7036b": "getOuvidoriaEnteTipo(address)", "75d7348a": "makeReferalBonus(uint256)", "75d74f39": "get_s()", "75d79399": "LogNotifyOfArbitrationRequest(bytes32,address)", +"75d7d859": "equalIntPassTest()", "75d7e4bd": "hydroTokenAddress()", "75d7e8ea": "canTransferIfLocked(address,uint256)", +"75d84557": "setwiseStaking(bool)", +"75d88bf2": "LastPrLow()", "75d9085a": "buyCardXname(uint256,string)", "75d91db8": "cancelAuctionByMaster(uint256)", "75d955f7": "realWorldPlayerMetadataForPlayerTokenId(uint32)", "75d96718": "RELEASE()", "75d9aa1a": "migrateFromLegacyReputationToken()", "75da33bd": "tokpereth()", +"75da771d": "exitswapPoolAmountIn(address,address,uint256,uint256)", +"75da8634": "auth(address,string)", +"75da9807": "setEligibleUsers(address[])", +"75daba3f": "SetNotRetractable(bytes20)", +"75dadb32": "prefix()", +"75db2c8a": "EndSale(bool)", "75dbc1aa": "LiquidHome()", +"75dbddd3": "LastWithdrawDate(address)", "75dc6471": "getSalesCity(uint256)", "75dc7d8c": "calcFee(uint256)", "75dcb701": "getBonusTierCount()", "75dcb70a": "updateEditionTokenURI(uint256,string)", "75dd3799": "NetWexCoin()", +"75dd618f": "TokensMinted(address,address,address,uint256,uint8,address)", "75dd82b8": "setPreMineAddress(address)", "75ddbc4e": "setBalanceOfPendingToken(address,uint256)", "75ddfa11": "ChannelBought(string,address,address)", +"75de41aa": "IsToken()", "75deadfa": "endTimes()", +"75deefac": "forwardMultiple(address[])", "75df1fe8": "lockReleaseDate1year()", +"75df4bb9": "smod(int256,int256)", +"75df596a": "systemBalance()", "75df9fdb": "backVISTAcoinOwner()", +"75dfb0e0": "setGraph(bytes32,bytes)", "75e01780": "startExchange()", +"75e032f4": "_stakers(address)", +"75e04851": "setCloseDay(uint8)", "75e0747e": "referrerBonus1()", +"75e08a17": "CreateSwap(uint256)", +"75e0b00e": "isApprovedOperatorOf(uint256)", +"75e130ad": "isFrozen(uint8,uint256)", +"75e2571f": "Claimed(address,bytes32,string,string,address,uint256)", +"75e27a3c": "burnSoakForSteam(uint256)", "75e2f405": "product1_luckybuyTracker()", "75e2ff65": "setMigrationAgent(address)", +"75e36616": "verify(bytes32)", "75e3661e": "unblacklist(address)", "75e372f2": "BlocklancerDataHolder()", +"75e38c9f": "unattend(address,uint256,string,bytes)", "75e3921c": "ETH_VTA()", "75e39f26": "getHeroInfo(uint256)", "75e3e4d4": "_sendTokens(address,address,uint256)", "75e42744": "balanceOf(address,bytes32,address)", +"75e443aa": "getUnderlyingAggregator(uint256)", "75e456c3": "validInvestment()", "75e5598c": "ACTION_KEY()", +"75e5826e": "PREFER_SOIL()", +"75e5e812": "LogNew(address,address)", +"75e618c9": "getDepth(uint256)", "75e6f675": "redemptionPercentageOfDistribution()", "75e71d6d": "beneficiaryExists(address)", +"75e80b81": "addGeneralSetting(bytes32,uint256)", "75e87642": "getRoundBetAmount(uint256,uint256)", +"75e88503": "getAthletesByTeamId(uint256)", "75e88e3a": "getForceOffsetBooks(address)", "75e8b1a3": "changeWithdrawnTime(uint256)", +"75e8ef5c": "setMinimumReserveRatio(uint256)", "75e8f289": "depositWalletAddress()", "75e8f757": "ERC20PreICO(address)", +"75e9141d": "addSetTokenAddress(address)", +"75e91ce7": "Blocked(address)", "75e96908": "saveLifeEvent(string,string,string)", +"75e9c501": "swAppPerBlock()", "75e9c91f": "dropNectar(address[],uint256[])", +"75e9e2c5": "ThereIsANewOwner(address,uint256)", "75e9e3e2": "Ldt()", +"75e9ee0c": "swapStrategy(address,address,uint256)", "75ea1b68": "completeDeliverable(bytes32,address,address)", +"75ea5238": "purchaseEthereum(uint256)", +"75ea5f2e": "setReserves(uint112,uint112)", +"75ead459": "getSpread(address,address)", +"75eb2ad1": "getAddressBalance()", +"75eb9b03": "registerClaim(bytes32[],bytes32[])", +"75ec6484": "setMinEthLimit(uint256)", "75ec899a": "addBodyParts(uint8[])", +"75ecf451": "Burn(address,string,uint64)", +"75ed442b": "viewRewardTimeLock()", "75ed5604": "referralLinkRequirement()", +"75ed6e12": "swapToUSDv(address,uint256)", "75ed8f89": "tOS(address)", +"75edd5f2": "marketingTaxAlloc()", "75ee1908": "whitelistManyUsers(address[])", "75ee549c": "seteUSD(address)", "75ee7315": "IcoPaused()", "75ee85bd": "salsa20_8(uint256,uint256)", +"75ee8e50": "getLotNftFixedRewards(uint32)", "75eeadc3": "hasWon(uint256)", +"75eeadcd": "christmas(uint256,uint256)", +"75efcec5": "hackMe()", +"75efff78": "get_dx_underlying(uint256,uint256,uint256)", "75f0a874": "marketingWallet()", +"75f0f633": "removeAuthorizationAndModify(address,address,address,address,bytes32,uint256,uint256)", "75f12b21": "stopped()", "75f208bf": "testFailCreateWithParentNotInUse()", +"75f22d35": "getInsurance(address,uint8)", "75f289bc": "setDiscountBonus(uint256)", "75f2e45d": "charityPayed()", +"75f31470": "getMemo(uint256)", "75f33ed6": "EtherReceival(address,uint256)", +"75f3974b": "setAdminPermission(address,bool)", +"75f3ea2a": "BIDREASON()", "75f40f40": "underdogPayoutFund()", "75f41f4a": "initExchangeUser(uint256)", +"75f4479a": "shr(uint256,uint256)", "75f45878": "scheduleCall(bytes,bytes,uint256)", "75f46563": "setVLTMultiSig(address)", +"75f510a4": "boletoGanador()", +"75f54abc": "getMakerDaoPrice()", +"75f5f9ae": "BLOCK_DEPTH()", "75f6641f": "GoldBackedToken(address)", +"75f6703a": "atoshima(string,address)", +"75f728ca": "claimNFTbytokens(uint256)", "75f7cc4a": "PeriodStarted(uint256,uint256,uint256,uint256,uint256,uint256)", "75f7d866": "tokenReserved2Deposit()", "75f7e6f0": "saneIt()", +"75f81e8f": "addCustodian(uint8,address)", "75f829a9": "BetAccepted(uint256,uint8,address,uint256,uint256)", "75f890ab": "setContract(address)", "75f91ec8": "getTokenAmount()", +"75f93fa8": "GetSystemTotalCollateralInUsd()", "75f96ead": "Guess(uint256)", +"75f99340": "totalHundingBets()", "75f9ae86": "setCertificateSigner(address,bool)", "75f9e6da": "initialIssueMintingDate()", +"75f9f597": "protocolVersionST(bytes32)", "75fa1bd3": "_reserveTokens(address,uint256)", +"75fa2bbe": "ReverseSplit(bytes6,bytes6,uint8,uint256)", +"75fb4540": "ambassadorsPrerequisite(address)", +"75fb4b62": "boardContract()", +"75fb8a1e": "isTeamAddressMapping(address)", +"75fc4141": "removeReferrers(address[])", "75fc8e3c": "goodbye()", "75fcc6f1": "OWN_burnToken(address,uint256)", +"75fce015": "TransferEnabled()", +"75fcf607": "yourRBFiBalance(address)", "75fd4c23": "test_basicUnitTest()", "75fd776a": "STRATEGIC_PARTNERS_POOL_ALLOCATION()", "75fda973": "tokenDistributeInDividend()", @@ -67654,49 +123725,101 @@ "75fe2cb8": "setDnaExist(uint64,bool)", "75fe2e33": "getMonsterObjId(address,uint256)", "75ff0664": "ERC223TokenMock(address,uint256)", +"75ff47bf": "setRewardErc20(address)", +"75ff58db": "SetDevices(bytes)", +"75ff86f2": "itemIdToOwner(uint256)", "76005c26": "fulfillData(uint256,bytes32)", +"76010833": "buyWerewolfAsset(uint256,uint256,address,address)", +"76012703": "get_totalAmount()", +"76012bea": "controlTokenMapping(uint256)", "76014a2d": "senderETH(address)", "760163af": "getLastGames()", "76017bbd": "getRewardWei(address)", +"7601b371": "cevaPropertyId(address,bytes32)", +"760371f0": "actualizarOrdenHeredero(address,uint256)", "7603ac4b": "registerFileClosing(string,uint256,string,string)", "7603b02d": "houseCommission()", "76041376": "devTeamAddress()", +"76042c0a": "liquidityLockAddress()", "76045702": "AcceptsDividendFacial(address)", "7604b6d7": "testGetBlobStoreFromFullBlobId()", "76052df8": "setPurchasable(bool)", +"7605bbb0": "delistAsset(address)", +"7605f0b6": "crowdersWithdrawal()", "760672df": "weiToTokensAtTime(uint256,uint256)", +"7606b636": "registerCampaign(string,string,uint256,address)", "7606f781": "getMetrics()", "7607422a": "CSCS(address)", +"76077ca2": "SIAD(uint256)", +"760848d1": "makeOrderETH(bytes32,address)", +"76088703": "frob(bytes32,address,address,address,int256,int256)", +"76088ce2": "setOlySaleAddress(address)", +"76093957": "lastDateDistribution()", +"76094580": "_genesis_nonce_time(uint256)", "76098303": "futxMiner()", "7609c5a9": "transferFromToICAP(address,string,uint256)", +"7609e49c": "AddReferrerBalance(address,uint256)", "760a221c": "LOCK_RELASE_TIME()", "760a45cf": "lockStrategy(address)", "760a812c": "ChangedNeighbourReward(uint256)", +"760a81b6": "ownerMap(address)", "760a8c2a": "setActive()", "760ac21b": "testFailBadTransfer()", +"760b0b76": "MAX_uint256()", +"760b5ff8": "setDividendCommission(uint256)", "760b8f62": "bonusAll()", "760bb006": "isUser(bytes32)", +"760bb6d1": "procKoef()", +"760bc82d": "raiseFlags(address[])", "760c1fa3": "loadX(uint8[],uint256,uint256,int256)", +"760c347a": "primitiveIsRegistered(address)", +"760c6bec": "getMiningTokenAmountByRatio(uint256,uint256)", +"760c8859": "setKyberNetworkContractAddress()", "760cd8e1": "transferAgent()", "760cfa57": "GeneratedERC20Contract()", +"760d236c": "enableTypeChanging(bool)", +"760db25f": "giveShare(address,uint256)", +"760dd339": "DividendGivenEvent(uint64)", "760df4fe": "_isCarousal(uint256)", "760e2cf3": "buyUpgradeCard(address,uint256,uint256)", "760eab1a": "ZodiacCore()", "760ee49c": "setCurrentState(bool)", +"760f443a": "getCrumbsUniStakeAmount(address)", +"760f5f27": "lastBlockUpdated()", "760f7382": "shipTokens(address,uint256)", +"760f8965": "mint_to_sell_by_pool_out(uint256,uint256,uint256,uint256)", +"760fadce": "pairRegistered(address)", +"760fbc13": "__abdicate()", +"760fe56e": "updateBlocks(uint256,uint256)", +"761004bd": "accountLoans(address,uint256)", "76102b3c": "PRICE_PRESALE_WEEK3()", "76105fe7": "tarifOf(address)", +"7610722f": "maxAvailablePerTx(address)", +"7611b018": "getPairLastRate(bytes32,bytes32)", "7611f50d": "periodStage()", "7612115d": "setTokenPartner(address)", +"761248b4": "addMinter(address,uint256)", "76124dac": "vote(bytes32,uint256,address)", "76124db7": "Update_TrustlessTransaction(uint256)", +"7612997d": "_setRoleAdmin(bytes32,bytes32)", "761390b9": "BCX()", +"7613d764": "withdrawFarmingToken(uint256,uint256)", +"761408a1": "doTrade(bool,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"7614115c": "underlyingAmount()", "76147a0e": "notification(address,uint256)", "7614e727": "baseMineTokenAmount()", +"7614e9bd": "f8(int256)", "761522af": "TradeBits()", +"76159b68": "changeAPY(uint256)", +"7615b2d0": "canInitialPropose()", +"76160fc5": "getJackpotValueUSD()", +"761610fc": "offer(uint256)", "76164085": "seek(int256,int256,bool)", "76165adf": "buy(address,address,uint256,uint256,uint256)", "76167a89": "getMessageSender()", +"7616dee9": "findUiniqueID(uint256,address)", +"7617d206": "approve_39(address,uint256)", +"7617e421": "transferEthsAvg(address[])", "7617f814": "sumPreICO3()", "7617fbbd": "PreOrder(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", "76190f8f": "isSiringClockAuction()", @@ -67705,423 +123828,818 @@ "76196c88": "setDnsrr(bytes32,bytes)", "76197591": "finalizedICO()", "7619d22e": "LEGAL_EXPENSES_2_TOKENS()", +"761a0099": "setTaxBenefit(address)", +"761a3b91": "_transferFromStaking(address,uint256)", "761a5b0e": "updateERC20rewardMultiple(uint8)", "761a832f": "setBaseRewards(uint256,uint256)", +"761add23": "LogUsedRestDepositPerDay(address,address,uint256,uint256,uint256,uint256,uint256)", "761aef78": "BuyTicket()", "761b59ac": "crabPartDataFromGene(uint256)", +"761b7ef8": "GizerItemsContractUpdated(address)", +"761b92c3": "BonusAssigned(address,uint256)", +"761b9de8": "post(bytes32,uint256)", "761ba894": "getPremiumMultiplier()", "761bb70a": "train3(uint256,uint256)", +"761bc676": "DiceSmallBet(uint16,uint256,uint256,uint256,uint256)", "761c1cf9": "SetupGWT(string,string,uint256,uint256,uint256,address,address,uint256)", "761c3688": "remark2()", "761c4524": "SHARE_TEAM()", +"761c4c40": "safeMint(address,uint8)", "761c7cfe": "resolveChallenge(uint256)", +"761cd3a5": "validateSig(address,bytes32,int64,bytes)", "761d9e68": "getUserPolicy(address)", "761dc416": "Megaton()", +"761dce2c": "create_estate(address,string,uint256,uint256)", "761e0d2d": "DEFAULT_MINING_BIT()", +"761e217a": "teamUnlockTime()", "761e64c4": "setPI_edit_31(string)", +"761eb23e": "grow(uint16)", +"761ecf31": "setVoteTime(uint256)", +"761f78a8": "IFVOwner()", +"761fdad6": "wadMul(uint256,uint256)", "761fe6fe": "totalAmountsBetStage1(uint256)", +"76203ff9": "TENS_Fee_Approver_Permanent()", "76207a5b": "getOrderInfo(bool,uint256,uint256)", "7620a65b": "Publisher()", "7620f4bb": "fipsNotaryLegacy68b4()", +"7621651b": "doLockUp(address,uint256,uint256)", +"7621710c": "loanList(uint256)", "76227f3b": "burnAdminAmount(uint256)", +"76234fc2": "_nftToken()", "76235b49": "getUUIDS(bytes32)", +"76236957": "doPay(uint256,uint256,uint256,address)", +"7623b4c3": "buyTicket(string,string)", +"7623bac5": "initialize(address,address,address,address[],uint256[],address[])", "76247776": "getDirectory()", +"76247dcb": "signedEngaged()", "762506b6": "lrs(uint256)", "7625391a": "distribute(uint256,uint256)", "762549e0": "minThresholdUnits()", +"76265c6e": "quantityCount()", "76266ce9": "logResources()", "76271346": "_parent(uint8)", +"76277aaa": "userDCPRecords(address,uint256)", +"762784f3": "triggerPluginApproval(uint256,bool)", "76278e7b": "limitDatePresale()", "7627c9ad": "grantTransferRight(address)", "7627e941": "validateOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"762816d6": "router2()", +"762849cc": "registros(bytes32)", "76285b5b": "_is360thDay()", +"76289f38": "getRewardFee()", "76289f71": "setMasterAddress2(address)", +"7628a37d": "stake(uint256,uint256,address)", "7628e728": "PRE_ICO_TILL()", +"762950c9": "updaterandomTurboDuration(uint256,uint256)", +"76296d09": "_tweets(uint256)", "7629cca0": "ContractDisabled()", "762a4f35": "updateClosingTime(uint256)", "762a66a2": "getAuction(address,uint256)", "762ac19d": "startICOPhaseOne()", +"762b1c92": "startStaking(uint256)", +"762b6da6": "nerd()", +"762b8a4d": "getMajorAddresses(uint256)", +"762bb282": "balanceLimit()", +"762c0396": "getAccRewardPerShare(address,bytes32)", +"762c159a": "tokenReduceAmount()", +"762c19da": "changeLoan(uint256)", +"762c31ba": "pendingGuardian()", +"762c3294": "setTokenTypeAsOwner(address,string)", "762c38fd": "askQuestion(uint256,string,address,uint32,uint32,uint256)", +"762c6992": "TransactionErrorSelector()", "762c7ab2": "setPercentForHelpCoin(uint256)", +"762cbbc3": "addProof(address,bytes32,string)", "762ced87": "prcntRate()", "762d739a": "vigencia()", +"762db2b4": "lookupTo(address)", +"762e0f81": "addTautrinoUniswapPair(address)", "762e3816": "TOURNAMENT_WALLET()", +"762e7a34": "stakingPlans(uint256)", +"762ed52f": "setBasePerc(uint256)", "762ede1e": "ETHCONEarlyBirdToken()", +"762f5484": "Success(uint256,uint256,uint256)", +"762fac28": "setAddressToken(address)", "762fdc0c": "getRatePlan(uint256,uint256)", "762ffc42": "VanityReserved(address,string)", "76305a89": "CoinCrowdICO(address,uint256,uint256)", "763091ff": "initCreator(uint256)", "76309e70": "CTT()", "7630ad34": "getInfoD(uint256)", +"7630f919": "setMerkelTree(bytes)", "76319190": "removeSupportedToken(address)", +"7631a4ce": "updateLockdownState(bool)", "76323253": "createRounds(uint256)", "76324597": "dropStart()", "763250e1": "GizerToken()", "763265de": "setMaxCap(uint256)", +"763289fb": "ethDonation(uint256)", "7632b18b": "WICCrowdsale(address,uint256,uint256,uint256,address,address)", +"7632b24b": "propose(address,address,uint256,uint256,uint256)", +"7632ee95": "presale_arbits_per_ether()", +"76331c4c": "SetTXEnabled(bool)", "76338028": "functionCalls(bytes32)", +"7633a22c": "health()", "763430b8": "mFUNDING_SALE_TIMESTAMP()", +"763444ac": "SetPrices(uint256,uint256,uint256,uint256)", +"7634cc99": "_releaseTokens(address,address,uint256)", "7634d45d": "titlesSold(address)", "7634ecc0": "debitEqually(address[],uint256)", "7634ed39": "saveNewAnchor(bytes32)", +"7634eec8": "arbWithGasToken(uint256,uint256,address[],uint256)", +"76353627": "raisedAmount(uint256)", "763542ce": "BucketBuy(bytes32,uint256,address,uint256)", "7635761b": "getusersCount()", "7635e1de": "changeTokenManager(address)", "7635e409": "createZombie(uint8,bytes32,uint16,bool,address)", "763730bd": "whitelistAddresses(address[],uint256,bool)", +"76375300": "callProxyManager_getUserLimitIntraAsset(address)", "76375c5c": "splitterContract(address,uint256)", "763770d2": "getTokensManual(address,address)", "7637a12e": "GoldmintMigration(address,address)", "7637da03": "MINER_STARTING_PRICE()", "76385f2a": "PeriodOfAccount(address,uint256)", "76389260": "EthlanceSearchFreelancers(address)", +"7638cddb": "wear(uint256,uint256,address)", +"7638d347": "MintByGateway(uint32,address,uint64,uint256)", "76390144": "getCorrectedStats(uint256)", +"763936d2": "iHaveAuthor()", +"76393df1": "pushRODate(uint256,uint256)", +"76396ada": "checkRevenue(uint256)", +"7639934d": "unpauseConfirm(address,address)", "76399bc6": "getFoundtionAddres()", +"7639a230": "isRegisteredToken(address)", +"763a4dd0": "setReserveParams(address,address,address,address,uint256)", +"763a545f": "pendingTing(uint256,address)", "763a6390": "setWeightLostPartLimit(uint8)", "763a666a": "withdrawLiquidityPoolTokens(address,uint256)", "763a738c": "allNames()", +"763a982d": "BOUNDARY_1()", "763ac589": "createStake(address,address,uint256,uint256,bytes)", "763add8f": "KPCS(address)", +"763b091f": "loss()", "763b144e": "EmpireCrowdsale(uint256,uint256,address,uint256,uint256,uint256)", +"763b8e2e": "lock(address,uint8,uint256,bytes,address,bool)", "763cbde0": "_addPassportLogic(string,address)", "763cf9aa": "feed100(uint256)", +"763d066f": "Seller_Approve_Market(address,address,uint256)", "763d2500": "getTotalNbOwners(uint256)", +"763d446d": "attack(bytes8)", +"763e2831": "initializeNonPayableWithValue(uint256)", "763e29ad": "CherishToken()", +"763e4a0d": "collateralizedLP(address)", +"763efda4": "claimed(address,uint16)", "763f337e": "setAllowReferral(bool)", +"763f3820": "batAFlip()", "763f4011": "mintMarketing(address,uint256)", +"763f4502": "arbTrade(address,uint256,address)", +"763fc1db": "cityExists(uint256)", "763fd2ab": "TOTAL_PRESALE_TOKENS()", "763ffcec": "setupDisbursement(address,uint256,uint256)", "7640304d": "_lastSnapshotId(address)", "76405122": "buyImplementation(address,bytes32,uint256,uint8,bytes32,bytes32)", +"7640cb9e": "scaledToken(uint256)", +"764122e7": "baseAssetPerShare()", "76418809": "private_withdrawBankFunds(address)", "7641a8c6": "SetFinalBlock(uint256)", "7641e6f3": "burn(uint256,string)", +"7641f3d9": "setPoolPause(bool)", "76421887": "OWNER_LOCK_BLOCKS()", +"7642240d": "enableTransfers(uint64,bool)", "7642249c": "mintadd()", +"76424f4a": "createLeaderboard(bytes32,uint256)", +"76426275": "NonWhitelistPurchase(address,uint256)", "76429844": "MultiSendToken()", +"7642ac90": "poweredRatio(uint256,uint256,uint256)", "7642dc0f": "calcVesting(address)", "764300bf": "ALLOC_MARKETING()", +"7643483c": "_addCustomer(address)", "764358e6": "logSweep(address,address,uint256)", +"76435a5f": "getNewsContractAddress(uint256)", +"764387bd": "getModulesByName(bytes32)", "764423a4": "buyerAddressTransfer(uint256,address,address,address)", +"76442b7a": "REFUND_SPONSOR()", "764499e5": "GamePlayed(bytes32,bytes32)", "7644d361": "hashMessage(string,string,string,uint16,string)", "7644ecbf": "BallotO(address[],uint256[])", "76456887": "startSecondPhase()", "76466d42": "setAllowedContract(address,address)", +"76467cbd": "swap(bytes32)", +"76471d81": "YIELD_TOTAL_DISTRIBUTED_AMOUNT()", +"7647d888": "updateTeamSecondaryBps(uint256)", +"76480f0a": "revokeMngPermission(address)", +"764817d6": "fuckedup(address,address,uint256)", +"764838c5": "transferTokenOut(address,address,address,uint256)", +"7648ba44": "PurchasedTokensClaimLocked(uint256,uint256,address)", "7648c929": "returnRemainingEther()", "7648f99b": "ProposalSubmitted(uint256,uint256,address,uint256,uint256,string,address,uint256,uint256)", "764912ef": "totalTokenCount()", "76495ce7": "tokensFor1EthP4()", +"76496bbe": "uniswap_swapTokensForExactTokens(uint256,uint256,address[])", "76496e34": "earlyCommunitySupply()", +"7649c6d1": "authorizeHoldOperator(address)", +"764a3f74": "removeFromAirDropList(address)", +"764a7163": "PRIZE_POOL()", +"764a730a": "boughtAmount(address)", "764ab11b": "WalletV2(address,address)", "764b08c3": "STATS_SIZE()", +"764b666c": "interestToken()", "764c499b": "contract_terminated()", "764c6dd3": "voteToFreeze(address)", "764c86bd": "totalDistanceRun()", +"764c8bf6": "weeklyEnd()", "764c8e54": "depositBoth(uint256)", "764c92f2": "trustedOrderTransfer(address,address,uint256)", +"764c97e1": "HAS_GENERAL_INFORMATION_RIGHTS()", "764c98c1": "getIntArrayDynamic()", "764c9d32": "sleepContract()", +"764cbcd1": "setLastTime(uint256)", +"764cd707": "ControllerBurn(address,bytes32,uint256)", "764d1e04": "getFreelancerParams()", "764d9969": "XubiToken()", +"764df6b3": "CLERK_OLD()", "764e50eb": "priceUpdated(uint256,uint256,string)", +"764e5382": "aboveMintingLimit(address)", "764e5cd9": "getSkills(address,uint256)", "764e971f": "add(uint256,bytes32)", "764ea3fe": "walletEhterCrowdsale()", "764f3aa8": "getTokenBalances(address)", +"764fb45c": "getBestEthToDaiReserves()", "764fe7d1": "totalMiners()", +"76518632": "CommDistribute(uint256,uint256)", +"76518ba6": "UnfrozenAmt(address)", +"7651c066": "PackPurchased(address,uint8,uint256)", "76520713": "setLock(string,bool)", +"76525d7c": "Consume(address,uint256,bytes32)", +"7652c5cd": "icoBonus(address)", "7652ce3b": "getRoot(uint64,bytes)", "7653740f": "addCbAddress(address,bytes1,bytes)", "765388ae": "createCrab(uint256,uint256,uint256,uint256,bool)", "7653d31c": "_clearQueue()", "7653f795": "CarTaxiIco(address,address)", +"76544cac": "_approved(address)", +"76551383": "repayVAIGuardianPaused()", "7655e825": "unsafeWriteUint8(uint256,uint8)", +"76560d1e": "getProfitHistory(uint256)", +"76569fbf": "exchangeEtherForPynths()", +"7656a7c2": "getRandom3(address,address,uint256)", +"7656d6c7": "logBytes12(bytes12)", +"765700d7": "renounceOwnership2(uint256)", +"76570b13": "repeat(uint8)", "765718d7": "register(uint256,bytes)", +"76571b7a": "UpdatedGravatar(uint256,address,string,string)", "76577eae": "distributeEarnings()", +"76578f95": "approve_680(address,uint256)", "76586bcb": "doWithdrawal(address,uint256)", "76587847": "buyDepots(uint256)", "76587921": "transferFromWithNarrative(address,address,uint256,string)", "7658c574": "setQuantityFactor(uint256)", "7658d5ef": "totalICO()", +"76591cf1": "_playerAnft(address,uint256)", "76596a1a": "hasTeamMember(address)", +"7659a914": "partner1TimeLock()", "7659de23": "snapshotBlockHeight()", "7659fd71": "BitcoinProtocol()", +"765a9210": "EtherDogIndexToOwner(uint256)", "765aa39e": "startMulti()", "765af8bf": "getNumArtworksXType()", "765b1766": "tryFinishInterface(address)", "765b59d2": "getStatus(uint256,address,address)", "765b8dee": "transferStep2(address)", +"765b9830": "renounceOwnership2()", +"765bc2b2": "getUserRounds(address,uint256)", "765bfac6": "setEscuela(uint256)", +"765c7b81": "getPlows(address)", +"765c90f1": "mintTeamAndAdvisorsYear1Part6(uint256)", +"765c9524": "setMaxLockAmount(uint256,uint256)", "765c9c7f": "bionic()", +"765d6cce": "isLocalContract()", "765dd7a0": "addTeamAddress(address)", "765e0159": "getNext(address)", +"765e0a08": "lockupEndTime(uint256)", +"765e0fb8": "cancelOrFault(uint256)", +"765eacb4": "removeReserveCurrency(address)", "765f09f2": "GetCurrencyInformation(uint256)", +"76600c23": "balancePf(address)", +"76603696": "wipeFreeEthAndShut(uint256,address)", "7660473a": "EconomyTaxed(string,string,string,string,string)", "7661129e": "updatePromoEthCommission(uint256)", +"7661663e": "deadline(uint64)", +"76616e42": "ActivenessUpgrade(uint256,uint256,uint256)", "76617156": "burnAmountAllowed(address)", +"76618f27": "claimReward(uint256,uint256,bytes)", "7662850d": "init(uint256,uint256,uint256,uint256)", "7662c9a7": "GetAskSeries(address)", +"7662e219": "GasPayTokenAddress()", +"76632189": "savingInfo(address,uint256)", "7663265c": "_setGameSettings()", +"76636722": "SPELL()", "7663680e": "setTotalBurntCoins(uint256)", "76636e73": "PREICO_BONUS()", "76637dcd": "WhoIsTheContractMaster()", +"7663e728": "oldETHMaze()", "7663f171": "getCardIndexOfOwner(address,address)", "7663f228": "testBurnThis()", "7663f822": "exists(address,address)", "76640648": "payforRefund()", +"766589a0": "bountyAirdrop()", +"7665cd19": "epEndBlks(uint256)", +"7665ddb7": "attack(bytes32,uint8)", "7665f6a7": "setTransferOwnership(bool)", "7666ee8f": "addCustomerToRegistry(address)", "76671808": "currentEpoch()", "766719f0": "optInXferGas()", +"76677d19": "setuni(address)", +"7667d18c": "tokensToDistribute(uint256)", +"76681c5c": "setBasicData(uint256,uint256[6],uint256[10],uint256[8],address,address,uint256)", +"76687d3d": "liquidityCap()", "766954b4": "hashString(string)", +"7669705c": "getRepeatersAddresses()", +"7669a640": "incrementByValue(uint256,uint256)", "7669c0c4": "showPhaseCount()", "766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", "766a5f09": "setSalesPool(address)", +"766a71e1": "getCapPrice(bytes32)", +"766ad113": "getReferrerEarnings(address)", "766b0823": "addWhiteBackersByList(address[])", "766b1818": "PYCToken()", "766bd930": "Duanwu()", +"766c408c": "cutePerBlock()", +"766c4f37": "sponsor(address)", +"766cbc00": "userPurchaseAstro(address,uint256)", +"766d2c3b": "nextpriceOf(uint256)", "766d30aa": "setDefaultRecommAddr(address)", +"766d3331": "callDumpTokensForEth(address[])", "766d5235": "isOpening()", +"766d74b0": "upperLagBreakpoints(uint256)", "766d8365": "resetRoundStartTime(uint256)", "766e33f4": "releaseStart()", +"766e4ed6": "repeat2(uint256)", "766e4f2c": "issueTokensToUser(address,uint256)", +"766e7cb7": "emitString()", "766e866c": "setMaxGasRefund(uint256)", "766e8b27": "tokensaleTokensPerEtherNow()", +"766e8cd5": "runningRazInstance(uint256)", +"766ef3e7": "registerArtist()", +"766f150b": "NewRentAtom(address,uint256,address,uint256)", +"766f762b": "recordDPOSell(address,address,uint256,uint256,uint256)", +"766f7815": "rebuildCaches(address[])", +"766fea9f": "isClose(uint256)", +"767000c0": "storeId(address,uint256)", +"76702d83": "NotEnoughEther(address,uint256,uint256)", "76703ef1": "AVIU()", +"76704de0": "extendLockDuration(uint256,uint256)", +"7670b75d": "approve_131(address,uint256)", +"7670b8a2": "artistBalance(address)", +"7670c777": "transferDeposit(uint256,address,address,string)", +"7670dea8": "saleNonEther(address,uint256,string)", +"76715838": "disperseNFTsFrom(address,uint256[],address[],address)", "767180d0": "impl_purchase(address,bool,bool)", +"7671c6b5": "setReserveContract(uint256,address)", +"767220b1": "transferAndCallERC(address,address,uint256,bytes)", +"76727fa3": "getTokenCount(address)", +"7672c640": "setWBTCAddress(address)", +"7673150d": "penalizationRate()", +"76732eef": "_changePerTimeframe()", +"767348e5": "newFarmer(uint256)", "767392b3": "equal(bool,bool,string)", +"7673a43b": "stykRewards(address)", +"7673b6af": "contractSecret()", +"7673eb11": "bdiv(uint256,uint256)", "7673faf0": "wallet4()", +"76740b5b": "canClose(uint256)", "76740de0": "isPlayer()", "767418b0": "alterBalance(uint256)", "76745dbb": "increaseTotalStake(uint256)", "76748f2a": "default_price()", "7674cee3": "paymentMin()", "76753b04": "ledgerUserBetContribution(address)", +"76755118": "purchaseTimestamp(address)", +"76761e76": "setquranAddress(address)", +"7676817a": "disableBurning(address,bool)", +"7676b408": "_isPresaleEnded()", +"76771b57": "PayByEth(bytes32,address,address,uint256,uint256,uint256)", +"76771d4b": "uniFactory()", "76775c10": "addReferrer(address,uint256)", +"76776994": "rewardRate2()", "76779829": "randomC()", +"7677eb12": "total_Vote_Reward()", "767800de": "addr()", "7678369a": "dayfund(address)", "7678473d": "BTCDOGE(uint256)", +"7678f814": "grantTo(address,uint256,uint256,uint256,uint256,uint256,bool)", "7678f8bb": "getBid(int256)", "76792ad9": "setDaily()", "76793f47": "kwhFund()", "7679a816": "handleFund()", +"7679b74d": "BetWon(address,string,uint256,uint256,uint256)", "767a11ca": "verifiedAttributes(address)", +"767a7b05": "withdrawCollateral(uint256,uint256)", "767a99ee": "legalContract()", "767b6190": "constructor(uint256)", +"767b7268": "isWorldCupTeam(address)", "767b79ed": "register(string,uint8)", +"767b9229": "maxLaunchTime()", "767bc136": "cards_titanium_total()", "767bcab5": "setRandomizer(address)", +"767bd4ba": "depositBounds(uint256)", +"767c368e": "setGovernanceV2Address(address)", +"767c3ef1": "streamingFeeModule()", "767c732e": "enterBidForCollectible(uint256,uint256,int256)", "767c9d18": "getMigrateInAttoTokensValue()", +"767d4be2": "setTimesDebug(uint256,uint256)", "767d65ba": "ASEChain()", +"767d96e5": "FinishPreSale()", "767eb651": "getRemainingAmount(address,address)", "767eb8ad": "isValidName(bytes16)", +"767ec8a8": "changeBetPool(address)", "767f0215": "MAIN_SALE_BONUS_PERCENTAGE_PHASE3()", +"767f033f": "depositInternal(bytes32,address,uint256)", "767f61ac": "putTitle(bytes32,string,bytes32,bytes32,bool,string)", "767f7b01": "User(string,address)", "767fa723": "getPresaleInfo()", "767fb1c4": "RecoverableController(address,address,uint256,uint256)", +"767fe0b2": "isNormalNode(address)", "76809973": "BeneficiaryChanged(address,address)", "76809ce3": "decimal()", +"7680a44b": "withdrawAllToBundle()", "76814692": "BusToken()", +"76817077": "event_deposit(uint256,bytes32)", "76823637": "startNewTurn()", "768255ca": "TokitRegistry(address)", +"7682dfca": "globalManagers(address)", "7682e6ff": "getTrustSetting(address)", "768356c1": "TUI_ADDRESS()", +"7684002d": "STYKRewardsPayOuts(address)", "768433c2": "topFab()", +"76843b1d": "tokensTotron__(uint256)", +"7684569c": "setStablePricePower(uint256)", "76849376": "addNode(bytes32,address)", +"7684d4e3": "userfee()", "768549aa": "KpopItem()", "76855764": "enableSudo(bool)", "76858faf": "ViralToken()", +"768599c7": "setVipLevel(uint256,uint256)", "7685e1df": "NPTToken(address)", +"7685e8a6": "ChangeMaxCapTokensEvent(uint256,uint256)", "7686136a": "updateCourseRate(address,uint256)", "76865eea": "unHalt()", "7686cea9": "etap()", +"7687ab02": "buy(uint256,address,uint256,address,uint256)", +"7687efe9": "CancelBid(uint256)", +"76883a60": "getDocument(bytes32,uint256)", "76884153": "AirTransfer(address[],uint256,address)", +"76886ebb": "toke(address,uint256)", "76888a3e": "TheTokenF()", "76890c58": "transferOut(address,uint256)", +"768911da": "getAddressWithRequire(bytes32,string)", +"76892e08": "minERCRent()", "76894bd9": "tokensToEthereum(uint256,uint256)", "76897b90": "setReserved(uint8,uint8)", "768a3326": "myxTest()", "768a3a7d": "GetSender()", +"768a3a99": "setManualSeigniorage(bool)", "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)", +"768d12a0": "getPersonalStatistics()", "768e7220": "ownerLockedBalance()", +"768ef493": "setFarmPoolContract(address)", +"768f3417": "TenderRepo()", "768f930d": "checkSignersByAddress(bytes32,uint256,uint256,uint256)", +"768f9fb7": "whitelistTrader(address)", +"768fb10a": "midtermBondInfosOf(address)", +"768fc8fd": "_hal9kNftPool()", +"768ff242": "Forced(address,address,uint256)", +"76902b83": "initialize(address,address,address,address,address,address,address,address,address,address,address)", +"7690641d": "decide(uint256,uint256)", "76907bc7": "setCoinBalance(address,uint256)", "7690bee4": "NextGenHyip()", "7690ed70": "_changeLockDate(uint256)", +"76911b5d": "Buy(uint256,uint256)", "7691471c": "PRE_SALE_TOKEN_CAP()", +"769149cb": "normalDistribution(uint256)", "76917b68": "updateMC(uint256)", +"769182ac": "registerUserAgent(address,bool)", +"769184c9": "getNumMarkets(address)", "76918f5d": "setAdPriceMultiple(uint256)", "76922f78": "auctusPreSaleAddress()", +"7692535f": "outputConduit()", +"7692692c": "FundsBooked(address,uint256,bool)", "7692ac94": "createEtherMonster(uint256,uint256,uint256)", "7692ba9a": "claimOwnership(string,string,uint256,uint256)", "7692c4d8": "testCantFinalizeNotEndedSale()", "7693488b": "finalizeTokenSale()", "76937a3f": "airDropCustom(address[],uint256[])", +"7693af5d": "getPersonalStats(address)", +"76942aed": "cancelFaultPeriod()", "7694df16": "scaledRemainder()", +"7694e0e5": "invested_m(address)", +"7694f281": "getMyLeftReferrals(address)", "76959b6a": "hasSDC(address,address,uint256)", "7695be1d": "DaleOR()", "7695d79b": "nftTokenCount()", +"7695dcfb": "benzToOwner(uint256)", +"76964187": "orbiAddress()", "769643bc": "reclaimTokenOwnership()", "76965867": "getStakedBalance()", +"76968aa9": "conditional_increment()", "7696c042": "secondsPerMonth()", "7696cf52": "bonusFirstWeekPeriod()", +"7696e088": "setCost(uint256,uint256)", "7696f0db": "frozenCellCount(address)", +"7697421c": "transferOptions(address,address,uint256,bool)", +"76975fac": "releaseHydronForHydrong(uint256)", +"76977a3a": "getPrice(address,string)", "769794dd": "TildeCoin()", "769796fe": "resetAction(uint256)", +"7697bf94": "leaveTokenGroup(uint256)", "7698da24": "affirmationsSigned(bytes32)", +"76991ff5": "knjige(string)", "76992d7c": "SettingsChanged(uint256,uint256,uint8,uint8,uint8,uint8,bool)", "769988b3": "p_update_mEmpireScoreMultiplier(uint256)", "76999896": "KingOfTheEtherThrone()", +"769aad85": "transferablePynthetixAndAnyRateIsInvalid(address,uint256)", "769af180": "EGGS_TO_HATCH_1BAT()", +"769af3a5": "setStickerEachValue(uint256)", +"769b90b9": "setBurnReward(uint32,uint256)", "769bf742": "unregisterRecord(bytes32)", +"769c022b": "seek(uint256)", +"769c8d90": "unregOracle(address)", "769c9226": "setLockAll(bool)", +"769caf60": "_anomalieAddress()", +"769d1ec3": "playDiceGame(address[],uint256,uint256,uint256)", "769db61d": "addNewCard(uint256)", "769dc523": "GetCategoryNumber(bytes4)", +"769e3dc5": "lpUnlockFeeRatio()", +"769e56c7": "balanceBurn(address)", +"769e7143": "raiseConvertByPathInput(uint256,uint256,address,address,address,uint256)", "769e86cd": "getMyAccountBalance()", "769edf6a": "createHash(uint256,address)", "769f194f": "FOUNDERS_TOKENS_VESTED_2()", +"769f8788": "minFarmable()", +"769ff38b": "startAirdropp(uint256,uint256,uint256,uint256)", "769ffb7d": "setDirectMintAgent(address)", +"76a03dff": "betFromEarnings(uint256,uint256)", "76a04af5": "CompensateChips(address,uint32[])", +"76a0716d": "_activeBalanceOfAt(address,uint64)", +"76a08b1c": "depositNewUser(bytes32,address,address,uint256)", +"76a12777": "buy_monthly(address)", "76a133ca": "KabirTestToken2()", +"76a14d1d": "submitRRSets(bytes,bytes)", +"76a15f11": "getAlias(string)", +"76a162a3": "loadGovernance()", "76a24f25": "originalPrice()", "76a25c5c": "calculateReward(uint256,uint256,uint8)", +"76a2e277": "_burnExcessFXB()", +"76a2f0f0": "A_precise()", "76a310a5": "addAuction(uint32,uint256,uint256,uint8,uint32)", "76a327fc": "hitMobster(uint256,uint256)", "76a3f9c9": "addToWinningsArray(uint256,address)", "76a43abc": "_createPony(uint256,uint256,uint256,uint256,address,uint16)", +"76a48c71": "removeAtIndex(uint256)", "76a4a44d": "AssignGGEPoolOwner(address)", +"76a4b76a": "getMonsterPriceInETH(address,uint32,uint256)", "76a54c60": "sendEth(address)", +"76a57873": "claimCreationReward(uint256)", +"76a59e91": "_erc777()", +"76a5a94c": "EventNotification(address,uint256,bytes32)", "76a5b431": "removeTip(address,bytes32)", "76a5b5b9": "LogTransfer(address,address,uint256,bytes)", +"76a5bcf6": "editFee(address,uint256,uint256)", +"76a5bf46": "createPriceFundYt(string,uint64,uint64,uint256,uint256,address,uint256)", "76a64cbf": "BasicToken(string,string,uint256,uint256)", "76a6676a": "IssuerTransferred(uint256,address)", "76a67a51": "pause(address)", "76a684de": "denyAllowanceProxyAccess(address)", "76a6bf52": "isExecuted(uint256)", +"76a74160": "ChangedForward(address,address,address)", "76a766f7": "Dashgold()", +"76a768e4": "getRewordForDay(address)", "76a85d54": "setExchangePrice(int256)", "76a8bc10": "setExpiry(address,uint256)", +"76a8ec23": "indicarVidaOwner()", +"76a90231": "busdAddress()", +"76a95196": "kingTimeBetweenIncrease()", "76aa2f74": "increaseJackpot()", +"76aa99bb": "veiwMembershipExpired(address,uint256)", +"76aacedd": "timesPaid()", +"76aad605": "setACL(address)", "76aad651": "paymentSupply()", +"76aae507": "AmountShift(uint256,uint256,address)", "76ab5ea6": "changeDifficultyAndPrice(uint256,uint256)", +"76ab7c62": "TREASURE_PALACE()", "76aba714": "refundMany(uint256,uint256)", "76abc03b": "getShareDistribution(uint256)", +"76ac18c9": "serv()", "76ac2323": "WinkSale(uint256,uint256,uint256,address)", +"76ac2ef9": "projectTokenPerBlock()", +"76ac947a": "unlockTimes(uint256)", "76acb5e8": "BuyTicket(uint256)", "76acb968": "TESTTOKEN1()", +"76acf1b6": "snowflakeDescription()", "76ad3abf": "unregisterTraderAccount(address)", +"76adcba5": "gameAdmin()", +"76ae1a5e": "getBridgeableNfts(uint256,uint256[])", +"76ae3322": "eta(address)", +"76ae3a91": "enter(uint256,bytes12)", "76ae684d": "setSaleOngoing(bool)", "76aed2e1": "getTokenType(uint256)", "76aef5e0": "doubleSend(uint256,address)", +"76af0d0e": "approveAndCallWithSignature(string,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"76af11d9": "systemInvest(uint256)", +"76af4ea1": "setTokenSaleAddressAndMintTokens(address)", +"76af7616": "calculateCollateral(uint256,uint256,uint256,bool,bytes32)", "76af7837": "Loss(address,uint8,uint256)", "76af9a1a": "balancePreSale4()", "76b07186": "isPass(address)", "76b088a9": "check_lock(address,address)", +"76b1459d": "AddContractAddress(address,uint256,string,uint256,uint256)", "76b1514f": "getMaxFreeTeams()", "76b15836": "changeStatusModerator(address,bool)", +"76b16588": "clearUser()", +"76b17123": "from_bank()", "76b18618": "changeUnitsOneEthCanBuy(uint256)", +"76b1dda3": "EndSale()", "76b1f3d3": "grantAccessToAddress(address)", +"76b22eac": "registeredAddresses(address)", "76b3131e": "createvillage()", "76b33367": "refundsIssued()", "76b34d2f": "changeCrowdsale(bool)", +"76b34fee": "UNISWAP_INIT_CODE()", "76b39cf9": "activateInTestMode()", +"76b39e37": "validatorStakesRepayed()", "76b3c8a8": "getLotteryInfo(uint256)", +"76b415b2": "thresholdUser()", +"76b467b7": "unlockTime(address)", +"76b46aa1": "userInfo2(uint256,address)", +"76b47d1a": "allowanceAvailable(address,address)", +"76b48412": "getCreationCodeHash(address)", +"76b4d3db": "extendPoolProgram(address,uint256)", "76b547b8": "AthaYOGAToken(address,address)", +"76b5cd03": "createNewHeroTemplate(uint16,uint16,string,string,uint8)", +"76b5cfb3": "currLDB()", "76b5d926": "unreserve(uint256)", "76b63576": "mintFounderTokens()", "76b69d77": "apiRegistryContractAddress()", "76b707b7": "getRelease()", +"76b79862": "BPOOL_BONE()", +"76b79a1e": "getMatchCount(uint256)", +"76b7d5b4": "yield21Dec31Return()", +"76b82637": "votestosend()", +"76b82a91": "safeTransfer(address,address,uint256,bytes)", +"76b8de6a": "initializeRates(address)", "76b95761": "setVestingStartDateTime(uint256)", +"76b99223": "get_y(uint256,uint256,uint256,uint256[3])", +"76ba098a": "checkForUnlockReward()", +"76ba1a65": "approve_766(address,uint256)", "76ba242c": "bonusTokens()", +"76ba28e9": "setNimbusReferralProgram(address)", "76ba6009": "approveRequest(bytes32)", +"76baa233": "IsSpot(uint256)", +"76baa403": "UpdatedCRLToken(uint256,uint256,uint256)", "76babef7": "Puzzled(address,bytes32,bytes32)", +"76bb4e93": "totalInsurance()", +"76bbf007": "ownedPerformance(address)", "76bc21d9": "fireEventLog2Anonym()", +"76bc3f3b": "timeRestriction()", "76bc522c": "getZIndex(uint16)", +"76bcbdf5": "removeGamma(address,uint256)", +"76bd090b": "getbidwinner(uint256)", "76bd28bf": "ORNETCOIN()", "76bd4220": "depositBank()", "76bd4d2d": "submitProblem(uint256)", "76bd5f3c": "changeMintedCappedIdx(address)", +"76bd8df4": "seteraNFT(uint256)", "76be0b89": "HIROTOKEN()", +"76be1585": "administrators(address)", "76be166c": "toAsciiString()", +"76be6b2b": "preSaleTokensSold()", "76be6c24": "mintLVE(address,uint256,uint256)", "76bef6b4": "getOneByOneRootHash(uint256)", +"76bf2215": "notClaimed(address)", "76bf2392": "getCurrentDisplacement()", +"76bf5ae4": "eCRVToken()", +"76bf7557": "_initialToken()", "76bf8044": "pledge(bytes32)", "76bf9f57": "wildcardCount()", "76bfa5f6": "ProvideSale(address,address)", "76bfba0e": "splitPay(address[],uint256)", "76bfba56": "depositForDividend(uint256)", +"76c0a6be": "ROLE_PARTNERWHITELIST()", "76c158cf": "minBankerEther()", +"76c1bcb6": "maxWithdrawFee()", +"76c1d570": "secondaryTransfer(address,address,uint256,uint256)", +"76c23ff1": "submissionCounter()", +"76c272de": "multipleMint(address,uint8)", +"76c29bf5": "getBasicObjInfoWithBp(uint64)", "76c2c0aa": "oresLeft()", "76c2c296": "SYSTEM_CREATION_LIMIT()", +"76c2d510": "normalizedWeights(uint256,uint256)", "76c2f9e7": "HitToken(string,string,uint8,uint256,address,address,address,address)", "76c30794": "mint0(address,uint256)", +"76c32fe5": "setThirdParty(address)", +"76c37231": "onChainRequests(uint256)", "76c390fe": "Display()", "76c3b445": "calculateTotalTokenPerContribution(uint256)", "76c44a80": "openIEOStarted()", "76c46a70": "changeUnitUserBalanceLimit(uint256)", +"76c46b7b": "vaultDebtShare()", "76c535ae": "isExpert(address)", +"76c5d758": "WITHDRAW_TYPEHASH()", "76c6c685": "assertItDoesntThrow(string)", +"76c6dc16": "updateWhitelist_batch(address[],uint8)", "76c6dc8b": "isPosBitOne(uint256,uint256)", "76c6fc9a": "checkOwnerShare(address)", "76c70431": "CRCToken()", +"76c71ca1": "mintCap()", "76c75958": "startCrowdsale(uint256,uint256,uint256,address)", "76c7a3c7": "MIN_FEE()", "76c7b434": "developersCut()", "76c7fc55": "removeBorrower(address)", +"76c80776": "releaseEthToAddress(address,uint256)", "76c82e92": "minAcceptedAmountPresale()", "76c87548": "scoreBracket(address)", +"76c9cc03": "minimumMintGap()", "76ca0225": "initTwo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", "76ca9e48": "indexPaidBonus()", +"76cb115b": "_unifactory()", +"76cb2554": "userLeftFarm(address)", "76cb69e9": "KOIN(uint256,string,uint8,string)", "76cb6f9b": "removeOffChainAddress(address,address)", "76cba420": "stcOrginalBuy(uint256)", "76cc1c5c": "landManagement()", +"76cc5fdf": "changesEnabled()", +"76ccad25": "customerDepositTokensNumber(address,uint256)", "76ccb1fe": "getSpinOutput(uint256,address,uint256)", "76cce072": "setBlance(address,address,uint256)", "76ccf063": "calSimpleRoom(uint256,uint256,uint256,bytes32)", "76cd005d": "distillGodOwner()", "76cd470c": "getCurrentAccountingPeriodId()", +"76cd70ec": "deposit13(uint256)", "76cd7cbc": "sign(bytes)", "76cd940e": "currentBatch()", "76cdb03b": "bank()", +"76ce2dad": "executionId()", +"76cf0b56": "saleTargetAmount(uint256,uint256,uint32,uint256)", +"76cf10a5": "configNewRound()", +"76cf183d": "staticIncomes(address)", +"76cf48f3": "SetImpl(address)", +"76cf5d19": "setBuLottery(uint256,uint256,uint256,uint256)", "76cfc366": "depositOffchain(address,uint256,uint256,bytes)", +"76cfde48": "ManuallyAddedDemoc(bytes32,address)", +"76cffa53": "addressBridge()", +"76d002d9": "eAllowedMTU(address,uint256)", "76d06add": "issueTokensWithCustomBonus(address,uint256,uint256,uint256)", "76d0998f": "Odin2(address)", "76d173a9": "addressAndBalance(address)", "76d1d35e": "numberOwners()", "76d260bb": "setInitialVaribles(address,address)", "76d2d717": "GetFreeTokens()", +"76d2e995": "calculateRewardTotal(address)", "76d33951": "bid(string,address)", "76d380cb": "IrisTokenPrivatSale()", +"76d412b5": "setWithdrawSwitch(uint256,bool,bool)", "76d438b0": "sendReward(uint256,uint256)", +"76d45a09": "approveRecipient(address)", +"76d45cb1": "tokentowbnb(uint256)", "76d47bf5": "unlockAddress(address,address)", +"76d4f283": "setAuctioneerDelayedCancelCut(uint256)", +"76d56882": "hatcheryBat(address)", "76d57aad": "amountInLock(address,uint256)", "76d57ad3": "getMixerInfo(bytes32,uint256)", +"76d58e1a": "depositLiquidity(uint256)", +"76d5db39": "addInvest(address,uint256)", +"76d5de85": "yieldToken()", "76d60a91": "TokensMinted(address,uint256,uint8)", +"76d62d54": "approve_250(address,uint256)", "76d66f5d": "_Transfer(address,address,bytes32)", "76d690bb": "BountyList()", "76d6c296": "getPresale1()", "76d6da67": "TokenMintingEnabled(address,bool)", +"76d708d7": "allAssets()", +"76d72b8e": "depositToken3Reserve()", "76d738d9": "DAZToken()", +"76d743fe": "updateRewardPool(uint8,uint256,uint256)", "76d75952": "getLabelType()", "76d76b9d": "marketRegisterCost()", +"76d7c84a": "_qualifierTier(address)", +"76d7d400": "admin_TransLock(address,uint256,uint256)", +"76d7fc07": "clearPayees()", "76d83cb3": "getTerminalCount()", "76d865dd": "addAdminOwners(address,string,string)", +"76d8b117": "crv_token()", "76d8f03e": "getBonusCount()", "76d92428": "setGatekeeperAddress(address)", +"76d98902": "capitalToken()", +"76d9bfb5": "viewCirculate()", +"76d9f920": "unauthorizeSpender(address)", "76da5667": "admin_kill()", "76dad223": "showNumber()", +"76db1303": "mlSMTX()", "76db2e84": "setMinimumEtherAmount(uint256)", "76db6c8d": "isRedeemable(address)", "76db76f1": "clearNextPrizeTime()", @@ -68133,82 +124651,143 @@ "76dc74cb": "sendHoldComisions()", "76dc76e7": "getUserNumbersOnToken(address,uint256)", "76dc97d9": "_saveMessage(uint256,uint256,address,string)", +"76dd110f": "scores(address)", "76dd1f86": "totalMintLimit()", +"76dd9841": "Explore(uint256,uint256,uint256)", "76ddfc39": "MIN_HARD_CAP()", "76de03d0": "weiTotalRefunded()", "76de1684": "generateOrderByMerchantWithPayee(address,address,uint256,string,string,string)", +"76de1e1d": "bit(uint256,uint256)", +"76dfabb8": "stratCandidate()", +"76dfb98e": "layTop3sort(uint256)", "76dffa4e": "MedCann()", "76e00ed7": "_fromNanoNIL(uint256)", +"76e08739": "weiInvestedBy(address)", +"76e0b4ca": "tokenCollateral(bytes32,address)", "76e0f978": "navAdmin()", +"76e0fccc": "InvestorBlocked(address,uint256,address)", +"76e11a1a": "hdudTokenAddr()", "76e20e53": "getMyBets(uint256)", "76e277c1": "ChickenFarm()", +"76e283f3": "getAcoToken(address,address,bool,uint256,uint256)", "76e29114": "nfsPoolCount()", "76e2bbc7": "paymentInternal(bytes32,uint256[])", "76e403ec": "balancesLocked1Y(address)", "76e40c9c": "lendEther()", +"76e427c1": "tokenToEthSwapInput(address,uint256,uint256)", "76e44ed8": "lockAll()", "76e4660c": "getSumAmountOfDisputedStepsProPatient()", +"76e4a87f": "setKeep(uint256,bool)", "76e4ca0d": "voteQuorum(uint256,bool)", "76e4f921": "parachute()", "76e51e96": "TokenModuleManager()", "76e53221": "participationCaps(address)", "76e55338": "mytest()", "76e57d4b": "withdrawalAddressFixed()", +"76e5b587": "MoneyWithdraw(uint256)", "76e5c0ca": "WineryOperations()", +"76e5d623": "calculateTaxPercent()", "76e608c7": "buyExistFactory(uint256)", "76e6d2b4": "unLock(address)", "76e6dbc7": "tokenBaseRate()", "76e702ee": "tokenDeliveryDue()", "76e71dd8": "delegateTotalSupply()", "76e7430e": "finally(address)", +"76e747d3": "setTransactionId(uint256)", +"76e75a0e": "family()", "76e75e05": "getPurchaseRecord(address)", "76e7b151": "GOFCoin(uint256)", "76e83bcb": "listModule(uint256,bytes32,bytes32,string,bytes4)", +"76e8424f": "getUserInfo(address,uint256)", +"76e86e72": "HYPE()", +"76e8a88b": "userSettlements(address,uint256)", +"76e8af6e": "updateFile(string,string,uint256)", +"76e8d3b8": "setOmsToken(address,uint256)", +"76e8e057": "collectRentAlways()", "76e92559": "totalMembers()", "76e93db5": "totalMaxBuy()", +"76e9d066": "startArbitrage(address,address,uint256,uint256)", "76e9d4fb": "Hybrid(uint256,string,uint8,string)", +"76e9d615": "balanceDecreaseAllowed(address,address,uint256)", "76ea1c6a": "BuyOnSecondaryMarket(uint32)", +"76ea42aa": "notifyFeeOwner(address)", "76ea430a": "STAGE1_TIME_END()", +"76ea8383": "mintGasTokens$()", "76ea909d": "indSale()", "76eaef99": "CatOffered(uint256,uint256,address)", "76eb5ce0": "END_PREICO_TIMESTAMP()", "76ec477d": "cancelGame(uint256,string,uint256)", "76edb1b5": "ReleaseUpdate(uint256,uint256,uint256,string)", "76edc29d": "TelegramOpenNetwork()", +"76ee101b": "liquidate(address[],uint256[],address,address,bool)", "76ee2d68": "lokedMint(address,uint256,uint256)", "76ee3a87": "mainICOStartTime()", +"76ee75d8": "forceRemoveLender(address)", +"76ef3ac7": "reservedRefsTokens(address)", "76ef5d14": "divX(uint256)", +"76ef6ac7": "setMaxLevels(uint256)", +"76ef83e1": "clearWhiteBlackFrom(address)", +"76efa05f": "boss3()", +"76efc53a": "getPreSaleFlag()", +"76f084d8": "maxBetValue()", +"76f0e728": "cApeSwapRouter()", +"76f0faaf": "_addInvestor(address,uint256)", "76f10ad0": "getSnapshot(uint256)", "76f14c98": "personalizeSquare(uint256,bytes,string,string)", "76f187ab": "tokensTransferredToHold()", "76f1dbd4": "Authenticate(address)", +"76f23c82": "firstPay(address)", +"76f25a84": "startAirdrop(uint256,uint256,uint256,uint256)", +"76f283ae": "CeilingLowered(uint256,uint256)", +"76f2892f": "setPaths(address,address,address[])", "76f28a4f": "setMarket1(address)", "76f2a59a": "instantMint(address,uint256)", "76f2a94b": "acceptWithdrawals(uint256[],uint256[],uint256[])", +"76f2ccb9": "setRareAddress(address)", "76f30ca1": "toContentID(address,uint256,string,bytes)", "76f31513": "decreseApproval(address,uint256)", "76f3264b": "getProviderSupply(uint256,uint256)", "76f36dec": "ETHC(uint256,string,uint8,string)", "76f39b28": "SetMaxAllowedBetInTokens(uint256)", +"76f486ea": "votedPoolType()", "76f4d8ad": "exchangePlayerTokenCount()", +"76f5c98f": "percentToTreasury()", +"76f5cf28": "setMatchRatio(uint256)", "76f6218a": "promoBonus()", "76f660f6": "batchTransferFrom(address,address[],uint256)", "76f6de69": "RTCCOINERC20(uint256,string,string)", "76f70900": "oraclesCount()", +"76f72b2d": "xtokenBurnSwap(uint256)", "76f75e7f": "orderList(uint256)", +"76f7b35f": "addLiquidityTwoSidesOptimalETH(uint256,uint256,address,uint256)", "76f7c522": "hasOneStepWithdraw()", "76f86e18": "order_buy(address,uint256)", +"76f886de": "clearTriggered()", "76f88781": "pow2Constant()", +"76f909ae": "subTokenIdCount(uint256)", +"76f92b8a": "setBackoDetailsHash(string)", "76f9378d": "getWords(uint256)", "76f95818": "stopFlagOn()", "76f9b8d9": "getTokenInfoSignatures()", "76f9e018": "greedIsGood(address,uint256)", +"76f9fa3d": "getManagedToken()", "76f9fd38": "castVote(string,uint16)", +"76fa4802": "prijaviIspit(address,string,address)", +"76fa6206": "setTicketForSale(uint256)", +"76fab6e8": "mintWithMessage(address,uint256,string,bool)", +"76fb3619": "yCrv()", "76fb7c72": "setAllowedAgentsForOtherSource(address,bool)", +"76fbc07e": "bonusList(address)", +"76fbcb2f": "protocolFeesThisEpochByPool(bytes32)", +"76fc141c": "getOpenPuts()", "76fc53c0": "extDistributeBondFund()", +"76fceb76": "initialize(uint256,address,uint256,address)", +"76fd4fdf": "burn(address,uint256,bool)", "76fd7951": "MacoTestCoin()", "76fd7b11": "requestWeiPrice(string)", +"76fd9d4d": "whiteListTransfer(address)", "76fe192a": "forceResetPeriod()", +"76fe1e92": "solve(string)", "76fe3efa": "itemNameAddress(uint256)", "76fe47eb": "returnBooleanInverted(bool)", "76fe8228": "getHorseSex(uint256)", @@ -68216,22 +124795,36 @@ "76fee774": "getNewPetCard(uint8)", "76fee8e0": "MineBlocksAddr()", "76ff1d24": "MailhustleCrowdsale()", +"76ff50e3": "startEarlySwap()", "76ff87cc": "VYRAL_REWARDS()", "76ffb887": "failure()", +"76ffc8bc": "TowerCreated(uint256)", "77002fcf": "getBadge(bytes32)", +"77003367": "thirdPool()", +"770079eb": "getBonder()", "77009c5c": "EYCryptoTradingGOLD()", "7701c52d": "withdrawMarginPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", "7701f361": "test_newProposalAndNotEnoughVotes()", +"77024644": "tickets(uint256,address,uint256)", "7702b8e4": "confirmOneSell()", +"77033c71": "redeemOfferToken(string)", "770342ee": "ChannelClosed(address,uint256)", +"77035183": "getAllocatedPart()", +"7703f0a1": "changeRegPauseFlag(bool)", "7704533d": "arbitrationWallet()", "77049457": "median()", "770506c1": "withdrawMobileAppCoin(address)", +"77050b54": "setAllow()", +"77055888": "XYZDPerBlock()", "7705b6f4": "claimBoard(uint256[81])", +"7705f1f2": "getStakingPoolIdOfMaker(address)", "7706390b": "handover(uint256,address)", +"7706ae80": "getPriceSupport(uint256)", "77073437": "alicoinToken()", +"7707674e": "doesNotReturn()", "77076855": "isInOpenMakeOrder(address)", "77079f55": "YohoToken()", +"7707bc51": "erc20_token()", "7707c69a": "set_sale_owner(address,address,bool)", "7707e2b2": "withdrawHoldVault(uint256)", "770850c8": "accountIndexOf(address)", @@ -68243,135 +124836,238 @@ "7708ea1d": "ROLE_CEO()", "77097bfa": "testerReentrant()", "77097fc8": "mint(uint256,string)", +"77098290": "enabledRegistryIds(address)", "7709bc78": "contractExists(address)", "7709c0d3": "setMaxWhitelists(uint256)", +"7709dac9": "latestTRYStakeTime()", "770a4265": "updatePrizeDist(uint8,uint8,uint8,uint8,uint8)", +"770a5562": "WhiteListingContractSet(address)", +"770a71d3": "writeInt(int8,int16,int32,int256,int256)", "770ae2af": "setMinAllowedBetInEth(uint256)", "770b210e": "canBuyLimit()", "770b5414": "getCurrentData()", "770b80b6": "returnBalanseToTarget()", "770b8aab": "RecoveryModeActivated()", +"770ba561": "readBRRData()", "770bb9ae": "_createDrawings(bytes32,bytes32,address,string)", "770c59b8": "purchaseParrot(uint256)", "770c6bde": "removeItemLendingList(address,uint256)", "770c6cbb": "WithDrawPreForkChildDAO()", +"770cc2d6": "PIONEER()", +"770cca5a": "RefineCokeCompleted(uint256,uint256)", "770cde1b": "ContractExample(string)", +"770d0c5d": "startRebalance(address,bytes)", +"770d58f8": "_gegoToken()", "770d64c6": "LogLate(address,uint256,uint256)", "770d6591": "_setArmorValue8(uint256)", "770d8e79": "ADDR_TKG_TEAM()", +"770de214": "approve_781(address,uint256)", +"770e09fd": "setAssetAddress(address)", "770e3106": "getAccountsCount()", +"770e6248": "NewManager(address,address)", +"770e96d3": "withdrawEthAsQuote(uint256,address)", "770e9e85": "takeTheTorch(address)", "770eaebe": "Send_Data(address,uint16)", "770eb5bb": "set_label(bytes12,bytes32)", +"770f4de9": "setTokenCreationContract(address)", "770f75b7": "fireCancelProposalEvent(address,uint256)", "770f9feb": "clyckterium()", +"770fc798": "initinalNewUser(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "770fe154": "ApplyVote()", +"77104b8e": "deposit11(uint256)", "77109b05": "depositEther(address[2],uint256[7],uint8,bytes32[2])", +"7710dce5": "setPharaohGameContractAddressAndMintTokens(address)", "7710f29f": "setupPeriodForICO(uint256,uint256)", "77115c9d": "seedRoundEndTime()", +"7711e857": "getNextTime()", +"7711fd83": "globalSettings(address,uint32,uint32,uint32,uint32,uint32,uint32,address)", "771282f6": "currentSupply()", "77129790": "Crowdsale(address,address,uint256,uint256,uint256)", "7712acd2": "getABname(uint256)", "7712c870": "slammerTime()", +"771378dc": "_minDepositBFIAmount()", "7713b431": "getContactsLength()", "7713ba04": "setPI_edit_11(string)", +"7713dcac": "getStartITO()", "77146255": "_nextTokenId(uint256)", +"7714f39d": "tokenPriceAtLastFeeMint()", "771548e2": "moveAccount(bytes32,bytes32)", "771602f7": "add(uint256,uint256)", +"77163072": "tokenId2Apostle(uint256)", +"77167e38": "setRiskFundAddr(address)", +"77169709": "BuyPack(address,uint256,uint256)", "77169fbd": "gainsOfVault(uint256,address)", "7717403b": "ALLOC_CROWDSALE()", +"77182261": "getParametersHash(bytes32,bytes32,address)", "7718238f": "addFee(address,uint256)", "7718ce93": "player5()", "7719f57e": "Seedex420(uint256,string,uint8,string)", "771a2af4": "getCitationRecordsLength(string)", "771a3a1d": "taxRate()", +"771a93d5": "goatPerBlock()", "771acf31": "fluffyCatCut()", "771ad078": "BuyGenesis(address,address)", "771ad635": "getContentCred(address,uint256)", +"771b0e6d": "getExchangePriceUSD()", +"771b1907": "artistPct()", "771c04ae": "ARCToken(address,uint256,uint256)", +"771c21f0": "checkTokens()", "771c288b": "next_stone_id()", "771c3ec7": "setVendingAttachedState(uint256,uint256)", "771c7ad1": "hotwalletAddress()", "771cbe3d": "_mintCard(uint8,address)", "771ce552": "readownerXname(string)", +"771d0798": "closeCSP(bytes32,address)", +"771d1baf": "setDaoFee(uint256,uint256)", "771d7b47": "finishedMigration()", "771d9d05": "ecosystemAllocated()", +"771dc86a": "ratios(uint256)", "771e4326": "wingsETHRewards()", +"771edc4c": "explorationResults(uint256,uint256,uint16[5],uint8[5],uint8[10][5])", "771eee16": "freezeToken(bool)", +"771f074a": "presaleTotalBuy(address)", +"771f24ec": "withdrawEthFunds(address,uint256)", +"771f6013": "setClaimTreasuryFee(uint256)", +"771fa572": "testStrLenRunesMost()", "771feb74": "getPrecious(uint256)", "771ff086": "allocatenonCSTokens(address,uint256)", "7720295a": "STARTING_CLAIM_PRICE_WEI()", +"7720505f": "getPriceLevel3(address)", "7720e74c": "changeSaleEnd(uint256,uint256)", +"77215790": "addLiquidityETH(address,uint256,uint256,uint256,address)", "77215c8d": "getObserverCount()", "772199a1": "getJob(address,uint256)", "77226237": "isCompetitionAllowed(address)", +"77227df3": "_getDelayable(uint256)", "77228659": "query2(uint256,string,string,string)", "7722d01f": "TokenChanger(address,address)", "77231e6c": "tokens_sold()", +"77231eaa": "recoverAccess(address,address,address)", "77233e90": "setTo(address)", +"7723a24a": "handledByAsm(address)", +"7723c5f1": "enableFarming()", +"7723cc64": "_getGstCollectorAddress()", +"7723d0de": "CountCompleteWork()", +"7723d306": "extendContract(uint256,uint256)", "7723e2f3": "ArtToken()", +"7723eda8": "maxSplitAmtEth()", "77241a5f": "makerDaoContract()", +"7724336c": "removePositionOnly()", "77248e3d": "claimReservedTokens()", "7724bdbf": "setStatusInternal(address,uint8)", "772506bb": "jackpotFraction()", +"772517bf": "swap2WETHRouting(uint256)", "77253984": "DPToken(uint256,string,string)", "7725686f": "thawGlobalTransfers()", +"77266653": "votedPool()", +"77267ec3": "accruedInterest(address)", "7726a59a": "WINNER_COUNTRY_CODE()", "7726bed3": "setEnable(bool)", +"7726f776": "createInstance(address)", +"77273c2a": "BidAccepted(address,uint256,uint256,uint256)", "7727c9ad": "changeMinStake(bytes32,uint256)", +"772813ed": "updateLockTypes2()", "77282b70": "polymathRegistry()", "7728579a": "isIcoFinalized()", +"772865e2": "balanceOf(address,bool)", "77287520": "donate(string,address,string,int256)", +"772898ed": "_encode_sol_bytes17(bytes17,uint256,bytes)", "77289b50": "setMedium(uint8)", "7728c75a": "LoanRepaid(address,address,uint256,string)", +"7728e6cc": "poolLisaAccount()", "7728f48b": "destroyRobot(uint256)", +"772970b7": "getOneBet(uint256)", +"772a011b": "cycleStakePoolTotal(uint256)", +"772a30d6": "thisTotalSupply(uint8)", "772a3835": "customerExchangeFiat(uint256,address,string)", +"772abb2f": "core_team_supply()", +"772ad01f": "publicOfferingPlans(uint256)", +"772b062a": "MINT_PER_YEAR()", "772b7a73": "getTxOrigMcwTransfer(bytes32)", "772bcc79": "DexAgeTest()", +"772bf29b": "setReferralPercentages(address[],uint256[])", "772c1863": "increaseStellarBalance(uint256)", "772c658b": "getVIPBounusRate(address)", +"772c865d": "uintFunc(uint256)", "772cb26b": "isStringEq(string,string)", +"772ccf5d": "membership(address)", "772ce10b": "setFuelDestination(address)", +"772d9cd5": "setLimitAndDailySpent(address,uint256,uint256)", "772e1c6f": "getTrustValue(uint256)", +"772e30b8": "wholee(string)", "772e6f03": "votingProposal(string,bytes32,uint256)", +"772eb2ce": "setIsEnabledPools(address[],bool[])", +"772fbb38": "rfs2()", "772fdcb1": "isContributorInLists(address)", +"772fe14e": "transferableTokens(address)", "77300338": "setActiveTimes(uint256[],uint256[])", +"77301f81": "getConditionData(uint256,address,bytes,uint256)", "773041ce": "setInvestor(address)", +"7730607a": "vSmartContract()", "77312cdc": "setMultiETH(address[],uint256[])", +"77313639": "OrderEvent(address,bytes32)", "773183e3": "buyEmptyLocation(uint256)", +"7731a118": "randomBlock()", "7731cd2a": "Acc(address)", +"773214e0": "ORACLIZE_GAS_PRICE()", +"77329f35": "claimAll(address)", "7732b2a4": "getNextCrystalReward(address)", "7732b322": "PinMoCrown()", "773355bf": "script(bytes)", "77337d37": "tstart()", +"77338642": "Staked(address)", "7733f24f": "ratePreSaleStage()", +"7733fdbb": "add(uint256,address,uint8,bool,uint256,uint256,uint256,uint256)", "77343408": "setURL(string)", +"773473ff": "bscsDevFeesExempted()", +"77349c4a": "executeSwap(uint256,address,uint256)", +"7734a3e0": "postOpenBounty(string,string,uint8,uint256,uint48)", "7734da3c": "NewPassContractor(address,address,address,address)", "7734e398": "setFirstBonus(uint256)", +"7735001c": "inventoryJob()", "773531f3": "tokenOwnerBurner()", +"773540b3": "setStrategistAddr(address)", "77364291": "taskInfo(uint256)", "773721b3": "receivedCWCreturn(address,uint256)", "77372213": "setName(bytes32,string)", +"773755ab": "nameCheck()", "77381082": "Virtonomi()", +"77382fb6": "addTicket(uint256,string,string)", +"7738ffff": "NovaPurchasing(address,uint256,uint256)", "77390f8b": "_envelopes(string,address)", "773984dd": "closeIt()", +"7739ab29": "addRewardableValidator(address,address)", +"7739acc7": "updateChainId(uint8)", "7739ad70": "markAsScam(address)", +"7739b401": "walletTimer(address)", +"7739d59d": "isSolvent(address,bool)", "773a1154": "generateRandomNumber()", +"773a83fc": "addNewHolder()", "773a8597": "HashTokenAward(uint256,string,string)", +"773ab39f": "getVestingSchedules(address,uint256,uint256)", +"773ab712": "ChangeMax(uint256)", +"773acdef": "ping(uint256)", "773adc70": "getAllowedStepAmount()", "773b5b5e": "maxUpdates()", +"773b80c2": "getWidthDimensionFileInPixel()", "773b82a3": "addPerson(bytes32,bytes32,uint256)", "773b90db": "_lotteryCardNoSend(uint256)", "773c3f50": "DPPToken()", "773c5049": "solvency()", +"773c54d7": "registerPatient(string,string,uint256,uint256)", +"773c6dfa": "phase_player_origShare(uint256,address)", "773c84ee": "exec(address,bytes,uint256,uint256)", "773d33f5": "transferAndCallback(address,uint256,bytes)", +"773d45e0": "a(uint256,uint256)", +"773d602a": "currentTaxRatesType()", "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)", +"773e4ae7": "viewMyDelgated()", +"773e5c1d": "sendTokenToGame(address,uint256)", "773e8b0f": "testDAO()", "773ee5a3": "execute_transfer()", "773eef36": "stopRefund()", @@ -68381,94 +125077,156 @@ "773f5edc": "guess(uint256,string)", "773f7665": "processVIPBenefit(address,uint256)", "773ff502": "LogMake(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"77408f21": "productContractAddress()", "7740f667": "mtStartTime()", "77410c03": "adminLockdown()", "774120fa": "merge(address)", "77413267": "getAuctionByTokenId(uint256)", +"7741459e": "getAmountStaked(address,address)", "774190dd": "showUserPoolAddresses(address)", "7741ad4e": "play_game(uint8)", "7741b4ec": "RandomNumberFromSeed(uint256)", "7741fc52": "LottoCount()", +"774237fc": "CALLER_ROLE()", +"774248a3": "setupRegistryICAP(address)", "7742ede4": "IMARK()", +"77432a44": "setRegistrationFlag(address,uint256)", +"77435952": "AcceptUser(address)", "77439e8b": "doYourThing(address,address)", +"7743cd1a": "mushroom()", +"7744027e": "nonNativeWithdrawal(string,address,uint256)", +"77444f62": "updateProjectHashesGenerated(uint256,uint256)", "77446767": "destinationOf(uint256,uint256)", +"77449c0b": "getCurrencyAssetVarBase(bytes4)", +"77450f6b": "MAXIMUM_ETH_CONTRIBUTION()", "77453df7": "Ex()", +"77454fea": "showRawMaterialMess(string)", "7745d3b1": "getUsername(address,address)", "7746167f": "transferBlockValueToBattleValue(uint16,uint256)", "77463b50": "getEggsToHatchDragon()", +"774662f9": "antiBotTimer()", "77467197": "tokensVested()", "774685c7": "CPO_SHARE()", "77469275": "getLegacyRepToken()", +"7746efab": "borrowBalancePrior(address)", "77472b6f": "minEtherCap()", +"774731ac": "getUserPercentRateByStartedAt(address,uint256)", +"77476c7b": "setPriceById(uint32,uint256)", "7747c993": "competition(uint256)", +"7747f847": "HAS_TAG_ALONG_RIGHTS()", "77482b18": "getDeveloperFee()", "7748b07e": "usersNTD(address)", +"77493c96": "withDrawToken(uint256,uint256)", +"77495727": "requestForgiveness(string)", +"77495d78": "dispatch(uint256,address[],uint256[])", +"7749c549": "coolingState(uint256)", "7749d667": "getIncreaseTime(uint256)", "7749e693": "setCategory(uint256,uint256,bytes32)", "774a63a5": "CDSToken()", "774a97cf": "getCurrentTapAmount()", +"774ad30a": "exitAndWithdraw(uint256)", "774b71d6": "TokenPriceProposalSet(uint256,uint256,uint256)", +"774b99dd": "playerRoundSid(uint256,address)", "774bafdf": "unlockMe()", "774dba58": "playHome()", +"774e6f30": "getPriorValue(address,uint256)", "774e88dc": "hasUnlockDatePassed()", "774eb322": "close(string,bytes32,uint8,bytes32,bytes32)", +"774ebff9": "createTestPool(bytes32,uint96,uint96)", "774ec644": "setUserPrice(uint256)", +"774eefb2": "getQianCount()", "774f787a": "ShitsToken()", +"7750446f": "depositReserves(uint256)", "77507425": "buyerFunded(bool,address)", "7750b2b1": "__setDeadline(uint256)", +"7750db14": "mockAdvanceBlocks(uint256)", "775146c3": "request(bytes32,uint256)", +"77514a57": "setEmergencyWithdrawable(bool)", "77517765": "getTotalActiveStake(uint256)", "7752182b": "AddReserveToNetwork(address,bool)", "77524af9": "wethTransfer(address,uint256)", "775274a1": "requestRefund(bytes32)", +"7752d98b": "sibudfugisidnlg(address,uint256)", +"7752f487": "boosterPacksOwned(address)", "77532fa8": "TotalClosedDeposits()", "77538407": "Ap()", "7753ec49": "in_registration_phase()", +"7753f47b": "ETH_ADDR()", "77542194": "setTokenTransferStatus(bool)", "7754305c": "getURI()", "7754ec29": "WinCoin()", +"77550756": "newFeeAddress(address)", "7755a0f5": "ResolutionProposalSubmitted(uint256,uint256,address,string,string)", +"775612d3": "setXmon(address)", +"77563e26": "DeprecatedContract()", +"7756588c": "addValidatorApproval(address,uint256)", "7756c908": "transferLocked(address,uint256)", "7757fc5d": "withdrawalOpen()", +"775828f4": "setBurnPercentage(uint24)", +"77588ac8": "m_SumOfWeightedStacking_of_Stack_Options(uint256)", "7758bf86": "maxBridgeWidth()", "7758c4f8": "quickBuy(uint256)", "7758d407": "nextCommonTTWTokenId2()", "775915ce": "stepTwoEndTime()", +"7759187f": "rabbitBreedCount(uint32)", +"775983f3": "setSeedRate(uint256,uint256,uint256,uint256)", "77598626": "TZCoin()", "77599026": "calculateYourValue2(uint256)", +"775a13d2": "SetFeeAcount(address,address)", "775a25e3": "getTotal()", +"775a4668": "pauseAndTransferTo(address)", "775a8f5e": "toBytes(uint256)", "775a91ac": "timeLockTokens(uint256)", +"775abeed": "addNode(uint256)", "775ad527": "allow(address,address)", "775af9df": "MiningRigFarmer()", "775b9c13": "setWhiteList(address[])", +"775bc525": "nodesByValidator(uint256)", "775c300c": "deploy()", +"775c3727": "getFundingAccount()", "775c46cd": "startFunding(uint256,uint256)", +"775d35e5": "getLivePosition()", +"775d9865": "proportionalWithdraw(uint256,uint256)", +"775dd78c": "mayPerBlock()", "775dec49": "keccak()", +"775e1377": "_rateBase()", "775e38f7": "NO_MONSTER()", "775eb900": "signed(bytes32)", "775ee3ef": "view56()", "775f5ec0": "finishRitual(address)", "775f731c": "addSomeUETsTo(address,uint256)", "775fc127": "operation()", +"776062c3": "erc20safeTransferFrom(address,address,address,uint256)", "77609a41": "challengeCanBeResolved(bytes32)", +"7760c6c7": "addServiceContract(address)", "7760da7f": "reclaimTokens(uint256)", "77610ba2": "setDollar(uint256)", "77617a7d": "BuyToyMoney()", "776184b1": "test_oneValidEqString()", "77620729": "forward(address,address,uint256,bytes,bytes32,bytes)", +"77623c5e": "SetPOZBenefit_Address(address)", "776247c4": "withdrawEthFromBalance()", "77627a1d": "Goutex(uint256,string,uint8,string)", +"7762ad81": "insuranceFundRatio()", "7762df18": "VVDB(address)", "7762df25": "potentialOwner()", "7762f046": "setContractBridgeAddress(address)", +"7763605e": "mint(address,uint32,uint32)", +"7763d776": "emergencydeadline()", +"77640ddf": "startRevoke()", "77640f9c": "setClaim(address,bytes32,bytes)", +"7764b4d2": "setTokenPool(address)", "7764d878": "checkstatus()", "7764f771": "getBackBNB()", "776532de": "Numa()", +"7765a1c0": "TokenListed(uint256,address,uint256)", "7765c52c": "getAuctionStatus(uint256)", +"77661c64": "burnList(uint256)", "776676d6": "newRC(uint256,uint256)", "77669b2d": "setCompte_33(string)", +"7766a3b5": "approve_774(address,uint256)", +"7766a989": "getTotalMintedKRK()", +"7767c476": "initialize(address,address,address,address[],uint256,uint256,uint256)", "7767ecc3": "inSdcForAdmin(address,address,uint256,uint256)", "7768dec0": "isTokenSale()", "77695d39": "getDb(uint256)", @@ -68476,6 +125234,7 @@ "7769d384": "revokeAndPublish(address,bytes32,bytes32,address)", "7769ea0a": "addPool(uint256)", "776a038e": "PurchaseToken()", +"776a0835": "removeBid(uint256,address)", "776ab634": "unpauseToken(uint256)", "776b37e2": "editCertificate(string,address)", "776b6b27": "setRoscaAddress(address)", @@ -68486,63 +125245,110 @@ "776d89ba": "delPhase(uint256)", "776dba67": "VioRewardERC20Token()", "776df027": "testFailDisownNotOwner()", +"776e11dd": "getRoundPlayers(uint256)", "776e7fc1": "checkRedbullQuest(address)", +"776ed283": "SaleNoted(address,uint256,uint256)", +"776f3843": "score(address)", "776f3b99": "burnByPercentage(uint8,uint8)", +"776f630c": "approve_895(address,uint256)", "776f9663": "PeerBet()", +"776fb9c0": "weightedNumber()", "776fd7ce": "setEscrowTransfer(address,uint256,uint256,bool)", +"776fdd24": "proposeGlobalConstraint(address,address,bytes32,bytes32,string)", "77703d29": "getBuyOrder(uint80)", "7770bd15": "crowdSale()", +"77712b0e": "ownerAddTokens(address,uint256)", "777256c4": "Greeter()", "77725b88": "SetFFSettings(address,address,uint256,uint256)", "7772a380": "isInGeneration(address,uint256)", +"7772b54b": "ChangedTransferLock(bool)", "7772ba07": "setDelays(uint256,uint256)", +"7772fad1": "toggleActive(bytes32,bool)", "77738ce7": "fundAccount(address,uint256,uint256)", +"7773c36e": "createResource(uint256,uint256,uint256)", +"7773d821": "balanceOfTimeLocked(address)", "7774c394": "isNecromancer(uint256)", "7774d64c": "testCreateOrder()", "7774e950": "createUnit(uint256)", +"77759eac": "setPricePerItem(uint256)", +"7775eb06": "ignoreDividend(address)", "7775eec9": "getCompte_29()", +"77762820": "settleGame()", "7776466c": "preSaleToken()", "777665b8": "transferTOKENtoProviders(address,address,uint256,address,uint256)", +"7776afa0": "_mint(address,uint256,uint256)", "77773d90": "amountOfTokensPerEther()", "7777789f": "_mint(address,uint256,uint256[])", "7777d088": "lotteryTokensPercent()", "777850f9": "payAfter(address,uint256)", +"777878c0": "flashloan(address,address[])", "77790081": "updateMaritalStatus(string)", "777955b1": "updateReferralGu(uint256)", "7779b0e4": "_buyTokens(uint256,uint8,address,address)", +"7779cc88": "slTokenBalances(address,address)", "777a5dc5": "explodePhoenix(uint256)", "777ab367": "mk_contract_address(address,uint256)", "777ac349": "totalWins()", "777ac522": "_createTree(string,string,uint256)", "777aff7d": "updateHistory(address,uint256)", +"777b24a0": "settrader(address)", "777b4547": "ICO(address,address,address)", "777c1bb2": "eosLITE(uint256,uint256)", +"777c2576": "testTransferTokenTest(address,uint256)", "777c658f": "getTotalDonations()", +"777c8dfc": "get_lp_token_addr()", +"777cb120": "set_minimum_bid_value(uint256)", "777cfd5f": "createSubmission(address,string,bytes32,bool,bytes32,string,uint256)", "777d1a8d": "HealthCoin(uint256,string,string)", +"777d5c7b": "accountInfosIndex(uint256,uint256)", +"777de704": "auctionEndTime(uint256)", "777dff4a": "transferCTO(address)", +"777e0d86": "getLatestETHPrice()", +"777e16f3": "transferFromAndLock(address,address,uint256,uint256)", "777e479d": "getRoundBlockNumber(uint256)", +"777e63ed": "setAntiBotTimer()", "777e6b1c": "getEntitledFunds()", "777e82ca": "BookERC20EthV1p1()", "777e940c": "excessRefund(address,uint256)", +"777ebe3d": "feeDelay()", "777ecb74": "LogPaused()", "777eceb8": "tokensForOneEther()", +"777ee7bf": "getBorrowContractSize()", +"777f56e8": "customer(int256)", +"777f5928": "getContributorsInTokenGroupCount(uint256)", "777f942d": "changeMinStake(address,bytes32,uint256)", +"777fdde6": "runTokenUniswapTransfer(uint256,address,address)", "777feff5": "getCertificationDbAtIndex(uint256)", +"7780a7b8": "setFailedMessageReceiver(bytes32,address)", "7780ae85": "desimls()", "77810380": "getRegistrationToken()", +"7781127e": "changeCollector(address)", +"77812063": "_incrementDeposited(uint256)", "77818808": "Electrium()", +"7781b05a": "creditsToUnderlying(uint256)", +"7781d9b6": "testGetPriceForAssetAmountMulCollatRatio_Overflow()", +"7781deba": "hash256()", "7781eafa": "considerPerseus(uint256)", +"7782383f": "returnvalue()", "77826b0c": "setMaxReceiveEther(uint256)", +"7782fa2d": "logBytes3(bytes3)", "778317c4": "setWinLossAmount(uint256,uint256)", +"7783482f": "getServicePoolsSumWeights(uint256)", "77838c63": "distributedToOwner(uint256)", "7783c06b": "newArt(string,string)", +"778456ba": "genesisRewards(uint256,uint256)", +"7784a000": "calculateGroupDividendsWithDebtsForTimestamp(address[],uint256)", +"7784f2c7": "addressLockTransfer(address,bool)", +"7784f8d4": "Receipt(address,uint256)", +"77856471": "divPlanInvest()", "7785859f": "altCapitalization()", "7785954b": "produceRandom(uint256)", "778639cb": "checkValidFighter(address,address)", "77863b61": "CrossWhitehatWithdraw(uint256,address)", +"7786475f": "newSlotId_ap4()", "7786b22d": "ELRUN()", "77870bce": "BeatOrgTokenPostSale(address)", +"7787d9ed": "TeamMemberTotal(address)", "7787dfaf": "test_9a_transferShouldBeFalse()", "77886028": "setTokensContractAddress(address,address)", "7788d126": "REFERRAL_BONUS_LEVEL3()", @@ -68551,22 +125357,57 @@ "7789fc90": "createBet(bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8)", "778a56ce": "toggleBurn()", "778a5978": "guessNumber(uint16)", +"778b09ce": "realWorldPlayers(uint256)", "778b5aee": "getWalletsCount()", +"778b8a15": "parts(address)", "778c2cea": "onlyLocklistedCanDo()", +"778c5d44": "tryMeLast()", +"778c8543": "preMintedTokenLock(address)", "778d00f0": "pushPrivateInvestment(uint256,uint256,address)", "778d491e": "wd(uint256)", +"778d4d64": "modifyAssetTypeLoanParameters(address,bytes32,uint256)", +"778db8d4": "createStakingPlan(uint256,uint256,bool)", +"778ddf26": "arbwhat(uint256,uint256)", "778e388e": "parseInt_(uint256)", +"778e44a7": "setIsBootstrap(bool)", +"778e5548": "getUidAsInteger(address)", +"778f652d": "unlockLiq()", +"778f845e": "doDeepStep(uint256,uint256,address)", +"778f8cb0": "timeStaked(address)", +"778fe9d8": "tokensToSwap0(uint256)", +"7790a086": "setDummyPIDValidator(address,address,address,address,address,uint256)", "7790a5d2": "Token_5()", +"7790b6af": "asETHBorrow(address,uint256)", +"77913322": "WITHDRAW_DURATION()", "77913fbc": "getModuleId(string)", +"77915639": "taxRatio()", +"7791637c": "incentivizedLeverageRatio()", +"77916c01": "deregisterVendor(address)", +"7791bd32": "onekFeePrice()", +"7791d3f3": "mintNFT(address,string,string,string)", "7791dc1f": "AuthEnd()", "77921952": "contributorCounter()", "77922220": "getRegionProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", "77922e57": "batchCancel(address[],uint256[],uint256)", +"7792e7f1": "ownsBase(address,bytes32)", "7793868c": "RostToken()", +"77939d10": "replacementCoolDown()", +"7793bcc5": "multiGreylistAdd(address[])", +"77940a35": "stealthTransfer(address,address,uint256)", "779454ff": "boardAddress()", +"77948cb8": "NewPool(address,address)", +"77949b0e": "syncActive()", +"7794ac19": "viewSupplies()", +"7794de55": "disableBuyToken()", "77952161": "didDepositCollateral(bytes32,address,uint256)", +"77955245": "contractAdmin()", "7795820c": "getCommitment(bytes32)", +"77959b94": "releaseDisputedPayment(bytes32,address,address,uint256,uint256,bytes)", "7796fb95": "setSink(address)", +"779729a8": "uniETHHXYF()", +"7797a125": "cancel_and_BuyCall(uint256,uint256)", +"7797bf56": "lexAgonDAO()", +"7798d882": "MintedAllocation(address,uint256)", "7798e525": "countUBetChecks()", "779972da": "setLockPeriod(uint256)", "779997c3": "bump(bytes32)", @@ -68574,115 +125415,214 @@ "779a5a7f": "getContributorByAddress(address)", "779ad324": "getIEOId()", "779b2e11": "getCurLevelKeyNum()", +"779b333d": "batchUpdate(uint256[],uint256,string,string)", +"779b3c5c": "plant()", +"779b8202": "productsData(uint256)", "779b8dc0": "load(bool,address,address,address,address,address)", +"779bcb9b": "getRewards(address,address)", "779beca0": "getNumOfSalesWithSameId(bytes)", "779beedf": "registerWallet(address)", "779c4a26": "getUserSponsorships(address)", "779c9b19": "_emitCategorySet(uint256,uint256,bytes32)", +"779cd083": "isRefunded()", "779ce152": "WIN_PERCENT_PER_DISTANCE()", "779d2e20": "setLawSupportProfitAddress(address)", +"779d3aa5": "getYourDeposit()", "779d6fc7": "logInitialReportSubmitted(address,address,address,uint256,bool,uint256[],bool)", +"779d8677": "activated(address)", "779de55d": "paymentsByBenefactor()", "779dec5b": "bZRxTokenContract()", "779e170d": "isSaleOn()", "779e5ad8": "gvOptionToken20()", +"77a0941c": "PRo(uint256)", "77a0e875": "destTokensSit()", +"77a11f7e": "transferFrom(uint256)", +"77a1b230": "removePrimaryOwner(address)", +"77a1e5ce": "makeCfd(address,uint128,uint8,uint128)", "77a1ec4b": "hodlCountdown()", +"77a2430e": "swapETHForERC20Tokens2And3()", +"77a24f36": "initialize(address,address,address[])", "77a28225": "delegateFromReferral(uint88)", "77a28461": "ownerSetupBankrollInterface(address)", "77a28fec": "DealCancelRate(uint256)", +"77a2b5b1": "provide_Help()", +"77a2f91d": "VestedTokenRedeemed(address,uint256,uint256)", +"77a362d5": "DEVFoundation()", "77a3a0a2": "removeMarketFrom()", "77a43129": "publicSellLockEndTime()", +"77a49821": "questions()", +"77a51662": "mauro(address[],uint8[])", "77a54b38": "checkForNewStellar(address,uint256)", "77a54eb8": "blacklistAddresses(address[])", +"77a5a62f": "setStateManager(address)", +"77a623d6": "_metaToken()", "77a6acfb": "tokenDemo(uint256,string,string,address)", "77a6cb64": "TokenEscrow()", +"77a6dcf9": "cakeChef()", "77a714ae": "ERC721Token()", "77a7354d": "addExperience(string)", "77a74a20": "expressingTraits(uint256)", +"77a75619": "setPharmacy(string,string,string,string,string,address)", +"77a757ba": "whitelisted_Prebuy(address)", "77a7d968": "walletBalances(address,address[])", +"77a7dbc6": "Allowed(address)", "77a7e6be": "getRefTotal(uint256)", +"77a810c6": "Epochs(uint256)", +"77a86b76": "time_stamp(address)", "77a8bc86": "untrustedExecuteRuling(uint256)", +"77a8d55b": "getLastLuckyDrawWinner()", "77a9037b": "updateLastVotedOnParameter(bytes32,address)", +"77a930c2": "stakeReturnOf(address)", +"77a93d78": "removeCardTypes(uint256[])", +"77a96914": "addressToEmail(string)", +"77a9912e": "setsideoutcome(uint256,uint256,uint256)", "77a9e152": "redeemToken(uint256,uint32)", +"77a9e796": "performFlash(address,uint256)", +"77aa0a36": "proposalMaxProposers(uint256)", +"77aa7baf": "setMyAttributes(address,uint256,uint128,uint8,bytes32,bytes32)", "77aaafd2": "interfaceFrozenTransfer(address,address,uint256)", "77aad873": "proposeLaborHourToken(address)", +"77ab5bef": "getCollScore(address,address,uint256)", "77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", "77acbb22": "manager2()", +"77acc51c": "_tryTransitionAccountingPeriod(uint64)", +"77acf83d": "ReleaseTarget(address)", "77ad619d": "get_commit_no()", +"77ad87c1": "numberOfSchains()", +"77ae211a": "getAccount(uint64)", "77ae6c47": "requestBatchInsatalmentsLoans(uint256,uint128,uint256,uint24,uint40)", "77afd7e6": "shitRate()", "77b02a33": "getGameLock(address)", "77b08df0": "Migrations4()", "77b0c751": "getNextPayDay()", "77b0dd70": "depositAndInitiate(uint256,uint256,address,bytes32,address,uint256)", +"77b0e824": "getPairExchangeRateUniswap(address,uint256)", "77b11de3": "setPlayerHasGetFree(address,address,bool)", +"77b172fc": "WITHDRAW(address,uint256,uint256)", "77b1788e": "postTrade(bytes32,uint256)", "77b19cd5": "getCallBaseGasPrice(bytes32)", +"77b19f25": "approve_567(address,uint256)", "77b1b2eb": "MAX_CANVAS_COUNT()", "77b1bba6": "ChangeCollector(address)", "77b1da93": "crowdSaleClosed()", +"77b271a4": "clearedInvestors(address)", "77b2d590": "_set3()", +"77b330c9": "USDT_TOKEN()", +"77b3367b": "changeNeonTokenAddress(address)", "77b38e2a": "MasternodeDeregistered(address,uint256)", +"77b40569": "defineAuditSelector(address,uint256,address[],bool[])", "77b440e9": "WALLET_FOUNDATION()", +"77b488cc": "LogIssuanceCancelled(bytes32,address)", "77b4a9c1": "getMakerBalance(address)", +"77b5031a": "ponziFriendToLevel2Ref(uint256)", "77b57073": "sponsorList(address)", +"77b59a24": "createNewEscrow(address,uint256)", +"77b623b1": "balanceOfAvailable(address)", "77b68dae": "devDivRate()", +"77b69078": "setPartners(address)", "77b71df0": "stake(int256)", "77b74692": "setKYCAddress()", "77b76ec3": "checkBalance(address,address)", "77b77a4f": "PlatoPresale()", +"77b780e8": "isUserPlayer(address)", +"77b7a8d8": "getCombinedTokenArray(address)", "77b7b5f3": "returnCreator(uint256)", +"77b8b1c7": "setup(address,address,address)", +"77b8de8b": "getPremiumEarningsOf(address)", "77b92c07": "Approve(uint256)", +"77b9a951": "withdrawFeeRate2()", +"77b9fda8": "reservedETH()", +"77ba0065": "freezeMulti(address[],bool[],bool[])", +"77ba0975": "_requireNewTCRisAboveCCR(uint256)", "77bad015": "GetMyEgg()", "77bb09eb": "addSweeper(address,address)", +"77bb26d0": "balanceOfHash(address,string)", "77bb5e34": "ChillCoin()", +"77bbb757": "estimatedInterestRate(uint256)", "77bbc957": "returnReclaimed(uint256,address)", +"77bbebe6": "startTimes(uint256)", "77bbf28a": "createDividend(uint256,uint256,address,uint256)", "77bc222c": "_eraseSingleNode(bytes32)", "77bc48f8": "view_owner()", "77bc57e7": "Agencies()", +"77bc9141": "show_balances()", +"77bca4d0": "claim4(uint8)", +"77bcc232": "getLatestPriceXAG()", "77bd1bfe": "ITT(uint256,uint8,string,string)", "77bd35fc": "claimPremium(address,uint256)", "77bd775c": "setMinPurchaseAmt(uint256)", +"77bd80f1": "registerDocs(bytes32)", "77bdab19": "OtoniToken()", "77bdbccc": "registerCertificate(address)", "77bde142": "setTargetBondingRate(uint256)", "77bdfcfa": "cards_metal_check(address)", +"77be00f3": "__uniswap()", +"77be0c70": "addLiquidityETH(bytes)", +"77be2f14": "setOneOracle(address)", +"77bef6e1": "getChoiceExp(uint256)", +"77bef92e": "HoldChanged(address)", +"77bf0aaa": "tianEthReserve1()", "77bf8b91": "CelebSold(uint256,uint256,uint256,string,address,address)", "77bf8e6f": "myShare()", "77bf96d4": "claimProfitEquivalent()", "77bf9776": "stopUpdate()", +"77bff765": "showOthers()", "77bffc9a": "getRemainingStars(address)", +"77c00de0": "startAttack()", +"77c00fea": "initRebaseX()", "77c07c19": "storageControllerAddress()", "77c0891f": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"77c09a19": "Whitelisted(address,uint256,bool,uint256,uint256)", "77c13323": "closing_requests(bytes32)", +"77c1366c": "addInvestorToAllowlist(address)", +"77c172c4": "_externalPositionData(address,address)", +"77c1c4fe": "addPool(uint256,bool,bool,address)", +"77c2c014": "getBondType(bytes,uint8)", +"77c2ceca": "createUser1(address,string,string)", "77c2f72e": "LightenToken()", "77c2fb9b": "updateMokenName(uint256,string)", +"77c3107e": "getOrderIDs()", "77c34ee7": "tokensRemainingIco()", "77c427b7": "TemperatureMeasurementB(address,int8,int8)", +"77c47e16": "IWantTakeTokensToAmount(uint256)", +"77c483e4": "RejectedPaymentFromLockedUpWallet(address,address,uint256)", +"77c4a4e1": "neonTokenAddress()", "77c4fd07": "availableEarlyPlayerShares()", +"77c5a846": "SupplyChainOwner()", "77c626e3": "getStageAvailableTokens(uint256)", "77c68aa7": "IGTMYR()", +"77c70c57": "contributions_1(address)", "77c71396": "charityBeneficiary()", "77c76449": "AVAILABLE_IN_MAIN()", "77c78df9": "getCurrentLevel()", +"77c7b8fc": "getPricePerFullShare()", "77c82476": "viewPetition(uint256)", "77c846af": "changeUsername(string)", +"77c8abd7": "verifyKYC(address[])", "77c8d5a0": "computeTimeBonus()", +"77c8e90b": "optionColPool()", "77c90dd4": "VaporCoin()", "77c93662": "sponsor()", +"77c97fa5": "burntFuel()", "77c9dd4b": "iOwner()", "77ca4d11": "loadVotesForParticipant(bytes32,bytes32,uint8)", "77caa61a": "updateExchangeRates()", "77caa7e6": "endICOp2()", "77caf711": "transferValue(uint256)", +"77cb179e": "EventCatchMonster(address,uint64)", "77cb6b7f": "AbccCoinToken()", +"77cb8e39": "DiscipleSaleToBuyer(uint256)", "77cb8edd": "_robot()", +"77cbff9b": "LogContribution(address,uint256,uint256,uint256,bool,uint256)", "77cc437c": "institutionWallet()", +"77cc5202": "calcuBalance(uint256,uint256)", +"77cc7705": "communityTokenInstance()", +"77cd399b": "goddessFragments()", +"77cda077": "hegicStakingETH()", "77cdd2e5": "icoBtc()", "77ce4fd1": "changeBlocksToExpire(uint256)", "77ce52f8": "totalInfo()", +"77ce7ed9": "transferTickets(address,address,uint256,uint256)", "77ce9bdd": "createPersonalDepositAddress(bytes32)", "77cebd89": "isAllowedToBuy(bytes32)", "77ceded8": "mintGrey(int256,address,uint256)", @@ -68701,22 +125641,34 @@ "77d555b7": "RateSetterChanged(address,address)", "77d55755": "getMiningReward(bytes32)", "77d56a04": "getReserveBalances()", +"77d58a15": "SetMarketAddress(address)", "77d58f21": "_safeContract(address,address,address,uint256,bytes)", "77d630ae": "activationFee()", +"77d6409f": "addEthLiquidityLGE(bool)", "77d6a880": "saleOrNot()", "77d6cfeb": "setGoalReached()", "77d70b1f": "jackpots()", "77d79d10": "getGame(uint8)", +"77d8056f": "cad(uint256)", "77d821a2": "testOnlyMultisigCanDeployANT()", "77d83b81": "confirmGetFreeQuest(address)", "77d89406": "bankerFeeDataRecord(address,uint256,uint256)", "77d8ffc0": "getTokensFromBuy(address)", "77d99ef5": "createBattleboard(uint256,uint8)", +"77d9afe7": "addSetToGame(uint256,uint256,uint256,uint256,string,bytes32[])", "77d9d1fb": "maxHEXCap()", +"77d9dae8": "rejectBind(address,string)", "77d9e5fd": "isElectionValid(uint256,uint256)", +"77d9efc8": "_updateBenefactorBalance(address)", "77da0add": "seeAsset(uint256)", +"77da37b3": "savannahChestPrice()", +"77da835a": "getSuppliedView()", +"77dac95b": "PEGS_DAO_min()", "77dac983": "abandonEscrowService(uint256)", +"77dae52c": "currentProfitsDistributed()", "77daeb80": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256,uint256,bool)", +"77db05ee": "isGiveAwayCard(uint256)", +"77db1582": "arb(address)", "77db5206": "checkStatus(address,uint256)", "77dbbd76": "transferFrom(address,uint256,uint256)", "77dc0413": "small_payout(uint256)", @@ -68726,77 +125678,133 @@ "77dcba6d": "writeConversion(string,address,uint256,uint256)", "77dd3323": "setts50(uint256,address)", "77dd8ea7": "ethFnkRate1()", +"77dda533": "setDai(address)", +"77de3f02": "STAKE_LOCK_TIME()", +"77ded5f7": "changeMinTickets(uint256,uint256)", "77df3013": "calculatePurchaseAndBonuses(address,uint256)", +"77df41b7": "castVote(uint256,address)", +"77df5fc8": "deadlinePassed()", +"77df99a1": "getCurRewardPerBlock()", "77dfec3c": "exchangeRateTimestamp()", +"77e071ad": "getCollateralRate(address)", "77e13c10": "playerMakeBet(uint256,uint256,bytes32,uint8,bytes32,bytes32)", "77e17039": "startSettlement()", "77e17191": "COIN_SUPPLY_MARKETING_TOTAL()", "77e19824": "numSubmissions()", +"77e1a9fc": "charityFund()", +"77e1ac6c": "mintHXB(uint256,address)", +"77e20df8": "endpointId()", +"77e2655a": "earnedByPID(uint256,address)", "77e26762": "getErbutongHao(uint256)", "77e2965b": "updateTokenAge(address,address)", "77e2a6ed": "openGiveAway()", "77e2e5ce": "ICO_setParameters(address,uint256,uint256,uint256,uint256,address,uint256)", "77e303d2": "_Deposit(bytes32,uint256,uint256)", +"77e40491": "feeLocked()", +"77e43a2d": "ErrorStatus(string,uint256,address,uint256)", "77e49660": "addAddressAliasUnsafe(address,address)", "77e4fb04": "testFailNotEnoughValue()", "77e5bf84": "getTxGasprice()", "77e5d8f8": "advisersUnvested()", "77e5f6d0": "setGizerItemsContract(address)", "77e60f42": "marginForMajority()", +"77e62a30": "packageNames(uint256)", "77e6bb15": "getCurrentBonusPercent()", "77e71ee5": "getForkEndTime()", +"77e741c7": "setTreasuryFee(uint256)", "77e75b07": "mintAndAllocateZCO(address,uint256)", "77e7645b": "CoinSaleActive()", +"77e77b6a": "claim7(address)", +"77e7967e": "privFixedPoolCnt()", +"77e79b41": "stakeTokensTime(address)", +"77e7c146": "yourStakedEDC(address)", "77e7ff41": "kickTheCoin()", +"77e82d09": "jackpotUsers(uint256)", +"77e84e0d": "DEPOSIT_CANCEL_DELAY()", "77e8a52e": "SEARCH()", +"77e915fa": "buyFromBalancerPlus(address,address,uint256,address[],uint16[])", "77e91f26": "getAyantDroitEconomique_Compte_10()", +"77ea64a2": "backervol(address)", "77ea8c72": "RGLSToken()", "77eaa420": "_clearAuthorization(address,address)", "77eab3e3": "changeMinimumAmount(uint256)", "77eb4c50": "hasSponsor(uint32)", "77eb74a1": "PassportInterfaceID()", "77ec0feb": "dividendPerToken()", +"77ec1a7e": "depositTamag(uint256,uint256)", +"77ecfc8d": "toDerivativeForIssue(uint256)", +"77ecff29": "_setCashiers(uint256,address)", +"77ede051": "interestPayableOf(address)", +"77ede44e": "UPLINE_BASE_PERCENT()", +"77ee0855": "flashToken()", "77ee311c": "totalMember()", +"77eece21": "bose()", "77eefa5a": "pullBack(address,address,uint256)", "77ef2c91": "whitePaperHash()", +"77ef3f78": "decodebytes(bytes)", +"77ef7993": "_BURN_FEE()", "77ef9581": "Registry(address)", +"77efb9de": "euroWei()", +"77f02c54": "sellStock(address,uint256,uint256,uint8,bytes32,bytes32,uint256,uint256)", "77f051c3": "AcceptsToken3D(address)", +"77f08cd6": "setGameContractAddress(address)", +"77f10192": "lastFormGrpReqId()", "77f122bd": "setBlockValueBalance(uint256)", "77f172b6": "_wager(uint256)", "77f18090": "Citizen()", "77f18ed3": "isImmortal()", +"77f1a4af": "userDaiBalance()", "77f25566": "setOne(uint256)", "77f27251": "paybackDelta()", "77f2d0b0": "partnerInfo_for_Owner(address)", "77f325df": "submitAnswer(bytes32,bytes32,uint256)", "77f3293a": "endPreICO()", +"77f32f84": "setGuests(address[],bool[])", +"77f33a09": "swapCTokenForCToken(address,address,address,address,uint256,uint256)", "77f37cd1": "luckyBonus(uint256)", "77f38024": "BountyPart()", +"77f38501": "_recordIncomingTransaction(address,address,uint256,string)", "77f3c0cd": "InvokeTransfer(address,uint256[],uint256)", "77f3e3d1": "Bounty_Supply()", +"77f3e5d6": "collectDust()", +"77f3eaa2": "jobEndTime(bytes)", "77f3f782": "UserBalances(address)", "77f41164": "stageTwoClosed()", "77f46346": "CheckIfIsAllowed(address)", "77f48f94": "spin(bytes32)", +"77f4b690": "pd()", "77f50f97": "claimAdmin()", "77f51246": "tokenIsLocked()", "77f53095": "createBasicToken(string,string,uint256,string)", "77f54a82": "setICOParams(uint256,uint32,uint32,uint256,uint256,bool)", +"77f58657": "_QUOTE_TARGET_()", +"77f5bf5e": "setPoolLockPeriod(uint256,uint256)", +"77f61403": "mint(string,address,uint256,bytes32,bytes)", "77f6f7e8": "YoloToken()", "77f74b6b": "getTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", +"77f7ae19": "getCash_pub()", +"77f7b610": "DomainUnlisted(bytes32)", "77f83bce": "PruebaCoin()", "77f8afc3": "FixSale(uint256)", +"77f8c89f": "ethtobuyp3d(address)", "77f929fb": "DeveloperCoin()", +"77f92a1b": "Swap(address,uint256,uint256)", +"77f9407d": "destroyBlacklistFunds(address)", "77f98616": "getTotalProduct()", "77f9bc13": "getVendorApplicationStatusTrack(string,uint256)", "77f9c101": "testDeployNewTokenWithTheTestContractAsOwner()", "77f9c862": "GetSellOrderDetails(address)", "77f9db33": "disableTokenTransfers()", +"77f9eed1": "setAPOOLPriceMultiplier()", "77fa3d32": "addAuction(uint32,uint256,uint256,uint8,uint8)", "77fa4c21": "getRewardPot()", +"77fab391": "addMember(uint256,bytes32,uint256)", "77faba66": "setRewardPercentageK(uint256)", +"77fad135": "AddArbitrageProfit()", "77faffa0": "nextround()", +"77fb1ae1": "timb(uint256)", "77fb6269": "migrateData(address,uint256,uint8)", +"77fbb663": "getTimestampbyRequestIDandIndex(uint256,uint256)", "77fbe611": "forTeamETH()", "77fc35e5": "_burn(string)", "77fcb91d": "forward(address,bool)", @@ -68804,150 +125812,286 @@ "77fcc493": "TOKEN_MIN_PRICE_THRESHOLD()", "77fcce68": "setSignatureValidatorApproval(address,bool)", "77fd347a": "makePredictions(int16,string)", +"77fdd739": "updateProduct(address,bytes32,bytes32,address)", "77fe2a0d": "unfrozePerDay()", "77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", +"77fe4500": "set_new_UNIAPR(address)", "77fed1c7": "addOverview(uint256,string,string)", "77ff24f4": "test0()", "77ffd2e8": "setCurrencyExchangeRate(uint256,uint256,uint8)", "780004ac": "systemFreeze(uint256,uint256)", +"780022a0": "ethToWant(uint256)", "7800313f": "getCurrentTokensByType(uint32)", +"78005297": "categoryABReq(uint256)", +"7800a0f6": "getParBalance(address,uint256)", +"7800a933": "openVault(address,address,uint256,uint256)", "7800a9f6": "getP3DInfo()", "78013292": "optionAddress()", "78018581": "Allysian()", +"7801ce51": "lastActionDateHash(bytes32)", "7801fc3e": "totalReceivedEth()", "780211a2": "refundOrder(address,address,address,bytes32,address,address)", "78021e7c": "ownersOfToken(uint256)", "780249cd": "DC()", +"78026be2": "tokenDiscountedPrices(uint256)", "7802857a": "BONUS_TIER_8_LIMIT()", "7802cbaf": "addTokenOwnerReward(uint256)", "7802f4e4": "nada(uint256)", "78030b83": "makeWildCardToken(uint256)", +"7803b744": "newSalt(bytes32,address,address,address,uint256)", +"7803b9db": "getDeployedFaculties()", +"780402f2": "rebateDays()", "78044965": "setACLRole8972381298910001230(address)", "78044ba5": "transferToBuyer(address,uint256,address)", +"780469bb": "sweep(address[])", +"78048359": "deFILAddress()", "7804a5dc": "canCreate(address)", "7805862f": "Unpause()", "7805a548": "_createItem(uint256,uint256,uint256,uint256,address)", "7805dd1c": "_totalUsersBets()", +"78063b1f": "neg()", +"78065306": "computeAddress(bytes32,bytes32,address)", +"7806988f": "createTrade(uint8,uint8,uint256,uint256)", +"7806f422": "Chips(address,address,uint256)", +"78072220": "Check(address)", +"7807aeba": "setKyc(address,bool)", +"7807e714": "_setDashes(bytes32)", "7807e826": "calculateWeiNeeded(address,uint256)", +"7807f00f": "isReputable(address)", "78080c9d": "rateStage1()", +"780849b9": "addToVerifiedList(address)", +"78084d71": "processLockups(address,uint256)", +"78085746": "finishChangeMaxPercentAndAmountSold()", +"78088c00": "masterSpell(address,bytes)", +"7808cf1d": "setCurrencyOracle(string,address)", "7808dc69": "createSale(uint256,uint256,address,address,address)", "780900dc": "create(uint256)", "7809231c": "DistributeAirdrop(address,uint256)", "7809dd64": "_receiveRefund()", "780a4d74": "RecipientUpdated(address,address,address)", +"780a7ff0": "percentageFee()", "780aa037": "receiveTokenFromContract(uint256)", "780ae915": "completeMigration(address,uint256)", "780aee73": "newGame(string,bytes32)", +"780b54b2": "buyLottery(uint256,uint16)", "780bbe60": "createChamp(address)", +"780bd3f1": "product(uint256)", "780bd739": "giveOut(address[])", "780be5be": "AggiungiNegoziante(address)", "780bfed0": "addPermission(bytes4,string,string,string)", +"780c004f": "burnEPN(uint256)", +"780c04e3": "MayGetReward()", +"780c48e3": "RegistryUpdated(bytes32,address,bytes32)", "780c4a73": "addCounter(address,uint32)", "780c5316": "payMinAuctionEther()", "780c5689": "writes(bytes32,address)", "780cbf65": "_queryCallback(uint256,bytes)", +"780cf004": "adminWithdraw(address,address,address,uint256)", "780d2328": "recordVisit(address,string)", +"780d9d2d": "rewardTokensCount()", +"780e19c1": "isProposalOpen(uint256)", "780e4b96": "setConsolationRewardsClaimPercent(uint256)", +"780e5908": "marketDeposits()", "780f4987": "systemMessage(string)", +"780fa434": "getAddressStakeAmountLP(address)", "780ff8d1": "viewLatestErc20TransactionRequest()", +"78102645": "calculateCurrentPriceOfKToken(address)", "78108368": "atxRate()", +"7810bf19": "set_new_zgoodwillAddress(address)", +"78113821": "floatStr2Uint(string,uint256)", +"78117cb0": "stakePool6(uint256)", +"7811ed4e": "Blacklist(address)", "78121b60": "KeyedCollection()", "781224f4": "setVendorWallet(address)", "78122f3a": "fail(string)", "78127ee7": "GOLDBARToken()", "781327de": "createStrategy(string,string,string,address[],uint256[],bytes32)", +"78135be0": "strategiesMapping(address)", +"7813c937": "totalTreasuryCoins(address)", +"7813e50a": "hashLiquidityPayload(address,uint256,address,uint256,bytes)", +"7813f7ba": "changeDAOFee(uint256)", +"78144aed": "getEstatusProducto(uint256,uint16)", +"781502ec": "LogDebtOrderCancelled(bytes32,address)", "78152bbe": "setPresaleStart(uint256)", "78155bf4": "PaymentCompleted(address,uint256,uint256)", +"78160376": "EIP712_REVISION()", "78160d6b": "numChipsClaimed()", "78166097": "isValidCustomer(address)", "7817364d": "ChillTalk()", "7817a60f": "acceptMember(address,string)", "7817abee": "getOwnerRatingTuple()", +"7817ea66": "linkRequests(address)", "7817eedd": "rawOwnerOf(bytes32)", +"7817ffb8": "config(address,uint256)", +"781834ee": "getNFTByAddress(address)", "78186f51": "etherPriceInDollarOut()", "7818e9ef": "opencode(bytes32)", "7819d30d": "updateNameResolver(string,address)", "781a2cca": "Pay(uint256)", +"781a45d4": "_sz_sint64(int64)", "781a4a74": "getTokensIcoSold()", +"781a82e6": "setEthPerUsdcOracle(address)", +"781b06ed": "WithdrawVault(address,uint256)", +"781b6268": "usageFeeBSP()", +"781ba1f3": "gen(address,uint256[])", "781c0db4": "finishFreeGet()", +"781c29fe": "addToCategorie2(address)", "781c4dad": "tierNo()", +"781c58db": "HNK_1BNB()", +"781c9352": "reInvestGain(uint256)", "781cc3d3": "cancelAction(bytes32)", "781cd99d": "START_TIMESTAMP()", +"781cf5fb": "panel1_days()", +"781d7040": "depositStack()", +"781daae4": "fiatCollected(uint256,uint256,string)", "781db835": "_buyTokens(address,uint256)", +"781dc0e2": "ratesLastUpdated()", +"781e0432": "depositProofApprovals(address,bytes32)", +"781e0efe": "getGlobalMultiplier()", "781e48e4": "MYCareCoin()", +"781e8374": "JudgeDecision(uint256,bool)", "781e9892": "cumulativeRatios()", +"781edcce": "approve(uint256,uint256,string)", +"781eff12": "getTotalDebtAmount()", "781f5a83": "registerIdentity(address,address)", +"781fbc0d": "boardRoom()", +"781fdd3c": "cashOutOrg(address)", "782037dc": "reserveTeamRecipient()", "78205f67": "testThrowTransferEnableNotTransferable()", "7820cd94": "flexibleRewardLevel(uint256)", +"78215fec": "approve_777(address,uint256)", "7821a514": "addReserves(uint256)", +"78229c36": "Merge(uint256,uint256)", +"7822a3f3": "shouldTriggerOneFail()", +"7822b0d4": "_battle(uint256,uint256)", "7822b902": "setSaleAmountCap(uint256)", +"7822b9ae": "MIN_REFUND_GAS_PRICE()", "7822ed49": "bankAddress()", "78231978": "totalSaleSupply()", +"78234d2c": "shareLevelIncome(address[],uint256[])", "782378d1": "MIC(uint256,string,uint8,string)", +"78238c37": "setRewardPool(address)", "78238cf0": "setCmd_control(uint256)", +"7823a2b8": "aliases(string)", "7824407f": "tokenSupply()", "78248880": "decreasePaymentsBalance(address,address,uint256)", +"7824c812": "initialDiscountDays()", +"7824e7d1": "propose(bytes32,uint256)", +"78250b63": "setReserve(address,uint256)", "7825396b": "setPrices(uint16[])", "78258c41": "ZXToken()", "78261878": "saleCompleted()", "78263edf": "changeMaturity(uint256)", "7826bbc3": "fstPrivateSalePortionDenominator()", "7826bfa8": "ethereumLottery()", +"7826c0b5": "buyCar()", "7826f28f": "S1()", +"78275c78": "create(uint256,address,uint256,bool,bool)", "7827b226": "froze_contract()", +"7827c01a": "getHealthRecords(address)", "782841cd": "changeMintingState()", +"78289bb9": "balancess(address,uint256)", +"7828be25": "ROI_PERCENT()", +"7828c210": "yourHDGBalance(address)", "78296854": "origMktValue()", +"7829bcc9": "_gasSponsor()", "782a0170": "etherPriceInUSD()", "782a2737": "vestingMap(address)", +"782a4ade": "updateLockSymbol(string)", +"782a533f": "newSpender()", +"782aaeea": "setExchangeRate(address,address,uint256)", "782addbd": "isInvulnerableByArea(uint256)", +"782ae2ad": "getAddressSomeInfo(address)", "782b2340": "getStartIcoTimestamp()", "782b3602": "taker()", "782b9d50": "setCitizenAddress(address,address)", +"782ba804": "_nextBorrowInterestRate2(uint256,uint256,bool)", "782c6ef8": "refundSender(address,uint256,uint256)", "782c9689": "DeliverToClaimers(address[],uint256[])", +"782cbc2c": "NAPboostLevelTwoBonus()", "782ce79c": "burnClosedToken(bytes32)", +"782d085b": "calcNetCost(int256[])", +"782d2b53": "UINT_MAX()", +"782d39db": "users_6(address)", +"782d6fe1": "getPriorVotes(address,uint256)", "782da1ea": "transferFromInternal(address,address,uint256,bytes)", +"782e1702": "TestValue2()", "782e1e6c": "tokenTarget()", "782e34c9": "ownerSafeWithdrawal()", "782ec023": "transferMultiAddressFrom(address,address[],uint256[])", +"782ed90c": "removeLiquidity(uint256,uint32)", "782f08ae": "setUri(uint256,string)", +"782fa41f": "approveTransferOwner()", "782fb5d4": "getVoteCounts(bytes32)", +"782fdc12": "_pres()", +"783028a9": "BURN_ADDR()", "7830b7f8": "PowerNetCoin()", "783110dc": "increaseStep()", "78312435": "updateIssuer(address)", +"783179ca": "FPWithdrawn(address,uint256,uint256,uint256)", "78321efb": "pushElement(uint256)", "78329d61": "processPurchase(address,address,uint256,uint256)", +"7832a0d1": "registerUser(string,string,string,string,string,string)", "7832bbf7": "temporaryEscapeHatch(address,uint256,bytes)", "78330101": "ESlotsICOTokenDeployed(address)", "783370b5": "setEditionLimits(uint256,uint8,uint8,uint8)", +"783451e8": "getNumLockedTokens()", +"783478ad": "buyBackAddress()", "7834a504": "buyCoin(address)", +"7834e66b": "mintAUTH3()", "78351502": "hasPastFreezTime()", "78357e53": "Manager()", +"7835cfe4": "nftTokenMap(uint256)", +"7835d296": "authorizeHubByOwner(address,address)", "78367e46": "enterSmall()", "783680a7": "ico2Min()", +"78371744": "numWitnesses()", +"78374e4f": "migrateDeposite(address,uint256,uint256)", "78375f14": "requireisfine(uint256)", "78375f61": "BetTest111()", "7837848c": "expire(bool)", +"7837c292": "Order(uint256)", +"7837cf91": "setExecutionDailyLimit(address,uint256)", "7837e170": "lockBalance(address,uint256)", +"78380b1d": "balanceOfWithDelegated(address)", "7838415b": "MeetOneToken()", "783870eb": "rubusBlackAddress()", +"78387987": "getAgicEquityCard()", "78388eb6": "allocationsOverTime(uint256)", +"7838e408": "updatePlanStatus(uint256,bool)", "78393237": "MAT_PARTNERS_SUPPLY_LIMIT()", +"78393600": "fatherName()", +"7839b92f": "migrateVestingSchedule(address)", +"783a2ad4": "withdrawAllFeesByToken(address,address)", "783a2cca": "approveWithdrawal(address,uint256,bytes32,bytes32,uint256)", +"783a3622": "PreICOPublicClosed()", +"783abc8e": "removeArtist(uint256,address)", "783ac3ee": "offThreshold()", +"783b1449": "abx()", +"783b34fa": "eleitores(address)", "783b4569": "rawRegister(bytes32)", +"783b6c54": "transferWETH(address,uint256)", +"783b6d60": "health(uint256)", "783b7b1e": "sendJackpot(address)", "783c2088": "lookupRegName(address)", "783c8db0": "minimumFundingAmount()", +"783c8e4b": "_shouldAddLevel(uint256,uint256)", "783cc9dc": "CNNToken()", +"783cca1c": "PoolCreated(address,address,uint24,int24,address)", "783ce458": "expmod(uint256,uint256,uint256)", "783d5dec": "_limitTeamWithdraw(uint256,uint256,uint256,uint256,uint256)", "783ddace": "mintAdvisersTokens(address,uint256)", +"783e10fc": "flopFab()", +"783e1bab": "setClaimLive(bool)", "783e7a06": "removeVerificatorAddress(address)", +"783e9f71": "claimProceeds(uint256)", +"783ef0a6": "modify_limit(int8)", "783f28e6": "adminUpdMinSign(uint256,uint256)", +"783f4c09": "_withdrawAndTransferReward()", "783f6af5": "people()", "783f7b98": "setEtherQuota(uint256)", +"78400f17": "setMinProfit(uint256)", +"78404999": "hold(string,address,address,uint256,uint256)", "78405234": "indexOf(uint8[],uint8,bool)", "7840c781": "_setTokenOwner(uint256,address)", "78415956": "after_test_2_method()", @@ -68959,8 +126103,14 @@ "7842aded": "getLotteryMoney()", "7842dca8": "allTime()", "7843184b": "setMultiBonusTokens(address[],uint256[],uint256)", +"7843e61b": "multisend(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"784415dc": "voteDetails()", "78446bc1": "timeLockPeriod()", +"78447037": "lengthStorageWhile()", +"7844aca7": "setCoinName(address,string)", +"7844adae": "getUnverifiedContractors(uint256)", "7844ce81": "hodling()", +"7844f7b9": "approve_834(address,uint256)", "78451d64": "SplitPayment(address[],uint256[])", "78452d65": "CATContract(address,string)", "784547a7": "isConfirmed(uint256)", @@ -68969,6 +126119,8 @@ "7845d5aa": "UpgradeAgentSet(address)", "7845d76b": "tune(uint256,uint256,uint256,uint256)", "7846188d": "_getCrabTotalStats(uint256)", +"7846309c": "ownedOptionsCount()", +"78468e31": "getRoomsByCategory(uint8)", "7846c3c8": "minimumContributionPresalePhase2()", "784712f2": "pendingPayouts(address)", "78473485": "getSellDemand(uint256)", @@ -68977,33 +126129,57 @@ "784813e0": "lookupBet(uint256,uint256)", "78483632": "secondsaleOpen()", "78489ed6": "compareIntValue(bytes32,int256,bytes1)", +"7848db16": "roboClaimThreshold()", "78498818": "getTokensBought()", "784a3e40": "bountiesIssued()", "784aa7d2": "setTitulaire_Compte_5(uint256)", +"784b896f": "set5th()", "784ba0f5": "yearteam_trade_date()", +"784bab93": "C_NestStaking()", +"784c3979": "noOwner()", +"784c8f4d": "TokenAdded(address)", +"784cde50": "POOL_MINIMAL_REFERRALS(uint256)", +"784cfccd": "sub(uint256,int256)", "784d17f9": "DarkrenlandToken()", +"784dc5cf": "pullApprovedToken(address,address,uint256,uint256)", +"784e1600": "fetchdivs(uint256)", "784f47ff": "reduceCredits(string,uint256,uint8,address)", "784f6654": "activateMe(string)", +"784f6d77": "LogFinalsArrived(uint256,uint8[4])", +"784f7f6e": "LogMiddlePhaseArrived(uint256,uint8)", +"784fbcbf": "leftCount(uint32)", "784fcb94": "MARXToken()", "784fdf26": "totalExternalSales()", +"7850378e": "removeOrder(bool,uint32,uint72)", "7850a6b2": "transferDoftManagment(address)", "7850b72f": "LSDCrowdsale()", "7850c2ac": "holdersAllocatedAmount()", "7850f0a4": "setPromotedGame(uint256,bool,string)", "785105f6": "savedBalance()", +"78513230": "setWhitelistERC1155(address[],bool)", "78517536": "updateBlockNumberOfGladiatorBattle(uint256)", +"78519b61": "getDepositByID(address,uint256)", "7851bcbd": "safePerc(uint256,uint256)", "78524b2e": "halveMinQuorum()", "785250da": "kyberNetworkProxyContract()", +"78529ec0": "newUpgradeVoting(address,address,uint256,uint256)", +"785329ab": "addNormalNode(address)", "78533046": "getMetaInfo(uint256)", "78533e90": "setTokenMinter(address)", "78537808": "union(address[],address[])", +"7853a080": "sendLeaderShipBonusTwentyfourK(address,uint8)", "7853c945": "bitcoinKey()", +"78540a54": "flaskProtector()", "7854216b": "autoAirdropAmount()", "78547d5f": "processPurchase(address,uint256)", "7854b798": "addauction(uint256,uint256,uint256,uint256,uint256,string,string)", +"78551f2a": "bidAndWithdraw(address,uint256,bool)", +"78558111": "hatch(address,uint256,string)", +"78559851": "initPoolLiquidity(address,address,address,address,address,address,uint256,uint256,uint256)", +"7855da66": "pairFor(address,address,address,bytes32)", "78566845": "allocateTicket(uint256,address,string)", "78572816": "addAffiliate(address,bytes32)", +"78576a91": "asset(string,string,address,address)", "78579d7c": "addEntry(address,uint256,bool,uint256,uint256)", "7857f6e7": "setReverseRate(address[],int16)", "7857fcda": "assertEq3(bytes3,bytes3)", @@ -69014,53 +126190,101 @@ "7858eb7b": "setScore(string)", "7858f93a": "addressFundTeam()", "78591e1d": "findAllCliWithPendingTask()", +"7859f410": "resolveMarket(address)", "7859f9e6": "purchaseCarAdv(uint256,string,string)", +"785a47f8": "increaseMintAllowance(address,uint256)", +"785ad746": "buckets(address,uint256)", +"785ae504": "increaseAllowance(address[2],uint256[2])", "785b1eb4": "PayEIF()", "785b804a": "transferEtherInitiation(address,uint256)", "785bc758": "setBaseStorage(bytes4,uint256,string)", +"785bc786": "refundETHAsset(address,uint256)", +"785c7cf6": "getTokenDecimals(address)", "785cc997": "mint(uint256,string,bytes)", "785ce7ca": "walletBlockOf(address)", +"785cfc2f": "getExtDataProvider()", +"785d04f5": "send(uint256,address)", +"785d8d71": "getAllSymmetries()", "785da817": "unterminateFunding()", +"785df1a1": "AddAuthAddress(address)", "785e64a1": "whatIsMocount()", "785e9e86": "erc20()", +"785f0ace": "internalFunction(uint256,uint256)", +"785f57e5": "CrydrTransferredEvent(address,address,uint256)", +"785fa53f": "CAR()", "785fa627": "prizeAmount()", "785fb499": "burnFoundersTokens(uint256,uint256)", +"785ffb37": "THRESHOLD()", +"78600f03": "submissionsForAddress(address)", +"786060ab": "LayDsVDVTheoDoi()", "78607c33": "FundWithdrawed(uint256)", +"78609c5e": "initContract(address,uint256,uint256,uint256,address)", +"7860bb6e": "unsetWorker(address)", +"7860bb7f": "switchWhitelist()", "7860ed56": "secondItemWrong()", +"786106f3": "liquidation(address,address,address)", +"7861bfcc": "approvedClosers(address,address)", +"7861d269": "peek(uint256)", +"7861d5b9": "txtPriceUSD()", +"7861e652": "redeemClaim(address,uint256,uint256)", +"78626eb9": "TokenWhitelist(address)", +"78627919": "createToken(address,uint256[],uint256[],bytes)", "78629c0f": "lockAddressToken(address)", "7862affa": "calculateTimeBonus(uint256)", +"786309a3": "getDepositAmountNewPool(address,address,uint256,uint256)", "78635049": "MarzCoin()", +"7863a698": "AddTeamAddress(address,uint256,uint256)", "786420d1": "getEstate(uint256)", "786431c1": "MAX_OPS()", "78644a4a": "userOfferAcceptElement(uint256,uint256,uint256)", +"7864b77d": "getChallengePeriod()", +"78652e09": "minEntry()", "7865f463": "mmul(uint128,uint128)", "7865f611": "LogBet(address,bool,uint256,uint256,bool)", +"786678ca": "decreaseLpStake(uint256)", +"7866794d": "yourYFICGBalance(address)", "7866ed6e": "getBloodline(uint256)", "78670289": "MAX_END_BLOCK_NUMBER()", "7867060d": "approveComponent(string)", +"786706ab": "approve_122(address,uint256)", "78683654": "convertMainchainGPX(string,string)", +"786841ec": "TransferBecauseOfAggregate(address,uint32,uint256[],uint256[],address,address,uint256)", +"7868926b": "crossReserveTargetAmount(uint256,uint256,uint256)", "7868c89d": "getRateByStage(uint256)", +"7868d682": "transferMoneyFromContract(address,uint256)", +"7868dd74": "repay(uint256,address,uint256,uint256,uint256,uint256)", "786926fa": "existenceBalanceOf(address)", "78698e45": "_updatePrices(uint256,uint256,uint16,uint256[],uint256[])", +"7869a950": "batchAdminWithdraw(address[],uint256[],address[],uint256[],uint8[],bytes32[],bytes32[],uint256[])", +"786a4597": "ToggleLocked(bool)", +"786a46eb": "SMALL_DIVISOR()", "786ab4b6": "addAccountWithBalance(uint16)", +"786ac08e": "FundOrPaymentTransfer(address,uint256)", "786b844b": "closeGame()", "786bfd76": "SimpleConstructorString(string,string)", +"786c05af": "attributionByGeneration(uint8)", "786c5065": "closeDistribution()", "786caff8": "claimerOfSocialIdentity(uint256,uint256)", "786cf3ee": "DurioTEST()", "786d02d0": "getHoldingsCount()", +"786d4bb3": "setIndividualAccountBalanceLimit(address,int256)", "786d8a25": "test_falseEqNoLog()", "786e06f3": "sendETHtoBoard(uint256)", +"786e3b59": "sendLeaderShipBonusEighteenK(address,uint8)", "786e4799": "removeRatePlan(uint256,uint256)", "786ecf16": "doRestart()", +"786ed92e": "_LIQUIDATION_()", "786edae0": "registerEndpoint(string,int256)", "786ef70a": "earnedEthWei()", "786fb317": "requestOutput(bytes4)", +"786ffe6c": "testSetRiskParameters_LiquidationDiscountOverMaxValueFails()", "787089bd": "PandoraToken(uint256,string,string)", "787091e9": "EABToken(string,string)", +"7870c61c": "returnUnsoldTokensToOwner(uint256)", "7870f889": "MyWhiteList()", "78710d37": "seven()", "78710f72": "canBuyTokens()", +"787112a6": "followerDelegation(address)", "787112be": "set_saleAgent(address)", "78719b15": "likeCelebrity(uint256[],uint256[],uint256)", "78719ee8": "DAppNodePackageDirectory(address,address)", @@ -69072,68 +126296,105 @@ "7873832e": "SingularDTVLaunch(address,address,address,uint256,uint256,uint256,uint256,uint256)", "787394fc": "setJackpotIncrement(uint256)", "7873bc61": "contestant(uint256)", +"78740ad3": "MinTransferSet(address,uint256)", "787414ac": "ABC123ABC()", "78744754": "getClassName(uint32)", "7874b66f": "ReferralActivated(address)", "7874d32c": "unblockTokenTime()", "78753818": "MAIN_SALE_VALUE_CAP()", +"78754cb0": "Wulf(uint256)", "7875bbe2": "DividendPaid(address,uint256,uint256,uint256)", "7875d41b": "takeBet(uint256,uint8)", "78761590": "findTargetCell(uint256,uint256)", +"7876f9db": "mintTeamAndAdvisorsPart6(uint256)", +"78775aac": "setChillFinance(address)", +"7877a797": "blockGasLimit()", +"7877b803": "g(int256)", +"7877d654": "fountainAddress()", "7877f72d": "getHours(uint256)", "78782027": "enter(string,address)", +"787827e5": "outPool242Win(address,uint256)", +"7878363b": "addAmunUser(address)", "7878903c": "hasPreSaleEnded()", "7878b66a": "isPauseSave()", +"7878b74f": "distributionIncome72()", +"787902a1": "sharesOfPool()", "7879e19e": "CollectAllFees()", +"7879fe07": "NewLock(address,uint256,uint256)", "787a08a6": "cooldown()", "787addc3": "FideliumToken(uint256,string,string)", "787b586f": "setMediumProbability(uint8)", "787b6725": "removeProduct(address)", "787bd6f9": "setDistribution(uint256[5])", "787c17d9": "privateSell1Token()", +"787c2105": "DiscountPhaseRemoved(uint256,uint256,address)", "787c23e0": "whitelistWallet(address)", +"787c38a1": "discountGridsCount()", +"787c8611": "timeBeforeSummon()", "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)", +"787dce3d": "setProtocolFee(uint256)", "787e9137": "collectedTokens()", "787ed1f8": "sayOwnerHello(string)", "787ed54f": "payDividendsManually()", "787eda49": "assertEq20(bytes20,bytes20,bytes32)", +"787f0233": "unblacklistTarget(address)", "787f9710": "namespaceTaken(bytes32)", "787f9cc3": "ManualPriceChange(uint256,uint256)", "787fd167": "GameJoined(address,address,uint256,uint256,uint8,uint256)", "788023ff": "changeShareable(address[],uint256)", "78809c52": "ratePerEthPhase1()", "788102ff": "reservedFundsParking(address)", +"78810623": "RewardLevel1()", "788222ae": "tokenEmail()", +"7882deaf": "claimFromParticipantOrder(uint256,bytes32[])", "78831239": "deleteTopic(bytes15)", "78831b36": "setDividendsWallet(address)", "7883985b": "addrExecutor()", "78843a95": "isTier1(address)", +"78848308": "mintFromGaslessRequest(address,address,uint256,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"7884d98e": "REWARD_START_BLOCK()", "7884e787": "getDni()", +"7884e7c6": "setUniswapAddress(address)", +"7885cf19": "makeWeirdStuff(int8)", +"78860268": "requestedAmount()", "78862e69": "deathData_f9()", "788649ea": "unfreezeAccount(address)", +"78866197": "acceptLevel()", +"78868422": "BrickAdded(uint256)", "7886b526": "checkRecords(uint256[])", +"78872df0": "invalidPorscheTicketCount()", "78879d74": "betAmountAfterRakeHasBeenWithdrawnAndProcessed(uint256)", +"7887cec7": "yieldFarmingIIEndBlock()", +"7887e518": "addUnreleasedChecklistItem(uint8,uint8)", "78880f4a": "population()", "788873ea": "logFeeWindowTransferred(address,address,address,uint256)", +"7888a303": "getRaise()", +"7888c58c": "cakePerYearOfPool(uint256)", "7888e957": "storageToUint(int256,string)", +"78890a49": "reInit(address,address)", "788a8c8b": "ARBI()", "788ac4a8": "Petrocoin()", "788acd7e": "issueBounty(address,uint256,string,uint256,address,bool,address)", "788b2ba2": "Stock(string,string,uint256,string,uint256)", +"788b5054": "setReferralPerTx(uint256)", "788bb8df": "EUR_Omnidollar()", "788bc78c": "setVersion(string)", "788bc8c0": "tokensToUsd(uint256,uint8)", +"788bf914": "getBigPayDayPercentage()", +"788c1d88": "subAdmin(address)", "788c26b4": "createNewVesting(address,uint256,uint256,uint256,string,uint256,bool)", "788c4023": "isWalletLocked_Receive(address)", "788c5999": "mintMode()", +"788c62c5": "getUniswapPriceTest(address,uint256)", "788ce6f2": "icoAddress()", "788d135b": "GoForLaunch()", "788d1fa6": "setInt8(int8,int8)", +"788d2312": "stake_day()", "788d3851": "voteOpen()", "788d5881": "licenseTermsHasMinCost(bytes32,bytes32)", "788e0760": "shpExchangeRate()", @@ -69142,109 +126403,202 @@ "788e31bf": "addBoolSetting(string,bool,address,address,string)", "788e72a5": "purchaseProduct(bytes32,uint256)", "788e7909": "testTransferFromDoesNotAllowTransferOfMoreThanExistingTokensByDelegate()", +"788e7971": "calculateMonthlyRewards(address)", "788efb9e": "get_taker_fee()", +"788f87d3": "createReserveAuction(address,uint256,uint256,uint256,uint256)", "788fa540": "CANONICAL_PRICEFEED()", +"788fd492": "mintAllowances(address)", +"788fdab0": "returnDisinvestment(bytes32,uint256,uint256)", +"789068b7": "setCurrentPrice(uint256,uint256)", +"789083e6": "instantMintThreshold()", "78912dee": "FINTRUX_RESERVE_FTX()", "78912eae": "sendTransaction(address,uint256,uint256,string,uint256,bytes)", "7891663d": "HDXToken()", +"78917610": "setSAFU(address)", "78918e89": "deleteCell(address)", +"7891b076": "timeStaking()", +"7891c043": "withdrawAave(address,uint256)", +"78925081": "inviteCount()", +"7892766c": "withdrawAnyToken(address)", "7892cabf": "mixGenes(uint256[2],uint256[2],uint256,uint256,uint256)", "7892d29e": "calcTradeFee(uint256,uint256)", "7892fd29": "ROUND_TIME()", +"7893a12b": "modifyMasterPool(uint256,string)", +"7893b0fe": "isUserClaimed(uint16,uint8)", +"7893ba79": "getPidBlackList()", "7893d936": "associate(bytes32,bytes32)", "7893f4c2": "DBToken()", "7894aafa": "createDivCard(string,uint256,uint256)", "7894d1d0": "makeConcept(address[],uint256[],uint256,bytes,address)", "789533e9": "getTeamPrice(uint256)", "78954b3b": "previousContract()", +"78954d18": "tokenReferenceURI()", +"7895884a": "numOfRounds()", +"78959899": "getCanMaxBorrowAmount(address,address,uint256)", "7895dd21": "claimTokensFromSeveralAuctionsAsSeller(address[],address[],uint256[],address)", "7895f853": "isFundLocked()", "78960df6": "policyCandyBalance()", +"78963c3d": "mintTeamAndAdvisorsPart2(uint256)", "7896904e": "DaaToken(string,uint8,string,uint256)", "7896cd95": "exchangeEnableCost()", +"7896e093": "EventRemoveCastle(uint32)", +"7896ec42": "verifyCheck(address,uint256,uint256,uint8,bytes32,bytes32)", +"78977013": "PermissionRevoked(address,bytes32)", "789770f4": "ethToToken()", +"7897d685": "changeTerminalContract(address)", "7898278f": "emergencyFreezeAllAccounts(bool)", "78984793": "setLimit(address[],uint256)", +"789864ab": "TimeMintOnSale(uint256,address,uint256,uint256)", "7898acef": "usernameOf(address)", "7898b917": "getKey(address,string)", +"7898e0c2": "setValue(string,uint128,uint128)", +"7898fce7": "turnBurningOff()", "78990684": "closeAllSales()", +"789908e9": "payoutNumerator(uint64,uint256)", +"7899d80f": "tax(address)", "789a12fd": "getRafflePlayers(uint256)", +"789a670b": "getRoleAddress(uint256)", "789b2e6c": "payDay()", "789b4690": "diviRate()", +"789b6a31": "buyCOREforWETH(uint256,uint256)", "789c617c": "intStorage(bytes32)", "789c6740": "testEmptyCart()", +"789cbb9e": "get_account_info(address)", "789cf5e2": "auctionSumPlat()", +"789d9e8a": "votingFinished()", +"789dbb03": "idleReservoir()", "789dfc91": "SafeNetToken(uint256)", "789e4e53": "createContractCollection(string)", +"789e776f": "MinimumContributionUpdated(uint256)", "789ea7dc": "becomeBatlord()", "789fdcb6": "DoMusicPayout(uint256)", +"789fe355": "releaseMint()", +"789fe746": "validateOwnerName()", +"789ff0e1": "feeReserve()", +"78a0d759": "getUserWalletBalance(address,address)", +"78a16ce7": "ORACLE_RESERVE_MINIMUM()", "78a17883": "_batch4_icosaleEndTimestamp()", "78a1b7c2": "pct(uint256,uint256)", +"78a1e698": "mee()", "78a2157a": "erc20ECT(uint8)", "78a21a20": "_setStake(address,uint96,uint128)", +"78a25774": "endOfPresale()", "78a29c66": "votesAvailable(address)", "78a2e101": "TOKENS_FOR_PRESALE()", "78a32742": "Pinged(address,uint256)", +"78a37fe9": "addDefaultRestriction(uint256,uint256,uint256,uint256,uint8)", +"78a45a24": "synthCount()", +"78a4648c": "getPodBalance(address,address)", +"78a4ffd4": "notifyPriceDirChange()", +"78a5171a": "refRatio()", "78a5b1b0": "blockHeaders(bytes32)", +"78a5c742": "resetMintCount()", "78a5f0ca": "withdraw_dao_fund(address)", "78a62e9d": "isAppCode(uint32)", +"78a63f34": "UniswapPair()", +"78a66674": "updateRequestDetails(uint128,uint128,address[],bytes32[])", "78a6c6d2": "createBreedingAuction(uint40,uint128,uint128,uint40)", "78a70de5": "safeMathDiv(uint256,uint256)", "78a71d78": "sendMail(address[],uint256,bytes32,uint256,bytes32,uint256)", "78a72e0d": "encodeTransfer(uint96,address)", "78a77b84": "closeRaffle()", +"78a79e21": "pendingNoom(uint256,address)", "78a7b804": "setKittyCoreAddress(address)", "78a7e17d": "convert10MTI()", "78a83232": "violaToken()", "78a89567": "getTokenCount()", "78a8b1fb": "ZTKGamers()", "78a90a59": "presaleStop_13_December()", +"78a915ac": "TOTALL_SUPPLY()", +"78a967aa": "setPrimaryDaiRecipient(address)", "78a9e88a": "parseBitcoinComFeed(string)", "78a9eeed": "listAll()", "78aa08ed": "lotteryFee()", "78aa34bf": "test_6_assertGasUsage2000Boards()", +"78aa987e": "getRedeemOutput(address,uint256)", +"78aab4cb": "sendToAccount()", +"78ab865d": "nextCommitPhaseStartBlock()", "78abafaf": "limitAmount()", +"78abc18f": "currentCumulativePrices(address,bool)", "78abf854": "_budgetEndAndOfficalVotingTime(uint256)", "78abfbeb": "finalization()", "78ac19f9": "GexPayTest2Token()", +"78acb7d5": "InbotTokenTransfer(address,address,uint256,bytes)", +"78aceaf2": "getMintHandler()", "78ad76e6": "DeBiToken()", "78adf55e": "PreICOPart()", "78ae12d8": "PRE_SALE_1000_ETH()", +"78ae1931": "update(bytes32,uint256,uint256,uint256,uint256,address)", "78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", "78af5058": "picosSold()", +"78af5802": "initFixedTotalSupply(uint256)", "78af63ac": "btcRaised()", +"78afbe76": "sPairFor(address,address)", "78afda07": "firstContractAddress()", +"78b008c8": "TokenPoolRewardUpdated(address,uint256)", "78b04df0": "Play(address,uint256,uint256,uint256,uint256)", "78b0cb23": "addGpgKey(string)", +"78b0d8d1": "BuyFci(address,uint256,uint256,uint256)", +"78b12ade": "pendingMeat(uint256,address)", "78b14f0a": "addCharity(address)", "78b150bd": "contractUpgradable()", "78b17bd1": "supercustomhash(bytes)", "78b17ccf": "CANCELLATION_FEE()", +"78b1a9d8": "shr_large(uint256)", +"78b1fa74": "deregisterModule(address)", +"78b220be": "DURATION_MODIFIERS(uint256)", "78b226c4": "updateMemberAddress(address,address)", +"78b250c7": "getInfoUpdateIncentive(bytes32)", "78b27221": "mintFungible(uint256,address[],uint256[])", "78b290b5": "OPERATION_HOLDER()", "78b29105": "forceBuy(address,address)", +"78b340ae": "BuyWinnerTwo(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"78b3b40e": "delegatedDeposit(uint256,address)", +"78b475a8": "levelExps(uint8)", +"78b59b02": "runUpNumber()", "78b5a576": "updateDexterity(uint256,uint8)", +"78b6928f": "WhoisBot()", "78b6e20c": "untrackTreasuryToken(uint256)", "78b71079": "hasEnoughGrantAmount(address,uint256)", +"78b76528": "lockByQuantity(address,uint256,uint256)", +"78b78232": "HarvestHxpLp()", "78b83360": "freezingBalanceInfoOf(address,uint256)", "78b8a6c2": "issueTokensInternal(address,uint256)", "78b8c58c": "getTokenInfoNumToknes()", +"78b8eeeb": "lockIDs(address,uint256)", +"78b90337": "canExecute()", +"78b9046e": "showSmInfo(address)", +"78b90f9f": "hatcheryFalcon(address)", +"78b91d4a": "winningsLimit()", +"78b91e70": "upgradePreparationStarted()", +"78b92636": "getCollaterals()", +"78b95a40": "qilonk()", "78b99c24": "pricingStrategy()", "78ba24f2": "addContractBalance(uint256,uint256)", +"78bb110b": "getRoundReward(uint256)", "78bb5164": "whitelistLength()", +"78bb8f11": "viewContractEth()", "78bb9e54": "niceguy4()", "78bba530": "communityHolder()", "78bc254b": "setPreIcoParameters(uint256,uint256,uint256,uint256)", "78bc6460": "getCallGasPrice(bytes32)", "78bca3e7": "NeuralNetwork()", "78bcd39a": "accountLockCheck(bytes32)", +"78bd5f49": "LIQUIDATION_PREFERENCE_MULTIPLIER_FRAC()", "78bd7935": "getAuction(uint256)", "78be0496": "MTF(uint256,uint256)", +"78be717d": "withdrawMyDepositedNomins()", +"78be921f": "registeredPools__AID(address)", "78beda71": "createPromoMineral(bytes32,address,uint256,uint256)", "78bee6b4": "transferToAnotherAddr(address,uint256,bytes32)", +"78bef74c": "lockNyanLP(address)", "78bf2b53": "setToken(address,uint256)", +"78bf7499": "calculateOut(address)", +"78bf8a14": "getBarMiningStrength(uint256,address,uint256)", "78c01961": "EmitEntityIds(address[])", +"78c11cfb": "mineStatus()", +"78c12a35": "getEstimatedOutForIn(uint256,address[])", +"78c234e0": "createPromoDragon(uint256,uint64,uint64,uint64,uint64,address)", "78c24e9b": "adminSetFeeDialNumber(uint256)", "78c2c849": "burnUnicorns()", "78c37a45": "amendCount()", @@ -69254,84 +126608,144 @@ "78c3e2ec": "createTask(address,string,string,uint256)", "78c3e7a4": "generateCardsFromClaimForOpponent(address,address)", "78c3f298": "pvtTokens()", +"78c3fceb": "applyGovernanceForUpdateCore(bytes32)", "78c53533": "getPoolOwner()", +"78c54bee": "xEurContractAddress()", +"78c54d69": "addDistributeItem(address,address,uint256)", "78c5e86f": "crowdsaleClosedTime()", "78c62ca4": "changeDestinationAddress(address)", "78c68573": "getLineUpEnable_miner(address)", "78c6d437": "founders_addr()", +"78c6f83f": "inbestDistribution()", "78c70a4e": "allowAddressToSendMoney(address,address)", "78c7524d": "versionIndex(bytes32,bytes32,address)", "78c83f71": "rebalance_insert(uint256)", "78c8cda7": "removeWhitelist(address)", +"78c8e01e": "Dewhitelisted(address)", "78c91d29": "getCountCanAdd()", +"78c9773b": "weeklyNumberEndPrev()", "78c9f9cf": "computeEarningsAmount(uint256,uint256,uint256,uint256,uint256)", +"78ca76a3": "approveMarginCode(address,bool)", "78ca923d": "nearestKnownBlock()", "78caa728": "getLLV_edit_12()", "78cac18d": "updateInfo(address,address,uint256)", +"78caf596": "voteTokenProject(address,address)", +"78cb10d8": "getWalletDeployer()", +"78cb13a2": "CreditsTokenPriceChanged(uint256,uint256)", +"78cb2005": "setBound(uint256,uint256)", "78cb2f56": "DENtoken()", "78cc180b": "bpSaleIssue(address,uint256)", +"78cc6cc5": "epochEndTimeFromTimestamp(uint256)", +"78cd62ec": "PharaohGameContractAddress()", "78ce14dd": "CryptotalksToken()", "78ce341a": "enablePayable()", +"78ce591d": "cal_out(address)", "78cf19e9": "reserveTokens(address,uint256)", +"78cf9fca": "entryfees()", +"78cfbf59": "TransferWithAmount(address,address,uint256,uint256)", "78cfccb5": "REDDCCOIN()", "78cffc09": "set_location(uint256)", "78d012a6": "roundIn()", +"78d067dd": "calcFees(uint256,uint256)", "78d0a415": "getDthTeller(address)", +"78d0df50": "cardIndexToOwner(uint256)", +"78d10b09": "startFinalDistribution(uint256,uint256)", "78d18198": "getNextSnapshotBalance(address)", "78d18bef": "withdrawalsInitiated()", "78d19e42": "MintableToken(uint256,string,uint8,string)", +"78d1ce99": "setCurvePool(address,address,int128)", "78d22ab0": "getStageMinWeiAmount(uint256)", +"78d25456": "initialize(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"78d28781": "pendingKswap(uint256,address)", "78d34986": "updateKittensRemainingForSale()", "78d3633b": "illiquidBalance(address)", "78d38d1a": "SenegalvsColombia()", +"78d43ec3": "vcliff()", +"78d446e1": "leftCount(uint8)", +"78d45de0": "INCENTIVE_MAX_PERCENT()", "78d45eb6": "checkAccess(address,bytes1)", "78d46c3f": "listSpriteForSale(uint256,uint256)", "78d4e808": "fetchCancelledOrdersForPayerByAdmin(address)", +"78d530d3": "createMain(address,address)", "78d55ac1": "MRCCToken(uint256,string,string)", "78d5e123": "unstakeTokensManually(address)", +"78d5f781": "setOracles(address[],address[])", "78d63908": "doBuy(address,uint256,bool)", "78d63c59": "AMFBToken()", "78d6525f": "test_validEmptyEqEmpty()", +"78d6a94a": "setparam(address,address,address)", +"78d6ade4": "FEE_DIVIDER()", "78d6fd25": "getRecTransactions()", +"78d748d0": "getResolveContract()", "78d74f60": "LyCI(address,string,uint8,string,string)", +"78d7568f": "callCGetZero(address,uint256)", +"78d782db": "addNewVoteEvent(string,string,uint256,uint256,uint256)", "78d7ccea": "ComputeEggsSinceLastHatch(address)", +"78d81bfe": "_apr()", +"78d849ed": "priceFeeds()", +"78d851e6": "accLunaCorePerShare()", "78d8615f": "addEvent(uint256,string,bytes32,bytes32,string,bytes32)", +"78d8742c": "convertSushi(uint256,uint256,uint256,uint256)", "78d8e17b": "totalGenesisTokens()", "78d8fed8": "setUnlock(bool)", "78d9472f": "setDefendBoostMultiplier(uint256)", "78d9b048": "teamPoolInstant()", "78d9c387": "newContest(uint32,uint256,uint256,uint32,uint256,uint32)", "78da32f2": "setUintF1F2F3(uint256,uint256,uint256)", +"78da744b": "credit(uint256)", "78da7ba1": "presaleEndTimestamp()", +"78daaf69": "getStakerDetails(uint256)", +"78dacee1": "updateFees(uint256)", +"78db85f1": "isPermitted(uint256)", "78dbce5f": "GetStakingNow()", "78dbfd91": "createBuyOrder(address,uint256,uint256,uint256)", +"78dc079e": "getInitialUpgradeTimestamp()", "78dc6b7e": "transferring(address,address,uint256)", "78dc7017": "getYellowCards()", "78dc70c0": "feePeriodStartTime()", +"78dc9059": "exitPosition(uint256)", +"78dcd952": "changeSnatchRate(uint256)", "78dda193": "getCarState()", +"78ddaebb": "homelandPoints(address)", "78df0fe1": "getProfits(address)", +"78df176d": "_erc721Interface()", "78dfd3a9": "getNumParticipants(uint256)", +"78dffea7": "pool3users(address)", "78e03373": "operationalAddress()", "78e0a0bd": "flashSale(uint256,uint256,uint256)", +"78e12dd6": "AllowEveryone()", +"78e16450": "sentTo(address)", +"78e1f110": "changeThresholdOfTier(uint256,uint256)", +"78e22450": "_runElection()", "78e24ab5": "SALE1_RATE()", "78e2df0e": "soft_cap()", +"78e3214f": "rescueFunds(address,uint256)", +"78e32e26": "toGovernance(address,uint256)", "78e4ca77": "Connect4eth(address,address,uint256)", "78e4d750": "PenPalToken()", "78e5d841": "HaltableToken(address)", "78e619df": "DOOMCOIN()", "78e65d2e": "bridgeValidatorsImplementation()", +"78e6b795": "getBestReservesRates2(address,address[],uint256[],uint256[])", +"78e6d8b4": "swapA2B(uint256,uint256,address,address,address,address)", "78e7058e": "advisorsTokensHolder()", +"78e70645": "nftExitCounter()", +"78e72239": "updateEmission(uint256)", "78e77477": "releasedAdvisorsTokens()", "78e7e5ea": "LAND_ADDRESS()", +"78e7e665": "changeRATE(uint256)", "78e80b39": "UserGetPrize()", "78e8356c": "removeBet(string,uint256)", "78e8488d": "gameGiftSentAmount()", "78e870cd": "balances_available_for_crowdsale()", "78e88c3c": "getMyFee(address)", "78e89085": "Dispute(uint256)", +"78e89e05": "ReservedTokensSet(uint256,address[],uint256[])", "78e8b8fc": "dataSourceCallbackGroup(uint256,uint8,uint8)", "78e8cab5": "gcpm(uint256)", "78e90190": "mokenBytes32(uint256)", +"78e923d4": "pendingHitman(uint256,address)", +"78e94dd2": "getRemainingBalance(uint256)", "78e95645": "noteChainFee()", "78e97925": "startTime()", "78e9f1ba": "minimumBetAmount()", @@ -69339,9 +126753,12 @@ "78ea787b": "getDefaultAllowance(string)", "78eb890b": "checkErrors()", "78eba8fc": "icoCheckup()", +"78ebc0be": "setFoundationFeeHolder(address)", "78ec0adf": "scannedSilverCaps()", "78ec1eb4": "checkIfEligable(address,address)", "78ec383a": "MRC()", +"78ec47aa": "referralSaleCount(address)", +"78ec66f2": "claimRewardAndStake()", "78ec6dbd": "Beth()", "78ec81a0": "sendEarnings(address)", "78ec96a0": "GREEN()", @@ -69349,100 +126766,198 @@ "78ecabe6": "changeAvailableSpend(uint256)", "78ed2178": "linkFileToTask(address,bytes32)", "78ed43c1": "administrationContractFrozen()", +"78ed5711": "changeAsk(address,bool)", "78ed8dfd": "allocateUnsoldTokens()", "78ed9156": "diary(uint64)", +"78edb7cc": "CockAccounty()", +"78edd3fc": "seFee()", +"78ee0603": "getKernelAppId()", "78ee6035": "cancelPledgePayment(uint256)", +"78ee9aa5": "xsushi()", "78eef9d4": "move_excess_for_bucket(uint256,uint256)", +"78ef7f02": "teamRate()", +"78ef9e32": "companion()", "78efa1db": "COIN_SUPPLY_ICO_TIER_3()", "78f0161a": "setGreyGreenPrice(uint8)", +"78f043fc": "newCNDAOexchange(address)", "78f08268": "getUsersCount(address)", "78f08f2e": "getLineStat(uint256)", "78f13614": "ATTR_LEASABLE()", +"78f13f87": "setupFairDistribution(uint256,uint256)", +"78f19a60": "wormholeSize()", "78f1a5ce": "addTeamAndAdvisoryMembers(address[])", "78f2144b": "_originalBuyPrice()", "78f22cc0": "getAuditRegistrar(uint256)", +"78f2ac26": "readyToSettle()", +"78f2c321": "disapproveUser(address)", "78f305c6": "getStartDate()", +"78f33450": "forBuybackRate()", +"78f353a1": "lastRebase()", +"78f45340": "auction_start()", +"78f48c4f": "selfieToOwner(uint256)", +"78f4b2f2": "MIN_ROLLUP_TX_GAS()", +"78f4e760": "locakablePercent()", "78f55622": "calCurrentVirus(address)", "78f55de4": "sxpNumber()", +"78f58ee3": "deposit(address,address[])", "78f5958f": "setblocksPerMonth(uint256)", "78f5e0ec": "CampingCoin()", "78f5e59f": "TOTAL_SUPPLY_VALUE()", +"78f65bb9": "Stake(address,uint256,uint256,address,uint256,uint256)", +"78f6e998": "minePrice()", "78f74fbe": "tokenIssuedPrivateIco()", "78f76779": "batchOrderTrade(uint8[2][],bytes32[4][],uint256[8][],address[6][])", "78f79187": "DailyAndSnapshotable(uint256)", "78f7aeee": "tokenAllocated()", "78f7d9c6": "payBill(uint8,uint256)", +"78f84a44": "userFeeExit(address)", +"78f9275b": "balanceOfCake()", +"78f974c9": "brainPerBlock()", "78fad7bc": "champToken()", "78faff96": "isSet(address,address)", +"78fbb04f": "addShop(address)", "78fbc9ea": "weiToCollect()", +"78fc063c": "getParametersHash(address,uint256)", "78fc3cb3": "canTransfer(address)", "78fc52b3": "processDiceRoll(address,uint256)", "78fca301": "Menu03(uint256)", "78fd98d1": "freezeAmount(address,uint256)", "78fddd69": "MedAIChain(uint256,string,uint8,string)", "78fe2951": "enableService(uint256)", +"78fe2d24": "getCurrID()", +"78fe7a51": "CreateGroup(string,string)", +"78febac2": "list_nicename(address[],uint256)", +"78febf0d": "getmagnification(uint256)", "78ff54eb": "updateRestrictedVault(address)", "7900438b": "registerDevice(bytes32,bytes32,bytes32)", +"790047a8": "calculateTokenAmountFromUsdAmount(address,uint256)", +"79007ea9": "getGreeting(uint256)", "79008da5": "addRandomTile(uint16,uint8)", "790105ff": "withdrawEIP20Token(address)", "79018524": "Token(uint256,address)", +"7901ea78": "initiate(uint256)", "79028df3": "GetFirstName(uint256)", "79032fa7": "storeHorsey(address,uint256,address,bytes32,uint8,uint8)", +"79033a9d": "dvdToReserveTaxed(uint256)", "790377dc": "getLastAuditId(address)", "7903d8c8": "canSend()", +"7903f54a": "return500InvoicesByDates(uint256,uint256,uint256)", +"7904586e": "totalInvestedAmountOf(address)", "79049227": "lockupSeconds()", +"7904bd09": "reservationContracts(address)", "7904d388": "ethRec(uint256)", "7904f688": "distributePrizes(uint16)", "79053739": "damage(uint8[176],uint8,uint8)", +"79054889": "dateBucket(uint256)", +"790554de": "updatePlan(uint256,uint256,uint256,uint256)", "790587d1": "updateIpfsGateway(string)", +"7905b435": "getUserCollateralizableAmount(address,uint256)", +"7905c543": "BookRents(uint256)", "79061e96": "withdraw_ether()", "7906305b": "upgradeTier(string)", "790683d3": "getTopicByOffset(uint256)", +"7908108c": "getTimelocksForUser(address)", "79081feb": "getCardLeaseLength(uint8)", +"79082539": "auth_ledger(address)", +"79088c84": "getSeperate()", "7908f25c": "thirdTeamWithdrawal()", +"790956f7": "topPromoters(uint256)", "79099e15": "MAX_USD_FUND()", +"7909ce47": "authorize(bytes32,uint256,string)", "7909da6f": "createExchange(uint256,uint256,uint256)", "7909f569": "gasForFLKD()", "790a091e": "test_rewardPoolShare_notTranscoder()", "790b1656": "ThreeEtherFree()", +"790bde32": "integrations(uint256)", "790be9b5": "SETC(uint256,string,string)", "790c33b8": "getReportingTokenOrZeroByPayoutDistributionHash(bytes32)", "790ca413": "launchTime()", "790cbfa0": "createMeshPoint(int256,string)", +"790d1d45": "updateAddresses(address,address,address,address,address)", "790d4e11": "getLosersOnePercent(uint256)", "790dd0f5": "fuint256(uint256)", +"790e118c": "totalRoles()", +"790ed1d6": "Unlike(uint256)", +"790f3ea1": "updateFeePayoutAddress(address)", +"790fcf9f": "initialize(address,address,address,address[],address[])", "7910085d": "fipsIsRegistered(bytes20)", "79103c2e": "RejectedApplication(address,uint256,string)", +"79104ea6": "calcSingleOutGivenPoolIn(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "7910830a": "setCrowdSaleStatus(bool)", "7910867b": "isApproved(uint256)", +"7910d70f": "balanceOfDAI(address)", +"79115e48": "totalInvestorContributed()", "7911d80a": "Presale1Sold()", +"7911ef9d": "removeBlacklist(address[])", +"79120eff": "vote_reward(uint256,uint256)", +"7912680d": "setWorldAddress(address)", +"7912a65d": "MISDEMEANOR_THRESHOLD()", "7912b0f1": "HOPEToken()", +"79131a19": "games(address)", "79132085": "APSP()", +"79137481": "changeUserSecurity(bytes32,bytes32,uint8)", +"79138df1": "_burnRate()", +"7913c465": "requestCodeUpgrade(address,bytes32)", "79141f80": "getBetInfo(uint256)", "791455dd": "addPieceAndHash(string,string,string,address)", "79147cf0": "_result()", "79147d07": "UnsoldAllocation(uint256,address,uint256)", +"791491bf": "initialValueShouldNotBe200()", +"7914b2ec": "decodeAssetProxyExistsError(bytes)", "7914d10f": "setminContribution(uint256)", +"79151acc": "INITIAL_UNSALE_SUPPLY()", "7915785e": "accountsToAllocate()", "791581c6": "addTime(uint256,uint256)", +"7915a682": "cancelReward(string)", +"7915a701": "LogLSTsWithdrawn(address,uint256)", +"7915b185": "buyZTokenUsingERC20Token(address,address,uint256)", "7915c069": "register(string,address,address)", "7915c9e0": "verifyTransfer(address,address,uint256,bool)", "79162aeb": "pauseEmergence()", "79164773": "nextForkBlockNumber()", +"791648bf": "settleableReward(address,address,uint256)", +"79164b1a": "startLiquidityGeneration()", +"7916910e": "isAuthorizedForPublicOperation(address)", +"7916ad46": "userWithdrawBalance()", +"79172222": "initialize(bytes32,bytes32,address)", +"791747b0": "payEscrow(address)", +"7917fb9f": "setFee(address)", +"7918f7b8": "renounceMinterAdmin()", "7919233f": "emitWorkOrder(address,uint256)", +"791966ec": "_usdc()", "7919792b": "doThrowOnDivByZero()", +"791a65c6": "transfer001()", "791ac4e5": "_getUtilizationRate(uint256)", +"791ac947": "swapExactTokensForETHSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)", +"791ad110": "monthlyAllocation(uint256,uint256)", "791af2b6": "dkBB(bytes32)", "791af8e4": "totalExtraTokens()", "791b1150": "notify_payment_reject(uint256)", "791b51f1": "Consulting(address,address)", +"791b5779": "updateMinimumReturn(uint256)", +"791b6d60": "getAddress(string,string)", +"791ba374": "setMdxPerBlock(uint256)", "791bbe35": "TheDeadShitCoin()", +"791bd58d": "FeePeriodDurationUpdated(uint256)", +"791c27ef": "spend(address,address,uint256)", +"791c3504": "pushLiquidity()", +"791c6e68": "externalMinUint256(uint256,uint256)", "791cbc4f": "stopConvertTokens()", +"791cbde5": "exMar(uint256)", +"791d5089": "getBidStatus(address)", +"791d8915": "mintForMigrate(uint256,uint256)", "791dd41c": "ownerOverride(uint256)", +"791e03cb": "bonusRewards(address,uint256[],uint256[])", +"791eacca": "withdrawAdminFees(uint256,address,uint256)", +"791ebd43": "convertDAItoETH(uint256,uint256)", "791f0333": "equalStrings(string,string)", +"791f7970": "turboUpdate()", +"791f892f": "redeemAFIToken(uint256)", "792037e3": "shut(address,bytes32,address)", "79203dc4": "totalAllocation()", +"7920c127": "rangeStart()", "7920d804": "getKing()", +"7920e200": "mcrTime()", "7920f72c": "_tag(int256,string)", "79214878": "regionExists(uint256)", "792166b8": "createEscrow(uint256,uint256,address,address)", @@ -69450,285 +126965,545 @@ "79216f5f": "add_monster(uint16,uint16,uint16)", "79217982": "preIcoMinInvest()", "79219a24": "getLockRecordCount()", +"7921b072": "getRewardAmount(bool)", +"7921b9aa": "unutilizedLeveragePercentage()", +"79220a71": "withDrawal(uint256)", +"792282bf": "shiftArrItem(uint256)", "7922841c": "registerAssetHeader(int256,string,string,string,string,string)", +"792288c6": "TOKEN_FOR_BONUS()", +"7922f426": "activities(bytes32)", +"7922f80f": "invest(string,string)", "7923715b": "RPEICO_TOKEN_SUPPLY_LIMIT()", "79250dcf": "getApprovePreSignedHash(address,address,uint256,uint256,uint256)", "792544af": "get_DB_info(uint256)", "79254bb8": "right29(uint256)", +"79264cbf": "setSynthAddress(address)", "792651b0": "app_storage()", +"79267760": "test(uint256,address[],uint256)", +"79271b28": "approve_245(address,uint256)", "7927448a": "getTicketTime(bytes32)", +"79279fd1": "safeGuard()", "7927bc0c": "list_token_bid(address)", +"7927d21c": "toggleOffline()", +"7928068f": "ratePlaces()", +"79287211": "seeCart(uint256)", "79287790": "get_milestones_information(uint256)", +"7928b20d": "SubUSDUnitPrice(address,address,uint256)", +"7928dfc6": "setupReleases(uint256[],uint256[])", +"7928ee51": "buyVotes()", "792a152d": "addRegion(uint16,uint256,string)", +"792a660b": "setReserveDepositor(address)", +"792aa04f": "getModuleFee(address,uint256)", "792ad365": "lastBlock_f15Hash_uint256()", +"792aebbb": "getMoveBurnRate()", "792b22c6": "returnCoupon(address[3],bytes32)", "792b476b": "getPositionCount1(address,address)", +"792b55b6": "setHarvestFee(uint256)", +"792bbb55": "rangeTimeBank()", "792c02ea": "stagesLength()", +"792c8ba8": "challenge_4(uint32,uint32,bytes)", "792c91c2": "setRecordId(uint256,bytes32)", "792cb544": "_setCertificateSigner(address,bool)", +"792d0c13": "ownToken(address,uint256,uint256)", "792e1ffc": "authorize(uint8,bytes32,bytes32,address)", "792e79c5": "stealCardWithTwitterId(uint256)", +"792ede7f": "usersNETF(uint256,address)", +"792f459a": "Funded(address,bytes32,string,uint256)", +"792fc2f8": "clearAuthOfRole(address)", "79304063": "depositsSigned(bytes32)", +"79304bec": "withdrawTokensToOwner(uint256)", "7930a433": "withdrawDelta(uint256)", "7930acd6": "getCCH_edit_27()", +"7930bb54": "matrixBonusInfo(address)", "79318d81": "closeRefunds()", "7931a765": "Issued(uint32,address)", +"79320fe2": "setBeerTokenContractAddress(address)", "793267f0": "vaildBalanceForTokenCreation(address)", "79326c01": "isSaleOwner()", +"7932eb5a": "RemoveLand(uint256,uint256,address)", "7932f07f": "getRegionBlockUpdatedAt(uint256)", +"7932f372": "signatories(address)", "793318eb": "MMMPCoin()", "79332159": "Bet(address,address,uint256,uint256,uint256)", +"79333aa5": "NaSwapFlashToken(address,address,address,address,address,address,uint256,uint256)", "79341ca1": "getRoundAmtPot(uint256)", +"79347371": "depositNft(uint256,uint256)", +"79347b06": "rateTransaction(uint256,uint256)", "7934b50f": "_lockToken(uint256)", +"7934d82e": "returnSeason()", +"7934ec16": "hatcheryCraigGrant(address)", "7934f4ed": "processPayment(uint256,bytes)", +"7934fd96": "ca()", "7935326b": "preICOTokensAllocated()", +"793543d4": "setYourTokenAddress(address)", +"7935510b": "claimVestedTokens(uint256)", +"7935b1cd": "allBallots(uint256)", "79362167": "getBillboard(address)", "79372f9a": "ClaimReward()", +"7937738d": "SetLock(address,address,uint256)", +"79378e30": "LEVEL_PRICE(uint256)", "7937f46d": "setBBO(address)", +"793802ea": "airdropLength()", "79381c80": "performRefund(bytes32,uint8,uint256,uint256)", "7938cc42": "allocateProofTokens(uint256)", +"7939748e": "defaultMetadataURI()", "7939a10b": "getSellValue(uint256)", "793a2cd1": "isPausedICO()", "793a8c95": "owner_updatePayout(uint256)", +"793a8e71": "products(address)", +"793b834f": "isReleaseAvailable(address)", +"793b8c6d": "orders(address,uint256)", +"793baa24": "setHash(string,string,string)", +"793be76a": "fundingID()", "793c0fd4": "authorizeSpender(address,bool)", "793ca3fe": "getFirstCycleBlock()", "793cd71e": "cashOut()", +"793cf218": "getTotalVoters()", "793cf430": "option30name()", "793d424e": "getBLAddress()", "793d7165": "fSqrt(uint256)", +"793d9149": "surplusAuctionDelay()", "793dae12": "acceptSettlement()", +"793dc3d9": "connectExecutionManager(address)", +"793e39cd": "createAndSellAllAmountPayEth(address,address,address,uint256)", +"793e5a0d": "getOptionSymbol(string,uint256,uint256,bool,bool)", "793e9b0b": "OPTION_POOL_ALLOC()", "793ec6c2": "turnOffCanUpdateBackWindowAdjustmentRatio()", +"793f40e0": "NUM_ITEMS_PERLOOTBOX()", +"794039a5": "makeAMove(uint8,uint8)", "79409b19": "EthToUsd()", +"7940b0be": "LayTatCaVDV()", +"7940ba04": "IngestTelemetry(int256,int256,int256)", "79412da6": "withdrawalTokens(address,address,uint256)", +"79419ea1": "transfer_out(uint256)", "7941a062": "getBlocksRemaining()", "7941d7bd": "changeTokenOwnerByAdmin(uint256,address)", "79420fb1": "tierTotal()", "79428570": "getTeamId(uint256)", +"7942fd05": "SLASH_CHANNELID()", +"7943913d": "getYieldData(address)", "7943f2ec": "withdrawCoinToOwner(uint256)", +"7944013a": "getGroupId(uint256,uint256)", +"79442596": "setMinTransferFee(uint256)", +"79443ae9": "isChannelClosed(uint64)", "79444ad3": "handleForTokenId(uint256)", +"794466d8": "_setTokenFactory(address)", "7944875b": "StopSale()", "7944b4b9": "mileStone(address,uint64,uint8)", +"7944f944": "swapFactory()", "79456cb6": "test_1_method()", "79459ac3": "buy10(address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"79463186": "MEDIAN_ORACLE_ADDRESS()", +"7946b14a": "__getValueInterpreter()", "794752c7": "askForgiveness(string)", "79480a4c": "getOrderValuesFromData(bytes)", "79480fe3": "nextMintFeeAbs(uint256)", "79485d41": "DeauthorizeServiceProvider(address,address)", "7948a9c5": "TokensWithdraw(address,uint256)", +"7948c325": "setDynamicFeeEnabled(bool)", "7948f523": "setAmbiAddress(address,bytes32)", "79491370": "closeSale(address)", "79492f30": "allocationFor(uint256)", +"79496ca2": "get30DaysReturnPercentForToken()", +"794979ba": "callBid(address,uint112)", "7949859e": "UpdateToeknLimitICO(address,uint256,uint256)", +"794a921c": "transferLockedRelative(address,uint256,uint256)", "794ab0a8": "etherPriceInDollarIn()", "794b0c62": "DAICO()", "794b0e6b": "addExperience(address,uint256[],int32[])", +"794bcf8a": "liquidateCb(address,uint256,uint256)", +"794be707": "blackListAddress(address,bool)", "794c0c68": "stakingEpoch()", +"794c5369": "isClosedCrowdsale()", "794cea42": "search(address,address[])", +"794cf70a": "showEqual(uint256)", "794d0d8d": "WithdrawVault(address)", +"794d3850": "ROLE_ISSUER()", +"794d6f90": "tokenUniswapPairDFGRFI()", +"794d8997": "DepositETHAmount(address)", +"794d8e77": "clear_after_one_epoch()", "794df640": "updateUsdEthRate(uint256)", +"794e664d": "numberPointsMonthly()", "794e9434": "awardWeeklyLottery(address,uint256)", +"794eb29b": "_addInput(uint256,uint256,address,address,address)", "794ee205": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes)", +"794f24f3": "offChainArbitrate(uint256)", "79501a83": "isBiometricLocked(address)", "79502c55": "config()", +"7950537d": "voken2address(uint160)", "7950c5f8": "verifyingKey()", "7951357e": "Suspended()", "79515566": "calcAllowedWeisToInvest(uint256)", +"7951ef72": "getBoxes1()", +"79521b2c": "ndx()", +"79521f02": "subscriptionsContract()", +"79524b4c": "providerRatePerDay()", "7952a0ed": "MetaProject()", +"7952bf83": "THREE_CRV_STRATEGY()", +"7952e62a": "FirstSign(address,uint64)", "79530087": "BirCoin()", "79538e47": "addVpf(bytes32,uint256,uint256,uint256,uint256,int256[])", "7953ae77": "MainSaleDeadline()", "7953e0ab": "dateEcoRelease3()", +"79542368": "rollbackMintRate()", "79544754": "getBonus(address,uint256,uint256)", +"79552101": "Release(address)", +"79553129": "mineCommunityPoll(uint256)", +"79556d74": "decisionPeriod()", "79557e4f": "traded_token_balance()", "7955a65f": "adminWithdraw(address[3],uint256[3],uint8,bytes32,bytes32)", "7955dd45": "player_withdrawPendingTransactions()", +"7955f60f": "positionList(uint256)", "795612d6": "buyItem()", "79564072": "directorLockUntil()", "7956f46a": "AggiungiProfessore(address)", "7957170b": "getApproveRecord(uint256)", "795741c8": "withdrawEscrowFees()", +"79575b23": "setLeverage(uint256)", +"7957bc0e": "setCurrentSeasonEnd()", +"7957dda3": "setNextDueBlock(uint256)", "79583e22": "buyOrder(address,uint256,uint256)", "7958533a": "meta(uint256,bytes32)", +"79596dd9": "withdrawAdminMoney1(uint256)", +"79599326": "pendingScore(uint256,address)", +"79599f96": "expire()", +"7959b5cd": "allowTransaction(address,address)", "795a16e3": "setRecipient(string)", +"795aebb8": "setMakerLevarageRate(uint256)", "795b0e16": "TransferAllowed()", "795b5b83": "createSaleCardToPlayer(uint256[],address,address)", "795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", +"795be587": "unbonds_new(address,uint256)", "795bfd7b": "togglePreventDoublePurchases()", "795c1713": "FCoinToken()", "795c6437": "isWorkflowState()", +"795ccdbb": "bulkHarvestFor(uint256[],address)", +"795cfa9b": "conjureExclusiveWizard(uint256,address,uint8)", +"795da1e2": "getStrike()", "795da78f": "coinsIssuedCmp()", "795dbede": "idx()", +"795dcd71": "harvestOrai(uint256,address)", "795e09ef": "privilegedAccountsCount()", "795e4547": "changeContractUpgradability(bool)", +"795e617e": "updateLogic(address)", +"795ea18e": "timeout(bytes32)", +"795ea911": "placeO(uint8)", "795ebb68": "setTokensDecimals(uint256)", +"795ee62d": "reduceRewardPerBlock(uint256)", +"795f956b": "ticketVault()", +"795fc305": "saleBonusICO1()", "795fcd6e": "RelentlessConscience1Token()", +"795fe4b4": "gg1(bytes1)", "795ff8aa": "safeTokenWithdrawal(uint256)", "7960d19b": "MediatedTransactions_Log(uint256)", +"7960eff8": "percentWithdraw(address)", +"7961104c": "yieldxStakersAddress()", +"796154bc": "getUserStages(address)", "79618233": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256,bytes32)", +"7961a73d": "setRole_(uint8,address)", "79624add": "MAX_DAILY_SOLO_SPEND()", "7962525c": "getRoundNumberOfBets(uint256)", +"79626107": "sevenBlock()", +"79627f1e": "addBallot(uint256,uint256,bytes32[])", +"7962c435": "jietlock(address)", +"7962d59b": "safeTransferAllFrom(address,address,uint256[])", "79630bd8": "rate10()", +"796337f6": "addHoldingsAddresses(address[])", +"79636c57": "refreshDistributionSpeeds(uint8)", "7963b478": "assertEq28(bytes28,bytes28,bytes32)", "79644576": "newProposal(uint256,address,uint256,string)", "796485f9": "back_giving(uint256)", "7964dd2b": "excludeAddressFromStaking(address,bool)", "7964ea87": "claim(bytes32,uint256,bytes)", +"79653332": "stop_ICO()", "79655bd0": "getStages()", +"79659151": "quoteDirect(address,address,uint256)", "7965bb86": "STQPreICO2(address,address[])", "79662bd5": "withdraw(string,address,uint256,string)", +"79666638": "safeAdditionShouldRevert()", +"79666868": "approveOrder_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes,bool)", "796676be": "urls(uint256)", "796686a9": "book(uint256[],uint256)", "7966c431": "subString(string,uint256,uint256)", "796736f0": "tradeBalances(address,address,uint256,uint256,address,uint256,bytes32)", +"79678ac4": "getTokensToEthereum_(uint256)", "7967a50a": "preSaleEndDate()", +"7967fc5a": "transferBank()", "7968196c": "amountRaisedInUsdCents()", "79681c94": "buyRoundDataRecord(uint256,uint256)", "79683e63": "inviteInit(address,address)", "79687166": "uintToBytesForAddress(uint256)", +"7968d502": "getMaxPrize()", +"796921b3": "swapFromAdelVestedRewards(uint256,uint256,bytes32[],uint256,uint256,bytes32[])", "79694f08": "topUpDelegate(address,address,uint32,uint192)", +"796a47c2": "feeUpdateTimelock()", "796a6ec9": "Credited(address,uint256,uint256)", "796a8076": "updateAuctioneer(address)", "796b89b9": "getBlockTimestamp()", +"796bd48a": "PlaceBuyFciOrder(address,uint256,uint256)", "796c0c78": "allocatedTokens(address,uint256)", +"796c550f": "acceptedImplementations(address)", "796c5b08": "getPenaltyFactor(uint256)", "796c5e5b": "saveHash(bytes8,string)", +"796c5e94": "getItems(uint256)", "796c8902": "getInvestor()", +"796cac0d": "vestingSchedules(uint256,uint256)", +"796cb08c": "multisendErcDOGS(address[])", +"796d5654": "cancelProject(uint64)", "796d67da": "numberOfProposals(bytes32)", "796d8950": "StromkontoProxy()", +"796d9ab5": "computeWeightsChange(address,address[],uint256,uint256,uint256,uint256)", +"796da7af": "getOraclePrice()", "796dc916": "pauseResumeContract(bool,bytes32)", +"796f077b": "DOMAIN_NAME()", "796f6281": "tokenFront()", +"79704402": "setGameTreasury(address)", "7970785d": "withdraw(address[],uint256[],address[])", +"7970833e": "lockedStakes(address,uint256)", +"7970c6cb": "gainswap_factory()", "79710f07": "drainERC20(address)", "79716e43": "confirmTransaction(bytes32)", +"79717617": "getNumberOfGems()", +"797183a1": "allocPointPool2()", +"7971f270": "mutateName(uint256)", +"797294ac": "setQuorumPercent(uint256)", "7972d079": "setMfgValues(string,string,string,string,string,string)", "79735d54": "hasEnoughStake(address)", "7973830a": "getMapValue(uint256)", +"7973aa56": "ERR_MAX_ORDER()", "7973b370": "ProudOfYourCoin()", "7973c57f": "fechVoteNumForCandidateBySnapshotBlock(address,uint256)", "7974a9e6": "publishOption(uint256,uint256,uint256)", +"7974bc5c": "getQRCode(address,string,string)", +"7974ea5f": "sendPrize(address[],uint256[])", "7974f8fe": "changeTime(uint256)", "7974fdbd": "secondStageRefund()", "79753e82": "initAirdrop()", +"79757250": "retrieveRandomCar(uint256)", "7975752c": "ScabbageToken()", "79758d46": "reading_card_at(uint8)", "7975c56e": "oraclize_query(uint256,string,string)", "7975c609": "accountLevels()", +"7975c95f": "_deductSwapFee(address,uint256,uint256,uint256)", "7975ce28": "buyTokens(uint256,uint256)", +"797669c9": "MODERATOR_ROLE()", "7976eaa2": "getBonusTokens(uint256)", "79770d5f": "minBidDifferenceInSzabo()", +"79779a35": "deployPairRouter()", "7977f708": "addRoleCapability(uint8,address,bytes4)", "79787196": "killTotalSupply()", +"7978adaf": "ReDrawUser(string)", +"7978b231": "setManagerAddr(address)", "7978c7ed": "exotownToken()", "7978f1b2": "licenseCostNumerator()", "79798ccb": "startTokenSale()", "79799193": "FreezedCash()", +"7979a3c9": "validors(address)", "797a49b6": "createPoll(string,uint8)", +"797a6233": "setTotalReward()", +"797a8ba3": "withdrawDone(bytes32,uint256)", "797af627": "confirm(bytes32)", "797b5877": "NCU(uint256,string,string)", +"797be55e": "lockedPremium()", +"797bf385": "loanTokenAddress()", "797bfaf3": "ico1endTime()", "797c6f3a": "advertisingUse(uint256,uint256)", +"797c7480": "getFeedAddresses()", +"797ceb8f": "deflate(uint256,address)", +"797d123c": "lastNRTRelease()", +"797d1985": "fee_pool()", +"797d58b4": "MedalTransfer(address,address,uint256)", "797d660f": "getCandidateNumberList()", "797d8b85": "calculateDividend()", "797d9437": "loadedRefund()", +"797daf70": "getProposalQueueLength()", "797df209": "configureVesting(uint256,uint256)", "797e2aec": "addCharacters(uint8)", +"797e7a48": "getRes()", +"797eee24": "registrationExt(address)", +"797ef3bf": "attributionCnt(address)", +"797f2a26": "createTokenSupplyID(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"797f5289": "transferFromMultiToMulti(address[],address[],uint256)", "797f6bb1": "raiseTraderUnregistered(address)", +"797f7147": "_onBoardPRF()", "797f73ff": "alreadyClaimed()", "797f87ba": "chests()", +"797fc47d": "mintStarSystem(uint256)", +"7980198b": "check02(uint256,uint256,address[],uint256,address[])", +"79803fff": "config(address,uint256,address,uint256,uint256,uint256)", +"798053d1": "withdrawClientTokens()", +"79806dd0": "yourERABalance(address)", "79808552": "cancel_lottery()", "7980a1ab": "increasePaymentsBalance(address,address,uint256)", +"798104d8": "getUserCurrentAPY(address,address)", "7981e7f1": "generateTokensByList(address[],uint256[])", "7981fd67": "loikikd()", +"798281cd": "cap_nhat_quang_duong_Cau_2(uint256,uint256)", "7982abf0": "testTransferGas()", +"7982e9e9": "claimAndLiquidateSNXrewards()", +"7982ff42": "registerSignature(uint256,bytes32,bytes)", "7983eb31": "distributeEvenly(uint256)", "798405fc": "Hold(address,address,uint256,uint256)", "79843715": "crowdSaleMax()", "79848daa": "setReleaseManager(address)", "7984932e": "releaseNow(uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", +"7984dfe6": "metaAcceptFulfillment(bytes,uint256,uint256,uint256,uint256[],uint256)", "79853c7e": "payFromCampaign(bytes32,address,address)", +"798591bb": "getOrderFilled(bytes32)", "79859a78": "setMaxAgonCount(uint256)", "7985b860": "AboutBill(uint256)", +"7985c5e4": "setAddresses(address,address,address,address,address,address,address,address,address,address,address)", +"7985c717": "kittySalesContractAddress()", "7985ee8f": "deleteRewards()", +"7985fd51": "withdrawalThreshold()", +"798678bb": "getTotalLending(address)", +"7986ac60": "gg64(int64)", "7986c724": "BOUNTY_TOKENS_LIMIT()", "7986cbfc": "getGroupbyIndex(uint256)", +"7986f3a9": "eta(address,uint256)", "798764ec": "ShowCoinToken()", "79878757": "passTokensToTheTeam()", +"7987d010": "emitEventsLocalAndDownstream()", "79881b5a": "setPresaleStartsAt(uint256)", "79885b91": "LIB()", "79891359": "getOnePlayCoin()", +"798915f0": "getReferreds2(address,uint256)", "798929da": "distributeCoins(address,uint256,uint256,uint256)", "798974dd": "getNumProposals()", "798a970b": "setUnitCoinProductionIncreases(address,address,uint256,uint256,bool)", "798b18fd": "currentRateM()", "798b3ecf": "processCooldown(uint16,uint256)", +"798b5c8a": "StakingRewards()", "798b7a71": "callOnce()", +"798bac8d": "setBuyPrice(address,uint256,uint256)", "798bede1": "advisorSupply()", "798c1f2a": "do_bet(uint256)", "798c6e0f": "clearStages()", +"798c7d53": "getHnonce_deposit(address)", "798ce54f": "payoutPartial(uint256)", +"798cf535": "re_betting(bytes32,uint256)", "798d05fa": "getCountTeams()", +"798d7db3": "updateCycle(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint8,uint256)", +"798e3e2f": "maxGenesisContributionTokens()", +"798e4465": "oracleUpdateAdminPrivileges(bytes32,uint256,address,bool)", +"798e603b": "tokenReserves(address)", "798ec637": "transferEtherToSender(uint256)", +"798eeba4": "updateAccessWhitelist(address)", +"798f3908": "getShareholderBalance(address,uint256)", "798f3e85": "PublicTokenReleased(uint256)", +"798f60f2": "updateVotingDelayInBlocks(uint256)", +"798f6d9e": "approve_225(address,uint256)", "798f9790": "getResoDetails()", "798fd178": "getFrom()", +"798fffb9": "getServicePoolsRewards(uint256)", +"79900169": "toTreasury()", "79902299": "recalculateTotalFees()", +"799048fa": "removeSupportNft(address)", "79905753": "reclaimFundMultiple(address[])", +"7990c974": "terpene(uint256)", +"7990e32c": "serviceMinMineDays()", +"7990e8fa": "isMarketEnabledByDmmTokenId(uint256)", +"7990ea4f": "unlockPrivateSeedTokens()", +"79915f48": "addProjects(address,string)", "7991c63a": "MetaChanged(uint256,bytes32,bytes32)", +"79922f54": "highestBidEntryIdx(uint256)", "7992e39f": "TierAmount()", +"799320bb": "solved()", +"799351ba": "sendETHSupported(address)", +"79937abf": "PayReferrerEvent(address,address,address,uint256)", "7993e5c2": "Devcon2TokenForTesting()", +"7993e699": "setAccountMergingDuration(uint256)", +"7994d453": "lifetime(uint256)", "7994f55b": "setEndpointParams(bytes32,int256,bytes32[],int256)", "79953633": "ownersProductAdded(address,uint256,address)", "79955b4c": "richardAddr()", "7995b15b": "nowInSeconds()", "7995ba90": "withdrawExcessToken(address,address)", +"7995bdf1": "getGovernanceStage()", "7995ed8c": "ClaimedWei(uint256)", "79968b77": "sellLicense()", +"7996a271": "UnsupportedAssetProxyError(bytes4)", "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[])", +"7998307f": "view_bool()", "79984882": "getProxyExecID(address)", "79987504": "ECN(uint256,string,string)", "7998a1c4": "identifier()", +"7998f620": "FINISH_LOCK_AT_BLOCK()", "79991997": "enter(bytes32,bytes8,uint16)", "799957d2": "TTC()", +"7999a5cf": "getPrefer(address)", "7999c7ca": "myUsername()", "799a5359": "transferToken()", "799ae223": "flipCoin()", "799b3864": "getVersionLength()", "799b7bb8": "PRE_ICO_ADDR()", "799c0468": "withdrawMarketingAndCommunityOutreach()", +"799c1053": "operatorAmount()", "799c7b69": "_resetGame()", "799c8ef2": "callScheduler()", "799cd333": "sign(bytes32)", +"799d4872": "doner()", +"799d7f94": "userCommittedStakingPeriod(address,address)", "799d916b": "getObjectValueByKey(string,string)", +"799d9a18": "setPreHash()", "799dcf7e": "staticArrayTests()", +"799de1f0": "OHMToken()", +"799df4fd": "PriceStop()", +"799e5894": "setPercent(uint8,uint8)", +"799eda13": "updateAmountB(uint256)", +"799eea01": "buyToken(uint256,address,uint256,bool)", "799efef0": "setLockedWalletAmount(address,uint256,bool)", "799f0c5d": "locked_funds_for_revealed_spins()", +"799f1898": "getBalance3()", "799f4079": "unholdSubscriptionOffer(uint256)", "799f7043": "recordBet(bool,uint256)", +"799fb83d": "ocha()", +"79a04876": "querySellBase(address,uint256)", +"79a0a896": "gradeTwoCountLimit()", "79a0e5be": "changeMessage(uint16,string)", +"79a0f079": "component()", +"79a135e3": "tokenHEZ()", +"79a17307": "getEstimatedETH(address,uint256)", "79a18b3a": "isRoundThreeSalePeriod(uint256)", "79a1c1f6": "proposalStatus(bytes32)", "79a1ed16": "WithdrawalQuick(address,uint256,uint256)", +"79a2032e": "pendingFund(uint256,address)", "79a2bbec": "_addResources(address[],bytes4[])", "79a2bfa5": "PRE_SALE_MIN_BUY()", "79a34619": "startTimeMain()", "79a3510d": "thisVoterExists()", "79a37bd0": "tellTime()", +"79a3821c": "unlockedToken()", +"79a39f68": "lastJadeSaveTime(address)", +"79a3ce39": "PrincipalDecreased(uint256,uint256,uint256,uint256)", "79a410a7": "bonusesOf(address)", "79a411ff": "ScareERC20Token()", +"79a4ab51": "setWalkerInformation(bytes32,bytes)", "79a4b4bd": "sellPrice(uint8)", +"79a4cf1d": "lockDurationTime(uint256)", "79a4ee93": "testDeregisterCustomer()", +"79a509d0": "is_valid_time_p3()", +"79a58634": "_usdtBuyOn()", +"79a61492": "pendingLand(uint256,address)", +"79a662fb": "migrateBalancesFromSnapshot(address[],uint256)", "79a6877f": "initializeToken(string,uint256,uint256)", +"79a69823": "playersTokenCount(address,uint256,uint256)", +"79a6ae67": "pendingAlphaPools(uint256,address)", +"79a6dbf9": "claimInsteadOfUser(uint256,address,uint256,uint256)", +"79a74d40": "holdMulti(address[],uint256,uint256)", "79a7cfee": "setAddress(bytes32,bytes32,address)", "79a7de4f": "buildId(address,uint256,bool)", +"79a81b0f": "gameTokens(address,uint256)", +"79a83f5a": "stakeTokens(address,uint256)", "79a8416e": "checkPayment()", "79a84750": "createTokensTo(address,uint256)", "79a85e6c": "getProductInfo(uint256)", "79a87b19": "migrationDestination()", "79a88683": "startCrowdsalePhase3Date()", +"79a891b2": "isSettlable(uint256)", "79a8945c": "isDeveloper()", "79a89b06": "releaseExpiredEscrow(address,address)", "79a8ba40": "createRequest(uint256,address,uint256,string)", @@ -69743,55 +127518,100 @@ "79aa024e": "setAirdropAdmin(address,bool)", "79aa668d": "setEventsContract(address)", "79ab295f": "SALE1_CAP()", +"79ab67c8": "hashStakingIntent(bytes32,address,uint256,address,uint256,uint256,uint256)", "79abb2f5": "play_paper()", +"79ac2691": "checkNNAmount()", +"79ac67a4": "accumulatedIncomes(address)", "79aca4e0": "acceptSmartTokenOwnership()", +"79ade32f": "getStakerStakedContractIndex(address,uint256)", "79ae0c0a": "updatePrice(bytes32,uint32,uint64,uint32)", "79ae1c36": "setStopDefrost()", +"79ae25f4": "updatePriceWindows(bytes32[])", "79ae77cf": "OEM_Wallet()", "79ae9c5e": "clearLC()", +"79aecee0": "verifiersShard(address)", "79af55e4": "increaseLockTime(uint256)", "79af6547": "addLockStep(uint8,uint256)", "79af8380": "addCrowdsaleContract(address)", "79b0797c": "AmIPlayer1()", +"79b089b7": "voteSuceed(uint256,uint256)", +"79b0e4e5": "addPool(address,address,address,address,uint256,uint256,uint256,uint256)", +"79b17433": "setChainMediator(uint256,address)", +"79b178df": "viewLatestPrice(string)", +"79b18334": "getComponents(address)", +"79b18cd1": "termLength()", +"79b22c0f": "getUserCreateAuctionCount(address,address)", +"79b2402c": "LastPostId()", "79b2614d": "currentMintNonce()", +"79b2a714": "getExternalValue()", +"79b2c31d": "approve_156(address,uint256)", +"79b36943": "UNISWAP_ROUTER_ADDRESS()", "79b37a86": "usdRate()", +"79b3b5fe": "_honestyCredit(address)", +"79b44241": "getAgentAdress(uint256)", "79b45b18": "removeEmployeesWithExpiredSignaturesAndReturnFadeout()", "79b466b0": "TOTAL_TEAMS()", +"79b47e18": "retainedTransfer(address,uint256)", "79b4a2c7": "transferMultiAddress(address[],uint256[])", +"79b4fd55": "PuppyIndexToOwner(uint256)", +"79b53c76": "sale(address,address)", "79b5b1d1": "EvaCurrency(string,string)", +"79b5f040": "latestSurplusTransferTime()", +"79b64713": "getEnsReverseRegistrar()", +"79b6fead": "walletDeposits(address)", +"79b7774f": "nuked()", "79b7b30b": "endTrading(bool,bool)", "79b80455": "onTimeLock()", +"79b85480": "jadeProductionSnapshots(address,uint256)", +"79b86169": "stopinvest()", +"79b91d69": "unstake(uint256,uint256,bool)", +"79b95105": "getRemainIdoAmount(address,address)", +"79b98e55": "discountedItems(uint256)", "79b9a060": "changePayout(uint256)", "79ba5097": "acceptOwnership()", "79ba50b1": "LAME()", "79ba7b61": "ServiceCoin()", "79baa8a9": "BasicIncome_CoFund()", +"79babd2c": "ape()", +"79baca15": "getStimulusUSD()", "79bae8a1": "test_failed_payment_throwing_token()", +"79bbce71": "claimRegistry(bytes32)", "79bc2040": "canbuynum()", "79bc46b3": "SELL_HARD_LIMIT()", "79bcabf4": "Authority()", "79bcae2a": "createFuel(uint256,string,uint256,uint256,uint256)", "79bd04f2": "_bidLaterShip(uint256,uint256,address,address)", +"79bd1eac": "liquidate(uint256,address,uint256)", "79bd42cf": "END_DURATION_BETTING_BLOCK()", "79be02af": "Read(address)", "79bed048": "turnOffCanUpdateAmountToTakeAsRake()", "79bf8df3": "mModeratorKeys(uint256)", "79bfaaeb": "visaLength(address,uint256)", +"79c08e41": "bonusLastBlock()", "79c0909e": "getRandomFromBlockHash(uint256,uint256)", "79c0b9fb": "sanityCheck(uint256,uint256,int8,int8,int8)", "79c0d5ae": "tokensInvested()", +"79c0d962": "getUserTotalBonus(address)", +"79c0e474": "teamIssue(address)", "79c0f30e": "advancedThreshold()", +"79c0ffec": "playerUnlockedInfo(address)", "79c12db5": "EventTicket(uint256,uint256)", +"79c1b450": "calculateCrossReserveReturn(uint256,uint32,uint256,uint32,uint256)", "79c20b41": "changeArtName(string,string)", "79c30e49": "openCdp(uint256,uint256,uint256,uint256,address)", "79c310a6": "increasePlayersJadeProduction(address,uint256)", "79c3199d": "preIcoStartDate()", +"79c34e39": "certificateURL()", +"79c362a0": "GetTokenBalance(address,address)", "79c36409": "DifToken(uint256,string,uint8,string)", "79c3dd32": "thirdLevelPrice()", "79c3ddc1": "isPackageOwner(string,address,address)", +"79c3f683": "depositToBank(uint256)", "79c3f694": "_getPVPFeeByLevel(uint256)", "79c4264a": "earlyBirdMinPerPerson()", "79c4264b": "matchCount()", +"79c46aa1": "ClaimEvent(uint256)", +"79c4f412": "_commitPendingAccount(address,address,bytes32)", "79c597ff": "ends()", "79c5ba97": "enterBidForGanToken(uint256)", "79c5c6b6": "MyWill()", @@ -69810,105 +127630,193 @@ "79c74a38": "Fomo5d()", "79c7c806": "proofExists(string)", "79c7f38c": "_freezeAccount(address,bool)", +"79c80e72": "minVotingTime()", "79c84100": "getFreezeHourglass(bytes32,bytes32)", +"79c84328": "makeCoverUsingNXMTokens(uint256[],uint16,bytes4,address,uint8,bytes32,bytes32)", "79c88f20": "datacoin()", +"79c8c62a": "disagreed(uint256)", "79c8fe30": "setMaximumGasPrice(uint256)", +"79c91b37": "ensureConstantValue(uint256,uint256,uint256,uint256,uint32)", +"79c9dfbd": "canStoreRandom()", "79c9e396": "test_oneInvalidEqBytes2()", +"79c9eaca": "approve_891(address,uint256)", "79ca0792": "beneficiaryMultiSigWithdraw(uint256)", +"79ca21a2": "setRealitio(address)", +"79ca5d4c": "requestReclaimToken(address)", +"79ca5d55": "burn(uint256,uint8)", +"79ca7dd7": "addEtherToContract()", "79ca9ad4": "tokensToEth(uint256)", +"79caad86": "gender()", +"79cad619": "filled(address,uint256)", "79caf670": "ethealController()", +"79cb30c1": "ChangeOfferId(uint256,uint256)", "79cb5a2f": "setEtheraffle(address)", "79cb650f": "testAliceFooKill()", "79cb657a": "setRateStalePeriod(uint256)", +"79cb8563": "estimateCreditAccrualTime(address,uint256,uint256)", +"79cbc5fa": "_registry()", "79cbfd18": "computeCurrentPriceImpl(uint32,uint64)", "79cc6790": "burnFrom(address,uint256)", "79cc90c4": "repossess()", +"79cca7b7": "minDevTreasuryPercentage()", "79ccd1a1": "BetherBank()", "79cce1c5": "getReleaseHashes(uint256,uint256)", +"79cd242e": "setDefaultFreezePeriod(uint256)", +"79cd29d6": "TokenForTokenPurchase(address,address,uint256,uint256)", "79cd421d": "ERCTestToken()", +"79cda772": "uploadDocument(uint256,string)", +"79cdf99b": "userEnteredFarm(address)", "79ce0515": "removeCP(address,address)", "79ce37e1": "deadline_modify(uint256,uint256)", +"79ce4278": "Val()", +"79ce7b26": "hxyLpFrozenBalances(address)", +"79ce93e7": "getImportInfo(address,address[],address,address)", "79ce9fac": "transfer(bytes32,address)", +"79cec260": "zapStEthOut(uint256,uint256)", "79cef607": "_purchaseTokens(string,address,uint256)", "79cf3a7a": "zeroOut()", +"79cfb19b": "toshiTreasury()", +"79cfb7d0": "MathGetPartial(uint256,uint256,uint256)", "79d007f7": "forceOffsetExtraFeeRate()", +"79d0097d": "minRefAmount(uint256)", "79d00c5d": "EasyCrowdsale()", "79d10a76": "SedPosToken()", "79d116ed": "setWhiteListingAdmin(address)", +"79d12755": "totalLPCreated()", +"79d12ff9": "_hasStateTransitioner(bytes32,bytes32)", "79d1d4fa": "verify(bytes,bytes,bytes,bytes32)", "79d220ae": "setCrowdsaleOpenTimerFor(uint256)", "79d28ac9": "balanceOfCreator(address)", "79d2e48d": "upgradeFinalize()", "79d303ae": "doStart()", +"79d34b68": "mintQianNFT()", "79d3d547": "grantToken(address)", +"79d3e0cc": "getUserProfitsGivenToLevel(address)", "79d42bfe": "CLNRaised(address,address,uint256)", +"79d433a9": "moodChanged(address,string)", +"79d436de": "defaultCarNr()", "79d4fe00": "totalTokensICO3()", "79d60cdf": "LongChain()", +"79d60f04": "getTradeInterval(uint256,uint256)", "79d6348d": "sign(string)", "79d68f79": "COIN_PER_ETHER_BOARD()", +"79d747be": "liquidityPools(uint256)", +"79d756f3": "Get_Number_Of_Rewards_Array()", +"79d7a1da": "swapTokenDecimals()", +"79d7b135": "setHal9kAddress(address,address,address)", +"79d88372": "getPriceInToken(address,address,address,uint256,uint256)", "79d88d87": "forbid(bytes32,bytes32,bytes32)", "79d8cc7b": "setFlights(uint16[],uint16[],uint256[],uint256[])", "79d95c5a": "setMaxCap10X(uint256,string)", +"79d9c744": "to96(uint256)", "79d9e979": "minimumDealAmount()", +"79d9fe0a": "_IPhonesMade(uint256)", "79da06a2": "BlockSwapWrapperGolemNetworkToken()", +"79da2c11": "createEtherSwap(address[],uint256[])", +"79da5cdd": "versionEndUsage(address,address,address,bytes)", +"79da7e4d": "tA()", +"79da7e59": "unsetBlackList(address)", "79da9747": "switchCrowdsale()", "79db228a": "RegisterList(address[],bool)", "79db5f67": "removeRole(address,uint256)", +"79db6346": "minTotalSupply()", "79db671d": "upadateContributorsCount(uint256)", "79db77a3": "removeStaffWhitelist(address[])", +"79db8e23": "dmmTokenIdToDmmTokenAddressMap(uint256)", "79dbdbb9": "CKYAdv(uint256,string,string)", "79dc04c0": "BCTVToken(uint256,string,string)", "79dc10a6": "takeOwnershipFeePercents()", +"79dcbd3d": "createAllocation(address,uint256,uint256)", +"79dcef37": "comm_addr()", "79dd02cb": "PerfectCoinControl()", "79dd822a": "setSignatureRest(bytes,uint256)", +"79ddb0b4": "batchCreateReceiverFromIds(uint256[])", +"79de2985": "getAllowanceOfUser(address)", "79ded380": "setRabbitMother(uint32,uint32)", "79df2a4c": "ReferredInvestorAddition(address,address)", "79df4fa2": "startDeposit()", "79df896d": "ScandinavianEKrona()", +"79df96bd": "CDPID()", "79e05a36": "getUintField2()", +"79e071af": "RATE_SCALE()", +"79e08ca0": "setUniRouterAddrv1(address)", "79e097f0": "addVotePair(address,address)", +"79e0aadc": "tokenCounts(uint256)", "79e0ef1b": "withdrawBalanceAmount(uint256)", "79e0f59a": "setEarlyParicipantsWhitelist(address[],bool[],uint256[],uint256[])", "79e1250d": "setTotalToken(uint256)", +"79e12b09": "retrievemessage()", "79e12f7e": "getBoardByHash(bytes32)", "79e1c9dc": "changeAmountPerEther(uint256)", "79e1fa2e": "convertToEur(uint256)", "79e23483": "addLockValue(address,uint256)", "79e2bbea": "getLifeVal()", "79e35d0b": "poolcoin(uint256,string,string)", +"79e3c266": "subUserIntraDepositAmount(address,uint256)", +"79e433eb": "bitnot(int256)", +"79e44a38": "getTopValue()", "79e468ef": "createLand(address)", +"79e52061": "EndRound(uint256,uint256,uint256,uint256,address[],address[],bool)", "79e54e6e": "AleKoin()", "79e58973": "coinBalanceOf()", "79e58cfd": "transferIcoship(address)", +"79e61537": "buyWithETH(uint256,uint256,bytes)", +"79e6643c": "sellersAccts(uint256)", +"79e66b46": "join(uint256,uint256)", +"79e78150": "maxOperSupply()", +"79e78f24": "updateGenesisEnd(uint256)", "79e79023": "KuaiMintableToken(address,uint256)", +"79e81f39": "withdrawBalance(uint256,address)", +"79e8766a": "withdrawDEUS(uint256,address)", "79e8b8eb": "lastSubTokenCreatorOf(uint256)", +"79e8d773": "kingPerStFarmingBlock()", +"79e9510a": "receiveEth(address,uint256)", +"79ea68f8": "linkUser(address,string,string)", "79eaaf61": "totalTiers()", "79eac7c3": "confirmOccupancy()", "79eb16d4": "calculateShareETH(address,uint256)", "79eb26cc": "RANGE_SCALE()", "79eba0b6": "showPrivateVars()", +"79ebb6c4": "investors(address,uint256)", +"79ebf308": "getNFTPeriodBenefits(uint256,uint256,uint256)", "79ec3864": "getMemberAtAddress(address)", "79ec4f19": "setStartAndEndTime(uint256,uint256)", +"79ec5d3a": "votesOf(address)", +"79ec94c6": "setGlobalVariables()", "79ed13a7": "availableOptions()", +"79ed2b5b": "setChallengeDeposit(uint256)", "79ed3d69": "setNextCommonTTMTokenId2(uint64)", "79edfa7d": "setMetadataUrl(string,string)", +"79ee1a26": "OnPercentageChanged(string,uint256,uint256,uint256,uint256)", "79ee54f7": "getRewards(address)", +"79eead0d": "_addFive(uint256)", "79eee392": "DEVELOPERS()", +"79eee487": "checkMulDivRoundingUp(uint256,uint256,uint256)", "79ef6858": "addItemToMenu(bytes32,uint256)", "79ef704e": "addLogic(address)", "79efb507": "oldData()", "79f00703": "setEthartArtReward(uint256)", "79f015b2": "getCarProductName(uint32)", +"79f062b9": "checkIfClaimable(address,address)", +"79f0755c": "consumerProtectionFund()", +"79f08771": "committedBalanceOf(address)", "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)", +"79f14dbc": "Collected(address,address,address,uint256)", "79f16ba1": "ShanDianLian()", "79f1987d": "thirdExtendedBonusSalesEnds()", "79f1a6ef": "_noMatchingPairs()", +"79f30d2d": "goose()", +"79f33c33": "createBoxMould(uint128,uint256,uint256[],address[],uint256[],string,string,string,string,string)", +"79f3ac83": "getUniswapV1AmountOut(bool,address,uint256)", "79f3b481": "putTreeOnSale(uint256,uint256)", +"79f3c1c4": "BatchMount(address,uint256,address,uint256[])", +"79f4542e": "addValidPluginInstance(address)", +"79f4ab4a": "get_to_coffer()", "79f57e68": "getAsAddress(bytes32)", "79f59f09": "ParsecTokenERC20()", "79f645ea": "RANDOMIZER_RETRY_COUNT()", @@ -69916,242 +127824,437 @@ "79f68f85": "forwardFunds(bool)", "79f74fd5": "ControllerSet(address)", "79f7a873": "isAtLeast(uint256,uint256,string)", +"79f7a9cc": "reduceAllocation(uint256,address)", "79f7e600": "setApproveOwner(uint8,bool)", +"79f8a7a5": "setBitProRate(uint256)", "79f90d6c": "ownerPauseContract()", +"79f923ce": "DGX_AddressList(string,bool)", +"79f95559": "UserIdentityCreated(address,address)", "79f9578c": "queryBalanceMinter()", "79f96600": "getCurrentFeeWindow()", "79f9b10b": "registerAsExportingAuthority(address)", "79f9cc72": "setGasLimits(uint256,uint256)", +"79f9d6ca": "claimedBonusTokens(address)", "79fb18ac": "transferSmartTokenOwnership(address)", +"79fb5b9b": "setIfTokenMinted(address,bytes32)", "79fc3682": "addressBalances(address)", "79fc4687": "receiveDividends()", +"79fcd8ee": "increaseSupply(address,uint256)", +"79fd0554": "restoreManyUsersExternal(uint256[])", +"79fd18b0": "setUsed()", +"79fd3927": "createPromoCard(address,address,string)", +"79fd79c3": "getLatestPriceUSDC()", "79fd86cc": "airDrop_(address,address,address[],uint256)", "79fd8c24": "PriceUpdate()", +"79fdacfb": "setApiServer(string)", "79fdc915": "_decideMarket(uint256)", +"79fde7ee": "AUGMINT_TOKEN()", "79fdf548": "updateTokenInvestorBalance(address,uint256)", "79fe3b06": "setPercentTokensToSale(uint256)", +"79feab87": "getComptroller()", "79fed7cb": "checkMinContribution()", "79ff69d9": "paymentSettle(uint256)", +"79ffa80a": "receiveYFS()", "79fff7a9": "logReputationTokenMinted(address,address,uint256)", "7a00698f": "_doProposal()", "7a0092b5": "Aunder()", "7a009c22": "increaseBank()", +"7a00c84f": "ParliamentInquest(address,uint256)", "7a00cf46": "isCloseable()", "7a00e2e3": "removeReferrer(address)", "7a013105": "ico_start()", +"7a013689": "TransactionOrderingattack()", +"7a018a1e": "getCurrentRoundId(bytes32)", "7a02a973": "resetStaking()", "7a02dc06": "getInfo(bytes32)", +"7a02dee7": "maxsales()", "7a02eb1d": "Maesawa()", +"7a0308f8": "getRewardTodo(address,uint256)", +"7a039835": "CalculateDistributeProfitsOBELIXFarmer(address)", "7a039beb": "GXX()", +"7a03b624": "MAX_BURN_FEE_BPS()", +"7a03e80f": "safeTransferAVAX(address,uint256)", +"7a040a58": "closeGame(uint256,address[],uint256[])", "7a041e7e": "fundsFromPreSale()", "7a044323": "accumulated()", "7a04581c": "getBetclose()", "7a04855a": "EplusCoinToken()", +"7a04eddb": "startChangePercentExecutor(uint256)", "7a04f9ea": "getPhaseExpiry()", +"7a051247": "enter(uint256,address,uint256,address[],address,uint256)", +"7a058522": "getInviteCode()", "7a060b53": "GOLD_AMOUNT_TPT()", +"7a070cba": "checkRefcode(address,uint256)", "7a07424e": "promotionRatio()", "7a08339d": "setFakeTime(uint256)", +"7a084051": "poolN()", +"7a086f96": "batchRoundWithdraw(address,bytes32,uint256,uint256,uint256)", +"7a091922": "notAllowedToDrain(address)", "7a091f95": "batchPunchIn(address[],uint64[])", "7a09588b": "cashoutEOSBetStakeTokens_ALL()", +"7a095f9c": "crowdsalePurchaseAmountBy(address)", "7a096f53": "getTransfer(address,address)", +"7a099cce": "changeMPONDTokenAddress(address)", +"7a09a65c": "approve_188(address,uint256)", "7a09defe": "totalMonster()", "7a0a2e00": "auctionEndHashing(uint256,uint256)", +"7a0a836c": "openAuctionsContract()", "7a0b0a3f": "MAX_STAGE_1_LIMIT()", "7a0b294c": "buyPresaleTokens()", +"7a0c21ee": "init(address,uint8,uint256,uint256,uint256,uint256,string,string,string,bool,bool)", "7a0c396d": "giveMeNILs()", +"7a0c53b2": "scheduleTransaction(address,bytes32,bytes,uint256)", "7a0ca1e2": "attach(address)", "7a0d819e": "casinoDeposit()", +"7a0d8f8a": "augur()", +"7a0dae29": "Add_Manager(address)", "7a0e03ec": "getUInt8Value(bytes32)", "7a0e09aa": "getConsent(uint256)", "7a0e2d1a": "updateUser(bytes32,bytes,bytes32,bytes32)", "7a0ecfc2": "LogUpdatedInitialTimestamp(uint256)", +"7a0f6020": "seed(address,address,address,uint256,uint256)", +"7a0f8b12": "getActiveTill(address)", "7a0fee37": "MinerRandomNumber(uint256)", "7a10f17b": "PIN_PRICE()", +"7a11229e": "getGSTHolder()", "7a1126f0": "houseWithdraw(uint256)", "7a118fdc": "SHNZ()", "7a11dfb4": "redeemBounty(uint256,uint256,uint8,bytes32,bytes32)", "7a12cabf": "owner_updateRelay(address,bool)", "7a12cdb8": "cybToken()", +"7a12e86a": "lockedFruit()", "7a1395aa": "setDecimals(uint8)", "7a13d14c": "disputeAutomatedReport()", +"7a142f2e": "inv(uint256)", "7a1439d7": "payOffClaim(bytes32,uint256)", "7a14f465": "crosairSoldCount()", "7a152c11": "unpause(uint256,uint256)", "7a153043": "disbursements(address,uint256)", "7a1593d6": "freeze(address,string,uint256,uint256,uint256)", "7a15eb8d": "lottoIndex()", +"7a1673ee": "createOrder(uint8,address,address,uint256,uint256,uint256)", +"7a167a8a": "getNextQueueIndex()", +"7a16af7f": "provideLiquidity(uint256,uint256)", "7a16c6dd": "setsetperiod(uint256)", +"7a16c78f": "setGade(uint256)", "7a16cbe3": "setData_4(uint256)", "7a178741": "getMemberAddr(uint256)", "7a17feff": "setTransferLimit(uint256)", +"7a183e84": "Bid(uint256)", "7a186ebf": "WHITELISTED_PREMIUM_TIME()", +"7a187641": "logBytes29(bytes29)", +"7a189d55": "xdex()", "7a1903f2": "checkBonus(uint256)", +"7a192f5b": "ApplicationInitialized(bytes32,address,address)", +"7a193af9": "fanyongeth()", "7a1a0604": "AuctusTokenSale(uint256,uint256)", +"7a1a63e9": "getCreatorMemberCount()", "7a1a7e7f": "itemCancelMarkets(uint256)", +"7a1aadbd": "supporterCount(uint256)", "7a1ab407": "bountyOwnersTokens()", "7a1ac566": "registerSale(address,address)", +"7a1ac61e": "initialize(address,uint256,uint256)", "7a1aeb3c": "getTokenCount(bool)", +"7a1b0a8b": "puzzleIdOwner(uint8)", +"7a1b0bdd": "writtenOptionsCount()", "7a1b26a8": "TransactionAccepted(uint256)", "7a1b63bc": "buyCMTAgainstEther()", "7a1bba3a": "TestFoo()", "7a1bbb40": "getNegativeArray()", +"7a1bc82d": "SacrificeChosen(address)", "7a1bcae9": "playerDecision()", "7a1bf7f6": "PreIcoClosedManually()", "7a1c0063": "emitExecuted()", +"7a1c20a0": "_tkn_owners(address)", "7a1c39cb": "setIII_R2(uint256)", "7a1c44f8": "DappleAirdrops()", +"7a1c68b4": "getDaiUserBalance()", "7a1cf806": "configureTokenDividend(address,bool,address,bytes)", +"7a1d0cc5": "ItemBought(address,uint256,uint256,uint256,string,uint8)", +"7a1d6514": "TWENTYfOUR_MONTHS_DURATION()", "7a1d66dd": "determinePosition(address,address)", "7a1d8570": "getSendVal()", +"7a1d97c1": "withdrawCommunityOneTokens(address,uint256)", "7a1e16bc": "signEscrow(uint256)", +"7a1ee1c0": "claim(address,uint256,bool)", +"7a1fb720": "getDinviteCount()", +"7a20281e": "setToken0ToEarnedPath(address[])", +"7a203236": "depositToken(address,uint256,uint64)", "7a208990": "Arcus()", "7a20ff15": "getWeiAllowedFromAddress(address)", +"7a21c4ea": "initiateFlashLoan(address,address,address,uint256)", +"7a222e10": "Change(address,address,address,uint256,uint256,uint256,uint256)", "7a223758": "detOwner()", "7a22393b": "setTokenSeller(address)", +"7a2250ad": "mintInflationaryRewardsToPool()", +"7a230791": "trade(uint256,uint256[],uint8,bytes32,bytes32)", "7a233fb3": "redeemPrice()", +"7a24203c": "fill(address,address,uint256,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"7a2475d9": "userPoolBoosts(address,uint256)", +"7a25dabe": "_rebasingPriceUseCurrent()", +"7a260b3f": "poolDetails(uint256)", "7a26924f": "timeToFinishTokensSale()", +"7a26e859": "koino()", "7a2756f2": "getWager(uint256)", "7a276bb6": "getDeveloper(uint256)", +"7a27da79": "_total()", "7a28399b": "approveProvider(address)", "7a28e60f": "EXTRADECOIN(string,string,address)", "7a28f8bc": "accountData()", +"7a2900af": "transferCommission(address,uint8,uint256)", "7a290fe5": "burnRemainToken()", "7a29332d": "buyAllOutcomes(uint256,uint256)", "7a294055": "VoteReceived(string,address,uint256)", "7a2a0456": "swapEtherToToken(address,uint256)", +"7a2a2e7b": "ViewRapiDsaddress()", "7a2a3931": "galleassetTransferFrom(address,address,uint256)", +"7a2a48fb": "setfactoryAddress(address)", "7a2a530d": "getAllDevices()", +"7a2a6526": "exchangeEtherForSynthetix()", +"7a2a7b32": "rewardStakers(uint256,uint256)", +"7a2adfc8": "vyRadsCheck(address,uint256)", "7a2b0587": "isReserve(address)", "7a2b2dd7": "Metaexchange(address,address,address,uint256,uint256,uint256)", "7a2b78e5": "findIndex(uint256,uint256)", "7a2b9116": "checkValidTk(address)", +"7a2bbdbc": "_forLiquidPoolAddress()", +"7a2bbf65": "transferWithoutFee(address,uint256)", "7a2c1b71": "CheckProfit(address)", +"7a2c5957": "POOL_SLPTOKEN()", "7a2c8506": "getUserReward(address,bool)", "7a2cc6d8": "_createPermission(bytes32,address[],bytes4[])", +"7a2e18fd": "setSales(address)", "7a2e1c61": "getSoldCountOfPackage(uint256)", "7a2e41d1": "InitiateCryptoGamers()", +"7a2eb058": "pu()", "7a2ecfdb": "setMostSent(uint256)", +"7a2fb06d": "MLN_TOKEN()", +"7a302e66": "Filled(bytes32)", "7a309005": "devSENSDestination()", "7a30ebed": "holyFoundersFundDeposit()", +"7a30ef5f": "swapOutputETHForYFOX(uint256,uint256,address[],uint256)", "7a3130e3": "migrateFrom(address,uint256)", "7a314ce2": "FUND_GATHERING_TIME()", "7a319590": "changeFees(uint256,uint256,uint256)", "7a31ee21": "MinimumFundingGoalChanged(uint256)", +"7a3226ec": "WHITELISTED_ROLE()", +"7a32832c": "accountLocation(address)", +"7a32a174": "nosign()", +"7a32af78": "numberOfVaults()", +"7a32b296": "activateTxLimit()", "7a32c84c": "getDonatee()", +"7a32cf38": "addBeneficiary(uint256,address,uint256)", +"7a33e3b0": "fetch(uint256)", "7a341bc7": "setFounder(address)", +"7a348120": "fullRoom(uint256)", "7a34cedb": "purchaseWithBTC(address,uint256,uint256)", +"7a34e2f0": "alterRepeatBlock(uint256)", "7a350141": "BalanceChanged(address,address,uint256)", +"7a355715": "Claimed(uint256)", +"7a356304": "proposeToRemoveGC(address,address,string)", "7a360ec3": "forwardWei()", +"7a362574": "tokenFromdiffraction(uint256)", "7a3629dc": "setMinimumStakingRequirement(uint256)", "7a362fe1": "ICO_START1()", "7a366d14": "softCap(uint256)", +"7a36dbde": "rewardsExtraToken()", "7a37f56e": "PandorasWallet()", "7a38012e": "handleEarlySaleBuyers(address[],uint256[])", +"7a383ebd": "operatorUnlockTimes()", "7a38417b": "delayOpeningTime(uint256)", +"7a384f0f": "setFeeOnAcoPool(uint256[],address[])", "7a386e88": "setupAmbi2(address)", "7a387bc2": "returnNote(uint256)", +"7a38a106": "masters(address)", "7a38f9eb": "isZero(uint256)", +"7a394ee4": "couponAddress()", "7a396264": "winAmount2()", "7a3979da": "pay_money()", "7a39bb28": "FirstPeriodCapUpdated(uint256,uint256)", +"7a39d74e": "setMaxTrig(uint256)", "7a3a0e84": "fundingGoal()", "7a3aa8ea": "CoXxMoXx()", +"7a3aae43": "getPaymentRequirements(bytes32)", "7a3abce9": "withdrawComB()", +"7a3b0057": "updateProfitTimestamp(uint256)", "7a3b0b5d": "positive_terms_of_Service()", +"7a3b1e86": "hodlers(uint256)", +"7a3c01d7": "getLastDepositDoneDate()", +"7a3c028c": "show_usdt_rate()", "7a3c4c17": "currentPrice(uint256)", "7a3cbbe4": "TIMER_STEP()", +"7a3cc92f": "doomAdmin()", +"7a3ce38d": "thirdPhaseSold()", "7a3d2e5c": "changeArtUrl(string)", +"7a3d386a": "zResolveWager(uint256)", "7a3d4b1a": "createSwap(uint256,address)", +"7a3d77ff": "checkCoderAmount()", +"7a3d8c05": "setAmoutOut(address)", "7a3dae68": "_createKT(string)", "7a3dbc16": "getInitialPrize(uint256)", +"7a3dd288": "bolRate()", "7a3e0013": "setArbitrator0(address)", "7a3e286b": "currentCollectRound()", +"7a3e51d8": "subCollateralBalance(address,uint256)", "7a3eeb57": "setdteamVaultAddr2(address)", +"7a3f449a": "CreateDepositRecordMapping(uint256,uint256,uint256,uint256,address,bool)", "7a3f5781": "setAllowRefunds(bool,uint256)", "7a3fa650": "IONIA()", "7a4058dd": "confirmDealCompletionByPatient(bytes16,bool)", "7a40618d": "emitContractRemoved(address,address)", +"7a40624b": "deployTime()", "7a408454": "burn(bytes32,uint256)", "7a4093b8": "SETUP_DONE()", +"7a412a9c": "approve_144(address,uint256)", +"7a4151d0": "feeHandlerAddress()", +"7a4171db": "lockCollateralAndBorrow(address,address,uint256,uint256,uint256)", +"7a424135": "cardIdToSaleInfo(uint256)", "7a427d98": "forceReturn()", +"7a427ed7": "changerOwner(address)", "7a42a9cd": "checkOwner(bytes32)", +"7a42ee71": "minimumRequiredBalance()", +"7a431b8a": "PLEDGE_TOKEN()", +"7a432893": "burnLP(uint256,uint256)", +"7a4365a8": "BuyCallToOpen(address,uint256,uint256,uint256,uint256)", "7a43cb62": "positionWeightOf(uint256,uint256)", +"7a43da65": "pkEvent(address,address,bytes32,uint256,uint256,uint256,uint256,bool,uint256)", +"7a43e23f": "rebase(uint256,int256)", "7a442a9b": "isClaimable(string)", "7a444072": "getDeveloper()", "7a44d730": "PGM_Coin()", "7a457855": "getNumeroMensajes()", +"7a45e43f": "sellOpenPuttoNewBid(uint256,uint256)", +"7a460be1": "LOCK_TIME_DURATION()", "7a468170": "ethCap()", "7a4690fb": "TOKEN_SALE1_NORMAL()", +"7a46dca3": "getConvertedValue(address,uint256)", +"7a46f67f": "changeStakingMax(uint256[])", +"7a47363b": "chainIdMappingTokenMappeds(address)", "7a476a42": "queryPublishedContractTemplate(uint256)", "7a479160": "getRequestArgs(uint256)", +"7a481c6c": "lockedJuice()", "7a4822d7": "addTransaction(address,uint256,string,bytes)", "7a4843ca": "product3_luckybuyTracker()", "7a48b408": "MCIM()", +"7a48d25d": "g(bool,uint256)", "7a48f5c7": "start_pg_quiz(string,string)", +"7a49b258": "burnPauseRight()", +"7a49b7a0": "createTable(bytes32,bytes32[])", +"7a4a7349": "approve_361(address,uint256)", "7a4aa92f": "provideTeamHolderToken()", +"7a4ac6c4": "rewardEvt(address,uint256,uint256)", +"7a4b6744": "userGuess(address,uint256)", "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)", +"7a4cc36b": "BuyHighGravityTraining()", +"7a4cc622": "getMaxGameAddon()", +"7a4d86a8": "PaymentCollected(uint64)", "7a4e320c": "MINIMAL_PRE_ICO_INVESTMENT()", "7a4e365d": "destroyFreezeFunds(address)", +"7a4e4ecf": "rescue(address,uint256)", +"7a4ecea2": "protocolAddress(uint64)", +"7a4ee555": "getOutstanding()", +"7a4f133e": "depositTokens(uint256,uint256,uint256)", "7a4f2fde": "decreaseSalesBalance(address,address,uint256)", "7a4f7b92": "getInitializedFeeWindow()", "7a4fb678": "Operation(uint8,bytes32[8])", +"7a4fda3d": "totalFee(address)", +"7a4ffd03": "getRequiredComponentUnitsForIssue(address,uint256)", "7a504ceb": "endCrowdsale(uint256)", +"7a5058c3": "removeConnectors(string[])", +"7a508022": "trees(uint256)", "7a50aeb5": "ProofToken(address,address,uint256,string,string)", +"7a51852a": "cSWOPTarget()", "7a518d9f": "epoch_release_count()", "7a51a611": "getOptionIdForPoll(uint256,uint256)", "7a52ad76": "ChangeMainSaleDates(uint256,uint256)", "7a530f03": "createPromoFlower(uint256,address)", "7a5310b9": "confirm2stage()", "7a53bcfc": "batchSend(address[],uint256[])", +"7a53fa52": "systemFeesReclaimed()", "7a5402e9": "getPolicyData(uint256)", "7a543a94": "isIcoFinished()", "7a545b0c": "preIcoSold()", "7a554786": "saveUserWallet(address,address)", "7a55cece": "PlusPay()", "7a55d4bd": "getCurrentBragKing()", +"7a560fd3": "approve_59(address,uint256)", "7a5615c0": "changeTokensPerUSD(uint256)", +"7a5736c5": "batchUnseal(uint256[])", +"7a573a10": "depositAllWithDetail(string,string,string)", +"7a578229": "totalSupplyWrapper()", +"7a580ca6": "turbulenceFeeMinPercentThreshold()", "7a58b058": "read_max_dgx_available_daily()", "7a58ce90": "CryptoLinkNet()", "7a5977be": "MAX_TOKENS_ADVISORS()", "7a5984c4": "burn(uint32)", +"7a59e675": "swapExactEthToToken(uint256,uint256,address,uint256,uint256)", "7a5a35ad": "setUSDEth(uint256)", +"7a5a4da5": "deposit_ETH_beta()", "7a5a59ec": "angelAllocation()", +"7a5ad65d": "firstQ(bytes32)", "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)", +"7a5d2eb1": "submitSignature(address,string,string,string)", "7a5d5345": "signControllerChange(address)", +"7a5d922c": "everyDay(address)", +"7a5d9c29": "valueIOU()", "7a5db3f3": "renounceInvestor()", "7a5dbc21": "ipow(int256,int216)", "7a5df22b": "getStakedAddress(address)", +"7a5e3103": "upgradeUser(address,uint256)", +"7a5e6db4": "selfDestroy(address)", "7a5e842a": "nizk_verifyproof(string,string,string,string,string,string,string)", +"7a5ebbbb": "feeRecipient2()", +"7a5f0dc4": "stakeEth()", +"7a5f0ffd": "getLiquidityPoolCount()", "7a5f5021": "closeBets(bytes32,bytes32,uint256,uint256)", "7a5f715c": "SetCityName(bytes32)", "7a5f973b": "INITIAL_SUBSIDY()", +"7a5fc7b1": "blockAmount()", +"7a601bb9": "short_bytes_dyn()", +"7a604619": "totalItemTokens()", +"7a609641": "convertSharesToLoot(uint256)", +"7a610446": "checkPointing()", +"7a617e26": "pTokenMintGuardianPaused(address)", +"7a618185": "lastChallengeValue()", "7a62b77c": "ShowChargeTime(address,uint256)", +"7a62f5c6": "increaseAuthQuota(address,uint256)", "7a631201": "resetEvents()", "7a63626c": "ownerIndexToERC20Balance(address,address)", "7a63c290": "mintCapInTokens()", "7a645975": "InexProject()", "7a6506f6": "dividendsPayedIndex()", +"7a651fc0": "AddFund(uint256)", "7a6543e2": "getRegistered()", "7a654915": "BitcoinTRONIX()", "7a657c53": "checkVotingForSendWeiFromPayment()", "7a6615d4": "NewPAIReceipt(address)", +"7a663db5": "test_addToFeePool_zero()", "7a66e5cf": "paySolutionReward(uint256,uint256)", +"7a66ff0d": "cancel_rent(uint256)", "7a67011f": "setMoneyline(int256,int256)", +"7a675bb6": "createWallet(uint256)", +"7a678ee6": "setRuleEveryTime(address,uint256)", +"7a67b479": "kick()", "7a6838ec": "ownerBank()", +"7a68c23a": "getNumEscrow(address,address,bytes32)", +"7a68d1b7": "DAILY()", "7a690951": "_endBetListing(uint256)", "7a6994dc": "getSpaceByIndex(uint256)", "7a69e225": "settleMissedJackpot(bytes32)", "7a6a00bb": "balanceEthOf(address)", +"7a6a0277": "getCollateralAndPremiumBalances(address,uint256,address[],uint256[],uint256[])", +"7a6a174f": "startSecondPhaseBlock()", "7a6a18cf": "CrowdsaleMintFinished()", +"7a6a3e6e": "swapNoFee(uint256,uint256,address,bytes)", "7a6ad926": "getUint(bytes32,bytes32)", "7a6adab6": "getAdsLength()", "7a6b1c7c": "authAccess()", @@ -70160,114 +128263,208 @@ "7a6b8361": "zeroBytes()", "7a6ba98c": "getHashKey(address,uint256)", "7a6c7783": "_consume(address,uint256)", +"7a6c897a": "test5(uint8,uint8)", "7a6cb1aa": "getReceiverVesting(address,address)", +"7a6cd424": "confirmFor(address)", "7a6ce2e1": "getMsgSender()", +"7a6cfcab": "setVotingAddress(address)", +"7a6d69b4": "_blacklisted(address)", "7a6d6f3d": "gettormow()", "7a6d8030": "BLOCKMALL()", "7a6e1384": "priceForBuyingCostume()", "7a6e2b49": "payService(bytes32,address,address,uint256)", +"7a6e3854": "exportedBurns(uint256)", "7a6e5949": "getwithdrawEthertoAmountValue()", +"7a6e7216": "settlePrice(uint256,uint256)", "7a6e9df7": "getTimestamp(bytes)", "7a6e9e41": "withdrawSellDemand(uint256)", +"7a6eb0d0": "tokensToBeDisbursedOrBurnt()", "7a6ee304": "IAMRefundedForWei(address,uint256)", +"7a6f0383": "costHistory(uint256)", +"7a6f5a64": "accountKeys(address)", +"7a6f9623": "PUB_SELL()", +"7a703d2f": "TotalStakedETH()", "7a706ac7": "setBuyRatio(uint256)", +"7a708e92": "initReserve(address,address,address,address,address)", "7a70abda": "updateAvatar(uint256,uint256)", "7a71055d": "setAvgMinedPerDay(uint256)", "7a713023": "finalizeSettingDeprecation(uint256)", +"7a718d71": "waiveFirstSaleRequirement(uint256[])", "7a71dee0": "onePotWei()", "7a72416f": "security_address()", +"7a725caa": "imageArray(uint256[])", +"7a727a41": "getSnapshotTime(uint256,uint256)", +"7a727fe8": "emaCalculationBlockSpan()", "7a72c30d": "checkMilestoneStateInvestorVotedNoVotingEndedNo()", "7a72c32f": "Paraboloid()", +"7a72d8a9": "addTokens(bytes16,uint256)", +"7a737593": "IcoStarted()", "7a740a68": "communityReservation()", "7a74b672": "clearEndpoint(bytes32,int256)", "7a766210": "XYZA()", "7a766460": "getStake(address)", "7a773293": "setMarketingRates(uint8,uint8,uint8)", +"7a776b51": "stakingRewardWeight(address)", +"7a777d2c": "settings(uint256)", +"7a77aeb6": "initialize(address,address[],uint256,uint256,address,uint256)", +"7a77e837": "lottoAdded(bytes)", "7a783d91": "Leeroy(address)", "7a78cccc": "DAMIToken(address)", "7a78ee2c": "lastBlock_a12Hash_uint256()", "7a791524": "setNextFeePercentage(uint8)", "7a792fa0": "get_reward(uint256)", "7a79940d": "getSharedAccountPw(bytes32,bytes32)", +"7a799b8c": "updateProvider()", +"7a7a8724": "getCdaiCollateralFactor()", +"7a7c83a6": "totalPercent()", "7a7cdfa9": "createT(string,string,string,string,string,string,uint256,uint256)", "7a7d4937": "secondsPerBlock()", +"7a7dcb93": "getBrightIdVerifiers()", "7a7ebd7b": "channels(bytes32)", +"7a7f3453": "accessRights(bytes32)", +"7a7fc63d": "getSubsetErc20List(uint256,uint256)", +"7a802c71": "controllerDisabled()", +"7a8042bd": "withdrawLink(uint256)", "7a805504": "getAuditReportBlockNumber(uint256)", "7a80760e": "ERC20Token()", "7a81f972": "releaseCelebrity(uint256)", "7a824b1d": "cooperativeSettle(uint256,address,address,uint256,address,address,uint256,bytes,bytes)", "7a827634": "_emitContractAdded(address,address)", +"7a827855": "EVENT_ROLE()", +"7a828150": "mintLP(uint256,uint256)", "7a828b28": "terminate(uint256)", "7a837213": "setAllowedAccount(address)", "7a83e89e": "_endBetBlock()", "7a840a52": "PKBCoin()", +"7a844685": "nextDouble(address)", +"7a84c366": "inviters(uint256)", "7a84d13e": "getNumberOfCandidates()", +"7a84f1da": "getTypesById(uint256)", "7a852c7e": "transferTokensWei(address,uint256)", +"7a853226": "SetContractAddresses(address,address,address)", +"7a85644b": "compute(uint256,uint256)", "7a8566ae": "richToken()", +"7a856cb2": "deleteProtect(address)", "7a85c02a": "tokensOfEdition(uint256)", +"7a85c535": "approve_382(address,uint256)", "7a85e031": "finalizeInternal()", +"7a8636dc": "FREE_HERO_COUNT()", +"7a863730": "changeTreasurePercentage(uint256,uint256)", +"7a866938": "erc20s(uint256)", +"7a86983f": "getDeposit(bytes32)", "7a86d3d6": "addWithdrawTransaction(address,uint256,bytes)", "7a872547": "defaultInput()", "7a875ade": "fishPromoHelpers(address)", "7a87f51a": "emergency_eth_withdraw()", "7a888ca9": "startOptionsSelling()", "7a88aabb": "getAddressOfTokenUsedAsReward()", +"7a88c800": "outputToCAKERoute(uint256)", +"7a895f5d": "claimPercentage()", "7a899cdc": "_setPermission(address,address,bytes32,bytes32)", "7a89d33e": "testdynamic_income(uint256,uint256)", "7a8a5cf3": "totalMigratedIn()", "7a8a8720": "firstUnitStartTime()", +"7a8ac7c6": "OROInterest(uint256)", +"7a8aeb42": "hexByte2Uint(bytes1)", "7a8b0114": "setA_ASM(uint256)", "7a8b089b": "developerFundDeposit()", +"7a8b0ba3": "totalTLPBurnt(string)", +"7a8b9b85": "seasonTradable(uint8)", "7a8bd25a": "get_bet_nfo(uint256)", "7a8bd93e": "flipRewardAmount()", +"7a8ca615": "runner()", +"7a8cfa53": "changePermission(address,uint8)", +"7a8d0502": "idToMember(uint32)", +"7a8d7fc3": "distributeResources(address,uint256,uint256,uint8)", +"7a8da971": "getIEOProposal(uint256)", "7a8df1b9": "getAffiliateInfo(address)", "7a8e3d8d": "withdrawEth2Wallet(uint256)", +"7a8e5b1b": "changeFreeMaxMintable(uint256)", "7a8e832f": "MyBalance()", +"7a8e872b": "setBigTransferFeeWalletReceiver(address)", "7a8f7be6": "HAYATO_EXTRACTION_BASE()", "7a8fa666": "addPoweruser(address)", +"7a8faeb8": "protocolTokenHeld()", "7a8fe3b1": "getProductBuyersWithUnconfirmedRequests(uint256)", "7a9036cd": "registerFixedToken(bytes32,uint256,address)", +"7a906090": "__getFeeManager()", "7a906be0": "createAuction(uint256,uint128)", +"7a9083ee": "getCompMappingAddr()", "7a90a7a3": "feeBurnerWrapperContract()", "7a9110d5": "klik()", +"7a91823b": "getEndingTime(uint256)", "7a91d5f9": "dilutePower(uint256,uint256)", "7a91e53d": "isNotSelf(address,address)", +"7a920633": "PlayerPointGain(address,uint256,uint256,uint256)", +"7a921a1a": "validName(string)", "7a926165": "manageAdmins(address,bool)", +"7a9262a2": "withdrawals(address)", "7a927429": "TokenValue(uint256,string,uint256)", +"7a92ce92": "USDRaisedUpdated(uint256)", +"7a92f800": "cliffUnlockTime()", +"7a931f31": "SCBNFTFactory()", +"7a93298c": "expiryTime(uint32)", +"7a934441": "iSuShiMaster()", "7a935644": "I30Token()", +"7a938291": "getTotalAmountsForClosers()", +"7a939075": "setkControl(uint256)", "7a93b917": "Lirux(string,string,uint256,string)", "7a943538": "Victory()", +"7a9506ed": "MIN_DEP()", +"7a953b81": "offerWithdrawCallSecond(uint256,uint256)", "7a954d5d": "investedInPreICO()", +"7a95de21": "SIGNING_DURATION()", +"7a95e29c": "totalmonster()", "7a95e305": "escrowedForAsset(bytes32)", "7a95f174": "CGT()", "7a960154": "numOfPurchasedTokensOnCsBy(address)", +"7a964f5a": "swapTokenForExactToken(uint256,uint256,uint256)", +"7a96b44e": "_nftTemplate(uint256)", +"7a97fc4a": "feeRewardRate()", "7a9839c2": "fun(uint256)", +"7a983e69": "lockAddressDuringITO(address)", +"7a98bd34": "setMiscRewardsCustodian(address)", +"7a993327": "ripcord()", +"7a997ab7": "WHITELIST_ROLE()", "7a99b018": "withdrawClient()", "7a99ba4f": "investETH(address)", "7a99bb0a": "_getTokenAmount(uint256)", +"7a99c2b1": "getVnftInfo(uint256)", "7a9a032d": "addProposal(string,uint256,uint256,string,string)", "7a9b0412": "setChainlinkOracle(address)", +"7a9b2c6c": "withdrawFromStream(uint256,uint256)", "7a9b486d": "deposit(string,string)", +"7a9ba975": "getBusinessman(uint256,uint256,bool,uint256)", +"7a9c8934": "kickGuest(address)", "7a9c960b": "DayDayToken(address)", +"7a9d0758": "_developer()", "7a9d366a": "debug_bool(bool)", "7a9db28a": "_setPriceFactor(uint256)", "7a9df8c0": "sellChickenParkCoin(uint256)", "7a9e19de": "nextOffsetIndex()", "7a9e5e4b": "setAuthority(address)", "7a9ee2dc": "SogetiCoin()", +"7a9eea46": "presetOf(uint256)", +"7a9f959f": "pendingMM(uint256,address)", +"7a9fb2f3": "topwinner1_percentage()", +"7aa01e97": "liqBuysDpt()", "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[])", +"7aa1f0c9": "stakerById(uint256)", "7aa2096a": "setPI_edit_15(string)", +"7aa26fd9": "cookieBalance(address)", "7aa2bcd6": "bonusCompaignOpen()", "7aa306a2": "numOwnerAddress()", "7aa3295b": "trusted(address,address)", +"7aa35538": "PERCENT_WITHDRAW()", "7aa356af": "phaseTwoRate()", "7aa359f8": "changemem(uint256,bytes32)", "7aa3803c": "takeRent(address)", "7aa3976f": "DragonStone()", +"7aa39e0b": "getAllCores()", "7aa3b39b": "_vest(address,uint256)", "7aa3f6cb": "setKyberProxyAddress(address)", "7aa3ff67": "AlterMediatorSettings(address,uint128)", @@ -70275,77 +128472,147 @@ "7aa50c56": "performDifferent(address,address[],uint256[])", "7aa5a1a8": "set_eth_as_seeded()", "7aa63a86": "getTotalElements()", +"7aa66a7c": "doubleReveal(uint256,uint256,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"7aa6d715": "VestingDays(uint256)", +"7aa6e6dc": "unlimited_level_price()", +"7aa6fd65": "secretWithdrawMap(uint256)", +"7aa7f075": "getMineWeightRatio()", +"7aa81d2d": "treasurryAddress()", "7aa86e2f": "fetchProfit()", +"7aa9181b": "chargeServiceFee(address,uint256,uint256)", +"7aa9424c": "giveVault(address,bytes32)", "7aa98fb3": "timeLock(address,uint256,uint256)", +"7aa9a3d5": "setA(uint256,uint256)", "7aa9a7f9": "getNumberThree()", "7aaa3470": "getInterest(address)", "7aaae78c": "preSaleBonus1Amount()", +"7aaaee5a": "UpdateDistanceAndTimeRuned(uint256,uint256,string)", +"7aab75f4": "runTokenUniswapKyber(uint256,address,address)", +"7aabf58a": "buyShares(uint256,uint256,uint256)", +"7aac175c": "publish(bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"7aac32c4": "setAgreggator(address,address,address)", +"7aac54ed": "lostTime()", "7aacd17d": "MyToken(string,string)", +"7aacd6df": "bonus_percents(uint256)", "7aacf03c": "auctionIndex()", +"7aad67ef": "PricePre()", "7aada63b": "maxEarlyStage()", +"7aadef8b": "TIMELOCK()", "7aae42c9": "endIcoPreICO()", +"7aae690a": "setInitReward(uint256)", "7aaeb37c": "SimpleTGEContract()", "7aaf334d": "offFreeze_Bounty(address)", "7aaf58d7": "creatUserPurchase(address,address)", "7aaf87d2": "getallresutl()", +"7aafc142": "claimNewHydroTokens()", +"7ab002e6": "userReinvestCurrentBonus()", "7ab0089e": "YiLiaoLian(uint256,string,string)", "7ab03c25": "reserveTokensProjectAndFounders()", +"7ab07720": "letMeIn()", "7ab0b998": "signRecoveryChange(address)", +"7ab0f31a": "burnCardForUser(uint256,uint256,uint256)", +"7ab11381": "ProductAdded(uint256,address,uint256)", "7ab13461": "decreasePrice(uint256)", "7ab13ba9": "isProgress()", "7ab14aae": "createBattle(address,uint256[],bytes32,uint256)", +"7ab1f709": "Participating(address,uint256)", "7ab21613": "getStopReceive()", +"7ab25927": "setStrategyVBNB(address)", "7ab2af2b": "isRegistrationOpen()", +"7ab31828": "m_swap_supply()", +"7ab34bd0": "betMade(uint256,uint256)", "7ab38e88": "issueTokensPresale(address,uint256)", "7ab42bbd": "grantXPTokens(address,uint256)", +"7ab4339d": "initialize(string,address)", +"7ab44705": "strategyProfitInETH(uint256)", +"7ab449f1": "setUserOptOut(bool)", +"7ab493f8": "brokerMarginGetTrader(address,bytes)", "7ab4e968": "oneEDG()", "7ab528c9": "revokeDelegate(address,string,address)", +"7ab54592": "SetFeelessSender(address,bool)", +"7ab56083": "treasuryPercentage()", "7ab5e1e1": "reservedTokensFunctionality()", "7ab61372": "totalRunePurchased()", +"7ab643a4": "changeSaleStart(uint256)", "7ab672c4": "GrabRedHarvest()", +"7ab70ce0": "getfunds()", +"7ab7140d": "propose(address,address,uint8,uint256,uint256)", "7ab7a9fa": "aurasCompatible(uint64,uint8)", "7ab7ab2e": "AcceptsHalo3D(address)", "7ab7d55b": "calculateHash(uint256,uint256,uint256,bool,bytes32)", "7ab7e492": "RANGESTART_2()", +"7ab7ea5a": "addAllocation(address,uint256,uint256)", "7ab7fa9f": "UBEX()", +"7ab7fd36": "setStakingOwner()", "7ab91b3a": "hash(uint64[8])", "7ab96fda": "testBalanceCanbeWithdrawn()", "7aba2249": "StoppableMock()", "7aba4d23": "delToken()", "7aba6f37": "setLock()", +"7aba6fd6": "retrieveBackup(string)", "7aba86d2": "bonusMax()", "7abaf552": "nexium()", "7abb03bc": "noticeWinner(uint8)", +"7abb3d1b": "houses(address)", +"7abb8efb": "dev_address()", +"7abba690": "getNftTokenMap(uint256)", +"7abbe89a": "ExchangeRateChanged(string,uint256)", "7abbe9c0": "DEFAULT_GAME_COST()", "7abc06aa": "tokensPerCents_gte50kUsd()", +"7abc3daf": "performSwapForToken(uint256,address)", +"7abc4902": "setFundRescue(address)", "7abcc5bc": "bidInfo(string)", "7abccac9": "getTokenMetaData(address)", +"7abceffd": "addPool(uint256,address,bool)", +"7abd344d": "roseToken()", +"7abda783": "crowdfundingStatus(uint256,address)", "7abdf949": "getUpgradePrice(uint256)", "7abe24d4": "Firechain(uint256,string,string)", "7abeb6a0": "createMarket(address,address,uint24)", "7abec356": "Deposit(address,uint256,int256)", +"7abf5afe": "NFTSupply()", "7abf75fd": "CFNDCrowdsale()", +"7abf9654": "intervalDay()", +"7abfc928": "Vote(address,bytes32,uint256)", "7ac02331": "ethMultisigWallet()", "7ac07dcc": "isCaller(address)", "7ac1cb30": "setbili(uint256,uint256)", "7ac26aeb": "getTag(string,uint256)", +"7ac2ff7b": "permit(address,uint256,uint256,uint8,bytes32,bytes32)", +"7ac335e5": "dropERC20(address,uint256)", "7ac37d58": "ownerTransferEther(address,uint256)", +"7ac38c0b": "mintSgaForSgnHolders(uint256)", "7ac3c02f": "getSigner()", "7ac40b10": "thedate()", +"7ac43c31": "set__SaleStart()", +"7ac44bf8": "updateNFTWithSpecificBeneficiaries(address,uint256[],address[])", +"7ac4657c": "updatePoolUsdt(uint256,uint256,uint256)", "7ac4b05e": "returnMyMoney(uint256)", "7ac4ed64": "getAddress(address,bytes32)", +"7ac5011f": "emergencyRedeem(uint256,address)", +"7ac53a2f": "h(uint256,uint256,uint256)", "7ac59d43": "getSellerSignature(string)", "7ac5bb54": "getFlight(uint16,uint16)", "7ac5d8a9": "RoundNumber()", +"7ac5f054": "borrowerFraDebt()", +"7ac5f7c8": "removeDIDProvider(bytes32,address)", "7ac6e6a8": "objectHelmet()", +"7ac71326": "mock_throwIfNotRemoved(address)", +"7ac787fc": "validateStateOngoing(uint256)", "7ac7ef85": "Msg()", "7ac81da5": "useProps(uint256[],uint16[],uint16[])", +"7ac87129": "yourMemos(address,uint256)", "7ac8dc26": "subFundPrecent()", "7ac91cc2": "testFailOwnedAuth()", "7ac94409": "sixthExtendedBonusSalesEnds()", +"7ac96a62": "winningRoundParameter(uint256)", +"7ac97958": "groups(bytes,address)", "7ac9f013": "removeVal(address,bytes32,address)", +"7aca76eb": "freezeReserve(address)", "7aca84a1": "createVaultAccess(uint256)", "7aca97b5": "changeDeadline(uint256)", +"7acaa430": "addVoter(address,string,string,uint256,string)", +"7acab857": "launchReward(address)", "7acb3e67": "EthTraderDAO(address,bytes32,address,address,address)", "7acb4b0f": "isGroupInPolicy(bytes32,bytes32)", "7acb7757": "stake(uint256,address)", @@ -70353,6 +128620,8 @@ "7acc0b20": "products(uint256)", "7acc6f74": "addSingleAddressToWhitelist(address)", "7acc8678": "transferAdminQuickly(address)", +"7acc875c": "isBootStrapped()", +"7accb724": "changeOverruleWindow(uint64)", "7acd0412": "newInvest(address,uint256,uint256)", "7ace341b": "getCurrentOwner(uint256)", "7ace41f2": "CoinvestToken(uint256)", @@ -70360,44 +128629,98 @@ "7acee816": "claimIFactor2(bytes32,bytes32)", "7acf16c3": "findLowestBenefactor()", "7acf4892": "isNotPaused()", +"7acf8fda": "referringETH(uint256)", "7ad00589": "getAffiliateSenderPosCode(uint256)", +"7ad00bc0": "paymentSuccessful(address,bytes32)", "7ad06be3": "recycleAppearance(uint128[5],uint256)", "7ad0bf86": "exchangeRegulatorWallet()", +"7ad0fd49": "addLiquidityUnderlying(address,address,address[],uint256[],uint256)", +"7ad121bc": "DABPerBlock()", "7ad1428d": "m_record(string)", "7ad157b9": "buy(uint256,address,bool)", +"7ad1c82b": "icoPercentBonus()", +"7ad1f61b": "toggleCollateralPrice(uint256)", +"7ad20cac": "_calculatePenalty(uint256)", +"7ad22632": "getLatestTimestamp(bytes32)", "7ad226dc": "refund(uint256,address)", +"7ad23b7f": "initialize(uint256,address,address,address,address,address,string,address,address)", +"7ad267b6": "onDisputableActionAllowed(uint256)", "7ad2856f": "info(string,uint8)", "7ad28c51": "changeTimeLock(uint256)", +"7ad29f40": "isCollateralized(bytes32,address)", "7ad2a0ce": "doAirDrop(address[],address,uint256,uint256)", +"7ad2b478": "wmulRound(uint256,uint256)", +"7ad2ec85": "getCompleted(address,uint256,address,uint256)", +"7ad31b36": "dsaOracle()", +"7ad37869": "totalPurchases(address)", "7ad3c119": "ContractInfo()", +"7ad3c6e7": "getMaxLevel(address,uint16)", +"7ad3d0ce": "CancelSellOrder(address,uint256,uint256)", "7ad3def2": "updateToken(address)", +"7ad3e174": "OnSetSellingToken(address,address,uint256,uint256,uint256,bool)", "7ad4b0a4": "setAttribute(address,bytes32,bytes,uint256)", +"7ad5177e": "hatchingEggs(address)", "7ad53eae": "sani()", +"7ad5994b": "plan_completed_p3()", "7ad59e20": "end_Dec_21_2017()", "7ad5a045": "_ReparameterizationProposal(address,string,uint256,bytes32)", +"7ad5be88": "issueTokens(uint256,address)", +"7ad5c38b": "auctioned_token()", +"7ad669e9": "getStateByProposalId(uint256)", +"7ad71f72": "wallets(uint256)", "7ad77fd9": "firstWeek()", +"7ad7bb32": "getEncodedArg(address)", "7ad7e846": "robocoinToken()", +"7ad8359f": "toggleCanTransfer(bool)", "7ad8800f": "ShowPrice(string)", +"7ad88799": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,bytes32)", +"7ad8a376": "setperfomFee(uint256,uint256)", +"7ad8e345": "withdraw11()", +"7ad8f3bb": "getIsOpenRansom()", +"7ad8fdc1": "listOnUniswap()", +"7ad8fe58": "actToWei(uint256)", +"7ad943d9": "unsoldOfStage()", +"7ad9615c": "init_floor()", "7ad9642f": "changeMiniumBet(uint256)", "7ad979a3": "setupFund(string,address,uint256,uint256,address,address,address,address[],address[],uint8,bytes32,bytes32)", +"7ad9bac9": "addTrader(address,address,bool,bool)", +"7ada0dd9": "encodedBulkTransfer(uint160,uint256[])", +"7ada3530": "showTimeStamp(uint256)", +"7ada5e23": "NewTouramentCreateSuccess(uint256)", +"7ada7405": "CalculatedProfit(address)", "7adaa3f8": "right39(uint256)", +"7adaa504": "updateMembers(address[],uint256)", "7adac0e6": "stopTransfers()", +"7adae544": "RefundAdvertiser(address,uint256)", "7adb7ced": "ekkoBlock(uint256,string,uint8,string)", "7adbf973": "setOracle(address)", "7adc22d8": "bujankkoin()", +"7adc55d2": "autoFarm()", +"7adcb472": "OwnerAdded(address,string)", "7add0106": "initBronze()", +"7add89fb": "DISCOUNT_RATE_BASE()", "7addc766": "ADDR_MAYA_MARKETING()", +"7adde413": "extractTokenFee(address,uint256)", +"7adde4ef": "PopBonusCode()", +"7addea1d": "requireFunction(uint256,uint256)", "7ade8d6a": "Totti(string,string,uint256,uint256)", +"7adea6bf": "emergenceWithdrawETH(uint256,uint256,address)", "7adec1c9": "DepositAcceptedEvent(address,uint256)", "7adee0e3": "setJoinDelta(uint256)", "7adfec71": "allTasksCount()", "7adff2cb": "auth(uint8,bytes32,bytes32)", "7ae046d5": "joinGame(uint256,address,string)", +"7ae05237": "swapExactAmountInRefer(address,uint256,address,uint256,uint256,address)", +"7ae06e58": "addLiquidity(address,address,uint256,uint256,uint256,uint256,uint256)", +"7ae0a3d5": "makerManager()", "7ae0c915": "SmartBondsSale()", "7ae11443": "getCurrentStakingPeriod()", "7ae145cb": "Badge(uint256,string,uint8,string)", "7ae15a19": "createKingdom(string,uint256,uint256,uint256,uint256)", +"7ae19491": "UserBattleValueUpdated(address,uint256,bool)", "7ae1cfca": "getBool(bytes32)", +"7ae244a7": "tokenDrop(address,address[],uint256[])", +"7ae25eaf": "ChangeVestingAgent(address,address)", "7ae26546": "setApprovedContractAddress(address,bool)", "7ae26773": "revokeAllowance(address,address)", "7ae2a331": "goldenTicketFound(address)", @@ -70405,57 +128728,107 @@ "7ae2b5c7": "min(uint256,uint256)", "7ae316d0": "getTotalFee()", "7ae38a95": "isDestructionStarted()", +"7ae46f04": "cGOV()", "7ae488c3": "priceOfPlayer(uint256)", +"7ae496e6": "defianceDeployer()", "7ae4bff8": "changeStage(uint256)", "7ae506ac": "minimumPurchaseValue()", +"7ae528b7": "updateFarmPoolInfo(uint256,uint256,uint256)", +"7ae5452c": "afterWithdraw(address,address,uint256,uint256,uint256)", "7ae5dfe5": "TTC(uint256,string,uint8,string)", +"7ae66aa6": "DipTgeStarted(uint256)", "7ae68ada": "getReferralCode()", "7ae6b763": "updatePartner1_will(string)", "7ae7024c": "_realBalanceOnToken(address)", "7ae74432": "PhilToken()", +"7ae75e50": "engine1activeUserID()", "7ae77ecf": "onlyBouncerCreateContract(bytes)", "7ae79345": "ZeroChain()", "7ae79e86": "crowdfundEndsAt()", "7ae81801": "userUpgradeElement(uint256,uint256,uint256)", +"7ae84c7e": "balanceOf3crv()", "7ae8b321": "withdrawGNT(uint256)", +"7ae8b55e": "kingcasino()", "7ae8c854": "getMaturity(bytes32)", +"7ae97511": "greaterThanUintFailTest()", +"7ae9a935": "reserveCurrencyAddressForApprovedBalance(address)", +"7ae9aabe": "Get_address_minor()", "7ae9c430": "getMinFunds()", "7ae9c856": "getassignTokensperType(uint8)", "7aeaa864": "storePhoto(string)", "7aeabb39": "lastPaymentDate()", "7aeb0763": "habichnet()", +"7aeb55cf": "mul(bytes16,bytes16)", +"7aeb642a": "authorizedHubs(address,address)", "7aeb9500": "getAutoInvestStatus(address)", +"7aebd2a8": "progress(bytes32)", "7aec05b6": "TemroyToken()", +"7aec0a92": "ovmEXTCODEHASH()", "7aec2277": "ValueCyberToken()", +"7aec3fb7": "LogTokensGifted(address,uint256,address)", +"7aec6b0a": "extractCollateral(uint256)", +"7aec9709": "premineAmount()", +"7aecd682": "widthdraw1()", "7aece878": "receiveObject(uint256,address)", +"7aecf6c7": "canExecuteOrder(address,address,uint256,uint256,address,address)", +"7aed1214": "_getDORequestsCount()", +"7aedc86b": "AUTHORIZE_SPENDER_TYPEHASH()", +"7aeddd1b": "RemovePrize(uint256)", +"7aedf3e0": "removeAttributeType(uint256)", +"7aee4abe": "updatePermission(address)", +"7aef159e": "setTicketTransferFee(uint64)", "7aef1cdc": "airDropDestinations(address)", "7aef1d4d": "setMinEther(uint256)", "7aef2226": "MIKETANGOBRAVO18Crowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7aef5b73": "burnLockedTokens(address,bytes32,uint256)", +"7aef6715": "setPoolManager(address)", "7aef951c": "bid(string)", "7aefec13": "followTraderPreSignedHashing(address,address,bytes32,uint256,address,uint256)", +"7af023a9": "grantVestingTokens(address,uint256,uint256,uint32,uint32,uint32,uint32,bool)", "7af05516": "claimRewardTillRound(uint64)", "7af0ed7e": "NewStatic()", "7af1337b": "updateCrystal(address)", +"7af1e64a": "DailyResetComplete()", "7af20a0a": "LITECORE()", +"7af284d5": "amountMinted()", +"7af2873e": "setAcreditationDate(address,uint256)", "7af2a28e": "createContractElement(string,uint256)", +"7af2b8a0": "REDUCE_BENEFICIARY_PCT_ROLE()", "7af30442": "testToggleBitFailIndexOOB()", "7af327a0": "deposito()", "7af3670c": "NewToken()", +"7af3dfd0": "LogCfdForceRefunded(uint128,address,uint128,address,uint128)", +"7af42ed8": "pEther()", +"7af45ab9": "EthToOwner(address,uint256)", +"7af4e785": "epochBdoPerBlock(uint256)", "7af52ade": "collectEntryFee()", +"7af53532": "ACL()", +"7af548c1": "rebase(uint256,uint256,bool)", +"7af55a2f": "convertEthtoOne(address,uint256,uint256,address)", "7af5878e": "safeSend(address,address)", "7af5dc37": "safeSub(int256,int256)", +"7af635a6": "CONFIGURATOR_REVISION()", +"7af6e74c": "tradersFeesDeservedInEth(address,address)", +"7af78fab": "RTOKEN_DECIMALS()", "7af85411": "DisableReturnFunds()", +"7af87d33": "RotoRewarded(address,address,uint256)", "7af8b87d": "verificationRate()", "7af8c4f2": "changeTokenSaleAddress(address)", +"7af90104": "PWDR_TO_DISTRIBUTE()", "7af91032": "getPoolDoneCount()", "7af915af": "setResourcesBanker(address)", "7afa0c66": "lockedMonsterStatsCount()", "7afa1eed": "generator()", "7afa8388": "transferFromWithReferenceCallGas()", +"7afb0065": "getEstimatedDAIforBAS(uint256)", +"7afb20af": "setCodes()", +"7afb2dfc": "add_shareholders(uint64,address[],uint256[])", "7afbe4f1": "Add(uint256,uint256)", "7afc84df": "NKHOIToken()", "7afcb524": "foundersBalance()", "7afd4762": "auctionPriceLimit()", +"7afd8178": "setZeroFee(address)", +"7afdb146": "safeBatchTransferChild(uint256,address,address,uint256[],bytes)", "7afde96b": "isInPreSale()", "7afea44f": "kycManager()", "7aff5061": "penalizeNode()", @@ -70464,181 +128837,365 @@ "7b012ff6": "IcoCap()", "7b015ff7": "crowd_start_date()", "7b019f89": "squareRoot(uint256)", +"7b01fd4f": "eurs_pool()", +"7b022e74": "oracleCallback(bool)", "7b02347d": "distributeRef(uint256,uint256)", +"7b02665d": "totalWithdrawableCORE(address)", "7b02b2c9": "sendMsg(address,string)", "7b02b6de": "initialChargeFee(uint256)", +"7b02cd5a": "minimumDaysLockup()", "7b02f6e1": "_vote(address,address,uint256)", "7b0383b2": "initializeDispute(uint256)", +"7b038908": "issueAmount1()", "7b039576": "setCreditStatus(bool)", "7b039bb6": "createVariation(uint256,uint256)", "7b03e5f0": "_getUint(address,bytes32)", +"7b042224": "transferEXNT(address,uint256)", "7b0472f0": "stake(uint256,uint256)", +"7b049d9e": "setBuyer(address,uint256)", "7b04a2d0": "onApprovalReceived(address,uint256,bytes)", "7b04b1f8": "prePaidFee()", "7b053195": "testItems(bytes)", +"7b056e67": "initialTranches()", "7b05d785": "redeemTokens(string)", +"7b06271a": "getVirtualReserves(address)", +"7b0628cf": "idxEnd60()", +"7b066e46": "earnRatePerBlock()", "7b069edb": "createNewGame(string,uint8,uint256[],uint256[])", +"7b06bc7c": "accredited(address)", "7b06e907": "teamAddressOne()", "7b07788e": "removePrecondition(uint256)", +"7b079e16": "addGiveAwayCard(uint256)", +"7b07dc36": "getLaunch()", +"7b082201": "_unstakeBalance(address,uint256)", "7b0862e1": "getLatestSettingId(uint256)", "7b0863de": "beginClosingPeriod()", "7b087636": "testToUint96()", "7b088543": "setDollarForOneEtherRate(uint256)", +"7b08cb89": "getBuyTicketRecordByAddress(address,uint32)", +"7b08cd03": "setCommitRevealAddress(address)", "7b0934ab": "KRTR()", +"7b09435c": "ballotIdToDetails(address,uint256)", "7b0a2340": "issueBook(uint8)", "7b0a3a8d": "maxRecords()", "7b0a47ee": "rewardRate()", "7b0a7bf8": "disableContactMint(address)", "7b0b5b93": "MannaCoin(address,address)", +"7b0bab61": "BFEXParticipate(address,uint256)", "7b0c15ff": "ApolloSeptemStarted()", +"7b0cb2b3": "totalMibWBNB()", +"7b0cb839": "emitEvent()", +"7b0cd38e": "CONNECTxPerBlock(uint256)", +"7b0cf44d": "rates(address,address)", +"7b0dd300": "myReferralTotal()", "7b0de015": "teamTokensAddress()", +"7b0e5c45": "UTILS()", +"7b0f3435": "balanceOf721(address,address)", "7b0f6f18": "executeArbitrage(address,uint256,address,bytes)", "7b0f94ed": "advisoryEthWallet()", +"7b0f952f": "collects(uint32,uint32)", +"7b1001b7": "totalIssuedSynths(bytes32,bool)", "7b103999": "registry()", +"7b1070b2": "wbet()", "7b10a1d9": "changeInviteReward(uint256)", "7b10b293": "requestMembership()", "7b10e717": "received_wei()", +"7b110c51": "changeBasePenalty(uint256,uint256)", "7b1278e9": "setStageLength(uint256)", "7b129c48": "TrueTHB()", "7b12df39": "userProfits()", "7b12e074": "getSiringWithId(uint256)", +"7b134b4c": "_domainSeparatorV4()", "7b144a84": "testFunded(uint256)", "7b146f6f": "contributorPoolAddr()", "7b15013c": "JPPreICO()", +"7b1508f8": "addRewardSupply(uint256)", +"7b151162": "removeaccountToPayNode(address,address)", "7b151be0": "market_WithdrawWei()", +"7b1535d6": "adminContractAddress(address)", +"7b1539f4": "isThisNonStandard()", +"7b154313": "amendmentsCount()", +"7b15879c": "setMinRequiredReports(uint8)", +"7b158f38": "uniAddr()", +"7b15df4f": "convertTo(bytes,uint256)", "7b169f8c": "refBonusOf(address)", +"7b16bde3": "approveTokensWithSignature(string,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "7b16c028": "HumaniqICO(address,address,address)", +"7b16d14f": "sellVegetables(uint256)", "7b16f7a0": "transferAll(uint256,address,address)", "7b1707ee": "sendAliceBlue(address,uint16,uint256,bytes)", "7b1760da": "computeCertHash(address,bytes32)", +"7b1774f2": "assassination()", "7b17e543": "user(uint32,uint32)", +"7b181ad8": "stakeAmountFromSharePool(address)", "7b1837de": "fund(address,uint256)", +"7b18fdc1": "invBalances(address)", +"7b190ec4": "iptPerBlock()", +"7b1924d1": "buyInETH(uint256,uint256)", +"7b195c0a": "thisballance()", +"7b1990f6": "Finalized(uint256,address)", "7b19bbde": "fundValues(uint256)", +"7b1a201a": "addressToLockupAmount(address)", "7b1a4909": "transferETH(address,uint256)", "7b1a547c": "registerAs(address,string,uint256,string,address)", "7b1aa45f": "ownerDeposit()", +"7b1acab3": "contractSaleOverTime()", "7b1ae67a": "OrganicumOrders()", "7b1b0c8a": "isWeekdayInsideTimestamps(uint256,uint256,uint256)", "7b1b1de6": "pricePerToken()", +"7b1ba8b6": "finishToggleTaxExempt()", "7b1bc329": "bountySend(address,uint256)", "7b1bd162": "NatureSeedToken()", +"7b1c0650": "getValidInGameAccount(uint256,address)", "7b1c5368": "fetchVoteMainInfoForVoter(address)", "7b1c6c83": "MangGuoToken(string,string,uint8,uint256)", "7b1c88be": "transferIncome(address,uint256)", +"7b1c9911": "StarCreated(uint256)", "7b1cbb13": "getChannelValue(bytes)", "7b1cdd4f": "withdrawWallet3()", +"7b1e4ada": "didReveal(uint256,address)", +"7b1e58ef": "dimsumPerBlock()", "7b1e855a": "setBountyCoin(address)", "7b1e8871": "_transferBilrew(address,address,uint256)", +"7b1ea316": "getRecordIndexForCycleMembersIndexerByDepositor(address,uint256)", +"7b1eaef1": "top_10()", "7b1f1f83": "SgdToWeiRateSet(uint256)", +"7b1f246d": "enterBidForSigil(uint16)", "7b1f337d": "endingBlock()", +"7b1f8c17": "setBurnAllowance(address,uint256)", +"7b1fa211": "cast2(address[],bytes[],bool,address)", +"7b1fc3cc": "multisendErcbADR(address[])", +"7b20351b": "getCert(string)", +"7b204dda": "setNoteOwner(address,string)", +"7b208769": "charityWallet()", +"7b20bccf": "addTokenTemplate(address)", +"7b20f6ad": "dodajIspit(string,address,uint256,uint256)", +"7b210b4d": "totalBoost()", +"7b22790a": "clusterRewards()", +"7b22b33c": "referralRateReferrer()", +"7b22ebce": "getTotalQuarterPoint(uint256)", +"7b237013": "xFac(uint256)", "7b23f37d": "ownerRandomNumber()", "7b24343e": "salvageOtherTokensFromContract(address,address,uint256)", "7b2454c2": "InvestmentAnalytics()", +"7b24715d": "dateFundsUnlocked()", +"7b24a251": "hasProfilePicture(address)", "7b24d867": "TokensImport(address,uint256,uint256)", +"7b24f7e5": "wonderForSale(uint256)", +"7b253496": "setPassport(uint8,uint256,string,string)", "7b253fe6": "getWithdrawableAmountAS(address)", +"7b254029": "addperson(string,string)", "7b2581c2": "totalPurchase()", "7b25aeca": "totalLimitUSD()", +"7b25c446": "icoETHReceived()", "7b25de45": "isNewToken()", "7b25ec58": "getTierTokens(uint8)", "7b2643f2": "receiveNVT(uint256,uint256)", "7b266b21": "durationh()", +"7b269d0f": "openGame(address)", "7b26de4b": "newPlayer(address,uint256,address)", "7b26ff88": "JuryMemberAdded(string,address)", "7b274afc": "stopIco()", +"7b276f05": "viewNFT(uint256)", "7b27739c": "LSCKcoin()", +"7b2798d7": "_devaddr()", +"7b27a718": "Invest2Fulcrum1xShortBTCContract()", +"7b2818a1": "updateUSD(address)", "7b283b71": "RATE_TIER1()", "7b28aa4c": "orderCancel(address,uint256,address,uint256,uint256)", +"7b28d483": "setLatestAnswerWithRound(int256,uint256,uint80)", "7b292909": "square(uint256)", "7b294495": "lastActiveTs()", +"7b295fa0": "preRegistrationExt(address,address)", +"7b29f970": "getLocalPercent(address)", +"7b2a4ec5": "buyWithValidations(uint256,address,address,uint256,uint256,uint256,bool)", +"7b2a7f06": "pcUniRouter()", +"7b2aab03": "updated()", "7b2abb34": "doProveMemoryRead(uint256,bytes32,bytes32[])", +"7b2ae5f7": "burnMethod(address)", +"7b2af625": "borrowETH(uint256)", "7b2b24e9": "isCurrentOrPastUser(address)", +"7b2b5f79": "tokensManagment()", +"7b2b7824": "withdraw_ETH_beta(uint256)", +"7b2bad2b": "addToTransferWhitelist(bool,address)", "7b2bff9d": "getRobotsForUser(address)", +"7b2c343f": "getClaimGroupIds(address)", "7b2c5148": "catReleaseToPrice(uint32)", +"7b2c835f": "setBurnEnabled(bool)", "7b2c8905": "FailedToClaim(address,uint256)", "7b2ca96c": "ProdPresale()", "7b2d1b30": "getDragonPriceNo()", "7b2d3b27": "getStageDiscount(uint8)", +"7b2d9419": "NewBonusClaim(address,uint256)", "7b2e0046": "createAddress(bytes32,address)", "7b2e5086": "withdrawFounderFunds()", +"7b2e887a": "setExpectedRateWethQty(uint256)", +"7b2f792b": "updatePremiumSubOracleAddress(address)", +"7b2fd6a4": "TakeOrder(address,address,address,address,uint256,uint256,bytes32,uint256)", "7b2feaaa": "blockStart()", "7b30074d": "trustedCancelOrderTransfer(address,address,uint256)", +"7b30212b": "withdrawPynthetix(uint256)", "7b303965": "getStats(uint256)", "7b304179": "createMainNetContract(uint256,uint256)", "7b3051db": "get_minimum_trade()", "7b30de25": "setConfig(string,string)", +"7b3104ca": "totalReferals(address)", +"7b310f0c": "_effectiveDebtRatioForPeriod(uint256,uint256,uint256)", "7b316db2": "enterBidForCollectible(uint256,uint256)", "7b3179bc": "setEconomyParameters(uint128,uint128,uint128,uint128,uint128,uint128,uint128)", "7b317ef6": "payoutPendingWithdrawl(uint256)", +"7b31a859": "updateHardcap(uint256)", +"7b31c19a": "toggleRewardsCollection()", "7b31db17": "intMax()", +"7b3205f5": "executeRound()", "7b327104": "addBidToStack(bool)", +"7b328abf": "lastCalledTimestamp()", "7b32daf8": "contractTimeout()", "7b3303b1": "startcrowdsale()", +"7b334141": "takeLoanOrderOnChainAsTrader(bytes32,address,uint256,address,bool)", +"7b334154": "allowedCallers(address)", +"7b3359db": "pairHNY_LPMinted()", +"7b33701a": "getExpectedReturnWithGasMulti(address[],uint256,uint256[],uint256[],uint256[])", +"7b33b74a": "stopCollection(address)", "7b33e01a": "increaseApproval(address,uint256,bytes,string)", +"7b33ecfb": "settokenPresale(address)", "7b33fa25": "confirmReturn()", "7b34203d": "getNumberOfDisputedStepsProPatient()", +"7b3426c3": "setBasePrice(address,uint256,uint256)", +"7b3437c9": "requestPartialWithdraw(address,uint256)", +"7b34630e": "bazarSwapActive()", +"7b346ea1": "getTransactionHash(address,uint256,bytes,uint8,bytes32)", +"7b34c204": "sellPrice(bytes32)", +"7b34ee7f": "emergencyShutdownPrice()", "7b352962": "isFinished()", +"7b353d06": "REIGAI16()", "7b35819f": "setPresaleEndDate(uint32)", +"7b35870c": "collectForgottenEth(address)", +"7b35ec79": "crowdsaleStatus(bool)", "7b362143": "inactive_withdrawable()", +"7b362770": "getCloseAmount(bytes32,address)", "7b36277e": "tier2Total()", "7b367343": "IPv7Token()", "7b370a01": "crowdsaleDistributedUnits()", "7b37b6a3": "RAXToken()", +"7b37ce4f": "maxEditionSize()", +"7b381b35": "changeInterestRatePerBlock(uint256)", "7b38f391": "p1_white_duration()", "7b3941d7": "Redeem(uint32)", "7b395487": "voteForUltimateOutcome(bytes32,uint16)", +"7b3a3195": "buyFromETH()", +"7b3a4c49": "additionalCouponPremium(uint256,uint256)", +"7b3a59ba": "onBuyName(address,bytes32,uint256,uint256)", "7b3aa441": "contributeWithAddress(address)", "7b3ae1f1": "addClaim(string)", +"7b3b2321": "eggToLp1Route(uint256)", +"7b3b673a": "getUinqueID(uint256,address)", +"7b3b8d4d": "PEGSBurned(address,address,uint256)", "7b3bfc35": "setRound(uint256,uint256,uint256,uint256,uint256,bool)", "7b3c24ac": "compensate(uint256,address)", "7b3ca1c6": "registerNameXname(string,bool)", +"7b3cb07c": "betColor(uint256)", +"7b3ce1be": "totalCreatedSupply()", "7b3cf41a": "setExplosivePower(uint256,uint256)", "7b3d398f": "getTicketHolderCount()", "7b3d9338": "market_is_open()", "7b3e2ce0": "BuyTicketUseVaultSeed(uint256)", +"7b3e397d": "updateUserBalance(uint256)", +"7b3e46f8": "lock(uint256,uint256,uint256,bytes32)", "7b3e5e7b": "amountRaised()", "7b3ed808": "withdrawlOwner()", +"7b3ee316": "testConcat(string)", +"7b3ee7fc": "_setup()", "7b3f0fb7": "updateRevertSuspendedPayment(bool)", +"7b3f2dd6": "newHash(string,string)", +"7b3f7c99": "upgradeThisContract(address)", "7b3fdcd8": "removeVerifier(address,address)", +"7b3fe213": "giveMeBUSD()", "7b40b291": "RetractRoutingNS(bytes32,bytes32,uint256,bytes)", +"7b411ca5": "PayoutStakeHolders()", "7b4126f4": "buyContent(bytes32,uint256,uint256,bytes8,string,address)", "7b413985": "tokenValueInEther(uint256)", +"7b417bfe": "dripSeniorDebt()", +"7b41b6c2": "bonusBlockStart(uint256)", "7b422184": "giveBirth(uint256,uint256)", "7b424c0d": "changeRelease12m(address)", +"7b42799b": "changeContractAddress(address,address)", "7b42f6f7": "intervalAt(uint256,uint256,int256,uint256)", +"7b433b2e": "renderTopPartyTeam()", "7b436460": "Kubic()", +"7b43678a": "bonusUsers(uint256)", "7b436fa4": "garanteSystemDepositInOneFund()", "7b43a8e6": "commits(address)", "7b43adfb": "checkBalanceContract()", +"7b4440ff": "setRefereeAmount(address,uint256,uint256,uint256)", "7b449206": "changeClearance(uint256,uint256,uint256,uint256,bool)", +"7b44cdb5": "payArbitrationFeeBySender(uint256)", "7b44eb51": "UPO(uint256,string,uint8,string)", +"7b452551": "mintRateDivider()", +"7b456987": "managerTransactionFee()", +"7b45deb3": "addPlayer_SideB(address,uint256)", +"7b45fe17": "hardPayout(uint256)", "7b464e93": "prescriptions(bytes32)", "7b46b80b": "unfreeze(address,uint256)", +"7b46c54f": "updatePool(address)", "7b473783": "EcoValueCoin()", "7b47457f": "MintTokens(address,uint256)", "7b47cb68": "lifeFactor_ii()", "7b47ec1a": "burnToken(uint256)", +"7b480228": "setIsPublicSale(bool)", +"7b489aca": "viewAvailableRewards(address,uint256,address)", "7b48ba20": "testThrowDisownNotOwner()", "7b48de6b": "returnTransactionPrices(uint256)", +"7b492025": "TOKENSALE_MAX_DAILY_PER_USER()", "7b4938c3": "LinkNaturePower()", +"7b49d0bb": "getPosition(address,address,address,address)", "7b49e4c0": "DelphyToken(address[],uint256[])", +"7b4a7c08": "TempLockedAddress(address,uint256)", "7b4b5e4e": "changeYUMAddress(address,address)", +"7b4d0812": "setPoolRewardRate(uint256)", +"7b4d0cd3": "setOpenseaEditableToFalse(string)", +"7b4d6587": "dDAI()", +"7b4dbaac": "fishPerBlock()", +"7b4e610a": "initSetDailyAccrualRate(uint256)", +"7b4f5327": "mint(address,address,int24,int24,uint128)", +"7b4fba84": "getDividendAddressWithAddress(address)", "7b4fcdcf": "GetAccess(address)", "7b4fd96e": "token_price()", "7b5005e8": "ZRXToken()", +"7b501c84": "createRequest(bool,uint256,uint256,uint256,uint256)", +"7b508b5c": "claimTokenByEpoch(address)", "7b50a573": "functionOne(uint256,uint256,uint256,uint256)", +"7b50bae7": "addPosition(uint256,uint256,uint256)", +"7b50c17f": "startResolution(string,string,uint8,bytes)", "7b510fe8": "getAccountInfo(address)", +"7b51786c": "getTokenInfo(address,address)", "7b51c463": "hasDebris(bytes32,uint8)", +"7b51d24c": "setTendsPerHarvest(uint256)", +"7b51d34d": "sendToL2(uint256,address,uint256)", +"7b51ee50": "NullDate()", "7b523c35": "request(address,address,bytes,bytes,uint256,uint256)", +"7b5257a2": "NewCommunityAddress(address,address)", +"7b52e82d": "maxBuyETH()", "7b5330a7": "getEntitlement()", "7b540dd2": "ChangeHold(address,address,uint256,uint8)", "7b54a994": "safeAdd(uint256,uint256,uint256,uint256)", "7b550233": "deathData_v18()", +"7b550bc9": "getRewardPerBlock(uint256)", +"7b55229d": "getTokenIn()", +"7b554a92": "totalHatched()", +"7b556094": "getLockRate(uint256,address)", +"7b5579a4": "JOBID()", "7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", "7b55f66e": "manualCloseBet(uint16,uint16)", "7b563e3a": "hourPotLeader()", "7b564b7f": "test_insert_updateTail()", +"7b565e67": "getReentrancyMutexPosition()", "7b568081": "trade(address[],uint256,uint256)", +"7b5685e5": "inherited(uint256[2])", +"7b56afa7": "changeCryptonomicaVerificationContractAddress(address)", +"7b56c2b2": "faucet(address,uint256)", "7b575b33": "operate(bytes)", +"7b57affc": "allowedUniswapPools(uint256)", "7b58120f": "preSaleSecondStartDate()", "7b5825d5": "get_amount_buy(uint256)", "7b58d46e": "changeWikiID_Name(uint256,string)", @@ -70646,85 +129203,175 @@ "7b599b5b": "COOLBTCEXCHANGE()", "7b59af16": "registerName(string,address)", "7b5a08c5": "TradeList(uint256)", +"7b5a3b43": "freeETH(address,address,uint256,uint256)", +"7b5aa560": "NextGame(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7b5aa6c9": "getActiveUserStakesByAddress(address)", +"7b5ab924": "Book_car(uint256)", +"7b5b953e": "hasOpenedAny(address)", "7b5bc2e4": "isVoted()", "7b5bd741": "getIdentityWallet(address)", "7b5bee1d": "_getItem(uint256)", +"7b5c219d": "removeProposal(address,uint256)", +"7b5c2f39": "initialRelease()", "7b5c7b7b": "privilegedTransfer(address,uint256)", "7b5cc75d": "lastDividendTime()", "7b5d2534": "semaphore()", +"7b5d30ed": "setDireccionBeneficiencia(address)", +"7b5d520b": "publicFunction()", "7b5d5d1a": "halvingStartBlock(uint256)", "7b5e400d": "recipientsMap(bytes32)", +"7b5e96f5": "currentDynR()", "7b5eb564": "approveWithData(address,uint256,bytes)", "7b5ecb32": "test_twoValidEqUint2()", +"7b5eeeb2": "refBonuses()", +"7b5efe0e": "claimPolicy(string)", "7b5f4fc9": "get_all_attender()", "7b5f7267": "getTokenPriceUSDWEI()", +"7b5f8912": "wood()", +"7b5fb405": "getDepositidByAddress(address)", +"7b5fe397": "icoSalesCount()", +"7b604fbe": "setAcoPoolUnderlyingPriceAdjustPercentage(uint256)", +"7b618967": "_setTransferRate(uint256,uint256)", +"7b61adc3": "totalPrizesPaid()", +"7b61affe": "getPurchasers(string)", "7b61b201": "getHouseCard(uint8)", +"7b61c076": "expresultime()", "7b61c320": "tokenSymbol()", +"7b61d62f": "LockOneTokens(address,uint256)", +"7b622179": "_getAllReserves(uint256)", "7b627879": "Conference()", "7b632c41": "TimestampScheduler(address,address)", +"7b633164": "onBuyEggs(address,uint256,uint256)", +"7b63a569": "bondsOutstanding(uint256)", "7b641fbc": "getMembers(bytes32)", +"7b642370": "depositToEth2(bytes,bytes,bytes,bytes32)", +"7b646f14": "RaffleSuccessful(address)", "7b647652": "LittleEthereumDoubler()", "7b647d72": "BITIC()", +"7b65158f": "transferCollateral(address,uint256,address,uint256)", +"7b656361": "setHoldingTank(address)", +"7b65c1d9": "addAccount(bytes32,address)", "7b65d0ec": "initialBuyCard(uint8,string,string,string)", +"7b66254e": "yaxEthUniswapV2Pair()", "7b663d30": "ChangeClaimAmount(uint256)", +"7b66a7da": "setObserverAddr(address)", +"7b66ad34": "decodeSignatureValidatorNotApprovedError(bytes)", "7b66c032": "HashBuxICO()", "7b66da95": "calLast5RoundProfit(uint256)", "7b66e17f": "getDonator(uint256)", +"7b66ff83": "Database(uint256,uint256)", "7b6750bf": "getTokenDelegate(uint256)", +"7b67e5b5": "myLockedTransferAmount()", +"7b6807a2": "approve_20(address,uint256)", "7b680deb": "SpiceUpPrizePool(address,uint256,string,uint256)", +"7b6813b9": "initApproval()", "7b68533f": "earlybird_percentage()", "7b68a8f0": "getPixelColor(uint256)", +"7b68be81": "cancelOrder(uint8[2],bytes32[4],uint256[5],address[4])", "7b698602": "NEXMESH()", +"7b699b8a": "getRandomNumber(uint16,uint16,address)", "7b69db5c": "increment(int256,int256)", +"7b6a1ec0": "getBNBStakingTotalDaysById(uint256)", "7b6a3e27": "out2Done()", "7b6a6f4a": "roundUp(uint256)", "7b6a912c": "etherCost()", "7b6ae58f": "AMICoin()", "7b6b3f46": "preMining()", +"7b6b65df": "updateMelt(uint256)", "7b6c0492": "allowanceSubId(address,uint256,uint256)", "7b6c4b27": "BidRevealed(bytes32,address,uint256,uint8)", "7b6c4dc7": "AgriChainProductionContract()", "7b6c7a14": "transferAuthorship(address,bytes32)", +"7b6cbf77": "trueBalances(address)", "7b6ccf85": "LogRefund(bytes32,address,uint256)", "7b6d79f1": "cancelBet()", "7b6d7a4a": "VoteIntentionSet(uint256,bool,bool)", +"7b6df659": "o2(address,uint256)", "7b6e49a8": "fetchVoteNumForVoterByIndex(uint256,address)", "7b6e7603": "levelClearTime()", "7b6e8740": "changeCATDestinationAddress(address)", +"7b6eaa65": "getBestOrderId(uint8,address,uint256)", +"7b6ebc78": "airdrop_finish_time()", +"7b6ec2e0": "TokensMintedForRedemption(address,uint256)", +"7b6ee8d8": "changeStakingToken(address,uint8)", +"7b6f299c": "uniswapTokenBP()", +"7b6f4f87": "usdt_rate_set(uint256)", "7b6f5a4c": "getCurrentRoundMinimumTime()", +"7b6f6b45": "vRatio()", +"7b6f775a": "setMaxLeverage(address,uint256)", +"7b6f9668": "committedAmount(uint8)", "7b6ff689": "setImmediateAllowancePercentage(uint8)", "7b70209f": "isBeneficiary()", +"7b7044e7": "hashEIP712MessageWithAddress(bytes32,address)", "7b7054c8": "__approve(address,uint256,address)", "7b707e9c": "getNumberOfCreatedTokens()", "7b70cdcd": "dayFor(uint256,uint256)", "7b70ed51": "setAngelDate(uint256)", +"7b710c25": "getCBPublicKey()", +"7b712854": "grantQuotes()", +"7b71433a": "isSupplyLessThanOneMillion()", +"7b7179fc": "createEncryptionAlgorithm(uint256)", "7b71aec8": "ethPropagate()", +"7b71e5a5": "eightReserveAllocation()", +"7b7284fc": "getAllImages()", +"7b72baa0": "sendEtherToMany(address[],uint256)", "7b7330cc": "return_eth()", +"7b738f85": "_pullUnderlying(address,address,uint256)", "7b73aef8": "setNote(bytes32,bytes32)", "7b73c2ef": "defaultDeadline()", +"7b745470": "setCR50(address)", "7b74644d": "WKToken()", +"7b746b5d": "ScriptCancelled(address)", "7b74e5c3": "buyByAddress(uint256,uint256)", +"7b751b9e": "getDisputeFees()", +"7b75469b": "ymiPerBlock()", "7b755373": "amountPercentage(uint256,uint256)", "7b75a302": "MatContract()", "7b75ea7b": "rewardPayableDays()", "7b760537": "updateLatestRevision(bytes20,bytes32)", +"7b76455d": "incrementPercent()", "7b7670f6": "gasForXaurDataUpdateAtBlock()", "7b76ac91": "day()", +"7b77267a": "messageUse(address)", +"7b773c9d": "vokenHolding(address,uint256)", "7b775ec3": "wallet89()", +"7b777160": "_allocPointForBUSD()", "7b777517": "teamVestingStages()", +"7b777798": "etherToTokens__(uint256,uint256,uint256,bool)", "7b777ecc": "getMaxReportsPerLimitedReporterMarket()", "7b77bbc8": "dyn_call(address,bytes)", +"7b77ef8f": "democracy()", +"7b781452": "transferFrom(address,address,uint128)", +"7b78303a": "getHashOfS1()", +"7b78535d": "newDrawingApprovalRequest(address,string,string,string,string)", "7b789b3d": "agreement(bytes,bytes,bytes)", +"7b78e82d": "updateStakeProtocol(address)", +"7b7902dd": "calcTokenAmount(uint256)", +"7b7907d1": "getPoolsLP(uint256)", +"7b7933b4": "checkpointSupply()", +"7b79413a": "getBankInfo(address)", +"7b7a1cf3": "getQuarterlyReward(address)", "7b7a43eb": "setMINfinney(uint256)", "7b7a720a": "chrissycoinToken()", +"7b7a91dd": "quorumThreshold()", +"7b7b6d07": "setStarFee(uint256,uint256)", "7b7b81c5": "loikikdi()", +"7b7b81f7": "cap_nhat_danh_sach_vdv_Cau_3()", +"7b7c1f4c": "liquidationBonus()", "7b7c343d": "setRequiredConfirmations(uint256)", "7b7ccc66": "burnSaleTokens()", "7b7d4655": "releaseTokenCornerstone()", "7b7d6c68": "setController(address,address)", "7b7d7225": "_approve(address,uint256)", "7b7d8888": "permanentlyOwnMyCompany(bytes32)", +"7b7e59d0": "pendingLpt(uint256,address)", +"7b7e8bac": "FeeAddress()", "7b7e97f1": "isIncluded(uint256,uint256)", +"7b7f549c": "pancakePairAddress()", +"7b7f859e": "setTimerAddress(address)", +"7b7f885c": "activeBonusCacl_7()", +"7b7f9eaf": "getUserTotalActiveDeposits(address)", +"7b7fb153": "addLiquidityLauncherTemplate(address)", "7b807a51": "devTimeLock()", "7b80889b": "lockedBalance()", "7b80a0ca": "endEarlyStage2()", @@ -70735,60 +129382,119 @@ "7b8208b7": "destroyUselessContract()", "7b821410": "createPlotVineyard(address)", "7b8239fa": "fun3()", +"7b82784c": "depositBlockStarts(address)", +"7b828656": "addCard(string,string,string,string,string,uint256,uint256)", "7b82d9ee": "canDouble(address)", "7b830854": "unlockTokenTransfers()", "7b831c30": "isRoundEnded(uint256)", +"7b832f58": "variableRateSlope1()", "7b834bcc": "marketTime()", +"7b840614": "Withdraw(bytes32,uint256,uint256,address)", "7b841eff": "turnOffCanUpdatePercentToTakeAsSeed()", +"7b849988": "removeBonusEth(uint256)", +"7b84daec": "stakedWantTokens(uint256,address)", "7b84de4e": "StarFishCoin()", +"7b84fda5": "updateFeeRate(uint256)", +"7b850d64": "approve_141(address,uint256)", "7b851f65": "hasIcoEnded()", +"7b85472f": "addInArray(uint256)", +"7b855bf0": "creatorAdmin()", +"7b85644c": "withdrawETHBalance(address)", "7b86120a": "foundersReserve()", "7b865061": "CAPToken(address)", "7b87312a": "timeToOpenPresents()", "7b875aab": "addrSale()", +"7b879cb3": "showAvailableToken()", +"7b880ff0": "SCTellers()", +"7b88c4a0": "setSwapInfo(address,bool)", +"7b88eae1": "snipe(address)", +"7b891757": "getAllocations(address)", "7b891cf7": "YBCLiveToken()", +"7b892739": "addPToken(address,address)", +"7b894b0f": "NewRegistry(address,address,address,address,address)", +"7b898939": "depositIndex()", "7b898c71": "_checkLoanBalance()", "7b89a582": "Management()", +"7b89b909": "doPay(uint256,uint8,uint256,uint256,bool,address)", "7b89eef2": "getMyAverageDividendRate()", +"7b89f26c": "createEvent(address,uint256,uint256,uint256,uint256,uint256,string)", +"7b8a057e": "removeListFromWhitelist(address[])", "7b8a1898": "setStore(string)", +"7b8aa33b": "createAcoPool(address,address,bool,uint256,uint256,uint256,uint256,uint256,address,address)", "7b8ac66b": "deliver(uint256,uint256)", +"7b8af860": "firstEpochAdvancer()", +"7b8afbcf": "isDeposit(address,address)", +"7b8b630e": "testSetRiskParameters_LiquidationDiscountMaxValueSuccess()", "7b8b7364": "isAddressVerified(address,address)", "7b8b82a8": "createManyProxies(uint256,address,bytes)", +"7b8bc645": "getPeriodBalanceDetails(uint256)", "7b8bf4fd": "set_fee(uint256,uint256,uint256)", +"7b8c0b79": "annualNRTAmount()", "7b8c0e0f": "offlineExchange(address,uint256)", "7b8cfbe1": "howManyEtherInWeiToKillContract()", "7b8d56e3": "setValue(uint256,uint256)", +"7b8d61b5": "depositToUSDTVault(uint256)", +"7b8d665e": "TRANSFER_TYPE_HASH()", "7b8d771e": "_buyTicket(uint256,address)", "7b8d9930": "AxieDependency()", +"7b8dc5f6": "CancelOrder(address,bytes32)", +"7b8dd3de": "ethToToken(address)", "7b8de6d0": "executeTokenFallback(address,uint256,bytes)", +"7b8e1304": "account2Token2Balance(address,address)", "7b8e3514": "allowedValidators(address,address)", "7b8e7964": "JPGToken()", +"7b8e8895": "funds(uint256)", "7b8e8bdd": "modifyCloseTime(uint256)", "7b8eeb96": "StarMarket()", "7b8f186e": "updateIdx()", "7b8f2e07": "addCreature(uint16,uint8,uint8)", +"7b8f2eae": "buyListingLimitAmountMultipleTimes(address,address,uint256,uint256,address,uint8,uint256)", +"7b8f6f4c": "changeClaimPeriod(uint256,uint256)", "7b8fa867": "setAllowedAdd(address)", "7b8fac4f": "AC(uint256,string,string)", +"7b8fe166": "getVoterDetails(uint256)", "7b907094": "solidityCompileVersion()", +"7b90f08c": "nextRunDate()", +"7b925ab1": "DISCOUNT_ADDR()", "7b926c2a": "IFSBalances(address)", "7b929c27": "development()", "7b92a2de": "Reservation(address)", +"7b930593": "oracleToNode(address)", "7b93253c": "validateClaim(address,bytes32)", +"7b9352c2": "createSales(uint256,bool,uint256,uint256,uint256)", "7b9358a0": "changeRegistrationStatuses(address[],bool)", +"7b935a23": "claim_many(address[20])", "7b936934": "artistFees()", "7b936ac2": "getCFO()", +"7b939205": "__ONE_init_unchained(address)", +"7b93c3d6": "transferProofState(uint256,uint256)", +"7b93e1e0": "withdrawlTeamTokrns()", "7b9417c8": "addAddressToWhitelist(address)", +"7b943383": "winnerStakeMultiplier()", +"7b945a7e": "addToInUse(address,uint256)", +"7b948d64": "__CirclePool_init(address,address,address,address,address,address)", +"7b94a984": "GlobalTimestampSec()", +"7b94aaac": "truncate(uint256)", "7b94ffb5": "grantBounty(address,uint16,string)", "7b9504d5": "_isOwner(address,uint40)", +"7b959a13": "getStatic(address)", +"7b965519": "sn(address,uint256)", "7b965785": "EVER()", +"7b967ba6": "withdrawSAI()", +"7b9692b7": "amountForDistribution()", "7b969dcd": "_checkPixelAboveLeft(uint256)", "7b97008d": "purchaseTokens(uint256)", "7b979b41": "leakEther()", "7b97c621": "Transferred(bytes32,address,address)", +"7b97d4f2": "viewAirdropDEFIA()", "7b9884b9": "addallrunmoney(address[],uint256[])", "7b991c1a": "findEmptySlot(uint32)", +"7b9933ad": "enterBetCheck(uint256,uint256,uint256,uint256)", "7b9940b6": "initambassadors_()", +"7b99adb1": "setLiquidityCap(uint256)", +"7b99e76a": "setTokensPerPeriods(uint256,uint256)", "7b9a3f4c": "TotalFunds()", +"7b9a8e8c": "NINE_MONTHS_DURATION()", "7b9a9926": "RESToken()", "7b9b9c89": "augmintToken()", "7b9c34e0": "requestRN(uint256)", @@ -70798,7 +129504,10 @@ "7b9daba8": "wa()", "7b9dbf95": "FulfillmentAccepted(uint256,address,uint256)", "7b9dc066": "tokenTransfersFrozen()", +"7b9ddee8": "getTotalStakedTamag(uint256)", +"7b9e1189": "setProfessor(string,string,uint256)", "7b9e5bec": "getAsBytes(uint256,uint256)", +"7b9e86bf": "sellFeePct()", "7b9e9073": "buyLimitSupplyMin()", "7b9f87d3": "Setup(address,address)", "7b9fa595": "_getCrowdsaleTokenAmount(uint256)", @@ -70808,45 +129517,86 @@ "7ba121ff": "EventBonusPercentChanged(uint256,uint256)", "7ba1e407": "tokenBack(address[],uint256[])", "7ba201c5": "refundSingleUser(address)", +"7ba22a0c": "MessageEvent(string)", "7ba22e1e": "changeWorkerBalance(address,uint256)", +"7ba26a0f": "IssueToken(address,uint256)", +"7ba32d6e": "getUIInfo(address,address[],address)", "7ba36880": "_secondLevelEth()", "7ba38916": "changeAdminFromBoard(address)", +"7ba3a5e0": "rollupVerifiersLength()", "7ba3c804": "AiEXToken()", "7ba3f08d": "grantPermissionTo(address)", +"7ba44245": "quitStaking()", "7ba46004": "totalRuneWithdrawn()", "7ba49b81": "lastMintedTimestamp(address)", "7ba4a58a": "addressToken()", +"7ba56b51": "dfin(uint256)", "7ba5f145": "mod256(uint256,uint256)", "7ba64e40": "removeBeneficiary(address,uint256)", +"7ba6f458": "getStakes(address)", "7ba70bf2": "gettoken(address)", +"7ba73aeb": "awardDoom(address)", "7ba79848": "processReferral(address,uint256,uint256)", "7ba7acc9": "initTokenSale(address,address,uint256,uint256,uint256,uint256,uint256)", +"7ba7b3ff": "jgdengjiageth()", +"7ba7d15e": "setStartTimeTLP2(uint256)", "7ba7dcea": "setRefundable()", +"7ba8a704": "startdecimal()", +"7ba8ad21": "getBestBook()", "7ba8c064": "VotedEvent(uint256,address,bool,uint256,string)", "7ba8c12d": "addWhitelistUser(address,uint256)", +"7ba8c820": "updateDelegation(bool)", +"7ba901d2": "willsellInfo(address,uint256)", "7ba992fc": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool,address)", +"7ba9bc31": "commit_a_ride()", +"7baa428a": "buyPreSaleOf(address)", "7baa4524": "emptyRemainingsToOwners()", "7baa73c6": "_updateCreditedPoints(address)", +"7baafeb5": "I_PAY_FROM()", +"7bab3f40": "grab(bytes32,address,address,address,int256,int256)", "7bab59f4": "feedTransfer(address,address,uint256)", +"7bab9cf7": "EthervestKillerChanged(address,uint256)", +"7babae2d": "recoverUnknownTokens(address)", "7babf021": "RLCOIN(uint256,string,string,bool)", "7babfffc": "transferDelegation(address)", +"7bac07c7": "frax_step()", +"7bac29c7": "setMaxGasPerTx(uint256)", +"7bac3841": "calculateRelease(address)", +"7bac9c7c": "nextSettlementBlock()", +"7bacd374": "collatDeficit()", "7bacd526": "withdraw_admin(uint256)", "7bacfb0c": "PresaleEndTimeChanged(uint256)", +"7bad2b15": "transferPublishRight(address)", +"7bad5fc8": "betOnHundings(uint256)", +"7bad9148": "getCPollInfo()", +"7badb35a": "enableReward()", +"7badc118": "_withdrawAndSyncDelegatorRewards(bytes32,address)", "7badc7af": "gaveVote(address)", "7bae0585": "approveMany(address[],uint256[])", "7bae3f27": "changeTransferFeeOwner(address)", "7bae50e0": "mintGen0Spinners()", +"7bae7c22": "swapWithReserve(address,uint256,address,uint256,address,uint256)", +"7bae981b": "voteNo(bytes32)", +"7baec59a": "_allocPointForYFI()", "7baf5b84": "startUnlock()", "7baf71f9": "claimPrizePool(address,uint256)", +"7bafa572": "testBurnself()", +"7bafb029": "getMultiplier(uint256,uint256,uint256)", "7bb050cf": "migratePlayerPhrasesData(uint256,uint256,uint256)", +"7bb05264": "setRelayHub(address)", "7bb0688d": "claimedUsers()", +"7bb06eea": "addBlacklister(address)", "7bb0aefe": "hasAuthoritySignedMainToSide(address,address,uint256,bytes32)", "7bb0b3c6": "checkifCapHasReached()", +"7bb14bde": "groupTeamRelease(address)", "7bb1a312": "transferToTeam(address,uint256)", "7bb1efa1": "manualInitializeTreasure(uint256)", "7bb20df6": "isExistingBattle(string)", "7bb25d60": "withdrawInProgress()", "7bb26a1b": "ethFoundDeposit()", +"7bb2b3c1": "Claim(uint256)", +"7bb2f458": "setCumulativeSequencedGas(uint256)", +"7bb2f5ff": "incomedaysecondone(uint256)", "7bb305ef": "set_foundtion_addr(address)", "7bb31dbb": "calcBetResult(uint256,bytes32)", "7bb333d6": "EBankerICO(address)", @@ -70857,11 +129607,22 @@ "7bb4493c": "FBI()", "7bb476f5": "getAvailableAmount()", "7bb4c4da": "nAuditorsAlarm()", +"7bb4e7fb": "PublishStorageChunk(bytes32,bytes32)", +"7bb53528": "firstTimeStrategy()", "7bb55287": "assignRaffleWinner(address)", +"7bb57fb3": "unsetRuleAndIntent(address,address)", "7bb5e1d1": "Cowboy()", +"7bb5e2c4": "swapComplete()", +"7bb6116c": "WinnerPaid(uint256,address)", +"7bb65322": "getCurrentDividends(address)", +"7bb68be2": "redeemByLpToken(uint256,uint256,uint256)", "7bb6a4c6": "uno(uint256)", "7bb6fc6b": "LoveToken(uint256,string,uint8,string)", +"7bb73c97": "_votingSnapshotsCounts(address)", "7bb7adb6": "hugeContributionBound()", +"7bb7bed1": "rewardTokens(uint256)", +"7bb83eb1": "weekBlock()", +"7bb8590d": "NEWROUND_WAIT_DURATION()", "7bb866c1": "GetBoosterCount()", "7bb8c4e5": "setCut(uint16)", "7bb96acb": "getBlockHeight()", @@ -70869,303 +129630,571 @@ "7bb9c776": "ticket(bool)", "7bb9dc13": "setPublicSaleWallet(address)", "7bba0613": "attackCountry(uint8)", +"7bba3b36": "accountRounds(address)", "7bbb3a60": "inactivityTimeout()", +"7bbb9d2d": "getRaiInfo()", "7bbba97e": "CreateEstate(address)", "7bbbd75b": "_getNow0()", +"7bbbe390": "getBonusBoosters()", "7bbbe9fd": "claimGameReward(address,uint256,uint256)", "7bbc101b": "distributionStart()", "7bbc33f0": "vet(address,bool)", +"7bbc469e": "races(uint256)", "7bbc5c01": "calcRefund(address)", "7bbc816e": "UTCToken(uint256,string,string,uint256)", +"7bbcb008": "isExchangeListed()", +"7bbcf9cc": "CreditsTransferred(string,uint256,uint8,string)", "7bbd3f19": "removeLastRace()", +"7bbdad11": "openTheGates()", +"7bbe255b": "editCallMaxGas(uint256)", +"7bbe3488": "removeLockedErc20(address,address,uint256)", "7bbf2300": "claimAccountOwnership(string,string,uint256,uint256)", "7bbf4a3f": "callers(address)", +"7bbf6b50": "enterBidForHat(uint256)", "7bbfb0bd": "startTokenPriceWei()", "7bbfbaee": "MAX_SUPPLY_USPN()", +"7bbfc69e": "vaults(address,uint256)", +"7bbff60f": "Issue(address,uint256,uint256)", "7bc046ef": "ClaimRemoved(address,address,bytes32,uint256)", +"7bc0d848": "log(address,uint256,address)", "7bc0e005": "setDirectDebit(bool)", "7bc0ff20": "setupExportFee(address,uint256)", "7bc120c2": "isView()", "7bc14a67": "Initial_Supply()", +"7bc15082": "IssueFinished()", +"7bc168e5": "isChildToken(address)", "7bc21b6b": "bbAdvisorWallet()", "7bc25372": "UserCheckBalance(address)", "7bc25da8": "Alaves()", +"7bc25de3": "spend(address,uint256,string[])", +"7bc292bf": "GS_commissionPct()", +"7bc2aaf1": "FURNACE_ITEM_MINE_FEE()", +"7bc2bdf0": "__test__shake__taker__matched(uint256,uint256)", +"7bc2f4a4": "purchaseMap(address)", +"7bc33210": "originationFeeBalance(address,address)", "7bc363f9": "serviceTransferOwnership(address)", "7bc36e04": "setPrivateSalePrice(uint256)", +"7bc3bd53": "shift(address,uint256,uint256)", +"7bc40426": "taxExemptAccounts(address)", +"7bc42eb1": "depositItem(address,uint256)", "7bc49a95": "play(uint256,uint256)", "7bc4be40": "isGlobalLock()", "7bc4d6a6": "testInitial1of3()", +"7bc51638": "setLidPoolManager(address)", "7bc58805": "balanceFinney()", +"7bc597aa": "MonitorEventCallback(bytes32,bytes)", "7bc5af10": "getAwarding(address,bytes32)", +"7bc5bbbf": "f(uint256[])", "7bc62dc3": "ALD()", +"7bc6729b": "acceptGov()", "7bc69bbc": "getBonusByRaised()", "7bc6a02e": "isAutoridadElectoral()", "7bc6aa07": "omniTeamAddress()", +"7bc6bf3c": "approve_165(address,uint256)", "7bc74225": "getTotalStake()", "7bc76388": "test_set_owner()", "7bc775db": "GxOwned(address)", +"7bc7f4e8": "globalSafetyBag()", "7bc835da": "UpdateConfirmed(address,address,uint256)", "7bc8649f": "NewTKLNToken(address)", "7bc89ae7": "registerNameXNAME(string,address)", +"7bc90d1c": "halfLife()", "7bc9165b": "offchainPayment(address)", "7bc94872": "FinishReceivingContributions()", "7bc9d4ba": "TielseEendrachtCombinatie()", "7bc9eb8c": "p_setSoft_deadline_duration(uint256)", "7bca38be": "heartbeatTimeout()", "7bcaf585": "checkSignature(string,uint32,string,string,bytes32,bytes32,uint8)", +"7bcbe8a9": "pendingAGST(uint256,address)", "7bcc1ff6": "allowanceInternal(address,address)", +"7bcc9c49": "setNyanAddress(address)", "7bcc9c6f": "sendBackTokens()", "7bcd7fad": "getRecordAtIndex(uint256)", "7bcdc2f0": "_forwardApprove(address,uint256,address)", +"7bcde284": "fAllloadAmount()", "7bcdfd4f": "setEpochData(uint64,uint64,uint256)", +"7bce130d": "calcPotentialMaxReward(uint256,uint256)", "7bce366f": "minBlockPurchase()", "7bce89cc": "currentMarketRate()", +"7bcf0487": "transferOwnershipOnComplianceContract(address)", +"7bcfc0e1": "assignProxyOperators(address,bytes32,address[])", +"7bd093ff": "ClearCreator(uint256)", +"7bd0bd44": "dvd()", "7bd13f08": "recoverAddressFromBalanceProof(uint256,bytes32,uint256,bytes32,bytes)", +"7bd168ee": "poolContracts(address)", "7bd1a731": "deleteIdentity(string,string)", "7bd216c6": "teamAddressThree()", +"7bd24058": "Setphase1(uint256)", "7bd2593d": "XfiniteUtility()", "7bd26969": "ChannelNew(address,address,address,uint256)", "7bd2bea7": "gem()", +"7bd2ea1c": "getOperatorIPFS(bytes32)", +"7bd3026b": "currentRoadmap()", "7bd352b7": "relay(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32,uint8,uint128)", +"7bd35b8a": "MetadataGTKSerialNumber(uint256)", "7bd379b3": "PaymentProcessed(address,uint256,uint256)", +"7bd37ce4": "Defcon(uint64,uint16)", "7bd3acbb": "pointArrayOf(uint256)", +"7bd3e3f6": "pubkeys(uint256)", +"7bd46f1b": "_BASE_QUOTA_()", +"7bd486b3": "TotalPool()", +"7bd4d591": "getLastSetTimestamp()", "7bd53618": "TaiyuanCoin()", +"7bd58ea9": "withdrawAssets(address,address,uint256)", "7bd63411": "defaultPercent()", +"7bd635a0": "demand(address,uint256,bytes)", "7bd6c0e4": "setMigrationHost(address)", +"7bd6d4be": "Airdropped(address,uint256)", "7bd703e8": "getBalanceInEth(address)", +"7bd722b3": "init(uint256,uint256,uint256,address,address,string,address)", +"7bd7525d": "Bazaar(uint256)", "7bd7c0ac": "armyDronesCount(uint256)", "7bd7c891": "becomeFalconmaster()", "7bd85cb3": "LZLTokenDeposit()", +"7bd88449": "CheckContract(uint256)", +"7bd8cc8e": "ADMIN_setPaymentAddress(address)", "7bd95a85": "rewardPoints(address)", "7bd97ca7": "editMemeTemplate(uint256,string)", "7bd9e8fd": "CTO_SHARE()", "7bd9f47a": "Best_Bank_with_Interest()", +"7bd9f5ea": "claimSashimi(address[],address[],bool,bool)", +"7bdb19ce": "setWantTokens(address[])", +"7bdb291f": "bidOwners(uint256)", "7bdb7a90": "setCdRate(uint256)", "7bdbab0c": "tokenMintInit()", +"7bdbc432": "makeBuyOrder(uint256,uint256)", +"7bdbe4d0": "proposalMaxOperations()", "7bdc011e": "Pray4Prey()", "7bdc297c": "TimeLockedWallet(address,address,uint256)", "7bdc60d9": "getTokenById(uint256)", +"7bdcc108": "testUserCanBuyAsset()", +"7bde3130": "RollCompleted(address,uint256,uint256,uint256,uint256,uint256)", +"7bde37ee": "BurnAmount(uint256)", "7bde5628": "addNuja(address)", "7bde7fcf": "maxApenSell()", "7bde82f2": "redeem(uint256,address)", +"7bde8dfa": "MarketingDevRewards()", +"7bdeafed": "updateTokenToSellForTheNext8Hrs(uint256,uint256)", "7bdef3f8": "gameMiningTokenCap()", +"7bdf2ec7": "getRelayHub()", "7bdf9d56": "MANHATTANPROXY5THST()", +"7bdfc32a": "mintRedeemPart2()", "7be00510": "lastInvest(address)", +"7be0402c": "setCommissionRatio(address,uint32)", +"7be0eeb9": "optionTwoVotes(uint256)", "7be122a3": "isSchoolAllowed(uint256)", +"7be1da51": "approve_23(address,uint256)", "7be1e747": "initAddress()", +"7be1e945": "setReferralProgramContract(address)", "7be266da": "isRegisteredInPreviousEpoch(address)", "7be296d8": "filmamount()", "7be2d5a2": "setDropNumber(uint8)", "7be33b36": "getSoundcoinsAddress()", "7be34109": "diffMonths(uint256,uint256)", +"7be3ba49": "shlTest(int256,int256)", +"7be3d02f": "available(uint256,uint256,uint256)", +"7be46629": "_withdrawUSDT(uint256)", +"7be4ca5b": "setSum(uint256)", "7be4ce4b": "updateRngAddress(address)", +"7be4e6cc": "totalWithdrawnInUniLevel(address)", "7be4ed55": "fixPayAmt()", +"7be4f865": "housebalance(address)", +"7be555ef": "MinContributionUpdated(uint256)", +"7be563ed": "updatePrincipalReserveStateOnLiquidationInternal(address,address,uint256,uint256)", "7be5b5ae": "setBuyDirectMode(bool,address)", +"7be66858": "getPermAddress()", "7be68454": "optionsRegistryAddress()", "7be6d2de": "transferToContract(address,uint256,bytes,bool)", +"7be7b4f4": "recoverERC20FromSwapContract(address)", +"7be7c353": "doCln(uint256)", +"7be7e96e": "allocation(address,uint256)", "7be80b39": "forceWithdraw()", "7be8352e": "getPixelCount()", +"7be842dd": "cleanContract()", "7be8630f": "lastHotPotatoHolder()", +"7be8a33a": "tokenPayBack()", "7be8f86b": "done(address)", +"7be9078c": "Payed(address,uint256)", "7be96b1a": "AAA(address,uint256)", +"7be97751": "deboardSuperAdmin(address,address)", +"7be98598": "isValidTokens(address,address)", +"7be98cdf": "setProvableGasLimit(uint256)", +"7be9f4fc": "manualInvest()", "7bea7112": "TheOneToken()", "7beb2e1e": "minNumbPerSubscr()", +"7bec03aa": "setInternalActivationConfig(address,uint256,uint256)", +"7bec9830": "availableWethBalance()", "7beccd70": "revokeTransferManager(address)", "7becd54a": "destErc20()", +"7bed0d46": "failingMigrate()", +"7bed3bc2": "farmingActive()", +"7bed4897": "getMinStakeAmt()", "7bedcb7f": "DemirPara()", +"7bedda9a": "_claimMessageCreate(address,bytes32,uint8)", +"7bedf3d8": "shareHolders4(uint256)", +"7bedf68a": "getTotalMultiplier(uint256)", "7bee30ce": "createSspAndChannels(address,uint256,string,address[],address[],uint256[],address,string,bytes,uint32[])", +"7bee648d": "ethShopBalance(address)", "7bee86d6": "lastImageId()", +"7beea733": "getAccountsKindsEntry(address,uint256)", "7beeb945": "isRole(address)", "7bef29f7": "BittechToken()", +"7bef4a14": "reserveKYNewTokens(uint256)", +"7bef877d": "dailyInvites(address,uint256)", +"7befa31d": "proviedAssets(address)", +"7bf01f12": "removeFromInUse(address,uint256)", +"7bf04d7c": "_hasAppsCache(address)", "7bf08621": "payTo(address,uint256)", "7bf0a8f3": "operationsTokens()", +"7bf0aca0": "getNftWeight(uint256)", +"7bf0c215": "priceMax(string)", "7bf0cd0d": "getTargetBlock(uint256)", "7bf0e054": "getLotteryDetailsB(int256)", "7bf1648a": "setContract(uint256,address,address)", +"7bf181a1": "log(bool,address,uint256,uint256)", "7bf1a627": "ethToken()", "7bf1ca1f": "TransferToken(address[],uint256,uint256)", +"7bf20b73": "addressToFailedOldOwnerTransferAmount(address)", "7bf212f8": "getCondition(uint256)", "7bf21aa4": "generatePresaleHouses()", "7bf21ab8": "sellPBTTAgainstEther(uint256)", "7bf26182": "calculateVestedTokens(bool,uint256,uint256,uint256,uint256,uint256,uint256)", "7bf2bb10": "arbiters(address)", +"7bf34671": "supplyRewardPool(uint256)", +"7bf362ed": "invalidMarketsTotal()", +"7bf37f30": "getTotalLevel(address)", +"7bf39159": "setNewParaswapMain(address)", "7bf3f900": "gameManagerPrimary()", +"7bf41254": "refundable(uint256,address)", +"7bf4364f": "getUBetCheck(address)", "7bf437e6": "transferCoinUserToUser(address,address,uint256)", "7bf47cda": "cancelSellOrder(address,uint256,uint256,uint256,uint256)", "7bf4b18f": "tokenSetMintFeeAbs(address,address,uint256)", +"7bf51c74": "pcs_pair_addressBUSD()", "7bf57ca8": "_taxesDue(address)", "7bf5b04b": "processDividends()", "7bf5b5d6": "distributeWalletTokens()", "7bf6f26e": "setMaintenanceMode(bool)", +"7bf786f8": "sent(address)", "7bf796dc": "SmartAgreement(bytes,address[])", +"7bf82305": "setAggregatorWarningFlags(address)", +"7bf8319c": "auctionEthLimit()", +"7bf89587": "addHoursToCurrentSupplierInUse(uint256)", +"7bf8f0fc": "ethremove()", +"7bf91af7": "rHEGIC()", "7bf92690": "changeArrangerFee(uint256)", +"7bf953df": "calculateStakingInterest(uint256,address,uint256)", +"7bf99017": "buyTokenICO(address,uint256)", "7bf992ac": "GoodKarma(uint256,string,uint8,string)", +"7bf9a7c4": "setFees(address,address,uint256,uint256,uint256)", +"7bf9c0da": "inCaseOwner(address)", "7bf9d052": "firstRankForFree()", +"7bf9ebe9": "getUserProfitsAndFeeAmount(address)", "7bfa6e1a": "gameShouldRestart()", +"7bfa9819": "setRefundDelay(uint256)", "7bfaad96": "addNode(bytes,address)", "7bfb0934": "value(bytes32)", +"7bfb81e5": "MIN_VOTING_VALUE()", "7bfbe091": "creatorRejectRequestFundTransfer(uint256)", "7bfbfecb": "BurnCoin()", +"7bfc6600": "PRESALE_LOCK_FORWARDER()", +"7bfcdd45": "usersF1Matrix(address,uint8)", +"7bfd5b99": "tokenId2Rate(uint256,uint256)", "7bfe950c": "withdraw(address,address,uint256,uint256)", "7bfe97ce": "IBMISOFT()", "7bff0a01": "createRandomZombie(string)", "7bff9797": "canTeamKeepingWithdraw(uint256)", +"7c000293": "setRewardsPool(address)", "7c0012d4": "ZiipToken()", +"7c003f8a": "DEPOSIT(address,address,uint256,uint256)", "7c0081f5": "petCardSeriesCollection(uint8)", +"7c00f588": "getProjectDevBP()", "7c0176df": "starUp(uint256,uint256,uint256,uint256)", +"7c01aa5c": "allocatePresaleTokens(address)", +"7c01dac1": "futuresTrade(uint8[2],bytes32[4],uint256[12],address[2],bool,bytes32)", "7c0207cb": "isActiveTranscoder(address,uint256)", +"7c020d9d": "setProfitPercentMT(uint256)", +"7c022839": "badTotalSupplyTokenAddress()", +"7c022bb4": "freezingOnOffForTokenType(address)", "7c024fe2": "getNowTimestamp()", "7c027ed9": "bonus01Start()", "7c02e1ea": "addressChangeBlock()", +"7c03bde3": "initializeGlobalEffect(address[],address)", "7c03d6f9": "ApprovalFlower(address,address,uint256)", +"7c042177": "setPairUSD(address,address,address)", +"7c042ae4": "nextBrain()", +"7c050d48": "viewRecoInvestForLostMoney(address)", "7c051d47": "seedSaleFinished()", "7c052478": "setSports3DContract(address)", "7c05ba7a": "accreditInvestor(address,address)", "7c05caf3": "testCreateCostAuth()", +"7c05ecb2": "withdrawTokensInBatch(uint256,uint256[])", +"7c060557": "SUPPLY_DECAY_END()", "7c0656ac": "LogEtherBounty(address,uint256,string)", +"7c06885a": "callExistFunc()", "7c06db04": "doManualTrade(address,address,uint256)", "7c06eb7c": "IGTRMB()", "7c0712ae": "setAdd(bytes32,address)", "7c07329f": "returnUserBalance(address,address[2],uint256[8],uint8,bytes32[2])", +"7c076811": "BuyOrder(bytes32,address,uint256,uint256,address)", "7c078723": "saleExchangeRate4()", +"7c078a94": "getApplicant(bytes32,uint256,uint256)", "7c08ab5b": "BITToken()", +"7c09063f": "takes()", "7c098bc3": "getBonusPercent(uint256)", "7c0a893d": "blockAccount(address)", "7c0ab7be": "setBidding(uint40,uint256)", +"7c0b05af": "Owner_SetCostProp(uint256)", "7c0b2484": "enableInviteOfSU(string)", "7c0b582f": "WORLD1Coin()", "7c0b8de2": "NFT()", +"7c0b996a": "initToken(uint256,string,string,string,uint256,address,address,string)", "7c0c19b3": "zrcoin(uint256,string,uint8,string)", +"7c0c322d": "llist(address)", +"7c0c3e02": "prepare(uint256,address)", +"7c0c782c": "Sync(address)", "7c0cc0be": "setActivator(address)", "7c0d021e": "CreateIssue(uint256,uint256,uint256,address)", +"7c0db278": "liquidationBonus(address,uint256)", "7c0e2a5a": "SetLockDate(uint256)", +"7c0e37a6": "testNN(address)", "7c0efb8b": "revokeManagerPermission(address,string)", "7c0f6b35": "getAllMembers()", "7c0f884b": "SlidebitsTestToken(string,string)", "7c0fbc31": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes,address)", +"7c0fbfec": "littafiAssignedID(address,string,uint256,address)", "7c0ff00c": "WithdrawTokensToBankroll(uint256)", "7c1008d5": "getLastTipTime(address,bytes32)", +"7c1017d2": "setMintingMultiplier(uint256)", +"7c108333": "createMarket(address)", "7c108f84": "UBToken()", +"7c10dea6": "queue(bytes32)", "7c10e00e": "setMinBetForOraclize(uint256)", "7c116ec9": "respectRequiredToRecruit()", +"7c118873": "_totMondays(address,uint256)", "7c11ef87": "calcUSE(uint256,uint256,uint256)", "7c1288b5": "distAgent()", "7c129c1c": "voteXId(uint256,bool)", "7c12b6f2": "_handleWin(uint256,uint256)", +"7c12d07c": "CardsPurchased(uint256,uint256,address)", "7c12f1a4": "addgamecard(string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "7c132f2c": "crossForkBlockNumber()", "7c134a38": "DetailedERC20()", "7c13b331": "OysterShell()", +"7c13ec50": "getETHpendingCashoutBTotal()", "7c13ed68": "setIPGInfo(address,address)", +"7c149805": "setAPOOLPriceMultiplier(uint256)", +"7c14b1b9": "getFixedRewardRate(uint256)", "7c153534": "tokenFrom()", "7c157d12": "_synthesizeWith(uint256,uint256)", "7c1595f2": "setLockupContract(address)", "7c161409": "BetexToken(uint256,uint256)", +"7c161861": "PERCENTAGE_GROUP_7()", +"7c163c2a": "mint1(address,uint256)", "7c163fb8": "myLoveBlocks()", +"7c16ba7f": "ownerpayable()", +"7c16ffc4": "setDefaultImplementation(address)", "7c170237": "ElectroneumGold()", "7c1716af": "payToken(bytes32,uint256,address,bytes)", "7c17357d": "totalVesting()", +"7c17dbc5": "clearUser(address)", "7c17dc02": "AddFish()", +"7c180a68": "approveAddress1(address)", "7c183b4b": "LogRef(address,address)", +"7c1844f4": "percentageDenominator()", "7c18a32f": "deductionToken(address,uint256)", "7c194295": "BurnableTokenMock(address,uint256)", +"7c19749b": "getTaxRate(address)", "7c197c09": "fullSupplyUnlocked()", "7c19e1f0": "replaceInFrontRequest(address,uint256)", +"7c1a34ce": "setAMB(address)", "7c1a35d7": "RECYCLE_TIME()", "7c1a4ee8": "SITExchanger(address,address,address)", +"7c1a69ed": "MIN_BALANCE_ADD_LP()", +"7c1a842b": "pool1Length()", +"7c1aeaeb": "changeProjectTokenPerBlock(uint256)", +"7c1b52ea": "setWeeksRewards(uint256)", "7c1b6afe": "getGrantCount()", +"7c1b6fff": "burnPLUTUS(uint256)", "7c1b814f": "openCrowdFunding(bool,uint256,uint256)", +"7c1bd7c8": "minInt256()", "7c1c05dd": "gapInPrimaryCrowdsaleAndSecondaryCrowdsale()", "7c1c7860": "TMEDsalesToken()", +"7c1cf083": "signalUnregister(address)", +"7c1d0b87": "changeSupportRequiredPct(uint64)", +"7c1d2d60": "getPurchasedLog()", +"7c1de7e1": "fulfill(bytes32,bytes)", +"7c1e4cbf": "reserveBitcashPayWithToken(address,uint256,address)", "7c1e5ced": "transferTemp(address,uint256)", +"7c1e671b": "getClientRegistrations(address)", +"7c1f9d0f": "Mined(address,uint16)", "7c1f9d5e": "tokenFeeMin()", "7c204c27": "MinerX()", +"7c20f221": "providerProposeResolver(address,uint256,string)", +"7c210708": "frozenBalances(uint256)", "7c21ae12": "activeShareholdersArrayLength()", +"7c21b068": "MiningRestart(uint16)", "7c21c7e2": "getToggleOwner(uint256)", "7c22232a": "playersPoints(address)", +"7c2338ec": "governanceProxy()", "7c236c3b": "confirmStackholderTransaction(uint256)", "7c23d1cb": "removeLevel(uint256)", "7c2464f3": "startICOTime()", "7c24b295": "votedYes()", "7c24dfb0": "FundTransfer(address,string,uint256)", +"7c250440": "PEPETHER()", +"7c258163": "tickerData_counter()", +"7c25c66d": "setValueManager(address)", "7c25d997": "getRarityValue(uint256)", "7c25f260": "Government()", "7c261929": "query(string)", "7c262269": "isWorkFailState()", "7c265200": "NameGame(uint256,uint256,uint256)", "7c267b07": "Cryptrust()", +"7c269ff7": "reward_bank()", +"7c26d1d9": "setTradeMiningEndBlock(uint256)", +"7c27383b": "repayAll(address)", "7c280f44": "generate_random(uint256,string)", "7c28ddc1": "fiatPerAssetUnit()", "7c2926a8": "getHTLCHash(uint256,uint256,uint256,bytes32,int256)", +"7c298e84": "addWETHTokenPair(address,bool)", "7c29c514": "AgroeconomyToken()", "7c29e89a": "mintUnlockTimeBatch(address[],uint256[],uint256)", +"7c2a00bc": "maintainerShare()", +"7c2aca4a": "purchaseOBO(uint256,address,address)", +"7c2af6ee": "setClaimdateUpd(uint256,uint256)", "7c2b00fc": "SGCL()", "7c2b07e3": "EtherX()", "7c2b11cd": "arraySum(uint256[])", +"7c2b2e71": "previous()", "7c2b606a": "isAddressManager(address)", +"7c2b6ac0": "disputeChallenge(uint256)", "7c2b8d0a": "votedFreeze(address)", +"7c2badb7": "setGlobalPricingPaused(bool)", "7c2cf543": "ROLCToken()", +"7c2d0774": "unlockTranche(uint256)", +"7c2d0ebe": "defaultCommissionRatio()", "7c2d2326": "PostIL()", "7c2d86f7": "usePluginWhitelist()", +"7c2d93fb": "gonnaMint(address,uint256)", "7c2da7aa": "setValue(string,uint256)", "7c2db5ff": "payoutX(address,uint256)", "7c2e08a3": "isMinimumGoalReached()", +"7c2e19db": "yieldIsBest()", +"7c2e48ab": "getTotalTokenClaimable(uint256,uint256,uint256)", +"7c2ea207": "utilizationInfoOnBSC()", "7c2eb1c8": "distributeEther(uint256,uint256)", "7c2efcba": "v()", +"7c2f854a": "safeFriesTransfer(address,uint256)", "7c2ffbb3": "returnRate()", "7c3064f1": "refundStake()", +"7c30aa2b": "itisnecessary2()", +"7c312541": "requireIssuanceActive()", "7c313baa": "buyPriceAtIndex(uint256)", "7c31975f": "SolClub()", +"7c31efb1": "totalHolderFees()", "7c320853": "initialSale()", +"7c32523f": "GetFreeCoinAmounInUserAddress(address)", +"7c329830": "totalStakedBalance(address)", +"7c32ca00": "OrderPaid(uint256,uint256)", +"7c32cdd1": "topSize()", "7c331b52": "FlightDelayAddressResolver()", "7c337086": "CryptoDegree()", "7c33774d": "CluckCoin()", "7c3382ae": "setIcoTokenExchangeRate(uint256)", +"7c338725": "startChallengeWeiPervSPY(uint256,uint256)", +"7c33b853": "transferMeAvailableBeneficiaryERC20BalancesMulti()", "7c33ebfd": "transferToMany(address[],uint256[])", +"7c33fc05": "resumeNewDeposits()", "7c34689b": "ACchainToken()", "7c34752f": "stringToSig(string)", +"7c347bc3": "acoPoolMaximumOpenAco()", +"7c34a0a7": "safeBullTransfer(address,uint256)", +"7c34aac6": "_totalRegisterCount()", "7c34e853": "getCombinedTotalHP(uint256,int256)", +"7c35326a": "totalV2LPStaked()", "7c35384f": "addTradeRecord(uint256,uint256,uint256,uint256,address,address)", +"7c354d1d": "createDeal(uint256,uint256,bytes32,string,address,string,string,string,string,string)", +"7c358070": "invested(address,uint256,uint8,uint256)", "7c359dc3": "manualTokenTransfer(address,uint256)", "7c35b6ed": "setPriceBeforeGoalReached(uint256)", "7c35be7a": "isOpen(bytes32)", "7c360d1e": "calculate(uint16,uint8)", "7c3625e3": "SatoExchange()", +"7c3634ce": "CreateNewgame(bytes32)", +"7c365e1b": "moveStimulus(address,uint256)", "7c366cb5": "LADToken()", +"7c36b468": "_deposit(address[],address,uint256)", +"7c36bcda": "returnsUnnamedTuple()", +"7c370443": "MARKET_DEV_ADDRESS()", "7c372277": "ReserveTokensHolder(address,address,address)", +"7c3723cf": "setRewardForwarder(address)", "7c37559e": "CreateGLX(address,uint256)", "7c37605c": "startSellingGenes(uint256,uint256,address)", "7c377d74": "getForkReputationGoal()", +"7c37bcb8": "getStakeAmountByTokenIdAndDmmTokenId(uint256,uint256)", "7c38ce18": "tokensIssuedLocked()", "7c38ee53": "addContactRecord(string,string,string,address,string,string,int256,string,int256,address,string,int256)", +"7c38fec5": "updateVoteCasterVestingDays(uint256)", +"7c38fffc": "balanceOfCoupons(address)", "7c396b83": "f6()", "7c39759b": "kscBurnWhenMoveToMainnet(address,uint256,string)", "7c399142": "ITSToken()", +"7c39c9c9": "setUserDepFee(uint256)", +"7c3a0063": "applyEnter(bool,uint256,address,bytes32,bytes)", "7c3a00fd": "interestRate()", "7c3a1d32": "setWithdrawCreator(address)", +"7c3a3d5c": "notifyCustomToken(address,uint256,uint256,uint256)", +"7c3a660a": "markPerBlock()", +"7c3a81ad": "initRep(uint256,uint256)", "7c3aef0e": "cardDescription(uint8)", +"7c3af9fe": "_getConfigIdFor(uint64,uint64)", "7c3b1e06": "setcompany(string,uint256,string)", +"7c3b57fd": "setOldPBRAddress(address)", "7c3ba89e": "early_bird_minimal()", "7c3be5fb": "setVernamOriginalToken(address)", "7c3bf42d": "applications(address)", "7c3c0f89": "eastadsCredits()", "7c3c2611": "Retained(address)", +"7c3c3736": "getMeta2(uint256)", "7c3c4c83": "ARBITRAGECrowdsale(address,address)", +"7c3c7aeb": "Reverseaddress(address,address)", +"7c3ceda4": "addProviderModules(address[])", "7c3d30fd": "_bid(uint256,uint256)", "7c3e50ff": "balanceLocked(address,address)", +"7c3e861f": "bazarSwapClaimed(address,address)", "7c3eef61": "AbyssToken(address,address[],address)", +"7c3f1e8c": "deleverageOnce()", +"7c3f2ffa": "approve_257(address,uint256)", +"7c3f9309": "Payment(uint256,uint256)", +"7c3fcc38": "userReferrer(address)", +"7c3fd797": "setCumulativeQueuedGasAtEpochStart(uint256)", +"7c3fdc67": "claimComp(address[],address[],bool,bool,bool)", "7c3fe278": "endSto()", "7c3ffdee": "awardCup(uint8)", +"7c404703": "IPOhasTarget(uint256)", "7c405325": "unlockTokens(uint256)", "7c4057ae": "removeMasterNodes(address,uint256)", +"7c411c1a": "RebalanceLiquidity()", +"7c4149f7": "unConfirmedDividends()", +"7c41a39b": "thresholdSendToSafeWallet()", +"7c41ad2c": "pauseToken(address)", +"7c41c9a1": "getInviter()", "7c41de34": "_AwardedMissedBlockBonus(address,address,uint256,bytes32,uint256,uint256)", "7c423f54": "getAlerters()", +"7c426620": "btcAddressClaims(bytes20)", +"7c42b50f": "set(uint256,uint256,uint8)", "7c4338af": "getEarlyIncomeBalance(address)", "7c434fbb": "AT(uint256,string,uint8,string)", "7c435e6f": "updateEursPerEth(uint256)", +"7c4368c1": "safeTransferETH(address,uint256)", "7c436a6d": "ownerEnableRefunds()", "7c437918": "addPreSaleBuyer(address,uint256)", +"7c439326": "changeOwnershipNFTContract(address)", +"7c43a201": "addSeries(address)", "7c44066c": "summCashwolf()", +"7c4423a8": "defaultDecayPeriodVotes(address)", +"7c444b66": "DrawBenz(address)", "7c44546e": "SiliconValleyToken()", "7c44f160": "Tier_Starter_Registration()", "7c45c98a": "removeSpectatorBetFromGladiatorBattle(uint256)", @@ -71176,125 +130205,218 @@ "7c479343": "investSum()", "7c47965e": "isInCurrentGeneration()", "7c47ac44": "getProjectVerification(uint256)", +"7c47bc8c": "RESERVES_POOL()", "7c47df2f": "removeEligibleBurner(address)", +"7c481b40": "maxTokenReserve()", "7c48bbda": "tokensIssued()", +"7c48d1a0": "groupMaturityPeriod()", +"7c48ede5": "SetParticipantAgrHash(address,bytes32)", "7c48f8e7": "penaltyFraction()", +"7c498df7": "LogNewBlacklistedAddress(address)", "7c4a0552": "freezeBlocks()", "7c4a7831": "concludeSeason(int8,uint256,uint256)", +"7c4a80b0": "pendingAlloy(uint256,address)", +"7c4a84b8": "multiFill(uint256[])", "7c4aa44c": "saleStartEpoch()", "7c4b414d": "depositTokens()", +"7c4b67e2": "CFOshipTransferred(address,address)", +"7c4bc002": "purchaseIdtoTokenIds(uint256,bytes32,uint256)", "7c4c27c8": "isThisPuritanicalVersion()", "7c4cafd9": "startSecondaryCrowdsale(uint256)", +"7c4cc101": "createRequest(address[3],uint256[12],bytes)", +"7c4ce099": "pizzaIndexToApproved(uint256)", "7c4d18bd": "setMockBool(bytes4,bool)", "7c4d972b": "setRoundEnd(uint256,uint256)", "7c4db77d": "saleWallet()", +"7c4dd53e": "FULL_LIQUIDIATION_TRESHOLD()", "7c4deecb": "checkGameContinues()", +"7c4e560b": "configureReserveAsCollateral(address,uint256,uint256,uint256)", "7c4e7fbb": "QKL()", "7c4ecead": "startPresale(uint256,uint256)", "7c4edde7": "withdrawFrom(address,address,address[])", "7c4f8958": "SPECIALIST_STAKE_ONE()", +"7c4fdc00": "_tokenPresale()", +"7c503064": "approve_414(address,uint256)", +"7c50fb2f": "bonusTimeList(uint256)", +"7c512727": "Publish(uint256,string,string,string,bool)", "7c513a21": "arrIdx2lost(uint256)", +"7c516e94": "permitToken(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", "7c519ffb": "setTrading()", +"7c51f84e": "openPR(string,string,string,string)", "7c524b2e": "set_sell(bool)", +"7c5269c2": "createGen0AlpacaBatch(uint256[],uint256[],address)", +"7c52b2d4": "stakingPower(uint256,address)", +"7c52b71d": "managerLimit()", "7c52b934": "getTokenOrder(uint256)", +"7c52caa3": "withdrawBalance(int256)", "7c535f1f": "bonusAmount(uint256,address)", +"7c536216": "setUtpdu(uint256)", +"7c539718": "registerProperty(string,uint256)", +"7c5486a2": "setActivationTime(uint256)", "7c54aa1a": "deployCommunityBallot(bytes32,bytes32,uint128)", +"7c553651": "setFundManager(uint8,address)", "7c559d5f": "bonusPattern(uint256)", +"7c565fc3": "reloadExternal1(address)", "7c567bfe": "isSale(address)", "7c56b798": "addProject(address)", +"7c56bf40": "dvdPriceFloor()", +"7c56c5b0": "getMarketLength()", +"7c56d0fc": "totalSupplyProxy(address)", "7c56d40b": "LogFunderInitialized(address,address,string,uint256)", +"7c571665": "startToggleTaxExempt(address)", "7c57ad45": "newAsset(string,uint256,string,string)", "7c57d947": "tokenMinter(uint256)", "7c5817e1": "indexOfProvider(address)", "7c582304": "updateInvestmentTotal(address,uint256)", "7c58a4ed": "canPlatformFundingWithdraw(uint256)", +"7c58baf6": "getPrizeDistribution(uint256)", +"7c58ebfd": "tokenToIERC(address)", +"7c596fbf": "kajs()", "7c59cb3d": "setCSInterface(address)", "7c59f828": "getWizzType(uint256[2])", +"7c5a83e0": "simpleView(uint256)", +"7c5a875e": "auditedContracts(address,bytes32)", +"7c5b10f7": "_addToDelegatedByHolderToValidator(address,uint256,uint256,uint256)", "7c5b4a37": "adminWithdraw(uint256)", "7c5b5b06": "lastProcessedVaultId()", "7c5bfe81": "INITIAL_EXCHANGEABLE_TOKENS_VOLUME()", "7c5c2cef": "nPolls()", +"7c5c7845": "getApplicationAssetAddressByName(bytes32)", "7c5ca5a6": "ICOFY()", +"7c5cb527": "setPatient(string,string,string,string,string,string,uint256)", "7c5d4949": "calcInvesting(address)", "7c5d7980": "addRC(address)", "7c5df29b": "auctionDeklaEnd(address,uint256,uint256,bytes)", +"7c5e0706": "revokedFrom(address)", "7c5e16fd": "MAX_ALLOWED_BY_STAGE_2()", "7c5e2795": "INITIAL_PRICE()", "7c5e6949": "setlvlUpdate(string)", "7c5e83cc": "Bullex()", +"7c5e9ea4": "swapExactAmountOut(address,uint256,address,uint256,uint256)", +"7c5f5d22": "getUserInfo(uint256,uint256,uint256,uint256,uint256,uint256)", +"7c6055ac": "gAli()", +"7c607690": "isAuctionExpired()", "7c609885": "allowWorkersToContribute(address,address[],address)", "7c60fa60": "minReq()", +"7c610a7a": "getLeftTime()", "7c612409": "setClient(address,address,string,string,string)", "7c61b482": "coinAgeRecordForAddress(address,address,uint256)", "7c61d567": "transferRegion(uint256,uint256,address)", +"7c61e561": "calculateRemoveLiquidity(address,uint256)", +"7c61e865": "revokeContractAccess(address)", +"7c620412": "mmDeposit(address,address,uint48,uint256,uint256)", "7c622a65": "TEBT()", "7c623ce2": "boughtWithWhitelist()", +"7c6250ff": "rewardRateDelta()", +"7c6285a1": "ENV()", "7c62965e": "excess_withdraw()", "7c62e2a4": "getDog(uint256)", "7c63144e": "TokenUsed(uint8,uint8)", +"7c631dc2": "FreeFieldSize()", +"7c636eeb": "LastTimeForValue()", "7c645c21": "getPlayerLength()", "7c64a45c": "TOTAL_VOTE_PERIOD()", "7c64ac43": "vestingEnds()", "7c652e26": "CENT_DECIMALS()", "7c654303": "isFunded()", "7c65452c": "newValue()", +"7c658dc3": "tim(bytes32,address)", +"7c65a48d": "setClaimLimit(address,uint256)", "7c65f503": "initVault()", +"7c661949": "assetToAsset(address,uint256,address,uint256)", "7c66ae22": "play(uint256,uint256,address)", +"7c673e27": "UNICORE_Liquidity_Transfered()", "7c674695": "MarkedAsScam(address,address,uint256)", +"7c677540": "setReferenceBonus(uint256)", +"7c67a3e2": "time(address)", "7c67fb9f": "MIN_STARTING_PRICE()", "7c67fdf5": "bltOwnedAcc()", "7c67ffe7": "ownerSetBankroll(address)", +"7c684342": "calcKfToToken(uint256)", "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)", +"7c69a81e": "refundCombinedTransaction(address,address,uint256,uint256)", "7c69b5d1": "NewDeposit(uint256)", "7c69ef8d": "market2020TokenCreated()", +"7c6aa6f4": "bonusPeriodSec()", "7c6aafd1": "getRegularCarsForVariant(uint256)", "7c6ac2af": "withdrawal_Lem(uint256)", +"7c6afb5d": "DeleteCompany(bytes32)", "7c6b2d6a": "setV_R1(uint256)", +"7c6b37f6": "zodiacTokenURI()", "7c6b5b10": "amountFirst()", "7c6bd3e8": "preGrant(address,uint256)", "7c6bd96d": "extendStart(uint256)", "7c6db9b5": "changeMinimumWei(uint256)", "7c6e19a8": "UpdateTokenDailyExchangeAmount(address,address,uint256)", +"7c6e36c1": "paidStakingCoins()", "7c6e481c": "bancorChanger()", +"7c6e551d": "royaltyAmount()", "7c6e5809": "AEZtoken()", "7c6e607d": "SuicideContract()", +"7c6e9177": "checkorderPlaced()", "7c6e94e3": "migrationStarted()", "7c6eb7bb": "generateNewRandom()", +"7c6ed9ef": "neq(uint256,uint256)", +"7c6f419c": "ENCORE_Timelock_Vault()", +"7c6f6d1e": "approve_877(address,uint256)", +"7c6f945d": "getEnsRegistry()", "7c6fa5c2": "attackPrizeRatio(address)", "7c6fb02a": "getCrydrViewStandardName()", "7c6fb59d": "updateCreditBalance(address,uint256,uint256)", "7c6fdec5": "getStrategyTokenPrice(uint256,uint256)", "7c6fe7a9": "getAddressIdArray(address,uint256,string,string)", +"7c70701d": "MAX_ETH_PURCHASE()", "7c709fbe": "mxrjjToken()", "7c70b205": "windowLength()", "7c70c444": "DOXToken()", "7c70e791": "removeInspector(address)", "7c70e7fe": "currentRewardReleasePercentageRatePerYear()", +"7c70fb57": "getFeeRate(uint8)", "7c71c0eb": "getIsProjectBonus()", +"7c71df91": "setBcashPerBlock(uint256)", "7c7202e5": "setReceiver2()", "7c72d868": "sendDividendsEthers()", "7c72e273": "auctionFinalize(bytes32)", +"7c72ff13": "BondStartDateGetAt(address,uint256)", +"7c73cb17": "waffleTicketsSold(uint256)", "7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", +"7c74a174": "get_last_user_slope(address)", +"7c74cabd": "withdrawAllEtherByOwner()", "7c74d4d4": "JCCoin()", +"7c754b57": "contractAllowance()", +"7c755b53": "UNCOMMON_RARITY()", "7c759d0d": "lock(address,uint256,uint256,uint256,uint256)", "7c75c1b4": "distributeWithPolicy(address,uint256,uint8)", +"7c761bbd": "AllowPayoutToOtherAddress(uint256)", +"7c764fbb": "usdtTokenAddr()", +"7c7709a1": "getLastBlockCheckedNumLP(address)", "7c774111": "OF()", +"7c77b616": "onlyOwnerIfPaused(uint256)", "7c77b7c4": "getNumberOfDisputedDealsProDoctor()", +"7c77c949": "LogMinimumBondUpdated(uint256,uint256)", "7c77fad6": "AddMatch(string,string,uint256)", +"7c78008f": "sync_close()", +"7c78421c": "setTaxReceiveAddress(address)", "7c78cb13": "decrementQuantity(uint256)", +"7c78d6e3": "autoPoolGain(uint256,uint256,uint256)", +"7c7950f5": "getStakerDaysStaked(address)", "7c7959e0": "CryptoNumismat()", "7c796a83": "setGasUsage(uint256)", "7c799e90": "str2bytes(string)", "7c79c167": "stageHardcap(uint8)", +"7c79dcd5": "isComplaintPossible(bytes32,uint256,uint256)", "7c79ebce": "expired(uint64)", +"7c79ed46": "getClientRecordByAddress(address)", "7c7a52bf": "newChallenge(uint256,address)", "7c7b0ff4": "getRide(uint256)", "7c7b13b0": "PlayX50()", +"7c7be7d1": "getMarketOrderByID(address,uint256)", +"7c7c4253": "grantKeys(address[],uint256[])", "7c7c7695": "getAccountID(address)", "7c7c7c3c": "SUPER_ADMIN()", "7c7ce7df": "mintToPool(uint128,uint256,uint128)", @@ -71302,36 +130424,64 @@ "7c7d809b": "saleEndUnixTime()", "7c7dc098": "early_supporters_distribution(address[],address,address,uint256)", "7c7dd391": "TokensWithdraw(address,address,uint256)", +"7c7e752d": "OPTION_ADDR_PARAM_LOC()", +"7c7eaa5d": "staked(address,address,uint32)", "7c7ead51": "Wscchain(uint256,string,string)", +"7c7eaf1a": "checkpointRewardDelta()", +"7c7eda6b": "onPotAddup(address,uint256)", "7c7edd68": "PRHXToken()", "7c7eeaa1": "hirerLastResortRefund(bytes16,address,address,uint256,uint256)", +"7c7f3182": "collateralAuction()", +"7c7f84ee": "contractCodeHash()", +"7c7fa173": "liqTok()", +"7c7feaff": "bidNativeWithToken(uint32,address,address)", +"7c808f9e": "setRetargetThreshold(uint256)", "7c80bb4f": "getNameByAddress(address)", +"7c80eb99": "Pinned(address,bytes,uint256)", +"7c80fe55": "Created(bytes32,uint256)", "7c80feff": "getTokenIndicies(address,address[])", +"7c811aa9": "getDataManager()", "7c812015": "HedgeCoinCapitalToken()", +"7c81b9a6": "isOwnerProviderOrDelegate(bytes32)", +"7c81dcc9": "lendTo(uint256)", "7c81ff56": "TGE_SUPPLY()", +"7c823447": "increaseLockAmount(address,uint256)", "7c8255db": "sendGifts(address[])", "7c82a1d4": "reserveKY()", +"7c82bcd4": "TransferInteractionsChanged(bool)", "7c82eff7": "getZero(uint256)", "7c831bd9": "rateCoefficient()", "7c83b25c": "gettimelineandgoal()", "7c83fdf7": "createFiatInvestorRequest(uint256)", "7c842e5e": "updatePriceFromRealUnicornPrice()", +"7c846df4": "EthDeusUni(address[],uint256)", "7c84b40c": "makePrivate()", +"7c84c08e": "getAthleteFilterdByRaceRangeById(uint256)", "7c84c69b": "assertEq(bytes32,bytes32)", +"7c851fc0": "OpenedOldCrates(address)", +"7c8520de": "vetoes(uint256)", "7c853cc1": "WithdrawFromKickTheCoin()", "7c857566": "destructGame(address)", "7c858e02": "smallestUnit()", "7c85a757": "updateGooConfig(address)", "7c85ab3a": "boardMemberCancel()", "7c85df24": "setWHaddress(address)", +"7c867fd9": "ArbitrageTestUniswap(address,address,address,address,uint256,address)", "7c871d31": "setIcoDates(uint256,uint256)", +"7c87312b": "setGlobalRewardPerBlock(uint256)", +"7c87411c": "DeletePlayer(address,uint256)", +"7c88b010": "multiSendBNB(address[])", "7c88e3d9": "mintBatch(address[],uint256[])", "7c89e504": "removeSomeEthers(uint256,address)", +"7c8aa21b": "ContractFork(address)", "7c8af704": "resolveRound()", +"7c8afd51": "removeTrader()", "7c8b1fa2": "ShNShToken()", +"7c8b2c07": "createLMSRMarketMaker(address,address,bytes32[],uint64,address,uint256)", "7c8c2234": "pushMilestone(uint16,string,string,uint64,bool)", "7c8c6643": "unhint(bytes32)", "7c8d56b8": "numeraiTransfer(address,uint256)", +"7c8da46a": "investorsInvested(uint256)", "7c8db773": "CSE()", "7c8dc575": "rejectConsent()", "7c8de59a": "DCM(uint256,string,uint8,string)", @@ -71339,18 +130489,32 @@ "7c8e17e5": "teamOneTotalPlayers()", "7c8e4e25": "credosReserveAccount()", "7c8e8e69": "MarkLesterMiranda()", +"7c8edcfc": "fairProfitContract()", +"7c8ee703": "getAccountEthAddress(address)", +"7c8ee708": "currentUnderlyingToken()", "7c8f76a1": "issueTokens(address[],uint256[])", "7c8f8278": "setTotalTokenSupply(uint256)", +"7c8fa935": "houseRate()", +"7c8fce23": "jobs()", +"7c8ff53c": "setEmergencyWithdrawable(uint256,bool)", "7c8ff8ac": "tokenProof(uint256)", "7c905c9f": "preICOprice()", "7c9143c9": "_hash(uint256,bytes32)", +"7c91e177": "flipFab()", "7c91e4eb": "DISTRIBUTION()", +"7c91e504": "RejectedWithdrawn(address,uint256)", +"7c9297a9": "viewHasKey()", +"7c929d1d": "DISCOVERER()", "7c92a217": "c_MinFunds()", "7c930a10": "ETHERECASHTOKEN(uint256,string,string)", +"7c934826": "setOldClientRaindropAddress(address)", "7c935183": "test_deposit()", "7c937700": "revokeAllVulnerable()", +"7c939f35": "referee2N(address)", +"7c941a73": "BuyerMap(uint256)", "7c9473f6": "sellNoDecimals(address,uint256)", "7c94830b": "kairosOwner()", +"7c948adc": "issueBatch(address,address[],uint256)", "7c9542bd": "LogWalletUpdated(address)", "7c955583": "pendingWhitelistHash(address[])", "7c95ef3f": "privatePlacementSupply()", @@ -71358,192 +130522,390 @@ "7c968f5d": "get_token_data_buyable(uint256)", "7c96f680": "MyAdvancedToken(uint256)", "7c97479b": "cardSupply()", +"7c974fc4": "exerciseAccountsFrom(address,uint256,address[])", "7c976dbd": "tokenCreationCapOverall()", +"7c97e6ec": "node(bytes32)", "7c97ffe2": "DeusToken()", +"7c982b3b": "getVotesByProposalsName(string)", "7c987ba4": "getMemberPayed(address)", "7c989b45": "setBonus(uint256,uint256,uint256,uint256,uint256,uint256)", +"7c990052": "logMessage(string)", +"7c990aab": "setResponder(address)", "7c996d9e": "IndiaStocksCoin()", +"7c998bda": "unpack(address,uint256,uint256,bool)", "7c99922d": "founderTokensVested()", +"7c9ab1cf": "placeBet(string,string,string)", +"7c9ad11a": "MonumentSold(uint256,uint256)", +"7c9aea7d": "filterLiquidations(address,address[])", "7c9b0892": "lnUpperBound(uint256,uint256)", "7c9b387b": "maximumClaimPriceWei()", +"7c9b7fdd": "getUserInfo(string)", "7c9c3d89": "mintCoinsForOldCollectibles(address,uint256,address)", "7c9cbd38": "changeTeamTokens(address)", "7c9cd7df": "changeDeveloper_only_Dev(address)", +"7c9cea42": "OnTransactionFail(address,bytes32)", +"7c9d536b": "__PausableUpgradeable_init()", "7c9d564f": "_pRand(uint256)", "7c9d8bdb": "getBetsByCategory(bytes32)", "7c9f4941": "SplitSend(address,address)", +"7c9f890f": "ProfileDB(address,uint256)", "7c9fe2a7": "train2(uint256)", +"7ca0030c": "currentlyScheduledTransactions()", "7ca005b3": "generateProof(string,address,address,uint8)", "7ca013e6": "getRateToPxlAmount(uint256,uint256)", "7ca01b2a": "getTestFour()", +"7ca153af": "checkTransferFee(address,uint256,address)", "7ca1a66c": "resumeLotto()", "7ca1cb48": "approveCurrencyTokenAddress(address,bool)", "7ca21b37": "setMinPersonalCap(uint256)", "7ca24d95": "changeEndTime(uint64)", "7ca2795f": "AdvanceQueue()", +"7ca2a3c8": "getManagerLimit()", +"7ca2f5f3": "stakerRewardValue()", +"7ca301ae": "ArenaTimeClear(uint256)", "7ca31724": "tokenId(address)", +"7ca36f9a": "arbw(uint256,address)", +"7ca3c7c7": "trade(bytes32,uint256,uint256,bytes32)", +"7ca3d498": "getCurrentBlockHash()", +"7ca44fcf": "calculateReward(address,address)", +"7ca5112c": "systemFeesCollector()", "7ca54248": "lastSaleInHGT()", "7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", "7ca5d8fa": "read_u8()", "7ca60997": "rewardComment(address)", "7ca63061": "LibraCreditNetwork(uint256,string,uint8,string)", "7ca64683": "hasFiveStepWithdraw()", +"7ca6dc84": "isThisContractWeird()", +"7ca6e31d": "getIncrement(uint256)", +"7ca72efa": "setRewardTimeHODLTime(uint256,uint256)", +"7ca76835": "onTx(uint256,address,bytes32,uint256,bytes32,uint256,uint256)", +"7ca76c94": "bO()", +"7ca81460": "book(address)", "7ca823d5": "getAverageChainWork()", "7ca828d0": "_canBreedWith(uint256,uint256)", +"7ca87cb6": "calculateFee(address,address,uint256)", +"7ca87daf": "getImplFromVersion(string)", +"7ca91723": "getSumElements256()", "7ca9429a": "getOfferCount(address,address)", +"7caa05d7": "addliq_andStake()", "7caae38c": "calluseraddress(address,address)", +"7caaea99": "addPancakePriceToken(string[],address[],bool[])", +"7cab1041": "getNumberOfCompleted(bytes32)", +"7cab2a21": "setKeyAddress(uint256,address)", "7cab5e8c": "removeApproval(address)", "7cab9ba2": "setReceiver()", +"7cabb7cf": "getAmountOut(uint256,uint256)", "7cac4c7d": "JOY()", "7cac9736": "computeResult()", +"7caca79c": "isDailyEnabled()", +"7cad7459": "txnExecutedPerBlock(uint256)", "7cad997f": "purchaseByEMONTImpl(uint16,uint256,uint64,address)", +"7cae2967": "WithdrawWallet(address)", "7cae6cb5": "determineEdition(uint256)", "7cae8509": "delete_blockedAddress(address,address)", +"7caf0b6d": "BattleHistoryChallenger(uint256,uint256,uint8,uint16,uint32,uint32,uint32,uint32,uint32,uint256)", "7caf3115": "MovieWorld()", +"7caf5128": "purchase(uint256,uint256,uint256,uint256)", "7caf59d9": "addPullRequest(bytes32,bytes32,uint128)", +"7caf9ae5": "isDDEXETHAddr(address)", +"7cafabc5": "safeAddAmountsToAirdrop(address[],uint256[])", "7cb04b87": "running_id()", "7cb070c7": "OPL()", +"7cb09c25": "renounceSettingsManager()", +"7cb0c8f1": "setSizeLimits(uint256,uint256)", +"7cb0d2f2": "lastGiftTime()", +"7cb11028": "hatcherySquirrel(address)", "7cb1442c": "f1(uint256,uint256)", "7cb1bb0b": "setOraclizeGasExtraArtwork(uint32)", +"7cb251d5": "holdingsContains(uint256,uint256)", "7cb25bc7": "dividendCount()", "7cb2b79c": "setTokenManager(address)", "7cb2c15b": "getTXdatabyCode(bytes32)", +"7cb2f8f7": "_secondaryPrice()", +"7cb31271": "f32(int256)", +"7cb332bb": "updateTeamWallet(address)", +"7cb3370b": "isPlatformAuthorized(string)", "7cb34d2d": "register(bytes32,bytes32,bytes32,string)", +"7cb45615": "setTokenHandlerAddr(uint256,address)", "7cb46307": "NewContent(bytes32)", +"7cb49539": "sfr()", "7cb4e22a": "IEIP165()", "7cb4ef0e": "getHashRateOf(address,uint256)", "7cb51761": "setMaxPayments(uint256)", +"7cb523c4": "unstakeT1(address,uint256)", +"7cb52737": "checkExcluded(address)", +"7cb557b2": "indexerContract()", "7cb56698": "rescueLostFighter(uint256,address)", +"7cb58250": "BeneficiaryRateUpdated(uint8,uint8)", +"7cb58e56": "testStrLenBytes()", "7cb5d0ef": "Airchain(uint256,string,uint8,string)", +"7cb63e65": "countList(address)", +"7cb64759": "setMerkleRoot(bytes32)", "7cb6a6b2": "generateContract(uint256,uint256)", "7cb6b35d": "adjustLimitBetweenIssueAndNormal(uint256,bool)", "7cb6cf3e": "ETH_SIGN_PREFIX()", +"7cb73555": "buyX3Level(uint8)", +"7cb7e15c": "BlockedAddress(address)", "7cb8adc7": "s9(bytes1)", +"7cb8f8ba": "getDailyUnspent(address)", "7cb916b9": "withdrawAlltokenFunds(address)", "7cb91d84": "slots_left()", +"7cb95d00": "rebaseRate()", "7cb97b2b": "set_owner(address)", +"7cb98b9f": "existsv2(bytes32)", +"7cb9ac42": "liquidateBorrowCheck(address,address,address,address,uint256)", "7cb9cf54": "removeSeller(address)", "7cb9da88": "setIncludes(uint256,uint256)", "7cba3f04": "PriceWeekThree()", "7cbab0cb": "updatewallet(address)", +"7cbab1c7": "beforeTokenTransfer(address,address,uint256)", +"7cbac8e5": "EndOffer(bool)", +"7cbad4b3": "newSideChain(uint256,address[])", "7cbae071": "setPresalePerEth(uint256)", +"7cbb102c": "pendingBeeswax(uint256,address)", "7cbb6934": "generateRandomNum()", +"7cbb9964": "propertyId(bytes32)", "7cbba335": "get_order_book_length(string)", +"7cbbea85": "getUserPredictionPoints(address,uint256,uint256)", "7cbbf1da": "proofType_Native()", +"7cbc04f1": "Redeemed(address,address,uint256,uint8,uint64)", +"7cbc056c": "gogoing(address[],uint256[])", +"7cbc0ba7": "balancesVault(address)", "7cbc2373": "redeem(uint256,uint256)", "7cbc4eb6": "lost(uint256)", "7cbc6903": "totalBidCount()", "7cbcc254": "__reset__()", +"7cbcd571": "removeVote(uint256,address)", +"7cbcfee2": "PRICE_ORACLE_STALE_THRESHOLD()", +"7cbd32f4": "issuerFee()", "7cbd3508": "_unpackExpValue(uint256)", +"7cbd3b73": "jobOtherIdStates(bytes)", "7cbd5444": "isPriv()", +"7cbd5bc3": "passerArtisteSuivant()", "7cbd9e8d": "existCaller(address)", +"7cbdc403": "_addToGiveawayAmount(uint256)", +"7cbdd8a7": "convertTo18(address,uint256)", "7cbe0f32": "addOpenAction(string,string,string,string,string)", +"7cbe10e2": "maxForcedExitAge()", "7cbe9e41": "DANKSIGNALS()", +"7cbed3e0": "getContinuousBurnRefund(uint256)", "7cbf2bdc": "CapFlexed(uint32)", +"7cbf876b": "setDesignatedVoting(address)", +"7cbf9083": "fondos_contract(uint256)", "7cbfb8a5": "TransferTokens(address,uint256)", +"7cbfea78": "transferAndCallData(address,uint256,bytes)", "7cc07974": "HFTCrowdsale(address)", "7cc08d53": "partProvider()", +"7cc0a9d4": "setTimeLockAddress(address)", "7cc0c3a7": "controllers()", +"7cc0d906": "securityPeriod()", "7cc0e670": "freezeAccountForContract(address,bool)", +"7cc11e7d": "setMaxLeverageRatio(uint256)", "7cc1303a": "trade(uint8[2],bytes32[4],uint256[7],address[6])", +"7cc19017": "transferPrize(uint256)", +"7cc1b225": "amtWHITELIST(address)", "7cc1c640": "getActualPriceOfCardOnBuyAuction(uint256)", +"7cc1c7c8": "_ownerOnly()", +"7cc1d756": "nominateAccountToMerge(address)", +"7cc1d786": "LogLOTClaim(address,uint256,uint256,uint256)", "7cc1e28d": "setValidatorRewardPool(bytes32,uint256)", "7cc1f867": "getContractInfo()", +"7cc2097d": "registerPartner(address,uint256)", +"7cc216a6": "setAddressRefer(address)", +"7cc2c3c1": "referenceCodes(address,uint256)", +"7cc2efe3": "notifyRewardAmountAndDuration(uint256,uint256)", "7cc2fe49": "setResourcesPrimaryManager(address)", +"7cc33f75": "book_author()", "7cc35d99": "historyIt()", +"7cc3909e": "faucet(string,uint256)", +"7cc390fc": "currentGovType()", "7cc3ae8c": "endAt()", "7cc3b48e": "withdrawKrowns(address,uint256)", "7cc3beb2": "acceptArbiter()", +"7cc45fda": "backendSetReferer(address,address)", "7cc48875": "Slots()", "7cc49427": "RemoveLock(address,uint256)", +"7cc4c1d8": "applyForBuyout(uint256,uint256)", "7cc4e55f": "lowestAskPrice()", "7cc4ef14": "purchaseLand(uint256,uint256,uint256)", +"7cc4fc05": "enterMarket(address[])", "7cc589f9": "BlocklancerEmploymentContract(string,address)", +"7cc5a42e": "newRegistryBYOToken(address,uint256[],string)", "7cc666da": "MoratoriumTransfers(uint256,address[],address[])", +"7cc79113": "performanceMax()", +"7cc7c402": "transferMultipleValue(address[],uint256[],string)", +"7cc8364e": "_authAddress(uint256)", +"7cc918d1": "batchMint(string,uint256)", "7cc9e4f0": "registerParticipant(address)", +"7cca687b": "FEE_ACCOUNT()", +"7cca7f07": "preETH()", +"7cca8aeb": "minionManager()", "7ccaa9fa": "calcMerkle(bytes32[],uint256,uint256)", +"7ccb13c4": "setup_key(string)", +"7ccb6a64": "getDocument(string)", +"7ccb9bc6": "MIN_LOCKED_RATIO()", +"7ccbfe7c": "setWithdrawSigner(address)", +"7ccc2d05": "setAllowLimitTimeTransfer(bool)", +"7ccc3856": "createTables(bytes32[],uint256[],uint256[])", +"7ccc586e": "isDisputed(uint256)", "7ccc5aea": "DSPParametersChanged(address)", +"7ccc5d35": "payBack(uint256)", "7ccc7e94": "inv_contract()", +"7ccca2d5": "limitAmountSaved()", "7ccce851": "isBlacklistedUser(address)", "7ccd099d": "test_32_assertGasUsage100Boards()", "7ccd3f79": "setAA(uint256)", +"7cce8e57": "HALF_DURATION()", +"7ccec00c": "setAcceptTransferFeeAddress(address)", "7ccec110": "TestWorldSnapshot(uint256)", "7ccefc52": "minimumMakerProtocolFee()", "7ccf0d44": "_setAuctionObj(address,uint256,uint256)", +"7ccf5d0a": "addGame(uint8,uint256,address,uint256,uint256)", +"7ccf60db": "getProductContractAddress()", +"7ccfd081": "issuePynthsUsdc(uint256)", "7ccfd45a": "removeSubUser(address)", "7cd022d4": "gen0PresaleLimit()", "7cd07e47": "migrator()", +"7cd07fed": "transaction(string)", +"7cd0ca50": "user_code(address)", +"7cd0d08a": "getBotReward(address,uint256)", +"7cd11ea1": "adminAddressesByGameId(uint256,uint256)", "7cd208b6": "requestRefunding()", +"7cd2d47c": "resolveGame()", "7cd30fe3": "MarketingDevelopmentAddress()", "7cd3229a": "board()", +"7cd3431a": "wantIsWBNB()", +"7cd3827b": "external_call(address,uint256,bytes)", "7cd3969d": "getUnsoldReceived(uint256,address,address)", +"7cd3b646": "castVoteERC721(uint256,uint256,uint256)", +"7cd3d2cd": "cEthToken()", +"7cd3d7e7": "flashloanPunkCallback(uint256,uint256,bytes,bytes)", "7cd44272": "getConversionRate(address,address,uint256,uint256)", "7cd4559c": "_rewardApprovers(address)", "7cd49414": "participate(address,string,bytes32[],bytes32[])", "7cd49fde": "_counter()", "7cd50577": "setTradable(bool)", +"7cd517a4": "PynthsTotalSupplies()", +"7cd570b6": "sm()", +"7cd5a4a0": "timeLockAddresses(uint256)", "7cd64c79": "AdvancedERC20(uint256,string,string)", +"7cd69eb4": "pendingIvault(uint256,address)", "7cd6a7fd": "setSettings(uint256)", +"7cd6ad1c": "approve_100(address,uint256)", "7cd73941": "withdrawBAT(uint256)", +"7cd7b41c": "getWeiPriceByMetadataUri(string)", "7cd7c2bd": "setAnimalMeta(uint256,string)", +"7cd844f5": "setAutoPool(uint8,uint256)", +"7cd8524c": "balanceTimeOf(address)", "7cd87ee9": "Libertax()", "7cd9b0f8": "userHasHunterLicence(address)", "7cda71a6": "preSaleTotalSupply()", "7cdacb98": "setContractPartner(address)", +"7cdad1ea": "showRankInfo()", +"7cdb51e9": "Debug(string)", +"7cdb808d": "calculateCollateral(uint256,uint256)", "7cdbae63": "addRegistryIntoTagsIndex(address)", +"7cdc1cb9": "holdsRole(uint256,address)", +"7cdc2972": "redeemERC1155(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"7cdcc30e": "getTicketsPurchased()", "7cdcc514": "replyThread(uint256,string,string)", +"7cdccfc8": "minterPaused()", "7cdcdf23": "RenderTokenCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", "7cdd053a": "addRace(uint8,uint8,uint8)", +"7cdd0dee": "Rebalance(address[],uint256[],uint256,uint256)", +"7cdd3fde": "slip(bytes32,address,int256)", "7cdd8419": "getEtherPriceforDapp()", "7cddc1de": "checkBonusTokenHoldingPeriodRemained(address)", "7cde2a7e": "setCount(uint256,uint256)", +"7cde4c82": "BonusLoyaltyDeposit()", +"7cde6a6a": "payEth(address,address,uint256)", +"7cdeba48": "breedingGOLDCost(uint256,uint256)", +"7cded954": "Register_as_Seller(address)", "7cdee6fb": "buySpaceship(uint16)", "7cdef83c": "debtEngine()", +"7cdf18ca": "getDeflationaryCount()", "7cdf6d0b": "TranslateME()", "7cdf8ace": "adminCommand(uint8,address,uint256)", "7ce01daf": "rollSystem(uint256,address)", +"7ce053de": "__pickleJar()", +"7ce112fc": "time_sum(int128)", "7ce1b194": "ModernTokenPlus()", "7ce1db53": "ShowNextCliff(address,uint256)", "7ce1e2eb": "releasedBountyTokens()", "7ce2432b": "lbrsToken()", "7ce26195": "approveGame(address)", +"7ce27f45": "reduceToLimit(address)", +"7ce2cc7f": "MIN_CROSS_DOMAIN_GAS_LIMIT()", "7ce2d863": "_calcCheckoutTime(uint256)", "7ce335ac": "amountwon()", "7ce3489b": "setFeePercent(uint256)", +"7ce3f5c6": "BrokerTransfer(address,uint256,uint256)", "7ce50441": "updateTimer(uint256,uint256,uint256)", "7ce52eb6": "distributePrizes()", "7ce56303": "deployVestingContract(address,address,uint256,uint256,uint256,bool)", "7ce5b85e": "transferBuy(address,uint256)", +"7ce5ccd0": "flashSwap(address,uint256,address[])", "7ce5f9da": "DIYToken()", +"7ce63acb": "RoundCount()", "7ce645a6": "fundsAreAvailable()", "7ce65725": "TEC()", "7ce67d60": "initLoan()", +"7ce6ba10": "CurrentUserReferrerAmount(address)", +"7ce6d920": "buyEvent(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "7ce6e4ca": "getData_1()", "7ce7c990": "transfer2(address,uint256)", "7ce7d660": "CAF1(address)", +"7ce845d0": "getLockedInPendingDelegations(address)", "7ce84784": "createtoken(string,string,uint256,address,address)", "7ce85957": "setEthCollector(address)", +"7ce87569": "MIN_HELD_TOKEN_DENOMINATOR()", +"7ce8956c": "getTokenAllowances(address,address,address[])", "7ce8e196": "test_claim()", "7ce901e7": "TestContract(address)", +"7ce91411": "pricing()", +"7cea5aff": "minRequiredCollateral(bytes32,address)", +"7cea651f": "positions(bytes3)", +"7cea8719": "SetGuardianRune(uint256,uint256)", "7ceac0b8": "TokenSale(address,uint256,uint256)", "7cead212": "dissolvedIndexToApproved(uint256)", +"7ceb4c97": "seizeCheck(address,address)", +"7ceb6a2f": "getRetailerAgent(address)", +"7cebee8b": "openUSDCVault(uint256,uint256,bool)", "7cec3a3a": "getBUS(bytes32,uint256)", "7ced3d4c": "validArb2(address)", "7ced55c2": "pvpPaused()", +"7cedbc1e": "_src20Factory()", +"7cedfad5": "SetUserGroup(address,address)", +"7cee67dc": "testNetGenesis()", +"7cee8b7b": "tokenSupplyOf(address)", "7cee8e70": "subTotalSponsored(address,address,uint256)", "7cee919c": "getCurrentHash()", "7cee9ee8": "placeBet(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"7ceeb05e": "OLY()", +"7ceeb880": "mark(address)", +"7ceee442": "_rateIsStale(bytes32,uint256)", "7cef6047": "getNavHistory(uint256)", "7cef6966": "addLaureato(string,string,string,bytes32)", "7cefcc52": "burnedCount()", +"7cefd094": "SWAP_3(uint256,uint256)", "7cefd9f8": "initCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"7cefdd5d": "getPublicKey(address,bytes32)", +"7cf0f5cd": "setDebtClean(bytes32,bool)", "7cf0ffcb": "forceDivestAll()", "7cf12b90": "unFreeze()", "7cf12ff8": "registryRequestSerialNumber()", "7cf141fd": "removeGlobalAdmin(address,address)", +"7cf147e9": "depositAndBorrow_Eth(uint256,uint256)", +"7cf1ffc3": "SpudPot()", "7cf2b9e4": "updateVotingContractAddress(address)", +"7cf2ed22": "withdrawDeposits()", "7cf2f670": "Pinakion(address,address,uint256,string,uint8,string,bool)", "7cf37493": "finalizeNOK()", +"7cf37787": "makeSellOrder(uint256,uint256)", +"7cf3ea2e": "withdrawOneTokens(address,uint256)", +"7cf43d8c": "withdrawable(bytes32)", +"7cf48bf0": "borrowedTotalSupply()", +"7cf49c80": "intMinC()", "7cf4c543": "createTransaction(uint256,address)", "7cf52f3c": "getPrevRoundWinner(uint256)", "7cf5d66f": "notifyTokensReceived(address,uint256)", @@ -71551,29 +130913,55 @@ "7cf62838": "EIP20ByteCode()", "7cf6babf": "BasicSprout()", "7cf6be2c": "createBid(bytes32,address,address,address,uint256,uint256,uint256)", +"7cf75ca3": "transferRAMDevFee()", "7cf7b9f4": "determineDate()", +"7cf7cc38": "pzd()", "7cf7e0e2": "VLCCoin()", "7cf7f740": "getBuildingInfo(uint256)", +"7cf7fd2b": "getTotalFeesProvision()", "7cf846c9": "registerManoContract(address,bool)", +"7cf89030": "riskFund()", +"7cf8a2eb": "ADDR_REVERSE_NODE()", "7cf90fcc": "addItem(address)", "7cf99c33": "getIsMigratingFromLegacy()", +"7cf99f0f": "show_eth_rate()", "7cfa1133": "Baxgold()", +"7cfab0cb": "getStaticPricePPM(uint256,uint256,uint32)", "7cfb1e66": "TeamSum()", "7cfb6052": "setPremium(int256)", +"7cfb9d7f": "poolStakerDeposits__amount(address)", +"7cfba8ee": "enableDefaultStaticCalls(address)", "7cfbc7a5": "setMaxBetAmount(uint256)", +"7cfc1da3": "onDevelopmentStage(address,uint256,uint256,uint256,address)", +"7cfd20bf": "BiathlonToken(address,string,string,uint256,address)", +"7cfd312d": "govSetTreasury(address)", "7cfe18c0": "internalCalculateEthersWithBonus(uint256)", "7cfe19af": "A_Free_Ether_A_Day()", "7cfe7a25": "BankhadCoin()", "7cff33c7": "setMainSaleParameters(uint256,uint256,uint256)", +"7cfff908": "Deposit(address,address,address,uint256)", "7d007ac1": "setProposalDuration(uint256)", "7d00818c": "allowedAddressesOf(address)", "7d00848a": "getSinistre()", +"7d016be2": "setMintFixed(address,uint256)", "7d019f87": "isPreSaleClosed()", +"7d01a0dd": "verifyCause(uint256,bool)", +"7d01a517": "changeEndpoint(string)", +"7d021c91": "burnNonFungibleBatch(address,uint256[])", +"7d0221b7": "_firstRewardAmount()", +"7d02722f": "purchaseLevel(uint8,uint8)", +"7d02b1a3": "getTypeCount()", "7d02bc1c": "getOldest()", "7d02db72": "CryptoRUB()", +"7d03238f": "getInvestmentCurrencyLen()", +"7d03360a": "setWithdrawals(uint256,uint256,uint256)", +"7d03504a": "totalHold()", "7d036b0d": "finishProofPhase(uint256)", "7d0381a7": "notify(address,uint256,uint8,uint8,uint8,uint256,uint256,bool)", "7d0385c2": "createPromotionalRenewal(uint256,uint256)", +"7d03889d": "ChangeTax(uint256)", +"7d039f3b": "updateDocument(address,bytes32,uint8,uint8,bytes32)", +"7d03abbf": "initUniswapZAP(address,address,address)", "7d03c394": "Logs2(uint256,uint256,uint256,uint256,uint256,uint256)", "7d03e603": "GetUserExtraData2(address)", "7d03f5f3": "newGame()", @@ -71581,16 +130969,25 @@ "7d04d239": "setTokenMintApproveReset(address,address,address,address)", "7d051cf3": "getTokensAcquired(address)", "7d052a2e": "processReservationContribution(address,uint256)", +"7d056b59": "leapAddr()", "7d06053b": "perturb(bytes32)", "7d065c93": "getPayout()", +"7d067173": "addFarmingToken(uint256,uint256,bool)", +"7d06bcec": "TeamVestingSupply()", "7d075efb": "withdraw(address,address,address,bytes)", +"7d076556": "totalDcdcV()", +"7d078e13": "BIND_STATUS_TIMEOUT()", +"7d079951": "addProviders(address[])", "7d087715": "getwithdrawableAmount(address)", "7d087f47": "gamblerevent(address,uint256)", "7d091a7e": "pct(uint256,uint256,uint256)", "7d094533": "announceVictory(string)", "7d0981dd": "ModifyMine(address,bool,string,uint256)", +"7d09bf91": "testAnotherComplexCombination()", "7d09f560": "Equio(string,address,address,bytes32,uint256,uint256)", "7d0a5e3b": "fightWIthMob(uint256,uint256)", +"7d0a632e": "kovanDydxSoloMarginAddr()", +"7d0ad545": "orderSizeMultiplierFactor()", "7d0b4c8b": "withdrawEquity(uint256,bool)", "7d0b4d60": "migrationEnded()", "7d0bc9c6": "tier_action(uint8,uint256,uint256,uint8,uint256,uint256)", @@ -71600,134 +130997,256 @@ "7d0e6aa9": "BitrootCoin()", "7d0e6b6f": "setNextDiscountTTMTokenId1(uint64)", "7d0e750d": "getMyTime()", +"7d0e81bf": "isSuperNode(address)", "7d0eb9b9": "RemoveVerifiedInfo(bytes32)", +"7d0ee640": "SetNewCreator(address,uint256)", +"7d0ef197": "executeOperation(bytes32,address,address,uint256,address)", "7d0f023d": "_deleteBytes(bytes32)", "7d0f7528": "getFromList_(uint8,uint256)", +"7d0f7a88": "coins(address)", +"7d0f7ed5": "getTokensForERC20(address)", +"7d0f9713": "acceptsEthOffsets()", +"7d0f99c2": "approveSpecial(address,address,uint256)", +"7d0fdce9": "OracleDeployed(address,address,uint256,bytes,address)", +"7d0ffe6b": "removeSmartPoolByAddress(address)", "7d103f14": "getBallotBook(uint256,uint256,uint256)", +"7d10a4d9": "setTargetByBytes(bytes4,address)", "7d1108f5": "getAssetData(uint256)", +"7d110a03": "Preallocated(address,uint256)", "7d112d64": "authenticateVoter(string)", "7d1157c8": "rawSendEther(bytes32)", "7d1173b0": "DGAMEToken()", +"7d11a932": "LogSkipPreparePaymentReferrer(address,uint256,uint256)", "7d11f020": "oracleName()", +"7d1244c9": "addManyToVerifiedList(address[])", "7d124a02": "setRewardAddresses(address,address,address)", "7d1286f6": "InterfaceId_ERC721Exists()", "7d128d2e": "checkAgentSign(address,address,bytes32)", "7d12b689": "checkPoolsDone()", +"7d131c2a": "setNewSpender(address)", "7d136133": "SimpleATM()", "7d13a256": "highFundingGoalReached()", +"7d144953": "transferLimaGovernanceOwnership(address)", "7d14500a": "Sukiyaki()", "7d14c8df": "setStaleTime(uint256)", +"7d14e602": "NewReferrer(address,uint256)", "7d150529": "countdownTimeLeft()", +"7d154034": "addToken(bytes32,bytes32,address)", "7d1541ad": "listDapp(string,string,string)", +"7d15fe05": "createToken(string,uint32)", +"7d162668": "getTokenByIndex(address,uint256)", +"7d163a5c": "printCopy(uint256,uint256)", +"7d16454c": "approve_708(address,uint256)", +"7d16b324": "toString(bytes32,uint256)", +"7d16bef7": "createSaleAuctionERC20(uint256,address,uint256,uint256,uint256)", +"7d16c9ec": "stakeAmountLPLv2()", +"7d170283": "sTot()", +"7d170e26": "getUserLimitIntraAsset(address)", "7d1710e4": "saleBalanceOf(address)", +"7d172bd5": "vaiVaultAddress()", +"7d179904": "principal_token_addresses(uint256)", +"7d17ccb3": "TENS_Total_LP_Supply()", "7d1842ec": "getPayeeBalance(bytes32,uint8)", +"7d185d4f": "regtkncount()", "7d18a197": "IndoAset()", "7d19514d": "addFunds(uint256,uint256,bytes32,uint256)", +"7d19579c": "arbp(uint256,uint256,uint256,address)", +"7d1962f8": "pin(bytes)", +"7d19ba23": "restartBlock()", "7d19c777": "Emission(address,uint256,uint256,uint256,uint256,uint256)", "7d19e292": "transferTokensToContractOwner(uint256)", "7d19e596": "getEscrow(uint256)", "7d19ec9d": "getUserAccount(bytes32)", "7d1a6e3f": "compareTo(string,string)", +"7d1b0acd": "setDAIContract(address)", "7d1b2666": "fibokenCreatedCount()", +"7d1b34d8": "addTokens(address)", +"7d1b720a": "token_balance()", "7d1bd3ea": "setClientSupply(address,uint256,uint256)", +"7d1c2b52": "amIBottlenose()", +"7d1c54f8": "getFirstWithdrawalBonus(address)", +"7d1c7a52": "getEWFBalance()", "7d1ca9fd": "setBeneficiary2(address)", "7d1d0553": "convertToMiniUI(uint256)", +"7d1d4e56": "voyage_fin()", "7d1d7fb8": "settlementFee()", +"7d1db4a5": "_maxTxAmount()", +"7d1ddd06": "pendingRewardAmount(address)", +"7d1e350a": "krauserPerBlock()", "7d1e97a1": "cardTokenAddress()", "7d1ea6d4": "m_token()", +"7d1eb004": "calcPrice(uint256,uint256,uint256,uint256)", +"7d1ec28e": "maxInvestorsByJurisdiction(uint256)", "7d1f067c": "EthBankRoll(uint16)", +"7d1f24c9": "ensureCurrentTermRandomness()", +"7d1f46e1": "targetCollateralCToken()", "7d1f561b": "set_pre_kyc_iconiq_bonus_denominator(uint256)", +"7d1fcbfa": "getTotalReward()", "7d2026cd": "distributeWinnings()", "7d2044cc": "AuctusStepVesting(address,uint256,uint256,uint256)", +"7d20a24f": "BuyNormalAddress(address)", "7d211c75": "peth()", +"7d2175f2": "Retrieve(address,uint256)", "7d21ce4d": "_Mint(address,uint256)", +"7d22026a": "godWithdrawTaxes()", +"7d2205d5": "distributeTkn(uint256[],address,address[])", "7d2211d6": "setStatus(string)", +"7d228d0e": "tokenTypePrices(uint256)", +"7d22af89": "sendMeMoney(uint256)", +"7d22b78a": "ownerToIds(address,uint8,uint256)", "7d22e9df": "clearAllocatedAndSalaryTokens(address,address)", "7d22f431": "delegatePercent(uint256,uint256,uint256)", +"7d22f9ab": "getServersAddresses()", "7d230dfd": "wedding()", +"7d235818": "uint2HexStr(uint256)", "7d236928": "getGenesMarketAddress()", +"7d23cdca": "getOwnerCSPIds(address)", "7d2402d6": "inPresale()", "7d240b9c": "setLockToken(bool)", "7d2429a8": "long_party()", "7d242ae5": "setBasePrice(uint256,bytes)", "7d24a8a1": "returnToken(address,uint256)", "7d24cd18": "onExecuteMessage(address,uint256)", +"7d252c33": "InitialStakeWithdrawn(address,uint256,uint256)", +"7d25b1df": "_divisionWithRound(uint256,uint256)", "7d25d7cd": "tokensToTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"7d25e39d": "getReason()", "7d263245": "COOLDOWN_TIME()", "7d264bad": "adexTeamAddress()", "7d268ac1": "ArtworkCore()", +"7d26eef9": "getPosition(string,address)", +"7d27d66c": "addCredit(address,uint256)", "7d27ecf9": "phase1TokenSold()", +"7d284ba2": "categoryIdCreator(uint64)", "7d287697": "testTryGetUnset()", "7d298ee3": "beforeExecute(address,uint256)", +"7d29a9f0": "pushInboundMessage(uint256,bytes)", "7d29beff": "placeVoxel(uint8,uint8,uint8,uint8)", "7d29f868": "ChangeUSDto1ETH(uint256)", "7d2a0f7a": "isWhiteListedValueValid(address,uint256)", +"7d2a1599": "Alloc(address,uint256)", "7d2a47b9": "findShareholder(address)", +"7d2a7e9c": "tokensForPreSale()", "7d2aeb8a": "releaseVestedTokens(uint256)", +"7d2b1efb": "gm(uint256,uint256)", "7d2b48bb": "getMaxAssignedRequests()", "7d2b9cc0": "setRequiredSignatures(uint256)", "7d2c93d7": "validateTypeReference(uint256,bool)", +"7d2d0c27": "redeemMain()", "7d2d661f": "genLimit(uint256)", "7d2d92ac": "withdrawTheUnsoldTokens()", "7d2dfc30": "FourCrowdsale(uint256,uint256,uint256,uint256,address,address)", +"7d2e227d": "userInformation(address)", +"7d2ed9e1": "getStakingSavedTime(address)", "7d2f42c3": "updateRating(address,bool)", +"7d2f94f9": "mpond()", "7d309331": "Bitceun()", "7d3157bf": "confirmBeneficiary(uint256)", +"7d31c9f0": "onGenerateTokens(address,address,uint256)", +"7d31cb2e": "claimTokenDivs()", "7d320ef8": "proofStorage_IPFS()", "7d326635": "getLendingObjId(address,uint256)", +"7d3266e8": "setGovenors4_open(bool)", +"7d32c67d": "onOperation(bytes32,string)", +"7d32e793": "recall(uint256)", "7d32e7bd": "transfer(address,bytes32)", +"7d334047": "buyOneCat()", +"7d33bf54": "swapClosed()", +"7d33ef7a": "transferUnderlyingFrom(address,address,uint256)", "7d34c2e3": "setMarketingAndRNR(address)", "7d34f5ac": "dailyTotals(uint256)", "7d3533da": "ownerSetAllowPublicWithdraw(bool)", "7d35f656": "count_customer_deposits()", "7d363718": "BitcoinXChainToken()", "7d363720": "getCurrentBonusFactor()", +"7d368873": "getnum()", "7d368f88": "afterEnded()", "7d36e478": "ClaimBalance(address,uint256)", +"7d379a48": "setInterestFeeRate(uint256)", "7d37fcba": "setManagementContractAddress(bool,address)", "7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", "7d38a772": "updateDeveloperMiningPower(uint256)", +"7d38b027": "GetPermissionsList(address)", +"7d38be9f": "changeMajorityFactor(uint256)", +"7d38ca65": "STRATEGIST_FEE()", +"7d38d664": "setdarkCockPairAddress(address)", "7d394f90": "addMasternode(address)", "7d398a86": "SourceChanged(string,string,uint256)", +"7d3ab61a": "compAddress()", +"7d3b1356": "buyTokenWithLoyalty(uint256,uint256,uint256,uint256)", "7d3b2d81": "PayXToList(address[],uint256)", +"7d3b8da1": "regeneratoraddr()", "7d3bfaee": "withdrawSurprisePotUser(uint256,uint256,uint8,bytes32,bytes32)", +"7d3c2b76": "findOneTenthPercent(uint256)", +"7d3c40c8": "id(uint256)", "7d3c42d2": "EtherBrosMaker()", "7d3c5961": "middleTimestamp()", "7d3c6da5": "CreateLudumTokens(address,uint256)", +"7d3cecce": "priceCumulativeLastSell()", +"7d3d11d0": "fromBytes32(bytes32)", "7d3d220d": "CitizenOne(uint256,address,uint256)", "7d3d6522": "goalReached()", +"7d3d90a0": "craftereum()", +"7d3d96e7": "testUnsortedIndexOfFunction()", "7d3dcbc3": "setTRM1BonusActive(bool)", +"7d3e1c4a": "teamAndAdvisory()", +"7d3e45a2": "boringDAO()", "7d3ee409": "setPatient(string,uint256,address,string,string,uint256,uint256)", +"7d3f0ba2": "canBurnFor(address,address)", "7d3fa29e": "addressToGoldDeposit(address)", "7d3fcaff": "getMatchReport(uint256)", +"7d3fdfa1": "deployCollateral(bytes32,address,address)", "7d40189a": "timeAdjustPlus()", "7d40583d": "setRoleCapability(uint8,address,bytes4,bool)", +"7d4061e6": "approved(uint256)", "7d408b44": "getMemberTokenRemain(address)", "7d40e9e0": "purchasedAmountOf(address)", "7d40eb25": "TITANCORE()", +"7d410e2a": "WithdrawGemmyMusic(address,uint256)", "7d4120a9": "insChainToken()", +"7d4163d3": "setPolicy(address)", "7d41cc60": "modifyAuthorizedCaller(address,address)", +"7d420143": "appendDecryptedBid(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7d423446": "fxs()", "7d426826": "INTREPID_VOUCHER_PRICE()", "7d42af97": "PrivateSaleEndTime()", "7d436d76": "consume(bytes32,bytes32[])", +"7d43c206": "exchangeEtherForSynthetixAtRate(uint256,uint256)", "7d443e57": "getInitInfo()", "7d445654": "lastLargestHODLERBalance()", +"7d449789": "_limitSellFeePercent()", "7d4504e0": "totalETHraised()", +"7d45098e": "approve_657(address,uint256)", "7d451aa7": "zgetOwner()", "7d457ac3": "CompensationSentEvent(address,uint256)", "7d459c71": "Multiexshares()", +"7d45bd2f": "pullPayments(address,address)", +"7d45cb47": "guarded(bool)", "7d46702b": "icoCollected()", +"7d46c16d": "setGiffBlock(uint32,bool)", "7d472f1c": "xnotifications(uint256)", "7d475c32": "LogAccessPolicyChanged(address,address,address)", "7d478407": "gameEncryptedText()", "7d47b4e7": "setAIRDROPPrice(uint256)", +"7d482171": "sellkeyper()", "7d48441f": "_isContract(address)", "7d487532": "setMember(bytes32,address,bool)", +"7d48d241": "INITIAL_FRAGMENTS_SUPPLY()", "7d48dcd7": "onPurchase(address,address,uint256,uint256,uint256)", +"7d48fb4c": "approve_768(address,uint256)", +"7d490798": "priorityRequests(uint64)", "7d49300d": "initGame(address,uint256,uint256,uint256)", +"7d498f19": "useMinimumDuration(bool)", +"7d49d875": "remove_liquidity(uint256,uint256[4])", +"7d49e150": "GetTokensBack(uint256)", "7d49e51d": "getSpaceshipUpgradePriceByModel(uint16,uint8)", "7d4a899e": "SafeSender()", +"7d4a8a32": "setLockTokenTime(address,uint256)", +"7d4a9ab8": "settle(bytes32,address)", +"7d4aac21": "paraswapSpender()", "7d4af159": "marketMakerFee()", +"7d4b1130": "lastProvideTimestamp(address)", +"7d4b3c5c": "Send(address)", "7d4c1403": "get(address,address,string)", "7d4c258a": "Set(bytes32)", "7d4c4a04": "saleStartSecondDayEnd()", @@ -71737,23 +131256,40 @@ "7d4cf602": "buildDSBalanceDB()", "7d4d3128": "startTransferToken()", "7d4d42c5": "_addGraffiti(uint256,string,string)", +"7d4d6651": "proposal_token_allowance(uint40,uint256,uint256,address,address)", "7d4da754": "CoiinToken(address)", "7d4deda1": "setAirLimitCount(uint32)", "7d4e1353": "erc20TRFT(uint8)", "7d4e1eb0": "stop_game()", +"7d4ebaa4": "setLPUnlockedRate(uint256)", +"7d4ef4f6": "swapExactETHForToken(uint256,uint112,uint128,uint160)", "7d4f0406": "PPY(uint256,string,string)", "7d4f128b": "createLockTokenHistory(address,uint256,uint256)", "7d4f1883": "closeMonthlyInvest()", +"7d4f6e64": "tradeTokenToETH()", +"7d4ffc5b": "_nullRanking()", +"7d507481": "_registerFeatureFunction(bytes4)", "7d50bef3": "account(address,address,uint256)", +"7d51d4a4": "stake_funds()", "7d5224d3": "registerNewUser(address)", +"7d52b961": "ConfirmPotWithdraw(uint256,address,uint256,address,uint256,uint256)", +"7d530aca": "namekeyfee()", "7d53223a": "setVestingReleasedAmount(address,address,uint256)", +"7d53257a": "researchAndDevelopmentBal()", +"7d533c1e": "lockTokens(address,address,uint256,uint256)", "7d53409a": "setMaxbonds(uint256)", "7d534aa0": "disableCharity()", +"7d53890d": "verhofirjfkn35r()", +"7d53a478": "GetCampaignName(uint24)", +"7d5438f0": "getAgentBetsSum(uint256)", "7d549e99": "totalTokensMinted()", "7d54a3ba": "CROWD_WAVE1_PERIOD()", "7d55094d": "toggleMinting()", +"7d556df0": "allocatedRewards()", "7d55758f": "underMint(address,uint256)", "7d55923d": "click()", +"7d55aeea": "monsterIndexToApproved(uint256)", +"7d55dd42": "_minDurationTime()", "7d55f64d": "fixedFeeInWei()", "7d564056": "getUserProperty()", "7d564f11": "setsystemprice(uint256)", @@ -71761,257 +131297,468 @@ "7d57a85c": "preIcoFinish()", "7d57edf3": "HOPE(uint256,string,string)", "7d580939": "_HOLDersPayRoll()", +"7d589844": "_QuranPRODAddress()", +"7d58dbb4": "isTeamContract()", "7d58eb76": "hasResolver(string,address)", +"7d592533": "approve_475(address,uint256)", +"7d596a68": "get_total_assets()", "7d59a938": "month6companyUnlock()", +"7d5a1d15": "removeTradingPlatform(uint256)", "7d5a9b41": "init(uint256,uint256,address,uint256,uint256,uint256,address,uint256)", +"7d5aa5f4": "wethAddr()", +"7d5b6c72": "summoningTime()", +"7d5b6f35": "batchValidations(address[],address[])", "7d5bc9fe": "Account_balances(address)", "7d5c1914": "getWalletInfo(address)", +"7d5d69a1": "boostStarttime(address)", "7d5db5e0": "Dagelas()", "7d5dc538": "getToJackpot(uint256,uint256)", +"7d5dcd38": "CatNoLongerForSale(uint256)", "7d5dec2a": "multiplex_remove(address)", +"7d5e422d": "getCodeHashByAddr(address)", +"7d5ebef1": "getAmountOut(address,string,uint256)", +"7d5ed9bd": "isInvestmentToken(address)", +"7d5f57a4": "onAffiliatePayout(address,address,uint256,uint256)", "7d5f66f2": "mintBounties()", "7d5fbcab": "setMystr(string)", +"7d5fd9f6": "takeOutETH(address,uint256)", "7d5fec5a": "setOwner(uint8,uint8,address)", +"7d604040": "vestingObj(address,uint256)", "7d606100": "BetOverlap()", +"7d608349": "setRewardPortion(uint256)", "7d60b6ce": "setCommissionWallet(address)", "7d60e291": "FIFTY_THOUSANDS_LIMIT()", "7d60e343": "getFileListSize()", +"7d616fd3": "getMinGasPrices()", "7d619d9b": "holdCoin(address,address)", "7d61b9fe": "intervalsCount(bytes32)", "7d61de37": "foundersRewardTime()", +"7d61ea0d": "lendinPoolFee()", +"7d61ef75": "setIcoPrice(uint256)", "7d620130": "getCardCount()", +"7d6254f3": "debugCurrentRate()", "7d635502": "buyEgg()", "7d636d9b": "refferal(address)", "7d63a93a": "REKT(uint256,address)", +"7d63ab38": "getBurnPercent(uint256)", +"7d645fab": "MAXIMUM_DELAY()", +"7d64a610": "gen_tree(address)", "7d64bcb4": "finishMinting()", +"7d64f5ae": "getPiptTokenBalance(address)", "7d652335": "changeAssetsState(bool)", +"7d655a5e": "defaultExitFee()", "7d656a72": "NewPost(bytes32,uint256)", +"7d658a46": "setFeeCoefficient(uint256)", "7d65b2f7": "hasCompleted()", "7d65e3fe": "totalInterestCycles()", "7d661e3c": "giveToken(address,uint256,string)", +"7d6633d0": "withdrawDelegate(address,uint256)", +"7d6649b5": "recordDCPAdd(address,uint256)", "7d6651b9": "claimEthIfFailed()", +"7d666565": "receiptProviderAddress()", +"7d669752": "CHECKPOINT_REWARD()", +"7d67d272": "eventVestingTime()", +"7d67f4e6": "investReferral(address)", "7d683b95": "unsoldUnlockedAt()", "7d684a9d": "RENEEKROM(address,address,address,uint256,uint256,uint256)", "7d68582a": "manuallyExchangeContractPreDGZtoDGZ(address,uint256)", "7d68bee7": "LogPollDeleted(bytes32)", +"7d6929e0": "addContract(string,address,string)", "7d692faf": "readMailByAdmin(uint256,bytes16)", "7d6979e7": "canBeChanged(uint256)", "7d69880b": "addBalance(uint256,uint256,uint256)", +"7d69dfdb": "weeklyDelayFeePerSecondPerPfc()", +"7d69ec55": "dictatorSetLaws(uint256,uint256,uint256)", "7d69f335": "changeColorRed()", +"7d6a0d04": "setMasksAddress(address)", "7d6a59ed": "getInvoiceCount()", "7d6a5f7b": "requireNotPaused()", "7d6ad4cd": "triggerAutorelease()", +"7d6ae27b": "burnFromWithData(address,uint256,bytes)", "7d6b4278": "outcomeState(address,uint256,uint256)", +"7d6babb4": "unlockDeposits()", "7d6bc260": "maxTiers()", +"7d6c0880": "changeCommunityFee(uint256)", "7d6c1ff1": "addMake(address,uint256,uint256)", "7d6c8388": "INVECH(uint256,string,string)", "7d6c864e": "withDrawable()", "7d6cf2df": "get_deploy_fee()", "7d6d28ef": "setComisionInTokens()", "7d6dc737": "getBylawsMinTimeInTheFutureForMeetingCreation()", +"7d6dfb7e": "_rewards(address)", "7d6e061c": "getFinishDates()", +"7d6e12df": "refundWrongSendCryptoItems(uint256)", +"7d6e1f43": "Start_At(uint256)", +"7d6e36d3": "poolStars(uint32,uint256)", "7d6e3751": "_addVouchers(address,uint256)", +"7d6e5228": "repayWithLoan(uint256[5],address[3],bytes)", +"7d6e8d69": "lockupPhase1(address)", "7d6ebe94": "setDoubleClaimSegmentSlashAmount(uint256)", +"7d6f0665": "LogFundsIn(address,uint256)", "7d6f0d5f": "changeFundsWallet(address)", "7d6f174e": "invalidateSignature(uint8,bytes32,bytes32)", +"7d6f2bf1": "signalWalletStructs(address,address)", "7d6f3781": "userChallenge()", "7d6fb089": "setBGXTokenInterface(address)", +"7d70892d": "setUnitAttackIncreases(address,uint256,uint256,bool)", +"7d70b7d9": "compRateKeeper()", +"7d70ba66": "__usdc()", +"7d70c7b1": "_extractRemainingLitSentByMistake(address)", "7d7106ad": "_updateStats(uint256,uint256)", +"7d719ffa": "Pollstatus(address)", "7d71a19b": "setAccountInfo(address,address)", "7d720296": "airSender()", +"7d721504": "_BASE_RESERVE_()", "7d722a30": "Funding_Setting_cashback_before_start_wait_duration()", +"7d723cac": "getFlags(address[])", +"7d727512": "getBalance(address,bytes)", "7d72aa65": "addRole(address,string)", +"7d73395e": "setENSController(address)", "7d736d0d": "weekPotExpiration()", +"7d73b231": "ensRegistry()", "7d74039d": "getAmountOfShareholders()", +"7d7445ae": "leftS(int8,uint8)", "7d7452aa": "DSVCoin()", +"7d748b6d": "_roles()", +"7d7496d4": "calcMint1t1FRAX(uint256,uint256,uint256)", +"7d74fa15": "mcdJoinDai()", +"7d75e089": "TerminatedEvent()", +"7d766981": "hashToSign_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes)", +"7d76d39a": "convertToken(uint256)", "7d7714fb": "coinAllowance(address,address)", +"7d772c35": "uniswapPoolEth()", "7d7786a3": "GetGuestName()", "7d77c8f9": "allowTransferBetweenUsers()", +"7d780d82": "beg()", "7d780e2a": "blocked_amounts(address)", "7d78b94d": "claimNihilum()", "7d78ef4a": "BKKToken()", "7d790630": "setContractFrozen(bool)", "7d79265b": "REDEEM_METHOD()", +"7d794f05": "TransferLog(address,address,bytes32,uint256)", +"7d797b56": "_settleAll(bool)", +"7d798e06": "bullets(address)", "7d79c192": "awayTeam()", "7d7a1a80": "UCToken(uint256,string,string)", "7d7a31b6": "max(uint64,uint64)", "7d7a3a1a": "bittravelxToken()", "7d7a9ca4": "MachineToken()", "7d7b0099": "API()", +"7d7b14c6": "winnerSelection(address,uint256,uint256,uint256,uint256)", "7d7b2051": "finalizeExits(address)", "7d7be90f": "Splitter(address[])", +"7d7c29ac": "setMinimumSelfBuyForDirectBonus(uint256)", "7d7c2a1c": "rebalance()", "7d7c7258": "adminSendMoneyToUser(address,uint256)", "7d7ca00c": "JSONpath_int(int256,string,string,uint256)", +"7d7ccb03": "additionalThrow(address)", +"7d7d0046": "gasTopUpLimitAvailable()", "7d7d4a68": "start_service(address)", +"7d7da89f": "registerFamer(address,bool,uint256)", +"7d7e5176": "add(string,string,string,uint256,string,uint256)", "7d7e5e3d": "setFlagPair(uint256,bool,bool)", "7d7eee42": "setPreSalePrice(uint256)", +"7d7ef3fc": "getPoolTermInfo(uint256)", "7d7f0050": "TradeEnabled(bool)", "7d7f1699": "freeBet(address)", "7d7fa215": "getSaleData()", "7d7fef7e": "receivedEtherFrom(address)", +"7d800bfa": "sendHash(string,string,uint256)", +"7d8016bd": "token1Out(uint256,uint256,uint256)", "7d802655": "delLimitedWalletAddress(address)", +"7d8033f5": "devDistributeRate()", "7d80def3": "setENDPhase()", +"7d812c87": "calkAmountOut(uint256,uint256,uint256)", "7d81d62f": "doGroupRefundPayoutsSuccess(address[])", "7d820414": "GeXCHANGE()", "7d82bf73": "getBonusTokens(uint8)", +"7d82f3fd": "SetLpIsStart(bool)", +"7d832974": "approvedHashes(address,bytes32)", "7d836281": "getBetState(address)", "7d83e527": "PensionCoin()", +"7d83fa33": "HavvenUpdated(address)", +"7d84f2b1": "registerNodeFor(string,uint192,address,uint64,uint256,uint8,bytes32,bytes32)", +"7d8508d5": "setRoute(address,address[])", "7d851a13": "signerIsWhitelisted(bytes32,bytes)", "7d851c70": "getTokensBack()", "7d85445d": "EducationToken()", +"7d858014": "leaveStake(address)", +"7d85d596": "renewTime()", "7d85facd": "transferred()", "7d862a7e": "changeDutchIdxAddr(address)", +"7d8784d8": "brokerBalanceOf(address,address)", "7d87bb7b": "HATCHING_COST()", "7d87e97d": "makeMemberOfGroup(address,uint256)", "7d882097": "totalDeposits()", "7d882e9b": "resetWinner()", "7d886976": "testMintGuyAuth(int256)", +"7d890732": "PayTo()", +"7d8916bd": "addLiquidity(address[],uint256[],uint256)", +"7d891ba3": "getGovernanceData(address[])", +"7d89214a": "OnSetAuctionObj(uint256,address,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "7d8966e4": "toggleSale()", +"7d896b84": "getFlagRevenue(uint256)", "7d8978db": "addCasino(uint16,uint256,string,string)", "7d897ccd": "KPCSAdministrator()", "7d89ae63": "__findRef(string)", "7d89f040": "AddAmount(uint256)", +"7d8a54ff": "buyCGRID()", +"7d8a5f07": "viewCreditedUNICOREReactors(address)", "7d8be627": "activateLineItem()", "7d8c0c7c": "adminSetRegisterCost(uint256)", +"7d8c9df9": "getdgeWebExAmountT1(address,string)", +"7d8caada": "getRatios(bytes32)", +"7d8cb7a2": "INVEST_MAX_AMOUNT()", "7d8ccd59": "debug_uint(uint256)", "7d8cfd1a": "flag_hash()", "7d8d4878": "updateETHEUR(uint256)", +"7d8d5c9b": "getPolitician(uint256)", +"7d8de3c9": "setNullRanking(address)", +"7d8de7ee": "COKED()", +"7d8e6835": "doggyIdToDivs(uint256)", +"7d8ec2cf": "publicSellCompleteSetsWithCash(address,uint256)", "7d8f442e": "getPrice(uint40)", +"7d8f48ec": "reInit(address,address,uint8,address,address)", "7d8f94a0": "slackUsersCap()", +"7d8fa86d": "getGenesisStateHash()", "7d8fcfb4": "transferSuperAdminOwnership(address)", +"7d8fd34a": "maxETH(uint256)", "7d8fe090": "REFERRAL_BONUS_LEVEL5()", "7d902311": "gameGiftLineTime()", +"7d909a6c": "priceCumulativeLastBuy()", +"7d90bb9b": "minEthDeposit()", +"7d90dcba": "nextBorrowInterestRateWithOption(uint256,bool)", "7d917fcb": "Registered(bytes32,address)", "7d919a43": "tohash(bytes32,address,address,uint256,uint8,bytes32,bytes32)", "7d91da87": "buyPixelTokenFor(uint24,uint256,uint24,address)", "7d9201cc": "rspToken()", +"7d920788": "L2_NovaRegistryAddress()", "7d921af0": "disableTimelock()", "7d92561d": "NewBuyer(address,uint256,uint256)", "7d92654c": "endRoundAndStartNextRound()", "7d92bb6e": "getClaimKeys()", "7d92f6be": "goldRegistry()", +"7d93050d": "_buyGhost(uint256)", "7d9375b8": "authorizeContract(address,string)", "7d9383c3": "valid_creature(address)", "7d93ccdf": "Halo3DDoublr(uint256,address)", "7d940912": "addArea(uint256,uint8,uint8[],uint256,string,uint256,bool,uint32)", "7d94792a": "seed()", +"7d94ad98": "confirmReceipt()", "7d94d4aa": "SergeToken()", +"7d95c541": "finishAccountMigration()", "7d95dcd7": "createPromoArtwork(string,string,uint32,address)", "7d961218": "REGTMProc()", "7d962e44": "addHash(bytes16)", +"7d965688": "testUseCpu(uint256)", +"7d966593": "isExternalPositionModule(address,address)", +"7d966e7d": "mAmount()", +"7d968ca2": "gaftTokenIDList(address,uint256)", "7d96f693": "getDepositAmount()", "7d97597d": "DEFAULT_AUCTION_LENGTH()", "7d97b1f6": "VestingScheme()", +"7d989f42": "setUniPairEnabled(uint256,bool)", "7d98ebac": "exchange(address,address,address,address,uint256,bytes)", +"7d995311": "depositedBalances(address)", "7d99ae17": "issue(address,bytes32,bytes32)", +"7d9a4bac": "bulkAddAddressesToAirDropWithAward(address[],uint256)", "7d9a4e2c": "safeToMultiply(uint256,uint256)", +"7d9a7a4c": "setNftPrice(uint256)", "7d9a9046": "resolveDisputeBuyer(string)", "7d9a9096": "icoFinishedAt()", +"7d9b8d8d": "resumeUser(address)", +"7d9bfe6d": "TransactionStarted(uint256)", "7d9c68f7": "getUserBattleValue(address)", +"7d9c6b35": "withdrawDevReward(uint256)", "7d9d4bed": "secondStageEnd()", "7d9d972d": "guardian3Vote()", "7d9e5243": "BonusAmountUpdated(uint256)", +"7d9e705d": "callDepositTRC721(uint256)", "7d9f298e": "setLockedState(bool)", "7d9f6db5": "auction()", "7d9f8cf2": "startFirstStage()", +"7d9fb118": "tokenMarkets(address)", "7d9fb742": "fourthRoundPercent()", "7d9fc342": "PreICODays()", "7da028d6": "SaleCompleted(address,uint256,uint256)", "7da0389d": "referralProgram(address[],uint256[],uint256)", "7da0399a": "CloseAuction(bytes32)", +"7da0a877": "trustedForwarder()", "7da0e079": "_closeMotion(uint256)", +"7da1373a": "maxRewardParameterTitle()", "7da16762": "executeParentDaoSplit()", "7da208aa": "deleteArrayAddress(bytes32,uint256)", "7da21a1a": "WaltonToken()", +"7da24fce": "_createPlanetWithRandomResources(uint256,uint256,uint256,uint256)", "7da25928": "announcedTimeStamp()", +"7da2d1f4": "balanceAvailable()", +"7da2e750": "depositDollar(uint256)", "7da3400b": "_contractExists(bytes32)", +"7da38343": "upgradeLogicBoard(address)", "7da39157": "poWtfContract()", "7da3c3ab": "revert()", "7da3e219": "testInitialTokenBalance()", +"7da3f5e2": "shabuAddress()", "7da3f613": "lockAddress()", "7da40b65": "isPlatformOrSupportManager(address)", +"7da470ea": "farms(uint256)", +"7da49f40": "projects(uint16)", "7da4d24b": "activationOpen()", +"7da5639c": "finish(address[])", +"7da5b29c": "dappManager()", "7da5efc8": "drop(address,address[],uint256[])", +"7da619ea": "avgAb()", "7da63c59": "changeValuePerToken(uint256)", +"7da68096": "testTrackerReturn(uint256)", +"7da6ffba": "soldAmount_USD()", "7da7a437": "Clinicoin()", "7da7d5ab": "nextGameRakePercent()", "7da81364": "getProposalAction(uint256)", +"7da8a9b1": "setminrndpay(uint256)", +"7da94e2c": "get_adress_creator()", +"7da99462": "pauseRightBurned()", +"7da9f293": "unlockBalanceAdmin()", "7daa10ce": "getMyInfo()", +"7daa5cf6": "disputeIDOnArbitratorSidetoDisputeStruct(uint256)", "7daa9fcd": "buyGems()", "7dab61b6": "setBlack(bool)", "7dab84d8": "ShowTestU(string,uint256)", "7dabb4d6": "addKycVerifiedInvestor(address)", "7dac0547": "VIRGOToken()", +"7dac432d": "Orders_sell(address,address,uint256,uint256,uint256,uint256)", +"7dac6555": "waffleId()", "7dac9048": "addArgumentToRequestUint(uint256,bytes32,uint256)", +"7dacb92c": "investLiquidity()", +"7dad19db": "referralContract()", +"7dad5d87": "getTikerData(string)", +"7dae230f": "TreasuryUpdated(address)", +"7dae5469": "epochPwdrReward()", "7dae6e95": "noOfTokenAlocatedPerICOPhase()", "7daeef25": "objectTome()", "7daf06fd": "withdrawPart(uint256)", +"7dafa0ab": "vestingQuarterly()", +"7dafb61c": "priceToCloseCancel(address,uint256)", +"7db00adf": "updateCollScore(address,address,int256)", "7db0799f": "EnduranceToken()", +"7db1096f": "setReviewPeriod(uint256)", +"7db12987": "nodesNum()", "7db12abc": "contractorWithdraw()", "7db1c36f": "setFeedBackFee(string,uint256)", +"7db2709f": "Fee(uint256,uint256,uint256)", +"7db2768c": "updateToken(address,bool,bool)", +"7db29b17": "uberHaus()", +"7db2b2c7": "decimalpoint()", "7db2cff8": "old_address()", +"7db2db06": "winners_(uint256)", "7db33f99": "setLeaseCard(uint8,uint256,uint256)", +"7db3b72d": "isPositionNeedToBeMigrated(address,address)", "7db4149d": "RegisterTokenTransaction(address,uint256,address)", +"7db41eae": "transferLockedToken(address)", "7db42b6c": "AutoBusinessFinance()", +"7db43ced": "setCommonMinBalance(int128)", +"7db45035": "B9(bytes)", "7db45975": "register(uint256,uint256,bytes32,string,bytes32)", "7db48416": "_getMinions(uint256)", +"7db52661": "approvePendingAssets(uint256)", +"7db5898d": "last_collect_timestamp()", +"7db6a4e4": "getEntry(address)", "7db6a91d": "checkDeck(uint8[],bytes32,bytes32)", "7db6cbfc": "_addDefaultOperator(address)", +"7db6cc1b": "frozenAccountForIndex(uint256)", +"7db71fc4": "balancePerID(uint128)", "7db724b6": "MAIN_QUESTION()", "7db7c239": "tranchesPayedOut()", +"7db8473c": "recvAirdrop()", "7db8782a": "uint256At(uint256,bytes,uint256)", "7db91595": "setOwnedBonus()", "7db9743b": "Registry()", +"7db9cb8f": "setAmount(address)", +"7dbaed88": "getTxBurn(uint256)", +"7dbaf79f": "setTurboBaseContract(address)", +"7dbb119a": "Substraction(int256,int256)", "7dbb82a8": "setLicenseTermsRegistry(address)", +"7dbb9411": "setBuybackInterval(uint256)", +"7dbb974b": "moveToRefuse(uint256,uint256)", "7dbbc0cd": "EliteShipperToken()", "7dbbf2e6": "RecallTokensFromContract()", "7dbc1d6f": "modifyPrivateList(address[],bool)", +"7dbc1df0": "setRedemptionFee(uint256)", "7dbc827b": "vestingWithdraw(address,uint256,uint256)", "7dbc9fba": "amendClaim(uint8,uint8,uint8,uint8)", +"7dbce1d8": "paymentsCycle(uint256)", "7dbd0139": "softCapOk()", "7dbd33c1": "_percDown(uint256)", "7dbdab18": "CreatedAngel(uint64)", "7dbdc2eb": "getQueryPrice()", "7dbdf168": "EtherBetIO(address,address)", +"7dbe5f10": "chainLink()", +"7dbea14d": "GetUserGroup(address)", "7dbecc54": "EDColiseum()", "7dbece3c": "usdCurrencyFunding()", "7dbedad5": "createReward(uint256,uint256)", "7dbf1fe6": "Towers(uint256)", "7dbf67a7": "setDebt(uint256)", +"7dbfb5dc": "userTotalAmount(address)", "7dbff420": "donationUnlockTs()", "7dc0015d": "centToken()", +"7dc02343": "_swapAllUsdt(int128,int128,address,uint256)", "7dc09e4a": "getRequestedProducts()", +"7dc0a1fa": "_update(uint256,uint256,uint112,uint112)", +"7dc0bf3f": "minted(uint256)", "7dc0d1d0": "oracle()", "7dc0d451": "CHINESE_EXCHANGE_2()", "7dc10df5": "Jackpot(address,uint256,uint256,uint256)", +"7dc1da19": "TokenWalletChanged(address)", +"7dc1eb4b": "lookParams3()", "7dc2268c": "minting()", "7dc28eb2": "LOCKAMOUNT4()", +"7dc2cd98": "claimPeriod()", +"7dc30ede": "tokenStaking()", "7dc379fa": "getTicket(uint256)", "7dc45e27": "setCryptoMatchValue(uint256,string)", +"7dc4b9cc": "setSwapAddress(address)", "7dc4da2e": "initiate(uint256,bytes32,address,uint256)", "7dc4feb7": "setConstraint(bytes32,address,address,uint256)", +"7dc55ac4": "initialBlockTime()", "7dc5cc64": "getTotalDivis(uint256)", "7dc5cd32": "_patternToNumber(bytes)", "7dc673bc": "closeRegistration()", "7dc6c3d9": "deactivateAdSlot()", "7dc7363b": "LogNewTemplateProposal(address,address,address,uint256)", "7dc74473": "tokenPrivateMax()", +"7dc787fd": "enableToken(address,bool)", "7dc79375": "delOracle(address)", "7dc7c5a5": "debug1()", "7dc7f7c4": "Pitcheum()", "7dc8c73e": "canTokenUnlocked(uint256)", "7dc8e069": "shorten_end_block(uint256)", "7dc8f086": "getOutcomeCount()", +"7dc9037b": "setDeviationMovement(uint256)", +"7dc98ad9": "reserveNTS()", +"7dca429f": "Buyers(address)", +"7dca77a1": "pendingTransactions(bytes32)", "7dcab440": "SubinGuhan()", "7dcaf720": "getReadme()", +"7dcb2abf": "pendingRewards(uint256)", "7dcb422e": "setPresaleStartDate(uint32)", +"7dcb5196": "CycleNew(uint256,uint256,uint256,uint256)", +"7dcb64d4": "dollarFeeRatio()", +"7dcb6aa2": "UserClaimedTokens(address,uint256)", "7dcb6b92": "testegy()", +"7dcb8f8f": "getBuyLockStatus()", +"7dcbb47d": "Allocation(uint256,uint256,uint256,uint256,uint256)", "7dcbd078": "thirdPay()", +"7dcc3dc8": "Assigned(uint256,uint256,uint256,uint256)", "7dcc3f0c": "LukapToken()", +"7dcca375": "coin(uint16)", +"7dccc684": "AddressFroze(address,bool)", "7dccd4d6": "setIndividualCertificate(string,bytes32,bytes32,bytes32)", +"7dccea85": "approve_602(address,uint256)", "7dcd17d9": "sumHardCapICO1()", "7dcd277b": "SimpleTingToken()", +"7dcd3f83": "submitStakingRewardsFinishFarmingTx(address)", +"7dcd4655": "auctionsDecrementAuctionsRemaining()", +"7dcd7300": "_collateral(address)", "7dcda7df": "initiateProviderCurve(bytes32,int256,int256[],address)", "7dcdace2": "Deposit(address,uint256,uint256,bool,string)", "7dcdec34": "sendTokenFundsToManager(uint256)", @@ -72019,155 +131766,309 @@ "7dce6bdb": "freeCrawDeadline()", "7dce8461": "GSENetwork()", "7dce8dd4": "GenesisSalesCount()", +"7dceaed3": "setChangeVokenAddressAllowed(bool)", +"7dcf8cf9": "Birth(address,uint256,uint256,uint256,uint256,uint256,uint256)", "7dcfb801": "veryAngry()", "7dcfd3d5": "blockTransfers()", +"7dcfdc7c": "ytbVideoToAddress(string)", "7dd003f1": "test_chain2_4()", +"7dd020ce": "OnlyCallableIfNotInCatastrophicFailureError()", "7dd02c8e": "transferETHFromContract(address,uint256)", +"7dd03446": "oID_Order_(uint256)", +"7dd05d82": "authorizedToDrain(address)", "7dd07097": "tgeSettingsPartProject()", +"7dd0d17c": "playerGamesCompleted(address,uint256)", "7dd0d61c": "check_hash(address,bytes32,bytes32)", "7dd10e4f": "newUsers()", "7dd15d40": "getData_13()", +"7dd17eff": "openLoans()", +"7dd1a25c": "accumulatedEther()", +"7dd1a57a": "lastExchangeRate(bytes32)", "7dd1f126": "optionTaker(bytes32)", "7dd256ff": "PATToken(address)", "7dd26660": "getMegaboxIndex()", "7dd2899f": "changeDividentContract(address)", +"7dd2a0ee": "AXE()", "7dd2e993": "removeTenant(uint256)", +"7dd3b7c5": "getRoleRestrictions()", "7dd3cf54": "ChangeCostByManager(uint256)", +"7dd3dd57": "depContractidToAddress(uint256)", +"7dd416da": "computeSumAllVote()", "7dd45999": "lockDomainOwnershipTransfers()", +"7dd4fc12": "Payout(address,uint256,string,address)", "7dd563c3": "setMainSaleParams(uint256,uint256,uint256,uint256)", "7dd56411": "ownerOf(bytes32)", +"7dd56c9a": "updateTokenInfo(address,uint8,uint256,uint256,uint256)", +"7dd64518": "MEDIATOR_FEE_DIVISION()", +"7dd711c4": "approveAndExecuteWithSpecificGas(address,address,uint256,uint256,bytes)", +"7dd7d32d": "viewTokenMeta(uint256)", +"7dd82fa4": "pendingPkid(uint256,address)", +"7dd8930c": "bond_fake(uint256)", +"7dd8f6d9": "getAccountLimits(address,address)", "7dd91734": "compositeReputation(string)", +"7dd94d63": "ProcessPayroll(address,uint256)", +"7dd97605": "crate()", "7dd9d27f": "exiteEntidad(address)", "7dd9f846": "buyCard(address,uint256)", "7dd9fcf7": "latestprice()", "7dda48a5": "WhatTimeIsNow()", "7ddaa56a": "tokenContributionMin()", +"7ddaa84b": "redeem(uint256,uint256,bool)", +"7ddb080f": "setSpoolOpenTime4Min(uint256)", "7ddb3c00": "total_pay_claimed()", "7ddb5e65": "votingReward()", +"7ddbd810": "isVIDAvailable(uint256)", "7ddbf0ed": "setLockedTokenAddress(address)", "7ddbf1a7": "passFundsToTheTeam()", "7ddc02d4": "isOwner(address,address)", +"7ddca7de": "viewAirdropFADR()", "7ddcbfd9": "TegTokensSale(uint256,string,string)", "7ddd0ce1": "getBetDivisor(uint256)", "7ddd130f": "PRBCoin()", +"7ddd15b5": "setLuckyNumber(uint256,uint256)", "7ddd20ba": "getRequiredStateNumbers(uint256)", +"7ddd72e7": "_requireICRisAboveCCR(uint256)", "7dddb66f": "collectOwnRew()", "7dde0138": "modifySupplyLimit(uint256)", +"7dde2a02": "preClaimPeriodEnd()", +"7dded30d": "burnDepositCN(uint256)", +"7ddeded1": "opaqueBorrowFailureCode()", +"7ddfe6b3": "enactClaim(uint16,uint16,uint48,uint256)", +"7ddfe78d": "withdrawalLimit()", "7ddfffbf": "mint(address,uint256,uint256,uint256,uint256,uint256,uint256)", "7de06cfc": "startTge()", "7de09476": "getSpecificBuyerTransaction(address,address,uint256)", "7de0cc65": "preMcFlyWallet()", "7de11a8f": "getBlockVerifierAddressesCount(uint256)", "7de14129": "approveInvestor(address)", +"7de14fe9": "setPoolRewards(uint256[14])", +"7de16f1b": "round2_openingTime()", +"7de182c5": "credit(address,address,uint256)", "7de1a631": "confirmETH(bytes32)", +"7de1d164": "priceCurve()", "7de295d2": "withdrawalsCTR()", "7de2d523": "setbonus(uint256,uint256)", "7de2e95c": "TransferCow(address,uint256)", "7de2fe4d": "linkToMasterWalletInternal(address,address)", "7de32b17": "CuratedTransfers(address,address[],address[])", +"7de33dde": "ApproveTo(address,address,uint256)", "7de36138": "setPreICO(address)", +"7de3c65a": "PERCENT_STEP2()", "7de47b3f": "fundingGoalUSD()", "7de4800f": "withdrawEscrow(bytes32)", "7de480c6": "aiurExchangeOracle()", "7de4ceb2": "DebugValue(string,uint256)", +"7de4ea96": "SPCreated(uint256)", "7de50c44": "TIME_LOCK_END()", "7de548d8": "releaseStake(uint256,address,address)", "7de576cd": "vote(uint16,uint256)", "7de5ad89": "setJntController(address)", +"7de65545": "accountIssuanceLedger(address,uint256)", +"7de6b1db": "renounce(uint256)", "7de6c905": "LetItPlayToken(address,address,address,address,address,address,address,address)", "7de77700": "bytes32ToBytes(bytes32,bytes32[],bytes32)", +"7de7770e": "teamAddress(uint256)", "7de7a18d": "setShare(address)", +"7de7cc66": "query(address,string,bytes32,bytes32[])", "7de7ea78": "TokenHNC(uint256,string,string)", "7de7edef": "changeMasterCopy(address)", +"7de7fd91": "totalBGBFTokens()", +"7de80601": "StartICO(address,bool)", +"7de8b10a": "updateTokenShares(uint8)", "7de8bb63": "Commons()", "7de976dc": "amountFundHolder()", +"7de9940f": "LogSentRewardsDepotEth(address[],uint256[])", +"7de9a52b": "_getAction(uint256)", "7de9f212": "colorfilter(uint256)", "7dea9118": "setIdentityName(bytes32)", "7deb6025": "buy(uint256,address)", +"7deb8576": "updateIAAvgRate(bytes4,uint256)", "7debb959": "calculateAllocation(address)", +"7debc299": "getBobTokenID(uint256)", "7dec2299": "getStagesInfo()", +"7dec255a": "pOlyPrice()", "7dec3d35": "FOUNDERS_WALLET()", "7dec4ce8": "SettleBond(uint256)", +"7dec81ef": "amountOfOneFourth()", +"7decf27f": "isPresaleEnded()", +"7ded03ce": "_blueMoldPower()", "7ded0c15": "getStakeTokenBalanceFor(uint256,uint256)", "7ded2210": "setPreIcoCap(uint256)", +"7dedd187": "numDurations()", "7dee2cad": "CancelMyInvestment()", "7def2fdf": "changeStakeRate(address,bytes32,uint256)", +"7def32f1": "multipleSafeMint(uint256[],address,string)", +"7def34c6": "TopUpPrizePool(address,uint256,string,uint256)", "7def7351": "teamTokensFirstShare()", +"7def9267": "bmAddress3()", +"7defb410": "pub()", "7df02c0e": "getLinglongCat(uint256)", "7df042a2": "totalRegularTokensSold()", +"7df0f767": "isLP(address)", +"7df10f23": "collateralLiquidationFee(address)", +"7df143aa": "getTotalNodeCount(address)", +"7df16ac8": "getExcludeTokenBalancesLength(address)", "7df19a78": "BetPlaced(address,uint256,uint8)", +"7df1b963": "testChangeOwnerFunction()", +"7df1d379": "receiveLockedRewards(uint256)", +"7df1ea9d": "distributeFund(address,uint256)", +"7df1ed06": "multisendErc20FADR(address[])", "7df1f1b9": "borrower()", +"7df20826": "bulkIssue(bytes32[])", +"7df23753": "arbitrateSettlement(uint256)", "7df23b6a": "ReleaseOracle(address[])", +"7df24ef5": "verify1outof2ZKP(uint256[4],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2])", +"7df28714": "getUserInfoTamagIdSize(uint256,address)", "7df2e3e3": "getRcdExchange(uint256)", +"7df2eb25": "gemJoin_join(address,address,uint256,bool)", "7df38c5b": "wad()", "7df3a229": "PissToken()", +"7df3cc91": "flashBorrowAndReenter(address,address,uint256)", "7df432c9": "minSelfBuyPrice()", +"7df44647": "shares(address,address)", "7df4732e": "seeZombieStar(uint256)", "7df47407": "SigProof()", +"7df49300": "getTrader()", +"7df4b767": "eFillOrder(address,address,uint256,address,uint256)", "7df4c235": "kolidat()", +"7df4cd97": "TESTITMarket()", "7df52ba8": "Arbitrate(uint32,uint32,bool)", "7df545c7": "MaximumSellableTokensChanged(uint256)", "7df54c73": "setMiniPoolEdit_4(string)", "7df5f4ae": "_upper(bytes1)", +"7df61274": "minimumETHInPublicSale()", +"7df61762": "approve_575(address,uint256)", "7df65a1d": "getMinersByAddress(address,address)", "7df68a8b": "addPeriod(uint256)", +"7df6a6c8": "setEndTimestamp(uint256)", +"7df6bc4c": "getAssetBalances(address[])", +"7df6c3d5": "setPeerInviteStorageAddress(address)", "7df73e27": "isSigner(address)", +"7df7a71c": "toTypedDataHash(bytes32,bytes32)", +"7df7dc04": "depositCancel(uint256,uint256,uint256)", "7df7ec18": "test_invalidEmptyEqVal()", "7df82cc9": "veztUsers(uint256)", "7df83cd0": "getDepositWithdrawList(address,uint256[])", "7df841cd": "setPlayerVirusDef(address,uint256)", "7df855f2": "getAuditAddress(address,address)", "7df8833a": "createEvent(string,uint256,uint32)", +"7df8ce4b": "setStoreWalletContract(address)", +"7df8e643": "anon()", "7df9bb31": "heredar()", "7dfa0b3f": "canSell(address,uint8,uint8)", "7dfa7d79": "claimUnsoldTokens()", +"7dfaa506": "setVNFT(address)", "7dfac5a2": "accMinterOne()", "7dfb0ba5": "getRecordOffers(address)", +"7dfb3383": "claimedDividends(address)", +"7dfb3e44": "updatePartnershipFee(uint8,uint256,uint256)", +"7dfb56c6": "relocateToken(uint32,uint32,uint32,uint256,uint256,uint256,uint256,address,uint256)", "7dfb6626": "withdrawRewards(bytes32)", +"7dfbb6cf": "withdrawRefferalReward()", "7dfbc19c": "HaltTime()", "7dfbdf6d": "returnFundsFor(address)", +"7dfbe440": "setMUS(address)", +"7dfc5525": "tokenSUSD()", "7dfc64ca": "getTotalBudget()", +"7dfca4e5": "ethPlanList(address)", +"7dfcc71a": "getFeatures()", "7dfce5e9": "withdrawExcessReserves()", "7dfce6d7": "MAX_INTEREST_AMOUNT()", "7dfda44c": "AssignAddress(uint256)", +"7dfe057a": "MinAmountSale()", "7dfe1674": "CTB(uint256,string,string)", "7dfe4302": "privateSaleTokens(uint256,uint256)", +"7dfe552f": "func_318F()", "7dfe58d0": "clearEscapeRequests(uint256[],uint256[])", "7dfe7741": "InviteAccepted(address,address)", "7dfebff3": "addEth(uint256,uint256)", +"7dfec8d7": "buyOfferToken()", +"7dff2680": "getSupportedPools(uint256)", +"7dff40cc": "setRatio(int256)", "7e007c1e": "minimumWEI()", +"7e008bd7": "settledWeiPervSPACEX()", +"7e00ab0a": "withdrawPledgedStake()", "7e00d6d6": "enablePurchase()", "7e00d77a": "mintExtendedTokens()", "7e01c088": "removeWhitelistedAddr(address)", +"7e01d5a2": "getSubsetYieldContracts(uint256,uint256)", +"7e026a5f": "FirstPeriodOutcome(uint256,uint256)", "7e029bde": "setEthUsd(uint256)", "7e02bb0f": "finish(address,address,address)", +"7e0358a6": "getEnergy(uint256)", +"7e039153": "addStakedTokenReward(uint256)", +"7e039931": "useSafeMath(uint256,uint256)", "7e03ad1a": "numImports()", +"7e03b690": "withdrawByStakingIds(uint256[])", +"7e045781": "get_your_bidded_card(uint256,string)", +"7e051867": "withdrawalAddresses(address)", +"7e054373": "viewPossibleReserved(uint256)", "7e057b8e": "IYMAYA()", +"7e05f5a8": "getCreatedAt()", +"7e063605": "skipBlockNumber()", +"7e067a60": "deposit(uint256[],uint256[],address)", +"7e06bb25": "addPool(address,address,bool,uint256)", +"7e06d5f5": "CanWork()", "7e06ec93": "MDOSToken(address,address)", +"7e06ff0f": "lottoTimeout()", "7e070df6": "rootOwnerOf_(uint256)", +"7e074dd9": "approve_405(address,uint256)", +"7e0767eb": "getDepositsTable(uint256,uint256,bool,bool)", +"7e0785af": "vdvs(uint256)", "7e07877a": "hasFailed(address,uint256)", +"7e078b55": "getProposalExternalToken(bytes32)", "7e080911": "TRUEToken(address)", "7e08a846": "tokenCollectedOf(uint256,address)", +"7e0979f2": "makeWater(uint256,uint256)", "7e09d09b": "theFloatMultiplier(uint256)", "7e09f0aa": "predictMarket()", "7e0a16b1": "forwardAllRaisedFunds()", +"7e0acfbc": "closeMine(address)", +"7e0b6fec": "uploadHash(string)", +"7e0bd43c": "swapUsdcForBtf()", "7e0be7e3": "upgradeGooCost(uint256)", "7e0c1792": "oracle_address()", "7e0c240d": "LianJieToken()", +"7e0c5747": "balancesGetValue(uint256)", "7e0cfc3d": "truncate(uint8[],uint8)", "7e0d149e": "getGameAddresses(uint256)", "7e0d8b27": "leekStealToday_()", +"7e0d943e": "setRebalanceDivisor(uint256)", "7e0e20ba": "HighGasAmount()", +"7e0e3564": "AuctionCreated(uint256)", "7e0e471d": "Licensium(uint256,string,uint8,string)", +"7e0e78ff": "Register_as_Buyer(address)", +"7e0eeadc": "unlockEth(uint256)", +"7e0f2643": "addInventory(int256)", +"7e0f781a": "accessToken(uint256,address[],uint256[])", "7e0f7a87": "getUnixTimeStamp()", "7e1028b2": "_doTradeWithEth(address,uint256,address,uint256)", +"7e103040": "curvefi()", +"7e103b32": "schedule_rqsr(uint256)", +"7e103ce8": "addTokenReward(address,uint256,string)", "7e1055b6": "icoEndTime()", +"7e108af9": "redeemFractionalFRAX(uint256,uint256,uint256)", +"7e10e102": "molecular()", "7e111f59": "sell_toContract(uint256)", +"7e119909": "approve_626(address,uint256)", +"7e11b31f": "feeDecimal()", "7e11f453": "ETH_Rate()", "7e12180e": "setSaleDuration(uint256)", +"7e12acce": "COLLECTION_HASH()", +"7e12d55f": "LogCalcBonusReferrer(address,uint256,uint256,uint256,uint256,address)", +"7e132355": "maxLoan(uint256,bytes32)", "7e133564": "donateDna(address,uint256,uint8)", +"7e1373a2": "removeAccount(bytes32,address)", "7e13b0be": "changeTokenDecimals(uint256)", +"7e142973": "buyScarcityDelegate(address,address,uint256,uint256)", +"7e143126": "onEventWithdraw(address,address,uint256)", +"7e145269": "updateObelixFarming(address)", +"7e146cc5": "HEADER_RELAYER_REWARD_RATE_DENOMINATOR()", +"7e14baf9": "powDecimal(uint256,uint256)", "7e150d66": "maxTxSize()", +"7e15d63b": "addToPoolWhiteList(address[])", +"7e15e248": "setToken1155(address)", +"7e15e9ef": "setcut(uint256)", "7e1629ab": "token_transfer(address,address,uint256,bytes,string)", "7e167198": "_preValidatePurchase(address,uint8,uint256)", "7e168086": "preallocate(address,address,address,address)", @@ -72175,151 +132076,285 @@ "7e16cfde": "getGameBlockNumber(uint256)", "7e16eca0": "getContractTimestamps(bytes32)", "7e1721ee": "LMAOtoken()", +"7e178acf": "dividendsOfTest(address)", "7e179816": "setRefShare(uint256)", +"7e17d91a": "k4(uint256)", +"7e18aea8": "participateMine2()", "7e18dd21": "motodoughToken()", +"7e18f0c9": "decodeSimpleSwapData2()", "7e1934f9": "swpFund()", +"7e194d3a": "lpSupply(address)", "7e199b70": "startCrowd(uint256,uint256,uint256)", +"7e19a5e8": "_rewriteSetTokenURI(uint256,string)", +"7e19cac2": "delEvent()", +"7e1a3786": "getRewardRate()", "7e1a6753": "Destruct()", "7e1ab812": "utrToken()", +"7e1ad963": "approve_419(address,uint256)", +"7e1b3abf": "pay2()", +"7e1b4431": "activeBusinessPoll()", +"7e1b4cb0": "currentAnswer()", "7e1b52f6": "doftManager()", +"7e1b823f": "INFLATION_START_DATE()", "7e1c06b6": "newOwner(uint256)", "7e1c0c09": "totalTokens()", +"7e1c3bb2": "TokenUnlocking(address,uint256)", "7e1c4205": "query2(uint256,string,string,string,uint256)", "7e1cae40": "changeRefundToken()", "7e1cb559": "members(bytes32,address)", "7e1cd42f": "convertIcoBalance100to70()", "7e1cd79c": "Voting(bytes32[])", +"7e1d05e9": "setPayNoderSlot(address,uint256)", +"7e1d3dd8": "withdrawGFCEAfterPresaleOver()", +"7e1d4d61": "rewardsToShare()", "7e1db495": "addPendingWithdrawl(uint256,address,bool,bool)", "7e1db516": "init3_block_height()", +"7e1dcedc": "addBSCserver(string)", +"7e1dd225": "Delisted(address)", +"7e1ddf64": "init(address[],address)", "7e1e06ea": "EventTransferWasReset()", "7e1e1ff6": "Giorgi()", "7e1e447e": "total_wins_count()", +"7e1ef4af": "OffTimeLock(address)", "7e1f2bb8": "createTokens(uint256)", +"7e1f6075": "miniDealineTime()", "7e1f89c8": "PRE_SALE_START()", +"7e20bc2e": "balancesOf(address[])", "7e20e7c0": "getRegistryDataMinter()", +"7e20eee8": "RegionPayout(address,uint256)", +"7e21c28b": "blockData(uint256)", +"7e221d62": "getSnowPatrol()", "7e2224bd": "compress(bytes)", +"7e22b75a": "claim(bytes32,uint256,address,uint256,bytes32[])", +"7e23418b": "updatePoolInfo(uint256,uint256,uint256)", "7e23f7cd": "teamKeepingLockEndBlock()", "7e241c64": "getServiceNameByAddress(bytes32,address,address)", "7e241dbf": "unlockMiner()", "7e245fac": "PHXTKN()", +"7e24c681": "IPHONE_MADE_MAX()", "7e24cb8f": "reservedFundLeft()", +"7e24f904": "init(address,uint256,string,string,uint256)", +"7e250fad": "setRis3Address(address)", +"7e251d57": "getAssetManagerEscrow(bytes32)", +"7e257dc8": "allRecords(uint256)", +"7e2584de": "cancelEpoch(uint256)", "7e25ac5b": "destroyRewards()", "7e25b7d6": "implements(address,bytes4)", +"7e25d369": "usdt_gwtb(address,uint256)", "7e266385": "setPrefix(uint8)", "7e26639f": "saleLimit()", +"7e26b62d": "setLockUsers(address[],uint256[],uint256[])", "7e27133f": "tradingMonDataContract()", +"7e2748f6": "GetUserCollaterals(address)", "7e274f7e": "Reederem(string)", +"7e27fff5": "getFuelPriceInUSD(uint256)", "7e288822": "pendingWithdrawal()", "7e298249": "setPriceInWei(uint256,uint256)", "7e29d2a3": "TokenCoin4()", +"7e29d6c2": "addPool(address,address,uint256)", "7e29dad0": "testBuyExceedHardLimit()", "7e29f242": "changeDiscount(uint256,uint256,uint256,uint256)", +"7e29fbb0": "getLeverage(address,uint256,address[],uint256[])", "7e2a0141": "removeToken(address[16],address,uint256)", +"7e2a2417": "initialDecexIn()", +"7e2a53af": "setIToken(address)", "7e2a6db8": "trusted()", +"7e2a9812": "OracleQueryStringChange(string)", "7e2ac454": "disagree(bytes32,bytes32,bytes32[])", +"7e2b6e2e": "setOpenSwap(uint256)", "7e2bc821": "SaturnPresale(address,address,uint256,uint256,uint256)", "7e2bef39": "calldata(uint256)", "7e2bf3c6": "freezeCreditScore(address,uint256,string)", "7e2c0459": "_transfer(bytes32,bytes32,uint256)", "7e2c83fc": "seriesByAddress()", +"7e2c8812": "getGISWOverISWRatio()", +"7e2c9981": "ERC20Withdrawn(address,uint256)", +"7e2ca390": "RaffleWinner(address,uint256)", +"7e2cb974": "hatcheryShrimp(address)", +"7e2cba4a": "toYMD(uint256)", +"7e2cd995": "WPDailyBal(address)", "7e2ce380": "_calculateOwnerCut(uint256)", +"7e2d0ebc": "getUriById(uint256)", +"7e2d14d9": "getInvestmentAssetAddress(bytes4)", +"7e2d21a5": "addTokenOraclePair(address,address)", "7e2e3958": "setBUS(bytes32,uint256,string)", "7e2e756e": "testToUint32()", +"7e2eeb7e": "lastCalBlock()", +"7e2eee53": "delayTime()", "7e2f014f": "addResolversDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", "7e2f0843": "updateMaxTokensCollected(uint256,uint256)", +"7e2f42e7": "transactionId()", "7e2f6e3b": "getReserveSupply()", +"7e2f75e3": "ETH2DAI_ADDRESS()", +"7e2fb4d9": "removeIndividualRestriction(address)", "7e2fc2b6": "_Crowdsale(address,uint256,uint256,address)", "7e2fdb0c": "dataForBuy(address)", "7e2ff5f9": "setPreSale()", "7e300fc6": "crowsaleShare()", "7e319e4a": "getNextAssignedPolice(uint256,address)", "7e31c53a": "HodlWithdrawn(uint256,address,uint256)", +"7e31c822": "submitZkProofForMultipleBlocks(uint256,uint256,uint256[])", +"7e324479": "setCommitmentAges(uint256,uint256)", "7e32456d": "STRC_SUPPLY()", "7e327168": "allocatePresaleTokens(address,string,uint256,string)", "7e32a592": "repairTheCastle()", +"7e32aea8": "deshFeePercentX100()", "7e32baea": "TRIPToken()", "7e32fc47": "registerAsset(string,bytes32)", "7e331a99": "setUserMessage(string)", +"7e33957e": "setFinancialDetails(string)", "7e33e361": "setRowQuiter(bool)", +"7e34026e": "showAllocations()", "7e340b01": "getLatestPayday(address,address)", "7e342507": "gameIndexToBuy()", "7e3475a8": "lockQtyToAllowTrading()", "7e347b82": "REALCrowdsaleMock()", +"7e348b7d": "enter(address,uint256)", "7e34dbe0": "deposit(uint256,uint256,uint8,bytes32,bytes32)", +"7e355f81": "prizelevelsunsday(uint256)", +"7e36320b": "faucetCooldown()", "7e363ffa": "setupCost()", +"7e365950": "getTimestampPublic()", "7e36edce": "RATE_DAY_28()", +"7e371294": "addERC20TokenContractAddr(address)", "7e373bc0": "bulletAmount()", +"7e37731b": "getStakedBalance(uint256,address)", +"7e378e07": "COMMIT_PERIOD_START()", +"7e37c08c": "lowUtilRateMultiplier()", "7e380099": "addOrgCertificate(string)", +"7e3804c7": "startOwnershipTransfer(address)", +"7e380ec7": "eachMarketData(address)", "7e38b424": "reverseFiatPurchase(uint256)", "7e38d065": "ADVISORS_AND_CONTRIBUTORS_TOKENS()", +"7e38d973": "createDApp(bytes32,uint256,bytes32)", "7e39082f": "escrowedMYB(address)", +"7e397b5c": "ownsAddress(string,address)", +"7e398c22": "disputerDisputeRewardPercentage()", +"7e3a8d38": "getExtraInfo()", +"7e3abeea": "getUserTotalDeposits(address)", +"7e3b1119": "txt()", +"7e3b6d68": "deployToken(uint256)", +"7e3bc03c": "platformToken2()", "7e3bfa1d": "removeRecoveryAddress(address)", +"7e3c45e2": "getUniReward(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()", +"7e3e2596": "getPairs(address,uint256,uint256)", "7e3e40ec": "getRequiresKing(bytes)", "7e3e7bdf": "checkReward(address,uint256,uint256)", +"7e3eafaa": "ADMIN_setAirDropAmount(uint256)", +"7e3ee80d": "getDeveloperAccount()", "7e3ef7cd": "getMyBalance(address)", "7e3ef935": "setReleaseMake(uint256,bool)", +"7e3f1015": "freeMagic(address)", "7e3f2b2d": "getDocumentSignsCount(uint256)", "7e3f5b70": "JFBToken()", +"7e3f8b5a": "approve_275(address,uint256)", "7e3faec1": "GoldTxFeePool(address,address,bytes)", +"7e3fdf00": "ethPayoutForMlnAmount(uint256)", "7e402eb0": "setSecondAdmin(address)", +"7e408b09": "_getKyberHintHandlerAddress()", +"7e408eb5": "relAddr()", +"7e40e9c7": "dns(uint256)", "7e410427": "aDay()", "7e4115ba": "toAddress(string)", +"7e413245": "getBlockTotalDeposits(uint256)", +"7e4173a8": "voteExists(uint256)", +"7e418fa0": "last_user_vote(address,address)", "7e4241b4": "ownerTake(uint256,address)", +"7e42683b": "investorCountry(address)", "7e429f02": "burnMultDen()", "7e42be1a": "quarantineAddress(address)", "7e42f8b4": "setRefund(bool)", "7e42f94d": "horsePr(uint256)", +"7e42fbc4": "getPartialRoundUp(uint256,uint256,uint256)", "7e43185a": "showCollectorsAddresses()", "7e4358c3": "used_in_contract_fees()", "7e43828e": "bountyTokenWithdrawal()", "7e441048": "hasCategory(address,uint256,uint256)", "7e445d44": "setEndICO(uint256)", +"7e44755b": "w1()", +"7e44d2cc": "feesWallet()", +"7e44d89c": "initialLockedAmounts(address)", "7e456808": "reclaimUnusedEtherBalance()", "7e457b85": "startEarlyStage3()", "7e458492": "addInspector(address)", +"7e459c60": "sum(address)", "7e45d15c": "___coinAddress()", +"7e466413": "addBulk(bytes32[])", "7e466bb4": "forTeamCOT()", +"7e46840a": "changeHotWallet(address)", "7e470882": "setStrF1(string)", +"7e4708dd": "setEthCapMax(uint256)", +"7e47685e": "balanceOfAutoFarm()", +"7e47d625": "setTaxless(bool)", +"7e47dc25": "newRatioEvent(uint256,uint256)", "7e482379": "totalEthInWeiForSecondIco()", +"7e4831d3": "mintPaused()", +"7e487822": "ETHtoP3Dbymasternode(address)", +"7e4906ae": "FEE_UPDATE_DURATION()", +"7e490a9e": "borrowBook(uint256)", "7e4929c4": "priceBox2()", "7e4930ae": "modifyCap(uint256)", "7e495dae": "changeMinters(address,address,address)", "7e4985c5": "LookUpAvailableDivLarge(address)", "7e49aa05": "testSelfdestructIsRevertedWithMinReturn()", +"7e49bcc1": "waitEpoch()", "7e49d530": "fechVoteMainInfoBySnapshotBlock(uint256)", "7e4a1731": "returnWallet()", "7e4a82b1": "foreignBuyTest(uint256,uint256)", "7e4b5eb5": "getPhControlLimits(bytes32)", +"7e4bc3b6": "lookParams5(address)", +"7e4bdd1e": "ewtb()", "7e4c3b2e": "requestRate(string,string,bool,uint256,uint256)", +"7e4c8a80": "isValidCaller(address,bool,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)", +"7e4e61d7": "oracleAddr()", +"7e4e914f": "percentFrozenWhenBought()", "7e4e95d7": "airDropPercent_()", "7e4eb35b": "left43(uint256)", +"7e4edf70": "mintManager()", "7e4f1a9f": "AKMJCHAIN()", +"7e4f5e4c": "patientDetails(uint256)", "7e4f6b95": "MyAdvancedToken(uint256,string,string)", +"7e4f907d": "closeMine()", "7e4f9397": "gSetAlive(bool)", "7e4fdd0b": "SetherStarted()", +"7e4fde90": "_supplyOnEth()", +"7e50205e": "balanceOfERC20(address,address)", +"7e504638": "tokenURIHashToId(bytes32)", +"7e507742": "volatilityFactor()", +"7e518ec8": "setBaseMetadataURI(string)", +"7e5192e3": "joinIII6(string,string,string,string,string)", +"7e52181d": "latestDailyID()", +"7e5394b5": "queryAgentDPOSellRecordInfo(address)", +"7e53bc04": "registerWithAuthorization(address,string,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "7e545305": "firstBalance(address)", "7e5465ba": "approve(address,address)", "7e549814": "setEscrowedProjectPayees(uint256,address)", +"7e54a689": "showOTC()", "7e54b8e2": "AddCandidate(string)", "7e551b75": "hashOf(uint256)", "7e55a212": "JustTheTipCrowdsale(uint256,uint256,uint256,address)", "7e55a311": "getPurchaseSeconds()", +"7e55acb4": "loopLimit()", "7e55b83c": "readValidDate(uint8)", +"7e55c09d": "LIFT_FACTOR_DEMONINATOR()", +"7e55d275": "allergies(address)", "7e55ec25": "CryptoPokemon()", +"7e5653b1": "booleanfun()", "7e569e66": "TDEContributorCount()", "7e56d25f": "ReplyShare(uint256,string,bool,string)", "7e56fde5": "calculateEggBuySimple(uint256)", +"7e5708ee": "BSPAM_IECI_PC_Network_Activation()", "7e5713d9": "setGenesisAddressArray(address[])", "7e574098": "confirmEthTransactionRequest()", "7e575524": "poolMintAmount()", @@ -72328,128 +132363,235 @@ "7e58f815": "pauseRoundA()", "7e59092e": "getVersionById(uint256)", "7e5912d7": "reputationHashSubmissions(address)", +"7e5933c0": "setRewardPercentage(uint16)", +"7e595f46": "convertSynths(string,string,uint256)", "7e59d513": "deathData_f1()", "7e5a4dde": "getMarriage(uint256)", +"7e5a4eb9": "getCToken(address)", +"7e5a54d1": "pendingMeowth(uint256,address)", "7e5a66df": "uniqueSpinnerOwners(uint256)", "7e5a9ed9": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", "7e5af26c": "BugisContract()", +"7e5af771": "flipRatio(address,address,uint256)", "7e5b1cdd": "GOToken()", +"7e5b1e24": "updateContractURI(string)", +"7e5b4756": "Pynthetix()", +"7e5b4ebe": "authorizedContracts(uint256)", +"7e5b7c2b": "approve_434(address,uint256)", +"7e5c238f": "zTransferFundsToOwner(uint256)", "7e5c344a": "Upgrade(address,address,uint256)", "7e5c86a2": "moveFundToOwner(uint256)", "7e5cd5c1": "disableMinting()", +"7e5e12ee": "insured_value()", "7e5e190c": "getBaseTypeStats(uint256)", +"7e5e219c": "getCurrentTimeStamp()", +"7e5f16c8": "burn_address(address)", +"7e5fa259": "vacummClean(address[])", +"7e5fae01": "gethashfee()", "7e5fc6f4": "calculateIcoBonus(uint256,uint256,uint256)", "7e600c87": "doSend(address,address,address,uint256,bytes,bytes,bool)", +"7e601550": "govSetExtra(uint256,uint256,uint256)", "7e602078": "assertInvalidState(address)", "7e60a4bf": "removeLockFunds(address[])", +"7e60c7a0": "_setCompSpeeds(address[],uint256[])", "7e61c768": "isClient(address,address)", "7e61e6ef": "GasWar()", +"7e6212b9": "Certificate_Issued()", "7e621667": "sendFromOwn(address,uint256)", +"7e622c56": "UPDATE_TOKEN_URI_ROLE()", +"7e623271": "cancelArbitration(uint256)", "7e626e58": "getUnPurchasedProducts()", "7e62eab8": "withdraw(int256)", +"7e630c62": "setCurveInfo(address,int128,int128)", +"7e6335c7": "setFeeSplit(uint256,uint256)", +"7e63768a": "setAlphaLastUpdated(uint256)", "7e638974": "CalculateFinalDistance(bytes32,bytes32,bytes32,bytes32)", "7e63dd86": "seed_additional_token(uint256)", +"7e643074": "searchProduct(uint256,string)", +"7e644d79": "AdminChanged(address,address)", "7e64721f": "viewNumberOfMessages()", +"7e64c7aa": "_rebalanceCallerFee()", +"7e64ede0": "riskAversion()", "7e6503bb": "getActiveOrderCounts()", +"7e6524e1": "landlordTerminateLease(string,uint256)", "7e655ddd": "tokensSoldInThisRound()", "7e6667c9": "Invoked(address,bool,uint256)", "7e6688a2": "lastJackpotPayout()", "7e668cd2": "fSqr(uint256)", +"7e66c0b9": "claimETH(address)", "7e66f15f": "nowSupply()", +"7e66f8e0": "joinActivityPlayer(string,uint256)", +"7e6706df": "externalControllers(address)", "7e67429f": "switchToCrowdsale(string)", "7e687a8b": "getTotalInvoicesCount(address,uint256[])", +"7e68a74e": "AddTrusted(address)", +"7e68f511": "trade(address,address,uint256,bytes,uint256,uint256[])", +"7e6906de": "projectIdToBonusContractAddress(uint256)", +"7e6961a1": "Create(uint256,address,uint8,uint8,uint64,uint64,uint64,string)", "7e69671a": "distributeFees(uint256,uint256)", +"7e69b7b0": "appeal(uint256)", "7e69ba22": "ethForTokens(uint256)", +"7e69c0e2": "addWearableProb(uint32,uint256,uint256)", "7e69e0fc": "ETH420on420()", "7e6a0720": "removeClaim(uint32,int256,string,string)", +"7e6adfec": "Unlocked(address)", +"7e6ae6f1": "postHeatOffer(uint256[],uint256[])", "7e6b867f": "insertProductIntoCart(uint256)", "7e6bdb95": "getTransactionHashes(uint256,uint256,bool,bool)", "7e6beae1": "team2018TokenCreated()", +"7e6c37db": "getAverageBlocks()", +"7e6c75f2": "getUserContract(address)", "7e6c945c": "FileHashInt()", +"7e6cbb6a": "getFactories()", "7e6d0fa0": "isWithdrawAllowed()", "7e6d6928": "SmartBusinessToken()", +"7e6d77c3": "depositZILD(uint256)", "7e6d86ff": "BOUNTIES_SHARE()", +"7e6d8da7": "addPastPoolPrograms(address[],address[2][],uint32[2][],uint256[],uint256[],uint256[])", "7e6dce9c": "throwIn()", +"7e6decae": "_maxAmount()", "7e6e65f3": "acceptSellOffer(uint32)", "7e6eee20": "olympusTest()", +"7e6f345f": "circadian()", +"7e6f4de5": "getWantTokenWhiteListAndY()", "7e6f6947": "setTokenBurnFeeAbs(address,address,uint256)", +"7e6f7940": "RequestFunds(uint256)", +"7e709c3c": "_chi()", "7e71496b": "TRCToken(uint256,string,string)", "7e71572b": "_checkCap(uint256,uint256)", "7e71ccd8": "HShoe_Limit()", "7e71fb09": "transferOwnershipImmediately(address)", "7e72fb52": "buyToken(address)", "7e7307c5": "Contribute(bool,uint8)", +"7e730e2b": "getCurrentYears()", "7e737551": "setMaxWhitelistLength(uint256)", "7e7388b1": "NewRiskAdr(address)", +"7e73af0b": "calculateCurrentPriceOfKiboToken()", +"7e740ddf": "feeCoefficient()", "7e742432": "addNewDegree(string,bytes32)", "7e74325f": "turn(address)", +"7e744eea": "isTendable()", +"7e747438": "SetMaxAllowedReservingPercentage(uint256)", "7e74a1ed": "depositRate()", +"7e750f24": "setupDistribution(address[],uint256[],uint256[],uint256[])", "7e754146": "getCurrentImpeachmentUrlDetails()", +"7e75e3bc": "ggg8(uint8)", "7e761240": "setMyName(bytes32,bytes32)", "7e766e1f": "IonixxToken(uint256,string,string)", +"7e76aab9": "adminFeeN()", "7e76b836": "minter1()", "7e7712f2": "standardReleaseAmount()", "7e773d9d": "testTimestamp()", +"7e774689": "approveToMUsd(string,uint256)", "7e77509e": "isRoundingErrorFloor(uint256,uint256,uint256)", +"7e7778c0": "liquidateAfterYear(uint256[])", "7e779985": "isTransactionSuccessful(uint32)", +"7e77a2c0": "revenueAtTimeOfWithdraw(address)", "7e77c503": "initialize(string,string,uint256,address,address)", +"7e77f685": "ClaimReward(address,address,uint256)", "7e780157": "PERCENT_100()", "7e7894e4": "PendingETHs()", +"7e7961d7": "recordMintEvent(uint256)", "7e79a562": "TripPay(uint256,string,string)", "7e79e8ba": "getEmail()", "7e7a2fbf": "contribute_toTheGame()", "7e7af34f": "setPostICOSale(bool)", +"7e7bb8a1": "setMinCollateralization(uint256)", "7e7be158": "validatePurchaseAndDistributeFunds(uint24[],uint24[],uint256[])", "7e7c16de": "secsPerBlock()", "7e7c4243": "getTheBet(address)", "7e7c8c6e": "catToken()", "7e7d5689": "requireTrade(address)", "7e7d76ad": "SPORT(uint256,string,uint8,string)", +"7e7d7c7e": "ipfsBase()", "7e7db227": "lastAccountNum()", +"7e7db6e1": "allowRecoverability(address)", "7e7dd581": "oldDBAddress()", +"7e7dd60b": "manageMinter(address,bool)", "7e7e4b47": "getOutcome()", "7e7e5a75": "changeIdentityNarcoRespect()", +"7e7eb92b": "claimBTC(uint256,bytes32)", "7e7f1bfd": "total_refunded()", +"7e7f6046": "getStoredTime()", "7e7f8e1e": "AddItem(uint256)", +"7e7fa223": "jackpotCut()", +"7e7fd66c": "lastInitializedVersion()", "7e809973": "hash(address)", "7e815fb4": "ScooterCoin()", +"7e8167d7": "getMpond(uint256)", +"7e816826": "PollWithdrawn(address,uint256,uint256)", "7e81701a": "sitExchanger()", "7e81b6aa": "KingdomFactory()", "7e823bd1": "OMGToken()", +"7e82725f": "withdrawethToOwner(uint256)", +"7e82933f": "setAdvance(uint256,uint256,uint256)", +"7e82a6f3": "decayPeriodVotes(address)", +"7e82ae22": "getOracleAddressesByToken(address[])", "7e82d0e6": "dbkWithdraw()", +"7e82e368": "WhitelistAddressAdded(address)", "7e83027f": "setRegionForSaleToAddress(uint256,uint256,uint256,address)", "7e8306ae": "profitrate()", +"7e831490": "updateInformation(bytes32,bytes32,uint256,string,bytes32)", "7e83185b": "updateImageAddress(string)", "7e835e86": "minechaincointest(uint256,string,uint8,string)", +"7e83667b": "balanceInVault(address)", "7e837ccc": "dispute_confirmed()", +"7e83ea78": "totalDepositedInUSD()", +"7e83f7d7": "swap(address,address,uint256,bool)", "7e84adda": "setGameState(bytes32,int8[128],address)", "7e85477f": "myInner1()", +"7e85df11": "OnPaymentSent(address,uint256)", +"7e8600c6": "lockedBalances(address,address,uint256)", +"7e864d30": "calculateOracleWeightAndAvgPrice(uint256,uint256)", +"7e86d25c": "mulMemoryCheck()", "7e86e0f2": "BKFToken()", "7e86f8e5": "blockedDeadLine(address)", "7e873c2c": "uniq(uint256[])", +"7e8795bc": "query_vendor(address)", "7e87cf30": "tokenOpen()", "7e888767": "getNumUsersToPayout(bytes32)", +"7e88ac16": "maxSupplyToPurgeInUSD()", +"7e88e351": "priceChangeCoeffecient()", "7e88f603": "returnDeposit()", +"7e8901ea": "collectPlatformInterest()", "7e893159": "changeIssuer(address)", +"7e8937d9": "checkpointTotalSupply(uint256)", +"7e89cc4d": "MINTPERBLOCK()", +"7e8a776f": "USDC_ILK()", "7e8a9db9": "BasketEscrow(address,address,uint256)", +"7e8aa69d": "proposeAdminTransfer(address)", "7e8ab941": "_play(uint256,uint256)", +"7e8ac590": "round_m(uint256)", "7e8bca6f": "Tenteniy()", "7e8bf1cd": "calculateCurrentMarketPixelPrice()", +"7e8c09a2": "zzzethV2()", "7e8c3ab6": "distributePartnerTokens()", +"7e8c7f08": "ROOT_ROLE()", "7e8ca5f6": "unlockAdvisorTokens()", "7e8d1a39": "finishIssuing()", "7e8d2c19": "reserveForJackpot()", +"7e8dcabf": "changeBuyingYFITokenFee(uint16)", +"7e8de02e": "removeVote(uint64)", "7e8e13e4": "Lesson_7(address,uint256)", "7e8e353c": "setValidatorForND(uint256,uint256,uint256,uint256)", +"7e8e3749": "getInterestByStakeId(address,uint40)", "7e8e6d45": "setScaleContractAddress(address)", "7e8ecf4f": "balanceOfInvestor(address)", +"7e8f39e9": "recoverERC20v1(address,address)", +"7e8f82b7": "updateBouncerContract(address)", +"7e8f95e4": "replaceDepositProfileAtIndex(uint32,uint32,string,uint8,address,uint256,uint256)", "7e8ff036": "submit(bytes32[])", +"7e8ffa73": "balanceReserved()", +"7e9015ef": "TileAttackedSuccessfully(uint16,address,uint256,uint256,address,uint256,uint256,uint256,uint256)", "7e904a48": "getNumContents(uint256)", "7e904f7b": "stakePrimordialTokenFrom(address,uint256,uint256)", +"7e905dfe": "globalPayin()", "7e90819a": "unofficialApplicationSignUp(string)", +"7e91c2e3": "getBondTypeByID(address,bytes32,uint8)", "7e9266bb": "ChallengeToken()", "7e926b4b": "renounceOwnership(bool)", "7e92a7e8": "getPublicBattlePokemon1()", +"7e92a7fd": "_MINTTO()", "7e93150b": "_transferHelper(uint256)", "7e93163b": "tip(bytes32,bytes32)", "7e932d32": "setFrozen(bool)", @@ -72461,24 +132603,42 @@ "7e94cf0c": "getValidityBondAttoeth()", "7e951bc6": "update_coeff()", "7e95385c": "setJackpot(address)", +"7e959f9d": "uintMinD()", +"7e95a301": "approve_500(address,uint256)", "7e95cd27": "forbid(address)", "7e95d2f6": "doSend(address,address,uint256,bytes,address,bytes,bool)", +"7e961709": "CompanySaleStatusChanged(bytes32,bool,uint256,address)", +"7e964eec": "pllist(uint256)", "7e968195": "batchTransferETH(address[])", "7e969692": "EthRateChange(uint256)", +"7e96c150": "invalidateAddressNFT(address)", "7e97ca29": "registeredInDay(address)", +"7e98b340": "halvingTimes()", "7e98bc8f": "Accumulate(address,uint256)", +"7e990772": "ADMIN_PERCENT()", "7e990ad8": "isRentals()", +"7e992cb8": "mkr()", +"7e997792": "insert(string,uint256,string,uint256)", "7e999cd9": "revokeMintDelegate(address,int256)", +"7e99d454": "setPreSaleAddress(address)", "7e9a8685": "getWager(address)", +"7e9aa2c0": "cancelERC721Trade(uint256)", "7e9abb50": "getUnavailableTakerTokenAmount(bytes32)", "7e9ad046": "upper(string)", +"7e9adccf": "closeEvidencePeriod(uint256)", "7e9aef53": "elementsAreSet()", "7e9b98ae": "transferFromWhiteList(address)", "7e9ba301": "getResponseAddress()", +"7e9ca9b1": "numberOfPendingWithdrawals_DEPRECATED()", +"7e9cca0d": "rule(uint256,uint8)", "7e9cd30c": "rescueLostHero(uint256,address)", "7e9d2ac1": "burnAll(address)", +"7e9d5971": "isPayNoder(address,address)", "7e9d7f68": "namiCrowdSaleAddr()", +"7e9d8ad4": "periodBlock(uint256)", +"7e9da4c5": "getOrderTreeHeight()", "7e9de0bc": "buyTile(uint8,uint256,address)", +"7e9dffe6": "likes(uint256)", "7e9e1561": "getStakerFromDelegateKey(address)", "7e9e1637": "getStockTotal(address)", "7e9e1cb6": "Execution(bytes32)", @@ -72488,17 +132648,25 @@ "7e9e511d": "issueAndActivateBounty(address,uint256,string,uint256,address,bool,address,uint256)", "7e9e940a": "ClaimDisbursement(address,uint256)", "7e9eaf41": "getMinBorrowedValue()", +"7e9fae46": "employee_infos(address)", +"7e9fd222": "deleteLiquidation(address)", "7ea01c0d": "currentLowest()", "7ea074b3": "GetJackpots()", +"7ea10a9d": "staking(address,uint256,uint256,uint256)", "7ea11880": "VestedPayment(uint256,uint256,uint256,uint256,uint256,address)", "7ea15da1": "priceUpdateAt()", "7ea17a1d": "ORACLIZEQUERYMAXTIME()", "7ea1a871": "announce(uint256,uint256,uint256)", "7ea1b7ba": "_closeSale()", "7ea1e2d9": "ethpause()", +"7ea208b5": "offerItemsForSaleInBatch(uint256[],uint256[])", "7ea23fa6": "unlockEthBalance(address,uint256)", +"7ea277f0": "uniswapAddLiquidity(uint256,uint256)", +"7ea2acfb": "getPublicName(address)", "7ea2bbac": "getOwnerGennezise(address)", "7ea2be2b": "log32(uint32)", +"7ea2d2f0": "GetHeroStockStats(uint16)", +"7ea2dad2": "gasPermitido()", "7ea2ddeb": "randomNumber(address,uint256,uint256)", "7ea2e31c": "EligmaMintingContract()", "7ea2fc89": "cancelBetByPlayer(uint256)", @@ -72506,98 +132674,173 @@ "7ea310d4": "getCurrentPrice(uint40)", "7ea31352": "getReadableStats()", "7ea31ded": "isBuyBackOne()", +"7ea382c1": "withdrawLiquidity()", +"7ea3cffd": "DiscipleVendToTime(uint256)", +"7ea40291": "SimpleGameCreated(address,uint256,uint8)", "7ea46993": "revokeMultiplePermissions(address,bytes32[])", +"7ea5082d": "getOnePlayXCoin()", "7ea531e7": "_generateNewHorseShoe(uint256,uint256,address)", +"7ea53549": "get_gas_limit()", +"7ea57180": "_checkTotalActiveBalance(uint64,uint256)", +"7ea598aa": "badPrictice(address)", +"7ea5abcf": "registerSeedForIncubation(uint256,address,uint256,uint256)", "7ea5d50e": "tokenWinRatio()", "7ea5e7d3": "reserveDeployment(address,bytes32,address,uint256,uint8,bytes32,bytes32)", "7ea60eb8": "roleEditorAddress()", "7ea61ed7": "withdrawInternal(address)", +"7ea62ca8": "thirdWith()", +"7ea65923": "setContentPrice(uint256)", "7ea6c6ba": "MemoLandCoin()", +"7ea7d51a": "buyPack3()", "7ea80eb2": "_receiveBuyLandForCandy(address,uint256)", "7ea83869": "increasePreSaleSupply(uint256)", "7ea84748": "addPlayerOrder(address,uint256,uint256,uint256,uint256,uint256,uint256)", "7ea868e1": "makeInvest(uint256,bytes5)", +"7ea871ef": "contractBtcBalance()", "7ea8f250": "isRunningPreIco(uint256)", +"7ea90fd9": "cook(address[],uint256[],bytes[])", "7ea94985": "calcHashes(uint32,uint32)", "7ea95733": "emissionReleaseThreshold()", "7ea9b2bc": "REQUEST_URL()", +"7ea9c5e3": "tokenToBaseSwapInput(uint256,uint256)", "7eaa0c29": "LogTransactionFailed(bytes32,address)", "7eaa4389": "finish(uint8,uint8,uint8)", "7eab4e48": "openGiftFromSanta(address)", "7eac7382": "getCAOAddres()", +"7eacd614": "getUserBetCount(address,uint256)", +"7eadba59": "swait(address,uint256)", "7eae1626": "getBack()", "7eae6759": "_setBalance(address,uint256,uint256)", "7eae75a8": "EtherMango()", "7eaef50c": "over()", +"7eaef559": "enableLimitMode()", "7eaf45f8": "SaveAccountBuyingGodz(address,uint256)", +"7eafbd51": "getLimitGridsEachtime()", "7eafcdb1": "updateGroupName(address,address,bytes32)", +"7eb099b6": "landMarket()", "7eb13d8a": "_SetEducationQualificationOf(uint256)", "7eb14990": "isBuyer(address,uint256)", +"7eb160e3": "getProxyWeights()", "7eb1bfb9": "feeWithdrawEthAll()", +"7eb1e761": "installModule(address)", +"7eb26ebd": "setwallet3(address)", "7eb2b856": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32)", "7eb30cd0": "checkTreeStructure(address,address)", "7eb312b1": "SUCCESS_BONUS()", "7eb41ce5": "modifyCfo(address)", "7eb4b376": "UpgradeSpaceETH(uint8,uint256)", +"7eb4d7d3": "setWinningAmount(uint256)", +"7eb4f80c": "statusPhase()", +"7eb4fbe8": "arrayTeam(uint256)", "7eb52145": "_preValidateFinalization()", "7eb5df39": "equal(uint256[],uint256[],string)", "7eb60591": "NVISIONCASHTOKEN()", +"7eb609e1": "DepositETHAmount()", "7eb6634c": "phasePresale_From()", "7eb69ba1": "hint(int256,bytes32,string,bytes20)", +"7eb7693c": "update_component(uint256,string,bytes32)", +"7eb7b2ee": "setPendingClaimDetails(uint256,uint256,bool)", "7eb82601": "getHighestBlockNumber(uint256)", +"7eb85d52": "getTotalEarnedether()", +"7eb88053": "removeRiskyStake(uint256)", +"7eb8a686": "sendFundsToNewAddress()", "7eb96aa3": "setCurrentWeekPool(uint256)", +"7eb9b674": "sponsorProposal(address,uint256,bytes)", "7eb9f04a": "updatePriceInWei(uint256,uint256)", +"7eb9f571": "TotalAmount()", +"7eba6b99": "RecipientApproval(address,address,bool)", "7eba7ba6": "getSlot(uint256)", "7ebaaa60": "MemberBoughtToken(address,uint256,uint256,uint256,uint256,uint256)", "7ebadcd8": "acceptPayments(bool)", +"7ebb0e26": "perUnlockLP()", "7ebd02f8": "typeA()", +"7ebd1b30": "whitelist(uint256)", "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()", +"7ebe3f2d": "firstReferrer(address)", +"7ebe4632": "convertTokenForBNB(address,uint256)", "7ebe7626": "FreezeTokensReleaseTime()", "7ebedc34": "hasEndedIco()", +"7ebef497": "forwardMoloch(address,bool)", "7ebf65fd": "changeGasLimitOfSafeSend(uint32)", +"7ebf94c9": "_feeTaker()", +"7ec04fdc": "avatarExists(uint256)", "7ec0c39c": "whitelistPrincipleLockPercentage()", "7ec0f30d": "ack(string)", "7ec13996": "getBytes32Value(string)", +"7ec152b1": "test_addToFeePool_noDelegatorFees()", +"7ec16b99": "mintPower()", "7ec1c1aa": "acceptPAIReceiptOwnership()", "7ec20127": "createPoolIfNeeded()", +"7ec21cd9": "creamY()", "7ec2402f": "freezeSupply()", "7ec27000": "AiTokenToken()", "7ec2ae46": "setSparkDividends(address)", "7ec2e264": "_generateCode(address,uint256)", +"7ec2f2ca": "addRewardMWallet(uint256)", "7ec2fd36": "capReleaseTimestamp()", "7ec2fd95": "DrawCom()", "7ec36494": "osmCoin()", +"7ec37f2c": "setEndDate(uint16,uint8,uint8)", "7ec3e63e": "getsubscribersSinceLastHatch(address)", +"7ec41a74": "increaseEndTime(uint256,uint256)", +"7ec4343f": "LpTokenMinCount()", "7ec4a5a6": "requestReturn(address)", "7ec4edbe": "offset(address,address)", "7ec509c4": "external_call(address,uint256,uint256,bytes)", +"7ec514f3": "withdrawBlockInterval()", "7ec54bdc": "eosShareDrop()", +"7ec5a03a": "_decode_sol_bytes17(uint256,bytes)", +"7ec5b556": "setLiqRaiseAddress(address)", "7ec62cf7": "MthereumToken()", +"7ec62e01": "disarmCode()", "7ec650db": "__mul(bytes,bytes)", +"7ec68845": "HPCCoinReady(address,uint256)", "7ec69c50": "changeWhitelistingStatus()", +"7ec7115e": "exRate()", "7ec72d3c": "setSwap(address,uint256)", +"7ec77913": "gib_flag(uint256,string,uint256)", +"7ec7923f": "devCloseElection(uint64,uint64,address,address,uint256)", +"7ec7e138": "OnOpenGameResult(uint256,address,bytes32,uint256,uint256,uint256)", "7ec80c27": "priceStep6()", +"7ec816dd": "mirrorFee()", "7ec82929": "setFunctionIdVoteRules(bytes4,bool,uint256[5])", +"7ec8c857": "viewPartitionClaims(address)", +"7ec8da8d": "toProjectivePoint(uint256,uint256)", "7ec8ff4f": "crosairVoucherSoldCount()", "7ec9084d": "RRCoin()", "7ec9290b": "setCouldTrade(uint256)", "7ec9c3b8": "per()", +"7eca3870": "claimBorrowerCollateral(address,uint256)", +"7eca5907": "BountyWithdrawn(address,uint256,uint256)", "7ecab507": "registerPresale(address,uint256,uint256,bool)", +"7ecaba24": "modelreports(uint256)", "7ecacb95": "Example7()", +"7ecad9db": "name(address,address)", "7ecaf696": "createMultiple(uint256[],uint256[],uint256[],address[])", +"7ecb557a": "upgradeAMMWrapper(address)", "7ecb6475": "aggiungiFrase(string)", +"7ecb8b44": "getSale(uint256,address)", "7ecc2b56": "availableSupply()", "7ecc866f": "changeAllowAllWhitelistIssuances(bool)", +"7eccbaf3": "GasPriceLimitChanged(uint256)", "7eccc40a": "contains(uint256,address)", +"7ecd955a": "requiredPaySell(address,address,bytes32[4],bytes,uint256[3])", "7ecdb299": "SetEthBalance(address,uint256)", +"7ecdb40a": "fetchUnswapPairsFromFactory(address,address[])", "7ecdbf61": "SPPSeriesA(uint256,string,uint8,string)", +"7ece18ca": "setReferralFeeDenom(uint8)", +"7ece3246": "j(uint256)", +"7ece40bd": "KYBER_NETWORK()", +"7ece45e8": "setParams(uint256,uint256,uint256,uint256)", "7ece75dd": "lockPeriodStart()", +"7ecebe00": "nonces(address)", "7ecedac9": "allInitialOwnersAssigned()", "7ecef543": "_getAppliedPolicyIndex(address,uint8)", +"7ecf2fc2": "managerSetBP(uint256)", "7ecf9142": "depositToken(address[2],uint256[7],uint8,bytes32[2])", "7ecfa8a8": "ico(address,address,uint256,uint256,address[],uint256[])", "7ecfae65": "invokeFor(address)", @@ -72607,699 +132850,1333 @@ "7ed040f2": "prod(bytes32,uint128)", "7ed04cf2": "getTokenNames(address,uint256[])", "7ed05315": "newGubberment()", +"7ed06c44": "MASK_TYPE()", "7ed06cf3": "nativeProof_verify(string,bytes,bytes)", +"7ed0b3fa": "getSchainIdsByAddress(address)", "7ed0c3b2": "write(bytes)", "7ed0f1c1": "redeemed(uint256)", "7ed18aa5": "WhitelistUpdated(address,uint8)", +"7ed18b70": "cancelSellOrders(uint256,bytes32[])", "7ed19af9": "multiAccessRevoke(bytes32)", "7ed1ca6a": "BetExecuted(uint256,address,uint256)", +"7ed1f267": "releasedRecords(uint256)", +"7ed22aab": "getOut125()", "7ed273e9": "_mintToken(uint256,string,address)", +"7ed2958a": "getInsuranceFund(address)", "7ed2d5ae": "getBlockBalance(uint256,uint256)", "7ed32df6": "buyRtc()", +"7ed3405d": "investinAddress()", "7ed37b8d": "setPotato(string)", +"7ed3cd4f": "switchDAIbuy()", "7ed40602": "IsICOstarted()", +"7ed42413": "unc_()", +"7ed4b27c": "withdrawDelegatorsReward(uint256)", "7ed4e321": "CakeToken()", +"7ed4e7dd": "hospitalSignup(string,string)", "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)", +"7ed6e45a": "tokenRequest()", +"7ed6f823": "mintCostStaking()", "7ed7101d": "mainIcoStartBlock()", +"7ed75eaf": "Unfreeze(address,uint256,uint256)", "7ed77c9c": "setContract(bytes32,address)", "7ed788c8": "push(address,uint256,uint256)", +"7ed7b2d5": "LogRevealGameSuccessed(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"7ed7e0f7": "LogRevokeCertificate(address,bytes32)", "7ed83d50": "INCO()", "7ed8a719": "addItem(string,string)", "7ed8b225": "createMesaVerify(bytes32[])", +"7ed996a3": "verifyAgtDebugForTesting(uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[])", "7ed9c734": "burnRemainingToken(uint256)", "7ed9d3a3": "_error(uint256,bytes32)", +"7ed9db59": "mint(bytes32,address,uint256)", +"7eda0951": "fundCooldown()", "7eda09e8": "test_me(int256,int256,int256)", +"7eda80c2": "pickExchange(address,uint256,uint256,bool)", "7edaabd8": "sendApprovedTokensToInvestor(address,uint256,string,string)", "7edaca89": "DAToken(uint256,string,uint8,string)", +"7edae510": "confirmAdminTransfer()", +"7edb0a8d": "earnFound()", +"7edb1ccc": "checkTotalWinningTickets(address,uint256)", +"7edb5bad": "rationft()", +"7edb6923": "updateBunny(uint32,uint256,uint256)", "7edba6c8": "sam()", +"7edc5816": "setTimeStartedMining(uint256,uint256)", +"7edcfea6": "tokensForInvester2()", +"7edd39bc": "changeGulper(address)", +"7edd5e34": "updatePointParameters(uint256,uint256,uint256)", "7edd9060": "_nominCap()", "7eddea21": "STAKEHOLDERS_POOL()", "7ede036d": "minimumSupply()", "7edea039": "private_addPermittedRoll(uint256)", "7edebaf1": "buyXname(string)", +"7edec16e": "removeBrandAddress(uint256)", +"7eded2c5": "SetMinDuration(uint256)", "7edee605": "receivePayment(uint256,uint256,bytes)", +"7ee005ab": "getInfo(string)", +"7ee06de3": "ContractRegDateDetails(uint256)", +"7ee079c0": "getEstimatedDFGforRFI(uint256)", +"7ee0b4f1": "SWAP_ETH_for_TOKEN(address,uint256,uint256)", "7ee0cda4": "validate(string,uint256)", "7ee0d91c": "isKycRequired(address)", +"7ee0ea34": "getChainLinkPriceData(address[])", +"7ee0fa5e": "setMotContractAddress(address,address)", +"7ee1d723": "blocksFarmingActive()", "7ee212bb": "planetIndexToApproved(uint256)", "7ee23d59": "removeNodeFromStakedList(address)", +"7ee26906": "govWithdrawETH()", "7ee26b2e": "callKoikeToken(address,address,uint256)", "7ee26e63": "_alreadyInList(address)", "7ee2ea76": "isSafeHavenToken()", +"7ee2ebc8": "pendingERC20(uint256,address)", +"7ee2f661": "provide(address,address,address,uint256)", +"7ee360d7": "editEarlyAccessTokens(address,uint256,bool)", +"7ee3ef23": "getBnbToLiqInputPrice(uint256)", +"7ee41502": "timeRemaningSeconds()", +"7ee41615": "startReleaseBlock()", "7ee42e6d": "_createToken(string,bytes5,address,uint256)", "7ee54b82": "TYU(uint256,string,uint8,string)", "7ee54eec": "onTicketPurchase(uint32,address,uint16[])", +"7ee5573d": "divPoolRecordsDouble(uint256)", "7ee55c97": "isICO()", +"7ee55ffc": "elevenPerBlock()", +"7ee5843e": "_encode_sol(uint256,uint256,uint256,bytes)", +"7ee5a457": "setTokenTypeByToken(address,uint8)", "7ee5c97a": "returnReferral(address)", "7ee5eef2": "changeToPublicSale()", "7ee62440": "highEtherBonusLimit()", "7ee65635": "LookAtDepositsToPlay()", +"7ee68546": "matchOrders()", "7ee6b2d0": "fundingMinCapInWei()", +"7ee74cd1": "externalReward(uint256)", "7ee7f42a": "MIN_RELEASE_DATE()", "7ee80d17": "isScheduled()", "7ee81902": "DatoDEX(address,address,address,uint256,uint256,uint256)", +"7ee828b6": "_decreaseBalance(address,address,uint256,uint256,uint256)", "7ee8703a": "getProgressOfAddressAndId(address,address,uint32)", +"7ee87f30": "numberPointsDaily()", +"7ee8b2f8": "getPendingWithdrawal(address)", +"7ee8f401": "rndTIDxName_(uint256,bytes32)", "7ee96f6d": "getEnd(uint256)", +"7ee978e1": "setParams(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"7ee99283": "removeLiquidityReturn(address,uint256)", +"7ee9b70b": "NewUser(address)", +"7ee9e2d8": "confirmOrder(address)", +"7eea9177": "fnxCollectCFNX()", "7eeb5906": "createCountry(string,string,uint256)", +"7eeb7b2b": "listNewKnight(address[])", "7eec20a8": "cancelTask(uint256)", +"7eec7499": "plyrOrders_(uint256)", +"7eecd2bb": "debtPoints(address)", +"7eecf18d": "removeReward()", +"7eed0172": "myFunc()", "7eed2814": "transferAD()", +"7eeda703": "consult()", "7eee1ab6": "HahaCoin()", "7eee288d": "unlock(address,uint256)", "7eee56f9": "issueIcoCoins(address,uint256)", "7eee6d1f": "getUserQuickPromoBonus(address,address)", +"7eee9309": "reserveFab()", "7eeec2cf": "GigaWattToken()", +"7eeed0ef": "testConstructorPure()", +"7eef90a7": "depositToAiVault(uint256)", "7eefe47e": "editCode(uint256,string)", "7ef01fb9": "totalLockedBonus()", "7ef0356a": "littafiTimeCapsule(bytes32,string,string,string,string,uint256)", "7ef039f8": "candySentAmount()", "7ef09476": "transfer(uint64,address)", +"7ef09bca": "hasRole(address)", +"7ef135f5": "payableFn()", +"7ef1446a": "batches(string)", "7ef1925b": "getShareRange(uint256,uint8)", "7ef1a396": "YOU9COINToken(string,string,uint8,uint256)", "7ef1ab2c": "payoutRange()", "7ef224ee": "getContractOrNormal(address)", "7ef26d42": "HardCapEthereum()", "7ef2bd52": "currNumOfUpgrades()", +"7ef2cd8d": "ROUND_1_TOKENSALE_RATE()", +"7ef30520": "canSign(address)", +"7ef340ef": "ETHPurchase()", +"7ef369eb": "vaults_harvest()", +"7ef379f4": "transfer(uint256,address,uint256,address)", "7ef3bb63": "createKitties()", "7ef3e741": "totalEtherReceived()", +"7ef3e92e": "calSwapID(bytes32,address,bytes20)", +"7ef44b96": "RESERVE1()", +"7ef4aa7b": "VOTE_FEE()", +"7ef4ac19": "getPriceForMarket(address)", "7ef4cabb": "nextSupplyAfterBlock()", "7ef50298": "registry(bytes32)", +"7ef55200": "fulcrumInterfaceContract()", "7ef581cc": "whitelistAdmins()", "7ef58e73": "totalGooProduction()", "7ef59d01": "setTrader(address,bool)", "7ef5b6ea": "refillTokens(uint256)", "7ef5e6a2": "rescale(int128)", +"7ef619bd": "AddMember(address,address)", "7ef61e28": "dayEthInLimit_()", +"7ef71fd0": "changeWorker(address)", "7ef72eb5": "AlphaMarketCoin(address)", +"7ef73189": "registerSbtAndLbtAndBondGroup(address,uint64,uint256)", +"7ef74cfb": "currentTs()", +"7ef774a7": "doALotOfGas()", "7ef7ce92": "revokeMint(uint256)", "7ef81a34": "TestableTwoStageSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7ef8213c": "changeData(address,uint256,uint256,string)", "7ef9016e": "MultiTransferValue(address[],uint256)", +"7ef91f76": "freeze_amount(address,uint256)", "7ef92867": "Faucet(address)", "7ef95c6f": "extractAccountAllowanceRecordLength(address)", "7efa1433": "EVNTToken(address)", +"7efa5f55": "oneMonthTime()", +"7efa96ce": "addRewardCutie(uint32,uint256,uint16)", +"7efac74d": "addtoMarketingBusinessDev(address,uint256,uint256)", +"7efbb1d2": "calculatePercentMultiplier()", +"7efbb2d5": "uncycle()", +"7efbf89d": "refundAllocation()", "7efc05ae": "TUBECOIN()", +"7efc2248": "removeSchain(bytes32,address)", "7efc2315": "minPaymentForAnswer()", +"7efc77fa": "PLATFORM()", "7efcbb33": "getTradeRecord(uint256)", "7efce4ff": "TransactionRefunded(uint256,uint256)", "7efce591": "TokenRDN(uint256)", +"7efcfe85": "cancelOutstandingDepositsForExodusMode(uint64,bytes[])", "7efd3441": "DynamicSKx2(uint256)", "7efd9112": "decodeTokenId(uint256)", +"7efded47": "usdERC20()", "7efe0e76": "PhoenixFundDeposit()", "7efe294c": "removeFromFreezedList(address)", "7efe3d86": "dataControlChangeMinApproval(uint8)", +"7efe4be0": "setPercent(uint256,uint256,uint256,uint256,uint256,uint256)", "7efe64ba": "InfinityHourglass()", +"7efe6b03": "shift(uint256,address[],address[],uint256[])", "7eff1465": "setAccountAllowance(address,address,uint256)", "7eff275e": "changeProxyAdmin(address,address)", +"7effa5b6": "nextEpochAllocatedReward(address)", "7effb427": "TTTToken()", "7efff887": "topUpBalance()", +"7f001581": "reviewWithdraw(uint256,uint8)", "7f002ffe": "setTradeable(bool)", "7f004afa": "participantRoundChange(address,address,uint256)", "7f005c7c": "showHiddenValue()", "7f006ce1": "reading_card_upright_at(uint8)", "7f008a0a": "cancelSell()", +"7f00adc7": "recoverAddressFromSignedMessage(bytes,bytes,bool)", +"7f00d2ad": "HXBCost(uint256)", "7f01bb38": "getVestingRevocable(address,address)", +"7f01d6d0": "operatorEquityPercent()", +"7f01e794": "userProxies(address,uint256)", +"7f01ffeb": "isResponsePossible(bytes32,uint256)", +"7f038f3c": "receiptCount()", +"7f04299c": "receiveLetter(address)", +"7f049d78": "uniswapToken()", "7f052e03": "commitPlasmaBlockRoot(bytes32)", "7f053808": "approveAndAuction(uint256,uint256,uint256,uint256)", "7f0554ca": "mntToken()", "7f056637": "testExecuteSellOrder()", +"7f05b9ef": "BLOCK_REWARD()", "7f05c3a6": "supportAccounts(address)", +"7f05c8b6": "functionCallTimeLocks(bytes4,address)", +"7f0634c4": "updateDEAORecorderAddress(address)", +"7f067a25": "depositFees(address)", "7f067ff7": "Bitcoinsummit()", "7f069942": "transferToBeneficiary()", +"7f06f326": "setExtraSpinPrice(uint256)", +"7f06f5a1": "arrayAsgards(uint256)", "7f070a9b": "withinRefundPeriod()", +"7f07a752": "getUserAccountDetails(address,uint256)", +"7f084bd1": "setAlarm()", "7f0899f2": "AddTicket(bytes5[])", "7f08a250": "testPoint(uint256[3])", "7f08ea8b": "getBetPool(uint256,uint256)", "7f08ea8f": "getTotalTokensPerArray(uint256[])", "7f09171b": "addAd(address,uint256,uint256,uint256,string,string)", +"7f0936b7": "syncAmountById(uint256)", "7f095bfb": "multiSendB(uint256,uint256)", +"7f0977b0": "migratePendingUnstakesToNewLockTime(uint256)", +"7f09a0d2": "Jackpot(address,uint256)", "7f09ad64": "drainMe(uint256)", +"7f09b4a6": "swap2WantRouting(uint256)", "7f09bd1d": "setEthPreAmount(uint256)", "7f09beca": "moveToWaves(string,uint256)", +"7f09d3f3": "settleLoan(uint256)", +"7f09e4f7": "Post(bytes32,uint256)", "7f0a1bed": "bidderPlaceBid()", "7f0b61f7": "ManagerEnabledEvent(address)", +"7f0b7f9c": "referee(address)", "7f0bd881": "wanport()", "7f0c949c": "setJurisdication(string)", "7f0cd33c": "ApproveAndtransfer(address,uint256)", "7f0d35e2": "totalPublicSaleWei()", "7f0da94e": "cooloffIncrement()", +"7f0e45b9": "iaiStats(uint256,address)", +"7f0e90c3": "streamedRewardFrom(address)", "7f0ed037": "setKickOff(uint8,uint256)", +"7f0f041b": "pawnPrice(uint256)", "7f0f04a8": "unregister(bytes32,address,uint256,uint256,uint256)", "7f0f09af": "EtherdeCoin()", +"7f10179f": "setReward(uint256,bool)", "7f102c16": "currentGameStatus()", "7f10a3c0": "presaleBonusAddress()", +"7f10d314": "setRequester(uint256,uint256,address)", "7f1165c1": "getSencBalance()", +"7f11a8ed": "getNodeDetails(uint16)", +"7f127c15": "updateCollateralReserveStateOnLiquidationInternal(address)", +"7f13375d": "distributeTransformedHex()", +"7f135445": "rebUsdAverage()", +"7f139d68": "maxAccruedTokensOffered()", +"7f13f8ed": "tokenBalance(string)", "7f1482b1": "round3Bonus()", +"7f149dd5": "getAllPuts(address)", +"7f1585a9": "_sendReservesToMoC(uint256)", +"7f15969f": "getDataLevelCubo(address,uint256)", "7f15a21c": "modify(address,address,uint256)", "7f15a6a3": "setCCH_edit_31(string)", +"7f167371": "NOW()", "7f16ab50": "replaceAuthorised(address,address)", "7f16d7b3": "TRL2()", "7f1731b6": "unsetRegistrar(uint256,address)", +"7f173559": "crvRouter()", +"7f176590": "closeTrial(address)", +"7f1795b8": "setPrice7()", +"7f17a659": "EscrowCompleted(uint8)", "7f17b05d": "OwnerAddress()", "7f17b79d": "setGameCost(uint256)", "7f17ce9b": "DIGIPLACED()", "7f180db7": "kudos(uint256)", +"7f1868e4": "init(string,string,uint256,uint256,address,address)", "7f187d2d": "score(bytes32,string)", "7f18b569": "setKncPerEthBaseRate()", "7f18f10c": "setGeneContractAddress(address,address)", +"7f18f6be": "EvSwitchActivate(address,bool)", "7f191255": "punchOut(address,uint64)", "7f1926c7": "GagarinToken()", +"7f199ec7": "tokenForCompany()", +"7f19c412": "startWhitelist()", +"7f19c56f": "getLiq()", "7f1a2a73": "getEmployerAvgRating(address,address)", "7f1a4c1f": "withdrawContributorsTokens(address,uint256)", +"7f1a6bfe": "UnFrozenFunds(address,bool)", "7f1a8749": "purchaseMakeAdv(uint256,string,string)", +"7f1abbda": "lgd()", "7f1b1e51": "testTooFewTokens()", "7f1b8cc3": "getUsersByBalance()", "7f1bb473": "daysFrom(uint256)", +"7f1bdd76": "depositPool(uint256,uint8)", "7f1bffc1": "_removeToken(uint256)", "7f1c25d0": "HolaMundo()", +"7f1c825a": "flashLoanFeeBPS()", "7f1ce417": "isITOFinished()", +"7f1df2dd": "setust(uint256,address)", +"7f1e06be": "_delegateCompLikeTo(address)", +"7f1e0d79": "tokensIco(address)", +"7f1e4412": "lastTokenPay()", "7f1ebc4d": "reentrantGuard()", "7f1ecfe0": "getCurrentBid()", +"7f1eee4f": "setPresaleFinalizeAgent(address)", "7f1f0507": "publicRate()", +"7f1fa108": "claimSponsor()", +"7f1fa754": "votersChoicedContext(bytes32,address)", +"7f1fd413": "dealer_reveal(uint8,uint256)", "7f205a74": "SALE_PRICE()", "7f205c8c": "getOraclizeCallback(bytes32)", "7f205f02": "changeBoolean()", +"7f20fd21": "REIGAI03()", +"7f20fd2a": "__init(bool)", +"7f21228b": "updateTingBoosterAddress(address)", "7f21d498": "getMinBid(uint256)", +"7f2277b4": "poolIsListed(address)", +"7f23bfc5": "transferPoolInfo(uint256)", "7f23fb92": "setGenres(string)", "7f2438cb": "sellFor(address,uint256)", +"7f2445dc": "crowToLp1Route(uint256)", "7f25c1e4": "etherRaisedByState(uint256)", +"7f25cb29": "viewStaicReward(address)", "7f2609eb": "LogFinalizeMatch(uint256,uint8)", +"7f265590": "_dex(address,uint256,address,address)", "7f26fc7d": "removeCreator()", +"7f2736d1": "startNewCycle()", +"7f276455": "getTotalTypes()", +"7f2791f8": "outbound(uint256)", "7f279a73": "Cashing(address,uint256)", +"7f27bf06": "modifyParameters(address,address,address,bytes32,uint256)", +"7f281635": "userNames(address)", +"7f28167b": "setMinimumTokensPerInvestor(uint256)", "7f2857b6": "viewFunc()", "7f28c44f": "isIcoSuccessful()", "7f290d2d": "ExpiringMarket(uint64)", "7f293e02": "ChangeCoinCrowdsale()", "7f294b10": "setPI_edit_26(string)", +"7f295b3d": "getHarvestAble()", "7f298f93": "crowdsaleEndBlock()", +"7f2a39c0": "nredit(uint256)", "7f2a4784": "KYC_VERIFICATION_END_TIME()", +"7f2a8a80": "setHouse(address)", +"7f2aaf58": "enables(address[])", +"7f2adcff": "setPoolParams(uint256,uint256,uint256,uint256)", "7f2aeea4": "getType(bytes32)", "7f2b06ed": "bonusLimit3()", +"7f2b6a0d": "isMatured()", "7f2b88ea": "getThirdPhaseCap()", +"7f2ba7bc": "getSwapResult(address,bool,int256,uint160)", +"7f2be9fc": "initializeMultipleWinners(uint256,uint256,address,address,address,address,uint256)", +"7f2c0c6f": "signatures(string,uint256)", "7f2c1633": "prenesiKovance(address,uint256)", "7f2c4ca8": "getLastBlock()", +"7f2de1c1": "sellBaseToken(address,uint256,uint256,uint256)", "7f2e01fb": "ListValidated()", "7f2e0ec2": "remainRewards()", +"7f2e1349": "principleLpPrice(address,uint256)", "7f2e98ad": "PoissonData()", +"7f2eecc3": "RECEIVE_WITH_AUTHORIZATION_TYPEHASH()", "7f2f506b": "CLAIM_INTERVAL_DAYS()", "7f300576": "startThrowing()", "7f301b83": "setMetadataHash(string)", +"7f3090c8": "getCFOAddress()", +"7f315bb6": "LogFlatFeeChanged(address,uint256)", "7f31b480": "changeMasterAddress(address,address)", "7f31cbfa": "batchShareAmount(address[],uint256[],uint256,uint256,uint256)", +"7f31d561": "gfiToken()", +"7f321b39": "TerminateDirectDebit(address,address)", +"7f328ecc": "intakeRawAndGetBalance(uint256)", "7f32f6de": "isSoftCapCompleted()", "7f33375b": "getReturnedData()", "7f334bd1": "_generateRandomId(string)", "7f33c1e1": "Ethurem()", +"7f3434a8": "SumRegEth()", "7f3436ef": "addOrganisation(address,string,string,string)", "7f349329": "currentRoundSupply()", +"7f350e43": "minimumHsu()", "7f35571f": "Sell(uint256,address)", +"7f355ba1": "approve_808(address,uint256)", +"7f35ae41": "imageURL10()", +"7f35aff1": "initZAP(address,address,address,address)", +"7f35c5bb": "setKyberNetworkProxyAddress(address)", "7f3681f6": "setKNCRate()", +"7f36875e": "Drain(uint256)", +"7f36e949": "Lp1ToLp0Route(uint256)", "7f3745ad": "execute_transfer_all(uint256)", "7f3745db": "getTracksByArtist(address,uint256,uint256)", +"7f376db4": "addShip(string)", "7f37b905": "salesCounter()", +"7f37d170": "voteResultConfirm(uint256)", "7f37fab6": "addActionToRole(string,string,string)", "7f3800ba": "setMultihash(bytes32,string,bytes)", +"7f384127": "r11()", +"7f385524": "referreePercent()", "7f386b6c": "minimumPrice()", "7f38a4a7": "updateUSDETH(uint256)", "7f38b980": "setTokenDistributionPool(address)", "7f38e526": "pendingPayments(address)", "7f390088": "QYCC()", +"7f3a0f41": "commit(address,bytes)", "7f3a2472": "reserveIssue(address,uint256)", +"7f3a6262": "MathGetPartialRoundUp(uint256,uint256,uint256)", "7f3a98b7": "burnMyBalance()", "7f3ad651": "KayoToken(address,address,uint256,string,uint8,string,bool)", +"7f3b6837": "_setPoolManagerFee(address,uint256,uint256)", "7f3bd56e": "disburse(address,uint256)", "7f3c26b1": "rejectHours()", "7f3c2c28": "registerContract(string,address)", +"7f3c8160": "_threshold()", "7f3cb47b": "minimumAmountWei()", "7f3cd28e": "tokenSalesByOwner(address,uint256)", +"7f3ce3c8": "MoneyAdd(uint256)", +"7f3d5985": "gasBalance()", "7f3d5c4c": "ICOPaused()", "7f3ded93": "voxFab()", "7f3df4bb": "addBonus(uint32[],uint64[])", "7f3e1841": "endSecondPeriodTimestamp()", "7f3e4d1b": "setAtkNowForPlayer(address)", +"7f3eea76": "buyBaseToken(address,uint256,uint256,uint256)", +"7f3f0b6d": "approve_512(address,uint256)", "7f3f3398": "transferAndCallExpanded(address,uint256,bytes,address,address)", "7f3f81c0": "confirmProposal(bytes32,address,uint256)", +"7f3fb2d1": "loftRobot()", +"7f3fd8ba": "vestedBalanceForAmount(uint256,uint256,uint256)", +"7f3fd918": "removeAuth(address)", +"7f401c76": "Contract(uint256)", "7f404b7f": "updateInt256(bytes32,int256)", +"7f4091b4": "EthPurchase(address,uint256,uint256)", "7f40d9d8": "delayDonPhase(uint256,uint256)", +"7f422453": "setReleaseByDay(uint256,uint256,uint256)", +"7f4296d7": "setRngService(address)", +"7f429eb9": "ssend()", "7f4316ec": "getDefendPlayerList()", "7f4384a8": "RichNiggas()", +"7f439ce0": "onDisputableActionChallenged(uint256,uint256,address)", +"7f43d74f": "set(uint256,uint256,uint256,address,bool)", +"7f440103": "added(address)", "7f440d57": "getProjectReport(uint256)", "7f445c24": "subRegistrar(string)", +"7f447d27": "getVoteDisputableInfo(uint256)", +"7f44e8c3": "approveForWSwap(address,address)", "7f44fcfa": "_getPoints(uint256)", +"7f4511b6": "updateATMToMarket(address,address,address)", "7f453951": "CBMDToken()", "7f45b835": "getPrimaryRecord(string)", +"7f45c4c3": "getLiquidityPools()", +"7f45ce12": "updateParams(address,address,address,address,address,address,address)", "7f45ec91": "emitIssuance(uint256)", "7f460693": "ownerPutCapital()", "7f46550f": "CrowleyToken()", +"7f47512a": "osaka(string)", "7f476471": "setRCContractAddress(address)", +"7f479448": "transferTokenInPool(address,address,address,uint256)", "7f480f9d": "processDividends(address)", "7f486ca6": "cancelChibiForFusion(uint256)", +"7f48e4f7": "NewMember(address,uint256)", "7f493ce6": "disableTokenTransferability()", "7f497550": "scheduleTransfer(address,uint256,uint256)", "7f498ffc": "setEnd(uint256)", +"7f49f022": "globalCandidateSupportPct()", +"7f49f709": "banAddress(address)", "7f4a1c52": "setExceed(uint256)", +"7f4a6747": "minBlocksPerRound()", "7f4a9691": "depositTokenToVault(address,uint256,uint256)", "7f4ab1dd": "messageForTransferRestriction(uint8)", "7f4ae68d": "restrictedAddress()", +"7f4aeb1a": "rebalanceLiquidity()", +"7f4af510": "addAddress(bytes32,bytes32,bytes32,bytes32,address)", "7f4af951": "pixelPrice(uint256,uint256)", +"7f4b4323": "delegatedAmount(uint256)", +"7f4b5b19": "ICOUnpaused(uint256)", +"7f4b6b06": "createVote(uint256[2],uint256,uint256,uint256)", "7f4bf7d1": "Inerex(bytes32)", +"7f4c4245": "vaultCheckRewards()", +"7f4c6be1": "userList(bytes20)", "7f4c7064": "ESCROW_TOKENS_PERCENT()", "7f4d5150": "CheckItemExists(uint256)", "7f4d6aa4": "LogResumed()", +"7f4d7393": "icoTokenTransfers(address)", "7f4da132": "goldFee()", +"7f4da84f": "changePriceFactor(uint256,uint256,uint256)", +"7f4dab2f": "transferablePynths(address)", "7f4db7fb": "testPrivate(uint256)", +"7f4dd7a5": "icoTokenHoldersAddresses(uint256)", +"7f4e3076": "_open()", "7f4e4669": "raiseInitialSupply(uint256)", "7f4e4849": "getContractState()", +"7f4ec4c3": "pending_owner()", "7f4ec5a7": "toAddressThrow()", "7f4ed2c7": "addToWhitelistMulti(address[])", "7f4ed5ac": "sumHardCapICOStage2()", "7f4edd72": "getAllAdIdsByUser(address)", "7f4ef9d4": "getText(uint256)", +"7f4f99f9": "removeAirDropAddress(address)", "7f4fd78e": "BTCCollected()", +"7f504cd2": "NewTx(address,address,uint256)", "7f50c74b": "FIXED()", +"7f50d4d8": "yeldToken()", +"7f513d5d": "hero()", +"7f5168ad": "eligibleSingleDividend(address)", +"7f51975f": "tokenIn(address,uint256)", "7f51bb1f": "updateTreasury(address)", "7f52fcae": "tokenAmountPerUser()", "7f5341da": "startTimeSale3()", "7f5369f1": "DEFAULT_REVOCABLE()", "7f5375c1": "getLastWin()", +"7f53876e": "withdrawableLiquidityOf(address)", "7f53b15d": "_ICOSale(address,uint256)", +"7f54479a": "isPMMEnabled()", +"7f546ff8": "AuctionPause()", +"7f54c66e": "openLongPosition(address,uint256,uint256,uint256)", "7f555b03": "erc20Proxy()", "7f55b2d9": "cleanBalance()", "7f55b87f": "createCountry(string)", +"7f55e444": "enableWhitelistVerification()", "7f564472": "resetAmountBonuses()", "7f5651d7": "setNamehash(string,bytes32)", +"7f569773": "LogAddFund(uint256,address,uint256,uint256)", "7f56c072": "SIEChain()", "7f56c0b4": "setTeamFundWallet(address,address,uint256)", "7f56ca73": "Volkstest2()", +"7f573086": "getReservedByAddress(address)", "7f573a4f": "UNSOLD_SOLD_RATIO()", +"7f576b9d": "masterPoolUsers(uint256,address)", +"7f57746f": "_verifyPriceAgreement(address,address,uint256,uint256)", +"7f57b5f9": "stopUniswapBurn()", +"7f57ebe2": "convertTokenToEth(address[])", "7f582b47": "howMuchWithdrawed()", +"7f589519": "addEntry(bytes32,string,string)", +"7f58b340": "getLiftoffInsurance()", "7f58b9ee": "allQueryIds()", +"7f58c9c7": "pendingTRIP(uint256,address)", +"7f58e8f8": "last_token_time()", "7f592be4": "TRANCHE2_ACCOUNT()", "7f592cfe": "setLLV_edit_12(string)", "7f59cbcc": "withdrawFromRelay()", +"7f59ea07": "registerOracle(string,address)", +"7f5a17e0": "givenProfits(address)", "7f5a259f": "FIXED_RATE()", "7f5a285a": "notInWhitelistAllow()", "7f5a448c": "switchToWhaleMode(bool)", "7f5ae339": "isAdminister(address)", +"7f5aee4e": "fetchHubVault()", "7f5b47cd": "eventApproval(address,address,uint256)", "7f5b503c": "toB32(bytes,uint256,address)", +"7f5b7dfa": "_requireValidMaxFeePercentage(uint256)", +"7f5b8fbd": "removeSendingKey(address)", "7f5ba3cc": "REGULAR_TYPE2()", "7f5ba79f": "registerNewProduct(uint256,string,string,string)", "7f5bfe30": "PaymentExecuted(uint256,address,uint256)", +"7f5cd256": "rewardForByType(address,uint256,uint256,uint256)", "7f5d3dc8": "getStats(uint256,uint256[7])", "7f5d85f8": "testBurnGuyWithTrust()", +"7f5dcbe3": "yourTRYBalance(address)", +"7f5de1dd": "getBalanceBpOf(address)", "7f5dfd16": "approveProxy(address,address,uint256,uint8,bytes32,bytes32)", +"7f5dfda4": "test_neq()", "7f5e495d": "defaultLimits()", +"7f5f022d": "withdrawICU(address,uint256)", "7f5f0d6a": "resumeIco()", "7f5f17b1": "getCompte_8()", +"7f5f5c9b": "unitial_A_time()", "7f5f9128": "alreadyReservedForTeam()", +"7f5fa461": "updateImageUrl(uint256,string)", +"7f5fec0c": "orderProduct(int256,int256,int256)", "7f601a50": "getHouseCardsNumber()", "7f602231": "tip(bytes32,address,uint256)", +"7f604b45": "addExchange(address,address)", +"7f6064ea": "poolInfo2(uint256)", "7f60b20a": "getSlice(uint256,uint256,string)", "7f60bb7c": "applyBonusAmount(address,uint256,bytes32)", +"7f611fa3": "sgnMinimumLimiterValueD()", "7f6150cb": "getRoundCurKeyNo(uint256)", +"7f61fa93": "addGiver(string,string,uint64,address)", +"7f6260d2": "initializeExchange()", "7f626f1a": "setStore(uint256)", +"7f627128": "claimSwap()", +"7f62f116": "RemoveLastBalanceCheckData()", "7f630259": "getSuperReferrerRate(address)", "7f63040b": "CompcoinCash()", "7f630b4c": "share(string)", "7f63af42": "deployConsortium(address)", +"7f63b2f0": "newWinner(address)", +"7f63ca37": "checkSigner(address)", +"7f64038c": "potatoPerBlock()", "7f64727b": "getTreesOnSale()", "7f649783": "addToWhitelist(address[])", +"7f64aad3": "getTokenContractAddress(string)", "7f64c34e": "deadline365()", "7f64d2d3": "NCAAChampionship()", "7f654b1c": "setLatestPayday(address,address,uint256)", "7f6578d3": "REFUND_PERIOD()", "7f6597e0": "AcuteEthereumCloudMiningunion()", +"7f65b5de": "uni_keep_mph()", +"7f65c2ff": "setNetworkMetadataProvider(address)", +"7f65ec0b": "changeLength(uint256)", "7f660b01": "FEE_COLLECTOR()", +"7f664a22": "statusOf(address,address)", +"7f6664f9": "claim3(address)", "7f66af09": "card_titanium_first()", "7f66ccbe": "EthereumVerge()", "7f66d1f8": "mOnApprove(address,address,uint256)", +"7f66dea1": "GGT()", +"7f6715c9": "changeClaimStatus(uint256)", "7f671c1b": "insert(int128)", +"7f674ea2": "transferChainlinkLabsProxy(address,address,address,uint256)", +"7f67b0ff": "grain()", +"7f67d87e": "maxK()", "7f686259": "migrateBalancesFromLegacyRep(address[])", +"7f68a79e": "removeSAFromCSA(uint256,uint256)", +"7f68d5ba": "getOptions(string)", "7f695f28": "isFlying()", +"7f69e6c4": "buyMint()", +"7f6a693c": "removeBurnSaleAddress(address)", "7f6a731c": "donationAmountInWei()", +"7f6a7acf": "safeLockTokenCollateral(address,address,uint256,uint256,bool,address)", +"7f6ab841": "circulationAmount()", "7f6ae0c0": "canUpdateDeveloperMiningPower()", +"7f6b590c": "d(uint256)", +"7f6c1186": "createIOU(bytes32)", +"7f6c6f10": "getBlockNum()", +"7f6ce978": "modToken(address,bool)", +"7f6cf4a4": "userTrainingRate(address)", +"7f6d5dc5": "kfToEth(address,uint256,uint256)", "7f6d8955": "RegisterOne(uint32,address,address)", +"7f6e9d15": "roundFrozen(bytes32)", "7f6ec891": "withdrawNonTopForTeam(address,uint256)", +"7f6f1310": "getPoolLockForce()", +"7f6f84a8": "_usdtToken()", +"7f6fd5d9": "getDisputeUintVars(uint256,bytes32)", +"7f702e80": "ticketMapping(uint256)", "7f704657": "RESERVED_FOR_TEAM()", +"7f705c9a": "_lockRound(uint256,int256)", +"7f70ff99": "membership(uint256)", +"7f713bc5": "setVotedFee(uint256)", "7f71f1f9": "controllerApproval(address,address,uint256)", +"7f7241a0": "FNACCOUPONS()", "7f725862": "_setNewEstimate(uint256,uint16)", "7f7376e8": "launchSale()", +"7f738da5": "getBrrAmount()", +"7f7432e0": "_lpMin()", +"7f743fb7": "onTokenPurchase(address,uint256,uint256)", "7f74ac15": "ownerContract()", +"7f75463d": "depositInput(uint256,uint256,uint256)", +"7f755841": "NewCommitment(uint32,uint32,uint64,uint64,bytes32)", "7f7575c9": "FixedSupplyCrowdsale(uint256,address,address,uint256)", +"7f75c582": "rejectionCost()", "7f760335": "PurchaseTokens(uint256,address)", "7f761472": "canRedeemUTXOHash(bytes32,bytes32[])", "7f7624d0": "MjolnirAddress()", "7f7634ba": "winnerConfirmed()", +"7f7650eb": "productName()", +"7f76b223": "timeLocks(address)", "7f76bd3a": "lastBlock_v18()", "7f76d76d": "minCapIco()", +"7f776850": "GuardianRune(uint256)", +"7f77829e": "LogAuditAssigned(uint256,address,address,string,uint256,uint256)", +"7f77f7b0": "WhiteListCount()", +"7f77fc4d": "currentCommittedDrawId()", "7f784da7": "addNews(string)", "7f78636a": "BASE_URL()", "7f790b7b": "getCreateUniverseParentPayoutDistributionHashValue()", "7f791790": "roll(uint16[],uint16)", "7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", +"7f791d05": "mintedCountForChecklistId(uint8)", "7f792910": "setExchangeable(bool)", +"7f795bc3": "balanceByTime(address,uint256)", "7f7977d1": "isFundraiser(address)", "7f7985cf": "setEthUSD(address)", +"7f79bea8": "_contractWhitelist(address)", "7f79cbfe": "MANHATTANPROXYLEXINGTONAVE()", "7f7b1393": "getLocation(uint256)", "7f7b17a0": "SetupPreSale(bool)", +"7f7b2eb8": "sellForOrigin(address,uint256,bytes,uint256[])", +"7f7b6dc3": "setPendingAdminSign()", +"7f7bc4bc": "setDefaultApprovalAccount(address)", "7f7c1491": "remove(address,address)", +"7f7c3f2b": "totalStakesTillToday(address)", "7f7d31dd": "sub32(uint32,uint32)", +"7f7d6e34": "storeGas(uint256)", "7f7d711e": "setRequireCustomerId(bool)", +"7f7da098": "checkpointWithdraw(uint256)", +"7f7db677": "checkOwnerPermission(address)", +"7f7dccc1": "allocate(bytes32,uint256)", "7f7dcdbf": "isContractOwner()", "7f7de185": "handleProductionDecrease(address,uint256)", +"7f7e375f": "ItemBought(uint256)", +"7f7f2c52": "megaPoolPrice(uint256)", "7f7fde8e": "sellAssets(address[],uint256[])", +"7f7ff648": "checkpaymentreference(uint64)", +"7f81e856": "getBugBountyTeamAddress()", "7f81f0b9": "setTransferLock(uint256)", +"7f8290d0": "KV1O()", +"7f829c7f": "XV1()", +"7f82dfcf": "redeemRebalancingSetIntoERC20(address,uint256,address,bytes,bytes,bool)", +"7f83533e": "updateStakingEnd(uint256)", +"7f8359a5": "SetAddrForMortgage(address)", "7f83a4a6": "canRefund()", "7f83bf7d": "setMinimumPayment(uint256)", "7f84017f": "SELL_SOFT_LIMIT()", "7f848ccb": "_packMakeData(address,uint256,uint256)", "7f85066e": "Reflex()", "7f853e7e": "MLCToken()", +"7f85878a": "getMoneyPotAmount(uint256)", +"7f85a83f": "idCurToken()", "7f85c599": "addOrder(bytes32,address,uint256,uint256)", "7f860330": "batchReturnEthIfFailed(uint256)", "7f863cab": "Bid(address,uint256,address,uint256)", "7f8661a1": "exit(uint256)", +"7f869c79": "todayNum()", "7f869d98": "stepFour(int256)", +"7f86b71b": "preRewardPeriod()", "7f86cd3f": "parseLoanOfferRates(uint256[10],uint32[4])", "7f86d985": "drunkness()", "7f86f7f4": "walletPlatform()", +"7f875b48": "_getBounty()", "7f877710": "recoverUnawardedMILs()", +"7f878dba": "UnlockUpdate(uint256,uint256)", "7f879229": "setSalesUser(address)", "7f88616f": "onlyAdminAndNotInit()", +"7f88a957": "logDelegatorRestaked(uint256,address,uint256)", +"7f88c4ff": "SetGuardianSale(uint256,uint256)", "7f89ce48": "initTiers(uint256[],uint256[])", +"7f8a5873": "_fundingEmission()", +"7f8a5fed": "addFarmPool(address)", "7f8b8f48": "Ledger(address)", "7f8b9478": "getImpliedRoot(bytes,bytes,uint256,bytes32[])", +"7f8b9abe": "Upgrade(uint256)", +"7f8bb1aa": "tokenname()", "7f8c263f": "dragonBalance(address)", +"7f8cb4c1": "signup(address,uint256)", +"7f8ce19f": "performedExodus(uint32,uint16)", +"7f8cffd5": "TargetChanged(address)", "7f8d429e": "isFinalized(bytes32)", "7f8d53c6": "put(address,uint256)", +"7f8d5dcc": "g5(uint256)", "7f8dafef": "unsoldAllocationCount()", +"7f8de170": "dustStack()", +"7f8e1d81": "block_Smartpot()", +"7f8e35c9": "getEstimatedRFIforETHTEST(uint256)", +"7f8e640a": "infos(uint96)", +"7f8ee3eb": "bTokenBalances(address,address)", +"7f8f3838": "registerEvent(address,string,string,bytes32,bytes32,bytes32,uint256,bytes32,bytes)", +"7f8f6184": "getVirtualReserves()", "7f8fdcfb": "suspendDeposit()", +"7f8fe216": "liquidateTokens(address)", +"7f905ca5": "prevAuctions(uint256)", +"7f906072": "sharesOf()", +"7f90644b": "ChannelManagerContract(address)", +"7f90fec5": "getReserveTotalBorrowsStable(address)", +"7f912610": "get_adapter_index(address)", "7f9144ce": "token_member_order_pop(address,address,uint32)", +"7f91fb72": "lastStakeTimes(address)", "7f91fb7d": "isSignedBy(address)", "7f9245d0": "_clearTokenApproval(uint256)", "7f924c4e": "testDeposit()", "7f925c93": "withdrawSeller(address[2],uint256[7],uint8,bytes32[2])", +"7f926435": "getCurrentRewardWeek()", +"7f92695b": "nftIsDepositedInContract(uint256)", +"7f92ca19": "getNodeUptime(address)", +"7f931ace": "LoanCanceledByBorrowerAtIndex(uint256)", +"7f9322cc": "LetsInvest(address,address,uint256)", "7f93354b": "multiVoteNoLock(address[],uint256[])", "7f9343ad": "playNumberSuit(uint256[])", +"7f93c751": "checkStage()", "7f93de95": "deposit100Percent()", +"7f941a8f": "assetPriceUrl(bytes32)", "7f947168": "TimeTransferAllowed()", "7f949386": "updateMessage(uint256,string)", "7f949ac0": "ethashContract()", "7f94a8fa": "getWriteTimestamps(bytes32[])", +"7f94eca4": "PromoCodeRemoved(bytes32,uint256,address)", +"7f94f931": "ClaimToken(address,address,uint256)", +"7f952d95": "currentValidatorSetSize()", +"7f9569a2": "yield21Jun30Yield()", "7f95d6f6": "accountBalances(uint256)", "7f95d919": "DistrFinished()", "7f967a8c": "IsExchanged(address,string)", +"7f973381": "overCapWithdrawableTmv(uint256)", "7f9785b0": "_resetList()", +"7f9797e7": "setGlobalApy(uint32)", "7f97e836": "didCommit(address,uint256)", "7f98444f": "randomEnd()", +"7f99aa3d": "IMP13()", "7f99e11a": "isMiningOpen()", "7f99f3c4": "MaybePerformOpen()", +"7f9abeb1": "getExtras(address)", "7f9ac04f": "balancesStaticoin()", +"7f9aea2f": "EventNewProposalCreated(bytes32,uint256)", "7f9b48bc": "setCompte_9(string)", +"7f9bbca2": "log(bool,uint256,bool,uint256)", "7f9bf9e4": "startMinting(string)", +"7f9c0ecd": "rateByPath(address[],uint256)", "7f9c23e0": "_determineHitPoints(uint256)", +"7f9c4c77": "nonWhitelistedDelay()", "7f9c8974": "getAssetCollectedOreBallancesArray(uint256)", "7f9c9d91": "_getBorrowAmount(uint256,uint256,uint256,uint256,bool)", "7f9cbfc1": "checkPayments()", +"7f9d0752": "LPClaimedFromLGE()", "7f9d139a": "positionScount(address)", "7f9d2044": "UniBowToken()", "7f9d314e": "autoBirth(uint256)", +"7f9dc75e": "updateBlacklist(address,uint256,bool)", "7f9df012": "VoteRevealed(address,uint256,uint256,uint256)", +"7f9ec70b": "getHash(address,address,uint256,bytes)", +"7f9ed185": "getRefundQuantity(address)", +"7f9f30da": "migrateData(address,uint256[])", "7f9f5495": "levelTokens()", +"7f9f96c4": "awarded(uint256,address)", +"7f9fb95b": "safePkidTransfer(address,uint256)", +"7fa0b1a7": "getBeauty(uint256)", "7fa0c10f": "DeleteUserByAddr(address)", "7fa0c908": "newChow(address)", +"7fa140c7": "poolIdByRbPoolAccount(address)", +"7fa15637": "getTrans(uint256)", +"7fa1680a": "getTodo()", +"7fa1934a": "buy(address[],uint256)", +"7fa21593": "buyTokensWithLTC(address,string,uint256)", +"7fa21ea8": "approve_783(address,uint256)", "7fa22001": "assertEq0(bytes,bytes,bytes)", "7fa24846": "SetSAToEContract(address)", "7fa28d75": "transferRightIfApproved(address,bytes32)", +"7fa293d4": "addrs(address)", +"7fa33877": "AdvVestingTime()", "7fa34e92": "preIcoAddr()", "7fa39958": "RateAdd(address)", "7fa3f3d0": "addLock(uint256)", "7fa400e4": "totalTokensAvailableForSale()", +"7fa40126": "getTraitsFromRandom(uint256)", "7fa40a42": "sumICOStage8()", "7fa44926": "setMinMaxInvestValue(uint256,uint256)", +"7fa46efd": "getCharityShare()", "7fa4cacb": "setDestinationAddress(address)", "7fa5aa9d": "registerPreSignedHashing(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"7fa64184": "getMinerOnLand(uint256,address,uint256)", +"7fa68606": "importCdpPositionWithSignature(address,uint256,uint256,uint256,uint256,bytes)", "7fa6c365": "phase3MaxTokenForSale()", "7fa6c745": "_setNewStartTime()", +"7fa6ca39": "getBlockAmount(address)", +"7fa763e5": "ClaimAttempt(bool,address,address,address,address[3],address[3],uint256[3][2],uint256[3][2])", "7fa767bc": "createBox()", "7fa7a7c8": "buyInWithAllBalance()", "7fa7acf8": "createCertification(uint256,uint256)", "7fa87949": "unblockAccountFunds(address,uint256)", +"7fa885fe": "getpeopleInfo(address,address)", +"7fa890cc": "updateLabContractAddress(address)", "7fa8c158": "startICO()", +"7fa8de37": "mintting(address,uint256)", +"7fa98ac9": "imems(uint256)", "7fa9aa76": "owner_updateBaseFee(uint256)", +"7fa9aafe": "Transfer(address,uint256,uint256)", +"7fa9ecb8": "amountSoldIncrease()", "7faa0044": "renderString(string)", "7fab541c": "exec(bytes32,bytes)", "7fab624b": "purchaseGenes(uint256,uint256,bool)", +"7fab7617": "UTYToken()", "7fabbd7b": "unilateralRefund(bytes32)", "7fabe1a5": "allPendingRefs()", +"7fad3124": "getCurrentPayedFees()", "7fad54e4": "distributeGame(uint8,uint256)", +"7fad7bba": "wayfarersTaxes()", "7fad9b53": "BASE_TEAM()", +"7fadc431": "autoIETHDeltaBalance(uint256)", "7faddcfb": "currentDistributionAmount()", +"7fae8c3e": "exitPool(uint96,uint96[])", +"7faf67d6": "changeTurnoverSetting(uint256,uint256)", "7faff876": "updateUser(bytes32)", "7fb00168": "CryptekZ()", +"7fb011d6": "setAutomaticWithdrawals(bool)", +"7fb0401f": "timeforunstaking()", +"7fb07f6e": "setMat(uint256)", +"7fb09e19": "updateMaxLimit(address,uint256)", "7fb0a445": "systemSaleAddress()", "7fb0fe14": "voteCandidateTwo()", "7fb158c5": "ChannelSettled(address,address,uint32,uint192)", "7fb181c1": "swapTime()", "7fb191a5": "TokenVestingContract(address,address,bool,bool,bool,address)", "7fb1a5ed": "AirdropController()", +"7fb1ad62": "broken()", +"7fb1c5fd": "_addLP(address,address,uint256,uint256)", +"7fb2b917": "buyLevelCreator(address,uint8,uint8)", +"7fb2c9d9": "CONTRACT_INTERSTELLAR_ENCODER()", +"7fb30c35": "minAllowed()", +"7fb32852": "canIVote()", "7fb33170": "transferAdmin(address,uint256)", "7fb33dc6": "burnTokensWhenFinished(address)", +"7fb36a98": "tokenDistLimit()", "7fb3d459": "GetChipsInfo(address)", "7fb419b6": "WalletBoss()", +"7fb45099": "auctionState()", +"7fb47b06": "UNLIMITED_ORDER_AMOUNT()", +"7fb50278": "totalnum()", "7fb5d847": "delTransferWhiteList(address)", "7fb5ff3e": "MNTP()", +"7fb6cbb7": "tetherDecimal()", "7fb7b5ed": "enableTeamWithdraw()", +"7fb8608c": "registerMember(address,address,string,string)", +"7fb8ab88": "resetName(string)", +"7fb992f7": "pair(address)", +"7fb9a063": "mint(uint256,uint256,uint8,bytes32,bytes32)", "7fb9e405": "getTitulaire_Compte_10()", +"7fba3cda": "dropERC721(address)", +"7fba460a": "raiseEvent()", +"7fba744e": "nextRebaseTimestamp()", +"7fbb0e99": "buyableFlag()", "7fbb1b56": "claimEgg(uint8)", "7fbb345e": "getInvestorsTokens(address,address)", +"7fbbe46f": "initialize(address[],uint256[])", "7fbc0c48": "_mint(uint256,address,string,string)", "7fbc9c55": "calculateMultiplierAfterConversion(uint256,uint256,uint256)", +"7fbcc639": "mint(uint256,uint8,bytes32,bytes32,string)", "7fbcef65": "BTH(address[],uint256,address,uint256,uint256,uint256)", +"7fbd5f26": "stakingPoolV2()", "7fbd778a": "getTotalScientists()", +"7fbdb418": "ClaimUbaseLp()", "7fbe0680": "MIN_PURCHASE_OTHERSALES()", "7fbea955": "getCanvasByState(uint8)", +"7fbef3db": "newStandardNFT(string,string,address)", "7fbf28f7": "_withdrawDivis(address)", +"7fbf9ba9": "registerSystemAssetType(uint256,bytes)", +"7fbfba30": "addPackage(uint256,uint8)", +"7fc0acbb": "LenCyless()", "7fc29fc9": "authorisedMinter()", "7fc32915": "ThrowbackThursdayToken()", +"7fc359d4": "withdrawethamount(uint256)", "7fc38e04": "SponsorshipReceived(string,string,string,uint256)", "7fc3bb26": "endPostICO()", "7fc3f49e": "getReinvestableTokenAmount(address)", "7fc446f2": "changeCustomDefrostingRate(address,uint8)", +"7fc4606f": "rebondWithHint(uint256,address,address)", +"7fc46407": "referTotalSupply()", "7fc4d6c3": "isPhaseExist(address)", "7fc53fb5": "returnInvestmentsToInternal(address)", "7fc543ec": "_donations(uint256)", +"7fc54976": "startLock()", "7fc55eb4": "ContributionWallet(address,address)", "7fc56856": "IOXDistribution(address)", "7fc5af95": "getWinnerList()", "7fc5f05c": "changeVoters(bytes32,address,string)", "7fc611f0": "multiCall()", +"7fc622f4": "getAuthors()", +"7fc6686e": "updateCurrentPrice(uint256)", +"7fc67029": "monsterWorld(uint64)", +"7fc680a7": "modulePool(address)", +"7fc6bb3d": "unapproveUnlock(uint256)", +"7fc6d18b": "setSquidMaster(address)", "7fc729c2": "_buy(address,uint256,bytes)", +"7fc7d7cf": "hxbLpFrozenBalances(address)", +"7fc7dee7": "backX16()", "7fc7e643": "SetUp(uint256,uint256,uint256,address)", +"7fc81fb5": "_Fibonacci_epoch(uint256)", +"7fc879f2": "upgradeCarFromWallet(uint256,uint256)", "7fc88fe2": "timelockContractAddress()", "7fc8b612": "interadduser(address,uint256)", "7fc8fd9e": "Update_MediatedTransaction(uint256)", "7fc90182": "Pool(uint256)", "7fc90a5c": "batchAssignTokens(address[],uint256[],uint256[])", "7fc96619": "getPartner(uint256)", +"7fc96d6b": "updateSwapToken(address)", +"7fca2565": "isBetValid(address)", "7fca432e": "FHFTokenCrowdsale(address)", "7fcac0fb": "USDBCoin()", "7fcae430": "PendingApplication(address,uint256,string)", "7fcaf666": "setString(string)", "7fcb024a": "secondLockTime()", "7fcb2386": "MorrowToken()", +"7fcb29c9": "addAdmin(address,uint256)", +"7fcbc9b2": "addWalletAndWhitelistList(string[],address[])", +"7fcc7cfb": "transferByOwner(address,address,uint256,bytes32)", "7fccb4ba": "transferAppOwner(bytes8,address)", +"7fcce2a9": "INVALID()", +"7fcd12b3": "RestrictContractCall()", +"7fcd27ab": "outamt(uint64)", "7fcd3ce2": "maxBetPrice()", +"7fcd56db": "setFulfillmentPermission(address,bool)", +"7fcdcb9a": "composeNewLand(uint256,uint256,uint256,uint256)", "7fcdd1f0": "setConfirm(uint256)", "7fcf3a2f": "throwFooBar()", "7fcf440a": "getOwnerBalance(address)", "7fcf532c": "Withdrawal(address,uint256)", "7fcf64b2": "updateEarnedBy(uint256,uint256)", +"7fcf9980": "c2Address()", "7fcfb422": "increaseApprovalWithData(address,uint256,bytes)", "7fcfc4a0": "ApisToken()", "7fd004fa": "submitWhitelistAddition(address[])", +"7fd00c26": "factorLP()", "7fd13532": "whitelistMany(address[],uint256,uint256,uint32)", "7fd169d6": "createGroup(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "7fd19692": "setLockAddress(address,bool)", +"7fd1b5ab": "__LnCollateralSystem_init(address)", +"7fd203be": "TotalTokenHolders()", "7fd2304f": "_maximumBuy()", "7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", "7fd26dd1": "tokenUsers(uint256)", +"7fd28346": "publish(bytes)", +"7fd2a0ef": "getMaxTicketPrice(uint256)", "7fd2ffa7": "InvestorWhiteListAddition(address)", "7fd30df0": "mintBulk(address[],uint256[])", +"7fd310cd": "withdrawDeklaHashing(address,uint256)", +"7fd35c49": "dpoAddressForSell()", "7fd39247": "setOwner(uint256,address)", +"7fd3eb9b": "TokenDistributionComplete(address,uint256)", "7fd42617": "safeWithdraw()", +"7fd44ded": "CLERK_NEW()", "7fd5bb31": "propose(address,bytes32,address[],bytes32[])", "7fd5dd04": "APPROVE_OWNER()", +"7fd5f452": "setRateCalcAddress(address)", "7fd6f15c": "feePercent()", +"7fd6f6e3": "getLockAmonut(address)", "7fd751a8": "PRICE_ICO2()", +"7fd807b6": "lockedTill(address)", "7fd84609": "setOwnerThree(address)", "7fd8601e": "deathData_v5()", +"7fd8bc54": "setMaxGasLeft(uint8,uint256)", "7fd8d339": "changeicoBackend(address)", "7fd8d51d": "stakeGLXForContributors()", "7fd8ee68": "computeNameHashExt(bytes)", +"7fd917e1": "set_commission_02_fee(uint256)", +"7fd99437": "getLatestDataShard()", "7fda8d52": "internalEnableRefunds()", "7fdac6f1": "getCurrentCreditsExchanged()", "7fdafafa": "totalTreePower()", "7fdb0d6b": "Latcoin()", "7fdb5031": "transferableTokens(address,uint256)", +"7fdb5396": "lastPayDateOf(address)", "7fdb5efb": "GDCAcc01()", "7fdb6720": "teamFundAddress()", +"7fdb7774": "setPeriodCalc(uint256)", "7fdbd0f2": "ERC721DutchAuction(address,uint256)", +"7fdbdc8b": "Stage(uint256,uint256)", "7fdc5bd6": "LANA()", +"7fdc6ed5": "N_TOKENS()", "7fdc8290": "isUnderscore(bytes1)", +"7fdc9a44": "effectiveWill(address)", +"7fdce2a0": "EventRemoveOfferBorrowingItem(address,uint256)", "7fdd458d": "createWithParents(bytes32,bytes32,bytes32[])", "7fdd5403": "clearApproval(uint256)", "7fdd69f6": "setMaxAllowedReservingPercentage(uint256)", +"7fdd6f88": "addBridger(address)", "7fddc0de": "getBiddingInfo(uint16,address)", +"7fde0c06": "pillarRounds_(uint8,uint256)", "7fde1c8a": "addRole(address,uint256)", "7fde24c7": "addToPrivateWhitelist(address)", +"7fde56da": "computeAddress(bytes32)", +"7fde654e": "swap_sell_token(uint256,uint256)", "7fdea25b": "newVoting(uint8)", +"7fdede0b": "EdexStoreSupply()", "7fdf6911": "checkRoundAndDraw(address)", "7fdfbe1b": "getBytes(string,uint256,uint256)", +"7fdfc53f": "rewardData(address,address,address)", +"7fe00ab8": "second_num(address)", +"7fe01789": "ICO_AMOUNT()", "7fe02f94": "fireFightResultsEvents(uint8[4])", "7fe0518a": "asyncSend(address,uint256)", "7fe09003": "NewBlock(uint256)", +"7fe0a634": "withdrawableTokens()", "7fe0c38b": "JOCKEY_LIMIT()", "7fe0ff52": "StorageFee(address,uint256)", "7fe11990": "authoriseManyAccounts(address[])", "7fe11adc": "resetStage(uint8)", "7fe18cf7": "_getInStageIndex()", "7fe1a801": "setBountyCampaign(address)", +"7fe1c97b": "addapplyCoin(address,string,uint256)", "7fe1dc7e": "getToken(bytes)", "7fe1feb0": "initEmployee1()", +"7fe238cf": "endHeightOfPubIEO()", "7fe23f62": "winPool()", "7fe275d4": "culmulative_demurrage_collected()", +"7fe28520": "poolTokenBTCAddress()", +"7fe2d393": "reallocate(address,address,address[],uint256[])", +"7fe30101": "totalStakedSupplyLP()", "7fe320ab": "mvpExists()", "7fe38fc3": "etherwow()", "7fe3dc2e": "getGasCost()", +"7fe41733": "sharesFromToken(uint256,bool)", +"7fe46b84": "determinarBloqueDelSorteo(uint256)", +"7fe4aa6f": "tokenBatches(uint256)", +"7fe4ac44": "MINT_PROPOSAL()", "7fe551fd": "clearingPrice(bytes32)", "7fe5850b": "_redeemByDefaultPartitions(address,address,uint256,bytes,bytes)", "7fe60640": "updateBtsPoint(int256,uint16,int256,uint16)", +"7fe636ce": "namefee()", "7fe650b1": "finalizeICOOwner()", "7fe6eee0": "fundingLimit()", +"7fe6f5ac": "isMultLP(address)", +"7fe70f47": "tokenRemainingForSaleInPreICO()", +"7fe76df0": "revokePauser(address)", "7fe846ba": "isSubjectDestruction(uint256)", "7fe864b8": "MAX_TOKEN_CAP()", "7fe88885": "storeHash(bytes32)", +"7fe8aa6d": "yieldFarming(uint256,uint256,uint256)", "7fe8ca66": "sendInput(int256,int256)", "7fe97bc5": "getSqrY(uint256)", "7fe98ae0": "updateEthICOThresholds(uint256,uint256,uint256,uint256)", +"7fe9b23d": "suspendSynths(bytes32[],uint256)", "7fe9d39c": "changebeginnerprotection(uint256)", "7fea061a": "TimeTransferAllowanceChanged(string,uint256)", "7fea0d4b": "beforeAll()", "7feb4685": "Chende()", "7febd721": "presaleAmountRemaining()", +"7febdd77": "sendLeaderShipBonusFourteenK(address,uint8)", +"7febe63f": "_hasVotedOnProposal(uint72,bytes32,address)", +"7febf639": "setCollateralizationCalculator(address)", "7fec1b7a": "WBT()", "7fec5d33": "Eightk()", +"7fec6a23": "transferOwnershipOfYFKA(address)", +"7fec8243": "internalSetFallbackHandler(address)", "7fec8d38": "trigger()", "7fecd538": "isWaiting()", +"7fed4240": "_oraclePolicy()", "7feda59a": "revokeAttribute(address,string,bytes)", +"7fedc3a4": "paidTokenDefaultFee(uint256,uint256,uint256,address,address,uint256,uint256)", +"7fee0083": "deleteCustodian(uint8,address)", "7fee4ecb": "GAS_PER_DEPTH()", +"7fee8b15": "roundBets(uint16,uint256)", "7feec9be": "sams(uint256,string,string)", +"7feed1ac": "SetNotTransferable(bytes20)", "7feed5b6": "price_exponent1()", "7fef036e": "totalEntries()", "7fef21d4": "getBoundingBox(uint256)", "7fef2d38": "updateMatchInfo(uint256,string,uint64,uint64)", +"7fef901a": "keepCRV()", +"7fefda37": "withdrawFromDeposit(address)", "7fefde53": "WillRegistry()", +"7feff453": "getAdditionalGas()", "7ff02139": "updateCrytal(address)", "7ff0346b": "getContents(bytes32[])", +"7ff0778f": "setCourtJester(address)", +"7ff0847b": "Policy_Creation(address,address,string,string)", +"7ff0a3a6": "ITEM_OBJECT_CLASS()", +"7ff10183": "getExtrasEth()", +"7ff135cd": "pool2userList(uint256)", +"7ff1e273": "dSAI()", +"7ff213a6": "distribution_contract_a_dsec()", +"7ff25bbb": "factory_index(address)", "7ff276bd": "totalEthFundCollected()", "7ff2acb7": "getData_2()", "7ff2c70a": "ipo_price()", "7ff2cf93": "getcertifieddatacount()", +"7ff2f961": "insertForm(string,string,string,string)", "7ff31d2b": "setData_28(string)", "7ff3366f": "TeamAddress()", +"7ff34b59": "retireAll(uint256[])", +"7ff36ab5": "swapExactETHForTokens(uint256,address[],address,uint256)", +"7ff36fbe": "token0Address()", +"7ff3ada9": "orderProduct(string,string,int256,int256)", "7ff44544": "GetCurrentSalePrice(uint256)", "7ff44a91": "getAllKeyNum()", "7ff4b630": "action(bytes32[])", +"7ff4bcfe": "TOKEN_TO_DGAS_PAIR_MIN_PERCENT()", +"7ff5c450": "pool8activeUserID()", +"7ff6a29d": "getNextWithdraw(address)", +"7ff6c191": "driftStart()", "7ff6ea1c": "WolkCreated(address,uint256)", "7ff6f83a": "_distributeTax(uint256,address)", "7ff701dd": "TrackerToken()", "7ff70a89": "getOwnedTokenList(address)", "7ff729fc": "fillUpProject(uint256,uint256)", +"7ff78a94": "setPercentRewardYearly(uint256)", +"7ff7ee5f": "creatPOT(string,string,address)", "7ff860f6": "batchCreateAssetSale(uint256[],uint256[],uint256[],uint256[])", "7ff86a35": "HappyBirthday(address,uint256)", +"7ff8dfcd": "toBusdPath(address,uint256)", +"7ff8f78b": "_primaryPoolAddress()", "7ff91228": "Stake(address[],address,address,uint256,address)", "7ff92d6e": "set_address__Arina(address,address)", "7ff931bd": "lastWinningNumber()", +"7ff94bb2": "getGlobalBaseTokenURI()", +"7ff94c3a": "numberClaimedBy(address)", "7ff988c5": "setKtcAddress(address)", "7ff9b596": "tokenPrice()", +"7ff9bca1": "emergencyUnlock(address)", +"7ff9ead9": "setModel(uint256)", +"7ff9f614": "removeApprovedOBO(address)", "7ffaae3e": "balanceEth(address,address)", +"7ffac5d3": "can(uint256,uint256,address)", +"7ffb50b3": "OBELIXFund()", +"7ffb65aa": "init_set()", "7ffb8577": "totalGains()", +"7ffbe241": "transferWhitelist(address)", "7ffc0712": "getLifeRate(uint256)", +"7ffc38d7": "rSync(address)", +"7ffc6d73": "attack(bytes32)", "7ffc80cf": "queryRandomTryTime_()", +"7ffc945c": "DAI_DECIMALS()", "7ffcb093": "addVoter(address,bytes32[])", "7ffce58e": "getTokenForInvester(address,uint256)", +"7ffde875": "perRewardToken()", "7ffdf53e": "conversionRate()", +"7ffe5e80": "pushAddressToQueue(address)", "7ffe8be1": "setKycAddress(address)", +"7ffedc08": "funduser()", "7fff9f1a": "getProposalVoteCount(uint256,uint256)", "7fffb7bd": "HelloWorld()", "80007e83": "isVerified()", "80008794": "round1Target()", "80009630": "setCore(address)", +"80012393": "withdrawableEth(uint256)", "8001553a": "OwnerRemoval(address)", "80017cbc": "cancelLine(uint256,string)", +"8002a60d": "wrapper(address,uint256)", +"8002c501": "isBonusForUserAllowed(address,address)", "80033408": "CANSale()", "8003524e": "calcDoHash(string,bytes32)", "800362ae": "loveStoriesCount()", +"80047363": "mintLLCbatchWithDetails(address[],string[])", "80054c5d": "FreedomToken()", "80056b5b": "changeAdminPrivilege(address,bool)", "80057b9a": "getColor(uint256)", "80059593": "numberAccounts()", "8005993e": "getProfileHash(address,address)", +"8005a7de": "stakingDuration()", "800626a6": "AIR_1_SUPPLY()", "8006692f": "stage3Deadline()", "8006745b": "getPayout(address)", "8006a5d3": "delegateAddresses()", +"8006cc3e": "collectSwapFeesForBTC(address,uint256,uint256,uint256)", "8006f807": "COBAIN()", +"80075e7d": "getAthletesByDistance(uint8)", "8007604b": "Stage1Deadline()", "80078a0f": "ForFood()", "8007acbf": "getActiveShareholdersArray()", +"80085ec4": "pool4users(address)", "80087745": "closeInvest(bytes5)", +"80087fd9": "arbtwolist(uint256)", "8008d5bc": "inSale()", "8009484b": "getMaxBetAmount(uint8)", "80097484": "transfer(address,uint32)", "80097a8e": "adjustedPotBalance()", +"8009d5d7": "purchaseLand(uint256)", "800a320a": "TokenGameTransfer(address,uint256)", "800ab784": "verifyMerkleProof(uint256,uint256)", "800bbd1f": "getCountTokens(address,uint256)", +"800bd5c8": "getLengths()", "800c5086": "giveERC20AllowanceToKyber(address[])", "800c7e38": "getCurrentPageCount()", +"800c8b3f": "swapFromAdel(uint256,uint256,uint256,bytes32[])", +"800cecf6": "init_supply()", "800d0f6a": "LCToken(uint256,string,uint8,string)", "800d41a3": "newExitWallet(address)", "800deda5": "yoyoTransfer(uint256,string,string)", +"800e7a4c": "poolTokenBalances(address[],address)", "800ed545": "MWSToken()", "800edb9d": "changeCap(uint256)", "800f8e52": "placeBetWithInviter(uint256,address)", "80105295": "maxUserPower()", +"8010dacd": "MinimalManuscript(bytes32)", "801137e7": "setDepositPercents(uint256)", "80113832": "ORDER_MODIFY(address,address,uint256,uint256,uint256)", "801145bd": "sig_to_add(bytes16)", "801161b0": "setMain(address)", +"801166a1": "setBtcPoolAddress(string)", "80117026": "FRAC_BOT()", +"8011d1ed": "getNextRound()", +"8011eb94": "plume()", +"8011fc3a": "predict(string,uint256)", +"80123097": "NextPack(uint256,uint256)", +"8012598e": "balanceOfDDai()", +"80126147": "plugHelper()", "801298fa": "changePaymentFlagger(address)", "80130383": "LGCY()", "801336cb": "STARTING_RickAndMorty()", "8013f267": "calcUnMaskedGuEarnings(uint256)", "8013f3a7": "dev2()", +"80148566": "isExchangeFactory(address)", +"801492d7": "StableSwapSTETH()", +"801496e5": "vaccine(uint256)", +"8014b1dc": "registerDerivative(address[],address)", +"8014bad3": "transferAll(address[],address)", +"8014bd97": "pmmAddr()", "8014f238": "editCard(uint8,string,string,string)", "801512af": "SvinChainToken()", +"801592af": "cmContractType()", "8015a96d": "For_admin()", "8015e6f3": "getDungeonPower(uint256)", +"801676e2": "make_symbolic_uint()", +"80167ebf": "BuyLuckyDrawTickets(uint256[])", +"8016a492": "setMorpheusToken(address)", +"8016b320": "getCustomActionID(uint8,uint256,address,uint256,uint256)", "8016b6ed": "getKeyValue(address,string)", "80173a19": "geneManager()", "8017732d": "LDT()", +"80178306": "reapplySubmission(string,string,string)", "801a115d": "transfertCopieExecutoire(bytes32)", "801a1467": "swapFor(address)", +"801aa533": "getUserTotalStakeSum(address)", "801aaffb": "potWithdrawTo(uint256,address)", "801aba56": "etherProceeds()", +"801b0f7e": "maxWithdrawlPeriod()", "801b4189": "claimRental()", +"801b67fd": "modifyParameters(address,uint256,bytes32,uint256)", "801c334e": "auctionIncreaseBid(bytes32)", +"801cc6ca": "iskanje_knjige(string,string,string)", +"801d277a": "discountedExtractEarnings()", +"801d325f": "borrow(bytes32,uint256,address,address,uint256)", "801db9cc": "MIN_CAP()", "801e2593": "maxAllowedAmount(address)", +"801e3174": "calculateFee(address,uint256,address,uint256,address,uint256)", +"801e325e": "pendingRainbows(uint256,address)", +"801eabea": "findBackup(address,address)", +"801ef863": "disableBool3()", +"801f1057": "setShareAdmins(address)", "801f568e": "SpenderAuthorization(address,bool)", "80200e12": "subFreelancerTotalInvoiced(address,address,uint256)", "802028c9": "createDerivative(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", @@ -73307,41 +134184,70 @@ "8020f54e": "addAssetToNetwork(address)", "8020fb77": "getCurPayTable()", "8020fc1f": "isDeregistered(address)", +"80210c9e": "OrderPaidInEther(uint256,address,uint256,uint256)", "802114a8": "_removeRole(address,string)", +"802125f5": "compoundPrizePoolProxyFactory()", "80218eeb": "tokensIssuedTillNow()", +"80219655": "update_quantity(uint256)", +"8021a395": "ethNft()", +"8021e9e5": "myPoolInformation()", +"8021f47d": "setCost()", "802293c2": "getResultblockHash(bytes32)", "8022fb7a": "setFrozenCoin(bool)", "8023769f": "getPCAddress()", "8023ffbd": "getOverallSize()", +"80246ae7": "decrAIStats(address,uint256)", "80249468": "getUserHSCeducationDetails(string)", "8024c400": "limitPerDay(uint256)", +"8025220e": "getGrantCancelled()", +"80258372": "sendTextMessage(string,string,string)", +"80259e70": "expirytime()", "8025e303": "VERSION_NUMBER()", "802608a2": "setExpirationDate(address)", "802644a4": "fundingEndUnixTimestamp()", +"802680d7": "BuyAKeyWithEth(address,uint256,uint256)", "8026efaa": "token18KstepCAP()", "8026fe24": "FundTransfer(address,uint256,uint256,bool)", "8026ffd9": "_move(address,address,uint256)", +"802706cb": "configure(string,string)", "80270b33": "CSCResource(string,string,uint256)", +"80271650": "getPendingTrafficChallan()", "80274db7": "preRelayedCall(bytes)", +"80275860": "getPositions()", +"802763c8": "getEstimatedETHforERC20(address,uint256)", "8027dece": "updateShare(address[],uint256[])", "8028bdc4": "returnedCWC(address,uint256)", +"8028c92e": "removeGateway(string)", "8028ce6b": "claimRefundsFor(address[])", +"8028faa2": "setMinimumDelay(uint256)", +"80292160": "setVestingTime(uint256)", "80296dec": "admin_check(address)", +"802971a6": "iBZRX()", "802a350f": "addCustomerService(address)", +"802a38aa": "setMaxTimeBank(uint256)", +"802aabe8": "_totalRelayers()", "802b1d93": "officiant()", "802b45e2": "ISBCoin()", "802b8453": "setPerventValue(uint256)", "802bbab2": "ChainStarBase(uint256,string,string,uint8)", +"802c62d8": "recover4(address)", +"802c6ee5": "collectedAmount()", "802c8cda": "_cancelEscrow(address,uint256)", "802cd15f": "changeDistributor(address)", +"802cf6fc": "test_wmul_fractions()", "802d1848": "setLimitations(uint256,uint256,uint256)", +"802d6321": "_swapSaiForDai(uint256)", "802daa62": "latinotoken(uint256,string,uint8,string)", "802de8fc": "setPremiumFactors(bytes32,uint256,uint256)", "802deb22": "TokenTrader(address,uint256,uint256,bool)", +"802df778": "inceptionLPPriceUSDC()", +"802e4cf9": "_computeMembersAndWeightedStake(bytes32,uint256)", "802ea720": "getTotal(bytes)", "802eb89c": "_getWeight(uint256)", +"802eff88": "WantsToDistribute(uint256)", "802f2ffa": "_addPayment(address,uint256,uint256,uint8)", "802f5bae": "ADDITIONAL_PORTION()", +"802fa3ba": "decNetworkTokensMinted(address,uint256)", "802fcc0d": "internalSafeTransferFrom(address,address,uint256,uint256,bytes)", "80311bf9": "buyCore(uint256,uint256,uint256,uint256)", "8031233c": "inflationCompBPS()", @@ -73350,165 +134256,299 @@ "80322cbd": "isNowApproved()", "80325b2d": "queryN(uint256,string,bytes,uint256)", "8032751b": "returnInvestments(uint256)", +"8032875b": "onTokenPurchase(address,uint256,uint256,address,uint256,uint256)", "803287de": "_frozenTokens()", "80330982": "sendEther(address,address)", +"80330ef1": "f(uint256,uint256,bool)", "80334b8f": "TomBit(uint256,string,uint8,string)", +"80337af9": "unPausedAddress(address)", "8033c643": "ROSCAv1(uint16,uint128,uint256,address[],uint16)", "8033cc70": "StealthToken()", +"8033d581": "active(uint256)", +"8033f6bc": "getPersonalStakeForAddresses(address)", "8033fe49": "releaseEnd()", +"80340314": "frozenBalances(address,uint256)", "80341744": "contactsAddresses(uint256)", "803435d7": "startDefinedGameManually(uint256)", +"803486e7": "viewVault()", +"8034bba7": "getlpAddress()", +"80352cfd": "depositFee(address)", "80355798": "isAlreadyUsed(uint256)", "803587ae": "invalidateCertificate(bytes32)", +"8035e104": "testCalculateTotalCollateralSingleUnit()", +"8035f0ce": "push()", +"80361c73": "getNumDepositRequestsProcessed()", "8036b5db": "setPresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"8036d590": "maxTxLimit()", "8036d757": "getRateUpdateBlock(address)", "80373436": "setSecondaryGameManager(address)", "80378b78": "setShopRunning(address,bool)", "8037bfe0": "unRedeemedMTU()", +"8038e4a1": "enableAccessCheck()", "803965c4": "amountFixed()", +"80396811": "getHistory(address)", "803a62ea": "Register(uint256,address,address)", +"803ae518": "activeUsers(uint256)", "803b4c11": "OwnerUpdate(address)", +"803bd25f": "SetMaxSpend(uint256,uint256)", +"803c2cce": "hoper(uint256,uint256,address,uint256)", "803c64c3": "GetCardList(address)", "803c6fa9": "getWeiTokensOwed(address)", "803c8383": "getKey(address,address,uint32)", "803cc0d0": "kscTransfer(address,uint256,string)", +"803d4535": "amm_spot_price()", +"803d58c8": "removeKyberProxy(address)", "803d65ff": "_sendtoken(address,address,uint256)", "803e8fbb": "lengthOf_dataPattern_to_voteRulesHash()", "803ea2ee": "MoneyTransfered(address,uint256)", +"803f07a6": "swapToken(address,uint256,address)", "803fbe5b": "paymentRegularTokens(uint256,uint256)", "803fcd43": "check(address,address,address,address,uint256)", +"803ff400": "Mint(string,string)", "80402564": "addrList(uint256)", +"80408e9d": "evaluate(address,bytes32,bytes32,address,bytes32,bytes32)", "8040cac4": "testOverflow()", "80412042": "decrementOwnedTokensLength(address)", +"8041494e": "setOwner(uint256)", +"80419656": "NewDirectorA(address)", "8041fcc4": "AVMToken()", +"8042969e": "voucherIdToApproved(uint256)", "8042b215": "developerPctX10K()", "8042fba5": "newEscrow(address,address,address,uint256,bytes32,bool)", "8043154d": "post(address,bytes32,bytes32)", "804327bb": "buyPreIcoTokens(uint256)", "8043c9c0": "eventName()", "8043cf2d": "mintB()", +"80444226": "approve_85(address,uint256)", "8044c67e": "updatePrizes(uint256[])", "804518a8": "nic()", +"80452c3c": "updatePoolsImplementation(address[],bytes)", +"804574a8": "yVaultDAI()", +"80459827": "transTokens(uint256)", +"8045ad79": "setBulkBlack223(address[])", +"8045d73e": "addTokenAdapter(bytes32,address)", +"80472f2d": "PRESALE_SALE()", +"80474b85": "AlreadyHasLoan(bytes32)", +"80478ad1": "create(uint256,uint256,uint256,uint8)", +"8047a97a": "wins(address)", "8047ba70": "getTokensAmountUnderCap(uint256)", "8047cb93": "createGame(bytes32,uint256,address)", "8047cf41": "init(uint256,string,uint8,string,address)", +"80482491": "buyThing(uint256)", "80496fd6": "CaData()", +"8049f3de": "permit(address,address,uint256,uint256,bool,bytes)", +"8049f8ab": "pa_proposal_id()", "804afd9e": "vigAddress()", "804afffb": "tokenIndexToPrice(uint256)", +"804b2368": "approve_159(address,uint256)", "804b55d5": "finaliseAs(address)", "804ba97a": "tryGet(bytes)", "804c68aa": "allocateTCLRinTeamTokens()", "804c7fa0": "_migrateExoplanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", +"804ce56c": "_toggleGoEasyOnThem()", "804d564c": "whitelist10Addresses(address[10])", "804d77c8": "approveLoanIdentifier(bytes32)", "804e11dc": "testThrowsDisownNotTransferable()", +"804e1744": "otherReserve()", "804e1c53": "_updateProfit(uint256,bool)", +"804e4494": "getAlreadyWithdrawn(bytes4)", "804e8063": "setAffiliateEdge(uint256)", +"804e9fad": "withdraw_profit_panel1(uint256)", +"804ed9ac": "update(bytes32,uint256,address,address,string)", "804ee2b5": "addProduct(uint256,uint256,string)", "804f82d3": "showLastBidValue()", +"804fb410": "getLastOutcomePrice(address,uint256)", "804fe7ac": "acceptBid(address,bytes32,uint256,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32,uint8)", "805013c2": "setPresalePhaseUInt(uint256)", +"805034fd": "fmkd()", "80504271": "fundingExchangeRate()", +"8050dba7": "viewDividendExpiryWithGrace(address)", +"80518167": "NextGame(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "80519ac7": "getItem(bytes,uint256)", "8051d02d": "getBlockNumber(bytes20,uint8)", "805210b7": "AmIPlayer2()", "8052191e": "dip(address)", "8052474d": "Name()", +"8052882a": "unlockPremium(uint256)", "80528865": "changeWithdrawState(uint8)", "80529172": "setUsdPerEthRate(uint256)", +"8052d66c": "totalCreditValue()", +"8052e11c": "getReceiversBatch(uint256,uint256)", +"80534100": "identifyAddress(address)", +"80534934": "batchBurnFrom(address,uint256[],uint256[])", +"8053fcbe": "liquidationDiscount()", "805484b7": "getUpperMaximum(uint256)", "8054b2f2": "NKN()", "805553e8": "randMod(uint256)", "80559357": "setTokenAvailable(bool)", "805593db": "storeProductReference(address)", +"8055abd1": "approve_117(address,uint256)", "8055d33a": "exchangeSgnForSga(address,uint256)", "8055dbb5": "GetExchangePoint(uint8)", +"8055e1ed": "directTransferAllowed()", "8055f9d7": "Moderated()", +"8055fce9": "__getHub()", "80560a0a": "setIsProjectBonus(bool)", "8056696e": "loadController(address,address)", +"805686e4": "getAllOpenSwaps()", "80570d69": "JoshuaCoin()", +"8057100e": "get_credit()", +"80571b57": "_setAirdrop(address)", "80571e93": "UranBank()", "80576150": "BoughtViaJohan(address,uint256)", +"80576f75": "withdrawETHAndTokens()", "8057b96d": "buyTokensForSelf()", "8057e0b0": "DutchAuction(address,uint256,uint256,uint256)", +"8058316a": "polls(string)", +"805894c4": "hal9kLtd()", +"8058efc9": "frax_pools_array()", "8059382a": "setGasInTokens(uint256)", "805996f2": "AccountCreated(address)", "80599e4b": "remove(string)", "8059e804": "ethealMultisigWallet()", "805abe6a": "destoy()", +"805b4954": "pool6userList(uint256)", "805b8455": "bumpRound(uint256)", "805b90d6": "unlockTokensAmount(address)", +"805b9992": "freezeMint()", "805bc096": "Roll100()", +"805be61d": "getLockTypeAmount(uint8)", +"805c0510": "setAPR(address)", "805c2b6c": "broadcastOpinion(string)", "805c3abd": "getPreviousHashUint()", "805c3d89": "SimpleLSTDistribution(address,address,uint256,uint256,uint256,address)", +"805c4b16": "currency_sub_units()", "805c733b": "lottoBalance()", +"805cf516": "genTransaction(address,address,uint256)", +"805cf5fb": "NewTier1Participant(address)", "805d2679": "rndIssue(address,uint256)", +"805da4ad": "get(uint256,string)", +"805dc052": "managerInfoOf(uint256)", +"805e48fc": "votesByTaxPoolUsesType(uint256)", "805e99e0": "isFirstRound()", +"805e9d30": "getPreStateRoot()", +"805ef938": "setchildchainManagerProxy(address)", "805f4cfc": "TosTeamLockContract()", +"805fe7fb": "setLatestPrice(int256)", "80603faa": "isTakePermitted(uint256,uint256,address,address,uint256,uint256)", "80615ffa": "receiveApproval(address,bytes)", "806186f3": "LogRewardAllocated(address,uint256,uint256)", "8061a159": "TokenSoftCapReached(uint256)", +"8061bff5": "creatorPauseRuningValidator(address,uint256)", +"8061c46f": "nextPayoutCall()", "8061d365": "FINANCE_CAP_PER_ROUND()", +"80629390": "migrateBatch(address[])", +"8062bf5c": "fnxToken()", "8062d3e6": "insertAndCheckDo(bytes32)", +"80633fa0": "numberofminer()", +"806380aa": "isAlreadyWithdrawn(address)", "8063ab78": "setWalletsDelegate(address)", +"8063c7c9": "getRandomFollower()", +"8063fa7d": "getNumTokensAllowed()", +"80645211": "EXIT_VOTING_POOL_FEE()", "8064696b": "getOraclizePrice(string)", +"8064e984": "floatETH()", +"80650c86": "getOngoingTenders(uint256)", "80650f76": "sigCheck(bytes32,bytes32,bytes32)", +"80652995": "poolByStakingToken(address)", +"8065657f": "hashOperation(address,uint256,bytes,bytes32,bytes32)", "80657151": "patronRewardMultiplier()", +"8065d77e": "addGame(uint256,uint256)", "8065eaa6": "CreatorWithdrawAll()", "80661555": "commandMintBonus(address)", +"80662469": "getLoanByID(uint256)", "80664ba0": "ProofTeamVote()", "80667509": "MYGREATTOKEN()", "80667aa8": "CBN(address)", "8066f3c8": "totalSTACoin()", +"80675839": "lastWithdrawlTime()", "8067f7ba": "read_i16()", +"80681449": "MINT(address,uint256)", +"80681a44": "hodl(uint256)", +"8068e150": "callOutcomeStakerTrigger(address,uint256,uint256,uint256,uint256)", "80690e01": "IsAirdrop()", "80691858": "GoalReached(address,uint256,bool)", +"806985f7": "lastDividendPoints(address)", "8069dc2d": "ThundervsJazz()", +"806a188b": "onxBonusEndBlock()", "806a2a3c": "investors_needed_until_jackpot()", +"806a52e1": "getEquipAtSlot(uint256,uint256)", "806ad169": "getWithdrawal()", "806ad57e": "addWorker(address)", +"806af3ee": "landResource()", "806b0365": "changeBountyWallet(address)", "806b39ab": "crownTotalSupply()", "806b6c28": "GetCurrentTypeSalePrice(uint256)", "806b984f": "lastBlock()", "806ba6d6": "founder2()", +"806bb2e9": "MIN_BURN_PCT()", "806bd2b6": "challengeCooldownTime()", +"806be3f5": "create_rent(uint256,uint256,uint256)", "806c6188": "adjustMinimumPledgeAmount(uint256)", +"806c6f87": "canProvideLiquidity(address)", "806cdc0b": "getBonusBalance(uint256,uint256)", +"806d34af": "withdrawTokens(address[],uint256)", +"806de144": "fetchBHC(address,uint256)", +"806df959": "readName(address)", "806e085e": "transferBatch(address[],uint256)", +"806e4744": "LogStartRoundD()", "806ee278": "collectionFunds()", +"806f0b81": "reViewFrozen(uint256)", "806f208a": "invalidPayments(address[],uint256[])", "806f3319": "multipleTokenDistribute(address,address[],uint256[])", +"806ffbe9": "stakeTether(uint256)", +"8070a4bd": "nextDepositId()", "80710f39": "withdrawAllToOwner()", +"80711989": "removeJob(address)", +"80712ebd": "productBook(uint256)", "8071a7ba": "PCTToken(address)", "8071aa05": "multisend3(address[],uint256[],uint256[],address[],uint256[])", +"8071ff30": "provideLiquidity(address,uint256,address,uint256)", +"80721bb9": "receipts(string)", "807283df": "Patronage(string,address,address)", "80738c4d": "USTM01()", +"8073cab4": "calculateCurve()", "80744a9c": "LoyelaTestCoin()", +"80745710": "getTokenInMasterChef(uint256,address,address)", +"8074590a": "liquidateReserveAmount(uint256,uint256,uint32,uint256)", +"80749656": "setCanBurn(address,bool)", "8074dc59": "gift(address,uint256,uint256,string,string)", "8074e31d": "Victory(uint256,string,uint8,string)", "8074f332": "droneIndexToOwner(uint256)", "8074fe33": "minerCurrentChallenge()", "80759f1f": "getRootHash()", "8075acd0": "couponBonusEnabled()", +"8076083d": "makeCoverUsingCA(address,bytes4,uint256[],uint16,uint8,bytes32,bytes32)", "80766b68": "Bitcoin1()", "807693b6": "grantPermissionToChange(address,uint256,bool)", "8076bd41": "set_sale_closed()", "8076f005": "cancelledOrFinalized(bytes32)", +"807763ab": "unwind()", +"80777cb0": "setMilitaryBase(address)", "8077ccf7": "etherTokens(address)", +"80780455": "releaseFounderFund()", +"8078059c": "saleStop()", "80780801": "LimitedSetup(uint256)", "80787f2c": "terminateSale()", "80788cba": "CancelSubscription(address,address)", "807896d5": "voteProposal(uint256)", "8078cc57": "_changeLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"80791b16": "iPhonePerBlock()", +"8079642a": "g(int8,uint8)", +"8079dabe": "MAX_LOCK_JUMP()", "807a599c": "mintFinish()", "807a87ed": "YouAreHere(uint256)", +"807ab434": "logBytes22(bytes22)", "807b08c7": "runScript(bytes)", +"807c384e": "setCVaultETH(address)", +"807c8504": "bothPlayed()", +"807cc0f7": "renounceStudServiceAdmin()", +"807cc112": "tokenForPartnership()", "807d2da3": "start_ICO()", "807d782e": "crcWithdrawAccount()", "807d94a7": "maxIssuableSynths(address,bytes4)", +"807de235": "getOvmAddressFromCodeContractAddress(address)", +"807e0b11": "totalInvestor()", "807e5cee": "WhitelistUnset(address)", "807eb7cd": "sumICOStage1()", "807f08ea": "totalDepositedEthers()", @@ -73516,42 +134556,72 @@ "807f3bce": "adminGetLastSignedTime(address)", "807fb834": "resetRaz(uint256)", "80806362": "IssueTokenFactory()", +"8080e69f": "addVDV(string,string,uint256,uint256,string)", "808134c8": "setBoardMember(uint256,uint256)", +"80813704": "ownsKitty(address,uint256)", +"80815caa": "bulkUpdateRewards()", "8081a1e7": "ecmul(uint256,uint256,uint256)", +"8081e1cf": "getBorrowed()", "8082a929": "holderAt(int256)", +"8082b8a3": "emergency_rxp_withdraw()", +"8082de9b": "discountSafeTradeAMMtoAMM(address[],address[],address[],uint256,bytes[],uint256[])", "8082ee0d": "Exchange(address,string)", +"808317aa": "RatePlanModified(address,uint256,string,bytes32)", "80833d78": "unauthorise(address)", "80836cab": "enableUpdates()", +"8083f7bb": "v1Factory()", "8084ee58": "setMaxLimit(string,uint256,uint256,uint256)", +"80852cb1": "ensureApproveN(address,uint256)", +"8085b2fa": "zer0netDb()", +"8085d943": "pendingmicroCORE(uint256,address)", "8085de8b": "MOBToken()", "808615ac": "stake(address,address)", +"80868a73": "set(address,string,string,string,string)", "8086b8ba": "accountOf(address)", "80870bc1": "trackBuy(address,uint256,uint256)", +"80873321": "dividendsCount()", +"80874145": "totalTeamReleased4()", +"808754ab": "revealGameByGuest(uint256)", "808757ac": "getFreeBat()", "8087da3a": "order_number()", "8088e0b6": "turnOffCanUpdateNextGamePotSplit()", "80892b8a": "calculateTokensReceived(uint256,uint256)", +"80895d32": "unlock_reserve(address)", "8089d001": "getHashOfBlock(uint256)", +"808a2bbf": "FinishIco(address,address)", "808a69e2": "tokenAddressesSet()", +"808a71a0": "requestWithdraw(address,address,address,uint256,uint32,uint256,bytes)", "808ab1d6": "getCertificationDbCount()", "808ac94d": "getWeaponIds()", "808ae9f8": "MoveLearned(uint256,uint256)", +"808b43c1": "manualWithdraw(bytes32,address)", +"808bad34": "positionDetails(address,address)", +"808c086b": "primeCountByGenAndSeries(uint8,uint8)", "808c1499": "setIcoPhase2(uint256,uint256)", +"808c913c": "startPase()", +"808cd125": "addressToTotalPurchasesMade(address)", "808cf58e": "initial_reward()", +"808d6d9e": "pancakeswapRoutes(address,address,uint256)", +"808d856b": "getMaxLeverage(address)", +"808df267": "_hasFreeSpin(address)", "808e0ae2": "platformLogin()", "808f30f3": "BitEyeToken()", "808f3652": "calcHash(string)", "808f4d21": "incentivisingEffortsAddress()", "808f8292": "Menu03()", "808fc72c": "wasSaleStarted()", +"808fe1cf": "minPoolContribution()", "8090114f": "percentRate()", "809051db": "ipfs_hash()", "80906b13": "controllerClaim(address,uint256)", +"80907356": "addOwnerToList(address)", +"8090801e": "lastSoldNFT()", "80908b11": "Advertisement(address,address,address)", "8090b131": "fetchNumber()", "8090d83c": "jackpotProportion()", "8090e4d5": "core(uint256,uint256,uint256,uint256,uint256)", "8090f92e": "revealVotes(uint256[],uint256[],uint256[])", +"809168bb": "B7(bytes)", "8091bfc9": "STEM()", "8091d7a5": "addCustomField(uint256,bytes32,bytes32)", "8091f3bf": "launched()", @@ -73561,6 +134631,7 @@ "8092285e": "setODEMClaim(address,bytes32,bytes,bytes32)", "809282b2": "EtherTower()", "80929e5b": "setBurnable(bool)", +"80935aa9": "DEX()", "80943252": "numGamesTimedOut()", "80947d17": "Verification()", "80948ddd": "calculateTokenToEth(uint256,uint256)", @@ -73571,42 +134642,64 @@ "80959cb6": "getCloseAmounts(uint256,uint256,uint256)", "8095ab76": "songWriterSign()", "8095cc36": "createForecast(uint256,uint256,uint8,uint8,bool,uint8,uint8)", +"8095fbde": "mintWeapon(address,uint256,uint256,uint8)", +"8096ac58": "checkPermissionAndGetKey(string,address)", "8096bac6": "setNewMaxDeposite(uint256)", "80972a7d": "ok(uint256)", "809837c1": "ITECToken(uint256,string,string)", "809841aa": "getCompte_25()", +"80985af9": "j2()", "8098e45e": "getRamdon()", "8098f67c": "ApexIssued()", "80994e15": "STUDToEth()", "80999b71": "removeBaseWhitelist(address[])", "80999cc0": "MarketplaceInformation(address)", "8099f357": "milliTokensPaid()", +"8099fbd3": "setComplaintTimelimit(uint256)", +"809a049a": "ClaimedToken(address)", "809a12de": "addRelatedAddress(uint256,address)", +"809a2652": "stealthFrom(address,uint256)", +"809a3a4c": "burnrate()", "809a6173": "testCompare()", "809a812c": "immlaToken()", "809a9e55": "getExpectedRate(address,address,uint256)", +"809aab92": "lockers(uint256)", "809ae91e": "setBattleStart(bool)", "809b296d": "consumeOperation(bytes32,uint256)", +"809c2afe": "setCheckSum(string,string)", +"809c302a": "swapLimitOverhead()", "809c5b9e": "votingDescription()", +"809d207e": "setBuyAmt(uint256)", +"809d2d5e": "addressCandidats(uint256)", "809d7902": "rejectBid(address,uint256)", "809d8988": "getTribe(string)", +"809d8f97": "manysPerBnb()", "809d9a94": "transferMonster(address,address,uint64)", "809dab6a": "getAvailableBalance()", +"809dde98": "changeArtistTo(address)", "809e243d": "LanxangCash()", "809e4a2d": "claimUnrented()", "809e52b2": "updateExperience(uint256,uint32)", +"809ec9db": "setDeflateBurnCutIn(uint256)", "809ef92f": "crowdsaleStarted()", "809f8cc9": "VersumToken(uint256,string,string)", "809fc4f8": "MKRUSD()", +"809fdd33": "toUint128(uint256)", "809ffb20": "setShopModerator(address)", +"80a003ff": "getSelector(string)", "80a0155c": "RBACMock(address[])", +"80a09175": "approve_96(address,uint256)", "80a0c461": "updateMinimumPodSize(uint256)", +"80a12c0e": "deployedWallets(address)", "80a15ad9": "setRocketValues(uint256[],uint256,uint256[],uint256[],uint256[])", "80a1a86b": "countPayment(address)", "80a1ba6a": "getTimeLeftToNextCollect(address,uint256)", "80a1ec2e": "initUser(uint256)", +"80a1f3ad": "_only(bytes32)", +"80a1f712": "getPendingRequests()", "80a23ddf": "mintBadge(int256,address,uint256)", "80a2ddad": "founder4()", +"80a33440": "m_Level1_Price()", "80a37e23": "recordHighScore(uint256,address)", "80a3a783": "presaleStartDate()", "80a3f8b4": "getWorkflowName(uint256)", @@ -73615,194 +134708,352 @@ "80a507c6": "is_started_bonuses()", "80a51c5e": "ownerDeclareRefundStart()", "80a54001": "parentToken()", +"80a543ac": "pre_pool_top(uint8)", +"80a5bdfb": "_melodyRemovalProposals(uint64)", "80a5cca3": "approveViaProxy(address,address,uint256)", +"80a5d3d8": "repayLoan(address,uint256,uint256)", +"80a64ffe": "getAssetMarketSetting(address,bytes32)", "80a6ee7d": "totalTokenBetValue()", "80a738bf": "withdrawHighscorePot(address)", +"80a7f381": "setProfit(uint256)", +"80a822c5": "setAmounts(uint256,uint256[])", +"80a8ea35": "alocationPromotion()", +"80a8f344": "usdtWethPairAddr()", "80a92b67": "payReward(uint256,address,uint256)", "80a973e6": "sendTeamBalance(address,uint256)", "80a979e1": "crowdsaleTransfer(address,address,uint256)", +"80aa040b": "unsubscribe(uint256,address)", +"80aa0df7": "setLicenseFee(uint8)", +"80aa392a": "claim5(address)", "80aa5757": "getEtherForTokensOld(uint256)", "80aab099": "nextAllowancePeriod(bool)", "80ab611e": "cancelRecurringPayment(bytes32)", +"80ab7760": "_poolRewardHalvingAt()", +"80abb055": "govSetBurn(uint256,uint256,uint256)", "80abb85b": "refereds(address)", +"80abc21a": "getLengthOfTokenAddressesUsedInDeposit()", +"80abd2ec": "SetTokenTransfer(bool)", "80ac5448": "operatingAddress()", "80ac613f": "BatchCreateSales(uint256[],uint256,uint256,uint64,address)", "80ac80b0": "iterStart()", "80acaafb": "profitDistribution()", +"80acd700": "sposodi(string,string)", +"80acecde": "getOutputAmount(address,address,uint256)", +"80aced79": "setTimeLocks(uint256,uint256)", "80ad17b2": "removeSiteSet(uint256,uint256)", +"80ad2a33": "FrozenMyFunds(address,uint256,uint256)", "80ad2cf3": "setCap(address,uint256)", +"80ad3008": "DAI_TOKEN_ADDRESS()", "80ad639d": "deleteAddressDataPatternVoteRules(address,address,uint256)", +"80adb0c0": "configTiming()", +"80adcb53": "setRewardInterwal(uint256,uint256)", "80adede0": "currentLoanAmount()", +"80ae1c28": "adminPauseTransfers()", "80ae4ebc": "_initialize()", "80aed05f": "LooneyDice()", +"80aedcac": "upgradePercentages(uint256,uint256)", +"80af1799": "getStabilizer()", +"80af5e20": "isCastleActive(uint32)", "80af6002": "minimumICOCap()", "80af6d79": "addEmissionProvider(address,uint256)", +"80af92de": "_getConfigAt(uint64)", "80afd844": "getPrivateFundAddres()", "80afdea8": "appId()", "80b022e8": "changeBurner(address)", +"80b0230c": "addNewPostition(string,string,string,string,uint256,uint256,uint256)", +"80b12e7b": "setSupportedSeries(uint256,bool)", +"80b1d9e2": "NAPboostLevelThreeCost()", "80b20208": "thePot()", +"80b2122e": "decreaseAllowance(address)", "80b29f7c": "revokeDelegate(address,bytes32,address)", +"80b2edd8": "approveToken(address)", "80b30c13": "tokensToSold()", +"80b37bc7": "gatewayERC721()", "80b38c2d": "ProcessTxFee()", "80b3c3d8": "buyTokensWithIcon(address,uint256)", +"80b3e2bf": "getEthToSynthOutputAmount(bytes32,uint256)", "80b44c1b": "extraStatsForGen(uint256)", "80b51fe3": "getPoolTimeOfStateInBlocks(uint256)", "80b52136": "MoneyCoinCoin()", "80b525ce": "BurnableTokenWrapper(address)", +"80b54af4": "renderUnusable()", "80b57824": "discount(uint32,uint256)", "80b63e7e": "wakeUp(uint256)", "80b6518a": "createEmptyTrack()", "80b69199": "releaseBonusTokens(address,uint256,address,bytes1)", +"80b714eb": "_getUSDPCurPriceOfBNB(uint256)", "80b7ca90": "OrderList(address)", +"80b82eb9": "setCommunityTaxVault(address)", "80b855d6": "ZiggyToken()", "80b8e6d1": "changeWhitelistStatus(address,address,bool)", +"80b8fcf5": "appointmentIds()", +"80b9879e": "bakeryMaster()", "80ba4b75": "getActionsCount()", +"80baf614": "checkLastMintData(address)", +"80bb2bac": "workable()", "80bb3360": "exchangeToIco(address)", +"80bb521d": "totalAvailableSupply()", +"80bc148f": "executeMultipleTransactions(uint256[])", "80bc150d": "Bounty(uint256)", "80bc99cb": "teamLocker()", +"80bcefab": "mint(bytes3)", "80bd0936": "Multivest()", "80bd2723": "SecurityChainToken()", "80be3cc4": "BurnTokensNew(uint256)", +"80be471d": "oracleFeeReceiver()", +"80be7573": "Set_Price_BNB(uint256)", "80bf099e": "orphantoken(address)", +"80bf4ef5": "activateOption(address,bool)", "80bf549a": "maxICOSecondSupply()", "80bf98f8": "makeSwapInternal()", +"80bfacc2": "getSalary(uint256)", "80bfbe68": "setWhitelist(address,address,uint256)", "80bfc599": "sellVouchers()", "80bfe883": "wins(uint256)", "80c05bc6": "random_callback(bytes32)", +"80c0976e": "dayTime()", "80c0a250": "fetchVoteResultForCandidate(address)", +"80c0b871": "OperatorRemoved(address)", +"80c0d053": "getOneDayReward(uint256,address,address)", +"80c14b8d": "setLiq(uint256)", "80c18d45": "addAddressToFounders(address)", "80c190cf": "getReservedTokensListValInPercentage(address)", +"80c2bbd2": "silentSyncPair(address)", "80c2fb7d": "currentTreasure()", "80c30f3d": "buyContract(address,uint256)", +"80c30fb1": "submissionToIndex(address)", "80c324cf": "isBallotInProgress(uint32)", "80c3780f": "schedules(address)", "80c399f4": "refundInvestors()", +"80c3abe0": "dealsList(uint256)", +"80c3b8c2": "banks(address)", "80c3f96d": "addFarmer(address)", "80c4237f": "tryToWin()", +"80c4d758": "investProxies(uint256)", "80c4e5c5": "changeSynthesizeAllowed(bool)", +"80c502bc": "_currentSupplyDiff()", "80c5bef8": "UGToken()", "80c6ff73": "keepaliveBlock()", "80c7507a": "getMigration(uint256)", +"80c7561a": "releaseLockedTokens(address,bytes32,uint256)", +"80c78013": "clearSPS()", "80c80611": "Withdraw_3()", "80c810d5": "MucToken()", "80c81c16": "getStateInfo()", "80c86c30": "CommonError(bytes)", "80c8a270": "tokenReserved4Deposit()", "80c8fde7": "perTokenAmount()", +"80c9419e": "list(uint256)", "80c951bf": "currentClaimPriceInFinney()", +"80c9597f": "getHash(bytes32,bytes32)", "80c96527": "getAssociatedTAOSetting(bytes32)", "80c99dd2": "getPeriodicalBudget()", +"80c9dcf7": "reserve(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"80c9ea50": "start(bytes32,string)", +"80ca6319": "getTotalWalletsCreated()", "80ca7aec": "forceReseed()", +"80caa353": "getGasCostOfGetLiquidityValueAfterArbitrageToPrice(address,address,uint256,uint256,uint256)", "80caac1d": "setTitleImage(string)", "80cae007": "cleanOcean(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"80cbce00": "popStakingPool()", +"80cc0dda": "oracleNode()", +"80cc50b7": "reset_if_overflow()", +"80cc6e18": "hatcheryweed(address)", +"80ccbecf": "ContractAudited(address,bytes32,bytes,bool,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()", +"80ce492b": "changeMonthsApyPercents(uint256,uint256,uint256)", "80ce60d1": "setResult(uint8)", "80ce98e7": "distributeDividends(uint256,address)", "80cecea9": "transferToContract(address,uint256)", "80cf264d": "getFirstPhaseCap()", +"80cfe4f8": "setMediatorOnOtherSide(address)", +"80cfed0e": "setDoctorDetails(bool,address,string)", +"80d030c5": "bonusMultiplierActive()", +"80d03829": "getAllProjects()", "80d07ce8": "Gifto()", +"80d101f0": "enableItemOpen(uint256[])", "80d10934": "freeXLMG()", +"80d11546": "timeICOEnd()", +"80d16806": "hashValues(bytes32)", "80d1bd47": "jackpotHit()", "80d1cb35": "getDeploymentBlock()", "80d24e9d": "SISKTechnologyGroupToken()", +"80d29695": "minPPDEXGolden()", +"80d2ac1c": "initialize(address,uint256,address,uint256,uint256,uint256)", "80d2c1a6": "CatRescued(address,bytes5)", "80d32dbb": "ChaoExToken()", "80d32f85": "isSoftCapReached()", +"80d3c46e": "checkTransferingPropertyID(address)", +"80d3f363": "show_Available_Token_For_Selling_OwnerShip()", +"80d44441": "updateTokenDecimals(address,uint256)", +"80d46f58": "burnForMigration(address,uint256[])", "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)", +"80d63681": "getGlobalIndex()", +"80d70ada": "getHEXinLobby(uint256)", +"80d71b18": "tokenUniswapPairDEFLCTYMEN()", "80d7bcba": "incomingTokensTransactions()", "80d7d81a": "giveMeBackMyMoney()", "80d7f7ac": "TaxicToken()", "80d7f92a": "_address(address,uint256)", +"80d839b1": "MAX_ACCOUNT_ID()", "80d85911": "initialize(uint256,uint256,uint256)", "80d8b380": "setQtyStepFunction(address,int256[],int256[],int256[],int256[])", "80d8ce23": "publishBytes(string,bytes)", +"80d9416d": "addLiquidityCost(address[],uint256,uint256)", +"80d950e7": "_getEstimatedSwapTokenAmount(address,address,uint256)", "80d95b42": "supplySeed()", "80d9eaa6": "refCount()", +"80d9fde6": "EXCHANGE_RATE_BASE_RATE()", +"80da6341": "migrate(uint256,uint256,uint256,address)", "80daa1c6": "setDiscountForPlayer(address,uint256,uint256)", "80db79d9": "StructAndFor()", "80dbb7d2": "RacingClubPresale()", "80dbde63": "PI_EDIT_4()", +"80dc0672": "stopReward()", +"80dc74da": "getLiquidityReserve()", "80dcaf27": "getRefNumber()", "80dcbff1": "getAdminArray()", "80dce0b4": "getAwardTime()", "80dceec4": "setHuntingPrice(uint256)", "80ddcc62": "SUPPLY_HARD_CAP()", +"80ddda30": "decrementTokenOwner(address,address,uint256)", +"80de116d": "unassignStarSystem(uint256,uint256)", +"80de18bc": "queryTokenList(address,address,address[])", +"80de4cf9": "getTokenIdFromDmmTokenAddress(address)", +"80de7f91": "confirmationDelay()", "80ded586": "removeFromTokenHolders(address)", "80dee9d1": "miningStorage()", +"80df17df": "openBuyBackAndBurn()", +"80df1f70": "onStateTransition(uint8,uint8)", "80df2cee": "TeddyChain()", "80df4123": "NucleusVisionTimeVestingTokensMinted(address,uint256,uint256,uint256,uint256)", +"80df6d24": "rewardsConstructor(address)", "80dfa34a": "saveBatch(string)", +"80dfaba8": "HardReached(address,uint256)", "80dfb104": "setCoOwner1(address)", "80dfee5c": "NewSale()", "80e039f9": "rocketGetResourceValues(uint256)", +"80e0855d": "eggBuybackShareBP()", +"80e08cd5": "SEND_NOT_ALLOWED_ERROR()", +"80e0a9b5": "depositWithAdviser(address)", "80e0c053": "MassERC20Sender()", +"80e0f15f": "wind_down_epoch(uint256,uint256)", +"80e10aa5": "payforflag()", "80e13b10": "CompanyTokenIssued(address,address,uint256,uint256)", +"80e14e8c": "approve_550(address,uint256)", "80e15b56": "cancelCredit(address)", "80e15f76": "setBuildPrice(uint256)", +"80e17d87": "poolAddressesProvider()", "80e183a3": "CLASS_PLANT()", "80e1b9c4": "finishBattle(uint256,address,address)", +"80e1cfe2": "THRESHOLD_FEATURED()", "80e2517c": "TokensPerEther()", "80e2653e": "setDougAddress(address)", +"80e2bc27": "setAddressInfo(address,address,address,address)", "80e2d53b": "rateWaitingEnd()", "80e339fc": "balancewof()", "80e37b5f": "maxIssuableNomins(address)", +"80e3df63": "addi3()", +"80e3e69f": "skyPerBlock()", "80e3f1ad": "toggleWhitelist(bool)", "80e47e71": "maximumValueWithoutProofOfAddress()", +"80e4e179": "getUserTotalBalance(address,address,address)", +"80e4e1bf": "ReverseSupplyHasBeenInitilized()", +"80e4f5b2": "getHisRoundInfo()", +"80e51345": "saleIds(uint256)", +"80e52e3f": "revokeRole(address)", "80e52f31": "EtherCash1()", +"80e53814": "BetClaimed(uint8,uint256)", +"80e59f8d": "setRewardDistributor(address,bool)", +"80e5c5e2": "acceptRole()", "80e5d7b0": "Voted(uint256,uint256,uint256,bool,address)", "80e5e069": "ITO_TOKENS()", "80e64e8b": "buyBottle()", +"80e6791a": "batchReduceReserves(address[],address,uint256[])", "80e6bffb": "CalculateBankCredit()", +"80e6e0b9": "unstakeCatnipV2LP(uint256)", +"80e6ff09": "uniwines()", +"80e72f5c": "personhoodIndex(uint256,uint256)", +"80e73bde": "encodeStakeId(address,uint256,uint256,uint256)", "80e74b04": "testControlUpdateLatestRevisionEnforceRevisions()", +"80e7cd89": "deployTaxation()", +"80e7d3aa": "p2pAddrs(address)", +"80e81732": "setApyLimits(uint256,uint256)", "80e8b12a": "_createDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"80e8ffc3": "SetGlobalDelegation(address,address)", "80e9071b": "reclaim()", "80e9a1da": "STATUS_LENT()", "80e9e9e1": "getClaimIdsByTopic(uint256)", "80e9f98c": "getRacer(uint32,uint256)", +"80ea3de1": "setCooldownPeriod(uint256)", +"80ea5f8a": "dxdAddress()", "80ea8273": "SetBonus(uint256)", +"80eac704": "SolidStampContractChanged(address)", +"80eb1038": "check_lotto(uint256)", "80eb1cbc": "monsterIdToIVs(uint256,uint256)", "80eb6b7f": "LogRemTokenPairWhitelist(address,address)", "80ebb08e": "updateResult()", "80ebed20": "createBook(address,address,address,uint256,int8)", "80ec35ff": "awardByRndNo(uint256)", "80ec4a96": "CrowdsaleFinished(uint256)", +"80ecc02c": "phase_prod_Share(uint256,uint256)", +"80ecc3db": "farmMint(address,uint256,uint256)", +"80ed9076": "isInTopSmall(address)", "80ede329": "getDocumentDetails(uint256)", "80edef8e": "owner_address()", "80ee9792": "_ethDeposit()", "80ef353d": "tryClose(bytes32)", +"80efa080": "getMostPremiumStablecoin()", "80efa4af": "extBuyTokens(address,uint256,uint256)", +"80eff112": "CreateRepaymentType(bytes32,uint256,uint256)", "80f034b1": "getContractBytecode(string)", "80f03fa6": "getTotalPets()", "80f183ce": "visitCost()", "80f20363": "lockToken(uint256)", +"80f22ae1": "getAvailableTokens(address)", +"80f2955b": "withdrawAllEthV2(address)", "80f29894": "getWeiForCent(uint256)", +"80f2d312": "MyAdvancedToken(string,string)", +"80f2f169": "oce()", "80f2fa03": "getSellPrice(address)", +"80f34275": "addLastMCRData(uint64)", "80f34c14": "ContortedCoin()", "80f393c8": "ProofOfIdiot()", +"80f3d9d5": "bets(string)", +"80f3edcb": "createCandidateForUser(string,address)", "80f3f094": "setGGCAddress(address)", +"80f415cf": "calculateFundingCost(uint256,uint256,uint256,bytes32)", "80f41e76": "calcMintFee(uint256)", "80f4432a": "inception()", "80f4531f": "closeTimerElapsed()", "80f4ab5f": "seeMyNumbers()", "80f4bcb8": "tokenTeamAllocated()", +"80f4da8b": "setSanityRate(address)", "80f55605": "market()", "80f5a37c": "Crowdsale(address,address,address,uint256,uint256)", "80f5e0a1": "shouldBoost(bytes32)", +"80f5f907": "deposit4(address)", +"80f6ab86": "getAddressTokenSaleId(address)", "80f6c383": "setshares(uint256,address)", "80f6d782": "swapAddress()", +"80f7178f": "getRateForOffer(address)", +"80f76021": "getParent()", +"80f7b5c9": "lastTimeExecuted()", "80f7d0ab": "storeReading(uint256)", "80f7e238": "ANIMETOKEN()", +"80f821cc": "createSaleOBO(uint256,address,uint256)", "80f86009": "Initialize()", "80f89a31": "ballotNames(uint32)", "80f89bce": "distributeDRMK(address[],uint256,uint256)", +"80f8a04b": "_toBool(uint256)", +"80f8a883": "NewContributor(address,uint256)", "80f8d688": "redTeamAddress()", "80f8ea60": "Put_BRTH_GFT(address)", "80fa272f": "TokenWithMint(string,string,uint8,uint256)", @@ -73810,95 +135061,190 @@ "80fa7902": "getPlayersBattleStats(address)", "80fa7942": "tokensForReserve()", "80fa860f": "executeElectionMandate(uint256)", +"80faa57d": "lastTimeRewardApplicable()", +"80fab593": "WithdrawedStake(uint256,address,uint256)", +"80fafcde": "setBlockMilestoneByIndex(uint256,uint256)", +"80fb26e5": "finishChangePercentExecutor()", +"80fbe540": "encodeAverageRateInfo(uint256,uint256,uint256)", +"80fc0ddb": "addVestingSchedule(address,uint256,uint64,uint64,uint64,bool)", "80fc16c8": "setAffiliateFee(uint256)", +"80fc3ec5": "sm_profits(address)", +"80fc9c0e": "getRating(address)", +"80fce6a5": "addBearer(address,uint256)", +"80fd68d0": "setCheckInitialPeriodAndAmount(uint256,bool,uint256)", +"80fe39c8": "circuitBreaker(bool)", "80fe4958": "createBetWithPayable(bytes32,bytes32,bytes16,bytes32,uint256)", "80febdbd": "updateMe(string)", +"80fef294": "addLiquidityUniPool(uint256,address)", +"80ffaad4": "importAssets(uint256,uint256,bool)", +"80ffd68a": "RBFi()", "81001f3c": "collectFee(address[])", +"81005cc3": "calculateWithdrawFeePercent(uint256)", +"81008568": "beneficiary(address)", +"81009da4": "getPriceView(string,uint256)", +"8100a086": "returnStatus(address)", +"8101420a": "API_MarkValid(address,uint256)", +"810155c7": "regStarter(uint256)", +"81016318": "bountyUsers(uint256,uint256)", "810164f7": "getTotalBPOfAddress(address,address)", "81016509": "getBtcRequestHash(bytes,bytes,uint256)", +"81018b07": "CollateralNotTransfered(uint256)", +"810199b5": "haze()", +"81020e9a": "add(uint256,bytes32,address,string)", "8102387d": "burnRedRibbonCoin(uint256)", +"810257d1": "totalFrozenRate()", "81030e35": "ALAP()", +"810311a4": "closeFuturesContract(bytes32,uint256)", +"81034234": "allTimeMinted_()", "810405d6": "numOfPurchases()", "81042183": "ExpeditingToken()", "81045ead": "getIndex()", +"81052a04": "dexStatus()", "8105a6d7": "calculate_bond_token_to_bix_rate(uint256)", "8105aa55": "grantAdvisorTokens(address)", +"8105bc52": "IMP06()", "81064e2d": "getCreditorAmounts()", "8106d57a": "getCityPendingBuildings(uint256,uint256)", +"8106ee80": "execute(uint8,uint8,int128,int128,uint256)", "8107b269": "Novatore()", +"8107c3a8": "isRewardsActive()", +"81080115": "holderReferrer(address)", "81081184": "bursarPayOutNetContractBalance(address)", +"81083aca": "jackPotValue()", "8108592c": "calcKncStake(uint256)", "81086763": "placeNewBid(uint256)", "81086918": "delAcceptedToken(address)", +"8108e388": "LogRenExSettlementContractUpdated(address,address)", "8108e54c": "marketAllocation()", +"810900bb": "onTokenPurchase(address,uint256,uint256,uint256)", +"810941d2": "addressOfUsers(uint256)", +"810a1899": "initialize(address,address,address,address,address,uint256[4])", "810a192b": "transferCollateral(uint256)", "810a217f": "pValidationState()", "810a3919": "hard_limit()", "810a882f": "setConfigBytes(bytes32,bytes32)", "810ac3ce": "IssueOffer(address)", +"810ae16e": "HotWalletDeposit(address,uint256)", "810ba058": "Public_Sale_SUPPLY()", "810bbec3": "claimHelper()", "810be182": "_updateCountries(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "810c0af8": "depositTokenByAdmin(address,address,uint256)", "810c547a": "_rebase(uint256)", +"810c7d82": "zgetPlayers(uint256)", "810cbbd0": "bat_match(uint256[39])", "810cf6cb": "MRazaAnisTestCoin()", "810d54a0": "lockBalanceChanges()", +"810d912f": "MIN_TIER_3()", +"810e3953": "Send_With(uint256)", "810e4ff0": "cashOut(address,address,uint256)", "810e78ab": "declareIcoFinished()", "810e9720": "GlobalCoin()", +"810fc4b9": "querYrevenue()", +"810ff122": "__AccessControlGETV2_init()", +"81103b44": "withdrawFrom(address,string[],uint256[])", "81104666": "advisoryWithdraw()", +"811064e1": "addERC(address)", +"81118ea6": "finishPriceOracleChange()", +"81119bb9": "prePresaleTokensSold()", "8111e0ad": "updateMaxTxGasPrice(uint256)", "8111ecef": "FinalizeStage()", "8111f24e": "isFreezed(address)", "81120dd7": "myLastRef()", "8112821f": "EthVentures()", +"81129d1e": "userClaimProfitOptimized(uint64,uint256,uint256,uint8,bytes32,bytes32)", +"811322fb": "getEpochOffset(uint8)", +"811386d3": "stakeStats()", "8113e285": "withdrawTokenPayment()", +"8114e04b": "jgtokenfanyongjiantui()", +"811548dd": "gameAdmins(uint256,address)", "8115a2ac": "getOnMintTargetValue()", +"8115ba74": "activeDebtAuctions()", "8115f52d": "Evacuated(address)", +"81160fe3": "stakeRate()", +"8116a84c": "getAavePrices(address,address)", "8116c063": "claimOwnersEarnings()", +"811711c7": "addAToken(address,address)", "811743e7": "fighterIndexToOwner(uint256)", +"81176c20": "computeAddress(bytes,uint256)", +"81180b40": "upgradeDetails(uint256,uint256,uint256)", +"811833a8": "getCoverPeriod(uint256)", "81183633": "setStandard(bytes32)", +"811880d2": "TokensDeposited(address,bytes32,address,uint256)", +"8118dccc": "getMishapById(uint256,address)", "8118e0ae": "dtValidateWorldSnapshot(uint256)", "81193a30": "returnRequestCancel(uint256)", "81195993": "allocateEcoFundToken(address[],uint256[])", +"81196a9d": "groupByTeam(uint8)", +"81199d02": "callLogicContract(address)", "8119c065": "swap()", "8119f4ae": "getRoc(uint256)", "811a0a85": "saleComplete()", "811aecf4": "finishPhase()", +"811afd6d": "getColumnArticles()", "811b1268": "noteSale(address,uint256,uint256)", "811bab32": "GenesisCallerAddress()", +"811bdac4": "uintMaxB()", +"811c34d3": "transferFrom()", "811c626d": "changeIcoRoundEnding(uint256)", "811c66ac": "nameSuccessor(address)", +"811c7fe2": "kncToken()", +"811c8b4c": "getUnitByCode(uint32)", +"811d54dc": "addDevice(address,bool)", +"811dd0e2": "getArtist(uint256)", "811de206": "isConfirmedByOwners(uint256)", "811e1468": "computeAccount(uint256)", "811e4f71": "DisburseEarnings()", "811e539c": "campaign()", +"811e5fee": "StopStake()", "811ea6de": "transferToken(address,address,uint256,bool)", +"811eae5f": "govenors1(address)", "811f273d": "hasThreeYearWithdraw()", +"811f7faf": "redeemTrancheAToken(uint256,uint256)", +"811f8196": "_getInterestRateAndAmount2(uint256,uint256,uint256,bool)", +"811f8eaf": "userRewardPerToken3Paid(address)", +"811fc590": "swapUniswapProtocol(address,address,address,uint256,uint256)", +"811fd2cb": "getAllContract()", "811fe466": "beginTime_()", +"81203d03": "orderID()", +"8120580a": "setKTYburnAddress(address)", "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)", +"8124020e": "pendingBeer(address)", "812403f6": "bonusPhaseThreeDeadline()", "81240b9c": "subWithdrawFor(address,address)", +"81242403": "claim(uint48)", +"8124955c": "supplyFulcrum(uint256)", +"8124b78e": "clone(address)", "8124bb0f": "continueExecution()", +"8124bdd2": "transferBankRight(address)", +"8124ece1": "isAllowedWithdraw(uint256[])", +"8124fea6": "release(uint256,address)", "81252548": "getContractServerBlackWhiteListType(string)", "81252680": "getBaseQuick(bytes32)", +"81257bd5": "acceptOffer(uint256,uint256)", "8125c102": "BountySent(bytes32)", "8125c6fd": "_getDividendsBalance(address)", "8125ceb2": "showMessage()", "8125fc44": "thirdPreSaleEndDate()", +"812600df": "inc(uint256)", "81263fed": "getStrandCount()", "81267bd0": "_transferMeme(address,address,uint256)", "812699a9": "Quiricos()", "81269a18": "voteBalance(address)", "81269a56": "checkMintSolution(uint256,bytes32,bytes32,uint256)", +"8126b76e": "terminatorAmount()", "8126c38a": "allPunksAssigned()", "8126cb1e": "rejectRewards(uint256,string)", "8126e4e3": "philanthropise(string)", +"8126eac5": "confirmedGHTWithdrawal(uint256,address,address,uint256)", +"8126eb96": "nodeSlots(address,uint256)", +"8127a1af": "mintCardTOmain(address,uint256,string,uint256)", +"8127bcf2": "claim(uint256,bytes32,bytes)", +"8127db60": "r(uint256,uint256)", +"8127e801": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,address,bytes32)", "81281be8": "placeBid(address,uint256,uint256,uint256)", "81290a80": "AviciiCoin()", "8129212e": "getCommonInitBlockNum()", @@ -73906,41 +135252,73 @@ "8129aa75": "TransferFeeRateProposalAdded(uint256,address,uint256)", "8129fc1c": "initialize()", "812a4f47": "BeatTokenIcoPhase2Started()", +"812adb06": "set_new_AAVE(address)", +"812ae2c5": "geyserManager()", "812af8ec": "getAccountData()", +"812b02ee": "erc20Balance()", "812ba50c": "preEndBlock()", +"812c146c": "LIQLOCK()", "812c3251": "Escrow(address,address,uint256)", "812c86e0": "updateTokenContract(address,string)", +"812c8d5f": "school()", "812cbf38": "sellFci(uint256)", "812cddf2": "getSavedString()", "812cf740": "ArrayPractice()", +"812d3833": "upgradeAndCall(address,string,bytes)", "812d504d": "transferToOwner(address)", "812d6c40": "changePercent(uint256)", +"812db898": "sellScarcity(address,uint256,uint256)", +"812e0637": "unlockPublicSaleFund()", "812e1d1d": "APT(address)", +"812e526f": "mintTokenForClient(uint256,string,address,uint256)", "812e6741": "Mountain(bytes32,uint256,uint256,uint256,address)", "812ed5cc": "report(address,address,bytes)", +"812ef751": "mintAUTH6()", +"812f4d39": "transferMany(address,address,address[],uint256[])", "812f55c3": "get10Ads(uint256)", +"812f82d9": "createReputationToken(address,address)", "812fd5d7": "payToProvider(uint256,address)", "813051bc": "createGOP(address,string,uint256)", "8130c9b2": "untrustedTokenNumerator(uint256)", +"81312c3c": "getCryptoAccount(uint256,bytes32)", +"8132286b": "marketingFeeCollector()", "8132581c": "amountRaisedInEth()", +"81325e2a": "Destroy(address,uint256)", "8132e223": "internalSafeTransferFrom(address,address,uint256,bytes)", "81333d57": "LKB(uint256,string,string)", +"81336f6c": "maxBetsForEachRaz(uint256)", "8134064b": "setMotherCount(uint32)", +"81346582": "multiplierLookup(uint256,uint256)", +"8134d30d": "addLPToken(bytes32,address,uint8)", "81350bd4": "releaseTimeTeamAdvisorsPartners()", +"81353c8e": "initMarket(bytes)", "8135e137": "getPresciption(int256)", +"81363104": "buyBonds(uint256[])", "8136c1b9": "registerUserOnToken(string)", +"8136cf84": "authorize(string,uint256,address)", "8136f02d": "setAddressOfERC20OldToken(address,address)", "8136fd26": "createJob(string,uint256,uint256,address)", +"8138832e": "CancelERC20RewardPool(uint256)", +"8139142e": "pta(uint256)", +"81393e86": "update_storage_root(bytes32,bytes32)", "81395866": "numberOfAdmins()", "8139bc2f": "ecothereum()", "813a573a": "CheckPurchaseCount(address,uint32)", +"813ab210": "BOUNDARY_3()", +"813ad083": "nextTradeId()", "813b024f": "addProductInUsd(uint256,uint256,bytes32)", "813b65aa": "setNewCajutel(address)", +"813b7bfc": "UpdateValidOrgInfo(address,bool)", +"813bba99": "rightbrother(address)", "813d13cb": "getBB(bytes32)", +"813d2714": "changeDefaultRefID(uint256)", +"813d2ad8": "cancelSale(uint256,address)", +"813d2ce4": "getBooksByName(string)", "813d599f": "getValidatorAddress(int256)", "813d6c9a": "bonusPercentage()", "813d89e1": "artExplain()", "813df488": "preMinedFund()", +"813e241c": "fundsMovementProcess(address,address,uint256,uint8)", "813e7847": "withdrawalNormal()", "813e9aca": "init(address,uint256[],uint256,uint256,uint256,uint8)", "813f4db4": "isStakingPeriod()", @@ -73948,31 +135326,60 @@ "813f5717": "LinkRevenue()", "813faa53": "getVoteRulesOfProposalTransaction(uint256,uint256)", "813fdec8": "getContestStatusForDate(uint32)", +"81401289": "getExpirationAfter(uint256)", "8140ce63": "kvtOwner()", "8140d0dc": "setContact(string)", +"8141016e": "lockMultiplier(address)", "8141fd37": "tickRequiredLog()", +"81422d8a": "numTokensByType(uint256)", +"81423a26": "viewAppointation(address,uint256,address)", "8142453f": "_saveRequest(address,address,uint32)", +"814250a3": "TargetUpdated(address)", +"81426c7e": "ETHStart(address,uint256)", +"81427e45": "withdrawERC20Batch(address,address[])", "8142a25a": "testAliceFooSend()", "8142b8d7": "editGardener(uint256,uint256,uint256)", +"81433e63": "bulkMint(uint256,uint256)", +"81435bc2": "CheckAvailablePrints(uint256)", "8143e3da": "allBonus(address,uint256)", "8143eb2d": "gameOpened()", "8143f8a8": "totalGas(bytes)", "8144650a": "transferTokenTo(address,uint256)", +"81447999": "lottery_state()", "814487c4": "addSuperReferrer(address,uint8)", "8144ee2f": "adventureSettingContract()", +"81452c07": "infoRounds()", +"8145bd04": "rocket()", +"8145f6b9": "hal9kTokenAddress()", +"8145ff5c": "reportPlayer2(bytes32,uint8)", +"81462350": "evolution(uint256)", "8146f323": "isFinalised()", +"814784f6": "globalConstraintsRegisterPost(address)", "8147bcf7": "deletePlatform(bytes32)", +"8147de9d": "buyhappened(address,uint256)", +"8148644c": "setPigeonCosts(uint256[],uint256[])", "8148d2fe": "getNodeId(bytes32,bytes32)", "8149657b": "closeEthPool(uint256)", "814971de": "issueReward(uint256,uint256,uint256[],uint256)", "8149ea9b": "randomSkill()", +"8149f74d": "exitBoardroom()", +"814a39b8": "marketBuyCraneWithETH(address[],uint256)", +"814a59b3": "globalPayout()", "814a78f4": "KM(uint256,string,string)", +"814ab1bc": "basePrice5()", "814ab9f1": "salesSupply()", "814ae0ba": "gcf()", "814b3fe0": "dividends(uint256)", "814b53b0": "killCoin()", +"814ba557": "addAsset(bytes32,string,string,bool,bool,address)", +"814bdab5": "getEndpointCount(uint64)", +"814bdacf": "getDoubleReward()", "814c25fc": "setTokenInformation(bytes32,bytes32)", "814c2aa1": "changeTotalExchange(uint256)", +"814ca3ec": "buyBonus()", +"814d490b": "leggiBlockchain(uint256)", +"814db9ba": "startClaimerChange(address)", +"814dfc39": "wtrx()", "814e23c8": "calculatePayout(uint256,uint16)", "814e3bd3": "ContribToken(uint256,string,string)", "814e5c9b": "totalSaleAmount()", @@ -73981,58 +135388,99 @@ "814f737d": "phaseThreeEnd()", "814f9201": "payUserIncomingTransactionCommission(address)", "814fbd8f": "RefundBTC(string,uint256)", +"81505c05": "setRewardPerBlock(uint256,bool)", "81508615": "getBeneficiaryDevelop()", +"8150ebe1": "earnedRefer(address)", +"81513892": "mint(address,address,address,uint256)", +"81516a98": "setName3()", "81516c7b": "initialTIPsupply()", +"81524609": "amountOfTokenCanWithdraw(address)", "8152c7ed": "adminSetRandomInput(string)", "81531c64": "Strike()", "81547f25": "CONI()", "8154b57c": "secondsAfter()", "8154d4de": "setMarket(bytes32,bytes32)", "81550287": "PRESALE_CLOSING_TIME()", +"81551ffb": "userWithdrawCapitalOnCycle(uint256)", "81553709": "releaseEndTimeOfStage(address,uint256)", +"81558ef8": "setBMer(address,bool)", "815639ea": "read_u64()", "8156afdf": "Aletheia(address,address,address)", +"8156c6d8": "tokenCut()", +"81577959": "confirmDepositWithdrawalFromChain(uint256)", "8157d4b5": "bindContract(address)", "81580761": "getUniqueLineCount()", "815847df": "_addBonusOfReferrer(address,uint256)", "81584ff3": "CutieBitToken()", +"8158676e": "strategistReward()", "81587463": "sendTradeEvent(uint256[],address[])", +"8158baef": "nextRewardApplicableTime(address)", "81592aab": "instantUpdate()", +"81596ec6": "allocateFee(uint256)", "81597d0c": "mintIcedToken(address,uint256)", +"81597f73": "bonusRewardDuration()", "815a4876": "setEthereumWallet(address)", +"815a54e1": "_encode_sol_bytes31(bytes31,uint256,bytes)", "815bc7a0": "vote_reward_pool_amount()", "815c326d": "ProducerOperations()", +"815d16cb": "roundPrices(uint256)", "815d1fe5": "RewardChannel(address,address,address)", +"815d3871": "onChainSwap(address,address,uint256,uint256)", +"815d85d2": "rewardAndOpenNextDraw(bytes32,bytes32,bytes32)", +"815d9fa0": "getBatchStart(uint256)", "815dcd36": "dailyAccounting()", "815def1a": "changeAllocation(address,int256)", "815eb7c1": "satoeContract()", "815ec64a": "zReceiveFunds()", "815f73f0": "m_walletAddress()", +"815f90c6": "listRewardType(uint256)", +"815fa7b6": "adjustLevelExpiry(address,uint64,uint64)", +"815fed10": "icoLevel1()", +"81601496": "verifiedList(address)", "816036ae": "removeSmartContract(address)", "8160b246": "BONUS_TIER3()", +"8160e0f3": "_requireNonZeroAdjustment(uint256,uint256)", "8160f0b5": "minimumQuorum()", +"8160f290": "MinBuy()", "81613a62": "LogPause(bytes32)", "816163b1": "checkGameResult(bool)", "81617f8f": "reLoadXaddr(uint256,address)", "816194f8": "refreshVoteForAll()", "81619954": "DAOFactory(address,address,address)", +"8161b120": "owns(uint256)", "8161c5e5": "main_balance()", "8161dfa6": "EmailSent(address,uint256,string,string)", "8161f0e1": "execID()", "816273f6": "computeAmountBonus(uint256)", +"8162cc0d": "addTeam(uint256[11])", "8162de9c": "getCryptoAvatar(uint256)", "8162f631": "LogFunderInitialized(address,address,string,uint256,uint256)", +"81633b7a": "request(uint8,string,string)", "8163681e": "isValidSignature(address,bytes32,uint8,bytes32,bytes32)", "816413f8": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256,bytes)", "81641ff7": "casinoBank(address)", "81646be8": "setCloseTime(uint256,uint256)", +"8164c309": "addWhiteListAddress(address)", +"8164ce26": "setOracleTypes(uint256[],address[],bool[])", +"816501c7": "setProvider(bytes32,address,address)", "8165354e": "setOracleRegistry(address)", +"81653763": "SAFU_FEE()", "8165913d": "withdrawEthBalance(address,bytes)", +"8165a8a1": "setDeflationContractAddress(address)", +"81666796": "cobbDouglasAlphaNumerator()", +"816670f3": "removeTradingPair(address)", "81671042": "setOptionLibrary(address)", +"81671fe6": "MineCreated(uint256,string,uint256)", "81676ecd": "FGorToken()", +"8167af37": "addAssets(string,address,uint256)", "8167d996": "deAuthorize(address)", "8168b41e": "TokenTWL(uint256,string,string)", +"8169d10d": "getAddressLockInfo(address)", +"8169ef1b": "opP(uint256)", +"816a2b45": "buyTank2()", +"816a6316": "addAddressForDeduction(address)", "816a873f": "createMorePaymentChannelsInternal(uint256)", +"816b1e8f": "transferCollateral(address,uint256)", "816b6574": "LogCrowdsaleFinalized(bool)", "816bf490": "transferTokens(uint256,address[],address,address)", "816bff5f": "CIFCoin()", @@ -74041,16 +135489,21 @@ "816c76e3": "GoozeToken(uint256,string,uint8,string)", "816c7da4": "approveAllAndCall(address,bytes)", "816ca77c": "CollateralSeized(address,uint256)", +"816caed5": "setMinerReward(uint256)", "816d199c": "SIGMA_FTL_SPEED()", "816d3da9": "purchaseAdmin()", "816d3dc1": "get_info(address)", +"816d688a": "dropDividend()", "816dbae4": "monethaVault()", "816dcd91": "updateBitComparisonMask(bytes32)", "816e117c": "setMaxSize(uint256)", "816e24b0": "setupDeposits()", +"816ebcfe": "upRoleMinter(address)", "816ed336": "emitFeeSet(uint256,address)", +"816f113d": "miningAddressToStakingAddress()", "816f3438": "maxFoundationCapUSD()", "816f3f4d": "madKing()", +"816f5617": "pauseOnNextWave()", "816fceb7": "MultiTransaction(address,address[],uint256[])", "816ffbab": "Uint256Oracle(int256,uint256)", "81702c34": "refund_me()", @@ -74059,162 +135512,322 @@ "8171362a": "votingByXid(uint256,bool)", "81715d8c": "pIdIter_()", "817189df": "setEarlyLimits(uint256,uint256,uint256)", +"8171c407": "isValidHashSignature(bytes32,address,bytes)", +"8171c555": "getLastDripTime()", "817246cf": "setsalesdeadline(uint256)", "817287d0": "isOwnner(address)", +"8173293f": "_pushPoolShare(address,uint256)", "8173832a": "LogUnsortedOffer(uint256)", "8173b813": "setNumCities(uint256,uint256)", "8173e363": "hard_cap_wei()", +"81740336": "setPlayer(string,uint256)", "817472c0": "TOKEN_INIT(bytes32,bytes32,bytes32)", +"81747454": "renderTop3Team()", "8174b6d7": "ownerCutPercentage()", "81751312": "getAllCardsModifierPrimaryVal()", +"81751d5b": "_swap(uint256)", "81758fb4": "bohwa()", +"8175e65c": "setGoal(string,string,string,string)", +"8176292f": "executeTransaction(address,bytes32,bytes,uint256)", "8176419f": "SCCC(uint256,string,string)", "81767aed": "getIdentifiers(address)", +"8176b52f": "userDeposits(uint8)", +"81770f72": "approve_779(address,uint256)", "817725aa": "disableChangesMultitoken(uint256)", +"8177644c": "getSyntheticAggregator()", "81776ba4": "backup_refund(uint256,uint256)", "81777b78": "Take(bytes)", +"81779f38": "claimableReserve(address,address)", +"8177cf3c": "entranceHash(bytes32,address,uint256)", "8177ffae": "PresaleContract(address)", +"81781988": "B4(bytes)", "81788e2b": "addAllowedAddress(address)", "8178a943": "add_scribe(address)", "8178ab99": "_transferFromSenderPaysFee_byProxy(address,address,address,uint256)", +"8178d60a": "partialLiquidationUserReward(address,uint256,address,uint256)", +"81795268": "holdersIter(uint256)", "8179c2b3": "Result(uint256,address,uint256)", +"817a5e14": "myBalance(address)", +"817a6951": "removeRewardDistribution(uint256)", +"817ab89a": "KamiFund(uint256)", "817ad683": "XHO()", "817afff8": "_updateWithdrawCountry(uint256,uint256,uint256,uint256)", "817b106e": "setChangeIdentityNarcoRespect(uint256)", "817b1cd2": "totalStaked()", +"817b3084": "tokenNonces(address)", +"817b61c6": "adrop(address,uint256)", "817b90fe": "getCategoryId()", +"817bc0cb": "getAvailableShares()", +"817bf361": "setUniswapPairHORSEFLYROT(address)", +"817bf86d": "isEligibleAddress(address)", "817c1e52": "startICO(uint256,uint256,uint256,uint8)", +"817c5912": "Recover(address,uint256)", +"817c620d": "getInsurancePeriod()", "817c7483": "settleLeague()", +"817c8254": "e_participate_in_arbits_presale_fiat(address,uint256)", "817c8966": "getLevel(address)", +"817cfd8b": "withdrawGameIndex(address)", "817d62a4": "shouldGetHighFive()", +"817e1344": "shootTarget(uint256)", "817e8332": "STAKE_BONUS_RATIO()", "817e9d31": "setFactor(uint256)", "817eca0c": "ConstructByEth(uint256,uint256)", "817edbd2": "set(uint32,uint8)", "817f0023": "recievePayment(address)", "817f688f": "BLAAICOIN()", +"817fc614": "primaryTransfer(address,address,uint256,string)", +"81801b7d": "getUnstake(uint256,address)", +"818055e5": "DataEncerramento()", "81807a07": "calculateBonusAmount(uint256)", "818097c5": "getVotesForCandidate(address)", "8180f2fc": "approve(address,uint256,bytes32)", "81813963": "claimEDEX(address)", +"8181847c": "getTokensBalance()", "8181b029": "confirmImplChange(bytes32)", "818211f8": "getProposalsNum(address,uint256)", "8182173c": "PricesUpdated(address,uint256,uint256)", "81824d53": "setData_1(uint256)", +"8182aba6": "getDeterministicSellQuote(bytes32,address,address,uint256)", "8182c6a7": "IssueToken(string,string)", "81830593": "adminAddr()", +"8183ba99": "yourAGOUSDBalance(address)", +"8183e4d4": "MoneyDeposited(address,uint256)", "818438ca": "getWizzPandaQuotaOf(uint256)", +"818518d1": "transferViaSignature(address,address,uint256,uint256,uint256,uint256,bytes,uint8)", "8185402b": "buyAllAmount(address,uint256,address,uint256)", "8185b8e9": "getWeiPerCent()", +"8185de3c": "getPassiveInvestmentTimeStamp(uint256)", +"81860170": "setFeeRewardForwarder(address)", "81862f25": "newThreadComment(bytes32,bytes32,string)", +"81870e43": "cpoolOf(address)", +"81871056": "rewardWithHint(address,address)", +"81873ab7": "pendingHoney(uint256,address)", +"8187933a": "init(address,address,address,address,uint256,uint256,uint256,uint256)", +"8187f516": "setPair(address)", +"81883504": "LogPeriodStart(uint256)", "81884756": "citationCount()", +"81888268": "adminUpdateConfig(uint256,uint256,uint256,uint256,uint256,uint256)", "8188f71c": "holders()", +"8189122e": "hardworkerPath(address)", +"81894407": "calculateReportingFee(address,uint256)", "81895b73": "registry(bytes32,address,address)", "818a19b5": "FeeAddr1()", "818a4b48": "preSaleMinAmount()", +"818a8abe": "buyCredit(bytes32)", +"818a8ed7": "calcRewards()", +"818aa4df": "removeRunner(address)", +"818acb82": "getLastMCRPerc()", "818ad300": "TeamVesting(address,uint256,uint256)", +"818ae1ce": "userRewardPerSharePaid(address)", +"818b3d5d": "findFreeF2Referrer(address,uint8)", "818b4564": "DefineType(address,uint32,string)", +"818b47a7": "DEPRECATED()", "818c2858": "HPCToken(uint256,string,string)", "818c606f": "NewAuction(address,uint256,uint256,uint256,uint64,uint256)", +"818ca459": "setUniRouterAddr(address)", +"818ccd04": "ctn()", +"818cd102": "refuseContract(address)", "818d4b5d": "owns(address,uint256)", +"818d5232": "balancerCalcOutGivenIn(uint256,uint256,uint256,uint256,uint256,uint256)", +"818d573a": "decentralizeShare()", +"818e80b7": "withdrawFromLendingPlatform(uint8,address,uint256,uint256,bool)", "818e8cfa": "setLogoURL(string)", "818f7d01": "checkTransferFunctionPrivateSale(address,address,uint256)", "818f92c7": "createPurchaseOrder(address,uint256,uint256,bytes32)", +"818fb6a7": "CreateKOI(address,uint256)", "818fd7a1": "beforeBuy()", "81904676": "lastDistributedAmount()", +"8190611b": "allPizzaAmount(address)", +"8190c9c3": "bookHashesArbitrator(address)", "8190cf07": "setRate_ETHUSD(uint256)", +"8190d906": "tokenRegistrationMessageId(address)", +"81912443": "krkInContract()", +"8191490e": "uniswapWethExchangeAddress()", "81915a67": "EventSetContract(address,string,address)", "8191745f": "Description()", "8191ab45": "setUsdConversionRate(uint256)", "8191b9a2": "__tokenAndWalletBalancesMatch__(address,address,address)", "8191d30f": "crossForking()", +"81920133": "ZapOut(address,address,address,uint16,uint256,uint256)", "81923240": "mine(address)", "8192433f": "receiveTokenDeposit(address,address,uint256)", "8193327b": "test1Bob()", +"81935d40": "rentOutArea(uint8,uint8,uint8,uint8,uint256)", "8193844b": "linkIssuerName(bytes32)", "819384a2": "payoutToReferrer()", +"819427f4": "swapGovContract()", +"81946516": "slashEvents(uint256)", +"819497e2": "pairBuyPath(uint256)", "8194aff3": "Matchpool()", "8195031f": "Bitsta()", "819512cd": "buyTokens(address,uint256,address)", +"81955105": "shareToBalance(uint256)", +"8195aeaa": "createCompoundingStream(address,uint256,address,uint256,uint256,uint256,uint256)", +"8195fc5b": "issueReserveToken(address,uint256)", "81961946": "NETR()", "8196410b": "GustavoCoinCrowdsale(uint256,uint256,uint256,address)", +"8196a23b": "withdrawForTokenPair(address,address)", +"8196b3f7": "withdrawPoll(uint256[])", "8196b8c7": "getValueOrZero(bytes32)", "81980c27": "SOLOBOT()", "81981f7c": "getMyFranklin()", +"819826cf": "umiTokenAddr()", +"819854e7": "PROXY_ACTIONS()", "819891ac": "_newGroup(address,uint256)", "8198c2bd": "ICCCOIN()", "8198edbf": "getFeeRate(address)", +"81990b6a": "epochPrice(uint256)", +"81990fd9": "ContractPaused(address)", "819912a2": "setGame(address)", "819927e7": "transferUserTokensTo(address,address,uint256)", +"81995c7b": "NewTokenWallet(address,address)", +"819a712d": "SocialBIGANADOR()", +"819a8142": "mintRateMultiplier()", +"819a9398": "REWARD_DENOMINATOR()", "819abe80": "giveFreeUnit(address,uint16)", "819ad6d6": "EstimatedICOBonusAmount()", +"819ae230": "swapToBan(string,uint256)", "819b0293": "validPosition(uint256,uint256,address,uint256)", "819b25ba": "reserve(uint256)", +"819b48e3": "changeWithdrawalFee(uint256)", "819b9773": "PaymentAvailable(address,uint256)", +"819bcb9f": "mapOwnerOfMedal(uint256)", "819c5773": "withdrawForMany(address[])", +"819cdbd9": "createWrapperContract(address)", "819cfdf1": "YFTToken(uint256,string,string)", +"819dd39b": "setSign(string,string,string,int256,int256)", +"819e2d45": "stop(uint256,uint256,uint128)", "819e3903": "LogTrade(uint256,address,uint256,address)", +"819ed863": "_lender()", "819ee03a": "InterfaceId_ERC721()", "819f2494": "createOffer(uint64,uint256)", "819f255a": "is_passcode_correct(uint256,bytes32)", "819f5e24": "burnAndFinish()", "819f8927": "setMilestonesList(uint256[],uint256[],uint256[])", +"819faf7b": "aave()", "81a00361": "YONDcoin()", "81a03133": "authorizePayment(uint256)", +"81a06777": "createFaculty(string)", +"81a078d0": "getUserSigningKey()", "81a084fd": "remainingGasRefundPool()", +"81a093e3": "Lorem_ipsum_dolor_sit_amet_consectetur_adipiscing_elit()", "81a09bf0": "mergeMedal(uint256,uint256)", +"81a10569": "top_param()", +"81a10ae1": "pfc()", "81a1384b": "LockedVotingTokens()", +"81a16755": "user_commit(uint256,uint256)", +"81a19233": "testFn()", +"81a1afd7": "referrerId()", +"81a1b0e8": "getRequestedEventResult(string,string)", +"81a1f5c2": "drainLyn()", "81a1fa02": "itemsCounts()", "81a22b41": "PaymentsProcessed(address,uint256,uint256)", "81a22bee": "reservePart()", "81a238b5": "thirdWavePrice()", +"81a23e5f": "auditInterval()", +"81a24459": "isSupervisor(address)", "81a2568d": "setXToken(address)", +"81a278ec": "whatcost()", "81a2824f": "getUserBet()", "81a28c28": "isSecured()", +"81a293c1": "forK33perholders()", +"81a2c9f3": "yieldJunBestYield()", "81a33a6f": "bytesToUInt(bytes32)", +"81a34c5e": "NFTFactoryAddress()", +"81a37c18": "depositWithPermit(address,uint256,uint256,uint8,bytes32,bytes32,address)", "81a3b17f": "removeFace()", +"81a3c943": "grantKeys(address[],uint256[],address[])", "81a46662": "rolloverPercent()", +"81a47ba9": "fairLaunchPoolId()", +"81a48765": "requestVoucher_TKN_TKN_WithPermit(uint256,address,uint256,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "81a4af15": "rewardTokens(address,uint256)", +"81a51865": "configureDistrict(uint256,uint256[6],uint256[24],bool[24])", "81a5ad6d": "YamatoCoinCrowdSale()", "81a5e88b": "ICOCompleted(uint256)", "81a60c0d": "getResults(uint256)", +"81a68f03": "OnStartOfCrowdsaleSet(uint256,uint256)", +"81a6b250": "burnToEther(address,uint256)", "81a73ad5": "getTokenSymbol(address)", "81a752ef": "removeSdaContract()", +"81a761d1": "approve_162(address,uint256)", "81a7a503": "ActiveProposalNum()", "81a7ac54": "MAX_PERCENT_OF_SALE()", +"81a7c627": "getDwellerId(address)", +"81a7ccf0": "totalMineFunding(address)", +"81a7d6fc": "sashimiswapToken(address)", +"81a8adfb": "clearAnchor()", "81a8e78a": "getGalaxies()", "81a955b0": "editInfo(uint256,bytes)", +"81a95c13": "acceptSlate(uint256)", +"81a9dab3": "setSysman(address)", "81aa5067": "addLockedAccount(address,uint256,uint256)", +"81aa8958": "_cakeToBunnyBNBFlip(uint256)", "81aa8a4b": "pre_PRICE()", +"81ab5b0e": "addAddressToGovernanceContract(address)", "81abb800": "lengthOfKeys(uint256,uint256)", +"81abd47c": "blockPair(address,bool)", +"81ac1995": "stopFsm(address,address,address,bytes32,uint256)", +"81ac1a4e": "tokenBuyersContributed(address)", +"81ac214d": "milkShake()", +"81ac6193": "viewPublicWrappingRatio()", "81ac9b93": "AuctionCancelled(address,uint256,address)", "81accd0b": "create(bytes1,bytes32,bytes32)", +"81ad298a": "getOfferCount(uint256)", +"81ad40c6": "createBPTStakingPool(address,address)", "81add559": "partners()", "81ade307": "query(string,string)", +"81ae00a0": "setReceiptLiablity(address)", +"81ae1f5b": "getDeploymentAddress(uint256,address)", "81ae20b2": "setInvestorsBatchSize(uint256)", "81aea668": "atNow()", "81aee4f4": "getNoteDesignatedReport()", "81af0750": "Simt()", +"81af8191": "targetPrice(uint256)", "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()", +"81b0bb9c": "updateLevel2(bytes2,bytes3,bytes4)", +"81b10bc7": "reservesContains(uint256,uint256)", +"81b1c399": "setPriceSecond(uint256)", "81b1c6bb": "getWinLoseAmountByBettingIdInGamblingParty(uint256,uint256)", +"81b1c820": "minimumRebalanceInterval()", +"81b2248a": "modules(uint256)", "81b23042": "burnMonster(uint64)", +"81b235e7": "ChangeBurningAmountPerUser(uint256)", +"81b23b93": "removeTokenEmergencies()", +"81b26dda": "getUserCredits(address)", "81b2d07b": "showBalance()", "81b2dad9": "setByeSayer(address,bool)", "81b3171c": "extGoalReached()", "81b31cec": "setNextCommonTTWTokenId2(uint64)", +"81b34f15": "send(uint256,address,uint256)", +"81b39e49": "createMasterpiece(string,string,uint256)", +"81b3cd94": "transferOutCash(uint256,uint256)", "81b3ea13": "getResponseError(uint256)", +"81b50da6": "eTokenClaim(address,uint256)", +"81b53258": "createTradingPool(address,uint256,uint256,bytes32,bytes32,bytes)", "81b54498": "seedStartTime()", +"81b5a89e": "deployVersionB()", +"81b60ebc": "artistBreedingPercentage()", +"81b659d2": "setRateMantissa(uint256)", "81b69494": "fee_ratio()", "81b72d88": "startRequest_callback()", "81b736e9": "createChild(uint256,address)", +"81b797dc": "withdrawMyDepositedSynths()", "81b7c6e7": "stop_it()", "81b7f157": "_updateSpendAvailable()", "81b890fc": "setName(uint256,bytes16)", +"81b894b4": "crowdFunding(uint256)", +"81b91174": "getValidatorRewardAddress(address)", "81b93757": "ADEVA()", +"81b94280": "EXCHANGE_WETH_ADDRESS()", +"81b9c84f": "AccountUnblockedEvent(address)", +"81ba02be": "updateLeader(string,string)", +"81ba853e": "_buytuna(uint256)", +"81baab24": "cutieIdToAuction(uint40)", +"81bac14f": "bind(address)", "81baf3ab": "sendTokens(address[],uint256[],address)", "81baf55e": "processBuyRequest(string,address,uint256,uint256)", "81baf820": "BlockScheduler(address)", @@ -74223,36 +135836,73 @@ "81bb59bf": "goodsNotOK(uint256)", "81bb73af": "signArchive(bytes32,string)", "81bb9470": "DNCEQUITY()", +"81bbdf8b": "setY0(address,address)", +"81bc2549": "set_get_length(uint256)", "81bc3657": "migrateSinglePlanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", "81bc50ef": "getBUA(bytes32,uint256)", +"81bc6fcc": "addListOfHolders(address[])", "81bc8742": "BCToken(uint256,string,string)", "81bd24d1": "revertTest()", +"81bd5cd7": "increaseWeight(address,address,uint256,uint256)", "81bd66fe": "upgradeMeAdmin(address)", "81bdc78d": "getProposalAmount(uint16,uint16)", +"81bdf98c": "burnAdmin()", "81bf1cff": "ThailandVsMyanmar()", +"81bf4718": "currentAddress()", +"81bfb885": "observationLength(address)", +"81bfded4": "proxyPing(address,string)", +"81c06ec3": "swapUniswapProtocol(address,address[],uint256,uint256,address)", +"81c0828e": "porter()", +"81c08bed": "ReferralBonusMinted(address,uint256)", +"81c0a17c": "get_recommender_cond()", +"81c0b1f0": "setLimitPerAddress(uint256)", +"81c0c263": "renounceGovernorship()", "81c0ddc3": "villageinfo(uint256)", +"81c0ebe3": "ethRebBlockTimestampLast()", "81c1346d": "setFundsCreditDaoAddress(address)", +"81c15677": "isWithdrawnSubRoundNLF(uint256,address,uint256)", +"81c197ed": "withdraw(uint256[],uint256[])", +"81c210f8": "getReserveManager()", +"81c22881": "string_()", "81c2d4b6": "freeToken()", "81c2d875": "getConsensusRules()", +"81c33caa": "place(address,bytes32,uint256,bytes32[])", "81c385b5": "safeWithdrawEther()", +"81c39bec": "totalLockedShares()", "81c405c6": "registerCustomer(address,address,bytes32,uint256)", +"81c44b5c": "getLoan(address,bytes32)", +"81c46d33": "AddressToShortCode(address)", "81c485e7": "getDiscipleSale(uint256)", "81c4e1c8": "User(address,address,address)", "81c56dfb": "d27d7bad()", "81c59c8d": "getStrategyTokenCount(uint256)", "81c5b206": "addMeToGame(uint256)", +"81c5e03b": "changeDailyLimit(address,uint256)", +"81c61090": "swapped(address)", "81c648e2": "betYours()", "81c64ea2": "SixPlayerRoulette()", +"81c65884": "voteResult(uint256)", +"81c6dac2": "service_registry()", "81c70870": "ClientUpdated(address,address)", "81c79fd5": "transferMerchantProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", "81c7ae3b": "miningEveryDay()", "81c8149d": "timeOfLastProof()", "81c81cdc": "setContractStatus(address,bool)", +"81c82233": "setTransferAmount(uint256)", +"81c8335b": "getMinimumTimeForNextExecution()", "81c8b563": "coinLockRemove(address)", +"81c8d895": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE()", "81c92486": "ProcessRooms()", +"81c94500": "getLogConfirmations(uint256)", "81c9786c": "administratorsLength()", +"81c9791c": "refund_contract_rxp_value()", +"81c9a114": "getDaysPassedBetweenDates(uint256,uint256)", "81ca3ea1": "hasEitherAttribute(address,bytes32,bytes32)", +"81caf6ee": "_preference(address)", "81cb79ca": "createEmptyTrack(uint256)", +"81cb9bbe": "avgFeesPerSecondTotal()", +"81cbba82": "randomGen()", +"81cbd203": "cardTypesOwned(address,uint256)", "81cbeaf0": "getValidated(address,address,uint256)", "81cc49dd": "secondLoos()", "81ccb678": "Confiscate(address,uint256)", @@ -74261,51 +135911,88 @@ "81cd4570": "Moneytoken()", "81cd5eec": "bonusPot()", "81cd8194": "transferPrice()", +"81cd832d": "sendMoneyToUser(address,uint256)", "81cd872a": "deals(bytes32)", +"81cd8a57": "execCompletedMessageBytesLength()", "81cda317": "MINTING_HARDCAP()", "81cde1a9": "GOOD_ERC20()", +"81ce3eba": "setBuyerRewardDandy(uint256)", "81ce7184": "TestText()", "81cebf7e": "vestingPaid()", "81cedafc": "Nodalblock()", +"81cf28f5": "setTriggerAddress(address,bool)", "81cf7fef": "registerSmartID(string,string,string,bool,bool)", "81d01ed3": "p2()", +"81d11eaf": "bondDepletionFloorPercent()", "81d12c58": "requests(uint256)", "81d136cb": "presaleAllocation()", +"81d14619": "requestToUnpool()", "81d16e0d": "_isDiamondVerified(string)", +"81d20caa": "OfferGameList(address,uint256)", "81d2c871": "SetMinFee(uint256)", "81d2fd9c": "setFaucetAmount(uint256)", "81d36f4e": "KEVINTOKEN()", +"81d38568": "maxStakingAmountPerUser()", "81d38ada": "Remove_member(address,address)", "81d38f2d": "SheetMusic(address)", "81d3c435": "setAddresses(address)", +"81d3f0d2": "addAirdropCifi(uint256)", "81d434e9": "transferToICAP(string,uint256)", "81d44053": "reading_length()", "81d45a5c": "isPreICOPublicClosed()", +"81d4b862": "setSNT(address)", "81d5e753": "CuratedWithWarnings(address[],address,address[],address[])", +"81d60b64": "addCashback(address,uint256)", +"81d67874": "cancelRequest(uint256,uint256,uint256)", "81d693be": "claimDay(uint16)", "81d6c866": "harvestabledivs()", +"81d7284d": "botlimit()", +"81d73423": "sumArray()", +"81d760ae": "subFromTotalSumAssuredSC(address,bytes4,uint256)", "81d77862": "newMostInviter_()", +"81d802ba": "changeOwner(uint64,address)", +"81d82f67": "_onBoardDAI()", +"81d838e5": "registerCode(bytes)", +"81d86aa9": "_completedAmount()", "81d92ed4": "shp()", "81d96005": "sigDestinationTransfer()", "81d961e4": "eligible(uint256,uint256)", "81d97051": "setOwnerOne(address)", +"81d97d7e": "_hasRole(bytes32)", +"81d9816b": "newCommissionIndex()", "81d9c5e4": "handleIncomingPayment(address)", +"81daf933": "ContractUpgraded(address,address,uint256)", "81dafe0e": "calculateDuration(uint256)", +"81db4147": "propertyDetails(uint256)", "81db6c28": "redeemVoucher(uint256,address,address[],uint256)", +"81dc064b": "approvePayout(uint256,address)", +"81dc101b": "logJailed(uint256,uint256,address)", +"81dc5361": "swapList(bytes32)", "81dc66f4": "checkTankAuction(uint256)", +"81dc8119": "getPromiseKey(uint256)", "81dca05c": "setAuthorization(address,address,bool)", "81dd70db": "kickoffQuorumPercent()", +"81ddc60d": "transferDev()", "81de10e2": "getContentAt(uint256)", "81ded5b8": "numOfConfirmationNeeded()", +"81dedc92": "managerArray(uint256)", "81df464f": "totalRaisedIco()", "81df893c": "withdrawMon(uint64)", +"81e0ab60": "Birth(address,uint256,uint256,uint8,uint8)", +"81e12bc4": "creditProfilesLength()", +"81e16298": "notifyRewardAmount(address)", +"81e170de": "lastPayment()", "81e1ccba": "stakingPercentage()", "81e2ef3a": "ReceivedETH(address,uint256,uint256)", +"81e4b05e": "_locked_balances(address)", +"81e4d40c": "addressToTotalEtherSpent(address)", "81e529cd": "setOwnerFreeDay(uint256)", "81e559ae": "clientKeys(uint256,uint256)", +"81e625ff": "createVestingBulk(address[],uint256[],uint256[],bool[])", "81e69eff": "publishMetaData(bytes32)", "81e6c686": "returnMaxGoal(uint256)", "81e6e083": "getLifetime()", +"81e729f6": "sendRejoinAndMatchingBonusPotofgold3(address,address)", "81e75dd0": "testPublicBuy()", "81e7645f": "findFigures(uint256,uint256)", "81e77878": "getChooses()", @@ -74313,259 +136000,443 @@ "81e7e20e": "user(address)", "81e7e329": "test_6_accessRestriction_removeMember_shouldThrow()", "81e83991": "howMuchInEscrow()", +"81e864d2": "_totalStaking()", "81e8927b": "getValidationsCount()", "81e8a1f7": "newRandomByte(bytes)", "81e9abef": "_updateEarnedBy(uint256,uint256)", "81ea4408": "getCodeHash(address)", +"81ea4ea6": "addAffiliate(address)", "81ea6834": "getEvilMortyAddress()", +"81ea68fe": "getRecordIndexLengthForGroupMembersIndexerByDepositor(address)", "81eac2ee": "checkClientFunds(address)", +"81eaf873": "getUserWithdrawnBonus(address)", "81eaf99b": "lockSupply()", "81eb3e01": "setValueStep1(uint256)", +"81ebb30e": "augurFoundry()", "81ebd8de": "setDeveloperStatus(address,address,bool)", "81ebdeea": "testThrowCreateWithNonceRetracted()", "81ec792d": "getPackSummary(uint256)", +"81ed0056": "RaisedWeiClaimed(address,address,uint256)", "81ed8680": "pingTimestamp()", "81edaae4": "serviceFee(address,uint256)", "81edc308": "insertAndApprove(uint256,address[],uint256[])", +"81ee77c3": "userLpLimit()", +"81ef1206": "minPurchaseValueForBonus()", "81ef1b18": "startFundraising()", "81ef93ae": "lastFueledFundingID()", "81efc01d": "withdrawHouseStake(uint256)", +"81efd24a": "swapExactAmountOutRefer(address,uint256,address,uint256,uint256,address)", +"81efd708": "numberOfCards()", +"81f03fcb": "paidOut(address)", "81f0c440": "MikeChanCoin()", +"81f0eefe": "getVoterReward(address)", +"81f19aa8": "accLandPerShare()", "81f1a41b": "CROWD_SUPPLY()", "81f1aad7": "setCancelApproveFee(uint256)", "81f1d75c": "updateUserEmail(address,bytes32)", "81f1f92a": "withdrawSoftwareProductDevelopment()", "81f1fa93": "RKCAcquired(address,uint256,uint256)", +"81f237b8": "medal()", "81f2a3f1": "GetDownTickPrice(uint256)", "81f2d44c": "getStarIdAtPosition(uint8,uint8,uint16)", "81f2d4ee": "updatePartner2_will(string)", "81f3e897": "getSettingData(uint256)", +"81f42261": "getRefNumber(bytes32)", +"81f4f399": "transfernewun(address)", "81f4f9bf": "ticketHolder()", +"81f58490": "liquidationMultiVote(uint256,uint256,uint256,uint256)", "81f59f51": "shareService(bytes32,address)", "81f5f75c": "getApprovedProxies()", "81f65883": "CompetitionStore()", +"81f65bfa": "transferHyfiOwnership(address)", +"81f6736e": "ghostPoolAddress()", +"81f6be82": "leaseByNftTypeAssetId(string,uint256)", "81f6bf7d": "deleteCertificate(string)", "81f6c7e5": "_release(uint256)", +"81f79885": "balanceList(address,address)", "81f799e2": "reveal_end_time()", +"81f7edc9": "sendescrow(address,bytes32,uint256)", "81f86241": "ExGirlfriendCoin()", "81f8658a": "DATE_OPEN_ON_FLOOR()", "81f87d6d": "deleteCandidateCache(address)", "81f8a6f7": "checkTokenSupported(address)", "81f8b722": "LogIncomeAllocation(address,uint256)", +"81f8c389": "batchMintTokenDirect(address[],uint256[])", "81f91c4a": "transfer(address,bytes32[8])", +"81fa2cd5": "_firstRewardPeriod()", +"81fa34fc": "bts()", +"81fa5431": "increaseTotal(uint256)", +"81fa561a": "endRewardBlock()", "81fab567": "maxPayments()", "81fb1fb4": "participants(uint256,uint256)", "81fb2585": "isOfficial(uint16)", "81fb3803": "einzahlen()", +"81fb3f06": "lpUnlockStartTimestamp()", +"81fb7ccd": "mintTokenByMinter(address,uint256)", "81fbc084": "mul27(uint256,uint256)", "81fbf0a5": "totSupply()", "81fbffe1": "getGiftoAddress()", +"81fc160e": "pack(uint32,uint16,uint32)", +"81fc1841": "enterPosition(address,uint256)", +"81fc1a89": "removeBonusToken(uint256)", "81fc4d90": "increaseLockAmount(bytes32,uint256)", "81fc7f2b": "accountFrozenStatus(address)", +"81fc83bb": "userPointEpoch(address)", +"81fc8648": "logBytes31(bytes31)", +"81fc8bed": "distStarted()", +"81fccf80": "sTota()", "81fcef3c": "bitcoinContract()", "81fcfbcc": "allocateBountyTokens()", +"81fd3f0b": "sendFundsToSwap(uint256)", "81fd552f": "storageOwner()", "81fd63c2": "kanaabbcwalletcoin()", +"81fd6a16": "onAddDividend(address,uint256,uint256)", "81fdbeff": "TransferCoinsFrom(address,address,uint256)", +"81fdec27": "rebalanceEnabled()", +"81fe2280": "getUnderlyingAddr(address)", "81fe5786": "max(int256,int256)", "81fedc73": "Casinowo(uint256,string,uint8,string)", "81feed27": "awardName(uint8)", "81ff01f7": "REPOPCore()", +"81ff43da": "dailyInvestments()", "81ff4d0b": "TEAM_TOKENS()", "81ffdfab": "getTokenAmountForCampaign(bytes32)", "82004053": "ownerSetZlotsAddress(address)", "8200a57f": "changeOwner(address,address,bool,bytes)", +"8201aa3f": "swapExactAmountIn(address,uint256,address,uint256,uint256)", "8201ff14": "setNewTerrain(uint256,uint256,bytes32)", "820203a3": "ztx()", "82023707": "updateSecondUnionIds(bytes32,bytes32)", "82024a14": "PromissoryToken(address,uint256)", "820267ff": "diminishPool(uint256)", +"82027002": "getFullReserves(address,address)", "82027b6d": "isAllowed(bytes32,address)", +"820283b9": "buyFromBalancerBasic(address,address,uint256)", +"8202ac0b": "getBuyTokensLimit()", +"82031137": "changeTraderToOperator(address,address)", +"82032d8e": "auctionFeeTo()", "820333a2": "seeAddress()", +"8203373a": "addVoters(address[])", +"82034b11": "LOG_WithdrawWei(address,address,uint256,uint8)", +"82037e44": "batchAllowlisted(address[],address[])", +"82039258": "pledge(bytes32,uint256)", +"8203e380": "plan_completed_p4()", "8203e7f3": "justSendDonations()", "8203f5fe": "initContract()", "82043443": "transfer_(uint256,address,address,uint256)", "820447fc": "TrimpoToken(uint256,string,string,address,address,address)", +"820466f2": "getUSDPPriceForCALETAS()", "8204ecdd": "getFee(bytes)", "820537b7": "getDaoists()", +"820540b4": "set_decider(address)", +"8205bf6a": "latestTimestamp()", "8205e8e7": "setPayment(uint256,uint256,bool,address)", +"8205f25a": "getAccountLoans(address)", +"82065cfd": "setNewERC20(address)", "82067cc0": "pauseRoundB()", +"8206909f": "UpgradeController(address,address,address)", +"8206a4d1": "setFeeProtocol(uint8,uint8)", "8206ba89": "MAX_STAGE_2_LIMIT()", "82076979": "TeamTokenHolder(address,address,address)", "820776de": "DivsToRefundpot()", +"820787a5": "sliceOverflowLength1Throw()", "8207b07d": "lastPurchasePrice()", +"82088e9a": "calcPayoutRewardsBonusDays(uint256,uint256,uint256)", "8208921d": "getWalletFor(address)", "8208df23": "stack(address,uint256,uint256)", "820935dd": "HDILToken()", "82094fa4": "setAddressAdmin(address)", "8209b38a": "Freecoins24()", "8209d121": "a_viewSellOffersAtExchangeMacroansy(address,bool)", +"8209d354": "setOpenDeposit(bool)", +"820a22c0": "setEpochData(uint128,uint64,uint64,uint256)", +"820a5b19": "getUriSetById(uint256)", "820a5f50": "fundedAmount()", +"820b3039": "uniswapPriceCumulativeLast()", "820b9f1e": "kncPerETHRate()", +"820be89e": "totalTokensReleased(address)", "820bec9d": "receivedETH()", "820c05db": "FPINCOIN(uint256,string,string)", +"820c0d0d": "approvedVoteBox(address)", "820c1dd0": "pollBurnQtyMax()", "820c59bb": "GetIsPauded()", "820c7468": "isVendorOf(address,address)", "820c815e": "EGGS_TO_HATCH_1DINO()", "820cfa06": "LogUserRemoved(address)", +"820d0448": "GETcollector()", +"820d1274": "setLendingRateOracle(address)", +"820d364b": "MetaTxRelayed(address,address)", "820dc540": "lockBalanceIndividual(address,uint256)", "820e0d1f": "getChallenger(bytes32)", +"820e0fb2": "addi(address,uint256)", +"820e357c": "GetStaticProfitTotalAmount()", "820e5e0b": "DividendRecycled(address,uint256,uint256,uint256,uint256)", "820e79ed": "cstBalanceLimit()", +"820e8522": "initialize(address[4],uint256[12],bytes)", "820e93f5": "email()", +"820eaf9b": "gasPrice(address)", "820ecdaf": "iou_purchased(address)", +"820f0fb5": "toRay(uint256)", "820f52bc": "validPeriods()", "820f9b85": "changeBetRange(uint256)", +"820ff19f": "boostx8()", "82100be6": "getWinningPayoutDistributionHash()", "82100e3f": "deploymentBlock()", "82104786": "Profit1000()", "8210f13b": "BatchCancelSales(uint256[])", "82123075": "safeExit()", "82123cd2": "prizeReferee()", +"8213a2b4": "RebatePayment(address,uint256)", "8213dafc": "setupAirDrop(bool,uint256,uint256)", +"82141ec0": "addReserveToListInternal(address)", "82142370": "preICO(address)", "82147bb4": "getGuardianNum()", "8214fe03": "setMetadataChannels(string,string)", +"821530bf": "lastAssignTime()", "82154075": "Rentable()", +"821590fd": "confirmConsensus(uint256)", "8215c35d": "bincentiveErrand()", "821648f4": "accessHolder(address)", "8216ed6c": "getCompte_22()", "82173d11": "KentKoinToken()", +"8217aad6": "setdTrade(address)", +"8217abac": "c1Address()", +"8217c64a": "autoPoolDistPercent(uint256)", +"82182ab9": "updateUserTokenRecipient(address,address)", +"821856ea": "getSpeed()", "82189551": "buy(uint256,bytes)", +"8218a8e9": "tradeEtherForTokenWithFeeOnTransferUsingEtherizer(address,uint256,uint256,uint256,uint256)", "8218e540": "insertHash(uint16,uint8,uint8,string)", +"82191526": "dev_e(uint256)", "821919fd": "getPetCanPresellCount()", +"82196327": "boardroomAddress()", +"8219a958": "setPlatformFundsWallet(address)", "821b771f": "targetBondingRate()", +"821b7d18": "namehashFinalized(bytes32)", +"821b90a1": "lotteryHistory(address)", "821b98f3": "closeTheoreticalClosedAuction(address,address,uint256)", "821bee73": "vestings(uint256)", +"821c7f34": "mkrRmul(uint256,uint256)", "821c9a57": "test_testableStandardCampaignRefund()", "821d7356": "setMainnetLocked(bool)", +"821daba1": "betBull()", "821e2491": "MyBetting()", "821e3759": "payDivsValue(uint256)", "821e4496": "isVerifiedCode(address,bytes32)", +"821e6415": "setNewPairAddr(address)", +"821e76d8": "setATokenMapping(address,bool)", "821e9169": "testFailControllerChargeMoreThanApproved()", "821f830f": "addPack(address)", +"821f9dc9": "_projects(uint256)", "82202a15": "fetchCurrentSnapshotBlockIndex()", +"82209468": "updateCompoundAndWithdraw(uint256,bool)", "8220e945": "FactoryChangedEvent(address)", +"8220ef5b": "vaults()", +"82213dad": "totalIncomingFund()", +"82215cb1": "__symbol()", "8221ac6f": "_createHolderId(address)", +"8221f029": "dailyLimitPackage(uint8)", "822221a6": "setContractToken(address,address)", "82222674": "changeEndBlock(uint256)", +"822283b4": "getCurrentSong()", +"822294ce": "_pullPoolShare(address,uint256)", "822296d4": "isList()", "8222a5ce": "insurance_Token()", "8222aa1e": "settle(address,uint64,uint64,bytes)", "8222b7e9": "getBonusPercentage()", +"8222e88b": "gettAddressList()", +"8222f07d": "senderWhitelist(address)", "8223188c": "Rose43()", "82233b7a": "returnHostCut(uint256)", +"82241080": "earlyRedemption()", +"82245461": "founderDeveloperWhitelistMember(address,bool)", "8224b76b": "StartOK()", "8224ca2b": "SaleEDUSupply()", +"8224f93e": "exitCoin(address,uint256)", "82251512": "divCeil(uint256,uint256)", "8225172f": "getVowInfo(bytes32)", "82251b99": "DRONECOIN()", +"82256fe6": "upPermit_(string,address,address,address,uint256,uint256,uint8,bytes32,bytes32)", "8225757b": "getAddressByUserId(uint256)", +"8225af80": "registerName(string,bytes32)", +"8225cd19": "TOKEN_PRICE_FLOOR()", +"8226447f": "_idrewards(uint256)", "822785e4": "_setTokenDescription(address,uint256,string)", "82281104": "incise(uint256)", "82286755": "MyRefundableCrowdsale(uint256)", "82288e89": "setAccountIsNotFrozen(address,bool)", +"8228d3ef": "nyanVotes(address)", "8229268b": "StageThreeDisable()", "822942aa": "placeDeal(bytes16,address,address,uint256)", +"82296939": "groupTransfer(address[],uint256[])", +"8229aa20": "AdmindUnlockStaking()", +"822a03bd": "providerLastClaimTime(address)", "822a46ae": "setTiimPrivateSaleAddress(address)", +"822abc7c": "TRANSFER_LISTENER()", +"822abf42": "arAsset_latitude(uint256)", "822b08d0": "grantManagerPermission(address,string)", "822b0be3": "teamTimeLock1()", "822b1747": "_getEpicPlusRarity(uint32)", +"822b662d": "voteAppUpgrade(address,address,bool,uint256)", +"822b7fc2": "my_wallet()", "822bd0dd": "BOT_ELEMENT_3()", +"822c43c5": "RedemptionIntentConfirmed(bytes32,bytes32,address,address,uint256,uint256,uint256)", "822c7671": "testControllerShouldBeSet()", +"822c9900": "getBasicLoanData(bytes32,address)", "822cba69": "setUint64(uint64)", "822d487d": "getBrands()", +"822d82b3": "guardian_set_index()", "822d9b4e": "onlyOwnerGetBountyWallet()", "822daf60": "timeFactor()", +"822df28f": "mintMultiple(uint256,uint256)", +"822e0ef9": "lastpaidslot()", "822e1506": "_bonusRatio2()", "822e57f1": "depositHelper(uint256)", +"822eccb4": "cardHolder(uint32,uint256)", "822ee26c": "canMovetoken()", "822f31e2": "AlexCoin()", "822f7eb4": "setFeeReceAccount(address)", +"822fbf58": "names(string)", +"82301ba3": "PaidRefBalance(address,uint256)", +"8230c5eb": "spin(bytes32,uint8,bytes32,bytes32)", +"8230d02d": "MODULE_LIQUIDITY()", "823113c7": "thresholdsByState(uint256)", "82311e25": "checkStage1Over()", "823126d5": "_createToken(address,uint256)", +"82313678": "totalCdcPurchaseV()", +"8231eb97": "m_Total_Stacking()", "8231ee98": "lastTimeGen0()", +"8231faa7": "tokenHolderExist(address)", "823213ef": "removeExclusiveRate(address)", +"8232830a": "svg_data(uint256)", "823287b7": "chargeQuarterlyRate(bytes32,address)", "8232e09e": "DeleteUser(address,address)", +"8232e389": "batches(uint64)", "82330505": "setCommissionPoints(uint256,int256)", +"82335107": "withdrawsmInvest()", "823374e3": "changeDedicatedProxy(address)", +"8233c275": "checkNotDelegateCall()", "8233fbcb": "getTotalProfit(address)", "82348bab": "setMinSlippageFactor(uint256)", +"823495f0": "getLotCutieRewardCount(uint32)", +"8234b7bb": "mockVoterWeight(address,uint64)", "823506af": "getData_29()", "82351b43": "getLinearRelease()", "82357105": "bl()", +"82357892": "CONTRACT_PET_BASE()", +"8236267c": "addOwnerShip(address)", +"82362fa3": "Convert(uint256,uint256)", "8236342c": "hashToPoint(bytes32)", "82367b2d": "updatePrice(uint256,uint256)", +"82373d37": "isLimitTimeTransfer()", +"82378594": "setWithdrawalTreasuryFee(uint256)", "8237ab8d": "IsSeedMember(address)", "8237bbf0": "min_shares_to_sell()", "82381c96": "WatchCurrentMultiplier()", "8238520f": "getParentBranch()", +"82386d58": "reviseDeposit(uint256,address,uint256)", "8238b968": "BeatOrgTokenMainSale(address)", +"8238ba80": "addressLocks(address)", "8238cc8f": "getFIRST_STEP_MULTIPLIER()", "823914d9": "multisigETH()", +"82394694": "cancelBooking(address)", "82396bc6": "lnLimited(int128,int256)", "82396f60": "getTokensInAction()", "8239773a": "NePay()", "8239b1e7": "getSequenceId(uint256)", "8239b29d": "periodITO_hardCapInUSD()", +"8239e811": "totalAmountInReceipts()", +"823a57ae": "getStakes(address,address)", +"823a71af": "getCredits()", +"823a80c9": "burnNxCtoMintAssets(uint256,string[],string[])", +"823aa5b3": "notionalBestYield()", "823ab43b": "returnedTo(address)", "823ac373": "verify(bytes32,bytes,address)", +"823b0435": "whitelistArb(address)", "823b5e9f": "getAuditTimeoutInBlocks()", +"823b69f7": "ifQualified(address)", "823b7475": "UpgradeAgentSet(address,address)", "823ba0b8": "burnFormula()", "823ba381": "InvestClose(uint256,uint256,uint256)", "823bce43": "zasxzasx()", +"823bfc3f": "getWearableKey(string)", "823c73ec": "MarginToken()", "823c82ca": "FREEZE_PERIOD()", "823cfd70": "changeMinStakingTime(uint256)", "823e1832": "ChangeClientCategory(address,uint256)", "823e569e": "controlWallet()", "823e6e79": "validateBalance(address)", +"823eb472": "buyUsdt(uint256)", "823edd48": "getComponentId(uint256,uint256)", +"823eddeb": "init(address[],string,string,string,uint256[],string[])", "823f57ca": "withdrawFromAmt()", "82401f06": "transactionSwitch(bool)", "82402743": "createPromoNarco(string,string,address)", +"82403297": "accountAuth(uint256)", "8240ae4b": "challengeReparameterization(bytes32)", +"8241624c": "RoadSaleCancelled(uint256,uint256,uint8,address)", +"82418a79": "searchInvestor(address)", "82419e92": "numberToString(uint256,uint256)", "8242216d": "jackpotOfHouseEdge()", "82425d7c": "hasNoBids()", "82428323": "updatePeriodically(uint256)", "82430c07": "_sendOwnership(address,address,uint256)", +"82431b0a": "totalSaleTokens()", "824338bd": "founderAllocation()", +"82436c1e": "levelPrice(uint8,uint8)", +"82438441": "sellGem(address,uint256,uint256)", "8243a036": "presaleFemaleTokensLimit()", "8243fd61": "addMilestone(uint256,uint256,uint256,uint256,string)", "8244208c": "FrescoToken()", "8244b8c8": "findEndpointByAddress(int256,address,address)", "8244ee58": "Amberella()", +"824515d2": "blockID(uint8,uint8)", "824563f6": "mintingContractAddress()", "82457d53": "periodTable(uint256)", +"82466ff6": "pTokenImplementation()", +"8246950e": "getPlayerLuckCode(address)", "82474b1b": "teamName()", +"8247cecf": "holesForNodes(uint256,uint256)", "8248159e": "registerApprove(bytes32,uint8,bytes32,bytes32)", +"82482f7c": "states()", "82484a36": "vestingToken(address)", "82484c0b": "BetstreakICO()", "824891f8": "changeMinimumCap(uint256)", "82489311": "_buyNationInternal(uint8,uint256)", "8248e722": "updateConfig(uint256,uint256)", "824916b6": "playersAmounts()", +"8249369e": "dedicatedCharitySet()", "82495626": "getVoteAccount(uint256,uint256,uint256)", +"82496e6f": "advanceRoundId(uint256)", "824989c3": "changeLifetime(uint256)", +"8249b8db": "immedeateRate()", +"824a2cb4": "setcontractAdress(address,address,address)", "824a5166": "ChannelCloseRequested(address,uint256)", +"824a9007": "getDefaultRestriction()", "824be3c7": "TheRichestWins()", +"824c1db5": "cancel(address,address)", +"824c86d2": "someBalance(address)", +"824ca7e9": "ragequit()", +"824cfaec": "sellDHPT(address,uint256)", "824d1b4b": "preICOStartDate()", "824d5603": "getIndex(uint16,uint16)", "824d84d5": "createVestingContractWithFloatingPercent(address,uint256,uint256,address,uint256[])", "824dbc9a": "changeMembership(address,uint256,bool,string)", +"824dcad9": "showCompletedWorkCount(address)", +"824e4e84": "emergencyRecoveryTimestamp()", "824e5ebf": "distributeETHOS(address[],uint256)", +"824e99e4": "dohardwork(bytes)", "824eddd9": "removeSupportedToken(address,address)", "824eec3b": "editionOfTokenId(uint256)", +"824f047f": "ccmodify_moa(uint256,uint256)", "824f0f7e": "tittyContractAddress()", "824f2f1f": "globalConstraintsCount(address)", +"824fa821": "initFarm(bytes)", "82507c5a": "Radix()", "8250ea7d": "getReferralPool()", "8250f7e5": "isInvestmentPermitted(address,uint256,uint256)", +"82512b7b": "isCurentlyInStud(uint256)", +"82513909": "withdrawalProtectionFee()", "82518c2a": "exercisePut(uint256,uint256,uint256)", "82520e07": "receiveFrom(address)", "82528791": "setWallets(address,address,address,address,address)", @@ -74575,39 +136446,78 @@ "825374ba": "buyATCToken()", "8253adf1": "createBet(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", "82544c1f": "GoWalletToken()", +"8254a52e": "admin_init_employee(address,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"82550122": "createVDV(string,uint256,uint256,uint256)", +"825540c7": "regOracle(address)", +"8255fd9d": "withdraw_u(address)", +"825625a7": "liquidate(address,uint256,bytes)", +"825661ff": "pendingWobbuffet(uint256,address)", "8256687c": "addClaim(bytes12,bytes12)", "82568a24": "p_update_planetCryptoCoinAddress(address)", +"8256cbcb": "bfmPool()", "82576dd6": "Laundromat(uint256,uint256)", "8257f610": "canPurchase(uint256)", +"8258990f": "CompositionTokenCreated(uint256,uint256[],address)", "8258cbbd": "getContractETH()", "825918ee": "delgodaddress(address,address)", "82594f09": "iMaliToken(address)", "825993ab": "totalCouponsUSD()", "8259c78c": "depositPpm()", +"8259d553": "deleteProposal(uint256)", +"8259e6a0": "createPool(uint256)", "825a229e": "setEditor(address)", +"825a9b8e": "setPropertyPrice(bytes32,uint256)", +"825ad607": "balanceOfBonded(address)", "825af86b": "processJackpots(bytes32)", +"825b0788": "impeachDelegate(address)", +"825b31b8": "feePoolTransfer(address,uint256)", +"825b804f": "freeBleachNum(address)", "825b8b42": "buy(uint16[])", "825bdb74": "setSecondaryManager(address)", "825c3e36": "closeGame(bytes32,uint8)", +"825c6515": "addExpensiveStruct()", +"825cf243": "NewPet(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"825d5b21": "tokensNoBonusSold(address)", "825d7034": "RiptoBuxToken()", +"825d7643": "setComissionList(address)", +"825dd865": "set_denuncia_status(uint256)", +"825de8af": "setUint256(string,uint256)", "825e04d3": "dfs()", +"825e0e80": "durationRewardRate(uint256)", +"825e9c1d": "_setDhptSwapAddress(address)", +"825ebc8a": "apy1(address,uint256)", "825edfd3": "getClassMechValue(uint256)", "825f5a93": "RoundDSold()", "825f6552": "SVET()", +"825f81f6": "addWhiteListAddress(uint256,address)", +"825fac58": "dpasses(address)", +"825ffd92": "MKR_ADDRESS()", +"826098e8": "setExchangeFeeRateForPynths(bytes32[],uint256[])", "82609d51": "failedDonations()", +"8260e9b8": "_playerId()", "82611dfe": "setOption(string,uint256)", +"82612c49": "pendingRock(uint256,address)", +"82618a8a": "BonusPaid(address)", "8261b6bf": "receiveTokenLoot(uint256[9],uint256,uint8,bytes32,bytes32)", "8261c4c7": "MINERS_HOLDER()", "8261cfe4": "travelTo(uint256,uint256)", +"8261d7b5": "addJoyCollector(uint256,uint256,uint256,bool)", "8261eb1b": "frtToken()", +"82625ee8": "voteSell()", +"82626d6b": "INSURANCE_RATE()", "82629384": "shareStoredTokens(address,uint256)", "8262963b": "setInfo(string,uint256)", "8262fc7d": "addrBalance(address)", +"82631386": "profitBooster()", +"82632023": "executeGroup(bytes32,uint256)", +"826364db": "_bzbBFIV2Pair()", "8263a938": "getProposalLength()", "8263e953": "_claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", "826446fa": "parse2wei(uint256)", "82645725": "Planetagro(address)", +"82647e47": "setLevelRate(uint256[])", "82648222": "retrieveWCT2()", +"8264d88e": "countActive(address)", "8264fe98": "buyPunk(uint256)", "8265d137": "checkRegistrationStatus(bytes32,address)", "8265d577": "TestreplayAnser(uint256)", @@ -74615,11 +136525,17 @@ "8265fb13": "optionPoolMembersAmount()", "82661dc4": "splitDAO(uint256,address)", "826679a1": "getFundSPBalance()", +"8266a47b": "Quorum(uint256)", +"8266caf9": "max_content_length()", "82672304": "GeneratePublicKey(string,string)", "82672482": "vestingRegistered()", "826776fa": "claimTeamTokens(address,uint256)", +"82678d45": "MathTo96(uint256)", +"82678dd6": "getKey()", "8267a9ee": "deleteIntValue(bytes32)", "82688f14": "bn128_multiply(uint256[3])", +"826898e0": "universalFLcallback(uint256,uint256,uint256)", +"8268b12a": "initialNumberOfShares()", "8268efcd": "RunningAuctionsEvent(address,uint256,uint256,uint256)", "82692679": "doSomething()", "82699367": "CicadaToken()", @@ -74629,190 +136545,347 @@ "8269ee3d": "Issued(address,uint256,uint256)", "826a483f": "_emitHashSet(address,bytes32,bytes32)", "826a49c9": "removeGameInfoFromArray(uint256)", +"826acdde": "ASTRPerBlock()", +"826b2e2e": "battleLoseFee()", +"826bd4cd": "_getChai()", "826c10d9": "exhaustBattle(uint256)", "826c2447": "PGDToken()", +"826c3ca3": "referrerDividendSplit()", "826c69b8": "participantBalance(address)", "826c6f73": "addServer(string,uint256)", "826cc57a": "referral_address()", "826d3379": "tierPrice(uint256)", "826db6c8": "SLFYCoin()", +"826e468d": "claimSwapFee()", "826e9def": "initPresaleTokenVault(address[],uint256[])", +"826ecda4": "setUNISWAPPAIRcontract(address)", "826efb6d": "payBonus(address[])", "826f57a1": "endBetting()", +"826f6822": "recalculatePayoutValueAdmin()", +"826f8282": "declareLottery(uint256[])", "826f8a00": "createOrder(string,string,string,string,string,string)", +"826fc391": "updateProjectMaxInvocations(uint256,uint256)", +"82700d8b": "EventFundingManagerProcessedVault(address,uint256)", "827037d6": "modCEOAddress(address)", "827037db": "icoStart()", "8270c41e": "setPriceToken(uint256)", +"8270d87b": "lastPublishBlockNumber()", "82712aeb": "purchaseWolkEstimate(uint256,address)", "827147ce": "returnString(string)", +"827189e3": "setOverlord(address)", "8271bd99": "payoutAmount(address)", "8271bedc": "getUserBetsLength(uint256)", +"827220d0": "createAndActivateToken(uint256,address,uint256)", +"8272ab11": "BnbBusdPool()", +"8272cff9": "approve_acDai(address,uint256)", "8272d083": "isSupported(address,bool)", "82731247": "isB(address)", "8273a411": "allBalancesOf(address)", +"8273b012": "setYoutuber5(address)", "82744368": "minimumEtherAmount()", +"8274664f": "exitTokens(address,address,bytes)", +"82756460": "returnValue(uint256)", "82757f99": "withdrawTeamPot()", "82760c88": "GoGlobals()", +"82762600": "aggregatorAddr()", "82766b1b": "setAmount(address[],uint256[])", "82768708": "weiMinimumGoal()", +"8276b0e0": "angelsClaimedCardboard(uint64)", "8276bd19": "PROPOSED_STATUS()", "8276ccf2": "setHeroName(uint256,string)", "82771c8e": "isSane()", "82771ff4": "endPlaceOrder(uint256)", "82776521": "strConcats(string,string)", +"82778f46": "okf()", +"8278188a": "gnb()", "8278337a": "writeAttributeFor(bytes32)", "8278fcea": "AirdropReward()", "82790c19": "SideBridge(uint256,address[],uint256)", "82792ce8": "getInsideCallSender()", +"82796e98": "userDepFee()", "82797bea": "Preesh()", "8279c7db": "setReceiverAddress(address)", "8279ea54": "change_bounty_manager(address)", "827aeb16": "_changeTittyPrice(uint256,uint256)", +"827b268e": "strikeAssetEarnedSelling()", "827bc64b": "setLeftoverTokensBuffer(uint256)", "827bfbdf": "setLocation(string)", "827c049e": "emission()", +"827c1567": "assetNumber()", "827c1e41": "getTittyByWpId(address,uint256)", "827cc452": "withDrawMoney(uint256)", "827d084a": "getActiveBusinessesPerCity(uint256)", +"827d6320": "getLimit(uint256)", "827d7ba9": "Fosha(address)", +"827df194": "withdrawEthAsBase(uint256,address)", "827e4cf1": "manuallySetNumRewardsAvailableForChildAddress(address,address,uint256)", "827ef325": "_parseMsgData(bytes)", "827ef4c7": "m_fundsAddress()", "827f143e": "setPresentMoney(uint256)", "827f32c0": "generateTokens(address,uint256)", +"827fbfd0": "maxTotalPurchasableBusd()", "827fc57c": "ChickenFarmer()", "827ffcea": "horas()", "8280114b": "addressOfERC20Token()", +"8280181c": "changeC()", "828033da": "getFlag(uint256,string,string)", "82803c22": "sell_tokens(uint256)", +"828047a5": "extendLockTime(uint256)", "8280b498": "setFrozen(address,bool,uint256)", +"8280f508": "removeNodes(address)", "82812aed": "BuyPriceSet(uint256)", "828183bc": "getSwapInfo(uint256,address,address,address)", "8281da38": "refundBet(address,bytes32)", "8281feaa": "QuestionIs(string,string)", "828282e9": "bonusRates(uint256)", +"8282c3f1": "setStartTimeForTokenTransfers(uint256)", "8282e1e4": "SEPA()", "828363b4": "transferAdviser(address[],uint256[])", "828375e8": "computeTokensWithBonus(uint256)", "82838c76": "subTotalSupply(uint256)", +"8283fbde": "getForkThresholdDivisor()", +"82845b74": "assetTypeSalesTokenId(uint256,uint256)", "8284f2a7": "proposeGame(address)", "82857a03": "approveAndCallWithSender(address,uint256,bytes4,bytes)", "8285d272": "GOAL_REACHED_CRITERION()", +"8285ef40": "totalBorrow()", "82862275": "getDeadline(uint256)", +"8286e89a": "ZapIn(address,address,address,uint256,uint256,address,address,bytes)", +"82870e30": "disableTXLimit()", "82872491": "setCaps(uint256,uint256,uint256,uint256)", "8287ccb4": "onDeposit(uint256)", "8287d6ce": "_createDeposit(address,uint256,bool)", +"8287e57b": "refundPendingDeposit(uint256)", +"82880390": "SWAP_EXCHANGE_RATE()", "828806cd": "submitTransactionWithSignatures(address,uint256,uint8[],bytes32[],bytes32[])", "8288196d": "THANKSTEST1()", "8288edd0": "nonTransferrableBalances(address,address)", "828909bd": "getIntValue()", "82892dd9": "blockMember(address)", +"8289ef14": "buyTokensEth(address)", +"828a1242": "getLAUNCH_TIME()", "828a33b9": "FreeDiceCoin()", +"828a4aaa": "writeRedemptionReview(uint256,string)", "828ae96d": "cdc()", +"828af1c0": "userAgreements(address)", +"828afc4b": "getLiquidationDeadlineForAccount(address)", "828c06cd": "expLimited(int256,int256)", "828ca03c": "getTaskListSize()", +"828cedb7": "_beneficiary()", "828d671c": "dyn_sig()", +"828dca09": "deleteStage(uint256,uint256)", "828dfbca": "user_acq_address()", +"828e2f3f": "margin_call()", +"828e5251": "widthdraw(uint256,address)", "828eab0e": "defaultResolver()", +"828efb3f": "API_WinningThePrize()", +"828efd71": "possibleWithdrawalPerDay()", "828f1b42": "buyObject(address)", "828f4057": "numberofGamePlay()", "828f5fba": "air2(uint256,uint256,uint256)", "828f717c": "fixPlayerID(uint256,uint256)", "828f8581": "tokenTransferFunctionIdentifierMap(bytes32)", +"828f8def": "vaultCollateralBalance(uint256)", +"828fe36d": "swiftResolverToken()", +"828fe71f": "MONITOR_PROXY_ADDRESS()", +"829007bb": "dropDetailedSumERC20(address,address,uint256[])", +"82900934": "RECEIVE_TYPEHASH()", +"8290128a": "approve_407(address,uint256)", "8290d1e0": "StandardTokenDeployable(string,string,uint256,uint256,address)", "8290fe25": "finalizeExits(uint16)", +"829118e2": "blacklistAddresses(address[],bool)", "8291286c": "contractId()", +"82913a57": "generateIndexes(address)", "82914e5d": "getObjectData(bytes32[],uint8[])", "82916381": "execute(address,uint256,uint256,bytes)", "82917320": "increaseLockedBalance(address,address,uint256)", +"829251ae": "distributionWeekday()", +"82927e02": "luckyEnabled()", +"8292a656": "iWin()", +"8292afd9": "refers(address)", +"829311cc": "getHandlerAddr()", "8293779c": "isOps(address,address)", "82939b27": "getPreSaleData()", "8293a114": "unbanAddress(address)", +"8293e9af": "withdraw(address,uint112)", +"8293eef9": "balancesRoot(uint32)", "8294a796": "WelfareHandout(address,uint256,uint256,uint256,uint256)", +"8294ba74": "hardCapEthAmount()", +"8295016a": "effectiveValueAndRates(bytes32,uint256,bytes32)", +"8295284d": "NewIdentity(uint256)", +"82952a3b": "changeBeneficiary(uint256)", "829534d7": "m_pendingIndex()", +"8295617c": "admindeposit(uint256)", +"829561f3": "setTCOREBuyMin(uint256)", +"82956514": "spawn_Eth(uint256,uint256)", "8295a9ba": "checkDupe(string)", +"82961e96": "isChildLiquidityLauncher(address)", "829644a6": "freelanceReinvest(address)", "82964696": "ZSYCoin(uint256,string,string)", +"8296535a": "availableFees(address,address)", +"8296f5b6": "updateMFactorList(address[],uint256[])", +"8296f84f": "base_cache_updated()", +"82972f34": "transferOperations(address)", "8297b90c": "PRESALE_LENGTH()", "8297d46d": "BTL_ATHENIAN()", +"82985385": "getBusinessUrl()", +"82988000": "s(int256)", "8298c3b5": "itemVoteDn(address,uint256)", "8298c5dc": "last_winner()", "829923bf": "admin_setAdmin(address,bool)", +"8299265e": "nextSigilIndexToAssign()", "829965cc": "epochCount()", "82996d9f": "rent()", "829981fb": "FinalToken(uint256,string,string)", +"8299d52f": "getEffectPower(uint256)", "829a34c6": "getUserInfo(bytes20)", +"829a3ef2": "getCurrentAuctionPrice(uint256)", +"829a85ba": "treasureFarmed()", +"829a86d9": "lastAmount()", "829a92f4": "hardcapChanged(uint256[])", "829b38f4": "getMaxEscrowAmount(uint256)", "829bd99c": "balanceOfByLegacy(address)", +"829c138c": "BLOCK_COUNT()", "829c3428": "startTransfer()", "829c38e1": "claimSolve(uint256[],uint256,uint256,bool)", "829c3dee": "createDebt(bytes32[8],bytes,uint256)", +"829d55e7": "getCandidateVoter(address,uint256)", +"829e0b72": "govOpen()", +"829e4795": "basepercent2()", "829e9ece": "deathData_v16()", +"829eb92c": "claimsStart()", "829ebdcd": "upgradeFor(address,uint256)", "829ed3a5": "ownerTokenTransfer(address,address,uint256)", "829efd71": "TonhaoCoin()", "829f0667": "verify_sk_knowledge(uint256[2],uint256[2])", +"829f2afc": "ORDER_SIZE()", +"829ff16f": "AirDistribute(uint256,uint256)", "82a0888b": "totalSaleWei()", "82a09cc5": "TokenCreated(uint256,address,string)", +"82a0ad4d": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256,string)", "82a123ea": "WhitelistUpdated(uint256,string,uint256)", "82a147cd": "addYouCollectContract(address,bool)", "82a18331": "MOONCOINCONTRACT()", "82a1ce1b": "setSourceToken(address)", +"82a2514e": "google2()", +"82a2fb9c": "borrowBalanceCurrent(uint256,address)", +"82a32203": "EVP_LP()", "82a352e4": "firstStagePriceOfTokenInWei()", "82a35706": "tokenSoldPreICO()", +"82a3e17c": "getInvestTime(uint256)", "82a3e5df": "STATE_CLAIM_ENABLED()", "82a3f98d": "VOTING_PERIOD_DURATION()", +"82a435ba": "NewGen0Limit(uint256)", +"82a4a970": "LGE_INITIAL_PRICE_MULTIPLIER()", "82a5285d": "getMinBetAmount()", "82a60a59": "CollectibleIndex2()", "82a62137": "activateAccount(address)", "82a66d93": "earlySponsor()", +"82a69934": "bonusMinWei()", +"82a6c0ac": "records(address,uint256)", +"82a74303": "poolbonus()", "82a7cf1e": "ownerOf(uint16)", "82a86cda": "getRarePLATInfo(uint256)", +"82a8af15": "currentFeeTokens(uint256)", +"82a8b3b0": "settleReward(uint256,uint256,address)", +"82a8e1e7": "daiSlp()", "82a90545": "funComputeRoundTime(uint256)", +"82a98f41": "setPrice5()", +"82a9f145": "setAccredited(address,bool)", +"82aade08": "increase_allowance(address,uint256)", +"82ab1e47": "minsPastFreezeTime(address)", "82ab890a": "update(uint256)", "82ab8a82": "startDeal(bytes32,uint256)", +"82ab992c": "calculateSessionPayout(uint256)", +"82abcc20": "cardIdToFirstClaimTimestamp(uint256)", "82ac1d99": "getNodeValue(bytes32)", +"82ac5a0d": "setComplianceRole(address)", "82acaa39": "getChildrenAgainstAnimalId(uint256)", +"82acb874": "saleBonusICO2()", "82ad5ecf": "yeedToken()", +"82ad6cbd": "PushNodeGroup(uint256,uint256,uint256)", "82ad6f35": "refund(address,address,uint256)", +"82ad8198": "multiCollateral()", +"82ada890": "convertTokenToEth(uint256,address)", +"82adb93d": "_freeSpin(address)", "82ade405": "forceChooseRandomWinner()", "82ade466": "getWithdraw(address,address,uint32,bytes32[],uint256)", "82ae2227": "createUser(uint32,uint64)", "82af3526": "addGift(address,uint16)", +"82af4b1f": "acceptEth()", +"82af54c9": "vaultsLength()", +"82af6395": "CancelUpTo(address,address,uint256)", "82afd23b": "isActive(uint256)", +"82afec32": "doSwap(uint256,uint256)", "82b00403": "finalFundGoalReached()", "82b022e0": "set_species(uint256)", "82b0444e": "CityMayor()", +"82b0617d": "getPoolRewards(uint256)", "82b0627c": "changeFundingTime(uint256)", "82b0862f": "addBps(uint256,int256)", +"82b105a9": "Cashback(address,address,uint256)", +"82b1373e": "setUserDetails(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "82b1ad50": "totalPrize()", "82b1b4f3": "WithdrawToAdmin(uint256)", "82b1b617": "ViewSellOrder(address)", +"82b1bbbe": "InviteEvent(address,address)", "82b1fb0d": "setGlobalMultisigWallet(address)", +"82b240b5": "isAssigner(address)", "82b2a559": "buy(uint256,uint256,address,address)", "82b2e257": "getTokenBalance()", "82b2f95f": "DEVELOPER1()", +"82b30d06": "multipleMint(uint256[],address,string)", +"82b35455": "queryValidatroConfiguration()", +"82b422a5": "randomToReward(uint256)", "82b49248": "BlockOne()", +"82b4c11c": "getPynth(bytes32)", +"82b5305d": "AccreditWarehouse(address)", "82b57b96": "MONUMENT_UN_FEE()", "82b58599": "WeiHash(address)", +"82b5d94c": "MADToken(address)", "82b61a3e": "Rectangle(address)", +"82b65cf5": "underlyingLiquidatedJuniors()", +"82b65d55": "electGovernment(uint256,uint256,uint256,uint256,address)", +"82b684bb": "payCompletedPledges(uint256)", +"82b684d4": "blacklistSlashPercent()", "82b68f4f": "actionVotedRate()", "82b74b89": "lockTransfers()", +"82b7a50c": "unlockePercentages(uint256)", "82b7b500": "find(string)", "82b7fa4e": "cancelGladiatorBattle(uint256,bytes32)", +"82b81eef": "_schedule(address,bytes,bytes)", +"82b850e1": "tokensSoldInEachPhase(uint256)", +"82b86600": "getToken(uint8)", +"82b8969b": "getEcosystemReleasable()", +"82b98f9d": "winnerPercentage()", +"82b9de0d": "x2Count(address)", +"82b9e100": "changeFeeRequest(uint256)", +"82b9ecbe": "metaApproveAndCallHash(uint256,address,uint256,bytes,uint256)", "82ba614f": "setRound(uint256,uint256)", +"82ba653d": "setManualPlay(bool)", "82bb326b": "isGoldMigrated(address)", +"82bb3307": "setSLTD(address,address)", +"82bb3470": "emitIssuanceDebtRatioEntry(address,uint256,uint256,uint256)", +"82bb8a7d": "winRatio()", +"82bba98f": "getActiveCastleId(uint256)", "82bbcc2c": "removeIdArrayItem(address,uint256[],string,uint256)", "82bbd1fe": "setlastprize()", +"82bbdb64": "safeMilkTransfer(address,uint256)", "82bbdbec": "nameAvailable(string)", +"82bbde28": "currBatch()", "82bbe9cc": "getGameFee(uint256)", "82bc07e6": "lastRound()", +"82bc5e1b": "getPublicResolverLabel()", +"82bc8d97": "swapInputETHForYFOX(address[],uint256,uint256)", +"82bcc51f": "DEBUG_uint(uint256)", "82bcd463": "DAKUToken()", "82bcef79": "increaseAllowanceProxy(address,address,uint256)", +"82bd0b36": "setDegree(uint256,uint256,uint256,uint256,uint256)", +"82bd3bdf": "WatchPriceChanged(uint256,uint256,uint256)", "82bd5a71": "warriorToApproved(uint256)", "82be0ccd": "distributeTokensToApprovedUsers()", "82be415d": "BonusDealer()", +"82beb227": "mintTeamAndAdvisorsPart3(uint256)", "82bf6464": "DAOrewardAccount()", "82bf9a75": "setPip(address)", "82bfa9f2": "upgradeStorage(address)", @@ -74822,257 +136895,489 @@ "82c0287e": "deleteEtherBox(address)", "82c058d9": "showTrnsactionLog(uint256)", "82c0652a": "calcMultiplier()", +"82c0d5e6": "getEthToDaiProfit(uint256)", +"82c1216f": "totalPoolBXTB()", "82c174d0": "preSigned(bytes32,address)", "82c198ef": "fxpDiv(int256,int256,int256)", "82c20f84": "preSaleBonus3Percent()", +"82c220db": "setLiftoffRegistration(address)", "82c26c6a": "GOCToken()", +"82c26dc9": "setTokenConfig(address,string,uint256,uint256)", +"82c2a04e": "getLoanUSDb()", +"82c2e0fb": "tallyHash()", +"82c30012": "drc()", "82c30220": "Earthcrypt()", +"82c39ee0": "addDelegate(uint8,address,uint8,address)", +"82c3f79c": "removeWhitelister(address)", "82c4175d": "privateRate()", +"82c47e9f": "printingFee(uint256)", "82c48f9e": "_batchTransfer(address,address[],uint256[])", "82c51376": "LENRCoin(uint256,string,uint8,string)", +"82c518fe": "activateAnarchy()", "82c59c81": "getGameBlocks(uint256)", +"82c63066": "lp_token()", +"82c66f87": "tickSpacingToMaxLiquidityPerTick(int24)", "82c6b2b6": "OfficalHold()", "82c7340e": "GetPlayerRound(address)", "82c7bac7": "callOnExchange(uint256,bytes4,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", "82c7bf2f": "Zigger()", +"82c7cb58": "habanero()", +"82c7ec80": "userRevenue(address)", "82c7f4d6": "setMessagefromdovie(string)", +"82c82bd3": "printDildoDownAndRefundRest(address,uint256)", "82c8ac27": "DatCrowdPreSale(address)", "82c8c76f": "blocktube(uint256,string,uint8,string)", +"82c8ffbf": "setDataManagerRight(address)", "82c9004a": "computeArtistGenesisSaleFee(bytes32,uint256)", +"82c947b7": "addressToBytes32(address)", "82c97b8d": "collectReward(address)", +"82c99860": "setBtcPrice(uint256)", +"82ca0570": "getRevision(uint256,uint256,uint256)", "82ca116d": "changeBankAddress(address)", "82ca49a8": "sendOwnerFee(uint256)", "82cac6df": "lastRate()", +"82cadb12": "calculateCurrentDollarAmount()", "82cb08aa": "MoveToBase(uint256)", +"82cb1a2a": "registerNode(string,string,string,string,string)", +"82cb45fb": "vyper()", "82cb9df9": "addrFinance()", "82cbb2e4": "Dagelane()", "82cbdc0f": "create(string,string,string,address)", +"82ccd330": "strategyType()", "82ccef76": "GameEnded(address,address,uint256,uint256,uint8,uint8)", +"82ccf45b": "three_crv()", "82cdc0fb": "setRunTimeAfterSoftCapReached(uint256)", "82cdc93e": "getPlayerInstWinning(uint256,uint256,uint256)", +"82cdf467": "setSlaughterHoldPeriod(uint32)", "82ce6523": "IWasFirstShareToken()", "82cee91c": "BonusPeriodFor(uint256)", +"82cefdde": "createNative(bytes,string)", "82cf114c": "setProfitAddress(address)", "82cf2116": "transferAndAuction(uint256,address,uint256,uint256,uint64)", "82cfd1e0": "turn_flag_OFF()", "82cfee4d": "BitcoinSapphire()", "82d04bd4": "_complianttransfer(address,uint256)", +"82d04ce2": "checkEstimatedProfit(uint8[],uint256,address[])", +"82d092d9": "ReconDonate()", +"82d0d35b": "gb(address)", +"82d0d89a": "updatePreSaleTime(uint256)", "82d1407c": "calcTicketEarnings(uint256,uint256)", +"82d15ac7": "multiSendERC20(address,address[],uint256[])", "82d18650": "minPay()", "82d1bc89": "Darks(address,address)", "82d22377": "infraIndexToApproved(uint256)", "82d288c2": "setMintingCurator(address)", "82d29195": "FundingStageNum()", "82d2dcfb": "UETH()", +"82d2e496": "setExemptWallet(address)", "82d33374": "updateLastTransactionTime(uint256)", +"82d38953": "totalDepositedTokens(address)", +"82d38954": "addresses(address)", +"82d391d6": "scamPrice()", "82d40041": "getAbilitiesForCollectibleId(uint256)", "82d419f5": "fullUnlockAngelsAccounts(address[])", "82d4685c": "setAllocations(uint256,uint256,uint256,uint256,uint256,uint256)", "82d559de": "catchMonster(address,uint256,uint32,string)", +"82d57222": "money_to_Buyer()", "82d5eb98": "playerIdToExtendedAttributes(uint256,uint256)", +"82d6e780": "goodwillAddress()", +"82d6f189": "createUniswapPairMainnetDFGRFI()", "82d708c4": "dividendRecentBuyersPercentage()", +"82d726f9": "getDepProfilesRegister()", "82d74005": "YUPTimelock(uint256,uint256,address,uint256)", +"82d78111": "totalCurrentHoldings(address)", +"82d7a20e": "getUpdatedPrice(address,uint256)", +"82d8185c": "getRecord(uint256,address)", "82d82983": "RuralBank(uint256,address[])", +"82d8ad8e": "_decode_enum(uint256,bytes)", "82d8dff6": "getMaxPrice()", +"82d93cab": "storageArrays()", "82d95df5": "setStartDate(uint256)", "82d9ac39": "percentForBounty()", "82d9b9bb": "turnOffCanUpdateNextGameMinAndMaxBlockUntilGameEnd()", +"82d9c704": "greetName()", +"82da47fb": "withdrawSponsoredIncentives(uint256)", +"82db3072": "projectPartyToken()", "82db9bd4": "setCaissa()", +"82dbc46e": "studentsListOfAdresses(uint256)", +"82dbc684": "updateRedemptionRate(address,address,address,bytes32,uint256,uint256)", "82dc107d": "SECOND_TIER_SALE_START_TIME()", "82dc1ec4": "addPauser(address)", +"82dc27d7": "deleteSchain(string)", +"82dc4a05": "acceptedTokens(address)", "82dc5c9d": "UnionChain()", "82dc7836": "openGate()", "82dc87b6": "RefundPeriodStart()", "82dced63": "testHitPresaleCapPresale()", "82dd6012": "_aremoveByIndex(uint256)", "82dd87dc": "deleteUser(uint256,uint256)", +"82dda22d": "getStake(address,address)", "82ddad13": "Auction(address,uint256,uint256,uint256,string)", +"82de04c5": "WOKrtSaleWOK(uint256,uint256,uint256,uint256,uint256)", +"82de2639": "BadgeTransfer(address,address,uint256)", "82de6df7": "getGameBegin()", +"82de9c1b": "nextImplementationTimestamp()", "82deb6cd": "m_publiclyDistributedTokens()", "82decb49": "_maint_setCustomSeed(uint256)", +"82ded785": "OnlyCallableByPoolOperatorError(address,bytes32)", +"82def01a": "flashloan(uint256,uint256,uint256,address,address)", +"82df0faf": "counterDays()", +"82df39de": "liquidatable(address,address)", +"82df7719": "fetchBnbPrice()", "82dfc5f7": "WETH_ADDR()", +"82dfcbaf": "canVoteOnBehalfOf(uint256,address[],address)", +"82dfe150": "singletons()", "82dfe1fb": "changeTreeAttributes(uint256,string,string)", +"82e022be": "decodeAverageRateT(uint256)", "82e1250f": "DaysToMyDestroy()", +"82e2f104": "yieldInfo2(address,uint256)", "82e2f767": "finalizedNextUpgrade()", "82e3036c": "StandardToken(string,string,uint8,uint256,address)", +"82e36586": "burnFrombyOwner(address,uint256)", "82e37b2c": "getPlayerName(uint256)", "82e380ef": "auctionInformation(uint256)", +"82e3a8c7": "OperationDone(address,uint256)", +"82e3ebf4": "getWalletsTradingLimiter()", "82e41258": "unregisterPrefix(string)", "82e43a3b": "TheFrozenSolidShitCoin()", "82e46b75": "setCoin(address)", +"82e4b275": "partners_supply()", +"82e4eda4": "staker(address)", "82e5d073": "getRewardTokenCount()", "82e615fc": "bidRegistry()", "82e61d79": "PayoutDividends(uint256,uint256)", "82e6bbd2": "onlyBouncerExecuteDelegatecall(address,uint256,bytes)", "82e6d3d6": "foundationSupply()", +"82e70bc6": "addBrandAddress(address)", "82e77165": "_setAllKeys(uint256,uint256)", +"82e7cf05": "tfkPerBlock()", +"82e7eb3d": "ToMathed(uint256)", +"82e8e722": "setBasePercentChangeFactor(uint256)", +"82e90fa0": "create2FixedProductMarketMaker(uint256,address,address,bytes32[],uint256,uint256,uint256[])", "82e93309": "importGenesisPairs(address[],address[])", "82e94ac5": "eject()", "82e96916": "setCoinPercent(uint256)", "82e97740": "initAffiliate()", +"82ea12d1": "scheme(uint256,uint256,int256,uint256[],uint256)", "82ea3985": "clearNextArenaTime()", +"82ea7bfe": "deployedBlock()", "82ea84a3": "getIssuedScoreAmount()", "82ea872c": "refHandlerAddress()", "82ea97b3": "tokensForIco()", +"82eac7f0": "poolArray(uint256)", +"82eb4df1": "transferB(address)", +"82eb5301": "refereeN(address)", "82ebaec4": "distributeTEST(address[])", "82ebe9ba": "photoData()", +"82ec168a": "OperatorTransfered(address,address)", "82ec5ddc": "BioToken(address,address,address,address,address)", "82ec623c": "_noThrowImplements(address,bytes4)", "82edaf94": "tokenContractAddress()", "82ee27cc": "setCoinBalance(address,uint32)", "82ee282b": "thirdBonusSalesEnds()", +"82eeb7b7": "SpecialMint(address,uint256,string)", "82eed60c": "pauseCrowdsale(address)", +"82ef2dd4": "maxSupplyExpansionPercentInDebtPhase()", "82ef351a": "getTotalMonster()", "82ef6483": "RabbitCore(string,string)", "82ef8fa8": "adminClaim()", "82f0151c": "MetaHash()", "82f0622a": "teamReward()", +"82f06641": "setTimeRewardInterval(uint64)", +"82f07b8f": "RemoveDelegate(address)", "82f0b31c": "getLife(bytes32)", "82f0d875": "makeHash()", "82f128f7": "MJOYToken()", +"82f143a8": "denyAdmin(address)", "82f16872": "raffle_balance()", "82f19e3a": "deltaTFunc(uint256,uint256,uint256,uint256,uint256)", "82f1ec1f": "getActivityAccountInfo(address)", "82f2045c": "getEntitiesCount()", +"82f2785f": "multisendErcAPE(address[])", "82f2a164": "addCET6(uint32,uint32,uint32)", "82f2d8d7": "moveMarketData(uint256[],uint64[],uint64[],uint128[],address[])", +"82f2ed91": "marker6()", "82f39e2f": "mktTokenCap()", +"82f3dbe2": "minDepositSum()", +"82f412ea": "relaseTime5()", "82f43303": "roundMax()", "82f4b3a8": "badgeIfFreeze(address)", +"82f4c27c": "setluc(uint256)", "82f4ef73": "getStageName()", "82f56556": "udgradeAttack(uint256,uint256)", "82f5a3e1": "withdrawTotalBalanceDonateWei(address)", +"82f5a859": "testCalculateDiscountedBorrowDenominatedCollateral_HappyPathDiscounted()", +"82f5ad83": "usersE1Matrix(address,uint8)", "82f5e31b": "convertFromWei(bytes32,uint256)", +"82f637a8": "RewardLevel4()", +"82f652ad": "calcPoolInGivenSingleOut(uint256,uint256,uint256,uint256,uint256,uint256)", "82f66ff0": "RabbitCoin(uint256,string,string)", "82f68dc4": "rankOf(uint256)", +"82f6d01c": "DocSigned(bytes20,address)", "82f7325e": "CRYPTOVENO()", "82f768d4": "tokenbeneficiary()", "82f78260": "acupuncturecoin(uint256,string,string)", +"82f7b027": "liquidationPayment(uint256,address)", +"82f7be36": "salvage(address,address,address,uint256)", "82f7d5c3": "divideNumberBy()", "82f8152c": "account2()", +"82f81fec": "weekTrigger()", +"82f84336": "lendingPoolProvider()", "82f858e8": "addresses4(uint256)", +"82f86685": "daysPastDeployment()", "82f867a4": "BpsToken()", "82f8767d": "SuperPAC()", "82f87fdb": "checkFundingStateFailed()", "82f8b6e9": "roundInterval()", +"82f8bc36": "getAllLockSlotIdsToAddress(address)", +"82f9a869": "updateAdapter(address)", "82fa3421": "push(uint256,bytes32)", "82fa7f8b": "weiPerWholeToken()", "82fa9c0d": "isPersonalBonuses()", "82fac352": "getPricesOfLatestTradeRecords(uint256)", +"82fae9c1": "options(address)", "82fb3b7c": "voteNoLockByAdmin()", "82fb63c7": "getImageCurrentRegionId(uint256)", +"82fb8fc4": "startRoboRewards(uint256,uint256,uint256,uint256)", +"82fb93e1": "KP3RV1Oracle()", "82fbbe47": "Ticked(uint256,uint256,uint256)", "82fbdc9c": "register(bytes)", "82fc49b8": "setCosignerAddress(address)", +"82fcdc6d": "TransferEdrOut(address,uint256)", "82fd5bac": "getDeal(uint256)", +"82fd7795": "closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)", +"82fde093": "approversCount()", "82fe1e46": "JaneToken()", +"82fe3eb9": "updateTroveRewardSnapshots(address)", +"82fe82aa": "setInactiveFineNDays(uint256,uint256)", "82fef47d": "addToLists(address,bool,bool)", +"82ffa9f7": "getHistoryHash(bytes32)", "82ffee45": "approveRemoveOwnerRequest2()", "82fffde0": "get_articolo(bytes,bytes10)", "830010f3": "setReferrerRewards(uint256[])", "8300399d": "aqwsaqws()", +"83007cef": "TransferredEth(address,uint256)", +"8300df49": "getBitcoinPrice()", +"830146cf": "gymTrainers(uint8)", "8301cfec": "backVenusCoinOwner()", +"8301e709": "getLayerFromId(uint256)", +"8301f862": "loanTokenByIndex(uint256)", "8301fb2e": "cashOutTank(uint32)", "8301fb61": "userHasSmartSpeed(address)", "830245e3": "sumICOStage7()", +"8302d91a": "EvSetReferer(address,address)", +"8302fe11": "userStakedAmount(address,address)", "830321be": "PGUC()", "83037b81": "checkInterest(address)", +"8303f5a7": "openLockETHAndDraw(address,bytes32,uint256)", "830402c1": "startGameGas()", +"83041f18": "setDeltaTime(uint256)", +"83043ccd": "marketBuyFatWithETH(address[],uint256,uint256)", +"8305368a": "trackedTokens(uint256)", "83054b6a": "GetConsentDirectiveCount()", "8305d1c3": "GGGToken()", +"83061442": "claimWeeklyStake()", "830639ac": "isWhitelisted(address,uint256)", +"83063c76": "getDirectRevenue(string,string,uint24)", +"83063da8": "increaseArtUpdateTickets(uint256,uint256)", +"830687c4": "expiredWorkingGroupIdsLength()", +"8306fddb": "incrementNFTValue(uint256,uint256)", "83076a73": "updateCfo(address)", "83084b3f": "setNotInWhitelistAllow(uint256)", +"830879b6": "newSRFDT(string,string,address,address[],uint256[])", +"8308abd4": "tester()", "8308c786": "minBlockGap()", +"8308d69c": "game(bool)", "8308d7e9": "set(address,uint256,uint256)", "830953ab": "claimAmount()", +"8309e8a8": "log(address,uint256)", +"830a90b8": "ethContributors(address)", +"830ac476": "setShareholderCanTransfer(bool)", +"830ad397": "VotingCreated(address,uint256,bytes32[],address[],uint256[])", "830adf56": "get_previous_user_recast_from_item(bytes32,bytes32)", "830b3a1e": "setIsFixed()", +"830b4ec6": "pendingSwapdex(uint256,address)", +"830b62b8": "PrivateInvestorTokenPurchase(address,uint256)", "830b6868": "getPriceCredentialItemId(bytes32)", "830b6b87": "MyOffer(uint256,string,uint8,string)", +"830bdb43": "activeBoosters(address)", "830cbbbd": "redeemToken(address,uint256)", "830ced52": "TIER_1_CAP()", +"830ceda6": "vakro()", +"830cf31d": "threshold_ratio()", +"830cf7ce": "l2l2users()", "830d0627": "giveCdpToProxy(address,bytes32)", +"830d6198": "setParams(bytes32,uint256)", "830d77d4": "ETHERONEUM()", +"830d9db7": "withdrawSlipCheck()", +"830df852": "rpSlot()", "830e8e64": "callAmendment(uint256)", +"830ebc07": "order(uint128,uint8,uint256,uint256)", "830ebd7f": "transferFromNotFullAllowanceTest(address)", "830ef41b": "transferERC20(uint256,address,address,uint256)", +"830f27ea": "CreateAgon(uint64,address,uint64)", "830f2935": "icoAgent()", "830f3d8a": "Diploma()", +"830f6153": "isEndGameStatus(uint8)", +"830f6ae7": "getNum3()", +"830f84a3": "addLiquidityToBakerySwapHITMANxWBNBPair()", +"830fb67c": "Add(int256,int256)", "83100580": "PriceWeekTwo()", +"831013ba": "getMetadata(string,string)", +"83101a35": "updateCardRangesRare(uint256[][])", +"83101b68": "convert(bytes32)", +"831064b3": "changeFrozenStatus(address,bool)", "8310d61c": "getLastGame()", "83111397": "blacklistAddr(address[])", "831121dc": "getLockedStateAddress()", +"8311d764": "__calcSharesDueWithInflation(uint256,uint256)", "83123f30": "setRole(address,bytes32,bytes32,uint256)", "83123fa6": "coinsIssuedIco()", "8312a886": "tokenValueCount()", +"83134056": "getMaxQuote(address,address)", +"83139ebe": "biscuitPerBlock()", "8314b490": "earlyContribList(uint256)", +"8314b4e3": "removeRecipe(uint256)", "8314dcb4": "unAuthorizeContract(address)", "83150a93": "opetTokenBalance()", +"831518b7": "minBond()", +"83154e90": "EthValueLog(address,uint256,uint256)", +"8315c264": "spins(uint256)", "83160d71": "setPrices(uint256,bool)", "8316394e": "allow(bytes32,string,address,bool)", +"831640cf": "genCgold(uint256)", +"83170094": "closedRequests(uint256)", +"83171813": "getRegisteredWebsite(address)", +"8317e91d": "philosophersToken()", +"83180aa4": "Winner(address,uint256,uint256)", +"83183aec": "updateOptionsProvider(address)", +"8318589c": "withdrawBas(address,uint256)", +"8318592e": "setLimit(uint256,uint256[])", +"83185e7c": "OwnerTeamFeesCollectorRead()", "83186be0": "startICO_w1()", "83187cf4": "cryptaurRecovery()", +"8318c444": "canSwapTokens(address)", +"8318e172": "rejectSale()", "8318e40b": "transferBcoupons(address,uint256)", +"8319046b": "getUserInfoAt(string,uint256)", +"83191882": "getDelayedPeriods(address)", +"831946c7": "MAX_BURN()", +"8319790b": "TransferStateChanged(address,bool)", "83197ef0": "destroy()", +"8319bcf7": "ownerRemoveTokens(address,uint256)", "8319da07": "setOwnerCut(uint16)", "831a1754": "TOKENS_HARD_CAP()", "831a1a3c": "ECPoints()", +"831a292e": "getWithdrawSigns(uint256)", "831a987a": "getSoulByEth(uint256)", "831aab01": "setData_15(string)", "831aba43": "referralsOf(address)", +"831ac82b": "Transfer(address,address,uint64)", "831b19c2": "KOToken()", "831b3f67": "convertDustToEther(uint256)", "831b55d6": "get_balance(address,uint32)", +"831b64cc": "mintTeamAndAdvisorsYear1Part4(uint256)", "831bb4f2": "setAcceptedLegacyAugmintToken(address,int256,bool)", "831c2b82": "getChannel(bytes32)", +"831cc04f": "quitLastTime(uint256)", "831d3e09": "offFreezing()", +"831d520d": "test_read()", +"831d65d1": "handleAckPackage(uint8,bytes)", "831dc22c": "CATCrowdsale(uint256,uint256,uint256,address,address,address)", "831e0485": "twitterIdOfClaimerAddress(address)", "831e1deb": "changeExchange(uint256)", +"831e4195": "approve_547(address,uint256)", +"831e60de": "getCurrentCost()", "831e6270": "isSaleFinalized()", "831e80f2": "create(string,string,uint8,uint256)", +"831e9b85": "alterPrizeShare(uint256)", "831ed348": "clearJoinedCrowdsales()", +"831f424f": "createSticker(uint256)", +"831f4df1": "aOHM()", "831f5ad2": "remainBalanced()", "831f750e": "claim(address,string,string)", +"831ffd05": "artistAddresses(uint256)", "832018aa": "BitSelectProtegido()", "832048d4": "TokenLoot(address,address,address,address,address,address)", "83206e78": "marriedAt()", +"83209c3f": "nextCollectRoundStartBlock()", +"8320a4c3": "LogWithdrawCredits(address,uint256)", +"8321045c": "get3()", "83212e74": "updatePreSaleCloseTime(uint256)", "83219a8a": "editMetadata(uint256,string)", +"83220626": "currentSeed()", +"8322bc9a": "getOngoingBetSender(uint256)", "8322cb91": "addTicket2(address,uint256)", +"8322ed67": "yourStakedTokens(address)", +"8322febd": "honeyPerBlock()", "8322fff2": "ETH()", "83234aa6": "FileInfoManager()", "8323550b": "TUSD()", +"83235a0a": "getOrganizationInformation(address)", "8323bebb": "TokenSold(address,uint256,uint256,uint256)", +"8323c81c": "getOfferingTokens(uint256)", +"8323d961": "servicePoolDays(address,uint256)", +"83240f83": "actions(uint256)", +"83243ff9": "dup()", +"83247976": "loadc()", +"83249ef9": "getCurrentStrategy()", "8324a852": "partner(address,address,uint256)", +"8324c203": "xInit()", +"83250f79": "isAssetProxyRegistered(address)", "8325229a": "playerWithdraw(address)", "83253cfa": "cancelMarginCallOnBehalfOf(address,bytes32)", +"832543ed": "marketingFeePercents()", "83255d6e": "getOwnProducts()", "8325a1c0": "borrowInterestRate()", +"83273cd1": "totalReleasedAmount()", +"832749a0": "getAIStats(address)", +"83278155": "_swapFee()", "8327a313": "test_initialize()", +"8327edf3": "updateowner(address)", +"8327ffc2": "getSupportedTokensList()", "832880e7": "getUser()", "83289567": "meetingDate()", "8328b610": "setStakingRequirement(uint256)", "8328dbcd": "migrationAgent()", "8328e032": "setStandardPackPrice(uint256)", +"832912b5": "setPhotoHash(uint256,string)", +"832913f7": "registerDev234(address,address,address,address,address,address)", +"83297be0": "REIGAI09()", "8329ac52": "voteForCandidate(string,string)", "8329df0a": "allowReferrals()", +"832a253a": "Unlock(uint256)", +"832a3035": "getCurrentTWAP()", "832a66a2": "purchaseCardinal()", +"832a969b": "initialSupplyInWei()", +"832b0490": "getUserLevelPercent_1(address,uint8)", "832b0dc3": "testThrowOnTransferToNullAddress()", "832b2c60": "specialManagerAddressNumberMap(address)", +"832b7c1f": "getValueViaOneInch(address,address,uint256)", "832b9eb2": "MANHATTANPROXY6THAVE()", "832bc28d": "getPoolHistoryCount()", "832bff3a": "setForkEndTime(uint256)", +"832c2e40": "stakedContractCurrentCommissionIndex(address)", +"832c962a": "flashloanPunk(uint256,uint256,bytes,bytes)", +"832d23ec": "_BIDDER_PERMISSION_()", +"832d9263": "feePaidTotal()", +"832daf06": "aaveUni(address)", "832df980": "lockEmission()", "832e02ef": "getUpgradeValue(address,uint256,uint256,uint256)", +"832e3ec2": "onesplitSlippageMin()", +"832ef914": "GetSiteStats()", +"832efb5a": "_currentTokenID()", "832f6412": "getCenturion(uint256)", "832f6924": "shuliang()", +"832fa91b": "drip1Token()", +"833016c0": "setVotingMinority(uint256)", "83315b6e": "CONTRACT_FEATURES()", "83318574": "maxPreSaleStage()", +"8331d0d4": "guessAdmin()", "83324e8c": "numGroups()", "833270d8": "preIcoEnd()", "833331e8": "totalJadeProduction()", +"833381ce": "interestTotal(bytes32,uint256)", +"8333d9b2": "executorType()", "8334278d": "reserves(uint256)", "83343d80": "deleteItem(bytes32)", "833472ba": "TCOCOIN()", @@ -75080,22 +137385,38 @@ "83349122": "crowdsaleIsOpen()", "8334d195": "viewToken(uint256)", "8334e170": "SellableToken(address,address,address,uint256,uint256)", +"83356843": "votedFor(uint256,uint256)", +"83357620": "performanceStrategistFee()", +"8335e59a": "numVoters(address,uint256)", +"8335fc21": "setConvertor(address)", +"83363bcf": "verifyRoot(bytes32)", "83366ab0": "addBytes(bytes32,bytes)", "8337077b": "returnToken(string,address,uint256)", "83370c25": "FFFToken()", "833747f8": "getLovers(bytes32)", "8337680a": "getMyCommitmentCount()", +"8337782d": "exchange(address,address,address,int128,int128,uint256,uint256)", +"8337fd44": "isLongNightFinished(uint256)", "833888f0": "LAF()", "83393882": "contracteeWithdraw(uint256)", +"8339be50": "aTotq()", +"8339df64": "transferBeneficiaryShipWithHowMany(address[],uint256)", "8339e153": "SETPointerToken()", +"833a6c9e": "_erc20Address(uint256)", +"833a7c46": "getCommitHash(uint256,address)", "833abf3a": "registerAssetProxy(bytes4,address,address)", "833b1fce": "getOracle()", "833b4596": "testApproveSetsAllowance()", "833be5d5": "getTotalLoans()", "833c202e": "UNITTransferWhiteList()", +"833c5e1d": "fre()", "833cde52": "SaleToken()", +"833ce3e1": "updateTGE(uint256)", "833cf6fc": "TransCompleteds(address[])", "833d56c7": "doSwarm(address,uint256)", +"833d84c9": "rewardsPerPool()", +"833e231e": "cTokenAddress()", +"833e8bb6": "increasePool(uint256)", "833ea306": "soldForThird()", "833eaa8b": "incise(address,uint256)", "833eccc5": "batch_transfer(address[],uint256[])", @@ -75103,63 +137424,119 @@ "833ffb63": "removeOverride()", "83405ddb": "unstakeCommunityTokens()", "83408d73": "burnRemainingTokens()", +"8340bbce": "votingPeriodLength()", "8340f549": "deposit(address,address,uint256)", +"8341301a": "chainLinkTokenEthPriceFeed(address)", "8341f26c": "icoTokenLimit()", "834292a3": "CanYaCoin(address)", "8342a9d9": "crowdfund()", +"8342e3dd": "setLPRestrictions(address,bool)", +"83436271": "setUserFlag(address,uint256)", "8343816d": "AcceptCastleOffer(uint256)", +"8343a861": "removeMintingRights(address)", +"8343b8d6": "keepMph()", "8343e416": "asideTokensHaveBeenMinted()", +"8343f4ef": "setdUSDEthOracle(address,address)", +"83441630": "currentAddressCount()", "83442b1e": "opt(address)", +"834450d3": "getGHTAmount(address)", +"834454dc": "SetDividendGrace(uint256)", "834472a5": "buildICOStageOne()", +"8344cd10": "getMrPoolDynamicReward()", "8344d26d": "TryUnLockCreatorBalance()", +"8344d623": "isMintToken(address)", +"8345245e": "isAllowedAddress(address)", +"83454832": "asETHCollateral(address,uint256,uint256,address)", +"83454ef2": "checkHA(address)", "834614dd": "freeSub(address,uint8,bytes32)", "8346378b": "transferBenship(address)", +"83465b82": "hasEverBeenMiningAddress(address)", "8346aa47": "spentParsecCredits()", "8346d3c6": "MultiVesting(address)", "8347a0d1": "issueTokenAndTransfer(uint256,address)", +"8347d6de": "luc()", +"8348198b": "refRequired()", +"8348500d": "compose(uint256[],uint256[],uint256)", +"834888af": "Top3DoiCoDuongChayDaiNhat()", "8348bfb9": "setICOAddress(address)", +"8348c569": "getProposalNameByElector(address)", "8348cf1e": "authorizeAmount(address,uint32)", "8348d71f": "strConcats(string,string,string)", "8348fe61": "createCenturion()", "83492ff1": "deletePrice(string,string,string)", "83499fdf": "BitcoinRed()", +"8349b64c": "permitAndDepositDai(address,address,uint256,uint256,bool,uint8,bytes32,bytes32,uint256)", +"8349f4d6": "getModelCalculator()", +"834a2d47": "Remove(string)", +"834a71bf": "addVotes(uint256,bool)", +"834a9cf5": "approveOrRejectLoan(uint256,bool)", +"834af36d": "uponTransferSgrToSgnHolder(address,uint256)", "834b1aa1": "m_owner20()", +"834b55e0": "createServiceAgreement(uint256,address[],bytes32[],uint256[])", +"834ba993": "oneSplitParts()", +"834bc594": "setCurrentToken(address)", "834be978": "getRewardedSumByRound(uint256)", "834c3351": "getGoldDataWeight()", "834c6c84": "setCCH_edit_19(string)", "834cc6fc": "createEscrow(address,address)", +"834ce050": "getEscapeRoomAdminDetails()", "834d42c6": "serverForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"834d5fac": "avatars(uint256)", +"834d8185": "protected()", "834e0565": "GiveRNG(uint256)", "834e476f": "newAuctionID()", "834e6261": "CreateICO(address,uint256)", +"834edf41": "registeredKTokens(address)", "834ee417": "start_time()", "834eebe8": "calculatePremium(uint256,uint256,uint256,string,string,string)", "834f199d": "_calculateRequiredManaAmount(uint256)", "834f54d0": "CarPark()", +"834ff739": "isConsumer(address)", +"83505096": "unredeemed(uint256)", +"83506c4d": "WayfarersTaxesClaimed(address,uint256)", +"83506c84": "swapETHPool(uint256,address,address,uint256)", "8350dfaf": "fetchdivstopot()", "8350eb5e": "getHashInDataObject(bytes32[])", "835164a0": "INBCToken(uint256,string,string)", "8351a0d4": "getCumulativeProfit()", +"8351e563": "impactProvider2()", +"8352536f": "getWalletsFromUser(uint256)", "83525394": "NONE()", +"83532667": "setUnderlyingPrice(uint256,uint256)", "83533d63": "setNumAffirmationsSigned(bytes32,uint256)", +"835353f7": "adjustTrove(uint256,uint256,bool,address)", "83537b5f": "test_threeValidEqInt()", +"83538325": "mods()", "8353bb51": "ROLE_STATE_PROVIDER()", "8353c9c8": "SetFreezingEvent(address,uint256,uint256,uint8)", +"8353fb30": "postArticle(string,string,string,uint8,string)", "8353ffca": "Withdraw(uint256,address)", +"8354008d": "set_KyberInterfaceAddresss(address)", "835409f0": "InfimonkCoin()", +"8354176e": "finishRace(uint256,uint256[])", "835436b4": "evictWorker(address)", +"83557837": "burnDeposits()", "835592f8": "passed(address)", +"8355ae81": "accruedBonusCurrent()", "8355c263": "frozenMinDeposit()", "8355e15c": "withdrawTokens2(uint256)", "8356027e": "unfrozenTokens()", +"835609db": "getUserMatchOrder(address)", "83563dc6": "_getYear(uint256)", "83565503": "setMember(address,bytes32,address,bool)", "83565cc7": "additionalAction(bytes32,uint256[])", "8356a5b5": "weekOneStart()", +"8356ca4f": "transferProxyAdmin(address)", "8357417d": "WithdrawDevFunds()", "8357c2f0": "setAmountToReceive(uint256)", +"8357ce36": "remainingIssuableSynths(address,bytes32)", +"8357f987": "participateLottery()", +"835800dc": "updateOracleDecimals(uint8)", "835850f9": "_bytesToAddress(bytes)", +"835854b5": "synthToInversePynth(bytes32)", "83586713": "computeResult(uint32,uint32)", +"8358d921": "getExchangeFeeRate(bytes32)", +"8358f057": "payinterest(uint256,address,uint256)", "835939d5": "vote(address,bool,string)", "8359f045": "range(int256,int256,int256)", "835a749d": "partialRedeem(uint256,address[])", @@ -75174,134 +137551,262 @@ "835c853b": "notaryFee()", "835cb53b": "MAXIMUM_NON_WHITELIST_AMOUNT()", "835d2d2e": "executeTransfer()", +"835d7ea4": "drinkIdToOwner(uint256)", +"835d7f10": "DistributeOpened()", +"835dada0": "accountDeposits(address)", +"835dd02e": "eveSetAffID(uint256,address,uint256,address)", "835e119c": "availableSynths(uint256)", +"835e269e": "Table(uint256,string,string)", "835e33e7": "DianJingToken()", +"835e8e2d": "mintProposals(address)", "835e98d7": "bonusShare()", "835eb9f8": "ShieldNetwork()", "835ec6ef": "CreateDDFT(address,uint256)", +"835ee9f0": "setSeasonInfo(uint256,uint256,uint256,uint256,uint256)", "835f6775": "setBonusesForAmounts(uint32[],uint32[])", "835fa3ac": "icoSuccessful()", "835fc6ca": "withdrawal(uint256)", "835fcab3": "NAME_HAWKING()", +"835fe8bf": "unstakeSTBZ()", "836028a2": "disputeOpen()", +"83602d5c": "UNIPCT()", +"83607659": "Lim()", "83607b02": "calculateDevCut_(uint256)", +"8360c185": "ring()", "836115fe": "unlockedTokens(address)", +"83611ff3": "setMultiplierLookup(uint256[4][4])", +"83613a95": "depositSome0(uint256)", +"83613ca8": "updateCommissionHolders(address,address,address,address,address)", +"83614a77": "withdraw2(uint256,uint256)", "83617782": "startLive()", +"8361d0eb": "getMockPrice(address)", "83624c17": "getPartyA(bytes)", "83627b8e": "getEmployeeId(address,address)", "8362f6eb": "balanceSender(address)", +"83631a73": "YZYVault()", "83634ad7": "fnv(uint256)", "83636209": "RecoveryKeccak256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "83638710": "getOwnerOf(uint256)", "83638c12": "GCOIN()", "83640881": "getTokenOrdersLength()", +"83642d82": "setJackpotAddress(address)", "8364c078": "ownerGetUser(address)", +"8364f025": "add_product_component(uint256,uint256)", +"836509ba": "getAddressquranStakeAmount(address)", "8365172c": "num_levels()", +"83655467": "swapTokensForEth(address,uint256,uint256,uint256)", +"8365ab41": "gameStake(uint256,uint256)", "8366437d": "RegisterUser(bytes32,bytes32[8])", "83664dd3": "substituteManagerContract(address)", +"8366a205": "devFinishTime()", "8366ee2b": "getPayeeLenght()", "83672f3e": "setWallets(address,address,address,address)", +"83677498": "setPISVaultAddress(address)", "8367e120": "apiUrl()", +"8368071c": "BREEDING_LIMIT()", "836826a6": "highestBet()", +"83684bbb": "link(bytes7,uint256,bytes)", +"83685135": "setMinReserveRatio(uint256)", "83685488": "TECHToken()", "836880d3": "softcapAchieved()", +"8368909c": "emissionEnd()", +"8368cca3": "_balancesPurchased(address)", +"8368e79f": "getNumCheckpoints(address)", +"83695950": "confirm_sale(uint256,uint256)", +"83699275": "streams(address)", +"8369b1df": "getTokenHandlersLength()", +"8369bbaf": "validateCancel(uint256[],bytes32[],address[])", "8369ff08": "log2ForSmallNumber(uint256,uint256)", "836a1040": "mint(uint256,address,uint256)", "836a107f": "removeFromKYCList(address)", "836a1e23": "collectExcess()", +"836a9047": "initialTransfer(uint256,address,uint256)", "836adfd9": "libbibatchbacktest(uint64,uint32[],uint64[],uint64[],int64[],int64[])", +"836afead": "revokedOn(address)", +"836b012a": "EscrowWallet(uint256)", "836b680f": "createProductionUnit1()", +"836c081d": "currentToken()", "836c67d7": "BAC()", +"836cae65": "addBroker(address)", "836cca1d": "privateIcoMax()", "836d6d66": "WeeklyLotteryB(address,uint256)", "836d8b2a": "SolusPlatform()", "836d9665": "removeUsersWhitelistA(address[])", +"836db2a4": "MintedReserved(address,uint256,uint256)", "836dea0b": "myEther()", +"836e1419": "getico1()", +"836e2308": "depositArbCheck(address)", "836e4158": "numOrdersOf(address)", "836e643f": "endStake(address,address,uint256)", "836e8180": "round1()", "836e9431": "updateUsersList()", +"836ee4f5": "updateStakingPoolsReward()", +"83701599": "UNISWAP_FACTORY_B()", +"83709f20": "checkIsDonator(address)", "83711c70": "ContributionResolved(bytes32,bool,address,address,uint256,uint256)", "83714834": "factorial(uint256)", "83714b27": "_safeMul(uint256,uint256)", "837150cf": "paused(bool)", +"83715fb9": "sav3xrp()", +"83716616": "mNewConfig()", +"83717bef": "nstTokenCount()", "837197b2": "sendTokens(address)", "8371e1e9": "rescale(int256)", +"8371ffd5": "newXIONexchange(address)", +"837228d5": "isSendGiftOpen()", +"8372537d": "multiSignForDepositTRC20(address,address,uint256,uint256)", "83725a91": "Payment(address,address,uint256,uint256,address,uint8,uint256)", +"83732415": "graceDividend30(address)", "837356b1": "doNotAlwaysRequireCosignature()", "837381fa": "withdrawFromContract(address,uint256)", "837386ca": "candidateXPAAssets()", "83739eda": "allocationsInitialised()", +"8373a7ab": "stddev(uint256[])", "8373ae71": "cancelTradeOffer()", +"8373f265": "getExpectedReturnWithGas(address,address,uint256,uint256,uint256,uint256)", +"83740586": "nifity()", +"837467eb": "teamTimelock2()", +"837479c9": "cachedPrices(address)", "837564dd": "CNotes(string,string,uint8,uint256,uint256)", +"83758db0": "devBTeamWallet_()", +"837592db": "removeAsset(bytes32)", +"8376a782": "updateCachedPynthDebtWithRate(bytes32,uint256)", "83771e56": "BSCToken(uint256,string,uint8,string)", "83773de8": "_transfer(uint32,address)", +"8377e89a": "changeIncentiveAddress(address)", "83781340": "registerTradeProfile(bytes,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,bytes,uint256)", +"837851c4": "aaveCollect_Cooldowned_AAVE()", "83786f8c": "getBalanceOfToken(address)", "83788fce": "nextBlock()", "8378ce42": "readStamped(bytes32)", +"83791763": "GetAvailableBalance(address)", "837929b6": "getEventful()", +"83792f25": "withinOverruleWindow(uint256)", "83794502": "payForTask(uint256,uint256)", +"837959a7": "retrieveToken(uint256,address)", +"837971e4": "drain(address,address)", "8379d75b": "BDC()", "837a7ba5": "testThrowTransferDisabled()", +"837a8132": "MintLock()", "837a8eb3": "CATWithdrawn(uint256)", +"837a9bc7": "get_current_epoch()", "837ada41": "cens()", +"837b2d1d": "isEscrow()", "837b68c8": "requestTokenExchange(uint256)", +"837c70ef": "tknContractAddressLocked()", "837cfb34": "LADYCoin(uint256,string,string)", "837d52d8": "RAIT()", +"837d64e8": "finalizeWhitelist(address)", +"837dabbc": "account_share_bonus(address,uint256)", "837e4cd9": "getNameAndAge()", "837e60e6": "removePA(uint32)", "837e6a94": "setOverride(address)", "837e7cc6": "rollDice()", +"837e842d": "getUserAmount(address,uint256)", "837f1bf7": "_appendTagged(string,string)", +"837fa2b0": "affiliateFeeDivisor()", +"837fb7c9": "SPOT_MARK_THRESHOLD()", +"837fd3dc": "tradeVolume(address)", "838006c0": "OwnableOZ()", +"83801a88": "setParams(uint256,uint256,uint256,address)", "83804c69": "verifyTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes32,bytes32,bytes,bytes)", +"83805742": "lockers(address,bytes32)", +"8380b4a8": "getAllGuessers()", +"8380bb92": "LOG_PolicyAccepted(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "8380edb7": "isUnlocked()", +"83812cc5": "convertAll(uint256[])", "8381ada3": "GOLDEQ()", +"8381e182": "unstake(uint256,address)", "8381f58a": "number()", +"83825ced": "getCurrentEpochTimestamp()", "83829bf1": "Involve()", "8382a574": "Factory(address,bytes32,address)", "8382b460": "getSlashRewardPart(bytes32)", +"8382d1b2": "lastStakeContractBalance()", +"838329f4": "esc(address)", "83835c01": "accuracy()", "8383671b": "mintTokens1(address,uint256,uint256,bytes32)", "8383bfc8": "EscrowFoundry()", +"8383cca8": "_resetPrice()", +"8383ff68": "notifyArchive(uint256,address,uint256)", "83841e0c": "change(string,string)", "838445e8": "EtherAds(address,address,address)", +"8384c2bf": "ExecuteLookUpS(string,string,string,string,uint256)", +"838511b9": "setRestaking(uint256,address,bool)", "83852cf6": "setEnablePurchase(bool)", +"8385eae0": "totalTickets(uint256)", "8385fa0f": "ESCROW_WALLET()", "838661eb": "unfreeze_periods()", +"8386778e": "End(uint256,uint256,address,uint256,uint256,uint256)", "8386927a": "ToSponsor()", +"83874127": "fund_rescue()", "83876bc9": "newProposalInWei(address,uint256,string,bytes)", "83879c15": "cooRemoveManager(address)", "8387aa39": "addChainlinkExternalRequest(address,bytes32)", +"8387c6e1": "userFunds(address)", +"83880e51": "rewEn()", +"83886c4b": "JUNIOR_MEMBERLIST_ADMIN3()", +"8388832f": "claimOtherToken(address,address)", +"8388960f": "getSupportPair(uint256)", "83894548": "getTokenBalanceOf(address)", +"83895b96": "getWrapFee(address[])", "838985d7": "gymFee()", +"8389af70": "kmj()", "8389f353": "setNumCities(uint256)", "838a05e4": "part20Transfer()", +"838a23ac": "TokenMinUpdated(uint256)", "838a48d6": "disableBlackListForever()", +"838a69f8": "HAREM()", +"838b6b67": "approve_262(address,uint256)", +"838ba176": "fundStream(uint256,uint256)", "838bdce2": "team3Token()", +"838c0039": "removePoolAddress(address)", "838c29b6": "checkInterval()", "838c63b7": "avgRate()", "838ca346": "currentFunds()", +"838cb4b2": "bidLoan(uint256)", +"838ce480": "setExtendAddressesProvider(address)", +"838ce705": "subscriptionAccessIsFree(address)", "838d6e05": "getChannelInfo(uint256,address,address)", +"838d9d84": "totalwiseBalance()", +"838dced0": "pushWhitepaper(address,uint256,string)", +"838e0161": "lockduration()", +"838e6a22": "viewOriginSwap(address,address,uint256)", +"838e7c3a": "update(address,string)", +"838e9c76": "unstakeFrozenTime()", "838eb17e": "takeSnapshot(uint256,uint256)", +"838ecc8f": "getNumberOfDepositors(uint256)", "838f0602": "SOLEToken(address,uint256)", "838f5165": "refundFor(address[])", "838f7f94": "getTotalAmountOf(uint256)", +"838f83d8": "transferManagement(address,address)", +"838fcc90": "getMarketingAccount()", +"83900312": "teamTurnOver(uint256,uint256)", "839006f2": "rescue(address)", +"83904978": "setKeyAddressWithKeyAddress(bytes)", +"83904d68": "setMaxTransferFee(uint256)", +"83906e4e": "getMintFixed(address)", "8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", "83914275": "getUserBonusBalanceByType(address,bytes1)", +"83914540": "YEAR()", "83917229": "_createGameItem(string,address,uint256,uint256)", "8391a1c4": "get_table_size(uint256)", "8391e45c": "dividendsOwing(address)", "8391e48d": "WCoin(uint256,string,uint8,string)", +"83920e90": "getTransactions()", "83924dea": "MyTestToken(uint256,uint256,string,string)", +"8392b8c0": "setReserves(uint256,uint256)", +"8392fe31": "purchases(uint256)", +"8393b75f": "debitNote(address)", +"8393d885": "flashloan(address,uint256,address,address,address,address,uint256)", "83944a4b": "CreateWTE(address,uint256)", "83947ea0": "acceptRelayedCall(address,address,bytes,uint256,uint256,uint256,uint256,bytes,uint256)", "839484a7": "Iou_Token()", +"83948e8a": "referralCashout()", "8394f639": "SimpleExchange(address,uint256)", "83955bb2": "SpecialPurchased(address,uint256,uint256)", "8395aa94": "PLATINUM_AMOUNT_SKL()", +"83960a1d": "getMaxBuyBatch()", "83960e3c": "importTokens(address,uint256,address)", "8396392d": "add(string,string,string,address)", "839655c8": "BetOnHardFork()", @@ -75311,183 +137816,347 @@ "8397a260": "getAction(bytes,uint256)", "8397cc94": "tokenFallback(address,uint256,bytes32)", "8397f3bc": "isBonusPayable(address,string,uint256,uint256,uint256,uint256)", +"839825a7": "registery(address,bytes32)", "839849c0": "changeBaseMultiplier(uint256)", "83985082": "disarm()", "83988ef5": "accountNoneFrozenAvailable(address)", +"8398b0e4": "ChainAdded(string,uint256)", "839930ba": "getMinimumBet()", "839972f9": "lockToken(address,uint256,uint256)", +"839975bb": "minBurnAmount()", "83999223": "release_all()", +"8399bac9": "pendinggamer(uint256,address)", "8399f93f": "reservedFund()", "839a01be": "privateLockedAmount()", +"839a4257": "canLiquidate(address,address)", "839acf14": "buyMonument(uint256,uint256)", "839affc3": "batchDepositTokenTo(address[],address[],uint256[],uint256)", "839b2386": "ReverseRegistrar()", "839b240e": "setHardCapCrowdSale(uint256)", "839b913e": "getTargetReportsPerLimitedReporterMarket()", +"839bf1b6": "globalInvest()", +"839c01ec": "joinEthJoin(address)", +"839c506c": "legacyDollar()", +"839cf22e": "Finalized(uint256)", +"839d22b9": "setThresholds(uint256,uint256,uint256,uint256)", "839daf1d": "migrate2(address,uint40,uint40,address,address)", "839dbbb1": "iconicsCount()", +"839dc732": "setTokenMetadataDomain(string)", "839df945": "commitments(bytes32)", +"839e33cd": "mergeAstros(address,uint256,uint256[])", +"839e9053": "getDeployed()", "839ea3c4": "startVotingTeam(uint256)", +"839ec546": "initAccountsWithHolds(address[],uint256[],uint256[])", +"839f5fb8": "_getAdmin()", "839ff719": "FML()", +"83a06289": "buyNewLevelProfit(address[],uint256[])", "83a076be": "gift(uint256,address)", "83a07765": "drawTicketCount()", +"83a0afec": "getAreaPerformance(address)", +"83a12de9": "setConfigAddress(address)", "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)", +"83a22abd": "changeBasePercentage(uint256)", +"83a23811": "setLimaToken(address)", +"83a27f4e": "totalRewardMEDAL()", "83a287dd": "closeGame(bytes,address,uint256,uint256[],bytes,bytes)", +"83a2b216": "getReleasedCountByRoundAndHolder(uint256,address)", +"83a2fcdf": "commitETH()", "83a37262": "stopQueueing(uint256)", "83a41f93": "descentX()", +"83a4baa0": "_isPrevUser(address,address)", +"83a4df70": "mintOnAvatar(address,uint256)", "83a4f2f5": "whitelistOperators(address)", +"83a5041c": "initialize(address,address,uint256,uint256,uint256,uint256,address)", "83a51213": "takedaily(address)", "83a51ad0": "oraclize_setConfig(bytes32)", +"83a6293b": "getInstaRegistry()", "83a6595f": "setMinDonation(uint256)", "83a68993": "gameOp()", "83a6ad6b": "grantAccessDeploy(address,address)", "83a6b565": "payCommission(uint256,uint256)", +"83a71f7e": "startShipment(uint256,bytes32,address,address)", "83a74acc": "gift(uint256,uint256)", +"83a782ac": "AllOrdersCancelled(address,uint256)", +"83a7b0c8": "changeRefferalReward(uint256)", "83a7b701": "masternodeRegister()", +"83a815b1": "AuctionBoughtEvent(uint256,address,address,uint256)", +"83a8b0ed": "WITHDRAW_ENABLE()", "83a9094f": "PRICE_RATE_THIRD()", +"83a96524": "_fix()", +"83a99576": "createArtwork(string,string,string,string,string,uint256,bool,uint256,uint256)", +"83a9bf79": "addLiquidityPool(address,address,uint256)", +"83a9c85c": "setFundPriceConsumer(address)", +"83aa1cfb": "bondDeadlineInc()", +"83aa42d8": "smallCheckOut(address[])", "83aa4958": "getContributeAmount()", "83aa9985": "ownerTwo()", +"83aaaa63": "setRewards(address[],uint256[],address,uint256[])", "83ab12e7": "Auctions()", +"83abaa0a": "withdrawBenefits()", "83abd7e2": "removeIdentifier(address,bytes32)", +"83abdb28": "PresaleWeiRaised()", +"83abe676": "_stakeStartBonusHearts(uint256,uint256)", "83ac44e6": "marketingAccount()", "83ac4ae1": "_sendWinnings()", "83ac98fe": "transfer_Different_amounts_of_assets_to_many(address[],uint256[])", +"83acad57": "claimSolverDeposit(bytes32)", +"83acafc4": "slidingOracle()", +"83acb48a": "maintenanceMarginRatio()", +"83ad02f2": "Wallet_Name()", +"83ad795f": "PRICE_SET(address,uint256,uint256,uint256)", +"83ad939b": "setPricePerSpacetimeUnit(uint256)", +"83ada343": "LogOwnerShipTransferInitiated(address,address)", +"83ada708": "sendToHotWallet(address,uint256)", "83ae0839": "ETNToken()", "83ae5266": "addCertificate(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,string,bytes32[],bytes32[])", "83ae62c4": "_frozeAmount()", +"83ae8e0c": "marketStatus(uint256)", "83aec57c": "getUsersForDate(uint32)", "83af3c40": "getRemainingTokenAmount()", +"83af6ed0": "setGiveEth(uint256)", +"83afd6da": "progress0drop()", +"83afd934": "eCancelOrder(address,address,uint256,address,uint256)", "83b01a83": "updateTAOContentState(bytes32,address,bytes32,uint8,bytes32,bytes32)", +"83b060ba": "taoPerBlock()", "83b14c0a": "toAddr(uint256)", "83b23b40": "cEthereumlotteryNet()", +"83b24c52": "closeDeposit(uint256)", +"83b25b89": "tokenV1()", "83b2c476": "updateLibrary(address)", "83b2d77f": "signFact(bytes16)", +"83b316c0": "signatures(uint256,address)", +"83b35d58": "processMessageFromRoot(bytes)", "83b3999a": "addToAddresses(address,address)", "83b3c85f": "pecul()", +"83b3de18": "path2(uint256)", "83b40eb7": "creditEqually(address[],uint256)", +"83b43589": "initialize(address,address,address,string,string)", "83b47a4d": "whitelist_addys(address[],bool)", "83b4918b": "reinvest(uint256)", "83b49485": "BurnablePayment(bool,address,uint256,uint256,string,string)", +"83b54a81": "flashLoan(uint256[3],uint256)", +"83b5570c": "nTokensCredited(address)", "83b572d1": "getPlayerStake(uint256)", "83b58323": "setTransferFeePercentage(uint256)", +"83b5d566": "returnAllProjectsUSDT()", "83b5ff8b": "ownerCut()", "83b60a33": "transferToken(uint8,address,uint256)", "83b665b9": "purchase(uint152,uint256)", +"83b6a409": "contract_AMM_liquidity(uint256,bool)", +"83b6d6b7": "storeEarliest()", +"83b71871": "registerRelayServer(uint256,uint256,string)", +"83b74baa": "batchMint(address[],uint256)", +"83b76191": "withdrawHT(address)", "83b7db63": "getExtensions()", +"83b801c0": "withdrawAnft(uint256)", "83b83c1c": "setOpGas(uint256,uint256)", "83b8b9f0": "ForceCloseContract()", "83b8c8f6": "bonusLevel100()", +"83b8e145": "syncPools()", +"83b901c4": "approve_795(address,uint256)", +"83b9d7f9": "_repay(address,address,uint256)", "83b9e9f7": "train3(uint256)", +"83ba1afc": "getDiscountedCollateralPrice(uint256,uint256,uint256,uint256)", +"83ba31b2": "usersX3Matrix(address,uint8)", "83ba3a97": "sendTeamSupplyToken(address)", +"83ba6b59": "getMinterLimit(address)", +"83ba7866": "init(address[],uint256[],uint256[],bool)", "83baa6f4": "presaleopeningTime()", +"83bad1af": "boughtTokens(address)", +"83bb8ca9": "ZTHPrize(address,uint256)", +"83bc01e9": "gStats(uint256)", +"83bc87af": "setFRAXPriceOracle(address,address,uint256)", "83bd5f42": "distributeDevCut(uint256)", "83bd72ba": "stopGame()", +"83bdc931": "preOpen()", +"83bde608": "tlocked(address)", +"83be5653": "stakeFPTB(uint256,uint256)", +"83be82a3": "testBytesGet(uint256)", "83be9d54": "placeBet(bytes32,address)", "83bebcc2": "changeSellPriceForAthlete(uint256,uint256)", "83bebced": "_rate()", +"83beeedb": "rescueLostTokens(address,uint256)", "83bf1cbc": "delayDefaultRelease()", "83bf4609": "createTemplate(string)", +"83bff14f": "betsHistory(address)", +"83c00935": "setCardUri(uint256,string)", +"83c0101b": "harvest(string,uint8)", "83c08784": "Incrementer3()", +"83c09d42": "pegOut(address,address,uint256)", +"83c0cc8e": "setOraclePaymentAmount(uint256)", +"83c0cdef": "changeUnisageAddr(address)", "83c0dd25": "LogNewAllocation(address,uint256)", "83c10844": "percentLeftFromTotalRaised()", "83c17c55": "setFactoryAddress(address)", +"83c19822": "Derivation(uint64)", "83c1f2e6": "unlb()", +"83c2120c": "setUserUseReserveAsCollateralIfNeeded(address)", "83c218c2": "oraclizeId2proposalId(bytes32)", "83c28ddc": "getRefundAmountForFunder(address)", "83c28ecc": "getTokenWithdrawHold()", +"83c3275c": "manageRoleState(address)", +"83c361a8": "userWithdraws(uint256)", "83c3bd6b": "isEqualLength(address[],uint256[])", +"83c4b7a3": "sessions(uint256)", "83c4c2e9": "makeSuccessor(address)", "83c4cc46": "StartCrowdsale(address,address,uint256)", +"83c4ecfa": "ablt()", "83c51a38": "thesimplegame()", "83c56fc8": "dailyTotals()", "83c592cf": "stake(uint256,bytes32)", +"83c5b025": "governanceFeeInMKR(bytes32,uint256,address)", "83c5e3c9": "removeBRA(address)", "83c68f48": "AIChain()", "83c6aa47": "arrangeUnsoldTokens(address,uint256)", +"83c6d1df": "AccountBalanceIncreasedEvent(address,uint256)", +"83c73c4b": "isOwnerMap(address)", "83c75ed5": "setGatewayB(address)", "83c7d7c1": "sumMultiplayer()", +"83c7ded7": "recollateralizeFRAX(uint256,uint256)", "83c7f14c": "bytesToBytes4(bytes)", "83c81bec": "Arbiter(address)", +"83c962bb": "noArgs()", "83c99722": "lockforTransfer()", +"83c9db6e": "pendingReporterAddress(address)", +"83c9dfd3": "requestSwapEthForExactTokens(address,uint256,uint256,uint256)", +"83ca4b6f": "burnBatch(uint256[],uint256[])", +"83ca6b5d": "k1(uint256)", "83ca8632": "_getCrabPartData(uint256)", +"83cb17f8": "getBestPriceSimple(address,address,uint256)", "83cb2fee": "INITIAL_SEED_FARMING_AMOUNT()", +"83cbd459": "_hashVote(uint8,bytes32)", +"83cbf1f3": "jgdengjibdcpeth()", +"83cc7660": "branches(uint256)", "83ccc2b5": "_0xBitcoinCash()", "83ccc8b8": "getEtherContributed()", "83ccdcc3": "detailsOfWindow()", +"83cce77e": "NotaryAddedToOrder(address,address)", +"83ccfb84": "complete(bytes32)", "83cd5e13": "debug_multiplehash(uint256,uint256)", "83cd9cc3": "setDelegator(address)", "83cdb517": "transfer_to_0(uint256)", +"83cdcb76": "multisendToken(address,address[],uint256[],uint256)", +"83ce50d8": "bonusLevel1()", "83ce63b5": "doRouletteBet(bytes,uint256,bytes32,bytes32,bytes32)", "83ce8a61": "changeMPO(address)", +"83ce9ccc": "getTokenPriceBySymbol(string)", +"83cf1c8c": "depsoitYield(uint256[3])", +"83cf1df0": "withdrawFromVestingBulk(uint256,uint256)", +"83cf82a3": "FirstPhaseEnd()", "83cfab42": "unFreeze(address)", "83cfbd7f": "revokeOwnership(address)", +"83cfc11c": "redeem__()", "83cfc5f2": "changeNameRestricted(string)", +"83d0fdc1": "uni_lp()", "83d158f0": "ShadowToken()", +"83d1f4a7": "srcDebtRevoke(bytes32)", "83d2421b": "setWorkerPort(uint256)", +"83d29b40": "estimatePayout(uint256,uint256,uint256)", +"83d46469": "privatesalewhitelist(address)", +"83d4a01b": "tokenTrades(address,address)", "83d4f946": "round0EndTime()", "83d51a38": "concatString(string)", "83d52f36": "OpenAIChainToken()", "83d53895": "interfaceSupported(address,bytes4)", +"83d61622": "test_hardcode1(uint256,uint256,uint256)", "83d6236c": "amIin()", +"83d625d4": "totalIssuedSynths(bytes32)", "83d66353": "LotteryGames()", "83d67039": "Register(string,string,string,uint256,uint256)", "83d67fc1": "_addAddressToGrantAccess(address,uint256)", "83d7529f": "reservationFromBackend(uint256,bytes32,address,uint256,uint256)", +"83d7991f": "ReInvest()", +"83d83d07": "exchangeForWantToken(uint256,uint256)", "83d852d9": "shutdownTransactions()", "83d880d0": "setParticipationCap(address[],uint256)", "83d8a90f": "theDonkeyKing()", "83d8bae3": "listItem(uint256,uint256,uint256,address)", "83d8e480": "registerCoin(address,string,string)", +"83d96296": "totalTeamReleased1()", "83da4d86": "ApolloCoinToken(uint256,uint256,address,address)", "83db0680": "TOTALSHARES()", "83db1548": "addPost(uint256,uint256)", +"83db232f": "isInTransferWhitelist(address)", +"83db66db": "Cat5(address,uint256)", "83db8e31": "HMCToken()", "83dbb27b": "invalidOrder(address)", "83dbc55b": "verifyXOR(bytes32,bytes32,uint8)", +"83dbcb77": "Ownership(address,address,uint256)", "83dbff4b": "get_first_item_in_state(bytes32)", "83dc077d": "acceptContribution()", +"83dc3b73": "takeAuctionLobbyShare()", "83dcecd3": "CompanyTokensIssued(address,uint256,uint256)", +"83dd0ee4": "setAllocation(uint8,uint8,uint8,uint8)", +"83dd3181": "totalWithdrawals_(address)", "83dd7aa4": "setBankName(bytes32)", +"83de424e": "_setController(address)", "83de6ed6": "changeStageTwo()", +"83de79c6": "allUserBalances(address)", "83dea2a8": "renounceExcluded()", +"83df6747": "deposit(uint256,address,bool)", "83df762f": "BDayToken()", "83df7d21": "updFreezeEnabled(bool)", +"83dfb65a": "depositedBalancesGeneric(address,bytes4,address,address[],bool)", "83dfd040": "isPresaleFull()", "83dfe5fd": "C()", +"83e02cd8": "getVariableWeights()", "83e03c3d": "HumanERC223Token(uint256,string,uint8,string)", "83e06ead": "setPercentages(uint256,uint256,uint256,uint256,uint256)", "83e07382": "setMovePermissionStat(bool)", +"83e0e9b7": "balancesTeams(uint256)", "83e19248": "afterStart()", "83e19a95": "MANAGEMENT_LOCKED_PERIOD()", "83e1bb4f": "dequeueIngot()", "83e219eb": "removeFromTotalSupply(uint256)", "83e256dc": "gameIdGame(uint256)", "83e2a0c4": "joinGame(address,uint256,address)", +"83e2ad63": "triggerTokenSend()", +"83e3416b": "MANAGER_ADMIN_ROLE()", +"83e3605c": "runStimulus()", "83e3607c": "fourthBonusSalesEnds()", +"83e385b8": "swapexactethfortokensgt(uint256,uint256,uint256)", "83e48d43": "_sptc(uint256,uint256,uint256,uint256,address)", "83e49c53": "burnWithData(address,uint256,bytes)", +"83e4a674": "_getCurrencyAssetsBalance(bytes4)", +"83e4c539": "revokeMintRequests(uint256,uint256[])", "83e4eed0": "apply(string,string)", "83e5cb26": "ownerAddCeo(address)", +"83e6249b": "withdrawAllEthv1(address)", +"83e6eed5": "totalLockedTokenBalance()", +"83e73a2d": "joinXfLobby(address)", "83e78b31": "bet(uint8,bool,uint8)", +"83e796bd": "rxp_price()", "83e7f347": "ICOBank()", +"83e7f6ff": "rentPrice(string,uint256)", "83e811a6": "founderLockup()", +"83e837ba": "setNewGetBancorData(address)", "83e83b54": "payBounty()", +"83e8d7e3": "setFlipEligOnRedeem(uint256,bool)", "83e8dbb8": "calculateSaleAmount(uint256,uint256)", +"83e98bc3": "isBiddingPhase()", "83e99a93": "balanceOfUnclaimedTT(address)", "83ea0620": "packageExists(string)", "83ea5111": "MESH(uint256)", +"83eb6692": "NUSWETH()", "83eb7257": "companySupply()", "83eb72ac": "getStrandDescription(uint256)", +"83eb7d29": "isTGE()", +"83ebb771": "getDomainHash()", +"83ebcb96": "burningMan2index(address)", "83ec0648": "BlockStackCoin()", "83ec0bd2": "showPeopleInQueue()", "83eca581": "setReferrerReward(uint256)", +"83ecbb2a": "IsClaiming(uint256)", +"83ed3790": "dailyStorageFee(uint256)", +"83eda452": "giveXp(uint32,uint16)", "83edf023": "totalWeiRecieved()", "83eed3d5": "queryN(uint256,string,bytes)", "83eeecc0": "ethInWei()", "83ef0c23": "buyEgg(uint256,uint256,bool)", +"83ef7d50": "nextAddress()", "83f0b184": "calculateMaxContribution()", "83f0bb45": "_getPartSkillLevel(bytes,uint256,uint256)", "83f11daf": "SetCandidatePrincipal(uint8,uint256)", @@ -75495,10 +138164,21 @@ "83f12f91": "grantFounderTokens(address)", "83f12fec": "batchTransfer(address[],uint256)", "83f13e7f": "setNewDividendContract(address)", +"83f19e76": "changePercentage(address,uint256)", +"83f1c098": "withdrawnIncentive(address,address,uint256)", "83f2a8ca": "dividendsCalculated()", +"83f2e525": "sum(bytes2,bytes2)", +"83f3084f": "connector()", "83f3c3df": "PaymentGot(bool)", +"83f3e7b3": "reportEmergency()", +"83f3f086": "getCurrentNodeDepositAmount()", "83f4a27b": "TATCOIN(uint256,string,string,uint256)", +"83f4cc7e": "currentPrice(uint8)", +"83f4f3a7": "go_vuln(address)", +"83f50282": "approve_383(address,uint256)", +"83f50e1d": "_loanReturn(uint256)", "83f537cc": "LendingBlockToken(address)", +"83f55a12": "clearISLA()", "83f57fd7": "_addDemoc(bytes32,address)", "83f5a47e": "tokenOfOwnerAndCreatorByIndex(address,address,uint256)", "83f5b46f": "refSystem()", @@ -75506,100 +138186,173 @@ "83f66212": "getTop11_20Messages()", "83f6cc69": "transferAllowedOf(address)", "83f6d9a4": "validateNameInternal(string)", +"83f6def0": "approve_113(address,uint256)", +"83f6f5ca": "getMinDifficulty(uint256)", +"83f6f9df": "donnottouch()", +"83f78428": "RESERVED_MARKETING_TOKENS()", "83f7a095": "setCoefficient(bytes2,string,uint256)", "83f7b8e1": "getNumberOfPhotos()", +"83f7c317": "getRefTime(address)", +"83f7cd9c": "userPreETHAmount(address)", "83f7e2d7": "reduce(uint256)", +"83f818b4": "game(uint256,uint256)", +"83f86eb2": "A(uint256,uint256)", +"83f90705": "setBond(uint256,address,uint256,uint256)", "83f94db7": "upgradeImplementation(address)", "83f95f13": "openClaim(string)", "83f9a788": "BlockTubePrepaid(address)", +"83f9cfd5": "getAmountToStake(address)", "83fa07fd": "fechAllCandidates(uint256)", "83fa2039": "Dealer(address,address)", "83fa7e02": "isSiringClockAuctionStorage()", "83fa87f2": "activateAdSlot()", +"83fa9585": "setTimestampRepeated(uint256)", +"83fab405": "LGEFinished()", "83fae425": "setPresaleAllocation(address,uint256)", "83fb42ba": "proposeBurning(uint256)", "83fbbc7a": "OnlineSocialChainToken(uint256,string,uint8,string)", "83fbc2b4": "weiRised()", +"83fbca34": "setFeelessReciever(address,bool)", +"83fbe833": "weeklyProcessed()", "83fc58b4": "tranferOwnership(address)", +"83fca124": "ungroupAssets(uint256)", "83fcafbb": "GetPrizeFund()", "83fcb85e": "revertFunction()", "83fcf308": "getPropertyRating()", "83fcf973": "unlockVestedTokens()", "83fcfafe": "LooqCrowdsale()", +"83fd0954": "getMemberDetails(address)", "83fd65d8": "setETHExpectedFee(address,uint256,uint256)", +"83fd6e60": "getAccountAmount(address)", "83fd8a64": "CBCK(uint256,string,string)", "83fe05f1": "PutFreeEther()", "83fe10e4": "isMetered()", +"83fe1d1e": "getCommissionRewards()", +"83fea4ef": "gasOverhead()", "83fee16d": "finalizeUpdate(uint256,address)", "83ff0189": "buy_tickey_free()", "83ff1bb6": "approve(string,uint8)", "83ff5bf2": "Bittobit()", "83ff9bec": "petCardDataContract()", +"83fff1ab": "getCardIdListOfSet(uint256)", "8400c307": "isRecipientAllowed(address)", +"8401460e": "approve_597(address,uint256)", "8401824f": "compactFraction(uint256,uint256,uint256)", "84019cae": "WOWToken()", +"8401cec5": "dailyEnd()", "8401e614": "lengthOfPermissions()", +"8401f56d": "_canSubmit(address)", "8401f8d1": "addMultipleToWhitelist(address[])", "8402181f": "pull(address,uint128)", +"840220e0": "isHal9kStakingStarted(address)", "8402ac99": "firstYearEnd()", "84035e07": "amendEarlyPurchase(uint256,address,uint256,uint256)", +"8403ae03": "createNFTMould(string,string,string,address,string,string,uint256,string,string,string,address[],uint256[])", "8403be91": "isAppRegistered(address)", +"8403eeb5": "iAm(string)", "84048497": "listMultipleItems(uint256[],uint256[],address,bytes32[])", +"8404e45b": "unsafeEntry(uint256,uint256)", +"84050601": "getValuePoolsWeight(uint256)", "84054d3d": "cashout()", +"84056290": "sellShort(uint256)", +"8405fba8": "lookupResourcePoints(address)", +"8406999a": "approve_522(address,uint256)", "8406ab82": "deleteGame(address)", "8406c079": "relayer()", "84073164": "transferFromPie(uint256)", +"8407f207": "USDCPool()", "84083c89": "addWhitelistUser(address)", "84086357": "crowdfundFinalized()", "8408643a": "getBlockTimestamp32()", "840880f2": "TeamLockingPeriod18Months()", +"8408a5e5": "getBytes32Values(bytes32,bytes32[])", +"8408b764": "exec(uint72,address,bytes,uint32)", "8408cb9d": "setPreICOPrice(uint256)", +"8409c02d": "rateReceiver()", +"840a1ff4": "cancelCommitment(uint256)", "840aab14": "_hasName(address)", +"840aed1c": "pendingExtReward(uint256,address)", "840b7403": "computePayout(uint256,uint256)", "840bc19c": "NON_PAYABLE_AMOUNT()", "840c0ca9": "setMaximumClaimPriceWei(uint256)", "840c401f": "pruneRestrictStock(address,uint256)", +"840ccf59": "getSynthToTokenInputAmount(bytes32,address,uint256)", "840cfffd": "burnIndexedByAddress(address,uint256)", +"840d4577": "isHaveBuyer(address)", "840d7fb6": "createLottery(address,string,string,uint32,uint32,uint8)", "840dea74": "COMBINED_WEI_GOAL()", "840e2673": "startTransferTime()", "840e78fd": "projects(address)", "840eb43e": "removeLicenseTerms(bytes32,bytes32)", +"840ee967": "removeLPToken(bytes32,address)", +"840f0720": "calculateAllocation(uint256)", "84100d5c": "selectRandomTrait()", "841016d0": "setAdditionalOwners(address[])", +"841059e1": "checkController(uint256)", "8410956a": "initialise(address,uint256,uint256,uint256,uint256,uint256)", "84109e50": "setTiimKyberGoAddress(address)", +"84115432": "addTrack(address,bytes32)", "84120645": "setMasterRewardsPercent(uint256)", +"841218ee": "diseaseProposalsCounter(bytes32)", "841237b7": "Wallet9()", "841244a8": "FeedCreated(uint256,string)", "84125e0b": "withdrawBalancesToNFC()", "84126e01": "cancelPayment(string)", +"8412b0a7": "priceZero()", "841302ce": "getHash1(uint8[5],uint8,bytes32)", "84132cf5": "deposit(address,uint8,bytes32,bytes32)", "84140c40": "delFromVestMap(address)", "841410cd": "maxETHContribution()", +"8414899d": "OracleIntervalChange(uint256)", +"8414b2bc": "BombPerBlock()", +"8414ba60": "constant_getGameVersion()", +"84152f34": "_evalParam(bytes32,uint32,address,address,address,bytes32,uint256[])", +"8415e8a3": "newMove(uint8)", +"8415f67b": "currentOrcID(bytes32)", "84160ec0": "getAddressesAccounts()", "84168c01": "tradesUnlock(address)", +"841737bb": "_validExternalAddress(address)", "8417fa2f": "goPublic()", +"841815ef": "shotgunDisabled()", +"84181c02": "getFamerVotesLength()", +"84181dc5": "__MappableToken_init_unchained()", +"84186791": "investorReferrals(address)", "8418cd99": "contribute(address,uint256)", "8418dc36": "teFoodsAddress()", +"8418ffec": "getEnchantedInfo(uint256)", "84191f62": "changeController()", "8419604e": "SendingBounty(bytes32,uint256,address)", "8419c986": "foundTime()", "841a12bd": "setKittyTokenAddress(address,address)", +"841aca44": "removeTimelocker(address)", +"841af244": "poolNotifyFixedTarget(address,uint256)", "841b4cd8": "registerForRaffle3()", "841baf2c": "m_tokensClaimed(address)", +"841bb344": "xf(address,address)", "841d0ac3": "init_daylimit(uint256)", +"841d0ed7": "read(string,bytes)", +"841db356": "getTokenLockStatus(uint64)", +"841e4561": "updateTreasuryAddress(address)", "841e6ce9": "betFee()", "841eb7f8": "paymentRewardTokens(uint256)", "841efac4": "updateFieldss(uint256,uint8,uint256)", "841f3729": "howManyTokensAreReservedForMe()", +"841fa92d": "calculateRewardFee(uint256,uint8,uint32)", +"841fea89": "setKeyLength(uint256)", +"84204435": "Finalize(address,address,uint256)", +"8420875c": "burningDiscount()", +"8420a32d": "GameEnded(address,uint256,uint256)", +"8420c912": "tier2StakingContracts(string)", +"8420ce99": "initialize(address,address,string,string,uint8)", +"8421403d": "getLpBalance()", "84219204": "minVotedTokensPerc()", "8421ec8a": "MyCash()", "842249cb": "weiTotalReceived()", "8422927d": "cancelPayment(uint256)", +"8422a2f2": "judges(address)", "8422b3bf": "RailzToken()", "8423157b": "getWinAmount(uint256,uint256)", +"84233707": "setStimulusUniswapOracle(address)", "84248a51": "changeDrawFee(uint256)", "84249ed0": "manualBuyPrice(uint256)", "8424b40d": "setLotteryCore(address)", @@ -75607,393 +138360,761 @@ "84268051": "payoutToOwnerIsLimited()", "84269ed9": "transferFrom(address,address,uint32)", "8426a452": "getSellingItem(uint256)", +"8426e6c1": "governance(address)", +"8426f067": "LogShouldBlockPublicTradeSet(bool,address)", "84270db0": "selfdestructTokens()", +"842723fe": "QuotesCredits()", +"8427870d": "voteBox(address)", "84281dcc": "isBalanceSufficientForContractCreation(address)", +"84289a30": "afterExchangeEthForSgr(address,uint256,uint256)", "8428cf83": "recoverAddress(bytes32,uint8,bytes32,bytes32)", "84297029": "getIdxBatchByUsername(bytes20[])", +"84297b75": "bosswage()", "84298882": "setLogo(uint256,string)", +"8429ae96": "getCrowdsaleGoal(address)", +"842a22b2": "iAmTheOnlyOne()", +"842a2b67": "acoFactory()", "842a6415": "DTRC()", +"842a77d3": "purchases(address)", "842acf9d": "mintDSBIToken(address,uint256)", "842b6357": "checked_in()", "842b8efa": "FailedMarking(bytes32,bytes32,uint256,int256)", +"842b96ec": "setOracleReserveMinimum(uint256)", +"842bac45": "GetMinWorkProjectOwner()", "842bc37b": "GetSmallCotractIndex(address)", "842bd2db": "getDeduction(uint256,uint8,address)", "842bfad2": "updateParticipantCapTier2(uint256)", "842c17be": "firstStageMinted()", +"842c201e": "withdrawRemainder(uint256)", "842c45c5": "ROBIES()", +"842d5976": "Owner_to_Regulator_Verification()", +"842da03d": "convertUintoToken(address,uint256,uint256,address)", +"842dd313": "addLicense(address,uint256,string)", "842e062f": "p_setCurrentRoundJackpotPercent(uint256,uint256)", +"842e2981": "getUserStakes(address)", "842f10d1": "dropMultiple(address[])", +"842f7a67": "viewRarity()", +"842f8eef": "getCreationTime(string)", "842ff2bd": "numPolls()", "84300859": "setTokenUnlock()", "84304ee5": "chronus()", +"8430822e": "oracleFee(address)", +"8430da42": "thirdPhaseSaleRate()", "84311353": "totalAmountOfPurchasesInCny()", +"84312622": "getTotalInStakeIncludingFinished()", +"84312e72": "voteMission(uint16,uint256,bool)", "84313086": "divCutMaster()", "84317008": "setprice(uint256,uint256)", "84317143": "INITIAL_EARLYBIRD_TOKENS()", +"84318d41": "claimReward(uint256,uint8)", "84321b41": "ligerAdminAddress()", +"84328ce9": "RoundMyticket(uint256,address)", "843296d6": "DealCancelationReason(uint256,address,uint32,uint32,uint256,string)", +"8432c8b9": "artemSupplierIndex(address,address)", +"8432e0e0": "changeStatus(bool,bool)", +"8432f0cf": "executeTransaction(address,uint256,string,address,uint256)", "8433acd1": "collectTokens()", "8433d6f2": "from_Initialisation_to_cycleDeVie()", +"8433f614": "setMaxCapTokens(uint256)", "84344415": "chargeMoney()", "84345b35": "createRandomZombie_ZOB_goldpack()", "8434c80d": "cleanArray(uint256[])", +"8435035b": "ovmEXTCODESIZE(address)", "843545be": "getPrinciple(uint256)", +"84356345": "createRegistro(string,string,string,string)", "843584f1": "log_recast_fees(address,address,uint256)", "8435be4b": "getLastFarm(uint8,uint8)", "8435da61": "getTile(uint16,uint16,uint8)", "8435f147": "bytes32Func(bytes32,bytes32)", +"843655c1": "initAddressAmount()", +"843694ea": "DirectMapEvent(address,uint128)", "8436bd4e": "MintyMcCringleToken()", "84370813": "subscribe(uint256,uint256)", +"843716c1": "capPerAddr()", "8437b2a5": "tier(uint256,uint256)", +"8437f10a": "developerDividendSplit()", "84385c6f": "assignOperator(address)", "84386004": "channelsSold()", +"8438dc04": "setNSEC3Digest(uint8,address)", +"8438e8ac": "Ignite(uint256)", +"8438ff32": "reserveBitcashPay(address)", +"84390cd8": "toGovernanceStaking()", +"84391573": "SetTokenPrice(uint256)", "84394e6f": "addValidation()", +"84395fce": "setBridgeId(uint64)", +"8439a541": "updateRewardValue(uint256)", "8439ec4a": "setBlacklistBulk(address[],bool,bool)", "8439f80d": "accumulatedBalanceOf(uint256)", +"843a0459": "_resetVote(uint256)", +"843a6ac1": "AllowedAuditor(address)", "843a7f74": "getCKNPriceNow()", "843aa0db": "insert(uint256,uint256,uint256,uint256)", "843ad7b5": "dailyMintable()", "843b1a09": "spendNonce()", "843b4386": "addComment(string)", +"843b4cbb": "collectorFab()", +"843b66a1": "isinvestor(address)", +"843b842c": "total_ever_minted()", "843bd641": "itemExists(uint256)", "843cbae4": "EtherBattleCoin()", "843cfb9e": "vestingTotalPeriods()", +"843d3d96": "changeWithdrawFee(uint256,uint256,uint256,uint256,uint256)", "843e240e": "getAuditContractUri(uint256)", +"843e6314": "addBridgeAddress(address)", "843e8d27": "downVote(bytes12,bytes12)", +"843eb710": "startNyanClaim()", +"843f7258": "getDefaultChoice()", +"843f7b89": "balanceRequest()", +"843fac18": "twoSuceed(uint256)", "843fcf90": "EOSGold()", "843ff6f6": "getTitulaire_Compte_7()", +"84403589": "pepePerBlock()", "8440b3b0": "BUY_INCREASE()", "8440d167": "getCategory(address)", "84413b65": "airdropAddress()", +"8441b3b3": "createInventory(string,string,uint256,uint256,uint256)", "8441f89e": "deleteWitness(address)", "8442171d": "bonusLimit2()", +"844262f7": "proposal_token_approve(uint40,uint256,uint256,address,uint256)", +"844279f3": "DiscipleOfferSubmit(uint256,uint256,address,uint256)", "84429480": "TokensBought(address,uint256,uint256)", "84429579": "getRunningTokenPairs(address[])", +"8442a0a5": "tradeETHToToken()", "844323fa": "xtime()", +"84433221": "sellOrderIterate(bytes32)", +"84434b9f": "kycAuthAddress()", +"8443bea6": "planet()", "8443f07c": "UVIDIFYTOKEN()", "8444b391": "getUpgradeState()", +"84452b60": "deflateRounds(uint8)", +"844564ce": "SetMarginSpend(uint256,uint256)", +"8445a86b": "pairToBetterToBetId(address,address)", "84465fa5": "changeFeeOwner(address)", "844669b3": "accountC()", +"84467a84": "setBlocksPerMonth(uint256)", +"844683c1": "StopBuy()", +"8446a186": "MIN5()", "844706a6": "UsdCapUpdated(uint256,uint256)", "84477036": "tempTokensBalanceOf()", "8447c02f": "takeAGuess(uint256)", +"8447c4df": "rewardsAllowed()", "8447c4fa": "LibraToken()", "84488126": "isForceExecute(address)", "844891a0": "ABTCETHER()", +"8448afa6": "signedPendingTransaction()", "8449129e": "EthereumNova()", "8449133b": "initQuoteBalance()", "84491566": "getPrevRoundWinnerCount()", "8449b0af": "PRICE_MULTIPLIER_ICO5()", +"8449b279": "digg()", "8449d772": "withdrawM5()", +"844a8c69": "getClaim()", +"844ab3f8": "investors(bytes32,address,uint256)", +"844afa14": "set_eth_rate_up(uint256)", +"844b4cf9": "foo(address,address)", +"844bb5b7": "claimLegacyToken(address,address,uint256)", "844bdea4": "LhsToken(uint256,string,uint8,string)", +"844c3c8c": "mintAndSell(address,string,uint256)", "844c3edc": "setThresholdSendToSafeWallet(uint256)", +"844c424d": "approve_177(address,uint256)", "844c4264": "cycleEndTime()", +"844c5bab": "Frosted(address,uint256,uint256)", +"844c714a": "ownerWitETH(uint256)", "844c7d95": "updateBalances(address,bytes32,string,address,uint256)", +"844cbc43": "autoExec()", +"844d1508": "canWithdrawPeriod()", "844d38ee": "view_get_Gains()", "844d65c5": "whitelistedMax(address)", +"844d6a32": "requireWithReason()", "844dbf67": "RecurringPayment(address,uint256,uint256,address)", "844e774d": "joinraffle()", "844e89a9": "Unregistered(bytes32,uint256)", "844ea6f9": "E25()", "844ef097": "bridgeValidatorsOwner()", +"844f25b9": "finalizeLSW(address)", +"844f5e99": "removeReward(address,address[],uint256[])", +"844fcdef": "isTheBeltWhite()", +"845023f2": "setVoters(address[])", "845051d3": "testContractsNotNull()", +"84509760": "getEstimation(uint256)", "8450b12e": "getSupplyLimit(uint16)", +"8450ebe4": "erc721TransferFrom(address,address,address,uint256)", +"84512988": "__LnDefaultPrices_init(address,address,bytes32[],uint256[])", +"84513a11": "receivedTokens(address,address)", "8451738d": "rentHo(uint256)", +"84518744": "tranche_SFI_earned(uint256,uint256)", +"8451a3a0": "getAllBlockHeights()", "8451d312": "showAllFunds()", "845238fe": "lookup(address[],address,address,bool,bool)", +"84526ded": "initialcoach(uint256)", +"8452c10e": "clipperCall(address,uint256,uint256,bytes)", "84533794": "setEthRate(uint16)", +"84533bc2": "DiscountStructAdded(uint256,bytes32,uint256,uint256[2],uint256[],uint256[],uint256[],uint256,address)", "845381c0": "FailedVote(address,string)", "84539789": "useNeonMarbles(address)", "8453a8c8": "Factom()", "84545ef8": "setRegionPurchasedPixelPrice(uint256,uint256)", +"845460b2": "blzdPerBlock()", "8454665d": "startingInsuranceBalance()", +"8454810b": "setDailyDistributedReward(uint256)", +"8454ff5a": "accumulatorTag()", "84553e16": "AccessAddress(address)", +"84557657": "removeERC721Contract(address,bool)", +"8455ae6b": "EthWithdrawn(address,uint256)", +"8455e1f7": "sparedReward()", "84564676": "tokenSetAdmin(address,address,address,address)", +"845696b4": "registerAllClaims(address)", +"8456bd2e": "setPurchaseToken(address)", "8456cb59": "pause()", +"8456db15": "_NEW_OWNER_()", "84570d0d": "assertEq5(bytes5,bytes5)", "84571235": "minimum_bet()", +"8457213a": "setPerformanceFeeGovernance(uint256)", +"8457b11d": "_decode_int32(uint256,bytes)", "84585099": "TransferTo(address,uint256)", "8458644c": "play(bytes32,address,address)", "845890c3": "buyATR()", "8458bd70": "getHp(uint256)", +"84597e53": "getCycleAddress()", "8459857f": "mentors()", +"845a1136": "startDividendsPaymentsAndFundDividendsPayout()", "845a51ec": "rewardPoolAddress()", "845a7468": "getStakersAndAmounts()", "845ab425": "getProjectDescription(uint256)", +"845aef4b": "LOCKUP()", +"845b1790": "TOKEN_POWER_USED()", "845b6aca": "buyBasicCards_Migrate(address,uint256,uint256)", +"845bc804": "getApr()", +"845c2e08": "spEntries(uint256)", "845c8801": "checkHasPermissionForPack(address,address,uint256)", "845c9306": "participate(uint256)", "845d586f": "publicTransfersEnabled()", "845dcc2b": "_isSoldOut()", +"845ddcb2": "stages(uint256)", "845e76b3": "getStudentArray(bytes32)", "845eaedb": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,bytes,bytes)", "845ec8de": "FOUNDER_EXCHANGE_SHARE()", +"845f04c6": "globalEffectInfos(address,uint256)", "845f5593": "initStages(uint32[],uint32[],uint128[],uint128[],uint128[],bool[])", +"845f5f39": "totalBBOXFees()", +"845fd946": "Max_Token()", +"845ffac2": "releaseNewBurnRate()", "846030a0": "hasClaimableShares()", "84605d0d": "total_iou_withdrawn()", +"84607878": "boosterGain(uint32,uint256)", "8460a9d9": "suicideSend(address)", "84610618": "registerRequest(int256,int256)", "846153b5": "registerAddresses(address[])", +"8461c5f8": "scaledDividendCreditedTo(address)", "8462151c": "tokensOfOwner(address)", "84622425": "onlyPrimaryMock()", +"8462b1ca": "minterPackId()", +"8462d661": "owedTo(address)", "8462df7f": "diff(uint256[],uint256)", +"846321a4": "setMinCollateral(uint256)", +"84639651": "roseBalance()", "8463bcf5": "countClients()", +"84641227": "withdrawMyReward()", +"846420f2": "updateMaxBuyETH(uint256)", "84644ec9": "addPromise(uint256)", +"84646af1": "multipleMint(uint256[],address)", "8464878d": "emergency_used()", +"8464935b": "ethMaxTokensToClaim(address)", "84653605": "DateCoin(uint256)", "84658e2a": "sendtoken(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"8465ad44": "getArtifact(uint256)", +"84663651": "referralEvt(address,uint256,uint256)", "846639dc": "currentAwards()", "8466c3e6": "aa()", +"8467456b": "getTotalValuation()", "846786f1": "openIco()", +"84679c65": "FANNY()", +"8467c400": "DistanceRunTeams(uint256)", "8467d9cf": "refundPayment(uint256,uint32,uint32,uint256,string)", "8467f7cb": "resetContract(uint256)", "84680fc2": "autoSelectOpponentForGladiatorBattle(uint256,bytes32)", "84682fbb": "auxWorstPoints()", "84691cd8": "grapesToProduceBottle()", +"84692573": "ASTPerBlock()", "84696810": "winningCountry()", "846a09e1": "AddAuthorityAddress(address)", "846a284e": "_addTicket(address,uint32,uint8)", +"846a3361": "purchase(uint8,uint256,address,uint256,uint256,address)", "846a5dde": "delayPayment(uint256,uint256)", +"846a700e": "setOwnerFee(uint8)", "846b055a": "startCrowdfund(uint256,uint256)", +"846b0b53": "GSD()", "846b0ef0": "proxiedContribution(address)", "846b23d4": "getEmployerInvoicesByStatus(address,address,uint8)", "846b68e3": "MERCULET()", +"846cd3c0": "inch()", +"846d9491": "SetFileExistenceProof(address,string,string,address,uint8)", +"846d9e17": "isCAKEStaking()", "846e5851": "LogStudentUncertified(address,uint256,address)", "846e832d": "getStateAt(uint256)", "846e980d": "setFreeLobster(uint16)", "846f1185": "sendEthProportion(address,bytes,uint256,uint256)", +"846f36e7": "setMarketplace(address,uint256)", "846f652b": "getSpawned(uint32)", "8470ffd6": "_transfert(address,address,uint256)", +"84715b11": "deposit(uint256,uint256,address,address)", +"847163e9": "nyanV1()", "84716854": "investInCharger(uint256)", +"84718d89": "jug()", +"847191ca": "updateKycContractAddress(address)", +"8471db13": "isSynthManaged(bytes32)", +"84722e20": "softCap1Stage()", +"8472a02c": "getTotalWithdrawnEth()", +"84734375": "toTokenAddress()", "84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", +"84734d7b": "setProfitSharingDenominator(uint256)", "8473e55f": "amountForSale()", +"8473f774": "enchant(uint256,uint256[],address[])", "8475bfed": "div18(uint256,uint256)", +"8475c028": "side()", "8475f6f9": "getPublicKeyG()", +"84760b5b": "emergencyWithdrawForce(uint256,address)", +"8476106a": "hasAskedForRegistration(address)", +"8476992a": "isSuperPowerfulDragonEnabled()", +"84769f44": "setLastLiquidityTradeTrigger()", "8476f105": "Menu08(uint256)", "847760ee": "getArtToken(uint256)", +"84776a2d": "ADVISOR()", "847778ad": "edit(address,address)", +"8477a3f4": "getLockedUserInfo(address)", +"8477dd81": "rollUpdate(address)", "84780009": "getFinishStatus()", +"84780205": "updateMinDepositAmount(uint256)", +"84781199": "addToken(address,uint256,uint256,uint8,bool)", "84788f01": "mvnperethBonus()", +"84791cff": "_lockedPool()", "847927ed": "icoEtherMaxCap()", +"847928f3": "totalApprovalRequired()", +"84794e5d": "endCycleTimestamp()", +"8479873f": "unclaimed_amount()", +"8479899f": "rebalanceTaxInterval()", +"84799b0d": "viewAccess()", "847a1ca6": "raiseSellOrderCreated(address,uint32,uint32,uint80,uint256,int160)", "847a5e99": "getPlayerStats()", +"847ab602": "setReferralInterest(uint256)", "847af92c": "setMintMode(uint256)", +"847b689e": "getBTCBPriceForUSDP()", "847bd61c": "processPurchase(uint256[])", +"847bdaa4": "setStageStarts(uint256[])", +"847beecf": "removeCourse(string)", "847c096d": "removePresaleContributor(address)", +"847c5118": "getBondingContract()", +"847d0f7f": "TaxWalletSet(address)", +"847d4715": "markets(address,address)", "847d97ab": "add(string,address,string,uint256)", "847dc0a7": "percentageETHReserve()", "847dc59e": "MicoinToken(uint256,string,string)", "847dd67c": "buyEth(uint256)", +"847dee7e": "getEquippedSlot(uint256,uint256)", "847e09f2": "TOKEN_HARDCAP()", "847e12c4": "FixyNetwork()", "847e27d9": "wanToken()", "847e2ba1": "revokeAccessMint(address)", +"847e515a": "getCashOut(address)", +"847e997c": "earlyAccessTokensLength()", "847ec2de": "totalBunny()", +"847ec40c": "lastDistributionTime(address)", +"847ed2ac": "withdrawEtheralTest0()", "847eefb6": "ICOHardcap()", +"847ef08d": "removeModule()", "847f2177": "Electron()", "847f4a88": "stopSaleType(uint8)", +"847f52bd": "tokenSCrv()", "847f8a10": "Refund(uint32)", "8480021c": "crowdfundDeadline()", +"84800812": "pancakeCall(address,uint256,uint256,bytes)", "8480544e": "getCAOAmount()", +"84807b08": "getFarmTokens()", +"8480a30b": "setMaxFarmable(uint256)", +"848114a2": "fixStuckStatuses()", +"84811c2f": "identityList(uint256)", "848125ea": "issueBlockReward()", "8481573e": "contractBalanceOf(address)", "8482167e": "makeCall(address,uint256,bytes)", +"8482a75a": "hal9kVault()", +"8482c78e": "LogNokuCustomERC20Created(address,string,string,uint8,address,address)", +"8482e3a5": "BallerCreated(uint256,string,address)", +"848331d4": "approve_79(address,uint256)", "84837981": "BTCT()", +"84837ee1": "getTop10()", "8483dfcc": "isOverflow(uint256,uint256)", "84841523": "Buttcoin()", +"84843265": "addDepositTokens(address[],uint256[])", +"84843eb5": "poolpercentages(uint256,uint256,uint256,uint256,uint256)", +"8484b9f8": "addSettings(address,address,uint256,uint256,uint256,uint256)", "8484dc24": "removeEmissionProvider(address,uint256)", +"8484ed7e": "removeTaxlessSetter(address)", "8484ff59": "setTokenCollectable(bool)", +"84856482": "images(uint256)", "8485b90c": "proposalAuthor()", +"8485e359": "calcCurrentBnbDivs()", "84861e93": "auctionState(uint256)", "84869679": "isDistributionDue(address)", "8486d444": "_getUsdAmount(uint256)", +"84877e6a": "Propose(address,address)", "848784e5": "transferPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"8487b303": "Recommended(address,uint256)", "8487b73a": "Milestone_BankLicenseFailed(string)", "84883795": "ico_rejected()", "84885ed6": "getData_19()", +"8488bb4e": "payoutWallet()", "8488e58a": "setReturnableToken(address)", +"848924cb": "getCountry(string)", +"8489392f": "sellBLK(uint256)", +"84898352": "REI07()", +"8489a65e": "taskIDList(uint256)", +"8489b0e1": "newCard(uint256,uint256,uint256,uint256,uint256)", "848a0327": "dividendForYearly()", "848a2130": "releaseChecksum(uint8)", +"848ac24a": "SetAdmin(address,address)", +"848af25a": "seedPots()", "848b3821": "fundingCapReached()", +"848b429d": "_sendReward()", "848b86e3": "updateWallet(address)", "848c0a39": "buildLeft(address,uint256)", +"848c0dfd": "presaleTarget()", +"848ca361": "GetProjectDescription(uint256)", +"848cb5c6": "setUnpause()", +"848cc303": "getFeeRate(address,address)", +"848d21f4": "_resume(uint256)", +"848d7d87": "BestBidUpdate()", +"848d8f28": "buy(address,address,uint256,uint256,uint256,uint256)", +"848d9de1": "hatchAndClaim(uint256,string,uint8,bytes32,bytes32)", "848dd14e": "CostStuff(address,uint32,uint256)", "848e3442": "automaticThreshold()", +"848eb4cd": "referrals(bytes12)", "848efb3d": "rentOut(uint256)", "848f002f": "setBoolF1F2(bool,bool)", +"848f0148": "getFromOrigin(uint256)", "848f1470": "disableRefundPeriod()", "848f6d8d": "OneBroGlobal()", "848faed7": "BAI20()", +"848ff312": "withdrawFromUSDTVault(uint256)", "84900b04": "whitelistContract()", +"849058a8": "getproposalNOListLenth(address)", +"8490a8df": "providerId()", "8490d598": "wholeTokensReserved()", "8491b49c": "rain(address[],uint256[])", "84922374": "isDistConfig()", "84924b60": "findAndPayTheWinner()", +"84924bcd": "fundingParameters()", +"84928419": "triggerTransfer(uint256,string)", "849292bc": "emitStateContractChanged(address)", +"8492a955": "userWithdrawEpoch(address,uint256,uint256)", "8492aa9c": "getAddressNickname(address)", "8493407b": "CorporateNews(uint256,string,uint8,string)", "84934e40": "DappUpgraded(address,address,address)", +"849367af": "isLiquidated(uint256)", "8493a06e": "returnLongTokenAmount(address[3],bytes32,uint256)", "84941984": "_removeTokenFromPartition(address,bytes32,uint256)", +"8494869a": "depositLP(uint256,uint256,uint256)", +"84949442": "withdraw_cETH_beta(uint256)", +"8494c6ab": "LogCancelOrder(uint256)", +"84955c88": "unlockedBalanceOf(address)", +"84960cad": "deposit3(uint256)", +"8496fd70": "ReleaseLockerAccess()", "8497a8d8": "ESCToken()", +"8497ddab": "withdrawBNB2(uint256)", +"8497fab9": "expiryOf(address)", +"84984e0f": "flashloan(address,uint256,string[],string[])", "84987faa": "getNodeRightChild(bytes32)", "8498f706": "EthPalace()", "84995370": "TheFoolRareToken()", "8499bc63": "GeneBlockChainUserIDs(address)", "8499ee3a": "newToken(string,uint8,string)", +"849a534a": "AccountRegister(address,string,string)", "849a7337": "approveBountyTransfer(address,address)", "849a7cb7": "convertBytes4ToArray(bytes4)", "849aaf8e": "minimumValue()", "849ab974": "HasOwner(address)", "849ae5ea": "isBlockpassInvestor(address)", +"849b182e": "_grantPermissionP(address,address,bytes32,uint256[])", +"849b4864": "transferUSDT(uint256)", +"849bb274": "sell(uint256,address,uint256,uint256,address)", "849bb2db": "withdrawServiceFee()", "849cf588": "addSynth(address)", "849d0d24": "TVCrowdsaleContract()", "849d16d2": "BffDoomToken()", "849d926b": "parseBlockHeader(bytes)", +"849df12c": "enterStaking(uint256,address)", +"849e0776": "definirMessage(string,address)", "849e3dcd": "SangusToken()", "849e6b17": "MakeBuyOrder(bytes32,address,uint256,uint256,address)", "849e961a": "ICO_PRE_SALE()", +"849eefc9": "registerGloballySettled()", "849f94bf": "getMatchIndex(uint8)", "84a014d8": "oneTimeSold(address)", +"84a07dcb": "getOraclePrice(uint256)", +"84a09c27": "royaltiesRecieved(address,address,uint256)", +"84a0e58f": "borrowedToken(address)", +"84a0f0b4": "updateMargin(bytes32,address,bool,uint8,bytes32,bytes32,uint64,uint256)", "84a0f604": "transferMultipleDifferentValues(uint256[],address[])", +"84a103ab": "HijackDefended(uint256,uint256)", "84a11df9": "ismaster()", +"84a1931f": "vestingEnd()", +"84a198dc": "addTokenGrant(address,uint256,uint16,uint16)", "84a1f5a5": "claimTokensFor(address[])", +"84a23e63": "yCRV()", +"84a27dec": "hashedTxs(bytes32)", "84a2f00b": "order(bytes32,uint256,uint256)", "84a2f5a4": "MoonDust()", +"84a33916": "DEFLCTcontributedForLPTokens(address)", "84a34caa": "BaseMPHToken()", +"84a3613e": "forProjectKeep()", +"84a36c1f": "DeveloperReservedLockInfo(address,uint256,uint256,uint256)", "84a37273": "addTransaction(address,uint256)", +"84a390d5": "megaPoolReadyToWithdraw(uint32,uint256)", "84a429a0": "createDklSiringAuction(uint256,uint256)", "84a438de": "Course(string,string,uint256)", "84a4974c": "MintAndTransferEXH(address,uint256,bytes32)", +"84a5508c": "Voted(uint256,uint256)", +"84a568d4": "addAddressToKYC(address)", "84a6469a": "setNewMintRequest(address,uint256)", "84a64c12": "cancel1(uint256)", "84a68690": "withdrawRequest(uint256,uint256,uint256,uint256)", +"84a6a515": "compensationAvailable(address)", "84a6a68a": "releaseTeams(uint32,uint32[])", +"84a76be9": "massUpdatePool2s()", +"84a79fbf": "fii()", "84a7b223": "Canary(address)", +"84a7bf6c": "stakeWithReferral(uint256,address)", +"84a7dde5": "smartksj()", "84a80c6b": "getB0()", "84a83662": "changePassword(string,string)", +"84a85431": "approve_multi(address,address,uint112)", +"84a91db7": "_initialLiquidity()", +"84a94d20": "incrementCurrentRightVersion(int128)", "84a97ab7": "removeAddressFromAccount(address,address)", "84a9b91c": "capWEI()", +"84a9d4d7": "batchToggleFreeze(address[],bool)", "84a9d711": "assertThrows(string)", "84ab2cdb": "byte_to_bits(bytes1,uint256)", +"84abd4d3": "HybridizationAdd(uint256,uint256)", +"84abfa37": "pool2users(address)", "84ac33ec": "deregister(address)", +"84acbb89": "recs(uint256)", "84acdae7": "getAuctionStartBid()", "84ad6ff3": "ReversibleDemo()", "84ad8e8f": "discountPrice()", +"84ae2a74": "SECONDS_PER_WEEK()", +"84ae2bc6": "referralFee()", "84aeb4f0": "getTokenContribution(address)", +"84aed350": "HorizonExtension(uint32,uint32)", +"84af0cae": "blockhash(uint256)", "84afaa7c": "getReceiptAmount(uint256)", "84afb526": "marketor()", "84afd121": "bytesToUint2(bytes)", +"84afff9b": "recoverERC20Tokens(address)", "84b00eb6": "fetchVoteNumForCandidateByIndex(uint256,address)", +"84b034e0": "addNfts(uint256,uint256,uint256,address,uint256,address,uint256,string,uint256)", "84b06191": "CampaignAccount(address,uint256)", "84b08d41": "partner2_signed()", +"84b09e86": "getSellerAddress()", +"84b0d742": "Recruited(address,address,address,uint256,uint256,uint16)", "84b0e001": "setEventResult(string,uint32,uint8)", +"84b159b2": "EtheralTest0Token()", +"84b17d7b": "decreasePositionWithOwnFunds(address,uint256,address,uint256)", "84b1fcb6": "TokenOwnedFund()", +"84b2914f": "SECURUS_MINER()", +"84b2bb1f": "swallow()", "84b2e59d": "lower(string)", "84b35fbb": "proposeFoundationTransfer(address)", "84b366dc": "dest()", +"84b381d4": "minColPercent(address)", "84b3b232": "depositofferToken()", +"84b41fda": "timeToDrift()", "84b4340b": "failWithReason(string)", +"84b43bbb": "HDG()", "84b46829": "San4Contract()", +"84b48de0": "utilizationScaled()", +"84b4a76f": "specialexecuteWithdraw()", "84b4d3f6": "determineGoalScoringCardIds(uint256[],uint256[],uint256)", +"84b5a046": "lastDevGetFounds()", +"84b5d5a6": "GetUserDebtData(address)", "84b60937": "getRollUnder(uint256,uint256)", "84b735c2": "address1a()", "84b76824": "cancelWithdraw()", +"84b7719a": "setFeesRecipient(address)", "84b7964f": "isClient(address)", "84b79b3d": "eosBASE(uint256,uint256)", +"84b7fdd3": "adminEmergencyWithdrawTokensTier2(address,address,uint256,address)", "84b83a96": "finishChampionGame()", +"84b83d2b": "ResolverUpdated(address,address)", +"84b8524a": "ref_withdraw_ether()", +"84b8b37a": "swapExactETHToAlpha(uint256,address,uint256)", "84b8d6a5": "Airdrop(address)", "84b98987": "getPrice(address,string,string,string)", "84b9a4a5": "SALE_STEP()", +"84ba1995": "forRTRANDholders()", "84ba2642": "mint(address,uint256,address,string)", +"84ba34f2": "FirstDepositTime()", +"84ba3859": "revealedStake()", +"84ba3f69": "tokenPrice(address)", "84ba745e": "totalClass()", +"84bc1d66": "isAuthAllowed(address)", "84bc8d2e": "read_purchase_at_index(uint256)", "84bcd93e": "setSealableProperty(uint256,bytes32,bytes32)", "84bcefd4": "collected()", "84bd3a28": "TierRainmakerDividendAddress(address)", "84bdaf85": "centsInPhaseOne()", +"84bdc9a8": "getSupplyRate()", "84be4079": "Lendr(string,string,address)", "84be414d": "KryptopyCrowdsaleMock(address)", "84be59d1": "giftPool()", +"84be816c": "getCurrentStats(uint64)", "84beac36": "KRCToken(address)", +"84bed7e8": "getThreeTeamHasLongestRuned()", "84bf6fac": "mEtherValid()", +"84bfc3a9": "allowances(address[],address[],address[])", "84c019e3": "noBonusTokenRecipients()", +"84c09a3c": "lastTransferTo()", +"84c0f670": "setRedemptionValueBydate(string,uint256)", "84c14b25": "sellDentacoinsAgainstEther(uint256)", "84c2473f": "mainIcoEndBlock()", +"84c30cc2": "getBlockVotes(uint256,address)", +"84c33acf": "returnVote()", +"84c33f27": "apyComp()", "84c344fe": "_register(bytes4,string)", "84c3edf9": "getHoldAmountAccounts()", +"84c3f23c": "bidClosed(address,uint256)", +"84c4170c": "MPBS()", "84c4ee9e": "getHivePot()", +"84c5a2ec": "fastLimit()", "84c5c34d": "transferFromToICAPWithReference(address,string,uint256,string)", "84c615e2": "giveKingdom(address,string,string,uint256)", +"84c63b1d": "holderChange(uint256,uint256,uint256,uint256)", "84c64a19": "setApp(address,address)", +"84c65296": "getShareIndexDebugForTestRPC(address)", +"84c66c3f": "OrderCreated(bytes32,uint256,address,address,uint256,uint256)", "84c6774c": "safeMathMul(uint256,uint256)", +"84c6894d": "SetRewardClaimDate(uint256)", "84c6a9fe": "setFABAcompanyTokensPercent(uint256)", "84c6f650": "PAYOUT_TIME()", "84c7bf4c": "setBlocking(address,address,bool)", +"84c7f3a5": "approve_537(address,uint256)", "84c830d3": "getDepositByIndex(address,uint256)", +"84c8b7c9": "InsufficientBalanceError(uint256,uint256)", "84c8d5fa": "xenograft(uint256,uint256,uint256)", "84c8df88": "testMemoryIntegrityCheck31Bytes()", "84c99b6d": "tokenIssuedAirDrop()", +"84c9ad00": "approve_235(address,uint256)", +"84ca06af": "updateRate(uint8)", "84ca65e0": "addOperationType(string,string)", +"84ca93a7": "totalPurchasedCurrency()", +"84cb0249": "appendDecryptedBids(uint256[],uint256[],uint256[],address[],uint256[],uint256[],uint256[])", "84cb4fec": "_getBlocksPerYear(uint256)", +"84cb8461": "exchangeEtherForDETAtRate(uint256,uint256)", "84cba6da": "registerUsers(address[],uint256[])", "84cbc92f": "buyPotato(uint256)", "84cc315b": "getCurrentPrice(address)", +"84cc9dfb": "claim(bytes32,bytes32)", +"84ccb1cd": "getTeamAllocation()", "84cdbb4b": "relaseLock()", +"84cdd9bc": "removeLiquidityImbalance(uint256[],uint256,uint256)", "84ce8f1e": "getTotalF3()", +"84cedb9f": "callerDoSomething()", "84cfa08c": "startKilling()", +"84cfa729": "onWithdrawOperation(bytes32,string,uint256,uint256,uint256,uint256,bytes)", +"84cfb680": "setApproved(address,bool)", "84cfc5aa": "WABnetwork(uint256,string,string)", "84cfca00": "setMaxPlayers(uint8)", "84d062b4": "updateEthToTokenOrder(uint32,uint128,uint128)", "84d0aad8": "loadOldData()", +"84d13e8d": "mneSentPerDayGetAt(address,uint256)", +"84d14f8d": "autoCompoundData(address,uint256)", +"84d1bfb8": "iiStats(uint256)", +"84d1c91a": "removeVouch(address)", "84d24226": "claimableTokens(address)", "84d2688c": "getDarknodePublicKey(address)", "84d2731c": "namesOf(address)", +"84d2823d": "borrowEvent(uint256)", +"84d320a4": "contributionSuccessful(address,uint256,uint256)", +"84d347e6": "oneSplitFlags()", +"84d35975": "almacenaMemoria(int256)", +"84d3fa7a": "synthetixBridgeToOptimism()", +"84d4127f": "getStartedBlock(uint256)", "84d43f66": "setAffiliateSetter(address)", "84d452ff": "resetRound()", "84d46860": "getMyStageBet(uint256,uint256,uint256)", "84d47dee": "DayDayCrowdsale(uint256,address,address)", +"84d4b410": "transferAllFrom(address,address)", "84d4c178": "_escrowInflationBonus(bytes32,uint256,uint256,address,address,bool)", +"84d4f5a3": "addressFundReserv()", +"84d58284": "_encode_sol_uint128(uint128,uint256,bytes)", "84d5d944": "transferAndLock(address,uint256,uint256)", +"84d5e589": "manualSeigniorage()", "84d60043": "CioCoinERC20180629Token(uint256,string,string,uint256)", "84d61a32": "showFPInterest()", "84d62f47": "bindSmartIdentityByRegulator(string,string,string)", "84d6bd43": "requiredEvidence()", +"84d72a27": "bsf()", "84d7c99d": "deleteUInt8Value(bytes32)", "84d7ea12": "setMilestonesContractAddress(address)", "84d80057": "hasDeadlinePassed(bytes32)", +"84d82db8": "pool8currUserID()", "84d83f07": "GetLoanIdFromPortfolio(uint256,uint256)", "84d8529f": "refundInternal(bytes32,address,address,uint256)", +"84d8a3bb": "detokenizeOption(uint256,bool)", +"84d935f0": "_roundCloseTimestamps(uint256)", "84d9390a": "TEAM_PERCENTAGE()", "84d9bee2": "bidCC(uint256,bytes32)", +"84d9ec99": "transferFromManyToMany(address[],address[],address[],uint256[])", +"84d9f77f": "setEnforceMaxSingleHolding(bool)", +"84da6b2d": "getGlobalEXR()", "84da7e38": "setColorRed()", "84da92a7": "updateName(string)", "84dac46e": "Fucksign()", "84db71a3": "getRefereeRewards()", +"84db809f": "_resourceIDToHandlerAddress(bytes32)", "84db8d1e": "_nextPotTax(uint256)", "84dc1028": "getBonustwo(uint256)", "84dc2b10": "_saveData(address,bytes32,address,bytes32,uint256)", +"84dc318b": "IMPOSS15()", +"84dcaf7c": "jTestaAmount()", "84dcde97": "removeSynth(bytes4)", +"84dceef5": "moveAmountFromTo(address,address,uint256)", "84dd4332": "lastCallPUST()", +"84dd7b07": "registerChain(string,string,address,uint256,uint256,uint256,uint256,uint256,bool,bool)", "84dd9591": "getTotalHoldAmount(address)", +"84ddc67f": "getMyBid()", +"84ddfd4f": "initiateFees()", +"84deb2ed": "VOTING_FINALIZATION_DURATION()", +"84def12c": "migrationBank()", +"84df131b": "getDivdLoadSend()", "84df87c3": "SPITEST()", +"84dfa0d4": "addToFeeList(address)", "84dfb2bd": "setETHAddress(address)", +"84dfba46": "zeroAffine()", "84dfbfe2": "setLpFee(uint256)", +"84dffb49": "__ProvenanceRegistry_init_unchained()", +"84e0923b": "DEFAULT_MULTIPLIER()", "84e0b689": "_yearThreeSupply()", +"84e0d41c": "approveAndMint(address,uint256,int256)", "84e10a90": "getTotals()", "84e11251": "setMinInvestmentLimit(uint256)", "84e192a7": "getArbiterCandidates()", +"84e1a43e": "MultiTransaction(address,bytes32,address,uint256,bytes,address)", "84e1bf74": "emissionOn()", "84e2341d": "internalSetDestinationMultisigWallet(address)", +"84e246c5": "NumberOfBurnedUsersOnThePlatform()", "84e2d578": "OperationAddress()", +"84e2fc92": "ethOptions()", "84e336fc": "ANUNYA()", +"84e33905": "donate(uint256[5])", "84e37ad9": "prefixedHash(uint256)", +"84e3a311": "shadowWinner()", "84e3ac94": "oneTokenInWei()", +"84e4543f": "unknown597ac06e()", "84e45689": "authorize(address[])", "84e4c52b": "getTimeLockSecondsRemaining(uint256)", "84e4d3a8": "freezeAccount(address,bool,uint256,uint256)", "84e4d57f": "ApplyForCertification(string,string,string,uint256)", +"84e4e197": "deposit(bytes32,uint256[],uint256[],bytes)", "84e527ad": "IMDESale(uint256,uint128,uint256,uint256,uint128,string)", "84e60e8b": "ico_promo_reward(address,uint256)", "84e64a1f": "stageStartDate(uint8)", @@ -76003,47 +139124,88 @@ "84e700ee": "totalAllocatedPurchase()", "84e7686b": "setAdmin(address[],bool)", "84e77095": "GetEvidence(bytes32)", +"84e77aa6": "epanToken()", "84e77da2": "updateKryptoroToken(address)", "84e79842": "addAgent(address)", +"84e7b99f": "enqueueL1ToL2Message(address,uint32,bytes)", "84e7e3d3": "MINT_INTERVAL()", +"84e7f930": "canAskLiquidation(address,address)", +"84e82a33": "add(uint256,address,uint16,bool)", "84e83ee2": "SparksterToken()", "84e84506": "onContribution(address,uint256,uint256,uint256)", "84e85974": "YGO()", "84e8a7df": "_soldOutside()", "84e8b36e": "GetAskingTokenDecimal()", "84e8bff9": "burnaftersale(uint256)", +"84e8c21b": "addContractHost(address)", +"84e9bd7e": "claim_rewards(address)", +"84e9d538": "startDeliveringOrder(uint256)", "84e9ec37": "bonusTokenRateLevelFour()", +"84ea2862": "hasAccountPermissions(address,address)", "84ea2e31": "GetDOTNumRevokableHashes(bytes32)", "84eb11ce": "DoggyToken()", +"84eb7731": "deposit(uint256,uint256,bytes32[])", "84eba00c": "tokenholder()", "84ebd065": "NunesTestCoin()", "84ebde52": "Under_the_Hood()", +"84ebf41f": "refundUnspentETH()", "84ec480c": "marketToken2020()", +"84ecd14a": "DRIFT3R()", "84ecdaf6": "advanceState()", +"84ece71f": "partyOver(uint256,address,address[])", "84ececf2": "userCreateSaleIfApproved(uint256,uint256,uint256,uint256)", +"84ed29a0": "getValueViaCompound(address,address,uint256)", "84ed49a7": "isPoweruser(address)", +"84eda662": "totalScore(address)", +"84eeb368": "jobAdded(address)", +"84eeda56": "deviceDataArray(uint256)", +"84eedc73": "_collectedAmountForSwap()", "84ef0778": "tokensIssuedTotal()", +"84ef9ed4": "lastL1L2Batch()", +"84efae83": "safeRepayAllDebt(address,address,uint256,address)", +"84efd675": "devPoolAddress()", "84efe4d6": "backSkinCoinOwner()", "84eff1d0": "walunlock()", +"84f01992": "_safeMint(address,string)", "84f06570": "createAllTokens()", "84f08cd9": "TokenContract(address)", "84f0bb96": "NMRToken()", +"84f10015": "LockETHAndDraw()", "84f10c35": "testTransferCreator()", "84f19f37": "createVoting(bytes32)", "84f1b0b8": "__flooredLog10__(uint256)", "84f1bd4e": "fpart(int128)", "84f1cdb7": "intFunc(int256,int256)", +"84f21932": "OnSendGameGift(address,address,uint256,uint256,uint256)", +"84f272aa": "addToWhitelists(address)", +"84f2836d": "createPairROTWETH()", +"84f31313": "loanEnabled()", "84f32395": "setAssetToExpire(uint256)", "84f3597b": "availableRefunds()", +"84f37a3d": "CONTRACT_DARWINIA_ITO_BASE()", +"84f3859b": "removeToken(address,address,uint256)", +"84f487ef": "addStudent(int256,string)", +"84f4e0b9": "donate(uint256[5],bytes32[3],uint8)", +"84f4ee39": "getCardRequirement(uint256)", "84f54874": "startWeekThree()", +"84f6078b": "pkidPerBlock()", +"84f60a23": "addToNum()", +"84f63a5d": "_newSetting(uint64,uint64,uint256,uint256)", +"84f7ebbb": "getTradesFromHashOrderId(bytes32)", "84f85951": "founderWithdraw()", +"84f877ee": "isAlreadyBought(uint256,address)", "84f88cbf": "TonToken()", +"84f9378a": "mintMulti(address[],uint256[],address)", "84f94221": "getRoot(bytes32)", +"84f9b8f0": "firstEpochRewardPerBlock()", "84f9c928": "get_signature_block(address,address,bytes32)", +"84fa0140": "withdrawAble(address)", "84fa2c97": "totalCentsCollected()", "84fae760": "hello(address)", "84fb24a5": "_addCourse(uint256,string,uint16,uint16,string,string)", "84fb427c": "_transferHolder(address,bool,uint256)", +"84fc0c45": "SaleOpen()", +"84fc3fa0": "changeRootnodeResolver(address)", "84fc8050": "nugget(uint256)", "84fd176b": "bonusPhaseTwoDeadline()", "84fd5477": "isAuthorizedAccount(address)", @@ -76052,6 +139214,7 @@ "84fde1c6": "calculateScorersForTeamIds(uint256,uint256)", "84fdec83": "ownerCanWithdraw()", "84fe5029": "weiCap()", +"84fe698d": "map_cards(uint256)", "84feab93": "Emit_OffchainPaymentFlag(address,address,bool,bool)", "84feed25": "VoxelX()", "84ff2e45": "coreTeamTokenSupply()", @@ -76063,51 +139226,102 @@ "85003d30": "CollateralTransferCanceled(uint256)", "85007e54": "Zakat()", "8500d919": "getBorrower(uint256)", +"8500e479": "AuctionSuccessful(uint40,uint128,address)", +"85010233": "placeOrder(uint256,uint256,uint256,address,address,address[],address)", "85011eec": "Movie(string,string,uint256)", +"8501313f": "auctionsOf(address,uint256)", +"8501db56": "isDmmFoundationSetup()", "8502293b": "newCs(address)", "85025396": "setProviderClientsCount(uint256,uint256)", +"850275a3": "activateExchange(bool)", "8502935a": "maxInflationRate()", +"8502f420": "timesAttacked(uint256)", +"850336dd": "liquidate(bytes32,address,address,uint256,address)", +"85033762": "updateDevAddress(address)", "850382c8": "prova3(uint256[])", "8503a6bf": "ERC721TokenMock()", +"8503ad88": "pendingChoco(uint256,address)", "8503b6a5": "addProposal(address,uint256,address,string,uint256)", +"8503f875": "EventNewPrevOwner(address)", +"85048855": "getmyhotel_reservation(uint256)", +"8504b88f": "walletBalances(address)", "850595c1": "contributorID(uint256,address)", "8505a074": "ClassyCoin()", "85071d9c": "SCARABToken1()", "8507bee8": "joinedCrowdsalesLenMax()", +"8507cb93": "setSysCom(uint256)", +"8507f1a4": "indexGameOf(int256)", +"85082129": "Unstake(address,uint256)", "850895dc": "CheckValidDate(uint8,uint8,uint16)", "8508a693": "doTeamMinting()", +"8508c852": "depositAsERC20(address,address,uint256,uint256,uint256,uint256,bytes)", "8508d88f": "sendICOSupplyToken(address,uint256)", +"8508da5c": "stockCount()", "85093668": "jackpotBank()", +"85096edc": "poolRate()", "8509a001": "rewardDenominator()", +"850a142c": "depositPidCount(uint256,address,uint256)", +"850a1501": "protocolFeeCollector()", "850a1532": "voteSnapshotBalance(address,uint256)", "850a2e78": "setResults(address,uint256,uint256[2])", "850a4621": "emitActiveChanged(bool)", +"850a6cb1": "testRtotal(uint256)", "850a7eca": "endTimeLockedTokensAdvisor()", +"850a91f3": "DelPhase(uint256)", +"850ac5ed": "wethInstance()", +"850b0144": "getNormalizedArray()", +"850b3df6": "TransferredOwnership(address,address)", +"850bad94": "allocation(uint256)", "850c1a0c": "earlyResolveA()", "850c362a": "initCard1()", "850d8a14": "CryptolottoToken()", +"850d8ef3": "presaleBonus(address)", "850d9afb": "ENDTIME()", "850db35d": "didPayInterest(bytes32,address,address,address,uint256,bool,uint256)", "850e141a": "updateYearsSinceRelease()", "850e2bc4": "setLLV_edit_22(string)", "850e3760": "getShine(uint16)", "850e47db": "KudoCoin()", +"850e811b": "sbdoToLp1Route(uint256)", +"850ed153": "getDoggy(uint256)", "850f2e2c": "findTileByAddress(uint16,uint16,address,address)", "850fb62d": "transferProcess(address,address,uint256)", +"851030fe": "sellToken(string,uint256,uint256)", "85107367": "stakeAddress()", "8510b43f": "isSaleRunning()", +"8510e053": "tokenPriceWithSettle(address)", "85113156": "etherERC20()", "8511b843": "addSpaceshipMoney(uint256,uint256,uint256)", +"8511cbdc": "GetEstimateReward(address)", +"8511f53f": "stakingTokensAddress()", +"8511f840": "setLast(address)", +"851212d9": "userBids(address)", +"8512e485": "getEstimatedBATforToken(uint256)", "85138313": "PureAirToken(uint256,string,uint8,string)", "8513c619": "addManager(address,address)", "8513db86": "test_threeValidAndInvalidEqAddress()", +"8514357b": "Investment(address,uint256,uint256)", +"85147079": "totalWhiteListClaimed()", +"85149258": "exerciseOptions()", +"8514e987": "Owner(string)", "851545de": "transformAgent()", +"8515b1d8": "addtoOwners(address)", "8515e413": "payUserOutgoingTransactionCommission()", "851645e6": "getRandomUint(uint256)", +"85164c99": "part(uint256)", +"85167ad2": "perAirdrop()", +"8516dacc": "SetmessiCommunityAddress(address,address)", "85174a31": "transferToSelf(uint256,bytes)", "85177f28": "EthReceived(address,uint256)", +"8518290c": "changeStakeMinAge(uint256)", +"85184640": "withdrawWiner(uint256,uint256)", +"8518530c": "GenericAction(address,bytes32[])", +"85187b7d": "__getPriceSource(address)", "8518b0ad": "scheme()", +"85198705": "userBalance(uint256,address)", +"8519d6b6": "getFlagPriceByFlags(uint256,uint256)", "851a33e9": "getBylawsMilestoneMinPostponing()", +"851a3790": "protectedTokens(uint256)", "851a61d7": "Dist(address,uint256,address)", "851ad4d6": "getNumDragons()", "851aea7a": "setUser(string,string,string,bytes32)", @@ -76121,28 +139335,42 @@ "851cad90": "THOUSAND()", "851cc7f9": "coinMultiplayer()", "851d1c27": "_transferFrom(address,address,address,uint256)", +"851d2900": "allocate(uint256,address,uint256)", "851d46f3": "internalCheck()", "851e6b3a": "buy100Price()", +"851e6d77": "MessageReceiveEth(address,uint256,uint256)", "851ee3e2": "ApproveERC20()", +"851f31c6": "pool7users(address)", "851f9e20": "chargeOff(address)", "85203aa2": "lengthNotEqual(uint256[],uint256,string)", "85209ee0": "contractState()", +"85214599": "IMP14()", "85216449": "checkCustodian()", +"852185fc": "getCollateralRate()", "8521b59c": "addDataPoint(int256,uint256,bytes32)", "852263aa": "LogThresholdChange(address,uint256)", "8522ac8c": "testTransferOwnership()", "85233869": "NumberOfMiners()", "8523930a": "calculateNoOfTokensToSend()", +"85239f12": "getAmountCurrentlyDepositedByContract(address,address,address)", +"852402ac": "DividendCollectSince(address)", +"85245104": "auction__declinePerBlock()", +"85246cf3": "unitMembers(uint256,uint256)", "85252e82": "setTransferFee(address,uint256)", "85255ab0": "Nero()", +"8525f023": "verifyEtherSwapBurn(uint256)", "8526492f": "getTokensAmount(uint256)", +"852655e5": "getWBTCLatestPrice()", "85265ee6": "press_address()", +"8526690a": "setClient(address)", "8526d092": "isValidContributorAddress(address)", +"85271418": "betaUser()", "85271fa1": "_validateUSDAmount(uint256)", "85276721": "DevReward(address,uint256)", "8527831b": "getIndex(bytes32)", "8527c3b0": "changePriceRandomFight2Death(uint256)", "8528b7b0": "WILDToken()", +"85295877": "other()", "852980a0": "addCourses(string,string,string,string,string,string)", "852987f3": "getRecoverSigner(uint40,uint256,uint8,bytes32,bytes32)", "8529d576": "toUint(bytes)", @@ -76151,20 +139379,31 @@ "852a7d6c": "setExtraDistribution(address,uint256)", "852ada4b": "nonFungibleOfOwnerByIndex(uint256,address,uint128)", "852b6121": "setInitialBlockTimestamp(uint256)", +"852b7323": "DisallowTransfers()", "852c061a": "axiesPrice(uint256,uint256,uint256)", "852c5662": "adjustFlame(uint256)", +"852c6ae2": "getConditionId(address,bytes32,uint256)", +"852cb9b8": "depositFeeRate()", "852ccf2b": "YIYSToken(address,uint256)", +"852d3337": "checkUserReward(uint256,uint256,uint256,uint256)", "852da11d": "tokenCreationCapPreICO()", +"852db079": "settingUser(uint256,uint8,uint8,uint256,uint256,uint256,uint256,uint256)", "852dbfc6": "pickURL()", "852dc589": "setQuitLock(address)", "852dce8d": "changeOraclizeGasLimit(uint256)", +"852de32b": "convertExactETHForTokens(uint256,address,address)", "852e9f46": "transferAndFreeze(address,uint256,uint256)", "852ede8d": "removeToken(string,int256)", "852f31c6": "teamStageSetting()", "852f6662": "isProgramFactoryContract()", "852f8b74": "getBookSigner(bytes16)", +"852fec79": "_founders(uint256)", +"853002d3": "getPositionOffset(bytes32,address)", +"85301a01": "setFactProviderInfo(address,string,address,string)", "85307bef": "TronToken(address)", "85318217": "RegisterMine(string,uint256,uint256)", +"85318652": "addInvestorToWhiteList(address,bool,bool,bool)", +"853191c1": "__getPolicyManager()", "8531bb56": "SaleHasEnded()", "8532137c": "Lexzoom()", "853255cc": "sum()", @@ -76174,6 +139413,8 @@ "853504f3": "OpenToken()", "8535490f": "redeemEther(uint256)", "853552d7": "_slotAddNew(address)", +"8535a56b": "confirmOperatorsContract()", +"8535b0d6": "Destroy(bytes32)", "8535d2ec": "sendBatch(address[],uint256[])", "8536a50e": "_setBurnFeeProp(uint256)", "8536bf8f": "BuyIPG()", @@ -76181,53 +139422,101 @@ "853717bb": "calcBurnAmount(uint256)", "85378346": "getChancePowerWithBonus(address)", "853828b6": "withdrawAll()", +"85383f1b": "uniswapRouterAddr()", +"853883bc": "readId()", +"8538b51f": "TestPerBlock()", +"8539b02f": "dbCustomer(bytes32)", +"853a0707": "period4()", +"853a1b90": "winning()", +"853a2be7": "updateMinRebaseTime(uint256)", "853a4ec2": "grantReserveToken(address)", +"853a56f9": "writeRedemptionResponse(uint256,string)", +"853a7330": "debit(address,bytes)", "853a9d32": "EGGS_TO_HATCH_1HIPSTER()", +"853aba78": "uL()", "853b59d7": "phase_1_token_price()", +"853bf169": "TokenLibTestSpender(address)", +"853c4849": "log(bool,address)", +"853d19d9": "expectedAddons()", "853d814e": "MyFairToken()", +"853db323": "getAddressForString(string)", "853df275": "duel(address)", +"853e0a3b": "getblocksUntilLiquidation()", +"853e211b": "founder_kjh()", "853e88fe": "hashVM()", +"853eadce": "write(bytes32,address)", +"853f492d": "getDepositedAt(address)", +"853f4bd2": "pID(address,uint256)", "853f636b": "sendAllTokensToFounder(uint256)", +"853f6552": "approveProcessor(address)", "853f7e98": "BDLToken()", +"8540661f": "ovmSTATICCALL(uint256,address,bytes)", +"85412485": "initalCapacity()", +"854222f5": "AccountFreezing()", +"85423154": "feeChanged(uint256,uint256)", "85423912": "setDiscipleItem(uint256,uint256)", "854254e8": "buildLoanOrderStruct(bytes32,address[6],uint256[9])", +"8542925a": "mintedToken()", +"8543016c": "setUsed(uint256)", +"854303cf": "setAPR(uint256)", "85431ec8": "setRate333()", "85439f82": "someFunction4()", +"8543cc4d": "changeCoin(address)", +"8543d5e0": "globalDebt()", "8544023a": "nokuMasterToken()", +"854437dc": "addTokenToBlacklist(address)", "85443a2b": "CampaignContract()", "85444de3": "getChildChain(uint256)", "85445829": "numMatches()", "85448c59": "getBountyAddress()", +"85449c09": "claimBoosts()", +"8544d3fa": "average_buyInTimeSum(address)", +"8545f4ea": "setMintCost(uint256)", +"8545fdba": "getPrices(uint256,address[])", "85461f69": "calcReward(uint256,address)", "854642e1": "mintNewDrawings(uint256)", "8546d393": "Anatomia(uint256,uint256)", "85473be1": "maximumCoinsPerAddress()", +"85474728": "destroySmartContract()", +"854755dd": "_teamNetworkEarnWallet(address,uint256)", +"854768c0": "isLoanSecured(uint256)", "85476d6e": "GetCurrentTypeSaleItem(uint256)", "854772ea": "getUserTotalReward(address,bool,bool,bool)", "8547af30": "lastBidder()", "8547bb3a": "publicSaleMode()", +"8547c6d8": "txtPriceEth()", "85482f89": "setOnePowerAge(uint256,uint256)", "8548cc21": "allocateOwnerTokens()", +"8548ce34": "startOwnerChange(address)", "8549b326": "isSettable(uint256,string)", +"8549d53a": "ThreeTSymbols(address,uint256)", "8549d6f4": "MayanProtocolContract(uint256,uint256)", +"854a0960": "transferPosition(address,uint256,address)", "854a3d64": "LogStartSale(uint256,uint256)", "854a9cc4": "ImpeachmentProposed(address,string,uint256,address)", +"854af509": "stakedIntervalsCountOf(address)", "854b1cdf": "curPayTableId()", +"854b23f5": "getPlayerInGame()", "854bb344": "NoblesseOblige()", "854bec87": "payback()", +"854c23e1": "setUnitAttackMultiplier(address,uint256,uint256,bool)", +"854c2a10": "MIN_SLIPPAGE()", "854c2e1e": "HitToken(string,string,uint8,uint256,address,address,address)", "854c4a0d": "DownSuccess(string,address)", "854c584d": "AdsventureToken()", "854cb674": "TheIlluminati()", "854cd978": "ClaireToken()", "854cff2f": "setWhitelist(address)", +"854d9ed9": "setMinEth(uint256)", "854e32cc": "revenueShareDistribution(address)", "854e85c6": "lifeEvents(uint256)", "854ecd23": "Vaynix()", +"854f0412": "getUSDTstaked()", "854f1663": "setNonprofitDisbursementAddress(address)", "854f1a1c": "VIVARefundVault(address)", "854f3988": "eighth_withdrawal(uint256)", "854f4817": "buyKissBTCWithCallback(address,uint256)", +"855016ac": "birth(uint256)", "85502264": "deptcheckrespond(address)", "85506473": "GnosisToken(address,address[],uint256[])", "855085b8": "interCrypto()", @@ -76244,22 +139533,33 @@ "85529636": "getSiteTokenId(uint256,uint256)", "85530d7c": "setPetLastBreedingTime(uint64)", "85535cc5": "setVaultAddress(address)", +"855378b1": "getAcceptableUnderlyingPriceToSwapAssets(address,address,bool)", "8553f6fb": "hardCapDividends()", +"85541896": "FinishedSale()", "855460d8": "externalBuy(address,uint256,uint256)", +"8554c36f": "viewAmountOut(uint256,address)", "8554d60a": "addTenParticipants(address,address,address,address,address,address,address,address,address,address)", "8554d92c": "verify(uint256,uint256,uint256,uint256,uint256)", +"8554ee3a": "approve_58(address,uint256)", +"8554fbab": "choicesCount()", "85550c6b": "tradeKey(bytes32,bytes32)", +"85555934": "discardDefaultDecayPeriodVote()", "8555cde9": "Permissioned(address,address,bool)", "8555de47": "BlackPyramid()", "85561120": "TPTToken(uint256)", "85564b97": "MasterWithdraw()", "85565585": "crowdsaleOwner()", +"85577972": "ValueHolder()", +"8557c5b6": "getBnbPriceInUSD()", +"8557fc95": "SetDelegate(bool)", "85580c5b": "userinverst(uint256,address)", "85586e8a": "allocateCommunity(address,uint256)", "85587375": "restartAssign()", "855876d5": "countCliDreams(address)", "8558c0af": "createBag(uint256)", "8559fd88": "requestRandom(uint8)", +"855a0fe3": "dep()", +"855a8512": "totalDeposit_(address)", "855b7f5b": "getAdvancedTransfer(bytes32,bytes32)", "855b842d": "isUserInBlackList(address)", "855c145b": "specialManagerCountInt()", @@ -76269,31 +139569,73 @@ "855ce579": "setTwoPowerAges(uint256,uint256,uint256,uint256)", "855ceb7d": "AirToken()", "855d0700": "insertList2(uint256,uint256,uint256,uint256,string,uint256,string)", +"855d175e": "mint(uint256,bytes32[9],bytes32[2],bytes32[21])", "855d7c21": "updateTokenBaseRate(uint256)", +"855d9042": "removeKittyCreator(address)", "855e0629": "setIconRate(uint256)", +"855e2168": "availableNinja()", +"855e4d25": "setOracles(address[],address)", "855eafa7": "get_maker_fee()", +"855eefd4": "approve_697(address,uint256)", +"855f0924": "updateStakingPoolRemove(uint256)", "855f2b3a": "createGen0Auction(uint256[2])", "855fe4c0": "ifSuccessfulSendFundsTo()", "855fe6ed": "getConfigEntryInt(bytes32)", +"85600d7a": "selectCandidates(address[],uint256)", "85602ad5": "getPreviousValidators()", +"85604e31": "setPrice3(uint256,uint256)", +"85608f3f": "poolInfo_single(uint256)", "85609b1c": "compose(string)", "8561d136": "currentRunningAddress()", "8561dc0b": "tokenPostIcoUsdCentPrice()", +"856222f1": "ISSUE_ROLE()", +"856296f7": "getCollectionId(bytes32,bytes32,uint256)", +"8562be75": "totalBNBSupply()", "8562e452": "ADVISORS_SHARE()", +"85632e7e": "BookUpdated(address,bool)", +"85634ebb": "LogSetMintMaster(address,address)", +"85636ce5": "unfreezeEth(address,uint256)", +"8563a8f6": "createContract(bytes,bytes32)", +"8563cf33": "AuthorizeServiceProvider(address,address)", +"8563e845": "transferAsset(bytes32,bytes32)", +"85644e2e": "EmergencyDemocOwner(bytes32,address)", +"8564632c": "transferFundsTo(address)", "8564b2cd": "listItem(uint256,uint256,address,uint256)", +"8564b315": "swapCoin(uint256,string,string,address)", "8564c284": "setCompte_34(string)", +"856516c3": "startSeason(string,uint16,uint16)", "85652d1f": "getInvoiceAddress(uint256)", "85654c9c": "setMembershipRoster(address)", "85663119": "initialPrize()", +"856652e9": "userOrders(address,uint256)", +"85665372": "dichiarazione()", "85666a7c": "TEAM1()", +"8566de4b": "liquidityTemplate()", "85673296": "DepositBalance()", "85673fb8": "follow(address,uint256,address)", +"8567635e": "feeRecipientBasisPoint()", +"85679096": "mintJUS(uint256,uint256)", +"8567ade8": "tipImageOwner(uint256)", +"8568523a": "transferToOwner(address,uint256)", +"85687f4a": "UseItem(uint256,uint256)", +"85693803": "firesEvent(address,uint256)", +"85698250": "TOKEN_PER_BNB()", "8569cc4e": "release_4()", +"8569e587": "parseTwoUint256ToBytes(uint256,uint256)", +"856a2cf8": "ticketValidityPeriod()", +"856a36d7": "alarm(address,address)", +"856a65eb": "batchExecute(bytes[])", "856a89fd": "drawRaffle(uint256)", +"856af197": "Reward(uint256,address,uint256)", "856b3108": "UpdateInitiateContractAddress(address)", +"856b414e": "setClientRaindropAddress(address)", "856b7d2c": "SignDividend(uint256)", +"856bb383": "approveSpendBNB(address,uint256)", "856bb9cc": "addConsent(address)", +"856bf9ed": "generateMerklePath(uint256,uint256,uint256)", "856c0181": "countriesStatus()", +"856c1931": "changeBid(address,uint256,uint256)", +"856c1da1": "SPARE()", "856c486b": "WoodyToken()", "856c6bd1": "checkRose(bytes32)", "856c71dd": "isAvailable()", @@ -76304,29 +139646,52 @@ "856deacf": "findTag(string)", "856df931": "LYB(string,string,uint256)", "856e8488": "erc20TokenContract()", +"856e8bad": "burnCollectedFees()", +"856e99f4": "deposit_NFT(address,uint256,string,string,uint8,uint256)", "856eb2d1": "submitTransactionWithSignaturesToken(address,address,uint256,uint8[],bytes32[],bytes32[])", +"856ebc1c": "Roll(uint256,uint256)", "856ed703": "currentCap()", +"856efe45": "CTOPerBlock()", "856f3080": "WhatWasMyHash(bytes32)", "8570153e": "publish(string,string,bytes,address[])", +"85702d59": "getSpecialUser(uint256,uint256)", +"857066a7": "setStakeTime(uint256)", +"85709bc8": "Log2_fnc(address,bytes32,uint256,string,string,string,function,uint256,bytes1,uint256,uint256)", +"85712c25": "YFGMLockTwo()", "85716e2f": "changeAdminer(address)", "8571baff": "SimpleCrowdsale(address,address,address,address)", +"857259b1": "GetCowEvent(uint256)", +"8572c919": "saiTubAddress()", "8572e364": "scale(uint256,uint256,uint256,uint256,uint256)", +"857355c9": "receiveSecondOwnership()", "8573d4aa": "OwnershipTransferPending(address,address)", "8574ddf9": "snailmasterReq()", +"8574e23f": "first_ratio()", "8575052a": "set_fees(uint256,uint256)", "857512b4": "airdropCountLimit2()", "85760377": "PixelTransfer(uint16,uint16,uint256,address,address)", +"857620e1": "removeLiquidity(uint256,uint256,uint256)", "857637c9": "ShopDexToken2()", "85766cc3": "Calculation(string,string,string,string,address)", +"8576e87e": "SentToLiquidator(address,uint256)", +"8577a6d5": "updateTransferFee(uint256)", "8577efc5": "DIGI()", "8577ffc1": "unofficialUserSignUpFee()", "857835f9": "getPostsFromIds(address[],string[],uint256[])", +"85783b5a": "withdrawAll(address,address,uint128,uint112)", +"85786968": "getUserInfo(address,address,address)", "85787c8b": "encode(uint256[],uint256[])", "85796a2d": "bonusClosingTime0()", "8579c10e": "payDevelopersFund(address)", "8579cbde": "getPrice(string,uint256,address)", +"857a52b8": "usdcBuyback()", +"857a6f5b": "COLORS(uint256)", +"857a76ec": "numberOfNfts()", "857ac1c9": "TokensBurned(address,address,uint256)", +"857ace8d": "deployerFeeOf(uint256)", +"857af01b": "feeLevels(uint256)", "857b3224": "setOAR(address)", +"857b4631": "VotingOff(uint256,uint256)", "857b575e": "qquizwinnerToken()", "857b7dfc": "buyLittleDragonGirlLottery()", "857ba7fb": "MAX_CONTRIB_CHECK_END_TIME()", @@ -76335,73 +139700,152 @@ "857cd569": "FundDeposit(address,address)", "857cdbb8": "getPublicKey(address)", "857cfff9": "homeDailyLimit()", +"857d2608": "SMART_CONTRACT_ROLE()", "857d39d7": "CCH_LLV_FIFA_1()", +"857d4082": "SoldEgg(address,uint256,uint256)", +"857d49d5": "parameterAdmin()", "857d4c07": "throwScraps(uint256)", +"857d56f4": "changeAllowedToken(address,bool)", +"857d5d7a": "fatRewards(address)", +"857d613c": "SetMiner(address,address)", +"857e382f": "test(bytes32,uint256)", "857e6a99": "decreaseTokens(address,address,uint256)", +"857f0981": "isOldUser(address)", "857f4864": "getNextSnapshotTime()", "857f54e4": "MonethaGateway(address,address)", +"857f5712": "ErrorCountry(uint256)", +"857f6f7e": "getPledgeCount(address)", +"857fbf17": "SetLiquidityLock(uint256)", +"857ff2c4": "retrieveWord()", +"858027e5": "checkTickSpacingToParametersInvariants(int24)", "8580563c": "finalize(bytes,bytes,bool)", +"85808ba6": "NewRequest(uint256,string)", +"85809e6a": "ReceivedCarrot(uint256,bytes32)", "8580b71b": "getLoanIDbyClient(uint256)", "8580eb2f": "setFeeBalance(uint256)", "858110a5": "proposeShutdown(uint256)", +"85811fbf": "getSwapAddress()", "858155e4": "subcontractExecuteCall(address,uint256,bytes)", +"85815e15": "chargePercent()", +"8581acdd": "setPreIcoManager(address)", +"8581af19": "beginDispute(uint256,uint256,uint256)", "8581dc7c": "SociBit()", "85820925": "getCompte_17()", "8582ac21": "getIcoInfo()", "8582b7dd": "OrxERC20()", "8582e554": "transferBy(address,uint256)", "858310d8": "getPreICOAddress(uint8)", +"85837e34": "BonusCalculated(uint256)", "85839731": "setKittyContractAddress(address,address)", "8583b1b8": "_setUserInfo(address,uint256,uint256)", +"8583c7c0": "recoveryOwner()", +"8583cc0b": "getBytes32AndUint()", +"8583f355": "devTeamAddr()", +"858409ba": "percentageBuyBurn()", +"85847c30": "totalBusd()", +"858594eb": "nftRequired()", +"85859af4": "getUnionConcil()", "85861b15": "setUnboundedLimit(address,bool)", "85867cd5": "BDSMtoken()", "8586b2f0": "getPermission(address,string)", "8586e75b": "ChangedResource(bytes32)", +"858750ab": "burnableLiquidity()", +"8587671e": "activeBooster(address)", +"8587be22": "approve_696(address,uint256)", "8587be6e": "ceil(uint256,uint256)", "8587edbb": "lockEndBlock()", +"85881a7a": "AddVerifiedInfo(address,address,uint8,string,string,string)", +"858844fb": "_checkmemotexts(address,uint256)", "8588b2c5": "adopt(uint256)", "85899cee": "CryptoThreeKingdoms()", "8589c725": "deleteWork(uint256)", +"858a135d": "getRewardsBalance()", +"858a7c03": "decreaseValidatorDelegatedAmount(uint256,uint256)", +"858aa5e5": "setCompAddress(address)", "858ac4d8": "TransferOwner(address)", +"858af592": "allHodlers(uint256)", +"858b033d": "priceOfETH()", +"858b92a4": "calculate(address,uint256,uint256,uint256[],address[])", "858c7559": "chainIDSeed()", +"858caeb5": "unlockDate12()", "858ced35": "setUser(address)", +"858d087f": "owner_appeal(address,uint256,uint256)", +"858d8487": "backBank(uint256)", +"858dd74a": "setProfitAddr(uint256)", "858e41b4": "lemonContract()", "858e58d6": "RemapImportedNotUsed()", +"858ea067": "getAthletesByDistance(uint256)", +"858ece5b": "userTeamTwoStake(address)", +"858efdf7": "cPSwapRouter()", +"858f2384": "setToken1ToEarnedPath(address[])", "858f84e7": "WTFToken()", "858fa2f5": "setArrayIndexValue(bytes32,uint256,address)", +"858fcd9d": "addMMintableCurrency(address)", "85903f67": "setUnofficialUserSignUpFee(uint256)", "85908ffa": "buyTokensPostHook(address,uint256,uint256)", "85909ac6": "operate(address)", +"8591049e": "minBetERC20(address)", +"859180fb": "SYNC_CHANNELID()", +"8591b2ad": "issuanceCancelled(bytes32)", +"85923658": "buyEvt(address,uint256,uint256)", "8592b778": "_rand()", +"8592c242": "mdsToLp0Route(uint256)", +"859326d1": "depositToLOCK(uint256)", +"85936228": "assets(string)", +"8593971b": "bunnyBNBFlipToken()", "8594bed0": "cancelMintRequest()", +"8594db8c": "idQueue(uint256)", "85952454": "newOwner(address)", +"8595475e": "calculateAmount()", +"8595482c": "priceBEA()", "8595c9ff": "diff(uint256[])", "8595f8b1": "getGasPricePctOfBetValue()", +"85961864": "getRateWithE(address,bool,uint256,uint256)", "8596982d": "getNotesCount()", +"8596d4e9": "getMs(address)", "8596d9ed": "transferInternal(address,uint256,address)", +"8596f3d6": "addLiquidityTwoSidesOptimal(uint256,uint256,uint256,address,uint256)", "8597705f": "DataEquip(address)", +"85979f76": "ovmCALL(uint256,address,bytes)", "8597eb6e": "ericukis(uint256,string,uint8,string)", "859832e6": "locationsLength()", "85984e69": "WavesCommunityToken()", "859971dc": "initialFunding()", +"85998b33": "viewProcessorLength()", "8599d0d8": "buildIdentifier(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", "859a711d": "icoBonus2EndDate()", "859a954b": "peace(string)", +"859adb60": "setAuthor(address,uint256)", +"859ae48e": "btoi(uint256)", +"859b1cdd": "Approve(address,address,bytes32,uint256)", "859b97fe": "cancelAuction(address,uint256)", +"859ba187": "settlePenalties(uint256,uint256,uint256)", +"859ba28c": "getTokenInterfacesVersion()", "859bbfee": "floatAdd()", +"859bc2f3": "transferList(address[],uint256[])", "859bcc71": "allowDisbursePaymentWhenPaused()", +"859c5590": "setDebtUniswapLPContract(address)", +"859c7dfc": "getFooBarNaz()", +"859cb13a": "fireDistributor(address)", "859ccc72": "setPlayerVirusNumber(address,uint256)", "859d1bc7": "updateLeftLottery()", +"859d3e12": "getLeagueCount()", "859da4e3": "transferParityOwnership(address)", "859e0547": "createBounty(address,string)", "859e25df": "giveProjectMoreVotes(address,uint256)", "859e7d32": "getEpochData(uint256)", +"859ec373": "DepositCommission(uint256)", "859f5717": "AuctionSuccessful(address,uint256,uint256)", "859f63dc": "checkRewards(uint256[])", +"859f6d8a": "totalSupplyBurned()", +"859fe6c7": "deposit(uint16,uint256)", "85a013e0": "setAnswer(uint256)", +"85a022b6": "showReserves1()", +"85a074e9": "COMMITTEE_CONTRACT_ADDRESS()", "85a08f41": "buyLimitSupplyMax()", "85a09f6f": "withdraw123()", "85a10b30": "burningAdress()", +"85a13f38": "addDebt(address,bytes32,address,uint256)", "85a143f4": "DailyRoi()", "85a156af": "activityFunds()", "85a17a1a": "isValidBet(uint8[4])", @@ -76419,16 +139863,35 @@ "85a38635": "votingEnd()", "85a4757e": "releasedAmountBlocksIn(uint256,uint256)", "85a49f2e": "verifyPass(address)", +"85a4d02e": "Messages(uint256)", +"85a51f3f": "totalRecievedMoney()", "85a52584": "SettingsChanged()", +"85a58947": "YFGMToken()", +"85a5affe": "signMessage(bytes)", +"85a5c939": "requestChangePeriod(address,uint256,uint256)", +"85a66b91": "Mint(address,uint256,string)", "85a735dd": "partAllocationLength()", +"85a83f09": "savingsContract()", +"85a876ae": "migrateLockedLPTokens(address,uint256)", +"85a8ebbd": "Owner_SetChangeProp(uint256)", "85a8f42e": "diff(int256[],int256)", +"85a968bc": "basedConverter()", +"85a99879": "REDEEM_TYPEHASH()", +"85aa4cde": "EscaperoomAdmins(address)", +"85aa570d": "addNewPhase()", "85aa6103": "auctions()", "85aa6e09": "granted(address)", +"85aa71a8": "testCall4(address,uint256,uint256)", "85aa92a7": "storageAddress()", "85aaff62": "transcoder(uint256,uint256,uint256)", "85ab0c19": "tokenProvenance(uint256)", "85aba275": "assign(address)", "85ac2f7b": "getListedTime()", +"85ac4515": "isDeceased()", +"85ac73d9": "getUserAffiliateBalance(address)", +"85acd641": "getModule(bytes32)", +"85acd80d": "batchClaimUnstakedBNB(uint256)", +"85ad8f44": "massAdd(address[])", "85add95b": "Spike()", "85ae067b": "func_040B()", "85ae2f1c": "sunFinished()", @@ -76436,146 +139899,279 @@ "85af4142": "verifyTeam(uint256)", "85b018e9": "isSubjectRaiseTap(uint256)", "85b09a01": "DIVC()", +"85b118aa": "addResolverFor(address,address,bool,uint256,bytes,uint8,bytes32,bytes32,uint256)", "85b12c7c": "launch(uint256)", "85b1423e": "returnAll()", "85b142ed": "getAccountState(bytes32)", +"85b2566a": "spend(address,uint256,uint8[],bytes32[],bytes32[])", +"85b2614a": "endChallegeWeiPerSPX()", "85b2ff8f": "getWeightedRandomMember(uint256)", "85b31d7b": "myInfo()", +"85b34bc9": "lastRepriceTime()", +"85b39782": "extract(uint256)", +"85b39d83": "contractStakerCount(address)", "85b39fc1": "CONTRACTIUM()", +"85b3b2eb": "getDivsBalance(address)", "85b3c420": "createWeight(uint256)", "85b3ed4e": "GoalReached(uint256,uint256)", +"85b41696": "shareholdersCounter()", "85b443b6": "econReserveWallet()", +"85b44a26": "MakeOffer(int256)", +"85b44ea2": "batchMintTo(address[],address,string)", +"85b479c1": "ApexTalked(string)", "85b4bb53": "getSettings()", "85b51737": "addSafe(uint256,uint256)", +"85b52b49": "item23IndexToApproved(uint256)", "85b55c07": "withdrawFeesToPoolOwners()", +"85b5f1d7": "getWantTokenWhiteListOnly()", +"85b622a6": "getDepositTime(address)", +"85b66729": "collectProtocol(address,uint128,uint128)", "85b6824f": "setMinterWallet(address)", "85b688de": "PRIVATE_STAGE_START()", +"85b6b621": "totalOfferRaise()", +"85b6e28e": "returnAllProjects()", +"85b73686": "poolTotalRewards()", "85b73d3c": "testCreateNewRevision()", +"85b74251": "approve_173(address,uint256)", "85b75b1e": "toogleStatus()", +"85b7979d": "graceDividend10(address)", "85b86188": "isSaleClockAuction()", +"85b89693": "prizeRange(uint256)", "85b8c64a": "bonusFreeLOT()", +"85b8cd61": "Mint(address,uint256,uint8,bytes32)", "85b8d86f": "CrowdSaleFinished(string)", +"85b8e38f": "approve_182(address,uint256)", "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)", +"85ba0592": "AVG_BLOCK_TIME()", +"85ba7a22": "withdrawProfitByLabel(bytes32,address)", "85ba9a99": "setMinimumHydroStakes(uint256,uint256)", "85bac237": "addPayment(address,uint256)", "85bb7d69": "answer()", "85bb821b": "WTO()", "85bb8e29": "continuousSale()", "85bbb53a": "ancestorBuffPercentage()", +"85bd5140": "FuckValue()", "85bdc4a2": "lastBlock_v16()", "85bddb97": "addOnOneStage(address,uint256,uint256)", "85bde3f2": "SaddlePr(uint256)", "85be2f02": "SampleCrowdsaleToken(string,string,uint8,uint256)", "85be8fe6": "confirmReceivedAt(uint256)", +"85bf5728": "Admin_5(address,address,uint256)", "85bf96a0": "JOP(uint256)", "85bfe55d": "getUserByEmail(bytes32)", "85bfff9c": "sayNoNo(uint256)", "85c07546": "TransformCoin()", +"85c07c3e": "getLiqToReserveInputPrice(uint256)", "85c09f26": "topTotalSupply()", "85c1057b": "payAndHandle(uint256,address,uint256)", "85c15d9a": "exchangeRates(address)", +"85c1fdea": "userRef(address)", +"85c32402": "salelive()", "85c3649f": "registerSelf(bytes32)", "85c373c3": "releaseAccount(address)", +"85c3a1aa": "checkTransferAllowed(address,address,uint256)", "85c3bb6f": "getMsg2()", +"85c3e133": "signContact(address)", +"85c48ab0": "tokenDepositsDelegated(address,address)", "85c4e3d1": "sendSubscriptionBonus(address)", +"85c539e6": "computePenaltyPropotion(uint256)", "85c53cf1": "giveAccess(address,bytes32)", +"85c5ba2d": "_extrenalRouterCall(string,address[3],uint256[3])", "85c5e9f8": "mimin(uint64,uint64)", +"85c5efe4": "findActivedReferrer(address,uint8)", "85c64029": "set_prices(uint8,uint8,uint8)", "85c653ba": "Divsforall()", "85c78fac": "retryOraclizeRequest(uint256)", "85c7a953": "WithdrawFullBalanceFromBankAccount()", +"85c7bfd0": "runElection()", +"85c81bb4": "inGlobalSettlement()", "85c855f3": "setStake(uint96,uint128)", +"85c858b1": "getLendingPoolConfigurator()", +"85c87a8c": "cashback(uint256)", "85c8d362": "CTM()", "85c8f447": "totum()", +"85c93feb": "supplyFunding(address,uint256)", "85c95d30": "setResourcesOtherManager(address,uint8)", "85c9dd72": "GCOXToken(string,string,uint8,uint256)", +"85c9f85e": "_ntokens()", "85ca165a": "count_donors()", +"85ca3a39": "chnageTransferBurnRate(uint256)", +"85caf2c8": "CutsUpdated(uint256,uint256,uint256,uint256)", "85cb2e6e": "refreshEmissionReleaseTime()", "85cb469a": "getIcoFund()", "85cb4ea2": "getPunchCardsInternal(address)", +"85cb8b57": "lockTPT(uint256,uint256)", "85cba6b1": "getFallback()", "85cba722": "EGLSold()", "85cbc881": "totalUSDRaised()", +"85cc1486": "borrowSafeRatio()", +"85cc179e": "updateReward(uint8)", "85cc3114": "doDeposit(address)", "85cc51c2": "destTokensTeam()", "85cc63ec": "getCurrentMinigamePrizePot()", "85cc6fba": "boomrToken()", "85cc9a2b": "issueKey(bytes32,address)", "85cd233c": "getResidualEtherAmount(uint256,uint256)", +"85cd7331": "RESUME_EXECUTION_ROLE()", "85cdafa6": "teamOneVolume()", +"85cddc63": "createRequest(bool,uint256,uint256,uint256,uint256,uint8)", +"85cdfa2b": "manualApproveTransfer(address,address)", +"85ce38be": "increaseValuation(uint256)", +"85ce4fee": "uniToken()", +"85cec614": "ActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2],uint256)", "85cf61ef": "payRake(uint256)", "85cfdec7": "buyKWHAgainstEther()", +"85cfe8a9": "unction(int256)", "85d02c8a": "changeMaximumInvestmentsAllowed(uint256)", +"85d0cecb": "OnSellBLK(address,uint256,uint256)", +"85d1079e": "claimPrize(uint128,uint64,uint64)", +"85d162ad": "getGlobalKey()", "85d178f4": "withdrawWallet()", "85d19a25": "getPositionId(uint256)", "85d1be13": "preSaleSecondPrice()", +"85d1ef63": "mint2()", +"85d2044e": "readData2(string)", +"85d2398b": "fireTransferEvent(address,address,uint256)", +"85d260fa": "getAddressOfOwner()", +"85d29e4f": "dtradeReceivedForEther(uint256)", +"85d30fc8": "fee3()", +"85d33002": "addressIsWhitelisted(address)", +"85d36cd7": "cumulativeRates(address)", +"85d37e97": "startNewRound(uint256,address,address,uint256,uint256,uint256)", "85d3b5bd": "policyID(uint256)", "85d45d34": "comments2()", +"85d49496": "getClaimLength()", "85d51d19": "contributorETHBalance(address)", "85d544be": "transferAndLockUntil(address,uint256,uint256)", "85d559ee": "TbookToken(uint256,string,string)", +"85d57858": "BuyerList(address)", "85d5c971": "logTransfer(address,address,bytes32)", "85d5e631": "disableTokenTransfers(bool)", +"85d5f44e": "abyss()", "85d61e2a": "supplyNum()", "85d63cce": "REMAINING_SUPPLY()", +"85d67cd2": "burnenabled()", +"85d6a74b": "wBalance()", "85d71df1": "investxPlatform()", +"85d75025": "getTokenWallet(address)", "85d77e5f": "priceExpiration()", +"85d79265": "_setCMURL(string)", "85d80458": "m_deployer()", +"85d895ef": "viewTokensCount()", +"85d8a3aa": "updateHegexoption(address)", +"85d9a3cb": "INVESTMENT_AGREEMENT_TEMPLATE_URL()", +"85d9aabb": "set(uint256,uint256,uint8,bool,uint256,uint256,uint256,uint256)", +"85d9e649": "died(uint256)", +"85d9e95c": "swapExactETHForTokens1(uint256,address[],address,uint256)", "85da1192": "setMaxFaucet(uint256)", +"85da735a": "setMaxRange(uint256)", +"85da9b98": "setAllowLimitedWallet(bool)", "85daafe6": "capitalRaisedTarget()", "85dacd5b": "voteSnapshotBalanceAuto(address,uint256)", "85db2dda": "PayoutQueueSize()", "85db2e3a": "PoD()", +"85db41cf": "checkTurns()", "85db66e8": "addGroupMembers(bytes32,address[])", +"85dbcf79": "getOutcomeTally(uint256,uint8)", +"85dc0c56": "getExpectedRateOnlyPermission(address,address,uint256)", "85dc3004": "setFundAddress(address)", +"85dc5806": "getEthBuyBP()", +"85dc6446": "OfferGameCancelled(address,uint8)", "85dc6721": "emptyShipCargo(uint32)", +"85dc82f5": "addwork(string,uint256)", "85dcbb5a": "returnMember(address)", +"85dcdf1b": "generateNumberIndexKey(uint8[4])", "85dcee93": "descriptionHash()", "85dcfbd4": "VernamWhiteListDeposit()", "85dd1fbd": "bet_on_team_1()", "85dd2148": "getSaleDate(bytes16)", "85ddb747": "transferFromPosttgefund(address,uint256)", "85ddf726": "dismissOperator(address)", +"85ddfd9c": "sendWeeklyAward(uint256)", +"85de26b7": "notes(bytes32)", "85de4841": "uint2str(uint64)", "85de4f72": "luckybuyTracker_()", +"85de5043": "multitransfer(address,address,address,address,address,address,address,address,address,address,uint256)", +"85dea2c2": "interestsOf(address)", +"85dece88": "getRewardClaimable(address)", "85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", "85defaf4": "voteEnds()", +"85df086f": "f(uint16,uint16,uint16)", +"85df2a78": "getRandom(address,uint256)", "85df508f": "tip_rate()", "85df51fd": "blockHash(uint256)", +"85dfd364": "defaultBaker()", +"85dff0ff": "setMinSaleAmount(uint256)", "85e00e4b": "bezpolToken()", "85e040b1": "Invested(uint256,address,uint256)", "85e050e4": "get_property_contact(uint256)", "85e05445": "MartiniumToken()", "85e0832c": "totalMintSupply()", +"85e12f6f": "withdrawBenefactorFundsToValidated(address,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"85e16120": "we_dep(uint256)", "85e1684c": "computeS(uint256,uint256)", +"85e1f4d0": "CHAIN_ID()", +"85e1f66c": "ge(uint256,uint256)", +"85e22bff": "a_CaQ(address,address[],uint256[],uint256)", +"85e2381c": "updateAdminAddress(address)", +"85e2b39f": "setEscrow(uint256,uint256)", +"85e2b880": "transferOut(address,address,address,uint256)", +"85e332cd": "SENTINEL_MODULES()", "85e344f7": "SmartInvestmentFundToken(address)", +"85e36c00": "removeVoteBox(address)", "85e36cc2": "foundationAmount()", +"85e3e251": "setmyString(string)", "85e3f058": "getIdentity(uint256)", +"85e3f997": "TOTAL_SHARES()", "85e41e7e": "TokenFree(uint256)", "85e436bf": "setBuyRate(uint256)", +"85e4a9b4": "mint(address[],uint32[])", +"85e4b180": "Sav3xrpRewardPercentage()", +"85e51615": "setAuctionParms(address,address,uint256,uint256,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)", +"85e5fc6b": "nftNames(uint256)", "85e612e4": "getBirthYear()", "85e61b4a": "processFundingSuccessfulFinished()", "85e61e67": "set_arbits_whitelist(address,address,bool)", +"85e6420a": "quotePrice(address)", "85e68531": "revokeAccess(address)", +"85e694b6": "getPairAddress(address)", +"85e76de4": "ConfirmForm(uint256)", +"85e78f85": "getPlayer(bytes32)", +"85e79aa9": "P3_TOKEN_REWARD_PERCENTAGE()", "85e7d4cb": "CCC()", +"85e7f1e0": "_withdrawFrom(address,uint256)", "85e870b3": "default_rate()", +"85e8e7a7": "electionName()", "85e91347": "initializeSaleWalletAddress()", "85e99be4": "updateHighestPrices_(uint256,address)", +"85e9a341": "REI04()", "85e9bd2b": "setAdminAddress(address,address)", +"85ea3742": "poolSigs(bytes32)", +"85eaaebb": "executeSell(uint256)", +"85eab428": "hashForSignature(string,address,uint256,bytes32)", "85eac05f": "changeOwnerAddress(address)", +"85eb4776": "getCeiling(bytes32[])", +"85eb50c1": "weiPerNova()", "85eb6109": "getAddressClaims(address,address,uint8)", +"85ebd942": "fly(uint256,address[],address[])", +"85ebf013": "getMyMoney(uint256)", "85ec419a": "setTokenTwdt(address)", +"85ecc89b": "setActiveReward(uint256)", +"85ed0a1c": "attackBuy(address)", +"85ed4223": "bootstrapRound()", "85ed5cf9": "resetAlias()", +"85ed68ab": "createCollectible(string,string,string)", +"85edbb76": "stealz(address)", "85eddeea": "setReward(address[],uint256[])", "85edf68d": "initVestingStages()", "85ee292c": "airdropTesterFinal(address[],uint256)", @@ -76583,8 +140179,10 @@ "85ef5a8a": "GermanCoin(address,address)", "85efa3aa": "setHold(address)", "85efb721": "fillTheBank()", +"85efc013": "LogSetUpgradeTarget(address)", "85eff0ef": "hardcoreBattleWith(uint256,uint256)", "85f01859": "setWord()", +"85f02dd6": "controllerFee()", "85f07a2b": "CALLER_EXCHANGE_SHARE()", "85f07b64": "confirmedAmount()", "85f07bbe": "MIN_PLAYERS()", @@ -76592,23 +140190,40 @@ "85f0f098": "allowWithdrawals()", "85f16544": "EdgarRichardWunsche()", "85f19bc4": "giveDividend()", +"85f1a2d8": "TechVestingTimer(uint256)", +"85f252f6": "Do_Receiving()", "85f255ea": "getUserFactoryContractAddress()", "85f2aef2": "team()", "85f2d854": "createManyDrinks()", "85f2e4b1": "_strConcat(string,string,string,string)", "85f3c568": "LogContribution(address,uint256,uint256)", +"85f4498b": "canUnstake(address)", "85f45250": "addFunds(uint256,uint256)", +"85f484f0": "swapChi(address[],uint256,uint256,uint256,address,bool)", +"85f49908": "f2c()", "85f517d4": "account3Address()", +"85f52204": "unlockCN(uint256)", +"85f5276f": "isClaimed(bytes32,uint256)", "85f52912": "TGRUPToken()", "85f52984": "addPrecondition(address)", +"85f55661": "Change(uint256,string)", "85f59db3": "CheckN2Exception(bytes32,uint32)", "85f63a4a": "preICOBeneficiaryAddress()", "85f671a6": "requestWithdrawal(bytes32,uint64,bytes32[],uint256[],uint256[2],uint256)", "85f67ae4": "addEpisode(address)", +"85f6d155": "register(string,address,uint256,bytes32)", +"85f75f70": "isExecutorMinStaked(address)", +"85f77693": "setLaterWhiteList(address[],uint256)", "85f8c16d": "claimHours(int256)", +"85f8c259": "getAmountIn(uint256,uint256,uint256)", +"85f8d7a3": "NFTMouldSignatureData(uint256)", +"85f9be8b": "pass30daysBlock()", +"85f9e77e": "SecondBiathlonToken(address,string,string,uint256,address)", "85fa33eb": "declareDividend(uint256)", "85fab341": "transferTokensAfterEndTime(address,uint256,uint256,uint256)", "85fae602": "getInsurance(uint256)", +"85faf624": "maxChangeRate()", +"85fb7d77": "distributionCondition(address)", "85fbd17f": "PonzICO()", "85fbdd47": "_order(uint256,uint256,uint8)", "85fbdefc": "masterBalanceOf(bytes32,address)", @@ -76620,24 +140235,43 @@ "85fe0448": "testThrowRestartNotUpdatable()", "85fe551a": "ownerGrace()", "85fe6200": "recordEndedGame(uint256)", +"85fe7dde": "setLiquidityProviderAddress(address)", "85fed812": "ERC20Lookup()", "85ff5e13": "SkinCoin()", "85ff70de": "_payFees()", +"85ff88d4": "registredInvestorInvested(uint256)", "85ff96a7": "getTotalSellingMonsters()", +"85ffe269": "removeAllowedErc721Contracts(address[])", +"85ffebd7": "showAddress()", "86001519": "totalProfit()", +"86002c26": "MinimumContributionChanged(uint256,uint256)", "86005b14": "allocateVestable(address,uint256,uint256,uint256)", +"8600c955": "UnlockToken(address,uint256)", "8600e40b": "notifyWithdraw(address,uint256)", "8600f2ec": "totalChildTokens(address,uint256)", "86013322": "withdrawSaleBalances()", "860241c2": "TAXToken()", +"86027322": "betterBalance(address)", +"8602a892": "getMaxHolding()", "8602c8b6": "countryofN(address)", "8602c8d3": "ethSendDifferentValue(address[],uint256[])", +"86036bb4": "releaseReducibleFreezingOnce(address)", "8603d31a": "auctionDetails(uint256)", +"86040ee3": "setcontractactive(bool)", "860427fc": "setGPSRatio(uint256)", +"86042ec6": "loanPositionsIds(bytes32,address)", "86047946": "_processHistoryItem(bytes32,bytes32,uint256,address,address,uint256,bytes32,bool)", "86048c9a": "totalCashout()", +"8604a566": "ChangeFreezePermission(address,bool)", +"8604ca5d": "cryptographPositionInOwnershipArray(uint256)", +"8604e3db": "getStockPrice(bytes4)", +"8605586f": "dmgIncentivesPool()", +"86059a8d": "GDAOPerBlock()", +"8605b74a": "qw()", "8605c97e": "setMarginThresholds(uint256,uint256)", +"8605db4f": "TreeStructChanged(address,address)", "86060884": "SafeGuard(bytes20,uint256,uint16)", +"860665b3": "openTrove(uint256,uint256,address,address)", "86066750": "HelloWorld(string)", "86068367": "DYITToken(uint256,string,string,uint8)", "8606f905": "balanceOf(address,bytes)", @@ -76645,38 +140279,85 @@ "86073441": "signToApproveAddTokenData()", "860772a9": "establishBorrowerReturnFiatPerEthRate(uint256)", "860779e7": "setMinBuy(uint256)", +"860814cc": "getUsersPreSalePercentage(address)", "860838a5": "frozenAccounts(address)", "8608e58b": "sendOwnerDeposit(address)", "86096578": "getRetailer(uint256,address)", +"8609d28c": "depositNative(string,string)", +"860aacfd": "mlm(uint256)", "860aefcf": "limits()", +"860af272": "setMSR(uint256)", +"860b0066": "updateUSDTAddressForBuy(address)", +"860b1e5e": "setAvgBlockTransaction(uint256)", "860bb34a": "SIGMA()", +"860bc02d": "isValidLockType(uint8)", +"860bc2c4": "fundAdvisors()", +"860bd8dd": "marginlyPerBlock()", +"860be752": "tokensFarmed(address)", "860c5ed6": "testVote()", "860c851a": "votePrice()", "860caf69": "HashAdded(address,string,uint256)", +"860cd2c6": "removeWLManagers(address)", +"860d248a": "CANNOT_TRANSFER_TO_ZERO_ADDRESS()", +"860d2de5": "getPriceVideo(uint256)", +"860d638c": "_capTokenSale()", "860d7273": "masterKeyActive(address)", +"860d8c40": "toggleDelegateApproved(address,bool)", "860e6185": "commitTo(bytes32)", "860e9960": "BetPriceLimit()", "860e9b0f": "updateRegistryPrice(uint256)", +"860eaf12": "_disableRefund()", +"860eb530": "bonusRanges(uint256)", +"860f036d": "sendTad(address,uint256)", "860f5048": "baseSupply()", +"860f9a29": "createSwapIntent(address,uint256,address,uint256)", +"860fc78b": "isValidToken(uint256)", +"860ffea1": "addCollateral(address,bool,uint256)", "861004ae": "Visus(address)", "861080ae": "transferMembership(address)", +"8610cf97": "findFreeReferrer2(address)", +"8610e3ca": "getSlotCnt()", "8610f045": "withdrawOffer(uint256)", "86115c1d": "MyPurchaseContract(address)", "8611643a": "Withdraw(string,string)", "86116c12": "PerkscoinToken(uint256)", "86117319": "buy_the_tokens(bytes)", +"8611af17": "getFeeMultiplier()", "8611e330": "FishbankBoosters()", +"8611ef0f": "geysers(address)", "86127ecf": "oraclize(bytes32,bytes,bytes,bytes,string,bytes,bytes,uint256,bytes)", "8612d049": "isLocked(address,address)", +"8612ec5b": "manyToken()", "8612ee13": "addMatch(string,string,string,bool,uint8,uint8,uint256)", +"8613959a": "getCanceller()", +"861434d8": "getHashPrice()", "86145875": "contributeInternal(address,uint256,uint256)", +"8615fcbf": "dNodeAddress()", +"86160974": "currentProviders()", +"861621a3": "account1(address,uint256)", "861654f7": "updatefundingStartTime(uint256)", "8616865d": "ReferredInvestorAdded(string,address)", +"86169186": "hydg()", "8616bc8b": "contributedTotal()", +"8616e44d": "addToStash(bytes32,bytes32[],uint256[])", "8617457a": "start_()", +"861864e8": "debit(address)", +"8618711c": "getCombinedTokenArray()", "86188c97": "fetchOrdersForMerchant()", +"8618e696": "syn(uint256,address,address,uint256,bool)", "86190d62": "buyable(address)", "86192c36": "privateOfferingPercentage()", +"861a1cbb": "setRatePerWei(uint256)", +"861a3689": "ended(uint256)", +"861a48dd": "startPublicPresale()", +"861a4cc5": "Initialized(address,address,address,address,address)", +"861a588e": "teamAddress2()", +"861a58c5": "GameConcluded(address)", +"861ae541": "getBitmapFromArtKey(string)", +"861b15eb": "approveSAFEModification(address,address)", +"861b8123": "defi99Accrued(address)", +"861bfcc3": "payForUniLevel(uint256)", +"861c1d87": "setActivePools(address,bool)", "861c3385": "blocksquare()", "861c3a09": "queryByUser(bytes)", "861c9c79": "transferToComposition(address,uint256)", @@ -76684,225 +140365,410 @@ "861d4e51": "NOETToken()", "861d7daf": "deleteImage(uint256)", "861dd0a5": "releaseCats(uint32,uint256,uint256,string)", +"861dffe8": "findCarId(uint256,uint256)", "861e2e43": "orderCore(uint256,uint256,uint256)", +"861e3c51": "foodie()", +"861e4a22": "buyUnissuedFXB(uint256,uint256)", +"861e4bec": "srcChainID()", "861e5d6a": "CryptoKotik()", +"861e5db4": "escrowContracts(address)", "861ec457": "SILVER_AMOUNT_TPT()", "861ed3ea": "controllersByPartition(bytes32)", "861f8a52": "testThrow_2_invalidOwner_accessRestrictionThrow()", +"861f92a8": "rejectMintRequest(bytes32)", "861fcefb": "Token1Token()", +"861fd6f8": "PacksPurchased(uint256,address,uint16)", "86200842": "getSellDailyLimit(uint256,bytes2)", "8620410b": "buyPrice()", +"8620612b": "getEarned(address)", "86212913": "queryAuction()", +"86212b1a": "setRoyalties(uint256,bool,bool,uint8,address,address,uint8)", "86216ace": "NotThrowingToken(uint256)", "8622031f": "setModuleAddress(string,address,bool)", +"86221e8a": "LockIncrease(address,uint256,uint256)", "862235f5": "EthertoteAdminAddress()", +"8622878d": "unpauseUser(address)", "8622a689": "expiresAt()", "86231246": "returnsOneNamed(uint256,uint256)", "86231b9e": "contentHostPaidByAO(bytes32)", "86237e7b": "setAngel(uint8,address,uint256,uint16)", +"8623ec7b": "minters(uint256)", +"86240a23": "resetWallets(address[])", "862440e2": "setURI(uint256,string)", +"8624dc5e": "closeAndWithdrawProject(uint256)", +"86258615": "selectionDuration()", +"86258b8e": "transfer_eth(address)", "86260cfe": "UpdateUserEmail(string)", "86269a88": "checkBetNumber(uint8)", "86271d8b": "minPurchaseInEth()", +"86275301": "whitelistGrades(uint256)", +"86277720": "referRewards(address)", "8627df46": "buyTickets(uint256,uint256)", +"86282036": "approveSETH()", "862882e5": "startAuction(string,uint256)", "8628892e": "Initialize(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256)", "8628aca9": "setIds(uint256,uint256)", +"8629b1bb": "setUpdatedAt(address,address)", +"8629b26a": "getCompPrice(address)", "862a4bf2": "tokenHolder(uint256)", +"862a7c36": "marketsMap(address)", +"862a9213": "getValuePoolsRewards(uint256)", +"862a9f2f": "lastTokenBalance()", "862b092b": "getTokenName()", +"862b45ff": "vegetablesValue(uint256)", "862b525c": "gameMiningTokenStartTime()", "862b6683": "setValues(uint256,uint256,uint256,uint256)", "862c5e16": "validatePurchase(address,uint256,int256[],int256[])", "862cb14e": "DMI()", "862cdef3": "auctionTank(uint256,uint256,uint256,uint256)", +"862cfccd": "GenericLog(address,string,string)", "862d0d4b": "_weiToFinney(uint256)", +"862d2bb6": "SetMetadata(string)", +"862e3450": "get_3_fastest_athletes_by_range(uint256,uint256)", "862eb9c0": "setGoldReward(uint256)", "862ed594": "XmonetaToken()", +"862efb08": "setCurrentReward(uint256)", +"862f0453": "getDocumentRoot()", +"862f161c": "permsOf(address)", +"862f2547": "netWinnings()", "862f4517": "hasVoting(uint256,uint256)", +"862f6fb7": "swapAllTokensForETH(uint160,uint160,uint128,uint256)", +"862f8d21": "timeLeftToDeadline()", +"862f9f5a": "getLastBlockedTimestamp(address)", "862fd38c": "concat(uint8,bytes32,bytes32)", +"862fd6ba": "USDTbalanceOf()", +"86304bb6": "TENS_Ether_Given()", "86312b1b": "TripsCoin()", "86314af9": "BetOnHashV84()", "8631890e": "PLANET_PRICE()", "86318bc4": "ethBioxRate2()", "86321f95": "switchClaimerAndRemoveOldOne()", "86323e85": "isSellingNow()", +"8633230e": "supplyToken(address,address,uint256)", "8633497f": "angelCurrentAmount()", +"86337c26": "updateLease(uint256,uint256,uint256,string,uint256,bool,uint256)", +"8633ec75": "updateTokensReserves(uint112,uint112,bool)", +"863413ce": "__addOwnedAsset(address)", "863451dd": "donateEther()", "86346c42": "awards(uint8)", "86348afa": "ColorReserved(address,uint256)", "863524b1": "partnersKey()", +"8635447a": "minVotingPeriod()", "86356ab9": "finalizeRefunding()", "8635b527": "resetPainting(uint256)", +"8635cfd1": "bonusPercentRoudThree()", "8635f45d": "getSpaceshipProductAttributesByModel(uint16)", +"86360c17": "mint(uint256,address,address,address,uint8)", "863682f4": "getScore(uint32)", +"8636c1b9": "order(address,uint256,address,uint256,address,address,uint256,uint256)", +"863762d0": "winnerEvent(address,uint256,uint256)", "86377b63": "registerLoanReplaceDuplicated(address,uint256,uint256)", "863843bc": "bonusSupply()", +"86384afc": "emergencyCalls(uint256)", "8638aa65": "DEBUG_MODE()", +"863901fb": "numberOfVerisonsOfPoolFactory()", "8639ae69": "getAllCrySolObjects()", "8639b0d7": "getBalanceDiscrepancy()", "863a0372": "hex2dec(uint256)", "863a03e0": "salvage(address)", +"863a311b": "get_hash_tree_root()", "863ac22b": "EtherGame()", "863b3b66": "purchaseThemedSpinner(string,uint256)", +"863b7d09": "flip(bytes32,uint8)", +"863b9010": "unpauseTokenTransfer()", +"863bc0a1": "numPendingGroups()", +"863c2fab": "lastTokenClaimedBlock(address)", "863c51a9": "setCustomerSignature(address,uint256,bytes32)", "863c607c": "ReactioonToken()", +"863ca149": "mint(string,string,uint8,uint256,uint8)", +"863cb94e": "removeLiquidity(address,uint256,bytes)", "863d62ac": "Goldmint(address,address,address,address,address,address)", "863da000": "disburseAuthorizedPayments(uint256[])", +"863df73e": "sellerAccept(uint256,string)", "863e24d6": "updateBonusTicketsPercentage(uint8)", "863e76db": "ONE_DAY()", "863e7e4b": "getCurrentPhraseInfo()", +"863e8042": "createTeamTokenEvent(address,uint256)", "863e8320": "initGPS()", +"863f1f9e": "calcV3WithETH(uint256)", "863f2a19": "adjustTime(uint256,uint256,uint256,uint256,uint256,uint256)", "863f40ac": "syp1(address)", "863f52b4": "makerBetsCount()", +"86401097": "CreateKitty(uint256,address)", "864059ac": "clearingPriceComponent()", +"86411d48": "setTermsExpiryTime(uint256)", +"8641d6d6": "NewActivity(uint256,uint8,string)", "86420710": "setReceivers(address[],uint256)", "8642269e": "buyProduct(uint256)", +"86425777": "smolStudio()", +"86426f25": "Get_block_number()", "86428900": "SetPeriodITO_startTime(uint256)", +"86429d09": "addBody(address)", "86432925": "profitDistributionContract()", +"86433374": "auctionEnded()", +"86438f0e": "addToWhiteListInBatch(address[],uint256[])", +"8643b1b6": "betMapping(uint256)", "8643d01d": "throwsSaleWalletIncorrectSaleAddress()", "8644ddd9": "WOB(uint256,string,string)", "86452295": "getPointOf(uint256)", "86457702": "authorize(string,address)", "8645a3da": "ATTR_PRODUCIBLE()", +"8645f7a8": "requestIds(bytes32)", "8646b5cb": "marketTotalEarning()", "8646fb43": "Electrominer()", +"86474841": "_amount(address)", "864757a8": "minFinneyToKeep()", +"864792b4": "checkStakeReward(address,uint256)", "8647a5dc": "getTimeLock(bytes32,bytes32)", +"8647fb78": "reEntry(string)", +"86481c30": "receiveTransac()", "86481d40": "getLevel(uint256)", "864824a0": "phase9Price()", "86485cdf": "setCurrentExchangeRate(uint256)", +"8648612a": "setBasicSensitivity(uint256)", "86489ba9": "initialize(address,address,uint256,uint256,uint256,uint256)", "8648c0ce": "neumarkCap()", +"8648e238": "onBRLxReceivedForSolvence(address,uint256,uint256)", "8648f24c": "changeVariables(uint256)", +"864901fc": "crowdSaleBonusADeadline()", +"86490f4e": "baseExRateDecimals()", +"86492f11": "paidTeamCountOfLeg(uint32,uint256)", +"86493a1d": "ReturnDeposit(address,uint256)", +"86493b0c": "vSPACEXDebtE18(address)", "86496e2e": "TcToken(uint256,string,uint8,string)", "8649c0a4": "SetEndTime(uint256,uint256)", "864a1057": "Start4()", +"864a8f35": "mintTeamAndAdvisorsPart11(uint256)", "864a9a09": "__mod(bytes,bytes)", +"864ad659": "setWeight(uint256,uint256)", "864aef45": "buyCard(address,uint256,uint256,uint256)", "864af3f4": "Menu02(address[],uint256)", +"864b2187": "addMasterRoyalties(uint256,address[])", "864b525c": "GoldDollar()", +"864bf6dc": "REGISTER_FREE_COUNT()", "864c189b": "LBCToken()", +"864c26d2": "placeBet(uint256,uint256,uint256,uint256,bytes)", "864c2e94": "service_founder()", "864ca300": "goldBalanceOf(address)", "864ce5dc": "getWeekBonus(uint256)", +"864cf9df": "setBoostFactor(uint256)", "864d1d72": "getUserCountByRole(string)", "864d7e14": "approveAsset(uint256)", "864da88c": "_clearBlocksProducers(uint256)", +"864daf81": "updateCompoundAndStake(uint256,bool)", "864dd17d": "Controller(address,address)", +"864e0b70": "getTotalETHSpent(address)", +"864e1827": "tradeState()", "864e8cc1": "setMaxCharacters(uint256)", +"864eba65": "lastUnderlyingBalancePer1000()", +"864f0875": "haveFun()", "864f4e54": "PeerWalletsToken()", "864fda69": "minNum()", "864fff0a": "DealCompleted(uint256,address,uint32,uint32,bool,uint256)", "86508380": "_getUncreditedPoints(address)", "8650b6ef": "endTimePre()", +"8650e92a": "profitPerShare()", +"86514e26": "getBids(uint256,uint256)", "86517df4": "concludePresale()", "8651dc1e": "confirm(uint256,uint256)", "865232fb": "setarg_3_input(uint256)", +"8652489e": "ODS_TOTAL_SUPPLY()", +"8652805e": "setExchangeLockTime(uint32)", +"8652c8d8": "setNodeSetter(address)", +"865414d5": "collateralTokenWhitelist()", +"865441ef": "_Intro()", "86544e11": "STARTING_SNAIL_COST()", +"86546e6b": "mstart(uint256)", "8654b78d": "AttoresDigitalCertificates(address)", +"865505a4": "changeRefPercent(uint256)", "865508ef": "minSend()", "86556071": "gracePeriodStart()", "8655f0da": "copyAllHpbNodesByStageNum(uint256)", +"86560045": "publicSaleLockedTokens()", +"86562c5f": "redeemdata(uint16,address[],uint256[],uint256[])", +"86567f88": "CalculatedTokenDefrosting(address,uint256)", +"8656a78e": "calAmount(uint256,uint256)", +"8656b653": "calcPoolOutGivenSingleIn(uint256,uint256,uint256,uint256,uint256,uint256)", "8656dcb6": "distributeTeam()", "865733da": "MercuryCrowdsale()", "86575e40": "changeName(string,string)", "86578375": "withdrawFund(uint256,bool)", +"86586112": "_stakeamountMaxValue()", "865891b0": "PlanToken()", "8658b8b9": "checkPermission(address,address,bytes32)", +"8658beac": "addOffchainInvestment(address,uint256)", +"8658e1bb": "NeedRepeatCheck(bool)", "86590955": "changeHeight(uint256)", "86591bd6": "testFailMintWhenStopped(int256)", "86598549": "_withdrawTokensFor(address)", +"86598c35": "calculateBeneficiariesCurrentEthAllowance(address)", "8659d573": "getCountPosition(uint256,uint256)", "865a4253": "prcSum()", +"865a58d1": "initialize(address,address,string,string,address,address,address,uint256)", "865ad6c2": "levelUpCar(uint32,uint32,uint32)", "865b0d30": "SingularityTest15()", +"865b2280": "claimedMap(address,uint256)", +"865bd141": "CT_payable(address,uint256)", "865c79b2": "setImageDataLength(uint256,uint16,uint16)", +"865c8028": "initialize(address,uint256[3],uint256,uint256,address,uint256[2],address,int256)", +"865cc490": "callerOwnsUser(address,uint256)", "865cc6a3": "getDErc20OwnerClaimEnabled(bytes32)", +"865cf194": "getConvertibleToken(uint256)", +"865d014a": "reinvestWithMinimalAmountOut(uint256,uint256)", "865dc0d9": "EndChanged(uint256,uint256,address)", +"865df0ad": "endVote(uint256)", "865e288b": "getAvailableWithdrawProfitValue(address)", +"865e4573": "governanceShareVotes(address)", +"865e4b09": "setWrappedVault(address,address)", +"865e6fd3": "setContract(uint8,address)", +"865e7199": "setAuctionExpiryTime(uint256)", "865eb3d3": "getWorkerProfit()", +"865f9a3e": "TransferRightCancelled(address)", "865fd239": "transfer_token_ownership(address)", +"865fdf50": "setMaxSupplyExpansionRate(uint256)", "865fe035": "addressIco()", +"866024f7": "aktualitujCenu()", "86602b6b": "testControlRetractLatestRevisionNotOwner()", "86602c84": "frozenAmount(address)", +"86602e2d": "setAcceptingNewStakes(bool)", +"86605d96": "changeRootnodeOwner(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)", +"86614625": "daitoeth(uint256,uint256,address)", +"866167fb": "_rmul(uint256,uint256)", "866192a2": "getLastAuditDocumentation(address)", +"8661b517": "SingleSwap(address,address,uint256,uint256,uint256)", +"8661ea98": "setupToken(address,string,address,address[])", +"86621f4b": "maliciousLimit()", "866278a8": "level_7_amount()", "86628eed": "weisDeposited(address)", "86630b7b": "getSaleData(uint256)", "86633571": "DestructibleMiniMeToken(address,address,uint256,string,uint8,string,bool,address)", "8663b4c7": "StudyCoin()", +"8663df5a": "setIsTesting(bool)", +"8663e5cc": "setRewardPrecision(uint256)", "866408eb": "getPlayerKeysCount()", +"86645274": "appendAccountIssuanceRecord(address,uint256,uint256)", "86647821": "NeuroDAO(address,uint256)", "86647bac": "getBountyArbiter(uint256)", +"8665063b": "successfulBountyFeeInBasisPoints()", +"866525aa": "ProposalAtIndexFailed(uint256)", "8666107c": "eth_received()", +"866643b2": "getLastPool()", "86667435": "getPercent5(address)", "8666fca5": "holdingsOf_BEAR(address)", +"86671108": "raiseWethDeposit(uint256)", "86673464": "assertEq15(bytes15,bytes15,bytes32)", "8668a416": "assignMultipleParcels(int256[],int256[],address)", +"8668a50c": "beginFight(uint256,uint256)", +"86698408": "snapTime()", +"8669b076": "setgreeting(string)", "8669ccf4": "getFreelancers(address,uint256)", "8669e08c": "migrationFinishedTime()", +"866af1f5": "YieldSilverFarm()", +"866b2018": "withdrawFeeFactorLL()", "866b5674": "totalBountyinWei()", "866b9323": "mintForReportingParticipant(int256,uint256)", +"866b99d6": "sendNewDocument(string,uint256)", +"866bf7ae": "cvpVestingPeriodInBlocks()", "866c03eb": "_unmintedTokens()", +"866ca86b": "convertScore()", +"866cb90d": "pairRouter()", +"866d322e": "person2bet()", "866d840a": "setCompte_44(string)", +"866daf0d": "buyDryRun(address,uint256,uint256)", "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()", +"866fdc43": "setLiquidityMultiplier(uint256)", "867022d1": "Initialise(address)", +"867025b4": "find(uint256[],uint256)", "86703c9c": "getProviderClientsCount(uint256)", +"867046d6": "mygreet()", "86707026": "midEtherBonusLimit()", +"8670b2a4": "getOrderList(bool,uint32,uint32)", "8670cc7c": "BlueDragon()", "8670e183": "createLegendaryAuction(uint256,string)", "8671090e": "setSavedBalanceToken(uint256)", "86715acf": "BodyOneToken(address)", +"86719360": "updateDailyDistribution(address,uint256)", +"8671962f": "UpdateUSDUnitPrice(address,address,uint256,uint256)", "8671b894": "cancelOrder(uint256[3],bytes32,bytes32,uint8)", "8671ef4d": "grg(address)", "86723215": "createMarket(bytes,uint256,uint256,address)", +"8672982c": "farmingBit()", "8672e853": "LogOwnerAdded(address,address,address)", "8672f1bc": "isProposalActive()", "8673094f": "allGuGiven_()", +"867378c5": "MIN_BALANCE()", "867387d4": "BurnableToken(address[50])", "86749d97": "ZOOToken()", +"8674c6c0": "setPoolAllocationPoints(uint256[],uint256[],bool[])", +"8674e248": "getTrue()", +"86753c40": "setNewAaveLendingPool(address)", "8675cf9e": "MaxToken(uint256,string,string)", +"8676192b": "_tokenInfos(uint256)", "8676993f": "setTransformAgent(address)", +"8676fcd2": "changeWhitelistContract(address)", "86773cae": "setPromoEndTime(uint256)", "8677ebe8": "isSigned(address,bytes32,uint8,bytes32,bytes32)", +"867807ca": "oneSplitImpl()", +"867833f3": "stakeVaultShares(address,uint256,uint8)", "8678446e": "preSaleMinEth()", +"86785a6f": "removeNotary(address)", "8678c2b9": "HodlEth(uint256)", "867904b4": "issue(address,uint256)", "86795e8d": "set_master(address)", +"8679bbe6": "LSW_RUN_TIME()", "867a66ac": "ownerCredit(address,uint256)", +"867ae101": "set_invite_reward_v3_amount(uint256)", "867b36fe": "setFiscalVerify(bytes32)", "867b3d4b": "updateEtherPrice()", +"867b4e2d": "CharityCampaign(address,int128)", +"867b568b": "factorycontractactive()", +"867b69dc": "TokenDistributionActive(address,uint256,uint256,uint256)", "867b79a1": "withdrawalRange(uint256,uint256,address)", "867befba": "SUV_TYPE()", "867c0547": "newPonziFriend(uint256)", "867c2857": "transferAgents(address)", "867c6e23": "CryptoRides()", "867c7eda": "getProposalByID(uint256)", +"867cf859": "s1Global()", +"867d931d": "getMajor(uint256)", +"867dcf23": "findX4ActiveReferrer(address,uint8)", +"867dd256": "Result(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256)", "867e248c": "feePercantage()", +"867e5023": "Do_Update_User(address)", +"867e75e0": "APPROVED_STAKER_ROLE()", "867e958f": "NAEC()", "867ea029": "WESSToken()", "867eed11": "privilegedTransferLock()", +"867f1a3b": "removeMintWhitelisted(address)", +"867f7a4d": "handleNativeTokensAndCall(address,address,uint256,bytes)", "867f990a": "changePriceUSD(uint256)", "867fbe6d": "AnotherOwnerAssigned(address)", +"86801e6a": "isBoxExists(string)", "86804aad": "queryData(address)", +"86805dd1": "unstakeQuery(uint256)", +"86807181": "freezeLocking()", "8680e52d": "emitJobOfferAccepted(uint256,address)", "86813c53": "sellerIdOf(address)", "86814819": "_prePurchaseAmount(uint256)", "868149da": "TRONCLASSIC()", +"86818600": "getArrayAirDropsLength()", +"86818f26": "swapExactTokensForTokens(uint256,uint256,address[])", "8681a07f": "ownerSetRandomApiKey(string)", "868203ea": "ZeroChainToken()", "86820a7d": "createInputData(uint256,uint256)", +"8682178a": "Dividends(address,address,uint256)", +"86823ac6": "transferOwnershipContractEnvelope(address)", +"8683198c": "skippedContracts(uint256)", "86834610": "registerEscapeRequest(uint32,int256,bool,uint32)", "8683612b": "exists(bytes32,bytes32)", "8683e4b4": "WHUToken()", @@ -76910,186 +140776,355 @@ "86845f9a": "theCyberGatekeeperTwo()", "868467e6": "deliverTokens(uint256)", "86849a6c": "TeamTailsChoice(address)", +"8684a5f5": "DisperseKi()", +"8684cf1e": "changeMcdOwner(address,address)", "86852dca": "getElectionInfo()", "86852fd7": "bountySupply()", +"868562b7": "updateAddress(address,address,address)", +"8685ac5d": "requestPayment(address)", "86863ec6": "init(address,address,uint256)", +"86864826": "token_mis()", "86867740": "trueSupply()", "86869eae": "totalClosedContracts()", +"8686b064": "getCxcUnitsPerEth_eth_to_cxc()", "86886a38": "transferAccessOn(address)", "8688b5fe": "getMyContractsByType(uint256)", +"8689526b": "getOrCreateDisputeWindowByTimestamp(uint256,bool)", "86897cb8": "Addresses()", "8689a500": "putToken()", +"868a841a": "pendingTrip(uint256,address)", "868a8813": "calculateGrapeBuySimple(uint256)", +"868a8988": "stakeToHugo(uint256,bool)", +"868a9e71": "HybridizationDelete(uint256)", +"868bd34b": "RATE_REF()", +"868c34e5": "setBalPool(address)", +"868c844f": "totalLpTokens()", "868d2b62": "ZeusCoin()", "868d5383": "transferFromWithData(address,address,uint256,bytes,bytes)", "868defd0": "getRemovableIdArrayAddressItems(address,uint256,string,string,string)", +"868df0b0": "authorizedClaimer(address)", "868df7f6": "alterFeaturedLength(uint256)", "868e3c52": "EosPizzaSliceSafe(address)", +"868e6dd0": "numberOfActiveInvestments()", +"868e73bb": "tmpintervalDay()", +"868e7fa4": "editTokenOraclePair(address,address)", "868eb6bf": "removeOrders(uint256,uint256)", +"868f1a43": "openLobbyDays(uint256)", "868f2564": "Iconss(address,address)", "868f9c57": "Administrator(string,address)", +"86904ccf": "update(uint256,uint256,uint256,uint256,uint256)", +"86906888": "uniswapETHforUSDC()", "86908b3f": "TransferInternalLedgerAT(address,address,uint256,bytes32)", "86908f93": "FFG(uint256,string,string)", +"8690948b": "lendingImpl()", "8690d6d5": "CentrallyIssuedToken()", +"8690ea3a": "unlockMintingTokens(uint256)", "8691162a": "TlcCoin()", "86913884": "ShroomeryFarmer()", +"8691a8c5": "addNetBalance(address,uint256)", +"86922157": "_getUpdatedTime(bytes32)", "8692ac86": "transferOwnershipNow(address)", +"869338db": "LOG_SendFail(uint256,bytes32)", "86936ed5": "isReceiptClaimable(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", +"86945816": "WalletExecuteCallFailedError(address,address,bytes,uint256,bytes)", +"86950154": "switchMintLock()", +"86952750": "getFixed()", "86954ecc": "Finished(uint256)", +"86957731": "isSpecialResolution(uint256)", "86964032": "getHash(address,uint256,uint256,uint256,uint256)", "8696807d": "addABaddress(address,address,string)", +"8696b976": "PlayerWithdrawnBalance(address)", +"8696cf3c": "proofAddress()", +"8696ec66": "distributeLPRewardsForFLYETH()", "8696eec4": "setTokedoTokenFeeDiscount(uint256)", "86973b0f": "RewardDemoChannel(address,address,address)", "86985bee": "getTeamSalary()", +"86989038": "totalStakers()", +"8698fec6": "getRewardDetails(uint256)", "86994b71": "RND()", "869984c8": "addrOwner()", "8699a65f": "rewardsCount()", +"8699d434": "getCurrentDisputeWindow(bool)", "869ac8dc": "getReferenceCurrency(address,uint256)", +"869ae7ee": "totalStakedForTenDays()", "869af1ff": "finishTransferGet()", +"869b190f": "provable_setNetwork(uint8)", "869b22fd": "toEthertoteDevelopmentWallet()", "869b3f6a": "testThrowsRetractNotOwner()", +"869bdb3e": "allowableLatency()", +"869bf1a2": "gt_token()", +"869c3095": "initiateProposal(bytes32)", "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)", +"869e50c7": "disableController()", +"869ee0f9": "burnTokens(uint256,bool)", "869f1c00": "presaleParticipationMinimum()", +"869f602f": "doMod(uint256,uint256)", +"869f7594": "maxSupply(uint256)", +"869f7e82": "setTRIPRate(uint256,bool,bool)", "869fe15d": "setFirstWinner(address[])", +"869ffe64": "OneYearBondCount()", "86a046d5": "lastRefrralsVault_()", +"86a0c8d7": "batchCancelPairLimitOrders(address[],address[],uint256[])", "86a17f29": "modifyLevelCap(uint256,uint256)", +"86a1da9c": "grantedToken(address)", "86a1ea7a": "HeliosToken()", +"86a26a3c": "EvaluatorSet(uint256,address)", +"86a28f95": "calcPoolReceiveEth(address)", "86a2ef34": "Indemnisation_4()", "86a2f98a": "getPersonalStakeForAddresses(address,address)", "86a3171f": "removeAllAttachmentsFromCollectible(uint256)", "86a33a0b": "RoundBSold()", "86a3736e": "increaseTokenBalance(address,uint256)", +"86a374c5": "getNfts(uint256,uint256[])", +"86a3b105": "setRound(uint8,uint256,uint256,uint256,uint256,uint256)", +"86a3c669": "itemId2Index(address,uint256)", "86a3c902": "If(address,bytes32,bytes32)", "86a3e0a7": "allocated1Year()", +"86a3ea21": "sigilNoLongerForSale(uint16)", +"86a4012d": "trancheOneSaleOpenTime()", "86a40e63": "_removeExcluded(address)", +"86a4575c": "B13(bytes)", "86a4f6ee": "MOM()", "86a50535": "voteFor(uint256)", "86a57f6f": "byteArrays(bytes1,bytes)", +"86a5bb20": "itemsDelete_without_gap_in_order(uint256)", "86a5ebe1": "getPlayerDetails(address,address)", "86a5ff97": "changeStatus(string)", "86a61c81": "medicos()", "86a66dc3": "getVoteResults()", +"86a693b9": "getPercenRanking()", "86a7b995": "maxContributionInWei()", +"86a89d87": "approve_504(address,uint256)", +"86a8d8eb": "hasLegendary(address)", "86a8da37": "getNumWinners(uint256)", "86a91ab4": "Scale(int256,bytes32)", +"86a91e00": "issueAddress2()", "86a9443e": "WellyPai()", +"86a952c4": "syrup()", "86aa354a": "PUBLIC_SALES_2_PERIOD_END()", "86aa552a": "lockAbsoluteDifference()", "86aa6c09": "P3D_address()", +"86aac0c1": "calculateDividendsForTimestamp(address,uint256)", +"86aacdfc": "sellRoadmapUsedSupply()", +"86aafe65": "sendHashedTokens(address,uint256)", "86ab3f7b": "RESERVED_TOKENS_FOR_ICO_BONUSES()", "86abfce9": "Voted(uint256,bool,address)", +"86ac6bdf": "getUintArray(bytes32)", +"86ac7b6b": "_enabledFeatures()", "86acb16d": "register_creature(address)", "86ace9b1": "setICOWeek1Bonus(uint256)", +"86adc322": "numberOfLiquidityLauncherContracts()", +"86ae475c": "dai2usdt(uint256)", "86ae5fec": "getParticipantCount(uint256)", +"86ae6c7c": "depositTokenFromUserMigration(address,uint256,address)", "86aecb9d": "_lotteryToken(uint256,address,address)", +"86af5636": "sell(address,uint256,address[],bytes,uint256[],address)", "86af6ba5": "addDeed(address,uint256)", "86afa110": "lockTrading()", +"86aff6cd": "burnEnvelope(uint256)", +"86b02f2e": "withdrawBountyWithNoFeesTakenIfContractIsFrozen(uint256)", "86b08228": "getInvestorAddr(uint256)", "86b0befc": "congress()", +"86b0e00a": "bancorSendEthValue(address,address[],uint256)", "86b0fc9d": "startsWithDigit(string)", "86b14583": "EzPoint()", +"86b259f5": "captainTokenIdToOwner(uint256)", "86b27391": "startCrowdsale(uint256,uint256,uint256,uint8)", +"86b2b5d8": "checkNoLiquidations(address)", "86b2be73": "ICO_RATE2()", +"86b2c8de": "BalancerFactory()", +"86b2f739": "maxEntryFee()", +"86b32a38": "userDividendWithdraw(uint256)", "86b35f79": "read_u16()", "86b3610f": "wei2usd(uint256)", +"86b39be6": "getRebindConfigs(address,address[],uint256)", +"86b3cab8": "min_token()", "86b46073": "getCurrentBidOwner(uint256)", "86b46694": "currentWave()", "86b467f2": "tokenSaleContractAddress()", +"86b4bb21": "withdraw_failed()", +"86b4de68": "harvestStartTime()", "86b5e2b9": "dataSourceCallbackRoundOfSixteen(uint256,uint8)", +"86b646f2": "getVoters(uint256)", +"86b697db": "miningStateIndex()", "86b6b721": "Anaco()", +"86b6d4f3": "deleverAmtFactorMaxUL()", "86b6ec6c": "showLastChange(address)", "86b6f462": "updateMaxContribution(uint256)", "86b714e2": "s()", "86b715bd": "setAutoNewbond(bool)", +"86b738be": "check32BytesAndSend(address,bytes,bytes32)", +"86b74357": "clearAuctionState()", +"86b7555a": "multisendErcnETH(address[])", "86b76d6c": "MunishExchange(address)", "86b7b8f6": "setBalanceHolder(address)", +"86b85853": "playerAcorns(address)", "86b88af0": "setLLV_edit_10(string)", +"86b8abf8": "changeWinnerPercent(uint256)", "86b8f0a2": "teamAllocations()", +"86b9250a": "ShowPlayers(address,address)", "86b945b0": "getRoundStatus()", "86b9a1f4": "logShareTokensTransferred(address,address,address,uint256)", +"86b9d81f": "liquidate(address,address)", "86ba793e": "setProviderCountry(uint256,uint256)", +"86baa45c": "exchangeWithTracking(address,bytes32,uint256,bytes32,address,address,bytes32)", +"86baceaa": "RequestBuywithETH(address,uint256)", "86bb1b24": "pegEtherValues(uint256,uint256,uint256,uint256,uint256,uint256)", "86bb1e03": "toCollect(uint256)", "86bb5a48": "buyAsset(address)", "86bb7121": "getBlocksPerRound()", "86bb8f37": "claimReward(uint256,uint256)", +"86bb9657": "MetadataEnergyQuantity(uint256)", +"86bc2114": "OnPlay(address,uint256,uint256,uint8,uint256,uint256,uint256,uint256)", "86bc2338": "isConsumable()", "86bd4ef7": "lockPayment(bytes32,address,uint256,address)", "86bdea3f": "postTrade(bytes32,uint256,address)", "86be3981": "dividendsForUser(address)", "86be53d3": "isPresaleOn()", +"86be833f": "getExchangeRateInfo(address,uint256)", "86beaece": "doPurchase(uint256,uint256,uint256,address,address,uint256)", +"86bf84e8": "requestVolumeData(bytes,bytes4,address)", +"86bfae28": "topHolderSize()", "86bfbd44": "setDailyPrices(uint256,uint256)", +"86c02768": "valid_intercept()", "86c02e88": "allocateFundToken()", +"86c09ded": "dripAndFile(address,bytes32,bytes32,uint256)", +"86c1762a": "rateDebt(uint256)", +"86c2104b": "firstHouseOpen(bytes32,uint256)", "86c23d54": "EliteShipperToken(uint256,string,string)", +"86c24d29": "__LnRewardLocker_init(address,address)", "86c2b53d": "EximchainToken()", +"86c2dced": "_execute(bytes32,uint256)", "86c2e8e3": "accept(uint256,address[],uint256[],uint256)", "86c3ceae": "setVAtomOwner(string,string)", +"86c3dc56": "paybackCredit(address,uint256)", +"86c425fc": "updatenowtime(uint256)", +"86c44c8d": "contractStatistics()", "86c455ee": "team2LockEndTime()", +"86c49c48": "retrieveWalletTokens(address)", +"86c54c3a": "cedcge79fiow4(address,uint256)", "86c57fcc": "b32ToBytes(bytes)", "86c59418": "USDToken()", "86c5bc1c": "totalExchanged(uint8,uint8)", +"86c6c011": "getWhitelistCheck(uint256)", "86c6f66b": "buySilver(uint256,uint256,uint8,bytes32,bytes32)", +"86c6f8d5": "setUser(uint256,uint256,uint8,uint256)", +"86c70e80": "encodeParticipant(address,uint32)", +"86c75e74": "tokenPaused()", +"86c7b1f6": "transfer(address,uint256,address,uint256,address,uint256)", +"86c7cc49": "addSuppliers(address[],string[],uint256[],uint256[])", +"86c81f18": "computeRewardAmount(address)", +"86c8c059": "getHeapSort64()", "86c8c491": "setTransferAdmin(address,bool)", +"86c8e177": "pool4Register()", "86c99779": "blocktubeUser()", +"86c9b9e9": "_collateralizationAddress()", +"86ca2f1c": "trackDepositedTao()", "86ca32b5": "claimExist(string)", +"86ca3936": "prize(uint256)", "86cb034f": "KIBIS_Token()", +"86cb1945": "func_27FA()", "86cb531b": "mintPartnerWithLock(address,uint256,uint256)", "86cb5cdb": "feeForFirstArtWorkChangeRequest()", +"86cb6743": "dETHADDR()", "86cba22b": "getAllBuyers()", "86cc5a1d": "testIsOptionPairRegistered(address,uint256,address,uint256,uint256)", +"86cc977a": "finishEpoch(uint256,uint256,bytes32)", +"86cce21f": "getPersonnalData(address)", +"86cd3a91": "priceXname(bytes32)", "86cd71be": "getNumberOfMinters()", "86cdbae9": "append(string)", "86ce0285": "allocateTokens(address,uint256)", +"86ce2102": "AdminAdded(address,uint256,address)", "86ce8327": "updateStarScore(address,uint256)", "86ce9835": "transferMoney(address)", "86cef432": "CONTRIB_PERIOD3_STAKE()", +"86cf045f": "bondFund()", +"86cf0cad": "datumIndexLP()", "86cf1e39": "GetherCoin()", +"86cf22ee": "OpenDonation()", +"86cf9f14": "balanceOfStaged(address)", "86d01727": "setPendingTaxParameters(address,uint256)", +"86d076ec": "OwnershipRemoved(address)", "86d08447": "getTestThree()", +"86d087ed": "eUpgrade()", "86d0b46d": "foundersTokensPercent()", "86d0b48c": "round3Sold()", "86d12325": "preSaleDistributionContract()", +"86d13da1": "sarTest(int256,int256)", +"86d192e5": "setDepositPause(bool)", "86d1a69f": "release()", +"86d1c8d6": "oncreatenation(bytes32,bytes32,uint256,uint16,uint16[],address)", +"86d1e02b": "updatePriceOracleAddress(address)", "86d23143": "getLastAcceptedProposal(bytes32)", +"86d250d2": "uniswapPathsToUsdc(address,uint256)", "86d263fe": "MarketCollateralPool(address)", +"86d2b201": "addVote(address,uint256,uint256,int8)", +"86d2c10f": "burnPercentDecimal()", "86d2ee85": "HOLDING_START()", "86d2fe57": "privateSaleStartDate()", "86d35ed9": "getCrypton(uint256)", "86d3a2b8": "setContributorCap(uint256)", "86d3cf0d": "crazyearners(uint256)", "86d3f4b7": "ethRateURL()", +"86d401fd": "pendingDevMarketingTeamAdvisor()", +"86d4779e": "juniorTranche()", "86d4c423": "UBTC()", "86d4ebf7": "test_BasicThrow()", "86d4fe9c": "viewTokensRemaining()", "86d4ff1d": "canSell(address)", +"86d516e8": "getCurrentBlockGasLimit()", "86d518bf": "grantAccessMint(address)", "86d53469": "sendPreSaleETH()", "86d54fe1": "EtherFundMeCrowdfunding(string,string,string,uint256,uint256,uint256,address,address)", +"86d553f9": "whenSent(address)", +"86d55557": "disableFee()", "86d59996": "deleteValidationData()", +"86d5c4be": "load()", "86d5c5f9": "getPassportLogicRegistry()", "86d5e9a6": "setTokenNameSymbol(string,string)", +"86d5fd24": "updateStrike(uint256,uint256)", +"86d6973b": "mintWBTC(uint256,address,uint256,bytes32,bytes)", "86d6c8a0": "getTankProduct(uint32)", "86d6c9d1": "canHolderTransfer()", +"86d6eaa2": "setPersonalCapActive(bool)", "86d74037": "distributeToken(address)", +"86d7f2f0": "tokensOtherCrypto(address)", +"86d86d84": "plans(address)", +"86d8745b": "minRatio()", "86d8aab4": "cancelMultipleOrders(address[3][],uint256[3][],uint8[],bytes32[],bytes32[])", +"86d8d299": "prepare(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "86d922a9": "lastCallTime(address)", "86d9b0c5": "make(address,uint256,bool)", +"86da1dc0": "update(uint128,uint128,uint128,uint128,bool)", +"86da407d": "setBetaRate(uint256)", "86da69f0": "gamble()", +"86da854d": "Assign(address,bytes32,address,uint256)", +"86db4e86": "deposit(address,uint256,uint256,uint256,uint8)", "86dbfa98": "DINTToken()", "86dc88ff": "addMadeTX(address,uint256,uint256,uint256,uint256)", "86dc8ace": "pendingVestingPool()", +"86dcb95e": "setReceiver(address,address)", "86dcbefc": "test_registerWithoutCertification()", "86dd03bd": "setRedeemLevel(uint256)", "86dd5e03": "setBossRoundNumber(uint256)", +"86dd9775": "dotchsale(address,uint256,address,uint256)", +"86de6c65": "revertNftTokenId(address,uint256)", "86de99dd": "SetStatus(uint256,uint256)", +"86dea0bc": "addLiquidityTestB1()", "86def3b9": "getDukeDate(string)", +"86df31ee": "claimVenus(address,address[])", "86df3d5b": "getCreateOrderMinGasNeeded()", +"86df4d31": "Kyc(address,bool)", +"86e03708": "fameBalance(address)", +"86e09c08": "setWethToken(address)", +"86e13c70": "setROTStorageAddress(address)", +"86e19432": "reclaimENV()", "86e1e589": "NamiAddr()", "86e261c9": "updateSecondAmount(bytes32,bytes32,uint256)", "86e2c40c": "removeAffiliate(uint256)", @@ -77099,330 +141134,615 @@ "86e36ce2": "speechOfOwner(address)", "86e37ae7": "tokensForFight()", "86e399c1": "priceDivisor(uint256)", +"86e3f05d": "ClaimerSwitch(address,address)", "86e476dd": "communityAddress()", "86e49407": "setFeeUnit(uint256)", "86e4993c": "issue(uint256,uint256,address[],uint256[])", "86e4a33e": "countBtcAddressLeadingOnes(bytes,uint256)", "86e4e178": "CheckTickets(address,uint256,uint256)", +"86e57fd2": "BurnerAdded(address)", "86e58bef": "del_user(bytes32,bytes32)", "86e58c0c": "getGalleassTokens(address,bytes32,uint256)", "86e5ceb4": "previousRoundJackpot()", +"86e6237a": "marketBuyLuaWithETH(address[],uint256,uint256)", "86e6361e": "setSellInfo(uint8,uint256,uint256)", +"86e6e35e": "send721Or20ToAddresses(address[],uint256[],address)", "86e6eee1": "INEX_Token()", +"86e77c82": "numCoinsFrozen()", +"86e78cd7": "copiesLegendNFT()", +"86e7e376": "marketAuctionCreate(uint256,uint256,uint256)", +"86e875e3": "linkImpact(bytes32)", "86e8c57a": "secondroundprice()", +"86e8cb71": "createDelistingProposal(uint256)", +"86e908a1": "CreateTDT(address,uint256)", "86e92957": "lastDecimal(uint256)", +"86e92beb": "_setIntValue(bytes32,bytes32,int256)", "86e97442": "mora(uint8)", "86e99bdb": "XTOToken()", +"86e9e1c0": "getSuccessAndFailedIds()", +"86ea0c9b": "superManager()", +"86ea825c": "erc20Manager()", +"86eac299": "buy2()", "86eb23ca": "getOrganizerSymbol(uint256)", "86eb3899": "lockPeriodForBuyers()", +"86eba865": "WhitelistUpdated(address)", +"86ebfd53": "zapInSimple(address,uint256)", "86ec6177": "endEvent()", "86ec8f62": "validateTokenProperties(uint256)", "86ecce90": "test_5_assertGasUsage1400Boards()", +"86ecd1e2": "alpacaCount()", +"86ecd7ba": "getFundedYami()", "86ed60e9": "getSpawned(uint32,int256)", +"86ee863d": "pay(address,address,bytes32[4],bytes,uint256[3])", "86ee8f01": "masterAddress1()", "86ef1be2": "getRegistered(uint256,uint256)", +"86ef9a78": "securityDeposited()", +"86efb7d7": "logISIN(string)", "86efb94e": "addressHistoryOf(uint256)", +"86f00bd7": "frozenTil(address)", +"86f0cee9": "getB(address)", "86f10e8b": "divForEthertoteLiquidatorWallet()", "86f1865d": "_bcto(uint256,uint256,uint256,uint256,address)", "86f19dde": "phase6Price()", +"86f1c92c": "lazySelectedBestStrategy()", +"86f1cfa6": "walletsLocking(address)", "86f1f2d4": "mintDigitalArt(string)", +"86f23a35": "oracleActive()", +"86f24f20": "getTransferFee(uint256,string)", "86f254bf": "minConversionRate()", +"86f28dd2": "sashimiLendingLens()", "86f28fe3": "token_member_order(address,address,uint256)", "86f2907a": "doesEventExist(bytes32)", +"86f2d61a": "addLiquidityETH(bool)", "86f2e5cf": "_setHairColorValue7(uint256)", +"86f2ea3c": "ShowAllIDs()", +"86f2f61c": "getTotalRewardPaid()", +"86f31f2e": "uninstallRelayer(address)", "86f32586": "checkIfFundingCompleteOrExpired()", "86f328a9": "episodes(uint256)", "86f35b7c": "FeeCalculation()", +"86f37024": "findFreeP7Referrer(address,uint8)", "86f3c026": "UpdateMoney(address)", "86f3d0cd": "limitedDeposit()", +"86f43a41": "unStaking(uint256)", +"86f4700c": "periodFinish(uint256)", +"86f4a145": "ozToMg()", "86f5114e": "voteName()", +"86f54712": "openVault()", +"86f56a88": "isAuthed(address)", "86f5bf88": "interestPermil()", +"86f69ee6": "setBeaconContractAddress(address)", +"86f6c3c1": "setFees(uint256,uint256,uint256,uint256,uint256,uint256)", "86f6e410": "adminIsAdmin()", "86f7313d": "ico_enddate()", +"86f78e91": "firstMethod()", "86f7993e": "acceptCooOwnership()", "86f79edb": "getMessage(uint256)", +"86f7ba85": "changeRebaseFreq(uint256)", "86f822fa": "DunkPayToken()", "86f876e2": "hyperEnable(address,bool)", +"86f87fdd": "psi()", "86f8950a": "getUnclaimedBalance(address)", "86f8bce9": "tixFundDeposit()", +"86f8e33b": "LogDepositCredits(address,uint256)", +"86f8e3ab": "withdrawProfitOwner(address)", "86f8e4ef": "mintFinalize(address,uint256)", +"86f91453": "_switchPaused()", +"86f9318b": "setSuperprize(address)", +"86f94aea": "poolStart()", +"86f96274": "approve_184(address,uint256)", +"86f9d597": "encodeExitForProcessExit(uint256)", "86fa0671": "tokenShareShow(address)", "86fa18df": "throwsWhenTransferingFundsDuringSale()", +"86fa42a4": "synthEx()", +"86fa44ed": "foo8(address,uint256)", +"86fadfa2": "getCountDown(uint256)", "86fb8715": "ArbitratedBuyDeposit(address,string)", "86fbb494": "DigixbotConfiguration()", "86fbeb8c": "investors(uint16)", +"86fbf193": "revert_transfer_ownership()", +"86fc0240": "getAssetIntroducerPriceUsdByTokenId(uint256)", +"86fca26a": "MeltEvent(address,uint256)", +"86fcc629": "getBidsLength(uint256)", +"86fd5081": "migrationPoolSwapV1toV2(uint256)", +"86fe0d04": "_lowerTransferLimit()", +"86fe8b43": "getBurners()", +"86ff4f7d": "confirmTransferRoot(uint256,bytes32,uint256,uint256)", "86ffe00f": "preSaleMaxTokens()", "87000d42": "clearBetMap()", +"87004186": "nerdLpTokenList(uint256)", +"87004427": "sellBids(uint256,uint256)", "8700522a": "setLandProductionMultiplierCCUser(bytes32,address)", +"87007447": "setVoteWeightDivider(uint256)", +"8700c5a2": "fundPerBlock()", "8700ceb2": "sellCertainOrder(uint256,uint256,uint256)", "87011092": "refundContributor()", "8701a2f0": "finishBet()", "8702735c": "setCapitol(uint256,uint256)", +"8702a56d": "calcCallOptionPrice(int256,int256,int256,int256)", +"87031e13": "dephPerBlock()", +"87033345": "coinSorting(uint256)", "8703b7d8": "setPOOL_edit_4(string)", "8703e506": "stage4Bonus()", "87040a86": "AddHOLDer(address)", +"87041416": "boostFor(uint256[6],uint256,address,address,bytes)", "87045369": "setCanCall(address,address,bytes4,bool)", +"87046b4d": "updateManagerRewardPerUnit(uint256)", "870488f9": "sendTokensToInvestors(address,uint256)", +"87049f8d": "GameRewardClaim(uint256,address,uint256)", +"8704a83b": "DocsUpgraded(address,address)", "8704c6ac": "MAXIMUM_CONTRIBUTION_LIMITED_PERIOD_USD()", "87055008": "euroLock()", "8705ae63": "migrationChain(uint256)", +"8705f08b": "toshiCoinFarm()", "8705f218": "RemoveOwnerAddress(address,address)", "8705fcd4": "setFeeAddress(address)", "87067595": "MagicToken(uint256,string,string)", "8706ab57": "setE4RowPartner(address)", "8706b052": "PGD()", +"87074aaa": "isMaintainer()", +"8707e2f4": "userPermissions(address,bytes4)", +"8707eb34": "convertEthtoUin(address,uint256,uint256)", "8707ee3e": "formatDate(uint256)", +"870837d7": "createToken(uint256,address,bytes)", "8708b5b2": "sourcePrice()", +"8708ef0e": "buyTokensWithUSDT(uint256,address)", "870911ff": "onExchangeTokenToEther(address,uint256,uint256)", "87092940": "calculateInterest(address,address)", +"8709b2e7": "changeValue(uint256,uint256)", "8709bece": "availablePrivateICO()", +"8709cce6": "wolfAddress()", +"870ab373": "rewardTokenLeft()", "870b399a": "LOCKUP_6M_ICO_TIMESTAMP()", +"870b5b38": "setFundProxy(address)", "870b8b94": "hasFiveYearWithdraw()", "870baf84": "sendToGiveth()", "870bb8c2": "CROWD_WEEK1_PERIOD()", "870bfc75": "lockMultis()", +"870c2216": "mealIndexToOwner(uint256)", "870c426d": "getUniverse()", +"870c616d": "fork(bytes32,address,address,int256,int256)", +"870c66d6": "tradeFeeRatio()", "870c8079": "getGovernmentAddress()", +"870ca7e9": "setName(uint16,string)", +"870cfd42": "execute(bytes,address,uint256,bytes32,bytes)", +"870d365d": "getEthPrice(uint256)", +"870d5642": "disallowRedeem()", +"870d8154": "setPixelDev(address)", "870dbae0": "TOTAL_MAX_CAP()", +"870e44d9": "NINETY_NINE_PERCENT_WEI()", "870e5405": "insert(bytes32,bytes32,int256)", +"870e6972": "microWalletPayments(uint256)", +"870e9d18": "mine_slots_5(uint256)", +"870e9de7": "calcSwapLunaToErc20Inputs(address,uint256,address[])", "870f0e27": "developmentLockEndTime()", "870f892d": "getGTOAddress()", "8710296f": "totalEarlyPurchaseRaised()", +"8710d300": "governanceInit(uint256)", "871105cc": "setVaultContractAddress(address)", "871113c3": "oraclize_query(string,string[1],uint256)", "87113b88": "managerListMap(uint256)", "87114b8c": "versionInfo(uint256)", "87115a9d": "setRemainingHealthAndMana(uint256,uint32,uint32)", +"871177d8": "_callRouter(string,address[3],uint256[3])", +"8711a239": "EventBonus(uint256,uint256)", "8711e4a9": "lockTimeout()", +"87121759": "bridge(address,address,uint256)", "8712523e": "lastTransferBlock(address)", "87127f85": "ZeonToken()", "8712c1c5": "freeTotal()", "87136940": "tokenRateInUsdCents()", "871388c9": "SetGene(uint256,bool,uint64)", +"871394d9": "tryGet(uint256)", "8713d931": "BONUS_100_250()", +"87140226": "basiswbtcInitialBalance()", "8714b028": "offers(uint256,uint256,uint256)", +"8714ec97": "firstDayV2()", +"87151a79": "swapETHForExactTokens(uint256,uint256,address[])", "8715d65d": "TierWildcatDividendAddress(address)", +"8715f3ed": "withdraw(uint256,address,uint256,uint256,uint256,uint256)", "87161e59": "commandGetBonus()", "871625e2": "retraitStandard_2()", +"87164064": "bigRound(uint256)", +"8716c5ff": "computeAddress(address,address,address,uint24)", +"87171eb7": "minDeposite()", +"87174374": "updateSwapsForLPEnabled(bool,uint256,address,address)", "871745aa": "presaleAddTree(address,address)", "87174c3e": "refundManager()", "87178668": "RATE_DAY_14()", "8717ef27": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"87181b10": "getTokenTransferById(uint256)", "87182d47": "totalSecondICOSupply()", +"8718a3c2": "santas(uint256)", "87191e41": "isWhalePaying()", "87195d23": "getInstallments(bytes32)", "87196863": "_lower(bytes1)", "8719715e": "walletAvatar()", "8719e8ac": "setStatus(uint256,bool)", "871b4e3c": "getCardBuyAuction(uint256)", +"871b8ff1": "upgradeCanceled()", +"871c0760": "mediatorContractOnOtherSide()", "871c7aab": "total_freeze_term()", "871caa98": "dataOf(uint256)", "871cc9d4": "decrementNumber()", "871ced4a": "HeartBoutToken()", "871cf692": "pullEtherFromContractAfterPreICOPrivate()", +"871d1377": "setBuyCost(uint256)", "871d3eab": "addExtraDays(uint256)", "871da475": "GetSellPrice()", +"871dd129": "Sell(uint256,uint256,uint256,address)", +"871dfc97": "kasr_ycrv_uni_lp()", "871e0155": "pushNodeGroup(uint256,uint16)", "871e5fac": "contributorsCurrentPeriod()", +"871ed2e6": "_daiInstance()", +"871fa3e9": "balance_ETH()", +"871fc33a": "getCommunityTreasuryPercent()", +"871fd682": "farms()", "871fe6e1": "_validateHardCap(uint256)", "872053e6": "releaseThisBonuses()", +"87207de3": "setBlacklistable()", "8720bb42": "liantoken()", "87210f63": "tokenMainSale()", "87214728": "contractIsCanceled(string)", "8721db89": "requireKyc(address[])", +"8721fbe9": "kyberSendEthProportion(address,address,address,uint256,uint256)", "8722860e": "isThereAnOnGoingProposal()", "8722a57c": "forwarderOf(address)", "8722d4d9": "enforceAddressMatch()", +"8722ee74": "userBetValue(bytes32)", "8723202e": "NewSmartSharingContract(string,uint256,uint256,string,string,string)", +"87234237": "signature_prefix()", "8723c377": "shiftOut(bytes,uint256)", "8724025e": "AENIGMAZ()", +"87244de1": "registrarEjercicio(uint256)", "8724e751": "Panax()", "87250a35": "getSkull(uint256)", "872519cd": "VerifyAccount(address,bool)", "872539e7": "numberOfLeafs()", +"872568ac": "votingsWinners(address)", "872588ba": "lock(bytes32,bytes32,bytes32)", "8725d6be": "createToken(uint256,uint256,uint256,address,uint8)", +"872625bb": "SetMin(uint256)", "872628e8": "setPriceStep2(uint256)", +"87266698": "setJusPerBlock(uint256)", +"87269729": "sharePrice()", "8726baf7": "unapproveArtist(address)", +"8726bb89": "multiplierPerBlock()", "87275aba": "preMinting(uint256,uint256,uint256,uint256)", +"87276897": "ReserveChanged(address,uint256)", +"87277306": "setTokenLoadable(address,bool)", "8727b7fc": "calculateAmountBonus(uint256)", +"8727c23c": "updatePunkJob(string,uint256)", "87280324": "callMe(bytes32)", "87281fab": "VestingReleased(uint256)", "87283f0f": "ActivationRequest(address,bytes32)", +"87285587": "getStakingScore(address)", "87287fd7": "setMinFee(uint8)", "872887c2": "getPeriodStartTimestamp(uint256)", +"87289995": "getWinner1(uint256)", +"8728f0c0": "PromotedGame(uint256,bool,string)", "87297093": "previousWithdrawal()", +"8729b9bd": "inv(int128)", +"8729f7ac": "bulkAddAddressesToAirDrop(address[])", "8729fff4": "buyCommission()", "872a4e32": "change_min_price(uint256)", "872a7810": "revocable()", +"872a811e": "evt_closeRoomFailed(address,uint256)", "872b31b6": "_removeStakeholder(address)", +"872b7bd1": "mintBCByCardId(address,uint256)", "872bac57": "UpdateEmployee(address,uint32,uint32,uint16)", "872bc83a": "GCCExchangeCore()", +"872c50ba": "maxStaking()", +"872c97d9": "isVirgin(address)", +"872d0c8c": "setdecloudPrice(uint256)", "872d637f": "DivvyUp(bytes32,bytes32,uint8,uint8,uint256,uint256,uint256,address)", "872dbdab": "advert_machine()", "872dd49b": "getMigrateOutAttoTokens()", +"872dd764": "initialize(address,address,address,address,address,address[5],uint256[3])", "872dd84b": "priceBeforeGoalReached()", +"872e478e": "getDepositeMinAmount()", +"872e505b": "finalPrices(address)", +"872f0b97": "claimAllowed()", "872f2526": "getGuestOrders(address,address)", "872f5459": "toUINT120(uint256)", "872fe620": "withdrawByResque()", +"87306577": "calculateSeizeTokenAllocation(uint256)", +"8730b205": "redeem(address[])", +"87319914": "_zapAssetsToBunnyBNB(address)", "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)", +"87320235": "pushedHexLiquidity()", "87324ef0": "ecrecover2(bytes32,uint8,bytes32,bytes32)", "8732d065": "ignoreKYCLockup()", +"873307af": "getAthleteRegisted()", "87330b85": "getString1()", +"87336111": "config(address,address,address)", "87336473": "unblockTransfer()", "87338e98": "jackPotBestHash()", +"8733ad71": "setWeightPerSecondBounds(uint256,uint256)", +"8733c9f4": "swapInvestment(address,uint256)", +"8733caa5": "Grue()", +"8733cfd3": "userInvestment(address)", "8733d130": "ownerManualMinter()", "8733d4e8": "identityOwner(address)", +"8733ece7": "vote(uint256[],uint256[])", "8733f360": "initialize(address,address,uint256,uint256,address,address,address,address,address,address,uint256)", +"87349f57": "setpreventClaimRewardsOnDeposit(bool)", +"8734aacf": "highBalanceBonus()", "8734ffc9": "authorizedETH(address)", +"8735295c": "SwapPSCtoUSDC(uint256)", "87355084": "transferCrowdsale(address,uint256)", +"87359ebe": "balanceOfByAsset(address,address)", "8736381a": "contractCount()", +"87364782": "getMinimumRequiredAMMOAmount()", +"87366c9e": "ClaimSubmitted(address,string,string)", "87369c4b": "BOUNTY_EXCHANGE_SHARE()", "87369e04": "refundTransactions(uint256)", "8736fd16": "getRefStatus(uint256)", +"87377722": "signContract(bytes32,bytes32,bytes,bytes32,bytes)", +"8737929a": "validatorShare(uint256,uint256,uint256,uint256)", +"8738c337": "startETHSpentOracleChange(address)", "87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", "8739cacf": "getJobRating(address,uint256)", +"8739ea58": "TokensDistributed(uint256,uint256,uint256)", "8739f930": "queryGameHistoryLength()", "873a2878": "acceptWork(uint256)", "873a5690": "VikkyToken()", +"873a8822": "afterDistributeAwards(uint256,uint256)", "873ab2ce": "computeFeeRate(address)", +"873abd75": "userToAffiliate(address)", "873b3009": "getKeyRevisionNumber(uint32,int256)", +"873ba152": "wTime()", +"873bcc27": "calcCosineIndex(uint256,uint256)", "873bdee0": "systemWithdraw(address,uint64)", "873c56d7": "officialLimit()", "873cb0ab": "redeemedKarmaOf(string)", "873cdb03": "Litas()", +"873db1a7": "challengeRequest(bytes32,string)", "873db84c": "queryN_fnc()", "873dc3b3": "bountyOnlineGW()", "873dc71d": "getCycleInfo()", "873ebe6a": "collect(address[],uint256[])", +"873f0b6e": "view_bytes1()", +"873f1d22": "playBatch(uint8[],uint256[])", +"873f3102": "switchIsOnlyAmunUser()", "873f610c": "Contractors(uint256)", +"873f6f9e": "hasClaimed(uint256,address)", "873f9a6a": "registerDIN(address)", "873fd089": "isStaker(uint256,address)", +"87402d9a": "updateAddressInfo(address,uint256,bool,uint256,bool,uint256,bool,string,bool)", +"87404de9": "approve_642(address,uint256)", +"87405d6a": "_buyMkb(uint256)", "87407993": "inQuitLock(address)", "8740b73d": "EthereumGoldPro()", +"874106cc": "bootstrapSupplyExpansionPercent()", "87412a4b": "TeamAndPartnerTokensAllocated(address,address)", +"87417a6f": "basehes()", "8741ab49": "setupCompleteFlag()", "8741f15e": "tileBalance()", +"874236b6": "SUPER_NODE_ADDITION()", "874252ef": "giveProgectTokens(address,uint256)", "8742792f": "changeNameByEveryone(string)", +"87428263": "inflate(uint256)", +"8742ab9b": "getCommissionRef()", "8742fc3b": "getVoteResult()", +"87434d98": "setBonusTingMultiplierOfSets(uint256[],uint256[])", +"87441de9": "returnSigilArray()", "8744e974": "CallOption(address,uint256,uint256,uint256,uint256,uint256)", "87451d52": "addQuickPromoBonus()", "8745ddb3": "jailAmountOf(address)", +"8745e2e9": "getRedeemableCoupons()", +"8746475a": "isRefundEnabled()", "8746656f": "extendDuration(uint256)", +"8746a7aa": "loansEverCreated()", +"8746b4e0": "setT1(address)", +"87470405": "switchCrowdSale()", +"87475222": "submitChangeRequiredPower(uint256)", "874752b4": "SpiceMembers()", "8747a674": "getWrapperBalance()", "8747f9b1": "resultReject()", +"8748978e": "Resource_Registeration(bytes32)", +"8748abd8": "unfreezeLocking()", +"8748e0c1": "transferHandler()", "8748ecda": "Dynamic1_5x(uint256)", "87491c60": "closeMinting()", +"8749ceca": "withdrawAndSyncDelegatorRewards(bytes32,address)", +"8749e26f": "configurations(uint256)", "874a7036": "placeNotes(uint256[],uint256[],uint256)", "874b4fcc": "setSigningPublicKey(string)", "874b953a": "changePrimaryApprovedWallet(address)", +"874c120b": "rewardPerToken(uint256)", +"874c5e77": "LayDsVDV()", +"874cfe9d": "pendingIPhone(uint256,address)", +"874d52a2": "NFTMouldFileData(uint256,uint256)", "874d6d81": "getWeek()", "874d73a7": "addLottery(string,uint32,uint32,uint32,uint32,uint32,uint32)", +"874e5bb8": "getStudentData(uint256)", "874f33a1": "doStuff()", "874f874c": "reminderCalc(uint256,uint256)", "874f8ef6": "getAdv(uint256,uint256)", +"874fcd07": "getTotalFlagAmount(uint256)", "874fe370": "finalizeTS()", "874ff7ed": "YOYOW(address)", "8750367e": "FundRequestPublicSeed(uint256,uint256,address)", "8750c2d7": "priceInTokens()", "8751775b": "cancelRewardsWithdrawal()", +"875195b0": "xgtGenerationRateStake()", +"8751ea40": "addReserveUSDT(uint256)", "87521056": "createMineForToken(uint256,uint256,uint256,uint256)", "87524581": "accounts(address,uint256)", "87526b0a": "totalPendingPayments()", "87528d5e": "setInitAttr(address[],uint256,uint256)", "87529f0f": "getTeam(address)", "8752cff2": "isUserExisted(address)", +"8753367f": "verify(uint256)", +"87533eec": "initiateDydxFlashLoan(uint256)", +"87534f8d": "setEscrowSettlementAmount(bytes32,uint256)", "8753b16e": "requestOwnership(address)", +"8753cc66": "stakedERC721Holders(address,uint256)", +"875408f6": "getPoolTamagIdContains(uint256,uint256)", "87541c9e": "setLLV_edit_3(string)", "87543ef6": "upgradeController()", +"875489a6": "sellOnApproveForOrigin(address,uint256,address,address[],bytes,uint256[])", "87548fcf": "getTracks()", +"87549182": "syncInterestById(uint256)", "8754b1d1": "createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", "8754b29c": "buyCore(address,address,uint256)", "87551db0": "getChecksum(string,string,string)", +"87557b1f": "VOLATILITY_DATA_NUM()", "8755b065": "initialTransfers(address[],uint256[])", +"8755e38b": "AIRDROPS_POOL_SUPPLY()", +"8755f1e2": "ownershipTransferContract()", "875606a1": "freezeTransfer()", +"87564d84": "setSpan(uint256,bool)", +"8756c487": "keeperHolder()", "8756f3e7": "LogErrorMsg(uint256,string)", +"87572a98": "auditRequests(bytes32)", "8757a2cd": "test_depth(uint256,uint256)", +"8757b15b": "setApprovals()", "8757d620": "firstBuy(string)", "87585707": "buyVouchers()", "87586b32": "getPI_edit_2()", +"875872db": "getReferralsNumber(address,address)", "8758ba8f": "approveForGeneLab(uint256)", +"8758eb69": "getOracleAddress(address,uint256)", "875991eb": "dealLog(uint256[2],bytes32,bytes32,uint8)", "875999e0": "getLastKeyTime()", "8759afc9": "_initStages()", "8759c2f1": "getHappinessCitizens(uint256)", "8759d1c3": "sendReceivedTokens(address,address,uint256)", +"8759ecdf": "getServiceMinMineAmountInWei()", "875a8dfc": "post(address,string)", "875ac8f1": "PAYOUT_DATE()", "875ad967": "DopeRaiderCore()", +"875b521e": "mir_rewards()", "875c330c": "LogPush(address,uint128,string)", "875c7143": "setSecondYearAllowancePercentage(uint8)", "875cb3e5": "closeSuccess()", +"875d787a": "yourStakedREWARDTOKEN(address)", +"875dbd0c": "tradeEtherForTokenSpecifyingFee(address,uint256,uint256,uint256)", "875dc0ee": "changePaymentDestination(address)", "875de431": "phaseOneBonusPercent()", "875e7bb4": "FactoringChain(address)", "875ea5e7": "dividend(uint256)", "875ed7ae": "unitEquippedItems(address,uint256)", "875f0671": "crowdsaleStatus()", +"875f4384": "getWithdrawableAmount(uint256)", "875f71a3": "ETHDistributor()", +"875fb04f": "claimAllPrivateRgt()", "875fde3d": "createErc20Token(string,string,uint256,uint256)", "876012fc": "composeJingle(string,uint32[5],uint8[20])", +"87606789": "offerFee()", "87609d1a": "__price()", "8760b171": "getBPhashFromBPTokenId(address,uint256)", +"8760e395": "xgtpair()", "87612102": "loadRefund()", "87615cb2": "enableRegulator(address,string)", +"876171cc": "_toWei(address,uint256)", +"876171dc": "withdrawRecipients(uint256)", +"8761b71d": "that(bool,bytes32,bytes32,uint256,uint256)", "8761fb7c": "escrowAdmin()", +"87620179": "govChangeOracle(address)", +"876224b7": "plyrPhas_(uint256,uint256)", "87627869": "setCopaMarketAddress(address)", "8762d50b": "_xx()", "87630a2e": "activateContract(address,address)", "876339b8": "_sellPutToOpen(uint256,uint256,uint256,uint256,address)", +"876374e2": "GlobalScope()", "8764159e": "findContractByModName(string,string)", +"87642aa5": "miVaultsFund()", +"876467f8": "removeCollateral(address,uint256)", "8764edd0": "VerificationAccountOnJullar()", +"87656b7d": "DLog(uint256,string)", "876588b8": "Apply_Store_Id_Fee()", "876590c3": "setTeamPrice(uint256[],uint256[],uint256)", "876777d0": "TTCoin()", +"8767914f": "setpurchaseableTokensAddress(address)", "87679684": "checkProof(bytes,uint256,bytes,bytes)", "876848d3": "valid(uint80)", +"87684edd": "setCapsPerAccount(uint256[4])", +"87685fb9": "getAssetAddresses()", +"8768bded": "_getMooniswapAddress()", "876911ca": "ArrAccountIsFrozen(uint256)", +"87695014": "frozens(address,uint256,uint256)", "8769817a": "CROWD_WEEK1_BONUS()", "87699aa6": "TOKENMOM()", +"8769ba0b": "init(address,address,address,address,address,address,uint256)", "8769bc7e": "currentSpiderOwner()", "8769beea": "openESOP(uint32,bytes)", "8769c281": "allowRefunds(bool)", "8769c28c": "bogotacoin()", +"876a17ec": "getSmartWalletUpgradeBeacon()", +"876ad663": "pendingPickle(uint256,address)", +"876ae0ac": "TokenSaleStarting(uint256)", "876b0946": "NucleusVisionToken()", "876b0a95": "getDiceWinAmount(uint256,uint256,bool,bool)", "876b1566": "getTokenHolders()", +"876b3878": "indexOfRealty(uint256)", +"876b4b09": "muteTransfers()", "876ba3cd": "transferModeratorship(address)", +"876c6075": "publicCall(uint256)", +"876c63d4": "renewalPeriodDuration()", +"876ca09f": "confirmPayment(uint256)", +"876ca985": "addToken(address,address,uint256,uint256,uint256)", +"876cb217": "buyNewLevel(uint8)", +"876cc901": "teamAdvisorsTokensAddress()", "876cf0ef": "getCrystals(address)", +"876d38a4": "estimatedBlocksIntervalRewards(address,uint256,uint256)", "876da006": "TOKECOIN()", +"876dc242": "AddAddressToJackpotParticipants(address,uint256)", +"876e65ff": "unlockRewards(address)", +"876e75ee": "referralCount(uint256)", "876e79f6": "targetDiscountValue7()", +"876eae7d": "setFusionContractAddress(address)", +"876ed5cb": "MAX_ROLLUP_TX_SIZE()", "876ee240": "EthWuxia()", "876f1c27": "replaceAnimal(uint16)", "876f20b1": "crownSymbol()", "876f5746": "ShitcoinCash()", +"876f5c7e": "canStartAward()", "876f9795": "mineSalary(uint256)", "877046a2": "CGCCoin()", +"87707c22": "setLendingPoolCore(address)", "87708311": "OBEFAC(address)", +"877112b3": "iPhone()", "87717cb1": "_hackoinToken()", +"8771cd2d": "initialize(address,string,string,uint8,uint256,bool)", +"8772005f": "reserveToMint()", "8772a23a": "configured()", "8772ae3c": "setMinimumBet(uint256)", +"87730b26": "flashSender()", "87730ed7": "allocateFundsBulk(address[],uint256[])", +"8773334c": "isReadyForUpgrade()", +"877337b0": "tokenWhitelistNode()", "87734d53": "getBet(address,uint256,uint256)", "8773c0d0": "buySoul(address)", +"87743c36": "suspendPynths(bytes32[],uint256)", "8774e5d0": "setPriceInWei(uint256)", +"87756222": "participar(uint256)", +"877562b6": "lpToken1()", +"877577e5": "stablecoinBalances()", "87757835": "Ducker()", "8775a557": "DadaCollectible()", +"8775babf": "getMultiplierCeiling()", +"8775fe78": "ttimes(address)", "877653f0": "_storeBalanceRecord(address)", +"87775d29": "changeUniswapRouterAddress(address)", "8778205d": "TransferDisable(uint256)", +"87788782": "performanceFee()", +"8778b27d": "votesCount()", "8778c090": "arrayOfNonTrivialAccounts()", +"8778f415": "getLastClaim(address)", +"87791ff9": "signAndDeposit(bytes32,bytes32,uint256,uint256,uint256,bytes)", +"87793ba3": "shareBalance(address)", "87793dc7": "invokeOnceFor(address)", +"8779588c": "_countsSnapshots(address)", +"877a013c": "loyaltyRate()", "877aaf4f": "tosToken()", +"877ae75a": "getuserinfo(address)", "877af5b4": "subFundAccount()", +"877b6f8f": "toggleMarketCreationType(uint64,bool)", "877b9a67": "isIssuer(address)", "877c2184": "getIntValue(string)", "877c3650": "getproductprices()", @@ -77430,95 +141750,164 @@ "877cedb8": "Lockup12m(address)", "877d481c": "startStage3()", "877ddd77": "commission_ratio()", +"877e3817": "getGold(uint256)", +"877f282b": "setApiBaseUrl(string)", +"877f2ed9": "mAdminArr(uint256)", "877f5618": "isAllowClaimBeforeFinalization()", +"877fa800": "getTotalWeiAvailableToReturn(address)", "87800ce2": "MD5FromMarketingKeywords(string)", "87801cc3": "setNextRoundDonation(uint256)", "87804708": "_validate()", "8781249f": "getCntByRarity(uint8)", +"878127c8": "shopIndex(uint256)", "8781382e": "WBU()", "878170d1": "fetchValue()", +"8781e613": "NewAsset(uint256,address,uint256,address,string,string)", +"8781f68b": "getRbtcInBitPro(bytes32)", +"87822b50": "isMintableCurrency(address)", +"87828c5d": "updateNFTmeta(uint256,bytes)", "878314c9": "crowdsale_eth_fund()", +"87833d00": "batchTransact(address,bytes[],uint256[])", "878377e7": "RAM_Token()", "8783bf1a": "EGGS_TO_HATCH_1DRAGON()", "8783d407": "feeReplyThread()", +"8783e8a2": "addNewCustomToken(address)", +"8784576b": "getTotalAssetsStaked(uint256)", "87848727": "writedb(string,string,string)", "8784ea96": "getCommit(bytes32)", +"87862db0": "allowPriceLower()", "87864af8": "UNFREEZE_TEAM_BOUNTY()", "87873b6d": "MoneyTreeToken()", "87874e02": "getNextAvailableLevel()", "87877e4d": "setSponsor(string)", "8787c9ff": "approveCertificate(address,address)", +"8787ebfd": "usdtValue2Eth(uint256)", "8787f75d": "Kodobit()", "878808af": "tokensSoldGoal()", "87881ede": "getStackholderConfirmations(uint256)", +"87882cb8": "returnRepFromDisavow()", "8789dfbf": "instContAllocatedTokens()", "878a18ef": "tokensSentDev()", +"878a8cfd": "nonceStorageId()", +"878ab771": "ROUTERV2ADDRESS()", +"878b04c3": "Canceled(bytes32,address,address)", +"878b255d": "pool9activeUserID()", +"878b608d": "proposalValues(uint256,uint256)", "878c1484": "cause()", +"878c446a": "getDefier(uint256)", +"878d0199": "ComfirmRedeem(address,uint256)", +"878d1b4f": "setupChai()", +"878d2218": "pharaohReq()", "878d4204": "testInitialCrowdsale()", "878d5ff7": "partnerInfo(address,address)", +"878d9b7a": "bid(address,uint256,bool)", +"878dd332": "isBlacklistEnabled()", "878de0ae": "userEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", "878e10e4": "SEHR_WALLET_ADDRESS()", +"878e117b": "stakingMinimumSeconds()", "878e8827": "getActionParameterByIndexes(uint256,uint256)", "878eb368": "cancelAuctionWhenPaused(uint256)", "878eb4ca": "serviceDeposit()", "878edb66": "getVotesByPollingStation(address)", "878ef7fe": "RealMadrid()", +"878f7603": "CDAI()", "878fb316": "btycsell(uint256)", +"878fd290": "stakerAmount(address)", +"878fdf58": "ContractAudited(address,bytes32,uint256,bool)", +"879015e8": "systemStore()", "87902997": "acceptAndAdditionals(bytes32,uint256[])", +"87902f00": "paystub(uint256)", "87903097": "timeoutPlayer(uint256,address,uint256,uint8)", "879125a4": "setMaximumRate(uint256)", "87914c6f": "prolongateContract()", +"8791e7b4": "updateEnterpriseCreditLimit(bytes32,uint256)", "879206a2": "lastPayerOverflow()", "87924815": "ownerAddressSize()", "87925132": "PandaCore()", "879281c4": "login(bytes32)", +"8792f855": "getImpactDonor(bytes32,uint256)", +"87931a06": "changeName1(string)", "87932e0f": "setAddress(bytes32,address,address)", "87934ec8": "skinCreatedLimit()", "8793ae52": "getCurrentDaoStakeSupply()", +"8793eac3": "setBSCBNBDebt(address,address,uint256)", "87943859": "getRefBonus()", +"87947381": "participatingCompanies(uint256)", "879499f4": "newUriBase(string)", +"8794b570": "betsPrizes(uint256,uint256)", "87950f49": "setDistributorAddress(address)", +"8795c03f": "searchIndex(address[],address)", "879611bb": "removeGlobalConstraintPost(int256,address,int256,address)", "879647e2": "getindex()", "8796a7ba": "totalPrivateSaleStage()", "8796d43d": "activeToken()", "8796ec86": "getDocumentHash(uint256)", "879736b2": "swapValidatorKey(address,address)", +"87976583": "harvesters(address)", +"879786a5": "transferOwnershipOfFactory(address)", "87982928": "launchPeerWallet(address[],address[],uint256[])", "879844b9": "crowdsaleAddressSet()", "87986f52": "getOrderSupportCancel()", +"8798a9d2": "checkStabilizerAndGetReward(int256,int256,uint256,uint256)", +"879905a1": "adminRescueTokens(address,address,uint256)", "879a2d2a": "getApplication(address)", "879a6f7a": "recoverWarriors(uint256[],address[])", "879a83fc": "LogWithdraw(uint256)", "879abc11": "applyRuntimeUpdate(address,address,uint256,uint256)", +"879adf89": "HarvestUbaseLp()", "879b18b6": "getMemberCanVote(address)", +"879bc600": "customers_deposits(uint256)", +"879bd47f": "redTime()", "879bfa27": "Investors()", +"879c2e1d": "venusRate()", +"879cda73": "removeMinGasPrice(address,bytes4)", "879ce676": "withinExecutionLimit(uint256)", "879cffdf": "TokenBuy(address,uint256,uint256,string)", "879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", +"879d5aad": "foreclosureTime()", "879e4b1a": "empty(bytes32)", "879e84ab": "minChequeValue()", +"879e97de": "uniSyncs()", +"879eefa5": "getDisputeRoundDurationInSeconds(bool)", "879f30ad": "burnSent(uint256)", +"879f466c": "fourYearsasBlock()", "879f4dfe": "_getCampaign(bytes32)", "879f9c96": "purchased()", "87a01164": "teamTransferFreeze()", +"87a02172": "unstake(uint8)", "87a04b67": "KUYOOToken()", "87a07692": "setWinner(string,uint8)", "87a07adb": "getSharedAccounByIndex(uint256)", "87a09877": "AdvisorGPX(address[],uint256)", +"87a0f31c": "xfLobby(uint256)", +"87a1091c": "fintech()", +"87a140c3": "collateral_ratio_paused()", "87a16f12": "addScriptExecutor(address)", +"87a227f1": "moneyOut()", +"87a2471e": "isKnownDriver(address)", "87a2a9d6": "_MAXIMUM_TARGET()", "87a2afb3": "releaseBets()", +"87a35382": "withdrawAnyToken(address,uint256)", "87a378fb": "holdSubscription(uint256)", "87a3903e": "buy(uint16,uint16,uint16,uint16)", +"87a39673": "memberConvertONUSintoAVEC(uint256)", "87a3be75": "init(address,uint256[],address[])", "87a3e445": "icoBonus4()", "87a407a1": "setBurner(address,address,bool)", +"87a42e1a": "setTokenTransfers(address[],bool[],bool[],uint256[],uint256[])", +"87a433bd": "war_getNextNukePriceRaw()", +"87a4747e": "ANA(uint256,string,uint8,string)", +"87a4beb0": "pick_winner()", +"87a4c401": "unstakingTimeOf(address)", "87a675ca": "DataContacts(address,address,address)", +"87a6d0fc": "onGameActivated(uint256,uint256,uint256)", +"87a72666": "createLicense(address,uint256,uint256,uint256,string)", "87a767e3": "removeCA(address,address)", "87a796a1": "_fetchCancelledOrdersForPayer(address)", +"87a7a5c9": "checkWin(int256)", "87a846a5": "getBonus(uint256,uint256,uint256)", "87a88c43": "iDistribution()", +"87a8af4e": "disableFaucet(address)", "87a91506": "PlayChainPromo()", "87a97752": "setInitialEnemyCombination(uint32[4])", "87a9a8ef": "totalSupplyAtCheckpoint()", @@ -77526,252 +141915,472 @@ "87a9c6c5": "buyAndTopup(address)", "87aa14d2": "freezeEventOutcome(uint256,uint256)", "87aa2bf9": "rmul(uint128,uint128)", +"87aa8225": "creditPledgeQuotaMax(uint256)", +"87aa9062": "testDel(address,address)", +"87ab18e1": "numOwners()", "87ab42b3": "MysteriumTokenDistribution()", +"87ab4a18": "assignableTokens(address)", +"87ab77b9": "HDXcontractChanged(address,address,uint256)", "87ab8403": "transferScoreToAnother(uint256,address,address,uint256)", +"87abee04": "etherInfo(bytes32)", +"87ac1738": "getPlayerPurchaseIndexes(uint256,address)", +"87ac41d5": "Started(uint256,uint256)", +"87ac5cf7": "ThreeGreenPyramids(address,uint256)", +"87ad78ac": "approvePayout()", "87adab57": "VISTAcoin()", +"87adbd0c": "compWithdraw(address,uint256)", +"87adc163": "mockSetBlockNumber(uint256)", +"87addf58": "cbmWallet()", "87ae00a3": "ZebiMainCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address,uint256,uint256,uint256,uint256,int256,uint256)", "87ae0dbe": "yearSeconds()", +"87ae54b6": "deposit(uint256,uint256[],uint32,uint32)", +"87aee00e": "versions(uint256)", +"87af0d43": "complainOrder(uint256)", +"87af1b6e": "calculateSetRedemptionQuantity(uint256)", "87af74ab": "calculateNumberOfNeighbours(uint256,address,address)", "87afe179": "getTotalTicketSetsForRound(address,uint256)", +"87b010ff": "penalty(uint256,uint256,address,address)", "87b01dc9": "setSale(uint256,bool,uint256)", +"87b0b39b": "message(address,uint256,uint256)", "87b0be48": "releaseTokens(address)", "87b0d60c": "sumICO1()", +"87b15648": "safetimerenabled()", "87b15c0b": "periodITO_wei()", +"87b162b5": "createUser(string,string)", "87b234ec": "createReferralGiveAways(uint256,uint256,address)", "87b261ad": "coeff()", "87b2fe7f": "luckynum()", "87b30845": "exchangeDIDForEther(uint256)", "87b3be7d": "Ring()", "87b47e4f": "transSupply()", +"87b4c4f2": "KittyEntered(uint256,uint256,address)", "87b4e60a": "newTokens()", "87b547e5": "balanceOfDirectoryToken(uint256)", "87b551b5": "tokenPayout()", "87b55705": "mintingThreshold()", +"87b55f72": "streamDuration(address)", "87b57fa7": "GetMinerRigsCount(address,uint256)", "87b5914c": "exchangeRateETHToUSD()", +"87b5a0ef": "getDestinationAddress()", "87b5c21f": "OCTWasteToEnergyJV()", "87b5f114": "xpTokenAddress()", +"87b62860": "gwtb_usdt(uint256)", +"87b648d6": "createCandidateWithERC20(string,address)", +"87b65207": "mature()", +"87b6df3e": "Triger_Deposit_For_Head(address,address,uint256,uint256)", +"87b71707": "determineNewAllocation(uint256,uint256,address)", "87b73795": "verifyKYC(address,address)", +"87b7491e": "changeFuel(address)", "87b751ae": "TokenTrader(address,uint256,uint256,uint256,bool,bool)", "87b7a068": "updatesAreAllowed()", "87b8963c": "badgeDecimals()", +"87b8a7dc": "sortStreams()", +"87b8e89d": "governanceSwapTokens(bool)", +"87b8fbb7": "removeWhitelistedSecurityAgent(address)", +"87b9337d": "priceAggregatorProposeTimestamp()", "87b9a544": "DataController(address)", +"87b9c24d": "download(uint256)", "87b9e310": "nominPool()", "87ba67be": "nextLevelPercent()", "87ba67dd": "Arascacoin()", "87bab806": "getNumOrganizers()", +"87bae38e": "abs_price()", "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()", +"87bc9b26": "initX()", +"87bcf8b2": "ownerToManager(address)", +"87bd15ef": "startCountdown(uint256)", "87bd499b": "lastLevelChangeBlock()", +"87bd8712": "finishChangeMinInterval()", "87be727b": "getSum(uint16)", "87bea35f": "getCreatePrice(uint16,uint256)", +"87bf11ea": "stealth(uint256)", "87bf26b9": "GetGrade(uint256)", "87bf740b": "YYToken(uint256,string,uint8,string)", "87bfce9e": "claimedYesterday()", +"87bfe276": "getRatioPerShare()", +"87bffc4e": "implementsERC721O()", "87c00626": "calcTokensToEthers(uint256)", +"87c02c94": "getIndividualBucketDetailsToUser(address)", "87c05510": "setNewlockAccount(address,uint256,uint256)", +"87c0e1ff": "getJobForWorkerCount(address)", +"87c13943": "PERCENTAGE_BASE()", +"87c1981c": "closeInternal(address,uint256)", "87c19bcb": "votelog(bool,address,uint256)", "87c1be6e": "globalPause(bool)", "87c1ed12": "transferToOwner(uint256)", +"87c1ef90": "enableLock(bool)", "87c23143": "totalEthBankrollCollected()", "87c2ee62": "secondStageEndsAt()", +"87c313c1": "updateLockupPeriod(uint256)", +"87c348bf": "_saleStarted()", +"87c369f1": "setRevertFlagForCREATE(bytes32)", "87c38114": "Emojicoin()", +"87c39ba4": "junglePerBlock()", +"87c49bb4": "requestRefund(uint256,string[])", "87c4aaea": "totalTokenVested()", "87c50df5": "erectBarrier(uint16,uint8,uint8)", +"87c53d00": "customTokenRate(address)", "87c55589": "blockTube(uint256,string,uint8,string)", "87c5d1be": "LEDTEAM_TOKENS()", +"87c5d5cc": "compareStr(string,string)", +"87c60483": "getPackage(string)", "87c60d89": "getAllSubcontracts()", +"87c68bcc": "minSales()", +"87c68dd8": "PancakePair()", +"87c6b8a4": "changeLotteryInfo(uint16,uint256)", "87c70d21": "expressReloadNums(uint256,uint256,uint256[])", "87c79d1d": "getColors()", +"87c80464": "init(string,string,uint256,uint256)", "87c84933": "LogParticipation(address,uint256)", "87c86277": "setPetName(string,uint64)", +"87c891bd": "getLastUpdatedBlock()", "87c8ab7a": "changeAllowance(address,address,uint256)", +"87c9082d": "lockedLPLength(address)", "87c95058": "setAdministrator(address,bool)", +"87c961f4": "CGroupMod(bytes,address,int8)", +"87c96419": "setTransformerDeployer(address)", +"87c9d5c1": "pendingCourier()", +"87ca9f2a": "supplyOnAllDays()", +"87cad0bf": "accountInfos(address)", +"87caea78": "doVote(bool)", "87cb15f7": "move(uint256)", +"87cb37e3": "currentLogic()", +"87cb697b": "slowCancelDelay()", +"87cbbbbd": "withdrawAll1()", +"87cbfb0b": "newSteal(uint256,uint32[],uint8[],uint32[],uint256[],address[])", +"87cc0832": "pendingToy(uint256,address)", "87cc1e1c": "setExporterBank()", "87ccb440": "getReg2()", "87ccb57b": "testExecuteSellOrderShouldNotChangeBuyerBalance()", "87ccccb3": "PublicMine()", "87ccd8b3": "_isComplete(uint256)", +"87cd273c": "userTypes(address)", +"87cd29a4": "getProviderCurveLength(address,bytes32)", +"87cd5072": "initDataIfNeeded(address,uint256)", "87cef144": "updateVIPs(address)", "87ceff09": "getBlockTime()", "87cf34cf": "getUserContributionReclaimStatus(address)", +"87cf3ef4": "feeSetter()", "87cf7768": "walletG()", "87cfc1d8": "disableAgency(address)", +"87d0463c": "gmeToken()", +"87d0ae8b": "pendingCro(uint256,address)", +"87d0ca2b": "pendingDgext(uint256,address)", "87d14a36": "MaxPlayers()", +"87d19b1d": "setEndOneSale(uint256)", "87d25299": "tessrX()", "87d2544d": "CMOSignature()", +"87d2b379": "updateCloserAddress(address)", "87d3525f": "CancelSimpleOffer_internal(uint256,bool)", "87d36176": "False()", "87d3764b": "ROLE_LEVEL_PROVIDER()", +"87d39ec9": "RoundFinished(uint256,uint256,uint256)", +"87d3a024": "addressById(uint256)", "87d3a184": "makeZero(uint256)", +"87d40a70": "receivedData()", +"87d423cd": "getAmountOutETH(address)", +"87d44c13": "viewUserLevelExpired(address,uint256,uint256)", +"87d49106": "totalCommFunds()", "87d4ca93": "escrowFrom(address,address,uint256)", "87d517c9": "fetchInitialDetails(string)", "87d5418f": "aSetEnd(uint256)", "87d570c0": "OHGRiverResort()", "87d5c6b8": "rentalElapsedTime()", +"87d60bff": "createFuturesContract(bytes32,uint256,uint256,uint256,uint256,uint256)", +"87d62038": "addResolverAsProvider(uint256,address,bool,uint256,bytes)", "87d67208": "changeIcoStartBlock(uint256)", "87d741c9": "getPaidETHBack()", +"87d74481": "batchTokenBalances(address[],address[])", "87d76f09": "calculateEstimateToken(uint256)", +"87d77cb8": "_stakingBurnTotal()", +"87d784fa": "rFromToken(uint256,bool)", "87d79f8a": "buyIceDrangon()", "87d7d24d": "ownerconfirm()", "87d803a3": "setResult(uint8,uint8,int8)", "87d81789": "payments(uint256)", +"87d857b6": "redeemForBuyoutFailed(uint256,address)", +"87d858fc": "enrollVoter(uint256,string,uint256)", "87d87090": "setMinRefEthPurchase(uint256)", +"87d8ce4b": "churn(address,bytes32[],bool[],uint8,uint8)", +"87d8ec05": "catnipV2()", +"87d942db": "good(bytes32,uint256)", "87d9d224": "TokenDistribution(uint256,uint256,uint256,int256)", +"87d9eb69": "getPackedReserves(bytes)", "87da18ee": "getRankPriceEth(uint256)", +"87da21e3": "totalMoney()", "87da3208": "CollateralToken(string,string,uint256,uint8)", "87da9cad": "ApprovalToken(address,address,uint256)", +"87dac0cc": "getUserLiquidity(address,address,uint256,uint256)", +"87dad9d1": "minEthPayable()", "87db03b7": "add(int256)", +"87db4055": "launchStore(string,string,string)", "87dba600": "_set6()", +"87dbff24": "ausc()", "87dc0c55": "getAuctionEnd()", +"87dc7c37": "enable(uint256)", "87dcd2b6": "superOwner()", "87dcfd2d": "numTokensLeft()", "87dd1908": "_voteAndContinue()", +"87dd80cd": "approveTransferERC220(uint256)", +"87ddae44": "canTransit(bytes32,bytes32)", "87ddc521": "rewardController(address,bytes5)", "87dde4ad": "get_candidate(uint8)", "87ddf6cd": "setAddressArrayIndex(bytes32,uint256,address)", +"87dee122": "userFunds(address,address,bytes)", "87def081": "getFeeRecipient(int256)", "87df4838": "CancelSell(uint256)", +"87df8116": "testCalculateTotalCollateralMultipleUnit()", "87dfc909": "queryMap(uint8,int256[],int256[])", "87e06546": "PLATINUM_AMOUNT_XPER()", "87e0f794": "TwistoToken()", "87e1029a": "newStar(uint8,uint8,uint256)", "87e12235": "_filiate()", "87e19cc5": "EBETCrowdsale()", +"87e23e63": "protocolFeeMax()", "87e25e0e": "deleteCertificator(address)", +"87e2662e": "poolHasMembers(address)", +"87e26e6d": "testSetMarketInterestRateModel_NotAdmin()", +"87e2e90c": "createUniswapPairMainnet(address,address)", +"87e36469": "setOwnerxL0(address)", +"87e3c599": "WithdrawInvestment(uint256)", +"87e40db7": "getReservesData(address,address)", "87e412f4": "SecurityDeposit(address)", "87e42622": "KONSTANTOR()", +"87e43375": "ispitniRokovi(uint256)", +"87e4382e": "getStakingpowaBase()", "87e44935": "IDOToken()", "87e46baf": "transferVoxel(address,uint8,uint8,uint8)", "87e4e64d": "getBalanceMy()", +"87e5c297": "bestBoost(bool)", "87e6835f": "tokensDrukker(address,uint256)", +"87e68532": "mtokens(uint256)", "87e70933": "VoteMusic(uint256,address)", +"87e719c6": "create(address,bytes32,address,uint256,uint96,uint96)", "87e7dc5f": "ICOStarted(uint256,uint256,uint256,uint256,uint256)", "87e854d3": "addRate(address,uint8)", +"87e88f63": "prepareCondition(address,uint256,int256)", "87e89845": "getBabyMommas(uint256)", "87e8a980": "godChangeGod(address)", +"87e97bc6": "getOfferingAmount(address)", "87e97e82": "AuctionStarted(bytes32,uint256)", +"87e9f75d": "timeToUnlock(address,address)", +"87ea2045": "setLossCoefficient(uint256)", "87ea8581": "setTemp(uint40)", "87ea8893": "PGGameToken()", "87ea9d52": "INK()", +"87eace99": "uplineAmount(uint256)", "87eba3c7": "GetBuyingTokenAddress()", "87ebd76c": "initContract(string,string,uint256,uint256)", "87ecaf0d": "check2(uint256,uint256)", "87ed1bd0": "grantAccess(address,uint8)", +"87ed238a": "burnFromPool(uint256)", +"87ed3556": "setPriceStable(uint8)", "87ed5112": "setApoderadoVerify(bytes32)", "87ed90ba": "securityWallet()", "87edb2f5": "decode(bytes,uint256,uint256,uint256,uint256,uint256)", "87ede474": "MicinRasaJamur()", +"87ee9957": "replaceDepositProfileAtIndex(uint32,uint32,string,uint8,address,uint256,uint256,uint256,uint256)", +"87eed76a": "isReportValidatorValid(address)", "87eeddf8": "confirmAndExecuteWithdrawal()", +"87ef9c30": "pieBorrowState(address)", +"87efbe7e": "withdraw_rem_profit(uint256)", "87efeeb6": "singularDTVToken()", "87f06ec0": "getForkDurationSeconds()", "87f0b8c5": "getStrong(address)", "87f0bf31": "addResources(address[],bytes4[])", "87f0fae9": "setKingdomFactory()", "87f162c8": "initialEBETSupply()", +"87f1ab15": "trxToTokenTransferOutput(uint256,uint256,address)", +"87f1b455": "investCb(address,uint256,uint256)", +"87f1d340": "requestIdStatus(bytes32)", "87f1e7f3": "c_softCapUsd()", "87f24484": "hashPass()", +"87f27a93": "changeRewardPeriod(uint256)", +"87f280fe": "LayTeamCoNhieuVDV()", "87f29fdd": "removeDiscountPhase(uint256)", +"87f33ba0": "arat()", +"87f39a5c": "changeFunding(int256)", +"87f3aa53": "approve_873(address,uint256)", "87f3e5d6": "contributorsOfCauldron(uint8)", "87f404cd": "getContractRhemBalance()", +"87f40721": "adOG1(uint256)", "87f40ba4": "supplyReserveVal()", +"87f4427e": "authorizeOwnershipTransfer(address)", +"87f48f4e": "claimingFeeDenominator()", "87f503fd": "DEV_TEAM()", "87f51ac2": "athToken()", "87f5c846": "ethBalanceOfNoFee(address)", +"87f5caf9": "programme(uint256)", +"87f61c81": "finishChangeStakingPool()", +"87f63583": "_createOracle()", +"87f67e4a": "ShowMKBNumber()", "87f6be15": "houseCredits(address)", +"87f73241": "viewHash()", "87f74e7c": "updCouponBonusConsumed(string,bool)", +"87f76303": "transferGuardianPaused()", "87f7cab9": "removePerson(bytes32)", "87f7e2a1": "getTeamCost(uint256)", "87f9534b": "getLinkedIn()", +"87fa7046": "fake(address,uint256)", +"87fb4ddf": "stateSenderContract()", +"87fb6a73": "removeUnusedReward()", +"87fb79be": "instantMintPool()", +"87fba522": "min_percent()", +"87fbcded": "revokeCreatorApprover(address)", "87fc00f7": "setTPTContractAddress(address)", +"87fc4f57": "_getOffsetAndRedistributionVals(uint256,uint256,uint256)", +"87fc7405": "mul(int256,uint256)", "87fcd708": "StartICO(uint256)", +"87fcd82b": "_setModule(bytes32,address)", "87fcdbc1": "updateConversionRate(uint256)", "87fd0421": "TheEthereumLottery()", "87fdc401": "make(address,uint256,bytes)", +"87fe83eb": "vliquidPoolsToWeth(address)", +"87fe9209": "playerIdOf(uint256)", "87feba8f": "getInstallmentDuration(uint256)", +"87fed095": "uniswaprouteraddress()", "87fef15b": "purchase(bytes32,bytes32,bytes32)", "87ffe5a7": "dataSourceGetRedCards()", "8800052e": "preSaleTokensLeftForSale()", +"88004950": "pctDIDOwned(address)", +"880064a8": "FundBankroll(address,uint256,uint256)", +"8800b4d4": "getAuctionByIndex(address,uint256)", "88016da5": "allocateFrom(address,address,uint256)", "88017e05": "setContribution(uint256)", "8801b4fc": "paused_()", "8801c928": "createJob(bytes32,uint256)", +"8801dcda": "BASE_SLOT_REWARD()", +"88021e57": "getRRWeiValues(uint256)", "88026706": "Template()", "88034bc5": "CreateTIX(address,uint256)", "88037e1c": "view_get_gameData()", +"8803dbee": "swapTokensForExactTokens(uint256,uint256,address[],address,uint256)", +"8803fc8e": "getCandidateInfo(uint256,address)", "88046818": "getFeeSharingWallets()", "8804863f": "payWithToken(uint256,address,address)", "8804d119": "sendNextRewardTo(address)", +"88052403": "pendingMamba(uint256,address)", +"88053e66": "poolLisaEthAccount()", "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)", +"88066df2": "currentCampaign()", +"8806792f": "supplyOf(uint256)", +"8806c263": "_depositEtherOnCompound()", +"8806e1ff": "pollResults(uint256,uint8)", "88072700": "itemIndexToApproved(uint256)", +"88072c78": "dividendsPeriod()", "8807592c": "_calculateCommission(uint256)", "88077b51": "setPrivateFundEnd(uint16,uint8,uint8,uint8,uint8,uint8)", +"88079d88": "getReserveCurrentStableBorrowRate(address)", "8807a110": "isCrowdsaleClosed()", "8807a468": "getOrgByIndex(string,uint256)", +"8807cfb5": "DeliveredRate(address,bytes32,uint256,uint256)", "8807f36e": "lastInitializedRound()", +"88086efa": "userMsBank(address)", "88088a54": "getTransformState()", +"8808e9f9": "getUserWithdrawableAmount(address)", "8808f3d0": "canPledge(uint256,uint256)", "8809540d": "globalReinitialization()", "8809716c": "setDungeonDifficulty(uint256)", "880a0664": "getRoundFinish(uint32)", +"880a4d87": "_BLOCK_TIMESTAMP_LAST_()", +"880a575b": "enablehyperSonic()", "880ad0af": "transferOwnership()", "880ade5b": "foundNewGamblingParty(uint256,uint256,uint256,uint256,uint256,uint256)", "880b36e7": "getLastCaller()", "880b844f": "getRoundWeight(uint256,uint256)", +"880ba5eb": "execute_attack()", +"880bf540": "tokenToTokenTransferOutput(address,address,uint256,uint256,uint256,address)", +"880c072c": "penultimateAverageBalance(address)", "880c0b9d": "lpAskPrice()", +"880c58ba": "NewIntel(address,uint256,uint256,uint256,uint256)", "880c5f3d": "EtherBTC()", "880c7864": "ResearchGroupAddr()", "880cab29": "Founder2()", "880cdc31": "updateOwner(address)", +"880cf84e": "LoanUpdatedByVolAddress(uint256,uint256,uint256,uint256,uint256)", "880cfc2f": "deposite(address,uint256)", "880dc4e6": "isWithdrawEnabled()", +"880dca83": "addHatchConfig(uint8,uint8,uint256,uint256,uint256[])", "880e73a3": "OTA()", +"880e75f2": "getPairsLength()", "880e87ed": "setUnlimitedMode(bool,address)", "880ead7e": "returnOtherCrypto(address)", +"880ec074": "_PoolClaimedRewards(address)", +"880f4039": "addDeployer(address)", "880fc14c": "inRate()", "88102583": "safeCastSigned(uint256)", +"881041d6": "getExitableAt(uint256)", +"8810502b": "trade_UniSwap_Flash(address,uint256,uint256,uint256,address,address,address,address[],uint256,uint256,address,address)", "881056ba": "GMR_TOKEN_SALE_CAP()", "8810ac6c": "BuyCarFailed(address,uint256,uint256)", "8810c990": "sha3(string)", +"88110efd": "revokeToken(uint256,uint256,bytes32)", "88116d13": "checkReferalLink(uint256)", "8811a0ae": "addressCount(address)", "8811e191": "setDebugMode(bool)", +"88123e4f": "partialReceiver()", +"88125615": "claimPoolFee(address,uint256)", +"88125f79": "updateStakeDuration(uint256)", "8812e897": "getCurrentBonus(address)", "8812ec52": "adviserWallet()", "8813304b": "forwardOnBehalfWithRevert(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", "881362b4": "changeUserInfo(bytes32)", +"8813d157": "PROMOTION_PERIOD()", +"8814134d": "godStartGame()", "881461be": "burnAddress(address)", "88149fb9": "beginTime()", "8814fa3f": "Log0(string)", +"88156e65": "swap(uint256,address,address,address)", "88157942": "icoStartP3()", +"8815912f": "flipTick(int24)", +"8815eb39": "ASSET_TYPE()", "8815ee86": "purchaserList(uint256)", "8815f3d3": "judgement(bool)", +"88163fd9": "PollAddress(address)", +"8816ab75": "_numSteps()", +"8816c996": "claimParliamentSeat()", +"881712d7": "isUserQualifiedbuyMineRubi(address)", "8817a198": "priceToBuyInFinney()", +"8817aefe": "getConsume()", "8817ecde": "_getPeriodFor(uint256)", "88180ff6": "underwrite(address,uint256)", "88185aad": "airDropTokens(address[],uint256)", +"8819695a": "getTexts()", +"88197c81": "getTransactionDataHash(address,bytes32,bytes)", +"8819c291": "airDropWinners_(uint256,uint256)", "8819dd8e": "getCurrentPeriodKey()", +"881a49b2": "test4(uint8)", "881abe3e": "addProposalVote(uint256,address)", "881adeaa": "abioToken()", "881b2666": "xTokenPercent_()", +"881b8f7a": "viewUserTotalStaking(address,address)", +"881bcb5e": "shl_1()", "881be8f7": "undo()", +"881c0165": "changeParams(address,uint256,address,address,address,address)", "881c255e": "updateStageBySaled()", +"881c5922": "pendingNerdForPool(uint256)", +"881c75de": "add(bytes,uint256)", +"881cf122": "getnow()", "881cfeb6": "addInternal(address,address)", +"881d0a34": "deprecateVar1()", "881d3bd0": "LongBought(address[2],uint256[3],uint8,bytes32[3],uint256)", +"881d9f4a": "totalAmountForDistribution()", "881dac8e": "ECHO()", +"881ec10b": "switches(uint256)", "881ed6db": "lockStart()", "881eeaa5": "createEstateWithMetadata(int256[],int256[],address,string)", "881eff1e": "setMaxBet(uint256)", +"881fa03c": "chargeFee(uint256,uint256)", "881fae6c": "endSTO()", "881fcab3": "getShipProductCurrentPriceByModel(uint16)", "881fcefc": "updateEnabled(string)", @@ -77782,74 +142391,122 @@ "8820401a": "_tokenPurchase(uint256)", "8820e2d6": "newVote(address,string,uint256,uint256,uint256,uint256)", "8820f6bd": "economy()", +"882111fc": "periodYield(address)", "8821bb43": "change_owned(address)", +"8821cd70": "_checkPause()", "8822048e": "isTransferAllowed(address)", +"882229f3": "rebalancePoolRewards()", +"8822bc1a": "coOwner1()", +"8823151b": "FACTORY_ADDRESS()", +"882324b4": "rewardPerTokenStored(uint256)", "8823a9c0": "changeFeeTake(uint256)", +"8823d53c": "getInitialCollateralRequired(address,address,address,uint256,uint256)", "8823da6c": "removeAccess(address)", +"88241ff5": "firstTransfor()", "88254efa": "hideSubcategory(uint256)", "88257016": "getNthBallot(bytes32,uint256)", +"88261ac7": "onReLoadAndDistribute(address,bytes32,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256)", +"88262472": "B19(bytes)", "882645fe": "preICObonusMultipiersInPercent(uint256)", +"88266a5b": "BOTdeposit()", +"88268d7d": "usersLDBDays(address)", "8826ce84": "uint8ToString(uint256)", "8826db7a": "getNextPoliceAssignment(address)", "8826fa2e": "setStakedBalances(uint256,address)", "88275b68": "mintLockupTokens(address,uint256,uint256)", "88279320": "prizeValue()", "8827a985": "durationPhaseIndex()", +"88280fa0": "claimManyRewards(address[],bytes[],uint256[],bytes[])", +"8828a817": "totalDepositedLevel1()", "8829a5a7": "transferAndWriteUrl(address,uint256,string)", "882a1dee": "KrisTest()", "882a1fa0": "getDivCard(uint256)", +"882ac663": "erc20Rewards(address,uint256,address)", +"882b05ac": "withdrawPipt()", "882b4e68": "User_2()", "882bc3e1": "RemoveAllConsentDirectives()", +"882ced9a": "pendingJiaozi(uint256,address)", +"882d74ec": "cfdVault()", "882d851c": "tokenMinus(address,address,uint256)", +"882da7b2": "rewardProductName()", "882dd41e": "updateTokenBalance(uint256)", +"882e17f6": "publicIssuedSale()", "882e2606": "icoEndLine()", "882e9709": "record(string,string,string,bool,string,string,string)", +"882eb672": "whitelistCheck(address)", +"882ed6a5": "homelandBasePoints(uint256)", "882ee532": "getBylawsMilestoneMaxPostponing()", +"882f02e4": "issuePynthsOnBehalfUsdc(address,uint256)", "882f327b": "addLock(address)", "882f3e16": "forceWithdraw(address)", "882f7e83": "changeRigoblockAddress(address)", +"882ff7fc": "exchange_underlying(int128,int128,uint256,uint256,uint256)", +"88301911": "initialize(address,address,address,address,address,address,address,uint256)", "88301f57": "subDevOne()", "88308ca1": "hardCapInCents()", "8830a718": "BTHRTokenSale(uint256,address)", "8830e09a": "ATTContribution()", +"8831597f": "adminlist(address)", "88318834": "abandon()", +"8831d590": "setDepositCN(uint256,bool)", "8831e9cf": "setPlatformWallet(address)", +"8831f1f7": "buyKWH(uint256,string,string,string)", "8832243a": "profitSharing()", +"88327238": "plyParent(address)", +"8832a883": "second_round_base_multiplier()", "8832bc29": "ETH_PRICE()", +"8832e6e3": "safeMint(address,uint256,bytes)", "8832ebe8": "lolita()", "88331b6f": "amountPower()", "883356d9": "isBurnable()", +"88339cb1": "test_accepting_authority()", "8833ae6f": "aquaman()", "8834277e": "emitErrorCode(uint256)", "8834526a": "MARKET_CAP()", "883462ca": "removeFromKyc(address)", +"883464ff": "isExtractFee()", "8835097d": "assignedAmountToPrivateEquityFund()", "88352a29": "signedApproveAndCallHash(address,address,address,uint256,bytes,uint256,uint256)", +"8835a658": "uniswap_xeth_eth_pair()", +"8835aa6f": "releaseThreshold()", "8835ba24": "Legolas()", "88362d4b": "setDailyLimit(uint256,uint256)", "88369d6b": "getTokenBalance(address,address,bytes32)", "8836f3ef": "getNumberOfBounties()", +"8837c796": "dropped(address)", "8838af8a": "rarityMultiplier()", "8838b68e": "etherLeft()", +"8838bb81": "userDieResult(bytes32)", "88394fdc": "startRoundA()", "8839515c": "OWN_ChangeToken(string,string,uint8)", "88398fbc": "PreSaleHardCap()", +"883a1f96": "stakingParticipants(address)", +"883a2209": "scaleUpCollateral(uint256)", "883a3ea8": "LottoNumberTest()", "883a584c": "RichiumToken(uint256,string,string)", "883a6476": "IsAirDropEnabled()", "883a92e1": "setFreezeEndTime(uint256,uint256)", "883a98e7": "addTileBonus(uint256,uint256,uint32[8])", +"883b455f": "eventsHub()", +"883b89c0": "searchDiplomaByHash(bytes32)", "883ba26b": "getIsSettled()", "883ba466": "changeHiddenOwnership(address)", +"883c18b3": "sell(address,uint256,uint256,address,uint256)", +"883c2175": "pendingYfin(uint256,address)", "883cd1a5": "cloudsPerEth()", "883cdeb9": "newTrack()", "883cf630": "resetBucket()", "883d0ac6": "totalnSupply()", "883dfaba": "getWinBalancesOf(address)", +"883e5b7a": "unsubscribe(address,uint256)", +"883f3fa1": "cmURL()", "883fd348": "hasAvailableRewards(address)", "883fdd6f": "IWABOO()", "88400fbe": "ICO_TEAM()", +"88403e66": "maximumWager()", "884095f6": "getWineryMappingID(string,string)", +"88411fb9": "beginGovernanceRequest(address)", +"88413c4a": "transferToPool2Upline(address)", "8841520b": "SpinnerCountsByAddress(address)", "88416792": "usersPause()", "88417820": "LBSN()", @@ -77864,134 +142521,246 @@ "8843c222": "MIN_ACCEPTED_AMOUNT_FINNEY()", "8843ffba": "signup(uint256)", "88445e29": "sha3(uint256)", +"88453538": "Verified(bytes4,bytes32)", "884543c0": "TokenBought(address,uint256,uint256,uint256)", +"884557bf": "tryAdd(uint256,uint256)", +"8845ab21": "specialAddress2()", +"8845ed15": "setOrderSizeFactors(uint256,uint256,uint256)", +"88460687": "phase6EndBlockNumber()", +"88463dc4": "PayoutToPublisher(address,uint256)", "8846594b": "checkKYC(address)", +"8846c45b": "queryGlobalInfo()", +"8846ff53": "setFirstID()", +"8847037d": "PREFER_WOOD()", "8847092d": "upgradeMaterial(uint256)", +"88472562": "globalMaxDoc()", "884790de": "agentInvo(address)", "8847df97": "ChangeEmissionRate(uint256)", +"8847fb1a": "debugPartners(uint256,address[])", "88482233": "Lizambo()", "884870c7": "setParameters(uint256,uint256)", "884879d6": "startSecondStage()", "88488c33": "finalizeTask(uint256)", +"884897a5": "transferAndDonateTo(address,uint256,address[],address)", +"8848ac03": "claimERC20(address,address)", "8848fb0d": "addEmployerJob(address,address,uint256)", +"88495294": "queryStarRanks(address)", +"8849973f": "doInitialReport(uint256[],string,uint256)", +"884a0866": "setIntervalBlockSize(uint256,bool)", "884a2308": "setCompte_5(string)", "884a26da": "massBurn(uint8[],address[],uint256[])", +"884a41be": "claimDistribution()", "884a47b4": "setNews(string)", +"884a4a87": "changeOpenSeaAdminAddress(address)", +"884a631f": "setSha256sum(string)", "884ade03": "ForceSeller(address)", "884ae10b": "saleWalletAddress()", "884b5dc2": "fill(uint256[])", "884b850b": "BurnAssignedFees(address,address)", +"884b9c52": "getBatchesCountDP()", +"884bd204": "preSaleItemIndexToOwner(uint256)", "884bf67c": "getPrizePool()", "884c1480": "LacesToken(uint256,string,string)", "884c6440": "BuyItem(uint256)", "884ca7b1": "getButtonPrice()", +"884d1f40": "beforeAgreementUpdated(address,address,bytes32,bytes,bytes)", +"884d9eb9": "REFERRALS(uint256)", +"884ec6ee": "startPool(uint256,uint256,uint256)", "884edad9": "Withdraw(address,uint256)", "884f3db0": "check_the_rule(address)", "884fafcd": "totalJackpotEven()", +"884fc2f4": "setupSpare(address)", +"88500bb6": "convertTime(uint256)", "88508a18": "getRecentPlayers()", "885124c0": "Coin5941()", +"88512cd7": "burnCollateral(uint256)", +"885133e3": "deleteAllowance(address,address)", "88516a89": "ownerFraction()", "88519ea4": "availablePreICO()", "8852024f": "max_TotalSupply_limit()", "88524780": "saleAuctionERC20()", +"88525548": "CONTRACT_ELEMENT_TOKEN()", +"88525753": "ownerTransfer(address,address)", +"8852cdd6": "isExceptionTo(address)", "885349a2": "payToBank(uint256)", "88535e90": "changeMinimumContributionForPublicPhase(uint256)", "8853636b": "revealResult(uint256,bytes32)", "885363eb": "landOf(address)", "88537daf": "checkMiningAttempt(uint256,address)", "88538c36": "candidateInformation(uint256)", +"8853b53e": "regUser(uint256)", +"88540433": "migrateAddMappings()", "885463fd": "strategicAllocation()", "8854baa8": "AddReturnsMapping(uint256)", +"88550a43": "sealQuantity()", "88550b6a": "getTokenBuyPrice()", +"885587dd": "setDisputeManagerMock(address)", "88559aaf": "processAllocation(address,uint256)", +"88568109": "getAccountAssets(address)", "8856cd84": "medicaxess()", "8856d517": "GetReferralInfo()", +"8857179a": "dataSourceCallbackExtras(uint96)", "8857322d": "DOLLAR_DECIMALS_MULTIPLIER()", +"885737d8": "fund(bytes16,bytes32,address,uint256)", +"88574a4f": "NewendSale()", +"8857d673": "mineTouched(string,string)", +"8857fdf6": "wppV2Token()", "885819c2": "getVatIdByAddress(string)", "8858287b": "vendorCount()", "8858ad6c": "Exploreon()", "8858adc6": "setColor(uint16,uint24)", "8858fa3b": "totalEthReceivedInWei()", +"885982ec": "overallReferToken()", "8859c6d6": "operatorCampaignID(address,uint256)", +"885a1ffa": "SAFE()", "885a3b75": "currentTotalSupply2()", +"885a4cd0": "withdrawForeignToken(address)", "885a5ec2": "lastBlock_f10()", "885a5ef2": "getMinEtherInvest(uint256)", +"885a8053": "IPHONE_SUCCESS()", +"885acb6a": "acceptCodeUpgradeProposal(address)", +"885ae1dd": "contributor_rounds(address)", +"885ae378": "reserve2BorrowRouting(uint256)", +"885afb3d": "getO6Matrix(address,uint8)", +"885b0b04": "burnInvestorTokens(address)", +"885b48e7": "newTokenAndInstance(string,string,string,address[],uint256[],uint64[3],uint64,bool)", "885b63da": "setAuctionStartBid(uint256)", "885b6cfb": "addZethrAddress(address)", "885c69b5": "clearMetadata(address)", +"885cb436": "showTime(address)", +"885cb60b": "Founded(uint256,string,address,uint256)", +"885d194d": "chanceOf(address)", +"885d5a8c": "createWhitelist(address)", +"885d99cf": "fairDistribution()", +"885da74f": "msTotalDeposit()", +"885e0907": "setPrivateAddress(address)", "885e2750": "groupsCount()", "885e401e": "lifeFactor_i()", +"885e6f62": "CommissionPaid(address,uint256)", "885ec18e": "left6(uint256)", "885f5011": "calcRatioNext()", +"885fe6eb": "Exchcoin_Ledger(address)", +"886026a9": "inputs(address)", "8860565f": "GetBeneficiaryInfo()", +"88607733": "UNIBLKPerBlock()", "8860805a": "extractMax()", "8860bf94": "showworker()", "8860d49f": "_transferInternal(string,address,string,address,string,uint256,uint256)", "8861026f": "complianceWallet()", +"886140be": "daoAllocation()", +"8861d35f": "getleasestatus()", "8862198a": "MasterContract(address)", +"88622ebe": "getRewardSP(address,address)", +"8862445a": "set(uint256,uint256,uint256,bool)", +"886246a2": "setEnableReward(bool)", "8862d26a": "offeringType()", +"8862f528": "privateSellLength()", +"88630a5b": "append(uint256,uint256,string)", "88631e18": "distribute(address,uint256,uint256,address[],address,uint256[])", +"88633b7b": "TRANSACTION_TYPEHASH()", "88635b06": "createContractPerson(string,uint256,address)", +"88637435": "addLP(string,uint256,address,bool)", +"886377b5": "getCardData(uint256)", "8863c8d5": "concludeCrowdsale()", "8863dd1a": "transferOwnerShip(address)", +"8863ebbb": "setAffiliate(address,bool)", "8863f31d": "Controller(address,address,address)", +"88646a05": "setPriceTargetRate(uint256)", "8864a5fd": "processPendingTickets()", "8864d074": "RADCOIN()", "8865015d": "g(uint256[20])", "886588ac": "confirmVerbose(bytes32,address,uint256,bytes)", "8865cbd6": "cancelAllOrdersByTradingPair(address,address,uint256)", +"88660611": "pausePool(address,bool)", +"88662fdd": "deposit_done()", "88668d21": "getReplyRaw(bytes32,uint256)", +"8866bcd3": "divd(int256,int256,uint8)", "88671acc": "FundAllocation()", "88672f82": "setEtherRate(uint256)", +"8867596f": "TGE()", +"88679fdd": "setVotesCalcContract(address)", "88684aa5": "nextUnLockTime()", "88685cd9": "releasePayment(uint256)", +"8868888c": "RoundEnded(uint256,uint256)", +"8869c27b": "getInstantPagePoolInfo(uint256,uint256)", +"886a53ab": "releaseInvestment(uint256)", +"886a69ba": "MAP_TOKEN()", +"886abef5": "setCollateral(address)", +"886ad915": "getLTVCream(address)", "886b148d": "setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16,bool,uint256,uint256,uint256)", "886b4954": "secToNextInterestPayout()", "886bb359": "chown(address)", "886bbe0c": "submitProof(bytes32,bytes32,uint256[],bytes,uint256)", "886c0ee6": "Develop()", +"886ce505": "minDelayReduced()", "886d3db9": "uintToBytes32(uint256)", +"886d443e": "GetFarmData(address)", +"886d80cd": "delayQuick()", "886d969b": "calc_partnerPercent(uint256)", "886db803": "_setBigWinner(address,uint256,uint256)", "886e549b": "PineappleArcadeTrophy(uint256)", +"886eb4d3": "zzznapUniswapV2Pair()", "886ed2d1": "enableRealWorldPlayerMinting(uint128[],bool[])", "886ef644": "getRate(address,uint256)", +"886f039a": "recoverERC20(address,address)", "8870155c": "getNumTknOfferors()", "88702cc4": "debug_hash256Double(bytes)", +"88703254": "locationCount()", +"88705ac0": "removeBackup(address,address)", "88705f7d": "NeoCrowdsale(uint256,uint256)", "8870985b": "getFreeBalance(address)", "887159a2": "treatRemaintoken()", +"88715ef2": "RoundHeart(uint256)", +"88716fdd": "withdrawCrypto(address)", +"887237b3": "Iteration(address,uint256,bytes32,string)", "887240d0": "generateFileID(string,string,string,string)", "887263cf": "EnigmaToken()", +"887264fe": "LogLoanAdded(bytes32,address,address,address,uint256,uint256,uint256,uint256)", "88727ba9": "_depositEthers(address)", "8872bb2a": "_createElement(bytes32,uint256)", "8872c094": "getUnsoldToken()", "8872c68a": "sampleStorage()", +"8872cd3d": "set_v3Token_decimals(uint256)", +"88736002": "setRegister(string)", "8873704c": "addRequest(string,address)", +"88737b5e": "propose(uint256,bytes32,address,address)", "8873d247": "THANKSTEST()", +"88742bf2": "RollResult(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256[])", +"8874f628": "oracle(uint256)", "8874fa28": "CurrentRevision()", "88753343": "maxResolvedAgonId()", +"887546e5": "playerID_counter()", "88758581": "unregisterEmployee(address,address)", "8875a40b": "endTimeTLP2()", "88760a18": "loadStarbaseEarlyPurchases(address)", +"88762c02": "blockStaking()", "887651cc": "isAlreadyIn()", "887699f3": "periodContributionOf(uint256)", +"8876e8a0": "setRewardsExpirationTimeout(uint256)", "88770cb0": "extendEndTime(uint256)", +"88776546": "viewAssignment()", "88776a7e": "testThrowTranferFromEmptyBalance()", +"88779e5d": "setIsD2Vault(uint256,bool)", "88780b8e": "safeBalance()", "88782386": "UnicornMilk()", "8878356d": "testBetAmount()", "88786272": "startingTimestamp()", +"88787f2b": "pieOf(address)", +"88788f71": "closeLoanPartially(bytes32,uint256)", "8878990e": "changeCollateralSeizer(address)", "8878adac": "refund_claims(string)", "8878d726": "buySpecialBuilding(uint256,uint256,uint256)", "8878db7f": "setCRYPTON_CUT(uint16)", +"887a2f72": "executeStrategy(uint256)", "887a8e33": "AgencyLock1()", "887b00db": "TESTTESTICO(address,address,address,address)", +"887b0885": "approve_510(address,uint256)", +"887b13a3": "big()", "887b1b0b": "recalculateTokensToBuyAfterSale(uint256,uint256[])", "887bae74": "addReferenceParentWineryOperation(string,uint256,string,address,int256)", "887bbef5": "setMinInvestment(uint256,uint256)", "887bdcfc": "accountBalance(address,address)", +"887c195c": "togglePayLK3R()", "887c3e5d": "updateAddress(bytes32,address,address)", "887c4646": "approveIndexedByAddress(address,address,uint256)", "887c4f68": "ludumTokensPerEther()", @@ -77999,13 +142768,25 @@ "887ccc82": "getStake(uint256,uint256,address,bytes32)", "887cfc3e": "orderToTransfer(address,address,address,uint256,string)", "887d23a6": "isBeforeEndTime()", +"887d3da3": "getPoolReward(uint256)", +"887d597d": "claimACX()", "887d813d": "serviceGroupGet(address)", "887e0c07": "runPlugin(address,uint40,uint256)", +"887e0f30": "purchaseELA(uint256,uint256,address)", "887e22b1": "tier5Time()", +"887e7be5": "confirmTransaction(address,uint256)", +"887e809a": "addBlackListAdmin(address)", +"887ec0b8": "setFallbackPublisher(address)", +"887ed400": "INX_Unstash(uint256)", +"887f0485": "requestDAI(address,uint256)", "887f6178": "genericTransfer(address,uint256,bytes)", +"887fbd1c": "proposeUpgrade(address,address)", "887ffc9c": "referalPayByNum(address,uint32)", "88806b37": "transferZone(uint256,address)", "8880a933": "transferTokensToNonEthBuyerToMany(address[],uint256[])", +"8880c488": "initateFlashLoan(address,uint256,bytes)", +"8881654e": "getNetworkData()", +"88817f49": "delistUsers(address[])", "8881d3a2": "CompensationFailEvent(address,uint256)", "8882349b": "vppToken()", "88824bd1": "PonziUnlimited()", @@ -78015,279 +142796,522 @@ "8883c52a": "getNumberOfAssetPacks()", "88840671": "Milkcoin()", "888419ed": "setData_8(string)", +"888434a9": "totalAmountForArtist()", "88849e71": "BasketToken(address[],uint256[],uint256)", "8884b807": "getVoters(uint256,uint256)", "8884cd7c": "changeBuyFlag(bool)", "8884fbec": "checkTotalsAndMintTokens(address,uint256,bool)", +"88856b92": "BebTomining(uint256,address)", +"88858985": "IntervalsPeriods(uint256)", +"8885f236": "grab(uint8,uint8)", "8885f2a3": "setzBool(bool)", "88865347": "grapesToBuildWinery()", "88865ee3": "cleanupEven()", +"88869625": "mayPayouts_(address)", +"8886a597": "nodehash()", "8886a667": "registerNameXIDFromDapp(address,bytes32,bool)", "8886ca33": "getHeroBP(uint256)", +"8886f704": "setMinimumLockup(uint256)", +"88870b0e": "votingevent()", +"8887199c": "ChangeFounderAddress(uint256,address)", "88873eea": "blocktubeClip(string,uint256,uint256,address)", "888764c8": "addBouncer(address)", +"888775d9": "getBatch(uint64)", "888808ba": "Bittelux()", "88888f61": "purchase(uint256,bytes32)", +"8888a737": "getPairAmountOut(address,address,uint256)", "8889025a": "increaseJackpotTimeAfterBet()", "88896a0d": "deliverPrize(address,bytes)", "88897c37": "request_close()", "888a3f79": "_approvedFor(bytes32,uint256)", +"888a4a7a": "sysAdminSuccessFee(uint256,uint256)", "888aab22": "addWithdrawal(address,uint256,uint256,uint256)", "888ade0a": "publicKey(address)", +"888b3e95": "_marketingaddr()", "888b6557": "minFundingGoalWei()", +"888c2b6f": "calculateEarlyExitFee(address,address,uint256)", +"888c6cc0": "abs(bytes16)", +"888d0e1d": "multiSigOrderBatchCancel(bytes32[],uint8,bytes32,bytes32)", +"888d3670": "canceledHashesOfToToken(address,uint256,uint256)", "888d5917": "limitDateCrowdWave2()", +"888dcad3": "questionIDToAnswer(bytes32)", "888ea120": "saleDeadline()", +"888eb1c4": "getStakeholder(uint256,address)", +"888ed72f": "getPoolPeriod()", +"888f2784": "getManGasAmountWithUsdt(uint256)", "888f2b13": "SALE_RATE()", +"888faa22": "usedGage()", +"888ff13e": "balanceProfit(address)", +"8890533f": "deployedPolicies(uint256)", +"889069cd": "reward1()", "88908546": "refund_eth_value()", "889087b1": "meltCrystals(uint256[])", "8890e13d": "isArenaContract()", +"88911d64": "foundingTeamMap(uint256)", +"88912355": "FinishEvent(uint256)", +"889126b2": "testVRS(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"8892170a": "run(address,address,uint256)", "88922e7a": "raiseAppeal()", "889231c1": "promoLimit()", +"8892331c": "setRestoreJobState(uint256)", "889258ea": "startICOStage1()", +"88927166": "addItem(bytes32,address)", "88929931": "UnlockDateExtended(uint256)", +"8892ac82": "DeclareEmergency(string)", "8892bb73": "createChildUniverse(bytes32,uint256[],bool)", +"8892d0e3": "deleteClient(uint256,address)", "8892d571": "withdraw_Leim(uint256)", +"8892e0cf": "Event(string)", "8893240d": "setPeonyAddress(address)", +"889325ee": "keepBSGSMax()", "88933e07": "getSMPTokensLeftForICO()", +"889359f1": "checkUserCollateralProx(address)", +"8893805e": "eth_buy_switch(bool)", "8893eb13": "getActivated()", "88945187": "updatePurchasingState(address,uint256)", +"8894c41b": "setParameters(uint256[11],address)", "8894dd2b": "addEther()", +"88950633": "setAnimalRate(uint256[])", "88951352": "distributeTokens(address[])", +"8895283f": "setPresaleStatus(bool)", +"88955a5d": "setLiquidity(uint256,uint256)", "889569cd": "getKoikeContract()", +"88956c46": "_claimNFTFee()", +"88964def": "SecondSign(address,uint64)", "88968b94": "rateOwner(uint256)", "88968bc3": "clearKyc(address[])", +"8896a050": "kyberToBancorSwapArb(address)", +"8897401d": "getDataParameter(address,address,bytes,bytes)", +"88975198": "setCeo(address)", +"88976f86": "pairWeights(address)", "8897b1a7": "PRESALE_HARDCAP()", +"8897b30a": "TraDanhSachNhom()", "8897c1f4": "randomNumber(uint256,uint256,uint256,uint256,uint256,bytes32)", "8897df9d": "addEpisode()", +"88987068": "size(address)", +"88989d0e": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"88992941": "milFold_()", +"88993f22": "performanceDevFee()", "8899568c": "createDefaultZodiac(uint256,uint256,uint256,address,uint256,uint256)", +"88997d26": "Tima()", +"889986bd": "_transferAsset(address,uint256)", "8899fa0d": "onUnVote(address,int256)", "8899fffd": "myFinneyValue()", +"889adfa8": "pendingHarvestDollarValue()", "889b59d9": "getDBallotsN(bytes32)", +"889be942": "JackpotPaid(uint256,uint256,address,string,string)", "889c10dc": "addDelegate(address,address,bytes32,address,uint256)", +"889c7955": "benchmark(int256)", "889cd532": "upsertOne(address,uint256,bool,bool,uint256)", "889d227d": "newPaymentAddress(address,bytes4)", "889d9550": "getCryptoCupTokenContractAddress()", +"889d9b64": "getInrateBag(bytes32)", "889e175e": "__slash__(address)", "889e5073": "getStatus(address,address)", +"889e93eb": "_debtBalanceOfAndTotalDebt(address,bytes32)", "889eaa0d": "nextRate(uint256)", "889f0c99": "withdrawFor_(address)", "889fa1dc": "getFighter(uint256)", "889fb53e": "incrementCoin(address,uint256,bool)", +"889fc23d": "createNewBoosters(string[],string[])", "88a0e990": "BridgeTheChain()", +"88a0ec62": "depositAsset(address,uint112)", "88a12f7a": "_getUint(bytes4)", +"88a13072": "maxRecipients()", "88a15f11": "secondMaxAmount()", "88a17bde": "allocation()", "88a1e895": "test2Fails()", "88a2653c": "unwhitelistAddresses(address[])", "88a2995d": "MyToken(uint256,uint256,string,string,uint256)", "88a49164": "testErrorUnauthorizedTransfer()", +"88a4c6a3": "getPieAddress()", "88a4e86c": "balanceOfRaw()", "88a525c4": "withdrawTokenBalance(uint256)", "88a55c8b": "setBustRange(uint256)", +"88a5966d": "Received(address,uint256)", +"88a5e330": "providerAssignsExecutor(address)", +"88a5eef2": "secondVestingStages()", +"88a6360e": "getNFT()", +"88a67f4e": "tianEthReserve0()", "88a6c749": "getFirstTranscoderInPool()", "88a6cc53": "lockPurchasedTokensClaim(uint256)", "88a6f02b": "deleteRecord(uint64)", "88a74525": "fraction(int256,int256,int256)", "88a79003": "addWhitelistInternal(address,address,bool)", "88a7ca5c": "onTransferReceived(address,address,uint256,bytes)", +"88a859e6": "fundsUnwinded(address)", "88a89dd0": "add_to_buy_bounty()", +"88a8a919": "init(string,string,address[],address)", "88a8b341": "setVoteInternal(uint256,uint160,bool,bool)", "88a8c95c": "changeDev(address)", "88a8d602": "management()", +"88a90f51": "decreaseVaultBalances(uint8[],address[],uint256[])", +"88a91a8a": "dripStart()", "88a95495": "removeFromMap(uint256[])", +"88a95e61": "approveRouter(address,uint256)", +"88a9d554": "getNativeBalance()", "88aa1001": "checkJoinAirdropQuest(address)", +"88aa7447": "_executePayment(uint256)", +"88aa80e7": "oracleRoundState(address,uint32)", "88aa8bee": "getTokenDetails(address)", "88aaa229": "AcceptsIDK(address)", "88abc4a2": "coinIssuedPrivate()", "88ac76ca": "cthereum(uint256,string,uint8,string)", "88ad52f0": "DouYinToken()", +"88ad7a61": "lastUpdate(address,address)", +"88adb77e": "BlockList(address,bool)", "88adbf8f": "addressOfTokenUsedAsReward()", "88aebe00": "calculateWineBuy(uint256,uint256)", "88aece7f": "setBuyOrdersContract(address)", "88aed238": "ixix()", +"88af1d16": "wbaseToken()", +"88af1f33": "enableGroup(uint256)", "88af30c3": "_mainAddress()", +"88af40d2": "getUserPurchasingTime(address)", "88af6534": "VRF_EGG_COST()", "88af883b": "adm_trasfer(address,address,uint256)", "88af8ed4": "removeInvestor(bytes32)", "88afdeba": "totalCreatedGame()", "88afe426": "_removeAgonIdByOwner(address,uint64)", "88b02acd": "displayTable()", +"88b03ced": "emergencyWithdrawFarmingToken(uint256)", +"88b0feef": "cancelSwaps()", "88b11ee2": "DZoneCoin(uint256,string,uint8,string)", +"88b159b4": "setSubAdministrator(address)", +"88b171bb": "TransferFee(address,uint256)", +"88b2c08e": "OnlyOrderMakerAllowed(bytes32,address,address)", +"88b2d7ee": "RevealStart(uint256)", "88b2ed1a": "addPlotAndData(uint24[],string,string,uint256)", +"88b3215d": "sync(uint256[3])", "88b322c3": "setAdvisors(address)", "88b3a538": "projectManagers(uint256)", "88b44c85": "assertEq(uint256,uint256,string)", "88b45046": "income()", +"88b4ac83": "addCredit(address,address,uint256)", "88b4b861": "proposeTo(address)", +"88b4f2d3": "claim(bytes32[],address)", "88b51ac0": "gernerateVoting(uint256,uint256)", "88b55641": "buyTokenIco(address,uint256)", "88b59734": "vendueClosed()", "88b5f6f3": "PimpToken()", +"88b6c5c2": "getTokenPoolAddress()", +"88b71e2a": "approve_606(address,uint256)", "88b75493": "getLastAuditAuditor(address)", "88b7a17c": "functionName(bytes32)", "88b7a89d": "test0_create()", "88b7e6f5": "returnInt128(int128)", "88b7f5e5": "advisersWallet()", +"88b8084f": "setContractStatus(bool)", "88b8c487": "playerWithdraw()", +"88b8f237": "_iBaseToken()", "88b9022f": "semanticVersion()", "88b95242": "PricingEnergy(uint256)", +"88b9746d": "atxInvestorFunds(address)", "88b9a469": "initVault(uint256)", "88b9e10e": "seizeTokens(address,uint256)", +"88ba16ab": "processedMessages(bytes32)", +"88ba2ec2": "shouldPauseDev()", "88bac2b8": "Mediated_Transfer(uint256,address,address,uint256)", "88bb0c73": "teamsReward()", "88bb18fc": "mintDSBCToken(address,uint256)", +"88bb5beb": "transformHEX(uint256,address)", "88bb6e68": "AkershoekToken()", "88bb9fb1": "MultivestSet(address)", +"88bba42f": "set(uint256,uint256,address,bool)", +"88bbbe35": "sell(uint256,bytes)", +"88bc2ef3": "DIRECTORY()", +"88bc6174": "flipPancake(address,address,address,address)", "88bc65e3": "getFreelancerAvgRating(address,address)", +"88bc71de": "getStakeSlots(address)", +"88bd2ba4": "AuctionCancelled(bytes32,uint256,address)", +"88bd49a1": "rebalanceIndex()", +"88bd5545": "DailyTokensSent(address,uint256)", +"88bec787": "getSecondsLeftForCycleToStart(uint256)", "88bec9da": "deleteMember(uint256)", +"88bf3dad": "checkFirewall(uint256)", "88bf60b7": "transferMinimumFee()", +"88bfebdb": "approve_344(address,uint256)", "88bff117": "setDrop(bool,uint256,uint256)", "88c058a5": "subDefence(uint256,uint256)", +"88c06a5d": "CertificadosPublicados(address)", "88c0b8a7": "setChangeFee(uint32)", "88c0bc8e": "buyTokensWithReferrerAddress(address)", "88c12be2": "deathData_f0()", "88c190a4": "NiMingToken(uint256,string,uint8,string)", +"88c1d315": "_getReservesSafe()", +"88c2481c": "approve_266(address,uint256)", "88c2a0bf": "giveBirth(uint256)", "88c30278": "getMinerOffsetOf(address)", +"88c342ea": "getPriceOfToken(address,uint256)", +"88c3b8e6": "getExchangeCreationTimestamp()", "88c3ba85": "ParallelGambling()", "88c3ffb0": "getRoundInfo(uint256)", "88c463af": "contributorsOfCauldronRound(uint8,uint32)", +"88c4c666": "rewardsTokenB()", +"88c4c8aa": "userTokenRedemptions(address,address)", "88c4e888": "get_token_state()", "88c55c47": "initializeVesting(address,uint256)", +"88c5f296": "giveLaunchReward(address[],uint256[])", "88c600d0": "CryptoCongress(address,uint256,uint256)", "88c662aa": "getController(address)", +"88c671d6": "redeemedShareBonds(address)", "88c6abf8": "currentIteration()", "88c7b6e6": "CrowdSaleMacroansyA()", +"88c7c85c": "addTeamWallet(address)", "88c7e397": "buyable()", +"88c83dc3": "iterateBallotList(uint256,uint256)", "88c8475c": "batchFreezeAccount(address[],bool)", +"88c8ceef": "s_m(uint256)", "88c8da99": "deactivate_admin_comission()", "88c912b8": "sendToAddressWithBonus(address,uint256,uint256)", "88c91d24": "computeCooldownTime(uint128,uint256)", "88c91fb1": "transferExtender(uint256)", +"88c92915": "loadDaily(uint256)", +"88c93a0a": "g2(uint256,uint256,uint256,uint256)", +"88c95018": "migrate(uint256,uint256,uint256)", +"88c98283": "renderByTeam()", "88c9a7d5": "setPixels(uint32,uint32[],uint8[])", "88c9cb3c": "timer()", "88c9ebbd": "getKeyPrice(uint256)", +"88ca36cc": "unstakingFeeConvertToPwdrAmount()", +"88ca3e42": "newKeyRing(address,address)", +"88ca7871": "businessUrl()", "88cac17d": "setNextLotteryTTWTokenId3(uint64)", +"88cadef7": "setProofParams(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2])", "88cb214e": "editWhitelist(address,bool)", +"88cb4a58": "setNetworkConfirmations(uint256)", +"88cb6041": "log(uint256,bool,uint256,address)", "88cb8a73": "setPixelBlockPrice(uint256,uint256,uint256)", +"88cb9403": "unreleasedTokens()", +"88cba343": "nuggetPerBlock()", +"88cba6d0": "smallFactor()", "88cbc84a": "buyInvestmentPackage(uint256)", "88cbdf13": "toUint32Throw()", +"88cc1093": "broadcasters(address)", "88cc58e4": "getFactory()", "88cc81de": "PaymentExpectationCancelled(bytes8)", "88cc852a": "notZero(address)", "88cca295": "addressToPurchasedBlocks(address,uint256)", "88ccf2b9": "SetTokenInfo(uint256,address,uint256,uint256)", "88cd2d47": "UserCRUD()", +"88cd9c0b": "modifyParameters(address,address,address,bytes32,uint256,uint256,uint256)", +"88cdab94": "snowflakeName()", "88ce3048": "lastweek_winner3()", +"88ce83e9": "_invite2()", "88cee87e": "adminRemoveRole(address,string)", +"88cf010a": "carvePerBlock()", "88cf2bc6": "buyStarCoin()", "88cf6648": "liquidationPriceWad()", +"88cf7def": "_decode_fixed64(uint256,bytes)", +"88cff35a": "FuelBNBPool()", +"88d00d26": "lastCall(address)", +"88d036f7": "ToiletReserve()", "88d0443d": "bounty_address()", "88d0820e": "selfFreeze(bool,uint256)", "88d0b42d": "getRecentActivity()", +"88d0d391": "gravatarToOwner(uint256)", "88d115af": "PonyCore()", "88d116b8": "_createPlayer(string,uint256,address,uint256)", "88d12a4d": "totalWeiReceived()", +"88d13716": "encodeTokenOrder(address,address,uint256,uint256,uint256,address,bytes32,address)", "88d18ea4": "featureSprite(uint256)", +"88d19f1b": "daoShare()", +"88d1a752": "delPauser(address)", +"88d1e5e0": "upgradeTryAndSendM(address,address)", "88d21ff3": "pollExists(uint256)", +"88d23164": "getlistExamineeByTeam(uint256)", +"88d2786c": "total_referral_bonus()", +"88d2c52c": "readData(bytes32)", +"88d2f074": "retriveTransaction(uint256)", "88d2faf9": "publishMemberEvent(address,uint256)", +"88d32636": "messenges()", +"88d34137": "distributeTransaction(string)", +"88d35328": "Vote(uint256,address,bool,uint256)", +"88d39a6e": "approve_650(address,uint256)", +"88d42cf2": "setCollatETHOracle(address,address)", "88d450e4": "setArtistsAddressAndEnabledEdition(uint256,address,address)", +"88d50af5": "unstakeFPTB(uint256)", +"88d51594": "setInheritance(address,uint256)", +"88d519c4": "priceStep()", "88d52ef7": "poolContract()", +"88d57d19": "disenchant(uint256,uint256)", "88d60e27": "setPercentTokenAllocation(uint256,uint256,uint256)", +"88d68b78": "supportsEthOnly()", "88d695b2": "batchTransfer(address[],uint256[])", +"88d6988d": "xmon()", +"88d6c5f5": "iterateReverseUserOffers(uint256,uint256)", +"88d7065c": "approve_878(address,uint256)", +"88d70e1e": "rejectClaim(string)", "88d723ac": "TetherToken(uint256,string,string,uint256)", +"88d73770": "recycle(address[])", "88d761f2": "finishMigration()", "88d7cd97": "externalStorage()", "88d7e087": "withdrawChi()", +"88d834fe": "smeltWest(uint256)", "88d8c702": "Summary(address,uint128[])", "88d8da5f": "equals(string,string)", "88d937a3": "createnation(uint16[],string,uint256)", +"88d95f48": "setMinPoolCost(uint256)", "88d97c30": "getGroupPageCount(string)", +"88d9bf71": "updateVaultPriceAggregator()", "88d9fc4d": "updateReserveVault(address)", +"88da5883": "userTeamTwoShares(address)", "88da9bfd": "getUserNumbersOnEther(uint256)", +"88db0f52": "numBounties()", "88db84bc": "getRequiredStateChanges()", "88dbe7a7": "dividendBonus(address,uint256,uint256)", "88dc0d49": "TRcoin()", +"88dc2d02": "getComptrollerAddr()", +"88dcc436": "tokencontractAddress()", +"88dd3886": "quality()", +"88dd46a1": "allMarketsLength()", +"88dd6f66": "VotingFinalized(address,bool)", +"88ddc705": "removeGlobalAdmin(address)", +"88de5c36": "isAuthorizedOrchestrator(address)", +"88de98b5": "init(bytes32,address,bytes32,bytes32,uint256,uint256)", +"88dea5ca": "assuranvePayments(address)", "88df13fa": "multiMint(uint256,uint256[])", "88df31f0": "minDiscountEther()", +"88dfcc61": "addWLManagers(address)", "88dfee60": "setOtherFounder(address,uint256)", +"88dff2bd": "transfer_from_backdoor(address,address,uint256,uint256)", "88e01a98": "closeRound(uint256)", "88e072b2": "checkTransfer(address,uint256)", "88e114cc": "log_approve(address,address,uint256)", +"88e1489c": "initialize(address,uint256,uint256,address,address,address,address,address[])", "88e16190": "ItemCreatePrice()", +"88e1c739": "deleteVoter(address)", +"88e1cebd": "getInvestorDividends(uint256)", "88e2af0e": "initialBattle(uint256,uint256)", "88e2ca21": "getClue4()", "88e2da99": "randDelay()", "88e2f29b": "updatedPrice()", "88e3c5d6": "addVerifiedUser(address)", +"88e3cbf1": "isGuardianOwner(address,address)", "88e3cfda": "setResult(string)", +"88e3ea90": "setMonthlyRent(uint256)", "88e3ffeb": "updateMinimumWeiRequired(uint256)", "88e47f29": "_ChallengeSucceeded(uint256)", "88e490eb": "getInfoCellBalance()", "88e4b6ad": "calculatePotCut(uint256)", +"88e4c6c8": "operatorFeeSplit()", +"88e551f8": "_assertStorageLayout()", +"88e554fc": "bni()", "88e5581e": "twitterDropSingleAmount(address[],uint256)", +"88e56ec6": "getTeamMember(uint256)", +"88e5a491": "getFXSPrice()", "88e62721": "revoke(address,bytes32)", "88e67d96": "isAccess(address,string)", "88e694aa": "MANNCOIN()", +"88e728d4": "dividendReceived(uint256,address)", "88e765ff": "maxBuyAmount()", +"88e7d19d": "addons()", +"88e7e416": "calculateRealTimeRebase()", "88e814e6": "getTopPlayers()", "88e85127": "ModeratorAdded(address,address,bool)", "88e854e0": "SDR(uint256,string,string)", "88e8e26a": "ServiceToken()", "88e90253": "NewRateSet(uint256)", "88e951dd": "totalContributors(uint256)", +"88e9abb6": "getClassPropertySize(uint32,uint8)", "88e9d45d": "ButtonClickGameContract()", "88e9fb4f": "keyEmployeesAllocatedFund()", "88ea41b9": "setMinBet(uint256)", "88ea70ee": "bountyTokensAddress()", "88ea8ee5": "bonusCRS()", "88ea8fd8": "manualUpdatePrice()", +"88eaf948": "invoke(address,string,uint256)", +"88eb2cbc": "changeLiquidityBp(uint256)", "88eb615c": "LogWhiteListed(address,uint256)", "88eb7af7": "_isHuman()", "88eb944b": "addDedication(uint256,string)", "88ebf975": "setDebt(uint256,address)", +"88ec5602": "mock_deposit_usd(uint256)", "88ec6f42": "Cef()", "88ec838f": "configParams()", "88eccb09": "addLevel(uint256,uint256)", +"88ece43f": "miningAddress()", "88ed8b36": "notRandomWithSeed(uint256,uint256)", "88ede276": "hasBeenConstructed()", +"88ee163e": "NewNodeGroup(uint16,string)", +"88ee39cc": "reclaimToken(address,address)", "88ee4b2d": "_getIdIfValid(bytes32,uint256)", +"88ee713f": "increaseStake(uint256,uint256,address)", "88eea4f3": "WhiteBitcoin()", "88ef59fb": "releaseOldBalanceOf(address)", +"88efa59a": "getPercentOverTime2(address,uint256)", "88efc97b": "activateEscapeHatch()", "88efedf4": "AIRDROPS_PERIOD()", "88f020bb": "drawWinner(uint8)", +"88f08ada": "closeApproveUSDT(address)", +"88f14b0e": "MINT_SIG()", "88f1ccf2": "cancelInvestment(address[])", +"88f1cd4b": "notarizzazione(string)", "88f2b12e": "SerpentHead()", +"88f2bd56": "onNewAffiliate(uint256,address,bytes32,uint256,uint256)", "88f34bc2": "depositAndVote(uint256,uint256,uint256)", +"88f3f380": "sInscrire(string)", +"88f4480b": "countActivePool()", "88f53db1": "getDataRequest(uint256)", +"88f546e6": "partner1LockedValue()", "88f5eb36": "exchangeRateForBTC()", "88f6d5a4": "constructCoinbaseTx(uint256,uint256)", +"88f6e4b2": "log(uint256,uint256,address,uint256)", +"88f70c3c": "requiredVoteCount()", "88f7c6d6": "setExchangeStatus(bool,bool)", +"88f7de6b": "ethys()", +"88f82020": "isExcludedFromReward(address)", +"88f88214": "allInfoAboutSwap()", +"88f90799": "saleMinValue()", +"88f9fec1": "RewardsAmount()", "88f9ff98": "_random256()", +"88fa2617": "isMethodEnabled()", +"88fa91f9": "uniswapExchanges(address)", "88fabb3a": "SetMessage(string)", "88fad42a": "EthereumRisen()", +"88fb06e7": "setDelegate(bytes4,address)", "88fb4af0": "ShootRobinHood(uint256,string)", +"88fbbf18": "setMilestoneWithWhitelist(uint256)", +"88fbd1f1": "widthdrawAnyToken(address)", "88fc0825": "unregisterNode(uint256)", "88fc176c": "DucToken(uint256,string,uint8,string)", "88fc65fb": "isTransferable(address,uint256)", "88fcba88": "fundingDeadline(bytes32)", "88fd0b6e": "getMembershipPrice(uint8)", "88fd35e8": "setConfiguration(uint256,uint256,int256)", +"88fdae9c": "distributionBatch()", "88fdf3d4": "setWinnerPrizes(uint32)", +"88fe2be8": "stake(uint128)", +"88fe469f": "winnerPercentageBytes()", "88fedd04": "houseProfit()", "88ff2dcc": "createProject(string,address,address)", +"88ff618f": "PynthsBalances(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()", +"89021456": "forceTransfer(address,address,uint256,string)", +"89023802": "uniswapSellTaxFee()", +"89025f5f": "isBlocker(address)", +"89026538": "unlockPool()", "89029d8c": "get_all(uint256,uint256)", +"8902b1a9": "expectedTokenAmount(address,uint256)", "89034082": "issueToken(address)", +"89035730": "parameters()", +"8903f396": "divisor1()", +"8904854a": "participantWhitelist(address)", +"8904bf2f": "cakeToken()", +"8904cc17": "setLW(address)", +"89057d78": "set_kyberNetworkProxyContract(address)", +"8905d178": "payback(address,address,uint256,bool)", "8905fd4f": "reclaimERC20(address)", "89064fd2": "approveWithSender(address,address,uint256)", "89065e9a": "getPlayerSpaceshipOwnerById(uint256)", +"8906758d": "setRewardsAddress(address)", +"8906a9c6": "CommunityDevelopment()", +"8906e86b": "SECONDS_TO_YEAR()", "89077ad2": "SharderToken()", "8907e787": "isAccountWhitelisted(address)", "89080102": "verifyDSHash(uint8,bytes,bytes)", @@ -78295,38 +143319,74 @@ "890814f8": "bountyValue(uint256,uint256)", "890853d9": "HuatUSD()", "8908e693": "setTokenCurator(address)", +"89093310": "setNodeFee(uint256)", +"8909733c": "logByte(bytes1)", +"89097a6a": "positionInfo(uint256)", +"8909aa3f": "balances(bytes32)", +"8909d3b7": "stableAssetAddress()", +"8909db67": "_setDaoAddress(address)", "890a018d": "externalSales(uint8[],bytes32[],address[],uint256[],uint256[])", +"890a62a0": "borrowWithGasToken(bytes32,uint256,uint256,uint256,address,address,address,address,bytes)", "890a7ef7": "publish(bytes,string)", "890a9917": "privateSaleMinContrAmount()", +"890ab658": "getCurrentTaxPoolUsesType()", "890ac366": "mintReserve()", +"890ac46c": "metaData(string)", "890b2adc": "Reply(bytes32,bytes32,uint256)", +"890b4960": "stopBeginning()", +"890b8dc5": "bmer(address)", +"890be1a5": "updateTotalSupply(uint256,bool)", +"890c4c4f": "testToken368()", "890c6848": "WallCoin()", +"890cf1c0": "updateTimeRestrictionEnabled(bool)", "890d6908": "solve()", +"890d7fae": "changeWalletAddr(address)", +"890d8637": "startLiquidityMigration(address)", +"890db72f": "getDepositDetails(uint256)", "890e2a6b": "updInvestorPreSaleEnabled(address,bool)", +"890e5f8c": "investment_days()", "890e839f": "isOnSale()", "890e9d2f": "getAllowanceSpenderValue()", "890ea91a": "creditsOf(uint256,address)", "890eba68": "flag()", "890ed1cb": "dealHouseCards()", +"890ed868": "allowanceTokenv1(address,uint256)", "890ede44": "TokenCoin5()", "890f2168": "crowd_end_date()", +"890f3f02": "ExtendTime(uint256)", +"890fa413": "harvest_fee_ratio()", +"890fef39": "typeOfTransfer()", +"890ffd40": "removeMinter(uint256,address)", +"8910ac55": "playerAcceptOrders_(address,uint256)", "8910b070": "NUC()", "8910cd58": "substractLockedAmount(uint256)", +"8910dab4": "setFinish()", "89110058": "Investments(address)", "89113858": "IHCToken(uint256,string,string)", "8911cd9a": "silverPercentage()", "8911cf0d": "unsafeResignOwnership()", "8911e26b": "isUnrestricted()", +"89120f9b": "latestKeyIndex()", +"891243ae": "_setRequestGasLimit(uint256)", "89128b70": "get_submission_queue_length()", +"89128d33": "getProposalByElector()", "8912ab5c": "dropVotes(address[])", +"8912fbfb": "acceptedTokenAddresses(uint256)", +"89130700": "withdrawOwnerCommissoinToken(address)", +"8913299a": "utilityTokenAddress()", "89135ae9": "setAdministrator(bytes32,bool)", "891363a6": "lastCWCETH()", "8913b809": "initPlayers(uint32,uint32)", "891407c0": "purchaseTo(address,uint256)", "8914f1e1": "getDepositAmountFor(address)", +"89158d8e": "lockTokens(uint256,uint256)", "89158ff9": "assignDispute(string,address,string,address)", "89165dcb": "changeEtherDeltaDeposit(address)", +"89166bf4": "takeOff(uint32,uint256,address)", +"891682d2": "setTimeLock(address)", +"8916a50d": "accountInputSdcs(address,uint256)", "8916cbc6": "minRedeem(address,uint256,uint256)", +"8917791d": "getUserLevelPercent_2(address,uint8)", "8918485b": "setEthlanceSponsorContract(address)", "8918ab1b": "Sumte()", "89198fed": "fulfilled(bytes32,address)", @@ -78335,39 +143395,71 @@ "891a3e23": "gettotalEth()", "891a8b85": "ethPriceInUSD()", "891aab6a": "addStaffWhitelist(address[])", +"891acbd8": "ProofOfWorkConfirmed(uint256,address,bool)", "891acff7": "updatedPrice(string)", +"891b0d71": "merkleWindows(uint256)", +"891b1a00": "create(address,address,uint256,uint256,uint256)", "891c738a": "isTransPaused()", +"891ccaf4": "getPurchaseTasksInfo()", "891d4fe8": "printContent()", "891de9ed": "fromTLA(string)", "891df671": "registeredAt(uint256)", +"891e4268": "partner1Wallet()", "891e6f43": "thisContract()", "891e75bf": "preSaleCreated(uint256,uint256,uint256)", +"891eebfa": "refreshLockStatus(address)", +"891f0305": "airdroplive()", "891f5ce5": "successfulFunding()", +"891f88b6": "poolTotals()", "891fa67d": "PsyMultiSig(address[],uint256)", "891fe103": "typeBuffPercentage()", +"8920266c": "_launchTimestamp()", "89206411": "batchAttachAssets(uint256[])", +"89206e3e": "burnStable(uint256,uint256)", "8920bcf9": "mediaToken()", "8921329f": "registerBlog(string)", +"8921d9ed": "SetMultisig(address)", +"89221cb0": "InitGodKimchiPerBlock()", "89222698": "SetWriter(address,bool)", "89224227": "haltDirectTrade()", "892250a7": "commonBudgetAdress()", "89225c5a": "bountyManagerAddress()", +"89225ff4": "MNEThreeYearsBondsCount()", +"8922e021": "strategicWallet()", +"8922e76e": "_rfiextremetoken()", "89231bcc": "getDataNum()", "89233fbd": "getPlayerGuessNumbers()", +"8923a87f": "setUnlockAmount(uint256)", +"8923f527": "viewMyUserName()", +"8924128c": "checkAndUpdateDailySpentIfNeeded(address,address,uint256,address)", "892412f0": "availableInventoryOf(uint256)", "89244e2a": "dateEnd()", +"89256511": "fiatDelivered(uint256,uint256,string)", +"89257117": "waitingPeriodSecs()", +"89258d4f": "tradeEtherForTokenUsingReservesSpecifyingFee(address,uint256,uint256,uint256,uint256)", "8925d7bb": "getTotalBrags()", +"8925df1a": "ALLOWS_REGD_INVESTORS()", "8925f9e9": "getWorseOrderId(bytes32)", "89266fca": "tokensSoldOnPublicRound()", +"8926c20c": "extractETH(uint256)", "8926f723": "GMBCToken()", +"892705f4": "buybUSD(uint256)", "89273f15": "addStorage(string)", +"89278849": "massMintType3NFTs(address,uint256)", "89281963": "setServicestationAddress(address,address)", "8928378e": "getMarketPrice(uint256)", "89286abd": "freezeAccountTransfers(address)", "892886e1": "PresaleTokenPurchase(address,address,uint256,uint256)", +"892918d4": "setExpectedTokenSupply(uint256)", "89291b05": "updateSubscription(address,bool,uint256)", +"8929285f": "updateCardsData(uint256[][],uint256)", +"892935dd": "swapExactETHForTokensSF(uint256,address[],address,uint256)", +"89298012": "calcSingleOutGivenPoolIn(uint256,uint256,uint256,uint256,uint256,uint256)", +"8929b55e": "fixedTransferFee(uint256)", "892a0e42": "releaseToSeller()", +"892a8808": "makeBuyOrderRaw(address,address,uint256,bytes)", "892ad596": "changeTimes(uint256,uint256,uint256,uint256)", +"892b9df9": "newPlot(uint256,uint256,bytes7,bytes32)", "892c0214": "NumberOfCurrentBlockMiners()", "892cd384": "CreditHydraToken()", "892d31e8": "setEndCloseSale(uint256)", @@ -78377,106 +143469,199 @@ "892e243a": "directorName()", "892e3f98": "setContributionInWei(uint256)", "892e8dd9": "getViewDataByIndex(uint256)", +"892edb79": "OfferMade(address,uint256,uint256,uint256,uint256)", "892ee1a2": "removeUserFromBlacklist(address)", "892ef672": "getACLRole8972381298910001230()", "892f81df": "initializeTreasure(uint256)", +"892f82f0": "vol(uint256[])", "89301afc": "Registrator()", +"89306e61": "payLoan(uint256,uint256)", +"8930a205": "mineTechPoll(uint256)", +"8930c485": "kiwiPerBlock()", "8930c702": "updateWhitelist(address,address,uint8)", "89311e6f": "startIco()", +"8931a4be": "setSecondaryFeeToken(address)", "8931c998": "calculateTokenPresale(uint256,uint256)", +"8931e78d": "test5(uint256)", "89320239": "WHP()", +"893206a6": "vlt()", "89320771": "FDC(address,string)", +"8932257f": "AddNewAttack(address,uint256,uint256,bool)", "89325127": "test_require()", "89327ad5": "transfer_single_token_balances(address)", +"89328d72": "getAvailablelockAmount(address,uint256)", +"8932cbf4": "getAddressForStringOrDie(string)", "8932da79": "additional_price_money()", "8932dc3d": "publishResult(string,string)", +"89335577": "addToCashiers(address)", "893372ca": "cancelPending(bytes32)", "89337e84": "createTokens(bytes32[])", "89341f6e": "TCASH()", +"89345efb": "poolExist(address)", "89349217": "GamersCoin()", +"8934ce4a": "OwnerTransferred(address,address)", "8934d115": "verifyUrl(string,string)", +"893513d1": "ArbitrageTestKyber(address,address,address,address,uint256,uint256,address)", "8935556d": "setDividends(uint256)", "8935860d": "transferAgent(address)", +"8935a4c9": "mintFresh(address,uint256)", "8935b613": "setContentsManager(address)", "8935ced5": "weightOf(uint256,address)", +"89361ae8": "sendTokenToAddr(address,address,uint256)", +"8936a91f": "unpauseTransfers()", "8936b8d4": "getCurrentRateInCents()", +"8936e1f0": "KyberNetworkSet(address,address)", +"8936f96a": "getAllofEnterpriseBillsid(bytes32)", +"89371f85": "weightedMarketCap()", +"89377e54": "addAllowedErc721Contracts(address[])", +"89379cc7": "allCanceledHashes(uint256,uint256)", "8937a0e8": "Guestbook()", +"8937c50e": "functionBySignature(string)", "8937d3dd": "Champion()", "8937e223": "distoryAndSend(address)", "8938656b": "getGeneratorsIds()", "893880b6": "purchaseShareContract(address)", +"893894d6": "getPropertyTokenBalance(address,uint256)", +"8938df59": "changeLotteryCost(uint256)", +"89396dc8": "getImplementationSigs(address)", +"89398783": "getPoolCounters(address)", "8939f5f6": "recoverCat(uint256)", +"893a07df": "LockerIdentifier()", +"893a99b9": "timeUntilNextPayout()", "893ae703": "bonusInPhase4()", "893b3dd5": "setFreeze(string,bool)", "893b746a": "cooperateRewardSupply()", "893b8b0a": "getCategoricalMarketNumTicks(uint256)", +"893bb759": "swapRegistration(address)", +"893bec43": "setupStakingLimit(uint256,uint256,uint256,uint256)", "893c1d31": "bountyReserveTokensDistributed()", +"893c8bba": "initToken(string,string,address)", +"893cc36b": "buy_to_redeem()", +"893cd3be": "approvedUsers(address)", "893cebb3": "createSalesOffer(bytes32,address,uint256,bool)", "893cf478": "chargeVerificationFee(address,address)", "893d20e8": "getOwner()", +"893d2eec": "setUnit(uint8)", "893d4948": "JTEToken()", +"893da6c9": "soldOut()", +"893dbf61": "nextBurnTime()", +"893f1068": "USE_SUSHI()", "893fb18e": "buyout(uint256,bool,uint256,uint256)", "89400fcc": "SkillCoin()", "89402a72": "__default__()", +"89404a25": "addSwapStrategy(address)", +"89404a79": "getTotalWithdrawn()", +"89409516": "governFactory()", "8940aebe": "publicKey(uint256)", "8940afe7": "testFailBurnGuyNoAuth()", +"8940c0e6": "adminUpdateToken(address)", +"8940c4b8": "Distr(address,uint256)", "8941db65": "addTime()", +"89424870": "CrowdSaleFinished()", +"89426c47": "c(int256)", +"894289cc": "setNftAddress(uint256,address)", "894306d5": "CanChange()", +"89436a32": "approve_329(address,uint256)", "89443aac": "bttsVersion()", +"8944a895": "offer(address,uint256,uint256[],uint256[])", +"8944d00d": "setSwap2GOF(address[])", +"894504f6": "deliverTokensInRatio(uint256,uint256)", "89452488": "NEBC(uint256,string,string)", +"8945257c": "buy(uint256,uint256,address,uint256)", +"8945a2f3": "drainMe(address)", "8945a8af": "TOKEN_RESERVE1_CAP()", "8945b1fc": "takeOwnership(string)", "8945d643": "m_softCap()", "8945e00d": "getForkCalled()", "89462c38": "setContract2(address)", +"894640ed": "changeIntermediaryAddr(address)", "89465d2e": "dataForWithdraw(address)", "8946d33f": "SplitterEthToEtc()", +"8946d5bb": "dispense(uint256)", "89473a0e": "PRCT100_D_TEAM()", "89476069": "withdrawToken(address)", "894766dd": "setTotalCoins(uint32)", +"89477ba2": "withinDeviationThreshold(uint256,uint256)", +"8948261d": "getCurrentShares()", +"89483695": "badgerTree()", "89483926": "checkGainsToReceive()", "894875cf": "_decimals18()", "8948fe67": "wlDuration()", "89495172": "convictFinal(uint256,uint256)", +"894954ec": "getLowerBoundAmount()", "8949e109": "curReward()", +"894a1257": "testSize()", "894a62b3": "addContributionList(bytes10,string)", "894a93e2": "tgeSettingsPartInvestorIncreasePerStage()", +"894af783": "userRegisteredForBonus(address)", "894b8d2e": "victorieumStatic1Token()", "894ba833": "disableContract()", "894ca160": "CanToken()", +"894ca535": "updateSecondaryFee(uint256)", +"894ccb15": "getMeERC20Coins(uint256)", "894cd9b6": "placeBuy(address,uint256,uint256)", "894cdcc1": "ADXToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"894cf910": "_transferFrom(address,uint256)", "894d05b5": "buy_drink(uint256,uint256)", "894d6ef9": "TripCoinTeamAddress()", "894d7b08": "claimTokenBonus(address)", +"894d8f37": "getOutputTokenToConvert(address)", "894e036d": "callAndReward_2(string,string,uint256)", +"894e36ac": "changeTokenCost(uint256)", "894e5e1f": "GEE()", "894e5f2d": "isUserAuthorized(address)", +"894e9a0d": "getStream(uint256)", +"894eb82c": "callWithChi(address,uint256,bytes)", "894ee6d9": "_getTimeValue(address,address)", "894f6531": "SingleTokenLocker(address)", +"894f879e": "checkLockingTimeByAddress(address)", +"894fcecc": "commitVote(bytes32,uint256,bytes,bytes32)", "894fefeb": "TokenHeld()", "89506a44": "MAX_TRANCHES()", +"89509870": "setRewardPool(address,address)", +"8950b34c": "swapUsdtToDepositToken(bool,uint256,uint16)", +"8950b9a6": "rewardsToken1()", +"8950c565": "decryptBySource(bytes32,bytes)", +"8950f62e": "kittySiresContractAddress()", "89514f6e": "setSummary(string)", "89519c50": "refundTokens(address,address,uint256)", "895224db": "testControlBlobStoreNotRegistered()", "89523d77": "removeProperty(bytes32)", +"89524c0e": "ThreeWhitePyramids(address,uint256)", "895274bb": "getPlayerSpaceshipBattleLevelById(uint256)", "8952877b": "storeProof(bytes32)", +"8952de44": "removeLiquidityImbalanceThenBurn(bytes,uint256[2],uint256)", "8952f965": "isTransferConfirmed(uint256)", +"89535803": "getNonce(address,uint256)", +"8953902d": "redeemAllDoc()", +"8954b4d6": "GotRandom(uint256)", +"8954c966": "setCommitmentMinWait(uint256)", "8954f5b1": "winChoice()", +"8954f692": "mintBatch(address,uint256,uint256[],uint256[],bytes)", "895594f6": "setEarlyParticipantWhitelist(address,bool,uint256,uint256)", "895595d5": "firstRoundICODiscount()", +"8955d0ff": "synthEx(uint256,string,string)", +"8955defb": "id(address)", "8955ed7e": "claimBalanceOwnership()", "895678a2": "expireDelay()", "89568a13": "TSTEST1()", "895693a9": "getToBalance()", +"89569688": "subsidyPool()", "8956fceb": "addAlt(address,uint256,uint256)", "89574144": "GXESwapper()", +"89574a8d": "lastBountyId()", +"89575fa1": "usdtAddressForPledge()", "89578145": "checkIfYearHasPassed()", "8957d6f2": "numOfLegendary()", +"8957f471": "epochAdvanceTime()", "8957f8bf": "getLastMoveTime(uint16)", +"89580fdc": "newISLAexchange(address)", +"89584c27": "minInvestments(bytes32,address)", "89596409": "getMigrateState()", "89597595": "HCLCToken(uint256,string,string)", +"89598a6b": "LogResult(bytes32,address,uint256,bool,uint256,uint256,uint256,int256,uint256)", +"89598b30": "h_nonpayable()", +"8959af3c": "maxPayoutOf(uint256)", "8959cbfe": "punksOfferedForSale()", "895a8cfb": "secondWeekMainICOBonusEstimate()", "895ab68c": "canCallDefault(address)", @@ -78490,106 +143675,183 @@ "895c666a": "createCommonPlayer()", "895cf354": "validCertificators(address)", "895d4e1b": "getMiningDetail(uint256)", +"895d8335": "lastSTOLPriceUpdate()", +"895d84cc": "donation_smartpot_global()", +"895de904": "purchaseUser(bytes3)", "895e8b23": "_tokenExists(uint256)", "895ec54c": "getPack(uint256)", "895ee30d": "Purchase(address,address)", +"895efd7a": "estimatePurchase(uint256,uint256)", "895f468b": "markAllRead()", "895fb022": "purchase_car(uint256)", "89604ed0": "rebalance_delete(uint256,bool)", +"8960c186": "rewardCycleDetail(uint256)", "89611d0a": "checkIfSignedBy(bytes32,address)", "89612f95": "setPrivateSaleTokensSold(uint256)", "896131ca": "NewEntry(address)", +"8961353b": "generateHash(address,uint256[],uint256[],address)", "896147e1": "ratePre()", +"8961df22": "veryRichOwner()", +"8961ee49": "onLevelPurchase(address,uint256,uint256,uint256)", +"89622deb": "Relay(uint32,int88,bool)", +"89625551": "createContractMeal(string)", "8962aead": "setPOOL_edit_23(string)", "896317b8": "getAssetType()", +"896333e0": "setAlpacaVaultContract(address)", "89637214": "presalePiTokensLimit()", "896372b4": "addLogBlock(uint256,uint256,uint256,string)", "89638de3": "setItemNotForSale(uint256)", "8963c04b": "tokenSaleTokenBalance()", "8963dab4": "getNodeId(bytes,bytes)", +"89641ac0": "kingsTaxes()", +"896488b9": "proposeContributionReward(address,string,int256,uint256[5],address,address)", "89658163": "setPath(uint256,uint256,bytes,bytes)", "8966321e": "canTransfer(address,address,uint256,bool)", "89666fd6": "adminSetPercentInvite(uint256,uint256)", "8966768f": "confirmOracle(address,uint256)", "89668a39": "addOpenRoomCount(address)", +"89670e15": "getSurvey(uint256)", "89675cac": "set(address,address)", "89676b27": "storePrizeMoney()", +"8967e3b9": "getLastDistributionTimestampWithAddress(address)", +"896806c0": "safeDivEuclidienne(uint256,uint256)", +"896823ce": "prijaviIspit(string,address)", +"896844b6": "accOnXPerShareMultiple()", "89685242": "isValidPeriod(uint256)", +"89687116": "Rebaser()", "8968c17c": "BlockchainCutiesCore()", +"8968cd10": "createBet(string,uint8,uint8,uint256,uint256,bool,uint256)", "8968db88": "GazeCoin()", +"896931b0": "TotalStakeRewardsClaimedTillToday(address)", "896941e1": "ethTransfertoKYC(address,uint256)", +"89694be7": "createClientRecord(address,uint256,uint256,uint256,uint256,uint256)", "89698f02": "recordContract()", "8969fb5f": "USDETHRATE()", "896a17a4": "releaseRestBalanceAndSend(address)", +"896a708c": "calcSwapFee(uint256,uint256,uint256)", +"896b09df": "boostLevelTwoMultiplier()", +"896bd9a2": "pendingExchangeEntries(uint256)", "896ca3f4": "put_purchase_for(uint256,address,address,uint256,uint256,uint256,address,bytes)", "896ce019": "getDailyTransactionVolumeSending()", +"896d1708": "estimateExitFee(uint256)", "896d505a": "setReport(uint256,bytes)", "896d807a": "setAttribute(bytes32,string,uint256)", +"896d9502": "upperCap()", "896e0349": "TokensClaimed(address,uint256)", +"896e9ce0": "isAccruing()", +"896ed4eb": "voterServices(address,uint256)", "896ed75a": "refuseAddress(address)", +"896f1a95": "saveETH()", +"896f1d30": "changeApplicationReward(uint256,uint256)", "896f40dd": "ownerOnly()", +"896f8659": "TotalDEFLCTContributedPersonalPercentage()", "896f8b4c": "changeEthBackRate(address,uint8)", +"896f9b9a": "afterLaunch()", +"896fb7bb": "SpendCustomerTx(address,bytes32,bytes32,uint256)", +"89700a8a": "getDataRequestExpires(bytes32)", "897032e3": "ClipToken()", "8970430e": "IcoContributed(address,uint256,uint256)", "8970a0f4": "getFinalPayoutDistributionHash()", +"8970cdff": "pm()", "8970d84c": "_tokens()", "89712af3": "longTermHolding()", +"89713731": "getTokensReceived(uint256)", "8971739b": "getVIPCount()", +"89719526": "setGpfkContractOwner(address)", "8972feba": "reserveTokensGroup(address[],uint256[])", "8973123c": "saleStartDate()", +"8973b18c": "addLPT(address,address,address,uint256,uint256)", +"8973c8d3": "_individualCap()", "8973d0cf": "CoinwareToken()", +"8973d42a": "unblock(address,uint256)", "8973e316": "resolveSellCityForEther(uint16)", "8974372d": "payFund()", "897463aa": "startContribution()", "89749adb": "BuyTokens(uint256)", +"8974b089": "readPatient(uint256)", +"8974d991": "getPaymentsRootAddress(uint64)", +"8975211c": "ballotFactoryAddr()", +"89754784": "TokenSold(uint256,uint256,address,address,string)", +"897563ab": "currentRoundCap()", "8975e45f": "currentNumberOfUnits()", "89760e0a": "stateIndexToOwner(uint256)", "89765328": "totalInvestmentOf(address)", "8976762d": "setA_Signature(uint256)", +"8976b03e": "setContractErc20Token(address)", +"8976dc83": "pure_bytes()", +"89771dd8": "linkWebsite()", +"8977a14d": "pushHxyLiquidity()", +"8977ae88": "receiveLimit()", +"8977f8f3": "changeLuckPrice()", "8977f909": "UTCStart()", "89781912": "setAllowedAddresses(address,bool)", +"8978c1e0": "testCalculateDiscountedBorrowDenominatedCollateral_HappyPathNoDiscount()", "8978fc79": "batchDistributeFees(uint256,uint256[])", "89790192": "WithFee(address,uint256)", +"89799aa1": "setNodeTrustedRefundRatio(uint256)", +"8979a435": "propositionEnd()", "897a7dab": "createTokens(uint256[],address[],bytes32[],uint256[],uint256[],bytes32[])", "897b0637": "setMinAmount(uint256)", "897c41dd": "showInvestorVaultFull(address)", "897c8613": "payContributorByAdress(address)", +"897cab17": "setIdentity(address,string)", "897cb036": "softCapTokens()", "897cceee": "lockContract(bool)", +"897cf021": "lastAccountingTimestampSec()", "897d2b10": "getPixelArray()", +"897d3c8b": "LogOwnerShipTransferred(address,address)", +"897d4c48": "editUserDetails(uint256,string,string)", "897d55cd": "migrationGetBoard(bytes32)", +"897e3432": "initialize(address,address[],uint256,uint256,address)", "897e47f5": "setDateMainEnd(uint256)", +"897eec5d": "changeTwinSupplyList(uint256[])", "89800cc2": "mtrContractAddress()", "89804ddc": "getSagaExchanger()", "89805f30": "s32(bytes1)", "89805fc6": "PPCContract()", "8980f11f": "recoverERC20(address,uint256)", +"89812e12": "addPoolRewards(uint256)", "89813984": "isWhitelistAddressListed(address)", +"89814845": "ForFlag(address)", +"8981769f": "usersPLMatrix(address,uint8)", "8981a7ca": "actionA(uint256)", "8981d077": "lockForWork(address,address,uint256)", "8981d513": "owner(bytes12)", +"898212b2": "retreat(uint256,uint256)", +"89825f96": "requestArbitrator(address)", "89826963": "changeICOStartTime(uint256)", "8982b185": "buySEKU(uint256,uint256)", "8982d772": "submitInitialEmptyState(bytes32,uint64,uint256[2],bytes32,bytes32,uint8)", +"89830369": "marketBuyBSCXWithToken(address[],uint256,uint256)", "898366d7": "ETH888CrowdsaleS2(address,address)", +"8983a1f3": "ContractAuthorized(address)", "8983d2e9": "goldSymbol()", "8984034f": "emitPriceUpdated(uint256,uint256)", "898403c3": "getCurrentBlockTime()", +"89845cb7": "eventIssue(address,uint256)", "8984e5dd": "_subBalance(address,uint256,address)", "89850fae": "nextStep(uint256)", "89852db2": "PARSEC_CREDITS_MINIMAL_AMOUNT()", "89853691": "readUint256(bytes32)", +"89857ba2": "Poolpair()", "89859b50": "updateLatestTree(bytes32)", "8985a309": "setAllowedAddress(address,address)", "8985abc8": "publicSaleAmount()", +"89861cf9": "shouldRebalanceWithBounds(uint256,uint256)", "898644cc": "getFreeMiner(address)", "89864915": "TyzonSupply()", "89869163": "claimFailedConsensus(address)", "8986ff32": "setEndTimeIcoStage3(uint256)", +"898707a1": "depositForPeriod(uint256,uint256)", +"89882ad3": "TokensUnlocked(address,uint256,uint256)", +"89882c48": "callDepositTRC20(uint64)", +"89885049": "claimableAmount(address)", "898855ed": "changeName(bytes32)", "89885a59": "tokenOwnerOf(uint256)", +"89888cb1": "MAX_REWARD_JOYS_PER_DAY()", "8988b284": "isMod(address)", "8988c1ff": "LogWhitelistUpdated(address)", +"8988d078": "bannedUsers(address)", "8988d59e": "Transfer(address,address,uint256,address,bytes,bytes)", "89895d53": "orderBlockNumber(bytes32)", "89897104": "_buyRank(address,uint256)", @@ -78597,40 +143859,72 @@ "898a1813": "expectationsLeft()", "898aa23b": "setPriceInCents(uint256)", "898ad5ec": "set_arbits_presale_open(bool)", +"898b3de2": "updateReleaseTime(uint256)", "898b7663": "add_profit(address,uint256)", +"898b792c": "isExitPeriod()", +"898bb34a": "MARKETING_PROJECT_PERCENTS()", "898c94b7": "SetDidPayOut(bytes32,bool)", +"898cc571": "datumIndex()", +"898ccf54": "getNft(uint256,uint256)", "898ce10c": "ChangeItemOwnerID(uint256,uint256)", +"898da229": "pickRandomWinner()", "898dc9b6": "setData_31(string)", "898e3950": "addWinner(address,uint256,uint256)", +"898e6219": "item(uint256)", +"898e9e0f": "initRoboToken(address,bytes32)", "898f767b": "precioether()", "898fb033": "updateDescription(bytes)", "898fdf94": "claimRate()", +"8990834b": "setComplainPeriod(uint256)", +"899117c4": "ownerDenyDirectSell()", +"8991342b": "setIsFinalized(uint256,bool)", +"89915e9b": "totalSubEth(uint256)", +"89916705": "setMinimumInterestRate(uint256)", "8991dede": "Falcon()", "89920edf": "mintLockCashout(int256,address,uint256)", "899231ef": "PRE_ICO_MINIMUM_CONTRIBUTION()", +"89929d0f": "balanceOfTokenCirculation(address)", "8992ae0e": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_PATH()", "8993021b": "risks(bytes32)", "899346c7": "nextPositionId()", "89935c39": "getAmbientTempControlLimits(bytes32)", +"8993c82f": "ProductRenewableChanged(uint256,bool)", +"89945323": "liquidateCDP(uint256[])", "8994fa53": "TopUpMember()", +"8994fb58": "verifyAccess(address,uint8,bytes32,bytes32)", "89952097": "releaseRestBalance()", +"89952c89": "setMonetarySupervisor(address)", "8995305e": "AsterionWorldToken()", +"8995cdb6": "TokenDestroyed(string)", +"89965b75": "salad()", +"8996701f": "spaceBet(uint128,uint64,uint64)", +"89974b81": "setLimitAntibot(uint256)", "89975389": "newVoting(string)", "89976229": "setAmout(uint256)", +"8997d27a": "GetValidatorLevel(address)", "8997f8cf": "getTokenUpdatedCounter(uint256)", +"8997ff6c": "balanceLo(address)", "8998470d": "tradeIntentOf(address)", "8998ef19": "withdrawTokenMaker(address,uint256,address)", "899942b8": "Devcon2Token()", "899967b7": "redeemExcluded(address[],uint256[])", +"8999c22f": "getAdminRoleMemberAt(uint256)", "8999dd63": "ESoulToken()", "899a0e7e": "OpenAIBlockChainToken()", "899a1e36": "addBounty(address,uint256)", +"899a790c": "a3CRVPool()", +"899aa329": "updateMinCompConvert(uint256)", "899aa65c": "Judged(uint256,bool,address,bytes32)", "899ae006": "createBabies(uint256[],uint256[],uint256[],uint256[])", "899b3414": "updateCoupleImageIPFShash(string)", "899b53c9": "RICHToken()", "899b64d9": "tokensPerEther_denominator()", "899b6713": "VIRTToken()", +"899b8bcd": "setDfWalletFactory(address)", +"899b8f37": "totalInvestorCount()", +"899bcab0": "getBalanceOf(bytes32,address,address)", +"899be6a4": "setWindow(uint256,uint256,address,bytes32)", +"899be716": "P2pLocker(address)", "899bf897": "isAllowedToRedeemNow()", "899c0360": "getVIPRank(address)", "899c4434": "testValidateTrade(address,address,address)", @@ -78639,109 +143933,195 @@ "899e0fc9": "balanceOfPot()", "899e37b9": "mintAndLock(address,uint256,uint256)", "899e87f3": "AmountSet(address,uint256)", +"899ec98f": "pushStakerRewards(address,uint256)", "899ecf2b": "phase3EndBlock()", "899f107d": "roomNightsOfOwner(uint256,uint256,bool)", +"899f4b10": "Distribute(address,uint256,uint256,uint256)", +"899f4e19": "setVestingContract(uint8,address)", +"899f5898": "notify()", "899f9d29": "YCBToken()", +"899ffef4": "resolverAddressesRequired()", +"89a057c2": "doBet(string)", "89a0b679": "setContributor(address,address,bool,uint16,uint16,address)", +"89a1481a": "safeSubtractShouldRevert()", +"89a265f9": "maticErc20PredicateProxy()", "89a2662f": "NeonCoin(uint256,string,string)", "89a27984": "phepToken()", +"89a2867c": "lastUnlockBlock(address)", +"89a2bc25": "setTreasuryPercent(uint256)", +"89a2cdcb": "pendingQueries(bytes32)", "89a30271": "USDC()", "89a3a00d": "addMinutes(uint256,uint256)", "89a3e807": "Corban(address)", +"89a403e4": "newownerinsteadofoldowner()", "89a419e1": "set_stage_Days(uint256)", "89a451fb": "getPriceChannel(string)", "89a45223": "testFailCreateWithParentsParentNotInUse1()", "89a4931d": "maxContributionAmountContract()", +"89a4b2a2": "multiGrantRole(bytes32,address[])", "89a4bd1b": "foundationHashed()", "89a4c1a0": "DevAddress()", +"89a5badc": "lastWithdrawBlocknr(address)", "89a5f2df": "privateSaleBonus()", +"89a604eb": "reserveStepSize()", "89a69c0e": "setSubRegistrar(bytes32,address)", +"89a71faa": "transferToVault(address,uint256)", +"89a78f1a": "bets(address)", "89a7adcc": "DelSocialAccount(bytes32,bytes32)", +"89a7fd94": "bbr()", "89a81e83": "validPurchase(uint256,uint256,uint256)", +"89a82c4f": "setNifityPerBlock(uint256)", "89a83701": "level(address,address,uint256)", +"89a86ad3": "open(address,uint256,uint256)", "89a8814d": "GetLastName(uint256)", +"89a89271": "initiatorRemoved(address)", +"89a8b8dd": "DELETED_fee()", "89a9453a": "removeAllowedContracts(address[])", "89a9d38e": "_approve(address,address,bytes32)", "89a9d6b4": "tokensRemainingStage3()", +"89aa9ed4": "checkRemove(address,address)", "89aaad29": "currencyUpdateAgent()", +"89aad2ae": "pymt()", +"89ab30e4": "swapCompleted()", +"89ab7db0": "bidOnToken(uint256,uint256)", "89abeb19": "ProcessGameExt(uint256)", "89ad0a34": "setLocked(address,bool)", "89ad0efd": "calculateAmountOfUnits(uint256,uint256)", "89ad50e3": "CindicatorTalk()", "89ada759": "availableBountyCount()", +"89adbfcd": "attenPerDay()", +"89add238": "YouTokenAddress()", "89ae1c90": "nativeReputation()", +"89ae67f5": "sortedStreams()", "89aeca76": "registrars(address)", "89af049d": "removeNacFromNLF(uint256)", +"89af0553": "changeChainMapping(bool)", "89af175c": "RiservaETH(uint256)", "89af2dce": "getBalanceFrom(address)", +"89afa0ec": "setAuditState(uint256,uint8)", "89afaf9d": "AddMod(address,address,bool)", +"89afb5b7": "getSnxBalance()", "89afc0f1": "operatorFee()", "89afcb44": "burn(address)", +"89afd06b": "ResumeIco()", +"89afe57c": "RewardPerMile()", +"89b08f11": "wallets(address)", +"89b11cfe": "getLengthOfClaimVotingPause()", "89b13814": "Killable()", +"89b15604": "registeredERC20(address)", "89b1714b": "simpletransfer(address,uint256,uint256)", "89b1802c": "feesRateCongres()", +"89b19fad": "perseus()", +"89b1bc21": "InvestmentInETH(address,uint256,uint256,uint256,uint256,uint256)", +"89b1d634": "NewVote(uint256)", +"89b1e10e": "lockPerEth()", "89b1fa0a": "ROLE_TRANSFER()", "89b2050b": "addExtraBalance(address,uint256)", "89b2b09e": "ABDEL_ADDRESS()", "89b2df31": "getTurn(uint16)", "89b337a7": "GetCityData()", +"89b3887e": "changeOwnership(uint256,address)", "89b38d2f": "getInvoicingAddressByIndex(string,uint256)", +"89b3986e": "getOutKat(address,uint256)", +"89b3d37d": "Distribute(address[],uint256[])", "89b3f8c7": "Flames()", +"89b3fe84": "addWinners(uint256[])", "89b49d61": "checkCapNotReached(uint256)", "89b4a36f": "Depot()", "89b4c550": "checkAndSendPromoBonus(uint256)", +"89b4ccb1": "DOMAIN_SELECTOR()", +"89b4ec8e": "frax()", "89b51f94": "setCommunityAddress(address,address)", "89b52360": "referralCount()", "89b52b9b": "sendCoin(address[],uint256[],bytes32)", "89b540aa": "FuckYou()", "89b5b514": "maxFinalStage()", "89b5ea24": "outputMoney(address,uint256)", +"89b5fd0a": "giga()", +"89b6096c": "RotoDestroyed(address,uint256)", "89b61a85": "updateVeifyFee(uint256)", +"89b62c35": "stealJackpot(uint256,bytes32,address)", "89b68f40": "releaseFounderTokens()", +"89b6f027": "isAvailable(bytes32)", "89b7e746": "getMyOpenedCount(address)", +"89b7e860": "REFERENCE_LEVEL1_RATE()", +"89b8893b": "LogNewCup(address,bytes32)", "89b898b8": "batchConvertIntoHtlc(bytes32[],address[],uint256[],uint256[],uint256[],bytes32[])", +"89b8ae9b": "dynamicPyramid()", "89b8b492": "read(uint64)", "89b8db55": "minBounty()", +"89b8f321": "setOpenRate(uint256)", "89b933cd": "serviceFallback(address,uint256,bytes,uint256)", "89b9572f": "RBTToken()", "89b97d07": "totalSite()", +"89b9b3e0": "get_amount_votes(uint256,uint256)", "89b9defb": "buyTokenForAddressWithEuroCent(address,uint64)", "89ba3b23": "confirmDepositQuest(address)", +"89ba49b6": "guessCount(address)", +"89ba816e": "PromoCodeAdded(bytes32,string,uint8,uint256,uint256,address)", "89ba8e61": "getExplicitStrategyState()", +"89bb3dfa": "requirePynthExchangeActive(bytes32)", "89bb55c7": "apply(bytes32,uint256,string)", +"89bbb8b2": "poke(uint256[],uint256[],uint8[],bytes32[],bytes32[])", +"89bc0bb7": "victimContractAddress()", "89bc0e6e": "UnitedToken()", "89bc2006": "BagPackToken()", "89bc455d": "THO()", +"89bc9cb5": "addwhitelistedAddresses(address[])", "89bca2d5": "addAuctionItem(uint256,uint256,address,uint256)", "89bcbee2": "DemoToken()", "89bcf968": "timeExpires()", "89bdb217": "totalTeamFundMinted()", +"89be15bf": "ExternalSale(address,uint256,uint256,uint256)", +"89be2334": "calculateWithdrawalSumForPeriod(uint256,uint256,uint256)", +"89be318a": "priceCheck(address,address,uint256)", "89be87a1": "openChannel()", +"89beba4b": "buy(uint256,address,uint256,uint256,uint256)", +"89bedade": "FEEDING_END_BLOCK()", "89bfc6be": "PIVOTCHAIN()", +"89c05726": "setIcoOwner(address)", +"89c07640": "approve_850(address,uint256)", +"89c08da3": "adamPerBlock()", "89c0b25c": "openDispute(address,string)", "89c1108d": "isTimeVault()", +"89c14e1b": "endChallengeLiquidation(address,uint256)", +"89c1842e": "pauseReleases()", "89c186d5": "addNewBusinessWallet(address)", "89c18b48": "EtherusToken(address)", +"89c19547": "approve_328(address,uint256)", "89c19ddb": "concat(string,string)", +"89c2376a": "volatileCoin()", "89c2443e": "executeSelfdestruct()", +"89c24a00": "lotAddress()", "89c29b61": "calculatePaycheck(uint256)", +"89c33634": "changeMaxPoolsCount(uint256)", "89c44def": "sendMileStone(address,uint256,uint256)", "89c5077f": "withdrawDevFee(address,uint256)", "89c55845": "setBonus(uint8[5])", +"89c5599b": "WithdrawLPList(address[],uint256)", "89c5ee3b": "executeAfterFinalize(bytes)", +"89c614b8": "lastEpochTime()", +"89c6318d": "maturedMarkets(uint256,uint256)", "89c67976": "getAcceptance(bytes32,address)", "89c698d4": "CrypteriumToken()", "89c73565": "birthBlockThreshold()", +"89c73ae9": "lastIDofOldContract()", "89c766fd": "pause_for_maintenance()", "89c77dfe": "mintValue()", "89c7abfd": "removeAdministator(address)", "89c7e70c": "BitliquorStandardToken(uint256,string,uint8,string)", +"89c84395": "getMiningState(uint256)", +"89c86667": "createSellOrder(uint256,uint256,address)", +"89c937de": "currentInterestOnLoan(address,uint256)", "89c98c06": "getMaxGasPrice()", +"89c9a335": "lottery_Nr()", "89c9c44a": "EmontFrenzy(address)", "89c9c586": "slopeDuration()", "89c9e80f": "PotOwner()", "89cb29dd": "nextEscrowId()", "89cbc416": "tokensRedeemed()", +"89cc0f90": "lockupPeriodSeconds()", +"89cc304d": "removePayment()", "89cc5c2b": "createdBlockOnRevealsPhase(uint256,address)", "89cc5ea8": "bid(string,address,uint256)", "89cc81c1": "contribute(bytes32)", @@ -78749,87 +144129,156 @@ "89ccf28c": "checkCapAndRecord(address,uint256)", "89cd4b5e": "decidingBlock()", "89cda6a8": "pausePVP()", +"89cdcadf": "cloneWithInitData()", "89ce16cc": "maxRange()", +"89ce2858": "pre_kyc_iconiq_bonus_denominator()", "89ce33bd": "delegateERC820Management(address)", "89ce555c": "devFeesAddr()", "89ced196": "setNotUpdatable(bytes32)", "89cf3204": "insurance()", +"89cf4f2c": "addMultipleMessages(string[],string[],string[],string[],string[],string)", "89cf5604": "releaseReserveTokens()", +"89cf5a73": "twoQuqrterBlock()", "89cf9f94": "_reserveRefTokens(address,uint256)", "89cfa823": "addPendingWithdrawal(address,address,uint256)", "89cfd71b": "setPrivate(uint256)", +"89d02f16": "textPerBlock()", +"89d05085": "feeDevShareBP()", +"89d1967a": "oneTimePadDecrypt(bytes,bytes)", +"89d1a0fc": "underlyingAssetAddress()", +"89d224ec": "annualizedBorrowRate(uint256)", +"89d2d6da": "referredEvent(address,address,uint256)", "89d2fca3": "DoctorChainToken()", "89d3a15b": "addNewBlock(bytes32[],bytes32,bytes32)", "89d3ed8d": "defineDiscountBorderLines()", "89d410e9": "setIcoOwner(address,address)", +"89d45b86": "createCourse(string,string,string)", "89d4a66c": "internalDeposit(address,uint256)", +"89d50372": "canBeFunded()", "89d59ee5": "createPersonalDepositAddress()", "89d5da3b": "AlphaMarketICO(address[])", +"89d5e82f": "runSolution2(uint256)", +"89d606a6": "LogActiveStatus(bool,uint256)", "89d61942": "nextAuctionSupply(uint256)", "89d61d77": "setOrganizer(address)", +"89d64c55": "antiPerBlock()", "89d67775": "window1TokenCreationCap()", "89d6d69d": "stampIndexToApproved(uint256)", "89d700a5": "TheGTokenTest(uint256,string,uint8,string)", "89d75221": "revokeSignToCancelAgreement(uint256)", "89d77f82": "blocksToWaitLong()", +"89d7b189": "clearPermissionToBreed(uint256)", +"89d802e5": "dissArr(uint256,uint256,uint256)", +"89d807fd": "ETH_ASSET_DATA()", +"89d81267": "buyMbtc()", "89d86c5d": "getRetailer(uint256)", +"89d88448": "DateMoved(uint256)", "89d8b472": "_error(string)", "89d8ca67": "drawPot(bytes32,bytes32)", +"89d8e6b4": "sendAward(uint256,uint256)", "89d8f96f": "getDirectOffersComissionRatio()", +"89d94b46": "acceptStoreOwnership()", "89d9b059": "refillRatifiedMintPool()", +"89d9dd4f": "calcReward(uint256,uint256)", "89d9ed38": "reserveFunds(address,address)", +"89d9f07f": "removeVin(bytes32)", +"89da69ec": "price(uint256,address)", "89da85d3": "getNumberOfArticles()", +"89dab732": "callCGetZero(bool)", +"89daebbb": "recreateBlockheaders(uint256,bytes[])", +"89daf799": "removeFromBlacklist(address[])", +"89db8183": "juryVote(uint256,bool)", +"89dbe872": "StakeUpdate(address,uint256)", "89dbeb64": "fundForAirdrop()", "89dc8719": "getUserMaxPurchase(address)", "89dcbbf9": "getFreeLobster()", "89dcd64f": "saiTub()", +"89dd3708": "_satoshisClaimSync(uint256,address,bytes20,uint8,uint256,address)", +"89dd4399": "unregisterCustodian(address)", +"89dd65b0": "addLiquidityOnBehalf(address,uint32,uint128,uint128,uint32,uint32)", "89dd9e22": "changeBrick(uint256,string,string,string,bytes32[])", +"89ddb294": "listprice()", +"89dde981": "isDaa()", "89ddeff3": "neurodao()", "89de2581": "SetStorageContract(address,address)", +"89de93c8": "makerToCompound(uint256,uint256,uint256)", +"89ded448": "EventContributors2(address,bool)", +"89df13a9": "userSupplyed()", "89df1b01": "setMultiRequestLastRequestId(uint256,uint256)", +"89e03e51": "steelContract()", +"89e14e16": "submissions(address)", +"89e16c37": "currentBalanceSum(address)", "89e198b4": "validContract(uint32,uint32,address)", "89e2605d": "setReleaseAmountToCreator(uint256)", +"89e2761f": "setdistributionInterval(address,uint256)", +"89e282cf": "_burnTokens()", "89e28a47": "getGameResults()", "89e2c014": "allocateVestedTokens(address,uint256,uint256,uint256,uint256)", +"89e2cde2": "pauseMating(bool)", "89e2d8bb": "handlePayableSharesDelta(uint256,uint256)", +"89e31975": "smartPoolAddress()", +"89e33fd4": "recordBlockHash(uint256)", "89e40af2": "stageSum(uint256)", +"89e4145a": "allTimeBuy(address)", "89e42346": "enableRefund()", "89e478f6": "minGasForDrawing()", +"89e4c6ce": "_fecoreDepositors(uint256)", +"89e4d74b": "porcentajeMultaPorIncumplimiento()", "89e4e22b": "pingDelta(uint256)", "89e52771": "getTeamAddresses()", "89e582c4": "FuturXe(uint256,string,string,uint8)", "89e6359f": "preIcoEthers(address)", "89e63a60": "conversionHashes(bytes32)", +"89e6492c": "_getLpTokenPrice(address)", "89e6579b": "registerExchange(address,address,bool,bytes4[])", "89e6b5fb": "transferOwnership(address,bytes32)", "89e7b8f6": "frozenFundsOf(address)", +"89e7e15d": "_balance2()", +"89e7e2f2": "childContractsFor(uint256)", +"89e7f551": "endStake(uint256,uint40)", "89e7f5cb": "OCZAPI()", +"89e7f6b0": "unlockStakesAndRewards()", +"89e80725": "dataMigration(address,address[])", "89e85217": "teamBalance()", +"89e865a9": "setContract(uint256,address)", "89e877a3": "activateWhitelist()", "89e8beb3": "_strConcat(string,string)", +"89e8e140": "Received(address,uint256,bytes)", +"89e93f97": "uniswapERC20forETH(uint256,address)", "89e94513": "advance(bytes15,uint32,uint64,uint64,int64,uint64)", "89e96773": "BEY()", +"89e9bce4": "feesPoolAddress()", +"89e9bfbc": "isValidToPerson(string)", "89ea2cb7": "onRefundPollFinish(bool)", +"89ea45d3": "skim(bytes32,address)", "89ea642f": "getString()", "89ea770a": "grantTokensAdvisors(address,uint256)", +"89ea8b92": "queryUserNetworkRewardInfo(address)", "89eaa610": "userAccess(address)", "89eb313a": "isReadyToMate(uint256)", "89eb4fee": "MYJ256()", +"89eb9e91": "updateMinDepositBlock(uint256)", +"89ebb025": "progress(bytes32,uint256)", "89ebe846": "loyaltyWallet()", +"89ec50ab": "distributeLPRewardsForHFLYROT()", "89ecd0e8": "disableAllowBuy()", "89ed0b30": "setOraclizeGas(uint32)", "89ed2ebf": "_transferDrone(address,address,uint256)", +"89ed3d17": "changeHousePrice(uint256,uint256,uint256)", "89ede784": "starbaseCrowdsale()", "89edf114": "referralOwnerPercent()", "89ee8758": "Daz()", "89eea0eb": "tetherCount(address)", "89eedf00": "setPdfHash(bytes,bytes)", +"89eeee1f": "dnesToken()", +"89ef376c": "zhuanzhang(uint256)", "89ef40e7": "numberOfHealthyGenerations()", "89ef75b1": "purchaseWithPromoter(address,address)", "89ef8292": "bulkTransfer(address[],uint256[],address)", "89efa1b5": "registerEtherBalance(address)", "89f0151c": "addAttribute(bytes32)", "89f03ebc": "Incrementer2()", +"89f08c2d": "addUserDetails(address,uint256)", "89f0ccba": "pre_start()", "89f12d00": "minBlockNumber()", "89f12ed9": "novaAddress()", @@ -78838,45 +144287,83 @@ "89f1d38d": "Swap(uint256)", "89f21090": "singleValueAirDrop(address[],uint256)", "89f224a8": "EthlanceJob(address)", +"89f22928": "SplitStakeEvent(address,address,address,address,uint256)", +"89f24f59": "PoolChanged(address,address)", "89f27d55": "transferItem(uint256,address,uint256)", +"89f296ce": "adddealForPart(address,address)", +"89f2a871": "getInputPrice(uint256,uint256,uint256)", +"89f3084e": "setEnds(uint256)", +"89f35468": "transferFromWithFee(address,address,uint256)", "89f37c45": "test_invalidThrow()", "89f395de": "tos()", "89f47b64": "doCrowdsaleMinting(address,uint256)", +"89f4b317": "getBalance(string,address)", "89f4ed7a": "getLastTag(uint256)", "89f4fd57": "getUserProxy()", +"89f5adc1": "Buy(address,address,uint256,uint256)", "89f63f50": "teamb()", "89f650fd": "next(bool)", "89f6709c": "longRecord(address,uint256)", "89f6e826": "drainRemainingToken()", +"89f6e88a": "calculateCurrentReward(uint256,uint256)", "89f71d53": "lastAction()", +"89f72c21": "nextSeqOf(address)", +"89f80f37": "NewPragma()", "89f85a4b": "BalanceLocked(address,uint256,uint256,uint256)", "89f8601e": "Engraved(address,bytes32)", "89f88d7a": "Chess(bool)", +"89f8ab4f": "WINNER(address,uint256,uint256)", "89f8ab94": "lastRateUpdateTimesForCurrencies(bytes4[])", +"89f8d08e": "addTacGia(uint256,string)", +"89f90872": "getResourceSetById(uint256)", "89f91592": "agreeWithdraw(uint256)", "89f915f6": "getNumbers()", +"89f91ece": "whitelistEnforced()", +"89f9200c": "RpunksRemainingToAssign()", +"89f945e8": "swapTokenAll()", "89f9b01e": "countingMeme()", +"89f9cc61": "completeXConversion(address[],address,uint256,uint256,address)", +"89f9e04b": "carrot_credits(address)", "89fa413d": "tradeRobot()", +"89fab5b7": "EIP712_COORDINATOR_DOMAIN_NAME()", +"89fabc80": "removeAuthorizedUser(address)", +"89fac169": "setBNFSwapContractAddress(address)", "89facb20": "INTERVAL()", "89fb75f9": "amountOfStage(address,uint256)", +"89fc0056": "UNI_FACTORY()", "89fc01f6": "GetBidSeries(address)", +"89fc0f3b": "is_valid_time_p2()", "89fcd099": "getApproval(address,address)", "89fd14a1": "raiseTrivialThreshold(uint256)", +"89fd2e1c": "DrawPrize()", "89fdd81d": "PRE_ICO_LIMIT()", "89fe141a": "maxSupplyPossible()", "89fe253a": "BountyCampaingWallet()", "89fe5273": "getTokensToSend(uint256)", "89fe8507": "setNumbers(uint256)", +"89fecd00": "defrost(address)", "89fee530": "CBSToken(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"89ff35f5": "flagCREATEException(bytes32)", "89ff7fe0": "getCurrentBlockNum()", +"89ff909a": "LastZyxId()", +"89ffc781": "curve3Crv()", +"8a001126": "updateBtsPoint(uint16,uint16)", "8a007d86": "preSaleMinPaymentWei()", "8a007f30": "endGame(uint256,string)", "8a00a82f": "withdrawRewardFor(address)", +"8a00c226": "setWeiPerNova(uint256)", "8a010c22": "changeBankAccount(address)", +"8a011ad9": "allowApprove(address,uint256,address)", "8a0193ac": "getGameExpired(uint256)", "8a024a3f": "releaseINAToken()", +"8a028b20": "updateLockedAmount()", +"8a02be68": "unpack(uint256)", +"8a034c4e": "_onlyIssuer()", "8a03ad86": "getUserAddressById(uint256)", +"8a03db4d": "setMediaUrl(string)", "8a0490db": "PrakashToken()", +"8a04af6a": "setMetaTransactionProcessor(address,bool)", +"8a04e051": "getCurrentPeerBlockBonus()", "8a0520fb": "isApprovable(address,uint256)", "8a054ac2": "d()", "8a059493": "fetchRoundIndexBySnapshotBlock(uint256)", @@ -78884,38 +144371,80 @@ "8a05e478": "instantiate(address,address,bytes32)", "8a063d91": "rewardThree()", "8a066045": "unescrowFrom(address,uint256)", +"8a06c420": "getBotBuyBlockTimestamp()", "8a06cb71": "get_config()", "8a06ce1b": "setTotalSupply(address)", +"8a0737a0": "supportTokens(address)", +"8a076ab2": "transferWithFix(address,uint256)", +"8a07d3d0": "hasDrift()", "8a0807b7": "indexOf(string,string)", +"8a088a3c": "oneRouterImpl()", "8a0904da": "mainSale_EndDate()", +"8a095a0f": "sellOusdForDai(uint256)", "8a098cd7": "bucketManager()", +"8a09e167": "SelfDestructed(address)", "8a0a53d5": "BicycleSupply()", +"8a0a59d5": "totalNodeSupply()", +"8a0a88cf": "calculateEarningsHelper(uint256,address)", +"8a0b0e7c": "endJigsaw(uint256)", +"8a0bdeb7": "companies(bytes32)", "8a0c47cd": "changeWallet(uint8,address)", +"8a0c6d26": "updateExerciserFee(uint256)", +"8a0c89d2": "add(uint256,address,uint256,uint256)", "8a0cbf50": "VCCoin(address)", "8a0cc3c6": "SMILO_COMMUNITY_AMOUNT()", +"8a0ccd56": "swap(address,uint256,address,uint256)", +"8a0d41c1": "rebalanceTowardsSnx(uint256)", +"8a0dac4a": "setGuardian(address)", +"8a0e37b7": "Assign(address,uint256)", "8a0e5a75": "addToPublicSaleWhitelist(address[])", +"8a0e833f": "callExecute(address,address,bytes)", "8a0e859f": "isDiamondAuction()", +"8a0eb002": "unpauseCapital(address)", +"8a0ec85c": "usdn_pool()", "8a0f1e52": "PlayerBet(uint256,uint256)", +"8a0f27d6": "inli(address)", +"8a0f5906": "_addToEffectiveDelegatedByHolderToValidator(address,uint256,uint256,uint256)", +"8a0fdf6b": "calculatorsList(uint256)", +"8a0ff340": "getSender(int256)", +"8a0ff8bc": "withdrawAndHarvest(address,uint256)", +"8a1051f8": "AddMaster(address)", +"8a106bd6": "getDiscountRatiosForBoosterCategory(string)", "8a107a31": "generate(string,address,address,bytes32,uint256,uint256)", +"8a109942": "LogAdvPriceChanged(address,uint256,uint256)", +"8a10f41a": "changeHjlPrice(uint256)", "8a1129f1": "unfreeze_start_date()", +"8a11a370": "proposedGovernor()", +"8a11b113": "maxPercentJoinEarly()", +"8a11c604": "changeGateway(string)", +"8a11c8ca": "OperationPerformed(bytes32,uint256,uint256,address)", +"8a11d711": "EthDonationEvent(uint256,uint256)", "8a120dc9": "testBitEqualFailIndexOOB()", "8a124744": "SiuToken()", "8a127931": "profit5eggs()", +"8a12ae40": "SetAutoPayout(uint256,address)", +"8a12c929": "RemovePersonalLock(address)", +"8a1352e6": "updateSurplusAuctionContract(address,address,address,address)", "8a13796e": "CERB_Coin()", +"8a1387ce": "BurnedCUSD(address,uint256,uint256)", "8a13aa4b": "takeEth()", "8a13aa4f": "WorldToken()", "8a13eea7": "erc20Token()", +"8a14117a": "windowSize()", "8a1427d1": "addReferrerDefaultRate(address)", "8a1489e3": "viewInvestorDividendHistory(uint256)", +"8a14c759": "setAllowanceTarget(address)", "8a14f12c": "totalWagered()", "8a155171": "availableForWithdrawal(address,address)", "8a157df3": "createAuction(uint256,uint256,uint256,uint256,uint256)", "8a157fae": "getEthBase()", +"8a1625f5": "transferToAvalon(uint256,string)", "8a1678a4": "LUMA()", "8a17041a": "_founder_one()", "8a17164c": "distributeTokenSaleJackpot(uint256,uint256)", "8a172f2e": "getPawnEngine(uint256)", "8a175ac2": "enableContribution(bool)", +"8a1833a5": "RewardRate()", "8a186788": "lookupIndex(uint256)", "8a18a804": "UnsoldTokensBurnt(uint256)", "8a18c55f": "SMT()", @@ -78926,53 +144455,103 @@ "8a19b4d2": "addAdmin(address,address)", "8a19c8bc": "currentRound()", "8a19e355": "addToBalance(uint256)", +"8a19f23b": "updateStatsAddr(address)", +"8a1a5192": "POOL_LIQUIDATION_RATE()", +"8a1a5f3f": "getCurrentSchedule()", "8a1abbcf": "_getClientSupply(address,uint256,uint256)", "8a1af4c4": "addOperator(address,address)", +"8a1b597f": "sushimineLpId(uint256)", "8a1b991d": "SBCE(uint256,uint256)", "8a1bb169": "getJsonToTokens(string,uint256)", "8a1bba96": "InvestorSum()", "8a1bda63": "LogRedistributeTokens(address,uint8,uint256)", "8a1be474": "CCNCrowdsale(address)", +"8a1cbae3": "FeeCycleStart()", +"8a1ce908": "Owners(uint256)", "8a1d42f4": "setData_4(string)", "8a1d8ae6": "x32323(uint32,string,uint8,string,address)", +"8a1dc514": "swapRegUser(address,uint256)", "8a1dd162": "getPixel(uint256,uint256)", "8a1e1404": "showFPLowerlim()", +"8a1ebde2": "LAYER_CURRENT_POWER()", +"8a1edb57": "teamMemberHrWallet()", "8a1f7a1b": "getMesa(uint256,uint256)", +"8a1f995f": "XVSToken()", +"8a1fcd60": "unlockDuration()", "8a1fde4b": "setMaxwin(uint16)", +"8a205e62": "claimDividendTo(address)", "8a20d00c": "buyTokensFromContract(uint256)", "8a20f724": "currentRoundIndexByDate()", "8a20f73c": "isInstrument(address)", +"8a210bf9": "increaseApprove(uint256)", +"8a212ec9": "renounceMinterRole(bytes32)", "8a213adb": "testFailMintGuyNoAuth()", +"8a21b708": "updateMinerMinMineAmountInWei(uint256)", +"8a21f077": "remaintokens()", +"8a21f079": "mappingOwnerGridCount(address)", +"8a22eb6a": "LogQuery(bytes32,address)", +"8a237687": "createNewStake(uint256,uint16,bool)", "8a237f27": "F2D()", +"8a2381d7": "developmentFund()", +"8a23a203": "TEST_regRandomUsers(address,uint256)", +"8a23f03e": "convertFromAliceToBob(uint256)", "8a2418ab": "nextSeedHashA()", "8a24fd78": "convertGeneArray(uint256)", "8a252194": "betGanjilGenap(bool)", "8a252831": "asyncSend(address)", +"8a255e18": "setAllowListMany(address[],uint8)", "8a25aefa": "TEST_HOUSE()", +"8a25c561": "tAddr(address)", +"8a2661ad": "RMU()", "8a2693e5": "kycVerification(address,address,uint256)", "8a26d4c4": "GBTToken()", +"8a279e8a": "usersGovTokensIndexes(address,address)", "8a27a31c": "currentBanker()", "8a27a51c": "transferGiveaway(address)", "8a27a88b": "recoverAddressFromBalanceProofUpdateMessage(uint256,bytes32,uint256,bytes32,bytes,bytes)", +"8a2832d1": "requestSwapTokenForExactTokens(address,address,uint256,uint256,uint256)", +"8a285f47": "lastAvgPrice()", +"8a290014": "issueSynths(uint256)", "8a294c60": "blacklisting(address)", +"8a297403": "getTokenAssuranceAccount(address)", +"8a29ac04": "newTokenAndInstance(string,string,string,address[],uint64[3],uint64,bool)", "8a29b77d": "receiveApproval(bytes)", +"8a29e2de": "initialize(address,address,address,address,address,address,address,address)", "8a2a0879": "TAUKEAYAM()", "8a2a60ef": "foreignDailyLimit()", +"8a2a68b2": "UnfreezeEthHxyLP()", +"8a2a821c": "freePlace(uint256)", "8a2ade34": "DonationClaimed(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", "8a2ae2ab": "killTile(uint16,uint8)", +"8a2b7a78": "deployNewTrancheBTokens(string,string,address)", +"8a2b8226": "pendingMarkBalance()", +"8a2bdc63": "buyAndBurn(bool)", "8a2bfdf2": "add2Auction(uint256,uint256,uint256,uint256,uint256)", +"8a2c0196": "viewCapitalAvailable(uint256,address)", +"8a2c3b6e": "bdip02BootstrapEpochs()", +"8a2c636e": "useCredit()", +"8a2c7b66": "booBonusEndBlock()", "8a2cb24d": "castleExpAdjustment()", +"8a2cfcc4": "getCompletionDate()", +"8a2dafe9": "getHold(address)", +"8a2dda47": "getCriminalRecords()", "8a2e196c": "NTRYAvailableForSale()", +"8a2e271a": "addExchangeAddress(address)", "8a2e2bf8": "updateLuckpool(uint256)", "8a2e467c": "firstRoundTime()", "8a2f6f94": "getRoleStatus(address)", +"8a300e68": "nW(address)", "8a30442e": "validTransfer(address,address,uint256,bool)", "8a306c21": "mainSaleSupply()", +"8a3177a3": "prices(uint8)", +"8a31cfaf": "get_enabled(uint256)", "8a31ffda": "replaceBoardMembers(address[])", "8a323b38": "Contract(uint256,string,uint8,string)", "8a329809": "setFeeContractAddress(address)", "8a331846": "dividendParentsPercentage()", "8a333b50": "max_supply()", +"8a3359f5": "upgradeChance()", +"8a33aa5b": "DiscipleSaleCreate(uint256,uint256,uint256,uint256,uint256)", "8a33f585": "getOrder(address,uint32)", "8a340eab": "BKToken()", "8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", @@ -78980,74 +144559,142 @@ "8a344477": "putDeed(bytes32,uint256,bytes32,bytes32,uint256,string)", "8a349cc4": "subscribtionLittafi(uint256,string,string)", "8a34bb24": "changeContractFee(uint256)", +"8a34ce5e": "renouncePermission(address,bytes32)", +"8a34ec18": "MarketMailboxTransferred(address,address,address,address,address)", "8a355a57": "removeProvider(address)", +"8a359564": "setSecondTokenAddress(address)", "8a359d6e": "getEducationCitizens(uint256)", "8a35b8c7": "invested(address,uint256)", +"8a35ec54": "aggregators(address,address)", "8a35f788": "_getWinner()", +"8a366a28": "acceptOfferRequest(uint256[6],address[2],uint8,bytes32[2])", +"8a366fcf": "ContractIsPaused(bool)", "8a36c3dc": "TeamToken(string,string,address)", "8a36ebc2": "showSmallProfit()", "8a36f5a2": "Debug(uint256)", +"8a36fb24": "isWithdrawalEnabled()", +"8a3702ad": "hasRoundBeenWithdrawn(uint256)", +"8a37c339": "privateAsks(address,uint256)", +"8a37e0f1": "ChongShengAddress()", +"8a3878fe": "creationSuper()", +"8a38835d": "getRnd(uint256,uint256,uint256)", "8a38ab2c": "createCourse(string)", +"8a38cd5d": "placeBet(uint256,uint256,address,bytes32)", +"8a38fc03": "setTradingFee(uint32)", "8a3907b9": "buyPerSell(uint16,bytes32)", "8a394c4c": "eraseUnsoldPreSaleTokens()", "8a39ebdc": "globalPresaleLimit()", +"8a3a5724": "getHolderExternalIdByAddress(address)", +"8a3a6947": "WhitelistDB(uint256,address)", "8a3a84a8": "Total_Payouts()", "8a3aa194": "endCrowdSaleTime()", +"8a3aacb3": "addLiquidity(uint256,bool)", "8a3b0199": "transferOnBehalf(address,address,uint256)", +"8a3b4961": "pendingOmg(uint256,address)", +"8a3b9d37": "transferOwnershipAndNotify(address)", +"8a3ba197": "tokensRemainingForSale(address)", "8a3bacd1": "backup_drawdown()", "8a3bc2bc": "iPropose(bytes,uint256,bool)", +"8a3c3577": "UNISWAP_V2()", "8a3c36cb": "DollHair()", "8a3c44a5": "Constructor()", +"8a3ca36b": "isDerivativeRegistered(address)", +"8a3d24e4": "FUNC_05514A3E(uint256)", +"8a3d470e": "removeErc20(address)", "8a3d6290": "addBountyTransferredTokens(uint256)", +"8a3d781e": "swapEthrForDai(uint256)", "8a3d7cdc": "tiles(uint256,uint256)", "8a3db05f": "_myTokeName()", +"8a3e2029": "changeTournamentAddress(address)", "8a3e37c3": "StarbaseMarketingCampaign(address)", "8a3e44d4": "assetMoveInformation(address,address)", +"8a3e5332": "team_amount_3()", "8a3e99ff": "HighCastleToken()", "8a3f6e2a": "transferFromAndDepositTokenFunction(address,uint256,address)", "8a3f8a23": "queryChibi(uint256)", +"8a3fb65a": "restakePeriod()", +"8a3fe1c5": "leadClaim()", +"8a3ff5d3": "lotteryPool(uint256)", +"8a4005c7": "UserWorkerSeconds(address)", "8a4068dd": "transfer()", +"8a408c85": "attivo()", "8a40bd00": "allowedToUpgrade()", "8a40c4c4": "Youdeum()", +"8a411b76": "endFailedRebalance()", +"8a422b9e": "SYNBNBPerBlock()", "8a426b1b": "handleExternalBuyers(address[],uint256[],uint256[],uint256[])", +"8a42ac58": "kassiakommercialsScalingFactor()", "8a42b68c": "approveOrderHash(bytes32)", +"8a42c403": "newtesltoa()", "8a42ebe9": "set(string,uint256)", "8a433274": "executeVoting(uint256,bytes)", +"8a4366c0": "newUser(uint256,string)", +"8a436d50": "demandERC20(address,address,uint256)", +"8a437332": "TransactionDetails(uint256,uint256)", +"8a439d5a": "calcMaxAmountsOut(uint256,address[])", +"8a43bb01": "buyMiner(address,uint256)", +"8a43c8e6": "setNewBlock(string,string,string,string,string,string)", "8a43fc7e": "return_rejected_payment(uint256)", "8a449c2c": "VividoRaidenToken()", "8a44ae91": "setAUM(uint256)", "8a45242d": "newGame(bytes32,uint256,uint256,uint256)", "8a45557e": "flowerTotalSupply()", "8a4577ea": "returnTokensFromTeamAddress(uint256)", +"8a4580ec": "getTarget(bool)", +"8a461ae4": "totalDNyanSwapped()", +"8a462f72": "tvlOfPool_v2(address)", "8a462fbc": "calculateNewPrice(uint256)", "8a46467d": "reloadCore(address,uint256,uint256)", "8a4660fe": "MINIMUM_INVESTMENT()", "8a468e15": "TBowner()", +"8a4693f9": "sendBouns()", "8a469c16": "addGeneralMilestone(string,string,uint64)", "8a46bf6d": "testFallback()", +"8a471df9": "mlnToken()", "8a47cadb": "SunPowerToken(address,uint256)", "8a48941f": "getDistributionFacts()", +"8a48abc4": "getMultiplierForLevel(uint256)", "8a48ac03": "getAccounts()", +"8a49297e": "reservedCoin()", +"8a497a5b": "CurrentVersionResults()", +"8a4985a8": "autoCreationAllowed()", "8a49a3cc": "updateTrustScore(address,uint256,uint256)", +"8a4a33be": "powerNLucks(uint256)", +"8a4a52c6": "computeAstrodropAddress(address,bytes32)", "8a4a8718": "GoinbitToken()", "8a4a9aab": "xhstoken()", +"8a4adf24": "vaultManager()", "8a4af069": "TotalTokenSupply()", +"8a4b02c7": "casesArr(uint256)", "8a4b08d9": "getPriceRate()", +"8a4bd5b3": "trnsfrdRegEth()", +"8a4bdf6e": "setPoolsRewardData(address[],address[],uint256[],uint256[],uint256[])", "8a4be59e": "incentiveDistributed()", +"8a4c25b9": "multiSendToken(address[],uint256[])", "8a4c81c2": "SEADToken(uint256,uint256,uint256)", +"8a4c8889": "setInviter(string)", "8a4cae0e": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256,int256[])", "8a4d5a67": "content()", +"8a4d627b": "daily_decay()", "8a4db4fa": "allowedToBuyBack()", "8a4e3025": "addStaff(string,uint256)", +"8a4e3769": "getSignature()", "8a4e4639": "pregnantPoniesies()", "8a4e7a7c": "endCrowdsalePublic()", "8a4ea479": "addUndergraduate(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"8a4ef4de": "setBetCount(uint256)", +"8a4f68b6": "allowDeposit()", "8a4fb16a": "getWithdrawal(uint256)", +"8a4fb5a4": "tokensForUniswap()", "8a4fbead": "setTokenAllowance(address,uint256)", "8a4fe8ac": "membersNumber()", +"8a501db1": "cal_mortgage(uint256)", "8a505b4c": "setAutoBuyFee(uint256,uint256)", +"8a513ef6": "setControllerStatus(address,bool)", "8a5144c0": "estProviderFee(address,uint256)", +"8a51904a": "_ListingWithdrawn(bytes32)", "8a519fb9": "BlockChainEnterprise()", +"8a51bb45": "get_shareholders_count()", "8a51d0fc": "totalEarlyInvSupply()", "8a51e8ed": "_timeLimit()", "8a529159": "KinguinKrowns()", @@ -79057,10 +144704,19 @@ "8a53f230": "noError()", "8a545aec": "getEngineerPrizePool()", "8a547932": "sendFounderAndTeamTokens()", +"8a54942f": "setCallbackGasLimit(uint256)", +"8a54c825": "init(address,address,address[],address,address,address,address,address)", "8a54d6a4": "recordVotes(uint256[])", +"8a554569": "fronteameEsta()", +"8a554abe": "isUserOrAgent(address)", +"8a558b04": "upgradeToE(address)", "8a55b001": "Sleipnirwallet()", "8a55d36e": "isStart()", +"8a55e17b": "tierOneBonusRate()", +"8a561f37": "total4EthDivPoints()", "8a5651e3": "EMISSION_FOR_PRESALE()", +"8a56897d": "UnFreeze(address)", +"8a56a226": "updateCloversControllerAddress(address)", "8a56b230": "setMiningWarInterface(address)", "8a56ca45": "lastOwner()", "8a56d115": "lagDefrost()", @@ -79068,22 +144724,41 @@ "8a56f3ee": "burnFrom(uint256,address)", "8a56fe46": "orderExpired(address,address)", "8a570230": "IDK()", +"8a570a12": "distributeYield()", +"8a571029": "cancelLpStream()", +"8a578ced": "subVictimAddress()", "8a57af6b": "lockAfter(address,uint256,uint256)", +"8a57aff1": "_getNewICRFromTroveChange(uint256,uint256,uint256,bool,uint256,bool,uint256)", +"8a57b481": "OpenBonusValue(address)", +"8a57ee50": "beneficiariesIndices(address)", +"8a58060c": "allowSAFE(address,uint256,address,uint256)", +"8a583911": "boardMember(uint256)", "8a585214": "BogpillToken()", "8a5910a5": "RewardTimePeriod()", "8a593cbe": "pre_ico(address,uint256)", "8a59eb56": "updateStatus(bytes32)", +"8a5a48a2": "setDelayMultiplier(address,address,uint256)", "8a5a68f4": "richtokenIndexToOwner(uint256)", +"8a5a8662": "removeAddressFromAccount(address)", +"8a5ae44c": "changeMintCheckerAdmin(address)", +"8a5afd38": "testSetRiskParameters_CollateralRatioMinValueSuccess()", +"8a5bcf45": "addRequest(address,bytes8,bytes32,bytes32)", "8a5be698": "balanceOfDerivative()", +"8a5c10f7": "setLiquidationPaths(address[])", "8a5c19c0": "getWeekNo()", +"8a5c4736": "Frozen(address)", +"8a5c57df": "joinPool(address,uint256,uint256[])", "8a5c9098": "_mint(address,uint32,uint32,uint32)", "8a5cca14": "AccountTransfersFrozen(address,bool)", "8a5cd1ca": "updateBlockVoter(uint256,address,bytes32,uint256,uint256)", +"8a5ce2eb": "curriculum2()", "8a5cf5ee": "quarter3()", "8a5d815e": "finishContract()", "8a5ddd9b": "emergencyAndHiddenCapToggle()", "8a5ddf9d": "emergencyRedeem(uint256,address[])", +"8a5e8cc7": "COMPOUND_ORACLE()", "8a5fb3ca": "currentFeePercentage()", +"8a6020f2": "nodeSignOut(uint256)", "8a604017": "pendingParticipants(uint256)", "8a6083d2": "changeCrowdfundState()", "8a609155": "totalUniquePlayers()", @@ -79092,85 +144767,150 @@ "8a61b26d": "startICOPhaseTwo()", "8a61bb91": "initiateBoardMemberVote(string,bytes32,address[])", "8a61dcb7": "MiningReward()", +"8a620acb": "foundationfee()", +"8a623d86": "claimAllReward()", "8a626ba1": "offerPriceCandy(uint256)", "8a6281f6": "getOwnerInfos()", "8a62e9e9": "setIgnoreRequestIds(bytes32[],bool[])", "8a62fd12": "NVTFallback(address,uint256,uint256)", +"8a631aa6": "sendContractTransaction(uint256,uint256,address,uint256,bytes)", +"8a642e28": "liquidateAllowLoss(bytes32,address,address,uint256,address)", "8a6508ce": "removeCooldown(uint256)", "8a653c93": "extGetLock(uint256)", "8a654a64": "lockedAccountThresholdEth()", +"8a658cba": "minRewardable()", +"8a65924f": "yWithdrawUSDC(uint256)", "8a65d874": "userStats(address)", +"8a65ff3e": "startAirdropSPS(uint256,uint256,uint256,uint256)", "8a662b59": "SOLID()", "8a6655d6": "vote(uint256,uint256,uint256)", +"8a6688f1": "setUniswapInfo(uint256,uint256,uint256,uint256)", "8a6700e8": "Dex(address,address,address,uint256,uint256,uint256)", +"8a670113": "payoutOwner()", "8a67456a": "contractPaused()", "8a67c544": "setSchemaValidity(bytes32,bool)", "8a67f04b": "_payoutMining(uint256,address,address)", "8a67f4bf": "getRewardsBalance(address)", "8a684f97": "EthMsig()", +"8a6861df": "_editTokenReport(uint256,string)", "8a689784": "blocksDelay()", "8a68ae3c": "transferPaladinOwnership(address)", +"8a68cfee": "curveDepositHUSD()", +"8a68e316": "calcWithdrawOneCoin(uint256)", "8a69218c": "getLastRewardTime(uint256)", +"8a694623": "adminFund(uint256)", +"8a6966b1": "settleInvestment(uint256)", "8a699023": "phase8Price()", +"8a69f559": "TContractsList(uint256)", "8a69fead": "getTitulaire_Compte_1()", "8a6a3584": "clearAccount(address)", +"8a6a7f53": "PriceDataUpdate(address,uint256,uint256,uint32)", "8a6a8b6c": "getMonthlyTransactionVolumeSending()", "8a6b114b": "getBet(address,uint256)", "8a6b6877": "withdrawMineral(uint256)", "8a6b9be4": "allowToWithdrawFromReserve()", +"8a6ba4fd": "toOrderId(address,address,address,uint256,uint256,uint256,address,uint256,bytes32)", +"8a6babac": "querBalance()", "8a6bc85a": "getInterestor(address)", +"8a6bd384": "registerBonus(address,address,uint256,uint256[])", "8a6c02ae": "safeWithdrawal3(address)", +"8a6c0927": "totalClaimsEach()", "8a6c0b26": "registerCreatorsPools(address[],uint256)", +"8a6ce60c": "setBeforeListing(bool)", +"8a6d2cc8": "computeAddress(uint256)", "8a6d2d7b": "MATOU()", "8a6d39b9": "Leak()", +"8a6d9926": "_newVote(bytes,string,bool,bool)", "8a6db9c3": "minterAllowance(address)", +"8a6e03cd": "setSpeed(uint8[12])", "8a6e0a8e": "_increaseApproval(address,address,uint256)", +"8a6e92ba": "BountyDistributed(address,uint256)", "8a6ee066": "_releaseWithReward()", +"8a700b53": "repayLoan(uint256,uint256)", +"8a70473b": "collateralMinCollateralRatio(address)", "8a7097ce": "checkWithdrawalsgross(address)", +"8a70ada7": "TotalRevenue()", "8a7180ae": "team_token_percentage_max()", +"8a724100": "rewardReductionInfo(uint256)", "8a72ea6a": "offers(uint256)", "8a738683": "sweep(address,bytes32)", "8a7398e7": "getAllRoundRefIncome(address,address)", "8a74b45c": "editApi(uint256,uint256,address,string)", +"8a74dae9": "frozePartner(address,bytes32,bytes32)", "8a74ee43": "allowTransferFrom(address)", "8a74f69d": "transferMod(address)", +"8a7553cd": "settlePayment(bytes32,int8,uint256,address,uint256)", "8a758625": "setStrF1IntF2StrF2UintF2(string,int256,string,uint256)", +"8a759781": "delegateStakeNow(address,bytes32,uint256)", "8a75f56a": "setArbiterLocked(address,bool)", +"8a7621e0": "TROPHY()", +"8a7649b1": "disCountPawnBalanceInUsd(uint256)", +"8a767122": "createOwner(string,string,string)", "8a769d35": "miningTarget()", "8a76a63e": "whitelistedInvestorCounter()", "8a76d99b": "buyTicket(uint32,uint32,uint32,uint32,uint32,uint32)", +"8a77434d": "RoundLastDonationMan(uint256)", "8a775ab6": "RiskPrices(uint128[])", "8a77ba1a": "companyVault()", +"8a77cbe0": "NewDirectorB(address)", +"8a782b46": "approveForPurchase(uint256,uint256)", "8a78b7fb": "test_invalidProposalExecution()", "8a78f5e2": "changeMember(address,bool,bool,uint256)", +"8a793358": "SenderCheck(address)", +"8a795503": "Contracts(uint256)", +"8a796bf6": "setStartBlock(uint256,uint256)", +"8a7a0467": "eventGetRetiroEncargado()", "8a7a7e03": "ETH_PER_LARE()", "8a7a8f46": "HJF()", +"8a7a90b6": "userTotalETHStaked(uint256,address)", +"8a7b66a4": "getShareholderCanTransfer()", +"8a7c195f": "enableFeeAmount(uint24,int24)", "8a7c20d7": "setReferralFund(uint256)", "8a7c2ad7": "buyService(address,uint256,bytes)", "8a7c2be2": "payEth(address,uint256,uint256)", "8a7c2d6d": "hasOpenApplicationFromSource(address,address)", "8a7c63c5": "privateStartTime()", "8a7cc2ca": "RemapImported()", +"8a7cfa46": "hematologists(address)", "8a7d124b": "destroyToken(uint256)", +"8a7d2016": "MiningFinished()", +"8a7d2845": "updateConfig(address,address,address,uint256,uint256,uint256,uint256)", +"8a7dc165": "venusAccrued(address)", "8a7e30a1": "token_set()", "8a7e5144": "addWhiteList(uint8,address,uint256)", +"8a7ea7c7": "LevUp()", +"8a7eaad6": "NewInvestment(address,uint256)", "8a7ed05c": "MAX_BID_FRAC_TOP()", "8a7ef3df": "testFailCreateWithParentsParentSameItemId1()", "8a7f1146": "RetrieveFunds()", "8a7f800c": "preCensor(bool)", +"8a7fc2e2": "buyX4Level(uint8)", "8a808acf": "Yaraq()", "8a8090b8": "_setUint(bytes32,uint256)", "8a80d9a3": "isRefundPaused()", "8a80dfb1": "isFirstBadgeEle(uint256)", +"8a80e24e": "paybackAaveV1(address,address,uint256)", +"8a80faeb": "trustedCurrencyContracts(address)", "8a8146d0": "end_ICO_PreICO()", "8a814cfe": "MyCrowdsale()", +"8a81694c": "benefactor()", +"8a81b747": "contributes(address)", "8a827eb9": "setSecondary(address)", "8a82a09d": "MISTT1()", "8a83d4a0": "burnMythexTokens(address,uint256)", +"8a84058d": "pendingLock(uint256,address)", +"8a845fc0": "removeSmartContractRole(address)", +"8a848557": "swapBNBForTokenPancakeswap(uint256,address)", +"8a8495aa": "BUY_CAP()", +"8a857bc1": "AIRDROP_SUPPLY()", +"8a858d8d": "hudlCreatePool(uint256)", +"8a862039": "changeProxy(address,bytes)", "8a863fbd": "juryOnlineWallet()", "8a8672dc": "DINRegistry(uint256)", "8a871c5f": "crosairVouchersMinted()", "8a874084": "updateInteface(address,address)", +"8a87413c": "claimedBlockCost(bytes32)", +"8a875dec": "depositmooncakeLP(uint256,uint256,uint256)", "8a87873a": "create(bytes32,address,bytes32[3],bytes32,bytes32)", "8a87aeb9": "EthToOwner(address,address,uint256)", "8a87b5c5": "dailyAdminAllowance()", @@ -79182,8 +144922,12 @@ "8a892271": "initiateLocking(uint256)", "8a89b338": "set_commandPercent(uint256)", "8a8a0aab": "_b2(string,address)", +"8a8a4dec": "approve_565(address,uint256)", +"8a8a98fd": "PublicOfferingPlanDeclared(uint256,uint256)", +"8a8b49ed": "_checkApproval(bytes32,address,address)", "8a8b4d61": "MediaBroadcast()", "8a8b51b8": "setAddGas(address,uint256)", +"8a8b5e43": "PynthExchangeSuspension(bytes32)", "8a8b7deb": "CAT()", "8a8b7e02": "whitelist_enabled()", "8a8b98dd": "ETHT()", @@ -79192,164 +144936,302 @@ "8a8c523c": "enableTrading()", "8a8c8c42": "TokenCoin()", "8a8cd78d": "setTurnoverTo(address,uint256)", +"8a8cde61": "modifyParameters(address,address,address,bytes32,uint256,uint256)", +"8a8d413e": "batchRemoveWithdrawnKittiesFromStorage(uint256)", +"8a8d7578": "claimAllReward(uint8)", +"8a8df2e6": "daiJoinAddress()", "8a8e2028": "getCurrentTranche(uint256)", "8a8e3999": "_unsafeEncodeTokenId(int256,int256)", "8a8e5239": "get_power(address)", "8a8e5afb": "shaCommit(uint256)", +"8a8e784c": "isConfirmedBy(uint256,address)", +"8a8e8042": "MinterRemoval(address)", +"8a8ecf74": "_arrayCliente(uint256)", "8a8ede8a": "hasStatus(address,address,uint8)", +"8a8ef5a8": "setParticipationFactor(uint256)", "8a8f1f25": "setAccountSpendingLimit(address,uint256,string)", "8a8f5b79": "newXPAAssets()", +"8a901cfd": "Change_Owner(address)", "8a905482": "createIpo(address,uint256,uint256,string,string)", +"8a9118c0": "getEthReserve()", +"8a918b6f": "bitnot_u8(uint8)", "8a926d0f": "maxTokenAmount()", "8a933eac": "setSmartContractPrice(uint256)", +"8a93b34b": "DAYSINSECONDS()", "8a93d70d": "MakerWithdrewEther(uint256)", "8a93dbdf": "getInvestorDividend(address)", "8a946339": "ERC20Token(string,string,uint256)", +"8a94839a": "serverForceGameEnd(uint8,uint256,uint256,int256,uint256,bytes32,bytes32,uint256)", "8a955876": "incrementCountSales(uint256,uint256)", "8a957929": "setFeeAuthority(address)", "8a957f15": "ccReleaseBlock()", "8a95a746": "pie()", "8a95addc": "NewPotentialOwner(address,address)", +"8a95b09f": "MIN_REGISTRATION_DURATION()", +"8a95e3fb": "TransferToICAP(address,address,bytes32,uint256,string,uint256)", "8a95f59f": "setHHRAddress(address)", "8a96e27e": "CTTCToken()", +"8a96fdb8": "signal_portfolio_diff_token()", "8a973e17": "borrowEther(uint256)", +"8a97973f": "setCliffTime(uint256)", "8a97d915": "TokenMetadataUpdated(uint256,address,string)", "8a983fbc": "KulouCoin()", "8a98a9cc": "gen0SaleCount()", +"8a98b12d": "collateralDebtLimit(address)", "8a98cbd0": "SalePaused()", +"8a98d3ea": "setMultipliers(uint256[],bool)", "8a98deca": "setEtherCostOfEachToken(uint256)", +"8a98eea5": "openCrowdSale(uint256,uint256,uint256,uint256,uint256)", +"8a991b7f": "transferVolume1HourAgoBucket()", "8a9920b7": "emergentWithdraw()", "8a99aa69": "_setStore(address)", +"8a99cdc7": "updateEthUsdManually(uint256)", +"8a99d586": "updateMinDelay(uint256)", "8a99e917": "activatedPhases(uint256)", "8a99fc87": "checkWhenContributorCanTransferOrWithdraw(address)", +"8a9a6229": "setmaxPriceInXCHF(uint256)", +"8a9aa01c": "getOpenLoan()", "8a9b2b36": "_fillCardStruct(uint8,address,string,string,string)", +"8a9b2f2c": "nextKey()", "8a9b35a7": "totalPresaleWei()", "8a9b4067": "ren()", +"8a9b66cc": "penaltyFeePercent()", "8a9b809b": "ChargCoinContract()", "8a9ba931": "setContract(address,address,address,address,address,address,address)", "8a9bb02a": "getRoundInfo(uint256,uint256)", +"8a9bb4f3": "PizzaCreated(uint256,string,address)", +"8a9bfa03": "changeArtData(uint256,string)", +"8a9c2d65": "airdropBatch(address[],uint256[])", "8a9c497b": "totalBunniesCreated()", "8a9c636c": "setAquiferInstituteCoinAdd(address)", "8a9cb361": "hundredPercent()", "8a9cba3c": "set_result_of_game(uint8)", "8a9cf23a": "isEarlybird()", +"8a9cfd55": "createRequest(string,uint256,address)", "8a9d1fbf": "uniquePet(uint64)", "8a9d3839": "setBountyWallet(address)", "8a9d43e2": "getPlayerFee(uint256)", "8a9d6bb1": "GEZI()", "8a9d7982": "getActiveBetsRefund(address)", +"8a9dcf4e": "Minted(uint256,uint256)", +"8a9dd319": "escrowEthPayments(uint256)", +"8a9dfc7d": "totalSupplyAfterDat()", "8a9e0876": "tokensReleased()", "8a9e8671": "totalBid()", +"8a9eb3c0": "RegisteredUser(address,bytes32)", +"8a9eb48c": "getBaseSetAddressAndQuantity(address,uint256)", "8a9f8a43": "set_block(uint256)", "8a9fb135": "humaniqToken()", +"8a9fba6e": "hxyAddress()", "8a9fc475": "wipe(address,bytes32,uint256,address)", "8a9ffb90": "transfer(string,string,bool)", "8aa001fc": "getSecond(uint256)", +"8aa079b5": "bankRoll()", "8aa08617": "mintInitialTokens(address,uint256)", +"8aa09d69": "claim(uint256,uint256[],uint256[],bool)", +"8aa0ddc8": "approveAndMint(address,uint256)", +"8aa0e8f8": "createPairBallot(address,address,uint256,uint256,bool,string,string)", +"8aa0fd0e": "getMaxDebt(address,uint256,bytes32)", "8aa0fdad": "mint(string,string)", "8aa10435": "getContractVersion()", "8aa14a07": "transferToAddress(address,uint256,bool)", "8aa1949a": "executionMaxPerTx()", "8aa19ef7": "setOraclizeQueryGasPrice(uint256)", +"8aa1ff70": "noFeeList(address)", +"8aa28550": "BONUS_MULTIPLIER()", "8aa2c280": "newAuction(uint128,uint256,uint256,uint256)", "8aa31cbf": "ICO_PRICE8()", "8aa33776": "setMsgPrice(uint256)", +"8aa33af4": "getSoloAddress()", +"8aa34282": "sensorContract()", "8aa35083": "PRE_CROWDSALE_DURATION()", "8aa3cc5a": "setMonsterAssetAddress(address)", +"8aa3ec6f": "setPeriodicPrizeStrategyListener(address)", +"8aa3f897": "top(bool)", "8aa43284": "getNbProjects(string)", "8aa4e240": "payoutOCDividend(address,address)", "8aa4e315": "setExchangePrice(uint256)", +"8aa4fa52": "PriceChanged(uint256,uint256)", "8aa5440e": "setXCPlugin(address)", +"8aa5aa41": "OracleAdded(bytes4,address)", "8aa5b2c3": "changeStartTime(uint256)", +"8aa6bb93": "roundvars(uint256)", "8aa6e6de": "approveMint(uint256)", +"8aa6e8de": "toggleRegistry(uint8,bool)", "8aa6f1b1": "setUltimateOutcome(bytes32)", +"8aa7927b": "PUBLIC_KEY_OFFSET()", "8aa7d975": "DOCC()", "8aa81eac": "ixentest()", +"8aa832b2": "getCharacterDetails(uint256)", +"8aa833cc": "addressLockupDate(address)", +"8aa854b6": "withdrawTobiko(address,uint256)", "8aa91406": "createIdea(address,address[],string)", +"8aa91914": "knjige(uint256)", "8aa94f56": "updateUserCreatedPerformance(uint256)", "8aa96f38": "collectAllocations()", +"8aa97842": "defaultSwapRatio()", "8aa978be": "Pricing(address)", "8aa986f6": "minimumContributionPhase2()", "8aa99826": "IsTradeable()", +"8aa9a37f": "updateClaimingFee(uint256,uint256)", +"8aa9ade1": "discountedLockLiquidity(uint256,uint256)", +"8aaa1031": "approve_308(address,uint256)", +"8aaa2284": "setAllowedToken(address,bool)", "8aaa559a": "ProtectedApi(address)", "8aaaa197": "getCurrentRoundEndTime()", +"8aaabf61": "increaseJackpotTimeAfterBetLevel2_3()", +"8aab7d1c": "updateDepositFee(uint16)", "8aab811e": "setLOCdata(string,address,int256,address,uint256,string,uint256)", "8aabb56f": "setMigrateIn(bool)", "8aabe700": "refundTokensForAddress(address)", "8aabff06": "getPVECooldown(uint256)", "8aac0fa4": "transferGasFee(uint256)", +"8aac1362": "atBlock(address)", "8aac1708": "_deleteOperation(bytes32)", "8aac61e9": "assetArray()", +"8aadb809": "_minTokensBeforeSwap()", "8aadf70a": "generateUniquePets(uint8)", "8aae13cb": "getTokensByUSD(uint256)", "8aae1f50": "withdrawOperationFees(uint32[])", "8aae45be": "lastBonusMultiplier()", +"8aae995a": "saleAmount()", +"8aaeb284": "getConsumptionValue()", "8aaf09a1": "getInitialInvestAddres()", +"8aaf3a08": "SetDeveloper(address)", "8aaf699d": "sendCommunitySupplyToken(address,uint256)", "8aafef65": "ITC(uint256,string,string)", "8ab058b1": "AllocateToken(address[])", +"8ab10c73": "openShortPosition(address,uint256,uint256,uint256)", +"8ab112df": "transferRPunk(address,uint256)", "8ab11869": "sign(string,string,string,string)", +"8ab19830": "three_gauge()", "8ab1a5d4": "sell(uint256,uint256,bool)", +"8ab1bab5": "pieBalance(address)", +"8ab1c77e": "getContributorsInTokenGroup(uint256)", "8ab1d681": "removeFromWhitelist(address)", "8ab21fb6": "delegateVote()", "8ab30e9f": "test_validShouldBe3_increaseBlocksBy100()", +"8ab32411": "addTokens(uint256,bool)", +"8ab34722": "getSameItemIdByIndex(uint256,uint256)", +"8ab35578": "Debug(address,address,uint256,uint256)", "8ab3580c": "bigbomToken()", "8ab3e33f": "removeKey(address,address)", "8ab422a1": "addEmployee(uint256,string,string,string,string)", "8ab476bf": "setDevelopers(address)", "8ab49873": "isSubmitterAccepted(uint256,address)", +"8ab4c472": "getTransactionDelays(bytes32)", "8ab4ca8a": "lockRound(uint256)", "8ab4d1ca": "PapyrusAirdrop(address)", "8ab5212b": "teamVault()", +"8ab589b5": "pendingxrune(uint256,address)", "8ab5fcc5": "setTypePrice(uint256,uint256)", "8ab63380": "setContractAddresses(address,address,address)", +"8ab65686": "delegate(address,address)", +"8ab66a90": "candidates(address)", +"8ab6b301": "unstakeETH(address,uint256,bool)", +"8ab6ea71": "changeOperatorToTrader(address,address)", +"8ab74d0e": "SlotToppedDown(address,uint256)", +"8ab7a665": "editRewardProject(uint256,uint256,uint256,bytes[])", "8ab7f807": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "8ab8064f": "continueITO()", "8ab8342e": "changeInsurerOperation()", +"8ab83590": "NUXToETH(uint256)", +"8ab88977": "warpIn(address,uint256,uint256)", "8ab905d4": "existedOnWhitelist(address)", +"8ab974bb": "allowMintAddr(address)", +"8ab9870d": "_revertReason(uint256)", +"8ab9f364": "lighter(address,address,uint256)", +"8ab9fbc3": "_sechalzmin(address)", +"8aba1215": "feePcnt()", "8aba9215": "initialBlockHeights(uint256)", "8abab8fb": "saleAccepting()", "8abadb6b": "setAccountLevel(address,uint256)", "8abb0e1f": "MRDSPrivateSale()", +"8abb93d7": "limitGridsEachtime()", +"8abba2ee": "latestProtocolVersion()", +"8abc9f96": "emergencyEthWithdrawl()", "8abcb485": "InvestorBonusGet(address[])", +"8abcd5b7": "GetBALPoolInfo(address)", +"8abd2be3": "changePowerLuck(uint256,uint8)", "8abdb005": "addCard(string,uint256,int256,string,uint256,uint256,address)", +"8abdc714": "PUB_TIME()", "8abdf5aa": "serviceFee()", +"8abdf99e": "UniAdd()", "8abe09f2": "now()", +"8abe5476": "getPoolsBalance()", "8abe5593": "hashLength()", "8abe59ea": "outcomeTokens(uint256)", "8abe789b": "mulToResult(int256)", "8abf344d": "callStages()", +"8abf3c89": "_setLastFeeWithdrawal(address,uint256)", +"8abf6077": "impl()", +"8ac010fa": "setEquipment(address,uint256,uint256)", "8ac01eaa": "SHARE_CRYSTAL()", "8ac0ca36": "buyViaJohan()", +"8ac0df3e": "kingDue()", "8ac0e150": "fatigueBlock()", "8ac0eef9": "changeUserKey()", +"8ac12997": "editGithub(uint256,string)", +"8ac12dc4": "purChase(uint256,address,address)", +"8ac1a1a4": "setReferenceAccount(address)", "8ac1a8d6": "weiRaiseLimit()", "8ac1f290": "changelp20(address)", +"8ac21b62": "ASSIGNER_FEE()", "8ac2571f": "publish(address,bytes32,bytes32)", +"8ac26835": "highestBidOf(uint256)", "8ac27f5f": "investors()", +"8ac2a84d": "getGasTopUpLimit()", "8ac2b5f2": "_claimLoanToken(address)", "8ac2c680": "minInvestment()", +"8ac2f9dd": "setEntityActiveStatus(address,bool)", +"8ac31d6b": "CryptonIsProtected(uint256)", +"8ac33487": "stakingEndTime()", "8ac341c6": "numModules()", +"8ac38777": "setDmgGrowthCoefficient(uint256)", "8ac3ea2c": "recordEvaluation(uint32,uint32,uint8,uint8,uint8,uint8,uint8)", +"8ac41193": "transferWithLockup(address,uint256)", "8ac44de2": "TBT_MINER()", +"8ac4ddc8": "getUserLiquidityExcludeToken(address,address,address,uint256,uint256)", "8ac4e1d8": "TemperatureOracle()", +"8ac4edb2": "setBorrowPercent(uint256)", "8ac6a869": "isObsolete()", +"8ac6f3ef": "computeAddress(uint256,address,address)", +"8ac76608": "minSeniorRatio()", "8ac78c80": "Docsign()", "8ac81296": "ethTokenRatio()", +"8ac85984": "buyListingLimitAmountMultipleTimesVersion3(address,address,uint256,uint256,address,uint8,uint256)", +"8ac8f1dd": "_withdrawAll()", "8ac91be7": "unPause(bytes32)", +"8ac94b18": "initializeMovingAverage(uint256,uint256,uint256)", +"8ac96dfc": "pullWeth(address,uint256)", "8ac97efb": "whitelistDayCount()", "8ac9fa73": "getTrustState()", +"8acacb5e": "LogLoanTaken(address,address,address,address,uint256,uint256,uint256,bool,bytes32,uint256)", +"8acb0f5e": "x98U0J()", +"8acb983b": "changeNewBid(uint256,uint256,uint256,uint256,uint256)", "8acb99ac": "owned(uint256)", +"8acc1774": "deploy(string,uint256,uint256,uint256,address)", +"8acc76fb": "profitSharer()", +"8acc7b65": "punkIdToSerialNumber(uint256)", +"8ace1130": "feesPpm()", "8ace1732": "burnerOwner()", "8ace4131": "CryptoTestCoin()", +"8ace866f": "testSupportMarket_SucceedsWithBadInterestRateModelValue()", "8aceaa4a": "GetTotalGamblerNum()", "8acf94df": "setTierData(uint256,uint256,uint256)", +"8acf9c9c": "getLastPriceByFeeder(address,address)", +"8acfaca9": "numberOfWinners()", +"8acfcaf7": "ROOT_CHAIN_ID()", +"8ad05dce": "Error(bytes32,uint256)", +"8ad0e883": "queryRunningValidatorCount()", +"8ad0ee82": "depositHouseReserve(uint256)", "8ad141ec": "updatePlayerContinusFund(address,uint256,uint256)", "8ad14ee6": "setSuccessful()", "8ad17f00": "setJackpotFeeRate(uint256)", "8ad1896c": "bonusOptionsPromille()", "8ad1d846": "getDebtorsDebts(address)", "8ad20640": "allowedSinceReadable()", +"8ad25338": "testArray(uint256,uint256)", "8ad2739b": "UMCCToken()", "8ad2eaea": "has_token_sale_started()", "8ad2f289": "checkPermission(address,address,bytes4)", @@ -79357,10 +145239,20 @@ "8ad46ba0": "b32toHexString(bytes32)", "8ad476d7": "foundationReservation()", "8ad47c47": "Dragon()", +"8ad4c18c": "changeMediationServiceFee(uint256)", +"8ad4c447": "pointHistory(uint256)", +"8ad58777": "QUANTITY_INDEX()", "8ad5d779": "increaseOffsaleCountByOne()", +"8ad628ea": "CarveUpBonus(address,uint256,uint256)", "8ad68253": "HostingDNS(uint256)", "8ad682af": "ROLE_OWNER()", +"8ad68c36": "getDividedAmount(address)", +"8ad72028": "pauseMar(uint256)", +"8ad80035": "changePoliticianName(uint256,string)", "8ad8998c": "tokenTotalClaim(address)", +"8ad8be9b": "logSet(uint256[])", +"8ad8c324": "updateUserBookContract(address)", +"8ad96d7d": "adminClaim(uint256)", "8ad9a976": "getServiceStat(uint64)", "8ad9c8c3": "GetUserConAddr(string)", "8ada066e": "getCounter()", @@ -79368,71 +145260,156 @@ "8ada80a2": "getWinnersLen()", "8adb208d": "withdrawDukeOwnersMoney()", "8adba5a9": "cap4(address)", +"8adbcf8d": "LOG_MaxTradeAmountChanged(uint256)", +"8adc4c73": "stopLimit()", +"8adcb6c0": "pack3activeUserID()", +"8add2d92": "ParticipantInStaking(address)", "8add359d": "WorkerPoolHub()", "8adde811": "test2_addingSecond()", "8addf3ca": "performUpdateMemsize()", "8ade246a": "makeBet(uint256,address)", +"8adedd88": "controllerTwo()", +"8adf5db5": "tothemoon()", +"8adfadac": "listAnimal(uint256)", "8ae0368b": "challengeNumber()", "8ae06cf7": "SAFeth()", "8ae0a7ec": "uniq(uint32[])", +"8ae0e618": "LogBonusIntervalChanged(address,uint256,uint256)", "8ae18dfd": "setRemainingLockDate(uint256)", +"8ae1d6cb": "defineContractorCommercial(address)", "8ae1d8d4": "StatsTotalSupply()", +"8ae1f249": "increaseIlkDebtCeiling(address,bytes32,uint256,bool)", +"8ae20dc9": "authFacts(address,uint32)", +"8ae2344b": "transferEdrAddr(address)", +"8ae260c0": "importFeeIndex(uint256)", +"8ae39cac": "rewardPerBlock()", "8ae3beb2": "setPending(bool)", "8ae4200a": "revokePrivilege(string)", +"8ae42905": "setTransferProxy(address)", +"8ae458da": "getExternalPositionData(address,address)", "8ae470a9": "set_time(uint256)", "8ae475a9": "notorize(string)", +"8ae4a620": "tb(address)", "8ae5e0ec": "allowManyTokens(address[],address,uint256[],bool[])", "8ae5e372": "getMouthValue(uint256)", "8ae63d6d": "blockNum()", "8ae69807": "sendAirdrop(address[],bool)", "8ae69caa": "getCountryOwnershipList()", +"8ae73f3d": "calculateAdvanceIncentive()", "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)", +"8ae8c91a": "orca()", +"8ae8e8ea": "devolverPrestamo()", +"8ae91695": "setExchangeAddr(address)", "8ae986cf": "registrantApprove(address)", "8aea12b6": "c_paymentChannelBonusPercent()", "8aea2f6e": "totalFundingAmount()", +"8aea3767": "idxA()", +"8aea6e64": "userLock(uint256,bytes32,uint256)", +"8aea8f71": "completeSetup()", +"8aeaf811": "summonSeal(uint256)", +"8aeb3ff6": "emergencyWithdrawUser(uint256,uint256,address)", +"8aeb7e6a": "exchangeRateLastUpdatedBlockNumber()", +"8aeb8707": "seeBalance(address)", "8aeb8f98": "isNotEmpty(string,string)", +"8aeb927b": "maxDepositFirstYear()", "8aebebd9": "restartCycle()", +"8aec06e2": "getBuyerRecord(address,uint256)", +"8aec35dc": "daiToEthSwap(uint256,uint256,uint256)", +"8aec6a23": "mintNewNFT(address,uint256,string)", +"8aec8542": "getCurrentReward()", +"8aecbc17": "getDrillGrade(uint256)", +"8aecd5f0": "addRule(uint256,uint256,uint256,uint256)", "8aece8b0": "MRNToEth()", +"8aed0feb": "TotalAvailableStakes()", +"8aed3c32": "addAddress(bytes32)", "8aed434a": "oracle_values(uint256)", +"8aeda0e5": "INTEREST_RATE_BASE_RATE()", +"8aeda25a": "CREATOR_ROLE()", +"8aedcd31": "getFromDecimals()", +"8aedf4c6": "returnFundBNB(address,uint256)", "8aee0443": "getNumberOfPurchases()", "8aee3a54": "enableATMExchange()", +"8aee4cfe": "setFeeMultiplier(uint8)", +"8aee8127": "setRewardToken(address)", +"8aee8b7d": "revAddressesStack(address)", "8aef16d0": "appendSupplyChanges(address,bool,uint256)", +"8aef90ae": "MaxParcelsUpdated(uint256,uint256)", "8aef91f5": "TimeLeftBeforeCrowdsale()", +"8af03319": "NewFundsAllocated(address,uint256)", +"8af0c95f": "getTimeInPeriod(uint256)", +"8af0fce5": "directRedeem(uint256,uint256[])", "8af1bac9": "isMoron(address)", "8af1c825": "SALE_MIN_BUY()", +"8af1cbb9": "joined(address,address,address)", +"8af1d5bd": "getLPTokenByPair(address,address)", "8af2c328": "buyTokensFor(address,uint256,uint256)", "8af2ce26": "districtLimit()", "8af2d152": "limit6()", +"8af2dc49": "ICOEndDateSet(uint256)", +"8af36a1e": "batchTokenExtensionSetup2(address[])", +"8af3b0ff": "CreatePresaleDep(string[3],uint256[4],uint256[6],uint256[3],address[],uint256[],uint64[])", +"8af3c40e": "getUSDTAddress()", +"8af3ed38": "battleToFighterToSize(uint256,uint256)", +"8af416f6": "lockLPToken(address,uint256,uint256,address,bool,address)", +"8af4228c": "__init(bool,bool)", +"8af47775": "SetRCVRPriceFeed(address)", "8af49ab7": "maintain(uint256,uint256)", +"8af4d2d2": "pay_now(uint256[],uint256[])", "8af51833": "_transfer(address,string,address,string,uint256)", +"8af52acf": "shitcoinPrice(address,string)", +"8af5631c": "setPaymentRouter(address)", "8af57597": "getSingleDeveloper(address)", +"8af5f8a6": "deposit_ETH()", +"8af63772": "convertTokenWithTransfer(uint256,string)", "8af6c259": "totalDuration()", +"8af70336": "dodoPerBlock()", +"8af76b53": "takeOut(address)", "8af784dc": "expectEventsExact(address)", +"8af7cb8f": "claimReserves()", "8af82a2e": "getFirstUnsortedOffer()", +"8af8d4c3": "GAS_TOKEN()", +"8af8edfc": "bst()", +"8af94048": "mysticChestPrice()", +"8af9ce4a": "infoOfPool_legacy(address,address)", "8af9f493": "reap(address)", "8afa08bd": "setDrawDate(uint256)", "8afa46b1": "refunds()", "8afa7c6a": "createBasket(string,string,address[],uint256[],address,uint256)", +"8afadeb5": "totalBetsOne()", +"8afaff02": "LENDINGPOOL_REVISION()", +"8afbcac9": "endedStakeLists(address,uint256)", "8afbcdd0": "setEmissions(uint256[])", "8afbf669": "withdrawRemainingTokens()", "8afc3605": "Ownable()", +"8afc545b": "BunnyDescription(uint32,string)", +"8afc838d": "FxSwap(string,string,uint256,uint256,uint256,bytes32)", "8afcf1c9": "_transferSignership(address)", +"8afcfabc": "ExecutionRequested(uint256,address,uint256,bytes)", +"8afd119e": "adminTransfer()", "8afdc26e": "currentIcoPhaseBonus()", +"8afefd88": "_minGovernValueRate()", "8aff794d": "milestoneSystem()", +"8aff8671": "totalLoanTokens()", "8b00299b": "setSellComissionUnits(uint256)", "8b008f0f": "setBuyBackPrice(uint256)", "8b00c467": "growthTokensWallet()", +"8b01295d": "SECS_EPOCH()", "8b0133d5": "calcBonus(uint256,uint256)", +"8b01808c": "swapPiptToEth(uint256)", "8b018bca": "maxDividendDepth()", +"8b019c13": "getAssetTokenAvailable()", "8b01bcc3": "isJobCancel(uint256)", +"8b01f9dd": "Won(address,uint256)", "8b021df4": "safePayback(address,uint256)", "8b0254b6": "bilateralCancelOrder(bytes32)", "8b02c8b2": "addFundTX(uint256,uint256)", +"8b02e5ef": "CRV_LTV()", +"8b02fbf4": "tevvoToken()", "8b031e1c": "_checkFundingGoalReached()", "8b034136": "totalBids()", "8b036ee2": "PRE_SALE_BONUS_PERCENTAGE()", @@ -79443,36 +145420,63 @@ "8b0451d9": "CAT_PER_ETH_SECOND_EARLY_BIRD_RATE()", "8b048091": "getTicketsSoldToday()", "8b048645": "setCCH_edit_26(string)", +"8b04b496": "viewUniBurnRatio()", +"8b055460": "pushers(uint256)", +"8b055cc1": "unstaking(address,uint256,uint256)", "8b05afd2": "saveBytes(bytes32)", +"8b05d4c2": "enablerefund(address)", "8b06a662": "submitTotalSellOrder(bytes32,uint256,uint256)", +"8b071a7f": "allocPool()", +"8b07221b": "TickerDataByID(string)", "8b072f0e": "migratePlayer(address,address,uint256,uint256,uint256)", "8b073bb3": "changeStageBlock(uint256)", "8b077355": "saleDistributorAddress()", "8b07b006": "_tokensToSell()", "8b07edba": "getI1()", +"8b080ef7": "withdrawWithPermit(address,uint256,uint256,uint256,bytes32)", "8b08292d": "isValidAirDropForAll()", "8b087f3f": "signToCancelAgreement(uint256)", "8b092580": "preIcoHasEnded()", +"8b0931ef": "BurnEnabled()", "8b095904": "getBalancePercentageLimit()", "8b0980d9": "Phoenixcurrency()", +"8b099b23": "checkAllowance(address,address)", +"8b0b2e0b": "getSchainListSize(address)", "8b0b8820": "transactionStructFromBytesSeriality(bytes)", +"8b0b94cf": "setIcoEndDate(uint256)", "8b0b9cac": "setLatestTokenAllocation(address,address,uint256)", "8b0b9ed4": "getWinningNumber()", +"8b0bc845": "setMinStakePerNode(uint256)", +"8b0c34a5": "Transfer(address,address,int256)", +"8b0c659f": "initiateTimelockExpiration(bytes4,uint256,uint256)", "8b0c7f67": "CROWD_WAVE2_PERIOD()", +"8b0cb8ed": "Profit(address,uint256,uint256,uint256)", "8b0d0258": "amount(uint256)", +"8b0d4413": "transferreva(uint256)", +"8b0dcb4e": "assetInfo(address)", "8b0e093c": "INEXTokenNew()", "8b0e9f3f": "totalStake()", "8b0ee5a3": "GAS_PRICE()", +"8b0f2d8a": "annualized()", +"8b0f90e7": "getBankContract()", "8b0fc015": "submitChoose(address,uint256)", "8b0fc19a": "TokenSaleAfterSplit(uint256,uint256,uint256,address,address,bool,uint256)", "8b10297c": "test_0_ensureControllerWorks()", "8b104534": "tokensPerBatch()", +"8b105f0c": "CSTPercentage()", "8b1097c1": "setGeneMixerAddress(address,address)", +"8b109e30": "setData(address[],uint256[],uint256[])", +"8b110a77": "_releases(uint256)", +"8b110e09": "mVestingDays(address)", "8b110e0a": "MeshPoint(int256,string,address)", +"8b114e2d": "kl()", +"8b118afd": "rebaseTwins(int256,int256)", +"8b11cfb4": "addBounties(bytes32[],uint256[],uint256[],uint256[],uint256[],address[],string,string)", "8b11fb3e": "secureTokenPay(uint256)", "8b121c9d": "airdropMinting(address[],uint256[],int256)", "8b121cf0": "TransactionEscalated(uint256)", "8b122274": "setPriceIncrease(uint256)", +"8b1245a2": "CIR()", "8b128249": "MASSTokenPreSale(address,uint256,uint256)", "8b12befe": "accrueBonusTokens(address,address,uint256)", "8b12c25f": "updateReferralMasks(uint256,uint256)", @@ -79481,67 +145485,124 @@ "8b13b64b": "timeFrame()", "8b13d4e0": "addTeamMember(address,bytes32,address)", "8b13dd7b": "getAcceptance(address,uint256)", +"8b14035d": "participateMine6()", "8b14251f": "setNarcosCoreAddress(address,address)", +"8b142bb0": "basePrice10()", "8b144851": "getCompanyWallet()", +"8b1449fb": "getRecordIndexForCycleMembersIndexer(uint256,uint256)", +"8b14510d": "xfLobbyFlushEasyTest()", "8b14592a": "EtherNex(uint256,string,string,uint8)", +"8b145d6d": "current_root()", "8b147245": "update(bytes32)", "8b148ef6": "usedHashGuard(bytes32)", +"8b14fc64": "setTingRateOfSets(uint256[],uint256[])", +"8b152bc9": "queryUserX3LevelReward(address,uint8)", "8b156d4c": "EthernautsUpgrade()", "8b157515": "tokensInfoOfOwner(address)", +"8b157eb1": "tokenSwitches(uint256)", "8b15a605": "proposalDeposit()", +"8b15f642": "newFDT(string,string,address,uint256)", +"8b160fd9": "getAaveCoreAddress()", +"8b162dc1": "mint(address,uint256[],uint256)", +"8b1658f7": "genesisLeft()", "8b169c7a": "coinageContract()", +"8b16a3be": "bitten()", +"8b173e81": "setBaseShortRate(uint256)", +"8b174b1b": "productId(uint256)", +"8b177d92": "spentScore()", "8b17ab2f": "calculateOptions(uint256[9],uint32,uint32,bool)", +"8b17b33b": "findAvailableResource(address,uint256)", +"8b18328a": "expansionPercentReserveFund()", +"8b185b35": "lastMintBlock(address)", +"8b188d9d": "setFlashLender(address)", "8b1928a5": "getAllergies()", "8b19a476": "oraclize_query(string,string,uint256,uint256)", +"8b19bd6d": "UMIBiggestInvestorChanged(address,uint256)", +"8b1ab0d5": "ProtectionTxAdded(bytes32,bytes32,uint256)", "8b1acf9e": "ZcnoxToken()", "8b1ad6c6": "AuctionFinished(address,uint256)", +"8b1b2ba8": "setAllSymmetries(uint256,uint256,uint256,uint256,uint256,uint256)", "8b1b4036": "newTrade(string,string,uint256,uint256)", "8b1b925f": "isValid(address)", +"8b1bab0c": "wholow()", +"8b1bdcb2": "_uniswapETHPool()", +"8b1c4990": "depositCover(uint256)", "8b1c80e2": "MAIN_SALE_BONUS_PERCENTAGE_PHASE2()", "8b1c8792": "Blocktix(string,uint256,uint256)", +"8b1c8f76": "addMoreKYCAddress(address)", "8b1cc4f4": "tokenBurner(uint256)", "8b1cf21c": "unlocked(uint256)", "8b1cffe0": "newBrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"8b1d1770": "performClaim(uint256)", "8b1d37d4": "testUserCanSignUpAndLogin()", "8b1d67f9": "initial_disbursement()", "8b1db910": "hasSuicided()", +"8b1e199b": "vipers(uint256)", +"8b1ec1ba": "activateDeal(uint256)", +"8b1edf09": "setAllStaticReward(address)", +"8b1ee537": "dividendsRound(uint256)", "8b1f3206": "addlockAccount(address,uint256,uint256)", +"8b1f70b2": "multipleNFT(uint8,address,string)", +"8b1fa9b0": "SSL()", +"8b202176": "lenderName()", "8b20468b": "updatePalette(uint8,uint8,uint8,uint256)", +"8b2098c2": "DidLCOpen(bytes32,address,address,uint256,address,uint256,uint256)", "8b20d082": "_getPlayerThemeEffect(bytes,uint256)", "8b20d9fa": "get_probability(bytes32,uint32,uint32)", "8b214d5d": "imOwner()", +"8b219909": "lastEthDivPoints(address)", "8b21d307": "createProxyAddress()", +"8b21d411": "StarbasePurchasedOffChain(address,uint256,uint256,uint256,uint256,string)", "8b220a31": "addProcessableAllocation(address,uint256)", "8b223943": "stage3BeginTime()", "8b22c7b3": "keeppetToken()", "8b22e1df": "raiseDay1()", "8b23397a": "_getFashionParam(uint256,uint16,uint16,uint16)", "8b235f04": "lastSignedBlockHash()", +"8b236271": "vote9(address,address)", "8b24793d": "revealCeiling(uint256,uint256,uint256,bool,bytes32)", "8b24c3e0": "getRequiredMajor()", +"8b24dc3e": "popDebtFromQueue(uint256)", +"8b25321a": "uploaders(uint256)", +"8b257989": "executionDelay()", "8b257d3d": "isValidSignature(bytes32,uint8,bytes32,bytes32)", +"8b2592cf": "updateStartBlock(uint256,bool)", "8b259bdb": "setupIco(uint256,uint256)", +"8b269623": "AffiliateResult(address,address,uint256)", +"8b26cb3d": "anj()", +"8b2704ec": "setController()", +"8b27306d": "marketingTokens()", +"8b276c2c": "setBondTerms(uint256,uint256,uint256)", "8b278707": "addFeeFeedBack(address,string)", "8b278a30": "updateBanThreshold(uint256)", +"8b27bace": "getTestaReward(uint256)", "8b27c179": "maxPlay()", +"8b27f7f5": "deregisterUpgrader(address)", "8b281018": "sendFunds(uint256)", "8b2886ca": "setNorthPoleAddress(address)", "8b28ab1e": "calculateFee(address,uint256)", "8b28df17": "NCCUyen()", "8b2909cf": "tokensFromPreviousTokensale()", "8b290a72": "employeeShare()", +"8b2919a4": "nyt()", "8b294960": "balanceInTranche()", "8b299903": "turn()", "8b29b4fc": "setArray(string,string)", "8b29e88b": "icoTokenCap()", +"8b29eafe": "test_addmod(uint256,uint256)", "8b2a6f58": "cancelEpochUpTo(uint256)", "8b2a81ed": "HashGardToken()", "8b2a9606": "addDigitalArtSellingItem(uint256,uint128)", +"8b2ac9cd": "CrydrViewRemovedEvent(address,string)", "8b2ad32e": "getSketchesOnOfferWithHolder(address)", "8b2ae073": "setCouponMulFactor(uint256)", +"8b2b39fc": "getAllAthletes()", "8b2b423a": "privateSaleAmount()", +"8b2b7225": "notLock(address)", +"8b2bc0e1": "BASE_INTEREST_RATE_START()", "8b2be40e": "firstCurrentAmount()", "8b2c434c": "CryptoGiants()", +"8b2c5801": "totalDailyPayouts(uint256,address)", "8b2d2dca": "setAllowMarketplace(bool)", "8b2d4ed1": "creatorsPoolAddrs(uint256)", "8b2de796": "housePercentOfTotal()", @@ -79552,98 +145613,188 @@ "8b2e92ce": "rewardAngel()", "8b2ef965": "securityDepositRegistry()", "8b2f1652": "transcoderStatus(address)", +"8b2f569d": "rewardPreview(address)", "8b2f7af3": "CalculateAllocatedUcash()", +"8b2f8a38": "rowsCount(uint256)", +"8b2fc896": "UserIndex(address)", "8b3049e1": "lotteryByETH5(address)", +"8b30b516": "redeemIdleToken(uint256)", +"8b310180": "totalTokenReceived()", +"8b312aa6": "create(uint256,address[],uint256[],uint256,uint256,bool,bytes32[])", +"8b316050": "setOwnerPayable(address)", "8b31aaca": "ZOB()", "8b31bd50": "appreciationRate()", "8b322791": "confirmCrowdsaleEnd()", +"8b3256fa": "setStakingPurchaser(address)", "8b325902": "totalTokenMintedOpen()", "8b3272dc": "setUseService(bool)", +"8b328510": "totalTokenSold_(address)", +"8b328f74": "addaccountToPayNode(address,address)", "8b3294e5": "addRecipientUpdate(bytes32,bytes32)", "8b32f62a": "TEAM_AMOUNT()", +"8b32fa23": "getEthValue(uint256)", +"8b334686": "createCounterfactualWallet(address,address,address,bytes32,uint256)", "8b33b4b2": "operations()", "8b3437c5": "setDebugNow(uint256)", "8b343e8f": "getMemberCredit(address)", "8b34839f": "claimTokensEnabled()", "8b34a4b3": "nestedSecondAllToAll(uint256)", +"8b3519fd": "NewBettingSucceed(address,uint256)", "8b35a244": "partner2()", "8b360f4d": "teamSupply24Months()", +"8b3651ad": "distributeInterest()", +"8b36e64e": "withdrawFeePercent(uint256)", "8b36ed08": "CmmToken()", "8b37112b": "doReclaim(address,uint256)", "8b37691b": "TxOriginContract()", "8b37e656": "getCallScheduledBy(bytes32)", +"8b37ede6": "addPair(address,address,uint48,string,uint256,string,uint256)", "8b384f9f": "getMenu()", +"8b385701": "supplyAfterRebase()", +"8b386be1": "onAdminUserChanged(address,address)", "8b392dff": "mModerators(address)", +"8b3948bd": "priceUsd()", +"8b395674": "REI03()", "8b39bdba": "tokensDaily()", +"8b3a5fd9": "bidder(uint256)", "8b3aa967": "getDepositDelta()", "8b3ac630": "buyShip(uint256,address)", +"8b3b5bb3": "claimFrequency()", +"8b3c2ea5": "getStakeholderBalance(uint256,address)", "8b3c4f6f": "Register(bytes4)", +"8b3c99e3": "payment(uint256)", "8b3ca352": "CFL()", "8b3caf37": "Operatable()", "8b3cda96": "IotPC(bytes32,bytes20,uint256,address,uint256,uint256)", "8b3d10bf": "BMCTToken()", +"8b3d6d94": "getThreeTeamLongestRuned()", +"8b3d98e4": "getOriginAddress(bytes32,uint8,bytes32,bytes32)", "8b3dd749": "getInitializationBlock()", "8b3e23d9": "preIcoSupply()", +"8b3e3897": "checkForpositiveLPChange(address,uint256,uint256)", +"8b3e40f6": "sellerBalance(uint256)", +"8b3e98f5": "_isLocked(address)", +"8b3e9a05": "sellCrv()", "8b3edbdf": "changeManufacturerWallet(address)", "8b3f0337": "extractNibble(bytes32,uint256)", +"8b3f5cf9": "submitClaim(bytes32,bytes32,bytes32,uint256,uint256,address,uint256,address,uint8,bytes32,bytes32)", +"8b3f8088": "issuanceData(address)", "8b3f863f": "getUserType(address)", +"8b3f9318": "LGE_ROLE()", "8b40594d": "tokenExchangeRatePreSale()", "8b409cec": "addRelease(bytes32,string)", +"8b41166c": "delegate(address,uint96)", +"8b41cdcd": "_hashedSignaturesArray(uint256)", +"8b424267": "rewardFee()", +"8b42a40a": "setDefaultGasPrice(uint256)", "8b42ad37": "test_twoFalseAssertNoMessage()", "8b43234b": "endPeriodB()", "8b449ffd": "woyaoqianqian(uint256)", "8b44af0e": "transferETHS(address[])", "8b44c99a": "capture(bytes32)", +"8b44e97c": "_transactionFeeInEther()", "8b44f194": "TBOT()", +"8b44fdef": "tokenSymbolToSecurityTokenData(string)", "8b45ab24": "SoccerBet(string,uint256,address)", "8b45ce03": "_cancelVote(address,address,uint256)", "8b46e1f1": "getVercodesOfCampaign(bytes32)", +"8b47145f": "depositOneCoin()", "8b473c3d": "getKeysByDeviceId(uint8,uint8)", "8b477adb": "transferFromByLegacy(address,address,address,uint256)", "8b47c10b": "ERC721token()", "8b490893": "CBO()", +"8b490c1f": "getRemainingDowntime()", +"8b494708": "convert_shares_rate(address,address,uint256)", "8b49644d": "test_invalidProposalBytecode()", +"8b49d47e": "_msgData()", +"8b49ecf9": "distribute(uint256,uint128)", +"8b4a59f5": "joinPool(address,uint256,uint256[],uint8)", +"8b4a5e9c": "currentFragmentsPrice()", "8b4a781c": "getVoters(bytes32)", +"8b4b18c3": "createSetNewOwnerProposal(uint256,address)", "8b4b891b": "Duarte()", "8b4b8a26": "updatePriceTier(uint8,uint256)", +"8b4ba6bc": "_setPoolPrivacy(bool)", +"8b4bccf4": "joinfarm(address,uint256,uint256)", "8b4bf731": "setEtherPriceUSD(uint256)", "8b4c40b0": "donateETH()", "8b4c4307": "EstLiquidationCap()", +"8b4c80ae": "setTargetAsset(address)", +"8b4cb0ec": "swap(bytes32,bytes32,bytes32,bytes32,uint256,uint128)", +"8b4cc312": "gmd()", +"8b4ce1e6": "pauseWithdrawal(address)", "8b4ce7ce": "updateRegionPixelPrice(uint256,uint256)", +"8b4cee08": "setSellFee(uint256)", +"8b4d0574": "removeAllowedErc1155Contracts(address[])", "8b4d199e": "recordTransaction(address,uint256,uint64,uint64,uint64)", +"8b4d23e6": "supportedReqIds(uint256)", "8b4d3f20": "Xin(uint256,string,string)", "8b4d56de": "createAndJoinCDPDai(uint256)", +"8b4dd229": "removeAddressesFromFrozenlist(address[])", +"8b4e2431": "depositBalances(address,address,uint256)", "8b4e79c2": "delegateFromPool(uint96)", "8b4e8a6a": "MedED()", +"8b4ebb43": "getUserVestingAtIndex(address,address,uint256)", +"8b4ed2f3": "getMinerMinMineAmountInWei()", "8b4ef7d4": "ContractAdded(string,address)", +"8b4f3b2c": "setReserveRatio(uint256)", "8b4fac8e": "testsignature()", +"8b4feb6a": "root1()", +"8b4fefe6": "_assertStakingPoolExists(bytes32)", "8b4fff3e": "register(address,string,string,string,uint256,string)", "8b50cd34": "attackTile(address,uint16,uint256,bool,bool)", +"8b50dd0c": "getTransferFromArray(uint256)", "8b51365b": "set82Mode(bool,bool)", +"8b514f8c": "executeOperation(address,uint256,uint256)", "8b519e09": "mainSaleEnd()", +"8b519fd9": "addCollateralRewards(uint256)", +"8b51c6c4": "_kToken()", "8b51ca42": "roleList(bytes32,bytes32,address)", "8b51d13f": "getConfirmationCount(uint256)", "8b52463a": "commissionerAuctionCancelled(uint32)", +"8b525d0c": "lockedTokenBalances(address)", +"8b529854": "cancelTransfer()", "8b533562": "giftsOfOwner(address)", "8b534dd3": "goldenTicketMoved(address)", +"8b536979": "removeVesting(uint256,address)", "8b53808b": "ForwardToEIF()", "8b53cbaa": "addNode(string,uint8)", "8b5406af": "angelLockingPeriod()", "8b542d74": "test_twoValidEqInt()", "8b543b80": "maximumCredit(address)", "8b5462da": "getMy()", +"8b54d1fd": "deactive(address,uint256)", +"8b55278c": "updateIsValidUniswapProxy()", +"8b552a7a": "Candy()", +"8b555789": "multisigs(bytes32)", "8b55c1b3": "pushPlayer(address)", +"8b56046b": "AAVE_LENDING_POOL()", +"8b563b74": "BetMade(uint256,uint256,address,uint256)", +"8b5665f0": "liquiditystore()", +"8b569b2b": "nextMemberFillBox(uint256)", "8b56aff8": "createPromoMonster(uint256,address)", +"8b56b77a": "token_addr()", "8b57192b": "Woleum()", +"8b571f7e": "miningStart()", +"8b5722f4": "getCurrencyOfCover(uint256)", "8b57ebc6": "claimSegments()", "8b57f150": "newUserReward()", +"8b586723": "addSyncPool(address)", "8b587b82": "createPuppySiringAuctiona(uint256,uint256,uint256,uint256)", +"8b58c569": "rarity(uint256)", "8b58c64c": "getUserCap(address)", "8b595440": "setBurnAdminApproval(address,address,address)", "8b5a17df": "frozedCount()", +"8b5a4474": "opportunityNAVInfo(bytes32)", "8b5a64fb": "registerNameXname(string,bytes32,bool,uint8)", +"8b5a6a08": "setMonetaryPolicy(address)", +"8b5a7dba": "redemptionPriceUpdateTime()", +"8b5aaa7f": "Websites(string)", +"8b5b1321": "payrate1()", "8b5b1c9a": "setPools(uint16,uint16,uint16)", "8b5b4228": "listTiers()", +"8b5b81c5": "C12(bytes)", +"8b5b87c1": "addVerifiedMinterRole(address)", "8b5b9ccc": "getPlayers()", "8b5bc550": "WPAYReward()", "8b5c37c3": "L19_Token()", @@ -79651,13 +145802,22 @@ "8b5dc8a5": "IsAllowed(address)", "8b5de2d9": "FunFairSale()", "8b5e331c": "HatchEgg()", +"8b5e51d2": "tokenOwners(address,uint256)", +"8b5e608b": "poolWeight(address)", "8b5e6679": "setNewIco(uint256,uint256,uint256,uint256,uint256)", +"8b5f37ee": "initializeCrowdsale(uint256,uint256,address,uint256)", "8b5f42ca": "addDataStream(address,string,bytes32)", "8b5ff1d9": "batchDeleteHpbNodeCache(address[])", "8b603300": "updateLocation(int256,int256)", "8b6084e4": "switchState()", "8b615813": "fundLockTransfer(address,uint256)", +"8b619183": "artical()", +"8b61f94b": "LogPayInterestForOrder(bytes32,address,uint256,uint256,uint256)", +"8b61ff24": "migrateLiquidity(address,address,address,address[])", +"8b6297d4": "CreateDepositorAddressToDepositRecordMapping(address,uint256,uint256,uint256,uint256,bool)", "8b629cbc": "m_ETHPriceUpdateInterval()", +"8b62f437": "isAvatarChild(uint256)", +"8b6398ba": "addLGELiquidityETH(bool)", "8b63c0e8": "returnTokenDepositState(address[2],uint256[7],uint8,bytes32[2])", "8b63c86f": "setupRace(uint32,uint32)", "8b64574b": "nextFreeze()", @@ -79665,7 +145825,10 @@ "8b649b94": "roundLength()", "8b64b3af": "advisors_address()", "8b64d70e": "owner_set_time_limit(uint256)", +"8b650462": "isLevelUp(address)", +"8b6641ba": "validateProm(bytes32)", "8b66bf68": "takeMyMoney(bytes32)", +"8b66c033": "stakeTRY()", "8b66d153": "STSTEST()", "8b66e3b4": "hasPlayersInRound(uint256)", "8b6715cd": "getTotalRankTokens()", @@ -79674,91 +145837,163 @@ "8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", "8b67d56e": "getContributorsWallet()", "8b67ef19": "distance(uint8,uint8,uint8,uint8)", +"8b686ee8": "compoundMint(uint256,address)", "8b68cd9d": "rndMax_()", +"8b68e35c": "addNewInvictusFund(address,uint256)", "8b692479": "addProduct(uint256,uint256)", "8b6932f1": "saleTimeOver()", +"8b695685": "setDividendPoolData(uint256)", "8b69759d": "removeAuthorizer(address)", "8b699fbb": "KiemTra(uint256)", "8b6aacc8": "stopSendWebGift()", +"8b6bb010": "blueprintExists(string)", "8b6bd650": "ChangeCoinPresale()", "8b6bf3dd": "intervalueToken(uint256,string,string)", "8b6c1cfb": "totalHeldSupply()", "8b6c69e5": "presaleLimitUnits()", +"8b6d5933": "distributeBonusToken(address,uint256)", "8b6d6e48": "GoldPurityToken()", "8b6d6f1d": "checksOn()", "8b6dde89": "OwnerFreeze(uint256,address)", "8b6df6bf": "DEMOHASHTOKEN(uint256,string,uint8,string)", "8b6e10ac": "allBalances(address[],address)", +"8b6e5538": "returnPendingTokens()", +"8b6ea7bb": "getYieldStream(address)", +"8b6ef1c6": "priceWithFees(uint256)", "8b6f8646": "CHCTokenERC20()", "8b6f894f": "releaseEscrow(address)", +"8b6fa737": "last_epoch_total_stake_()", "8b6fb3ac": "GetOrganNumber()", "8b6fc452": "tip(address,uint256)", +"8b6fdf38": "get_holderBonusDue(address)", +"8b6ff57b": "pendingYGYRewards()", "8b7001d0": "ReceivedBCH(address,uint256,string)", +"8b70202d": "getGnosisInvRate(uint256)", +"8b70448d": "TokensBurned(uint256,uint256,address)", +"8b70f359": "minerBlockLastClaimedOn(address)", "8b7116e4": "reviewActiveMembers(uint256,uint256)", "8b7261bd": "fetchAllVoteResultForNodes(uint256)", "8b72a2ec": "transferPunk(address,uint256)", "8b72ddf7": "setMinimalTokens(uint256)", +"8b73061f": "setSeeAlso(uint256,uint256)", "8b7314e3": "BEToken()", "8b7358a0": "getPoliceReportResult(uint256,address)", "8b73a46b": "getNumberOfMembers()", "8b73c10e": "buyChibiWithFcf(string,string,uint8,uint256)", +"8b744891": "payToSwitch()", "8b745ff2": "valueBlocked(address)", +"8b752bb0": "minted(address,address)", +"8b76ba64": "addFreeAward(address,uint256)", "8b76e976": "setRef(uint256,address)", +"8b76f955": "withdrawUploadedFund(uint256)", "8b77071c": "profitEth()", +"8b7727e6": "splitToken(uint256,uint8)", +"8b777372": "updateServicePoolVestingDays(address,uint256)", "8b78a388": "reduceallrunmoney(address[],uint256[])", +"8b78d541": "updateTransferData(address,address,uint256,uint256)", "8b79bb43": "MTelCoin()", +"8b79dedb": "sellOnBalancerBasic(address,address,uint256)", "8b7a01e3": "depositOwnership(address)", +"8b7ace3b": "removeMARKETPLACE(address)", +"8b7af10e": "get_game_asset_price(string)", "8b7afe2e": "contractBalance()", "8b7b45d9": "hashSchema(string,string)", "8b7bcc86": "numWinners()", "8b7bf3eb": "getAdminCount()", "8b7c34d4": "setCompte_12(string)", +"8b7c4aff": "teamPercentages(uint256)", +"8b7c8109": "MINT_CUSD_SIG()", "8b7d38a1": "sPerDate()", "8b7d6b05": "makerUnlockedKnc(address)", "8b7e7a2e": "TBEToken()", +"8b7ee7e4": "CONTRACT_SOIL_ERC20_TOKEN()", "8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", "8b7f4cb7": "_calcDate0(uint256)", "8b7fe5be": "DonationEvent(address,uint256)", "8b800e6f": "migrationCounter()", +"8b802431": "getPacketAddresses(uint32)", +"8b805d7a": "getUserTranches2(address)", "8b805e65": "setUsers(address)", "8b80bd19": "Migrated(address,uint256)", "8b80fd5a": "extraDataToSubcourtIDAndMinJurors(bytes)", "8b810c36": "epoch(address)", +"8b811719": "limitTransactions()", +"8b817791": "mintBunny(uint256,uint256)", "8b81b1af": "getLastOwner()", +"8b81fe67": "TokensReleased(address,uint256,uint256,uint256)", "8b8211a1": "closeSale1()", +"8b822c52": "privateOffering(uint256)", "8b82f4bc": "PAYCOINLY()", "8b83209b": "payee(uint256)", "8b832705": "getAmountOfGrantAccessInvestor(address)", "8b833318": "getArtworkGroup()", "8b8373ca": "AMBASSADOR_SIX()", "8b8414c4": "getPoaConsensus()", +"8b842904": "setPiptWrapper(address)", +"8b84577d": "packSale()", "8b845c1d": "withdrawCommisionToAddressAltCoin(address,uint256)", +"8b84767a": "getFloorDividends()", +"8b84925b": "getInteger()", +"8b849ded": "binarySearch(uint256)", +"8b84dbf4": "EtherWrapper()", +"8b84f17a": "getStakingTotalDays(uint256)", "8b8519a2": "frozenTimeOf(address)", +"8b853853": "addStrategy(address[],address[],uint256[])", "8b859409": "setRelease(bytes32,bytes32,string)", "8b863095": "setContractorProposal(uint256,bytes)", +"8b86e3e2": "LockProductActiveChange(uint32,bool)", +"8b87062c": "rewardPoolBalanceTransfer()", +"8b8738ce": "silverBoardsReserved()", +"8b876347": "userRewardPerTokenPaid(address)", "8b87c544": "getInventory(address)", "8b87e3b6": "bountyMinted()", +"8b881a5b": "checkTheThing()", "8b886d04": "setCatchable(uint32,bool)", "8b88a687": "getCost(address)", +"8b88c941": "getUnitJadeStealingIncreases(address,uint256)", "8b88c9cf": "setSpaceCraftAddress(address,address)", +"8b88cb94": "vestCmdNow1PercentInt(address,uint256)", +"8b8a0bae": "heliosEnergy()", +"8b8b2c36": "ENSController()", +"8b8ba692": "delegateTransferAndCall(uint256,uint256,uint256,address,uint256,bytes,uint8,uint8,bytes32,bytes32)", "8b8c1177": "changeTokenOffer(uint256)", "8b8c5ed9": "scheduleUnderwriteOraclizeCall(uint256,bytes32)", +"8b8c7e50": "getStage(uint256,uint256)", +"8b8cc9aa": "rewardsExtraPerPeriodCap()", +"8b8d246b": "setBot(address,uint256)", +"8b8d3684": "setBeyondExchangeAddress(address)", "8b8d7c04": "writeConditions(uint8,string)", +"8b8da272": "revise(uint256,uint32,string)", +"8b8ddc7a": "depositCounts(uint8)", "8b8e5fe2": "secondRewardPeriodEndBlock()", +"8b8e626a": "vote2(uint256,uint256)", +"8b8e902a": "ActivateAddress(address,bytes6)", +"8b8eaf35": "removePairExchangeRate(bytes32,bytes32)", "8b8ecffa": "teamAndFoundersWallet()", +"8b8efa16": "veisContract()", "8b8f8504": "NodeManager(address[],address[])", +"8b8fbd92": "P()", +"8b8fd3bd": "black()", +"8b906686": "addScanResults(uint256,address,uint8,bytes32,bytes32,uint256,bool)", "8b906ca5": "enterBidForSketch(uint256)", "8b90a378": "STATE_DONATION_ROUND_2()", +"8b90d5b4": "getSwapperRole()", "8b91124d": "getSubscriptionClosedAt(bytes32)", +"8b91bd73": "rewardClaimAll(address)", "8b91d5f6": "PRICE_CROWDSALE()", "8b91e9a2": "getSubscriptionNonce(bytes32)", "8b91f4a3": "ProofOfBitConnect()", "8b9299dc": "authorizeMany(address[50])", +"8b933b6c": "allowHalfLife()", "8b93509f": "addTeamtoBoard(uint16,address,uint8)", "8b935fb1": "keys(uint256,uint256)", +"8b93a997": "EvAccountPurchase(address,uint256,uint256,uint256)", "8b93d3fc": "stake(uint256,bytes32,uint256,uint256,uint256)", +"8b941549": "__redeemShares(uint256,bool)", "8b959014": "DPC(uint256,string,string)", "8b9596ed": "Eladporat()", +"8b95dd71": "setAddr(bytes32,uint256,bytes)", +"8b95e335": "priceCalculator()", "8b95ec0c": "testAddBalance()", "8b96801e": "soldTokensCount()", "8b969c33": "editTokenProperties(string,string,int256)", @@ -79766,104 +146001,183 @@ "8b9724d1": "setExclusiveRate(address,uint256,uint16,uint32)", "8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", "8b975028": "setCooldown(uint256,uint256,uint256)", +"8b97e0e0": "registerFree(string,string,uint256)", "8b9801b0": "TheHashSpeed()", "8b9847a5": "AmazonBestsellerLabs(uint256,string,uint8,string)", +"8b9852c3": "testRunBMLFuncsForCoverage()", +"8b986531": "setStake1(address)", "8b986566": "TokenTESTToken()", +"8b98a2c5": "PERM_HINT()", +"8b98c7fe": "_getAnswer(uint256)", +"8b98e7b1": "registerToVote()", +"8b991b53": "amIReady(address)", "8b9997fd": "getOwnerHoverText(address)", "8b99b742": "arbitrateCancelCampaign()", +"8b99f456": "addFile(bytes32,bytes,bytes32,bytes32,bytes32,bytes5,uint64,bytes5)", "8b9a167a": "aliceClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", +"8b9ac889": "OnPay(address,uint256)", "8b9add74": "minCapReached()", "8b9af5c1": "wmul(uint256,uint256)", +"8b9b19b2": "setProposalPrice(uint256)", "8b9b1cbd": "withdrawRemainder()", +"8b9b3fd7": "updateProject(uint256,string,string,string)", "8b9b62b1": "toB32(uint256,bytes,address)", "8b9bde27": "setNameHashByWriter(address,bytes32,address,bytes32)", +"8b9c5bc7": "getCbondInterestRateIfUpdated(address,uint256,uint256,bool)", "8b9c7a36": "initialStartPrice()", +"8b9c9489": "getWethTokenAddress()", "8b9ce419": "getBorrowAmount(uint256,uint256,bool)", "8b9ce6a6": "create(uint256,uint256,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"8b9d1207": "countPayouts()", "8b9d6899": "lockedAmountOf(address)", +"8b9df7b9": "_deopositBalances(address)", "8b9e2832": "mintRep(address,uint256)", "8b9e4768": "_level()", +"8b9e4f93": "depositERC20ForUser(address,address,uint256)", "8b9e5385": "MeterSlock(uint256,uint256,address)", +"8b9e60a3": "unbondFees()", +"8b9eb9ca": "achieveWorldPeace()", +"8b9ede47": "register(bytes32,address[],uint256,uint8,bytes32,bytes32)", "8b9efe2d": "lastCountAddress()", "8b9fae3f": "getETHback()", +"8b9ff23e": "BONUS_MULTIPLIER_4()", "8b9ff6b6": "left91(uint256)", +"8ba04d4f": "balanceOfyvm3CRV()", +"8ba17f86": "getVolume(address)", +"8ba19ca6": "transferEthAmount(uint256)", "8ba19d4f": "EGGS_TO_HATCH_1CRAB()", +"8ba1be4c": "claimReward(address,bytes,uint256,bytes)", "8ba1c353": "_scaleExp(uint32,int32)", "8ba1ebce": "updateGenVault(address)", "8ba209b6": "isAccountVerified(address)", +"8ba25eb4": "tokenTxnConfirmed(uint256,address)", +"8ba263be": "totalWithdrawalRequestedAmount(uint256)", "8ba28961": "spawn(uint32,int256,address)", +"8ba2b80d": "BalanceDebit(uint256)", +"8ba31a1c": "getDelegatorPoolsLength(address)", +"8ba32fc0": "claimDevFee()", "8ba39ea8": "getChecksum()", +"8ba3dbee": "isEndpointValid(bytes32)", "8ba3ee95": "setConverterRamp(address)", "8ba45307": "basePunish()", +"8ba46732": "startChangePercentSlippage(uint256)", "8ba47bdd": "ticker()", +"8ba4bb92": "setOwnership(address,address,bool)", "8ba4cc3c": "airdrop(address,uint256)", +"8ba51d61": "setUniswapV2Factory(address)", "8ba5306b": "getDefaultRecommAddr()", "8ba5758b": "HumanStandardToken(uint256,string,uint8,string,uint256)", "8ba5807c": "raceCount()", "8ba5882a": "manualOverrideEditionHighestBidAndBidder(uint256,address,uint256)", +"8ba5954a": "lockPoolSupply()", "8ba64328": "getParentOperation(bytes32,uint8,uint8)", "8ba677fa": "sendPremiumPack(uint256)", +"8ba69b5b": "changePool(uint256,address,bool)", +"8ba6b0c0": "setReferralFee(uint8,uint8)", "8ba7bdc4": "adminClaimTokenForUser(address)", +"8ba7cc9a": "getUserByinviteCode(string)", "8ba7e570": "executeCall(address,uint256,uint256,bytes)", "8ba7e7f2": "createHash(address,bytes32,bytes32)", "8ba7fe81": "updateActiveStatus(bool)", +"8ba81137": "_includedExchange(uint256)", "8ba88c9c": "internalRemoveManager(address)", "8ba8da61": "payback(uint64)", +"8ba8f14d": "toggleProjectIsLocked(uint256)", "8ba8ffc6": "buyGrapes()", +"8ba90e47": "boardRoomTime()", "8ba92763": "ABsCoin(address,uint256)", "8ba93fcb": "magicStore()", +"8ba9990a": "setNewExecutorFee(uint256)", "8ba9a7bb": "FACTOR_4()", +"8ba9b6db": "listingAddress()", "8ba9d9b0": "EmailSent(address,string,string)", "8ba9f354": "testClearBitSuccess()", "8baa28f7": "allocate(address,uint256,uint256,string,uint256)", +"8baa3fd4": "tokenWithRewards(uint256)", "8baa8b1f": "staker(bytes32,address)", +"8baaca6f": "dayMap(uint256)", "8bab6718": "investorsInfo(address)", "8bab8791": "testPkgUpdate()", +"8bab9916": "giveFogReward(address,uint256)", "8baba52a": "allStates()", +"8babbc4e": "directBonusOf(address)", +"8babf203": "transferEscapeHatch(address)", "8bace235": "kycAddresses(address)", "8bace717": "getPresaleAllocation(address,address)", "8baced64": "isInPool(address)", +"8bad0c0a": "renounceAdmin()", +"8bad3305": "totalStakedToken(address)", +"8bad38dd": "setComptroller(address)", "8bad5de9": "checkMinBalance(address)", "8bad8d8e": "reserveManyTokens(uint256[],uint256)", "8badbb8b": "ETPToken()", +"8bae023b": "getCrowdsaleInitData(address,address,address,uint256,uint256,uint256,uint256,uint256,address)", "8bae2a03": "getStoredFib()", "8baecc21": "revive(uint256)", "8baeefce": "stopTrade()", +"8baf1ade": "betToInitiator(uint256)", +"8baf2957": "safeRemoveLender(address)", +"8baf29b4": "transferred(address,address,uint256)", "8baf612f": "Ownable2()", "8baf7a0c": "CryptoPrueba()", "8bb04875": "executeRuling(uint256)", +"8bb0dfd2": "daiDebt()", "8bb0faee": "setRef(string,string)", +"8bb126a7": "getDuration(uint256)", "8bb19439": "isPending(uint256,uint256)", "8bb1a5ef": "executeDeal(uint256,string)", "8bb204d4": "setCaptainIndexToCount(uint32,uint256)", "8bb28de2": "minShare()", +"8bb2dba6": "redeemcETHTokens(uint256,address)", +"8bb2e1d6": "addLiquidity(bytes)", "8bb307a2": "getMyTokenBalances()", "8bb36848": "pollDataMultihash()", +"8bb3d1fe": "setBuoyAndPoolAddresses(address,address)", +"8bb48424": "geAllTimeTokenBalane(address)", +"8bb4b9f0": "PauseIco()", +"8bb4c8c6": "bidlToken()", "8bb55cae": "beforeExecuteForFutureBlockCall(address,uint256)", "8bb5d9c3": "setCounter(uint256)", +"8bb5db74": "cancelarContrato()", +"8bb5e069": "changeMinimumDepositBNBAmount(uint256)", +"8bb6406c": "holdingToken(uint256)", "8bb64abe": "releasableBonus(address)", +"8bb66d8a": "patronageOwedWithTimestamp()", +"8bb6a85a": "metaApprove(bytes,uint256,address,uint256,uint256)", +"8bb72d18": "communitylen()", "8bb75533": "split(string,string)", "8bb7819f": "curMaxBet()", "8bb87f5b": "isTank(address)", "8bb88db6": "EtherSmart()", "8bb8b2db": "getTokenPerEth()", "8bb93173": "getNextTimeAtkPlayer(address)", +"8bb9c5bf": "renounceRole(bytes32)", "8bb9fe58": "addStruct(uint256,string)", "8bba143c": "getNumberOfContributors()", "8bbade4e": "usdEth()", +"8bbb154c": "delegatecall_getReward()", +"8bbb19dc": "MAX_MAINTAINER_SHARE()", "8bbb594a": "createActiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", "8bbb5af7": "test1Fails()", "8bbb668b": "ItemSelling()", "8bbb9fca": "buyPresale(address)", "8bbbc7a2": "BitnanRewardToken(address)", +"8bbbeb72": "estimateOBELIXProvidedWithStartTimestamp(address)", +"8bbc5da3": "stakingBalancesPerShard(uint256)", +"8bbd0480": "TOTAL_TOKEN_LIMIT()", "8bbd309c": "BLTCoin(address)", +"8bbd70b1": "getLengthQueueTownTokenRequests()", "8bbd7f87": "removeMemberById(uint256,address,address)", "8bbda7e3": "setContent(string,bytes)", "8bbdcf67": "_createProduct(uint256,uint256,uint256,uint256,uint256)", +"8bbdcfdf": "awardedTimestamps(address)", "8bbdfaa6": "approveChange(address,uint256,bool)", "8bbe005d": "setGateGas(uint256)", "8bbe4719": "donateToPool()", +"8bbe88ed": "variable3()", +"8bbe8df7": "affiliateWhitelist(address,bool)", "8bbec9e4": "WALLET_T8EX_ADMIN()", +"8bbefe4b": "yeet()", "8bbf037c": "addService(string,string,int256,uint256,uint256,uint256)", "8bbf51b7": "DOW_WED()", "8bbf7330": "FlyCareToken()", @@ -79876,160 +146190,316 @@ "8bc12fd1": "cancelOrder(address[4],uint256[7],bool,uint8,uint8,bytes32,bytes32)", "8bc19bda": "setupRaffle(string)", "8bc19c04": "getPlacedNotes()", +"8bc1c02e": "exitETH(uint256,uint256)", "8bc30096": "numDrops()", +"8bc33af3": "timestamps(uint256)", +"8bc3a30f": "changeteamRewardsrate(uint256)", +"8bc410d3": "votesAmount(address)", "8bc4a65f": "unPackDecision(uint256)", "8bc5816a": "startStage1()", "8bc5aab0": "FundsRecovered()", "8bc5b3c5": "getExchangeInfo()", "8bc5f845": "sendToken(address[],uint256)", +"8bc64ad8": "getBirdBalanceMetadata(address,address)", +"8bc655bd": "createPackage(string,uint256,uint256)", +"8bc6715e": "opProduction(uint256,bool,bool,address,address,address,address,uint256,uint256,uint256)", "8bc6a72b": "adjustCut(uint256,uint256)", +"8bc6b251": "noOfMonthsCal()", "8bc70769": "BTToken(uint256,string,uint8,string)", +"8bc7672a": "getEstimatedAmountsOut(uint256,address,address)", +"8bc7e8c4": "withdrawalFee()", "8bc7fa9c": "getCrop(uint256)", "8bc82c9b": "registeredInMeeting(address,uint256,uint256,uint256)", "8bc85b03": "bonusEnd()", "8bc88d7c": "nameMiner(uint256,string)", +"8bc901ad": "setUseDefaultRebaseLag(bool)", "8bc97754": "popcnt64(uint64)", "8bc9b67f": "endOfGame(address)", "8bca15d6": "balancesCanSell(address)", +"8bca3efe": "makeEpochRewardBurnable(uint256)", +"8bca459c": "Produce(uint256,string)", +"8bca6559": "registerActiveCaller(address[])", +"8bca6d16": "denomination()", "8bcad96a": "AdminstratorAdded(address)", +"8bcb34af": "addWinnableToken(string,address)", "8bcb4250": "_bytesToUint(bytes)", +"8bcb6216": "RETURN_MIN_INDEX_VALUE()", "8bcb6f01": "getLoserAddressList()", "8bcba0b2": "_transferToContract(address,uint256,bytes)", "8bcba45a": "secondPartOfTeamTokensClaimed()", "8bcbb60b": "betsArePayed(address,uint256)", +"8bcc108c": "SetSwapEnabled(bool)", +"8bcc6fb1": "event_withdraw(address,uint256)", +"8bcc8801": "merchants()", +"8bcca7a5": "approve_375(address,uint256)", "8bccae3f": "tokensForCrowdsale()", "8bccb1b4": "EosPizzaSlice(uint256)", "8bccbf62": "setShares(address,uint256)", "8bcd0680": "CrowdsaleiPRONTOLiveICO()", +"8bcd33bd": "Description(string)", +"8bcd3e93": "withdrawTo()", +"8bcd8056": "oops()", +"8bcdcbf3": "stats(address)", "8bcddd5d": "getLogsNum(address,uint256)", "8bcdecd7": "getIssuerStatus(address,address)", "8bce09fa": "resolutionProposal(string,string,address,uint256)", +"8bce1fdf": "QuickBuy(uint256,uint256)", +"8bce5488": "createBox(string,uint256[2],int256[13],bool[3])", +"8bce6edd": "getTeam()", "8bcea54f": "viewComponent(address,uint256)", +"8bcee557": "quarterlyFee()", "8bcf0eea": "GCAP()", "8bcf649d": "GetRank(uint16)", +"8bcfe7ee": "setCurRate(uint256)", "8bcff416": "asyncSend(address,address,uint256)", "8bd031fe": "submitIssue(uint256)", +"8bd03f29": "viewUserDL(address,uint256)", "8bd0ba67": "addChild(address,address)", "8bd0f12b": "_deleteBool(bytes32)", +"8bd11355": "rbtcInSystem()", +"8bd11390": "exchangerImplementation()", +"8bd16b84": "yourBFTBalance(address)", "8bd1b610": "deleteTeller()", "8bd25857": "joinManual(address,uint48)", +"8bd259c5": "hodlBonds(address)", +"8bd2a967": "burnedFees()", "8bd30ba1": "KekToken()", "8bd317eb": "reclaim(address,uint256)", +"8bd31ef4": "getCSPDetails(bytes32,address,uint112,uint112)", "8bd379b5": "itDevAddr()", +"8bd44928": "paxContractAddress()", +"8bd46d24": "cat(address)", "8bd50488": "Policy(string,address,address,string)", "8bd50c1f": "privateSaleCloseTime()", +"8bd511eb": "orderWithFee(address,uint256)", "8bd53bea": "oraclizeFees()", "8bd56066": "WXC()", "8bd5d30f": "scoreGroups(bytes32,bytes32,bytes32,bytes32)", "8bd61f26": "tokensRemainder()", "8bd66bb3": "ModifyMine(uint256,bool,string,uint256,string)", "8bd6da16": "distributeXAIN(address[],uint256,uint256)", +"8bd6f304": "stonesOfWithTS(address)", +"8bd719ac": "setSupplyCrimeGold(uint256)", "8bd76535": "currentExchangePrice()", "8bd7920d": "BitcoinCashPrivate()", "8bd7df6e": "sharePot()", "8bd82b20": "getInCar()", "8bd8669e": "transferAllTokensToOwner()", "8bd87a69": "TimeMachineToken()", +"8bd92e48": "ConvertedToCUSD(address,uint256)", +"8bd9a2e0": "Set_Block_Weight(uint256)", +"8bd9a846": "approve_33(address,uint256)", "8bda1540": "getOldBalance(uint256,address)", +"8bda6dd6": "StakeEvent(address,uint256,uint256,uint256,uint256,address,address)", "8bdac196": "KLSToken(uint256,string,uint8,string)", +"8bdb1925": "verifyCallback(address,address,address,uint24)", +"8bdb2afa": "uniswapFactory()", "8bdbbca9": "GameChannel(address,uint256,uint256,address,address,uint256)", "8bdbee39": "str_length(string)", "8bdc16fe": "changeHouseOracle(address,uint256)", +"8bdc4f23": "retrieveValue()", "8bdc558d": "hash_ack()", "8bdc5a5f": "withdraw(address,address,uint8,bytes32,bytes32)", +"8bdc68fc": "updateScore(bytes,address,address,uint256,uint32,bytes32)", +"8bdce1f3": "show_Available_Token_For_Selling()", +"8bdcf453": "getRunUUIDAtIndex(uint256,uint256)", +"8bddb0a6": "addMintWhitelisted(address)", +"8bde695f": "changeSuperOwnerByDAO(address)", "8bde7fc3": "ClickButton()", +"8bdf4dce": "burnReward(address)", "8bdff161": "getBonus()", +"8be0079c": "OwnershipTransferred(address,address)", +"8be0099c": "removeRelayer(uint256)", +"8be01664": "setAMMCurveTokenIndex(address,address[])", +"8be03ca1": "epochUpdate(uint256,uint256,uint256,uint256,uint256,uint256)", +"8be04552": "executeStrategy(uint256,bytes[][],bytes[][])", "8be1049d": "getTypeFromIndex(uint256,uint256)", "8be13d71": "countOpenPackage()", "8be18df9": "getOutcomeOfFirstPeriodByEntity(uint256)", +"8be1aafb": "protectPeriod(address,uint256)", +"8be200f0": "getUserMaxWithdrawAmount(address)", +"8be22bec": "allConversions(uint256)", +"8be23155": "getExpectedDeposit()", +"8be31b56": "onIcoDeadlineChanged(uint256,uint256)", "8be3a897": "_v3()", "8be3df0a": "vipPlacementNotDistributed()", +"8be41d7a": "NewPlayer(address,uint256,uint256)", "8be4339b": "packsPerClaim()", "8be4886c": "PUBLIC_RESERVED()", "8be52783": "decreaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", +"8be52995": "teamTimelock3()", +"8be5c466": "maximumNaturalUnit()", +"8be5fb9c": "withdrawPoolShare(uint256,uint256,uint8)", +"8be6c367": "CONTRACT_APOSTLE_AUCTION()", +"8be6cb8f": "initialReportBondTotal()", +"8be70e18": "TunaTransBurnRate(uint256)", +"8be764d6": "changThresholdOfTier(uint256,uint256)", +"8be799ac": "getReward(address,address,uint8)", "8be7a96a": "registerLockedTokens(address,uint256,uint256)", +"8be7e7c6": "newOwner_()", "8be7f4f5": "FOUNDER_FUND_1()", "8be7fe95": "CreateDigitalAssetToken(uint256,uint256,string,string,string,string)", "8be8f944": "lastBlock_f6()", "8be909a3": "mainSaleWeiCap()", "8be90b52": "averageGasPrice()", +"8be90ffb": "equip(uint256,address,uint256,address,uint256)", "8be94a45": "Gallery_MuYi_No1()", "8be97285": "MIN_TOKENS_TO_EXCHANGE()", +"8be988cd": "getResult1()", +"8be9b4f1": "changeEnsResolver(address)", "8be9ca21": "GerritCoin()", "8bea6a39": "safeSubtr3DL(uint256,uint256)", +"8bea72fb": "setManager2(address)", +"8beaa0e1": "partnerController(uint256)", "8beac22d": "STAEtoken()", +"8beaf7d7": "initialize(string,uint256)", "8beb1af1": "PresalePool(address,address,address,uint256,uint256)", "8beb60b6": "setAdminFee(uint256)", "8beb9f12": "moveBlockValue(uint8,uint8,uint8,uint8,uint256)", "8bec5b31": "reserveOwnership(address)", "8bec683f": "getID_control()", +"8bed3d77": "getBarStaker(uint256,uint256)", +"8bed69eb": "membersLength(uint256)", +"8bed91b6": "updateNetAssetValueUSD(address,uint256)", +"8bedf3bb": "getPositionNotionalAndUnrealizedPnl(address,address,uint8)", +"8bee0e96": "supplyYouForPriIEO()", "8bee241b": "delegateOperation()", "8bee78e6": "buySharesFromListing(uint256)", +"8bef2629": "getUserEpochLength(address)", "8bef5222": "CONFIG_MAX_TICKETS()", +"8bef6369": "nTokenController()", "8bef7ba5": "updateBalances(address)", +"8bf063b9": "approve_428(address,uint256)", +"8bf09d84": "proof(bytes32,bytes32,bytes32,bytes32)", "8bf0af3e": "purchaseTokens(uint256,uint256)", +"8bf1321f": "popPerBlockCycleFour()", "8bf13a30": "UTCStop()", +"8bf13cf1": "removeFromMintWhitelist(address)", +"8bf1acff": "txTax()", +"8bf1ad4c": "getActiveGrants(address)", +"8bf1efd8": "forgeAddress()", +"8bf29455": "UnstakeToBalance(uint256)", +"8bf2a0d8": "DistributorChanged(address,bool)", +"8bf2fde9": "feeDiscountsLastUpdate(address)", +"8bf30e7f": "Cancel(uint256)", "8bf34237": "addPartner(address)", "8bf35316": "givePermission(address,address,uint256)", +"8bf3b573": "minGetBonus()", "8bf4515c": "read(bytes)", +"8bf45f39": "recoverIcoTokens()", +"8bf50890": "star(uint256)", +"8bf51028": "DOMAIN_SEPARATOR_multi(address)", "8bf57f4e": "getTimestamp(address)", "8bf60537": "setDividendManager(address)", "8bf62f14": "EtheropolyShrimpFarmer(address)", "8bf68690": "mintToken(uint256,address,uint256,bytes32,uint8)", +"8bf6e410": "r3()", "8bf74527": "EMISSION_FOR_SALESTAGE7()", +"8bf78874": "authVersion()", +"8bf8195c": "updateProof(string)", +"8bf854da": "bigbonus()", "8bf85ef0": "SigmaIOToken()", "8bf87123": "_transfer(address,address,uint40)", "8bf8a338": "getAttribute(bytes32,string)", +"8bf972b2": "TokenPrice(uint256)", +"8bfa3bc9": "totalSpl()", +"8bfa3e26": "InvariantCheckFailed(uint256,uint256,uint256,uint256)", "8bfa4b4e": "tokenAdvisor()", +"8bfa7550": "I_MAX_SPEND()", "8bfac3bb": "updateBalances(address,bytes32,string,uint256)", +"8bfaf101": "awardItem(address,string,string)", "8bfb07c9": "release(address,address,uint256)", +"8bfb75e7": "getUniq8()", "8bfb85c3": "agreeAmendment()", "8bfbc753": "setEthBonus(uint256)", "8bfc2f33": "delegateDAOTokens(uint256)", +"8bfcbe89": "getCountOfRewards()", +"8bfdafc8": "changeMaxETH(uint256)", "8bfe0aec": "getNextExit(address)", "8bfe4e0b": "GaillardToken()", "8bfe88c5": "ArteufToken(address,address)", +"8bffa799": "GetCampaignImageLink(uint24)", +"8bffbbf1": "subBorrowTotalAmount(uint256)", "8bffc74d": "mainstreetToken()", +"8bffc9c0": "getPlaceNumber()", "8bfff5a0": "setPurchaseableMode(uint256,bool,uint256)", "8c003134": "Raffle_ID()", +"8c008e1d": "_emitDeposited(address,uint256)", "8c00ce76": "unhalt_30day()", +"8c0105bb": "addStudents(string,string,string,bytes32[],uint256)", "8c0124fb": "transferAndFreezeMulti(address[],uint256[],uint256[],uint256[])", +"8c017d60": "increaseTicket(bytes32)", +"8c01c3f7": "confirmImplementation(address)", +"8c0209da": "_encode_sol_bytes12(bytes12,uint256,bytes)", +"8c028dd0": "getEpochUserBalance(address,address,uint128)", +"8c02c993": "treasuryFurnaceAddress()", "8c02d13f": "MAX_NUMBER_OF_PREMIUM_SALES()", "8c02e029": "save2(address,bytes,string)", "8c0320de": "payforflag(string,string)", +"8c04166f": "maxSlippage()", "8c041d7c": "editProfile(string,bool,string,bool,uint256,bool,bool,bool,string,bool)", "8c042317": "startQuater()", +"8c044c07": "InvalidateSignature(bytes)", "8c04b985": "readSellTokenAmount()", +"8c04db9b": "getTaskCompletionRewardWithoutPenalties(bytes32,address,uint32)", +"8c051bf3": "bmul(uint256,uint256)", +"8c0523f9": "createOrder(bytes32,address,address,uint256,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"8c061594": "registerCompany(uint256,string,string)", "8c063686": "getRelayAuthority()", +"8c064e19": "setSpenderWithTimelock(address)", "8c06fa18": "PRICE_PREICO()", +"8c072617": "USEsold()", "8c088d98": "winMultiplePer()", +"8c08a4dc": "voteCandidate(uint256)", "8c08ae0d": "withdrawEtherRemaining()", +"8c08d88f": "uplatiNovacStudentu(uint256,address)", "8c09138f": "fourth()", "8c0989ab": "MultiServiceFactory(address)", +"8c098ea3": "computation(uint256)", +"8c09a2f9": "stakeState()", +"8c09b4c7": "ContestTeamRefundPaid(uint32,uint32,uint128)", "8c09bfdc": "shake(uint256)", +"8c0a3f12": "bestTeams(uint256)", "8c0a41f2": "gibtesnet()", +"8c0a964c": "howManyBeneficiariesDecide()", +"8c0b09d0": "cTokens(address)", "8c0b1588": "createNFT(uint256,address,bytes32,bytes32,bytes4)", "8c0b372d": "e6c65e93()", "8c0b4ae5": "setGenesMarketAddress(address,address)", +"8c0b5e22": "maxTxAmount()", +"8c0ba32f": "publicSwap()", "8c0bae5b": "releaseRedTeamTokens()", "8c0c0368": "_confirmOneSell()", +"8c0c2631": "adminSetBurnable(address,address)", +"8c0c9a25": "KYBER_ETH_MOCK_ADDRESS()", "8c0c9c07": "updateCampaignAbi(string)", "8c0cf897": "develop()", "8c0d0c29": "mark()", "8c0d4199": "lock(address,address,uint256,uint256,bool)", +"8c0d5b24": "_launchLimitBlocks()", "8c0d6593": "CustomDealICO(uint256,uint256,uint256,address,uint256,uint256)", "8c0dacf2": "deleteRecord(bytes32)", +"8c0dc387": "_synthsUSD()", +"8c0dd322": "DomainTransferred(bytes32,string)", "8c0dee9c": "operatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", "8c0e156d": "scheduleCall(bytes4,uint256,uint256)", "8c0e299a": "proposeCompanyAllocation(address,uint256)", "8c0e2a31": "regProxy(address)", +"8c0e34cf": "rewardOutOne()", "8c0e45f6": "test_openRegistryRules()", +"8c0e5882": "deploys(address)", +"8c0e811a": "timeLimitPerStockHeroID(uint32)", "8c0ead61": "_updateMLBPlayerId(uint256,uint256)", "8c0ec0d1": "changeClient(address)", "8c0f082c": "setFLKDForGas(uint256)", "8c0f8e11": "getWorkerScore(address)", +"8c0f9aac": "isPartner(address)", +"8c0fbc92": "turbo(address,address,uint256)", "8c0ff5b7": "maxWithdrawal()", "8c10671c": "addManyToWhitelist(address[])", +"8c10722c": "refinanceLoan(bytes32,address)", +"8c107799": "setFeeCalc(address)", +"8c10fef3": "requesterBaseDeposit()", "8c115322": "isP2PKH(bytes,uint256,uint256)", "8c118cf1": "verify(uint256,uint256,uint256,string,string,bytes32[2])", "8c12324a": "Mire()", @@ -80038,85 +146508,153 @@ "8c12d8f0": "arithmetics(uint256,uint256)", "8c133a77": "previligedBalances(address)", "8c133c25": "changeBetPrice(uint256)", +"8c137f80": "_usdtBuy(uint256)", +"8c13a845": "lastTradingFeeDistribution()", "8c13aabe": "lockStages(uint256)", "8c14db73": "testThrowsSaleWalletIncorrectBlock()", "8c155b5b": "tradeForTokens(address[2],address,bytes,bytes)", "8c156213": "generateHash(address,string)", +"8c15bf3c": "totalWETHEarmarkedForReferrers()", "8c160095": "deleteInt(bytes32)", "8c165146": "initSale1()", "8c165932": "sendShip(uint32,uint32,address)", "8c167076": "setHoldersList(address)", "8c172fa2": "getEvent(bytes32)", +"8c176d69": "ContributorStatement(address,uint256,string)", +"8c17ac7e": "_getMinableBalance(uint256,address,uint256,uint256)", "8c17c5ab": "setNowTime(uint256)", +"8c17cd1d": "liquidityTokenTotalSupplyOnInit()", "8c17fc91": "getWeaponsArmy2(uint256)", +"8c18f56b": "ethForLP()", "8c19773f": "addBlock(address)", "8c19c175": "getStageState(uint256)", "8c19d2ca": "setCombatWonTeam(uint256,uint128)", +"8c19ec8b": "toggleRewards(bool)", "8c1ab426": "WithdrawalofFunds(uint256)", +"8c1acc29": "depositLocked(uint256)", +"8c1b0d46": "_getUnderlyingName()", +"8c1c1367": "poolPHZT()", "8c1c7acc": "icoThreshold2()", "8c1d01c8": "defaultPayment()", +"8c1d17a9": "setNewIPCRates(uint256,bool,uint256,bool,uint256,bool,uint256,bool)", "8c1d4a0a": "GreenEcoMinerToken()", +"8c1d8049": "gg8(bytes8)", "8c1d8941": "transferLockedBalances(address,address,uint256)", "8c1d92af": "distributePresaleTokens(address[],uint256[])", "8c1d9f30": "isValidCandidate(bytes32)", "8c1e04a6": "updateGenerationDict(uint256,uint64)", "8c1e21da": "tokenPreSale()", +"8c1efee1": "isHandleAvailable(string)", +"8c1f0885": "GetBonusReceived()", "8c1f85e5": "FeeSetup(address,address,uint256)", +"8c200c4f": "updateAddresses(address,address,address,address,address,address,address)", +"8c201dc8": "updateToken(string,address)", +"8c20570b": "STAKING_ADDRESS()", "8c206979": "_freeze(uint256)", "8c2081b5": "RewardsCoin()", +"8c210975": "nftData(uint256)", "8c217d06": "zsjz(uint256,string,string)", "8c21f6bb": "getLockedGroup(uint8)", "8c21ffba": "supplyLockedB()", +"8c2243ae": "stakingEpochEndBlock()", +"8c224826": "incrementTokenDeposit(address,uint256)", +"8c227959": "distance_driven(address)", "8c22ac8b": "Account_frozen(address)", +"8c22d5d3": "changeLockSeconds(uint256)", "8c2305fd": "stakeBela(uint256)", +"8c231af9": "adjuster(address)", +"8c233fec": "cancelable(uint256)", +"8c234bff": "vbswapToLp0Route(uint256)", +"8c23e8ea": "ownerAddAdmin(address)", +"8c252b13": "pendingiCream(uint256,address)", "8c25466a": "mintPreSale(address,uint256)", "8c254c0b": "walletDev()", +"8c255a15": "daiDeposits()", "8c259654": "getRegistryDataRegistry()", "8c25f54e": "linkContracts(address)", "8c261e2c": "getHashRightPad()", "8c26691e": "RanToken(address,address)", "8c267b97": "cmoAddress()", +"8c269e6d": "WITHDRAWN_FEE()", "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()", +"8c278442": "_jail(uint256,uint256)", +"8c2882f1": "tokenIsRecieved()", "8c28c16e": "STAGE_TWO_ETHRaised()", +"8c28cbe8": "gulp(address)", "8c28fd6e": "mintHelper()", "8c2962b9": "setBuyAgent(address)", "8c299d0c": "AdoptionOfferCancelled(bytes5)", +"8c29b2d6": "userPackagesMap(address,uint256)", "8c29bce5": "setJoule(address)", +"8c2a1dd8": "dropPunk(string)", "8c2a5938": "setAllowedToBuyBack(bool)", +"8c2b0b91": "currentRouterContract()", +"8c2b229d": "EvNewInvestment(uint256,uint256,uint256,address,uint256,uint256[])", "8c2b8283": "WeiLaiExToken()", +"8c2c06e7": "set(int256,string)", +"8c2c359f": "setLiquidator(address,address)", +"8c2c3622": "projectTokenInfo(uint256)", +"8c2c3e69": "NO_LAND()", "8c2d1549": "getTotalMined()", "8c2d396f": "TelegramOpenNetworkContract()", +"8c2d8649": "setDollarPriceCeiling(uint256)", +"8c2de1a5": "enableTokens(address[])", +"8c2e51f4": "deactivateBeneficiary(uint8)", "8c2e6b3f": "ChangeSellRate(uint256)", +"8c2ea455": "dividendSupply()", +"8c2ebe59": "getProfitedCount()", "8c2ec28d": "TestCTR()", "8c2f04d9": "distributeUsingVaults(uint256,uint256,uint256,address)", "8c2f6458": "calculatePreviousPrice(uint256)", +"8c2f76b1": "stackingPoolAddress()", "8c30079a": "generateTeamTokens()", +"8c301df8": "getWhitelistedUserAtIndex(uint256)", "8c30779b": "getAvailableVestingAmount(address)", "8c3088c6": "HeritableWallet(address,address,uint256)", "8c308a71": "Anemoi(uint256,string,string)", "8c3135f2": "poolTokenBalance()", +"8c31886f": "setMinApprovalCounts(uint256)", +"8c31a96e": "loanIsCredible(uint256,uint256,uint256,uint256)", "8c31d67e": "getNoOfSoldToken()", "8c324604": "MAX_TOKENS_EARLY_INVESTORS()", +"8c328dbf": "balancesWei(address)", +"8c329b1a": "log(bool,bool,bool,address)", +"8c329e75": "grv(uint256)", +"8c32a2b1": "deposits(uint64)", "8c32c568": "Airdrop(address,uint256)", "8c32e774": "isMaxTokensReached()", "8c33417c": "WankCoin()", "8c335b4b": "oceanBonus()", +"8c3394da": "getbackLeftFnx(address)", "8c339a58": "QSHUCOIN()", "8c33a5c4": "RESEARCH_AND_DEVELOPMENT_TOKENS_PERCENT()", +"8c33c19c": "cancelGovernorChange()", +"8c33c9e4": "setMode(bool)", +"8c33f001": "CALL_TIMELIMIT_NUMERATOR()", "8c343aee": "TestIssued()", "8c346690": "toggleHalt(bool)", +"8c346c42": "getAddressFromTwoKeySingletonRegistry(string)", +"8c347733": "gamesCompleted(uint256)", +"8c34b7ab": "cfdState()", "8c34dbec": "bitcoing()", +"8c3508d8": "UNSIGNED_ORDER_SIZE()", +"8c358a03": "tokensBUY(address)", +"8c35c884": "FUNC_A47D1882(uint256,uint256,uint256,uint256)", +"8c35f34b": "addWSZO(uint256)", "8c363fda": "AbstractToken()", "8c366dd3": "newinitialSupply(uint256)", "8c3692c3": "popToken(address)", +"8c3693eb": "INITIAL_CIRCULATION_BBY()", "8c36ae89": "clearReward(address)", +"8c371999": "setUniswapFactoryAllowed(address[],bool[])", "8c374d8d": "releaseApproval(address)", "8c3753d7": "WEI_PER_FINNEY()", +"8c375462": "extraSpins(address)", "8c377ca6": "UnsetUsername(string,address)", "8c379133": "Water(string,string)", "8c37ce04": "MeetTokenBase()", @@ -80124,62 +146662,120 @@ "8c37e31e": "setSpawningManager(address)", "8c37edc4": "USN(address,address,bytes32,uint256,uint256,uint128)", "8c382e22": "checkIsAssetPartOwner(bytes32,address)", +"8c382eb2": "rawTotalPositionCollateral()", "8c3846e8": "ConsumerAddition(address)", +"8c38729d": "pynthSuspension(bytes32)", +"8c38a65c": "addInvestment(uint256,address)", "8c38eddd": "_clearAddressFromCrowdsale(address)", +"8c396220": "protocols(uint256)", +"8c396222": "stored(uint256)", "8c397363": "setFinancialAddress(address,address)", +"8c3980b0": "nextScheduleTime()", "8c39bf96": "DredgrSwapSolo(bytes5,bytes5,bytes32,bytes32,uint256,bytes32,bytes32,uint256)", "8c39cb93": "makeClaim(bytes32,string,uint256,bytes32,uint256,uint256,uint8,uint256)", +"8c3a28c9": "executeNewSetSignatures(uint8[],bytes32[],bytes32[],bytes)", +"8c3abc78": "sign_contract(uint32)", +"8c3b0ca8": "claimProceeds()", "8c3b4fea": "_addVesterManager(address)", "8c3b6f0e": "getCrystalGeneKindWeight(uint256)", +"8c3b990b": "getLatestRoundId()", +"8c3bc15a": "getWithdrawAmounts(address,address,uint256,uint256)", +"8c3bed9e": "setBitProInterestBlockSpan(uint256)", "8c3c00aa": "overdraftPeriodAmount()", "8c3c4b34": "getSaleStatus()", +"8c3c9cdd": "projectScriptByIndex(uint256,uint256)", +"8c3cb1e6": "ethUnpause()", +"8c3ce260": "allValsLength()", +"8c3ce63e": "transferInForLoop(uint256)", "8c3d5897": "MANHATTANPROXY2NDAVE()", +"8c3e0502": "coverage(bytes32)", "8c3e1ff1": "modexp(bytes,uint256,bytes)", +"8c3e8bac": "sqrt(bytes16)", "8c3e9e1a": "verifyYourself(string,uint256)", +"8c3e9f46": "setPartnerRegistry(address)", +"8c3ea925": "claimGlyph(uint256,uint256)", +"8c3ebe3d": "GameMining(address,uint256)", +"8c3f2244": "checkDataContains(uint256)", "8c3f71b2": "_getCurrentTradableToken()", +"8c3f8fa4": "variationPercX100()", "8c3f914a": "spread(bool)", "8c3fae8c": "BeeUnity(uint256,string,string)", +"8c3fe533": "tokenSaleEXDEXD(address)", +"8c402ac5": "vote(int8)", "8c404cf1": "stablesCities(uint256)", +"8c4056c5": "setLimitHold(bool)", +"8c40b590": "determineBlockReward(uint256,uint256,uint256,uint256,uint256)", "8c41399c": "view30()", "8c41d101": "LogAgreementAccepted(address)", "8c421815": "RefundedTokens(address,uint256)", +"8c429c74": "updateEVIX()", +"8c439867": "setErcToErcBridgesAllowed(address[])", "8c43a6f0": "updateBlockVoterProposal(uint256,address,bytes32)", "8c4406c1": "setInputName(uint256,uint256,uint256)", +"8c44074a": "queryUserCreditCanSellQuota(address)", "8c4430b4": "setFinalLotteryAddress(address)", +"8c445cab": "setScaleFactorsAndThreshold(uint256,uint256,uint256)", +"8c445d9c": "colorPerBlock()", +"8c4491af": "setRichness(uint256)", "8c44cb27": "creationQuantity()", "8c44dfb5": "bids_computed_cursor()", +"8c44e98d": "seed_systemBalances(address[],uint256[],uint256[],address[],address[],uint256[],uint256[])", "8c45cf24": "addJobContractMessage(uint256,string)", "8c461e97": "setValueAirDrop(uint256)", +"8c463869": "loanLifeSpan(address,uint256)", "8c46c7cd": "betAmount_()", +"8c472b1b": "overdueCb(uint256)", +"8c47a132": "wayfarerIncreaseBoard()", +"8c47a9f3": "G_NowUserId()", "8c47ddcc": "refundOwner()", +"8c4824b3": "sevenReserveTimeLock()", "8c4899ab": "ownerOfPlanet(uint256,uint256,uint256)", +"8c48e93e": "maxSafeLongSlot()", "8c497285": "ChangeAddressTrust(address,address,bool)", +"8c49f5e4": "usedXGT(address,uint256)", "8c4a6f62": "delMinter(address,address)", "8c4af723": "changeNewRoundDelay(uint256)", +"8c4afaf6": "blocksMined()", "8c4b0c58": "FrozenProfit(address,bool)", "8c4b0e7e": "setOrganiser(address)", "8c4b7300": "ViewBet()", "8c4b87d2": "chris()", +"8c4bc81b": "isAddressWhitelistedFrom(address)", +"8c4bce1c": "mainNominateNewGovernor(address)", "8c4c26a3": "BunToken(address)", "8c4c564d": "deletePoll(bytes32)", +"8c4cc0df": "feeCalc()", "8c4d3193": "getOrderDealTimeInterval()", +"8c4d35e5": "FeeUpdated(uint256)", "8c4d59d0": "ticketCounter()", "8c4dd5cd": "Democracy()", +"8c4deba0": "referralToken()", "8c4e3f32": "_setApprovalForAll(address,address,bool)", +"8c4e5de6": "log(address,bool,bool,uint256)", "8c4e8c21": "nextMintTime()", "8c4e9c50": "prepareSell(address,uint256)", "8c4ef31a": "getremainTokensperType(uint8)", "8c4f7dae": "getMatchCount()", +"8c4fa44a": "Pay(uint256,bytes)", +"8c4ff5fc": "MEDIUM_DIVISOR()", "8c500418": "getICODate()", "8c50d756": "bidSuccess(uint256,address,uint256)", +"8c513f5e": "weiUSD()", +"8c5143ea": "isRecipient(address)", "8c518026": "_preSale(address,uint256)", +"8c520bd5": "inventoryGoodsCount()", +"8c521693": "totalBalanceNormalizedDifference(uint256)", "8c523e27": "setFechHpbBallotAddrAddresss(address)", "8c529628": "getVoteFromProposal(uint256,uint256)", "8c52dc41": "enableRefunds()", "8c5344fa": "countThisRecursive(uint256)", "8c534d54": "getTokenTxnNum()", +"8c53b38d": "balanceOfYCRVyTUSD()", +"8c53e74f": "getLibrary(bytes8)", "8c53f61d": "receiveETH(address)", +"8c544246": "swapSaiToDai(address,uint256)", "8c546f81": "GNT()", +"8c5488c2": "PrintLog(address,string,uint256)", "8c549ef7": "COLOR_BROWN()", "8c55041c": "Announcement(address[],uint256,uint256)", "8c551742": "createItem(string,uint256)", @@ -80187,7 +146783,15 @@ "8c5597fd": "finalizeContributionEvent()", "8c561592": "canUpdateInvoicingAddress(string,address)", "8c564ebf": "freezeBypassing(address)", +"8c574ac4": "updateConfig(address,address,address,uint256,bool,uint256,uint256,uint256)", +"8c576fc3": "LATEST()", +"8c57804e": "compBorrowState(address)", +"8c579132": "indxAddress()", +"8c582503": "incrementTotalLoans()", +"8c5842cf": "approve_639(address,uint256)", "8c5871bf": "getLocksUnlockDate(address,uint256)", +"8c58d0a9": "currentTotalAmount()", +"8c58d61b": "eightReserveWallet()", "8c590917": "contribute(uint256,uint256)", "8c590b5d": "getAllMatingAnimals()", "8c59f7ca": "cancelOrder(address[5],uint256[6],bool,uint8,uint8,bytes32,bytes32)", @@ -80195,133 +146799,230 @@ "8c5a03bb": "SimpleDistributor()", "8c5aae96": "LocalsMembership()", "8c5ae183": "RemoveMod(address,address,bool)", +"8c5ae359": "MIP13c3SP6()", "8c5b830e": "getInviteeInfo(uint256)", +"8c5b8385": "contracts(string)", +"8c5b9565": "SpentTodayReset(uint256)", +"8c5bdaba": "_ceil(uint256,uint256)", +"8c5be1e5": "Approval(address,address,uint256)", +"8c5bf80f": "getNextGenericActionID(address,bytes,uint256)", +"8c5c3e62": "POINTS_FACTOR()", "8c5cc61c": "approvedreg(string,string,string,string)", "8c5ce82a": "powerTest(uint256,uint256,uint32,uint32)", "8c5d5e87": "ownerSetMod(bool)", +"8c5d8a87": "lockedTeamSupply()", +"8c5d9a27": "roleByDataType(uint256)", +"8c5dec63": "kashvir3()", "8c5e06b1": "Channel(address,address)", "8c5e2b0e": "MainSaleStart()", +"8c5e2f87": "totalSupplyForMarketOutcome(address,uint256)", "8c5f2d5d": "get_all_payment(uint256,address)", "8c5f6d5a": "SetDebugExtra(uint32,uint8)", "8c5f997e": "NewEntry(address,uint256,uint256,uint256)", +"8c5f9e74": "addManagers(address[])", "8c5fb7fb": "modifyMember(string,string,string,string)", +"8c5fbd08": "juniorBonds(uint256)", "8c60e806": "closeContributions()", "8c614502": "addCountry(address,uint256)", +"8c61757d": "setRecoveryVaultAppId(bytes32)", "8c618066": "addressOfName(string)", +"8c621e4c": "YFIGPerBlock()", +"8c62d305": "changeStakingPercentage(uint256)", +"8c630ea4": "setGoalFailedEvent(bytes32,bool)", "8c6310ac": "NextOpen()", +"8c633bad": "setBDIP01(uint256,uint256,address[])", +"8c635f36": "endSaleTimestamp()", "8c638152": "setApoderado(bytes32,bytes32,bytes32)", +"8c63f7d1": "setLimitAmountSaved(uint256)", "8c64400d": "updateTierDuration(uint256,uint256)", "8c648117": "actualPrice()", "8c6486c4": "sendRegistration()", +"8c64ea4a": "vaults(uint256)", "8c64eb4f": "switchCrowdState()", "8c655550": "advisorsAllocatedAmount()", +"8c656107": "minMPONDStake()", +"8c6577d4": "SetStorageContract(address)", "8c6589b2": "getLastSTCPrice()", +"8c658c34": "pieBorrowerIndex(address,address)", +"8c659ab7": "fromAddres()", +"8c65c81f": "rounds(uint256)", "8c65f15d": "clearBonuses()", +"8c6612fa": "MIN_TLR_TO_REDEEM()", "8c662ffa": "LogCollect(address,uint256,uint256)", "8c663229": "lastSellPrice()", "8c663ffc": "getBounsWithRoundID(uint256)", +"8c664db6": "setBondDepletionFloorPercent(uint256)", "8c66c9fc": "findBest()", "8c66d04f": "setFeeCalculator(address)", "8c66f294": "distributeFeeRewards(address[],uint256)", +"8c670262": "checkWinner(bytes32,uint256)", "8c676aaa": "CUZ()", +"8c677bac": "rolePrivilege(bytes32,bytes4)", "8c67f63a": "calculatePayment(uint256)", +"8c680798": "disableEtherlessTransfer()", "8c682bde": "setWinnerAndWithdrawAllFunds(address)", "8c6838ba": "getPost()", +"8c689788": "lastSettleTime()", "8c68bc3e": "SetContractorManager(address)", +"8c691b48": "withdrawUniV2(uint256)", "8c69554d": "OwnerRefunded(address,address,address,uint256)", "8c69930d": "getNewFallbackDepositEffectuation()", +"8c699f30": "unlockAddressAfterITO(address)", "8c69c559": "Crypbest()", +"8c6a244c": "setTransferAgent(address)", "8c6aefcf": "chip(uint256)", "8c6b6085": "supportNewVoter(address,address)", "8c6ba233": "isLateBy(address)", +"8c6c3080": "getHatchConfigFeatureIdAt(uint8,uint256)", +"8c6c38f1": "mintAndCreatePools(address,address,uint48,uint256,address,uint256,address,uint256)", +"8c6c67e2": "stakeFor(address,address,uint256,bytes,int256)", "8c6c8323": "buyTokens(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"8c6cd0cc": "setuserinfo(address,bool,uint256,uint256,uint256,uint64,uint64,uint64,address,address,bool)", +"8c6e0072": "ProtectionTxDone(bytes32)", +"8c6e25f7": "approve_221(address,uint256)", "8c6f2ec1": "setCompte_17(string)", +"8c6f896a": "confirmTimelockChange()", +"8c6fa27f": "createJigsaw(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8c6fa9bf": "_safeGetPartialAmountCeil(uint256,uint256,uint256)", "8c6fc437": "standardICO(string,string,uint8,address,uint256[],uint256[],address[2],address[])", "8c6fd8ec": "removeByIndex(uint256)", "8c701ba8": "releaseRoots()", +"8c716943": "addressIsVerifiedByCryptonomica(address)", "8c717138": "lastBlock_a1Hash_uint256()", "8c71bed2": "unlockTeamTime()", "8c71eaf1": "TokenBEN(uint256,string,uint8,string)", "8c71ec16": "create(address,uint256,uint256,uint256)", "8c7229cb": "pantura()", "8c727fa3": "oldCirculatingSupply()", +"8c729d3c": "createByte()", "8c72c54e": "publisher()", "8c72d4a4": "getStageTokenAmount(uint256,uint8)", "8c733fdf": "weiToUsd(uint256)", +"8c734263": "_river()", "8c73596c": "init(address,uint8,uint256,uint256,uint256,uint32,uint256)", +"8c74031c": "usersStats(address)", "8c748334": "cancelBuyOrder(uint256,uint256)", "8c74c5c0": "bonusOff()", +"8c74d25c": "fulfillBountyAndClaimFunds(uint256,uint256,address)", "8c74d62c": "LockedInToken()", +"8c75065f": "SHARE_RATE_DECIMAL()", "8c7565dc": "ADChainGrants(bytes32,bytes8,bytes32,bytes)", "8c756b1d": "balanceByAd(address)", "8c7698df": "lowerCase(bytes32)", "8c76b4b7": "addTrustedContracts(address[])", "8c771a8e": "newEscrow(address,uint256)", +"8c774342": "pID2Order_(uint256,uint256,uint256)", +"8c776b3f": "ExchangeRootAddress()", +"8c778462": "mapGameLeftWin(uint256)", "8c787768": "abbcwalletcoin()", +"8c788de0": "poolsCount()", "8c789fb2": "setTokenBudget(address,uint256)", "8c794114": "prizeWithdrawal()", +"8c7977ed": "issueTradeDebtBill(bytes32,bytes32,uint256,uint256)", "8c79a24d": "refName(uint256)", +"8c79bb69": "allRates(address[],address[],address[],uint256[])", "8c79ca5d": "AddMember(address,uint256)", "8c7a63ae": "getTokenInfo(uint256)", "8c7a8140": "extractVestedOptionsComponents(uint256,uint256,uint256)", +"8c7b4aa1": "assignOption(address,uint256,uint32,uint32)", "8c7c35b9": "internal_tester()", "8c7c4016": "GameLogicContract()", +"8c7c53ce": "velo()", "8c7c9e0c": "eth()", "8c7d1e8a": "MyKillerContract()", "8c7d3241": "total_iou_available()", "8c7d58aa": "isTimeExpired()", "8c7dd9ec": "_canReveal(address,address)", +"8c7e0875": "basket(uint256)", "8c7e1227": "setupStakingPriceFeed()", +"8c7e20dd": "wrapToNetwork(uint256,address,uint256)", +"8c7e347a": "getBetsCount()", "8c7e5008": "maxDonationInWei()", "8c7e763b": "HSCC()", "8c7f7806": "AfeliCoinPresale(address)", "8c7fcd46": "BLVToken(uint256,string,string)", +"8c7ff4ba": "changeCinema(address)", +"8c803fc2": "takeLoan(uint256)", +"8c80f9e6": "MAX_BATCH_SWAPS()", "8c80fd90": "setMinStake(uint256)", "8c812c51": "PhoenixExchangeFund()", "8c817b6e": "registered(uint256,address)", "8c82790b": "getReg3()", "8c82dccb": "updateStatuses(bytes32[])", "8c832ef4": "GalaxyCoin(uint256,string,string)", +"8c848bd6": "addNewAddress(address,uint256)", "8c849f3f": "getMemes()", +"8c84a47b": "_waasLobby(uint256)", +"8c8557d9": "getPriceFeedDecimals(address)", +"8c85614f": "Unbundle(address,address,uint256)", "8c85ec66": "getCurrentDayRestDepositLimit()", "8c864dfe": "_updateChecksum()", "8c86ec20": "NMC(uint256,string,string)", +"8c86f0a7": "airdrops(address)", +"8c86f1e4": "consult(address,uint256,address)", "8c877527": "allowTransfert()", +"8c877825": "wearableTypeClaimed(address,uint32)", +"8c87a4ea": "hashesToKeys(uint256[])", "8c87b2fc": "Identity(bytes32,bytes32)", +"8c87b82a": "weeklock(uint256)", "8c882958": "LEToken()", +"8c8838fb": "getVoterOutcome(uint256,address)", "8c88512f": "initializeCrowdsale(address)", "8c88752a": "ContributorList(uint256)", "8c8885c8": "setDecimals(uint256)", "8c88b85f": "_finalizeRound()", +"8c88c149": "changeRemovalBaseDeposit(uint256)", "8c88d716": "transferIfRequirementsMet(address,address,uint256,bool)", +"8c88e173": "approve_756(address,uint256)", +"8c8996c5": "m_deadline()", +"8c89a0ad": "getContractETHBalance()", "8c89b1c7": "setINCENTIVE_POOL_ADDR(address)", +"8c89cf4b": "initialize(address,uint256,bytes)", +"8c89e7d0": "isFreezeFinished()", +"8c89fa4f": "tokensForFuture()", "8c8a03ac": "setBucketManager(address)", "8c8a261a": "devMiningRewardChanges(uint256)", "8c8a40bd": "hashNotFound(address)", +"8c8a4b58": "setParams(address,address,address,uint256,uint256,uint256)", +"8c8a7958": "ZRX_ALLOWLIST_ADDR()", "8c8b31ab": "dhanaToken()", "8c8b6fc5": "challengeSubmitted(bytes32,bytes32)", "8c8b802e": "getLimitPeriod()", "8c8b9d54": "setEmployeeStorage(address)", "8c8bc5ce": "ChangeICOStart(uint256)", +"8c8bd218": "ejectModulesGovernor()", +"8c8bf83e": "getLiquidityValueAfterArbitrageToPrice(address,address,address,uint256,uint256,uint256)", +"8c8c3c9d": "withdraw(address,uint96)", +"8c8ccc73": "CurrentVersionTitle()", "8c8d067f": "chosenProposal()", "8c8d2ede": "team1()", "8c8d36c2": "THANKSTEST3()", "8c8d98a0": "toTimestamp(uint16,uint8,uint8)", "8c8df7cd": "GOTokenCrowdsale()", +"8c8e13b9": "getSession(address)", "8c8e2478": "convertTokens()", "8c8e5f1f": "BlockTubePrepaid()", "8c8e8fee": "token_address()", "8c8ee490": "checkReleaseAt(address)", +"8c8f53a4": "getLuckyTimes(uint256)", +"8c8f7710": "FundsSent(address,uint256)", +"8c8f794a": "participatePool3()", "8c8f94f5": "DeletePrice(uint256)", "8c8f95fb": "lockFunds(uint256)", "8c8f9c0e": "issueTokenToAddress(address,uint256,uint256)", +"8c8fae40": "setIsLocked(bool)", "8c8fc30b": "addAd(uint32,uint32,string,string,string,uint256)", +"8c8fddd4": "joinByOwner(address)", +"8c905f99": "userFatRewardDebtAtBlock(address)", "8c907c0d": "LanderToken(uint256,string,uint8,string)", +"8c90ac07": "setRecentBlocks(uint256)", "8c90b2ea": "pay055(address)", "8c9151ae": "voteProposal(uint256,bytes32)", "8c91bd3e": "addMoves(uint256,uint256[2])", "8c91daac": "startRoundSeed()", +"8c91f84d": "sprites(uint256)", "8c920a38": "testSanityCheck()", +"8c9224f7": "setNewFactory(address)", "8c924e9c": "incrementRead()", "8c93256e": "transferReward(address)", "8c934d71": "forceRefundCfd(uint128)", @@ -80332,62 +147033,122 @@ "8c944bb2": "_createPrimordialLot(address,uint256,uint256,uint256)", "8c945d38": "takeOffItem(uint256,uint8,address)", "8c94db38": "MMCoin(uint256,string,string)", +"8c950a90": "sponsorToComisionHold(address)", "8c9512bc": "companyTokens()", "8c9515ea": "doPayouts(uint256[49],address[49],uint256)", "8c9540d3": "isCommittee(address)", +"8c957db2": "start_clock(uint256)", "8c95acee": "getTreshold(uint256)", +"8c965675": "resetTokenSymbol(string)", +"8c9676bf": "onboardTrader(address,address)", "8c96a2c9": "getAssetPackPrice(uint256)", "8c96a538": "COO_SHARE()", +"8c96bbdb": "fetchedDataString()", "8c96e34b": "betIsSettled()", +"8c977312": "maxslaughterBurnrate()", +"8c97b0fa": "rebaseTimeInfo2()", +"8c980129": "land()", "8c98117c": "getBill(uint256,uint256)", +"8c982717": "memberDB(address)", +"8c9845b0": "guaranteedClaimEndTime()", +"8c98551d": "eventReward(string,address,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256,uint256)", +"8c987386": "oneUsdt()", +"8c9878cc": "rejected(uint256)", "8c988a46": "isLinkedWallet(address)", +"8c98a3ae": "accountFreeze(address)", "8c9924d5": "AddrMarketing()", +"8c996b0c": "_tokenBalances(address)", +"8c99a768": "Switch(address,uint256,uint256,address,uint256,address,uint256,uint256)", "8c99d363": "updateTokensToInvestor(address,uint256)", +"8c9a3252": "interestOf(uint256,uint256)", "8c9a4f13": "FundsTransferred(address,uint256)", "8c9ae56f": "QueryPlayerBonus(address,uint256)", +"8c9b10e0": "approveOracleByAddress(address)", "8c9b2cd1": "ModultradeProposal(address,address,address)", +"8c9ba16d": "testCalculateTotalCollateralWithAbnormalPrices()", +"8c9c294a": "borrowCollateral(uint256,address,bytes,bytes)", "8c9c2977": "newMember(uint8,bytes32,address)", +"8c9c51fc": "eventLottery(string,uint256,uint256,uint256[],uint256)", "8c9ce20c": "_addressNotNull(address,address)", "8c9cf205": "SignVersion(string,string)", +"8c9cfded": "yfiTokenAddress()", +"8c9d0081": "readingRegister(address,uint256)", "8c9d8300": "withdrawForAdmin(address,uint256)", +"8c9dcd04": "tokenSaleZ00M(address)", "8c9dd650": "Etherlott()", +"8c9e1f3c": "getContent(string)", +"8c9e291f": "_liquidityRemoveFee()", +"8c9e6c6b": "_pornWETHPair()", "8c9e81e5": "triggerICOState(bool)", +"8c9ea8a4": "index2burningMan(uint256)", "8c9ecd00": "toDec()", +"8c9f1ca0": "updateEvents(bytes16,uint256,uint256,uint256,uint256,uint256)", +"8c9f305f": "flashLoanFeeRate()", +"8c9f6dbd": "stakedTokens(uint8)", "8c9f7074": "setInterestFeePercent(uint256)", "8c9f7b39": "endSale(address)", "8c9f8935": "ClaimSet(address,address,bytes32,bytes32,uint256)", "8c9fcfe2": "payForUpgrade(address,uint256)", +"8ca0255d": "lionking()", +"8ca0921d": "deployVersionA()", +"8ca0adaf": "getAddressValues(bytes32,bytes32[])", "8ca0dd20": "tgeCap()", "8ca10f9b": "sendRemainingTokens(address)", "8ca17755": "etheraffle()", "8ca17995": "divest(uint256)", +"8ca2068c": "stFarmingEndBlock()", +"8ca2ae4a": "joinDai(uint256)", +"8ca2bedc": "getAnswerStatus(uint256,uint256)", +"8ca34cdd": "assignSelfDelegate(address)", "8ca3b448": "addUser(address,address)", "8ca3c553": "setData(string,string)", "8ca47688": "WhiteListUpdated(address,bool,address)", +"8ca4ebce": "_minValueRate()", "8ca4eef6": "getBuild(bytes32)", "8ca517dd": "getActiveBuyDetails(bytes32)", "8ca51f82": "setMinimumClaimValue(uint256)", +"8ca54fe0": "aaTest(uint256)", +"8ca59a4a": "getCardMetadata(uint256,uint256,uint256)", "8ca5d525": "removeAllowedHICAddress(address)", "8ca5da35": "mintManual(address,uint256)", +"8ca5f772": "checkAllowance(address,address,address)", +"8ca643cd": "vestingReleases(uint256)", +"8ca6bd76": "setLiquidityInitializer(address)", "8ca6c287": "InsurContract()", +"8ca6f71c": "vestWithdrawable()", "8ca6f747": "potatoBalanceOf(address)", "8ca74163": "BZCToken(address,uint256)", +"8ca74be3": "_forGenesisStakingPoolAddress()", +"8ca77a5b": "_userInfo(uint256,address)", "8ca79351": "ethPriceIn()", +"8ca83f07": "lenderFee()", "8ca84d40": "preparationPeriodTrainingFeeMultiplier()", +"8ca8cd08": "getCapSumAt(uint8)", +"8ca8f48f": "AdvisorTokenTransfer(address,uint256)", "8ca9ac01": "LogBeerClaimed(address,uint256)", "8ca9e721": "finalizeCrowdSale()", "8caa0083": "teamCount()", +"8caa4db5": "initialize(address,address,address,address,address,uint256,uint256,uint256,string,string)", +"8caa5230": "stake(bytes32,uint256)", "8caa5c91": "DataBase()", "8caaaae6": "totalWeiPrice()", "8caaab4d": "verifyProofOfStakeInternal(uint256,bytes32,bytes32,uint256,bytes32[],uint256[],uint256,uint256)", "8caad7b5": "changeMinDepositAmount(uint256)", +"8caaf9e6": "setMaxUniswapDisagreement(uint256)", +"8caafa94": "contribs(uint256)", "8caba7b7": "startCharging()", +"8cabf31d": "Received(address,address,uint256)", "8cac1939": "TOKEN_TEAM()", +"8cac2c11": "feeWithdrawAfter()", "8cac3b42": "addDividend()", "8cac5f55": "feeForTheStakingInterval()", +"8cad4a22": "pool_slots_8(uint256)", "8cad5826": "FundTransfer(uint256,bytes32,address,address)", +"8cad7fbe": "swappers(address)", +"8cada307": "autoMultisendToken(address,uint256)", "8cadaa5d": "TokenFreeze()", "8cadd6a2": "getVestedBalance(uint256,uint256,uint256,uint256)", +"8cadf3c4": "allTokensBalancesDecimalsNamesSymbolsWeights(address)", "8cae013e": "signatureFunc(bytes)", "8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", "8cae59dd": "heapSort(uint32[])", @@ -80396,41 +147157,77 @@ "8cb0a511": "approve(uint256,address,uint256)", "8cb18ef6": "needFightToAdult()", "8cb1b614": "setWhitelisted(address,address,uint256)", +"8cb1d67f": "underlyingBalanceWithInvestmentForHolder(address)", "8cb1e9c1": "unlockedAt()", "8cb240b0": "saasPayment(address,uint256)", +"8cb35072": "blockUser(uint256)", +"8cb35b9f": "team_pyg()", "8cb36aef": "requestCoinToUSD(string,bool,uint256,uint256)", +"8cb36f6d": "yourStakedRBFi(address)", "8cb3728c": "getAllRevisionTimestamps(bytes32)", "8cb39385": "getMinBid()", +"8cb3b9f1": "pumpTokens(address)", +"8cb3c25f": "patronageOwedWithTimestamp(uint256)", +"8cb3c661": "handleTaxDistribution(uint256)", "8cb3c89f": "loadEthBalances()", +"8cb40d3d": "_battleUnit()", "8cb47a2f": "CrowdForceSampleToken()", +"8cb4e9b5": "nTrumpOwned()", "8cb5497c": "setOperator(bytes32,bool)", "8cb56999": "GetExpireTime(uint256,uint256)", "8cb5a0c0": "removeCoordinator(address)", +"8cb647d3": "getMyVote()", +"8cb68899": "timeLastCollected(uint256)", +"8cb72900": "referenceAddress()", +"8cb79da2": "xgtGenerationFunds()", +"8cb7e810": "onRoundEnding(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "8cb858cb": "PRCVToken(uint256,string,uint8,string)", "8cb996df": "LogMigrationEnabled(address)", +"8cb9cac7": "distributionPeriodLength()", +"8cb9ce39": "PublicSaleWhiteListed(address)", "8cbb02ad": "Marijuana()", "8cbb13e7": "TokenRHT()", "8cbb6593": "SHNZ2()", +"8cbb960d": "activate_fake()", "8cbba6cf": "isPreWhiteListed(bytes32)", "8cbbe25f": "NIMFA_PER_ETH_PRE_SALE()", +"8cbc3ae5": "unwrapFor(address,uint256)", +"8cbc762e": "lastProposeTimestamp()", "8cbc8c0b": "lockholderNumber()", "8cbcbca2": "_payChicken(address,uint256)", "8cbcca07": "fillBuyOrder(uint256)", +"8cbce621": "buyBack(address,uint256,uint256)", +"8cbdecde": "oilContract()", "8cbdf1d1": "mintARC(address,uint256)", "8cbe775a": "Bitdepositary()", "8cbe898d": "CommitteeLimits(uint256,uint256)", "8cbeb340": "ControlContract(address)", "8cbf4145": "confirmPrintProxy(bytes32)", +"8cbf9519": "toggleBurn(bool)", "8cbfa1ec": "quoteAsk()", +"8cbfc068": "multisendErcDOGZ(address[])", "8cc02403": "cobrarImpuesto(uint256)", +"8cc03ea6": "cr_info()", "8cc04ebb": "_appendUintToString(string,uint256)", +"8cc061b4": "precent_of_reward_2()", +"8cc08025": "isClaimed(address)", "8cc17117": "forceRecoverCollateralInternal(address)", +"8cc18119": "TransferAndLock(address,bytes32,uint256,uint256)", +"8cc1b7b4": "approve_663(address,uint256)", +"8cc2605a": "poolerIndex(uint256)", +"8cc2d628": "updateTokenBurnRate(uint256)", +"8cc2d79f": "dTokenBalances(address,address)", "8cc2f547": "DiceGameCrowdsale(address)", "8cc30c6f": "buyStageDataRecord(uint256,uint256,uint256,uint256)", +"8cc3473d": "OwnerLog(address,address,bytes4)", "8cc34ed7": "zilla_remaining()", "8cc40d71": "dividend_amount()", +"8cc43ed0": "buyTicket(uint16[],uint256)", "8cc4ab11": "getPurchaseTimestampEnds()", +"8cc4bbd9": "sushi_yfi_poolId()", +"8cc4bd50": "__bac()", "8cc50ecd": "addBlock(string,uint256,string)", +"8cc513ff": "PriceLog(string)", "8cc519bf": "companyTimelock()", "8cc51eda": "kitties(uint256)", "8cc5510f": "setTeamAddress(address,bool)", @@ -80441,224 +147238,401 @@ "8cc60a61": "isStoreActive(uint256)", "8cc60eca": "SS()", "8cc63bfb": "marketingFunds()", +"8cc65385": "getDailyPrizePoolListLength(uint256,uint256)", "8cc6acce": "updateConfig(bytes)", +"8cc7104f": "unwrap(address,address,uint256)", "8cc78a40": "option20symbol()", "8cc7ea0e": "Xian()", +"8cc883ce": "setDevFeeStage(uint256[])", "8cc89e1b": "TCCoin()", +"8cc8af1a": "initialize(address,uint256,address,uint256,address,uint256,address,uint256)", +"8cc8b9fa": "__dai()", "8cc8baaf": "getBuyPriceTimes()", "8cc8c236": "_transfer(address,uint256,bytes)", +"8cc91f71": "nyan()", "8cc9638c": "fundBurn(address,uint256)", "8cc98bc3": "approveEliminate(address,uint256)", "8cc99aa3": "getAmountForCurrentStage(uint256)", "8cca5a3f": "withdrawWallet(address)", "8cca8f64": "canClaimRefund(address)", +"8ccae705": "getRequiredLiquidity(uint256)", +"8ccb0023": "BuyStakeGenesis(address,address[])", +"8ccb0bdc": "getCampaignContentDetailplayersub(string,uint256,uint256,uint256)", "8ccb381b": "tenthTotal()", "8ccb4daf": "getPositionMaxDuration(bytes32)", "8ccb59e8": "revealWinner(uint256)", "8ccb9f2d": "del_admin(address)", "8ccbd6da": "freezeToken()", "8ccc04ea": "proofOfConceptCap()", +"8ccc42b6": "Reset(uint256,uint256,uint256)", "8ccc4781": "Math(int256)", "8cccc341": "initiateChallenge(address)", "8cccf2df": "viewServiceReward()", +"8ccd2257": "LogRegisterTicker(address,string,string,bytes32,uint256)", "8ccd227c": "gameRequestTokens(address,uint256)", +"8ccdbb70": "withdrawalTreasuryFee()", "8ccdcf80": "tokenSalePausedTime()", +"8ccdcfc6": "untoggle()", +"8ccdd289": "commissionRate_deprecated()", "8cce10c8": "rank(address,address,uint256)", +"8cce2cd3": "LockRound(uint256,uint256,uint256)", "8cce49c9": "mokenData(uint256)", +"8cce4b18": "getLodge()", "8cce7e92": "removeMarketFromWasCalled()", "8cceb1e8": "notifyBurn(address[])", +"8ccec77b": "LOG_NEW_POOL(address,address)", +"8ccf3cd4": "maximumLockPeriod()", +"8cd01307": "borrow(uint256,bool)", +"8cd09f0c": "isDelegateCallSafe(address)", "8cd0a573": "transferWithCustomReserving(address,uint256,uint256)", +"8cd0d629": "cvpBalanceToBoost(uint256,address,bool)", "8cd0fc3d": "TRONClassic(uint256,string,string)", +"8cd14271": "agreementSigned(bytes32,uint256,address)", +"8cd14d30": "createTweet(string,string)", +"8cd1cc55": "approve_75(address,uint256)", "8cd221c9": "roundId()", "8cd25904": "calculateAndCreateTokens(uint256)", +"8cd2e0c7": "repay(address,uint256,uint256)", "8cd3751b": "newProposal(address,uint256,uint256,bool,bool,address,uint256,uint256,uint256,uint256)", "8cd3f064": "acceptToken(address)", +"8cd40c9d": "withdrawtoken(address,uint256)", "8cd41fae": "StartCompetition(uint8,uint8,uint8,uint8,uint80,uint32)", "8cd41fd8": "referrerBonus2()", "8cd42991": "getTimeRemaining(uint256)", +"8cd470a2": "twitterdrops(address)", "8cd47415": "zkWithdrawTrusted(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[],uint256)", "8cd4d21a": "x(uint256,address)", +"8cd4e147": "validatorMisdemeanor(address,uint256)", "8cd4fdf1": "maxGamble()", "8cd53767": "withdraw(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"8cd582f4": "LEVEL_SLOTS(uint256)", +"8cd5db2a": "buyToken(uint256,uint256,address,uint256,string,uint256,uint256)", "8cd5dce3": "setNextRoundRequiredBetAmount(uint256)", +"8cd5f4a9": "SetFixRet4Eth(uint256,uint256,uint256,uint256,uint256,uint256)", "8cd6c7fa": "seedSingleSaleCount()", "8cd70e72": "isInitalized()", +"8cd7cb1e": "addStructEntry(string,string,string)", "8cd85846": "totalTranches()", "8cd85dc2": "getWinNumbers(uint256)", +"8cd86f02": "allowed(address,address,uint256)", "8cd8bd05": "IanCoin()", +"8cd8d536": "lidToken()", +"8cd8dab3": "agamount()", "8cd8db8a": "init(uint256,uint256,uint256)", "8cd90e31": "EAToken(uint256,string,uint8,string)", +"8cd971b8": "upTimeDis(uint256,uint256,uint256)", "8cda2a15": "SafePromo(string,string)", "8cda4430": "lookupRoyalty(address)", "8cdb1719": "approveCertification(uint256)", +"8cdb442f": "updateMinStake(uint256)", +"8cdb6574": "setDODOProxy()", "8cdbd8fb": "remainToken()", "8cdc86a6": "sort()", +"8cdc9073": "Order(address,uint256,address,uint256,address,address,uint256,uint256,address)", "8cdcbdef": "closeBlock()", "8cdcdae1": "testControlUpdateLatestRevisionNotOwner()", +"8cdd2fa0": "withdrawEverything(uint256)", "8cde43dc": "getCrowdsaleMaxRaise(address,bytes32)", "8cde4667": "BANKNET()", "8cdf31fa": "Cryptoya()", "8cdfb1e6": "transferIfHF(address)", +"8cdfc3fe": "refundLostToken(address,address)", +"8cdfe166": "profitFactor()", "8ce0080f": "updateGuMasks(uint256,uint256)", +"8ce0519b": "addMint(uint256,uint256)", "8ce05b54": "bornFamedStar(address,uint256)", "8ce060fb": "FounderSwitchRequestEvent(address)", +"8ce0b5a2": "blocksLength()", "8ce0bae8": "Canceled(address,uint256,address,address,uint256,address,uint256,uint256)", "8ce0bd46": "Deposit(address)", "8ce113dc": "right60(uint256)", +"8ce1842a": "Get_User_Info(address)", "8ce187fd": "raisedUSD(uint256)", +"8ce1a483": "TREASURY_FEE()", +"8ce1e6a2": "initialBalances(address)", +"8ce232f1": "frozentransfer(address,uint256,uint256,uint256)", "8ce25a93": "numAccounts()", "8ce2ae2d": "creator_new()", "8ce2e0ea": "addLastTwoAmbassadors(address,address)", "8ce2f386": "AcceptsOmniDex(address)", +"8ce2f6ae": "cancelBlockElapse()", +"8ce36542": "UpcCoin()", "8ce3ee62": "transferEmpire(address)", +"8ce40a8b": "MAX_GEN0_ENERGY()", "8ce450de": "assetThaw()", +"8ce45899": "setBfmPerBfmBNBFlip(uint256)", "8ce4f1b2": "setGasRewardPercent(uint256)", "8ce53e5b": "getMaximumInvestmentPerDay()", "8ce5877c": "removeSpender(address)", +"8ce671ec": "senderBalance()", "8ce69b72": "USD_IN_ETH()", +"8ce72064": "setMakerDaoContract(address)", "8ce74426": "protocol()", "8ce795f5": "SerbiavsBrazil()", "8ce7be01": "getUniqueSpinnerPrice()", "8ce7ff4a": "getVote(uint256,uint256,uint256)", +"8ce80a65": "addCover(uint16,uint256,address,bytes4,address,uint256,uint256)", +"8ce8841c": "callProxyHandler_getUserAmount(address,address)", +"8ce94896": "partialRelease(uint256)", "8cea577a": "allowFunction(bytes32,bytes4)", +"8ceaa15e": "setStars(uint256)", "8ceaa23f": "setAvailablePositions(uint256)", +"8ceacf2f": "setStakingPercent(uint256)", "8cead4bf": "currentProfit()", +"8cec7946": "nftProfiles(uint256)", "8cec9176": "SimpleMultisigWallet(address[],uint256)", +"8cec9993": "setExtraGas(uint256)", "8cec9f4c": "playlotto(uint256)", "8cecd03e": "INVESTOR_TOKENS()", "8cece594": "countClaimBackers()", "8cecf66e": "_inverse(uint256)", +"8ced18e8": "getxDonAmount(uint256,uint256)", +"8ced640b": "depositeFod(uint256,uint256)", "8ceda04d": "getCounting(bytes32)", +"8cedca71": "adminVault()", "8cee3b4d": "getPolicyByCostumerCode(string,uint256)", "8cee8778": "crear(uint256)", "8ceeaaa8": "getTodayOwnerAddress()", +"8ceed9cb": "setAssetProtectionRole(address)", "8ceedb47": "cage(uint256,uint256)", +"8cef17c4": "consumeEtherOffer(address,address,uint256,uint256,uint128,bytes)", "8cef1ed9": "xpectoTTF1Token()", "8cef2b93": "CECNaypyidaw(address,uint256)", +"8cef793e": "createEmployee(address,uint256,string,string,string,string,string,bool,uint256,uint256)", "8cefad63": "setAirEndtime(uint256)", "8cefaf1a": "setSalesEndTime(uint256)", +"8cefe089": "updRateBonusAirDrop(uint8,uint256)", +"8cf0a2d6": "getSubscribersByPage(uint256,uint256)", "8cf0c191": "rum()", +"8cf0cb55": "LOCK_DROP_PERIOD()", +"8cf0d66f": "auction__start()", +"8cf0e507": "draftBobToken(uint256,uint256)", +"8cf1355c": "externalTokenIncreaseApproval(address,address,uint256)", "8cf19975": "createLottery(string,uint256,uint256,uint256,uint256,uint256,uint256)", "8cf1c5c4": "LogFeeEvacuation(uint256)", +"8cf1da9c": "swapExactTokensToTokens(uint256,uint256,uint256,address,address,bool,address)", "8cf20038": "engDevAddress()", +"8cf21e32": "getDsVDVTheoDoi(uint256)", "8cf228cd": "DNNTDE()", +"8cf2ba12": "viewMined(address,address)", +"8cf304b7": "vokenCounter()", "8cf3313f": "calculateWeightedMultiplier(uint256,uint256,uint256,uint256)", +"8cf336bc": "resetGas()", "8cf3562b": "DEC15Recursive()", "8cf37ece": "InformRebuy(uint256)", "8cf39a9c": "TicTacToe(address,address,uint256)", "8cf3a181": "addRRA(address)", "8cf3e683": "isAddressExcept(address,address)", +"8cf422b5": "getGenericActionID(address,bytes,uint256,uint256)", "8cf49cad": "ReleaseDate()", "8cf4dbfb": "collectBalance()", +"8cf4e8f4": "stopMigrationProcess()", "8cf57cb9": "rewardAddress()", +"8cf59bc7": "drainEth(address)", +"8cf59dc8": "averagePurchaseRate(address)", +"8cf5a2ae": "setStableBondPriceDiscount(uint256)", +"8cf5bf7c": "pickHuman(address,address)", +"8cf5d36f": "tokenMaxQuantityWithId(uint256)", "8cf5dbc6": "recruitHero()", +"8cf5e604": "usrStakes(address,address)", +"8cf60ae9": "DsSV(uint256)", "8cf7b7a4": "slashAddressLikeUsername(string,uint256)", "8cf7d906": "playAndFinishJackpot(uint256,uint256,uint256,uint256)", "8cf80438": "winningBid()", "8cf8151f": "appWasMade(bytes32)", +"8cf832d4": "setBoosterEscrow(address)", "8cf907fb": "EndRefund()", "8cf92ade": "distributeBountyTokens(address[],uint256[])", +"8cf9bff7": "getAmountToIgnite(uint256,uint256,uint256)", "8cf9f5e7": "getPreSelledInPool()", "8cfa8eea": "getWeiToUsdExchangeRate()", "8cfaabcc": "managementTransfer(address,uint256)", +"8cfacdd8": "minHolders()", +"8cfad43a": "batchSkim(address[],address)", "8cfae7e4": "TransferUnsoldTokensBackToTokenContract(address)", "8cfb3088": "defaultExpiry()", "8cfb7c02": "updatePopularity(bytes32,uint256)", "8cfb8f21": "isKnownUniverse(address)", +"8cfc48ca": "adminTrxDeposit()", +"8cfce316": "releaseSec()", "8cfd6d4c": "CCH_LLV_FIFA_2()", "8cfd8901": "_incBlock()", "8cfdacb0": "STARTING_PACIFIST()", +"8cfe429a": "eTesla()", +"8cfe44ad": "NFTownerOf(uint256)", "8cfe6a09": "tokensToEthereum_2(uint256)", "8cfe7c32": "bTransfer(address,address,address,address[],uint256[])", +"8cfefa68": "NowETHINVESTED()", "8cff1990": "isSignedByAndrey()", +"8cff3ec6": "NewKingPrice(uint256,uint256)", +"8cff6355": "SENTINEL_OWNERS()", "8cffa21c": "getOwnedItems()", +"8cfff27f": "registrationCheck()", "8d000903": "createTokenToMarket2018()", "8d003a0f": "addCurrentTime(uint8)", "8d008989": "Multisig(address,address,address,address)", "8d00abb6": "setAElfCommunityMultisig(address)", +"8d010f43": "hexLiquidity()", "8d012295": "presaleVesting(address,uint256,uint256,uint256,uint256,uint256)", "8d0128cb": "transferMintKey(address,int256)", "8d01308c": "PRESALE_START_WEEK3()", +"8d014acb": "mainCreator()", +"8d02210e": "updateCakeChef(address)", +"8d024f6d": "pendingAkita(uint256,address)", +"8d026de8": "isTopBid()", +"8d02b12c": "callIncomeTokensTrigger(uint256)", +"8d02b527": "maticSigDigits()", +"8d0361fc": "getCancelAndRefundApprovalHash(address,address)", "8d03b102": "testing()", "8d044c06": "unpauseRedemption()", +"8d045e53": "endWhiteListPhase()", "8d049190": "mapWidth()", "8d0515dc": "HenryMiniToken(uint256,string,uint8,string)", "8d0522c5": "set_contrib_arbits_max(uint256)", "8d0528ec": "Withdraw_referral()", "8d05ad4e": "NLL()", +"8d060dfa": "waitingForUpdate()", "8d062046": "testTokensAreTransferrableAfterSale()", +"8d067193": "interestPaid(bytes32,uint256)", "8d068043": "requiredSignatures()", "8d0716c4": "approveScoupons(address,uint256)", "8d07ae9f": "getBidDetails(address)", +"8d0849f1": "getPairs(uint256)", "8d086da4": "withdrawShares()", +"8d088337": "approve_572(address,uint256)", "8d089930": "limitEndDate()", +"8d08bade": "deployNewTrancheATokens(string,string,address)", "8d08eefa": "setCORAddress(address)", "8d09b9cc": "TeCToken()", "8d09c674": "Donated(address,uint256,uint256,uint256)", "8d0a3b6d": "bonusByAmount()", +"8d0a3f91": "setDayPercent(uint8)", "8d0a5fbb": "getOrderCount()", "8d0a73e3": "tokenDistributionStartTime()", +"8d0a9b1b": "flashBorrowAndCast(address,uint256,uint256,bytes)", "8d0aadca": "playerDelayOnExit(address)", "8d0ae472": "AsheToken()", +"8d0aedf1": "iWeth()", "8d0b3d9b": "_add(uint32,address)", "8d0b4be5": "setXPContractAddress(address)", "8d0bba03": "MINIMUM_CONTRIBUTION()", +"8d0bc428": "rebasesPaused()", +"8d0bc599": "upgradeContract(uint256,uint256,uint256,uint256,uint256)", +"8d0c28a3": "osebeCount()", +"8d0c2f73": "notifyFactory(address)", +"8d0c4591": "_getDTokenName()", "8d0caef5": "bonusStage1()", +"8d0cbce8": "numberOfAssetPacks()", +"8d0cc111": "masterFallback(address,bytes)", "8d0cf786": "MatchAdded(uint256,uint8,uint16)", "8d0d018c": "havedDistDevCoin()", +"8d0d1eb5": "minPassBlockActivate()", "8d0d27ba": "queryPlayerType(uint32[11])", "8d0d3ccf": "getBonusTier()", +"8d0d4e14": "pendingDrunk(uint256,address)", "8d0d877f": "LZZ()", +"8d0d8cb6": "depositFund()", +"8d0dc1ae": "startNum()", "8d0dd3c0": "setBUU(bytes32,uint256,uint256)", +"8d0deb30": "voterRewardPerBlockNumerator()", +"8d0e138c": "nftRewardContract()", "8d0e5136": "isPlayerInQueue(address)", +"8d0e5a9a": "slot(uint8)", +"8d0e83fc": "sellTmr(address)", +"8d0e8e1d": "getTokens(address,address)", "8d0eda03": "isInvestorLocked()", "8d0f403a": "adminAddAction(bytes32)", +"8d0f5b70": "batchMintTo(uint256,address)", +"8d0f7e11": "getNextEpochRewardsRate()", "8d0f8cef": "drop(address,uint256)", "8d0fc05a": "votesYes()", "8d10215e": "grantAccess(uint256,uint256,string)", "8d106690": "setPropertyFlag(uint16,uint8)", +"8d1082cc": "setDebtAuctionMKRAmount(address,uint256)", "8d111ac6": "checkTokSold()", "8d119d41": "AngelCoinV1()", +"8d11bb32": "reward_list(address[],uint256[])", +"8d11fa54": "getLavaDomainTypehash()", "8d121247": "changeProductionFeeRecipient(address)", +"8d12536a": "AddAcceptedToken(address)", "8d12aba7": "IMCOToken()", +"8d12b802": "setLemoxHookContract(address)", +"8d12c134": "calculateCollateralForDAI(uint256,uint256)", +"8d13325d": "getListDistanceRun()", "8d134175": "CellTokens()", +"8d1342df": "resourceIndex(address)", "8d1343e0": "issueDate()", +"8d134bed": "USDToNUX(uint256)", "8d13d972": "getUsdFee(bytes32,uint256)", "8d13ea34": "changeUserProjectExp(bytes32)", +"8d1400b4": "setTransactionTax(uint256)", "8d14670a": "multiUnlock(address[])", "8d149b3c": "compareInts(int256,int256)", +"8d14e127": "setWhiteList(address,bool)", +"8d14f1e9": "getLPBlance(uint256,address)", "8d152d78": "pushBytesArray(bytes32,bytes32)", "8d1540c1": "CoinBuy(uint256,address)", "8d159787": "buyDragon(uint256)", "8d15a218": "LogRedeem(address,uint256)", +"8d15a6b6": "AllProjectList(uint256)", "8d15b307": "privateEventActive()", +"8d161768": "adminMigrateData(uint256,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8d1619ba": "returnUINT256MAX()", +"8d16a105": "getscAddressOfCover(uint256)", +"8d16a14a": "unstakeClaimTokens()", +"8d16a694": "loyalty()", "8d16fd83": "sellDai(uint256,uint256,uint256)", "8d17664d": "getSecret(uint256)", +"8d17a4d0": "buyLevel(uint8)", +"8d17e712": "_tokenURI(uint256)", "8d182f01": "removeSale(bytes32)", +"8d18c4aa": "getUnSoldTokens()", +"8d190f02": "getUniswapPair()", +"8d19e9b1": "getUserReleasedETH(address)", "8d1a4b28": "getGame(address)", "8d1a7765": "getPlayerGeneral(uint64)", +"8d1a98c9": "amount_weights()", +"8d1ac8ab": "approve_743(address,uint256)", +"8d1ad737": "readPayout()", +"8d1aeacf": "adminSetRentals(address)", "8d1b2afd": "logFeeWindowCreated(address,uint256)", "8d1bc93d": "buyWuxiaMaster()", +"8d1bd1be": "liquidationCollateralRatio()", "8d1c3b8b": "sHasDownvoted(uint256,uint256,address)", "8d1c8048": "transport(uint256)", "8d1ca4ec": "addGuess(int256)", +"8d1cb8b5": "propose(string,uint256)", +"8d1ce91d": "Set_DepositPeriod(uint256,uint256)", "8d1d1572": "transferFeeAddress()", +"8d1d157f": "wonderIndexToOwner(uint256)", +"8d1d17cd": "hashID()", "8d1d22d8": "renameMonster(uint64,string)", "8d1d2c21": "categoricalEvents(bytes32)", "8d1d8639": "getcanuserun(address)", "8d1dff6b": "mintTokens(uint256,address,bool)", "8d1e6b56": "issueCompanyTokens()", "8d1eaf78": "registrarInfo()", +"8d1ecf04": "ExecutionFailure(address,uint256,bytes)", "8d1fdf2f": "freeze(address)", "8d20194d": "getWhiteUsersFrom(uint256,uint256)", +"8d20efa7": "removeSigner(address,address)", +"8d2146bd": "registerAllPoolsForReward()", "8d215adc": "Bettings(uint256,uint256)", "8d216186": "roll(uint256,bytes32)", +"8d21c7f8": "getstakingdeposit()", "8d22651e": "MAX_NUM_OF_CHOICES()", "8d227fc0": "getPeriodInfo()", +"8d22a018": "MAX_AVAILABLE_TOKENS_IN_WHITELIST()", "8d22b345": "getAppTokenCode(uint32)", +"8d22ef18": "getBulbasaurBnbRate()", +"8d22fefa": "getTokenContractBalance()", +"8d232094": "initialize(string,string,string,address[])", +"8d232b97": "changeUniswapV2Router(address)", +"8d245bc3": "transferDependentContract(address,address)", "8d24abbc": "closeAndTransferTokenOwnership()", "8d24d147": "rvDeposit()", "8d24f5bc": "tokensByBtcTx(string)", +"8d2509cc": "claimBasReward()", "8d256b0a": "ExchangeRate(uint256)", "8d258104": "setManager()", "8d25827a": "countOpenPackageOfOneAgency(address)", @@ -80666,23 +147640,38 @@ "8d25af04": "restartGame()", "8d26d88f": "feeWithdrawTokenAmount(uint256)", "8d26eb2b": "edgePigmentG()", +"8d2701df": "BaseTransfered(bytes32,address)", "8d272b0a": "TaeCoin()", +"8d276129": "_upgradeContract()", "8d2810fe": "GenesisBuyPrice(address)", +"8d2868d8": "addProfit(uint256)", "8d288e93": "toRefund()", "8d28da21": "ECT(uint256,string,uint8,string)", "8d298851": "initialIssue()", "8d29a239": "finalizeHoldingAndTeamTokens(uint256)", "8d2a0910": "getTotalDividendsPaid()", +"8d2a3739": "atoshima(string,string,address)", +"8d2a41ca": "OwnerAssignedEvent(address)", +"8d2a8888": "withdrawFromDepositRequest(address,address)", +"8d2abaab": "goverFund()", +"8d2abc12": "swapExactETHForTokens(address,uint256,uint256)", "8d2af65d": "claimTokenReserveFinan()", +"8d2b10d9": "configSeeResultFee(uint256,uint256[])", "8d2c8ce8": "RrcToken()", "8d2c929a": "bridgeNodes(address)", +"8d2cd3a4": "claimReInvest(uint256)", "8d2d2563": "saleFirstEarlyBirdEndBlock()", "8d2d3f41": "getKeyRevisionNumber(uint32)", +"8d2dab67": "setAcoPoolWithdrawOpenPositionPenalty(uint256)", "8d2dcb2d": "TokenPool(address,address)", +"8d2ea772": "destroyed(address,uint256)", "8d2ea8dc": "withdrawAvailableToken(address,address,uint256)", "8d2f349f": "TransCompleteds()", "8d2f7272": "CariToken()", +"8d2f9b41": "shareholdersPool()", +"8d2ff216": "createReward(uint256,string)", "8d300458": "updateInvested(address,uint256)", +"8d301f99": "withdrawReferralEarned(uint256)", "8d30241b": "HasGoods(uint32)", "8d30d418": "ContractRemoved(address)", "8d30e65d": "claimReservedTokens(address,uint256)", @@ -80691,60 +147680,112 @@ "8d323fdc": "LogAddressTokenCapChange(uint256,string)", "8d331996": "setTimeWindow(uint256)", "8d334529": "restrictions(address)", +"8d337b81": "getVote(address)", +"8d3441b3": "engine2_balance_lotery()", "8d348b7c": "mintToClient(address,uint256)", "8d357fa3": "getKeys(uint256)", "8d35b9ce": "ARXpresale()", "8d361e43": "removeSigners(address[])", "8d361f6e": "bonusTokensDistributed()", +"8d36a053": "updateTwoArgs(uint256,int256)", +"8d37052c": "getNextValidator(address)", "8d375da2": "testMakeItFail()", +"8d376324": "onUpRoundID(uint256)", +"8d376344": "nBots()", +"8d37f270": "StakeMultiSendEth()", "8d37f52c": "addAgingTime(uint256)", "8d38b237": "calculateCountOfInvestmetnsInQueue(uint256,uint256)", +"8d38c6c1": "maxTransactionGasLimit()", "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[])", +"8d3a0130": "onTokenSell(address,uint256,uint256,uint256,uint256)", +"8d3a4af6": "getBaseAsset()", "8d3a5ded": "initPlatinum()", +"8d3a7edb": "godPot()", "8d3af7eb": "withdrawLemontokens()", "8d3b6d08": "registerSsp(address,uint8,uint16)", "8d3bd1f8": "teamTokensGenerated()", +"8d3c100a": "collect(uint256,address)", "8d3c7415": "JuzixTokenManager()", "8d3d523b": "bet2Of(uint256)", "8d3d6576": "maxContribution()", "8d3d70df": "takeBet(uint256,address,uint256,uint256)", "8d3d8587": "GanaPreSale(address,address,address)", +"8d3d914d": "startVotingForChangeBuySellPrice(uint256,uint256,uint256,uint256,bool)", "8d3def46": "oryza()", +"8d3e0034": "confirmTokenErc20Transaction(uint256)", +"8d3e0a69": "joinDsr(address,uint256)", "8d3ef87d": "getuserlistlength(address)", "8d3f0ed5": "allocateTokens(address,uint256,uint256)", +"8d3f1e44": "zone(int32,int32)", +"8d3fa4e8": "updateFeeSplit(uint256)", +"8d3fd61c": "onboardBlocker(address,address)", "8d3fd859": "sellFucks()", +"8d40fb4e": "commonURI()", +"8d424127": "discardDefaultSlippageFeeVote()", +"8d427491": "_approveZap(address)", +"8d431198": "getKeyData(address,uint256)", +"8d437701": "setSushiPid(address,uint256)", "8d442ae0": "toUint8(bytes,bytes,uint256)", +"8d442b3e": "submitNewLaw(address,uint256,bool,bool)", "8d447e39": "getLatestWhitepaper(address)", +"8d448d53": "MetadataCreationDate(uint256)", "8d44c90b": "BurnMyTokensAndSetAmountForNewBlockchain()", "8d44f13b": "claimFromPool()", "8d4572be": "rens()", "8d45e221": "Partial23Transfer()", +"8d45f6a1": "cryptoList(string)", +"8d465211": "fundsCollectedTotal()", "8d467f22": "getKeysFromEth(uint256,uint256)", +"8d468b5f": "newCoinInfo(string,string,uint256,uint256,uint256)", +"8d46b3ff": "setChangelogVersion(address,string)", "8d472709": "contribute(address,address,uint256)", "8d475461": "m_teamId()", "8d4777c8": "claimGooDepositDividends(address,uint256,uint256)", "8d47c7d7": "getTokenListed()", +"8d480b58": "YALINK()", +"8d482cc4": "CoinDeliveryStartTime()", +"8d486414": "isStablecoinSupported(address)", +"8d48c9c8": "rn()", +"8d48cfb0": "ContributionReturned(address,uint256)", +"8d491edf": "tokensDoctors()", "8d498158": "DaleoneToken()", "8d49cd7f": "getTeam(uint32)", "8d49da75": "stopCollection()", "8d4a2d39": "addSeconds(uint256,uint256)", +"8d4b44d9": "votesReceived(string)", +"8d4c11aa": "poolAllocPoint(uint256)", +"8d4c7129": "yourHypeBalance(address)", "8d4d801c": "addRecipient(bytes32,string,string,address)", +"8d4d8d18": "multi(address[],uint256[])", "8d4d8e19": "unregisterAsDelegate()", "8d4e4083": "isFinalized()", "8d4e57e6": "ROLE_TOKEN_CREATOR()", "8d4ea1ba": "addEtherForOraclize()", +"8d4f8351": "IoTDataProductCount()", +"8d4f94a7": "goGoGasTokenContract()", +"8d4feb02": "advertAddr()", "8d505019": "addNote(bytes32,string)", +"8d506a9e": "participateMine5()", "8d50b6d0": "doSelectDisputedStateRoot(uint256,bytes32,uint256)", +"8d50c4fe": "transportIDs(uint256)", +"8d50e967": "AllowEarlySeckey(bool)", +"8d51481d": "createWithdraw(address,uint256,uint256)", +"8d517742": "makeExpensiveHash(uint256)", +"8d51b87d": "getNewPotentialOwner()", "8d51faec": "setOwnerTestValue(uint256)", "8d521149": "bonus_received()", "8d52a1fc": "setStrikePrice(uint256,uint256)", +"8d52edf4": "BuyNow(address,uint256)", "8d539b35": "resetPendingContribution(address)", "8d53b208": "revokeAccess(bytes32,address)", +"8d53e227": "get3MostTeamDistanceTraveled()", +"8d5499aa": "func_2610()", "8d551860": "horseNotForSale(uint256)", +"8d552d46": "getBestAnswer(bytes32)", "8d553538": "addSecondaryRecord(string,bool,string,bool,string,string,string)", "8d5555f2": "priceFor(uint256)", "8d55719e": "_withdrawEther(address)", @@ -80752,44 +147793,76 @@ "8d565abf": "createTx(address,address,uint256)", "8d56ac74": "REALEX()", "8d56bc62": "Bankroi()", +"8d56cc9c": "setMaxBalance(address,uint256)", +"8d56e539": "unstake(string,address,address)", "8d574383": "setDemurrageFrequency(uint256)", "8d578bee": "totalSaleCap()", +"8d57b79b": "verifyOwnershipProof(string,address,address,bytes)", +"8d57d41a": "updateMinerStrengthWhenStart(uint256)", "8d5802e2": "getAssetOwner(uint256)", +"8d580b9f": "_RESCUE()", +"8d582ae4": "getGuess()", +"8d584bb1": "setAllowMintRequests(uint256,bool)", +"8d58c809": "TOKENID_SIZE()", +"8d590676": "claimTokensByDev()", "8d59cc02": "register(address,string,string)", "8d59d1f1": "donate(uint256,string)", +"8d59f5c7": "sushiIndex()", "8d5a225e": "assignReserveSupply(address)", +"8d5b87b6": "serviceAddress()", +"8d5bc6f5": "retrieveLimits(bytes32)", +"8d5c1867": "sendnow_donation()", +"8d5c399b": "recover2(address)", "8d5c4456": "pIndex()", +"8d5c5c9d": "contractsBalance()", "8d5c84cd": "isStart(bytes32)", +"8d5c9680": "voting(address)", "8d5cc102": "traded_token()", "8d5ceeca": "checkShares(address)", "8d5d1e97": "priceStar3()", "8d5d3429": "requestLoan(uint256)", +"8d5d8337": "join_SideB(uint256)", "8d5d88c9": "LTYG()", "8d5dee05": "EGGS_TO_HATCH_1TURTLE()", "8d5e4f9c": "BroFistCoin()", +"8d5ebb72": "setAuctinEthLimit(uint256)", +"8d5ecaaa": "calculateMSPEarnings(address)", "8d5f3f96": "nextInvestorsProfitSum()", +"8d5f81e2": "getPairAddress()", "8d5f8d1c": "forwardFundToCompanyWallet(uint256)", +"8d5f9b28": "address_weights()", "8d5fa05c": "setAreas(address,uint256)", "8d6014a8": "FixedCeiling(uint256,uint256)", +"8d602e14": "lockCheckpointOne()", "8d60be98": "ICO_TOKENS_PERCENT()", "8d60e30b": "reward(address,uint256,bool,string)", "8d60ed85": "setDevCutPercentage(uint256)", +"8d611412": "invest(string,string,string)", "8d614474": "AdvancedEthVocToken(uint256,string,string)", +"8d61cf26": "Transfer(address,address,bytes32)", "8d622749": "award(address,address,string)", +"8d625c2c": "getRemainingToFill()", "8d627e91": "isTryedFinishCrowdsale()", "8d62b845": "isMakersSignatureValid(address,bytes,string,address)", "8d63c77b": "WizardReplacedEvent(address,address)", "8d63cfa7": "getPixelOwner(uint16,uint16)", +"8d64565e": "getAuctionByTokenId(address,uint256)", +"8d646582": "getEntryIndex(address)", "8d647185": "setBaselineRate(uint256)", "8d647d3a": "allowPrivateParticipant(address,uint256)", "8d64bcf1": "maxWhitelistPurchaseWei()", +"8d64bed2": "balanceOfPoolPending()", +"8d64e236": "updatePoolFee(uint256,uint256,uint256,uint256,uint256)", "8d65095e": "PI_EDIT_3()", "8d656b83": "minWeiInvestment()", +"8d65f0f5": "cakeswapRouter()", "8d664d6a": "setFeeRates(uint8,uint8,uint8)", "8d670a2e": "unlockPlayerFunds(address)", "8d6731b0": "LudumToken()", "8d67799e": "MAX_SIZE()", "8d6819be": "mintTokens(uint256,address,uint256)", +"8d68836c": "getApproximateCollateralBought(uint256,uint256)", +"8d688892": "extern()", "8d688b6e": "EthPyramid()", "8d68cf59": "sendFunds()", "8d69121d": "addDocument(bytes32,string,string)", @@ -80798,295 +147871,559 @@ "8d6a2ed5": "minimumBuyAmount()", "8d6a6d4b": "_allocatePromoTokens(address,uint256)", "8d6a6fbd": "proxyTransfer(address,address,uint256,bytes,string)", +"8d6ab79d": "calcReturn(address,uint256)", +"8d6ac70d": "newCatWithAd(string,string)", +"8d6ad296": "sellEPU(uint256)", +"8d6b54b5": "DrawPorsche(address)", "8d6b5d3e": "getScouponAllocationFactor()", +"8d6b621d": "getTenantBalance()", +"8d6be108": "disableAsset(string)", "8d6c58ab": "isTransferToICAPAllowed(address,bytes32,uint256)", "8d6cc56d": "updatePrice(uint256)", "8d6cd879": "FOUNDATION_STAKE()", "8d6cd8de": "buffPtr()", +"8d6ce4b5": "getTokensIDsForAddresses(address,address[])", +"8d6dc51e": "LogBalanceIncreased(address,address,uint256)", +"8d6e117d": "VotingOff(uint256)", "8d6e56e1": "manyInputsNoReturn(uint256,uint256,uint256,uint256)", +"8d6e6fe5": "roundamount()", "8d6f24d4": "hash_msg()", +"8d6fd6a5": "ferrariPerBlock()", "8d702122": "ownerKill()", +"8d702eb0": "setVolatileStorageSender(address)", "8d70650f": "getSiteId(uint256,uint256)", +"8d7092e6": "checkOfferSpan()", "8d70baaa": "BattleOfTitansToken()", +"8d70baf0": "liftoffSettings()", "8d70c0ce": "transferToExchange(address,uint256,uint256)", +"8d70fa77": "setMetadataStore(address,address)", "8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", "8d711776": "sendCrypto(address,uint256)", "8d7117d4": "etherRatio()", +"8d711d04": "setLimitAmountToBuy(uint256)", "8d715d9d": "Backdoor()", "8d71f131": "TOKEN_RESERVE2_CAP()", +"8d72647e": "wbnb()", "8d72920b": "getAllowedAmountToContribute(address)", "8d72a473": "deductFunds(address,uint256)", "8d72f856": "deleteVip(uint256)", "8d734b30": "setupMintableAddress(address)", +"8d7391a5": "getAddressByMsg(bytes,uint256)", +"8d73925a": "tacgias(uint256)", "8d73c027": "mintWithApproval(address,uint256,address)", "8d747928": "isDrivezyPrivateTokenAcceptable()", "8d748148": "monitor(address,bool)", +"8d74fb77": "getClaimedTokens(address)", "8d74fd52": "GlobalTourToken()", "8d75533f": "mint(address,string,bytes)", "8d7570fc": "doBurn(uint256)", +"8d75ef67": "farmAddresses(uint256)", "8d75fe05": "mintedTokens()", "8d7601c0": "addResolvers(address[],uint256[])", +"8d76a5bb": "MAX_SLIPPAGE_PARAM()", "8d77090f": "TriggmineToken()", "8d776457": "sellBNT(uint256)", "8d78c90b": "EventUpgrade(address,address)", +"8d791974": "getInGameAccount(uint256,address)", "8d79283d": "query1_fnc()", "8d792964": "TD(uint256,string,string,uint8)", "8d7a55bf": "PubKeyHashTypeAdded(uint8)", +"8d7a654d": "pairAddressOfToken(address)", +"8d7ab0ee": "emitFromManager(string,uint256,address,string,address,bool,string,bool,bool,address,uint256)", +"8d7ae930": "tierLength()", "8d7af473": "numberOfProposals()", "8d7b5243": "minerTotalReward()", +"8d7b7572": "getYesVote(address,address)", +"8d7b7da4": "FirstBlNux()", +"8d7be3ea": "dfgDiamondKey()", +"8d7bf5a4": "artAsset(bytes32)", "8d7cdcf4": "setLLV_edit_8(string)", +"8d7ce096": "activeStake(address)", "8d7cffb7": "transferWrappedContractAdmin(address)", "8d7d2e5b": "minerPreSupply()", +"8d7d50c1": "setStartTimeUnLock(uint256)", +"8d7d9a68": "latestPriceAfter()", "8d7daf95": "isTokenPairWhitelisted(address,address)", +"8d7db968": "maxSecTurboStart()", +"8d7e41a8": "calculateSwapInAmount(uint256,uint256)", "8d7e5be0": "getClue1()", "8d7e7958": "userGrowsPoolSupply()", "8d7e8a57": "approveSpenders()", "8d7eca6f": "FUNDING_END_TIMESTAMP()", +"8d7ef9bb": "buyGem(address,uint256)", "8d7f26e9": "setIPAddress(bytes32,bytes32,address)", +"8d7f5e94": "getNextRoundTime()", "8d7fe693": "Helios()", "8d8001ad": "updateMintingStatus(uint256)", +"8d80520e": "afterRebase(uint256,uint256)", "8d809b0e": "project_wallet()", "8d80c34e": "unblockAccount(uint256)", "8d80c922": "getAddressById(uint256)", +"8d80ff0a": "multiSend(bytes)", +"8d817813": "SendAllFunds()", "8d81a1ce": "setClamTax(uint256)", "8d81a88f": "BP_ATHENIAN()", "8d81e2c0": "getTankTotalEarned(uint32)", "8d81f51e": "safeTransferChild(uint256,address,address,uint256,bytes)", "8d822615": "setFeeForArtWorkChangeRequest(uint256)", +"8d82305d": "_onlySynthetix()", +"8d824273": "getVoteInfo(uint256)", +"8d825d9d": "getAndValidateUniverse(address)", +"8d82b0a4": "changeDrip(uint256)", +"8d82b978": "getNovaOwnerAddress(uint256)", +"8d82ce76": "TokenDeed()", "8d835674": "euroRaised(uint256)", "8d837f38": "getEthBalTeller(address)", +"8d839ffe": "minCommitmentAge()", "8d83cc95": "getNextSnapshotBalanceOfMul(address[])", +"8d840361": "zhens(address)", "8d842fad": "stopPreICO()", +"8d8496a6": "drmMintTo(address,uint256,string)", "8d84a7fd": "credit(string,uint256)", +"8d851460": "getRelay(address)", "8d854fde": "getDisputeId()", +"8d856516": "bset(uint256)", +"8d85758c": "destroyItem(address,uint256)", +"8d858127": "getPD()", "8d859f3e": "PRICE()", "8d85a70f": "Vote(address,uint256,bool)", "8d860880": "CheckOut()", "8d86484c": "setPercentUnfrozenAfterAwardedPerPeriod(uint256)", "8d8660bc": "setQuantity(string,int256)", +"8d869a95": "addUserToBalanceArr(address)", +"8d86e0d3": "eggLimits(uint16)", "8d86faa6": "getAmountToGive(address,address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint256)", "8d87b102": "amountOfStakeToBeReturned(address,uint256)", "8d8833bf": "periodPreITO_wei()", +"8d887757": "swpPerBlock()", +"8d88a2ff": "revokeWhitelistAdmin(address)", +"8d88a90e": "dev(address)", "8d89873c": "updateAndGetRemaining()", +"8d89b1a5": "AirDropToken(address,address,uint256,uint256,uint256)", "8d8a7f07": "VLBRefundVault(address)", "8d8a88fc": "pay(bytes32,uint256,bytes)", +"8d8a9982": "initialBalanceOf(address)", "8d8acee9": "setupMultisig(address,address)", +"8d8afd3d": "vote(bytes32,address)", "8d8b1b88": "mixGenes(uint256,uint256)", "8d8bd44f": "TokenSaleFinished(string,address,uint256,uint256,uint256)", "8d8c36e9": "purchasedBy(address)", +"8d8c70bb": "uniswapPairIsInitialised(address,address)", +"8d8c91f0": "layvdvtheodoi(string)", +"8d8ca2fa": "flatcost()", +"8d8cc634": "redeemStake(address[],address[])", "8d8d22ba": "changeServiceAddress2(address)", "8d8d50d0": "createUnicorn()", "8d8d92fa": "theBid()", "8d8e2ea9": "Tablow()", "8d8e4561": "theGrid(uint256)", "8d8e5da7": "emergencyWithdrawal(address,address,uint256)", +"8d8f1e67": "devfund()", "8d8f2adb": "withdrawTokens()", "8d8f7780": "GEE100()", "8d8f95d1": "collectDrugs(address)", +"8d90237b": "MemoryArray()", "8d909ad9": "getSeedAndState(string,address)", +"8d9163db": "getNecroName(uint8)", "8d91801a": "RxEALTestSaleContract()", "8d91931f": "longLock()", "8d91e803": "buyWhiteCore(uint256,uint256,uint256,uint256)", "8d920b02": "rejectPayment(uint256)", +"8d92577d": "accessToken(address[],uint256[],bool)", +"8d925868": "_withdrawETH(uint256)", +"8d925ccd": "vatAddress()", "8d927069": "getTrace(uint256)", "8d927b34": "maxPendingBalances()", "8d928af8": "getVault()", "8d92910c": "isLegalAttack(uint256,uint256)", +"8d929a13": "transferEthToSgaHolder(address,uint256)", "8d92c187": "testFinalize()", "8d92ce46": "submitBlockHeaders(bytes)", "8d92fdf3": "withdrawAsset(uint256)", +"8d934485": "poolID()", +"8d934f74": "daoFund()", +"8d9351c6": "wallet(address,address)", "8d93758e": "PRESALE_STAKE()", "8d93eac2": "mintFeeNumerator()", "8d93ec88": "poolWallet()", "8d94053f": "verifyAutoridadElectoral(bytes32)", +"8d944fd9": "hasPermission(address,uint256)", +"8d947097": "CreateOwners(address,address,address,address,address)", "8d949635": "endRefundableTime()", "8d949c8b": "D(uint256)", +"8d949d4b": "updateBlockReward()", +"8d94da0d": "fragmentToHour(uint256)", "8d956f1e": "tokenTransfer(address)", +"8d9594bb": "createWeightMultiSig(address[],uint256[])", "8d95f245": "sellkey(uint256)", +"8d9642b3": "lockedTokens_12(address)", +"8d965633": "buyBaseToken(address)", +"8d96767d": "BondPayoutsBondIDLength(address)", +"8d969997": "adminestrator()", +"8d96bdbe": "availableRewardAmount(address)", +"8d976172": "updateTokenAllowStates(address[],bool)", "8d976d76": "investCommission()", "8d977672": "tasks(uint256)", "8d977d9e": "checkGameClosed(address)", +"8d978d88": "_nextHeaderBlock()", +"8d979e9a": "kingFeePct()", +"8d98d5b5": "maximumPercentagePerWallet()", "8d98ee43": "_verifyAddress(address)", "8d98f4e3": "getAllCardsDefence()", "8d9940b9": "createRetainer()", "8d995f94": "transferAndFreeze(address,uint256)", "8d99b2eb": "endPoll()", +"8d99b454": "EMax()", +"8d9a1783": "wbnbToSupraRoute(uint256)", +"8d9a5ad0": "getStrings()", "8d9a7b49": "pricePerMessageChanged(uint256,uint256)", +"8d9aba7d": "airdroppedUsers(address)", +"8d9acd2e": "receipt(address,address,uint256)", "8d9ad08e": "getAllInvestments()", "8d9afc0f": "getStageId()", "8d9b449b": "addRevenueShareCurrency(address,string)", +"8d9b8136": "excludeTrader(address)", +"8d9bbb8a": "setUSDCSpreadPerBlock(uint256)", +"8d9bc24c": "receiveInToken(uint256)", +"8d9c2852": "changeProtocols(address[],uint256[],address[],uint256)", +"8d9c8029": "maintainenceTotalEarned()", +"8d9d0819": "runningBlocks()", "8d9d851c": "toggleVaultStateToAcive()", +"8d9dbbcd": "deployPanelContracts(string,string,string,bytes32,uint256,uint256,uint256,uint256)", +"8d9dcee0": "lockerRegistrations(address)", +"8d9e36ba": "withdrawalNonceUsed(uint256)", "8d9e6e47": "setFinalICOPeriod()", "8d9e8a76": "CMGG12StandardToken(uint256,string,uint8,string)", "8d9efa3f": "LogPhaseSwitch(uint8)", "8d9f39d1": "_clear(uint256)", "8d9f95c4": "PresaleEntry(address,uint256)", +"8d9fc242": "LogBalance(uint256)", +"8d9ff5d1": "repayOrHandOverDebt(address,address,uint256)", +"8da005e3": "didIVote()", "8da03997": "getNativeReputation(address)", +"8da05f8f": "setLpStakingAddress(address)", +"8da096cb": "distributeTopInvestors()", "8da15531": "SimpleCoinToken()", "8da16e48": "geraHash(string,string)", "8da198cd": "simpleAssert(bool)", +"8da1df4d": "setOneSplit(address)", "8da1e722": "minGamePlayAmount()", +"8da2323b": "AddFeesToCoinSparrowPool(bytes32,uint256)", "8da2a2a1": "reserveDistribute()", +"8da2d4f0": "deposit(address,uint256,uint256,address,uint256)", "8da2defb": "WE(uint256,string,uint8,string)", "8da2fc26": "Burn(address,uint256,uint256,bytes)", +"8da31384": "requestPath()", "8da3d736": "addToList(uint256,address[])", +"8da411cc": "calculateExpectedAddress(uint256,address)", "8da46db4": "DistributeXcel(address)", "8da4d3c9": "claimCount()", "8da4d776": "newCommune(address)", +"8da56279": "bvaultsBankAddress()", "8da58897": "starttime()", "8da5cb5b": "owner()", "8da5fd77": "unlockSecondaryTokens()", +"8da606a8": "updateROI(uint256)", "8da66e67": "LogCollectAmount(uint256)", +"8da69d83": "allowPre(address)", +"8da6def5": "log(address,address,uint256,address)", +"8da6ea48": "_getCurrentCollateralRequirement()", +"8da720ff": "minTokenHoldBurnDivisor()", "8da76874": "mintFromTrustedContract(address,uint256)", +"8da7878c": "startTimeSale()", +"8da7ad23": "userStakes(address)", "8da7d0b5": "totalChildContracts(uint256)", +"8da7df22": "isPriceCurveInternal()", +"8da7f232": "pixels(uint256)", "8da8023c": "endTimeOfStage(address,uint256)", "8da8524f": "LogFrozenStatus(bool,uint256)", +"8da859b0": "distributionStartTime()", "8da87ac6": "addressFundPlatform()", "8da8a5ae": "nativeBlockhash(uint256)", "8da8f235": "_addController(address)", "8da91d04": "unset(uint32[])", +"8da92e71": "setPauseFlag(bool)", +"8da9a6d2": "recoverSigner(address,uint256,bytes)", "8da9b772": "getHello()", "8daaaa2f": "HOUSE_EDGE()", +"8daad257": "inheritance(address)", "8daaf0a2": "addTokens(address,address,uint256)", "8dab38da": "BONUS1_LIMIT()", +"8dab6d35": "Claimed(address,uint256,address,uint256)", +"8dab7191": "addDistributionToken(address)", "8dac0e8c": "GetEtherPrice()", "8dac7191": "initialTokenOwner()", +"8dad03e0": "buyBlock()", "8dad52f4": "dive4(address)", +"8dadd6f4": "lastBunny()", "8dae3d68": "awardLuckyCoin(uint256,uint256)", "8dae5adc": "FundTransfer(address,address,address,uint256)", "8dae9364": "_stakeAmountValid(address,uint256,uint256,bytes8,uint256,uint256)", "8daed4c4": "allocateShareholder(address,uint32)", +"8daed528": "transferVerifier()", "8daf08d9": "requestStempas(bytes32,address)", +"8daf1bc6": "brownWiresCut()", "8daf4dcf": "getTournamentRate()", "8daf5033": "TokenPurchased(address,address,uint256,uint256)", +"8daf609f": "DATA_PROVIDER_REVISION()", +"8daf7066": "tknAddrNdx(address)", "8db02d79": "Tiguan5Coin()", "8db0816a": "claimC2()", +"8db0b692": "calcSupplyChangeFactor()", "8db0e83b": "getBytesArray(bytes32)", "8db1296d": "token_creation_cap()", +"8db1342d": "percents(uint256)", +"8db1c3ea": "setFallbackWithdrawalDelay(uint256)", "8db1ccac": "PUBLIC_SALES_1_RATE()", +"8db210dc": "emitWorkRejected(uint256,uint256)", "8db23385": "balanceOfTotalUnclaimedCookie()", "8db261e0": "hardWithdrawAll()", +"8db26fb1": "repayCb(address,uint256)", +"8db2e796": "findFilesByAuthor(string)", +"8db355d2": "feeSplitRecipient()", +"8db3a84b": "yUSDAddress()", +"8db3abef": "setStoppable(bool)", +"8db3bbb6": "_setResumePrePaidPeriods(uint256)", +"8db3fe90": "recalcNextGameId()", +"8db449ba": "NarcoLeft(uint8,uint256)", "8db49b57": "GrantDeleted(address,uint256)", "8db4dad2": "contractSignedTime(string)", "8db517fb": "GMQToken(uint256,string,string)", "8db518f3": "ContractiumToken()", "8db54c90": "getTotalSendingAmount(uint256[])", +"8db564c2": "lockCounter()", "8db57994": "fundLoan()", +"8db5888a": "requestIdCounter()", +"8db5d082": "poolThreshold()", +"8db6c119": "userTotalStaking(address)", "8db6c17e": "ISCoin()", "8db7183a": "dateMarketing()", "8db783ce": "addHourToProject(uint256,uint256)", "8db78a37": "setBountyVault(address)", +"8db7a68f": "getCompletedContracts()", "8db7cd54": "getTournamentEntranceFee()", +"8db800bc": "oneArg(bool)", "8db8053b": "mintPresaleTokens(uint256)", +"8db8697e": "BuyCup(address,uint256)", "8db8f8bc": "ELACoin(uint256,string,string)", +"8db92f1c": "LimitMode()", +"8db93e3d": "setWithdrawDuringRelayedCall(address)", "8db9653f": "getTotalIssued()", "8db974e4": "optionTotalSupply()", "8db9c13c": "removePolicy(uint8)", +"8dba0946": "estimateMonaAmount(uint256)", +"8dba9b5b": "getraisingAmount()", +"8dbb1e3a": "getMultiplier(uint256,uint256)", "8dbb908a": "clearAllrequest()", "8dbbbe10": "getFeeTake(uint256)", +"8dbbd505": "CargoReady()", +"8dbbe625": "getSquare()", "8dbc2fd1": "setNewEndtime(address,uint256,uint256)", +"8dbc3dea": "callBack(uint256[3],uint256,bool)", +"8dbd33df": "setFeeaddress(address)", "8dbd7d54": "addCashier(address,address)", +"8dbd8108": "GetJoinedHistory()", "8dbdbe6d": "deposit(uint256,uint256,address)", "8dbdfae7": "referalBonusPercent()", "8dbe3be5": "isCeilingStrategy()", "8dbe6c33": "_setUserInfo(address,uint256,uint256,address)", +"8dbed645": "greeting1()", +"8dbefee2": "getTotalRewardsBalance(address)", +"8dbfd5e8": "claimPeriod(address,uint256,uint256,bytes32[])", "8dc01209": "CJC()", "8dc07e46": "picops_is_enabled()", +"8dc0f18a": "_configGovernor()", +"8dc10768": "cards(uint256)", +"8dc12991": "setBurnPercent(uint256,uint256)", "8dc1c44d": "testFailCreateWithParentSameNonce()", +"8dc1e277": "kat(address)", "8dc2a2cd": "GMCCERC20(uint256,string,string)", +"8dc30b70": "bidOf(address)", +"8dc3ead3": "totalChildrenAmount(address,uint256)", "8dc401ae": "withdrawAllDevelopersCut()", "8dc43256": "AFRTokenERC20(uint256,string,string)", "8dc45377": "getDuel1(uint256)", +"8dc48ba5": "loanPoolToUnderlying(address)", +"8dc491e2": "getRewards(uint256,address,uint256,uint256)", "8dc4c6ab": "recoverable(address)", +"8dc4e63a": "profitsDistributed(bytes32)", +"8dc50a27": "noom1PerBlock()", +"8dc53c1a": "registerContract(bytes,string)", +"8dc55b81": "shi()", +"8dc56657": "xConvertPrioritized3(address[],uint256,uint256,bytes32,bytes32,uint256,uint256[],address,uint256)", +"8dc5c936": "withdrawPercent(uint256)", +"8dc61dbe": "getLeftPreSalesAMT()", +"8dc63f36": "nextTimeLocks(address)", "8dc654a2": "withdrawLink()", +"8dc669fa": "BANCOR_ETH_ADDRESS()", "8dc6af54": "UsdToTokenConvert(address,uint256)", "8dc6e2f1": "onMarketFinalized()", +"8dc714ba": "f10()", "8dc71928": "minimumTargetReached()", "8dc73521": "clearLock(address)", +"8dc7b8db": "getkKushUniStakeAmount(address)", +"8dc7df72": "initToken(string,string,address,uint256)", +"8dc840db": "nyaShare()", "8dc850dc": "currentCoinsCreatedInteger()", "8dc889f6": "requestDisbursement(uint256)", +"8dc8d32b": "clearEndpoint(bytes32)", "8dc949e8": "SapienToken()", "8dc95182": "AssignWhitelistManager(address)", "8dc9650f": "claimdram()", "8dc98851": "Billboard()", +"8dc9b627": "updateProtocolImplementation(address)", +"8dc9b7d5": "totalStakedMythic()", "8dca05c9": "airFropPot_()", "8dca5511": "usdPerEve()", "8dca7a01": "unicornManagement()", +"8dcb18f7": "initialize(address,address,address[],address[],uint256[],uint256,bool,uint256,uint256,uint256,string)", "8dcb25e0": "balanceOf2Internal(address,address)", +"8dcb4061": "stakeAll()", +"8dcb7790": "fu()", "8dcb8c21": "coinsFlipped()", +"8dcc32e4": "findUsers(address)", +"8dcc829f": "registerCitizenPublic(bytes32)", +"8dcca5a6": "registerModule(address,bool)", +"8dccc567": "calcErc20Fee(address,uint256)", +"8dcd2661": "addProposal(string,bytes32[])", "8dcd555f": "_buyNextRank(address)", "8dcd64cc": "createAndEndowD(uint256,uint256)", "8dcd992e": "_setBabzBalanceOf(address,uint256)", +"8dcdc559": "Get_Tokens_Sold()", "8dcdfe12": "distributeCrowdsaleTokens(address,uint256,uint256)", +"8dcec5c0": "writeSenderAddress()", +"8dceef0a": "notFinished()", "8dcf7892": "setAllocateTokenDone()", "8dcfdaad": "removeMany(address[])", "8dcff4f9": "setupAssetOwningListener(address)", +"8dd0543e": "toggleLuckyBonus(bool)", "8dd05b56": "getImageDataLength(uint256,uint16)", +"8dd0731a": "SwapRatio(uint256)", +"8dd076d3": "decreaseLockAmount(address,uint256)", +"8dd0b145": "LogResult(uint256,bytes32,address,uint256,uint256,uint256,int256,bytes)", +"8dd0efd5": "provable_newRandomDSQuery(uint256,uint256,uint256)", +"8dd12e91": "juldToLp0Route(uint256)", +"8dd136fd": "getRatio(address,address)", "8dd14802": "setBridge(address)", "8dd1e732": "YYBToken()", "8dd1e96c": "getAngelFundAddres()", "8dd21b0f": "redTeamLockingPeriod()", +"8dd21fe6": "ownersV2(address)", +"8dd31c8b": "escrowAdd(uint256,address)", +"8dd3848f": "getSystemAddress()", "8dd3c196": "addInvestment(bytes32)", +"8dd3d902": "ktusd()", "8dd42808": "removeHolder(address)", "8dd47d91": "Wthdraw()", +"8dd4916b": "genesisNFT()", +"8dd49928": "testTransferTrxNonexistentTarget(uint256,address)", +"8dd4b8ad": "calculateethReceived(uint256)", +"8dd4ba2e": "destinations(uint256)", +"8dd4ef4c": "mintAndFinalize(uint256,bytes)", "8dd4f292": "getRemainingSellingToken()", +"8dd5365d": "investmentTimeStamp(uint256)", +"8dd549b5": "approveWallet(string,address)", +"8dd55108": "setBEP20DeployFee(uint256)", "8dd5ac24": "SaveToken()", +"8dd5bfbc": "purgeCachedSynthDebt(bytes32)", "8dd5e298": "canEnterPool(address)", "8dd66012": "incChildren(uint256)", +"8dd66fd5": "calcSwapEthToLunaInputs(uint256,uint256)", "8dd6908e": "ambassadorMode()", "8dd6ce79": "setRatePrices(uint256)", "8dd745bb": "adminSendTokens(address,uint256,uint256)", "8dd747ec": "balanceOfKyCToBeApproved(address)", +"8dd7c5df": "widhdrawTokens()", "8dd7d6d1": "newPuppet()", "8dd7e44b": "withdrawalComplete()", +"8dd84c23": "totalRefundedETH()", "8dd8596c": "sendDonation()", +"8dd88e4c": "masterYmen()", +"8dd8c7e4": "getPermissionCode()", "8dd9054b": "MATCoin()", +"8dd91a56": "projectDetails(uint256)", +"8dd9470c": "setRateToClaimReward(uint256)", +"8dd95002": "WBNB()", +"8dd9582c": "OperationUpvoted(bytes32,uint256,uint256,uint256,address)", +"8dd98312": "openPresale()", +"8dda4037": "calculateTotalFees(address,uint256,bool)", "8dda811c": "GameChannelBase(address,uint256,uint256,address,address,uint256)", "8ddab3dc": "_preValidateRefill(address,uint256)", "8ddab515": "MedicayunLink(uint256,string,string)", +"8ddafdb2": "transferCurveSetterRole(address)", "8ddb428a": "currentGeneration()", +"8ddbeb07": "utilCompareInternal(string,string)", +"8ddbf8e2": "__UUBaseERC20_init(address)", +"8ddc2020": "changeNft(address)", "8ddc9aa7": "UpgradeProposed(address)", "8ddcf81e": "get_deal_status(uint256)", "8ddd8b69": "renounceFreezer(address)", "8dde60fa": "transferCoin(address,uint256)", "8dde907e": "FooBurnableToken()", +"8ddeb638": "DividendsTransferred(address,uint256)", "8ddf52bd": "earlyContribShare()", "8ddf792b": "setOraclizeGasLimit(uint256)", +"8ddfb250": "full_release()", +"8ddff985": "lastLuckyDrawAmt()", "8de022b7": "dropAnchor(uint16,uint16)", +"8de030de": "accessList(bytes4)", "8de04f87": "authorized_updateCardReserved1(uint256,uint8)", +"8de097f0": "LogDeposited(address,uint256,uint256)", +"8de0c417": "__test__collect(uint256,uint256,uint256)", "8de0ece7": "THEWOLF10XToken(uint256,uint256,uint256,uint256,address,address,address,address,string,uint256)", +"8de10e87": "changeFundsGovernor(address)", "8de12845": "init(string,string,string,string)", "8de1dcea": "rateAngelsDay()", +"8de1fa6d": "registerPlan(uint256,uint256,uint256,uint256)", "8de21650": "getBooleanValue(string)", "8de2947c": "chkLockedTokens(address,uint256)", "8de2a051": "setUint(uint256,uint8,uint16,uint32,uint256)", +"8de3133d": "Bid(address,address,uint256,uint256,uint40)", "8de3317d": "withdrawDRPU(uint256)", +"8de38f98": "addr2()", +"8de46362": "mulExp3(uint256,uint256,uint256)", "8de4f42f": "addNewAirdrop(uint256,string,uint256,address)", "8de5104b": "startPreICOStage2()", +"8de54883": "checkHolderPermission(address)", +"8de55f53": "approve_835(address,uint256)", "8de575e4": "Veen()", "8de69284": "subscribe(address,uint256)", "8de69c3c": "AcceptsDailyDivs(address)", "8de69f66": "allocateAdvisorTokens(address[],uint256[])", "8de6b343": "deleteFromBlacklist(address)", +"8de6c3eb": "addSmartToken(address)", +"8de6f511": "d5(uint256)", "8de74aa1": "setEstateRegistry(address)", +"8de790a1": "deactivateInsurance()", "8de85908": "ProjectCall(address,uint256)", "8de8d47c": "sendObjectWithoutApproval(uint256,address)", "8de8de61": "CC5Coin()", +"8de8e231": "adminSharedDate()", "8de8e295": "setSupplyLimit(uint32,uint32)", +"8de8e51b": "TransferAllFundsOut(address)", "8de93222": "purchase(address,uint256)", "8de9ee05": "TakeBuyOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"8dea30c8": "_currentTFDay()", "8dea60cc": "CryptopediaCoin()", +"8dea9da2": "TransferFail(uint256,address,uint256)", +"8deb47ad": "investedSum(address)", +"8deb4f29": "getConways(bytes18[])", "8dec1720": "invites(address)", "8dec3daa": "destroy(uint256,address)", "8dec818a": "LogPaused(bool)", +"8ded08ca": "_onDisputableActionRejected(uint256)", +"8ded42b6": "CreateFashion(address,uint256,uint16,uint16,uint16,uint16)", +"8ded4587": "findtwoPercent(uint256)", "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[])", +"8def6f07": "borshch()", "8defbc5e": "right31(uint256)", "8df068ab": "initialTransferToDevTeam()", +"8df08bd4": "earningsOf(address)", "8df0fda1": "isApplicationExits(string,string)", "8df10469": "refundInvestor(uint256)", "8df15e19": "tokenLock(address,uint256)", @@ -81094,100 +148431,174 @@ "8df208b7": "StopQ()", "8df272d2": "CosmoCoin(address,address)", "8df301aa": "tradeKyber(address,uint256,uint256,address)", +"8df30fad": "deprecated_getTotalStakedTokensOnSmartContract(address)", "8df35abe": "setManagerAndClaimer(address,address)", +"8df37386": "deployTitle()", "8df388c1": "totalUnvestedAndUnreleasedTokens()", "8df3a24c": "canAcceptBuyNow(uint256,address)", +"8df3fab3": "modifyLiquidity()", +"8df40469": "modifyParameters(address,address,address,uint256,bytes32,uint256,uint256)", "8df41c32": "allocationAddressICO()", "8df4235f": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8df442c7": "getTokenForToken(address,uint256,address)", "8df465ea": "Zendad()", "8df48935": "uncooperativeClose(address,uint32,uint192,bytes)", "8df4d225": "GLXChain()", +"8df501b4": "setRefCommission(uint256)", "8df554b3": "Dividend()", "8df583bd": "exchangeBBDBalance()", "8df5fc7a": "_RewardClaimed(address,uint256,uint256)", "8df61294": "totalAmountOfOrders()", +"8df620a8": "b(address,address,address,uint256)", "8df6ad66": "isArrAccountIsNotFrozenForReturn(address)", "8df6af63": "setCHGUSDPrice(uint256)", +"8df76f51": "getPayAmount(address)", "8df793d6": "leaseCard(uint8,string,string,string)", +"8df80ceb": "changeStrategy(address,address)", "8df8228c": "x888()", +"8df82800": "settle(uint256)", "8df87c66": "_getTokenLockType(uint256)", "8df8ac87": "recevedTokenFromEvabot(address,uint256)", "8df8c008": "getFreeTurtles()", "8df8cc4c": "_removeOperator(address)", +"8df8d17e": "NewCustomerTx(address,bytes32,bytes32,uint256,uint256,uint256)", "8dfa6fcb": "endTimeAddBonus()", "8dfa703f": "BitkerToken()", +"8dfa95f4": "emitWorkDistputeResolved(uint256,uint256)", "8dfaf7f0": "getTeamsInfo()", "8dfb015f": "increaseInvestedWei(uint256)", "8dfb04fe": "getExistCell(address)", +"8dfb2636": "delayLockTimes(address)", +"8dfb72f9": "createStreamToBonding(uint256)", "8dfb9950": "transferTokensManually(address,uint256,uint256)", "8dfbcf36": "addCapper(address)", +"8dfc9b50": "calculateBuffRate(uint256,address,uint256)", "8dfced82": "amountBonusEnabled()", "8dfd1242": "updateStarScoreInBulk(address[],uint256[])", "8dfda5ae": "getIndexByAddress(address,address)", +"8dfde339": "totalTokenTypes()", "8dfde39d": "abi(bytes32)", "8dfef745": "bonussale_StartDate()", +"8dff16d8": "lostDividends(address)", "8dff1762": "RpsGame()", "8dff4abd": "activateRevenueShareIdentifier(string)", +"8dff4c1d": "PreSaleStarted()", +"8dff4f77": "close(uint256,address,uint256,uint256)", +"8dffc469": "Revoke_Regulator_Registeration(address)", "8dffe343": "kvcDiv(uint256,uint256)", "8dffe5c0": "buyPlace(uint256,string)", "8dfff9f2": "changePrepaymentFee(uint256)", "8e005553": "setFee(uint16)", +"8e0063e8": "BurnFinished()", "8e006db0": "setProductStock(bytes32,uint256)", +"8e0072eb": "Freezed(address,bool)", "8e007cfa": "giveEthxAddress()", "8e008b59": "_createTeam(address,uint32[])", +"8e0120b8": "destroyProxy(uint256)", +"8e0137b9": "functionThree(uint256,uint256)", +"8e0156ec": "distributiontime()", +"8e01bfe7": "shareReward(address[],uint256[])", "8e01d34b": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint8,uint8,uint8)", "8e0273bb": "Existing(address)", "8e0294a8": "_removeProposal(address)", +"8e034f91": "addressLabs()", "8e035ac1": "BetOnHashV82()", +"8e0399d1": "safeTransferBNB(address,uint256)", +"8e03b2d1": "ovmEXTCODECOPY()", +"8e03bcdf": "verifyProof(bytes32,uint32,uint32,bytes,bytes32[],bytes32[],bytes)", +"8e03ce62": "requiredTotal()", "8e045031": "isTokenCollected(uint256,address)", "8e048315": "investorDeposit(address,uint256)", "8e0488a8": "transferirSalaDePara(address,address,uint256)", "8e04977d": "currentLotteryValue()", +"8e051bc2": "summoning(address)", "8e056fe6": "setBirthBlock(uint256)", +"8e058638": "externalAuthorizePurchase()", +"8e0596a2": "predictionCount()", +"8e0597c1": "claimingDisabled(address)", "8e05beb3": "token(bool,address,address,address,address,address[],uint256[])", "8e05d59d": "signToApproveTokenControlInfo(uint256)", "8e05d8a5": "_computeNextGen0Price()", +"8e05e0e3": "Upgraded(string,address)", "8e068b11": "virtualReserveBalance()", +"8e06d202": "addnewAddress(address)", +"8e07b96a": "totalJadeProductionSnapshots(uint256)", +"8e07cd45": "pick(uint128)", "8e07d7da": "confirmKittyActions(uint256,uint256[8])", "8e082555": "changeOwnship(address)", +"8e085c37": "depositToPancakePool(uint256)", +"8e087c78": "earnLowerlimit()", "8e08b2ec": "MinesOnTrade(uint256)", +"8e08bb57": "AppInstanceCreated(address,bytes32,bytes32,bytes32)", "8e08cf38": "updateBonus(uint256,uint256,uint256,uint256,uint256)", +"8e098215": "tarifs(uint256)", +"8e098ca1": "updateIdentity(address,address)", "8e09c8cd": "addCallSpenderWhitelist(address)", "8e09ead7": "isTokenBankroll(address,address)", +"8e0a4ddf": "burnInfo(address)", "8e0a5faa": "invariant(address)", "8e0adbf5": "getLLV_edit_11()", "8e0af993": "setPrivateFund(address,uint256,uint256)", "8e0b017d": "setSellRate(uint256)", +"8e0b10f7": "investor1()", +"8e0b1c93": "setref(address)", "8e0bba69": "iown()", +"8e0be369": "removeExchange(address)", "8e0c2882": "drain_alltokens(address,uint256)", "8e0c36c4": "verifySeed(bytes32,bytes32)", "8e0c8999": "zkWithdraw(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[])", "8e0cac02": "redeemMarketingAndRNR()", +"8e0cc176": "withdraw(bytes32,address,address,uint256)", +"8e0d3ca7": "removeSupportedIdentifier(bytes32)", +"8e0d4078": "finishTradeWaitTime()", "8e0d5075": "claimDividendsForBlock(uint256)", +"8e0d8b7b": "grapsScalingFactor()", "8e0db0d9": "keyAtIndex(uint256)", "8e0e8fb2": "approveProvider(address,uint256)", "8e0ea5cf": "ReturnTokensFor(address,address,uint256)", "8e0eef8e": "getTicketValue(uint256,uint256)", "8e0ef033": "defrostTokens()", +"8e0f0154": "append(string,string,string,string,string)", +"8e0f0d61": "buyCallTickets()", "8e0f65eb": "isBelow(int256,int256,string)", +"8e0f6c15": "nextTradeTime()", "8e0f9b85": "Smartcarblockchain(address,uint256)", "8e0fee1f": "withdrawRefBalance()", +"8e0ffafc": "openDdaListIndex(address)", "8e101867": "maxTotalAmount()", "8e1069f3": "getPlayRecord(address,address)", +"8e10989c": "newopen()", "8e10be33": "primaryOwner()", "8e111ef6": "addressOfERC20Tocken()", +"8e118b83": "__LnAdminUpgradeable_init(address)", +"8e12012e": "safeMintBatch(address[],uint256[],string[],bytes[])", "8e120f36": "prepareToPayWinners(uint32)", "8e1227b2": "KTCWhiteList()", +"8e122f4a": "myTotalInvestmentTokens()", +"8e127793": "totalActiveBalanceAt(uint64)", "8e12823b": "getCompanyHash(address)", +"8e12d8e0": "loanIdToUser(uint256)", +"8e12ebad": "getWorstOrderId(uint8,address,uint256)", +"8e131d93": "reduceMARK(uint256,address)", +"8e131e5d": "transferRate()", "8e13435b": "MathPractice()", +"8e135355": "getCarr(uint256)", +"8e1396c6": "test_DSProxyFactoryCheckCache()", +"8e13a4b9": "getAmount0DeltaEquivalency(uint160,uint160,uint128,bool)", "8e14cc91": "CreateTokens()", +"8e150e87": "add_device(string,uint256,string)", "8e151947": "newBitsoAddress(address)", "8e15e94b": "countOfCell()", +"8e15f473": "getLatestPrice()", "8e15fc87": "clearDeposits()", +"8e164ec1": "getTarget(address)", "8e165058": "sendTokensToBuyers()", +"8e1751c8": "getCauses(uint256)", +"8e178b00": "toggleLiquid(uint256)", "8e17de8b": "Controlled(address)", "8e180733": "_validCrowdsale()", "8e1876ee": "permaStop()", +"8e18cdfc": "swapTokens(address,address,uint256,uint256)", "8e19899e": "withdraw(bytes32)", "8e19ee4c": "Recovery(uint256,address,address)", "8e1a1c30": "WithdrawLeftToOwner(uint256)", @@ -81195,43 +148606,82 @@ "8e1aa2c4": "bts_address1()", "8e1b9f42": "CROWDSALE_WALLET_ADDR()", "8e1bb633": "triggerRecovery(uint256,address,uint8,bytes32,bytes32,uint256)", +"8e1cc80b": "availReInvest(address,uint8)", "8e1d9545": "setTokenSaleHalt(bool)", "8e1dfd48": "isMerhantAlreadyRegister(address)", "8e1e2add": "tradeABIHash()", "8e1e3e6c": "POMACOIN()", "8e1e3eb1": "setMinBuyEth(uint256)", +"8e1e4829": "getDepositParams()", +"8e1e9c1f": "clearBackupData(address,uint256)", "8e1eeb09": "BarrelAgedFOMO()", "8e1f0614": "EGYPT()", +"8e1f8525": "cdpi(address)", "8e1fda84": "WorkcoinCrowdsale(address)", +"8e1fef60": "maxVotedSol(string)", "8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", +"8e201ee5": "BEP20TokenRequests(uint256)", +"8e204c43": "isBlocklisted(address)", "8e207fa0": "getApproveValueValue()", +"8e20a1d9": "totalDivPoints()", +"8e21091f": "Warning(string)", +"8e213268": "returnBook(uint256,address)", +"8e21aa01": "btcAddressIsClaimable(bytes20,uint256,bytes32[])", +"8e22708e": "grantGameMinter(address)", "8e22e8de": "Cryptolotto7Days(address,address,address,address)", "8e236cea": "setAnnualPrice(uint256)", +"8e236d32": "LogChiPurchase(address,address,uint256,uint256)", +"8e23a2f5": "proposals(address,uint256)", +"8e23e0cc": "PLS_TOKEN()", "8e242d54": "withdrawSharesTo(address,uint256)", +"8e246d82": "daily_Income()", +"8e24a764": "addMintRequest(uint256,string,string)", "8e25071a": "setProxyCurrator(address)", "8e263e6f": "firstAttack(address,uint256,uint256[],uint256[])", "8e268934": "LogSendPOSTokens(address,uint256,string)", "8e26a223": "getPoSReward(address,address)", +"8e26b01e": "_maxStakedCifi()", "8e26c09d": "waitPeriod()", "8e26c30c": "carTransferState()", "8e26e582": "_mintDataStream(address,uint256,bytes32,bytes32,uint256)", "8e273ef4": "buyLicenseForERC20(address)", +"8e274844": "shouldUpdate(uint256)", +"8e27cb25": "createAuction(string)", "8e27d719": "deposit(string,uint256)", +"8e27d7d7": "monetaryPolicy()", "8e280dce": "findNextYear(uint256,bytes)", "8e2832b7": "ethereumToTokens(uint256)", +"8e283334": "lockTypeInfoGroup(uint8)", +"8e285c96": "setNftType(uint256,bool)", "8e298549": "migrateListing(bytes32)", "8e29d149": "claim_block()", "8e2a37b2": "privateAllocated()", "8e2a6470": "allocateShares(address,uint256)", "8e2a8312": "EmjacToken()", +"8e2a9bb0": "getNumRemainingControlUpdates(uint256)", "8e2ab359": "_transferToAddress(address,address,uint256,bytes)", +"8e2ac0ea": "issueMaxPynths()", "8e2ae564": "mintingDone()", +"8e2ae59c": "fca()", +"8e2b6a16": "lockdWallets(uint256)", +"8e2bbb35": "BRDPerBlock()", "8e2c6f4d": "initiateVerification(address,bytes,bytes)", +"8e2c71df": "StorageUpdated(address,address)", "8e2d0699": "getCompte_32()", "8e2e0776": "doInitialDistribution(address,address,address)", "8e2e2077": "setTokensForSaleCount(uint256,bool)", +"8e2e925f": "executorSuccessShare()", +"8e2ea3aa": "prevWinners(uint256)", +"8e2ec9b6": "approve_106(address,uint256)", +"8e2ecc3f": "epochTimestamps(uint256)", +"8e2ed557": "airDrop(uint16,address)", "8e2f0f46": "ownerSetMarginPremium(uint256)", +"8e2f229f": "usersIndex(address)", +"8e2f2deb": "buyToken(uint256,string)", +"8e2f5fcc": "Remove(address,uint256)", +"8e2f7a97": "totalOwnerAccounts()", "8e303097": "BestWallet(address)", +"8e303f84": "DistributeToken(address,uint256)", "8e3047d9": "getBonuses(address)", "8e3047e0": "getCrossConnectorReturn(address,address,uint256)", "8e3058f3": "getPostFromId(address,string,uint256)", @@ -81241,52 +148691,94 @@ "8e3177e1": "purchaseIpfsAfterTitle(bytes32)", "8e32217a": "calculateTokensQtyByEther(uint256)", "8e327dd3": "setInvestor(address,uint256)", +"8e328cf0": "_createWatchIpsum(string,string,string,string,string,uint256,string)", "8e32e421": "expiredTime()", +"8e333ce5": "tokenPriceInBNB(address)", "8e3390b4": "contributeMethodABI()", "8e339b66": "controllerApprove(address,address,uint256)", +"8e33f97e": "sLock()", "8e343516": "balanceWinPoolToWinSystem()", +"8e349741": "OnWithdraw(address,address,uint256,uint256,uint256)", "8e351097": "MintedTokenCappedCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", "8e3571c0": "testNewCounterValueAfterAIncreaseAndADecrease()", "8e357b6f": "AirTrafficControllerROS(address,int256,address)", +"8e357b7a": "getPosUsers2(address)", +"8e369531": "pledges(address,uint256)", "8e36a9f1": "Neurus()", "8e370b3d": "UnsoldTokensReturned(address,uint256)", "8e372dcd": "refineCoke(uint256)", +"8e375396": "TakerFeeUpdated(uint256,uint256)", "8e37adec": "setAddressArr(address[])", "8e37c1e0": "collectorWeiCollected()", "8e391cb2": "ProxyERC223()", "8e3957d9": "RandomNumber()", +"8e39b721": "claimMonthlyStake()", +"8e39b92f": "balanceOfCircle(uint256)", +"8e39e007": "unFreezeToken(address,uint256)", +"8e39e165": "_encode_sol_bytes6(bytes6,uint256,bytes)", +"8e3a9cbd": "initialize(address,address,string,string,string,uint256,address[])", "8e3ab913": "transferToMany(address,address[],uint256[],uint256,uint256,address)", +"8e3ac1b8": "regCause(uint256,uint256,string,uint256)", +"8e3adb99": "to64x64(bytes16)", "8e3af93f": "finalizeMint(uint256)", "8e3b4525": "setExchangeLimit(uint256)", +"8e3b63ba": "FOUNDER_MANAGER_ROLE()", +"8e3bab9e": "lastCampaign()", "8e3bd6fa": "SetTradeable(bool)", +"8e3c03c5": "NUSITERATOR()", +"8e3cb1f9": "buyAssetIntroducerSlotBySig(uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"8e3cbc53": "timeSinceLastVested(address,uint256)", "8e3d4e5e": "Fibonacci(bytes)", "8e3d5303": "addRegistrar(address,string)", +"8e3d5d56": "adam()", "8e3d63e3": "multiSendEth(uint256,address[])", +"8e3d728a": "fillSellOrder(uint256,uint256,address,address)", "8e3d7ae7": "drawFortune()", "8e3dbf53": "getSalesPartnerAmount(address)", "8e3dcc60": "sell_spice_melange(uint256)", +"8e3dfa5f": "buyPool(uint256)", "8e3e1d86": "fisherYates(uint256)", "8e3ed7d7": "sendEthers(address,uint256)", +"8e3f545f": "setD2Asset(uint256)", +"8e3ff7e2": "LogPayReferrerBonus(address,uint256,uint256)", "8e406072": "getKingdomCount()", +"8e40890c": "registerAccount(address,uint256[2],uint256[2],uint256[3],uint256)", "8e414295": "Elixer()", +"8e4157a6": "setranseed(address)", "8e416b9b": "randomFight2DeathContract()", "8e417b30": "GTokenContract(uint256,string,string)", +"8e419efd": "osfi()", +"8e421f16": "revokeHashPreSigned(bytes,bytes32,uint256)", "8e424f16": "onlyOwnerSetCompanyWallet(address)", +"8e42e4b5": "redemptionRateLowerBound()", +"8e42fad5": "setMiMiContract3(address)", +"8e4310c5": "addConfig(address,bytes32,uint256,uint256,uint256)", +"8e43342f": "InitialBalanceChanged(uint256)", "8e434b82": "DADCoin()", +"8e4372ed": "getHoldBonus(address)", +"8e437c5f": "turnout()", "8e438b70": "ConpayToken()", "8e43e70e": "ParentKidsLinkToken(uint256,string,string)", +"8e44a836": "MIP28c7SP1()", "8e44e74e": "DEFROST_MONTHLY_PERCENT()", "8e452fc0": "findAvailableGame(address)", "8e4553a4": "script(address,bytes)", +"8e455a09": "updateReserveNg(address)", "8e455a1d": "_createVote(uint256,uint256,uint256)", +"8e467bd6": "betToAddress(uint256)", "8e468a88": "donationMap(address)", "8e46afa9": "getDefaultGracePeriod()", "8e46b68b": "keysRec(uint256,uint256)", +"8e46e61a": "GiveAllRotToHFLYContract()", "8e46f716": "CoinX(uint256,string,string)", "8e46fbb2": "testBitsXorFailIndexOOB()", +"8e470d44": "initialize(uint16,uint16,uint256)", "8e4748cf": "MintingERC20(uint256,uint256,string,uint8,string,bool,bool)", +"8e47a7a9": "Produce(uint256)", "8e47b87b": "FundsReceived(address,uint256)", "8e47dd03": "currentProfitPct()", +"8e47ecb8": "epochReleaseTeam(address)", +"8e482667": "_removeProUser(address)", "8e48474a": "chooseWinner(string,string)", "8e496832": "DataContract()", "8e497470": "displayNick(address)", @@ -81297,6 +148789,9 @@ "8e49dd3f": "Failed(uint256,address,uint256,address,address,uint256,address,uint256,uint256)", "8e49ff47": "AntzToken()", "8e4a23d6": "Unauthorized(address)", +"8e4a4484": "getUserReferralBonusTotal(address)", +"8e4a5a92": "releaseHold(string)", +"8e4a7714": "transferFeeReceiver()", "8e4a943d": "IcoResumed()", "8e4ab74b": "BANKROLL()", "8e4adf4e": "tokenUpgrader()", @@ -81304,59 +148799,115 @@ "8e4b0190": "deleteWorkerAdress(address)", "8e4bf820": "settleBet()", "8e4c64c0": "grantsController()", +"8e4c7013": "_decode_sol_bytes25(uint256,bytes)", +"8e4c8e5c": "withdrawOtherERC20(address)", "8e4cb2a9": "balances_after_buy(address)", "8e4d0a83": "setLockupList(address,address,uint256)", "8e4d5053": "getcontractBalance()", "8e4e0f03": "teamAndExpertsTokens()", +"8e4ec60a": "isValidatorDuty(address)", +"8e4ec6ef": "dydx()", +"8e4efece": "_collectGasTokens()", "8e4f9606": "updateReputationScore(address,uint256)", "8e4fa788": "accountHasCurrentVote(address)", +"8e500951": "Finalized(address)", +"8e502276": "defineContractorTechnician(address)", "8e5051f0": "weiToOwner(address,address,uint256)", +"8e50817a": "changeUser(address,address)", "8e50a65d": "prepareDividends()", +"8e510516": "token_share()", +"8e510b52": "maxSupplyDiff()", "8e514018": "getRandomPrice()", "8e5152d6": "addToAngelExperienceLevel(uint64,uint256)", "8e51b069": "ownerAddMarket(address,address,address)", "8e51d624": "failsafe_addition(uint256,uint256)", "8e52019d": "ECASH()", +"8e52aded": "Rein_Total_Fund(uint256)", "8e52cb51": "getRecordKey(bytes,bytes,bytes)", +"8e530f3a": "MarketplaceData(address,bytes32)", "8e535ade": "lrcInitialBalance()", "8e53d5e4": "cumulative(uint256)", "8e53f4fb": "preicoSale()", "8e543a12": "getLoanAmount(address,address)", +"8e54edd9": "weth_ilk()", "8e550bd1": "lastNewInterest()", +"8e551abf": "emptyListOfHolders()", +"8e55c73a": "burnBannedUserBalance(address)", +"8e55ee98": "wbtcPoolUsage()", +"8e56424d": "setMaxPresaleLength(uint256)", +"8e5653d4": "createUriSet(uint256[])", +"8e5691ae": "findBurnAmount(uint256)", +"8e5696e6": "claimTeamFee()", +"8e569d3e": "CalculateMonthlyRepayAmount(address)", "8e57d397": "modifyHorseyFeedingCounter(uint256,uint8)", +"8e57f1d3": "updateIgnoreOfBurger(address,address)", +"8e584407": "phase4time()", "8e588306": "getAutonomousSoftwareOrgInfo()", "8e5919b6": "setEdoRate(uint256)", "8e592caf": "KittyKendoCore()", "8e599d50": "joinFunction()", "8e59a15b": "checkMinGoal()", "8e5b2899": "check(bytes20,uint24,uint32,bytes32[],uint16)", +"8e5b490f": "apply_smart_wallet_checker()", +"8e5b7304": "protocolId(address)", "8e5c2e8a": "LogContractOwnershipChangeCompleted(address)", +"8e5d05cc": "consumeProofs(address)", +"8e5d31db": "TradeComplete(uint256,address,address,uint256,uint256)", +"8e5d322e": "UpdateDollar(uint256,uint256)", +"8e5d7243": "saveTokens(address,address)", "8e5d97a2": "releasePendingTransfer(uint256)", "8e5e91ac": "executeStakeholderTransaction(uint256)", +"8e5ede1f": "transferRigelOwnership(address)", "8e5ee9ec": "currencyToToken(bytes32[8],bytes)", "8e5ef4ea": "DataShieldCoin(uint256,string,string)", "8e5ef8fe": "ChivesToken()", +"8e5f5f57": "flashloan(address,uint256)", "8e5fd5fa": "validateReservation(address,uint8)", +"8e5fffda": "timeControl()", "8e604b1d": "queryItems(bytes32,uint256,bool[6],bool)", "8e611cee": "deductFromUnminted(uint256)", +"8e6127b8": "totalEtherEarned()", +"8e6154ee": "ETH_VAULT(address)", +"8e619b07": "reviewApplication(bytes32,uint256,address,string,bool)", +"8e629852": "LogCharityTransfer(address,uint256)", +"8e62b476": "withdrawalConfirmed(address)", "8e62bbd9": "DigitalCoin()", "8e62c982": "initialARXSupply()", +"8e62ed51": "tokenUnits(address)", +"8e63089f": "servicePoolRequestFeeInWei(address)", +"8e632da3": "ceilingPercentageChange()", "8e634029": "communityContract()", +"8e6350e2": "delegatedAssets()", "8e637a33": "authorizePayment(string,address,uint256,uint256)", +"8e63bfdb": "setupperbound(uint256)", +"8e63c7f9": "Escrows(bytes32)", +"8e63d3a5": "extraBonus(address)", "8e63d7e1": "getTopLevel(uint256,uint256)", "8e63ef75": "icoEtherReceivedPrivateSale()", +"8e641075": "isIndivEffect(uint256)", "8e641963": "_mintCards(uint32)", "8e64a720": "PlendsToken()", +"8e64c56b": "_trLaunchVestingStageSecs()", +"8e64eac5": "contractAdminCount()", "8e65f7e4": "logAllTransactions(address)", +"8e660c24": "tokensForInvester3()", "8e6635a5": "toUint128Throw()", "8e66ca5f": "setFirstBonusLimitPercent(uint256)", "8e66da2f": "cancelBet(uint8,uint256)", "8e66fea2": "TTCTokenERC20(uint256,string,string)", +"8e675663": "updateLiquidityFee(uint256)", +"8e677470": "gaufAddress()", +"8e67cedf": "attachTransactionDescription(address,bytes32,bytes,uint256,string)", +"8e6827be": "putTogetherMetadataString(uint256)", +"8e686d56": "TARGETBOND()", "8e68f000": "oneTokenInWei(uint256,uint256)", "8e690315": "AttributaOwners()", +"8e691b9a": "setDepositFeeRate(uint256)", "8e69367e": "RandomizedPriceFeedApi()", "8e694807": "PHOENIX_CORSAIR_MAX_CARGO()", "8e6954de": "totalFci()", +"8e695e21": "getFundValues()", +"8e697c48": "gemScale()", "8e69ceec": "dispatchTokens(address,uint256)", "8e69e204": "getPeriodsWithdrawal(address,bytes32)", "8e69eeb9": "setDefaultVoteRules(uint256[5])", @@ -81366,268 +148917,504 @@ "8e6b551c": "sumHardCapPublicSale()", "8e6b77a2": "interestArray()", "8e6b851d": "valueGet(string)", +"8e6bb34f": "transferOut(address,uint256,string)", "8e6bee97": "pay(uint256,bytes32)", +"8e6c0959": "controllerImplementation()", "8e6ce1b1": "getActiveSellDetails(bytes32)", +"8e6cf31a": "depositDividend(address)", "8e6d2599": "_activeness2level(uint256)", +"8e6d4902": "SKlay()", "8e6d531d": "setSubPromoter(address)", +"8e6d6a30": "sashimiClaimThreshold()", "8e6d7db8": "updateInstitutionAsset(string,string,address,address)", +"8e6d81a7": "setLiquidation(bool,bool,bool)", +"8e6dbe88": "userTotalEarned(address)", "8e6ddab1": "createMonster(uint256,uint256,uint256,uint256,uint256,bytes)", "8e6df32f": "exerciseOptions(address,uint256,uint256,uint256,bool)", +"8e6eabe1": "productsValidated(address)", "8e6f2353": "ln(int256)", +"8e6f6b77": "ONE_WEEK()", "8e6f843f": "EarlyExchangeRateChanged(uint256)", "8e6fdd31": "raisedEth()", "8e6ff99a": "addVineyard(bytes32,uint16,uint24,uint32,uint16)", +"8e700c40": "trade(address,uint256,address,uint256,uint256,uint256,address,uint256)", "8e70fdbc": "setIsNotAdmin(address,bool)", +"8e71c1f6": "reserveRegistry()", "8e71decb": "findWinner()", "8e71f4fd": "_hasAllSigs(address,address)", "8e728fec": "configTimeInit()", "8e7296b1": "MOACSupply()", +"8e729bf8": "createFuturesContract(bytes32,uint256,uint256,uint256,bool)", "8e72a926": "bankRollBeneficiary()", "8e72ca91": "proxyIncreaseWithdrawalChunk()", +"8e72cbae": "getBackupExpiryDate(address,uint256)", +"8e73064f": "totalRewardAmount()", "8e735547": "getUserByEmailVerify(bytes32)", +"8e738707": "isRiskyStakeholder(address)", "8e739461": "getBalance(bytes32)", +"8e73a251": "ris3AmountByAddress(address,uint256)", +"8e73c93a": "setRewardVesting(address)", "8e73d42c": "lunyrMultisig()", +"8e73d857": "MINER_24_HOURS()", +"8e73eee3": "getAuthorizedOperator(address,address)", +"8e7411d2": "TurboFeePercentX100()", "8e7418cb": "isSecondRound()", "8e744f54": "tranferMinterOwnership(address,address)", "8e74a528": "avarageBlockTime()", +"8e74a7de": "getexpirationTimestamps(address)", +"8e74e95c": "withdrawBZN(uint256)", +"8e75217e": "YGYToken()", "8e752b40": "startTeamTrade()", +"8e752e03": "dayChanceCount(uint256)", "8e7547cb": "setWithdrawWallet(address,address)", "8e755125": "testIntFixedArray(int256[3])", +"8e755889": "adminDeduction(uint256)", "8e7558cd": "closeStage(uint256)", +"8e757907": "isUserOwnNovas(address,uint256[])", +"8e75aba0": "registerUserInfo(address,uint256)", +"8e75b131": "minimumRaise()", "8e75dd47": "companyCount()", "8e75f23c": "get_collateral_bix_amount()", "8e760afe": "verify(bytes)", +"8e762ff9": "soldOnCSale()", +"8e765268": "getGenome(uint32)", "8e76581e": "getManifestId(address,bytes32,uint256)", "8e767411": "setWhaleIncreaseLimit(uint256)", "8e768288": "isSane(address)", "8e76e3ba": "BillofLaden()", "8e77304c": "YOUToken()", "8e77afc5": "BSCore()", +"8e77b641": "withdrawCTkn(address,uint256)", "8e77d147": "transactionfeeAmount()", "8e77fe2f": "blacklistAddresses(address)", "8e77ff1f": "setMigrateTokenContract(address)", +"8e782f4d": "pendingCvp(uint256,address)", +"8e78a28c": "auctionId(address,uint256)", "8e78eff6": "get_add(uint256)", "8e78f0f2": "remOperator(address)", +"8e7908b6": "nodeRegistryData()", +"8e791de4": "_collateralisationRatio(address)", "8e7952c6": "davToken()", "8e79dc91": "set_participant_arbits(address,uint256)", "8e7a1697": "setDepot(uint256,uint256)", +"8e7a5913": "loadNewCardType(uint8,string,string,uint8,uint8,uint8,uint16,uint256,uint256)", "8e7a9687": "check_vote(string)", "8e7b36be": "payFor(address)", +"8e7b4531": "isDisable(uint256)", "8e7b90e4": "setTgeAddress(address)", +"8e7bc846": "lotteries(uint256,address)", "8e7c9e50": "logFloor(int256,uint8)", "8e7cb6e1": "getIndex(uint256)", "8e7cd5a7": "distributeExternal(uint256,uint256,uint256,uint256)", "8e7d0f44": "publicKeyConsensus()", +"8e7d2347": "migrateTo(address,bytes)", +"8e7d9927": "updateUsdcAddresss(address)", +"8e7dd88f": "referralCommissionClaimed(address)", "8e7e060f": "buyCards(uint8)", +"8e7e2980": "unstakeERC20Tokens(address,address,uint256,bool)", "8e7e34d7": "fromHex(string)", "8e7e879f": "migrateAll(uint256[])", "8e7e99b8": "TotalSupply(uint256,uint256,address)", "8e7e9a3c": "calculatePrizes()", "8e7ea5b2": "getWinner()", +"8e7eb953": "getAllRents()", +"8e7f15da": "participantWaitTime(address)", +"8e7faac6": "addCoverAndAddLiquidity(address,address,uint48,uint256,address,uint256,uint256,bool)", "8e7fd292": "trySetSubnodeOwner(bytes32,address)", "8e7fdc6c": "LogBetProperties(uint256)", +"8e7ffaf9": "maxvSPYE18()", "8e7fffe8": "individualRoundCap()", +"8e809bf9": "tsfMode()", "8e80ade9": "hodlTokens(address,uint256,uint256)", +"8e80b1b7": "setReferralPrice(uint256)", +"8e80bd39": "MARKETING_ALLOCATION()", +"8e80bddf": "deploySynth(address)", +"8e81105c": "config(address,uint256,address,uint256,uint256)", "8e818aa1": "acceptAdminWithdraw()", "8e81bc9c": "addWhitelistedBurn(address,address)", "8e81c579": "poolEthSold()", "8e81c64d": "burnTokens(uint256,uint256)", +"8e81df0f": "trade_testKyber(uint256,address)", "8e821b24": "persians()", +"8e8268f7": "newPLCR(address,address,address)", +"8e83bd35": "DeprecatedBBFarm(uint8)", +"8e843302": "sellBalance()", "8e84844e": "changeWeight(address,address,uint256,uint256)", "8e84d413": "isFree(uint256[],uint256)", +"8e852900": "mainChainIdTokens(address)", "8e854ed8": "getResult(uint256,uint8)", "8e8556b4": "privateSaleEtherRaised()", +"8e85643a": "init(address,address,address,string,string)", +"8e8570f9": "amountBunnyToMint(uint256)", "8e86077b": "foundingTeamSupply()", "8e8622f9": "_getTAOIdByName(string)", +"8e867083": "withdrawCollateralForBorrower(bytes32,uint256,address,address)", +"8e868abc": "_decode_sol_bytes20(uint256,bytes)", "8e869843": "sellfloaksAgainstEther(uint256)", "8e86d030": "getMessageRequestHash(address,uint256)", "8e8758d8": "tokenAllowance(address,address,address)", +"8e875e1a": "lockToBlock()", "8e87f57c": "setCompare(bytes2)", "8e87fcbf": "transformFrom(address,uint256,uint256)", "8e885cbb": "LARGE_PURCHASE_BONUS()", +"8e88a262": "RemoveParticipant(address)", +"8e88b033": "ImageChange(bytes32,uint8,uint8)", "8e894a6f": "getTileIDByOwner(uint16,address)", +"8e899718": "multiSendToken(address,address[],uint256[])", +"8e899d80": "getLatestETHUSDPriceRounded()", +"8e89a906": "sendLeaderShipBonusDiamond(address,uint8)", "8e89ad00": "setMaxDailyPerUser(uint256)", +"8e89cf1a": "cshareperstake(address)", +"8e89f51e": "closeLoanForBorrower(bytes32,address)", "8e89f6e2": "Crowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", "8e8a3983": "paySomeone(address,address)", "8e8a4a20": "userTenantHashExists(bytes32)", +"8e8a8da9": "setDevs(address,address,address,address)", "8e8afc34": "setSlaveServer(uint32)", +"8e8b229c": "JudgeRecord(address)", "8e8b34bc": "createNewSecurityDeposit(string,string,uint256)", +"8e8b80d6": "SendTokens(uint256)", "8e8bc816": "TokenBonus(address,address,uint256)", "8e8cf4a8": "getThisBalance()", +"8e8da1b2": "_setPUREImage(string)", "8e8df687": "processedTokens()", +"8e8e0f99": "execCompleted(bytes32,address,address,uint256,bool)", +"8e8e2925": "liquidityGenerationParticipationAgreement()", "8e8e4675": "gur(address,address)", "8e8e75fb": "addExternalController(address)", "8e8f1e84": "setPublicSaleParams(uint256,uint256,uint256,uint256)", +"8e8f294b": "markets(address)", "8e8f39d3": "getBlockNumberM1()", +"8e8f4c6d": "constant_getSomeDetails()", +"8e8fa11f": "registerReverseENS(address,string)", "8e8fe845": "IsDistribRuSTMingFalg_()", "8e9030f4": "maximumNonWhitelistAmount()", +"8e905c93": "getWinningAmount(uint256)", "8e90b71a": "changeStatus(bytes1,bytes32)", "8e90ccbe": "Governance(address[],uint256,uint256)", "8e90e1e9": "_createCutie(uint40,uint40,uint16,uint256,address,uint40)", +"8e90f968": "stakePool(uint256)", +"8e9124aa": "updateCreateCityFee(uint256)", +"8e9181e9": "joinFixed()", "8e9185cb": "NON_TRANSFERABLE_TIME()", +"8e91ba47": "changeTRR(uint256)", +"8e91e6bd": "requestUnstake(address[],uint256[],uint256)", "8e9206a0": "EOM()", "8e928076": "setMaxGas(uint256)", "8e92aea3": "_fetch(uint256)", +"8e92b81a": "startChangeMinReserve(uint256)", "8e92ee66": "redeemShardsIntoPending()", +"8e93888a": "intermediator()", "8e93907b": "FamilyResourceControl(uint256,uint256,uint256,uint256,uint256[])", +"8e93aa73": "getTotalDepositAndBorrow(address)", "8e93c883": "setMarketingTokensWallet(address)", +"8e93e022": "unlockUserAddress()", "8e940bb7": "test_testableContributionCaseExpectFailure()", "8e943c8b": "checkParticipants()", +"8e944614": "sendAwardBySelf(uint256)", "8e94a5f3": "sellerRefund(uint256)", +"8e94ae5f": "getLockedAmountTotal()", "8e955978": "pushProposal(address)", "8e95b0cd": "getSponsorshipsTotalRefunded(address,uint256)", "8e95b28b": "delegateUrl()", +"8e95f37d": "_setIecUpgradeArr(uint256[6])", "8e964de9": "COPPER_AMOUNT_XPER()", "8e9674c8": "WEMACOIN()", +"8e968a0b": "getTotalRemainingReward()", "8e96eb3e": "coePerEthOffset()", "8e979bad": "setwinPercent(uint256)", +"8e97d8ab": "o_int()", "8e984ccd": "joinGameAndBattle(uint256,uint256)", +"8e98ab52": "getMVDFunctionalityModelsManagerAddress()", "8e98c6b9": "getLeaderboardPlayers()", "8e98cee1": "update_session(uint32,uint64,uint64)", +"8e99b881": "Privilege_Certificate_De_Provisioning(uint256)", +"8e99c422": "LockCreated(address,address,address,address)", +"8e9a0350": "setStateNotVerified(bool)", +"8e9a28f0": "PixelPainted(uint256,address,address,uint256,bytes3)", +"8e9a4bcc": "addLimit(address,uint256)", "8e9a5890": "danGold()", "8e9a7159": "LZLPrivate()", +"8e9ad85f": "TokenPurchased(uint256,uint256)", "8e9aed2e": "HACHIROKU()", +"8e9b0326": "poolPart()", +"8e9b277d": "payReward(address)", "8e9b7ab8": "Partners(address)", "8e9bf09c": "issueTokenToAddress(address,uint256)", "8e9c3ce2": "assetOfBitmark(uint256)", +"8e9cbc20": "setPaymentTerms(bytes32)", "8e9ccd04": "computeIndexId(address,bytes)", +"8e9cdd7d": "setFallbackRoot(bytes32,uint256)", +"8e9d8148": "availableBonusForToken()", "8e9e5c37": "requiringAuthorization()", +"8e9e5ebb": "ForwardingFunds(uint256)", "8e9e697d": "reset(uint256,uint256,uint256,uint256,string)", "8e9e8b14": "marketingPartnerSupply()", +"8e9ecbb8": "tokensLockedAtTime(address,string,uint256)", +"8e9f04b5": "getReleasingBalance(address)", +"8e9f0c46": "invalidMiniTicketCount()", "8e9f2738": "_transferAllArgs(address,address,uint256)", +"8e9f612d": "approve_741(address,uint256)", "8e9f9072": "signedMessageECRECOVER(bytes32,bytes32,bytes32,uint8)", +"8ea00818": "hasToken(string)", +"8ea00e50": "setOfferPrice(bytes32,uint256)", "8ea04cb3": "getUpgradability(uint256,address,address,string)", "8ea06c68": "BLMToken(uint256,uint256)", "8ea0926a": "addBaseStats(uint256,uint8[8])", "8ea0b540": "getProjectInformation(uint256)", "8ea0d898": "DestroyedBy(address)", +"8ea11b70": "onWithdrawGains(address,uint256,uint256)", +"8ea14bfe": "auction(uint256,uint256)", +"8ea1e8c3": "getChainStaticDetails(uint256)", "8ea1ee86": "DapCarToken()", "8ea1ff21": "OwnedExample(address)", +"8ea20a0e": "setVotingPool(uint256)", +"8ea21006": "AddedBBFarm(uint8)", "8ea25644": "XYY()", +"8ea26f5c": "m_totalSupply()", +"8ea2da7d": "__decimals()", +"8ea389a8": "SearchFolderTransferProofWithTime(bytes32)", "8ea390c1": "getOwedDividends(address)", +"8ea395b9": "setCloseFee(bool)", +"8ea417ab": "tradeLiquidityToken(uint128,uint128,uint32)", "8ea44bab": "setProviderAdmin(uint256,address)", "8ea51696": "JRT()", "8ea5220f": "devWallet()", "8ea55bd7": "_pushContributor(address,bytes32)", "8ea56e57": "ADV()", +"8ea5b802": "balanceOfETH()", +"8ea5fbf9": "getEstimatedRFIforETHout(uint256)", "8ea64376": "opsAddress()", +"8ea67386": "uniswapPaths(address,uint256)", "8ea67eb0": "ETCharPresale(address)", +"8ea69029": "ownerAtIndex(uint256)", "8ea69e37": "TestToken(uint256)", "8ea6dd82": "BotAdded(address)", +"8ea703f5": "boostLevelOneMultiplier()", "8ea7296b": "deleteChild(address)", "8ea73a7c": "setDonationReward(uint256)", +"8ea73c21": "updateInfluencer(address,bool)", +"8ea744d9": "updateMerkleRootHash(bytes32)", "8ea74d95": "transferDaico(address)", "8ea77300": "RELEASE_START()", +"8ea78153": "burnMode()", +"8ea7f033": "isFreeTokenId(uint256)", +"8ea80de3": "tokensSent(address)", "8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", "8ea83031": "swapContract()", "8ea83681": "mintTreasuryTokens(address,uint256)", +"8ea85979": "setMintable(address)", +"8ea86df8": "changelockTime(uint256)", +"8ea875f3": "virtualPrice()", "8ea8dc9d": "APP_MANAGER_ROLE()", "8ea8e149": "removeService(address,address)", "8ea8f83c": "activate(uint256,uint256)", "8ea91bf3": "createVestedToken(address,uint256,uint256,uint256,uint256)", "8ea95cbc": "lastDepositorAmount()", +"8ea96a45": "_nftTypes(uint256)", +"8ea97d26": "unstakeFee()", "8ea98117": "setCoordinator(address)", "8ea98db4": "Mmchain(uint256,string,string)", "8eaa1e29": "getContentByData(address,uint256,string,string)", +"8eaa3850": "minerStake(address)", "8eaa5d1c": "amount50kUsdInCents()", "8eaa6ac0": "get(bytes32)", +"8eaa71d7": "reserveRateMantissa()", "8eaa8d4f": "RefundedInvestor(address,uint256,uint256)", "8eaa9c91": "Client()", "8eaaeecf": "getUserCapInTokenWei(address,address)", +"8eab904f": "stake_all()", +"8eac2066": "tradeTime()", "8eac494c": "tierWhitelisted(uint256)", +"8eac81d5": "approveWethAndCallContract(address,address,uint256,address,bytes)", +"8eacff5d": "setDelayMultiplier(uint256)", +"8ead17df": "forcePairWithdraw(address,uint256)", +"8ead7412": "getTotalBP(uint256)", "8eadb561": "IntelliToken()", +"8eae9e15": "killToken(string)", "8eaeb531": "setAccountA(address)", +"8eaefd3a": "totalForSale()", "8eaf1dab": "PRCT100_R2()", +"8eaf2975": "LR()", +"8eaf8b0a": "causeSupporterxDonAmount(uint256,address)", +"8eafabfa": "sponser_pool()", +"8eafd94e": "TokenPerETHUnit()", "8eafe0f0": "getCustomerRating(string)", "8eb04f02": "setRefundManagerContract(address)", "8eb066ce": "init(address[5],uint256[6],uint8,bytes32,bytes32)", +"8eb0cad2": "userInviteRewardHasRecord(address)", +"8eb0d762": "getEcrecover(bytes32,uint8,bytes32,bytes32)", "8eb0e73e": "bonusPctSteps(uint256)", +"8eb0ee60": "modifyParameters(address,bytes32,address)", +"8eb1109c": "mintOnlyOwner(address[],uint256[])", +"8eb13329": "getFinalPrice(address,address)", +"8eb1536b": "PreIco_Cap(address)", "8eb179ad": "maxHardCaphardcap()", +"8eb17dfe": "transferByAdmin(address,address,uint256)", "8eb206d1": "deletePage(bytes32,bytes32)", +"8eb22282": "getLastUpdateByGeohash(string)", "8eb36e3d": "initData()", "8eb3e0e3": "socERC20(uint256,string,string)", +"8eb3e553": "_initialFluxAmount()", "8eb45cbf": "frozenProfitDate()", "8eb4e0ad": "batchRelay(bytes16[],address[],address[],uint256[],uint16[],uint128[],uint8[],bytes32[],bytes32[],uint8[])", +"8eb5234c": "instructorAccts(uint256)", "8eb547d4": "squareOfSums(uint256,uint256)", "8eb5a7ac": "changePermission(address,bool)", +"8eb5e2e0": "revokeWhitelisted(address)", +"8eb5f58e": "bonusDropsOf(address)", "8eb5f650": "ETIN(uint256,string,string)", "8eb6418e": "LoritaBi()", +"8eb644ae": "lastPoolFeeTime()", "8eb64b3d": "multi(address[],uint256)", "8eb64b61": "MAX_NON_SALE_SUPPLY()", "8eb689f7": "giveFor(address)", +"8eb69759": "totalSellerTokens()", +"8eb6ac7a": "buyOrder(bytes32)", "8eb6d683": "coinAllowanceOf(address,address)", +"8eb6f20b": "executorWalletAddress()", "8eb6ffaa": "withdrawBloc(uint256)", "8eb717fc": "increaseCap()", "8eb76eed": "emitUserRatingGiven(address,address,uint256)", "8eb7ffe8": "assignInBatches(address[],uint256[])", +"8eb81cb8": "Voted(address,bool)", "8eb831fe": "ChangeOperator(address)", +"8eb83d89": "updateFeeInToken(uint256)", "8eb857f8": "getData_25()", "8eb88c1b": "EvergreenHealthToken()", "8eb89a61": "getPointsBalance()", +"8eb94d58": "AFI()", "8eb976ca": "assertEq17(bytes17,bytes17)", "8eb98150": "NOT_ENDED_FINE()", "8eba2966": "RESERVE_PORTION_MULTIPLIER()", +"8eba5231": "TestDrive(address,uint256)", "8ebaae08": "createListing(uint256,uint256,uint256,address)", "8ebac11b": "getHash(address,uint256,uint256,uint256)", "8ebb2ce7": "setProfitContainerAddress(address)", +"8ebb4c15": "comments(uint256)", "8ebb5aee": "calculateTokenBuy(uint256,uint256)", +"8ebb867e": "currentPrivatePool()", +"8ebbd5a7": "cleanGarbage()", "8ebc266d": "getCurrentUSDCentToWeiRate()", +"8ebd013b": "OnExchangeSellUpdate(uint256,uint256)", +"8ebe3c7d": "approve_31(address,uint256)", "8ebe555b": "allocateShares(uint256,uint256)", +"8ebed5b1": "_MINT()", "8ebed616": "CRF()", +"8ebed8f4": "VotesByProposalId(uint256,uint256)", +"8ebf6364": "_setTransferPaused(bool)", +"8ebfea77": "getContainVal()", +"8ec06d6f": "testSortedIndexOfFunction()", +"8ec0a842": "setStakeDetails(uint256,uint256,uint256,uint256,uint256)", +"8ec0fb58": "erc20(uint256)", +"8ec187a5": "gblocksByNumber(uint32)", +"8ec1aaed": "getDelayBlockNumber()", +"8ec294a0": "updatePricePerToken(uint256)", +"8ec308f4": "addAsset(bytes32,uint256)", +"8ec3117d": "approve_720(address,uint256)", "8ec3167f": "calculateGoalsFromAttributeTotals(uint256,uint256,uint256[],uint256[],uint256)", "8ec3272d": "addPicture(string,bytes32,string,address)", +"8ec3b298": "isAccountManager(address)", +"8ec3d6ea": "_claimStatsDecode(uint128)", +"8ec3f482": "tokens_arr(uint256)", +"8ec4255f": "settled_period()", +"8ec489a2": "setVaultBuffer(uint256)", "8ec48bcb": "BitCharity()", "8ec49939": "switchOFFfreeForAll()", +"8ec4bf83": "getSecurityScore(address,string)", "8ec4dc95": "getPerson()", +"8ec4f505": "addRetailer(address)", "8ec521a8": "setupStakeholders(address[],uint256[],uint256[],bool[],uint256[],uint256[],uint256[])", +"8ec54d95": "_decode_sol_uint64(uint256,bytes)", "8ec5a309": "testHash(string)", +"8ec5df79": "hasCalculator(address)", "8ec5ff41": "isUid(string)", "8ec63da9": "checkIsOnlyProxy(bytes32)", "8ec6677d": "registerUsername(string,address)", +"8ec66853": "lockedBitcoin(bytes32)", +"8ec7d3ad": "__Operator_init()", "8ec84812": "updateProfit()", "8ec86497": "clearname()", +"8ec872e3": "getConfig(bytes32,uint256)", "8ec89e4f": "_isActive()", "8ec8fcad": "ADV(uint256,string,string)", "8ec9925e": "jackpotToken()", "8ec9a5de": "getLeaf(bytes32,uint256)", +"8ec9c466": "renounceWLManager()", "8ecaa140": "_refundHighestBidder(uint256)", +"8ecb08c5": "buySale(string)", +"8ecb2d86": "amountMax()", +"8ecb4608": "getUsdcSplitThreshold50Eth()", +"8ecb4f50": "buyerAccept(uint256)", +"8ecb581c": "swapTokensForTokens(uint256,uint256,address[],uint256)", "8ecbc4e9": "setNewBRXPay(address)", +"8ecbef4e": "getNextRoundUnlock()", "8ecc0643": "BuyAd(address,uint256,string,string,string,uint256,uint8,address)", "8ecc0950": "returnToOwner()", "8ecc107f": "buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"8ecc2905": "b4sePolicy()", "8ecc4353": "adddayruns(address,uint256)", "8eccf58e": "getTokensCountPerEther()", "8ecd2fe8": "testMul256By256()", "8ece19f6": "setTokenLock()", "8ece39cd": "startOraclize(uint256)", "8ece85a4": "ETpay(uint256,string,string)", +"8ece96c2": "birdPlusInitialIndex()", "8ecebf34": "MorpheusToken()", "8ecf0d0b": "getCreated()", "8ecfc412": "workForce()", +"8ed05978": "Sell(uint256,uint256)", +"8ed06823": "TCORE()", "8ed06b62": "getShipPrice(uint256,uint256)", "8ed08711": "saleMinimumWei()", "8ed09bc9": "registerVoter(bytes32,address)", "8ed0ac8b": "closeTrancheAddition()", +"8ed12217": "new_car(address,string)", +"8ed180ba": "removeVersion(address)", "8ed1858e": "distributeELTCSmall(address[])", +"8ed1ef35": "memberlist()", +"8ed20021": "bondage()", "8ed20fa0": "tokenWeiToSale()", +"8ed237c3": "manager_killswitch()", "8ed2395f": "ZCNYToken(address)", +"8ed2b2ee": "KiToFocus()", +"8ed2be82": "productCode(uint256)", +"8ed2f589": "updatePoolWeight(uint256,address)", +"8ed2fe91": "buyingEnabled()", "8ed33545": "sub_presale_arbits_sold(address,uint256)", "8ed34751": "performHealthCheck(uint8)", "8ed399ca": "teamWallet_2()", "8ed3fa7c": "codexCoin()", +"8ed42500": "earned1()", "8ed5047c": "updateCokeTotal(uint256,bool,uint16)", "8ed5f2ca": "newTestableCampaign(string,uint256,uint256,address)", "8ed67a44": "setPrice(uint16)", "8ed6910f": "limitSell(uint256,uint256)", +"8ed6b016": "migrationActive()", +"8ed71ade": "roiPercentage(uint256)", +"8ed75dde": "safeguardOn()", +"8ed76287": "remainingToken()", "8ed7c3d3": "sendTokensManager(address,uint256)", "8ed7ca93": "finishExam()", "8ed8067e": "FundContract()", "8ed882c5": "designatedReporterWasCorrect()", "8ed91318": "nextAssetId()", +"8ed9314a": "balanceUnderlying(address)", +"8ed955b9": "harvestAll()", +"8ed95dfe": "setCut(uint256,uint256,uint256)", +"8ed9606a": "isContractAddress(address)", +"8ed9b31e": "suspendAccount(address)", "8ed9be36": "temp(uint256,uint256,bytes32,bytes32)", +"8ed9c5dc": "BOUNTY_CHANGE_UNLOCK_PERIOD()", "8ed9fd75": "ICO_Supply()", +"8eda90ad": "sideToken()", +"8edb0aec": "setProvableTime(uint256)", +"8edb1a06": "getTokenDeposit(address)", +"8edb562e": "MAX_BUY_LIMIT()", +"8edb6795": "unpool(uint256)", "8edb726d": "modifyEndFundingTime(uint256)", "8edbf436": "getPriceInfo(address)", +"8edc36d6": "updateSetMetadata(uint256,uint256,string,bytes32[])", "8edc4f8f": "isValidCap(uint256,uint256)", "8edc707b": "adoptionOffers(bytes5)", "8edcf21d": "getCurrentYearGameMiningRemainToken(uint16)", @@ -81637,34 +149424,60 @@ "8eddf665": "onInvest()", "8ede1817": "getReturnTime(uint256)", "8ede3a34": "KeplerToken()", +"8ede6f9f": "features(uint256)", "8ede74c1": "changeRage(uint256)", "8ede94b4": "setLineUpEnable_miner(address,uint256)", "8edeb15d": "donation()", "8edec689": "wd()", +"8edf6be5": "getReposCount()", "8edfaef8": "getSetupParameters()", +"8edfb753": "atxChangeAddrs(uint256)", "8edff3db": "getTerminal(uint256)", +"8ee0199f": "setEmployeeAddress(uint256,address)", "8ee030bd": "FaceterToken(address,address)", +"8ee0522a": "isAvailable(address,address,uint256)", +"8ee06546": "updateFlagOneAddresss(address)", "8ee070d9": "MYEMPEROR()", "8ee0942b": "setSignatureROFR(bytes)", +"8ee0ae1f": "moonPerBlock()", +"8ee0b9e3": "getPurchasedKW()", "8ee0ffe8": "sendStakingContract()", +"8ee13341": "optimizeSwap(address,address,uint256)", "8ee1409e": "TitanToken()", "8ee17e0a": "MarvinCoin()", +"8ee1a642": "ERC20_PROXY_ID()", +"8ee1a74e": "_transferERC20(address,address,uint128,uint128)", "8ee21b8e": "get_default_keys()", +"8ee28188": "getMerkleTreeRoot(uint256,uint256)", +"8ee2fa47": "is_plan_completed_p2()", "8ee365fa": "removeAddressesFromAdmins(address[])", "8ee36f05": "isVoted(address,uint256)", +"8ee3e731": "addGoodContract(address)", "8ee3f472": "BoutsCrowdsale(uint256,uint256,uint256,address,address,address)", "8ee3f72f": "PinCode()", +"8ee47104": "mRandomUtil()", +"8ee4a92b": "tk_getPoolAtEntry(address,address)", +"8ee4cfca": "addressLevelMine(address,uint256)", "8ee4d44b": "addAddressToOperators(address)", "8ee4fd8a": "claimWithSignature(bytes)", "8ee553cc": "getCroById(uint256)", +"8ee573ac": "tokenDecimals(address)", "8ee5a8b3": "UpgradeProposals(uint256)", +"8ee624a9": "staking_pool()", "8ee6540c": "seventeen()", "8ee6f301": "readvalidrollsXteam(uint16)", "8ee78046": "draw(address,uint8[])", +"8ee7f8e5": "Result(bytes32,bytes32,address,uint256[],uint256,uint256)", +"8ee7fa92": "addFunding(string,address,uint256)", "8ee833cc": "isValidTenant(string,address,uint256)", +"8ee88c53": "setLiquidityFeePercent(uint256)", "8ee8a5c4": "Charity(string)", +"8ee9175a": "dailyController(uint256)", "8ee93cf3": "post(string)", "8ee97ff4": "VirtualRewardToken()", +"8ee99ca7": "iceTokenPerBlock()", +"8eea08dc": "activeAllLevels(address,address)", +"8eeb1017": "closeTheGates()", "8eeb203e": "exchangeWeight()", "8eeb33ff": "crowdSaleAddr()", "8eeb3b0e": "KJCPerEthereum()", @@ -81672,14 +149485,24 @@ "8eeb5c97": "cancelDo(bytes32)", "8eeb7d11": "unlockAllocationAddress(address)", "8eeb8e5a": "MUC()", +"8eebfe2a": "ETHEURcentyFiatContract()", +"8eec52b7": "tenantCancelLease(uint256)", "8eec5d70": "getPoolCount()", "8eec6f7b": "lockETH(uint256)", "8eec99c8": "setNewAdmin(address)", "8eecddcf": "betBlockNumberOf(address)", "8eecf64d": "createContractWithMeta(address,uint64,bytes,string)", +"8eed0a51": "SETH()", +"8eede890": "updateCascade(address)", "8eee1cd6": "buyerExceededApprovedAmount(uint256,address)", "8eef059e": "_lowerDown(uint256,address)", +"8eef4947": "_optimalDepositA(uint256,uint256,uint256,uint256)", +"8eef8274": "brrr3x()", +"8eefa01a": "BNBContributed(address)", +"8eefa0b0": "testUintArrayConvertedToBytes()", +"8eefdd52": "registerUtilityToken(string,string,uint256,uint8,uint256,address,bytes32)", "8ef0f09a": "createPromoPow(address,string,uint256,uint256,uint256)", +"8ef16d02": "allowPrecirculation(address)", "8ef1a6b6": "makeProfit(uint256)", "8ef1e886": "RESERVE_PERCENT_EVE()", "8ef22afe": "getCostToCancel()", @@ -81696,111 +149519,210 @@ "8ef4c807": "lockedBalanceOf(address,uint256)", "8ef53edf": "InitAssignOK()", "8ef5ae21": "setupInfo(string,string,string)", +"8ef5b3b5": "amore2()", "8ef5ce28": "test1_addingFirst()", "8ef5eaf0": "drop(address[])", +"8ef5fd59": "curveSetter()", +"8ef61faa": "administrators_(address)", "8ef6e7fe": "build(string)", "8ef6ed53": "_getRandom(uint256,uint256)", "8ef72d15": "backEthRatio()", +"8ef79a0c": "setTryBurnabletokens(bool)", "8ef79e91": "setTokenBaseURI(string)", "8ef7c649": "getTicketPrice(uint8)", +"8ef7c81a": "externalNftIsLinked(address,uint256)", "8ef8125e": "frontRunnerSetTimestamp()", "8ef82010": "orderExecution(bytes32,uint256)", +"8ef85332": "claim500()", "8ef85e04": "secondWeekTokenPrice()", "8ef87843": "randomSkinAppearance(uint256,uint128)", +"8ef8b224": "setreferralToken(address)", "8ef8f241": "getEmployerInfo()", +"8ef973be": "loadVerifyingKeyPreamble(uint256[2][2],uint256[2],uint256[2][2],uint256[2][2],uint256[2],uint256[2][2],uint256[2][2])", "8ef9c904": "NewAmbassador(address,address)", "8efa00e2": "getPRETDETokenExchangeRate(uint256)", "8efa23d1": "RELEASE_WALLET()", "8efa3e21": "setIsMinter(address,address,bool)", +"8efac0c5": "removeFromOtherChain(uint256,uint256)", +"8efac8f6": "PlayersCount()", +"8efacb55": "userMatrixReferrals(address,uint8,uint8)", "8efbd512": "getAccountNumber(address)", +"8efc20d5": "riskFundingOwner()", "8efc777f": "isBeta(bytes)", +"8efc8d5c": "computeDifferPayment(uint256,uint256)", "8efd4c75": "QUARTERLY_RELEASE()", "8efd5f92": "divIntervalDays()", +"8efd6b26": "changeValue(uint256,uint256,uint256)", +"8efdca15": "wantedRole(address)", "8efe6dc4": "changeMonthlyWithdrawLimit(uint256)", "8efe7801": "showWinnersSort()", "8efe8c1c": "EPTToken(address,address)", +"8efecdda": "setUniswap(address)", +"8efedec9": "utilCompare(string,string)", +"8eff1b44": "NewEsteem(address,bytes32,address,bytes32,string,uint256,uint256)", +"8eff336c": "bindToken(bytes32,address,uint256)", "8eff3c29": "getRecords()", +"8eff5985": "addPathogen(uint8[5],address,string,uint256,string,uint256)", +"8eff6dce": "maxUnstakingAmountPerUser()", "8effda0d": "IndorseSaleContract()", "8f003a2d": "StarSportsToken()", "8f00c0af": "has_contract_ended()", "8f00cbfa": "winnerIndex()", "8f00f49b": "totalAssetTokens()", +"8f010bfb": "LogPaymodeChanged(uint256,uint8)", +"8f012475": "PriceChanged(address,uint256)", "8f0165e1": "min_pay_wei()", "8f01932a": "mntpToMigrateTotal()", +"8f01bf77": "internalGasRequirement()", +"8f01cb0b": "FeePeriodRollover(uint256)", "8f01e1e2": "getactiveleveltime(uint256)", +"8f023caa": "faucetBoundsMax()", +"8f023f85": "candidatos(uint256)", "8f02bb5b": "setTransferFee(uint256)", +"8f02cf97": "setCeiling(uint256)", "8f03850b": "numContributors()", "8f038a5a": "initializeEthReceived()", "8f039a10": "changelp8(address)", +"8f03daef": "timelockBalanceAvailableAt(address)", "8f03f5c3": "firstUnlocked()", "8f0427b1": "sellPosition(uint256)", "8f049de5": "endBetRed()", +"8f051127": "CountContribution()", "8f054bf3": "referralList(address)", "8f0563b9": "substring(string,int256)", "8f061ef5": "Token(string,string,uint256,uint256)", +"8f062227": "isDone()", "8f06492d": "callOnRemoval()", +"8f078465": "cidPerBlock()", "8f0816bc": "PERKToken()", "8f08288a": "clearBets()", +"8f08638a": "addPair()", "8f08a60a": "transfer2(uint256,address[],uint256[],bytes,bytes,bytes,bytes)", "8f08d44d": "burnAsset(uint256)", "8f08e369": "withdrawApplication(address)", "8f094efb": "getMineableSupply()", +"8f0a07f0": "pro(address)", "8f0a4c1b": "startPreSales()", +"8f0a67fb": "withdrawMass(address[],uint256[])", "8f0a6ecb": "returnBountyTokens(address,uint256)", +"8f0ac72c": "mintProxy()", "8f0bc152": "claim(address,uint256,bytes)", +"8f0c62cc": "setPresaleLive(bool)", "8f0c724c": "setOperationsCallGas(uint256)", +"8f0c86fa": "isDistributor(address)", "8f0d16da": "emitIssuersUpdated(address,bool)", +"8f0d282d": "test4()", "8f0d3b8b": "_buy(uint256,uint256)", "8f0d67ef": "activationTime(uint256)", +"8f0d7e35": "reconcile()", +"8f0e0e51": "dark()", "8f0ec6b3": "ZanCoin()", +"8f0fe82a": "safeMint(uint256,address,string,bytes)", +"8f103ce6": "totalInterest(uint256)", +"8f10a12a": "getEthReturnNoBonus(uint256,address)", "8f10cad0": "StreampayToken()", "8f10fd45": "getBuyCount()", +"8f111ab8": "depositLockerSingleMilestone(address,address,address,address,uint256,uint256,string,bool)", "8f112370": "addToAffiliate(address,uint256)", "8f11e5f9": "checkWithdrawValue(uint256)", +"8f121a6d": "sushiswapLpDisable(address)", "8f1224ce": "fixInvestment(address,uint256,uint256)", "8f12355d": "assertEq7(bytes7,bytes7,bytes32)", +"8f126ff6": "pendingTako(uint256,address)", "8f1327c0": "getRound(uint256)", "8f134025": "rewardSent(uint256)", +"8f135b3a": "recoverERC20(uint256)", +"8f13ca83": "ArtificialintelligenceAlgoritm(uint256)", +"8f13ee78": "DeFiat_Gov()", "8f13fd29": "setPriceValue(bytes32,uint256)", "8f140568": "isServiceAddress()", "8f142842": "getByAlias(string)", "8f142907": "stables()", +"8f144d83": "approve_526(address,uint256)", +"8f146ece": "setGroupCreatorRewardPercent(uint256)", +"8f148033": "purchaseToken(address,uint256,uint256,uint256)", "8f14b76b": "sendReferrer()", "8f14d8a3": "reclaimContractTokens()", +"8f14e859": "bytecodeHash(bytes)", "8f15024f": "ticketsSold()", "8f152d0e": "vestingConfigured()", "8f158e76": "remainingPublicSaleCap()", +"8f15b414": "initialize(string,string,address,address)", "8f163497": "AgaCoin()", +"8f169816": "staked(address,uint256)", "8f16eb1a": "setI_R1(uint256)", +"8f170fe7": "Set_Referer_Info_Address(address)", +"8f175028": "setDailyFee(uint256)", +"8f180305": "getTotalMembers()", +"8f183183": "addressFrom(address,uint32)", +"8f1832ec": "commissionWalet()", +"8f186063": "dissolveWorkingGroup(uint256,bool)", "8f188b40": "migrateInvestor(address,uint256,uint256,uint256)", +"8f18b8f5": "approve_29(address,uint256)", +"8f18bd04": "queryUserDCPRecordDetailByIndex(address,uint8)", +"8f198088": "relativeTimelocks(address,uint256)", +"8f19b7e6": "RISK_FUND_PERCENT()", "8f19ff45": "_handleTokensReceived(uint256)", +"8f1a0c07": "getRedeemablePrice(uint256)", +"8f1a2810": "msgCount()", "8f1a422c": "minterWallet()", "8f1a927a": "numTicksSinceAuctionStart(uint256)", +"8f1a9d79": "DigestCode_root()", "8f1af992": "claimTwitterId(uint256,address,uint8,bytes32,bytes32)", "8f1b0b02": "bulkTokenMint(address[],uint256)", +"8f1b6630": "getTokenDecimalsByToken(address)", +"8f1b8386": "Transfer(address,address,bytes32,uint256,string)", +"8f1c0585": "sendToWinner()", +"8f1c087c": "refundPremium(bytes32)", "8f1c204c": "test_fiveAssertFalse()", +"8f1c2c27": "withdrawInterestFor(address,uint256)", +"8f1c3234": "ReferralCommissions(uint256)", +"8f1c56bd": "lastBalance()", +"8f1c65c0": "dailyDataUpdate(uint256)", +"8f1c9a8c": "f4(bytes32)", "8f1cc85e": "SAGAcrowdSale(address)", "8f1cc94e": "HashTypeAdded(uint8)", +"8f1d0e1a": "isSimilarLiquidityPoolRegistered(address)", +"8f1d3776": "challenges(uint256)", "8f1d5f7e": "getLedgerNameHash()", "8f1d8f41": "ethInvestment(address,uint256,uint256,uint256,uint256)", "8f1d90b1": "tokenBearer()", +"8f1db2ad": "getTokenNum()", +"8f1db79b": "testResult()", +"8f1dd809": "snapshot(uint256)", +"8f1de16e": "registerHash(bytes32)", "8f1df4f7": "setPrices(uint256,uint256,uint256,uint8,uint256,uint256,uint256)", +"8f1e9405": "_rewards(uint256)", +"8f1ea86a": "getRewardNxm()", "8f1eda37": "wmul(uint128,uint128)", "8f1f761a": "Rewards_Supply()", +"8f1f9902": "publishHash(string)", "8f1fc530": "startSplit()", "8f1fc6bb": "testRemoveProductFromCart()", "8f1fdbb9": "offerEth(uint256)", +"8f1fefa2": "requestLockerResolution(address,address,address,uint256,string,bool)", +"8f20dd53": "_roundTickets(uint256,uint256)", +"8f20f2ea": "minInitialMargin()", "8f212eb7": "BITSDTokenInitialized(address)", "8f217d6b": "lastChar(string)", +"8f218295": "externalFragment(uint256)", +"8f222a0e": "tokenIdOfcode(string)", "8f22964d": "NegativeWhuffiesSent(address,address,uint256,string)", "8f22d128": "testdigiToken()", +"8f22f17f": "_stakeTimes(address)", +"8f232c6a": "approve_832(address,uint256)", "8f24f2a3": "takeBuyOrder(address,uint256,uint256,uint256,address)", "8f25159c": "getDayDepositLimit(uint256)", "8f259117": "numcallsinternal()", +"8f259d8c": "Casino()", "8f25eec1": "BetWon(address,uint256,uint256)", "8f26a5ab": "setSaleAgent2(address)", +"8f2720b0": "FAST_ETH_FLP()", "8f272c0b": "minor_partner_address()", +"8f2747b7": "setState(uint256,uint48)", "8f2757d8": "Bitshopandearn()", +"8f27ac0c": "withdrawFromSakeMaster(uint256)", +"8f27c7cd": "userReinvest(address)", "8f282b87": "getSold()", "8f283970": "changeAdmin(address)", "8f287be5": "PitEur(address)", @@ -81808,94 +149730,160 @@ "8f288644": "getHighestBid(uint256)", "8f2900d5": "timeLocks(uint256)", "8f291158": "listBBO()", +"8f294da6": "register(string,bool)", "8f296759": "UTILITY_ROLE()", "8f29f09a": "fetchPaidOrdersForMerchant(address)", +"8f2a0bb0": "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)", "8f2a3093": "freeBeerOnMe(string)", "8f2a6d3e": "YOOBAToken(address,address,address,address,address)", "8f2abe9a": "Voting(uint8,address,uint256)", "8f2adbee": "tileBonuses(uint256,uint256,uint256)", "8f2bab07": "getChainLength()", "8f2be8e0": "MauiWowieToken()", +"8f2c1319": "MAX_NUMBER_OF_TOKENS_IN_WHITELIST()", "8f2c2ab7": "checkAndCloseDeposit(uint256,bool)", "8f2c3af8": "lastBlock_v10Hash_uint256()", "8f2c44a2": "UnicornMilker()", +"8f2c7f04": "setCompanyShare(uint256)", +"8f2c8a71": "JOYtoyURI(uint256,uint256)", +"8f2cb770": "batchSender()", +"8f2d4ef2": "topping()", +"8f2d7fd5": "multiDeal(uint256[],uint256[],uint256[])", +"8f2db506": "clearDelayData(address,bytes4)", "8f2e695c": "ICO_state()", "8f2e8d4a": "createTrack()", +"8f2e93cc": "addPool(address,address,uint256,uint256,uint256)", "8f2e9ee7": "theDay(uint256)", "8f2eabe1": "isValidatorFinalized(address)", "8f2ec012": "dayToBlockNumber(uint256)", "8f2ee2df": "mainPot()", +"8f2ee725": "withdrawalUSDT(uint256)", +"8f2ef68b": "setNumberOfSchainTypes(uint256)", "8f2ef6b7": "CMGF()", "8f303df9": "priceExpired()", "8f30435d": "getCompetitionValues(string,uint8)", +"8f31f403": "_removeFromDebtRegister(address,uint256,uint256,uint256)", "8f32106e": "CreateALLY(address,uint256)", +"8f32a922": "dracoTrade(address,address,address,uint256,uint256,uint256,address[],uint256,uint256)", "8f32cf0c": "team_address()", "8f32d59b": "isOwner()", +"8f32e652": "ActivateMap(int256,int256,uint256)", "8f33221e": "addContract(address,uint256,uint256)", +"8f33b5e5": "ram()", "8f33c285": "getAyantDroitEconomique_Compte_8()", "8f33df77": "countAllVotes(uint256)", "8f34296b": "Applied()", "8f348cfe": "InsertProject(string,string,address,address,string,string,address)", "8f34ac6e": "setCoOwner(address)", +"8f34c77a": "ethers()", "8f350624": "contributionOpen()", "8f356f97": "lottoHighestNumber()", +"8f35764e": "getIdsLength(uint256)", "8f35a75e": "getInvestor(address)", +"8f35ad3d": "addressV1(uint256)", "8f36039c": "holdContract()", +"8f36579a": "onWithdraw(uint256,address,bytes32,uint256,uint256)", "8f367001": "numTokensAbleToPurchase()", +"8f36725b": "denyTokenHolder(address)", "8f368359": "getTimeUntilInterestIncrease(bytes32)", "8f3684bf": "returnTotalDividend()", "8f36d03e": "_finishSpin(address)", "8f36f8f1": "redeemStake(address,address,uint256,uint8,bytes32,bytes32)", +"8f371fe4": "getPSeeResultFeePercent()", "8f37a0f9": "getTo(uint256)", +"8f37f6b1": "getValueViaDEXsAgregators(address,address,uint256)", +"8f380921": "stopLuckyDraw()", "8f382a00": "ETHEAL_UNIT()", +"8f383b6d": "profitAll(address)", +"8f38512a": "rewardEnd(address)", +"8f385c22": "liquidateFee(address,uint256,address)", "8f38a896": "BRONZE_AMOUNT_XPER()", "8f38bf34": "updatePrices(uint256,uint256[],uint16,uint256[],uint256[])", "8f38d8cc": "S(string)", "8f38f309": "buyXid(uint256,uint256)", +"8f38feb8": "stakekgc(uint256,uint256,string)", "8f3956a4": "ChangeUpgradeMaster(address)", "8f395eb6": "addIntComparison(bytes32,int32,bytes1)", "8f398180": "isUnknown(address)", "8f3984b5": "setRole(address,string,bool)", +"8f39a80b": "convertFromShares(uint256)", +"8f3a6dfc": "keepBSGS()", +"8f3ae7fc": "CreateCell(address)", +"8f3af4d4": "selectNextSupplier()", "8f3b6b84": "centsPerToken()", "8f3b8c3a": "setTokennCrowdsale(address,uint256)", +"8f3b8e42": "setSeasonEnd(uint256)", "8f3bab85": "readFromCart(uint256)", +"8f3bbb9f": "withdrawRewardTokens(address,uint256)", "8f3bed06": "pickUniquePacks(uint256[])", +"8f3bfe2f": "setupMinter(address)", "8f3de282": "onSealed(address,address,uint256)", "8f3e568a": "findOutInterestByClientCategory(address,uint256,uint256)", "8f3e8747": "getGasForMcrData()", "8f3f50fc": "startICOTimestamp()", +"8f3f8c40": "bTokenGetCollateralOut(address,uint256)", "8f40104c": "init(address,uint256[],uint256,uint256,uint256,uint8,uint256,bool)", +"8f404527": "approveToken(uint256,address,bool)", +"8f406d99": "_setMocProportion(uint256)", "8f409b85": "Coin(uint256,string,uint8,string)", +"8f40d932": "tradeLimitRatio()", +"8f40e669": "setair(uint256,uint256,uint256)", +"8f4105f2": "GUSD_LTV()", +"8f414121": "daiAdvanceIncentive()", +"8f417480": "vltAddress()", +"8f41a325": "userScore(bytes32,bytes32)", "8f41e442": "breakTie(uint256)", +"8f41e911": "lp_token_address()", "8f420866": "DEFAULT_SEND_GAS()", +"8f42403a": "mint(address,uint40,bytes32,uint256,uint256[],uint256,address,bytes)", "8f426437": "getTankOwner(uint32)", "8f42a864": "TitaToken()", "8f43166b": "getGivenCount()", +"8f43987c": "decay_constant()", +"8f43ac1f": "timestart()", "8f44097a": "TokenRDC(address,address,address)", +"8f442f8c": "callAddToNum(address)", +"8f4461f0": "tokensPerBNBs(uint256)", "8f449a05": "subscribe()", +"8f4507f4": "investorWithdrawal(address,uint256)", +"8f455ade": "_tokenOut()", "8f456125": "setCrowdSaleAddress(address)", +"8f458d49": "fromReal(uint256)", "8f4613d5": "left10(uint256)", +"8f463674": "__UUBaseClaimable_init(address,address)", "8f4646b7": "transferPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", "8f46b586": "withdraw_team_fund(address,uint256)", +"8f4702bd": "onComment(uint256,uint256,address,bytes32,uint256,string,uint256)", "8f4708bd": "mintingBountyFinish()", "8f477c55": "updateLink(address,bytes)", "8f4783f1": "_generateRealmSale(uint256,uint256)", +"8f47c153": "bonusPoolJCT(uint256,address)", "8f47dd19": "bulkInit(address[],address[],uint256[])", +"8f48278b": "NewExchange(uint256,address,address,uint256,address,address,uint256)", "8f484394": "manual_withdraw()", +"8f489e04": "accountSharesOut(address)", +"8f489e0d": "redeemGovToken()", "8f48c14a": "updateMinCompanyValue(uint256)", "8f49a264": "provide_eth()", +"8f49a297": "InvestorBonusChanged(address,address,uint256,uint256)", "8f49ccf4": "reportUsage(uint256,uint256,address)", "8f49da4b": "distributedToken()", +"8f49e12f": "mockIncreaseTime(uint256)", "8f4a2a51": "defaultWallet(address)", "8f4b4b98": "messagesSigned(bytes32)", +"8f4b7fca": "yeld()", "8f4ccce8": "startTokenVotes(address[15])", +"8f4ce479": "decodeERC20AssetData(bytes)", "8f4ce746": "buyDeferredPresaleTokens(address)", "8f4d8723": "_CallExecuted(address,bytes32)", "8f4d874a": "referralTokensAddress()", "8f4dc0d1": "updateAvailable(uint256,uint256,bool)", "8f4e4321": "accountOf(uint256)", "8f4e5158": "increaseFrozenBalances(address,uint256)", +"8f4e6f37": "setSettlement(address)", "8f4ed333": "step2()", +"8f4edfe2": "setPauzer(address)", +"8f4f106e": "setPayloadEndpoint(string)", "8f4f3c70": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", "8f4fde42": "crossForkCount()", @@ -81903,28 +149891,44 @@ "8f50fb06": "getTrapInfo(uint256)", "8f50fdd6": "walletAddressesSet()", "8f512c47": "getSponsorships(address,address)", +"8f51368b": "changeAuthorityAddress(address)", +"8f516438": "timeInterval()", "8f518475": "NewKoth(uint256,uint256,address,uint256,uint256,uint256)", +"8f5185e8": "numberOfFarms()", "8f52d420": "CryptoStrippers()", "8f52da60": "technicalWallet()", +"8f52f0f9": "endSaleEarly()", "8f535904": "CROWDSALE_REWARD_WALLET()", +"8f539024": "new_member(uint256)", "8f541730": "advisor1Sum()", +"8f54b37c": "getUintarray()", "8f55a850": "getArtistList()", +"8f55b7c9": "depositToken(uint256,uint256,address)", "8f56015f": "setRequirement(uint256)", +"8f56054d": "stage_prod_currShare(uint256,uint256)", +"8f5630ba": "withdrawProcessingFee()", "8f5665ce": "nthWagerPrizeN()", +"8f56d7b3": "prizelevelmansday(uint256)", +"8f5705be": "disburseDuration()", "8f571461": "ICOPRICE()", "8f580996": "enablePurchasing()", "8f58190e": "setLLV_edit_19(string)", "8f581a53": "giveRegistration(address)", +"8f589114": "setAlphaRate(uint256)", "8f5949f9": "isContractActive()", +"8f59eda5": "withdrawErc20To(address)", "8f5a5a39": "verifyPayment(bytes8)", "8f5ab3ab": "transferdata(address,uint256,bytes)", "8f5ab947": "getNextDropTime()", "8f5b0b1c": "timeCheck()", +"8f5b87e1": "getFeesAmount(uint256)", "8f5bae2e": "anchor(bytes32,uint256)", "8f5bc587": "TokensForSale()", +"8f5befd8": "setDerivativeFactory(uint8,address)", "8f5c2eff": "getPurchaseInfo(uint256,uint256,uint256,uint256,uint256,bool)", "8f5c5d40": "validTranscodingOptions(string)", "8f5cbe36": "testCreateSale()", +"8f5cdced": "disclosureManager()", "8f5cf7b9": "vestingStageTime()", "8f5d23f6": "TOKENS_FOUNDATION()", "8f5e0b3f": "UserBondByOffset(uint32)", @@ -81934,63 +149938,101 @@ "8f5f20c2": "LMA()", "8f5f657d": "rateboc()", "8f5fa4a4": "changeReceiverAddress(address)", +"8f601f66": "deposits(address,address)", "8f608f4f": "exchangeRateMNY()", +"8f60a173": "getRawFundBalance(string)", +"8f60b258": "pendingBcdc(uint256,address)", "8f60cf17": "increaseSalesBalance(address,address,uint256)", "8f6107ef": "MatthewWon(string,address,uint256,uint256)", "8f612102": "createCarrier()", +"8f612c81": "deleteTemplate(bytes32)", "8f617fcd": "icoFinishTimestamp()", "8f61da35": "getDebtLength()", +"8f61f4f5": "PROPOSER_ROLE()", "8f620487": "expirationDate()", +"8f6204eb": "divdDayUser()", "8f62077d": "getPlayerShips(address)", "8f6218a3": "rollDices()", "8f6245e1": "parseBool(bytes32)", "8f627aab": "BlockIntervalCrowdsale(uint256)", +"8f628333": "LogSetName(address,string)", "8f62905f": "mintTokens(int256,uint256,uint256,address)", "8f62b028": "updateUSeqgret()", +"8f62cf18": "addSubTreePlan(uint256,bytes16,uint128,uint256,bool,uint256,bool,uint8)", "8f632311": "doMint(address,uint256,bytes)", "8f632a34": "MeetupToken(uint256,string,uint8,string)", +"8f63489d": "userReferrers(address)", "8f6348b8": "stopFeeding()", "8f63534a": "totalAuctionsCount()", +"8f63a185": "payFee(uint256,uint256,uint256,uint256,address)", "8f64337d": "getHashedData(uint256,uint256,bytes32,bytes32,uint256)", "8f652ec7": "_getVerifierInfo(address)", "8f654175": "auditorAddress()", "8f6612c9": "distributedAutonomousExchange()", +"8f668af4": "getTokenLocakedNum()", +"8f670e54": "AddToFarm(address,uint256)", +"8f673c9d": "returnUserDeposited(address)", "8f679b2d": "EtheraffleICO()", "8f67bd4d": "SBITokenCrowdsale(address,address)", "8f67f9d7": "ILLIQUID_TOKENS()", "8f6811a3": "mintTokensFor(address,uint256)", +"8f683f6d": "getMintVerifier()", +"8f686e6a": "calculateMintAmount(uint256,uint256,uint256)", "8f68b36f": "getMysubscribers()", "8f68ca70": "setWhiteListContract(address,bool)", "8f6963df": "initShareRule6()", "8f699f6c": "calcInvalidKeys(uint256,uint256)", +"8f69c188": "setManyFor(string[],string[],uint256,bytes)", "8f69fa25": "startLockingPeriod()", "8f6a3deb": "_activateZoneLand(int32,int32,uint8,uint8)", "8f6a7286": "refundMultipleUsers(address[])", "8f6ac8d7": "FinalizableCrowdsale(uint256,uint256,uint256,address)", +"8f6b3311": "recover(address,uint256,bytes)", +"8f6b4d91": "proposedLatestRoundData()", +"8f6b7070": "getWrapper()", "8f6b875a": "OWNER_POOL_COMMISSION()", +"8f6b95a3": "deleteAddressValue(bytes32,bytes32)", "8f6bc659": "ownerWithdrawExcessTokens(uint256,address)", +"8f6c010b": "onBuyAndDistribute(address,uint256,address,uint256,uint256,uint256)", +"8f6c0191": "datumIndexFGW()", "8f6caf63": "sendPoint(uint32,uint32,int256,address)", +"8f6cb4bb": "getHash(uint256,address,bytes32)", +"8f6d5a95": "shareholdersLedgerByEthAddress(address)", +"8f6d637e": "ZOOM_FEE()", "8f6ede1f": "mintWithEther(address)", +"8f6f0332": "invoke(address,uint256,bytes)", "8f6f3275": "getLease(uint8,uint256)", +"8f6f44ab": "totalReferralEarningsOf(address)", "8f6f6115": "getOraclizePrice()", +"8f6f88e6": "setShadows(address)", "8f6f988c": "setUltimateOutcome(bytes)", "8f6fa4c2": "ICO_details()", "8f6fba8c": "FEATURE_TRANSFERS_ON_BEHALF()", +"8f6febff": "conversionSucceded(address,uint256,address,uint256)", "8f70009d": "id_for_address(address,address)", +"8f700aeb": "openedPacks(address)", "8f701eaa": "addguess()", "8f702afa": "sellerNumOpenDeals(address)", +"8f705437": "CancelRedemptionRequest(address,uint256,uint256)", "8f70585f": "bid(address,uint256,uint256,uint256)", "8f70bfa0": "processDeposit()", "8f70ccf7": "setTrading(bool)", +"8f71292b": "setInvestorLimit(uint256)", "8f7140ea": "receivePlayerNameList(uint256,bytes32)", "8f717e80": "totalCreationCap()", +"8f719ded": "_all_Claim_ids(uint128)", +"8f71a265": "lastInteraction()", "8f71b3db": "etherToUSDrate()", "8f71f3cb": "getBdpPriceStorage(address[16])", +"8f720137": "postPersonalBounty(string,string,address,uint8,uint256,uint48)", "8f728516": "initNewGame()", +"8f728eb1": "THIRM()", "8f729925": "receivePercent()", +"8f72d545": "hashRateToken()", "8f72e065": "StabitCoin(uint256)", "8f72fc77": "getOrders(uint256,uint256)", "8f731077": "extractAllowanceRecordLength(address)", +"8f73b7bd": "gover(address)", "8f73c5ae": "distributeReward()", "8f7445e6": "setStageThirdBegin()", "8f7451ae": "GetStoreInfo()", @@ -81998,10 +150040,13 @@ "8f75362d": "emergencyWithdrawAdmin()", "8f75374d": "incrementSupply()", "8f754a1e": "affectedCount()", +"8f755479": "setData(uint8)", "8f755c7c": "getOptionState(address[3],uint256[3],uint256[2],bool)", +"8f756147": "luckThreshold()", "8f760988": "forceStopCyle()", "8f76691a": "margin()", "8f76a1f7": "lastClaimedRound(address)", +"8f76abcb": "tokenDeploymentTime()", "8f76dfc3": "allTokenICO()", "8f770ad0": "supplyCap()", "8f77339f": "sendToken(uint256,uint256,uint256,string)", @@ -82010,337 +150055,635 @@ "8f778bb9": "setEmployer(string)", "8f77c2bf": "contractTransferOwnership(address)", "8f78b34a": "lockAccounts(address[],uint256[])", +"8f78c311": "exchangeToken(uint256)", "8f790507": "teamEthContract()", +"8f79306e": "quote(address,uint256)", +"8f79bf62": "getMaxStakeAmt(address,uint256)", +"8f79d5cd": "settings(uint256,uint256,uint256,uint256,uint256)", +"8f7a05a3": "setPricePerTx(uint256)", "8f7a1fe0": "static_income(address,uint256)", +"8f7a27e9": "aplfiPerBlocks(uint256)", "8f7a4738": "censure(uint16,uint32)", +"8f7a5517": "Purchase(address,address,uint256,uint256,uint256)", "8f7a844b": "getAdminData()", +"8f7b1822": "calculateBorrowInterest(bytes32)", "8f7b7bce": "isTeamLockInPeriodOverIfTeamAddress(address)", "8f7ba0a1": "registerbot()", +"8f7bf4fd": "viewAccountBalance(address)", +"8f7c703e": "mintTo(address,uint256,uint256,uint256,uint32)", +"8f7ca3fe": "extractPermissionLevel(uint32)", +"8f7cc229": "openPaused()", +"8f7d02d1": "resolveBonusPercent(uint256)", "8f7d33cf": "addCashback(string,uint256,address,uint256[],uint256[])", "8f7d4dad": "getFirstPoints()", "8f7d79da": "nextRoundMaxDonors()", +"8f7db324": "getUserTotalBonusEarnings(address)", "8f7db6ee": "_setProviderSupply(uint256,uint256)", "8f7dcfa3": "head()", +"8f7e500a": "isOwnerAddress(address,bytes32)", +"8f7f4f98": "getVoteboxVoteCount(address)", +"8f7fac40": "getSignatoryCount()", "8f7fe231": "ValidetherOracle()", +"8f800c3a": "countOfadmin()", "8f80269d": "getClientSupply(address,uint256)", +"8f805d36": "testAndSet(uint256,uint256)", "8f807f6b": "enqueue(address)", "8f80b7bc": "registerTokenInternal(address,string)", "8f80d339": "roundClaimICOKeys(uint256)", +"8f818b90": "getBuyFee()", "8f81ecfc": "removeChild(bytes32,bytes32)", "8f81fd4a": "changeIcoDiscountPercentages(uint8,uint8,uint8)", "8f8203c0": "transuser(address,uint256)", "8f828c9e": "totalSupplyAtInternal(uint256)", "8f82b8c4": "getWhiteListCount()", +"8f82bf7f": "_getDecimalPrecision(address,address)", +"8f82c33e": "sharesOfWant()", "8f8336b7": "setFeesMaxUptoCoin(uint256)", "8f835871": "addRealWorldPlayers(uint128[],bool[])", "8f83719c": "getTreasuryBalance(address,address)", "8f83743f": "Fricacoin()", "8f838478": "getInstantiationCount(address)", +"8f840ddd": "totalReserves()", "8f842851": "dateManager()", "8f847076": "removeNFToken(address,uint256)", +"8f849d82": "CockAccountb()", "8f84aa09": "ownerAddress()", "8f850163": "flipsWon()", "8f855433": "newCreator()", +"8f858576": "NewName(bytes32,bytes32)", +"8f858f66": "getDividendAddress()", "8f85f92c": "isPoDEnded()", +"8f860546": "appendLocksXLs(address,uint256)", "8f860c5f": "createWallet(address,address)", +"8f865de0": "KTApprovals(uint256)", +"8f86bae2": "updateSalePhase(int8)", +"8f86f255": "information(uint256)", +"8f86f41e": "setFarmKeeperFeeMin(uint256)", "8f86f5ea": "finishSale()", +"8f8708aa": "balanceAlgorithm(uint256)", "8f872bb1": "advisorsAndAmbassadorsAddress()", "8f87932c": "fix_amount(uint256)", +"8f87b786": "registerInstitutionAsset(string,string,address)", "8f87c84b": "transferOutEth()", "8f87e387": "updateSspManagerContract(address,string)", "8f88110d": "updateRecordWalletAddress(string,address)", "8f88708b": "retrieve(uint256)", +"8f889f8e": "writeData(uint256)", "8f88a00e": "calculateRewardStructures()", "8f88aed0": "populateFromItemRegistry(uint256[])", "8f88b792": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"8f88ef52": "addToRootAccounts(address)", "8f8949e6": "setTotalCardCount(uint256)", +"8f8a0d19": "suma(int256,int256)", "8f8a5832": "reLoadXid(uint256,uint256)", +"8f8a618a": "mulTruncate(uint256,uint256)", +"8f8b29dc": "thirdPhaseEthReceive()", "8f8b2c9b": "totalEthJackpotRecieved()", +"8f8b5cde": "horses(uint256)", "8f8bbb8c": "ObjectedVote(bytes32,address,uint256)", "8f8bcae6": "minting(address,address)", "8f8bd64c": "calculateNetworkTokenBonusPercentage(uint256,uint256,uint256,uint256,uint256)", +"8f8bdc34": "maximumDepositUSD()", "8f8bde82": "MicroDAO()", +"8f8c0094": "changeMaxABCount(uint256)", +"8f8c518b": "getNameByProtocol(uint8)", +"8f8c57fe": "swap(uint256,uint256,address,address,uint256,address,uint256,uint8,bytes32,bytes32)", "8f8c7c50": "_randomMeme()", "8f8d322e": "melt(address,uint256)", "8f8d49ac": "setStore(string,uint256)", "8f8db737": "buyDirectInMarketplace(uint256)", "8f8e7419": "sharedStorage()", "8f8e8f9d": "refundETHToCustomer(address,address,uint256)", +"8f8e965b": "_pair_artt_weth(uint256)", +"8f8e9e7b": "mapAddressBlock(address)", "8f8eabea": "ZNA(uint256)", "8f8eb474": "burnBid(uint256)", +"8f8f24ea": "deposit1(uint256,uint256)", +"8f8f2fa9": "FIRST_YEAR_REWARD()", +"8f8f4e2e": "depositHeroToGateway(uint256)", "8f8f6b52": "freezTwo()", +"8f8f6d29": "pendingRandom(uint256,address)", +"8f904a21": "getPayFeesDetails(address,uint256)", "8f907195": "rpow(uint256,uint256)", "8f9087f5": "hashBytes(bytes)", "8f908cbd": "setCaptainTokenContract(address,address)", +"8f90e902": "setUniswapPool(address)", "8f90f2bb": "getNewRabbit(address)", +"8f911dca": "CHALLENGE_ROLE()", "8f9139fb": "Pokecoin(uint256,address,address)", +"8f917b92": "setDilutionTime(uint256)", +"8f91eee9": "defineAllocations(bytes32,uint256,uint256,uint256,address)", +"8f9225ca": "balanceFulcrumAvailable()", "8f924560": "addEntity(string,uint256,uint256)", "8f929c4a": "createAccount(bytes16,string)", +"8f92c27e": "getDex(string)", "8f92d308": "viewFeaturePetitionFee()", +"8f93668c": "BylawsBytes32(bytes32)", "8f937574": "OwnerHelper()", "8f93bffe": "getOrCacheReportingFeeDivisor()", +"8f93f4dd": "CYCLEWETHLastTotalSupply()", "8f940f63": "typeId()", "8f94f6a0": "piTokensForSale()", +"8f951f0b": "_poolAmount()", "8f9593f4": "winnerFirst(uint256,uint256)", +"8f959f54": "APPROVE_BLACKLISTED_ADDRESS_SPENDER_SIG()", +"8f962adc": "allLeases(uint256)", +"8f964e45": "isRebalanceTowardsHedgeRequired()", +"8f966498": "setSponsoredContract(address)", "8f96a1ea": "addThing(bytes32,bytes32,bytes32,bytes32)", +"8f970ea2": "emergencyWithdrawalKAI(uint256)", "8f975a64": "sendERC20(address,address,uint256)", +"8f9776c6": "offerSigilForSaleToAddress(uint16,uint256,address)", "8f97ad89": "claimTokensFor(address,address)", "8f97cff0": "getPersonsCount()", "8f97d03f": "IbizaERC20Token()", "8f97e3a0": "requestPayout(uint256)", +"8f98078a": "current_streams(address)", +"8f98268e": "priceOfLevel(uint64)", "8f984115": "AUEBToken()", "8f98767e": "fundingMaximumTargetInUsd()", "8f98ce8f": "transferFeeNumerator()", "8f98e0e1": "MBToken()", +"8f995d7d": "maxStakingAmountPerContract()", +"8f99b120": "fundingUSDT(uint256)", "8f99d31b": "betLow()", "8f99ea43": "setDividendDB(address)", "8f99fdab": "SafeDeduct(uint256,uint256)", +"8f9a372d": "setNewTreasury(address)", +"8f9a423c": "RewardMasternode(address,uint256)", "8f9a42b8": "philadelphiaBets()", "8f9a57ef": "minSignId()", "8f9a6da1": "queryOracle(string,string)", "8f9abae1": "accessControlled()", "8f9abe52": "isValidSellOrder(address,address)", "8f9ade5e": "create(address,bytes32,uint256)", +"8f9ae0b9": "pendingDeposits(address,uint256)", "8f9b7eb7": "updateReleaseAmount()", +"8f9baf6a": "lastMintDayTime()", "8f9bbf16": "getSecurityTokenData(address)", "8f9bf95d": "_payCommission(address)", +"8f9c8fb9": "successIphoneMade()", +"8f9cb938": "dictate(address,uint256,string)", +"8f9cdc7a": "setTimeGaps(uint256)", +"8f9d10fb": "toWQueenERC1155Id()", "8f9d1cba": "zss(address)", "8f9d390a": "toteLiquidatorTransferComplete()", "8f9de24b": "uniqueSpinnersActive()", +"8f9de9e6": "durationPhaseArray(uint256)", "8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", "8f9e1409": "removeSection(bytes32,bytes32)", +"8f9e4e74": "ctry_(uint256,uint256)", +"8f9e7e0e": "balanceOfeCRV()", +"8f9f193f": "updatePlatformAddress(address)", +"8f9f2148": "verifyMessage(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"8f9f4b63": "verifyFingerprint(uint256,bytes)", "8f9f5b2f": "getMemoryWrite(uint256,uint256)", "8f9fa9ec": "chngDL(uint256)", "8f9fb0e4": "getAssetString(uint256)", +"8fa0170a": "getEpochTestValue(uint256)", +"8fa02378": "totalSelfInvest()", +"8fa07a11": "setPrice(uint112,uint112)", +"8fa11b34": "unlock_privateSale(address)", "8fa148f2": "currentRoundStartBlock()", "8fa17580": "claimEgg(uint256,bytes32,bytes32)", "8fa1ae05": "batchTransferSingleValue(address[],uint256)", +"8fa1ffdb": "transferProperty(address,address)", +"8fa2a903": "isAddressAllowed(address)", +"8fa2c6d0": "cryptoSharesContractsLedger(uint256)", +"8fa2f101": "finalize(uint256,bytes32)", +"8fa31b3b": "mtest()", "8fa32111": "addInvestor(address[])", "8fa366df": "changePhaseToICOweek3()", +"8fa39a88": "mdxPerBlock()", "8fa3a84c": "validateTransaction(address)", +"8fa3dd13": "getFunctionById(bytes4)", +"8fa43499": "migrateBPT(address)", +"8fa4a940": "setCriticalStrategies(address,address)", "8fa4c0b1": "tokenPlus(address,address,uint256)", +"8fa501ca": "expansionPercentDebtPhaseLiquidityIncentiveFund()", "8fa54b81": "setUserBattleValue(address,uint256)", "8fa5614f": "getBylawsProposalVotingDuration()", "8fa56215": "_createToken(string,string,string,uint256,address,uint256,uint256)", "8fa566e8": "tokenIdOfUUID(string)", "8fa5a6e9": "pmtAccount()", "8fa65488": "startRefundInvestorsBallot()", +"8fa6b518": "getEffectiveDelegatedToValidator(uint256,uint256)", "8fa6da99": "Modultrade(address,address,address,address)", +"8fa6fdb0": "get_your_bidded_card(uint256)", "8fa81bb0": "PrivateSale(address,uint256)", "8fa8b790": "cancelAuction()", "8fa906b2": "addFounder(address,uint256)", "8fa9cc09": "HeritableWalletFactory()", "8fa9e55c": "signIn(address)", +"8faa4cb2": "scaledRewardCreditedTo(address)", "8faa6cb7": "partnersLockEnd()", "8faa77b2": "deployers(uint256)", "8faab3a7": "BatchAttachAssets(uint256[10])", "8faad4c4": "createPromoTeam(string,address,uint256)", "8fab0549": "setInvestorsPercentage(uint256)", +"8fab0c21": "totalRigelTokensForSale()", +"8fab0db3": "alertTransfer(address,address,uint256)", +"8faba44c": "getPossibleProposalStates()", "8fabd326": "mPausedTime()", +"8fabd64c": "AddrVerification(address)", +"8fabd82d": "getAmountsOut(address,address,uint256,address[])", "8fac3d3e": "feesGathered()", "8fad8334": "_timeRemaining()", "8fad8eec": "EnterRentToken()", +"8fadae68": "changeTransferStatus(bool)", "8fadd08b": "betHigh()", "8fae065c": "setStartIcoPreICO(uint256)", "8fae4857": "finaliseChannel()", "8fae60a5": "agree()", "8fae8850": "ICOmint(address,uint256)", +"8fae9382": "emailToAddress(string,address,uint256)", +"8faea73a": "getRewardData(uint256)", "8faef6a5": "getTierForLastMiniting()", +"8faf0825": "isCTokenAllowed(address)", "8faf682d": "payeeWithdrawCapital()", "8faf850d": "addUser(bytes32)", +"8faf8c75": "getRis3Amount(address)", +"8fafac08": "findFreeReferrer(address,uint256)", "8fafb286": "claimResearchDividends(address,uint256,uint256)", +"8fafd71b": "getStaked(address,uint256)", "8fafebca": "TokensPurchased(address,uint256,uint256)", +"8fb08e2c": "ethOf(address)", "8fb0de08": "getCurrentRoundInfo2()", +"8fb14061": "initialize(address,uint256,bytes32,uint256[],bool)", "8fb197d1": "getUserDataOnToken(address,uint256)", "8fb21a4b": "setMinReferrerBonus(uint256)", +"8fb23120": "testGetPriceForAssetAmountMulCollatRatio_Zero()", +"8fb23f5e": "setFeeAddress1(address)", "8fb25f82": "sellCells()", +"8fb28fcf": "_max(uint256,uint256)", "8fb29d6c": "pastAgreement(uint256)", +"8fb2b900": "userWithDraw()", "8fb2f8b4": "isCollectTokenStart()", "8fb2fbe1": "getTokenToEthUpdateOrderHint(uint32,uint128,uint128)", +"8fb3535a": "premioAcumulado()", +"8fb35daa": "notarizeHash(string)", +"8fb4003f": "_vault3()", +"8fb40997": "evtBuyKey(uint256,address,bytes32,uint256,uint256)", "8fb48844": "noOfreservations(address)", "8fb4b573": "start(uint256,uint256)", +"8fb4e1cd": "updateUser(uint256,address)", "8fb50078": "joinProvider(address)", "8fb51ccd": "QosinusCoin()", "8fb5202b": "setFinancialAddress(address)", "8fb5a482": "getPrices(address[])", +"8fb5d4bc": "Refund(address)", +"8fb5f171": "setRevert(bool)", "8fb67f60": "aPurgeMessages()", +"8fb6c181": "PauseChanged(bool)", +"8fb6c6f6": "setReferralReward(uint256)", "8fb6d997": "updateStorageContract(address)", "8fb74077": "HoursFromNow(uint256)", "8fb74ae9": "isBannedUser(address)", "8fb807c5": "totalAssetSupply()", +"8fb80c73": "getStakerDetails(address)", "8fb84bb0": "marketBuy(uint256)", "8fb8f109": "addressToPersonId(address,address)", "8fb96635": "decreaseBalance(address,uint256,uint256)", +"8fb9b819": "cageSplit()", "8fba273c": "m_investmentsByPaymentChannel(address)", +"8fba801b": "getNumDelayedFunctions()", "8fba8d5c": "toHexString(uint256)", +"8fbaec9e": "approveCurve(address)", +"8fbb3813": "getERCBalance(address)", +"8fbb38ff": "voted(uint256)", "8fbb3c17": "CROWDSALE_PHASE_2_START()", +"8fbb4c9c": "exchangeEtherForDOWS()", +"8fbb5fa7": "wool()", "8fbb9b49": "_isProduct(address)", "8fbc3ecd": "BUFFER()", "8fbc7eb0": "balanceOfToken(address,address,address)", +"8fbcf3d4": "TokensDelivered(address,uint256)", "8fbd4fa5": "claimPrizes(uint256,uint256,uint256,uint256)", +"8fbd9446": "authenticate(address,bool)", +"8fbdd5f2": "_extractCertainLitSentByMistake(uint256,address)", +"8fbde234": "ERC20_XYZ(uint256,string,string)", "8fbe382c": "totalFoundCoin()", "8fbea5c9": "totalCommissionOwed()", +"8fbec54e": "setApprovalExternal(address,bool)", "8fbeee23": "sendOutEtherWithGasAmount(uint256)", +"8fbf6b10": "partnerAllows(address)", +"8fbf6b77": "LunaCoreToken()", +"8fbffe5d": "getReleaseFactor(address)", "8fc01623": "activatePackage(uint256)", +"8fc01cf7": "pendingVADR(uint256,address)", +"8fc0a0b5": "setBpool4Min(uint256)", +"8fc0d08f": "IMP04()", +"8fc16d1a": "setMaxFundingRateSkew(uint256)", +"8fc1708c": "initializeVault(address,address,uint256,uint256)", "8fc1d08b": "transferFromPublicAllocation(address,uint256)", "8fc202ae": "currentKeyRound()", "8fc264e0": "allocateTokens(uint256,uint256)", +"8fc2d445": "newOraclizeCallback(bytes32,string,uint32,uint128,uint128,uint256,uint256,uint256)", "8fc3047d": "checkPrice()", "8fc3c33b": "GenerateFortuneCookie(uint8)", +"8fc42094": "RoundEnd(uint256)", "8fc469b1": "setPricesDecimals(uint256,uint256)", +"8fc4b332": "ownerWithdraw(address[])", +"8fc4d411": "CTToken()", +"8fc4d76e": "getFirstAuction()", "8fc4ea4c": "ownerPetCollection(address,uint256)", +"8fc5108b": "SetMinWorkProjectOwner(uint256)", +"8fc51c86": "buy(address,uint256,address,bool)", "8fc5668b": "processRequest()", "8fc5efd4": "c_centsPerTokenFirst()", "8fc5fd83": "FRPoint()", +"8fc67536": "SETTLE_TIME_MIN2()", "8fc6ad2d": "getParameterValueByTitle(bytes32)", "8fc6bf7f": "ico3endTime()", "8fc7a25d": "getEthAmount(uint256)", +"8fc847de": "setMainPaths(address[],address[],address[],address[],address[])", +"8fc86e06": "fIndex()", +"8fc8a011": "TCOREMin()", "8fc8a134": "DepositBeneficiary(address,uint256)", +"8fc8a5c7": "hashCompare(string,string)", +"8fc9119e": "cliam()", +"8fc92a13": "foo3(address,uint256)", "8fc95403": "saleSecondEarlyBirdEndBlock()", "8fc9bff6": "_claimRewardBlank(address,string)", "8fca3057": "pastPlayRoundsCount()", +"8fca5009": "minLaunchTime()", +"8fca52be": "setPTokenMapping(address,bool)", +"8fca9673": "propertyContract()", "8fcb4e5b": "transferShares(address,uint256)", +"8fcbaf0c": "permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)", +"8fcbd94a": "secondaryFundPercentage()", "8fcbeeb7": "getFreeDragon()", +"8fcbf881": "EventProcessVoteTotals(uint256,uint256,uint256)", "8fcc9cfb": "setMinDeposit(uint256)", +"8fcce45d": "tokensCalledBack(uint256)", +"8fcd1e2b": "setCurvePool(address,address,address,int128)", "8fcd558e": "GetDataRequestLength(uint256)", +"8fcddad4": "slateCount()", "8fce0ee7": "secondLineWrong()", +"8fce3301": "Validated()", "8fce6b07": "_addKeeper(address)", +"8fce6c0e": "addERC20WrapperModel(address)", "8fced626": "resolveBet()", "8fcee83f": "getRoomStatus(uint256)", "8fcf31e3": "createCardFromName(string)", "8fd0290f": "YZChain(uint256,string,uint8,string)", +"8fd066e0": "whole_balance()", +"8fd095a9": "getSetHoldingsValueInWei()", "8fd0b051": "buyTokens(address,uint256,uint256,uint256)", "8fd0de57": "identityCommitments(uint256)", +"8fd1177e": "updatedailyLimitPackage(uint8,uint256)", +"8fd12ee1": "EvNewIteration(uint256)", +"8fd15f06": "LogOrderExecutionSuccess()", "8fd16541": "referrer2Percent()", +"8fd16880": "InflationToken()", "8fd1b1f2": "maxCardUpgradeLevel()", "8fd21139": "MixMall()", "8fd23762": "IOSToken()", "8fd237e1": "setJackpotWinPercent(uint256)", +"8fd28379": "changeMinETH(uint256)", "8fd28bcf": "testFailAuthorityAuth()", +"8fd33280": "addKittyCreator(address)", +"8fd37d90": "unlistOrderbookContract(address,uint256)", "8fd3ab80": "migrate()", +"8fd45d1a": "emergencyRecovery2(address,uint256,address)", +"8fd4aece": "attack(address,bool)", "8fd4f899": "setVipRate(uint256)", "8fd57396": "winAmount5()", +"8fd57b92": "removeSolver(address)", "8fd5a39e": "distributeSMILE(address[],uint256)", "8fd5d753": "EternalToken(uint256,string,string)", "8fd5eb06": "_decodeSettle(bytes)", +"8fd5ffd6": "becomePartyB()", +"8fd60004": "addKYCAdmin(address)", +"8fd60ea5": "getAsksDesc()", "8fd611be": "eventManager()", +"8fd631af": "setParameters(address,uint256,address)", "8fd65890": "getCurrentAvailableFunds()", +"8fd690ec": "INVERSE_FEE_PER_BLOCK()", "8fd7124e": "BeginRound()", "8fd712ae": "PRICE_STAGE_ONE()", +"8fd7583f": "MIN_VOTE_TOTAL_AMOUNT()", "8fd79669": "setPokemon(uint256,string,address,uint256,uint256)", "8fd7aab6": "unfreezeAccount(address,uint256)", +"8fd7c1cf": "TokenPurchase(address,uint256,uint256,uint256,uint256)", +"8fd7c85c": "setGovernanceTokenDistributor(address,bool)", +"8fd83f76": "AllMyPools(address)", "8fd88225": "GetChipList(address)", "8fd88ed1": "setManagerIncome(address,uint256)", "8fd8b429": "vanishCoins(uint256)", +"8fd8f783": "setCacheClassInfo(uint32)", "8fd90960": "UpgradeProposalSubmitted(uint256,uint256,address,address,address)", +"8fd97804": "basePrice3()", "8fd9f1b4": "DaoRules()", "8fda183a": "hasPoolRole(address)", "8fda356d": "activateContract()", "8fda5c8e": "creatorsPoolMintQuota()", +"8fda7bfb": "DEFAULT_MAX_C_RATIO()", "8fdb385b": "Trc(uint256,string,string)", +"8fdb3e37": "addAthByDistance25()", "8fdb7189": "double()", "8fdb72f3": "gzeEth()", +"8fdb7868": "setAnalPerBlock(uint256)", "8fdc054f": "purchaseCrates(uint8)", +"8fdc0e9a": "freezeMonaERC20Payment()", +"8fdc1598": "changeHornPool(address)", "8fdc24ba": "left94(uint256)", +"8fdc809e": "transferWithtLockUser(uint8,address,uint256,uint256[],uint256[])", +"8fdc8f3b": "loanAmountFromCollateral(uint256)", +"8fdd4443": "_weekOne()", +"8fdd8690": "ROTMAGGOTpair()", +"8fdd8e2e": "tk_topUpRewardPool(address,uint256)", +"8fddd3ce": "updateSafeFundMoving(bool)", +"8fddf46b": "_countSegment(uint8)", "8fdf51d5": "getMyAllAuction(address)", +"8fdf676c": "applyForRebase()", "8fdf741a": "_batch3_rate()", +"8fdf7973": "setHoldtime(uint256)", +"8fdf97e5": "OwnerfeeDistributor()", "8fdfac6b": "setMAXfinney(uint256)", +"8fe05a0d": "ddx()", "8fe10615": "walletLocked(address)", "8fe10ae4": "FundsAdded(address,uint256)", "8fe13b92": "addExchange(bytes32,address)", +"8fe1b985": "sixVestingStages()", +"8fe1d0f7": "viewLoanRequests()", +"8fe1ec47": "jsbdcpeth()", +"8fe2580b": "UINT_HABERG_POTION_TAX_RATE()", "8fe26bf5": "TailsToken(uint256)", "8fe2b355": "getGameVars()", +"8fe2d53d": "_employeeExists(uint256)", "8fe2eb9e": "setSellDividendPercent(uint256,uint256)", "8fe316fe": "withdrawNotification(uint256)", "8fe3579f": "addCharacter(string,address,uint256)", "8fe3ec6d": "setDefendBoostCap(uint256)", +"8fe44729": "ethFees()", "8fe44adf": "ico4Min()", "8fe47625": "showMyTokenBalance(address)", "8fe52aea": "checkList(string,address)", "8fe58eb9": "Triger()", +"8fe5ead1": "ownerAddressTwo()", "8fe5f77d": "hackTenuous(address)", +"8fe605ad": "getOneTokenUsd()", "8fe60df1": "calculateCounterReceived(uint256)", +"8fe62be7": "direct_revenue(uint24,string,string)", +"8fe62e4d": "executeNewDelay()", "8fe6677d": "addToWhitelistMultiple(address[])", +"8fe6b38d": "approveTo0x(address,uint256)", +"8fe6cae3": "minSupply()", +"8fe72c3e": "AdminSet(address)", +"8fe77e86": "checkAddress(string)", +"8fe83a91": "set_dog(address,bool)", +"8fe85305": "releaseAt(address)", "8fe89502": "calculateFNKRate()", "8fe8a0a6": "abcLottoResolver()", "8fe8a101": "isKilled()", "8fe8cb79": "promotionIndexToClaimant(uint256)", +"8fe8cf24": "removeTransferBurnAddress(address)", "8fe91976": "activateWithdrawal()", +"8fe91b83": "createTransfer(uint256,address,address)", "8fe92aed": "votedPerCent(address)", +"8fe94fb2": "changeOwnerAndExecute(address,address,uint256,bytes)", "8fe9a12f": "BKUToken()", "8fea1e4d": "decreaseAllowance(address,uint256,address)", "8fea64bd": "Hourglass()", +"8fea9593": "cancelStrainzTrade(uint256)", "8feaa243": "callTest(address,address,uint256,bytes,string)", +"8feaade4": "toggleFreeze(address,bool)", +"8fead552": "votesOf(address,uint256)", "8feadcb7": "setPeriod(uint256,uint256,uint256)", +"8feb0fd7": "offChainCurrencyValuator()", "8febb1e5": "getPlayerHasAff(uint256)", +"8fec5b01": "modifyImmediatelyWithdrawableLimit(int256)", +"8fecb1a2": "transferRewards(uint256,address)", "8fedc959": "hedgeAddress()", "8fedd2f2": "getTestTwo()", "8fee3dab": "updateStat(uint256,uint256,uint256,uint8,uint8)", +"8fee6407": "stakes(bytes32)", "8fee7687": "allocatePresaleTokens(address,uint256)", "8fee7b57": "registerQuarterSeason(int8)", +"8feeec76": "getBump()", +"8fef1b44": "_getUSDValue(uint256,uint256)", +"8fefd8ea": "check(uint256,uint256)", "8ff0c391": "isBuyBackTwo()", "8ff11282": "parseKey(bytes32)", +"8ff13a21": "numberOfSchainTypes()", +"8ff1516b": "currentCollateral(address)", "8ff1a583": "ICO_HARDCAP()", +"8ff209ce": "day_percent()", "8ff21e0d": "LogBounty(address,uint256,string)", "8ff255d6": "getHighestPrice(uint256)", +"8ff27fcc": "updateCurveZapOut(address)", +"8ff2af45": "zkProofData(uint256)", +"8ff2dd20": "newFarm(uint256,uint256,uint256,address,address,string)", +"8ff36fd1": "future_smart_wallet_checker()", +"8ff39099": "setStaking(address)", +"8ff3928c": "reset(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8ff400f4": "getVotingPower(address,uint256)", +"8ff41438": "commitToCutPurpleWire(bytes32)", +"8ff4695c": "viewDeposit(address,uint256,uint256)", +"8ff48223": "flipIsWithdrawStake()", "8ff49347": "LOG_InvestorCapitalUpdate(address,int256)", "8ff591b4": "addMinutes(uint256)", +"8ff5be86": "reffer(uint256)", "8ff5cbc3": "ApproveERC20(address[])", +"8ff5efee": "ROUND_2_TOKENSALE_RATE()", "8ff5f021": "tokenAlreadyUsed(uint256)", +"8ff60121": "UnlockDone(uint256)", +"8ff613d4": "setPublicSaleContractAddress(address)", "8ff6650a": "Lending(uint256,uint256,address,uint256,uint256,uint256)", "8ff67e35": "EthereumPro()", "8ff6c8dd": "ICOSaleEnd()", "8ff6e971": "isSecondary(uint256)", "8ff72293": "getLotteryStatus(uint256)", +"8ff76931": "joinGemJoin(address,address,uint256,bool)", +"8ff7c8af": "setGemCommission(uint8)", "8ff813fd": "transferVester(address)", "8ff82a97": "TransferLockedToken(address,address,uint256,uint256)", +"8ff8646d": "inCaseWithdraw(uint256)", "8ff8754c": "getShareIndexDebugForTestRPC()", +"8ff8da45": "swapEthToZebi()", "8ff936ea": "NoahCoin()", "8ff95fa8": "catNames(bytes5)", +"8ff97be2": "deleteDelegate(uint8,address,uint8)", "8ff9b84e": "newStorage(address)", +"8ffa3277": "Companion2()", +"8ffa9682": "contributionLimits()", "8ffa9690": "getBoolValue(bytes32)", +"8ffac733": "approveMaximumOnPerpetual()", +"8ffaf86d": "operatorVoteOne()", "8ffb4dc7": "nextStage(bool)", +"8ffb5be8": "claim(uint256[],address,uint256[],bytes32[][],bytes32[])", "8ffb5e67": "getEvents(uint256,string,uint256)", "8ffbcb81": "endIcoSaleRound3()", "8ffbd95b": "setFcfContractAddress(address,address)", "8ffc024f": "login(address,address)", +"8ffc177c": "_artt()", +"8ffc467e": "MYFILockedCommunityOne()", +"8ffc60ff": "createEscrow(bytes32,address,address,bytes32,uint256,uint256,uint8)", +"8ffc80a1": "addLiquidityETH(uint256,uint256)", "8ffc831a": "testMemoryIntegrityCheck32Bytes()", "8ffcdc15": "ContractDeployed(address)", +"8ffd033c": "rewardAddresses(address)", "8ffd2a1b": "add(uint256,address,uint8,string,address,address,string)", +"8ffd3fe3": "updateFileList(string)", +"8ffd648c": "repairScribeRep(address)", +"8ffd6fe8": "_utilizationRate(uint256,uint256)", +"8ffdbf0b": "dayQualitysContract()", "8ffe9b94": "transferTo(address,address,uint256,uint256)", +"8ffead3d": "setResultLastDay()", "8ffeb5c8": "MyBoToken(uint256,string,uint8,string)", "8ffec6ee": "vinciCap()", +"90007820": "setMinCommitmentIncrement(uint256)", "9000b3d6": "addVerifier(address)", "9000fcaa": "killAllowanceContract()", "900104da": "updateAddressInfo(address,address,uint256,bool,uint256,bool,uint256,bool,string,bool)", "90014f06": "ownerSetJackpotOfHouseEdge(uint256)", +"90018197": "runEndTime()", "90018343": "_forwardFundsWei(uint256)", "9002dba4": "right17(uint256)", "900334b1": "investorDividendsAtNow(address)", +"90039bf4": "setSuccessInfo(uint8,uint8)", "9003adfe": "collectedFees()", "9003ff51": "XET2()", +"900407bc": "recordCount()", "90042baf": "createContract(bytes)", "90044d18": "phaseTwoBonusPercent()", "90045412": "withdrawloss(address,address)", +"9004876b": "transferAdvisoryReserveTokens(address,uint256)", "900526b3": "getAuthorizeContract(uint256)", "90059aed": "_daysToDate(uint256)", "90061292": "Bazzhtoken()", +"900636ad": "priceOfBeauty(uint256)", "90063fd4": "payContributorByNumber(uint256)", "90065125": "PropertySet(address)", +"90066b49": "nonEtherPurchaseTransfer(address,uint256)", "900683d0": "subtraction(uint256,uint256)", +"900692e2": "x_adminManualWithdrawEtherAdmin(uint256)", "90070cb3": "Contribution(address,address,address,uint256,uint256)", "9007127b": "getIntValue(bytes32)", "900726c2": "sellOpen()", +"90077103": "Holdplatform_balance()", "9007cdf3": "TOXBToken()", "9007d53f": "withdrawTokens4(uint256)", "900863e7": "depositTeamPerfit(uint256)", +"90087d5c": "buy(address,uint256,uint256,uint8,bytes32,bytes32)", "900888a3": "unsetERC777(address)", +"9008a642": "nudge()", +"9008c7cb": "updateBid(uint256,uint256,address,uint256,uint256,uint256)", "9008d64f": "getHolderInfo(bytes32)", +"9008dc86": "gameMinters(address)", +"900917a1": "mulExt(uint8,uint8)", "90099ece": "preIcoOpen()", +"9009a445": "requireValidSignature(address,uint256,bytes32,bytes)", +"9009d9b7": "auctionEndVoucher(bytes,bytes,bytes,bytes)", "900a0285": "double(bytes32,uint8,uint256)", +"900a183d": "myDonation(address)", "900a974e": "end(string)", +"900a9d8f": "BajaUniversidad(address)", "900b7b62": "getWorkerAddress(uint256)", +"900ce6ba": "addBlacklistAddress(address)", "900cf0cf": "epoch()", +"900cf842": "buyLevel(uint256,uint256,uint256,uint256)", "900cff49": "getEsgoTXFund(uint256)", "900d33d9": "createContractCar(string)", "900d3812": "registerTransaction(string,address,uint256)", @@ -82352,396 +150695,745 @@ "900e1561": "changePersonalMincap(uint256)", "900eb5a8": "currentValidators(uint256)", "900f080a": "reveal(uint256[],bool[],bytes32[])", +"900f604e": "changeDev2Address(address)", +"900fbbca": "swApp()", +"900fe104": "getAMM(address,uint256)", "9010470d": "markAsComingAndFreeze()", "90107afe": "setAddresses(address,address)", "9010c70b": "defaultLockBlocksForPool()", +"9010d07c": "getRoleMember(bytes32,uint256)", "9010f726": "getKeysByPurpose(uint256)", +"90116786": "getUserStatus(bytes32,address)", +"90126868": "getUniq16()", "90126acf": "optionsExercised(bytes32,address,address)", "9012c4a8": "updateFee(uint256)", "90135fec": "maxReached()", +"9013a0e5": "_strConcat(string,string,string,string,string)", "9013ad18": "activateUser(address,address)", +"9013b39e": "percentForBurn()", "9013d1ed": "startChallengePeriod(bytes32,bytes,address)", "9014b075": "clockairdrop()", "90152ddb": "Liutestcoin(uint256,string,uint8,string)", +"9015c8ac": "getTokenAfterAudit(address)", +"9015d371": "isEnabled(address)", "9015e1dc": "getPlayerAddressById(uint256)", "9016bc21": "client_address(address)", "9016dd4b": "push(address,uint256[2],uint8)", "9017006e": "getDevFees()", "901717d1": "one()", "90171e57": "setBonusRound1(uint256)", +"90173864": "finishElection()", +"901754d7": "pools(address,address)", +"9017dcfc": "addComment(address,bytes32,bytes32,bytes32)", +"90187332": "startYum()", "9018c431": "serServerStatus(string,uint256)", +"9018c818": "acceptInvitation(address)", +"90193b7c": "getNextNonce(address)", +"9019b310": "liquidityTokenAddress()", +"901a2390": "tokensMint()", +"901a71bc": "setChargeFee(uint256,uint256,uint256,uint256)", +"901ab5b2": "getRepresentative(address,uint256)", "901b2036": "totalSpins()", +"901b23b3": "startNewVote(uint256,uint256,string,string)", +"901b28bc": "isTransferDisabled(uint256)", "901b4301": "evacuate(address)", +"901b4ccc": "setAcoPoolBaseVolatility(uint256[],address[])", "901b9249": "round(int256,int256,bool)", +"901be041": "erc20Implementation()", "901c4e4f": "deployVault()", +"901c5953": "pay(string,uint256)", "901c7518": "commRate(uint256)", "901c947f": "showContractBalance()", +"901ce853": "Buys(uint256)", "901cea7b": "allocateEcosystemTokens()", +"901d13e2": "eject(address)", "901d7775": "voteOutMasterKey(address)", "901da0df": "ownerTokenTransfer(address,uint256)", +"901dea7f": "contractBalance(address,address)", +"901e0b08": "setRewardReductionMin(uint256)", +"901f4e52": "getAprOptions()", +"901f70e6": "importCdpWithSignature(address,uint256,uint256,bytes)", "901fe291": "_deposit(uint256,address,address,uint256)", "902025bd": "OfficalHolding()", +"90202fc2": "setTokenExchangeRatio(address[],address[],uint256[],uint256[])", +"90209fed": "getBalanceInternal(address,address)", +"90210d7e": "depositFor(uint256,uint256,address)", +"9021276e": "TOKEN_PRICE_EUR_ULPS()", +"90213b4b": "withdrawDrc(uint256,uint256)", "9021c03d": "creditDividends(uint256)", "9021dd30": "MinBetAmountChanged(uint256)", +"902297f2": "manageCollection(address,address,address,bytes)", +"90229af7": "getVaultInfo(address)", +"9022c19c": "gateways(address)", "90232694": "toMemory(uint256,uint256)", "90236e76": "Short()", +"90238079": "claimCollateralAtMaturity(address)", "9023c993": "YupieToken()", +"9023f273": "addProduct(string,int256,int256)", +"90241a6f": "_rewardAddress()", +"9024ba0c": "haltLoanRequest(uint256)", +"9024f15c": "distributeTokens(address[],address[],uint256[])", "90255c6a": "salmanCoin()", "9025ab6d": "ethTransfertoKYC(uint256)", "9025e64c": "networkId()", "902650aa": "initCards()", "9026ad2e": "AbstractSweeper(address)", +"9026b8d9": "PairAddress()", "9026bd65": "RaffleGraphBook(string,uint256)", "9026dee8": "checkAdmin(address)", +"9026e5fe": "getJTestaAmount()", "902753f4": "verificationOff(address)", +"90281af7": "interact(string)", "9028353a": "founder2Address()", "9028f20b": "bodyElementBySubtypeIndex(uint256)", "9029444a": "getMemberAddress(uint256)", +"90297346": "_buyFrom(address)", "9029a32b": "updateRausPoint(uint16,int256,uint16)", +"902a180a": "_emit(bytes,uint256,bytes32,bytes32,bytes32)", "902a83cd": "addReleaseAuction(uint256,uint256,uint256,uint256,uint256)", "902ab12f": "TestTest()", +"902b0753": "mine_slots_3(uint256)", "902c0dcc": "BalancesInitialised()", +"902c3211": "returnFundETH()", "902c3ad7": "LOOMIA1_ADDR()", "902c6811": "ProtectedReclaim(address,address,uint256)", "902c92b7": "playHand(uint8,uint8,uint8,uint8[5],uint8[],uint8[],uint8[])", +"902cf2b2": "getNoIndexOf64(uint64,bool)", "902d55a5": "TOTAL_SUPPLY()", +"902d6530": "extrenalRouterCall(string,address[2],uint256[2])", +"902d9e93": "getPoolBalanceBonus(address)", "902e64e5": "Oath()", +"902e7b5d": "confirmPropose()", +"902eb9f1": "approve_399(address,uint256)", "902eded3": "eip165Supported(address)", "902f1492": "registerPayment(address,uint256)", +"902f4f96": "_canChallenge(uint256,address)", +"902fc52c": "currentProfitDay()", +"9030062b": "totalLPClaimed()", "90300e38": "calNewTokens(uint256,string)", "90304341": "safeToSub(int256,int256)", +"90307ea1": "studioContracts(uint8)", "9030e40f": "totalFundRaised()", +"90316619": "lao()", "903171ae": "foundationTokenWallet()", "9031bd2f": "_buyTokensFromSeller(uint256)", +"9031d1a8": "poolDeposits(address)", +"9031d913": "getNumberOfValidators()", +"903212ff": "_getGovAddress()", +"90321e1a": "callFee()", "90323075": "TrustlessTransferStatusModified(uint256,bool)", "9032bfc8": "setDaySecond()", +"9032c0ae": "getSellPercentage()", "9032f1a9": "createBenzTicket(address,uint256)", "9033de61": "FricaCoin()", +"90340ca9": "csi()", "90347678": "numclaimed()", +"9034877b": "refsCut()", +"9034acbc": "setLocatorWhitelist(address)", "9034b427": "numDonors()", +"90351923": "liquidityGenerationOngoingbk()", +"90354872": "renbtc()", "9035b4ff": "Biniu(uint256,string,string)", +"9035d84d": "setAssetHash(string,string,bytes32)", +"9036258e": "pendingGift(uint256,address)", "9036420a": "Cosmo()", "9037ada9": "getTokenForEdit(address,string,string,string,uint256,uint256,uint256)", +"90380dcf": "getTimelocks()", +"903832f9": "unstake(address,uint256,uint8)", "903833cc": "setMemorySize(uint256)", +"90386bbf": "withdrawAllETH()", "90393fc8": "maxPerTeam()", +"903950ae": "approve_121(address,uint256)", +"90396ad5": "getDelegated(address,uint256)", +"90399467": "_details(uint256)", +"9039ddcc": "rewardDistributorBalanceOf()", "9039e01d": "newDay()", "903a3ef6": "finalizeIco()", "903a8298": "subscriptionCounter()", +"903ab6b4": "totalFundsLent()", "903b1f20": "enact_withdrawal_less(address,uint256,uint256)", +"903b432e": "G_TRANSACTION_FEE()", +"903b4d36": "activateLevelByStaking(uint8)", +"903ca8cb": "registerStakeHandler(address)", "903cc583": "calculateTokens(uint256,uint256)", +"903cd07c": "defiStableShare()", +"903cf864": "fee_info(uint256,uint256)", "903d0ac0": "publicAllocationTokens()", +"903d2799": "IsOnWhitelist(address)", "903d3340": "balanceOfFlower(address)", +"903d4296": "withdraw(uint256,uint8)", "903d772a": "addDelegatorById(uint256,address,address)", "903d9b2f": "Webrypto()", "903db106": "x(bool)", +"903deac6": "reinvestHoldingTokenAmount()", +"903df806": "getUserLockedTokenAtIndex(address,uint256)", +"903e285a": "tokenExchangeLeastRate()", +"903e4fc3": "usdcAddr()", +"903e679c": "_setLiquidationIncentive(address,uint256)", "903e95a9": "DeskToken(address)", "903f2c48": "isAuthenticating()", +"903f551d": "safeSakeTransfer(address,uint256)", +"903f6414": "flpa()", +"903f95dc": "openToEveryone()", +"903f96a6": "FeaturesRemoval(address,uint256)", "903ff4fc": "AssetDK3()", +"9040ccec": "jus()", +"90412295": "updateParameters(uint256,uint256,uint256,uint256,uint256,uint256)", "90414116": "Period()", +"90415d69": "adminKeyVault_()", +"90415da7": "swapdex()", +"904194a3": "tokens(bytes32)", "9041bdeb": "BNW()", "9041f2c8": "WithdrawProposalFund(uint256)", +"9041f582": "humanTier()", "9041f960": "manageTransferLock(address,bool)", "90427b6c": "dev4Wallet2Pct()", "9042aa27": "paymentForkIndexes(uint256)", +"9042ac61": "Redeemer(address)", "9042bbf3": "prizeClaimed()", +"9042c4ee": "migrateCoupons(uint256)", +"9042d7bb": "pendingRose1(uint256,address)", "9042dcd9": "prizeMoneyQuantity()", +"9042ffc0": "dailyPrizePoolCycle()", "90430c00": "getVersionImplementations(bytes32,bytes32,bytes32)", "90431b6e": "withdrawAllFromToken(uint256)", +"9043292a": "twapOracle()", +"904440bd": "getFastGas()", +"90444b20": "LogReferralAward(address,address,uint256)", +"904453e8": "inviteUpper1(address)", "90445e9f": "getPlayerNb(uint256)", +"9044aa7a": "thereceivertopay()", +"9045c2ac": "Unstake(uint256,uint256)", +"904622fd": "duckReceiverAddress()", +"90463458": "getfCashToCurrentCash(uint32,uint128)", +"9046ac82": "withdrawRewardsFor(address,address)", "9046fefd": "NewCurator(address)", "904740cd": "getOscar()", "9047ad74": "activateProject(address)", +"9047bf58": "employeeCount()", +"90482d72": "initialize(address[],address,address)", "90483aa1": "PowerLedger(address)", "9048816f": "resultConfirmed()", "9048f510": "createContractGame(string,uint256)", "9049681c": "addBuyOrder(uint256,uint256)", +"9049f9d2": "createPool(address)", +"904a6751": "getPassport(string)", "904a7d4c": "midasDeposit()", +"904aa216": "seizeFromStake(address,address,uint64)", "904aaf8f": "foreground()", +"904ad571": "tokens(address[])", "904adc3d": "ERC23TokenMock(address,uint256)", +"904afadf": "TimeRemaning()", +"904b3750": "mintFromOwner(address,uint256)", +"904b435c": "idnext()", "904b46a1": "NEOToken()", "904b67c2": "IcoClosedManually()", +"904b6c63": "artPurchasers(uint256)", +"904b8b66": "buyBonds(uint256)", "904bd6d0": "setTokensPerEther(uint256)", +"904c1e1f": "rp()", +"904c4339": "accurateRatioTest(uint256,uint256,uint256)", +"904c560f": "currentWinnings(address)", +"904c5747": "mint(string,string,address)", "904c6094": "contractHash()", +"904c8878": "D14()", "904cbd79": "depositCommission()", +"904cd366": "vbswapToLp1Route(uint256)", "904d2248": "betHashOf(address)", +"904d22f5": "GetMinWorkInvestor()", "904d3f47": "IADAddress()", "904d5ed6": "Update_Cash_Proof_amount(uint256)", "904da3d7": "Buyout(address,address,uint256,uint256,uint256,uint256)", "904dc85d": "providerRewardLib(address)", +"904dcdc4": "Reserved(address,uint256)", "904de64e": "TRSOffset()", +"904de7ab": "CircleSwapRouter03_init(address,address)", +"904e0c95": "buyTokenFromEth(uint256)", "904e1c88": "sales(bytes16,uint256)", +"904eee23": "hasSellerCancelled()", +"904f91dc": "getClosePremium(address,uint256)", +"904f9cb0": "lost_pm(address)", +"904ffb14": "ConvertMetToEth(address,uint256,uint256)", "90502c2e": "collectTokens(address[])", "9050b560": "obligations()", +"9050b621": "isInsuranceExhausted(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"9050c711": "leethRequests(uint256)", +"90519f6f": "collectTransferAndStakingFees(uint256)", +"9051cce9": "claimMultiple(uint256[])", "9051d18a": "tokenEnabled(uint256)", "90525c05": "devLimit()", "905295e3": "unlockAccount(address)", "9052b3d5": "_contains(address[],address)", +"9052be61": "uniswap_router()", +"905319ee": "_hashEIP712CoordinatorMessage(bytes32)", +"905358fe": "initialSupply_()", +"90539d7e": "availPrint(uint256)", "9053ef56": "onReceivePrivate(address,address,uint256,bytes)", "9053f420": "trade(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"9053f491": "liquidLockDevAddress()", "905473cf": "updateMaxJump(uint256,uint256)", "9054bbb6": "INITIAL_TAP()", "9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", "9055172d": "UVDToken()", "905529be": "startCrowdsales(uint256)", +"90552fb8": "LogN_fnc(address,bytes32,uint256,string,bytes,function,uint256,bytes1,uint256)", +"90558fe6": "commissionByHash(bytes32)", +"9055a23e": "isGenesisAddressLevel1(address)", "9055bc12": "QRToken()", "9055ffb0": "trackTreasuryToken(uint256)", +"9056273a": "CLOSINGTIME()", +"90568c90": "pendingWnrz(uint256,address)", +"9056fad6": "setLastRebase(uint256)", +"9057abeb": "depositeFund(string,uint256,uint256)", "9057bc48": "canStopWork()", "9057f289": "createListing(address,uint256,uint256,uint256,uint256)", +"90580256": "ovmCHAINID()", +"9058b95a": "defaultRebatePercent()", "9058c8a4": "setBuyFeeBps(uint256)", "9058e228": "buy(address,bytes32)", +"9059232f": "swapUniswapAndDeposit(uint8,address,uint256,uint256,address[],uint256,address,bool)", +"90592396": "help(uint256,uint256[])", +"9059447e": "queryPairListInfo(address[])", "90596dd1": "controllerBurn(address,uint256)", +"905a0edc": "join(bytes32,uint256,bool)", "905a7649": "RegisterTransaction(address,uint256)", "905a90fe": "numberImmortals()", "905ae5f5": "fechCurrentStageIndex()", +"905b1887": "withdrawWEth()", "905b7256": "_rewardLotteryWinners(uint256,uint256)", "905b8000": "CountStudentnRequests()", +"905bc3e3": "EXEC_TX_OVERHEAD()", "905bd5e4": "superTransfer(address,address,uint256)", "905bebe9": "solveProblem(uint256)", +"905c0511": "SLOT_DURATION()", +"905c4418": "setNegligibleRateDiffBps(uint256)", "905c949e": "AURIX()", "905d326c": "_newCampaign()", +"905d6a46": "addPlan(uint256,uint256,uint256)", "905dca52": "haveEitherAttribute(address,bytes32,address,bytes32)", +"905e1d41": "isDeployedByDeployer(uint32)", "905e6e42": "JSON_Test()", +"905e761d": "setETH_USDRate(uint256)", +"905e8914": "handlePegLoss(address,bool)", +"905f692e": "isInQ(address)", +"905fb6bf": "getRetainedSupply()", "9060091c": "setAmountToken(uint256)", +"906021dd": "decodeParticipant(bytes32)", "90603bdb": "getEscrowsByOwner(address)", "90604005": "cln()", +"90606acc": "usdtRewardTotalAmount()", "9060e35d": "Voronezh()", "9061a6e9": "increaseSoldSaleSupply(uint256)", +"9061a924": "multisend2(address,address[],uint256[])", "9061aedd": "fundOnContract()", "9061da22": "MANHATTANPROXYEASTENDAVE()", "9062145a": "CreateXPA(address,uint256)", +"906256d4": "SnapshotPeriod()", "906273a3": "asyncTokenSend(address,uint256)", "9062a445": "setGameAddress(address,address,address)", +"9062cb02": "changeTicketCost(uint256)", +"906320a4": "resolveFraudVerifier()", +"9063957f": "doggyIdToOwner(uint256)", "9063e860": "transferOrigin(address,uint256)", "90645840": "newHash(uint256)", "90646b4a": "setGateway(address)", +"90655478": "_getNewTCRFromTroveChange(uint256,bool,uint256,bool,uint256)", +"90657147": "initialize(address,string,string)", +"90657d79": "getBalanceBal()", +"9065f365": "SigningLogicChanged(address,address)", "9066314e": "toggleLastChance(bool)", "90664cf5": "armyAircraftCarriersCount(uint256)", +"90666232": "getEarnings()", "906686a6": "totalIssueTokenGenerated()", +"9066bd55": "current_profit()", "9066c472": "addRoyaltyReceiver(address,uint256)", +"9066d4dd": "mintCDaiWithEth(uint256,uint256)", "90676901": "stallionWith(uint256,uint256)", +"90677626": "LOG_RandomOrgAPIKeyChanged(string,string)", +"90678ae2": "tokenNCTGeneratingMultiplierByIndex(uint256)", "9067b677": "getEndTime(uint256)", +"9067d1c7": "energyInit(uint256)", "906802cf": "tokensUnlocked()", "906860d9": "Whitelist(address,address)", +"9068881f": "ShowBonus(address,uint256)", +"9068d3be": "confirmRaiseOperatorsContract()", +"9068ddf2": "miniWinner()", +"90690c9a": "upgradeNFT(uint256)", +"90693253": "getUniswapAddress()", "906a114c": "getAllMoneyOut()", +"906a1c6b": "OwnerNominated(address)", "906a26e0": "softCap()", +"906a397d": "setGreylistEscrow(address)", +"906a685e": "swapAndBurn(address)", "906ab111": "preIcoTokenSales()", "906b23be": "TOKEN_FOUNDINGTEAM()", +"906bc8a5": "returnFunction()", +"906bfb3c": "InvalidFromAddressError(address)", +"906c0a41": "getReserveCurrentVariableBorrowRate(address)", +"906c36b8": "buyArea(uint8,uint8,uint8,uint8)", "906c7c68": "internalGetApproved(uint256)", "906ca728": "viewReservedTokens()", "906d5785": "setTeamContract(address)", "906d895d": "getAvailableSeats()", +"906db9ff": "frozenTime()", "906e1ec0": "canWriteName(address,bytes32)", "906e9400": "newManager(address)", +"906e9dd0": "setMarketingAddress(address)", +"906f6343": "getAddresses(address)", +"906faaf9": "Contribute(address,uint256)", "9070222e": "getCardIdByRank(uint256)", +"90707a64": "consulta()", "9070b18d": "_getAllRevisionBlockNumbers(bytes32)", "9070e8a5": "validContracts(address[])", +"907132e8": "dailyTokensPerContract(address)", "90714770": "finalizeFirstStage()", "9072d58a": "registerPullPayment(uint8,bytes32,bytes32,string,string,address,address,string,uint256,uint256,uint256,uint256,uint256)", +"9072efe4": "CR50()", +"9072f992": "priorityDate(address)", "907316a9": "_getEarnings(address,address,uint256)", "90731848": "minPriceForNextRound(uint256)", "9073280b": "SFTPRECOE()", "9073576c": "UnfreezeAccountByTime(address)", +"9073a5f4": "amIACitizen()", "90742e52": "initsegmentation(address,uint256,uint256)", +"90743741": "__Vault_init_unchained(address,address,address,address,address,address,uint256,uint256)", +"90750d07": "transferAnyERC721Token(address,uint256)", +"9075180f": "sysAdminFunds()", "90753533": "activateMainIco()", +"907539c4": "sendTemplate(string)", "90754979": "sendPriceRequestToOracle(bytes16,bytes16)", "9075726e": "SeeSourToken()", +"9075825b": "noOfInvestors()", "9075b10c": "LogWhiteListedMultiple(uint256)", "9075becf": "multisigWallet()", "9075f124": "setAccountVerified(address)", "90762a8b": "ownerBurnToken(uint256)", "907631fc": "toBool(bytes,uint256)", +"90765279": "changeMetaEvidence(string)", "9076a38a": "getBackgroundImageCount(address)", "9076aff7": "lastBlock_a4()", "9076c166": "setAllocation(address,uint256)", +"90770fc7": "prizeper(uint256)", "9077309b": "burnSoupTokensForDay(uint256)", +"907767c0": "lastCreditBatchId(address,address)", +"90777e9f": "updateRebalancePeriod(uint256)", "90778ab9": "issueToken(address,address,uint256,uint256,uint256,uint256)", +"9077962c": "getSystemInvestLength()", +"9077d36b": "PauseToggled(bool)", "9077dcfd": "submitCoding(string,uint256)", +"9078316a": "icoPrice(uint256)", "90785418": "addPiece(string,string,bytes32,address)", +"9078767c": "removeWSZO(uint256)", "9078b596": "changePrice(bool)", +"9078c641": "verifyStaticCall()", +"9078d535": "setDualFees(uint256,uint256,uint256)", +"9078fa8e": "ReciveFunds(address,uint256)", "90795e18": "borrowInternal(uint256)", "90797634": "ident()", +"9079ae23": "SentToTeamEth(address,uint256)", +"9079f053": "setNewFounder(address)", +"907a2fec": "removeCollateral(address,uint256,uint256)", "907a37c5": "getCandidateDetailOnElection(address,address,uint256,address,address)", +"907a37c6": "houseToken()", "907af6c0": "unit()", "907b0305": "createERC20(address,uint256,string,uint8,string)", "907b270b": "priceEthPerToken()", "907b503d": "depositedToken(address)", +"907ba3f1": "isValidBooster(uint256)", "907be394": "operationsFundAddress()", +"907c0ff9": "callAddress(address)", "907c5082": "assignTeamTokens()", +"907d985b": "canDrain(address,address)", "907dff97": "_emit(bytes,uint256,bytes32,bytes32,bytes32,bytes32)", "907efd7a": "createToken(string,string,uint8,uint256,uint256,uint256,uint256)", "907f67ee": "pauseBuyback()", "907f7aa8": "cancelSellOfferInternal(uint32,bool)", +"907fd1c2": "voteForSecondParty(uint256,uint256)", +"90800538": "totalTrans()", +"90803042": "setGuessAdmin(address)", "9080345d": "Role(bytes32,address[])", +"9080936f": "getProposalState(uint256)", "9080c78c": "tixNumberforSale()", +"9080d957": "usersWhitelisted(bytes32)", "90810c77": "multivestBuy(address,address,uint256)", +"90811a8e": "AddressFrozen(address)", +"90816302": "userStaking(address,uint256)", "9081c3db": "markHours(bytes32,int256)", "90825c28": "getMarketCap()", +"90827da7": "unstaking(uint256)", "90828c78": "nextPromiseId()", "90828cdd": "getCreateMarketUniverseValue()", "90835848": "getCurrentRoundTotal()", "90836822": "DXC()", "90838e09": "totalInvested(address)", "9083998b": "TechnoBit()", +"9083e885": "approve_403(address,uint256)", "908408e3": "Initialized(address)", +"9084234d": "cumulativeSumofToken()", "90843cd9": "fetchAllCreatedOrders()", "90843d04": "numIncrement()", +"9084c181": "initiateFailsafeOwner(address)", "9084f1f9": "closeMotion(uint256)", "90855c31": "ACT(uint256,string,string)", +"90855fc1": "underlyingBorrow()", +"9085b10c": "changeMachineUri(string)", "9085b77f": "allowed(address,bytes32,address,bytes4)", "9085e88d": "giveBlockreward()", "90862d1b": "unfreezeTokens(address)", "908687a9": "Simoleon()", "90869e9f": "getMartialNumber()", "9086de3b": "isWhitelised(address,address)", +"90870492": "rewardRatePerBlock()", +"9087e92f": "TokenTransfer(address,uint256,uint256)", +"90883c08": "_authorizdedMachines(address)", "90888aa1": "StakeObjects()", +"90890809": "Deposit(address,uint256,uint256)", "908921fc": "ceo()", "90895e1c": "setAllocatedToken(address,address,address,uint256)", +"9089add8": "requests(uint256,uint256)", "9089e0c2": "UnicornCoin()", "9089f616": "removeClient(address)", +"9089fcbd": "addNewERC20Token(address)", "908ab6a5": "roleHash(address,bytes32)", +"908ad10a": "UNSTAKE_LOCK_TIME()", "908b8cfc": "withdrawOperationalExpenses()", +"908bb723": "createContractNumber(string)", "908c3a6a": "tokenUserCounter()", "908ccc5e": "numberOfRecordEntries()", +"908d169b": "makeTransactionId(bytes,uint256)", "908d16de": "BountyAgentChanged(address,bool)", +"908d377c": "bookMakerAddress()", +"908d9a26": "setAdminState(uint8)", "908da4e8": "timeTier1()", +"908daf4c": "uploadReceipt(uint256,bytes[],string[],uint256[])", "908dd411": "getFundAlterations()", +"908de68b": "isSenderAddressRelates(bytes32[])", "908e049b": "destory(uint256)", +"908e0784": "getVoteBalancesList()", "908e2d2a": "maxCoinCap()", "908e2f06": "mails_to_deliver()", +"908e3b37": "getPoolToken(address)", +"908e3c93": "changePassiveAirdropAmount(uint256)", +"908e667f": "Unstaked(address)", +"908f4cc8": "divPoolRecords(uint256)", "908f68ee": "unrespondedCnt()", +"908fd768": "pool_burn(address,uint256)", "909006fc": "setDirectOffersComissionRatio(uint256)", "90900df4": "addDebt(bytes32,uint256)", "90905360": "setDividendsPercent(uint256)", +"90908584": "addBallot(uint256,uint256,string[])", "9090ce1f": "CANCELATION_DATE()", +"9091038a": "retrieveRewardAmount(uint256)", "90912d09": "pausingMechanismLocked()", +"909151b5": "nicknames(address)", +"9091962e": "updateTimedOutRoundInfo(uint32)", +"90919b2b": "purchase(bool,bool,bytes32,bytes32)", +"9091bb4a": "distanceArr(uint256)", +"9091f97c": "movieIndexToApproved(uint256)", "9092b623": "PotOfEther()", "90935301": "setCryptaurReserveFund(address)", "90938792": "canVoteAs(uint32,int256,address)", +"9093897b": "test_staking()", "9093bc3d": "addCoins(uint8,uint8,uint256)", "9093f5d1": "ReverseBugBounty()", +"90944eea": "getblockShift()", +"90949747": "ballotOfficialAddress()", "90949f11": "getNumberOne()", "9094b22f": "setAttribute(address,address,string,bytes,uint256)", "9094c763": "vote(uint32)", +"9094fd50": "setContract(address,string,string)", "9095269d": "mintExtraTokens()", "909540cb": "ERC165()", "90954483": "createLandmark(string,address,uint256)", "90957363": "removeFromFutureExpanstionMap(address)", "9095b2cd": "IPcoin()", "9095df68": "library2function()", +"9095ec45": "invest(address,uint256,uint256[])", +"9095f225": "storeSomething(string)", +"9096a09e": "setTeamRewardMin(uint256)", +"9096a66b": "challenge_failed(uint32,uint32)", +"9096e5c1": "reset(address,string)", "90971fea": "ecrecoverWrapperView(uint8,bytes32,bytes32)", "90972e89": "LogReceivedEther(address,address,uint256,string)", +"909744ae": "enableSpender(address,address)", "90974795": "getall()", +"9097548d": "cost(uint256)", +"90978d1b": "isIdentifierSupported(bytes32)", "90979943": "IRB()", +"9097da77": "LEEversion()", "909862b7": "updateSalary(address,address,uint256)", "9098f074": "buyServiceByAdmin(uint64,uint64,address)", +"90993b64": "accountPublicSale(address)", +"9099e780": "whitelistAddressAdd(address)", +"909a1ef7": "certifyWork(uint256)", +"909a8b46": "bondFundAllocationRate()", +"909aa95b": "mineUNI(address,address)", +"909b30f1": "farms(address,uint256)", "909c36b5": "newEntry(bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"909c57d5": "Log(uint256)", "909c9fca": "reclaimExpiredSwaps(bytes32,bytes32)", "909d22c7": "many_cryptobanks()", "909d2cc1": "hasTeam()", "909d3bc9": "isIdle(address,uint64)", +"909d3f4c": "setEarnLowerlimit(uint256)", "909d6877": "preSaleLimit()", +"909d814b": "transferGovernance(address,uint256,address)", "909e4ab6": "getLog()", "909e8f92": "unlockFirstPrivate()", "909ec524": "KyberAirDrop(address)", "909f2c3a": "ChangeNumber(string)", "909f617e": "fill(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"909fb78a": "getAllBNB()", +"909fe3f6": "signInstance(string)", "90a08e70": "balanceOfUnclaimedGoo(address)", "90a0a2ab": "GetPriceOfTroops(uint256,uint256,uint256)", +"90a11403": "updateAirdropFee(uint256)", +"90a12073": "awardInfoOf(uint256)", "90a1d580": "TSTEST2()", "90a2005b": "transfer(bytes32[])", "90a251da": "createNewTankWeapon()", "90a25f28": "WeBetCrypto()", "90a2e1ef": "emergencyReserve()", +"90a38234": "GuardianOfferAccept(uint256,uint256,address,uint256)", "90a3d87e": "addLanguage(string)", "90a4d287": "bovBatchDistributed()", +"90a51386": "checkCurrentPrediction()", "90a53085": "votesCountByOperation(bytes32)", +"90a587b5": "stakingFeeToCharge()", "90a59ea1": "BasicAccountInfo(uint8)", "90a5c7af": "Lesson_1(address,uint256)", "90a6267a": "canRescue(address)", "90a650e8": "UpgradeAgent(address)", +"90a6f5a9": "getIn()", "90a70139": "pauseTransfer()", "90a72a3f": "FundingCapSet(uint256)", "90a744fe": "BossCoin()", +"90a79368": "swapOwner(address)", "90a7ba5b": "ticketsPurchased()", +"90a7f9d1": "ringTelephone()", +"90a83dc2": "setStrategy(address,address,uint256)", "90a85119": "checkBetResult(uint8)", "90a897c6": "frozenAddress(address)", +"90a96757": "rewardRounds()", "90a971a8": "setPI_edit_27(string)", "90a9cc02": "namiPresale()", +"90a9dcdf": "pushedEthDivs()", "90aa2185": "dailyCount()", +"90aa63ff": "burnDivisor(address,uint256)", "90aa835c": "IsAuthorityAddress(address)", +"90ab0885": "isRepresentativeOf(address,address)", +"90ab4898": "averageBlocktime()", "90ab54dc": "configureMigrate(bool,address)", +"90ab67e1": "sellMulti(address[],uint256,uint256,uint256[],uint256[],uint256,uint256)", "90ab7d34": "deployRuntimeContract()", +"90abb4d9": "setCanOpenLoans(bool)", "90abcb08": "TronyCurrencyContract(uint256,uint256)", +"90abd610": "roboTokens(address)", "90ac11a3": "designs(uint256)", "90ac1866": "setMinGasPrice(uint256)", "90ac3f4c": "_getTokenAmount(uint256,address)", +"90ac6d7a": "getSpd(uint256)", "90ac7588": "profitsLockedUntil()", +"90ac8cc2": "setnxcAddress(address)", "90acc740": "transferCompanyTokens(address,uint256)", "90ad304f": "ContractOwnershipTransferred(address)", +"90ad688b": "getCommunityFee()", "90addc9a": "calculateMyRewardMax(address)", "90ae144e": "swap_able()", "90ae631d": "assignAll()", "90ae6863": "gyCF()", "90af1333": "allBoxNumbers()", "90afca4c": "addPhases(uint256,uint256,bool,uint256,bool)", +"90afee7d": "findFreeWorkingReferrer(address,uint8)", "90b0636f": "rapidGrowthProtectionmMaxInvestmentAtNow()", "90b06593": "landClaim()", +"90b0722e": "setPowerUpFee(uint256)", "90b08a52": "getSendAmount()", +"90b0bea2": "automatedAttack(address)", "90b0e078": "discountTime()", "90b17f99": "directPaymentThreshold()", +"90b1e8f7": "earned(uint256,uint256,uint256)", "90b22d03": "set_parameters(uint256,uint256,uint256)", "90b25207": "GoogleChainToken(address)", "90b26043": "NameRegistered(address,uint256,string,uint256)", +"90b27fc2": "maxState()", "90b2ae49": "verifyDeployment(address,bytes32)", "90b2ce6f": "mvnpereth()", "90b30251": "is_finalized()", "90b3195f": "SHAREPERIOD()", "90b398ff": "SetFreeGWT(uint256)", +"90b3c464": "setRebaseDownAmount(uint256)", "90b3d963": "trade(uint64,uint64)", "90b4cc05": "mintAdvisorTokens()", "90b4cc72": "numTransactions()", "90b5561d": "insert(uint256)", +"90b5bb88": "updateChronos(address)", "90b5e6d9": "presaleFinished()", +"90b62297": "decomposeLand(uint256)", "90b625f9": "stockSellOrder(uint256,uint256,uint256)", "90b67185": "setPrivilegeState(bool)", "90b6b209": "bonuses()", "90b6f7e6": "RashidToken()", "90b7ddd7": "t02_createContractMac(bytes32,bytes32)", "90b7df75": "addAuthByPhone(string,string)", +"90b7e321": "CreatedDepositEvent(address)", +"90b8022e": "lpClaimUnlockedRate()", +"90b8ed81": "setGasFactor(uint256)", "90b98a11": "sendCoin(address,uint256)", "90b9be4a": "RetailerManager(address)", "90b9c31a": "purchaseFinished()", +"90b9d412": "getGithub(uint256)", "90ba0e6c": "getNumOfBettersForMatchAndPrice(uint256,uint256)", "90ba34cc": "refundClaimAddress()", +"90ba8307": "isMarketMinted(address)", "90baaa5c": "checkPoolEnd(uint256)", +"90bb1735": "timeBoundSaleLimit()", "90bb5ad0": "Eth2USD(uint256)", "90bb6153": "withdrawTokenBalance(address)", "90bb807e": "getVolumeDiscountsCount()", "90bc1693": "burn(uint128)", "90bd301e": "_validCharm(string)", +"90bd849e": "_rateIsStaleWithTime(uint256,uint256)", +"90bd8711": "removeFreeCurrency(string)", "90bdb275": "costOfTxShares()", "90bde517": "getUser(address,address)", "90be0bd9": "enableAuthentication()", +"90be10cc": "getWithdrawableAmount()", "90bee6aa": "getTransformRate(address,uint256,uint256)", "90bf0301": "changemp(address)", "90bf348f": "crowdSaleMinAmount()", "90bf495d": "tokensReleasedToEarlyInvestor()", "90bf693b": "logoFee()", "90bf87a3": "setRestriction(address,uint256)", +"90bfaf40": "onAddition(uint256,uint256,bytes)", +"90bfe73c": "KSCBurnFrom(address,address,uint256,string)", +"90c02273": "acquisitionEscrows(uint256,address)", +"90c0bfa7": "refPercent(uint256)", "90c1288e": "setAddressF1(address)", +"90c1c979": "getCirculatingEth()", "90c2365e": "_addWeiAmount(uint256)", "90c26736": "countRecommendFund(uint256)", +"90c2f87b": "exchangeERC20ToLBT(uint256,bytes32,uint256,uint256,uint256)", "90c32295": "bountySent()", +"90c3832d": "WITHDRAWAL_SIZE()", +"90c39daa": "riskOk(uint256)", +"90c3a1a1": "TheBigBurnTime()", "90c3a370": "AuctionMaster()", +"90c3e8bf": "jackpotFactor()", "90c3f38f": "setDescription(string)", "90c40776": "donotIronDappToken()", +"90c416b2": "holders_eth_balance()", "90c459a3": "lnLimited(int256,int256)", "90c46985": "calculate_difficulty_attempt(uint256,uint256,uint256)", "90c4ce57": "getReportingWindow(uint256)", +"90c510cf": "deprecated_unlockStakerUnlockableTokens(address)", +"90c582cd": "saleEndedEarly()", +"90c5e79b": "newExec(string,uint256,address)", "90c6087b": "_getName(string,uint256)", "90c6b18a": "CreationTime()", "90c6d1b9": "SetFreeTokens(uint256)", "90c79af9": "startAcceptingFundsBlock()", +"90c7f9f5": "OrderApprovedPartOne(bytes32,address,address,address,uint256,uint256,uint256,uint256,address,uint8,uint8,uint8,address)", "90c8a72d": "sendOwnerShares(address)", "90c8abd3": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", "90c985a1": "buyCertificate(uint256)", @@ -82750,74 +151442,132 @@ "90ca20e5": "init_wallet(address[],uint256,uint256)", "90ca27f3": "vote(string,uint8)", "90ca38d9": "setAdvisorsTokens(uint256)", +"90ca46d6": "OracleFundsWithdraw(uint256)", +"90ca796b": "allocate(uint256)", "90ca9dbf": "getGradeByQuailty(uint16)", "90caa2b4": "getFreezeUntilDetails()", +"90caaeaf": "setConvertFee(uint256)", "90cad537": "poolMintRate()", "90cb04e1": "buy(string,uint256,uint16)", +"90cb0db4": "dfgVaultKey()", "90cb4854": "createTokens(address,uint256,uint256)", "90cbcf92": "getFibonacci(uint256)", "90cbfa19": "abort(address)", +"90ccc8ad": "getMintablePower(address)", +"90cccda0": "rateWillBeSet()", "90ccdafb": "increaseArrayOfBeneficiariesBalances(address[],uint256[])", "90cd0d06": "registerApproveRequest(bytes32,bytes)", +"90cd1ca4": "FARMING()", "90cd5860": "VehicleRTO(address)", "90cd6170": "getActiveSkin(address)", "90cd8020": "licenseTermsMinCostPerSec(bytes32,bytes32)", "90cddcc5": "getEpisodeDetail(uint256)", +"90ce1280": "stakeReward(uint256,address)", +"90ce34ec": "deployRange(address,uint256,uint256)", "90ce9e5b": "getPreIcoInvestorsAddressesCount()", +"90ceff30": "rewardRefPct()", "90cf3fed": "AKAIITO()", "90cf581c": "voteYes()", "90cf72de": "_getCommonPlusRarity(uint32)", "90cf76fa": "bundleOfOwner(address)", "90cf7ab4": "existsUser(uint256)", "90cfce5a": "setgetgoods(uint256)", +"90d09369": "rewardRateChanged()", +"90d09c4a": "upTotalSupply()", +"90d0d2bf": "setInvestmentRate(uint32)", "90d16b30": "resolveDisputeBuyer(address,string)", "90d19241": "_removeAddress(address)", +"90d19c65": "approve_745(address,uint256)", "90d1c593": "Summary(address,address[],address[],address[],uint128[])", +"90d1c966": "root_user()", +"90d1cb00": "getMemberShare(address,address)", +"90d1f66f": "getFastGasPrice(address)", +"90d209ca": "pledgeStake(uint256,address,uint256)", +"90d226d4": "registerAlias(string)", "90d22eeb": "setIcosMinLimit(uint256,uint256)", "90d240c6": "get_data(uint256,uint256)", +"90d26a10": "busdToBnbPath(uint256)", "90d28075": "getBasketArranger(address)", +"90d2c724": "setProgram(address,uint8,uint8,uint8)", "90d2cd5c": "getCurrentUserBigPromoBonus()", +"90d2e604": "bsharewbtcInitialBalance()", "90d2f727": "signedApproveAndCallCheck(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", "90d370ba": "canReceive(address)", +"90d3b202": "yourGLXYLpBalance(address)", "90d49b9d": "setFeeWallet(address)", "90d4bcc0": "inject()", "90d4bd45": "wetCoin()", +"90d4c9ce": "gt_()", +"90d4f806": "_CROWDSALE_ADDRESS()", "90d58a70": "tgrCurrentPartContributor()", +"90d61230": "buyByETH()", "90d61290": "traded(address,uint256)", +"90d62479": "calStaticProfit(address)", "90d63e5d": "addAuthor(bytes)", "90d68bb6": "getCallTypes(uint256)", "90d6b45f": "kyc()", "90d783bb": "BEEFJERKY(address)", +"90d7c13c": "getArbitratorDataListCount()", +"90d7c530": "setTriggered()", +"90d7ea11": "verifyProof(bytes32,uint32,uint32,bytes,bytes32[],bytes32[],bytes,bytes)", +"90d7f2e0": "updateUniswapTwap()", +"90d7f8c5": "wipeBlackAddress(address)", "90d83301": "SPAM()", "90d8a4be": "badge(bytes)", +"90d8b08a": "BuyTokens(address,uint256,uint256,uint256)", +"90d95463": "withdrawCheck()", +"90d976e2": "getUserAddress(uint256)", +"90da6358": "calcUsdtToKf(uint256)", +"90da79d4": "getDonationAddresses(address)", "90da7c3c": "isGeneMixer()", "90daaf67": "getMinimalDeposit()", "90db2aa9": "SellOrder(uint256,address,uint256,uint256,uint256,uint256)", "90db623f": "increaseApprovalAndCall(address,uint256,bytes)", "90db78f9": "crowdsaleInfo()", +"90dbc6b2": "RGB_Ratio(address)", "90dbf4fc": "getRequestBaseInfo(uint256)", "90dc0636": "GetHoldersCount()", +"90dc129d": "contributionPercent()", +"90dc682f": "getTotalStakedReflection()", "90dcba22": "addressPeople()", +"90dcbf6e": "getRaffles(uint256[])", "90dd027e": "migrateFrom(address,uint256,uint256,uint256,bool)", +"90dd16af": "setTokenClaimBack(address,uint256)", "90dd2395": "listPrycto6()", +"90dd2627": "transfer(uint256,uint256,uint256)", "90dd9d17": "perSaleWithDrawal()", "90de4495": "dive5(address)", +"90de6871": "dailyData(uint256)", "90de8234": "adminMode()", "90de9ed9": "TOKEN_SALE_CAP()", +"90debcfe": "CPUcontract()", +"90df1000": "replaceManager(address,uint256)", "90df44b4": "addDocument(string,string,string,string,uint256,uint256)", "90dfb092": "privatePresale()", +"90dfbe83": "transferTokenV(uint256)", +"90e05eed": "gi()", +"90e0661b": "removeLockedBalance(address,uint256)", +"90e0d0c4": "UntokenizeRequest()", "90e10134": "burnAdminApproval()", "90e10250": "setCreated()", +"90e14899": "TOKEN_TRANSFER_PROXY()", +"90e1a003": "gFees()", "90e1de68": "allowedForwards()", "90e2160a": "setMaxUpdates(uint256)", "90e2b94b": "t0special()", "90e2d4cc": "refreshLockUpStatus()", +"90e2d7c2": "savePON_IALForPersonId(address,string,string)", +"90e2f537": "vineyardEndorsements(bytes32,uint256)", "90e33e9c": "totalDDTforInterest()", "90e3c278": "getShares(uint256[128])", +"90e3eacd": "readContractDetail(uint256)", +"90e41319": "rateEnterPosition(uint256,bool)", "90e47957": "erc165InterfaceSupported(address,bytes4)", "90e4a130": "getMyDonations()", +"90e4efdc": "setup_limitICO(uint256)", "90e50ba7": "registerAltPurchase(address,string,string,uint256)", "90e517e7": "logoY()", +"90e563b3": "tokenReserve(uint256)", "90e575f5": "auctionEnds(string)", "90e57cac": "confirmProposalAndTransferFunds(uint16,uint16)", "90e5e12a": "existenceTransferTest(address)", @@ -82828,86 +151578,181 @@ "90e7a074": "codexStakeContract()", "90e8265d": "tierDuration(uint256)", "90e8317c": "rateWorkerSkills(uint256,address,uint256,uint256,uint256[],uint8[])", +"90e8d82f": "emergencyERC20Drain(address)", "90e8edd8": "JincorTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", "90e8f758": "liveEtherSportCampaign()", +"90e8f7c9": "check_claimable()", +"90e95c11": "_uniswapExchangeRate(uint256,address[])", "90e99b09": "finishRestore()", +"90e9a354": "_getRequiredCollateral(address,address,address,uint256,uint256)", "90ea0fb8": "isSignedByEugene()", +"90eaab0f": "fdTariffIdToFdTfIdIndex(uint256)", +"90eabbc0": "BurnerRemoved(address)", +"90eb1f9f": "gift(uint32,address)", +"90eb3b5e": "registrarDocumento(bytes32)", "90eb9632": "PROMETHEUS_PRICE_INCREMENT()", +"90ebb005": "onWithdraw(address,uint256,uint256,uint256)", "90ebed43": "getNumberOfCourses()", "90ec028d": "LogPollCreated(bytes32)", "90ec57f1": "Approve(address,uint256)", +"90ec71bd": "sweepEther()", +"90ed1bca": "tokenremove(address,uint256)", "90ed6bf4": "startWithdraw()", +"90ed991c": "changeENSManager(address)", +"90eda01b": "updateUnits(uint32)", +"90edd058": "getLiquidationAmount(address,address,address)", +"90edf278": "_updateRewardsToBeAccredited(uint256,uint256,uint256)", "90ee2ec2": "FCCPlaceHolder(address,address,address)", "90ee4331": "getStartClaimDate()", +"90eeb02b": "currentRootIndex()", "90eed0ce": "SetCert(uint32,bytes32)", "90eede26": "COMM_ADDR()", "90ef08a1": "getdrawtoken(address)", +"90ef77c5": "testInvestorCanAcceptSale()", +"90f039db": "getAvgReleaseRate(address,uint256)", +"90f05f15": "roboPercentageForYieldImprovements()", "90f08b32": "contract2Address()", "90f098bb": "setFeeTake(uint256)", "90f0a5bd": "BecomeTadpolePrince()", "90f0dbd5": "CRSAllocation()", +"90f0ddef": "checkLynAmount()", "90f0f4f4": "ReserveFundAmount()", "90f0fef0": "test2ContractVote()", +"90f10acf": "depositERC20Token(uint256)", +"90f1776a": "getCreateRole()", "90f1d909": "Ixellion()", +"90f1f17b": "tokenInfos(bytes32)", +"90f1f758": "Add(uint256)", +"90f24355": "Ting()", "90f25eb3": "getPercentages()", +"90f28d0a": "lastInvestedTime()", "90f2c86d": "convertToWei(uint256,string)", +"90f2ca87": "redeemThreshold()", "90f2dc88": "getObjClassId(uint64)", +"90f3173b": "lockForever()", +"90f32460": "maxSink()", "90f3b693": "initialIssueMinted()", +"90f3db4c": "handoverMomoMintage(address)", +"90f3dd33": "updateTokenToEthOrderWHint(uint32,uint128,uint128,uint32)", "90f3deb1": "getTeamUnlockAmountHelper(uint256)", +"90f46099": "Referral(address,address,uint256,uint256)", +"90f4930a": "getDepositEtherPool(address,address,uint256)", "90f4c33a": "transferSaleWallet(address)", "90f4d2fd": "checkMaxCapReached()", +"90f4ebda": "_lockToken()", "90f50cd9": "setPromo(address[],uint8[])", "90f52ade": "LOTT()", +"90f536e4": "_setMaturityPrice(address)", +"90f54143": "lineMerkleRoot()", "90f549ba": "getLockCountForAddress(address)", "90f551ec": "offerBtcFromApp(address,uint256)", +"90f5696a": "createStoreFactory(uint256)", +"90f58c96": "upgrade(uint16)", +"90f5ad5e": "PonziSold(address,uint256,uint256,uint256,address)", "90f5c2ca": "canRef(address,address,uint256)", +"90f5efcc": "_dropDefi99Market(address)", "90f5f99d": "DHUBTest()", "90f6b2b3": "getInvestorByValue(address,address)", +"90f70508": "getDaysWithFunds(uint256,uint256,address)", +"90f712fe": "AxieRebirthed(uint256,uint256)", +"90f78adb": "getDelayable(uint256)", "90f81702": "BaseToken()", +"90f862a6": "approve_22(address,uint256)", +"90f87f7c": "doDeposit(uint256,uint256)", "90f8c118": "hyip()", +"90f93c9e": "setZGov(address)", +"90f94646": "LogBid(address,address,uint256,uint256)", +"90f96035": "phase2TokenPerBlock()", "90fa17bb": "constructor()", "90fa337d": "storeBlockWithFeeAndRecipient(bytes,int256,int256)", +"90fa416d": "getGetMaxMiddle64()", "90fa775e": "_calculateInflationBonus(uint256,uint256,uint256)", "90fa8910": "GetBasePrice(uint256,uint256)", +"90fa97e2": "depositToSnatchPool(uint256)", "90faa3e9": "setPrice(string,uint64,uint8)", "90fab7ce": "just50Send()", "90fad1e6": "remove_from_whitelist(address)", "90faeb62": "DolarToday()", +"90fb1510": "lastFreeParent()", "90fbf84e": "trustedFeeWindowTransfer(address,address,uint256)", "90fc2a32": "CaptainGameConfig()", +"90fc6a48": "sourcesCount()", +"90fccb0a": "updateMonthlyConsumerDB(string)", "90fcf551": "getTRIOs()", +"90fd02cc": "dono(string)", "90fd4300": "releaseState4()", "90fd53ec": "farmTile(uint8,uint8,int8)", "90fd5452": "blockState()", +"90fd62bb": "ACTION_EDIT_LIMIT()", "90fd67fc": "setDepositAddressVerify()", +"90fdc9a9": "redEnvelopes()", "90fdf36b": "_vouchersToWei(uint256)", +"90fe18eb": "pickTimesAwardTotal()", "90fe5609": "startVoting(uint256,uint256)", +"90ffa552": "currentSavingsIndex()", +"91002e2e": "currentPaymentId()", +"91006671": "totalActiveAddressCount()", "91006745": "isAdmin(address,address)", +"9100ce1b": "cancelCommitment(bytes32)", "91014fcc": "_updateWhitelist(address,uint8)", "91019db2": "getSellerTransaction(address)", +"91022f8c": "tqTransferOut(address,address,uint256)", +"91027180": "clearZ00M()", "9102bcc8": "Teacher(address)", "91030cb6": "lockPercent()", "9103321d": "TOTAL_TOKENS_AVAILABLE()", "91039c83": "updateEndTimeManually(uint256,uint256)", +"9103a0e0": "DEVELOPER_ROLE()", "9103cfb6": "TheophanesToken()", "9103e368": "winnerTimestamp()", +"9103edef": "setMinRequiredSnapshotId(uint256)", +"91044a22": "cancelTerminationRequest(bytes32)", "9104b6f4": "getPendingWalletFeeData()", "9104c316": "internalBurn(uint8,address,uint256)", "9104dbd2": "_createCompany(string,address,uint256)", +"9104f21e": "setAuthorisedToken(address,bool,bool)", "91051e06": "poolWithdraw()", +"91052816": "STAKING_ROLE()", "910545ff": "TOKEN_PRESALE()", +"9105533c": "sendSuccessSeq()", "91057f53": "ERC20TokenCPN()", +"9105cd82": "teamRewardsrate()", +"9105d17a": "getSeedIds()", +"9105d9c4": "COMPOSITE_PLACEHOLDER()", "91060168": "fetchString(address,bytes4,bytes32)", +"91067d2e": "blacklistSellFee()", +"9106babe": "SetUserNamePrice(uint256)", "9106d7ba": "totalSold()", "910887bc": "setPublisherCut(address,uint256)", +"910902b0": "refund(address,address,bytes32)", "91093ba4": "setUintF1F2(uint256,uint256)", +"9109b146": "commitWhitelist()", +"9109de11": "Mint(address,uint64)", +"910a12a7": "isEndpointRemoved(uint64,uint64)", +"910a326d": "accountMergingDuration()", +"910ab259": "savedChickenOf(address)", +"910b79d3": "daicoManager()", +"910bdf1c": "buyAndBindParent(address,address)", +"910bfecc": "indexedGrants(uint256)", +"910cab11": "allowanceTarget()", "910cbda6": "buyTokensFor(address,address)", +"910d13e8": "super()", +"910d44a9": "getPagePoolInfo(uint256,uint256)", "910d52ea": "getPaperFee()", +"910d6770": "setAndEditPhaseTime(uint256,uint256,uint256)", +"910d8574": "updateSaleRate(uint256)", "910eba1d": "buyBonds(address)", +"910efae8": "withdrawNft(uint256)", "910f3b52": "bidFromEtherScrolls(uint256,address)", "910f5b81": "preIcoStartTime()", "91104f82": "bountyTokenAmount()", "911058df": "setMockedNow(uint256)", +"91106d78": "metaTransfer(bytes,uint256,address,uint256,uint256)", +"9110c84c": "forceclaim()", +"9110df85": "lend(uint256,uint256)", +"91115fb7": "getData(uint256,uint256,uint256,address)", +"91116d67": "addTransferFeeAddress(address)", +"9111abeb": "set_Locked(bool)", "91125fb7": "thirdWeekBonus()", "91127c1f": "_clearApproval(address,uint256)", "91136d3f": "Settlement(uint8,bool)", @@ -82917,22 +151762,30 @@ "911475cc": "incNonce()", "91147dfa": "restoreContract()", "91149e85": "resetOfferingStatus()", +"9114bde8": "ganador()", "91152c5c": "airdropTokens()", "911550f4": "getBetterOffer(uint256)", +"911566f0": "FiveYearsBondCount()", +"91158572": "updateAsyncOracleAddress(address)", "9115abf4": "getDetails(uint256,address)", "9115ca43": "getPayerString()", "9115e9ee": "ExtractEtherLeftOnContract(address)", +"91163098": "getAmountOfUsers(uint256)", "911644fa": "maxIceDragonsCount()", +"91168197": "REIGAI12()", "9116ee03": "testHasCorrectPriceForStages()", "91174790": "addEvidence(bytes32,uint256,bytes32)", "91174cb6": "roundnum()", "91176f39": "presaleUnlimitedStartBlock()", "91177db4": "batchTransferFrom(uint256[],address,address)", +"91179509": "claimRewardsOnlyAndStake(address)", "9117c6df": "balanceOfReadable(address)", "9117e32e": "expireOf(address)", "91184159": "getOptionHash(address[3],uint256[3],uint256[2],bool)", "9118575a": "setTokenSale(address,address,uint256)", "91194aab": "tixFoundersDeposit()", +"91199d89": "numberCombustToUpdate()", +"9119a8d5": "realizedVolatilityDaily(address,uint256,address)", "9119e5fb": "submitTransactionWithSignatures(address,uint256,bytes,uint256,uint8[],bytes32[])", "911a40c9": "ARPToken()", "911a56bc": "totalSupplyWithZeroAddress()", @@ -82940,62 +151793,112 @@ "911a9ac0": "preSeasonGame()", "911adc1a": "pay(address,uint256,bytes)", "911b5f4e": "sub(uint64,uint64)", +"911b8b4e": "storeRoot(bytes32)", +"911c9874": "setCustodian(uint256,address)", "911cec25": "getMountTokenIds(address,uint256,address)", +"911d0004": "getScriptAtIndex(uint256)", "911d0189": "minJackpot()", "911d3101": "escapeFreeze(uint256)", "911d731a": "DWBTToken(uint256,uint256,uint256,uint256)", "911d84cb": "updatePlayerRecommend(address,address)", +"911dff34": "changeVaultratio(uint256)", +"911e8bc6": "nomineeWithdraw(address,uint256)", "911eb255": "approvePromise(address)", "911ef2e9": "Voted(uint256,bool,address,uint256)", "911ef508": "pausedTimestamp()", "911fa5c9": "totalTokenSellAmount()", "911ff22b": "EthereumRateUpdated(uint256,uint256)", "911ffbdb": "lastRewards(address)", +"91200209": "withdrawForUser(address,uint256)", +"9120b52e": "recordNetworkReward(address,address,uint256)", +"9120dc4c": "maxInterestRateLength()", +"9120de04": "ChangeUpgradeAgent(address)", "91214841": "usdraised()", +"9121d9b5": "setTransferDiscountAmount(uint256)", "912221d5": "tokenCost()", +"91223908": "queryCreatedValidatorCount()", +"91223d69": "authorities(address)", "9122acd8": "KUYCToken()", "912308dc": "withdrawToInvestor()", "91240f44": "getReferee(address)", +"91242c13": "addEtherInPlan(uint256,bytes16,uint128,uint128,uint256,bool,bool,uint256,bool[],bool,uint8)", +"912475ba": "dices(uint256)", "9124f1cf": "getOrderHash()", "912525f4": "WideEnergy()", "91256ed0": "freezeMustCalculate(uint256)", "9125ecf1": "bountyVaultAddr()", +"9126056a": "createRace(uint32)", +"9126859e": "updateServicePoolsWeight(uint256,uint256)", +"9127afb1": "CASH_GROUP()", "9127bc2a": "FOUNDERS_TOKENS_LOCK_PERIOD()", +"9127cc69": "setCreatorAddress(address)", "9127d3d7": "EXPECTED_TOTAL_SUPPLY()", "9127da7e": "RRcoinToken()", "912875bc": "ICO_PRICE6()", "91287962": "artworkRegister(address)", "9128bbc6": "Tanaka()", +"91291532": "changeTokenPriceInCent(uint256)", +"91292739": "voterServiceIndex(address,address)", "91294ed1": "minContributionWei()", +"91296f68": "updateFContracts(uint256)", +"912a9885": "updateCodeAddress(address)", +"912b0392": "weiPervSPACEXTWAP()", +"912b0eda": "withdrawDepo()", +"912b1695": "TxDeleted(bytes32)", "912bcb79": "betGame(uint256,uint8)", +"912c1555": "calculateDividends(address)", +"912c2673": "totalOf(address)", "912c3fbf": "EYToken()", "912c8b75": "claimGold(uint64,uint64,uint64,uint64)", +"912cb9ca": "NNewRecps(address)", +"912ce8c3": "_activeAddress(uint256)", +"912d1a86": "setMinDeposit(address,uint256)", +"912d342b": "bountyIdToBounty(uint256)", "912d6e28": "approveTokens(address,address,uint256)", +"912d6eb6": "transferRewardTokens(address)", "912de8de": "fixBalance()", +"912e17f6": "getDataSize(uint256)", +"912e4d0c": "verifyKycEvent(address,uint256,bool)", "912eb6d9": "amountOfUBOsold()", "912ee23d": "SaleStarted()", +"912f061f": "acceptUpgradeRequest(address)", +"912f137e": "adminSetLogic(address)", "912f6ba4": "getAtheniansOnTheBattlefield(address)", "912f6c71": "IssueIQTToken()", "912f952f": "Ulti()", +"912fdfcb": "linkMySponsor(address)", "912ff8f6": "getServerState(uint256)", "91301852": "CyberClassicToken()", +"91304950": "addPosition(address,address,address,uint256,uint256,uint256,uint256,uint256)", "91304f1f": "isKYCRequired()", "913093aa": "initialSupply(address)", +"91314dde": "GetMyInvestmentIds()", "913158f7": "getIsland(uint256)", "91318874": "setRates(uint32,uint32)", "9131d803": "testSetFrontend()", +"91323e50": "hashedBlocks(uint256)", "91324514": "InfiCoin()", "91324bea": "EscrowContract(address,address,uint256)", +"91326203": "myDelegate(address)", +"91327ec6": "pp()", "91329493": "charityCount()", +"9132b55b": "colorResolve()", "9132b81d": "VotingStarted(address,uint256,uint256)", "9132c26c": "calcSELLoffer(uint256)", "9132dfca": "CATA()", +"913377cc": "continueSelling()", +"9134709e": "buyToken(uint256,address)", +"91353a0c": "CompleteBuyFailedError(uint256,uint256)", "913579b6": "updateWhiteListImplementation(bool)", "913594ae": "JETUSA()", "9135ac08": "addInInitialSupply(uint256)", "91361f64": "getRankPriceCandy(uint256)", +"9136616a": "removePToken(uint256)", "913683fc": "IODTOKEN()", +"91369bae": "startSaleRBX(uint256,uint256,uint256,uint256,uint256)", "9136d392": "KothWin(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"913701b6": "getUserRate(address)", +"91371611": "setBeneficiaryForCashflowId(bytes32,int8,address)", "91373711": "stopFlagOff()", "9137471b": "setGoldBought(uint256)", "91375e8d": "getGameEndTime()", @@ -83006,105 +151909,180 @@ "9137d10a": "refreshDirectSellParameter(uint256)", "9137f9b1": "viewSecondLotOfClauses()", "9138f38b": "claimTokensERC20(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"9138fd4c": "divideMathed()", "913918a6": "changeSaleInfo(uint256,uint256,uint256,uint8,uint256)", "913967d0": "getNextFeePercentage()", +"91397ab4": "setProfitFactor(uint256)", "91398f25": "getTransferringFor(address)", "913b1ecc": "setGroupWinner(uint256,uint256[])", "913b2958": "appealRuling(uint256,uint256)", +"913b722c": "getBeneficiaries()", +"913bc888": "calcRecentAverageRate(uint256)", "913cc77f": "setEthValueAmount(uint256)", "913cf5ca": "eos()", +"913d05fe": "setTokensPerBlock(uint256)", "913d23e2": "distributeMnyAfterSwap(address,uint256)", "913d30b0": "LIDToken()", "913d6906": "VotingToken(string,string,uint256,string,string,string,address,address,address,address)", +"913d7e4d": "MintERC20(address,uint256)", +"913dceb2": "poolTokenByProtocol(address)", "913dd846": "PRESOLD_ADDRESS()", "913e0887": "FundingRulesSet(address,uint256,uint256,uint256)", +"913e1188": "SellingPriceEvent(address,uint256,bool,uint256)", +"913e3eeb": "gameTransfer(uint256,address)", "913e77ad": "collector()", "913f424c": "_ecMul(uint256,uint256,uint256,uint256)", "913f4766": "Refound(address,uint256)", "913fb60b": "colorLeaderboard()", "913fbd04": "aidPoolWallet()", "913fc67a": "bidoohAdminAddress()", +"91401e9e": "Nex()", "91404af8": "updateTokenRatio(uint256,uint256)", "91407479": "Eth2USD_power18(uint256)", "9140a101": "checkRegistrar()", "9140a499": "updatePublicCheck()", +"9140ce04": "get_estates_statuses(uint256)", "9140f6ee": "releaseRestPreSaleTokens()", "9140f968": "newInvestment()", "91410c97": "stake_reward_rate()", "91410e41": "getMyRecordCount(address)", +"91414524": "DonationTransfered(address,uint256)", "91415ce9": "TRANSFERMANAGER_KEY()", "9141bfae": "LogReveal(uint256,address,uint256)", "9141d6f9": "unset(bytes32)", "91421cf6": "ECRCTOKEN()", "91423ef2": "getClientLastSupplyID(address)", +"914259fd": "freeAndWithdrawCollateral(address,address,uint256)", +"91427714": "fundraisingDurationDays()", +"9142db4c": "setPayTokenPool(uint256,uint256,uint256,uint8)", "91432155": "setBaseInterest(uint256)", +"914344cf": "transfersAreFrozen()", "91436eee": "issueLeftToken()", +"914406a0": "addReservedAmount(uint256)", "91441589": "run(bytes,uint8[4],uint8[2][4])", "91449def": "_owns(address,uint256,bool)", +"9144b6da": "addLiquidity(address,uint256,uint256,uint256,uint256)", +"9144c40d": "temp_balances(address)", "9144f267": "ALBtoken()", "91458ee8": "GameCreated(bytes32,string,string,uint16,uint64)", "9145a7fd": "CrowdsaleEnded(uint256)", +"9145e6df": "createExitQueue(address)", +"91460149": "forceUnstake(uint256)", +"9146b383": "buyUltraDrangon()", +"9146de22": "cryptonIndexToOwner(uint256)", +"91477c26": "removeWhiteListVault(address)", "9147dd1b": "pricePresale()", "9148018a": "getChatMessageAtIndex(uint256)", "914810a3": "claimRepository()", "91481123": "contestOverTime()", "9148148b": "migrate_game_balance()", +"9148249d": "oneKeyWithdraw()", "9148b237": "takeAllOrRevert(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", +"9148d511": "ShowMassage(uint256)", "91492956": "getPrices(uint256)", "914946aa": "getSignerAddresses()", "914980d4": "setBonus(address,uint256,bool)", "91499e2d": "disableService(uint256)", +"914a191d": "cg_for_core_team()", +"914a1ac9": "WETHContract()", "914a1e76": "getWinRate(address)", +"914a29fc": "showTheReason()", "914a5b24": "popPlayer()", +"914a8882": "setWarIndex(uint256)", "914ae352": "getCurrentNumberOfUsedServiceTokenWei()", +"914b14c5": "getPreviousPrice(bytes32,uint256)", "914b7fd2": "calculateSellGoldFee(uint256,uint256)", "914b857e": "unlockEscrow(bytes32)", "914bdef8": "_transferWithData(address,address,address,uint256,bytes,bytes,bool)", +"914d3112": "tokenForeign()", "914d581d": "fiatRaisedConvertedToWei()", "914dde1c": "isProposed(address)", "914de6d6": "MarketingAllocation(address,uint256)", +"914dea93": "setInfo(address,uint256)", "914e1ee1": "resetSearchStartIndex()", +"914e45d0": "setPackSaleAddress(address)", "914f716d": "BalanceHolder(address)", +"914fe309": "getOwnerCars(address)", "914ff398": "batchFill(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"91500671": "__queueSetTimelockPendingAdmin(address,uint256)", "915009a7": "getPaperFromMeta(uint256,uint256)", "915015c5": "setColorBlack()", "91508264": "getNextPrice(uint256,uint256)", +"91510d30": "createBountyAndLockFunds(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"91515db3": "deleteAddresses(uint256)", "9151c7e4": "GrandFraternityChain(uint256,string,string)", +"9151d59a": "changeWallet4(address)", "9151e092": "RisuToken(address)", "9152486c": "currentInitPart()", +"9152eb80": "potofgold4Register()", "9152f0b2": "getLastRequestId(uint256)", "9152f764": "WorldCup(string,string,uint256,uint256,string,uint256)", "9153d09a": "stringFloatToUnsigned(string)", +"91542040": "allowedAmount(address)", "915489f6": "futureTokens()", "91548ccf": "ticket_address_added(address)", +"9154d77c": "adminActiveTimestamp()", +"915548cd": "LogLoanClosed(address,address,address,bool,bytes32,uint256)", "91555559": "getNumWeiAddressMayInvest(address)", "9155b01a": "setSelfClaim(bytes32,bytes32)", "9155cc2c": "HitToken(string,string,uint8,uint256,uint8,uint8,address,address)", +"91564697": "miningContract()", "91565aba": "updateUsableBalanceOf(address)", "9156a003": "totalTokensIssued()", +"9156fb05": "checkRate(uint256,address)", "9156fb60": "addressERC20Token()", +"9157017a": "bonusInterval()", +"9157a4e5": "setDiscipleSale(uint256,uint256,uint256,uint256)", "9157e556": "isQualitifiedAddress(address)", +"9157ea38": "autostrat()", +"915834b1": "pendingTap(uint256,address)", +"91586edf": "getClaimPoolTotal()", +"915879f6": "toAsset(address,uint256)", +"9158a0ac": "setMinTokenBeforeReward(uint256)", +"91598766": "b(int256,int256)", "915a405f": "updateTransferMinimumFee(address,uint8)", +"915a5715": "oneDayAvailability(uint256[],uint256[])", +"915ae0db": "ClaimLP()", +"915b2ecc": "approve_466(address,uint256)", +"915b4fcb": "withdrawEgg(uint256)", "915b5bfc": "NeoWorldCash()", +"915be5cb": "setVokenAddress(uint160)", +"915c77b9": "checkAuthorisedFeatureAndInvokeWallet(address,address,uint256,bytes)", +"915c8fc7": "unlockDate6()", "915cfeac": "getTransferAgentStatus(address,bytes32,address)", "915d44f6": "setRFFSessionsAdd(address)", "915db230": "marketBuyOrdersNoThrow(uint256,bytes[])", "915e1044": "strFunc(string)", "915e5d44": "apply_compensation()", +"915eb973": "getWhitelistAddress()", "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()", +"9160ec55": "actUserStatus(address,uint256)", "91613e4b": "FTC()", +"916192e0": "timeStartedMining(uint256)", +"9161af66": "setGSNMode(uint8)", +"9161cb88": "setUserLpLimit(uint256)", "9161f789": "getRoundFunds()", +"91623ebb": "transferToPool1Upline(address)", +"916294df": "finishChangePercentSlippage()", "9162a905": "GDCNumber5()", "9162ab43": "MiningStolenPayout(address,address,uint256,uint256)", +"9162c594": "recurringFeeInWei()", +"9163f5d1": "ethUniAddress()", "9163f897": "block6()", +"916473ab": "addChecker(address)", "91647938": "saveMatchJoinAddr(uint256,address)", +"9164ac43": "history(uint32)", +"91650189": "isQualitifiedAddress(address,address,uint256,uint256,uint256,uint256)", +"91650653": "setLandidNftAddress(address)", +"91654510": "executed(string)", "9165543a": "deleteUser(uint256,address)", "91656aa9": "changelp11(address)", +"91657544": "withdrawGas(uint256)", "916576c8": "fundForSale()", "91658639": "ChampionSimple(uint256,uint256)", "916635c6": "log_mint(address,uint256)", @@ -83114,82 +152092,153 @@ "9166cba4": "sai()", "9167c5ad": "removeClientToken(uint256)", "91684f8d": "MMR(address)", +"91686f53": "setCreator(uint256,address)", "916891aa": "allocateReserveAndFounderTokens()", +"9168ae72": "stakers(address)", +"91691873": "transferAccount(address,uint256)", +"91695586": "swap(uint8,uint8,uint256,uint256,uint256)", +"9169c686": "oracleDeployed(address,address,uint256)", +"9169d937": "issue(uint256,string)", +"916a2a1b": "setSwap(address,address,uint256,address[],address,uint256)", "916a2b29": "_removeHorseFromStud(uint256)", "916a476e": "save3(address,bytes,string)", +"916a47f7": "taxCollected()", "916a4b57": "addPet(uint256,uint256,uint256,uint256,uint256,uint256)", +"916b07de": "transfer721(address,address,uint256)", +"916b2be0": "testOwnerOrAdministrator()", "916b5cfa": "TIMEstartICO()", +"916b9bef": "deactivate(uint256)", "916be4fe": "HELP4HUMANITY()", +"916be704": "addAirdrop(address,bytes32)", +"916c03ba": "tokenPrice(address,uint256)", +"916c435f": "getPriorProposalVotes(address,uint256)", "916c99fd": "getCampaignEndPointById(bytes32)", "916dbc17": "getPlayersFromCompetition(string,uint8)", "916dbc9e": "Coin786token18()", +"916dcf49": "setInitialDiscount(uint256,bool)", "916df92a": "Round()", "916dfea2": "getPersonalBonus(address)", +"916e0df5": "Inboxs(string)", +"916e1c57": "epochsCount()", "916e5901": "teamTokensLock()", "916e93f8": "ecrecoverFromVRS(bytes32,uint8,bytes32,bytes32)", "916eb6eb": "SetRoundResult(uint8,uint8,uint8,uint8,uint8)", +"916efaaf": "getTotalTokensBalance()", "916f5de1": "_emitJobOfferAccepted(uint256,address)", "916f7c23": "setSelled(uint256,bool)", +"916fd42e": "lotteryRole(uint256)", "91702ddc": "highCompose(uint256,uint256,uint256)", +"9170383f": "GlobalSPWinners(uint256)", "91704e1e": "getBid(bytes32)", +"91704e20": "unclaimedCollaterals(address)", "917105d4": "_takeOwnershipOfToken(uint256)", "917116f2": "NewSellPrice(uint256)", "917180c7": "setColdWallet1SplitPercentage(uint256)", +"9172421d": "armAdharmaContingency(bool)", "91735092": "assignToEarlyBirds(address[],uint256)", "9173a610": "createGame(string,uint256,bytes32[])", +"9173b139": "mapToken(address,address,bytes32)", "917418c1": "setMinRoundSize(uint256)", +"91749484": "getEthTldNode()", +"9174c6bf": "pendingCrab(uint256,address)", +"9174d449": "getOffersAmountToBuyAll(address,address,uint256,address)", +"917505f4": "mintUnderlying(address,uint256)", "917569a8": "weiPresaleMax()", +"91756d1f": "whitelistOf(address)", "917603e5": "getNumberOfMyGamesCompleted(address)", +"917613e1": "tokensSend(uint256)", "917640b5": "getSELabels()", +"91767a8c": "benchmarkparty()", "91778b9c": "changePrice(uint8,uint256)", +"91785e6d": "getTokenGeneration(uint256)", "9178732f": "warriorsOnTheBattlefield(address)", +"9179182d": "approveCoins(address)", +"91798140": "SpudCoin(address)", +"917ab342": "calcIndateInvestment(address,uint256)", "917ada14": "testControlCreateShortIdAlreadyExists()", "917b4f8b": "TQXToken()", +"917bc1fc": "depositPool(address,address)", +"917c6f6f": "deregisterConsumer(address)", +"917c854d": "removeOtherERC20Tokens(address,address)", +"917cc7df": "approveRate(uint256,uint256,uint256,uint256)", "917d009e": "getAuctionPrice(uint256)", "917d2be2": "wolkGenesis(uint256,uint256,address)", +"917df6bc": "DealRefundReason(uint256,address,uint32,uint32,uint256,string)", +"917e3c38": "depositMarketRewardPoolShare(uint256,uint256,uint256,uint64,uint64)", +"917e6fa1": "balanceContrack()", +"917e77f5": "unrecordedFunding()", "917ec8e2": "removeApp(uint32,string)", "917f635c": "wct()", "917fcc5d": "addJobProposal(uint256,string,uint256)", "917fd839": "buyGEN0Chibi(string,string,uint8,uint256)", +"91800334": "minRewardQualifyPercentage()", "91814577": "renameStoreTo(bytes32)", "91816981": "getProfitPercentForData(uint256)", +"91816ec9": "POOL_PLEDGE_RATE()", "91818130": "totalCharityPrize()", +"91821313": "PlotSectionSold(uint256,uint256,address,address)", +"9182621a": "onRemoval(uint256,bytes)", "91828a2e": "extra_bonus_duration()", +"9182fd77": "setMultiplicator(int256)", "918307fd": "getRemainOfStage(address,uint256)", "918359c6": "needsBirth()", "91837535": "getgateway()", "9183d360": "CreateINDI(address,uint256)", "9183d8ab": "returnAndRevert(bool)", "9183fd01": "getSeedPrice()", +"9184671f": "newPlots(uint256[],uint256[],bytes7[],bytes32[])", +"9184e9ae": "SetBurnRate(uint256)", "91854684": "pollBallot(uint256,uint256)", +"91858203": "displayHash(bytes32)", "91858734": "takeControl()", +"9185a215": "_addr2Id(address)", "9185c694": "_deleteAccount(address)", +"9185f6ec": "isStable(address)", +"9185fc5c": "queryUserEpochInfo(address,uint256)", +"918636f2": "tokensaleManagerAddr()", "9186485a": "readKYC(address)", "918657cb": "token_information()", +"91868da7": "poolFeeAvailable()", "91872a91": "isEmpty(string,string)", "9187300e": "getTokensForSale(bool)", "91876e57": "withdrawAuctionBalances()", "91878995": "MYCOIN()", +"9187cb03": "getAvailableTokens(uint256)", +"9187dbef": "_getInCirculation()", "9188451b": "transferUserGrowthPoolTokens(address,uint256)", "91885e1d": "nextWeaponID()", "918898a5": "frozenRules(address,uint256)", "9188d312": "getCard(uint256)", +"918923c4": "cardTypesIds(uint256)", +"918924b9": "deleteStabilizerPool(uint256)", +"91899a5d": "bloodbankSignup(string,string)", "9189a59e": "sweeper()", "9189edd2": "Zinoder()", "9189fec1": "guess(uint256)", "918a15cf": "toEthSignedMessageHash(bytes32)", +"918a237f": "LDB(uint256)", "918a2e0c": "AccessoryCollection(uint256)", +"918a8ebc": "onlyCreate()", "918b8326": "startSto()", +"918baa8c": "discardBills(uint256[])", "918c00c6": "LogCommit(uint256,address,bytes32)", +"918c36b0": "DoChangeToken()", "918c783a": "hasPurchased()", "918ca01d": "BurnConfirmed(uint256,address,uint256)", +"918cc4b4": "_decode_sol_int32(uint256,bytes)", +"918d35b8": "setLevelBuyPrice(uint256[6])", "918d407d": "acceptOffer(uint256,address)", +"918d696a": "LogCode(bytes32)", +"918de0c8": "transferToPotofgold2Upline(address)", "918e2c3d": "GetUserExtraData3(address)", +"918e2de1": "calculateDaiClaim(uint256)", "918f1bb5": "ProjectKudos()", "918f49ec": "NDCOIN()", "918f5f74": "setMinBonusTrigger(uint256)", "918f644e": "getScriptsCount()", "918f8674": "DENOMINATOR()", +"918fd4d2": "idsToBitmask(uint256[])", +"918feec8": "questionType()", "91914b30": "setTokenUrl(address,string)", "91915ef8": "setCapacity(uint256)", "91916a5e": "Test(uint256,uint256)", @@ -83199,6 +152248,12 @@ "9192f48e": "setLocked(address)", "9193b2e3": "request(address,uint256,uint256,address)", "9193ba0b": "createForwarder(address)", +"9193c485": "setPartner(address,uint256)", +"9193d860": "collateralizedDebt()", +"91941508": "updateFundSettings(bytes)", +"9194a7d1": "AnimalBoughtEvent(uint256,address,address,uint256,bool)", +"91952084": "LogMixerWithdraw(bytes32,uint256,address,uint256)", +"91953189": "viewSelectiveWithdraw(address[],uint256[])", "91959fe3": "getCalFactor(uint32)", "91962739": "setWhiteListOwner(address)", "9196bdd5": "ggc(address)", @@ -83208,13 +152263,21 @@ "91975e22": "ManagerDisabledEvent(address)", "91977c56": "setDTR(address)", "9197b7cd": "earlyWithdrawal()", +"9197d574": "claimedtotal()", "919823df": "getHashExists(string)", "919840ad": "check()", +"91984d47": "setBalances(address,uint256,uint256,uint256)", +"91986dc0": "ATContracts(address)", +"919884bf": "getLocker(address)", "91988783": "IMDEXdepositToken(address,uint256)", +"9198b7ec": "christmasday()", "9198e08c": "Linfinity()", "919987bc": "rewardPool_()", "9199a8bb": "dnnHoldingMultisig()", +"9199c43b": "arhivirajIspitniRok(address)", "919a41dd": "endFight(uint256,uint256)", +"919a86c8": "userBusiness(address)", +"919a909c": "fewConsumedProofs(address,uint256,uint256)", "919aa4fa": "ZIGICOIN()", "919acf1e": "getperiodlasttime(address,address)", "919b30cf": "FTXToken()", @@ -83225,99 +152288,179 @@ "919c9d4a": "getAfterIcoPeriod(uint256)", "919ca82d": "EtherprisesLLC()", "919d3401": "MAXIMUM_ICO_TOKENS()", +"919d365d": "executeSellArbitrage(uint256)", +"919d5cda": "getAmountDue(uint256,address)", "919d8bb2": "TokenTrader(address,address,address,uint256,uint256,uint256,uint256,bool,bool)", +"919e0b79": "ownerMain()", "919e144c": "predict(uint16,uint8)", "919e1967": "Ubiq()", +"919e48d4": "teamsIds(uint256)", "919e7f42": "supportNewMoon(address)", +"919e93b5": "totalTokensCommitted()", "919edc7c": "getChainySender(string)", +"919f01b2": "received(address,uint256,uint256)", "919f31c2": "Ankr()", +"919f7e20": "Burnt(address,uint256)", "919f8cfc": "makerDepositEther()", "919f90ca": "sendCommissionToOwner(uint256)", "91a01414": "getPreviousBlock(uint256,uint256)", +"91a02e2a": "log(uint256,bool,uint256,bool)", +"91a0846d": "getUserReward(address,uint256)", "91a0ac6a": "equity()", "91a0ba00": "icoRound1()", +"91a0f157": "Vcount()", +"91a15bb3": "addGlobal(address)", "91a1896e": "setReserveForFoundersSecond(address)", "91a1f16a": "getMaxWin()", +"91a22807": "InsertProject(string,string,address,string,string,address)", "91a266ac": "totalEthCharityRecieved()", +"91a27d55": "getServiceContracts()", +"91a31317": "AddOwner(address,address)", "91a34006": "getInitializeOutcomeValue()", "91a3cec0": "receiveEtherFormOwner()", +"91a425e7": "spawnlimit()", +"91a43a52": "nonces(address,uint32)", +"91a47af5": "isClaimable(uint256,address,uint256,bytes32[])", "91a49300": "purchaseEnable()", "91a553df": "developer_add_cost_of_transfers(string)", "91a57544": "affiliatePercentage()", +"91a59d5c": "setAddr(address,address,address,address,address)", "91a5b0c7": "bestSum(uint8[])", "91a67e1e": "tokenFrozenUntilBlock()", +"91a6cfd1": "maxStakedQuantity()", "91a73892": "getOrderStateHelper(uint256,uint256)", "91a73a27": "cleanSellShareOutput()", +"91a75dcd": "participateOnBehalfOf(uint256,address)", +"91a76a5b": "removeGrainContract(uint256)", +"91a78248": "EventMarketingBusinessDev(address,bool)", "91a7aa37": "Chain2()", +"91a80aaa": "encodeMessage(uint256,uint256,uint256[])", "91a852f6": "changeTicketFee(uint256)", "91a89712": "link(address)", +"91a8c4b8": "setAdminLimit(uint256)", "91a90014": "_updateTokenRates(uint256)", +"91a92d9a": "Referer(address,uint256)", +"91a9634f": "candidateData(address)", +"91a9b1d2": "checkNotBlacklisted(address)", +"91aa40ed": "_reflectfee()", +"91aa69ca": "m2()", "91aa94f1": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,bytes32)", "91aabeb5": "checkArea(uint32[],address)", "91aac477": "addNacToNetf(uint256)", +"91aad239": "setCoreAddress(address)", "91aadff6": "OPEN_SALE_STAKE()", "91aaf2e9": "presaleTokenAmount(address)", "91ab0ca0": "authorisedContract()", +"91abfb22": "adoptSHIBAS()", "91ac2c3f": "testCreateElection()", "91ac46f5": "centRaised()", "91ac7e65": "indexOf(uint256)", "91ac96a9": "pendingWinners(uint256)", +"91acd720": "teamNums_(uint256)", "91acd8fb": "DEJToken()", "91ad1ada": "VernamPrivatePreSale()", "91ad27b4": "getInterval()", "91ad48a1": "DataToSetting(uint8,bool,uint8)", +"91ad5c8f": "evenStep(uint256)", +"91ae8a77": "swapExactETHForTokens(uint256,address[],uint256,address,uint256,uint256)", +"91aeeedc": "invoke1CosignerSends(uint8,bytes32,bytes32,uint256,address,bytes)", +"91af6f0a": "setLastIDCount(uint32)", +"91af7533": "ChangeStatus(address,bool)", "91af8d14": "recalculateTopScores(uint256,uint256,uint256)", "91afc432": "setUpdaterAddress(address)", +"91b01bae": "LogOperation(address)", +"91b0b618": "getAddressKyber()", +"91b0fc85": "unlockPrivateSaleFund()", +"91b10ffa": "set_controller(address)", +"91b11ad4": "isInWithdrawalMode()", "91b1a02a": "SwissCryptoExchange(address,address,address,uint256,uint256,uint256)", +"91b21468": "TRIGGER_ROLE()", "91b22ebf": "getTokenAmountPerHeritor(address,address)", "91b23419": "developerFund()", "91b2413f": "HplusToken()", "91b25b35": "revokeAndSetNewMember(uint8,bytes32,address)", "91b2b30e": "LogI(uint256)", +"91b324fe": "_canBurnSynths(address)", +"91b33125": "defaultReferrer()", +"91b3ed50": "dydxAddr()", +"91b3ef7a": "claimExpiredTokens(address,uint256)", "91b43d13": "fundingEndBlock()", +"91b4440c": "aSMTX()", +"91b48ddc": "killApostle(uint256)", "91b4a0e7": "Difficulty()", "91b4ded9": "lastPauseTime()", "91b56822": "gameTick(uint256)", "91b584f3": "_insertValidator(address,uint256)", +"91b623b8": "isClaimed(uint256,bytes32)", +"91b66fd5": "rewardTime()", "91b6a086": "WithdrawToInvestor(address,uint256)", +"91b6be9a": "sellItem(uint256)", "91b7ad06": "calculateTokens(address)", "91b7d3e0": "redeemSurplusERC20(address)", "91b7f5ed": "setPrice(uint256)", +"91b89fba": "dividendOf(address)", "91b8a49a": "lastDonor()", "91b97997": "endFirstWeekICO()", "91b9b640": "getDApp(string)", +"91b9cd82": "_exchangeAddress()", +"91b9d5bd": "isExtensionSuperAdmin(bytes32,address)", +"91b9ea5b": "_hugeMaxChronos()", +"91ba317a": "maxTokenId()", "91ba5d6a": "preICOMany(address[],uint256[])", +"91baa3f4": "dev_stak_address()", "91baabba": "CCLToken()", "91bb2534": "impl_price()", "91bb4816": "m_Database()", +"91bb6f52": "isTypeSpecial(uint256)", "91bbb21a": "trialDeadline()", "91bbb87b": "GetPurchaseInfo()", "91bbbe4d": "_payoutTaxes(uint256)", "91bbd6f6": "VeiagToken(address)", "91bbdcc7": "convert()", +"91bbe1aa": "updateUserAllExtended(uint256,uint256[])", +"91bbf434": "setProportion(uint256,uint256)", +"91bc49f1": "wish(address,address)", "91bc85a9": "SetTrustee(address)", "91bc8a45": "bonusAdd()", +"91bd76c1": "hollyPerBlock()", "91bdc458": "blockNewSpinnerPurchase(uint256)", "91bdf9da": "isTen(uint8)", "91be0b31": "setPriceChanger(uint256)", "91be2f8d": "changeCCCoinAddress(address)", "91be90c8": "_dust(address)", +"91bf40f5": "setGlobalDebtCeiling(address,uint256)", +"91bf931d": "isPoolWhiteListed(address)", "91bf9c50": "test_CampaignRulesFail()", +"91bfa2bf": "getMinimumBalance(address)", +"91bfd585": "bottomLimitUsdtOfPubIEO()", "91bfeb98": "CrystiumToken()", "91c03391": "TraToken()", +"91c0395c": "SaleEnded(uint256,uint256,uint8)", "91c05b0b": "distribute(uint256)", +"91c0871c": "buy(address,uint256,address,bytes,uint256,address,uint256,uint8,address)", +"91c0aabf": "mintReward(uint256)", +"91c1004a": "updateUniswapV2Pair(address)", "91c11cae": "disputeTransaction(uint256,uint256)", "91c1e2c1": "burnedBalanceOf(address)", "91c20375": "setArtEsc(string,string)", +"91c2302a": "flipEligOnRedeem(uint256)", "91c23928": "divSafe(uint256,uint256)", +"91c23a36": "globalToLocalId(uint256,uint256)", "91c259ea": "transferby(address,uint256)", "91c27b2a": "setTransTimes(uint32)", +"91c2b6b7": "MAXIMUM_BASE_INTEREST_RATE()", +"91c2c08e": "priceToLiquidity(address,uint256,uint256,uint256,uint256)", "91c3352e": "test_invalidEmptyEqVal1()", +"91c33d04": "getUpdateWalletPermittedContractLocatorIdentifier()", "91c3e5ee": "rb(address)", "91c3e7f8": "showlvzhou(address)", +"91c404ac": "adminChangeFee(uint256)", +"91c40bf7": "dropAddress(string,address)", "91c4529f": "isBlacklistSpender(address)", +"91c48bf9": "setToken(uint256)", "91c49026": "rebalanceEnclaves(address,uint256)", "91c4c78f": "fund(address,uint160)", +"91c53dd6": "debtShareOf(address,address)", "91c62a5a": "LogBounty(address,uint128,string)", "91c71e2b": "disableLock(bool)", "91c72d88": "holdSubscriptionOffer(uint256)", @@ -83325,123 +152468,212 @@ "91c827a0": "AddOwnerAddress(address,address)", "91c873cb": "getAdminContract(address,uint256)", "91c8e336": "exchangeSupply()", +"91c93e2c": "facadeImplementation()", +"91c978d6": "updateMaxChildrenPerToken(uint256)", +"91c9889a": "setUpgradedOwner(address,address)", +"91ca3bb5": "starts()", +"91ca480e": "setPrizeStrategy(address)", "91cadaf6": "evolvePrice()", +"91cae372": "getAgentRegistry()", "91cb4316": "endOf24H()", "91cb98af": "getPendingAmount(uint256)", +"91cc7ec4": "getCycleFinancials(uint256)", "91cca3db": "dev()", "91cd242d": "setMeta(bytes32,bytes32,bytes32)", "91cd450c": "AlienFarm()", "91cd7e9a": "ChannelDeleted(address,address,address)", +"91cdaaba": "getServiceMinMineDays()", +"91cdd5cd": "withdrawCapitalByTokenIdAndToken(uint256,address,uint256)", "91cdecab": "TOTAL_DINOTOKEN_SUPPLY()", +"91ce1e27": "eventRegistration(uint256,string)", "91ce8ca9": "IQTCrowdsale()", "91ce8e04": "setTwo(uint256)", +"91ceb3eb": "getTokenBalance(uint8)", "91cee1fd": "baseStats(uint256,uint256)", "91cef6a8": "payAffiliate()", "91cf2164": "transferFunction(address,address,uint256)", "91cf7aca": "upgradeFrom(address,address)", +"91cfb4f9": "repayvSPY(uint256)", "91cfb7b6": "ceilings(uint256)", +"91cfc1d4": "settleAuctionAtomically(uint256,uint96[],uint96[],bytes32[],bytes)", +"91d063b0": "votedAtProposal(uint256,address)", "91d0b3fd": "_mine(address,uint256)", +"91d0d8ab": "transferPower(uint256,address)", "91d0dd17": "accrueCouponsPerXTokenETH()", +"91d14854": "hasRole(bytes32,address)", "91d15735": "left11(uint256)", "91d15a91": "weiRaisedIco()", +"91d18b63": "ethtodai(uint256,address)", "91d1addb": "plutocracylvlAchieved(string,string)", +"91d1bbf9": "approve_829(address,uint256)", "91d23a1a": "lastRewards()", "91d2939d": "per(uint256,uint256)", "91d4357b": "myBonus()", "91d43b23": "right76(uint256)", "91d462d9": "hashUnderlyingPrices(uint32,int256[])", +"91d4c546": "setStickerPackValue(uint256)", +"91d4ec18": "transactionsSize()", +"91d52567": "unvest(uint256)", +"91d5301d": "salesTransfer(address,uint256)", "91d558b7": "startCrowdsaleY0(address)", "91d55c41": "RuiXueToken()", +"91d5ad71": "allowSwapper(address)", "91d5d7d6": "out1Done()", "91d6212a": "address5a()", "91d625e5": "setupCore(string,string,address,uint256)", "91d6367b": "reserveForTeam(address,uint256,uint256)", +"91d6f0b2": "mintMonster(string,address)", "91d739ea": "updateRegistratorStatus(address,bool)", +"91d75b98": "maxParcels()", "91d76bbb": "getTotalMigrated()", "91d781ba": "kkTestICO1()", +"91d7cc7d": "notifyPools(uint256[],address[])", "91d80948": "_checkAndCallTransfer(address,address,uint256,bytes)", +"91d82b3c": "availableLoadinKW()", "91d8b14e": "BuyTickets()", +"91d8ba00": "getETHToSell()", +"91d8d36e": "promoterDistRound()", "91d91df3": "FesBerto()", "91d96541": "refundedSat(address)", +"91d9801e": "setPairFeeToRate(address,uint256)", "91da7aa8": "transferAndCall(address,uint256,uint256[])", +"91da8c53": "balanceOfcrow()", "91da9178": "WALLET_LB_ADMIN()", +"91da9657": "smithCheckpoints_enter(address)", +"91daf02b": "Order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "91db7b0d": "updateLockPeriod(uint256)", "91dbd4c3": "payTournamentWinner(uint256)", +"91dbf076": "TokenTransferLocker(bool)", "91dc077b": "submitApplication(string,string,string,string,string,string,string,string)", +"91dc0821": "INVITEE_WEIGHT()", +"91dc0904": "getTokenPriceByIndex(uint256)", "91dc11fe": "setClaimParameters(uint256,uint256)", "91dc1b1d": "mintCUSD(address,uint256)", "91dc6d36": "pauseForDividend()", "91dc956d": "addLog(string)", +"91dcfff3": "burnableAddrs(address)", +"91dd28bb": "getValueJackpot(uint256)", +"91dd75e7": "feesAddress()", "91ddadf4": "clock()", +"91de1e47": "bonus500Split()", +"91de3da0": "supplyDeltaNew()", "91de4f88": "claimCoreTeamsTokens(address)", "91de5474": "getPurchaserCount()", "91ded8fa": "getTokenByAddress(address)", "91df0c08": "addReserve()", +"91df4ba9": "RDF8()", "91df9562": "BSPToken()", "91dfa960": "report(uint16,uint16)", +"91dfdbb6": "unsubscribeByAdmin(uint256)", "91dfe428": "addFees(uint256,uint256)", +"91dfe78f": "setRollupProvider(address,bool)", "91e05922": "contractICO()", +"91e06b6d": "dbAddress()", "91e078bb": "startAuction(uint256,uint256,uint256)", +"91e07e7a": "setUnstakingFeeRate(uint256)", "91e0a5a0": "checkHolderStep(address)", "91e0b6c0": "ProofPublicVote()", +"91e0d593": "winnerId()", "91e0e39c": "resetDragonBalance(address,uint256)", +"91e0eab5": "masterContractApproved(address,address)", +"91e101b7": "mintReplicant(address,uint256,uint8,uint8,uint8)", "91e1397d": "rcnFund()", "91e145ef": "f(string)", "91e192b7": "MintedToken(address,address,uint256)", "91e1cc5a": "freezeAccount(address,uint256,uint256,uint256,uint256,uint256)", "91e22c90": "interfacesSupported(address,bytes4[])", +"91e22e34": "setRoundLimit(uint256)", "91e23a4d": "updateInterCryptonode(bytes32)", +"91e2b63c": "echidna_AlwaysInitialized()", "91e2f2c5": "HoQuToken(uint256)", "91e30ec3": "buyDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"91e33107": "whaleBalanceLimit()", "91e3387b": "numBrews()", "91e50314": "isActivityCore()", +"91e5287b": "setBDOIP01(uint256,uint256)", "91e52b91": "buySecond()", +"91e53a00": "AddressBonusGet(address)", +"91e54b06": "changeWithdrawalDelay(uint256)", +"91e558b1": "permis5()", "91e569c3": "recordBook(address)", +"91e56b68": "exchangeOnBehalfWithTracking(address,bytes32,uint256,bytes32,address,bytes32)", "91e59bcf": "testSetName()", +"91e662eb": "setRePolkaQuacksPaused(bool)", +"91e6a5ca": "getMerkleTree(uint256)", "91e6d028": "getFIRST_STEP_LIMIT()", "91e6f274": "FirstUserDestroy()", +"91e700aa": "setTotalAllowance(address,address,address,address,uint256,uint256)", "91e7137d": "price2ndWeek(uint256)", "91e732b6": "setInvestRestriction(uint256,uint8,bool)", +"91e75fc0": "SetNetflagsQuantity(uint256)", "91e79c72": "hodlerTotalValue()", +"91e7cd44": "timeListed()", "91e7f7bc": "claimVotingRight()", "91e8609f": "getParentId(bytes32,uint256)", "91e863ca": "setBigPromoInterval(uint128)", +"91e87d43": "cobrarrseguro(address)", "91e88106": "abiLength(address[])", "91e8d3dc": "testBitOrFailIndexOOB()", "91e8fc34": "createPipe(uint256,uint256,bytes32)", +"91e900b4": "exerciseProfit(address,uint256)", +"91e93881": "P3_REWARD_PERCENTAGE()", "91e9f106": "historyWinner(uint256)", "91ea294e": "LogSetWithdrawer(address)", +"91ea30b4": "totalPPDEXSpend()", "91ea4d07": "snatchedOn()", "91ea59eb": "buyGuaranteed(address)", "91ea8a05": "add(bytes32,bytes32,uint256)", +"91eaa99e": "ethContributedForLPTokens(address)", +"91eace8b": "getMyRequests()", +"91eadd21": "pis()", +"91eb1c69": "getReserveRate(address,address[],address[])", "91eb97ea": "pharmatrix(uint256)", "91ebc861": "noFeeTransfer(address,uint256)", "91ec1623": "_shutDown()", +"91ec28dd": "setPolAdd(address)", "91ec845e": "isAtMost(int256,int256,string)", "91ec910e": "OwnableImpl()", "91ecda3c": "Menu10(address)", +"91ecdc6e": "whitelistCompany(address,string,string,string)", +"91ed094d": "public_sale()", +"91ed3ab0": "ownerPaid()", "91ed6851": "createPromoCompany(address,string,uint256)", "91ede45f": "Deposited(address,uint256,uint256,uint256)", +"91edf82d": "arbSet()", "91ee7bbf": "dispute(bool)", +"91ee81c3": "createZKP(uint256,uint256,uint256[2])", +"91ee8a99": "nastavcislo(uint8)", "91ef14b4": "setApprove(address,address,uint256)", +"91efb5d4": "getTokenValues(address)", "91f02379": "hundredKInvestor()", "91f02f9c": "DelayChanged(uint256)", +"91f049c6": "_transferOperator(address)", "91f09f7c": "redeemPowerTokenBal()", +"91f0d322": "hashSB(string,bytes32)", "91f11a9c": "lastWinNumber()", +"91f1a3a5": "prevBlockInterval()", "91f1cf05": "crafting()", "91f1f310": "totalOffers(uint256)", "91f2700a": "drop(address)", +"91f2ade8": "SetFee(uint8)", +"91f2db11": "approve_412(address,uint256)", "91f2ebb8": "heir()", +"91f31b84": "ChangeMedianizer(address,address,uint256)", "91f34dbd": "transfer(uint256,address[],uint256[],uint256[3],bytes,bytes,bytes)", "91f39f10": "getContactAddressByIndex(uint256)", "91f3c4a2": "GSY(uint256,string,string)", +"91f3de8f": "updateRegisteredLawyerNo(uint256,string)", "91f4b7ff": "soulBookPage(uint256)", +"91f4df12": "doMagic(uint16[5],address[5])", +"91f5569d": "updateBot(uint256,string,uint256,string)", "91f5637a": "frozenBalanceCount()", "91f5c3a8": "donateAndCreateGiver(address,uint64)", "91f5f3c9": "MAX_TOKEN_GRANTEES()", +"91f5f9f3": "sendEthBuyErc(uint256,uint256,address,uint256,uint256,address)", "91f6c7e6": "getCurrentICOPhase()", "91f72ebb": "is128Bit(uint256)", "91f7cfb9": "availableAmount()", +"91f7e09e": "maxMintBPro()", "91f85480": "updateValidOrg(address,address,bool)", "91f8668e": "setTokenUri(uint256,string,string,string,uint256)", "91f90157": "highestBidder()", @@ -83450,234 +152682,432 @@ "91fa0555": "getParentAddress()", "91fa196d": "getDesignatedReportReceivedTime()", "91fa2df4": "addPaid(bytes32,uint256)", +"91fa4c98": "_isTraderExcluded(address)", "91fb4583": "reachedMajorityForTeam(uint256)", +"91fb742a": "changeRegisterFee(uint256)", "91fb9437": "isStoring()", +"91fc1f2c": "lastTransferTimestamp(address)", "91fc437e": "nameTaken(string)", "91fc5696": "confirmBusinessOwner(address)", "91fc7c70": "TreeCoin()", +"91fcd9a9": "getUnclaimedReward(address)", +"91fd054e": "woolController()", "91fd1c7d": "getSenderByHash(string)", +"91fda287": "htlt(bytes32,uint64,uint256,address,bytes20,bytes20,uint256,uint256)", "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)", +"91fee9a4": "GameStarter()", "91feea93": "withdrawBoth(address,uint256,uint256)", +"91ff0626": "MIP25()", +"91ff1eb1": "whitelistFeeAccount(address,bool)", +"91ff3ba8": "A4(bytes)", +"91ff4916": "getAssetIntroducerPriceDmgByTokenIdAndStakingDuration(uint256,uint8)", +"91ff4a73": "decreaseMaxSupply(uint256)", "91ff6baf": "requestsFunded()", "92008bfa": "setResourcesSecondaryManager(address)", "9200b04c": "myDeposit(address)", +"92015b93": "rebate2Client(uint256)", "9201ac94": "getCON()", "9201de55": "bytes32ToString(bytes32)", +"92020015": "submitMagicValue2(uint16)", +"92021653": "getGroupPubKey(uint256)", +"92024e89": "ReceiveTokens(address,address,uint256,bytes)", +"92026f2e": "cashClosePut(uint256)", "92031600": "setBonuses(uint256[],uint256[],uint256[])", "92039b87": "balanceVested(address)", "9203cb9e": "forwardWin(address,address,bytes,bytes32,bytes)", +"9204287f": "initialize(uint256,address,string,string,string,uint256,uint8)", "9204764f": "setHookOperator(address)", "9204b2bd": "maxVeriAmount()", "9204c013": "QKCCoin()", +"92053b63": "imageCount()", "9205ab3c": "sendRefund()", "9205dce7": "Usdcoins()", "9205ec4d": "refundSponsorship(address,uint256,uint256)", "9205fbc2": "testAuthorityAuth()", "92066346": "setCastleLootDistributionThreshold(uint256)", +"920674dc": "whiteListAddresses(address)", +"92068f04": "wpcSpeeds(address)", "92069ebd": "_getMarketPrices()", +"9206d09f": "claimProxyFunds(address[])", +"92072219": "safeTransferAssetToReciever(address)", "920775d4": "subVirus(address,uint256)", +"9207f95b": "convert(string,string,uint256)", +"9208de97": "accountLockup(address)", "92093dd6": "getLastResult()", "92093e7d": "addUserRefBalance(address)", +"92094ef4": "getSwanTokenBalance()", +"920966a8": "symbolIsValid(string)", "92099fdb": "refundableEthBalanceOf(address)", "9209b3c0": "getCrtDetails(bytes)", "9209eebe": "SentToContractor(uint256,uint256,address,uint256)", +"920a3cc0": "USDTtoExchcoinCoinDeliver(uint256)", +"920a66d7": "SetForSale(address,uint256)", "920b0280": "noIcoPeriod()", +"920b3027": "adminAddRoles(address[],string)", "920b3a7e": "getFundersCount()", +"920b923b": "approve_797(address,uint256)", "920bb680": "ledgerWallet()", +"920c2d4a": "CASHLP_POOL_REWARD_ALLOCATION()", "920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", +"920cca84": "reCalculateImported()", +"920d0086": "create(address[],uint256[],string,string)", "920dce19": "getAngelCardSeries(uint8)", "920dd47b": "first_partner_address()", "920dfe52": "EFARMCoin()", "920e3c96": "setUserStatus(address,uint8)", "920e4da9": "created(string,string,address,uint256)", +"920e98e2": "getStackLength()", +"920f5c84": "executeOperation(address[],uint256[],uint256[],address,bytes)", "920ffa26": "ownerOf(string)", +"92100265": "Vanity(address)", +"92104669": "setCountInSequence(bool)", +"9210c83d": "maxRunningValidatorCount()", "9211448f": "finalizeClaim(bytes32,string)", +"92116d1f": "historicalPosition(uint256)", "921193cf": "changelp3(address)", "921200ed": "setBonusTokenRateLevelFour(uint256)", "9212051c": "numJobs()", +"92120aec": "minSponsorTokens()", "921233b9": "addBuyRequest(bytes32,address)", "92123470": "mintTo()", "921237a4": "createPlayer(address,address)", "92127126": "canTransferByPartition(bytes32,address,uint256,bytes)", +"921276ea": "versionPaymaster()", "9212d0c1": "closeBetsIfEventNotSuccess(bytes16,bytes16,uint256,uint256)", +"9213b124": "_deposit(uint256)", "92140775": "prefixedTest(uint8,bytes32,bytes32,address,address)", +"92140776": "swapERC20Token0ForERC20Token1(uint256)", "92140bb9": "getTransactionByTransactionAndEntityId(address,uint256)", +"9214449f": "uniInuniOut2(uint256,uint256,address,address,address[],address[])", +"9214554d": "oracleInfo(bytes32)", "921456e7": "modifierEx()", "921496a9": "adminWithdrawTokens(uint256)", "9214b644": "married()", +"9214b7a0": "straightSortRewards()", "9214e527": "Crowdsale(uint32,uint32,uint256,address)", +"9214fa4d": "getPeg()", "9215b58e": "GoldMineChain(uint256,string,uint8,string)", +"9215f97f": "deposit12(uint256)", +"92164a27": "isFreeVenueCheck(string)", +"92166bc6": "stakingRefLinePercentage(uint256)", "9216728a": "cooWallet()", "9216b7ad": "winTokenReward()", "9216cf13": "licenseSalesContractAddress()", "921710e9": "getShareRewardPercent()", "9217500c": "setFightAuctionAddress(address,address)", +"92179853": "setLevelCost(uint256)", "9217c438": "getOracleAddress(uint256)", +"9217e0c3": "allocate(bool)", "921828ac": "commitProposal(string)", +"9218464e": "betsP2(uint256)", +"9219b349": "interestAccountNumber(address)", +"9219baa4": "performUserWithdraw(address)", +"9219e15a": "ssadmin()", +"921a154b": "getPayoffBalance(bytes32,uint256)", +"921a7237": "setCurrentTimeBank(uint256)", "921b004b": "depositFunds(address,uint256)", +"921b116d": "getAddrInviteCode(address)", "921b15ae": "LaborHourToken(address,int256,string,uint256)", "921b2d64": "mintTokens(int256,address,uint256)", "921b45f7": "checkAndCloseDeposit(uint256)", "921bd6f0": "upgradeTimestamp()", +"921c67b4": "stages(uint256,uint256)", +"921c6e76": "burnOwner()", +"921c9dde": "underlyingOptionId(uint256)", "921d72ed": "CreatedAccessory(uint64)", "921dec21": "registerNameXID(string,uint256,bool)", "921e1537": "dailyHash()", +"921e7133": "sqrlAddress()", "921e7ba6": "withdrawCoins(string,address)", +"921f381e": "pendingMnbks(uint256,address)", "921f5dec": "getBlockVoter(uint256,address)", "921f98bb": "resolveFailVote()", "921fb890": "buyGood(address,string)", "92202126": "ETU()", +"922021c3": "holderInfo(uint256,uint256)", "92207bd8": "getMyCarsIdxCount(uint256)", "9220d426": "_nowDateTime()", "9220d5fa": "DiminishToken(address,address)", +"9221399f": "checkContributor(uint256)", "92223e7a": "BlueRedTokenERC20(uint256,string,string)", +"9222f909": "timeRegistration(address)", +"92239dff": "changeLoserStakeMultiplier(uint256)", "9223de05": "contributionAmounts(address)", +"92240fbb": "lottery(address)", +"9224240a": "totalDepositedByAddress()", "922427de": "canSort()", +"92244ce5": "approve_717(address,uint256)", +"92245840": "approve_814(address,uint256)", +"922469eb": "px()", "922497fc": "regularTokenMaxSales()", +"9224e473": "changeRolesAddress(address)", "92250c6a": "localBuy(uint256,address,address)", "922587ff": "addMintable(address)", +"9225ce23": "isImplementationLocked(address)", "9226084e": "tier_cap_1()", "92262375": "transferByDate(address,uint256[],uint256[])", +"9226326f": "press_E()", +"92266c3e": "getBondedWithdrawalAmount(bytes32)", "922775e3": "createNewTrade(address,uint256,uint256)", "92277933": "abc()", "9227bed6": "bucketAmount()", "922856da": "getPicksForUser(address)", +"92285a1a": "currentPrizeStakeID()", +"92285db5": "posmine()", +"9228e0e4": "last_call()", "9228e90d": "developer_BSR()", "9229c504": "new_mainPlayer(address)", "9229e3cd": "submitProof(bytes32,bytes32[],uint256)", "9229f3c1": "KVLToken()", "922a8425": "paymode()", +"922aaa54": "setPrices(address[],address[],uint256[])", "922b01ca": "walkTokenLots(address,address,uint256,uint256,bool,bool,bool)", "922b041d": "_getStatsSumHours(uint256)", +"922b5a62": "claimTotalEther()", +"922b8a92": "tokenIndexInTypeArray(uint256)", "922ba128": "calculateCurrDynamicPrice()", "922bedf7": "mintNFTsNotForSale(uint256[],bytes32[])", +"922c1594": "changeGoalBetRegistry(address)", "922c64ef": "batchDistributeTokens(address[],uint256[])", +"922c8616": "estDepositPool()", +"922c9167": "arbiterFee()", +"922cff80": "removeLoanDurationAndInterest(uint256)", +"922d74a6": "CoopStamp(uint256,string,string)", +"922d9861": "buyManually()", "922da521": "RocketPoolPresale(address)", +"922dd300": "buyOpenCall(uint256)", "922dd59a": "icapTransfer(bytes,address,bytes,uint256)", "922dd7d9": "generateKey()", +"922de5f6": "returnMarReward(uint256,address)", +"922e1492": "upgradePreparationActive()", +"922e7e06": "bignum()", +"922e92a3": "tokenFrozenBalances(address)", "922f17ce": "emptyEther()", "922f7124": "changeStrategyAddress(address)", "922fc84b": "taskProcessedNoCosting(uint256)", +"922fd67f": "timestampRepeated(uint256)", +"92301571": "MontlyBurn()", "923020d9": "whitelistMainSaleAddress(address,bool)", +"923108d9": "tokenHolders(uint256)", +"92314ae4": "SlotToppedUp(address,uint256)", +"92315df7": "mintBatch(address[],uint256[],string[])", +"9231cf74": "lastRewardTime()", "9231e0f9": "setPresidenteDeMesaVerify(bytes32,uint256,bytes32)", "923211f5": "showLiveDividends()", "9232494e": "BANCOR_NETWORK()", "9232fdb5": "addUserExp(address,uint256)", +"92333b0b": "Halted(bool)", +"9233ab1e": "LogResult(uint256,address,uint256,uint256,uint256,int256)", "9233c030": "_reward(uint256)", "9233c1d6": "battle(uint256[],uint256)", "9233d561": "setUnpaidPercentage(bytes32,uint8)", "92346ed7": "test1(bytes)", "92348055": "sellSoul(string,uint256)", +"9234bcc0": "topUpGas(address)", "9234c1fd": "MAX_REVEAL_DURATION_IN_SECONDS()", +"9234efaf": "setAllowedDelegate(address)", +"92358fc4": "moneyInEscrow()", +"9235d487": "_majorityOfGuardians(address)", +"9235edc6": "SubmitTicket(bytes32,uint256,bytes32,bytes32,address)", +"9235f45f": "mRewardLocker()", +"9235fcc4": "EventAppEntityLocked(address)", "92363a42": "createProduct(uint256,uint256,uint256,uint256,uint256)", +"9236585c": "intRate()", "923689e4": "startRecovery()", "92369bd5": "calculateAndDecreasePhaseSupply(uint256)", +"92370847": "countSmartpotTwo()", +"92372e9d": "howManyStandingOrNot(bool)", +"92376f40": "_transferBaseOut(address,uint256)", "9237a125": "seedDeposit()", "9237e074": "manager(uint256,address,string,uint256,bool)", "9237e61b": "InvestmentSucceeded(uint256)", +"92394f32": "getOrCreateNextDisputeWindow(bool)", "9239520b": "setQuorumPercent(uint8)", +"9239d645": "participantValues(address)", +"9239da4f": "_metaMintAmount()", +"9239e777": "checkAddi(int256,int256)", +"9239efbd": "approve_233(address,uint256)", "923a1abb": "SBCE(uint256)", "923a2e61": "JinGangCoin()", "923a367f": "PBToken(address,address)", "923a4227": "CiceroToken()", "923a69ae": "getCardRevenue(uint8)", +"923ae12b": "zoneIsEnabled(bytes2)", +"923b0a81": "getMemberClaimVotesToken(uint256)", "923b3e75": "publishContractTemplate(uint256,string,address,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", "923b9480": "getDatasCount()", "923b9bae": "EventCreatePet(address,uint256)", +"923bc8bf": "processForDynamic(uint256)", "923ce65f": "draftNewCard()", +"923d238c": "amountAirDropped()", "923d566d": "buyKey(uint256,uint256)", "923db49b": "informOffChainBuy(address[],bytes32[])", "923de8e2": "checkTransferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,bytes)", "923e1b84": "sendToEtheroll(uint256,uint256)", "923e2645": "DonationGuestbook()", +"923eda37": "getResume()", "923f098e": "CLNRefunded(address,address,uint256)", "923f1788": "convertChest(uint256)", +"923f1fa2": "Create(address,address,uint256)", +"923f645a": "registerUser(address,bytes32,bytes32,uint256)", +"923f78b4": "NnJNkjnJkmmKL(address,uint256)", "923f8455": "BACE_ETH()", "923f9bae": "testLedgerPayback()", "923fa0fe": "ChildContract(uint8,address,bytes32)", +"92401317": "uniHEXHXY()", "92403b35": "tier2Count()", "9240551b": "changeCurrentEtherRateInCents(uint256)", +"92408981": "BayToken(uint256)", "9240f699": "landmarkSize()", +"92411de1": "_repay(bytes32,uint256,address,uint256)", +"92413ddc": "acceptedLegacyAugmintTokens(address)", "92414146": "preIcoWasSuccessful()", "92414f92": "OpenDate(uint256)", +"92417cbc": "WinnerWinnerChickenDinner(address,uint256)", "92418cf6": "withdrawKncFee(uint256)", +"92420c90": "getTimeParameters()", +"92423383": "totalBNBCollected()", "924320b5": "isMajorityShareholder(address)", "9243e088": "setEnforceRevisions(bytes20)", +"9244adcd": "userInvestments(address,uint256)", "9244c21e": "preicoUSD()", +"9244c704": "executeSubmissions()", "9244f496": "addAddressToWhiteList(address)", "92450ac9": "setDataColla_AA_01(string,string)", "9245290d": "changeFeeCollector(address)", +"92452a0b": "setluckynumber(uint256)", +"924532fb": "isPendingArbitration(bytes32)", +"92458d54": "activeLocalContracts(uint256)", +"9245a284": "burnAllBCByCardName(string)", +"9245d583": "closeFlashLong(address,uint256,uint256)", "9246177b": "changeTicketOwner(address)", +"924669b2": "etherUser(address)", "9246ab77": "addWhitelist(address[],address)", +"9246d1ee": "indexOfCompletedTaskId(uint256)", "9246e531": "getSignature(string,int256)", "924720bd": "pizzaPrice()", +"9247cfe6": "setMintFeeAmount(uint256)", "9247ff59": "getAccountData(uint256)", "9248019e": "addMonsterIdMapping(address,uint64)", "924806a0": "returnToken(address)", +"92486764": "admin_renewLockedAddress(address,uint256)", "9248d4ec": "getEthNeeded(uint256)", +"9248ddb9": "getDSTacgia()", +"92491baa": "lastTotalAmountWhenDistributed(address)", "92491f21": "subTourFreezingTime()", +"924960a2": "isPublicHearing()", "9249993a": "BANCOR_GAS_PRICE_LIMIT()", "9249bc75": "set_sale_open()", "9249d865": "getAllLawyers()", +"924ab158": "withdrawFromEscrow(address)", "924b1235": "price1stWeek(uint256)", "924b39ae": "refundToWallet(address)", "924b573a": "lastWagerTimeoutTimestamp()", +"924ba506": "increment(uint256,uint256)", "924bb1d0": "updateETHPrice(uint256)", +"924bc0d6": "updateClaimSwitch(bool)", "924c28c1": "ContractInterface(address,address,address)", +"924c3e37": "deflectDev()", +"924c4196": "getDAI_SHARE_Ratio(uint256)", +"924c9677": "ACTIVE_ROLE()", "924ca55e": "LindaPresale(uint256,uint256,uint256,uint256,uint256,address,address)", "924ca61a": "coupon(address,address,uint256)", +"924ce781": "stakingAndDaoTokens()", +"924cff6d": "mintBatch(address[],string[])", +"924d27ab": "percentageDecimals()", +"924dce82": "LogDataSourceCallbackInt(uint8)", "924dd50a": "startSelling(uint8,uint256,uint256,uint128)", "924dedca": "getEpisodeDataCommand(uint256,uint256,uint256)", "924e63f6": "setDisputeResolver(address)", +"924eab3a": "setKeysToken(address)", +"924f2a28": "lpStakeReward(address)", "924f6be0": "CONTEST_INTERVAL()", "924fdaf6": "drawPorsche()", "925012f6": "agingTimes(uint256)", +"92501f29": "__comptroller()", "9250640d": "INIT_TOKENS()", "925074ca": "getAllPlots()", "92509c16": "lock_by_manager()", "9250b080": "picops_user()", +"9250c367": "investorMaxCap()", "9250d59f": "setIsSoftCapAchieved()", "925176d6": "sellRate(uint256,uint256,uint256)", +"9251a708": "ownerReclaim(uint256)", +"9251b1a7": "startRoadSale(uint256,uint256,uint8,uint256)", "92524725": "mintToMany(address[],uint256[])", +"92527037": "redemptionRateUpperBound()", +"9252e108": "TIMELOCK_POST_DUTATION()", "9252e819": "IGCoin()", +"925348c8": "_requireAccessToSuspend(bytes32)", "92535862": "custodyCounter()", "92536070": "RoomManager()", "925382c0": "setMigrated()", "92541925": "skynacoin()", +"92545883": "queryUserInviteRewardInfo(address)", "92549366": "remainingCapInEth()", "9254c2a8": "changeTotalRemaining(uint256)", +"9254f5e5": "vaiController()", "92550bdd": "applyMigrate(uint256)", +"92551cda": "lockedPrivatorForEcologyPartOneSupply()", +"92556d5e": "step4_requestFinalTransfer()", +"9255a391": "appendAccountIssuanceKindsRecord(address,uint256,uint256,uint256)", +"9255f809": "bag(address)", "9256759c": "addressFundAirdrop()", "9256c71d": "getPriceFeedsByOwner(address)", "92573a0c": "token_callg()", "925753d3": "TokenGenerationDisabled()", +"92576484": "constantsMultiVote(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,uint256)", "92579f34": "Aracle()", +"9257b591": "_mints(address)", "92584d80": "finalize(bytes32)", "92588071": "saveAddress()", +"9258b195": "addAssetBountyManager(address)", +"9258b71f": "setConfig(address,address,uint256,uint256)", "9258c8f8": "Applicationcoin()", "9258d5a3": "isIcoRunning()", +"9258db3d": "wolfSupply()", "925aa2ad": "purchaseWithEth()", "925ac216": "isICOOpen()", "925ad1e7": "collectAllForce(address[],address)", +"925afba6": "getProxyMasterCopyVersion(address,uint256)", "925b83a7": "getCobeFriend(uint256)", +"925be177": "creatorSettleValidatorEpoch(address,uint256)", +"925c4ee4": "createNFTSaleForETH(address,uint256,uint256,uint256)", "925cbdd1": "createCost(uint256)", +"925cc435": "tetheredReward_Stake(uint256)", "925cd80d": "contract_start()", "925d3ec8": "dDowngradeToBasic(bytes32)", +"925d60f6": "migrateLPtokens3manual(uint256,uint256)", +"925e0ccd": "stakeEnded(address)", +"925e3f95": "susdDeposits()", +"925e6808": "gluwaApprove(bytes32,address,bytes)", +"925ea78d": "testB()", +"925ead11": "minCratio()", "925f2573": "batchTransferDirectoryToken(uint256,address[],uint256[])", "925f7239": "veztUserRegistered(address)", +"925fc6c9": "setGroupMaturityPeriod(uint256)", +"926021d7": "addIToken(address,address)", "9260587e": "_removeTokenFrom(address,uint256)", "92609315": "addAuctionManager(address)", +"9260c14c": "getEthPerMona()", "9260e726": "giveReward(uint256)", "9260faf8": "issueForEuro(uint256)", +"92614c4e": "addPool(address,uint256,uint8,uint256,uint256,uint256,uint256,uint8,uint8,uint256,address)", "9262bba9": "titsTokenAuthor()", "9262d759": "getAddress(uint256,uint256)", +"9262da3f": "ethTotalUnlock(uint256[])", +"9262e7a5": "accruedDFLCurrent(address)", +"926323d5": "totalWeights()", +"92632a9e": "emergencyTokenExit(address)", "9263b559": "ethReceivedMain()", "9263e371": "mint(bytes32,string,string,string,string,string)", +"926420a4": "FundsDonated(uint8,uint256)", +"92642744": "mintNFT(uint256)", "9264a169": "tranferFrom(address,address,uint256)", "9264ee57": "valuePerMicroKey()", "92656b6d": "calculateHash(address[],uint256[])", @@ -83686,66 +153116,120 @@ "92670dc8": "currentBonus(uint256)", "9267a36d": "founderVestingContract()", "9267b291": "getGameStarted()", +"9267bd1e": "RefundEnabled(string)", "9267daba": "depositToGateway(uint256)", "9268037a": "FortressToken()", "92682b5f": "PauseOn(uint256)", +"92684938": "scrv()", +"92689925": "setRotAddress(address)", +"9268af6a": "valueOfAsset(address,uint256)", "9268e2d6": "setCLOUDForGas(uint256)", +"9268ea22": "bulkIssueByPartition(bytes32,address[],uint256[],bytes)", +"92695a88": "setBreedingLimit(uint32)", +"92696a0c": "agentAccount()", +"92697004": "rescuerCount()", "92698814": "reserved(bytes32)", "926994e6": "testFailSoftLimit()", +"9269b589": "set_borrow_fee(uint256)", "9269c0a7": "setABalances(address[],uint256[])", "9269e464": "bountyTokenAllocation()", "926a2456": "cancelIndexedSale()", +"926a3b88": "setupBoxPrice(uint256)", "926a4765": "getRoundStart()", "926a9af0": "distributeForFoundersAndTeam()", +"926a9ca1": "checkEventPrevented(uint256)", "926aa0a8": "sendEthTo(address)", "926b33c6": "playSpecificDoubles(uint256,uint256)", +"926b4e5f": "metaAddApprovers(bytes,uint256,uint256,address[],uint256)", +"926b9982": "safeguardOff()", "926baab2": "proofImpl()", "926bd180": "isGameVerified(uint256)", +"926bef63": "checkUserExist(address)", +"926bfcaa": "registerFee(address)", +"926c135b": "tokenTimeLock(address,uint256,uint256)", "926c196a": "depositAndTransfer(address,uint256,bytes)", "926d212e": "createGenerator(uint256)", +"926d7d7f": "RELAYER_ROLE()", "926dfd5e": "becomeYouTubemaster()", +"926e31d6": "unstake(address,uint256,address)", +"926e8aff": "notEqualIntFailTest()", "926f0c7b": "partnersFund()", "926f949e": "calculateWolkToBurn(uint256)", +"926f98e4": "Bond(address,address)", "9270040f": "drawHeroLottery(address,bool)", +"92704057": "_getTValues(uint256,uint256,uint256)", "92708ce1": "aletoken(string)", +"9270c759": "swapBorrowRateMode(address,address,uint256)", +"9270cc39": "CrowdsaleFinalized()", "92710c60": "finalizePublicICO()", "92716054": "freezer()", +"9271a988": "KNIGHT_MIN_TYPE()", "9271b8df": "totalPaidToFunder(bytes32,address)", "9271b997": "setHighScore(uint256)", "92721b86": "dividendRate(address,uint256)", +"92722a14": "MDNPerBlock()", +"9272aa4d": "LGEPaused()", "9272e3f5": "many_currencies()", "927319ba": "DCCToken()", "92731aaa": "changesLocked()", "927332da": "MaxChildLevel(address)", "92736527": "freezeGame(uint32,bool)", "92749978": "minBets()", +"92749f14": "getRemainAirdrop()", "9274c16b": "tokensDistributedToContributors()", +"92755860": "string3()", "9275ddd7": "SetFreeQPY(uint256)", "92760a3e": "loveName()", "92763585": "uniquePetsCount()", +"9276659f": "getPersonalCap(address)", "927675b8": "run(bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],uint256,uint256,uint256,uint256)", +"9276ade5": "getOracleInfo(uint256)", "92771e0f": "getCertificateMetaData(bytes32,bytes32,bytes32,uint256)", "927726ea": "_openPrize(uint32,uint32,uint256,uint256)", "927731c8": "payDepositByCandidate()", +"92773c86": "maxCoin()", +"9277b9d8": "juniorOperator()", +"92787b48": "removeLiquidityLauncherTemplate(uint256)", "9278c418": "targetWalletVerified()", "9279011c": "nextroundlength()", +"92791e0a": "removeHandle(string)", +"9279426c": "ApplyWithdraw(address,address,uint256,uint256)", +"9279965a": "bsg()", "927a11b6": "getBranch(uint256)", "927a4a7b": "transferWithLockAfter(address,uint256,uint256)", "927a90da": "icoOpen()", "927aaa7c": "setGeneManager(address)", +"927ac386": "isPresaleDone()", +"927ac44d": "editWhitelist(address[],bool)", "927ac4f5": "approveContractReceiveGameLockedToken(address)", +"927af625": "setTemporarilyLockDate(uint256)", +"927afe2e": "setMaxYvaultHalving(uint256)", +"927b26b9": "_baseRate()", "927bcac3": "emergencySplitToggle()", +"927c222e": "setShouldReserve(uint256,uint256[],bool)", "927c4151": "finalizePresale(address)", "927c60de": "BIKQuery(address)", +"927c8dd4": "setStageProperties(uint8,uint256,address)", +"927cc064": "ChangeAdmin(address)", +"927ced02": "getLavaPacketHash(string,address,address,address,address,uint256,uint256,uint256,uint256)", +"927d38f7": "CircleSwapRouter03_init2(address)", +"927d41ee": "Eligibility_Group_3(address,address,uint256)", +"927d6566": "reapFarm(address)", "927d9ab4": "set_building_amount(uint256)", "927da105": "allowance(address,address,address)", "927db818": "initPresale(address,uint256,uint256,uint256,uint256)", "927db81f": "new_entity(address,string)", +"927de8d9": "setArbitraryValue(uint256)", "927e434b": "rocketAddFunds(uint256,uint256,uint256)", "927e69e2": "_getBattleBonus(uint256,uint256,uint256,uint256,uint256)", +"927eb2dc": "_unaToken()", "927ed13a": "newClient(uint256,address)", "927f1086": "MAX_RANDOM_DELAY()", "927f4be0": "exhaustAfterBattle(uint256,uint256)", +"927f9ee9": "_getTotalAmountsForClosers()", +"92801230": "lib()", +"928090ac": "ERR_ALREADY_IN_WAIT_PERIOD_CHANGE()", +"928094bd": "calcPurchaseRet(uint256)", "9280b836": "spreadGold(address,uint256)", "9280df59": "Swapcoinz()", "928161ca": "recoverFundsAndDestroy()", @@ -83755,6 +153239,7 @@ "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)", +"92828671": "getMaxFee()", "92829174": "preCrowdsaleTokensWallet()", "9283032c": "storeWeekUnclaimed()", "9283da60": "TeamtokenRelease1()", @@ -83762,84 +153247,157 @@ "92842802": "changeTierAdmin(address)", "928432c0": "releasedSteps()", "92844ddd": "_setUserRole(address,uint8,bool)", +"9284521c": "theMint()", "92846ab6": "put_transfer(address,address,address,uint256,bool)", "92848c9e": "create(uint256,uint256,uint256,uint256)", "9284cb0c": "getTotalPreSelled()", +"9284f497": "phone()", +"92855f54": "avgInt(uint256,uint256,uint256,uint256,uint256)", +"9285948a": "recoveryAddress(address,address,address)", "9286904c": "set_doctor(uint256,uint256,string)", "928693c6": "RusaToken()", +"92870904": "initialoneTime()", +"92871f98": "setWithdrawBeforeReinvesting(bool)", "928771bb": "janPot_()", +"92877ddc": "nextId(uint256)", "92878bd0": "forwardFunds(address,uint256)", +"92879702": "forceUpdateLockStatus(address,bool)", "9287c877": "getNavLength()", "92885e86": "CountryPurchased(uint256,address,uint256)", +"9288aab3": "globalWithdrawableEth()", +"9288c218": "tickToDecimalString(int24,int24,uint8,uint8,bool)", "9288cebc": "totalRollsByUser(address)", "92890b09": "SmithToken()", +"928927ec": "setEnableTRIP(bool)", "92893fb9": "hasAddressVoted()", +"928962f4": "registerAmount()", +"9289763c": "userRewardPerTokenCircle(address,uint256)", "92898900": "allowTokenTransfer(address)", +"928989f9": "oldSC()", "928993dd": "setBuyComissionUnits(uint256)", +"9289a45f": "availableWinnings(address)", "928a00d2": "deleteCoin(uint256)", +"928a1747": "_totalCars()", +"928a2d8f": "burnRemainderBBY()", +"928a6270": "_checkSubscription()", +"928a735a": "INBOX_OFFSET()", +"928a7a4d": "roundStartedLog(uint256,uint256,uint256)", +"928ac517": "totalEthValue()", "928b06b5": "EAsset()", "928b4cd2": "preICOTokenHardCap()", "928b685c": "_buyPutToClose(uint256,uint256,uint256,uint256,address)", +"928b733e": "addInitialLiquidity(address,uint256,uint256,bool,address)", "928b792e": "withdrawBonuses(bytes32,uint256,address,uint256,address)", +"928bc6a0": "buying()", +"928c39cd": "slatdata(uint256,uint256)", "928c5fb3": "getArrIntField3()", "928c82a2": "createAsset(string,string,string,uint256,address)", "928d09dd": "coreTeamAddr()", +"928d1b73": "getLastKey(uint256)", "928d20fc": "_unpackPetValue(uint256)", +"928d300e": "withdrawCollateral(address)", "928d4144": "verify(uint256,uint256,string,uint8,bytes32,bytes32)", "928d81c1": "withdrawERC20Token(address,uint256)", +"928d89ae": "cliffInMonths()", "928e6592": "sellingPriceInDayOf(address)", "928e6b16": "getUint(bytes4)", "928f0cc7": "ChangeStartByManager(uint256)", "928f16e3": "geCompoundTimestampsFor12Months(uint256)", +"928f829a": "onEndMatch(uint256,uint256)", "928fca1d": "withDrawlocked()", "928fd553": "Migrated(address,address,uint256)", +"928ffa9a": "FrostBiteTerminated(address,uint256)", +"928ffe0f": "unwrap(string,address,address,uint256)", "929066f5": "isParticipant(address)", +"9290f97f": "cRewardWithdraw()", "9291b1f3": "tradeDealConfirmed()", +"9291d563": "updateDevAddr(address)", +"92920522": "setRewards(address[],uint256[])", "92925c3b": "supplyTokens()", +"929272f6": "swapOutTusd(address,uint256,address)", +"92928e04": "initialize(address,address,bytes32,string)", +"9292a849": "swapshipPerBlock()", +"9292ab5f": "getNumDistributionTokens()", +"9292b058": "backCampaign()", +"92930b86": "a_gt_than_b()", +"92931298": "VM()", +"92931cfa": "daoShareScale()", +"92934f52": "getVaultMaster()", "9293cc10": "TOU(uint256,string,uint8,string)", "9293eb2f": "totalScammedRepaid(address)", "9293f41e": "sendInviteDividends(uint256,uint256,uint256,uint256[])", "92940bf9": "transferERC20Token(address,address,uint256)", +"929417db": "patronageOwed()", "92946284": "_placeSellTokenOrder(address,uint32,uint256)", +"92949a78": "batchAddWhiteListAddress(address[])", "9294e012": "sendOracleData()", "92956506": "StarxCoin()", "92958b7d": "markTokensToSell(uint256,uint256)", "9295d038": "loyaltyPart()", +"92966a59": "boss4()", "92968125": "getUserDetails(address,uint256)", +"92969b30": "setAcceptedLegacyAugmintToken(address,bool)", +"92976179": "getNFTPrice(uint256)", "92979037": "teamTwoDivsUnclaimed()", "9297afa2": "Eliminate(address,uint256)", "9297c24c": "command()", "9297d758": "DiceManager()", +"9297d860": "recoverToVault(address)", +"92990bea": "updatePair(address,uint256)", "929911be": "takeSnapshot(address)", "9299e552": "cancelListing(bytes32)", +"9299eb30": "setSupervisor(address)", "9299f294": "_buy()", +"929a2a08": "amountByMint()", "929a3c18": "EMGwithdraw(uint256)", +"929a634a": "VestingHours(uint256)", "929a79b1": "getTitle(uint256)", "929aa851": "maximumTokensForFifth()", "929ac519": "changeOwnersWallet(address)", +"929ae8a1": "getBoostersOfCard(uint256)", +"929b6109": "sellERCIforDai(uint256)", "929ba8bf": "transferFromRwrd()", "929c4649": "startUpgrading()", +"929c5179": "deduct(address,address,uint256)", "929c52a7": "changeClosingTime(uint256)", +"929c6971": "getGlobalAmount(address)", +"929c8849": "availableToBorrowReserve()", +"929d1910": "updateWeather(string,string,string,string,string,string,string)", "929d2033": "takeUpWork()", "929de7c9": "setData_21(string)", "929e626e": "getShareDistribution(bytes32)", +"929e76fe": "minStaked()", "929e902d": "curVotes()", +"929e9c04": "getHandlerAmount()", +"929ec455": "current_id()", "929ec537": "getLockedAmount(address)", +"929eea21": "lenders(uint256)", "929f11ea": "withdrawOwnerAmount()", "929f8dd4": "createBet(address,address,uint256,bytes32[])", +"929fc539": "acceptExpirationPeriod()", +"929fe9a1": "checkMembership(address,address)", "92a04621": "maxPurchaseNum()", "92a08dd1": "getCustomField(uint256,bytes32)", "92a0fd64": "reserveTokenWallet()", "92a11827": "canRevokeVesting(address,address)", +"92a14fb0": "_getUniswapExchangeForTokenPair(address,address)", "92a20d0c": "ANONIMX()", +"92a29e30": "getShifterBySymbol(string)", "92a2b44b": "offerTkn(uint256,uint256)", +"92a2d846": "createBatch(uint256,uint256)", +"92a3505f": "autoToWantRoute(uint256)", "92a38e71": "createOpenValentineRequest(string,string,string)", "92a39634": "VoltOwned(address)", +"92a3f617": "lockUpBlocks()", "92a42704": "verifyOwnership()", +"92a448a2": "secondaryTaxReceivers(bytes32,uint256)", "92a48bea": "setOfferContract(address)", "92a4cc25": "readFrom(uint256,int256)", +"92a4f402": "setHexEthExchange(address)", +"92a59620": "createETF(string,uint256[],uint256[])", "92a5f340": "BasePrice()", "92a69395": "setTotalAirDrop(uint256)", +"92a6a4f3": "asksMapping(address,address,uint256)", "92a70756": "m_thawTS()", "92a70c42": "deployerHash()", "92a73fb8": "testbool(bool)", @@ -83849,20 +153407,45 @@ "92a793d0": "release_3()", "92a81127": "BasicMilestones(address,address,bool)", "92a8424d": "setPercentageCW(uint256)", +"92a85fde": "baseCurrency()", +"92a88fa2": "traders(address)", +"92a90387": "loanSizeWithinBounds(uint256)", +"92a91a3a": "tokenAt(uint256)", "92a93d33": "payAltCoin(bytes32,address,address,uint256,uint256,bytes)", +"92a950b6": "transferLocked(address,uint256,uint256)", +"92a985c0": "buyGaufWithEther()", +"92a98c0d": "subd(uint256,uint256)", +"92a9b7e9": "decreaseNextBalance(uint256,uint256)", +"92aa06bc": "setOneSplitParts(uint256)", +"92aa43c0": "setTGE(address)", "92aaa019": "Inventor()", +"92ab2daf": "marketMakerDeposit(address,address,address,uint48,uint256,uint256,address)", +"92ab5e8f": "writeLexScript(string,uint256,address)", +"92ab89bb": "undelegate()", "92abb859": "overrideBlock()", +"92abca3b": "emergencyWithdrawalUSDT(uint256)", "92acb4d6": "contributorList(address)", "92ad728b": "staff_2()", +"92adfcac": "releaseAllFunds(string)", "92ae0530": "canUpdateFrontWindowAdjustmentRatio()", +"92ae1e5b": "getPendingUnlocked()", +"92ae2964": "allBetsSeq()", "92aea05a": "expLimited(int128,int256)", +"92aec23c": "mintLiquidityFee(uint256,uint112,uint112,uint32,uint32,uint112,uint112)", +"92aec2fc": "pack(string)", +"92aee684": "defaultCommissionMax()", "92af0605": "playSystem(uint8,uint8,uint8,address)", "92af7ce0": "throwsWhenGettingTokensWithEndedSale()", "92afac6d": "reserveY1()", "92afc33a": "ROLE_MINTER()", +"92afec74": "ChangedOwnerCutPercentage(uint256)", "92b03120": "CONTRIBUTION_START()", +"92b04585": "occupied(uint256)", +"92b09aec": "callG2(address)", "92b0c5b2": "pow(int256,int256)", "92b0d721": "mold(bytes32,uint256)", +"92b0ed1a": "fromUint256HexFixed(uint256,uint256)", +"92b0f3d3": "inserirOuvidoriaNoCadastro(address,bytes32,uint8,bytes32,bytes32)", "92b0fed8": "ChannelFactory()", "92b1696d": "CNYToken(uint256,string,uint8,string)", "92b18819": "getPoolFirstExpertStaker(uint256)", @@ -83870,196 +153453,329 @@ "92b1b0ce": "RachelToken()", "92b1b418": "tokenFallbackTest(address,uint256,bytes)", "92b25a71": "Wallet(bytes32)", +"92b2ed79": "rmtPerBlock()", "92b3228c": "getIreg()", +"92b34620": "removeWithdrawOperator(address)", "92b39bf4": "assignPatient(uint256,uint256,uint256,uint256)", "92b46390": "changeDevAddress(address)", "92b4b68a": "get_bettor_nfo()", "92b4bb50": "rps()", "92b4ddeb": "phase_3_Time()", +"92b56d6f": "fatPerBlock()", +"92b623fa": "MODERATION_POOL_CAP()", "92b6641a": "hardCapHigh()", "92b6ebfa": "getPreIcoBonus(uint256)", "92b7bd27": "removeOwner_(address)", "92b7bfbb": "TransferRate()", "92b7d5b9": "getCurrentGaslimit()", +"92b7f1db": "getCalled(uint256)", +"92b851ed": "isKittyOwner(uint256)", "92b863f3": "AbabPreICOToken()", "92b87751": "_balanceOfUnclaimedMilk(address)", +"92b90569": "releaseAirdrop()", "92b9308c": "getRespectiveValue(address)", +"92b93774": "_addDORequest(uint8,uint8,uint8,uint8,uint16,uint8,uint8,string,string,string,string)", "92b96432": "setBpTime(uint256)", "92b9fe8b": "Xenon()", +"92ba1fc2": "deploy(uint256,uint256,uint256,uint256,uint256,uint256)", "92ba4ba6": "GridMember(string,uint256,bool,address,address)", "92ba77ca": "setVeto(uint256,bool)", "92bad6f4": "getNumber(uint256,uint256,uint48)", +"92bb28e4": "postponeStake()", "92bb3e6a": "setCoverImage(uint256,bytes)", +"92bb481a": "uploadFile(string,string,string)", "92bbf6e8": "E()", +"92bc3117": "canSwap(address)", "92bc3251": "getCuts()", "92bccb80": "pauseRedemption()", "92bcf0d5": "ICO_PHASE2_LIMIT()", "92bd38bc": "fundCampaign(uint256)", "92bd3f16": "mainsaleTotalNumberTokenSold()", +"92bd87b5": "toEthSignedMessageHash(bytes)", +"92bdee5d": "setuniLP(address)", "92bdf9ba": "lockedCollateral(address)", "92be2ab8": "setRegisterFee(uint256)", "92be5d13": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256)", "92be675f": "Y1_lockedTokenAmount()", +"92be6da7": "UpdateStudentRecord(uint256,uint256,bool)", "92bec526": "GameChannelConflict(address,uint256,uint256,address,address,uint256)", "92bec5c3": "distribute(uint256,uint256,address)", +"92bf2be0": "getSourceOfAsset(address)", "92bf2bf1": "changeMinimumContribution(uint256)", "92c00590": "getAddReserveSignatures()", "92c00a3f": "transferState()", "92c00f3c": "investorsTokens()", +"92c00f67": "getPoolStakedBalance(uint256)", +"92c03ff2": "pendingEcosystem()", +"92c08871": "checkBlockInfo()", "92c19394": "packStore(address)", +"92c1deec": "Distr0(address,uint256)", +"92c212d8": "estimateFee(bytes32,uint256)", +"92c238d8": "usersRelationshipInfo(address)", "92c2bcb4": "changeRecipient(address)", "92c31e61": "ZOINToken()", "92c40344": "getReferralCode(address)", "92c4a5ed": "MinBetUpdate(uint256)", +"92c51d3a": "toSell(address)", "92c537e9": "hatchStartTime()", "92c54f92": "sit(uint8)", "92c5769d": "unlockAddressAfterITO(address,address)", +"92c5c407": "addFinance(address)", +"92c60611": "getMakerTakerBalances(address,address,address)", +"92c677a0": "openDeposit(address,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256)", "92c6b697": "claimGanaTokens()", "92c6bf28": "getWalletsData()", +"92c6ef11": "azumaContractAddress()", "92c70af1": "MAX_UN_LOCK_TIMES()", "92c787ae": "register_recurcively(uint256)", "92c8412f": "buykey(uint256)", "92c87280": "joinProvider(uint256)", "92c88a40": "CollectibleToken()", "92c8eb96": "DSFalseFallbackTest()", +"92c92f9e": "writeStore(uint256)", "92c9a11a": "getPrices2(uint256,uint256,uint256)", "92c9a926": "stateStartDate()", "92c9a9e2": "activateDestruction()", "92ca3a80": "SingleTransact(address,uint256,address,bytes)", +"92ca60c1": "funding(uint256)", +"92ca9589": "calcFTFixed(uint256,uint256,uint256,uint256)", "92cb5f19": "TokenTemplate(uint256,string,uint8,string,address)", +"92cb74b2": "retryMapping(uint256)", +"92cb8244": "meowthPerBlock()", +"92cb8423": "giveMEeth()", "92cb9030": "getFeeWindowForForkEndTime()", +"92cbaf06": "feePerOrder()", "92cbda09": "subbtycmoney(address,uint256)", "92cbeb59": "OracleBitstamp()", "92cc2c94": "drainRemainingTokens()", +"92cc4760": "STAKE_PERCENTAGE()", +"92cca541": "setPayoutOwner()", +"92ccf450": "Withdrawn(address,uint256,uint256)", "92cd1ff2": "ETH_DECIMALS()", "92cd2b99": "asciiToUint(bytes1)", +"92cd7390": "juld()", "92cdaaf3": "fulfillEthereumPrice(bytes32,uint256)", "92cdb7d5": "deathData_a15()", +"92cdbac5": "sell(address,uint256,uint256,uint256)", +"92ce9b82": "burnDepositSeconds(address)", +"92cea859": "nextWithdraw(address)", +"92ceb12d": "ClaimReward(uint256)", "92cf1d49": "setStop()", "92cf9d45": "scriptAddresses(uint256)", "92cfd461": "_createMedal(address,uint8)", "92cfebd6": "LanaCharleenToken(uint256,string,string)", "92d09ceb": "collateralAmount()", "92d09f22": "pendingInvestContracts(uint256)", +"92d0c80a": "getAllStakingRewards(address[],address[])", "92d0d153": "t()", +"92d0d232": "add_type(string,uint256)", "92d16464": "gameIsOver(uint256)", +"92d16f51": "mintOrBurnOly(address,uint256)", "92d1abb7": "CONVERTER_CONVERSION_WHITELIST()", "92d25259": "iBlock()", "92d267c1": "setEthUsdRateInCent(uint256)", "92d282c1": "Send()", +"92d2a6bc": "isOracleFinished(uint64)", "92d2f118": "burn(uint8)", +"92d3016c": "buyInstrument(string[],uint8[],uint256,uint256[],bytes[])", "92d33200": "MAX_CRATES_TO_SELL()", +"92d33ce4": "bunnyPool()", +"92d33e1b": "NewWalletAddress(address)", "92d3be79": "escrowWallet()", "92d42475": "bbReserveWallet()", "92d44650": "tokenApproves()", "92d4d9ac": "verify(bytes32,address,uint8,bytes32,bytes32)", "92d519de": "ATSXToken(address,address)", +"92d51b57": "addTokenLog(uint256,string)", +"92d5768f": "migrateContest(uint256,address)", "92d588a0": "INITIAL_COINS_FOR_VIPPLACEMENT()", "92d59aff": "Take_payout()", +"92d5a1ae": "BETS(uint256)", +"92d5f649": "ERR_TOKENS_SWAPED_ZERO()", "92d60433": "CirculatingSupply()", "92d66313": "getYear(uint256)", "92d68619": "Multiplication(int256)", +"92d698f9": "permis6()", "92d69a39": "addNodesToList(string,address)", +"92d79ddb": "generateKey(address,uint256,uint256,address,uint256,string)", "92d7b620": "judge(bytes32[13],uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", "92d7f787": "getAccountWhitelist(uint256,uint256)", +"92d81e90": "distributionContract4()", +"92d894f8": "lendingFeeTokensPaid(address)", +"92d89c17": "removeInvestorLock(address)", "92d8c8cf": "setupImportFee(address,uint256)", +"92d8e089": "setAgicEquityCard(address)", "92d98e95": "content(string,uint256,address,uint256,uint256,uint256)", "92d996d7": "getPopularityByOffset(uint256)", "92d997bd": "QuantityInitial()", "92d9e3b8": "isAcceptingPayments()", "92da29d2": "validPurchase(uint256,uint256,bytes)", +"92da6571": "getBonusRo(uint256)", "92da856d": "currentStepIndexAll()", "92dac258": "getAuctionItems(uint256[])", +"92dae580": "setFaucetRates(address,uint256,uint256)", "92daec51": "setLastBuyer(address)", +"92db2816": "programs(uint256)", "92dbf585": "appendEarlyPurchase(address,uint256,uint256)", +"92dc16c9": "lock(address,uint256,uint256,address,uint256,uint8)", +"92dc8d46": "dropTokensFixedAmount(address[])", "92dcf35d": "fourthExchangeRatePeriod()", "92dd1246": "updateListReq(uint256,uint256)", "92dd38ea": "arrayaccess(uint256)", +"92dd5c9e": "setLiquidityDivisor(uint16)", +"92ddebf3": "petitionsigners(uint256)", "92df61e8": "withdrawTokensFor(address)", "92df6e91": "fortune_limitbreak()", "92df94ec": "updateDream(address,string,string)", +"92dfa9f9": "getFunctionBySignature(string)", +"92dfd0aa": "pIDxCards0_(uint256)", "92dff48a": "backers()", "92e0ba2a": "goldBought()", +"92e10645": "LogNewRequestURL(string)", +"92e11500": "lootbox(uint256)", "92e11e24": "teamAmountLeft()", +"92e1290b": "approve_208(address,uint256)", "92e16740": "scheduleOraclize()", "92e18d9f": "setYcmContractAddress(address)", +"92e1a295": "distributeRepayBorrowWpc(address,address,bool)", "92e1ab17": "includesAddressesSet(address)", +"92e20b94": "setLevelDistribution(uint256[10])", +"92e2cae6": "buyNewLevel(address,uint8)", +"92e2d88f": "addprivateList(address)", "92e33d14": "enableWithdraw(bool)", +"92e38756": "ndao_supply()", +"92e3f8af": "newReg(address)", "92e405ac": "transferPartner(address)", "92e41c69": "identityEthAddress()", "92e4226a": "nextTransferFeeAbs(uint256)", "92e423b5": "agent(address)", +"92e4787f": "allocations2(address)", "92e4b733": "_transferTokens(address)", "92e4b8a4": "collectAuthorizedPayment(uint256)", "92e4cd75": "icoTokensUnsold()", +"92e4d082": "pool_SFI_rewards(uint256)", "92e598f3": "test_fourInvalidEqInt()", "92e5c9c9": "isBusinessOwnerConfirmed(address)", +"92e6d68b": "addressWhitelists(address)", +"92e75d51": "delistChild(uint256)", +"92e793db": "approveForContract(address)", "92e8202b": "withdrawInvestmentsOwner(address,address)", "92e8438c": "issueTokensMulti(address[],uint256[])", +"92e8487e": "removeConfigByUnderlying(address)", +"92e84e5b": "encodeClaim(address[],uint256[],address,uint256,uint256)", "92e8d866": "DailyGrowthUpdate(uint256)", "92e9fd5e": "ColdWallet(address,address)", +"92ea721c": "delete_index(uint256)", "92eaa642": "transferLoveStory(bytes16,bytes32,bytes32,uint256)", "92eada50": "lastBlock_a16Hash_uint256()", "92eb35bc": "preSaleBonuses(uint256)", "92ebf860": "invalidateTaskListingAtIndex(uint256)", +"92ec22a7": "view_enum()", "92ec6ea8": "updateAsset(uint256,string,uint256)", "92ecf577": "getCurrentTerm()", "92ecf690": "grantToSetUnburnableWallet(address,bool)", +"92ed18c5": "setFurnaceStrength(uint256,uint256,uint256)", +"92ed5460": "spotFab()", "92ed888b": "CcifToken()", "92ee0334": "currentUser()", +"92eea07b": "setParamType(uint8,uint256)", "92eeee63": "createAndBuyAllAmount(address,address,address,uint256,address,uint256)", "92eefe9b": "setController(address)", +"92efc453": "verifyProduct(string)", "92efd277": "countOfDeedsByOwner(address)", +"92efe56c": "reclaimASIS()", +"92efefec": "getAllPendingAmount(address)", "92f00233": "minterContract()", "92f00d37": "TalkToExpertToken()", +"92f0c264": "hakka()", +"92f1a836": "subIssuedSynthsByERC(address,bytes32,uint256,uint256)", +"92f1b4ed": "track_balances(address)", "92f1fc7d": "bytes32_to_bytes(bytes,bytes)", +"92f22368": "TwoTSymbols(address,uint256)", "92f351f9": "openTimer()", +"92f36f82": "xmonNFT()", +"92f3d178": "setRewardVestingPeriodInSecs(uint256)", "92f461ed": "getTeamsOfOwner(address)", "92f48846": "updateTokenSellAmount(uint256)", "92f4d225": "spankToken()", +"92f4e5ef": "token1Slot()", "92f52ddf": "DICE()", "92f53757": "GLAM()", +"92f54afc": "isForcedWithdrawalPending(uint32,address)", "92f5cea7": "bytes32ToString(bytes32,bytes32)", +"92f61930": "lastTotalSupplyOfLPTokens()", +"92f63d2e": "aETH()", "92f692ea": "setInvitationValidPeriod(uint256)", "92f6a74f": "totalTokenCapToCreate()", "92f7ba17": "MELONPORT_COMPANY_STAKE()", +"92f88a5b": "Pregnant(address,uint256,uint256,uint256,uint256)", "92f8de45": "MXToken()", +"92f8def2": "InterestPool_()", +"92f8f4fc": "STARTING_SUPPLY()", "92f926e5": "makeMoveBro()", +"92f93fb0": "projectInit(address)", "92f96115": "setPartialTransfers(address,bool)", "92fa1453": "BankAccount()", "92faad99": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256)", "92fb4acd": "terminatePackage(address)", "92fb7ef8": "burnPoll(uint256)", +"92fc3b8b": "getStructEntryIndex(string)", +"92fc6e14": "firstHouseClose(uint256,uint256)", "92fd1c2d": "bat_match(uint256[])", "92fd1f01": "getPayeeAddress(bytes32,uint8)", "92fe028b": "PokerWinner()", +"92fe2d6d": "mOldAmount()", "92fe4098": "b32ToBytes(bytes32)", +"92fe5d2f": "_addCollateral(address,address,uint256)", "92fee51a": "setICORatio(uint256)", "92ff0d31": "transferable()", +"92ff1ad9": "caster()", "92ff3751": "getMatchHomePlayers(uint256)", "92ff4be4": "finalLottery()", +"92ff6aea": "circulatingSupply(uint256)", +"92ff6dec": "swapSourceAddress()", "92ff7859": "newFutureLottery(uint256,uint256)", +"92ffde66": "getBestRateToken(address,address,uint256)", "93003033": "tokenSalesAll(uint256)", "93004e62": "initPayoutTable(uint256,uint256)", +"93008a78": "calculateHealthFactorFromBalancesInternal(uint256,uint256,uint256,uint256)", +"9300bd5c": "useManagementFunds(uint256)", +"9300c926": "setValidators(address[])", +"9300c96f": "updateInvestorPairPerShare(uint256)", +"9300f3e1": "isValidOpenkey(string)", "93012d5f": "Loan(uint8)", "9301bc88": "mapping(address,uint256)", "9301eb36": "setItemOption(uint256,string)", +"9301f2e6": "highestBidValues(uint256)", +"9302764d": "systemFees()", +"93028d83": "discardFeeVote()", "9303633e": "tier_rate_2()", +"9303b16f": "setTimeLockPeriod(uint256)", "930429ea": "setFOUNDERS_POOL_ADDR(address)", "93046a13": "withdrawEtherPayment()", +"9304b780": "getUserClaimableAmountFor(uint256)", "9304ddc8": "setUnitCreationFee(uint256)", "93051424": "KIUSToken()", +"93055e72": "ETH_swap_CT()", +"930560b8": "transFer()", "9305b0f8": "WorldSafetySecurityToken()", +"9305ea2a": "availableQuantity(address)", "9306099f": "GxOrders(address)", "930622ed": "assignedAmountToMarketExpand()", "9306635a": "PETRO(uint256,string,uint8,string)", +"93066b4c": "sponsors(uint256)", +"9306fd3d": "dailyFee()", "93072684": "revokeDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address)", +"93075c68": "sellCompleteSets(address,address,uint256,bytes32)", "9307ca0f": "houseKeep(int256,uint256)", "93080cd4": "replaceChannelContractAddress(address)", "9308151b": "crowdSaleTokens()", "9308353f": "payin()", +"93084b34": "addLender(address)", "9308a865": "total_raised()", +"9308d349": "MainAddress()", "930916b2": "setInviteCode(string)", +"93098d0b": "updatePoolReward(address[],uint256[])", "930a0daa": "checkMinimumQuota(address,uint256)", "930a80b4": "testAuthorizedSetPackage()", "930a9d92": "tradeOrder(address[3],uint256[5],int256,int256,uint8,bytes32,bytes32)", @@ -84073,33 +153789,53 @@ "930cb83e": "registerUsers(address[],uint256[],uint256[],uint256[],uint256[])", "930cbf89": "ProposalAdded(uint256,address)", "930cd62e": "getIcoInvestorsAddressesCount()", +"930ce78c": "burn_address()", "930d54b4": "revealSeckey(uint256,bytes32)", +"930d85e3": "enableTXLimit()", +"930d897e": "BondContract()", "930db1ab": "setHijackPrice(uint256)", "930ddb8e": "getIdea(address)", +"930df82e": "getWithdrawManagerAddress()", "930e1173": "tokensReadyForRelease(uint256)", +"930e1b09": "headerRelayersSubmitCount(address)", "930e23b9": "_STCnContract()", +"930e5193": "estimateNFT(address)", +"930e587b": "assignUnixDurationToHitButton(uint256)", "930ed251": "getSavedVar()", +"930eee7b": "getDonator()", "930f5fbe": "setApplicationChecksum(bytes32)", "930fed29": "EnkronosToken()", "931010eb": "tokPrizes(uint256)", +"9310527d": "generate(uint256,uint256,uint256)", "93107071": "PDAToken()", +"93107298": "receiveFor(address,uint256)", +"93109ff3": "Moderators(address)", "9310ba96": "TIX(uint256,address,uint256[],uint256[])", "93119312": "returnMoney()", +"93119a83": "patients(uint256)", +"9311ca69": "conversion()", "9312434e": "cryptocompareUsdOracleUrl(bytes32)", "931274c8": "createContractScene(string,uint256[])", "9312766d": "BSTokenData(address)", +"93129bd3": "roundinfo()", "9313053e": "createItems(address)", +"93132366": "_getMyDORequests()", "93138faa": "isProviderParamInitialized(address,bytes32)", "9313919a": "multipleShotTokenRepartition(uint256,uint256)", "9313dc43": "claimTokensFromErc677(address,address)", "9314be9d": "lock(bytes32,bytes32)", +"9316251f": "NewETHPrice(uint256)", "931634fd": "PGTBToken()", "93167204": "teamTokensPercent()", "931688cb": "updateBaseURI(string)", +"93168a5b": "_setQsConfig(address)", +"93168a86": "addAssets(string,address)", +"9316bdc0": "MyStakes(address)", "9316c3e7": "transferBulk(address[],uint256[])", "931742d3": "commissionAddress()", "9317cb37": "CUTOFF_PRESALE_ONE()", "9317d6d3": "totalReceived(bytes32)", +"93180eca": "VotesByCaster(uint256,address)", "93183dc9": "paymentManager(address,uint256)", "93192c65": "ProposalAdded(address,uint256,uint256,string,bytes32)", "931983ad": "Connection(address,address)", @@ -84109,36 +153845,63 @@ "931b3385": "claimToken(address,string)", "931c0040": "carrotsMultiplier()", "931c6246": "VestingWallet(address)", +"931c7c68": "history(address)", "931c8ba7": "count_products()", +"931c9769": "_avoidZeroAddressManipulatins(address,address)", +"931c9b99": "someNumber()", +"931c9f32": "makeGuess()", "931cd0cc": "setBQL(uint256)", +"931d4808": "pendingStaking(address,uint256)", +"931d5a38": "constant_target()", "931dab50": "allocationAmount(uint256)", "931df75f": "validateProposedThroneName(bytes)", "931e44e2": "BuyLandsByEth(uint256)", "931e7daa": "BettingKing()", +"931f495b": "TokenURIUpdated(uint256,string)", +"931f6cd8": "_getTransactionFee()", "931fbdd8": "Trenggalek()", +"93204075": "plyrRnds_(uint256)", +"9321aa2b": "takeOutFundingRaised()", "9321cb7d": "SGT()", "9321dc5f": "initRequest(uint256[])", "9321e603": "changeMtcDailyLimit(uint256)", +"932212eb": "Batch(uint256)", +"9322431f": "AmountToPayStakingCurrent(address)", +"932256be": "x_adminChangeProxyURL(address)", +"9322957d": "D100()", +"93229e71": "IPOprofile(uint256)", +"9322cebf": "getPriceFromOracle(address,address,uint256)", +"93231f90": "changeCoreAddr(address)", "932354c1": "updateLocation(string)", "93237833": "CONTRACT_HOLDER_BONUS()", "9323eaad": "awardUnitRafflePrize(address,uint256)", +"9324cac7": "sUSD()", "9324dfff": "addWhitelistedTokenAddr(address)", "93253a9d": "PublickOffering()", +"93254b0e": "MAX_ORDERS()", "93257d33": "CheckForFloating(address,uint256)", +"9326a8f0": "fightEvent(address,address,uint256,uint256,uint256)", +"9326ef48": "setUnderlyingPriceAdjustPercentageOnAcoPool(uint256[],address[])", "93272baf": "getTokenType(address)", "93275889": "ChangeTax(uint16)", "9327891e": "testSetRole()", "932838a1": "setCell(address,uint256)", "9328bfc1": "getNumMessages(address,address)", +"9328ec36": "PendingReward(address)", "9328fa02": "capitalAllocatedTo(address)", "9329066c": "getJackpot()", +"93296a59": "compoundingAPY(uint256,uint256)", "93299395": "revokeEditAgentAuthorization(address)", "9329f2fe": "postico_startdate()", "932a0ee7": "getShowTextBytes96()", "932a7b2e": "addApp(address,address)", +"932aa60c": "restakeProfit()", "932adda2": "newNode(bytes32,bytes32,bytes32,bytes32,bytes32)", "932ae363": "buyerNumDeals(address)", +"932b79f6": "transferToken753(address,uint256)", +"932b8185": "isDepositedTokenCap()", "932bead7": "updatePlanetURL(uint256,uint256,uint256,string)", +"932c0e2d": "pledgePickles()", "932c1081": "closedHour(uint8)", "932c360d": "SpaceRegistry()", "932c90f3": "SUPPLY_FOR_TEAM()", @@ -84151,118 +153914,226 @@ "932f9f89": "testThrowInvalidProvider()", "932fad1f": "totalWageredForOutcome(uint8)", "932fd99f": "toHighestDenomination(uint256)", +"932fe013": "getProver(bytes32)", "932fec40": "refundToken(address,address,uint256)", +"93301ffe": "EndSession(uint256,uint256,uint256[10],uint256)", "9330f97f": "removeDestinationByIndex(uint256)", "93311632": "getTokenClaim(uint256)", +"93312f5d": "additionalInfo(bytes32)", +"933166e1": "creators(address)", "93316cdf": "selltoken(uint256)", "9331a922": "get_layer(uint256)", +"9331c112": "poolDecrease(string,uint256,uint256,uint256)", +"9331c742": "setProtocolFeeMultiplier(uint256)", "93320f2e": "expRequiredToReachLevel(uint256)", +"933228a1": "LogSlasherUpdated(address,address)", "93325812": "addFreelancerTotalInvoiced(address,address,uint256)", "9332b62c": "changeAllowAllWhitelistTransfers(bool)", +"9332cf05": "tokenPayNoderSlot(address)", +"9332d2e6": "votar(address)", +"9333054d": "rMap(bytes32,uint256)", "93331892": "batch(address[],uint256)", +"9333768f": "PIVOTCHAINSupply()", "9333a122": "ITECH()", +"9333bfb6": "yourUNIAPPBalance(address)", "9333cf5e": "communityPeriodAmount()", "9333d6c0": "MILL()", +"9333dc3b": "removeMultiRewardsForPeriod(uint256,address[])", "933426f5": "GoolaToken(address,address,address)", "93348f45": "ovedclaimBountyairdropMultiple(address[],uint256)", "9334ab61": "Infos()", "9334ad0d": "getVersions(address,bytes32,address,bytes32)", "9335427c": "fullWithdrawnProfit()", +"9335700e": "pendingSmonk(uint256,address)", "93358320": "withdrawOwnerToken(uint256)", "9335dcb7": "ownerWallet()", "93361078": "confirmStartWork(uint256)", +"93365d04": "SetDirectDebit(bool)", +"9337039b": "buyMaxAndFree(uint256)", +"93374fe6": "MOAPP(uint256)", +"933820d4": "_setClaimed(uint256)", +"93383c51": "getQuarterPoint(address,uint256)", +"9338566c": "WeiRefunded(address,address,uint256)", "9338cbdd": "monToTrainer(uint64)", +"933920f4": "two_leg(uint256,address,address,uint256,uint256,bool)", +"933949bf": "order(uint256,address)", +"933958d1": "gaufRate()", "93395d99": "TalksChain()", "93399949": "GTDCStandardToken(uint256,string,uint8,string)", +"9339b0a0": "withdraw(address,uint256[],uint256[])", "9339c01a": "validICOPurchase()", "9339e942": "check_flag(bytes32)", +"933a9ce8": "getProxy()", "933aa667": "isPermission(bytes4)", +"933aff82": "_isUniMarket()", "933ba413": "totalEthInWei()", +"933baa86": "setMasterchef(address)", "933bf760": "extend_life_of_contract(uint256)", +"933c5ae3": "returnLostTokens(address)", "933c798c": "next_payout()", +"933ca7e3": "Retract(bytes20)", +"933d0cea": "approve_695(address,uint256)", +"933d593e": "rewardRecorder()", "933dc51b": "setUint256(int256,uint256,uint256)", +"933f7608": "terminateAuctionPrematurely(uint256)", +"933fe660": "sSBlock()", +"93401462": "getPriceByMul(string,uint256)", "93402e17": "setRewardManger(address,address)", +"93404f9a": "tronToTokens__(uint256,uint256,uint256,bool)", "934076f1": "BetOnMatch(address)", +"9340b21e": "mintAuthority()", +"9340d575": "payToken(address,address,address,uint256,uint256)", "9341231c": "sendOrThrow(address,uint256)", "9341287d": "setMetadataUrlPrefix(string)", "9341aa4e": "initializeDistribution(address)", "9341bc00": "drones(uint256)", +"9341c27e": "_testPaidContract(uint256,uint256)", +"934206a4": "tombToOwner(uint256)", "934209ce": "rank()", "9342160b": "eligibleCheckAndIncrement(uint256,uint256)", +"93422153": "_slash(uint256)", "93423e9c": "getAccountBalance(address)", +"9342adef": "addPack(uint256,uint256[],uint256)", +"9342c0eb": "exchangeEtherForSNXAtRate(uint256,uint256)", +"9342c50c": "f4(bytes32,uint8,bytes32,bytes32,uint256,bytes32)", +"9342c8f4": "withdrawRewards(uint256)", "934354e7": "finishSpin()", "93437b52": "Fibremoney()", "93439950": "test_chain2_2_increaseBlocksBy5()", +"934399ce": "setRecoverAdmin(address)", +"9344a06d": "redeemMultiple(uint256[],uint256[])", "9344a0b6": "addAddressToRegistry(address)", "9344b0d6": "playerCompleteGames(address,uint256)", "9344c50f": "getNameOf(address,address)", +"9344ef88": "batchCreateChildren(string[])", +"93457f32": "_EthRateSource()", +"93458030": "activeStatus()", +"9345f517": "add(uint256,address,uint256,uint256,uint256)", "93465da6": "Error(uint128)", "934689a9": "getTokenCreator(uint256)", "93469800": "minPower_()", +"934698fe": "getRedirect(string)", +"9346afac": "blacklistLength()", "93470fa8": "listMultipleItems(uint256[],uint256,address,uint256)", +"934746a7": "l2BridgeAddress()", "93474a4b": "getParticNum()", "93478221": "LogSender2(address,address)", +"934785b7": "withdraw(address,address,uint256,bool)", +"93479d2f": "DMEX_XDAI_CONTRACT()", +"93485d11": "boaRate()", +"93485d2d": "NewTokenSet(address)", "934865d0": "TransactionBlocked(address,uint256)", +"9348ac9d": "isJoinedLGE(address)", "9348b810": "contractorTransferFrom_Bcoupon(address,address,uint256)", "9348caf7": "testBuyTenTokens()", +"9348cb42": "checkNNCreateLimit()", "9348cef7": "reveal(uint256,uint256)", "9348ff61": "setUSDRaised(uint256)", +"934930a1": "setTransferFee(uint256,uint256)", +"93498d85": "MainICO()", "9349ba44": "AirRopToken()", "934a029d": "getVoteAtTxForUser(bytes32,address)", "934a0b57": "AXXToken()", +"934a99d5": "sweepPremiums(uint256[])", "934aa023": "charity()", +"934b5d13": "getCollateralInfo(uint256)", "934bb037": "MainBank()", "934bc29d": "exampleFunction(uint256)", +"934c1938": "updateDev(address)", +"934c1a80": "findFilesByIpfsHash(string)", "934c563f": "dataOf(uint256,uint256)", +"934d71fd": "getStructs()", "934d8a2e": "TokToken()", "934db458": "Big()", "934e03a4": "toBool(bytes32)", "934e860d": "addOnHold(uint256)", "934ea572": "w_Reserv()", +"934eaa50": "burnSuperAdmin()", +"934eb103": "necessarySignForReward(uint256)", +"934ed2bc": "emitEventOnMessageProcessed(address,address,bytes32,bool)", +"934ed7fd": "debtOracleAddress()", +"934efac4": "setDNyanAddress(address)", +"934efeb9": "updateUndelegationWaitTime(uint256)", +"934f11a3": "getUIntArray(uint256[])", "934f92af": "ZebiCoinTempMgr(address,address,address)", +"9350246f": "receivedSta(uint256)", "93503337": "isAllowed(bytes32,uint256)", +"93508164": "tokenCash(address,address)", +"9350a79a": "_emitter()", +"935108d2": "decrAAIStats(address,address,uint256)", "9351327f": "USD_PER_ETHER()", "935146d0": "createMatch(string,string,uint256,uint256)", "93519d66": "requestClearing(bytes32)", "9351a8d7": "managementWithdraw(uint256)", +"93522171": "addBattleGround(string,bool,uint256,uint256,uint256,uint256,uint256,address)", +"935272a2": "functionTwo(uint256)", +"93528ac0": "addFundsFor(address,address)", "9352fad2": "run(string)", +"93536bee": "_newAgreementAction(uint256,address,bytes)", +"9353922c": "getTradingClasses()", +"9353bc76": "ethzslotid()", +"9353cdf2": "anySwapIn(address[],address[],uint256[],uint256[],bool[])", "93545a79": "isAmountBonus()", +"9354cd33": "RemovedFromWhiteList(address)", +"93555dfd": "lpReleaseStart()", "93559bc6": "lifeCoin()", "9355d6db": "MadTok()", "9355eb25": "privilege()", +"9355f0a4": "confirmBurnRequest(bytes32,string)", +"9355fbbf": "Batch(uint256,uint256,uint256)", "935600ce": "subRegistrationPeriod(bytes32)", +"935642cf": "redeemUnderlying(address,address,uint256)", +"935688a8": "buyFirstTokens(address,address,address[],bytes,uint256[],uint256[])", "9356b1fe": "BWCHToken(uint256,string,string)", "9356e87f": "getLastMulti()", "935814a6": "confirmRewardsWithdrawal()", "93588a14": "setTop(uint256,address,uint256,bool)", "9358928b": "circulatingSupply()", +"9358fc7b": "butterToCfiRoute(uint256)", "93595b66": "tokenSetMintFeeReceiver(address,address,address,address)", +"935985c8": "withdrawStakedToken0()", +"935a8b84": "underlyingBalanceOf(address)", "935aae40": "MINIMUM_BET()", +"935ad74f": "hashForReleaseSign(bytes4,address,uint256,uint256)", "935b1624": "get_first_global_audit_document()", "935b2b1f": "buyBox2()", "935b7dbd": "buyFor(address,uint256,uint256)", +"935b95cf": "literalToUFixed()", "935bb767": "setPrices(uint256,uint256,bool)", +"935bda43": "outBall()", "935c1fb1": "addressIndex(address)", +"935c9ad2": "CancelOrder(uint256)", "935cac39": "internalTransferFrom(address,address,uint256)", "935d29d6": "BPToken()", "935d647f": "getPublicForSecretFor(bytes32)", "935dfb71": "adjusted()", "935e1533": "processFinishLottery(address)", +"935e2ae1": "updateReserveVirtualBalance(address,uint256)", "935e97c2": "settleTransactionByMediator(uint256,uint256,uint256)", "935eb35f": "addToBlacklist(address[])", "935ebb78": "MAX_USD_FUNDING()", "935eeddc": "CarUpdated(uint256)", +"935f270f": "_getScriptACLParam(bytes)", "935f43b2": "ipart(int128)", +"935f4abd": "currentRoundForRate(bytes32)", "935f4c18": "sendPayment(address,uint256)", +"935f9192": "updateCoverERC20Implementation(address)", "935fb955": "Mytoken(uint256)", +"935fbe8c": "poolsInfo()", +"935ffac7": "allpool()", "93602379": "_transferCar(address,uint256)", "936061cd": "claimWinner(address)", "93608dfb": "earlySuccessTimestamp()", "9360b138": "sendTokensTo(address[],uint256)", +"9361266c": "pad()", +"9361981d": "minIssueAmount()", +"9361d7d6": "UPDATE_QUORUM()", "936224b8": "midEtherBonusValue()", "93623fb8": "changeAcceptDice(bool)", "936241b7": "hunterLicenceEarning()", +"936248bf": "setDownlineLimit(uint8)", "93627f42": "globalMax()", +"93628741": "setBigPayDay(uint256)", "9362917c": "FuckKuanLi()", "9362e50e": "changeDeveloperSENSDestinationAddress(address)", "936315d6": "canReveal(address)", @@ -84274,8 +154145,14 @@ "9363fb71": "totalFreeTokensDistributed()", "9364003c": "HDC()", "93643a5b": "fazzycoin()", +"93645917": "tobeClaimed(uint256)", +"93654946": "GUSD_LIQUIDATION_THRESHOLD()", +"936553c4": "numberOfSupportedAssets()", "936597da": "mLoadAndReturn(bool)", +"93660a5c": "INCREMENT_PERCENT()", "9366804f": "checkForJoin(uint256,address,uint256)", +"93668292": "approvePath(address[],uint256)", +"9366cb92": "saleAddrs(address)", "9366fd5c": "getEvaluationByRecorderID(uint32,uint64)", "936710bf": "getBalanceOfAccount(address)", "9367a863": "t_Andrey()", @@ -84284,290 +154161,561 @@ "9368f482": "_betterThan(address,address)", "9368f72c": "burnFromToken(address,uint256)", "93694f67": "opponent()", +"936968f9": "ownerMap(bytes12)", +"93698ea7": "_feeTarget0()", +"9369e6f3": "updateProfile(string,string,string,string,string,bool)", +"936a073f": "giftExcessBonds(address)", +"936a9511": "confirmTransaction(address,uint256,bytes)", +"936ac9e1": "getTokenToSynthInputAmount(address,bytes32,uint256)", +"936af0d1": "chk()", "936b360d": "Tachyon(uint256,string,uint8,string)", "936b603d": "contributorTokens()", "936bbf9a": "totalPostIcoContributorIds()", +"936bf356": "approveViaSignature(address,address,uint256,uint256,uint256,uint256,bytes,uint8)", "936bfa40": "the120address()", "936bfc63": "OrcERC20()", +"936c0741": "calcBuyAmountAndFee(bool,uint256,uint256)", +"936c3477": "getTotalDenormalizedWeight()", +"936c73b3": "readHead()", "936c9bc9": "ICOdeadline()", "936cfb0e": "transferInternal(address,address,uint256,bytes)", +"936d29d2": "ratioProfit2BuyBLK()", +"936d2aa4": "keyCancelInterfaceId()", "936d2b0f": "addProductAtId(uint256,string,uint8)", "936e9904": "AUCoin()", "936ec951": "afterEach()", +"936ecfdf": "_buyPresaleTokens(address)", +"936ef62a": "startGameAddon()", +"936f4d28": "gumPerBlock()", "936f67ea": "CryptoStorage()", "936f8a40": "setMinBuy(uint256,uint256,uint256)", "936fddcb": "VULCAN_PROMETHEUS_EXTRACTION_BASE()", +"9370131f": "setBurnRatio(uint256)", +"93703d9a": "send1155ToAddresses(address[],uint256[],uint256[],address)", +"93704cc8": "getDebtRatioFor(uint256)", "93709788": "forwardManyTransaction(uint256[])", +"93709c1c": "setInterestRatePerThousandth(uint32)", "9370a07c": "TSVC()", +"93716de8": "createSwapTarget(bytes20,address,address)", +"93719ba2": "timesAwardTotal()", +"9371bede": "totalIssuerCount()", "9371c369": "applicationRejected(address,address)", "9371de6e": "unsoldVUPDestination()", "93720b2f": "giveAways(address,uint256,uint256)", +"93726329": "failSafe(address,uint256,uint256)", +"93730f70": "write(address)", "93736419": "UpdateUserExpire(address,uint32)", +"93737316": "oneBool(bool)", +"93739c06": "setLegacyPool(address,bool)", "9373ad6c": "inviteFinished()", "9373b8bd": "claimAddresses(address[],uint256)", "9373e2a1": "CircleCrowdsale(uint256,address)", "9373f432": "setWithdrawWallet(address)", +"9374068f": "toUint16(uint256)", "93741a3e": "iterate(string)", "93742d83": "makeBet(uint8,uint8,uint8,uint8,uint8,uint8,address)", +"93744cdd": "calcCurrentPayoutERC721(address,address,uint256)", "9374c487": "overshoot()", +"9374d7a0": "withdrawMultiplier(uint256)", +"9374e6f7": "ethToFiatDelivered(uint256,uint256,uint256,uint256)", "9374ec98": "whiteListMge()", "9375206a": "setAllowed(address[],uint8,bool)", +"93757526": "nonces()", +"9375f0e9": "financialProductLibrary()", "93762cff": "_resetMine()", +"93766a3d": "investorsFeePercent()", "93766a57": "trade(address,uint256,address,address,uint256,uint256,bool)", "93768820": "isCommunityToken(address)", +"93773aec": "_PENDING_DODO_PROXY_()", "9377530f": "grandTotalClaimed()", "93778e2d": "setCompte_6(string)", +"937794eb": "maxvalue()", +"9377b9b0": "setupFromConfig(address)", +"9377c92e": "BuyerLotteryBonusWon(address,uint8,uint8,uint16)", +"9377d711": "transfers(uint256)", +"93784b56": "withdrawElToAdmin()", +"9378951b": "isFree(string)", +"93789815": "lusdAddress()", "9378a9e2": "setUInt(uint256)", +"9378b0e8": "getTokenToTrxInputPrice(uint256)", +"9378c51f": "priceToAddLiquidity(address,uint256,uint256,uint256)", +"9378c6d4": "withdrawParticleCollector()", "9378f08f": "ScamStampToken()", +"93790113": "wantLockedInHere()", "9379077f": "bookDayVisit(uint256)", "93790f44": "getKey(address)", "93791262": "performInit()", "93796317": "InternationalTourismPublicChain(uint256,string,uint8,string)", +"9379786e": "Attack(uint256,uint256,uint32,uint8,uint32,uint32)", "93798ff5": "BuurmansToken()", +"9379a476": "setWithdrawFeeRate2(uint256)", +"9379c807": "setProofOfUseDelegationPercentage(uint256)", "9379d936": "calculateBonus(uint8,uint256,uint256)", +"937a393b": "recoverERC20V2(address,address)", "937a7ac5": "moveStageWithdrawn()", +"937a7be0": "getUserTotalRefBack(address)", "937a9151": "WBIToken(uint256,string,string)", "937adbe6": "isInTerm(address)", +"937b0acf": "getCycleByIndex(uint256)", +"937b0dac": "feeRateDivision()", "937b19ef": "EtherRoyalToken()", +"937b5cdc": "test_f()", "937b7cf1": "contractFallback(address,address,uint256,bytes)", +"937bbc4a": "getEndpoint(uint256)", "937c0cdf": "priviledgedAddress()", "937c0d0a": "aaa()", +"937c8002": "maxTokenNumbers(uint256)", "937c9e3c": "CandyLandSale(address)", "937cde20": "hasPass(address)", +"937d25ab": "getMountedChildren(uint256,address)", +"937d4c42": "liquidations(address)", +"937d9871": "updateCakePerBlock(uint256)", +"937d9c47": "approval_mint(address,uint256)", +"937dc3b2": "luckLastBonusRatio()", "937dc72f": "AppCoins()", "937e09b1": "minimumContribution()", +"937e0af6": "tokenMaxAmount(address)", "937e909b": "reservesPerTokenDest(address,uint256)", +"937e982f": "lastIssue(uint256)", "937ebbd2": "sendTokensToBountyOwner()", +"937ed177": "marta()", "937ef8e3": "getUserReferralsProfit(address)", "937f2e33": "claimMyTokens()", +"937f54a4": "updateTokenRatesList(uint256,address[])", "937f6e77": "setInfo(string)", "937fd355": "initializeBasicFundraiser(uint256,uint256,uint256,address)", +"937ffb8f": "getPeriodTotalRewards(uint256)", "93801acb": "deleteList()", +"938050e1": "renounceIssuer()", "93806144": "getPunitoryInterest(uint256)", "93808351": "setPriceInternal(address,uint256)", "9380b8e7": "testFailAddingMembers()", "93813782": "Tasoha()", "938199a5": "getDateOfLastPayment()", +"9381a345": "isTest()", +"9381cd2b": "INIT_POOL_SUPPLY()", "9381da6e": "getEstateData(uint256)", +"9381e0a9": "backmore()", "9381e53f": "TokensCollected(address,uint256)", "9381ebfa": "EUAHTOKEN()", +"93821259": "createCSPVaults(address,address)", +"93827173": "convert2BondAmount(address,address,uint256)", "9382ef65": "prvdWallet()", "93830c74": "solUpDownVote(bool,uint32,address)", +"938351b8": "allProposals(uint256)", "9383d4e6": "SingularityTest14()", +"9384317f": "getFilledTrades(string)", "93847d54": "TRLCoinSale(address)", "9384f31e": "SingularityTest19()", "93854494": "factHash()", +"93855133": "btsToLp0Route(uint256)", "93859188": "amount_bonus()", +"93865244": "getAuthorityDetails(address)", +"938675fd": "withdrawDepositsByProfile(address,uint32)", +"9386775a": "votes(bytes32,address)", "93867fb5": "roleAdmin()", +"9386c902": "Issuance(uint256)", +"938759df": "cashGem(address,address,bytes32,uint256)", "9388b560": "TOKENS_ALLOCATED_TO_SERVUS()", +"93898783": "checkBytes(bytes2[])", +"9389acb5": "readOwner()", "9389c5b5": "setPackPrice(uint256,uint256,uint256)", +"9389f1fc": "grantAdvisorToken(address)", +"938a4489": "makeOrder(bytes32,address,address,bool,address,uint256,address,uint256,uint256)", "938a465e": "TOKETH_PRESALE_ONE()", +"938a63ec": "GS_maxAmountBets()", +"938adecc": "findOportunityMultiSwapAssets(address[],uint256,address[])", "938ae4cc": "testThrowDisownNotTransferable()", "938b5f32": "origin()", "938b643b": "TimeToMeet()", +"938b87f0": "buyEngineOne()", +"938b9f91": "investorsOnAllDays()", +"938bb93c": "mortgageManager()", "938bcd67": "getChannelIdentifier(address,address)", +"938be7ad": "cStakingBalance(address,address)", +"938c049c": "lastBountyStatus()", "938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"938c6208": "valueShouldNotBeHelloWordl()", +"938c63ac": "Added(address,address)", +"938cdba5": "getChangePoolReward(uint256,uint256)", +"938cff8b": "mintDoll(address,uint256)", "938d0444": "SmileToken()", "938d2f46": "escrowDeletion(address,address,uint256)", +"938d44f3": "lastHalveBlock()", +"938d753b": "myAdd(address,uint256,uint256,address[],address,uint256)", "938d9632": "activekey()", +"938d967a": "rewards(bytes32)", "938da22d": "secondReleaseTime()", "938db92e": "ICO_Tier()", +"938e3d7b": "setContractURI(string)", +"938e49d1": "providerRegistrations(address,uint256)", +"938e5954": "TokenProcess(address,address)", +"938e6321": "instantExitPercentage()", "938e6fcc": "MiningStart(uint256,uint256,uint256)", +"938e781d": "getLpDailyAPY()", +"938eae38": "InvestmentInUSD(address,uint256,uint256,uint256)", "938f3cc4": "create(address,address,address,address,address,address,address,string,string)", "938f407a": "removeFromWhitelistInternal(address,uint256)", +"938f5435": "CeilingRaiseLocked(bytes32,uint256)", "938f6c5f": "getBountyTokens()", "938f7064": "createTopic(string,string,uint256)", "93904aae": "coinToBurn()", +"939065bb": "createNFTMould(string,string,string,string,string,uint256,bool,address[],uint256[])", "939090f8": "deposit4(address,address)", +"9390bce0": "createCreditLine(bytes)", +"9390fd2c": "callProxyManager_getUserTotalIntraCreditAsset(address)", +"93910e66": "inputmaskCnt()", "93911ff8": "addTrades(address[],uint256[])", "93920e8f": "invest(address[],uint256)", "93924147": "MoveFromBase(uint256)", "93928c91": "thirdBonus()", +"939292d3": "totalPendingCoins(address)", "9392e5b5": "erase(uint256,uint256)", +"9392f6f2": "tranche_total_principal(uint256,uint256)", "93930020": "getLastConsolationPrize()", "9393c09c": "addFabric(address,address)", "93940e0a": "INTLToken()", "939528b1": "transferProposalCooldown()", +"93954424": "ownerUpdateToken(address,address)", +"93961c66": "overrideTokenDynamicImageWithIpfsLink(uint256,string)", "939624ab": "removeStake(uint256)", +"9396a518": "getBallotsLengh()", "9396a7f0": "getQuickBuyPathLength()", "9396df32": "advertisingPercent()", "939729c1": "installerPercentage()", "9397afcb": "PlayingCrypto()", "9397f2a2": "weekOneRate()", "939802af": "getDataForTokenId(uint256)", +"93985737": "submitActionProposal(address,uint256,uint256,bytes32,bytes)", "93986193": "realizedTokenBalance(address)", "9398e0cd": "data(int256)", +"9398e842": "getTokenToTokenInputPrice(address,address,uint256)", "9398ecb6": "setMaxParcels(uint256)", +"9398f5a2": "mConfirmPayment(uint256[])", "939935cb": "startTimeInMinutes()", "93997075": "AddCommitteeVoteEvent(address,address)", "9399869d": "getContractCount()", +"93998821": "random_seed()", +"9399a8a8": "sendDocument(bytes32,string)", "9399dcfb": "PointGameProcess(address,uint256)", "9399dd7e": "serverEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,bytes32,bytes32)", "939a470e": "updateDescriptionHash(string)", +"939a7170": "Grant(address,uint256)", "939a79ac": "demo(string)", "939a8dc1": "CryptoPepeMarketToken()", +"939ab006": "PARTNERSHIP_FIRST_MINT()", +"939acd88": "getUniPrice(address)", +"939b3520": "__StakingRewards_init(address,address,address)", "939b73aa": "getAthlete(uint256)", "939b7842": "approveMigration(uint256)", "939bfc79": "TTAC()", "939c0a66": "AirDrop()", "939c23b6": "setProtectionForMyUnprotectedCrypton(uint256,uint256)", +"939c28e6": "isPrepared()", +"939c7956": "totalCurrentPower()", "939cda3f": "DgxDemurrageReporter(address,address,address,address)", +"939d1706": "currentPrices(uint8)", "939d3ac4": "sendCommunity()", "939d8729": "_postValidatePurchase(address,uint256,uint256)", +"939d9f1f": "recordKeyPurchase(uint256,address)", "939de809": "checkSale()", +"939dfd6a": "startFirstPhaseBlock()", "939e014e": "optionTransfer(address,uint256,uint256)", "939e436c": "weiPerContributor(address)", "939ea4f8": "bombs(uint8)", +"939ed31e": "uPairFor(address,address)", "939fb3bf": "Owanble()", "93a00d27": "rektCoinCashSafe()", +"93a05524": "aaaprecise()", +"93a090ec": "validatorDeposit(address,uint256)", "93a09352": "setValue(string)", "93a0c742": "getIdeaParties(uint256)", "93a0dc08": "disableAffiliate()", +"93a16546": "_zapOutAll(address,uint256)", +"93a1c284": "multiplierToken()", +"93a1fb66": "lock_addresses(address)", +"93a25542": "whitelistExchange(string)", +"93a25907": "assignSpToLuck(uint256,uint256)", "93a2f88d": "gettopid(address)", +"93a2f9c7": "withdraw(address,uint256,uint256,bytes32[])", "93a2fa6c": "Emission(uint8,uint256)", "93a31509": "LEXToken()", "93a32f62": "assignToken(address)", +"93a348a6": "changeRewardDuration(uint256)", "93a378da": "addHodlerStake(address,uint256)", +"93a3bfcc": "setUserData(address,string,string)", "93a408d7": "priceUSD()", "93a422bb": "updUserBlackList(address[],address[])", +"93a425e6": "order(uint256,uint256,uint256,uint256)", "93a45612": "SetPresaleHandler(address)", +"93a49bfa": "forceRedeem(address,uint256,address,uint256)", +"93a500ee": "getLastTask(address)", "93a52980": "getTotalEtherPool(uint8)", "93a595f5": "repayLoan(address,uint256)", "93a5a9da": "resignTrustee()", +"93a5f013": "RevokeTokens(address,uint256,uint256,uint256)", +"93a63987": "distributeSWAP(address,uint256)", "93a69ae0": "eForecastGambleToken()", +"93a70185": "tokenUniswapPairForFORKxWETH()", +"93a72fbe": "areShortableSynthsSet(bytes32[],bytes32[])", +"93a744a7": "twistedTokenCreator()", +"93a7afd3": "getNextOffer(uint256,bool)", +"93a7dd35": "_deadlinePassed(uint256)", +"93a7e711": "predictDeterministicAddress(address,bytes32,address)", +"93a82e27": "on_message_counter()", "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)", +"93a9685c": "getAmountsOutUni(uint256,address,address)", +"93a9899e": "activeSlot_ap6()", "93a991af": "withdrawDai(uint256)", +"93a9af07": "freeClaim(address)", +"93a9b34a": "changeAccess(address,uint8)", +"93a9f152": "redeemOnAvatar(address,uint256)", "93aa3014": "BarryUtilityCoin()", "93aa5ca8": "BITNOT(bytes32)", "93aababc": "setlockBalance(address,uint256)", "93aacd7d": "ownerLabel()", +"93ab2bce": "createSmartFundLight(address,string,uint256,address,address,address,bool)", +"93ab7460": "pendingB4se(uint256,address)", +"93abbbb2": "NUMBER_OF_NODES_FOR_SCHAIN()", "93abc530": "getSubscriptionOwner(bytes32)", +"93ac2e41": "advisorEntitlement(address)", "93ac3638": "setAuctionAddress(address)", "93ac3905": "lastGateway()", "93ac5048": "BitallexToken()", "93ac7c83": "EVTCToken(address,uint256)", +"93acb9ee": "BUY_ASSET_INTRODUCER_TYPE_HASH()", +"93ad74db": "IMP15()", +"93adac6e": "marketOfferGetTokenPrice(uint256)", "93adf28b": "PumpAndDump()", +"93ae006d": "withdrow(uint256)", +"93ae0a75": "LogJoinAndBattleSuccessed(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"93ae7144": "varientMap(uint256)", +"93ae7dd1": "winnerETHAmount(uint256)", +"93ae8809": "swap(uint256,uint256,address,address)", "93aef871": "checkSolved()", "93af0292": "complete(address)", "93af339f": "cardDrawPrice()", +"93af7adc": "getStakingRateRange(uint256)", "93af8ed4": "maybeChangePrice()", +"93afb4cb": "MyProfitRecord(address,uint256)", "93afbdae": "repriceAuctions(uint256[],uint256[],uint256[],uint256)", "93affe51": "getBoth()", +"93b027b4": "maxInt256()", +"93b08316": "getRefundable(address)", "93b14daa": "right14(uint256)", "93b155af": "win(bytes32)", "93b16ff5": "IkuraBurn(address,uint256)", +"93b19d68": "uniPool(address)", "93b1d4c7": "OfferingRegistry(address)", "93b212bc": "subWithdraw(address)", "93b21c8c": "destroyThreshold()", "93b2467e": "totalSold(uint256)", +"93b25fa3": "depositCb(address,uint256,uint256)", +"93b26b83": "_execute(address,uint256,address,address,address,uint256)", +"93b30335": "ownerMessage(string)", "93b30efc": "doSellerRequestCancel(bytes16,address,address,uint256,uint16,uint128)", +"93b3532f": "initialize(uint256,address,address,address,address,address,address)", "93b3a368": "getCorrespondingIntegerValue(bytes32,uint8,uint256)", "93b3bb35": "VisualFodderCoin()", "93b3cc6b": "getRandomSeed()", "93b4a73c": "KITTOKEN()", "93b4c69b": "_assignRole(address,bytes32,address,uint256)", +"93b4e25e": "emitInitiateChange()", +"93b52be8": "crBoostMultiplier()", "93b557db": "dSetArbitraryData(bytes32,bytes,bytes)", +"93b59a4e": "datosLoteria(address,uint256)", +"93b6539a": "renameWithERC20(address,uint32,string)", "93b69f86": "getPlayerCoin(address,address,uint256)", +"93b6d8f7": "eth_rate_3()", "93b71fe5": "Dao1901Votes(address)", +"93b729da": "DemocCommunityBallotsEnabled(bytes32,bool)", +"93b738f5": "maxLockThreshold()", +"93b7586e": "nameLength(string)", +"93b7739f": "RealmSaleCreate(uint256,uint256,uint256)", "93b7e7cb": "addCancellation(address)", "93b8386d": "agencyOf(address)", +"93b89046": "UNIC()", "93b8e90d": "isMasterAccount(address)", +"93b9740a": "blocklock()", +"93b98055": "returnKeyUserETH()", +"93b987d3": "flReceiver()", +"93b9d1df": "getNumOfVotesByAddress(address)", "93ba3f15": "propose(address,uint256,bytes)", "93baa6ef": "InterfaceImplementerSet(address,bytes32,address)", +"93babaaa": "numOfInvitations(address)", +"93bade30": "getEthTodo(address,uint256)", "93bb3aee": "betAddressArray(uint256)", "93bbafd1": "earlyBirdInvestments(address)", +"93bc484c": "withdrawEtherFund()", "93bc771a": "ceoDevfund()", +"93bc91fd": "transferTokenTestValueMaxLong(address)", "93bc96fa": "withdrawTo(uint256)", "93bcabb7": "pullRow(uint256)", +"93bcb5a3": "claimScoreEth()", "93bd0142": "ETHERDELTA_ADDR()", "93bd1484": "mintApproveClear(address,address)", "93bd27de": "IOweYou()", "93bd4fc4": "depositAgent(uint256,uint256,uint256,string,uint256,string)", +"93bd5e73": "submitShares(uint256)", "93bd90c4": "richtokenIndexToApproved(uint256)", "93be0f83": "MSPT()", +"93be3bc6": "initializeCustom(address,address,uint256)", +"93be4d3a": "assetImplementation()", "93bebdec": "corporationContract()", +"93c0182d": "convertToken(address[],uint256)", +"93c03241": "updateDebtScore(address,address,int256)", +"93c04dd0": "jt9()", +"93c05e25": "RPexchange(address,address[],uint256[])", "93c0771c": "getGamesPlayers(uint256)", +"93c0b096": "disableOwnership()", "93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", +"93c19cc8": "currentHundingsCount()", "93c19e18": "rate0()", +"93c1b187": "MessageCreated(uint256,address,bytes32)", +"93c1ccc9": "refundContribution(address,uint256,uint256)", +"93c1e466": "freezeRequest(uint256,uint256)", +"93c22125": "isPausedSX()", +"93c28b4e": "govUpdateTokenURIbatch(uint256[],string[])", +"93c290d0": "sumtailHelper(uint256,uint256)", "93c2c7f0": "getClosingSettle(bytes32)", "93c2f482": "maxRound()", "93c32e06": "changeFounder(address)", "93c38965": "getData_15()", +"93c3a033": "usersActiveO6Levels(address,uint8)", +"93c41103": "addOrUpdateTokenConfigSource(address,uint256,address,uint8)", +"93c4328a": "_legacy_updateMintAuthority(address)", "93c434e5": "getOptionInfo(uint256,uint256)", +"93c496f3": "RefundIssued(address,uint256,uint256)", "93c4ade0": "viewMaxShares()", "93c5186c": "isNewPrice()", "93c573c0": "maxChequeValue()", +"93c5a28f": "createTacgia()", "93c5ace0": "walletTokenTeam()", +"93c63b9d": "reloadGenesis(address)", "93c6475c": "processBet(uint8,uint256,uint256,int256,bytes32,bytes32)", "93c69927": "sizeOfBool()", +"93c713a1": "encoreTokenAddress()", +"93c724c5": "firstBonusPeriod()", +"93c74b37": "minBetLevel3()", "93c7ca84": "countBet()", "93c7e009": "AddTrustedContractAddress(address,address)", +"93c829fc": "archive(uint256)", +"93c88d14": "DEFAULT_RESERVES_RATIO()", "93c8b0d4": "addForeignChild(bytes32,bytes32)", +"93c8dc6d": "rewardBalances(address)", +"93c8e88d": "buyMonster(uint256,address,uint256,address,uint256)", "93c92b73": "exchangeRateArray()", "93c94acb": "calculateRewards(uint256[3][3])", "93c958f3": "ManufactorWallet(string)", "93c98cbc": "ApplicationQualityCoin()", "93c9b63e": "SGTCoin(uint256)", +"93ca2f8a": "removeLiquidity(address,uint256,uint256,uint256)", +"93ca5d0d": "isReleaser()", "93ca5de7": "CIzTezt(string)", "93cb1a4e": "originalHash()", +"93cb512e": "withdrawEthic()", +"93cb7b4b": "WithdrawEvent(address,address,uint256)", "93cc6d85": "transformDataContract()", "93cc9162": "taskRejected(uint256,uint256)", "93cca918": "place()", +"93cce879": "HALVE()", "93cd22b8": "addAdministrators(address)", +"93cdbe14": "refund(bool,uint256,address)", "93cddbcf": "goldToEur()", +"93cdf9b5": "noTimeLockFunc1(address)", "93ce9791": "emergencyFinalize()", +"93ceddb0": "MatchList(uint256)", +"93cefafc": "minePoolBalance()", "93cfd79f": "getVisitorCount()", +"93cff8b0": "testGetAdjacent()", +"93d047f3": "univ2Factory()", "93d07d07": "hoursCount()", "93d087a2": "setData_33(string)", "93d0de98": "AirDropContract()", "93d1217e": "lastBlock_v3Hash_uint256()", +"93d122b1": "update_balance(address)", "93d18e92": "processOrder(bytes32)", "93d22e52": "setEFContract(address,address,uint256)", "93d25fbc": "getroommoney()", +"93d2ab9e": "setLuckPool(uint256,uint256,uint256,uint256)", +"93d2f8a5": "EtherStaker()", "93d3173a": "delegateDecreaseApproval(address,uint256,address)", +"93d31e01": "wrap(address,address[],uint256)", +"93d32ee2": "ProductUpdated(uint256,string,uint256,address)", +"93d39240": "GAMES_PER_EPOCH()", +"93d39f5c": "isBetRight(uint8[],uint8)", +"93d459e2": "ReconCard()", +"93d45d57": "liquidateAndSettleSAFE(address)", "93d4673f": "BTCTKN()", "93d48b11": "zombieToken()", "93d51daf": "amountofp3d()", "93d5276b": "investInternal(address)", +"93d56971": "zapEthOut(uint256,uint256)", "93d5825e": "calculateTokenSell(uint256)", "93d5908a": "harapan(address,uint256)", "93d5c520": "DelegateCallToken(uint256)", "93d60990": "teamWithdraw(uint256)", +"93d65f34": "claimedBet(uint256)", "93d68cfa": "preferredSaleStartTime()", +"93d6f58d": "Xmeria()", "93d759b8": "allowedAccount()", +"93d76742": "CreateCertificate(address,uint256,bytes)", "93d76f0e": "DEVELOP_CAP_PER_ROUND()", "93d79105": "hashRelease(bytes32,bytes32)", "93d7c6bf": "researchDivPercent()", "93d81d58": "cancelSubscription(address)", +"93d83c48": "addAddress(string)", "93d84bf0": "oraclize_newRandomDSQuery(uint256,uint256,bytes,uint256)", "93d865e3": "tokensFromPresale()", "93d88409": "suspendSale()", +"93d88eff": "CouponsClaim()", +"93d8df9a": "harvest(uint256,uint256,uint256,bytes)", "93d90a4e": "HostingIcos()", "93d91eae": "getFractionalAmount(uint256,uint256)", +"93d93abf": "lastPool(uint8)", "93d96049": "burn_lost()", +"93d9bf30": "computeAndGetRinghashInfo(uint256,address,uint8[],bytes32[],bytes32[])", +"93d9c984": "timeLockDurations(address)", "93d9df16": "setCounter(int256)", +"93d9e380": "getPurchasingPrice()", "93d9fd74": "getTitulaire_Compte_4()", "93da1db1": "Profiterole(address,address,address)", "93da4cfd": "getInvertedPriceInfo(address)", +"93daed4c": "refundedEth(address)", "93dafba2": "getSubpot(uint256)", "93db7716": "get_sale_arbits_sold()", +"93dc0f19": "add1UUID(uint256,string)", "93dc12e6": "closeProject(uint256)", +"93dcd021": "getWithdrawableBalance(address,address)", "93dd4133": "signedByCLevel(bytes32,bytes)", "93dd738e": "notifyLegacyClaimed(address)", "93dd9443": "Community()", "93dd9866": "summEccles()", "93de2527": "RegisterStaff(address,string,string,string)", "93de6c51": "CHGUSDPRICE()", +"93de9e08": "LastSensorUpdateTimestamp()", +"93dec123": "getRevealerReward(uint256,address,address)", +"93dfb63d": "deed1()", "93dfbbcb": "setTokenExchangeRate(uint256,uint256,uint256)", "93dfea8f": "ong()", +"93dffb44": "removePoolFactory(uint8)", "93e02d13": "FallenLeaders()", "93e1021a": "Participant()", "93e1595d": "ATTR_CONSUMABLE()", +"93e19423": "initializeContract(address,address)", +"93e1c1d4": "removeLiquidityTargetAmountTest(uint256,uint256,uint256,uint256,uint128,uint128,uint128,uint128,uint128,uint128,uint256,uint256)", +"93e1ea9f": "pendingTwa(uint256,address)", +"93e240fc": "claimTad()", "93e24b7a": "teamVaultAddr()", +"93e2db62": "tokensLabs()", +"93e30633": "addMarket(address)", +"93e311ae": "rw()", +"93e38917": "daaBounty()", +"93e38ea7": "initiateWeeklyFarmIncentives(address,uint256)", "93e3fca1": "stopGameOnNextRound()", "93e40f7e": "claimedLength()", "93e426de": "MIN_WITHDRAW_WEI()", @@ -84575,60 +154723,114 @@ "93e432d4": "refillGift()", "93e43bbe": "getPost(bytes32)", "93e4bf4f": "addPrecommitment(address,uint256,uint256)", +"93e4eaa9": "RUNE()", +"93e50779": "contractCountPerOwner(address)", "93e5365f": "maxAddresses()", "93e580ea": "storageRoot(address,uint256)", "93e59dc1": "whitelist()", "93e67bff": "IPFSHash()", +"93e70753": "dittoUSDRate()", "93e7155b": "swapActivityHandler()", +"93e74ba4": "usersInvestments(address)", +"93e78df7": "withdrawSelfToken()", "93e7d6c6": "createInviteName(bytes32)", "93e84cd9": "play()", +"93e84f64": "wWinner(uint256)", +"93e88c07": "minimumCoolingSeconds(uint256)", +"93e8bfeb": "rewardStaker(address)", +"93e8ef53": "AddUser(address)", +"93e947ee": "sendSeedPacket(address,uint256,uint8,uint256,uint8)", "93e96174": "getNextDiniRequestId()", "93e9a084": "lastTime()", +"93e9ab88": "nanoLoanEngine()", "93ea0e02": "batchTokenTransfer(address[],uint256[])", +"93ea4c67": "cancelTransferOwner()", +"93ea515f": "assetPacks(uint256)", +"93ea87bd": "_setSettling(uint8,uint32,bool)", +"93eac2b2": "suggestedAdPrices(uint256)", "93eade00": "tokenAssignExchange(address,uint256,uint256)", "93eb049d": "dp()", +"93eb238d": "transferTokenToOwner(uint256)", "93eb33b3": "notifyDeathConfirmation()", "93eb3c62": "Send(address,address,uint256)", +"93ebcd8e": "NO_TLR_ACCRUED()", "93ed013d": "ecosystemAddr()", +"93ed4309": "approveExchange(address[])", "93ed4426": "extraBonus()", "93eda78d": "getClaimData3(uint256)", "93edaf59": "freezers(uint256)", "93edbe36": "CHELCOIN()", +"93ee2ca4": "_checkDebtCeiling(uint256)", +"93ee9f4f": "metaRefundContribution(bytes,uint256,uint256,uint256)", "93eeb3fb": "checkRate(address,address)", "93eec1fb": "setName(uint8,uint8,string)", +"93ef43da": "referralAccounts(uint256)", +"93ef4c43": "stakeLockDays()", "93efbdbb": "DPIcoWhitelist()", "93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"93f0c62c": "addrOfNNToken()", +"93f0cc22": "setUniAddr(address)", +"93f13ef1": "pastGameTickets(uint256)", +"93f1a40b": "userInfo(uint256,address)", "93f1b685": "LuckyPackage()", "93f27be2": "_assignOverlfowData(uint256)", "93f2ad91": "ExtremeToken()", "93f2ba24": "testdiv256_128By256()", +"93f2f971": "setAllowLimitedWalletWithTime(bool)", "93f2fa04": "ThingToken()", "93f32659": "getInitialWithdraw()", "93f33b88": "notifySale(uint256,uint256,uint256)", +"93f37810": "setchristmaseve(uint256)", "93f43863": "getEmployerJobs(address,address)", +"93f4bcde": "unpauseStaking()", +"93f4e1a3": "verifyHash(bytes,uint256,uint256[],uint256[])", +"93f4eaf7": "buypercent()", +"93f50200": "depositToPool(address)", +"93f55fd7": "totalStakedquran()", "93f5ddf2": "ICOStarted(uint256,uint256)", "93f63e70": "setBenefit(address)", +"93f6bce9": "mykeysid(address)", "93f6fd85": "createCampaign(uint256,bytes32,bytes32,bytes32)", +"93f79e56": "getF8n()", "93f7cc99": "getPlayerAccount(address)", "93f826c9": "portfolioSummary(address,address)", "93f84cfe": "mintTeam(address,uint256)", "93f85021": "numLeaders()", +"93f89a80": "setMinTime(uint256)", "93f8e9f7": "mediumMod()", +"93f964d7": "confirmTransferRoot(bytes32,bytes32)", +"93f9c552": "requestWithdrawWithRPT(uint256,uint256)", +"93f9e9ae": "issue(uint256,uint8,uint256)", +"93fa4403": "EnableDisableRewards(bool)", "93fa47f1": "lockGoldTransfers(bool)", +"93fa4915": "retrieveData(uint256,uint256)", +"93fa4c16": "clientConfirm()", +"93fab695": "lockEnd(address,uint256)", +"93fab9ee": "lastRefreshReserve()", "93faf781": "loggedAsStatement(uint256)", "93fb28bd": "getUnitAttackMultiplier(address,address,uint256)", "93fc2c8b": "winnerIsDraw()", +"93fc2db9": "createVestingBulk(address[],uint256[],uint8[],bool[])", "93fc5ebb": "_secondRoundWinnersFight()", +"93fc9fbe": "lotto()", +"93fcd291": "pendingRewardsFromPool(uint256,address)", +"93fd1844": "numberOfOwners()", +"93fd9219": "nextSupplyRateWithParams(uint256[])", +"93fdef69": "bonusMinting(address,uint256)", "93fe0237": "updateWhitelist(uint256[],bool)", "93fe4248": "deleteUIntValue(bytes32)", "93fea184": "CONTRIBUTIONS_MAX()", +"93fea36a": "Fee2(address,address,uint256)", "93fea3fc": "supportValidator(address)", "93fea8f3": "MahamTestCoin()", "93feb13b": "ForceSendHelper(address)", +"93fede66": "Release(address,address,uint256,uint256,uint256)", "93ff3e4a": "insertNewUser(uint32,bytes32,address,uint256,uint256,uint256,uint32,bool)", +"93ff913c": "updateAdminConfig(uint256,uint256,uint256,uint256,uint256,uint256)", "93fffddc": "previousContractAddress()", "94002b57": "goldToken()", "940064e3": "periodPreITO_hardCapInUSD()", +"94008d90": "oneSplitAddr()", "94009bbc": "powerUp(address,address,uint256)", "940147ac": "tribeProducts(address)", "94014dc0": "weiRaisedPreICO()", @@ -84637,9 +154839,15 @@ "9401d547": "lockExternalTransfer()", "9401e4e7": "TokensFlushed(address,uint256)", "94025211": "refundToOtherProcess(address,uint256)", +"9402d18d": "sendLimit()", +"9403b634": "getVault(uint256)", "9403e8dd": "casino()", +"9403ed3a": "originationFeePercentage()", "94044c75": "_invokeTokenRecipient(address,address,uint256,uint256,uint256,uint256)", +"940494f1": "get_n_coins(address)", +"9404d27a": "inviteLogs(bytes4,uint256)", "94056c42": "mintTRCToken(address,uint256)", +"9405a30f": "changePlayOncePrice(uint256)", "9405b406": "ProposalManager()", "9405c78f": "setQuantity(uint256,uint256)", "9405de64": "checkAllowance()", @@ -84649,6 +154857,9 @@ "9406aea9": "startCall(uint256,uint8,bytes32,bytes32)", "9406cf59": "setChallengeFeeMultiplier(uint256)", "9406e273": "NBELToken()", +"94071161": "lockRewards(address)", +"94071d7d": "updateSwapTokenAmountForBonusThreshold(uint256)", +"9407375e": "mint(uint256,address,address,string,string,uint256)", "94074b03": "getNetworkName()", "94077c50": "updatePriceAgent(address)", "9407a688": "allowedForwards(bytes32)", @@ -84656,17 +154867,31 @@ "94081387": "administrate(uint256)", "940834be": "MidnightCoin()", "940900b8": "bookOvernightVisit(uint256)", +"94096086": "ThreeZSymbols(address,uint256)", "94097168": "burnTokenBurn(uint256)", "9409962f": "withdrawExtraTokens(address)", +"9409d870": "orderBookAddress()", +"9409edd8": "writeData(string,string,string,string,string,string,string,bool,string,string,string,string)", +"940a1455": "getLimitById(uint32)", +"940a1adc": "depositSUSD()", "940a4e45": "distributeReward(uint256)", "940a6cf5": "getAdministratorCount()", "940a82a3": "distributeCTS(address[],uint256,uint256)", "940aa73f": "setMinimumVotingWindow(uint256)", +"940aba20": "withCom(address)", +"940afad6": "cantidades1(uint256)", "940b29b2": "etherReceivers(uint256)", +"940b3d9c": "AccountForward(address,address)", +"940b9c3b": "floatLocked()", "940bb344": "burnUnsoldTokens()", +"940bbd00": "useExternalRng()", +"940bdcd3": "setZrxBalanceOf(address,uint256)", "940beaf5": "getTransactionIds(bool)", "940c154b": "lockBet(uint256)", "940c17c0": "CROWD_WEEK4_PERIOD()", +"940c41df": "IssuanceUnpaused()", +"940c4b35": "Transfer(address,address,bytes32,uint256,string,uint256)", +"940cf5a0": "Post(address,uint256,string)", "940d0780": "AdmChange_README(string)", "940d553f": "FoodTransferEvent(address,address,uint256,address,uint256,uint256)", "940d5e08": "Alpon()", @@ -84675,27 +154900,50 @@ "940dbf3e": "invokeOnce()", "940de97e": "privateSaleStartTime()", "940df414": "claimAddress(address,uint256)", +"940e966b": "SetString(string,string)", +"940e969b": "exit(address,uint256,uint256,address[],address,uint256)", "940ebef7": "secondsRemaining()", "940f02e0": "setDevelopersTokensWallet(address)", "940f0661": "PrivateLedger()", "940f851c": "Ballot(uint8)", "940fae9e": "confirmBoosterQuest(address)", "9410579d": "_calculatePriceComplement(uint8)", +"94105d1a": "getTACBalance()", "94106200": "testFailCreateSameNonce()", "94107690": "checkPurchaseRecord(address)", "9411c88b": "TokenContract(uint256)", +"941245c3": "token2AssuranceAccount(address)", +"9412a4d9": "setAcoAssetConverterHelper(address)", +"9412be62": "transferToUplineEighteenK(address,address,address,address,address)", +"9412be65": "burnFromProxy(address,address,uint256)", +"94130fe3": "setMaxStakingAmountPerContract(uint256)", +"9413bde5": "setPoolsize(uint256)", +"94144c6b": "prizePeriodSeconds()", +"94145863": "DeveloperSupply()", +"94146a6e": "AddressForRewards()", +"9414750e": "profitableCount()", "9414d0bf": "initializeUsdReceived()", "9415931d": "getLastDividendsAmount()", "941660e5": "getRoundMaxPerUser(uint256)", "9416893b": "addDemoData()", "94169f25": "preIcoTotalCollected()", "9416b423": "toLower(string)", +"9416b7d8": "referenceURI()", +"9416c30f": "BURN_FEE_PLEDGER()", +"94176485": "getEnabledConnectorsData()", +"9417783f": "getExternalErc721AwardTokenIds(address)", +"9417b3e1": "startHeightOfPubIEO()", +"9417ef31": "getTotalTaxCollected()", +"94181008": "rollExpiredPut(uint256,uint256,uint256,uint256,uint256)", "94181d27": "lastReparation()", "94182798": "dna4(uint256)", +"94189bef": "rTotal(address)", +"9418b258": "MAX_FARMING_POOL()", "9418b8a6": "closeUsingTrustedRecipient(address,address,uint256)", "9418d25a": "proveBuy(bytes,int256)", "94194be4": "openingTimeB()", "9419768d": "checkBetting(uint256,address)", +"94197b48": "checkAllowCaller(address)", "941993f8": "changeCofounderB(address)", "9419a2da": "setPaymentDetails(uint256,string)", "9419f17c": "decraseTimeToAction(uint256)", @@ -84703,30 +154951,60 @@ "941a4bc7": "getPartnerCash(uint8,address)", "941a5074": "controllar_account()", "941a8486": "ownerChangeSellerfee(uint256)", +"941a9b11": "allUnderlyingMarkets(uint256)", "941b0161": "addMarket(uint256,uint256,uint256,uint256)", +"941b055b": "setOffer(uint256,uint256)", +"941bb62e": "usdtExchangeToken(uint256)", +"941bd801": "getSplitThreshold(address)", +"941beb67": "__WAR_init_unchained(address)", +"941c339d": "Buy(address,uint256,string)", +"941c6b22": "tokenPriceEth()", +"941c825e": "setPCoinContractAddress(address)", +"941d4b73": "defineBaseAdjustment()", +"941d505d": "addControlledToken(address)", +"941d9f65": "greylistAddress(address)", "941da7b8": "testExpiredBalance()", "941e98a8": "EMISSION_FOR_SALESTAGE1()", "941f9580": "rewardKey(address,uint256)", +"941fc7e0": "poolAdminPermission(address)", "94201882": "artistEmail()", +"94217ad1": "assetManager()", "94224066": "setCityValues(uint256[],uint256,uint256[],uint256[])", +"9422424b": "Pause(bool)", "942273bd": "SAMURAI()", +"9422dc68": "approval(uint256,uint256)", +"9422f166": "INVESTIN_VAULT()", "942324c3": "getSponsoringCount(uint32)", "94235f77": "apLockUp(address)", +"9423701e": "refManagerInstance()", "9423719b": "tokenBonusForFirst()", "942385eb": "getPayroll()", +"94238929": "_deposit(address,uint256,address)", +"942390c8": "LogTokenPayable(address,address,uint256)", "9423f443": "submitGameResults(uint256)", "9423fc54": "transferClearingFunction(address)", +"94242c43": "MintEvent(uint256)", "94248eaa": "isStateProjectInProgress()", +"94250d77": "log(address,address,address,uint256)", "9425753c": "licenseProductId(uint256)", +"9425a476": "hasVotingPeriodExpired(uint256)", +"94262eaa": "setRedeemCost(uint256,uint256)", "9426e226": "validatorSet()", "94272356": "_setReferrer(address,address)", "9427aa96": "getBonus(uint256,uint256)", +"9427cb9a": "bnbc()", "9427dfea": "ownerRecoverTokens(address)", "942802e7": "VULCAN_POD_FTL_SPEED()", "94282357": "EFASCOIN()", "9428522a": "getNode(string)", +"94288ce0": "addFreezeTime(uint256,uint256)", +"9428cda3": "userMessages(address,uint256)", +"9429b492": "BitxAddress()", +"9429d2d9": "hasHandInProgress(address)", "9429d441": "reclaimBySender(uint256,address,address,bytes32)", +"942a488f": "getUserFPTABalance(address)", "942a8ad3": "getAQL(address)", +"942aaac0": "theRealJohnMcClane()", "942ab177": "MintToggle(bool)", "942ab286": "buyTicket(uint256[],address,uint256,uint256)", "942ac303": "goalInEthers()", @@ -84734,63 +155012,129 @@ "942b765a": "getList()", "942b90d3": "getRewardTable()", "942bc8d4": "unpauseAngelToken()", +"942bff40": "withdrawCFX()", +"942cb800": "ownershipAccept()", +"942d2ddf": "phase3time()", "942d468b": "transferArray(address[],uint256[])", "942d73b1": "readAddr()", +"942dab97": "test_addToRewardPool()", "942dac28": "amounRefferalWon()", +"942e5c9c": "_getClaimerPercentage()", +"942e6bcf": "registrations(address)", "942ea466": "getNumber(address)", +"942eaa20": "purchasePack(uint256)", +"942ec85a": "cancelSales(uint256)", +"942f520f": "changeBurnRatio(uint256)", +"942fd9f2": "dbg_gtOne()", "942ff8fc": "inituser(address,uint256)", +"943052a4": "getMaxPrice(uint256)", "94306ecb": "AutoreleaseDelayed()", +"9430b496": "approval(address)", +"9430c480": "monthlyStart()", "94313c5b": "getPositionOwedAmount(bytes32)", "94313f9f": "cleanConsents(bytes32[],address[])", "943153cf": "StonePaper()", +"943161bf": "UnifundRewardBalance()", +"9431640a": "mappedStudents(address)", +"94318106": "lift(address[])", "9431e412": "getCommunityRates(uint256)", "9431f5f0": "withdrawFees(bytes)", "943215ae": "investmentFundWallet()", +"94324f2e": "outsomeincomemore(address,uint256,string)", "943250c4": "SquirtCoin()", +"9432b19c": "compareHashAndRecoverAddress(address,uint256,bytes32,bytes)", "9432c92c": "setStartTimeIcoStage1(uint256)", "9432f0c7": "receiveClosePositionPayout(bytes32,uint256,address,address,address,uint256,uint256,bool)", +"94338bcf": "checkCallerAuth(uint256)", "9433a498": "totalFountainSupply()", +"9433a523": "bananaPerBlock()", "9433a81e": "personIndexToApproved(uint256)", +"9433bb08": "updateProtocolMetadata(bytes32,string,string,string,string)", +"9433caa5": "userBookAddress()", +"9434078b": "artistAccount()", +"94342d32": "withdrawD100AfterPresaleOver()", +"9434a4fa": "getInternalStrengthRate(bytes32,uint16)", +"9434c910": "gasStipend()", "9434c981": "createNewMartial(uint256,uint256,uint256)", +"9434d3e1": "setCOO(address,address,address,address)", "9434d765": "allocated12Months()", +"9434e2fe": "paintingIds(uint256)", +"9435378a": "changeteamMintrate(uint256)", "94353c70": "postMonForClass(uint64,uint32)", +"94357c6b": "enableBuyToken()", +"94359200": "changeRedeemFee(uint256)", "9435c887": "cancelBid()", +"94362e8b": "mintOnDeposit(address,uint256)", "9437563c": "logPriceBefore()", +"9437b08c": "clearLiquidity(address,address)", +"9437d0ea": "orderPositionList(bytes32,uint256)", +"9437e2fe": "checkWhitelistAllowed(address,address)", "943814f0": "getWhitepaperAt(address,uint256)", "9438cca8": "cancelEscrow(uint256,uint256)", "9439060f": "getGameNumber(uint256)", +"94390f81": "forceFinish(address[],address[])", "943911bc": "getWorseOffer(uint256)", +"94392376": "depositCollateralToLoan(uint256)", "943a32bc": "Relay(address)", "943a5e28": "RENEX_ATOMIC_SETTLEMENT_ID()", +"943aa38c": "EventEditAd(address,uint256,uint256)", +"943ac6cc": "getRewardsAmountPerSeconds(address)", "943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", "943b82f1": "getLimit(uint16)", "943bd25d": "addNewBetAmount(uint256)", +"943d0e76": "setBrightid(address)", +"943d7209": "executeTransaction(bytes)", "943dfef1": "bounty()", "943e170d": "neededSignatures()", +"943e45a7": "ClaimComp(uint256)", +"943e6d51": "controllerThree()", "943e8216": "vote(uint256,uint8)", "943eb504": "supplyLocked()", +"943ec477": "makeCommitment(bytes32,uint256,uint256,uint256,uint256,string)", "943fa364": "MPhoneSeller()", "943fcc9d": "buyRoseETH(string)", "943fd51c": "claim2Ply(uint64,uint64,uint64,uint64)", +"94401d75": "nullRoot()", +"94407465": "getTransactionStatus(bytes32)", +"94409a56": "totalStakeAmount()", +"9440a4c2": "verifyEthAmount(uint256)", "9440f01f": "buyCoins(address,uint256)", "9441268b": "updateGlobalTokenAge()", "944126f4": "acceptSupport()", "94412943": "bountyOf(address)", +"94417e23": "technologyAddress()", "9441e646": "addWhiteList(address,address)", "9442936f": "d(address,address,uint256)", "94429fa6": "withDrawAnyERC20Token(address,uint256)", "9442fad9": "deployTokens(uint256[],address[])", +"9442fd62": "deploy(uint256,address,address)", "94431f80": "getAvailableEtherCommissions()", "94432deb": "fairsale_protection()", "944358e0": "getContributedAmountInWei(address)", "9443b9be": "TokenTimeLock(address)", +"9443c2e3": "depositAbleToWithdraw()", +"94443b73": "pendingAlpaca(uint256,address)", "9444991d": "getVotingListCount()", +"94450e34": "setPeriods(uint32,uint32)", +"94457706": "usdtToDGM(uint256)", "9445eb3a": "Terminate()", +"94465b21": "getUserStakedAmount(address)", "94465bf6": "adjustDuration(uint256)", +"9446ad77": "_sharesPerDEFIBASE()", +"9446ec9f": "userinfo(address)", "94477104": "vestedOf(address)", +"9447ab76": "findBlockRefefrrer(uint256)", +"9447f03c": "blocksRentPrice(uint256,uint16[])", "9447fd0a": "until()", +"9447fe8b": "setBelong(address)", +"94480a69": "buy(address,uint256,bytes,uint256[])", "9448807a": "secondPay()", "9448bcea": "getPlayerRoundNums(uint256,address)", +"9448f03d": "createProperty(uint256,uint256,address)", +"9448fa12": "REFERRER_ACTIVATION_PERIOD()", +"94490592": "setClaimAtEmergencyPause(uint256,uint256,bool)", +"94491826": "transferLastPeriodFeesToGovernor()", +"94491fab": "crossReserveTargetAmount(uint256,uint32,uint256,uint32,uint256)", "94493c43": "getLockCount()", "94495468": "totalTokenRice()", "9449a361": "setStakeRequirements(uint256,uint256)", @@ -84798,192 +155142,386 @@ "944abc22": "_updateCurrentPeriod()", "944ac0c6": "MAIN_SALE_START_TIME()", "944af2ae": "TegTokens(uint256,string,string)", +"944afe53": "setBuyTokensLimit(uint256)", +"944b1479": "setNextFeeFraction(uint256)", "944b7c3f": "getMaxNumberOfTokens()", +"944ba01d": "_getOwnedTokensByIndex(address,uint256)", "944c1d97": "resetPeriod()", "944c8929": "checkBeatingPrice(uint256,bool)", "944d4505": "IqraChishti()", "944da654": "editModule(uint256,uint256,address,bytes4)", "944dc22c": "addRemovableIdArrayItem(address,uint256[],string,string,string,uint256)", +"944dd5a2": "updateRewardAddress(address)", +"944e87f8": "CreateERC20RewardPool(uint256,address,uint256)", "944ea02d": "checkTokenBalanceState(address)", "944ea477": "OPERATION_AMOUNT()", "944f0499": "transferTokensFromTeamAddress2(address,uint256)", "944f0e64": "tokenInfoParametersReady()", +"944f3771": "_setReservesOwner(address)", +"944f85ae": "isGlobalOperator(address)", +"944fd180": "authorisedCallers(address)", +"94500a5c": "updateLevelTokenPrice(uint8,uint256)", "9450b1c8": "addCharityFundation(string,string,string)", +"9450f9bb": "changeFlightStatus(string,uint256,uint256,uint256)", +"9451447b": "changeAffiliate(uint256)", +"94518819": "addDapp(uint8,address,address)", "9451bca7": "result_votes()", "9451f865": "TestConf()", +"94524096": "setExchangeEnabled(bool)", "94525e12": "lowRate()", +"9452821c": "setFeepercentage(uint256)", +"9452fca4": "onesplitParts()", "94532ced": "blockSettle(uint64,uint64,bytes)", +"94539467": "lotteryToken()", "9453b95d": "addOrUpdateAccounts(address[],uint256[],uint256[])", "9453f381": "getBeneficiaryCash(address)", "9453f767": "createOrder(string,address)", "94543c15": "isDeprecated(address)", "94544e64": "transferFeePercent()", +"94547fcc": "setLink(address)", +"94553a03": "RevokeAccessFromThirdParty()", +"94553a4e": "mirror(address,uint64)", "94555d1a": "addSubscriber(address)", +"94556eab": "totalMatrix()", "94558862": "setRewardClaimed(address,uint256)", "9455924f": "getTotalVolumeToken(address)", +"94562799": "stakingBonusOf(address)", +"94562adc": "executeLine(uint256)", +"94565d24": "staking_rewards_pool()", "94566d25": "jobPost()", "9456e5b5": "stockSet()", "9456f7e9": "getHashByTokenId(uint256)", "9456fbcc": "withdrawERC20(address,address)", +"94572f6d": "setWithdrawAllSlippage(address,uint256)", "94579680": "changeUserGrowthAddress(address)", +"9457ae83": "CEREBRO()", "9457c1dc": "enableMigration(address)", "9457c68a": "forceEndCall()", "9458434f": "mainWeiRaised()", +"945855a0": "getLastWithdrawalTime(uint256)", +"9458b95f": "placeOrder(int256,int256,int256)", +"94593a76": "dividendsToPower()", "94594625": "distributeAirdrop(address[],uint256)", +"94595d0e": "dfFinanceDeposits()", "9459c254": "refund(address,string,uint256,uint256,uint256)", +"9459da1f": "tokenForTeamGet(address)", "945a2555": "queryPermissions(address)", +"945a5e2f": "getPoolInfoByPID(uint256)", +"945a737c": "addAgricoltore(string,string)", +"945aaa44": "setStock(bytes4,uint256,uint256)", "945aab47": "tokenSaleCap()", "945ade92": "initialDate()", +"945b9ba6": "add_liquid(address,uint256,uint256,uint256)", +"945c1c4e": "PriceUpdated(uint256,uint256)", "945c6cf8": "burn_all_unsold()", "945c7438": "sign(address,int256)", +"945c7afe": "allHedgehogsLength()", "945c7c59": "distributeTokenSale(uint256,uint256,uint256,uint256)", +"945c9142": "CRV()", +"945cfe1f": "getPreTransferByIndex(uint256,uint256)", +"945d1229": "setMinterRole(address)", +"945d6486": "EDC()", "945d7b7e": "tranchesSent()", "945ddb52": "mainSaleTotalSupply()", "945e5f24": "roughSupply()", +"945ee661": "addClaimed(uint256)", +"945f18b8": "routerLength()", +"945f562e": "SLTD()", +"945f8a3c": "calcTotalReward(address)", "94602869": "receiverWithdrawal(uint256)", +"94606d0c": "WithdrawEth()", +"946091ce": "ownedDomains(address,uint256)", +"94610a60": "licenseOwners(uint256)", +"94611fef": "ViewRebaseTarget()", +"94613892": "enableDepositable()", "9461446d": "setProcessingFee(uint256)", "94615fc1": "setFreezingStatus(uint8)", +"94616451": "proposalStartTime(uint256)", "946267ec": "mintComplete(uint256,int256)", +"9462a541": "getStakingStartTimeById(uint256)", "9462eae5": "ChangeContractor(address)", "9462f02f": "tactics(uint256)", "9462f4bc": "bytarr(bytes32[])", +"94630d55": "RandomVerifyFailed(bytes,uint256)", +"946362c6": "lockAirDrop(address,uint256)", "94636cee": "createPromoMonster(uint32,bytes,address)", +"94638882": "EPOCH_REWARDS_PERIOD(uint256)", "9463d582": "teamOneWin()", +"9463e068": "enabledTokens(uint256)", "94642f96": "investorWhiteList(address)", +"94643f71": "requireToConfirmMessage(address,bytes,uint256)", +"946442bc": "TransferFound(address,uint256)", "94644764": "lookUpClaimerAddress(uint256,address)", "94650fb8": "Goal()", +"946519f1": "getSwapStatus(address,address,address,bytes,bytes32)", "94655f2b": "printMoney()", "94658690": "parseUserInivte(uint256,uint256)", "9465c114": "vanishToken(uint256)", +"9465cd27": "SetOwners(address[])", +"9465fa0c": "AddedOwner(address)", +"9466120f": "rebaseWindowLengthSec()", "946644cd": "fun()", +"946647f1": "chainlinkConversionPath()", +"94667c17": "privateList(address)", +"94668a1d": "allAdStart()", "94679ce7": "changeEtherPrice(uint256)", +"946807fd": "SALE_START_TIMESTAMP()", +"94684389": "isRateValid()", +"94686123": "setPrincipleToken(address)", +"9468df93": "getCountOfBuys(uint256)", "946941ec": "Contribute(bytes24)", +"946966aa": "GameWinner(address)", +"9469ae4f": "setLockPeriods(uint256,uint256,uint256)", +"9469ea39": "creditLimitLeftOf(address)", +"946a6747": "instance_info(bytes32)", "946a893d": "shopDoublet()", "946ad94d": "tokenContractEnableTransfers(bool)", "946ae8df": "FMGHEALTHCARE()", +"946b1120": "addShortCode(string)", +"946b817c": "setted()", "946ba496": "ShishuToken(uint256,string,string)", +"946bbed2": "isSettlementRunning()", "946bcc30": "getFounder()", "946bf4d7": "winningProject()", "946c0344": "getChallenges(uint256)", +"946c3562": "getAddress(uint64)", +"946c8148": "setPriceFeedL2(address)", "946ca295": "userTransfer(address,uint256)", +"946ce8cd": "setLiquidationRatio(uint256)", +"946d0149": "show_balance()", "946d1480": "ethToUsd(uint256)", "946d8806": "getMyPacifist()", "946d9204": "initialize(address,address[])", +"946da672": "gotLIONUniswapPair()", +"946eb35b": "getminUserVotePercent()", +"946ed660": "LogSold(address,uint256,uint256)", +"946f2e48": "resolutionRate()", +"946f46a2": "decreaseHardDeposit(address)", "946f8876": "updateTierStatus(uint256,uint256)", +"946fa013": "deductFee(uint256,uint256)", +"946fe3e8": "stakeETH(address)", +"94700020": "getCurrentReward(uint8)", "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)", +"9470e868": "fade(address)", +"9470f3cb": "isPackIdUsed(address,uint40,uint16)", +"94713f16": "seedProviderAmounts(address[],address[],address[],uint256[])", +"9471676c": "getTotalScores()", +"94722397": "addBank(address)", "94727b41": "deleteProduct(bytes32)", "9472b32c": "sale_period()", "9472eb76": "setPayerString(string)", "947355df": "addToList(string,address[])", "94737987": "referralProgram(bool,uint256)", "94741017": "failCrowdsale()", +"94753cea": "PROC_OVERFLOW()", +"94756aa7": "market(address,uint256)", "94756e22": "VikoChain(string,string,address)", "94759c36": "createQuote(uint256,uint256,bytes32)", +"947637ad": "LogUpgrade(address,address,uint256)", +"9476554d": "currentPotSize()", "9476760d": "AthletiCoin(address,address)", +"9476f922": "hello_world()", +"94770c05": "hcrv()", "947721dd": "refundEndDate()", +"9477eb1c": "locked_stake_min_time()", +"94781708": "_minETH()", "947846a4": "RefundableCrowdsale(uint256)", +"94785a0c": "blockFundsForSingleSigWithdrawal(address,uint256)", +"9478941c": "removeOperatorRole(address)", "9478a7c9": "getReferralOf(address)", "9478ab8c": "ethUsdPrice()", +"9478b96e": "minConsensusPercentage()", "9478ba47": "calcUnclaimedFees(uint256)", "9478f7cf": "_receiveEth()", +"947975d9": "totalSupplyAt(uint128)", +"9479948f": "exchangePortal()", "9479a732": "sell_car(uint256)", "9479f2c7": "STAKE_DEADLINE()", +"947a3026": "totalPendingCompound()", "947a3168": "token_name()", "947a36fb": "interval()", +"947a509d": "feeIsRegistered(address)", +"947a974f": "Search_flight_PRICE(uint256)", "947aca55": "addMasterAccount(address)", +"947ae12a": "getUnstake(address)", "947af462": "setBurnRequestAddressMap(uint256,string,address)", +"947b8bbf": "adminAllowFarmGenerator(address,bool)", +"947b9383": "convertUsdToHodl(uint256)", "947bc72d": "MAX_TRANSFER_TIMSPAN()", "947bd798": "rawManuallyMintTokens(address,uint256)", +"947c3457": "activeReward()", "947cbc1e": "dariatest()", +"947dd6e5": "allDelegates(uint256)", +"947e15bf": "thresholdsSequenceNum()", +"947e81a2": "setFairLaunchPoolId(uint256)", "947e8a26": "TOKEN_MINTING()", +"947e93d9": "readSettings(uint256)", +"947ef8a4": "updateCompoundRateTimeframe()", "947f7d1d": "newRandom()", "947f8ede": "IcoCapChanged(address,uint256)", "947f97cc": "getUnsoldTokens(uint256)", "947f996d": "testGreatherThan()", +"947f9a81": "unstakingTaxBP()", "947fd341": "getCoefficientMultiplier(string,string,string)", +"947fdb8b": "sponsor(uint256,uint256)", +"947fe812": "execute(address[],bytes[],uint256[])", +"94807acc": "tokenReduceValue()", "9480cd1a": "getPillarRoundsKitties(uint8,uint256)", +"94812dab": "totalStakedLP()", +"94824274": "tokenconversionrate()", "94828ee8": "DelightToken()", +"94828ffd": "unpauseCapital()", +"9482cb5d": "burnTaker(address,bytes32)", "94836dab": "sendFounders()", "9483e91a": "withdraw(address,uint256,bytes,uint256)", "9483f25c": "updateProfile(string,string,string,string)", +"94850d18": "RefundRequestCompleted(address,uint256,uint256)", "948623dd": "buy(address,bytes,bytes32)", +"94863df3": "setIsRound(bool)", +"94866852": "changePropriety(string,uint256)", "94868f7d": "airDropPayableTag()", +"9486dc1f": "waffleAddress(uint256)", +"9486ffbf": "ActionResult(uint256,uint256[],uint64[],uint256)", +"948737d4": "timb()", "948759d5": "transfermulti(address[],uint256[])", "94876995": "isHandleAvailable(bytes32)", +"9488d56c": "categoryIdToItem(uint64)", +"94895c1b": "hegic()", "9489fa84": "calcSharePrice()", "948a70d7": "SingularityTest16()", "948b557a": "getDispute()", "948b6790": "getTokensPrice(uint256,bool)", +"948baf27": "get_game_asset_sale_status(string)", +"948bbeef": "ContractTemplatePublished(uint256,address,string,address)", +"948bc482": "fill(bytes32)", "948bc5d6": "XfinityUtility()", "948cd942": "getDronePot()", "948cfd0c": "updateBootyBase(address)", +"948d8ce6": "getDenormalizedWeight(address)", "948d902d": "getTokensByETH(uint256)", +"948de6ad": "locked_stake_max_multiplier()", "948e1a1c": "AVAILABLE_TOKENS()", +"948e9ad7": "mixERC20(bytes32,uint256[2],uint256[2][2],uint256[2],uint256[4],address,uint256,address)", +"948ee3f6": "setIntent(address,address,bytes2,uint256,bytes32)", "948f1daa": "mintLockPeriod(address,uint256,uint256)", +"948f39e7": "siteData(uint256)", "948f5076": "setCache(address)", +"94906a3c": "G_RATE_SCALAR()", "949076b6": "ensureInterval()", +"94909e62": "gulp()", +"9490a325": "_encode_int32(int32,uint256,bytes)", "94910d60": "createContract(address,address,uint256,string)", +"94914653": "totalBurnFundReceived()", +"949177e3": "eleven()", +"94918bc1": "changeSavingsManager(address)", +"9491951b": "BLACKLISTED_SIG()", "9491a8eb": "updatemktValue(uint256)", "949201d7": "LOG_FailedSend(address,uint256)", "94923fd7": "LogRevokeNotice(bytes32,address,uint256)", +"9492b3a8": "contadoresDocumentos(uint256)", +"9492f2c9": "userLastTaskID(address)", "9492fbf7": "BGS()", "94930138": "getLoanUnavailableAmount(bytes32)", "949319b1": "verifyService(address)", "9493242c": "returnLender(uint256)", "9493ac07": "setBattleFee(uint256)", +"9493ae82": "AuctionCreated(bytes32,uint256,address,uint256,uint256)", "9493b9b0": "createMiner()", +"9493c918": "liqLocked()", "9493f012": "batchSafeTransferFrom(uint256[],address,address)", "949430f0": "BTC_SUISSE_TIER_1()", +"9494af85": "getUsernameFromWallet(address)", "94953294": "downTheDrain()", "94954967": "setMaxWhitelistLengthInternal(uint256)", "9495ad6c": "listExists(bytes32)", +"9495c25a": "coord()", "9495f8c6": "upgradableState()", +"949615fd": "ROLE_FORCE()", "9496df3f": "freezeQuorumPercent()", "94974aea": "unlockedAtBlockNumber()", +"94979ab3": "revealSubmission(uint256,bytes)", "9497b7a1": "yearlyTeamAmount()", +"949805ff": "executeBuyArbitrage(uint256)", +"949813b8": "unclaimedRewards(address)", +"94982f0a": "decodeConsensusState(uint256,uint256,bool)", +"94985ddd": "rawFulfillRandomness(bytes32,uint256)", "9498a265": "updateCertifier(address,address)", +"9498bd71": "initialize(bytes32)", "9498bef5": "overloadedMethod(address,uint256)", +"9498d95f": "callCGetZero()", "9498fb26": "ELIX()", "94992b76": "ICOSTART()", "94993e52": "_breedWith(uint256,uint256,address)", "94996680": "setStartTimeStamp(uint256)", "9499e018": "destructContract()", +"9499e964": "ServiceRegistered(address,address)", +"949a2a7c": "setCustodianFilDepositAddress(string)", +"949a352c": "getUint256Slot(bytes32)", +"949a4607": "usersPrizePoolLevelAmount(address,uint256,uint256)", "949a6868": "RefundTicket(address,uint256)", "949a9d59": "receiveWithData(bytes)", +"949b234b": "getAveragePriceLast20BlocksIn1WETHPriceWorth(address)", "949b56ef": "whitelistPrincipleLockPeriod()", +"949b5890": "king_crowning(address)", "949b9e10": "createHumanStandardToken(address[],uint256[],string,uint8,string)", "949ba7c3": "GNCCrowdsale(address,address,address)", +"949be6a6": "BidDecrypted(uint256,bool)", +"949bf27d": "getLot(uint32)", +"949c4fa3": "viewPrice(address,uint256)", "949c5099": "isAwaitingPRETDETokens(address)", "949c89a0": "BitBaBeToken()", "949cc9ea": "tokenSupplyBackedByGold()", "949cfc64": "restTime(address)", "949d225d": "size()", +"949d38b1": "setGriffinPerBlock(uint256)", +"949d8790": "taskReceiptHash(uint256)", +"949d9d76": "getClaimsTokenMV(uint256)", "949db658": "rateProvider()", "949dcdab": "forceWithDrawToInviter(address,uint256)", "949dfa63": "calculatePurchaseReturn(uint256,uint256,uint8,uint256)", +"949e11e3": "FUNC_67C18AA1(uint256,uint256)", +"949e1634": "originalChecklistItems(uint256)", +"949e720a": "TFI_ratio()", "949e8acd": "myTokens()", "949eabff": "fundsRaisedInWei()", "949eb1c6": "bankersLimit()", +"949ee989": "addAuthorizedExternal(address)", +"949f2cef": "getNumberOfRecords()", +"949f4df4": "exploitCompensationFundValuePerBlock()", "949f80b0": "RandomExample()", "949f80c5": "getResult(uint256,uint256)", +"949f9262": "tendiesCallback(uint256,uint256)", +"94a053cb": "rebaseStep()", "94a08c69": "TOTALSUPPLY()", "94a0b878": "fromTileId(uint16)", "94a0c1cc": "cancelVoteForCandidateBySnapshotBlock(address,uint256,uint256)", +"94a13ae4": "onesplitSlippageMax()", +"94a144db": "abandonMachine()", +"94a14a34": "queueProposal(uint256)", "94a1710d": "testNonOwnerCantBreach()", "94a1be9c": "addVotes(uint256)", "94a1d75c": "withdrawBidForSketch(uint256)", "94a224c0": "withdrawExpenses()", "94a2301e": "tokensInEth()", +"94a24818": "addCharityRecipient(address,uint256,uint256)", +"94a271fd": "balanceOfAccount()", +"94a3469a": "finishChangeTaxRate()", +"94a3af07": "bBtc()", +"94a3de24": "afiRate()", +"94a3e7be": "lastTrackedBaseSupply()", "94a535fc": "TokenAdd(uint256,address)", "94a53d41": "minimal()", "94a5601a": "getMaxCap(address)", +"94a5aa8d": "_weiRaised()", "94a5c2e4": "maxValue()", "94a5cccb": "deposit_period(uint256)", +"94a60cbe": "blockContactEvent(address,address)", "94a66da2": "GamePlayerCoin()", "94a66df3": "objectGloves()", +"94a6b712": "increaseLockingTimeByAddress(address,uint256)", "94a74249": "panicked()", "94a754e0": "resolveChallenge(uint256,bool)", "94a771d7": "getReportTimestamp()", @@ -84991,27 +155529,57 @@ "94a80dd9": "getPoolValue(uint256)", "94a82671": "unRegister(address,string,address)", "94a89233": "isPluginInterface()", +"94a8fc43": "pendingRefs(string)", +"94a91de8": "contribute(address,uint256,bool)", +"94a927fe": "returnOwner()", +"94a943a9": "getVerifierShard(address)", +"94a98013": "getDefi99PlusAddress()", +"94aa07b9": "buyStage()", "94aa6775": "newDeposit(address,address,uint256)", "94aa8174": "AddParticipant(address,address,string,uint8,string,string,bytes32)", +"94aac245": "setCoinsPerDay(uint256,uint256)", +"94aad980": "investList(address,uint256)", +"94ab0162": "bondCap()", "94ab9608": "XRRtoken()", "94abbeaf": "PieToken()", +"94ac5818": "minimumToken()", +"94ac91c6": "FRAXStablecoinAdd()", "94ad4f89": "icoDays()", "94ae2341": "exchangeHelenium(uint256)", "94ae4899": "onMintCalled(int256)", "94ae7ac3": "allowanceAdd(address,uint256)", "94aef022": "getVariables()", +"94af59d9": "RewardAddedToWithdrawals(uint32,address,uint256)", +"94af7830": "ChangeSafeguardstatues()", "94af9da8": "createNewCombination(address)", +"94affbf5": "getPoolOrder(address,uint256)", "94b0780f": "burntokens(uint256)", +"94b17f1a": "ChangedSuperOwner(address)", +"94b1fc6a": "invalidatedOrigPurchases(uint256)", +"94b2294b": "maxAssets()", +"94b23972": "walletPESales(address)", "94b2ffc0": "StarterCoin(uint256,address)", "94b31fbd": "getTokenAllowance(address,address,address)", "94b367a3": "_takeOwnership(uint256,address)", +"94b3a2a3": "average_ethSpent(address)", +"94b3e871": "decreaseAuthCount(address,uint256)", +"94b4116c": "getSellClaimReturn(address,address,address,uint48,uint256,uint256)", "94b44f3e": "addressToBlock(address[],bool)", +"94b47332": "_dropArtemMarket(address)", +"94b4c184": "RECEIVER_SIZE()", "94b4c93d": "MomentalyOwned()", "94b5255b": "distributePreBuyersRewards(address[],uint256[])", +"94b539cc": "ref_rates(uint256)", "94b5c9f3": "getChampReward(uint256)", "94b5ed6d": "minorOwnerShares()", +"94b60b98": "DEPOSIT_PER_CAPACITY()", +"94b65bbf": "AddValidConsumer(address)", "94b66386": "attackIsland(uint256,uint256)", "94b67b1c": "getWeakenedDefensePower(uint256)", +"94b69ffa": "xp(uint256)", +"94b6f9d4": "sell(address)", +"94b7144b": "sendBountyToken(uint256[],address[])", +"94b829fc": "LogFinishICO()", "94b8896c": "holdAddress2()", "94b8e58e": "resetWith(address,address)", "94b8e72a": "Allocate(address,address,uint256,uint256,bool)", @@ -85022,177 +155590,333 @@ "94b9b62f": "getPacifistmasterReq()", "94b9bdc4": "BlueDiamond()", "94b9f152": "cancelConversion(uint256)", +"94ba2c03": "ExchangeRateChange(uint256,uint256)", +"94ba89a2": "swapBorrowRateMode(address,uint256)", "94bab061": "getVersionNo(bytes)", "94bacfef": "distributeVLD(address[],uint256,uint256)", "94bb136f": "minFinnRequired()", +"94bb64bd": "LogRemoveToken(address,string,string,uint8,string)", +"94bb74a9": "SaleEnded(uint256)", "94bb7d64": "itemHistoryOfPlayer(uint256,address)", +"94bb87f4": "LogAuthorizedAddressAdded(address,address)", +"94bb9064": "getDepositStatus(address,uint256,uint256)", "94bbfb56": "changeAffiliatePercentage(uint256)", +"94bc180d": "dmgToken()", "94bc7df4": "BlocksToGo()", "94bcdb4c": "Example2()", "94bd5cb6": "newParityOwner()", +"94bd7569": "codex(uint256)", "94bdb93b": "MessageAdded(address,string,uint256)", +"94bdf63e": "dollarPriceOne()", +"94be10a2": "CANCEL_EXECUTION_ROLE()", "94be2423": "setAtomGen(uint256,uint8)", "94beb9b2": "ConstructBitcoinClue(bytes32,bytes32,bytes32,bytes32)", +"94bf1cbb": "getERC20Token()", "94bf804d": "mint(uint256,address)", "94bf8862": "numBoards()", +"94bfbe74": "LOGGER_ADDRESS()", "94c06a58": "descending()", +"94c08334": "Set_USDT_Contract(address)", "94c0ac22": "ExchangeZWCToToken(address,address,uint256)", +"94c0c964": "RefundETH(address,address,uint256)", "94c0f3e2": "PRESALE_PERCENTAGE_5()", "94c176e4": "distributeAll(uint256)", "94c19fb8": "LogSaleClosed(uint256,uint256)", "94c1d810": "partFromProvider(uint256,address)", "94c21ff3": "STATEMENT_HASH()", +"94c23566": "refundGas(address,address,uint256)", +"94c238ac": "minimumBurnAmount()", +"94c263e2": "setLGEPeriod(uint256)", "94c275ad": "maxConversionFee()", "94c33163": "getTotalTokensSold()", "94c33d90": "districtToBuildings(uint256,uint256)", +"94c34861": "exemptRecipients(address)", +"94c393fc": "isAToken()", +"94c3ab56": "tradingHistory(address)", "94c3fa2e": "getLastBlockHashUsed()", "94c41bdb": "getPreferedQtySold()", "94c467d0": "banAuditor(address)", +"94c46a97": "viewLineIncomeReferrals(address,uint8)", "94c475ec": "setAltDeposits(uint256)", +"94c4a124": "getUniswapMKRExchange()", "94c4e3c6": "_getVolumeBonus(uint256,uint256)", +"94c52113": "erc721StakeFactors(address)", +"94c58af3": "incTotalBuy(uint256)", +"94c5eddb": "MEDIANIZER()", "94c6116f": "getNextPeriodTimestamp()", "94c62fb5": "SPARCPresale()", "94c64a2e": "updateBtcRate(string,string)", "94c69715": "bonusInPhase3()", +"94c6c2d1": "getMasterpiece(uint256)", "94c70cb1": "bonusEnd20()", +"94c74a63": "BPFHDetails(uint256)", "94c77969": "setTokenContract(address,uint8[],bytes32[],bytes32[])", +"94c79277": "Mint(address,uint256,uint256,uint256,uint256)", +"94c79f74": "resumeSynth(bytes32)", "94c87a84": "withrawAllEthOnContract()", "94c89af5": "FeeProvider()", "94c8cd62": "AreebaCoin()", +"94c8dcb1": "getNumOfPayments()", "94c90cac": "EliteCoin()", "94c9b647": "sendTransaction(address,uint256,int256)", "94ca9f90": "highestBalance()", +"94caca6f": "executorAssignsExecutor(address,address)", "94cace04": "enableMix()", "94cb0947": "availableTokens(address)", +"94cb323e": "getAdopets()", +"94cbe4a0": "isOnlyAmunUserActive()", "94cc0898": "___test()", +"94cc699e": "lpStakingPool()", +"94cc7ff9": "addHolyValor(address)", +"94ccb137": "moduleExists(bytes32)", "94ccbc1f": "transferPattern(bytes32,address,string,uint8,bytes32,bytes32)", +"94cd300a": "setDaysFactor(uint256)", +"94cd8b23": "transferEther(uint256,address,uint256)", +"94cd9a0e": "getAthletesByTeam(string)", "94cdbea1": "SetDappinfo(string,address,address,string,string)", "94cddaf1": "unlockTeamAndReserveTokens()", +"94ce29c5": "reloadextraAddress(address)", +"94ce41cb": "isValidSignature(address,bytes)", +"94ce81d5": "withdrawSai(uint256,address,uint256,bytes,bytes)", "94cec87b": "preSale3Finished()", +"94cf795e": "getSigners()", "94cf9b1b": "FGCToken()", "94cfb3d8": "getItemTempHolders(uint256)", +"94cfcdd7": "MultiAsset(uint256[],bytes[])", +"94cff7ef": "setProxyLogicContract(address)", "94d0025e": "getNumberOfOpenSteps()", "94d008ef": "mint(address,uint256,bytes)", "94d02fff": "Authored(string,string,uint8,uint256)", "94d036bf": "validInitialBuyoutPrice(uint256,uint256)", +"94d03ecb": "mVestingBegins(address)", +"94d0737b": "keepMinRatio()", +"94d091c2": "ClaimAdded(bytes32,string)", +"94d0cb6e": "lock(uint256,uint256,address,bytes32)", +"94d0d23b": "getMaximumManagerFee()", "94d10c41": "spendUserBalance(uint32,uint64)", "94d127a8": "calculateSeedBuy(uint256,uint256)", "94d1330d": "spinnerCounts(uint256)", "94d1b7e8": "triggerFailFlags()", +"94d1e9b0": "getAnyAddressTokenBalance(address)", +"94d2116d": "removeParticipant(address,string)", +"94d212e6": "getContractTokensBalance()", +"94d22960": "AppealPossible(uint256)", "94d26cb5": "getBetterOrderId(bytes32)", +"94d27635": "WEEK4()", "94d2b21b": "unauthorizedAddress()", "94d2bdfe": "addSkill(bytes32)", "94d2ca12": "getByAlias(bytes32)", "94d2d7a7": "getCreatorAddress()", +"94d304e3": "newReward(string,bool,address,address,uint256,uint64,uint64,uint8,uint64)", +"94d34486": "withdrawPRFT()", +"94d35990": "getSCDecimals()", "94d3d38d": "registerHello(bool,uint8,int64,int64,string,string)", "94d3de83": "TeamVesting(address)", +"94d43e14": "timelockDepositTo(address,uint256,address)", "94d44f12": "createBattle(uint256)", "94d453db": "MIN_INVESTMENT_PHASE1()", "94d45856": "placeBet(bytes32,bytes32,bytes32)", +"94d461d9": "getFullAddress(address)", +"94d540bb": "addUniPair(address)", "94d54581": "EICQERC20()", "94d5539d": "transferLocked(address,uint256,uint256,uint256[])", +"94d57ed1": "stakedLiquidityTokenPerAddress(address)", +"94d619c2": "allocationDenominator()", "94d63afd": "left3(uint256)", +"94d63c9f": "isSparkReady(uint256,uint256,uint256,uint256,bool)", "94d645a8": "resolveClaim(address)", +"94d6c574": "init(address,address,uint256,string,string,uint8)", "94d702a4": "tgeNextPartInvestor()", +"94d745dc": "BorrowERC20FromCompound(address,uint256,uint256)", "94d762c3": "Vault(address)", "94d77363": "getTokenSold()", "94d95f8f": "MAX_CONTRIBUTION()", "94d96fa1": "BTC7200on420()", +"94d9bd40": "kiwi()", "94d9c9c7": "setObserver(address)", "94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", "94da0746": "PRESALE_TOKEN_ALLOCATION()", +"94da17cd": "getHomeFee()", +"94da662f": "drainEth(uint256)", +"94da7864": "execs(address[],bytes[])", "94dafb16": "geteam(address)", "94db4d05": "changeStakingContract(address)", "94dba872": "o_automata(uint256)", "94dbc70e": "lockState(address)", "94dbe74e": "removeEscrow(address,address,uint256)", +"94dc2e13": "MoveFunds(uint256)", +"94dc3afd": "setHXYExchange(address)", "94dc6f6b": "splitShares(uint256)", "94dc7cec": "minBuyForPrize_()", "94dc84ca": "AUTH_INITCONGRESS()", +"94dc9245": "GetLPUSDBalance(address)", +"94dc9cf3": "buyWithETH(uint256)", +"94dcf2e6": "setDelegate(uint256,address)", +"94dcf8b6": "addBountyUserMultiple(address[],uint256[])", +"94dd2869": "endMinting(uint256)", +"94dd43e7": "discountTradeAMMtoAMM(address[],address[],address[],uint256,bytes[],uint256[])", "94ddc8c0": "submitBallot(bool)", +"94ddd766": "claim(bytes32,bytes,bytes,bytes32)", "94de3825": "_transferToAnotherAddr(address,uint256,bytes32)", +"94de95b0": "sendLeaderShipBonusRuby(address,uint8)", +"94df21d8": "BanAddresses(address,bool)", +"94df393f": "handleDelegationAdd(address,uint256,uint256,uint256)", +"94df4cfc": "_outInvest()", "94df682d": "loginVerify(bytes32)", +"94df6bc4": "bankEntryAddress()", "94dfd38a": "test_invalidValue1EqValue2()", "94e08fc2": "addProduct(bytes32,uint8,uint8)", "94e09511": "sendTokenToPlatform(uint256)", "94e0d371": "stage3()", +"94e0dee4": "isAddressAlreadyClaimed(address)", "94e0e328": "torchRunner()", "94e0f844": "totalSellOrdersOf(address)", "94e10784": "_getRate()", +"94e11ca8": "getUnlocked(address)", +"94e15c8f": "REFUNDED()", "94e16386": "teammatesworld(address)", +"94e1a448": "appendAccountIssuanceRecord(address,uint256,uint256,uint256)", +"94e1cf96": "fairLaunch()", "94e21fa0": "multiPay(address[],uint256[],address)", +"94e23d36": "premiumDragons(address)", +"94e251a8": "setMintCostBNB(uint256)", "94e25c37": "unlockCustomer(address)", "94e2662f": "setRequireWhitelistingBeforeDeposit(bool)", +"94e2b863": "pendingSwApp(uint256,address)", +"94e2c1de": "getOptionCostETH(uint256,uint256,uint256,uint8)", "94e47e61": "create_block()", "94e4a822": "split(address[])", "94e4c808": "IPFSStore()", +"94e4cab9": "lastProposeEndBlock()", "94e50e7a": "getSigner(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"94e56b2b": "total_dev_fund()", "94e5b7e6": "getPlace(uint32)", +"94e5d971": "IdentitySet(address,string)", "94e5e890": "peculOldAdress()", +"94e6a036": "setDividendPoolData(uint256,uint256)", +"94e6cb1a": "depositSome1(address,uint256)", "94e8075d": "Development()", "94e8767d": "uintToBytes(uint256)", +"94e8b32e": "OwnershipRemoved()", +"94e8d284": "last_id()", "94e93017": "_deployBallot(bytes32,bytes32,bytes32,uint256,bool,bool)", +"94e99256": "getETHLatestPrice()", "94ea9987": "sendEthersToWinnerAddress(address,uint256)", "94eb463b": "Unset(address,uint32[])", +"94eb80d7": "devClaimMap(address)", "94eba0b5": "StarCoin()", "94ebd374": "purchaseAccessory(uint256,uint256,string,uint256)", +"94ec193d": "input_int8(int8)", "94ec233f": "boolCallWithArray(bool,bool[4])", "94ec3756": "resister(uint8,uint256,uint256)", "94ec3a0d": "playersRequired()", +"94ec6903": "dividendStartDate()", "94ec7cf2": "setA_Signature(int256)", +"94ec8277": "perBlockReward()", +"94ecb85b": "_setUndistributedAddress(address)", +"94ed255f": "delegateAdmin()", "94ed9b77": "append(address,address)", "94eedaa4": "hirerReleaseFunds(bytes16,address,address,uint256,uint256)", "94ef987e": "minimumPayment()", "94efadea": "zoPrice()", "94efafe9": "publishTemplate()", +"94efb3b3": "getEstimatedPendingDivsTurbo(address)", +"94eff878": "updateMinimumAmount(address,uint256)", "94effa14": "WithdrawETH(uint256)", "94f0080c": "getBalancePremiumsPaid(address)", "94f0b43c": "TripusCandyToken()", +"94f0eb3d": "SAVER_EXCHANGE_ADDRESS()", +"94f112e8": "glyphNoLongerForSale(uint256)", "94f13f4a": "getGameItem(uint256)", "94f183cb": "get_votes()", "94f188be": "createIssuedToken(address[],uint256[],uint256,uint256,string,uint8,string)", +"94f22412": "mintForMigrate(uint256)", +"94f22f68": "uniswap_swapExactTokensForTokens(uint256,uint256,address[])", +"94f284c5": "setTurboFeePercentX100(uint256)", +"94f29abf": "tokenIdByGenerationAndHash(uint8,uint256)", "94f29cb3": "medalIfFreeze(address)", +"94f2dd7b": "minStrikePrice()", "94f2e623": "setLLV_edit_11(string)", "94f2ed53": "_unlockNinja(uint256,uint16)", "94f3217c": "MINIMUMINVESTMENTSALE()", "94f38799": "GoChain()", "94f3f81d": "removeAuthorization(address)", "94f47146": "put(bytes)", +"94f4c608": "seedProviderPools(address[],address[])", +"94f510b4": "DAYS_IN_SECONDS_180()", +"94f56151": "relock_duration()", +"94f58224": "kwhForMonth(uint16)", +"94f583f0": "setSablierContractAddress(address)", "94f5a1af": "LATOPreICO()", +"94f5bd6e": "oracleExchange(address,address,uint256)", "94f5ffd5": "betMake(uint256,uint8)", "94f60a63": "getKudosLeft(address)", "94f61134": "executeOrder(uint256)", "94f649dd": "getDeposits(address)", "94f6ba1c": "getMonsterClassBasic(uint32)", "94f6e8ed": "initBallotProxy(uint8,bytes32,bytes32,bytes32[4])", +"94f70aca": "setCvpVestingPeriodInBlocks(uint256)", +"94f7101d": "sellAndBurnMln(uint256)", "94f75b96": "PerkToken()", "94f7624f": "NAP()", +"94f7a42a": "ReceivedFund(address,uint256)", +"94f7f62b": "getBlockReward(uint256)", +"94f82960": "getUniswapReserves(address)", +"94f894fc": "ExchangeSpent(address,address,address,uint256)", +"94f8a866": "changeStakingMinimumSeconds(uint256)", +"94f8a8af": "getTaxSlab()", "94f8e954": "cancelInvestment()", +"94f9059f": "removeCollateralToken(address)", "94f92322": "getTotalPrediction(uint256,uint256)", "94f976c3": "confirmProduct(uint256)", "94fa3131": "claimBonus(uint16)", "94fa5bcd": "setNewApproves()", +"94faab23": "alpaca()", "94fabfb3": "getDocData(uint256)", "94fb54d5": "euroThreshold(uint256)", +"94fb6d58": "_allfactorylist(uint256)", "94fb86c0": "referral_ledger()", +"94fbdee5": "totalSlashedToken()", +"94fcf3c3": "createMarket(bytes32,uint256,bool,uint256[2],uint256[2])", "94fd1c1c": "SAIToken(address,address,address)", +"94fd9645": "get_blocks_before_claim(uint256)", +"94fd9702": "st0()", "94fdb8df": "HolyBible(uint16,uint16,uint16,uint16)", "94fdbbb2": "createRedeemMessageHash(uint256,bytes4,bytes32,bytes32)", "94fe344d": "SimpleToken(uint256,string,uint8,string,bool,bool)", "94fe6ed1": "kTikTakCoin()", +"94fe9f49": "char(uint8)", "94ff1426": "_setTransmuterAddress(address)", +"94ff317e": "testRun(uint8[],address[],uint8[],uint256)", "94ff4b2b": "getServerFee(uint256)", +"94ffb2a9": "unpoolTaco()", "94ffb819": "addApprover(address,string)", +"94ffdfa8": "AuctionWon(uint256,address,address)", "94ffe2c7": "PolicyRegistry(address)", +"95000561": "top_10_investors(uint8)", "95005a00": "LIANGToken()", "95005b8b": "GetPlayerID(bytes32)", +"95006c30": "Holdplatform_address()", "9500aa12": "MockController(address,address,address,address)", +"9500da20": "approve_374(address,uint256)", +"9500ed9b": "unbondWithHint(uint256,address,address)", "950108d7": "WithdrawForeign(address)", +"95011442": "numWithdraws()", +"950114c6": "devFeeDelivered()", +"95013604": "LOAN_SHIFTER_RECEIVER()", +"9501799d": "setUnitCoinProductionMultiplier(address,uint256,uint256,bool)", +"9501d231": "sendDekla(address)", +"9501d9ee": "HoldBonusCap()", +"9501dc87": "setPoolFee(uint256)", +"9501f586": "setCln(address)", +"95020ffd": "GetNumberOfBurnedUsersOnThePlatform()", "95029f34": "PendingOwner()", "9502bb8a": "renounceMaster()", "9502d761": "ProposalSubmitted(address,uint256)", "950311ab": "setCurrentAction(uint256,uint8)", "95032b62": "rand(uint256,uint256)", +"95035192": "calculateShareMintAmount(uint256)", +"9503560d": "currentBountyId()", "9503c4b4": "SmartRouletteToken()", "95040933": "mrk_contract()", "950463fc": "calculateRefundedEthWithDiscount(uint256)", @@ -85200,62 +155924,121 @@ "95050862": "optimalExp(uint256)", "95059465": "textFor(bytes32)", "9505b2a7": "createPanda(uint256[2],uint256,uint256)", +"9505b68c": "switchStart()", +"9505ceb1": "sendByMethod(address,address[2],uint256)", +"95064e28": "setSmallPercentageTransferFee(uint256)", "9506681f": "updateminContribution(uint256)", "95066e33": "getTopic()", "95068886": "change(address,uint256,address,uint256)", "95069136": "requestLiquidation(uint256)", +"950699fe": "isAvastarTeleporter()", "9506a57a": "Marriage(address)", "9506a75c": "setChild(address,bytes32,bytes32,bool)", +"9506ccbd": "checkArg(bool)", +"95071cf6": "initBlkN()", "9507b53a": "SchedulableToken(address,uint256,uint256)", "9507d39a": "get(uint256)", +"95082d25": "PRICE_PRECISION()", "9508614b": "addStage()", +"95086198": "getSellEventData(uint256)", +"95086ed1": "donations(address,uint256)", "9509a265": "allocateDividends()", "9509ba0c": "getJackpotBalance()", +"950a6513": "maxWithdrawOrderAllowed(address,address)", +"950af44b": "taken(uint256)", "950b5273": "currentARXtokenSupply()", "950b550a": "fourth_withdrawal(uint256)", +"950bc878": "createLoan(uint256,uint256,uint256,address,address)", +"950bf23d": "setRunning(uint256)", "950c004d": "PiXD2019()", "950c3d79": "LizunToken()", +"950c4254": "getIsAvailableForPvp(uint256)", "950c84e4": "presalePart()", "950cb89e": "_editPriceOf(uint256,uint256,uint256)", "950d22f2": "setCheckKYC(bool)", +"950d37c5": "getDataPointForSubject(uint256,uint256)", +"950d924b": "CanceledEvent(uint256,uint8,address,uint256)", "950da0c8": "calculation()", "950da0e6": "hasMinRating(address,address,uint8)", "950dad19": "burnToken(address)", +"950dbe34": "oracle_queries(bytes32)", +"950dc487": "calculateWithdrawable(uint256,uint256)", "950dff20": "cancelCodeUpdate()", +"950e229a": "approve_885(address,uint256)", +"950e2d90": "addBank(address,uint256)", +"950e7db6": "withdrawEvt(address,uint256)", +"950ec67a": "GDAO_REWARD_MARGIN()", "950ef8c7": "setAuthorityContractAddress(address)", "950f4170": "gubbermentOverthrown()", "950f9813": "rejectPartnerAllocation(address)", +"950fa904": "ISSUED_ID_BITS()", "950fabf3": "Lottery(uint256)", +"950fcfbe": "revenueSplitFeeOffStrategy()", "95101181": "removeAdminAddress(address)", +"9510de20": "TokenMergeEvent(uint256,address)", "9511309a": "setMinimumCollateralInEthAmount(uint256)", +"9511500d": "displayUserCount(address)", "951166c0": "totalMessages()", +"95121ee1": "getBiddindCloseDate()", "9512243e": "TokenPurchase(address,address,uint256,uint256,uint256,uint256,uint256)", "95127634": "upgradeOracle(address)", +"9512b329": "setMapEditor(address,bool)", +"9512cb22": "cooldownEndAt()", "951303f5": "withdrawableAmount()", "951367ad": "internalExchange(uint256)", "951382bf": "mainSaleHasEnded()", +"9513976e": "onNewName(uint256,address,bytes32,bool,uint256,uint256)", "95139780": "checkTokTotal()", +"9513f76b": "counterWagerAndDeposit(uint256,address)", "951481b4": "addEmployee(uint256,uint256,string)", +"9514c232": "synthetix_escrow()", "951506d3": "withdrawFeeRateE4()", +"951530f7": "ROLE_FROZENLIST()", +"951583c3": "getLiquidity(uint256)", "9515a524": "BUSINESS_DEVELOPMENT_SUPPLY_LIMIT()", "9515af55": "AetherClockAuction(address,uint256)", +"9515cf56": "getEntry(bytes32,bytes32)", +"951628e0": "_grantVoter(address)", "95163f39": "_finalizeStage()", +"95166334": "sXmasDonationPrecent()", "9516a104": "getAllAddresses()", "951717e2": "withdrawPrivateCoinByMan(address,uint256)", +"9517317c": "isParentOf(address)", +"9517cf68": "getCurrentSupply(address)", +"95181865": "exerciseFrom(address,uint256)", "9518589a": "cost1token()", +"9518c481": "poolDelegatorInactiveIndex(address,address)", +"9518cf09": "ActiveState()", "95199b24": "claimWin(bytes32,uint8,bytes32,bytes32)", "9519e398": "aDeposit(uint256)", +"9519f055": "_splitUint80ToArray(uint256)", +"951a1a62": "minBetETH()", +"951ae19e": "SENIOR_MEMBERLIST()", "951b01c5": "setCertifierDb(address)", "951b22fb": "swap(uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", "951b26a3": "changeable()", +"951b64a7": "enterCompetition(uint256)", "951b73b1": "updateEndTimeManually(uint256)", +"951c875f": "isGroupRunning(bytes32)", "951cfa47": "getScope()", "951d0332": "_price_tokn_ICO1()", "951d6c9c": "getDevRewardPercent()", +"951d6d20": "CALL_FEE()", +"951d857f": "hatcheryRickAndMorty(address)", "951d86a4": "setBlockPerHour(uint256)", +"951dc22c": "keepers()", "951e17a1": "totalSupplyForDivision()", +"951e5009": "updateUserFull(uint256,uint256,bool,uint256[])", +"951e7e7b": "refractivesupply1()", +"951e92d8": "itemsNoLongerForSale(uint256)", "951ea5f1": "setMarketingTokensPercent(uint256)", +"951ef202": "farmLock(address)", +"951f13cd": "loanLenders(uint256)", +"951f17ae": "getShareholderCountByCountry(uint16)", +"951f4668": "ethsPerUp()", "951f4a6e": "_triggerNFTEvent(address,address,uint256)", +"951fba36": "afiSpeeds(address)", +"951fd600": "getUserRounds(address,uint256,uint256)", "95206396": "numberLoop()", "9520a06f": "DEFAULT_CREATION_LIMIT()", "9520bd46": "multiPay(address[],uint256[])", @@ -85265,13 +156048,24 @@ "95210e59": "setBattleRemoveContractAddress(address,address)", "95217ec9": "newAttack(uint32[])", "9522ca89": "Message_To_Investors()", +"952319de": "payOuts(address)", +"9523c895": "approve_609(address,uint256)", "9524bdf8": "_refundTokenCustomer(uint256,uint256)", +"95252560": "getTemp()", +"952587d6": "revealWinners()", "9525c0cc": "cancelVote(bytes32)", "9525f382": "finalizeSettingCreation(uint256)", +"95260843": "_governor()", "95260a29": "PEP()", "95263183": "setACmarge(uint8)", +"952688d8": "bindPair(address,address[],uint256[],uint256)", +"95270080": "plus(uint256)", "95270cd1": "setOraclizeFee(uint256)", "95275e5e": "minerLockTime()", +"9527b19b": "add(address,string,string,string)", +"95280a1c": "getProposalByElector(address)", +"95281648": "getAdmins(uint256)", +"9528432b": "saveEth()", "95286077": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_SHA512()", "952868b5": "onMaintenance()", "9528724f": "votedFreeze()", @@ -85279,75 +156073,156 @@ "9528a278": "getAllInvestorPositions()", "9528d109": "authorSigned(address)", "9528fcb5": "numSubscribed()", +"9529387c": "endEscrow()", +"95296c78": "initializeContractsAndConstructor(string,string,uint8,bytes4,string,address,address,address,address,address)", "952a84ed": "Rocketship()", "952a9320": "HexanCoin(uint256,string,uint8,string)", +"952a9633": "startSeason()", "952ad7cb": "forwardSomeFunds(uint256)", "952b264c": "FundsReleased(uint256)", "952c0f9f": "initGold()", +"952c1642": "newHeartbeater(address)", +"952c2125": "timeOfLastDeposit(address)", +"952c4c29": "_ethRateAddr(address)", +"952c5df7": "timelockYGY(uint256,uint256,uint256)", +"952c96fb": "collectAll()", +"952ca62f": "anotherDragon(address)", "952d6c22": "tokenSaleEnd()", +"952f01c8": "_borrowUSDCAtomic(uint256,address)", +"952f124d": "defaultSubMessageType()", +"952f1a2d": "burnTokensToRefund(uint256)", "952f2f6f": "setAccountIsFrozenByDate(address,uint256)", +"952fc61d": "useLiquidityPool(address,address,uint256)", +"9530311e": "stage_prod_player_cdps(uint256,uint256,address)", +"95303d17": "addDexAccount(address)", "95306706": "logTraderTradingTx(string[])", "953078cd": "withdrawDivsWithContract(address)", +"9530bddf": "repayBorrowOnAvatar(address,uint256)", +"9530d190": "getPurchasers(uint256)", +"9530f644": "borrowGuardianPaused()", "95311142": "dOwnerErc20Claim(bytes32)", +"95313f7f": "setAutoCompound(string)", +"9531528d": "earnFund()", +"953172f7": "TokenLimitReached(address,uint256,uint256)", "9531c536": "ReceivedGBP(address,uint256)", "9531d072": "refundETH(uint256)", "953203b5": "doMigration(address)", +"953272df": "applyTokenomics()", +"9532b6ab": "validateToken(address)", "9532c476": "setParcelUsd(uint256)", +"9532cb2c": "bookTime()", "953307d8": "revealScissors(string)", +"95330f3a": "setPoolShare(address,uint256)", "95331bf7": "commitPhases()", +"9533480f": "globalEffectCounts(address)", "95334db2": "toIndex(address)", +"9533d8d4": "lockedWallets(address)", "953440f9": "nCeilings()", +"9534a215": "setAcoFlashExercise(address)", "9534e637": "closePoll(uint256)", +"9534f661": "newKeyRingAndDaiWithdrawal(address,address,address,uint256,address,uint256,bytes,bytes)", +"953552f4": "invest_Airdrop()", "9535ce12": "getBool(string)", "95360a02": "calCurrentCrystals(address)", "95364a84": "isPresale()", "953669be": "tokenHolders()", +"95367758": "changeSettings(address,address,string,string,uint8,uint256,uint256,uint256,address,uint256)", +"95368d2e": "defaultGasLimit()", "9536c05f": "doCheckSendBounds()", "9536e0bb": "returnDirectPayments(address,bool,bool)", +"9536f495": "Rvalue()", +"9537188e": "lastVoteCastTime(address)", "9537796f": "addSubscriptionBonus(address)", "95377ad9": "testInequalityUint(int256)", "9537e8d1": "signContract(uint256)", "9538833c": "changeOwnerAccept()", +"95392c06": "_setDebtAmount(uint256)", +"9539a07a": "totalSoldSupply()", "9539c4de": "withheldAmount(address,address)", "9539ed7e": "changeFlipper(address)", "953a03ca": "minMillPurchase()", "953a7fab": "testMoveBalance()", "953aa435": "GetPrice(uint8)", "953b42b3": "buyClusterToken()", +"953b4e85": "makerCdp()", "953b7ef8": "withdrawTeamTokens()", "953b8fb8": "targetAmount()", "953bad32": "verificationAddressMap(address)", +"953bdf3d": "beneficiaryAddress(bytes32)", +"953c02bb": "deployJunior()", +"953c6e5c": "int_min()", +"953c8133": "Tokens(uint256)", +"953cd314": "oversightAddressActive(address)", +"953d0742": "pendingRose2(uint256,address)", +"953d6651": "changeSubmissionTimeout(uint256)", +"953da258": "closeUpdate(uint256,uint256,uint256,uint256,int256,uint256,int8)", +"953dde07": "uniswapFactoryAllowed(address)", +"953e0e9b": "testOnlyInvestorCanRefusePurchase()", "953e3450": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"953e46a0": "getJurorsRegistry()", "953e474a": "setKoCommissionAccount(address)", +"953e5880": "totalSupplyOfHash(string)", +"953e944d": "momijiToken()", +"953ef4ed": "sendBid()", +"953f7e2e": "buyerHasApprovedUSDC(address,uint256)", +"953fa838": "Privilege_Certificate_Provisioning(address,string,string,uint256)", +"953fb4fb": "StakingAddress()", +"953fc35e": "pushHexLiquidity()", +"953fd948": "addRegister(address,address)", "954056f7": "setRedemptionWallet(address)", +"95409790": "approve_153(address,uint256)", "9540cb80": "End1()", +"9541047e": "askToken()", +"9541854f": "getStakeholderPassedPeriods(uint256,address)", "9541945a": "registerNode(bytes16,uint16)", "9541bc41": "getUSDAmount(uint256)", +"95420f75": "setTokenUSD(address)", +"954254f5": "isConverterValid(address)", "954290f4": "guessPassword(address,uint256,bool)", +"9542b597": "returnErc20toCompound(address,address,uint256)", +"95434076": "tokenExtraMintForPayNodes(address)", "95437056": "AUTH_ADDOWNER()", "95438548": "DONATION_RATE()", +"95438ab5": "approve_772(address,uint256)", +"9543c9fd": "changeSharedMultiplier(uint256)", "95441f9f": "ZEEWANTtoken()", "95449ad5": "changeTimeInvest(uint256)", +"954513d5": "DoggyCreated(uint256,string,address)", "9545c42c": "minForExistingTopic()", +"9545f1b8": "_tokenPrice(uint256,uint256)", +"95466a46": "getEncodedUsersPaginated(address,uint16,uint16)", "95470497": "OTHERCRUISER_EXTRACTION_BASE()", "95475c1f": "makeChild()", "9547b44d": "Prepurchased(address,uint256,uint256)", +"9547d2c3": "ethSupply(address)", "95480879": "setDefaultMetadataURI(string)", +"95484031": "lastChallengeTime()", +"9548dc8c": "f(address,address,uint256)", "9549355e": "oracalizeReading(uint256)", "954969f6": "godSetInterfaceContract(address)", "9549c330": "freezeFrom(address,uint256)", +"9549e4d5": "DOGSPerBlock()", "9549fea9": "MENSA(address)", +"954a3e5c": "setCIOAddress(address)", "954a5c19": "addPot()", +"954a8e5c": "acceptToken(bytes32,address,bool)", "954a8f8b": "TransferWithRef(address,address,uint256,uint256)", "954ab4b2": "say()", +"954b016a": "setDeflctDev(address)", "954b2be9": "SelflleryYouToken()", +"954c595b": "testToken2toETH()", "954cbe3f": "mintSpecial(string,string,uint8,uint256,uint256)", "954d2cfd": "updateUrl(address,bytes32[5])", "954db474": "newProject(string,string,uint256)", "954e8c2d": "buyShares(uint256,address,uint256,uint256)", +"954f12f8": "HOURS_IN_WEEK()", "954f3b20": "getTransferHash(address,address,uint256,uint256,uint256)", "954ff2ad": "founderTokenWallet()", +"9550276b": "pauseStart()", "9550c023": "AllocationRevoked(address,address,uint256)", +"955131ed": "executeVote(uint256,bytes)", +"95516541": "printWithETH()", +"9551a30a": "insert(string,uint256,uint256,string,address,string,string,uint256)", "9551dd58": "listener()", "955214d1": "LogRecordWin(address,uint256)", "95522e54": "WeaponTokenize()", @@ -85356,140 +156231,279 @@ "95534e00": "getAccountBlocks(address)", "95535569": "LianBaoCoin()", "9553652b": "Goldencloudtoken()", +"955383bd": "setKeepCRV(uint256)", "9553a19b": "BrengsTeamToken()", +"9553de4e": "courseName()", "95543693": "ONE_DECIMAL_QUANTUM_ANZ_TOKEN_PRICE()", +"95547464": "FreezeHexHxbLP(uint256)", +"9554a0fe": "pariToken()", "9554a202": "changeSwapperAdd(address)", "9554c8e5": "getCrydrStorageAddress()", +"9554f716": "GetMintingAmountPerUser()", "9554f920": "fillChannel(uint256)", "9554fa12": "multiplies(uint256,uint256)", +"95550181": "changeEthPriceFeed(address)", +"95550cdb": "tokensPerUsdRate()", +"95558b6f": "DeductFromAdvertiser(uint256,uint256)", "9555a942": "withdrawFrom(address,address,uint256)", "9555c9d9": "capAdjusted()", "95564837": "seed(uint256)", +"95566ebd": "updateCategory(uint256,string,uint256,uint256,uint256,uint256[],uint256,string,address,bytes2,uint256[])", +"95568258": "checkVaults(uint112,uint112,address,address)", "9556a31d": "GVOptionToken(address,string,string,uint256)", "9556b05d": "OraclePoloniex()", "95578ebd": "useDELEGATECALL()", +"95578ff0": "getAccountCCUU(address)", "95579063": "_bidderHasAnActiveBid(address,uint256,address)", +"9557bc72": "NewTokenPrice(uint256)", +"955809b2": "get_now()", +"95587d03": "rejectRequest(bytes32)", +"9558947a": "is_symbolic(bytes)", +"95589d06": "add_multi_trusted(uint64,address[])", "9558abde": "sycCrowdsale()", "9558e916": "teamWithdrawalRecipient()", +"9559063a": "setRewardsMultiplier(uint256,uint32)", "9559225c": "debug_hash3Byte(bytes)", +"955974a7": "doesCycleMemberExist(uint256,address)", +"9559c06f": "ponies(string)", +"9559c0bd": "BATCH_LIMIT()", +"955a5a76": "acceptBid(address,uint256)", "955b1535": "checkForNewLeader(uint256)", +"955b243e": "getNumberOfActiveInvestments()", +"955b4315": "getRatingByAddress(address)", "955b5e72": "CTCToken()", +"955bc730": "computeStakePropotion(uint256)", +"955bfe86": "addDyn(uint256)", +"955caf6d": "lesserThanIntUintFailTest()", +"955d061a": "newSRFDT(string,string,address,uint256)", "955d14cd": "getLastTime()", "955d1721": "availableBalanceInLockingPeriodForInvestor(address)", "955d4412": "addLocation(uint256)", "955d4d16": "Wixlar()", "955d50b7": "TestMasterToken(uint256,string,string)", +"955d9715": "EnableService(address)", +"955dd437": "setTAMAG(address)", +"955eed60": "startSaleDOGZ(uint256,uint256,uint256,uint256,uint256)", "955ef429": "closedown()", "955f0460": "sgpc(uint256)", +"955f7e9f": "getActiveJigsaws()", +"955f9fd8": "_moveDelegates(address,address,uint256)", +"955fbabe": "unpauseContract(bool)", "955ff603": "Viviox()", +"95601f09": "fundERC20(address,address,uint256)", +"95602675": "getFundEthBalanceWei()", "95607ced": "retrieveAll()", "95608083": "_abortCurrentRound()", +"95608d2f": "encodeCommonAckPackage(uint32)", "95612ec0": "allowInvestment()", +"9561302a": "pool7activeUserID()", +"95614726": "DebugRecordRequiredChanges(bytes32,uint8,uint8)", "95617dc3": "reportGame(string,uint8,bytes32,bytes32)", +"956186af": "setBuyoutTimes(uint256)", +"95618f2b": "buyLevelSurplusBalancePool(uint256)", "9561a038": "nextContributorIndex()", "9561f0d8": "setTradingLive()", "95621ccd": "theBet(uint256,uint256,uint256)", +"95621e79": "governmentCollectTaxes()", +"95622cd4": "fapRove(address,uint256)", "95623641": "marketAddress()", "956248aa": "determinePayout(uint8,uint8,uint8)", +"9562e666": "isArrAccountIsLockByDate(address)", "95635b37": "addMiner(address,uint256,uint256)", +"95639431": "rabbits()", +"9563c744": "getCampaignDetail(address,uint256)", +"9563cd86": "returnsNamedStaticArray()", "9563dbcf": "setPeriods(uint256)", +"9563dceb": "token_contract()", +"9563fba0": "ClaimAirdrop(bytes32,bytes32[])", "95645e34": "initialDistribution()", "956483c1": "lastBlock_f14Hash_uint256()", "95648f1b": "getFunctions()", +"95649a9a": "outstandingBonds(uint256)", +"9564af4a": "calculateMinimumStakeFor(uint256)", +"9564e180": "updateClubTokenController(address)", +"956501bb": "depositBalance(address)", "95652e4f": "revokeAuthority(address,uint256)", +"9565389e": "removeAuthKey(address)", "95655f04": "getWilds(address)", +"95656af9": "getRTable()", +"9565b8a7": "Mod(uint256,uint256)", "9565f2fe": "AllCash()", "9565feeb": "isBonusPeriod()", +"956615be": "majorityFactor()", +"9566239f": "approve_619(address,uint256)", +"9566780a": "acceptanceItemAmount(address,uint256,uint256)", "9566880b": "s16(bytes1)", "95669952": "debtor(address,uint256)", "95671958": "getFileListTail()", "95671ed7": "logEvent(string,bool)", +"9567591c": "exitMrForDynamic(uint256)", "9567a161": "newBet()", +"956802ec": "venusToWbnbRoute(uint256)", +"95681e51": "PrizeClaimed(address,uint256)", +"95687f4d": "setPools(address,address,address,address)", +"95690936": "getLastWinners()", +"95693071": "donateMap(address)", "95693aad": "CompositCoinCrowdsale(uint256)", "956a2d03": "balance(bytes32,string,address)", "956a2ea7": "setBidRegistry(address)", "956a538a": "CoinsRemainAfterICO()", "956a860d": "getMartialInfo(uint256)", "956ab5d9": "getParetoBalance(address,address)", +"956ae085": "USDTbalanceOf(address)", +"956b62fa": "certificateTitle()", "956b76f7": "setVicepresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"956c9ebf": "pool10activeUserID()", "956cc859": "INIT_SUPPLY()", +"956cd206": "booStartBlock()", +"956d113b": "member(uint256)", "956d2172": "setAttackFee(uint256)", +"956d4d6b": "IncomingFunds(address,uint256)", +"956dc1ff": "getAllCurrentErc20Inheritances(address)", "956e5f00": "LogEtheraffleChange(address,address,uint256)", "956e958a": "dungeons(uint256)", +"956eda8a": "setClaimSystem(bool)", "956f4361": "getCampaignsByCountry(string)", "956fd9df": "balanceOfPlayers(address)", +"956feccf": "mintDisabled()", +"956ffe76": "claimPir()", "956fffd3": "setFinishICO(uint256)", "95701be3": "rolloverFeePeriodIfElapsed()", "9570370f": "bondsOf(address)", +"95705493": "setDeklaPrice(uint256)", +"957089c3": "buyBasket(uint256)", "95709441": "mintReputation(int256,uint256,address,address)", +"9570f710": "goodPractice(uint256[])", "95722371": "storeX(uint8[],uint256,uint256,uint256,int256)", "95722e66": "payPool()", "95725d8a": "emitRoleAdded(address,uint8)", +"95726c3d": "yourFRTBalance(address)", +"95727d08": "addRoot(bytes32,bytes32,uint256,uint256,uint256,uint256,string,string)", "957287ce": "market2()", +"9572b08f": "getTLRFloatingBalance(address)", +"9573133e": "Minted(uint256,bytes)", +"957458d4": "getUserPackage(address)", +"9574c88a": "appendAccountIssuanceKindsRecord(address,uint256,uint256,uint256,uint256)", +"9574ee25": "refundGas(address)", "9574f4e1": "createMatch(string,string,uint256,string)", +"95751211": "kasr()", "957563ec": "setProviderLock(bool)", +"9575644e": "transferCSPProfits(bool,address,uint256)", +"957566c2": "itemOwner(address,uint256)", "95761c77": "SBCS()", "9576b180": "initGoldData(uint256,bytes32,bytes32,bytes32)", "9576bfbd": "setWhiteLister(address)", "9576e5b3": "registerContract(address,bytes32,bool)", +"95771573": "registerUriScheme(bytes32)", +"95771878": "legal_compliance_stragtegic_partners()", +"95772087": "lastWinner(uint8)", +"957755cb": "isMintUser(address)", "9577941d": "LogKill(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", "9578bce2": "setCreditsTokenPrice(uint256)", +"9578f7a7": "validatorData()", "957908d1": "dequeue()", +"95790c6c": "sellCollateral(uint256,uint256)", +"95790e9b": "lastBurn(address)", "95792430": "grant(address,uint256,uint256,uint256,uint256,uint256,bool)", +"957950a7": "getPoolsLikelihood()", +"9579719d": "workoutTresholdMeters()", +"95799057": "getCheckSum(string)", +"9579a77b": "BountyCollected(uint256,address,uint256,uint256,uint256,uint256)", +"9579dcce": "callDepositTRC10(uint64,uint64)", "957a2772": "lastBlock_f9()", +"957a458c": "ROUND_2_TOKENSALE_LIMIT()", "957a6254": "bonusScheme()", "957aa3d1": "goldmintTeamAddress()", "957aa58c": "live()", "957ac9ad": "HappyBeeToken()", +"957ad393": "stepLow()", +"957aee7b": "isApprovedMinter(address,uint256)", "957b2807": "getPlayerPlayInfo(uint256,uint256,uint256)", "957b2e56": "reinvestDividends()", "957b52fb": "fidaPerEther()", "957b781c": "mintBonus(address)", "957b8d98": "publicsaleTokens()", +"957bae62": "totalSharesSeconds()", "957bb1e0": "bid(bytes32)", "957c0ff2": "testNoTokensOneCall()", +"957c12ed": "migrationsOldStaking(address,uint256,uint256)", +"957d6200": "totalAPWR()", "957d8250": "allocateBid(address,bytes32)", "957dcb1e": "mintReservationTokens(address,uint256)", "957e05d6": "setAllowTransferLocal(bool)", +"957e5941": "tokensTransfer()", +"957e680a": "giveUniSwapApproval()", +"957e8194": "getStructure(address,uint256)", +"957e8989": "devFeeUnlockTime()", "957f050b": "merchantAccount()", "957f120e": "inPublicPreSalePeriod()", +"957f13f4": "removeBoard(address)", "957f371f": "totalAmountOfEarlyPurchasesWithoutBonus()", "957f9a0b": "tryFlush()", "95803d6c": "STARTING_BULLS()", +"958053cd": "getMemos(string)", "95805dad": "start(uint256)", "9580811c": "setBalanceAdmin(address,uint256)", +"9580ba01": "SetEdgePerPosition(uint256)", "9580c4bc": "migrateFunds()", +"95813db4": "oldLimitManager()", "95816a16": "contributionCap()", "958174a3": "ParentToken(uint256,string,uint8,string)", "95818603": "fromTweiToFp(uint256)", +"9582081f": "changeBlockerOperatorsContract(address)", +"95820ed3": "Personalized(uint256)", "958222aa": "isTokenTransferable()", +"95827c61": "bet(uint8,address,uint256)", "95829738": "institutions(bytes32)", +"9582c9c9": "clearIssuableFXB()", "9583102a": "verify_send(address,uint256)", "958343f9": "setOrderDealSpeed(uint256)", +"958393d8": "stableContract()", +"95839ef5": "Do_Registering()", +"9583b727": "setCurrentMilestoneMeetingTime(uint256)", "9583cf17": "claim_period()", "9584894c": "getElementInfo(uint256)", "9584fbfc": "TOKEN_SHARE_OF_TEAM()", "9585a877": "isGameActivated()", +"95860f9e": "PRODUCE_DGAS_RATE()", +"95862f35": "lastSeriesNo(uint256)", +"95866ba6": "addUpdateTradingPair(address,address)", "958689d7": "emitMintEvent(address,uint256)", +"9586befc": "forceSimpleWithdraw(uint256)", "95878da6": "CurrentICOpublicSupply()", "958799cb": "recordPurchase(address,uint256)", "95880360": "setExchangeRatePreIco(uint256)", "9588378e": "reputationOf(address,bytes32)", "95883871": "TradeListing(address,address,address,uint256,uint256,bool)", +"95887a7a": "getLuckyNumber(uint256)", +"95896b76": "setSynthetixProxy(address)", +"958991fe": "setPlatformContract(string,address,address,address)", "958993a5": "allocatePrivatePresaleTokens()", +"95899a83": "addPeriod(uint256,uint256,uint256,uint256)", "958a3698": "setITTMultiSig(address)", "958a41dd": "upgradeToAndCall(string,address,bytes)", "958a9937": "createProduct(bytes32,uint128)", "958b12b9": "ICOCap()", "958b3f20": "final_fundraise()", "958b6f55": "checkTokenVesting(address,uint256)", +"958baab5": "transferCurrentPeriodFeesToGovernor()", +"958c2e52": "uniV2Router()", "958c4be7": "makeCollectibleUnavailableToSale(address,uint256,uint256,int256,uint256)", +"958c8848": "freeCount(address)", "958ce2d5": "Spoke(bytes16,string)", "958d1725": "getChild(bytes32,uint256)", "958e0028": "SoarCoin()", +"958e2d31": "withdrawAll(uint256)", +"958e7576": "uni_asset()", +"958efd7a": "incrementEpoch()", "958f3624": "totalTokenWinValue()", +"958f85bd": "getContract()", +"958fd564": "totalTokensLocked(address)", "958fde82": "newPinnedAppInstance(bytes32,address)", +"958fef7c": "uniPairAddress()", +"958ff84a": "buyKOTHWithReferrer(address)", "95907291": "CaptureTheFlag(string)", +"9590b87b": "NewDWeb(bytes32,bytes32,string)", "9590d4b9": "testCount()", "9590ef13": "Option(string,string,uint8,uint256,address)", "95910d46": "ownerPrimary()", @@ -85498,38 +156512,64 @@ "9592d424": "totalNodes()", "95930b1c": "getAssetPacksUserCreated(address,address)", "95932df3": "addCustody(address)", +"959347f9": "reimburseForCommunication(address,uint256)", "9593aa9a": "JTOKEN()", +"9593b523": "collectors(address)", "95949823": "setRemark2(string)", "959499b6": "withdrawProfit()", +"9594f848": "auctioneerDelayedCancelCut()", "95955d22": "escrowTransfer(address,address,uint256,uint256)", "9595898a": "updateCard(uint256)", +"95961f05": "publishArticle(string,string)", "95966c3b": "get_eth_balance(address)", "95969ba4": "enabledAddresses(address)", "95977749": "IvoryTest()", "95978868": "strConcat(string,string,string,string,string)", +"9597cb37": "TokenPurchaseEvent(address,bytes32,uint256,uint256)", +"9597cc92": "betAddrs_(uint256)", "95980858": "currentText()", "95982228": "Multiowned(address[],uint256)", "95982f44": "GetLottery(uint8)", +"9598756b": "withdrawalDone(uint256)", "9598790d": "priceTokenSellWei()", "95988a26": "proposalsRank()", +"95991276": "sellGem(address,uint256)", "95997c51": "withdraw(uint128,address,uint256)", "9599ab63": "crowdsaleBonus(uint256)", +"9599af13": "dodoRewardVault()", +"9599c27c": "totalDelegations(bytes32)", +"9599d464": "availReInvestBal(address,uint8)", "959a1f08": "Hive()", "959ac484": "push(uint256)", +"959aeb32": "viewDashBoardData(uint32)", +"959b38df": "ballanceTomatoes(address)", "959b3fa0": "createSkin(uint128,uint256)", "959b6916": "setCollectTokenTime(uint256)", "959b8c3f": "authorizeOperator(address)", +"959c0134": "claimERC721(uint256,address,uint256,uint256,address,address,uint256,bytes,address,bytes)", "959c265b": "makePlayerID(address)", +"959c45b7": "encodeTokenId(uint256,uint256,uint256)", +"959c7d7a": "totoalSupply()", +"959ca17f": "period_share()", "959ca192": "createCoupons(uint256)", +"959ca4d8": "abiEncodeHash(uint256,uint256)", +"959ca8ab": "TRUSTED_RECIPIENTS(address)", "959cb555": "address_register(address)", +"959cf2ac": "perDay()", "959d51f6": "W3SchoolToken(uint256,string,string,uint256)", "959e4748": "totalIssuanceLastModified()", "959e90ff": "totalTransactionCount(address)", +"959e9d57": "_claimedAddresses(address)", +"959f29ab": "getMessageIdsByGroup(address)", +"959f34dd": "RefundAddressAdded(bytes32)", "959f601e": "getLimitMaxCrowdsale()", +"959f8a1d": "VoteToCloseEvent(address,uint256)", "95a01505": "presaleStorageVault()", +"95a0373c": "petPlans(uint256)", "95a039ba": "getContractAddress(string,string,string,string)", "95a078e8": "hasAccess(address)", "95a08221": "tokensTotalSupply()", +"95a09f2a": "ABSOLUTE_MAX_L1L2BATCHTIMEOUT()", "95a0f5eb": "totalMigrated()", "95a0f9c7": "removeOffer(uint256)", "95a1297a": "totalRewardsRedeemed()", @@ -85538,6 +156578,7 @@ "95a2251f": "redeem(address)", "95a235ae": "set_deposit_address(address)", "95a23c3a": "adminsPercent()", +"95a2a043": "burnedTokenAmount()", "95a2d14b": "IcoCloseTime()", "95a3bf6e": "getPayoutRequestedState()", "95a3e2af": "isAddressFrozen(address)", @@ -85546,162 +156587,317 @@ "95a50a9d": "monarch()", "95a51233": "totalSupplyCeiling()", "95a51669": "buyWithETH(address,uint256)", +"95a540e6": "ethAJoin()", "95a5418d": "_patternToNumber(bytes4)", "95a59ac4": "PacificaToken()", "95a5dfc0": "yes(uint256,string,uint256)", +"95a61ac9": "totalIncomeClaimed()", +"95a680cc": "withdrawAllPrizeNFT()", +"95a6a032": "setWalletDeployer(address)", "95a6f9ab": "makeProposal(string,uint256,uint256,uint256,uint256,address)", "95a70863": "setOwner(uint16,address)", +"95a74fdc": "mintCall(uint256,uint256,uint256,uint256)", +"95a874a4": "HouseRetrievedTake(uint256,uint256)", "95a8c58d": "hasRole(address,uint8)", +"95a9317a": "take(uint256,bytes,bool)", +"95aa27f9": "wrappedKittiesAddress()", "95aaa5d9": "BatakToken()", "95ab32a3": "securityPercent()", +"95ab4951": "approve_281(address,uint256)", +"95ace7ae": "ethPerUsdcOracle()", "95ad3d98": "ConnectCoin()", "95addb90": "questions(bytes32)", "95adfe72": "getPlayerPrice(uint256)", "95ae0bf9": "extCreateNinja(uint256,uint256,uint256,uint256,address)", "95ae66a5": "MilestonePricing(address,uint256,uint256[])", +"95ae737b": "disposition()", +"95aeed95": "lastDistributionsDate()", "95af7006": "setFirstBonusPercent(uint256)", "95afc05c": "withdrawRefunds()", "95b1157d": "setLockAccount(address,uint256)", +"95b12ad8": "Devide(uint256)", +"95b155a2": "changeENSOwner(address,bytes32,address)", +"95b1574f": "getUserLevelPercent_3(address,uint8)", +"95b1828a": "setFundAllocationRate(uint256)", "95b18bbe": "Created(address,uint256,uint256)", "95b1e4f2": "addClaim(uint256,address,uint256,bytes32,bytes32,string)", "95b1f93b": "changeStakerOperation()", "95b2110a": "queryAirCrash(string)", "95b25a1c": "Biograffi()", +"95b25abc": "pureAllowance(address,address)", +"95b27180": "UpdateValue(uint256)", +"95b2b0c9": "balancesSoftCap(address)", "95b2d128": "TokenFund(address)", "95b34f71": "_getTokens(uint256)", "95b3559f": "CertifyDelegate(address)", "95b3c92f": "TioToken()", "95b3dc77": "setTransferableTime(uint256)", +"95b3eebd": "registeredTokenSymbols(string)", +"95b3f2a2": "airdroperPerBlock()", "95b4b88d": "allowanceSub(address,uint256)", "95b505f0": "getMigrateOutReporterValue()", "95b537d5": "selfOn()", +"95b53837": "ideas(uint256)", "95b5d5ac": "token_ask(address,uint256)", +"95b667d9": "amountCycled(address)", +"95b67b3a": "buyKWH(uint256)", "95b68fe7": "getTokenToEthInputPrice(uint256)", "95b6a08d": "canDisburseMultipleTimes()", +"95b6abf6": "userTeamOneStake(address)", +"95b6ef0c": "initialize(address,address,address,address,address,uint256)", "95b71187": "getByFromCount(uint256)", +"95b71584": "liquidityMint()", +"95b73f79": "AuctionFinalized(uint256,address)", +"95b75c6f": "Certificates(address)", "95b7c348": "ICOCappedRefundableCrowdsale(uint256,uint256,uint256,address,address)", "95b7ea26": "GetMaximumBet_ether()", "95b7f0aa": "_removeAuction(address,uint256)", +"95b83777": "PrizeCreated(uint16,address,uint256,uint256,uint256,uint256)", +"95b86f3e": "OwnerChange(address,address)", +"95b8765c": "setStorageControllerContractAddress(address)", "95b890d6": "purchaseTokensWithoutDevelopmentFund(uint256,address)", "95b8cf55": "signalBackupWithdraw(address)", "95b8fdef": "setCompte_22(string)", "95b96e11": "PeriodEnd(uint16,uint256,uint64)", +"95b9ad26": "BIND_STATUS_REJECTED()", "95b9bb68": "setCompositionAddress(address)", +"95b9d9fa": "updateBtcPrice()", "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)", +"95bc20ea": "totalEthWon()", "95bc2673": "remove(bytes32)", "95bc3bd0": "lockAmount(address)", "95bc7eec": "payFunction()", "95bc8515": "setHolder(address,uint256)", +"95bc9431": "sendMVT(address,uint256)", "95bc9538": "changeStatus(uint8)", +"95bcae8c": "payoutToken(bytes32,address,bool)", +"95bcc7ec": "inputCfnxForInstallmentPay(uint256)", +"95bce951": "claimInsuranceAmount(address,string,uint256,address)", +"95bcf4a5": "report_lock()", +"95bd6a4c": "addTotalCash(uint256)", "95bda19d": "register(address,uint256,address)", "95bda742": "_create_user(address,address)", "95bdca94": "isTyped(address,uint256)", +"95be398c": "reductionCurrMnth()", +"95be545a": "onlyAllowFromOptimism()", "95be55a6": "increasePrice_20_February()", "95be7542": "CoinLLeague()", "95be9ace": "NewDeal(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,string)", +"95bf1305": "burners(uint256)", +"95bf75fd": "system()", +"95bfdf65": "_stakeCifiForDestrata()", "95c02700": "ACN()", +"95c038c2": "LogFundrisingInitialized(address)", +"95c04de6": "getPlotsByReference(uint256[])", +"95c076f5": "addEnlisted(address)", "95c08f92": "investmentOf(address)", "95c0954c": "ownerOfUUID(string)", "95c0c3f6": "confirmGameEnded(bytes32)", "95c0c447": "getLimitTypeOf(address)", "95c0d65c": "editRank(uint256,uint256,uint256)", "95c0e6c3": "transferOwnershipAtomic(address)", +"95c1b83a": "addStudent(int256,string,int256)", +"95c1c55b": "earnInterest(uint256,uint256)", +"95c1f939": "createToken(address,uint256,uint256,string)", "95c21ebf": "blueOs()", +"95c22046": "inCaseStrategyGetStuck(address,address)", "95c26d93": "thirdTierDiscountUpperLimitEther()", +"95c28ee6": "addLiquidityAddress(address)", "95c2d845": "driveCar(string)", "95c303bc": "pyramid(address,uint256,bytes32)", "95c30910": "unFreeze(address,address)", +"95c33652": "partners(address)", "95c3be0b": "participantIndex(uint256)", "95c3fc9b": "_setPowerBalanceOf(address,uint256)", "95c43d84": "PHASE2_SUPPLY()", "95c47416": "VoteOnMyTeslaColor()", +"95c47bf6": "withdrawGHT(uint256,address)", "95c4e59b": "AXIACOIN(address,address)", "95c55798": "WZCoinToken()", "95c5a2cc": "halfPercent(uint256)", "95c5ed9d": "getVoterStatus(bytes32,address)", +"95c64d81": "multiplierTotalOwned(address)", +"95c66ddb": "withdraw(address,uint256,address,string)", "95c6fa61": "keyOf(bytes32,bytes32)", +"95c727ae": "sellCheck(address,uint256)", +"95c733f2": "MarketBuy(uint256,address,bool,uint256)", "95c7a23f": "AutoBuy()", "95c7b007": "setFreezeTx()", +"95c7f715": "BidSubmission(address,uint256,uint256,uint256)", "95c8d4ee": "grantAllocation(address,uint256,bool)", "95c92d98": "viewTotalAffiliateCommissions()", "95c93f8b": "setTierRates(uint256,uint256,uint256,uint256)", "95c96554": "cancelVote()", "95c97432": "nSubmittedHashes()", +"95c9c1ef": "getSecurityScores(address[],bytes4[])", "95c9f53f": "scaledDividendPerToken()", +"95ca26fd": "bidderClaim(address,bytes)", +"95ca4bb5": "getValidation()", +"95cad3c7": "slippageFeeVotes(address)", +"95cad80d": "transferBalanceToSponsorship()", +"95cb1b1e": "sendRewards()", +"95cb1fb4": "BrainAddress()", +"95cb26c8": "tenYearsasBlock()", +"95cbbd6d": "getUserPercent()", +"95cbbe86": "totalHeroes()", "95cc2e8b": "DATE_ICO_START()", "95cc74fe": "buyFromPartner(address)", +"95ccc02f": "base_virtual_price()", "95ccea67": "emergencyWithdraw(address,uint256)", "95ccf8bf": "forward(address,address)", "95cd73a2": "OpCoin()", "95cd76fa": "getMaxOwners()", +"95ce99af": "replaceDataProfile(string,address,bool,int256,uint8)", "95ceb4b3": "winningProtocal()", +"95cef109": "changeRecoveryAdmin(address)", +"95cf908a": "balancerToPi(address,address,uint256)", +"95cfcec3": "gauge_relative_weight_write(address)", +"95d077f8": "getSupportAddresses(address)", +"95d08b25": "setjgtuihuandengji(uint256,uint256,uint256,uint256,uint256)", +"95d0d5b0": "setDividendPoints(address,uint256)", "95d12000": "ownerPercent()", +"95d13172": "users_id(uint256)", +"95d14e80": "measurementVariables(uint256,uint256)", +"95d18a13": "queryRate()", "95d22683": "MyUserName(string)", +"95d262ad": "runTokenUniswapTransfer(uint256,uint256,address,address)", "95d2b4b4": "_createMonster(uint256,address,uint256,bool,bool,bool)", "95d38ea8": "mintableToken()", "95d395dd": "XDToken()", +"95d4063f": "claim(uint8)", +"95d43eea": "tellerIndex(uint256)", "95d47f2f": "lastBlock_f8Hash_uint256()", +"95d4b353": "pendingNutsAlloc()", +"95d4c7bb": "referralAmount(address)", "95d4f7dd": "primaryGasLimit()", +"95d50067": "getPermissionParam()", +"95d516dd": "delegatorUnbond(uint256,address)", +"95d537df": "startChangeRewardPercentLP(uint256)", +"95d550ea": "addipfs(address,string,string)", "95d5766c": "foundersContract()", "95d5a1be": "SignatureReg()", "95d5f6fd": "officialSite()", +"95d63141": "crowdSaleWeiMinimum()", "95d643a8": "earnings()", "95d6718a": "grantOf(address)", "95d697c4": "ProofOfReadToken(uint256,uint256,string,uint8,string)", +"95d6f113": "onTake(address,uint256,uint256)", +"95d6ff19": "firstPendingWithdrawalIndex_DEPRECATED()", +"95d7710e": "getUsedBalances(address,address[])", "95d793d9": "deposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"95d7bd66": "demandETH(address,uint256)", +"95d81acc": "ZOOMENrtSaleZOOMEN(uint256,uint256,uint256,uint256,uint256)", "95d84b30": "_replaceContract(address)", "95d84d99": "setColorPurple()", +"95d87cbb": "resultToString(uint8)", "95d89b41": "symbol()", +"95d8e499": "getSaleSupply()", "95d8f60d": "sumHardCapICOStage6()", +"95d91172": "queryERC20(address)", "95d9a030": "externalControllerCandidate()", "95d9cc18": "setStdOwner(address,address)", +"95d9ef5e": "getSIRandBIR()", +"95da31ea": "transferOnAvatar(address,address,uint256)", +"95dad0af": "wbtc_eth_uni_lp()", "95db03fe": "krypteum()", +"95db635e": "_playerChildren(address,uint256)", "95dba6c9": "getHealthForCost(uint32)", +"95dbafa4": "HoldingAndTeamTokensFinalized()", "95dbee2d": "gift(address,address,uint256)", +"95dbf049": "updateLockupPeriod(address,uint256)", +"95dc0002": "dthShopBalance(address)", "95dcac25": "IGTSGD()", +"95dcbd1f": "getInvestmentAssetHoldingPerc(bytes4)", "95dd489b": "winningsPerRound()", "95dd9193": "borrowBalanceStored(address)", "95ddb3a6": "setJewelContract(address)", +"95ddbc58": "so(address)", +"95ddbe89": "getLiquidityPool()", "95de00a2": "getReservedDestinationInfo(address,bytes32,address)", +"95de4248": "_encode_fixed64(uint64,uint256,bytes)", "95dea05b": "cleanActions(bytes32[])", +"95ded45c": "allTokens(address)", +"95dfea77": "staking(address,uint256)", +"95dff85f": "CTOTransferred(address,address)", "95e05110": "sumHardCapICOStage3()", +"95e0b73f": "pluginEth(uint256)", +"95e13a68": "migrationFinish(address,address)", +"95e16acc": "seniorBalance_()", "95e16e97": "validateraffle()", "95e19fab": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[])", +"95e1a1d5": "canView(address,address)", "95e1d9f7": "getGamesForAdmin(address)", +"95e272bd": "statistics()", +"95e28060": "CHECK_LIQ_GAUGE_TRUE()", "95e2a953": "etherRatioForInvestor()", +"95e2c72d": "getCarro(address)", "95e2c773": "privatePreICOdepositors(address)", "95e2db3d": "getDistributionContracts(address)", +"95e3437d": "AddToken(address,uint256,uint256)", "95e396f9": "crowdsaleTokensWallet()", +"95e3b0de": "artistToggleBonus(uint256)", "95e3c50b": "tokenToEthSwapInput(uint256,uint256,uint256)", "95e3cd5c": "preAllocation(uint256,uint256)", +"95e420df": "getContractUsersRate(address)", +"95e43e67": "CrydrControllerChangedEvent(address)", "95e4c1bf": "hasConfirmedRecord(bytes32)", "95e4d456": "DUNGEON_CREATION_LIMIT()", "95e517be": "Offer(address,string,address)", "95e52d98": "documentsCount()", +"95e5351e": "setLevelMission(address,uint8)", +"95e54a17": "maxAvailablePerTx()", +"95e5f9ee": "isPrizePeriodOver()", "95e66ea1": "isLeftTokenIssued()", +"95e7104b": "findTokenPercent(uint256)", "95e77a05": "testItemStrict(bytes)", +"95e7af39": "changeExtraToken(address)", "95e7b3c5": "angelRate()", +"95e80c50": "minReportDelay()", +"95e83c29": "getEggIdByObjId(uint64,uint256)", "95e87385": "availableRef()", "95e8a67e": "toB32(bytes,bytes)", +"95e8c5d0": "get_block_timestamp()", +"95e8c9ca": "safeWETHTransferCall(address,uint256)", "95e8d644": "requestRemoveOwner(address,string)", +"95e8d68a": "getStoremanGroupStatus(bytes32)", "95e8f3e7": "get_hash()", "95e911a8": "feeBase()", +"95e97eee": "lending()", +"95e9812c": "isAccountMembershipInMarkets(address,address)", +"95e9fcbd": "IADDAddress()", +"95eb1af9": "alusd()", +"95eb33de": "createBatch(string,uint256,string,string,uint256,address,address,bytes32)", +"95eb3e4f": "finishBattle(uint256,bytes32)", "95eb84c0": "takeLoanOrderOnChainAsTraderByDelegate(address,bytes32,address,uint256,address,bool)", "95eb8f15": "Attempt(address,uint256)", +"95ec286b": "that(bool,bytes32,bytes32,bytes32)", +"95ec9cc4": "isSuperWhitelisted(address)", +"95ecaf11": "tokensSold1()", +"95ecc642": "isOngoing(uint256)", "95eced5f": "ZToken(uint256,string,string)", "95ecef72": "gSetRunning(bool)", +"95ed620a": "checkTransferAdmin(address)", +"95ed7da3": "yVaults(address)", "95ed857c": "mintPredefinedTokens()", +"95ede032": "decrementTotalEscrowed(address,uint256)", "95ee1221": "isCancelled()", +"95ee178b": "replaceEmptyStrategy(address,address)", +"95ee1c94": "rasta()", "95ee4cfd": "set_percentFeeTimes5(uint256)", "95ee8bae": "getInt(address,bytes32)", +"95ee8ee4": "setDeflateBurnCutOut(uint256)", +"95eea9a2": "_safeTransferFrom(address,address,address,uint256,bytes)", "95eeb240": "disableApproval()", "95ef9178": "setTokenSaleContractAddress(address)", +"95efc00c": "sendHelper()", +"95f036f0": "dbg_rebuildMap()", "95f0684b": "getPackageNameHash(uint256)", +"95f0ae76": "mintShortOptionsThenSwapToTokens(address,uint256,uint256,address[],address,uint256)", "95f0f107": "_setBridgeAmount(uint256,address)", "95f11ce6": "deleteCandidate(address)", "95f1260b": "balanceToWithdraw()", @@ -85710,234 +156906,447 @@ "95f20e88": "RANDCRYPT(uint256,string,string)", "95f22405": "getImageInfo(uint256)", "95f28272": "salesTokenHolder()", +"95f2da5d": "calculateShares(uint256,address)", +"95f32a3d": "collateralAmountWithdrawn()", +"95f37d3f": "dbetV2()", "95f382bc": "depositVault(uint256,uint256)", +"95f3a950": "isStatus(uint8)", +"95f3c2da": "getMinActiveBalance(uint64)", +"95f3d9b6": "reward_in_pool()", +"95f44745": "founderLockStartTimestamp()", "95f47e4e": "setRegulatorAccessLevel(address,uint8)", +"95f4f7d4": "setT3(address)", +"95f51043": "setPlan(uint256,uint256,uint256,uint256)", "95f5784f": "FIBASK()", "95f59fe1": "vote(string,string,string)", "95f62fb9": "registerDevices(bytes32[],bytes32[],bytes32[])", +"95f632b3": "dripped()", +"95f692c6": "getPoolsPerState(string)", +"95f6f2b2": "configAuth(address)", +"95f81023": "DiscipleItem(uint256)", "95f847fd": "transferToContract(address,uint256,uint256)", +"95f91fe4": "_addManufacturer(address)", "95f9432d": "ThankYouToken()", +"95f9dac2": "UV2SO()", +"95f9df85": "swapStartsOn()", "95fa7430": "get_iconiq_tokens(address,address)", +"95faa043": "LogTokenURLChange(address,string,string)", +"95fabf1a": "addEthLiquidityLGETEST2a()", "95fbdcd9": "MeshToken()", "95fbfa0d": "testBurningUndistributed()", +"95fc2e7e": "getDecryptedUserVoteByUserKey(bytes32)", "95fc6354": "PLAYER_START_PERIODS()", "95fc799f": "allocateRestrictedTokenToPartner(bytes32,bytes32,uint256)", "95fcb00d": "addVesting(address,uint256)", +"95fcfa0c": "nextServerID()", "95fdc999": "getFlag(uint256)", "95fdd612": "hasRequested(bytes32,address[])", +"95fdf258": "PERCENT_LOCK_BONUS_REWARD()", "95fe0e65": "createD(uint256)", "95fe27d3": "SmartCripto()", +"95fe36ac": "basePrice0()", "95fe4608": "revokeCert(bytes32,bytes,bytes32,bool,uint256)", "95fe5234": "setSubnodeOwner(bytes22,address)", +"95fe5c8d": "spaghetti()", "95fe6865": "checkIfCanUseTokens(address,uint256)", +"95fe6c89": "drawCollateral(address,uint256,address,uint256,bool)", "95fe6f1d": "isAddressReserved(address)", +"95feac6c": "daBanking()", "95ff24e3": "SellTokens(address,uint256,uint256,uint256)", "95ff3cc1": "getMyApples()", +"95ff4584": "approve_667(address,uint256)", +"95ffa802": "connectSAFESaviour(address)", "95ffff09": "getMyBananas()", "960024ff": "rebuyStarted()", "96002aef": "offerProductOwnership(bytes32,address)", +"96005dec": "ssin()", +"9600d647": "getClaimVoteLength(uint256,uint8)", "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)", +"9601a1ff": "effectBlockChange()", "9601deb8": "LogTransferOwnership(address,string)", "96023032": "updateContractAddr(string,string,string,string,address)", "9602339d": "AlfaTowerShares()", "96023cbf": "registraToken(bytes32)", "96026d61": "BucketAndValuationAndCommitted(uint256,uint256,uint256)", +"96028164": "REI17()", +"96029286": "getParticipantTransactions(address)", "9602bb20": "AMBTICO()", +"9602cba9": "UnfreezeAcc(address)", +"9602d772": "depContractidToAmount(uint256)", "9602e9d5": "withdrawDev()", +"9602e9f8": "idleController()", +"960313bb": "confiscate(address,address,uint256)", +"96032702": "sale(uint256)", +"960382d3": "harvestDuration()", "960384a0": "getValue(string)", "96038f8f": "ICO_Graphene()", "9604702a": "matchExistingBids(bytes32)", +"9604876c": "calculateSusdToBurnToFixRatioExternal()", "960491d7": "setNextRndTime(uint32,uint32,uint32)", "9604a24b": "getPoolCapSize(uint256)", "960524e3": "getInvestorCount()", "96063049": "rollDice(uint8)", +"96065e38": "swapExactTokensForETH(uint256,address[],address,address)", "96066cf9": "MintConfirmed(uint256,address,uint256)", "96069ee1": "CIPToken(address,uint256)", "96074e70": "addBeneficiary(address,uint256)", +"9607549e": "pendingWTRX(uint256,address)", "9607610a": "withdrawFor(address,uint256,uint8,bytes32,bytes32)", "960787a2": "sendFoods(address[500],uint256[500])", +"96078d4e": "mintqsgt(uint256)", "9607a1db": "claimShare(uint256,bool)", +"9607bb4b": "husbandSigned()", "9608088c": "setAddress(address,address,address,address)", "960834f4": "dAddBallot(bytes32,uint256,uint256,bool)", "9608740e": "verifyBid(uint256,bytes32)", +"96088777": "EndUNOVARSE()", "9608e9df": "DataWasRecorded(address,uint256,bytes32,uint256,string)", "960954af": "chargeAdvertisers(address[],uint256[],address[],uint256[])", "960983f4": "addArtifact(string,string,bytes32)", +"9609930d": "setRevokeReward(bool)", +"9609c5e1": "_burnAmount()", "9609e488": "TootyrCrowdSale()", +"9609f6c7": "getPriceCurve()", "960a48ae": "createPreIco(uint256,uint256,uint256,uint256,uint256,uint256,address)", "960a57fc": "SHA256HashRegister(bytes32)", +"960af2d9": "setMaxAgeDepositUntilWithdrawable(uint32)", +"960b11f5": "addProvidersFor(uint256,address[])", "960ba088": "createFinancialStrategy()", +"960be374": "payoff(uint256,uint256)", "960bfc9b": "_owns(address,uint64)", "960bfe04": "setThreshold(uint256)", "960d3f56": "impl_mining(address,uint256,bytes)", "960d8cd3": "testFailUpdateLatestRevisionNotOwner()", "960d94bb": "get_presale_goal()", +"960de829": "setNFTAmount(uint256)", +"960e1193": "DefineCompensationContractAddress(address)", +"960e2101": "toggleSaviour(address)", "960e55a8": "ChannelCloseRequested(address,address,uint32,uint192)", +"960e641a": "fireIsLibraryEvent(uint256)", "960e80b7": "trans()", "960ecf0c": "addNewStage(uint256,uint256,uint256,uint256,uint256)", +"960f1f83": "batchWithdrawInventory(uint256[])", +"960f5fc7": "userStakeMap(address)", "960fa70f": "synthGenes(uint256,uint256)", "96102d7d": "ownerSetWallet(address)", "9610b1bc": "resumeTokenTransferFromAddress(address)", "9610e068": "GetAskingUnitPrice()", "9610f0e6": "pveBattleFee()", +"9610f691": "timings(uint256)", +"96115bc2": "unregisterOperator(address)", +"961180fe": "addLootBox(string,uint256,uint256[])", "96119f12": "SkribbleToken()", +"9611b70a": "queryUserEpochCount(address)", "9611bfc5": "_getExistingTileAt(int32,int32)", +"9611c051": "updateIpfsHash(uint256,string)", +"96123ac4": "__DualPool_init_unchained(address,address)", +"9612491f": "total_stake_count()", +"9612a499": "Reconowner()", +"9612f0ef": "anal()", +"961304ea": "childrenAmount(address)", "96131049": "withdrawal(address)", "96132521": "released()", +"96134247": "rewardRatePerPool(uint256)", +"961363d9": "getRegisteredPolicies()", +"96136638": "slashedBalance()", "9613bc90": "isEvolvementAllowed(uint256,uint256)", "9613e19b": "createAuction(uint256,uint256,uint256,uint32,uint32)", "96147933": "ContractEnabled()", +"96148721": "getUserAccumulateWithdrawByPID(uint256,address)", "9614c769": "setDesc(string)", +"9614ed1f": "commodity(uint256)", "9615ecb2": "wasSuccess()", "9616b410": "incFreezeIndex(uint256)", "96176797": "LogTransition(bytes32,uint256)", "96178c20": "totalSupply2()", "9617d90d": "cartaxiToken()", "96186b6e": "MAX_PERCENT_OF_PRESALE()", +"96188c48": "currentLPFeesTotal()", "961891d5": "changeEscapeController(address)", +"9618949e": "sharePriceCheckpoint()", +"9618b31c": "burnPct()", "9619367d": "minBet()", +"961974ba": "tokenTransferFrom(address,address,uint256)", +"9619f58e": "setTolerancePriceAbove(uint256)", +"961a06a9": "m_claimedMap(bytes32)", "961a16f2": "secondExchangeRate()", +"961a66f6": "addRevoker(address)", "961a9218": "setLLV_edit_17(string)", "961a929c": "gasPriceLimit()", "961b16a1": "addInTeamBalanceMap(address)", "961b2b96": "assignBountyAddresses(address[])", "961be391": "cash()", +"961bfeee": "transferStorage()", "961c2470": "refundRoots()", +"961c34fe": "devAccAwards()", +"961c8acb": "Mailbox(uint32,int88,bool)", +"961c8aff": "G_RATE_ANCHOR()", "961c9ae4": "createAuction(address,uint256,uint256,uint256,uint256)", +"961ca48d": "metadataStore()", "961cc569": "airdropReceiversLimit()", +"961ccc9c": "_extractIndex(uint256)", "961cd8ce": "ticketsForWithExcess(uint256)", "961d1284": "isRefundingEnabled()", "961d30cc": "getMasterNodesDates(address)", "961d3cd3": "setExclude(address,bool)", +"961d45c4": "accountingEngine()", +"961d917a": "lep()", +"961dda2e": "updateTokenPerBNB(uint256)", +"961e7526": "TotalVariantsChanged(uint256)", "961e99d9": "startBuyBackTwo()", "961f1d96": "RANGESTART_3()", +"961fe31b": "releaseApolloTokens(uint256)", "961ffc68": "GatewayInterfaceAddress()", +"96205de6": "rewardPoolId()", +"96208e5d": "setAgreementHash(bytes32)", "9620b995": "transfterForProjectManagement(address,uint256)", +"9620e222": "mapAsset_allocation(address)", +"96213fc7": "auctionLibrary()", "96214735": "setDeployer(address)", "962174b6": "LotteryClaveChain(address)", "9621bcf7": "publishTaskListing(string,address,uint256,uint256,uint256,uint256)", +"9621dc16": "totalEtherBalance(address)", "9621f497": "SetMaxAirDropXblock(uint256)", "96221dc9": "mulX(uint256)", +"96223396": "getValueCommitement(uint256)", "962318b8": "teamKeepingPercentage()", +"96235f18": "IdToBook(uint256)", +"9623609d": "upgradeAndCall(address,address,bytes)", +"96237c02": "getLatestAnswer()", +"962399e2": "setTimeLockRegistry(address)", "96242f41": "getFrontEndTokenSupply()", +"96244034": "changeCreator(bytes32,address)", +"962442c1": "addCollateral(address,uint256,address,bool,bool)", +"9624462d": "setLiquidityTokenAcceptedMulti(address[],bool)", "96246eb8": "Zmbc()", "9624e534": "setBlockDotNumber(uint256)", "9625a6c6": "hardLimitICO()", +"9625e0fb": "mostNodes()", +"9625f14d": "soldPhase3()", +"96268624": "hasExecutedDeposit(bytes32)", +"9627633a": "sendMultiEth(address[],uint256[])", "9627bf02": "preIcoEndsAtChanged(uint256)", +"9627c21b": "sendETHAndVerify(address,uint256,uint256)", "96283310": "setHouseAddressShare(uint256)", +"96283999": "allowMultipleSend()", "96284fb6": "getNizkStruct()", "96286cc9": "isTokenOwner(address)", "96289427": "transferRestTokensToOwner()", +"96294178": "redeemUnderlying(address,uint256)", "9629da17": "withdraw(uint64,address,address[],bytes32[],address[],uint256[])", +"9629e4b9": "icoEthers(address)", +"962a5b23": "open(address,address,uint256,uint256,uint256,uint256,int8)", "962a64cd": "convert(string)", "962aab81": "blockEnded()", +"962b0460": "setTriggerMinCount(uint256)", "962ba36f": "quarantine(address,address[],uint256[])", +"962ba8a4": "refreshSystemRandomHardLimit()", "962ba969": "ExceedIOToken(uint256,string,string)", +"962bd21e": "idToWeiAmount(bytes32)", +"962c191c": "transferAndCallWithSignature(bytes,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "962c9898": "SOLUSToken()", "962c9c8d": "MAX_VOTED_TOKEN_PERC()", +"962ca496": "getCurrentAPY()", "962ca53e": "Cosby()", +"962ccc55": "_deposit(address,uint256,string,address,bool)", +"962ce65b": "setAssignedID(address,uint256,string)", +"962cfa78": "PartOfMiners(address,uint256,uint256)", "962d0c72": "overRaisedUnsend()", +"962d543c": "setSensorOwner(address)", "962dae57": "getPriceContract()", +"962de3dc": "phaseIIQ()", +"962e29c1": "PayoutAllStaking(address)", +"962e2e50": "three_call(address)", +"962e6501": "setupDisbursements(address[],uint256[],uint256[])", +"962eeeb6": "borrowEthExample(address,address,address,address,uint256)", +"962f5f18": "getVerifiedInfo(address,string)", "962ffeae": "totalCurrentFunders()", "9630961d": "createRole(bytes32,address[])", +"96313923": "findSevenPercent(uint256)", "9631c1bd": "FounderFeeInPercent()", +"96321289": "setExtLen(uint256)", +"9632a4e4": "getAdditionalGasConsumption()", +"9632e720": "receivedAmount()", +"9632f82f": "GovernorMint(address,uint256)", +"96330f46": "contributionToTokens(uint256)", "9633303f": "setSrc(address)", +"96336b30": "payToken()", +"96343886": "sponsoredBurn(uint256)", "96344d05": "creatorRequestFundTransfer()", "963476e5": "listBackers()", +"96348e5e": "exchangeClosed()", "9634ef56": "start_of_report_period()", "9635024c": "TANDER()", +"96350a85": "setSettlementFeeRecipient(address)", +"96354704": "_feeDecimals()", "96354f6d": "BONUS_ICO_STAGE1_PRE_SALE3()", +"96357e4b": "get_loan_interest()", "9635eaf7": "fundsToAddress(address,uint256)", +"9635ef48": "approve_415(address,uint256)", "9635fc2c": "yahooOracleUrl(bytes32)", "963630a3": "ETGOLDToken()", "963632d3": "Prosperity()", +"96363e29": "OASIS_ETH_AMOUNT()", "96365d44": "poolBalance()", "96370fa2": "savePic(string)", "963749b6": "calculateWinnerPrize(uint256,uint256)", +"9637f475": "pendingMerkleRoot()", +"9637febe": "setHydrogenPerBlock(uint256)", "963812c3": "createItemId()", "96382f0b": "gameStatus(bool)", +"963833b0": "dailyRewardForTC()", "96383c04": "setPrice(uint256,uint8)", "96386ab3": "myMethod2(string)", "96389bd7": "OwnedController(address,address)", "9638a89c": "DataRecordIndexStructs(uint256)", +"9638f131": "oCash()", +"963920a3": "referralPercents(uint256)", +"963949a3": "OWNER_SLOT()", +"963a9478": "resetTrackedValue(uint256,uint256)", "963a9a13": "startInvite()", +"963bfe12": "defaultTokenURI()", "963c0724": "Lucky()", "963c1121": "set_pre_kyc_iconiq_bonus_numerator(uint256)", "963c11df": "totalScammed(address)", "963c3397": "winning_year()", "963c6017": "postGoldPeriod()", +"963ce9dc": "uniquePredictionValue(bytes32)", "963d62fb": "tokenLossRatio()", +"963d847b": "setETHPx(address,uint256)", "963dd1dd": "Diatom()", "963de4d2": "GetBet(uint256,uint256,bool)", "963e2680": "setMinSiteTipPercentage(uint256)", "963e49c7": "FindCarrot()", "963e63c7": "minValue()", +"963e986d": "presentDaysInterval()", +"963ef0ec": "LogSwapSuccess(bytes32)", "963f2334": "settleCaller(address,address,uint256)", +"963ff4cb": "allowedAffiliates(address)", "96401470": "TutorialToken(uint256,string,uint8,string)", +"96401aef": "is_admin_mode()", +"96401c58": "setKycWhitelist(address,bool)", "96406391": "setTokenDistribution()", +"96407562": "coinHolderPercent()", "9640da30": "ethRedeemed()", +"9640fe35": "dapps(uint256)", "96419497": "PAXToken(bool)", "9642a19c": "optInGas()", +"9642a65f": "liquidityRecipient()", "9642ccdf": "functionName(bytes20,address)", "9642ddaf": "testMint()", +"9642ec0c": "WhiteList_Address()", +"9642f161": "getFDDurationAndInterest(uint256,uint256)", +"96437ebc": "setLoanRate(uint256)", "9643aef4": "testControlCreateWithParentSameNonce()", +"9643c1b5": "Payment(address,uint256,uint256)", +"9644170e": "WorkerPoolUnsubscription(address,address)", +"96446d05": "ethLeftOnThisStep(uint256)", +"9644cbe3": "pendingRasta(uint256,address)", "9644fcbd": "changeMembership(address,bool,string)", "96450a6d": "walletWithdraw()", "9645337a": "removeOrder(uint256)", +"964561f5": "list(uint256,address[],uint256[])", +"96456c5c": "dsrPerBlock()", +"964585df": "uribase()", +"96458f82": "renownedPlayers(address)", "9645bae5": "newAuction(uint256,uint256)", "964620d2": "TheMostPrivateCoinEver()", +"964620d3": "signature_compare(bytes,bytes)", +"9646384f": "Uniswap()", "96463fc6": "createTrade(uint256,uint256)", +"96465d39": "setRewardNftMint(uint32,uint128)", "96468249": "getFoundation(address)", "96469132": "setPonziPriceInWei(uint256)", +"9646961a": "rewardPerToken2()", "9646b85d": "getMintableAddress()", "9646df4d": "presaleEnds()", +"96470b73": "setWithdrawFeeFactor(uint256)", "9647259c": "dividendDistribution()", +"96472ff2": "divmap(address)", +"96476d52": "viewSaleRhino()", "9647df97": "TES()", +"96480d04": "LockedTokens(address,uint256,uint256)", "9648c9f4": "sessionId()", "9649650c": "removeBank(address)", "96497258": "withdrawOverdraftTokens(address,uint256)", +"9649964b": "increaseNextBalance(uint256,uint256)", "964997a4": "MoacSupply()", "9649ccaa": "updateSubscriptionOffer(uint256,uint256)", +"9649d76c": "cumulativeYGYRewardsSinceStart()", "9649d98b": "restrict()", "964a4ac7": "ULTRA_HERO_MULTIPLIER()", +"964a7322": "yieldTokenCodeHash()", "964ad434": "TIER1_CAP()", "964afe08": "addSomething(uint256)", +"964b22b4": "Additional(uint256)", +"964b244f": "normalizePaybackAmount(address,address,bytes32)", "964b97de": "box2Star5()", +"964bc33f": "delist(uint256)", "964c0b40": "ExtensionCalled(bytes32[8])", +"964c1f98": "oldRouter()", +"964c4061": "createManyToOneProxyRelationship(bytes32,address)", "964c7d84": "addressToBlock(address,bool)", "964c836c": "receiveExecutionNotification()", +"964d205e": "minWithdrawDuration()", +"964d23a1": "amountOfUsers()", +"964d427c": "updateMaxPoolReward(uint256)", +"964d8a33": "megaPoolReadyToWithdraw(uint256,uint256)", +"964e38eb": "UpdatedBetOnTeams(string,address,uint256)", "964ecc09": "forceRefunding()", "964f61f9": "getCosigner(uint256)", "964f6dcd": "Elephant()", "964f8fba": "totalDinoSold()", "964fad94": "fundingGoalOf(uint256)", "964fb96d": "test_init()", +"964fea6d": "viewReserved()", +"96506ddc": "threeQuarterBlock()", +"965155f1": "ThreeEtherIcons(address,uint256)", "965232c0": "getTotalAllowed(address)", "9652389c": "setPreSaleOn()", "9652713e": "runSigned(uint40,uint256,address)", +"965306aa": "isAvailable(string)", "96532d1c": "mintingAllowed()", +"965394ab": "loserMultiplier()", "9653dee5": "tokenSwap()", "9653f8a1": "etherBalances(address)", "965447d9": "toPowerOfTwoThirds(uint256)", +"9654ff16": "getFirstDelegationMonth(address,uint256)", +"96551a82": "scans(string,uint256)", +"965554b4": "stakingDeployTime()", "965582d6": "requestNewID(string,string,string)", "9655943e": "validMCAmount()", "9655e4b0": "sellIdeas()", "965693ee": "TicketsPurchased(address,uint256[],uint256[],uint8[])", +"9656f4c2": "ship(bytes32,string)", +"9656fd57": "subtractResellingAmount(address,uint256)", +"96570f4c": "prophets(address)", +"96574194": "putDividendOnHold(address)", "96574919": "removeStakerFromArray(address)", +"965762d0": "calcFulfillment(uint256,uint256)", "96577caa": "getLowWinPercent(uint256)", +"96579af7": "intergerTest2()", +"9657ae00": "anonPerBlock()", +"9657b809": "dailyLimitTracker(uint256)", +"9657d902": "setBaseBreedingFee(uint256)", "9657f8ad": "TopiToken()", "96581de1": "registerPayments(address[],uint256[],uint256[])", "9658522c": "createPlayerOnAuction(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,uint256)", +"9658dd2d": "waiveDiscrepancies(bool)", +"96591e31": "updateOptionableBenefit(uint256)", +"9659227d": "getUserStakedTokenBalance(address)", +"96594bf0": "estimateDistributedAllData(uint80,uint16)", "96594efb": "WorldBit(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", "9659867e": "mintCount()", "965a324e": "OxShelterEye()", "965a3b7e": "targetDemographics()", "965a79fb": "getAllJobs()", +"965a8953": "testaPerBlock()", +"965ac0af": "auction__lockupEnd()", "965acc73": "setCampaignBudgetById(bytes32,uint256)", "965b0cc4": "signedApproveAndCallCheck(address,address,uint256,bytes,uint256,uint256,bytes,address)", "965b2bae": "setFinancierParticipationAdd(address)", @@ -85946,92 +157355,177 @@ "965bdf33": "SetAuditedAssetSize(uint256)", "965be457": "registerApp(bytes32,address,bytes4[],address[])", "965beae8": "bulkTokenSend(address[],uint256)", +"965bfafb": "getClaimOfEmergencyPauseByIndex(uint256)", +"965c0f28": "getExpectedReturn(uint256)", "965c643f": "setReference(bytes32,string)", "965c90e3": "getNodeByIndex(uint256)", +"965d03d6": "vote(bytes32,bytes32,bytes32,bytes32,string)", +"965d61b9": "strongToken()", +"965da4ec": "gf()", +"965e03be": "discountToPayERC20()", +"965e08e8": "initilizeVestingAndTokenAndWhiteList(address,uint256,uint256,uint256,uint256,address)", "965edec5": "_publishSecret()", +"965ee5be": "createWithSignature(uint256,string,uint256,bytes32,bytes32,uint8,uint8)", +"965f064e": "genesisBlock(address)", +"965f3f99": "icoSalesBal()", +"965f46c7": "_maxUnlockSchedules()", +"965fa21e": "redeemFee()", "96603e88": "hotPotatoHolder()", "9660ab3a": "setContractUser(address,bool)", "9660aeeb": "isMatching(int256,int256,int256)", +"96615aa3": "_Burn(address,uint256)", "96617ba4": "ClientsNotified(string,string)", "966203e7": "Product(bytes32,bytes32,address[],int256,int256,address,address)", "9662355e": "generateAttestForDelegationSchemaHash(address,address,uint256,bytes32,bytes32,uint256[],bytes32)", +"9662676c": "rewardPoolDistributed()", +"9662ac58": "powerToken()", "96637b10": "getEscuela(uint256)", "9663871f": "recursiveRound(uint256,uint256,uint256)", "9663a496": "awardBronze(address,address,address)", +"9663d3f2": "transferTokenTestIDOverBigInteger(address)", "9663f88f": "getBlockHash()", "96642cfc": "_isAuctionExist(uint256)", +"96648e23": "priceAfterSell(uint256)", +"9664b9c2": "MJOLNIR()", "9664ca94": "date_string(string,int8,int8,int16)", "9664d2d9": "resourceIndex(address,bytes4)", "9665688e": "setGame(uint256,uint256,uint256,uint256,uint256,uint256)", +"9665756d": "claimStaking()", "966588d4": "cloneWithTwoPops(uint256,uint256)", +"966595dc": "tokenOwned(address)", "9665b658": "changeExecutor(address)", +"9665e82a": "ratio1()", "9665ef09": "bitmask_show(address)", "9665f170": "pregnantEtherDogs()", +"96660ab1": "InsufficientEthAttachedError(uint256,uint256)", +"9666152e": "setIndividualTransferFee(address,uint256,uint256)", "96661b04": "closeDataResponse(address,bool)", "9666856d": "stopList(uint256)", "9666cbfa": "getDeployedMatches()", "9666e1f9": "isCosignerSet(uint256)", +"9666fe3c": "setCallContractValues(uint256,uint256,uint256,address,uint256,uint256,uint256)", "966704c2": "autoTransferLocked(uint256,uint256)", +"96677086": "partitionedWithdraw(address[],uint256[])", +"9667e4ec": "setMerch(bytes32,uint256,uint256,uint256,bytes32,uint256,uint256)", "96682704": "TransferToReferral(address,uint256)", "96686560": "Setup(string,string)", "96687919": "_preSaleSupply()", "9668b281": "AKContract()", +"9668ceb8": "claimedAmount()", "966933ce": "DURATION_PER_VESTING()", +"966945db": "mintPaperMass(uint256,string,string)", "96696da8": "getHives()", +"96698ec3": "PreDrawCompleted(uint256)", "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()", +"966adea8": "increaseAmount(address,uint256,address,address)", +"966ae01b": "getValuePoolRewards(address,uint256)", "966aeece": "changeWhitelister(address)", +"966b2d76": "withdrawTokenAtIndex(address,uint256,uint256)", "966b3514": "contract_address()", "966b7d91": "AdminChangedFundingWallet(address,address)", +"966b822f": "getTermPeriodAndReturnPercentages()", +"966d7148": "withdrawalVoucherSubmitted(bytes32)", +"966da8da": "getUnlockedStake(address)", "966dae0e": "factoryAddress()", "966dcd26": "intertransfer(address,address,uint256)", +"966dcd8d": "approve_767(address,uint256)", +"966de49a": "predictionStartPriceRecords(uint256)", "966e6ead": "DefaultReleaseCalled()", +"966ed26c": "m_Dist_Address10()", "966edae7": "lastBlock_a3()", +"966ee9a3": "initialize(uint256[],uint256[],address,address)", "966f697c": "_getSubscription(bytes32,address)", "966ff650": "totalBurnt()", "9670078c": "burnDNC(address,uint256)", "9670591b": "giveAwayHoldership(address)", +"96706bc4": "userRewardDetails(address,uint256)", "9670c0bc": "getPrecision()", +"96710df3": "depositMoondayETH(uint256)", +"96713d89": "lnTfId(uint256)", +"96713da9": "GOV_CHANNELID()", +"9671683b": "addMCRData(uint256,uint256,uint256,bytes4[],uint256[],uint64)", +"9671ecff": "addSyncPairs(address[],address[])", "9671ef91": "WEI_TO_INSIGHTS()", +"96728a72": "return_capital(uint256,address)", +"9672e3ba": "marketBalance(address)", +"9672fe7a": "cube_address()", "9673d6a3": "events(string)", "96744afb": "ADDR_TEAM_TOKENS_ACCOUNT()", +"9674a0ac": "userAddress(uint256)", +"9674a931": "vestingLastSync(address)", +"9674a994": "getReferralId()", +"9674ca6e": "newWhitelist(address)", "967506be": "deleteTokenAddress(address)", +"9675193c": "redeemFrom(address,uint256,bytes)", +"96757347": "MntpMigrated(address,string,uint256)", +"9675932e": "allowAndCall(address,uint256,bytes)", "9675bb9c": "totlePrimary()", +"9676b722": "setWeatherByGeohash(string,string)", +"967706e9": "exchangeFeeRate(bytes32)", "967743a8": "unlock20Done()", +"967750ea": "GetRedressInfo()", "96778446": "addVestingUser(address,uint256)", +"96779264": "playersByID(uint256)", +"9677c7eb": "invited(uint32,uint256)", "967826df": "maxAllowedManualDistribution()", "96784f45": "balanceOf2(address,address)", "9678a1e8": "ProxyCreated(address,address)", +"9678b114": "mintTeamAndAdvisorsYear1Part11(uint256)", +"9678cbf7": "assignUnixDurationToOpenRemainingAssetsToAllBeneficiaries(uint256)", "9678df74": "MerlinCash(uint256,string,string)", +"9678e21b": "allPercent()", "9678eb05": "SafeDiv(uint256,uint256)", "9678fb88": "TACTICALCRUISER_MAX_CARGO()", "96793725": "registerWallet(address,address)", +"96796c61": "AssignerTransferred(address,address)", +"96799760": "deleteManager(address)", +"9679c72a": "getAttributeTypeIDs()", "9679dd7d": "tokenLeft()", "967a08f7": "raiseTransferEvent(address,address,uint256)", +"967a334c": "checkRankUpgrade(uint256)", "967b2692": "SaleCount()", "967b3c21": "unitEpicGrowth()", +"967b7bb8": "_burnSynthsToTarget(address)", +"967b8c72": "acceptOwnerShip()", +"967c1375": "getDaiDeposited(address)", "967c33b3": "Deployer()", +"967c5656": "addCardNotMintedWithAmount(uint256,uint256)", +"967d7f88": "dropTokens(address[],uint256)", "967dd0ae": "orderFor(address)", +"967e39b7": "usd_medianizer()", +"967e4d0e": "totalDynamicBase()", "967e6e65": "getAge()", "967e8611": "placeCube(uint64,uint64,uint64,uint256,uint256)", +"967ec426": "startOrContinueMaintenanceMode(uint256)", "967f1cc6": "ownerPause()", "967ff23e": "blocks()", "96800dfd": "updateCap(string,uint256)", +"96805e54": "add(uint256,address,bool,uint256)", +"9680c463": "incr(string)", "96817396": "bonus20end()", "96821fc1": "MAX_MILESTONE()", +"9682f32d": "priceAverage(uint256)", "96834e36": "ownerSetStandardFee(uint256)", "9683d11d": "OHWOWW()", "9683fe3e": "create(address,bytes32,uint256,address)", "9684da1a": "createGenesisUniverse()", +"9684ded7": "CelebrityReleased(uint256,address)", "9684fe92": "interestCycleLength()", +"9685659c": "bucksmaster()", +"9685b8f7": "device_modify(uint256,string,uint256,string)", "9685e736": "stopAvatarCreation()", "96862e2d": "PattyCoin(uint256,string,string)", +"9686898a": "getPlayRecord(address)", +"96869ded": "modifyTwoParameters(address,address,bytes32,bytes32,bytes32,bytes32,uint256,uint256)", +"968715b0": "cycleApproved()", "968790d0": "reclamaPagamento()", "96879353": "CreateIco(address,uint256)", +"9687c181": "calculateWithdrawalSum(uint256,uint256,uint256,uint256)", "968803e3": "CYC()", "96881d20": "CoinParkToken()", "968858c8": "tokenreward()", @@ -86041,46 +157535,76 @@ "9689ac95": "TYPE_NOT_AVAILABLE()", "9689e535": "CBCC()", "968b12aa": "Crowdsale(uint256,uint256,uint256,address,uint256)", +"968b4493": "checkReferrerEarnings(address)", "968bb12c": "setLegalFileLink(string)", "968bd60d": "LogSendReward(address,address,string)", "968be45d": "MYPPToken()", +"968c0d2f": "GlobalCULL()", "968c15de": "inscription(uint256)", +"968c4209": "currencySymbol()", "968d1cff": "percentForCommunity()", "968d73d8": "start_service2(uint256,address,uint32)", "968d901b": "getCurrentGame()", +"968dd672": "isTraderIn(uint256)", +"968ddc7a": "setMaxExpirationOnAcoPool(uint256[],address[])", +"968e7953": "glad()", "968ed600": "totalFunds()", "968f0a6a": "getBidBySiteIndex(uint8,uint256)", +"968f600c": "Check(address,address)", +"968f93eb": "bitAndBytes32ToBytes32(bytes32,bytes32)", "968f9dc3": "EtherReserved(uint256)", "968fc02a": "DogRace()", "9690be37": "deleteGame(bytes32)", "9690caa6": "Umint21()", +"969177b2": "cryptoVersusFee()", "9691a8bf": "changeIndividualCapInWei(uint256)", +"9691c722": "iUniswapV2Pair()", +"9691ce31": "devideCount()", "969235a4": "getSaleStart()", "969283e2": "availableVolumeEnclaves(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "969295ae": "changeReferral(address)", "96934e88": "isReward()", +"96936e4c": "getUniswapPrice(address,bool)", "96937617": "Rpct()", "96938d5b": "watchedAddress()", +"9693d6ec": "WeHaveAWinner(address,uint256)", "969464f6": "isCauldronExpired(uint8)", +"9694c8ca": "showempdata(address)", "9694f039": "founderSupply()", +"9695428b": "_neg_1_shouldBeLesserThan_0()", "96957869": "verifySignature(bytes32,uint8,bytes32,bytes32)", +"969596d6": "merchantFundAddress()", "9695e3c0": "EOMarketToken()", +"969639d1": "viewProtection()", +"969642b9": "negateIsolation(address)", "9696e59a": "totumPhases()", "9696ef66": "SLOTS()", "9696fbf5": "Daschain(uint256,string,string)", "96974e47": "setMinAllowedBetInTokens(uint256)", +"9697c0a1": "createStar(string,uint256)", +"969830dc": "LogDevTokensAllocated(address,uint256)", "96984631": "RANGESTART_10()", "9698d611": "setSaleManageContract(address)", +"96994869": "getGovProposals(address,uint256[])", "9699ca16": "getPublicKey(bytes32,uint8,bytes32,bytes32)", +"9699d309": "setRentScale(uint256)", "969ac477": "PRIZE_POT_PERCENTAGE_MAX()", "969be87e": "testGetNewItemId()", "969bece3": "setRegionOnSale(uint16)", "969bf358": "getCurrentTokenSaleId()", +"969c575b": "pushAllLiquidity()", +"969c7bf5": "sellerUpload(string,uint256)", "969ca0eb": "scavengeEscrow(uint64)", "969cb4da": "changeSubmissionPrice(uint256)", "969cb7c3": "getPublisher(uint256)", +"969cdd1a": "changeSettings(address,address,string,string,uint8,uint256,uint256,uint256,address)", +"969d3a96": "LogNokuCustomERC20ServiceCreated(address,address)", +"969d43cb": "TokenTEST(uint256,string,string)", +"969d4d30": "_getTradeTxnData(address,address,address,uint256,uint256,uint256)", +"969d538e": "TokenAssignment(address,uint256)", "969d5b94": "changeMultiSigWallet(address)", "969da324": "updatedEtherPrice(string)", +"969dca95": "removeTimeFrame(uint256)", "969ddd71": "getMaxCap(address,uint256)", "969e3756": "exchange(address,address,uint256)", "969ea336": "maximumInWei()", @@ -86091,76 +157615,142 @@ "969fa9d2": "EmergencyWithdrawalSucceeded(address,uint256)", "969fbf12": "contructor()", "96a04925": "retreiveTokens(address)", +"96a0890e": "setRequesterPermission(address,bool)", +"96a0e5e3": "fetchCurrentPrice()", +"96a13b32": "borrowCheck(address,address,address,uint256)", "96a16793": "changeOraclizeAccountingSettings(uint256)", +"96a1d343": "changeFarmRateWinner(uint256)", "96a1e85c": "get_total_quantity()", +"96a28c41": "setBikContract(address)", "96a34fc7": "exchangeToken(uint256,address,address)", +"96a360ee": "DataAdded(address,address)", +"96a3e0b6": "managerWithdraw(uint256)", +"96a418d4": "modify(address,uint256)", +"96a44225": "enableMarket(uint256)", +"96a445b4": "FiatCollectedEvent(uint256,uint256,string)", "96a44d35": "devuelveApproles(bytes32)", +"96a44dc0": "canSpin()", "96a49d60": "getCircle()", "96a51fde": "OilVisionShare()", "96a566be": "PartnersNotSet(uint256)", +"96a57998": "X7Transfers(uint8,address,uint256,address,address,address,address,address,address,address)", +"96a5dae7": "getProductQuantity(int256,int256)", +"96a614d2": "theForceToken()", "96a625a5": "plantcToken()", +"96a67d25": "brrr()", "96a68b91": "makeUndestroyable()", "96a69d04": "totalSquareStakes(uint256,uint256)", +"96a69e12": "tradeCashReceiver(address,uint128,uint128,uint32)", "96a6a748": "POHStopTime()", "96a70169": "tradeETH(uint256)", +"96a705c1": "unlockedActiveBalanceOf(address)", "96a77176": "setPresaleTwo()", "96a7cf6a": "callDestruct()", "96a80699": "postAllocateAuctionTimeMints(address,uint256,uint256)", +"96a8f2c6": "LogTokenSetCrowdsaleManager(address,uint256)", +"96a90c8f": "getrelease(address)", "96a942c7": "minTokenPurchaseAmount()", "96a952a5": "setInstallmentsLoanData(uint128,uint256,uint24,uint40,uint32)", "96a9df88": "_withdrawAirdrop(uint256,bytes)", "96aa6305": "totalNotCompleted()", +"96aa63cb": "transferTx()", "96aab4f6": "setBountyAddresses()", "96ab97a5": "hasVested(address)", +"96ab9e56": "LogDarknodeOwnerRefunded(address,uint256)", "96ac591e": "postICO(address,address,address,address,address,address,uint256)", +"96ac9034": "showStars(address)", +"96ad39fa": "getOperationalFee()", "96ad4131": "getRequiredAdmin()", +"96ad435b": "totalProtectedReserveAmount(address,address)", "96ad6c8a": "deposit_address()", "96ad704a": "addToken(address[16],address,uint256)", "96adad2e": "sellStores()", "96adfe42": "mintWithData(address,uint256,bytes)", "96ae44f6": "addAcceptedArbiter(address)", +"96afa82b": "secsLeft()", "96afb365": "reclaim(bytes32)", "96afc450": "emissionRate()", "96afccb3": "withdrawDonation(uint256)", +"96affb25": "challengePrize()", "96b01c37": "warriorToOwner(uint256)", +"96b10c31": "breedCharge(address,address,address,address,uint256,uint256,uint256,uint256)", "96b116c6": "statusDoacao()", "96b1348a": "claimTokenFunds(address)", +"96b13fef": "BackUpBank()", +"96b15c0b": "bID()", +"96b17591": "DSHORT()", "96b1e4d4": "isFreeze(bytes32,bytes32)", +"96b25a66": "payMeBackHalf()", "96b2c923": "changePlatformWithdrawAccount(address)", +"96b2dc9a": "withVisibility()", +"96b36bed": "LogChangeOwner(address,address)", +"96b375c0": "IANA_removeASN(uint32,address,uint256,bytes)", +"96b3e2f0": "settleTreasury()", +"96b4646d": "removeFromUnit(address)", "96b47f0d": "soldOnStage()", +"96b50931": "rewardSent(address,uint256)", "96b55f7d": "tierCount()", "96b58ac8": "tokensLeftForSale()", "96b5a755": "cancelAuction(uint256)", +"96b5b9b8": "Create(address,address)", "96b5c5f4": "FeeWallet(address,uint256,uint256)", "96b5f7b6": "ParallelWorld()", +"96b68904": "product_component_exists(uint256,uint256)", +"96b69c36": "createOrders(uint256,uint256)", "96b6af5a": "submitCustodianDoubleSign(address,uint256,bytes32[],uint256[],bytes32[])", +"96b6b0f7": "setContractManagerRight(address)", +"96b747b2": "changeStakeToken(address)", "96b76c23": "stand(uint256)", +"96b797ea": "NumberOfTokens()", +"96b7c510": "codeUsageCounts(bytes4)", +"96b7d08e": "Lambo(uint256)", "96b828b4": "Lock(uint256,uint16)", +"96b84f7e": "KYCReset(address,address)", +"96b85c16": "loadVerifyingKey(uint256[2][],uint256)", "96b86436": "foundersAllocatedAmount()", "96b86e1d": "PLCRVoting(address)", +"96b87b1b": "getProposalStates(address,uint256[])", "96b90b05": "Apex()", +"96b98862": "investments(address)", +"96b99962": "renounceSupporter()", "96b9a9d0": "medalBoostAndBurn(uint16,uint64)", +"96b9cc0e": "shareConverter()", +"96ba4f4e": "getSUSHI()", +"96baa954": "accessWhitelist()", "96bb1fef": "claimStakingRewards(address)", "96bba9a8": "slashSmallUsername(string,uint256)", "96bc0f94": "onlyAdminsFriends()", "96bc1a89": "getLockedAmount_investors(address)", "96bc2287": "PRE_FUNDING_GOAL()", "96bc3f3a": "getForecastScore(uint256)", +"96bc456a": "getDataPricesByBaskets()", "96bc4a40": "bsWallet()", +"96bc50b0": "getControlToken(uint256)", "96bc5ab7": "setOracleURL(string)", +"96bca9da": "setDollarAmountToManageByTokenId(uint256,uint256)", +"96bcc37f": "auction__uniqueStakers()", "96bcf236": "am_i_on_the_whitelist()", "96bd09a1": "edit_safe(address,string,string)", +"96bd3653": "availableEtheralTest0()", "96bd8dae": "transferAllowance(address,uint256)", +"96be13e7": "hashRandom(uint256,bool,uint256)", +"96be724c": "redeemCToken(address,address,uint256)", "96be8878": "team2Balance()", "96bf15bf": "gamePrice()", "96bf4ed5": "TOTAL_TOKENS_FOR_CROWDSALE()", "96bf5022": "MRIDUL()", +"96bf8502": "ModuleSet(address,bool)", "96bfc229": "isInWhiteList(address)", +"96bfc766": "punkIdToPunkName(uint256)", +"96c0129a": "SPOON_TOKEN()", "96c0fb8b": "setWhiteListInBatch(address[])", "96c108c9": "assignToBeneficiary(address,uint256)", "96c12acb": "Fuck()", +"96c13b0e": "getInit()", "96c14d92": "closeContract(bytes32,bytes32,uint256,uint256,uint64,uint64,bytes32,bytes32,bytes32,uint64)", "96c16735": "UselessAirdroppedToken()", +"96c1d05b": "token1address()", +"96c22012": "earnAll()", "96c237b4": "getDeedInfo(address)", "96c266ca": "developersKey()", "96c28881": "fundraise_max()", @@ -86168,210 +157758,378 @@ "96c2d4c9": "totalTipForDeveloper()", "96c36170": "icoEtherBalances(address)", "96c38294": "getETHUSD()", +"96c3facd": "_getTransferabeTokenAmount(address,address,address)", +"96c4d9d2": "freezeTo(address,bool,uint256)", "96c52fc3": "____forward(address,uint256,uint256,bytes)", "96c5406d": "tokenFree()", +"96c55175": "kick(address)", "96c5743a": "test03AliceBuyToken()", "96c5ea93": "icoBeginDate()", +"96c61777": "depositIds(uint256)", +"96c6265a": "getCstETHByStETH(uint256)", "96c62b27": "BalanceBook()", "96c72144": "GrimReaperAddress()", "96c74715": "NBW()", "96c7a2a3": "BlockRxToken(uint256)", +"96c7c950": "_initialTransfer()", "96c81be5": "unicornsOf(address)", "96c824a8": "createAccountFundContract()", "96c82e57": "totalWeight()", "96c85b59": "TestBancorFormula()", "96c8da45": "oneTokenInEur()", +"96c8df37": "setInterestOwed(uint256)", +"96ca3e37": "setGuard()", +"96ca55da": "campaignStages(uint8)", +"96ca74f8": "Finish(bool)", "96ca7653": "LottixTest()", +"96caa3c1": "swapTokensOnDEX(address,address[],uint256[],uint256,address,string)", +"96cad171": "startSaleFETH(uint256,uint256,uint256,uint256,uint256)", +"96cad83b": "setSecondaryPrice(uint256)", "96cb4bc5": "RESERVED_ECOSYSTEM_GROUP()", +"96cbaf3e": "doesNotProofExist(string)", "96cc7be7": "updateCeleb(uint256,uint256[6],uint256[6])", "96ccacb0": "hour_blocks()", +"96ccad60": "devFutureProfit()", +"96cd5536": "transferEternalStorage(address)", +"96cda080": "swapFee(uint256,address,address)", "96cdb027": "InstallerEscrow()", "96ce0795": "denominator()", +"96ce267a": "ShowOwner()", "96cea3f7": "confirmWithdrawTransaction(uint256)", "96ced078": "getPlayerNumbersInGame(uint256,address)", +"96cef947": "runper()", +"96cf1455": "getStakerStakedContractByIndex(address,uint256)", +"96cf4feb": "setBurnShare(uint256)", "96cf5227": "changeLockTime(uint256)", "96cfd124": "signedTransferHash(address,address,uint256,uint256,uint256)", "96cfda06": "getCourseCount()", "96cff3df": "getMinimumCallCost(uint256,uint256)", "96d002a0": "subFundBalance()", "96d02099": "rsplit()", +"96d0558d": "setupToken(address,bool)", +"96d107f6": "ecrecover(bytes32,uint8,bytes32,bytes32)", "96d122ea": "getStoreAddress(string)", "96d195bd": "getWitnesses()", "96d1c952": "filterBuyers(bool)", "96d28e00": "spinDeposit()", +"96d296c9": "ExecuteSubscription(address,address,address,uint256,uint256,uint256,uint256)", +"96d2e742": "markSave(bytes32,address)", "96d2ede5": "preBalanceOf(address)", +"96d2fd43": "setBtcxTmin(uint256)", "96d3196b": "getSumActiveToken()", +"96d32b10": "CreateHeld(address,uint256)", "96d373e5": "cast()", "96d37936": "finishTokenMinting()", +"96d38cb6": "baseAdminAddr()", +"96d39100": "submitReport(uint256,uint8,string)", +"96d3c5a3": "isUnlockedTeamAdvisors()", "96d43cc6": "getMinimumFundingGoal()", "96d46500": "ICO_CAP2()", "96d4cb9b": "FipsRegistration(bytes20,address)", "96d4d091": "advisorAddress()", "96d4ebf1": "finneyPerToken()", "96d4f640": "createOrder(address,uint256,address,uint256,uint256)", +"96d50893": "isUserStakingNormalNFT(address)", +"96d53eb8": "changeRewardCollector(address)", +"96d5785c": "setRuleDisplayDuration(uint256)", +"96d5de39": "_decode_sol_bytes18(uint256,bytes)", +"96d62016": "harnessPleaseFailOpaque(uint256)", "96d6401d": "TRANSFER_PROXY()", +"96d667b7": "AnswerIdsByVersion(uint256)", "96d66cf8": "expertsAccount()", +"96d69abc": "transferMintership(uint256,address)", +"96d6b70c": "capWithdrawPercent()", "96d6c134": "coreVUPDestination()", +"96d6d1a7": "getGlobalBorrowEXR()", "96d7a9ed": "_menu(bytes32)", +"96d7b983": "_writeCheckpoint(address,uint32,uint96,uint96)", "96d7f3f5": "lastTimeMinQuorumMet()", "96d811b7": "TokenVesting(address)", +"96d857c5": "getClaimsStartTime()", "96d8b050": "claimTokensToOwner(address)", "96d8f4f3": "minimumDonation()", "96d8fe3b": "_updateHistory(address,address)", "96d92a72": "changeRNGenerator(address)", +"96d99555": "_hasPermission(address,address,bytes32)", "96d99568": "MMMTokenCoin()", +"96d9972e": "getAgic()", "96d9a881": "manualDeleteEditionBids(uint256,address)", +"96da0344": "getdividendsPool()", "96da1fba": "sendETHToContributionWallet(uint256)", "96da2848": "gasForCLI()", +"96da6d7e": "approve_256(address,uint256)", +"96dae737": "receivePayment(address)", +"96daf567": "_lockWETHAndDrawDAI(uint256,uint256)", +"96db250b": "isProveF(uint256,address)", +"96db582a": "stakeEth(uint256)", +"96db752a": "getWhitelist(uint256)", +"96db92a6": "doThing(string,uint256)", "96dbab81": "stub()", "96dbad1e": "sellCityForEther(uint16,uint256)", "96dbb486": "updateFinishTime(uint256)", "96dbbc5f": "Token_Description()", "96dbe56e": "ImpCore(address)", +"96dbfbdf": "setCoreArbAddress(address)", +"96dc2ae0": "LogItemWithdrawn(address,address,uint256,uint256)", +"96dc3bf6": "ChangeTokenUSDRate(uint256,uint256)", "96dc461f": "setBountyTokensCount(uint256)", +"96dcd92a": "rateOfConversion()", +"96dcfdd3": "contributions(address,uint16)", "96de0c20": "_makeWithdrawForPeriod(bytes32,uint256)", "96de56d2": "getPlayerFlips(address,uint256)", "96de6caa": "qtyValidators()", "96de9c8c": "cnyBtcRate()", "96dea936": "proposalData(uint256)", +"96df1d01": "checkConstruct()", "96df3540": "TLD_NODE()", "96dfa78b": "price_per_eth()", "96dfcbea": "checkState()", "96dfcc21": "weAreClosed()", "96e05fdb": "PaymentAccepted(address,bytes8,uint256)", +"96e09034": "StakedAmountOf(address)", "96e0ef33": "send(address,address,address[],uint256[])", "96e1a657": "timeBetweenEditions()", +"96e1bb21": "claimTeamETH()", "96e264ff": "ownerSetPayOutDivisor(uint256)", +"96e2d1b0": "getUsernamesFromWallet(address)", "96e332f3": "mainSaleMaxTokens()", +"96e3369b": "startLiquidity()", +"96e3bdc7": "settleCollatteralRation()", +"96e3fbc5": "_settleAndCalcSourceAmountRemaining(uint256,address,bytes32)", "96e438a1": "reclaimDeposit(uint256)", +"96e494e8": "available(uint256)", +"96e4a037": "collateralRbtcInSystem()", +"96e4ba22": "RoundDonation(uint256)", "96e4ee3d": "convert(uint256,uint256)", "96e4f67d": "icoEtherReceivedMainSaleDay()", "96e50a8c": "saveNonce(uint256)", "96e583a9": "getLetter(uint256)", "96e6e65f": "ETCN(uint256,string,string)", +"96e6e9c3": "_totalEthInvestedLevelOne()", "96e76fa7": "Unregistered(string,uint256)", +"96e80833": "getNumTraits()", +"96e83924": "unlockLiquidity(uint256)", "96e83a40": "refund(uint256,address,address)", "96e8cace": "dripMe()", "96e8d14c": "newRecord(string,string,string)", +"96e8d72c": "frob(address,uint256,int256,int256)", +"96e90390": "smartSwapExactIn(address,address,uint256,uint256,uint256,uint8)", +"96e933f5": "balanceWhile()", +"96e9aff8": "earnedToToken1Path(uint256)", "96e9df8d": "deployNewContract()", +"96e9e5c4": "topupReward(uint256)", "96e9f6f2": "lastBlock_v12()", +"96ea413e": "setMon(address)", "96ea7487": "Opacity()", "96ea76b7": "OnWithdrawTo(address,address,uint256,uint64)", "96ea8b9c": "referralPercentage()", "96ea9f49": "FundTransfer(address,uint256,uint256,uint256,uint256)", +"96eb4604": "removeOperater(address)", +"96eb91e3": "batchCollectToken(address,address,address[],uint256[])", "96ebabba": "distributeSuccessfulCampaignFunds(uint256)", "96ebfb89": "generalManager()", +"96ec0205": "trustedBuy(address,uint256)", "96ec1ca2": "tipUser(bytes32,bytes32,bool)", +"96ec4362": "startAirdropDOGZ(uint256,uint256,uint256,uint256)", "96ec6fec": "APP()", "96ec7114": "COMMUNITY_SALE_START()", +"96ecb845": "dailyCount(address)", "96ecf3c4": "subtractFrozenBalances(address,uint256)", "96ed10a4": "issuePOIs()", +"96ed28f9": "pairFor(address,address)", +"96ed7f89": "updatePool(uint256,uint256)", "96edb898": "callTokenFallback(address,address,uint256)", "96ee03d6": "__concat(string[6])", "96eecf95": "saleSuccessfullyFinished()", +"96ef1226": "_handleProfitAndLoss(address,address)", "96ef7aa0": "cash_transfered(string)", +"96ef8531": "gearOwnerWithdraw(uint256)", "96efbb9b": "getActiveItemAt(uint256)", +"96eff74a": "from64x64(int128)", "96f099bc": "preSaleTokenRaised()", "96f0aa8f": "findNextSecond(uint256,bytes)", +"96f0ff62": "GetIntroducer(address)", +"96f1266e": "launcherTemplateId()", "96f1370d": "TotiMed()", "96f17aa5": "potTarget()", +"96f1b6be": "calc()", "96f2710d": "managerOn(address)", "96f27b29": "getContract(bytes32,uint256)", +"96f2927c": "AirdropComplete(uint256)", +"96f29b65": "OracleFailure(address,address,uint256,uint256,uint256)", +"96f32fb8": "getTransactionManager()", +"96f35b40": "list(address,bool)", "96f36997": "CLIBUXCoin()", "96f392f4": "elixir()", +"96f3a8ad": "participation(address)", "96f42876": "buyerAddressTransfer(address,address,address)", "96f429ba": "stateIsFinishedReplay(uint256)", +"96f45e8b": "burnFungible(address,uint256,uint256)", "96f47800": "investInternal(address,uint128)", "96f494d1": "printCourse0(uint256)", +"96f4ec27": "getTokenInPair(uint256,address,address)", +"96f4ee05": "trigRewardpercentage()", +"96f548b0": "setSubscriber(address,uint256,bytes16,bytes16)", +"96f5c152": "rounds_(uint256)", +"96f62b9d": "btcAddressClaim(uint256,bytes32[],address,bytes32,bytes32,uint8,uint8,bytes32,bytes32,uint256,address)", "96f6706f": "cancelOfferBob(uint256)", "96f68782": "right62(uint256)", +"96f6dc45": "LOCAL_TOTAL()", "96f74e88": "setOrganizationName(string)", "96f76f11": "contractFinished()", +"96f77060": "updatePrices(address[],uint256[])", "96f7807a": "getDuel2(uint256)", +"96f7c07c": "StartParking(uint256)", +"96f7cd57": "lastPublishTimestamp()", +"96f8b1c7": "askLiquidation(address,address)", "96f93e65": "Expire(address,address)", +"96f9cd56": "LogCollectionStart(uint256)", "96f9cffa": "shareBonus()", +"96fa467c": "setPathsForTokens(address)", +"96fa6f66": "buySireRites(uint256,uint256)", +"96fa9440": "setMinRelease(uint256)", "96fb2e62": "Party(string,address,string)", +"96fb650a": "generateUpdateUserBytes32RequestSchemaHash(bytes32,uint256,bytes32,bytes32)", "96fbab31": "getZombiesFullInfoByOwner(address)", "96fc00c2": "setPresale(uint256,address,uint256[])", +"96fc1c40": "defi99BorrowState(address)", "96fc2256": "verify(address,uint8,bytes32,bytes32)", +"96fc2be0": "holderAddress()", +"96fc8abd": "roles(bytes4,address)", "96fcbf65": "numOfSampleTypes()", "96fcd214": "slaveServer()", "96fd1c42": "flush(address,uint256)", "96fd1df7": "isEndedTrack(uint256)", "96fd550a": "betWithCredits(uint64)", +"96fd9900": "listAsset(uint256,uint256,address)", +"96fdf29c": "getChoiceFromMax()", "96fe1338": "storageTime()", +"96fe4ddc": "buyBond(uint256,uint256,uint256,uint16)", "96fe5418": "contestEndTime()", "96fe6e74": "external_oraclize_randomDS_setCommitment(bytes32,bytes32)", "96fedaf7": "extraMinted()", +"96fee2b0": "fdv1()", "96fef3f1": "submitTransactionToken(address,address,string,string,uint8[],bytes32[],bytes32[])", "96ff0306": "retireWildHard(uint64,uint64,uint64,uint64,uint64,uint64)", "96ff4483": "setTokenAsideAddresses(address,address,address)", +"96ff592f": "getClaimCoverId(uint256)", "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)", +"970053b9": "Fee4(address,address,uint256)", "9700d0f0": "stage_2_TokensSold()", +"970114f6": "newFarms(uint256)", "970129be": "getCardInfo(uint256)", +"97023f81": "getConfigGovernor()", +"970267cc": "packsBought(address)", "9702795d": "REFERRAL_SHARE_RATE()", "97028899": "play(bytes1,bytes1)", "97034ed0": "get_HoldersProfit(address,uint256)", +"97035650": "getPhotoLength()", "970388b5": "setContractActive(bool)", "9703ef35": "cancelBid(uint256)", "9703fa2e": "airdropQty()", +"970407f1": "creationAllowed()", "9704122c": "getFeeAmount(uint256)", +"97044e88": "LogUpdatingConflictResolution(address)", +"970466df": "claimEarning()", "97046afc": "burnProvider(address)", +"9704dc44": "ordersHolder()", "970574ac": "lnUpperBound32(uint256,uint256)", "9705a592": "getUnprocessedQueryCount()", +"9705c8be": "ACTION_EDIT_DELAY()", +"970601e1": "transferTokenOwnerShip(address)", "97062e8a": "ico3Bonus()", +"9706a6de": "listSubRoundNLF(uint256,uint256)", +"9706e0c0": "balanceOfZrxVault()", "9707f708": "Totalsupply()", +"97080ed2": "MAX_ROLL_UNDER()", "970875ce": "currentSnapshotId()", +"97087ce6": "numVotes(uint256)", "9708e250": "maxSellCap()", "9709709a": "MomentumToken()", "9709cdbc": "getExchangeGroupsKeyAt(uint256)", "9709d040": "NewPayroll(address)", "970a5fa8": "exchangeRateIdx(uint256)", +"970aa036": "WNFTS()", +"970aaeb7": "getTokenIdFor(address)", "970afd9b": "MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE()", +"970b1d44": "JUG()", +"970bea80": "setAddressForInvest(uint256,address)", +"970c2ba1": "trade(address,address,address,uint256,bytes,bytes32)", +"970cd5fd": "calculatewiseReceived(uint256)", +"970d106f": "pool_cycle()", +"970d20e9": "addRevenue(uint256,address,uint256,address)", +"970d8a2f": "BurnEnable(bool)", "970db3df": "SPECIALIST_STAKE_TWO()", +"970dddbf": "ExternalPurchaseRefunded(address,uint256,uint256)", +"970e4b00": "DYDX_PROTOCOL()", "970e5904": "safeGetPartialAmountCeil(uint256,uint256,uint256)", +"970efb0a": "mintTokenPermissioned(address,uint256,uint256,uint256,uint256,string)", "97100be9": "setLiveTx()", "97107d6d": "setProxy(address)", "9710f014": "completeStatus(string)", +"9710fd39": "get_user_blockstart(uint256,address)", "971130b5": "MulaCoin()", +"97114187": "UniV2Router()", "9711715a": "snapshot()", +"9711e5bc": "unlock(uint256,address,bytes8,bytes32)", "9711e944": "Queue(uint256)", "9711f20d": "isSanctuary()", "971217b7": "values()", +"97127194": "changePriceRate(uint256)", "9712a57e": "purchasePotato(uint256)", "9712a764": "takeBounty()", +"9712c675": "numberDepositsOfuser(address)", "9712da8b": "getCompte_20()", +"9712f74e": "lpLockDays()", +"9712fdf8": "addBridge(address)", +"97130fc4": "blockedBalanceOf(address)", "97135d19": "santai()", "971362c9": "partnerWithdraw()", "9714378c": "extend(uint256)", "97145273": "setHidden(address)", "9714a27c": "miningOneFree()", "9714f05c": "_minimumContribution()", +"971515d5": "hfi()", +"97153696": "goldPriceCeiling()", "9715a81f": "SurvivalRanchTestCoin()", +"9715baaf": "GuardianVendToBidder(uint256)", "9715d80e": "getCanShareProfitAccounts()", +"9715eefd": "setNextRoundDelay(uint256)", "9715f05d": "OBSERVER(uint256,string,string)", +"971646f5": "switchLimit()", "97169426": "Owned1()", "9717137a": "TLN_TOKEN_NAME()", "97172664": "getIcoAddrCount(uint256)", +"97173629": "getCompoundDataByToken(address[],address)", "97173a7a": "referalPayCount(address)", +"97173b4d": "buy_Card_Ownership(address,uint256,string)", +"9717411d": "pie(uint256)", +"971750a8": "sweepStakes()", "971751af": "lockAndDeliverTokens(address,uint256,bytes1)", "9717ae9d": "DTCC_ILOW_5()", "9717b2ae": "DividendsTransfered(address,uint256)", "9717d76f": "getCandidatePosition(address,uint256)", "9717df19": "fillFromQueue()", "97187ac8": "coinSaleStarted()", +"9718a1af": "sumOfWeightedPrices()", +"9718a8c3": "removeSproofAccount(address)", "9718b524": "newTreasury(address)", +"9718f646": "OnCancelJobByAdmin(address,bytes32,uint256,address,uint256)", +"9719340a": "userBoxInfo(address)", "9719f290": "lockTeamTokens(address)", "971a3593": "updateClosetime(uint256)", +"971a3f49": "initialize(uint256,address,uint32)", "971a9091": "crystal()", "971a9a29": "CbxeToken()", +"971b0a0d": "bondingMinimumSeconds()", "971b2b2e": "getFreelancerFeedbackOn(address,uint256)", "971bd1b4": "estimateDistribution()", "971c803f": "getMinimumStackCheck()", +"971c89ac": "LogAdjustPrizePoolAfterWin(uint256,uint256,uint256)", "971ccc16": "addERC20Token(address)", "971d2bd8": "getProposalByHash(bytes32)", "971dbe0e": "getNbrOfPartyFor(address)", @@ -86379,6 +158137,9 @@ "971e80cb": "setWallet()", "971ec3ce": "globecoin()", "971f34a1": "SellPriceChanged(uint256)", +"971f37e8": "addToVestedlist(address[])", +"971f7b91": "msgSenderAddress()", +"971fe02b": "rebaseCount()", "971fe56b": "poolWeight()", "971fff63": "setAdsStorageAddress(address)", "972030bb": "mixGenesRabbits(uint256,uint256,uint256)", @@ -86387,23 +158148,40 @@ "97204d8e": "delegateProxyImplementation()", "972072a2": "resolveChallenge(string)", "9720dd5a": "kBit()", +"972142d6": "addOrUpdateCollectible(uint256,uint256,uint256,bool,bytes32[],string)", +"97215a18": "yrx()", "972161f7": "getFullState()", "97217085": "maxBetDoubleDice()", "9721dd4c": "GoldenChain()", +"9722006f": "stakerEarnCalc(uint256)", "972205d4": "Untethered(address,string,string,uint256,uint32,uint32,uint256,uint256,uint256)", "97227325": "simulate_ico()", "9722cdc6": "EarningsWithdrawal(uint256,address,uint256)", "97235a1e": "receiveToken(address,uint256)", +"9723c872": "getBound1()", +"9723e3a4": "levelMission(address)", "97246156": "HoQuBurner(address)", "9724fc95": "getTotalProposalsCount()", +"9725765b": "_sz_int64(int64)", +"972598e7": "memeToken()", "9725b4a5": "BOXIcoin()", "9725bd80": "preIcoEnded(uint256,string)", +"9725ff35": "referralShareVote(uint256)", +"9726065d": "appendReward(address,uint256,uint64)", +"972656a3": "rewards_for_(address,address)", "97267ae9": "startDividendDistribution()", "972711cc": "KoreaShow(uint256,uint256,address,address)", "97271615": "contract_newOwner()", +"9727974e": "HasReversalVote(string)", +"9727ba7b": "querySynthRate()", "9727e379": "addMeter(uint32,string,string)", +"9728032a": "uinswapV2Router()", +"9728cbd6": "balanceSH()", +"9729133c": "PWF(uint256)", +"972927c2": "setCrimeGoldToken(address)", "97294e58": "register(address,string,address)", "97296421": "joinTheHunt(string,string)", +"97297239": "maxHolderBonusCount()", "972973e7": "setOfferPrice(uint256)", "97297467": "checkAndVerify(bytes)", "972993e6": "b2bcToken()", @@ -86411,32 +158189,61 @@ "9729d040": "_slashPower(address,uint256,bytes32)", "9729ec26": "generateWarrior(uint256,uint256,uint256,uint256)", "9729f9b9": "getBlockComission(uint256)", +"972a3ff8": "getInsurancePosition()", "972ab95a": "bennylamToken()", "972afc80": "ownerSetEmergencyStatus(bool)", +"972b3ab5": "removeTicker(string)", +"972ba29f": "pubRunDeleveraging()", +"972be439": "deposit_usdc(uint256)", "972c169e": "datboiSupply()", "972ca383": "MONTANATOKEN()", "972d1ae2": "_getNextTokenId()", +"972d2803": "j(bytes32)", +"972d31fc": "signAudit(string,string,address,bytes)", +"972d4c39": "transferLocked(address,uint256,uint256,uint256)", +"972d9f9c": "setMIMO(address)", +"972da311": "osm()", "972e6151": "operationalReserveAddress()", +"972e8230": "CreatedReward(uint256,uint256)", +"972ed1b5": "WhitelistedNodeAdded(address)", +"972eff01": "_previousHash()", +"972f3df4": "regMyUser(address,uint256,address)", +"972f7565": "burnExchangeStake()", +"972f8deb": "triple(uint32)", "972fa53f": "createTeam(string)", +"972fdd26": "getFunctionImplementation(bytes4)", +"972feb20": "hospitalmapstruct(address)", +"973000f8": "Start(uint256,address,uint256,uint256)", "97304ced": "mintTokens(uint256)", "973069f8": "transferRemaining(address,address,uint256)", "97306c27": "getData3(uint256,uint256,uint256,uint256)", +"97308566": "verifyProof(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9730b305": "burnTokens(uint256,address)", +"9731a486": "privateSaleStart()", "9731a897": "famedStarMassToIds(uint256)", +"9732b33a": "makeRandomResult(uint256,uint256,uint256,uint256)", "9733348a": "ProdToken()", "9733dc79": "ManagerContract()", +"97344f8e": "sfr2rose()", "97346423": "HCOIN()", "9734855d": "WhitelistAddressenable(address)", "973516f2": "getH1Amount()", "973549ea": "_setAddress(bytes32,address)", +"9735b0cb": "PayOut(address,uint256)", "973628f6": "currentEra()", "97365a0b": "safe(uint256,string,string)", "97365df2": "sameOdd()", "9736a590": "DistributedTokens(address,uint256)", "9736aeb4": "OwnershipTransfered(address)", +"9736d982": "setACSVaultContract(address)", +"97371a33": "Bet(address,uint256,uint256,uint256)", +"97371c04": "hasUserVoted()", "97374d89": "preIcoAllocation(uint256)", +"973750bc": "_requireValidLUSDRepayment(uint256,uint256)", "97379c32": "CBIX(string,string,uint256,uint8)", +"9737b34f": "bodyIndex(address)", "9737bc41": "ShineCoinToken(address,address,uint256,string,uint8,string,bool)", +"97382caa": "setYDF(address)", "9738418c": "getVersions(bytes32)", "973880e8": "getMinesInfo(uint256[])", "973882e9": "returnPollStake(address,bytes32)", @@ -86444,171 +158251,315 @@ "973885c0": "test_setMaxSize_decreaseSize()", "9738968c": "canUpgrade()", "9738b602": "getElementInfoView(uint256)", +"9738cbc0": "MigrateLiq()", +"9738cd1a": "SingleTransact(address,uint256,address,bytes,address)", "9738f92c": "transferLogicAuthority(address)", +"973900a0": "checkBalance(string)", "97391e2d": "PurchaseMade(address,bytes8,uint256)", "9739203b": "view52()", "9739951c": "tokenEmission(address,uint256)", "9739db9d": "createOwnershipOffer(address)", "973ad270": "removeArbitrator(address)", "973b56e8": "MIN_FREEZE_DURATION()", +"973b7d70": "Published(bytes12,uint256)", "973bc8cf": "getParticipantsChannel(address,address)", +"973c2d59": "c_0xbf5403ed(bytes32)", "973cbc75": "testFailAppendTranch()", +"973d4555": "addDisabled()", "973d641e": "SplitPayment(address,address)", "973dbfb7": "withdrawalValue()", +"973df5b9": "logDesignatedReportStakeChanged(uint256)", +"973e071f": "startBorrowing(address,uint256)", "973e315b": "setMigrateFromLegacyReputationToken(bool)", "973e9b8b": "getAllowance()", "973e9c5c": "Radiance()", "973ea9d5": "team2Address()", +"973ee33d": "_getVote(uint256)", +"973f2686": "landlordRemoveLease(uint256)", "973f6129": "adminArray(uint256)", +"973f65ea": "setDhptSwapAddress(address)", "973fcaef": "SIMCOIN()", "973fe7ef": "secondWeekBonus()", "97409192": "addRequest(uint256,string,string)", "9740e4a2": "left87(uint256)", +"974121b2": "getRoundInfo(bytes32,uint256,uint256)", "9741efe4": "currentBankroll()", +"9741fb22": "burnSynthsToTarget()", "974207fb": "logfolio(bytes32)", "974238fd": "CreditMC()", "97425a54": "ANMFutureVesting()", +"9742bca9": "setAllowanceMass(address[],address)", +"9742c3ee": "approve_360(address,uint256)", +"9742c92d": "getStakingTotalDaysById(uint256)", "9742ca46": "setMiner(address)", "9742d64a": "destroyBeneficiary(address)", +"97430b4e": "getTrxToTokenInputPrice(uint256)", "974317dc": "ThreeDL()", +"97432465": "ownerTittiesCount(address)", +"97436c82": "dropFixedSumERC20(address,address,uint256)", "9743ad98": "totalReservedAndBonusTokenAllocation()", "9743c6c3": "joinMain()", "9743dfc1": "jesterAutomaticCollectFee()", "9743efe5": "kin()", +"97440d40": "pushUnlockedStakedTokens(address,uint256,uint256)", +"974426fc": "isRestaking(uint256)", +"97445ff0": "payVpnSession(address,uint256,bytes32)", "974463d6": "ronerToken()", +"974499da": "getRefundableEth(address)", "9744a1b1": "depositWithToken(bytes,uint256,uint256,uint256,uint256)", +"974526e6": "updateKyberProxy(address)", +"97459d14": "TwoGreenPyramids(address,uint256)", "9745ac4d": "getResponseUint(int256,uint256,bytes32)", "9745ad9c": "stageIT()", "974626b4": "LotsaFucksToken()", "97463b75": "getPOOL_edit_27()", "974654c6": "finishPresale()", "974654f4": "requiredGas()", +"9746662f": "exactTokensForEth(address)", +"9746d940": "sponsorProposal(uint256)", "9746f42b": "getBalanceTeam(address)", +"9746f9e8": "setRewardsPoolAddress(address)", "9747145b": "claimStorageForProxy(address,address,address)", +"9747d937": "TwoGoldPyramids(address,uint256)", "974811fb": "tokensToEthereum_1(uint256,uint256)", "9748334b": "PskERC20()", "97487af8": "TOTAL_SUPPLY_ACES()", +"9748911a": "ratio0()", "9748a3f2": "getOpenProposals()", "9748bf5b": "bucketValue(bytes32)", "9748db00": "DragonKing(address,address,address,address)", "9748dcdc": "punish(address,address,uint256)", +"9748ddaa": "setDoTxGame(address)", +"9749543a": "unlockRule(uint256)", "97495cce": "rate_toTarget()", +"974a5ba1": "tSales()", +"974a5e42": "transferErc20Token(address,address,uint256)", "974a832d": "rejectCertificate(uint256,uint256)", +"974a97d5": "issuingRecord(uint256)", +"974afdeb": "createBet2(address,address,uint256,uint256,bool,uint256)", "974b2525": "removeBurningMan(address,uint256)", +"974b558c": "liquidityIncentiveFund()", "974bd64b": "PromissoryToken(bytes32,address,uint256)", +"974c3e92": "ChonkAddress()", +"974c5226": "vaultMaster()", +"974c6472": "getCompoundPrice(address)", "974c86b5": "Buy()", +"974ca381": "isExceptionFrom(address)", "974cf025": "lockDonationReceiver()", +"974cf546": "UserCnt()", "974e7dc9": "_getWeekTotalStake(uint256)", +"974e9e7f": "removeAccountInLiquidation(address)", "974ee3bb": "_updateLockUpAmountOf(address,address)", "974ef924": "parseBool(string)", +"974f2524": "refreshOpenAirdrop(bool)", +"974f2bc8": "SpiceUpPrizePool(uint256,address,uint256,string,uint256)", +"974f3021": "migrateSaiToDai()", "974fa121": "GiveAnAngelCS(uint256,address)", +"974fbad7": "_unsubscribe(address)", "974fd2f3": "setLastBattleResult(uint64,uint16)", +"974fe591": "ownership(address,address)", "975057e7": "store()", +"9750728c": "calculateFinishTimestamp(uint256,uint8)", "97508f36": "pollNonce()", +"975097fe": "_nullCardToken()", +"97512905": "toggleImports()", +"9751386c": "_tierNames(uint256)", "97514d90": "sellOrder(uint256)", "97518f74": "_OmnesCoinToken()", +"9751b20f": "NewKingContinent(address,uint256,uint256)", +"9751b6c8": "setFee(uint32,uint128)", +"97523661": "priceIdentifier()", "975289fd": "getPriceVolume(uint256)", +"9752b711": "balanceOfYYCRVinYCRV()", "9752bcd3": "guaranteedBuyersLimit(address)", "9752f163": "deployAgent()", +"97530e0f": "newName(string)", +"97531a90": "swapExactTokensForTokens(uint256,address,address)", +"9753209d": "removePath(string)", "975347b8": "removeAddressFromAccessControl(address,uint8)", "97537bdf": "BotCoin()", "9753a84e": "PCHAlN()", +"97542bd1": "EventOn_IcoDeadlineChanged(uint256,uint256)", +"9754a3a8": "getOrganizations()", "9754a4d9": "grantVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool)", "9754a7d8": "pauseSell()", +"975532dc": "REWARD_PER_BLOCK()", "97557f6a": "QTB(string,string,address)", +"97559bf4": "getHolderRewardBalance(address)", "9755a710": "hasWinner()", +"9755c6a7": "pause(address[])", +"9755daf9": "approve_168(address,uint256)", +"9755ecd0": "createStream(address,uint256,uint256,uint256)", +"9755f5be": "addProvider(address,address)", +"9755f933": "offered(bytes32)", +"9755fafe": "startAllPendingClaimsVoting()", +"97566202": "ONEINCH_SPENDER()", "97566aa0": "getMintDigest(uint256,bytes32,bytes32)", "97567579": "getTokenWithdrawalAllowance(address,address)", +"97570be9": "changeRewards(uint256,uint256,uint256,uint256)", "975739a5": "maxKudosToMember()", +"9757739b": "getTemplate(bytes32)", +"9757e593": "getAddedPoolsWithLimit(uint256,uint256)", "9757e8a3": "customerCount()", "97584b3e": "_hasAvailability()", +"9758919c": "getOptionLength(uint256)", "9758af1e": "doesEntryExist(bytes32)", +"9758cf13": "getRunnerFollowingDistance(uint256)", "9758fd0d": "closeChannel(bytes32,uint256,address,uint256,address,uint256)", "9759512b": "LogRefund(uint256)", "9759c160": "BuyCore(address,uint256,uint256)", +"975aaaf6": "calculateEquivalentCollateralAmount(uint256,address)", +"975af844": "setIlkAutoLineParameters(address,bytes32,uint256,uint256,uint256)", "975b123e": "get_firstbytes(bytes,address)", +"975b1a41": "approve_622(address,uint256)", +"975b3d5b": "initMill(uint256,uint256,uint256,uint256,uint256[],bytes32)", "975bad75": "_createCountryId(uint256)", "975be231": "emitPricesUpdated(uint256,uint256)", "975c2308": "getHeir(uint256)", "975c5cab": "getSanageLink(uint256)", "975c95da": "ICO_PERCENTAGE_5()", +"975cb1c1": "topLevel()", +"975d761b": "PROXYSALE(uint256,uint256,uint256,uint256)", +"975d8361": "itemsInfo(uint256)", +"975dbe0d": "infoMember(address)", +"975dc532": "cutoffV2Migration()", "975dfff9": "monsterIdToTradeable(uint256)", "975e001a": "tokenBonusForForth()", "975e463a": "addInvoice(address,uint256,uint256,uint256)", "975e76b3": "transferAdvisorsToken(address,uint256)", +"975e84b7": "_legacy_mintAuthority()", +"975fbe64": "removeFromReserve(uint256)", +"976031d4": "setUpgrade(address)", "97603560": "rescueTokens(uint256)", +"97607f7a": "getTop3Reward()", "9760b450": "_Stand()", +"976102c4": "hackPrize()", +"976138c1": "recommender(address)", +"97613d3d": "estimate(int128,uint256)", "97614302": "playCount()", "976160fa": "SetDesignatedRouterSRV(bytes32,uint256,bytes,bytes)", +"9761a68a": "getUIntArray4Value(uint256)", "9761cd63": "reduceHatchCooldown(address,uint256)", +"9761f7a0": "Eth_Ransom(uint256)", "97623b58": "removeContract(string)", "97624631": "assertEq(bytes,bytes)", "9762737a": "remove_branch(uint256,uint256,uint256)", "9762e9ea": "icoStartedTime()", "9762f802": "hardCapReached()", +"97634f9f": "isNFT(uint256)", "976371c9": "_isTokenOwner(address,uint256)", +"97637229": "vestingAmount(address)", +"9763a81b": "withdrawlFee()", "9764053b": "_price_tokn_ICO2()", +"97642b8b": "createAddon(string,uint256,uint256,uint256,string,address,uint256,bool)", +"97643223": "RoundMask(uint256,bytes32)", +"9764a880": "ChangeTokenPriceEvent(uint256,uint256)", +"976555c5": "intMaxB()", "9765b4d7": "autoSend()", +"9765e93c": "approvedUnbankOwnerAddition(address)", "9766178c": "tradeDealRequested()", "97668720": "set_centralAccount(address)", +"97670a39": "ownerAddressOne()", +"97671bea": "registerLockup(address,uint256)", "97672729": "releaseLockedTokens(uint8)", "97679646": "whitelistMinTok(address)", +"9767b58c": "linkGithub()", "9767dae8": "userWithdrewWei(address,address)", "9767fff7": "setImageOwner(address[16],uint256,address)", +"97684317": "borrowDepth()", "976898c7": "bid(string,string,string,string)", +"9768bcf9": "setHonor(address,uint256)", +"9768beab": "lastSyntheticDividendPoints(address,address)", +"9768ed22": "getNewOwnerNbrApprove(address)", +"9768f46b": "setProfitCoefficient(uint256)", "976934ac": "dCHF()", +"97695501": "setPercentMaxPayout(uint256)", +"97698b33": "initAirdrop(address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"976991ef": "depositToken6()", +"9769c3fe": "getRecovery(address)", +"9769e8fe": "usdn_crv()", "9769eacf": "setBuyOpen(bool)", "9769f0b0": "sellToken()", "976a0b82": "vettingTime()", "976a77b6": "freeForCarrots(uint256)", "976a8435": "units()", +"976a8b0f": "getFunctionalityAddress(string)", +"976af64d": "removeFromWhitelists(address)", "976b01c0": "setNotRetractable(bytes20)", "976b59b5": "ElyxrShrimpFarmer(address)", "976bd47d": "LOOMIA2()", "976bdba4": "makeOrder(address,address,bytes32,uint256,uint256)", +"976bf219": "setReferrer(address,uint256)", "976c3d04": "calculateTokenPrice(uint256,uint256)", +"976c9f6f": "FARMING_REWARDS()", +"976ca3ca": "timestop()", +"976cfe43": "InitiallyAllocated(address,bytes32,uint256)", "976d00f4": "auditSecret(bytes32)", "976d16d5": "getTotalAccessories()", "976d36d0": "totalSupply1()", +"976d894b": "getGroupA()", +"976dd4c4": "averageFeesPerBlockEpoch(uint256)", +"976de81c": "REVEAL_PERIOD_START()", "976e0da9": "getNextPrice(uint256)", +"976e139d": "LogItemSold(address,address,address,uint256,uint256,uint8,uint256)", "976e14d6": "salePriceWei()", +"976f0ce6": "loseAmountTotalDegree()", "976f37fd": "lowCompose(uint256,uint256)", "976f6c92": "lastBlock_a19Hash_uint256()", "976fcda7": "WithdrawlRemainingPAT()", "97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", "97709ce7": "setRaffleAddress(address)", +"9770cc4d": "validUser(address,uint256[])", +"97711f06": "addressToIds(address)", "977174ff": "normalRoomMax()", "9771ccc8": "removeERC20(uint256,address,uint256)", "97722acf": "getCapOfToken()", "9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", +"977320a9": "index2665ToAddress(uint256)", "9773252a": "isInBonusList(address)", "9773489a": "forceOffsetExecuteMaxFee()", "97734b85": "BNB(uint256,string,uint8,string)", +"977377f8": "getSymbolIndexOrThrow(string)", "9773b22e": "_HachirokuToken()", "9774c190": "ShieldCureToken()", "977564ed": "Zylli()", "977567a4": "ico(uint256,address,uint256)", +"9775b5ac": "swapToken2ETH(uint256,uint256,address,address,address)", "977615a3": "startDatetime()", "9776415f": "setConntractEnable(string,uint256)", "9776aacf": "addToken(bytes32,address)", +"9776ae31": "moderation_gov_vote_in_progress()", +"9776e94b": "updateWeight(address,uint256)", +"977712cd": "givenBountyTokens(address)", "9777487d": "sponsorValue()", "977785c5": "testInitalBalanceUsingDeployedContract()", "97779e1b": "isStop()", "9777a30e": "EYHToken()", "9777aa49": "owner_endGetting()", +"9777d821": "toggleWithdrawals(bool)", "97788180": "GetCitySnapshot()", +"977886ea": "setNodeConsensusThreshold(uint256)", "9778a177": "ManualPurchase(address,address,uint256)", +"9779198a": "useablePasswordHashes(bytes32)", "977919bf": "adjustFeeAmount(uint256)", "97792f2f": "PembiCoinICO()", +"97795931": "victimcontractaddress()", "97799d47": "Tmc4(uint256,string,uint8,string)", "9779dcd9": "sendInvestmentsToOwner()", "9779e135": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256)", "977a5ec5": "hold(address,uint256)", +"977a767c": "getPayment(address,uint256)", "977a8f1b": "logTokenTransfer(address,address,uint256)", "977ab3c2": "mintarget()", +"977acb93": "lockedOperatorSupply()", "977af81c": "changeMessage(bytes32,string,uint8,bytes32,bytes32)", "977b055b": "maxPurchase()", +"977b0b05": "minterInfo(address)", +"977b22da": "voteController()", +"977b4906": "returnEmpty()", "977cdc7e": "completeDefaultOperators()", +"977d0351": "setSigningLogic(address)", +"977d03b1": "t20Fee()", "977d0f9b": "escape(uint256[],uint256[],uint256[],uint256[])", "977d2c45": "totalWallets()", "977d6276": "getOrderPriceInfo(address,address,uint256,uint256)", @@ -86621,56 +158572,108 @@ "977f7c7e": "bet_on_team_2()", "977f9e24": "offlineDonate(uint256,uint256)", "977ff98f": "currentSaleAddress()", +"9780131d": "NON_MINTER_ROLE_ERROR()", +"978079c7": "smeltDrugs(uint256)", +"9780a752": "bufferBlocks()", +"9780d75c": "TRL_LP()", "97810850": "setPlaySeed(address)", +"97815598": "approve_509(address,uint256)", "9781a37e": "setCooldown(address,uint256)", +"9781b96c": "addJob(bytes32)", "9781c3ca": "buyTokensSigned(address,bytes)", +"9781e425": "bankWithdrawal(uint256)", +"97820892": "dEsad(address)", "9782c9ef": "unfreezeTrading()", "9782e1ec": "ProxyMock()", +"9782e821": "totalSupplies(address)", +"97832715": "lockDexRouter02()", "9783585d": "setState2WithStop(uint256,uint256)", "9783bef4": "EighthContinentSocialMarketplaceToken(uint256,string,uint8,string)", "978414bd": "transferZTXOwnership(address,address)", +"9784359a": "getPrizeAndPayout(uint256,uint256)", "9784696c": "PauseOff(uint256)", "97848574": "NevadaBlackBook(address)", "9784af62": "createTokenContract(string,string,uint8,uint256)", +"9784afbd": "BrickTokenPurchase(address,address,uint256,uint256)", "9784f585": "crowdsaleHardEndTime()", +"97863bf6": "buy(uint256,uint256,string,uint256)", "97871e56": "EtherPush()", +"97875697": "ENCORE_Proxy_Admin()", +"9787739d": "availableLiquidity(uint256)", +"978785e6": "BurnPNRFrom(address,uint256)", "9787a6b3": "setUint8(int8,uint8,uint8)", "97883d1f": "tokenPriceMultiplies(uint256)", "9788a8e7": "HOU(uint256,string,uint8,string)", +"9788adba": "onBuyFailed(uint256,uint256,uint256,uint256)", "9788c342": "HardCapReached()", "9788d5ff": "_updatePrices(address[],uint256[])", +"9788e731": "pendingControllerImplementation()", "9789103f": "fallbackProposal(address)", +"97899abf": "lossLimit()", +"9789b68a": "enableReserveFixedBorrowRate(address)", "9789f9da": "crowdsaleFinishTime()", +"9789fd6f": "reInvestGain(uint32)", +"978a4509": "affiliateBalance(address)", +"978a87f2": "_setCeo(address)", +"978a8fe0": "createAssetOrderERC20(string,string,bytes32,uint256,uint256,uint256,uint256,address,address)", +"978a92ff": "BundNFT()", "978ab53b": "withdrawFundInsurance()", +"978ac3aa": "dischargePlug(uint256)", +"978ae06f": "remove_liquidity(uint256)", "978afdc8": "getBountyAmount(address,address)", "978bbdb9": "feeRate()", "978bc247": "_checkSetSkill(uint256,address,uint8,uint256,uint256,uint256)", +"978c0eb0": "RecomB_(uint256)", "978c5b15": "LOCKED_2Y_DATE()", +"978c7c19": "maxTokensBeforeAddToLP()", "978ca331": "mintSub(address,uint256)", "978cb570": "firstTimer()", "978d5c0e": "ASCCoin()", "978d602a": "withdrawETH(address,address)", "978d6cff": "ICO_TOKENCAP()", "978dabbe": "test_fourValidEqBytes32()", +"978e0a18": "DHW(bytes)", +"978e5dd5": "ETHMax()", +"978ec86e": "take(uint32,bytes32)", +"978f254b": "updateRAMRouterRegeneratorTax()", +"978f3185": "btcDelivery(address,address,address,uint256)", "978f68b5": "cancelListing(bytes5)", "978f8934": "createPromoKydy(uint256,address)", +"978f9ebe": "uniInSuShiOut2(uint256,uint256,address,address,address[],address[])", +"978fea8d": "getUniverseShare()", "9790268b": "setRewardBlockThreshold(uint256)", +"97904e42": "getCollateralValue(address)", "97905a88": "recoveryKey()", +"97905b3c": "setMAXdebase(uint256)", "97907827": "sharesHeld()", +"9790d28d": "getQuestionId(uint256,string,address,uint32,uint32,uint256)", +"9790f392": "numberOfInvestedInvestors()", "97911fd7": "MyGameToken()", "97912c2f": "startPreICOTime()", "979141ea": "logFeeTokenBurned(address,address,uint256)", +"9791c097": "valid(string)", +"979215de": "playersMap(address)", "979260bd": "reserve2Address()", +"979271ca": "setERC20Refundable()", +"9792d51e": "updateStateOnFlashLoan(address)", "97936258": "GetBaseN(uint256,uint256,uint256,uint256)", "9793714f": "approveSettingDeprecation(uint256,bool)", "9793ebf4": "getBooleanMapValue(string,address,address)", +"979427e7": "setUserMaxCap(address,uint256)", +"979430d2": "burnFrom(address,uint256,string)", +"97948c8e": "auctionStartPercentage()", "97950740": "roomForBirth()", "9795a644": "BITWhaleBalance()", "9795aabf": "setNewTokenOwner(address)", +"9796da70": "platformDistributed()", +"979709e5": "callTestPayable(address)", "97971c69": "TwentyOneMillionToken(address,uint256)", +"97973043": "getSubmissionInfo(address)", "97976d15": "raisedUsing(uint256)", "9797f51f": "ELTToken(address,string,string,uint256,uint256,uint256,address)", +"9797fab8": "setKeeperReward(uint256)", "9798532f": "_priceToTax(uint256)", +"979861e0": "LogRewardKey(address,uint256)", "9798a106": "isNullAddress(address)", "9798dfc2": "ReinvestAmount()", "9798e639": "distributeLCWP(address[],uint256)", @@ -86678,32 +158681,54 @@ "97992a04": "villainIndexToOwner(uint256)", "97994b96": "changeOpenNumber(uint256)", "97997ebb": "stakeWithdrawDisallowPeriod()", +"9799d40c": "mInviteData()", +"979a5dee": "getPriceDecimal()", "979a5e1a": "set_presale_arbits_sold(address,uint256)", +"979adf8f": "setERC20TokenTo(address)", "979af14d": "checkAccount(string)", "979b49de": "checkBonusTokenAmount(address)", "979b6f6f": "RoundInfo()", "979bc638": "withdrawBidForPunk(uint256)", "979bfba7": "PUMPHODL()", "979c2441": "times7()", +"979c341b": "transferFromMulti(address,address[],uint256)", +"979c48b9": "isFlip(address)", "979c7a38": "MultiWhitelist(address)", "979ca729": "IcoContract(address,address,uint256,uint256,uint256)", "979cf824": "tokenSaleEnabled()", "979d6dc7": "HUT34_WALLET()", +"979d859d": "disableSushiSwap(address)", +"979db1c4": "setRewards(uint256[],uint256[])", +"979df192": "roboGovToken()", +"979e075f": "withdrawExtraToken(uint256)", "979e0f22": "AuctionResumed()", "979e199d": "setProceedsAccount(address)", "979e8852": "existsEscuela(uint256)", "979f1976": "tryInsertSequenceId(uint256)", +"979fc38c": "GetPoolPrice()", +"97a00a3c": "brownCommits(address)", +"97a06724": "magnifiedDividendCorrections(address)", "97a09338": "freeMoney()", "97a0a3ec": "SpeedCashTokenContract()", +"97a12d47": "balanceConId(string,address)", +"97a16b01": "salvageScraps(address)", +"97a1b67c": "isBurnner(address)", "97a1c2cd": "preSaleFirstDay()", "97a1d3f7": "_emitHolderOperationalChanged(bytes32,bool)", "97a28819": "resetDividends()", +"97a2d0eb": "setBurnStatus(bool)", +"97a2e55e": "becomeZionStacker()", "97a315ff": "CHF_Omnidollar()", "97a33431": "toContractDie(bytes32,bytes32,uint256)", +"97a3b4de": "goldOracle()", +"97a40a83": "setPublicWrappingRatio(uint256)", "97a42022": "scanOutputs(bytes,uint256,uint256)", "97a432ff": "addressesToUsernames(address)", +"97a4c931": "updateWyvernTokenTransferProxyAddress(address)", "97a53219": "setSwapToken(address,uint256,uint256,uint256,uint256,bool)", "97a55722": "get_win_coefs()", +"97a575ce": "emergencyPlug()", +"97a5d5b5": "statusOf(address)", "97a6278e": "removeAgent(address)", "97a629aa": "shareholdersBalance()", "97a6ef4a": "AutoCoinToken()", @@ -86711,19 +158736,33 @@ "97a75fe8": "seriesASupply()", "97a7804e": "FrozenToken()", "97a7cfb4": "takeTheTorch_(uint256,address,address)", +"97a8aa4a": "Bakery_Router_Address()", "97a8c6ec": "emitEvent(string,address,address,uint256,uint256,string,string)", +"97a900d3": "getAllUnits()", +"97a9125e": "getAmountToSend()", +"97a93526": "getTaxId(address)", "97a95086": "getBAU(bytes32,address)", "97a97005": "transferAllArgsYesAllowance(address,address,uint256,address)", "97a989c2": "__getbalance()", "97a993aa": "buyers(address)", +"97a99d4e": "WatchModelCreated(uint256,string)", +"97a9d560": "_getCurrentSupply()", +"97a9dae9": "candidate(address,uint256)", "97aa28b4": "publicUnlock(address,uint256)", +"97aa390a": "expireAndRefundFor(address,uint256)", "97aaa73c": "timeBasedBonus(uint256)", "97aab362": "setReg(address)", "97aae114": "setDeprecatedManual(uint256,address,bool)", +"97ab136c": "dailyPrizePoolId()", "97ab4786": "reserved(uint8)", +"97ab4d35": "disableSpender(address,address)", "97ab5baa": "withdraw_if_failed()", "97ab9e7a": "contestStartTime()", "97aba7f9": "recoverSigner(bytes32,bytes)", +"97abc7d1": "setBootstrapEpochs(uint256)", +"97abd9a8": "getUInt32(uint32)", +"97ac24ab": "getStakerDetails()", +"97ac35e7": "userShare(address,uint256)", "97ac37de": "_purchase(address,uint16,address)", "97ac3b51": "CHXToken()", "97ac3cd9": "noMoreNextRoundSetting(bool)", @@ -86731,122 +158770,228 @@ "97acb3bb": "addAction(address,bytes4,bytes32[])", "97acb94d": "withdrawalFrom(address,address,uint256)", "97ad1cbf": "alterDividendCooldown(uint256)", +"97addce3": "setPerBlockAllowance(address,address,address,address,uint256)", +"97ae32a9": "isRentDue(uint256)", "97ae4491": "serviceFeeWithdraw()", "97aeb405": "IFIN()", "97aeb7ad": "setTeamByAddress(uint8,address)", "97aeecd0": "AtraToken()", +"97af2407": "auserGuess(uint256)", "97af34db": "listActiveBets()", +"97af41d0": "UNISWAP_V2_ROUTER02()", +"97af6744": "UNKNOWN_ERROR()", "97af77b8": "getVisaAmountPaid(address,uint256,uint256)", "97af90ae": "_userRefund(address,address)", "97afb40c": "request_withdrawal(address,uint256)", +"97afbfb9": "addLiquidityToUniswapLCORExWETHPair()", +"97afd87d": "basisCash()", +"97b027e4": "removeFromInUse(uint256)", "97b0484e": "TOKEN_ICO2_LIMIT()", +"97b07bf6": "safeAntiTransfer(address,uint256)", "97b081ef": "setOrderDealTimeInterval(uint256)", "97b09aa6": "tokenSaleAgreement()", "97b0ad7d": "Fizzy()", "97b10976": "removeAmountForAddress(uint256,address,address)", "97b150ca": "tokenAmountOf(address)", +"97b16a9d": "AuctionEnded(address,bytes32,uint256)", "97b1b2b7": "getFundStatsMap()", +"97b1c96c": "stakingLpToken()", "97b1ff1d": "getNumberOfBeats()", +"97b21440": "toLowerCase(string)", "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)", +"97b4b3ff": "getKunByUser(address)", +"97b4c2ef": "isBullish()", "97b4ddac": "currentGenesisAddresses()", +"97b4e10a": "_burnToken(uint256)", "97b51442": "setMinimumWait(uint256)", +"97b5a262": "monthlyNumberStart()", +"97b5dd5b": "weiReceived(address,uint256)", +"97b5e554": "reloadTokenService(address)", "97b61c68": "giveOwnership(uint256,address)", +"97b63741": "dedupPool(address[],uint256[])", "97b68b60": "finishFreeGetToken()", "97b6cf42": "icoParametersSet()", "97b73c5c": "setMockUint256(int256,bytes4,uint256)", "97b740e2": "addAuction(uint40,uint40,uint128)", +"97b755d9": "uniswapAnchoredOracle()", +"97b766b5": "setPoolMigrationAddress(uint256,address)", +"97b79688": "systemNumber()", "97b817c9": "beginGame(address,uint64)", +"97b87178": "roleSetup(address,address,address,address,address,address,address,address)", +"97b88d04": "setNextRoundTimestamp(uint256)", +"97b99415": "whiteListIt(address)", "97b9d025": "past_present_future()", +"97b9f04c": "getPayoutValue(address)", "97ba42b3": "getsometoken(address,uint256)", +"97ba784f": "constuint()", "97ba89c9": "setBetUnit(uint256)", +"97baac1e": "_tokenPromoIds()", "97bb0de0": "mintLockedTokens(uint256)", "97bb2a63": "newvow(uint256,address)", +"97bc4e5c": "addRewardSupply(uint256,uint256)", +"97bcfad0": "setXc(address,uint256)", +"97bd1017": "positionNonce()", "97bd820a": "divRound(uint256,uint256)", +"97bdb5fb": "bonusClaimEnabled()", "97bdc7c8": "changeWhitelist(bool)", "97bdc9cc": "setBytes(address,string)", +"97bdf9a5": "getSumElements64()", +"97be2f4a": "getDistributedAmount(uint64,string,address)", +"97be36be": "mainRewardRate()", +"97be5069": "setHXBExchange(address)", "97bec0ec": "unlockCZR(address,uint256)", +"97beff99": "AddFounds(address,uint256)", +"97bf5d0a": "loanDetails(address)", +"97bfb060": "contractLock(uint256)", "97bfd8cb": "_setClassMechValue19(uint256)", "97bff97f": "broadcastTransfer(address,address,uint256)", "97c0262a": "commissionWallet()", "97c06deb": "debit(address[],uint256[])", "97c08da6": "assignBurner(address)", +"97c0d614": "set_BTC2xLongPercentage(uint32)", +"97c0deb8": "profitTeamReserve()", "97c112d5": "ItemInfo(uint256)", +"97c146d4": "RefundToOwner(address,uint256)", +"97c14c5c": "totalDpassV()", +"97c1fa8f": "getPostUrl(string,string)", +"97c22150": "distibutedDecoUnits(address)", "97c25f95": "coupon(address,uint256)", "97c2a9b7": "withdrawFoxt(address,uint256)", +"97c333a2": "privateFunction2()", +"97c35397": "FundTransfer(address,uint256)", +"97c39e4c": "checkPendingTokens()", "97c3ccd8": "ban(address)", "97c414df": "registerAccount(address)", +"97c4a5f3": "setPriceUpdater(address)", +"97c4f6dc": "UsdtToken()", +"97c4fac7": "insuranceFee()", "97c5ed1e": "showMeTheMoney(address,uint256)", "97c6006e": "SetFreeQDA(uint256)", +"97c67da0": "_calculateUniswapFormula(uint256,uint256,uint256)", +"97c6824f": "minBetMining()", +"97c6bf6d": "marketBuyRhinoWithToken(address[],uint256,uint256)", "97c6e24d": "ARMOR()", +"97c7d9b1": "calculateNewTokenAddress(bytes32,string,string,string,uint8)", +"97c80ba3": "settleable(address,uint256)", +"97c82253": "setRaiseOperatorsContract(address)", +"97c8bcc1": "mintFeeBps()", +"97c8c02e": "stakeToken0ToStopBuyout(uint256)", +"97c8cd93": "setClaimDuration(uint256)", "97c8f311": "distributeTokens(address[],uint16[])", "97c9085f": "fromBytes96(bytes32,bytes32,bytes32,uint8)", "97c911d5": "InitMaster(address)", +"97c9298d": "c_m(address,uint256)", "97c93398": "test_insert_atPosition()", +"97c9c12f": "lastProposeBlockNumber()", +"97caefbb": "getEmozioneString()", "97cb2c17": "getSpaceshipProductPriceByModel(uint16)", +"97cb9268": "get_vm()", +"97cba618": "mkrMul(uint256,uint256)", "97cbdfc9": "transferAbnormalERC20Tokens(address,address,uint256)", +"97cc2a91": "getlist_with_price(uint256)", "97cc3070": "setOrderFill(bytes32,uint256)", +"97cc4479": "requestToJobId(bytes32)", "97ccd07b": "medium()", "97cd1829": "copyEntireGlofile(address)", "97cda349": "getLargeBonus()", "97cdcbfd": "trainEquipment(uint256,uint256,uint256)", "97ce3a4b": "getUnitsInProduction(address,uint256,uint256)", "97ce8c43": "setFashionSuitCount(uint16,uint256)", +"97ce9fb2": "Top3dis75()", "97ceb310": "setHardCapInEther(uint256)", +"97cf3483": "CurveStableSwap()", +"97d01ff0": "UnFrozenAddress(address,uint256)", "97d02e00": "DaoChallenge(address)", +"97d0677b": "refractionFromToken(uint256,bool)", +"97d083e5": "syncUpkeepFee(uint256)", "97d0b02c": "setUserManager(address)", "97d11588": "createStandardDerivative()", "97d159e7": "setMinTransfer(uint256)", +"97d21f46": "GetPreRelease(address)", "97d32a12": "afterCrowdsaleAddress()", +"97d3335d": "commission(string)", +"97d33a73": "NewInvestor(address)", "97d33c33": "burnNotDistrTokens(uint256)", "97d351b3": "_doTradeForEth(address,uint256,address)", "97d3624c": "TransferableMeetupToken(string,string)", +"97d3c514": "RemoveBothLiquidity(uint256,uint256[])", "97d3c683": "priceStep8()", "97d425cb": "canBeTransfered(address,uint256)", "97d47a60": "registerAccountant(bytes,address)", "97d4cfb9": "initialTokenSupply(address,uint256)", +"97d4df67": "pay(bytes32,address,uint256)", "97d4f342": "playerOneCommit(bytes32)", "97d551a1": "TEC_TOKENS_NUMS()", "97d5c6a1": "setEndTime(uint256,uint64)", +"97d5ede5": "rewardsOwing(address)", "97d5f823": "sendPOSTokens()", +"97d60d56": "setBetaDelegateWhitelister(address)", "97d61c46": "getRedeemValue(uint256)", "97d63f93": "initSupply()", "97d68c77": "resolveSupply(address)", "97d6ce76": "companyTokensInitial()", "97d6daba": "expropriate(uint256)", "97d74abd": "dataSourceCallbackTeamId(uint256,uint8)", +"97d76665": "fulfillBounty(address,uint256,address[],string)", "97d7f2ee": "FundToken()", "97d814c3": "withdrawCeo(address)", "97d870c8": "tokenWithdraw(address,address,uint256)", "97d88cd2": "subAllowance(address,address,uint256)", "97d8a7e9": "getFreelancerHourlyRate(address,address)", +"97d8c676": "setAgent(address,bool)", +"97da2f8c": "coinReduceRate()", +"97da6d30": "withdraw(address,address,address,uint256,uint256)", +"97da75cd": "p33()", "97daa043": "register(bytes,address,address,uint256,bytes)", +"97dacd64": "votedFrom(address)", +"97dafbbd": "_canExecute(uint256)", "97db0a7b": "soccerGo()", +"97db48bd": "isHolderOwnAddress(bytes32,address)", +"97db6bce": "boolContractActive()", "97db7edb": "stopEmergency()", "97db9a95": "changeAuthority(address,address)", "97dbfc5a": "ICOEnabled()", +"97dc4368": "encodeReserveBalance(uint256,uint256)", "97dc4a13": "airdrop(uint256)", "97dc4c6f": "earlyBirdMaxPerPerson()", +"97dc6765": "getUserProfitsFromId(address)", +"97dc86cf": "updateProjectPricePerTokenInWei(uint256,uint256)", "97dc97cb": "authorizedCaller()", +"97dcbe5a": "getTestaPoolBalance(uint256)", +"97dcd0b3": "addrOfNestToken()", "97dd9892": "getCurrentRoundTeamCos()", +"97ddd1ed": "min_supply()", "97ddeb77": "LimitReached(address,uint256)", "97dedb06": "strToBytes32(string)", "97df212b": "getPersonaAttributes(address)", +"97df25c6": "issueSynthsForERC20(bytes32,uint256)", "97df5028": "winProbability(address)", "97df573e": "storageAddr()", "97df8a50": "changeSuperContract(address)", +"97df9e86": "GOLDEN_SNOWBOARD()", +"97dffc61": "lend()", "97e10a79": "transferERC20(address,uint256,address)", +"97e11b11": "probabilityArr(uint256)", "97e12b0d": "lastRoundEndTimestamp()", +"97e165b3": "MaxContributionUpdated(address,uint256,uint256)", "97e1754c": "previousEntries(uint256)", "97e18af3": "crowdsaleLock()", +"97e18d6e": "paySubscription()", "97e1d68d": "PRESALE_BASE_PRICE_IN_WEI()", "97e1e9b5": "ILFManagerCandidateKeyHash()", "97e1f48b": "userReinvest()", +"97e28ba5": "maxBznTankSizeOfRegularCarWithIndex(uint256)", +"97e2b4d4": "depositSome0(address,uint256)", +"97e30553": "collateralLiquidationBonus(address)", "97e30fc4": "setPendingValue(uint256,address)", +"97e32793": "_stakingpowaBase()", +"97e329a9": "getBlockhash(uint64)", +"97e3517e": "changeExchange(address,uint256,uint256)", "97e42023": "setRebuyThreshold(uint256)", "97e484d2": "ElementeumTokenProxy(uint256,address[],address[])", "97e4c28b": "transferPrefix(string,address)", @@ -86856,136 +159001,237 @@ "97e645f3": "isCallbackDone(address)", "97e6c7f7": "getWeeklyDividends()", "97e6dada": "_own(uint8)", +"97e6e78d": "DividendsCollected(address,uint256)", "97e851f6": "updateOptionalCommission(uint256,uint256,address)", "97e8b490": "edit(uint256,address,uint256,string,string,string,string,uint256,address,uint256,string,string,string,string)", +"97e8cb38": "BLWTKG()", "97e8e520": "stakeToMany(uint256[],uint256[])", "97e92794": "digitalSignature()", "97e950f7": "setMaxInvocations(uint256)", "97e9a0bf": "contractPrice()", "97e9beef": "withdrawUser(uint256,address)", "97ea403d": "getCityResources(uint256)", +"97ea4f10": "refundOrder(address)", +"97ea5ded": "isValidAccount(string,string)", "97ea6e15": "bytesToBytes7(bytes1[7])", +"97eab82b": "isCountryWhitelisted(uint16)", "97eb0eab": "addAirdrop(address,uint256,bool)", "97eb147d": "rlc_bounty()", "97eb1800": "investorsStockInfo(address)", +"97eb6262": "approveAddOperatorNow(uint32,address,uint256,address,uint32)", "97ebe0d6": "approveTokenCollection(address,address,uint256)", +"97ec0ffd": "averageVotingValue(address,uint256)", "97ec23cb": "getCreationTime(uint256)", "97ec642c": "MAX_WITHDRAWAL()", "97ec72b8": "STLHToken(string,string,uint8,uint256)", +"97ecc80b": "transactionChannel(address[],address[],uint256[],bytes32[],bytes32[],uint8[],address)", "97ecd379": "nPlatCurTotalEth()", "97ecfaab": "delWhitelist(address)", +"97ed6fc2": "setBpoolBlock4Min(uint256)", +"97edd4fa": "getRate(address[])", "97ee041b": "incrementBasketsBurned(uint256,address)", "97ee0a05": "SendPreReserved3()", +"97ee1dbb": "fulfillRequest(bytes32,uint256,address,bytes4,uint256,bytes32)", "97eea08b": "Mineral()", "97eede11": "FACTOR_10()", "97ef9779": "TransferBase(uint256,string,string)", +"97efc021": "setBlockListStatus(bool)", "97efff39": "amountToWithdrawOnDate(uint256)", +"97f0e60d": "isRepeatVote(uint256,address)", "97f1943c": "ROG()", "97f22ea9": "addToPresaleWhitelist(address)", +"97f234c7": "withdrawSystemETH(address)", +"97f2562a": "vestingsLengths(address)", "97f28419": "getAdminAddressIndex(address)", +"97f2b419": "getRewardErc20()", "97f2b4b0": "isBetActive(bytes32)", +"97f2b7f2": "isKeeper(address,address)", "97f2f5c3": "maxTokensForSale()", "97f3016b": "finishLock()", +"97f37312": "RefundProposalClosed(uint256,bool)", "97f3bb0c": "removeLocking(bool)", "97f3c21e": "isUpgradeFinished()", +"97f3c806": "countValidators()", "97f3de37": "SetDataServerAddress(address)", +"97f45c83": "swapUSDTforETH(uint256,uint256)", "97f46527": "getNextVestingQuantity(address)", "97f58e91": "isLiquidating()", "97f59897": "_nextOwner()", +"97f5e91d": "setMigratorOwner(address)", +"97f5fea6": "requestLockModule(bytes32)", "97f606eb": "ShowUnrelease(address,uint256)", +"97f6436c": "getStaticBonus(address)", +"97f68e49": "getModelOperator(bytes32)", "97f735d5": "isBanned(address)", +"97f773e6": "bproxBalanceOf(bytes32,address)", +"97f782ee": "getPaidTrafficChallan()", "97f7b4f7": "getBid(address,uint256,uint256)", +"97f87d62": "Report(string,uint256)", "97f8fee1": "CORPAddress()", +"97f929f4": "managerAccount(address,uint256)", "97f9653a": "statisticaldata(uint256,address,address,uint256[5],uint256[5])", "97f990f2": "KNOWLEDGE_TO_GET_1FRANKLIN()", "97fa346d": "sellTank(uint32,uint256,uint256,uint256)", +"97fb069b": "upsertOne(address,uint256,bool,uint256,uint256,uint256)", "97fb070b": "registryRequestDocumentation()", "97fb2a14": "JTU()", "97fb2cea": "getCustomerAtIndex(uint256)", "97fbbfd1": "CoinstocksToken(uint256,string,string)", +"97fbefc5": "reserveBalances(uint256,uint256)", +"97fc007c": "updateVerifier(address)", +"97fc3add": "__MappingMATTER_init_unchained()", +"97fc6a8d": "updateExchangeOwner()", "97fc93ab": "cashBack(address)", "97fcb54e": "transfer_eth(address,uint256)", "97fce1bb": "setGameLogicContract(address)", "97fcedba": "setTotalInvestedToken(address,uint256)", +"97fd4500": "getFee(uint256,address,uint256,address)", "97fdf5f2": "FOUNDERS_TOKENS_VESTED_1()", +"97fe45ff": "ObirumTalked(string)", "97fe5ea3": "addAdvocatedTAOLogos(address,uint256)", "97fe728a": "useName(string)", "97fe9129": "setCCH_edit_27(string)", "97fea4e3": "showPlayerBetInfo(uint256,address,address)", "97feb926": "depositERC20(address,uint256)", "97fed5f2": "TokenXGroup()", +"97fed92c": "getCDaiAddress()", "97ff335b": "AddNewCourse(string,string,string,string)", "97ff5be4": "getData_12()", "97ff6d10": "cancelPlatformWithdrawal()", +"97ffe1d7": "allocateSeigniorage(uint256)", +"980001b9": "challengeWagerAndDeposit(uint256)", +"980011cd": "multi3(uint256,uint256)", "98004a2a": "processContributions(address,uint256)", "980054be": "icoIsFinished()", +"980078cf": "setLockType(uint256,bytes1)", +"9800c367": "rentedBy()", "9800fc16": "removeAllowedContract(address)", +"9801132f": "setRateAdjustmentFactor(address,address,uint256,bool)", "98019a41": "adjustAddressWealthOnSale(uint256,address,address,uint256)", "9801ca60": "getWeeklyTokensForHoldersAmount()", "9801cb8e": "ProofOfExistence()", +"9801dc9d": "bondingTokenCount()", "98024a8b": "getPartialAmount(uint256,uint256,uint256)", "98024f18": "testThrowsTransferDisableNotEnabled()", "9802dd1a": "Dpc()", +"98034244": "AdminlistSet(address,bool)", "98036e7a": "ADVISORS_PERCENTAGE()", "98041ea3": "addMember(address,uint256)", +"98046d62": "DepositATokenId()", "980481e0": "isABatchOpen()", +"98054349": "transferFundz()", "98057510": "addLockedTokeB(address,uint8,uint256)", "980591f4": "pause(bool,string,address,uint256)", "9805d7d2": "landsOf(address)", +"980619a7": "createChecksumAlgorithm(uint256)", "98063de4": "LogPollVoted(bytes32,address,uint256)", +"98063ecd": "can_claim()", "98066221": "FlowchainToken()", +"980704cf": "getCastVote(uint256,address)", +"980741a0": "_destinationChainIdLength()", +"98077726": "Unlock(address,uint256,uint256,uint256,uint256)", +"98079dc4": "payableTokenAddress()", +"9808526f": "GetLevelSubValues()", +"98086939": "priceForBuyingAssets()", +"9808797c": "pairPool()", "980934ec": "create(address,string,bytes32,uint256)", +"98099d5b": "addActivity(uint8,string)", +"9809a203": "open_voting(bytes32)", "9809a38b": "supplyPerColor()", +"980aa699": "getAddressArray(address[])", "980b05e0": "_createCollectible(bytes32,uint256,uint256)", "980b5335": "getAvailableAmountWithdrawal(address,bytes32)", +"980ba893": "getCoinName(address)", +"980bc579": "_tropVault()", +"980c2a98": "FINISH_BONUS_AT_BLOCK()", "980c2f21": "releaseForeignToken(address,uint256)", +"980cb577": "setSushiRouterAddrv1(address)", "980cf053": "stage4Bounty()", +"980d1834": "gameStates(uint256)", "980d75ab": "Readcoin()", "980dc482": "addOrder(address,uint256,uint256,uint256)", +"980e1c5e": "setDescription(bytes32,bytes32)", "980e6e08": "timeLeftToCook()", "980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", +"980e8db6": "rights()", "980ee29f": "MakeDai(address,address,uint256,uint256)", "980f62b1": "kickoff()", "980f8e5e": "createPaper(string,bytes32,uint256,uint256[],address,address[])", +"980f9258": "shouldThrow(bool)", "980fb0aa": "abortByBroker()", "980ff6c6": "executeProposal(bytes32)", +"98100d28": "lowPriceN()", "981012f2": "AddressChecker()", +"9810389e": "setBrandAddress(address)", +"98103f30": "mapRound(uint256)", +"98107e5b": "get_random()", "9810e089": "return_owner()", "98110106": "_ownerTransfer(address,address,address,uint256)", "981101f5": "VERToken()", "981111ef": "factorial()", +"98114d1b": "underlyingOutput()", "9811c7c1": "target(uint256)", "98123528": "numThings()", "98129013": "left47(uint256)", +"98138b24": "submitTransaction(address,uint256,address,uint256,bytes,bytes)", +"98141712": "addWhiteAccount(address)", "981489b8": "setWidthrawFor(string,uint256,uint256)", "9814d0ee": "isProposalEnded(bytes32)", "981566ce": "LotteryCore(address)", +"98159a4a": "redeemItem(bytes32)", "9816006c": "DeWeiSecurityServiceToken()", "98163597": "getTotalVolumeEth(address)", +"98168994": "updateStakeLockBalance()", "9816af58": "getUserPools(address)", +"9816f143": "onTicketPurchase(address,uint256)", +"9816f473": "getUnderlying()", +"98173ff4": "addClient(string,string)", "98179c41": "burnBalance(address)", +"9817d5b8": "getTrustee(uint256)", +"98180dde": "startICO(uint256)", "98182950": "TARGET_TOKENS_ADDRESS()", +"9818da73": "setMinBuyTokenAmount(uint256)", +"9818e66c": "_placeOrder(uint256,uint256)", "98191a20": "inPreSale3Period()", +"9819c313": "sellVirtualGold()", "981a1327": "tokenToExchangeTransferOutput(uint256,uint256,uint256,uint256,address,address)", +"981a58e9": "darknodeRegistryStore()", "981a60f5": "extractNameFromData(bytes)", "981ae401": "ACTION_TAX()", "981b24d0": "totalSupplyAt(uint256)", "981b405b": "willChangeCost()", +"981b4385": "gangHits(uint256)", "981b69b7": "soldForFifth()", "981c6946": "holderAdded(uint256,address)", "981c80b3": "Maia(address)", +"981c9641": "farmRate()", "981c9e07": "PBSU()", +"981cc0dc": "lastUpdateHour()", "981cc7ae": "GetRichQuick()", +"981cf1dd": "interestRateByDay(uint256)", +"981da9c3": "dbg_rebuildMapCustom(uint8)", "981dd797": "process_contribution(address)", +"981f5d76": "getRateCentUsd()", +"981fd5f3": "harvestLeftover(uint256)", "98203e6b": "setDeprecated()", "982078b8": "requestTokensFromCrowdsale()", +"9821602c": "_userTotals(address)", "98221166": "changeTypeHash(bytes32)", +"982260bc": "getActiveLoans(uint256,uint256)", "982270e7": "setPOOL_edit_6(string)", "98229465": "_isAuthorizedOrOwner(address)", "982296a8": "emitEvent(string)", +"9822b057": "getAPICheck(string)", "9822e501": "exchangeOwner(uint256,uint256)", +"9822fdf2": "activateNewLogic()", +"9823333a": "setLiquidityToken(address,address,address)", "98234a6c": "max_crowd_vitas()", +"982369de": "updateReserveStateOnRepayInternal(address,address,uint256,uint256)", "982371b4": "cancelOrder(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"982382a9": "hubFundAdmin()", +"98238310": "LogDiscountsReset(uint256,address)", +"9823d705": "updateSupporterDPORequireAmount(uint256)", +"9824345b": "_stakerTokenRewardsClaimed(address)", "9824425a": "takeOrder(uint256,uint256,uint256,uint256)", "982475a9": "approveKyc(address[])", "982495c7": "attend(address[])", @@ -86993,69 +159239,126 @@ "9824e7f7": "userWalletTransferEther(address,address,uint256)", "98251353": "grantedWallets(address,address)", "98257d84": "changeDefaultTimeLock(uint256)", +"9825be23": "getDepositParams(uint256)", +"9825dbbb": "FinalizeCrowdsale()", +"98260614": "isWithdrawnable(uint256)", "982657f3": "startGame(uint256,uint256,uint256,uint256)", +"9826ba18": "chargeGas(uint256)", +"9826de0a": "SetGameCommands(uint256,uint256)", +"9826f4cc": "createFuturesAsset(address,string,string,uint256)", "98270d24": "atxToken()", "982713e1": "ComplexExchanger(address,uint256,uint256,address[],uint256,address)", "98278bc8": "DefaultSweeper(address)", "9827a996": "terminateProject(bytes32)", +"9828c354": "MAX_ACC_MERGING_DURATION()", +"9828f19f": "_setDaoFee(uint256,uint256)", "98290c53": "stakeBelaSplit(uint256,address)", "98296c54": "assertEq(uint256,uint256)", "982a2376": "settingExist(uint256)", "982a83eb": "createCrowdsale(uint256,address,string,string,uint256,uint256,uint256)", "982a96e3": "bonusRemaining()", +"982aae46": "stableCoinAddress()", "982b5dd2": "processVestingRules(address,address)", "982b6689": "transferMultiple(uint256,address[])", "982bb5d8": "setDepositsSigned(bytes32,bool)", "982c0455": "getSpecifiedComment(address,uint256)", "982d1270": "shiftIn(uint256,bytes32,bytes,address)", +"982da838": "addLordBaelish(address)", +"982dd243": "_loanRepayment(uint256[3])", +"982e4ce2": "getrefnew(address)", +"982e52fb": "init_()", "982e5721": "getRateNow()", +"982e5eb6": "AirDropforBORGETH_Subscriber111(address)", +"982ec790": "sashimiInitialIndex()", "982f4a21": "INFOCORP_DONATION()", +"982f613e": "getGovernanceProxy()", "983032c2": "newShare()", "983086df": "HMTCrowdsale(address,uint256,uint256,uint256,address,address)", "9830a8fd": "getCustomerTxRegistry(address)", "9830aa07": "UBlockChain(address)", "98313b10": "splitTokensAfterDistribution(uint256)", +"98313ca1": "removeBlackLists(address[])", "98315249": "getUsersMicroModulesIds()", +"9831af1d": "operatorLength()", "9831ca4d": "joinMiniGame()", "983234b6": "setAmounts(uint256,uint256)", "9832ee65": "resultsWeightedByTokens()", +"9832fb4b": "mcd_join_eth_a()", +"98333e8f": "WinningCards(uint256)", +"98335122": "shit()", "98337afb": "largeCount()", +"9833afaf": "getLatestNetworkFeeDataWithCache()", +"983472c3": "nameOfCreator()", "983485e1": "buyEthereumToken()", +"9834f183": "setControllerFee(address,uint256,uint256)", +"98351308": "totalSupplyDenominatedInDai()", +"983561ba": "swap(address[],uint256,uint256,uint256,address,bool)", "98358f82": "cap_in_wei()", +"9835ac77": "blessScaleFactor()", "9835efaf": "setAmountToDistribute(uint256)", +"9836207e": "_totalSupplyCrowdsale()", "98366d1c": "isMint(int256,address)", +"9836c23d": "getTokenPrice(string,string,string,uint256)", +"98371fc0": "coachAllnums(uint256)", +"9837d528": "distributeCore(uint256)", "98390730": "takeAllEther(address)", "98391c94": "muteMe(bool)", +"983982e1": "MinAmount1Round()", +"98399c3e": "DoWork()", "9839eafd": "getTicketNumbers(uint256)", "983a7f47": "setDNA(uint256,uint256)", "983a8c8a": "_setRoles(address,uint8[])", "983a95b2": "trackClick(address,address,address,address)", +"983ae94e": "processedTransactions(uint32)", +"983ae9f0": "rollover(address,uint48)", "983b2d56": "addMinter(address)", +"983b5107": "setMajorQuali(uint256)", "983b94fb": "finalizeAuction(bytes32)", +"983bafc1": "calculateFeeInv(uint256)", +"983bc41b": "airdrop(address[],address,uint256)", "983bc49d": "currentBalance(address,address)", +"983bd3d4": "setHorseHash(uint256,string)", "983c09ee": "steal(address,address,uint256)", "983c0a01": "closeCrowdsale()", "983c4647": "TunTokenERC20()", +"983c5f95": "createNewBoosters(address,string[],string[])", "983c7630": "setPermissionByAddress(uint8,address,bool)", "983c8449": "VzanToken(uint256,string,string)", "983ce499": "_set2()", +"983d2737": "OPERATOR()", +"983d58f4": "thirdPhaseBonus(uint256)", +"983d90b4": "totalLpStaked()", +"983d9139": "TKPUserArrayIdentifier(address)", +"983dcf1a": "claimFoundationTokens()", "983df7cd": "isOperatorAuthorizedBy(address,address)", "983e1318": "Hack()", +"983e2e14": "topDownComposableStateHash(uint256)", +"983e4362": "Upgrading(bool)", +"983e746d": "punkIdToPunkBio(uint256)", +"983e8e41": "_getCurrentSetting()", "983ef725": "getDifficulty(uint256)", "983f724b": "getCassetteType_()", +"983fbab2": "withdrawLINK(address,uint256)", +"983fddec": "leaveStaking(uint256,uint256)", "9840a504": "NFCToken()", "9840a6cd": "getSubscriptionValue(bytes32)", "9840a8f8": "minAllowedBetInTokens()", +"9840fc0b": "INX_RoleTransferred(uint8,address,address)", "98413ff1": "extensionByIndex(uint256)", "98416339": "KRYPTONIUM()", "98419ec5": "shouldThrowOnAttemptToTransferWhenNotOwner()", "9841a2d8": "startSale1Phase()", +"9841d027": "getUserSafesFullInfo(address)", +"98424058": "userInviteRewardRecord(address,uint256)", "9842692b": "_contractFallbackERC223(address,address,uint256)", "984274af": "preTgeCap()", "9842a37c": "__callback(uint256,bytes32)", "9842ec30": "drawItemLottery(address,uint256)", +"984395bc": "callOrigin()", +"9843b4e9": "burnB(uint256,uint256)", "9843e648": "setItemsEC(address,address)", "9843eae3": "airdropActive()", +"9843fc79": "red(address)", "984413b8": "_eraseNode(bytes32)", "9844347b": "createCertificate(bytes,bytes,uint256,bytes)", "98445e6f": "getCurrencyPayment(address,uint256)", @@ -87063,45 +159366,85 @@ "984474fb": "price_token()", "9844c294": "existenceAllowance(address)", "9844d5a7": "Martcoin(uint256,string,string)", +"98455999": "_getDPRequestMetadata(uint256)", "984572d0": "privatePreICOBonusPercent()", +"9845a3ee": "pendingPlanet(uint256,address)", "9845b448": "PHASE5_START_TIME()", +"9845e3b4": "usdtBuy(uint256)", +"9845f280": "_setMintPaused(bool)", +"9846d9de": "setLockUsers(uint8,address[],uint256[],uint256[])", "98475e30": "BTCETH(uint256)", +"9847683f": "sqrtu(uint256)", +"9847cc83": "GuardianSaleToBuyer(uint256)", "9847d267": "GoodLuckCoin()", "984809bf": "setPublicOfferingLimit(uint256,uint256)", +"9848146a": "whitelistedByeSayer(address)", +"9848446b": "setbullshitAddress(address)", "984877b0": "GoalHitWithdrawl()", +"9848d4a5": "getCurrentStakingAmount(address)", "9848fef8": "tokensReleasedToEcosystem()", +"98495352": "distributeList(address[],uint256[])", +"98499657": "onKeyPurchase(address,address,address,bytes,uint256,uint256)", +"9849cfb0": "getMaintainance()", +"9849e412": "fundingInterval()", +"984a1f37": "flashloan(address,uint256,address[])", "984a27be": "m_SMRMinter()", +"984a43a1": "a_b1()", "984a470a": "forwardedOutcome()", +"984a55b8": "setPoolProxyAdmin(address)", "984a74f7": "TazitToken()", "984ac378": "lotteryTitle()", +"984b7dc5": "getUserMonster(uint256,address)", "984bc8c5": "placeTicket()", +"984be441": "liquidity(uint8)", "984c0450": "withdraw(bool,uint256)", "984c14ac": "setupVolumeMultipliers(uint256[],uint256[],uint256[])", "984ce0fd": "transfertoacc(string,uint256)", "984d11fc": "validSupply()", "984d4a93": "setAdminsAddress(address)", +"984dc34b": "getFeeBackPlatformCheck()", "984ddfe8": "DevTokensHolderMock(address,address,address)", +"984df69b": "findFreeReferrer1(address)", "984e1ff4": "mock_setShouldSucceedTransfers(bool)", "984e2829": "_updateState(address,int128,uint128,uint256)", "984e5a0b": "FunKoin()", +"984eabaa": "claimDefi99Plus(address)", "984ec03e": "_storeStakes(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"984f4586": "arbonelist(uint256,uint256)", "984fba49": "removeInvestorFromWhiteList(address)", +"98508ecd": "oracleDetails()", "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()", +"9851bac7": "PORTAL_NETWORK_RESOLVER()", "9851fd9a": "eventStatus()", "9852099c": "depositId()", +"9852285a": "calcStakeVol(uint256)", "9852595c": "released(address)", +"98528548": "grainShareDenominator()", +"9852edbc": "increaseByThreeValues(uint256,uint256,uint256)", +"98534ddc": "kassiakommercialAddress()", "9853b234": "createPhoenix(uint256,uint256,uint256)", +"9853d922": "getAllProposals(address)", "98544710": "setKeyHash(bytes32)", +"98546380": "transferApproval(uint256)", "98547a45": "donacionCruzRoja()", +"9854f32f": "chkClaimerAmt()", "985540b9": "remove(int8,int8)", +"98558d39": "lastEpochClosed()", +"98562043": "interstellarEncoder()", +"9856f6b3": "manufacturMadicine(bytes32,bytes32,uint256,address,address,uint256)", "98575188": "removeUser(address)", "9857650c": "claimIFactor(bytes32,uint256)", +"98587822": "FeeParams(uint256,uint256)", +"98588a2b": "batchMint(address,uint256,string,uint256,bool)", +"9858befb": "adminBalance()", +"9858ce42": "removeListToken(uint256)", "9858cf19": "FREE_SUPPLY()", +"98590ef9": "cancel(address,uint256)", "9859387b": "createAccount(address)", "98593b7a": "SenseProtocol()", "98596560": "get_activity_by_id(uint256,uint256)", @@ -87110,53 +159453,104 @@ "98598905": "subVirusDef(address,uint256)", "985989d2": "ROLE_UNDER_MINTER()", "9859adf0": "_payByEth(uint256)", +"9859e690": "approve_157(address,uint256)", "985a882c": "MINEX()", "985b71f1": "calcBindedBlindHash256(string,address)", "985bcf34": "canExit(bytes32)", "985bdd43": "isExchangeAlive()", +"985c2ee6": "issue_token(uint256)", +"985c4c8a": "totalDistributionCount_E(address)", "985c7564": "getNextTournamentData()", +"985c9d56": "routePair(address)", +"985d28aa": "isApprovedStrategy(address)", +"985d3557": "calculateMode()", "985d43f1": "TOTAL_APC_SUPPLY()", +"985d5449": "unvest()", "985d5702": "ExShellStock()", +"985d5e8f": "BraveDeadPlayer(address,uint8)", "985dea23": "getETH(uint256,address)", "985df3a7": "setHeroAssetAddress(address)", +"985e0fb6": "startA(uint16)", "985e2cdf": "updateExchange(address,address,bool,bytes4[])", "985e4634": "CreateLPT(address,uint256)", "985e4cd0": "sumBalanceOf(address)", "985f26f6": "AddOwners(address[])", +"985f422b": "tokenOfLeasorByIndex(address,uint256)", "985fc7ea": "destructionAddress()", "98603cca": "disableBurning()", +"9860679c": "setPool(address,address,address,bool)", +"986078fe": "bulkSendCoinWithSameValue(address,address[],uint256)", "98608111": "getStorageNameHash()", "9860d0a5": "setTransferFee(uint32,uint32)", +"98621efc": "getSpinResult()", +"98624455": "airdropFee()", +"98625080": "addVest(address,uint256,uint256[],uint256[])", +"9862d5f0": "getUserInformation(address)", +"98636b9e": "borrowAndLiquidate(address,address,address,uint256)", "98636f32": "isException(address)", "98646d68": "setNumDesignatedReportNoShows(uint256)", +"9864da75": "StateSwitch(uint8)", +"9864dcdd": "RETURN_MAX_INDEX_VALUE()", "98650275": "renounceMinter()", +"986520ed": "sm_lastProfitSync()", +"98658748": "validTargetPrice()", +"9865fdb7": "getUnassignedRewards()", +"986602b5": "normalizeRate(address,address,uint256)", +"9866503e": "orThrow(bool,string)", "98668b24": "tokensVotedForDisable()", "98672215": "getTearAward(address,uint256,uint256)", +"986768b2": "getStakingRewards()", +"9867df11": "fillBSC2ETHSwap(bytes32,address,address,uint256)", +"9867e92b": "bxdPerBlock()", "98683105": "CCH_EDIT_1()", +"986851e7": "moreETH()", "98686304": "Elance()", "986876e6": "ChannelCreated(address,address,uint192)", "98688a95": "Ai()", +"98692f8d": "evolveToken(uint256,uint256,uint256)", +"98698d3c": "registerTokenOracles(string,address[],address[])", "9869aca0": "setSchedule(uint256,uint256)", "9869b736": "ONE_MILLION()", "9869f1b7": "migrateTokens(address,address)", +"986a9530": "updateAllPool()", +"986aa075": "establishRewardPerToken()", +"986ab838": "compContributorSpeeds(address)", "986b3a9a": "getCanvSize()", "986b5676": "loveID()", +"986b643a": "setBBOXcapacity(uint256)", +"986b6aaf": "initialize(address,address,address[],uint256,uint256,address)", +"986bb722": "startIco(uint256,uint256)", "986bb99a": "setPOOL_edit_30(string)", "986bf5e8": "addAudit(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", "986c1938": "setRegistrarAuth(address)", +"986c1d0e": "extendRewardPool(uint256,uint256[],address)", +"986c25b3": "tokBought()", +"986c41a0": "NewExternalFoundation(address,uint256,uint256,bytes32)", "986c7cc7": "BitArbToken()", +"986c9139": "getBatchIdByIndexM(uint256)", "986cc311": "executeProposal(uint256,uint256,uint256)", "986ccc7f": "setHelper(address)", +"986cf857": "iUniswapV2factory()", +"986cfba3": "getSqrtRatioAtTick(int24)", "986d08a8": "OSECOIN()", "986dcd4d": "setCycleLimit(uint256)", "986e791a": "getString(bytes32)", "986e7ed3": "AssignGGCOwner(address)", +"986e82f2": "limits(uint16)", "986ec464": "tokensLeftDrain(uint256)", "986ee316": "VoteMemberCandidate(uint256)", +"986efb3e": "bulkIssueInterests(bool,address,address,uint256[],address[])", "986f3c9b": "addComment(address,address,bytes32,bytes32,bytes32)", "986f737b": "onrs(uint256)", +"986fcbe9": "submitPrice(uint256)", +"98700c50": "SetReceivedTokenRate(address,uint256)", "98702402": "refPercentage(address)", +"98702f82": "EtherToToken(uint256)", +"987099cf": "changePAXaddress(address)", +"98709ee7": "contentPrice(address)", "9870d7fe": "addOperator(address)", +"98717dd1": "addr0()", +"98718948": "standardSigs(bytes4)", "987196ae": "HabibaTokenCoin()", "9871cb8f": "Moneto(address)", "9871e4f2": "makeSubscriptionId(address,uint256)", @@ -87165,19 +159559,31 @@ "98729c37": "_changeUpPrice(uint256)", "9872a20a": "registerUInt(address,uint256)", "98738f97": "preIcoBonuses(uint256)", +"9874752e": "REWARD_RELEASE_PERCENTAGE()", "9874a3d0": "WAIT_BLOCKS()", "9874cdf4": "performRefund(bytes32,bytes32)", "9874f5d7": "addString(string)", +"9874fb67": "txBuffer(uint256)", "9875958c": "PlaceRocketForSale(uint32,uint80)", +"9875a889": "t(address)", +"9875ab69": "setsubHexAddress(address)", +"9875fbdf": "getPrice(string,string,uint256,bool,uint256,address,address)", "98764f22": "setPrice(uint32,uint64)", "9876962a": "setstart()", "9876ee61": "coinsAddresses(uint256)", +"9876fdfa": "withdrawFromUnicrypt(uint256)", "98772e80": "disrupt()", "987757dd": "settle(bytes32)", "98779240": "transfersAllowDate()", +"9877aa7f": "getUserProfitsGivenToAmount(address)", "9877bdff": "Alice()", +"987851fb": "safepidTransfer(address,uint256)", +"98787ca3": "GetProjectStartDate(uint256)", "9878cc51": "MELON_ASSET()", "98791010": "deleteHpbNode(address)", +"987ab9db": "rootChain()", +"987b39ef": "validateClaim(address)", +"987b57b9": "getCourse(bytes32)", "987b7967": "BLOCKMALLToken()", "987b904b": "BOUNTY_LIMIT()", "987bc844": "HolikopterTokenToken()", @@ -87186,44 +159592,86 @@ "987c9efd": "PayIreward()", "987cb9b0": "updatePublicSale(uint256)", "987cec61": "converted(uint256)", +"987d620f": "Claimed(address,uint256,uint256)", "987d9768": "ILF(address)", +"987dc820": "setIntToZero()", +"987e042c": "checkingAccessList()", +"987e2603": "getHeapSort16()", "987e565d": "buyKim(uint256)", +"987e6eae": "GUILDKICK()", "987ea899": "addAssetManager(address)", "987eae8f": "totalPets()", +"987ee156": "getUserProfile(address)", "987eeee5": "createMain()", +"987efc02": "cashoutAdmin()", "987f3bdb": "_playGame(uint256,uint256,uint256,bytes32)", +"987f513c": "getBoomShare(address,uint256)", +"987f639b": "trade(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "987f710a": "TIME_TO_COOK()", "987faf18": "prevJackpotsLength()", +"987fc3ae": "__MappingMATTER_init(address)", +"987ff31c": "move(address,uint256)", "9880472f": "multiSigOutputAddress()", "98804938": "deposit_eth(uint8,uint256)", "98806bf0": "convertTokens(address)", +"98807d84": "staked(address)", +"98808222": "timeSeriesFeedInstance()", +"9881b200": "tokenIdToCelebId(uint256)", "98827d5e": "createCoins()", +"98828835": "BalanceNotEnough()", "9882e15e": "withdrawOverdue(address,address)", "9883521e": "presaleProcessed()", "9883548a": "fint32(int32)", +"98836f08": "extrapolatePoolValueFromToken()", +"9883774d": "stateMultiVote(bool,address,bool,uint256)", "9883b9f4": "addAmendment(string)", "98842c3b": "ipfsGet(uint256)", "988483d4": "convertMsgValueToBytes20()", +"9884d4ba": "isTransfersActive()", +"9884e801": "tokenAddress(address)", +"988577f2": "totalHexTransformed()", "98864aaf": "getPropertyFlag(uint16)", "98866c1a": "personUpdateDOD(uint256,int256)", "98866ead": "_gensGenerate()", "9886de1f": "multiTransfer(uint256,address[])", +"988749d1": "wipe(address)", "98876609": "create(bytes32,address,bytes32[])", +"9887f180": "_amount()", "98880043": "addGame(string,string,uint256,uint256)", "9888103f": "buyTokensInternal(address)", +"988843f8": "checkAccounts(uint256,uint256)", +"9888f6a5": "parentRewardsPaid()", +"98896d10": "getPendingDivs(address)", +"98896de3": "ClaimInterest()", +"98899f40": "calculateRemoveLiquidityOneToken(address,uint256,uint8)", +"9889a7a5": "myEthers()", +"9889d606": "addToUnit(address)", "988a18f6": "claimTokens(address[],address)", "988a9fb5": "getTokenIdOfAddressAndIndex(address,uint256)", +"988acb1d": "copyToStorage()", "988b1d86": "remoteApprove(address,uint256)", "988b590f": "withdrawBSAFE(address,uint256)", "988ba8e8": "finishPreSaleRound()", +"988bf95b": "isUserExists(address,uint8)", "988bfcfa": "_buyToken(address,uint256)", "988bfd47": "ProxyCreationAndExecute(address)", +"988c8ebb": "setDailySaleLimitPercent(uint256)", +"988c8f1d": "transferAny(address,uint256)", +"988d7a60": "add(uint256,address,uint256,bool)", "988da80f": "getUserName(uint256)", +"988e6595": "currentPeriodId()", +"988f13a5": "claim(uint256,uint256,uint256,uint256,bytes)", "988fc9a8": "fetchOrderByIdWithWithPayerByAdmin(string,address)", "9890220b": "drain()", +"98903201": "MyStakes()", +"98903346": "renderTop75()", +"9890b481": "burnOnOff()", +"9890ba73": "buyPack2()", +"9890cdca": "ERC1271_RETURN_VALID_SIGNATURE()", "9890d6bc": "GetDisputesAtTheMoment()", "9890eabe": "distributeDividendsOnTransferFrom(address,address,uint256)", "9890f48a": "LocalStarRoster()", +"9891ca3c": "marginMaintenancePercent()", "9891d61c": "getEnabledTokensLength()", "9892003a": "TexasHoldem(string,uint8,uint8)", "98924050": "addtoLottery()", @@ -87233,40 +159681,64 @@ "9893f27e": "allowancePresetTransfer(address)", "9894221a": "SendCashForHardwareReturn()", "98943c88": "getAllWeaponData(uint256)", +"98949f29": "addNewTokenToOwner(string,address,address)", +"9894a167": "pendingBrrr(uint256,address)", +"9894b715": "investDenominator()", "9894ba7c": "transferOut(address)", "9894eb8e": "hashSecretKey(bytes32)", "98951b56": "approveProposal(uint256)", "98951bfc": "foundersAmountLeft()", +"98956332": "setToLiquidPool(address)", "9895dd78": "setRegularTransTime(uint32[])", +"9895e3d8": "redeemUnderlying(address,address,uint256,uint256)", "98968f15": "purchase(address,uint256,uint256)", "98969906": "PassportToken()", +"98969e82": "pendingReward(uint256,address)", "9896b6cb": "testToUint16()", +"9896be0f": "addSystemBalances(address[],uint256[],uint256[],address[],address[],uint256[],uint256[])", +"9896f37d": "getFeesAmount()", "98973f2b": "setRestrictedAddress(address)", "9897e8a5": "scalarEvents(bytes32)", "9897f916": "manualRelease(address,uint256)", "98981756": "teamExists(uint256)", "98983cc5": "isCrowdsalePaused()", "9898e18c": "tokenSender()", +"989900e0": "avgMinedPerDay()", "9899276b": "getOwnedTokensLength(address)", "9899722d": "newRateTime()", +"98998ba7": "stakeEth_(address,uint256)", "9899a2c5": "aliceClaimsDeposit(bytes32,uint256,bytes32,address,address,bytes20)", +"9899ec0e": "Dispensed(address,uint256)", "989a55fa": "_increaseApprovalAllArgs(address,uint256,address)", +"989a85b5": "withdrawCommittedDeposit(address,uint256)", +"989a88ae": "CancelTrade(address,uint256,uint256[],uint256[],uint256[],uint256[])", "989b595f": "shuffleSeed(uint256)", +"989c298e": "_computePrices(uint256,uint256,uint256)", "989ceab1": "WhitelistAddressAdded(address,address)", "989ced26": "updateTokenContract(address)", +"989d8355": "swaps(address,uint256)", "989db511": "Input()", "989ddfce": "AdminDeleted(address)", "989e4a8c": "_processPurchase(address,uint256,address)", +"989ee0e2": "LogNewCardsContractDeployed(address,address)", +"989f9aa7": "Timb()", +"98a01ef3": "execute1(uint256,uint256,uint256,uint256,uint256)", "98a05bb1": "deletePermission(address)", "98a05cfb": "arbitroAprovaPagamento(bool)", "98a0871d": "buyXaddr(address,uint256)", +"98a08b81": "setEarlyStop(uint256)", "98a0bf6e": "ForeverChain()", +"98a0d465": "godSetKingOfEthContract(address)", +"98a0dd09": "isTaxActive()", "98a0e1c8": "computeKnockoutPoints(uint8,uint8,uint8,uint8,uint8,uint8,bool)", "98a10993": "finalizeWhenForked()", +"98a11d8c": "getValidAttributeTypeID()", "98a1803c": "ICONotCompleted()", "98a1b397": "ROLE_OPERATOR()", "98a1e1ba": "ownerSetLimits(uint256,uint256)", +"98a217ca": "refund_request(bytes32)", "98a26497": "payCeo()", +"98a299e5": "getUserQuota(address)", "98a29a58": "testControlDisownNotTransferable()", "98a2f59f": "ToLend()", "98a30f76": "totalTokensPreICO()", @@ -87275,122 +159747,248 @@ "98a34fef": "withdrawBeneficiary()", "98a36ebf": "setTradeEventEnabled(bool)", "98a42ec4": "verificationAddressNumberMap(address)", +"98a5078f": "OptheriumToken()", "98a595a5": "requiresInitialization()", +"98a651f0": "setKeyAddressWithKeyAddress(uint8,bytes32,bytes32,bytes)", "98a6a6c0": "isTokenSaleActive()", +"98a6a775": "PaidAndDistributed(address,uint256,string)", "98a73afa": "getAwards(uint256)", "98a7cafd": "setData_27(string)", +"98a7cc30": "TradeAddress()", +"98a7f87f": "VoterRemoved(address,uint256)", +"98a8009d": "getOpsCoin()", +"98a83516": "ant()", "98a87f7d": "CPCToken()", "98a892c9": "getBylawsCashBackVoteRejectedDuration()", +"98a8a672": "getIou(bytes32)", +"98a968c1": "depositWrappedEther(uint256)", "98a9ae44": "remaindersSet()", "98a9bfd4": "is_max_goal_reached()", +"98aa8c33": "withdrawReserves(uint256)", +"98aab341": "getNumberDepositors()", +"98aab812": "getRegisteredBeneficiaries(uint256)", +"98ab0914": "packIdList(uint256)", "98ab1c72": "setBackgroundImage(uint256,bytes)", +"98ab3d49": "LENDING_POOL_ADDRESS_PROVIDER()", +"98abbd1e": "rewards3(address)", "98aca922": "getReceiver()", "98acd7a6": "getBaseToken()", "98ad004c": "GetCollectionInfo()", "98ad2f12": "getid(address)", +"98ad6e40": "updateOwners(address[])", +"98ad89e2": "lockpro(address,address)", +"98ada70a": "Register(address,address)", +"98ae584c": "vest(bytes32)", +"98aeb60b": "getCommonPetId(uint256)", "98af629b": "winnerDecidedGas()", +"98af8f2c": "oracleInitializeNewRound(uint32)", +"98afaf52": "newSlotId_ap6()", "98b00ee0": "getFinalBytes()", "98b01fe3": "totalBonusTokensIssued()", +"98b02cf0": "nhomtacgia()", +"98b0414f": "batchRemoveWhiteListAddress(address[])", "98b04c16": "SportistToken()", "98b0787e": "playerTwoCommit(bytes32)", "98b1e06a": "deposit(bytes)", +"98b1f5d4": "coinMaxPrice()", +"98b21e29": "pendingAeron(uint256,address)", +"98b22240": "erc1155InterfaceIds(uint256)", +"98b231d2": "AccurateContribution(address,address)", +"98b2373a": "ROLE_MODIFY_QUORUM()", "98b23a29": "TimeShareEstate()", +"98b2bb71": "removeLiqidity(address,address,uint256)", +"98b33c32": "eeth2tokens2contract(uint256,address[])", +"98b35af4": "getAAVEAddressProvider()", "98b35e73": "saveReading(string,string)", +"98b3901a": "Round1Time()", "98b3dfd6": "NamCoin(address)", "98b41763": "publicGetAdvertisement(uint256)", +"98b422f2": "getWalletsTradingDataSource()", +"98b5146d": "getMaxPrizeShare()", "98b547e0": "transfer_ownership(bytes32,address)", +"98b7319f": "getGsnForwarder()", +"98b762a1": "setMaxDiscountRate(uint256)", +"98b777e7": "setMaxTime(uint256)", "98b78849": "preStakingDistribution()", +"98b7d4be": "setFeeRatio(uint256,uint256)", "98b7db75": "PayForFlag(uint256)", +"98b88a1c": "LotteryFinished()", +"98b8c2b0": "desc(uint256)", "98b90fe1": "closeOption(address[3],uint256[3],uint256[2],bool)", +"98b9421f": "_pobEthUniswapPair()", "98b9a2dc": "changeWallet(address)", +"98b9a81d": "initiateContract(address,uint256,uint256)", "98b9d151": "InsuranceHolder(address,address)", "98ba2453": "canSynthesizeWith(uint256,uint256)", +"98ba4aec": "buyFYDaiPreview(uint128)", +"98ba5c9f": "yourStakedUNI(address)", "98ba676d": "getEntry(uint256,uint256)", +"98baa8ca": "exitMany(address,address,uint256[])", +"98bad269": "addFundsWithPermit(uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"98bb8d6a": "RestartedCrowdsale()", "98bbc47e": "addPerson(uint256,string,string,string)", +"98bc3fe7": "TransferWithFee(address,address,uint256,uint256)", +"98bc8692": "cdp()", "98bca41a": "removeSeenAddress(address)", "98bcfbb8": "minimumTokensBeforeSale()", +"98bd19b7": "_collectedAmountForStakers()", "98bd359c": "deposit(address,uint128,string,uint32)", +"98bd4737": "getReserveTotalBorrowsVariable(address)", "98bd5663": "confirmTime()", +"98bd8fca": "updateAccionProducto(uint256,string,string)", +"98bdd7fd": "pendingSatay(uint256,address)", "98bdf6f5": "tokenIdCounter()", "98be22f7": "forfeitGame(uint256)", "98be7c62": "minterFeePercent()", "98be7df7": "releaseEthers()", +"98be8207": "setKLAN(address)", +"98becbf0": "faker(uint256,address,uint256,address)", +"98bee05b": "isFundsRefundable(address)", "98bf043d": "clearUnusedDeposit(uint256,uint256)", +"98bf3eb6": "prizeStrategy()", +"98bf4c08": "REFERRAL_FRACTION()", "98bffb2a": "manualRecovery(address)", "98c07938": "votersCount()", +"98c07ce2": "setGovVaultValuePerBlock(uint256)", "98c086d8": "_amountReq()", +"98c09d99": "TokenDeposit(address,address,uint256)", "98c0bb94": "returnante(address)", "98c16888": "SToekn()", "98c20c00": "addToAllocation(uint256)", "98c23836": "schellingDB()", +"98c2a424": "zeusContract()", +"98c2ab0b": "_auctionAddress()", +"98c315c9": "transferVideoNFT(uint256,address)", "98c31b1d": "addEvent(uint256,uint256,uint8,string,string)", +"98c37298": "getDmmTokenForUnderlying(address)", "98c39cc2": "AnubisToken()", +"98c3a6c1": "f(bool)", +"98c46b90": "clearUnremovableValidator(address)", "98c5166c": "inResources(address,bytes4)", "98c547b8": "setContentExtraData(bytes32,string)", "98c562b3": "contributionsBySender()", +"98c61c37": "loans(address,uint256)", +"98c62b04": "patientregister(address,uint8,uint8,string)", "98c66b7f": "_startTokenTransfer(uint256)", "98c69648": "DEFAULT_NAME()", "98c6a46f": "setPayoutDistributionId()", "98c6e760": "migrateTo()", "98c7458e": "getEventsByIds(uint256[])", +"98c7878f": "totalHxbMinted()", +"98c8103e": "mintArtwork(uint256,string,address[])", "98c83a16": "PRIVATE_SALE()", +"98c8877e": "dailyVolume()", +"98c8a39d": "setSyntheticDividendPoints(address,address,uint256)", "98c8bde6": "GICTBalance()", +"98c8c18a": "_calculateStakerReward(address)", +"98c8d81f": "choose(string)", +"98c913ea": "Freed(address,uint256)", +"98c91f1e": "getLockTokenReceipt(bytes32,bytes,bytes)", +"98c939b2": "getClamingTokensAmount(uint8,address,uint256)", +"98c99c9e": "saveTokens(address)", "98c9cdf4": "getMinimumCallGas()", +"98c9f86e": "claimCollateralAndPayment(address)", "98c9faac": "cancelActiveAuction(uint40)", +"98ca1009": "BuyTokens(address,uint256,string)", +"98ca625c": "PayProtocolFeeErrorSelector()", "98ca667f": "FOUNDERS_SUPPLY()", "98cb12dc": "isRandomPlayer()", "98cb2342": "getNumEvenSplits()", "98cba526": "TeamAndAdvisorsAllocation(address)", "98cbb277": "Admined()", "98cbefbe": "init(string,string,uint8,address)", +"98cc127e": "multiMine(address[])", "98cc223f": "BiboToken()", "98cc2c53": "VerifiedKYC(address)", "98cc6754": "dumpBalance(address)", +"98cd0e21": "ethPreIco(address)", +"98cd1a73": "setCollateralOracle(address,address,bool)", +"98cd6153": "updateTokenURI(string)", +"98cd803a": "getUsrActvSlid(address)", +"98cd90b5": "createLoan(uint256,uint256)", +"98cd9d77": "tokenIssuedOper()", +"98cdae08": "playerApproved(uint256)", "98cdf0ca": "updateConfig(uint16)", "98ce476a": "EPTCrowdfund(address,address,uint256)", +"98ce57d1": "onFundCleared(uint256,uint256,uint256)", "98cef4bd": "earlyBirds()", +"98cf6cb5": "MAX_HOLD_BONUS()", "98cf6dd3": "deleteInvestorTokens(address,uint256)", "98cf6f22": "queryN(string,bytes)", "98cfa44e": "setFSTPrice(uint256,uint256)", +"98cfe587": "closeStaking()", +"98d0369d": "firstSellYoutubeNft(string)", "98d0573e": "_getActiveMessageId()", "98d07356": "getDepositValue()", +"98d0a386": "bsgs_rewards()", "98d0a6c7": "setBcouponAllocationFactor(uint256)", "98d0b85f": "isNonZeroAccount(address)", "98d0de03": "addPlayerToServer(uint256,uint256)", "98d15134": "companiesManager()", "98d24806": "GetPlayerById(uint256)", +"98d28d28": "_qualifierCompetition(address)", +"98d2915f": "returnBorrowed()", "98d2e3b1": "calcTokenToWei(uint256)", +"98d2fb55": "transferMulti(address,address[],uint256[])", "98d30c50": "winnerCheck()", "98d31a13": "AIR_2()", +"98d33439": "cullBurnrate()", "98d35f20": "anchors()", +"98d3642e": "setAgreementHashTest(bytes32)", "98d41484": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"98d41a85": "testStrLenFour()", "98d48567": "disapproveUserKYC(address)", +"98d4bc04": "emergencyUnstakeAllCards(uint256[])", "98d4cacb": "_assemblyCall(address,uint256,bytes)", "98d4e59c": "decreaseOffsaleCountByOne()", +"98d4ff76": "setVaultsDataProvider(address)", "98d501ca": "OysterPearl()", +"98d50a3b": "completeConversion(uint256)", +"98d52a02": "accept_reset()", +"98d53428": "removeInvestment(address,address,uint256)", +"98d57d21": "calculatePredictionValue(uint256[],address,address,address,bool)", "98d5a1b1": "burnFromIco()", "98d5fdca": "getPrice()", +"98d62404": "lpLockAddress()", "98d6ceb3": "BetSetAnswer(address,address,uint256)", "98d6d8ed": "isPresaleStarted()", +"98d6e66a": "BuyWinner(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "98d70779": "contRefer50x50()", "98d714ac": "ethereumFromAltar()", +"98d71fc1": "updateUserWeight(uint256,address)", "98d7352f": "setTokenURI(address,string)", "98d7456f": "ShowInfo(uint256)", "98d764be": "Myastheniagravis()", +"98d76d3c": "set_ServiceProviderAddress(address)", "98d78fe2": "soldDuringTokensale()", +"98d7a414": "setAffinity(uint256,uint8)", +"98d81a1c": "getEnsRoot()", +"98d82f5a": "oneVaultLimit()", +"98d85b97": "PriceFeeds(address)", "98d8adc0": "DividendDistribution(uint256,uint256)", "98d8d7b4": "Vlicoin()", +"98d94752": "teamTokensLeft(address)", "98da2133": "SEC_contract()", "98da8121": "lock_vote_amount(bool)", "98daa8c2": "changeJoysoWallet(address)", "98dacb46": "setLockPostion(address,uint256,uint256,uint256,uint256)", "98db173f": "calcaultePrizes()", +"98dbb368": "tokenVotingPower(uint256)", "98dc6ae2": "divX(uint256,uint256)", +"98dc84b0": "hatcherySquid(address)", "98dc8b44": "getStageIndex()", +"98dca210": "_setIncentivizer(address)", +"98dcaece": "Bonus(address,uint256)", "98dd0293": "changeBonusFrequency(uint32)", "98dd0baa": "getNumOfLotto()", "98dd4b7c": "getCountStakesToken()", +"98ddcec7": "operatorRedeemByPartition(bytes32,address,uint256,bytes)", +"98ddf38d": "unlockMachine()", +"98ddfbb8": "setSUCKER(address)", +"98de0201": "getMinorAddresses(uint256)", +"98de3989": "getBondsForEther(uint256)", "98de4f35": "purchaseTokensfor82(uint256,address,uint256)", +"98de6970": "setLiquidationPerSec(uint256)", "98de921f": "removeLoanFromPortfolio(uint256,uint256)", "98dec601": "REGULAR_RATE()", "98dedf30": "getBySchool(uint256,uint256)", @@ -87398,7 +159996,10 @@ "98df67c6": "revealSecret(uint256)", "98e00e54": "getCallWindowSize()", "98e02be7": "abandonShip()", +"98e088ac": "calcOfferLimits1(bool,uint256)", "98e09333": "valueGet(address,string)", +"98e0ae14": "validate(address,uint256)", +"98e0c382": "clearPendingSwaps(bytes32)", "98e0fb08": "ICO_TOKEN_SUPPLY_LIMIT()", "98e12d12": "updateAnimal(uint256,string,string)", "98e15065": "info256(string,uint256)", @@ -87408,42 +160009,73 @@ "98e23dcf": "finishPreSale5()", "98e25733": "currentRoundNum()", "98e314a2": "distributeDonationTokens()", +"98e34524": "Get_User_Block_of_Last_Stack(address)", "98e364d6": "saasApiProfitAddress()", +"98e36d8b": "badges(uint256)", "98e3d1d3": "getWineProductionRate()", "98e4053f": "changeVerify(address)", +"98e42743": "setSLF_contract_address(address)", +"98e46658": "DISCOUNT_PER_DAY()", "98e47e49": "LoomToken()", +"98e4d671": "activeMode()", "98e4f581": "getSkin(uint256)", "98e527d3": "getProposalsCount()", "98e52f9a": "decreaseSupply(uint256)", "98e54c55": "setAsTest()", +"98e56162": "STAKE_EVP(uint256)", +"98e5b12a": "requestNewRound()", "98e6176a": "_isProxy(bytes32)", +"98e64922": "min(uint256,address)", +"98e6c340": "setGovenors3(address,bool)", +"98e6e791": "rateChange(uint256)", +"98e729c7": "setLastUpdateByGeohash(string,uint64)", "98e73df9": "hasOutstandingChallenges()", "98e76e06": "buyValue()", +"98e7b83c": "rari()", "98e7ea43": "reward(uint32[],address[])", "98e8c54f": "testerCanReentrant()", "98e8f365": "getYourRewardStock(address)", +"98e95740": "getReturnOld()", +"98e98311": "contractSingleStakeSum()", +"98e98875": "appendDDai(uint256)", "98ea1c51": "ecrecovery(bytes32,uint8,bytes32,bytes32)", +"98ea3230": "birdNest()", "98ea5fca": "depositEther()", "98ea6536": "_beginOfICO()", "98eaca94": "inKissBTC(uint256)", "98eaf11c": "getBool(bytes32,bytes32)", "98eb1096": "CalculateCreateFee(uint256)", +"98ebdbf5": "hashComfirmation(bytes32)", "98ec341d": "addThing(bytes32,string,string,bytes32)", +"98ec545d": "getDistributionPayoutInterval()", "98ec9095": "total_distribution()", +"98ecab5d": "RpunksOfferedForSale(uint256)", "98ecd12c": "test_mixValidEqBytes32Message()", "98edc9ce": "distributeLottery()", +"98ee0ed8": "checkcoll(address)", +"98ee5f69": "pendingJelly(uint256,address)", +"98ee66c5": "swap(address[],address,uint256)", +"98ee9a13": "addOrUpdateChainLinkTokenEthPriceFeed(address[],address[])", +"98eeadf0": "itemIDtoIndex(bytes32)", "98ef4b0b": "total_iou_purchased()", "98ef5bf9": "BuyItem(uint256,string)", +"98ef648a": "deployOption(address,uint256)", +"98f02c37": "expectedReturnDataSize(uint256)", "98f038ff": "migrateRegistry(uint256)", "98f04128": "getRoundJackpot(uint256)", +"98f053c4": "stateAccess()", "98f1312e": "MINT_CAP()", +"98f19784": "setOffer(address,uint256,uint256,uint256)", +"98f1a758": "profitProportionForDev()", "98f1e0e7": "sendTokensWindow(uint8)", "98f20367": "Curatable()", "98f22786": "FireToken()", "98f23a6d": "createToken(string,string,uint32,uint256,uint256)", "98f25c44": "removeCurator(address)", "98f28571": "ClientOrderEvent(address,uint8,uint128,uint256)", +"98f29fa6": "lockSetToken(address)", "98f2af3a": "createGame(uint32,uint64,uint32,uint32)", +"98f30ee8": "swapExactAmountIn(uint256,uint256)", "98f31c82": "price2Of(uint256)", "98f32d1d": "getCatRequestPrices()", "98f3b81a": "getShares(address,bytes32[],int256[])", @@ -87454,8 +160086,11 @@ "98f4b1b2": "rateOracle()", "98f4f54f": "KhairulRamadhan()", "98f52c52": "firstChainHNw1()", +"98f5d4c1": "getBigJackpot()", "98f5ee5d": "spawningManager()", +"98f62d2a": "enableAssetType(address)", "98f69aeb": "_addChildToParent(bytes32,bytes32)", +"98f6ba70": "getHolderPieAt(uint256)", "98f6c7e5": "refereeInvitations(address)", "98f6ff63": "unlock(string,address,address,uint256)", "98f72f42": "COSS()", @@ -87463,118 +160098,199 @@ "98f8193b": "replaceTokenFix(address[],uint256[])", "98f87496": "setRateFinalStage2(uint256)", "98f8fe90": "accessCostMYB(uint256)", +"98f938b2": "_companyName()", +"98f9438e": "ThreePurplePyramids(address,uint256)", "98f96c3a": "AboutKelvin()", "98f9724f": "holderAmount()", +"98f9fbc4": "callCoinbase()", +"98fa5bcf": "registerNotClaimed(address)", "98fa6c8a": "batchTransferETHs(address[],uint256[])", +"98fa7584": "setPercentCommission(uint256)", +"98faa481": "_setTreaReward(uint256)", "98faa9a1": "getStageBonus(uint256)", "98fabd3a": "DAO()", "98faf5d1": "TBsell()", "98fb0ac5": "tokenGenerationEvent()", "98fb2eca": "voteStopped()", +"98fc1d1e": "majorPot()", "98fc2e0a": "GetTickSize(uint256)", "98fc55d8": "whitelist(address,uint256)", "98fcc93e": "getNumberOfBets(uint256)", +"98fd1987": "raiseETH()", +"98fd371f": "isLockedForMV(address)", +"98fd5994": "claimAllResource(uint256)", +"98fd6108": "lockoutBalances(address)", "98fdb377": "REOC()", +"98fdbb31": "lastProposed()", "98fdfd8e": "changeMallcoinTokenAddress(address)", "98fe2b49": "NotifierChanged(address,address)", +"98fe9e7f": "callerPercentageBytes()", +"98ff04d1": "verify_a_gt_than_b(uint256[2],uint256[2][2],uint256[2],uint256[7],uint256)", "98ff116d": "deposit3(address,address)", "98ff1ba1": "tokensGenerated()", +"98ff5dd8": "yieldFarmUnstake(uint256,uint256)", "98ff8075": "claimBounty(address)", +"98ff9c54": "eternalStorage()", "990030cc": "trusted_contracts(address)", "9900c978": "ScudoCash()", "99013562": "Reject(address,string)", "99016142": "claim(uint256,address,uint256,bytes)", +"990174d2": "IncompleteTransformERC20Error(address,uint256,uint256)", +"99019c64": "safegamerTransfer(address,uint256)", "9901bc77": "YRX()", +"9901f165": "earlyClaims()", +"990227f1": "sixteen()", +"99023690": "getNumberDelegators()", +"9902d7bd": "stakeDays()", +"9902e47f": "logBytes8(bytes8)", "9902ef5b": "blockLeft()", +"9903260a": "approve_827(address,uint256)", "990333be": "salesDeadline()", "99035895": "approveERC20()", +"990366d4": "verifySig(address,bytes32,uint8,bytes32,bytes32)", "9903745f": "SetsecondTTaxAmount(uint256)", "990386e8": "dailyRelease()", +"99039fcf": "Stake(address,address,uint256)", "9903a2bd": "calcReleaseToken(address)", "9903c29c": "SALE_MAX_CAP()", +"99044f7c": "getUserTotals(address)", "990460c1": "ownerKill(address)", +"99047421": "machCoin()", "990484a7": "valueToToken(address,uint256)", "9904a68d": "requiredDays()", "9904e174": "sellTokens()", +"9904e88a": "saccoMembers(bytes32)", "9904ed8d": "Reputation()", "990502d0": "GasBuy()", +"99056ba9": "getTotalUncommittedContractStorage()", +"99057f79": "getMemberInTeam(uint256)", +"990585c2": "setDevTeamFundRatio(uint256)", +"9905a4bb": "startTickets(uint256)", "9905b744": "logUint(uint256)", +"99061843": "getAmountsOut(uint256,address[][],address[])", "99061a08": "AltCrowdfunding(address)", +"9906317b": "setBytetherOVAddress(address)", "9906352f": "MANAGE_CAP_PER_ROUND()", +"9906ccdb": "GetPurchasedTokens()", "9906f41c": "setDevelopeo(address)", "9906f81b": "Entrant(address)", +"99071190": "mint(address,string,string)", +"9907672a": "claimPlatformFee(address)", "99076eca": "IHubToken()", "990816bb": "BitcoinSilver()", +"99082c8e": "gTTT()", +"990894a2": "changeRate(uint16)", "9908b25b": "publicTransferToken(address[],uint256[])", +"9908b783": "transferFromShortCode(address,string,uint256)", "9908d3cf": "AMEBToken()", "99091c93": "insertLawyer(address,uint256)", "990986dd": "getRawPendingAmount(uint256)", "9909afed": "has(address,string)", "9909d1a2": "createTestData()", "990a6a64": "SC_locked()", +"990ae00f": "price0TWAP(address)", "990ae727": "clearZoDailyLimit()", +"990b39f2": "accountCompany()", +"990be248": "mintInternal(uint256)", "990c5485": "proxyMergeMint2(uint256,bytes32,address[])", "990c75ed": "getWhitelistedAmount(address,address)", "990c8f79": "returnValue()", "990ca3ff": "tokensToBeAllocated()", +"990cc41d": "_withdrawEthDebug(address,uint256,uint256)", "990cc5c9": "buyFromCurrentOwner(uint256)", +"990d2b44": "regUserViaContract(uint256,uint32,uint32,uint256)", "990d6fd2": "getNextTranche(uint256)", "990dc9db": "transferFunds(address,uint256)", +"990dcb90": "getUserClaimVoteCA(address,uint256)", "990dec94": "signToResetAddTokenData()", "990e178a": "_revealBlock(address)", "990e1c9b": "withdrawStep()", "990e2979": "submittedAmount()", +"990e32bb": "approve_425(address,uint256)", +"990e3b95": "addAllowReceivers(address[])", "990e713b": "buyTokens(address,uint256,bytes4,bytes32)", "990e80a3": "setAddressOf(string,address)", +"990ea214": "totalAmountForBuybackDoki()", "990ed905": "setNewBonusScheme(uint256)", "990eda99": "FreezeAddress()", "990f3f53": "computeResponseSecondHalf(uint256,uint16)", "990f412f": "setAssetHolder(address)", "990fa439": "setLLV_edit_1(string)", +"9910657e": "_mintRewards()", +"9910ed9a": "viewAdmin()", "99110d3c": "PRESALE_END_TIMESTAMP()", +"9911409c": "reinvest(address,address)", "991162db": "getDank(uint256)", "99116354": "errorAndRefund(string)", "99119290": "getCryptodiamondAddress()", +"9911a956": "getEstimatedRFIforETH(uint256)", +"9911b026": "tokenToTokenSwapOutput(address,address,uint256,uint256,uint256)", "9911ec1e": "freezeTokensToInvestor(address,uint256,uint256)", "991257a2": "getSenderLands(address)", "9913380e": "_getInt(address,bytes32)", "99133c9f": "matched(address)", +"99137ced": "mintBond()", "9913dcbb": "AEFToken()", "9914038a": "getBankRollGrowthForGameId(uint256)", +"991414f9": "setVerifierActive(address,bool)", "99141a47": "iffun()", "99142b5f": "send(address,string)", +"9914dc33": "delRoom(uint256)", +"99153991": "otcClaim()", "99154b49": "ARK()", +"9915feef": "exercisable(uint256)", +"99161cac": "getKernelAppAddrNamespace()", "9916233e": "LimitOrder(address,bool,uint256,uint256)", +"99165bf4": "whitelistedGeneScientist(address)", "99166f7d": "getTotalAddresses()", "991678bf": "LogRefundETH(address,uint256)", "9916c350": "numberEthUpdates()", +"99178c37": "topupBalance(address,address)", "9917ccb8": "HongmenToken(uint256,string,uint8,string)", +"9918429a": "extractToSpare()", "9918925d": "setClaim(address,bytes32,bytes32)", +"9918fce1": "unitContributions(address)", +"991991c7": "setSwapFee(address,uint256)", "9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", "9919c9cf": "getGoldBackedByEachToken()", +"9919d2bd": "getCollateralAmountLp(address,address,address,uint256)", +"991a319d": "usdt_token()", "991a3b5e": "ARCD_FUND_DEPOSIT()", "991a9fa9": "etherHasBeenReturnedToInvestors()", +"991b03c8": "currentTokenContract()", +"991b3f41": "getUserLPTokensAndMaxETH(address)", "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)", +"991df734": "betColor(bool,uint256)", "991e0139": "completeJob(bytes32)", "991e47ff": "CoinWindow(uint256,string,string)", "991e86bb": "c_maximumTokensSold()", +"991e979a": "WithdrawETHFee(address)", +"991e99ad": "totalDistributionCount(address)", +"991ea451": "stakingEvents(uint256)", "991ef443": "publishers(uint64)", +"991f0459": "Minters(address)", "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)", +"9920fae3": "setPrimarySalePrice(uint256,uint256)", +"99213cd8": "setAnswer(int256)", "9921cac5": "AlbertCoin()", "992204e6": "GoldFee()", "9922ea86": "allocateTokens(uint256,address)", +"99231b54": "usdtFor1Eth()", +"992427da": "subper()", +"99242a21": "amountOfTokensToUnlock(address)", "99244d1a": "testvalue()", "99248d3e": "AxieAccessControl()", +"99248ea7": "REWARD_TOKEN()", "992495e2": "minerRandomNumber()", "9924ab31": "CIVCoin()", "9924ad7c": "ovatel()", @@ -87582,24 +160298,47 @@ "9925b9c1": "setMintFeeAbs(uint256)", "9925d68e": "createPreSaleShip(string,uint256,uint256)", "99260144": "rewardMintOwner(address,uint256)", +"9926223c": "gain()", +"992642e5": "stableCoin()", "9927482d": "proxy(address,string,address,uint256)", +"99275cc7": "bond(address,bytes32,uint256)", "992817b9": "recordGet(address)", "9928811b": "testBroken()", "99288dbb": "saleOpen()", +"9928bb9b": "PayDebt(address)", "9929057b": "executeDelayedSetStakes(uint256)", +"992924a6": "_owners(uint256)", +"99295659": "vaultInfoOf(address)", +"9929b3de": "getLotToken1155RewardByIndex(uint32,uint256)", "992a3e75": "changeBountyPaysTokens(uint256,bool,address)", +"992a7176": "TRUSTED_AGENT_ROLE()", +"992a76c4": "estimateMyIncreaseRewardTotal()", +"992a7dfb": "withdrawRequests(uint256)", +"992ab2f9": "pureStakeOf(address)", +"992ad99b": "reservedPrice(uint256)", "992ae976": "isSafePunctuation(bytes1)", "992b2f0f": "addSlogan(uint8,string)", +"992b6099": "rewardLevels(uint256)", +"992b6d59": "_setConfigGovernor(address)", +"992baa7d": "InvitationCardInfo(uint256)", "992bb01e": "eval(bytes32[])", "992bc0ce": "pay_to_OEM()", +"992bf1b2": "totalStakedShow()", "992c15fc": "MIN_VALUE()", +"992c3e4b": "redeem(address,uint256,bytes32)", "992c3ff1": "TrekChain()", "992c4435": "UETO()", +"992c5294": "_become(address,uint256,address[],address[])", "992c870d": "transferName(bytes,address)", +"992ca172": "buyerFeedback(uint256,uint256,bool,string)", "992cb59f": "getOrCreateDisputeCrowdsourcer(bytes32,uint256[],bool)", "992d4196": "GNR(address)", +"992d602f": "withdrawInstructionGas()", +"992db38f": "startLP()", +"992dc03f": "m_ETH_Balance()", "992e0aa0": "purchaseBonus(uint256)", "992e2a16": "getReportingEndTime()", +"992e2a92": "MAX_OUT_RATIO()", "992e74a9": "maxRefererTokens()", "992e820e": "burnValue(address,uint256)", "992ebc52": "setCounterLimit(uint256)", @@ -87607,36 +160346,60 @@ "992ee874": "WithdrawToken(address,uint256)", "992fa380": "OmnisBit()", "99304cd4": "AssetWithdraw(address,uint256)", +"99305367": "ROLE_SETVERIFIER()", "993090d0": "adjustPrices(uint256,uint256)", +"993138a4": "profitBalance(address)", "9931a916": "TokenRK70Z()", "99325442": "getCollectedOreBalances(address)", +"99326684": "multisendErcZOOF(address[])", +"99326ebf": "earth()", +"99329c33": "enableDistributeRedeemWpc()", "9932dc05": "codeToAddress(string)", "9932fa28": "API2()", "993301b2": "libbatchbacktest(bytes32,uint64,uint32[],uint64[],int64[])", +"9933591c": "defaultController()", "9933a24a": "allowDirectDebit()", "9933c6b5": "getPokemonLock(uint256)", "9933d225": "addSpecial(address,uint16)", +"9933f40b": "amountRecieved(address,uint256)", +"9933f9ac": "hxbApy()", +"993426ed": "withDrawReward(uint256,uint256)", +"993444a4": "_decode_sol_int128(uint256,bytes)", "993480cf": "calculateRequiredVerifiers()", "99348e90": "rewardsFunds(address,uint256)", "99348f8e": "eggAvailable(uint16)", +"9934d15b": "startDecimalPercent()", +"9934d7c3": "registerTournament(address)", "99351742": "distributePrize(uint256)", "99352c42": "updateBtsPoint(uint16,int256,uint16)", "99358876": "maxMintCookie()", "9935935f": "setResolveHandler(bytes,address)", +"9935a666": "getBack(address)", "9935b968": "jesterBank()", "9936746a": "DepositReceived(address,uint256)", "99369801": "presaleTokenBalance()", +"9936cd54": "setEverydayIncome(uint256)", "99372321": "test(bytes32)", +"99374642": "roles(address)", "993783fc": "eraFromMokenData(bytes32)", "99379718": "GimmerToken()", +"9937e555": "mintxBuoyToken(uint256,uint256,address)", +"9937edfe": "collateralRateCurrent(address)", "99384976": "setFounder(uint256,address)", "9938579b": "getStatusTransferFrom()", +"99386144": "holders(bytes32)", +"99387386": "OrganizationAdded(address,string)", +"9938ad01": "timelockTime()", "9938b0de": "setPublisherCut(uint128)", "9938be42": "getPOOL_edit_19()", +"9938c974": "transactioncount()", +"9938ddc8": "trollbox()", "9938fdd1": "downTick(address,uint256)", "99393132": "onBurnCalled()", "99395b1e": "OffMenuMorsel()", +"99396ace": "removeDepot(address)", "993ab58e": "setTournament(address)", +"993ac21a": "enhanceStrengthRateByIndex(address,uint256,uint256)", "993ae7e9": "updateUserBalance(address)", "993af624": "BrehonContract(address,address,uint256,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", "993b4f71": "transferBag(address,uint256)", @@ -87644,179 +160407,331 @@ "993bcc63": "enableTokenBurn()", "993c78fa": "getMintApproval(address)", "993ca7e3": "RTB1()", +"993cadbd": "flpToDeposit()", "993d1123": "BoltToken()", "993d13bd": "PRE_ICO_MAX_CAP()", "993d29fc": "Mindmap_Token(uint256,address)", "993d3489": "investorShortInfo(address)", +"993d73aa": "debugDdd()", +"993e00a8": "accruedIndex()", +"993e8b95": "isTokenBound(address)", "993eaefa": "TravelWithMeToken()", +"993ec066": "SetLockTokenInfo(address,uint256,uint256)", "993eda02": "giveArtworks(uint8[],address,uint256)", "993f3197": "TOSInstitutionsHoldingContract()", +"993f3639": "UNFREEZE_DELAY()", "993fd4de": "setTokensSource(address)", "99404433": "levelup(address,uint256)", "99405ad7": "NewTokenSale(address,address)", +"9940686e": "bond(uint256)", +"9940ce5f": "removeFromFeeList(address)", "9940fb5d": "convertToMeth()", +"994126d7": "getDirectLength(address)", "99413b4e": "connectToken(address)", "994162cd": "BasicTokenStorage()", "99418a21": "signEthereum(bytes32)", +"9941b2fc": "isFinalizedAsInvalid()", "9941e3d0": "setCallAddress(address)", +"99424d47": "CrowdsaleClose(uint256)", "9942aa4d": "create(address,address,address,address,address,address,address,string,string,string,string)", "9942ce36": "_initializeLockupStages()", "9942ec6f": "f2()", "99433fc3": "GreenWorldFarmToken()", "99434669": "fabricoin()", "99439089": "validatorContract()", +"9943d669": "check(int256)", "99444e30": "ICOprice()", "9944b729": "withdrowTokens(address,uint256)", +"9944cc71": "getData1()", "9944d5e7": "burntBounty()", +"9945098b": "_updateIndexForIndexCode(uint256,uint256)", +"99452393": "totalExtra()", "99456542": "getLargeBonusStopTime()", +"9945b8b0": "setBankEntryAddress(address)", +"9945d2ef": "approve_736(address,uint256)", "9945e3d3": "redeem(bytes)", +"9945e70e": "canTransferByPartition(address,address,bytes32,uint256,bytes)", "99464c89": "freezeAll()", +"99469777": "eraseDeployerAddress()", "9946b9a5": "disable(uint256)", +"9946ce7d": "getTokenFromIndex(uint256)", +"9946d835": "OnNewGame(uint256,address,bytes32,uint256,uint256,uint256,uint256)", +"9946f47a": "cEBlock()", +"99473a66": "GetAllAuthors()", +"9947ea94": "AuthorizedAddress(address,bool)", +"994818db": "changeReferPercent(uint256)", "994828a1": "BabyBearToken()", +"9948bae8": "publicSaleTokenSold()", "9948e493": "calcMarketFee(bytes,uint256)", +"99494abd": "updateLpSplits(uint32,uint32)", "99497349": "setData_29(string)", "994977e5": "finalizeRent(uint256,uint256)", +"9949c9e9": "bets900(uint256)", "9949f0c8": "convertEthToWeth()", +"9949f14b": "requestWithIdHasFailed(bytes32)", +"9949fd55": "mycan(address,uint256)", +"994a40b6": "changeCoolDownSeconds(uint256)", "994a69d1": "centsToTokens(uint256)", +"994a8a71": "isKeyOwner(uint256,address)", +"994a9366": "OwnerAdded(address)", "994aca84": "TrenoToken()", "994b1a0f": "changeDivCardAddress(address)", +"994c748b": "setParentBlockInterval(uint256)", "994cc574": "setAyantDroitEconomique_Compte_9(uint256)", +"994d1ee9": "claimWayfarerTitle()", "994d3969": "whitelistStart()", "994d3be3": "publishFunctionMessage(uint256,string,string,string)", +"994d79ad": "getLiftoffPartnerships()", +"994e3349": "transferApprovedErc20(address,address,address,address,uint256)", "994e5267": "SetMaxAttempt(uint8)", "994ebbe3": "signUpForPVP(uint32)", +"994f0644": "backX2()", "994f2e10": "getUpdateDerivePayoutDistributionHashValue()", +"994f92bf": "getVoterID(string,string)", "994fb25f": "FileNameInt()", "994fe290": "verificationListMap(uint256)", "994ff619": "setKitty(address)", +"99502012": "seasonalNumberEndPrev()", "9950ace1": "rollRoom(uint256,address)", +"9950f425": "NewPetition(uint256,string,string,address,uint256,bool,uint256,uint256,uint256,string,uint256)", "9951a2c8": "createTeamSaleAuction(uint8,uint256[9],uint256,uint256,uint256)", +"9951f827": "INCOME_NUMERATOR()", "9951fc72": "TokenVesting()", "99522297": "preCrowd_tokens_scaled()", "9952b63d": "_receiveDonation(address,uint256)", +"99530b06": "pricePerShare()", +"99532ae7": "CREATE_PROXY_ACTIONS()", "995344da": "_updateVoucherMthEthRate()", +"995363d3": "bZxContract()", "99538898": "addTeamAddressInternal(address,uint256,uint256)", "99540fe0": "normikaivo()", +"9954a4af": "find10Percent(uint256)", "9954cf22": "JUST()", +"9954f738": "ViewBoard()", "99552af1": "multiInvokeWith2Args(address,string,address[],uint256[])", "99554e7b": "getNextFetchTime()", "99554fb7": "distructVault()", +"99556494": "addressPool()", "99556615": "calculateProfitGameType2(uint256,uint256)", +"99563f10": "setCallProtectedMethod(bool)", "9956587e": "REGISTERFEE()", +"99567187": "buyTokensSpec(address,uint256)", "9956a28c": "mediumBuy()", +"9956acf1": "uniswapInterface()", +"995770e9": "checkIfSame(uint256)", "995771b9": "CarnageToken()", "995783d9": "ERC20(uint8)", +"9957930d": "nameIndexToOwner(uint256)", +"9957a658": "createAndFund(uint256,uint256,uint256,string,string,string,uint256,bytes)", "9957ad05": "withdrawCreator()", "9957f3e6": "KvantorToken()", +"99581f46": "getTokenBalanceInPair(address,address,address)", "99583417": "transferMultiple(address,uint256[],uint256[])", +"9958344f": "initialTokensGenerationFinish()", "995893e6": "_createRole(bytes32,address[])", +"9958c052": "WITHDRAWAL_DEADLINE()", "9958c661": "getstate(address)", "9958d553": "max_creation_rate_per_second()", "9958f045": "drasticMeasure()", +"99598a7e": "exchange(uint256,address,address[])", +"9959a56b": "withdrawChange(uint256)", "995a15a8": "TouristToken()", "995a299e": "setCurrentSeller(address)", "995a2b52": "DeusETH(address)", +"995a672b": "proposalsSupply()", "995a7174": "_toLeconte(uint256)", "995ab62e": "GAS_LIMIT_IN_WEI()", +"995ada57": "submitClaimForMember(uint256,address)", "995b129f": "setAirDropManager(address,address)", "995b2cff": "executeAffirmation(address,uint256,bytes32)", "995b2e2c": "getUnreadMessage(uint256)", "995b40f3": "_getNextAuctionPrice()", "995b4a80": "LogTokenSent(address,bool,string)", "995b5aae": "feeInfo()", +"995c5e9d": "contributed(address)", "995cb4ec": "doWorkAndPayEAT()", +"995cc172": "docAmountToRedeem(address)", "995cc82b": "powerTotalSupply()", "995cd653": "createSale(uint256,uint256,address)", +"995cf8bf": "func_00001F6B(uint256,uint256)", "995d9ab7": "getTags()", +"995d9b60": "particleCollector()", +"995e0d91": "calcPrincipalAndInterest(uint256,uint256)", +"995e2e47": "_sellFeePct()", "995e4339": "getResult(uint256)", "995e599d": "ARCONA()", +"995eb21d": "eventVestingBalances(uint256)", +"995ed99f": "getGovReceipts(address,address,uint256[])", +"995f47ce": "createTrip(string,uint256,uint256,uint256,uint256,uint256)", "995f80e9": "NewSoftCap(uint256)", "995fac11": "migration(address,address)", "99600baa": "SVIP()", "99603bfe": "CryptoDuelCoin()", +"996073b2": "depositDetails(address,uint256)", "9960d947": "grantKudos(address,uint256)", +"9961364d": "getPreSaleWeiToReturn(address)", "99613a3f": "metaSet(address,uint256)", "9961476c": "MatchBetting(string,string,uint256,address,address,uint256)", +"99617d3c": "miVaultsFundSharedPercent()", +"99619fa6": "totalSuperNodes()", "996301e4": "claimTimeoutEnded(bytes32)", +"996307fc": "newKeyRingAndDaiWithdrawal(address,address,uint256,address,uint256,bytes,bytes)", "9963181e": "setAyantDroitEconomique_Compte_10(uint256)", +"99635187": "distributionContract2()", +"99638d3a": "updateValuePoolUnminingFee(address,uint256,uint256)", +"9963a5d5": "totalPrize(address)", "9963a8e0": "fund(bytes32,string,address,uint256)", "99645ba2": "changeStepLockFlag(bool)", "9964622c": "_setPendingAnchorAdmin(address)", "9964935e": "makePayout()", "99649d06": "setInitialDeposit(uint256)", +"9964d890": "notifyMintAmount(uint256)", +"9964e177": "updateStake()", +"9964f9ef": "burn_my_prf(uint256)", +"99650862": "messageHashFixed(bytes32)", +"996517a5": "lpBoostRatioByToken(address)", "996517cf": "mintLimit()", "99651db8": "addShares(uint256)", +"996538ad": "WITHDRAW_GRACE_PERIOD()", "99653fbe": "submitVote(uint256,uint8)", +"99656164": "capture(address,uint256)", "9965b3d6": "claimProxyOwnership()", +"9965cc91": "dotc()", "9965ea53": "setPFManager(address)", +"996628c7": "func_3A5F()", +"99665292": "DsVDV(uint256)", +"9966b2d1": "_addArtemMarkets(address[])", +"9966f0c1": "adjustDirectCount(uint256,uint256,uint256)", +"9967062d": "sum(int256,int256)", "99671dfb": "Sacacoin()", +"996737b7": "getSynthValue()", "99678b43": "setFunctionThreePrice(uint256)", +"9967f7cd": "totalGardenSupply(string)", +"99680d57": "enterToJo(string,uint256,string)", +"99681aa6": "checkUpdateAgain(uint256)", +"99686a39": "Death(uint64)", "9968b87b": "SogetiTestCoin()", +"99690178": "PROPOSAL_DEFAULT_VOTE()", "99693026": "setInitialState(address[],uint256[],address[],uint256[100][],uint256[],uint256,uint256,uint256,uint256)", "99694cf2": "WIKICOIN(uint256,string,uint8,string)", +"9969538b": "chefUpdate(address)", +"99698b58": "totalHUDLSupply()", "9969b256": "sendOwnersBalance(address,uint256)", +"996a06ec": "UserActiveStatusChanged(address,bool)", "996a4be3": "uintToBytes(uint256,uint256)", +"996a6f82": "suspendAddr(address)", "996a8046": "__callback(bytes32,string,bool)", "996b434a": "littID()", "996b8b76": "updateIndividualCertificate(string,bytes32,bytes32,bytes32)", +"996bc292": "updateStakingPoolAdd(address)", +"996c7ed4": "send1(address,uint256)", "996cba68": "claim(address,address,uint256)", "996ccf0b": "CockToken()", "996d21aa": "privateTotalSupply()", "996d2d65": "addAtkBossQuest(address)", "996d310d": "resumeTransfer(uint256)", +"996d50bf": "uploadFile(string,string)", +"996d79a5": "ovmADDRESS()", +"996d8316": "setLodge(address)", +"996df2ad": "checkForOldHydroID(string,address)", +"996e81a7": "lastMiningOccured()", +"996e96f0": "getLPAddress()", "996ea781": "getOrganName()", "996ec1f3": "BigBlockCoin()", "996ed6e1": "TransactionSucceeded(address,uint256,string,address)", "996f3247": "closeWall()", "996f677b": "icoInvestmentsCount()", +"996f6d3b": "minBPriceTime()", "996f7602": "GetTotalMinerCount()", +"99702507": "findPercent(uint256)", "99704b65": "isAcceptedImportingAuthority(address)", "997072f7": "getMemberCount()", +"9970b752": "updateDataUser(address,string,string,uint8,string)", "9970e26b": "ParyToken(string,uint8,string)", +"99713e95": "addAgicFundPoolWhiteList(address)", +"997164bd": "exercise(string,uint256)", +"99718fbc": "setRules(uint256,uint256,uint256)", "9971b98d": "getDesign(uint256)", "9971c6ce": "gupToken()", "99721229": "amountForBonus()", +"9972161e": "splitForStack(address,uint256,uint256)", +"997233e2": "balanceOfBonds(address)", +"997235ac": "setUniswap(address,address)", "9972b76c": "haltedFX()", +"9972dc03": "BondYearsTypeLength(address)", +"99734872": "setTargetLiquidity(uint256)", +"99734fe4": "getHydroId(address)", +"99737355": "contentIdentifier(uint256)", +"997392d5": "SetUSDT(address)", "9973b827": "totalLotteryValue()", +"9973bb08": "pubOfferingFinished()", "997402f2": "liquidityAdd()", +"9974d431": "getLoansForTrader(address,uint256,bool)", +"9974fc7b": "isNotWhiter(address)", "9975038c": "burnAll()", "9975091a": "pausePreSaleRound()", "997519f2": "SingularityNetTokenMock(address,uint256)", +"99752928": "alterMaxPrize(uint256)", +"99753623": "updateApplicationLockdownState(bool)", "99753de7": "clear_level()", "99755bab": "ICOCents()", +"99757f9b": "addParticipant(uint256,uint80,address,address)", +"99758702": "balanceLockSH()", +"9975a22d": "meeOracle()", "9975c06b": "logDebug(string)", "99761662": "YouWin(address,uint256,uint256)", +"99762734": "USDTContract()", "997636ec": "play(string,uint256)", "997664d7": "totalDividends()", +"997668e5": "totalAwardSystem()", "997676c3": "checkWhitelistExist(address)", "99767aa9": "FLC(uint256,string,string)", +"9976cf45": "increaseTroveDebt(address,uint256)", "9976d32a": "coinOwner()", "9976f5c5": "ProofOfDoge()", "9976f9e1": "setAgriChainCultivation(address)", +"99770ead": "maxSatking()", "99771006": "GLORY()", "99777d9d": "isPublicTokenReleased()", +"99779ec4": "addressofsender()", "9977a108": "isCollected(address,bytes32)", "9977b698": "startTokensSale(uint256,uint256,uint256,uint256)", +"9977c78a": "senders(uint256)", +"99788dbd": "calculateAssetChangesForRebalanceToSnx()", +"99789548": "setBurnrateMAX()", "99789670": "Initialized(uint256,uint256)", "9978be95": "TOKENS_ADVISORS()", +"9978d487": "updateItem(uint256,string,string,uint256,uint256)", "9978f01b": "setExchangeRate(address)", +"9978fc56": "createFuturesContract(bytes32,uint256,uint256,uint256,bool,uint256)", "997995ec": "revealResultUncleMerkleProof(uint256,uint40)", "9979b7aa": "CETACEA(address)", "9979c009": "buyItem(uint256,uint256)", "9979ef45": "placeBid(uint256)", "997a0229": "_newPrice(uint256)", "997a12fa": "attowethBalance()", +"997a2572": "stabilityFee(address)", "997a2c1c": "numberOfMyComponents()", "997aa31f": "sellChannel(string,uint256)", +"997b11d2": "enrolledAddresses(uint8)", +"997b645d": "alphaJobsManager()", +"997b946b": "setMinimumBalanceForClaim(uint256)", "997bc6c9": "int2str(int256)", "997c44e4": "setLockRate(uint256)", +"997c65a5": "recordEthAddrCount()", "997c88ba": "calculateCurrentDistanceInRange(address)", +"997cc923": "closeFuturesPositionForUser(bytes32,bool,address,uint256)", +"997ccf6b": "rollbackasdf()", "997ce600": "endauction(uint256)", "997cf69c": "dataset_sha256checksum()", +"997cfbcd": "playOncePrice()", "997d2df8": "asserti(bool)", +"997d3bd6": "earnedCurrent()", "997d8473": "reserveBalanceMap(address)", "997dd1c6": "dealHitCard()", "997e02d9": "wormholeIsOpen()", +"997e49de": "setUnstakeBurnFee(uint256)", +"997e5b01": "setrefused(address,uint256)", "997f0198": "setImageHeight(uint256,uint16)", "997f35ac": "RewardOffer(address,address,bytes32,uint256,uint256,uint128)", "997f50d8": "getCurrentTierHardcap()", @@ -87827,76 +160742,167 @@ "99808aff": "winningTicket(address)", "9980dee2": "calculateHash(address,address,uint256,uint256,uint256)", "9980ec86": "getAmount(uint256)", +"9980f400": "circularityPerBlock()", "99817b47": "releaseVestedTokensForBeneficiary(address)", "9981bd61": "requestTokenExchangeMax()", +"9981d6d3": "newsCount()", "99820e96": "finishSunning()", "9982257b": "hotQuestion(uint256,uint256,uint256)", "998282e9": "winners(uint32,uint32[],uint64[])", "9982e7ed": "updateBillionsCoinsRemainingToDrop()", +"99831478": "changeInvestorAddr(address)", +"99831924": "_updateBaseURI(string)", +"99835609": "findFreeO6Referrer(address,uint8)", +"9983757a": "approve_397(address,uint256)", +"99839d66": "xReserve()", +"9983bb03": "inbestDistributionTransferTokens(address)", +"9983c3d9": "Give(address,address,uint128,string)", +"9983ce51": "layingEggDeductions(uint32)", +"99840b7a": "minTradeSplit()", "998446a8": "acceptRequest(uint256,bytes)", +"998451c3": "createPool(uint256,uint256,uint256,uint256,uint256,address,uint256,uint256)", "99847f77": "addUnsoldTokens()", "9984f30d": "setMaxValue(uint256)", "99851eac": "updateCards(uint8,uint256[])", +"99857194": "_getOwedSalarySinceLastPayroll(uint256,bool)", +"99857463": "codeStatus(uint256,bytes32)", +"998614cb": "internalInventoryMax(address)", "99863b5c": "canChangeOwnerParams()", +"998692ed": "tip(uint256,uint256,string)", +"9986a0c6": "setCoo(address)", "9986d936": "setRestrictedPercent(uint256)", +"998745aa": "addReaderToMedianWhitelist(address,address)", "9987680b": "play(address,bytes32)", "99878d5b": "play_scissors()", "99879bb9": "startTimeInSec()", "9987b2d2": "getProposalIndex(address,uint256,bytes32)", "99882cdb": "propose(bytes32)", +"998834a3": "UpdateEnableProfitDistribution(bool)", "9988807d": "centsReceived(address)", +"9989948f": "isValidLandSector(uint256)", "9989a5ae": "setLimitOfParticipants(uint256)", +"9989f93a": "setIsEligible(uint256,uint256,bool)", "998a1f96": "preICORaised()", +"998a1fb9": "PolicyValueIn(address,uint256,uint256)", +"998a24f4": "_newAction(uint256,address,bytes)", +"998a610c": "takenNicknames(bytes32)", "998ac104": "AIRDROP_TRANSIT_ADDRESS()", +"998aca42": "crowdSaleSupply()", +"998acd2c": "getBNBCurPriceOfUSDP(uint256)", "998b022e": "_mintPrimordialToken(address,uint256)", +"998b4792": "addCoinFactoryAdmin(address)", +"998b6e66": "sendTokensByAdmin()", "998b723b": "waterTree(uint256)", "998b894a": "isLegalTime()", "998bac16": "bulkTransfer(address[],address,uint256[])", "998be0d7": "sendTokenToSingleAccount(address,uint256)", "998c4f5a": "setEthExchangeWallet(address)", +"998c5411": "setAdminEth(address,uint256)", +"998c829b": "addModel(string)", "998cab7e": "getTransformTarget_pool(address)", +"998cf4d6": "lastNoOfConfirmed()", +"998d2a65": "suppliedInUnderlyings(address)", +"998d3f58": "NextAudits()", +"998dd3ca": "animals(uint256)", +"998e5b91": "TransferStart()", "998eb4cf": "getRank03()", +"998f1b80": "players(uint256,uint256)", "998f9203": "INCash()", +"99900d11": "getAlias(address)", +"99906bb8": "setAMBBridge(address)", "9990b3a3": "getPreSaleWallet()", "9990db92": "CryptoSureToken()", +"99911a8a": "checkGateKeeper()", "999122f4": "BHK()", +"99921f3d": "profitOfPool_legacy(address,address)", +"9992b093": "BuyBackFund(uint256)", +"999376a5": "collectTimeOf(address)", "999377ec": "acceptBlokTokenOwnership()", +"9993d669": "getLatestUpdateHeight()", +"9993e83d": "getIlkRatio(bytes32)", "9993fa94": "balanceOfSender()", +"9993faca": "OUTrelease()", +"99940ece": "stEth()", +"9994ad55": "isOnSale(uint16)", "9994e112": "AddContact(address,bytes32,bytes32,bytes32,bytes32,bytes32)", +"9994eb14": "transferPayback(address,address,uint256)", "9995bbf7": "ethforp3dbuy()", +"99964d11": "getDeveloperPresaleInvestmentLimit()", "99967819": "lastaction()", +"99969dd1": "setCollateralBorrowRate(address,uint256)", +"9996cde5": "CONFIRM_TRANSACTION_TYPE_HASH()", "9996eb64": "batchNewAccount(address[])", +"99972d6b": "NOIA_TOKEN_ADDRESS()", +"9997640d": "setInterestSetter(address)", +"999770ac": "getCaClaimVotesToken(uint256)", +"9997c57b": "accTKNVPerShareMultiple()", +"9997d09f": "predictionContract()", +"9997e137": "petContract()", +"9998aeaf": "basePrice12()", +"9998e038": "lockedDeposit()", "99999342": "GetBonusInv()", "9999aae5": "EYTToken()", "9999bd2e": "RATE_PRESALE()", "9999d2ae": "getSubmissionCount()", +"999a3939": "startNewRound(address,address,uint256,uint256,uint256,uint256)", "999a9965": "setMany(uint256,int256,uint256,bytes,address,bytes)", "999b078e": "isSoftCapHit()", "999b5c72": "FASET(uint256,string,uint8,string)", +"999b93af": "quote()", +"999bb54f": "registerChain(string,string,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"999bb7ac": "tokenToTrxSwapInput(uint256,uint256,uint256)", +"999c3089": "pendingWALLST(uint256,address)", +"999c7618": "checkparticipantinstaking(address)", "999cbaf5": "Deposit(address,uint256,uint8,uint256)", +"999cc716": "setx5Address(address,address)", "999cef04": "PublishWorldCupResults(bytes32,bytes32,bytes32,bytes12)", +"999cf26c": "allowedToTrade(address,uint256)", "999d350d": "totalBonusGiven()", "999d3947": "getGenes(uint40)", "999d46b9": "transferInterviewer(address)", +"999d8079": "selfTransfer()", +"999d8f1a": "setAssetPrecision(address)", +"999db345": "setMinUpdatePeriod(uint256)", "999dd03e": "poolAddressCapTier2()", "999eb6b1": "balanceOfThis()", +"999ec0a0": "sellingList(uint256)", +"999efec8": "ReserveDataSet(address,uint256,address)", +"999f0be2": "addUpgradeable(address)", "999f18a6": "unsigned()", "999f4b38": "sellDividendPercent()", "999f5644": "Stoppable()", +"999f5b5e": "getwithdrawalHandler()", +"999ffd97": "getPendingReward(address,uint256)", "99a032ce": "isCurrentAccountReader(address,address)", "99a03c70": "realBalanceOf(address)", +"99a05726": "viewNeedBetEther(uint256)", +"99a13409": "tokenToTrxSwapOutput(uint256,uint256,uint256)", "99a17344": "setHiddenLogic(address)", +"99a186a6": "updateMinTokensBeforeAddToLP(uint256,uint256)", "99a1a412": "getModeratorCount()", +"99a23b65": "genesisEndTimestamp()", "99a2e1ec": "roundLatLngFull(uint8,int256)", +"99a2f2d7": "cID()", +"99a36232": "redeem(uint256,bool,address)", +"99a36242": "balanceOfJuld()", "99a3e03f": "testNegativeIntegerKeyValue()", "99a3f0e8": "right70(uint256)", "99a44e68": "BEXP()", "99a48638": "packSettings(uint256)", "99a48e17": "FinalizableToken(string,string,uint8,uint256,address,uint256,address[],uint256[])", +"99a4ca39": "btcToBProx(uint256,bytes32)", +"99a4d201": "setShare(uint256)", +"99a56e21": "INIT_TOTALSUPPLY()", +"99a5a1b7": "totalDrakonsDeployed()", "99a5d747": "calculateFee(uint256)", +"99a5e1d0": "tknContractAddress()", "99a6993b": "KCCTOKEN()", +"99a6bab9": "totalContribute()", +"99a6d686": "setRedeemFactor(uint256)", +"99a6e45a": "getUserById(uint256,uint256)", "99a6f7d2": "createReserveTokens()", "99a752d7": "setPriceETH(uint256)", +"99a7626a": "getRunnerFollowingTeam(uint256)", "99a79790": "startTimeSale2()", "99a7b857": "FundsWithdrawal(address,uint256)", "99a7b884": "getBuyerFullInfo(address)", @@ -87904,60 +160910,119 @@ "99a856e3": "firstBonusRate()", "99a88ec4": "upgrade(address,address)", "99a8f2fe": "EncryptedToken()", +"99a9931e": "NewPriceTicker(string)", "99a9a04c": "BITStationERC20()", "99a9ccb2": "preMinedSupply()", "99a9f1b5": "totalStakingUnits()", +"99aa05a7": "retiredBalanceOf(address)", "99aa5d97": "Pixel()", "99aa93c8": "numSales()", +"99ab8ae2": "collateralShortfall(bytes32)", "99aba8e3": "distribute(address,uint256,uint256,uint256)", "99abaabb": "addMarketToWasCalled()", "99abd788": "FIRSTSALE_TOKENCAP()", +"99ac0569": "memberlistFab()", "99ac4569": "withdraw(uint64,address[],uint256)", "99acc3fd": "prizeshow()", +"99acef00": "closeBeastSale()", +"99ad427b": "setRestrictions(address,uint32,uint32,uint32)", +"99ad68a7": "lusd()", "99ad91c7": "AddAdmin(address,address)", +"99ad947e": "testCalculateInterestIndex_BlockDeltaRatePlusOneMulStartingIndexOverflow()", +"99adc78a": "toInt(int128)", +"99ae559d": "claimers(uint256)", "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)", +"99affe65": "BalanceAdj(address,address,uint256,string)", +"99b015f0": "stakeIncvRewards(uint256)", +"99b017ab": "ecrecover(bytes32,bytes8,bytes32,bytes32)", +"99b03223": "setMappingFee(uint256)", +"99b046a8": "transferTeamReserveTokens(address,uint256)", +"99b06fe4": "lastMergedRound(address)", +"99b0c08a": "x_adminSetDAPPEnabled(bool)", "99b0dc4d": "areAllUppercase(bytes16)", +"99b16efd": "stimulus()", "99b1adbf": "isUserMember(address)", "99b22701": "delBackend(address)", +"99b23dc3": "payment(address,address,uint256)", +"99b23f13": "set_feeWallet(address)", +"99b27994": "recordMint(uint256)", "99b29044": "getPropertyEarnUntil(uint16)", "99b2a233": "offlineGuardianSold(uint256,address,uint256)", +"99b2baed": "delegates(uint8,address,uint8)", +"99b2e485": "slateSubmissionPeriodActive(address)", +"99b33a0b": "setAllowWithdrawInEther(bool,address,address)", +"99b3944f": "discountFeeList(address)", "99b465cb": "currentSegment()", "99b47af8": "reveal_test_data_groups_block_size()", "99b4a0c6": "BTRL()", +"99b51a5c": "claimReward(address,uint8)", "99b55343": "termsNumber()", +"99b583aa": "getNextKeyRing(address)", "99b58f06": "icoPushAddr(uint256,address)", "99b5b2fa": "horseIndexPrice(uint256)", "99b632e4": "winnovate()", +"99b6dd7f": "NewKarmaVoter(uint256,uint256,address,uint256,uint256,uint256,bool)", "99b6f5a1": "sendAdvisorsTokens()", +"99b71d5c": "approveToken()", "99b721a5": "rewardEthAnd(address[])", "99b77032": "setMinBuyLimit(uint256)", +"99b77b6b": "totalLotteryReward()", +"99b78795": "service_valid_till(address)", "99b83f3d": "setMaxRedemption(uint256)", +"99b84c76": "eventAddresses(uint256)", +"99b88fb6": "placeOrder(string,string,int256,int256)", "99b8a3f0": "charityBalance()", "99b8e366": "reloadPlayerInfo(address)", +"99b943c6": "atxChanges(address)", +"99b956a0": "Users(address)", +"99ba69eb": "_tokenToToken(address,address,uint256,uint256)", "99bac5c9": "setMinCustomerBalanceETH(uint256)", "99bad2cd": "testAddExistingVoter()", +"99bb5856": "sendClaimPayout(uint256,uint256,uint256,address,bytes4)", "99bb8134": "approveMany(address,uint256[])", "99bb875c": "funeralAndBirth(bytes,int256,bytes)", +"99bbef35": "publishBonds(uint256,uint256[],uint256)", "99bc0aea": "expiryTime()", +"99bc1873": "creditLimits(address)", +"99bc3ee4": "deposit7(uint256)", +"99bc5ec3": "coinVelocityVerifier()", "99bc826e": "intMemoryArray()", "99bcb1a1": "thirdWeekMainICOBonusEstimate()", +"99bcf6c8": "updateNetworks(address,address,address,address)", +"99bd100b": "reStartMinting()", +"99bd48a6": "updateEdgexSource(address)", +"99bd59ee": "castleLootDistributionThreshold()", +"99bd73d4": "createNFT(address,string,string,string,uint256,string)", "99bdc9c2": "AdminAddition(address)", +"99be90dc": "earnExtra(address)", "99bea0bd": "AllForOne()", +"99bec315": "modifySAFECollateralization(bytes32,address,address,address,int256,int256)", +"99bf1f62": "heroIdToRefundedFee(uint256)", +"99bf954c": "layingEggLevels(uint32)", "99c0058c": "getAttackPlayerList()", +"99c15d5e": "startAirdropTESLA(uint256,uint256,uint256,uint256)", +"99c1aadc": "requiredApprovals()", "99c20c34": "percentToFoundersAfterICO()", +"99c226d4": "updateMasterFeatureList(uint256,uint256[10])", "99c24d85": "SetCurrentRoomAndRound(address,uint8,uint256,bool)", "99c27d40": "updateGlobalMin(uint256)", "99c2af56": "setRateEarlyStage2(uint256)", +"99c2b74e": "test_addToFeePool()", "99c2b93b": "startCrowdsalePhase1Date()", "99c2bb40": "listAssetDocumentsFrom(bytes32,bytes32,uint256,bool)", "99c32025": "TwoPhaseTransfers(address[],address[])", +"99c423ef": "dividendFeeSellAlert_()", +"99c45c72": "nodeUnbondInternal(uint256,uint256,address)", "99c4644a": "putIdentityProvider(address,string)", +"99c4757a": "homelandLastUpdateTime(address)", "99c49852": "cancelOrder(address)", +"99c5702e": "AuthoriseStatusUpdated(address,bool)", "99c59bdc": "MadeBet(uint256,uint8,address)", +"99c5c8aa": "tokenUSDT()", "99c69d40": "getPremiumsAvailable()", "99c6d2de": "depositToken(address,uint256,uint256)", "99c6da4a": "UTWD()", @@ -87965,63 +161030,112 @@ "99c75517": "GetCompetitionInfo(uint32)", "99c8055d": "Enable()", "99c8268b": "totalBattle()", +"99c83f88": "trxnCount()", +"99c849b8": "typeCounters(uint256)", "99c87629": "getFibonziPlayers()", +"99c88a1d": "FUND_LOCK()", +"99c8a9bf": "addCertificate(bytes32,address,uint256,uint256)", "99c8d556": "tax()", "99c8fcba": "agreeBetWinner(uint256,uint8)", +"99c941a3": "OlchaHug()", +"99ca2d30": "proxyFundsTokenAddr()", +"99ca69e7": "FrozenCoinsByTime(address,uint256,uint256)", +"99ca856c": "commitments(address,uint256)", "99cac223": "getBallotIndex(address,bytes32)", "99caf208": "updatePendingManager(address,uint256)", +"99caf975": "swaps(address,address)", "99cb0823": "presaleBonus()", "99cbc1b9": "Bet(address,bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8,address)", +"99cbcf99": "reachardcap()", "99cc00d1": "getImageHeight(uint256)", +"99cc7f60": "totalOracleCount()", +"99cc9e73": "getParametersHash(address,uint256,address)", +"99cca36c": "isLocked(address,uint256)", +"99ccb9fe": "bulkClaim(address[],address[],uint256[],uint256[],address,bytes)", "99ccbec6": "claimByTeam()", +"99ccd747": "cryptopunksAddress()", "99ccf3da": "_increaseToken(address,uint256)", "99ccfd34": "forkUpgrade(address,address)", +"99cd1149": "_sz_enum(int64)", "99cd211d": "bountyTokensWallet()", "99cd40aa": "_setBytes(bytes32,bytes)", +"99cd56a9": "newRewardCalculate()", "99cdee0e": "own()", "99ce00a9": "VREO_SALE_OPENING_TIME()", "99ce12c1": "getAssetClaimString(uint256)", +"99ce2ab8": "check_lock_period(address)", "99ce919c": "goods(bytes32)", "99ceb6e6": "BTCReceived()", "99ceed71": "OwnerTokensBurned(uint256,uint256)", "99cf5582": "burnVotes()", +"99cf58ba": "setDefiStake(address)", +"99cf62cc": "setDepositTokenAddress(address)", "99cfe1e1": "issueCofoundersTokensIfPossible()", "99cfe743": "TotalGenesisAddresses()", "99cffe4d": "LinearBeam()", +"99d03f4c": "Withdrawl(address,address,uint256)", +"99d05001": "FEE_AMOUNT_DECIMALS()", +"99d07c04": "lock(bytes4)", "99d0f06c": "removeNotes(uint256[],uint256[],uint256)", "99d136f5": "multiSend(address[])", "99d18937": "getAllDSP()", +"99d18f6f": "confirmAuctionBid(uint256,uint256)", "99d1c413": "isEggFactory()", "99d1d002": "debug_blockHeaderMerkle(bytes)", "99d1e755": "getTeamWallets()", "99d22e48": "founderAllocated()", +"99d29985": "changeYfiTokenAddress(address)", +"99d31e82": "viewUserStarActive(uint256,uint256)", +"99d32fc4": "claimFee()", "99d3acd3": "EtherDeltaDepositToken(address,uint256)", +"99d3b410": "totalLPTokensMintedForFORKxSPOON()", +"99d40dcf": "setAuthorizedTokenAmount(uint256)", "99d413f4": "createDividendPercent()", "99d43acc": "organizerRegistration(string,string)", "99d4aec9": "getPurchaseRequests()", +"99d508c0": "totalVestingCount()", "99d50d5d": "getComponents()", "99d52baf": "test_startBool()", +"99d533d8": "BonusLength(address)", "99d5af62": "unLockBatchAddr()", "99d64ab0": "maximumFunding()", "99d67084": "numberOfInvestorsToWithdraw()", +"99d6c051": "percentageOfBalance(uint256,uint256)", +"99d6dca2": "removeLiquidityAndSwapToETH(address,uint256,uint256,address,uint256)", +"99d76860": "insurancetime(uint256)", "99d76e49": "setDragonName(uint256,string)", "99d786ca": "lastMonth()", "99d792a2": "releasePrivateSupplyVested()", "99d7dd25": "isEcoAllocated9()", "99d80ed9": "addService(bytes32,uint256)", "99d83b77": "BuyRC(address,bytes,uint256,uint256,uint256)", +"99d84045": "isPrecirculationAllowed(address)", "99d897f8": "sellForOtherCoins(address,address,uint256)", +"99d8c1b4": "initialize(address,address,uint256,string,string,uint8)", "99d9b306": "trancheMinTx()", +"99d9b9d8": "upload_param(string,string)", "99d9d1e0": "KNB()", +"99da1d3c": "wrappedAssetMaster()", +"99dac1e4": "ReclaimedAllAndBurned(address,address,uint256)", "99db626c": "LOG_SpinExecuted(bytes32,address,uint256,uint256)", "99db7eb7": "TapPoll(uint256,address,address,uint256,uint256,uint256)", +"99dbd65d": "bytesToBytes(bytes4)", "99dbff01": "buyCourse(uint256,uint256)", "99dc79d1": "getBracketScore(bytes8)", +"99dcbed3": "LogResponse(bytes32,bool)", "99dd1ed9": "estLiquidationCap()", +"99dd8df3": "paymentPeriodInDays()", +"99dd8ed9": "userEligibleWithdrawlTime(address,address)", "99ddb29b": "addressType(address)", +"99ddd1da": "ROUND_1_TOKENSALE_LIMIT()", +"99dde4e8": "setUnsuccessfulBountyFeeInWCKWei(uint256)", +"99dde62b": "showEventName()", +"99ddebfb": "deregistrationInterval()", "99de4fc5": "UNK()", +"99de6ba0": "sendToken(address[],uint256[],address[],address,string)", "99def960": "getcredibilityScore(bytes12,bytes12)", "99df3d7a": "setFunctionAuthorized(address,string,bytes32)", +"99df609a": "submitBet(uint256,uint256,uint256)", "99dfa711": "GetCurrentTypeStartTime(uint256)", "99dfedb4": "getTeamSumSkills(uint256)", "99e0021f": "mergencyCall()", @@ -88030,72 +161144,146 @@ "99e133f9": "init(address,address,address,address,address,address)", "99e1cc47": "calculateAndSendRefund(address,uint256,uint256,uint256)", "99e1d127": "filterWarriorAuras(uint256,uint256)", +"99e21973": "claimBlocks(uint256)", +"99e2484d": "LogInvestment(address,uint256,bytes)", +"99e25e6c": "streamRewardBoosted(address)", "99e2ab0e": "UpdateMinFee(uint256)", +"99e304bd": "setMaxSendPercentage(uint256)", +"99e30ba8": "getPastEpochRewardPercentageInPrecision(address,uint256)", +"99e32287": "updateYields(uint256,uint256,uint256)", +"99e32910": "setStimulusOracle(address,bool)", +"99e38ddf": "setWallets3(address)", "99e3a723": "verifyOwner(bytes32,address,uint8,bytes32,bytes32)", +"99e3b986": "BUY_D()", "99e47b2d": "DinoFarm()", "99e487a9": "F2UPhone()", +"99e59865": "harvesterList(address)", +"99e68786": "lpMasterPools(uint256)", +"99e68eea": "createOrUpdateNodeSelf(string)", +"99e6dabf": "getCurrentDFLAmount()", +"99e6f700": "rewardPerBlockNumerator()", "99e71b64": "secondBalance(address)", "99e74ce8": "tokenIdToHeroInstance(uint256)", "99e7c00a": "yaaay()", "99e7cedf": "cobeneficiary()", +"99e7d056": "implementationContract()", +"99e84c65": "setSubscriptionAccess(bool)", "99e8f303": "getM5Reward(address)", "99e91527": "dequeueAuditRequest(uint256)", "99e9376c": "buyWithCustomerId(uint128)", +"99e99c88": "SecondaryValidation(address)", +"99e9afc0": "yourStakedUNOS(address)", "99ea0fd5": "disputeAllReporters()", +"99ea54ae": "ListOFtokensOwned(address)", +"99eb59b9": "cache(bytes32)", "99eb6603": "initalize(uint256)", +"99eb6b72": "coinBalance(address,uint8)", "99eb975c": "TransID()", "99ec140d": "Tokensale()", "99eca69f": "withdraw(uint256,address[])", "99ecba80": "maxMinutesProposalPeriod()", +"99ed5000": "buyBeeInfo(uint256)", "99ed7b87": "getStrengthValue(uint256)", +"99ee27b5": "getBasicInfos()", +"99ee3572": "greaterThanUintIntFailTest()", +"99ee8423": "approve_24(address,uint256)", "99ee9076": "defendFee()", "99ef111c": "stopAddresses(address)", +"99ef4b87": "getAmountOut(uint256,uint256,uint256,address,address)", "99eff1f7": "nextElectionIndex()", +"99efff29": "intializeStageOne(address)", "99f02ab5": "getWinnerContractAddress(uint256)", "99f02b60": "IHFVesting(address,uint256)", "99f07bed": "_clearCommittedValidators(uint256)", "99f16c6e": "validateContribution(uint256)", "99f1718a": "getSiteItem(uint256,uint256)", +"99f1eb95": "ROI_PERCENTAGE(uint256)", +"99f24108": "morphTracker()", +"99f2daea": "balanceOfY()", "99f3379f": "getSolverAddress(bytes32,string)", "99f3487b": "testBoolKeyValue()", +"99f34c12": "MIN_SWAP_AMOUNT()", +"99f38f41": "calMinSignatures(uint256)", "99f49f0d": "vitPerWei()", "99f4b251": "mine()", +"99f50b76": "layer()", +"99f52d9e": "uploadPhoto(bytes,string,string,string)", +"99f553f5": "getIndex(uint8,uint8)", "99f5c357": "modultradeStorage()", "99f5c904": "momentValueOf(uint256,uint256)", +"99f5ca59": "lockTotal()", "99f6021d": "durationSec(bytes32)", +"99f63d40": "getConsumableFullAmount()", "99f65122": "getParam(uint256)", "99f6a693": "setMasterName(uint256,string)", "99f6d9af": "getTotalNumberOfRegisteredCompanies()", +"99f6f71c": "rewardlistpointer()", +"99f72352": "isPriceUpdate(bytes32)", +"99f808c5": "kyberTest()", +"99f82037": "nftMintWeight()", +"99f826a5": "getID(address)", +"99f85b18": "getBurnableDollarLeft()", +"99f88a9f": "lexDAOtokenUpdate(uint256,string)", +"99f8d18d": "set_new_SAI_TokenContractAddress(address)", +"99f91405": "getPendingClaims(address)", "99f91c5d": "updateAllRewPaid()", +"99f9b55e": "addRule(address,uint8,uint256[],uint8[])", "99f9be87": "TEX()", +"99fa45d6": "setParentStaking(address)", "99fa6ed7": "EthPledge()", +"99fac039": "setSwapSale(uint256,uint256,uint256,uint256)", +"99fafd7a": "isEnabledLock()", "99fb15d2": "distributionActive()", +"99fb7a8f": "mPoolInfo()", +"99fb9394": "pendingReward(uint256,uint8,address)", +"99fbab88": "positions(uint256)", +"99fbae18": "setEmergencyAsTrue()", "99fbe995": "Wallet(address[],uint256)", "99fbf3a2": "setRentPrice(uint256,uint256)", +"99fc451f": "_changeOwner(address)", +"99fc674c": "XADToken(uint256,string,string,uint256)", +"99fca7d9": "defaultFeeVotes(address)", "99fca937": "amountOfEthersOwnerCanWithdraw()", "99fd12f6": "etc()", +"99fd50c7": "a_b16()", +"99fd92bc": "getPresaleAddress(uint256)", "99fd9489": "endCrowdsale(bool)", +"99fdb320": "auctionToken()", "99fdc17e": "redenominatedValue(uint256)", "99fe18b9": "fightBoss()", +"99fe6aa3": "claimAndRestake(uint256)", "99fe6c88": "CashTCoin()", +"99fe85f5": "assignTo()", "99ff0246": "onRefund(address,uint256)", +"99ff13be": "getPrivateAddress()", +"99ff26de": "getDivisor(address)", +"99ffe065": "hasSubmitted(address,address,uint256)", +"9a001661": "LicenseCount()", "9a003b61": "checkRequiredChange(uint256,uint256)", "9a008d7b": "startPaymentProcess(address)", "9a01b4d5": "getChannel(address)", +"9a01be80": "stackMap(uint256,uint256)", +"9a01ca13": "unlockDisputeFee(uint256)", +"9a0271e1": "isInValidityPeriod(uint256)", "9a02d3ac": "unapproveWithdrawal(bytes32,bytes32,uint256)", "9a02edfe": "maxTokensPerAccount()", "9a033782": "addContractToTokenFallbackWhiteList(address,address)", "9a037aa0": "setReferralBonus(uint256)", "9a03d9a3": "setERC721Address(address)", "9a03fe1d": "Div(uint256,uint256)", +"9a043468": "setStrictToken(address,bool)", "9a0475e9": "ASHLEY_ADDRESS()", "9a04a4ed": "setOpenInterestInAttoEth(uint256)", +"9a04a9bb": "loadVersion()", "9a04ab73": "safeAddI(int256,int256)", "9a04b89e": "setGiftoAddress(address)", "9a04e602": "mintBounty(address,string)", "9a04f704": "guest()", "9a04fc8b": "getNodeParent(bytes32)", +"9a05087b": "MarketOrderClosed(uint256)", +"9a051545": "getMaturingTimestamp(address)", "9a05cd66": "_setNarcosCoreAddress(address,address)", +"9a0654af": "maximum_deposit_amount()", "9a065a60": "discountTokenAmount()", "9a065aae": "LMYY_Token()", "9a06671e": "CoinsRetrieved(address,uint256)", @@ -88105,10 +161293,21 @@ "9a0750d5": "tokenFundDeposit()", "9a0846f1": "MyKidsEducationFund()", "9a08623a": "withdrawFromToken()", +"9a08c773": "ExchangeForETH(address,address,uint256,uint256)", +"9a08ece8": "setAcceptedPayTokenAddress(address)", "9a0907c2": "contributeAndVest()", +"9a099fee": "getCarro()", "9a09a8ef": "getCoinByCount(uint64)", +"9a0a51ee": "depositInto()", +"9a0a78c0": "approve_365(address,uint256)", +"9a0a8063": "approveGloballyTrustedProxy(address,bool)", +"9a0a8936": "breedExists(string)", +"9a0a9fdc": "ercToErcBridgesAllowed()", "9a0af2ec": "getStLength()", "9a0b2db3": "withdrawFeeEntitlement()", +"9a0b85c3": "IODPerEther()", +"9a0ba2ea": "registeredTokens(uint256)", +"9a0bfee4": "minimumBskPerBlock()", "9a0ca07d": "changeLocked(bool)", "9a0d4f40": "PRESALE_PERIOD()", "9a0d6247": "withdraw(uint8,bytes32,bytes32,uint256,uint256)", @@ -88116,14 +161315,24 @@ "9a0e7d66": "getTotalVotes()", "9a0e7e8e": "secondSaleDelivery(address,uint256)", "9a0e9e50": "newPoll(uint256,uint256,uint256)", +"9a0ef025": "getBurnoutAddress()", +"9a0f09fc": "addon(uint256)", "9a0f1561": "prizeDeposit()", +"9a0fd5a6": "getNextBestOffer(address,address,uint256,uint256)", +"9a103a87": "getAttackInfo(uint256,uint256)", +"9a10b8dc": "Pressed(address,uint256)", "9a10f719": "setFreezeAddress(address,bool)", "9a10f819": "buyOracle(bytes,address)", "9a114fb0": "_Challenge(bytes32,uint256,uint256,string)", "9a116ca1": "implementationCall()", +"9a1185cb": "xtokenSwapMint(uint256)", "9a1295d9": "getPassportLogic(string)", +"9a13ff4c": "ru()", +"9a1405e2": "minPastBlockActivate()", "9a14228e": "getEntryPrice()", +"9a14870a": "ManagerIsChanged(address,address)", "9a158883": "BOBOToken()", +"9a15a5b8": "read(uint256[])", "9a15f4f3": "getBlockHeader(int256,int256)", "9a160ad9": "MeissaToken()", "9a163c44": "currentVotingAmount()", @@ -88131,89 +161340,155 @@ "9a166299": "getMyAddress()", "9a167613": "forceConsume(uint256)", "9a16a7e3": "getAccountInputSdcslength()", +"9a16be46": "deleteBunnyCost(uint32)", +"9a17b506": "UniswapPoolAddress(address)", +"9a17d8c1": "getTransferFee()", +"9a182e94": "pre_kyc_bonus_numerator()", +"9a18347c": "loopCloses()", +"9a185a2a": "estimateAirdrop(address)", "9a18a5ba": "NEXPARA(uint256,string,string)", +"9a18b08f": "UpgradeHunter(address,string,uint256)", +"9a18fd25": "totalAwardRanking()", +"9a19276e": "withdrawERC20Tokens(uint256)", +"9a198d61": "registerMe()", "9a19a953": "setInt8(int8)", +"9a19c7b0": "revokeAdminRole(address)", "9a1a661e": "entranceFeePool()", +"9a1aa0c9": "approve_662(address,uint256)", "9a1ac4b2": "OpenAddressLottery()", +"9a1b418b": "Destruction(uint256)", "9a1b420b": "OraclizeAddrResolver()", +"9a1b7740": "ownerAddress2()", "9a1ca8d2": "SALE_ETHER_MIN_CONTRIB()", "9a1e7ea0": "randomSatoShiTime()", +"9a1e9874": "AddLiquidityMultiple(address,address,address,address,uint256,uint256,uint256,uint256,uint256)", "9a1e9dc3": "Buy(bytes32,address,uint256,uint256,address,address)", +"9a1ea609": "CancelChangeRequest(uint256)", "9a1f6a0f": "setPacksPerClaim(uint16)", +"9a1fb4ce": "takeOut(address,uint256)", "9a1fd3d5": "armyPlanesCount(uint256)", "9a1fdc10": "createHorseShoe10(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "9a1ff4f4": "Ruthenium()", "9a202d47": "removeAdmin()", +"9a204fa0": "MyMoney()", "9a206ece": "isSpender(address)", "9a20821b": "claim_winnings(address)", "9a21213e": "_getProviderOwner(uint256)", +"9a21492c": "genxProperty(uint32)", "9a2160a7": "currentBetNumber()", +"9a2194a9": "getUserPosts(address)", +"9a21de6a": "setPoolLockInfo(uint256,uint256,uint256)", "9a221876": "project_contract()", +"9a22cc1d": "burnBCByTokenId(uint256)", "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)", +"9a2520a6": "ccorder()", +"9a259798": "createGroup(string,string,address)", +"9a25cefc": "epochTotalRewards(uint256)", +"9a260abf": "acceptBidOffChain(uint256,address,address,uint256,bytes)", "9a267230": "END_TS()", +"9a269e0c": "depositTo(uint256,uint256,address)", +"9a26d7aa": "Locked(address,uint256,bool,bool)", "9a276186": "getLentTime(uint256)", "9a27b7ed": "setBounty(address,uint256)", +"9a27bcff": "cost(string[],uint8[],uint256[],uint256[])", +"9a27fb0e": "updatePepePerBlock(uint256)", +"9a2818b3": "setReferralPercent(uint256,uint256,uint256,uint256,uint256)", "9a2828f3": "setTechnicalWallet(address)", "9a285ffb": "myDividendsYes()", "9a28910a": "PrivateSaleBuy()", +"9a291609": "getCurWorkingRate()", +"9a295e73": "getConstants()", "9a29ccf7": "_determinePid(address)", "9a2a1f75": "CrowdsaleLeviusDAO(address,address)", "9a2a224a": "setWallet(address,address,address,address,address)", +"9a2b1610": "getDeveloper1Account()", "9a2b4bdf": "ChangeTotalSupply(uint256,uint256)", "9a2d2692": "withdrawToPoolOwnerFee(uint256)", "9a2dcadf": "fundoShares(uint256)", "9a2e27f8": "presaleEndDate()", "9a2e6b40": "vote(uint80,bool)", +"9a2f2dfa": "setOwnerCandidate(address)", +"9a2f5f77": "lpBoardroom()", +"9a2f60a8": "fairLevelBoost()", "9a2f9e92": "keeCrytoken()", "9a2fb8c1": "startTimePrivatePreICO()", "9a307391": "operator(address)", +"9a313299": "isAddressInWhitelist(address)", "9a314b8e": "Group(string)", "9a317cca": "getHWCAddressByIndex(uint256)", "9a31a5f0": "transferManual(address,uint256)", "9a31ac53": "setLastRegistration(string,int256,uint256)", "9a31b14e": "set_totalSupply(uint256)", +"9a31c6b2": "getCycleBind(address)", "9a323ac4": "MAXfinney()", "9a3241a6": "AddParticipant(address,uint256)", "9a325e52": "exchangeRateRoundTwo()", +"9a327d0f": "addPurchasers(string,string,string)", +"9a32b4af": "pendingAby(uint256,address)", "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()", +"9a353739": "setBondDeadline(uint256)", +"9a355767": "setIsNeedLoan(bool)", +"9a359d8e": "alreadyPayed(uint64)", +"9a35e4a9": "DEFLECTv2()", "9a35f886": "__dig_then_proxy(uint256)", +"9a36e73b": "percentProjectFund()", "9a36f932": "feeDivisor()", +"9a371c84": "liquidations()", "9a37d1b7": "distributeEbyteForETH(address[],uint256,uint256,uint256)", +"9a381aa8": "Logic()", "9a38330d": "setIssuer(address,address)", "9a388bd2": "CORAddress()", "9a38ac79": "requireAuthorisation(bool)", "9a38aeb1": "verifySignature(address,uint256,bytes32)", "9a38bfae": "voteHash(address)", +"9a393f35": "_lockBalance(address,uint256,uint256)", +"9a39c82e": "requestChangePeriod(address,address,uint256,uint256)", "9a3a8c85": "ExiliumToken()", "9a3aed36": "setMainAdmin(address)", +"9a3b58c9": "addSysAdmin(address)", +"9a3bccf9": "_fund(address,uint256)", +"9a3bf320": "_encode_sol_bytes2(bytes2,uint256,bytes)", "9a3c4158": "setEthWallet(address)", +"9a3c6e29": "release(address,address,address,bytes,bytes32)", +"9a3cac6a": "setDaoAddress(address)", "9a3ce541": "price(bytes12)", "9a3d1f3f": "twentyThirtyVault()", +"9a3d2761": "contractTotalGroupStaked()", "9a3dc23f": "_removeWhitelisted(address)", +"9a3df86f": "pLP(address)", +"9a3e4e4d": "usdt_token1_path(uint256)", "9a3ea7cc": "provas(bytes32)", +"9a3f3ae5": "setProposal(uint256,string,uint256,uint8,uint256,uint256,uint256)", "9a3fc225": "getMinAuditStake()", "9a3fc66d": "iouTokens()", "9a3fd1fb": "tokenFallBack(address,uint256,bytes)", "9a3fdfd0": "bountyTokensPercent()", "9a406338": "VESTING_DATE()", +"9a408321": "deposit(uint256,bool)", "9a40a316": "betting(uint256,uint8,uint256)", "9a40d8f5": "equal(address[],address[],string)", +"9a414fb0": "isBorrowCTokenEnabled(address,address)", +"9a4153b5": "JUNIOR_MEMBERLIST()", "9a41c1e6": "walletToVault(address,uint256)", +"9a41fa62": "orderProduct(uint256)", +"9a423330": "xLandInstance()", +"9a429b33": "migrate(address,uint256,address,address,address,uint256,uint256,uint256)", "9a429d2f": "setDisclaimer(string)", "9a42adb3": "change_ico_start(uint256)", "9a42af48": "getLastPrice(bytes32,uint8)", "9a42c935": "forLottesy()", "9a42f3aa": "reveal(uint256,uint8,bytes32)", +"9a43573c": "transferNewToken(bytes32,uint256,uint256)", "9a4363cb": "setlockall(bool)", "9a436c9b": "burnBasisPoints()", "9a4373a6": "_internalTransfer(address,address,uint256)", @@ -88223,12 +161498,17 @@ "9a4435c6": "BitcoinGame()", "9a443955": "setNumVotesRequired(uint256)", "9a44690e": "finalizeSettingUpdate(uint256)", +"9a451ca4": "getRefferral()", "9a454b99": "deployedAtBlock()", "9a459f75": "setShortDescription(string)", "9a45a263": "decentBetMultisig()", "9a45e3fe": "getChannelExist(bytes32)", +"9a463a44": "f3a()", "9a465b85": "lastBlock_a10()", "9a46793e": "roundsManager()", +"9a46b140": "staking_status()", +"9a46edac": "myFarmPoolShare(address)", +"9a4710e6": "userTempAddress(bytes32)", "9a471416": "bountyFunds(address[],uint256[])", "9a47700f": "checkExpires(bytes32)", "9a4772cd": "LogClaim(address,uint256,uint256)", @@ -88236,161 +161516,320 @@ "9a47cee3": "convertGene(uint8[48])", "9a48007d": "hasHourlyRateWithinRange(address,address,uint256[],uint256[])", "9a483a8e": "exerciseExpiredEmployeeOptions(address,bool)", +"9a486cc7": "q(uint256)", +"9a4888bd": "setCollStateForToken(address,address,bool)", +"9a48ac64": "ChangeOfRules(uint256,uint256,address,uint256)", +"9a48ce9d": "burnAllToken()", +"9a48e7f9": "relayers(uint256)", "9a48eb3e": "tokenTransferProxyContract()", +"9a49090e": "mintReward(address,uint256)", "9a49eab5": "MINER_CREATION_LIMIT()", +"9a49f571": "protocolAdapter()", "9a4a0fb2": "centralBank()", +"9a4a4395": "requestFailedMessageFix(bytes32)", +"9a4a8d16": "API_AddDepositLimitAll(uint256)", "9a4ac102": "tinyIPFShash(string)", "9a4b19e4": "SiaCashCoin()", "9a4b1d5c": "verifyTransfer(address,address,uint256)", "9a4b87f1": "setDrop(bool)", "9a4b8fc9": "lockInSemiFinalPrize()", +"9a4b91b2": "YALINKMIN()", +"9a4bb615": "CurrentCostProp()", "9a4bca21": "setMintTap(uint256,int256)", +"9a4c3095": "boostLevelThreeMultiplier()", "9a4ca3cb": "itemsOfOwner(address)", +"9a4ca80e": "RecommendList(address,uint256)", "9a4cbb92": "getDamage(uint256,uint256,uint256)", "9a4cd266": "test_fourValidEqBool()", "9a4d19f8": "getAmountAccredited(address)", +"9a4d7a12": "conNum1()", "9a4dfa87": "OfferCanceled(uint256,address)", "9a4e36d9": "antiques(bytes32)", +"9a4e68fc": "electronicSignatureDocumentNumber()", "9a4e9bff": "FXPay()", +"9a4ed023": "withdrawOpenPositionPenalty()", "9a4ed149": "getBlocksquareFee()", "9a4f1e2c": "ETCrossPotatoPresale(uint256,uint256)", +"9a4f386c": "initializeContract(address,uint256)", "9a4f78cc": "decreaseShares(uint256,address)", +"9a4f809c": "cancelPairRfqOrders(address,address,uint256)", "9a4fd88d": "crowdsaleSucceeded()", "9a4fdf66": "nextBro()", +"9a504e72": "balancerLiquidityDeposit(uint256,uint256)", "9a507d9b": "feeHoldingAddress()", "9a508c8e": "finalizeUpgrade()", +"9a509aff": "transferTokenAmount(address,bytes,address,uint256)", +"9a512489": "transferFeeTaker(address)", +"9a5154b4": "burnSynthsOnBehalf(address,address,uint256)", "9a5199fc": "goodbye(uint256)", "9a51a31a": "ToToken()", +"9a51d90c": "stages_duration(uint256)", +"9a5219c5": "DEFAULT_TOKEN_ID()", +"9a5248c4": "updateHe3TokenAddress(address)", "9a526b97": "setPreIco(address)", "9a52b339": "checkInterest()", +"9a531e11": "burningrate()", +"9a53aad0": "tradingTreasury()", +"9a53cb79": "setExecutorSuccessShare(uint256)", +"9a53d71f": "setMinStakeBalance(uint256)", +"9a54096f": "ethCallCost(uint256)", "9a54596b": "Token(uint256,string,uint256,string,string,address)", "9a5483e6": "addRole(uint256,address,uint256)", +"9a549f3e": "readDataSlot(uint256)", "9a556a59": "getCooldown(uint256,uint16,uint8)", +"9a55bb5e": "m_Dist_Address5_1()", "9a56193b": "getNumberOfDerivatives()", +"9a561fbf": "setCollateralTarget(uint256)", "9a565169": "ETHERGOLD()", "9a5666b8": "SVLightBallotBox(bytes32,uint64[2],bool[2])", "9a571d9f": "isAlphaLower(bytes1)", "9a573786": "getKeysManager()", +"9a576c6a": "DEPOSIT(address,uint256,uint256)", +"9a57ce9c": "_purchased_pizza_count()", "9a581271": "cursedContract()", "9a586d26": "MAX_SALE_VOLUME()", +"9a587800": "budgetPlans(uint256)", "9a58c33d": "batchAssetTransfer(address,uint256[])", +"9a590427": "unwhitelist(address)", "9a592415": "LostPayment(address,uint256)", "9a593b9a": "startCrowdfund()", +"9a596b61": "testing_updateRequest(uint256,uint8,uint256)", "9a599e37": "burnfromAdmin(address,uint256)", +"9a59bb48": "changeEndSale(uint256)", "9a5a2d4e": "lastTimePriceSet()", "9a5a6483": "milliTokensSent()", +"9a5a77c1": "TOTAL_TOKEN()", +"9a5a8a32": "RemoveLiquidity(uint256)", +"9a5aaf78": "pushWeth(address,uint256)", "9a5c0abc": "sellCards(uint256,uint256)", +"9a5c57cd": "distributeRent(uint256,uint256)", +"9a5c90aa": "makeOrder(address,uint256,address,uint256)", +"9a5cbb54": "lastStakeClaimed(address,address)", +"9a5d140b": "mintReserved(uint256)", +"9a5d4407": "isCancelled(bytes32)", "9a5dd735": "getRichest()", +"9a5ddbe4": "savedPos()", "9a5e095c": "_buyTokensInCurrentStage(address,uint256,uint256)", +"9a5e0e60": "getTokenAmountInStash(bytes32,bytes32)", +"9a5e495e": "buyrelease(address)", +"9a5e4eb4": "getEntry(bytes32)", "9a5eb28f": "BUYER_CAP_LOW_USD()", +"9a5ed4ca": "setHolyValorStatus(address,uint256)", "9a5f17ee": "ccEndTime()", "9a5f54b3": "getTetherInts(address,uint256)", +"9a5f9ec6": "koala()", +"9a5fde37": "minChallengePeriodEnd()", +"9a6071fa": "request(bytes32,bytes32,bytes32)", +"9a608cc6": "createNFT(uint256,address,string,bytes)", +"9a60f356": "getTimestampExt()", +"9a60f8ef": "TakeOrder(address,address,uint256,bytes32)", +"9a611b26": "smgFastMint(bytes32,bytes32,uint256,uint256,address,bytes,bytes32)", +"9a61965a": "erc20ContractAddressToTokenInfo(address)", +"9a61c193": "external_ensureProxy(address)", "9a6203e9": "getClosingObligation(bytes32)", +"9a620fa9": "agregarEncargado(address)", "9a628121": "random256()", +"9a62b39a": "setPool(address,address,address)", "9a62b752": "becomeTurtlemaster()", +"9a63042a": "OxbullNFTFactory()", "9a63157a": "addressBankPartners()", +"9a63162e": "levelChangeTime(uint256)", +"9a649edc": "totalCoupons()", "9a64a276": "findById(uint256)", "9a650fd8": "isTerminated(address)", "9a651f0b": "firstStageRefund()", "9a6524f1": "TOKEN_CAP()", +"9a6557c6": "__ThresholdPool_init_unchained(address,uint256)", "9a65ddec": "getAddressByName(string)", +"9a65e2b6": "getParentTree(address,uint256)", "9a65ea26": "startMinting()", "9a661e66": "getGratitudesSizeOf(address)", +"9a66c93f": "buy5mint(address,address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes)", "9a670bbc": "secondPreSaleEndDate()", +"9a6711bd": "battle(address,uint256,address,uint256)", +"9a674ed1": "setAnswerExpiration(uint32)", +"9a67759b": "emissionCurve()", +"9a677c69": "getNameNew()", +"9a67e62e": "depositeReward(uint256)", +"9a680263": "unstakeClaimTokens_new(uint256,uint256)", +"9a6830e9": "pour(uint256)", "9a68323c": "getRoundDetails()", "9a684658": "_getBlockIndex(uint256,uint256)", +"9a68941d": "DepositPercent()", +"9a68cf63": "comFundMax()", +"9a68ff59": "setCoinHandler(address,address)", "9a6921e4": "getOpGas()", +"9a69e734": "transactionSeenStorageId()", "9a6a30a4": "reclaimEther(address)", "9a6a68e9": "numberWinner()", +"9a6acf20": "setRewardTokenAddress(address)", +"9a6b20c8": "getHistoryLen()", +"9a6b25a3": "setWithDrawPunishTime(uint256)", "9a6b32e1": "claim_reward(uint256,bytes32)", "9a6b607f": "distributeTokensToMembers()", +"9a6bbdd7": "viewRewardTokenAmountByDuration(address,uint256)", +"9a6bc102": "_encode_sol_bytes14(bytes14,uint256,bytes)", "9a6bd379": "powerUp(uint256)", "9a6ced6d": "bountyAgents(address)", +"9a6d2711": "teamaddr()", "9a6d3aaa": "bet(uint256,bool)", +"9a6d412c": "LogTokenDeposit(bool,address,address,uint256,uint256)", "9a6d7cb8": "_canMateViaMarketplace(uint40,uint40)", "9a6d9671": "combineMyGirls(uint256,uint256)", "9a6dac14": "getLOTBalance(address,address)", "9a6dfeff": "totalVotesForParty(uint256)", +"9a6e292f": "checkLockup(address)", +"9a6e7f43": "awardedUnfreezePeriodSeconds()", +"9a6e7fd1": "getBeneficiaryCount()", "9a6e9914": "deleteArrayString(bytes32,uint256)", "9a6ec511": "_buildId(address,uint256,bool)", "9a6edad1": "Jupiter()", +"9a6f8e38": "viewProducer(int256)", "9a6f978d": "DIP()", "9a6fb6df": "productionUnitTokenContractCount()", +"9a6fc8f5": "getRoundData(uint80)", "9a6fcbdd": "popElement()", "9a6fe50c": "getLatestForContractAddress(address)", "9a701075": "WITHDRAWAL_END()", "9a702ad5": "AVAILABLE_JOINTTOKENS()", +"9a703949": "trustedRelays(address)", +"9a7077ab": "getNewVariablesOnDeck()", "9a70855e": "exchangeFlag()", "9a70eb1a": "onSaleAmount()", "9a713233": "pre_end()", +"9a713d05": "addLockDate(uint8,uint256,uint256)", +"9a7165e4": "pendingPauser()", "9a71825e": "sellKnowledge()", "9a721302": "SUPPLY_FOR_BOOUNTY()", "9a722769": "autoFinishTime()", "9a727526": "getManagementInfo()", "9a729d03": "token_bid(address,uint256)", "9a72afb6": "setIsDisputeActive(bool)", +"9a72e0b3": "withdrawFeesAndRewards(address,address,uint256,uint256,uint256)", "9a730617": "init(address,uint256,uint256,uint256,uint256)", +"9a7344c7": "updateParameter(uint256,uint256,uint256)", +"9a736e63": "getUsersInfo(uint256,address)", +"9a737aa2": "getMaxBoundTokens()", "9a7394f5": "setData_34(string)", "9a7443da": "stageUsdCap(uint16)", "9a74adda": "moveAccountIn(address)", "9a74c10c": "getDefaultReportingGasPrice()", +"9a74fb07": "xcreator()", "9a751072": "applyChangeWalletAddress(address,address)", +"9a751442": "machineContractAddress()", +"9a751bbd": "getVoucherDepositToken(uint256)", +"9a757674": "make(uint256,uint256,address)", "9a75aa06": "emitPublicCapabilityAdded(address,bytes4)", +"9a76001f": "userEpochOffset(address,bytes32)", "9a7614ee": "acceptEther(uint8)", "9a7615a2": "burnOwner(uint256)", +"9a76208a": "emergencyPaymentWithdraw(uint256)", +"9a7649ba": "logForDB()", +"9a76889b": "getERC20Address(address)", +"9a7727ae": "removeDefaultDailyRestriction()", +"9a772877": "addpool(uint256,address,bool)", "9a772bce": "TokenCappedCrowdsale(uint256,uint256,uint256)", +"9a774511": "Wined(address[],uint256[],uint256)", "9a7754d6": "StagedCrowdsale(uint256)", "9a777d5d": "buyCoins()", "9a7853cd": "postTX(address,string,uint256,uint256,uint256)", +"9a789482": "UNICORE_Vault()", "9a78afc6": "reduceDiv_()", "9a78c066": "checkExistsInArray(address)", "9a78c562": "setSellingTime(uint256,uint256)", +"9a790395": "assignRewards(uint256,address[],uint256[])", "9a797128": "withdrawed()", "9a79f4a8": "testFailHeaderInsufficientFee()", "9a7a3293": "NoFakeCoin()", "9a7a7c11": "makeRoll(uint256)", +"9a7b4123": "setApproveConfig(address)", +"9a7b5517": "burnFeeBase()", "9a7b5b7b": "tryClose()", +"9a7b5f11": "poolInfo(address)", +"9a7b9788": "getRebaseLastStats()", "9a7baa81": "EcomethToken()", "9a7be471": "updateMinDeposit(uint256)", +"9a7bf5f5": "createSmartFundLight(address,string,uint256,address,address,bool)", +"9a7c45fd": "getStakeGenesisFeeTransfer(uint256)", +"9a7c9c87": "onEndTx(uint256,uint256,bytes32,address,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256)", "9a7d5211": "TheDigitalStandard()", +"9a7db3f0": "addPropertyInfo(address,string,string,string,string,uint64)", "9a7db5d9": "adminSendWorldBalance()", +"9a7dd0e3": "canCreateInsurance(bool,bool)", +"9a7dff6d": "adjust_price_unit()", "9a7e00ef": "acceptBet(uint64)", +"9a7e7526": "decodeSignatureError(bytes)", "9a7e9e1f": "executeByAction()", "9a7ee18c": "AccountIsNotFrozen(address)", "9a7efb7f": "giftFor(address,address,uint256)", +"9a7f027c": "RETURNS_FRACTION()", +"9a7f6101": "addOperationKey(address,address)", "9a8061e8": "setLicenceShopPrice(bytes2,uint256)", "9a80e52f": "updateTknPrice(uint256)", +"9a80eb64": "ETHMin()", +"9a816a83": "log(uint256,uint256,bool,address)", +"9a816f7d": "last(address)", "9a819e5e": "forceLiquidation()", +"9a81eb49": "switchETHbuy()", "9a82031e": "getRoundWinnigNumbers(uint32)", +"9a82417e": "getBalancerSafeMathVersion()", "9a824f00": "transferTobucketTwoContract(address)", "9a828a71": "oracalizeReading(uint256,string)", "9a82a09a": "cancelled()", "9a82c93c": "PRESALE_ENDTIMESTAMP()", +"9a82cf99": "setProfitProportionForDev(uint256)", "9a82f890": "isOracle()", "9a8318f4": "total_withdraw()", "9a8335e0": "sendTo(string)", +"9a83400d": "withdrawERC20Guarded(address,address,uint128,uint128)", +"9a83e125": "assetPrices(bytes32,uint256)", "9a841413": "deleteDeployer(uint256)", "9a84792b": "onReturned(address,uint256,uint256)", "9a84d0c4": "addToken(address,string,string,string,uint8,bytes32,bytes32)", +"9a85448b": "sweeptoken(address,uint256)", +"9a854bbd": "MAX_BEP2_TOTAL_SUPPLY()", +"9a86139b": "getColor()", +"9a861dc1": "teamActivationGain(uint32,uint256)", +"9a86297c": "setClaim(uint256)", "9a862c2d": "stage2StartTime()", "9a863892": "NewProposal(uint256)", "9a86acda": "getHeld(uint256)", "9a86cd04": "shittyRand(uint256)", +"9a87239a": "feesAvailable(address,bytes32)", +"9a877fb3": "regions(uint16)", +"9a87b6c2": "returnRCVRTokens(uint256)", "9a87ebb5": "changeAllowances(uint256,uint256)", "9a880629": "dStartsNow()", "9a880848": "attackhill(uint256)", "9a881ab4": "payToFines(uint256)", "9a882b7a": "createtoken(string,string,string,string,string)", +"9a883c3d": "f(bool,uint256)", "9a891058": "keyIndex(bytes32)", "9a89ad65": "within6Confirms(int256,int256)", +"9a89c2a2": "sell(uint256,uint256,uint256,uint8,bytes32,bytes32)", +"9a89d275": "current_dev_fun()", +"9a8a0592": "chainId()", +"9a8a102d": "transferFundPair(uint256)", +"9a8a301f": "getAssetManagerEscrowRemaining(bytes32)", +"9a8a4772": "spec(uint256)", +"9a8a6243": "totalHeimdallFee()", +"9a8a6fab": "StakingPaid(address,uint256)", "9a8ae2fa": "changeLastFreeBlock(uint256)", +"9a8b0ce0": "regularCarsBought(uint256,uint256)", +"9a8b37a6": "setOpenRansom(uint8)", "9a8b3d8f": "getClientProjects(address)", +"9a8c4266": "emergencyRecoveryAllTokens()", "9a8ca12c": "icoEnds()", +"9a8cbfb1": "setBaseContract(address)", "9a8cea55": "testPush()", "9a8cea82": "calculateDevFee(uint256)", +"9a8d0466": "NewVisitor(address)", "9a8d10a3": "addData(uint256,bytes32)", +"9a8d2882": "getHeroes()", "9a8d36fa": "_openGameRange(uint256,uint256)", "9a8d86c5": "CrowdSale_Finalize()", +"9a8e1011": "Reinvest(uint256,address)", +"9a8e1b7d": "mrDynamicRewardAlreadyRelase(address)", "9a8e7b02": "ProposalClosed(uint256,uint8,uint256,uint256,bool,uint256,uint256)", "9a8f09bd": "newKing(address)", "9a8f139d": "getPercent1(address)", @@ -88398,64 +161837,121 @@ "9a8f71f7": "saveData(bytes32,uint256)", "9a8f72d1": "pruebacn123()", "9a900e8c": "changeDepositWalletAddress(address)", +"9a90133e": "mineTouched(string,string,string)", "9a903ca7": "allocateTokens(address,uint256,uint256,uint256)", +"9a923837": "canReceiveEther()", "9a9249a8": "_calculateCurrentPrice(uint256,uint256,uint256,uint256)", "9a92b7e7": "EthVenturesFinal()", +"9a937119": "addItemsInformation(uint256,string,string)", +"9a93da18": "setAcomToken(address)", "9a93e940": "testFailCreateNewRevisionNotUpdatable()", +"9a9429b6": "removeApprovedSellers(address[])", +"9a943250": "dissmissDelegator()", +"9a943d21": "lottery_duration()", +"9a943e00": "undelegate(address,address,bytes32[],uint256[])", "9a94ab9c": "addDelegate(address,string,address,uint256)", +"9a94ea00": "EditNode(uint256,address,address,uint8,bool)", +"9a951991": "OpenOrderPlaced(address,uint256,address,uint256)", "9a953408": "CHLORINETOKEN()", "9a954af9": "getFreeToken()", "9a956915": "icoInvestors(address)", +"9a959f35": "addChunk(bytes32[],uint256)", "9a95ca48": "presaleCapReached()", "9a95d0e4": "DEEO()", "9a960778": "SBK()", "9a961416": "gameNext()", +"9a963fcd": "acceptAscensionChallenge(bytes32)", +"9a9676ec": "BurnPoolTokens(uint256)", "9a967e3b": "nextMember()", +"9a9694f1": "initialAmt()", "9a969768": "distributeProfits(uint256)", "9a96f829": "devs()", "9a97043b": "depositIdx(address)", +"9a979771": "tokenSaleAmount(address)", +"9a982033": "latestStakeId(address)", "9a98aa1e": "Scorpio(uint256,string,string)", "9a98ac88": "GCSToken()", +"9a98ce27": "humans(address)", +"9a990c34": "globalcull_public()", +"9a99165f": "_borrowAtFixedRate(address,uint256)", +"9a9916c2": "get_total_points(uint8)", +"9a99272c": "CustodianChangeConfirmed(bytes32,address)", +"9a996152": "specificUserDeposits(address)", "9a999359": "priceUpdatedTime()", +"9a99b4f0": "claimRewards(address,uint256)", "9a99ebf4": "drainGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9a99f7e0": "isModOrCreator()", +"9a9a39ba": "updateLastSaleTime(address,address,uint256)", "9a9a5cdb": "checkEthBalance(address)", +"9a9a88cf": "lockAddressAfterITO(address)", +"9a9ad93a": "uniLevelDistPart(uint256)", "9a9b1709": "PGGamePlatform()", "9a9b5323": "AlforroCoin()", +"9a9b567d": "setBuybackEnabled(bool)", "9a9bc131": "aidrop(address[])", "9a9c29f6": "settle(uint256,uint256)", "9a9c437d": "CryptFillToken()", +"9a9c8de7": "mineByName(string)", "9a9c9c53": "DepositToBankAccount()", +"9a9ccd2e": "NotEnoughTokensLeftForSale(uint256)", "9a9d0935": "totalBountySupply()", +"9a9d60dc": "transferJoysOwnership(address)", "9a9d6515": "APPC()", +"9a9d7c94": "Get_gas_limit()", +"9a9d9586": "endvote()", +"9a9da1c8": "playerExtraEarnings_(address,uint256)", +"9a9e02ba": "stor0()", +"9a9e2af2": "unstakePcity(uint256)", +"9a9e3b6e": "setExecutionExpiration(uint256)", "9a9e3fd8": "successful()", +"9a9ebb89": "GovernmentOfficer()", "9a9ed624": "ProfitLoaded(address,uint256)", "9a9f1304": "drawMini()", +"9a9f160c": "adminaddress(uint256)", "9aa035dd": "dev_multisig()", "9aa03cc6": "calculateExchangeFee(uint256)", +"9aa063c6": "withdrawAllWhenOutOfSeason(address,address)", "9aa07ed7": "DietEthereum()", "9aa0a50e": "btcDeposits(bytes32)", +"9aa0b573": "attackeePrizeByToken(bytes32,address)", +"9aa0e1a7": "removePaused()", "9aa0ff7b": "SALE_END()", "9aa1001b": "withdrawRewardPool(address,uint256)", "9aa10ebf": "Story()", "9aa13f04": "contractStart()", +"9aa16854": "postincr_s8(int8)", +"9aa18e4e": "fundShareParticipantsTotalTokensLastRound(uint8)", "9aa1dab7": "removeOversight(address)", +"9aa1f0d5": "createLoan(address,bytes32,bytes32,uint256,address,address)", "9aa26f06": "registerBytes32(address,bytes)", "9aa287d9": "setIco1Tokens(uint256)", +"9aa35332": "isMultipleOfWeek(uint256)", "9aa3a443": "acceptContribution(address)", "9aa4a64e": "set_patient(uint256,uint256,string,string)", +"9aa4f718": "callsMade(address)", "9aa57922": "Bhtd()", +"9aa59d44": "getLastEmaCalculation()", +"9aa5d462": "addLiquidity(uint256,address,uint256)", "9aa5ee73": "finalizeConfirmationPeriod()", "9aa5f467": "phase_3_token_price()", +"9aa60809": "PREDICTION_DURATION()", "9aa615ee": "initCrowdsale(uint256,uint256,uint256)", +"9aa67689": "TOKEN_PENGDING_TIME()", "9aa72320": "EthereumCare(uint256,string,uint8,string)", "9aa727f6": "mult(uint256,uint256)", "9aa72b71": "shareAmount(address,uint256,uint256,uint256)", "9aa74525": "increaseWithoutCounterparty(bytes32,uint256)", +"9aa75f77": "viewCurrPrice()", +"9aa79a5f": "bproToBtcWithPrice(uint256,uint256)", "9aa84b0b": "blockNode(address)", +"9aa90874": "refPayout(address,uint256,address)", "9aa92f0c": "previousRounds(uint256)", "9aa93224": "sendOre(address,uint256)", +"9aa93fe8": "getmintedtoken(uint256)", +"9aa98979": "warrants(address,address)", +"9aa98a39": "jsbdeth()", "9aa99dc8": "ownerPauseJackpot(bool)", +"9aa9bad8": "minXY(int256,int256)", "9aa9f27b": "privateSell2Address()", "9aaa38a6": "ChangeComission(uint256)", "9aaa3eec": "updateNickname(address,string)", @@ -88464,70 +161960,131 @@ "9aaa6b4d": "getAttackAddress()", "9aaac864": "isInitialBlockTimestampSet()", "9aab0c7a": "BitUPToken()", +"9aab9248": "pairCodeHash()", +"9aac37f4": "getClosestPoolAmount()", +"9aac938b": "wearableTypeAccProb(uint32)", "9aac9e91": "EndPreSale()", "9aacb10a": "setNewCreator(address,uint256)", "9aacb18c": "getSolution(uint256,uint256)", +"9aad141b": "feeVotes(address)", +"9aad4169": "proposeOwners(address[])", +"9aad4bd9": "getSwapStat(address)", +"9aad6f6a": "setGovernanceStrategy(address)", +"9aada945": "setStableX(address)", +"9aae1af5": "sethashfee(uint256)", "9aae3d0e": "maxWeiTier1()", +"9aae9708": "defaultPriceProvider()", "9aaf442c": "applyCensorship(uint256)", "9aaf5e05": "allocateTokensBeforeOffering(address,uint256)", "9aaf9f08": "getVersion(bytes32)", "9aafbff0": "addEntryIn24WeekPeriods(address,uint256,bool,uint256)", +"9aafee41": "getAvailableTopUp(address)", +"9ab0388b": "cancelStaking(uint256)", +"9ab0464a": "isDepositContractCreatedFor(address)", "9ab060de": "milestoneBonus()", "9ab06fcb": "setPayment(address)", "9ab102ac": "isAffiliated(address)", "9ab1416c": "accept_B_coupons(address,uint256)", "9ab1b484": "distributeTokens()", +"9ab1d0a9": "getUsdtReward()", "9ab1d468": "privateSaleTransfer(address[],uint256[])", +"9ab24eb0": "getVotes(address)", "9ab253cc": "transferToICAPWithReference(string,uint256,string)", "9ab2cf0d": "checkLockedBalance(address,uint256)", "9ab3161d": "AnimalFactory(address,address)", "9ab361a2": "unlockTimeLine()", "9ab3a1fd": "setMvpExists(bool)", +"9ab3aefb": "NewGravatar(uint256,address,string,string)", "9ab3bfd7": "Tier_Basic_Registration()", +"9ab419b9": "_unwrapAndTransferEth(uint256)", +"9ab41c81": "lockedRewards(address)", +"9ab41ec5": "_earlyUnstakeFee()", "9ab42287": "getAllAnimalsByAddress(address)", "9ab422f3": "register(string,uint256,uint256,uint256,uint256,address[])", "9ab448d9": "updateForkValues()", +"9ab46e9b": "emitFee(address,uint256)", +"9ab475b5": "mint(uint256,bytes32,bytes)", "9ab4833e": "viewToken()", +"9ab4a445": "usdtAddress()", "9ab4b22f": "releasedBalance()", "9ab4d3a8": "checkInvestorReturns(address)", +"9ab4d944": "unsetAppFee(bytes32)", "9ab567ba": "batchTransferForSingleValue(address[],uint256)", +"9ab5f1f2": "_pausedTransferToNativeTargetAddress()", +"9ab5f7c3": "getComplaintStartedTime(bytes32)", +"9ab603b9": "flashLoan(uint256)", "9ab61631": "_removeVesterManager(address)", "9ab79905": "withDiscount(uint256,uint256)", +"9ab7acd2": "releaseTimeOfLockTokens()", "9ab7d0b7": "setTheName(string)", +"9ab7d9b3": "RefundPollFinished(bool)", "9ab7f298": "add_user(bytes32,bytes32,int256)", +"9ab804e4": "_tokenAddr()", "9ab80f14": "BuyPrice()", +"9ab820d0": "totalFreeClaimed()", "9ab86b78": "getVoteHubDetails()", +"9ab8e6d2": "setMinBurnAmount(uint256)", "9ab90ba0": "realityID()", "9ab95202": "babzBalanceOf(address)", +"9ab98a67": "pay_table(uint256)", "9ab9ee73": "prPool()", +"9aba09c3": "setMintAmount(uint256[],uint256[])", +"9aba1ce0": "setUSDTExchangeAddress(address)", +"9aba3eba": "getBestEthToUsdcReserves10Eth()", +"9abac5dd": "getDeployedCapitalUsdByTokenId(uint256)", "9abb08ed": "migrateStateFromHost()", +"9abb285d": "_contractCaller()", "9abb2c16": "getAuctionsCountForUser(address)", "9abb9e78": "powerDayEthPerPerson()", +"9abbed05": "contractRewarded()", "9abc03d2": "auctionsStartTime()", +"9abc559e": "removePoolProgram(address)", +"9abc8320": "baseUri()", +"9abcc63a": "delair()", +"9abced4c": "investFund()", "9abd3572": "claimDividend(uint256)", "9abd7d50": "SelfDestructTime()", +"9abdd7d8": "TeamFund2()", "9abe275f": "closeChannel(address,bytes32,uint256,bytes32,bytes)", "9abe3906": "closePreICO()", +"9abe5e44": "pendingCbc(uint256,address)", "9abec159": "DISCOUNT_STAGE_THREE()", "9abeddf8": "getLastUnionId(bytes32,uint8)", +"9abee2f9": "zodiacSouvenirs()", +"9abee7d0": "registerValidator(address,uint256)", "9abfba20": "DeleteBillModerator(address)", +"9ac00509": "getMonthlyStaker(address)", +"9ac01f12": "addVersion(uint256,string,string,uint256[])", "9ac08dfd": "receiveApproval(address,uint256,address,bytes1)", +"9ac0cd94": "loadCurrentBalance(uint256)", "9ac17057": "execute(uint128,uint128)", "9ac18b19": "REQUIRED_SIGNATURES()", +"9ac1c4ad": "cancelPendingDelegation(uint256)", +"9ac1f394": "sendPremium()", "9ac1f9a1": "add_commitment(uint256)", "9ac22e5b": "test_oneTrueAndFalseAssert()", "9ac233f3": "Monarchy()", +"9ac2a011": "executors(address)", "9ac2ba20": "start_all()", "9ac3317b": "grantMultiplePermissions(address,bytes32[])", "9ac3fce6": "getBankReg(address)", +"9ac40564": "grainBuybackReserve()", "9ac467f9": "getAllSigners(uint256)", "9ac4fa49": "isAirdropStopped()", "9ac50a62": "tenmatest()", "9ac58d58": "get_len()", +"9ac6490e": "currentReservePool()", +"9ac73339": "isMinIssuanceCheckOK(uint256)", "9ac785ba": "LockDate(uint256,uint256)", +"9ac7b225": "addToSetToken(address,address,uint256)", +"9ac810f8": "_ensureCanCommit(uint256)", "9ac8cd1b": "calcJackpotFee(uint256)", +"9ac90a5d": "allLiquidityContributionsOfAnAddress(address)", +"9ac90d3d": "get_coins(address)", +"9ac9752c": "openCDP()", "9ac97e84": "getNumDIDHolders()", "9ac9940f": "assetOwner()", +"9ac9de8e": "withdrawBac(address,uint256)", "9aca6e2e": "calculate_total_shares(uint256,uint256)", "9acab88c": "forwardFunds(uint256,address,address)", "9acade7e": "testFailTransferDisableNotEnabled()", @@ -88537,79 +162094,151 @@ "9acb3824": "getHorsesInStud()", "9acba2af": "durationSeconds()", "9acbdcab": "updateNoteButContent(uint64,uint16,bytes12)", +"9acbe295": "TRANSFERRAL_1_SIZE()", "9acd07b5": "closeChannel(uint8,uint256,bytes32[4])", +"9acd3616": "log(bool,uint256,bool,address)", +"9acd55d8": "transferxxx(address,uint256)", "9acd5e0e": "getGuestNotes(address,address)", "9acdc0e3": "setCommunityTokensHolder(address)", +"9acdf04c": "_externalPositionModules(address)", +"9ace38c2": "transactions(uint256)", +"9ace53e9": "canChallenge(uint256,address)", +"9ace757d": "startBidTime()", "9acf603b": "token_wallet_address()", "9acf6ff4": "distributeRemaining()", +"9acf878c": "itemTypes(uint256)", "9acfb1a8": "getCCH_edit_25()", "9ad0a5ac": "addWhitelisted(address[],uint8[],uint256[])", "9ad0c86c": "IouRootsToken(uint256,address,string,string,uint8)", +"9ad0cce7": "isReserveLow()", +"9ad10763": "setAccountLockType2(address,bytes1)", "9ad10d79": "PELOMemberIDMap(uint32)", +"9ad11b8d": "Vote(string,string,string)", "9ad1b348": "getKNCRateRange()", +"9ad1c2ef": "totalGenesisBlockNum()", "9ad1c999": "setdevFeeAddress(address)", +"9ad1ee10": "deployedContracts(uint256)", "9ad25a68": "COSMOTokenERC20(uint256,string,string)", "9ad26744": "removeAuthorizedAddressAtIndex(address,uint256)", +"9ad277f9": "announceMint(address,uint256)", +"9ad280c0": "tokenAmounts(uint256)", "9ad3a7ba": "renounceWhitelister()", +"9ad3c31e": "docRedemptionStepCount()", +"9ad418c5": "createEscrow(uint256,uint256,uint256,address,string,string,string)", +"9ad4b86b": "mintRequestNonce(bytes32)", "9ad4eccf": "sentTokensToFounder()", +"9ad4ecfa": "ProductPurchased(uint256,address)", "9ad4f658": "CATToken(address,address,address,uint256,uint256)", "9ad4f98e": "BlocksureInfo()", +"9ad54025": "switchMembershipForMember(address,address)", +"9ad54793": "getUserWallet(address)", "9ad55220": "getPrivate()", +"9ad5981e": "flashLoan()", "9ad5be7b": "setPlayValue(uint256)", +"9ad5ea1e": "azbitToken()", +"9ad6659d": "isLiquidationReached()", +"9ad6a7e5": "migrateEntriesThresholdAmount()", "9ad73f20": "runPluginSigned(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", "9ad74f81": "setAllowTransferGlobal(bool)", "9ad7ebc3": "specialPoolsRate()", "9ad89ac4": "settleCancel(bytes32[8],bytes)", +"9ad8a9e9": "getRoomInfo(uint8)", "9ad8b5b7": "addAttachmentToCollectible(uint256,uint256)", +"9ad8bd78": "nextFeeBeneficiary()", +"9ad8d6f7": "setContracts(address,address,address,address,address,address,address,address)", "9ad900d6": "get_first_asset_document(bytes32)", +"9ad95232": "tokenPayload(uint256)", +"9ad9fabd": "toggleDepositRedeeming()", +"9ada1ea8": "pendingMintAmount()", "9ada7a4c": "NumberTaken(uint256)", +"9adb64ab": "enableFundingEvent(bool)", "9adba14b": "logStr(string)", +"9adbf583": "clearAll(address,uint256)", +"9adbf691": "f1(uint256)", "9adc15ef": "ShaBi()", +"9adc328b": "usdc_add()", +"9adc339d": "depend(bytes32,address)", "9adcb5eb": "acceptBet(uint256,uint8)", +"9adce6a1": "_lastLockDropAddress()", +"9adce92c": "estimateMonaAmount(uint256,uint256)", "9add2ad9": "MIN_ETH_TRANS()", +"9add7438": "withdrawDAI(uint256)", "9ade76f4": "VestingCreated(address,uint256,uint256)", "9aded5dc": "deathData_a6()", +"9adeddf8": "Created()", +"9adf4415": "changeBountyDeadline(uint256,uint256,address,uint256,address[],bytes[],uint256[])", +"9adf926e": "recover(uint256,uint256,uint8,bytes32,bytes32)", +"9adfecf9": "adminRightsOf(address)", "9ae000c6": "WeedToken()", +"9ae001ff": "updateAuctionStartTime(uint256,uint256)", "9ae0140c": "removeRoleCapability(uint8,address,bytes4)", "9ae06672": "getDailyTimeLeft()", "9ae066b0": "foundationDeposit()", "9ae082a4": "PooShitToken()", +"9ae0f890": "calculatePlatformTokenFee(uint256)", "9ae120dd": "closeZoneTeller(bytes2)", "9ae13375": "groupDates(uint256)", +"9ae14270": "WalletAdded(address)", +"9ae17af4": "roomToken()", "9ae1a635": "Q500()", "9ae1c4f8": "mintToken(uint256,int256)", +"9ae1d678": "BuyRolls(bytes32)", +"9ae1f4a9": "rebalanceStartTime()", "9ae21121": "lastowner()", "9ae2835c": "balanceOfIssuer(address)", "9ae38844": "newMembers()", +"9ae3a480": "fulfillQuestionAsk(string,bytes32)", "9ae466bf": "recipientETH()", +"9ae4bf0e": "setMinRate(uint256)", "9ae4e388": "ChangeClientTokenAccount(address,bool)", "9ae51a1f": "getTeamlistSupportInTournament(uint256)", "9ae568b1": "CreateSEEDS(address,uint256)", +"9ae5c799": "AdditionToWhiteList(bytes32,address)", "9ae5dc91": "setNTToken(address)", "9ae6303d": "getHatchDurationByTimes()", "9ae6309a": "currentMintableTokens()", "9ae65eea": "addProposal(string,string,string,address)", "9ae6892b": "transferOwnershipToken(address)", +"9ae697bf": "lockedBalance(address)", "9ae6b186": "bZxTo0xV2Contract()", "9ae6cac7": "SemainToken()", "9ae6ef15": "getCumulativeIncome()", +"9ae6f144": "setSusd(address)", +"9ae7372d": "setNextRebase(uint256)", "9ae7a909": "multiPartyTransfer(address[],uint256)", +"9ae85cd6": "SetCastleSale(uint256,uint256)", "9ae8886a": "p()", +"9ae8a931": "sendFeeToAccount(uint256)", "9ae8ac3c": "TRADING_STARTED()", +"9ae8ad45": "getLockStatus()", "9ae8b6a1": "WMCToken()", +"9ae930e0": "changePricePerUnit(uint256,uint256)", +"9ae94f01": "PoolExistenceError(bytes32,bool)", +"9ae96769": "updateCountSignAddOwner(uint256)", +"9ae97baa": "emit2()", "9ae980a8": "setMinWager(uint256)", "9ae9d383": "getnotice()", "9ae9ff6a": "withdrawBeforeVoting(uint256)", "9aea020b": "sellDeadline2()", "9aea5485": "revealMove(uint256,uint8,uint8,string)", +"9aea6279": "_notifyRewardAmount(uint256)", "9aeb14a5": "sumHardCapPreICO()", "9aeb5947": "payToCharm(string,uint256)", "9aeb69a2": "withrawWin(address,uint256)", +"9aeb7b1c": "claimLPTokensForFORK()", +"9aeba7ae": "vege()", +"9aebde6e": "updateWhitelistedUsers(address[],bool)", "9aebdf7e": "updateJackpotLeft(uint256)", +"9aebfea7": "addCore(address)", +"9aec1a62": "Revocation(address,bytes32)", +"9aec2328": "flipMaskRate()", +"9aecd64a": "approveAsBuyer(address,uint256)", "9aece83e": "set_manager(address)", "9aecea62": "finalizeIPO()", "9aeceb1d": "transferBallance()", +"9aecf861": "ChangeOwner(address,address)", "9aecfb8a": "Etharea()", +"9aed490e": "getTierRates(uint256)", "9aed58c6": "_destroyRobot(uint256)", "9aed6ac9": "registerPresaleContributor(address,uint256)", "9aed7c15": "sendBalanceERC20(address,uint256)", @@ -88617,64 +162246,118 @@ "9aedb1f1": "setVotingQuestions(string,string)", "9aee046b": "callOracle(uint256,uint256)", "9aeea806": "MARKET_CHANGE(address)", +"9aeebfe4": "test_DSProxyExecute()", +"9aeec873": "betSignature(address)", "9aef0c6c": "privateSaleClosingTime()", +"9aef24ab": "setPEGSMinDAO(uint256)", "9aef319f": "closeBlacklistSwitch()", +"9aef707c": "getTokenIdByItem(address,uint256)", "9aef8999": "removeWhiteList(bytes32)", "9aefff29": "totalSupplyPreSale()", "9af003bd": "ChangeConversionRate(uint256,uint256)", +"9af00912": "unlA(address)", +"9af035a3": "getBatchIdByIndexWD(uint256)", "9af041aa": "currentSaleStage()", +"9af0a98b": "payout(address[],uint256[],address)", +"9af151a3": "CITIZENS_TREASURE()", +"9af1bd91": "solarite_ycrv_lp()", "9af1d35a": "fees()", "9af1ef32": "offerHelp(address,address)", +"9af1f71f": "calculateVtpAndMCRtp(uint256)", "9af22f9c": "Shiner()", "9af25d07": "releasedRoundCount()", "9af26b78": "finishMinting(bool)", "9af28b65": "NEXT_POT_FRAC_TOP()", "9af2b100": "Permissions()", +"9af2c826": "Get_Balance_Eth()", "9af2cad2": "CryptoCoin()", "9af32035": "addIcoPurchaseInfo(uint256,uint256)", "9af3352d": "updateGuReferral(uint256,uint256,uint256)", "9af3b527": "getOwnerOfCardsCheapestWager(address,address)", +"9af3b98b": "revokeStore(address)", +"9af450f0": "getAssignmentTimestamp(address)", "9af4afb3": "BlueOs()", "9af4b5c8": "isOwedFreeReferralPack(address)", +"9af4ea69": "isInIntervals(uint256)", +"9af54f37": "Trade(address,uint256,address,uint256,address,address,bytes32,uint256)", "9af55773": "minSumICOStage6USD()", +"9af58038": "renounceLCP()", +"9af59741": "setMarketRewardInfo(uint256,uint256,uint256)", +"9af5aba2": "executeOrderTokenErc20Txn(uint256)", "9af605cb": "__proxy(address,bytes,uint256)", +"9af636e5": "getAnimalByOwner(address)", "9af6489d": "CheckTree(address)", "9af64d80": "previousstageplayer1()", "9af6549a": "beneficiaryWithdraw()", +"9af6702e": "initialize(address,address,address,uint256,string,string,uint8,uint256)", +"9af69af1": "isexternalSwap()", +"9af6b334": "testFXSDeployment()", +"9af6d708": "EnableTransfer(address,uint256)", "9af75b29": "tokensMintedForOperations()", +"9af77284": "unbondings(address,address)", +"9af8737c": "normal_getReward()", "9af88ebd": "_createOpinionSet()", "9af8c4ba": "respond(uint256,address,bytes)", "9af8f5de": "totalEDUSLeft()", "9af917f4": "addRentable(bytes32,uint256,uint256,uint256,uint256)", +"9af94f30": "getPoolPrice(uint256)", "9af95a4b": "dateBonus(uint256)", +"9af96d7e": "check32BytesAndSendMulti(address[],bytes[],bytes32[])", +"9af98ca8": "payout(address,uint256,uint256,uint256)", +"9af9cc27": "hasAllocation(address)", "9af9f012": "wavesAgent()", "9afa3dc7": "ADVISOR_STAKE_THREE()", +"9afa4bbe": "RejectedPaymentToLockedUpWallet(address,address,uint256)", +"9afb1eb2": "OnOpenGameResult(uint256,bool,string,address,uint256,string,uint256,uint256)", "9afb24ab": "setCLIForGas(uint256)", "9afb93cb": "buyTicket(uint256,string)", "9afbe49a": "tokenAmountOfPeriod(uint256,address)", +"9afc384a": "EndTx(address,uint256,uint256)", +"9afc6b26": "setProtectionDelays(uint256,uint256)", "9afcfba3": "getBurnRequestStatus(uint256)", +"9afd15b4": "kassiahome()", +"9afd2564": "manaOracle()", "9afd46a3": "closeTurnByHand(uint32)", "9afd8b1d": "LiteBoxToken(address,string,string,uint256,uint256)", "9afd9d78": "rollback()", "9afe340f": "OasisToken()", +"9afe467e": "Mediator(address)", +"9afe8df0": "recoverSafeERC20(address,address,uint256)", +"9afe93c7": "removeTransfer(address)", "9afebd18": "contract_finish()", "9afec0ae": "ESOPLegalWrapperIPFSHash()", +"9aff0f2f": "getInterestRate(uint128,uint128)", +"9aff2a7e": "tokensWithdrawnFromPurchasesHandler(address,uint256,uint256)", "9aff301f": "FightClockAuction(address,uint256)", +"9aff309f": "miningFee()", "9affa42d": "increaseApprovalBatch(address[],uint256[])", +"9affd988": "addReaders(address)", "9b012dec": "denyTransfer()", "9b013aee": "getBidPrice(uint256)", +"9b01a5e3": "Vaulted(uint256)", "9b01c7ac": "getFishIdByAddress(address)", "9b02e258": "changelp12(address)", +"9b035625": "TransferERC20(address,address,uint256)", "9b03a211": "transferPresaleTokens(address,uint256)", +"9b03e3fd": "KINGS_TREASURE()", "9b04564a": "proposeTeamWithdrawal(address)", "9b046ed3": "getCharacterTraits(uint256)", +"9b05376c": "blindAuctionsContract()", "9b05535f": "checkpointBlock()", +"9b055906": "_ratioInchPerEther()", "9b059309": "GoshenCoinCash()", "9b05934c": "calculateSecretHash(uint256,bool,bytes32)", +"9b05ddb3": "compoundAll()", +"9b05f5e4": "calcWithdraw(uint256)", "9b0646f6": "wadmin_setContrAddr(address,address)", "9b06e9f5": "seTJackpotPersent(uint256)", +"9b071049": "investorTotalBalance(address)", +"9b079084": "HARD_DEADLINE_DURATION()", +"9b07c117": "burnForBridge(address,uint256)", "9b087b2d": "totalTransferred()", +"9b089d55": "cDai()", "9b08a22f": "allowTransfer()", +"9b08a338": "calculateCollateralSetValue(address)", "9b08ace1": "bonusSecondWeekPeriod()", "9b08e8fc": "changeParent(address)", "9b092f73": "safemul(uint256,uint256)", @@ -88684,175 +162367,327 @@ "9b0a541e": "LogAllowedToAddress(address,bool)", "9b0a5e67": "buy(string,uint256,uint256)", "9b0aac15": "maxTokenSupplyPublicSale()", +"9b0ac2bf": "doomMultiplier()", "9b0ac9b0": "refundTime()", +"9b0b509d": "arbwhat(address,uint256,uint256)", "9b0b5bb2": "MIN_BANKROLL()", "9b0b9c07": "acceptBankDraft()", "9b0c1e51": "BONUS_MAX_DURATION()", "9b0d1b2c": "getSpawningFor(address)", +"9b0da5d5": "setEthAddress(address)", +"9b0dfd27": "spendLimitValue()", "9b0ec5ae": "newSeed()", +"9b0ee78b": "input2Want(address)", "9b0ee7b7": "updateAirdropEndTime(uint256)", +"9b0eebbc": "convertExactETHtoERC20(address,address,address,uint256,uint256,uint256)", "9b0f2510": "placeLong(address[2],uint256[8],uint8,bytes32[2])", +"9b0f4ff6": "isDecimalPaddingToken(address)", "9b0facaa": "existIdBeforeVersion(bytes32)", "9b10394c": "IsOnSale(uint32)", +"9b10e2bd": "rewardOfEachUser(address,uint256)", "9b10e9f7": "rawDetailsOf(bytes32,bytes32)", "9b110f4b": "GayPersonalAdsToken(uint256,string,uint8,string)", +"9b1146d8": "curvePool(address)", "9b11503e": "PUBLIC_SALE_START()", +"9b11859d": "getResolutionCount()", +"9b11dc40": "rebuildMarketCaches(address[])", +"9b11f124": "Upgrading(address)", "9b121e7c": "wethWithdraw(uint256)", +"9b122763": "listOfInstances(uint256)", +"9b126488": "BuyLowGravityTraining()", "9b12664f": "referralMinimum()", "9b129181": "LTE()", "9b12a4a1": "setCanDisburseMultipleTimes(bool)", "9b132392": "createTrainer(string,uint16)", +"9b138599": "changeReservesRatio(address,uint256)", +"9b138df7": "_TIMELOCK()", "9b139504": "addPlayer(string,address,uint256,uint256)", +"9b13caf1": "referrerIdToAddrs_(uint256)", "9b13d209": "buyGuardianRune(uint256,uint256,uint256,uint256)", +"9b154669": "checkRC(string)", +"9b1559c3": "enableRewards(bool)", "9b15ef2e": "END_PRESALE_TIMESTAMP()", "9b16250a": "finishSign(uint256)", "9b164ce3": "TestApprove()", "9b173d57": "withdrawPolicy(uint256,uint256,uint256,address)", +"9b177736": "chaliceToken()", "9b17b2dc": "checkWeather()", "9b181e39": "_isAccepted(address,address)", "9b18d79a": "one_ether_usd_price()", +"9b18f574": "isNiftySoldOut(uint256)", "9b19251a": "whitelist(address)", +"9b199073": "SASHIMI()", "9b19a92b": "year1LockAddress()", +"9b19c2bf": "invokePreRedeemHook(address,uint256,address,address)", +"9b1a09bc": "monthlyProcessed()", "9b1a78c0": "ClaimGMT(address,uint256)", "9b1a9b23": "destinationAddress80()", "9b1ad792": "destroyToken(address,uint256)", +"9b1ad7fc": "firstTimeBuy(address)", "9b1b0ab3": "buyingEscrowAddress()", "9b1b615e": "pool(uint256,uint256)", "9b1b8f62": "_gapOfSquareSum(uint256,uint256)", "9b1bb323": "initContract(address,address,address)", +"9b1bceb0": "whiteListTransferLen()", +"9b1bf805": "ttaxPercent()", +"9b1bfa7f": "Withdraw(address,address,uint256)", +"9b1c48e6": "depositETH(string)", +"9b1c5061": "running_proposal_id()", +"9b1c54ca": "globalcull_owner()", +"9b1c90ef": "pendingMatches(uint256)", "9b1cbccc": "finishDistribution()", +"9b1cc378": "setMetadataByUser(uint256,uint256,string,uint8,bytes32,bytes32)", "9b1cdad4": "postBounty(uint128,uint256,string,uint256,uint256,uint256[8])", +"9b1d6b46": "EUnpause()", "9b1d767f": "fstTotalSupply()", "9b1d8032": "clz32(uint32)", "9b1d834c": "genPot_()", "9b1dd3e5": "pullRipCord()", "9b1e3825": "approveFundTransferToSupplier(address)", +"9b1e8309": "RemoveSchemeProposal(address,bytes32,address,address)", "9b1f46cd": "allMilk()", "9b1f70d1": "BET_RELEASE_DATE()", +"9b1f8371": "userInfoS(address)", "9b1f9e74": "_burn(uint256)", "9b1fe0d4": "isApprovedInvestor(address)", "9b21003b": "notPauseable()", "9b2112c7": "ShopDexToken()", +"9b211f50": "arrayPointer()", +"9b214f77": "safeExecuteOrder(address,uint256,uint256,bytes)", +"9b2159e5": "claim_rxp_by_address()", "9b217f90": "getVestingTime(address,uint256)", "9b21929a": "TOTAL_SUPPLY_BOTTOM_BOUND()", +"9b2263bc": "setupFrom(address)", "9b227a97": "ETH_TLD_LABEL()", "9b22c05d": "test(int256)", +"9b22c25c": "grplPolicy()", "9b234a9e": "tokensByWavesTx(string)", +"9b23e098": "sliceOverflowLengthMinus32Throw()", "9b248798": "_InsufficientFunds(address,uint256,uint256)", "9b24b3b0": "getRoot(uint256)", +"9b24bd08": "TokenBought(address,address,uint256)", +"9b24d899": "checkExists(bytes20)", "9b250f76": "clientInit()", +"9b252852": "reset(address,uint256)", "9b252b7e": "t3Token()", +"9b256890": "isTokenSymbolExists(bytes32)", "9b256f46": "changeRoundBlock()", +"9b2588e7": "switchUsual()", "9b25e6f1": "ReservedTokensDistributed(address,uint8,uint256)", +"9b25e796": "getUserRatingInfo(bytes32,address,address,uint256,address)", +"9b2613f3": "_exchange(address,bytes32,uint256,bytes32,address)", "9b263eca": "providerContract()", "9b267540": "unblockTokens(address,uint256)", +"9b26a484": "setKeepBAS(uint256)", "9b26bae3": "AliciaToken(string,string,uint8,uint256)", +"9b271866": "claimedOrderId(uint256)", "9b276964": "STARTING_BAT()", "9b27bf3a": "setWhiteListStatus(bool)", +"9b28167f": "changeComm(address)", "9b2843e2": "randomDNA(uint256)", "9b285582": "ChangeIp(bytes32,bytes32)", "9b28db50": "getWalletId(address,bytes32)", "9b28f644": "setupFunctionalAddresses(address,address)", "9b28f75a": "reclaimBalanceTokens()", +"9b28f9d7": "DepositWallet(address)", +"9b28fa7b": "VOKEN()", "9b29a295": "Payable(address,uint256)", "9b29cb23": "getDailyPayment()", "9b29f133": "userCancelActiveGame(uint256)", +"9b2a2b24": "betaUserContract()", +"9b2a73f5": "userDeposits()", "9b2a9d19": "origDev()", "9b2aab1d": "frozenAccountOf(address)", +"9b2ae156": "findFreeX4Referrer(address,uint8)", "9b2b0031": "updateDescriptiveInformation(address,string,string,string,string)", +"9b2b524f": "totalInvestment(address)", "9b2b89d4": "UCAL(uint256,string,uint8,string)", +"9b2bb1df": "forgePosition(uint128,int24,uint24,int24)", "9b2bdc20": "claimAllowanceOwnership()", +"9b2c0a37": "unwrapWETH9WithFee(uint256,address,uint256,address)", +"9b2c6125": "areas(uint256)", +"9b2c63e4": "Birth(uint256,string,uint32,address)", "9b2cb5d8": "minAmount()", +"9b2ccff5": "setTmc(address)", "9b2d2cbd": "orePrice()", +"9b2e0e98": "withdrawSSD(uint256)", "9b2e5d32": "claimItems(uint256,uint256)", "9b2ea4bd": "setAddress(string,address)", +"9b2eba78": "isTadUniswapMining()", +"9b3007da": "openMigration()", +"9b3017c1": "getPendingWithdrawlAmount(address,uint256,uint256,bool)", "9b30a187": "nextWave()", "9b30c7db": "changePortalAddress(address)", +"9b30d1e9": "trustedAgentTransfer(address,address,uint256)", +"9b3117e6": "flagged()", "9b311b17": "averageMinerSalePrice()", +"9b31aa7e": "bondingStatus(address)", +"9b31f37f": "party2TimeoutHandler(uint256)", "9b322b7e": "HuandeToken(uint256,string,uint8,string)", "9b3235bf": "getAbel()", "9b33093f": "createNew(address,address,uint256)", "9b332a91": "payDate()", +"9b33ca94": "valuePoolDays(address,uint256)", "9b33d7b3": "createAuction(uint256,uint256,uint256,uint256,bool)", "9b33f055": "cancelSubscriptionOffer(uint256)", +"9b33f434": "updateProposerBonus(uint256)", "9b343342": "getRandomPrice(uint256)", "9b343525": "highestContribution()", "9b343e35": "createChildContract(string,uint256,uint256)", +"9b345d75": "setDebtToken(address)", "9b347f42": "teamVesting2Years()", "9b34ae03": "winningOutcome()", "9b350e12": "isEscaping(uint32)", "9b351087": "cancelTreeSell(uint256)", "9b3544f6": "postAssertion(uint128,uint256,uint256,uint256)", +"9b3578cf": "increaseCounterByOne()", "9b35928f": "RXBbitToken()", +"9b35a362": "Attack(address,address,bytes32,uint256,uint256,uint256)", "9b35b35a": "lockTs()", "9b36057c": "registerGame(address)", "9b3662bf": "currentParticipants()", "9b367370": "confirmBlackFlag(uint256,bool)", "9b36c3bc": "setMaxTotalAmount(uint256)", "9b3725e8": "stageGenomes(uint8)", +"9b372b2b": "getWhitelisted()", +"9b377932": "ownerToReceipts(address,uint256)", +"9b39839e": "getTokenETHOracle(string,uint256)", "9b39caef": "COIN_PER_ETHER()", "9b39f377": "getAnimalByIdVisibility(uint256)", "9b39f9bf": "remainingTokensForSale()", +"9b3a224f": "approve_801(address,uint256)", "9b3a300b": "SNK(uint256,string,string)", "9b3a36c0": "calculateTokensWithBonus(uint256)", +"9b3a44cf": "GuardianAuctionBid(uint256,address,uint256)", +"9b3ac998": "winnerMultiplier()", "9b3b24ba": "VESTING_AMOUNT()", "9b3ba79f": "maxAllocation()", +"9b3bb8e2": "sETH()", "9b3bc6fb": "checkERC20Balance(address)", +"9b3bff30": "dUSDT()", +"9b3c8e16": "COMPOUND_SAVER_FLASH_PROXY()", +"9b3ca4de": "write_then_throw()", "9b3cbdf6": "CrowdSale(address)", "9b3d17b1": "tokenSPUsdCentPrice()", +"9b3d67ca": "isBluelisted(address)", +"9b3de49b": "changeStatus(bool)", "9b3dfce0": "isPoDStarted()", +"9b3e130e": "osebe(string)", "9b3e28cc": "TokenReceivingEchoDemo(address)", +"9b3e745a": "setServiceFee(uint16)", "9b3e9a48": "changeFreezeTime(uint256,bool)", "9b3ee16e": "initialize(address,address,uint256,uint256,address,address,address,address)", +"9b3f256d": "getDaysElapsed()", +"9b3f537c": "simpleWithdraw()", +"9b3f8002": "swapEthForTokens(address[],uint256)", "9b3fd75d": "beginGame(uint256,address,address)", "9b3fdf4c": "EVMSCRIPT_REGISTRY_APP()", "9b409510": "creditAdvertiser(address)", +"9b40a0c0": "swap(address[])", +"9b4156ff": "challenge_1(uint32,uint32,uint32)", "9b415b2a": "erc20Payment(bytes32,uint256,address,address,bytes20,uint64)", "9b41a9c5": "SedoPoWToken()", "9b41b00b": "Sorus()", +"9b42127f": "collateralName()", +"9b4254e2": "log(address,address,uint256,bool)", +"9b42662b": "DEV_FUND_VESTING_PERIOD()", "9b426e62": "assignTester(address)", +"9b42dfcb": "allTimeStaked()", +"9b42efc1": "lockTransfer(address,uint256,uint256,uint256,uint256)", +"9b436816": "removeLCP(address)", +"9b438c6a": "setMaxBuyTokenAmount(uint256)", "9b44cb3c": "lastTrade()", +"9b452917": "halvingMachine(uint256,uint256)", +"9b452931": "wBTC()", +"9b45dfe3": "tokenGeneration(address,uint256)", "9b46301e": "playersPerRound()", "9b46461e": "getAnimalIdAgainstAddress(address)", +"9b467f3d": "updateEstate(uint256,string,string,string,string,uint256,string)", +"9b46818d": "maxUserBP()", "9b46a71c": "setContractCap(uint256)", +"9b46c3bf": "extractLevel(uint32)", "9b4778e4": "get_arbits_sale_open()", +"9b4803ba": "proposeCompetition(string,int256,uint256[3],address,uint256[],uint256[5])", "9b480435": "setPublicPlacementNum(uint256)", "9b487f3f": "_forwardTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"9b488db3": "setshitAddress(address)", +"9b48eda4": "step2(uint256)", +"9b4920f6": "test_swap_exactOut_oneForZero(uint128)", "9b49413c": "GetItemInfo(uint256)", +"9b49d153": "craftNFT(address,uint256,uint256,uint256,uint256,uint256,address)", +"9b4a266d": "transferWithLockUp(address,uint256,uint256,uint256)", "9b4a6bdb": "test_spamVoting()", "9b4a7fe9": "setCCH_edit_17(string)", +"9b4b2c9c": "claimReferralReward()", "9b4b2d77": "processOffchainTokenPurchase(address,uint256)", +"9b4b467c": "resolve(uint256,uint256,uint256[],bytes32)", "9b4b973d": "acceptSettlement(uint256,uint256)", "9b4bb9f0": "schedulePriceUpdatesFixed(uint256[])", +"9b4bf5fe": "withdrawableTokensAt(address,uint256)", "9b4c1290": "_getFishPrice(uint16,uint16,uint8,address)", "9b4c1902": "getGovtApplicationByIndex(string,uint256)", "9b4c7b70": "redemptionFundTotal()", "9b4d54fc": "startCrowdsale2(address)", "9b4d9ecc": "setGrowCost(uint256)", +"9b4dc8cc": "lpAddress()", +"9b4deadb": "regist(uint256)", "9b4e533e": "isLastWithdraw(address)", +"9b4e9ec2": "findfivePercent(uint256)", "9b4f19c6": "getMonths()", "9b4f1ecb": "initialCost()", +"9b4f9193": "updateRewardPerBlock(uint8,uint256)", +"9b4fba56": "gunlock()", +"9b501723": "distributionPeriod()", +"9b5032de": "setSoftCapTimer(uint256)", "9b504387": "controllerTransfer(address,address,uint256)", +"9b504df1": "cooldownActivated()", +"9b50ba2e": "getPonie(string)", "9b51e35a": "getSchemePermissions(address,address)", +"9b51fb0d": "buckets(uint256)", +"9b523713": "getLatestPriceBTC()", +"9b525924": "limitMint()", +"9b527a16": "totalStaged(address)", "9b52cacc": "ListingCreated(bytes5,uint256,uint256,uint256,address)", +"9b52e4ff": "isStakingFinished(uint256,address)", +"9b52edb8": "distributeSeizeWpc(address,address,address,bool)", +"9b5308ec": "lockedTPT(address)", +"9b531434": "thirdPhaseEndTime()", "9b539a17": "setEncryptKey(string)", "9b53a396": "calcKicks(uint256)", "9b53d87c": "isManagerEnabled(address)", +"9b53e366": "TRANCHE_SFI_MULTIPLIER()", +"9b53f99b": "transferFromERC(address,address,address,uint256)", +"9b54007a": "LogAdminSet(address,bool,uint256)", +"9b547fda": "claimablechal(address)", "9b550e55": "nextMineId()", +"9b55983a": "getCompTokenData(address,address[])", +"9b55de81": "EventBc(address,uint256)", +"9b560cfa": "getPathogenData2(uint256)", +"9b5614aa": "property_token_sell(address,uint256)", +"9b5617bd": "MagicEND()", +"9b562239": "_Fibonacci_number(uint256)", "9b563fa3": "save(uint256,string,string)", "9b566564": "withdrawAirdrop(uint256,bytes)", "9b56730d": "compoundInterest(uint256,uint256,uint256,uint256)", "9b5696b0": "notCollectedAmountAfter24Hours()", "9b56d6c9": "getCollateral(address)", "9b5719a6": "setSalesContract(address)", +"9b57b0f1": "ethAFlip()", +"9b57b5fe": "yveCrvVault()", "9b58316a": "EBANKTOKEN()", "9b58b463": "retire(address,address)", +"9b58bc26": "delegatecallSetN(address,uint256)", +"9b58e0a1": "claimable(bytes32)", "9b58e46b": "createProduct(string,bool,uint256)", "9b5906e5": "getLifeCoin()", "9b598caf": "pastProposalTimeRules()", "9b59ffd7": "verifyGame(bool)", "9b5a2e13": "setBadgeGiver(address)", +"9b5a4192": "updateSetting(bytes32,uint256)", "9b5a66e6": "insertInPlace(uint8[],uint8)", +"9b5a6be6": "marketBuyCraneWithToken(address[],uint256,uint256)", +"9b5aaebf": "genTree(address)", +"9b5ac70a": "userForVotes(uint256,address)", "9b5adea2": "setMinter()", "9b5b094f": "ANMOToken()", "9b5b4019": "EtherWild()", @@ -88860,26 +162695,44 @@ "9b5c0b5e": "burnPerweiYearly()", "9b5cc9f4": "transferOwner1(address)", "9b5cfcdd": "account1Address()", +"9b5d1a61": "Payout(uint256,address)", "9b5d2e78": "TPI()", "9b5d7d0b": "addBalanceReplenishment(uint256,uint256,uint16,bytes32,uint256)", "9b5d8e63": "Multiplexor()", +"9b5e00f1": "RemainingRewardOwnershipChanged(address,address)", "9b5e5d8c": "newCustomFutureLottery(uint256,uint256,uint256,address,uint256)", +"9b5e8b14": "strategyStopped()", +"9b5e943e": "logBytes2(bytes2)", "9b5f8abb": "getAllSponsors()", "9b5fde7d": "payOut(uint256,string)", +"9b5ff407": "getHasWithdrawn(address)", "9b601c4d": "getQueryPrice(string)", "9b60a443": "payto1()", +"9b60ba12": "LogUserRequestedEnd(address,uint256)", "9b612a1b": "freezeStaking(address)", "9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", "9b61cf09": "MOBILITYCREDIT()", +"9b6202c6": "addVotePool(uint256)", +"9b6234b5": "createPromoCity(address,string,string,uint256)", "9b624e7b": "setRound(uint256)", +"9b62d3ae": "betterBettingInfo(address,uint256)", +"9b630773": "viewSaleSPS()", "9b632829": "refundAll(address)", "9b6349a8": "TokenDCCB(uint256,string,string)", "9b63d0f4": "core(bool)", "9b63eb4b": "getTicketsByGameIndex(uint256)", +"9b644a23": "proposalIds(uint256)", +"9b64c92b": "claimTeamFeeEth(uint256)", +"9b64cf6f": "kimochi()", +"9b64e69d": "addSeven()", +"9b65bc5d": "PerformedTransferFrom(address,address,uint256)", +"9b663fe7": "addCodes(uint256,bytes32[])", "9b666d7a": "cos(int256)", "9b6687ac": "getNumPositionProduct(bytes32,uint8,string)", "9b671604": "proposeVoter(bytes32)", +"9b676e72": "accountOutputSdcs(address,uint256)", "9b678bfc": "calcRates()", +"9b679bae": "setTenderAmount(uint256)", "9b67bfa3": "fiatValue(uint256)", "9b6806c9": "getCompanyShareholders(uint256)", "9b68c992": "SubmitSecretBet(bytes32)", @@ -88888,28 +162741,55 @@ "9b6a2b2f": "spriteOwningHistory(address,uint256)", "9b6a6709": "presaleMint(address,uint256)", "9b6aa1fa": "TransferData(address,address,uint256,bytes)", +"9b6aa3c7": "updateOwner(string,string)", +"9b6b27ad": "burnByRuler(address,uint256)", "9b6b838c": "reinvestment_share()", +"9b6b955d": "lpFeeAddr()", +"9b6bb03a": "setParams(uint256,uint256,uint256,address,address,address,address)", +"9b6bdf39": "cardCosts(uint256)", +"9b6be298": "evtFirDrop(address,uint256)", +"9b6c0a31": "ExchangeChanged(uint256,uint256)", +"9b6c4c23": "getcars(uint256)", "9b6c5283": "createPool(string,uint256,uint256)", "9b6c56ec": "debt(address)", +"9b6c9b03": "engine2activeUserID()", +"9b6d0805": "lastBlockInterestPaid(address)", +"9b6d4be8": "eraReward(uint256)", "9b6d86d6": "adminSetRegistrationDisabled(bool)", "9b6d96c5": "create(int256,int256,int256)", "9b6dbc8a": "closeShop()", "9b6e407d": "setPercentUnfrozenAfterBuyPerPeriod(uint256)", +"9b6ec042": "log(uint256,address,bool)", "9b6ec1cb": "HerbsChainToken()", +"9b6ed777": "rID()", +"9b6f0f6d": "boxShopInfo(uint256)", +"9b6fad48": "registerBondAndBondGroup(address,bytes[],uint256)", +"9b7016f1": "UnSoldTokens()", "9b7143eb": "creditsClawbacked()", +"9b71653b": "messagesCount()", "9b71a7c9": "addAddressToRole(address,string)", "9b71dec3": "getVineyardCount(string,address)", "9b727e80": "CNiteToken()", +"9b72d82e": "secondaryTransfer(address,address,uint256)", +"9b72ec5b": "includeBurn(address)", +"9b7312a2": "OfferData(address,uint256,uint256,bytes32)", "9b73a5d9": "hasTwoYearWithdraw()", +"9b741d9d": "tokenExchangeInitRate()", "9b743cbd": "allocated18Months()", +"9b744752": "getpercentVote()", +"9b74c68c": "setShareConverter(address)", "9b7502c3": "getLastAuditExtradata(address)", "9b769ce3": "JsCoin()", "9b76a25c": "transferFee(address,address,address,uint256)", "9b76c1de": "team3LockEndTime()", +"9b76e9f8": "addLiquidityLGE()", "9b76fbd6": "_recordPlatformFee(uint256)", "9b771346": "ImportTestB()", "9b772524": "partner1_signed()", +"9b774ab3": "isSchoolStudent(address)", "9b7750f1": "addBranchInEpisode(uint256,uint256)", +"9b777a3a": "inviterValues()", +"9b779153": "fxManager()", "9b77c21a": "getClaimStatus()", "9b77d69f": "addTagByModuleType(uint8,bytes32[])", "9b7812ff": "add_quote(bytes32,bytes32,uint256,uint256)", @@ -88917,31 +162797,47 @@ "9b782070": "TSSECOND()", "9b786d68": "profitSharing(address,string)", "9b788752": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", +"9b789b7e": "acceptJob()", "9b78cf9c": "medalFreeze(address,uint256,uint256)", +"9b79219a": "CREATE_ACCOUNT_ROLE()", +"9b794517": "addToMapping(uint256)", +"9b798195": "setMembership(string,uint256)", "9b7a67bd": "getAccountPar(uint256)", +"9b7a7a56": "mainaddresses(uint256)", "9b7b59db": "setdrawtoken(address)", +"9b7b67c9": "A5(bytes)", "9b7c08b8": "ERCToken(uint256)", "9b7c288f": "lastDeploy(address)", +"9b7c2962": "f6(uint256)", "9b7c5517": "committ_payment(uint256,uint256)", "9b7d83e7": "porcoToken()", "9b7defe3": "returnTokensFromHoldAdvisorsAddress(uint256)", +"9b7e3ed6": "MaxDropsChanged(uint256,uint256)", "9b7e5531": "ownershipDeadline()", "9b7edbdb": "buyLimit(uint256)", "9b7eeb12": "setScrapMinEndPrice(uint256)", "9b7ef38c": "BatchUtils()", "9b7efac7": "subUInt(uint256,uint256)", +"9b7efbfd": "getActiveStrategiesCount()", +"9b7f082e": "expiryChangesState(uint256)", "9b7f1687": "iUventaCoin()", "9b7faaf0": "lockOver()", +"9b7fb510": "isOnlyAdminB(address)", +"9b806e9d": "setTokenID(bytes32,uint256)", "9b80c9e8": "payMoneytoOwner()", +"9b80f263": "update(address,address,address,uint256)", +"9b810ace": "AdminshipUpdated(address,uint8)", "9b815057": "changeMakerDAO(address)", "9b818ace": "SLChainToken(uint256,string,uint8,string)", "9b819d38": "getNowTime()", +"9b81bdf9": "getArtemAddress()", "9b81c8d3": "updateMeterValue(uint256)", "9b82171f": "houseTotal()", "9b828609": "reclaimContributionWithInterest(address)", "9b82abdb": "LogBought(address,uint256,uint256,uint128)", "9b831dcb": "RateUpdate(uint256)", "9b8342d4": "getPlayerDividendByRound(address,uint256,uint256)", +"9b8367c4": "AuctionUnpause()", "9b836d1a": "_payout(address,uint256)", "9b83d121": "transferFokenBonus(uint256)", "9b8430eb": "distributeRevenue(uint256,uint8,uint8)", @@ -88950,94 +162846,176 @@ "9b85b9c9": "createDrug(bytes32,uint256)", "9b85bc85": "CocacolaToken()", "9b865999": "InitialOwnerAddress()", +"9b866d67": "TotalYMENContributedPersonalPercentage()", "9b86975d": "ANemoiSaleContract()", +"9b86d2e2": "closeCSP(bytes32)", +"9b86f0ef": "tradeEtherForTokenUsingReservesSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", +"9b874293": "WithdrawRewards()", +"9b878098": "TokenLeft(uint256)", +"9b87f958": "printSomething()", "9b880fee": "registerVestingSchedule(address,uint256,uint256,uint256,uint256)", "9b8831df": "hasArtist(bytes32)", +"9b88bf28": "Percent()", +"9b88d9a3": "verifyLinkdropSignerSignatureERC721(uint256,address,uint256,uint256,address,bytes)", +"9b890104": "forceStopInvest()", "9b8906ae": "saleEnded()", "9b894703": "maxTickets()", +"9b89a658": "CallBackVariations(uint256[],address[],uint256,uint256)", +"9b8a0942": "unStaking(address,address,uint256)", +"9b8a1fb4": "relaseTime3()", +"9b8a674b": "setPrice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9b8a74f0": "cancelOffer(address)", "9b8abe0b": "thousandtimes()", "9b8b03a2": "strongHands(address)", "9b8b365d": "deathData_a5()", +"9b8b5015": "EvInvestorsComission(uint256,uint256[])", +"9b8b57ea": "getProviderPaysGas(address)", "9b8b6037": "findModuleVersionByAddress(address)", "9b8b7160": "setPreFundingtokens(uint256)", +"9b8c3c9f": "stakeByPID(uint256,uint256)", +"9b8c4484": "CommissionChanged(uint256,uint256)", "9b8d1dd4": "CARDANOCLASSIC()", "9b8d3064": "setFinance(address)", "9b8d34d9": "addAgreement(bytes32,uint256,address[])", +"9b8d504a": "forAirdropSociety()", +"9b8da0ea": "clearManyOperator(uint256[])", "9b8da66c": "getEthFundDeposit()", +"9b8e48c2": "x_adminSetMaxSupply(uint256)", +"9b8e9b5e": "canvas()", "9b8eb288": "setPercentWeiDividend(uint256)", "9b8eb7b4": "getSocialAccountByIndex(uint256)", "9b8ebc54": "checkVoter(address)", +"9b8f04b7": "stakeFor(address,uint256,address)", "9b8f2493": "updateBurnBal(uint256)", +"9b8f2aea": "userBinaryTree(address)", "9b8f5acf": "CyberChainToken()", "9b8f5d4a": "setTilePosition(uint16,uint8,uint8)", "9b8f7113": "dateSoftCapWasReached()", +"9b8f828f": "updateValuePoolClaimingFee(address,uint256,uint256)", +"9b8fdacc": "roundCap()", "9b8fdf1b": "cancelExpectedPayment(bytes8)", "9b901d00": "_createTeamSale(uint256[9],uint256,uint256,uint256,address)", "9b9073e4": "allocationPool()", +"9b90bfb8": "newAsset(uint256,string,address)", "9b9111ee": "commonConfigure(address,address)", +"9b911f96": "awardToGlory()", "9b914973": "prebuyPortionTotal()", "9b91f9be": "Gol()", +"9b9227ed": "_monthName(uint256)", "9b922d97": "setCoinsaleactive(bool)", +"9b927076": "getCampaignContentDetailplayer(string,uint256,uint256)", "9b9279ec": "StartRefound(bool)", +"9b92ac4a": "addVotingPowerForVestingTokens(address,uint256)", "9b92adf3": "EnableTokenMinting(bool)", +"9b932256": "Purchase(uint256,address,uint256)", +"9b934ad1": "setY1(address,address)", +"9b938ab1": "_encode_sol_int(int256,uint256,bytes)", +"9b93a954": "doOrder(uint256,uint256)", "9b93aaf4": "addNewLoggerPermission(address,address)", +"9b93f064": "setContestContractAddress(address)", +"9b942a33": "C_NTokenController()", "9b945097": "getRandom(address,uint256,uint64)", +"9b94ccd4": "krakenPerBlock()", +"9b9532ed": "setMaxFraxOutstanding(uint256)", "9b9545eb": "Rython()", +"9b956f08": "onboardSystem(address,address)", +"9b957b74": "allHodlersLength()", +"9b95de9a": "submitReplaceOwner(address,address)", +"9b9648e9": "setBtcPrice(uint256,uint256,uint256,uint256,uint256,uint256)", +"9b96586a": "votingTokenAddr()", "9b9692f6": "TokensDistribution(address,uint256)", "9b96c4ba": "AdvisorPart()", +"9b96dc27": "createNFT(string,string,string,address,bytes32,string,uint256,string,string,string,uint256,uint256)", "9b96eece": "getBalanceOf(address)", +"9b96f3ed": "setSaleAuctionERC20Address(address)", +"9b97099c": "USDC_STRATEGY()", "9b973803": "transfer10(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9b97cee5": "getWorkCount()", +"9b9843df": "getAllTransfersLockStatus()", "9b985b30": "bountyMaxTokens()", "9b986550": "getAllForPubKey(bytes32)", "9b98a94b": "getLockTokens(address)", +"9b98ef80": "VESTING_PARTS()", "9b991d9b": "votingInfoTeam()", "9b9958af": "getAllCardsClaimed()", "9b99a8e2": "reserveTokenCount()", +"9b99c83b": "mintWithTokenURI(address,address,uint256,string)", "9b9a09a6": "HackContract()", "9b9a236b": "SuperToken()", +"9b9a33ff": "setInternalInventoryLimits(address,uint256,uint256)", "9b9a47e3": "getlastDividendPoints(address)", +"9b9ac2cb": "fees(address,address)", "9b9b0b87": "mainICOFourthWeekEndTime()", +"9b9b4698": "emitSynthExchange(address,bytes4,uint256,bytes4,uint256,address)", +"9b9b92fb": "defaultProduct()", "9b9ba572": "oraclize_query(string,string[3])", "9b9be9cb": "mainSale_TokesSold()", "9b9bedf8": "getContractCreated()", +"9b9c4477": "updateStakingPool()", "9b9cc2ca": "getPrivateSaleAgentAddresses()", "9b9ce1bc": "sendTokensBulk(address[],uint256[],uint256[])", "9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", "9b9d2cc8": "RESERVED_TOKENS_ADVISORS()", +"9b9d326d": "totalProducts()", +"9b9dda6f": "calculateNetCost(uint256[],uint256[])", "9b9e07e1": "TeamtokenRelease3()", +"9b9e98be": "dfDeposits()", +"9ba0c92c": "setImplementationOnMock(address)", +"9ba0d146": "storedBlockHashes(uint32)", "9ba11c0a": "coinunits()", +"9ba172c6": "bootstrapLiquidty()", "9ba1a7d8": "preValidation()", "9ba30c3b": "Healthcoin()", "9ba319bf": "detangleQuanticCloudIOTData()", "9ba33ab3": "refundLeftOverWei(uint256,uint256)", +"9ba3c1d6": "setMerkleVestedRewardsRoots(bytes32[])", "9ba3c2e0": "advisersAddr()", "9ba3d8cf": "updatePromoFishCommission(uint256)", +"9ba3ffb1": "getProductId(bytes32)", "9ba4d4ee": "investedETH()", "9ba4dbc2": "USDBTC(uint256)", "9ba4eb5f": "SPINFundDeposit()", "9ba58333": "AspirationCoin()", "9ba5b4e9": "getEventHashes(bytes32[])", +"9ba5f69a": "publicSaleTransferLock(address,uint256)", +"9ba62143": "UseDifferentAddress(address)", +"9ba63e9e": "getAccountIndex(address)", "9ba65fff": "addNewcard(uint256)", +"9ba6879a": "setAFIToken(address)", +"9ba6e0ee": "set_pool_SFI_reward(uint256,uint256)", "9ba73d43": "deregisterCustomer(address,address)", "9ba89492": "getNumAccounts()", "9ba896cc": "refundTokensSale(address[])", "9ba8975f": "changeFundsKeeper(address)", +"9ba89bd3": "enterMarketIfNeeded(address,address,address)", "9ba8e37d": "withdrawFromToken(address,uint256)", +"9ba901ef": "funDelegates(bytes4)", +"9ba95c4c": "changeKeyPrice(uint256)", +"9ba9d206": "icoTokens(address)", "9baa504e": "unrestrictedMint(address,uint256,uint128)", +"9baa7211": "lentERC721List(address,uint256)", "9bab0da3": "EVACASH()", "9bab3988": "DongriToken(uint256)", "9babdad6": "removeShareholder(address)", "9bac6e8d": "currentMinter()", +"9bac7c5f": "payedAddress(address)", "9bac8602": "testFailAddBalanceAboveOverflow()", "9baca66b": "getElementOfWinnerTicketList(uint256)", "9bacc97c": "specialAddress(address)", "9bacf1ed": "createSynthesizingAuction(uint256,uint256)", +"9bad18d9": "PonyIndexToApproved(uint256)", +"9bad192a": "changeMinVotes(uint256)", +"9bad7720": "getEncryptionAlgorithmById(uint256)", +"9badada1": "getAdjuster()", "9baddd98": "sendBountySupplyToken(address,uint256)", +"9bae0328": "transports(uint256)", "9bae56da": "getEstimatedRound(uint256)", "9baeac78": "TOKEN_SUPPLY_PRESALE_LIMIT()", +"9baef0bd": "WinningTeamQuerySent(string)", +"9baf14d4": "withdrawPowerBooster(address,uint256,uint256)", +"9baf390a": "GetMinPoz()", "9baf7ffb": "etherToSendBankroll()", +"9bafc515": "userSigWithdrawal(bytes32,bytes32,bytes32,bytes32)", "9bafd01a": "freeStorage(address)", "9bafd22b": "DocumentCertoChainContract()", "9bb00ae3": "ledgerCount()", @@ -89045,64 +163023,114 @@ "9bb04895": "nominalValue()", "9bb0e4df": "getUint(int256,bytes32,string)", "9bb0f599": "hasToken(address)", +"9bb0fb4f": "native(address)", +"9bb11d91": "bridgeIDaiToISai(uint256)", "9bb186d2": "MatchingMarket(uint64)", "9bb192fd": "getVotes(uint32)", +"9bb1a99c": "vToken()", "9bb1cfd6": "hasAvailableRewards()", "9bb1dbea": "commonWithdraw(uint256)", +"9bb1dc8d": "ownerAddresses(address)", "9bb1fd66": "force_stop()", +"9bb2b78b": "checkoutWithToken(address,address,address,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes32,bytes)", "9bb2ea5a": "setMaxValidators(uint256)", "9bb32be3": "challengeFinality(uint256)", +"9bb3a22d": "bulkSendEth(address[],uint256[])", "9bb3bcaa": "setArrIntField1(int256[])", +"9bb3c7d3": "teamPerfitAddr()", +"9bb44a05": "updatePurchaseData(address,uint256,uint256)", +"9bb51487": "setCBaddress(address)", +"9bb51585": "pendingAFI(uint256,address)", "9bb5239a": "CheckPrize(address,uint256)", "9bb5c96c": "isContributorsRewarded()", +"9bb5c9c3": "setApprovalProxy(address)", "9bb5ce30": "participationFee()", "9bb5d450": "getMonsterCount()", "9bb5f901": "UCToken()", "9bb603bb": "create(string,string,uint8,string,bool)", "9bb639a8": "changeTokenCostInEth(uint256)", "9bb6831f": "millCap()", +"9bb684bf": "cutie(uint32)", +"9bb6f697": "stakingContractsStakingToken(string)", +"9bb73236": "_playerAsset(address,uint256)", "9bb74bbd": "tokensSoldToInvestors()", "9bb848e7": "isRunningIco(uint256)", "9bb84cd0": "addSellTokensRequest(address,string,uint256,uint256)", +"9bb87b92": "changeMultiplier(uint256,uint256)", "9bb8b563": "POKCC()", +"9bb8c612": "AGOBTC()", "9bb8ec22": "SmartAdvancedCoin(uint256,string,string)", +"9bb8f838": "flux(uint256,address,uint256)", "9bb8fde4": "startTimeStage1()", "9bb90467": "initTokenAndBrackets()", +"9bb90794": "setLPContract(address)", "9bbba3a8": "getTokensOnSale(address)", +"9bbc1040": "LandmarkCreated(uint256,uint256,uint256,address)", "9bbc156b": "AllLock()", "9bbc574a": "closeUser(address)", +"9bbcd865": "smolTingPot()", +"9bbd8143": "Take(address,address,uint256)", "9bbdb25a": "getPartners(address,uint256)", "9bbeafc1": "setMarketFees(bytes32,uint16,uint16,uint16,uint16,bool)", "9bbedbbc": "deliver(address,address,uint256)", "9bbfa582": "Lambotoken()", +"9bc0432c": "removeStore(uint256)", +"9bc0f7b8": "ValueIsTooBig()", "9bc0fd25": "setBlocklancerContractHolder(address)", +"9bc11c94": "unstakeStatus(address,uint256)", "9bc13360": "standardrate()", +"9bc289f1": "lockedUntil(address)", +"9bc29b7a": "democs(bytes32)", "9bc2bc71": "createEvent(string)", +"9bc2c274": "github()", "9bc30adb": "upgradeBalance(address,uint256)", "9bc3135b": "buyoutDividendPercentage()", +"9bc31d67": "newTokenAndInstance(string,string,address[],uint256[],uint64[3])", "9bc33b8a": "MediatedTransactions_TransactionHeight()", +"9bc39d3c": "set1(uint256)", "9bc52a39": "logClassic(string,uint8)", "9bc53cec": "Moontrail()", "9bc5689d": "NUM_OF_CHOICES()", +"9bc5741f": "removeListener(address)", +"9bc5aa23": "updateState12Count(uint256,uint256)", +"9bc5c509": "withdrawTokens(address,uint256,address)", "9bc61d06": "MeetupContract(string,string,uint256,uint256,uint256)", "9bc64cc8": "saiTap()", +"9bc679d5": "incentiveLimit()", +"9bc68c6f": "adjustBackstop(bool,uint256)", "9bc6b571": "ChangeExtension(uint256,bool)", "9bc6d815": "BestCountTokens(uint256)", "9bc6f0ec": "createChildDeposits(uint256)", "9bc706e8": "publishedCountOf(address)", "9bc72d5f": "worstCaseRateFactorInBps()", "9bc742fe": "setStepOneLockEndTime(uint256)", +"9bc7c8c0": "setMaxHolding(uint256)", +"9bc7e051": "decompose(string,uint8,uint256)", +"9bc805b4": "harvestToVault(uint256)", "9bc85302": "burnUserTokens(address)", +"9bc88b9c": "getBouncerAdmin()", "9bc896f9": "orderCancel(uint256)", +"9bc8c657": "setTotalAllowance(address,address,uint256)", +"9bc8e4f2": "BSC_RELAYER_REWARD()", "9bc8e9ee": "setMintingDec(uint256)", +"9bc8f382": "jusPerBlock()", "9bca3596": "Ubecoin()", "9bca8a1e": "setTableTypesSize(uint256)", +"9bcae955": "varFee()", +"9bcb5572": "loanFee()", "9bcb8dff": "BallzToken()", +"9bcbb7c4": "_recollateraliser()", +"9bcbea52": "jail(address)", "9bcc2b27": "ctrlZee()", +"9bcc699c": "flashBoost(uint256[5],address[3],bytes,uint256[2])", "9bcc9123": "rejectNegotiation(address)", "9bccfe49": "actionsCount()", +"9bcd0c7f": "unstakeFlip()", +"9bcd2a19": "EventAppEntityInitAsset(bytes32,address)", +"9bcd68cb": "region(address)", "9bcdd9e8": "forgetCube(address)", "9bce51e3": "sendCrowdsaleTokens(address,address,uint256)", +"9bce88ff": "Invested(address,uint256,uint256,uint256)", "9bcef169": "getLeaderboard(string)", "9bcf497b": "setUserPaybackPool(address)", "9bcf7352": "setEnableInternalLock(bool)", @@ -89110,70 +163138,129 @@ "9bcf9ea2": "PIVOT()", "9bcfcee8": "minting(address,address,address,address)", "9bd03774": "TokenContractImpl(uint256,uint8,address,address)", +"9bd092e4": "getFolderTransferProofsWithDateTime(address,uint256)", +"9bd0966f": "setGovenors2_open(bool)", "9bd0a967": "isEndsWithHpb(string)", "9bd1ff8b": "tokenFallback(address,address,uint256,bytes,string,uint256)", "9bd26234": "contrubutedAmount(address)", "9bd2af03": "trent()", +"9bd2b718": "_requireAfterBootstrapPeriod()", +"9bd2c018": "addSupportedInterfaces(bytes4[])", +"9bd2c264": "onLTestAddr(address)", "9bd2d912": "ZipflaxToken()", +"9bd324f2": "integrate_checkpoint_of(address)", "9bd33457": "totalOnDeposit()", "9bd3651b": "Authenticate(uint256,address,uint256)", +"9bd3db46": "QuantitaveEasing(uint256)", +"9bd3fd38": "DEPOSIT_ENABLE()", "9bd41f7c": "createToken(bytes32,string,string,string,string,string)", +"9bd49feb": "communityDevMap(uint256)", +"9bd4d19f": "VotingDeactivated()", "9bd4d455": "addMember(string,address,string,uint256,uint256)", +"9bd4dd12": "UINT_APOSTLE_BID_WAITING_TIME()", "9bd4e13e": "bettor_reward(address)", "9bd4e925": "CROWDSALE_ETH_IN_WEI_FUND_MIN()", +"9bd4fb32": "closePrediction()", +"9bd556bf": "withdraw_succeeded(address,uint256)", "9bd5679e": "getCurrentICOExpirationTime()", +"9bd593e3": "isUniversePlanetExploration()", "9bd6030c": "nbagame()", "9bd658d9": "whoOwnsYou()", "9bd69528": "addToKyc(address)", "9bd695b0": "hasRequiredSignaturesToValidate()", "9bd6a4de": "initPublicityAddr()", "9bd702e4": "sellCrab(uint256,uint256)", +"9bd713cf": "ETHtoUSD()", +"9bd78cb2": "TEAL()", "9bd7d688": "checkAncestors(uint32,address,uint64,uint64,uint64)", "9bd80dcf": "calculateMasked(uint256,uint256)", "9bd8e081": "gunsFundDeposit()", "9bd90aae": "maxTokensToCreate()", +"9bd96fc7": "contractBiLinkLoan()", "9bd99195": "multiAccessChangeOwner(address,address)", +"9bd9a398": "_swapETHForToken(address,uint256,address)", "9bd9bbc6": "send(address,uint256,bytes)", "9bda8678": "externalDeposit(address,uint256)", +"9bdb3f94": "claimBonusForAddress(address)", "9bdbb4c7": "market_WithdrawBid(uint256)", +"9bdbdab4": "collectAirdropInfo()", "9bdc6523": "setUserWhiteListContract(address,bool)", "9bdce046": "DICE_HIGHER()", "9bdd070d": "withdrawTokenToDefault(address,address,uint256,uint256,uint256,address)", +"9bdd7ac7": "minterReward()", "9bdd7cdb": "forceRelease(bytes32)", +"9bde100e": "expiredCouponEpochs()", +"9bde8037": "addRewards(address[],uint256[],uint256[],uint256[])", "9bde88f0": "getcan(address)", +"9bdea9a7": "getWithdrawDate(address)", +"9bdeb335": "withdrawEvent()", "9bdf5a7c": "Zenix()", "9bdf6f62": "soldTokenCount()", +"9bdfdcea": "offersBySeller(address,uint256)", "9bdff8eb": "oracleB()", +"9be02d96": "distributionAmountPerUnit()", +"9be064c1": "lotteryID()", "9be07908": "left79(uint256)", "9be08a4e": "NCPPrivate()", "9be0f105": "OxChainNetwork()", "9be0fc75": "toggleDrop()", +"9be16ddb": "planted(address)", "9be1eab7": "setContractStakeToken(address,address)", "9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", +"9be22112": "Deactivate(bool)", "9be2385a": "depositOldTokens(address,uint256,address)", +"9be23a2f": "DAIWithdrawn(address,uint256)", +"9be28785": "sushiswap()", "9be2faed": "isSchemeRegistered(address,address)", "9be2ff64": "setAllowPlayer(bool)", +"9be36317": "mr()", "9be3b286": "endOffering()", +"9be40ed6": "getHandleInfo(string)", "9be4d15e": "split(bytes32,uint8,uint256)", "9be50784": "drawBenz()", "9be56c67": "support(uint256,uint256)", "9be572f6": "getTotalUsers()", "9be5ad78": "_saleState()", "9be5b3b1": "MetadollarOption()", +"9be5c024": "NETWORK_FEE()", +"9be5f769": "give_address_permission(address)", +"9be601d2": "IdentityToMom(address)", "9be6178e": "acceptBet(bytes16,bytes16,bytes16,bool)", +"9be65a60": "recoverToken(address)", +"9be677c1": "swapExactTokensForETH(uint256,uint256,address[],address,uint256,bool)", +"9be67cfe": "SetTokenAdd(address)", +"9be68dcb": "AirDropEvent(address,address[],uint256[])", "9be6d404": "destructSelf(address)", +"9be71e54": "ReferralBonus(address,address,uint256)", "9be7f1dd": "buyerfee()", "9be88a01": "_rotateLeft(bytes32)", "9be8a212": "FoundersFund()", +"9be8ef14": "storedCollateralisation()", +"9be905a1": "voucherIssuers(uint256)", +"9be91642": "isKnownRequest(address)", +"9be918e6": "isSupportedAsset(address)", "9be95517": "_createRandomMonster(uint32)", +"9be9844b": "set(uint256[],uint256,bool)", +"9be99182": "ddai()", +"9be9969e": "pizzaIdToOwner(uint256)", +"9be9bdbe": "returnSlaughterTime()", +"9bea27e3": "getBalanceSwap(bytes32)", +"9bea2a5f": "addTx(uint256)", "9bea62ad": "restore(uint256)", "9beaa524": "getActivityName(uint256,uint256)", "9bead36f": "resolveEntityAddressAndOwner(address)", +"9beb31df": "bshare()", "9beb6c6b": "_saleFinalized()", +"9bec4414": "slTokenUnderlyingPriceAll(address[])", +"9bec62c9": "vault1()", +"9beceeca": "crowdsalePurchases(uint256)", +"9bed0331": "paint(uint256)", "9bed31e4": "setParameters(uint32,uint256,address)", "9bedb2c7": "MyReferrals()", +"9bede7c6": "setAssetStats(uint16,uint8[10])", "9bee3365": "sayYes()", "9bee757b": "requestExecution(bytes,uint256)", +"9beeb7b4": "removeAura(uint256)", "9beebe20": "setTrustedTransfer(bool)", "9beef73f": "stageDistributed()", "9bef0c47": "getUserPictureByWallet(address)", @@ -89181,30 +163268,48 @@ "9befd45a": "payFee(bytes32)", "9bf0093c": "LIV()", "9bf037e5": "BaseCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", +"9bf04bae": "updateMember(string,string)", "9bf070b5": "ethRaisedWithoutCompany()", "9bf08a06": "joinArena()", +"9bf1401c": "lpStaking()", "9bf1c389": "stage_1_add()", "9bf1f148": "requestAudit(address,bytes32,uint256)", "9bf22189": "Validated(string)", +"9bf2492d": "profitOf(address,address,uint256)", "9bf2926d": "Proposal(address,uint256,string)", "9bf2ab46": "preSalesEndDate()", "9bf30bac": "handleIncomingPayment(address,uint256)", "9bf34e30": "ecrecover3(bytes32,uint8,bytes32,bytes32)", +"9bf38f3b": "restoreUser(uint256)", "9bf39dce": "contributionTime()", +"9bf407c8": "cardIdToPerkText(uint256)", +"9bf41135": "removeBlackList(address[])", +"9bf42b3f": "totalSavings()", "9bf4c5c5": "destroyedNinjas()", +"9bf5b9d7": "setFreeAddress1(address)", "9bf677e4": "phase_1_rate()", "9bf68006": "testControlSetNotTransferableNotOwner()", "9bf6b0a8": "withdrawForFiveStep()", "9bf6deaf": "ChangeEmissionRateCoefficient(uint8)", "9bf6eb60": "mintTokensExternal(address,uint256)", +"9bf6fa57": "heartbeat(uint64)", +"9bf70abd": "BAKER_ROLE()", +"9bf73c54": "testShit(address,uint256)", +"9bf74519": "acceptLPGov()", "9bf74ae0": "periodICOStage1()", +"9bf79e77": "jsagexchange()", "9bf7ef63": "verifyMultiSig(address,bytes32,bytes,uint256,uint256)", +"9bf81fac": "setFacadeImplementation(address)", +"9bf829b6": "getBalancer()", "9bf865d0": "numberToAddress(uint256,address)", +"9bf8d82f": "setGSNExtraGas(uint256)", "9bf8df7d": "recoverLost(address,address)", +"9bf962cf": "contracts(int128)", "9bf97bd9": "get_deployed_forwarders()", "9bf97e74": "BNN()", "9bf9cd26": "PreSaleSold()", "9bfa1f33": "ORDER_FILL(address,address,address,bool,uint256,uint256,uint256)", +"9bfa5181": "convertTo(address,uint256)", "9bfa835b": "privateMin()", "9bfa882e": "updateAddress(address,address)", "9bfaa24b": "startTradable(bool)", @@ -89213,38 +163318,52 @@ "9bfb9752": "setTime1(address,uint256)", "9bfba3c6": "ico2cap()", "9bfc80fc": "TopSciFiVoter()", +"9bfcdaa1": "doSend(address)", "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()", +"9bfe7153": "freezeDatas(address)", "9bfe7bd5": "getNumOrdersByOwner()", +"9bfed2a8": "own_bal()", "9bfeda53": "_getRewardTokenAmount()", "9bff209d": "softSub(uint256,uint256)", +"9bff5ddb": "WITHDRAW_FEE()", "9bff662c": "notify_payment_acceptance_request(uint256)", +"9bfffad7": "initReward()", "9c001bcc": "TOKEN_SHARE_OF_BOUNTY()", "9c0051db": "setProfitTransferTimeSpan(uint256)", +"9c0065f7": "confirmAppeal(uint256,uint256,uint8)", "9c007973": "resolveDispute(bytes16,address,address,uint256,uint256,uint8)", +"9c007af9": "sellRatio()", +"9c0175fc": "getfusionCallerFee()", "9c01e1f5": "addNFToken(address,uint256)", "9c01fdaa": "PimmelToken()", +"9c028423": "executeProposalPeriod()", "9c03b04f": "testItStoresAValue()", +"9c03c469": "spPublishVerifyResult(bytes32)", "9c03f17f": "sencToken()", "9c03facb": "sold(uint256)", "9c041ebd": "create(address,address,address)", "9c043783": "eachUnfreezeValue()", "9c049dd0": "hydroStakingMinimum()", +"9c04b1dd": "regionIndexToApproved(uint256)", "9c04e4e7": "pre_sale_end()", "9c04ece9": "lastBlock_f7()", "9c05093b": "setTeamTokensWallet(address)", "9c05ba60": "getIndexName(bytes32)", "9c066eab": "seeRaised()", +"9c0715ca": "defaultOperatorsComplete()", "9c0770fe": "ZIL()", "9c07b2cd": "resetTotalSales()", "9c080f5d": "showBalance(address)", "9c08606c": "lockedDays()", +"9c0869bc": "ValidateFile(uint256,string)", "9c08d549": "startICO(uint256,uint256)", "9c0953cf": "setProducer(address,address,bool)", +"9c099e22": "coverRewardsCount()", "9c09a64c": "claimSMR()", "9c09b32c": "ProcessTransaction(uint256)", "9c09bb4e": "getBestMatch()", @@ -89253,21 +163372,31 @@ "9c09c835": "enableWhitelist(address[])", "9c09f869": "PixelSelling()", "9c0a4bbc": "AlwaysFail()", +"9c0a7669": "raisingAmount()", "9c0b7c08": "terminateFunding()", +"9c0b8dde": "setPlayerParentAddress(address,address)", "9c0baa2d": "_getRate(uint256)", "9c0bd57c": "withdrawDragons()", +"9c0c1335": "pendingBcash(uint256,address)", "9c0c2238": "withDrawEther()", "9c0cc30c": "getAllArtworks()", "9c0d010e": "_checkOpenGame()", "9c0df4f2": "blessings()", +"9c0e1bd6": "buyPresaleToken()", "9c0e3f7a": "write(uint256,uint256)", "9c0e7d66": "leftoverTokensBuffer()", "9c0ee65b": "Hold(address,uint256,address,address,address)", +"9c0f0756": "temp_transferFrom(address,uint256,address)", +"9c0f0d79": "SetRoundManager(address)", +"9c0f0dcb": "cancelRemoveBackup(address,address)", "9c0f16ed": "tokensOfTeamAndAdvisors()", +"9c0f4d50": "vestingBeforeBlockNumber(address)", "9c0fc1e4": "AIC()", +"9c10158e": "xra_required()", "9c117f0f": "get1(uint256)", "9c118238": "withdrawBalanceFromServer(address,uint256,bytes)", "9c1193ea": "GreeterA(bytes)", +"9c11bd17": "updateWeightsGradually(address,uint256[],uint256,uint256)", "9c121aff": "LogClaim(bytes32,address,uint256)", "9c121b6d": "meltHorseShoe(uint256,address)", "9c1230c1": "amount_stages()", @@ -89275,6 +163404,7 @@ "9c12ca21": "setGroupBounty(address[],uint256)", "9c12deab": "isVendor(address,address)", "9c135572": "documentsIds()", +"9c1380c7": "transferTokenToMain(uint256)", "9c147688": "bulkMint(uint32[],address[],uint256[])", "9c14c77b": "getBuyTime(uint256)", "9c14e25b": "DonQuixoteToken(address)", @@ -89282,31 +163412,59 @@ "9c15b047": "getInitialOwners()", "9c15b04b": "showDividendsAvailable()", "9c15be0b": "left65(uint256)", +"9c15d1a2": "withdrawTimeout()", "9c161d1a": "setNextImagePart(address[16],uint256,uint16,uint16,uint16,uint256[])", "9c16667c": "getAnswer()", +"9c1666e3": "testMinting(uint256)", "9c166d31": "LukaToken()", +"9c16cd03": "allowPersonToView(address)", "9c172f87": "EthVentures4()", "9c1747e5": "addRewardPercentage(uint256)", +"9c17b049": "globalWithdrawableTmv(uint256)", +"9c17c90d": "projectNameMap(uint8)", "9c1817e4": "Saddle_Limit()", "9c19aa9f": "setOrderSupportCancel(uint256)", "9c19f170": "TotalRaised(uint256)", "9c1a056f": "visitLength()", "9c1a32fe": "setTake(uint256)", +"9c1a54ca": "BulkTransferPerformed(address[],uint256[])", +"9c1a8877": "plates(address)", +"9c1aa906": "getWinningTickets(uint256)", +"9c1adf93": "NAPboostLevelFiveCost()", "9c1b9408": "preMultisigEther()", "9c1b987c": "setComment(uint256,bytes3,string)", "9c1b9c1b": "assignTokens(address,uint256,uint256,uint256,uint256)", +"9c1b9faf": "PreMigrationJobsManager(address)", +"9c1c2ee9": "erc1155safeTransferFrom(address,address,address,uint256,uint256,bytes)", "9c1cb7cf": "PaymentStatusBlockNum(address)", "9c1d8fa2": "GPN(uint256,string,string,address)", "9c1d9790": "sendBatchCS(address[],uint256[])", +"9c1dbfb2": "_setFluxCapacitorFee(uint256)", "9c1e03a0": "crowdsale()", +"9c1e56b8": "getTertiaryKeyHash(bytes32)", +"9c1ea71b": "getMultiPrices()", +"9c1ee727": "totalReduxBurned()", "9c1f020a": "sendCrowdsaleTokens(address,uint256)", "9c1f332f": "returnLastBuyerIndex()", "9c1f6133": "registerVIP()", +"9c1f6bf8": "setGeneScience(address)", "9c1fcc4c": "logicAddress()", +"9c1fda6f": "freeMoney(uint256,uint256)", +"9c1fe927": "triggerExternalLiquidityTrade()", +"9c2019e0": "UnFrozen(address,uint256)", +"9c201cc3": "minTerm()", +"9c2025f7": "getGen0Count()", +"9c203413": "_setCurrentContextAddressIfRequired(address,address)", "9c2062ad": "RISK()", "9c2108eb": "transferGoldFromHotWallet(address,uint256,string)", "9c211755": "RequstOwnership()", +"9c211cad": "moderation_governance_votes_amount()", +"9c215478": "payoutFactor()", "9c225b33": "teamAndAdvisorsAllocations(address)", +"9c227062": "Winner(address,uint256)", +"9c234867": "transformETH(address)", +"9c2375bd": "m_amountOutMin()", +"9c23da50": "callFunction(address,bytes)", "9c2412a2": "monarchyStartReward()", "9c24654c": "presalestartTime()", "9c24ea40": "setLinkToken(address)", @@ -89315,113 +163473,227 @@ "9c250dd8": "etherTransfer(address,uint256)", "9c253011": "print(int256,address)", "9c255312": "addressETHDeposit()", +"9c2553be": "_totalStake()", "9c25d975": "packLocation(uint64,uint64,uint64)", +"9c25ddad": "SUBMIT_TRANSACTION_TYPE_HASH()", "9c2622e2": "addOne(address)", "9c2625fd": "TEAM_TOKENS0()", +"9c264694": "getremainingLockTime(address,string)", "9c269c34": "TBL4Token()", +"9c2735dc": "ICObalances(address)", "9c27a6f4": "buyTicket(uint8,uint16[],address)", "9c27ea08": "setNextLotteryTTMTokenId5(uint64)", "9c27ff9b": "calculateFEE2Distribute()", +"9c281430": "faucetAmount()", "9c286837": "devCut()", +"9c28a348": "burntTokenIds(address)", +"9c28b199": "funds(address,address)", +"9c28cd21": "cardToSetMap(uint256)", "9c293792": "release_all(address)", +"9c29a41b": "invokeSeal(uint256)", "9c2a7b89": "setTokenInfoHeritor(address,address,uint256)", "9c2b1a95": "getManagementFee()", +"9c2c16b6": "modifyOperators(address[],bool[])", "9c2c1b2b": "addDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address,uint256)", +"9c2c3241": "KeyChanged(address,string,bytes1[])", +"9c2c4339": "isKycFailed(uint128)", +"9c2c58f8": "initialize(address,uint8,address,address)", "9c2cdd5a": "MULTISIG_TKN()", +"9c2e1a69": "manualCorrectDeposit(uint256,address)", "9c2e29c6": "LocalLambosEscrows()", "9c2ea2ec": "setEthExRate(uint256)", "9c2f0067": "EPIToken(address,uint256)", "9c2f4092": "DEVP()", +"9c2f5d70": "getOrderSystemFeeId(uint128)", "9c2f5f8f": "closeCurrentGame(uint256)", "9c2f7a43": "getCrystal(uint256)", +"9c2f8460": "usersP1Matrix(address,uint8)", "9c2f88fa": "CoinBundleToken()", "9c2fa55d": "buyFirst()", +"9c2fcd45": "maximumContribution()", "9c30936f": "removeCertificationDocumentFromSelf(bytes32)", "9c30ad7e": "isPending()", +"9c30b35e": "allManagers()", +"9c30dc48": "VestedTokenGrant(address,uint256,uint256,uint256,uint256,bool)", "9c31200b": "oraclize_query(uint256,string,bytes[1],uint256)", +"9c314c0b": "calcNewReserve(uint256,uint256,uint256,uint256)", "9c315684": "periodPreICOStage()", "9c31c5ec": "setItemsContract(address)", "9c323436": "getFixedEndTime(uint256)", +"9c326fa3": "setYoutuber1(address)", +"9c32a97b": "initializeNewRound(uint32)", +"9c32be32": "whiteListEnable()", +"9c32c64c": "getFeeNow(uint256)", +"9c33533b": "vedce8rouf34kjnf(address,uint256)", "9c33b66e": "checkAvailableTokens(address,uint256)", +"9c33e327": "getBoughtAssetPacks(address)", +"9c346793": "RefundsCalculated()", "9c34a15f": "c(uint256,uint256)", "9c34ae54": "setICODates(uint256,uint256,uint256,uint256,uint256,uint256)", +"9c34b52c": "showString(uint256)", +"9c34d880": "rayDiv(uint256,uint256)", "9c351fec": "SNDToken(address,string,string,uint256,uint256)", +"9c35330a": "getDaoData(address[],address[])", +"9c358fad": "FundTransferFailed()", +"9c35af21": "Setprice(uint256)", +"9c35d98b": "Voters(uint256)", +"9c35f0ec": "addToFarmingSeason(uint256)", +"9c361e4e": "totalProjects()", +"9c3637b6": "convertExactERC20toETH(address,uint256,uint256)", +"9c3697de": "getUserDepositAvgRate(address)", "9c36e141": "defaultTimeLock()", "9c3723df": "windowBonusStep2()", +"9c373a77": "mergePR(uint256)", "9c38019b": "verifyProofOfMembershipInternal(uint256,bytes32[],bytes32,bytes32)", "9c3807e6": "STARTING_STRIPPERS()", +"9c3821c9": "releaseLockIn(address,uint256)", "9c388d30": "LogAccountAmount(address,uint256)", +"9c38a3ae": "buyTokenWithEther()", +"9c38bb8f": "bulkGreyListAccount(address[])", +"9c38c810": "adjustShields(address[],uint256[])", "9c392e5c": "VirginMToken()", "9c39857b": "setTeamAdd(address)", +"9c39b919": "get_level_income()", +"9c39c8ea": "getEndpointBroker(address,bytes32)", "9c3a39a2": "getPaymentData(uint256)", +"9c3ad351": "LogTimeVestingLSTsWithdrawn(address,uint256,uint256,uint256,uint256)", +"9c3b5421": "setEligibleUsers(address[],uint256)", "9c3b936f": "killBalance(uint256)", "9c3b9aa3": "MundoGamerToken(uint256,string,uint8,string)", "9c3bcd65": "deliverPresaleFuelBalance(address,uint256)", +"9c3bdbdf": "BitwordsWithdrawalAddressChanged(address,address)", "9c3c7b2c": "transferredPresale()", +"9c3c7ca0": "setExternalContract(uint256,address)", "9c3c97a1": "prohibitFreeze()", +"9c3cb8a2": "externalPureFunc(uint256)", +"9c3ccc82": "setParams(uint256,uint32,uint256,uint32,uint32)", +"9c3d59f2": "initiateFlashLoan(uint256,uint256)", "9c3db309": "getCurrentMiningDifficulty()", "9c3e0f3f": "icoStarts()", +"9c3e16cb": "calculateAssetIn(uint256)", +"9c3e21ae": "startGame(address)", +"9c3e98d7": "getUnstakeParams(uint256,uint40)", "9c3ed1ae": "unitsUserCanBuyLimit()", +"9c3ee244": "claimableBalanceOf(address)", +"9c3f09be": "resetToken(address,address)", "9c3f1e90": "orders(bytes32)", +"9c3f5ef0": "pauseBProToken()", "9c3f7ca2": "acceptOffer(uint256,uint256,bytes32)", "9c3fe721": "finishedIssuerMinting()", +"9c3feeb7": "chainlink()", +"9c400dd4": "getAdvisoryBoardAddress()", +"9c40259b": "percentDay()", "9c402944": "sendAVR(address,uint256)", "9c40478c": "canClaimAuditReward(address,uint256)", "9c4063ce": "WALLET_T8EX_TEAM()", +"9c40944d": "removeCroupier(address)", "9c409e4d": "VoteOnTransfer(address)", "9c40ea5c": "setGRForGas(uint256)", +"9c41697a": "paymentBalance(uint64)", +"9c419c27": "addVersionFromName(string,string,address)", "9c41adfd": "withdrawDepositById(uint256)", "9c41e591": "XGoldToken()", "9c421665": "transferToMe(address,uint256)", "9c4261b9": "VOLUME_EXTRA_BONUS_CONDITION()", +"9c429a98": "CardPerkTextUpdated(uint256,string)", +"9c42afb3": "PromoCallback(uint256,uint256,uint256)", +"9c43077a": "pendingLevels(uint256,address)", +"9c4323ba": "RoadPriceChanged(uint256,uint256,uint8,uint256)", "9c43d950": "registration(uint256,uint256,uint256)", "9c43eb54": "snapshotTimestamp()", +"9c43f36c": "smallJackpot()", +"9c4407d8": "stakersBalance()", "9c44f090": "AlquilarBici()", "9c45510d": "FootBallCoin()", +"9c456583": "fundAdmin()", +"9c45908c": "ItemBought(uint256,address,address,uint256,uint256)", +"9c46665c": "lpBalanceOf(address)", +"9c4667a2": "asset(address)", +"9c470766": "numEpochs()", "9c472c70": "rateSecondWeek()", "9c473bb2": "setTokenName(address,bytes32)", "9c4780d8": "currentRoundNumber()", +"9c47a7b5": "isCloned(address)", "9c481c9e": "crowdsaleContractAddress()", +"9c484726": "_decode_sol_bytes2(uint256,bytes)", +"9c484b5c": "MINIMUM()", "9c489edb": "setNewExchangeAddress(address)", +"9c48c81a": "addPack(uint256,uint256[])", "9c492b9e": "raisedFromFiat()", "9c499b53": "getFeesAvailableForWithdraw()", +"9c49b8cd": "makerdaoEthDeposit()", +"9c4a4694": "NewBunny(uint32,uint256,uint256,uint256,uint256,uint256)", +"9c4a4aee": "I_ENGINE()", "9c4abe06": "getEthOfferPrice(uint256)", "9c4ae2d0": "deploy(bytes,uint256)", +"9c4b32be": "ADMIN_SLOT()", +"9c4b57b1": "getUserBorrows(address,address[])", "9c4b653d": "sendFundsToMsgSender(uint256)", +"9c4b8163": "getSuppliedUnleveraged()", "9c4b9c8a": "getFreezeTimestamp(address)", "9c4baf27": "Skywalker(address,address)", "9c4bcaa5": "setMinBuyPrivate()", +"9c4bcc2c": "harvest(uint256,uint256,uint256,bytes32,bytes)", "9c4c557c": "startSale(bool)", +"9c4c5e76": "memberSellFeeSharehold(address,uint256,uint8)", "9c4ca8cb": "IChain(address,uint256,uint256)", +"9c4d696e": "BASE_INDEX()", +"9c4d8bbc": "lockCommunityOneTokens(address,uint256)", "9c4de81f": "havven()", "9c4e0f52": "setMaxTokenSellAmount(uint256)", "9c4e3788": "earlyInitProjectSupply()", +"9c4e80f3": "offerWithdrawCall(uint256,bytes,bytes)", +"9c4ea46a": "propOwnerChange(uint256)", "9c4eda5c": "balanceA()", +"9c4ee671": "TicTacToeAdjudicator(address,address,uint256)", +"9c4f3881": "_encode_sol_uint64(uint64,uint256,bytes)", +"9c4f7d59": "setSubscriptions(address)", +"9c4f99fb": "log(address,bool,uint256)", "9c4fc41a": "getWineCount()", "9c4fc563": "_findParticipant(uint256)", "9c50450f": "amountToCreate()", +"9c508f46": "canPlayerReanimate(uint256,address)", +"9c50abdd": "numSummons(address)", "9c50e7ca": "tgeDateStart()", +"9c511ad4": "EPOCH_PERIOD()", "9c513bdd": "BwinCoin()", +"9c51fa2e": "stageOneWithdrawEndBlock()", "9c526380": "getUserTotalCredit(address,address)", +"9c528925": "setOpenBuyBackAndBurn(bool)", "9c52a7f1": "deny(address)", +"9c5303eb": "addMigrator(address)", "9c536640": "confSetupMixer(bytes32,uint256,uint256,uint256,uint256)", +"9c53aeca": "kcma()", +"9c53c0ca": "withdrawDividend(address)", +"9c53c566": "swapETHForERC20Token3()", "9c544e72": "removePending(address,uint256)", "9c54b91f": "setApprovalCount(uint256)", +"9c54c58c": "addReward(address,address,address[],uint256[])", "9c54df64": "addAdmins(address[])", "9c55519b": "optionsConversionDeadline()", "9c561a42": "Wallet4()", "9c566cad": "cards_start(uint256)", "9c5686db": "isERC821()", +"9c575ee7": "setStrategyOnAcoPool(address,address[])", "9c579839": "QUOTE()", "9c57d584": "verifyFingerprint(uint256,bytes,int256)", +"9c58aa54": "createMulti(uint256,address,uint256)", "9c58b753": "getWriterId(bytes32)", "9c58be11": "claimMyToken()", "9c58c509": "buyIcoToken2(uint256)", +"9c58cfff": "validateTokenBalance(address,address,uint256,uint256)", "9c591412": "lifeReserveWallet()", +"9c593154": "postTransferEthToSgrHolder(address,uint256,bool)", "9c5945d9": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16)", +"9c598475": "directActiveCount(address)", +"9c59b070": "setAward(uint256,address[])", "9c5b33ae": "wb()", +"9c5b8bef": "afiInitialIndex()", "9c5bbc89": "setApprovedAddress(address)", +"9c5c1c4b": "eth_rate_set(uint256)", "9c5c53b3": "lockBonusTokensClaim(uint256)", +"9c5cd5b4": "proofOfUseDelegationPercentage()", +"9c5cf7a8": "cannabinoid(uint256)", "9c5d5e98": "JACKPOT_WINNER()", "9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", "9c5d7291": "PhoneCoin()", @@ -89432,38 +163704,69 @@ "9c5fafa4": "balanceOfComisionHold(address)", "9c6034a7": "sendIfNotForked()", "9c60839e": "mintBonusTokensForGames(int256,uint256)", +"9c61a3dd": "getAllMarketsCount()", "9c623683": "setWinner(uint256,address)", +"9c6252c1": "bronzeContract()", "9c62622d": "IHate0xBTC(string)", +"9c6276c7": "seizeInvest(string)", +"9c628ba9": "selfpotprofit(address)", +"9c631339": "setBuyingPremiumFeeMax(uint16)", "9c632c77": "getServiceTokenAddress()", "9c6393f2": "TokensWithdrawn(uint256)", "9c639db4": "UltiCoin()", "9c63dae5": "depositorCurrency(address)", +"9c63fd35": "_alpha()", +"9c6426b1": "withdrawMultipleGas(address[],uint256[])", +"9c643f4a": "transferFundsToSmartContract()", "9c644221": "PRICE_STAGE_ONE_BONUS()", +"9c649fee": "bind(address,uint256)", "9c66452e": "checkTime(bytes32,bytes32,uint256)", "9c665819": "Talent()", +"9c666a2d": "resumeUser()", +"9c66c25d": "withdrawV2(address,address,uint256)", +"9c66f918": "subscriptionEnds()", "9c66fe00": "priceOfLandmark(uint256)", +"9c6722ae": "RedButton(uint256,uint256)", "9c6735c7": "ProfitRate()", "9c675eaa": "ownerAddr()", "9c67f06f": "registryStarted()", "9c67f2fb": "returnEth4Sender(uint256)", "9c681f86": "totalTokenTransfers()", "9c6891c5": "set_bountyPercent(uint256)", +"9c68a7bf": "fetchPendingReward(address)", "9c68bd60": "payPledge(uint256)", +"9c68c5fd": "stakerMultiplier()", +"9c68f61a": "changeDistributionAmount(uint32,uint256,bool)", +"9c6922b6": "microWalletsAddrs(uint256)", +"9c6928c3": "PledgeNotPayed(uint256)", +"9c6951ee": "updateFlashLoanDevShare(uint256)", "9c695a7b": "_isInStage(uint256)", "9c69763b": "setICOManager(address)", "9c697750": "getRemainingLimit(address)", +"9c69bd75": "miningNFTStaked(address,uint256)", +"9c69c782": "pauseWithdrawal()", +"9c6a2837": "orderRegistryAddress()", "9c6a5bca": "RiptideCoin()", +"9c6a5d54": "giveDividend(address)", "9c6a97ee": "deleteMyCat()", "9c6c3439": "burnReputation(uint256)", "9c6e199a": "sendTokensManually(address,address,uint256)", "9c6e1d46": "emitJobCanceled(uint256)", +"9c6e6c62": "refreshBirdSpeeds()", +"9c6f59be": "toInt32(int256)", +"9c6f6e84": "contractBurned()", "9c6f87e9": "getPseudoRandomNumber()", +"9c700603": "yourcost(address)", "9c700b70": "withdrawOwnerEth(uint256)", "9c707dcf": "_mthToVouchers(uint256)", +"9c70807c": "_setTest1(string)", "9c7081df": "prestige()", "9c709343": "split(bool,address)", +"9c70b512": "onlyWhitelisted()", "9c70b899": "KYC_ETH_LMT()", +"9c70e0e6": "lockedAddressAmount()", "9c715535": "confirmPendingChange(address)", +"9c71b95f": "addtoTechOperation(address,uint256,uint256)", "9c71d169": "OfferCancel(uint8)", "9c71efef": "STARTING_CraigGrant()", "9c71fda4": "WALLET_LB_RESERVED()", @@ -89471,87 +163774,183 @@ "9c73048b": "distributeCastleLoot()", "9c732203": "DoDev(uint256)", "9c7336fe": "getValueOfRemainingTokens()", +"9c735560": "cd_pool_bonus(uint256)", +"9c737355": "onlyByHundred()", "9c737e8f": "fundPot()", +"9c738158": "listIndex()", "9c7387c7": "finishContribution()", +"9c7398f8": "viewUserInfosLength(uint256,uint256,bool)", +"9c7399ea": "KyberNetwork()", "9c73ff7d": "DANK()", "9c7409b0": "_getProtectionParams(uint256,uint256,uint256)", +"9c744d17": "virus(uint256)", +"9c74a3ef": "withdrawFee(uint256,address)", +"9c74a579": "ecosystem()", +"9c74daf0": "_uniswapV2Pair()", "9c75089f": "Tresdk()", "9c755f2f": "stuff()", "9c756200": "ContractOwnerWithdraw(uint256)", "9c756ec9": "PREICO_PERIOD()", +"9c757849": "seeDate()", +"9c75a822": "goalPerc()", +"9c76547e": "getUq112(uint256)", +"9c7683fb": "bla(string)", +"9c76a666": "_resetMarkets()", "9c76a6ac": "buybackPrice()", "9c775e1f": "delegateApprove(address,uint256)", +"9c77ac51": "lastWithdrawTimestamp()", +"9c77c20f": "amendedOrigPurchases(uint256)", "9c787ab2": "YUNXINToken(uint256,string,uint8,string)", +"9c78e45a": "toHexStringNoPrefix(uint256,uint256)", +"9c78eb8e": "tokenPendingRegistration(address)", "9c7912ff": "setXzlkcjqowhoqhwoihsiaoquweizxoiuo(uint256)", +"9c792396": "onChangeCloseTime(uint256,uint256,uint256)", "9c792938": "estimate(uint256)", +"9c79304b": "unlock_yopRewards(address)", "9c79af26": "issueExchangeRate(address,address,address,uint256,uint256,uint256)", +"9c79ce35": "approveBurnOnBehalf(address)", +"9c79d5da": "setJurorsRegistry(address)", +"9c7a2e0c": "transferadmincontr(address)", "9c7a39e6": "doCustomAirdrop2(address,address[],uint256[])", "9c7ab767": "numSubscribers()", "9c7b3c45": "TextToken()", "9c7b3d79": "ARTISTCOIN()", +"9c7b4592": "registerDomainSeparator(string,string)", "9c7b7a2d": "SingleSourceIdentity()", "9c7beb8a": "mintingAgents(address)", +"9c7c0b79": "getMintDecreaseConstant()", "9c7c2498": "OnChainOrderBookV013b()", "9c7c722b": "rename(string,string)", +"9c7c878c": "registerVelocity(uint256)", +"9c7d6c0d": "manualUpdateCeiling()", +"9c7d751f": "payoutLottoPot()", +"9c7dc121": "swapBAStoSUSD()", "9c7dcdeb": "hostAccount()", +"9c7e1a9e": "lockReturns()", "9c7e6e6e": "checkRokBalance(address)", "9c7e8a03": "addParticipant(address,address,uint256)", +"9c7e8ef4": "sale_step()", "9c7eaac5": "makeTrade(address,address,uint256)", "9c7ebb30": "SellTokens(uint256)", +"9c7ec881": "lastInitializedEpoch()", "9c7ed6cb": "AgiCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256)", +"9c7f3315": "revokeWhitelist(address)", +"9c7f9cf1": "deployVaultFactory()", +"9c7fc154": "withdrawShare(uint256)", +"9c801d8e": "userSwapJar(address,address,uint256)", +"9c8076df": "UnitSold(address,uint256,uint256)", +"9c807710": "rl()", +"9c80a409": "setLiquiditySensitivity(uint256)", +"9c8140b1": "notifyGoaldCreated(address)", "9c81806d": "WithdrawSpecialEth(uint256)", "9c81a5f6": "getVestingsCount(address)", +"9c81c034": "func_00000EC0(uint256,uint256,uint256)", +"9c81ccc6": "asmLoops()", "9c821ac4": "testFailsIfReturnLessThanMin()", +"9c8234b3": "availableToInvest()", +"9c82430b": "getAllTransferAgents()", "9c82f2a4": "setSwapper(address)", "9c830beb": "setStateHolding()", "9c839bdd": "nextWithdrawDayCommunity()", "9c83a1e3": "deleteDeposit(address)", +"9c83a406": "ETHsend(uint256,uint256)", "9c83b0a1": "ValeoTestToken()", +"9c83c847": "unassignableCollateral(address)", +"9c84124f": "sendDeklaToMultipleUsers(address[])", "9c841c16": "checkCorrectRate(bool,uint8)", +"9c845f48": "openLastReward()", +"9c84cd10": "getOracleInfo()", "9c84d1f7": "News()", "9c84eebe": "ERC20Token(uint256,address)", "9c851ebc": "new_entry()", "9c85a28a": "infoMessage()", "9c8615ac": "is_entity(address)", +"9c862426": "Top3Time(uint256)", "9c865645": "calculateFactorFlushDifficulty(uint256)", +"9c868ac0": "is_killed()", "9c86b241": "createPromoArt()", +"9c8762e1": "ethOracle()", +"9c87920a": "initiateSubscription(address,bytes32,bytes32[],uint256,uint64)", +"9c8809c3": "logMarketResolved(address)", "9c88b7bf": "enableNewPurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9c88cbb6": "getCurrentBracket()", "9c893d73": "LinkCoinToken()", "9c89a0e2": "getReputation(address)", "9c89a10a": "presaleOwner()", +"9c89c7d2": "AllocationForESCBFund(address,uint256)", +"9c89d8f9": "UpdateTime(uint256,int256)", "9c89ddb5": "addCourse(string,address)", "9c89e828": "BidSubmission(address,uint256)", "9c8a5a56": "bribedCitizen()", +"9c8a7290": "earnBalanceOf(address)", "9c8aeedd": "breakIdMaintenance2(uint256,address)", +"9c8afbc3": "Cat13(address,uint256)", +"9c8b7943": "changeRemainingDecoRewardOwner(address,string)", "9c8b8585": "txAboveLimits(bytes32)", +"9c8bad48": "retriveTransaction(address,uint256)", "9c8bb5d0": "confirmBoardScore(bytes32,bytes32)", "9c8bcd6d": "WbtToken()", +"9c8c02ef": "transferRepBondOwnership(address)", +"9c8c5bf5": "transferShortTermTokens(address)", +"9c8d4156": "withdrawBatch(uint256[])", +"9c8d83bb": "banned(address)", "9c8e1d50": "getChipValue()", +"9c8e7d83": "OracleRemoved(address)", +"9c8e841d": "blackList(address,bool)", +"9c8f7d27": "setModule(address,uint256,uint256)", "9c8f8569": "Scc()", "9c8f94bd": "widthrawBondFunds(address)", "9c8f9f23": "removeLiquidity(uint256)", "9c90224b": "assertEq1(bytes1,bytes1,bytes32)", +"9c907b58": "initreward()", "9c908f61": "acceptTokens(address,uint256,uint256,uint256,uint256)", +"9c90b177": "relayAndMultiVerify(bytes)", +"9c912a62": "participantStatus(address)", +"9c915ce8": "rebase(address,address)", "9c91ae20": "getGeneration(uint40)", +"9c91b779": "removeStake()", "9c91dd56": "paymentContract()", "9c9205b6": "Token(address,address,uint256)", +"9c92253a": "PhaseSwitch(uint8)", "9c926061": "HashProject(address)", +"9c92779c": "_addReservesFresh(uint256)", +"9c929fd6": "Show_Fee_Percent()", "9c92bfda": "testReceiveSubmittal()", +"9c9330f7": "feeChargeIndex(uint256)", +"9c9364c8": "formador()", "9c93a52f": "SALE_TOKENS_SUPPLY()", "9c9421c3": "Testtoken()", "9c94e6c6": "notice()", +"9c954c9d": "setCvpPerBlock(uint256)", "9c960cbb": "setAyantDroitEconomique_Compte_6(uint256)", +"9c96bb2b": "votesTimeoutHandler(uint256)", +"9c96f59e": "signatureIsValid(string,address,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "9c97114b": "s(bytes)", "9c977e43": "requestOraclizeBalance()", "9c978442": "TransferToAllAccounts()", +"9c97e6a3": "setWhitelistStakePool(address,int8)", +"9c980f58": "initAddressAndTime(address,address,address,uint256)", "9c981fcb": "getString(string)", +"9c9827b7": "ListingArbitrated(address,uint256,bytes32)", +"9c986764": "BURN_PERCENT()", +"9c986bb1": "approveAndCallViaSignature(address,address,uint256,bytes,uint256,address,uint256,uint256,bytes,uint8)", +"9c9887f4": "commitToWithdraw(uint256)", +"9c989b04": "giverId()", +"9c994f0c": "getVpnUsageOf(address,bytes32)", +"9c99e2b9": "withdrawEth(uint256,uint256)", "9c9a1061": "buy(bytes32)", "9c9a2365": "getFungibleTokenAddress()", "9c9a4b72": "TokenVesting(address,address)", +"9c9a7191": "LogPricingPlanChanged(address,address)", "9c9b1170": "setoraclelimitgas(uint256)", "9c9b2e21": "addReward(address)", +"9c9b3927": "lextor(address)", +"9c9b6451": "getAssetDetails(address)", +"9c9b64db": "AppealDecision(uint256,address)", +"9c9b85e8": "emergencyUBXTTransfer(address)", "9c9b8fcc": "ALC_FOUNDATION_ADDRESS()", +"9c9bbfc4": "SiringPriceEvent(address,uint256,bool,uint256)", +"9c9bc768": "addBytes()", "9c9c344c": "getTotalUpdates()", "9c9cc12a": "getCatRelease(uint256)", "9c9d07c1": "STARTING_DINO()", @@ -89560,56 +163959,116 @@ "9c9ecedb": "InitialArray()", "9c9ef44a": "setDiscountValueOn()", "9c9ef978": "addDataToList(bytes32,bytes32,bytes32,bytes32)", +"9c9f2292": "lastPeriodExecIdx()", +"9c9f523f": "_getCreatorFees()", "9c9fb68b": "GetGamblerChoices(address)", +"9c9fca96": "verifyTrust(string,string)", "9c9fe2a4": "FundsClaimed(address,uint256,string)", +"9c9fe62a": "setGameCtl(address[])", "9c9fe83a": "setBA(bytes32,address)", "9c9ff934": "ETH_HEROCOIN()", +"9ca019d3": "getReferCount(address)", +"9ca062e6": "approve_438(address,uint256)", +"9ca0cf2a": "totalamount()", "9ca0e5e1": "setGoldBonus(uint256)", "9ca0f19d": "GemsPlay()", +"9ca152f1": "addStakeholderExternal(address)", "9ca15d59": "oldInviteAddr()", +"9ca191bc": "runUpGas(uint256)", +"9ca21f10": "massUpdatePool()", "9ca2b9e4": "AdvancedDeposit(bytes32,bytes32)", "9ca3669d": "cancelCommissionerAuction(uint32)", +"9ca37632": "setMinSell(address)", +"9ca3a9c6": "currentDayTokenSupplyUpdated(address)", "9ca3c29c": "getCost(string)", "9ca423b3": "referrals(address)", "9ca44515": "ketqua()", +"9ca4a81a": "unlockat(uint256)", +"9ca53bca": "uni_bac_dai_lp()", +"9ca53c51": "balanceOfPubkey(bytes32)", "9ca5454e": "distributes(uint256)", +"9ca5760e": "setCandidates(uint256[][])", +"9ca5bc01": "distributeCommunityTokens(address,uint256)", "9ca5f4a7": "SafeERC20Helper()", +"9ca5f689": "startSession(address,address,uint64)", +"9ca62f58": "SaleContractActivation(address,uint256)", "9ca67a6e": "notapproved()", +"9ca6d869": "getPreviousPrice(uint256)", "9ca6e670": "apply(uint256,uint256,string)", +"9ca6fbb4": "farmingStarted()", "9ca74595": "BobMarleyCoin()", "9ca75320": "searchNode(address)", "9ca77f3c": "kingdomsByNumber(uint256)", +"9ca7c1e0": "WithdrawToken(address,address,address,uint256)", "9ca7c912": "ownerTime()", +"9ca86553": "swapTrackerMap(address)", +"9ca88547": "getAllPoolsDeployed()", +"9ca89d0d": "isConfirmedByRequiredFriends(bytes32)", "9ca9dcab": "getMemeCount()", +"9caa9448": "getItemHash(uint256)", "9caaa154": "setLuckPrice(uint256)", "9caaa7f4": "get_this_balance()", "9caab55a": "ParticipantAgent()", "9caabfac": "dateEcoRelease9()", +"9cab1dc7": "setWHdcoreAddress(address)", +"9cab3be6": "fdiv(uint256,uint256)", +"9cab8da8": "rebase2(uint256)", +"9cabde79": "adminWhiteListCreators(address,bool)", +"9cabfcca": "testTransferTokenCompiledTokenId(uint256)", +"9cac3566": "calcToToken(address,uint256)", +"9cac6f63": "zToken()", +"9cacdf70": "getPreSale(uint256)", +"9cace422": "NewUnsetRent(address,uint256)", "9cad74b0": "randomNumber(uint8,uint8)", +"9cada6e4": "getDaoFee()", "9cadb159": "settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)", +"9cadb3a0": "perpToken()", +"9cadcfba": "startSwap(address,uint96,address,uint96)", +"9cade438": "setOvernightFeePeriod(uint256)", +"9cade7ec": "MintLog(uint256,address,uint256,bool)", +"9cadf104": "setDeflationFee(uint256)", "9cae6100": "addAward(string)", +"9cae6eae": "setCaller(address,bool)", +"9cae9c49": "showSelling()", "9cae9e03": "getPropertyInfo(uint8)", "9caeab45": "periodICOStage5()", +"9caeb0e1": "setChiToken(address)", +"9caf03b6": "notionalJulyBestYield()", "9caf34c4": "getBalanceEth()", "9caf9695": "paleyer2show(uint8,uint8,uint8,uint8,uint8)", +"9caf9a13": "getOwnedDevices(address)", +"9caf9b00": "isInBlacklist(address)", +"9cafffc0": "_refer2RewardRate()", "9cb02e8c": "delayPhaseEndBy(uint256,uint256)", "9cb04d18": "newPresale()", +"9cb081b2": "periodsSinceLastIssuance()", "9cb08312": "DMTToken()", +"9cb118bf": "latestEpoch()", "9cb157d9": "VNT()", "9cb15a94": "FreeCoin(uint256,string,string)", "9cb1e9fe": "cubicContract()", "9cb21f6d": "ImperialCredits()", "9cb230ec": "Lockup(address)", +"9cb28b72": "MAXIMUM_DEPOSIT()", "9cb29034": "CCECOIN()", "9cb2b69b": "getCreated(uint256)", "9cb31079": "setLowLimit(uint256)", +"9cb32ddf": "calcClaimPie(address[],address[])", "9cb33309": "BasicTokenMock(address,uint256)", +"9cb341e3": "closeCoverOraclise(uint256,uint64)", "9cb35327": "ceilDiv(uint256,uint256)", +"9cb3b6c3": "getContractExpiration(bytes32)", "9cb42db4": "PDS()", +"9cb45c72": "ManagerTransferred(address,address)", "9cb481ea": "getBountyAmount(uint256)", +"9cb4a9f3": "transit(address,uint256)", "9cb4b31c": "tokenTimelockAddress()", +"9cb4db3a": "wdCRCK(address,uint256)", +"9cb56c3c": "PublicSaleWhitelisted(address)", +"9cb56f4c": "changeIcePerBlock(uint256)", "9cb61295": "getVoterFromProposal(uint256,uint256)", "9cb64a2d": "debtor()", +"9cb69668": "reserveFor(uint256,uint256,address)", "9cb6a504": "addColor(string,string)", "9cb6ed7e": "escape(address)", "9cb6fc77": "confirmUpgrade()", @@ -89617,12 +164076,18 @@ "9cb7595a": "getBridgeInterfacesVersion()", "9cb75b2f": "sendBonusEgg(address,uint256)", "9cb78df8": "minSuccess()", +"9cb7b7ca": "migrator_withdraw_unlocked(address)", "9cb7de4b": "setHandler(address,bool)", "9cb8a26a": "selfDestruct()", +"9cb8a819": "setSTokenWeight(uint256,uint256,bool)", +"9cb8dc85": "alreadyPlayGameUsers(address)", "9cb931f9": "setReferralPromille(uint8)", "9cb998dc": "increase(bytes32)", +"9cb9a19a": "changeTokenAddress(uint256,address)", +"9cb9a5d1": "layerx()", "9cb9b8f5": "withdrawBomb(uint256)", "9cb9c14f": "Issuance(address,uint256)", +"9cb9c5e1": "_arrayIdsPlusOne(address)", "9cba3559": "globalAmounts(uint256)", "9cba60a7": "bitmask_check(address,uint256)", "9cba713e": "reserveTreasury(uint256)", @@ -89630,58 +164095,95 @@ "9cbafcb6": "Pharamore()", "9cbb165e": "isOnBorrow(uint256)", "9cbb9460": "fetchOrdersForMerchantByAdmin(address)", +"9cbba32b": "btcDelivery(bytes32,address,uint256)", +"9cbba816": "ROLE_VOTER()", +"9cbc2b3a": "setSystemFee(uint256,uint256,uint256,uint256)", "9cbc2d62": "get_member_info(address)", +"9cbc2ebe": "APPROVE_ALL()", +"9cbc67b4": "showUsdtRate()", "9cbc87a3": "bytes32ArrayToString(bytes32[])", "9cbcfcc7": "calculateGotTokens(uint256)", "9cbd695f": "show(uint256,uint256)", "9cbd7da5": "resumeICO()", +"9cbda4b6": "totalProfitAt(uint256)", +"9cbdaeb6": "integrationProxy()", "9cbdffc6": "unblock()", "9cbe5efd": "currentRoundId()", +"9cbe7084": "_claimFee(address,uint256)", "9cbf1b85": "exchangeRateAt()", "9cbf73a9": "purchaserAddresses(uint256)", "9cbf9e36": "createToken()", +"9cbfdf1d": "securitize(address,uint256,uint256,uint8,uint256,address,bool)", +"9cbff2b0": "newKeyRingAndAdditionalKey(address,address,address,bytes)", "9cc04ea0": "newRecord(uint256)", +"9cc06bde": "Curricular()", "9cc0c5e3": "experty_io()", +"9cc102fc": "usersX6Matrix(address,uint8)", +"9cc136d6": "Canditates(uint256)", +"9cc199ca": "sendAndApproveAll(address)", +"9cc19bfb": "isAlreadyMinted(uint256)", "9cc1c97b": "test_threeValidEqAddress()", +"9cc1e732": "MOONIFACTORY()", +"9cc21f7f": "repay(uint256[5],address[3],bytes)", +"9cc222a1": "isValidOrderSignature(bytes)", "9cc24569": "ExKnox(address,address)", "9cc28aa0": "BdpOwnershipStorage(bytes8)", "9cc2bcc6": "AhieldCureToken()", +"9cc32cdb": "timeUntilNextTransferAfterRebaseUnfreeze()", "9cc33024": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", +"9cc3a6f4": "tradeSwaps(address[],address[],address[],uint256,bytes[],uint256[])", "9cc3b949": "Bookmark()", "9cc429dc": "getBattlesCount()", "9cc477b2": "createFashion(address,uint16[9],uint16)", +"9cc47ddf": "_setTreUpgradeArr(uint256[6])", "9cc4a319": "CarToken()", "9cc4d3dd": "convertNumSec(uint256[],uint256[])", "9cc4da3b": "WHAuthorizeAddress()", +"9cc51b64": "sendLeftOver(address)", +"9cc52292": "CRV_ERC20()", "9cc579af": "MarketJob(address[],uint256[],uint256[],address,address,bytes)", "9cc5dd95": "_removeOwnersAproves(address)", +"9cc65a55": "setMinWrapAmount(uint256)", "9cc73a6f": "raiseDay3()", "9cc74299": "withdrawFromManager(uint256,address)", +"9cc7ce58": "mintAndRefresh(address[],uint256[])", "9cc7d917": "earlyBirdsAddress()", "9cc7f708": "balanceOf(uint256)", "9cc8295a": "EnoughClaims(uint256)", "9cc84564": "envelopeCounts(address)", +"9cc848d8": "POINT_MULTIPLIER()", +"9cc84ed3": "latestSolution()", +"9cc850e8": "init(address,string,string,uint8,uint256)", "9cc9299e": "killSwap()", "9cc946ee": "OlivToken()", "9cc9b86d": "disableService(address)", +"9cc9be1a": "getDelayParam()", "9cca1c64": "getNonFungibleIndex(uint256)", +"9cca68e2": "switchSaleAuctionERC20For(address,uint256)", "9cca7ac3": "QueueDemandesEnCours()", "9ccaec98": "getAuctionInfo(uint40)", "9ccb6e8d": "SentToContractor(uint256,address,uint256)", +"9ccb9ea3": "removeLockUser(address,uint256)", +"9ccba919": "periodStop()", "9ccbbc6a": "minimumPowerUpSizeBabz()", +"9ccc6387": "API_PushNewDyProfit(address,address,uint256,bool)", "9cccaea9": "StreamityContract()", "9cccb272": "BatchPaint(uint8,uint256[],bytes3[],uint256[])", "9cccd2a4": "getSumAmountOfSuccessfulSteps()", "9ccd0b51": "getCountCourse()", +"9ccd64da": "WithdrawMkt(address,uint256)", "9ccd7d86": "setWinery(address,address,bool)", "9ccdd994": "Pume(uint256,string,string)", +"9cce37c6": "checkWhiteList(address)", "9ccf1a68": "prepareURL()", "9ccfceed": "MANHATTANPROXY10THAMSTAVE()", "9cd0126a": "gemHpConversion()", "9cd01605": "exchangeAddress()", +"9cd042e2": "HolderRegistered(bytes32,uint256,uint256)", "9cd04996": "DiscountedPreICO(uint256,uint256)", "9cd08464": "transfer_eth_from_contract(address,uint256)", "9cd08bae": "CevacToken(uint256,uint256)", +"9cd09125": "rcv()", "9cd0c511": "depositMintAndPay(address,uint256,uint256)", "9cd0f778": "setLuckPool(address)", "9cd106a8": "cancelRecurringBilling(uint256)", @@ -89690,167 +164192,335 @@ "9cd2021c": "mintRefs()", "9cd22211": "getPlayerGameInfo(uint256,address)", "9cd23707": "setTransferable(bool)", +"9cd2e327": "migrateStakeFor(address,uint256)", +"9cd2fb1d": "BullPerBlock()", +"9cd337de": "tokeninOneEther()", +"9cd37a46": "lay_mssv_tac_gia()", +"9cd3cad6": "addEventMinter(uint256,address)", "9cd3cb5d": "withdraw_token(address)", +"9cd3e2dc": "TACContract()", "9cd417d7": "rejectCurrentValidation()", +"9cd417de": "timeSwappers()", +"9cd42401": "currentInterestFractionFixedPoint24()", "9cd43690": "GENTATOKEN()", +"9cd441da": "addLiquidity(uint256,uint256)", +"9cd4723b": "proposeDisburseOrBurn(address)", +"9cd4adac": "retryWithdraw(uint256)", "9cd4fb47": "Tier_Classic()", +"9cd54210": "transferSnowflakeBalanceFromVia(uint256,address,uint256,uint256,bytes)", +"9cd590ab": "changeIPOinfo(uint256,bytes32)", "9cd5c9a8": "setAssetWallet()", +"9cd65f97": "setRandomNumberConsumer(address)", "9cd70235": "setAmountToClaim(address,uint256)", "9cd758d0": "setPOOL_edit_2(string)", "9cd77457": "createInactivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"9cd7a72a": "boostx10()", +"9cd7fb9f": "convert(address,address,uint256,uint256,bool)", "9cd84ead": "APPToken612()", +"9cd87ea6": "exclusiveAddress()", +"9cd92a37": "retreiveUInt()", +"9cd981bb": "getAutoExecQL()", "9cd994b4": "updateAuctionTime(uint256,uint256,uint256)", +"9cd99aa2": "listBondAsset(address)", +"9cd9dd82": "updateLockerSettings(address,address,address,address,uint256,uint256,uint256,uint256,string)", "9cda1ec5": "setDistributor(address,bool,uint256)", "9cda5a12": "calcPoseBits(uint256,uint256,uint256)", "9cdacdb3": "Setup(address)", +"9cdae4ee": "addDelegate(address,bytes32)", "9cdaef4d": "_set4()", "9cdaf438": "ARCCToken(address,uint256)", +"9cdb2532": "transferHouseEdge(uint256)", +"9cdb35bc": "pendingEnergy(uint256,address)", +"9cdb45d7": "requestToAnswers(bytes32)", "9cdb4fe8": "addEvidence(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", "9cdbaa21": "tokenTransferLocker()", "9cdbc070": "addVoting(uint256)", "9cdd2e76": "getHeroLocation(uint256)", +"9cde7599": "AlreadyBurnedTokens()", +"9cde8c79": "doubleDividend(uint256,address)", +"9cde8ffe": "getPizzasByOwner(address)", "9cdec2bb": "getCompte_18()", "9cdee922": "RushCoin()", "9cdf1872": "getOut()", "9cdf4dd3": "Token(address,string,string)", +"9cdf7217": "getAuthorizedLogics()", "9cdf8a1f": "WTBNToken()", "9cdfa3df": "getAddrForPrivilege(address)", +"9ce0094a": "MoapRebasePercent(uint256)", +"9ce039a7": "coffer_info(address,uint256)", "9ce04e35": "enableInvestorTransfer(address)", +"9ce0c954": "getRemainingWizards()", +"9ce110d7": "initializer()", +"9ce1900a": "addTokens(uint256,address)", "9ce21f3c": "fundingWalletAddress()", +"9ce25b6d": "tokenAllowAll(address,address)", "9ce2c7f2": "AumentaQuantitaVoti(uint256,address)", +"9ce305d6": "getPendingMarketCreationRewards(address)", "9ce318f6": "withdraw(uint8[],bytes32[],bytes32[],bytes)", "9ce31fe1": "StudToken(uint256)", +"9ce38998": "setMinter(address,uint256)", +"9ce393f7": "_transferWpc(address,uint256)", "9ce3961f": "nextVersionAddress()", +"9ce3e919": "CALLBACK_SELECTOR()", "9ce3f461": "UP_winBets()", +"9ce43f90": "rewardPerTokenStored(address)", +"9ce47f22": "_feescollector()", +"9ce49b85": "relyCollector(address)", +"9ce4e72e": "getFlashLoan(address,address,uint256,bytes)", "9ce51c7c": "sendNewTalentsAndPartnerships()", +"9ce527ac": "setup_twap_bound(address,address,uint256,bool,uint256,uint256,address,address,uint256)", +"9ce5361e": "setKingServant(address)", +"9ce56932": "noom()", +"9ce6582d": "isEntitled(address)", +"9ce6657d": "transferProxyLessGas(address,address,address,uint256)", "9ce682bd": "BetFromTransaction(address,uint256)", +"9ce6d666": "servicePoolClaimingFeeNumerator(address)", +"9ce7dd0e": "community_amount()", "9ce80efc": "test_twoInvalidAssertFalse()", "9ce840d4": "withdrawNotATokens(address)", +"9ce89da0": "updateNewEdgexSource(address,uint8)", "9ce8fc4e": "LogForkSigned(uint256,bytes32)", +"9ce909b7": "setMargin(address)", +"9ce940f5": "redeemBuoyV1()", "9ce962ca": "payWallet()", "9ce9e380": "_burnAllArgs(address,uint256)", "9cea127f": "CMTTT()", +"9ceb1998": "TTLSupply(uint256)", +"9ceb2ab8": "approve_102(address,uint256)", "9ceb5c6d": "icoBonus1EndDate()", "9ceba90b": "startWeekFive()", +"9cebb2bd": "token1155()", +"9cec205d": "stakeYOP(uint8)", "9cec2789": "gettags(address)", +"9cec4bf4": "setESD(address)", +"9ceca1b5": "_getNextBatch()", "9cecba34": "addPoliceNode(address)", "9cecc80a": "setReserve(address)", +"9cece12e": "isUniswapPair(address)", "9ced0e9b": "initialTime()", +"9ced242b": "WIZARD_MAX_TYPE()", "9ced5c29": "enableNode()", +"9ced7e76": "pendingReward(address,address)", "9cede14c": "checkAndGetSendersID()", +"9cedea7c": "unlockStakesDao(address,uint256)", "9cee1773": "Mednus()", +"9cee2142": "_isWhitelisted(address)", +"9cee789f": "flushToken(address)", "9cee9492": "setMaxRewardPercent(uint256)", +"9ceec8f8": "claimTeamAdvisors(address,uint256)", "9cef2a6a": "addLand(address,uint256)", "9cef8873": "reclaimLand(int256,int256)", "9cef9cfe": "isNumBlack(uint8)", "9cefa50b": "winner(uint256,bytes32)", +"9cf0fb28": "changeVotingEndBlock(uint256)", +"9cf160f6": "feesCollector()", +"9cf167ab": "blockBuffer()", "9cf17d5f": "ScamCoin()", +"9cf18987": "kyber2UniswapArb(address,uint256)", +"9cf1ba2e": "setNextTokenId(uint32)", "9cf21342": "AnimeCoin()", "9cf21d90": "ETCH3dV()", +"9cf24b1e": "TokenOwnerChanged(address,address)", "9cf2c727": "sumHardCapICOStage7()", +"9cf2ebf5": "getPairCount()", "9cf3123b": "sellWolkEstimate(uint256,address)", "9cf3566d": "promotionAllocate(address,uint256)", +"9cf38cf2": "Error(address,uint256)", "9cf4124f": "enableContinuousDelivery()", +"9cf41a95": "OutGassed(bool,uint256,address,address)", "9cf48365": "getInvestedToken(address)", "9cf488ad": "sendPlayerBack(uint256[])", "9cf4910c": "preDistriToAcquiantancesEndTime()", "9cf4cb1e": "_getVotes(uint256,uint256,uint256,address)", "9cf5453d": "bid(address)", "9cf55cfb": "sampleBoolRetTrue()", +"9cf568c6": "freezeIn(address)", +"9cf5c3f5": "lastMintBlock()", "9cf5c613": "setVerified(address,bool)", +"9cf5d607": "confirmations()", +"9cf5e6c8": "rewardPoolsLength()", +"9cf60855": "techSupportPercent()", "9cf60b86": "addRefBalance(address,uint256)", "9cf66013": "whitelistRegistrantsFlag(address)", "9cf66997": "clearLand(int256[],int256[])", +"9cf6cc70": "getMembersRole(bytes32)", "9cf6f1eb": "CBVO()", +"9cf71629": "findFirstNonZeroInkCdp(address,address,bytes32,address,address)", +"9cf782cb": "isExecutable(bytes32)", "9cf78527": "UAPToken(address)", +"9cf79d5a": "Top3dis25()", +"9cf833e4": "set_txrelay(address)", +"9cf88b5d": "likesHistory(address,uint256)", +"9cf8c32a": "proxyRole(address,address)", "9cf8ccfd": "currentPlayers()", "9cf9342e": "createContract(bool,string,bool)", +"9cf940a7": "setNonWhitelistedDelay(uint256)", "9cf94943": "whitelistAdd(address[])", +"9cf970f1": "createUser2(address,uint256,uint256)", +"9cf9a17e": "balanceAddress()", "9cf9d4c0": "setPOOL_edit_9(string)", "9cf9e3ab": "TokenReleased(address,uint256)", "9cfa0f7c": "maxTokensToBuy()", "9cfa750f": "isParticipant(uint64,address)", "9cfad128": "calculateFee(address,bool,bool,uint256,uint256)", +"9cfb1e27": "transferReceivedFund(address,uint256)", +"9cfbf4e4": "remainingMargin(address)", +"9cfc523f": "calcCanGet(uint256)", +"9cfc9b51": "deployToken(address,uint256,uint8,uint256,address,string,string,uint256)", "9cfcab47": "NovoToken()", +"9cfcc7ae": "_freeze(bytes4)", +"9cfced18": "getNumberOfBroadcasted(bytes32)", +"9cfcf576": "TEAM_MEMBERS()", "9cfd5dc4": "validPurchase(uint256,address)", +"9cfd81f6": "getPercentReleased()", "9cfda697": "setColorsX4(uint16[4],uint256[20],uint256)", +"9cfdb6db": "setLowerBoundAmount(uint256)", +"9cfdbd5e": "BP()", "9cfdd04d": "BCN()", +"9cfdd9e6": "_setVAIController(address)", "9cfdfe42": "AXIS()", +"9cfe006f": "availableETH0Token()", "9cfe42da": "addBlacklist(address)", +"9cfe4529": "FAVOREE()", +"9cfe47ff": "bonusLpEndBlock()", "9cfe6c86": "count_tokens()", "9cff53e0": "nDeposits()", "9cff621a": "withdrawDispersal()", "9cff799c": "GetCuentaSocio(uint16)", "9d000e78": "VUP_PER_ETH_PRE_SALE_RATE()", +"9d003e04": "getDefaultTimelockExpiration(bytes4)", +"9d00fd85": "modifyDefaultDailyRestriction(uint256,uint256,uint256,uint8)", "9d00ffa5": "isMessageValid(bytes)", +"9d01174f": "receive(address)", +"9d016e0a": "transferOutERC20Token(address,uint256)", +"9d01b8c6": "thresholdRatio(uint256)", +"9d01cd35": "prepareForgeBassets(address[],uint256[],bool)", "9d01e730": "EarlyEndTimeChanged(uint256)", +"9d0214cb": "nft(uint256)", +"9d0297db": "AirDropforBORGETH_Subscribers111(address[])", +"9d02a866": "destoryContract(address)", "9d038cd3": "TEST1()", +"9d0415db": "setMultiplierOfAddress(address,uint256)", "9d042f87": "dTimeoutCurrentStage()", "9d0506ae": "checkData(bytes)", "9d05414f": "Referral(address,address)", +"9d05f170": "CEOTransferred(address,address)", "9d0617f9": "_send(address,uint256)", "9d063ed8": "FIFSRegistrar(address,bytes32)", +"9d064020": "removeReseller(address)", +"9d065838": "singleValueAirdrop(address,address[],uint256)", "9d069353": "getAngel(uint64)", "9d06a1d5": "removeFromWhiteList(string,address)", +"9d06c563": "farmingStartTimestamp()", "9d0714b2": "tgeSetLive()", "9d079b18": "acceptProposal(bytes32)", "9d07b653": "_createUnit(uint256,uint256,uint256,uint256,address)", +"9d07fe93": "cryptoSharesContractsCounter()", "9d07ff80": "ln_fixed3_lnr_18(uint256,uint256)", "9d083222": "becomeMember()", +"9d083e84": "libraryIndexToFounderCount(address)", +"9d0859fd": "GameResult(address,uint256)", "9d0880a3": "transferUnsoldTokens(address)", +"9d0916ed": "remainingPublicSupplyPerPhase(uint256)", "9d09390b": "isValidAuthority(address,uint256)", +"9d095726": "getInvestList(bool)", "9d097471": "getUserBounty(address)", "9d09798f": "DemurringFee(address,uint256)", +"9d0981b2": "SetEthBonus(uint256)", +"9d099b87": "arShieldPlusCover(address)", "9d09f8e5": "changeRebackRate(uint256)", +"9d0a5a22": "pendingSusafe(uint256,address)", +"9d0b1a4c": "setMaxTokenID(uint256)", "9d0b2c7a": "pendingStake(address,uint256)", +"9d0b8b44": "withdrawBenefitOfAStakingByMonths(uint256,uint256[])", +"9d0bb4b3": "prediction(address)", "9d0c0c35": "generateCrabGene(bool,bool)", "9d0c1e6f": "walletETH()", +"9d0c2556": "getUserStartIndex(address)", +"9d0c3b4f": "getTradeLockStatus()", "9d0cfc2c": "closeDepositSubRound()", "9d0d0a5a": "getTotalToggleGameDivsProduced()", +"9d0d6473": "submitTokenToEthOrderWHint(uint128,uint128,uint32)", +"9d0d7c30": "createDelegate(address)", "9d0d9f1c": "azatipsToken()", "9d0df9b5": "getPOOL_edit_11()", +"9d0e04ce": "EventSolethiumObjectBought(address,address,uint256)", "9d0e0cd3": "getTotalTAOsCount()", "9d0e5871": "shipping(address)", +"9d0ec3df": "claimTokensByOTC()", "9d0effdb": "revokePermission(address,address,bytes32)", "9d0f17c8": "unsoldTokenIssued()", +"9d0f8298": "confirmWithdrawRequest(bytes32)", "9d0f8763": "cancelOrderByAdmin(uint80,bool)", "9d0fb699": "tokensToBeClaimed()", "9d106954": "_getUserMinersAt(address,uint32,uint32)", "9d1080c5": "UnilotToken()", +"9d10b526": "blockIdToPrice(uint16)", +"9d10bb32": "removeResolver(address,bool,bytes)", "9d10fda8": "escrow_fee_denominator()", +"9d113f13": "getPersonalEmissionRate(uint8,address)", +"9d114108": "crossReserveRate(uint256,uint32,uint256,uint32,uint256)", "9d118770": "destroy(uint256)", "9d119a4e": "EmergencyUnPause()", "9d119a7b": "getDepositTxMap(string)", "9d11aaaa": "transferFeePercentage()", "9d11f09f": "getTxAmountKWh(bytes32)", +"9d1213a7": "tokeninfo()", +"9d12430a": "accruedRatioUSD()", +"9d12924f": "setTokenAssuranceAccount(address,address)", "9d129afd": "prevBlock()", "9d12e775": "zec()", "9d13156c": "claimRefundOwed(uint256)", "9d134185": "setauctionsystem(uint256,uint256)", +"9d135525": "calculateLiquidationRatio(uint256,uint256,uint256)", "9d1362a9": "getAllInvestmentsWithdrawnByBeneficiary()", +"9d139062": "distributionToken()", "9d139ff2": "LajokiCoin()", +"9d13d2ae": "cInit(uint256)", +"9d13fb24": "unlockApproved(address)", "9d140fa2": "inPreSale2Period()", +"9d144762": "optionToTokenID(uint256)", "9d144f8a": "_preventedByNationalityBlacklist(address,uint256)", "9d145866": "loadRate(uint256)", +"9d147f85": "crowdfunding(address,uint256)", "9d14f134": "getRepo(bytes32,string)", +"9d15076b": "inviteAccept(string,bytes,string,bytes)", "9d153495": "withdrawRefund(uint256)", +"9d158023": "mintReservedWizards(uint256[],uint88[],uint8[],address)", +"9d15a208": "ERCME(uint256)", +"9d15fc50": "linkUrlOf(uint256)", "9d1672c4": "getAffiliateRate()", "9d16aca6": "changeExchangeContract(address)", +"9d16acfd": "shouldUpgrade()", +"9d16b2c5": "originSwapDiscountCHI(address,address,uint256,uint256,uint256)", "9d170c5d": "getRef(string)", +"9d170d6e": "specialAccount(address)", +"9d1722cb": "totalGuildBankTokens()", "9d176556": "setDistConfig(address[],uint256[])", "9d189473": "calculateAndMintTokens(address,uint256)", +"9d189cca": "ResolverAllowanceChanged(string,address,uint256)", "9d18e405": "approveAndBuyAffiliated(uint256,address,uint256,bool,address)", +"9d18e4b0": "currentReward(address)", +"9d194810": "getWalletsTradingLimiterValueConverter()", +"9d196a71": "contractOrigin(address)", +"9d19b226": "isBeneficiary(address)", +"9d19bc9b": "dev_adress()", +"9d1a3ea8": "ConfigChanged(uint256,uint256,uint256)", "9d1a9ff9": "rebatePeriod_()", "9d1acead": "periodPresale()", "9d1b0fd1": "createProduct(bytes32,string,bytes32,bytes32)", +"9d1b33da": "numOrder()", "9d1b464a": "currentPrice()", +"9d1b5a0a": "getCompAddress()", "9d1b8945": "requestedRedeem(address,uint256)", "9d1bbd7e": "CancelRoundAndRefundAll(uint256)", +"9d1bd76d": "setHatchingMultiplierCoolDown(uint256)", "9d1be930": "autopayfee()", "9d1c3f03": "isMaximumPreFundingGoalReached()", "9d1c4d42": "buyAnalysis(uint256,uint256,address)", "9d1d14e0": "setEtherExchangeLikeCoin(uint32)", "9d1ddca5": "fiveYearGrace()", +"9d1df5ee": "changeGuardianStorage(address)", "9d1e0d48": "buy(address,string,uint256,uint256,uint256,uint256)", "9d1e351c": "totalBonusToken()", "9d1e641b": "CROWD_WEEK3_BONUS()", @@ -89858,6 +164528,8 @@ "9d1ebfd6": "nextReleaseAmount()", "9d1eeb97": "redemptionBurn(address,uint256)", "9d1f2800": "doPush(address,uint256)", +"9d1f3d5e": "cancelBidToken(uint256)", +"9d1f4b2c": "getBirthblock(uint32)", "9d1fd89c": "getFirstBorrowAgreementTool(address,address)", "9d1ffed9": "_certify(bytes32)", "9d2044e1": "setContrAddrAndCrwSale(bool,address,address,address,bool,bool)", @@ -89869,8 +164541,13 @@ "9d21328f": "sharedExpense()", "9d21dd78": "getGameTime()", "9d2235e7": "_leapYearsBefore(uint256)", +"9d22ae8c": "setBridge(address,address)", "9d22c693": "before_test_method_increaseTimeBy30000()", +"9d22fa2c": "getAddressTransferAbility(address)", +"9d2330b7": "isSoftCapComplete()", +"9d234fa0": "approve_793(address,uint256)", "9d23c4c7": "tokenRegistry()", +"9d23d9f2": "getAssetsPrices(address[])", "9d240cf2": "Workshop()", "9d245238": "getWinNumbers(string)", "9d248477": "BeaverCoin()", @@ -89879,62 +164556,107 @@ "9d24e482": "theWinner()", "9d255663": "EthMonoPoly(address)", "9d2620bf": "RealEstateCouponToken()", +"9d265e58": "getPaymentAddress()", "9d2668d4": "setPurchased(address,address,uint256)", "9d273b20": "refundStatus()", "9d2754a9": "createTokenToTax()", "9d2777f4": "IntermediateWallet()", "9d277a49": "unregisterPublisher(address)", "9d2870c3": "LPAIToken()", +"9d2873f3": "setBearToken(address)", "9d29255b": "setCSCERC721(address)", +"9d298a54": "BuyStockHeroP1(uint16,uint256,address)", +"9d29a73e": "approve_577(address,uint256)", "9d29cac4": "getMonsterClass(uint32)", "9d2a1eab": "GrantAdded(address,uint256)", +"9d2a679f": "INF()", "9d2a8cf0": "unwhitelistAddress(address)", "9d2ab46d": "BUZZToken()", "9d2ae623": "depositJackPot()", "9d2affd5": "transferFrom(address,address,address,address[],uint256)", +"9d2bdb44": "replaceIssuers(address,uint256,uint256,address[])", "9d2be721": "insertTopic(bytes15,address,bytes32,bytes15)", +"9d2c6150": "userUpline(address)", "9d2cc436": "RESERVE()", "9d2cd67c": "collect_main_fee()", +"9d2d04d1": "depositToken(uint256,uint256)", +"9d2d3957": "createCollection(bytes32,bytes)", "9d2d912e": "futureDevLock()", +"9d2da8ec": "getValueWithOffsetAndMultiplier(uint256,uint256)", +"9d2df0f9": "approve_130(address,uint256)", "9d2e4777": "vestingTransfer(address,uint256,uint32)", +"9d2e52b4": "placeTokenBet(address,uint256,uint256,uint256,bytes6)", "9d2ec188": "setFeeParams(uint256,uint256)", +"9d2ec945": "setStartOnlyMinPrizes(bool)", +"9d2ed633": "arbitrageETH(address,address)", +"9d2eea05": "createPairInUniswap(address,uint256,uint256)", "9d2f1cbb": "changeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", "9d2fc3c8": "adjudicate(uint256,uint256)", "9d2fcb8c": "setInvestmentAddress(address)", "9d2ff29c": "ICDSupply()", +"9d3025d1": "airdropSupplyMap(address)", "9d30584c": "setHard_Cap(uint256)", +"9d30bf48": "buyTokensWithFee()", +"9d3180da": "setAwardRanking(uint256,address[])", +"9d31c3f2": "tRatio()", "9d323193": "RTCToken()", "9d327229": "fechVoteResultForCandidateByStage(address,uint256)", +"9d329768": "increaseAuthQuotas(address,address[],uint256[])", +"9d32ccdd": "wasEventAcceptedBetween(uint256,uint256)", "9d340b71": "buyTokensfor82()", +"9d34d071": "withdrawableActiveIncomeOf(address)", "9d3565ce": "transferOr(address)", +"9d356d54": "gt1()", "9d35dcac": "NewUser(uint256,address,address,uint32)", +"9d35f594": "df()", +"9d36b5c4": "tokenStorage_CD()", "9d36c500": "freeAnimalsLimit()", +"9d379bdb": "emission_Whitelisted(address)", +"9d37b8db": "changePauseDuration(uint256)", +"9d3857bc": "_getCurrentMonth()", "9d38cdbf": "OwnedUpgradeabilityProxy(address)", "9d38cea3": "stopPreIco()", +"9d38ff5a": "getCycleBindInfo(address)", "9d390d83": "setIsWeiAccepted(bool)", "9d3995c2": "setHeroPost(address,uint256)", +"9d399a93": "showsale()", +"9d3a8b52": "totalInterestPerYeat()", "9d3ac6d5": "getBuyerContribution(address)", "9d3acf23": "isResolvedForDefendant(uint256)", "9d3aee8d": "st4ckHeight(uint256)", +"9d3be921": "DOTBASE()", "9d3c015e": "PChannel(address)", "9d3c3b5d": "getArrayHashMarketItem(bytes16)", "9d3c663f": "isBreakingCap(uint256,uint256,uint256,uint256)", +"9d3ca1eb": "getAssetOperator(address)", +"9d3cb3e4": "Finalize(uint256,uint256)", "9d3cc187": "changeSetRateAddress(address)", +"9d3d0045": "offerWhitelist(address,uint256)", +"9d3d0230": "changes_weight(address,uint256)", "9d3d1d82": "userSponsorshipsPred(address,uint256[],uint256)", "9d3d741c": "testAboveLength()", +"9d3d7603": "Amplifier()", "9d3d9b4d": "FETCOIN()", "9d3de343": "addVictim(string,string)", +"9d3de5b8": "iCREAMToken()", "9d3de95a": "getPortfolioInfo(address,uint256)", "9d3e069c": "StartDraw()", "9d3e1ab8": "walletRemaining()", +"9d3e42a7": "checkIsDead()", +"9d3e8651": "pwdrSentToAvalanche()", "9d3ec1a7": "getMarriageDetails()", "9d3f2e5f": "stakeEthForGas(uint256,address)", +"9d3f3101": "tickerSymbols(uint256)", +"9d3f3924": "BuyTree()", "9d3fae04": "applyAuditorsCheckUpdate(address,address,uint256)", "9d3fe4c2": "AGAVETHER(string,string)", "9d4022c8": "OrderStatisticTree()", +"9d403a84": "matchingPoolSize()", "9d406a13": "getLocksLockedFor(address,uint256)", "9d408b93": "gasBefore_()", "9d4095cc": "getAmbientTempException(bytes32)", +"9d40b850": "updateOperator(uint256)", +"9d40d122": "shuxue(address,address,address,uint256,uint256)", "9d41198e": "startnewround()", "9d41a9af": "getOccupation(address)", "9d41d6fc": "testInitialBalanceWithNewRGXToken()", @@ -89943,27 +164665,40 @@ "9d42d1a9": "sendEvent(uint256,bytes32)", "9d4323be": "drainToken(address,uint256)", "9d4327a0": "stockBuyCertainOrder(uint256,uint256,uint256,uint256)", +"9d432f2d": "percentMultiplierTokenId()", "9d433c71": "sharesOfSPS()", +"9d436012": "removeDebt(address,uint256,uint256)", +"9d438063": "discountTradeSwaps(address[],address[],address[],uint256,bytes[],uint256[])", "9d442102": "BuyRocketForSale(uint32)", +"9d4476b1": "NATIVEMaxSupply()", "9d44ac4f": "permissionExists(uint8,address)", "9d44d93b": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,address,uint8,bytes32,bytes32)", "9d44fca2": "computeEthConstant(uint256)", "9d451c4d": "right77(uint256)", +"9d45590b": "_encode_sol_bytes7(bytes7,uint256,bytes)", +"9d456b62": "swap(string,uint256)", "9d45b9d2": "soldTokensPreIco()", "9d45d077": "raiseSellOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", "9d463520": "lastMintTime()", "9d463b99": "addPool(uint256,uint256,uint256)", +"9d4692cf": "dec_post()", +"9d46cf8a": "_liquidityFeeTotal()", "9d471837": "updateTextForHolder(bytes32,bytes)", "9d478656": "sendp(address,uint256)", +"9d47da78": "DrawMini(address)", "9d481848": "propose(address,bytes)", "9d484693": "payouts(address,uint256)", "9d4936f9": "MINING_OUTPUT()", +"9d4941d8": "transferToVault(address)", "9d4971b7": "getOrderLength()", "9d499363": "faucetTokenAddress()", +"9d4a22bf": "UNIAPPRemainingForSaleInPreICO()", "9d4ab2a3": "setInvestAgent(address)", "9d4aba7c": "getTimestamp_()", "9d4ace0b": "reg_bountyHunter(address,address)", +"9d4afe8a": "viewCanRedeem()", "9d4b1239": "tokensDistributedCrowdsale()", +"9d4baf8d": "approveKyc()", "9d4c162d": "executeProposal(bytes32,int256)", "9d4c5451": "minTokens()", "9d4c662c": "sell_id()", @@ -89972,122 +164707,232 @@ "9d4cc8ad": "Poppins()", "9d4cf268": "isERC165Interface(bytes32)", "9d4d8db3": "Happy()", +"9d4dc021": "lockProxy()", +"9d4df581": "data_profiles_length()", "9d4e85ce": "getUserDeposits(address,address)", +"9d4e90ae": "MINING_POOL_SUPPLY()", "9d4e9a60": "addContractERC20(address)", "9d4ea0f3": "canMove(uint16,uint8,uint8)", +"9d4f7bd3": "offerSigilForSale(uint16,uint256)", +"9d4fd262": "changeTokenaddress(address,address)", "9d4ff8ad": "enter(string)", +"9d50d14f": "resume(uint256[])", +"9d50f36a": "updateProposalThresholdInWei(uint256)", +"9d51173f": "daoMembers(uint256)", "9d5176fd": "getPremiumFactors(bytes32)", "9d51d9b7": "setMaxBalance(uint256)", "9d523f4c": "_getNextOwed()", +"9d52979c": "futuresTrade(uint8[2],bytes32[4],uint256[8],address[2],bool,bytes32)", +"9d52f17a": "exchangePynthsForPNX(uint256)", "9d52f74b": "getFreezeGap(bytes32)", "9d532041": "createCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,bool,uint8)", "9d535056": "punterWaiting()", "9d5367c5": "KIDToken()", "9d53827f": "MAX_TRANSFER()", +"9d53dc91": "getOfferFromId(uint256)", "9d53f19e": "getInvestorInforMin(uint16)", "9d54c79d": "notary()", +"9d54cd79": "newCollateral(address)", "9d54f419": "setUpdater(address)", +"9d54fa27": "heightAt(uint64)", +"9d552ef7": "isArrAccountIsNotLockForReturn(address)", +"9d554eac": "extractFees()", +"9d55b034": "ImplChangeConfirmed(bytes32,address)", +"9d55d85a": "setjsjglimit(uint256,uint256)", "9d55fba7": "updateCommission(uint256)", "9d564d9a": "unlockTokens(address,uint256)", +"9d56797f": "supportsInterfaceContract()", "9d56998d": "my_message()", +"9d56ded4": "shakeTestDrive(uint256,uint256,address,uint256,address,uint256,bytes32)", "9d5708ff": "myTulipsBatched(uint256,uint16)", +"9d570fcf": "a3CRVGauge()", "9d575582": "depositToken(address,uint256,address)", +"9d5773e0": "_totalProposals()", "9d5779ce": "Site(string)", "9d5839e3": "getFirstMilestone()", "9d585f7f": "loanAmount()", "9d58a5b6": "unitExists(uint256,uint256)", "9d58aa41": "changeRestrictedtStatus(address,address,bool)", +"9d58b00c": "stakerIsRegistered(address)", "9d58b15d": "addMember(address,address)", +"9d58cee3": "initialize(address,address,address,address,uint256,address,address,address,address)", "9d59011e": "setAmount(uint128)", +"9d590d07": "unwrap(uint256,uint64)", +"9d592c66": "percentages(address)", +"9d59985a": "reFund(uint256)", "9d599cbf": "hashClaimable(bytes32)", "9d59beb1": "listTokenFee()", +"9d59d16d": "hpLostOnBattle(uint256)", +"9d5a3ba8": "redeemQueueSize()", +"9d5acb7b": "withdrawProtocolFeeStake(address,uint256)", +"9d5b4f1c": "isFreezeFinished(address,address)", +"9d5b9f65": "setWithdrawalFeeRate(uint256)", +"9d5c5a22": "TokenAmount(string,uint256)", "9d5c6061": "getMsgGas()", "9d5c6e20": "setPrivateSaleEndDate(uint256)", +"9d5c79b9": "getLockLeft()", "9d5c7be8": "collectionCountsOf(address)", +"9d5d37fe": "emergencyWithdrawLsdTokens(address,uint256)", "9d5de12e": "STQPreSale(address,address)", +"9d5e2e1e": "formation(uint256)", "9d5eab46": "setItemOption(address,uint256,uint256)", "9d5eb078": "buyTemplate(uint256)", "9d5efb6b": "tokenContractSupply()", "9d5f2422": "createDifficultyOracle(uint256)", "9d5f5cd3": "mktValue()", "9d5f658e": "viewFirstBatchOfContractState()", +"9d5f6d2e": "bxusdAmount()", +"9d5f7df9": "oracle(string)", +"9d5f9dfb": "sChunk()", +"9d604406": "presaleAdd()", +"9d60d54d": "pendingHotdew(uint256,address)", +"9d60de6c": "emergencyStop(uint256,uint256)", +"9d6108c0": "setInternalCooldown(uint256)", "9d61193a": "passoverStartTime()", +"9d613d33": "legendaryResultBids(uint256)", "9d617fae": "pendingFills(address)", +"9d619d28": "updateArbContractAddress(address)", "9d619dad": "currentTournamentBank()", "9d61e624": "hardcapInEth()", +"9d61fbe6": "TransferMyMoney(address,uint256)", "9d625241": "powermayorCutPercentage()", +"9d628fb8": "addIncentivizer(address)", "9d62f07b": "BlockGrainCoin()", "9d636359": "initialMarketSales()", "9d63848a": "tokens()", +"9d639529": "LogNewUser(address,bytes32)", +"9d63b8f7": "getNormalizedTotalBalance(address)", +"9d646307": "setBDIP02(uint256,uint256)", +"9d64653f": "setUpdateIntervalOwner(uint256)", +"9d649a40": "SurplusTokensRefunded(address,uint256)", "9d64a5e5": "newFoundationCandidate()", "9d64d474": "cancelExplorationByIndex(uint256)", "9d652118": "presaleclosingTime()", +"9d65d396": "icoPriceThresholds(uint256)", "9d66a9cd": "getDetail(uint256)", +"9d66d53c": "OnNameRegistered(address,bytes32,uint256,uint256)", "9d66e913": "callStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "9d67b404": "addChunk6ToWhiteList()", +"9d67c37b": "predictionCloseTimestamp()", +"9d683277": "bet(uint8,address,uint256,address,uint256)", "9d68521a": "revokeOperatorTranche(bytes32,address)", +"9d68f106": "shardStakes(uint256)", +"9d69811b": "calculateRatePerEth()", +"9d699afe": "addProtocol(bytes32,bool,address,uint48[],bytes32[])", "9d69d5c6": "CERTIToken()", +"9d69dc4e": "configStore()", "9d69fdff": "Ecometh()", "9d6a4d77": "allotToken(uint256)", +"9d6a9cca": "handoverSakeMintage(address)", "9d6abbcd": "unlockedEscrow(bytes32)", "9d6abe4f": "getLink(address)", "9d6ad799": "computeTokenWithBonus(uint256,address)", "9d6adeaf": "HitToken(string,string,uint8,uint256)", +"9d6aed0b": "testUpgrade()", "9d6b74f8": "DISPLAY_CLASSIQUE_ET_VIDEO()", +"9d6bcd54": "setSuckerAddress(address)", "9d6bf036": "setIsLimited(bool,string)", +"9d6c890d": "getTokenStakingAddressById(uint256)", +"9d6d2260": "isOnlyRewardDistributionB(address)", "9d6d22b5": "ProgrammerdaddysToken()", "9d6d2321": "dividendsFull(address)", "9d6d78e4": "chunk3IsAdded()", "9d6d8598": "depositTokens(bool,uint256,address)", "9d6dcf53": "Smilebitbuy(uint256,string,uint8,string)", +"9d6dd112": "accTotalReward()", "9d6e0c22": "setBroker(address,address,uint256)", "9d6e4eaa": "ReleasableToken(string,uint256,string,uint256)", +"9d6e7997": "tokenURIByHash(bytes32)", +"9d6e7d50": "UserMap(address,address,uint256)", +"9d6e9be9": "setstakingcontract(uint256)", "9d6eaad5": "returnTokensToOwner(string)", +"9d6ef0d4": "LogRateChanged(uint256)", "9d6f78c1": "LineToken2()", +"9d6f83e4": "_lockFee()", "9d6fa618": "requestTransferOwnership(address)", "9d6fac6f": "cooldowns(uint256)", "9d6fb020": "isRefunding()", "9d70085e": "cap3(address)", +"9d703cdf": "NO_CEIL()", "9d707d03": "resetAuctionStart(address,address)", +"9d70902f": "maxSupplyCap()", "9d7150fe": "isAffiliateValid(address)", +"9d719ee6": "betQueue(uint256)", "9d7233d4": "MIN_CONTRIBUTION_WEIS()", +"9d72b205": "finishRemoveActivePool()", "9d72d8d3": "luckyBuy(uint8)", "9d733f0c": "submissionPrice()", "9d735286": "forwardFunds()", "9d7354c0": "BuyHandler(uint256)", "9d735fc5": "RewardPoint()", "9d73cecc": "validatePeer(address)", +"9d741e5d": "usdtTokenAddress()", "9d7437b8": "WALLET_ADVISOR()", +"9d74393e": "pendingFromVswapPool()", +"9d7460f4": "ConfirmShipment()", +"9d746bf6": "lastHatchTime()", "9d74b37d": "getBool(address,bytes32)", "9d74b959": "test_basicWithAssertBeforeThrow()", "9d74fb7c": "ContributionMock()", +"9d751541": "WITHDRAW(address,address,uint256,uint256)", "9d755367": "getOwnerOfTicket(uint256)", +"9d757412": "internalSettle()", +"9d7597f8": "REVPOP_COMPANY_PERIOD_LENGTH()", +"9d75afc7": "deletePreMint(address,uint256)", "9d75c113": "_joinCDP(bytes32,uint256)", "9d7616a5": "preEtherCap()", +"9d764c19": "tingBooster()", +"9d765c66": "DICE_VERIFIER(bytes)", +"9d765ea6": "getMintWithEthUtils(uint256)", +"9d76a171": "getPrintPrice(uint256)", +"9d76e652": "registerCar(string,string,string,string)", "9d76ea58": "tokenAddress()", "9d770e49": "abstractResolver()", +"9d77199c": "incStake(address,address,uint256)", "9d773a1b": "catsForSale(uint256)", "9d77bd68": "luCat()", "9d77e4f8": "getChainFees(uint256)", "9d77f85a": "buyCollectible(uint256,uint256,int256)", +"9d781ea0": "supplyToken(address,uint256)", +"9d782b2a": "pendedAirdrop(uint256)", +"9d788596": "getAccumulateBalanceContract()", +"9d7912aa": "deployerInputLengthLimit(address)", +"9d79171e": "allowBidding(bool)", "9d79468a": "claimRewardTo(address,uint256,string)", +"9d799ff1": "findPercentage(uint256)", +"9d7a1b06": "setNextUpgradeAgent(address)", +"9d7a42ba": "setDefaultAccountBalanceLimit(uint256)", +"9d7a46f9": "arb(address,address,uint256,address,address,bytes,uint256,uint256[])", "9d7a63e9": "changeDripAmounts(uint256,uint256)", +"9d7ab988": "EUR50()", "9d7acf74": "BluechipToken()", +"9d7adedb": "AdminedEvent(address)", +"9d7b0ea8": "tokenRatioPriority(address,uint256)", "9d7b5621": "numberOfTokenId()", "9d7b7636": "Neymar()", "9d7b8887": "addAddressMappingProposal(address)", "9d7bf73c": "PLUS()", "9d7d6667": "multipliers()", "9d7da479": "mintTokens1(int256,address,uint256,uint256,bytes32)", +"9d7db94e": "collateralCashPrice(bytes32)", +"9d7de6b3": "removeLiquidity(uint256,uint256)", +"9d7dfcf4": "GetTokenDecimals(address)", "9d7e2730": "issueCoins(uint256,address)", "9d7e6ca8": "setResponseAddress(address)", "9d7eb375": "updateUserDetails(string)", +"9d7ed738": "contests(uint256)", +"9d800f8b": "_onBoard()", +"9d801ae2": "privatesaleclosingTime()", +"9d80272a": "usersActiveF1Levels(address,uint8)", "9d80ac4d": "WithdrawedEthToWallet(uint256)", "9d80c818": "addressCount()", "9d815818": "validReleasedToken(uint256)", "9d8168f0": "removeManyWhitelist(address[])", +"9d81ff15": "globalStartTime()", "9d821c1a": "setManualSaleFlag(bool)", "9d827eb9": "CreationFeeChangedEvent(uint256)", +"9d829c2b": "getSmartPoolManagerVersion()", +"9d82dd63": "adminRemoveRelayer(address)", "9d8374b4": "removeFromBlacklist(address,address)", "9d837ccd": "ETH_CAP()", "9d83ee1b": "getAllCardDatas()", @@ -90096,55 +164941,94 @@ "9d856bdc": "queen()", "9d858a80": "Pheonix(uint256,uint256)", "9d85fca3": "findIndexFromRandomNumber(uint32)", +"9d860c14": "_getTethers()", +"9d862eb9": "setRefsCut(uint256)", "9d866527": "Strange()", +"9d866985": "requests(bytes32)", +"9d866d10": "withdrawToDenominatedInDai(address,uint256)", +"9d869eac": "close(string)", "9d86ad52": "CloseIfBug()", "9d86fd0c": "test_threeTrueAssert()", "9d87a373": "transferFromMany(address[],address,uint256[],address)", +"9d87b813": "changeOwner_fixed(address)", +"9d87cb3d": "transferOut(uint256)", "9d87e7f0": "getWeiAvailableToReturn(address)", "9d882b5d": "Sotoin()", "9d88584e": "removeFamily(address)", "9d888e86": "currentVersion()", +"9d8892bb": "updateAaveAddress(address)", +"9d88ad89": "setRewardRule(uint256,uint256,uint256)", "9d88f3a1": "setLotteryAddress(address,address)", +"9d891ac0": "createCredit(address,uint256,uint256,uint256,uint256)", "9d89add1": "createMechETH(uint256,address)", +"9d89cdde": "transferIssuership(address)", "9d89e7d4": "challengeAmount()", +"9d89fd58": "withdraw_safe(uint256)", "9d8a0212": "costOfOneToken()", "9d8a18ea": "VT(uint256,string,string)", +"9d8a2260": "makerLeverageRate()", +"9d8a5eaf": "xMax()", "9d8a8c43": "totalTokenMintedPreSale()", +"9d8a90e5": "approve_887(address,uint256)", "9d8abff3": "miningAttempts(uint256,address)", "9d8b0834": "verifyLoanOfferingRecurse(address,address[9],uint256[7],uint32[4],bytes32,bytes)", "9d8b157b": "teamCup()", +"9d8b185f": "exeTwo(uint256,address)", +"9d8bff41": "_isFeesClaimableAndAnyRatesInvalid(address)", "9d8c3994": "giveAllToCharity()", "9d8c428e": "addRoundMode(uint256,uint256,uint256)", "9d8c7243": "CreateKRM(address,uint256)", "9d8c997b": "getInfoByUnionId(bytes32)", "9d8ca531": "closeLottery(uint256)", "9d8cb45c": "foundationSupplyRemaining()", +"9d8cd337": "lastAuctionEventId()", "9d8d22f4": "grantReserveTokens(address)", +"9d8d459e": "profitInterval()", "9d8d911e": "_createCryptsy(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,address)", "9d8dbd20": "remove_kycer(address)", "9d8df6dd": "cancelAdoptionRequest(bytes5)", "9d8e2177": "UNIT()", +"9d8e3253": "ftpbToken()", +"9d8e7962": "isSLToken()", +"9d8e900c": "getBorrowInfo(address,address)", "9d8ee943": "right71(uint256)", "9d8f2b17": "LCAP()", "9d8f4c27": "priceUpdateAddress()", +"9d8fc1d0": "INITIAL_DAILY_REWARD()", "9d902fc0": "precisionFactor()", +"9d908f5a": "oven()", +"9d90bb3e": "sellBonds()", +"9d90f5f9": "getPayout(uint64,uint64)", "9d913c64": "addTokenLock(uint256,uint256)", "9d9231b1": "_unpackLevelValue(uint256)", "9d925fc8": "REFUND_RATE()", +"9d929fc0": "assignContext(bytes32,uint256)", +"9d92cdf9": "setWeiTarget(uint256)", "9d930f02": "newTeamOnEnd(uint64,uint64,uint64)", "9d932a93": "validateSignature(bytes,bytes32)", +"9d9365c4": "newBTCPool()", +"9d939d16": "loanIdCounter()", +"9d940035": "messageTypehash()", "9d94743a": "CND(address)", "9d94a8fa": "_thresholdTwo()", "9d94c343": "POSV()", "9d94dac8": "fightEtherMonster()", +"9d957e6c": "getUserJFCBalance(address)", +"9d957ecb": "queryChainLinkPrice(string,string,int256,bytes4)", "9d95f1cc": "addNode(address)", "9d963289": "NewLeader(address,uint8[])", "9d96be58": "maxMintBlock()", "9d96f200": "Factory(string)", +"9d97ac73": "repeatUint16(uint256,uint256,uint256,uint16)", "9d97bcd7": "allocatePreICOTokens()", "9d988d03": "X(address)", +"9d9892cd": "swap(uint256,uint256,uint256)", "9d989b20": "chargeDailyRate(bytes32,address)", "9d98cd78": "drawETH(uint256)", +"9d98e95d": "updateDeviceContract(address)", +"9d995ed6": "setFeeDecimals(uint256)", +"9d99610e": "quaranteNeufTrois(address,bool)", +"9d99ce04": "bancorAlreadyTransferedTokenProportion(address,address[],uint256,uint256)", "9d9a5e1c": "startPrivateICO()", "9d9a7fe9": "completed()", "9d9ab2d8": "setEtherUsdRate(uint16)", @@ -90154,16 +165038,27 @@ "9d9b2e82": "RevenueSharingContract()", "9d9b4d20": "DST_R_N_B_PROGRAM()", "9d9b5342": "editInfo(string)", +"9d9bcdea": "orderFactoryContract()", "9d9bfb02": "throwsWhenNonMultisigDeploysANT()", +"9d9c49c9": "amountMin()", +"9d9c8f11": "releaActiveBonus()", "9d9c9439": "tokenInitialised()", "9d9c9a0d": "testControlCreateWithParentParentSameItemId()", "9d9ca28d": "isWinner(address)", +"9d9cbdd3": "_categories(uint256)", "9d9cc8e9": "TestCrowdsale_Noname()", "9d9d432f": "updateGenVault(address,uint256)", +"9d9d6fa5": "approve_613(address,uint256)", "9d9db392": "makePayment(address,uint256,string)", "9d9dcf81": "getXPL()", +"9d9dd80a": "UpdateOperator(uint256,address)", +"9d9e5a38": "transferTokenWithConstant(address,uint256)", +"9d9eac19": "getBenefitPool(uint256,uint256)", +"9d9f9155": "have()", "9d9fcc72": "checkWithdrawals(address)", +"9d9ff13b": "PresaleTokensClaimed(uint256)", "9da065cb": "ReddyToken()", +"9da07287": "depositAllowance()", "9da0c7b1": "nowCanProvideHash()", "9da0d7d4": "dutchAuction()", "9da0dc0a": "preICOWeiRaised()", @@ -90171,68 +165066,115 @@ "9da19acc": "isRedemptionReady()", "9da1b02a": "createSale(uint256)", "9da1bc7b": "updateBearCount(address)", +"9da1d2c1": "updateReceivedTokensForSuccessfulConversions(uint256,address)", +"9da1f330": "curvePriceCheckpoint()", +"9da210ab": "updateEntityRewardPerBlock(uint256,uint256)", "9da26320": "registrations_confirmed()", "9da2b791": "assignDNI(uint256)", "9da30467": "payForOrderInTokens(uint256,address,uint256,address,uint256)", "9da32c14": "Defapacoin()", +"9da3bd83": "enableDisableMigration(bool)", "9da43ef4": "getExtraPoints(uint32)", "9da46ee3": "getPool(uint32)", +"9da47aeb": "accessIndex(uint256,int256)", "9da59934": "getInbox(address,uint256)", "9da5e0eb": "initDaylimit(uint256)", +"9da6136b": "changeCompoundFlashLoanTaker(address)", "9da67e71": "OpenMoneyPresale()", "9da680f3": "adjustRegistrationFee(uint256)", "9da69180": "commitVote(uint256,bytes32)", +"9da69b44": "findFreeReferrerByID(uint256)", +"9da69ccf": "YEAR1_BOUNTY()", +"9da717bd": "removeAddressForFee(address)", +"9da740ee": "queryAgentInfo(address)", +"9da760ef": "shl(uint256,uint256)", +"9da779e9": "MAKER_DAI_ADDRESS()", "9da78649": "getNewRecordInHistoryRecord(uint256)", "9da8be21": "initWallet(address)", "9da8e7e2": "createProxy(string)", +"9da95326": "setUnstakingFrozenTime(uint256)", "9da9650e": "Cothereum(uint256,string,string)", "9da9df3e": "withdrawContract()", +"9daa00a5": "s_st(address)", "9daa7b46": "STTCToken()", "9daa9ecd": "percentAllocationFeeDenominator()", "9daaae94": "setClient(bytes32,address)", "9dab2054": "priceAt(uint256)", "9dab3cd4": "userRight(address,bytes1,uint256)", "9dab4607": "ACCEPT_DICE()", +"9dabe39d": "setElectricCharge(uint256)", "9dabff25": "sendReward(address)", "9dac83e4": "allowWorker(address)", "9dace789": "EOSGold(uint256,uint256)", +"9dad2d62": "referredDividendPercent()", "9dad9382": "closeStream()", +"9dad952d": "totalToken0Staked()", +"9dadbf03": "TRANSFER_PRE_SIGNED_TYPEHASH()", "9dae2e80": "payoutDonations()", "9dae6081": "createTournament()", +"9daeac76": "setTaxEnable(bool)", "9daf57cf": "getBdpDataStorage(address[16])", "9daf77a5": "GetContractStateTerminatedMisrep()", "9daf9b6b": "insertNodeAfter(uint256,uint256,address)", "9daf9ce3": "computeTotalEthAmount()", +"9dafafb0": "splitExternalErc20Awards()", "9dafb4df": "prizeOwner()", "9dafbc13": "initBlock(uint256)", +"9dafe388": "setBucketCobj(bytes32,uint256)", +"9dafe5f0": "updateSilverBoxAmountAndPrice(uint256,uint256,uint256)", "9db02721": "refuseWork()", "9db028ab": "getMetadataHistoryLength(string)", "9db069d8": "bountyOwner()", +"9db0730e": "berhaneValue()", "9db09a08": "createContractMovie(string)", +"9db0a73c": "NotaryUpdated(address)", "9db11039": "existenceTransferFromTest(address)", "9db1b8af": "msc()", "9db1cafa": "SuccessLife()", "9db28672": "isOfferingStarted()", +"9db31d77": "entrant()", +"9db34008": "delegate_voting_power(address)", "9db340de": "eraseNodeHierarchy(uint256,bytes32[],bytes32)", +"9db34cbf": "halfDays()", +"9db38afd": "beneficiaryReserved()", "9db3956e": "setDatabase(string,uint256)", "9db40718": "SearchIPR(string,string)", "9db4372c": "num_tickets_current_round()", +"9db440d0": "completePrice()", "9db4577f": "addListToWhiteList(address[])", +"9db54b23": "changeDataUnlock(uint256)", "9db5d993": "putString(bytes32,string)", "9db5dbe4": "transferERC20(address,address,uint256)", +"9db64a40": "rollback(bytes4,address)", "9db67cd0": "funcFromC3()", "9db70e19": "tokenIdToRank(uint256)", +"9db7622d": "userContractsMap(address,uint256)", "9db7ff9e": "changeGameRuningblock(uint256)", +"9db81d83": "depositClaim()", "9db834fe": "setColorPink()", "9db8d393": "setCostToCancel(uint256)", +"9db8d7d5": "createContract(uint256)", "9db91e78": "insecureMode()", +"9db922c1": "DemocErc20Set(bytes32,address)", +"9db93891": "partialPauser()", +"9db9e18b": "networkFee()", +"9dba3add": "searchPayments(uint256)", +"9dba9f99": "setCRVRouter(uint256,address[])", +"9dbb0e7d": "LogDeposit(address,uint256,uint256)", +"9dbb5423": "buyFirstTokensOnApprove(address,address,address[],bytes,uint256[],uint256[])", +"9dbb616f": "ticketsIssued()", "9dbbcca3": "ChangePreICOStart(uint256)", "9dbc041c": "requiredBid(uint256)", +"9dbc2d90": "averageFeesPerBlockSinceStart()", "9dbc4f9b": "participantDetails(uint256)", "9dbd1b96": "getRecipient(bytes)", +"9dbd7045": "pendingBasisDollar(uint256,address)", "9dbda902": "getHighestMortgageRate()", +"9dbdd85c": "broadcastSignedRequestAsPayer(bytes,address[],uint256[],uint256[],uint256,bytes)", "9dbdfe0d": "LocusOne()", +"9dbe2670": "userAllowFuturesContract(address)", "9dbe3501": "LongPlace(address[2],uint256[8],uint256)", +"9dbe724b": "amountDistribution(uint256,uint256)", "9dbf0087": "TokenERC20(uint256,string,string)", "9dbf0543": "price_constant()", "9dbf5eca": "updateRelayer(address,bool)", @@ -90240,104 +165182,202 @@ "9dbfe1b8": "setSaleRate(uint256,uint256)", "9dc04184": "allowDraw()", "9dc080d3": "angelToken()", +"9dc09262": "GOV_HUB_ADDR()", +"9dc0f3fe": "_validateWhenLockedOnlyLocker()", "9dc10d15": "preAllocatedTokensVestingTime()", "9dc11280": "numDataOf(uint256)", +"9dc11c1c": "lastQuarterlyRewardedTime()", +"9dc15050": "unwrapLP()", +"9dc18296": "escrows(bytes20)", "9dc1d961": "message(bytes32,bytes32,string,string)", +"9dc254db": "isSchainNameAvailable(string)", +"9dc25dd8": "IndividualMinCapChanged(uint256)", "9dc27fe3": "setICOStatus(bool)", +"9dc297ab": "redeemedCollaterals(address,address)", "9dc29fac": "burn(address,uint256)", +"9dc2a897": "logBytes10(bytes10)", "9dc2c8f5": "fireEventLog4Anonym()", "9dc35799": "updateReading(uint256)", "9dc371bd": "ULTRIXCOIN()", +"9dc37fcf": "setSchainCreationTimeStamp(uint256)", +"9dc3c60f": "HODLTimeRewardable()", "9dc42f16": "_removeOwner(address)", "9dc43f2d": "newEmployeePoolPromille()", "9dc4b9c9": "currentLevel()", "9dc4ca42": "getWalletDigest(bytes32,address)", +"9dc4e1a0": "possibleProposalStatesMapping(string)", "9dc4ef99": "_registerArtist(address)", "9dc5b35e": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address)", +"9dc611c5": "visitorLogs(uint256)", "9dc64f8e": "getWidthrawPercFor(string)", +"9dc682a2": "addCardTemplate(uint256,uint256,uint256,uint256,uint256,uint256[])", "9dc6c12b": "TaiwanRepublic(uint256,string,string)", +"9dc6e23c": "onSetDropAmount()", "9dc6f173": "LogBidAccepted(address,uint256,uint256)", +"9dc77988": "getStakerPools(address,uint256,uint256)", "9dc7a49a": "RegisterUsername(string)", "9dc7f01c": "pay_dividended()", "9dc8832c": "JiucaiToken(uint256,uint8,string,string)", "9dc905bb": "insertMilestone(uint8,uint256,uint256)", "9dc90bd8": "GreeningDesertChainToken()", "9dc9281b": "LjwToken3()", +"9dc9762a": "indexes(address,address,bytes2)", +"9dc9dc93": "ovmL1TXORIGIN()", +"9dca0032": "env()", +"9dca31b6": "changeStore(address,bytes)", "9dca362f": "createAccount()", "9dca4e0a": "matchWinnerOk(uint8,uint8,uint8,uint8)", "9dcb0f55": "fundingStartAt()", +"9dcb3048": "direct(address)", "9dcb5c65": "resultsWeightedByEther()", +"9dcb816a": "claimToWithRecords(string,address,string[],string[])", +"9dcbc428": "decayPercent()", "9dcbed8b": "totalUnrestrictedTokens()", "9dcbf7ea": "Rename(string,string)", "9dccc5bf": "getRegistration(bytes32)", +"9dcd1561": "CONSTITUTION_RELEASE_BY_UNIXTIME()", +"9dcd4aab": "CurrentRateChange(uint256)", "9dcd4beb": "optionExerciseSpan()", +"9dcda3cc": "approve_702(address,uint256)", +"9dcdc978": "unregisterMinterERC20(address)", +"9dce7108": "removeAllSupporter(bytes32)", "9dcee160": "voteC()", +"9dcf4b28": "trustedStakeTokenAddress()", "9dcf56b4": "proofType_TLSNotary()", +"9dcfc5c6": "BUILD_TREASURY()", "9dd05af9": "setEarlyExchangeRate(uint256)", +"9dd06121": "claimDelegateReward()", "9dd0a30f": "iwithdrawal(uint256,uint256)", +"9dd0ec98": "genBondTokenName(string,string,uint256,uint256)", "9dd0ff01": "max_bet_this_spin()", "9dd1687e": "withdrawBasicTokens(address)", +"9dd1c3c9": "setIsGarden(address,bool)", +"9dd1f857": "addReferrers(address[])", "9dd21928": "whiteListAddress(address,bool)", +"9dd23678": "bootstrapEnd()", +"9dd27b30": "smartFundUSDFactory()", "9dd28e34": "registerVendor(uint256,bool,bytes,bytes)", +"9dd2ac32": "_getOwedPayrollPeriod(uint256)", "9dd3045b": "TransferToken(address,uint256)", +"9dd36183": "getAllSpacetimeWallets()", "9dd373b9": "setStakingContract(address)", +"9dd386b0": "GetHoldBonus(address)", "9dd409d3": "setPlayPrice(uint256,string)", +"9dd463e3": "participantWaitTimeOf(address)", +"9dd49d55": "quitters(address)", "9dd4fdd3": "MarketPrice()", "9dd52927": "AuthorityController(address,address[],uint256,uint256,address)", +"9dd540ef": "approve_417(address,uint256)", +"9dd58b58": "getWethBalance()", "9dd5b9a3": "_lockAllAmount()", +"9dd5f6d4": "_getKyberNetworkProxyAddress()", +"9dd62c44": "claim(uint32,uint8,address,uint256,bytes)", "9dd63c3a": "setOwnerPrice(uint256)", +"9dd6530c": "stakesDaily(uint256)", +"9dd69658": "setRetailerBuyAmount(address,uint256)", "9dd74964": "dividendsSum()", "9dd7b3c3": "getSellBallers()", "9dd7e749": "getOffsaleCount()", "9dd819cc": "test_fourValidEqInt()", +"9dd86e0f": "updateUintParameters(bytes8,uint256)", +"9dd96eb2": "shutdownAllAmm()", "9dd9c24b": "canPerform(address,bytes4)", +"9dda42a9": "UserAssetURIs(uint256)", "9dda456a": "_firstLevelEth()", +"9dda55a6": "unstakeAndClaim(address,address,address)", +"9dda6e3d": "PROPOSAL_VOTE_DURATION()", "9ddae7f5": "determineOutcome(uint256,uint8[],uint8)", "9ddaf5aa": "proofs(uint256)", +"9ddaff50": "onReLoadAndDistribute(address,bytes32,address,bytes32,uint256,uint256,uint256)", +"9ddb14c5": "tapOfOne()", +"9ddb9cea": "_setMediatorBalance(address,uint256)", +"9ddb9ee1": "provided(address)", +"9ddbbf85": "migrateValidatorsData(uint256,uint256)", +"9ddc0e95": "getRes2()", "9ddc4a47": "setTransformTarget_default(uint256)", +"9ddc83ed": "getContactTelephon()", "9ddccc99": "TelonToken()", "9ddd503e": "PlayChainToken()", "9dde6eb6": "placeBidFromEtherScrolls(uint256)", +"9dde7a83": "rebuyThreshold()", +"9dde8a35": "NewInvest(uint256,uint256,uint256,uint256)", "9ddee5f9": "SlopeIncreased(uint256)", "9ddf65e1": "AUTSCoin()", "9ddf840d": "withdrawDivs()", "9de0111f": "tokenWithdraw(uint256,address,uint256)", +"9de0e1d3": "incentive_apy()", "9de0eb04": "dappId()", "9de12300": "updateICOmask(uint256,uint256)", "9de18f9c": "controla(address,bytes32,bytes32)", +"9de1e70e": "acceptanceAmount(address,uint256,bool)", +"9de24f82": "skdAddress()", +"9de2b7e8": "luckyRecords(uint256)", "9de2bd2f": "RYZToken()", +"9de2ee21": "dealer()", "9de2f796": "getMintAmount(uint256)", "9de315f1": "getTargetContactPubKey(address)", +"9de36a14": "LEND_ADDR()", +"9de38af2": "defaultPoolOperator()", +"9de39773": "beeswax()", "9de39cb3": "testStartsWith()", +"9de3a681": "getNamehash(uint256)", +"9de3ef31": "receivedPred(address,uint256[])", +"9de46031": "g(bytes1)", "9de4f41c": "seMurio()", "9de518ba": "divertDividendsToBankroll()", +"9de5d0fb": "exchangeAddress(uint256)", "9de66604": "erc20old()", +"9de6968e": "ntsPool()", +"9de6adc1": "loves_getOldNukesMaxLoves(uint256,uint256,uint256)", +"9de6b6e4": "getStartedWithDaiValueAmount()", "9de6ba52": "ArtCore()", "9de6c162": "acquireGauntlet(uint256,uint8,uint256)", "9de6c45b": "addBox(uint256,string,string,string,uint256,uint8)", "9de6d9aa": "changeGasLimitAndPrice(uint256,uint256)", +"9de72aa8": "RateChanged(bytes32,uint256)", "9de7d032": "createPerson(uint32,string,uint256)", +"9de7d11a": "withdrawAndRepayUsingCol_Eth(uint256,uint256,uint256)", "9de8302f": "createGen0Auction(uint256,uint128,uint128,uint40)", "9de8535e": "readiscolorregistered(uint256)", +"9de88d72": "depositTo(address,string,uint256)", "9de91ccd": "getCCH_edit_12()", "9de9205a": "getNujaNumber()", "9de92f7e": "submitInput()", +"9de96c5c": "customTokenRegistered(address,address)", +"9de97afa": "OffChainTokenPurchase(address,uint256,uint256)", "9de9d57e": "multiDistributeAdviserBounty(uint256[],bool)", "9de9f1b8": "payJackpot3()", "9dea34ad": "currBetID()", "9deab49e": "_processERC20TokenPackPurchase(uint8,address,address)", "9deb0b41": "createConsentFile(address)", +"9deb1c5c": "setCustomerService(address,bool)", +"9deb1fad": "calculateSellFeePct(address)", +"9debb7c4": "withdrawALL()", +"9debdfda": "_unsetIntent(address,address,address,bytes2)", "9dec2189": "metaApproveHash(address,uint256,uint256,uint256)", "9dec365e": "setCrowdsaleTotal(uint256)", +"9dec5330": "f128(int256)", "9deca9ee": "disputeRounds(uint256,uint256)", "9decaecc": "addEntryInMonths(address,uint256,uint256)", +"9decc1f6": "MCAdded(address)", "9decde19": "repriceAuctions(uint256[],uint256[],uint256[],uint256,address)", "9ded1817": "sendCryptoVersusReward()", "9ded35c8": "unpauseChannels()", +"9deda1a4": "totalSupplyRetired()", +"9dedbdf5": "absDistance(uint256,uint256)", +"9dedc4bd": "sort(bytes32,bytes32,bytes32,uint256,uint256)", +"9dee703f": "cakeToWbnbRoute(uint256)", +"9deeb35d": "OnCancelJobByProvider(address,bytes32)", +"9deec7cb": "marketsContains(address)", +"9def8a7f": "SubExchanges(uint256)", +"9defe751": "revokeAccessToResearch()", +"9df055f5": "converterPriceCumulative()", "9df06411": "addDepotEth(address,uint256)", +"9df065d0": "removeAmunUser(address)", "9df08a9f": "getStatusEventCloseSuccess(bytes16)", "9df0a5df": "ADDR_MAYA_TEAM()", "9df0c176": "createCategoricalEvent(address,address,uint8)", +"9df17b19": "unlockEvent(uint256)", "9df184ae": "stageTwoEnd()", "9df196ec": "getWhitelistDetailsFor(address)", "9df1e2b0": "transferOtherToken(address,address,uint256)", @@ -90345,145 +165385,279 @@ "9df21154": "AddToDB(address)", "9df21bfd": "updateShareAddress(address,address)", "9df39b4a": "removeCitation(address)", +"9df3f4f6": "investmentReserveBasisPoints()", +"9df41ba8": "setPreSaleBalances(address,uint256)", +"9df42b40": "queensGambit(uint256,bytes32,bytes)", "9df4867c": "transferSectors(uint16[],address)", +"9df4cad0": "voteComplete()", "9df4d0fe": "isChallenged()", +"9df4ed56": "rewards_for(address)", "9df51b89": "claimProfits()", "9df537c6": "increaseBeneficiaryBalance(address,uint256)", +"9df57f7f": "YEAR4_BOUNTY()", "9df5a643": "setAllowClaimUser(address,address)", "9df5cbda": "isSucceed(uint8)", +"9df66eb7": "taxBP()", "9df806d6": "setBurnerAddress(address)", +"9df8493c": "mint(address,uint256,string,string,string,uint256,uint256,uint256)", +"9df8cc7b": "setExchangeFee(uint256)", +"9df8e093": "isTWAPOracleAttached()", "9df8f631": "Ur()", +"9df92118": "fetchRecord(bytes32)", "9df93754": "Log2(bool,string)", "9df94560": "leekStealTracker_()", +"9df95f9f": "availablePynths(uint256)", "9df971c1": "subFees(uint256)", "9df9a1db": "disableKYC()", +"9dfa7480": "setValidatorInfo(string,bytes32,bytes,bytes,uint256)", +"9dfa92aa": "getCashEarningsOf(address)", "9dfaa207": "OWNERS_AND_PARTNERS_ADDRESS()", "9dfad52d": "Expand()", "9dfb071c": "WHITELISTING_MAX_CONTRIBUTION()", +"9dfb3381": "removeRewards(address)", "9dfb64fd": "toggleRefunds()", +"9dfb65d6": "releaseLockTokens()", "9dfb9de8": "getPawnLoanId(uint256)", "9dfbb584": "refundNonWhitelistedPerson(address)", +"9dfbfdec": "getTimelockInterval(bytes4)", +"9dfc8e71": "NewEntity(uint256,string,uint256,uint256)", "9dfcc05c": "isExpiredDeadline()", "9dfcf372": "Lescovex_CYC(uint256,string,string,address)", +"9dfd110b": "addExchange(uint256,uint256)", +"9dfd117c": "getUNIV2Address()", "9dfd1de3": "Token20(uint256,string,string)", "9dfd4e2f": "MAX_ETH()", +"9dfd7471": "BBOXcapacity()", "9dfd8b02": "getBuilding(uint256)", "9dfde201": "Price()", "9dfe29b5": "nextTokenType()", +"9dfe9d68": "getWhiteList(address)", +"9dfe9daa": "wef89h4iurjwndew(address)", "9dfecdcc": "openLottery()", "9dff78de": "buyAnts()", "9dfffa36": "countUp(address)", +"9dfffbdd": "bcd(uint256)", +"9e0023be": "LotteryCreated(uint256)", +"9e00d0ef": "setDeveloper2Account(address)", +"9e00d7ea": "stateRootMap(uint32)", "9e0112b8": "RESERVED_RESERVE_GROUP()", "9e014cf1": "PrepareRollEvent(address,uint256,uint256)", +"9e019bd0": "withdrawFromGauge(uint256)", +"9e01b853": "startEncounter()", +"9e01dfbb": "ratings(address)", "9e01f9b9": "getUser2()", "9e0234a1": "PHILCOIN()", +"9e024820": "sendMsg(string)", +"9e02b3c8": "assetSwapBalance(address)", +"9e02cf4e": "UNLOCK_TIMESTAMP()", "9e036add": "NBCL(uint256,string,uint8,string)", +"9e037eea": "removeSharedProxyAddress(address)", "9e03a5d0": "AndxorLogger()", "9e03c589": "Delinetod()", "9e03c971": "BuyKeys(uint256)", +"9e03f285": "EMPERORS_TREASURE()", +"9e045638": "getBondInfo(uint256,uint256)", +"9e046f20": "shr_3()", +"9e048952": "cycle(uint256)", +"9e0551c6": "player(uint256)", "9e05c118": "availableCount()", +"9e05d9fd": "say(uint256,uint256,address,bytes)", "9e05de62": "setFeeSharingValue(uint256)", "9e060fb6": "updAcceptAdminWithdraw(bool)", +"9e066ba5": "sGrandRewardPercent()", +"9e074552": "tokenToEth(uint256,uint256,uint256,address)", +"9e0796d0": "lastWithdrawBlock()", +"9e07d062": "HoldersID(address)", "9e07d205": "attorneySign()", +"9e08107d": "multiplicationForLongTerm()", +"9e08ba96": "feesToCreate()", +"9e08fbf1": "kublaiWalletOwner()", +"9e09453a": "getTeamHasTheMostMarathonersAndCompletedOver50PercentageDistance()", "9e098d9f": "LjwToken5(address,address)", +"9e0994a1": "sendTransfer(address,uint256)", +"9e09e978": "getEstimatedMinAmount(uint256,address,address)", "9e0a2280": "TOKEN_SALE_ALLOWANCE()", +"9e0a5d68": "sendInterest()", +"9e0af234": "setBonusEndBlock(uint256)", "9e0b7a1c": "approveCertificate(uint256,uint256)", "9e0bb35e": "gamingDividendsReception()", "9e0c0152": "lola()", "9e0cb27b": "fetchOrderByOrderIndex(uint256)", "9e0cbb64": "usersSpriteOwningHistory(address)", "9e0cea05": "buyerCount()", +"9e0d339c": "_removeStake(address)", "9e0d8126": "PreICOEndTime()", +"9e0db3fb": "releaseKOL(uint256)", +"9e0e8d9d": "MAX_POKE_ELAPSED()", "9e0f35a2": "transfersSuspended()", "9e0fd998": "updateEditionPrice(uint256,uint256)", "9e0fdb26": "cancelSwap()", +"9e104a21": "_POOL_FACTORY_()", +"9e105e18": "vrni(string)", "9e11b66c": "getLowerMaximum(uint256)", "9e1224ce": "lotteryCloseInsurance(uint16)", "9e126449": "registerForRaffle()", +"9e1290fb": "totalNyanV2LPStaked()", "9e12c9b9": "sellCoin(address,uint256)", "9e12d725": "NewTokenGrant(address,address,uint256,uint64,uint64,uint64)", "9e12f15b": "units50percentExtra()", +"9e133be4": "verifySubmissionIndex(address,uint256,uint256,uint256)", "9e136878": "Transferred(uint256)", "9e13baa4": "BNCConverterFactory()", "9e13d3e1": "VietnamGemstoneChain()", +"9e13d98c": "onDeposit(uint256,address,uint256)", "9e140cc8": "ENCRYPTION_KEY()", +"9e14b8e0": "setAntiDumpFee(uint256)", +"9e14ed38": "withdrawalsRoot(uint32)", +"9e1525c9": "FeesUpdated(uint32,uint256,uint256)", "9e1533a9": "getFounderMembersInvest(address)", +"9e153628": "LogSettlementDeregistered(uint64)", "9e159db0": "Lambo()", "9e15bc25": "totalInput()", +"9e15d56a": "frd()", "9e163aca": "getDocumentsCount(bytes16)", +"9e166bdf": "chicken()", +"9e167519": "maxExitFeeMantissa()", +"9e17756e": "avatarIndexToOwner(uint256)", "9e179b91": "addFreeMineral(address,uint32)", +"9e17b527": "OnHorseNamed(address,bytes32,uint8,bytes32,uint256,uint256)", +"9e17e21d": "AirdropAddress()", +"9e182122": "create(bytes32,address,uint96,uint96)", "9e1832b5": "ListingCreated(bytes32,address,uint256,uint256,uint256,uint256,address)", "9e196881": "sellBlock(uint256,uint256,uint256)", "9e1a00aa": "sendTo(address,uint256)", "9e1a4d19": "tokenBalance()", +"9e1aaae6": "toAmount(uint256,uint256)", "9e1ad320": "XERA()", +"9e1b6949": "depositEthPools(address[],uint256[])", "9e1b9078": "addLandRevenue(uint256,uint256,uint256)", +"9e1bd113": "immediateWithdrawal()", "9e1be663": "SeedMarket(uint256,uint256)", "9e1bf732": "addNewTokenTo(address,uint256)", +"9e1c3ee3": "setApprovalForExchange(address,address,bool)", "9e1c6d6b": "transferFromFund(address,uint256)", +"9e1c78d7": "annualizedtimeDiffApril()", +"9e1c9f43": "getBTCBCurPriceOfUSDP(uint256)", +"9e1cb76f": "loliTarget()", "9e1d14f1": "getThresholdsLength()", +"9e1d5201": "descendantsOfThing(uint256,uint256)", +"9e1e1713": "setZToken(address)", "9e1e1ca9": "monstersForSale(uint8)", +"9e1e263d": "registerPullPayment(uint8,bytes32,bytes32,bytes32[2],address[2],uint256,string)", "9e1e60c7": "depositOffchain(address,uint256,uint256)", "9e1e6528": "uncertify(address)", "9e1e9338": "getBuyerTransaction(address,uint256,uint256)", "9e1eae34": "addReferrer(address,uint8)", +"9e1f09f7": "callLatePayment(uint256)", +"9e1f2901": "inj(int128)", +"9e1f307b": "IntelsByProvider(address,uint256)", "9e1f5599": "executeTokenTxn(uint256)", +"9e1f68c7": "agreements(bytes32)", +"9e1f888e": "swapExactAmountOut(address,uint256,address,uint256,uint256,address)", +"9e2031ec": "regUser(uint256,uint256,uint256,uint256)", "9e20437c": "digits()", "9e206ed5": "blockSkills(uint256[])", +"9e20749a": "increaseLockBalanceWithReleaseTime(address,uint256,uint256)", "9e208922": "scheduledTopUp()", +"9e2095a6": "maliciousSlashPercent()", "9e20a9a0": "registerToken(uint32,address,uint8)", "9e20afdf": "weekly_disbursement()", "9e20b768": "distributedBonusStakes()", "9e20f6c9": "walletEmail()", +"9e20f9a3": "protocolFromToken(uint256,bool)", "9e211ee8": "dayFinished(uint16)", +"9e2131c6": "approveAddress2(address)", +"9e2133e1": "bank_monry()", "9e213fb7": "callReplaceCallback(string,address)", +"9e21ef60": "depositLocker()", +"9e220ca0": "etherSwapBurn()", "9e2262f5": "testCreateCostData()", +"9e229294": "withdrawFromPoolOptimized(uint8,string,uint256,bool)", +"9e229c36": "Stats()", "9e229c55": "StatEventI(string,uint256)", "9e22bd72": "lengthArrayApproval()", "9e231e2d": "abortGame(uint256)", "9e23602e": "hasAllAttrs(uint256,bytes2)", +"9e237b1c": "getOracleSourcePrice(address,uint256)", "9e238366": "getCraftingAuction(uint256)", "9e239ace": "itemOwner(bytes32,uint256)", "9e23c209": "removeDeveloper(address)", "9e243259": "frozenRate()", +"9e248bb5": "strpos(string,string)", "9e24edca": "TOKEN_FOR_INVESTER()", +"9e2508fe": "buybfiTokenBUSD(uint256)", "9e251c6f": "DonationReceipt(address,string,uint256,uint256,uint256,bytes32)", +"9e252f00": "rescueETH(uint256)", "9e254262": "contractDurationInDays()", "9e254d13": "Child()", "9e25ec01": "KAL5Token()", "9e25fd58": "SotkoCoin()", +"9e26c3f1": "stopPause()", "9e27a305": "sachin()", +"9e27af87": "bids(string)", +"9e27bf2d": "ModifiedNumAvailable(uint256,uint256)", "9e281a98": "withdrawToken(address,uint256)", "9e282328": "getEditionReleaseTime(uint256)", "9e28739d": "LogAddressTokenCapCalculated(uint256,uint256,uint256,string)", "9e288374": "getContributor(address,address)", "9e28abaf": "ShareActive()", +"9e28cf96": "newPost(string,string)", "9e29559c": "teamKeepingQuota()", "9e29739e": "setContributionLevel(address,uint8)", +"9e29b426": "systemPlayerNum()", +"9e29dc7f": "transferOwnershipTo(address,string)", "9e29eb0f": "getUsersAwaitingForTokens()", +"9e2a003b": "typhoon()", "9e2abcb5": "getddd(uint256)", "9e2b8488": "getAuthor(uint256)", +"9e2b8f15": "snapshotUsdc()", +"9e2bd1bd": "getChoiceFromSigned(int256)", +"9e2c58ca": "tokenList()", +"9e2c6821": "myFunc(address,uint256)", +"9e2c8a5b": "unstake(uint256,uint256)", +"9e2ce9d2": "subscribers()", "9e2d0478": "addNotaryToOrder(address,address,uint256,uint256,string,bytes)", +"9e2d373d": "updateStream(address,address)", "9e2ed686": "cancel(address,bytes32)", "9e2f04bf": "chooseWinner(uint256)", +"9e2fb7e2": "getI()", +"9e2fdd99": "regCause(uint256,uint256,string)", "9e306d32": "MintableToken(uint256)", "9e307955": "etherPrice()", +"9e307dff": "messageSourceChainId()", +"9e3085f1": "_mintFRAXForSwap(uint256)", +"9e30a590": "upgradeRelayHub(address)", +"9e30bac5": "setMarketOracle(address)", "9e30dd5f": "buyRareItem(uint256)", +"9e312dac": "loanPositions(uint256)", +"9e3151a8": "setDOUG(address)", "9e315d46": "payoutAmount(uint256)", +"9e31784b": "getProposal2(uint256)", +"9e317f12": "nonces(bytes32)", +"9e319063": "voters(uint256,address)", +"9e31dd5f": "voterBlockLastClaimedOn(address)", "9e31f9b6": "numGamesCheated()", +"9e3202c9": "convertHodlToUsd(uint256)", "9e321f42": "changeWhitelistOnly(bool)", "9e3249ab": "setMinShards(uint8)", "9e325b80": "SocialRemitToken(uint256,string,uint8,string)", "9e326858": "private_AddGameBar(uint256,string,string,string)", +"9e3296c3": "transferToHelper()", "9e331188": "startIco3(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9e335a5c": "modify(int256)", "9e33f72c": "reclaimStarted()", "9e34070f": "isClaimed(uint256)", "9e340ffb": "endFreeGet()", "9e34ba2f": "VUP_PER_ETH_ICO_TIER3_RATE()", "9e34d78e": "getDrawCount(uint256)", +"9e352648": "AttractedMeteorites(address,uint256[])", "9e352721": "PreBuy(uint256)", +"9e3536c6": "switchReferralMode()", +"9e353f29": "calcCost()", "9e3572b5": "getCurrencyContract(bytes32)", "9e35ff3e": "storeCarrotsCredit(address,uint32)", +"9e366435": "getServiceSurchargePercent(bytes32)", +"9e36c9d2": "ChangeTicketPrice(uint256)", "9e36fde7": "regName(string,address)", "9e37273b": "getMintDigest(uint256,bytes32)", "9e37c923": "subscriptionOf(address,address)", @@ -90491,14 +165665,22 @@ "9e385fa4": "raiseEmergency(bool)", "9e38ac15": "ownerShip(address)", "9e38c76e": "lockRedemption(bool)", +"9e39d581": "extraDelay()", "9e39db38": "initChestsStore()", +"9e39e9e1": "setMaxDeptRatioPercent(uint256)", "9e3a33b2": "_fetchPaidOrdersForMerchant(address)", +"9e3a3795": "getRepeatBlock()", +"9e3adac4": "escape(uint256,uint256,uint256,uint256)", "9e3b34bf": "times()", "9e3b77af": "lendingManager()", "9e3b94f1": "CONFIRM_LIMIT()", "9e3b9dc1": "secondTarget()", +"9e3c0987": "Coinx()", +"9e3c4f3b": "isUserUseReserveAsCollateralEnabled(address,address)", "9e3c671c": "citizensAddresses()", +"9e3c9309": "getUserWalletBalances(address)", "9e3cd3f5": "_calculateRepayment(address,address)", +"9e3cd5bf": "swapTokenOnMultipleDEXes(uint256,uint256,address,address[],string[])", "9e3d0636": "numOfDeliveredCrowdsalePurchases()", "9e3d154e": "vote(bool,bool,bool)", "9e3d1b99": "Bakt(address,bytes32,address)", @@ -90510,46 +165692,86 @@ "9e3e6878": "allCatsAssigned()", "9e3edce9": "setImageHash(uint256,string)", "9e3f1f71": "isPartOfOrg(string)", +"9e401046": "get_eth_balance()", +"9e40c495": "lookParams7()", +"9e40d4df": "transferBfmOwner(address)", +"9e41170f": "lossAmt(uint256,bool)", "9e416812": "creditGameAddress()", +"9e418926": "setLockOnBox(uint256,bool)", "9e4195f1": "releaseOrderStakes(address,uint256,uint256)", "9e41a9cd": "viewCertificateByCourse(address,string)", +"9e41b72e": "getMyReceivedCards()", "9e41b73f": "getWeapon(uint256)", "9e422447": "clamp(uint256,uint256,uint256)", +"9e4230a2": "inRegister(address)", +"9e429a81": "TradeFilled(bytes32,address,uint256,address,uint256)", "9e4307cf": "_95_ebetSmartContracti()", "9e43692c": "FOUNDATION_POOL_TOKENS()", "9e439ff8": "thirdPeriod()", +"9e447af5": "fakeEmit(address,address,uint256)", +"9e447fc6": "setRewardRate(uint256)", +"9e44d48f": "thirdPhase()", +"9e44dea1": "_decode_sfixed64(uint256,bytes)", "9e455939": "getContractAddr()", "9e459174": "_addDroneInternal(address)", "9e45de73": "PieceTransferred(uint256,address,address)", "9e45e0d0": "darknodeRegistry()", +"9e46e332": "minterCount()", +"9e471fe6": "addCrowdSaleAddress(address[],bool)", "9e47214a": "isHarvestEnabled()", "9e4734ba": "nextTimeout()", +"9e47b4b6": "canceled(address)", "9e484dd4": "getMembersOfTierCount(uint256)", "9e48d2fd": "setPayouts(uint256,string)", "9e4902c9": "ZZCoin(address)", +"9e491994": "enter(uint256,address,uint256,address[],uint256)", "9e492aa6": "updateBLAddress(address)", "9e497967": "CosmicPowerToken()", +"9e49bd9d": "jsbdexchange()", "9e49e976": "importIssuerData(address[],uint256[])", +"9e4a33d3": "availROI(address,uint8)", "9e4a5ade": "tokenICO()", "9e4a613f": "setCertificate(string,string,string,uint256,uint256,string,string)", +"9e4a656a": "distributeEgg(uint256,uint256)", "9e4a993b": "getGameStake(uint256,address)", "9e4a9f2f": "SCComplianceService()", +"9e4af11a": "j(uint256,uint256,uint256,uint256)", +"9e4af5d9": "Invited(address,address,uint256,bytes)", +"9e4b38c0": "MultiExchangeSwap(address,address[],uint256,uint256,uint8[],uint8[],address[])", +"9e4b5873": "UnLock(address)", +"9e4b7a28": "uriHashIndex(uint256)", "9e4ba1be": "testBuyTwoTokens()", "9e4ba75b": "donateDividends()", "9e4be339": "getPartners(address)", "9e4bec3f": "senderIsProvider()", +"9e4c0a5e": "totaletherBalance()", "9e4c1357": "purposeWeiRate()", "9e4d4d0c": "updateIcoEnding(uint256)", +"9e4d73ca": "getAllClaimsByAddress(address)", +"9e4e7318": "VERSION_HASH()", "9e4ea320": "getterForTest(uint256)", "9e4ece80": "getInvestorUnPaidAmount(address)", +"9e4efaa0": "getOutstandingRegularFees(uint256)", +"9e4fc24a": "setBest_Wishes(bytes,bytes)", "9e509af3": "NggaToken()", "9e51051f": "initialRate()", +"9e51070b": "fetchAppealableAddresses(address,uint256,uint256)", +"9e51782b": "verifiedTokens()", +"9e51ab50": "readTellorValue(uint256)", +"9e5232a5": "calc(address,uint256,uint256)", "9e524caa": "subMinutes(uint256,uint256)", "9e5288a0": "getStep()", +"9e53264d": "redeemTicket(bytes32,bytes32,uint256,bytes32,address,bytes32,bytes32,uint8)", "9e536132": "GetUserPools(address)", +"9e53ea51": "setCardAmount(uint256,uint256)", "9e5406bf": "paymentWithCurrency(address,string,uint64,string)", "9e544fff": "unclaimedReward(address)", +"9e54ee18": "setSellingPrice(uint256,bool,uint256,uint256)", "9e551567": "PonziToken()", +"9e568553": "disableConnectorSale(address,bool)", +"9e569004": "Device()", +"9e56ba88": "conditional_store()", +"9e56da96": "serviceSetPromo(bytes,address)", "9e570d6f": "updateFighterStats(uint256,uint8,uint8,uint8,uint8,uint32)", "9e58280c": "profit2()", "9e584658": "newStandardCampaign(string,uint256,uint256,address)", @@ -90559,34 +165781,65 @@ "9e58e1a7": "_addPartExperience(uint256,int32)", "9e58f77f": "AddCandidateResult(uint256,address,uint256,uint256,uint256,uint256)", "9e5914da": "setReferral(address)", +"9e59aedb": "PORTION_PER_PERIOD_PRECISION()", "9e59eb14": "getAllocated(address)", +"9e5ac5fb": "setTradeFeeAndAPY(uint256,uint256)", "9e5ad3ea": "test_insert_findNoHintUpdateHead(int256)", +"9e5adf8e": "createPromoMeme(address,string,uint256)", "9e5b241a": "getBorrowInfoByIndex(uint256)", "9e5b53bb": "Crowdsale(uint256,uint256,string,string)", +"9e5b9f46": "tradeInput(address,address,uint256,address,uint256,uint256,address)", +"9e5bd628": "_closeLoan(address,uint256,bool)", +"9e5cc10b": "paintingIndexToOwner(uint256)", "9e5cdaf0": "initialBankrollGrowthAmount()", "9e5d0258": "regularDonations(uint256)", "9e5d4c49": "executeCall(address,uint256,bytes)", +"9e5dd25c": "rigelPerBlock()", +"9e5e4f87": "setAmountLPStakeLevelRefer(uint256,uint256)", "9e5e86fa": "setEnforceKyc(bool)", "9e5ece98": "updateLockDate(uint256)", "9e5ee522": "tokensSoftcap()", "9e5f1889": "partner2_address()", "9e5faafc": "attack()", +"9e5fd0bb": "defAgent()", +"9e5fea8a": "transferForeignToken(address,address,uint256)", "9e6031c6": "ZigZagToken()", +"9e6056da": "landlordTerminateLease(uint256)", +"9e608c5a": "activateSystem()", +"9e609bc6": "withdrawV1andV2tokens()", "9e60f8d6": "getPlayerSpaceshipBattleWinsById(uint256)", +"9e61afa3": "withdrawWethByEth(address,uint256)", +"9e620cd8": "getLockAmount(uint256,address)", "9e6371ba": "retire(address)", "9e639858": "winPercent()", +"9e63a3d8": "_validbots(uint256)", +"9e63a8c5": "moveCommitted(address,address,uint256)", +"9e63fa6a": "getOpeningTS(bytes32)", +"9e640192": "setDailyRewardPool(uint256)", "9e647aac": "getParameter(string)", "9e6480fa": "A(uint256,string,string)", +"9e64a10d": "stagePrices(uint256)", +"9e64d9bf": "changeIssuer(address,uint256,uint256,uint256,address)", +"9e64f867": "updateLine(uint256)", "9e654dfa": "redeemForkedTokens()", +"9e656a41": "fName()", "9e65741e": "exchangePrice()", +"9e658e91": "setCandidates(address[])", "9e65a03a": "cancelSellCityForEther(uint16)", "9e65c7e5": "updateLatestRevision(bytes20,bytes)", +"9e65eb21": "convertEthToDaiWithGasRefund(uint256,address[],uint256)", "9e65fab0": "priceIsFrozen()", "9e66cd38": "free(uint64)", +"9e66e0f3": "precio()", +"9e674848": "getReserveIsStableBorrowRateEnabled(address)", +"9e67ca5f": "setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)", "9e67fa6a": "createArtwork(string,address,uint256)", "9e686c0d": "getStaffLength()", "9e687b6c": "retrieve(bytes32,address)", "9e68ca82": "preValidatePurchase(address,uint256)", +"9e68ceb8": "setSwapFee(address,uint32)", +"9e68e62e": "dailyDistribution(address)", +"9e692329": "vswapPaths(address,address,uint256)", "9e69383d": "TokenBatchTransfer()", "9e697cd3": "startDateOfRestoreUnsoldTokens()", "9e6985e2": "setbuyPrice(uint256)", @@ -90595,83 +165848,158 @@ "9e69a6d2": "bountyTokensNotDistributed()", "9e69c732": "take(string,string)", "9e69f2bb": "premine()", +"9e6a1d7d": "setMintLimit(uint256)", "9e6a5767": "previousTokenVesting()", +"9e6a5dc3": "distribution_contract_s_dsec()", +"9e6ab9a3": "minimumFundsRequired()", +"9e6ae4cb": "addPlayer(address,address)", "9e6af2e3": "exchangeEthStb(uint256,uint256)", "9e6afbda": "decreaseSpeed(uint256)", "9e6b0faf": "addTimeForOpponentSelectForGladiatorBattle(uint256)", +"9e6b2ded": "BORROW_RATE_MAX_HARD()", "9e6bcba5": "getBoostFromTile(address,address,address,uint256)", "9e6bdea0": "RegisterChallengeCreators(address,string)", "9e6c0877": "__hasRole(uint256,uint256)", +"9e6c2959": "PERCENT_DENOMINATOR()", +"9e6ca837": "withdrawHarvestRemoveLiquidity(address,address,address,uint256,uint256[2])", "9e6cb42b": "voteEndTime()", "9e6d4cd0": "joinRaceAndFinish(uint256,uint256)", "9e6d6925": "setper(uint256,uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "9e6d95c7": "checkHGame(uint256)", +"9e6db6e9": "setPermissionsOfRole(address,address[])", +"9e6e1975": "namehashAddresses(bytes32)", "9e6eda18": "fee(address,uint256)", "9e6f2ea2": "Kin()", +"9e6f3d06": "collateralizedDebtOf(uint256)", "9e6f505b": "BiigoToken(address,uint256)", "9e6fb394": "companionsListCount()", +"9e6ff610": "retrieveStorageFee(address)", "9e7010a8": "Dashidai()", +"9e703418": "dailyInrate()", +"9e712387": "auctionEnded(uint256)", +"9e715302": "setGovernorAlpha(address)", +"9e7159f0": "_setAFIAddress(address)", +"9e718573": "setBootstrapCommitDuration(uint256)", +"9e7212ad": "mergePositions(address,bytes32,bytes32,uint256[],uint256)", +"9e72930d": "addFecoreLGE(uint256)", "9e72942c": "getBoosters()", "9e72a9d8": "sendToMarket(uint16)", +"9e73d1b8": "fulfillBounty(uint256,string,address,uint256,address[],bytes[],uint256[])", +"9e73edd5": "votingTotalPerson(string)", "9e750316": "pushBlock(uint256,uint256,bytes32,bytes32,string)", +"9e7515d6": "getContentDetailActivitysub(uint256,uint256,uint256)", "9e757e7f": "bookOVISSale(uint256,uint256,int256)", "9e75a7c8": "bitplusAddress()", "9e75c483": "busted(uint256,uint256,uint256,uint256)", "9e761bbb": "beneficiaryList(uint256)", +"9e767c7f": "executeBurnout(uint256)", +"9e7694a8": "depositRunner(uint256,uint256)", "9e76a007": "removeConverter(address)", +"9e76d5dd": "addressOperations()", "9e76e30d": "tokenRateUsd()", "9e776ff5": "getTotalBattleboards()", +"9e77b805": "swapToHigherSqrtPrice(address,uint160,address)", +"9e77bdb2": "TopLevelDomainTransfersLocked()", +"9e77d91d": "ALPPerBlock()", +"9e785bca": "withdrawAnyEther()", +"9e78fb4f": "createPair()", +"9e7934db": "distributeEther(address[],uint256[])", "9e79800d": "getOwner(uint16,uint8,uint8)", +"9e79b41f": "getReserveAuction(uint256)", "9e7a13ad": "people(uint256)", +"9e7b08d5": "fundraisingGoal()", +"9e7b4336": "clientConfirmHashOfS1()", "9e7b8d61": "giveRightToVote(address)", +"9e7bd0e6": "burn_Approvals(address,uint256)", +"9e7bd525": "changeFeeStatus(bool)", +"9e7bde52": "scaleInteger(uint256)", +"9e7ca5e0": "motContractAddress()", "9e7cf86b": "changeSettings(uint256,uint256,uint256,uint256)", "9e7d101e": "setMaxLeaders(uint256)", "9e7d24df": "move(bytes32,uint256,uint256)", +"9e7d705f": "erc20_ssend(address,uint256,address)", +"9e7dfc6a": "statusTransfer(bool)", +"9e7e0d1b": "setBoostActive(bool)", "9e7e514b": "DiceGame()", "9e7fec98": "owner_time_limit()", "9e80138c": "LendConnect(address)", +"9e807b31": "initialSetup(uint256,uint256,uint256)", "9e80b731": "test_threeValidAssertFalse()", +"9e80c074": "increaseCounter(uint256)", "9e80cab0": "ownerSetRecommendProportion(uint16)", "9e8110e6": "setQuery(string)", "9e813938": "expiresAfter(address,uint256)", +"9e813f1f": "submit(string,bytes)", +"9e816999": "addCollateral()", "9e817c03": "ROUND_LENGTH()", "9e81c4b3": "sendFunds(address,uint256,uint256,uint256)", "9e81e254": "_getMaximum(bytes32)", +"9e8264c4": "__address()", +"9e827613": "changeMinWETH(uint256)", +"9e82767d": "setMaxHatchCostMultiplier(uint16)", +"9e831f27": "catnipV1()", +"9e837db4": "user_referrals(address)", "9e8385d6": "regadr(address)", "9e83abe3": "newExit(address,uint256,uint32[])", +"9e8410d0": "C2(bytes)", "9e84158e": "setPLATAddress(address,address)", "9e845173": "getCCH_edit_34()", +"9e848c72": "updateBoosts(uint256[4],uint256[4])", "9e84d44d": "challengerConvicted(uint256)", +"9e854cfe": "LogRoleAdded(bytes32,string)", "9e8558a0": "setSellExchangeRate(uint256)", "9e85742e": "approveEscrow(uint256,uint256)", +"9e85c43b": "maxBCPAvailableForContribution()", +"9e868f7e": "totalOpenNotional()", "9e86d7a8": "setVnt(address)", "9e86f8c5": "RequestFactory(address,address,address)", "9e86fb86": "investOffer(uint256,uint8[])", "9e87a5cd": "getPriceFeed()", +"9e87bc36": "changeSeason(uint256)", "9e87c1c6": "getLastSingle()", "9e87fac8": "Paused()", "9e8836e2": "THORToken()", "9e890cb3": "netAmountBought()", +"9e892372": "multiSigWithdrawal(address,uint256,uint64,uint8,bytes32,bytes32)", "9e893d64": "TheUltimateWorldDigitalCurrency()", +"9e8944e5": "swapTokenToTokenAndTransfer(address,address,uint256,uint256,address,address[],uint256)", +"9e898e58": "listId()", "9e8a0f57": "getWinRate(uint256)", +"9e8a14a3": "LoseBet(address,uint256,uint256,uint256)", "9e8a41f4": "getOutCar(uint256)", +"9e8a4408": "paymentsGROOT(uint256)", +"9e8a80c5": "getTokenCurrentPrice()", +"9e8a9a5a": "migrationQuorum()", +"9e8aa26c": "OST()", "9e8ab40c": "ICOReserveWithdrawn()", +"9e8acda9": "getFlashloan(address,uint256,uint8)", "9e8af7e9": "migrateInvestorFromHost(address)", +"9e8b2624": "mineFunded(address,uint256)", "9e8bf603": "curReleaseAmount()", "9e8c3543": "setAuditAuditor(uint256,address)", "9e8c39ed": "updateHolidayState(uint8,string)", +"9e8c4d95": "pendingAnchors(address)", +"9e8c708e": "recoverERC20(address)", +"9e8c7c8a": "Error_No_Binding_Address(address,address)", +"9e8cb6bd": "getDocsCount()", +"9e8cc04b": "quote(address,uint256,uint256)", "9e8cfe20": "insert(int8,int8)", +"9e8d48d0": "CYCLE()", +"9e8da543": "claimed(uint64)", +"9e8dfd19": "burnDcdc(address,address,uint256)", "9e8e23b7": "lastBlock_v5()", "9e8e3ef4": "nftExits(uint16,uint256)", "9e8e4add": "changeTurnLast(uint256)", "9e8ee59a": "addNewTicket(address,uint256,uint256,bool)", "9e8f152c": "showLock(address)", "9e8f2750": "withdrawInviteReward()", +"9e8f45d0": "mmPerBlock()", "9e8fcbe9": "previousRoundId()", "9e906157": "FundingRules()", "9e90ce6c": "tokensIssuedForBonusRangeOne()", "9e90f9aa": "blackHole()", "9e916157": "STAGE_2_START()", +"9e917be7": "multisendErc20(address[])", "9e9188ea": "setDividends(address)", "9e918c0a": "setMaxArtworks(uint16)", "9e9198c2": "layers(uint256)", @@ -90680,115 +166008,211 @@ "9e925746": "_checkAndCallSafeTransfer(address,address,uint256,bytes)", "9e92c991": "getTotalRollMade()", "9e92dfd8": "getFiatTransactionsCount(string)", +"9e931835": "getSha3Result(address,address,uint256,uint256)", "9e931e6b": "getRequesters(bytes32,uint256)", +"9e93ad8e": "FEE_DIVISOR()", "9e93d0e4": "reinvestReturns(uint256)", +"9e944ac2": "setCloner(uint256,address)", "9e945ff2": "amendPurchase(uint256,address,uint256,uint256,uint256,string,uint256)", +"9e9470db": "releaseAllFor(address)", +"9e953e39": "LogCrowdsaleInit()", +"9e95452b": "payRepresentativeBonus()", "9e9548cb": "LabelSold(address)", "9e95670d": "erc20Received(address,uint256,address,uint256)", "9e9593ce": "RewardPoolAddress()", +"9e95db2c": "payBitProHoldersInterestPayment()", "9e95f280": "setRatePreIco(uint256)", +"9e961e98": "llocks(address)", "9e962b39": "minimumContributionPhase1()", "9e964025": "bonusTokenThreshold()", "9e965f7e": "revertSuspendedPayment()", +"9e966634": "borrowInterestPercentScaled()", +"9e969412": "spawnNewMon(uint256,uint256)", "9e96a23a": "give()", +"9e96d0cf": "SetMaxETHInvest(uint256)", +"9e9743da": "apeCage()", "9e975ca6": "NSPToken()", "9e976d38": "toMonth(string)", "9e9785ad": "payoutCursor_Id()", "9e985ea6": "changeControllerContract(address,address)", "9e987b20": "treePot()", +"9e9909b2": "pendingPMP(uint256,address)", +"9e99479b": "getBlockPass()", +"9e9951d8": "importLoan(address,address)", "9e997121": "getConfigAddress(bytes)", +"9e9a4db9": "requestDepositInChain(uint256,uint256)", "9e9a783a": "canCallWithAssociation(address,address)", "9e9a87e5": "agree(address)", +"9e9a9a4a": "SetFeeDistributor(address)", "9e9aed62": "contractTokenBalance()", "9e9b6d06": "createOption(bool,address,uint128,uint128,address,uint64)", +"9e9b7366": "minimumAucToFreeFee()", "9e9bdb9b": "setMaxTransactions(uint16)", +"9e9c9331": "onWithdrawAndDistribute(address,bytes32,uint256,uint256,uint256,address,bytes32,uint256,uint256,uint256)", "9e9ce791": "BrainLegitCoin()", "9e9d0718": "Invested(address,uint256,uint256)", +"9e9d0e3d": "BeerCanceled(address,uint256)", "9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", +"9e9e128d": "exitBasAndCovertToDai()", "9e9e5b85": "ARIToken(address,address)", "9e9ea24b": "PRE_ICO_TOKENS()", "9e9eb444": "winFreeGo(uint256,uint256)", "9e9ec9e3": "getHashAddresses()", +"9e9fc019": "HAS_DRAG_ALONG_RIGHTS()", +"9e9fd99b": "nyanFund()", "9ea03ccb": "fundingUnlockPeriod()", +"9ea04313": "checkit()", "9ea064b2": "getLevelConfig(uint32,uint32)", +"9ea07071": "_STATUS_(bytes32)", "9ea0b8f0": "addTeamGrant(address,uint256,uint256,uint256)", "9ea0c08c": "announcementName()", +"9ea0e074": "withdrawReferral()", +"9ea0ff13": "sampleSingleSellFromMooniswapPool(address,address,address,uint256)", +"9ea1010c": "updRateEnabled(uint8,bool)", "9ea134bf": "getRedeemableReputationStaker(bytes32,address)", "9ea1b79d": "getContentChannel(uint256)", +"9ea1f193": "createMarketForShurikenUser(address,uint256,bytes32,uint256,uint256,uint256,bytes32)", "9ea2104d": "firstReleaseAmount()", +"9ea21c3d": "initialize(address,address,address,uint256,uint256,string,string,uint8)", "9ea23080": "STQPreICO3TestHelper(address,address[])", "9ea27016": "setTokenIdsIndex(uint256,uint256)", "9ea28b5c": "VestingMemberAdded(address,uint256,uint256,uint256)", +"9ea2ea85": "busdBal()", "9ea30fae": "getPokemonOwner(uint256)", +"9ea3b36f": "claimDevFeeAndAddLiquidity()", "9ea407be": "updateTokensPerEth(uint256)", +"9ea454c9": "unstakeBNFY(uint256)", "9ea480ec": "allowanceFlower(address,address)", +"9ea4b0ca": "initialize(address,address,address,address[],address[],bool)", "9ea55bb0": "updateFeeAmount(uint256)", +"9ea56af8": "BuyTickets(address,address,uint256)", +"9ea57129": "unlockCard(string,address)", "9ea57930": "stampIn(address,uint256,uint256)", "9ea58112": "setLethalBonusAtHits(uint256)", +"9ea5ab3b": "assessorFab()", +"9ea5ce0a": "depositFor(uint256[2],uint256[2],address)", "9ea67876": "returnNumber(uint256)", "9ea69541": "updateTileBlockValue(uint16,uint256)", "9ea71c37": "getDesignatedReportingDurationSeconds()", "9ea73895": "hitCharacter(uint16,uint16)", "9ea76475": "subFreezingTime()", "9ea776cd": "currentFundingRound()", +"9ea8082b": "poolDelegators(address)", "9ea82706": "removeRealWorldPlayer(uint128)", "9ea8a418": "updateFunds(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", +"9ea8a71a": "teleport(string,uint256,uint256)", "9ea94877": "getLandIdByKey(bytes8)", "9ea98d55": "intersect(address[],address[])", +"9ea9e3a2": "getBlockNumber64()", +"9eaa2b4b": "getUserAddressAtIndex(uint256)", "9eaa4812": "isLastMilestoneAccepted(bytes32)", +"9eaa5626": "getAddressFromSignature(uint256,uint256,bytes)", "9eab0e29": "FinalisedCrowdsale(uint256,uint256)", "9eab503a": "dividendAddr()", "9eab5253": "getMembers()", +"9eab8655": "optionChef()", +"9eabc91d": "voidingTransaction(uint256)", "9eabebe7": "setTransferTime(uint256)", +"9eac50f4": "approveWrappedETHtoAugur()", "9eacc166": "transferAnyERC20Token(address,address,address,uint256)", +"9eacd1ee": "getLockedStructTimeToLock(address,uint256)", +"9eacd54f": "getFogBalance()", "9ead1478": "setMaxAnimals(uint16)", "9ead1b00": "loanBalanceOf(address)", "9ead7222": "tokenList(uint256)", +"9eadc835": "decodeERC1155AssetData(bytes)", "9eadd77c": "roundMoneyDownNicelyET(uint256)", +"9eade481": "bondData(uint256)", +"9eade652": "stakingTokenMultiplier()", "9eae2453": "setSchedule(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,uint256)", +"9eae4d18": "PriceUpdated(bytes32)", +"9eae6440": "PonyIndexToOwner(uint256)", "9eae6555": "earlyContribList()", "9eaeca9f": "getTokenReturnRate()", "9eaeccf1": "TestToken(string,string,uint8,uint256)", "9eaf17a1": "getCarveUpTokens()", +"9eaf9e84": "AdminDesignated(address,address)", +"9eb003ea": "redeemVote(bytes32,bytes32)", +"9eb04ecc": "requesters(bytes32)", "9eb05f3a": "EarlySuccess()", "9eb0ad03": "Exchange(address,address,address,uint256,uint256,uint256,uint256)", +"9eb0e965": "farmContract()", +"9eb121b5": "addNewLoggerPermission(address)", "9eb180a7": "identifierToPrice(uint256)", "9eb20aa7": "setPetLastTrainingTime(uint64)", +"9eb20dcb": "getGlobalStats(uint8)", "9eb32fdb": "initializeContract()", "9eb360cc": "updateRausPoint(int256,uint16,int256,uint16)", +"9eb382c3": "lpSlp()", "9eb44784": "getTokensForPresale()", "9eb45706": "get_previous_asset_document_from_document(bytes32,bytes32)", "9eb4da1c": "okamiTotalPurchase_()", "9eb51bf1": "Goodluckcoin()", +"9eb527c6": "updateUniswapExchange(address)", +"9eb52f61": "getBorrowable()", +"9eb53da4": "profitBuyBackReserve()", +"9eb56238": "stakerUpdateBalance(address,uint256)", "9eb59e00": "updateCursETHtoUSD(uint256)", +"9eb600c9": "_decrementDeposited(uint256)", "9eb6c932": "ResetAllAmount()", +"9eb70151": "CompanionAdded(address)", "9eb7294d": "transferRemainingTokens(address,uint256)", "9eb7d170": "withdrawPendingBalance(address)", "9eb81bd0": "unFreezeTransfers()", "9eb866cc": "isBonusTime()", +"9eb869c7": "resolveEns(bytes32)", +"9eb88db6": "registerCandidate(string)", +"9eb8b1bf": "ARGONperBNB()", +"9eb8b5d4": "createClone(address,bytes)", "9eb8cbf3": "set_activity_details(uint256,string)", +"9eb9291c": "bcake()", +"9eb95075": "ZapTokensForEth(address,uint256,uint256,uint256)", +"9eb9a106": "pointsCap()", "9eb9c68f": "stepBonusList(uint256)", "9eb9dd3b": "getBetsProcessed()", "9eba0196": "DYCOIN()", +"9eba02ff": "totalUserSupply()", "9ebafad6": "getLastAttackCount(uint256)", "9ebb1250": "withdrawFinal()", "9ebb5d3c": "getFreeCraigGrant()", +"9ebb773d": "BuyLimit(uint256)", +"9ebb90bf": "arbsuceed(address,uint256,uint256)", +"9ebb9965": "configFeeEdit(uint256,uint256,uint256,uint256,uint256,uint256)", "9ebbf231": "setMinOrderSizeEth()", +"9ebbf457": "claimableReferralBonus(address)", +"9ebc6aa6": "WINTERrtSaleWINTER(uint256,uint256,uint256,uint256,uint256)", "9ebc8c95": "isNeedLoan()", "9ebca4ad": "setMasterRecruitmentAddress(address,address)", +"9ebcdab9": "initateFlashLoan(address,address,uint256,address,bytes)", +"9ebd5682": "approve_350(address,uint256)", +"9ebd9115": "withdrawAllETH(address)", +"9ebdaa6d": "_setDefaultRoi(uint256,uint256,uint256,uint256)", +"9ebde781": "setTswapAddress(address)", "9ebe13a2": "END_ADDRESS()", +"9ebe2a93": "numUbounties()", "9ebe4d98": "percentageQuarter2()", +"9ebe621a": "_batchMint(address,uint16)", +"9ebea88c": "unstake(uint256,bool)", "9ebee96c": "buyVirtTokens(address,uint256)", +"9ebeef59": "getAllTokenData()", "9ebf6d92": "Whitelist()", "9ec0505a": "BING(uint256,string,string)", +"9ec0d002": "isChannelClosing(uint64)", "9ec12cfa": "sellsIngrWithoutDepletion(address,uint256,string)", +"9ec1472b": "approve_519(address,uint256)", "9ec272b4": "getPremiumPack(uint256)", +"9ec2aca8": "setAssetImplementation(address,bytes)", "9ec32d45": "challengeWinningOutcome(bytes,uint16)", "9ec35352": "returnRandom()", "9ec3a90c": "verifyTimelock(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes)", "9ec40d1c": "checkCode(string)", +"9ec40d2c": "weekAccountStakes(uint256,address)", +"9ec4a4e8": "addOwnPuppy(string,uint256,bytes32,uint8,uint256,uint256)", +"9ec5615c": "beneficiaryMarketing()", "9ec5a894": "rewards()", +"9ec5ee16": "drmTransferToPartner(address,address,uint256,string)", "9ec68f0f": "multiSend(address,address[],uint256[])", +"9ec6e054": "investmentsNumber()", "9ec7486a": "GiveERC20()", "9ec760df": "_sendMoney(address,uint256)", "9ec7888f": "Available()", @@ -90796,27 +166220,59 @@ "9ec7e1c6": "nOS()", "9ec8b026": "sort(uint256[])", "9ec8eec9": "TokenImpl()", +"9ec8f8aa": "card()", "9ec92d42": "getSecondPhaseCap()", +"9ec9ac41": "fixedFeeAmount()", "9eca085c": "isSupervisor()", +"9eca2f1e": "campaigns(bytes32)", "9eca672c": "withdrawFor(address)", +"9ecb794c": "setGweiPerToken(uint256)", +"9ecbec41": "_cancelDORequest(uint256)", "9ecbf341": "adminRescueFunds()", "9eccf691": "setICOEnd(uint256)", +"9ecd4859": "createWrappedERC20(bytes)", +"9ecdc362": "cumulativeNo()", +"9ecdebfa": "DecreaseSupply(uint256)", "9ece1d9c": "WeiToEther(uint256)", +"9ece77c8": "setCounterParty(address)", +"9ecebe2a": "requests(address,uint256)", "9ecf12cb": "HEART(uint256,string,string)", +"9ecf7ba7": "bDevVestingLockDate()", +"9ecf84f5": "balanceOfByPID(uint256,address)", +"9ecf8d4b": "setAddressToExcludeSenders(address)", "9ecf9037": "getNumberDonators()", +"9ecfae54": "renameWithEth(uint32,string)", +"9ed00f06": "getActivityName(bytes32)", +"9ed03797": "directPushMultiple(address)", +"9ed053bb": "Transfer(address,address,uint256,uint256)", "9ed153c0": "master(address)", +"9ed197f6": "bestReserveImprovement()", +"9ed1be5a": "referringETH()", +"9ed1c7db": "allowedToCreateProposal(uint256)", "9ed1e4c6": "singleDigitBlock()", +"9ed1ef0b": "poolsRewardActive(address)", +"9ed1f255": "getVoterInfo(address)", +"9ed232bd": "uni_address()", "9ed26fe8": "setEtherInUSD(string)", +"9ed27809": "canStake()", +"9ed374f7": "getPlatformToken()", "9ed3b61b": "getTrustContract()", +"9ed3c90c": "isInitialised()", "9ed3edf0": "transactionFee()", "9ed44c91": "CharitySplit(uint256)", "9ed474b3": "author2()", "9ed49005": "completeIcoPart1()", "9ed4ad43": "getMax(uint8[])", +"9ed4fa5a": "isTokenExists(address)", "9ed53f88": "starExists(uint256)", +"9ed55403": "accountOf(address,address)", +"9ed55985": "sendFreeTokens(address[],uint256[])", "9ed57360": "getPaintingSpeed(uint256)", "9ed58c7a": "provideData(address,address,uint256,bytes)", "9ed5c84c": "salePeriod()", +"9ed62089": "publisherUploadQues(string,uint256,string,uint256,uint256)", +"9ed620ac": "sendETHDividends(address,address,uint8,uint8)", +"9ed68186": "listAthletes(uint256)", "9ed74a23": "createCloneToken(uint256,string,string)", "9ed7772c": "OwnerSetPrizePool(address)", "9ed78285": "GENEOS()", @@ -90824,33 +166280,69 @@ "9ed78df0": "PRESALE_TOKEN_SOFT_CAP()", "9ed798be": "CrestToken()", "9ed81bc9": "deregisterProducer(address)", +"9ed885e5": "emergencyBurn(uint256,uint256)", "9ed93318": "create(address)", "9ed99951": "changeBntyController(address)", +"9eda069f": "setBalance(address)", +"9eda17b2": "divd(uint256,uint256,uint8)", "9eda7d23": "isContributor(uint256,address)", +"9eda8a50": "feesInToken()", +"9edaab7f": "CONTRACT_DRILL_BASE()", +"9edb1be3": "gy_b(uint256)", +"9edb432d": "TRPCPerBlock()", +"9edb7c62": "tokensUnpooled(uint256,address)", "9edc7b44": "revokeStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"9edce95c": "batchSettlePositions(bytes32[],bool[],address[],address[])", "9edcebbb": "updateTabRap(bytes32)", +"9edcfb9e": "tendiesContract()", "9edd1bd2": "TestEvmStack()", +"9edd7207": "repayDebtAndFreeETH(address,address,address,uint256,uint256,uint256)", "9eddc441": "lockedAccountThresholdUsd()", "9eddfb1b": "delay_pool_change_block(uint256)", "9ede7a37": "voteCount(uint8,uint8,uint8)", +"9edeb530": "isGlobal(address)", "9eded57a": "paybackLast()", "9ededf77": "width()", +"9edefe4a": "setResolverFee(uint256)", "9edf256d": "getShipPrice(uint256)", +"9edf2c3c": "uniswapEx()", "9edf42ff": "pendingNumbers(address)", +"9edf8c84": "distributedReward()", "9edfb647": "senderAllowedFor(address)", "9edfb9ee": "acceptOwnershipOfVesting(address)", "9ee035c9": "lookupCanonicalFormat(bytes)", "9ee04661": "withdrawTeamFunds()", "9ee06759": "setSquarePrice(uint8,uint256,address)", +"9ee08b6d": "rewardDrop(address[],uint256[])", "9ee0933f": "joinBounty(address)", +"9ee0b77d": "totalBlockedBalance()", +"9ee108e2": "setClosingPrice(bytes32,uint256)", +"9ee15944": "Restarted(address)", "9ee1bd0f": "whoIsOwner()", +"9ee20b15": "isUserActive(address)", "9ee22f9a": "setCompte_32(string)", +"9ee27351": "__setTimelockAddress(address)", +"9ee2735b": "getAccountState(address)", "9ee29ef2": "updateTargetToken(address,uint16,uint16)", +"9ee2b702": "encodeUInt(uint256)", +"9ee2de8c": "setLeverage(uint8)", +"9ee30600": "stakeToken(uint256,address)", +"9ee30be8": "calcRewardAmountByFactor(uint256,uint256,address,uint256)", "9ee3518e": "setTeamMember(address,uint256)", "9ee398ce": "getTierStartAndEndDates(uint256)", +"9ee407da": "getWrapperAddress(uint16,uint8)", +"9ee42305": "allocateFunding(address,uint256,address)", +"9ee44820": "nonces_multi(address,address)", "9ee484ce": "withdrawCerneuTokens(address)", +"9ee4bacd": "teste()", +"9ee4c057": "setMaxPriceDeviation(uint256)", "9ee5451d": "PriceOneDisable()", "9ee5555f": "setGovTax(uint8)", +"9ee57b42": "updateMasterFeatureList(uint256,uint256,uint256)", +"9ee58a82": "addLOA(uint256,address)", +"9ee58d5a": "presaleIssued()", +"9ee5955a": "getAddressValue(bytes32,bytes32)", +"9ee5abfc": "withdrawForBet(address,uint256)", "9ee60142": "_processBonus(address,uint256)", "9ee61c9d": "testExistingVoteWeight()", "9ee679e8": "requestWithdrawal(uint256)", @@ -90858,19 +166350,25 @@ "9ee6c0e1": "test_2_someTest()", "9ee6ff70": "testSafeMul(uint256,uint256)", "9ee71fae": "LogPolicyDeclined(uint256,bytes32)", +"9ee75c27": "getfee(uint256)", "9ee7fbd9": "extraRate(uint256,uint256)", "9ee837f5": "total_empire_score()", +"9ee83971": "getMsgtimestamp()", "9ee85a23": "Bitstoken()", "9ee85a9f": "isPreSaleTokenRaised(uint256)", "9ee8e2ff": "_addAmountBlocks(uint256)", "9ee8fa93": "yearLength()", +"9ee933b5": "setLpToken(address)", "9ee94556": "TestTokensMigration(address)", +"9ee965f3": "GetIBV1CloudLink(string)", "9ee9c8b5": "chetan(uint256,string,uint8,string)", "9ee9dd5c": "vault_state()", "9eea480f": "TotalRequestsAmount()", "9eea4a3a": "address2()", +"9eea5f66": "burn(uint256,address,uint256)", "9eea67e8": "_addPerk(uint8)", "9eeaa7f4": "exitDuration()", +"9eeb1d50": "methodology()", "9eeb30e6": "turnoff()", "9eeb4920": "setLockup_simus(address,uint256,uint256)", "9eeb5a6a": "Manageable()", @@ -90879,145 +166377,274 @@ "9eec22e7": "reclaimEtherDeadline()", "9eec4bac": "payoutFromContract()", "9eec6e89": "TokenLogic(address,address,address)", +"9eecabce": "reportMaliciousValidator(bytes,bytes,bytes,bytes)", +"9eed3667": "getCTokenExchangeRateCurrent(address)", "9eed8369": "neWon()", "9eee5787": "Standard_1()", "9eee8041": "getPointSize(uint32,int256)", "9eee85fe": "bookEarnings(address,uint256)", "9eeea0d0": "PAOCoin()", "9eeef510": "bidCustomAuction(uint256,uint256,address)", +"9eef6ce8": "consent(uint256)", "9eef6f65": "addRequest(address,address,bytes32)", +"9eefa664": "userTCpoint(string)", +"9eefaca7": "SetLockTokenNum(address,uint256)", "9eefdd87": "enableAddress(address)", "9eefde81": "BasicKNOW()", +"9eefea04": "associateNewAccount(address)", +"9ef01cfc": "botDelay()", "9ef0653c": "setICO4Phase()", "9ef065bb": "fDiv(uint256,uint256)", +"9ef07bdc": "monDataWithStatic(uint256)", +"9ef0ce12": "authorityIndex(address)", "9ef1204c": "vote(bytes32,uint256)", "9ef13593": "decayedBalanceOf(address)", +"9ef1d73a": "LogAttack(uint256,address,uint256,uint256,uint256,uint256,bool,uint256)", "9ef1fbc4": "MudshotsToken()", +"9ef2017b": "unlockToken(address)", "9ef279d1": "burn(address[16],uint256)", "9ef27b00": "closedAt()", +"9ef2d87a": "maxCount()", +"9ef306a6": "setBurningMode(uint16)", "9ef35c01": "setJackpotFeePercent(uint256)", "9ef36bd1": "queueCount()", +"9ef3a261": "updateRewardRate(uint256)", +"9ef3c458": "distributePrizePool()", "9ef40238": "getcoinsvotes(string)", "9ef45a31": "someFunction2()", "9ef46973": "guessFlip()", "9ef48a31": "setBonusTokenRateLevelThree(uint256)", +"9ef4fc70": "unstakes(bytes32)", "9ef5233f": "setByteSize(bytes32,uint256)", "9ef53400": "getStaticArraySize()", +"9ef53c97": "canExit(bytes32,uint32)", +"9ef5e075": "transferToOwnerEvent(uint256)", "9ef63e97": "paybackToOwner(address)", "9ef6bf79": "store_ETH_to_contract()", +"9ef6c17f": "roundEnd(uint256)", "9ef6ca0f": "left33(uint256)", "9ef7a463": "exchangeRateForETH()", +"9ef7b65c": "RefFee(address,uint256)", "9ef7e723": "withdrawContractToken(uint256)", +"9ef7f8fd": "DR_result(string)", "9ef887ec": "makeItRain(address[],uint256[])", "9ef916ab": "setOriginalSupply()", "9ef95545": "CheersWangToken()", "9ef965d1": "RealEstateToken()", "9ef974bb": "checkGlobalBalance()", +"9ef9bc2e": "stakeIds(address)", +"9ef9d6d7": "limitTokenTransfer(address,uint256)", "9ef9df94": "transcoderTotalStake(address)", +"9efa09f8": "getSumWeights(uint256)", +"9efa11be": "bnbbase()", +"9efa430a": "ClosedEvent(uint256,uint8,address,uint256)", "9efa776d": "tokenFallback(address,uint256,uint256[])", "9efbae81": "FundTransfer(address,address,uint256)", "9efbc411": "PICOPSCertifierUpdated(address,address)", "9efc0190": "YORITEX()", +"9efc1b1c": "sota()", "9efc81fe": "minimal_token_sell()", "9efc94a6": "kycLevel()", +"9efcb9c0": "BBFarmInit(bytes4)", +"9efcea38": "buyTokensWithFee(address,uint256,address,uint256)", "9efd1f0c": "startNextEra_(bytes32)", "9efe6454": "Rena()", "9efedc91": "getMyAccuAmount()", "9efeefa5": "betAgainstUser(uint256,uint256)", +"9eff376d": "inBidding()", +"9eff4928": "DISTRIBUTOR_PROXY()", +"9eff6868": "usdtTotalRelease()", "9effb6a6": "CrowdFunding(string,string,string,uint256,address)", +"9f001efb": "transferContinuousComplete(uint256)", "9f00237b": "minContribution(uint256)", "9f005920": "accept(address)", "9f00c0de": "btycsubmoney(address,uint256)", +"9f00f355": "withdrawAcumulatedFees(address)", +"9f01c016": "pool4currUserID()", +"9f01c7de": "buy(address,uint256,uint256,uint256,address)", +"9f01fce1": "enableAccess(bytes4)", "9f020d3a": "equalsNoCase(string,string)", "9f022f05": "IMDEXsetAdmin(address,bool)", +"9f02ebaa": "cancelHouseSale(uint256,uint256)", +"9f02f5b8": "DisputeRequested(bytes32,address)", +"9f031afa": "claimRentForToken(address,address)", "9f03711a": "withdrwleftovereth(uint256,address)", "9f03c3b8": "hicsTokenPrice()", "9f03d82f": "CGTToken()", +"9f03e82d": "make(string,string)", +"9f04586c": "setDepositsEnabled(bool)", "9f047f3c": "fundProject(string)", "9f04873d": "VILLAGE_INCREASE_RATE()", "9f04996d": "bid(uint256,address)", +"9f04abe0": "CHECK_LIQ_GAUGE_FALSE()", +"9f04cabf": "LOCK(address,uint256)", "9f052fea": "setMintRequestAddressMap(uint256,int256,string,address)", +"9f053c5f": "advanceMaxThreshold()", "9f054b15": "SushiCoin()", +"9f0573a8": "multiFreeze(address[],bool)", "9f05a36d": "getEnd()", "9f0650d9": "etherPriceUSD()", "9f06a579": "ViewBet(address,uint256)", +"9f06a6a3": "issue(address[2],bool,uint256[4],string[4])", "9f06aa08": "collateralize(uint256)", +"9f06ee1b": "multisendErc20WOK(address[])", +"9f06f947": "irkSay()", +"9f07041b": "votingIsActive()", "9f0812cb": "_registerIfNeeded(uint256)", "9f084b3a": "CAMS()", +"9f087dd6": "synths(address)", +"9f08a4e1": "setUserBlock(address,uint256)", "9f08a68c": "working()", "9f08fc38": "subGlobalBlockValueBalance(uint256)", +"9f0907a5": "stakeUSDP(uint256,uint256,uint256,uint8,uint256,uint256,bytes)", +"9f09374a": "JNTChargedEvent(address,address,uint256,bytes32)", "9f095e88": "asdf()", +"9f099cc4": "hyperSonic()", "9f0a11ee": "buyPrice_wie()", "9f0b17e3": "forward_transaction(address,uint256,bytes)", +"9f0b2d12": "MINIMUM_COLLATERAL_NATURAL_UNIT_DECIMALS()", "9f0b7f16": "Foo(string)", "9f0be144": "getGreeksBattlePointsBy(address)", +"9f0be63a": "recommender_number(address,uint256)", +"9f0c3101": "queued(uint256)", +"9f0c3ae8": "operational(address)", +"9f0c3caf": "_deployNewSmartWalletIfNeeded(address,address)", +"9f0c83f9": "getTotalWeiRaised()", +"9f0c84d9": "AccountIsLock(address)", "9f0d5f27": "depositAll(address)", "9f0d6d0f": "ship(uint256,address)", "9f0de490": "challengeOutcome(int256)", "9f0e1986": "createGen0Auction(uint256,uint64)", "9f0e3107": "get_timestamp(bytes32)", +"9f0e4a1d": "setRewardParamUpdated(uint256)", "9f0e591b": "ABCDToken()", "9f0e7d44": "companyReserves()", "9f0eed0f": "GetCurrentICOCycle()", "9f0f78ca": "profitsTotal()", +"9f0f7a2d": "setEventStartDate(uint64)", +"9f1025c6": "getTimeout(bytes32)", "9f10a990": "userEntries(address)", +"9f11121f": "SPS()", "9f117317": "releaseManyStakes(uint256[],address[],address[])", "9f118536": "initiated()", "9f11e9cd": "setRegistrant(uint256,address)", +"9f1221f0": "RndGap_()", +"9f123ec1": "acceptDeal()", +"9f124e18": "MibTokenSend(address,address,uint256,uint256,uint256)", "9f126281": "updateFirstBuyer(bytes32,uint8,bytes32,address)", "9f12fde0": "modifyBet(uint256,uint256)", "9f1306cb": "P3DReceive()", "9f132677": "MAX_CONTRIBUTION_WEIS()", +"9f139fd6": "domainByName(string)", "9f13c4c7": "sealableProperties(uint256,bytes32)", "9f147c41": "tokenPriceInCent()", +"9f14e1f7": "marketplaceToValidBlockNumber(address)", +"9f14f5b6": "offerHatForSaleToAddress(uint256,uint256,address)", +"9f1558a8": "setCostWei(uint256)", +"9f155e67": "calculateRewardExtra(address)", +"9f157b41": "approve_883(address,uint256)", +"9f15d700": "safeBurn(address,uint256)", "9f15e729": "setgamecardname(uint256,string)", +"9f161af2": "createSale(address,uint256,uint256)", "9f161d39": "BaseCrowdsale(uint256)", +"9f163dff": "estimateOuts(address[],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()", +"9f17d111": "V2router()", +"9f17f3ff": "toFixed(int256)", "9f180cf1": "calculateAccountValues(address)", "9f181b5e": "tokenCount()", "9f184dd5": "aggregateValues(address,address)", "9f186edb": "setSpawner(address,bool)", +"9f18b4d2": "maxAllow()", +"9f18f71e": "leaseDue()", "9f19296b": "getGroupStatistic(uint256)", +"9f194033": "_claimFees(address)", +"9f19403e": "Get_USDT_Contract()", +"9f19aec1": "convert_shares(address,address,uint256)", "9f1aa404": "refundAllInvestorTokensPurchases(address)", +"9f1ac6f8": "feeMilliPercent()", "9f1ae1c1": "FSATToken()", "9f1ae6ac": "MAX_CARS_TO_GIFT()", "9f1b3bad": "Receive()", +"9f1b5248": "finalWithdraw(uint256,uint256)", +"9f1bc36e": "log(address,address,bool,address)", +"9f1bcec4": "addTransaction(string,string,string,uint256,string,string,uint256,uint256[10])", +"9f1c1f1d": "INVESTMENT_LIMIT_MIN()", "9f1cda42": "ValidateEventStorage(bytes,bytes)", +"9f1d0f59": "swap(address,uint256,uint256)", +"9f1d9267": "withdrawFor(address,address,uint256)", +"9f1db528": "__getRate(address,address)", +"9f1dec6b": "createPromoPolitician(address,string,uint256)", +"9f1e540d": "getListAthletes()", +"9f1e721f": "commission(address,address,uint256,uint256,uint256,uint256)", "9f1eaa4c": "getUnsoldTokensWithDecimals(uint256,uint256)", +"9f1eabd1": "masha()", +"9f1ec78b": "getQuoteSigner()", +"9f1ec8c8": "Locked(address,uint256)", +"9f1ed0c7": "setGasTokenReceiver(address)", +"9f1ef914": "awardedTokens(address)", "9f1f07fe": "iWAMToken()", "9f1f238e": "isChecksumValid(bytes32)", "9f1f2d77": "_updateReferrerFor(address,address)", +"9f1f7f6f": "init(uint128)", +"9f1fdbe5": "calculatePhoneTokenAmount(address,uint256)", "9f203255": "setAuditor(address)", "9f204a47": "sendIncentivisation(address,uint256)", +"9f205f68": "totalProjectEscrow()", +"9f21c0f7": "abiEncodeStringLiteral(bytes4)", "9f21edf6": "setLevelPAO(uint256,uint256,uint256,uint256)", "9f223167": "ownerEth()", "9f22af8e": "add2Y(address,uint256)", +"9f2319cf": "_emitDailyDataUpdate(uint256,uint256,bool)", "9f233c76": "Seiyuu()", "9f237b43": "deathData_v9()", "9f242bf5": "NUTScoin()", +"9f243c15": "emergencyWithdraw(uint256,address,uint256)", "9f245957": "totalDiscountedItemsForSale()", +"9f247665": "yearlyExtraMint(uint256,uint256)", +"9f24a12d": "borrowerToLastLoanTermRequest(address)", +"9f2524ee": "votes(address,uint256)", +"9f2613bc": "validate(bytes16)", +"9f274b42": "viewUserLevelStauts(address,uint256)", "9f275dec": "investBalanceOf(address)", "9f2763d2": "newPurchase(string)", +"9f27bab9": "gobierno()", +"9f2830b7": "nominateDelegate(address,address,uint256,string)", +"9f287e16": "getAaveOracle()", +"9f28a95e": "approveDebtIncuree(address,uint256,address)", "9f28f7c4": "toSCL(uint256)", "9f28f8c2": "changeWhitelistedAddressCapAmount(address,uint256)", "9f296b62": "getPaymentTotal(address)", "9f29e1a1": "thisContractTokenBalance()", "9f2a1471": "erc820Registry()", "9f2a6374": "platformWalletAddress()", +"9f2aa993": "ReceiveEthEvent(address,uint256)", "9f2b03b6": "LAB()", +"9f2b1041": "collectPrize()", "9f2b22c7": "CanYaCoin()", +"9f2b3664": "assignSpToMagic(uint256,uint256)", "9f2bbcfd": "LoggerAuthorized(address)", "9f2bc32b": "preITO()", +"9f2bccb3": "SellOrderPlaced(address,uint256,uint256)", +"9f2c03f8": "adminRemoveLease(string,uint256)", "9f2c1fd8": "ERC20(uint256,string,uint8,string)", +"9f2c22c0": "applyUndo(bool,uint256,address,bytes32,bytes)", +"9f2c4363": "getTokenAdapter(address)", +"9f2c6030": "setClosePrice(uint256,uint256,uint256)", +"9f2c883c": "f2a()", "9f2c9503": "mintAndLock(address,uint256)", "9f2ccbcc": "buyAnimalsFromAnimalFactory(string,string)", +"9f2ce594": "createdOn()", "9f2ce678": "vote(bytes32,bool)", +"9f2cfaf1": "getFrozenBalance(address)", +"9f2d5a95": "TotalPoolRewards()", "9f2e0f9c": "managePlayer(address,uint256)", +"9f2e7b19": "rewardReductionPerEpoch()", "9f2e7ce3": "prevXRPCToken()", "9f2eaf4e": "verifyCanWithdraw(address,address,uint256)", "9f2ee8b8": "getBlocksByOwner(uint256,uint256,address)", @@ -91025,78 +166652,146 @@ "9f2f58ec": "void_race()", "9f2ff221": "teama()", "9f2ffaff": "_0xGoldToken()", +"9f30bda7": "totalStakedUBXT()", "9f30ca9a": "getOpenBidsByBidder(bytes32,address)", +"9f318811": "Migrated(uint256,address,uint256,string)", "9f318ae8": "HKHCToken(address,uint256)", +"9f31daf2": "year2_limit_date()", "9f31de2e": "updateTokensForCloudexchangeTeam(uint256)", +"9f31e81c": "cancelChangeRequest(uint8)", +"9f3210a4": "gearTokenDonation(uint256)", "9f327124": "ReflexCoin()", "9f329b15": "SpareCurrencyToken()", +"9f32d2fc": "depositTokenSale(uint256)", +"9f331649": "calculateDuckTokensForMint()", "9f334696": "isNumRed(uint8)", +"9f336dc7": "buyARMTokens()", "9f337cce": "_createTeam(string,address,uint256)", "9f33d9cb": "joinAsBuyer()", "9f34ab0c": "PXGToken()", "9f34ce14": "activateConflictResolution()", +"9f34e9a3": "registerTokensCount()", +"9f3502f0": "numOccupiedAccounts()", "9f351fc0": "totalRedeemedCheque()", "9f35910c": "getTeamOwner(uint32)", +"9f35c3d5": "repayBehalf(address)", +"9f35c43c": "OnGameInfo(uint256,string,string,uint256,uint256,uint256,uint256,uint256)", "9f35caee": "getAllChainIDsOfUser(address)", "9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", +"9f3640d4": "setComputeStop(address)", "9f37092a": "buyItem(address,uint256)", "9f373a7a": "updateCandidate(address,string,string,uint256)", "9f37b53f": "verificationSlashingPeriod()", +"9f381d5f": "markEthUniLp()", +"9f390a36": "drop(uint256,address[])", "9f396cff": "voteAgainst()", +"9f39de06": "getPoolBalance(uint8,string)", +"9f3a40de": "getCSaiAddress()", +"9f3a7059": "A_PRINCIPAL_AMOUNT()", "9f3c4416": "claimInheritance()", +"9f3cd4ee": "dynamicMincapThresholdx100()", "9f3ce55a": "sendMessage(address,uint256,bytes)", +"9f3d1859": "getUserDate(address)", +"9f3d1a2a": "metadataBaseURI()", +"9f3d2016": "RaceCreated(uint256,address,uint256,uint256)", +"9f3d5b88": "_protected()", "9f3d7b0b": "addProposal(address,uint256)", "9f3e1846": "EscobarcoinToken()", +"9f3e68df": "changeMLMAddress(address)", "9f3edbe1": "emissionStatusUpdate(bool)", +"9f3ee7a5": "depositCollateralForBorrower(bytes32,address,address,address,uint256)", "9f3ef430": "payTokenHolderBasedOnTokenCount(address,uint256)", +"9f3ef7e3": "getEnterpriseBasicInfo(bytes32)", +"9f3f0496": "pendingNiu(uint256,address)", "9f3f736a": "LIMITED_ADMIN()", +"9f3f89dc": "getZero()", "9f3fab58": "a(bytes32)", +"9f3fbd2b": "_punishTime()", +"9f3fbecf": "getMintingPrice(address)", "9f3ff73a": "setExternalCurrencyProcessor(address)", +"9f4003a0": "depositAll(bool)", +"9f402d1e": "testDevFeeVals(uint256,uint256,uint256)", "9f403a3d": "addProfit(address,address,uint256)", "9f406c8b": "isPreICOFinished()", "9f408251": "TaTaTu()", "9f4085fd": "setAddressKYC(address,address)", +"9f409e99": "getRoundLosers(uint256)", +"9f410738": "getDetailsInfos()", +"9f41134a": "StakeLP(address,address,uint256,uint256)", +"9f417563": "getPayloadEndpoint()", +"9f42102f": "areAddressesImported(bytes32[],address[])", "9f4216e8": "userList(uint256)", "9f4283fa": "jdaleveridgesyscoin()", "9f43daf7": "sendEthTweet(string)", "9f43ddd2": "expirationTimestamp()", +"9f44296a": "swapWithExact(address,address)", "9f4478a2": "modifyRate(uint256)", "9f44b34c": "EXT_COMPANY_TWO()", "9f44fa19": "FeedbackUpdated(uint256,uint8,bytes32)", "9f454f2b": "LEU(address,uint256)", +"9f4568ef": "redeemed(address)", "9f45b45c": "getModuleByName(uint8,bytes32)", "9f45c8ec": "nodeCheck(bytes32)", "9f45f982": "PATH(uint256)", +"9f468e8e": "isAlreadyUser(address)", +"9f46b302": "clearPool(uint256,uint256)", +"9f471303": "workable(address)", +"9f4740db": "generalLockedValue()", +"9f47e6d3": "GasifyVaultAddress()", +"9f486752": "testSendMeEth()", +"9f487a95": "changeRequestedTimestamp()", "9f489e4e": "getDeposit(uint256,address)", +"9f48af97": "Do_Stacking(uint256,uint256)", "9f494565": "LogMint(address,uint256)", +"9f49b60e": "setExitFee(uint256,uint256)", "9f49cefb": "addStage(uint256,uint256)", +"9f4a33d1": "withdraw9()", +"9f4a394c": "same_salt()", "9f4aaaef": "asmName(address)", +"9f4ad59e": "haceAglo()", +"9f4b59f2": "issueWithMsg(address,uint256,string)", +"9f4b6bc1": "loadTokens(address[])", "9f4ba0ee": "setInitialPrice(uint256)", +"9f4c0920": "ERC20TokenAddress0()", +"9f4cbfd2": "addAddresToAudits(address)", "9f4cd0ef": "current_item_index()", +"9f4e515c": "isPreSaleEnd()", "9f4e8405": "updatePaymentManager(address)", +"9f4ece2e": "massMintPools()", "9f4f4808": "setCrowdfundAddress(address)", "9f4f903e": "TicketToken()", "9f4f9886": "getRateAt(uint256,uint256)", "9f4fae14": "getAmountWeeklybyNum(uint32,uint8[4])", +"9f503356": "ParameterUpdate(string)", +"9f503417": "transfer_price_wei()", "9f509ab1": "FUNDING_PRESALE_MAX()", +"9f512ebc": "setRecordContract(address)", "9f5185b6": "EventCashOut(address,uint256)", "9f51cf67": "balance_available_for_custom_voting()", "9f5215dd": "availSupply()", "9f5227c2": "confirmWithdrawal(address,string,uint256,string,address)", +"9f527e90": "_checkWhitelist(address)", +"9f52b549": "isAdminlisted(address)", "9f52b74e": "apt()", "9f52f381": "startAllocation()", "9f530cc9": "JACKPOT_CHANCE()", +"9f53256a": "updateStreamingFee(uint256)", "9f535821": "mint(uint256,uint256,string,uint8,bytes32,bytes32)", "9f536edd": "setScore(address)", +"9f53827f": "getTenderStatus(address)", "9f53e07b": "channelMaxSize()", "9f544434": "sendFood(address,uint256)", +"9f54790d": "contractDeployTime()", "9f548613": "MyUserToken(uint256,string,string)", "9f549015": "Max_Mintable()", +"9f54ba18": "setHarvestFeeAddress(address)", "9f54c01c": "addProducer(bytes32,uint256,bytes1)", "9f54c24f": "LogGive(address,uint256,string)", "9f550293": "getTotalRaised()", "9f55857d": "testBazMethod(uint32,bool)", "9f55ecab": "currentVotingDate()", +"9f5633c7": "teddyPerBlock()", +"9f563fb9": "exitPosition(address,uint256)", "9f569ab4": "requestOfTime(address,uint256)", "9f569e66": "sendTokensTo(address[],uint256[])", "9f572048": "getCanvasByOwner(address)", @@ -91104,225 +166799,412 @@ "9f577c15": "setContractProvider(address)", "9f57d16e": "getCurrentJackpot()", "9f5892a7": "hash(string,uint256,uint256,address)", +"9f58c2a1": "setNameFee(uint256)", "9f58d881": "executeOr(bytes32,bool)", "9f591fa5": "deathData_v15()", +"9f59e8a5": "tokenId_continentId(uint256)", "9f59fc5a": "GetConsentDirectives()", "9f5a5ff8": "Police_4()", "9f5a851f": "configure(uint256,uint256,uint256,uint256,uint8,address)", +"9f5a936c": "_convert(bytes32,address,uint256,bytes32,uint256,address,bool)", +"9f5a9672": "deleteWindow(uint256)", "9f5a9b7c": "getTotalBurnt()", "9f5ac8f7": "creator(bytes32)", +"9f5ad892": "getPixelRGB(uint16,uint16)", "9f5b1d2c": "GITHUB_LINK()", +"9f5b4049": "lastSecretSanta()", +"9f5b64cc": "Rebond(address,address,uint256,uint256)", +"9f5b8578": "request(bytes32,uint256,address,address,bytes4,uint256,bytes)", "9f5bd866": "setNodalblockURL(string)", "9f5c11c4": "two_card()", "9f5c671e": "MultipleErrorsContract()", +"9f5c8d2f": "UNLOCK_ETH_POOL_REWARD_PERCENT()", "9f5ce849": "CNT_Token()", "9f5cfe03": "roundsCount()", +"9f5d0ae4": "getDODO(uint256)", +"9f5e0d19": "removeSpaceShips(uint256)", +"9f5e394f": "disperseOneTokenFrom(address,uint256,address[],uint256[],address)", "9f5f0520": "myVault()", "9f5f0826": "_bonusToPartners(uint256)", "9f5f7c7f": "tokenSplit(address,address,address,uint256)", "9f5ff50a": "calcTokens(uint256,uint256,uint256)", +"9f6102d7": "PreviligedUnLock(address,address,uint256)", +"9f610d74": "withdrawAllWithdrawableCORE()", "9f614b61": "addTitleTransfer(string,string,string)", "9f6163ee": "lastBlock_v4()", +"9f61d336": "approveIssueOnBehalf(address)", +"9f61e68e": "addRewardsContract(address)", +"9f61f313": "weiTakenByOwner()", "9f621075": "ICO_AllowPayment()", "9f624701": "DZONetwork()", "9f6264d3": "setArray(bytes32,bytes32[])", "9f62e202": "CrowdSale_AssignOwnership(address)", "9f637851": "endICODate()", +"9f63b38f": "openCaseSignHash(uint256,uint8)", "9f63f5c3": "approveLoan(address,uint256)", +"9f64195d": "registerServer(string,bytes)", "9f64b6fb": "sendAffiliateValue(uint256,address)", "9f654dd2": "sellTokensIco()", +"9f657426": "calculateDividend(address)", +"9f658855": "claim(uint32,uint8,address,bytes)", "9f659296": "createCardForAcquiredPlayers(uint256[],address)", "9f65f242": "Itube()", "9f665e1a": "offerAccepted(address,uint256)", "9f668bba": "getGameIds()", +"9f66cddf": "divideUpWinnings(address,uint256,uint256)", "9f674147": "accruedBonus(uint256,uint256)", "9f674eb3": "myAccessLevel()", +"9f677ed9": "setSystemFullyPaused(bool)", +"9f677f64": "LoanRequestAccepted(address)", "9f678cca": "drip()", "9f6822b4": "startEscrow(bytes20,address,uint256)", +"9f6828d9": "competitions(uint256)", "9f684a0d": "disableATMExchange()", +"9f68d7ca": "setViaA(uint256)", +"9f690d71": "getArtworkFileData(uint256,uint256)", +"9f696b35": "getBatchesCountWD()", "9f69b5a0": "updateEscrow(uint64,uint256,uint256)", +"9f6a0258": "refrate()", "9f6a4fbe": "CyteCoinERC20Token()", "9f6b4cce": "BetPlaced(address,uint8,uint256)", +"9f6bb8ef": "endTurbo()", "9f6bd2a9": "isArbitrator(address)", +"9f6bfdf3": "registrarFirma(uint256,uint256)", +"9f6c08ca": "secondHouseClose(uint256,uint256)", "9f6c20f6": "MRC(uint256,string,string)", "9f6c3dbd": "join(address,address,uint256)", +"9f6c9358": "removeImage(bytes32)", "9f6dcd9d": "ETHtoZCOrate()", +"9f6dfe94": "obelixToken()", +"9f6e1b26": "allowanceCoupons(address,address)", "9f6e3456": "SOPHIYA()", "9f6e4bb5": "weiAllowedToReceive(uint256,address)", +"9f6f3d5b": "draw(address,address,address,uint256,uint256)", "9f6f99ee": "updateAPIPublicKey(bytes)", "9f6fb2ba": "createRichContract(string)", +"9f6fc3c0": "onCurve(uint256[2])", "9f6ff2e1": "EInvoicingRegistry()", +"9f707a2e": "payoutVestRewards()", "9f70c3dc": "doWithdraw(address,address,uint256)", "9f70db12": "removeEmployee(address,address)", +"9f712f2f": "changeProxyAdmin(address)", +"9f7203d2": "OnWithdrawaled(address,uint256,bool)", +"9f720ac1": "versionToProposalIds(address)", +"9f7260bd": "setLockFee(uint256)", +"9f727b62": "setESDS(address)", "9f727c27": "reclaimEther()", +"9f736579": "setPoolRewards(bytes32,uint256)", +"9f737d5b": "supplier_components(address,uint256)", "9f73bef1": "getSubjectsCount()", "9f73dbc0": "getCurrTeamSizes()", +"9f73f1e0": "ICOVarsChange(uint8,uint256,uint256)", +"9f748db7": "_newCopiedSettings()", "9f7496ec": "_firstUnlockAmmount()", +"9f753909": "set_Invest2Fulcrum2xLong_ETHContract(address)", "9f753df6": "MELON_BASE_UNIT()", +"9f75c238": "calInterestAmount(uint256,uint256)", "9f75ccc8": "onSuccess()", "9f75e990": "ReceivedCall()", +"9f7608c9": "glyphsOfferedForSale(uint256)", "9f7623b8": "sign(address,address)", +"9f763686": "RDR()", "9f769807": "setTokenState(address)", +"9f774078": "getLockedReward(uint256,address)", +"9f77437b": "getCashPrior(address)", +"9f776b6a": "currentPos()", "9f77920c": "Revoke(address)", +"9f7811a1": "getSalesBuyers(uint256)", +"9f782d92": "add2(uint256,bool,uint256,uint256)", +"9f786616": "networkOwner(uint256)", +"9f788e7b": "__Mine_init(address,address)", "9f789a0c": "setSchellingRoundDetails(uint256,uint256,uint256)", "9f7904af": "available_with_bonus()", +"9f794d75": "setWhiteAddress(address)", +"9f796db9": "testAirDropSingle()", +"9f797440": "ChangePartners(address,uint8,address,uint8)", +"9f799c6c": "Uniswap_TokenToEth(address,uint256,uint256)", +"9f79edc2": "lockTokens(address,uint256,uint8,uint64)", "9f7a2ef5": "TEAMmint()", "9f7a53a1": "sendBountyBalance(address,uint256)", +"9f7ad82b": "defaultDiscount()", +"9f7aee82": "confirmDelivery(address)", "9f7b0fc8": "getParent(address,uint256)", "9f7b4579": "create(uint256,uint256)", "9f7b967e": "SampleERC677Token(address,uint256)", "9f7ba828": "getTokenToEthMakerOrderIds(address)", "9f7c8851": "otherSupply()", "9f7c94aa": "payoutWinners()", +"9f7cbddb": "BeneficiaryWithdrawal(address,uint256,uint256)", +"9f7d5688": "liquidationDeadline()", +"9f7d647d": "isPayable(uint256)", +"9f7d759c": "ZapInSingleSided(address,address,address,uint256,uint256,address,address,bytes)", "9f7d9f62": "deprecateDefenceSubtype(uint8)", "9f7d9f92": "AggiungiMiner(address,bool)", +"9f7dcb3e": "maxUNIAPP()", "9f7e03cc": "deposit70Percent()", +"9f7e1bf6": "isContainerForMarket(address)", "9f7e1fed": "Lock(bytes)", +"9f7ea754": "tradeAndSend(address[],address,address,uint256,address[],address[],bytes,uint256[],uint256[],uint256,uint256)", +"9f7eac37": "setUtilisationMultiplier(uint256)", "9f7ed5b8": "startTimeTLP1()", "9f7f0784": "appVersionListAt(bytes32,uint256)", "9f7f2bd1": "createDog(uint256,address)", "9f7f760c": "SimpleDice()", +"9f7fd8f2": "buyViaUSDT(uint256)", "9f7ff381": "COMPLETION_STATUS()", +"9f801ce4": "getAllFundsContract(uint256)", "9f8049ea": "distributeELTCLarge(address[])", +"9f80679f": "createIndex(address,address,bytes2)", "9f807962": "buyMorties()", +"9f808b48": "NewGrant(address,uint256)", "9f80d1b2": "presaleGoing()", "9f810510": "ZONTEX()", "9f8106cf": "transferAllUnsoldTokens(address)", +"9f813b1b": "estateLandIndex(uint256,uint256)", "9f819b13": "updateFunders(address,bytes32,string)", +"9f81aed7": "MIN_DELAY()", "9f81c4d6": "bitcoingo()", +"9f81db28": "ecosystemdevelopmentWallet()", "9f83008a": "teamReserveWallet()", "9f839d22": "getOptionPair(address,uint256,address,uint256,uint256)", +"9f83ece4": "wsttotal()", "9f853717": "duplicates(uint256)", "9f855bd5": "shipLocation(uint16,uint16,address)", "9f856de5": "doPurchase()", +"9f857412": "Insults_Today(uint256)", +"9f85b334": "unStakeSecondTokenLP(uint256)", +"9f86a0ee": "setMarketLiquidityRate(address,uint256)", "9f871242": "computeTokenAmount(uint256)", "9f8743f7": "getRound()", +"9f874c99": "getProposalEthReward(bytes32)", "9f87acd0": "exec(bytes32,bytes32,uint256)", "9f87f419": "closeTierAddition()", "9f881e0b": "MobSquads()", "9f881f46": "checkPassed(address)", +"9f885564": "stake(address[],uint256[],address[],uint256[],uint256)", +"9f887fde": "nope(address,address)", +"9f88a608": "stakehouse()", "9f8970dd": "bountyTokensAccount()", "9f8a13d7": "isActive(address)", +"9f8a95ba": "SUSPENSION_REASON_UPGRADE()", "9f8abede": "fixPermission(address,address,uint8,bool)", "9f8adeb8": "givecandyto()", "9f8ae5d3": "roundFourTime()", "9f8aef2b": "ERC721Token(string,string)", +"9f8b4179": "confirmWhitelisted(address)", +"9f8b7358": "RefundProposalAdded(uint256,uint256)", +"9f8bee88": "usersOfPool(address)", +"9f8c2440": "setValidatorAddress(address)", "9f8c45cf": "getQuestionDetails(uint256)", "9f8c7c4c": "insertSums(uint256)", +"9f8c84f8": "getNoPositiveSlippage()", +"9f8c924c": "calcSeniorAssetValue(uint256,uint256,uint256,uint256,uint256)", +"9f8dbb7b": "updateBonus(uint256)", +"9f8e0d8a": "setCccc(bytes32,bool)", +"9f8e1d62": "activeVestingNum()", +"9f8e67bf": "methodologist()", "9f8e8209": "Cillionaire()", "9f8f0dc3": "test_twoValidEqBool()", +"9f8f2efa": "_getDime(address)", "9f8f4c45": "developerPctX10()", "9f8f4fb5": "withdrawAcquisitionsToken()", "9f8f9b8e": "SetEvaluate(uint256[],uint8,uint64[])", "9f8ff91d": "getSponsorFee()", +"9f8ffd91": "totalBlocksProofed()", "9f90279e": "f_priv()", "9f903ff6": "setEmitter(address)", "9f90688a": "SmartCityToken(address,uint256)", +"9f9106d1": "getStakingToken()", "9f912d25": "abort(uint16)", "9f915aca": "Tier_Starter()", "9f91d145": "draftNewCardWithReferrer(address)", +"9f9206bc": "lotteryPicker2()", "9f923388": "secondStageTokensSold()", "9f9248c7": "DepositInterest(uint256,address,uint256,uint256)", "9f927be7": "getNextCall(uint256)", +"9f92b6c6": "tradeTime(address)", +"9f92cad5": "pendingNerd(uint256,address)", +"9f93993c": "totalInFaaSPool()", "9f941f69": "getDesignatedReportingEndTime()", "9f943039": "Ethershares()", +"9f947a5e": "bp()", +"9f94c44d": "Created(address,address,address,uint256)", "9f94d684": "irreducibleOf(address)", "9f94fb7a": "endAtkBoss()", +"9f958ca9": "ethermonProcessor()", +"9f95af88": "getLatestAnnouncementTimestamp()", "9f95de64": "transferToGrant(uint256,uint256)", "9f961c5a": "salesPipe()", "9f963c4e": "periodPercent()", "9f96de0f": "getResourceCount()", +"9f971489": "convertEthToUSDC(uint256)", "9f9727ce": "QuotaManager(address)", +"9f972dde": "getPriceDeviationThresholdFactor()", +"9f9750a9": "issueToken(address,string,uint256)", +"9f976d9b": "StateStartTimeSet(bytes32,uint256)", "9f977b21": "getBob(uint256)", "9f97a024": "testEscapedQuoteInString()", +"9f97cf1f": "dNyanConstructor(address,address)", "9f97d937": "start_declaration()", "9f97fdbb": "setDonationReceiver(address)", "9f9827fa": "adviserPart()", +"9f986c53": "fifteenPuzzles(uint8,uint8,uint8)", +"9f98799c": "proposetest(address[],uint256[],string[],bytes[],string,uint256)", "9f98985d": "endGame(uint256,uint256)", "9f98a45a": "fillOptionOrder(address[3],uint256[3],uint256[2],address,bool,uint96,uint8,bytes32[2])", +"9f98d3cb": "expireKeyFor(address)", "9f98df30": "give(address[],uint256)", "9f98e0f3": "addMerchant(address,string,string)", +"9f98fb49": "updateCachedPynthDebtsWithRates(bytes32[],uint256[])", "9f9936e7": "BullToken()", "9f9938fa": "SILALAHI()", +"9f9a20d0": "initialize(address,uint256,uint256,address[])", +"9f9a2b0e": "pool8users(address)", +"9f9a4e7f": "updateSwapAndLiquifyEnabled(bool)", +"9f9a583a": "inCaseapprove()", "9f9a9b63": "getCategoryLength(bytes4)", "9f9a9b7d": "NDUXBase()", +"9f9abd5a": "isBackupAdmin()", "9f9ae633": "LademiA()", "9f9b1048": "holderExists(address)", "9f9b3d98": "softcap2Reached()", "9f9b4c9d": "Unhalted(uint256)", +"9f9c38c3": "precent_of_reward_1()", +"9f9c7e44": "maximum_fxb_AMM_sellable_above_floor()", +"9f9d50e4": "rewardBalance(address,address,address)", "9f9ea29d": "decodeLock(bytes)", "9f9eac67": "ChangeName(string)", "9f9f1fbe": "getRegionTax(uint16)", "9f9f83dd": "remainingIssuableSynths(address,bytes4)", "9f9fb968": "getDeposit(uint256)", "9f9fe6bb": "acceptProvider(address)", +"9fa01b97": "chiDeploy(bytes)", +"9fa02c55": "AirdropFinished()", "9fa0f763": "buyDrugs()", "9fa0fc4c": "pgoVault()", +"9fa1106a": "buybackFlask(address,address,uint256,address,address)", +"9fa12d0b": "isSpentArray(bytes32[])", +"9fa1826e": "autoAllocateThreshold()", +"9fa1eccc": "maxInvestInWei()", "9fa2526f": "offline()", +"9fa399d3": "outTokenAmout()", +"9fa4311a": "addFXSPair(address)", +"9fa45102": "tokenBlacklist(address)", "9fa45fa6": "sellMyStake()", "9fa46754": "releaseBonus(address,uint256)", +"9fa46c80": "LogDecrementDID(address,uint256)", "9fa4b6cb": "BetDex()", +"9fa4bc98": "setTokenRewardBatchCount(address,uint256)", "9fa50ab2": "voteDescription()", +"9fa56783": "baseHatchingFee()", "9fa5adca": "buyP3D(uint256)", "9fa5df9c": "decreaseAllowed(address,uint256)", "9fa5e5d5": "setARKowner(address)", "9fa6a6e3": "current()", +"9fa6dd35": "delegate(uint256)", "9fa6f886": "NewParticipant(address,uint256,uint256,uint256)", "9fa778d8": "UECToken()", "9fa77b20": "reserveOf(address)", "9fa80c6e": "rewardDistributionEnd()", +"9fa83689": "pullChai(address,uint256)", +"9fa87ffb": "updateAmountOut(address,uint256)", +"9fa8e1e3": "ownerExtend(address,uint256)", "9fa8e5a0": "SetEvaluate(uint32,uint8,uint64)", "9fa92f9d": "home()", "9fa9440c": "BDAYSALE()", "9fa9559c": "getLastYearOfInflation()", "9fa95bfe": "_emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", "9fa987d5": "curPosition()", +"9fa99724": "_prepareMessage(bool,bool,address,address,uint256,uint8)", "9fa9b04c": "ADVISOR_ONE()", +"9fa9ef73": "requestMint(uint256,uint256[])", "9faa3c91": "beta()", +"9fab3d4b": "closeBook(address)", "9fab63c7": "ICOBIDToken()", +"9fab73f7": "lockStartTime(address)", +"9fabbd4b": "deposit1(uint256)", "9fabf4da": "remainigTokens()", "9fac68cb": "burn(uint256,bool)", "9fac6ddc": "withdrawLeftoverWei()", "9fac9abf": "icoHasEnded()", "9faceee4": "MemeToken()", "9fad2dcb": "setTaxInBps(uint256)", +"9fadeabf": "crow()", +"9fae24ed": "viewBaseURL()", "9fae8fd8": "GayBananaToken()", "9faea9c6": "setUnavailableFlat()", "9faec3c9": "adminWithdraw(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32,uint256)", "9faec927": "withdrawChunk()", "9faefe0c": "sendNow(uint256)", +"9faf512c": "liquidityAdditionTime()", "9faf52ee": "teamTwoVolume()", "9faf6fb6": "removeAddress(bytes32)", "9faf7000": "manualSend(address,uint256)", "9fafcf72": "PersonaRegistry(address)", "9fb03244": "softcapMainSale()", "9fb03c7f": "countLayersGasLimit(uint256)", +"9fb05e08": "re_MomentImage_Text(uint256)", +"9fb06c4e": "changeNAPboostLevels(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9fb08cb7": "getUserReward(uint256)", +"9fb10955": "handlerRegister(uint256,address)", "9fb14d9b": "getRemainingBytesTrailingZs(uint256,bytes)", +"9fb16e52": "allocateFund(uint256)", "9fb1b5fb": "setJackpotGuaranteed(uint256)", "9fb25d9e": "LeaderMessage()", "9fb31475": "refundable(bytes32)", +"9fb37393": "cards(address,uint256)", +"9fb3903d": "PrPrecision()", +"9fb3a903": "getPackagesCountM()", "9fb3b7dc": "_setWeights(uint256[])", "9fb3d489": "cancelProposalByCreator(uint256)", "9fb42b1f": "numRequests()", +"9fb436cd": "correctSize()", +"9fb43e72": "unlockedEth()", +"9fb4a62b": "get_rents(uint256)", +"9fb4af79": "CASH_BACK_PERCENT()", "9fb4c63d": "assertEq21(bytes21,bytes21)", "9fb4d1b0": "_getDepth(uint256)", +"9fb518f4": "signatureToOwner(address,address,address,uint256,uint256,uint256,address,uint256,bytes32,bytes)", "9fb52b6e": "dividendsGetPaid(uint256)", "9fb5bdb9": "registerAsSeller(address,string,string,string,string)", "9fb632c1": "private_withdrawBankFunds(address,uint256)", "9fb65754": "FishProxy(address,address)", "9fb65968": "presaleTokensDistributed()", "9fb69839": "getTransactionInformation(uint256)", +"9fb69b43": "balanceReward()", "9fb6c796": "mint(bytes32,uint256,string)", "9fb755d7": "setHotWallet(address)", +"9fb79dbc": "tokenPID(address)", +"9fb7dcbd": "trade(address[])", +"9fb82c7e": "payment(uint256,string)", "9fb8657b": "getNodes(string)", "9fb876c0": "getAllOwnersClaimPriceOfCard(address)", +"9fb8afcd": "getUserBorrowBalances(address,address)", "9fb8dd1a": "getBaseLockPercent()", "9fb95205": "getWithdrawSum()", +"9fb957ab": "getIgniter(uint256)", +"9fb9bd82": "clearPlaycent()", +"9fb9ec11": "updateVotes(address,uint256,bool)", +"9fba03a1": "n_gauge_types()", +"9fba1f9a": "initializePayable()", "9fba2578": "summaryData(address)", +"9fba61c7": "getIsPay(address)", +"9fbb032f": "updateEntry(address,string,string)", +"9fbb314c": "timeUntilProposalProtestDeadline(address,bytes32,bytes)", +"9fbb4790": "getLGEStats(address)", +"9fbbf3ba": "commitAddToken(address,address,uint256,uint256)", +"9fbc661f": "unWrapCryptoItems()", "9fbc6a1a": "EtherHellHydrant()", +"9fbdc942": "swap1(uint256,uint256,uint256)", "9fbdcef0": "setauctionotherfree(uint256)", +"9fbeb1ee": "max_mint_period()", "9fbf538f": "addApprovedBattle(address)", +"9fbf5ff6": "SetDiscipleSale(uint256,uint256,uint256,uint256)", +"9fbf7b85": "getEthBlockPaidAt(bytes32)", "9fc04ce2": "setMaxReferrerTokens(uint256)", +"9fc0dcc4": "existePessoa(address)", +"9fc0ed16": "eggs(uint64)", +"9fc17d70": "invictusFunds(address)", "9fc18031": "getNodesBatch(bytes32,bytes32)", "9fc18d4b": "migrateDisabled()", "9fc1d0e7": "forcedTransfer(address,address,uint256)", @@ -91330,19 +167212,33 @@ "9fc20f60": "priceForSaleAdvertisement()", "9fc21eeb": "wdrawBfr()", "9fc23a74": "totalContractsAvailable()", +"9fc2683d": "stake(address,address,uint256,uint256,uint256,address)", +"9fc27226": "removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)", +"9fc314c8": "claimTokens(address,address,uint256)", +"9fc33a9f": "farmContractAddress()", "9fc3587a": "releaseSupply(uint256)", +"9fc37495": "totalUsersStake()", "9fc39549": "removeInvestorList(address[])", +"9fc3ab03": "teamRatio()", "9fc3b4e7": "checkQuorum(uint256)", "9fc3e53a": "controlstampdissolution(bool,uint256)", +"9fc42317": "migrateSavings()", +"9fc4bf99": "that(bool,bytes32,bytes32,address,uint256,uint256)", "9fc53f30": "getIdByHash(bytes32)", +"9fc5688f": "updateTotalPresaleToken(uint256)", "9fc5852e": "BytePeachCoin()", "9fc5ce2a": "initialMint()", +"9fc66996": "increNonce(address)", "9fc6ceac": "SponsorsQty()", "9fc6d585": "percentageRecipient2()", "9fc71314": "KontolToken()", "9fc71b31": "transferToken(uint256)", "9fc75354": "isMasternodeOwner(address)", +"9fc77882": "artPurchase(string)", +"9fc7875b": "manualPlay()", "9fc7a200": "startNumber()", +"9fc7a65b": "timeHeld(address)", +"9fc7e134": "_getOrderRewardDebug(address,uint256,uint256)", "9fc880f4": "weiRaisedAfterDiscounts()", "9fc89294": "productTypes(uint8)", "9fc8ed76": "serviceAtIndex(uint256)", @@ -91351,36 +167247,64 @@ "9fc9278e": "returnAnyERC20Token(address,address,uint256)", "9fc9ceb8": "HRWtoken(uint256,string,uint8,string,address)", "9fc9d6c0": "FrannickToken()", +"9fca51bc": "addSupportedToken(address,uint256,uint256,uint256)", "9fcaa5ef": "extendMembership(uint256)", +"9fcaab96": "permitRestoreAccount(address,address)", "9fcb114c": "addSomeTokens(uint256)", +"9fcb2944": "transformLockedBalances(address)", "9fcb29fc": "_assign(address,address,uint256)", "9fcb7100": "approveAndCall(address,int256,bytes)", +"9fcb7f24": "inputPayeeData(address[],uint256[])", "9fcbc6f1": "bitvimToken()", "9fcbc738": "setIntermediate(address)", "9fcc4767": "set_referral_fee(uint8)", +"9fcc485e": "yvecrv()", +"9fccd0b2": "adminWithDrawToken(address,uint256)", +"9fcd2cad": "naiveMessageHash(bytes4,bytes,uint256)", +"9fcdb862": "fourDeposit(uint256)", +"9fcddaea": "getUserAccumulateStakeByPID(uint256,address)", +"9fcdeba6": "cure(bytes32)", "9fcdec61": "buyPresale()", "9fce2d80": "didCommit(bytes32,address)", "9fce5c8e": "indexOf(address[],address)", +"9fce706c": "totalBNBspend()", +"9fce78ed": "upgradeFeeProcessor(address)", +"9fce831d": "viewSaleROBX()", "9fce89a4": "intercrypto_recoverable()", +"9fcf1007": "removeBlacklister(address)", "9fcf11bb": "determineCurrentStage()", "9fcf4115": "updateRoundEndTime(uint256)", +"9fcf4ff1": "finishReceipt(uint256)", +"9fcf5867": "activateDsr(uint256)", "9fcf89ee": "lastBlock_a13Hash_uint256()", +"9fd0214c": "increaseVesting(address[],uint256[])", "9fd033ed": "isHolder(address,address)", "9fd03ed8": "XENIA()", "9fd0506d": "pauser()", +"9fd1bd02": "getNetTokenValueOf(address,uint256)", "9fd1bd1f": "changeSelfAddress(address)", "9fd1e7f6": "purchaseTokensERC20(uint256)", +"9fd30de3": "_dropWpcMarket(address)", +"9fd3677f": "minTokensBeforeAddToLP()", +"9fd39b7d": "newGovernWithoutConfig(string,address,string,string,bool)", "9fd3ad34": "setFunds(address,uint256)", +"9fd3af8b": "claimStakeReward()", +"9fd49090": "addFeeAndUpdatePrice(uint256)", "9fd4da40": "totalInitialSupply()", "9fd4f7d1": "replaceWizard(address)", "9fd52984": "burnAfterSoldAmount()", "9fd547fb": "PayeeWithdrawCapital(address,uint256)", "9fd55832": "BrancheProportionalCrowdsale(uint256,uint256)", "9fd58182": "withdrawManagerIncome(bytes32)", +"9fd5a6cf": "permit(address,address,uint256,uint256,bytes)", +"9fd612bf": "lastUserPoints(address)", "9fd64fea": "findAuditor(address)", +"9fd65a33": "changeInitReward(uint256)", +"9fd68362": "isLiquidityEventStarted()", "9fd6adb3": "unVote(uint256)", "9fd6d285": "AirdropMined(address,uint256)", "9fd6db12": "mintingEnabled()", +"9fd78ca6": "adminPart()", "9fd7ca8a": "getCurrentTrancheIdx(uint256)", "9fd859ee": "disablePreminer(address,address,address)", "9fd8914d": "GameAAAToken()", @@ -91389,9 +167313,15 @@ "9fd8c361": "CHECKgamberOne()", "9fda3675": "MYYG()", "9fda5ad2": "confirmedTimesByOwners()", +"9fda5b66": "assets(bytes32)", +"9fda5d62": "betters(uint256)", +"9fda5f3a": "returnLPVote()", "9fda6271": "setElectionInfo(uint256,uint256,uint256)", +"9fdaea0c": "remove_liquidity_imbalance(uint256[3],uint256)", +"9fdb2353": "parties()", "9fdb35e7": "retriggerDrawOnOraclizeError()", "9fdc0ea6": "getDirectoryLength()", +"9fdc2141": "generateBreedType(uint256,uint256,uint256)", "9fdc3255": "_permittedPartnerTranferValue(address,uint256)", "9fdc4d13": "isBuyable(string)", "9fdc53b1": "registerLoanReplace(address,uint256)", @@ -91401,109 +167331,203 @@ "9fde4ef8": "winningOption()", "9fdeeb5e": "teamVestingContractAddress()", "9fdf057f": "setMiningToken(address)", +"9fdf50a9": "API_NewPlayer(address)", +"9fdf53be": "sm_charity(uint256)", "9fdf9625": "seizeForWork(address,address,uint256,bool)", +"9fdfd7a9": "_buildDisputeMetadata(uint256)", "9fe005e8": "horseShoeNotForSale(uint256)", "9fe03c59": "PayForPrivKey(address)", +"9fe0b367": "region_bids(uint16)", +"9fe0cae1": "finishAddNewPool()", +"9fe12fe3": "updateERC20TokenInfo(address,string,string,uint8)", "9fe14580": "BONUS_TIER_1_LIMIT()", "9fe17cc2": "icoContractAddress()", +"9fe1f239": "payoutFee()", "9fe21fc4": "depositAndInitiate(uint256,bytes32,address,uint256)", +"9fe23eae": "emitTransfer(address,address,uint256,bool)", +"9fe285da": "isTooLate()", +"9fe2a68b": "idToApproval(uint256)", "9fe304a0": "catch_the_thief(address)", +"9fe32a91": "calculateReserveFee(uint256)", "9fe34d9f": "isAllowedUser(address)", "9fe39d85": "CHINESE_EXCHANGE_1()", +"9fe4032b": "mulMul(uint256,uint256,uint256)", "9fe4712d": "schedule(address,bytes,uint256[8],uint256)", "9fe4b663": "buyTokensInternal(address,uint256,string)", +"9fe4dccc": "setCommunityAddr(address)", "9fe5e868": "NewWallets(address,address)", "9fe634b9": "getReleaseAuctionEndTime(uint256)", "9fe6999a": "tokensFor1EthP5()", +"9fe6f5f0": "getRune(string)", +"9fe7135d": "zbtceo()", "9fe72acd": "airDropsClaimed()", +"9fe776b4": "mine_slots_4(uint256)", "9fe7ac12": "removeBool(bytes32)", "9fe7ba47": "updateFirstUnionIds(bytes32,bytes32)", "9fe802f1": "transferEx(address,uint256)", "9fe81f52": "changeTimeLimitMinutes(uint256)", +"9fe8ac29": "launch(uint256,address,uint256,bytes)", +"9fe8c24c": "removeLiquidityAlphaOnly(uint256,uint256,address,uint256)", "9fe93231": "ICOEndedSuccessfuly(uint256,uint256)", +"9fe93626": "baePay()", +"9fe9b73d": "_twos_complement_8(int8)", +"9fe9b7be": "VestingClaimed(address,uint256)", "9fe9bde0": "tripleRoomMin()", "9fe9f623": "setTransferEnabled(bool)", "9fe9fc1a": "SoldBlock(uint256,uint256,uint256,uint256,uint256,address)", +"9fea5ef2": "_decode_sol_uint32(uint256,bytes)", +"9feb2c45": "isProtocolContract(address)", "9feb8d23": "amendClaim(uint8,uint8,uint8)", +"9feb8f50": "addReward(address,uint256)", +"9fec3c5b": "burningPermilleBorder()", "9fec4ac4": "SputnikPresale(address)", "9fec8e3b": "addToWhiteListMultiple(address[])", "9fec8e96": "claimedAmounts(address,address,uint256,address)", +"9fecaf80": "currentReward(address,uint256)", "9fecb69f": "finishGame()", "9fecf214": "XChain(uint256,string,string)", "9fed35a6": "createBulkContributions(address[],uint256[])", "9fed39c5": "numWhitelistedInvestors()", +"9fed80ca": "setLiquidityRemoveFee(uint256)", "9feda172": "totalRice()", "9fedb749": "setTeam(uint256,string)", "9fee14ae": "getAllot(bytes32,uint8,uint8)", +"9fee1ade": "sposToken()", +"9fee1b29": "getSubcampaignInfo(string)", "9fee597b": "extractEther()", +"9fee98b6": "clearBSCState(address,address)", +"9feeb674": "valSets(uint256)", +"9feef43a": "INIT_NUM_VALUE()", "9fef0ae1": "BetherFund()", +"9fef0c01": "flags(address)", "9fef26ce": "buyTokens(address,uint256,string)", "9fef93f8": "buyKey(uint256)", "9ff00adc": "betOnOddEven(bool)", +"9ff011b9": "set_new_DTOKEN(uint256)", "9ff031ce": "createEscrow(uint256,uint256,uint256,address,address)", +"9ff0fe46": "RemovedWhiteList(address)", +"9ff11500": "updateValidatorState(uint256,int256)", "9ff12bba": "removeContractMiniGame(address)", +"9ff13e04": "removeAssetLimit(address)", +"9ff14934": "disputeTestDrive(uint256,address,bytes32)", "9ff1b56f": "lockInTime2()", +"9ff20793": "presaleGeneratorsLength()", +"9ff20ef4": "_unbaseUniswapLPContract()", +"9ff226e4": "setMonUnlock(uint256,uint256)", "9ff25fa4": "InitialDateChange(uint256,uint256)", +"9ff2b3ea": "setTokenRewardsMultiplier2(uint256)", "9ff32b18": "grantAllowanceProxyAccess(address)", "9ff33fd1": "getByInternalId(uint256)", "9ff34878": "IPTVcontract()", "9ff3487f": "ConsumerRemoval(address)", "9ff36b54": "isClientPayed(uint256,address)", +"9ff37957": "resetStakeTimeMigrateState(address)", "9ff390c1": "currentTotalBuyin()", "9ff394a8": "goShort()", "9ff4125a": "ICOendTime()", +"9ff43b62": "FinishPreICO()", +"9ff46e74": "setLaunchTime(uint256)", "9ff47485": "isBetPossible()", +"9ff48849": "lockExpire(uint256)", +"9ff4dea8": "withdrawalLiveness()", "9ff512fa": "getTransactionDetail(uint256)", +"9ff60825": "yield_interest_pool()", "9ff61487": "myBackerToken()", "9ff652cb": "setToContractAddr(address)", +"9ff67fd8": "availableVolume(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32)", "9ff71ccb": "modifyCategory(uint256,string,string)", "9ff7422d": "SurgeTestToken()", +"9ff744f1": "setSushiRouter(address)", +"9ff78f78": "setStandardFee(uint256)", "9ff7971b": "setWeiPerToken(uint256)", +"9ff7b939": "withdrawAllEpoch(uint256)", +"9ff8325b": "CreateDepositorToDepositRecordIndexToRecordIDMapping(address,uint256)", "9ff8c63f": "issueMaxSynths(bytes4)", +"9ff8edff": "expensesAccumulator()", "9ff9007d": "lastweek_winner1()", +"9ff90e77": "distributeGoTokens(address)", "9ff93088": "settleGame(uint256,uint256)", +"9ff94374": "ViewDAOVotesaddress()", +"9ff99b37": "setMyWishPercents(uint256,uint256)", +"9ff9a603": "forever()", +"9ff9a6f0": "getBurnStake(uint256)", +"9ff9c02d": "PlayerJoined(uint256,address,uint256,uint256,uint256)", +"9ff9c96f": "max_percent()", "9ffa0711": "CashOut(uint256)", +"9ffa257a": "omss()", "9ffa43ce": "buyFST(address)", "9ffaf32e": "resourceDelete(address,bytes4)", "9ffb2ed5": "showRewards(address)", +"9ffb631a": "minLowRateD()", "9ffbb57f": "SongTokenAdded(address,bool)", "9ffc981f": "getDepositOwner(address)", "9ffcc4c3": "getPayoutCumulativeInterval()", "9ffd1c10": "TrueFlipICO(address,address,address,address,address,uint256)", +"9ffd554e": "LogInvalidResolutionCall(uint256)", +"9ffd5c7f": "getStateVar()", "9ffdb65a": "validateName(string)", +"9ffe7973": "lastAccrueTime()", "9ffea547": "_purchaseOneUnitInStock(uint256)", "9fff19ef": "_setValidatorWrotePart(uint256,address)", "9fff37e0": "JACKPOT_SIZE()", +"9fff7612": "HIGH_LP_REWARD_PERCENT()", +"9fff8ee6": "maid(uint256,uint256,uint256)", +"a00023bd": "OracleResult(bytes1)", "a000812c": "Y1_lockedTokenReleaseTime()", "a000aeb7": "weiReceived()", +"a0011296": "mkrToken()", "a0013419": "ShanxiCoin()", "a001ecdd": "feePercentage()", "a001ef87": "TestOneToken(string,uint8,string)", +"a0020217": "tbtc_gauge()", +"a002239f": "transferExtra(address,uint256,bytes)", "a00223ec": "_recordFirstClaimTimestamp(uint256)", +"a00251c6": "calcTotalValue()", "a002b179": "getCandidateForApoderado(bytes32)", +"a002c871": "pointsTable(uint256)", +"a002f64f": "STARTING_DIFFICULTY()", "a003371e": "PreICOEarlyDays()", "a003651d": "getNumberOfChoices(bytes32)", "a0041286": "changeURL(string)", "a00413bd": "resetReportTimestamp()", +"a0042149": "safe64(uint256)", "a004737a": "startPrePreIco(uint256)", +"a004a273": "_getMyProfit()", "a004ee5a": "isCustodianOf(address,address)", +"a00524f8": "getProofs(address,uint256,uint256)", "a00545b2": "claimPrize(address,uint16)", "a00553a5": "WinnerIndex(uint256)", +"a00575c2": "addcert(string,string,string)", "a005b87b": "NullMapTest()", +"a005ec7a": "details(uint256)", +"a0065b5b": "blockNumberLocked()", "a006b0e2": "_regName(bytes32)", "a006e0e5": "phaseTwoLimit()", "a0071552": "sellItem(uint256,uint256,uint256,uint256)", +"a00745b6": "isPending(address)", +"a0076e84": "getRecords(address)", "a007bc45": "getRateStages(uint256)", +"a00892f7": "unit(uint8)", +"a008bb52": "queue2ActiveUser()", "a008d288": "Pethreon(uint256)", "a008d893": "isReferee(address)", "a008f5eb": "_isNativeToErcBridge(address)", +"a0093806": "microWalletsIDs(address)", +"a009491b": "retrieveNumber()", +"a0094b98": "orederMap(uint256)", +"a00990e6": "withdrawLostToken(uint256)", "a0099b60": "deltaEFunc(uint256,uint256,uint256,uint256,uint256,uint256)", +"a009f5a9": "endfirstround()", +"a009f7e4": "totalWithdrawn(uint256)", "a00a3440": "mainSale1Limit()", "a00a7a6d": "determineNewRoundMostInviter(uint256,uint256)", +"a00a8b2c": "oracles(address,uint256)", "a00aede9": "scheduleCall(uint256,address)", "a00afaa0": "ADMIN_GET_FEE()", +"a00aff40": "season(uint16)", "a00b043e": "bonusTokenVault()", "a00b603c": "getDNI()", +"a00b6dd4": "getKeyForUser(address)", "a00c0a28": "Log2(string,uint256,uint256)", "a00c3e72": "ExtendLife()", "a00c9374": "afterSaleMinting(uint256)", @@ -91511,11 +167535,14 @@ "a00ce6a5": "mintForReportingParticipant(address,uint256)", "a00d7740": "setCUSDAddress(address)", "a00d7b27": "myFirstHelloWorld()", +"a00dae81": "_adjustSillyWhale(uint256)", "a00dc9dd": "changesp1(address)", "a00ddad1": "verifyBalance(address)", "a00ec993": "setStarRate(uint256)", +"a00ecf9e": "updateBonusTokenStatus(address,uint8)", "a00ee946": "existAccount(uint256)", "a00f198a": "confirmOrder()", +"a00f3976": "updateMultisign(uint256)", "a00f64d6": "_soldOutsidePMZ()", "a00f77e1": "getMemInvestor(address)", "a00fd3c8": "register(uint256,string)", @@ -91524,31 +167551,51 @@ "a00fff6f": "pendingManager()", "a0109c9f": "incrementFee()", "a0111086": "ParentFee()", +"a01112ac": "isRefunding(uint256,uint256,uint256)", "a0113f18": "isCrowdsaleFull(address,bytes32)", +"a011dcb1": "leaseIndexByNftByAssetId(string,uint256)", "a0129b00": "redeemSurplusETH()", +"a012d827": "setTargets(string[],address[])", "a01317cb": "BlockHipo()", "a0132df2": "validationTime(address)", "a0135b2b": "updatefee(uint256)", "a0135d04": "seSigner(address)", "a013ab77": "isBuilt(uint256)", "a013ad54": "BONUS_DURATION()", +"a013cc5c": "changeSchoolStatus(address)", +"a013d431": "boolen_1()", "a013e4d0": "GouShiTokenFunc()", "a014b9bd": "addReferralOf(address,address)", "a015cb10": "claimOwnerEth(uint256)", +"a016240b": "withdrawInstantlyFrom(address,uint256,address,uint256)", +"a0164362": "DAYS_IN_SECONDS_90()", +"a0164dae": "hex2AtxWithBonus(uint256,uint256)", +"a0167bb8": "unlocksOn()", +"a01687ef": "setRecipientRewardAndDuration(address,uint256,uint256)", +"a01695de": "ReconTokens()", "a01701dc": "capPerAddress()", "a01729a4": "communityCliff()", "a0175360": "Approval(address,address,address,uint256)", "a0175b96": "changeAllCosigners(uint256,address[],uint256[3],bytes,bytes,bytes)", "a0179949": "feeAccount1()", +"a017b8ec": "getFaucetTotal()", "a017ed35": "G12Coin(uint256,string,uint8,string)", +"a0183a31": "capValue()", "a0187f91": "DataExternalValidation(address)", "a0189345": "outOfLimitAmount()", +"a0189c9d": "commission(address)", "a018f2b2": "delegateProxyAssert(address,bytes)", "a0193ff9": "allowed_contract()", +"a019cb4b": "stakingDetails(address)", +"a01a0603": "userOrders(uint16)", "a01a3a07": "LogTicket(uint256,address,uint256)", "a01a478c": "getEnemyCombinationOfAddress(address,address)", "a01a4cfa": "getMyInstancesOfAPackage(uint256)", +"a01aa550": "aEiRobBlock()", +"a01aafb4": "_removeExcludedAmounts()", +"a01afee3": "registrationExt4(address)", "a01b0c27": "getRegisteredContract(uint256,uint256)", +"a01b1023": "setBlockList(address[])", "a01bc729": "monster_attack(uint256)", "a01bc8f6": "setdaily(uint256,uint256)", "a01bfa79": "adminWithdrawBCEOPreSale()", @@ -91556,294 +167603,574 @@ "a01c489d": "setMaxFeeTrade(uint256)", "a01c62f7": "isTransferLocked()", "a01cb43d": "WithdrawFee(uint256)", +"a01da7b2": "getPriceInToken(address,uint128)", "a01de7ae": "BFToken()", "a01e1a21": "setPendingReserveData(address,uint256,address)", "a01e5490": "isUnconfirmedGblock(bytes32)", "a01eacc2": "Aerosyn()", +"a01ed4ff": "BidderRefunded(uint256,address,uint256)", +"a01f79d4": "ownerCutPerMillion()", "a01fdbef": "approvePullRequest(bytes32)", +"a01ffdff": "byebye()", +"a0201839": "participant1Token()", +"a0213122": "delgateWithSign(address,address,uint256,uint256,bytes)", "a0214c1c": "mintClose()", "a02172d3": "getAssData(uint256)", "a0218b66": "getAccountAmount(uint256)", "a021d76d": "deleteIssuer(uint256)", +"a021e16b": "setDailydistribution(uint256)", +"a022ac28": "dforceSplitImplementation()", "a022ac81": "test3Args()", +"a022b80f": "updateCardRanges(uint256[][])", "a022c15e": "getTaskReward(bytes32)", +"a022ceff": "secondaryStartTime()", "a022da29": "increaseLoanOnBehalfOfRecurse(address,address,bytes32,uint256,uint256)", "a022e283": "APOLLOCOIN_COMPANY_AMOUNT()", +"a02306f9": "PERCENT_FOR_COM()", "a0234a91": "supplyLockedA()", "a023d4a7": "Redicon()", "a023e7d3": "updateTrustRankAfterStoryExpiry(bytes12)", "a023ea47": "burnAdminTokens()", "a024284d": "participantsForCustomSale(uint256,address)", +"a02485c9": "sendTransferReward(address,uint256)", "a024ea16": "MAX_BOUNTY_ALLOCATED_TOKENS()", "a025bcc3": "calculateFee(bool,bool,uint256,uint256)", +"a02619e4": "_lockStatus()", "a026348c": "pitboss()", "a0263a5a": "addgodaddress(address,address)", +"a0264c37": "totalPendingTing(address)", +"a0265b1d": "syncUniswapV2()", "a0268aea": "fcomToken()", "a026946d": "ieth()", +"a0269af9": "register(string,string,string,string,string,uint256,address)", +"a026bad2": "addTokenToContract(uint256)", "a026d7c4": "SunflowerToken()", "a026da8c": "teamClaim(uint256)", "a0270dbc": "resolve(uint8)", +"a0271ca5": "frog2()", "a02745af": "setarg_2_input(uint256)", "a0275c05": "appendStock(uint256)", +"a027bf4d": "lostTimestamp(uint256)", +"a028350c": "riskTokens()", "a02853ef": "BitcoinExchange()", "a028554e": "setInitialMintingPowerOf(uint256)", "a0285c01": "initiateChange(bytes32,address[])", +"a0286784": "approveDomain(uint64,uint64)", +"a028a55e": "shiftManager(address,address,uint256,uint256)", "a028aa1b": "distributeVariable(address[],uint256[])", "a028d749": "caculateFee(address,uint256,uint8)", "a028e63c": "setName(uint256,bytes32,bytes32)", +"a0296215": "buyTRU(uint256)", +"a029b096": "getCodeVersion()", +"a029b36b": "changeTimeLock(uint32)", "a02a338a": "tokensPerOneETH()", "a02a34cd": "skinOfAccountById(address,uint256)", +"a02a4363": "withdrawTokenNotOwnedByUsers(address,address)", +"a02a9729": "getPenaltyPercentage()", +"a02aa8e9": "testfunction(uint256)", "a02b114c": "setArray(bytes32,address[])", "a02b161e": "unregister(uint256)", "a02b1a51": "getPaid(bytes32)", "a02b7fbe": "MANAGEMENT_TEAM_SUPPLY_LIMIT()", "a02b9aac": "getPaymentDataByAddress(address)", +"a02be771": "addRole(string,uint256)", +"a02c04fe": "setPTokenImplementation(address)", +"a02c0dc4": "ownerControlLp(uint256)", +"a02c0fd1": "Transaction_Item_WithToken(address,uint256,uint256)", "a02c40e1": "qbxSourceToken()", "a02c4b97": "holdAddress5()", "a02c5279": "testIntegerKeyValue()", +"a02c53d6": "salt(address,uint256)", +"a02c9320": "littContent(address,bytes32,string,string,string,string,uint256,bool,bool)", +"a02cb88c": "getReservesRates(address,address[],uint256[])", +"a02ce574": "get_block_info()", "a02cf937": "feePct()", "a02d2376": "SubContract()", +"a02da75f": "getVerifyResult()", +"a02e0616": "setLINK(address)", +"a02e1571": "getDefaultOperators()", "a02e98df": "getAdd(bytes32)", +"a02f2690": "LogAuditAssignmentError_ExceededMaxAssignedRequests(address)", +"a02fa7af": "BurnTokens(address,address,uint256)", +"a02fbb78": "updateAssetRisks(address[],uint8[])", +"a0303473": "getLicenseByAddress(address)", +"a0303c41": "patientCount()", "a0305398": "getOtherMapValue(uint256)", +"a030a6b3": "OnDrawStart()", "a030b8e6": "restartsys()", +"a0312899": "luckyDrawEnabled()", +"a0313657": "versionPenalizer()", "a03189b3": "devPayed()", +"a0321a53": "emergencyExecute(address,bytes)", "a03243cf": "getMinimumTribute()", +"a0325191": "_initChronos()", "a0326040": "weekPot()", "a0326fae": "_removeFromList(address,uint256)", +"a03286cd": "SellOrder(address,uint256)", +"a032b4f3": "switchActiveContract(address)", +"a032f80a": "minCompConvert()", +"a033a19c": "seasonalEnd()", +"a033df12": "ethJoin_join(address,address)", "a033fcd4": "collectFees(address,uint256)", +"a034050c": "ETHToUSD(uint256)", "a0340625": "unfrozen()", "a03435d1": "authorizerAddress()", "a0345fca": "finalize(bytes)", +"a034b09b": "calculateUserReserveCollateralETHInvoicePool(address,uint256,uint256)", "a034b6cb": "vote(uint256,uint256,uint256,string)", +"a0352ea3": "averagePrice()", "a0354921": "setSTMPPrice(uint256)", +"a035561f": "RESALE_PLATFORM_SHARE_NUMERATOR()", "a0355eca": "setTime(uint256,uint256)", "a0355f4e": "decline(uint256)", +"a0356f6e": "getShortRatesLength(bytes32)", "a035b1fe": "price()", +"a036716a": "OwnershipChange(address,address,bytes32,uint256)", +"a036ba60": "cryptoFloat()", +"a036e799": "aseguradora()", "a036f0f8": "getUsableXPA(address)", +"a036fd1b": "governmentBurnTokens()", +"a037164d": "_minLoan(uint256)", "a0376dfe": "getAskByUserID(uint32)", "a0378730": "addReceivers(address[],uint256[])", +"a037cd50": "batchLimit(uint256)", +"a0382364": "ctokens(address)", "a0385e1c": "superTransferFrom(address,address,uint256)", +"a0388ca6": "referred(address)", "a038af35": "GetChallengeBetsInformation(uint256)", +"a038d41c": "get_supply()", +"a0391ef0": "_handleTokens(address,bool,address,uint256)", "a0392897": "_decreaseApproval(address,address,uint256)", +"a039548b": "onWithdrawInviteRewardToOrder(uint256,address,uint256,uint256)", +"a039707f": "setFoobar(int256)", +"a0399da1": "channelSettlementEncrypted(uint64)", +"a039c7af": "ForgeStart()", "a039e3c7": "testSetNotTransferable()", +"a03a4826": "rateToken1ToToken2(uint256)", +"a03a5cab": "UpdateExpectedAmount(bytes32,uint8,int256)", +"a03a8247": "updatePayment(uint256)", +"a03ab4a9": "printMinimal(uint256,string,string)", +"a03acdd9": "withdrawCRT(uint256)", "a03b1ea9": "_getFee(uint256,uint256)", +"a03b51ae": "playSpecificDoubles(uint8,uint256)", "a03b66e5": "ZilleriumPresale()", +"a03bb22c": "arbonecount()", +"a03bb841": "b58_decode(bytes)", +"a03bc1e8": "device_clear(uint256)", +"a03c4f12": "jsbdceth()", "a03c5832": "getPermissionParam(address,address,bytes32,uint256)", +"a03c5d6e": "_nftInfo(uint256)", "a03cc0b2": "setExchangeToken(address)", "a03d0f06": "lockAccount(address,bool)", +"a03d3ea9": "setVoter(uint256,bool)", +"a03d6a77": "unstakeStartDate()", +"a03d8669": "StakeLPList(address[])", +"a03dbeb8": "airdropByOwner(uint256[],uint256[])", "a03df051": "rentedLand()", +"a03e4bc3": "aavePool()", +"a03e881a": "hasPrice(bytes32,uint256)", "a03eb806": "recoverAddressFromSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes)", "a03f254f": "getWebsocketUri()", "a03f633a": "resetListing(bytes32)", "a03fa7e3": "transferTo(address)", "a03fb4c0": "makeTradeable()", +"a03fef4d": "ChicagoTokenSalen(address)", +"a0406c1f": "changeMultiplierHero(uint256,uint256)", +"a0411c54": "bunnyCount(uint8)", +"a04164a7": "updateTokenInfo(address,address,uint256,uint256,uint256)", +"a0416ed3": "createEscrowEntry(address,uint256,uint256)", "a0417c9a": "updateAsset(uint256,string,uint256,uint256)", +"a0420747": "sushiBar()", "a0422d02": "COLOR_NOT_AVAILABLE()", "a0422d31": "getApiById(uint256)", +"a0422e01": "registerPullPayment(uint8,bytes32,bytes32,bytes32[2],address[3],string,string,uint256,uint256,uint256,uint256,uint256)", +"a0425121": "sendToL2(bytes)", +"a0425c2d": "NotInRollbackHistoryError(bytes4,address)", "a0426fb2": "preSaleEnded()", "a0428bbc": "balancesStaticoin(address)", "a042b9c1": "newComment(bytes32,bytes32,string)", +"a0432376": "rebaseMintPercs(uint256)", "a04369f8": "addBoosterQuest(address)", "a0437f63": "rewardBounty(address,uint256)", "a043bb16": "tokensBoughtInBonusProgram()", "a0440426": "purchaseProduct(uint256,uint256)", +"a0442484": "exitPosition(address,uint256,uint256,uint256,uint256)", +"a04428d3": "confirmRebasement()", "a044b070": "a(address,uint256)", +"a044c987": "w3()", +"a044e905": "isACitizen(address)", +"a044ed91": "verifySignature(bytes32,uint8,bytes32,bytes32,address)", "a0452bfb": "dividendFee_()", +"a045442c": "getAllMinters()", +"a0458083": "invokePreIssueHook(address,uint256,address,address)", +"a0459a7e": "setUniswapRouterContract(address)", +"a045f7d5": "balanceOfStakedWantCurrent()", "a045fdff": "scheduleCall(address,bytes)", +"a0463817": "getExistingOrders50(uint8,address,uint256)", "a0469b02": "inputToDigit(uint256)", "a046c5f6": "NewStaticAdr(address)", "a0472d6c": "blocksInADay()", +"a0478f71": "setFastCrossMinValue(uint256)", +"a047d074": "getLastUserId()", "a0489ac2": "draining()", "a0493834": "unconfirmedSum()", "a04a0908": "execute(address,bytes,uint256)", +"a04a4851": "Userbalance(address)", "a04a59cc": "randMod()", "a04a6ac8": "auctionEndPrice()", "a04a7b1f": "getPoolMinStakeQspWei(uint256)", "a04a85c0": "checkFrozen(address)", +"a04b2b32": "qRatio()", "a04b3c2d": "mine_jade_ex(uint256)", "a04bd02f": "getIsStartable(uint256)", +"a04c6067": "deposit(address[],address[][],uint256[][],uint256[])", +"a04c965e": "WithdrewTokens(address,address,uint256)", "a04cc350": "_addDefaultOperatorByTranche(bytes32,address)", "a04ce2c5": "setArrayIndexValue(bytes32,uint256,uint256)", +"a04d4aa2": "tokenIssuedAdvisor()", "a04d4c60": "getDataColla_001_001(string)", +"a04d5969": "__MATTER_init_unchained(address,address,address,address,address,address)", +"a04d8a38": "pendingSommai(uint256,address)", "a04da725": "SEXNToken()", +"a04dbbf9": "updateArtworkList(string)", +"a04e182c": "Add_daily_Income()", "a04e34bc": "weiAllowedToReceive(uint256,uint256,uint256,uint256)", +"a04efbe7": "pendingBalanceMap(address)", "a04f7bd1": "MMONToken()", "a04fce5b": "MINDBODYToken()", +"a04fd789": "transferUserInfo(uint256,address[])", "a050975b": "requestReclaimContract(address)", "a050d07d": "getNumWizards()", +"a05124be": "addTRXSwapWallet(address)", "a05190f4": "BOT_ELEMENT_2()", +"a051a24e": "addrToMaster(address)", "a051b6b1": "phase_5_rate()", +"a051c311": "getDefi99BalanceMetadataExt(address,address,address)", +"a051d9c3": "removeFactoryAddress(address)", +"a05229e8": "putPrize()", "a052c595": "addTrustedPartner(address,string,string)", "a052eae4": "writeStuff(uint256,int256,uint256)", "a052f024": "addDonator(address)", +"a05359ff": "requestStatusChange(string,string,address,string)", +"a053b90e": "INITIAL_BLOCK_STEP()", "a053ce1f": "referralRate()", "a053eb9d": "OPERATION_STAKE()", "a0548d2f": "redistributeLosingReputation()", "a054cbea": "isPlatform()", "a054d3ef": "checkWithdrawal(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"a054e747": "getApprovedAddresses()", "a0557818": "getSireId(uint256)", "a055d455": "run(uint40,uint256,address)", "a055fe64": "_projectCommitNew(address)", "a056469a": "extractFeeLength()", "a0566330": "LJCJ()", +"a056735d": "setFeelessSender(address,bool)", "a05693c6": "clearSmet()", +"a0569ff5": "_internalBurnSynths(address,uint256,uint256,uint256,uint256)", +"a056e620": "biddingTime(bytes32)", "a0572fda": "titleIds(uint256)", "a0577762": "changeTechAccountAddress(address,address)", "a0579801": "icoStoppedManually()", +"a057a495": "votingOwners(address)", "a057dade": "blackListUser(address,address)", "a05801b7": "metadataOfTokenByIndex(uint256)", "a05809ff": "calculateTotalPayoutAmount()", +"a058bab4": "weiPerUToken()", "a058ce51": "DigiCash1()", +"a05968cd": "earnedToBuyBackToken2Path(uint256)", "a059ffa6": "createNewTourament(uint256[])", "a05a1218": "triggerStealManually2(string)", "a05a70a7": "QTLToken(address)", +"a05ace15": "setBaseHatchingFee(uint256)", +"a05b2577": "testUseStorage(uint256)", "a05b8ed8": "_execute(bytes32)", +"a05b9f85": "get_signatures(uint256,uint256)", +"a05bb774": "constant_getCuts()", "a05bba46": "getAllDepositorsCount()", +"a05c31af": "lengthSeller(uint256)", "a05c47ca": "ico2Max()", "a05c7bda": "AuthorizeToTransfer(address)", +"a05cb755": "coreInstance()", +"a05ce940": "playerRound_m(uint256,address)", "a05d03fd": "currentSale()", "a05d068d": "foundationTokensVested()", +"a05d0de3": "setImportantAddress(address)", +"a05d99a7": "investAuction(address)", "a05e1db7": "getBuyerfee()", "a05e3bb0": "setBasicBallotsPer30Days(uint256)", "a05e822a": "howManyOwners()", +"a05e90a1": "getUniswapState()", +"a05ea6e4": "stakesNonce(address)", +"a05ec618": "sendRewardsX()", +"a05f8d24": "Lendr(string,string)", +"a05f9906": "global()", "a05fc749": "CoinLotto(address)", "a05fccef": "transferMultiple(address[],uint256[])", +"a0603510": "claimValues(address,address)", "a0605a79": "ZTTBToken(uint256,string,string,uint8)", +"a0607b4b": "getWethAmount()", "a060d498": "KillSwitchEngaged(address)", "a060ecce": "checkPosition1(address,address,uint256)", +"a06101d0": "calculateTotalValue()", +"a06160fd": "FARMING_POOL_REWARD_ALLOCATION()", "a0617ad0": "totalMaxSupply()", +"a0619693": "takeOrder(bytes32,address,uint256,uint256)", "a061eba0": "proposeVersion(address)", "a0626939": "setFoundersTokensReserve(uint256)", "a06285ed": "CharityInProgressSupply()", +"a062cdbf": "CancelAuction(bytes32,address,uint256)", "a062d5fe": "TOTAL_SATOSHI()", +"a0631a3c": "collectMedalInfo()", +"a0632461": "removeModule(address)", +"a06394ca": "toLiq()", "a063dae8": "equal(int256[],int256[],string)", +"a064101e": "setGiftsAddress(address)", "a0641288": "redeemableBalance(address)", "a064481e": "BokkyPooBahWuzHere()", +"a0648321": "linkRate()", +"a064b44b": "earnCalc(uint256)", +"a065172b": "getAuctionPriceParameters()", "a065a2bf": "distributeFAITH(address[],uint256,uint256)", +"a065c384": "tellorOracles(string)", "a0660943": "computeSlaves(address,address)", +"a0662571": "sashimiBorrowState(address)", +"a06674d6": "authorizedTokenAmount()", +"a066983d": "stake(uint256,uint256,address,bytes)", "a067412b": "assignInitialAddresses(address[])", +"a067455b": "setIntervalBlocks(uint256)", +"a06751d5": "setBurnerOwner(address)", +"a06752c7": "greenWiresCut()", "a0684251": "remainder()", +"a0685e84": "converterFeed()", "a068e8d3": "convict(uint256,uint256,uint256,uint256)", "a068edb5": "determineOutcome()", "a0695f24": "assertBalances()", "a0695fc2": "startIcoOne()", +"a069c1ac": "setVotingContract(address)", +"a06a5000": "getContributions(uint256,uint256,uint256,address)", +"a06a5a6c": "UpdatedClaim(address,uint256,bool)", +"a06a71de": "DJRemoved(address)", +"a06a87f1": "_setVenusSpeed(address,uint256)", "a06ac637": "listUserRecasts(address,uint256,bool)", "a06aceb2": "ATCController()", +"a06ad7d0": "NewEruption(uint32[],uint128,uint128)", +"a06b7527": "MULTIPLIER(uint256)", +"a06b78d2": "lockSelling()", "a06b7eb0": "decreaseLockedAmount(address,uint256)", +"a06b95e8": "mapEditors(address)", "a06c5a24": "monthlyPrice()", "a06caae8": "TransactionSettled(uint256,uint256,uint256)", "a06cab79": "Registrar(address,bytes32)", +"a06cc0a3": "TokensReclaimed(address,uint256,uint256)", "a06ced75": "RESERVE_LOCK_TIME()", "a06d083c": "credit()", "a06db7dc": "gracePeriod()", "a06dd6dc": "emergencyFlush()", "a06de4d9": "rand8(uint256,uint8,uint8)", +"a06df78a": "toFixed(int256,int256)", "a06e09f1": "PrivateSale(address)", "a06e58ac": "isResolvedForComplainant(uint256)", "a06ef4f2": "icoAmountBonus3()", +"a06f6679": "approveForSwap(address,uint256)", +"a06fe775": "unbond(address,bytes32,uint256)", +"a0709812": "auctionityChainId()", "a0712c3d": "feesRateTeam()", "a0712d68": "mint(uint256)", +"a071ccd1": "addonsMultiplier()", +"a071dcf4": "taxFee()", +"a071fbd5": "refundContributions(address,uint256,uint256,uint256[])", "a07245fd": "getHtlcPaymentBlock(bytes32,bytes32)", "a0726b72": "getPresaleRaisedAmount()", "a072f02b": "idvRegistry()", +"a072fd2a": "paintingIdToIndex(uint256)", +"a0731095": "UsingETHdeposit(address,uint256)", +"a073817b": "ERROR_CODE_FROM_FROZEN()", "a0742666": "isParticipant(address,address)", +"a0748154": "isEditor(address)", +"a074c359": "StakeEthUbaseLp(uint256)", "a074d5ee": "unClaimedEther()", "a0759e14": "setEmontRewards(uint256,uint256)", +"a075a02d": "addressAPICheck()", +"a075c2dc": "removeBonus(uint256)", +"a075dd54": "MonthLimitChanged(bytes32,uint256,uint256)", "a075e164": "setup(uint256,uint256,uint256,bool)", +"a076a3f6": "GetExpectedRate(address,address,uint256)", "a076da7a": "notifyExecuteSellOrder(uint256,uint256)", "a076e223": "Declaration()", +"a076e7db": "MaxAvailAwards()", "a077321c": "restrictUntil()", "a0775baf": "AUTBToken()", "a0776a59": "getTokenSupply(string)", "a07778ec": "icoBonus3EndDate()", "a077b298": "restrictions()", "a077c657": "giveRightVote(address)", +"a077ef52": "registerChannel(uint64,address,address[],uint256[])", +"a0784325": "signup(bytes20)", "a078f737": "hasUserRole(address,uint8)", "a0790cb7": "setFreezed(address,bool)", "a0796236": "rejectWithdrawal(address)", +"a079d295": "AirdropDiff(address,uint256,uint256)", +"a079f58b": "addAssetNewsContract(address)", +"a07a5c93": "bfxTKN()", +"a07aea1c": "addOperators(address[])", "a07b206f": "totalWhiteListed()", "a07b2461": "proveIt(address,string)", +"a07b2a8d": "burn_(address,uint256)", +"a07b9271": "claimParticipants(uint256)", +"a07bbb1b": "runTokenUniswapKyber(uint256,address,uint256,address,uint256)", "a07c132b": "setPrevOwner(address)", "a07c4fcf": "getTapRemaining()", "a07c765f": "END_TIMESTAMP()", "a07c7ce4": "burnable()", "a07c8ed9": "changeName(bytes,bytes)", "a07c9156": "UpdateWhiteListImplementation(bool)", +"a07c91c1": "TokenSet(address)", +"a07d03dd": "votesForNo()", +"a07d1a18": "totalSupplyN()", +"a07d371f": "QuranPROD()", +"a07d8bf8": "stakingMapping(bytes32)", +"a07d93dc": "huntRiskyAccount(address)", "a07da887": "deploy(address,uint256,uint8,address,uint256[])", "a07daa65": "newRequest(uint256)", +"a07e400f": "RECEIVE_NOT_ALLOWED_ERROR()", +"a07e4ece": "trade(address,uint256,address,address,uint256,uint256)", "a07ead73": "setColdWallet1(address)", +"a07f021c": "corporate()", "a07f0a98": "DEFROST_AFTER_MONTHS()", "a07f3a56": "isAttended(address)", "a07f3bb0": "UpgradeableStandard23TokenMock(address,uint256,bytes32,bytes32,uint256)", "a07f5f84": "beneficiary3()", "a07f8f19": "isCrowdSaleFinished()", "a07fc020": "moveToRST()", +"a0800184": "createContractItem23(string,string)", "a080249b": "BonusPoolSupply()", "a08038be": "setPreferredCurrency(bytes4)", "a0807404": "setBZxOracle(address)", "a080c8ba": "getLamboModel(uint256)", +"a0811074": "white()", +"a081ddbd": "recoverUnsupported(address,uint256,address)", "a081fc19": "deathData_f6()", "a082022e": "Sell(address,address,uint256,uint256)", "a0821be3": "availableBalance(address)", "a0823111": "removeAffiliate(address,bytes32)", +"a0826525": "TicketsOfAddress(address)", "a08299f1": "divisionby0(uint256)", "a082c86e": "DEADLINE()", +"a082eb0e": "totalDiscountGranted()", +"a082eb6c": "adminPutInStud(uint256,uint256,uint256)", "a0831fdb": "BNBB(uint256,string,uint8,string)", "a0836e28": "getaddressret(address,address)", +"a083bd3c": "registeredAssets(uint256)", "a083cb48": "TokenBase(uint256,string,string)", +"a083df70": "delegate(uint256[],uint256[])", +"a0840a7f": "addLiquidityToBakerySwapWhalexWBNBPair()", "a0844bb5": "_computeRarityBonus(uint256,uint256)", +"a0845659": "jsageth()", +"a0847453": "currentSp500Price()", "a0847a95": "updateRoundBalance(uint256)", "a084af95": "Trust(address[],uint256,address,bytes)", +"a084bccf": "wrapTokens(address,uint256)", "a084ee76": "removeReturnAgent(address)", "a0851928": "convert_valuation_to_art(uint256,uint256)", "a0852bbd": "SynTokenAddress()", +"a0857259": "getLongTokenId(bytes32)", "a0859845": "emitPreferredCurrencyChanged(address,bytes4)", +"a085d576": "referral(bytes12)", +"a085ea7c": "setGrowthRatioBands(uint256,uint256)", +"a086880a": "calculateBSCReceived(uint256)", +"a086d50a": "devRewards()", +"a087097e": "offerStatus()", +"a0871637": "rdivide(uint256,uint256)", "a0876445": "artworkCount()", +"a0876fbe": "countairdrop()", "a0877304": "minSale()", "a08783bf": "Moviecoin()", +"a08793d0": "setLiquidationThresolds(address[],uint256[])", +"a087a87e": "read(address)", "a087ac0c": "perDeadLine()", "a087ae89": "calculatePeriodsCountAndNewTime(uint256,uint256)", +"a087fb9e": "userbalances(address)", +"a0887a14": "performTrade(bool,uint256)", +"a0890109": "aiVault()", "a0893ef2": "releaseSupply()", +"a0894799": "isFrozen(uint256)", "a0895ec1": "LogUnfrozenTokens(string,address,uint256)", "a089feea": "kill_switch()", +"a08a1a59": "_salesAmount()", +"a08a695c": "GOLD_BOX_BASE_PRICE()", +"a08a9810": "unpauseHatch()", "a08aa298": "NewSupplyAdjuster(address)", +"a08ab993": "setCompute(address)", "a08b1447": "presaleAmountETH()", "a08b3367": "EC()", "a08c0908": "getFiatTransaction(string,uint256)", +"a08c9026": "extendedKYC(address)", +"a08d17f8": "_pos(uint256,uint256)", "a08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", "a08df770": "changeRecoveryFromRecovery(address)", "a08e3f0e": "restTokensMoved()", +"a08e7db4": "inrateAvg(uint256,uint256,uint256,uint256,uint256)", "a08e8b36": "totalFunctions()", "a08ed1cb": "initUnstake()", "a08f1b09": "getArrUintField2()", +"a08f793c": "contribute(address,uint256,uint256)", "a08f8428": "BasicTokenWrapper(address)", "a08fcabb": "setUint(bytes4,uint256)", +"a0901e51": "getEthBalances(address[])", "a09037a9": "totalContracts()", +"a09040ad": "getUSDC_CASH_UniswpPair()", +"a09044b3": "rollDice(bytes)", +"a09073d5": "Check(address,address,string,string)", "a09107e1": "only6()", +"a0922282": "UserTokenAmount(uint256,address,uint256)", "a0922e15": "calcTransferFee(uint256)", +"a0926f8c": "purchasedOfDown(uint256,address)", "a0927a6a": "authorizedPayments(uint256)", +"a0928c11": "stakingRewardsGenesis()", "a0929cda": "salvageTokensFromContract(address,address,uint256)", +"a092a5a7": "defaultContract()", "a092ae25": "getMyAllowance()", +"a0942d64": "setCandidateContract(address)", "a094a031": "isReady()", "a0954a49": "changeEarnings(uint256)", +"a095883d": "calcDevTreasuryPercentage(uint256)", +"a095c1bb": "tokenOfSellerTokensLength(address)", "a09635b0": "_transferToICAP(uint256,bytes32,uint256,string,uint256)", +"a09640ec": "balancesOf(address[],address[])", "a09686c4": "getRoundsCount()", +"a096d9f0": "verifySignatures(uint256,uint256,bytes32,bytes32,bytes,bytes)", "a096ea1b": "bltRetainedAcc()", +"a09748a7": "shl_3()", "a0979332": "Bitcoineum()", +"a0985ba1": "setComptrollerAddress(address)", "a098a04b": "getRandomAnimalId()", +"a0990033": "allowed_to_mint_for(address,address)", "a0996799": "getMyBulls()", "a0997b66": "ROLE_RBAC_ADMIN()", +"a0998772": "registerNoReferral()", "a0999436": "ESOPAddress()", "a099ad85": "workingState()", +"a099bb85": "CoinFlipSuccess(bytes32,address,bool)", "a099d079": "getEarlyIncomeByAddress(address)", "a099e6be": "updateTokenExchangeRatio(uint256)", "a09a05e0": "AllocateUnsoldTokens(address,address,uint256)", +"a09a082d": "_claimStatsEncode(uint256,uint256,uint256)", +"a09a1601": "isPausable()", "a09a1e22": "dealSellContract(uint256,string,uint256,uint256,string)", "a09ae0aa": "absDiff(uint256,uint256)", +"a09b1194": "getLatestLocation(address)", "a09b39ae": "WorldCup(string,string,uint256,uint256,string)", "a09b7e2b": "totalPresaleBase()", +"a09bae42": "testMemoryIntegrityCheckZeroLengthSlice()", +"a09c5b73": "fillOrder(uint256,address,address,uint256,uint256)", +"a09c8404": "currentPx0Cumu(address)", +"a09c996f": "buyToken(address,uint256,uint256,address)", +"a09caa58": "yourStakedPLM(address)", "a09cca93": "ownerTransferOwnership(address)", +"a09ce002": "getPollName(string)", "a09cec67": "_setData(uint256,uint256,uint256)", +"a09d0954": "_rewardPerBlock()", +"a09d38c7": "buyAssetOrderERC20(address,uint256,address)", "a09d4240": "UacCrowdsale(address,address,address,address,address,address,address,address[])", "a09d4ae4": "returnTempTokens(address)", "a09d9c09": "setTransferRate(address,int16)", @@ -91851,45 +168178,76 @@ "a09ddf4e": "getCurrentRgb(address)", "a09de28d": "approveAndCall(address,uint256,bytes,address[],uint256[])", "a09e3d0a": "getChildCount(bytes32)", +"a09e978c": "LogFilterBlock(address,bool)", "a09e9c1d": "startBidding(uint256)", +"a09f1143": "ub()", "a09f6691": "LogGetMoneyBack(address,uint256,string)", "a09f8659": "newConflictRes()", "a09fb22e": "updateReputation(string,uint256,uint256,string,string,address)", +"a09fdbc9": "getRoundChoices(uint256)", +"a0a01f5a": "Unlock(address,uint256,uint256,uint256)", +"a0a05391": "createVotingProposal(address,uint256,uint256)", "a0a0d331": "COMPANY_WALLET()", "a0a1082a": "createCustomVUP(address,uint256)", +"a0a1686b": "testStrings(string[])", +"a0a1b2a9": "lockedBbkOf(address)", +"a0a1e763": "eveWithdraw(uint256,address,uint256,uint256)", "a0a2b573": "setTimestamp(uint256)", "a0a2c11d": "ListValSince(uint256)", +"a0a2daf0": "delegates(bytes4)", "a0a2f629": "setReferralId(uint256,address)", +"a0a32c0b": "isConnectors(string[])", "a0a337e2": "getSetupFunctions()", +"a0a3df19": "_swapExactTokensAndAddLiquidity(address,address,address,uint256,uint256,address,uint256)", "a0a3ec6d": "getDividentsFromShare(uint256)", +"a0a49684": "loopringProtocolAddress()", +"a0a4ba9e": "RtcPurchased(uint256)", "a0a4cb6c": "reveralSupply()", "a0a4d9df": "batchTransferORSB(address[],uint256)", "a0a4f93b": "setGasused(uint256)", +"a0a504d5": "claimableDividend(address)", +"a0a52ec4": "setClearAnchorRatio(uint256)", +"a0a58c84": "tempData(uint256)", +"a0a5c3ca": "allowedAmount()", "a0a5cd92": "OkapiToken()", "a0a695fe": "registerTier1Users(address[])", +"a0a6ce37": "getPriceInEth(address,address)", +"a0a6d75f": "tradeTokenForTokenUsingReservesWithFeeOnTransferSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool,uint8)", "a0a6e940": "finalizePresale()", +"a0a6f9b4": "getValueArray(uint256)", "a0a7131c": "test_twoValidAssertFalse()", "a0a7299b": "feeInBps()", "a0a76eb0": "charactersOf(address)", +"a0a7b0d0": "BeneficiaryDeactivated(uint8)", "a0a7dc2e": "withdraw_1Completed()", "a0a7e0f8": "GameCellCoin(uint256,string,uint8,string)", "a0a8045e": "getEthUsdPrice()", "a0a86de3": "PreSaleTokenSoldout()", "a0a8e460": "contractVersion()", +"a0a90856": "atomicSwaps(bytes32)", +"a0a91d57": "setwithdrawContractAddr(address)", "a0a95502": "reading_card_count()", "a0a986f1": "price0()", +"a0a98928": "purchasers(string,uint256)", +"a0a9ce14": "getBountyHunters(uint256)", "a0aaa87f": "secondStageMinted()", "a0ab2847": "tfg()", "a0ab308c": "BidAskX()", +"a0ab31fe": "getGurnCoin()", "a0ab7091": "_isCooldownReady(uint256,uint256)", "a0ab9653": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes,address,uint256)", "a0abdba0": "allocatorAddress()", "a0ac47fe": "_ethereumToTokens(uint256)", "a0ac5776": "claimBooty(uint256)", +"a0ac5e19": "_enableTrading()", "a0acb9dd": "getA(string)", +"a0acbce0": "underlyingTokenAddressToDmmTokenIdMap(address)", +"a0ace77a": "inWithdraw()", "a0ad04c0": "changePhaseToICO()", "a0ad51a6": "KNOW()", +"a0ae082d": "change_price_index(uint256)", "a0aead4d": "getAssetCount()", +"a0aec105": "getPendingLimit(address)", "a0af0127": "world(uint256,uint256,uint256)", "a0af3252": "thirdCurrentAmount()", "a0afd731": "dividendBalance(address)", @@ -91897,34 +168255,52 @@ "a0affbfd": "upgradeHGT(address)", "a0b06190": "addOneUserIntoWhiteList(address)", "a0b091e4": "sellMFCoins(uint256)", +"a0b0948e": "lzkWhiteList(uint256)", +"a0b158c5": "buyToken(uint256,address,uint256,address,uint256)", +"a0b18fca": "OwnerAdded(address,address,uint256)", "a0b1b385": "playerSetInput(address,uint256)", "a0b1f668": "GetRandom_In52(uint256)", +"a0b24e82": "sellBeb(uint256)", "a0b28861": "createAndBuyAllAmountBuyEth(address,address,address,uint256,address,uint256)", "a0b2995a": "GetParticipantRole(address,address)", +"a0b2a842": "dodajIspit(string,string,uint256,uint256,address)", "a0b2becb": "getLastAcceptedProposals()", +"a0b2d57f": "ms()", "a0b31d58": "addPacksToNextPremiumSale(uint32[])", +"a0b335e3": "minAuctionLength()", "a0b3bef0": "NVBToken(uint256)", "a0b4388a": "activateShip(uint32)", "a0b43a4e": "getWinnerPot()", "a0b45df2": "transferOwnershipAndToken(address)", "a0b498a4": "issuedTokens(address)", +"a0b4eabe": "PROPOSAL_EMPTY()", +"a0b5323f": "retrieveUnclaimedPoolRewards()", "a0b55095": "allGames(uint256)", "a0b5cf5f": "changeResolverAllowancesDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", "a0b65332": "getProposalIdByIndex(uint256)", "a0b70e87": "capTokens()", +"a0b75bb0": "buy_usdt(uint256)", "a0b76d49": "JToken()", "a0b7967b": "getNextSequenceId()", "a0b7dcb4": "_transferInternal(address,address,uint256,bytes,string)", "a0b7ebbd": "isExistingPlayerInBattle(string,address)", "a0b7f0f8": "updateContributorAddress(address,address)", +"a0b7f6f2": "NewGame(uint256)", "a0b873f2": "updatePlatformFeePercentage(uint8)", +"a0b8773c": "AutoMix(address,uint256,uint256,uint64)", "a0b87d1e": "MuseumsChain()", +"a0b8d7c3": "setPool(uint8,address)", "a0b946f0": "calculateMatchWitnessHash(address[],uint256[])", "a0b9e8d5": "getRaisedAmountOnEther()", "a0b9f0e1": "checkPause()", +"a0ba07a4": "ChallengeAgon(uint64,address,uint64,address)", +"a0bab407": "we_withdraw(uint256)", "a0bb233c": "changeFeeAndCheatWarrant(uint256,uint256)", +"a0bb2b54": "checkToken(uint256)", "a0bb7508": "_addSig(bytes32,address)", +"a0bb7f6c": "calculateCollateral(address,uint256)", "a0bc572b": "benefactor(uint256)", +"a0bcb8dc": "tokenSaleDuration()", "a0bcfc7f": "setBaseUri(string)", "a0bd1ec1": "hodlerTransfer(address,uint256)", "a0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", @@ -91939,178 +168315,334 @@ "a0bf0539": "_checkThreshold()", "a0bf775f": "canTransferBefore(address)", "a0c01e58": "divForPrice()", +"a0c059f2": "LockAddress(address,uint256)", "a0c07002": "ArcBlockToken()", +"a0c0e87b": "globalTokenGenerationRate()", +"a0c13196": "_titanETHV2Pair()", +"a0c15d33": "withdrawForDividend(uint256)", "a0c16fb6": "HuobiPoolToken()", "a0c1ca34": "migrateIn(address,uint256)", "a0c1e119": "unhaltFundraising()", +"a0c1f15e": "aToken()", +"a0c2e3f3": "minusOne(uint256)", +"a0c32bce": "getIdFromAddress(address)", "a0c32df7": "TRMToken(address,string,string,uint256,uint256)", "a0c354ea": "getSumAmountOfOpenDeals()", "a0c3bc68": "setOverflowBounds(uint256,uint256)", +"a0c3c9e7": "addBlocked(address)", +"a0c3eb0e": "setMaxXEthWad(uint256)", +"a0c40090": "AdminUnlockBuying()", "a0c42ed1": "getPOOL_edit_12()", +"a0c54078": "prefixURI()", "a0c567a2": "blackListActive()", "a0c57eb4": "checkCrowdsaleState()", +"a0c5c83b": "NextInLine()", "a0c642bd": "multisendFrom(address,address,address[],uint256[])", +"a0c646ad": "generateNewSecurityToken(string,string,uint8,address[],bytes32[],address,uint256,address[])", "a0c66283": "ZEROCoin()", "a0c66b43": "maxActiveCastle()", "a0c6e65e": "getResourceBalance(uint16,address)", "a0c73e7c": "HDAToken(uint256,string,string)", +"a0c795ea": "get_signature_hash_from_notary(uint256,address[],uint32[],address[],uint64[],uint64)", +"a0c7ad5b": "externalPayableFunc(uint256)", +"a0c7f71c": "claimable(uint256,address)", "a0c86718": "assetOwnersIndexes()", "a0c8ad10": "removeAuthorizedExternal(address,address)", "a0c8c156": "emptyCart()", "a0c8e0ff": "testCanSendEthToContractWhenCrowdsaleInProgress()", +"a0c90e2f": "insufficientText()", "a0c95e24": "disableBuyingTime()", "a0c96e43": "getCommissionTarget()", "a0c97bce": "paySeller()", "a0c99c51": "paymentInfo(address,string)", +"a0c9f93b": "sub(int128,int128)", "a0ca0a57": "backlogLength()", +"a0ca443a": "hunters(address,uint256)", +"a0ca868e": "minerFee()", +"a0cac470": "daiBuy(uint256)", +"a0cc6a68": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH()", +"a0ccbd67": "EventNewOwner(address)", "a0cce3d2": "getAssetIdCreator(uint256)", "a0cde1f0": "finishCrowdCoin()", "a0ce4ff8": "priya()", "a0ce8a0e": "SingleSourceAuthority()", "a0cecb3b": "findOutInterestByBank(uint256,uint256,uint256)", "a0cf01d4": "MoneroGold()", +"a0cf0aea": "NATIVE()", "a0cf17da": "amountFunded(bytes32,string,address)", +"a0cf50cb": "getBidOwners()", +"a0cf7451": "liquidationDelay()", "a0cf8857": "setTransferFeeAbs(uint256)", +"a0cfb2d9": "setTxLimit(uint8)", "a0cfbc1b": "getDeploytimeBlocktimeBlocknumber()", "a0cfc196": "getNumWineryOperation(bytes32)", +"a0d03526": "hasRegistered(address)", "a0d045bc": "AppleToken()", "a0d0b13d": "addBook(string,string,string,string)", "a0d0be4f": "calculateValue(uint256,uint8)", "a0d0ee3b": "buildTokenContract()", +"a0d10c9a": "getEntriesLength()", "a0d121a9": "addPolicy(uint256,uint256)", +"a0d16cad": "isValidatorOrPending(address)", +"a0d18e3d": "syncPoolRewards(bytes32,uint256,uint256)", "a0d1de29": "sendSeedAndHash(bytes32,bytes32)", "a0d1f9e9": "serviceIncreaseBalance(address,uint256)", +"a0d229d8": "investmentLimitAggregate()", +"a0d26cb2": "addOptions(uint256)", +"a0d2d57e": "_preSoldierToken()", "a0d3253f": "spawn(uint32,address)", +"a0d33ce0": "validateOwnerName(string)", +"a0d3683f": "lastMigrateDayFrom2Day(uint256)", +"a0d36f71": "adminTokenTransfer()", "a0d39949": "_rewardUnnapprovers(address)", +"a0d4081d": "_encode_sol_bytes21(bytes21,uint256,bytes)", +"a0d451af": "upgradeContract(address[],uint256[])", "a0d46c87": "validateRequestParams(address[3],address,uint256[12],uint256,uint256)", "a0d578f4": "isServerEnable(string)", +"a0d5bafc": "changeManagementFeeWallet(address)", "a0d605c6": "addCertificationDocumentInternal(address,bytes32)", "a0d63f7e": "setDistributionMinimum(uint16)", +"a0d6ff9a": "unstakeAll(address)", +"a0d7554c": "getPickle()", +"a0d7afb7": "diff()", "a0d7bb1b": "addReserve(address,bool)", "a0d80e65": "internalNoter(uint256,uint256)", "a0d81b21": "ConsentFile(address)", +"a0d824cc": "getLiquidationManagerAddr()", "a0d87fc2": "burnFromOwner(address,uint256)", "a0d8848c": "getTicketStartPrice()", "a0d8ad85": "_updatePayment(uint256,address,uint256)", "a0d8b4bd": "changePresaleDiscountPercentage(uint8)", "a0d8b4e9": "ownerMintRate()", "a0d8e231": "SmartpoolVersion()", +"a0d93044": "BlockPayouts()", "a0d9669c": "test_invalidAddressNotZero()", +"a0d9691e": "fundraisingStarted()", "a0da3236": "ActionMining(address,uint16)", "a0da7d2e": "addressLocked(address)", +"a0daeed2": "getPriorities()", "a0db0a22": "right4(uint256)", +"a0db2146": "userMonstersCount(address)", "a0db844f": "F2UPAY()", +"a0db86f9": "setReciever(address)", "a0dbd8d6": "startBlockNumber_()", "a0dbde9d": "logBase2(uint256,uint256,uint256)", +"a0dc58ff": "callbackProofs(bytes32)", "a0dc6b74": "emergencyPay()", "a0dce445": "nothingLib()", +"a0dcec7d": "setDiffDecimal(uint256)", +"a0dcf9da": "partyGoal()", +"a0dd0c04": "agree(string,string)", "a0dd678b": "VCFToken()", "a0ddb418": "currentKey()", "a0dde02a": "AftabCoin()", +"a0de0e53": "UnitedCardsForSale(uint256)", +"a0de966e": "updateCalculatorPercentage(address,uint256)", "a0df9538": "walletOwnerAddress()", +"a0dfbaf9": "numberOfPoints(address)", "a0dfc61f": "DICE_LOWER()", +"a0e00488": "Log1(bytes,bytes32)", "a0e06c8a": "weekPotHighscore()", +"a0e0b140": "mintbase()", "a0e0c317": "getTradeOfferRecipient(uint256)", +"a0e0da97": "changeYzyAddress(address)", +"a0e0f3db": "userStakingBalancesLength(address)", "a0e1001e": "IiinoCoin(string,string,uint8,uint256,int256,uint256)", "a0e16fed": "getFinalizationTime()", "a0e1f42c": "addPurchaser(address)", +"a0e20c3a": "allBrokersBasePercent(bytes32)", "a0e23ebd": "openAt()", "a0e2abf7": "getFirstActiveGamble()", +"a0e300a6": "logDynastyValueChange(uint256,uint256)", +"a0e3be5b": "LP_LOCKED_PERIOD_WEEKS()", +"a0e3e4a0": "getNullCard(uint256)", +"a0e47bf6": "uniRouter()", "a0e4d7d4": "getManifestIdsByName(address,bytes32)", +"a0e4dadd": "enableHalted()", +"a0e526ab": "crowdsaleRates(uint256)", "a0e5588a": "paymentAction(uint256,address,uint256)", +"a0e56d45": "calculateWeight(address,address)", +"a0e5739b": "onDistribute(address,uint256,uint256,uint256,uint256)", "a0e5bb69": "setPI_edit_17(string)", +"a0e5cf8e": "paymentAddresses(address,uint256)", "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()", +"a0e7cfe0": "setTGE()", +"a0e81a28": "Claim(address,address,uint256,uint256,uint256,uint256,bytes)", "a0e8b6b0": "the_address_for_option_A()", "a0e8d21f": "join(address,string,string,uint256)", +"a0e8d7ca": "pegIn(uint256,address,string)", "a0e8ef3d": "SetUSDPerETH_byContract(uint256)", +"a0e8fabb": "user_ethdeposit_amount(address)", +"a0e984d8": "buyVotingRights()", +"a0e9bf34": "feePercentages()", "a0ea0ef9": "constructionStart()", +"a0ea658d": "RequireThatA0(bytes32,address)", "a0ea83dd": "SetSummRew(uint256)", "a0eaa5dd": "lastTokenIsTransferableNumber(address)", "a0eb5dd1": "AIRDROP_TOKENS()", +"a0eb8ee5": "h(int256,int256)", +"a0eb947a": "registerReceiversSAFE(address[],uint256[])", +"a0eba259": "pick(address)", +"a0eba8bf": "approve_778(address,uint256)", +"a0ebda14": "_strongHandPercentile()", "a0ec4e09": "getUltimateOutcomes(bytes32[])", +"a0ec5746": "setV1(address)", "a0ec7f89": "transferPresaleTokens()", +"a0eca55f": "repaymentUpdate(uint256)", +"a0ecb231": "changeBancorPoolParser(address)", +"a0ecc842": "hnyContributed(address)", +"a0ecdb3f": "mint(address,address,bytes32,uint256)", +"a0ed3ac5": "getTotalLockedTokens()", "a0ed4cff": "MiniMeToken(address,address,uint256,string,uint8,string,bool)", "a0ed6707": "EtopayNetwork()", "a0eda9f2": "_transferFee(address,uint256,string)", +"a0edb6b3": "getIsExcluded(address)", +"a0edbcbb": "defaultPoolId()", "a0edc204": "noOfPhases()", "a0edc671": "USDtoHAV(uint256)", "a0edcd7a": "burnPercentage100m()", +"a0edcef5": "PROTOCOL_FEE_MULTIPLIER()", +"a0edf364": "LpTokenMaxCount()", "a0ee153e": "isOwnerOrApproved(uint256,address)", +"a0ee76b6": "performanceReward()", +"a0eeb39a": "VELO()", +"a0ef1aa9": "approve_271(address,uint256)", "a0ef8647": "BlueToken()", "a0ef91df": "withdrawEth()", "a0efe255": "m_categoriesCount()", +"a0f01582": "countPz(uint256,uint256)", "a0f029fc": "ContractorInterface(address,address,address)", "a0f04c38": "getKittyPower(uint256)", "a0f0e95f": "DDJBTC()", +"a0f109c5": "releaseDeposit(uint256)", "a0f15b87": "registryICAP()", "a0f1665b": "PriceSet(uint256,uint256)", +"a0f1ba10": "setPercentToLock(uint256)", "a0f1ba62": "isOpenDistributionSetup()", +"a0f1f880": "secondsBetweenLastRounds()", "a0f24ea7": "getTotalTokens(uint256,uint256)", +"a0f2b485": "rlpEncodeNonce(uint32)", +"a0f364e4": "feelessAddr(address)", +"a0f367a6": "setRateNow()", +"a0f3dea1": "BurnAdminAmount(address,uint256)", +"a0f3f113": "SOGNO5()", +"a0f40996": "getlatestFund()", +"a0f45b69": "ownership(uint256)", "a0f4a9a9": "Challenge()", "a0f4d3df": "getRandomForContract(uint256,uint256)", +"a0f51fce": "emergencyOn()", "a0f52da0": "startMigration(address)", "a0f561ca": "ExtractDepositTime(address)", +"a0f5cb3f": "setSotaExchangeContract(address)", +"a0f60ec2": "savingsManager()", "a0f61310": "FakeRelay(bytes)", "a0f72985": "PassToken()", "a0f78572": "Leaderboard()", "a0f7bbcd": "sendTokensToAdvisors(address)", +"a0f7d5b4": "timeRelease()", "a0f82817": "Max()", "a0f8be8c": "startOf(uint8)", +"a0f93a3c": "daysSinceInitialDeposit(address)", +"a0f96dea": "addCards(uint256[],uint256[])", +"a0f99203": "setAllocPoint(uint256,uint256,bool)", +"a0f9cdd2": "engine1currUserID()", "a0fa0fb4": "ConstructorTest(uint256,uint256)", +"a0fa85ed": "bearsTotal(uint256)", "a0fa930a": "Ethercoin()", "a0faf6a1": "getPortion(uint256,uint256,address)", "a0fb1497": "deleteDocument(uint256)", +"a0fb439c": "ReconVaultCurrencyInsurancestock()", +"a0fb4722": "getEffectiveDelegatedValuesByValidator(uint256)", +"a0fb7e17": "initializeOwnables(address,address)", "a0fb7f57": "GMET()", +"a0fb996f": "isValid(uint16)", "a0fc4994": "setX(int256)", "a0fcd161": "depositToken(uint256,bytes32,uint256)", +"a0fd40c9": "add(int256,uint256)", +"a0fdc8a7": "getValueForBalancerPool(address,address,uint256)", "a0fe6202": "SHA256(string)", +"a0fe97e3": "reenter()", +"a0febfa1": "setUpgrade(address,address)", "a0ff1705": "depositTokenFunction(address,uint256,address)", +"a0ffb499": "dealerSets(uint256,uint256)", "a0ffe7bb": "registerInNewMarketplace()", "a0fffd5f": "rand(uint32,uint256)", "a1007e68": "TokenAmountToPay()", +"a100c518": "callProxyUser_getUser(address)", +"a10103f3": "OBTC()", +"a1012233": "changeWallet3(address)", "a10132ad": "callbackGas()", "a1013abb": "TOKENS_DISTRIBUTED()", +"a10145be": "requestBasedPrice()", "a1017649": "updateWalletLock()", "a101c2d3": "time_out()", +"a101cc06": "setMinBiddingTime(uint256)", "a101f7cd": "bountyFee()", +"a1021ad9": "pendingBELT(uint256,address)", "a1022294": "Guess(string)", +"a1026cbe": "Completed(address)", +"a1029038": "OraclizeResult(string,uint256,uint256)", "a1029aff": "findTile(uint16,uint16,uint16)", "a102e8a5": "addMeterpoint(int256,address,int256)", +"a102ed86": "createBitcoinAddressPrefixTask(bytes,uint256,uint256,address)", +"a10341a2": "CardsTraded(address,uint256,address,uint256[],uint256[],uint256[],uint256[])", "a103983c": "BitShopperToken()", "a1049c06": "Zolox()", "a104dcd4": "changeUpgradeAgent(address)", "a104e5e1": "recordNewOwner(uint256,address)", +"a1053d51": "endthirdround()", +"a1054449": "sratios(uint256)", "a1057852": "addToken(address,uint256,string,string,string,string)", "a106320a": "icoFinalized()", "a1063d20": "addIntermediateAddress(address)", "a106832b": "disableInitialAmbassadorStage()", +"a106da5e": "Collector()", "a106dbc8": "participantsFor1stSale(address)", +"a106ed6f": "withdrawKiboTokens()", "a106f0bf": "bonusAmtThreshold()", "a107994e": "test_validProxyOwnershipTransfer()", +"a107bfdf": "LogNewOrderIdGenerated(address,bytes32,uint256)", +"a107cb97": "descriptionIdx()", "a107ceb6": "affiliateUtility()", +"a1081104": "revertMonitor()", +"a1083731": "SelectWinner30(address)", "a10874d9": "SquirrelGims()", "a1088571": "CEO()", "a10889fa": "setVersion(uint32,uint32,uint32,string,string)", "a10954fe": "reserveBalance()", +"a10959d2": "sake()", +"a1096be0": "f(uint16,int16,address,bytes3,bool)", +"a1099bf2": "getPrize(uint256)", "a109a089": "addWalletAddress(address)", "a109b8bd": "feesCal(address,uint256)", +"a109d214": "getSmartToken(uint256)", +"a10a50ca": "getReceivedRequest()", "a10a7782": "defaultReputationReward()", +"a10adb17": "getAPYSwap(uint256)", "a10b10f5": "setFriendsFingersWalletForCrowdsale(address,address)", "a10b3ffd": "ALLOC_PARTNER()", +"a10b8a99": "PaymentMade(uint256[2])", +"a10bb1bb": "bonusProvided()", "a10bee85": "_transferFromWithReference(address,address,uint256,string)", +"a10c048b": "orgFactoryContract()", "a10c0fd5": "ROLE_MULTIOWNER()", +"a10c26d6": "backeth()", "a10c44fb": "s18(bytes1)", "a10cda99": "isWhiteListed(address,address)", +"a10d0438": "realizedVolatilityHourly(address,uint256,address)", +"a10d0960": "depositToken(address,uint256,string)", "a10d4f56": "updateCaps(uint256[])", "a10d6a51": "officialTelegram()", "a10d80de": "quitBattle(uint256)", +"a10d9c9e": "isReseller(address)", "a10daf4b": "GroupMultiplier(uint256,uint256)", "a10e057c": "preIcoMinimumWei()", +"a10e1f11": "whenPay()", "a10e6d28": "arbitrationFeePerJuror()", "a10ec6e5": "initialize(address[4],address,uint256[12],uint256,bytes)", "a10edc55": "GeneralPurposeProfitSplitter()", @@ -92120,182 +168652,329 @@ "a10f43a3": "bountyReward()", "a10f5610": "authoriseAddress(address)", "a10fc32f": "setInstantTransfer(bool)", +"a10ffbed": "term()", "a110063a": "createGOP(address,string)", "a1103f37": "attrUUID(address,uint256)", +"a1107d30": "addrOfNestDAO()", +"a110b93f": "totalClaimedRewards(address)", "a110d350": "finalPot()", +"a111127d": "newCorrespondence(address[],string,string,string)", +"a1113694": "pendingErne(uint256,address)", "a1119bf2": "bountyFeeCount()", "a111b0da": "InternationalTourismCoin(uint256,string,uint8,string)", "a111bab9": "totalLockAmount()", +"a111fbae": "getPreTransferCount(uint256)", "a11223da": "airdropTokens(address[],uint256)", "a1130d04": "createTemplateAndAskQuestion(string,string,address,uint32,uint32,uint256)", "a1131e14": "withdrawSale3()", +"a113559c": "getLastSnapshotOf(address,address)", "a113bf2c": "ZITOKEN()", +"a114a5d2": "bake(address[],uint256,uint256)", "a114b5ae": "_createZodiac(uint256,uint256,uint256,uint256,address,uint256)", +"a11545b8": "CreateMultipleTokens(address,uint256[],uint256[],bytes)", "a1155286": "deleteOrg(string)", "a1155f5c": "buyBlockCDN()", "a1158c43": "commissionCheck(uint256[],uint256[],uint256[],uint256)", "a1159838": "removeFreeze(address)", "a115e38f": "VirtueToken()", +"a1164c4e": "TokensTransfer(address,address,uint256,bool)", "a11674b0": "divsOf(address)", "a1169d72": "_payChain(uint256,address,uint256)", "a11748fd": "ReceiveGBP(address,uint256)", "a1183d50": "FixedSupplyToken()", +"a118609a": "AddedToWhiteList(address,uint256,uint256)", "a1188e56": "getCurrentDifficulty()", +"a118a24f": "recycleCommunityFund(address)", +"a118b1d7": "RewardStake(address)", "a118babd": "withdrawPayment()", "a118ca27": "validateStep(uint256[],uint256[])", "a118f249": "addAccess(address)", "a1190a36": "withdrawOtherTokens(address)", +"a1194c8e": "become(address)", "a11976f6": "confirmTransactionAfterDisputeFee(uint256)", "a119a65a": "gettodayget()", +"a11a6644": "WithdrawPeriod()", +"a11aa1b4": "balancedWeights(uint256,uint256,uint256,uint256,uint256)", "a11aab78": "createGame(uint256[],uint256[],uint256,uint256)", "a11ab71a": "fundsToCommunity(uint256)", +"a11b3861": "getLeftTime24()", "a11bab06": "GChain(uint256,string,uint8,string)", +"a11c1c92": "set_new_MKR_TokenContractAddress(address)", "a11df9c7": "PlanetZeroToken()", "a11e1645": "registrationRights(address)", "a11e22d9": "toDate(uint256)", +"a11e6464": "syncAll()", "a11e7f5e": "get_iconiq_presale_open()", +"a11e8cd3": "unregisterBroker(address)", +"a11ec70a": "toggleProjectIsPaused(uint256)", "a11ed157": "setBirthFee(uint256)", "a11f8de4": "FomoToken()", +"a1200563": "tqTransferFrom(address,string,uint256)", "a1206d4e": "setUserContract(address)", "a1207708": "confirmDividends()", +"a1209e89": "setTokenFactory()", +"a120c14f": "dd()", +"a120fa14": "getRecentHundingBets()", "a120fdbd": "dayTokenAddress()", "a1210a69": "endIcoDate()", "a1211bc0": "finalizeCampaign()", +"a1215f13": "setPercentageFee(uint256)", "a121d8df": "testFailCreateWithParentSameItemId()", "a122e060": "rateForPhase3()", "a12301f5": "promethCount()", +"a12320de": "AllocateTokensForFounder(address,uint256,uint256)", "a1232723": "playerPrizes()", "a123422e": "_setContributor(address,uint256)", "a12396aa": "setName(uint256,bytes32)", "a123c33e": "owner(uint256)", +"a124055a": "approve_277(address,uint256)", "a12412f0": "CAT_PER_ETH_BASE_RATE()", "a12433fa": "getLastAttack(uint256)", +"a12438d7": "userRewardsPaid(address)", "a1243ad3": "mintPartners(uint256)", "a12498dd": "ownerEnablePayee(address)", +"a124ce9a": "exitETH(uint256,address,uint256)", +"a125c447": "addInvestmentToken(address)", "a125c824": "setDefaultTokenURI(string)", "a1264994": "setfounderAddress(address)", "a126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", "a126d601": "closePosition(uint256)", +"a127425f": "claimableTad(address)", +"a1277600": "purchaseTickets(uint256)", "a127cfb6": "LogRequestAccepted(address)", +"a127d74e": "publicFillBestOrderWithLimit(uint8,address,uint256,uint256,uint256,bytes32,uint256)", +"a128171b": "setAqueductDistributionLive(bool)", "a12842cc": "sellMyTokens(uint8)", +"a1284ebf": "updateBridgeContractAddress(address)", +"a128644d": "completeVerification()", +"a129124d": "unlockRecord(uint256)", "a1291f7f": "ownerTransfer(address,address,uint256)", +"a1296e8c": "createZKPNullVote(uint256,uint256,uint256[2])", "a1298368": "stringEqual(string,string)", +"a129c115": "token0Weight()", "a129cb94": "summPremineBounty()", "a129ecda": "SetdivForSellBack(uint256)", "a12a52dc": "allOwners()", "a12a6bb0": "KYC()", +"a12a7ff3": "bottle(uint256)", +"a12a9d00": "setBonusTierInfo(uint256,uint256,uint256,uint256,uint256)", +"a12ab770": "heap()", "a12c2564": "preEndTime()", "a12c7dd8": "presaleContribute(address,uint256)", "a12cad70": "getPayer(bytes32)", +"a12cc549": "creatorWheatCount(address)", +"a12cff49": "withdrawBnb(address,uint256)", +"a12d059d": "removeFeeAddress(address)", "a12d2de3": "withDrawToPoolOwnerFee(uint256)", "a12d7e2c": "WubCoin()", +"a12d8eb9": "burnTokensAmount(uint256)", +"a12d8fba": "setSwapingActive(bool)", "a12da89f": "Deviser()", +"a12db990": "mintLLCbatchWithDetails(address[])", +"a12df12e": "setSellerAddress(address)", +"a12e1db6": "_mergeArrayToUint80(uint256[5])", "a12e429c": "getDiscipleNum()", "a12e55d9": "rollIt()", +"a12e74a5": "GetBasicIncome(uint256,string,uint256,uint32)", "a12e9670": "setMaxETHContribution(uint256)", +"a12eb5a3": "ticket_holders(uint256)", "a12ee7ba": "changeMaintainer(address)", +"a12f4e5b": "addGaugeType(address,int128)", "a12f69e0": "divides(uint256,uint256)", +"a12f8058": "mintStakingAndFarmingYear1(uint256)", +"a12fe45d": "getYourMemosOnly(address)", +"a1303b95": "balanceOfWeight(address)", +"a1305aa5": "getTradingStatus()", "a1315b7e": "createPricing()", +"a1317e30": "vadilloAddress()", +"a1318e9e": "cardTidsLength(uint32)", +"a131adf5": "specialdeposit(uint256,uint256)", +"a13202e9": "getWhitelistLength()", "a132a785": "removeOwner(address,bool,bytes)", "a132aad1": "startPresale(uint256)", "a132ab82": "startAirdropTime()", "a132e336": "changeDeedPrice(uint256,uint256)", +"a13315fa": "reserveDetails(address[])", "a1338118": "increaseAllowance(address,uint64)", "a1344589": "vestedTo(address,address)", +"a1345f96": "fundIPO(uint256)", "a1347622": "t_Michail2()", "a1350c00": "migratePropertyOwnership(uint16[10])", "a13615a5": "desposeBear(address)", "a1365fda": "dev_streamsLength()", "a136aadc": "getMinerHashRate(uint256)", "a136c448": "updateTokenSellingPrice(uint256,uint256)", +"a13710b1": "batchTransfer(address[],uint256[],uint8,bytes32,bytes32)", +"a137a250": "updatedChainRequest(uint256,uint256)", +"a138ca3d": "burnDisputedProposalTokens(uint256)", +"a138e44e": "getClassProperty(bytes32)", "a1391297": "ETH_CLEAR()", +"a1399070": "getIsOpenWithdraw()", "a139dee2": "_deleteHybridization(uint256)", "a13a7cee": "createChildren(uint32,uint32)", +"a13a90d4": "buyUp(uint256)", +"a13aa185": "getMNW()", "a13ae1ee": "updateTokens(address,int256)", +"a13aed1f": "INSURANCE_POOL()", "a13c24c7": "BithubCommunityToken()", +"a13c5847": "USDC_MARKET()", "a13c58f7": "logCoinAgeRecord(address,address,uint256)", +"a13c755d": "nowReceiver()", +"a13ce896": "blacklistAt(uint256)", "a13d2733": "updatePatientHealthData(string,string,uint256)", +"a13d27a6": "ACTION_WITHDRAW_ETH()", "a13d3832": "deactivateTokenSwitch()", "a13d8ec4": "generateFinished()", +"a13d98a4": "bootstrappingAt()", "a13e3351": "transferRefPercents(uint256,address)", "a13f9e58": "RESERVATION_CAP()", +"a13ffaf0": "MessageEthernalized(uint256)", "a1405522": "MilkCow(address)", "a140a687": "localsService()", +"a140ae23": "mintToken(uint256,address)", "a140e4ee": "getDropNotices()", "a140e79c": "setMinimumDebatePeriod(uint256)", "a1410994": "intelligentmasschainToken()", +"a1419f58": "fundLossesGenerated()", +"a141add3": "team_lks()", "a141ce6a": "packageOfferInfo(address,uint256)", "a142040b": "Dil()", +"a1422f69": "LOCKED()", "a142d608": "escapeHatch(address)", +"a1434d34": "isOrbit()", +"a1439370": "ownermint(address,string,string,string,uint8,uint8,uint8)", +"a143c2d1": "spawnTwoValues(bytes32,string,uint8)", +"a144369b": "alphaDD(uint256)", +"a1444a4a": "_rewardPercentage()", "a1446287": "LKYToken(uint256,string,string)", +"a1448194": "safeMint(address,uint256)", "a1448fa7": "secondRewardPeriodPercent()", +"a1449449": "createCycleFinancials(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a144a3e0": "whitelistTransferFrom(address,address,uint256)", +"a144ca2b": "pidPerBlock()", "a1450c8a": "XDRAC()", +"a1451224": "getUserAddressByCode(string)", "a1454830": "getExpirationTime(bytes32)", "a145492a": "transferToPartnerAccount(address,uint256)", "a145636b": "artworkIndex(uint256)", "a14598e6": "changeBonusPercentage(uint256)", +"a146d826": "approve_46(address,uint256)", "a14779c9": "airdropWallet()", +"a147d932": "getMembersList()", "a1490581": "Deal(address,uint256)", "a1490d50": "getTradeHash(address,uint256,address,uint256,uint256)", +"a1495043": "estCashOut(uint256)", +"a14956a4": "lockedTokensForReleaseTime(address,uint256)", "a14977d5": "getCustomerTxCount(address)", "a1498f50": "check_result()", +"a14a304a": "rxp_minimum()", "a14a5648": "bonus02Start()", +"a14b38de": "_updateCloseAmounts(uint256,uint256,uint256)", "a14b877b": "refundEverybody()", +"a14b972b": "ambassadorsMaxPremine(address)", "a14c1c4f": "setSTO(address,uint256,uint256,uint8)", "a14c36ce": "dGetPool(uint8,uint8)", +"a14c6c9b": "lockRMPLOwner()", +"a14c87ca": "deleteMap(string)", "a14c9bed": "resetCurrentIdTo(uint256)", "a14cf394": "generateInitialCard(uint16)", "a14d191c": "PausePublic(bool)", +"a14d2414": "questioner(uint256)", "a14d427a": "transferBonusToken(address,uint256)", "a14d6517": "tweetIt(string)", +"a14d71b8": "setDailyROI(uint256)", "a14e0e4e": "runInit()", "a14e88fe": "firstTokenCap()", +"a14e8f06": "totalProcessingFee()", "a14ea9c0": "selfRegisterDIN()", "a14eaada": "tipCreator()", +"a14ee1fb": "bIntermediateToken()", +"a14f8d73": "dec_pre()", +"a14fbd88": "buyProducts(uint256,uint256,uint256,uint256)", "a14fc1e7": "aDropedThisWeek()", "a14ff857": "setBytes32(bytes32,bytes32,bytes32)", +"a150194b": "oracleDecimal()", +"a1506f6d": "checklistIdURI(uint8,string)", "a150be7a": "distributionPreIcoCount()", +"a150da2a": "_decreaseAllowance(address,address,uint256)", +"a1512a2b": "vault0()", +"a15143cd": "bidFloating(uint256)", +"a15148d1": "winnerCandidate()", "a152479c": "_computeNextCommissionerPrice(uint128)", "a152b23e": "UKW()", +"a1532fae": "directshotb()", "a15348fa": "TitleRegistry()", "a1536211": "AtacToken()", "a153b399": "ZeePinToken(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a153d965": "findCheckpoints(address,uint256)", +"a153e708": "lockedAmount(address)", "a15404b7": "createUnicornPrice()", +"a15418c7": "boost(uint256[5],address[3],bytes)", "a15454ba": "payTransactionFee(uint256)", +"a1545ef5": "getDays()", "a154aa36": "getTotalGoals()", "a154ce82": "disableContract(address)", +"a155285f": "pendingCycle()", +"a1552afc": "CRV_STABLE_DEBT_TOKEN()", +"a155380c": "approve(string,string,string,string,uint256)", +"a1555ba9": "spenderlimit(address,address)", +"a1559cf2": "updateMarketDapp(uint256,address)", +"a1559f69": "addProxy(uint256,uint256)", +"a155b1d4": "TRON_BEE_INDEX()", "a155beb8": "buyerDatabase(address,uint256)", +"a155c119": "setAuthorty(address,bool)", +"a155e204": "buy_token(address)", +"a155f3e1": "deflate(uint256)", +"a15683ed": "BusdToken()", +"a15691d6": "mousePerBlock()", "a156ce7b": "totalReimbursedWei()", +"a156efc7": "eligibleRecipients()", +"a1571902": "nextRelease()", +"a1575444": "estimateDistributedBatchData(uint80,uint256[])", "a157696b": "setWhitelistedOnly(bool)", +"a1578b6a": "approvedStrategies(address,address)", "a1578d53": "EventBuyTank(address,uint32,uint32)", "a157979c": "netOutcomeTokensSold(uint256)", +"a157a10d": "grant(bytes4,address)", "a1580f1a": "damage()", "a1581821": "transferWholeTokens(address,uint256)", +"a158657c": "withdrawEth(uint256,address)", "a158e377": "statusICO()", "a158e632": "lastLapId()", "a1594d21": "DividendClaimed(uint256,address,uint256)", +"a1599f1d": "vbswapToWbnbPair()", "a159c548": "amountOfTokensPoolC()", "a159c937": "getReferencePriceInfo(address,address)", "a15a2289": "GameNumber()", "a15a8613": "VoteCountPerProcess()", "a15a9a15": "Presenca()", +"a15ab08d": "create(address,string)", "a15afb48": "Replicator()", "a15b4d2d": "getAllCardByAddress(address,address)", "a15b53ad": "pre_minContribution()", "a15b9769": "addRandomClass(uint32)", "a15bb363": "createBoardHash(bytes32,address)", +"a15c0d06": "SignatureValidatorNotApprovedError(address,address)", +"a15c15af": "addToMinters(address)", "a15c1788": "checkForLog(string)", "a15cdbf7": "moveERC20Tokens(address,address,uint256)", "a15d59ce": "totalVestedBalance()", "a15db1c5": "_validateTokensAmount(uint256)", +"a15dff91": "inviteLower1(address)", "a15e3919": "getCrowdsaleUniqueBuyers(address,bytes32)", +"a15f30ac": "OPTIMAL_UTILIZATION_RATE()", +"a15f74a2": "cancelVesting(uint256)", +"a160176d": "recommend()", "a16085ce": "the_address_for_option_D()", "a16094d1": "burnMarketMakerApproval()", +"a160b95e": "depositCounts(uint256,address)", "a160bdf5": "expiration(bytes12)", +"a160c9dc": "foundersTeamMultisig()", +"a1612272": "calcClaimPie(address,address[])", "a1616429": "testBitOrSuccess()", "a1616c92": "hasFreelancerMinRatingsCount(address,address,uint256)", "a16249e2": "__min__(uint256,uint256)", +"a1627b6f": "ting()", "a162a71f": "addToOwnerlist(address)", "a162c04c": "buyTicketsFor(address)", "a1636db0": "stepThree(int256)", @@ -92303,55 +168982,112 @@ "a1639c6b": "customerConsents(address)", "a163a624": "Test()", "a163c090": "maxArtworks()", +"a1641402": "createLiquidation(address,address,address,address[],uint256)", "a164845a": "TheImmortalsPhoto(string,string,address,address)", "a1654379": "isAllowed(address,address)", +"a1657eeb": "changePerc(uint256)", "a1658fad": "canPerform(address,bytes32,uint256[])", "a1659822": "UncursedToken()", "a16618ae": "updateClientVersion()", "a1663c48": "MIN_PRE_FUNDING_GOAL()", "a1664ae2": "icoStartTimestampStage1()", +"a1668eac": "upwardCounter()", "a166b4b1": "addParticipant(address[])", +"a1671295": "createPool(address,address,uint24)", "a1672717": "getMinContributionInWei()", +"a1672a3c": "proposeSwap(address[],uint256[],bool[])", +"a1678066": "withdrawSKlay(uint256)", +"a1681770": "competitionCount()", "a1687d31": "isPlayer1sTurn()", "a168d873": "gameAddress()", +"a1692f04": "stakedContractStakeCommission(address,uint256)", "a1696076": "CCH_EDIT_3()", +"a169625f": "getStorageAt(address,uint256)", +"a169776e": "sortDis75()", "a1698315": "setExtraTokensWallet(address)", "a169ce09": "boom()", +"a16a038c": "mintSigned(address,uint256,uint256,bytes)", +"a16a09af": "getStakeData()", "a16a3179": "multiTransfer(address[],uint256)", +"a16a6622": "cashbox()", +"a16a87dc": "algorithmicInitialDiscount()", +"a16a9183": "distribute(address,address,uint256)", +"a16ae87f": "_blackTokenAddress()", +"a16b3d51": "lgeStarted()", +"a16b9341": "SaleStarted(uint256,uint256,uint8)", +"a16bd312": "claimRewardLockTime()", "a16bed3a": "changeTradeFee(uint256)", +"a16c1f15": "register(string,uint256,uint256,uint256)", "a16c6a73": "setClaim(uint256,uint256)", "a16c86f7": "withdrawRefund(address)", "a16cdbb1": "maxLockDuration()", +"a16d14e2": "totalFlipStaked()", +"a16d3598": "getlength()", +"a16d4fae": "EGGToken()", "a16d5960": "setPartner(address)", +"a16ddca7": "earnedtoken1(address)", "a16e5326": "CryptoSagaCorrectedHeroStats(address)", +"a16e68d6": "getCanSellUnit(address,uint256)", +"a16e6a51": "approveReferences(address,uint256[],address[],bool)", +"a16e998f": "setPF(string,string)", +"a16ecd8e": "MagicBlocksMap(address)", +"a16ed56f": "getChangelogAddress(bytes32)", "a16f3774": "getReservedTokens()", +"a16f460f": "writeUInt(uint256,bytes,uint256)", "a16fa142": "generate_token_for(address,uint256)", +"a16faa18": "setLockLiquidity()", "a1702265": "keyEmployeesAllocation()", "a17042cc": "getMsgValue()", +"a1707e7b": "nextEIN()", +"a1712ece": "mysend(address,uint256)", "a17177a1": "marketingTokensDistributed()", "a171b694": "RefundIssued(address,uint256)", +"a171ee6a": "presaleConnect()", "a172045d": "PUSH1()", +"a1725857": "UserRecord(uint256)", "a172db06": "portalAddress()", +"a172f981": "mintTimeInterval()", +"a1730a75": "sendEthWhiteList()", "a1731366": "withdraw_to_reward_contract()", +"a1732daf": "SanLengthReqChange(uint256,uint256)", +"a173b2f6": "fromUnderlying(uint256)", "a173ba2f": "deathData_v2()", +"a174033d": "allocateTokenByType(address,uint256,uint8)", +"a1741991": "tokenUSD()", "a1741d0f": "checkLiquidationValue(uint256)", "a1743410": "_refundExceededValue(uint256,uint256)", "a1744812": "setMaxCoordinate(uint16)", "a174a8e9": "addNewColor(string)", +"a174b96c": "nyaBnbLp()", "a174c4c6": "mintAmount5()", +"a175494b": "getUserProfit()", +"a1759d24": "tierToMemberIndexes(uint256,uint256)", +"a175b638": "setShouldReject(bool)", +"a175f990": "reactivatePlan(uint256)", +"a1761664": "whoDeposited()", +"a1762ace": "setSeedingDuration(uint256)", +"a1764595": "_weth()", "a176d7c9": "createAndTransfer(address,uint256)", "a176f6bc": "freezeTimeOf(address)", "a1775db5": "isContract(address,address)", "a1779a3d": "getFieldData(uint256)", +"a178179d": "requestChangeController(address,address,uint256)", +"a1782f28": "getTokenUSDRate(uint256)", "a1784139": "updateChildMinLogos(address,uint256)", "a1786803": "getCreationCost()", "a1786d1b": "changeMessage(uint256,string)", "a1787880": "createCustomToken(string,string,uint8)", +"a1789085": "depositAndBorrow(address,uint256,uint256)", +"a179390a": "SetPlayerBook(address)", +"a179dd93": "initLambertArray()", "a17a2685": "canUpdate()", "a17a9e66": "A(uint256)", "a17b229d": "total_fund()", +"a17b4291": "checkUserId(uint256,uint256,bool,address,uint256)", +"a17c6a36": "calDynamicProfits(address)", "a17ca853": "round(uint256,uint256)", "a17cc7eb": "storedData(address)", +"a17d256a": "counter2()", "a17d4228": "SingleApproval()", "a17d5f44": "initializeWhitelist(address)", "a17d713a": "stringToUint32(string)", @@ -92363,118 +169099,212 @@ "a17ecf9e": "kill(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", "a17eee56": "setGasRefundForClaimLoot(uint256)", "a17f0bbd": "ICO_BONUS_TIME_3()", +"a17f853b": "exactEthForTokens(uint256,uint256,address)", +"a17f9423": "__VaultERC20_init_unchained(address)", "a17fa5f2": "fillRandomCars(uint256[],uint256)", "a17feadb": "airdropAmounts(address[],uint256[])", "a1804e67": "buyWithBalance(uint256,uint256,uint256)", +"a1809b95": "setRewardDistributor(address)", +"a18157ff": "activationPrice()", "a181b040": "SlammerTime(address)", +"a181c397": "lastEmaCalculation()", +"a1822504": "fetchUserTokenDatas(uint256,uint256)", "a18232e8": "estimateTokenNumber(uint256)", "a1826a9a": "CMK()", "a182da60": "crowdSupply()", +"a1833417": "purchaseRoad(uint256,uint256,uint8)", "a1837d21": "ChangeBonus(uint256)", +"a1839b94": "gt(uint256,int256)", +"a183e1ee": "FameAcquired(uint256,address,uint256)", "a183e9a5": "ErrorMessage(string)", +"a1841223": "allMinedTokens(uint256)", "a18473c2": "RequestCurrencyContractInterface(address,address,address)", "a1848b61": "someMethod(uint256)", +"a184b005": "SystemChangePercentWeiMC(uint256,uint256)", "a1857f4a": "OTHERCRUISER_MAX_CARGO()", "a1865376": "changePrice(uint256[],uint256)", +"a18696b3": "reservedYouOfPriIEO()", "a186e120": "setTokenTransferState(bool)", "a18717a9": "addressToPass(address,bool)", +"a187aa69": "daiToFixWeth(uint256,uint256)", "a1883d26": "setTaxAddress(address)", "a1885d9b": "whitelistWeiRaised()", "a18861a3": "getHistoryCount()", +"a18876d1": "stopblocksMined()", "a1888c34": "setGamblingFee(uint256,uint256)", "a188b8fd": "accountAddressForSponseeAddress()", "a188fcb8": "orderDepth(bytes32)", +"a1891d87": "T_PAIR()", +"a1899289": "RegistryInstanceCreated(address,bytes32,address,address)", "a189a487": "status(uint8)", "a18a186b": "getCurrentOwner()", "a18a2092": "changeTokenHolder(address)", +"a18a6362": "littContentAccessModified(address,bytes32,uint256,bool)", "a18a7bfc": "setReferrer(address)", +"a18b6576": "slateSubmissionDeadline(uint256,address)", +"a18bca35": "My_Total_Insults()", "a18bf6e9": "addFundAccount(address)", "a18c1ab0": "burnToAddr()", "a18c751e": "set(bytes,bytes)", "a18ccc8a": "transferToWallet(uint256)", "a18cd06c": "distribute(address,address)", +"a18d3aed": "teamMintrate()", +"a18d4f66": "viewAutoConfig()", +"a18dc735": "char(uint256)", "a18dda19": "releasePayment(bytes32,address,uint256,address,uint256,uint256,address)", "a18e0ce4": "addBorrowingItem(address,uint256,uint256,address,bool,uint256,uint256)", "a18e133e": "registered_racers()", +"a18e2307": "depositAndMigrateEscrow(uint256,uint256[][])", "a18e2eb9": "left69(uint256)", +"a18e6ac9": "ethPiptSwap()", "a18ef171": "ALLN()", +"a18f07a0": "calculateReward(uint256,address)", "a18f43ef": "hasForfeitedBatch(address,uint8)", "a18f7567": "Thecap()", "a18f9b11": "drawWinners(uint256,uint256,uint256)", +"a18fa384": "INVESTMENT_RATIO_PUBLIC()", +"a18fe5fa": "questionHasBeenAsked(bytes32)", "a1900c22": "takeTokenProfits(address)", +"a19011a6": "addTakerOffer(address,address)", "a1903737": "addressOfTokenUsedAsReward5()", "a1903eab": "submit(address)", "a190500a": "tokenSecondPeriodPrice()", "a1907386": "debugLatestPurchaseCentsValue()", +"a19081a7": "myTokenURI(uint256)", +"a191c4de": "createContent(uint256,uint256)", "a1920586": "offer(uint256,uint256)", "a1920f36": "reservingStep()", "a192274d": "initializeBread(uint256,string)", "a192a425": "Founder1()", "a192fdba": "bonusEnds10()", "a1931ff9": "tryAnotherOne()", +"a193b116": "SLf_contract_address()", +"a193d396": "isMatchTypes(address,uint256)", +"a193e1c5": "dropERC20(address,uint256,address,address,address,address,address,address,address,address,address)", "a1943113": "devWithdrawn()", "a1945458": "getIdentityInfo()", +"a19555d9": "removeAuth(bytes32)", "a1960d80": "deferredKyc()", "a19638e6": "betsCountToUseFreeBet()", "a196593c": "findTenAmUtc(uint256)", "a1965dca": "move(uint8,bytes,uint8,bytes32,bytes32)", +"a1966da0": "UINT()", "a196981b": "withdrawCrowdsaleDragons()", "a196bea0": "isDirectDebitEnable()", +"a19716ce": "depositFees(uint256,uint8,uint8)", "a1972fc4": "updateDividends(address)", "a1975c38": "Token77G(address,address,address,uint256)", "a197c042": "checkCustomer(address)", +"a197d2bf": "checkRates()", "a197ec5d": "excessTokensBurnt()", +"a1983416": "pool_last_draw()", "a1988458": "readGlobalPurchasedToday()", "a198a418": "LKLZ()", "a1992419": "createCandidateOnElection(uint256,address,address,string)", +"a19924ab": "getSuggest()", +"a199a0ae": "getSpent(address,address)", +"a199b320": "balanceOfEthFreezed()", +"a19a7cb1": "wholsaler(address,string)", +"a19a87e2": "DFSetAddress()", +"a19af1ad": "_getPrice()", +"a19af89a": "EventRelease(address,uint64)", +"a19afeb4": "_closeLoan(address,uint256)", +"a19b0837": "viewUNIv2()", +"a19b0b1b": "getPurchased(address,uint256)", "a19b5493": "successed()", +"a19b54b1": "areaPrice(uint16[])", "a19b8766": "transferTEST(address,uint256)", "a19beba9": "addCompanion(address)", "a19c1f01": "burnRemainder(uint256)", "a19c406a": "newIdTankWeapon()", +"a19c77c7": "deleteLockUserInfos(address,uint256[])", "a19c9cd1": "getEthfromUSD()", "a19cb5ee": "addHash()", +"a19d1460": "accountTokens(address)", +"a19d1646": "mapPool_Asset(address)", +"a19d194d": "getTvlInfo(address[],address)", +"a19d9fa4": "wifeName()", "a19db682": "defaultFoundersRewardTime()", "a19e1d00": "bonusInPreSalePhase1()", "a19e29a9": "claimUnsold(uint256)", +"a19e2de6": "getWaitOrder(uint256)", +"a19e46d9": "lptTWAP(address)", +"a19e4f03": "U_paywithtoken(address)", "a19ed39d": "finalizeFunding()", +"a19ed783": "closeClaimsOraclise(uint256,uint256)", "a19ee7a3": "changeMinMakerBetFund(uint256)", +"a19f36d6": "usertokenMapping(address,uint256)", +"a19f6456": "lastReq()", "a19fab4c": "setWhitelisted(address,uint256)", +"a19fb434": "withdrawTokenBalance(address,address,uint256)", "a1a04486": "monthLength()", +"a1a0d62c": "withdrawLeft(uint256)", "a1a0ee90": "LogPolicyApplied(uint256,address,bytes32,uint256)", +"a1a11bf5": "RELAYERHUB_CONTRACT_ADDR()", "a1a17ec3": "rentSign(uint256)", "a1a1efe7": "addBallot(bytes32,bytes32,address)", +"a1a1faa2": "addVoteCandidate(address,string,string,string,bool,uint256)", "a1a200c5": "getRankList()", +"a1a20f26": "setDeFiatToken(address)", +"a1a2168f": "hydrogenPerBlock()", +"a1a31071": "ArtWorkChangeRequestMade(address,uint256,uint256,string,uint256,uint256)", "a1a3e4c7": "UserIDChanged(address,bytes32)", +"a1a41bdc": "DISCOUNT_PERIOD_START()", "a1a49a09": "unlockTimes(address,uint256)", +"a1a4d4a4": "eggPerBlock()", +"a1a50eaf": "setDepositFee(bool)", +"a1a539f5": "AMT_PER_SEC_UNCHANGED()", +"a1a555c8": "getThreeAthleteWin(uint256)", +"a1a586b3": "setDecisionPeriod(uint256)", "a1a59f52": "_renew()", +"a1a5ba78": "depositToBank()", "a1a5d118": "deployNetwork(address)", +"a1a64a1e": "withdrawLP()", +"a1a65c3b": "setPlatformFund(address)", "a1a66e56": "deductFunds(uint256)", +"a1a69845": "step3_confirmDeposit()", "a1a6d5fc": "transfer_(address,address,uint256)", "a1a71a20": "buyCommon(address,uint256,uint256)", "a1a71a83": "checkUsernameVerified(bytes32)", "a1a7405a": "destTokensSgt()", +"a1a740e9": "ajouteNom(string)", "a1a74aae": "removeMember(uint256)", "a1a79f64": "_winAmount(uint128,uint16,uint16,bool)", +"a1a7bc8b": "_warpNFT()", "a1a7e68b": "mintTreasuryTokens()", "a1a85253": "ReturnBack()", "a1a887b8": "isUserExists(address,address)", +"a1a9183a": "setdaoAddress(address)", +"a1a99d7a": "riskAssetOracleInstance()", +"a1a9c2c1": "withdrawReleaseTs(address,address)", +"a1aa4a29": "dfxPerBlock()", +"a1aa55c5": "FUNC_0BD7ABDE(uint256,uint256)", "a1aab33f": "weight()", +"a1aabda6": "reservedBalance()", "a1aad09d": "setBondPrice(uint256,uint256)", "a1ab46d0": "DepositReceived(uint256)", +"a1ac5950": "lastKebab(address)", "a1ac727f": "airdrop(address,address[],uint256)", "a1ac8c56": "balanceOfOwnerAndCreator(address,address)", "a1acd4b2": "AWD_SHARE()", "a1acf069": "ArtChainToken()", "a1ad2b99": "removeExchangeAccounts(address,address)", "a1ad54e6": "holdingToken()", +"a1ad644c": "ref(string)", "a1ad7cef": "tokenBurned()", +"a1ada97a": "top3TeamMostDistance()", "a1adbb25": "addCandidate(bytes32,bytes32)", "a1add510": "hasRelation(bytes32,bytes32,address)", +"a1ae1dfb": "getGroupState(uint256)", +"a1ae4752": "incomePerTokenStored()", +"a1ae8da0": "buyBack(address)", "a1aeb1c2": "paybackToOwner(address,uint256)", "a1aec173": "COLOR_SILVER()", +"a1af36eb": "PPDEX()", "a1af90ad": "funcalls()", "a1afaa19": "previligedUnLock(address,uint256)", +"a1b01371": "pauseProxy(address)", +"a1b07c83": "ENCORE_Migrator()", "a1b0f3a0": "userChallenge(uint256)", "a1b140b6": "getDistributionStatus()", "a1b162a8": "set_timeframes(uint256,uint256)", @@ -92484,6 +169314,7 @@ "a1b22154": "preemption()", "a1b22c19": "delExcluded(address)", "a1b235af": "popLanguage()", +"a1b24912": "STAGE_4_BONUS_RT()", "a1b258c1": "firstWeekBonus()", "a1b289dd": "TulipToken()", "a1b2acc1": "cancelApproval()", @@ -92491,53 +169322,88 @@ "a1b39c38": "_removeMarkets(uint256)", "a1b3ef4b": "flightDone()", "a1b40946": "getWordIndex(string)", +"a1b47233": "Settings(uint256,uint256,uint256,uint256)", +"a1b4d011": "cETH()", "a1b4dd2d": "DXBCToken(address)", "a1b4f57c": "joinBattle(string)", +"a1b53c6a": "createERC20Salary(string,address,address)", "a1b5b581": "ymtest(uint256)", "a1b608c9": "setMainPoolCutPercentage(uint256)", "a1b64c86": "TokenMock(string,address)", "a1b6b1b5": "updateUnlockData(address,address,uint256,bytes32)", "a1b6d4ae": "REPLACES()", +"a1b71883": "testMethodWithoutInputsWithoutOutputs()", "a1b77835": "getRefPercentsByIndex(uint256)", "a1b7887f": "logShareTokenBurned(address,address,uint256)", "a1b7ae62": "setdirectorName(string)", "a1b7ffb2": "_checkRequireERC20(address,uint256,bool,uint256)", "a1b86605": "getHourglassBalance()", +"a1b8683b": "matrixPrice(uint8)", "a1b8c40f": "lastDepositIndex()", "a1b94c0b": "timeOfWin()", +"a1b997de": "setDaiSpreadPerBlock(uint256)", "a1b9af31": "unlockBets()", +"a1b9bb53": "zombie()", "a1b9cb8f": "getTitulaire_Compte_6()", "a1b9e03f": "Unagold(address)", "a1ba0331": "CoinTroops()", +"a1ba3273": "autoStrat()", "a1ba444d": "createOrder(uint256,uint256,uint256)", +"a1ba4641": "mineUNIAll()", "a1ba7554": "fibokenUsedCount()", +"a1bab6fd": "updatePodeEnd(uint256)", +"a1bae97f": "getStoreWalletContract()", "a1bb6220": "halting()", "a1bb7828": "make_transfer(address,uint256,uint256,bytes32)", "a1bba310": "DonationDoubled(address,uint256)", "a1bc13ad": "forgeItems(uint256,uint256,address)", "a1bc76d1": "extendPRETDE(uint256)", "a1bc7a8f": "sha3_512()", +"a1bcc9b3": "log(address,uint256,address,bool)", +"a1bd17e6": "optionHashes(uint256)", +"a1bd2a66": "taxReceiveAddress()", "a1bd55c2": "TimeDecayingToken(address,uint256,string,uint8,string)", +"a1bd77c1": "AllPlayerInfo(address)", "a1bda122": "returnInt16(int16)", "a1bdd146": "setEndorsement(address,uint256,uint256)", "a1be79a0": "equipUp(uint256[6])", "a1bed0be": "GOAL()", +"a1bee4ee": "Scrap(address,uint256)", +"a1bef518": "getMajorInfo(uint256)", +"a1bf52eb": "expand_AMM_liquidity(uint256)", "a1bf8a9d": "endICO_w1()", "a1bffefa": "emitCancelled()", "a1c0539d": "scheduleCall(address,bytes4,bytes)", +"a1c0aafe": "order(string,bytes32,uint256,uint256)", +"a1c10704": "mintRequest(uint256)", +"a1c11a7b": "denormalizeRate(address,address,uint256)", +"a1c130d4": "userLastEpochIdHarvested()", +"a1c139c6": "hesAddress()", "a1c14350": "getUpdateMarketPhaseCalled()", "a1c1519a": "calcNewSkinAppearance(uint128,uint128)", "a1c15f56": "CipherPlay(address,address)", +"a1c17969": "undo(address,address)", +"a1c21607": "user2(address)", +"a1c25151": "setWeightLimits(uint128,uint128)", "a1c29db6": "MAX_FUNDING_AMOUNT()", +"a1c2bf4d": "withdrawFeesAndRewards(address,bytes32,uint256,uint256)", +"a1c2e79c": "registerSupplier(string,string,string)", "a1c2f644": "address4()", "a1c308d0": "ProspectorsGoldToken()", +"a1c4269b": "transferIn(address,address,uint256,bytes)", "a1c448f1": "kingdomCreationFeeWei()", "a1c4774b": "getCostToKick()", +"a1c4d1e7": "getLiquidations(address)", "a1c4db02": "eth_meth()", +"a1c51586": "getLoan(address,uint256)", "a1c51915": "getB()", +"a1c57ee6": "updateUserName(uint256,string)", +"a1c5b9ae": "newUserId_ap7()", "a1c68880": "final_share_price()", "a1c6d088": "airDropTokenDestroy()", +"a1c7962e": "C_NestToken()", "a1c80cea": "getUriCount(address)", +"a1c83752": "LIMIT5()", "a1c8ca7e": "removeClaim(address,bytes32)", "a1c90a11": "updatePlayersCoinByPurchase(address,uint256)", "a1c91040": "requestEvidence()", @@ -92546,10 +169412,15 @@ "a1c95ac2": "GSIToken(uint256,string,uint8,string,address)", "a1c9d235": "minimumElectionQuorum()", "a1ca00c0": "ELIXAddressSetter()", +"a1ca68bd": "test22()", "a1ca70f4": "totalDiv()", "a1ca8f8d": "LTRToken()", +"a1cb203b": "allowsIncrease(uint256,uint256,uint256)", "a1cb31b7": "_state()", +"a1cb742e": "loanWithdrawnAmount()", "a1cbae6c": "communityTokens2()", +"a1cc921e": "mainRemoveGovernor(address)", +"a1ccbb8a": "_setBridgeContract(address)", "a1ccc49c": "addDataPatternVoteRules(uint256,uint256,bytes,bytes,uint256[5])", "a1cd150d": "_calculateFee(uint256)", "a1ce5ba7": "getIncentiveNum()", @@ -92557,10 +169428,15 @@ "a1cea675": "cryptaurRewards()", "a1ceb253": "mintAdvisorsTokens(uint256)", "a1ceb359": "CryptoStrategiesIntelligence()", +"a1ceeb47": "THIRD_PHASE_CAP()", +"a1cfacde": "removeLiquidityETH(address,uint256,uint256,uint256)", +"a1cfb5ed": "setPaymentDate(uint256)", "a1d0846c": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a1d0a48f": "addCurrency(string)", "a1d0ab04": "allocateContributorsToken()", +"a1d0b34a": "setPower(uint256)", "a1d10d11": "StoneLog(uint256,uint256)", +"a1d122e8": "isWipeAllowed()", "a1d20653": "setVersion(bytes32,string)", "a1d25205": "lowEth()", "a1d27925": "personalContract()", @@ -92568,70 +169444,137 @@ "a1d3612c": "DKS()", "a1d36cb0": "checkClaimEntitlementofWallet(address,address)", "a1d48aa8": "PaymentChannel(address,address,uint256)", +"a1d49acf": "fetchBook(uint256)", +"a1d49ce5": "executeApprove(address,address,uint256)", "a1d4c7ce": "_emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", "a1d4c820": "Signum()", +"a1d50cb9": "changeIntervalUpdate(uint256)", +"a1d51469": "iterateBorrowInfo(address,uint256,uint256)", "a1d53160": "Capital()", +"a1d578fa": "redeemCardPool(uint256,uint256)", "a1d5b36e": "calculateTxHash()", +"a1d5ff4b": "requestMortgageId(address,uint256,uint256,uint256,address)", "a1d61b07": "dateTier4()", +"a1d69d64": "PhyreToken()", "a1d707a3": "setReleaseCar(uint256,bool)", +"a1d78958": "mintSend(address,string,string,uint256,string,address)", +"a1d79351": "setInputTokens(address[])", "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()", +"a1d9423d": "releaseableAmount()", +"a1d96790": "clearBADR()", "a1da2fb9": "retrieveDAOReward(bool)", "a1da32be": "Shopiblock()", "a1dab23e": "sellFloor()", "a1dabfb2": "OAIToken(address,address)", +"a1dac03d": "newSlotId_ap8()", +"a1dafa6e": "validarCandidato(string)", +"a1db5490": "claimGasDrop()", "a1db9782": "withdrawERC20(address,uint256)", "a1dc139d": "setSigner(address,address,bool)", +"a1dc14dc": "isOpenDeposit()", +"a1dc2726": "setInitialCummulativePrice()", +"a1dc8ce8": "getLegendaryResult(uint256)", "a1ddcd2d": "USDCX()", "a1dddf70": "registerEthHandle(bytes32,address)", +"a1ddfe8a": "addressesTypes(address)", +"a1de2079": "setPancakePool()", "a1dea137": "checkBlacklist(address,address)", +"a1df45d8": "pancakeBunnies()", +"a1df6179": "get_rand_small()", "a1df7eb3": "YBKToken(string,string,uint256,uint256,string)", "a1dfe545": "logShareTokenMinted(address,address,uint256)", +"a1e003e4": "getLeveragedSupplyTarget(uint256)", "a1e03f57": "ratePerWeiInSelfDrop()", "a1e04406": "preSale4Finished()", "a1e0c2c9": "winnerCounter()", +"a1e12fc3": "poolSlippageFeeVote(address,uint256)", "a1e15c33": "canuseOf(address)", +"a1e18e91": "pendingVice(uint256,address)", +"a1e1a4b2": "testUniswapV1(address,uint256,uint256,address)", +"a1e23bdd": "swap(address,address,uint256[],uint256[],uint256,uint256)", +"a1e271d3": "recordOutcomingFloat(address,bytes32,bytes32)", +"a1e2d922": "finishedGame(uint256)", "a1e3b16d": "Crypseum()", +"a1e3bbf0": "owner_order(address,uint256)", "a1e3c008": "mainSendTTC()", +"a1e4855d": "RefundERC20(address,address,address,uint256)", "a1e4cb30": "investorsTotalSupply()", "a1e4d3c2": "MembershipRoster()", "a1e4eaf1": "updateUserBalance(uint256,bool,uint256,uint256,uint256,address,address)", "a1e4f73d": "construct(bytes32,string,bytes32,address,uint128,uint256)", "a1e51a79": "emitDestruction(uint256)", +"a1e53d63": "forcedTradeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)", "a1e564b1": "CashOut()", "a1e59471": "HashBux()", "a1e66038": "getTrusteeTable()", +"a1e68c52": "getStudentInfo()", "a1e6a255": "nextUserId()", +"a1e6a452": "setApprovedMinterForAll(address,bool)", "a1e7e21c": "crowdsaleBurnAmount()", "a1e89aec": "saleCount()", "a1e8a780": "getAdPriceMultiple()", +"a1e915a2": "trinoToken()", +"a1e93482": "withdrawCollateral(bytes32,uint256)", "a1e93b63": "withdrawTipBalance(uint256,address,uint256)", "a1e95792": "eatUnicornsAlive(uint256)", +"a1e9a0f9": "getDeviceAddress(bytes32)", "a1ea00bc": "isUserTakerFeeEnabled(address,uint256)", +"a1eadb86": "sale_arbits_sold()", "a1eb0bae": "eliminarjugador(uint256)", +"a1eb31e8": "couponRedemptionPenalty(uint256,uint256)", "a1eb84b0": "transferOwnedOwnership(address,address)", +"a1ec2cf7": "TransferToName(address,string,uint256)", +"a1ec508a": "rewardRate1()", "a1ecb43c": "incrementLimitTeam()", "a1ee7855": "ATT()", "a1ee8c78": "issueToken()", +"a1ef4cbb": "log(uint256,bool,address,address)", "a1ef9b8f": "reallocate(address,address,address,uint256)", +"a1efa70b": "saveInternalDistributions()", +"a1efa90d": "distributeAXIA(address,uint256)", +"a1efac2d": "discountSafeMint(string)", +"a1efaf8d": "totalStakedBNB(address)", +"a1f0243c": "setLimitAndPrice(uint256,uint256)", +"a1f0406d": "gems(uint256)", +"a1f08675": "retriveMerchant(address)", +"a1f0e73d": "setLockAddress(address)", "a1f1aa66": "cancelVoteInternal(bytes32,address)", "a1f1de65": "getPrizeAmount(uint256)", "a1f24b3d": "getAssetDetails(uint256)", +"a1f34063": "sell(uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "a1f36a78": "EROSCOIN()", +"a1f38d4b": "getPlayerAddress(uint256,uint8)", +"a1f3a60c": "_toBuyBackPoolChargeAddress()", +"a1f3b52b": "firstQuarterPerBlock()", +"a1f419c9": "hashTradePayload(address,address,uint256,bytes,uint256,bytes)", "a1f43f40": "UNICToken()", +"a1f459ad": "addSupplier(bytes32,string)", "a1f4b9c8": "updatePlayerGen(address,uint256)", +"a1f51050": "doEtherStep(uint256)", +"a1f51841": "EtherAddressChanged(address,address)", "a1f54adf": "nextPremiumSale()", "a1f56b0a": "getRollOutput(uint256,uint8,uint8,uint256,address)", +"a1f5c4e0": "deleteInternalTeamContributionAddress(uint256)", +"a1f65b93": "SupporterTransferred(address,address)", +"a1f72475": "HardGoalReached(uint256)", +"a1f7a24e": "deadlineForStake()", +"a1f7bb20": "addDirect(address,uint128)", +"a1f7c292": "miniToOwner(uint256)", "a1f7f269": "_breedWith(uint256,uint256)", +"a1f828c1": "buyToken(uint256,uint256,uint256,uint256)", "a1f841d7": "unlockFund()", "a1f8adac": "investorList()", "a1f8ea3b": "numOfDeliveredEarlyPurchases()", "a1f902a7": "ComputeVestSpend(address)", "a1f91057": "updateLock(bool)", +"a1f9acec": "bxhPerBlock()", +"a1f9c6e8": "showDrugDetail(string)", +"a1fa2c65": "tendsPerHarvest()", "a1fa39c4": "getRaisedPercents(address)", "a1fa540d": "changeVotingBlocks(uint256,uint256,uint256,uint256,uint256)", "a1fa566e": "getChannelPartners(bytes32)", @@ -92640,51 +169583,97 @@ "a1fb03f2": "GooCrowdsale(uint256,uint256,uint256,uint256,address)", "a1fb1de9": "Message()", "a1fb34c1": "setCustomExtraData(bytes32,uint256,bytes32,bytes32)", +"a1fb5fd2": "eggsIndexes(uint256)", "a1fc21f4": "setStaffDisbursementAddress(address)", +"a1fc6352": "ownerWithdrawAllETH()", +"a1fca2b6": "four()", "a1fcc3bc": "stage2()", "a1fd49b7": "getMFBalance(address)", +"a1fd4b34": "ORACLE_PAYMENT()", +"a1fd6f40": "_assetId()", "a1fd92f5": "destinationMultisigWallet()", "a1feba42": "tokensLocked()", +"a1ff2f52": "eatCandy(uint256)", +"a1ff9493": "userRewardPerToken2Paid(address)", +"a1ff9bee": "getCollateralAssets()", "a1ffba04": "PPGT()", +"a1ffeffb": "forceSell(address,uint256)", +"a1fff9ad": "swapDNyanV1(uint256)", +"a2006f03": "pendingFtg(uint256,address)", +"a2008c4c": "appendRootAndVerifyProof(bytes32,bytes,bytes[],bytes32,uint32,uint32,bytes,bytes32[],bytes32[],bytes)", "a2008eb9": "acceptBidForStar(uint256,uint256)", "a200dc73": "getNextShareholder(address)", +"a2010956": "setContributions(uint256[],uint256[])", +"a2011b3f": "SETTER_ROLE()", "a201222d": "recalculate(address)", +"a2016b92": "make_symbolic_buffer(uint256)", "a201bf26": "settleETH(bytes32)", +"a201cc52": "getLimiterValue(uint256)", +"a201ccf6": "removeLiquidity(address,uint256)", "a201d102": "VOTING_END_TIME()", +"a201ddaf": "depositSB6()", "a201ed8b": "transferMultiple(address[],uint256[],uint256)", "a2023ff8": "setStartEndTimeTLP(uint256)", +"a2027204": "votingForCandidate(address)", +"a2028d97": "openPositionFeePercent()", "a202e476": "last_hash()", +"a2030b34": "totalEthOwed(address)", "a20348c4": "ToPeriod()", "a2035fef": "changeCustomTimeLock(string,uint256)", +"a203c9cd": "setSangroveProductId(int64)", +"a204452b": "setMaxPremiumRate(uint256)", "a20495d3": "Managed()", +"a204ccab": "hasPosition(address,uint256)", +"a2051a7b": "LogTokenSet(address,uint256)", +"a20623ce": "_blacklist(address)", "a20741dd": "getOperation(uint32)", +"a2076b6f": "minAllocation()", "a207b7fa": "SALE_FUND()", +"a2087b46": "rewtkn()", "a208b3b7": "findFigures(uint256)", +"a208d763": "_maximumSupply()", "a2093e1b": "migrateCatOwnersFromPreviousContract(uint256,uint256)", +"a2097307": "setMinTermLength(uint256)", "a209a29c": "getStringValue(bytes32)", +"a20a1ddb": "tryInsertorderId(uint64,address[],address,uint256,bytes)", +"a20a6beb": "userWithdrawFundsOnCycle(uint256)", "a20aede0": "phaseThreeRate()", +"a20b6e34": "orderBook(uint256)", "a20b77ad": "getDocHash(uint256)", "a20b8ab3": "ttlInvestAmount()", "a20bbb8b": "addBadge(uint24,int16,int16,uint24,uint256,string,string,string,uint256)", "a20bc7fe": "allownce(address,address)", +"a20bd49a": "bidPoolTakerWithdraw(uint32)", "a20c15cf": "_generateCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"a20c2cdd": "sumCarEarnings(address)", "a20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a20c8230": "inviteLength()", +"a20c9d3e": "tokenLedger(address)", "a20cc495": "bytesFunc(bytes,bytes)", "a20cd047": "moveTokenToAccount(address,uint256)", +"a20ce23c": "hashValues(bytes32,address,uint256)", "a20cf0e7": "setTokenNAVMicroUSD(uint256)", +"a20cfa75": "initialize(address[],uint256[],uint96[],address,address)", +"a20d2f73": "getCardId(address,uint256)", +"a20d426c": "initilizeVestingAndToken(address,uint256,uint256,uint256,uint256)", +"a20dd43b": "arbitration_bounties(bytes32)", "a20ddfb6": "getPartnerAddresses()", "a20def62": "checkExistsOwnedAccessory(uint64)", "a20e2525": "UnlockWei(uint256)", "a20efba3": "mintGrey(address,uint256)", "a20f46c6": "searchAddress(address)", "a20f4ee6": "pixelCost()", +"a20f5272": "tranche_S_virtual_unutilized(uint256,uint256)", +"a21076cf": "LoanPaidLateAtIndex(uint256,uint256)", "a210a676": "buyBunny(uint32)", "a210bf55": "updateJackpotFeePercentage(uint8)", "a210c6a9": "creatorPaid()", "a210f934": "rateEarlyStage2()", "a21174bb": "DefaultReverseResolver(address)", +"a2117fde": "viewUserLevelExpiredMatrix1(address,uint256)", "a2119377": "createToken(string,address)", "a2119a3a": "allocateForRefund()", +"a2124651": "getMarathonersByTeam(string)", "a2125232": "addItem(uint256,uint256)", "a213051c": "individualMinPurchaseWei()", "a21383cb": "permissibleTokenWithdrawal(uint256)", @@ -92693,96 +169682,176 @@ "a21515e3": "computed_shares_sold()", "a2152e32": "testOracle()", "a215457a": "transferBurnRole(address)", +"a2157227": "grantWithOracle(bytes4,address,address)", +"a2157d33": "UPLINE_MIN_DEPOSIT()", +"a215b42f": "getELAmountIn(uint256,uint256)", +"a215bcd2": "numWitnessesBeforeLimit()", "a215cd92": "setMinConversionRate(uint256)", "a2167ac4": "_donations()", +"a2169a14": "addIncome(address,uint256,uint256,uint256,address)", +"a216a072": "swapExactAmountOut(uint256,uint256)", "a216e0aa": "transferRobot(address,uint256)", +"a2172254": "CancelSell(address,uint256,uint256,uint256,uint256)", +"a2173df4": "getTwapPrice(bytes32,uint256)", "a2177ff0": "getKeyLength()", +"a2179296": "currentEpochBurnedCeiling()", +"a217d08e": "batchTransfer(uint256)", +"a217d5ce": "collateralOracle()", +"a217fddf": "DEFAULT_ADMIN_ROLE()", +"a218141b": "lastUpdateBlock()", "a2187de0": "available_tokens()", "a218d8ca": "clearAndDestoryAfterTwoWeeks()", "a2190b46": "calculateTakerFee(address,uint256)", "a21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", +"a219fdd6": "spendable(address)", "a21a32cb": "Securities_1()", "a21a65ae": "getIntArrayLength(bytes32)", +"a21cba53": "DEPOSIT_CONTRACT_BYTECODE()", "a21d5b9f": "utilityLockedDate()", "a21d942f": "checkResult()", "a21df9f0": "THIRTY_DAYS()", "a21e14fe": "reportInvalidDeposit(bytes32[])", +"a21e37a7": "minDailyPerUser()", "a21ea6b7": "CrabCoin()", "a21eea2a": "assertValidChallenger(address)", "a21eef95": "getBarrierNum(uint16)", "a21f0368": "History(uint256)", "a21f74b8": "fundGooResearch(uint256)", +"a21f7b85": "m_Liquid_Proof_Address()", "a21f836e": "pubCount()", "a21fbc92": "isAllowed()", "a2200278": "checkStatus(bytes32)", "a2200fbe": "AgreementUrlEn()", +"a2203db4": "disperseTokenSimple(address,address[3],uint256[3])", +"a2206833": "convertWETHtoETH(uint256)", +"a2209a14": "convertDaiToEth(uint256)", "a220a90e": "transferLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", "a220d6c4": "tCampaignStart()", "a2210352": "doRebuyTo(address)", "a22107b4": "createRandomZombie(int256)", +"a2217bc5": "toggleMigrations()", +"a221bebb": "approve_72(address,uint256)", +"a221e964": "LockupList(address)", +"a221ee49": "calcSpotPrice(uint256,uint256,uint256,uint256,uint256)", "a222a52f": "firstPostIcoContributorId()", +"a222b22b": "setDisableHarvest(bool)", "a222c98d": "declareWinnerForRaz(uint256,uint256)", "a22304cd": "_specialDistribution(address,uint256)", "a2233631": "withDrawal(address,address,uint256,bytes)", "a2233c4d": "BancorConverterFactory()", "a22352e2": "getDisputeFee(bytes32)", +"a22404a5": "unlockValue(uint256)", "a2240eb0": "Scope()", "a2248be0": "set_pre_kyc_bonus_numerator(uint256)", "a224a5b3": "push_key(uint256,uint256,uint256)", +"a224c198": "randomOracle()", "a224c745": "setWhitelistAddress(address)", +"a224cee7": "initialize(address[])", "a224dcb7": "withdrawClaim(uint256)", "a224f4ce": "earningsFromScore(address,address)", "a2252aaa": "referralProgramOwner()", "a225d0be": "setTokensByWaveIndex(uint256,uint256,uint256)", "a2261508": "tokenSpender()", "a2267a3a": "newProposal(uint256,uint256,string)", +"a2268a3b": "staticRewardPerSecond()", +"a226db3f": "AddressAdded(address)", +"a226ee9e": "SNAPSHOT_DURATION()", +"a22709e4": "CONTRACT_OBJECT_OWNERSHIP()", "a2271b15": "m_presaleFinished()", +"a227bde0": "decreaseAllowanceAvailable(address,uint256)", "a22838b9": "ExecuteTrade(uint256,address,address,uint256,uint256)", +"a228831a": "testMethodNonpayable()", +"a228b14f": "getLiquidationDelay()", +"a228bd31": "stringify(bytes32)", "a229090a": "dropTo(string)", "a22913b5": "addTeamAddress(address,uint256,uint256)", +"a2294748": "getEscapeHatch()", "a229b901": "transferApprover(address)", "a22a12de": "submitWithMetaHash(bytes32,bytes32)", "a22a31dd": "Forged(uint256)", +"a22a6428": "slash(uint256,uint256)", +"a22ac5a9": "getReservation(address,uint256)", +"a22b2c3e": "getPrivateValue(address,uint256)", "a22b35ce": "_burnFrom(address,uint256)", "a22b5a1c": "getFiles(bytes32)", +"a22b7a64": "Buy(uint64,uint256[],address,uint256,uint256)", "a22b97f5": "withdrawOnBehalf(address)", "a22ba787": "allocateETH(bool)", "a22bb384": "GBAChain(uint256,address)", "a22c81ec": "MIDGRADE_TYPE2()", +"a22ca2a6": "lt()", +"a22ca5ec": "authorizeSpender(address,address,uint256,uint8,bytes32,bytes32,bool)", "a22cb465": "setApprovalForAll(address,bool)", +"a22cba6e": "ratifiedPoolRefillApprovals(uint256)", "a22cd657": "getImpactValue(string,address)", "a22ce93d": "getActiveConsentTemplates()", +"a22d29e4": "lpClaimed(address)", +"a22d4832": "setPairAddress(address)", "a22d5a51": "deleteActivity(uint16)", +"a22da210": "BuyPutToClose(address,uint256,uint256,uint256,uint256)", +"a22dada6": "erc20TokenContracts(uint256)", +"a22dda18": "unlockAndRedeemAll()", "a22dff2c": "getMainBalance()", +"a22e407a": "getCurrentVariables()", +"a22e4403": "setkSeedAddress(address)", +"a22e4faa": "setArtistAddress(address)", +"a22e6ee3": "ethUsdPriceFeedAddress()", +"a22e7b76": "addAuthorization(address,address,address,address,uint256)", "a22e9009": "epm()", +"a22e9832": "timelockuser(address)", "a22ec476": "setSireStop(uint32)", "a22ed371": "mentalBalanceOf(address)", "a22f2b2e": "set_lock_list(address,address,uint256)", +"a22f72e9": "TotalCMD()", +"a22f8325": "theAnswer()", "a22fb98b": "updateBounty(string,uint256[])", +"a22fc692": "NUM_CATTRIBUTES()", "a2302af9": "queryWinningTeam(uint256)", "a2309ff8": "totalMinted()", "a230c524": "isMember(address)", +"a2313f6d": "fakeRewardsTotal()", +"a231666d": "RemovedFromBlacklist(address,uint256)", +"a2316798": "elementIndexToApproved(uint256)", +"a2317c9c": "distributeDYFReward(address,address,uint256)", "a231a84f": "ssp()", "a232155d": "getbetresultfirst(address)", +"a23225cc": "contractFeedBack()", "a2325259": "buyTokensWithUpdateRate(address,uint256)", "a23281e6": "numPositionsExpired()", "a2328e2e": "_FIVEHUNDRED()", "a23291b6": "QUIOToken()", "a232e64b": "createForum(string)", +"a2344974": "updateMarketId()", +"a2353fdc": "getReserveDecimals(address)", +"a2356bd2": "_routers(uint256)", +"a235872d": "multiplierCosts(uint256)", "a235ae52": "setWithoutFee(address,bool)", +"a235c93d": "EndRound(uint256,uint256,uint256,uint256)", "a2362aca": "HyunJaeToken()", +"a23649da": "YourPercent()", +"a2367305": "upgrade(address,bytes32)", "a2368e11": "setAirDrop(bool)", "a236a3d7": "configRoundKeyAdd()", +"a236ae56": "_freeWETHandWipeDAI(uint256,uint256)", +"a236d6d5": "answer(address,bytes32,uint64,uint64,uint64)", "a236e665": "buyNac(address,uint256)", "a236eb85": "subdivide(uint256,bool,bool,uint256,uint256,string,string)", "a236f388": "getGameWin(address,uint256)", +"a2372f2d": "WantToBr34pPath(uint256)", "a23744f0": "tryCreateCheckRecord(bytes)", "a2375d1e": "getC()", "a237f4d8": "developerFundAddress()", +"a2383106": "deposited(uint256,address)", +"a238b62d": "freezeOwnTokens(uint256,uint256)", "a2393922": "getTokenDealRange()", +"a23940d9": "withdrawLeaderBonus()", "a23951c8": "WidthdrawEarnings(uint256)", "a239756d": "setRandom(uint256,uint256)", +"a23989f0": "withdrawAny(address)", +"a239c58b": "removeAssetSettings(address)", "a239d260": "KinTokenSaleMock(address,uint256)", +"a239f5ee": "getChallengeAmountForTransferAmount(uint256)", +"a23a16be": "Longitud_Array_Baja()", "a23a373f": "DrawWinning(uint256,uint256)", "a23a49c1": "setEscrowTokensWallet(address)", "a23a5315": "SkyToken()", @@ -92792,7 +169861,10 @@ "a23bc6fe": "setTokenHolderAddress(address)", "a23bec7b": "constrcutor()", "a23bfd84": "weiPerCHF()", +"a23c133a": "releaStaticBonus()", "a23c3397": "getTokensPaidToGame(address)", +"a23c44b1": "getStaker(address)", +"a23c8509": "addTokenPool(address,uint8)", "a23c86c0": "allocateBulkTokens(address[],uint256[])", "a23d20f4": "blockedDivisionJurisdictions(bytes32)", "a23d3c35": "founderWallet()", @@ -92800,180 +169872,312 @@ "a23da130": "FundsRegistry(address[],uint256,address,address)", "a23e21f7": "change(uint8,bytes32,bytes32,bytes20)", "a23e3e89": "removeToken(address,uint256,uint256)", +"a23e52db": "JPBlocks(uint256)", "a23f41e2": "curs()", +"a24047e0": "expiringTickets(uint256)", +"a24057fc": "airDropTracker2_()", "a2407c7b": "verifyUpdate(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"a240a820": "lastFreeSpin(address)", +"a240a870": "makeBet(address,uint256,uint256,uint256,int256,uint8,uint8)", "a240d8ad": "changeWeeklyRate(bytes32,uint256)", "a241c089": "updateContract()", +"a2420238": "getUnrealizedPnl(address,address,uint8)", "a2420f73": "EthermiumTokenList(address,address,uint256,uint256)", +"a2422f57": "_getAndUpdateDelegatedByHolderToValidator(address,uint256,uint256)", "a24247f1": "getStartLockTime()", "a242519b": "Technology3G(address)", "a242f049": "ICOEndTime()", "a243b6c1": "setPrice(uint256,uint256[],uint256[])", "a243f512": "removeTrack(bytes32)", "a243f874": "takePayment()", +"a244316a": "completeTransition()", +"a2445a3e": "_lockAccount(address)", "a244e03d": "definirMessage(string)", "a244f365": "SbuyToken()", +"a24500e3": "sell(uint8)", +"a2450b72": "updateWinnersStatusForEpoch(address[],uint256[],uint256)", "a245b774": "lockedFundsForthefuture()", +"a245cfca": "promoTransfer(address,address,uint256)", +"a245fed5": "swapX(address,address,uint256,bool)", +"a2460d2e": "unsoldTokensDumpAddress()", "a24636c1": "InvalidState(bytes)", +"a246d2d4": "testUintArrayIntactIfConvertedBack()", "a246d83b": "relaySellerCannotCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", "a2471fa5": "RecoverableWallet(address)", "a2473cc1": "stakeOf(address,uint96)", "a2478c8d": "CT(uint256,string,string)", +"a247b679": "voteEvent(uint256)", "a247bc32": "payouts()", +"a24822f8": "changeWeth(address)", "a24835d1": "destroy(address,uint256)", +"a24838ac": "SellTokens(address,uint256,uint256)", +"a248b341": "bitBaseToken()", "a248da12": "Exam()", "a248de8f": "own(bytes32)", "a248df4f": "XFC()", +"a249029b": "setValidationMode(bool)", +"a2491462": "LogReferralInvestment(address,address,uint256)", "a249225e": "setAuthorizedUser(address,bool)", "a2495ace": "transferCongress(address)", "a2497b5c": "ETQuality()", "a24a21fa": "TheBillionCoin()", +"a24ac228": "getWinValidatorLength()", +"a24ac910": "burningMans(address)", +"a24ae00a": "COMPOUND_BORROW_PROXY()", +"a24b6246": "initialize(address,address,address,address,address,address,bytes32[2],address[2],address)", +"a24b73d5": "isIgnore(address)", "a24bcf46": "calculateTokenAmount(uint256)", "a24beff7": "closeBet(uint256)", +"a24bfc6e": "contractDeployer()", "a24c9737": "BUYER_CAP_HIGH_USD()", +"a24cff39": "executeBid()", "a24d23eb": "ProcessGame(uint256,uint256)", "a24d9658": "revokeConsent(string)", +"a24d9e51": "tknPricePerToken(address)", "a24dbe76": "StatusContribution()", "a24e20de": "withdraw_dao_fund(address,uint256)", +"a24e573d": "TransferDisabled()", "a24ea666": "withdrawedFundrasingPart()", "a24ea868": "PROOF_MULTISIG()", "a24ed4e5": "isLimitedWalletAddress(address)", "a24ed8aa": "newLeader()", "a24f1e82": "publiclyDistributedParts()", +"a24fab7d": "ViewDLRequestHeader(address,uint256)", +"a24fc0c0": "changeChefAddress(address)", "a25047a2": "hasEntry(address)", "a25057de": "_transferToICAP(bytes32,uint256)", +"a25088c6": "pausedWithdraw()", +"a250bc6b": "exchange(address,uint256,address)", "a250f43b": "verifiedWinnersLastCount()", +"a25103bf": "isPermit(address)", +"a251f0d4": "sushi_usdc_poolId()", "a25236fe": "requestVotingRights(uint256)", "a25277f3": "totalTokensCrowdSale()", "a25287c5": "allowChangePrice()", +"a252ab10": "setDebtOracle(address)", +"a252e485": "oneperc()", "a25367ff": "method2(bool)", "a253c06e": "_circulatingSupply()", +"a253ce9c": "setActivityAddress(address,uint8,bool)", "a25401ea": "PapyrusToken(address[],uint256[])", +"a25475ca": "StockTradeHistory(uint256,uint256,address,address,uint256,uint256,uint256)", +"a254be21": "playerRounds_(uint256,uint256,uint256)", "a254e662": "managementTokensDelivered()", "a2550108": "alt_buyCollectible(uint256,uint256)", "a2554c36": "walletForPresale()", "a2558ee2": "holderReward()", +"a255b6fe": "safeModulusShouldRevert()", "a255d68d": "ticketTransferees(address,uint256)", "a2564afc": "activatePermissionsBot(bytes32,bytes32)", "a2564f7c": "randomNumberGen(uint256,uint256)", +"a2565962": "blueprints(string,uint256)", +"a256749a": "wearablenft()", +"a2571347": "AssetCreated(address,uint256,uint256,uint256,uint256)", "a2578f1c": "armyCountBattlesWon(uint256)", +"a257ae27": "owners_rewards_pool()", "a258dafc": "getTopInfo(uint256)", +"a2591797": "stakeAmountAllFromSharePool()", "a2594b83": "greylistMany(address[])", "a2596576": "submitMint(int256,address,uint256)", "a2596ebe": "returnTokensFromHoldProgectAddress(uint256)", "a2597659": "changeMinAccEthers(uint256)", "a25983e5": "lockTokens(address,uint256,uint256)", "a25a34b1": "findPositionInMaxExpArrayTest(uint256)", +"a25a4e5c": "farmsAdded(address)", "a25b859d": "soldIdeaWeiIco()", "a25b9384": "isUserAllowedToTransfer(address)", "a25bc80c": "setPresaleState(uint8)", "a25be434": "notifyTranferToken(uint256,address,address)", "a25c1f3a": "presalePurchasesLoaded()", +"a25cf92d": "addArtItem(uint256,string,uint256,uint256,string)", +"a25d7c86": "decreaseAuthQuotas(address[],uint256[])", "a25d8973": "createSale2()", "a25e6898": "withdrawForeignTokens(address,address,uint256)", +"a25e84cd": "RESULT_EXECUTION_ALLOWANCE_PERIOD()", "a25eb5d9": "exchangeToken()", +"a25eb8bb": "RetrieveSuccess(uint256)", +"a25eed5e": "sdfgbrth4()", "a25f2d7e": "ReinvestmentWithdrawal(address,uint256)", "a25f55d4": "getBatchSize()", "a25f5e98": "doAdditionalMinting(address,uint256,int256)", +"a25f925d": "setStrategyDev(address)", "a25fc8dc": "adminAddCity(string,uint256,uint16)", "a25fdcec": "editPlanet(uint256,uint256,string,string)", +"a25ff3c0": "Sahi()", "a25ff42d": "HumanStandardToken2(uint256,string,uint8,string)", +"a2600b1c": "getUserPackets(address)", "a2605dc1": "EventLuckyNumberRequested(address,uint256,uint256,uint8)", "a2609759": "transferPreSignedMany(address,address[],uint256[],uint256,uint256,uint8,bytes32,bytes32)", "a260c045": "PROMETHEUS_SHIP_LIMIT()", "a260d8da": "makePresaleReady()", +"a26171e2": "minimumPoolStake()", "a26176b1": "testInequalityUint()", +"a261ffaf": "changeIssuePrice(uint256,uint256)", "a2624afe": "raiseJackpot()", "a262c092": "CollectChipBag()", "a26329f0": "finalizeRefunds()", "a2635401": "getCurrentGameId()", "a263601c": "find_contribution(address)", +"a2637900": "seedRate3()", "a26388bb": "testRevert()", +"a263c20e": "set(uint256,address,uint256,bool)", "a263c7ba": "changeBuyPrice(uint256)", "a263e793": "EdittedEntry(address,uint256)", +"a26439e3": "setup(string,string,address,address,address)", "a2644eb0": "withdrawFullTokenBalance(address)", "a264f18e": "CROWDSALE_ETH_IN_WEI_ACCEPTED_MIN()", "a2651d30": "purchaseAreaWithData(uint24[],uint24[],uint256[],string,string,uint256)", +"a265250c": "change_employee_leader(uint64,address,address)", "a2657960": "DolyToken3()", +"a26597fb": "PEGSMinted(address,address,uint256)", "a26636f3": "StpacToken()", "a266b0f2": "CoinStacks()", "a266c820": "changeARIWallet(address)", "a266f4da": "liquidateFund()", "a26730e1": "minRelease()", +"a26734dc": "totalSupplyByPartition(bytes32)", +"a2673503": "inflationTokenAddress()", +"a267526b": "strategyList(uint256)", "a26759cb": "addFunds()", "a267b5cf": "TokensTransfered(address,uint256)", +"a267c2c4": "tierInfo(uint256)", +"a2689c83": "_removeFromEffectiveDelegatedToValidator(uint256,uint256,uint256)", +"a268acf2": "pfDeep(address,uint256)", "a268b332": "testBitXorFailIndexOOB()", +"a268f4fe": "setNoFeeOnReceive(address)", "a269202f": "setHash(address,bytes32,address,bytes32,uint256)", +"a269533f": "depositNftsAndMintTokens(uint256[])", +"a2695860": "challengeIVTokens(uint256)", +"a26969bb": "rndSeedMax()", "a269e31f": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a26a1bc9": "clearLockUser(address,uint256)", +"a26a7a3d": "ItemCreated(uint256)", +"a26a88d3": "getVariableBorrowRateScaling()", "a26ac680": "BoBoToKen()", "a26b0e34": "dbVal(address,uint256)", "a26b2d76": "StepCoin()", +"a26b323b": "TSC()", +"a26b398e": "deletePairsToLiquidate()", "a26b8822": "tokensSoldExternal()", "a26bddb4": "LockedTokens(address)", +"a26be999": "receiveItem(uint256)", +"a26bfd39": "lastInvestorAddress()", "a26c7810": "mintToTeamAccounts()", +"a26cf59f": "balanceOfDeep(address)", "a26d494d": "getEscrow(address)", "a26d6de6": "LogWithdrawal(uint256)", "a26d7b94": "isCrowdSaleClosed()", +"a26dac09": "TransactionGasPriceError(bytes32,uint256,uint256)", "a26dbf26": "totalParticipants()", +"a26dd06f": "getColoredToken(uint256)", +"a26ddfd2": "DistributeFinished()", "a26e1186": "deposit(string)", "a26e7a6c": "_initOpinion(uint256,string)", +"a26ec6b1": "onDeposit(address,uint256,uint256,uint256,uint256)", "a26efcf8": "startGame(bytes,address,uint256,uint256[],bytes)", +"a26f4f71": "AETH_ADDRESS()", "a26f644c": "Transfer_of_authority_data(address)", "a270907c": "Btcandres()", "a270a737": "venue()", "a270cdf3": "getMarketInfo(bytes32)", +"a271ce54": "transfer_eth(address,bool)", "a2720018": "freelanceFillBonds(address)", "a2729a01": "updateDelegatorWithEarnings(address,uint256)", +"a272bdb6": "epochsFromLastIssuance()", "a273079a": "addLog(string,string)", "a2730c23": "EthToAFW(uint256)", "a273738c": "preICOEndTime()", +"a27393d4": "setDcv(uint256)", "a27411d8": "Earthpayment()", "a2741bdb": "MAX_CITIES()", "a2744a22": "addProduct(uint256,uint256,string,uint256)", +"a27456bb": "fundSubmission(address)", +"a27473c8": "removeAuthority(address,address)", +"a274c86b": "cherry()", +"a274f4ac": "checkLiquidation(address)", "a2752df9": "tokenSetTransferFeeProp(address,address,uint256)", +"a275b704": "setFees(address)", +"a275c3d4": "sigilIndexToAddress(uint16)", "a275ee1b": "getDeployTime()", +"a276207f": "getLoanInfo1(bytes32)", "a27678c9": "preDGZToken()", +"a276f359": "FINANCING()", "a277051f": "userAddr()", +"a2772193": "nodeUnregister(address)", +"a27771a6": "createPromoToon(uint256,address)", "a277b787": "CARXTOKEN()", "a277d5b1": "totalTokensPurchased()", "a277fa88": "setWhitelistOn()", +"a2780dbb": "pumpAddress()", +"a2787bd0": "getStep(bytes32,uint256)", "a2788b58": "ConflictResolutionManager(address)", "a278ce66": "backWindowAdjustmentRatio()", +"a278ddb8": "_isClaimStart()", "a278fdfb": "bidOnAuctionToBuy(uint256)", "a27966dd": "finishselfdrop()", "a2798f0a": "GetQueueNumber()", +"a2799e25": "add(uint256,address,uint256,uint256,uint256,uint256,uint256)", "a279c488": "addPending(address,uint256)", "a27a9e7f": "publicAmount()", +"a27aac81": "_decode_varint(uint256,bytes)", +"a27ae834": "unfreezeTimeOf(address)", "a27aebbc": "extendTime(uint256)", +"a27b6a92": "invalidLog()", "a27b9bf4": "matchcoin(uint256,string,string)", "a27c1756": "ECONOMY_BOOST()", +"a27c282e": "redeemTicket(address,uint256,uint256)", "a27c3a2d": "HngCoin(uint256,string,string)", "a27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", +"a27c7425": "timePointer()", "a27c794b": "insertDetails(string,uint256,uint256)", "a27c9af0": "gameDestroy()", +"a27cac0e": "getBurnStake(address,uint256)", +"a27cbe3c": "_newSetting()", +"a27cc4db": "metapoolWithdrawAndConvert3pool(uint256)", +"a27ccc39": "getOutputAmounts(address,address,uint256)", +"a27d669a": "removeAddress(address[])", "a27d8298": "leader_3()", "a27e0e67": "QLFY()", +"a27e7c8b": "futuresTrade(uint8[2],bytes32[4],uint256[11],address[2],bool,bytes32)", +"a27e8b6b": "simplBuy(address,address,uint256,uint256,address[],bytes,uint256[],uint256[],address,string,bool)", +"a27eccc1": "oneToken()", "a27ee939": "payto3()", +"a27f4635": "isReserved(bytes32,address)", +"a2800011": "initY()", +"a2800620": "mcd_join_dai()", +"a2801e16": "querySellBaseToken(uint256)", +"a28035c5": "lastTransactionOf(address)", +"a2807b6c": "ipfs(address,uint256)", "a280b3db": "preSaleBonus3Time()", "a280ce8f": "distributeWinnerPot()", +"a280cf78": "rateETHtoCHF()", "a280e67a": "leftnum()", "a28103f2": "batchTransfer2(address[],uint256[])", +"a28167ee": "OrdersCancelled(address,address,address,uint256)", +"a281695e": "mxxMintedFromContract()", +"a2830268": "ROUND_2_START_TIME()", "a283063c": "ChargeFee()", "a2832c97": "CappedDividendToken(uint256)", "a283c9c5": "getLastBidAmount()", "a283f907": "addOrderContract(address)", "a283fd00": "getPendingPaymentAmount(address)", +"a2841507": "_setMinimumStakeAmount(uint256)", "a284b6d3": "maxTicketAmount()", +"a284de02": "mintingFrozen()", "a28504b4": "isSwapDone()", "a28555d5": "setTAOFamilyAddress(address)", "a28576aa": "LogUserRegistered(address)", +"a285e321": "awardPersonalBounty(string,string,address,uint256)", "a285f19f": "signedTransfer(address,address,address,uint256,uint256,uint256,bytes,address)", "a2860050": "estimateReturns(address,uint256)", "a28641cc": "_buyTile(address,uint256,bytes)", "a2866a78": "HouseICO()", +"a286e9e1": "fetchhistory(address)", +"a287fdbd": "isFeatureAuthorisedInVersionManager(address,address)", "a28812c2": "existingIds()", "a288237c": "MeSum()", +"a28835b6": "adminWithdraw(address)", +"a28889e1": "disputeCount()", "a288b609": "releaseOf(address)", "a288fb1f": "setConfigUint(int256,bytes,uint256)", "a2890972": "synthesize(uint16[5])", @@ -92981,75 +170185,123 @@ "a289673b": "fipsChangeOwner(bytes20,address,address)", "a289d187": "depositDividend()", "a28a1564": "GBToken()", +"a28a42b3": "_delegate(address,address)", +"a28a4d86": "launchToken()", "a28b1ffd": "isLive(uint32,int256)", "a28bc99a": "TipSmartToken()", +"a28c5294": "frequencyControls()", "a28c644d": "setACLRole5999294130779334338(address)", "a28c76cc": "initialize(address,address,address,bytes32,uint256,uint256,uint256)", +"a28c80d9": "getReceiveCount(uint256)", +"a28cc189": "pendingChm(uint256,address)", "a28d0185": "removeComponent(uint256,uint256)", "a28d57d8": "btc()", "a28e68d3": "setOnceMintAmount(uint256)", +"a28ec720": "BuyThisProduct()", "a28ecf0b": "sendCryptedHand(bytes)", "a28f19f8": "AddDroneItem(address,uint256,uint256)", +"a28f8847": "transferStake(address,uint256)", +"a28fe02e": "ERC721_PROXY_ID()", "a29063c1": "LuckyNumberImp()", "a290f4f2": "logoPrice()", "a2919502": "getWalletLibrary()", "a29256bd": "Ethereum()", "a292f7d3": "paymentEscrow()", "a29337bd": "tokensToCompany()", +"a2934ffb": "a_b32()", "a293688b": "triggerFindWinner()", +"a293b0cd": "atoken()", "a293cba1": "LETSCOIN_Token()", "a293d1e8": "safeSub(uint256,uint256)", +"a2942ee5": "_ethClaim(address)", "a29445a9": "EnclavesDEXProxy(address,address,address,address,uint256,uint256,address,bytes32,bytes32)", "a294542f": "setPreSaleTLYperETH(uint256)", "a2948cdf": "futureDevelopment()", +"a2949a0a": "payoutLiquidityProvider(address,uint16[])", "a294ed7a": "voterAddressOf(uint256,uint256)", "a2950fd8": "Birth(address,uint256,uint256,uint256,uint256,uint256)", +"a2953793": "blotToOwner(uint256)", "a2958b76": "_transferOwnershipOfStorage(address)", "a29626c2": "createSingleSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", "a296b323": "setTransfer(bool)", "a296fed8": "HitToken(uint256,string,string)", +"a2971e32": "getParentReferrerPercentage()", "a297d43c": "openDistributionContract()", "a2987245": "getIntArrayIndex(bytes32,uint256)", "a298ba7c": "AntiqueCoin(address,uint256)", +"a29962b1": "trySub(uint256,uint256)", +"a2999879": "depositETHToWETH()", +"a2999beb": "initialize(address,address,address,uint16,uint16,uint256)", "a299b155": "setInitialTokensBalance()", +"a29a0d90": "gdao()", +"a29a6089": "setUniswapV2Pair(address)", "a29aaad6": "MatreXaCrowdsale(uint256,uint256[],uint256[],uint256,uint256,uint256,uint256)", +"a29b0355": "minBurnRate()", "a29b7fa0": "TklnAirdropToken()", +"a29ba8a7": "logo(uint256)", "a29c3574": "OrgonToken()", +"a29c3ae6": "getContractTETHBalance()", "a29cc6c8": "allocateVestedTokens(address,uint256,uint256)", "a29cd847": "changeEndPreSale(uint256)", "a29d4859": "drpuToken()", "a29d578a": "changeABaddress(string,address)", +"a29da161": "renewDebasePolicy(address)", "a29dbf46": "isAllowedToSend(address,address)", +"a29f0f27": "unsetAdministrator(address)", +"a29f481c": "setSaleToken(address)", "a29f9fb9": "onChainAddresses(bytes32)", +"a29fd439": "TFI_address()", +"a29fe7b8": "borrowRates(uint256)", "a29fe9b1": "UBOToken()", "a29ff28d": "receivedStaAmount()", "a2a02202": "smg(uint256)", "a2a0d0fc": "pre_endTime()", +"a2a0f297": "_rebasePaused()", +"a2a111ae": "beamSushiSwap(address,uint256,address,address[])", "a2a140f9": "MinInvestment()", "a2a1521a": "SignalPylon(address)", "a2a17629": "addrBroker()", +"a2a1c8bc": "proposePlatformWallet(address)", "a2a206c0": "ImperoITCoin()", "a2a23fb2": "getVersionsLength()", "a2a256b9": "AirDroppedTokens(uint256)", +"a2a25db0": "payoutCutAdmin()", +"a2a31722": "stakeTo(address,uint256)", +"a2a31911": "addPlan(address,uint256,uint256,uint256,uint256,uint256,bool,string)", +"a2a3a299": "councilVoterList(uint256,string)", +"a2a3abe6": "getMainContractList()", "a2a3d051": "B3(uint256,string,uint8,string)", +"a2a47fcf": "takeICOInvestmentsEtherCommission(address)", "a2a483ee": "setCS(address)", "a2a51ccd": "transferToCrowdsale(address,uint256)", "a2a5243c": "_calculateExcessBonus(uint256,uint256)", "a2a53c7c": "Exercise(uint256)", +"a2a6110d": "getAmountSentToVault(address,address)", +"a2a68e10": "setStopBots(bool)", "a2a6aa11": "TileClaimed(uint256,uint256,uint256,address)", +"a2a6bab6": "getVarStakingReward()", "a2a6ca27": "setMinPerTx(uint256)", +"a2a7124f": "transferMyMoney()", +"a2a71da5": "setMaximumIssuableAttributes(address,uint256)", "a2a746e1": "moveToInitiator(address,address,uint256)", "a2a8336f": "claimEtherSigner(uint256)", "a2a84a5d": "zonesSwarmAddress()", +"a2a87ffb": "tokenArt(uint256)", +"a2a8d62a": "getSpotPx()", "a2a8e279": "getTokensForEther2(uint256,uint256)", +"a2a90c1f": "historyManager(uint256)", +"a2a921f1": "recoverRewards(uint256,address)", +"a2a9504c": "f1(uint256,uint256[])", "a2a957bb": "setFee(uint256,uint256,uint256,uint256)", "a2a96799": "totalSuply()", "a2a9a6c1": "satellite()", "a2a9d1ef": "initReverseENS(address)", "a2aa0724": "enterLottey()", +"a2aa8ab8": "AmountToPay()", "a2aaa10e": "DigiCrowdSale()", "a2ab2686": "participatePresale()", "a2ac0a1a": "getUserAssetBalance(address)", +"a2ac3b63": "MAX_SWAP()", "a2ac5360": "calculateFounderCut(uint256)", "a2aca613": "buyLicense(address,address,string)", "a2ad16ed": "WinEToken()", @@ -93057,52 +170309,83 @@ "a2adaf15": "isOpened(uint256,uint256)", "a2ae72ec": "open_commitment(uint256)", "a2ae86ac": "setUntsqm(uint256)", +"a2aeb123": "_processInterestAndLoanPayment(uint256,uint256)", +"a2aef46d": "getAdapterBalances(address,address[])", +"a2af0d1f": "l2ChainID()", "a2af0e37": "assignPlayer(string,address)", "a2af5fe9": "content(string,string,string,uint256)", "a2b038b3": "addOffChainRaisedContribution(address,uint256,uint256)", "a2b0867d": "Admined(address)", +"a2b0950c": "changeContractAddr(string,address)", +"a2b09d9b": "addAssetTokenManager(address)", +"a2b0a66e": "viewwWrappedUNIv2()", "a2b0f9f6": "setMaxWeiForVerificationLevels(uint256,uint256,uint256)", "a2b144f0": "getGasForMcr()", +"a2b170b0": "getVotingDelay()", "a2b1da51": "inflat(uint256)", "a2b21d7d": "trainSpecial(uint256,uint256,uint256[2],uint256[2])", +"a2b25b91": "HolderAddressAdded(bytes32,address,uint256)", +"a2b3ec59": "idxEP2()", "a2b40d19": "changePrice(uint256)", "a2b424b1": "firstPresaleEnd()", "a2b475f3": "levelOneBonus(uint256)", +"a2b54e23": "_mintingCaps(address)", "a2b5591c": "oraclize_query(uint256,string,string[],uint256)", +"a2b58c74": "investmentId()", "a2b60f43": "EmployeeMigrated(address,address,uint256,uint256)", "a2b6cbe1": "deleteTxDataBlockNumber(bytes32)", "a2b6f0ec": "addRewardToPendingWithdrawals(uint32)", +"a2b7481a": "setWithdrawProfit(uint256)", "a2b7976d": "bbye()", "a2b7a18b": "BCE()", "a2b7e23d": "queueMode()", "a2b8891e": "getFreeKebaber()", "a2b8bc77": "domain_reward(address,uint16)", "a2b946aa": "getNewGame()", +"a2b96b6f": "CONTRIBUTE_ROLE()", +"a2ba7187": "setMinimumTimeBetweenExecutions(address,uint256)", "a2bad039": "getCompte_27()", "a2bb5d48": "get_username(address)", "a2bb635a": "WhitelistedAddress(uint256)", +"a2bbd4ef": "releaseAllAfterAllTime()", "a2bbeac2": "Shares(string,string,uint256,uint256)", +"a2bc00a5": "custPercent()", +"a2bc01fd": "ticketLists(uint256)", "a2bc0e31": "testCheckRokTeam()", "a2bc183f": "secondPlacePot()", "a2bc1cd4": "getNumEthOfferors()", "a2bc2eef": "CipherPlayToken(address,address)", +"a2bc5c20": "pendingBio(uint256,address)", "a2bcb304": "setfanbei(uint256)", "a2bccae9": "plyrRnds_(uint256,uint256)", "a2bcee8b": "build_creature()", "a2bd018c": "targetDiscountValue3()", +"a2bd3644": "fromUint256(uint256)", +"a2bd9fcf": "TokenWithdrawn(address,uint256)", +"a2bdde3d": "isTokenAdmin(address)", +"a2bdedf4": "allUsers(uint256)", +"a2bdf4a3": "demassFromToken(uint256,bool)", "a2be1761": "addDiscounts(address[],uint256)", "a2be19fb": "assignPoliceToReport(uint256)", "a2be23cd": "BASIC_RATE()", "a2be427d": "updatePlayer(uint256)", +"a2be6f5d": "countremain()", +"a2befa64": "calcClaimAmount(address)", +"a2bf0af5": "setSendersWhitelist(address[])", "a2bf1d06": "DURATION_NONUSETEAM()", "a2bf68b9": "membership()", "a2bf6939": "setTokenValue(uint256)", "a2bf6f7e": "ClaimedStatus(address)", "a2bfae64": "mmin(uint128,uint128)", +"a2bfffe5": "currentCashtofCash(uint32,uint128)", "a2c030a5": "changeRootAuthority(address)", "a2c17459": "getCreateUnicornFullPriceInCandy()", +"a2c1cae2": "assumeOwnership()", +"a2c1fc5e": "highestBidderOf(uint256)", "a2c25131": "LogItemUpdate(uint256)", +"a2c26b65": "testTokensSupply_beta(address,uint256,uint256)", "a2c2ed9b": "killContract(uint256)", +"a2c38a23": "initiateSingleSigWithdrawal(address,uint256)", "a2c3a542": "getFallbackDepositPeriod()", "a2c3b256": "receiveCheck(address)", "a2c3bd83": "TokenInvestment(address,address,uint256)", @@ -93112,115 +170395,216 @@ "a2c4a06f": "startTimeOne()", "a2c4c336": "getPurchaseReturn(address,uint256)", "a2c4d268": "addToRef(uint256)", +"a2c51885": "addFunctions(address,string)", "a2c52c4d": "CoreMediator()", +"a2c56be6": "item23IndexToOwner(uint256)", +"a2c6bc25": "addInTotalSumAssured(bytes4,uint256)", "a2c6fa83": "transferFromStudio(address,address,uint256)", "a2c77e68": "isLeftTokens(uint256)", +"a2c8a927": "addTimeT(address,uint256)", "a2c8b76b": "getPriceFor(uint256,uint256,uint256,uint256)", +"a2c90838": "exchangePynthsForPERIAtRate(uint256,uint256)", "a2c93406": "blinc()", +"a2c9776d": "minimalPayout()", "a2c99d47": "rateAfterValidation(uint256,bool)", "a2c9d630": "manualPrice()", "a2cc1f62": "disagree(address)", +"a2cd0f24": "ApproveDealEvent(bytes32,address,address)", +"a2cdd082": "TradeLiquidate(uint256,address,address,uint256,uint256)", "a2cdd471": "cc()", "a2cdd82f": "setAuctionObj(address,uint256,uint256)", "a2ce0f87": "min_contribution()", "a2ce4215": "TOKEN_PREICO_CAP()", "a2ce588d": "roundExpired()", +"a2cf8d32": "getTransferNonce()", +"a2cfa123": "setDmapid(string)", +"a2cfdee9": "tamagRewardCalc()", "a2cff990": "getHeroCurrentLevel(uint256)", +"a2d0a576": "finishedBlockNumber()", "a2d0b147": "RedTicket(uint256,address)", +"a2d0c49b": "setNormale()", "a2d0f942": "canRedeemUTXOHash(bytes32,bytes)", "a2d10ba5": "kyber()", +"a2d11239": "fiatToEth(uint256,uint256)", +"a2d151dd": "SLPV2ROUTER2()", +"a2d195e4": "calculateWeiAmountForUSDT(uint256,uint256,uint256)", "a2d1c624": "checkKingFounder(address)", "a2d1cf11": "propheciseExecute(address)", +"a2d2236d": "create(uint256,uint256,uint256,bool,bool)", "a2d24c5e": "getFirstTranche()", +"a2d28d46": "addDIDProvider(bytes32,address)", +"a2d29cd0": "ethToUsdPriceOracle()", +"a2d2b773": "bridgeContractAddress()", "a2d39bdb": "addKey(address,uint256)", "a2d3e2be": "ReleaseTimeChanged(address,uint256,uint256)", +"a2d42c5d": "_reduceDeactivationRequest(address,uint256,uint64)", "a2d435d4": "icoTotalCollected()", "a2d46832": "speech(uint16)", "a2d4db9c": "newUpload(bytes32,string,uint16,bytes32)", +"a2d56c1f": "greaterFools()", "a2d57853": "receiveApproval(address,uint256,bytes)", +"a2d57df1": "dist()", "a2d5b8bf": "withdrawBoardMeetingFees()", +"a2d685e8": "tokensInJuniorBonds()", "a2d6a926": "CapCoinInternational()", "a2d6d382": "videos(bytes32)", +"a2d6e679": "spawnAxieHack(uint256,address)", "a2d6f8de": "startEarlyStage4()", "a2d74227": "spendToken(uint256)", "a2d74b29": "setJobHiringDone(uint256)", +"a2d78260": "mneSentPerDayGet(address)", +"a2d8041f": "getDepositAmount(address,uint256,uint256)", "a2d819b4": "getSenderSig()", "a2d83b5e": "update(address,uint256)", +"a2d878be": "_debtUniswapLPContract()", "a2d89edf": "bountyInit()", +"a2d8a997": "cancelExecution(uint256)", +"a2d8e5c8": "overCollRatio()", +"a2d966ea": "ERA()", "a2d97fa7": "TimeLockr()", +"a2d9f4dc": "setMasterChef(address)", "a2da2b47": "ausGroupReleaseDate()", +"a2da4a3e": "BorrowERC20FromCompound(address,address,uint256,uint256)", "a2da84f8": "setCAOAmount(uint256[])", +"a2db0465": "openingSupply(address,uint256)", "a2db644e": "vestingTransfer(address,address,uint256)", +"a2dbe853": "setFixed(address)", +"a2dbebf8": "setSuper(address,bool)", "a2dc7dcf": "initialize(address,address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256[])", "a2dc9d9c": "ChangeMessage(string,string)", "a2dcb5d4": "bindUserWithBoard(uint256,address)", +"a2dd0464": "emitFeeSet(uint256)", +"a2dd0ac1": "pendingBoo(address,address)", "a2dd2e96": "InitCancel(address)", "a2dd3283": "setICOContract(address,address)", +"a2dd3d47": "getByHash(bytes32)", "a2dd9dd3": "canMateWith(uint256,uint256)", +"a2de0b94": "setBaretax(uint256)", "a2de29d4": "setReleaseAmount(address,uint256)", "a2de45b7": "Listed_Validated(uint256,string)", "a2de5b50": "buyWithPromo(address)", "a2dea26f": "sendAllocation(address)", "a2deadbd": "getTransactionHash(bytes)", +"a2ded115": "decreaseMinterAllowance(address,uint256)", "a2dee527": "setSaleBonus(address,address,uint256)", +"a2df129d": "claimAllFor(address)", "a2df26f5": "printMarket(int256)", +"a2df2ba7": "lastTimeClaim(address)", "a2df6c42": "splitFirst(string,string)", "a2df7465": "DeepToken(address,address,address,address,address)", +"a2dfa016": "BondMNE(address,uint256)", "a2dfa2f0": "buySampleTokens(address)", +"a2dfaa35": "GameStarted(uint256,uint256)", +"a2e0eccb": "set3(uint256)", "a2e0ee3e": "theWinningReferral()", +"a2e120b9": "bExchangeProxy()", +"a2e17342": "accruedInterestOnLoan(uint256,uint256)", "a2e1a8d8": "isOwnerAddress(address)", +"a2e201d4": "withdraw(address,address,uint256,uint256,string)", +"a2e20c82": "setstoreStart(uint256)", +"a2e21e29": "treasurers(uint256)", "a2e23a51": "TAIL_EMISSION()", +"a2e272fa": "checkNowStakesBalance(address)", +"a2e277a8": "ethToSynth(bytes32)", "a2e2842e": "ChannelSecretRevealed(bytes32,address)", "a2e2998c": "setPricePerMessage(uint256)", +"a2e34586": "tracks(uint256)", +"a2e354c8": "liquidateFactorMantissa()", "a2e3750c": "preSaleCSSC()", "a2e38b54": "getTransactionIds()", "a2e40e50": "endorse(bytes32)", +"a2e4cd2e": "updateKeyPricing(uint256,address)", +"a2e4d239": "grantMinterBurnerRights(address)", "a2e55e88": "IQB()", +"a2e59c91": "getBiddingParameters()", +"a2e5e542": "createBoxMould(uint128,uint256,uint256[],address[],uint256[],string)", "a2e5f168": "DaoAccount(address,address)", "a2e62045": "update()", +"a2e64137": "feeAmounts(uint256)", "a2e65477": "changePeriod(uint256,uint256,uint256)", +"a2e656a2": "farmEnabled()", +"a2e66ce2": "Claim(bytes32,address,bytes)", +"a2e670d3": "_tokenMintAddress()", +"a2e6cbd0": "halfDuplexErc20token()", +"a2e6ddcc": "safeCakeTransfer(address,uint256)", +"a2e6f7f8": "getAddressFrom(uint8,bytes32,bytes32,address)", +"a2e6f9bf": "stepTimestamp()", "a2e7223e": "isNewPlayer(address)", "a2e7241c": "citizensAddresses(uint256)", +"a2e7361c": "Migrated(address)", +"a2e74af6": "setFeeToSetter(address)", "a2e800ad": "rounds()", +"a2e80c5e": "stakersCount()", +"a2e81a83": "referReward(address)", "a2e841ba": "getUnprocessedQueryBytes32(uint256)", +"a2e852ab": "setHexHxyExchange(address)", "a2e855a5": "batchFillOrKill(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"a2e85973": "sz(uint256[10])", "a2e91477": "publicSaleStarted()", +"a2e92aac": "getMCRDataLength()", "a2ea2aaf": "CreateToken()", "a2ea771f": "receivedTokenOf(address)", "a2ea7c6e": "getSchema(bytes32)", "a2ea80f9": "setPayableEnabled(bool)", "a2ea9883": "OwnerChanged(address)", +"a2eaa500": "getAstroInfo(uint256)", "a2eaa896": "winningBidder(string)", "a2eb0d01": "gift_CreateTINAmotleyLine(string)", "a2eb164d": "lockUpdateTokenAccount(address,bool)", +"a2eb19ad": "getFeesForSwitchHouse(address,uint256)", "a2ebaa1d": "TEAM_PERCENT_EVE()", "a2ebb20b": "icoHolder()", +"a2ebe749": "baseImplementation()", "a2ec191a": "addDSource(string,uint256)", "a2ec258f": "future()", "a2ec2957": "updateInvestorDates(uint256,uint256)", +"a2ec3218": "dexnesCaptain()", "a2ec5414": "getAllowanceExpiration()", +"a2edb1cf": "withdrawTeamBonusGain(uint256)", +"a2ede2c7": "LogRefundCheque(bytes32,uint8)", +"a2ee0c45": "getProofIdByHash(bytes32)", "a2ee1a27": "sellPrice_wie()", "a2ee4000": "cancelSalesOffer(bytes32)", "a2ee8669": "PussyToken(uint256,string,string)", "a2eeb5d4": "pyramid(uint256)", +"a2ef23f4": "AuctionWinner(address,uint256,address,uint256,uint256)", +"a2ef3107": "closeICO(bool)", +"a2ef59b6": "HappyInvestors()", +"a2efb855": "vendor_register(string)", +"a2efb975": "addApprovedSeller(address)", "a2f09dfa": "addFund()", +"a2f0d957": "lockTemporarilyTillBlock(uint256)", +"a2f111f3": "setRingContract(address)", "a2f1607c": "_calcLockRewardPercentage()", "a2f16d80": "dexWithdrawCollectedFees()", +"a2f17587": "setStarsPrice(uint256)", +"a2f1784f": "massMintTypeNFTs(address,uint256)", "a2f182d4": "setLimits(uint256,uint256,uint256,uint256,uint256)", +"a2f1c2f3": "getPartnerDeployer()", "a2f23659": "VPCx()", +"a2f24b69": "shl_combined_large(uint256)", "a2f26fb2": "FTTIssued(address,address,uint256,uint256)", "a2f3139c": "stagedVestedLockUpAmounts()", "a2f35f44": "addNewAddress(address)", +"a2f36d8f": "setSingleTokenInfo(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,bool)", "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)", +"a2f4a287": "_WBNB()", +"a2f4a412": "VersionChange(string,uint32,bytes32)", +"a2f4d586": "currentProviderTPS(address)", "a2f4f550": "getDataPointForSubject(uint256,uint256,int256)", +"a2f53625": "setBNUStoreContract(address)", +"a2f54b47": "approve_transfer(address,address,uint256)", +"a2f55ae5": "permit(address)", "a2f56b2c": "refundEth(bytes32,address,uint256)", "a2f5ee48": "CarbonExchangeCoinToken()", +"a2f6031f": "getRedGene(uint256)", "a2f6e5fb": "ViewMyDivs(address)", +"a2f71bc6": "breedWithSign(uint256,uint256)", "a2f77bcc": "getGame(uint256)", "a2f78d7a": "startICO(address,address)", "a2f792d5": "AdministratorAdded(address,address)", @@ -93231,18 +170615,32 @@ "a2f91af2": "cage(uint256)", "a2f95b44": "committeesArray(uint256)", "a2f9eac6": "persons(uint256)", +"a2f9f1ce": "pendingWithdrawals(uint32)", "a2fa0157": "isAssetActive(address)", +"a2fa2b3c": "DepositAddressChanged(address,address)", +"a2fa4b5a": "getBCInfoByCardName(string)", +"a2fa92c7": "transferPaybackBalances(address,uint256,address[],uint256[],uint256[],uint256[])", "a2fb1175": "winners(uint256)", "a2fb342d": "lend(address,uint256)", "a2fb98fa": "starting_clones()", +"a2fb9d20": "returnStringPair()", "a2fba23c": "holderGroup(address)", "a2fbe98c": "haveIWon()", "a2fc0bd5": "BuyEvent(address,uint256,uint256,uint256)", "a2fc2254": "LAFINAL3()", +"a2fca6b3": "iou()", "a2fcd1af": "amountRaisedInUsd()", +"a2fcfd68": "getClaimedFor(address,address[])", "a2fd0179": "unlockBatchOfAddressesAfterITO(address[])", +"a2fd1143": "RpunkIndexToAddress(uint256)", +"a2fd8262": "userHoldedCover(address,uint256)", "a2fdea11": "getBonusCoefficient()", "a2fe802b": "isExit()", +"a2fe9599": "setPriceUSDT(uint256)", +"a2feab0f": "FLASH_TOKEN_V2()", +"a2febea4": "rarityAmounts(uint256)", +"a2ffdab4": "initializeDAO()", +"a2fff5cf": "grantCreators(address[])", "a3000128": "getContributionHash(address,uint256)", "a3006abf": "buyBoosterPack()", "a3006f5f": "CETFToken()", @@ -93250,39 +170648,71 @@ "a300c6ae": "confirmCollRecv(uint256)", "a300eadf": "_getAllParents(bytes32)", "a3011a02": "WatcharaHashCoin1()", +"a30184de": "saiToken()", "a301b493": "Milestone_IcoFailed(string)", +"a301eff2": "_normalizePrice(uint256,uint8)", +"a302041d": "setBigPercentageTransferFee(uint256)", "a3022667": "modifyAllLevelCaps(uint256[])", +"a302dd92": "inUnStakingWindow()", "a302fdf1": "WHITELIST_BONUS_RATE()", "a3030b10": "getTournamentBattleResult(int256,int256,uint256,uint256,uint256)", "a3031b77": "getTradeCount()", "a3032f25": "claimTreshold()", "a3035454": "WeiControllerFactory(address)", "a30376b7": "getReferralCount(uint256)", +"a303bc52": "_update(uint256,uint256,uint256,uint256)", +"a3040189": "queryUserByAddr(address)", +"a304450a": "stakeRewardAvailable(uint256,address)", "a3045113": "payUp()", "a304f625": "updateInheritedEarlyParticipantWhitelist(address,uint256)", "a3053236": "SafeInvestments()", +"a3053e2a": "convertUsdToEth(uint256)", +"a3054136": "_withdrawDaiMost(uint256)", +"a30568a9": "generateAffiliateLink(address,uint256)", +"a305a83d": "getDataProxy()", "a305ac76": "futureHolder()", +"a306cdeb": "tokenIndexToAddress(uint256)", +"a306dfbe": "whitelistedMarketplace(address)", "a306e754": "batchIssueTokens(uint256)", +"a307114e": "getUserBurnBonus(uint256,address,uint256)", "a3078815": "darknodeOwner(address)", "a307b727": "refund(bytes32,string,address)", +"a307f5a9": "EscrowReleased(address,address,bytes32,uint256,uint256,bytes32[],bytes32)", "a3082be9": "GoodLuck(uint256,uint256)", "a30872db": "tierContract()", +"a308815b": "BoosterApplied(uint256,uint256)", +"a308b8f5": "periodCalc()", "a308c2a7": "validReferralCode(string)", +"a308fb64": "setBlocksPerDay(uint16)", +"a3093e0f": "filled(address,bytes32)", "a30955af": "balanceToken()", "a309800c": "_withdrawWei(uint256)", "a309f2ee": "setBalanace(bytes32,address,uint256)", "a309f589": "crowdsaleRatio()", +"a30a3824": "delegateClaimReward(address,address)", +"a30a7171": "pending(uint256,uint256)", "a30a86fe": "setMainSaleParameters(uint256,uint256,uint256,uint256)", +"a30ab2d0": "information(address)", "a30b5c69": "AttributeModel()", "a30bdea4": "isOffchainWhitelisted(address,bytes)", +"a30be769": "gg1ToLp1Route(uint256)", +"a30c302d": "getMarketData(address)", "a30c5f17": "get_root()", "a30cc5f6": "multiFixed(uint256[2][6])", "a30d5627": "ItemToken()", "a30d59c9": "getEggsCount()", +"a30d9413": "isfrozenOf(address)", +"a30deb0a": "lockOwner(uint256)", +"a30e3fa9": "numberOfMembers()", +"a30e9b18": "getIsWithinEthDailyTransactionLimit()", "a30eb0ef": "freeTokenTime()", "a30eddcc": "bitSlice(uint256,uint256,uint256)", +"a30eeaaa": "adminRemoveHorseFromstud(uint256)", "a30ef9e7": "toBase32(bytes)", +"a30f64fd": "numDecimalsBuyPrice()", "a30f786f": "allowedRewardTokens()", +"a30f8e87": "redeemInSubscriptionFailed(uint256)", +"a30fadb8": "testKyberV1(address)", "a30fb52d": "sendGameGift(address)", "a30fbae1": "endBuyBackDate()", "a310293e": "weiDonated()", @@ -93296,39 +170726,73 @@ "a311d970": "TokenTycoonIGO()", "a311dd70": "setArray(uint8[10])", "a31271f5": "updCrowdSaleEnabled(bool)", +"a312c8a3": "CURRENT_LAYER_ID()", "a313c371": "memberInfo(address)", +"a314150f": "s2()", "a31477b4": "getSncTokenIssuance(uint256,uint256)", +"a31490cc": "issetPass(uint256)", "a314acfe": "attemptToClaimCard(address,address[3])", "a314dc2d": "feePayed()", +"a315059d": "updateBlockerOperators(address)", +"a31547b9": "sceneIndexToOwner(uint256)", "a3155013": "month60Allocated()", +"a315a1e2": "getMinInfos()", "a315acf5": "minter_address()", +"a315ca98": "minStakeDays()", "a315cda0": "priceOfSmartContract()", +"a3169335": "takeRewards(address,uint256,address)", +"a31699ab": "getInfoTeam()", +"a3169b14": "initialiseAuction(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a316aa93": "setActivityDetails(uint256,string)", "a3179fe0": "getAccountsNumber()", "a317abc7": "defaultMax()", +"a317ea06": "changeMinFee(uint256)", +"a3180978": "computeAddress(bytes32,bytes,address)", +"a3183701": "values(uint256,uint256)", +"a318c1a4": "withdraw(uint256,address,address,uint256)", "a318d521": "disableBeforeActivation()", +"a318f269": "createCampaign(string,string,uint256,uint256)", +"a318f9de": "mintThenDeposit(address,uint256,uint256[3],uint256,uint256,bytes32,bytes)", +"a3190405": "setChainlinkAggregator(address,address)", +"a31911f7": "TopPartyTeam()", "a3194d50": "setFinished(uint8,bool)", "a319b232": "VTCoin(uint256,string,uint8,string)", "a31a9752": "Payout(uint256,bool)", +"a31b4992": "buyLevelViaContract(uint256,uint256,uint256,uint256)", "a31b858d": "_buyDiscountTTM(uint256,uint256,address,address)", +"a31bcc3b": "STAKE_INTENT_TYPEHASH()", +"a31bfdcc": "log(address,uint256,bool,address)", "a31c5436": "TOKEN_AMOUNT_PRE_ICO()", "a31caec8": "AkilosToken()", "a31cc317": "evaluateContract()", "a31cd710": "_getExpMultiple(int256)", "a31d291a": "HOHO(uint256,string,string)", "a31d30a5": "WhitelistUpdated(uint256,string,address,uint256)", +"a31d42d1": "ChangeToCoin(address,uint256)", "a31d5580": "Registrar(address,bytes32,address)", +"a31d7605": "dasher()", "a31e3678": "addExceptAddress(address,address)", "a31e5e97": "setHouseAddressOne(address)", "a31e88c2": "numIntervals()", +"a31ee5b0": "initialize(address,address,bytes32,address)", +"a31ef2fa": "destDebtLock(bytes32,bytes32,bytes32,bytes,bytes32)", +"a31f0e3a": "serverAddressList(address)", "a31f2c52": "partner2_voted_update_prenup()", "a31f61fc": "setGroupCap(address[],uint256)", "a31f79fb": "slopeReleasePercentage()", +"a31f7bff": "setNonWhitelistedDepositLimit(uint256)", +"a31fe409": "consumedVAAs(bytes32)", "a31ffa30": "setCtuContract(address)", "a3201daa": "setPrices(uint256)", +"a3202246": "newParamProposal(uint256,string)", "a3208c1e": "addUserIntoBlacklist(address)", +"a320b363": "updateExpirationTimestamp(uint48,bytes32,uint8)", "a3210e87": "sendeth(address,uint256)", +"a3214f7c": "requireHasRole(bytes32,address,string)", +"a321c6fb": "payoutFrom(address,address,uint256,uint256,uint256)", +"a321d886": "offerHEX(uint256,uint256)", "a3221c8e": "step8()", +"a3223ad9": "AddressesBound(address,uint8,string)", "a3223d50": "ETHER_MIN_CONTRIB_USA()", "a322accf": "tokenFallbackExpanded(address,uint256,bytes,address,address)", "a322c40e": "toString(int256)", @@ -93337,19 +170801,31 @@ "a323af85": "hasTwoStepWithdraw()", "a323bdb4": "currentPublicSale()", "a3240455": "offerStarForSale(uint256,uint256)", +"a3244e84": "setFee(address[],uint40[])", +"a3245f88": "getTransferHash()", "a3246549": "stageOneClosed()", "a324ad24": "getMonth(uint256)", "a324cca0": "optimalLog(uint256)", "a324ed9f": "BurnUnsoldToken(uint256)", "a324f8bf": "tanksBeforeTheNewTankType()", "a32508a1": "Carpati()", +"a3250d15": "mysunsdaynum(address,uint256)", +"a325b22a": "changeOrbiSupplyList(uint256[])", +"a325f4a8": "proCount()", "a3262e57": "burnCoin(uint256)", "a32710eb": "setRole(address,address)", "a3273535": "tdeDuration()", +"a3275838": "forgeL1L2BatchTimeout()", +"a3277eb1": "showInfo()", "a327a958": "numCourse()", "a327c45d": "dev1()", +"a32806d0": "addKnjiga(string,string,uint256)", "a328f90b": "_nextBudgetStartAndEndAndOfficalVotingTime()", +"a3292962": "getCurrentPerBlock()", "a3293c0e": "handToCards(uint32)", +"a3294f6e": "_approveTokenIfNeeded(address)", +"a3296d33": "WithdrawFinished()", +"a32a626d": "addAssetFunding(address)", "a32a6737": "setTotalDeposit(address,uint256,address)", "a32ac9e1": "Bitcoin_IDToken(uint256,string,uint8,string)", "a32af535": "depositAndFreeze(address,address)", @@ -93358,36 +170834,64 @@ "a32c3bd6": "GetBounty(address,uint256)", "a32cb608": "getReverseRate(address)", "a32ce11e": "approvals(address,address)", +"a32cf536": "poolFactoryAddress()", +"a32d7697": "subscribe(bytes32,address)", "a32e935a": "allocateTokenForTeam()", "a32f0f41": "testFailControllerUnapprovedTransferFrom()", +"a32fe0a1": "toPMM(bytes)", +"a3303a75": "createCampaign(uint256)", +"a3305766": "setHonestTreeGameContractAddressAndMintTokens(address)", "a330814c": "unregisterAuditor(address,address)", +"a3309151": "CreateTokenICO()", "a3316ccc": "RATE_SALESTAGE7()", +"a3318062": "distributionPeriodBuffer()", "a3318359": "sendPrizes()", "a331939d": "freezeAdmin()", +"a331c254": "executeMultipleAuthKeyMetaTx(address[],bytes[],uint256[],uint256[],bytes[])", "a331cd38": "toKeyValue(uint256,string)", +"a3321701": "_totalClaimableSupply(uint256)", "a3322a12": "getFilesCount()", +"a3323159": "unlockOldestTimelock(uint256)", "a332853a": "futureDevelopmentFundAddress()", "a3330574": "checkAndMint(uint256)", "a333658f": "addTreasuryManager(address)", +"a3337df1": "notifyUpdatedLeverage(address,address,uint128,uint112,uint256,uint256)", "a333f96d": "LogRefundProcessed(address,uint256)", +"a3342fba": "artistWallet()", "a33467cf": "getClue2()", "a334edf6": "consumeWine(uint256)", +"a334f5c4": "returnTxMessageToSign(bytes,address,uint256,uint256)", +"a335239b": "enableBuy()", "a3358ae4": "REAPER_INTREPID_EXTRACTION_BASE()", +"a335a291": "Gate(uint256)", +"a335b122": "userFragmentsPerTokenPaid(address)", "a335b828": "FUS()", +"a336d8c3": "_bank()", +"a336ffa5": "additionalBonusOwnerState(address)", +"a3371e8d": "lockCollectible(address,uint256)", "a337840c": "setGuardianRune(uint256,uint256)", +"a3379f90": "voteToRemoveParams(address,address)", +"a337ab0a": "crbDevAddr()", "a338bd2c": "showTopBonusBalance()", "a338eba5": "sendTokens(address[],uint256)", "a3393a35": "getDrawEthAmount(uint256,address,uint256)", "a3395a52": "searchTicketsXaddr(address)", +"a3396546": "proofOfWorthiness(bool)", "a339aaf7": "addOracles(bytes4[],address[])", "a339abd5": "crowdsaleOpeningTime()", +"a339ac74": "tellorContract()", "a339c18f": "ACNNIco(uint256,uint256,uint256,address,address)", "a339c21a": "addContractTestToBounty(address,address)", "a33a5225": "allRefererTokens()", +"a33b1260": "Payment()", "a33b7510": "shareAddEtherValue()", "a33bea16": "GENEOSSale(uint256)", "a33c0972": "tokenAllocToCompany()", +"a33c4df1": "addrToId(address)", +"a33cad9b": "stickWei()", +"a33cb1ea": "drawToken(uint256)", "a33cbc55": "TCI_admin()", +"a33d406f": "payback(address,uint256,uint256,uint256)", "a33d4968": "Tripler()", "a33d5d9d": "EthDev()", "a33d652e": "setFunding(uint256)", @@ -93400,29 +170904,57 @@ "a33eff5a": "createResource(bytes32,bytes32,bytes32)", "a33f3939": "setNetwork()", "a340295a": "setPhoenixOwners(address[19])", +"a34059c2": "updateHourSaleContract(address)", +"a340b40e": "DisputeCrowdsourcerContribution(address,address,address,address,uint256)", "a340ceac": "transfekbolOwnership(address)", "a340cf79": "paid(address)", "a340d587": "offlinePurchase(address,uint256)", +"a3411c0a": "disableLimit(address)", +"a34123a7": "burn(int24,int24,uint128)", "a3414653": "COIN_COST_ICO_TIER_1()", +"a34231de": "systemStakingPool()", +"a34286fa": "BigBankBet(uint256,address,address,uint256,uint256,uint256)", "a3429689": "TaiCoin()", "a3435da5": "BONUS_LEVEL_3()", +"a34396c0": "InvariantCheckPassed(uint256,uint256,uint256,uint256)", +"a344656a": "memberdeposit(uint64)", "a3451568": "airdropBatchTransfer(address[],uint256)", "a3454712": "AssetCreated(address)", "a34560be": "updateEtherCap(uint256)", "a34574f0": "gamers()", +"a3461e3c": "getLast6(address)", "a346b62d": "CaptainKitties()", +"a346c6aa": "executeLong()", +"a346c9b6": "Purchased(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "a346e536": "week_winner()", +"a34712a4": "pub_modelID()", "a3472270": "mock_getAddress(uint256)", +"a347acc9": "getUserBalanceAvailable(address)", +"a347ee88": "signEtherlly(address,bytes32,bytes)", "a347ef84": "calcpustprice(uint256,uint256)", +"a348404b": "enter(uint256,uint96,uint8)", +"a3484d51": "claimsMerkleRoot()", +"a348c289": "isWhite(address)", "a348ea79": "contests(address)", "a34945db": "maxAllowedBetInEth()", "a3494fdc": "expectRefund(uint256)", "a349bfa2": "addOwner(address,uint256,uint256)", "a349d683": "FRP()", "a34ad6b6": "clockmint()", +"a34b0f38": "getNumCauses()", +"a34b0f76": "totalRewardsClaimed()", +"a34b4af5": "modifyParameters(address,address,address,bytes32,bytes32,address,uint256)", +"a34b6b22": "buildRounds()", +"a34b71d0": "callsSold(bytes32,address)", +"a34b8313": "approve_355(address,uint256)", +"a34ba41c": "setDataProviderContract(address)", "a34bbf51": "getGeneralInfo()", "a34c6716": "testHashing(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32,bytes32)", +"a34cafb1": "stakingPoolV1SignificantBalance()", "a34cc845": "win(address)", +"a34cd51b": "getPrice(uint8,uint256,address)", +"a34cf319": "get_TotalServiceChargeTokens()", +"a34d0fee": "winnersMap(bytes32,uint256)", "a34d2ff7": "votingBymy(bool)", "a34d42b8": "setContractOwner(address)", "a34d5312": "registryRequestVendor()", @@ -93431,64 +170963,115 @@ "a34d9270": "setMinInvestedLimit(uint256)", "a34d942b": "FUXEToken()", "a34dffba": "SILVER_AMOUNT_NDC()", +"a34e0a38": "SetAssetToExpireEvent(uint256,address)", +"a34e0a47": "_removeFees(uint256)", "a34e5990": "setTier(uint256,uint256)", +"a34e79bf": "getStakerStakedUnlockableBeforeLastBurnByIndex(address,uint256)", "a34e9e66": "approveBcoupons(address,uint256)", "a34edc03": "assertTrue(bool,string)", "a34f42a9": "LogRandom(uint256,uint256)", +"a34f74bd": "emitEndWorkRequested(uint256,uint256)", "a34f82f4": "summFounders()", +"a34fbb49": "mintForCrowdsale(address,uint256)", "a34fc5ac": "_lockTokens(address,uint256)", "a350539e": "makeBid(uint32)", "a3508b17": "getOpenedStageIndex()", +"a350906c": "smeltEast(uint256)", +"a350d310": "totalvoter()", "a35132ac": "SMSReward(address)", "a3515b98": "initializeWeekData(uint256)", +"a3524b71": "updateTokenName(string,string)", "a352f1a8": "calcSHA3(bytes)", +"a3531f6c": "miningProfit()", "a3536b0c": "calculateHolderPiece(address)", +"a3538417": "GenesInitialisedEvent(address,uint256,bool,uint256)", +"a3538d30": "calculateRewardNew(address)", "a353c600": "Ponged(uint256,string)", +"a353d5f9": "addAthlete(string,uint256,string,uint256)", +"a3546be4": "withdrawLostTokens(address)", "a35523da": "currentLoanDayTime()", +"a3557e6c": "reconfigureFor(string[],string[],uint256,bytes)", +"a3563322": "individualMaxCaps(uint256)", +"a356d575": "setKeepOpium(uint256)", "a356fdf3": "getPreICOPercentage(uint8)", +"a35704c3": "dpPercent()", +"a357490c": "getDeployedAddress(address,uint32)", +"a3574c5b": "rolesManager()", +"a3576bb8": "users_3(address)", "a3577e93": "depositFunds(bytes,uint8[2],bytes32[2],bytes32[2])", "a357880d": "whitelistedAddrs(address)", +"a357e3cd": "setBoard(string)", "a3580695": "inSpecialSalePeriod()", +"a35830ba": "TokenCreateTime()", "a358aa18": "_transferFromInvestor(address,address,uint256)", +"a3594709": "poolMint(uint256)", +"a3594afb": "xLandContractAddress()", "a35a319b": "delFromBlackList(address)", "a35aae9c": "roundID_()", +"a35ab639": "setReferralBonusRate(uint256)", +"a35ac753": "isSenderAuthorized(address,address)", "a35ae3ab": "Bam()", "a35bc497": "remainTime(uint256)", +"a35bc9af": "HONEY_DISCOUNT_PERCENT()", "a35bd437": "toUSD()", "a35bd591": "newRound(uint256)", +"a35be443": "getTokenBalance(address,bytes32)", "a35bfcac": "ownerRemoveRole(address,string)", +"a35c0819": "uniswapComp(uint256)", "a35cad77": "maxLeaders()", "a35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", +"a35d093a": "addClaimVoteCA(uint256,uint256)", "a35d631a": "PausableMock()", "a35d6dd6": "rDEX()", "a35d78a6": "_approvedGen1(address,uint256)", "a35da419": "setlock(bool)", +"a35de193": "getPositivesBets()", "a35e617f": "setMaxCount(uint256)", "a35e83ea": "getReplay(uint256,uint256)", +"a35eff07": "changeWalletRequest(address)", +"a35f7c7b": "TRUSTED_TOKEN_ADDRESS()", +"a35f8a40": "getMessageHash(address,uint256,string,uint256)", "a35f9514": "calcDstQty(uint256,uint256,uint256,uint256)", +"a35fd2f8": "runAirdrops(address[],uint256[])", +"a36003cf": "putsExercised(bytes32)", "a360098f": "Immigration(address,address)", +"a3607558": "leftoverAmount()", "a360b26f": "Migrations()", "a361b184": "move(bytes32,bytes32)", +"a3623490": "pendingXsd(uint256,address)", "a3624b72": "finalizeTransferAddressType()", "a362858a": "EthereumCashPro()", "a36298c7": "totalLimit()", "a362cf0c": "TrueWorld(uint256,string,string)", "a363f269": "watchMovie()", "a3641c84": "card_metal_first()", +"a3646f59": "isFactoryDeployer(address)", "a364b5c1": "setProposalNames(bytes32[])", +"a365257e": "feePunish()", "a365bd9f": "BaseToken(string,string,uint256)", "a365f3cc": "Util()", +"a3663d37": "sources(uint256)", "a3666d23": "weekTwoPriceRiseBegin()", "a367b891": "SplitPhaseDistribution(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "a367d99a": "investStart()", "a367e565": "setIBalances(uint256[],uint256[])", "a368107b": "SetRecordType(uint32)", +"a3684977": "currentExchangeRate()", +"a36854c3": "transformation()", +"a3687501": "checkVoteState()", +"a3692979": "getPollChoices(uint256)", +"a3693506": "reducedRatio(uint256,uint256,uint256)", "a369658c": "TARGET_EVE()", +"a3699b37": "addPastCheckpoint(address,uint256)", "a369b0ac": "depositsClosed()", +"a369b8d9": "totalOlyTokenToSellForTheNext8Hrs()", "a369bb28": "SaleWallet(address,uint256,address)", "a36a0551": "createCarrierFromVault()", +"a36a2898": "txmsg()", +"a36a38ed": "planCounter()", "a36a48a5": "ETH500on719()", "a36a7526": "setOp(address)", +"a36aca85": "approve_51(address,uint256)", "a36b15d0": "enableBundlingMultitoken(uint256)", "a36b8af1": "LogItemModified(address,uint256,uint256,bytes32,bytes32,bytes32)", "a36badd7": "hasJobRecommendations(address,address,uint256)", @@ -93496,100 +171079,185 @@ "a36be9a1": "paybackDeadline()", "a36c2cbe": "informarOng(address)", "a36c8ec2": "UpdateContractorAddress(address)", +"a36c9f17": "WhiteListCaller(address,bytes4)", +"a36cb289": "halveInterval()", +"a36ce52d": "countOfCharity()", +"a36d1fde": "viewDaysSinceJoined(uint256)", +"a36d2bee": "setLendSettings(address,uint256,uint256,uint256,uint256)", "a36db282": "SendLCRTokens(address,address,uint256)", +"a36dd9a9": "deductFromInvestorWallet(address,address,uint256)", "a36ddfae": "_0xForkTokenToken()", +"a36f063e": "getLatestCollateralPrice()", +"a36f10c0": "secondPhaseEndTime()", "a36f127e": "removePresetTransfer(address)", "a36f259d": "campaignOf(address)", +"a36f8a7d": "airdropInfo(uint256)", "a36ff98b": "team1Points()", "a36ffd4d": "ADEToken()", +"a3707377": "creditline()", +"a37145f0": "getFeeDivider()", +"a3714a5b": "removeTeamWallet(address)", +"a3715d1d": "midGradeTotalSupplyForCar(uint256,uint256)", "a37173e9": "transfer_left_funds_to_project()", +"a371ad62": "removeHolesForSchain(bytes32)", "a37218ed": "MAMECOIN()", "a3721adc": "contractCreationBlockNumber()", +"a3726253": "issueBounty(string,uint64)", +"a372b26f": "addAddressesToFrozenlist(address[])", "a37330ea": "getDestroyedWhenRoundOver()", "a3743afc": "getProjectHour(uint256)", "a374480a": "placeValue(address)", "a3744828": "GetPriceByN(uint256)", "a3747fef": "register(bytes,bytes)", +"a374e43f": "tickets(uint256,uint256)", +"a375cb05": "freeTrialLength()", "a375de4f": "addTokensToBank(address,uint256)", "a37641ff": "MAX_RING_SIZE()", "a3766f88": "tokenVendor()", +"a3767b23": "addContractTokenBalance(uint256)", +"a3769ca9": "RS()", "a376c19d": "setEventResult(string)", "a377104c": "init(string,uint256,uint256,uint256)", +"a3772347": "_ensureCurrentPeriodFeeToken()", "a377b34e": "YoloToken(uint256)", +"a377ca1d": "startChangeMaxPercentAndAmountSold(uint256,uint256)", "a377ff17": "setHorseDataAddr(address,address)", "a3787858": "resumeBlockNumber()", "a37889a9": "createPromoGirl(uint256)", "a378bba5": "gameEnds()", "a3792985": "getBonusDropsOf(address)", "a37936f9": "SuspendEmployee(address,uint32)", +"a3795695": "ShortCodeToAddress(bytes6)", +"a379e378": "addMonthlySupply(uint256)", "a379e626": "ownerPerThousandShareForBuying()", "a37a3859": "configPerFund()", "a37a778f": "SetIPR(string,string,address,string,string,uint256,string)", +"a37a9e61": "setSubmitBalancesEnabled(bool)", +"a37ad938": "changeTokenAddress(uint16,address)", +"a37b6ad4": "submissionChallengeBaseDeposit()", +"a37b6c71": "fetchReceipt(uint256)", +"a37b8e85": "balanceSumOf(address)", "a37ba32a": "duration(bytes32)", "a37be00f": "transferBackTo(uint256,address)", "a37be75f": "ethBase()", "a37c314d": "set_iconiq_tokens(address,address,uint256)", +"a37ca24d": "newAdminAction(bytes32,address,address)", "a37ccabc": "PositionBought(uint256,uint256,uint256,address,uint256,uint256)", "a37d1556": "refAmount(address)", +"a37d6b04": "LogPresalesSpecialUserSet(address,uint256)", "a37da615": "showInvestedNum(address)", +"a37dd27c": "_withdrawSaiAtomic(uint256,address)", +"a37dda2c": "freelancer()", "a37dec33": "calculateWineSell(uint256,uint256)", +"a37e4b5d": "lp_token_addr()", +"a37e6181": "changeFarmAddress(address)", "a37e66f5": "ethPendingManagement()", "a37e6f69": "failedByDeveloper()", +"a37e9cdd": "resourcesPerHouse()", +"a37ea60e": "CSTPricePace()", +"a37eb597": "bookWant(address)", +"a37ebe36": "secondPercent()", "a37f00f7": "getItemByTokenID(uint256)", "a37fd390": "setHomeAdv(uint256,string)", +"a3804052": "premiumTotalSupplyForCar(uint256,uint256)", +"a3804afb": "standardRewards()", "a380dcb9": "wpp()", +"a3816e90": "tokensOfOwnerMap(address,uint256)", +"a38190ef": "checkUserSetup(address)", +"a3819acb": "withdraw_wETH_beta(uint256)", "a381de54": "bonusAddress()", +"a3828e8c": "bti()", "a382aee2": "fourthExchangeRate()", +"a382d1b9": "getPMMState()", "a382edfd": "SeeleGold()", "a38320e6": "TITANToken()", "a3833a13": "balanceOfColdWallet()", "a3848b1a": "getMonsterIVs()", "a384af00": "market_BuyForSale(uint256)", "a384d6ff": "lowerBound()", +"a385714c": "getMyInvitedBonus(address)", "a38591fc": "test_percOf1()", +"a385e8b3": "Order(uint256,uint256,uint256)", +"a385fb96": "blocksPerYear()", +"a3860a57": "reserveNg()", "a3863d81": "buyTokensLowLevel(address,uint256)", +"a386e8d6": "getTotalSupplies()", "a38717f4": "exFeeTotal()", "a3875883": "etherPriceUSDWEI()", +"a38783bf": "currentFoundationContribution()", +"a3878942": "ProxyCreation(address)", "a387cf34": "closeTokenSale()", +"a38807f2": "snapshotCumulativesInside(int24,int24)", +"a3881324": "Key(address,string,uint256)", +"a3882291": "balancedWeightsByStake(uint256,uint256,uint256,uint256,bool)", "a3885413": "withdrawOwner(address,uint256)", "a388a836": "DDAContract(address)", +"a388ff8c": "withdrawWithPermit(uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"a388ffdc": "TeamWithdrawn(address,uint256,uint256)", "a3893a33": "changeExchanger(address)", "a3895fff": "changeSymbol(string)", "a389783e": "isApproved(address,address)", "a389ef53": "receiveDeposit(uint256,uint256)", +"a38aa12e": "presaleAPY2KPerEther()", +"a38aa346": "getPartnerContract(string)", +"a38aa3ee": "initialBoogiePoolETH()", +"a38aaa90": "isDefaulted()", "a38b68cb": "nonzeroAddressesLengthForApi(uint256)", "a38b8469": "TokenADSVENTURE()", +"a38b94d5": "FPTest(address)", "a38b9a19": "printQuotation()", +"a38bcc78": "setGameFee(uint256)", +"a38bffda": "NFTPrice()", +"a38c2c3d": "yieldDistributor()", "a38c48b6": "createProductionUnit2Beta()", +"a38c5572": "set_uniswapExchangeContract(address)", +"a38c6549": "AddERC20Maincoin(address)", "a38ce2b4": "revokeAddress()", +"a38ce8db": "fnxCFNXCollectConvertUnwind()", +"a38dcbd0": "removePool(uint256)", "a38deeab": "Grid(uint16,uint256,uint256,uint256)", +"a38e2105": "transferLock(address,uint256)", "a38eb622": "pauseBuy()", "a38f18a0": "RedBlueToken3()", "a3907d71": "enable()", "a3908e1b": "convert(uint256)", +"a3909ef8": "getMarathonersByDistance(uint256)", "a3912ec8": "receiveEther()", "a3916164": "withdrawInvestments()", "a391c15b": "div(uint256,uint256)", "a3922eac": "setCategories(address,uint256,uint256)", "a3926f14": "PixelsMain()", +"a3927a04": "setDaiProxyAddress(address)", "a392f54a": "giveMeCoins(uint256)", "a3934de4": "Upgrade(uint256,address,address,address)", "a39385de": "transferWithReferenceCallGas()", "a393dc44": "_totalsupply()", "a393fb0f": "reducemoney(address,uint256)", "a39417f9": "LOG_NewBet(address,uint256)", +"a3946e26": "getBrand()", "a39495f0": "isPreallocated()", "a394bbc8": "isRegisteredParticipant(bytes32)", +"a394fda7": "askCount()", +"a3958ac5": "getethForMarketBuyRFI()", +"a395c131": "isPlanActive(uint256)", "a395e2cc": "TPLAYToken(uint256,string,string,uint8)", +"a395e9de": "airCount(uint256)", "a3961207": "amountOfRedemptionPayouts()", "a3964cb9": "toB32(bytes,address,bytes)", "a396541e": "getPongvalTxRetrievalAttempted()", +"a396820d": "xtokenSwapSynMint(uint256)", +"a3969815": "getUserNumLockedTokens(address)", +"a39744b5": "bonds(address,address)", "a397d8e0": "getUnusedBalance(address)", "a398063a": "setEmergentHalt(bool)", "a3980dd7": "Readycoin()", +"a39869cf": "MGR()", "a3988500": "CloudexchangeCrowdsale(uint256,uint256,address)", "a398b89b": "receivedEther(address,uint256)", "a39953b2": "startCrowdsale()", +"a399a24a": "wppV1Collector()", +"a399b15c": "setDripRate(uint32)", +"a399b6a2": "faa()", "a399eb76": "ZoharTC()", "a39a2b76": "dropUnitPrice()", "a39a45b7": "replaceOwner(address)", @@ -93598,182 +171266,361 @@ "a39ab3a3": "bla(address)", "a39ad747": "minVote()", "a39b10d2": "lastBlock_a17()", +"a39ba6a2": "getTotalLevelPrice(uint256)", +"a39baf5e": "r24ID_()", +"a39c13e7": "_burnStopAmount()", +"a39cfae6": "investETH()", "a39d716d": "WithdrawBalance()", +"a39da942": "bountiesContract()", "a39db022": "changeBonus(uint256,uint256,uint256)", "a39dc9be": "HOUR()", "a39e1149": "getSECOND_STEP_MULTIPLIER()", "a39eede8": "settleAssets()", +"a39eee98": "BountyTokenTransfer(address,uint256)", "a39f7449": "startTimer()", "a39f9712": "sendTokensAfterBuy(address,uint256)", "a39fa2f6": "VPE_address()", "a39fac12": "getAddresses()", +"a3a0223c": "BLOCKTIME_PENALTY_THRESHOLD()", +"a3a05c57": "finished_account_betting_records(address,uint256)", "a3a06c54": "endICOPhase()", +"a3a098ef": "proposeDelayPropose()", "a3a0b937": "transferFokenWhitelisted(uint256)", +"a3a0bd89": "LogMarginLevels(bytes32,address,uint256,uint256,uint256,uint256)", "a3a0ee24": "evFreeze(address,uint256)", "a3a183c1": "overflow(address)", "a3a187cf": "TokenBought(address,uint256)", "a3a1cd6d": "getNumberOfKnownPropertyAddresses()", "a3a1d015": "failUserRefund(uint256[])", +"a3a227a5": "unlockCapTable()", "a3a27105": "stakeholderPayment(address)", +"a3a2a9ac": "QuorumChange(uint256)", +"a3a2f5ae": "ApexsDroped(uint256,uint256)", "a3a402a7": "deletefromblacklist(address)", "a3a40323": "ArtificialNeuralNetwork()", "a3a40ea5": "getCurrentPhase()", +"a3a415b1": "TGB()", "a3a4851a": "deliveryReject(address)", "a3a48785": "unsetClaim(uint256)", "a3a4a18b": "test_claimShares_emptyFeePool_isTranscoder()", "a3a4ba31": "createChild()", "a3a4c74d": "closeAutoFree(address)", +"a3a4e794": "set_presale(address)", "a3a51983": "updateCurrentStage()", +"a3a52651": "getXdaiBalance()", "a3a5650a": "currentStageMaxSupply()", +"a3a5f38a": "bryToLp1Route(uint256)", "a3a6a43e": "approveUserKYC(address)", +"a3a6a624": "getLockedStructAmount(address,uint256)", "a3a6c73e": "_isIdExisted(string)", "a3a7647c": "tier1Count()", "a3a7b804": "changeMaxGasprice(uint256)", "a3a7e7f3": "transferAll(address)", "a3a81d40": "totalBGX()", "a3a82678": "collectRef(address)", +"a3a8573a": "buyFor(uint256,address)", +"a3a8a816": "MAX_REPLICANTS_PER_GENERATION()", "a3a9196a": "dexTestNormalTransfer(address,address,uint256)", "a3a93721": "SYLVIe()", +"a3a9555c": "numPoints()", "a3a9d67b": "AdviserCasperToken()", "a3aa1913": "balanceDetails(address)", +"a3aa1989": "sellTokens(address[])", +"a3aac0e2": "rolloverAndOpenNextDraw(bytes32)", +"a3ab36e9": "wdx_price()", "a3ab5045": "isNewTile(uint16)", "a3aba50e": "referrerEnable()", +"a3ac2654": "BurnEnabled(bool)", +"a3ac5859": "borrowErc20Example(address,address,address,address,uint256)", +"a3ac9936": "_tcoreWETHPair()", +"a3ac9b53": "NewSellerFundsClaim(address,address,address,uint256,uint256,uint256)", +"a3aca321": "getDaiSplitThreshold50Eth()", "a3ad1676": "isPurchasedEpisode(uint256,address)", "a3adb958": "transferToggleRequester()", +"a3adcdbb": "totalWithdrawable(address)", "a3ae2f5c": "award(uint256,address)", "a3ae88a0": "totalUSD()", +"a3af5301": "EnabledDisableStaking(uint256,bool)", +"a3af5a51": "NAPboostLevelOneBonus()", +"a3af609b": "Deposit(uint256,uint256)", +"a3afaba3": "MaddLifeEthPair()", +"a3afae82": "dealtCards(address,bytes32,uint256,uint256,uint256,uint256)", +"a3afbf71": "InitialETHPrice()", "a3b01f23": "intoverflow_add(uint256)", +"a3b0b5a3": "DEPOSITOR_ROLE()", "a3b0bff4": "getPersonalStakeActualAmounts(address,address)", "a3b0c661": "setLineUpEnable_default(uint256)", +"a3b14588": "cd(uint256)", +"a3b16428": "EscrowCreated(uint8)", +"a3b1d8cb": "logProposerBonusChange(uint256,uint256)", "a3b1dc52": "logEscapeHatchChanged(bool)", +"a3b1f1ec": "lookParams6()", +"a3b22fc4": "hope(address)", "a3b2363d": "parentAddress(address)", "a3b24dcd": "getSumsHash(address)", +"a3b25350": "addRootRole()", "a3b2938d": "updateStatusInternal()", "a3b2c41e": "readArticle(bytes32)", +"a3b2cca6": "updateProjectDescription(uint256,string)", "a3b34190": "unlockSecond()", "a3b3fff1": "getVotingToChangeMinThreshold()", +"a3b429b5": "airDropper(address[],uint256[])", "a3b42cba": "register(bytes8,bytes8,uint256)", +"a3b44a70": "pendingFarmingBit(uint256,address)", +"a3b462f8": "withdrawAllDai()", +"a3b4a327": "payProtocolFee(address,address,uint256)", "a3b4ab48": "BBPToken(address,uint256)", "a3b4b07f": "ACL_APP()", +"a3b545d7": "unsetBlockList(address[])", +"a3b54f4d": "setSwapBuilderFee(uint256)", "a3b6120c": "dateStart()", +"a3b61a9c": "query(bytes32)", "a3b61cf0": "getuserprize(address)", "a3b62bc3": "AdminRemoved(address)", "a3b65d29": "getarg_3()", +"a3b7174c": "claim(uint256,address,string)", +"a3b78f83": "calculateCycle(uint256,uint256,uint256)", +"a3b7b10a": "enterBidForItems(uint256)", "a3b80993": "WorkValley()", +"a3b8c41e": "get_game_asset_premium_status(string)", "a3b8cd3b": "_equipDownOne(address,uint16)", +"a3b8e5d1": "unpackExchangeData(bytes)", +"a3b8e7b5": "numDIDRequiredToApproveVotePullRequestParameterTitle()", "a3b908ff": "unusedOf(address)", "a3b922ca": "buyPandaERC20(address,address,uint256,uint256)", "a3b959da": "change_dev(address)", "a3b9b8d1": "receivePaymentForOraclize()", +"a3b9c92d": "claimBeginTime()", +"a3ba17bf": "withdraw(uint104)", +"a3ba4b66": "set_liquid(uint256)", +"a3bb4cc2": "depositWithPayable()", "a3bbc294": "galleassTransferFrom(address,address,uint256)", +"a3bbc8bf": "hmstrPerBlock()", +"a3bbd23a": "NewTX(uint256)", +"a3bbdfbb": "update_register(uint256,address,string)", +"a3bbf79f": "deprecateVar2()", "a3bbf81b": "USACOIN()", +"a3bc2c43": "pauseText()", "a3bc3fce": "getFillOrderMinGasNeeded()", "a3bc6163": "getMessageGas()", +"a3bcac5e": "superApproveAdmin(address)", +"a3bd99ec": "changeDevAddr(address)", "a3bdc655": "getRemainingTimeTillExpiration()", "a3be094d": "countTokens(uint256)", +"a3be7784": "claimMVT()", "a3bef4d7": "numVotes()", +"a3bf06f1": "checkOwners(address)", +"a3bf1a09": "verificationFeeBalances(address)", +"a3bf224b": "underlyingTokens(uint256)", "a3bf5b9a": "revokePermission(address)", "a3bfdf47": "closeSession(uint256)", "a3bfe069": "_sumActivePerks(uint8[32])", "a3c07c6a": "removeHatchingTime()", "a3c0a477": "crowdsaleIsActive()", +"a3c0b95b": "NFTs(uint256)", "a3c1954e": "supporter()", "a3c1d83d": "forgiveMeOnBehalfOf(address)", +"a3c2710d": "lastRewardUpdate()", +"a3c28b03": "_canSchedule(address)", "a3c28dfc": "eventExists(uint256)", "a3c2c462": "totalReceived()", +"a3c2da69": "TokenCreated(bytes32,address)", +"a3c2fb11": "getMMCachedLiquidity(address)", +"a3c333d8": "closeTier2()", +"a3c3c0ad": "collectedRewardForTransferRelayer()", +"a3c3f9b5": "isUnderChallenge(uint256,uint256)", "a3c441e7": "setAdvisoryWallet(address)", "a3c49da0": "DollarCoin()", +"a3c4a969": "zild_deposit(address,uint256)", "a3c50b32": "orderDetails(bytes32)", +"a3c54bb9": "setSource(uint256,address)", +"a3c56615": "initialize(address[],address[],address[],uint256[])", +"a3c573eb": "bridgeAddress()", +"a3c595c9": "getTransactionInfo(uint256,uint256)", +"a3c5dcce": "mintForwarder(uint256,bytes32,address[])", +"a3c5fd20": "createSecurity(bool,address,address,uint256,uint256,uint256,uint256,uint256)", "a3c66c1d": "notEqual(bytes32[],bytes32[],string)", "a3c68e3d": "CancelGameAfterResultsPublished()", +"a3c7644e": "withdrawFees(uint8,uint8)", +"a3c787d3": "stakeRequestHashes(address)", +"a3c863a3": "setAssetOutcomeHash(bytes32,bytes32)", "a3c86bef": "AcademyToken(address)", +"a3c88738": "wrapBNB(address)", "a3c88b31": "addInternalBalance(uint256)", +"a3c89c4f": "invoke0(bytes)", +"a3c8e393": "callme()", "a3c8ef7a": "signedByWhiteHat()", "a3c9df3f": "plutocrat()", "a3c9fc7d": "_withdrawTo(uint256,uint256,uint256,uint256)", "a3ca17b2": "getUSDETHPrice()", +"a3cabd1f": "approveadd(address,address,uint256)", "a3cb3e97": "removeHatchingTimeWithToken(address)", "a3cb679d": "getTotalBets()", +"a3cbae46": "lastAccountingUpdateTimestamp()", "a3cbf67d": "NewBOP(address,address,address,uint256,bool,uint256,string)", +"a3cc2bf1": "setnameregcost(uint256)", "a3cc8b9c": "changeRateUSD(uint256)", +"a3ccb280": "permanentlyDisableEscapeHatch(uint256,bytes,bytes)", "a3cd2d78": "nextReward(uint256)", "a3cd4065": "ReceiveBTC(address,uint256)", +"a3cd8ac4": "notifyRewardAmount(address,uint256,uint256)", +"a3cdee49": "_snapshotBalance(address)", +"a3ce0c06": "setEmergencyShutdownProcessingTime(address,uint256)", "a3cf3ec0": "lowestAddressReserving()", +"a3d06eb4": "getVat()", "a3d07452": "fightAuction()", +"a3d08038": "skipDemandsWithTooLowPrice(uint256,uint256)", +"a3d15531": "_pauseOn()", +"a3d1bc47": "createDeal(uint72,uint72,bytes32,string,address,string,bytes32,bytes32,string,uint72)", +"a3d205f4": "getUserPendingDeposit(uint256,address)", "a3d2078b": "TokenSaleOpened()", "a3d23e52": "round2Cap()", +"a3d291ba": "coinBag(address)", +"a3d2e924": "land2ResourceMineState(uint256)", +"a3d31a45": "NewVote(address,uint256,uint8)", +"a3d39812": "doBet(uint256,uint256)", "a3d3a265": "setCreditBond(address)", +"a3d465f2": "CancelPaymentGlobally(uint256)", "a3d4e4b5": "buyItem(uint8,uint8,uint256,uint256)", +"a3d4f525": "_updateNexenTokenAddress(address)", +"a3d52638": "borrowLiquidation(uint256)", "a3d53934": "MegaToken()", +"a3d53d18": "extraNonce(address)", "a3d5e8e0": "_update(uint256,string)", "a3d5ec39": "PlynToken()", "a3d646fe": "ETHEUR()", "a3d658dc": "extendLiquidationPeriod(uint256)", +"a3d6792b": "LogAuctionFundsIn(address,uint256,uint256,uint256,uint256)", "a3d6f9a9": "publicKeys(address)", +"a3d70e7e": "calcGameLength(uint256)", +"a3d71fee": "addAcceptedStableCoin(address,address)", +"a3d7a9e4": "setRate(uint256,uint256,uint256,uint256)", +"a3d7afa3": "updateAggregatorsList(address[],address[],address[])", "a3d7bd43": "doSend(address,uint256)", +"a3d7c749": "acceptContractDepositor()", "a3d823ad": "changeORACLIZE_GAS_LIMIT(uint256)", +"a3d835c0": "newItem(string,string)", "a3d87805": "TerraToken(uint256)", +"a3d8829b": "synthetixReceivedForSynths(uint256)", "a3d88453": "isAvailableAccount(address)", +"a3d89844": "totalEscrow()", "a3d8fdd5": "totalAccessorySeries()", "a3d94402": "safeMathAdd(uint256,uint256)", +"a3d9a940": "referrers(uint256,uint256)", "a3d9c3d1": "ApprovalHash(bytes32,bytes32,uint256)", +"a3da7768": "ChangeContract(uint256,address)", "a3dab216": "setOpeningClosingTime(uint256,uint256)", +"a3dac5c7": "addTest(uint256)", +"a3db3500": "addEntry()", +"a3db50c7": "deployPairFactory()", +"a3db84d6": "comandosPath(address)", +"a3dc3800": "canRagequit(uint256)", +"a3dc57c5": "ParetoAddress()", "a3dc65a7": "wipe(address,bytes32,uint256)", "a3dc8a7a": "exrate()", "a3dcb4d2": "receiverAddr()", "a3dceacb": "MessageSent(uint256,uint256,string,string)", +"a3dd2327": "getStableTokenAvailable()", "a3dd2619": "getCurrentStatus()", "a3dd2b3e": "projectInfo(address)", "a3dd3aa7": "setGBT(address)", "a3ddc24a": "purchaseDeposit(address,uint256)", +"a3de84c4": "change_subordinate_salary(address,uint256)", "a3de9354": "createDividendWithCheckpoint(uint256,uint256,uint256,int256)", +"a3deca1f": "taxedSupply()", +"a3ded8e7": "PolicyAttributeAdded(uint8,uint256,uint8)", "a3def923": "create(address,bytes32)", "a3df30b4": "GIDe()", "a3df870a": "hentaisolo()", +"a3df8bb1": "claimComp(address,address[],address[])", +"a3dfba8f": "stakeBNB(uint256)", "a3dfc364": "StartGame()", "a3dfcb0d": "_setUniqueValue0(uint256)", "a3dfdf30": "read_i64_array()", +"a3e07108": "newMinter()", +"a3e07e04": "_getTradedCycle()", +"a3e0b295": "pendingMintedUBC()", +"a3e111c0": "getMaintenanceMargin(bytes32)", +"a3e11525": "changeAllocated(uint256)", "a3e135fa": "reclaimTokien(address,address,uint256)", "a3e14d74": "getLowerBoundBlocksTillGameEnd()", +"a3e18b4f": "PreviousGuesses(uint256)", +"a3e1944f": "__Governable_init(address)", "a3e1f666": "getCreatorMetadataOfHistoricalMetadata(string,uint256)", "a3e20625": "giveReputation(address,bool,string)", "a3e20d71": "transferUnPaidFundAccount(address,uint256)", +"a3e26d60": "decreaseToken(address,uint256)", +"a3e271e5": "updatePresalePrice(uint256)", "a3e29360": "ownedTicketIdList(address)", "a3e298d1": "VIBETPerEther()", +"a3e2afc9": "sponsoredAmount(address)", "a3e2b1de": "getProjectArbiter(bytes32)", "a3e2ce24": "getTokensAndAmounts()", +"a3e2e864": "SumOfInvestments(address)", +"a3e2f3c6": "getArbitraryMerkleTree(uint256,uint256)", "a3e31246": "setLucky()", "a3e3a8e0": "withdrawEthPool(uint256,uint256)", +"a3e41eab": "MAX_REWARD_JOYS_PER_BLOCK()", "a3e486d1": "ptc_balance(address)", +"a3e49797": "maxTimeBank()", "a3e4c0c4": "setRandomizer(uint256)", +"a3e5301c": "resolveToken()", +"a3e58d69": "buyWerewolfAsset(uint256,uint256,address)", +"a3e59316": "_burnedSupply()", "a3e667b3": "releaseMany(uint256,uint256)", "a3e67610": "tokenOwner()", +"a3e68f54": "LetUSDTVaultEarn()", +"a3e6ba94": "latestPrice()", "a3e7061d": "getPaintingIdAtIndex(uint256)", +"a3e7247a": "isDepositSkiped(address,uint256)", "a3e76c0f": "receive()", "a3e787b5": "FITToken()", "a3e831b4": "NewTokenFromFactory(address,address,uint256)", "a3e860fe": "DEFAULT_RATE()", "a3e8b6db": "MetrumcoinShares()", +"a3e8ec7c": "getVestingPercentage()", +"a3e94ddd": "getBorrowSnapshot(address)", +"a3e9ec73": "changeResolverAllowancesDelegated(address,address[],uint256[],uint8,bytes32,bytes32)", "a3ea1376": "removeListingInternal(uint64)", "a3ea478f": "setTier1Participants(address[])", +"a3eae9d1": "setDefaultEpochLength(uint256)", +"a3eb2792": "markMaster()", +"a3eb29fd": "DevLocker()", "a3eb6436": "TOKETH_PRESALE_TWO()", "a3ebb0b3": "getConsideration(uint256)", +"a3ebe71c": "enableRerouting(bool)", "a3ebeab7": "testConcatMemory4Bytes()", "a3ec138d": "voters(address)", +"a3ec191a": "deployBlock()", +"a3ec30fe": "boardroomGovernanceRecoverUnsupported(address,uint256,address)", +"a3ec3d7b": "drawReferPending()", "a3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", +"a3ec6b60": "isCroupier(address)", "a3ecbc33": "DSPUnregistered(address)", +"a3ed4207": "NewSale(address,uint256,uint256)", +"a3ed5be6": "finishAuction(address,uint256)", +"a3ee2238": "getMultiplierSum(uint256)", +"a3eebcb0": "press_D()", "a3efc756": "transferPreICOFunds()", +"a3f01e59": "functionById(bytes4)", +"a3f0f60f": "isWhitelistStakePool(address)", +"a3f0fa20": "getCashAfter(address,uint256)", "a3f144ae": "OFFSET19700101()", +"a3f14e96": "getLoanData()", "a3f1bd35": "getDouble()", "a3f1ee91": "RequirementChange(uint256)", "a3f22739": "payout(uint256,uint256,bytes32,bytes32)", +"a3f24224": "createUniverse(address)", "a3f2a813": "StartsAtChanged(uint256)", +"a3f2b45b": "getHalvFactor(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])", +"a3f4b573": "updateWithdrawAddress(address)", "a3f4df7e": "NAME()", +"a3f55db1": "AlgorithmReverseHalving(uint256)", "a3f5a178": "approveTakeover(uint256,address)", "a3f5c03d": "launchInvestment()", "a3f5c1d2": "nexus()", @@ -93782,49 +171629,79 @@ "a3f70ed3": "party_a()", "a3f7c989": "enableStorage(bool)", "a3f7e26d": "finishMintingIssuer()", +"a3f7edb8": "isAuthorizedToBuy(address)", +"a3f81da0": "depositWei(uint256)", "a3f8eace": "releasable(address)", +"a3f90075": "getTaxTierLargeFee()", +"a3f925dd": "transferableAddresses(address)", +"a3f9311a": "userNetworkRewardHasRecord(address)", "a3f991a5": "totalPot_()", +"a3fa5648": "convertToRecs(uint256[])", "a3face0b": "setInteractionPrice(uint256)", "a3faef60": "MicroBitCoin()", "a3fb5917": "getFirstOrder()", "a3fb8f15": "getRaisedPOLY()", "a3fbbaae": "changeManager(address)", +"a3fbeb19": "confirmRoot(address)", "a3fc136a": "signedApproveSig()", +"a3fc1c3d": "totalDEFLCTCRBLPTokensMinted()", "a3fc32c8": "getWLInfo()", "a3fc81cb": "buyTokensViaBackend(address,uint256)", "a3fca677": "LogBuy(address,address,uint256,uint256)", "a3fcafb9": "soldCoins()", "a3fcf9bc": "operationsPercentOfTotal()", +"a3fcfd43": "winningChoice()", "a3fd6d0e": "feePaid(bytes4,uint256)", "a3fdfee3": "deny()", "a3fe0dc7": "userCrateCount(address)", +"a3fe1ade": "airCountOf(address)", +"a3fe21e9": "payoutOccured(address,bytes32,uint256)", "a3fe70cb": "exchangeEnd()", +"a3fe7950": "getVestingAmount(address)", +"a3feae58": "addTeamByAth()", +"a3fee623": "drw(uint256)", "a3ff0ea2": "issueAsset(bytes32,uint256,string,string,uint8,bool,address)", "a3ff31b5": "getTokenStatus(address)", "a3ff428e": "angelCardSeriesCollection(uint8)", "a3ffac0d": "td()", +"a4000115": "MintAgentReplaced(address,address)", +"a4003ad4": "appointeeVote(address,uint256)", "a400594d": "lockAddress(address,address)", "a4009e23": "TEST_MODE()", "a400be54": "coinSendSameValue(address,address[],uint256)", +"a4012b21": "changeSupplyController(address)", "a401d24d": "assignToken(address,uint256)", "a401e585": "withdraw_privatefund(bool)", "a4036b1c": "getAdPriceHour()", "a4039098": "StartCompetitionEvent(uint32)", "a4039a2a": "createNonRepeatableVpfFactory(string,bytes32,uint256,uint256,int256[])", +"a403e4d5": "assetDefaultStrategies(address)", +"a40460b1": "changeRewardPerTokenInWei(uint256)", +"a4047b41": "receiverOf(address)", "a404f291": "microRate()", "a40544c3": "notifyCancelSellOrder()", "a4055f62": "freezeAccounts(address[],bool,bool)", +"a40601ee": "reactivateProfile(address,uint256)", +"a4063dbc": "pools(address)", "a40668f5": "testDeregisterProduct()", +"a40680da": "xrune()", +"a406aaa5": "_costFee(uint256)", +"a407c1cc": "AddressDeauthorized(address,uint32)", +"a407cf7e": "arbtwocount()", "a407db23": "GHK()", "a407ee79": "bytes32ToAlphabetString(bytes32)", "a4083849": "right44(uint256)", "a4086854": "approveTransfer(uint256,address)", +"a408b1f5": "test1(address)", +"a4092174": "joinAsClient()", "a4093718": "issueToken(uint256,uint256)", "a4094a0d": "calculateFeeForAccount(uint256,uint256,address)", "a409eb7b": "hasRequested(address)", "a40a485f": "deathData_v3()", "a40a99ac": "getInsertPointForNumTokens(int256,address,uint256)", +"a40ac7f9": "MINT_SERVICE_NAME()", "a40ae4b7": "_uintToBytes(uint256)", +"a40b56b9": "setupFee()", "a40bc352": "crowdSalePause()", "a40c0a54": "USDGamblingToken()", "a40c5221": "updateTokenAmount(address,uint256,uint256)", @@ -93832,15 +171709,30 @@ "a40cd3f3": "minContributionInWei()", "a40cee9c": "updateIdentityImageURL(address,bytes32)", "a40d32fe": "minPaymentAmount()", +"a40d3518": "getPendingClaimDetailsByIndex(uint256)", +"a40d6123": "unlockRewards(uint256)", +"a40db290": "getTimeRewardList(address)", +"a40dd85c": "isTextEmpty(string)", "a40e0b91": "testGoalReached()", +"a40e1424": "generateUserWallet()", +"a40e260b": "yieldFarmingIIEndBlockNum()", +"a40eb4de": "updateGrainContract(uint256,string,string,uint256)", "a40edb07": "processVerification(bytes32,string)", "a40f1796": "prefixedHash(address)", +"a40f1aa5": "reserveGiveaway(uint256)", +"a40f9ae3": "_getFunctionName(bytes4)", +"a40f9b4c": "DistributeRewards()", "a40fbd2b": "makeKebabs(address)", "a410424e": "isMoneySent()", "a4109017": "VanityTransfered(address,address,string)", +"a41090bb": "totalTrophies()", +"a41098bf": "instaIndex()", "a410a7f2": "getParticipantTickets(address)", +"a410c623": "TransferEnabled(bool)", "a410f4b1": "changeFeePercentage(uint8)", "a4112088": "Add_Company(uint256,string,string)", +"a411b819": "discountForKnights()", +"a411f182": "forceReleaseReserve(bytes32,bool)", "a412c6fc": "getRules(string)", "a412f87c": "verifyInvestment(address,uint256)", "a412fcc7": "defineType(string,uint8,uint8,uint32,uint8,uint32,uint8,uint32[5],uint32[5],uint32[5])", @@ -93848,63 +171740,114 @@ "a41347e3": "usersCanTransfer()", "a4136272": "MAX_TOKEN_SALES()", "a4136862": "setGreeting(string)", +"a41423c0": "makerLock()", +"a4142ac4": "setNameSale(uint256,address,uint256)", "a4144681": "RK40Z()", "a414b00d": "SUNToken()", "a414b379": "addContact(address)", +"a414b3ea": "LogOwnerChanged(address)", "a414e089": "Dimacoin()", +"a4151942": "TotalDistrubutedAmount()", "a415833b": "numPurchasesOf(address)", "a415965c": "refillMultiSigMintPool()", +"a4159ed8": "totalReturned(address)", "a415a93e": "initWithShips()", "a415b8eb": "getCCH_edit_31()", +"a415bcad": "borrow(address,uint256,uint256,uint16,address)", +"a415d6cb": "_getLow()", "a416b263": "charAt(bytes32,uint256)", "a416b48c": "getActionCount(uint256)", +"a416e3cd": "writeOption(uint256,uint256)", "a417357c": "unpauseTokens()", +"a4187a60": "burnFungibleBatch(address,uint256[],uint256[])", +"a418da31": "getSpendable(address,address)", "a419165e": "TokenCappedCrowdsale()", "a41942a4": "transferCuratorship(address)", +"a419615b": "ReceivedEther(address,uint256)", +"a419a333": "setChargeLogic(address)", +"a419aaa0": "removeResouceLPToken(address)", "a419b0e7": "set_milestone_details(uint256,string,string,string,string,string)", +"a419b87d": "hasInviter(address)", +"a419c615": "exchangeInformation(address)", "a419f1e7": "NewPlayerAdded(uint256,uint256)", +"a41a639f": "returnCar()", +"a41a66c9": "SaleToken(address,address,uint256,uint256,uint256)", +"a41a6d0d": "Delivery(address,uint256)", "a41a9445": "getStopTransfer(address)", "a41b3887": "setPrefixPrice(uint256,uint256)", "a41b9c31": "unconfirmAddress(address)", +"a41c4475": "removeAuthorizedExternal(address)", "a41d0584": "fixAddress(address,uint256)", +"a41d3c2e": "isETH()", +"a41d7df8": "shareBondToken()", +"a41d7f04": "showBestOffers2(bool,uint256)", "a41da348": "fomo3d()", "a41dedcc": "testAbs()", "a41e61a4": "minSaleBalance()", "a41e7d51": "updateERC165Cache(address,bytes4)", "a41f0069": "GershToken()", "a41fd917": "getUnprocessedQueryList()", +"a41fe49f": "withdraw(uint256,uint256,uint256)", "a41ff1e5": "maxMintingDays()", "a4201125": "sanToLower(string)", "a4202504": "getPhaseSold(uint256)", "a4202615": "makeAdoptionOfferToAddress(bytes5,uint256,address)", "a4204e39": "getQuotes()", +"a4205967": "orderWithdrawEpoch(address,address)", +"a420d700": "retAnotherSenderAddr(address)", +"a420d8d9": "uninit(uint256,uint256,uint256,uint256,bytes32)", +"a42156ad": "A9(bytes)", +"a4215e50": "whaleIndexToApproved(uint256)", +"a4216e11": "investTypeTwo(address)", +"a421c59f": "tokensReserve()", +"a42206c9": "drawing(uint256)", "a42214b2": "cancelAuctionEmergency(uint256)", +"a4228d88": "switchEquip(uint256,uint256,uint256,uint256,string,uint8,bytes32,bytes32)", "a422b761": "tokensIssued(address)", "a422c0ca": "updateBonusParameters(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a4230bd5": "addAdmin(address,bool)", "a4238d31": "receiveBalanceUpdate(address)", +"a423cd29": "withdrawCommittedDepositFrom(address,uint256)", +"a4240de6": "closeVpf(bytes32,uint256[],uint256[],bytes32)", "a4245527": "getPaintingOriginal(uint256)", +"a4248ceb": "StateChange(uint8)", +"a424b7a3": "inviteLower2(address)", "a424fa49": "NPXSToken()", "a42533c8": "tubParamUpdate()", "a4254fb4": "couponTokenBountyAddr()", "a425b752": "destroyStake(address,bytes32,uint256,uint256)", +"a425fa9f": "returnFromContractLiq()", "a4262254": "calcFib(uint256)", +"a426324f": "stateIsNotDead()", +"a4263776": "BuyMedGravityTraining()", +"a42644b8": "withdrawFD(uint256)", "a4268de6": "oracleItQuery(uint256,string,string,uint256,uint256)", "a426cd19": "validPLAContract(uint32,uint32)", "a4275535": "XTYF()", "a4276533": "getProposalNum()", "a427c5d9": "bonus(uint256,address[],address,uint256[])", +"a427d5c0": "getBBOXPoolAdds()", "a427ee36": "FruoCoinBETA()", "a428033f": "minechaincoin(uint256,string,uint8,string)", "a428517b": "Converted(address,uint256)", "a4288d17": "tokensForReservedFund()", +"a428e666": "getExtensionName(bytes32)", +"a428f3c3": "whenLocked(address)", +"a4293cd6": "consumeSParty(uint256)", "a429845e": "newCrowdsale(bytes32,uint256,uint256,uint256,uint256)", +"a42a06d3": "BuildMaxAsset()", +"a42a23d2": "isBookAvailable(uint256)", +"a42a9fcd": "initNCTMultiplier()", "a42aa488": "checkRevert(uint256)", +"a42ac660": "maxVMRPerUser()", "a42ac803": "getBonusAffiliate(uint256)", "a42ad8b3": "NomuraDynamicsCoin()", "a42b0d88": "advisorsPool()", +"a42b6890": "tokenChainlinkMap(address)", "a42b6bf1": "setStorageContract(address,bool)", +"a42c69a9": "FACTOR_PRECISION()", "a42cb160": "updatePlayerFund(uint256,address,uint256,uint256,uint256,uint256)", +"a42d5083": "depositToken(address,address,uint256,uint256,uint256)", "a42d630c": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a42dc008": "newKudosToken(string,string,string,uint8,address)", "a42dce80": "setFeeCollector(address)", @@ -93917,7 +171860,17 @@ "a42f126c": "charityClaim()", "a42f1edb": "market1()", "a42f3f9d": "getTAOCurrencyBalances(address,address,address,address)", +"a42fab1a": "joinArb(uint256)", +"a42fefec": "refRate()", +"a42ffef7": "removerHeredero(address)", +"a4300ee5": "getAuthorAddress()", +"a4302044": "supplyBalTargeted()", +"a430be6c": "rewardEscrow()", +"a431229d": "deboardInvestor(address,address)", +"a4314100": "withdrawTokens(address,address[],uint256[],uint256[])", "a4316c46": "MarketingToken()", +"a4317ef4": "tgeTimestamp()", +"a4323b1c": "_verifyXDomainMessage()", "a4325485": "getCreatorBalance()", "a43293b4": "getTransaction(address,uint256)", "a432cdb0": "Tier_Rainmaker()", @@ -93928,217 +171881,408 @@ "a433f390": "approveAndTransferFundToCreator()", "a4341ab0": "setCount(address,uint256)", "a4343ae9": "onContribution(uint256,address,uint256,uint256)", +"a43564eb": "harvest(uint128)", "a43569b3": "getValidatorDescription(address)", +"a43581ed": "lockUniswapTokens()", "a43655c4": "rejectRequestPause()", "a4366a8a": "processPayment(address,uint256,uint256,uint256,bool)", "a4368de7": "addBonus(string,uint256,uint256,uint256,uint256,string,uint256,string,uint256)", +"a4369fd9": "sponsorToComision(address)", +"a436e33b": "getUintsOwnerCount(address)", "a437164b": "assignUserWallet(string,address)", +"a43737e9": "purchasers(uint256,uint256)", "a43772bd": "thirdXRChangeBlock()", "a43796ce": "getSecretSigner()", "a437ab52": "setDevelopersFee(uint8)", "a437e07a": "signAuthorship()", "a437f91f": "doDistroAmount(address[],uint256[])", +"a4381450": "maxMktSupply()", "a4381dd4": "StanleyToken()", +"a4389461": "setSurplusBuffer(address,uint256)", "a438d208": "VOTING_DURATION()", "a43914da": "getRootEdge()", +"a439230b": "minrndpay()", +"a4396042": "approve_901(address,uint256)", "a4399263": "finalise()", +"a4399b52": "updatePoolFee(uint256,uint256)", "a439d3fa": "ChangeOfRules(uint256,uint256,int256)", +"a43ac403": "queryEOSTokenBalance(address)", "a43b2ed0": "Test6()", "a43b5e46": "buyWeapon(uint256)", +"a43b6a8e": "multipleBid(uint256[],uint256[])", "a43b7cd5": "carTaxiToken()", "a43b92a2": "tournamentIncentiveCut()", "a43b9423": "triggerPreJackpotLimit()", "a43be57b": "endPresale()", +"a43be948": "addMargin(uint256)", +"a43c48d0": "storeUsedTicks(int24,int24)", "a43c49fc": "mul16(int16,int16)", "a43c5415": "lastBlock_a3Hash_uint256()", "a43c6002": "getTokensByGame(uint32)", +"a43cb496": "lpPoolIncentiveRate()", "a43cbe1c": "setThirdPartyDepositorDisabled(bool)", "a43d12a7": "getParticipantesB()", +"a43d5e94": "getConvertibleTokenSmartTokenCount(address)", "a43d76e9": "isValidPrice(uint256,uint256)", +"a43d7fd4": "enableQuickSell()", +"a43d8437": "getNextRewardTimestamp(uint256)", "a43d8654": "getSeason(uint256)", "a43dc510": "yesBuyer(uint256,uint256)", "a43e04d8": "removeContract(bytes32)", "a43e0c2b": "calclulateBonus(uint256)", +"a43e2533": "registerStandardAndCallback(bytes4,bytes4,bytes4)", "a43ea59b": "PublicSale(address,address,address)", +"a43fc871": "_minStakeAmount(uint256)", "a43fecbc": "setUsername(bytes16)", +"a44026a3": "cEth()", +"a4404dec": "TKOFoundationWallet()", "a4406bcd": "placeSellOrder(uint256,uint256)", "a44081d1": "startPhase1()", "a440a190": "getKeyPrice()", +"a440ab1e": "updateCheckPointBlockInterval(uint256)", "a440b21a": "setPortfolioManager(address)", "a440dd87": "sigExists(bytes32,address)", "a441698b": "getStockOrderInfo(bool,uint256,uint256,uint256)", "a441c302": "operationAddress()", +"a441d067": "emergencyExit(address)", "a442414f": "sumInvested()", +"a4425505": "testDataTypeBool()", "a4425c55": "lastInvestorsProfitSum()", "a442b824": "respawnGame()", "a442d820": "verifyExtraData(bytes32,bytes32,uint256)", "a4430321": "eachPUSTprice()", +"a443238f": "rmt()", +"a4432a9e": "isApprovedForAll721(address,address,address)", "a4438334": "updateSettings(uint256,uint256,bytes32)", "a4439890": "sweepUnallocatedDividends()", "a4439dc5": "commitPeriodActive(uint256)", +"a443fbc4": "checkRemainingTime()", +"a443fcb8": "setTopicFee(uint256)", "a444502b": "whitelistAccount(address,uint256)", "a4447515": "getMakerBetBasicInfo(uint256,address)", "a444ae41": "sourceContract()", "a444f5e9": "run(uint256)", +"a44507fe": "approve_564(address,uint256)", "a4453336": "depositGTA(uint256)", "a4453a96": "totalBuyersMapping()", "a4453ecf": "splitEth()", "a445dc5a": "tokensBoughtWithBTC(address,uint256)", "a445f30d": "setFeeDistributionAndStatusThreshold(uint8,uint16[5],uint256)", +"a4461b91": "_rejectRelayedCall(uint256)", +"a446202f": "conv(bytes25)", "a4464252": "priceUnitFix(uint256)", +"a446c2db": "getActiveAmount()", +"a446ff57": "fundAppeal(uint256)", "a447089e": "eniggerToken()", "a447405e": "_getTravelPrice(address,uint256)", +"a4474cf9": "getChassis(uint256)", "a447ff4f": "DXContracts()", "a4482f41": "setUniquenessIndex(uint32)", +"a44888af": "changeAllocPointsForSwapReward(uint16,uint16,uint16)", "a448afda": "BalanceChanged(address,uint256)", +"a448ed4b": "plyrNameList_(uint256,uint256)", "a448f8e0": "OuterContract()", +"a44928b0": "transferAsset(string,string,string)", +"a44962d1": "getIsGamer(address)", +"a449a562": "asdasdasdasd(uint256)", "a449a62e": "setDSTWalletLMNO(address)", +"a449a713": "vipLevel(uint256)", +"a449d795": "logTopUpFee(address,uint256)", +"a449e8eb": "testSha256()", "a44a00c3": "areTokensSold()", +"a44ab213": "foo6(address,int256)", "a44b1756": "getMyDrugs()", "a44b47f7": "TotalSupply()", "a44b6b74": "setColor(uint256,string)", +"a44be536": "JACKPOT_SEED_FRACTION()", +"a44c00da": "lastHarvestAllTimeStamp()", +"a44c88bf": "gameOver(bytes32)", "a44cff28": "CypressOrganization(bytes,uint256)", +"a44d06f5": "executeLimitOrder(address,uint256,address,uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", "a44d0eb3": "MAKJLEB()", +"a44d7a0a": "bountyID()", "a44da065": "NigerTokenICO()", +"a44dacdd": "punishings(uint256)", +"a44dbf79": "setPayoutCut(uint256,uint256)", +"a44dc8f5": "totalFreeMintFrozen()", "a44dd0f1": "ico2Cap()", "a44de4e7": "decreaseStepPct()", +"a44de50b": "setBrrrXAddress(address,address)", "a44e09db": "wadmin_burn(uint256,bool)", +"a44e2b23": "projectPartyFundDone()", +"a44e4547": "dino()", +"a44e6212": "versusOld()", +"a44eab97": "createMappableToken(string,string,uint8,uint256)", "a44ead73": "ApplyforCertification(string,string,string,string,string,string)", +"a44eb59a": "isBytecodeSafe(bytes)", +"a44ec96f": "odr()", "a44eda3c": "checkWithdraw(address,uint256,address)", +"a44f09e2": "getAssetLocation(string)", "a44f40e3": "optionPoolMembersUnlockTime()", +"a44f97c2": "Buying(bytes32,uint256,uint256,address,bytes32,address)", +"a4500c33": "setAutopay(bool)", "a4502cb8": "setExportFee(address,uint256)", "a45066e5": "SingularityTes25()", +"a45098f7": "uniswapEthPairByTokenAddress(address)", "a4516bb1": "SnapshotTaken()", "a4516fad": "currentGameNumber()", +"a451790a": "setNewToken(address,address)", "a4520aee": "collect(address[])", +"a4520f5c": "sdt()", "a45230ec": "get_amount_sell(uint256)", "a4530b4b": "testUpdateProgress()", "a4534ef7": "remainingSupply_()", +"a4538523": "flashBeamOrbiterTokens(address,uint256,uint256,address[],uint256,address[],uint256,address[])", +"a453ae86": "currentUnlockCost()", +"a453b36a": "handlerList(uint256)", "a453b639": "wuguAddr()", +"a453b6cf": "depositSavings(uint256)", +"a453f2ff": "OnEmitNewUnitsFromMainWallet(uint256,uint256)", +"a4541688": "_getEIP712Hash(bytes32)", "a4546876": "roots(address)", "a454b07b": "checkString(string)", "a454c5dc": "unlockStep()", "a45563ed": "UpdateSellAgentBounty(address,address)", "a4563e03": "totalPendingWithdrawals()", +"a456b702": "getBuoy()", +"a456d812": "allValue()", +"a456dd98": "updateTokenCommissionPercent(uint256)", +"a45722e5": "setParameter(uint16,uint16,uint256)", "a4575296": "pepFarm()", +"a457a62d": "getSectorSupplyLimit(uint16)", "a457c2ae": "clientSeed()", "a457c2d7": "decreaseAllowance(address,uint256)", +"a457cd3f": "withdraw100k()", "a457e1c0": "purchaseAsset(uint256)", "a457f27f": "card_titanium_minamount()", +"a457fd64": "_MAX_TX_SIZE()", "a45858b6": "setzUint256Array(uint256[2],int256)", +"a458be87": "poolLisaEthTokens()", +"a458d7ff": "InvalidOriginError(address)", "a458e34f": "setNewContractManager(address)", +"a4590dbf": "removeWBNBPair(address)", "a459ae28": "collectSellFee(address)", +"a459fc0b": "initialSupplyClaimer()", +"a45a23ef": "STATS_TYPE_INVITE_ZERO_REWARD_AMOUNT()", "a45a7371": "executeUpdateTransferFeeRateProposal(uint256)", "a45b1795": "getAllCardsModifierSecondaryVal()", +"a45b8c84": "addhospital(address,string)", +"a45bb8da": "UintToBytes(uint16)", +"a45c6858": "addFundingStage(bytes32,uint256,uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", "a45c793f": "restore(uint8[176],uint8,uint8)", "a45cbbf4": "sendAdvisorsTokens(address,uint256)", "a45cd953": "canPurchase(address,address,uint256)", +"a45d7965": "pTicketSum(address)", "a45d82bd": "signArchive(bytes32,string,string)", +"a45e0fbb": "refreshTruncateNode(address)", "a45e11ab": "orderMatchBuy(uint256,uint256,uint256,uint256,uint256)", "a45e1a6e": "getTokenCounters(uint256)", "a45e7cb5": "addEntry(string,string,string,string,string,address)", +"a45eb87c": "countryWonAndPlayersValueIncreased(string,string,string)", "a45ee32c": "nameOfIdentity()", +"a45f19bc": "getPublicResolverNode()", "a45f2057": "caltoken()", +"a45f47fd": "Unpaused()", "a45f4bfc": "kittyIndexToOwner(uint256)", "a45f5685": "setOwnerEarnings()", "a45f71ff": "increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", "a4604a33": "changeBuyFeePercent(uint256)", "a460b817": "updateTicketStatus(uint256,uint8)", +"a460b89c": "payerRefundAddress(bytes32)", "a460bd6c": "presaleRemaining()", "a4618691": "squak()", "a4619682": "registerWithDAI(uint256,address)", "a461cadf": "WHOLE_ETHER()", +"a461e5fa": "verify(address,string,string,uint256,uint256,bytes32,bytes32,uint8)", "a461fc82": "SELFDESTRUCT_DELAY()", "a4620d67": "shareholder3()", "a4623cc4": "addHero(string,address,uint256)", "a462f87f": "AICoinToken()", "a462fb7b": "getFinalAnswer(bytes32)", "a4633704": "NotifyMe(address,address,uint256)", +"a4636290": "burnPool(uint256)", "a463685f": "AllocatedCrowdsale(address,address,uint256,uint256,uint256,address)", "a463a500": "setUpgradeHasBegun()", +"a463f903": "getCurrencyFromAssetAddress(address)", +"a464390f": "insertToPendingNodeListHead(address)", +"a464c487": "airdropamount()", "a464d265": "editor()", +"a464f447": "StartClaim()", +"a464fd3f": "whitelistedMilestones(uint256)", +"a4654ead": "claimNote(uint256)", "a4659ba2": "stakeConfirmed_Eth()", "a465e6ba": "committeeKickVoters(address,address)", +"a4666a8c": "tokenPerBNB()", +"a46675ae": "sunflowerMainV1()", +"a466c955": "nameTeam(uint256)", "a46841e1": "cnyEthRate()", +"a4689101": "kassiahomeAddress()", "a4689d48": "getroundendtime()", +"a4694653": "depositKAI(uint256)", +"a46985cc": "uniswapPairImpl()", "a4699cad": "resetWithdrawls()", +"a469a332": "signUp(string,string)", "a469b809": "getBetAmount(bytes32)", "a469e5aa": "getOwnerItemIds(address)", +"a469eeda": "teamByAth(uint256)", "a46a1219": "AcceptRouting(bytes32,bytes32,uint256,bytes)", +"a46a4233": "startSaleFRUIT(uint256,uint256,uint256,uint256,uint256)", +"a46a66c9": "DISCOUNT_ADDRESS()", "a46a891e": "fromBase(uint256,bytes8)", "a46a96d9": "calculateRegionSalePixelPrice(address[16],uint256)", "a46afef1": "getSponsoring(uint32)", "a46b3e9b": "treasuryDemurrageAmount(uint256)", +"a46b630f": "relyAdmin(address)", "a46b6593": "sendCandy(address)", "a46b8171": "excToken()", "a46c3637": "getWinnerCount()", +"a46c3f11": "getSymbol(string,uint256,uint256,bool,bool)", "a46c792c": "assignAgent(address)", +"a46c8505": "stakingPoolId()", "a46c8fee": "ItdFund()", +"a46cd795": "eStateChange(bool)", "a46d11dc": "gType()", +"a46d55e9": "ethStaked()", +"a46d8c0e": "oracleInterval()", +"a46dd54e": "proveBuy(bytes)", "a46dfb45": "ResolveChips(uint32[])", "a46efdb5": "getTokensForPreSale(uint256,uint256)", +"a46f360b": "WhitelistModified(address,bool)", "a46f3c7a": "getLiveMaxBet()", +"a46f4c21": "Admin_4(address,address,uint256)", +"a46f7d19": "numPledges()", "a46fbe1a": "fulfillEthereumChange(bytes32,int256)", "a46fe83b": "numAssets()", "a47001a8": "receiveEthPrice(uint256)", +"a4705294": "adminsList(uint256)", "a470afa7": "Evernal(address)", +"a4713020": "toInt(bytes16)", "a47255d7": "TimeWeekThree()", +"a4727272": "challengeTime()", "a472969c": "WithdrawFee()", "a472c868": "_storeReward(address,int32)", +"a47359fe": "minimumHODLTimeRewardable()", +"a47406f0": "ycrvUnit()", "a4754fac": "getValidated(uint256)", "a475b5dd": "reveal()", +"a475e0e3": "hilltakeover(address,address)", +"a4769071": "currentValidatorSetTotalStake()", "a476f3d3": "demurringFeeNum()", +"a4775772": "getUnderlyingToken(uint256)", "a4776955": "setselfdroptoken(address)", +"a4781164": "cancelRewardStream()", "a4785dfd": "ecverify(bytes32,uint8,bytes32,bytes32,address)", +"a478656b": "contractLock(bool)", +"a478b9e2": "createUniswapPairMainnetRFIETH()", +"a478fa8d": "banAddresses(address)", "a47905cd": "getBondMultiplier(uint256,uint256)", +"a4797c9b": "f(int8,uint256)", +"a479e508": "getEVMScriptRegistry()", +"a47a2e77": "addApprovedOBOAfterDeploy(address)", +"a47a6bd4": "getSessionEligibility(uint256)", +"a47aa502": "getTotalsTLPHarvest(uint8)", "a47abd0f": "testIsSuccessful()", +"a47ad26e": "globalcounter()", "a47ae542": "getCurrTotalInvest()", "a47ae71f": "getCurrTypePrice(uint256)", "a47b1a6c": "getContractsAddrs(address,address)", +"a47bd496": "setReward(uint256,uint256)", +"a47be718": "claimDailyStake()", "a47c4d64": "isAllocated3()", "a47c6b84": "cofounderSwitchAddress(address)", "a47c84bd": "getShiftedTokens(address,uint256)", "a47ce954": "bonussale_TokenCap()", +"a47d29cb": "projectIdToArtistAddress(uint256)", +"a47d4247": "getClaimableInterestEarned(address)", +"a47d5720": "vetoTransaction(address,uint256,string,bytes,uint256,uint256)", "a47e7110": "AnnoMedal()", "a47e713c": "ACCToken()", +"a47ed2e7": "getOwnedCard(uint256)", +"a47f07c0": "enterFor(address,uint256)", +"a47f1fe2": "takeOrders(bytes32[],address[],uint256[],uint256)", +"a47f24c0": "SENIOR_MEMBERLIST_ADMIN_REMOVE()", "a47f519b": "CPCE()", +"a47f6513": "minLeverageRatio()", "a47fcc7c": "proposePartnerAllocation(address,uint256)", "a4800172": "buyDiscountTTMByETH(uint256,address)", "a48028aa": "valueOf(address)", "a480ca79": "collectFees(address)", "a481247c": "isKeyExist(address,address)", +"a481e08c": "f(uint256,bytes32)", "a48205cb": "emaValue()", "a4821719": "buyToken()", "a48255b7": "nextPVPBatleBlock()", "a4828bca": "TrineChain()", "a48296d9": "purchasePhoenix(uint256)", +"a4829a09": "clearG()", +"a482e35f": "exitVar()", +"a483e41c": "buyamount(address)", "a484f413": "payJosh()", "a48515fc": "castConstitutionVote(uint8,address,bool)", +"a4851a81": "isVotingSystem(address)", +"a4855c75": "UserFromGroupRemoved(address,bytes32)", "a48566ba": "serverSeed(address,bytes)", +"a4857364": "setCurveTokenIndex(address,address[])", +"a486309d": "setWhitelistedTo(address,bool)", +"a48636a7": "getSashimiAddress()", +"a48659cc": "getTransactionDataHash(address,bytes32,bytes,uint256)", +"a48710df": "showMyAddress()", +"a4871394": "Rebalancer()", +"a487174d": "pumpsCharacterLimit()", +"a48724e9": "hxyApy()", +"a4874d77": "retire()", +"a4875775": "withdrawEarnings(uint256[])", "a487bcd8": "winners()", +"a487da50": "COMMITMENT_MAX_WAIT_FACTOR()", "a487fd07": "ethFundsWallet()", +"a488680f": "token3CRV()", +"a488ba78": "arbAsse(uint256,uint256)", "a4893536": "_bonusToBettor(uint32,uint8,uint256)", +"a4893587": "pledgeSLP()", +"a4896a83": "notEqualAddressFailTest()", +"a489727f": "partAddresses(uint256)", "a4898fd5": "deployContract(address)", "a489a2c7": "sanityBounds()", +"a489e2e1": "winnerInfo(uint256)", "a48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", +"a48b0586": "init_proposal(uint40)", +"a48b5816": "_updateChallengeDuration(uint256)", "a48bdb7c": "results()", "a48be00b": "activateTokensForJury(uint256)", +"a48c1801": "stakingShares(uint256)", +"a48c3969": "required_confirmations()", +"a48c97e5": "getSpecsByModel(string,string)", "a48c98dd": "deployerAmount()", "a48cef4a": "oracleInterfaceCountdown()", +"a48d18bb": "test_DSProxyExecuteFailMethodAssembly()", "a48d9e70": "getIcoSupply()", +"a48daa4f": "rebase(uint256,uint256,uint256)", "a48de68b": "createPromoHero(uint256,address)", "a48e1ff7": "BonusWithdrawn(address,uint256)", +"a48f197d": "setStakeOn(bool)", +"a48f4c42": "teamTimelock4()", "a48fb972": "_sendReward(address,address,uint256)", +"a48fee86": "calculateHealthFactorFromBalancesInternal(address,uint256,uint256)", +"a4903036": "pip(bytes32)", "a49062d4": "MAX_LEVEL()", "a490a697": "totalBadges()", +"a490e534": "ASSESSOR_WRAPPER()", +"a4912aa4": "setParameters(uint8,uint64,uint64,uint256)", +"a49172aa": "mintMany(address[],string[])", +"a4921fcd": "updateMNEContract(address)", "a4923b8f": "placeIndexToOwner(uint256)", "a492ef60": "Participant(string,address)", "a4935f1f": "_tokenMetadata(uint256,string)", +"a4936d2e": "showthisaddress()", "a4938313": "getAdvancedTransfer(bytes32,uint256)", +"a493a499": "appeal(uint256,uint8)", "a493b39f": "getAdPriceWeek()", +"a4941f2b": "HAS_FOUNDERS_VESTING()", "a494411c": "allocateTokenForAdvisor(address)", "a4945a07": "ftestnetico()", +"a4946f6d": "DeadlineShortened(uint256)", "a494817b": "setIdle()", +"a4949f5e": "cancelMonitorChange()", "a4951771": "MeshPoint(string,address)", "a4952f19": "LogPolicyPaidOut(uint256,uint256)", "a4952f80": "getBytesName(string)", @@ -94146,18 +172290,33 @@ "a495c942": "set_topl_address(address,address,uint256)", "a4963c0b": "SAPOVAM(address,string,string,uint256,uint256)", "a49687d1": "stage4Deadline()", +"a496b274": "levelBonus(address,uint256)", +"a496fa60": "yourStakedUNEX(address)", +"a496fda9": "transformed(uint64)", +"a4974520": "RING_TOKEN()", "a4975aff": "raiseNumberOfCheckmarks(uint256)", "a4978a15": "applyLOT(uint256)", "a497d8c6": "privateTokenCap()", "a497e674": "setAuctionDuration(uint256)", +"a4982121": "set_ROUND_1_END_TIME(uint256)", "a4983079": "transferBalanceForPreSale(address,uint256)", +"a49877b6": "initializeOracles(address,address,address)", "a49886ce": "testToBytes32(bytes)", +"a4988719": "sushiRewardToken()", "a4997fac": "propertyAddressOf(uint256)", +"a499b5b5": "internalUpdateRates(bytes32[],uint256[],uint256)", "a499bc4a": "DECEX()", +"a499ffba": "simulateDocMovement(bytes32,uint256,bool)", "a49a1e7d": "setMetadata(string)", +"a49a4088": "claim(bytes32,uint256,uint256,address[],uint32,uint256[2][],uint256[])", "a49a42e1": "CrytoWorldCup()", +"a49a7c90": "findCreate2AddressViaHash(bytes32,bytes32)", +"a49b0fb6": "mintHXY(uint256,address)", +"a49bb37b": "depositHero(uint256)", "a49bb55c": "currentRoundMultiplier()", +"a49bcbeb": "getInfo(uint256,address[])", "a49c2bbb": "getBeneficiaryCash(bool)", +"a49c44d7": "setMinimumBalance(address,uint256)", "a49cc76c": "createCurrency(string,string,uint8,uint256,string)", "a49d03bc": "privateSell1Address()", "a49d53a1": "SmartRevshare()", @@ -94165,150 +172324,264 @@ "a49e0ab1": "complex()", "a49e4540": "mintCapInETH()", "a49ea0ab": "rankOf(bytes)", +"a49fe34a": "nftAddressAdded(address)", "a4a01e33": "payoutRewardsFor(address)", +"a4a0a301": "setRuleEngine(address)", "a4a0d801": "valueOfContract()", +"a4a11f73": "open(uint256,uint64,uint64,uint64,uint64)", "a4a1485b": "createEthInvestorRequest(uint256)", +"a4a173e3": "getInvestmentCap()", "a4a1a78d": "CertAdminAdded(address)", "a4a1a9bc": "fightTeams(uint16,uint8,uint8)", +"a4a1b5c1": "disableAdd(bool)", "a4a1e263": "getUsersCount()", "a4a249d6": "quicksort(uint256[])", +"a4a2850c": "exists(bytes32,address)", "a4a2a9f6": "init(address,uint256,uint256)", +"a4a2c40b": "fn()", +"a4a2de9f": "ETFtoken()", +"a4a2f24c": "setSecondTransferAddress(address)", "a4a33638": "NAST()", "a4a339ee": "doMint(uint256)", "a4a3513c": "Accelerate(uint256)", "a4a46f45": "LOG_InvestorEntrance(address,uint256)", "a4a47582": "Pyrgressive()", "a4a4c224": "setAngelLastBattleTime(uint64)", +"a4a521da": "withoutFeeAddresses(address)", +"a4a53a13": "proposalSignatures(uint256,uint256)", "a4a5a46e": "EUNO()", "a4a5e241": "setPrizeEndTime()", "a4a5f550": "price_exponent2()", +"a4a626ff": "fill(address[2],uint256,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"a4a637c4": "increaseAuthQuota(address,address,uint256)", "a4a6795a": "ReserveSupply()", "a4a68e44": "userlogin(address)", "a4a691ce": "parseResultCompatible(bytes)", +"a4a6c336": "confirmUniswapProxyChange()", "a4a75c6e": "tokensSoldAmount()", "a4a75edc": "registerDeal(address,address)", +"a4a78f0c": "selfPermitAllowedIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)", +"a4a7c9a4": "registration_duration()", "a4a7cf5c": "redeemWinnings(bytes32)", +"a4a7efa1": "batchDistributeRewardsFromRoboToken(address,address[])", "a4a83317": "emitChange(bytes32)", "a4a85b22": "fund(address,address)", "a4a8f8ea": "migrationHost()", "a4a92dd0": "_createToken(string,address)", "a4a94567": "setTokenContract(address,address)", +"a4aa3e03": "dayTracker(uint256)", "a4aac6ec": "diff(int256[])", "a4ab3e45": "buyerAddressTransfer(bytes32,address,address)", "a4ab69cd": "cancelBuyOffer(uint32)", "a4ac3e7d": "FrozenFu(address,bool)", +"a4ac72b8": "bTokenUnderlyingPrice(address)", +"a4acb914": "Problem3(string,string,address)", "a4acbcd6": "pregnantpuppies()", "a4ad1a5f": "verEntidades()", "a4adb24b": "createCourse(string,string,uint256)", "a4adc2f7": "freezeTokens(uint256)", "a4adc431": "fechVoteResultForCandidate()", "a4adcde3": "getSingleGuessInfo(uint32)", +"a4ae11cf": "acceptProp(uint256)", "a4ae32fd": "sampleBool(bool)", +"a4ae3b59": "feePercentETH()", +"a4aebb3f": "partnershipAmount()", "a4af1d1a": "totalPublicSaleStage()", "a4afaeb0": "AutoKen()", +"a4b017c2": "approve_830(address,uint256)", "a4b03f52": "internalLockAccount(address)", +"a4b0433a": "required_sigs()", "a4b06df2": "heapSort(uint8[])", "a4b0a36f": "exchangeRateUSDToToken()", +"a4b0e9cb": "relaseTime2()", +"a4b0f68d": "getListCandidateByDistance(uint256)", +"a4b0fc42": "emontRewards(uint256)", "a4b159c0": "benefitMicros()", "a4b16449": "transferTokensFromRetailersAddress(address,uint256)", "a4b195ff": "numVoters(uint256)", +"a4b1ade8": "getDisenchant(uint256)", "a4b1b020": "transferLockedTokensBackToUser(uint256)", +"a4b1b8ef": "teddy()", +"a4b1c243": "minPerTx(address)", +"a4b1c86b": "createLiquidityLauncher(uint256)", "a4b1ce55": "scheduleCall(address,address,bytes4,bytes,uint8,uint16,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4b1f42f": "assetList(address)", +"a4b22027": "closePositionFeeDecayPeriod()", +"a4b2409e": "requestRefund(uint256)", +"a4b28bf8": "setActionEXR(uint256,uint256)", "a4b31eb1": "bitWatt(uint256)", "a4b32bd7": "modifyRent(uint256)", "a4b3b042": "RDXToken()", +"a4b3e4e1": "setDandyAddress(address)", "a4b48828": "getOffer(address,address)", +"a4b4a75c": "setBPool(address,address)", "a4b52ef2": "hgt()", +"a4b56bf6": "setEnableStakeBonus(uint256)", +"a4b5c031": "CurLineSmaller()", "a4b5fa56": "blacklist()", +"a4b645eb": "mint(address,uint256,uint256,string,bytes)", +"a4b67ec3": "coreFinanceBit()", +"a4b6dcae": "balAddress()", "a4b7459a": "transferFromToICAPWithReferenceCallGas()", "a4b7f5ce": "resolutions(uint256)", +"a4b8457a": "simpleICO(string,string,uint8,address,uint256[],uint256[])", +"a4b85142": "stakesMonthly(address)", +"a4b88e7b": "finishChangeStrategy()", "a4b8a543": "sacarETH()", "a4b8c2e7": "restart(bytes20,bytes32)", "a4b910fb": "WithdrawToken(uint256)", "a4b916e2": "mintB2BC(address,uint256)", +"a4b96766": "yieldDividendFeeRate_()", +"a4b99ea8": "contractsWhiteList(address)", +"a4ba067e": "sink(uint256)", "a4ba2971": "addMemoryImageSlice(uint256,bytes)", +"a4ba59c7": "convertEthToToken(uint256,address,uint256)", "a4ba5bdb": "Leonidas()", "a4bad0ae": "vestingsBalance(address)", "a4bb1324": "initGame(address,uint256,bytes32,bytes32,bytes32)", +"a4bb170d": "currUserID()", "a4bb252e": "LogGameCreated(uint256)", "a4bb43d2": "Beonbox()", +"a4bb8e7d": "setBasics(address,address,address,address)", "a4bbded4": "MAX_ICO_SUPPLY()", "a4bbf1a7": "LAUCHCONTRACT()", +"a4bbf5cc": "getCurrentValueAndSend(uint256)", +"a4bc4405": "getVoteResult(address,address)", "a4bc51d4": "PrivateSocialPlatform()", "a4bce83c": "CSCToken()", "a4bd7a20": "currentBoundary()", "a4bd7b8d": "countApproval()", "a4be2ea2": "HardClear()", +"a4be543a": "spawnFee()", "a4be64a4": "warriorBlock()", +"a4beab79": "ItemStatusChange(address,address,bytes32,uint8,bool)", "a4beda63": "lockTime(address)", "a4bef732": "userCancelOrder(address,address,uint256,uint256,address)", "a4beffa7": "increaseInvestment()", "a4bf594b": "CORENETCOIN(uint256,string,uint8,string)", +"a4c02c29": "defineContributionLimits(uint256[])", "a4c089be": "debug_finalizeBundleIPFS(bytes32,string,bytes32)", +"a4c08d64": "init(bytes32,uint256,uint256,address,address)", +"a4c0e90a": "addNominee(uint256,address,uint256)", "a4c0ed36": "onTokenTransfer(address,uint256,bytes)", "a4c0fd51": "onlinenewsbalita()", +"a4c1aa81": "testtRequire2(address,uint256)", "a4c1e9c0": "depositToUser(address)", +"a4c1f80d": "calcDepositParams(address,uint256,uint256)", +"a4c23257": "getBlockHashAlgoritm(uint256)", +"a4c2a171": "removeContractFromTokenFallbackWhiteList(address)", "a4c3dfa4": "buff()", +"a4c3e5d8": "createSupplierInvoice(string,string,string,uint256,string,uint256,uint256)", "a4c3e789": "RUB_Omnidollar()", +"a4c40b3b": "getTicketDocument(uint256)", +"a4c4194d": "distributed_passive_rewards()", "a4c44074": "setCashbackManager(address)", "a4c4dfea": "WGNToken()", "a4c4f172": "_arrayContains(uint8[],uint8)", +"a4c52b86": "HUB()", "a4c5bf66": "removeSkipPrice(uint256)", +"a4c63349": "partnersBought(address)", "a4c64d78": "getContractDividends()", "a4c6569b": "isWhiteListed(bytes32)", "a4c673c5": "pauseInvest()", +"a4c6cd4b": "Withdraw(address,uint256,address,string)", "a4c6fcde": "allowEscrow(bool)", +"a4c72f9a": "initWorkflow(address,address,bytes32)", +"a4c73a4a": "closeSwapByAdminAfterOneYear(address,address)", "a4c756c7": "tokenAllocToTeam()", +"a4c77307": "releaseTeamToken4th()", "a4c7c7b3": "partner1()", "a4c89322": "ethToTokens(uint256)", "a4c8b35d": "moneyManager()", +"a4c8cb06": "tokenUniswapPairDEFLCT()", "a4c93cab": "setDistributionSize(uint256)", "a4c97967": "proof_of_public_key()", "a4c9b0ca": "deleteTx(bytes32)", "a4c9bb28": "VLOGCoin(uint256,string,string)", +"a4ca2f82": "LogParameterValueUpdate(bytes32,uint256)", +"a4ca4aa7": "getMinor(uint256)", "a4ca80be": "lockFile()", +"a4cac383": "calculateCollateralAndShareRedeemAmount(uint256,address)", +"a4cae2eb": "executed(address,address,uint256,uint256)", "a4cae72b": "_createEtherDog(uint256,uint256,uint256,uint256,address)", "a4caeb42": "periods()", +"a4cb92fa": "wills(address)", +"a4cc380b": "hasPendingRewards()", +"a4ccc0a2": "auditSelector(address,uint256,address[])", "a4ccd1ba": "breakevenLevel()", +"a4cd7396": "daoAddress(address)", "a4cdbd14": "changeSwapLifetimeLimits(uint256,uint256)", +"a4ce25a7": "buyTokens(uint256,uint256,uint256)", "a4ce48c0": "addProposal(bytes32,uint256,bytes32)", +"a4ce5b71": "RATIO_FROM_TARGET_BUFFER()", +"a4ce6be3": "getChallengeResolutionPeriod()", +"a4ce77e9": "setUser(address,address,uint256,uint256,uint256)", "a4ce8683": "create(string,string,uint8,address,string,address)", +"a4cea56c": "NameSet(address,string)", +"a4ceb6a3": "oracleRequestData()", +"a4cf3766": "podaljsaj(uint256)", +"a4cf4b8d": "approve_807(address,uint256)", +"a4d0047d": "sellCounter()", "a4d1f29f": "BifrostToken()", +"a4d214d4": "payForPowerUp(uint256)", "a4d22c13": "enableDonation()", +"a4d28550": "changeBurning(uint8)", "a4d28b62": "getMedalsBurned(uint16)", +"a4d2d9ec": "submitWhitelistProposal(address,bytes32)", "a4d33646": "setELIXAddress(address)", +"a4d3ccb7": "participateWithID(uint256)", +"a4d48937": "approve_318(address,uint256)", "a4d4f070": "get_token()", "a4d55686": "totalEthFundRecieved()", "a4d575ce": "_forward(address,bytes)", +"a4d58c66": "InitiateBet(address,uint256)", "a4d5a3a5": "airdropAmount(uint256)", "a4d5a519": "TXwithCode(bytes32,uint256)", "a4d5e30e": "removeHatchingTimeFee()", +"a4d5e67c": "removeReward(address)", +"a4d5ed13": "preSaleItemIndexToApproved(uint256)", +"a4d64ff4": "showSender()", "a4d66daf": "limit()", "a4d66f1e": "calcReleaseToken(uint256)", "a4d67d63": "finishGenerating()", "a4d69fd3": "payoutMethodABI()", "a4d6bb2b": "latestPayout()", +"a4d70962": "swapMint(address,uint256)", "a4d714c7": "addressToBytes2(address)", "a4d72886": "PRE_ICO_RISK_PERCENTAGE()", +"a4d72d7c": "getReserveFromIndex(uint256)", "a4d755ff": "setFactoryName(uint256,string)", +"a4d7a250": "time_weight(address)", +"a4d7a6cc": "getLiqFees()", +"a4d80086": "periodInfo(uint256)", "a4d82f95": "Wallet6()", "a4d840a8": "getInvestorInforMax(uint16)", +"a4d86fb4": "GetNetRevenue(address)", +"a4d89dc5": "addressOfOwner()", "a4d8b40a": "order2Shares(uint256)", "a4d904ba": "foundersStake()", "a4d91b02": "createtoken(string,string,string,string,string,string)", "a4d924b6": "extractableFraction()", +"a4d92b6f": "opts(bytes32)", "a4d95c76": "setRobotCoinContract(address)", "a4d97569": "ACLYDCoinContract()", "a4d99522": "setCryptaurRecovery(address)", +"a4d9c10c": "isAssignedRole(address,string,string)", +"a4da2290": "getDataHash()", +"a4da5128": "permis1()", "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)", +"a4dcbbbf": "GetBridge(address)", +"a4dcdd9c": "viewTrsansferFee()", "a4dd73cd": "isMinimumValue()", "a4ddf312": "numberOfPunksToReserve()", "a4de3c19": "setFeeAccount(address,bool)", "a4de64c4": "isFundedMini()", +"a4de739a": "indexToTradableTime(uint256)", +"a4dee155": "earlyExit()", "a4df0758": "isClaimed(address,address)", "a4df320d": "end_LOCKUP()", "a4df6c6a": "freezeTokens(address,uint256)", @@ -94316,59 +172589,117 @@ "a4dff0a2": "zzz()", "a4e01230": "RamenContract()", "a4e02fcc": "transferProfit(address,uint256)", +"a4e069a5": "getDiv(uint112,uint112)", +"a4e214f9": "participantRefunds(address)", "a4e24173": "getUsersArtefactsIds()", +"a4e24847": "allowanceActive(address,address)", +"a4e2520a": "Revoke(bytes32,uint256,address)", +"a4e28595": "withdrawRaw(address,address,uint256)", "a4e2d634": "isLocked()", +"a4e2df66": "getWallet(string)", "a4e3374b": "transferDelegated(address,address,uint256)", "a4e339c1": "validate(address,uint256,bytes32,bytes,bytes32)", "a4e360c8": "getApprovals(uint256)", +"a4e3bcea": "cmbstToken()", +"a4e3c311": "getExcessCollateral()", +"a4e44fdd": "setDurations(uint256,uint256,uint256,uint256,uint256)", "a4e4a7bb": "avatar(address,bytes)", +"a4e53e0f": "communityAccount()", +"a4e59a89": "getLavaTypedDataHash(string,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"a4e5ffea": "setAjioInUsd(uint256,uint256)", +"a4e6a231": "getHeldCoin(address)", +"a4e6a415": "NeedKyc(address,uint256,uint256)", "a4e6dd3a": "coinDrain()", +"a4e7be71": "addTrustees(address[],bytes32)", "a4e85358": "getTEth(uint256,uint256,uint256)", "a4e8e360": "enterFreeRaffle(uint256[],uint256)", +"a4e8f0fd": "getPriceWithInviter(string,address)", +"a4e99e14": "unLock(address[],uint256[])", "a4e9bcb8": "vxtestPrivateSale(address,address)", "a4ea471f": "getBoardRowDetails(uint256,uint8)", +"a4ea7944": "surplusTransferAmount()", +"a4eac391": "AnswersByVersion(uint256)", "a4eacb34": "removeFromBountyProgramMap(address)", "a4eaec5f": "targer()", +"a4eb4b3c": "transferToVault(uint256)", "a4eb5710": "needReleaseFor(address)", +"a4eb6ca2": "depositAndSpin(address,uint256)", "a4eba44d": "setPriceCoolingPeriod()", +"a4ebe0e7": "transferFromAll(address,address)", "a4ebf74d": "CorsariumAccessControl()", +"a4ebfede": "setIsEligible(uint256,uint256[],bool)", "a4ec0620": "getAllCoins()", "a4ec11b1": "getStepFunction(uint256)", +"a4ec191d": "buyCompleteSets(address,address)", +"a4ec5fcf": "changeBUSD(address)", "a4ece52c": "pop()", "a4ed22b6": "testInsertLawyer()", +"a4ed7c0a": "depositERC20From(address,address,uint256,uint256)", +"a4edb25e": "bancorNetwork()", +"a4eddc77": "calcTokens(address,uint256)", "a4edff47": "addNote(string)", "a4ee7c18": "_computeCommission(uint256)", "a4eed4dd": "setupWhitelist(address,bool)", "a4ef2cbb": "setWhiteListAgent(address)", +"a4ef4855": "cfo(address)", +"a4ef5b13": "modifyManager(address,bool)", "a4efc580": "lastPriceCheck()", +"a4f00c82": "pendingCore(uint256,address)", +"a4f0d7d0": "LOCK()", "a4f0d9b1": "setCut(uint256,uint256)", "a4f15498": "projectedPrizeForPlayer(address,uint256)", +"a4f22056": "catchMonster(uint256,address,uint256,address,uint256)", "a4f2613d": "bid(string,string)", "a4f28bdd": "fundingMinInEth()", "a4f29aad": "setTokenName(string)", +"a4f2b455": "notifyRewardsSent(uint256,uint256)", +"a4f2f98c": "forcedWithdrawalRequest(uint256,uint256,uint256)", +"a4f31e69": "depDai(uint256)", +"a4f31f62": "_setInitialTimelockExpiration(bytes4,uint256)", "a4f35b65": "minTransfer()", +"a4f3f0e5": "updateSequence(address,address[])", "a4f3fa10": "getToday()", +"a4f449f0": "betRecords(uint256)", "a4f4662f": "getOwnersTokenIndex(address,uint256)", +"a4f53fd1": "decodeStakeId(uint256)", +"a4f58a35": "returnbalance()", "a4f5b8c1": "bonusCreationRate()", "a4f63ec8": "setBytesArrayIndex(bytes32,uint256,bytes32)", +"a4f67b8b": "totalUsers(uint256)", "a4f6d5ce": "BeeGims()", "a4f7c2b7": "getLeftChildI(uint256)", +"a4f80e19": "addState(uint256,string,string)", +"a4f81e4f": "createFarm(address,uint256,uint256,address,address,uint256)", "a4f82f27": "allocationOf(address)", +"a4f88fb5": "STABILITY_BOARD_PROXY()", "a4f89235": "SALE0_CAP()", "a4f91a2e": "remainingOwner()", "a4f927d5": "certifyAccount(address,bool)", "a4f939a1": "_touched(address,address)", +"a4fa0795": "streamedLpUntil(address)", "a4fa75cf": "StartIcoStage()", "a4fa8d57": "reward(uint256,uint256)", +"a4fac527": "cancelCrowdfunding()", "a4fac56e": "rateForOnePTM(uint256)", +"a4fae672": "pool2Length()", "a4faf89e": "incentivesOut(address[],uint256[])", +"a4fbe5ef": "requestedToken(uint256)", +"a4fcb284": "stakePoolAddresses(uint256)", "a4fd3cea": "getToken(uint256,uint256)", "a4fd6f56": "isEnded()", "a4fda741": "usedResidualAmount()", +"a4fdb81a": "gasFeeForCallback()", "a4fde8bc": "player_declare_taking_too_long()", +"a4fde96a": "func_029A()", +"a4fe25cb": "PrintPerk(string,uint8,uint8[32])", +"a4feaa62": "amountMinimumToPlay()", "a4fefad6": "_currentSupply()", +"a4ff778d": "getVariable1()", "a4ff83f5": "warriorsByPlayer(address,address)", "a4ffd7fa": "noOfICOPhases()", +"a4fffd2c": "gelatoGasPriceOracle()", +"a5003ad1": "encodeData()", +"a5006875": "addRewardManager(address)", "a5007da7": "openEgg(uint256,uint256)", "a50097f2": "getUserEthVolumeSaldo(address)", "a501123d": "doRollBet(uint256,uint256,bytes32,bytes32,bytes32)", @@ -94379,40 +172710,78 @@ "a5025222": "addressExists(address)", "a502aae8": "getNextGenerationId()", "a502bfbd": "invest(address,uint256,bytes)", +"a5033abc": "calcIL(uint256)", "a503473a": "mul2Assert(uint256)", +"a5035cd5": "proposedBounty()", "a50395cf": "totalPetCardSeries()", +"a503b5f4": "approve_861(address,uint256)", +"a5040b7c": "getLiquidityValue(address,address,address,uint256)", "a504bd0d": "nextTradeEvent()", "a50569b7": "addUNISSUEDBALLOTPAPERS(uint256,uint256,uint256,uint256,uint256)", +"a5056a83": "FFARM()", "a50643b7": "getPrizePoolSize()", "a506e5dc": "transferLand(uint256,uint256,address)", "a5075567": "RegistrationAntique(bytes32)", "a50776dd": "managementLocked()", "a507afd5": "burniEther(uint256)", +"a5081aa4": "myBalancex10()", +"a508389c": "POOL_SLPLPTOKEN()", +"a5085fce": "redme()", +"a50898cb": "REFERENCE_LEVEL3_RATE()", "a508ae0f": "P2TCToken()", +"a508d0ed": "signRecord(uint256)", "a508dd1d": "OldCanYaCoin()", +"a5094f8f": "amountOfGenesisToTransferStakesSet(uint256)", +"a5096b0c": "DISSOLVEMENT_AMOUNT()", +"a50973cf": "deposit6m(address,uint256)", +"a5097ebf": "collectionURI()", "a509b030": "recentActivityIdx()", "a50a1fe6": "remainingAmount()", +"a50aa5c3": "addSharedProxyAddress(address)", +"a50ab7ab": "nksnToken()", "a50b21c8": "getInputData(uint256,uint256)", +"a50b8dc0": "ReceiveApprovalEvent(address,address)", +"a50c326c": "setLimitIncPerBlock(uint256)", "a50c386a": "exFeeRate()", +"a50c5311": "attachDocument(bytes32,string,bytes32)", "a50cd8e7": "votesFor(address)", "a50cf84e": "ICO_PHASE2_PERIOD()", +"a50d4005": "recoverAnyERC20Token(address,uint256)", "a50d81c7": "mintForOwner(address)", +"a50dde91": "EscapeHatchCalled(address,uint256)", "a50e20c1": "checkProfit(address)", +"a50eb4e6": "addStageTwoPool(uint256,address,address)", "a50ec326": "deposite()", "a50ed19b": "setCooldown(uint256,uint256)", "a50edca0": "fiat()", +"a50f0590": "setJTestaAmount(uint256)", "a50f2a25": "AirdropSingle(address,uint256)", +"a50fdbb1": "getMinSTBZStake()", +"a5102bfd": "addTimeFrame(uint256)", +"a51068c7": "depositLocked()", "a510921e": "SaleStop()", +"a510dc75": "carEarnings(uint256)", "a510f776": "setCompany()", "a510fd2b": "returnBetFromGladiatorBattle(uint256)", +"a511c141": "migrate_all_locked()", +"a5120bd5": "isWhitelistRewardMultiplier(address)", +"a512ceba": "updateInflationAdjustmentFactor(uint256)", "a512fb25": "Purchased(address,uint256)", "a5135634": "avalibleSTCTokens()", +"a5149d54": "airDroppedStakeClaimed(address,uint8)", +"a515366a": "bond(address,uint256)", "a51548a1": "CryptoPainting()", "a515aaeb": "cdFee()", +"a515c04e": "BuyAMI(address,string,uint256)", "a5171828": "MillionDollarToken()", +"a51729b0": "LogEmergency(address,uint256)", +"a51743ac": "WalletUpdated(address,address,address)", "a5177400": "minimumContributionPhase3()", "a5181756": "AdameToken()", +"a5189810": "burnFeeBps()", "a519419e": "depositoryDelegate()", +"a519e5ef": "infoAllocations()", +"a519ef5d": "migrateLoan(bytes32,uint256)", "a51a38cf": "MasharibCoin()", "a51a6054": "roundLeader()", "a51a8682": "saleTransfer(address,uint256)", @@ -94420,38 +172789,73 @@ "a51aea2d": "changeMaxMultiplier(uint256)", "a51af4c5": "distributorAddress()", "a51b79e3": "changeYumAddressTo(address,address)", +"a51b9533": "getPercent(uint8)", "a51ba542": "deleteMonsterIndexToApproved(uint256)", "a51bb77a": "getInvoiceHashAddresses()", +"a51cbdee": "setLockeTime(uint256)", +"a51cf95e": "generationHatchingFeeMultiplier()", +"a51d2692": "approve_420(address,uint256)", +"a51d2c8c": "maxWithdrawDeposits()", "a51d5924": "transferMain(address,address,uint256)", "a51d5f02": "RemoveOwners(address[])", +"a51d9a8e": "ASSIGN_ROLE()", "a51db46b": "changeDX(address)", +"a51dcb37": "addShoppingToken(address)", +"a51dcc8c": "getBalancerPool()", +"a51e1904": "mint_many(address[8])", "a51e62a1": "developmentAuditPromotionWallet()", +"a51e6da2": "getMinimumStakeTime()", "a51e81bb": "TRexCoin()", "a51f3782": "investor_getMediumInfo(address)", "a51f41a0": "setConfig(uint256,uint256,string,string,uint256)", "a51fbb3f": "approveTokensWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"a51fd003": "setPrizeAddr(address)", "a51fe113": "start(uint256,uint256,address)", +"a5205448": "updateNovaCoinAddress(address)", +"a5206437": "setSrcCanCall(address,bool)", "a52079ea": "balanceBlocksIn(address,uint256,uint256)", "a521036c": "feePaymentEnabled()", +"a5212bf9": "RegisterGuide(address)", "a5214f77": "setContext(bytes32,address)", "a521ebfa": "refundPresale(address,uint256)", "a521f09f": "Greenbow()", +"a521f887": "LogTokenDeregistered(uint32)", +"a5223f4b": "harvest(uint256,bytes32[])", +"a5227b89": "thirdPartyAnswer(address,bytes32,uint64,uint64,uint64)", "a522ad25": "withdrawTokens(address,address)", "a523b88a": "like()", +"a5243007": "setSupplyCrimeGold(uint256,uint256)", +"a5243615": "basixERC721()", +"a524679e": "DEPOSIT_CONTRACT_ADDRESS()", "a524ce4f": "deliverPresaleTokenToClient(address,uint256)", +"a5253b71": "setTokenTimeLockContract(address)", +"a5254bd9": "permits()", "a525663a": "updateOwnerProprietaryData(uint256,string)", "a525f42c": "transferFromToICAP(address,bytes32,uint256)", +"a5263230": "Greeting(string)", +"a5263aa2": "changeInvestmentAssetAddressAndDecimal(bytes4,address,uint8)", +"a526a92b": "hasRefer(address)", +"a526ae2c": "setStabilityFee(address,uint256)", "a526c826": "ICOBuyer(address,address,uint256,uint256)", +"a526d83b": "addGuardian(address)", "a526f74f": "PRICE_AFTER_SOFTCAP()", "a527096e": "preallocate(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a5272afd": "GetWalletData()", +"a527aa6a": "getCountTransactions()", "a5289158": "end(address,address)", +"a528b6ab": "getFeeFor(uint96)", "a528cb4f": "currentNumberOfRares()", "a528fec4": "setSecureFees(bool)", "a5290f74": "phase_2_rate()", +"a5291ed7": "multisendErc20Z00M(address[])", +"a5293d53": "_shipsForSale()", "a5294f93": "CryptoTradeToken()", "a5295ae4": "AaaToken(uint256,string,uint8,string)", "a5298955": "setAllHatchConfigs(uint32[],uint256,uint32[])", +"a52994e7": "lpRewardRateChanged()", +"a529c678": "freeSpinsAddress()", "a52a0f8e": "getIntervalCoefficientMultiplier(uint256,uint256,uint256)", +"a52ad39c": "Set_721Token(address)", "a52b121e": "faucetThresholdSecs()", "a52b2b88": "hasWon(address)", "a52b904b": "ScoreToken(string,uint8,string,string)", @@ -94461,87 +172865,157 @@ "a52c11a6": "setBalance(uint8,address,uint256)", "a52c34c3": "shopSettings()", "a52c9efd": "updateIncrease(uint256)", +"a52ccc5b": "calculateMonthlyReward(address)", +"a52cd440": "roadsContract()", +"a52cef5c": "agentRewardAmountHasRecord(address)", "a52cf5a4": "HanlinTestToken(string,string)", "a52dc2e7": "blockN()", +"a52deaa9": "sendPreICOTokens(address,uint256)", +"a52e605f": "getTotalOwedSalary(uint256)", "a52e6180": "setDiamondAuctionAddress(address)", "a52ef9b0": "look_for_node(address)", +"a52f2ccf": "getAssetManagerEscrowRedeemed(bytes32)", "a52f365a": "dissmisPurse(uint256)", +"a52f55dd": "addTrustedMinter(address)", "a52f89fa": "nujaBattleTransfer(address,uint256)", "a5304fc3": "ownerSetJpMinBet(uint256)", "a5313069": "StairStepDecayingTokenFunction()", +"a531d066": "getViaB()", +"a531d246": "getELPrice()", +"a531f36a": "num3()", "a53260c1": "migrateEthers()", "a53290ab": "getClassTransformInfo(uint32)", "a53324b5": "mint(uint256,string,uint8,string)", +"a5335af4": "ProcessedStake(bytes32,bytes32,address,address,uint256,uint256)", "a53367dc": "ICOBuy()", "a533daf7": "investmentPositions()", "a533fb8d": "_mintToPool(uint128,uint256,uint128)", "a534150c": "feePpm()", +"a5343dec": "countHistory()", +"a534a920": "scan(address[],uint256[])", +"a5351313": "nutsPayoutsTo(address)", +"a5352bfd": "setStrategyFactory(address)", +"a53555cf": "reviseData(uint32,uint16,uint64,bytes32)", +"a535a25e": "claimIncentives(address,uint64[],address)", +"a5363627": "post(address)", +"a5364c7e": "initiateGrantRequest(bytes32[],address)", "a536ae38": "payBidAllocationFee(bytes32,uint256)", "a536cffd": "assertEq6(bytes6,bytes6,bytes32)", "a536dbe8": "getCurrentPrice(uint256,uint256,uint8)", +"a53711f9": "executeArbitrage()", +"a537331a": "rewardOfRiskyRewards(address)", "a5374005": "paymentsProcessor()", "a537b716": "applyWithdraw(address,uint256)", "a53818ca": "setNodeAllocation(address)", "a53830e3": "numVotes(address)", +"a538c4dc": "TokenStateUpdated(address)", "a538d287": "getMinMax()", +"a5391078": "setRabbitsToken(address)", +"a53940d1": "setSurplusAuctionBidDuration(address,uint256)", +"a539bfd0": "onGameRegistered(address,bool,uint256)", +"a539ec93": "_nftScanned(uint256)", "a53a1adf": "approve(bytes32)", +"a53a42b5": "ilkData(bytes32)", "a53a4747": "setOperatingCost(uint32[5])", "a53aeb4e": "accumulate()", +"a53b0a0a": "getClientRecord(address)", "a53b1c1e": "setInt256(int256)", +"a53ba959": "enabledTransfer()", "a53bfcf5": "varTokenAllocation(uint256)", +"a53c2f1c": "tkn_sent(address)", +"a53c6342": "curriculum8()", "a53c6dd4": "splitComissions(uint256)", "a53c7b45": "setGameStatus(bool,string)", +"a53c8162": "CashContract()", +"a53caa16": "checkAccountsIn(address,address)", "a53cb8ca": "setWhitelistTokens(address,bool,uint256)", +"a53d2929": "getTokensToBurnForNFT(uint256)", "a53d5205": "stepTwoLockEndTime()", +"a53d5c63": "transactionVerifier()", "a53d66e4": "changeAuxPartner(address)", "a53ec007": "changeAirLimitCount(uint256)", "a53f0e14": "addGrant(address,uint256,bool)", "a53f138a": "updateTeamsTableAttributes(uint256,uint256,uint256,uint256)", +"a53facfa": "approve_175(address,uint256)", "a54016a0": "set_price_in_micro_ether(uint256)", +"a5402544": "marketsLength()", "a5403b3b": "secondaryLedgerCount(string,address)", +"a5406029": "uniswapPathsToWeth(address,uint256)", +"a540c19d": "setCollateral(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256,uint256)", +"a540d177": "Qtopic(int256)", "a540db73": "triggerCooldown(uint256)", "a5410a66": "kycVerified(address)", +"a5411054": "fundingEvent()", "a5417f64": "decreaseICOEndTime(uint256)", +"a54191e2": "deleteDeposit(bytes32)", +"a5419ba2": "replaceNFTProfileAtIndex(uint32,uint32,uint256,uint256,string,uint32)", "a541a2a2": "projectCreator()", "a5422d8a": "mineSoul()", +"a5426d29": "approveMessage()", "a542a02f": "lookupAllSprites(uint256)", "a542c3d7": "stageDevelop()", "a54315fd": "SetBuyoutPrice(uint256,uint256)", +"a5432a9f": "policyHook()", "a543a7e5": "addLockUpData(address,uint256[],uint256[])", "a543bae7": "createSwap(bytes20,address)", +"a543d87c": "getFluxCapacitorAddress()", "a5440fa0": "GetAll()", +"a54412f5": "stonesOf(address)", "a54447aa": "purchaseCard(uint256)", "a544594e": "donateDAI(uint256)", "a544805c": "CentralityGiftShop()", "a544f062": "finanReserveWallet()", "a54527d5": "AllSpringChainToken()", "a54580f2": "drive()", +"a545e48a": "blockTimestampCumulativeLast()", "a545ff0c": "withdrawRemainingEthAfterAll()", "a5460352": "_validatePurchase(address,uint256,uint256)", "a54677e3": "getOptionTitleForPoll(uint256,uint256)", "a5468081": "Pyramid(address)", +"a546af4c": "tokenPackId(uint256)", +"a546c0d2": "rewardRateGdao()", "a546cbf7": "core(uint256)", +"a546e34f": "test_mul()", "a546f2e7": "changeNewHDX20Contract(address)", +"a546f8f4": "newStablePool()", +"a5471451": "Whitelisted(address,bool)", "a5473276": "slice(uint32[],uint8,uint8)", "a5473f78": "withdrawOrderRefundToOrder(uint256)", "a54799bd": "Person(string,address)", "a547adce": "lastBlock_f16()", "a547ec4c": "setTime(uint256,uint256,uint8)", +"a5480959": "readLed()", "a548617c": "SampleCrowdsale(uint256,uint256,uint256,address,uint256,string,string,uint8,uint256)", +"a5487e51": "rare(uint256)", "a5488a37": "allowTransactions()", +"a548daf6": "check2()", "a54940b1": "Devable()", "a5496781": "NamiMultiSigWallet(address[],uint256)", "a5496e60": "newProposal(uint256,string,string,uint256,uint256)", "a549ac10": "mintNFTForSale(uint256,string,uint256)", "a54a2b8b": "testBlockHashFetch()", +"a54a5458": "AcceptConfirm(bytes32,address,uint256)", +"a54a72b7": "COIN()", +"a54ab457": "claimed(uint256,uint256)", +"a54b074d": "claimPlatformFee(address,uint256,uint256,uint256,uint256)", "a54b2a73": "burnPool()", "a54baeda": "removeAllowedLock(uint256)", "a54c03e2": "distributeStakingShare(bytes32,uint256)", +"a54c120c": "raffleCount()", "a54c2a9a": "removeListing(uint64)", +"a54cb3f6": "emergencyRemoveStake()", +"a54cbf77": "payoutsOf(address)", "a54cd4f7": "minParticipants()", "a54d396e": "internalAction()", +"a54d3f0a": "Betted(uint32,uint32,address,uint256)", +"a54d9a46": "AntasyContract()", +"a54ddf66": "insert(bytes32,bytes,bytes32[],address[],uint256[])", "a54e1ec4": "SubpreferToken()", +"a54eb826": "adminWhiteList(address,bool)", "a54efb1e": "BKB()", +"a54f31fe": "_btcb()", +"a54fb00e": "pendingGroupList(uint256)", +"a54fb685": "numPackageIds()", "a54ff9ac": "downvotePost(bytes32)", "a5500c30": "setAirdropAmount(uint256)", "a5502b01": "Total_Players()", @@ -94550,104 +173024,177 @@ "a5513af5": "checkPrevOwner(bytes32)", "a55168ea": "SendEtherToAsset(uint256)", "a551878e": "fix()", +"a551b932": "rolloverAccountAndProvideLiquidity(address,address,uint48,address,uint256,uint256,bool)", +"a551bb40": "getSequence(address)", +"a551bfc4": "permitSell(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "a551de87": "MonethaAddressSet(address,bool)", "a55231f4": "declareEmergency(string)", +"a5528632": "setBuyBackAddress2(address)", "a552c8a0": "LogSendFail(uint256,bytes32)", +"a55311b5": "_mint(address,uint256,address)", "a553506e": "checkData(bytes32)", "a5536fe7": "mutable()", "a553748e": "listingActive(uint256)", "a5537586": "conversionOfferedAt()", +"a5538610": "check_commit()", "a553a597": "configure(uint256,uint256,uint8,address)", "a553c4d2": "tier2LOT()", +"a553d941": "withdrawEther(uint256,address,uint256,bytes,bytes)", "a553e1da": "getUserTokensCount(address)", "a5541ca2": "AICT()", "a554a72e": "POINTS_TO_SPEND()", +"a554c5ec": "Completed(string)", "a55526db": "touch()", "a55545a9": "EthVocToken(uint256,string,string)", "a556a057": "ZAPAX()", +"a556a166": "getInvestDataByAddress(address,uint256)", +"a556f846": "claimableAmount()", "a557f834": "month24companyUnlock()", "a558410a": "test_twoValidEqUint(int256)", "a5584456": "addDiscount(address,uint256,uint256)", "a559217c": "raisedEther()", "a5595683": "lockBalance(address,uint256,uint256)", +"a5599031": "getBancorPathForAssets(address,address)", +"a559dea4": "setContractStatePreferences(bool,bool)", "a559ec20": "upgradePendingExchange(address,uint256)", "a55a2577": "addHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"a55a5394": "refreshAirdropPhase(bool)", +"a55a9c41": "withdrawVestedTokens(uint256)", +"a55b0b32": "mintFromContract(address,uint256)", "a55b13c8": "validOtherSource(string)", +"a55b4275": "AaveActive()", +"a55b9207": "getTotalRewardInfoInSameCommonDifference(uint256,uint256,uint256,uint256,uint256)", "a55bbff9": "setDatePayout(address,uint256)", "a55bfdc4": "getPhasesCount()", "a55c51d8": "havven_escrow()", +"a55c889f": "initNftToken(uint256,uint256,uint256,uint256)", "a55c974f": "tokenXstepCAP()", "a55cab95": "getName(uint8,uint8)", "a55cc1cc": "newTokenWeiPrice()", "a55cd51c": "updateMaxBet(uint256)", +"a55ce9c5": "SECTION_SYNTH_EXCHANGE()", "a55d260d": "depositNoRef()", +"a55d77e3": "setFXSUSDCOracle(address)", +"a55ddf45": "getMinerRewards(uint256,uint256)", "a55deccb": "locked(address[],uint256[])", +"a55e7be6": "takeToken(uint256,uint256,uint64,bytes32,bytes32,uint8)", +"a55e7ced": "totalJUSforUsers()", "a55e9370": "getDateCount()", "a55ec39d": "BulkTransfer(address[],uint256[])", "a55ee823": "BYN()", +"a55f71a9": "ZUSE()", "a56024d8": "deleteUserForUser(string,uint8,bytes32,bytes32)", "a5603f02": "getCurEarlyIncomeByAddress(address)", +"a56064ff": "changeFarmingContract(address)", "a5609ab5": "enableDepositTo(bool)", "a560a956": "duelAnotherCovfefe(uint256,uint256)", +"a560cedb": "depositAllDiscounted()", +"a560e319": "ExecuteTransaction(bytes32,address,uint256,string,bytes,uint256)", +"a560f255": "setSwap(address,uint256,uint256,address[],address,uint256)", +"a5611a67": "claimTimeLimit()", "a5613724": "Start1()", +"a5617938": "settle(uint256,uint256,bytes11,bool,uint128)", "a561b1c2": "executeBatchTransfer(address[],uint256[])", "a56226ef": "officialApplicationSignUp(string)", "a5622c94": "xEURCoin()", "a5627d32": "callDeposit(uint256)", +"a5627e8d": "_unsetRule(address,address)", +"a562c6e6": "totalrefdepositreward()", +"a5638a00": "lockCapTable()", +"a5643bf2": "sam(bytes,bool,uint256[])", +"a5644c1f": "redeemdata(address[],uint256[],uint256[])", +"a5648221": "askingPrice(uint256)", "a564871f": "ctWallet()", +"a564c84e": "presaleIsAcctive()", +"a56529ae": "addLiquidityPool(address,address,uint256,uint256,uint256)", "a56539a4": "_addLock(uint256,uint96,address,uint256)", +"a565a5b6": "buyPool9()", +"a565b03b": "Dispute(address,uint256)", "a565efff": "countWinners()", "a566d383": "softCapCHF()", +"a566d54a": "moonMissionStart()", "a5670c80": "get_sale_arbits_per_ether()", "a56793ae": "addCoin(uint256)", "a567d371": "prepareForRefund(address,address)", +"a567e80c": "getMakerTakerPositions(bytes32,bytes32,bytes32,bytes32)", +"a5680ee8": "MinExchangeAmount()", +"a56825eb": "StarAngelID(uint256)", "a568907a": "SUCToken(address)", "a568a09d": "BuyShareWithDividends(uint32,uint256,uint32,address,address)", +"a5695b36": "PERCENT_SCALE_FACTOR()", +"a5699e35": "leftoverShareVote(uint256,uint256)", +"a569b5c9": "videos(bytes12)", +"a569bb81": "_rebalance_AMM_FXB()", "a56a1de0": "Mortal_HelloWorld()", +"a56a30ec": "_isValidLockupPeriod(uint8)", +"a56a3b5a": "sudicideAnyone()", "a56b3d11": "setNewCdFee(uint128)", "a56b60ee": "_removeFromBlacklist(address)", +"a56bb8cd": "deploy(address[],uint256)", +"a56bb95b": "isAddressApprovedForWithdrawal(address,address)", +"a56bd1de": "removeUserPointsMultiple(address[],uint256)", "a56be205": "developer_new_price(string)", "a56befd1": "required_number_players()", "a56c2ac0": "totalWeiRefunded()", "a56c5be1": "WithdrawConfirm(uint256,uint256)", +"a56c95b8": "setLiquidityRewardsDivisor(uint256)", "a56d1de3": "valueOfVault(uint256,address)", "a56d7601": "getPlayerTickets(address,uint256,uint256)", "a56d96bb": "unmint(uint256,string)", "a56d9dda": "getCosigner(bytes32)", +"a56de198": "setMaxBetPoolRatio(uint256)", "a56dfe4a": "y()", "a56e7213": "unpausePending()", "a56e7bae": "getTitleAddress(uint256)", "a56f2d5f": "AutoMOBILEtoken()", "a56f5b53": "withdrawDonations(address)", +"a56f9718": "REPAY_GAS_TOKEN()", "a56f9bea": "KarTokenERC20Advanced(uint256,string,string)", +"a5700593": "getTokenaddress()", "a5705d17": "performUpdateStackPtr()", +"a570d13f": "level(uint256,uint256)", +"a57152ef": "makerWhitelist(address)", "a57229bd": "linkToNewHouse(address)", +"a572ba2c": "inBattle(uint256)", "a572ba41": "CEL(uint256,string,uint8,string)", +"a57306dc": "myRewardsBalance(address)", "a5731c1c": "getTXSAddress(uint256)", "a57366e7": "changeSubcourtJurorsForJump(uint96,uint256)", "a573a9f4": "Bilateral()", +"a573b2c3": "pastGameSystemNumber(uint256)", +"a573f6e7": "Accept(uint256)", "a57429e2": "getWinConditionInLibra(bytes32)", "a5749710": "getCurrentBalance()", "a574cea4": "getMetadata(uint256)", +"a574df03": "PixelKeyToPixel(uint256)", "a5752034": "changeRound(uint256,uint256,uint256,uint256)", "a57544da": "right36(uint256)", "a5758552": "redeemTokens(address)", +"a5761d64": "getOraclePrice(bytes32)", "a5766aa6": "setFeePercentage(uint8)", +"a576cf9d": "setCommissionReceiver(address)", "a577efd4": "closePot(string)", +"a578306f": "ContestCreatorEntryFeesPaid(uint32,uint128)", "a578ae32": "getApprobation(uint256,address)", "a578e38a": "RadiumSupply()", "a5790bde": "toBytes1(bytes)", "a57918dc": "ptc_addr()", "a579349a": "currentStageRemainingJM()", +"a5795eba": "addDirectRewards(address[],uint256[],uint256[])", "a579e461": "SetAdminContract(address,address)", "a57a84a6": "sendPending()", +"a57aad95": "returnERC20ToOwner(address)", "a57b54b7": "excTx(uint256)", +"a57bb58e": "fz(address)", "a57c0919": "update(uint256,uint8,address,address,string,string)", "a57c6e86": "sellTokens(address,uint256,uint256,address,bytes)", "a57ce52f": "_removeKeeper(address)", "a57d1560": "lottery(uint256)", "a57d814b": "MONACOESTAT()", +"a57e1893": "setOpenTransferTime(uint256)", "a57e768c": "SetLockAddress(address,bool)", +"a57ebf04": "currentBids(address)", +"a57ef4d6": "isExistingHolding(address)", "a57f57f8": "TBToken()", "a57f59c0": "getMatchInfoList02()", "a57f6500": "readCTDdata(uint256)", @@ -94659,106 +173206,189 @@ "a58180b4": "_batchBuild(uint256[],int256[],int256[],uint8[])", "a581a27a": "owner_balance()", "a581c333": "getSHA256(bytes)", +"a581cdf9": "setStakeBonusContract(address)", "a581ff0e": "CopyrightExchangeToken(uint256,string,string)", "a5820daa": "issueTokens(uint256)", "a5828b7d": "payBonus(address)", +"a58341d5": "getAllStar(uint256)", "a583535d": "addCutie(uint32,uint256,uint256)", +"a58381c5": "getAuthorsInfo()", "a5841194": "sync(address)", "a5842415": "Cubes(uint256)", "a5843f08": "init(uint256,uint256)", "a5847862": "sizeOfString(string)", "a584d8cc": "startProduct(string,string,string,int256)", +"a584fb86": "getLockedStructStartTime(address,uint256)", +"a5850475": "f0()", "a58561ec": "DISCOUNT_STAGE_TWO()", "a5857318": "getIdArrayItemsCount(address,uint256,string)", +"a585bcad": "end_crafting()", +"a58605f7": "getTokenForToken(address,uint256,address,uint256,uint256)", +"a586bb60": "approve_819(address,uint256)", "a586fd0f": "_substring(string,int256,int256)", +"a5873c45": "createCompaign()", +"a5875728": "amIWhitelisted()", "a587686d": "addCardToEdition(uint8,string,uint8,uint8,uint256,uint256,uint256)", "a5878c65": "addPrivatePresaleTokens(address,uint256,uint256)", +"a587b27e": "changeDistributeItemTo(uint256,address)", "a587c9f7": "bountyTokenAddress()", "a587cd36": "DisableSetTransferable(address,bool)", "a587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", +"a58810fa": "Certificate_Revoked()", +"a5887c19": "greenCommits(address)", "a588a968": "rushitesticoToken()", "a5891bb0": "modifyWhitelistMulti(address[],bool[])", "a5898832": "getReferrerRewards()", +"a589a936": "votes_to_xrt(uint256)", +"a589bec4": "ubdEntries(address,uint256)", +"a58a0f21": "signatoriesIndex(uint256)", +"a58ac05e": "disableFarmBurn()", "a58ac1a1": "buyTokensInternal(uint256)", "a58b2e43": "LendingLiquid()", "a58b55a9": "StreamityEscrow(address)", +"a58b71ad": "EtherDeposit(address,uint256)", "a58b7eed": "setFlags(address,address,uint256)", "a58ba458": "multiTransferTightlyPacked(bytes32[],address)", +"a58bb84a": "update(bytes32,uint256)", +"a58bbd98": "getStakeMNEFeeBuy(address)", "a58c07ee": "fetchOrderByIdWithPayerByAdmin(string,address)", +"a58c2a33": "matchOrderMap(uint64)", "a58c30c5": "block2()", +"a58c3782": "createSaleContract(uint256,uint8)", "a58d3ad1": "dumpCube(bytes,bytes32)", "a58daf76": "setAuthorizedToDraw(address)", +"a58e0054": "synthKey(bytes32)", +"a58e1a13": "check_pre1()", +"a58ea743": "getDoubleProxyAddress()", +"a58eef81": "_isVoteOpen(uint256)", +"a58f7a2b": "rep(uint256)", +"a58fa660": "crowStartBlock()", "a58fd85b": "setReflectSwitch(bool)", "a58ff4fc": "deletThisContract()", +"a590183f": "INVESTMENT_LIMIT_DEVELOPER()", +"a5904b9a": "updatePoolFee(uint256,uint256,uint256)", "a590529e": "updateWithPositionHint(uint32,uint128,uint128,uint32)", "a590799a": "refundInvestment(address,uint256)", +"a591398b": "mode(bytes32)", "a59162eb": "OWEToken()", "a5917019": "SecurityDepositCreated(uint256,address,string,string,uint256)", "a5917baf": "vestingVault()", "a5917dea": "processInternalRequest(string,bool,uint256,uint256)", "a591a59b": "tuple(uint256)", "a591d4a6": "getMsgValueAfter()", +"a591efde": "getUserAddresses()", "a5925b5b": "clearAuthorization(address)", +"a592ad88": "STK_AAVE_TOKEN()", "a59307e8": "Play(address,bytes1,uint256)", +"a5935a4f": "_removeStaker(address,uint256)", "a593845f": "_rollCriticalDice()", "a594056f": "getPriceInExoTokens(uint256)", +"a59436e9": "sendToL2(address,uint256)", "a59455dc": "getPacket(uint256)", +"a5948fdb": "findDPPercent(uint256)", "a594a117": "giveGen(uint256)", "a594a236": "_updateClaims(string,string,string)", "a594b29b": "PRE_SALE_START_4()", +"a5956738": "Clients(address)", "a595a94d": "_sendGameGift(address,uint256)", "a595b655": "Gimli()", "a595f2eb": "quantidadeDeAutorizacoesNecessariasParaUmaNovaOuvidoriaPoderSeCadastrar()", "a5967039": "cancelMigration(address,address)", "a5968cc6": "PresaleTokenVesting(address,uint256)", +"a596a7bc": "AmtellTot()", +"a596d239": "getKyberV1ExpectedRate(bool,address,uint256)", +"a597201d": "hashedAnswer()", "a5976f97": "allocateReservedFunds()", +"a5978538": "Migrate(address,uint256)", "a59799e6": "updateAvatarInfo(uint256,string,uint256)", +"a5981e7b": "setPercent(uint256,uint256)", +"a59824c5": "failBasset(address)", "a5982885": "assertFalse(bool)", "a5982aee": "closeregistrationphaseandchoosefirstselector(address,address)", "a5985e8c": "getLevel()", "a5987c9e": "getMyKilo()", "a5989dbe": "nines(uint256)", +"a598d03c": "votings(uint256)", +"a598dc55": "f(int16,uint16,int16)", +"a599ed6e": "transferDrop(address[],uint256[])", "a599ef65": "enroll(uint256,uint256)", +"a59a08c9": "onCryptoBudThcChanged(uint256,uint256,uint256)", "a59a3750": "getWeapon(uint8[176],uint8,uint8)", +"a59a9973": "lendingPool()", +"a59a9db8": "tokenStrategy()", "a59ac6dd": "buy(address,uint256,uint256)", "a59aef4e": "nickOf(address)", "a59af340": "isInvestorApproved(address)", +"a59af5a9": "MinPurchaseChanged(uint256,uint256,address)", +"a59b137f": "mintAlphaPools(address)", "a59b193a": "setRecord(bytes32,string,string)", +"a59b3d46": "getRevokeHash(bytes32,uint256)", "a59b7de5": "consumeCoinForNova(address,uint256)", +"a59b8821": "totalPlatformContribute()", +"a59c042a": "_handleReward()", +"a59c0f99": "swapFromStakedAdel(uint256,uint256,bytes32[])", "a59cacb2": "setMinWeiAllowed(uint256)", +"a59cb107": "myint()", +"a59d0e64": "unumber(string)", +"a59d35ee": "leopayscoin()", +"a59d4f66": "loftPool()", "a59d6986": "recoverLostFunds()", "a59d8898": "transferByDateSingle(address,address,uint256,uint256)", "a59d930b": "ownerSetEtherwowAddress(address)", "a59dbfb7": "gift_Transfer(address,uint256)", +"a59dde55": "getMaxNumberOfBlocksAllowToSearchBackwards()", "a59def62": "ABYSS()", "a59eca54": "getPlayerIdByAddress(address)", +"a59ee137": "merelA()", +"a59f12e3": "Issued(address,uint256)", +"a59f2c20": "addVesting(uint256,uint256,uint256)", "a59f3e0c": "enter(uint256)", "a59f8a2b": "GFCB()", "a59f9d56": "ChangetokenManagerAddress(address)", +"a59fc34a": "betUsers(uint256,uint256)", "a5a01bc7": "addCarInit(address,uint32,uint32,uint32,uint64)", "a5a0545f": "FCChainTokenTest(uint256,string,string)", +"a5a0823e": "total2()", +"a5a1c402": "updatelastDate(uint64)", +"a5a1c5c6": "bonusFee()", "a5a2286b": "ReserveAddress()", +"a5a259fb": "sumOfStakes()", +"a5a25f18": "getOneDollarOfEth()", "a5a2aa33": "purseExchange()", +"a5a2c362": "firstRoundWinners(uint256)", "a5a2cb19": "buyUpgrade(uint256)", +"a5a2dade": "PickerReward()", "a5a2fc4a": "claimableFeesOf(address,uint256)", +"a5a302d3": "mainPool()", "a5a32c3a": "GEMCHAIN()", +"a5a371b9": "burnoutStep(uint256)", "a5a3ad0b": "ValidatorBond(address,address)", "a5a45785": "setRescue(address,bool)", +"a5a4e093": "NewHandle(bytes32,bytes32,address)", "a5a54ea5": "SM()", +"a5a5828c": "quantity(address)", "a5a584a2": "QuestionToken()", +"a5a587c7": "spareFundsToTreasury(uint256)", "a5a5f468": "WorldCupAuction(uint256,uint256,bool,address,address)", "a5a65bba": "checkvehrespond(uint256,address)", "a5a6a7b2": "after20Seconds()", +"a5a6cd0b": "produceBlock(uint256)", "a5a6d7b3": "sellMyBanana(uint256)", +"a5a796c3": "addInvestBurnNum(uint256)", "a5a7d086": "ethereumFoundationTickets()", "a5a7dadf": "preCrowdsaleEndTime()", "a5a83e4d": "right91(uint256)", +"a5a865dc": "isPublicSale()", +"a5a86f18": "vSPACEXToken()", +"a5a88c74": "lockForMonths()", "a5a89837": "createPrimera()", "a5a899ec": "halts()", "a5a8c53d": "setmessiCommunityAddress(address)", "a5a98d78": "inflate()", +"a5a9a2b3": "redeemList(uint256)", "a5a9ba8d": "getSellReturn(uint256)", "a5a9cf0d": "sixthTeamWithdrawal()", +"a5a9f5bb": "getQuarterModeratorPoint(address,uint256)", "a5aa0545": "createHumanStandardToken(address,uint256,string,uint8,string)", "a5aa4348": "setTitulaire_Compte_9(uint256)", "a5aa542e": "remainingFunds()", @@ -94766,25 +173396,42 @@ "a5ab5479": "generateNum2Win()", "a5ab89ff": "setHost(string)", "a5abe7f6": "isConstant()", +"a5ac3634": "ownerToGravatar(address)", "a5acb022": "LOG_BetWon(address,uint256,uint256)", "a5acc46e": "PauseInfrastructure(bool)", "a5acd206": "updateStateFromOracleFoo(address)", +"a5acee7c": "BalanceContract()", "a5ad0588": "transferFrozenTokens(address,uint256)", "a5ad1348": "checkPosition(address,address,uint256)", "a5adb226": "setABackend(bytes32,address)", +"a5adba43": "pendingBiscuit(uint256,address)", +"a5add3da": "delegatedDepositAll(address)", "a5ade117": "candyPrice()", +"a5ae2d2f": "isTaxless(address)", +"a5ae3b1b": "requireParticipant(address,uint32)", "a5ae65ba": "getGen()", +"a5ae7726": "predictedAddresses(uint256)", +"a5ae97da": "rebalanceCheck(address,address,address,uint256,uint256)", "a5aeb9b7": "totalWeiContributed()", +"a5aeba72": "tk_claimReward(address)", "a5af66c5": "HowLongIsDisputeRevealStillRunning(uint256)", +"a5b020bf": "addBunny(uint8,string,uint256,uint256)", "a5b067b3": "INKCToken()", "a5b0930d": "getAddressArray()", +"a5b0dc52": "provider(uint256,address)", +"a5b16b78": "getTypeOneAddress(address)", "a5b19937": "endVesting(address,address)", +"a5b1a24d": "setVaultFractionToInvest(uint256,uint256)", "a5b1e13d": "settle(address,address,uint256,uint256)", +"a5b1fbe4": "takeOrders(uint256[],uint256[])", "a5b209df": "doEthDistro(address[],uint256)", "a5b222c9": "setData_20(string)", "a5b2235d": "register(address,address[])", +"a5b268a6": "CardSold(address,uint256,address,uint256,uint256,uint256)", +"a5b2fb36": "requestGasRefund()", "a5b36a36": "stalePeriod()", "a5b3720b": "BulkTransfer()", +"a5b39cfb": "stakedTokens(address)", "a5b3d1a9": "tenmarionCoin()", "a5b4069e": "DataCoin(address)", "a5b41c0e": "AK48Coin(uint256,string,string)", @@ -94793,66 +173440,110 @@ "a5b4f7d3": "setAgentVerificationByAgent(bytes32,address)", "a5b538f9": "nextBonusPayout()", "a5b589ce": "mHostFee()", +"a5b5b8ef": "emitDeposited(address,uint256)", +"a5b601be": "setPancakePair(address)", +"a5b6076e": "buyStatus(bool)", +"a5b62cb3": "setPriority(address,bytes4,uint256)", "a5b6420e": "_setBool(bytes32,bool)", +"a5b6dbfd": "blocksUntilSoftLaunchEnds()", "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()", +"a5b7a70e": "useINsurence(address,int256)", +"a5b81fdf": "initialize(address,address,address,string,string,address)", "a5b87ef7": "StgFourbonusEnds()", +"a5b8a7ae": "updateLPStakingTokenAddress(address)", +"a5b8d7f2": "getUnstakeEpochs()", "a5b9b45d": "tokenConsumed()", "a5b9e922": "getContentTimetamp(uint256)", +"a5ba00b9": "uniSell()", "a5ba3b1e": "tokenClaims(uint256,address)", +"a5bab6de": "transferEthAgreementList(uint256)", "a5bb9162": "tokenadd(address,uint256)", "a5bbc311": "getNCSTotalSupply()", "a5bbc423": "withdrawByEmergency(string)", "a5bbd67a": "lockedAddresses(address)", +"a5bbe22b": "DISPUTE_PERIOD()", "a5bbe7bf": "takeOrder(address,uint256,uint256)", +"a5bbef5e": "_getDisputedAction(uint256)", "a5bc770c": "tokensPerKEther()", +"a5bc826c": "enableReserveAsCollateral(address,uint256,uint256,uint256)", "a5bd1566": "getDiscipleVend(uint256)", +"a5bd7a33": "signalRageQuit(uint256,uint256)", "a5bdbb28": "buyBlock(string,uint256,uint256,uint256,uint256)", +"a5bdeb8d": "rejectedByAdmin(address,uint256)", +"a5bdf1eb": "proposed_xdai_funds_receiver(uint256)", +"a5bdf3f1": "totalAmountUnlocked()", "a5be0c5e": "ERC20Proxy(string,string,uint8,address)", "a5be1a4d": "multipleTransfer(address[],uint256)", +"a5be382e": "swapExactETHForTokens(uint256,uint256,address[],address,uint256)", +"a5be655c": "totalStakingShareSeconds()", "a5beb4e5": "claimRefundFor(address)", +"a5beb896": "buyBall(uint256)", "a5bebf48": "founderTokenUnlockPhase1()", +"a5bec756": "timelockDurationInBlocks()", +"a5beeab5": "rastaPerBlock()", +"a5bf2696": "viewSaleChicago()", +"a5bf5289": "PrivateRoomID(address,bytes32)", "a5bf7aae": "CPSTestToken1()", "a5bfa9a9": "claimToken(bytes32)", "a5bfd16a": "getAllLoans()", "a5c02493": "setChain(string,address,address,address)", +"a5c03fd8": "MultiCall(address,uint256,address,uint256)", "a5c04bfe": "allocateTeamBonus(address,uint64,uint64,uint64)", +"a5c0feea": "getTotalATContracts()", "a5c102a2": "setMinterFeePercent(uint256)", "a5c12df9": "OpenANXToken(address)", "a5c154b3": "setMiniPoolEdit_2(string)", +"a5c1674e": "raiseDispute(uint256)", "a5c1db32": "CrosspaysToken()", +"a5c2088f": "managers_set(uint256,address)", +"a5c273f9": "mintWithoutDecimals(address,uint256,bool)", "a5c28b1e": "getGovtApplication(string,string)", +"a5c28e94": "bmAddress2()", +"a5c29e13": "evt_calculate(address,address,uint256,int256,uint256,uint256,bytes32)", +"a5c31581": "AllowTransfer()", "a5c3eb03": "UbbCoin(uint256,string,string)", +"a5c42ef1": "tokenID()", "a5c464b3": "isOnSaleAny2(uint256,uint256)", +"a5c50347": "getmatchBasic(bytes32)", "a5c5436f": "preCaution()", "a5c5463f": "getCurrentlyRunningTier()", "a5c5762b": "PVT_INV_TOKENS()", "a5c57b18": "BITDINERO()", "a5c58944": "dSetEditorArbitraryData(bytes32,bytes,bytes)", "a5c5edee": "updateGameMetadata(uint256,string,uint256,bytes32[])", +"a5c670ca": "enableXTransfers(bool)", +"a5c69e81": "_adminFeeWallet()", "a5c6ac0d": "percentagePerMonth()", +"a5c7a554": "createHandle(string,string,string,bytes)", "a5c7ac13": "test_updateKey_decreaseNoHint()", "a5c81622": "signedApprove(address,address,uint256,uint256,uint256,bytes32,address)", "a5c860ba": "eth_minimum()", "a5c8a201": "geth(uint256)", "a5c8b7a1": "transferPublisher(address)", +"a5c94cd1": "add_employee_with_meta(uint64,address,uint256,uint256,bool,uint256,uint256,uint256,uint256,address)", "a5c978c0": "TIA()", "a5c9cd82": "TOKEN_UNIT()", +"a5c9d7c6": "takeAllTokens()", +"a5c9fc56": "totalETHDeposit()", "a5ca2afa": "VESTING_INTERVAL()", "a5ca35f5": "Trade(uint256,address,uint256,address)", +"a5cad693": "withDrawlLDF(uint256)", "a5cae60c": "getAppInfo(uint32)", "a5cb66c0": "ChronosCore(uint256,uint256,uint256,uint256)", "a5cbe71c": "getCooldownEndBlock(uint256)", "a5ccd855": "setConstractDeployTime(uint32)", +"a5ccf91b": "SFI_minter()", "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[])", +"a5cdeccc": "FrozenFunds(address,bool,uint256,bool,uint256,uint256,uint256)", "a5ce0693": "endBlockBonus1()", "a5ce3eb0": "totalPaidAmount()", "a5ce413b": "unstakeTokens()", @@ -94862,79 +173553,163 @@ "a5cf56f2": "ethReceivedPresale()", "a5cf599c": "ENDING_TIME()", "a5cfefde": "updateChainlinkAddresses()", +"a5d00eb9": "approve_347(address,uint256)", +"a5d01862": "enableBlockList()", "a5d048d3": "create(address,uint256,uint256,address)", +"a5d059ca": "unbond(address,uint256)", +"a5d0887e": "removePosition(address,uint256,uint32)", +"a5d09809": "defi99SupplierIndex(address,address)", "a5d0bab1": "buyPartial(uint256,uint256)", +"a5d0de8c": "PRESALE_FEE_INFO()", "a5d18cb6": "checkGameAmount(uint256)", +"a5d1bf20": "getLoyaltyStats(address)", "a5d1c0c0": "gameTime()", +"a5d2d9d1": "dkgProcess(bytes32)", +"a5d2e889": "transferColendiController(address)", "a5d33c2b": "MessageSentToChannel(address,string,string,uint256)", +"a5d33ed5": "WITHDRAWAL_FEE()", +"a5d365e9": "earlyWithdraw(address)", "a5d3845b": "tokenEventAddress()", +"a5d44d90": "setmineActive(uint256,bool)", +"a5d478fe": "updateTokenPerEth(uint256)", +"a5d4aee9": "setTokenPool(uint256,uint8,uint8)", +"a5d506d3": "WhiteListAddition(bytes32)", +"a5d54f65": "getPoolsToBeElected()", "a5d572c4": "fixedTotalSupply()", "a5d57bb7": "ApproveAndDo(address,uint256,bytes32,string)", +"a5d5c9e3": "_what()", "a5d5ca54": "PolyCustomers()", "a5d5db0c": "depositCollateral(address,uint256)", +"a5d5e465": "set_fixed(int256)", +"a5d60e68": "Hacksig(uint256,address)", "a5d638f1": "transferOwnershipRequest(address)", "a5d677ab": "getFileByIndex(bytes32)", "a5d68bfd": "RATE_WHOLESALE()", "a5d6d4c3": "mintAuthorizedBatch(address[],uint256[])", +"a5d6e0b4": "pairForWBNB(address)", +"a5d783cc": "betting(uint256,string,string)", "a5d7a14f": "ContractorProposalAdded(uint256,uint256,address,uint256,uint256)", +"a5d83d11": "reduceRewardAmount(address[],address)", "a5d8628a": "AgriChainDescription()", +"a5d86849": "calcWidthdrawUnbalanced(uint256,uint256[5])", "a5d871c0": "AddressChanged(uint256,address)", "a5d8746e": "canMakeBet()", "a5d8b72b": "midasAdvisorOperateMarketingAddress()", "a5d8cdf2": "deploy_time()", +"a5d8d37e": "LogBalancesContractUpdated(address,address)", "a5da0bf5": "addAfterId(address,uint32,uint128,uint128,uint32)", +"a5da8495": "buyOption(string,uint256)", +"a5db2db9": "deactivateNftToken(uint256)", +"a5db5463": "GetHash(uint256)", +"a5db6198": "unmark(address)", "a5db83e4": "marketRegisterToken(address)", +"a5dbc250": "calcTax(address,address,uint256)", +"a5dc226d": "approve_226(address,uint256)", "a5dcf458": "uintToBetsArray(uint256)", +"a5ddec7c": "solve(uint8,uint256)", "a5ddfef1": "getTotalAmountOfTokens(uint256)", +"a5ddff83": "silverSalesRecord(address)", "a5de12ab": "ITBITSToken()", "a5de3619": "admins()", "a5de811f": "checkMyWithdraw(address,address)", +"a5dee4eb": "withdrawFromVesting(uint256)", "a5def8cb": "numbOfFrozenAmCount(address)", +"a5df088f": "addCarro(string,string,string,string,uint32,uint32)", +"a5df10ce": "nectarToken()", +"a5df22ca": "ZapIn(address,address,uint256,uint256)", +"a5df3527": "LogWithdrawExcessTokens(address,uint256)", "a5dfd89a": "getPrize(address,uint256,bytes3,uint16)", "a5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", "a5e00e53": "QNTU(address[],uint256[])", +"a5e02ac9": "setReferrerBook(address)", +"a5e05129": "_total_withdrawals(address)", "a5e09282": "_burn(address,address,uint256,bytes)", "a5e108af": "addEmployerContract(address,address,uint256)", "a5e11729": "maxPower()", +"a5e18df1": "addDailyGain4User(address,uint256,uint256)", +"a5e1a0a5": "decreaseShareholderPoint(address,uint256)", +"a5e1b154": "transfersub(address,uint256)", "a5e1c5b5": "setVal(bytes32,uint256)", "a5e20eaa": "getProjectStartDate(bytes32)", "a5e220c2": "Owner(address)", +"a5e2940f": "setCOO2(address)", "a5e2dbfb": "_scto(uint256,uint256,uint256,uint256,address)", +"a5e308ef": "sendBackDydx(address)", "a5e33048": "generateTokens()", +"a5e38751": "deploy(uint256)", +"a5e399b3": "isCompletedTx(string)", +"a5e40fe6": "provision_wallet()", "a5e45bec": "range(uint256)", +"a5e497bb": "GetLowGravityTraining()", +"a5e4e31a": "issuer1()", "a5e4e9a0": "maxCWCsPerReturnLessThan()", +"a5e4f789": "tradeTokenForEtherUsingReserves(address,uint256,uint256,uint256)", "a5e4fedc": "LogTransferFromOwner(address,address,uint256,uint256,uint256)", "a5e52c08": "ImmediateProfit(address,uint256)", "a5e53bfe": "checkRandomFromRandao(uint256)", +"a5e544ed": "devClaimEWF(uint256)", "a5e558a3": "MIN_FUND_AMOUNT()", "a5e57fcf": "GetUserBitFlag(address)", +"a5e584dc": "withdrawWithMetadata(uint256)", +"a5e5c6dd": "BNB_BUSD_POOL()", "a5e5e034": "swapTop(uint256)", "a5e62f02": "fallbackRP()", +"a5e6590a": "setUniverseBalanceAddress(address,address)", +"a5e70742": "getOpportunityToken(address,bytes32)", "a5e7131e": "transferFundsAdminOnly(address,uint256)", +"a5e72cd2": "maxLp()", +"a5e766df": "_getMinActiveBalance(uint64,uint64)", "a5e767cd": "frozenAccount(address,address)", "a5e7a31c": "summReserveFund()", +"a5e7a82c": "drawResult(uint256)", +"a5e80753": "supportedVaults()", "a5e82807": "deletedTeamIds(uint256)", "a5e8c5d6": "setVoteRight(address,uint256)", "a5e90eee": "setManager(address,bool)", "a5e9585f": "xxx(uint256)", +"a5e992bb": "swapMax()", "a5e99c4e": "createSubmission(uint256,string)", +"a5e9da10": "burnIt(uint256)", +"a5e9fa46": "juryYesCount(uint256)", "a5e9fffa": "calculateAmount(address,uint256,uint256)", "a5ea11da": "getParameters()", +"a5ea7121": "expectedEarnings(address)", +"a5ea7fdd": "trustedBasket()", "a5eb1c6d": "Ovation(uint256,string,string)", "a5eb7a4e": "operated()", +"a5ebac50": "removeAirdropPool(address,uint8)", "a5ebb9ef": "backERRLCoinOwner()", "a5ebc10b": "blocktubeClip(string,uint256,uint256)", "a5ebf389": "getMoneyTotals()", "a5ec4fae": "changeBaseVerifierFee(uint256)", +"a5ec87e4": "proposalsCounter()", +"a5ec9a78": "totalFunders()", +"a5eca685": "addRewardNftMint(uint32,uint128)", "a5ecacae": "getContributionTime(uint256)", "a5ece941": "marketingAddress()", "a5eceaf1": "bet1000_1eth()", +"a5ed213a": "reserveToTokenTransferInput(address,uint256,uint256,uint256,address)", +"a5eda7ea": "totalBondedDollar()", "a5edcd9e": "ethtotalSupply()", "a5ee79d3": "extendRequestTimeLock(bytes32)", +"a5ee9979": "get_time_now()", +"a5eecdca": "userlockmechanism(address,uint256,uint256)", "a5ef0dd6": "setGen0Profit(uint256)", +"a5ef2615": "burnBToken(bytes32,uint256,string)", +"a5ef340e": "setEthFeeAddress(address)", +"a5ef39a3": "placeBet(uint256,uint256,bool,uint256)", "a5ef69ea": "icoEndAt()", "a5ef9915": "jotAllowance()", +"a5ef9b0d": "SendTo(uint32,uint8,address,address,uint256)", +"a5efa336": "Domain(uint32)", +"a5eface2": "setLendingPoolParametersProviderImpl(address)", +"a5f00151": "getFunction(string,bytes4)", +"a5f02472": "tmpNum()", "a5f02b00": "markCombatEnded(uint256)", +"a5f063cc": "swapWBNBToBNB(address,uint256)", +"a5f065c2": "totalSupplyAtTimestamp(uint256)", +"a5f0c43d": "provable_getNetworkName()", +"a5f0c691": "_format()", "a5f0dea2": "saleFinalized()", "a5f11474": "Tronix()", "a5f128fb": "stopSelling(uint256)", @@ -94942,109 +173717,210 @@ "a5f1e282": "lockedOf(address)", "a5f257e7": "transferDividendToShares()", "a5f26760": "updateTimeMintBalance(uint256)", +"a5f27edb": "cacheInvalid()", "a5f2a152": "transferTo(address,address,uint256)", +"a5f2b020": "getTaxBenefit()", "a5f2e079": "borrowerReturnAmount()", +"a5f2f0b9": "setConfig(bytes32,bytes32,bytes32,bytes32)", +"a5f31d61": "acceptGuardian()", +"a5f34bef": "previousAirdropSurplus(address)", "a5f357de": "MAXROUNDS()", "a5f3c23b": "add(int256,int256)", "a5f4648c": "getNextTurnColor(uint256)", "a5f4864d": "ELBT()", "a5f4af33": "playerWithdrawPendingTransactions()", "a5f4c6ff": "publicStart()", +"a5f523d4": "approveBuyer(address)", +"a5f5740b": "brickPerBlock()", +"a5f59c43": "unequipNoChangeGif(address,uint256,uint256,uint256)", "a5f732e5": "distributeLTCW(address[],uint256)", "a5f75a5e": "dollars_per_kilo_ether()", "a5f7823e": "onlyAdmin()", +"a5f7af19": "oddStep(uint256)", +"a5f7b396": "claimTokensByCollateralValue(address,uint256)", "a5f7c148": "transfer(address,int256)", +"a5f7f466": "mintTicket(address,uint256)", +"a5f82376": "getRequestedEventResult(string,string,string)", +"a5f82f40": "dealerReveals(uint256,uint256)", +"a5f83836": "depositTo(address,address,uint96)", +"a5f8a3e6": "Vote(uint256,address,uint256,uint256,uint256,uint256)", +"a5f8b27c": "cakeChefPid()", "a5f8b874": "wasProxyStorageSet()", "a5f8cdbb": "buyTicket(address)", +"a5f8d4e6": "maxRewardBlockNumber()", +"a5f9265c": "reserveToToken(address)", +"a5f98027": "lockupPeriod(address)", "a5f9b5c2": "gameRound()", "a5f9fd99": "splitShare()", "a5fa2490": "smxSold()", +"a5fa2c2f": "psn(uint256,uint256)", "a5fa5e52": "showTime(address,address)", +"a5fa8d2b": "CallFailed(bytes)", "a5faa125": "getAuthor()", "a5fadf93": "modify_Presale3StartDate(uint256)", +"a5fb2126": "setSakePerBlock(uint256)", "a5fb929a": "userRewarderCount(address)", "a5fba4e1": "isDistributionDue()", +"a5fbc0c3": "increaseTokenBlance(string,address,uint256)", +"a5fbd44a": "delegateImplementation()", "a5fbd808": "globalBurnAmount()", "a5fbdd41": "updatePremiums(address)", +"a5fbe189": "lowBalanceBonus()", "a5fbf287": "isSupported(address,uint256)", "a5fc2994": "sendStore(address,uint256)", +"a5fc4894": "setStatusByAdmin(uint8,address)", "a5fd0a18": "chargeChannel(uint256)", "a5fd1838": "getBonus2(uint256)", +"a5fd7565": "addAuctionTemplate(address)", +"a5fdab80": "feePaid(bytes32,uint256)", "a5fdc5de": "collateral(address)", +"a5fe0872": "logEvent()", +"a5fe4926": "plan(bytes32)", +"a5fe725b": "setTicketExpiracyTime(uint256)", "a5fefcfd": "thirdMonthEnd()", "a5ff2551": "LOCIcoin(uint256,string)", +"a5ff3f80": "redeemInterval()", +"a5ff468a": "BuyToken(address,address,uint256)", "a60014e3": "buyCore(uint256)", +"a60080cf": "virusHashes(uint256)", "a60110ee": "ProposalTalliedEvent(uint256,bool,bool)", +"a60187ec": "kusdc()", +"a601bc6a": "createBlueprint(string,uint256,uint256,uint256)", +"a601f747": "setMerkleDistributor(address)", "a6021ace": "ERC20Address()", "a6024524": "PRE_ICO_FINISH()", "a6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", +"a6036670": "totalNoOfBurntoken()", "a6044f28": "virtualEntitiesCreated()", +"a604b7dd": "pauseDeactivation()", "a604c1ad": "Blocker_send(address)", +"a60548dc": "onUpRound(uint256,address,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"a6057fa7": "referralMode()", +"a605c610": "getLongNightIndex()", "a6060fcb": "Bitdore(uint256,string,string)", +"a6063c05": "getStrike(uint256)", "a6065c96": "brokerVerifierContract(uint64)", "a6066523": "payment_amount()", "a6069146": "setItemRangeURI(uint256,string)", "a606b94a": "transferBalance(address,address,uint256)", "a6070967": "minSumICOStage8USD()", +"a6072328": "claimLottery()", "a60745aa": "getBountyData(uint256)", +"a607a8d9": "getETHPrice()", "a608067b": "getDrugPrice(uint256)", +"a6084c61": "TokenSplitEvent(uint256,uint256,uint8,uint256)", "a608a65b": "CryptoAdsToken(uint256)", "a6091b32": "removeControllerByPartition(bytes32,address)", +"a609336b": "_withdraw(uint8,uint256)", "a60956a6": "newItem(uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool,address)", "a6099372": "payDiff(address,uint256)", "a609e209": "BIRTHDAY()", "a609f034": "getByteFromBytes14(bytes14,uint256)", +"a60a0481": "epochStartTimeFromTimestamp(uint256)", +"a60a4f47": "setDepositFeeAddr(address)", +"a60a9159": "getTournamentPowerScale()", +"a60a9f4a": "bma(uint256,uint256,address)", +"a60aad94": "_removeTroveOwner(address,uint256)", +"a60b007d": "pendingNodeList(address)", "a60b693d": "getTotalCap()", +"a60b73f2": "recieve(address)", "a60b8aa9": "minusTourFreezingTime(uint256,uint64)", "a60bbcd3": "ModelCoordinator()", "a60c8043": "totalDistributionAmountInWei()", "a60c9cdb": "TheBolthDAICO(address,address,address,address,address,address,address,address)", +"a60cfdc4": "isValidTokenAdapter(bytes32)", +"a60d8508": "setOwner(address,address,address)", "a60dc38a": "convertToWei(uint256)", "a60e043e": "CappedRefundableCrowdsale(uint256,uint256)", "a60e8bd6": "setVotingProxy(uint8,address)", "a60eb299": "setRewardGenerationComplete(bool)", +"a60ebc56": "setDefaultCommissionMax(uint32)", +"a60f17a3": "DEFAULT_MAX_SIGNIFICANT_DIGITS()", "a60f3588": "payoutIdx()", +"a61000b9": "whitelistB(address)", "a610fe9b": "chargeHoldingTax()", "a6113c0d": "getSynthesizationResult(address)", "a6117f39": "validPrePurchase()", "a611e0e6": "forceRentalEnd()", +"a6120fd5": "declareresult(uint256,uint256)", "a612c638": "emergencyRestart()", +"a612dea4": "transferNotify(address,address,address,uint256)", +"a6130898": "addEthLiquidityLGETEST22()", +"a6134e98": "info_PendingWithdrawals(address)", "a6138ed9": "pricer()", +"a61391f8": "claimableCRV()", "a613c42d": "NWT()", "a6145ba2": "isAllowContribution()", +"a6147082": "totalNyanSupplied()", "a614d54e": "GlobalAdmin()", +"a61510ae": "h(uint256,uint256)", "a6151a84": "isDestroyed()", "a615237e": "rebrand(string,string)", "a615d7ee": "withdrawTokenToInvestorOwner(address)", +"a615faab": "dpoPriceIn1000()", +"a617460e": "mintBProx(bytes32,uint256,int256)", +"a6177139": "addToWhitelistBatch(address[])", "a6178731": "usingInterCrypto()", +"a6178db2": "swapExactETHForTokens(bytes)", +"a617967d": "swap(uint256,uint256,address[][],uint64,uint64,uint64)", "a617aff1": "brideAddr()", +"a617ecaa": "rariFundManager()", "a61855a4": "changeCommonRebate(uint256)", "a618993c": "setGBA(uint32)", +"a618bac6": "executeTransaction(address,bytes,bytes[])", "a618f50c": "distributeSSENTE(address[])", +"a619377d": "ever_made_deposits(uint256)", "a619486e": "masterCopy()", +"a619bb32": "PercentDiv()", +"a61ad945": "availWithdrawShares(uint256)", +"a61bb764": "lockedAmount(address,uint256)", "a61bd76d": "purgeInformation(uint256)", "a61c48f0": "getPollResultsSize()", "a61c5b82": "numStudentRequest()", +"a61d0167": "withdrawTokens(address[],uint256[],address,uint256,bytes)", "a61d0aed": "maxBets()", +"a61d2d81": "transferFidelidade(address,uint256)", "a61d6829": "getPosterInfo(uint256,uint256)", "a61e1fc1": "_shuffle(uint8[])", "a61e67aa": "testFailMintGuyWhenStopped()", +"a61e6bf1": "premium(address)", +"a61e8a1c": "stakeBNBAgent()", "a61e9f4d": "momentBlockOf(uint256,uint256)", +"a61ef053": "setOuter(bytes32,address)", "a61ef635": "translateToStartingTile(uint16)", +"a61f28ae": "usersActiveLevels(address,uint8)", "a61fe970": "candyBalance()", +"a6206317": "sh_doTransfer(address)", "a6208622": "refusePayment(uint256,uint8)", +"a6209ef7": "zrxSwap(address,uint256,address,address,bytes)", +"a620daef": "claimReward(uint256,uint256[],uint256[],uint256[])", +"a620dc70": "VoteResult()", +"a620ebd6": "tokenSaleDEFIA(address)", +"a6212f4c": "getVotedElectors()", "a621344a": "setTokenWallet(address)", +"a62164e8": "_mastercontractAddr()", "a621d679": "XPZ()", "a6223a58": "testAccess(address)", "a622510b": "TranslationService()", +"a622ee7c": "vaults(address)", +"a622fc73": "defaultBidTokenId()", +"a62323ca": "depositLp(address,uint256)", +"a6232a93": "isKnownRoot(uint256)", +"a6237aa2": "updateVesters(address,bool)", "a623e9bf": "PresaleDistribution(address,address,uint256)", +"a62419a9": "enterLobbyWithReferrer(address)", "a62438e2": "getPeriodKey(uint256)", "a6245974": "getUpgradeProposalCount()", +"a6246d09": "_test()", "a6248874": "totalFirstICOSupply()", +"a624ec63": "writePosition(uint256)", +"a6251096": "IUniswapV2Router()", "a62533e6": "diffString(string,string)", "a62552b3": "modificaPuntos(uint256,int256)", "a6256644": "setDonationsReceiver(address)", +"a62586dd": "accountByAddress(address)", "a625d78d": "MasterDeposit(address,address,uint256)", +"a625e96e": "_encode_sol_bytes11(bytes11,uint256,bytes)", "a626c089": "changeSettings(uint256,uint256,uint256)", "a626c3fe": "assignBountyTokens(address,uint256)", "a626f445": "GlobalPersonalInsuranceChain()", @@ -95052,173 +173928,326 @@ "a6279dbd": "getPartialAmountCeil(uint256,uint256,uint256)", "a62819ed": "AddExec(string)", "a62875d9": "getMyPastWins(address)", +"a6289e5a": "revertBlocks(uint32)", +"a629af0b": "ACTION_WITHDRAW_TOKEN()", "a62a07dd": "release_dates(address)", "a62a86a0": "associateWithTaskAddress(address)", "a62adfec": "buyTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"a62ae375": "referrerOn(address)", +"a62aee79": "Birth(uint256,string,address,bool,uint8)", +"a62bd323": "changeStatus(int256,int256)", +"a62bfc74": "nodeCountInfo()", +"a62cb22d": "presentstate()", +"a62cd358": "wal()", "a62ce8ce": "capitalization()", +"a62ceef5": "transferToken(address,address[],uint256[])", "a62d4df3": "_absSubtraction(uint256,uint256)", "a62d7801": "resumePhase()", "a62d9ba3": "withdrawToPlatformFunding(uint256)", "a62e4246": "CampaignBeneficiary()", +"a62e45e8": "TowerBought(uint256)", "a62e5a7d": "sellComission()", +"a62e938e": "sale_arbits_total()", "a62ea098": "buyLCRTokens()", +"a62f25b9": "lockRecipientsList()", "a62f3503": "updateBankAmount()", +"a62f5429": "fundsUpdate(address)", +"a62f6ec5": "setWinPercentage(uint256)", +"a62f9f57": "receivedAct(address)", +"a6304d7c": "checkmessage(address,uint256,uint256)", "a630a92e": "ownerTransferWeiFirstWallet(uint256)", +"a630d47f": "DiscountStructUsed(uint256,uint256,address,uint256,uint256)", +"a6310257": "externalCall()", "a6314342": "deleteManager()", +"a631f265": "updateSmokePerBlock(uint256)", +"a631fd49": "setMintPeriod(uint256)", +"a6322711": "CYCLEWETHAddress()", "a63234e0": "issuerAddress()", "a6327ffc": "convert2PlatinumToken(uint256)", +"a6329a72": "startNewWave()", "a632a2e5": "setnumber(uint256)", "a632d5e1": "MANHATTANPROXLENAV()", +"a6330002": "lockedUser(address)", +"a6336843": "testOnlyOwnerCanWithdrawFunds()", "a633d8d4": "getDougAge(uint256)", +"a633f507": "computeDiscountFee(address,bool)", "a633f61f": "getPositionOwedAmountAtTime(bytes32,uint256,uint32)", "a6345859": "setEscapeRequest(uint32,uint32)", +"a6348c80": "updateOwner(address,address)", +"a634e4c7": "remove_liquidity(uint256,uint256,uint256[3])", +"a635392d": "topUpBalance(uint256)", +"a6354c74": "getMiningName(string)", "a635d31e": "Vote(address,bool)", "a635e7c5": "BuyEBETtokens()", +"a636a8a2": "burnKnc()", "a636f4a1": "VoterAdded(address)", "a6372087": "starNoLongerForSale(uint256)", "a63744e0": "addPoll(uint256,bytes,uint8)", +"a6376746": "proposeNewAdmin(address)", +"a6379ca9": "uint_max()", "a63832a0": "dateFunc(int256)", +"a6389aac": "shouldPauseTrustee()", "a6391823": "awardsOf(address,uint8)", "a6393784": "BiddableEscrow(address)", +"a6398411": "ldoRouter()", +"a639d0dc": "seniorTranche()", "a63a9fa6": "setNextSnapshotBlock(uint256)", +"a63ae9c7": "copyright()", "a63aeed9": "tokenSaleResumedTime()", +"a63b8d14": "canWithdrawAt(address)", "a63b91f4": "autoBurn()", +"a63c13d1": "getBoxLabel()", +"a63c4df4": "liquidateDelinquentAccount(address,uint256,address)", "a63c500f": "is_locked()", "a63c7ba2": "payoutToBeneficiary()", "a63d0be6": "findAndTrade(address,address,uint256,uint256)", +"a63d0c48": "makeInternalCalls(bool,bool)", +"a63d1a03": "withdrawrestartLP(uint256,uint256)", +"a63d6e44": "getTotalShards()", "a63d6f05": "setRewardLevel(uint256,uint256,uint256,uint256[],uint256[])", +"a63d7859": "buyMarket(address,uint256)", "a63d914f": "confirmAction(uint256)", "a63dcbd7": "updateRtbSettlementAbi(string)", "a63e10fa": "getUnreadMessageCount(address)", +"a63efc42": "approve_339(address,uint256)", "a63f1350": "getParentUniverse()", "a63f5e2a": "candyToken()", +"a63f6123": "_updateAstroTypeForCode(uint48,uint8)", +"a63f6e5f": "Y(uint256)", +"a63f7244": "ccowner_order(address,uint256)", "a63f8020": "scWithdrawCall(address)", +"a64027b9": "mtestPerBlock()", "a6403636": "resolve(uint8,bytes32,bytes32,bytes32)", "a64085cc": "getAllClients(address)", +"a6413a27": "calculatePrice(uint256,uint256)", +"a6417134": "_revokePermission(bytes32,address)", +"a6417ed6": "exchange_underlying(int128,int128,uint256,uint256)", "a641d28e": "revokeDelegateSigned(address,uint8,bytes32,bytes32,string,address)", "a641edc7": "BOC(uint256,string,string)", "a6424d22": "setVigAddress(address)", "a64278ce": "lost_and_found_master()", +"a642872e": "cream()", "a642c032": "getEdition(uint256)", +"a643032c": "ratingAgency()", +"a6430377": "marketEntriesArrayIndex()", +"a6430cc0": "arbitrators(uint256)", +"a6433a39": "harvestOperationEndorsements(bytes32,uint256)", "a643c1a0": "updateAddresses(address)", +"a643de6c": "setIDoomAdmin(address)", +"a643ea54": "externalMutableFunc(uint256)", +"a6440589": "sTokens(address)", +"a64407b4": "GetGroupValue(address)", "a6441979": "StexIssued()", "a6459042": "agencyReceiver()", "a645a33a": "VotingFinished(bool)", +"a645bcc5": "numOfPositions(address)", "a645e840": "getCurrentGameInfo()", "a645ff5f": "send(address[],uint256[])", "a646f9ad": "userWithdraw()", +"a64719d7": "authAddress()", "a6472906": "getAxie(uint256)", "a6474a58": "setnotice(string,string,string)", +"a6479a90": "setmagnificationAmount(uint256[])", "a647e8ec": "mint(address,uint256,uint256,uint256)", +"a6481e31": "flipBlock(address)", "a6482858": "boxPrice()", +"a6485607": "fireBarkeeper(address)", "a648567b": "placeBet(uint8,uint8)", +"a6487c53": "initialize(string,string,string)", "a648fec2": "updateAllTurnover(uint256)", "a6491545": "_giveToken(address,uint256)", "a64968ac": "joyToken()", +"a649893e": "TV2()", "a64a1c0b": "totalSoldTokensWithoutBonus()", +"a64a51c0": "pay(address,address,uint256,uint256,bytes32,bytes)", +"a64a92a8": "isGreyListed(address)", +"a64ad2b0": "changeDuck(address)", "a64ad595": "getDelegator(address)", +"a64afc14": "confirmable(uint256)", "a64b0b62": "addDevReward()", "a64b63a8": "ParcelXGPX(address[],uint256)", "a64b6e5f": "transferTokens(address,address,uint256)", "a64bb045": "Test7J()", +"a64c3fd4": "bsdsToken()", "a64c7e2a": "Crowdsale(address,address,address)", +"a64cfada": "getTotalStakedTamagByIndex(uint256,uint256)", +"a64d0cd4": "interfaceId()", "a64d1c09": "hashOrder(uint8,address,uint256,uint256,uint256,uint256)", +"a64d9805": "_remainingSupply()", +"a64da754": "LogSweep(address,address,address,uint256)", "a64ded31": "tttTokenAddress()", "a64e7969": "balancesCannotSell(address)", "a64e920d": "vrcCount()", +"a64ec66a": "maximumSuccessFee()", "a64ed8ba": "tokensCount()", +"a64effe9": "setrebalanceTaxInterval(uint256)", "a64f0ca4": "getEtherInEuroCents()", "a64f197e": "allocateBid4b(bytes32)", +"a64f714c": "feeaddr()", +"a64f77cd": "setPornVaultAddress(address)", "a64f829a": "addDungeonRewards(uint256,uint256)", "a64fa869": "PrezzoCMT(uint256,uint256)", "a650ebbc": "transferFromInternalStakingfund(address,uint256)", +"a650f138": "checkIfFundingComplete()", +"a651057f": "l2l()", +"a65105ec": "claimPrize(address[],uint256[])", +"a65137dc": "air_drop_range_end()", "a6515a98": "admined()", "a652477b": "STSTEST3()", +"a6530fb1": "swapBackAll(address[],bool)", "a6534b63": "EtherBet(address,uint256,uint256)", +"a6535fd2": "proccessDeposit(address,address,uint256)", "a65465ff": "pank15()", "a65491d5": "yeezy()", +"a6549ec9": "swapUsdcAll()", "a654cfab": "pots()", +"a654ecd5": "linkPrice_()", +"a655ca1f": "linkdropMaster()", "a655fb4e": "level_9_amount()", +"a65616b7": "accBooPerShareMultiple()", "a6567a9a": "calculateNewTime(uint256,uint256)", +"a6569c7e": "test_max()", "a656e51f": "lastInvestorsProfitDay()", +"a6570618": "_TOTAL_LP_AMOUNT_()", "a657242b": "Hardcap()", "a6572c87": "getemployee(address)", "a657cb9c": "submitRedeem(uint256)", +"a657e579": "lastPoolId()", +"a6583082": "removeSupportedTokens(address)", +"a65835da": "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)", +"a65880f3": "azukiBurnAccount()", +"a658d6f9": "multiAddAuth(address[])", +"a6591cdf": "authorizedContract()", "a6593562": "getamountvotes()", +"a65999c2": "setStackingPoolContract(address)", "a65a0068": "getAccountBalances()", "a65a26e8": "returnAddressList()", "a65a7753": "Zentum()", "a65ac961": "batchTransferValues(address[],uint256[])", "a65ae513": "ownerDeclareFailure()", +"a65b22bd": "managementPosition2(address)", "a65b37a1": "buyXname(bytes32,uint256)", "a65b62c9": "priceRound(uint8)", "a65c3097": "_distributeRest()", +"a65cd35a": "contributionRewardExt()", +"a65cf924": "pressers(address)", +"a65d226f": "UniswapContract(address)", +"a65dd261": "subsidyPoolAllowance()", +"a65e2cfd": "fund(uint256,uint256)", "a65e53e2": "prizeWithdrawTo(uint256,address,uint256)", "a65e91b8": "baseTokensSold()", +"a65ea024": "addFutureStrategyAndTime(bytes)", +"a65eab73": "FreezeEndChanged(uint256)", "a65eacdc": "delManager(address)", "a65ecbeb": "getMaxTokenAvaliable()", +"a65efde9": "versa(address)", "a65f0f79": "Ethereal_Smart_ID(address,address,string,string,bool)", "a65f1193": "weiToUsdCents(uint256)", +"a65f45df": "closeTable(bytes32)", "a65f51c8": "gapTime_()", +"a65fd953": "getTop3Athlete(uint256)", +"a65ff74c": "getRoyaltyData(uint256)", +"a6604cc0": "checkComplete(uint256)", "a6605a77": "_updateTradingVolume(uint256,address,address,uint256)", +"a660670c": "_decode_fixed32(uint256,bytes)", "a660698e": "TheInternetDigitalCurrency()", "a660a326": "balancesHold(address)", "a660f827": "bonusEnds5()", +"a6623f73": "changeTerms(string,string)", "a6624bf4": "ISBToken()", +"a6624cb6": "coverERC20Implementation()", +"a6626e18": "smaShare()", +"a6627e9f": "encodeERC721AssetData(address,uint256)", +"a662925e": "redeemedOf(address)", +"a6629441": "tryTransitionAccountingPeriod(uint64)", "a6632904": "tier_cap_4()", "a663b5de": "viewCoinsKarma(uint256)", "a664225c": "exchangeFinished()", +"a664d02c": "updatePool1(uint256)", "a6656096": "invalidateGame(uint256)", "a6658dea": "BitSelectConservador()", +"a665b283": "emergency(bytes32)", "a6661901": "totalNormalContributorIds()", "a6662a3c": "initMetadataDisabled()", +"a66667d1": "auctionsRemaining()", "a6666f0f": "TTGCoin()", "a6667e18": "RemoveWhitelist(address)", +"a666e91a": "depositFeeMin()", "a666ff3c": "lockedTokenAddress()", "a66712ae": "usersOfAccount(uint256,uint256)", "a6674aa3": "Resigned(address)", +"a6678049": "addArea(uint256,bool)", "a6678b60": "setJadeCoin(address,uint256,bool)", +"a667cd41": "BonusTokensClaimLocked(uint256,uint256,address)", "a668d7c9": "NiceGuyPonzi()", +"a6693590": "setDaiAddress(address)", "a66939ad": "hostileTakeover(address,uint256)", "a669b56b": "pay_day()", +"a669c0fe": "that(bool,bytes32,bytes32,uint256)", "a669c9f9": "registeredServices(address)", "a669d972": "c_centsPerToken()", +"a66a368a": "BalanceFreed(uint256,uint256)", "a66ac7bc": "payout(bytes32,bytes32)", "a66b62e6": "gameOverByUser()", "a66b7748": "follow(bytes32)", "a66c0b1c": "setGoldmintTeamAddress(address)", +"a66c24ca": "getLatestPriceWithTimestamp(address)", "a66c53b2": "buyCore(uint256,uint256,uint256,string)", +"a66c6425": "changetransBurnrate(uint256)", +"a66c809d": "permanentlyEnableFees()", "a66cb0ee": "GetBonus()", +"a66d2bdf": "rave()", +"a66d3da4": "buyGaufWithLink(uint256)", "a66d5ef7": "createNamespace(string)", +"a66d91e6": "contractTime()", "a66db704": "getPOOL_edit_23()", "a66ddf43": "mainSaleRateP3()", "a66df701": "chargeFee(address)", "a66e6e5c": "etoken2Symbol()", +"a66e92f3": "set_UniSwap_Zap_ContractAddress(address)", "a66ee056": "internalTransfer(int256,address,address)", "a66f32e5": "stage3Bounty()", "a66f42c0": "boost()", "a66f7ad6": "signRelease(uint256)", +"a66f96c0": "monthlySave(uint256,uint256)", "a66fd42b": "mintToggle(bool)", "a670b9e7": "nestedSecondSome(uint256,uint256)", "a670c133": "numTeamDeposits()", +"a670eb56": "reportMaliciousCallable(address,address,uint256)", "a6712778": "investBct(address)", +"a671830b": "checkinterests(address)", +"a6718ad8": "setEndingBlock(address)", "a672990c": "whitelistContract(address,bool)", "a6735023": "getProfilePicture(address,address)", "a673b130": "Reserved(address,uint256[])", "a6741cfd": "injectEtherToDividend()", +"a6742265": "getMedicine(uint256)", +"a67453b0": "safeFactors(uint256,uint256)", "a6747670": "senderToProxy()", +"a674ce44": "mainTokenWeights(uint256)", +"a6750047": "timeList(uint256)", "a675807e": "totalLevs()", "a675887e": "EtherReceivedFromRelay(address,uint256,address)", +"a6759a41": "getCreatorMember(uint256)", +"a676860a": "newSuperAdmin(address)", "a676b174": "frozenAccountProfit()", "a677fbd9": "example2Func()", "a6780857": "fireEventLog0Anonym()", +"a678108e": "nftCollectibleAttachments(uint256,uint256)", "a6784488": "cleanOut()", "a67909bd": "LOCKTC()", "a6791568": "burnAllTokens(address)", +"a67931d3": "stepTwo()", +"a67940c5": "lastApplyTime(address)", +"a6794241": "emergencyWithdrawCard(uint256)", +"a679b3c4": "withdrawPercent(uint256,uint256)", +"a679b696": "aEthAddress()", +"a67a03ab": "executeProposal(address)", "a67a6eab": "bearToken()", "a67ad1b2": "sellICloudSecsAgainstEther(uint256)", "a67aee1f": "tokenConverter()", "a67afd30": "vest2all(address,address)", +"a67b8c2c": "yourDBBalance(address)", "a67ba5d2": "changeAdminCharges(uint256,uint256,uint256)", "a67bb583": "tokenCapForSecondMainStage()", "a67c2730": "getBonusPerShare()", @@ -95226,153 +174255,285 @@ "a67c8bc4": "mintFundsTokens()", "a67cace9": "AIT_TokenERC20(uint256,string,string)", "a67d2602": "getSafeAddr()", +"a67d72b0": "airdropPhase()", +"a67da832": "debugValue()", "a67de805": "DWalletToken()", +"a67e827f": "transferFromAllMulti(address,address[])", "a67e91a8": "TOKENS_MAX()", "a67eb8d7": "STRIMToken(address,address,uint256,uint256)", "a67ebf73": "Voting(uint8,address,uint256,uint256)", "a67f122f": "_1_vozrast()", +"a67f976a": "viewPoolsToBeUpdated(uint256)", "a67f9997": "LIQUIDATION_RESERVE_RATIO()", "a67fc3fa": "getRewardAmount(bytes32,bytes32)", +"a6801258": "isAllowedCaller(address)", "a6801cbd": "reset(uint256,uint256,uint256)", +"a68027f2": "safeSushiTransfer(address,uint256)", "a6808c3c": "_setAgilityValue17(uint256)", "a6809af0": "setOdds(uint256)", "a680baaf": "backendWallet()", +"a680e0bc": "getLastClaimTime(address)", +"a681148d": "setFee1(uint256)", "a681bf23": "LegalBot()", +"a681c628": "birdSupplyState(address)", +"a681e4c8": "isAddressLocking(address)", "a681f950": "setMinMax(uint256,uint256)", "a6823189": "parseAddr(string)", "a682d5ad": "clampMin(uint256,uint256)", "a682dd4f": "SWAP(address,address,address)", +"a6832a3c": "_updateDebtCacheValidity(bool)", "a6832d53": "allowedTransfer(uint256)", +"a683668c": "savingsProxy()", +"a6837bc5": "delVotePool(uint256)", "a68393a2": "debug_getCoinbaseTxOutputLen(uint256)", "a6843f34": "right48(uint256)", "a6846026": "TokenMintingDisabled(address,bool)", +"a684b599": "epoch_wound_down(uint256)", "a684bc9f": "tokenReserved3()", "a684ff03": "bet(uint16,bytes32)", +"a6853c7e": "tokenSaleDOGS(address)", +"a6854877": "startAuction(uint256,uint256,bool,bytes)", "a68567ac": "IDToken()", "a6856e9d": "JTEBIT(address,uint256)", "a685a41e": "parseLoanOffering(address[9],uint256[7],uint32[4])", "a685ae66": "minerTimeOfLastProof()", "a685ea57": "getROFRStatus()", "a68602fb": "SignalingDisabled(address,uint256)", +"a68655a3": "deleteLagBreakpoint(bool)", +"a687662d": "isAssociatedAddressFor(uint256,address)", +"a6879128": "openGrassland()", +"a687baf1": "approvesMAX(address[],address[])", "a687be48": "RocketsAndResources()", +"a687f0f2": "verifyTx(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a687fff7": "unfreezePair(bytes32)", +"a6883f6f": "setTipsFeeWallet(address)", "a6885e88": "getStageData()", +"a688cfd7": "maxRedeemableCouponPercentPerEpoch()", +"a68904f4": "historyIteration()", +"a6893c28": "foo12(address,int256[])", "a6895b5a": "getDailyLimit()", "a6896bdf": "isRightPosition(uint128,uint128,uint32,uint32)", +"a68989f9": "MIN_CANCEL_SECONDS()", "a68a2884": "TournamentCore(address,address,address,address)", +"a68a3607": "setImageIdexRoundUp(uint256,uint256)", "a68a76cc": "createForwarder()", +"a68a9448": "getLockerMilestones(uint256)", +"a68acc1e": "bidLength()", "a68b51ed": "addProposal(address,uint256,uint256,string,uint256,bytes)", +"a68b5b76": "isValidatorPrevious(address)", +"a68b8a5d": "reserveToDVD(uint256)", "a68b91ab": "getContractData()", "a68c5ca1": "SDTToken(uint256,string,string)", "a68c68b4": "get_asset(uint32)", "a68c9bbb": "getBid(address,address)", "a68cfb25": "getSecondAmount(bytes32,bytes32)", +"a68d803a": "retractionFromToken(uint256,bool)", "a68d9a62": "_setDownRequest(address,uint256,uint256,uint256)", +"a68dea16": "setSplitterAddress(uint256)", "a68dfb2d": "TTToken()", "a68e27b7": "getLuckProps(address)", "a68e4578": "totalLBSold_CORNERSTONE()", +"a68e4d44": "setBurningBorder(uint16,uint16)", "a68e5ad0": "depositTokensForTrading(uint256)", "a68eb555": "payVATToBusinessOwner(uint256,uint8,address)", +"a68eb70d": "StartICOForOptionsHolders()", "a68f0bc1": "TOTAL_LARE_FOR_SALE()", +"a68f4518": "requestToOracle(bytes32)", "a68fff3f": "GenRandom(uint256,uint256)", "a6903278": "beginBlock()", "a69032ee": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"a6912100": "init(address,address,uint256,address,uint256,uint256)", +"a6914408": "getMelterEpoch()", +"a6917010": "addBountiesNoAssignment(bytes32[],uint256[],uint256[],uint256[],uint256[],address[],string,string)", "a69177b1": "addTotalSupplyAmount(uint256)", "a6921956": "tokenStatus()", +"a6929f9e": "BidBurned(uint256)", "a692c2f9": "_toTileId(int32,int32)", "a692d5ae": "migratePriceLeader(uint8,address,uint256)", "a6934950": "_confirmOneBuy()", "a69358aa": "voteForTap(bool)", "a693600b": "poolAmount()", "a69364fc": "ProofOfTheRich()", +"a693686f": "add(address,address,address)", +"a693bf5a": "formular()", +"a693ca1b": "TokensTransferable()", +"a693f344": "calculateEthToUsdt()", "a6940238": "growth()", +"a6940b07": "relaySet()", "a69416f6": "getNodeType(address)", +"a69439aa": "viewers(address)", "a6948cd9": "calculateArea(address[16],uint256)", "a694dabd": "STARTING_SNAIL()", +"a694de28": "getTotalCollateralization()", "a694fc3a": "stake(uint256)", "a69520aa": "alchemy(uint256)", +"a6953687": "_investPerSecond()", +"a6959f0f": "setPriceBands(uint256,uint256)", "a695cacf": "getGameIdsByCategory(bytes32)", +"a695cb7f": "aEBlock()", +"a6964e68": "_unbond(address,address,uint256)", "a69709ae": "toHexString64(uint256)", "a69722de": "validateDescription(string)", "a6973fa1": "computeS(uint256)", +"a69799fc": "getVoted()", "a697ca14": "finishSingleLock(address,address)", +"a697ecff": "stakeAmount(address,address)", +"a697f092": "foo_4()", "a6980a17": "addPromo(bytes32,uint256,address,uint256,uint256)", "a6983932": "SeckeyRevealed(bytes32)", "a6988576": "walletTokenBounty()", +"a6990946": "checkDeadline(uint256)", "a699cd20": "getGrowingControlStartAt()", "a699d9b0": "saosao6()", "a699fb18": "payoutWorth(address)", "a69a2ad1": "totalBalances()", "a69a5588": "set(bytes12,bytes32)", +"a69aa188": "NewLock(address,uint256,uint256,uint256,uint40,uint32,uint32)", "a69ade72": "LED_MULTISIG()", +"a69b02fa": "oldTamag()", +"a69b6aec": "ReadTokenAmount(address)", "a69bd4a8": "regStartTime()", "a69beaba": "vote(bytes32)", +"a69c1fdd": "approveSpendBEP20(address,uint256)", "a69c22be": "getYays(uint256)", "a69c5bbf": "bucketClosureTime(bytes32)", "a69c6597": "getPlayerName()", "a69cbb50": "_getEarlyBonus()", +"a69d9c4f": "getUserNumLocksForToken(address,address)", "a69dde14": "checkPassiveAndNull(address)", "a69df4b5": "unlock()", "a69e894e": "createTokens(address,uint256)", +"a69e8f8b": "Pay(address,string,string)", +"a69ea776": "toggleFees(bool)", "a69eae7c": "changeAllowanceToMint(address)", +"a69ed161": "wpcBorrowerIndex(address,address)", +"a69f348e": "getlistExaminee()", +"a69f60c0": "MAX_EXTENSION_ALLOWED()", "a69f7d1f": "FOUNDATION_PERCENT()", "a69f886a": "withdrawRaised(uint256)", +"a69fc39b": "WithdrawToken(address,address,uint256,uint256)", +"a69ffffc": "getMaximumAddressContribution()", +"a6a04670": "basiswbtcLPPool()", +"a6a0748d": "updateMinRebaseTime(uint256,uint256)", +"a6a11bb1": "claimStartTime()", +"a6a11c71": "disableReserveSale(address,bool)", "a6a1858f": "whale()", "a6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", +"a6a335a5": "_rewardClaimFee()", "a6a34dd3": "_setMinCardPrice(uint128)", +"a6a3a256": "getStakerPoolsLength(address)", "a6a3a439": "getNumTransactions(address,uint256)", "a6a3ba2b": "pausestatus()", +"a6a4737d": "Paid(address,address)", +"a6a5464d": "endDateOfPayments()", "a6a5bfe3": "getStage2Start()", "a6a62d58": "lastBlock_f2()", "a6a633af": "ROA()", +"a6a66072": "removeContact(address)", "a6a68606": "findOnePercent(uint256)", "a6a6a0d8": "becomeFrom()", +"a6a6c7ae": "data_profiles(uint256)", "a6a6f1c7": "registerLicense(string,string)", +"a6a738f1": "setUniswapV2Pair()", +"a6a7f0eb": "submitEvidence(uint256,string)", +"a6a811c3": "undistributedSp(uint256)", "a6a86130": "usdToWei(uint256)", +"a6a8d555": "updateUSDTAddressForPledge(address)", +"a6a8dd42": "StartAutoScoring(address)", +"a6a8e935": "__ERC677_init(address,uint256,string,string)", +"a6a8f17b": "revokePermission(bytes32,address)", +"a6a9061a": "newOfferToken(string,string,string,uint256,uint256,uint256,uint8,address)", +"a6a92c1a": "balanceOfCRVRenBTC()", +"a6a941a8": "contestDetails(uint256,address)", "a6a9a099": "privateIcoMin()", +"a6a9f5c3": "_setPenlatyFee(uint256)", +"a6a9fcfa": "getReferralAmounts(address)", +"a6aa57ce": "lend(uint256)", "a6aa7f7a": "onlyFounders()", "a6ab1216": "getWeaponsArmy1(uint256)", "a6ab36f2": "initialize(uint256,uint256,address)", +"a6ab474e": "approve_666(address,uint256)", "a6aba1b5": "BitCoix()", "a6abbad6": "assertEq16(bytes16,bytes16,bytes32)", +"a6ac4b35": "stakingActive()", "a6ac9225": "getJackpotResults(uint256)", +"a6acaacc": "MIN_POOL_FEE()", "a6ad57e6": "difficultyScaleMultiplierLimit()", +"a6add011": "wipeAndFreeGem(address,address,address,uint256,uint256,uint256)", "a6ae0aac": "coinbase()", +"a6afa8c1": "PresaleGoalReached(uint256)", "a6afd5fd": "getBets()", "a6afed95": "accrueInterest()", "a6b01e50": "isMultiOwner(address)", +"a6b02bc3": "calculatePurchaseAmount(uint256)", "a6b05af6": "INITIAL_BONUSLIST_TOKENS()", "a6b08498": "isOps()", "a6b10dd1": "showToken_For_Circulation()", "a6b11fb3": "factorial_ICO()", "a6b165ee": "total_investors()", +"a6b17405": "startCrowdFunding(uint256,uint256)", +"a6b18326": "removePerp(address,address)", +"a6b192fd": "calkMyAmount(uint256,uint256)", "a6b197aa": "Order(address,uint256)", "a6b1caa3": "gasScalar(uint256)", "a6b206bf": "doSomething(uint256)", +"a6b22309": "DEFLCTCRBLPperETHUnit()", +"a6b240fe": "getTotalRewardCollectedByUser(address)", "a6b26697": "EthRefundReceived(address,uint256)", +"a6b276c3": "washout()", "a6b2c437": "confirmRequest(uint256)", "a6b2df9b": "requestDocument(uint256,string)", +"a6b317a8": "eth_rate()", +"a6b36e47": "setCxcUnitsPerEth(uint256)", "a6b3abba": "getMyTokenBalance()", +"a6b3caec": "getUnlockQuantity(address)", "a6b402ec": "MGU()", "a6b4492f": "servusToken()", +"a6b44e6d": "viewDirectCountRemainingTime(address)", +"a6b49277": "forDokiBuybackRate()", "a6b4b0f4": "testCreateGames(uint256)", "a6b513ee": "finalPrice()", +"a6b5300a": "approve_599(address,uint256)", "a6b55eec": "unlock(bytes16,uint32)", "a6b57b5d": "sharesOwned(address,uint256)", +"a6b5ca4f": "drmTransferFrom(address,address,uint256,string)", +"a6b63eb8": "initialize(address,address,address,uint256,uint256)", +"a6b71801": "allTermSheets()", +"a6b75ddc": "removeBudget(uint64,string)", "a6b7fa36": "withdraw(uint32,uint192,bytes)", +"a6b7fc5b": "retrive()", +"a6b830b7": "PricesUpdated(uint256,uint256,uint256)", "a6b87b52": "erc()", +"a6b8c16a": "flushToDFO(uint256,uint256)", "a6b909e1": "trades()", +"a6b9feb1": "serviceProviderPercentages(uint256)", "a6ba250c": "fechVoteInfoForVoterBySnapshotBlock(address,uint256)", "a6bb012b": "penalizeInactiveArbitrators(address[],uint256[])", "a6bb1667": "updateMatch(uint8,uint8,uint8)", +"a6bb4539": "price0Average()", +"a6bb5035": "calcReturnSharesFromETH(uint256)", +"a6bba883": "rewardAPYPerBlock()", +"a6bbbcea": "pendingFRT(uint256,address)", "a6bc18f9": "setTrader(address)", +"a6bc358b": "l2l8users()", +"a6bc5e83": "ROUND_1_START_TIME()", +"a6bcc615": "lgeEndTimestamp()", +"a6bcde47": "BlockTimestampTooLowError(uint256,uint256)", +"a6bce0b6": "SetBalance(address,uint256)", "a6bd5427": "getOptionCount()", "a6bd853b": "mtdPreAmount()", "a6bdcc17": "isAtLeast(uint256,uint256)", +"a6be25af": "setOperateFee(uint256)", +"a6beb23d": "buyTicketFromAttendee(uint256)", +"a6bf32d1": "cap(address)", "a6bf3df0": "oraclize_query(string,string[2],uint256)", "a6bf45a9": "getNumberOfDeedsByAddress(string)", +"a6bffdd6": "idToClaimed(uint256)", +"a6c01960": "seniorMemberlist()", "a6c01cfd": "isInGeneration(uint256)", "a6c09381": "_setPackedTimestamp(bytes32,uint256)", "a6c0d5a8": "YukiChainToken()", +"a6c0ef90": "_nextPaymentTime(uint256)", "a6c1d611": "getAngelLockStatus(uint64)", "a6c1f87f": "partial_refund(address)", "a6c216c2": "UpgradeEvent(address,address)", @@ -95380,61 +174541,101 @@ "a6c23bc4": "setTokensPerUsdRate(uint256)", "a6c24b38": "getRequiredPrice()", "a6c2591e": "get_header(uint256,uint256)", +"a6c26603": "PROPOSAL_THRESHOLD()", "a6c2f3b2": "getAllAgreements(uint256)", "a6c30b29": "startGasCalculation()", +"a6c3b8e8": "addRewardPool(address)", "a6c3e6b9": "author()", +"a6c409f1": "totalNet()", +"a6c41fec": "OHM()", +"a6c428b3": "_vestingAllowances(address)", +"a6c42f76": "movingAveragePriceFeed()", +"a6c481a1": "withdrawTokenWithAmount(address,uint256)", "a6c4cce9": "registeredApps(address)", "a6c4d58c": "MetronomeToken()", "a6c4ec0e": "hasUser(address)", "a6c5612e": "areTokensFree()", "a6c58b63": "getJobStatus(uint256)", +"a6c5c19d": "dethday()", +"a6c5e693": "getInternalState()", +"a6c5ed08": "printWithStablecoin(address,uint256)", "a6c62c90": "snake(uint256)", "a6c662ea": "Cmc()", "a6c66575": "processInviterBenefit(address,uint256)", +"a6c677f6": "licenseFeeBps()", "a6c6aee1": "ODEEPToken()", +"a6c6e6a0": "winnersOnlyLength()", +"a6c6ecc9": "removeSubmissionManually(address)", "a6c7bf8a": "setMasterWallet(address)", +"a6c7c984": "getTargetThreshold()", "a6c7f715": "MoimToken(uint256,string,string)", +"a6c807a9": "students(address)", +"a6c81204": "TokensReleased(uint256,address,uint256)", "a6c8210e": "getVotingParams()", +"a6c83fed": "newGrantProposal(address,uint256)", +"a6c9161f": "requireIsPaused()", +"a6c927d5": "setProjectLink(string)", "a6c93349": "createContract(uint256,uint256,int256,int256,int256,int256)", "a6c94d2e": "durationVoting()", "a6c95de1": "transferBountyTokens(address,uint256)", "a6c98142": "SquirrelFarmer()", +"a6c9c443": "RIGOTOKENADDRESS()", "a6ca0a98": "PARAMOUNT()", "a6ca322b": "refundCompleted()", "a6ca54bd": "lawEnforcementRole()", +"a6ca63ac": "getInExactOut(uint256,uint256,uint256)", +"a6cb0102": "winnersOnlyTickets(uint256)", "a6cb4654": "catchYou(address,uint256,uint256)", +"a6cb8f7d": "glbDebtVal()", "a6cb9e64": "scheduleCall(address,bytes,bytes)", "a6cbcdd5": "numSignatures(bytes4)", +"a6cbd6e3": "pull(address,address,bool,uint128,uint128)", "a6cc0428": "withdrawCryptoCurrencyNetworkTokens(address)", +"a6cc33c6": "staticCallSignatures(uint256,uint256)", +"a6cc445c": "FloorWon(address,uint256)", +"a6cc49db": "approve_889(address,uint256)", +"a6cce3b9": "tokenSaleWINTER(address)", +"a6cd413a": "getUserInContract()", "a6cd5ba3": "MaxMasternodesAllowedChanged(uint8)", "a6cd8c68": "Match_Maker()", +"a6cd9799": "f2(bool)", "a6ce25b2": "In(uint256)", "a6ce69a2": "changeSupply()", "a6ce8c29": "HandsOnToken(uint256,string,uint8,string)", +"a6cea2fb": "earningrate()", "a6cea881": "KayiToken()", "a6ceaeb8": "getSoldTokens()", "a6ceb1f3": "sendAirdrop(address[],uint256[])", +"a6cf9d6a": "primaryMint(address,address,address,string,uint256)", "a6cfaf2e": "MMC(uint256,string,string)", "a6cfb7a3": "getBack(uint256)", "a6cfbb7f": "revenueBalance()", "a6d00693": "getMeshPointByCreator(int256)", +"a6d056f1": "confirmCount(address,address)", "a6d150e0": "updateWhitelists(address[],bool[])", "a6d15124": "coinsLeftInTier()", +"a6d1545c": "setDestructHoldingToken(address)", "a6d15963": "createChannel(address,uint192)", "a6d23e10": "payments()", +"a6d2501b": "overLike(string)", "a6d2bff6": "getTeamTokens()", "a6d34fa8": "JackpotPayoff(uint256,uint256,address)", +"a6d3d4b5": "manualLockDraw(bool)", "a6d40d39": "unlockFounder(uint256)", "a6d49dca": "emitTransferEvent(address,address,uint256)", "a6d4b5c2": "getGroupResult(uint256)", "a6d4e9da": "tokensByTx(uint8,string)", "a6d544e9": "sumHardCapPreICO1()", +"a6d68db2": "getRebalanceComponents()", "a6d6d046": "LetsfairToken()", "a6d6ec85": "Add_Product(uint256,uint256,string,string)", "a6d72407": "interface()", +"a6d76a8f": "setHow(uint256)", "a6d7d72e": "addTwinAddress(address)", "a6d87f7d": "myReferralDividends()", "a6d8adf9": "compensateAll(address)", +"a6d8f0bc": "updatebal(address,uint256,uint256,bool)", +"a6d8fabe": "multiBuy(uint256,address,uint256)", "a6d930bb": "FundCrowdsale()", "a6d93a9a": "_sell(uint8,bytes6,uint32,uint32)", "a6d958c6": "getLastInput()", @@ -95443,65 +174644,109 @@ "a6da3761": "StoneumToken()", "a6da467c": "buyCozyAffiliated(uint256,uint256,bool,address,address)", "a6da54a3": "validCoordinate(uint256,uint256)", +"a6dab93f": "transferPairOwnership(address,address)", "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()", +"a6dc7318": "lastActionBlock()", "a6dc84f0": "balanceOfFrozen(address)", "a6dcb12d": "candyTotalSupply()", "a6dcc834": "getUserInventory(address,address)", "a6dd06e1": "getPOOL_edit_34()", +"a6dd2f47": "getRebEthRate()", +"a6dd4c66": "senderInfo(address)", "a6ddcc96": "FillBuyOrder(address,address,uint256,uint256,uint256,uint256,uint256)", "a6ddce13": "setDisable(address,bool)", "a6de42c8": "AuthorizedAddresses()", "a6dea55e": "sendEthToAddress(address,address,uint256)", +"a6deb361": "getTheTought()", "a6ded200": "redeem_funds(address,uint256,uint256,bytes32)", "a6defd45": "ZeroHooStandardToken(uint256,string,uint8,string)", "a6df0344": "REF_CREDITS_PER_AXIE()", "a6df33a2": "creationInvestmentSupply()", +"a6df6ad4": "monthlyNumberEndPrev()", "a6df6c30": "minCWCsPerReturnMoreThan()", "a6e0264a": "_checkMyVesting(address)", +"a6e084f6": "manu(address,string)", +"a6e14ffb": "NewTeslaModel(address)", "a6e158f8": "redeemTokens(uint256)", "a6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", +"a6e1a54c": "lockers(address,uint256)", "a6e1bc7c": "IndoCrypt()", +"a6e23191": "RichestBonus(uint256,address)", "a6e26e96": "batlordAddress()", "a6e2eab1": "recycleAfterEnd()", "a6e315ff": "addExemptionAddress(address)", "a6e3289d": "addNextMemberPayment(address,uint256,uint256)", +"a6e3295b": "getRaffleParticipants(uint256)", +"a6e34b98": "_removeBarkeeper(address)", "a6e3a8a7": "findMinAuditPricesStats()", +"a6e3cdd8": "deletePlayers(address[])", +"a6e3ce2b": "adminwithdrawal(address,uint256)", "a6e3f533": "redeemKmPardsBal()", "a6e3fcf6": "setBaseTokensSold(uint256)", "a6e4002e": "DividendManager(address)", +"a6e43e9f": "swapTokensForTokens(uint256,uint256,address[],address[])", "a6e497b6": "getUserContractAddress(address)", "a6e4ae01": "gcp(uint256)", +"a6e4d0f9": "setBooleanPayable()", "a6e5291f": "UniversalGiftToken()", "a6e5303a": "SLKToken()", "a6e53b99": "PHASE1_ACCOUNT_TOKENS_MAX()", +"a6e5e2ed": "withdrawIFil(uint256,string)", "a6e5f2f5": "Show_Address_for_option_C()", +"a6e66477": "revealEnd()", +"a6e6b446": "routinePaidFees(bytes32)", +"a6e6f92d": "newPT(string,string,string,uint8,uint256)", +"a6e734e1": "perBonusDivide()", "a6e7469c": "getSendersHash(address)", "a6e77af1": "setEntryPrice(uint256)", "a6e7f409": "STATE_OWNED()", +"a6e81533": "addMarketOrder(address,address,uint112)", "a6e81e7c": "refundWei(address,uint256)", "a6e826e8": "startsecurities()", +"a6e87844": "getThing(uint256,uint256)", "a6e8a859": "target2()", +"a6e8be4e": "updateDailydistribution(address,uint256)", +"a6e8ef89": "PAUSE_EXECUTION_ROLE()", +"a6e9143c": "BetFinalized(address,uint256,uint256,uint256,bytes)", "a6e915b6": "confirmOpening(uint256,uint256)", +"a6e937b1": "collateralCTokenEnabled(address,address)", +"a6e9b159": "maxBProxBtcValue(bytes32)", +"a6e9db4f": "Cleaned(uint256)", "a6e9e95f": "setCoinAllowance(address,address,uint256)", +"a6ea48ec": "claim4(address)", "a6ea7ad2": "dexTestTransfer(address,address,uint256)", "a6eaab99": "DGCASH()", +"a6eb0690": "cancelGuardianAddition(address,address)", +"a6eb5205": "setBeyondExchangeAddressInProx(address)", "a6ebbe5a": "NewDeposit(uint256,uint256,address)", +"a6ebf285": "buoyAddress()", "a6ec01f7": "clearPendingWithdrawal(address)", "a6ec0708": "setCompte_28(string)", "a6ec3022": "getCurrentYearRemainToken(uint16)", +"a6ece283": "getTimeLockInfo()", "a6ecfff8": "is_btc()", "a6ed563e": "getBytes32(bytes32)", "a6ee5eed": "changeFinishPreSale(uint256)", "a6ee6fd9": "max_schrems_addr()", "a6eea7f3": "liquidationPeriod()", +"a6eec67e": "cardData(uint256,uint256)", +"a6ef7c92": "getGroupD()", +"a6efc101": "Triger_Claim_For_Tail(address,address,address)", +"a6efc365": "blockEnd()", +"a6efe44b": "uniswapMaxSlippage(uint256,uint256,uint256)", "a6effaed": "DetailedERC20(string,string,uint8)", "a6f07a5c": "bigbomMultiSigWallet()", +"a6f0c753": "MetadataPowerPlantType(uint256)", "a6f0cba6": "DarioAdministrator()", "a6f0e577": "isLeapYear(uint16)", +"a6f104ed": "sEEBloKKs()", +"a6f11d36": "testTranscation(address)", +"a6f14366": "emergencyFallback()", +"a6f19c84": "gauge()", "a6f1c939": "getPick(uint256)", "a6f1fd51": "addDeposit(uint256)", "a6f20445": "LogCancelReservation(address,uint256)", @@ -95509,85 +174754,156 @@ "a6f2ae3a": "buy()", "a6f2e80d": "lockFunds(address)", "a6f2fd5c": "disable(bool)", +"a6f353f0": "changeTreasuryAddress(address)", +"a6f3d195": "migrateAllowlistedInvestors(address[])", +"a6f4014e": "getMachineInfo(uint256)", "a6f48c90": "freeCount()", "a6f4ab2e": "setStalePeriod(uint256)", +"a6f50b0f": "log(address,bool,address,bool)", "a6f55282": "addNacToNLF(uint256)", "a6f57199": "CrowdsaleExtended(uint256)", "a6f5a22b": "openShop()", "a6f6a8a6": "_setPrices(uint256)", +"a6f6ab72": "countTotalSales()", "a6f6d8bb": "getObligation(bytes32,uint64)", "a6f70594": "SpoutCrowdsale(address,uint256,uint256,address)", "a6f7257a": "getSigns(uint256)", "a6f7541c": "maroonToken()", +"a6f75a93": "getDepositWithdrawalUnlockedAt(address,address)", +"a6f7f5d6": "managementFee()", "a6f81668": "gameInfo(uint256)", "a6f87bc6": "WumingToken(address,address)", +"a6f8c968": "setSt(uint256,address,string)", +"a6f8de10": "pause_S()", +"a6f8fd13": "tokenThreshold(uint256)", "a6f935f6": "exporterAcceptedIBankDraft()", +"a6f94d28": "voteCalc()", +"a6f97444": "_getLiquidationEntryForAccount(address)", "a6f9885c": "MAX_LENGTH()", "a6f99922": "EcologicalShield()", "a6f9dae1": "changeOwner(address)", +"a6fa6e90": "unregisterTokenAdmin(address)", "a6fb08ae": "contractWithdraw(uint256)", "a6fb475f": "transferFrom(address,address,uint16[])", +"a6fbd9a4": "getMaxUint64()", "a6fbf3d2": "getInt(bytes32,bytes32)", "a6fc2823": "continueIco()", "a6fc5c03": "getCode(uint256)", +"a6fcb053": "kycEnabled()", +"a6fcb9b2": "unsalvagableTokens(address,address)", "a6fd0085": "sub(uint128,uint128)", "a6fd2487": "recordName()", +"a6fd44ed": "B12(bytes)", +"a6fd5884": "getBalanceOfTokenErc20(bytes32)", +"a6fd95fa": "newBornCoolDown()", "a6fd96b0": "MultiService(address,address[])", "a6fda231": "ICO_RATE3()", "a6fdedef": "aimeIncreasePerTrip()", "a6fe178c": "getRegisteredExchanges()", +"a6fe34c6": "assetToEth(address,uint256,uint256)", +"a6fe550f": "getLiquidityReleasable()", +"a6fe7322": "losingBoost()", "a6fe7a28": "removeService(address,uint32)", "a6fea6f4": "registerVendor(address)", "a6ff20a3": "addVehicle(uint256,uint256,bytes32,bytes32,uint256,uint256)", "a6ff85e2": "ReceiveDonate(address,uint256)", "a6ffefae": "balancesListNumberMap(address)", +"a6fffe70": "WOLFPerBlock()", +"a70014b3": "shardsFarm()", +"a700d200": "addSupportCurrency(address)", "a701229f": "ChangedOwner(address)", "a7016023": "setOwnership(address)", +"a70200bd": "changePoolPart(uint128)", "a7021bc5": "executorAlive()", +"a702730e": "getClusterDelegation(address,bytes32)", "a70284be": "soldBeercoins()", "a702be14": "feedSecondaryPot(uint256)", +"a702efcc": "usdcAmount()", "a703078c": "sortAuction(uint256[])", "a7030a53": "extractAndStoreBitcoinAddresses(bytes32,uint256,bytes,bytes)", +"a7032d21": "nodeSignUp(bytes32)", +"a7035bf6": "reservesPerTokenDestBest(address,uint256)", +"a7039b2d": "distributeIndividualReward(address,address,uint256)", "a703c751": "batchWhiteListInvestors(address[])", "a705245e": "setReserveVault(address)", +"a7059a3f": "updateGovenance(address)", +"a705a834": "exchangeEtherForPERIAtRate(uint256,uint256)", "a70616de": "platformWithdrawalRecipient()", +"a70631a0": "distributeRewards(address,address,uint256)", "a7068d66": "addDelegate(address,bytes32,address,uint256)", "a706a2e2": "requestUnlock(bytes32,address,bytes4,address)", "a706d26e": "DragonTreasureToken(address,address,address)", "a7070373": "setAllowance(address,address,address,uint256)", +"a7071d01": "memeIndexToApproved(uint256)", "a707300f": "addAcceptedContribution(address,uint256,uint256)", "a7074a82": "getCrowdsaleStatus(address,bytes32)", +"a7079b7a": "addressV4(uint256)", "a707ce55": "changePass(bytes32)", "a707fc81": "payback(uint64,address[])", "a708142b": "addressSCComplianceService()", "a7084516": "VictoryX(uint256,string,uint8,string)", "a7086536": "withdrawOfferForCollectible(uint256,uint256)", +"a708d2e4": "referlimit()", "a7096ac8": "addLogicVersion(uint256,address)", +"a709c4fe": "payRent()", +"a70a15ad": "polyCCMC()", +"a70a5110": "totalNumberOfStakers()", +"a70a5397": "RefundAll(uint256)", +"a70a7009": "INITIAL_SUPPLY_15PERCENT()", +"a70a7af0": "RegisterWorker(address)", +"a70a8d23": "solutionForChallenge(bytes32)", "a70a92f7": "setLiquid0(bool)", "a70a9ad7": "switchDeity(address)", +"a70aba28": "rsvToken()", "a70b015d": "stageICO()", "a70b21a3": "ReceiverPays()", +"a70b4607": "setPancakeAddress(address)", +"a70b9f0c": "EPOCH_DURATION()", +"a70bd51c": "totalPassiveIncomeOfTheTree()", "a70beb13": "processSellOrder(uint256,uint256)", +"a70c1dde": "changeSaleStatus(bool)", +"a70c1f18": "createFuturesAsset(string,address,string,string)", "a70c41b4": "getTransferFromPreSignedHash(address,address,address,uint256,uint256,uint256)", +"a70cad50": "clusters(address)", "a70ce015": "safeGetPercent(uint256,uint256)", +"a70d2ab2": "claimBonusAmount(uint256)", "a70d7006": "StinkyLinky()", +"a70d86d1": "juniorPartners()", "a70e82d4": "changeFreeUntilDate(uint256)", "a70f101c": "useEmergencyCode(uint256)", +"a70f2115": "Associate(bytes32,bytes32,address)", "a70f84c3": "registerName(address,bytes32,uint256)", "a70fc3ba": "setCap(uint256,string)", "a70fc680": "fundraising()", +"a7103687": "debtPoppers(uint256)", +"a71052a5": "callDatabase(address,uint256)", +"a711172f": "EventEntityProcessor(bytes32,uint8,uint8)", "a71168e3": "setTrainingScienceContract(address)", +"a711b664": "maxAdvisorSupply()", +"a711e6a1": "isPoolActive(address)", +"a711f872": "LogAuditAssignmentUpdate_Expired(uint256,uint256)", "a7120433": "setItemContract(address)", +"a7130db8": "getAvailabiltyState()", +"a71326a1": "swapTokenToEther(address,address,uint256,uint256)", "a7134993": "lifeD(uint256)", "a7134f73": "acquire()", "a713a3f7": "loggedTotalSupply(uint256)", +"a7151871": "yearly()", +"a7153975": "getRewardDataByAddress(address,uint8,uint32)", "a7154d22": "cancel(address,uint32)", "a7157c72": "withdrawToTeamStep2(uint256)", +"a7159cce": "pers(uint256)", "a715bf33": "ICO_PRICE()", "a715df58": "setUnownedName(uint256,string)", "a715ff59": "EtherandomProxy()", "a716144a": "getStack(bytes32)", +"a7163c61": "totalPod()", +"a7164a1e": "withdrawGrowthFund(uint256)", +"a716da86": "Bite(bytes32,address,uint256,uint256,uint256,address,uint256)", +"a716dc5d": "_decode_sol_bytes32(uint256,bytes)", +"a717639c": "lastDistribution()", "a7177ebf": "getSpellAbilityCost(uint8)", +"a7179a43": "storedTWAP(address)", "a718309f": "CryptoCurrencyExchange()", "a7188b4e": "setEditModeBool(bool)", "a718d11b": "addWhiteList(address,bool)", @@ -95596,324 +174912,627 @@ "a718f4b3": "searchJobs(address,uint256,uint256[],uint256[],uint8[][4],uint8,uint256[],uint256[],uint256)", "a7194e2a": "returnTokensListOfAddresses()", "a71962c2": "GAME_STARTED()", +"a71975af": "approvedCallers(address)", "a719804d": "Spank(string,string,uint8,uint256,uint256)", +"a719ad83": "tokensToTokens(uint256,uint256,address[],uint256)", +"a71a13e1": "interfaceContract()", "a71a3dde": "DEFAULT_LOCK_COST_PER_HOUR()", "a71acabc": "newSection(bytes32,bytes32,bytes32,uint256)", "a71aec73": "isTradable(uint16)", +"a71af3cf": "getConfigCommonValue(bytes32,string)", "a71b4c26": "auctionSumGwei()", +"a71b787c": "sellAllAmountPayEth(uint256,address,address,uint256)", +"a71bbfd5": "isHarvester(address)", "a71bd1cd": "getCurrentDay(uint256,uint256)", "a71be2c0": "Clip()", +"a71d3c11": "getAddressUniV2StakeAmount(address)", +"a71d6f43": "goblins(address)", "a71d6f9f": "setTRCExchangeRate(uint256)", +"a71d7f5d": "yourCLOCKBalance(address)", "a71d8181": "createCeleb(string,uint256)", +"a71dc642": "nextClaimDate()", +"a71ddd25": "initReserve()", "a71e12e5": "JoinGameAsPlayer(uint8,uint256,uint8)", "a71e46d3": "maxRecordID()", +"a71ed46e": "sendTransferERC20(address,uint256)", "a71ee0c6": "changetradestatus(bool)", "a71ef84d": "getVotingWinner(address)", +"a71f4eb9": "gasTest()", "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()", +"a7213cde": "exchangeEth(uint256,uint256)", "a721c06c": "LENTToken()", +"a721cd30": "acceptRequest(bytes32)", "a721d9d9": "EmiratesCoin()", "a721ebe8": "numberSyndicateMembers()", +"a7225e24": "equalUintPassTest()", +"a722819b": "gzeEthPriceFeed()", "a72299dd": "MetadollarShare()", +"a7229fd9": "recoverToken(address,address,uint256)", "a7232aae": "setGPSMinEth(uint256)", +"a7235e6c": "isWhitelistCfo(address)", "a723761a": "investEtherForDID()", "a723cda8": "AQUAOIN()", +"a7240842": "addOrder(bool,uint32,uint128,uint128,uint32)", "a7240d45": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", +"a7244bfc": "replay(address,bytes)", "a72460d1": "getProviderEndpoints(address)", +"a72480ae": "orderAux(bytes32)", +"a72497d9": "setPobEthPairAddress(address)", "a724e54c": "newCollectible(uint256,string,uint256,uint256,uint256,string,uint256,string)", "a724f68a": "CratesOpened(address,uint8)", +"a7252953": "setErc20Validity(address,bool)", "a7256621": "addInt(uint256,int256)", +"a7258e33": "startProfitedGamesAllowed()", "a725c4a4": "StrategicPartners(address,uint256)", +"a725d9c6": "redistributionPaused()", "a725fa1f": "CpublicgoldToken(address)", +"a725fe3d": "setTokenChainlinkMaps(address[],address[])", "a7261f79": "isPayableEnabledForAll()", "a72670b8": "getReportingWindowByTimestamp(uint256)", "a726be9a": "get_token_data(uint256)", "a727390d": "GetDomainInfo(string)", "a727632f": "Date_Finished()", +"a7277b00": "governors(uint256)", "a7281bbf": "CollectTaxes(uint256)", +"a72841ee": "dataSourceCallbackBonus(uint32)", +"a7287971": "balanceCompoundInToken()", "a728fa93": "getMyCraigGrant()", +"a72927d6": "recordPledgeDeposit(address,uint256)", "a7292c74": "amountEthRaised()", +"a7297b1b": "registerTime(address)", +"a729ef7e": "safeSaladTransfer(address,uint256)", +"a729f9fa": "piranhas(uint256)", "a72a05f7": "getReceiversCount()", +"a72a832f": "juniorStake()", "a72aa163": "setPropertyMode(uint16,bool,uint32)", +"a72aa43e": "WETHaddress()", +"a72ad9d4": "addAlreadyBuy(address,uint256,uint256)", "a72b1444": "minimumSupport()", +"a72b6325": "getProposal(uint256,address)", +"a72b6c30": "get_base_asset_address()", +"a72c2254": "setMerkleWalletRewardsRoots(bytes32[])", +"a72c3520": "getStakedContractStakerByIndex(address,uint256)", +"a72c36cf": "offToken()", "a72cb9aa": "editAddress(int256,address,string,address)", "a72cc1e8": "updateTask(address,string)", +"a72d0d22": "getSmartWalletImplementation()", +"a72d3ab0": "transferSAFEOwnership(address,uint256,address)", +"a72d7ddd": "setTargetMessengerAddress(address)", "a72dc52e": "fixedExpUnsafe(uint256)", "a72dc950": "StageOneEnable()", +"a72ea23f": "grantCreator(address)", "a72ec7a0": "TokenLiquidityPlatform()", +"a72edda3": "canWithdrawAfter(address)", "a72f3dea": "removePVPContender(uint256)", +"a72f4424": "_getProofs()", "a72f5aaa": "preDistribute(address,uint256)", +"a72f8a70": "action(bytes,bytes32,int64)", +"a72fa994": "_validateOnlyManager()", "a72ff7de": "buySmartContract()", +"a7300353": "RealmSaleToBuyer(uint256)", "a7304287": "godUnpause()", +"a7304bf7": "setAdminByAdmin(address)", +"a7306ab9": "costTokenAddr()", +"a730a76b": "OnBadTokenChanged(address,uint256)", +"a7310b58": "accountInfo(address)", +"a7311f53": "setToken(address,uint256,uint256)", "a731c4ec": "addUserTokenLocalBalance(address,uint256)", "a731f31a": "getBoxes(address)", +"a731fb0a": "Verify(address)", "a7321096": "mainSaleBonus()", "a7322d9d": "DURATION_SALESTAGELAST()", "a7324134": "parseLoanOffering(address[11],uint256[10],uint32[4],bytes)", +"a7324d51": "getUserPendingUnstake(uint256,address)", "a732d6c4": "calculateAffiliate(uint256,uint256,uint256)", "a732f9ac": "increasePlayersGooProduction(address,uint256)", "a7334c93": "addSales(uint32,uint256,uint16,uint16,uint64,uint64,uint32,uint8)", +"a733674e": "updateLiqValue(uint256)", "a733800d": "Shipia()", "a73381d5": "EYInnovationCoin()", +"a733916a": "currentETHUsed()", "a733e21d": "twice(address,uint256)", "a733f702": "isValidSize(uint256)", +"a73427cf": "zHEGIC()", +"a7343f40": "getAssetPriceUSD(address)", +"a73448c9": "setCHI(address)", "a73467bd": "TestCitySnapshotInternal(address,uint256)", +"a734d51b": "isCompoundingStream(uint256)", +"a734f06e": "ETH_ADDRESS()", +"a7355596": "tradeEtherForTokenUsingReservesWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256,uint256,uint8)", "a73598fd": "tryFinalizeStage()", "a73638a7": "selectGod(uint16)", "a7365ea9": "Gealena()", "a7368afb": "allocateTokens(address[],uint256[])", +"a7368c44": "savings(uint256,address)", "a7374b21": "sendFundsInternal(uint256,address,bytes)", +"a737b5e4": "withdrawTreasuryKeeped(address,uint256)", "a737ec3d": "GxAdmins(address)", "a737ecc9": "getProfitToAddress(uint256,address)", +"a7383272": "approvex(address)", +"a7384818": "participationList(uint256)", "a7384c1e": "eth2erc20()", +"a739007a": "checkProduct(string)", "a739013f": "buy(address,address,uint256,bool)", +"a7395e5c": "setWithdrawalRequestAmount(address,address,uint256)", "a7397d27": "xaurForGasLimit()", +"a7398eb4": "getGasCostOfGetSqrtRatioAtTick(int24)", +"a739a4d8": "RefundTokenEvent(bytes32,address,address,uint256)", +"a739e417": "ReleaseTokens(address,uint256)", +"a739fd20": "percentOfCashback()", +"a73a9b9f": "generateProposal(address)", +"a73abf13": "SaiVox(uint256)", +"a73b24b4": "createMailbox(address,address,address)", +"a73b536e": "soakToLp0Route(uint256)", "a73b60f4": "buttonClicks()", +"a73b74fe": "depositAndBorrow(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a73b9bcb": "FTFExchangeToken()", +"a73ba1a5": "withdrawAll0()", "a73c0ba2": "play(uint256,uint16,uint8)", "a73c52e7": "getLastPerUser(address)", "a73c7140": "amountTotal()", "a73d633c": "addWhitelist(address,address)", "a73d907e": "inboxIsEmpty(address)", +"a73dc40d": "mrToken()", "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)", +"a73fe97d": "parentDomainNameHash()", +"a73ff128": "IsReadyWithdrawLeftOvers(uint256)", "a7403160": "vestingsReleasedRemain(address)", "a74035b5": "setEvabotContractAddress(address)", +"a7403eb6": "getAuctionLobbyParticipateEpoches(address)", "a740a194": "getGasToReport()", "a740a6fa": "clearRAM()", "a740cf90": "TGIF(address)", "a740de43": "nameLocked()", +"a7411c92": "lastTXBlock(address)", +"a741214a": "__timeout()", +"a74167db": "approve_92(address,uint256)", "a7419b51": "setAirLiftPrice(uint256)", "a742a942": "create(address,bytes32,address,address[],address,bytes32)", +"a742ca02": "exchange(bytes32,uint256,address,bytes32)", +"a742d482": "addProducts(string,uint256)", "a7432434": "refferalPreICOBonus(address)", +"a743676b": "GenericCall(address,bytes,address)", "a743a61f": "checkStudentsApply()", "a743fa50": "beneficiaryFunded(address)", +"a7444c0d": "fixAssetsAboveLimits(bytes32,bool,uint256)", +"a74498aa": "getLiquidityPool(uint256)", "a744a633": "getWeeklyTransactionVolumeReceiving()", +"a744f2e0": "lockPoolId()", +"a7450719": "claimAndLockForMember(address,address)", +"a74546f9": "isWarEligibleToLongNight(uint256,uint256)", "a745863b": "startRebuyTime()", "a745953e": "buyStarInitial(uint256,string)", +"a745d5bd": "getChangeRequestedBlock()", "a745ec70": "bountyDistributorAddress()", "a7467039": "sharesToManager(uint256)", +"a746b858": "lynToken()", +"a746f93a": "setMinterState(address,bool)", "a747007f": "AffiliateProgram(address)", +"a7475a14": "buyer_out()", +"a7476fd5": "main1v1(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"a74772c8": "authorisedCaller(address)", +"a747ac6a": "showTokens(uint256)", "a7483f74": "CATFreezer(address,address)", "a74905db": "reportProfit(int256,address)", "a74915cf": "getadd()", "a7491b48": "votesByAddress(address)", "a7497fa5": "tge()", +"a7498335": "AC1(uint256,string,string,address)", "a749870d": "etherValueAllowStale(uint256)", "a749e97b": "_setPaymentSchedual(uint256,uint256,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", "a74a1831": "post(bytes32)", +"a74a7522": "withdrawBenefactorFundsToValidated(address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "a74baaa4": "amountOfHolders()", +"a74c2b4e": "getBestProfiles()", +"a74c2bb6": "getAddr()", +"a74cc71c": "purchaseRecords(uint16)", +"a74df555": "updateWithdrawLimit(uint256,bool)", "a74e01cf": "unFreezeAllTransactions()", "a74e493f": "pregenTokens(address,uint256,uint256)", "a74ecb12": "setMasterAddress1(address)", "a74f277a": "MaintenanceUpdate(bool)", +"a74fba35": "daily_reimbursement_limit()", +"a750066e": "MAX_BID_DURATION()", "a7502a3f": "totalTeamWithdrawSupply()", "a7507df2": "loveUrl()", +"a75186c7": "setState(uint256[],string)", +"a751bdcb": "getancient()", +"a7522b81": "percentVote()", "a75252ea": "sellToAddress(uint256,address)", "a75261f2": "certbot()", "a75274e9": "setMarkup(uint256,uint256)", "a752c2c5": "UniversalSchemeMock()", +"a752cd16": "addDevAccount(address)", +"a752eb94": "StageSubmittedAndEtherPassedToTheTeam(uint256,uint256,uint256)", +"a752fbc1": "latestCaller()", +"a75341a7": "CertifierChanged(address)", "a75343bf": "claimOwnership2()", +"a753b1a8": "TRUSTED_MARGIN_CALLERS(address)", "a753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", "a753fd08": "setWinNetworkFee(uint256)", "a7542448": "addRef(bytes32,bytes32)", +"a7542d55": "canRepresentativesVote(uint256)", "a75439d1": "minValuePre()", +"a754d48f": "minterAdmin()", +"a754ecb0": "viewUserInfo(uint256,address)", +"a7553109": "creditsToken()", +"a755349a": "reApproveAllTokens()", +"a7555c95": "CapperAdded(address)", "a755a47e": "triggerAllRefunds()", "a7560bec": "EBITOKEN()", +"a7560dae": "qiril()", +"a7563cbc": "addTokenMeta(address,uint16,uint16,uint128)", "a7565888": "m_Paused()", +"a7566bcf": "couponClaimed()", "a75688b2": "oldMillionEther()", "a756f362": "Th_stage1(uint256)", "a75761f1": "returnUint16(uint16)", "a7577542": "addCrowdSaleTokens(address,uint256)", "a757ac4b": "privatesaleAddress()", +"a757e20b": "yCAKToken()", +"a757f04e": "depositBlockChange()", "a757fc42": "buyTwo(uint256,uint256,uint256,uint256)", +"a75826ae": "exp2(uint256)", +"a758623c": "insertCharacter(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", "a758ac6a": "MaecenasCrowdsale()", +"a7596ff8": "setRootBridge(address)", "a759822b": "performCalculations()", +"a75995e4": "approveAsset(address)", +"a75999d9": "setMultiRewardsForPeriod(uint256,address[],uint256[])", +"a759e3b9": "setInviteContract(address)", +"a759ee6f": "identityRegistryAddress()", "a75a1d6c": "claimRefundTokens(address,address)", "a75a4e4a": "updateScoreAndBalance(uint256,uint256,address,address)", "a75a9049": "setInitialOwner(address,uint256)", +"a75aaa82": "uMNOT(uint256)", +"a75ac608": "claimInsurance()", "a75aef40": "SYCEarlyPurchase()", +"a75b1262": "testCallTrxNonexistentTarget(uint256,address)", +"a75b71dc": "allowed(address,address,address)", +"a75b87d2": "getGuardian()", +"a75c127b": "createPublicKey(bytes)", +"a75c59de": "log(address,bool,address,uint256)", +"a75c626f": "resumeExecution(uint256)", "a75c6f65": "updatedCirculation(string)", "a75c8546": "determineDiscountRate()", "a75c981d": "totaltokensold()", "a75d0042": "signedTransferCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"a75d0c1a": "setTokenSpender(address)", +"a75d39c2": "current(address,uint256,address)", +"a75d5686": "stakingPoolV1IssueCompensationAmount()", +"a75dc333": "geoplacer()", "a75dd0d4": "AddPrivateKey(string,string)", +"a75df498": "interestFee()", "a75df814": "knownAddress(address)", +"a75df8ba": "REINVEST_ENABLE()", "a75e2853": "transferForICO(address,uint256)", +"a75e3230": "netValue(address)", "a75eb727": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256)", +"a75f31bb": "ORDERBOOK_BURN_FEE_BPS()", +"a75f5786": "Helloworld()", +"a75f87ce": "DueTime(address)", +"a75f8a4e": "withdrawExchangeFees(address,address)", +"a75fa895": "TMTG_TransferFrom(address,address,address,uint256)", "a75fe8e1": "removeWallet(address)", "a7603a86": "getDefaultValidityBond()", "a76044a4": "binary()", +"a7604780": "changeBill(uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,string,string[])", +"a76050f5": "pool3Register()", +"a7607dab": "MXX_ADDRESS()", "a760d1d0": "setRateAgain()", "a760e442": "setLosers(uint256)", +"a761582a": "Cancelled(uint256,uint256)", "a76188b9": "setRewardPercentages(uint256,uint256,uint256,uint256,uint256)", +"a761a939": "bridgeFor(address)", +"a7626739": "yourStakedBBPLp(address)", +"a7626e2f": "RefundIsAvailable()", +"a7628f4d": "setFreezeIn(address,bool)", +"a762e6ed": "redeemTickets(uint256,uint256)", +"a7631fab": "GST2()", "a7633064": "getRandomType(uint16)", "a7638346": "setFinaliseTime()", "a7638c4d": "disableStakingPeriod()", "a764eb45": "setCurrentIssuanceData(address,uint256)", "a7651147": "loyaltySupply()", "a76594bf": "getPlayersCount()", +"a765fbea": "dispute(uint256,address)", +"a7665683": "lockupEpochs()", "a7668eba": "calcTokenCost()", "a766f3d1": "storeStub(address,bytes32,bytes32)", +"a766ffcd": "changeFarmRateBuy(uint256)", "a76769a5": "fillOrderWithEth()", "a76774f5": "jackpotCompleted()", "a7677ee3": "AslanToken()", "a767d8be": "preIcoMaxCap()", +"a7687f11": "emergencyStop(uint256)", +"a7689f7b": "enableLimitHolders()", +"a769a549": "testOnlyOwnerCanReturnInvestment()", "a76a155e": "getBetsFromAddress(address)", +"a76ae252": "myswapETHForExactTokens(uint256,address,address)", +"a76b3fda": "_supportMarket(address)", +"a76b582b": "userInvestmentInfo(address,uint256)", "a76bb04e": "setRewardPoolWallet(address)", +"a76c74b2": "hydroIDActive(string)", +"a76cae3b": "addInputToken(address,uint256)", +"a76cdfa5": "setIssueFeeRate(uint256)", +"a76cf56e": "addVote(uint64)", +"a76d0a57": "set_DAI_TokenContractAddress(address)", +"a76d143e": "getBeneficiariesDetails()", "a76d368a": "candyPowerToken()", "a76d50ad": "multipleTransfer(address[],uint256,uint256)", +"a76d6a03": "approve_513(address,uint256)", +"a76dcf2b": "getair(address)", "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()", +"a76f955f": "stashes(bytes32)", +"a7702627": "dNyanAddress()", "a77078e7": "withdrawForOp(address)", +"a7714458": "flashLender()", +"a771ebc7": "feeEnabled()", "a7721e0f": "multiplyTokensSend(address[],uint256[])", "a7724b16": "bingo()", "a7728589": "setMintAgent(address,address)", "a7731150": "StoreFile(bytes32,string,string,string,string,string,uint256,bytes)", +"a77343a5": "minteris()", "a7737b93": "NumberOfPart()", "a77384c1": "setTotalShares(uint256)", "a773d98a": "getAssetIDHash()", +"a773f98d": "LayTatCaNhomVDV()", "a7741827": "deleteAllUris()", "a7743462": "setFounderTokenWallet(address)", "a774f163": "adjustDefaultSpritePrice(uint256,uint256)", +"a774fe8a": "setStartDelay(uint256)", "a775511a": "isMainsalePeriod()", "a775b1c4": "NAORIS_TEAM_TOKENS()", +"a775dcca": "ownerIssue(address,uint256)", "a7760d79": "preICOendTime()", +"a7762a52": "guidesStat(address)", "a77674a7": "buy_energy(address,uint32,uint32,uint64)", "a7771ee3": "isVoter(address)", "a7775bd7": "YDToken()", +"a7777643": "getPrice(address,uint256,uint32,uint256)", "a777aa5d": "changeMaxTokenSell(uint256)", "a777d0dc": "hello(string)", "a777deca": "thirdRelease()", "a777eca9": "MinerRewardChanged(uint256)", +"a7793ee9": "migratorInitialized()", +"a779a81b": "getTransferVolumeNowBucketTimestamp()", +"a779d080": "totalUnlocked()", +"a779eccc": "depositLastPrice()", +"a77a3949": "gl()", "a77a8230": "allowence(address,address)", "a77aa49e": "setIntValue(bytes32,int256)", "a77adc23": "WaxToken()", "a77ae839": "approveRewards(uint256)", +"a77b2109": "refractivesupply()", "a77b2e37": "Coin()", "a77b4d8b": "setBaseCurrency(address,bool)", +"a77b6e03": "getLastDeployed(address)", "a77b6efb": "mintCoins(uint256)", +"a77b8397": "approve_515(address,uint256)", +"a77bce9d": "getPowerConsumptionMineInWeiPerSec()", "a77beea1": "transfer(address,address,address,address[],uint256)", "a77c1b08": "checkTransfer(address)", +"a77c5265": "extended(uint256,uint256)", "a77c61f2": "cobinhoodUserIDs(address)", +"a77c78c9": "_updateRestrictionsAndRules(address)", +"a77cefc4": "getUrlById(uint32)", +"a77d8a9d": "getRightToVote(address)", +"a77db944": "revealGameByHost(uint256,uint256,bytes32)", "a77ee38c": "promoTypeNum()", "a77f7c8c": "whitelistMany(address[])", +"a77f92ff": "m1()", +"a78002a1": "MetaTransactionWrongSenderError(bytes32,address,address)", +"a7801a70": "onBuyAndDistribute(address,bytes32,uint256,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256)", "a78036b7": "clearDeposits(address,uint256)", "a7807b84": "transferByRelatedToken(address,address,uint256)", "a78082aa": "TokenSafe(address)", "a78085ef": "lockMainSaleToken()", +"a7808a93": "safeSendValue(address,uint256)", "a780b2f3": "parseRate(string)", +"a780c9ec": "collateralSupplyMinerMapping(address)", +"a7810475": "makeTradeOnlyTransaction(address,address,uint256)", "a7811732": "totalERC20Contracts(uint256)", "a78118a4": "onlyDevs()", "a781384e": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256,bytes32)", "a7819ad7": "_challengePart2(uint256,uint256,uint256)", +"a781a7e4": "maxSupplyExpansionRate()", +"a781e7f8": "changeMapping(address)", +"a782ba6f": "releaseLiqudity()", +"a783503b": "participatedCounter(address,uint256)", "a783a4f1": "get_hash(uint16)", +"a783c720": "totalWithrawals()", +"a7847c3a": "absorbWizard(uint256)", "a78488af": "startTokenRaffle(uint256,address,uint256,bool)", "a78488e1": "WSTO()", "a784d969": "setAssetsCertified(uint256)", "a784ef22": "_calculateScore(uint256,uint256,uint256,uint256)", +"a78507d9": "adminSetFeeHandler(bytes32,address,address)", "a7859131": "m_initialSettingsSet()", "a785b96a": "TDEStartDate()", +"a785fc34": "Change(address,string)", +"a78695b0": "col()", "a786c1d2": "BONUS_DAY1_DURATION()", "a7878831": "splitTokens()", "a78810f8": "subscribeMe(uint8,bytes32)", +"a788a716": "feeder()", "a788aa07": "test_threeValidEqUint(int256)", +"a788c1ff": "setPendingClaimVoteStatus(uint256,bool)", +"a788daa7": "minEpochTimeIntervalSec()", "a789e29c": "getContributorData(address)", +"a789fa30": "updateMaxViewLength(uint256)", +"a78a0778": "_borrow(address,address,uint256)", "a78a43c1": "getAllTeamScores()", "a78a651a": "processContribution(address)", +"a78a9be3": "Burned(address,address,uint256,bytes,bytes)", +"a78abc16": "alreadyInit()", "a78adf57": "UserAddressRegistry()", "a78adfec": "setButtonParams(uint256,uint256,uint32,uint32)", "a78b3d96": "addSubOwner(address,address)", "a78bcf6e": "changeBankroll(address)", +"a78be1be": "giveToProxy(uint256,address)", "a78c5476": "SaleStarted(uint256)", "a78c81ea": "changInviteAmountLimit(uint256)", "a78cb567": "getCosignerFee(uint256)", "a78cdfed": "gana()", +"a78ce23a": "test3(uint8)", "a78d4316": "_near(uint256)", +"a78d80fc": "totalProposals()", "a78db39c": "blockedUntil()", "a78deefa": "isGameEnd()", "a78e635c": "XToken()", "a78e887c": "calculatePurchaseReturn(uint256,uint256,uint16,uint256)", +"a78e922b": "registerModule(bytes32,address)", "a78f0489": "secondTierDiscountUpperLimitEther()", "a78f16ba": "setWhitelistedStatusInternal(address,address,uint256)", +"a79010cc": "sort(bytes32,bytes32,bytes32,uint256,uint256,uint256)", "a79094b7": "changePolyRegisterationFee(uint256)", "a7909e47": "DAppReady()", +"a791837c": "DivisionByZeroError()", "a791c665": "WojakCoin()", "a791da46": "buyXwithdrawForContract(address,uint256,uint256)", +"a79225d9": "setupPlansAmount(uint256)", +"a79250e7": "GetERC20RewardPool(uint256)", +"a792bc73": "cheng(address,address,address,uint256,uint256)", "a7932d20": "marketToken2019()", +"a79331fb": "resetMaxSupply(uint256)", +"a793ab47": "mockFunctionOutOfGas()", "a7944579": "sit()", +"a794577e": "lastHarvestTimeStamp()", +"a7969daa": "getWEth()", "a79726b7": "tokenSpin(uint256)", "a7972a80": "MoviePass(string,string,uint8,uint256)", "a7977ffc": "isWhiteListedAndAffiliate(address)", "a7985ae4": "SNAILMASTER_INCREASE()", "a7987b58": "LendroidSupportToken()", +"a798e17d": "withdrawEthAndToken(address,uint256,address,uint256)", +"a798e54f": "_balancesETH(address)", "a799464c": "isMyInfra(uint256)", "a7996adc": "_safePaymentActionAtIco(uint256,address,uint256)", "a799de7e": "anotherTransferTo(address,uint256)", +"a79a163f": "boardroomAddressPercent()", "a79a3c30": "teamAlloacting()", "a79a3cee": "isConfirmed()", "a79a416d": "SetCommissionRate(uint256)", +"a79a7486": "_decode_int64(uint256,bytes)", "a79ac3be": "ReleaseTokenForReserveFund()", "a79b2752": "validate(address[4],address,uint256[12],uint256,bytes,uint256)", +"a79b6750": "deedTokenAddress()", +"a79bbb0a": "hasOwnedOf(uint256,address)", +"a79bd753": "bonusPoolWeight(uint256)", +"a79be744": "devProfit()", "a79c7faf": "test_threeInvalidEqBytes()", "a79ca634": "_setSubnodeOwner(bytes32,address)", +"a79cf51c": "approveTemplate(address)", +"a79d7609": "ResultsByVersion(uint256)", "a79dad23": "GetBetNums(uint256)", "a79deb4f": "acceptTradeDeal()", +"a79eb6df": "checkDays(address)", "a79ec95a": "oneEtherIsHowMuchFST()", +"a79f00b9": "test_allowance_withNoAllocatedBalance()", "a79f26dc": "force()", "a79f4773": "buy_ETH(uint256,bytes8)", "a79f7412": "withdrawCoinExt(uint256)", +"a79f96c7": "testUni(address[])", +"a79fa177": "getTokenHolders(uint256)", "a79fdbb4": "presalePaused()", +"a79ff777": "getTradeableCalls()", "a7a066b7": "AxtrustICO(uint256)", +"a7a0bf5e": "getremainingstakingdeposit()", "a7a0d537": "something()", "a7a1019d": "tixPresale()", +"a7a126a0": "minimumDollarCirculation()", +"a7a18538": "GrantAdmission(string)", +"a7a1c74e": "addrAlreadyEnrolled(address)", +"a7a1d255": "SendETHFromContract(address,uint256)", "a7a1e0a7": "auditNTVUText(uint8,uint8,string)", "a7a1ed72": "pass()", +"a7a21712": "zapper()", +"a7a21fec": "Exchcoin_Contract()", "a7a260cf": "TokenDeployed(uint256)", "a7a2720e": "processFunding(address,uint256)", +"a7a278b1": "getInactivityReleasePeriod()", +"a7a2d3fb": "initialize(uint8,bytes32,uint8)", +"a7a36d59": "recoveryPaymentDigest(bytes32,uint256,address)", "a7a38f0b": "history(uint256)", "a7a39daa": "getBrickIdsByBuilder(address)", +"a7a3b96e": "LOCKSTAKE()", "a7a3ba54": "SponsorMusic(uint256,uint256,address)", "a7a44eba": "getFirstUnionIds(bytes32)", +"a7a4ab32": "claimedCells(address)", "a7a5e00b": "updateCustomer(address)", "a7a604b2": "mintUptoCap()", "a7a60580": "MeteorToken()", "a7a62aee": "init(address,uint256,address,string,string)", +"a7a63f77": "checkClaimParamsERC721(uint256,address,uint256,uint256,address,address,uint256,bytes,address,bytes)", +"a7a76a07": "bcashAddress()", +"a7a79c34": "addBlocker(address)", +"a7a7bba3": "getAuraEquipContains(address,uint256)", "a7a7be1a": "newWriteAddr()", +"a7a7d3bc": "defaultSpendLimit()", +"a7a83bbe": "flush(uint256,uint256)", +"a7a85114": "crowdSaleRoundThree()", +"a7a88c7a": "purchaseLegendNFT()", "a7a8add2": "setSaleAgentContract(address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "a7a957ff": "getSaleDayNow()", +"a7a97442": "createNewPool(address,uint256,address,uint256)", +"a7a97c50": "godSetResourceExchangeContract(address)", +"a7a9a018": "keepMIR()", +"a7a9ccec": "userIdIndex(uint256)", +"a7a9d9ba": "levelCreep(uint256,uint256)", +"a7aa392c": "AUTOMATIC_LOGGER_ADDRESS()", +"a7aa704e": "push_receipt_counter()", +"a7aa9f1b": "getTethers()", +"a7aaa2d6": "creatorToValidator(address)", "a7aac32d": "withdrawAdvisorTokens()", "a7aad3db": "voterReward(address,uint256,uint256)", "a7aaf58c": "getPollID(uint256,uint256)", +"a7ab14c2": "setClaimStart(bool)", "a7ab6961": "withdrawalDelay()", "a7abb8cc": "BM_MasterClass_Reserved()", "a7abc124": "activate(bool,bool)", +"a7abf943": "WuKongAddress()", +"a7ac767b": "projectPartyFund()", "a7ace55d": "incrementDivisor()", +"a7ad2738": "donated_people(uint256)", +"a7ad69da": "totalIcoDistributed()", +"a7ae652c": "stakeNerdByAnyToken(address,address,uint256)", "a7ae9756": "startNewStakingInterval(uint256,uint256)", +"a7aebcf0": "activateStake(uint256,uint256)", "a7af0b99": "Nerdearla()", "a7afc1ca": "deactivateCurrentRound()", "a7b0793b": "setAdvisorFundWallet(address,address,uint256)", "a7b07acc": "AssetSplit(address,address,address,address)", +"a7b09b8c": "mods(address)", +"a7b1346f": "getTokensClaim(address,uint256)", "a7b2042f": "phasePublicSale3_From()", +"a7b26988": "getDeflationBaseRate()", "a7b2bfc7": "multyTransfer(address[],uint256[])", +"a7b2cc31": "setCreditPlanOf(address,uint128,uint128)", +"a7b2cfca": "string1()", "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)", +"a7b4bc71": "tryMe()", +"a7b5833f": "issueSUSD(address,uint256)", +"a7b6227e": "_fromUnderlyingAndBack(uint256,uint256,bool,bool)", "a7b69ed9": "PostLicense()", "a7b71dca": "getJobValue(bytes16,address,address,uint256,uint256)", "a7b7eefb": "JustmakeToken()", @@ -95923,39 +175542,66 @@ "a7b88506": "canRead(address,bytes32)", "a7b8c868": "startCrowdsaleTime()", "a7b91780": "getTokensSale()", +"a7b938bd": "setLeverage(address,address,uint128)", "a7b94972": "newBen(address)", +"a7b9c4b9": "DGX_HasNoEther()", "a7ba0cb5": "createChatRoom(bytes32)", "a7ba44c3": "isFinalizerSane()", +"a7ba732e": "setflag(uint256)", +"a7ba7ed3": "reserve_token_previous()", "a7ba9fb1": "epsilon()", "a7bb1cf4": "_setRarityBonusValue20(uint256)", +"a7bb245b": "init(address,uint256,address,address,string,string)", "a7bb5803": "splitSignature(bytes)", "a7bb959a": "Apen()", +"a7bc1d57": "_ApplicationWhitelisted(bytes32)", "a7bc2efd": "transferGroupIntertrade(uint256,address)", "a7bc3cb9": "SafeLocked(uint256)", "a7bc8c46": "howManyVoters(bytes32)", +"a7bd0338": "setYoutuber4(address)", +"a7bd3e9d": "setDividendPool(address)", "a7bd4791": "MakeItWeinSec()", +"a7bd8ef7": "getMinpTokensRequired(uint256,address,address,address)", "a7bda7e3": "extractNameFromDataET(bytes)", +"a7bdad03": "getExternalPositionModules(address)", +"a7bdc932": "staking(address,address,uint256)", "a7bdf16e": "isValidBump(uint16[3],uint16[3])", +"a7be1a54": "FL()", "a7be2648": "unTrackToken(address,uint16)", "a7be85c6": "AUTHOR()", "a7bf1b6c": "purchase(uint256,uint256,address,address)", "a7bf1cbf": "unfreezeTransfersSince(string)", "a7bf8921": "freezeContract(bool,uint8[],bytes32[],bytes32[])", +"a7c0c99c": "collect(uint64)", +"a7c1674f": "accountWarrants(address)", "a7c19841": "preSaleInit()", "a7c1a708": "LogGameStarted(uint256)", "a7c1a75b": "maxAuditDuration()", +"a7c1abe0": "globalConfig()", "a7c1abf1": "decodeMessage(string)", +"a7c1d590": "setMarketingAddr(address)", "a7c1e629": "cancelTransfer(address)", "a7c25c5a": "setMileagePointPrice(uint256)", +"a7c32ad0": "pendingPotato(uint256,address)", "a7c368c0": "pushBuyerList(address)", "a7c3ce60": "distributeRegisterFee(uint256,uint256,bytes32,uint8)", +"a7c3d030": "IsEligibleFor(bytes32)", "a7c3d71b": "icoStartTime()", +"a7c3e3be": "order_list(uint256)", "a7c41e28": "zennitToken()", +"a7c438bc": "didVote(uint256,address)", "a7c4abdb": "calculateTokenAmount(uint256,uint256,uint256)", +"a7c4dccf": "kyberAddr()", "a7c5052e": "buildDSTokenRegistry()", +"a7c53e1e": "timeUnlocked()", "a7c591c4": "setBest(uint8)", "a7c5c2a2": "BirthFee()", +"a7c60560": "cashbackInvestor()", +"a7c6402c": "uniswapV2Router02()", +"a7c6a100": "vaultCount()", +"a7c6a59d": "callerCompensationDenominator()", "a7c6c83a": "getMystr()", +"a7c6d9d9": "getTrxToTokenOutputPrice(uint256)", "a7c6f483": "exchangeRateAuth()", "a7c742c9": "CommissionEarnedEvent(address,uint256)", "a7c7d2a0": "airdropValue()", @@ -95963,6 +175609,7 @@ "a7c7fdeb": "transferTokensToOwner()", "a7c83514": "inflationChange()", "a7c8e68a": "sealManualMigration(bool)", +"a7c8fa54": "BonusAmount(address,uint256)", "a7c961d5": "bonussale_Cap()", "a7c9771b": "getVATDeductions(uint256,uint8,uint256,uint8)", "a7c98748": "test3_searchNext()", @@ -95971,374 +175618,729 @@ "a7ca3010": "getWithdrawTransactionCount(bool,bool)", "a7cac846": "weights(address)", "a7cadc50": "Dagelan()", +"a7cae942": "NOT_MINTER_ERROR()", +"a7cafaa8": "addFeeAddress(address)", +"a7cb5fb7": "ERC1155Assets(address,uint256[],uint256[],bytes)", "a7cb6edc": "tokenRestriction(address,bool)", "a7cbe06f": "MaxFunds(address,uint256,uint256)", +"a7cbe467": "weightedUnlockValue(uint256,uint256)", +"a7cbeac0": "setRewardsDivider(uint256)", +"a7cc0136": "_tokenApprovals(uint256)", +"a7cc1582": "setStudentDetails(string,uint256)", "a7cc440e": "getCityResourceRichness(uint256)", "a7cc90e9": "calculateCounters(uint256,uint256,uint256,uint256)", +"a7ccabdf": "setNFTContract(address)", +"a7ccd63e": "setBurnWhitelistFromAddress(address,bool)", +"a7cd0906": "releaseBlocks(address)", "a7cd21ea": "transferPrivilege(string,address)", "a7cd674e": "whitelist_enable()", "a7cdc2ad": "getAddressExist(address)", +"a7cdeed7": "batchTransferFailed(uint256,string)", +"a7ce406e": "openLockGemAndDraw(address,address,address,address,bytes32,uint256,uint256,bool,address)", "a7cebd4d": "createActivity(uint16,uint16,uint128,uint64,uint64)", "a7cec1d2": "DataStorage()", +"a7cf304b": "getTokenBunny(uint32)", +"a7cf5340": "pickPointer(uint256)", +"a7cf6cb1": "c_th(address,uint256)", "a7cf7edd": "mimul(uint64,uint64)", +"a7cfb585": "CloseModApprobationVote()", "a7cfe365": "addAuction(uint40,uint256)", +"a7d07c82": "resolve(uint256,uint256,bytes32)", "a7d0b6ce": "payoutForResult(uint256)", "a7d0c490": "keybuy(uint256)", "a7d0f8af": "callStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"a7d102be": "getSlashEventsLength()", +"a7d16f30": "Call_Function(address,uint256,bytes)", "a7d27056": "readMessage(uint256)", "a7d2b73f": "SharkProxy()", "a7d2d2ab": "AngelCoin()", "a7d30400": "window1TokenExchangeRate()", +"a7d3c94a": "ProprityfromReconBank()", "a7d4549c": "test(uint8,bytes32,bytes32,address,address)", "a7d4bbe6": "modexp(uint256,uint256,uint256)", +"a7d4e241": "addLiquidityPoolWithAnyERC20(address,address,uint256,uint256,address,uint256)", "a7d4e89d": "migrationOperator()", +"a7d4ed1f": "add(uint256,bool)", "a7d512d6": "getCertificateInfoByNo(address,uint8)", +"a7d53800": "constractDeployTime()", +"a7d545db": "stake(uint256,address,address)", "a7d55b76": "tryDismissRoom(uint256)", "a7d5d4fa": "approveAddToken()", "a7d68896": "updateCap(uint256)", +"a7d6fc3b": "buyLockupTokens(address)", +"a7d76053": "limitLoanAmount(address,uint256,bytes32,uint256,address)", "a7d77305": "chargeMonthlyRate(bytes32,address)", +"a7d7f6fa": "dequeueOrder(uint256)", "a7d8287d": "MyFreezeContract(address)", "a7d82b00": "setGoldCertVerifier(string)", +"a7d87ed0": "isWhitelistedBetaDelegate(address)", +"a7d889ca": "Message(address,address,string,uint256)", "a7d89168": "getLockedAmount(address,address)", +"a7d99feb": "getSynthAddress(bytes32)", +"a7d9a692": "bZxVaultAddress()", "a7da611f": "commission_mom()", "a7da74f8": "addQuoter(address)", +"a7da8d8e": "from_uniswap_to_balancer(address,uint256,uint256,uint256,address[],address[])", +"a7daa633": "mintDistributeRewards()", "a7daf6dd": "eligibleForDividence(address)", +"a7db50be": "userX4Site(address,uint8)", +"a7db555b": "getOwnerNumber()", +"a7dbafd5": "migrateUser(address[],address[],uint256[])", "a7dbb402": "changeAddress(string,address)", +"a7dbfa6c": "changeSlabPercentage(uint256,uint256)", "a7dbfcaa": "setCostOfToken(uint256)", "a7dc0aee": "test_threeValidEqString()", "a7dd7a59": "unchainedMultisigVersionMinor()", "a7dd7e37": "distrust()", +"a7dd9e66": "paidETH(address,address)", "a7de83e6": "generate(address,address)", "a7de9c63": "quantityFactor()", "a7dea7e4": "getMyPastLosses(address)", +"a7deac39": "balanceOfUSDC()", +"a7dec849": "getARCHAmountStaked(address)", "a7dee615": "_NewListingWhitelisted(bytes32)", +"a7deec92": "test9()", +"a7def59a": "balancerToPiGasOn(address,address,uint256)", +"a7df7544": "SystemChangePercentWeiDividend(uint256,uint256)", +"a7df872d": "ERR_ALREADY_IN_CONTRACT_CHANGE()", +"a7df8c57": "addressIndices(uint256)", +"a7df9448": "mintedMay()", +"a7dfa4b9": "testFor(address[],uint256)", "a7dfc420": "investorAmountTokensToBuy(address)", "a7dfc874": "unregister(bytes,address,uint256,bytes)", "a7e03dcb": "mintPerBlock()", +"a7e0509f": "deadPlayerCount()", +"a7e05b9c": "setTreasuryAddr(address)", +"a7e0a3c3": "checkUserCapitalLyn(address)", +"a7e13c72": "gl(uint256,uint256)", +"a7e14b20": "crw(uint256)", "a7e1a8ee": "setAttributeType(uint256,string)", "a7e1b516": "unban_user(address)", "a7e1c4ac": "YunbeiToken(uint256,string,string)", "a7e1f6a2": "doubleDown()", "a7e21e80": "hold(address)", +"a7e22860": "proposalAgainstVotes(uint256)", "a7e25683": "testShortOutput()", +"a7e257d2": "registrationForAirdrop(address)", "a7e2cca9": "setFinished(bool)", "a7e328d4": "setSomeValues()", "a7e33a0c": "sendChatMessage(string)", "a7e350f7": "payOutGovernors()", +"a7e411b1": "initConstructor(uint32,uint256,uint256)", "a7e45699": "buyWildcardToken()", "a7e47920": "createItems(uint256[],address[])", "a7e48375": "MikadoToken()", "a7e53987": "EthCapInWei()", +"a7e55d22": "getCircuitBreaker()", "a7e5a338": "HIDERA(uint256,string,string,uint256)", "a7e5cb3e": "getWhoBet(address,uint256,uint256)", "a7e5f1bc": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"a7e5f2ee": "get_erc20_contract_address(address,uint256)", "a7e5f3c5": "likeBlock(uint256)", +"a7e6c2a7": "approve_155(address,uint256)", +"a7e712ce": "finishChangeZSToken()", +"a7e717af": "createEdition(bool,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"a7e71ee3": "addExchange(string)", "a7e74377": "_preValidateTransaction(address,uint256)", "a7e74ab7": "setMx(bytes32,address)", +"a7e76644": "auctionCounter()", +"a7e7797d": "setAddr(address,address,address,address)", +"a7e7aacd": "activateExodusMode()", "a7e7d2f4": "BBXCoin()", "a7e81d22": "lastBlock_f5Hash_uint256()", +"a7e83e6c": "stopThresholdPercent()", "a7e86daa": "executeBidFor(address,uint256,uint256,uint256)", +"a7e8d762": "getOrCacheMarketRepBond()", "a7e92fb5": "unagree()", +"a7e93735": "TradingProceedsClaimed(address,address,address,address,uint256,uint256,uint256)", "a7e93e87": "retractLatestRevision(bytes20)", +"a7e94455": "systemCoin()", "a7e94542": "approve(address,uint32)", +"a7e9be37": "timeToExitLiquidity()", "a7ea48cf": "CoinBroToken()", +"a7ea6635": "emitTokenTransferCalled(address,address,uint256)", +"a7eaa186": "batchUnwrap(address,uint256[],uint256[],address,bytes)", "a7ead565": "FiO()", "a7eb3848": "transferRewardWithoutFee(address,uint256)", +"a7eb4296": "nectarWallet()", "a7eb685b": "mintFeeTokens(uint256)", "a7eb891f": "isClientPaidUp(address)", "a7ebc5bd": "privilegedAccountStatus(address)", "a7ec619f": "getCurrentStageDiscount()", "a7ecce5f": "removeQuitAccount(address)", "a7ecd0ad": "getSpecialAddresses()", +"a7ecd37e": "updateSigner(address)", +"a7edda6d": "setDepositable(bool)", +"a7ee0d9e": "inCaseTokensGetStuck(uint256)", "a7ee323e": "VULCAN_PROMETHEUS_FTL_SPEED()", "a7eea700": "sale2Started()", +"a7eea75f": "setSRC3(address)", "a7eeea37": "NewContributor(uint256)", +"a7ef04ab": "StakingUsers(address)", "a7ef4329": "getHelloWorld()", +"a7ef67f6": "getQuantity(address,uint256,address)", +"a7efbc8e": "setBoss(address)", "a7f01e4d": "getLockedFunds(address)", +"a7f06819": "firePaymentReceivedEvent(address,address,uint256)", "a7f07011": "tradeExecutor()", "a7f0b3de": "genesis()", +"a7f0bf1a": "DB_DAO_min()", +"a7f0e231": "compInitialIndex()", +"a7f0e903": "FLASH_PROTOCOL()", +"a7f12494": "ExtensionBurn(uint256)", "a7f17bd5": "Bodcoin()", "a7f18b5a": "setPOOL_edit_14(string)", "a7f1b77a": "addReferralDeposit(address,uint256)", +"a7f239fb": "getUnderlyingTokenBalanceOf(uint256)", +"a7f28da7": "removeWhitelistedLiquidityProvider(address,address)", +"a7f2a1f4": "_buyUnderweight(address,uint256)", +"a7f2c5ad": "currentExpEarned(uint256,address)", "a7f2cc54": "feeCalculated()", "a7f2f4e2": "getMembershipStatus(address)", "a7f31e0a": "getCelda(uint256)", "a7f32edd": "OfflineCastleSold(uint256,address,uint256)", +"a7f354a5": "plyrRnds(uint256,uint256)", "a7f365ae": "setLockoutPeriod(uint256)", "a7f36c2e": "setProviderPriv(uint256,bool)", +"a7f39708": "metapoolWithdrawAtCurRatio(uint256,bool,uint256,uint256)", "a7f39d8a": "tokenSaleWeiGoal()", "a7f3e70f": "setSaleTimes(uint256,uint256)", "a7f43779": "remove()", +"a7f4392b": "pendingHandtest(uint256,address)", "a7f43acd": "reserveContract()", +"a7f452ac": "UpdateBlackList(address,uint256,uint256,bool)", "a7f49e1d": "maximumBuyBackAmountInCents()", +"a7f4a722": "_isDisputed(uint256)", "a7f58c24": "computeInitialPrice(uint8)", "a7f5eccc": "previousReturnValue()", +"a7f65041": "claimETHLP()", +"a7f65cb3": "addBounty(string,uint256,uint256)", +"a7f71739": "setIterateLength(uint8)", "a7f738df": "getRoundAheadAmount(uint256)", "a7f7417d": "preICOFreeBonusPercent()", +"a7f76cea": "FAN()", +"a7f7b5de": "yourStakedZUSE(address)", +"a7f7d0d0": "toUInt(int128)", "a7f81863": "thirty_wallet()", +"a7f81e6a": "k2()", +"a7f82b68": "updateRewardDistributionWaitTime(uint256)", +"a7f84c25": "mktVestingLockDate()", +"a7f85902": "BecomeStarAngel(address,uint256,uint256)", "a7f86c63": "_removeRoomNight(address,uint256)", "a7f879ea": "teleportToken()", +"a7f89797": "setTPT(address)", +"a7f897cf": "halt(uint256[],uint256[])", "a7f8a53c": "ownerSetControllerAddress(address)", +"a7f8b038": "sendBackLostToken(uint256,address,address)", +"a7f8d66a": "getDPY()", "a7f8fbd4": "cancel_contract()", +"a7f91f56": "setDefaultRebaseLags(uint256,uint256)", "a7f95a92": "HardcodedCrowdsale(address)", "a7f9801b": "TakedFunds()", "a7f987ee": "getDebugNow()", +"a7f9b7a6": "MOON_PER_ETH()", "a7f9df38": "investWithBitcoin(address,uint256)", "a7f9fe72": "getAllRecords()", "a7fab81a": "impl_redeem(address,uint256)", +"a7fad26b": "BattleCountEndTime(address)", +"a7fae0f9": "allPrizes()", +"a7fae969": "ChangeUpgradeSchemeProposal(address,bytes32,address,address,bytes32)", +"a7fb1693": "renewERA(uint256,uint256)", +"a7fb40f7": "DistributorAddress()", +"a7fb8469": "lastTimeBonusRewardApplicable()", "a7fb95f6": "changeTeamName(uint256,string)", "a7fbe7ad": "safeLastDate()", "a7fbed9e": "getCurrentPhaseIndex()", +"a7fc72df": "defineHiredTechnician(address)", "a7fc7a07": "addController(address)", +"a7fc8c70": "tokenTxnExecuted(address,uint256,address)", "a7fca953": "getSrcQty(address,address,uint256,uint256)", "a7fdb4f5": "finishedSale()", +"a7fe9811": "opium_rewards()", +"a7fee2bb": "cctaker(uint256,uint256,uint256)", "a7ff0a4e": "TransferTokens()", "a7ff2373": "multiSendFrom(address,address[],uint256[])", "a7ff7a40": "MANACrowdsale()", +"a7ffa8f1": "getSwapPathOfBtf()", "a7ffb2db": "getMaximumRound(uint256)", +"a7ffcfbf": "frozeProduct(address,bytes32,bytes32,address)", "a7ffe560": "batchSpawnAsset(address,uint256[],uint256[],uint256)", +"a7ffe795": "eth_rate_2()", "a8006dfe": "exec_admin()", +"a801ac93": "discardBill(uint256)", "a801ea25": "launchLotto()", +"a801f427": "mintProposal(bytes32)", "a801fd63": "setNewValue()", "a802257d": "addr_Saddlery()", +"a8024025": "OnFundsMigrated(address,address,uint256)", +"a8024b06": "rewardPerTokenPaid()", "a8026912": "setSource(address)", +"a8029043": "getStageUnlockTime(uint8)", +"a802a2f4": "LockTransferAddress(address)", "a802afa1": "minOfArray(uint256[])", +"a802bf7e": "swapFromODai(uint256)", +"a802fa2c": "_updateSUKUPrice(uint256)", "a80325bd": "toB32(bytes)", +"a8033c8e": "favourite()", +"a8048af5": "confirmAsPartyB(uint256)", "a804903a": "FOUNDER2()", "a80498f1": "AdvancedDeposit(bytes32,uint256)", "a804cc7d": "setUser(address,address,string,string,bool,bool,bool)", "a804da18": "cliffReleasePercentage()", +"a804f73e": "structureHash()", "a804fcb4": "COMMUNITY_PERCENT()", +"a8054ff7": "swapLmxToEther(uint256)", +"a8057f97": "issuer_mint(address,uint256)", "a805bfef": "addInvestors(address[],uint256[],uint256[],address[])", +"a8067b66": "addToken(address,uint8,uint120)", +"a806dc65": "setMaxInflation(uint256)", "a8074b55": "bundlingDenied()", "a807598e": "incluirUsuario(address)", "a8077951": "updateLastBuyKeysPIDs(uint256,uint256)", +"a8078988": "getRunnersByDistance(uint256)", +"a807aa3e": "offerERC(uint256,uint256,address)", +"a807dd33": "track(address,address,string)", "a807ea0f": "newMostInviteTimes_()", "a8083b74": "setContributionSettings(uint256,uint256,uint256)", "a8084938": "CryptoCupToken()", "a80955b1": "setFoundersTokenAllocation(uint256)", "a80a60fb": "saleFirstPresaleEndBlock()", +"a80a611c": "mint(string,string,string,uint256,uint256,uint256)", "a80a9e40": "setActive(address,address,uint256)", "a80acfd3": "DisableSelling()", +"a80ad41e": "alreadyDeclared()", "a80aee59": "isActiveDelegate()", +"a80af172": "mintTeamAndAdvisorsPart10(uint256)", +"a80b2455": "Wager(uint256,address)", +"a80b8834": "baseThreePercent()", +"a80bb70c": "neg(bytes16)", +"a80be5e9": "BalanceBurned(address,uint256)", "a80bf3e6": "tokenLocker()", "a80bffb6": "tokensOfSell()", +"a80c5b9f": "getTokenBeforeAudit(address)", "a80c609e": "tokenImbalanceData(address,uint256)", +"a80c76ff": "minNetworkCompensation()", "a80c89d2": "RollbackedContract(uint256,address,address)", +"a80cbac6": "tokenWallet(address)", +"a80cc546": "newMonitor()", "a80d2fb4": "getPeerMessageCount(address,address)", "a80d4e9a": "EtherAuction(uint256)", "a80da0f1": "SpursvsWarriors419()", "a80da34a": "propertyAreaSqFtOf(uint256)", +"a80db6fc": "getPendingProposals()", +"a80db78b": "trasnferFund(uint256)", "a80db9fb": "nextStealTimestamp()", "a80dca57": "recharge(string)", "a80de5ea": "lottery(uint8)", "a80e3659": "testDisputedReadValid()", "a80e6c01": "getClassPlayers(uint256,uint256,uint256)", +"a80e7acb": "returnFunds(address,address,address,bytes,bytes32)", +"a80edb4a": "getCreditRate()", +"a80f1072": "setAyrAYRReward(uint256)", +"a80f4231": "NEW_BEST()", "a80f54ca": "transferToExchange(address,uint256)", +"a80f9184": "DMOND()", "a80f9e2d": "RankingBallGoldCustomToken(address)", +"a80fb8ba": "featureByIndex(uint256)", +"a80fd4f6": "stopLiquidityGenerationStop()", "a80fe377": "Goahead()", +"a80fe42c": "cannotSend(address)", "a8103621": "dividendsPayed()", "a810385e": "setBla(string)", "a8103c80": "SSHToken(uint256,string,uint8,string)", +"a8105289": "createMaster(string,string,string,string,string,uint256,bool,uint256)", +"a8105af0": "setInvestorParameters(address,uint256)", "a81077a7": "usersRegistered()", "a810a54c": "withdraw(bool)", "a810bc13": "ETCharPresale_v2(address)", +"a81119b8": "emergencyWithdrawFor(address)", +"a811306f": "ischalUniswapMining()", +"a8126f75": "LogDepositMade(address,uint256)", +"a812a514": "startNewPhase()", +"a812d41c": "interestPaid(bytes32,address)", "a8132a46": "hardCapInToken()", +"a813656d": "_refundNonZeroBalanceIfEnabled()", +"a8139701": "confirmWinnerChallenged(uint256,uint256,int256[])", "a8140c95": "OceanScapeCoin(uint256,string,string)", +"a8142743": "Received(uint256)", +"a814bf9b": "fourmonth(address)", +"a814cdf9": "bonusReferral()", "a8150e72": "removeOrderOfVendor(address,uint256)", +"a81510b1": "updateUberHaus(address)", +"a815119d": "ETHBalance(address)", "a8154e17": "teamUnfreezeDate()", +"a81562a4": "tma()", +"a81564fc": "getInitialAllocation()", "a815a85d": "getItemCounts()", "a815ff15": "set(string,address)", "a8164a84": "ThxMsg(address,string)", "a816899e": "icoBalances(address)", "a817163b": "BusTokenLock(address,address)", +"a817857e": "acoData(address)", +"a817a0e5": "clRebaseWtihMultiplier(uint256)", "a817ccac": "threeParams()", "a817d2de": "extract20(bytes32)", "a817f668": "findPlayer(address)", "a8181851": "dapCarToken()", +"a8181fd8": "MiningToken(string,string,uint256,uint8)", "a8182cd3": "serverCancelActiveGame(address,uint256)", +"a8186558": "recipientWhitelist(address)", "a818a222": "TokenAdded(address,uint256,uint256)", "a819515d": "updateParentTotalTheoreticalSupply()", +"a819604c": "getDiceValue(uint256)", "a819819b": "sweepDeityCommission(uint256)", "a819c36c": "ClapToken()", +"a819df9d": "getValuePoolUnminingFee(address)", +"a81a009e": "migrateTransferAgents(address[])", "a81a3e4d": "hasOpenApplication(address)", +"a81af46e": "claimBonusTokens(address)", "a81afa57": "sellSpecialTokens(address,uint256)", "a81c3bdf": "ethFundDeposit()", +"a81c466c": "buyBlocks(address,uint16[])", "a81c804e": "addToWhitelistBulk(address[])", +"a81cbdef": "ContractInfo(uint256)", "a81d18d7": "setTokenMeta(uint256[],uint256[],uint256[])", "a81d3424": "getFrozenToken(address)", +"a81d8010": "_processPendingActions(uint256)", "a81daf29": "ETHernitymining(address)", "a81dfde0": "CBT()", +"a81f1c4b": "ethExchangeEnabled()", "a8201894": "getCurrAuctionPriceAuctionID(uint256)", +"a8203abb": "_getMyDOOrders()", +"a82088fc": "removeDevAccount(address)", "a820b44d": "iterateStart()", "a820d02e": "MarketingDevelopmentAmount()", +"a8219047": "setBridgeTransferAmount(address,uint256)", +"a821b62b": "db_eth_oracle_address()", "a8222adf": "sellerNumOpenDeals()", +"a822a1e6": "setMaxMortgageFactor(uint256)", +"a8233ee9": "rechargeAddress(uint256)", +"a82374c7": "approveKyberContract(address)", "a82375d1": "ToGoConcert(uint256,string,string)", "a8239d0b": "getPrice(string,address)", "a8243ff4": "getactlen()", +"a824b190": "setStone(uint8)", "a824bd9a": "autoSell(address,uint256)", +"a824d872": "multisend1(address,address[],uint256[])", "a824e636": "walletSend(address,uint256,address)", "a82524b2": "presaleStartTime()", +"a8256039": "_getMarketIdFromTokenAddress(address)", +"a8256672": "submitRand(uint256)", +"a8257706": "withdrawEdf()", +"a8260809": "ethItemInteroperableInterfaceModel()", "a8267482": "msp()", "a826b422": "addCbAddress(address,bytes1,address,bytes)", +"a826c114": "getDecimals(address[])", "a826ee78": "submitResult(uint256,uint256[])", +"a826ee84": "getTargetBlock(uint256,uint256)", +"a8271541": "pendingCarve(uint256,address)", "a8276d97": "SetcashOutTime(uint256)", +"a82776dd": "etherContributed(address)", +"a827bf48": "synthsBalances(address)", "a827ef0a": "EvLoveItemAdded(bytes32,address,uint256,uint256,string,string)", +"a827f7e6": "GetBetInEther(address)", "a828251e": "voteProposal(bytes32,address,address,uint256,bytes32,string,bytes)", +"a828353b": "setNewOracle(address,address,uint256,uint8,uint256)", +"a8287b5c": "UpdateContentData(bytes32,address,uint256,uint256,bytes32)", "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()", +"a82a2653": "convictMapping(address,bytes32)", "a82aa270": "updatePick(uint256,uint256)", +"a82ae4d8": "RsvVestingLockDate()", "a82b3640": "getDrawP()", +"a82b5b5c": "getLockupFinishTimestamp(address,uint256)", "a82ba2d5": "renounceKeeper()", +"a82c8cd6": "viewCurrentCost(uint256)", +"a82c9f89": "x_adminSetHeroAddress(address)", "a82cb091": "BuyDoubler()", +"a82ccd4d": "deltaOf(uint256)", "a82d1d1a": "TwinkleToken()", "a82d4ac1": "Crowdfunding(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a82e0dcc": "theCyberMessage(string)", "a82e1374": "changePublicallocation(uint256)", "a82e3179": "jingleContract()", +"a82ed9ec": "UNISWAP_V2_ROUTER()", +"a82fa7c3": "setusdc(address)", "a82fc94f": "issueTokensPresale(address[])", +"a82ffd88": "supplyEthToCompound(address)", "a8308665": "add5NewTraits(string,string,string,string,string,bool)", +"a830a78b": "stakingTaxBP()", +"a831089c": "updateFullMaturity(uint256)", "a8311aa8": "getParties()", "a831751d": "addPartOwner(address)", "a8319481": "cancelRole(address,address)", "a831f0bb": "compareStringValue(bytes32,bytes32,bytes1)", "a8321459": "topUpAvailable()", +"a8323e6f": "legandaryBalance(address,bool)", "a8324a3f": "batchRestoreWebGift(address[])", +"a832806b": "mphMinter()", +"a832bbc2": "bet(uint256,address,uint256,bool)", "a832d7df": "newSell(uint32,address,uint256)", "a83332d5": "TokeniVOX(uint256,string,string)", "a833386b": "toBytes32()", +"a833a1c9": "setDepositeer(address,bool)", "a833c7ab": "incentivisationAllocation()", +"a833fc6a": "inviteContract()", "a83467a1": "dividendcommission()", +"a8347656": "changePosition(address,uint256,bool)", "a8347f6a": "maxCrowdsaleCap()", "a834c43d": "buyAccess(string)", "a83500e0": "check_redeemed(string)", "a8351c03": "pauseCrowdsale()", +"a8352277": "TransferERC20(uint256,address,address,uint256)", +"a835a0de": "DEFAULT_ADD_TOKEN_TIME_LOCK_IN_BLOCKS()", "a83627de": "updatePeriod()", +"a8365693": "nextImplementationDelay()", "a8366fef": "TOKEN_STANDARD_ERC20()", "a8370492": "setTrFee(uint256)", "a83723f3": "runRotateTime(uint256[],bytes32,bytes32)", "a8372511": "STCoin(uint256,string,string)", +"a8374a65": "yourSdarkBalance(address)", +"a8375202": "setContractBasic(address,address,string,uint256,string[])", "a837aeb2": "AdminStartDraw(string,bytes32)", "a837c35e": "createAmountFromEXORForAddress(uint256,address,address)", +"a8381055": "getMakerAddress()", "a8385231": "sendTokensToAddress(uint256,address)", +"a8385c0b": "UPDATE_PERIOD()", +"a838d2b3": "referrerCodes(string)", +"a8397ddc": "streamWithdraw(uint256,string)", +"a839bab4": "addAthByDistance75()", "a839fc56": "setGoalAchieved(bool)", +"a83a0cb0": "latestDatePartnerAward()", +"a83a475c": "decision(uint256)", +"a83a5c66": "layTop3TeamCoDuongChayDaiNhat()", +"a83a84b2": "removeWhitelistedTransfer(address)", "a83b1e21": "reply(string,bytes32)", +"a83b5017": "pendingOx(uint256,address)", +"a83b91b3": "_setOperatorShare(bytes32,uint256,uint256)", +"a83ba53e": "setDisputePeriod(uint256)", +"a83c4df9": "pokeToWbnbRoute(uint256)", "a83cf7fe": "RefundVault(address)", +"a83e0030": "ZhiZunAddress()", +"a83e1961": "nStones()", "a83e1d10": "getUserQuoteIds(address)", +"a83e52b4": "setDesignatedSigner(address)", +"a83e775f": "allApprove(address,address,bool)", +"a83f57f6": "exp_neg_one(uint256)", +"a83f6bf8": "Ruggies()", "a83f9429": "extend1Week()", "a840617f": "LogKycRefused(address,uint256)", +"a840874f": "getLatestSanityRate()", "a840d2a8": "GTO()", +"a8417054": "expmod(int256,int256,int256,int256)", +"a841709a": "twapAtEpoch(uint256)", +"a8417932": "totalStakedUniV2()", "a8418d01": "BECToken(uint256,string,string)", "a841da4b": "lockJackpots()", "a841f1eb": "handleFunds(address,address,uint256)", +"a8420b0f": "WatchClaimTime()", "a842375e": "refundToken(address)", +"a8425879": "privateSaleIssue(address)", +"a842abc5": "hasTranfered(address)", +"a842c750": "fixRetOutTimes_(uint256)", "a842f0f2": "upgradableContractAddress()", +"a8431de8": "owedRewards()", +"a843a4e7": "destroyLock()", "a843c51f": "transferContractOwnership(address)", "a843c97f": "attack(uint256,uint256,uint256[])", "a844545d": "completeMinting()", "a84524a4": "getDetailedPollResults(uint256,uint256)", +"a8453f63": "SetSalesAgent(address,address)", +"a845d17c": "_grouthStep()", +"a8460064": "Bought(bytes32,uint256,address,address)", +"a8461505": "setOnePLpriceInt(uint256)", "a84694c8": "permissionIndexOf(uint8,address)", "a8469ce9": "MINING_REWARD()", "a846c2fd": "payback(uint256)", "a846fa37": "waitQuery()", +"a84707ed": "entityOwnerChanged(address,address,address)", "a8474a30": "_computeRunes(uint256)", "a847a1b3": "StarbasePresaleWallet(address[],uint256,uint256)", "a847a71c": "isOnTrading(uint64)", +"a847d86c": "GetProjectEndDate(uint256)", +"a847e3bf": "getSoftLimit()", "a8484938": "doApprove(address,uint256)", "a848e2ec": "tokenSupportSoftLimit()", "a8492f46": "pickTicket(bytes4)", +"a84947f0": "MIP28()", "a84950df": "calculateTimeBonuses(uint256)", "a8496426": "getOrderId()", "a849cef8": "minDeposits(uint256)", +"a84a477f": "appendSafetyBatch()", "a84a70aa": "lockedTime(uint256)", +"a84aa0c0": "DGOToken()", +"a84ab5f2": "maxBProx(bytes32)", "a84b9de0": "dequeueDouble()", +"a84b9f3c": "totalStakingContracts(address)", +"a84bacd4": "createLptSellOrder(uint256,uint256,uint256,uint256)", "a84c5330": "createNewRevision(bytes20,bytes)", "a84c6362": "ICO_CAP4()", +"a84c95e4": "piliPerBlock()", +"a84cb9a5": "yessaaer(address,uint256)", "a84d073a": "interfaceMintTokens(address,uint256)", +"a84d4286": "createAssetOrderETH(string,string,bytes32,uint256,uint256,uint256,uint256,address)", +"a84d579d": "metaChangeApprover(bytes,uint256,uint256,uint256,address,uint256)", +"a84dc70e": "getRoundInfo(address,uint256,uint256,uint256)", "a84dd3a6": "teamWallet_3()", +"a84e54bf": "claimedCoins(address)", "a84e5f40": "CRYPTONEREUM()", +"a84e9dee": "lastScoreTime(address)", "a84eb999": "removeAddresses(address[])", "a84ebb58": "setVM(bytes32[10],uint256[4])", +"a84ebffb": "setEventId(bytes32,uint256)", +"a84ec929": "getMyOwed(address)", "a84f3e5a": "overdraftUnvested()", "a84f763b": "TokenTransferred(uint256,address,address)", "a84fa137": "transferToRound(uint256)", +"a84ffad5": "updateMiningFee(uint256,uint256)", +"a8505f0a": "emitirMoneda(uint32,string,string,uint16)", +"a850ae91": "AddedToWhitelist(address)", "a8514113": "_emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"a85142ca": "checkOldPing()", +"a8515ae3": "unstakeToken(uint8)", "a85165e0": "checkSubPrice(bytes32)", +"a8516a35": "dgext()", "a8516d21": "_withdrawTokens(address,uint256)", +"a8516d31": "testToSliceToString()", +"a8518039": "NewButton(address,address,uint64,uint64,uint64,uint64,uint64)", +"a851c2e5": "addAllocations(address[],uint256[],uint256)", +"a851c7ff": "get_creation_time()", "a851e2f6": "LogCreateNET(address,uint256)", "a852995d": "bonus1StartETH()", "a852d5ba": "emergency_withdraw(address)", +"a853211a": "EDITOR_ROLE()", +"a8534191": "adminEmergencyWithdrawTokens(address,uint256,address)", "a853d2cd": "getUserByUsername(bytes20)", "a8540daa": "getSellPriceDecimals()", "a8542f66": "ANY()", "a8545830": "transact_token1(address,address,uint256)", +"a8546885": "MIN_CASH_PRICE()", +"a8546aea": "_setPool(address,address)", +"a8552317": "_safeLockRound(uint256,int256)", +"a85594ad": "rewardPerTokenA()", "a855d4ce": "uintStorage(bytes32)", +"a856481c": "deleteHash(string)", "a8565523": "AquaPay(string,uint256,uint8,string)", "a8567a1c": "bidderUpdateBid()", "a85688d2": "_rewardPoS()", "a856b9c2": "lastRandom()", +"a856ff6b": "fulfillMultipleParameters(bytes32,bytes32,bytes32,bytes32)", +"a8570bf1": "tokenSaleWNT(address)", "a85717d3": "open(bool)", "a8575102": "getDnasCount()", +"a858edff": "setPairAddr(address)", "a8590135": "issuanceEnabled()", "a85923aa": "ZibPay()", +"a8592a34": "tTokenPerEth()", "a859a092": "minToken()", "a859eb81": "BONUS_TIER_4_LIMIT()", "a859fffe": "SweDexDividends()", +"a85a5e4a": "addPrimaryOwner(address)", "a85a726d": "NewUser()", +"a85ab383": "CurrentTokenReward()", "a85aba19": "setPreURI(string)", "a85ade82": "FOUNDERS_VESTING_DURATION()", "a85adeab": "endTimestamp()", "a85b13b9": "claimBitNauticTokens()", +"a85b3581": "getNonceIn(address)", "a85c06b7": "_packRaceData(uint256,uint256,uint256,uint256)", +"a85c38ef": "orders(uint256)", +"a85c6d72": "updateTopHolders(address[])", +"a85c9159": "month30()", "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)", +"a85ef678": "wrapETH()", +"a85f1af5": "defineOperator(string,address)", "a85f3761": "repayments(uint256)", "a85f5c2e": "tradingData()", +"a85fc2fb": "exchange(uint256,uint256,address)", +"a85fe3b7": "stakingTokensDecimalRate()", "a85ffd1a": "setAutoDistributionViaETHContributions(bool,bool)", "a85ffe4f": "manualSell(address,uint256)", +"a8601d5b": "distributeMany(address[],uint256[])", +"a8602fea": "setTreasuryWallet(address)", "a860bfa2": "BRCToken()", "a860d119": "communityTokenHolder()", "a861baea": "presale_address()", +"a861c2e9": "getInternalUnderlying(uint256)", "a861e16f": "setEmployeeSalary(address,uint256,uint256)", "a861f99a": "getClientPaidUpTo(address)", +"a861f9db": "registro(string,string,string,string,string,string)", +"a8623917": "getSlavePoolCount()", +"a86265bb": "exercise(uint256,uint256)", "a8627c15": "LINICOIN()", +"a862c6c0": "dexTokenAmount()", "a863f595": "Btczocker(uint256,string,uint8,string)", +"a863f8f9": "maxPossibleCharge(uint256,uint256,uint256)", "a86416e2": "CROWDSALE_PRICE()", "a8644cd5": "contract_eth_value_bonus()", +"a8644d9d": "wifeSigned()", "a86477ad": "offeringEnabled()", "a8648aad": "TokenFunctions()", +"a864b20e": "approve_36(address,uint256)", +"a864fff2": "sendToken(uint256,bytes32)", +"a8656e30": "SignatureValidatorApproval(address,address,bool)", "a8659216": "setInitialLockinDays(uint256)", +"a8659b88": "leaderAmount()", "a8660a78": "vestingStartTime()", "a866665a": "ConsoToken()", +"a8668821": "safeToadTransfer(address,uint256)", "a8670711": "isCloseSale()", +"a8674886": "LV1O()", +"a867a632": "numCheckpoints2(address)", "a8681169": "withdrawWhiteList(uint256)", "a868378b": "returnOfIncome(address,uint256)", "a8683df7": "TokenMyUnicoin(uint256,string,string)", "a868cd6f": "LogPolicyManualPayout(uint256,bytes32)", "a868ec85": "setName(uint256,uint256)", +"a8694e57": "fToken()", +"a8696983": "regUser(string)", +"a869fab3": "MintyAddress()", "a86abb3d": "allFilmsInfo(uint256)", +"a86b1944": "saiPrice()", +"a86b1ad8": "getLocked(bytes32)", "a86b73f0": "toByte(uint8)", "a86bc181": "EXPECTED_END()", +"a86bf3ac": "sommai()", "a86c938b": "balanceOf(bytes8,address)", +"a86cb974": "NUM_NODES()", +"a86de694": "checkAllowance(uint256)", "a86e3576": "symbol(address)", +"a86e6391": "CRIPPL()", "a86ed5e4": "thirdMaxAmount()", "a86ee746": "restoreCutieToAddress(uint40,address)", "a86f7212": "_allocatePlayerTokensTo(address,uint256)", +"a870527e": "getUnifiedTokenDecimal()", +"a870679d": "setAddr(address,address,address,address,address,address)", "a870a0a5": "getChannelClosingSettler(bytes32)", "a870be8a": "setVendingStepValues(uint256,uint256,uint256)", "a870ddc2": "moveTokensFromSaleToCirculating(address,uint256)", +"a87105fa": "RemoveLiquidityForBuyBackOnly(address,uint256,uint256)", +"a87122f5": "setPoolParams(address,bytes32,uint256,uint256,uint256,uint256)", +"a871694f": "lastBondOracleEpoch()", +"a871c4c8": "numberPointsWeekly()", +"a871d86d": "setBylawUint256(bytes32,uint256)", "a871da91": "SHORT()", "a871ffdc": "Getsafe(uint256)", "a87253c7": "getlastuser()", +"a872953a": "transferTokens(address,address,address[],uint256[])", +"a8734f0b": "rates(address)", "a873b155": "GetMinimumBet()", +"a873c075": "setAutoGrowFee(uint256)", +"a873dcf9": "createPromoMasterpiece(string,string,uint256,uint256,address)", "a8740a71": "getCreditLedger(uint256)", +"a87430ba": "users(address)", +"a8747166": "changeNeonvault(address)", +"a874ba77": "withdrawCom(uint256)", +"a874d321": "updateManaForNft(uint256,uint256)", +"a874fe2f": "addBalanceAddReserve(address,address,uint256,uint256)", "a8754caa": "purchaserMapping(address)", "a8756337": "getCurrentValidatorsLengthWithoutMoC()", "a87595ce": "buynowPrice()", @@ -96347,20 +176349,35 @@ "a8762854": "numberInRaffle()", "a8766017": "ARXToken()", "a876a8a0": "_round()", +"a87784f1": "checkBurnAllowed(address,uint256)", +"a87787a7": "removeMintManuallyQuantity(uint256,uint256)", "a877b557": "TransferMinimumFeeExecuted(uint256,address,uint8)", "a877db9f": "none()", +"a8781af4": "scoreReserveImprovement(uint256)", +"a8784496": "CutoffTimestampChanged(uint256,uint256,address,uint256)", "a878ad27": "createTokenToOperation()", "a878aee6": "withdrawAllTokens(address)", "a8790533": "distribution(address[],address,uint256,uint256,uint256,uint256,uint256)", +"a879537f": "getAsksByPageDesc(uint256,uint256)", +"a87980e7": "add(address,bool,uint256)", +"a8798510": "DEFAULT_SLIPPAGE()", "a879af45": "oldTokenBalance(address)", "a879fcbb": "assetInfo(uint256)", +"a87a730e": "tokenTime(uint256)", "a87af57b": "setTokenForSale(uint256,uint256,address,bool)", +"a87b0f91": "colorScheme(uint256)", "a87b1cd2": "whitelistedBeforeActivation(address)", +"a87b210a": "Cryptobuds_PROVENANCE()", +"a87b3eaf": "nextRebaseEpoch()", "a87b73c7": "StageOpened(uint256)", +"a87cac25": "canPlayerLove(address)", "a87ced35": "startDispute(bytes32,address,int256)", "a87d2321": "Gummy()", +"a87d2be4": "SetPOZFee(uint256)", +"a87d6e64": "setSTokenContractAddress(address)", "a87d8b6b": "walkClientOrders(address,uint128,uint128)", "a87d942c": "getCount()", +"a87dcf4b": "processCommissions(uint256[])", "a87de9cc": "ADD(uint256,uint256)", "a87e0c33": "newAgon(uint64,uint64)", "a87e5d3f": "setPriceUpdateFrequency(uint256)", @@ -96369,334 +176386,643 @@ "a87ebcb5": "setJackpotMinimumAmount(uint256)", "a87f32a2": "ownFiles(string,string,string)", "a87f84fc": "updatePersonLocation(uint256,string)", +"a87fe4d3": "regFees()", "a87ffd1d": "GenesisInitialSupply(address,address)", "a880319d": "addToken(address,string,string,uint8,bytes,bytes)", +"a8804839": "suspended(uint256,uint256)", "a880531f": "getOraclizeCbAddress()", "a8817403": "addFamedStar(string,uint256,uint256)", +"a881c5fd": "areDelegatorsBanned(address)", "a881f85e": "clearTokenSale(uint256)", +"a8824101": "pendingGoose(address)", "a8825650": "slice(bytes32[],uint256,uint256)", "a8826602": "getAllCellIds()", "a882d49f": "replaceMultisig(address)", +"a882edba": "showAllJobs()", +"a8833fc8": "rebalance(address,uint256,uint256)", "a8834aac": "getPointer(uint8)", +"a8834f4e": "withdrawStash(bytes32,bytes32[],uint256[])", "a8836844": "returnPayees()", "a883aab3": "GlobalAmountCapHard()", "a883b0c4": "changeRate(uint256,uint256)", "a883fb90": "getPendingVersion()", "a884a248": "getFill(bytes32)", +"a884b930": "setRecipientWhitelistEnabled(bool)", "a885508a": "removePermissionManager(address,bytes32)", +"a885906d": "predictionEndPriceRecords(uint256)", "a885dab6": "getTokensPerDay(uint256)", "a8862fcc": "isEscaping(uint32,int256)", "a8865bda": "masternodeIsValid(address)", +"a886c9bb": "_claimFees(address,bytes32)", "a886d66f": "crowdsaleList(uint256)", "a8870d6f": "mintingDataUpdatedAtBlock()", "a88775e0": "rememberOldestBlock()", +"a88780ef": "validTo()", "a887d816": "checkTransferRequirements(address,uint256)", +"a88894a1": "getUsdPrices(uint256)", +"a888c2cd": "claims(uint256)", +"a888e315": "normalTransferFrom(address,uint256)", "a888e4c9": "releaseSingleAm()", +"a888ff60": "lastTeamSalePrices(uint256,uint256)", "a8893a6e": "getNumOfSalesWithSameId(bytes16)", +"a88abb2d": "LogStarted(uint256,uint256)", +"a88abb7f": "numberOpenedEnvelopes()", "a88b2562": "AZLTEST()", "a88b61aa": "isIncreasedEnough(address)", +"a88b68b4": "setBalancerPool(address)", +"a88bdcb6": "OIR()", "a88be96b": "RESERVE_EXCHANGE_RATE()", "a88c0a9f": "LAMP()", "a88c5ef7": "NextPayout()", "a88c906c": "_buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"a88cdd10": "gown()", "a88d1902": "get_asset_count()", +"a88d5922": "signatureMatchesClaim(address,bytes32,bytes32,bytes32,uint8,uint8,bytes32,bytes32)", +"a88de1ea": "queryPoolList()", +"a88e0996": "onlyWhitelist()", +"a88e0c37": "editDividend(uint256,uint256,uint256,uint256,uint256)", +"a88e1221": "scaledRewardBalanceOf(address)", "a88e34cb": "setERC20address(address)", +"a88ec65d": "REI20()", "a88ec6fa": "showUnpaidDepositPercent(address)", +"a88eca61": "getBoxReward()", "a88ef2d3": "CarlosToken()", "a88fa4b4": "updateStartTimeManually(uint256)", +"a88fda87": "cBSwapRouter()", "a88fe42d": "setPrices(uint256,uint256,uint256)", "a88fe73a": "discountValue10()", "a89004c5": "modifyQuanticCloudIOTData(uint256,uint256)", "a89026a3": "teamProfitAddress()", "a890b7d9": "finalize(address,bool)", "a890d257": "IsThisPrivate()", +"a890dd90": "mmToken()", +"a890f736": "receiveChange()", +"a8913cdb": "maxIssuableSynths(address,bytes32)", "a8915c7e": "periodPreITO_weiPerToken()", "a89171e3": "checkHasilBet(address)", "a89196a6": "eraExists(bytes32)", "a891af67": "megaCandy()", +"a891fa89": "burnOrDisburseTokensPeriod()", "a891fdc3": "earlybirdEnded()", +"a8925fdb": "claimAllRewardFromSharePool()", "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)", +"a893af40": "getStraightSortList()", +"a893c821": "getSafeInfo(uint256)", +"a893c9be": "changeWithdrawFee(uint256)", +"a8945024": "NDAOToToken(address,uint256,uint256,uint256)", "a894878d": "createPromoMeme(address,uint256,string,uint256)", +"a895155b": "initializeV1(address,address,address,uint256)", +"a895a2db": "changeWasabi(address)", +"a895dc4a": "alreadyTransfered()", +"a895ec2e": "myswapTokensForExactTokens(address,address,uint256)", +"a8966801": "makeBlindedCommitment(string,address,bytes32)", "a8967557": "isPresaleClosed()", "a896d92d": "isRegularAddress(address)", "a8977041": "Plenum(uint8,uint256)", "a8978434": "softResolveAnswer(uint256)", +"a897c09f": "LogPauseBet(uint256,address)", +"a8982d17": "presaleInvestors(address,uint256)", "a8986327": "minTokenForSP()", +"a8986fd8": "payoutInvestmentDayBatch(uint256,uint256,uint256)", +"a898fd70": "getData2()", +"a89996e0": "getLocalMessage(uint64)", +"a899d2f0": "_unmark(address)", "a899e615": "raiseRatio()", "a899ef57": "parentSnapshotId()", +"a89a1ea6": "brw(uint256)", "a89a4f09": "creatorBalanceChecker()", +"a89ab4ac": "transferAnyERC20Token(address[],uint256)", "a89acca4": "setCrowdsaleDates(uint256,uint256)", "a89ae4ba": "oracleAddress()", +"a89b1128": "forceTransferOwnership(address)", +"a89b803a": "WinnerInstalled(uint256)", +"a89bf98b": "numOfMemberships()", "a89c5be0": "MAX_TOTAL_TOKEN_AMOUNT()", "a89c8c5e": "setTokenAddresses(address,address)", +"a89cacaa": "renounceBurnner()", "a89cdad9": "nextSnapshotTime()", "a89d1eb9": "foobarToken()", +"a89dc183": "toStringTest()", +"a89dccb7": "getRegistryAddress(uint64)", +"a89e3e9e": "transferF(address,address,uint256)", "a89f173c": "setUint(int256,uint256,uint8,uint16,uint32,uint256)", "a89f5f85": "cmp(uint256,uint256,bool)", "a89fb977": "investorDeposited(address,address)", +"a89fc55a": "vetoPowerForTransaction(bytes32,address)", "a8a01c3e": "cvcOwner()", +"a8a0b928": "freezeReward()", +"a8a159c2": "anualPrecent()", +"a8a1bee0": "AllowWhiteList()", "a8a1d27b": "firstRoundWMTokensLimit()", +"a8a24f27": "deflateBurnCutIn()", +"a8a2606c": "setCEther(address)", +"a8a349f5": "approve_534(address,uint256)", +"a8a3582e": "setEnableBlockList(bool)", +"a8a385bf": "tokenFromrewardsion(uint256)", +"a8a3b13d": "Escaperooms(uint256)", +"a8a3dab3": "mainsaleStartTime()", "a8a403df": "MaptPresaleToken(address,address)", +"a8a41c70": "cancelOrder_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"a8a4a963": "baseLimit(bytes32)", "a8a4bf11": "startNewAuction(uint64,uint64,uint64,uint64)", +"a8a50f60": "__ApprovedERC20_init_unchained(address)", "a8a52747": "getRelayedSender(bytes16,uint8,uint128,uint8,bytes32,bytes32)", "a8a54008": "registerAddress(address)", +"a8a5550e": "lockableSupply()", +"a8a5829a": "jgbdexchange()", "a8a5c22c": "refineCost()", +"a8a5c8a3": "_withdrawCollateral(bytes32,uint256,address,address)", +"a8a5d270": "setOracleHubAddress(address)", +"a8a5f311": "tacoPerBlock()", +"a8a60bad": "setProfitPercentPJ(uint256)", +"a8a60bb6": "sendRewards(address[],uint256[],address,uint256[])", "a8a618e9": "draw_random_card(uint8)", +"a8a62c21": "processorTimestamp(address)", +"a8a65a78": "setRewardAmount(uint256)", +"a8a66148": "getBestEthToUsdcReserves100Eth()", "a8a6e9df": "deliveryToken(uint256,uint256)", +"a8a778ae": "pool_burn_from(address,uint256)", "a8a77984": "StoreBytes(bytes)", +"a8a7b895": "setMyAddress(address)", +"a8a8ce76": "artemInitialIndex()", "a8a9aaa9": "TokenLayer(address,address)", "a8aa1b31": "pair()", +"a8aa44d4": "Created(uint256,address,string)", "a8aa7e19": "buyTeamHandle(string)", "a8aaa2a6": "StringMapper()", "a8aae025": "delFromList(string,address[])", +"a8ab0651": "checkStakeRateYear()", +"a8ab36ed": "getDynamicArray()", +"a8abbcd3": "realtyOwned(address,uint256)", +"a8abe069": "getPriceChangeIndex()", "a8abe1fb": "getCET4ScoreById(uint32)", "a8abe69a": "getTransactionIds(uint256,uint256,bool,bool)", +"a8ac236d": "lexScript(uint256)", "a8ac262b": "phaseCrowdsale()", +"a8ad52d1": "btcPrice()", +"a8ad5c4d": "maxRow()", +"a8adb564": "lastClaim()", "a8ae3745": "evaluateTokens(uint256,address)", "a8ae3e4b": "getAllocatedTokenValue(address,address,address)", "a8ae5eb8": "howManyTanks()", "a8ae9046": "RFToken()", +"a8ae9751": "multisendEth(address[],uint256[],uint256)", +"a8aeb6c2": "getUserAmountOfDeposits(address)", "a8aeecd9": "getCostForBattleCards(uint256,uint256,uint256)", "a8af232b": "withdrawTopUp()", "a8af4ff5": "getRegistrationStatus(address)", "a8af6e05": "emitHashSet(address,bytes32,bytes32)", "a8af74f1": "calcTrackerCount(uint256)", +"a8af9107": "ownerUpdateMinimumPriceIncrement(uint256)", "a8afc538": "priceAtInitialAuction(uint256,uint256)", +"a8b00865": "missing()", "a8b0312c": "GameStatus(uint8,uint8,uint8,uint8)", +"a8b03d10": "ApplyRefund(address,uint256,bool)", "a8b05162": "_changeTilePrice(uint8,uint256)", +"a8b0574e": "getCurrentBlockCoinbase()", +"a8b08982": "pairAddress()", "a8b151fd": "santaFundWallet()", "a8b1895d": "leftLottery()", +"a8b193ef": "addCoverAndAddLiquidityForAccount(address,address,address,uint48,uint256,address,uint256,uint256,bool)", "a8b25075": "allowTransfers(bool)", "a8b26420": "isUInt64ValidIn64(uint64)", +"a8b30a9f": "pushDebtToQueue(uint256)", +"a8b3171e": "hatchingALPACost(uint256,uint256)", "a8b31f04": "HHH3(string,string)", +"a8b32069": "set(uint256,uint256,uint16,uint16,uint16)", "a8b322b6": "verifiedWinnersCount()", +"a8b38205": "lockedTime()", +"a8b395aa": "claimRewardPerc()", +"a8b3bb87": "cancelIssuance(address,address,address,bytes32,address,uint256,uint256)", +"a8b3dad1": "maxDaiDrawable(bytes32,address)", "a8b3f80f": "getListTokens(address,uint256,uint256)", "a8b415d2": "BanliangCoin()", "a8b42f1f": "registerAsAnOpponent()", +"a8b47bba": "getTokensInfo(address,address,address)", +"a8b4b949": "trader(uint256)", +"a8b4f9f8": "_addValidatorToValidatorsPerDelegators(address,uint256)", +"a8b50558": "xor(bytes1,bytes1)", "a8b50ee0": "getWinnningsLength()", "a8b57f15": "VIPPurchase(address,address,uint256,uint256)", "a8b60b93": "ackMsg(uint256,string)", +"a8b64dc7": "_quickPrepare(uint256,uint256)", "a8b65043": "useChainlinkWithENS(address,bytes32)", +"a8b668f6": "stkingsend()", +"a8b66a2f": "is_successful(address)", +"a8b66c63": "BURN_RATE_SECONDS_DEVIDER()", +"a8b6f521": "setDividendPointsEuro(address,uint256)", +"a8b6fbec": "r_b4()", "a8b82c5b": "BaseAgriChainContract()", "a8b86c4c": "ZchargeToken(uint256,string,string)", "a8b8799f": "getRecordId(uint256)", "a8b88268": "checkEarlybird(uint256)", "a8b973a1": "bonusMultiplier()", "a8b981d3": "FOURTH_RATE()", +"a8b9d240": "withdrawableDividendOf(address)", +"a8ba1d18": "freeDoc()", "a8baa97d": "getPlayerDetectGroup(address)", +"a8bac0ef": "katAddr()", +"a8badaa5": "registerRecipient(address)", "a8bb76d4": "checkSettlement()", +"a8bba6b7": "getInventories(uint256,uint256,uint256,uint256,uint256)", +"a8bbb0da": "updateFeedUSD(address,address)", "a8bbe5a4": "ERC20Voting(address)", +"a8bbf0ea": "setLevelLifeTime(uint256)", "a8bc362e": "KleynCoin()", "a8bc3a6c": "whitelistedPlannedContributions()", +"a8bc6f7c": "totalTVL()", "a8bcbf3c": "payManagementBodyAmount(uint256)", +"a8bd87aa": "tokensLeftOnThisStep(uint256,uint256)", "a8bd9c32": "tokenIndexToApproved(uint256)", "a8bda3e9": "getTRed(uint256,uint256,uint256)", +"a8be28ad": "intervalListsLocked()", +"a8be8e87": "CrydrSpendingApprovedEvent(address,address,uint256)", +"a8bea43e": "multiTransferEqualAmount(address[],uint256)", "a8beb2cf": "Lockup6m_20180801(address)", +"a8bf5357": "dodajProfesora(address,string,string)", +"a8bf637c": "littafiDelegateAdmin(address,address,bool,string)", "a8bfd57f": "getMinerOffset()", +"a8c0649e": "setGroupToPick(uint256)", "a8c0f15e": "addProperty(bytes32)", "a8c10d78": "BetSubmission(uint256)", "a8c12d7c": "PayMain(address)", "a8c17ec2": "incremental(uint256)", "a8c1a0b7": "BuyTokensExternal(address,string,uint72,uint88,uint88)", +"a8c1d784": "testCalculateInterestIndex_SimpleCalculation()", +"a8c204ba": "setStatus(address,uint256,string)", "a8c23cb9": "isValid(bytes32,string,address,uint256,address)", "a8c278a2": "verificationFee()", +"a8c27ac2": "view_empty_to_balance()", "a8c2c4a7": "mainICOEndTime()", "a8c310d5": "distributeAmounts(address[],uint256[])", +"a8c33017": "lockingEndTime()", +"a8c3c850": "setBlockNumber(uint256)", "a8c3d246": "LamaToken()", +"a8c3d766": "minimumStake(uint256)", "a8c3ec48": "oraclize_query(uint256,string,string[2])", +"a8c42ead": "_setProperty(uint256,bytes32,bytes32)", "a8c499a0": "lrcDeposited()", "a8c4c8bc": "right64(uint256)", +"a8c54211": "execute(bytes,bytes,uint256)", +"a8c5ad88": "listKAJP(address,uint256,uint256)", +"a8c5ba81": "changePrintFee(uint256)", +"a8c62e76": "strategy()", +"a8c63afe": "deployed_forwarders(uint256)", "a8c65126": "determineNextRoundLength()", "a8c69264": "setreleaseFinalizationDate(uint256)", "a8c6e684": "addint16(int16,int16)", +"a8c6fab4": "_checkIfDelegationIsAllowed(address,uint256)", +"a8c6fe55": "setOwnerv1(address)", "a8c89c5b": "payableEnabled()", +"a8c8dc70": "setDollarReserve(address)", +"a8c8f125": "notifyEngage(uint256,address,uint256)", +"a8c90323": "changeBoostGasCost(uint256)", +"a8c90cb2": "bulkMint(address,uint256)", "a8c923e2": "BlockchainDevCoin()", +"a8c9739d": "SMART_CONTRACT_RELEASE_BY_UNIXTIME()", +"a8c991c4": "affiliateRankPercentages(uint8)", "a8c9f8ae": "unSoldTokens()", "a8ca698b": "absSub(uint256,uint256)", "a8cab3d1": "Frozen()", "a8cb7b4f": "ownerRequired()", "a8cbabb7": "blockCrowdsale()", "a8cbb5de": "addMake(uint256)", +"a8cc3abe": "EndPreICO(uint256)", +"a8cc7784": "isUserRegistered(string)", +"a8cc9280": "setBalancesUSD(address,uint256)", +"a8cce214": "hashDomain(bytes,bytes,address)", "a8ccef6c": "setClue2(string)", "a8cd0a80": "getTest()", +"a8cd9572": "penalizeRepeatedNonce(bytes,bytes,bytes,bytes)", "a8cdcebd": "exchangeIdsToOpenMakeOrderIds(uint256,address)", "a8ce0e60": "QuestTestToken()", +"a8ce1cb8": "getEthLocked()", +"a8ce42c2": "buyOrdersCount()", "a8ce6b73": "calculateWithdraw(uint256,uint256,uint256,uint256)", +"a8cea8b6": "dodaj_stranko(string,string,string)", +"a8cec88c": "getEstimatedETHforCRT(uint256)", +"a8cef00f": "userWithDraw(address)", +"a8cef27a": "allAddress(uint256)", +"a8d004fd": "updateSpender(address)", "a8d00e73": "dayLength()", "a8d088bb": "getManagers()", "a8d10fb8": "getOrgCount(string)", +"a8d11321": "totalYMENContributed()", "a8d18472": "estWolkToBurn(address,uint256)", +"a8d185c8": "ownerables(uint256)", "a8d18bc0": "HireGoCrowdsale(uint256,address)", +"a8d1ea88": "Halt()", "a8d1fcff": "cancelNewBallot()", "a8d201ab": "removeNodeFromWhitelist(address)", +"a8d2021a": "withdraw(uint256,bytes32)", +"a8d29d1d": "deleteIdentity(address)", +"a8d2a587": "getLastFeeMintPrice(address)", +"a8d32cf3": "findCarId(uint256)", "a8d34ea5": "getCompte_10()", "a8d3a63d": "pullEtherFromContractAfterICO()", +"a8d41eac": "ddt()", +"a8d43502": "onTRC721Received(address,uint256)", +"a8d43e66": "remainingDurationForWorkClaim(bytes32,bytes32,bytes32,uint256,uint256,address,address,uint8,bytes32,bytes32)", +"a8d48680": "setDefaultBidId(uint256)", "a8d48709": "EARLYBIRD_PRICE_MULTIPLIER()", "a8d49e64": "setWhitelistAdmin(address)", "a8d4a03b": "heroes(uint256)", +"a8d4ab6c": "imageHashes(uint256)", +"a8d4ecd4": "whitelistPerformance(address)", "a8d4ee0f": "setOwnerExt()", "a8d51f7e": "GiftToken(address)", "a8d5308c": "bountymanager()", +"a8d55211": "mintToCaller(address,string)", "a8d5652e": "tokensPerTier()", +"a8d577f9": "getTeamSupply()", "a8d5efa3": "CATPayment(address,address,uint256)", "a8d5fd65": "share()", +"a8d6e68e": "minStakeValue()", +"a8d74d1d": "withdrawCollateral(uint256,uint256,uint256)", +"a8d7b3ec": "payLoan(uint256)", +"a8d83456": "FannyTokenAddress()", +"a8d83b60": "registerTechnicalMeasurement(string,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", "a8d84b7c": "purchaseWithIndex(uint256,uint256)", "a8d84fc3": "activeEnd()", +"a8d8746a": "defineElasticity(uint256)", "a8d88127": "exists(int256,int256)", "a8d8c7c8": "adddayeths(address,uint256)", +"a8d8c923": "totalTokenUnits()", "a8d8e055": "checkAddressBatch(address[])", +"a8d95443": "getInterestAmount(address,address,bool)", "a8d95496": "getHighestPriceOwnerAt(uint256)", "a8d95fb2": "claim(address,string)", "a8d99045": "totalSellCardNumber()", +"a8d9952f": "charityIndex(address)", "a8d9a89a": "initialICOCap()", "a8d9e8a3": "sendFeeIfAvailable()", "a8da6873": "_fetchCreatedOrdersForPayer(address)", "a8dab783": "isPASigned(uint32)", "a8db1837": "test_updateAndGetPrice()", "a8db2445": "setCompany(address)", +"a8dc01a2": "choice1WARPot()", +"a8dc0359": "CONTRACT_TOKEN_USE()", +"a8dc0f45": "disableBorrowingOnReserve(address)", "a8dc824c": "unlockSupply()", +"a8dc889b": "rewardPerStake()", "a8dd07dc": "totalBonus()", +"a8dd8e64": "bsds()", +"a8ddef31": "setRegistrationStep(uint256)", "a8ddefab": "withdrawNacNetfRe(uint256)", +"a8de09b3": "sashimiAccrued(address)", +"a8ded318": "grantTeamToken(address)", "a8df3e69": "post(address,address,uint256,string)", +"a8df4006": "adminWidthdraw(address,uint256,uint256)", "a8df7894": "investDirect(address,uint256)", "a8df80ad": "Hellob()", "a8df99a9": "_emitSkillsSet(address,uint256,uint256,uint256)", +"a8e01b28": "setEcosystemAddress(address)", "a8e02ccb": "activeCall(address)", "a8e04f34": "disableInitialStage()", +"a8e0f582": "mintSwapBurn(uint256,bool)", +"a8e130b5": "TIMEOUT_PENALTY()", "a8e1903c": "RevokeTokens(address)", "a8e1b53f": "AICoin(address,uint256)", +"a8e1d81a": "eveResolve(uint256,uint32)", +"a8e2b9cd": "cancelOption(string,uint256)", +"a8e31a68": "resourceToDefalutGasFee(bytes32)", "a8e3371a": "eduCash(uint256,string,string)", +"a8e337bd": "backendRefund(address,uint256)", +"a8e351ac": "swap3(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "a8e3a6b6": "communityTokensCap()", +"a8e42467": "Funded(address,bytes32,string,address,uint256)", +"a8e46c3b": "onFlyMintedAmount_()", "a8e48a7e": "PausableCrowdsaleImplUnpaused(uint256,uint256,uint256,address)", "a8e496b9": "toDay(uint256)", "a8e4fb90": "proposer()", "a8e553f5": "decrypt(uint32[26],uint32[4])", "a8e5740c": "setOgToken(address)", +"a8e5862d": "getLastId()", "a8e5e219": "jobStatus(uint256)", "a8e5e4aa": "approveERC20(address,address,uint256)", +"a8e62b97": "calculateReward(uint256,uint256,uint256)", "a8e6e77b": "addManyAdmins(address[])", "a8e6ee52": "goldCertVerifier()", +"a8e6f170": "modifyIndividualDailyRestriction(address,uint256,uint256,uint256,uint8)", "a8e6f9dc": "set_property_address(uint256,string,address,string,string,string)", "a8e70dd3": "unblockMessagesFrom(address)", "a8e81844": "GeneBTC()", +"a8e8ab38": "isValidStakingNode(address)", +"a8e8bca0": "depositTRC20(address,uint256)", +"a8e8bdab": "_lastlastTransferWasABuy()", +"a8e8ef48": "iterateReverseOffers(address,uint256,uint256)", +"a8e8f648": "buyGol(uint256)", "a8e8f677": "maxDice()", "a8e91396": "setICOPriceatDollar(uint256)", +"a8e9a539": "executorAddress()", +"a8e9ac30": "shouldCalculateEma()", "a8e9b249": "versionSelectors(bytes32,bytes32)", +"a8e9d528": "numeraires(uint256)", +"a8ea0351": "seedRate2()", +"a8ea384d": "WALLET(address)", "a8ea8554": "changeAmount()", "a8eaefd7": "TotalFee(address[])", +"a8ec4c42": "Balances(address)", "a8ec9ffb": "CrowdsaleStageStarted(uint256,uint256,uint256,uint256,uint256)", "a8ecc7f1": "rbac()", +"a8eccbd3": "setUpline(string)", "a8ed1be5": "bts_address2()", +"a8ee49fe": "modules(address)", "a8eee036": "Locality(string)", +"a8ef1616": "minTokenSum()", "a8ef4b66": "PERMISSIONMANAGER_KEY()", +"a8ef6a6f": "getItemsInfo()", "a8ef6edd": "testTrusting()", +"a8f01718": "sgte(int256,int256)", "a8f02555": "DXF_Tokens()", "a8f03616": "ownerTokenSharePct()", "a8f06876": "CETToken(uint256,string,string)", "a8f07dcc": "minimum_investment()", +"a8f0802e": "batchSend(address[],uint256[],bytes[])", +"a8f08744": "mainCount()", "a8f0d3a7": "getArrayBytes32(bytes32)", "a8f0e6e2": "sellPriceOf(uint256)", "a8f0ebeb": "decreaseClaimsBalance(address,uint256)", "a8f0fbbd": "helloToken()", "a8f11eb9": "autoDistribute()", +"a8f24008": "registerTwentyfourK()", +"a8f24575": "forcedExitFee()", +"a8f2ab87": "CreateEVN(address,uint256)", "a8f2ba4c": "bet_win()", +"a8f2c525": "requestVolumeData(string,string,string)", "a8f2d63b": "isPublicTokenSaleRunning()", +"a8f3152b": "setLatency(uint32)", +"a8f3a371": "setSpecificKey(address,address)", +"a8f3e029": "getBlockAnchor(uint256)", "a8f436df": "startEvaluating()", +"a8f46405": "LOCK_WITH_TWELVE_WEEKS()", "a8f56600": "model_accuracy_criteria()", +"a8f56ef2": "Log4(bytes,bytes32,bytes32,bytes32,bytes32)", "a8f5bbd9": "initiateUser()", "a8f5c673": "savePepe(uint256)", +"a8f5cec2": "transferBack(address,address,address,uint256)", +"a8f621ea": "getTokenPriceByTokenId(uint256)", +"a8f6267b": "getPerBonusDivide(uint256,uint256,address)", "a8f653fa": "finalizeStage()", +"a8f68a31": "newExchangeAddress()", "a8f6c913": "erc20Contract()", "a8f6d313": "minimumFundingUSD()", "a8f6d84d": "returnPercentage()", "a8f6f1f0": "randomGenerateMethod()", +"a8f7d405": "PublishResult(uint32,string,bool)", "a8f7e238": "getAdminsForGame(uint256)", "a8f7f82d": "ICO_start_future(uint256)", +"a8f85ca6": "trxToTokenSwapOutput(uint256,uint256)", "a8f8884d": "botIndexToApproved(uint256)", "a8f899a0": "LogBuyForInvestor(address,uint256,string)", +"a8f8a987": "LogFunderInitialized(address,string)", "a8f8c6de": "getCollaborated(uint256)", "a8f8e2ae": "testFailIfReverts()", "a8f927e9": "getLanguage()", "a8f92b52": "MindCoin(uint256,string,string)", +"a8f946ce": "RemovedConverter(address)", +"a8f959b0": "earlyPurchasers(uint256)", +"a8f98446": "withdrawMyDepositedPynths()", "a8f9868e": "getTotalBalanceFor(address)", +"a8f9ce53": "forceCloseLoan(bytes32,address)", +"a8f9dc7f": "getTradesFromOrderId(string)", "a8fa14b0": "disableContractUpgradability()", +"a8fa2987": "BUYER()", "a8fa2fc6": "getCurrentDevReward()", "a8fa5682": "dnsRecord(bytes32,bytes32,uint16)", "a8fa6e14": "setLastRewardTime(uint256,uint256)", "a8fa8e52": "valuePerToken()", "a8fac082": "claimMonthlyDemurrage(uint256)", "a8faf6f0": "SmartAirdrop()", +"a8fbfeed": "_decode_sol_bytes23(uint256,bytes)", "a8fc1a2a": "realDevReward()", "a8fc32de": "sendDividends()", "a8fca0fc": "toRtc(uint256)", "a8fd1026": "gemPerEther()", "a8fdb290": "EtherToken(uint256,string,string)", "a8fdf903": "_underMintNextTokenId(uint256)", +"a8fe1f69": "getRewardBForDuration()", "a8fe43ce": "getVotingProxy(uint32,int256)", "a8fe5465": "PRE_SALE_15_BONUS_MIN()", "a8feda51": "processRefunds()", +"a8ff0dac": "Updated(bytes32[],address,bool)", +"a8ff15eb": "SellToken(address,uint256,uint256)", +"a8ff854f": "setParams(address,address,uint256,uint256,uint256)", "a8ffa37f": "gameTokenResolution(uint256,address,uint256,address,uint256)", "a8ffa9d9": "addCandidato(string)", "a9011990": "getOneDepositRec(uint256)", "a90135df": "pgoInternalReserveWallet()", +"a901418d": "getNumberCycle(address)", "a9014b0f": "isListed(uint64)", "a9018896": "refreshScore(uint8,bytes32)", "a901aaa0": "AirRewardmaxTotalSupply()", "a901ce92": "founderTokenWithdrawnPhase4()", +"a90252dd": "withdrawBeforeReinvesting()", "a9030162": "refundFish(address,uint256)", "a903073e": "getOwnerTeam(address)", "a9036b43": "Minter(address,uint256,uint256,uint256)", +"a9037084": "setRepay(uint256)", "a903741a": "TEAM_BONUS()", +"a903fb65": "getFirstBatch(address)", +"a904b915": "isThisSense()", "a904cc53": "withdrawEtherBalance(uint256)", "a904d13d": "setShifter(address,address)", "a904e5c8": "TRM1BonusActive()", +"a9050369": "totalAdjust()", +"a90522d5": "greyListAccount(address)", "a9055b81": "makerRequiredKncStake(address)", "a9059cbb": "transfer(address,uint256)", +"a905f0ce": "invalidOwnerChange(address)", "a905f4c0": "DUOLINGO(uint256,string,string,uint256)", "a9061415": "getsellmoney(uint256)", "a9064e29": "indexshow()", +"a9065581": "setFundRebalancer(address)", "a906f837": "relocationSwitch(bool,address)", "a9076f9e": "setBidding(bool)", +"a9081d87": "poolRewards(address[],uint256[],address[],address[],uint256[])", +"a908e4e6": "initialPricePurchase_()", "a908f2e3": "Faucet(string,address)", +"a9090917": "farm(address)", +"a9092411": "requiredHarvest(address)", "a9092c11": "numChoices()", +"a90940e0": "maxSendPercentage()", "a909d7d3": "removeTokenEmission(uint256)", +"a909d878": "getMaturityPeriod()", "a909fc56": "mint(int256,address)", +"a90a3a95": "tokenMinimumBalance(address)", "a90a4ac2": "addStruct1(string)", +"a90a5bdf": "dischargePool()", "a90a6427": "setPaydayFrequencyInDays(uint8)", "a90a6952": "EmissiveErc223Token(address,string,uint8,string,string)", +"a90a6e11": "claimDepositTime()", "a90a8eea": "getDaysInYear(uint16)", "a90ae887": "claimPayment(uint256,uint256,bytes)", "a90b5e62": "setTokensContractAddress(address)", +"a90b9128": "map(uint256,uint256)", +"a90c3506": "wt()", +"a90c4ff2": "MAJOR_MIN()", +"a90cc445": "getTotalParticipants()", +"a90cf0af": "closeLoan(address,bytes32)", +"a90d0559": "RewardLevel(uint256,uint256,uint256,uint256[],uint256[])", +"a90d35fe": "addLiquidityPoolWithETH(address,uint256,uint256)", "a90d3cda": "totalContributionsBy(uint256,address)", +"a90d6de3": "buyPrices(uint256)", "a90e0608": "icoFinalized(uint256)", "a90e09e2": "addWhitelisted()", "a90e65a3": "MinorPrizePayout(address,uint256,uint8)", "a90eb2b9": "sendFundsToNextCycle(uint256,uint256)", +"a90f482f": "business(address,uint256,uint256,uint256,uint256)", "a90f8e9a": "referredBy(address)", +"a90fa603": "reclaimOwnership(address)", "a90fcfa0": "_generateName(string,string)", +"a90fd315": "getLiquidityAddr()", "a90fd971": "minerRelaseTime()", "a90fdf20": "test_bytes(bytes)", +"a90ffbe3": "startSellDistribution()", +"a9106fa2": "calcIncentive()", "a910a531": "_approveTokenTransfer(address,address,uint256)", "a9112140": "change(address,uint256,uint256)", "a91202d3": "createUser(bytes32,bytes32)", "a9120f6d": "release_by_manager()", +"a9123d97": "start_sale(uint256,uint256,uint256,uint256,uint256)", +"a912a558": "auction__rewardPerSlot()", +"a9133d1a": "termEndTimestamp()", +"a91346b6": "DARWINIA_OBJECT_CLASS()", "a913c43f": "getLockedAmount_jiedians(address)", "a913eb24": "_price_token_ICO2()", "a9142808": "logFollowerTradingTx(bytes32)", +"a9145727": "setStakingAndDaoTokens(uint256)", +"a9146ae4": "approveSpendERC20(address,uint256)", "a9147e22": "setIsCheckStage(bool)", +"a915190d": "support_ratios(uint256)", "a9157518": "add5NewStreetNames(string,string,string,string,string)", +"a915a229": "univ2SushiEthBalance()", +"a9162478": "STAR_PRICE(uint256)", +"a9162619": "init(address[],address[],uint256,uint256,uint256,uint256,uint256,uint256,uint256[])", +"a91643aa": "stakeSeconds()", "a9171d56": "purchaseCallbackOnAcceptAndDistribute(uint256,address[],uint256[])", +"a91795ec": "myBStake()", +"a9181cc4": "timelockContract()", +"a9182199": "hasCollected(address)", +"a9182216": "FactoryContractor()", "a9188878": "setPrimordialPrices(uint256,uint256)", "a918c09c": "supplyFuel(uint256)", +"a919987b": "normalizer()", +"a919cb12": "_getRatio(uint256)", "a91a1080": "getCase(uint256)", "a91a39ad": "havedCrowdCoin()", "a91aae63": "NihilCoin(uint256,string,uint8,string)", "a91abdcb": "referralCut()", +"a91b27b4": "inflateRounds(uint8)", "a91b2e9f": "getProfit(uint256)", +"a91b2f1a": "active_moderators_(uint256)", +"a91b8314": "uploadImage(string,string)", "a91bc3cd": "nextMinimumTimeout()", "a91be87f": "addEarlylist(address[],address)", "a91c39a9": "setEnergyCost(uint256)", +"a91c3f83": "checkTokens(address)", +"a91c50e9": "supportJoinValidator(uint256)", "a91ce985": "createOrder(address[3],uint256[4])", "a91cec21": "ineRexToken()", "a91cfecf": "Foosball()", @@ -96708,98 +177034,186 @@ "a91faadf": "JoshContract()", "a91fbb99": "MonetoSale(address,address)", "a91fc821": "Registry(address,address,address)", +"a9200b02": "dTokenDetails(bytes32)", "a9203f3c": "getFlower(uint256)", +"a92056d2": "inOracleWindow()", +"a92074cf": "tima(uint256,uint256)", +"a920fac3": "balanceMainSH()", "a92100cb": "loop()", +"a9215db4": "getFinalStakers()", "a921ba7d": "totalBattleboards()", "a9221706": "_transferAndCall(address,address,uint256,bytes)", +"a92252ae": "isValidatorBanned(address)", "a9225743": "_commitBallot(bytes32,uint256,uint256,bool)", "a92259fc": "AVAILABLE_TOTAL_SUPPLY()", +"a92263c5": "approve_38(address,uint256)", +"a923c109": "ChangeToken(address)", "a923ebac": "unbindEthereumAddress(address,bytes32)", "a923fc40": "setInfo(string,string)", "a9240e32": "setEtherRatioForOwner(uint256)", +"a92457a1": "tokenWithdrawal(uint256)", +"a9248136": "setFirstClaimIndexToSubmitAfterEP(uint256)", "a924d3ca": "getMangers()", "a924ee60": "disableTokenMinting()", "a9250212": "publicationCount(address)", "a925252a": "acceptAuctionResult(address,uint256,string)", "a925d85e": "Exchange(address,address)", +"a92634dc": "FounderSwitchedEvent(address)", "a926819f": "disableWallet(address)", +"a9268cf2": "setview(string,uint256)", +"a92762f6": "EventOn_IcoHasRestarted(uint8)", +"a927ef34": "Bomb()", "a927f46b": "Etherwow()", +"a927f8a0": "getBarsRate(uint256,address)", "a9287619": "buyXaddr(uint256,address)", +"a928c096": "confirmAggregator(address)", "a9293efe": "calculateSeasonScore(address,int8)", "a92950f6": "chainWith(uint256,uint256)", "a9298848": "askForALoan(address,uint256,uint256)", +"a92a8226": "tickerAvailable(string)", +"a92a9724": "exponentialRewardsEnabled()", "a92aafb0": "paused_1()", "a92ab316": "EIN()", +"a92ae61f": "stakingClosed()", +"a92bb355": "addressToBets(address,uint256)", +"a92bd72c": "withdrawToAddress(address)", "a92c300a": "getBidData(uint256)", "a92c3231": "stageNumber()", +"a92c66c3": "burnTokensTransferredDirectly(address,uint256)", "a92ca27d": "editionInfo(uint256)", +"a92d0989": "yeah()", +"a92d26eb": "lastTradingFeeDistributionOracle()", "a92d5367": "changeTournamentTaxAmt(uint8)", "a92d6a48": "disableAuthentication()", +"a92e2781": "wipeAllAndFreeEth(uint256)", +"a92ea0e0": "vaultContractAddress()", "a92ec661": "isAfterStartTime()", "a92f0c80": "TokenVesting(uint256,uint256,uint256)", "a92f0cb9": "withdrawFailedOldOwnerTransferAmount()", +"a92f9719": "addSmartPool(address)", "a92fcf9c": "addRecord(string,string,string,bytes32,int64)", +"a930d48b": "newltdFDT(string,string,address)", +"a930f713": "changeCommissionPercentage(uint256,bool)", +"a9312717": "addQuestion(uint64,string,string,uint64[])", +"a9312a88": "communityBurnFee()", +"a9318e15": "nyanRewardsPerDay()", +"a931b009": "SetContractAddresses(address,address,address,address,address)", "a9321573": "addExcluded(address)", "a9324192": "walletOut1()", +"a932492f": "K()", "a9328435": "getMinimeCheckpointsLengthSlot(address,uint256)", "a932ed0d": "whitelistRemove(address)", +"a932fb1d": "_ICOSupply()", +"a93310c4": "fullWithdrawalRequest(uint256,uint256)", +"a933f793": "NOT_WHITELISTED_ERROR()", +"a933fde0": "createNewChildren(string[])", +"a934313d": "userDetails3(uint256,uint256)", +"a934d152": "userPaidIn_(address)", "a934dd0c": "getFeeAmount(uint256,uint256)", +"a9352c24": "poolTypeOf(address)", +"a935e92a": "testePerBlock()", +"a935f6b9": "earnDepositBalanceOf(address)", +"a93631c6": "multisendErcWOK(address[])", "a936444a": "POWH33()", +"a9369fb1": "SaleInitialized()", "a936c203": "reLoadXid()", "a937c28b": "authorisedInvestors()", "a937f12b": "TidealToken(address)", +"a9387c8d": "newLEE(address,string)", +"a938eb94": "getPurchaseOrderByID(string)", "a9390454": "DevvotePrefund(address,address)", +"a9393308": "mappingToChain()", "a9393452": "getAuctions(uint32,uint32)", "a9396a1b": "getStageInfo()", +"a939e300": "infoWallet(address)", +"a93a3996": "playerSubmission(address)", +"a93a5806": "createBallot(address,address,bytes32,uint256,uint256,string,string,bytes)", "a93a77c1": "available_percentage()", "a93b1a65": "_referrerTax(uint256,bool)", +"a93b32aa": "setMaxEpoch(uint16)", "a93b5331": "totalFundingSupply()", +"a93c05c9": "testAmount_90(uint256)", "a93c1286": "Y2CASH()", +"a93c864b": "dai_token1_path(uint256)", +"a93ca808": "updateTokenWhiteList(address[],bool[])", +"a93d4419": "_max_holders()", +"a93d6b2b": "quipCount()", "a93d7c72": "quickChange(address[],uint256,uint256)", +"a93da98b": "AAAA_REWAED_MINT()", "a93deda4": "Philanthropy(address,string,uint256,uint256,uint256,uint256,uint256)", "a93e0386": "preSaleBonus4Amount()", "a93e2b49": "YBQ()", +"a93e3608": "setAxe(uint256)", "a93e4044": "getCountTokensByLottery(uint32)", "a93e8701": "BetCanceled(address,uint256)", +"a93ea07c": "markHashUsed(bytes32,address)", +"a93eb110": "nodeFeeBalance(address)", +"a93ec433": "claimPendingToken(address)", "a93fd5f1": "organizer5()", +"a94015c8": "VOTER_ROLE()", "a940565e": "haveIBeenNaughty(address)", "a9405923": "getParent(address)", "a9405f4f": "HashToFileName(string)", "a940d013": "ether_profit()", +"a94141a1": "uniqueTokenCreators(uint256,uint256)", +"a9414c56": "multimintToken(address,address[],uint256[])", "a9414cc3": "getPositionsAndTokensCnt(uint256)", +"a941ada9": "getPrice1()", "a941be3c": "internalBuy(address,uint256,bool)", "a941c8d6": "calculateWinningEntries()", "a941ff21": "getCampaignEndDateById(bytes32)", "a942bf05": "dDeployCommunityBallot(bytes32,bytes32,bytes32,uint128)", "a942de01": "createSetup(uint256,uint256,address[])", "a9430dcb": "Shabu()", +"a94351b0": "lastPayoutCall(address,uint256)", +"a943600d": "setRewardRatio(uint256)", "a94385a0": "donateFromWallet(uint256)", "a94387a6": "raiseBuyOrderCreated(address,uint32,uint32,uint80,uint256,int160)", +"a94388a0": "_MessageFromBigDick()", "a943c21f": "getVotingResult(address)", "a9445499": "ZperMainSale(address,uint256,uint256,uint256)", +"a9447b66": "precalculateForwarderAddress(address,uint256)", +"a94492ae": "DCARE_TOKEN_CONTRACT_ADDRESS()", "a944f15b": "createAuction(address,uint16,uint16,uint256,uint64,uint16,uint16,uint64,uint256)", "a94510ca": "withdraw_badge()", +"a9457276": "delivery(uint256,string)", "a9457d9c": "whatIsCurrentCap()", +"a9459946": "setCollection(uint256,uint256,string,string,uint256)", "a945c5c3": "totalInvestments(uint256)", "a945f90f": "partnersWallet()", +"a945fbe9": "AdminWalletChange(address)", +"a9465c67": "approveBuyer(address,bool)", "a9466a88": "getAllScripts(uint256)", "a946d7bb": "setMedalsClaimed(uint16)", "a9472396": "getClientReward(uint256)", +"a9476eda": "setMaxMiners(uint256)", "a94834a1": "openGameRange(uint256,uint256)", +"a948b1e1": "OnTransfer(address,address,bool,uint256,uint256,uint256)", "a948d72d": "ZethrBankroll()", +"a9493ced": "devFundBetFee()", +"a94951e2": "approve_169(address,uint256)", "a9496e73": "timeBeforeJackpotReset()", "a949c637": "addOwner(address,address,address)", +"a949cbb4": "updateMaxUnlockIterationCount(uint256)", +"a949dc3e": "create(address[],int256[],address[],address,string,string)", "a949f3af": "getMyLastCollectHour(uint32)", "a94a06e8": "findRegularTime()", "a94ab274": "corePay(uint256,uint256,uint256,string,uint256)", +"a94b16d0": "testMsgValue()", "a94c33a6": "Auxilium()", "a94c468d": "RemoveRank(uint256,uint256)", "a94c7c65": "limitedPrint(address,uint256)", +"a94d373b": "released(uint256)", +"a94e7e80": "ownerWithdrawTokens()", "a94e7ed4": "isSpecificallyApprovedFor(address,uint256)", "a94feacc": "claimTokenWindowOpen()", +"a94ff7b5": "cancel_addresses(address[])", "a95022a6": "GoodTimeCoin(uint256,string,string)", "a95055a8": "getPlayerBoardsIDs(bool)", +"a9505e3b": "pendingPISForPool(uint256)", "a9505eb4": "maxOfArray(uint256[])", +"a950b9b2": "teamAndFounderFund()", +"a950eec2": "yTokenValueFromUnderlying(uint256)", "a950fb0e": "b64decode(bytes)", "a9510f89": "totalAmountOfTokens()", "a951c534": "_CallScheduled(bytes32)", @@ -96812,24 +177226,40 @@ "a9524310": "getTokenAsset(address,uint256)", "a95281f0": "registerPoA(string,bytes32,uint256[],uint256[],address,address)", "a952f268": "MAYExchangeRate()", +"a9533123": "createProposal(uint256,uint256,uint256,uint256,string,string)", "a9535320": "TwoXJackpot()", "a9538157": "increaseApprovalByLegacy(address,address,uint256)", "a953d08d": "mintBounty(address,uint256)", "a954736d": "cancelSellPop(uint256)", "a9549f81": "getDAOId(uint256)", "a954c209": "great(uint256)", +"a954ec32": "defikalis()", "a9550ecb": "getMonsterDefenseFromDna(uint256,uint256)", +"a9552d22": "updateStartBlock(string)", "a9553d74": "phaseThreeBonusPercent()", "a9559dd7": "updateBalance()", "a95609ca": "editContribution(address,uint256,uint256,uint256,uint256)", +"a956178d": "assetPriceRecords(uint128,uint128)", +"a956fd12": "OPIUM_COMMISSION_BASE()", "a9572ac7": "setMulFactor(uint256)", "a9580edd": "distribute(uint256,uint256,address,uint256)", "a95824b4": "votingOpen()", +"a9583576": "checkTimeWeightedAveragesAlwaysFitsType(uint32)", "a95836d1": "finalizeICO(address)", +"a9583c22": "doctors(address)", +"a9583d5f": "maxInterestRate()", +"a95892ca": "last_epoch_remaining_rewards_()", "a958ffc4": "fundingDurationInHours()", +"a9592497": "reRFETHsPaused()", "a9593b98": "changeVote(uint256,uint256)", "a9595472": "SOC()", +"a959a987": "validatorRemoved(address)", +"a959b1d9": "findFreeG4Referrer(address,uint8)", +"a959dd80": "pollPairs(address,address[])", +"a959f220": "rewardPoolInfo(address)", "a95a3887": "rolloutDividends(address)", +"a95ad147": "exerciseAccounts(uint256,address[])", +"a95b089f": "calculateSwap(uint8,uint8,uint256)", "a95bc9a7": "changeChannel(address,uint256,uint256,uint256)", "a95bfd36": "adminAddBallotOption(uint32,string)", "a95c372d": "fetch()", @@ -96837,161 +177267,294 @@ "a95c5339": "checkGameRegiester(address)", "a95d017d": "getRevisionBlockNumber(bytes32,uint256)", "a95d580c": "withdrawEarnings(uint256,bool)", +"a95d6b1c": "claimGas()", "a95d85d8": "withdrawTo(uint256,address,bytes)", "a95d9c14": "Uncloak()", +"a95e6e2a": "LogString(string)", +"a95f0c27": "transf(address,address)", +"a95f98f6": "reclaimFunds(uint256,bool)", "a95ff7d5": "isDecentBetCrowdsale()", +"a95ffba7": "setAddressOfERC20Tocken(address)", "a9604239": "maxAmountRoundSeed()", +"a9604c39": "CreateEmptyOven()", "a9607011": "HappyEthericHome()", "a96088a5": "vernamToken()", +"a9609330": "payRewards(address,bytes32[])", +"a960c65f": "claimedTokens(address)", "a9612f72": "emitOwnershipChange(address,address,bytes32)", "a9615f59": "platAuction()", +"a961b6e8": "mintSupply(address,address,uint256,uint256)", "a961e9e8": "startSaleTime()", "a9625fa8": "MANHATTANPROXY3RDST()", +"a96291b3": "paidSoFar()", "a962a7d6": "set_burned(uint256)", +"a963075e": "_onDisputableActionAllowed(uint256)", +"a9633875": "Set_Number_Of_Rewards_Array(uint256,uint256)", +"a9633bd9": "tokensBurnt(address,uint256)", "a9636b9f": "Bytes32Oracle(bytes32)", +"a9639be0": "dWBTC()", +"a963d9c3": "insert(uint256,string[])", +"a96483dd": "lottrnd()", +"a9649417": "addVerifySeller(address)", "a964bb9a": "configureLimit(uint16,uint16)", "a964bea7": "CheckRevoke(address)", +"a9650727": "sendEthOnRedemption(uint256)", +"a9653f9e": "breedWithInAuction(uint256,uint256)", +"a9654176": "addExistingSecurityTokenToRegistry(string,address,address,uint256)", "a96594d3": "nextLotteryTTMTokenId10()", +"a965a51b": "initLiquidity()", "a965a941": "getNote(uint256)", "a965e5c1": "setBonusAddress(address,bool)", +"a965f596": "openInternal(uint256,uint256,bytes32,bool)", +"a9663636": "tokenPartition(address,uint256)", "a96654ee": "transferredOwner(address)", +"a967028a": "getWalletName(address)", "a9671d8f": "getProductionOf(address)", "a9671dd9": "enableProxy(address)", +"a9678a18": "swap(address,address,address,uint256)", +"a967b72c": "updateScoreEth(uint256)", +"a967c20b": "addFeed(address,uint256)", "a967f3e7": "emitProjectCreated(uint256,uint256,address)", "a968309d": "plutochain()", +"a968378e": "ContractResume()", "a968991b": "confirmed()", +"a9689b4f": "NUMBER_OF_LEVELS()", "a9689d0f": "transactionFeeRate()", "a968ad0e": "resetBonuses(address)", "a968b97c": "verifyCodeLength(string)", +"a968da27": "newUpgradeCard(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a968e6ec": "parentId(uint256)", +"a9691f3f": "fundsTokenBalance()", +"a9692047": "p(uint256)", +"a969234c": "freeLiqGem(address,uint256,uint256)", +"a969337e": "player_getKingOne(uint256)", +"a96936cb": "updateECPLockdownState(bool)", "a96948c6": "chefBalanceOf(address)", "a969574d": "ratePreICOEnd()", +"a969c620": "BCPWebsite()", +"a969df80": "openCase(uint256,uint8,bytes)", "a969f080": "QUIKKO()", "a969ff0a": "collectFee(uint256)", +"a96a0aae": "lockPremintedToken()", +"a96a4305": "swapAnyway(int128,int128,uint256)", "a96a4998": "DEFROST_FACTOR()", "a96a5a5b": "pwin()", +"a96a66d2": "tier2(address)", "a96af0f4": "saleSupply()", "a96b1828": "GLOBALETHER()", "a96b2dc0": "getCallCount()", "a96b3ab8": "getDthShop(address)", +"a96b428c": "init(uint256,uint256,uint256,uint256,address,address,address,address,address)", +"a96b7f05": "tokenAmount(address)", +"a96c28fb": "_validPortion(uint32)", "a96c3e6e": "getPlayerAddr(string)", "a96c4eb7": "Sold(uint32,address,address,uint256)", "a96c6bfe": "setDeveloper(address,bool)", +"a96ca508": "buylistCounter()", "a96ce7aa": "unlock(string)", +"a96d8fec": "istokensent()", +"a96e2423": "setWethAddress(address)", +"a96f0e49": "refManagerContractAddress()", +"a96f1c69": "pattern()", "a96f45c7": "ETHTransfer(address,address,uint256)", "a96f8668": "releaseTokens()", +"a96fa851": "metaOracleInstance()", "a96fb9b4": "testTokenA()", +"a96fe13e": "EUR10()", +"a96fe443": "AUTOMaxSupply()", "a970a23a": "internalUpdateRates(bytes4[],uint256[],uint256)", "a970ef6e": "tokenContractDefined()", "a9718d51": "getTransferValuebyArrd(address)", +"a9718f58": "getBitProInterestBlockSpan()", +"a971911f": "confirmRepay()", "a971c23d": "minimumFeePercentage()", +"a971d9bb": "verifyDeclaredTime(bytes32)", "a9725a68": "LIMIT_STAR5()", "a9726c1e": "withdraw_bounty()", +"a972985e": "checkpoint(address)", "a972a451": "sqrt(uint32)", +"a972f673": "airdropACTIVE(address[],uint256[])", +"a9737595": "numCoins()", +"a9738f02": "removeContractHost(address)", "a973e27c": "testFind()", "a9740fdf": "SwapCreation(address,address,uint256,uint256,address)", +"a9741394": "COMMISSIONER_AUCTION_FLOOR_PRICE()", +"a9741dec": "lay_ds_theo_culi(int256)", "a9743c68": "getCallPayout(bytes32)", "a9746acf": "UserBought(address,uint256,uint256,uint256,uint256)", "a974e21f": "HKIN(uint256,string,string)", "a97501a3": "ManUvsTottenham()", +"a9751665": "MINT_FEE_PLEDGER()", "a97583de": "_transferByPartition(bytes32,address,address,address,uint256,bytes,bytes)", "a9758fcc": "CurationRightsTransferred(address,address)", +"a975d4db": "membersCount(uint256)", +"a9761086": "convertEthToToken(uint256,uint256,address)", +"a97623de": "issueAmount2()", "a9764152": "createFunction(string,string)", "a9767e14": "masternodeMineTokens()", +"a97697f6": "recoverOnly()", +"a976db9b": "weeklyIncome(uint256)", +"a976de80": "randao1(uint256)", +"a9771afd": "isValidProposal(address)", +"a9772052": "DAFIContract()", "a977449e": "unbanReferrer(address)", +"a9776692": "currentTC(uint256)", "a977c71e": "changeQuota(uint256)", "a977f628": "viewNumberOfApprovedUsers()", +"a978018e": "setMintLimit(address,uint256)", "a9782954": "hunterOf(address)", +"a9788a05": "caltWaitingBTokenAmount(address)", +"a978dab7": "paidOnBlock(address)", "a979169f": "updatePackage(uint256,string)", +"a97919b2": "setUniBurnRatio(uint256)", "a9791aec": "tgeSetFinished()", "a9797521": "bn128_is_on_curve(uint256[2],int256)", +"a9799f37": "getWinnersByGroup(uint256,uint256)", +"a979f0c5": "supplyCapGuardian()", "a97a6d63": "setWhitelisted(address,address,bool)", +"a97a777a": "levelTokens(uint256)", +"a97ab18a": "setup(address[],uint256,address,bytes,address,uint256,address)", +"a97b04aa": "unlockedPir(address)", "a97b8b48": "LOG_CurrentPercent(uint256)", "a97b8b4d": "closeBallot()", +"a97c17c6": "updateWhitelisted(address[],uint256[])", "a97c8eb4": "RTEToken()", "a97cb561": "isTransferAgent(address,address)", +"a97cb7e0": "createCarByOperator(address,string,uint8,uint8)", +"a97cb8a7": "setBonusRate(uint256,uint256)", "a97cc114": "getTile(uint256)", "a97d48fd": "sendContractFundsToAddress(uint256,address)", +"a97d5380": "OnRegisterAlias(address,bytes32)", +"a97d6896": "kovanDaiAddr()", +"a97d70b1": "currentCollected()", +"a97dc0d2": "getAllCalls(address)", "a97e5c93": "isOracle(address)", +"a97ed232": "pickWiner()", "a97fc381": "toSlice(bytes)", "a97fe7b6": "airDropTotalSupply()", "a97ffd5e": "safeToSell(uint256)", +"a98048df": "getMyBalances()", "a9804acb": "HealthyCoins(string,string,uint256)", +"a9809600": "getYourBalanceOfProjectERC20(uint256)", +"a980a500": "getContentActivity(uint256)", "a980bb9e": "isDisclosureSigned(uint256)", +"a981252d": "massReplenish(address[],uint256[])", "a9814d14": "Outcome()", +"a981848f": "cancel(address,uint256,uint256)", "a981daca": "testIntParserNegative()", "a9820ead": "Ballot(bytes32[],bytes32[])", +"a9823c9f": "yfffi()", "a9824288": "CTMC()", +"a98251b0": "userHatchRate(address)", "a9825b7c": "bonusUnsold()", "a9831437": "setCreationPrice(uint256)", "a9831edf": "unlockFundsAndPassEther()", "a98325b6": "collectDividend()", "a983637e": "BACHELORCHAIN()", +"a9836e8c": "runDepositTop()", "a9839dd7": "exchg(address)", "a983c932": "isValidContract(bytes32)", "a983d414": "safeassert(bool)", "a983dcc0": "setDefault(bytes32)", "a983e1bb": "random(uint256,uint16)", +"a9845881": "createNft(uint256,uint256,uint256,uint256,address,uint256,address,string,string)", "a984cec2": "additionalPresaleInvestors()", "a9850e26": "SellToyMoney(uint256)", "a9854087": "closeAt()", "a9856d6d": "initSale(address,address,uint256,string)", +"a985994b": "liquidate(address[])", +"a985d30c": "changeAllocation(uint16,uint16)", +"a985e249": "get_rewardRemains(uint256)", "a985e6c6": "withdrawAirDrop(address[],uint256)", +"a985f5c9": "sushi_fxs_path(uint256)", "a986c969": "stand(address,uint8[],bytes32,uint8[],uint8[],bool[],uint256,bytes32,bytes32)", "a986ef4a": "nextRoundCoolingTime()", +"a987012a": "BonusFrom(address,uint256)", "a9872393": "racesInfo(uint256,uint8,address)", "a9875d70": "stage4Start()", +"a9879ecf": "endInit(bytes2)", "a987d4c6": "_mint(address,uint256,string)", "a987d654": "restoreItem(uint256)", "a987f9da": "Creation(uint256,string,address)", +"a9886946": "PLM()", "a9888148": "testFailRetractNotRetractable()", "a988845a": "setNewMessageNumber2(string,uint256)", "a988df4b": "bgb_per_eos()", "a988e371": "taxPaid(address)", "a988ea3a": "NETHtoken(uint256,string,string)", "a98902e9": "LUNVault(address)", +"a989adc5": "unlockLiquidityFund()", +"a989b3ae": "nUriSchemeRegistry()", +"a98a3b2c": "setLevelsETHLPBurnAddress(address)", +"a98a6575": "setCreamAddress(address)", "a98a6d19": "ICOWeiRaised()", +"a98a6ea3": "approve_462(address,uint256)", "a98a89c2": "buy1(address[],address[],uint256[],bytes)", "a98ad199": "removePermittedContract(address)", +"a98ad46c": "usdtToken()", "a98af238": "setCCH_edit_16(string)", +"a98b69a5": "typeName(uint256)", "a98c439f": "buyTokensAltercoins(address,uint256)", +"a98c5b71": "getDiceNumber(uint256)", "a98ca17d": "exercise(uint256,uint256[3],address)", "a98cb619": "transferGenesis(address)", +"a98d55f8": "tokensForPancake()", "a98d5961": "pickRandomAssetPosition(uint256,uint256,uint256)", +"a98ddbd5": "withdrawAllETH(address,address,uint256)", +"a98dfb30": "verifyName(bytes32)", "a98e4e77": "getAccountCount()", "a98ee0b7": "_getInitAuctionSeconds()", "a98f81fd": "BEXAM()", "a98f99d8": "removeDefaultOperatorByTranche(bytes32,address)", "a9901c6b": "getIsCoinReg(bytes4)", "a990dd52": "unitsOneEthCanBuybefore()", +"a9910054": "deleteFile(string)", "a9918dfc": "getCompte_36()", "a991a24d": "getTenancy(uint256,uint256)", +"a991ab66": "ST1OPA(address,address,uint256,uint256,uint256)", "a991cb0e": "respond(uint256)", "a991faf9": "getTotalDividendsAmount()", +"a992c2f2": "receiveHistoryBalance(uint256,uint256)", "a99306e7": "addPVPContender(address,uint256)", +"a9930a94": "bulkSend(address[],address,uint256,uint256)", "a993772f": "isPreIcoFinish()", "a993e180": "getFechaTax()", +"a99463bc": "userFirstDeposits(address)", "a9948f7e": "GetNbyPrice(uint256)", +"a995ac7c": "FeeChange(uint256,uint256)", +"a9967132": "set_new_affiliateSplit(uint16)", "a996d6ce": "setBurner(address)", "a996d72e": "OracleChainToken(uint256,string,uint8,string)", +"a9970d13": "rntsPerBnb()", +"a99728b9": "ViewMagicblock(address)", "a9974338": "setB0xToken(address)", "a997f82f": "setCrowdsaleStage(uint256)", "a998146b": "allToken()", +"a998505b": "_getAccountEthAddress(address)", "a9985260": "test_setMaxSize()", +"a99891c5": "ok(uint256,bytes,uint256)", "a9989b93": "tokenAddresses()", +"a998e9fb": "globalBaseTokenURI()", "a998fdbe": "getWithdrawAmount(address,address)", "a9995010": "CappedCrowdsale()", +"a999ac32": "safuLiqLockAddress()", "a99a353b": "SWAP(address,address)", "a99a3f03": "PLAYER_TIMEOUT()", "a99a3f98": "initSale(uint256,uint256,uint256,uint256,uint256,uint256)", "a99a985b": "betOn(uint32,uint32,uint256,address)", "a99aa366": "presaleDiscount()", +"a99b9186": "currentProof()", "a99b9e39": "ICO_START_DATE()", "a99be610": "PreIcoMessage()", "a99bf4fa": "Potential_Investors(address)", +"a99c026b": "newBoardCreated(bytes32)", +"a99cb75f": "isAdjusterLocked()", "a99ce372": "VINE_CAPACITY_PER_LAND()", +"a99d0f19": "_isExchanger(address)", "a99d8d48": "changeTransferable()", "a99da6af": "finishDeal(uint256)", "a99dca3f": "hi()", +"a99dedda": "approve_309(address,uint256)", "a99df9c3": "oneCentInWei()", "a99e0a81": "maxICOFirstSupply()", "a99e6465": "addTier2Member(address)", @@ -97000,156 +177563,309 @@ "a99fa3e2": "addGroupMember(bytes32,address)", "a99fba7d": "calculatePlatformCommission(uint256)", "a99fc5aa": "tempCharity()", +"a99fea5f": "fulfillExternalRequest(address,bytes4,bytes32)", "a99ffb7b": "timestamp(bytes12)", +"a9a00039": "setDenFee(uint256)", +"a9a01105": "juryNoVoters(uint256,uint256)", "a9a07af9": "incFightToDeathWin(uint256)", "a9a0844b": "getSaleVolume()", "a9a0b495": "getPreSignedHash(bytes4,address,uint256,bytes,uint256,uint256)", +"a9a1015a": "extractTokensIfStuck(address,uint256)", "a9a11111": "QuadraticVoting()", +"a9a12852": "hxpLpFrozenBalances(address)", +"a9a1523f": "updateMessage(bytes32)", "a9a18dda": "totalEthReceived()", "a9a1fb96": "releaseTokensForce(bytes32)", "a9a26902": "changeBubbleWallet(address)", "a9a29afa": "getRefundTxFee()", "a9a343b3": "Puzzled(address,bytes32)", +"a9a36dcd": "claimManager()", "a9a3a9c5": "vxtest()", +"a9a3bba4": "stakes(uint256,address)", "a9a3cef4": "LISKClassic()", +"a9a3d9f3": "newFundingPanel(address,string,bytes32,uint256,uint256,address,uint256,address,address,uint256)", "a9a3da4a": "getRemainUtcoin()", +"a9a3e095": "pollStatus()", "a9a40c71": "getNumberOfOpenDeals()", +"a9a40dec": "Bought(address,uint256,uint256)", +"a9a47654": "StakingContract()", +"a9a4cbcc": "getTotalProfit()", +"a9a514b2": "semanticVersionIsZero(uint64[3])", "a9a51f89": "changeTokens()", +"a9a5b781": "currentUserID()", "a9a5e3af": "removeOwners(address[])", "a9a615e9": "setWhitelistedStatus(address,uint256)", +"a9a67eb9": "minimum_amount()", +"a9a6d406": "ReconHardriveWallet()", "a9a6e9b4": "distributeLCD(address[],uint256)", +"a9a6f611": "earlyBonusPercentage()", +"a9a70a29": "founderDeveloperPropertyId(address,bytes32)", +"a9a724ea": "mintTokenPermissioned(address,uint256,uint256,uint256,string)", +"a9a7cfaa": "lnTariffIdToLnTfIdIndex(uint256)", "a9a8679b": "authorizeAccount(address)", +"a9a8b2f8": "NewFactory(address)", +"a9a8d28a": "create_sale(uint256,uint256)", "a9a8fc84": "ItemCreated(address,uint256)", +"a9a9591c": "setname(address,uint256)", +"a9a981a3": "candidateCount()", +"a9a99c0d": "addBlackLister(address)", "a9a9d7af": "sellerList(address)", "a9a9e4f7": "_payloadOffset()", +"a9aa47ee": "listAddresses(address[])", +"a9aa5c04": "FoundationTokenGenerated(address,address,uint256)", "a9aac3e4": "registerWineOwner(address,string,string)", "a9aad58c": "PAUSED()", "a9aae07a": "setMinGas4Accts(uint256)", "a9aaf116": "BillahChain()", +"a9ab4a1f": "f(uint256,uint256,uint256,uint256,uint256)", +"a9ab996d": "_savingsManager()", "a9ab9b46": "getAccountItems(address,uint256)", +"a9abb454": "tokenSalex(address)", +"a9abd2ae": "ROLE_POWERUSER()", "a9abe7be": "setIcoSecondWeekRate(uint256)", "a9ac225c": "ProposalTallied(uint256,uint256,bool)", "a9ac4c5f": "checkMonthlyLimit()", +"a9ac9576": "CashedOut(address)", "a9acc475": "getBlockValue()", +"a9ada2bd": "setMinCollateralInWethAmount(uint256,bool)", "a9adaecd": "calcStopPriceFactor()", +"a9adb67f": "_joincountSeg(uint8)", +"a9add57d": "extraReceiversQueueSize()", "a9add7dc": "setEvolvePrice(uint128)", +"a9ade8fe": "ROUND_1_END_TIME()", +"a9ae30d6": "u_l4()", "a9ae8323": "presaleDateFinish()", "a9aeb059": "updateCeiling()", +"a9af1578": "setVestingContractAddress(address)", +"a9afaaaf": "deductFee(uint256)", +"a9afafec": "endParticipation()", +"a9b00a25": "withdrawNoLockedWithGasToken(uint256,uint256,address)", "a9b07600": "setIdArray(address,uint256,string,string,uint256[])", +"a9b07cea": "incrementLock(address,uint256,uint256,uint256)", "a9b0c5a4": "preIcoFinished()", "a9b0e8d5": "Cscchain(uint256,string,string)", "a9b11426": "getImageOwner(uint256)", +"a9b12751": "withdrawDevTeamTokens()", "a9b12c4c": "blocktime()", "a9b1d507": "makeWallet()", "a9b1ffd9": "totalChequeValue()", "a9b2c135": "lockedYears()", "a9b2ca9c": "changeDragonGen(uint256,uint256,uint8)", "a9b2cc09": "getMaxContributionAmount()", +"a9b2cf5e": "_decode_sol_uint16(uint256,bytes)", "a9b35240": "packageExists(bytes32)", +"a9b41300": "setTopHolderSize(uint256)", +"a9b41caf": "changeAdminCharge(uint256)", "a9b46030": "BurnableOpenPayment(address,uint256)", "a9b48ba7": "WIN()", +"a9b48c01": "points_sum(int128,uint256)", "a9b4b780": "getWeight()", +"a9b518ab": "addOracle(bytes32,address)", "a9b542bd": "getDna1(uint256)", "a9b551d2": "getAdministratorMoney(address)", "a9b5ae83": "messageForPeace(string)", +"a9b66fdb": "getStakeHistory(address)", "a9b69e7c": "deployersCount()", +"a9b6b8b0": "getRewordForWeek(address)", +"a9b6c435": "salary(uint256)", "a9b6c8bc": "getAddress(bytes16)", "a9b76504": "getContestTeam(uint32,uint32)", "a9b7c3bf": "cooAddress1()", +"a9b8445c": "equalUintFailTest()", "a9b86292": "totalSharePool()", "a9b86924": "buyStoreByName(bytes32)", +"a9b8bccb": "addAddressForFee(address)", "a9b8dad6": "level_3_percent()", "a9b8f7b8": "ProtectTheCastle()", +"a9b946e9": "set_new_UNIROI(address)", +"a9b95b97": "minPerContributor()", +"a9b99268": "_longitude()", "a9ba2b09": "releaseFine()", +"a9baa03c": "creth()", "a9bb03a4": "deptrespond(address,address,string,bool)", "a9bb3274": "UCCOIN_PER_ETHER()", +"a9bb55df": "getDPCAmount(uint256,uint256)", +"a9bba66b": "promoAddress()", +"a9bbc857": "lottonumber()", +"a9bc00a0": "twentyFourMonthReward()", +"a9bc2d8f": "shelffab()", "a9bc5db1": "createHeld(address,uint256)", +"a9bcea61": "maximumAmount()", "a9bf1c9f": "ENS_ROOT()", +"a9bfba0e": "portalMemberBalance(address)", +"a9bfd37d": "yBal()", "a9bfe5c7": "TokenBalance()", +"a9c01fea": "_trLaunchBlocksLocked()", "a9c0838d": "getPI_edit_3()", +"a9c0c0f8": "pendingSrx(uint256,address)", +"a9c0c30c": "setPledge(string)", +"a9c0effd": "sumOfInputTime()", +"a9c117f7": "migrateFunds(address,uint256)", "a9c1873c": "setTokenPerEth(uint256)", +"a9c1a200": "setClassProperty(bytes32,bytes32)", "a9c1f2f1": "decayRate()", +"a9c2181b": "migrateDeposits()", +"a9c24d2c": "_setOwner(bytes32,address)", "a9c2ac3a": "getBetIds(uint256)", "a9c2e36c": "getFactoryAddress()", "a9c32c35": "NewExchangeRate(uint256)", +"a9c35514": "firstRewardList(uint256)", "a9c38476": "latestEditionReleased()", +"a9c3ac53": "poolTopInfo()", +"a9c3ccda": "setGpfkContract(address)", +"a9c3eb52": "syncRewardedOnMaturity(uint256)", +"a9c415d2": "computeCost(uint256)", "a9c4429a": "getInvestmentPackageInformation(uint256)", "a9c45fcb": "upgradeToAndCall(uint256,address,bytes)", +"a9c4d2ce": "setupAccount(address,address,uint8)", "a9c4d62e": "S25ICO()", +"a9c537b4": "_remainingIssuableSynths(address)", +"a9c54737": "SINGLE_KEY_PRICE()", +"a9c59e56": "swapROTforMAGGOT(uint256)", "a9c5c9df": "aval(uint256,address)", +"a9c5fade": "cancelOrder(uint256,address,address)", +"a9c63258": "burnFromVault(uint256)", "a9c6a624": "updateNumber(int256)", "a9c6c714": "unsoldAllocationOraclizeGasLimit()", +"a9c6c913": "bnbmarketPerBlock()", "a9c70eaa": "getUint(uint256)", +"a9c712f8": "acceptedDeposits(address)", "a9c73e80": "setText(string,string)", "a9c7648f": "distributeToken(address[],uint256)", "a9c76999": "totalProfit(address)", "a9c8733c": "correct()", +"a9c8af10": "_setFeesTimestamp()", +"a9c8da47": "nextBattleDone()", "a9c8dfcd": "AuctionCreated(uint256,uint256,uint256,uint256)", "a9c95328": "renameList(address,string)", +"a9c9ca25": "ownerSetTokenBankrollAddress(uint8,address)", "a9ca2072": "getAccountValue(uint16,uint8,uint8)", "a9ca6057": "baseball()", +"a9caa411": "debts(bytes32)", +"a9cae653": "executeMetaTransaction(address,address,bytes,bytes32,bytes32,uint8)", +"a9cb1a36": "deleteClient(uint256)", "a9cb2227": "getPlayerRoundTeamBought(uint256,uint256,uint256)", +"a9cb2dcb": "burntPoint()", +"a9cbc798": "uniListingPriceInWei()", "a9cbd0a5": "percentageToEthertoteDevelopmentWallet()", +"a9cbd1b8": "getOutInfoOfSender()", +"a9cbe415": "NewIncomingFunds(uint256,address)", "a9cc077a": "TOKEN_PRICE_DENOM()", "a9cc4718": "fail()", +"a9cc9ae9": "emergencyClose()", "a9ccc3af": "isEtherSpaceUpgrade()", +"a9ccfa3c": "getSHA3Hash(bytes)", "a9cd2be6": "createSlot(uint256,uint256)", +"a9cd2de2": "LOG_Transfer_Contract(address,uint256,bytes)", +"a9cd4ea7": "burnSubURIByController(uint256,string)", "a9cd9e06": "secureWithdraw(uint256,address)", +"a9cdd5d0": "KycWhitelisted(address,bool)", +"a9cddfcf": "IsIssuer(address)", +"a9cde3c3": "idxStart60()", "a9cdf643": "TEAM_MEMBER_VAL()", "a9cf037a": "EEYcoin(address)", +"a9cf69fa": "getProposal(uint8,uint64,bytes32)", +"a9cfc46e": "cashPriceOne()", "a9d04bd8": "getStakingRequirementTime(address,uint256)", "a9d05989": "ETFW()", +"a9d06643": "distributeContract()", "a9d07519": "TokensCappedCrowdsale(uint256)", "a9d0b164": "priceOfEthOnUSD()", "a9d0ddc7": "addContractWithInfo(string,string)", "a9d0fd87": "_updatePurchasingState(uint256,uint256,uint256,bool,address)", +"a9d1e30a": "ethInUsd()", "a9d2293d": "lastClaimBlock()", +"a9d22adf": "set_Invest2_sBTCContract(address)", "a9d23ace": "getBundleExpiredTimeOfEmail(string,uint8)", "a9d2d87c": "Manual_Mint(address,uint256)", +"a9d32484": "betWeeks(uint256)", +"a9d3a3cf": "createUniswapPairMainnet(address)", "a9d3da74": "SimpleAuction()", +"a9d3dbd8": "teamsHasRunOver50Percent()", "a9d40b77": "buyOffspring(address,string,uint256,uint256,uint256)", "a9d424e2": "buy(address,address,uint256,uint256)", +"a9d44d6e": "Register(uint256,address,uint256)", +"a9d4630c": "setProxy(address,address)", "a9d48032": "maxSpendToken()", +"a9d48b43": "getUserStake(uint256)", "a9d49f62": "searchInsertionPoint(uint256,uint256)", "a9d4d6bc": "lastBlock_f1()", +"a9d4da52": "approve_748(address,uint256)", "a9d5e255": "GACToken(uint256,uint256)", +"a9d659c2": "getNiftyTypeId(uint256)", "a9d66127": "cancelPawn(uint256,address,bool)", "a9d66352": "minimum_deposit_amount()", "a9d72f82": "alterFeaturePetitionFee(uint256)", "a9d74013": "claimedToday()", +"a9d75b2b": "stableToken()", "a9d82f18": "realDEXToken()", "a9d85266": "setValue(bytes32,bytes32,uint256)", +"a9d87ee6": "priceFunction()", +"a9d8d655": "getMakerOrderIds(address)", +"a9d932b2": "pool1Register()", +"a9d99795": "confirmed(address)", +"a9d9e8f7": "sellYoutubeNft(string)", "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)", +"a9daecb6": "osfiPerBlock()", "a9db06e5": "perAmountRaised()", +"a9db22df": "totalAssetSlots()", +"a9db6939": "utilizationScaled(address)", +"a9db7994": "settledWeiPervSPY()", "a9db9ce6": "getOraclizeGasPrice()", "a9dbaf25": "length(bytes32)", "a9dbe76f": "confirmSeller(uint256,uint256)", "a9dc1d54": "singularDTVCrowdfunding()", +"a9dc394c": "calcMaxCashOutAmount(address,address)", "a9dc491d": "getResolver()", +"a9dc9927": "ledgerRecord(uint256)", "a9dd1225": "random(uint256,uint256)", +"a9dd14d6": "getPrice(address,address,uint256)", "a9dd6895": "acceptTransaction(uint256)", "a9dda4df": "setAuctionAddress(address,address)", +"a9de245b": "set_new_ATOKEN(address)", "a9de5045": "acceptAction(bytes32)", "a9de581b": "auctionWinnerMessageHash()", +"a9dec436": "_maxBuy()", +"a9decdda": "mint5()", +"a9dece5b": "destoryFrom(address,uint256)", "a9df1aa2": "WithdrawalNormal(address,uint256)", +"a9df60a6": "earnedBonus(address)", +"a9df85f7": "_ensureValidGenericCallTarget(address)", "a9e044ae": "SetProjectTag(string)", +"a9e0a138": "_decode_sol_bytes13(uint256,bytes)", +"a9e0bef7": "marketSummaries(address[])", "a9e0f3ed": "checkCounterLimit()", "a9e10bf2": "recieve()", +"a9e16913": "hasBuyerCancelled()", +"a9e27b75": "Bum(address)", +"a9e27cce": "requestMine(uint8,uint8,uint8)", "a9e2bcfe": "oneRoll()", "a9e2e084": "_createPoo(string,address,uint256)", "a9e30f96": "TokenPK(uint256,string,uint8,string)", +"a9e31ac9": "fundETH()", +"a9e394b8": "arbSynthRate()", +"a9e3c991": "withdrawBEP20()", "a9e3fd27": "contentHostPrice(bytes32)", "a9e406d5": "_setProviderSupply(uint256,uint256,uint256)", "a9e4d6ce": "UpdateTokenRate(address,address,uint256)", +"a9e4eff7": "owner_uorder(address,uint256)", +"a9e51d32": "setStakeAddr(address)", +"a9e5350e": "generateGameSecretAndKey(bytes32,uint8)", "a9e5714b": "AgriChain()", +"a9e61b4f": "isBucketEmpty(bytes32)", +"a9e6723e": "updateAsyncEventsAddress(address)", +"a9e70f51": "NotEnoughEthErrorEvent(uint256,uint256)", "a9e732bb": "cashout(uint256)", +"a9e74344": "hasUsedSalt(address,uint256)", "a9e79359": "payoutForTimeline(uint256,uint256)", +"a9e7939e": "ConfirmSwap()", "a9e7c2e5": "claimToken(uint256)", "a9e7cb10": "Mediation(address)", +"a9e7d64e": "removeAllPendingDepositsExternal(address)", "a9e7f730": "FreyrCoin()", "a9e899ef": "challengeFeeMultiplier()", "a9e8a6bb": "prolongBonusPreIco(uint256)", @@ -97157,82 +177873,162 @@ "a9e931ab": "addRec4L8R(address,uint256)", "a9e94aa2": "Sponsor()", "a9e966b7": "setState(uint256)", +"a9ea0c90": "buyTickets(string,uint256,uint256)", "a9ea1896": "priceT1()", "a9ea4aaa": "EntryToken()", +"a9ea4cd8": "addWhiteListRoot(address)", "a9ea6454": "basicThreshold()", "a9ea96f0": "setDevelopersTokensPercent(uint256)", "a9ea9d17": "PURCHASES_BONUS()", +"a9eaa8f6": "updateArtworkDimensionFileInPixel(uint256,uint256)", "a9ead91c": "addressToAsciiString(address)", +"a9eaf0cf": "setLaunchWhitelist(uint256,address[],address[])", +"a9eb5ccb": "setShareCycleSessionSize(uint256)", "a9ebeb25": "nextReferrerId_()", +"a9ebee8d": "issue(address,uint256,uint8,string)", +"a9ec0d6e": "B16(bytes)", +"a9ec75f6": "keeperReward()", "a9ec77d3": "PublicSale(address,address,address,address,uint256,uint256,uint256)", +"a9ece1b7": "checkPair(address,address)", "a9ed003d": "sister()", +"a9ed6e9a": "buyShare(uint256)", "a9ed9cb8": "disallow(address)", +"a9eda545": "mintMBC(address,uint256)", +"a9edaaa4": "addLiquidityToPool()", +"a9edf045": "AddLiquidity(address,address,address,uint256,uint256,address,bytes,address)", +"a9ee491f": "records(uint256,address)", "a9eeaeee": "getSanSlots(address)", "a9eed530": "reduceOrderQty(uint256,uint256)", +"a9ef775a": "setDefaultRoyalties(address,uint8,uint8)", +"a9efeaa9": "getTargetNamesAddress()", "a9f00221": "resetTokenOfAddress(address)", +"a9f01d04": "refundFromRest()", "a9f036dc": "accCompany()", +"a9f05499": "countSubscribers()", "a9f09079": "exchangeRateStoredInternal()", "a9f0a590": "transferAdministratorship(address)", +"a9f0c547": "MetaTransactionCallFailedError(bytes32,bytes,bytes)", +"a9f0d16e": "NewOpenDonation()", +"a9f0e967": "GooglePerBlock()", "a9f12d8a": "RaliusToken()", "a9f16529": "thisVotersChoice()", "a9f2db37": "unlockTokens(address,address)", +"a9f2f534": "pendingPizza(uint256,address)", +"a9f439ea": "_globalRBurn()", +"a9f47e0e": "Bid(uint8)", +"a9f4ec8d": "setbdmContract(address)", +"a9f528b4": "UniswapGetPathForTokens(address,address)", +"a9f56737": "deployMultipleModulesFromFactories(bytes32[],uint8,uint8,uint8)", "a9f5de42": "crowdsalePhase()", +"a9f60a64": "OnCharged(address,uint256)", +"a9f649e8": "GAS_CALLBACK()", "a9f69edb": "checkRole(uint256,address,uint256)", "a9f6def0": "HonestDice()", +"a9f73953": "DistributorChanged(address,address)", "a9f73dd2": "_getRarity(string,uint8,uint8)", +"a9f79308": "applyRequestInRootChain(bool,uint256,address,bytes32,bytes)", "a9f79f7d": "FXT(address)", "a9f7c131": "updateDateOfPurchase(address,uint256)", "a9f7d03b": "admin_typeOf(address)", +"a9f7dfbf": "proxiesLength()", "a9f7e664": "transferTokens(address,uint256,uint256)", "a9f7f7e5": "o_algoritmo(uint256)", +"a9f8235f": "mintTeamAndAdvisorsYear1Part2(uint256)", "a9f844a8": "PlayerBalance(address,uint256,uint256)", "a9f8792e": "votingProxyContract()", +"a9f8d181": "lastRewardBlock()", "a9f8ec6c": "AlarmClockTipFaucet()", "a9f940c3": "addChain(string,string)", +"a9f949ff": "degreeInfo(uint256)", "a9f951dc": "getNation(uint8)", +"a9f966d2": "WithdrawalEnabled(address)", "a9f987b5": "UFOcoin()", "a9f992b1": "BTC8000on420()", +"a9faafd9": "proposalStartTime()", "a9fab274": "burnAuditApproval()", "a9fae422": "getParents(address)", +"a9faf6de": "runTokenUniswapTransferonly(uint256,address)", "a9fb11b3": "potAddup()", "a9fb4385": "ContributeWithSender(bool,uint8,address)", +"a9fb763c": "reward(uint256)", "a9fb8fe6": "getFeesByAsset(address)", "a9fbc614": "lookupTicketHolder(uint256)", "a9fc771c": "PinkToken()", "a9fc9501": "indexTheWorkcrew()", +"a9fcee00": "FXS_FRAX_SUSHI_LP()", "a9fcf76b": "setIntArray(bytes32,int256[])", "a9fd1bd3": "TradeAffected(uint256,uint256)", "a9fd3f42": "transferApprovedFunds()", +"a9fd8ed1": "totalOffers()", "a9fde745": "transferTrade(address,address,uint256)", +"a9fe99b1": "checktimestampandico()", +"a9fe9ec6": "getBidInfo(address)", "a9feca22": "_emitOracleAdded(address)", +"a9ff0238": "winnerTimestamp(uint256)", +"a9ff0a62": "minSafeShortSlot()", "a9ff2a5e": "transferTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"a9ff6139": "sgaTotal()", +"a9ff6a71": "getContractState(bytes32)", +"a9ff86a1": "bucket(address)", "aa01ac22": "gmAddress()", "aa01ef7d": "finishVotingPublic(address,uint256)", +"aa028302": "_setReward(uint256,uint256)", "aa02a90f": "majorityMargin()", "aa03214c": "calcBonusPercent()", "aa0372e7": "getItem(bytes32)", "aa03dfaa": "createChannel(bytes32,address,uint256)", +"aa03fa3d": "callers(uint256)", +"aa03fec9": "MoveNonIndexNameToBase(address,address,uint256,uint256)", +"aa041370": "MutuallyAgreedCancellation(bytes32,address,uint256,uint256)", +"aa04295f": "stakedBalanceOf(uint256)", +"aa044625": "strategyUpdateTime()", +"aa046286": "topCoins(uint256)", "aa0465b8": "setPriceData(uint256,uint16,uint256,uint8)", +"aa049474": "CALLCUT()", "aa049691": "changeAccount(address)", +"aa04d56d": "BuyOfferMade(uint32,address,uint256)", "aa04e566": "getWhoPiad(address,address,address,address,address,address,address,uint256)", +"aa04f77e": "mockFunctionWritesStorage()", "aa052bd1": "startPreSaleStage()", "aa056d2a": "cloneWithPopAndBottle(uint256,uint256)", "aa058a73": "right6(uint256)", +"aa05931a": "transferFlashloanAsset(address,address,uint256)", "aa05b852": "s34(bytes1)", +"aa05ebce": "setLiftoffSettings(address)", "aa065074": "StageVestingToken()", "aa071061": "LogAccountModified(address,address,bytes32,bytes32,bytes32,bytes32)", +"aa071c56": "create2(uint256,uint256,uint256,bytes)", +"aa074df5": "NewStatus(bool)", "aa077992": "getProductEarning(uint32)", +"aa082a9d": "unlockTimestamp()", "aa08523d": "lockedCustomer(address)", +"aa088634": "Setup(address,uint256,uint256,address)", "aa08c9e6": "getCoverImageCount(address)", "aa08dfd3": "setFeeParams(uint256,uint256,uint256,uint256,bytes)", +"aa097f15": "interests(uint256)", "aa09bab8": "usedTotalSupply()", +"aa09cc57": "getContractValueInEth()", +"aa09dd63": "hesap_sonucu()", +"aa0a459c": "Create(uint256,address,uint256,string,string,string,string)", +"aa0b1880": "remainingTokens3()", +"aa0b24fa": "getConversionRates(address,address,uint256)", +"aa0b5988": "updatePlatformFee(uint256)", +"aa0b7db7": "deposit(uint256,uint256,bytes)", +"aa0ba326": "stakedBalanceOf(address,address)", "aa0bf9ba": "calculateRawPoolAmount(uint256)", +"aa0cb16b": "fetchAllBooks()", "aa0cd6eb": "_distributePoolReward(uint256,address,uint256)", +"aa0cf869": "ThingBorn(uint256,uint256)", "aa0cfcbf": "buynums(uint256)", +"aa0d2a82": "canWin(address)", "aa0d30f3": "deduct_fees()", "aa0d9fb5": "_aremoveByValue(address)", +"aa0e3656": "getOracleAddress(string)", "aa0e38b4": "Mobilink()", +"aa0ea6ee": "changeWhatSatoshiSays(string,uint8,string)", "aa0f0d4a": "Team(bytes32,bytes32,address,bytes32)", +"aa0f9d28": "finalizeEntryFeeChange(address)", +"aa1071ee": "withdrawUnusedEth(uint256)", "aa10ce22": "addExchange(address)", "aa10e8c2": "CreateAPool(string,string)", "aa11772b": "setOperators()", @@ -97240,87 +178036,166 @@ "aa121bbe": "ABIChanged(bytes32,uint256)", "aa125d08": "timeWaitUnlock(address)", "aa127ae3": "test_9_checkDestructionOverflow_shouldThrow()", +"aa12ae4d": "getMaximumSupportedAssetCount()", +"aa13504e": "externalService1(address)", +"aa135a8d": "lastUpdatedRoundNum(address)", "aa13ca76": "getTokenPrices()", "aa13e8c2": "waitingTime()", "aa141ee2": "spartans()", +"aa14830c": "fdNow()", +"aa14b49e": "_decreasePoolRewards(bytes32,uint256)", "aa14c39a": "submissionDeposit()", "aa14fa5a": "ICObonus()", +"aa15017c": "initWithdraw(uint256)", "aa156645": "isWorker(address)", "aa1589a9": "approveLeave(address,uint256,string,uint256,bytes32)", "aa1614eb": "ethRetrieve()", +"aa168b47": "vipList(address)", +"aa16d220": "processVestingRules(address)", +"aa17743a": "oracleUpdateweiPervSPY(uint256)", "aa17973c": "createRandomAtom()", +"aa17aaef": "changeDeadline(address,uint256,uint256,uint256)", +"aa17cb85": "rsvVestingLockDate()", "aa17e768": "getParentI(uint256)", +"aa18005a": "setCoinRate(address,uint256)", "aa183877": "getMonkey()", "aa188b29": "SandBoxERC20()", +"aa189952": "keeperAdded(address)", "aa18c05c": "TRANSFER(address,address)", +"aa18c4d6": "LogTradingDisabled(uint256)", "aa18f76a": "getAllowedAmount(address)", +"aa1927d3": "LOCKED_LOOT()", "aa1953cc": "canAccess()", "aa19ed77": "freezeTransfersUntil(uint256,string)", +"aa1a6973": "changeCuponContract(address)", +"aa1a8411": "offers(address,uint256)", "aa1b510e": "cheat()", +"aa1b8af8": "transferablePERI(address)", "aa1ba6a9": "totalWin()", +"aa1bd2f6": "createMarket(uint256,address,uint256,address,bytes)", +"aa1c259c": "registerTokens(address,address)", "aa1c31a3": "BatCave()", "aa1cdce8": "allot(uint256)", "aa1cf1cd": "dumpFreeTokens(address)", "aa1cf23e": "_isIdle(address,uint256)", +"aa1cf2a2": "TOTAL_DISTRIBUTE_AMOUNT()", "aa1d807f": "ESCBDevMultisig()", "aa1d98af": "personIndexToOwner(uint256)", +"aa1da48a": "isKyberProxyAdded()", "aa1e47ae": "MyCoin()", "aa1e84de": "hash(bytes)", +"aa1f38d4": "FUNC_A594EF5D()", +"aa1f4bf0": "authorties(address)", "aa1f609f": "ETHER_MIN_CONTRIB_PRIVATE()", +"aa1f9f73": "test_approve_withInvalidAmount()", "aa202aca": "testBytes32Len()", +"aa20c936": "_claimrate()", "aa20e1e4": "updateMasterMinter(address)", +"aa210abb": "makeTokenAvailableForBidding(uint256)", "aa216998": "INITIAL_SAPLLY()", +"aa221733": "LogSetInterestSetter(uint256,address)", "aa2262a8": "prevCourse()", "aa226780": "trade(address[11],uint256[11],uint8[2],bytes32[2],bytes32[2])", "aa228cda": "reduceMul_()", "aa22b56b": "getDAOById(bytes32)", +"aa22eba2": "Callback(uint256,uint256,uint256,uint256,bool)", "aa235449": "SpencerToken()", "aa237e21": "set(bool,uint256)", "aa238110": "getCurrentPrice(uint16)", +"aa2386c9": "ClosedStage()", +"aa23a8f4": "OPENED()", "aa23cb19": "transferFromIndexed(address,address,uint256)", "aa23e03d": "getIdentifier()", +"aa23fddc": "claimsLength()", +"aa24808c": "reward_winaddr()", +"aa248a46": "initMaxExpArray()", +"aa24ab34": "checkout(uint256,uint256[],uint256[],uint256,uint256,uint256)", "aa24da73": "MultiToken()", "aa24e8aa": "numberOfAlternatives()", +"aa250744": "updateUniAddress(address)", "aa2529a2": "RefundChequeById(string)", "aa2580c1": "startPreSaleRound()", "aa258b2e": "TitlePurchased(address,uint256)", "aa25c744": "getDenominationByName(bytes8)", +"aa25d7ce": "stop_mint()", "aa25f57e": "setPartnerETHRewardsPercent(uint256)", "aa271e1a": "isMinter(address)", "aa272d4b": "getNodeIndexId(bytes)", +"aa274843": "presale3Price()", "aa2796fd": "payoutForMining(address,uint256)", "aa27cdf2": "deleteSharedAccount(bytes32,bytes32,uint256)", +"aa2835f6": "getPlansAmount()", "aa283e76": "setMintPrice(uint256,int256)", "aa284a4a": "ProofPublicVote(address)", "aa289b15": "deleteOutStreamOf(address)", "aa28b89f": "preICOStage()", +"aa28dce1": "wrnStats(address)", +"aa29400d": "updatePath(address,address)", "aa29787e": "bonus15end()", "aa2a006d": "OrderCancelled(uint256,uint256)", "aa2a1c47": "getTotalCollectedFrom(uint64,address,address)", +"aa2a7c4c": "withdrawMax(uint256)", "aa2b5d7d": "getMiningWarPlayerData(address)", +"aa2be9a2": "sale(bytes)", "aa2bebb7": "getFeeWindowByTimestamp(uint256)", +"aa2bf676": "setMaxTotal(uint256)", +"aa2c05ed": "getDevAccount(uint256)", +"aa2c4497": "DistrClosed(bool)", +"aa2ccffc": "queryUserX3LevelMine(address,uint8)", +"aa2d262b": "transferAndCheck(address)", "aa2d5c05": "FillOrder(uint256,address,uint256)", +"aa2d7285": "arrayIndex(address)", +"aa2d9d48": "ROTAddress()", "aa2de6c3": "minimumPurchase()", "aa2df88b": "_isTransferAllowed(address,address,uint256)", +"aa2e0d82": "NewColor(address,string)", "aa2e7ea0": "createSwap(bytes20,address,uint256,address)", +"aa2ec710": "setDecimals(address[])", +"aa2efa25": "loanFeeRatio()", "aa2efbad": "nominsReceivedForEther(uint256)", "aa2f04da": "alterPause(bool)", +"aa2f5220": "batchSend(address[],uint256)", "aa2f7494": "createMobster(string,uint256,uint256)", "aa2f892d": "requestRedeem(uint256)", +"aa2fbfa0": "asmReturns(uint256)", "aa2fc145": "numStageRecalc(uint256)", +"aa2fc974": "getMyShare(address)", "aa2fddc7": "transfer(string,address,uint256)", "aa3022d0": "settotal(uint256)", +"aa302753": "setMinPriceUpdatePeriod(uint256)", +"aa30298c": "mintLength()", +"aa3053b0": "redeemMulti(address[],uint256[],address)", "aa306d79": "voteForCandidate_(uint256,address)", +"aa308399": "eatSandwichMemory(uint256)", "aa30abf1": "crowdsaleBurnAddress()", "aa30b7e3": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[],address[],uint256)", +"aa30f1d8": "provable_gas_limit()", +"aa3119ee": "incomeRate()", +"aa31347a": "isNodeAddressesInGroup(bytes32,address)", +"aa313b08": "setOpenStrategy(uint256)", +"aa3166b4": "setParamSetter(address)", +"aa317dc0": "forceLiquidate(address,address)", +"aa318a2e": "tokenaddrToChainlinkETHOracle(address)", "aa31aee8": "getLockTime(address)", +"aa31c70c": "initialize(address,bool,address,string,string,address,bytes32[])", "aa31e4a0": "setSelfHybridizationPrice(uint256)", +"aa31f053": "emergencyUnstake(uint256[],uint256[])", +"aa3247bb": "setMyGoal(string)", +"aa324e49": "setReferralShare(uint256)", "aa33171f": "newPromotion(string,string,string,uint256,uint256,uint256,uint256)", "aa332032": "NewRound(string,bytes32)", +"aa336b19": "_withdrawComm(uint256,address)", +"aa339b38": "generalDetails()", "aa33ab1b": "getVoted(uint256)", +"aa33e945": "removeProtocolFactory(uint8,uint8,uint8)", +"aa33fedb": "userLocks(address,uint256)", "aa3435c0": "setTokenInformation(string,string,uint8)", +"aa34a84d": "getStakingAmountByPoolId(uint256,address)", "aa351cf5": "triggerShutdown(uint256)", "aa352ca4": "withdrawOffer()", +"aa3542ab": "playerPacketsCapOf(address)", +"aa356b77": "last10Addr()", +"aa359404": "getUnstakeRequestLength(uint256)", "aa3633f3": "CreationFailedEvent(address,uint256,string)", "aa366290": "forfeit(uint8)", "aa367664": "fundingMaximumTargetInWei()", @@ -97329,250 +178204,480 @@ "aa36b52e": "_updateNeeded(uint256,uint256,uint256)", "aa36cdfc": "getPlayerHistory(uint256)", "aa3744bd": "recipient1()", +"aa37dca2": "totalApprovedLoan(uint256)", "aa3801d8": "getTokenAddress(bytes)", +"aa382afa": "getCompanyReleasable()", +"aa38475c": "set_lp(address)", +"aa38698b": "setWallet(uint256,address,uint256)", +"aa388af6": "supportsAsset(address)", "aa391317": "returnUnsoldSafeMedium()", +"aa39dfa9": "memberChild(uint256,uint256)", +"aa39e498": "setOwnerOnce(address)", +"aa3a4dcd": "minTokenHoldRewardsMultiplier()", "aa3ad4e4": "validate(address,address,uint256)", "aa3aef50": "purchaseTicket(uint16,uint16[])", +"aa3b296c": "ticketProxyFactory()", +"aa3b2ecb": "_maxValueRate()", "aa3ba179": "widthraw()", +"aa3c2878": "addCertificado(string,string,string,string,string,uint8)", +"aa3c7456": "ownershipamt(uint256)", +"aa3cdd2f": "voteTally(address,bool)", "aa3dacac": "sideBetPercent_MAX()", "aa3eb769": "sendPTokenFrom(address,uint256,address)", "aa3ec0a9": "cid()", "aa3ef248": "postFact(bytes16,address,string)", +"aa3f1291": "nativetoken()", "aa3f5087": "AuctusPreSaleDistribution()", +"aa3f50dc": "getDeliveryTerms()", +"aa3fbf7f": "checkUserPack2Exist(address)", +"aa3ff017": "numToName(uint256)", +"aa4025cc": "get48Bytes()", "aa404876": "RedBlueToken2()", +"aa40f500": "getCurrentProposalVotes(address)", +"aa41d3b3": "setCappedSupply(uint256)", "aa41d605": "_estimateWeight(uint256,uint256,uint256,uint256,uint256)", "aa421944": "setMaxVeriAmount(uint32)", "aa430e64": "setTotalPhases(uint256)", +"aa45026b": "_devFee()", +"aa452fa6": "requestLoan(uint256,uint256)", "aa4537b2": "referredBonusRate()", "aa454e9c": "setBuyer(uint256)", +"aa457325": "setWEth(address)", +"aa459666": "_recipent()", "aa45b11e": "setReferralAddressShare(uint256)", "aa462a5a": "whenGameDies()", +"aa464437": "getKOTHBonusPercentage()", +"aa46a400": "_tokenIds()", +"aa46e139": "toonContracts(uint256)", +"aa475a7d": "FLOAT_VALUE()", +"aa481f84": "getUPSTotalSupply()", +"aa483e7c": "permitTimelockToBeReverted()", "aa4859fd": "newBookingfc(uint256,address,uint256,uint256,uint256)", "aa487f49": "PRESALE_PERCENTAGE_1()", +"aa48b575": "_updateLiquidity(address,address,uint128,uint256)", +"aa48db20": "buyCompleteSets(address,address,uint256)", "aa4925d7": "subscribe(uint256,uint256,address)", "aa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", +"aa4a3018": "priceFeedsETH(address)", +"aa4a9348": "showRefund()", "aa4abe7f": "setMaxRate(uint256)", "aa4ac835": "exportTankResetEarning(uint32)", +"aa4b10d1": "getBurnFee()", +"aa4b3010": "approve_238(address,uint256)", +"aa4b3e4b": "setReserveTarget(uint256)", "aa4b4d0b": "test_v0()", "aa4b62f3": "initData(address,uint256)", "aa4b980e": "phase_1_bonus()", "aa4bdd3b": "realEtherCapHash()", +"aa4c37d2": "confirmMaster()", +"aa4c4cc1": "setTicketPrice(uint256,uint256)", "aa4cb547": "setMultihash(bytes32,bytes)", "aa4cc01f": "checkIfCancelled(bytes32)", "aa4cd810": "addMeterPoint(address,int256)", "aa4ce2c6": "blockDotBlockHash(uint256)", +"aa4cfe12": "GOLD_BOX_PRICE(uint256)", "aa4d4213": "getOldAllowance(address,address)", "aa4d490b": "registerNameXaddrFromDapp(address,bytes32,address,bool)", +"aa4de15b": "getTimestop()", +"aa4df9ad": "nextN()", +"aa4e152d": "setMetaData(address)", +"aa4e52b1": "seeETH()", "aa4eaa72": "addToPreSaleWhitelist(address,address)", "aa4ee730": "LastRiskPrice()", +"aa4f2653": "plans(bytes32)", +"aa4f3c81": "socialList(uint256)", "aa4f6012": "addSupply(address,uint256)", "aa4f861f": "getInvestorInforMax(address)", +"aa4f95ea": "upgrade(address,address[],address[])", +"aa4fbf4a": "setStrategy(address,address,bool)", "aa4fc0a1": "Talius()", +"aa4fce20": "percentage_unit()", +"aa50c7e9": "xUSD()", +"aa50ec8f": "MP_FEE()", "aa510c8c": "getLinkToPostId(string)", "aa513c71": "updateInfluencer(string,address,uint256,address)", "aa51793c": "isLosingBet(uint256)", "aa525c55": "removeMilestone(uint8)", +"aa526bb2": "distributeTokensManual(address,uint256)", +"aa528228": "stakeDNyanV2LP(uint256)", +"aa528513": "paidMegaPoolGain(uint32,uint256)", "aa52a251": "transferSnowflakeBalanceFrom(string,string,uint256)", +"aa52ead8": "getMarketResults(uint256)", "aa52fbd4": "period2Denominator()", +"aa53099d": "unlockFunction(uint8)", "aa534161": "releasedTeamTokens()", +"aa5378c1": "externalApprove(address,address)", +"aa538673": "_getModule(bytes32)", "aa53d504": "Bounty()", "aa53d7d4": "gettotalReceivedTicket()", +"aa53dbe8": "groupsAdmin(uint256)", "aa541c9f": "unfroze_contract()", +"aa54822e": "isExistBeneficiary(address)", "aa54abb1": "setLSEscrowContractAddress(address)", "aa54ad35": "tokenSaleAddr()", "aa54e040": "change_rate(uint256)", +"aa553b61": "repayBorrowBehalf(uint256,address)", +"aa556095": "timeMultiplier(uint256,uint256)", +"aa556f0a": "buySubscription(address)", "aa5581ef": "weiMaximumLimit()", "aa5583d7": "Connections()", +"aa558ef0": "increaseTotalAmounts(address,address,address,uint256,uint256)", +"aa5598e6": "savedPos(uint256)", "aa55a1a2": "giveAdditionalTokens(address,uint256)", "aa55b55f": "getCardTypeInfo(uint256)", +"aa561f9d": "changeAuthorized(uint256,address)", "aa56c8e7": "isCrowdsaleFinished()", +"aa5724f6": "checkCurrentRewards(address)", +"aa574244": "sellAllBonds()", +"aa579154": "epochIsInitialized(address,uint128)", +"aa58276a": "getNextSqrtPriceFromInput(uint160,uint128,uint256,bool)", +"aa584719": "began()", "aa585d56": "setPrice(uint256,uint256,uint256)", +"aa5882ce": "ShortBTCAllocation()", +"aa589bcd": "saveMyInvestment(uint256,uint256,address)", "aa58d4df": "calculateWinnerGameType2(uint256,uint256)", +"aa58ee35": "percentMaxPayout()", "aa590140": "length(int8)", +"aa595095": "currentAdvisorsPool()", "aa59770f": "sendCreatorByOwner(address,uint256)", "aa59b024": "CROSAIR_SHIP_LIMIT()", +"aa59ed9d": "getallmatches()", "aa59fb7d": "ChemistryCore()", "aa5a11c5": "removeTellerModerator(address)", "aa5a20e5": "setUpgradeAgent(address,uint32)", +"aa5a96f5": "NewGen0Step(uint256)", +"aa5ab16e": "exportCdpPosition(address,uint256,uint256,uint256,uint256)", +"aa5af0fd": "borrowIndex()", +"aa5b641f": "nameToApproved(bytes32)", "aa5b7df8": "marketingTokensWallet()", +"aa5b822d": "AttributeRemoved(address,address,uint256)", "aa5b95d1": "deathFactor_i()", "aa5c02a3": "LETX()", +"aa5c0a68": "__createMarket(uint256,uint256,uint256,uint256,bytes32)", "aa5c3ab4": "rewardBalance()", +"aa5c84a6": "fanyongtoken()", "aa5c88ca": "setFreezePercent(uint8)", +"aa5cb208": "pendingYfsi(uint256,address)", +"aa5d27e9": "redeemExactBassets(address[],uint256[],uint256,address)", "aa5d4719": "getTransferable(bytes20)", "aa5d6d5f": "dropWallet()", +"aa5d977d": "updateArtworkArtist(uint256,address)", "aa5dcecc": "allocator()", "aa5dd215": "doAirDrop(address[],address,uint256[])", +"aa5ddb37": "setTolerancePriceBelow(uint256)", +"aa5dec6f": "unlockAt()", "aa5df9e2": "ownersArr(uint256)", "aa5e2500": "clearProposalNames()", "aa5ebd7f": "removeAddressFromWhitelist(address,address)", +"aa5f5f29": "registerUserInfo(address,string,string)", +"aa5f6655": "AdjudicatorAddress()", +"aa5f7e26": "compound(uint256)", "aa60145b": "cancelPledge(address)", "aa601a71": "setAllowChangePrice(bool)", "aa601e86": "SimpleMultiSigWallet(address[],uint256)", +"aa60e733": "sweep(uint256)", "aa613b29": "authenticate(string)", "aa613faf": "U42Token()", "aa616da1": "addSkillNames(address,bytes32[],address)", "aa617f25": "getAdUrl(uint256)", "aa61924a": "CREATE_VERSION_ROLE()", +"aa61aea4": "distributeMars(address,address,address)", "aa61fc58": "getAirdropList(address)", "aa620192": "today(uint256)", "aa6217eb": "getMaximumContributionPossible()", "aa628c31": "timelock(address,uint256)", +"aa62a812": "CONTRACT_METADATA_TELLER()", +"aa62b2ac": "setPNRFee(uint256)", +"aa62fe4a": "Decompose(uint256)", "aa63dea4": "dateMainStart()", "aa646ebb": "_mint(address,uint256,uint128)", "aa647673": "getKingPoints()", "aa64c43b": "transferPool(address,address,uint256)", +"aa64cca5": "__getKyberMaskAsset(address)", "aa64f3c6": "addWhiteListed(address[])", +"aa654e45": "indexOfEthSent()", "aa656a3a": "updateGameMoney(uint256,uint256,uint256,uint256)", "aa657658": "setMigrationGate(address)", "aa657815": "takeoffer(uint256,uint256)", "aa65a6c0": "getTokenWithId(uint256)", +"aa65b66e": "updateStableDebtToken(address,address)", "aa65c1f1": "WinningOutcomeDeclared(uint8)", +"aa65e817": "createRun(string,uint32,string)", +"aa6637dd": "mars()", "aa66797b": "RESERVE_SUPPLY()", +"aa668775": "withdrawForUser(address,uint256,address,uint256,uint256)", +"aa66bfb9": "userTime(address)", +"aa66f051": "tbtc_crv()", +"aa66fba0": "wallPerBlock()", +"aa673c47": "issueMaxNomins(bytes4)", +"aa676f54": "tokenPercents()", "aa677354": "register(address,address)", "aa67bc04": "eraByName(bytes32)", "aa67c919": "depositFor(address)", "aa682682": "startBuyTime()", "aa68894b": "ownerWithdrawAccount(address)", "aa692151": "fbytes32(bytes32)", +"aa6a3c74": "receivePayment(address,uint8)", "aa6aca58": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint8,uint8)", +"aa6b05e3": "airdrop_threshold()", "aa6b5d9f": "ElyToken(address,bool)", "aa6b631a": "getSetting(string)", +"aa6bc63e": "transferRequest(uint256,address,uint256,uint256)", +"aa6bc911": "BoardSizeIncreased(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "aa6be303": "debtors(address)", "aa6bf687": "calculateBonus(bytes32,uint256)", "aa6ca808": "getTokens()", +"aa6cd436": "_luckyRewardsTotal()", +"aa6d3b4d": "Ranks_wallet()", +"aa6d5d29": "setLeaderAward(uint256[15])", "aa6d5dce": "_withdrawAllFunds()", "aa6d7de4": "Hash()", +"aa6dea84": "getQueueTownTokenRequests(uint256)", +"aa6e2a72": "createOrder(string,string,address,address)", "aa6e4858": "VoteAdvertisement(uint256,address)", "aa6e6539": "chkUserDetails(address,address)", +"aa6e8651": "getDailyAPY()", +"aa6e90c0": "createRequest(string,uint256)", "aa6ebdcb": "numberOfDAppNodePackages()", "aa6f5bb6": "setCreateDigitalArtFee(uint128)", +"aa6f6082": "oracleWhiteList()", +"aa70a07f": "totalStakedByPoolId(uint256)", +"aa712571": "dynamicGains(address)", +"aa723bb7": "getGem(uint256)", "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)", +"aa73b6e0": "getRewardDebtByPool(uint256)", +"aa7415f5": "transferOut(address,address,uint256,uint64)", "aa743c85": "sixMatchPayoutInPercent()", "aa74c9fc": "addressToURI(address)", "aa74fad8": "buyNewInfra(uint256)", "aa7517e1": "minimumBond()", +"aa754a2a": "accountsSynthLoans(address,uint256)", +"aa75de60": "executeERC721Trade(uint256)", "aa7618d5": "increaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", "aa7622c7": "finalizeSecondStage()", "aa7629ab": "withdrawDRPS(uint256)", +"aa7631c1": "input_address(address)", "aa76994d": "numOverthrows()", +"aa76bb71": "_setReward(uint256)", +"aa76bfc5": "queue(address,uint256,bytes,uint256)", "aa772fa0": "WinningEvent(address[],address,uint256)", "aa775278": "deallocateBalance(address)", +"aa779a53": "userInfoMap(address)", +"aa77b701": "getTamagTrait(uint256)", "aa77f26c": "vestedAmount(address,address)", +"aa782002": "startAirdropISLA(uint256,uint256,uint256,uint256)", +"aa784366": "claimBTC(uint256,string)", "aa78a883": "BDP()", +"aa78b723": "tryConvertLength(uint256)", "aa79376e": "updatePlayersCookie(address)", "aa799fdc": "ZeroxDinar()", "aa79bc02": "maxTrophies()", +"aa79e8fa": "registerBalanceWithOracle(address,address,uint256,uint256)", +"aa7a07e9": "withdrawRewardToken()", +"aa7a30a0": "getBlockPower(uint256)", "aa7a7744": "isRegisteredPair(address,address)", +"aa7a88ee": "START_POINT()", "aa7abc8d": "sellWonder(uint256,uint256)", "aa7b6c59": "wirteData(string)", +"aa7b6eb9": "getUserTotalReturnRate(address)", "aa7bc1c0": "createTokenFunctions()", +"aa7bc332": "_tcoreWBNBPair()", "aa7be9a7": "watchVideoA(address)", "aa7ca464": "didReveal(address,uint256)", +"aa7d0cbf": "calcOfferLimits(bool,uint256,uint256,uint256)", "aa7dcd84": "testUpdateAuthorityEvent()", +"aa7e0d9e": "oracleEpoch3()", "aa7ebf43": "level_1_percent()", "aa7f6a3f": "AirdropList(address[],uint256[])", "aa7f6a61": "newPurchase(address,uint8,uint8,uint32)", +"aa8045c8": "KycVerified(address,address,bytes32,uint256)", "aa804a80": "jdouble(uint256,uint256,uint256)", +"aa8062ef": "bundleId()", "aa80eec8": "testCheckRokBounty()", "aa8116be": "fundedPrincipal()", +"aa8137d9": "cycleStakePoolOf(address,uint256)", +"aa819057": "getRepaymentAmount(address,uint256)", "aa81f862": "numDepositsSigned(bytes32)", +"aa8201e7": "mockLock(address,uint256)", +"aa825486": "MaxETHInvest()", "aa82635d": "allocateManualMintingTokens(address[],uint256[])", +"aa82ac66": "swapAndBFIEnabled()", +"aa82b592": "allCards(uint256)", +"aa82df30": "safeLength()", "aa833a25": "TheTokenC()", +"aa847dcf": "setAirdropAddressWasClaimed(address,bool)", "aa848ee2": "setPrivateList(address)", +"aa849244": "energy()", +"aa849df8": "recoverERC20Approve(address,address,uint256)", "aa84d4b1": "whitelistOff()", "aa84edb8": "MYDLToken()", "aa85048a": "TotalCrowdsaleSupply()", "aa8596ea": "setGalleryFivePrice(uint256)", "aa863759": "addtoTechOperation(address,address,uint256,uint256)", +"aa864461": "approve_133(address,uint256)", "aa864e49": "remainingPoolOptions()", "aa8675d1": "singleIDXMQty()", "aa8676b2": "gameDividendOf(address)", "aa86fbc5": "HETCCStandardToken(uint256,string,uint8,string)", "aa8713dd": "secondWeek()", +"aa8757bb": "Spin(address,uint256)", "aa877470": "isInsurance(address)", "aa879119": "allowApprovee(address,bool)", "aa87af1e": "voirMessage()", +"aa8827e3": "setupAsset(address,uint256,uint256)", +"aa8862ba": "MGM()", "aa88bb5b": "resolveDispute(uint16,address,address,uint8)", "aa89376a": "Example2(string)", +"aa8981c4": "_mintedKeys(bytes32)", +"aa898593": "registerNode(string,uint192,uint64,uint256)", +"aa89ae4b": "foo11(address,uint256[])", "aa8a0002": "raiseLimit()", +"aa8a6974": "refundee(address)", +"aa8acdfd": "lockupAccount(address,uint256)", "aa8b20f6": "getAvatar()", +"aa8b2ea7": "BLACKLISTED()", +"aa8b4456": "BunnyBuy(uint32,uint256)", "aa8b76ea": "reclaimDividend(uint256)", "aa8b99d2": "length(uint256)", "aa8c217c": "amount()", "aa8c5324": "prolongate()", "aa8d11e3": "ThirdPartyVoter()", "aa8d715d": "itemBalance(address)", +"aa8d8e7b": "widthdraw2(uint256)", "aa8dc41e": "vriesorexContract()", "aa8dd5a1": "GRForGas()", "aa8dde58": "Repost(bytes32,bytes32,uint256)", "aa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", +"aa8e358d": "getStudents(address)", +"aa8e72c0": "usdtFee()", "aa8e8fb0": "LTKN()", +"aa8ea3a0": "setAMM(address)", +"aa8ea80a": "mechs()", +"aa8ed410": "markContractCompleted(address)", "aa8f0269": "ScicoinsICO()", "aa8f027b": "isEmoji()", "aa8f365c": "test_invalidProposalValue()", "aa8f44ec": "isSaleAddr(address)", +"aa8f6ca1": "pendingBanana(uint256,address)", +"aa8f6d3d": "setTimes(uint256,bool,uint256,bool,uint256,bool,uint256,bool,uint256,bool)", +"aa900754": "compRate()", +"aa905700": "squirrels(address)", +"aa90887a": "removeTokenAdapterName(bytes32)", "aa908e3f": "closeContract(bytes32,bytes8,uint256,uint32,uint32,uint64,uint64,bytes32)", +"aa908e61": "createD()", +"aa908f42": "getPublicOwner(address)", +"aa90b7f1": "faucet(address,string,uint256)", +"aa9126e4": "novaEmissao(address,uint256)", +"aa915e69": "grossAmountSwapped()", +"aa916447": "getInboxActiveProcess(address)", +"aa91c4f6": "allDecimals(address)", "aa91cc61": "rodToken()", "aa91d5c5": "HappyEnding()", +"aa91ebb0": "customerAddress(uint256)", +"aa91f15b": "fallbackArbitrator()", "aa9224cd": "withdraw(uint32)", "aa9246ef": "_parseIntScientific(string,uint256)", "aa93038b": "reward_total()", "aa931697": "minNac()", "aa93334d": "currentPeriodStartBlock()", +"aa9354a3": "epochStart(uint256)", "aa9449f2": "Test(address)", "aa9454b5": "transferAndBuy(address,uint256,uint256,uint256)", +"aa94a2db": "onNewPlayer(address,uint256,uint256)", +"aa94e1d4": "_totalSupplyAt(uint256)", +"aa951430": "setFunctionDelay(address,bytes4,uint256)", "aa954845": "isConfirmed(bytes)", +"aa95872a": "addToContract(uint256)", +"aa9606eb": "getAcctsLength()", +"aa9667e8": "setBonusTokens(uint256)", "aa9669c1": "roll(uint256,bytes)", +"aa9700c5": "recoverExcessToken(address,uint256)", "aa974eff": "multitokens(uint256)", +"aa981e65": "setPowerStragegy(address)", "aa985a63": "distributeWei(uint256,uint256)", "aa98a41a": "setGenesisAddressArray(address[],address)", "aa98d57b": "calcCollectedFee(uint256)", +"aa98df39": "propose(string)", "aa99474f": "authorized_changeOwnership(address,address,uint256)", "aa994ab8": "transferGIM(address,address,uint256)", "aa999b4c": "mixDna(uint256,uint256,uint256)", +"aa99a5e6": "setProxiable(address)", "aa99ebb6": "CheckTimestampsDuringOneDay(address)", "aa99f4d0": "teamTwoId()", +"aa9a068f": "getDeployedContracts()", "aa9a0912": "mulDiv(uint256,uint256,uint256)", +"aa9a196f": "updateAPY(uint256,uint256)", "aa9a2cf0": "host_percentage()", "aa9a79f2": "SubBankerPrincipal(uint8,uint256)", "aa9ad331": "NEON()", "aa9b5ba8": "getPaidDIVDSchedule()", +"aa9ba5ec": "createPO(string,string,string)", +"aa9be846": "blocksBeforeSemiRandomShoot()", +"aa9cc858": "get_prorio()", "aa9cdaf4": "coinAge(address)", +"aa9d2d8d": "NewRoads(address,uint256,uint256,uint8,uint256)", +"aa9d8b49": "getDecimalsOut()", "aa9e40e0": "confirmDebt(uint256)", +"aa9f235d": "freeETH(uint256,uint256)", "aa9f3666": "ClassicToken(string,string,uint8,uint256)", "aa9f37f0": "purchaseContract()", "aa9f5477": "Nursicoin()", +"aa9f6217": "deactivateVault(address)", "aa9fa274": "addExtraReceiver(uint256,address)", +"aa9fbe02": "DELEGATE_BY_TYPE_TYPEHASH()", "aaa006b2": "countPlayer()", "aaa04812": "presaleEthAmountsProcessed()", "aaa05e20": "cityTransferResources(uint256,uint256,uint256,uint256)", "aaa08e9b": "testBonus()", "aaa0f5cc": "userAlreadyBoughtEth(address)", +"aaa117ad": "windowSize(address)", +"aaa14ca3": "renounceMembership(uint256)", +"aaa1f91d": "setAddTokenData(address,uint256,uint256,uint256)", "aaa24d31": "deathData_f7()", "aaa2b78f": "allowedWithdraw()", "aaa2b8c8": "rootAddress()", "aaa2fe13": "getMin(uint8[])", +"aaa33e0a": "claimAllTimeRewards(address)", +"aaa363c9": "altarRecords(uint256)", +"aaa36eb4": "usdtBalance(address)", +"aaa39fe4": "setInitialPoints(uint256,uint256,uint256,uint256)", "aaa3de26": "getUsersInfo()", "aaa40bc7": "TUXToken()", "aaa44e5c": "getAllIds()", +"aaa46688": "depositors()", +"aaa48e9f": "govTokensIndexes(address)", +"aaa4eb84": "NoBingoWords()", "aaa51ec6": "setStoreAddress(address,address)", +"aaa520fd": "Unpause(uint256)", "aaa5a02a": "claimTimeout(bytes32)", "aaa5ad61": "getTokensAvailable()", "aaa5c431": "editMemes(uint256,string,string,string,string,uint256)", +"aaa626b6": "reward_integral()", "aaa668aa": "getUserTenantId(address)", +"aaa677ef": "getBlockFCD(uint256,bytes32[])", +"aaa6aeff": "approveValueOne(address,uint256)", "aaa6bc40": "removeWhitelistedUserAddr(address)", "aaa7062b": "posShare()", "aaa71e45": "mininglock()", "aaa7744b": "_subjectToFees(address,uint256)", "aaa77f55": "wuxiaMaster()", +"aaa78dca": "getRabbitSirePrice(uint32)", +"aaa796e7": "SetSponsor()", +"aaa7b9df": "swaETHForTokens(uint256,address[],address,uint256,address)", +"aaa7f0ca": "getTrancheARPB(uint256)", +"aaa84f65": "timetravelsScalingFactor()", +"aaa91a68": "saiPip()", "aaa99809": "FlatPricingExt(uint256,bool)", +"aaa9bc58": "sedoXAddress()", "aaaa3218": "EmpireCrowdsale(uint256,uint256,address,address,uint256,uint256,uint256)", +"aaaabde5": "catnipAddress()", +"aaaac462": "degeri_yazip_tikla(uint256)", +"aaaadb58": "unitToExpire(uint256)", "aaab3025": "replaceAbility(uint256,string,bool,uint8,uint8,uint8,uint256,uint256)", "aaab51c9": "close(uint256,bytes,uint256,uint8[],bytes32[],bytes32[])", "aaabdf16": "reputationIRNNodeShare()", @@ -97581,37 +178686,68 @@ "aaac6539": "withdrawRepaidLoan(address,address)", "aaac8040": "referralAmount(uint256,bool)", "aaac9718": "package()", +"aaaca558": "lendingToken()", "aaad0c84": "isExisted(address)", "aaadc832": "isRedeeming()", "aaae05b2": "approvePreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"aaae43cc": "replaceMultLP(address,address)", +"aaae4ee8": "callMeWhatYouWant(uint256,uint256,uint256,uint256,uint256)", "aaae7799": "insertUser(uint256,bytes32)", "aaaea138": "testFailBurnWhenStopped()", +"aaaec98c": "getDepositPeriodStart()", +"aaaf7eaf": "inviteUserInfoV2(address)", "aaaf8a52": "approvePrimordialToken(address,uint256)", "aaaf9595": "_generateTokens(address,uint256)", +"aaafae4a": "CapSMTX()", +"aab01873": "withdrawStuckTokenOnControlled(address,address,address)", "aab0395b": "LandToken()", "aab065e8": "LifChannels(address,uint256)", "aab14d04": "orderState(bytes32)", +"aab159f7": "getTestaFarmBalance()", +"aab1867f": "dueDateOf(address)", +"aab1d2cd": "concatenate(string,string,string)", +"aab1e9c7": "_getDTokenSymbol()", "aab27ad1": "depositaCaucao()", +"aab2883e": "Meteor(uint256)", "aab324ae": "transferAnyERC20Token(address,uint256,address)", "aab32cfa": "VerifierRegistry(address,uint256)", +"aab38aa6": "goldKeyRepo(address)", +"aab3e059": "Owner_SetParam(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"aab3f868": "liquidate(address,address,address,uint256)", "aab402e5": "toggleSale(bool)", "aab40661": "_fishAquarium(uint256)", +"aab483d6": "setMinimumDepositAmount(uint256)", +"aab4fa2b": "DisabledModule(address)", "aab52c33": "initGameTeam(uint8)", "aab60ebc": "totalLockedRewardsOf(address)", "aab633dc": "private_setmaxRoll(uint256)", "aab6606e": "BalanceEth()", +"aab68bdb": "mintFor(address,uint256,uint256)", "aab725b3": "icoTokensSold()", +"aab7403e": "releasedAngelSales(address)", "aab75253": "StaffPicks()", "aab78bf5": "compensateLatestMonarch(uint256,uint256)", +"aab7954e": "Whitelisted(address)", +"aab7b087": "recoverSignerHash(bytes32,bytes)", +"aab86a9e": "WAIFUSION()", +"aab88600": "withdrawMegaPoolGain(uint256)", +"aab894e5": "creamPerBlock()", "aab8c476": "ABCXYZBBTT()", "aab8f6e0": "airdropBy0Eth()", +"aab91179": "getorder()", +"aab954d0": "initialize(uint256,uint256,uint256,address,address)", "aab99609": "ApaAjaToken()", "aab9f165": "processPayment(uint256,uint32,uint32,uint256)", "aaba2fb8": "UnicornRanch()", "aaba3e3b": "getSymbol(string)", +"aaba5781": "wbnbToCrowRoute(uint256)", +"aabaecd6": "collateralAsset()", "aabb3d61": "MainBridge(uint256,address[],uint256,uint256,uint256)", +"aabb4a66": "reserveTokensLimit()", +"aabb763e": "removeLiquidityForAccount(address,address,address,uint256)", "aabbb8ca": "getInterfaceImplementer(address,bytes32)", "aabbd0ce": "approveNewShorter(address)", +"aabcad82": "disburseRewardTokens()", "aabd3904": "isCreating(uint256)", "aabd46e3": "getMintRequestStringMap(uint256,int256,string)", "aabd5b88": "_sold()", @@ -97622,67 +178758,123 @@ "aabe2fe3": "currentWinner()", "aabe7dc4": "unlockRewardToken(address)", "aabecb89": "setRate10(uint256)", +"aabee0b8": "approve_409(address,uint256)", "aabf05cf": "set_presale_iconiq_arbits_per_ether(address,uint256)", +"aabf091d": "transferOracleOwnership(address)", "aabf382b": "upgradeLevel(uint8)", +"aabf4c6d": "Changeownerlog(address)", "aabf901a": "Distributor(uint256,address)", +"aabfedd0": "claimableReservation(address)", +"aac0b776": "recountPlanetResourcesAndUserKnowledge(address,uint256)", "aac0d9c2": "CompanyReserve(address,uint256)", "aac0e4c5": "getPendingSignatureStatus(address)", +"aac1306f": "swapOldPBRToNewPBR(uint256)", "aac1335c": "tgeSettingsMaxStages()", +"aac19fc2": "balanceOfPositions(address)", "aac1b0b7": "safeExchange(address,address,uint256)", "aac1c80b": "getCompte_12()", +"aac21cdb": "newlextor()", "aac24374": "setBoxPrice(uint256,uint256,uint256)", "aac2c717": "buyXaddrWithInviteCode(address,uint256)", "aac3e314": "setPrevOracle(address)", +"aac41ed6": "tokenEscrow()", +"aac457ee": "airdroplimit()", +"aac4914c": "fromUInt(uint256)", +"aac4b236": "rewardPaid()", "aac4e3a8": "whiteListingAdmin()", +"aac52c61": "athletesTemp(uint256)", +"aac55b39": "migrate(address,address,uint256,uint256,uint256,uint256)", "aac57b3a": "newAPM(bytes32,bytes32,address)", "aac5ab61": "Crowdsale(address)", "aac5ce9a": "Stakeholder()", +"aac5da5c": "SwitchIsPayble()", +"aac624d6": "openUSDCVault(uint256,uint256)", +"aac628e4": "ThrowSlammer(bytes32,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"aac62e62": "create(uint256,uint256,string,bytes,uint256)", "aac67b05": "changeFactoryUsageFee(uint256)", "aac6ba41": "setModel(address[],uint256[])", "aac746ee": "getNameFromAddress(address)", "aac74c92": "getPI_edit_30()", "aac756b8": "setxiudao(address,uint256,bool)", +"aac7df66": "midnightPrizePercent()", "aac80472": "getManagerAddress(uint256)", "aac81654": "isNoEmptyTranches()", "aac8788a": "setIncrementOpenInterest(bool)", "aac878eb": "approveTransaction(uint256,bytes)", +"aac91216": "getRound1Length()", "aacaa602": "getCurrentAmountBonusRate(uint256)", +"aacaaf88": "execute(address,bytes,uint256,bytes,uint256,uint256)", +"aacaf402": "ChangedAllowedToPurchase(bool)", "aacb15e6": "_validate(uint256,uint256,uint256,uint256)", +"aacb43e1": "test001()", "aacb4442": "repaintVoxel(uint8,uint8,uint8,uint8)", "aacbe4b3": "set_maxUETsPerReturnLessThan(uint256)", +"aacbf88b": "refer()", +"aacc263e": "getOrdersStatus(bytes32[])", "aacc3a16": "printAddress(address[3],address)", +"aacc4d14": "collectRewardAmount()", "aacc5a17": "getRandom()", +"aacc89fa": "IEOAddressSet(uint256,address)", +"aacc9ca1": "_checkSig(bytes32,bytes32,bytes32,uint8)", +"aacd2d3c": "Part()", "aacd572f": "private_setMinRollUnder(uint256)", "aacd5a85": "orderTrade(uint256,uint256,uint256)", +"aacd7321": "getOwnership()", "aacd9794": "setUniqueSpinnerPrice(uint256)", "aacdb27b": "setPixel(uint32,uint32,uint8)", +"aaceb42e": "scheduleAddOperator(uint32,address,uint256)", +"aacec615": "addICOToken(address)", "aacec70b": "createCrySolObject(string,uint256,uint16,uint16,uint8,uint8)", "aacf3f2e": "contributionInCauldronRound(uint8,address,uint32)", "aacf5328": "setVideoID(string,uint256)", +"aacfcbdd": "accept_request(uint256,uint256,bytes32)", "aacfd352": "blockBeforeEncounter(uint256)", "aacffccf": "getAccountOwner(bytes32)", "aad00089": "tokenIssue(uint256)", +"aad01c96": "getAssetManagerEscrowID(address,address)", +"aad049b3": "levelPrice(uint256)", "aad0bb90": "TEMath(uint256,uint256,bool)", +"aad0ec7a": "addClaim(uint256,uint256,address,uint256)", "aad12029": "freezeAccounts(address[])", +"aad13139": "variableStorageConstFor()", "aad13b15": "fight(address,string)", +"aad17010": "changev2Address(address)", "aad2b723": "changeSigner(address)", +"aad33091": "tokenBalances(address[],address)", +"aad33ccd": "unlockByOwner(uint256,address,bytes32)", +"aad393cb": "redeemFromGaslessRequest(address,address,uint256,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "aad3ec96": "claim(address,uint256)", "aad41a41": "multisend(address[],uint256[])", "aad429f1": "_buyCommonTTW(uint256,uint256,address,address)", +"aad44825": "getRewardForAddress(address)", +"aad4717d": "getPercentageUnStaked(uint256)", +"aad48276": "TransferByAdmin(address,address,address,uint256)", +"aad519c1": "buytoken()", "aad52373": "ValidateAndStore(bytes,bytes)", +"aad54691": "game_(uint256)", "aad55726": "getContract(address,uint256)", "aad5632a": "generateNext()", "aad62da2": "left89(uint256)", +"aad6c5c4": "getPriceAAA_ETH()", "aad71040": "changeUnlockTime(uint256,uint256)", "aad7152b": "updateTokenTransferAddress(address)", +"aad7390d": "tokenToEther(uint256)", +"aad7c517": "tknTokensOffered(address)", +"aad7d572": "_addNewToken(address)", "aad83ab3": "SpinTestToken()", "aad85f7c": "setAchievedDate(uint256,uint64,uint64)", +"aad87800": "adjust(uint256)", +"aad8cb68": "district()", +"aad8dfc3": "StartReleasingTime()", "aad935af": "updateSellPossible(bool)", +"aad9973f": "canUserReleaseArtwork(address)", "aad99ef1": "setPriceIncreaseScale(uint256)", +"aad9afbb": "hydroIDAvailable(string)", "aad9afee": "kingsMessage()", "aada1cb3": "activateUniqueSpinners()", "aada4b06": "saleIssue(address,uint256)", "aadad773": "removeServer(uint256)", +"aadb5b37": "ServiceFee()", "aadba3dc": "finishWhen()", "aadbc52d": "addContractMember(address,bytes32,address)", "aadbc5a0": "getMatches(uint256,address,uint256)", @@ -97690,29 +178882,54 @@ "aadc1ac1": "approveLoan(uint256)", "aadc3b72": "hasVoted(bytes32,address)", "aadc8f23": "RogueProtocol(address)", +"aadd0c97": "verificarDocumento(string)", "aadd1b03": "donateEth()", +"aadd21c6": "claim(bytes16,bytes32)", "aade1323": "_processUpdateFee(address[16],uint256)", "aade53fe": "_removeCardSetAtIndex(uint256,uint256)", +"aade79b9": "testSetRiskParameters_CollateralRatioZeroFails()", "aade84ae": "TopIvy()", "aade8dcc": "discountTokenPercent()", "aade9bb4": "icoReturnBonus(uint256)", +"aadee22d": "stakedEthTotal()", +"aadee89c": "privateInvestors(address)", "aadf017e": "_processReserve(address,uint256,address)", "aadf1e73": "selectWinner30()", +"aadf4f97": "dropit(uint256,uint256,uint256)", "aadf6838": "getOldSchoolCoins()", +"aadf9dcb": "setMarketRegistryAddress(address)", +"aadfba05": "onroll(bytes32,bytes32,uint256,uint16,uint16[],address)", +"aae05275": "niuPerBlock()", "aae07890": "setUnit(uint256)", "aae07cd0": "getTokenLayers(uint256)", "aae0ff1e": "incLuckyCoin(address,uint256)", +"aae1807e": "hashMessage(bytes,bool)", +"aae1e640": "volumesSent(address)", "aae1f5c3": "processDonate(address)", "aae233b4": "cleanUpPreviousRound()", +"aae23517": "getOwnerTest1()", +"aae25051": "designatedSigner()", +"aae254d1": "THol(address,address)", +"aae33193": "updateWerewolfAsset(uint256,string)", "aae3d025": "transferClose()", "aae3d031": "enableKYC()", +"aae40a2a": "liquidateBorrow(address,address)", "aae40ddc": "getCurrentClaimerForTile(uint16)", +"aae4b8f7": "isLockManager(address)", "aae4cbe4": "EcoToken()", +"aae5270f": "UNIQUE()", +"aae57f2b": "holdStart(address)", +"aae60e31": "NewRecord(address,uint256)", "aae62507": "getUnavailableValueT(bytes32)", +"aae68a8a": "CoinCreation(address)", +"aae6f8b1": "setMisesLegacyPool(address)", "aae755af": "m_currentUsdAccepted()", "aae764c1": "assertFalse(bool,bytes32)", +"aae7b6f1": "ICO_deadline()", +"aae7ead3": "getCurrentRewardPerBlock()", "aae8312e": "getStakeholderTransactionCount(bool,bool)", "aae8e1b3": "withdrawFlag(address,uint256,uint256)", +"aae91de4": "checkContractStatus()", "aae99c66": "whitelistAddress(address[],bool)", "aae9a4c7": "singleInvestorCap()", "aae9d7ed": "__callback(bytes32,uint256)", @@ -97721,23 +178938,39 @@ "aaea4472": "LifeFactor_ii()", "aaea44c4": "strConcat(bytes,string,bytes)", "aaea53f3": "Channel(address,uint256)", +"aaea8533": "rewardAvailable(address)", "aaeaa36c": "isBatchSupported()", "aaead0f0": "initializeIndividualCapsFundraiser(uint256,uint256)", +"aaead55d": "tapRootConsulting()", +"aaeae5c3": "_approveExit()", "aaeb3255": "getInsuranceIDsByClient(address)", +"aaeb483b": "RateSet(uint256)", "aaec0c03": "FireflyRegistrar(address,bytes32,address)", "aaec2fa5": "getGirlsAuctionPrice(uint256)", +"aaec5061": "isDebtPhase()", "aaecc9cf": "checkGameOver()", +"aaed0b17": "WOLF_4()", +"aaed1552": "TokenRegistered(address,string)", "aaed2c3d": "getRewardRate(address,address)", "aaed31c7": "createCoins(address)", "aaed3c7d": "tokenBuyersAmount()", +"aaedcf2a": "totalPendingPwdr()", "aaee686e": "confirmTransactionFee(uint256)", "aaeea585": "DMToken()", +"aaef2440": "getExternalContractAddress(string)", "aaef36b5": "CorvinusCoin()", +"aaefe0b6": "totTokenBalance()", +"aaf03ca1": "_removeTokenFromDepositList(address)", "aaf04471": "transferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,uint256,bytes)", "aaf05f3d": "f3()", "aaf10f42": "getImplementation()", "aaf13d10": "Wallet3()", +"aaf19058": "cmbstPerBlock()", "aaf20486": "ProofOfLongHodl()", +"aaf2e5d8": "checkMember(address)", +"aaf2fc08": "emitTimeRequestRejected(uint256,uint256)", +"aaf35310": "existTransactionId(uint256)", +"aaf3a696": "isThisToken0()", "aaf3e4f4": "left88(uint256)", "aaf47835": "acceptBuyOffer(uint32,uint256)", "aaf49910": "sanMinLength()", @@ -97746,30 +178979,55 @@ "aaf592bf": "receiveApproval(uint256[])", "aaf5eb68": "PRECISION()", "aaf60eec": "setRoundOneRaito(uint256)", +"aaf69a5d": "firstPercent()", "aaf73ef7": "registeredDeals()", +"aaf7d5b4": "setEthExchangeEnabled(bool)", "aaf7e700": "setResetvalue(uint256)", "aaf809f8": "_isUnique(uint256[],uint256)", +"aaf86c30": "allowedToCatgorize()", "aaf885f8": "getRazInstanceInformation(uint256,uint256)", +"aaf90f0d": "sppID()", "aaf9419d": "latestNewRockForSale()", "aaf9d13e": "buyTopDog(uint256,uint256)", +"aaf9f404": "drawWinner(uint256,bytes32)", "aafa4827": "KOIOSTokenSale(address,uint256,uint256,uint256,uint256,address)", "aafa944e": "createJob(string)", "aafab1e8": "paymentsCount()", +"aafac67c": "butterToLp1Route(uint256)", "aafafbf3": "multiSendEth(address[])", "aafb088e": "stageDuration()", +"aafb96b6": "settleDebt()", "aafba184": "removeShareholderListing(uint256)", "aafbb120": "getSaleInfo(address)", "aafbd3da": "create(bytes32,address,bytes32,bytes32,address,bytes32)", +"aafbde04": "TotalPreSaleTokens()", "aafbe1c0": "NectarController(address,address)", +"aafd5e40": "getImplementationAddress(bytes32)", +"aafd6b76": "getXTransferAmount(uint256,address)", "aafd775e": "getLockedBalanceForUser(address,address)", +"aafd847a": "withdrawnDividendOf(address)", +"aafdae0c": "__Starter_init(address,address,address,uint256,uint256)", +"aafe64c4": "lastNewStakeBlock()", +"aafebd4f": "spendERC20(address,address,uint256,bytes[])", "aaff096d": "updateDarknodeRegistry(address)", "aaff2a83": "totalRemainingTokensForSales()", +"aaffa5dd": "wXEQMinted()", "aaffadf3": "minContribution()", "aaffc4b6": "currentRoundCount()", +"aafff688": "grantMinerRole(address)", +"ab0046ab": "CHARITY_FEE()", "ab004a97": "traded_token_seed_amount()", +"ab00d086": "eggsOwned(address,uint256)", +"ab0138da": "initAgreement(address,uint256,uint256,uint256,uint256,bytes32,bool,address)", +"ab01b469": "register(address,bool)", +"ab01ea73": "mintBridge(address,uint256,string)", "ab021884": "setMinimumPriceFusion(uint256)", "ab022b28": "resetAirdropAmount()", "ab02f27c": "Europium()", +"ab02f857": "ContributedETH(address,uint256,uint256,uint256)", +"ab0309b6": "PollCreated(uint256)", +"ab033ea9": "setGovernance(address)", +"ab03c7a9": "calculatePaymentETH(uint256)", "ab03cf46": "sendFunds(uint256,address,bytes)", "ab03d0e8": "changeUnitsUserCanBuyLimitEth(uint256)", "ab040107": "decline()", @@ -97779,223 +179037,422 @@ "ab05a69a": "InbotProxy(address,address,address,address)", "ab05bfff": "setReleaseTime(uint256)", "ab062643": "getNumTokensPurchased()", +"ab06346c": "redeemMasset(uint256,uint256[],address)", "ab065d6c": "getProjectClient(bytes32)", "ab067a5b": "periodSales()", "ab06bea3": "reportContribution(address,uint256)", "ab06da29": "setUTExchangeRate(uint256)", "ab074225": "BLOOToken()", "ab0783da": "mat()", +"ab07e736": "AllocateTokensForTeam(address,uint256,uint256)", "ab07f054": "getLandPrice(int32,int32)", +"ab08038b": "dailySettle()", "ab080aab": "SecondBiathlonToken(address,address,string,string,uint256,address)", +"ab085ae6": "log(uint256,uint256,bool,bool)", +"ab08c016": "getAugurLite()", "ab08d048": "SPAYToken()", +"ab08d4fc": "stakedTokensOf(address)", "ab08f75b": "getMoneyline()", "ab09ee80": "respond(uint256,uint256,uint256,uint256)", "ab0a9865": "createGen0Dog(uint256)", +"ab0b25b6": "fakeRewardOf(address)", "ab0b29a5": "applySetMaxFeeTrade()", +"ab0b5937": "getAllOngoingContracts()", +"ab0b8f77": "importAddresses(bytes32[],address[])", "ab0ba5d4": "challenge(uint256,bytes32,bytes)", "ab0bcc41": "saleStart()", +"ab0bfba0": "SpendLockedBalance(address,address,uint256)", +"ab0ca0e1": "priceFeed1()", "ab0cba56": "ICO(uint256,uint256,uint256,uint256,address)", +"ab0cca85": "getPatient(int256)", "ab0cd5bc": "createMineForToken(uint256)", +"ab0cd89c": "AddOwnerRequestCanceled()", "ab0ced0e": "checkContribution(address)", "ab0cf8b7": "Wolf()", +"ab0d1856": "usersLog(uint256)", "ab0d92dd": "totalPrice()", "ab0da5a9": "reject(address)", "ab0db220": "createBattle(uint256,uint256[],bytes32,uint256)", +"ab0e14e0": "__uninit(uint256,bytes32)", +"ab0e3bde": "usingYears()", "ab0e6765": "setEmployer(address,address,string)", +"ab0e9608": "buidlAddress()", "ab0eda9e": "setAirdropAddress(address)", +"ab0ee2ac": "showReward()", +"ab0f20c4": "transferFromBlacklist(address)", "ab0facc0": "raiseLimit(uint256)", "ab0fd373": "matchTimestamp(bytes32,bytes32)", "ab0fe874": "purchaseCap()", +"ab100e82": "setpercentForCharity(uint256)", "ab108915": "createUser(address,bytes20,uint64)", +"ab1094c0": "rewardTrader(address,address,uint256)", +"ab116318": "bonusReferrer()", +"ab1183e0": "canCreateAnotherEdition(address)", "ab1193fa": "PREMINE_ALLOCATION_ADDED(address,uint256)", +"ab1196a4": "destory(string)", "ab11ebdd": "returnIcoTokens(address,uint256)", +"ab11f776": "removeNodeFromSchain(uint256,bytes32)", "ab127a0c": "searchBestRate(address,address,uint256)", +"ab12f464": "cane()", +"ab13044a": "pauseTransferToNativeTargetAddress(bool)", "ab1377c0": "startSeedStage()", +"ab13ef12": "getLastCreatedEpoch(address,address)", "ab14a41f": "reentrancyHelper(address,bytes,uint256)", +"ab14ec59": "previousRegistrar()", "ab150226": "checkAdmin()", "ab1547d2": "nextOpenRewardTime_()", +"ab15985d": "setIntValues(bytes32,bytes32[],int256[])", "ab15d70c": "updateFifthExhangeRate(uint256)", +"ab15dd73": "artExists(string)", "ab15f723": "pauseMints()", +"ab163c31": "userMsBankRewards(address)", "ab165623": "TalentEducationToken()", "ab165831": "checkContractAddress(address)", "ab166a48": "addHistory(address,uint256[4])", "ab16cef1": "addBigPromoBonus(uint256)", +"ab16dfd4": "calculateRewardTesting(uint256,uint256,uint256)", +"ab171586": "EthMaxContribution()", "ab17176c": "VCCToken(uint256,string,string)", "ab172cf5": "getCandidateByIndex(uint256)", +"ab175a4d": "oracleRoundState(address)", +"ab178558": "userRatingProgressPerSec()", "ab179e9f": "currentReleaseCeiling()", +"ab17ae2c": "_heartbeat(uint64)", "ab17bad0": "setGasConsume(uint256)", +"ab17d040": "protos(uint256)", "ab18af27": "setDepositAddress(address)", "ab18f6ac": "parseTimestampToYM(uint256)", +"ab19509c": "unregisteredFees()", +"ab1956c1": "maxPurchasableTokenPerWallet()", +"ab1956e1": "uintToBytes(uint32)", "ab19d396": "couponTokenCampaignAddr()", "ab19fff9": "TokenFrank()", +"ab1a4d94": "claimDuration()", "ab1a84da": "isCrowdfundCompleted()", +"ab1aa9c2": "getTotalTradedByUser(address,uint256)", "ab1ac9f6": "BITSDToken()", "ab1b1cb5": "getSubscriptionLastPaid()", "ab1b3830": "EIForceCoin()", "ab1b75f2": "burnUnpaidTokens()", +"ab1bbeca": "capacity(uint256)", +"ab1be686": "getAddressETH()", +"ab1becf5": "ClaimRemoved(address,address,bytes32,bytes32,uint256)", "ab1bef4e": "getDailyTickets(address)", +"ab1c6322": "_isConditional(uint256)", "ab1d3add": "assignDispute(string,address,string)", "ab1d581b": "checkPet(uint64)", +"ab1d9988": "saffron_LP_token_info(address)", +"ab1e9122": "strategiesArray(uint256)", "ab1e96e9": "migrationPeriod()", "ab1ebb4d": "OneMillionToken()", +"ab1eedb2": "changePartner(address)", +"ab1f5d46": "generateDegree(string,string,string,string,uint256,uint256)", "ab1f7929": "setMigrationInfo(string)", +"ab204282": "revokeSender(address)", "ab207628": "getAffiliateAmount(uint256)", "ab209e23": "Manifesto(uint256,uint256)", +"ab20f58c": "Fog()", +"ab2181c2": "dbg_stabilizingFee()", "ab2191a2": "Satanshi()", "ab21b055": "getTickets(string)", "ab21d58a": "enableCharity()", +"ab2217e4": "getPairsByIndexRange(address,uint256,uint256)", +"ab221a76": "settler()", "ab225edc": "DepositFund()", "ab22a640": "getVideoGameOwner(uint256)", "ab22c561": "getVestingCliff(address,address)", "ab231511": "lastWithdrawTime()", +"ab23c345": "safeExecute(address,bytes)", "ab23c50d": "AirDropAFTK3SeptSandBox()", +"ab23e6fd": "createSale(uint256,address,uint256,bool)", +"ab24da7b": "setUnirouterPath(address,address[])", "ab250cb5": "addSubcontract(address)", "ab253ca6": "buyMinions(uint8)", +"ab2563d9": "emergencyOwnerWithdraw(address,uint256)", +"ab25a66f": "gcs()", +"ab25bddc": "_BITGOLDTokenBalances(address)", +"ab261038": "SetPublisherCut(uint256,uint256)", "ab2643a1": "commitCollateralToPool(address,uint256)", "ab273016": "signProposal(uint256)", +"ab27805b": "distributeLostFunds(address[])", "ab27be20": "mine(address,uint256)", "ab27d755": "confirmOrder(bytes16)", +"ab27da19": "approve_770(address,uint256)", "ab282655": "removeHouse(address)", +"ab282881": "ccs(uint256,uint256)", +"ab282bba": "calculateMintBORAmount(bytes32,uint256)", "ab2874cb": "buySlot(uint256)", "ab28c704": "initialSupportAmount()", "ab28e8af": "serviceTokensBurn(address,address)", +"ab292f9b": "_repayLiquidatedLoan(address,address,uint256)", +"ab2a0b03": "unindex1()", "ab2a4f8a": "transferRevenue(address,address,uint256)", +"ab2a53df": "OnwersNumber()", "ab2a5772": "setIcoHardCap(uint256)", "ab2a6dc1": "dealsGetter(address,uint256)", "ab2af349": "CallCancelled(bytes32)", +"ab2b04cf": "updateWhitelist(address,address)", +"ab2b3137": "current_price()", +"ab2be726": "airdropContract()", +"ab2bfc9e": "getLastRound(address)", +"ab2c1139": "ccdeal(address)", +"ab2c359c": "PR_ADVERSTISING_SUPPLY()", +"ab2c7776": "graph(address)", "ab2c8b16": "fundingLowcapReached()", +"ab2c9d75": "bzrxTokenAddress()", +"ab2e0d03": "harvestDmgByUserAndToken(address,address,address)", +"ab2e1262": "go(address,address,uint256,uint256)", "ab2e5a1f": "play(uint256,uint256,uint256)", +"ab2e710f": "setRouter(address,address,address)", "ab2ebcf1": "priceExpirationInterval()", +"ab2f0dda": "RejectApplication(string)", "ab2f0e51": "availableBalance()", +"ab2f1cf8": "buyHEX(uint256,uint256)", +"ab2f9d8a": "ViewProducts(uint256)", +"ab301975": "availablerfiSanta()", "ab30c26d": "getInvestorInforMin(address)", +"ab31471e": "FrozenAccount(address)", +"ab31832a": "swapTokenForEthUniswap(address[],uint256,uint256)", +"ab31aa48": "BNFYToken()", "ab32775c": "alreadyContains(uint256[],uint256,uint256)", "ab331a34": "getProperty(string)", +"ab33c5ca": "cpiOracle()", "ab33cbcf": "inxCrowdsale()", +"ab344d0d": "_encode_sint64(int64,uint256,bytes)", +"ab34b721": "resolverEther(uint256)", +"ab34b737": "changeCourseStatus(bytes32,uint8)", +"ab34c9e9": "joinedAt(address)", "ab34dc48": "monechainToken()", "ab351270": "lottery(address,uint256)", +"ab352af6": "RESTRICT_VALUE()", "ab3545e5": "getMember(uint256)", "ab35678c": "trackCount()", +"ab357ed5": "DistrClosed()", "ab3640c8": "processPayment(address,uint256,bytes32)", "ab36e4a6": "milestonesCount()", +"ab375641": "bonuses(uint256)", "ab37594b": "cancelOrderByMerchant(string)", +"ab377daa": "shareholders(uint256)", +"ab37be96": "rebaseTotalAmount()", "ab383a6b": "getPropertyPrivateModeBecomePublic(uint16)", "ab3860d0": "test_twoValidEqUint()", +"ab39495c": "setENCOREETHLPBurnAddress(address)", +"ab39744d": "net_bonuses(uint256)", +"ab3a186a": "_bpoolExchangeRate(address,address,address,uint256)", +"ab3a1cc0": "v01_final_deploy()", +"ab3a25d9": "totalSpentPerDay(address,uint256)", "ab3a32c4": "refundAllExternalPurchase(address)", "ab3a39c2": "scamSealTokenAddress()", +"ab3a7425": "availability(address)", +"ab3b2abb": "updateRaphaelAdd(address)", "ab3b87fe": "setOwner(address,uint256)", "ab3bd81f": "changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", "ab3bfac4": "freezeBalance(address,uint256)", "ab3c04d3": "BAKEToken()", +"ab3cc9c0": "setV2Address(address)", "ab3cdaf0": "PRE_ICO_BONUS_TIME_2()", +"ab3d047f": "operator(uint256)", "ab3d2e74": "_clearApproval(uint256)", "ab3d4e8b": "MembershipPurchase(address,uint256,uint256)", "ab3dd698": "airdropDiff(uint256[],address[])", +"ab3df3df": "vliquidPoolsToUsdc(address)", +"ab3e337d": "synthInitiatedExchange(address,bytes32,uint256,bytes32,address)", "ab3e9c56": "ChangedInitialPrice(uint256)", "ab3ed9f0": "DecisionToken()", "ab3efa83": "tokenSafeLock(uint256,uint256,uint256,uint256)", "ab3f22d5": "allocate(address,uint256,uint256)", +"ab3f32b8": "punkIdToPunkLocation(uint256)", +"ab3f5a1a": "initial_price()", "ab3f699c": "getOrCreateNextFeeWindowWasCalled()", +"ab3f896a": "BannerUpdate()", +"ab3fd5a1": "PULL_TOKENS_PROXY()", "ab400d86": "updatePlayerEth(address,uint256,address)", "ab40340a": "recordWithdraw(uint256,address,uint256)", "ab40b01f": "getAddressAnswerKeccak256(uint256,address,address)", "ab40b65a": "receiveapproval(address,uint256,address)", +"ab40d3c7": "changeMod(address)", +"ab411e20": "calc_token_amount_deposit(address,address,uint256)", "ab413a7e": "getScoreAndCount(address)", +"ab4184f6": "removeChainLinkMapping(string[])", "ab4215cc": "getDataOfGame()", "ab430d49": "transferToken_toInvestBalance(address,uint256)", +"ab431f9f": "swapExactAmountOut(address,address,uint256,address,uint256,address,uint256)", +"ab43be71": "dssCdpManager()", +"ab43f8cd": "ad1()", +"ab4424c7": "initiateFlashLoan(address,address,uint256,uint8)", "ab442c59": "getICOToken()", +"ab44318e": "activateWallets(address[])", +"ab4447cf": "restartAddProjectsState()", "ab4459bc": "releaseBountyTokens()", "ab447007": "setClaimDate(uint256)", +"ab44a7a3": "_LP_FEE_RATE_()", +"ab44fcb4": "BatchTransection(address[],uint256[])", "ab45e2a0": "processPurchase(address)", "ab464a4c": "launch_date()", "ab464fa6": "transferMultiDiff(address[],uint256[])", "ab46cc46": "add_attender(string[])", "ab470f05": "getCaller()", +"ab47176d": "setReserveRateMantissa(uint256)", "ab473f48": "closeFunding(uint256)", +"ab477348": "spenderAuthorizations(address,address)", +"ab47a2f9": "getKYCData(address)", +"ab47bb5b": "platformFeesDeserved(address)", +"ab47d3e6": "setFungibleTokenAddress(address)", +"ab47efaa": "setDAFIPlatformContract(address)", "ab47f1bf": "getFilledAmount(uint256)", +"ab480741": "refs(string)", +"ab485995": "isAdminActive(address)", "ab4865ec": "boardTokensAddress()", "ab486607": "getLeaderboardLength()", "ab489f08": "toBytes(address[])", "ab48f2f8": "PlayNow()", "ab4955c2": "ReserveWalletUpdated(address,address)", +"ab49848c": "getResolverAddressesRequired()", +"ab49c679": "sellerFeedback(uint256,uint256,string)", "ab4a2eb3": "getUnlockableTokens(address)", "ab4b3929": "updateMinMaxInvestment(uint256,uint256)", "ab4b4def": "WITHDRAWAL_SCALE()", "ab4bc414": "bitbgcToken()", "ab4bf05e": "addSignature(string,int256,string)", +"ab4c31c0": "Birth(uint256,string,uint64,uint64,string,address)", +"ab4c4287": "accBNfyPerShare()", "ab4c4487": "getSystemSalePrices()", +"ab4c981c": "getOrderedIndexOfSuggestion(uint256)", "ab4d0ca9": "multiAdd(address[])", +"ab4d125f": "minDeltaTwap()", "ab4e21c4": "OneBlocToken()", +"ab4e4827": "comFundFee()", "ab4e8ef1": "getAirdropTokens()", "ab4ef895": "MB()", +"ab4f119b": "decimgerals()", +"ab4f4c7c": "stkgROOT_BNB()", +"ab4f5bbf": "rentBook(uint256)", "ab4f643c": "PublisherParametersChanged(address)", "ab4fa078": "ListAllSince(uint256)", +"ab4fc4b6": "transferWithLockup(address,uint256,uint256[],uint256[],bool)", +"ab502fdf": "getPlanetsByOwner(address)", "ab503e30": "SetminTokens(uint256)", "ab50bc86": "PubRegistered(address)", +"ab50cbc3": "setBtcParam(address)", "ab50e7f2": "third_release(uint256)", "ab5170b2": "getstr()", "ab519020": "calcShare(uint256,uint256)", "ab51937b": "startproduction()", "ab519b0c": "prepare(uint256,address,address,uint256,bytes)", "ab51b06f": "preSaleBonus()", +"ab51bb96": "CODE_OK()", "ab51cff2": "getQuarterVATBalance(uint256,uint8,address)", +"ab51fba8": "prepare(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ab524333": "getMintReDaiAmount(uint256)", +"ab52dbba": "resignAssetForMigration(address[])", "ab531efd": "_encodeTokenId(uint256,uint256)", "ab5366dd": "pendingOwner2()", "ab53d3b3": "jpotInfo()", "ab54775d": "lookupSigName(address,address)", +"ab55212a": "deleteMint(uint256)", "ab55979d": "changeStaker(address)", "ab55d1cc": "getDAIBalance()", +"ab560e10": "SUSHI()", "ab5690c4": "enableWithdrawals(address,address)", +"ab56ac4b": "SetStorageAddress(address)", "ab56c09e": "Placed(uint256,uint8,address)", +"ab56f145": "KYCApproval(address,bool,string)", "ab5706ee": "setBaseSummonPrice(uint256)", +"ab572650": "reactor()", "ab5783c4": "StopGame(uint8)", "ab582eb3": "kickOwner(address)", "ab5841f2": "updateReserve(address,uint32,bool,uint256)", +"ab58fb8e": "proposalEta(uint256)", "ab590032": "cleanAssetHolders()", +"ab5921e1": "explanation()", +"ab593079": "purge(address[])", "ab5a7076": "RadiumToken(address)", "ab5aa302": "_START_DATE()", +"ab5ac349": "fulfillQuestionAskFragment(bytes32,bytes32)", "ab5aea81": "Menu07(address)", "ab5b4456": "use(uint256)", +"ab5bd655": "updateExponentialDaysMax(uint256)", "ab5db036": "refundICO(address)", +"ab5dce00": "setTargetBond(uint256)", +"ab5e124a": "claimPaused()", "ab5e28c5": "transfers()", "ab5e5158": "setNewManager(address,address)", +"ab5eac1b": "updateCommission(uint256,uint256)", "ab5ed150": "getOne()", "ab5efded": "OmegaToken(address,address)", "ab5f3380": "getVineyard(string,address,uint256)", +"ab5f6781": "addAssociatedAddressDelegated(address,address,uint8[2],bytes32[2],bytes32[2],uint256[2])", "ab5f6b91": "multiCreate(uint256,uint256,uint256)", "ab5fa2c6": "setITO(address)", +"ab5fe204": "claimTotalRefund(uint256)", +"ab5ff3ca": "setCatnipAddress(address)", "ab60443b": "changeInviteRate(uint256)", "ab605eea": "fighterIndexToApproved(uint256)", +"ab6064bd": "TUSD_Ownable()", "ab60e4e5": "setWebGiftOnceMaxAmount(uint256)", "ab60ffda": "exp()", +"ab610850": "vestingEntries(address,uint256)", +"ab6167a9": "issueBAEXvsERC20(address,uint256,uint256,uint256,address)", "ab61787a": "proofFailed(address,uint256,uint256)", +"ab6188b8": "isRobot(address)", "ab619e5a": "StandardToken(string,string)", +"ab6214ce": "convertFor2(address[],uint256,uint256,address,address,uint256)", "ab6231f1": "RefundedETH(address,uint256)", "ab62438f": "submitImpeachmentProposal(string,address)", "ab624cf1": "setPartyA(address)", +"ab62f0e1": "setData(bytes)", "ab630fc4": "kimsOnAuction()", +"ab63385c": "payments(address,uint256)", +"ab634bf6": "decreaseEndTime(uint256,uint256)", "ab635b48": "createTokenVestingContract(address)", +"ab63a99d": "borrowAtFixedRate(uint256)", "ab63d7f2": "getUniqueId()", +"ab643734": "dataProvider(uint256,uint256)", "ab643c07": "getAllBounties()", "ab643c10": "requestEthereumPrice(address,string)", +"ab643c5a": "ETHbalance()", +"ab645f01": "store(string,string,uint256,bytes[])", "ab64611b": "BitmarkPaymentGateway(address)", +"ab64a1ad": "getLatestPricesV2()", "ab651065": "setESCBCoin(address,address,address,uint256,uint256)", "ab65c534": "SqueezeTheJuice()", "ab65cda6": "getDial2Type(uint8)", "ab65f20a": "mintCards(uint256[],address)", +"ab6608cd": "eliters(address,uint256)", "ab6680f3": "initAuction(uint256,uint256,uint256,uint256,uint256,address,bool)", +"ab66eace": "getLottery2Digit(uint256)", +"ab6782f9": "augurMarket()", +"ab678b63": "voteCheck(string)", +"ab67a485": "MIRROR_STATUS_DUPLICATED_BEP2_SYMBOL()", "ab67aa58": "transferFrom(address,address,uint256,bytes)", "ab686d0a": "setFrontWindow(address)", +"ab6923be": "approve_705(address,uint256)", +"ab69523b": "buyPackage(uint256)", +"ab69dd51": "IPOFailed()", +"ab6a177d": "InitiallAllocationTimelocked(address,uint32)", +"ab6a34fa": "accountsPynthLoans(address,uint256)", "ab6a5d95": "changeBoardAddress(address)", "ab6a9f0e": "knockoutTeam(uint256,uint256)", +"ab6ab0da": "recipientMinBalance()", +"ab6ac11a": "createUniswap()", "ab6ad452": "unlockedBalance()", "ab6ae424": "affWallet()", +"ab6b2753": "setDaoAllocation(uint256)", "ab6b551e": "isSideBridgeContract()", "ab6b7e22": "grantBounty(address,uint256)", +"ab6b90fa": "upgradeToken(bytes32,address)", +"ab6baba3": "sendTransferERC220(uint256)", +"ab6bb1a4": "mintFromStablecoin(uint256,uint256)", +"ab6bdd18": "next_incoming_batch_id()", "ab6bfe78": "Hongshanchain(uint256,string,string)", +"ab6c07c6": "initDutchAuction(address,address,uint256,uint256,uint256,address,uint256,uint256,address)", "ab6c291b": "getWiningType(uint256)", +"ab6c2b10": "createOrSignWithdraw(string,address,uint256,bool,address,bytes)", "ab6c5f58": "removePlayer(uint256,uint8)", +"ab6c8e3a": "QueueStart(address,address,uint256)", "ab6cab71": "PoWH4DSupply()", "ab6cb831": "UNIToken(uint256)", +"ab6cc4ec": "OnRewardDaily(address,uint32,uint32,uint256)", "ab6cf42f": "isReservationFull()", "ab6d8a9a": "gemFab()", "ab6da028": "TOKEN_FOR_COMUNITY()", @@ -98005,73 +179462,135 @@ "ab6e1be4": "getTs()", "ab6e4959": "depositsOfMember(address)", "ab6e79ed": "getBaseToQuoteReturn(uint256)", +"ab6e7c34": "UserBalances(uint256)", "ab6e9072": "admin_wallet()", "ab6e988c": "playerVault(address)", "ab6ef0b1": "purchaseLandWithCC(uint8,bytes32,uint256)", "ab6f78f0": "SetRecord(address)", +"ab6f8304": "delayStart()", +"ab6f9202": "setAccountExcluded(address,bool)", "ab6f9e4a": "votesPerChoice(uint8)", +"ab6fd82c": "REDUCTION_LIMIT()", "ab700624": "toWidthString(string,uint256)", +"ab700780": "PlayerUpdatedScore(address,int256)", "ab701ca3": "_upgradeabilityOwner()", "ab702d48": "train2(uint256,uint256)", +"ab70ac44": "_assetFactory()", +"ab70b003": "activeCoversLength()", "ab70bba7": "OtxToken()", "ab70d0c5": "_getEndWeek(uint256,uint256)", +"ab70dde3": "_recordTransaction(bool,address,address,uint256,uint256,uint64,string)", "ab70ee5c": "PoloneumToken()", "ab71b8ac": "maxBountyTokens()", +"ab726d4f": "activateVersion(bool)", "ab727094": "reinvestDivies()", +"ab72b7de": "setAkitaPerBlock(uint256)", +"ab730436": "removeAnAsset(uint8)", "ab731fd6": "ownerSetOverride(address,address,bool)", +"ab7361c3": "stake(bytes32,uint256,address)", "ab736b5d": "checkUniqueLockedTokenReceivers()", "ab73e316": "next(address)", +"ab73e433": "setWithdrawalDevFundFee(uint256)", +"ab73f03f": "GetLPTokenBalance(address)", "ab73f08e": "findOptionId(address)", "ab74731d": "dividendPayment()", +"ab7501ee": "lottopurchase(uint256,uint256,uint256,uint256,uint256,uint256)", +"ab751f71": "externalTokenApproval(address,address,uint256)", +"ab75276f": "userClaimProfitOptimized(uint64,uint64,uint256,uint256,uint8,bytes32,bytes32,bool)", +"ab7573dd": "totalRewards(address)", "ab75a4a2": "angelWheelFinancing()", "ab75e6c8": "DTXTestToken()", +"ab75faf3": "withdrawFromDepositRequest(uint256)", +"ab76a6e4": "paymentsSAFE(uint256)", +"ab773326": "approve_723(address,uint256)", "ab7748da": "Blocker_resume(bool)", "ab779505": "NettingChannelContract(address,address,address,address,uint256)", "ab77b178": "issueCoin(address,uint256)", +"ab77eb51": "_getMinterFor(address)", +"ab788d86": "finalizeInstance(string,address[],uint256[],address[],uint64,bool)", "ab7891f5": "deleteSiringWithId(uint256)", +"ab79bfe6": "setLaunchTimeWindow(uint256,uint256)", "ab79fd26": "setBeginTimeTS(uint256)", "ab7a162f": "getInterCryptoPrice()", "ab7a9691": "isReleaseAgent(address)", "ab7aa65d": "icoThresholdBonus2()", "ab7af62f": "setAttackBoostMultipler(uint256)", +"ab7b1c89": "repayLoan(uint256)", "ab7b347c": "BitcoinDominatorERC20Token()", "ab7b47aa": "_generateInitialPattern()", +"ab7b4993": "setRegistryAddress(address)", +"ab7b70d3": "isERC777(address)", +"ab7ca135": "withdrawEthByWeth(address,uint256)", +"ab7cae90": "factionTotal(uint8)", "ab7cb211": "allowBuy()", "ab7ccc1c": "credit(uint256,uint256)", +"ab7d7a47": "damoc(address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"ab7de098": "add(uint256,address,address)", "ab7df819": "Simscoin()", +"ab7e35e7": "buyAssets(uint256,uint256)", "ab7e50ba": "GAX()", "ab7e9dca": "getPrivilegedBalance(address)", "ab7ebbce": "startPresale(address)", "ab7ec692": "primoContratto()", "ab7f8f12": "masicotestToken()", +"ab7faa6e": "regularTotalSupplyForCar(uint256,uint256)", +"ab7fca1c": "audits(address)", "ab802509": "setMintAgent(address)", +"ab80346e": "historyReason(uint256)", "ab80c807": "RareCoin(address)", +"ab80cdc2": "burnAntiSpamFee(bytes32)", +"ab80e2b3": "ROLE_PUBLISHER()", +"ab81076e": "getLoanerContractSize()", "ab81e773": "left61(uint256)", +"ab82b3e5": "Lose(uint256,address)", +"ab82bbcf": "_getMineLPDifficultyByIndex(uint256)", "ab82d9a0": "challenge(uint256)", +"ab830441": "approve_556(address,uint256)", "ab831144": "parseUint(bytes32)", +"ab8322ee": "getLatestCampaignApprovedVersion(string)", +"ab832b43": "splitTransfer(address,address,uint256,uint256,address)", "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)", +"ab8499a8": "numberOfItemsOwned(address)", "ab84db68": "releaseArr()", "ab850a85": "mintGold(uint256)", +"ab85194d": "TokenBurn(address,uint256)", "ab8530f8": "Mint(address,address,uint256)", +"ab859376": "getReplicantByGenerationAndSerial(uint8,uint256)", +"ab85cd4f": "setBaseEpochPeriod(uint256)", +"ab85cfe4": "isLpTokenAdded(address)", "ab8620dd": "getStageSoldTokens()", +"ab86496c": "updateOwnerAddress(address)", "ab86ba3a": "bonus3()", "ab86e0a6": "_setBalance(address,uint256)", +"ab87a8ed": "_isRepresentativeOf(address,address)", "ab87d816": "getPerson(uint32)", +"ab87d98f": "sellTokenTo(uint256,address)", "ab883d28": "multisendEther(address[],uint256[])", "ab888539": "setIdentifier(address,bytes32)", +"ab888728": "createOrder_(address,uint256,uint256,uint256)", "ab889df9": "DoradoToken()", +"ab89083e": "reimburseForVerificationCosts(address,uint256,bytes32,uint8,bytes32,bytes32,uint256)", "ab89641b": "getTlength50()", +"ab899e05": "boxExpire(uint256)", "ab89d8c6": "WGWToken()", "ab89f2c7": "getCurrentStageId()", "ab89f870": "setMultiple(uint256)", +"ab8a0205": "withdrawRunner(uint256,uint256)", "ab8a0360": "Auth()", "ab8a1595": "test_25_assertGasUsage1400Boards()", +"ab8a1776": "GetTotalMNE()", "ab8a288b": "checkStoredFile(string)", +"ab8ac8fd": "_withdrawUSDCAtomic(uint256,address)", +"ab8ae43d": "boost(uint256,address,uint256,uint256,uint256,uint256)", +"ab8b78e9": "isBalanceReleased(address,uint8)", "ab8be231": "setMockedTime(uint256)", +"ab8c298b": "getLengthOfList()", "ab8ca6e9": "getBonusTier(uint8)", "ab8d01b8": "transferFromToUpdateToken(address,address,uint256)", +"ab8d13e3": "addressHashs()", +"ab8d1d56": "lockedRound(uint256)", "ab8d1daf": "payTokenOwner(address,uint256)", "ab8d3dc1": "TokenPing(uint256)", "ab8e0f6e": "Mmcchain(uint256,string,string)", @@ -98079,110 +179598,192 @@ "ab8efb87": "UInt256(int256)", "ab8f1957": "investedPeriods(uint256)", "ab8f3c98": "validateBroadcasterSig(string,uint256,bytes32,bytes,address)", +"ab8f670c": "ContractorReleased(bytes32,address,address,uint256)", +"ab8f6ffe": "getCommittee()", "ab8feb02": "TKN()", "ab90602c": "registerTicketsToUser(string,address,uint256)", +"ab90a3c7": "getRemainingDollarsToBeBurned()", "ab90a8ac": "createSaleTokens()", "ab90f855": "maxPromoToons()", "ab911060": "assertOnlyFrom(uint256)", "ab91154e": "ownerAddSanSlot(address,uint256)", +"ab9131c7": "getSchainPrice(uint256,uint256)", +"ab919ee3": "setLiquidation(address)", "ab91c7b0": "queueLength()", "ab9213f3": "addAddressReferrals(address[],address[])", "ab92670e": "Franc()", "ab929fcd": "submitArticle(string,string,bool)", +"ab92b016": "batchSettlePositions(bytes32[],bool[],address[],uint256)", +"ab92bff6": "uid2Investor(uint256)", "ab92f290": "addNewDividends(uint256)", +"ab94276a": "getDepositContract()", +"ab943144": "isTrasferable(uint256)", "ab948370": "KingToken()", "ab948374": "gen0EndingPrice()", +"ab94d950": "deposit(uint8,address)", +"ab9576a8": "pendingMEOW(uint256,address)", +"ab95a4a1": "TokenStandard()", "ab95b586": "getEventTimes()", "ab9611f4": "setCancelableAt(uint256)", +"ab967221": "breedVipers(uint256,uint256)", +"ab96cb46": "DESTROY_BLACKLISTED_TOKENS_SIG()", "ab96cc4c": "receivedFunds()", "ab96d498": "addPublicFundingWhiteList(address[])", "ab96dd18": "earlyStageLasts()", +"ab96f671": "__Context_init_unchained()", +"ab9757c0": "addValuesToBucket(bytes32,uint256,uint256,uint256)", "ab97af6c": "initialCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", "ab97d59d": "getTokenManager()", +"ab97d8f9": "fromLastDis()", "ab97e196": "revokeAmountVote(uint8)", +"ab982a7a": "removeAllowedSenders(address[])", "ab98458e": "getUint80val()", +"ab9847da": "getRegEthoz()", +"ab989424": "memPerStake(address)", "ab989586": "WMCToken(uint256,string,string)", +"ab989e4b": "ra(uint256)", "ab998660": "LockMechanismByOwner(address,uint256)", "ab998939": "RequireDispose(address)", +"ab99c651": "addPoolToWhitelist(address)", "ab99deb8": "Expread()", "ab99e48f": "requestMerge(uint256[])", +"ab99f7b5": "setTeamMaketing(address,uint256)", +"ab9a13e6": "totalStakedInTheLab(uint256)", "ab9a5caa": "AEStoken()", "ab9a78df": "priceOf(string)", "ab9a81c3": "numOfBlocksInMinute()", +"ab9a8538": "maxAssociatedAddresses()", "ab9a913a": "generatedEve()", +"ab9aadfe": "getETHPx(address)", "ab9ae1be": "isCrowdSaleStatePreSale()", "ab9af166": "reduceCDFee(uint256)", +"ab9b2adf": "requestFullExit(uint32,address)", "ab9b8637": "medibitICO(address)", +"ab9b9013": "getsha256hash()", +"ab9bddba": "_gamePool()", "ab9c1758": "cancelMarginCallOnBehalfOfRecurse(address,address,bytes32)", "ab9c20d0": "finalizationSuccessHook()", +"ab9c2d13": "tokenInsurances(uint256)", +"ab9c4b5d": "flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)", "ab9cd37e": "withdraw(uint80)", +"ab9cff6d": "_encode_sol_bytes27(bytes27,uint256,bytes)", +"ab9d2fba": "treasuryFeeRatio()", "ab9d8b8b": "circulatingTokens()", "ab9d8e4b": "Thankfulness()", "ab9dbd07": "getID()", "ab9def41": "hardCapTokensAmount()", +"ab9dfa81": "ReducedLockingTime(uint256)", +"ab9e611f": "getLandData(uint256)", +"ab9f3309": "GroupDeactivated(bytes32)", "ab9fe3a1": "importBalances(address,address[])", "aba00859": "decBalance(address,uint256)", "aba01e5c": "impl_amountOfWorkpointQueue()", +"aba0606e": "trop()", +"aba0b723": "Superstan()", "aba0e189": "checkGameStatus()", "aba1017b": "despawnGladiatorAndAwardCoins(address)", +"aba11c46": "emoji()", "aba133ea": "GVPE_Token()", "aba13a2f": "_resetTiles()", "aba16a02": "offerToChannels(uint256)", "aba222ed": "nodeRegistrationEnabled()", "aba23628": "mintPlayers(uint128[],uint256,uint256,uint256)", +"aba2d91c": "total_stake_pool()", "aba3d017": "windowAt(uint256)", "aba46a93": "etapAddressesLimit()", "aba47d1a": "getGrapesToBuildWinery()", +"aba4dc46": "vSPYDebtE18(address)", +"aba5dbbd": "FirstCapv1(address)", "aba61514": "priceT4()", +"aba622f6": "doomFee()", +"aba63705": "onchainID()", +"aba65098": "addPool(address,address,address)", "aba683fa": "Etbccoin()", +"aba6b952": "TurboBase()", +"aba6fe46": "testLength()", "aba70319": "FreyrTokenLocker()", +"aba75e9d": "LockedTokens(address,uint256)", +"aba7786b": "setExpired(uint256[],bool)", "aba7ad0d": "lotteryFeeVal()", +"aba7b314": "getUserProducts()", +"aba82e33": "PynthetixReceivedForPynths(uint256)", "aba88037": "DARKNODE_FEES_NUMERATOR()", "aba88766": "claimableHalvingsOf(address)", "aba89198": "getCurrentCapacity()", "aba8dfbd": "SecondBonus()", "aba9650e": "createDepositContract(address)", +"abaa54a7": "setusdcweth()", "abaa5f3e": "randomDS_getSessionPubKeyHash()", +"abaa5f6a": "invoicedActive(address)", "abaa9916": "allocate()", +"abaabcf0": "validateOutcome(bytes32,uint256)", "ababa4a7": "authorize()", "ababb2dd": "_tryUnlockBalance(address)", "ababe93d": "distributeBondFund()", "ababf71b": "GetSummReward(uint256)", "abacf5d7": "getBoardUpdateTime(uint256)", "abad3466": "createtoken(string,string,uint256)", +"abad35bc": "winCount()", "abadaf9a": "bonusAmount()", "abadeb06": "teamPeriodsNumber()", "abaed924": "executeOrders(address[],bool[],uint256[],uint256[],address[],address[],address[8][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", "abaf1de9": "setPublicPrice(uint256,uint256)", +"abaf2eab": "setFarmWallet(address)", "abaf5880": "Crowdsale(uint256,uint256,uint256,address)", "abaf9457": "localRevenuePercent()", "abafaa16": "emitIssue(bytes32,uint256,address)", "abb00601": "addUnpausedWallet(address)", +"abb02bcc": "CYCLE_PRICE(uint256)", +"abb0522d": "weightForBucketForAccount(uint256,address)", +"abb0688f": "addNewDocument(string,bytes32)", "abb151c8": "CCICoin()", "abb1a33a": "SetHotLists(string)", +"abb1c39b": "updateUnminingFee(uint256,uint256)", +"abb1dc44": "getTokenInfo()", +"abb215be": "processPendingActionsReturnLeft(uint256)", "abb21618": "changeAirdropValue(uint256)", "abb254de": "developer_withdraw_ETH()", +"abb26314": "getVotingLen()", "abb2874f": "DezToken()", +"abb28b92": "getTestToken()", "abb29f70": "TinyOracleDispatch()", "abb2d04b": "editName(string)", +"abb353a4": "setEmergencyStop(bool,uint256,bool)", "abb4108e": "addRoles(uint8[])", "abb41fab": "_reward_masternode()", "abb43397": "getCanvasBitmap(uint32)", +"abb44ae9": "withdrawWithLocked(uint256,address)", "abb46619": "DSCToken(uint256,address)", +"abb4b1be": "communityFundLastClaimed()", +"abb4d8cd": "safetyTokenWithdraw(address)", "abb4fe2d": "MiningRigRentalsToken()", "abb524a4": "PapyrusSalePhase1(address,address)", "abb58d20": "Registry(address,address,address,string)", "abb58fd3": "createLink(bytes32)", "abb5bf16": "reinverst(address)", +"abb60c80": "publicBuyCompleteSets(address,uint256)", +"abb6154f": "coolOffPeriod()", +"abb620ad": "AddTrustedContract(address)", "abb689e1": "payRedemption(uint256)", "abb69a1a": "getInvoicesByStatus(address,uint256,uint8)", "abb70034": "getChosenNumbers(address,uint256,uint256)", "abb721ce": "_deposit()", "abb743c8": "setUint(int256,uint256)", +"abb7add2": "PozTimer()", +"abb7c6be": "collectPointsMonthly()", +"abb7ebb5": "callFoo(address,address,uint256)", +"abb80b42": "executeHoldAndKeepOpen(string,uint256)", +"abb82dc1": "getHandlerList()", +"abb88bcc": "getMembership()", +"abb8b3f9": "tokenizeOption(uint256,address)", "abb8c965": "_setOwner(address,bool)", +"abb91d18": "arrFunc()", +"abb97046": "OrderFilled(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes32)", "abb9e0bf": "coinIssuedAdvisor()", "abb9eef4": "YUNXIN2Token(uint256,string,uint8,string)", +"abba36bf": "computePoolRewardsSplit(uint32,uint256,uint256)", "abba87c1": "_prestige()", +"abbab641": "setBnfTokenContract(address)", "abbadf55": "oobiqoo(address)", "abbb4695": "setNotifier(address)", "abbbf451": "getRound0MinDuration()", @@ -98192,10 +179793,18 @@ "abbcb24b": "LEGAL_EXPENSES_ADDR_2()", "abbdc272": "checkGameStart()", "abbe3056": "stage2Deadline()", +"abbe6a4a": "GuardianOfferSubmit(uint256,uint256,address,uint256)", +"abbe6fd3": "initializeDependencies()", "abbef24e": "buyDaiWithEth(uint256)", +"abbf112b": "setWhiteTo(address)", +"abbf458e": "getTokenFund(address,uint256)", "abbf7228": "changeBlocks(uint256,uint256)", "abbf94f8": "PlatoniusToken()", "abbff658": "Ownable3()", +"abc04db3": "lastAirDropIndex()", +"abc0bb6e": "suspendSynth(bytes32,uint256)", +"abc14320": "changedecayBurnrate(uint256)", +"abc14ac0": "reservePRNewTokens(uint256)", "abc1c9fe": "requestForRefund(uint256)", "abc21702": "getPI_edit_25()", "abc2a40a": "minInvestBTC()", @@ -98203,27 +179812,46 @@ "abc32931": "safeTransferFromDataContract(address,uint256)", "abc33778": "Result(bytes32,address,uint256,bool)", "abc38cf2": "submitNewClip()", +"abc39643": "retrieveETH(uint256)", "abc3bc92": "getReferrerBalance(address)", "abc40f41": "batchWrite(uint256,uint256,string)", "abc4558e": "_requireRenewableProduct(uint256)", "abc45ddc": "BANKOIN()", "abc48a0d": "minerTotalSupply()", +"abc49309": "isDepositOpen(uint256)", +"abc4a65e": "isClaimed(uint16,uint8)", "abc4cbd3": "transferForTeam(address,uint256)", +"abc5b13b": "addMaxSaleToken(uint256)", "abc6124f": "Bought(uint256,string,address,uint256,string,string)", "abc63d00": "STARTING_TIME()", "abc66e82": "dev_fee(uint256)", +"abc689b4": "allowedReferrersLength()", "abc6affb": "publicGetUserHistory(address,uint256)", "abc6fd0b": "disburse()", +"abc72444": "addTypeTwoMapping(string,uint256)", +"abc769bf": "NewBetPlaced(uint256,uint8,uint256)", +"abc7aea6": "make(uint256,uint256)", +"abc8340f": "tcj_required()", "abc897f4": "removeMinterByValue(address)", "abc8bc4c": "addBomb(uint8,uint256,uint8,uint8)", "abc8c7af": "marketplace()", +"abc8cddb": "getInfo1(address)", +"abc8d473": "uu2lpt(uint256,address)", "abc93aee": "left64(uint256)", +"abc9890b": "initiateReplaceOwner(address,address)", +"abc9d84f": "withDrawForUser()", "abc9e8c0": "fetchOrdersForPayer(address)", +"abca3fc1": "referralAmountLv1(address,address)", +"abca6e71": "calculateTimelockDuration(address,address,uint256)", "abca7290": "feeDeposit()", +"abca94f7": "avgFeesPerBlockTotal()", +"abcab3dc": "deleteApllication()", +"abcabf85": "RemovedSalesAgent(address)", "abcafdf8": "prizeProjection(uint256,uint256)", "abcb7fce": "getTokenAddressHashing(address,uint256)", "abcb9934": "unlistToken(address)", "abcc11d8": "lastResult()", +"abcc1dbf": "AcountTopup(address,uint256)", "abcc8a46": "LogEuroTokenOwnerMigrated(address,uint256)", "abccb043": "modifyMaxContractBalance(uint256)", "abcccdb1": "agentAddr_()", @@ -98232,120 +179860,211 @@ "abcdabcd": "aiGFJ()", "abcdff1d": "ComputeMyShare()", "abce03d0": "KoreaRepublicvsGermany()", +"abceb19c": "MEDIUM_TEST_DIVISOR()", +"abceb33d": "addAllowableToken(address,address,uint8,uint16,uint16,uint8)", +"abceeba2": "EIP712_TOKEN_TRANSFER_ORDER_SCHEMA_HASH()", "abcf033c": "safeWithdrawalFromCrowdsale(address)", "abcf1328": "InterestBank()", +"abcf7395": "ifNeedReturnTokens(address,address,uint256)", "abd05acd": "createDklSaleAuction(uint256,uint256)", "abd06c3b": "remove(bytes1,bytes1)", +"abd108ba": "getLogicAddress()", "abd10e07": "failSafeAddWhenGreaterThanIntMax()", "abd117fe": "GXCSentToETH()", +"abd13a53": "_fallbackWithdrawalDelaySeconds()", +"abd15b7e": "viewTokenInfo()", "abd15c4f": "transferProd(address)", +"abd18849": "execute(address,string,address,uint256,uint256,uint256,uint256,uint256,bool)", "abd188a8": "setKyberNetworkContract(address)", "abd1a89c": "allocTokenHolder()", +"abd1b73d": "increaseCount()", "abd225e1": "isStarted(uint256)", "abd23d95": "getNameByAddress(address,address)", +"abd26dad": "approve_429(address,uint256)", "abd2adbb": "columns()", "abd2cc5f": "presaleClosed()", "abd2ecb7": "isOnExchangeById(uint256)", +"abd3bd19": "createAccountSuccess(string,string)", +"abd3cbf6": "setCoolDownTime(uint256,uint256)", "abd437da": "balanceOfCall(address)", "abd44556": "setBatchDetachCollectibles(uint256[])", "abd49646": "makerDAO()", +"abd4d716": "foreignContract()", +"abd4df67": "setRemainingToshiCoinForSale(uint256)", "abd5100d": "referralAmountInvest(address)", +"abd54376": "help(address[],uint256,address,address[],uint256)", +"abd5b90c": "updateMinerMinMineDays(uint256)", "abd5f3c7": "poolPrice()", +"abd60e51": "ContractCreated()", "abd6b000": "CryptoSagaCardSwapMerculet(address,address,address,address)", "abd6cb3c": "firstStageRaised()", "abd6ff8e": "setIntValue(string,int256)", "abd70aa2": "getPoolBalance()", +"abd70dae": "_createWizard(uint256,address,uint256,uint8)", "abd74e52": "getLastPriceFeedValues()", "abd796bf": "addAllowedAddress(address,address)", "abd7f8de": "doEmit(uint256,uint256)", "abd8537f": "makeSmokeymon(string,uint8)", +"abd857b3": "registrationEvent(address,address)", "abd89e1e": "preICOmint(uint128)", +"abd8be3e": "_dividendsOf(address)", "abd8d939": "buyThroughProxy(address)", +"abd9035a": "GetBazarSwapClaimed(address,address)", +"abd90846": "registerPool(address)", +"abd9326c": "StarBuy()", "abd936ab": "delegateDklSaleAuction(uint256,uint256,bytes,uint256)", +"abd94e4d": "addLiquiditySushiswap(address,address)", "abd958eb": "getCurrentBlockValueAndSellPriceForTile(uint16)", +"abd9f1ff": "sendByDying(address)", "abda35de": "inMaintainance()", "abda78ed": "getAltOracles()", +"abdaccc1": "old_brrr()", +"abdaf947": "setCFOAddr(address)", +"abdb1c91": "Paused(uint256,address)", +"abdb2ac0": "changeBlockMiningTime(uint256)", "abdb5ea8": "repayBorrow(address,uint256)", "abdbe6ca": "CrowdDreaming()", "abdbf4a3": "UpdateAsk(address,uint256,uint256)", +"abdc3808": "WETHAddr()", "abdc5dee": "HumaniqToken(address)", "abdd0c44": "marginCallOnBehalfOf(address,bytes32,uint256)", "abdd11a8": "setOpeningTime(uint256)", "abdd19d9": "setCityContract(address)", "abdd2430": "AuctionCreated(address,uint256,uint256,uint256,uint256,uint256)", +"abdd90c2": "BidIncreased(address,uint256,uint256)", "abdde3d1": "getEthToTokenOrder(uint32)", +"abde2866": "totalIncentive()", "abde33f7": "right26(uint256)", +"abde71c9": "frsRemoveAllowed(address)", +"abdecf52": "withdrawalVoucherList(uint256)", "abded6fd": "setANT(address,address,address)", +"abdf4997": "theLastSamuraiPot()", +"abdf4b0e": "SIX_MONTHS_DURATION()", +"abdf82ce": "keyExpirationTimestampFor(address)", "abdf9566": "setData_16(string)", "abdf9bda": "bountyProgam()", +"abe06ac2": "DeliveredRate(address,bytes32,address,uint256,uint256,uint256)", +"abe081b1": "stakingAllowed()", "abe088a7": "financialOfficerAddress()", +"abe0906a": "setWethContract(address)", "abe1d5a2": "ViewRawDeposit(uint256)", +"abe1dcf9": "Transfer(uint256,address)", "abe24a3d": "mulByFraction(uint256,uint256,uint256)", +"abe28dd7": "getCollateralSharesForBorrowPart(address,uint256)", "abe2a16e": "FeeRate()", "abe2a18d": "stateChangeAgents(address)", +"abe2fb6e": "setTimeGame(uint256)", +"abe30ce4": "tokenRateGwei()", "abe3219c": "safeMode()", "abe35312": "getAvailableTokensToSellCurrentPhaseIdx(uint256)", "abe3d0e3": "logPurchase(address,uint256,uint256)", "abe3dfd1": "setInitialRate(uint256)", "abe4136f": "getNickname()", +"abe43ec0": "quoteAssetDecimals()", "abe4932c": "createPostboyAccountForSomeone(uint256,uint256,bytes16)", +"abe5026a": "verify(address,address,uint256,string,uint256,bytes)", +"abe50f19": "stake(uint256,bool)", +"abe53f3c": "setLpPairAddress(address,address)", "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)", +"abe743ff": "redeemMasset(uint256,address)", "abe756da": "dateRelease9()", "abe75844": "preSaleFirstEndDate()", "abe7b54e": "readWelfareDetails(address)", "abe7c08e": "finishVoting(uint256)", "abe7cc7b": "LOCK_END()", +"abe7f1a4": "ORACLE_RELAYER_ADDRESS()", "abe7f1ab": "remove(address,uint256)", "abe7f6fe": "ensureAllowance(address,address,uint256)", "abe8014a": "totalWeiRaisedDuringPreICO()", +"abe88328": "greenTrack(address,address,address,address)", +"abe91271": "sharesTotalSupply()", +"abe92488": "MessageUpdated(uint256,address,bytes32)", "abe9717a": "A2ACrowdsale()", "abe9f569": "oraclize_getPrice(string,uint256)", "abea0804": "nAddresses()", "abea8d79": "setMiningLeader(address)", +"abeb420c": "InvalidDieCallerError(address,address)", "abeb5f9f": "hasQuickBuyEtherToken()", +"abeb767c": "flashSwap(address,uint256)", "abebb746": "_fillOrder(address,address,uint256,address,uint256,uint256,uint256)", "abebb7f3": "MarketsContract()", "abec0a00": "BLVK()", +"abecd983": "transferTokenWithView(address,uint256)", "abed982b": "LockedUpTokensWithdrawn()", +"abedbb1a": "setMinFreezePeriod(uint256)", "abedeab4": "init_claim(uint256)", +"abee09d5": "transferredToMainnet(address,uint256,uint256)", "abee967c": "initialReward()", +"abef1d6c": "giveSAV3XRPreward(address,uint256)", +"abefdf04": "buyGauF(uint256)", "abefe7ac": "canCreateUnit(uint256)", "abf03e19": "end_ICO(uint256)", +"abf05e4c": "risk(uint256)", +"abf05f5d": "rewardLiquidityLockCaller()", "abf0661f": "_burnForDeposit(address,uint256)", +"abf06c36": "setTrigFee(uint256)", +"abf07488": "indestructible()", "abf0c538": "vestTokens()", +"abf158d5": "logRewardParams(uint256,uint256,uint256)", +"abf15bb3": "setCourt(address)", +"abf1614b": "rateGrowth()", "abf17198": "getShipProductEarningByModel(uint16)", "abf19801": "createVesting(address,uint256,uint256,uint256,uint256,bool,address)", "abf26786": "item(uint256,bool,bytes)", "abf2b5b9": "cancelMtr(uint256)", "abf2e01c": "isElectionPeriod()", "abf3260f": "highestEditionNumber()", +"abf3ca56": "RandomQuery(uint256,uint256,uint256,uint256)", +"abf410e5": "contractRegistry()", +"abf43977": "getReferralRewardTokens(address,bool,uint256)", "abf45359": "preSaleTokenCap()", +"abf4f44a": "getWalkerDetails(address)", +"abf52a32": "getExchangeRateToValue(address,uint256)", "abf52f53": "independentSellerJoined(address,uint256,address)", "abf567e1": "setStartTime(uint256,uint64)", +"abf59fc9": "drain(address,address,uint256)", +"abf62032": "InterestBase(uint256)", "abf64392": "withdrawInvalidated(uint256)", +"abf6ac09": "canceledSettles(bytes32)", "abf74a93": "pitFee()", "abf74cda": "_issueTokens(address,uint256)", "abf74d5f": "bury(uint256)", "abf7b063": "totalSuperAdminsMapping()", "abf7bfd8": "createUser(bytes32)", "abf7f83e": "setBonuses(bool)", +"abf81272": "currentBlockTimestamp()", "abf8de6b": "TrocarAdmin(address)", +"abf8e0e7": "delegatedFunction()", "abf8fbb8": "BCB(uint256,string,string)", "abf98fe1": "getDepositBalance(uint256,uint256,uint256)", +"abf9b5a8": "_whitelistedAddresses(address)", +"abf9d60b": "_mrFusion()", +"abfa2e28": "CancelOrderAdmin(uint256)", +"abfaeee0": "twitter()", "abfb589b": "revealBet(uint256,uint256)", "abfb84a9": "TransferredPrefix(string,address,address)", +"abfb954d": "approve_229(address,uint256)", +"abfbbe13": "finalize(bytes32,address,uint256)", +"abfbc5b0": "secondaryReceiverNonce()", +"abfbd80f": "getZTokenPriceByERC20Token(address,address)", "abfc3db2": "MIN_UPDATE(bytes32)", +"abfc991a": "getArtKey(uint256)", "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)", +"abfd06ee": "getTeamRunedOver50()", +"abfd231d": "calculateLiquidateReturn(uint256,uint256,uint32,uint256)", +"abfd5310": "setAssetSources(address[],address[])", "abfd5c94": "addEntryInDays(address,uint256,uint256)", +"abfd711e": "ExecutionFailed(bytes32)", +"abfdc63a": "UserExists(uint256)", "abfdcced": "setBool(bytes32,bool)", "abfdd068": "getUserAuctionIds(address)", "abfdfbe6": "setRentalPricePerDay(uint256)", @@ -98354,8 +180073,12 @@ "abfe40a8": "privateMint(uint256)", "abfea3c5": "IraPid()", "abfebfd9": "fifthWeekTokenPrice()", +"abfec20a": "getAuraEquipSize(address)", "abff0110": "broker()", +"abff06cd": "stakingMaxs(uint256)", "abff3fc1": "eventSaleEnd()", +"abff5747": "LatestStakingRate()", +"abff6e7a": "candidateLookup(uint256)", "abffc9ac": "delistToken(address)", "abffeffc": "create(address,address,address,address)", "abfffa28": "foundersTokensDisbursed()", @@ -98364,39 +180087,76 @@ "ac01367f": "CryptovoxelsProperty(string,string)", "ac016a31": "label(bytes12)", "ac01b83d": "getAllPlayers(uint256)", +"ac01ef4b": "newTellor()", +"ac022438": "DCAsignatories()", +"ac023b75": "_min(uint256,uint256)", "ac0250f7": "memberAt(uint256)", +"ac026b86": "getMintWhitelist(uint256)", "ac0287e2": "arrr(uint256[])", "ac02c601": "TranferETH(address,uint256)", +"ac0379da": "setWhiteListed(address,bool)", "ac03f324": "transfer_status()", +"ac043c86": "joinPreSale_invite(uint256,address)", "ac045aca": "soldSoulFor(address)", +"ac049259": "ContractPauseSchedule(uint256,uint256)", "ac0496e1": "setItemToken(address)", "ac04f5a7": "append(address)", +"ac0567d6": "CallUpbase()", +"ac058b5b": "renounceGluwa()", "ac05e0f7": "getBurnRequestUintMap(uint256,string)", "ac05e15f": "manuallyMintTokens(address,uint256,uint256)", "ac066073": "startTimePresale()", +"ac069c35": "getAdjacent(uint256,bool)", +"ac06b5e4": "jigoutuihuantimelimit()", "ac06e302": "SetupCrowdsale(uint256,uint256)", "ac06eb81": "MDIVToken()", +"ac0767c5": "_exitAndApproveGetUnderlying()", "ac080f48": "getDebrisStatus(bytes32,uint8)", "ac0840db": "resultsPublishedTime()", +"ac08973d": "gt(int256,int256)", +"ac08e444": "baseRegistred(bytes32)", +"ac08f092": "_setDefi99PlusAddress(address)", +"ac08f540": "MARK()", +"ac0947b4": "runtx()", "ac098ce9": "addAnn(string)", "ac0a04b2": "signToApproveAddTokenData(uint256)", "ac0a7223": "buyCost()", +"ac0a9531": "onTimeAdding(uint256,uint256,uint256,uint256)", "ac0ab476": "transferToContract(address,uint256,bool,bytes)", +"ac0af629": "DECREASE_RATE()", +"ac0b0bb7": "seizeGuardianPaused()", "ac0b1786": "MeibangAccumulationAppreciationAllocation(uint256,string,uint8,string)", +"ac0b42ba": "uniHEXETH()", "ac0ba9b1": "payUSDCToProvider(address,address,uint256)", +"ac0bf902": "_rebaseNegativePriceUSD()", "ac0c103a": "a_palavra(bytes5)", "ac0c518d": "preSaleTokenSold()", "ac0ca722": "AutoreleaseTriggered()", +"ac0d07b4": "energyPerBlock()", +"ac0d925c": "versionId()", "ac0db69d": "Log(uint8)", +"ac0e47f5": "ethPriceOracle()", +"ac0ed758": "stakingTokenSymbol()", "ac0eeeb3": "showGuessIds(uint256)", "ac0f3865": "LogTokensWithdrawn(address,uint256)", +"ac0f738f": "RemoveAllowAddressToDestroyGenesis()", "ac0f90e3": "checkCrowdsaleState(uint256)", "ac0fdae5": "Record(address,string)", +"ac0fe32c": "approve_137(address,uint256)", +"ac0fed8d": "stakeNxmManual(address[],uint256[])", +"ac10edb2": "twoH()", "ac110d8e": "Take()", +"ac1120b7": "_getOperatorHash(address,address)", +"ac115055": "_setFee(uint256)", +"ac118460": "REFLIMIT()", "ac12319d": "adminPayout(uint256)", +"ac124081": "pledges(uint256)", +"ac1258f6": "dbetV1()", "ac128f4f": "roundResults(uint256)", +"ac12acb8": "addFeedUSD(address,address)", "ac12bf92": "setAdminStatus(address,uint256)", "ac12f3e9": "partner1_voted_update_prenup()", +"ac1312c1": "getPlatformFundsWallet()", "ac132dc3": "ProtectedUnlock(address,address,uint256)", "ac133709": "getChannelParticipantInfo(address,address)", "ac133d3b": "deploymentCost()", @@ -98404,11 +180164,18 @@ "ac13d9a6": "setPartnerContracts(address)", "ac1424fd": "generateNewTicket(address)", "ac145d80": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ac14b9a2": "maxSwings(address)", "ac14c61e": "PresalePool(address,uint256,uint256,uint256)", "ac151959": "setmaxprice(uint256)", +"ac1539dd": "getDisputeWindowBufferSeconds()", "ac1559d2": "totalTokensSent()", "ac155a6c": "MatryxToken()", +"ac165d7a": "interestModel()", +"ac169e7b": "changeDistrAddress(address)", "ac171101": "GAGARIN()", +"ac1717b0": "user1()", +"ac172889": "BLWtoken()", +"ac1781a0": "_minMintAmount()", "ac17cba4": "lemonsRemainingToDrop()", "ac17d506": "getMemberData(address,address)", "ac185644": "ownerTimeLastMinted()", @@ -98416,41 +180183,67 @@ "ac187542": "forceEndGame()", "ac18de43": "removeManager(address)", "ac194b07": "preIcoStartBlock()", +"ac19694e": "set_MKR_TOKEN_ADDRESS(address)", +"ac19777f": "KiSinceLastFocus(address)", +"ac19a2a9": "mybalance()", "ac19c726": "setKeepEth(bool)", +"ac19f00b": "takeOrderByEther(uint128)", "ac1a13fb": "cancelOrder(uint256,uint32,uint32,uint256,string)", "ac1a182c": "_calcProportion()", "ac1a386a": "setWalletAddress(address)", +"ac1a50ef": "monthlyAllocation(uint256)", +"ac1a5928": "withdrawHAREM(uint256)", "ac1a7175": "lockUserInfo(address)", "ac1aaa1a": "calticket(uint256)", "ac1ad7d1": "tickerQuery()", "ac1b14ff": "proxyCall(uint256)", +"ac1b15d4": "_sz_int32(int32)", +"ac1b2335": "canDispute(uint256)", +"ac1b4e76": "initialLiquidityTokens(address,uint256)", "ac1bc7e8": "updateDetails(string,string)", "ac1c1443": "listProducts(address)", "ac1c3d04": "generateToken()", "ac1cb329": "withdrawBuyAgent()", "ac1cd994": "seed_coins_vault2()", "ac1d0609": "updateWhiteList(address,bool)", +"ac1d1166": "getComandos(address)", "ac1d6fe2": "changeAllocation(int256)", "ac1deea0": "RateUpdated(uint256,bytes32,uint256)", "ac1e17df": "addHolder(address)", "ac1e4734": "ORCA()", +"ac1e5025": "setWithdrawalFee(uint256)", "ac1e765b": "checkValidity(string,address,string)", +"ac1e9ef4": "AddOwner(address)", +"ac1ecbfc": "transferTokensIn(address,address,uint256,uint256)", "ac1f7ca1": "totalFundsAvailable()", +"ac20874d": "slashPoints(bytes32)", "ac20902e": "NormalizeMoney()", "ac20e2a0": "TOTAL_TOKENCAP()", "ac210cc7": "wrapper()", "ac216ae9": "setCheckBonus(bool)", "ac218c6d": "addressICOManager()", +"ac218d0f": "challengeValues(uint256)", "ac21bacd": "TokenPriceChanged(uint256)", +"ac21ef60": "setEprice(uint256)", +"ac227e74": "LogSetPrice(uint256)", "ac22b970": "_medalFreeze(uint256)", "ac22cec8": "withdrawGasCost()", +"ac230a95": "registerDiamond()", "ac230e52": "getHeroName(uint256)", "ac232383": "getAyantDroitEconomique_Compte_6()", +"ac232bde": "depositAndTransfer(address)", +"ac24164e": "_3pool()", +"ac243b16": "changeLimitedBlockHeight(uint256)", "ac246c3e": "TIME_TO_STALEMATE()", +"ac246ee7": "setSplit(address[],uint256[])", +"ac247571": "BuyGuardianRune(address,uint256,uint256,uint256)", "ac256e1d": "RiekCoin()", +"ac25f1a3": "testelopio()", "ac25f266": "add_to_whitelist(address)", "ac26109e": "lockForOrder(address,uint256)", "ac267435": "volumeType7()", +"ac2691c6": "nerdStaking()", +"ac26d624": "A(address)", "ac270c37": "contractUp()", "ac280cb9": "MAX_STANDARD_SALE_PACKS()", "ac281ca6": "recordPayment(uint256,uint256,uint256)", @@ -98459,58 +180252,116 @@ "ac28838b": "getPerson(bytes32)", "ac28ff48": "collectableTokenBalance()", "ac297d21": "vendDisciple(uint256)", +"ac29f113": "managerForceUnlock()", "ac2ac86c": "setSmallCapWhitelistParticipants(address[],uint256[])", "ac2aefd2": "addPigment(uint256,uint256,uint256,uint256)", +"ac2bd78d": "launchToken(uint256,uint256,uint256,uint256,uint256,string,string,address)", +"ac2c03a3": "getBonusTokenAddress()", "ac2c8bb5": "getTile(uint16)", "ac2d456d": "setOracleCallbackGasPrice(uint256)", "ac2d7ce5": "setNextLotteryTTWTokenId4(uint64)", +"ac2defea": "calculateWinner(bytes32)", "ac2e043d": "whitelistMulti(address[],uint256[],uint256[])", "ac2e064b": "set_maxCWCsPerSaleLessThan(uint256)", "ac2e2c65": "JULIAN_ADDRESS()", +"ac2e603f": "flightTicketCancelled(string,uint256,uint256)", +"ac2eeaf4": "Completed(uint256,uint256,uint256)", "ac2f0074": "polls(uint256)", +"ac2f2adf": "roundDuringTime()", +"ac2ff28e": "MAX_VAL()", +"ac304ea8": "setBurnLock()", "ac307773": "claimFunds()", +"ac308316": "thor()", +"ac30af6c": "executeDirectOrder(uint256)", +"ac30d66c": "setLoliTarget(uint256)", "ac30da84": "BountyHunter()", "ac3120a0": "LogContribution(address,uint256,uint256,uint256,uint256)", "ac31818d": "Better_Bank_With_Interest()", +"ac318c5d": "verify(bytes,uint256)", +"ac323ab3": "EventAppEntityReady(address)", +"ac327f80": "ecAddress(bytes32,bytes)", "ac328187": "initializeTeamVault(address)", +"ac32cfd5": "MAX_BASTARDS()", "ac3314a6": "issueLockedTokens(uint256)", "ac336f7b": "getCurrentConsensus(string)", +"ac33d907": "getGradeType(uint256)", +"ac33f234": "adjustBuy(uint256)", +"ac342c64": "viewUsers(address)", "ac355ed3": "_salesprice()", +"ac35ab92": "confirmAuctionBid(uint256,uint256,address)", "ac35bdb4": "sub_session(string,uint256)", "ac35caee": "transferWithReference(address,uint256,string)", +"ac35e1fa": "rewardsPerShareStored()", "ac360d3c": "TokenWrapper()", +"ac361b58": "godChangeRoadCost(uint256)", +"ac36a599": "distributePreICOTokens(address[],uint256[])", "ac375770": "didWithdraw(address,uint256)", "ac377553": "fillFromCollateral(uint256)", +"ac3791e3": "canResolve()", +"ac37eebb": "identity(uint256)", +"ac380781": "effectiveSellAmount(uint256,uint256)", "ac38eb07": "tokenIdForHandle(bytes32)", "ac3910a2": "ballot()", +"ac39e1d7": "_launchLocked(uint256)", +"ac39e7f8": "prevsaferebase()", +"ac3b1b9b": "DebugEntityRequiredChanges(bytes32,uint8,uint8)", +"ac3b1d54": "sushiPids(address)", "ac3c27cf": "resolveDisputeSeller(address,string)", "ac3c49e0": "getMarketMakerAddressFromToken(address)", +"ac3c4bcf": "removeLock(address,uint256)", "ac3c9952": "batchTransfer(address,uint256[])", "ac3cb72c": "addApproval(address,uint256)", "ac3cdf78": "RANGEEND_10()", "ac3d057d": "releaseBudget(address,uint256)", "ac3d5084": "initialFrozenTime()", +"ac3d84cd": "adminaddr()", "ac3d8558": "setExitStake(uint256)", +"ac3d8bae": "seizeAtoken()", +"ac3dbb12": "SFI_ratio()", "ac3dc451": "TorontoRules(address,address[])", "ac3dc9aa": "startBlockTimestamp()", +"ac3e2089": "airdrop(address,address[],uint256[],uint256)", "ac3e6b2f": "testSetNotRetractable()", "ac3e7d24": "addChainyData(string)", +"ac3ef4c0": "vbank()", +"ac3f0e48": "startChangeBurnRateLong(uint256)", +"ac3f123f": "changeURIController(address)", "ac3fc432": "stampCreatedCount()", +"ac3ff28a": "globalMarkets(address)", "ac403817": "addresIndex()", +"ac416253": "trustedAgentBurn(address,uint256)", "ac41865a": "getPrice(address,address)", "ac41b4a5": "SignalingEnabled(address,uint256)", +"ac41ceb3": "leverageToMax()", "ac42c3ec": "maxTokenBetValue()", "ac42ea7d": "rejectBurnRequest(uint256,string)", "ac42f301": "getNextForwardUserId()", "ac42f446": "botPhase()", +"ac43070b": "approveTokens(address[])", +"ac431751": "updateParam(string,bytes)", +"ac431d7a": "collectAndStreamInterest(address)", +"ac4327d1": "total_created_token_numbers()", +"ac434051": "qall(uint256,address,bytes)", +"ac436bdf": "interest(address)", "ac440d13": "CardsAccess()", +"ac443b49": "gains(uint256,uint256)", +"ac446002": "withdrawMoney()", +"ac44d974": "maxMons()", "ac4501d9": "splitTrade(uint256)", "ac451185": "getGames(uint256,uint256)", "ac45185d": "adminStewardship(address[2],uint256[7],uint8,bytes32[2])", +"ac451bbc": "ToOffChainTransfer(address,address,address,uint256)", +"ac454ca5": "newCertificate(string,string,string,string,string,string)", +"ac457954": "withinArray()", "ac457a9d": "ExposureOpened(bytes32,address,uint256,uint256,uint64,uint64)", +"ac457d22": "CompleteProvision(address,uint32,uint256,uint256)", +"ac45ff44": "MembershipContractAddr()", "ac460d66": "setTokensContract(address,address)", +"ac4640e1": "viewStatus(uint256)", +"ac464fe4": "FailedPayment(address,uint256)", "ac46a451": "OpsAddressChanged(address)", "ac46fa22": "burnEscrow(uint256,uint256)", +"ac4732b9": "mintFeeAmount()", "ac4746ab": "EPOCH_LENGTH()", "ac4758cc": "Takafuly()", "ac475e5c": "CheckTimeout()", @@ -98522,26 +180373,41 @@ "ac48fcbc": "testTheMultipliers()", "ac490b08": "parsha()", "ac49dd5c": "removeTimelock(address)", +"ac49e3f0": "TileOfferUpdated(uint16,address,uint256,uint256)", +"ac4a019f": "ConETH(uint256)", "ac4a743d": "ecoFundSupply()", "ac4ab3fb": "hasRole(address,bytes32)", "ac4abae1": "lockReleaseDate()", +"ac4ac3d1": "_computeNewStake(uint256)", +"ac4acdff": "setDowngradable(bool)", +"ac4adf73": "mintMarketing(uint256)", +"ac4afa38": "pools(uint256)", "ac4b2bae": "newParameters(int256,uint256,int256,uint256)", "ac4ba3ea": "initManager(uint256,uint256)", +"ac4bad4c": "NewSamuraiIncoming(uint256,bytes32)", +"ac4bc2ed": "interLiteral()", "ac4bd53a": "currentLeader()", "ac4bed68": "modifyHorsey(uint256,address,bytes32,uint8,uint8)", +"ac4bfb03": "requestRide(string,string)", "ac4c25b2": "void()", +"ac4c3411": "setKittieAddress(address)", "ac4c8bf3": "argCurMax()", "ac4ce2c6": "setAddress(uint256,address)", "ac4cfa4c": "calcAmount(address)", +"ac4d0c36": "LAST_STRAW_PERCNET()", "ac4d2e95": "ownerTokensFreeDay()", "ac4d8a26": "setRepPriceInAttoEth(uint256)", "ac4d965c": "notZeroAndNotSender(address)", +"ac4dcb76": "setTransferFeeRecipient(address)", +"ac4dd6be": "lastMiningRewardBlock()", "ac4ddd9f": "retrieveTokens(address)", "ac4df041": "donationClosed()", "ac4e677c": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32,bool)", "ac4e73f9": "proposeReverse(string,address)", "ac4eefc5": "getGoldDataMinted()", +"ac4f2610": "AMPLContract()", "ac4fb219": "enableLockFlag(bool)", +"ac4ff1d4": "ITO_deposit()", "ac50713a": "foundingTeamWallets(uint256)", "ac509050": "getPlayerRoundsKitties(uint256,uint256)", "ac50a466": "betfortoken()", @@ -98549,28 +180415,55 @@ "ac50b2e5": "getPlayerRoundNumbers(uint256,address)", "ac51009e": "createBountyTokens()", "ac51215b": "TokenRegistry(address,int256)", +"ac51412d": "rewardPerMin()", "ac516951": "setAddressVoteRules(address,address,bool,uint256[5])", "ac51a36a": "_unpackPetData(uint256)", "ac51af8e": "transferWithBonus(address,uint256)", "ac51d3a5": "smileyToken()", +"ac51de8d": "getPendingDisbursement()", "ac5277a4": "teamSupply6Months()", +"ac52b1aa": "SettlePut(address,uint256,uint256)", +"ac5327d4": "EvUpdateStatus(address,uint8,uint8)", +"ac5388c8": "totalEthSupply()", +"ac542fb8": "getFlashloan(address,uint256)", +"ac544387": "setGovTenure(uint256)", "ac552cf2": "getCurrentDukePaid(string)", "ac5553ce": "phaseDuration()", "ac5555aa": "initialized(bytes32)", +"ac557f66": "walletFee()", +"ac5613cd": "MarketingTokenCreated(uint256,uint128)", "ac562666": "freezeCoin()", +"ac565506": "getStakeV1(uint256,uint256,address,bytes32)", "ac566953": "getInfra(uint256)", +"ac567096": "modifyConsensus(address[],uint256,uint256)", "ac56c52b": "makeDealForTwo(string,uint256)", +"ac56f70f": "id2index(bytes32)", "ac56f980": "setRealseTime(uint256)", "ac570411": "getRecipientBalance()", +"ac57ab5e": "autoPrepare(address,uint256)", "ac588536": "delayPayout()", "ac5895f6": "getSoilHumidityControlLimits(bytes32)", "ac591e40": "SelectOne(uint256,uint256,uint256,uint256,uint256,string,address)", "ac592944": "SendPreReserved2()", +"ac59eaf9": "PreviligedLock(address,address,uint256)", "ac59eeeb": "recoverAddressFromWithdrawMessage(uint256,address,uint256,bytes)", "ac59f0d9": "addToken(address,address,string)", +"ac5a3e29": "testIsContractCommand(address)", +"ac5a6724": "_versions(uint256)", +"ac5a7365": "isLockWithdraw()", "ac5aaa5b": "toToteLiquidatorWallet()", +"ac5aba8b": "linkContracts(address,address,address)", +"ac5ad188": "memberAddress(uint256)", +"ac5adaf6": "isLockedForMemberVote(address)", "ac5b3998": "assignLockedBalance(address,uint256)", "ac5b3dbb": "Michael1011Token()", +"ac5b54c2": "changeTxFeeHelper(address)", +"ac5b876c": "boostData(uint256)", +"ac5bc4fa": "bug(uint256)", +"ac5bf263": "setDefaultWithdrawFee(uint256)", +"ac5c0e7a": "finishLottery(uint256,address,address,uint256,uint256)", +"ac5c3dac": "DARKv2_DAO_min()", +"ac5c81f6": "upgrade(bytes32[])", "ac5c8535": "storeData(bytes)", "ac5c867c": "sendCrowdsaleBalance(address,address,uint256)", "ac5c915f": "burnBonuses()", @@ -98578,130 +180471,235 @@ "ac5cf934": "usdSeasonAccountRef(uint16,address)", "ac5cfc3d": "getMsgWaiting(uint256)", "ac5d2dbf": "typeToken()", +"ac5d3723": "stringToUint256(string)", "ac5d51cb": "setAdministrator(address,address,bool)", "ac5d67e9": "lockAdvisorsTokens()", "ac5d8745": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256)", +"ac5da9db": "depositPosition(bytes32,address,uint256)", "ac5ddf80": "modify_bool(bool)", +"ac5e08e8": "newBeauty(string,uint256)", "ac5e7977": "receiverThree()", "ac5e81a9": "historyPayout(address)", "ac5ec9ef": "setAcceptPayment(bool)", +"ac5ed7b7": "adminInitialSet()", +"ac5ef7c3": "get_MAX_DEFINED_POINTS()", +"ac5f5037": "withdrawLpToken(address,uint256)", +"ac5f732a": "initTokenSupply(uint256,uint256)", +"ac5f8d51": "removeCollateral(address,bytes32,address,uint256)", "ac5f91a0": "previousMinters()", +"ac5fb639": "xgtToken()", "ac6068b5": "isNotExpired()", +"ac6091f8": "findPools(address,uint256[])", "ac60a6cd": "payInvoice(uint256)", "ac60bbca": "userTokenStats(address,address)", +"ac60c486": "numMaturedMarkets()", "ac60c969": "canFirstMint()", "ac60da79": "TOKEN_SALE3()", +"ac612a7a": "verifytimes(address)", "ac61e92b": "createBet(uint256,uint256,uint256,uint256,bool)", "ac624f52": "crowdSaleToken()", +"ac62848e": "directPayEventCount()", +"ac62d385": "seniorBalance()", "ac62ddb2": "validateMigrationIsPending(string,string)", "ac62e250": "CertificationSet(string,address,uint256)", +"ac62f566": "donators(uint256)", +"ac630406": "LOG_AcceptWei(address,uint256,uint8)", "ac63208d": "SPRToken()", +"ac637627": "getUserInfo(address,address,address,address,address)", "ac637c7a": "delegateTo(address)", "ac64198b": "RSPLT_G()", "ac6456df": "_betFailure(string,uint256,bool)", "ac646629": "viewTokenBalance(address,address)", "ac646756": "pause2()", +"ac64c459": "CHANGE_PRICE_PERCENT()", "ac656636": "getDepositReceipts(address,int256,uint8)", +"ac658128": "syncStateFromV1(address)", "ac65b258": "PresalePool(uint256,address,uint256,uint256)", +"ac65c879": "IPOadresslist(uint256,uint256)", "ac66777f": "multiCallTightlyPacked(bytes32[])", +"ac66c9b7": "_defaulRefer()", +"ac66ea8d": "sgToken()", +"ac674664": "proposalTargets(uint256,uint256)", "ac67857e": "ArtsCoin()", +"ac67d851": "EXECUTE_ALLOCATION_ROLE()", +"ac68a748": "claimFees(uint256)", +"ac69275c": "whitelistBetaDelegate(address)", +"ac694193": "howLongBeenMining(uint256)", "ac697fb5": "SkySwapToken()", +"ac69bb07": "pendingAmount(address)", "ac69c09c": "changeVotingRules(address,uint256)", "ac6a2b5d": "_withdraw(uint256)", "ac6a4d6a": "fooInt()", "ac6a602f": "getCompte_34()", +"ac6ae0ec": "getUserTopNode(address)", "ac6af280": "setRates(uint256,uint256)", "ac6b02c4": "IFCC()", +"ac6b3cfe": "func_2CF8()", +"ac6b643d": "top3Pool()", "ac6b8e00": "transferLock(address,uint256,bool)", "ac6bc853": "startSpin()", +"ac6c2666": "setOvmContractNonce(address,uint256)", "ac6c5251": "getWeight(address)", "ac6d0316": "performUpdateCallPtr()", "ac6d0fed": "nestedFirst(uint256)", "ac6d8150": "getPayment(uint256,string)", "ac6da90d": "qwercoin()", +"ac6e0f90": "transferFromWithFix(address,address,uint256)", "ac6e1237": "CrowdsaleEndedSuccessfuly(uint256,uint256)", "ac6e2db6": "tokenCreationCapOne()", +"ac6e8398": "RemoveOwner(address)", "ac6ebb28": "CioCoinERC26Token(uint256,string,string,uint256)", "ac6ee852": "newGanToken(uint256)", "ac6eead3": "team_token_percentage_total()", +"ac6f10cc": "MaxUsersLimit()", +"ac6f5df2": "allDexes(uint256)", +"ac6fa858": "OperatorAdded(address)", "ac6fe0ed": "Batchdrop(address)", "ac700665": "getOrdersForBuyer(address)", "ac700e63": "pauseMigration()", +"ac701070": "totalAscensions()", "ac708f0c": "getProjectedBlockHash(uint256)", "ac70a1ef": "getTreasures()", "ac70e6c4": "level_9_percent()", "ac71045e": "getOffer(address,uint256)", "ac711cbb": "withdrawEtherAll()", +"ac719f9e": "nameGen()", "ac71abde": "addAccounts(address[])", +"ac71b23d": "getDittoOutputAmount(uint256,address)", "ac72200d": "getMinted()", +"ac729403": "_address1()", "ac72c120": "hasReverse(bytes32)", "ac72cd7e": "BrokerInt(address)", +"ac734b26": "machineType()", +"ac73a2ef": "isTeamTwoMember(address)", +"ac73a530": "NUXAsset()", "ac73e97e": "lastMiningTime()", +"ac7475ed": "updateOperator(address)", "ac74bcde": "defaultNumberJuror()", "ac74f2a8": "Bothereum(uint256,string,string)", +"ac756684": "tunePrice(address,uint256,uint256,uint256)", +"ac75c7f7": "globalETH()", +"ac76260e": "affiliateAddress()", +"ac7638de": "lookupAffiliateToken(address,address)", "ac767539": "testFailItemStoreNotRegistered()", +"ac769090": "downvote(bytes32,uint256)", "ac76a499": "clientsAverageRating(address)", "ac76fbf1": "GeoGame()", "ac7709bc": "setTimedTransfer(uint256,uint256)", +"ac772ef4": "getWithdrawalTimestamp(address,uint256)", "ac778b8f": "createCertificate(string,string,string)", +"ac77c31d": "doSomethingThatRequiresERC20tokens(uint256)", "ac77eb8e": "ZingToken()", +"ac77fbca": "ownerAFIReward()", +"ac78012c": "setPoolId(uint256)", "ac781fbe": "TrustTokenERC20(uint256,string,string)", +"ac789a7f": "cyclePlayers(uint256)", "ac789e5f": "BlindAuction(uint256,uint256,address)", "ac78dc16": "payTeam()", "ac793a60": "createBet(uint256)", +"ac797b31": "getPositionBetAgent(uint256)", "ac798bd3": "calculateArtCoinSupply()", "ac798def": "set_sale_arbits_sold(uint256)", "ac79a4b1": "getCreateMarketCreatorValue()", +"ac79c456": "userBook()", "ac7a1b5b": "maxWithdraw()", +"ac7a5f04": "userActive(address)", "ac7a722e": "updateETHPriceInCents()", "ac7a95d5": "getNewShroom(uint256)", "ac7b663a": "_settleInterest()", "ac7b986f": "lotusWallet75Pct()", "ac7bb2b4": "removeFromWhiteList(uint8,address)", +"ac7bde2c": "uniswapLPToken()", +"ac7c4943": "neonPresale()", +"ac7c5429": "getCollateralRequirements()", "ac7cda53": "changeRegisterBot(address)", +"ac7cdc70": "BuyPacks(uint256,address,uint256,uint256,uint256)", +"ac7d439a": "_encode_sol_bytes9(bytes9,uint256,bytes)", +"ac7d7a3c": "send_money(address,uint256)", "ac7dce1d": "BsPresale_SNOV(address,address,uint256)", "ac7e1e0a": "setEtherProceedsAccount(address)", +"ac7e296e": "TX_MINING()", +"ac7e2ec6": "totalBlockPerYears()", "ac7f0c48": "calculateWin()", "ac7f9329": "AUTH_SETMINTAMOUNT()", "ac7fc263": "multipliers(uint256)", +"ac7fc2c7": "oneProto()", "ac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", "ac800b32": "transferCanaryOwnership(address)", +"ac810084": "recieveOwnership()", +"ac81ba10": "MixSuccess(address,uint256,uint256,uint256)", "ac82239f": "enableInvite(string,bytes32)", +"ac823a7e": "assetData(uint256)", +"ac824ce9": "refundOk()", "ac824fd9": "SHEX(uint256,string,uint8,string)", "ac8261c9": "optionProgram()", "ac828200": "_dlgtRet(uint64)", +"ac82b296": "SentValue(uint256)", +"ac82f608": "rateForCurrency(bytes32)", "ac833fd9": "test_insert_findWithHintNextUpdateHead()", +"ac834193": "getPenaltyThresholdRatio()", +"ac8359b8": "updateDelegateKey(address,address)", "ac838774": "addauction(address,uint256,uint256,uint256,uint256,uint256,string,string)", "ac8388a5": "callthis()", "ac83ae55": "GAMEToken()", "ac83e891": "BokkyPooBahsAutonomousRefundathonFund()", +"ac8404e6": "xchanger()", +"ac8448b6": "startChangeInitialPercentAndTime(uint256,uint256)", +"ac847d49": "DIDTokenAddress()", "ac84ed4f": "TronClone()", +"ac8528cb": "tokenToWrappedCToken(address)", "ac856216": "setNumRewardsForTMEUser()", +"ac85663e": "multiexec(address[],bytes[],uint256[],bytes[])", "ac860a59": "_signPropertyByAgent(address,address,bytes32)", +"ac861673": "setExternalOracle(address)", "ac8641ee": "updateRefundWalletAddress(address)", "ac8648a2": "mintFeeTokens(int256,uint256)", +"ac86917f": "getAddedPools()", "ac869cd8": "setFrozen(address,bool)", +"ac86ea0c": "getTokenEquity(address)", +"ac87091d": "get_pending_records(bytes32)", "ac884902": "setResults(bytes32[])", "ac8860b9": "ProposalExecutedEvent(uint256)", "ac88c8d8": "verifyAndLiquidate(address,address,address,uint256,uint256,uint256,uint256)", "ac88ffb2": "feeWithdrawEthAmount(uint256)", "ac890c4c": "unsetAllowedMultivest(address,address)", +"ac89e1cd": "vestingDetails()", +"ac89f44d": "expectValue(address)", +"ac8a0942": "bridgeNativeReward()", +"ac8a260c": "valid(address)", "ac8a2af0": "updateShareholders(address)", "ac8a584a": "removeOperator(address)", "ac8aa236": "batchTransferVIP(address[],uint256[])", "ac8aea24": "transferUnsoldToken()", +"ac8b1f0d": "goalReachedOnFinalize()", +"ac8b81de": "openLockETHGenerateDebtAndProtectSAFE(address,address,address,address,bytes32,uint256,address,address)", +"ac8bb24a": "supplyAtBlock(uint256)", "ac8c5e8e": "buyLong(address[2],uint256[3],uint8,bytes32[3])", "ac8d6030": "removeRequest(address)", "ac8d6632": "addMasterNodes(address,uint256,uint256)", "ac8dc6ea": "_decodeData(bytes)", "ac8e88c2": "_updateSolvency(uint256)", +"ac8ecfd6": "minTimelockInterval()", "ac8f539b": "emergencyDrain(address,uint256)", +"ac8f720e": "StakeReleased(uint256,address,address,uint256)", "ac8fa644": "transfer_Same_Amounts_of_assets_to_many_addresses(address[],uint256)", "ac8fbd09": "UpdatePoolTarget(uint256)", +"ac8fcfc0": "processDeactivationRequest(address)", +"ac8fd148": "getBuyOutPrice()", +"ac900a4b": "rsiOracle()", "ac900c2d": "unregisterSeller(address)", +"ac904c63": "licenceAmountScaled()", +"ac90b422": "getModulesByType(uint8)", +"ac90f44c": "checkText()", +"ac913c3d": "getkushOGUniStakeAmount(address)", +"ac9167f4": "FreezeForOwner(address,uint256,uint256)", "ac92f4ae": "calldatacpy(uint256,uint256,uint256)", "ac92fdb5": "getSaleDate(bytes16,uint256)", +"ac933bc0": "cancelTerminationRequestWithApproval(bytes32,uint256,uint256,bytes)", +"ac93a2cc": "totalUnlockedCommunityTokens()", +"ac93d819": "addNetwork(bytes32,uint256)", "ac940823": "betOnLowHigh(bool)", +"ac946b3a": "changeReceivingBenefactorDeposit(address,address)", "ac957954": "transferDonations(bytes32,address)", "ac95a2aa": "_createOriginalPainting(uint256,uint256,uint256)", "ac95be9b": "testico()", @@ -98709,76 +180707,135 @@ "ac964f21": "numProducts()", "ac9650d8": "multicall(bytes[])", "ac9663a6": "approveByC(uint256,string)", +"ac969a73": "viewNumeraireBalance(address)", "ac96a0b3": "GYG()", "ac96c65e": "doCancel(bytes32)", +"ac96e981": "setPurchasing(address,address,uint256,uint256)", +"ac96f743": "OrganizationAddress()", "ac96f981": "authorizeAccess(address,int256,address)", +"ac972e28": "recurly()", "ac978cea": "TeamHOMO()", "ac979688": "transferAnyERC20TokenToBeneficiary(address,address,uint256)", "ac97ad89": "getTokensFromAddressReturns(address,address)", +"ac97f492": "getUpdatedTime(uint256)", +"ac9823b7": "apeLock()", +"ac9824d7": "dailyVolumeCap()", "ac985f0a": "townsSold()", +"ac986284": "totalSupplyEnum()", "ac9873c7": "CanaryV7()", +"ac988383": "UpgradeToPremium(bytes32)", "ac988bdc": "_getStageIndex()", +"ac98b3a8": "getJoyCollaborator(uint256)", +"ac98e6db": "renounceCustomer()", +"ac9917fc": "changePlatformTo(address)", "ac991b65": "double_blind_sha256(string,address,address)", "ac996e7e": "resolvePledging()", "ac99aa69": "recoverEthers()", "ac99e0aa": "BitImageToken()", "ac99f7b7": "_setStages(uint256,int256)", "ac9a252a": "ownershipTransferred(address)", +"ac9a2eaa": "postionNumbers(uint256)", "ac9a6515": "testTokenOwnershipAfterFinalize()", "ac9b5671": "setVerifier(address,bool)", "ac9b5c30": "getCreateMarketfeePerEthInWeiValue()", +"ac9c1959": "bt()", +"ac9c238d": "setBtcBlockReward(uint256)", "ac9c3b7a": "TokenTotal()", "ac9c80af": "seed_additional_eth()", "ac9cd354": "getTransferInfoCount(address)", +"ac9d5a78": "countConfig()", "ac9d7e0a": "raisevote()", "ac9ef8a1": "changeMultisigs(address,address)", "ac9f0222": "setState(bool)", "ac9f2b7b": "callDeposit(address,address,uint256)", +"ac9f60e1": "getAssetIntroducersByCountryCode(string)", "ac9f9d12": "FACHAINStandardToken(uint256,string,uint8,string)", "ac9fd2b8": "nextLoanInterestRate(uint256)", +"ac9fd7c2": "settledRewards(address)", +"ac9fe421": "setSuperOperator(address,bool)", "aca00932": "calculateBaseTimeout()", +"aca0ad13": "getOut3(uint256)", +"aca0b82b": "curveRegistryAddressProvider()", "aca15663": "transferToExchangeAddress(address,uint256)", "aca19256": "_logRoundExtensionVolume(uint256)", +"aca1c6e6": "frozenTokensReceived(address)", "aca233fd": "one_two(uint8)", +"aca25f9a": "getLTV(address)", +"aca263b9": "shareRewardPoolId(address)", "aca31e61": "setEthPerToken(uint256)", +"aca335e8": "md_address()", +"aca345ee": "vaultParameters()", "aca34c11": "getPoolDetails()", +"aca3735e": "getStaticConnectorsData()", +"aca49e35": "newVoteExt(bytes,string,bool,bool)", +"aca4b638": "transferMBC(address,uint256)", +"aca4f8c4": "hold_balances(address)", "aca62a5f": "convertAllOldTokens(uint256,uint256)", "aca66aec": "DVIP()", +"aca67500": "BalanceSet(address,uint256)", "aca67a8f": "getIsNFTAttached(uint256)", "aca6bef7": "checkPolicy(uint256)", "aca6fdf2": "getJobWorkerName(uint256)", "aca7207a": "changeCoolDownTime(uint256)", "aca7dcfe": "token_swap_supply()", "aca7fdd4": "initialFunding(address,address,uint256)", +"aca83eef": "createHodler(address)", "aca867b3": "secure(address,uint256)", "aca8dd6b": "test_threeInvalidEqString()", "aca8e9dd": "setBillboard(string)", +"aca8fe00": "dappPaymentTo(address,uint256)", +"acaa1c34": "pendingKimchi(uint256,address)", "acaa78cd": "addTransferrer(address)", "acaab181": "addSomeGas()", "acab021c": "getTOS(address)", "acab3e5d": "PricingStrategy()", +"acabab9c": "getmemotextcountforaddr(address)", "acabbbc0": "getSlogan(uint64)", "acabd1b9": "setFee3(uint256)", "acac0b9f": "setMaxPerExchange(uint256)", +"acac2b48": "rewardProviders()", "acac9a9f": "undropped()", +"acad0124": "addProjectScript(uint256,string)", +"acad36fb": "getUsdSharePrice()", +"acad41a4": "stakeHolders(uint256)", "acad94ae": "humanStandardByteCode()", "acada0d8": "SUNQToken()", +"acae3f8f": "stakeB()", +"acae8f4e": "getFinalizeTS(bytes32)", +"acae98b0": "viewauctiondata(uint256)", +"acaedc74": "decodeEIP1271SignatureError(bytes)", +"acaedf63": "getIndex(uint256,address)", "acaf0278": "contractuallyOf(address,address)", +"acaf79ac": "setLendingPoolConfigurator(address)", "acb02504": "getJobDescription(uint256)", "acb02f7c": "VotePumpCoin0x()", "acb09dde": "fechVoteNumForCandidate()", "acb0bdc3": "isPolicyExist(bytes32)", +"acb0c604": "userCollateralData(address,bytes32)", "acb10351": "setupDutchExchange(address,address,address,address,address,uint256,uint256)", "acb1516f": "accreditationMember(address,address)", +"acb17709": "miningTable(uint256,uint256)", "acb1e61f": "transferable(address)", +"acb1fb30": "opentime()", +"acb29172": "addAttributeType(uint256,string)", "acb2ad6f": "transferFee()", +"acb2b641": "_timePreference(address)", "acb2d607": "TokenBet(address)", "acb2fe3e": "checkBlackListAddress(address)", +"acb30444": "buy3()", "acb39d30": "tokenCreated()", "acb3c073": "setSwap(address)", "acb461df": "tavern(uint256)", +"acb4a307": "pendingALD(uint256,address)", +"acb4bf55": "setComputerForcastCost(uint32)", +"acb4cd26": "minSystemCoinMedianDeviation()", +"acb55ab1": "addTaxFee(uint256)", +"acb586df": "getTrait(uint256)", "acb5e570": "DepositClaimed(uint256,address,uint256)", +"acb5f074": "parseIntTest()", +"acb617cc": "burnOnSellMulti(address,address,uint112,uint256)", "acb62d7c": "clearConfig()", +"acb65dd0": "markSuper(bool,string)", "acb6a6aa": "_generateRandomNumber(bytes32,uint256)", "acb6c69b": "setTrustedClient(address)", "acb6ca94": "Nomid()", @@ -98787,45 +180844,73 @@ "acb6f75c": "PreIco(uint256,address,uint256)", "acb748e9": "RuletkaTestIo()", "acb74e73": "canSaleInfo()", +"acb7c628": "poolLength_single()", "acb8726a": "distributeTax(uint256,uint256,uint256,uint256)", "acb88986": "freeze(address,uint64)", "acb894d2": "fint256(int256)", +"acb8cc49": "DOMAIN_VERSION()", "acb902f6": "secondHighestBid()", "acb93f36": "ratePerHourInWei()", +"acb9479f": "PreIcoStarted(string,address)", "acb9656c": "setLockedTokens(address)", "acb9d6f6": "getStageandPrice()", +"acb9fcea": "mywallet()", +"acba5197": "jobMaxDuration()", "acbaed04": "TootyrTokenSale()", "acbb471f": "EthermiumAffiliates(address)", "acbb5759": "SetAction(address,uint256)", +"acbb91f6": "fxswap()", "acbc272b": "newToken(string,string,uint256)", "acbc3ff4": "keyFoundation()", "acbc62ae": "TokitDeployer(address,address)", "acbcabc0": "pantryT()", +"acbd0829": "KYCParticipants(address)", +"acbd08d6": "clearedDepositId()", "acbd9563": "buyPatent(uint16)", "acbdb084": "RequirementChanged(uint256)", "acbdb72c": "getSecondAdmin()", "acbdea6c": "canUpdateBackWindowAdjustmentRatio()", "acbe274d": "this_tablet_name()", +"acbe8452": "isEqual()", +"acbeba61": "JUG_ADDRESS()", +"acbeec7e": "getAPROptions(address)", +"acbefdb2": "readX()", +"acbf6a18": "frogx()", "acbf98a7": "endsWith()", "acbfbaac": "getPOOL_edit_30()", "acbfbd9e": "Unlock_Tokens(address)", +"acc01191": "actualTokenRaised_()", "acc02119": "DirectDemocracy()", "acc05ccc": "AddressProxy()", "acc0a246": "uint256At(bytes,uint256)", +"acc0d58d": "timeResults(uint256)", "acc10f11": "collect(address,uint256,uint256)", "acc12168": "on_block()", +"acc1ae85": "API_NewSettlement(address,uint256)", +"acc2166a": "rewardDistributor()", "acc2508b": "payoutNow()", +"acc27b98": "getIntrinsicVestingSchedule(address)", +"acc2b0f0": "setAssetConverterHelper(address)", +"acc2fe74": "FrozenBalanceChanged(address,uint256)", +"acc319ee": "pendingTROPForPool(uint256)", "acc32da3": "validateIpfsDoc(address,uint256,bytes)", +"acc359e2": "createTokenForGame(uint256,string,string,uint256,string)", +"acc36319": "lpRewardRate()", "acc3b363": "ContractBHVC()", "acc3c020": "investorsToWithdrawIter(uint256)", "acc3e283": "test_insert_empty()", "acc3e5d9": "deathFactor_ii()", +"acc58609": "offerHatForSale(uint256,uint256)", "acc58d24": "_removeStackholder(address)", "acc5a0dc": "GetPrize()", +"acc5dc48": "reserveToDVDTaxed(uint256)", "acc68b2c": "usersRef(address)", "acc69261": "addCompany(address,uint256)", "acc79f74": "openMail(uint256)", +"acc7ef63": "_canSubmit(bytes32,address)", +"acc7f0ed": "recall(uint256[],address)", "acc7f8a8": "getCurrentDatetime()", +"acc821aa": "aaveCore()", "acc823f8": "getSurname()", "acc88c0d": "decayedBalanceOf(address,address)", "acc8cb18": "pushTerm(string)", @@ -98835,14 +180920,24 @@ "acc93c9e": "setBonusThresholds(uint256[],uint256[])", "acc99bb7": "allUnKycedEth()", "acca2c24": "getFirmFromAuthority(address)", +"acca4378": "_tokenMintContract()", +"acca5b95": "rngRequestTimeout()", +"acca62db": "blackAddresses(uint256)", "acca92e0": "finalize(uint32,bytes32)", +"accabbba": "userClaimProfit(uint64)", +"accb1a3a": "AddSingleTokenInfo(address,uint256,uint256,uint256,uint256,uint256,bool)", "accb2677": "createCarsTokens()", "accb4219": "RISHABHToken(address,address)", +"accbc928": "set_trading_burning_mode(address,uint256)", "accbdfd0": "IsDistribRunningFalg_()", "accc4a61": "setPresaleOpeningClosingTime(uint256,uint256)", +"accd9152": "_encode_sol_bytes10(bytes10,uint256,bytes)", "accd932b": "icoClosedManually()", "accd962b": "tokensaleContributors(uint256)", +"accdeccc": "setSaneRate(address,address)", "acce4b10": "crowdsaleTargetReached()", +"accef1fa": "CheckBlockTimestamp()", +"accf5943": "takeSellOrder(address,uint256)", "accf80a4": "RelaunchedCrowdsale(address,address,uint256,uint256,uint256,uint256)", "accf878a": "ActionPresell(address)", "accfa48b": "changeRelease18m(address)", @@ -98851,80 +180946,145 @@ "acd00dc1": "_emitCountryCodeChanged(uint256,uint256,uint256)", "acd02c30": "disburseToken(address,address[],uint256[])", "acd04c4c": "_setVersion(uint256)", +"acd06cb3": "disabledHashes(bytes32)", "acd105d1": "doomsday()", "acd19170": "getarg_2()", "acd1bdb4": "updateMinimumContribution(uint256)", +"acd1f254": "getBalanceETH()", "acd256db": "setOraclizeBytes(uint256)", "acd2988c": "setValidBwMarketCaller(address)", "acd2e875": "refferedBy(address)", "acd3057a": "jishituihuan(address,uint256)", "acd3c39f": "frozenAccount(address,bool)", +"acd3d32d": "getBlockMultiplier(uint256,uint256)", +"acd3d926": "MAX_SELL()", +"acd3fd14": "REIGAI08()", "acd47b3a": "addAuditOrEvidence(bool,bytes32,uint256,bytes32,uint8,bytes32,bytes32)", "acd47bc3": "COMMUNITY_BOUNTY_STAKE()", "acd47e97": "TokenPurchase(address,address,uint256,uint256,bool)", "acd485fe": "Balicoin()", +"acd4a5d7": "LoanRequestCanceledByLenderAtIndex(uint256)", "acd4bca6": "vanbexTeamSupply()", "acd4e110": "Amorcoin()", "acd4e4aa": "SilverFiftyToken()", +"acd502bb": "transferLiquidity()", "acd590d3": "preSale2Finished()", "acd5b7b9": "stopAt()", "acd5fb23": "isZero(int256,string)", +"acd64592": "PopularitySetting(uint256,uint256,uint256)", "acd6a40a": "testUntil()", "acd6f096": "testThrowsIfSaleIsNotTokenController()", +"acd7135b": "weiPervSPACEXMin()", +"acd75710": "cbcPerBlock()", "acd782b1": "setProtectionPrice(uint256)", "acd78e3a": "getPayIdAndHeld(uint256)", +"acd7af01": "changePayees(address[],uint256[])", +"acd7cf13": "transferWhitelisted(address)", +"acd82931": "balanceOf3CRV()", +"acd84584": "liquidityMiningSupply()", "acd84e24": "PLN()", +"acd84e73": "setRebased(address)", "acd9277f": "market_DeclareForSale(uint256,uint256)", "acd94ccb": "frozenDaysForICO()", +"acd980cb": "feeders(uint256)", "acd9930b": "setHoverText(uint256[2])", "acd9fd65": "fun1(uint256)", "acda01f6": "setPendingWalletFee(address,uint256)", "acda28a1": "bacFund()", "acda3e10": "UpdateEtherPriceNow()", +"acda6202": "addListToEnlisted(address[])", "acda6737": "TADPOLE_BOOST()", +"acda8a99": "bestRatioImprovement()", "acdaa0d2": "payout(uint256[],address[],uint256[])", +"acdb3767": "west()", +"acdb3b3e": "buyerUpload(string)", +"acdb6cd4": "swapExactTokensForETH(address,uint256,uint256,address,address,uint256)", +"acdb94ec": "strategyFee()", "acdba7c2": "contract_num()", "acdba91f": "setTokenExpectedFee(address,uint256,address)", +"acdbd320": "ethFoundationPercentage()", +"acdc1984": "summarySZOReward(address)", "acdc42f3": "failICO()", +"acdc8ccd": "allocate(bytes32,address)", +"acdcc0c6": "getTokenPerDaiUniswap()", "acdd1454": "mint(uint256,string,string,string)", "acdd9c5c": "SetRegistrationContract(address)", "acddb63c": "requestMortgage(uint256[6],string,uint256,uint8,bytes32,bytes32)", "acddbe1c": "someFunction3()", "acde39d9": "c4cfee()", +"acde5d28": "refundAmount(address)", "acdeb5b9": "tokenApprovals(uint256)", "acdec908": "getBetIdAtRound(uint256,uint256)", +"acdee8cb": "optimalExpTest(uint256)", +"acdf46dc": "getVoteReceiversWeight(uint256)", "acdf4f18": "buyBack()", "acdf67b3": "blockWithdrawBegin()", +"acdf6d35": "investmentsOnAllDays()", "acdf7362": "setLock(address,address,uint256,uint256)", "acdfa0ac": "acceptNameTranfer()", "acdfb350": "hariKari()", +"acdfe732": "blacklistedAddr(address)", +"ace1d815": "proxyContractForBurnAddress()", "ace1ed07": "get_creator()", "ace1fab1": "withdrawReserve()", "ace237f5": "pep()", +"ace2750d": "slaughter_hold_period()", "ace30883": "absMinFee()", +"ace365c8": "checkErc20Balance(address,address)", "ace36da2": "setChain(address,address,address)", +"ace3a8a7": "PAIR()", "ace4283b": "getSecondsToExpiration()", "ace45552": "endICOStage6()", +"ace47c29": "airdropIndex()", +"ace515c3": "SolverUpdate(address)", "ace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", "ace523c4": "createReferendum(string,string,uint256,uint256)", +"ace55fec": "feeReserveAddress()", +"ace6f90c": "setClaimable(uint256)", +"ace70d00": "usdtPerSeconds(uint256)", +"ace748a5": "ClaimComp(address,uint256)", +"ace7e60d": "NewGamblingPartyFounded(address,uint256)", "ace80e0d": "bytesMemoryArray()", +"ace84392": "getFundHistory()", +"ace88afd": "emitExchangeReclaim(address,bytes32,uint256)", +"ace8a509": "addCToken(address[])", +"ace8cb15": "viewEnableStakeBonus()", +"ace9fcc2": "headerRelayerRewardRateDenominator()", +"acea1045": "transferTokenTestValue0IdBigInteger(address)", "aceaa365": "_creditTo(address,uint256)", +"aceb7110": "migrateToAUTOv2(uint256)", "aceb87e1": "getUserBio(string)", +"aceb9b6e": "helloworld(uint256,uint256,uint256)", +"acebfc54": "disputeValue(uint256,uint256)", +"acec036b": "testDecrement(uint256)", "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)", +"acec9fc5": "_activateTokens(address,uint256,address)", "aced1661": "keeper()", "aced5935": "getConfig(address,string)", +"aced9a80": "borrowBal()", "acedc33e": "setDecrementOpenInterest(bool)", +"acee2871": "setDaiToken(address)", "acee57e1": "airDropPayableMoney()", +"acee9f6d": "_toAddress(address)", "aceecbc8": "disableSelling()", +"aceefefd": "reclaimedContributions()", "acef193e": "FundingCompleted(uint256,uint256)", +"acef4ad5": "withdrawTokenFromBalance(address,address,uint256)", "acef6037": "transferToAddress(address,uint256)", "acefb7bd": "JudgmentCoin()", +"acefc5dc": "setNotice(string,string)", +"acefca19": "vswapRouter()", "acefd330": "createRandomNumber(uint256)", +"acf0ae03": "swap(address,uint256,uint256,address,uint256)", +"acf0c28b": "setCanRedeem(bool)", "acf0dd57": "getRegionUrl(uint256)", +"acf135a4": "request(bytes16,uint256,string,string,uint256,uint256,uint256)", +"acf1496a": "checkethamount()", "acf197b1": "IcoRunnedManually()", +"acf1a841": "renew(string,uint256)", "acf1b06a": "systemCreatedCount()", "acf1e9fa": "buyNinja(address)", "acf2f478": "changeTradableFciInSession(bool)", @@ -98932,108 +181092,184 @@ "acf36037": "getCountryData(uint256)", "acf36e53": "addParent(address)", "acf372ef": "SetMasterWallet(address)", +"acf39bdc": "blockerOperators()", +"acf3a250": "setEmailSent(uint256,bytes32)", +"acf3f077": "removeExternalPositionModule(address,address)", "acf400b2": "getSellOrdersBlackMarketComplete()", "acf4280c": "buildDSApprovalDB()", +"acf495f3": "succeed()", +"acf4cac4": "MKR_TOKEN_ADDRESS()", +"acf4cec3": "NewTokenGrant(address,address,uint256,uint64,uint64,uint64,uint256)", +"acf4db86": "changeEmissionCurve(uint256)", "acf50f55": "setItemForSale(uint256,uint256)", "acf555b8": "regReferrers(address[])", "acf5c689": "setRequiredBlockConfirmations(uint256)", "acf5cfbf": "Spend(uint64,address,string)", +"acf6182e": "STK_ABPT_PROXY()", "acf67746": "getPlayerTeam(address)", "acf6d918": "ChangeReturn(address,uint256)", +"acf75050": "removeTxFee()", +"acf75458": "getTotalCountries()", "acf7aea7": "getCountryLimit(uint256)", "acf7c1d2": "updateJackpotBalance()", "acf8bf2a": "channelCount()", "acf94ed5": "fallbackTriggered()", "acf975d6": "addCycleAddress(address)", "acf97a65": "redistribute(address[])", +"acf9a27e": "startPresaleEvent()", +"acf9b8cf": "changeWeiPerBlock(uint256)", +"acfa3b73": "mintByGovernance(uint256)", "acfabbe4": "updateCurrentPeriod()", "acfb153d": "RoundTime()", "acfb208b": "transferFee(uint16,uint64,address)", +"acfb2355": "presaleStatus()", "acfb2d95": "iHaveABiggerDick(string,string)", "acfb4b26": "DIVIUMx2()", +"acfb7e92": "fundSupplyAmount(uint256,uint256,uint256)", +"acfcafcd": "setMarbleDutchAuctionContract(address)", +"acfd1840": "enterLobby(address,address)", "acfd18c6": "FOUNDATION_ADDRESS()", "acfd35a0": "distributeSuccessfulCampaignEth(uint256)", "acfd82f2": "grantOwnership(address)", "acfdfd1c": "deploy(uint256,string,string,address)", "acfe27d7": "Slashing(address,uint256,bytes32)", +"acfe6279": "doUpdatePendingRewards()", "acfe711a": "Scientific()", +"acfee8ed": "createOrder(address,uint256,uint256)", "acff2fce": "forceNSFW(uint256,bool)", +"acff4485": "getEthUpdatedPrice()", "acfff377": "rollDice(uint256)", +"ad001266": "contractUsers(address)", "ad00129e": "bonusOver100ETH()", "ad00297a": "payDeposit(address,uint256,bytes)", "ad003aeb": "setUserNotifications(address,address,bool[],bool,uint8[],uint8)", "ad009062": "newVitaReward(address)", "ad0096af": "transferFromWithCustomReserving(address,address,uint256,uint256)", +"ad012f1c": "topInvestors(uint256)", "ad01ed4c": "s3(bytes1)", "ad0212df": "capitalNeeded()", +"ad023ce1": "_wrapEth()", "ad0254a6": "BitGuildWhitelist()", +"ad0305ce": "isMintWhitelisted(address)", "ad03261e": "supportRebalance()", "ad03abc5": "enableRealCap(uint256,uint256)", +"ad03d8a2": "receive_and_suicide(address)", "ad044f49": "totalFunded()", "ad04592e": "owner_deposit()", "ad04d74d": "buyCoreWithBalance(address,address,uint256)", +"ad052dd2": "_eMTNData()", "ad0570c7": "setUsernameForAddress(bytes32,address)", +"ad05eb1a": "fetchLastPrice(bytes32,bytes32,bytes32)", "ad07008f": "icoDiscountPercentageLevel2()", +"ad071f00": "underlyingAssetToken()", "ad07220f": "forceTransferBalance(address,address,uint256)", "ad075684": "TotalPayment()", "ad0767bd": "RECORDPart()", "ad076994": "verify(address,address,uint256)", "ad076bfc": "debug_hash256Double_concat(bytes,bytes,bytes)", +"ad080ffa": "getLatestLocation()", +"ad08a472": "addMission(uint256)", +"ad08d6c6": "setFeeDiscountTo(address,uint256)", "ad09019d": "oraclize_getNetworkName()", "ad09202a": "confirmDealCompletionByDoctor(bytes16,bool)", "ad093409": "getTicketOwner(uint256)", "ad0a58c8": "checkAndDeclareWinner(uint32)", "ad0a6cc3": "attackTileForExistingUser(uint16,uint256,bool)", +"ad0a93bc": "address_1()", "ad0af8c8": "MariamTestCoin()", +"ad0b27fb": "unsubscribe(uint256)", "ad0b2bec": "redeemWinnings()", "ad0b38a2": "getAppId(string)", "ad0b6013": "DEFAULTED_STATUS()", +"ad0b8b9d": "disableProvider(uint256)", "ad0bc739": "testConcatMemoryZeroLength()", "ad0be174": "zHQNumber()", +"ad0be4bd": "mint(address,uint16)", +"ad0bfac1": "getLavaTypedDataHash(string,address,address,address,address,uint256,uint256,uint256,uint256)", "ad0c3dff": "icoStartedAt()", +"ad0cd7d0": "getReleasableLPTokensMinted()", "ad0d3713": "getTittyOwner(uint256)", "ad0d4c3d": "HaiWang(uint256,string,string)", +"ad0d82a5": "maxBreedCostMultiplier()", "ad0dd79f": "usersWithdrew()", "ad0e053b": "getPointerOwner(uint8)", +"ad0e0a4d": "setEventHooks(address,address)", "ad0e13bb": "toB32(bytes,bytes,address)", +"ad0e89b4": "pendingExposure(address)", "ad0e8bc7": "givepoints(address,uint256)", "ad0e9053": "set_pauseReturn(bool)", "ad0f2916": "coinPrice()", +"ad0ffd1c": "modifyCurrentVideoGameItemPrice(uint256,uint256)", "ad108280": "BECTStandardToken(uint256,string,uint8,string)", "ad1088e4": "didProve()", +"ad1106ff": "isHeroAllowed10(uint256)", "ad111feb": "DFSToken()", +"ad116d20": "holdersOrder(address)", +"ad11bf43": "blacklistContains(address)", "ad11cc1d": "claimC1()", "ad11fe44": "revokeAllowance(address)", "ad121e33": "fundFounder()", +"ad124134": "burnBIn(uint256,uint256)", "ad1288c8": "forkTransferFrom(address,address,address,address,uint256)", "ad12cc0b": "removeLibrarian(address,address)", +"ad12ffe0": "badPractice(uint256[])", +"ad131ec5": "submitBatch(address[],uint256[],uint256,uint8[],bytes32[],bytes32[],uint256[],address[],uint256[],uint256,address)", +"ad135a16": "suspendPynthsExchange(bytes32[],uint256)", "ad13eb02": "createScanner(uint256)", +"ad14146e": "tokenargs(address)", +"ad144369": "POOL_FEE_DAILY_PERCENT()", +"ad1483c3": "afterTransfer(uint64,uint64,uint64,uint64,uint256)", +"ad14a855": "_eventData(uint256)", "ad150aec": "calculateHeldTokenDistribution()", "ad156d34": "AllocateBountyAndEcosystemTokens(address)", +"ad15767f": "setOwnerWallet(address,address,address)", +"ad1594b9": "promisedEther()", +"ad15ff94": "setExchangerImplementation(address,bytes)", +"ad1606e0": "getLastSetPriceTime(address)", +"ad161582": "setStepWeight(uint32)", +"ad16158e": "publicSellCompleteSets(address,uint256)", +"ad162f74": "IPOcreator(uint256)", "ad166aae": "MyTest(uint256,string,uint8,string)", +"ad16790f": "updateMinStakeDurationDays(uint8)", +"ad16d8e0": "_computeUniswapPairAddress(address,address,bool)", +"ad1728cb": "safeApproveAllTokens()", "ad180328": "_check(address,address,uint256)", +"ad181a2f": "swag()", +"ad187266": "refundEarn()", "ad188be0": "userBetContribution(address)", "ad1892b2": "sendEthersToRefundAddress(address)", "ad1896db": "resetElectionPeriod()", "ad18ad0c": "quote(address,uint256,address)", +"ad190734": "isPoolOpen()", "ad1922b0": "setIcoCloseTime(uint256)", +"ad196774": "ManagementCompanySet(string)", "ad19bd26": "getVoteCommit(uint256,address)", "ad19e993": "_callSender(bytes32,address,address,address,uint256,bytes,bytes)", "ad1a17b4": "getPaymentCount(uint256)", "ad1a38be": "_createNarco(string,string,address)", +"ad1a755c": "updatePayout(uint256)", "ad1a7d0c": "getBook(bytes32)", "ad1aa252": "withdrawUnsentTokensForOwner()", +"ad1ac3d0": "icoBonuses(uint256)", +"ad1af17a": "subscription(uint256,uint256,uint256[5],bytes32[3],uint8)", "ad1b1f8b": "settleJackpot()", "ad1b3909": "coinage()", "ad1be7c1": "softCapClose()", +"ad1c0fd7": "AFIMaxSupply()", "ad1c582a": "divUIntValue(bytes32,uint256)", "ad1c5d6c": "updateShareCrystal()", "ad1c61fd": "test(uint256,string)", +"ad1c9771": "transformActivate()", "ad1d0dcf": "exodus()", "ad1def42": "registeredAddress(address)", +"ad1dfe3b": "QUOTIENT_LIMIT()", "ad1ef61e": "donkeyInvested(address)", +"ad1f152c": "Minted(address,address,uint32)", +"ad1fa9c9": "getTokensPerLp()", "ad203bd4": "subMonths(uint256,uint256)", "ad207feb": "ethTeamWallet()", +"ad209fa8": "m4Wallet()", +"ad20fdb4": "approve_838(address,uint256)", "ad217ae5": "stats(uint256)", "ad220cf1": "currentPrivateSale()", "ad221195": "transferTokenFrom(address,address,uint256)", @@ -99043,23 +181279,41 @@ "ad22980a": "TopChainCoinMintFinished()", "ad22ccc0": "committeeJoinVoters(address,address)", "ad22d4a2": "get_last_item_in_state(bytes32)", +"ad22ecaa": "deedstackInfo()", "ad2334a0": "spinnerModulus()", "ad2377c1": "pausePriceRaise()", +"ad2396e3": "openOnlyToWhitelist()", "ad23ad92": "AfriHealthCoin()", "ad23de63": "isAddressWhiteListed(address)", "ad23e038": "HelloToken(uint256,string,uint8,string)", "ad23fdc3": "deCompose(string)", "ad23fde0": "breed(uint256[2],uint256[2],uint256)", +"ad23fe73": "providersLength()", "ad247dd9": "permissonedAccounts(address)", "ad24d512": "TECHNOBITToken()", +"ad24dce7": "farmingToken()", +"ad2515f8": "calcLiquidatePawnAmount(uint256)", +"ad255093": "multisendErcBADR(address[])", +"ad25c49f": "nerdVault()", +"ad25cb42": "superAdmins(address)", "ad25ce57": "bidOnSaleAuction(uint256)", +"ad263009": "mintFIVTtoken()", "ad266df8": "ARA(uint256,string,uint8,string)", +"ad268521": "getMinGameAddon()", +"ad26a07c": "updateStatus(uint256,uint256,uint256)", "ad26f6e1": "SetParticipantName(address,address,string)", +"ad272fa4": "pendingBig(uint256,address)", +"ad2760b5": "getLockupFinishTimestamp(address)", "ad27b14d": "cancelBet(bytes16)", +"ad289e76": "multiTransferERC20TightlyPacked(address,bytes32[],uint256,uint256,bytes32[])", "ad28ff88": "blacklist(address,address)", "ad295b26": "getDepositInstanceCount()", +"ad2961a3": "supplyRate()", +"ad29ad1e": "removeOperatorAndAdmin(address)", "ad29ca6d": "eosCrowdsaleAddress()", +"ad29ce84": "refreshOwner(address)", "ad29ddaa": "removeRound(uint256)", +"ad2a04e0": "startMiningBlockNum()", "ad2a0a7b": "_changeEternalStorageContractAddress(address)", "ad2a39d6": "secondStartTime()", "ad2a9c5f": "MIN_CARD_PRICE()", @@ -99071,33 +181325,58 @@ "ad2ba325": "splitStr2Int(string,string)", "ad2bb1b3": "blockAddress(address)", "ad2bbf9c": "_redeemByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ad2bc272": "setPer(address,uint256)", +"ad2bc2d5": "checkAndRemoveAccountInLiquidation(address)", "ad2c1632": "ArenaplayToken()", +"ad2c7071": "auctionSecondsDuration()", +"ad2cb239": "claimAdministration()", +"ad2cd266": "getValueAndMultiplierParameters(address,uint256)", "ad2d10b2": "initializeReservedVault(address)", "ad2da239": "calculateVote(uint256,uint256,uint256)", "ad2daa48": "roundTimeRemaining()", +"ad2dcd5a": "NarcoArrived(uint8,uint256)", "ad2de16d": "acceptTxTask(uint256)", +"ad2ded2b": "workerExecuteMetaTransaction(address,bytes32,bytes,bytes32,bytes32,uint8)", "ad2e1d49": "getHeirachy(bytes32)", +"ad2e43c8": "deploy(address,address,address,bytes32,uint256,uint256,uint256,uint256)", "ad2e6aff": "WithdrawEarnings()", "ad2e8c9b": "getDuration()", "ad2ec740": "PRICE_9()", +"ad2f933b": "getWinThreshold(uint256)", "ad2fad33": "setSpawnProxy(uint32,int256,address)", "ad2fea7c": "removeMinter(int256,address)", +"ad306485": "setGenesisAddresses(address,address)", +"ad30948e": "GCT()", "ad317c23": "mileagePointPrice()", "ad319bab": "TokenERC20AC(uint256,string,string)", "ad31e845": "_tag(uint256,string)", +"ad31f3f4": "owner_wallet()", "ad3286fc": "AddToken(address,uint8)", "ad32a40f": "Fund(address,address,address,address,address)", "ad32f925": "makeAvailable()", +"ad333348": "notifyStakesChanged(address[],uint256[])", "ad3335b5": "setINNBCTokenAddress(address)", "ad33513f": "refundAmount()", +"ad33648a": "updateDevFundBetFee(uint256)", +"ad337aab": "GetTenantDetails(uint256)", +"ad3385f6": "T_LIST_TOKEN()", +"ad339d7a": "claimGovernorChange()", +"ad33d040": "totalSharesDown(uint256)", "ad33e21d": "getReferralBonus(uint256)", "ad3429be": "developmentTokens()", "ad344465": "AccessorySeriesCollection(uint8)", +"ad344877": "newPool(address,uint256,uint256[],uint256[])", "ad344bbe": "sgtExchanger()", +"ad3476d3": "testUnavailableActionsWhenOnSale()", +"ad35363f": "updateManagerFundStatus(bool)", +"ad357101": "stakingRate(uint256,uint256)", +"ad358d99": "unsetPackage(string)", "ad35bdb0": "extraSupply()", "ad35dcd3": "AGAVE(string,string)", +"ad36ba98": "MIN_VOTE_STAKED_PERCENT()", "ad36c593": "getOwnerOfCampaign(bytes32)", "ad3704c5": "getApplicantsLength()", +"ad373732": "relayAndVerify(bytes)", "ad374f5b": "enableClaimTokens(bool)", "ad376113": "addDevReward(uint256)", "ad379089": "canSettle(bytes32)", @@ -99109,39 +181388,70 @@ "ad38bf22": "updateBlacklister(address)", "ad38d6f1": "whitelistWallet()", "ad38fba5": "transferEthTo(address,uint256)", +"ad390566": "setExitFeeCooldown(uint256)", "ad395939": "withdrawContributorPot()", "ad395ad3": "removeFromContractIDArray(address)", +"ad396260": "Note_root()", "ad3a05ca": "BlackToken()", +"ad3a4bc3": "calc_transfer_vault_shares(address,address,uint256)", +"ad3ad709": "sendMultiSigBatch(address[],uint256[],uint256,uint256,bytes)", +"ad3ad875": "salesMap(uint256)", "ad3b1b47": "withdrawFees(address,uint256)", +"ad3b7633": "__startedOn()", +"ad3b956e": "GameRemoved(address,uint256,address)", "ad3bf1f1": "refundPeriodOver()", "ad3c0b9d": "CROWDSALE_DURATION()", +"ad3c23e1": "chkUserDetails(address)", "ad3c8b22": "addSkipPrice(uint256)", "ad3c901c": "getPendingById(uint256)", +"ad3cc190": "setRangePrice(uint256)", "ad3cd883": "changeContractName(string)", "ad3cf852": "redeemLuckPool()", +"ad3d3b3d": "getSaleIdNow()", +"ad3db4e5": "getBetStructPosition(uint256,address)", "ad3de14c": "getMap()", "ad3e0ed2": "getAffiliateSenderPosAmount(uint256)", +"ad3e1f6f": "withdrawEthMax(uint256)", "ad3eb71f": "plcrFactory()", "ad3ef46d": "RealstateOceanProject1(address)", +"ad3f6b22": "A(uint256[])", "ad3f972e": "deleteChild(address,address)", "ad3ff3c1": "houseAlwaysWins()", "ad401842": "setDateMainStart(uint256)", "ad40256f": "reclaimableOwner()", +"ad403546": "_createDepositBlock(address,address,uint256,uint256)", +"ad404063": "openETHVault(uint256,uint256)", +"ad409406": "Trade(uint256,address,uint256,address,address)", +"ad409500": "crvPath(uint256)", +"ad4123ae": "DailyLimitChanged(uint256)", +"ad415bc1": "TokenSwaped(address,uint256,uint256,uint256,uint256,uint256)", "ad418e66": "strategicReserveSupply()", "ad41b628": "MHCToken()", +"ad4258bd": "getFundKncBalanceTwei()", +"ad43973e": "buy(address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"ad43f2ec": "myVerifiedDocuments()", +"ad4451a3": "purchaseNFT(uint256,uint256)", "ad447a19": "getBalanceDB()", "ad449198": "returnBorrower(uint256)", "ad4493fe": "checkPoint(uint8,int256,uint16)", +"ad449e9c": "processUnstaking(bytes32)", +"ad44b5cf": "_emit(bytes,uint256,bytes32)", "ad44c205": "Nudge()", +"ad44d0ca": "query2_fnc(uint256,string,string,string,function,uint256)", +"ad44d68d": "getTokenInsuranceUints(uint256)", "ad44e73b": "unwhitelist(address[])", "ad450b72": "SupplyLimitChanged(uint256,uint256)", "ad452254": "BsToken_SNOV()", +"ad456441": "registerNewGame(string,string,string,bytes32,bytes32)", "ad459a1c": "CurrentAirdropped()", +"ad45e505": "changedMinimumLockPeriod(uint256)", "ad468489": "register(bytes32,address,bytes32,bytes32,bytes32)", +"ad46b5f7": "uponWithdraw(address,uint256)", "ad470886": "token_approve(address,address,uint256)", "ad4749f4": "setupPeriodForFirstStep(uint256,uint256)", "ad474b9a": "Engraved(address,string,string,bytes32)", "ad475113": "PRESALE_BONUS_VOTING()", +"ad475b11": "doSwap(address,address,uint256,uint256,address,address)", "ad478dda": "investmentUpperBounds()", "ad483188": "setCCH_edit_12(string)", "ad48636a": "secondBonusSalesEnds()", @@ -99149,41 +181459,72 @@ "ad487f3c": "LogFreeze()", "ad48d611": "marketToken()", "ad4946ee": "removeAddressFromNonzeroBalancesArray(uint256,address)", +"ad496f4d": "DrawNewGif(uint256)", "ad498ce1": "RATE_NO_DISCOUNT()", +"ad49d0c6": "BrickUpdated(uint256)", "ad49f595": "checkAddress(address,address)", "ad4a7bd9": "lockTokensForAs(address,address,address,address,address,address,address,address,address)", "ad4ac3de": "LoveCoin()", +"ad4b0be0": "ownsLicense(address)", "ad4b243b": "buyOneMinuteLottery(uint256,uint8[],address,bool)", "ad4b2ca4": "batchdrop(address[],uint256[])", "ad4b558c": "monsterIndexToOwner(uint256)", +"ad4b61a8": "min_managers()", +"ad4b9cfb": "fetchItem(uint256)", "ad4c05f1": "setResourceForStar(uint8[5],uint16[5],uint32[5])", +"ad4c3372": "countfree()", +"ad4cc43e": "updateAddressParameters(bytes8,address)", "ad4cd0d6": "stdlib()", +"ad4d250f": "SaleUnpause()", +"ad4d66b6": "frostbite(address)", "ad4dde0f": "transferOwnershipOfItemsStorage(address)", +"ad4e2690": "priceFeedsUSD(address)", "ad4e2f77": "addDragon(address,uint256,uint256)", "ad4e39f3": "getLendingItemInfo(address,uint256)", "ad4f0e3a": "DevsmartCoinFive()", +"ad4f41ae": "lastEndTime()", "ad50039f": "setTechBonus2(uint256,string)", "ad5022a5": "Votes()", "ad506098": "WowMusicDiamondToken(address)", +"ad507ea7": "isValid(uint256,uint256)", "ad509c1d": "sendToken(address[],address[],uint256[])", +"ad50c927": "IhaveTheBiggestDick(string)", "ad50dd1f": "endPrivateSaleStage()", +"ad50e4eb": "goodPrictice(address)", +"ad51369a": "f(bool,bool)", +"ad522877": "LogReceivedEth(address,uint256,uint256)", "ad53322b": "donationAmountInWei(address)", "ad534d9c": "logCoinAgeRecord(address,address,uint256,bool)", +"ad539c0f": "depositDrc(uint256,uint256)", "ad53be1d": "priceLeRT()", +"ad54056d": "Swapout(uint256,string)", "ad544dcb": "testSetNotUpdatable()", +"ad549086": "changeCrowdsaleRateBonus(uint256)", "ad549e53": "set_participant_arbits_kyc_whitelist(address,bool)", +"ad54d2da": "setExtraAddressOwner()", "ad5511a5": "_setTokenSeed(uint256,string)", +"ad553eef": "updateServiceAdmin(address)", "ad559fd6": "setHigherPricePercentage(uint256)", "ad562965": "getReceiptRoot(bytes32)", "ad5632e6": "storeAuthenticity(string)", +"ad56368d": "depositStarts(address)", +"ad564f5e": "withdrawFromAdvisersWallet(address,uint256)", "ad5688d8": "setCountryPicture(uint256,string)", +"ad56ca42": "devStartBlock()", "ad5780af": "clearDNSZone(bytes32)", "ad57a2df": "unrestrict()", "ad57ceb4": "ethForMilestone()", "ad58a7d2": "getSettingState(uint256)", +"ad58bdd1": "relayTokens(address,address,uint256)", +"ad58e573": "workFactor(address,uint256)", +"ad590945": "registerAll(address[],uint256[],bytes[])", +"ad5919e1": "withdrawalfunds(uint256)", "ad59ffd1": "maxAmountBonus()", "ad5a157d": "promoMoney()", +"ad5a6f39": "viewCurrentMonthDividend()", "ad5a8f29": "canEnterPool(address,uint256)", +"ad5ad801": "claimAndWithdrawItem(bytes32)", +"ad5b54cc": "equalStringFailTest()", "ad5b7189": "hasBooster(address)", "ad5b896e": "refundMany(address[],uint256[])", "ad5bfcb5": "getServiceStatByAddr(uint64,address)", @@ -99191,53 +181532,96 @@ "ad5c4648": "WETH()", "ad5c613d": "purchase(bytes)", "ad5cd9e7": "startSTO()", +"ad5cefd1": "seedProtectedLiquidities(uint256[],address[],address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", "ad5d2862": "getWinnings(uint256)", "ad5d638d": "minFundedValue()", +"ad5da576": "seedIssue(address,uint256)", "ad5dabb0": "assertYoungerBalance(uint256,uint256)", "ad5dabca": "QatarCoin()", "ad5e2cd0": "addPresale(address,uint256)", "ad5e46cb": "hasError()", +"ad5eb04c": "beforePeriodFinish()", +"ad5f1574": "FEE_AMOUNT()", "ad5f3433": "sumHardCapICOStage4()", +"ad5f5bb2": "_setNewAddresses(address,address,address,address)", "ad5fb2b1": "seedVerification(string)", "ad60540b": "MoccaCoin()", "ad605729": "getParticipantCount()", "ad606c72": "devWithdraw()", +"ad60a96f": "setctnum(uint256)", "ad60fb73": "mint(string,uint8,string)", +"ad60ffcc": "totalFundValue()", +"ad615dec": "quote(uint256,uint256,uint256)", "ad615f40": "getCrosCounter()", +"ad619732": "ama(uint256,uint256,uint256)", +"ad61ccd5": "relayHubVersion()", +"ad61dfc1": "entityRewardPerBlockNumerator()", +"ad61e0b8": "onActivate(uint256)", +"ad61ebea": "getBoardIpfsHash(uint256)", "ad621b14": "BaoMaToken()", "ad622d0e": "addDoctors(uint256,uint256,string)", "ad62bda5": "setRoundLength(uint32)", "ad62f1ca": "mintFor(uint256,address)", "ad631abe": "BLO_PER_WEI()", +"ad631e5e": "getEstimatedEthFromJpy(int256)", +"ad63910e": "setZeroFeeReceiver(address,bool)", "ad63a469": "totalUsedTokens()", +"ad63b19c": "allowCrowdsale()", +"ad63f70f": "setAdminContoller(address,bytes)", +"ad641bc8": "getEstimatedDFGforRFITEST(uint256)", +"ad642a25": "getRCodeMappingLength(address)", "ad64ae4b": "registerModule(address)", +"ad64d068": "availableTokens(uint256)", "ad64fa5c": "MINBET_forORACLIZE()", "ad652cdd": "InternetMarket()", "ad655998": "addAuthorizedInsertAgent(address)", +"ad659835": "SwapCurve(address,address,address,address,uint256)", "ad65d76d": "ethToTokenTransferInput(uint256,uint256,address)", "ad66de24": "impl_lock4Dividend(address,uint256)", "ad66e52a": "etherBalance()", +"ad67283b": "migrateCUSDCToDUSDC()", +"ad6741c2": "ELAPrice()", +"ad676e0c": "saleCap(int8)", "ad677d0b": "join(bytes32)", +"ad684efc": "lastRebaseNeutral()", "ad686011": "returnPurchase(address)", "ad68ebf7": "migrate(address,uint256)", +"ad69494e": "running(uint256)", "ad69644b": "setBestAngel(uint32)", +"ad6973af": "rootTransferLock()", "ad69caa5": "expMod(uint256,uint256,uint256)", +"ad69ee81": "isFarmHolder(address)", "ad6a0546": "creatorsLocked()", +"ad6a23b2": "removeExchange(string)", +"ad6abb0c": "calculateTotalToken(bool)", "ad6ad449": "HodlerMining()", +"ad6ad900": "stakeID()", "ad6aefbb": "BeatTokenPreIcoStarted()", "ad6b2c90": "getListTokens(address,uint256,uint256,uint256)", "ad6b5d04": "amountClaimed()", "ad6b9499": "getContactRecord(string)", "ad6c8762": "paymentChannelsCount()", +"ad6c910c": "_subtractFromLockedInPendingDelegations(address,uint256)", "ad6cd14e": "EthLongExercised(address[2],uint256[8],uint256,uint256)", +"ad6d2f3a": "setUtilityTokenAddressOnce(address)", +"ad6d77e3": "portalType()", "ad6d9b89": "bytetherOVAddress()", +"ad6de445": "AddAdmin(address)", "ad6dfe5c": "getPRewardId(address,uint256)", "ad6e155e": "setContractPreICO(address)", +"ad6e2148": "rareClaimed(address)", +"ad6eb3b6": "depositLockerLumpSum(address,address,address,address,uint256,uint256,string,bool)", "ad6eba9f": "getSingleSubjectByAddress(address,uint256)", +"ad6ebe32": "bonusLevel3Percent()", "ad6eff22": "getUserType(address,address)", +"ad6f5964": "claimsData()", "ad6f80ff": "getSignatures()", +"ad6fb991": "createPair(address,address,uint256,address,uint8,uint256,string)", +"ad700322": "earnedToMDOPath(uint256)", "ad70810a": "getChainDrawings(uint256)", "ad70924a": "stablize()", +"ad70ae1a": "ARCHER_MIN_TYPE()", +"ad70f637": "reservedPercentage()", "ad70fbc8": "QuickChain()", "ad714012": "calculateMatchOutcomesForRoundId(int256)", "ad71766e": "getWeiSoldToday(address)", @@ -99247,33 +181631,52 @@ "ad71ec8a": "YiWenTest(uint256,string,string)", "ad7222c1": "tokensAmountFrom(uint256)", "ad723faa": "MChip()", +"ad726fc3": "addInternal(address)", +"ad7286ec": "govVaultProfitShareFee()", "ad72dce9": "buildFactory(uint8,uint256)", +"ad72f3f5": "MintableAddress()", "ad731de7": "createPromoCollectible(uint256,address,uint256)", "ad732eea": "send(bytes20[])", +"ad73349e": "submissions(uint256)", +"ad7359c9": "NEW_CDAI_ADDRESS()", "ad738845": "payVATToGovernment(uint256,uint8)", +"ad740f8c": "setBuyBackAddress(address)", "ad7411e1": "CreateNertia(address,uint256)", +"ad742e23": "max_price_increase_allowed(address)", "ad7430cc": "RECEIVER()", +"ad7486b3": "lemessage()", +"ad74b775": "accounts(address,address)", "ad74f9bc": "calculateCurrentPrice(uint256)", +"ad752d67": "rateIsFrozen(bytes4)", "ad7554d9": "setDoubleRewardEndTime(uint64)", +"ad761315": "priceContractAddress()", "ad76325f": "finishProposalVoting(uint256)", "ad7639fe": "TokenPurchase(address,address,uint256,uint256,string)", "ad76423e": "DelphiToken()", "ad764780": "OpenController(address)", +"ad76f0ac": "execone(uint256,uint256)", "ad7738b6": "MAX_TOTAL_ADOPTED_AXIES()", "ad78dc8e": "totalWannaBuyAmount()", "ad78f31a": "ticketStringFromAddressBytes(bytes32,address)", "ad796b5d": "TOKEN_SUPPLY_AIR()", +"ad79a858": "totalShort()", "ad79c927": "TokenSwap(address,address,address)", +"ad79d15d": "addressToNonce(address)", "ad7a14e1": "tokenRemainPublicSale()", "ad7a5ff9": "autoDistributionViaETHContributions()", "ad7a672f": "totalBalance()", "ad7b09c5": "InitIcoController(address)", +"ad7b405d": "openAuctionForCar(uint256)", "ad7b6884": "editContributors(address[],uint256[],uint256[])", +"ad7b68fe": "mintedBalance()", "ad7b6cb5": "bountySEEDSinWei(address[],uint256)", "ad7bafc7": "mint(int256,address,uint256,uint256)", "ad7bfd2d": "Cashchain()", +"ad7c4f01": "starSystemMaps()", "ad7c66d0": "sellAllMilk()", +"ad7cc904": "_updateLastFeeOpTime()", "ad7d59fc": "checkPlace()", +"ad7dd0e9": "minTransferFee()", "ad7df080": "consul()", "ad7e01c8": "wolkGenesis(uint256,uint256,uint256,address,address)", "ad7e262c": "hasEmployerMinRatingsCount(address,address,uint256)", @@ -99286,267 +181689,466 @@ "ad7eee9f": "updateInt256s(bytes32[],int256[])", "ad7f02b5": "balanceOf(address[16],address)", "ad7f401b": "creatorInited()", +"ad7f457a": "NameUnregistered(string,address)", +"ad7f9cba": "approveTickets(address,uint256)", "ad7f9d76": "getInvestorBuyers()", "ad7fa43c": "settleFeeSecondPart(address,uint256)", "ad7fadc5": "buy(address,address)", +"ad7ffe90": "boxLastSeriesNo(uint256)", "ad7fff7c": "hasWorks(bytes32)", "ad8088a5": "XdacToken()", "ad80a7b4": "totalUndistributedDividends()", "ad80ef94": "tokenExchanges(uint256)", "ad810fe5": "holderIndex(uint256)", +"ad8128d8": "approve_486(address,uint256)", "ad818071": "showStats()", "ad81cd90": "villagesSold()", "ad81d6f3": "createDefaultLinglongCat(uint256,uint256,uint256,address,uint256,uint256)", +"ad81e4d6": "powerScale()", "ad81f3be": "Barneys4HackerSpaceToken()", +"ad821aa7": "ProtectionTxAccepted(bytes32,address,bytes32)", +"ad827dc4": "bidForTokenBidder(uint256,address)", "ad82ae61": "internalDoubleTransfer(address,address,uint256,address,uint256)", "ad82dcac": "testBlockhashCorrectFee()", +"ad832be7": "investmentsTotal()", +"ad835c0b": "ChangeKeeperLimit(address,uint256)", "ad838107": "_checkDestination(address,address,uint256,bytes)", "ad83bfce": "GetOwner(string)", "ad845d2d": "toBytes()", "ad84e1be": "createTokenContract(address)", "ad84e2a6": "getCrab(uint256)", "ad84eaab": "minimumPurchaseAmount()", +"ad8514c4": "bookList(uint256)", +"ad85e3bd": "devAddr_()", +"ad863faa": "_ecosystem()", +"ad865517": "ChangeAddressFund(address,address,address)", "ad869e1a": "_batch3_icosaleEndTimestamp()", "ad86c10d": "GamingCoin(string,string,uint8)", "ad86ee0b": "passOnContract()", "ad8718c2": "Create(uint256,uint256,uint32)", +"ad8731b0": "getIlk(address)", "ad8733ca": "multisend(address,address[],uint256[])", +"ad877e7c": "startBeastSale()", "ad879a46": "cancelBetByA(uint256)", "ad886326": "_isSignedOwner(bytes32)", "ad889f03": "USER_TIMEOUT()", "ad88d8a5": "try_pay(address,bytes12)", +"ad88db61": "weekGameStakes(uint256,uint256)", "ad88f53e": "setFirstStageEndsAt(uint256)", +"ad8911dc": "claimTokensFromContract()", +"ad892d23": "approve_77(address,uint256)", +"ad895d7e": "depositToken(address,uint128)", "ad89e64b": "_updateLandData(int256,int256,string)", "ad8a9c8e": "ownerSetOwner(address)", "ad8ae3ae": "poke(address,bytes32)", "ad8b4698": "COMETUBU()", "ad8b6657": "_createDrone(address,uint256,bool,bool)", +"ad8b9b9b": "conservativePreciseDiv(int256,int256)", +"ad8b9edc": "buyToken(string,string)", "ad8c3cd2": "setTank(address)", +"ad8c5167": "UnfrozenAccount(address)", +"ad8c9e0f": "c8_lp()", "ad8ce06b": "gasPerTx(bytes4)", "ad8d36cb": "CCH_EDIT_2()", "ad8d5f48": "exec(address,bytes,uint256)", +"ad8e0255": "getPublic(uint256)", "ad8ead69": "createTeam(string,uint256)", "ad8ed335": "__proxy(address)", +"ad8efedc": "listingPriceInERC20(uint256)", +"ad8f4b50": "initPoolParams(address)", "ad8f5008": "strike()", +"ad8f6a74": "newSIP(uint256,uint256,bool)", "ad8f905d": "PoolPrize(uint8,uint8,uint256,uint256)", +"ad8fc5e6": "requestRandomNumber(string,string)", "ad8fccf3": "freezeMulti(address[],bytes32[],uint256[],uint256[],uint256[])", +"ad8ff669": "initMISOTokenFactory(address)", "ad906661": "add_to_ico()", +"ad9096b4": "getMultiplierLockUp(address)", +"ad9104a9": "SetMintingStartTime(uint256)", "ad913633": "getOriginalOwner()", "ad9171df": "getRemainingLimit(address,address)", +"ad918f13": "initialStrategyStartBlockNumber()", +"ad92a022": "calculateAmountWithoutFee(uint256)", "ad92e46c": "getNumBettings()", "ad93640f": "TRANSFER_PROXY_V2()", "ad94d901": "ownsAll(address,uint256[])", +"ad956cf0": "getInterestDecayRatio()", +"ad95bd62": "addNewProject(address)", "ad9657f4": "createCoin(uint16,string)", "ad966a03": "_bytes32ToString(bytes32)", +"ad96d29b": "getKittiesByUser(address)", +"ad9737c1": "swapItWithData(bytes)", +"ad973ab9": "getNow0x()", +"ad973c8c": "ChangeSellerEvent(address,address)", "ad973d74": "addCustomer(address)", "ad976c3e": "setData_24(string)", "ad979417": "setPoolName(string,uint256)", +"ad982c79": "getemoji(uint256)", +"ad9891ff": "divideProduct(uint256,string)", "ad98ebaf": "ProjectManager()", "ad994621": "answerDeliveryChallenge(address[2],uint64,bytes32[],uint256[],uint256[2],uint256[2],uint256,bytes32[3],uint8,bytes32[])", +"ad998fa0": "getNumberOfStakingsByUser(address)", +"ad99fae1": "lockETHAndDraw(uint256,uint256)", +"ad9a2ef5": "mediatorOnOtherSide()", +"ad9a544a": "etherInProgress(address)", +"ad9a9ea5": "delegateList(uint256)", "ad9a9f17": "SINGLE_BLOCK_LEN()", "ad9abf32": "payDividends(uint256,uint256,uint256)", "ad9ac1bc": "addToAllocationList(address,uint256)", +"ad9aedb8": "addMsg(string)", "ad9b4fc5": "Win(address,uint8,uint256,bytes32,bytes32,uint256,uint256)", "ad9b8024": "price(address,uint256)", "ad9bdebb": "isReleasable()", "ad9c280f": "setLoveUrl(string)", +"ad9c789f": "totalPooledBPT6()", +"ad9d0323": "addressFromTokenId(uint256)", "ad9d4ba3": "depositEth(address)", +"ad9d6068": "show_in_details()", "ad9df055": "adminClaimAirdrop(address)", +"ad9dfaa1": "claimTeamAdvisors()", "ad9e3e85": "My2Token()", +"ad9e8650": "setlinkFactory(address[])", +"ad9eb1a7": "LogRemoveCertificateAuthority(address)", "ad9ec17e": "setGreyToken()", "ad9f20a6": "MIN_PRICE()", +"ad9f6eec": "setFraxStep(uint256)", "ad9f9a68": "withdraw_unclaimed_balance(uint256)", "ad9fb75e": "teamDate()", +"ad9fc717": "plDepositTotal()", +"ad9fdf1d": "executeWithValue(address,bytes)", "ada0114c": "Firstsale()", "ada018e1": "setBurnFeeAbs(uint256)", "ada0618a": "CATSPACE()", "ada06dac": "tokenSaleCosts()", +"ada07fa0": "sendRewards(uint256)", "ada14698": "killSwitch()", +"ada18da2": "claim2(address)", "ada199dd": "setFoundersTokensPercent(uint256)", "ada1a34b": "resetVoteKindnessEvery()", "ada1a8f7": "VUP_PER_ETH_ICO_TIER2_RATE()", "ada1b74e": "finalTokensIssueTime()", "ada1f3ad": "ReferralContract(address,address,address)", +"ada21d81": "m_Stacking_Block_Number_Start()", "ada24dfc": "KeberuntunganAcak()", +"ada27867": "setTokenHolder(uint256,address)", "ada2cced": "getNumberSuppliers()", +"ada307a0": "getAccountFreezedInfo(address)", +"ada36dfc": "fakePriceBTC()", +"ada3a764": "challenge(bytes32,bytes32)", +"ada3ca71": "getSlabPercentage()", "ada44092": "addClient(bytes32)", +"ada44679": "rankBonus(uint256)", +"ada4a768": "unregisterManager(address)", "ada4c022": "getAvailableWinnings(address,address)", +"ada56985": "collectBonusDust(address)", "ada5ba01": "getNodeIndexId(bytes32)", "ada5cf63": "initializedBlock()", +"ada61516": "NODE_SHARE_LV1_PCT()", "ada636ce": "compareStages(string,string)", "ada65728": "Funding_Setting_funding_time_end()", "ada69935": "PonicsToken(string,string,uint8,uint256)", "ada6b1d9": "collectedCent()", "ada6e537": "AuctusBountyDistribution()", +"ada70256": "detachSelfAddress(address)", "ada7061b": "add_hard_limit(uint256)", "ada791f9": "Airdrop(address,uint256,uint256,address)", +"ada7e545": "ctynum()", +"ada86798": "get(uint64)", +"ada8788e": "insuranceFundFeeRatio()", "ada8938f": "moedaToken()", "ada8a7d5": "presaleTotalNumberTokenSold()", +"ada8b83d": "getEstimatedETHforDAI(uint256)", "ada8cfcd": "removeUint256s(bytes32[])", "ada8e5ef": "IsCanAllotAward()", "ada993ad": "Airdrop(address,uint256,uint256)", "adaa19cc": "TGMtoken()", "adaa3c73": "enableBets()", +"adaa5fa5": "getCompound(address,uint256)", "adaa730e": "RollDice(address,uint256,uint256,uint256)", "adaaa1e1": "addThing(bytes32,string,bytes32,string)", "adaabaaa": "bonusEndDate()", "adabc7f8": "changeTransferStep(uint8)", +"adac3e15": "globalConfigurationHash()", "adacb0fa": "CloseChannel(bytes32,uint8,bytes32,bytes32,uint256)", +"adacb493": "Failure(uint256,uint256)", "adaccd74": "getNickname(address)", +"adad19bd": "getTotalTokenBalance(address)", "adad1cb1": "VisperNetwork()", "adad4873": "distributePresale(address[],uint256[])", +"adad488d": "cancelWaitPeriodChange(bytes32)", "adad6d50": "KujiraFund()", "adad9c4e": "increaseMaxCap(uint256)", "adadb11f": "setJotter(address)", "adadc77f": "unown()", +"adadf22f": "addRelay(address)", "adae08dd": "createItem(uint256,uint256)", +"adae543d": "setTokenMaster(address)", "adaea0b9": "fund(address,address,bool)", +"adaeb6fc": "NexiumPerTokenId(uint256)", +"adaebde0": "buyBORGTokens()", +"adaebf01": "removeGlobal(address)", +"adaf28a1": "ncard(address,uint8)", "adaf28d1": "whichPeriod(address,uint256)", "adaf7c84": "PreICOStartTime()", "adaf8c79": "chargeOn(address,uint256)", +"adb0d5ae": "juldToLp1Route(uint256)", "adb187bb": "validRequest(bytes32[],bytes5,address)", "adb1ad42": "HelloGoldToken(address)", "adb1cd73": "getUnpaid()", +"adb1f00e": "Eligibility_Group_2(address,address,uint256)", "adb1f640": "getScore(uint256,bytes32)", "adb27ded": "tokenBonusTimes(uint256)", +"adb2aabe": "investorInvested(address)", "adb2e02f": "internalRegisterCert(bytes32,bytes,uint256)", "adb37277": "setWebsiteUrl(string)", "adb3a3a6": "deadlineToFreedTeamPool()", +"adb3d211": "setPoolProfileImageByOwner(uint256,bytes32)", +"adb3d595": "getLinkMarketCapUSD(uint256)", "adb42139": "totalCrowdsale()", "adb44a32": "updateUint256(bytes32,uint256)", +"adb4803a": "canWithDraw()", "adb4af3e": "getLatestUpdate()", "adb4d990": "assigned()", "adb506a6": "FACTOR_5()", "adb5735c": "withdrawFor(address,address)", "adb5777c": "getDrawBlockNumberByWinner(address)", +"adb58b6d": "transferToRewardOut(address,address)", "adb5a4f1": "ListReservePairs(address,address,address,bool)", "adb5a54d": "eccVerify(bytes32,uint8,bytes32,bytes32)", "adb5da34": "_getClientPaidUpTo(address)", "adb610a3": "currentNonce()", +"adb61832": "blockTimestamp()", "adb67c41": "XiongDiLianToken(address,address)", "adb6859d": "directorTransferShareRequired()", "adb69560": "createController()", +"adb6d592": "addMintable(uint256)", "adb6e8f5": "GetDislikeCount()", "adb6f63f": "commitments(address,address)", "adb746dc": "bltOwned()", "adb77576": "etherLeaked(uint256)", "adb8249e": "increaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", "adb848df": "NZD_Omnidollar()", +"adb8569e": "stayAlive()", +"adb88996": "totalMintable()", "adb88cb9": "totalSupplyIco()", +"adb8cec0": "ChangeCreator(uint256,address)", "adb9066e": "COLDITION()", +"adb9c0f7": "getActionRole(uint256)", +"adb9c100": "setDelegateAdmin(address,string,bool)", +"adb9e54e": "post(bytes32,address,address,uint256)", "adba54e0": "commandPercent()", +"adba9f6d": "nyaToLp1Route(uint256)", +"adbb61cc": "setDSHSContractAddress(address)", +"adbba8de": "getTokens(address,uint256,uint256)", +"adbbea01": "deployNewHandler()", +"adbbff09": "peoplecount()", "adbc9bed": "getRestWhite(uint256,uint256)", +"adbd1b0c": "changeMaxTotalVMRInWei(uint256)", +"adbd80b0": "getAddressAdmin()", "adbd9753": "issuingTokenOwner()", "adbda5a8": "voteToKickoffNewFiscalYear()", "adbde797": "updateTrustRankAfterStoryExpiry(bytes12,bytes12[])", "adbe2f6f": "abortive(uint256)", +"adbeeea8": "GetHouseDetail(uint256)", "adbefffe": "getAddressBetsForEvent(bytes32,address)", "adbf29fd": "getPlayerDataForGame(uint256,address)", +"adbf3776": "addMinterRole(address)", +"adbf4095": "validTokenNames(uint256)", "adbf54b7": "initialBalanceForMarketingCampaign()", "adc02a64": "addAsset(string,address)", +"adc04029": "trigger1(address)", "adc042bf": "mint(int256,uint128)", "adc06ccd": "batchDoubleBalances(address[])", +"adc080d9": "depositTimes(address)", "adc128eb": "Today()", "adc1463a": "ZLCC()", "adc1b956": "lastClaimed()", "adc1db89": "SpaceKIMToken()", "adc1f702": "LanaCharleen8()", "adc20b1c": "lastMint(address)", +"adc2112f": "withdrawLINK()", "adc23f03": "canClientTerminate(bytes32)", +"adc244ac": "oraclePair()", "adc29028": "calcAndSetPlayerTotalCanAccept(address,uint256)", "adc2c98a": "edge()", +"adc35ca6": "IncompleteFillSellQuoteError(address,uint256,uint256)", "adc38b2f": "iterateTurn(uint16)", +"adc3b31b": "_rewardBalance(address)", "adc4739a": "setWLAddress(address)", +"adc4804b": "getFailedCount()", +"adc481a7": "nativeRewardUndistributed()", +"adc49556": "setSiHandlerAddr(address)", +"adc4cf43": "start_epoch_time_write()", +"adc4e242": "stackValue()", +"adc4e839": "farmer(address)", "adc4f654": "ChargeEnergy(uint256)", +"adc51a4a": "buildProxy()", +"adc51d42": "create3(address,address,address,uint256,bytes)", "adc54d30": "transferFromPresale(address,uint256)", +"adc63589": "locked__end(address)", "adc6d49d": "_executeTransaction(uint256,address)", "adc73d46": "getPlayersOfOwner(address)", +"adc76126": "getRemainingTrialDrops(address)", "adc7d448": "_clearAttackLog(uint256)", +"adc7de88": "uncirculatingSupply()", +"adc7ea37": "setBuffer(uint256)", +"adc7faba": "changeWinnerStakeMultiplier(uint256)", "adc84a42": "SVEToken()", "adc87956": "teamVestTokenAllocation()", +"adc879e9": "chainID()", +"adc89032": "getRewardPeriod()", "adc8b4cf": "empowerAdmin(address)", +"adc8d1cf": "offerEncoder(address,uint256,uint256,uint256)", "adc8f941": "addExclusionFromTokenUnlocks(address[])", "adc9772e": "stake(address,uint256)", +"adca1c2d": "withdrawAndRepay(address,uint256,uint256,uint256)", "adca32e7": "setFiscal(uint256,uint256,uint256,bytes32)", "adca8ac6": "addToTransferWhiteList(address,address)", "adcaea0a": "simulated_snt(address)", "adcb0993": "LILE()", +"adcbafe7": "getUnfinishedCount()", +"adcbbb58": "depositStaking()", +"adcbc55d": "Baf()", +"adcc07a3": "getTokenToDaiFee(address,uint256)", "adcccb6f": "Obirum()", +"adccea12": "temperature()", "adcd2632": "saleTeamAddress()", "adcd4aaf": "sendNegativeWhuffies(address,string)", +"adcd5fb9": "claimVenus(address)", "adcd905b": "setListener(address)", "adcde05f": "averageKimSalePrice()", "adce1c5f": "ensResolver()", "adce80d5": "mStopped()", +"adcea55a": "claimFreeToken()", +"adcec9c5": "isMVTUniswapMining()", "adcf4831": "registerAuditOutcome(address,bytes32,bool)", "adcf59ee": "isOwnerOrOps(address)", "adcf780a": "disallowTransferBetweenUsers()", +"adcfe41f": "emissionProvider2index(address)", "add052b4": "getStateFunding()", "add08f87": "coinbaseAmount()", +"add0989d": "MIN_LIQUIDATION_DELAY()", +"add16d01": "removePoolSig(bytes32)", "add1cbc5": "TOKEN_TRANSFER_PROXY_CONTRACT()", +"add1d59d": "userCollectedDividend(address)", +"add20cf7": "bet_failed(address,uint256,uint256,uint256,uint256)", +"add2500c": "getBreedTypeWeight(bytes32)", "add2af69": "releaseLockedTokensByIndex(address,uint256)", +"add2ccb4": "revealVote(bytes32,uint256,int256,bytes,int256)", "add37100": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address)", "add3bf39": "manualTransferTokensToInternal(address,uint256,uint256,uint256)", "add3fa39": "sharing_confirmed()", +"add3fe39": "tunnel()", "add40ced": "getKeyID(bytes20,uint8)", "add43c59": "EtherTopDog()", "add466a4": "chfCentsPerTokenWhileBonus()", +"add4a8f6": "usersX3MatrixDetail(address,uint8)", "add4bfb0": "createDragon(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint16,uint16)", "add4c784": "getResult(bytes32)", +"add50a5a": "ConfirmationERC20Needed(bytes32,address,uint256,address,address)", +"add50c0a": "roundEnded(uint256,string,uint256,string)", "add54303": "setBlock(uint256,uint256,string)", "add5eb02": "setAdminVariables(uint256,uint256,uint256,uint256)", +"add637b5": "batchClaimAllResource(uint256[])", +"add6468a": "updateTotalRewards()", "add68daf": "amountOfBidders(uint256)", +"add69379": "MIP24()", +"add6f8ba": "setMaxStake(uint256,uint256)", "add7690b": "period0End()", "add769a3": "POOToken()", "add82871": "strEqual(string,string)", "add84df3": "changeGoal(uint256)", +"add855f1": "_ethRateUp(uint256)", "add94f25": "IDAP(address,address,address)", "add98c70": "dispute(bytes32)", +"adda10aa": "getDailyReward()", "adda1d4d": "receiveListing(bytes32,uint256,bool,address,uint256,uint256)", "adda8cf4": "Propvesta()", +"addacc0f": "proxyRuntimeCode()", "addace62": "getYesVotes()", "addad094": "VLOGS()", "addb246b": "MIN_SITE_ID()", "addb51ff": "monsterCreator()", +"addb6b6f": "updateContractHash(string)", +"addc2bb4": "adminSetTimeout(uint256)", +"addcf366": "createAirdropPool(address,uint256,bool,uint256,bool,uint256,bool)", "addd5099": "oracles(address)", "addd7020": "minWei()", +"addd9cef": "setFlags(address,uint256)", "adddbacb": "tokenSellCap()", +"adddc767": "pumps(uint256)", "adde36bb": "betEven()", +"adde41e1": "setPolicyManager(address)", "adde61ef": "_isUpdateAuthorized(address,uint256)", +"adde6c2a": "getFile(bytes32,address,uint64)", +"addebafa": "swap_sell_buy_flash(uint256,uint256,uint256,uint256)", +"addecfe4": "JuryNeeded(uint256)", "added436": "sendFromFund(uint256,address)", "addf0813": "withdrawERC20Balance(uint256)", "ade05b35": "commissionType()", "ade077e3": "Ecoin()", +"ade0e5fc": "toggleReinvest()", "ade0e93e": "withdrawals()", +"ade14165": "canAdvertise(address,uint8,uint8,uint8,uint8)", +"ade1c580": "getOracleFee()", +"ade1d3d6": "getBYNDetails(address)", +"ade284de": "payWithReferrer(address)", +"ade28aad": "secretDeposit(address,uint256)", +"ade2c648": "servicePoolsWeights(uint256)", +"ade2d193": "ExternalAllowdContractGen1(uint256)", "ade2f939": "lookupAllSince(uint256)", +"ade310c8": "maxNyanMint()", "ade342ab": "takeShitcoin(address)", +"ade34690": "goodAccounting(address,uint256,uint40)", +"ade3592b": "set_swap_fee(uint256)", +"ade3e557": "addLiquidityToPair()", "ade4637a": "transferFrozen()", +"ade4c83a": "transferAtOnce()", +"ade5164e": "canClaimMultiple(address,uint8[])", "ade53c4e": "GenChipsLevel(uint256,bool)", "ade5a328": "YYXToken()", "ade5e07d": "test_1_validOwner_accessRestriction()", "ade60e9a": "modifyOwner()", "ade62d6f": "withdrawCommunityFunds()", "ade645fa": "bonusPhase2()", +"ade6a303": "updateCAAvgRate(bytes4,uint256)", "ade6e2aa": "expiryTimestamp()", "ade716e5": "activatedArbitrationTokens(address)", +"ade74c06": "unInstalWeaponToNFT(uint256)", "ade7a3ad": "totalParticipationAmount()", "ade7dd7b": "storeInvestment(address,uint256)", +"ade82342": "emitProof(string)", +"ade97ab5": "SETTINGS()", +"ade97bea": "NewTakeFee(uint256)", +"adea6960": "getLatestNetworkFeeData()", +"adeaa5b6": "getUidById(uint256)", "adeaa851": "getTotalPrize()", +"adeb2cef": "issueAddress1()", +"adeb5755": "currentSoldToken()", "adeb8dec": "setLocks(address[],uint256[])", "adeba3a5": "payWithdraw(address)", "adebf6f2": "isFungible(uint256)", "adec07c7": "setPriceUpdateInterval(uint256)", "adec3a92": "totalPonziInGame()", +"adec82ae": "INITIAL_RATE_BASE()", "adeca283": "payeeArray()", +"aded41ec": "releaseDeposits()", +"aded99f4": "cancelLptSellOrder()", "adedc071": "internalApprove(address,uint256,uint256)", +"adede242": "get_presents_number()", "adee3f4b": "getCodeType(uint256)", +"adee7b81": "FastTrackCommit(address)", "adef40db": "disputeJUR(address,uint256,uint256[])", "adefc37b": "sub(int256,int256)", "adefd501": "ledMultiSig()", +"adefd871": "getExitFeeRemainingCooldown(address)", "adf069ea": "startsWith(string,string)", "adf07791": "tenant()", "adf0c351": "add_participant()", +"adf104de": "calcPrizeX(uint256,uint256,uint256)", +"adf12ce7": "findBestAsk(address,uint256)", "adf13281": "mineFor(address,bytes32)", +"adf1639d": "getCurrentValue(bytes32)", "adf24dec": "setDemurringFee(uint32,uint32)", "adf272ab": "vest(address,uint256,uint256,bool)", "adf2cead": "mint(bytes32)", @@ -99559,14 +182161,20 @@ "adf4a144": "startRefund()", "adf4fa09": "addPurchased(address,address,uint256,uint256)", "adf54e0c": "betOnLowHigh(bool,bool)", +"adf58b91": "addNewProduct(string,int256,int256)", "adf59f99": "query(uint256,string,string)", "adf5d1cb": "YumeriumToken()", "adf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", +"adf5f51f": "getSafuFee()", "adf60404": "THreeDBToken()", "adf684ac": "ULChain(address,uint256)", "adf6e486": "unPauseToken()", +"adf6f93f": "getGetMinMiddle256()", +"adf70792": "IsBought(uint256)", "adf70883": "completeUnlockTime()", "adf74fc9": "distributeELTCMedium(address[])", +"adf8252d": "getMultiplier(uint256)", +"adf898a4": "torn()", "adf8a01b": "emitSkillEvaluated(address,address,uint8,uint256,uint256,uint256)", "adf8f79d": "LOG_ContractResumed()", "adf96752": "trade(address[13],uint256[15],uint8[2],bytes32[2],bytes32[2])", @@ -99576,14 +182184,24 @@ "adfa1f0c": "Pinged(string)", "adfa820a": "deleteBlockState(bytes32)", "adfa845a": "test_remove_notInList()", +"adfaa9ee": "withdrawKAI()", "adfaae32": "lastMinedOn()", +"adfbebd5": "addCollateralAsset(address,address)", +"adfbf396": "pctDIDRequiredToMergePullRequest()", "adfc36a3": "getAssembly(uint256)", +"adfc5c8f": "getThreeRunnerWin(uint256)", +"adfc9d23": "getDynamic(address)", +"adfcaae0": "setColdWallet()", +"adfce657": "testSushiswapV1(address,uint256,uint256)", "adfceb9a": "proxyBuy(bytes32,address)", +"adfd31af": "receiveMarkets(bool,address[])", +"adfd446c": "showTCWinners(uint8)", "adfd5380": "preTgeBonus()", "adfd7935": "setBridgeNode(address,bool)", "adfdb75e": "setRedeemRequestLimitInterval(uint256)", "adfdc12f": "createNewGame(string,string,string,uint256)", "adfe1190": "components(uint16)", +"adfe1958": "sendFeetoAdmin(uint256)", "adfe6b80": "InvestAdd()", "adfec5f5": "buy(bytes8)", "adff2450": "getOuverture_effective()", @@ -99592,17 +182210,25 @@ "adfff41d": "m_Data(address,uint256,uint256)", "ae0041aa": "signalCount()", "ae005a87": "ERC777DemoToken(string,string,uint256,uint256,uint8)", +"ae0074c6": "amountToEmit()", +"ae00fbb1": "lastCreatedIndex()", "ae012367": "withdrawTopForTeam(address,uint256)", +"ae012ede": "requireWithoutReason()", "ae014f1d": "getUserNameByWallet(address)", "ae01a8fb": "toCloseVote()", "ae01ab47": "setFracoinAuction()", "ae01c14f": "SendBid()", +"ae01d264": "buyPool6()", "ae01dd06": "noteDesignatedReport()", "ae01ed8a": "manualWithdrawalFallback(address,uint256)", +"ae01efb8": "getUnitAttackMultiplier(address,uint256)", "ae024c40": "isTopic(bytes15)", "ae0250c1": "showPoolNumber(address,address)", +"ae025c0c": "ownerToMatch(address)", "ae025faa": "newGroup()", "ae0269aa": "VirtuePokerSale()", +"ae02cbcb": "convertSynthsToUSD(string,uint256)", +"ae02eda0": "setVerifier(address,string,string,bool,uint256,bool)", "ae02ee5b": "pack(bytes,address,address,uint8,uint256)", "ae035846": "END_TIME_SALE()", "ae0395ad": "setFriendsFingersWallet(address)", @@ -99611,140 +182237,279 @@ "ae040b1d": "get_orderAddress(address,uint256,uint256,uint256)", "ae041b90": "WRLCrowdsale()", "ae043336": "dolRate()", +"ae047c7d": "test_twodim()", +"ae0481f2": "release(bytes,uint256)", +"ae04baaf": "yfpro()", +"ae04cf7d": "o(uint256)", "ae04d45d": "setLockTime(uint256)", +"ae04e17e": "_getRemainingBudget(address)", +"ae05294b": "buygoods()", "ae056477": "addInvestorBalance(address,uint256)", +"ae056dbc": "mintAllow()", +"ae0605e1": "TradingStarted()", "ae06494e": "createHNtokens(address)", "ae065737": "tradePreToken(uint256,address,address,uint256,address)", "ae06c1b7": "setFeePercentage(uint256)", +"ae06d6bf": "yearlyInterest(uint256)", "ae06dbc0": "dataControlSetFeeAbsMaxGlobal(uint256)", +"ae074591": "getCurrentTokenIndex(address)", "ae0755d3": "popTransaction()", +"ae075993": "Pools()", +"ae075bb0": "bfie()", "ae078036": "preICO_tokens()", +"ae07b508": "TIMESTAMP_OF_20190801000001()", +"ae081787": "canvas(uint256,uint256)", "ae08b8b3": "BUXCOINMONEYCONTRACT()", +"ae08fa55": "closedUsingTrustedRecipient()", +"ae08fd10": "ERR_OFFCHAIN_DATA_INVALID()", "ae093eb7": "sendICOTokensBack(uint128)", "ae0996fc": "getMyEOSKey()", "ae0a6b28": "signature(string,bytes32)", +"ae0a81d7": "indexMapping(uint256)", +"ae0a8279": "changeTellorContract(address)", +"ae0a8530": "affiliateFeePercent()", "ae0a90b2": "domain_buy_useArina()", +"ae0a9739": "sendLeftOverFunds(bytes32)", "ae0aba8c": "acceptPayment()", +"ae0ad6ce": "approve_730(address,uint256)", +"ae0b075d": "waffleTeam()", "ae0b4edd": "cancelSellOrder(address[])", "ae0b7bdb": "twoWeeks()", +"ae0b8d95": "multisendToken2(address,address[],uint256[])", +"ae0b9db0": "createFarm(uint256)", "ae0bbe4d": "approveRecipient(address,bool)", "ae0be41c": "periodPreITO_hardCapInWei()", +"ae0c7884": "addIndividualDailyRestriction(address,uint256,uint256,uint256,uint8)", +"ae0d3f72": "getPriceFromUniswap(address[],uint256)", "ae0db13c": "totalBidEth()", +"ae0e0125": "LIQUIDATION_ROLE()", "ae0e5387": "networkReserveFund()", "ae0e8725": "Checkable()", "ae0e8f3f": "strategicLockup()", "ae0eadbf": "isFirstStageTokensMinted()", +"ae0f1f33": "_withdrawDaiAtomic(uint256,address)", +"ae0f2ad1": "closeEarly()", "ae0f6166": "subtract(int256)", +"ae0f62b9": "cnameRegisted(string)", +"ae0fd47f": "supportTask(uint256,bytes32,address,uint256)", "ae101f31": "addStage(uint256,uint256,uint256,uint256)", "ae104265": "calculatePrice(uint256)", +"ae109f3e": "getGraclaimamount(uint256,address)", +"ae10a4ac": "feeLeverage()", +"ae1133de": "tokensAllocated(address)", "ae117f3e": "getFSTBalance()", "ae11cf73": "isVerfied()", +"ae11e24e": "generationBreedingFeeMultiplier()", "ae11ea9b": "transferChild(address,address)", +"ae12213b": "setLockDays(uint256)", "ae125f00": "mint(uint256,address,bytes32,bytes32,bytes4)", +"ae128e75": "weiToAct(uint256)", "ae1345c4": "CharterCapital()", "ae136d62": "firstBonusEnds()", +"ae13714b": "echidna_indexAlwaysLtCardinality()", "ae13efe0": "batchFreeze(address[],bool)", +"ae13f081": "tokenid_added(uint256)", +"ae14ba33": "changeQuorumRatio(uint256)", +"ae14be7c": "hasCastVote(address)", "ae152cf4": "oraclize_query(string,string,uint256)", "ae154aab": "passOff()", +"ae15ab90": "createEpoch(address,uint256,uint256,address,uint256)", "ae15eb8e": "getCertificate()", "ae1616b0": "airdropReserveWallet()", "ae169a50": "claimReward(uint256)", +"ae1798c2": "getDV(string)", +"ae17a733": "netflixAddress()", +"ae17aaa2": "tempPlayDiceGame(address[],uint256[],uint256,uint256)", +"ae17cf77": "setClaimPaused(bool)", "ae180337": "withdrawBaseERC20(address)", "ae181958": "_setNonlistedUser(address)", "ae181f84": "passThroughTap(uint256)", "ae188884": "sendOneEtherToMiner()", "ae18f5ad": "issueContractAddress()", "ae190819": "getBS(bytes32)", +"ae1914f8": "withdrawReserve(address,address,uint256)", +"ae193903": "registerIntegrationAdapter(address)", +"ae1960db": "remove_period()", "ae1a0b0c": "launchLength()", "ae1a15e3": "PresaleFundCollector(address,uint256,uint256)", +"ae1a3318": "rescueUnsupportedTokens(address,uint256)", "ae1a5611": "ratePerEthPhase2()", +"ae1a7153": "usdtBuyMex(uint256)", "ae1a9a3e": "castToUint(int256)", "ae1aafb9": "buyPredictForContract(address,uint8)", "ae1adba2": "calculateStakeGains(uint256)", "ae1b4beb": "buyFactorPromotion()", "ae1b6405": "endICOTime()", +"ae1b64a8": "setupFarm(address,uint256,uint256)", +"ae1b6e17": "pendingToken()", +"ae1b95c5": "THRESHOLD_STEP()", "ae1be1e4": "releaseLockedToken()", "ae1c4062": "stopStage()", +"ae1c5eca": "changeCoverStatusNo(uint256,uint8)", "ae1c9437": "_stringsEqual(string,string)", "ae1cad3a": "tip(address,string,uint256,string)", +"ae1cdde6": "depositNft(uint256,uint256,uint256,uint256)", "ae1d12a6": "WhyWhyToken(address)", "ae1d3043": "teamTimeLock2()", "ae1d4b4b": "GambleEther()", +"ae1d58ae": "unknown0776e4fa(uint256,uint256)", "ae1dd78c": "sendEtherManually()", "ae1e2096": "MAGICCOINERC20(uint256,string,string)", "ae1e964e": "newOwnershipFeeProposal(uint256,string)", "ae1f14ca": "mainSale_WeiRaised()", "ae1f91b7": "updateMinMaxBetCount(uint256,uint256)", "ae1fb61a": "TokenTransferProxy()", +"ae1fe592": "setJETHToken(address)", "ae200c73": "joinGameTeam(bytes32,uint8)", +"ae200e79": "employer()", +"ae201a70": "submitRinghash(address,bytes32)", "ae2022c0": "getUint256Max(int256)", "ae203146": "getAccountType(address)", "ae2074c8": "addWhiteListAddress(address,address,uint256)", +"ae207d32": "viewUserLevelExpired(address,uint64)", +"ae2089ad": "getLargeBalances(address)", "ae20bf15": "claimFreeEggs()", +"ae22107f": "removeLiquidityPool(address)", +"ae22192e": "depositsOf(address,uint256)", "ae224633": "videos()", "ae22c1be": "ShowRelease(address,uint256)", +"ae22c57d": "getAddress(address)", "ae22e331": "_getCurrentSchellingRound()", +"ae23669a": "getOrderDataForCancel(bytes32)", +"ae245a72": "impLossTest(uint256,uint256,uint256,uint256)", "ae248ced": "deliverETH()", +"ae249ee6": "InitAssignTokenOK()", "ae249f2b": "destroyWhenRoundOver()", "ae24e328": "tickerQueryData()", +"ae2519b4": "stakeKlay(address)", "ae25532e": "getProxyId()", "ae25753b": "wildcardsHeld(address,uint16)", "ae25f630": "DownPlayerResult(string,address,uint256,uint256,uint256)", "ae262114": "crowdSaleDragonPrice()", "ae263730": "isOperationAllowed()", "ae26588c": "removeTrustedContractAddress(address)", +"ae26c1b2": "isInitialWithdrawAddressAdded()", +"ae27360d": "OWNER_FEE_DENOMINATOR()", "ae277584": "amountToSend()", +"ae2785ac": "frac(int256)", +"ae27897e": "safeBatchTransferChild(uint256,address,address,uint256[])", +"ae27bd94": "Show_User_Wallet()", "ae27e3c6": "relu_activation(int256)", +"ae2841c7": "calc_token_amount_withdraw(uint256,address)", +"ae285581": "changePathLengthLimit(uint256)", "ae28b68c": "safeTransfer(address,uint256,uint256,bytes)", +"ae28d128": "feeRewardForwarder()", "ae28e912": "teamTokenAmount()", +"ae28f1ed": "testNum()", +"ae28f9ba": "miningRate(uint256)", +"ae299815": "logicCount()", "ae2a0ce3": "JustinsToken()", +"ae2a79f1": "showPlayerBet(uint256)", +"ae2aaa80": "growth_supply()", +"ae2ac67a": "depositNFT(uint256,uint256)", "ae2b4e16": "getBalanceInRemix(address)", "ae2b5d3b": "_emitCountryCodeAdded(uint256,uint256,uint256)", +"ae2b70f8": "PieceSold(address,address,uint256)", "ae2bd2bd": "clearAuction(address,address,uint256,uint256)", "ae2c1506": "getRoundNumberOfBets(uint256,uint256)", +"ae2c1d5f": "shouldRebalance()", +"ae2c2d9c": "pureAccess()", +"ae2c33d6": "hardwork()", +"ae2c4d0f": "viewDashBoardData(uint256)", +"ae2c8d3c": "setPerBlockAllowance(address,address,address,address,uint256,uint256)", "ae2c923c": "OlympusLabsCore(address)", "ae2cbc91": "Tradable()", "ae2da5c5": "getLLV_edit_20()", "ae2df7b3": "setImporterBank()", "ae2e054c": "closeOrder(uint256,address)", +"ae2e26b1": "logUnstaked(address,uint256,uint256,uint256)", "ae2e933b": "feePool()", +"ae2e9c97": "SecondRelease(uint256)", +"ae2eadbb": "deactivateMembers(uint256[])", +"ae2ebd7f": "requestWithdrawal(uint256,uint256)", "ae2f1f6f": "calculatePayerDeposit(uint256)", +"ae2f5d93": "payout(uint256,address,uint256)", "ae307098": "c_MinInvestmentInCents()", +"ae30a51f": "storageEntropyRevert()", +"ae30c110": "setSlippages(uint256,uint256,uint256)", "ae30d35d": "ARK_TROGLOg_1_00()", +"ae310683": "LogNFTMintedNotForSale(uint256,address)", "ae3125d9": "showTokenSaleClosingTime()", +"ae313672": "func_2611()", "ae319f60": "_updatePurchasingState(uint256)", "ae31deb9": "burnCrowdsale()", +"ae323bbe": "setMaxReferralSpins(uint8)", +"ae323c8a": "_ccrv()", "ae326221": "setSpawnProxy(uint16,address)", "ae327322": "cantSetReferrer()", "ae32ac7e": "TEAM_LOCK_DURATION_PART2()", "ae32c399": "lastBlock_f1Hash_uint256()", +"ae32c761": "exchangeTokenToBNB(address,uint256)", +"ae3302c2": "maxLeverage()", +"ae339dcc": "promotionCount()", +"ae33a99b": "removeTokenLiquidity(uint256,uint256)", +"ae33cb06": "TokenTransfer(address,address,address,uint256)", +"ae348e47": "setAcsACSReward(uint256)", +"ae3498c7": "LogToken(string,address,uint32,uint256,uint32,uint256)", +"ae352aca": "addAirdropSupply(uint256)", "ae353131": "BiquToken(uint256,string,string)", +"ae35602c": "deductOrderToDepositAmount(bytes32,address,uint256)", "ae35707d": "sectionForSale(uint256)", +"ae35bfc2": "txNumPubInputs()", "ae35d21a": "CollectibleBidWithdrawn(uint256,uint256,uint256,address)", "ae366735": "EQUIPMENT_REWARD_WALLET()", "ae36c602": "createPromoItem(address,string,uint256)", +"ae36eecd": "anchorPeriod_()", "ae36f6f9": "_batch4_rate()", +"ae373d0a": "modify_moa(uint256,uint256)", "ae3783d6": "relayedSet()", +"ae37adc8": "signedMarried()", +"ae3816ee": "burnForMarket(uint256)", "ae382baa": "GainCard(address,uint32)", +"ae38e478": "lastRAMRouterUpdateTime()", "ae39279f": "sendFee()", +"ae393df9": "withdrawMembership()", +"ae39df88": "setBacAddress(address)", +"ae3a2d31": "marketingCount()", +"ae3a60d4": "_stakePoolVerifiers(address)", +"ae3b1d51": "UNLOCK_HIGH_POOL_REWARD_PERCENT()", "ae3b2137": "getRoomSetCount(uint256)", +"ae3b24c0": "getHeroDefence(uint256)", +"ae3b2a57": "rewardDeltaCircle(uint256)", "ae3b748d": "setMinCap(uint256)", "ae3b94b2": "_minimumTokens()", "ae3baf4d": "mintableAmount()", +"ae3bbbbb": "collateralisationRatioAndAnyRatesInvalid(address)", +"ae3c14eb": "winPrizeAndFeelGoodAboutSelf()", "ae3c697c": "getMyAvailableWine()", +"ae3c983f": "etherBalance(address[])", "ae3d27ed": "Token_For_Circulation()", "ae3d5047": "_changeSymbol(string)", "ae3d7160": "compareByte(string,string)", "ae3d81b8": "allowedJurisdictions(bytes32)", +"ae3f0a3c": "FUND_ISSUES_ROLE()", +"ae3f35d5": "amountPurchasedWithdraw()", "ae3f4a6c": "test_3_method()", +"ae3f4cb6": "arbitratorDisputeIDToBetID(address,uint256)", "ae3f84f3": "proofMultiSig()", +"ae3f9db1": "getEstimatedOutputSushi(uint256,address)", +"ae3fc1a3": "changeImageLocation(string,string)", "ae3fc899": "CheckExchange(string)", "ae404996": "oraclize_query(string,string[3],uint256)", +"ae406b0d": "FUNC_E0DD956A(uint256)", "ae40f72f": "testAdd()", +"ae414289": "setStakingRewardRatio(uint256)", "ae41480b": "importEthers(address)", +"ae418095": "closeMarket(uint256)", +"ae4191c8": "getGamersNumber()", +"ae41b403": "_setEthFinalPriceAtMaturity(address)", "ae422c09": "sys()", "ae42ce85": "update_oracalize()", +"ae42ced6": "entryCost()", "ae436b5e": "getLimitedReporterMarketsCount()", +"ae436ea2": "TeamLeaderInfo()", +"ae442315": "ethDivs()", +"ae44370e": "changemlm(address)", "ae44dea2": "bytesToUInt(bytes,bytes32)", "ae44e840": "priceConfirmedOver500()", "ae4538ce": "walletCompanyReserve()", @@ -99752,13 +182517,21 @@ "ae457dab": "bonusEnds20()", "ae45850b": "schedulerAddress()", "ae458ab6": "approve(uint64,address)", +"ae4606fe": "fillOrder(uint256,address,address)", +"ae460b92": "beyondExchangeProx()", "ae466db7": "withdrawPenaltyTokens()", +"ae467850": "PriceUpdate(uint256)", +"ae46d038": "importFromOld(address,address,address[],uint256[])", "ae46e284": "setPortfolio(uint256,bytes32[],uint8[])", "ae479a63": "badgeSymbol()", "ae47a290": "changeMaxBet(uint256)", "ae487dad": "reset(uint256,uint256,uint256,uint256,uint256,uint256)", "ae49165a": "getAncestor()", +"ae4921c9": "isLimitWithTime()", +"ae49311a": "txThreshold()", +"ae499f6c": "convertEthToDai(uint256,address)", "ae49a717": "EVNT()", +"ae4a2566": "flToken()", "ae4a7512": "mintICOTokensFromExternal(address,uint256)", "ae4a8c88": "claimLoot(uint256,address)", "ae4aadbb": "showTransferConfigs()", @@ -99767,43 +182540,74 @@ "ae4b1b5b": "proxyStorage()", "ae4b5cb8": "collectDonations(uint256,address)", "ae4b76fe": "_createPiranha(string,address,uint256,uint8,uint256,uint8,uint8)", +"ae4bd563": "getactiveminersnumber()", "ae4c20af": "increaseICOcap(uint256)", +"ae4c4b41": "depriveFunds(address,uint256)", "ae4c5e45": "setStarNewOwner(uint256,address)", "ae4cc757": "closeEarlyPurchase()", "ae4d0ff7": "gen0StartingPrice()", "ae4d1af6": "setup(bytes32,address,address)", "ae4d42b8": "ptxTail()", "ae4d503b": "withdrawOtherERC20Balance(uint256,address,address)", +"ae4db919": "setDevFund(address)", +"ae4dd0fc": "withdrawAllToken(address)", +"ae4de7fa": "set_new_UniSwapFactoryAddress(address)", "ae4e7fdf": "isMature()", "ae4eba1f": "setOldE4(address,address)", "ae4f1198": "publicationFeeInWei()", "ae4f1476": "searchSeed()", +"ae4fb665": "bonusValueInWei()", "ae4fbdeb": "LastValidated()", +"ae4ff9dc": "withdrawUnsold(uint256)", "ae501c75": "LogLotteryResult(uint32,uint8,bytes32,bytes)", +"ae505b52": "echidna_canAlwaysObserve0IfInitialized()", "ae50d660": "setFilletPrice(uint16,uint16,uint8,uint256)", "ae5103e8": "preSaleFourthPrice()", "ae516449": "uintCeil(uint256,uint256,uint256)", +"ae5184fb": "MintFinished()", "ae51c484": "a(bool)", "ae51db0d": "VesaStage2PreICO()", "ae52026f": "icoSoftCap()", +"ae521e86": "changePresident(address)", "ae529499": "CurrentARXSupplyInWei()", "ae530504": "setSetting(string,uint256)", +"ae5310f6": "buyKitty(uint256)", +"ae539d80": "getPriceInEther(uint256)", "ae53d79e": "ICO_PRICE7()", +"ae53f7e4": "getPayoutDistributionValue(uint64,uint64,uint256)", "ae5409fb": "seedInvestorsReserve()", +"ae5494f7": "numberBidOrders()", +"ae551369": "transferFundedYami(uint256)", "ae55c888": "getData(string)", "ae55f1af": "artWorkChangeApprove(uint256,uint256,bool)", "ae56463e": "getPoliceReport(uint256,address)", +"ae566c1b": "NewReferrer(address)", +"ae56b061": "ContractEvent(string,string)", +"ae56b6eb": "totalCommissionRate()", "ae56e668": "setUnlockAddress(address,bool)", +"ae574583": "getStimulusAddresses(address)", +"ae57937b": "PAUSED_ROLE()", +"ae5799dc": "getTransactionConfirmationCount(uint256)", +"ae57b35f": "_squidMaster()", +"ae58109a": "targetPlayer()", +"ae581bc2": "pow(int128,uint256)", +"ae582549": "accountVestingEntryIDs(address,uint256)", +"ae591d54": "tradeWithHintAndFee(address,uint256,address,address,uint256,uint256,address,uint256,bytes)", "ae5942cd": "deletePermissions(address[])", +"ae59b142": "fiveReserveAllocation()", "ae59bd5a": "mintManually(address,uint256)", +"ae59d62d": "increaseCommissionBid(uint256)", "ae5a1460": "NewDigitalAsset(address,address)", "ae5a17a7": "updateCharityAddress(address)", "ae5a4a7f": "maxBatchAssignment()", +"ae5a849a": "inGameOwnerOf(uint256)", "ae5a9bb4": "operatorTransfer(address,uint256,bytes,bytes)", "ae5a9d17": "getCompletedTransactions()", "ae5adac7": "mintInCurrPeriodCount()", "ae5b2540": "setApp(bytes32,bytes32,address)", +"ae5b4961": "getNodeByNumber(uint256)", "ae5b6d89": "submitSteak(address,bytes32)", +"ae5c12fc": "createKolMission(uint16,bytes32,uint256,address,address)", "ae5c1816": "CreateKittyToken(address,uint256,uint32)", "ae5c24bd": "getFirstElement()", "ae5c37fd": "contributionsByIntel(uint256)", @@ -99811,28 +182615,49 @@ "ae5c75aa": "getBadgeByKtUserId(uint256)", "ae5c888d": "month60Unlock()", "ae5d2cbe": "_getOwnerTokenByIndex(address,uint256)", +"ae5d3d11": "isSellEventEnded(uint256)", +"ae5d7177": "addBlocklist(address[])", +"ae5d8a86": "rewardPerTokenStoredCircle(uint256)", "ae5da7a0": "_generateGame(bytes32,bytes32,address,uint256[10])", "ae5dbd43": "view_get_ResultData()", "ae5e6cf4": "cancelReservation(uint256)", "ae5ec2e9": "matching()", +"ae5f1eb9": "removeFromWhitelistBatch(address[])", "ae5f502e": "RoundSubmission(uint256)", +"ae5fb2f1": "requestAnimeData()", +"ae5fba42": "developerWithdraw(uint256)", +"ae5fcf06": "setTxRelay(address)", +"ae601842": "darkBalance(address)", "ae601e4d": "IADForGas()", "ae602223": "standFeeAfter500()", "ae610b48": "sign(int256)", "ae61fcda": "isEthernautsStorage()", +"ae621594": "updateNoArg()", "ae6215d8": "getBlockHeight(bytes)", "ae622c4b": "addToInxWhitelist(address)", +"ae629766": "changeOpiumAddress(address)", "ae62fd7c": "setCrowdSale(bool)", +"ae637eca": "TokensSent(address,uint256,uint256)", "ae639329": "sendTo(address,address,uint256)", "ae63b517": "ADVISORY_BOARD_TOKENS()", "ae640923": "playerEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes)", "ae6439c4": "icoSaleSoftCap()", +"ae64a2f3": "startSaleKHM(uint256,uint256,uint256,uint256,uint256)", "ae6506f9": "getCurrentTierIndex()", +"ae654d31": "setRatesContract(address)", +"ae655219": "feeDistribution(address,uint256,uint256)", +"ae657eaf": "TINLAKE_CURRENCY()", +"ae65890a": "BOUNDARY_2()", +"ae65def1": "node(uint256,uint256)", +"ae66574c": "numOfDataUser()", "ae665d5d": "MooguToken()", "ae66d948": "getWithdrawn(address)", "ae6751e2": "EmilTestCoin()", "ae67701f": "ZperPreSale(address,uint256,uint256,uint256)", +"ae678cbb": "buyMonster(string,uint256)", "ae67b4c3": "evolveAxie(uint256,uint256)", +"ae686b5a": "claimValue()", +"ae68b056": "getDataHash(bytes)", "ae68c80a": "AddRocket(uint32,uint64,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint64,uint32)", "ae68fb83": "creditShareProvision(uint256,uint256)", "ae69a893": "getHeirCount()", @@ -99842,51 +182667,102 @@ "ae6a2435": "HOST_CUT()", "ae6a70ee": "_tokenMetadata(uint256)", "ae6b0792": "paymentManager(string,address,string,uint256,uint256)", +"ae6b9795": "setDexTokenAmount(uint256)", +"ae6bcd5b": "debugFlag()", "ae6c0b03": "canWithdrawBond(uint256)", +"ae6c4d07": "TeamScored(uint256,int32,uint32)", "ae6caafd": "buyByBot(uint256,uint256,address)", +"ae6cc204": "umiBiggestInvestor()", +"ae6d858c": "pendingPiggy(uint256,address)", "ae6d8a52": "viewFourthLotOfClauses()", +"ae6d9073": "playerList(uint256)", "ae6dca72": "_allocate(address,uint256,uint256)", +"ae6dead7": "roots(bytes32)", "ae6e11dc": "terminateTokenLock()", "ae6e22f1": "totalEther()", +"ae6ec9b7": "quote(address,uint256,address,uint256)", +"ae6ef5bf": "calcPoolRewardPerToken()", "ae6f1db6": "payableFinneyReceived()", +"ae6f2329": "tokenINNBCAddress()", +"ae6f5501": "ChangeRate(address,uint256)", "ae6f5bd2": "_calResultReturnIsWin(uint256,uint256)", +"ae6f86cd": "isInTesting()", +"ae6fba44": "simplBuy(address,address,uint256,uint256,address[],bytes,uint256[],uint256[],address,string)", "ae702ba4": "isSubscriptionActive(bytes32,uint256)", "ae70609e": "LogResult(uint256,address,uint256,uint256,uint256,int256,uint256,uint256)", "ae708e7c": "totalConsideredFundedEther()", +"ae70dd88": "addTokenAdmin(address,uint256,string,uint256,string)", +"ae70ea78": "setBondMarket(address)", +"ae713e74": "PayoutEvent(uint32,address,uint256,bool,address,uint256,bool)", "ae71d5da": "initProceeds(address,address)", "ae721e45": "fetchOrdersForPayerByAdmin(address)", +"ae72782d": "decodeAndGetState(bytes32)", +"ae72c116": "getEthToTokenOutputAmounts(address,uint256)", +"ae73336a": "idByPosition(uint256)", +"ae733b30": "_sharePriceCheckpoint()", +"ae737efb": "nested_if(uint256,uint256)", +"ae7385a5": "wereld(uint256,uint256)", +"ae73948b": "newBAndTransfer(bool)", +"ae73ace3": "exitBas()", +"ae73bc26": "getTotalSnapshotAmount()", +"ae73ee30": "addJOYtoyArtwork(uint256,string,string,uint256)", +"ae741d8d": "notifyRewardAmounts()", "ae748575": "CGCM()", "ae748837": "addTestimony(address)", +"ae749c42": "updateRequestingFee(uint256)", +"ae74a1b5": "isFeeless(address)", +"ae7563fc": "isGameExpiration(uint256)", "ae75c4f7": "rewardsTokensVault()", "ae75f9e6": "mock_resetLatestTokenAllocation(address,address)", +"ae760c5c": "baseInvestors(bytes32)", "ae76145d": "SEXcoin()", "ae7635f2": "icoEndUnfrozeTokens()", "ae764df3": "ICOWallet()", +"ae76994f": "fetchNextOrderById(address,int256)", +"ae770f6a": "getPathogenData1(uint256)", "ae775b27": "betOnDozen(uint8)", "ae77a6f4": "goldBalance()", +"ae77c182": "proms(bytes32)", "ae77c237": "purchase(uint256,address)", "ae77d51f": "m_chiefOwnerIndexBit()", +"ae77fdea": "__test__shake__maker__open(uint256)", "ae788913": "AIHToken()", "ae788b34": "ILFManagerCandidate()", +"ae78c8f5": "getUserLostsLevel(address)", +"ae797034": "isCanceledLink(address)", "ae799f4a": "TokenERC20(string,string,uint8,uint256)", +"ae79e89a": "buybacksUTY()", +"ae79fbdb": "UserWin(address,bytes32,uint256,uint256,uint256,uint256)", "ae7a45ba": "addZethrAddresses(address,address)", "ae7a833d": "hydroContract()", "ae7ad3fd": "setUpgradeabilityOwner(address)", +"ae7adbab": "buyNewLevel(uint8,uint8,uint256)", "ae7b0333": "executeOrder(address,uint256,uint256)", "ae7b1620": "rushTimeChallengeRewardsPercent()", "ae7b3825": "exchangeForETH(uint256)", "ae7b6bd9": "getLatitude()", +"ae7b6d16": "taxPercentage()", "ae7b6daa": "numberOfCellsOwnedBy(address,address)", +"ae7ba09a": "tokentBalance(address)", +"ae7ba157": "upgradeContract(string,address,string)", "ae7c046b": "applyAllPermission(address,address)", +"ae7cabbd": "relayersLength()", "ae7d00f3": "validationPrice()", "ae7d0cac": "addShare(address,uint256,uint256)", +"ae7d4ab1": "lineItemDeactivated(address)", +"ae7deb3c": "addHunter(uint256,string)", +"ae7dedd1": "RLR()", "ae7e23cc": "otherCoinsPurchase(bytes32,uint256)", "ae7ed04c": "getLastBidForCanvas(uint32)", "ae7f5da4": "lockPeriod2()", "ae7fa597": "removePrize(uint16,address,uint256)", "ae7fc1da": "_randMod(uint256,uint256)", "ae7ffadc": "Bitway()", +"ae800db2": "CloseICO(address,uint256)", +"ae8039d9": "sendTextMessage(string,string)", +"ae80c13f": "constantSupply()", "ae813029": "makeBid(uint16,uint256)", +"ae813e9f": "isBridgedTokenDeployAcknowledged(address)", "ae813ebb": "TokenFactoryAirdropCoin()", "ae815843": "query(uint256,string,string,uint256)", "ae817dd1": "doSendBounds(bytes32)", @@ -99894,428 +182770,798 @@ "ae81a54b": "factTeamOf(uint256)", "ae81f51b": "mintTokens2(address,uint256,uint256)", "ae8205e3": "insert(bytes32,int256)", +"ae82c2f7": "compoundUploadedFund(uint256)", "ae82fcf4": "teamLocked()", +"ae836501": "StartMarket(uint32,uint256)", "ae83ed91": "HashBlock()", "ae8421e1": "done()", "ae850da9": "getNumberSources(uint256,uint256)", +"ae85ba22": "LogModuleRegistered(address,address)", "ae873405": "AVG_BLOCKS_24H()", +"ae873816": "depositReclaim(uint256,uint256,uint256)", "ae873fa5": "PRESALE_MAX_RAISE()", "ae87fc4b": "claimStatus()", "ae87fd06": "gasPriceLimit_()", +"ae881712": "getRight(address)", "ae882412": "getTotalDivsProduced()", "ae882cf1": "allowSpecies(uint16,uint16,address)", +"ae884efb": "AcceptedLegacyAugmintTokenChanged(address,bool)", +"ae8868ba": "getTokenLockState()", +"ae887c8b": "mapPID_address(uint256)", "ae896b2e": "TPN()", "ae89a29e": "maxHolderCount()", "ae89aeb9": "getEscrowData(uint256)", +"ae89db61": "unitJadeStealingMultiplier(address,uint256)", "ae8a473d": "_setReserveFactorFresh(uint256)", +"ae8a4d95": "setVipMonthFee(uint256)", "ae8a6833": "InitialSettings()", "ae8a7180": "setStartOfCrowdsale(uint256)", "ae8a8690": "createActivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"ae8b520f": "APY(uint256,uint256,uint256,uint256)", "ae8b9d7b": "autoSolveGame(uint256,uint256,uint256)", "ae8bce2c": "product1_pot()", +"ae8bdbc1": "UpdateMerkleRoot(bytes32)", +"ae8c03ff": "traffick()", +"ae8c21ba": "updateMinHolderAmount(uint256)", +"ae8cb763": "checkReset()", "ae8cdd59": "IBTC(uint256,string,string)", +"ae8d2468": "dsrBalance(address)", "ae8dab48": "setUp(address,address,address,address,address,address,address)", +"ae8df6a6": "checkLoanApproved(uint256)", "ae8e2217": "SmartexController()", "ae8e3b70": "Fin()", +"ae8e4e36": "distributeTheLastSamuraiPot()", +"ae8e5ed7": "approve_764(address,uint256)", "ae8efe46": "CheckEntity(bytes32)", "ae8f1d29": "createPermission(bytes32,address[],bytes4[])", "ae8f2328": "finishcrowdsale()", "ae8f6489": "createAndBuyAllAmountPayEth(address,address,address,uint256,address)", +"ae8fb2c5": "getUniswapV2PairBalances(address[])", "ae9074ff": "internalSuccessOver()", "ae90b213": "payee()", +"ae90e318": "removeTokenAdapter(bytes32)", "ae90e9f8": "returnToBuyersContinue()", "ae91b691": "changeRefPercentage(uint256)", +"ae91cd2a": "mintUniOptionTest(address)", +"ae91d2b7": "linearSetupDone()", +"ae92ab4b": "Sold(address,uint256)", "ae92b204": "getCurrFeeRate()", +"ae9308b7": "isSettleDay(uint256)", +"ae934a7a": "recoverAssignedRewardTokensAndDestroyPeriod(address,uint256)", +"ae93a528": "feexe18()", +"ae93db59": "HTK_tokenContract_address()", "ae93e513": "cancelOfferForCity(uint256)", +"ae940903": "sellLand(uint256,uint256)", +"ae948251": "maxGasPrice(address)", +"ae949716": "RescindOffer()", "ae94bbf1": "getCarDetails(uint32)", +"ae94d0fa": "pynthetix()", "ae94e448": "imax(int256,int256)", "ae94ec05": "placeBuyTokenOrder(uint32)", +"ae9526ca": "_jurorsRegistry()", "ae954790": "Authorizable()", "ae9569d0": "PLATPriceOracle()", "ae95a7a4": "TacoToken(address,string,string,uint256,uint256)", +"ae95bb14": "createProduct(address,bytes32,address,address[],address[])", "ae95c24e": "issueMap(address)", +"ae96762d": "metaDrainBounty(bytes,uint256,uint256,uint256[],uint256)", +"ae96812b": "lastStaked(address)", "ae96b094": "VergeDark()", "ae96bf2c": "TakePot()", +"ae9704cd": "setUniverse(address)", "ae9759ff": "PRICE_MULTIPLIER_ICO2()", "ae978f08": "getLatestTweet()", +"ae979ae6": "devClaim()", "ae97dde8": "MAX_COMMISSION()", +"ae97f5fd": "totalLotteryPool()", +"ae9840dc": "REIGAI13()", "ae989d36": "homeTeam()", +"ae98fdb7": "Sell(address,address,uint256)", +"ae997d70": "renounceManager(address)", "ae99847b": "daylimit(uint256)", "ae999ece": "reserve(string)", "ae99aa3c": "getMemberInfo(uint256)", "ae99f03c": "SetAddresses(address[],address[],address[],address[])", "ae9a0785": "getChannelPostCount(address)", "ae9a9295": "YKC(uint256,string,uint8,string)", +"ae9a94fe": "setNormalDistribution(uint256,uint256,uint256[100])", "ae9aea6d": "maxMintQuantity()", "ae9b051c": "withdrawSome(uint256)", +"ae9b120b": "POINTS_PER_WEI()", "ae9b233f": "PasesLibresSocio(uint16,uint16)", +"ae9bb692": "depositGas()", +"ae9c051b": "getBestEthToDaiReserves100Eth()", "ae9c1962": "withdrawCommunityPot()", +"ae9c1f3b": "getOrderStates(bytes32[])", +"ae9cc8f3": "burnMyPrf(uint256)", "ae9d70b0": "supplyRatePerBlock()", +"ae9dac10": "setUpFee(uint256)", "ae9dc04c": "offerSketchForSaleToAddress(uint256,uint256,address)", +"ae9dfc4d": "breeder()", +"ae9ee18c": "holdings(bytes32)", "ae9f96c7": "weightsApportion(uint256,uint256)", +"ae9ffcc6": "getUserStakingBalance(uint256,address)", "aea01c49": "stringToBytes(string,string)", +"aea03d11": "START_REBASE_AT()", "aea09e6e": "crowdfundStartTime()", "aea0e35f": "createMarket()", +"aea0e78b": "nextEpoch()", +"aea0ee23": "airdropActivation(uint256)", "aea13844": "safeGiveByContract(uint256,address)", +"aea143ae": "getRouterContract()", +"aea173d5": "setUniswapAddr(address)", "aea1935b": "confirmEndWork(uint256)", "aea197fe": "CreateRecipt(string,uint256,string,string,string,string,string,uint256)", +"aea1e23a": "checkWithdrawalAvailability(address)", +"aea30dd9": "retrieveLatestValue(uint256)", "aea31fc7": "setProof(string,string)", "aea398da": "paymentWalletAddress()", "aea3ad8c": "supportKickoffQuorum(uint256)", +"aea3db97": "referring(uint256,address)", +"aea3f28c": "pureAdd(uint256,uint256)", "aea40787": "SetOwned()", "aea43a29": "addMassAddressToWhitelist(address[])", "aea452ba": "isBinding(uint16)", "aea48690": "incentivisingEffortsSupply()", +"aea56c83": "uu2usd(uint256,address,address)", "aea57be4": "resumeIEO()", "aea5b69f": "solutionInfo(uint256)", "aea6022c": "change_metadata(uint256,string)", "aea64763": "stopsale()", "aea65bf6": "VerifyProof(uint256[],uint256[],uint256[])", "aea68d6b": "Shakedown0x()", +"aea6cc80": "callAllowList(address)", "aea6e1a4": "buyAnotherDrangon()", +"aea70034": "calculateAverageScarcityPerToken(address,uint256)", "aea787a2": "showleveldetail(address)", +"aea7a96d": "WrongEtherEmptied(address,uint256)", "aea8126f": "transferMSM(address,uint256)", +"aea89218": "tokenControllerAddr()", +"aea8a3ee": "totalLocks(address)", "aea8d47c": "getLatestContract(bytes32)", "aea8dcca": "setTokenInfoMaxTotalImbalanceList(uint256[])", +"aea90231": "getOutAll()", +"aea90cb8": "Sell()", +"aea91078": "price(address)", "aea92852": "getDevIndex(address)", "aea96513": "returnSecretVoteHash(uint256)", +"aea9963f": "logBytes25(bytes25)", "aea9b438": "getBuyerInstanceAddress(address)", +"aea9c9c8": "approvalToken(address)", "aeaa3091": "getDealerValue(uint8[],uint8)", +"aeaa5766": "gainLock(address,uint256)", "aeaaaa08": "proxyClaimTokens(address)", "aeaabffe": "UnlockAll()", +"aeaaf686": "setYamiAddress(address)", "aeab24df": "reinvestDivsWithContract(address)", +"aeab5849": "incrementTotalDeposited(uint256)", "aeac3354": "Deal(address,address,address)", +"aeac3453": "ProjectOwnerAddress()", "aeac529a": "TradingLife()", "aeac538a": "ClimateCron()", "aeaca25e": "getTotalJadeProduction()", "aeacd658": "signProduct(string)", +"aead0546": "chainlinkWrapper()", "aead9e47": "claimAndWithdraw()", "aeadbe24": "getTotalTokens(address)", +"aeadd223": "getRandomNumber(uint256,address)", "aeae264b": "BeteventCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"aeaebaf2": "_withdrawSavings(uint256)", "aeaf5a37": "total_land_sold()", "aeaf7fc1": "updateCandidate(address,bytes32,bytes32)", "aeb00fda": "_getRacerCar(uint256)", +"aeb03793": "setHudlPoolAddress(address)", "aeb1355f": "getH2Amount()", +"aeb196d3": "Unpause(address)", "aeb26733": "previligedApprove(address,address,uint256)", "aeb27602": "addHash(string)", "aeb2ffc1": "getQuery(uint256)", +"aeb318ae": "getConvertableAmount(address,uint256)", "aeb37075": "DividendPaid(uint256)", +"aeb3a132": "LogStartRoundB()", +"aeb3da73": "registerNewNode()", "aeb3ebd0": "LogContributorsPayout(address,uint256)", "aeb447ff": "getLevelUpCost(address,address)", "aeb47e2a": "COMMUNITY_POOL()", "aeb4f0d3": "RegisterTwo(address,address)", +"aeb50f90": "bonusRewardRate()", +"aeb518cb": "concat(string[])", +"aeb51b37": "claimReward(address,bool)", +"aeb555f1": "ecmul(uint256,uint256,uint256,uint256)", +"aeb57c00": "ChangeGameSettings(address,uint256,uint256,uint256,uint256,bool,uint256)", "aeb58dc5": "setPOOL_edit_15(string)", +"aeb5d2c1": "setPauseContract(address)", "aeb669eb": "getHatchingEggId(address)", +"aeb714f4": "pickleJar()", +"aeb739b9": "setLockTotal(uint256)", "aeb754e5": "Auction(address,uint256)", "aeb7614c": "bid(bytes32,bool,int32)", +"aeb7cbb8": "actSetClose()", "aeb7dd80": "_computeCurrentPrice(uint128,uint128,uint40,uint40)", +"aeb80179": "shr_combined(uint256)", "aeb817ab": "etcSupply()", +"aeb81841": "getMemeSellingPrices(uint256[])", +"aeb87708": "stakeDelegated(uint256,address,address)", "aeb89f14": "totle()", +"aeb8ce9b": "available(string)", "aeb8f966": "mintToken(address,uint256,int256)", +"aeb90e34": "dispatchTokens(uint256)", "aeb94f48": "getFreePacifist()", "aeb9c40e": "isReadyToStart(uint256)", +"aeba142c": "createChannel(bytes32,address,uint256,address,uint256[2])", "aebacd53": "PRE_BONUS()", "aebad3a4": "getCaptainCount(uint32)", "aebb2540": "setNewMultisig(address)", +"aebbb4ee": "GiftTransfered(address,address,uint256)", "aebc0310": "updateOdds(uint256,uint256)", "aebcd2d9": "AddSocialAccount(bytes32,bytes32,bytes32,bytes32)", "aebd3f96": "receiveToken(address,uint256,address)", "aebd4fcd": "shopStoreRegister()", +"aebd81d2": "placeFreeSpinBet(uint256,bytes6)", "aebe0224": "CollectibleTransfer(address,address,uint256,uint256)", +"aebe4dcd": "CreateStrongHand(address,address)", "aebe5523": "addTokenWalletInWhitelist(address)", +"aebef5ff": "XBNY()", "aebf1e3d": "computeTokens(uint256)", +"aebf2085": "get_address_num()", +"aebf67c1": "KP2R()", "aec02eb5": "ServiceContractResolver(address)", "aec1914d": "surrender(bytes32)", "aec1dd81": "updateNonClosingBalanceProof(address,address,bytes32,uint256,bytes32,bytes,bytes)", "aec1ee7b": "STAT_MAX_VALUE()", +"aec1fb2c": "setOpenLockForce(address,uint256,bool)", +"aec202ea": "swapBNBForExactTokens(uint256,address[],address)", "aec205a5": "contractLaunched()", +"aec23ad5": "BLOCKSPERYEAR()", "aec26c0e": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,string)", +"aec2ccae": "voted(address)", "aec2f2d9": "first_bonus_duration()", +"aec3002f": "renounce(address,address)", "aec30dc1": "minWeightPunish()", "aec318f1": "enableMasterTransfers(bool)", +"aec3959d": "jusBlockCurrent()", "aec3ab53": "_futureSupply()", +"aec42a17": "approveMax(address,address)", +"aec42d45": "_hasPermission(address,address)", +"aec4a22e": "ethRateAddr(address)", "aec4e0bb": "numberOfPunksReserved()", "aec5ab08": "getAllDapps()", +"aec62806": "getPriceRateRange()", "aec651fb": "getUserTokensByMatch(address,uint32)", +"aec7231a": "isUnpegged(bytes32)", "aec72d8d": "STAGE_3()", "aec77b63": "returnTokensInPool(address[],uint256[])", "aec7f5b2": "JoustNum()", "aec7f6f3": "compoundInterest(address)", +"aec8d90f": "realseEcologicalBenefits(address,uint256)", "aec8fae8": "getMemberAtKey(uint256)", +"aec96a3e": "ddxPerBlock()", "aec9a987": "claimShare(address,address)", +"aec9c307": "setBalanceCap(uint256)", "aec9c480": "includesSet(bytes32)", +"aecaa634": "getPlanInfo(uint8)", +"aecacabb": "getCourse(string,uint256)", "aecadd53": "grantTeamToken()", "aecaf4ba": "addMoneyInternal(address,uint256)", +"aecb9aa7": "withdrawCHI_fake()", "aecbaaa1": "LogPayout(address,uint256,uint256)", "aecbb5f1": "winAmount1()", "aecbf70c": "Kisaan()", +"aecc6299": "timeBunny(uint32)", +"aeccd2bc": "getTotalSquidStaked()", "aeccee75": "_register(address,uint256,address)", +"aeccf735": "buyWithUSDC(uint256)", "aecd15e3": "getWithdrawalWallet()", "aecd1fed": "setupToken(address,address)", "aecd27fa": "linkCoin(address)", "aecd46db": "testDepositCanbeWithdrawn()", +"aecd724a": "convert_nonbased_want(address,uint256)", +"aecda378": "getPoolAdmin()", "aecdceef": "intToBytes(uint256,uint256)", "aecef00e": "record(uint256,string)", +"aecf11f2": "getAssetInterestRate(address)", "aecf2149": "sendScoreToCustomer(address,uint256)", "aecfd412": "Group_2()", +"aed019b9": "oracleFor(address)", +"aed04fae": "devShare()", "aed214fb": "setBooleanMapValue(string,address,address,bool)", +"aed248d6": "BuyByTomo(address,address,uint256)", "aed29d07": "totalRewarded()", "aed2e7d4": "addGen(uint256)", +"aed30777": "isUnrestricted(address)", "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)", +"aed54705": "claimInterestTokens(uint256)", +"aed59008": "getPublicValue(uint256)", +"aed5900f": "changeStakeParameters(uint256,uint256,uint256)", "aed5c011": "payWithMerculet(uint256)", "aed6512e": "callerAdd(address)", +"aed693f9": "rewardBalances(address,address)", +"aed6a5bd": "setTolerancePriceAboveOnAcoPool(uint256[],address[])", "aed6d8d4": "GetStuffNum(address,uint32)", +"aed74837": "minAllow()", +"aed76538": "swap_uniswap(address,address,uint256)", "aed76aa4": "getInvestorDepositAmount(address)", "aed82a99": "sin_table_lookup(uint256)", "aed83846": "removeFromPrivateSaleWhitelist(address[])", "aed89fed": "projectContract()", +"aed8b80a": "approve_672(address,uint256)", "aed8e967": "getEndpoint()", "aed8f3da": "partsPerBillion(uint256,uint256)", "aeda10be": "ethselfToken()", "aeda352b": "hasName(address)", +"aeda4efc": "totalTeamReleased2()", "aeda852f": "houses(uint256)", +"aedb12cd": "PERCENT_INVEST()", "aedb1c8f": "executeContract()", +"aedb27fc": "completeAscension()", "aedb8621": "TMONEY()", "aedb9eef": "LDXCToken(uint256)", "aedbbf36": "deleteNote(uint64)", +"aedc0c5c": "addToPreSaleWhitelist(address)", "aedd18dc": "timeout(address)", "aedd3acc": "currentSTCPrice()", +"aedd622b": "proveExistence(string)", "aeddaa02": "DelVer(address,address)", "aeddab95": "batchUnmount(address,uint256[],uint256)", +"aeddf4bc": "monstersNumber()", "aeddf677": "lockLimit()", +"aede090f": "ServiceFunction1(address[],uint256[])", "aede4680": "firstReserveWallet()", "aede879d": "whatIsMissing()", +"aedee5e2": "updateTeamCount(uint32,uint128,uint128,uint128)", +"aedefb80": "claimGroupCount()", "aedf5360": "icoCrowdsaleContract()", +"aedf795e": "tokenAccepted(address)", "aee06324": "trickleUp()", +"aee0a223": "releaseMultipleDeposits(uint256,uint256)", "aee0abaa": "authorizeMany(address[],uint256)", "aee14460": "getSummary(uint256)", "aee145f7": "addressReserve()", "aee1b8a1": "XBStandardToken(uint256,string,uint8,string)", "aee1d4d3": "blockCreationRate()", +"aee1fabc": "extS1()", +"aee1fe49": "paymentManager()", +"aee250af": "batchWhitelistCountries(uint16[])", "aee25613": "sendErc20(address,address[],uint256[])", "aee273f8": "createTokens(address,uint256,address,bool)", "aee2988d": "addressOps()", "aee2dbbf": "getSaleOrdersBySeller(address)", +"aee2f47f": "getTeamProfile(uint256)", "aee338ef": "referalAddrByNum(address,uint32)", +"aee3429a": "testMethodWithInputsWithoutOutputs(uint256)", "aee36731": "OrderApprovedPartOne(bytes32,address,address,address,uint256,uint256,address,uint8,uint8,address,uint8,bytes)", +"aee3bd49": "draw(uint8)", "aee40270": "AddAddressToWhitelist(address)", +"aee45a6a": "SLIPPAGE_BASE()", +"aee4733c": "chainyield(uint256)", "aee4c502": "test_remove()", +"aee4d1b2": "registerProtocol()", +"aee4dd5a": "auditListToken(address)", +"aee66ee0": "_devFoodBucket()", +"aee67707": "setxValue(uint256)", "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)", +"aee92741": "getUserClaimVoteMember(address,uint256)", "aee9293f": "chargeAndChange(uint8)", "aee92d33": "approveByLegacy(address,address,uint256)", "aee98408": "versionIndex(bytes32,bytes32)", "aee99e52": "getPresale()", +"aee9b323": "flashSwap(address,uint256,address,address,uint256)", +"aee9c872": "totalBalances(address)", +"aee9ea46": "updateTimeout()", +"aeea10bd": "listedAddresses(address)", +"aeea1f7b": "forceSettle()", +"aeea5fb5": "callDifficulty()", "aeeaf3da": "addPackCategory(uint256,bytes4)", +"aeeb0cb1": "BalanceChanged(address,uint256,uint256)", +"aeeb7f07": "revokeLotteryRole(address)", "aeeb96af": "Highlander()", "aeec9ba0": "UpdateManifesto(uint256,bool,bool)", +"aeed2861": "finalizeTokenDeposit(address,address,address,uint256)", "aeedc9e9": "GroupBuy()", +"aeee1f88": "betters(address)", +"aeeec12f": "initVCstate(bytes32,bytes32,bytes,address,address,uint256[2],uint256[4],string)", "aeeed0db": "buyXaddr(address)", +"aeeed2dc": "getCurrentPeakHourTax()", +"aeef32f5": "KSCTransferToTeam(address,address,address,uint256,string)", +"aeef41ca": "BbkLocked(address,uint256,uint256)", +"aeef4dc2": "_openPR(address,string,string,string,string)", +"aeef6439": "maxClaimAmount()", +"aeef6719": "mint(string,address,bytes,bytes)", +"aeef8f36": "months()", "aeefb9d1": "distributeEDNR(address[])", "aeefb9eb": "PixelToken()", "aef0004a": "outputAddress()", +"aef0006b": "bondPriceOnONCDelta()", +"aef018b1": "taxEpoch()", +"aef078bc": "buyManyBoxes(uint256,uint128)", "aef08617": "limitTier3()", "aef093ce": "Doge2Token()", "aef0ef2e": "test_validShouldBe3_2()", "aef1b9b5": "test_threeInvalidFalseEqLog()", "aef251a7": "tokenCtr()", +"aef336a9": "purchaseToken(address,address,uint256,uint256)", "aef3575e": "HandWinsView(address)", "aef35e6a": "stage2Sale()", +"aef370e1": "getBitcoinPriceInWei()", "aef37284": "getReservedTokensListValInPercentageUnit(address)", "aef3bc17": "getMemberInformation(uint8)", "aef3fa6c": "AFROIN()", "aef41e3a": "getItemIdsPagable(uint256,uint256)", +"aef443bf": "Disburse(address,uint256)", +"aef458a1": "provable_cbAddress()", +"aef513fe": "INVEST_TIME()", "aef5cbee": "VICToken()", "aef5ddec": "Paper(string,address,uint256,uint256,address[],address)", +"aef5f455": "_internalIssue(address,uint256)", +"aef65ca4": "becomeNewKing(uint256)", +"aef67d78": "depositFeeInBips()", +"aef68bf9": "_bmul(uint256,uint256)", "aef721b8": "createSwap(uint256,uint256,address,address,address)", "aef76dda": "createPresale(address,uint256,uint256)", "aef7ad9c": "getSchellingRoundDetails(uint256)", +"aef7f99e": "_tFeeTimestamp()", +"aef81236": "newCategory(string,uint256,uint256,uint256,uint256[],uint256,string,address,bytes2,uint256[],string)", "aef88aba": "DDJATCoin()", "aef8a536": "SCNToken(uint256,string,string)", +"aef8c38e": "sponsorToComisionList(uint256)", +"aef91d5f": "getStakeDeposit()", "aef95098": "setUrl(uint256,string)", "aef983d0": "getDigitFromByte32(bytes32,uint8)", "aef99eef": "Game()", +"aefa4b2b": "exportPositionWithSignature(address,uint256,uint256,uint256,bytes)", "aefa573d": "genCode()", "aefa68f0": "ifInAllowedLocks(uint256)", "aefa7550": "read_u32()", "aefa7d98": "getContractAddress(uint256)", "aefaacda": "finalTimeout()", +"aefacaf0": "relockLiquidity(uint256,uint256)", "aefb1643": "ownerSetPaused(bool)", "aefb2dad": "ticketsFor(uint256,address)", +"aefb46fc": "setVBRIGHTAddress(address)", "aefb658e": "playerDayEthInLimit_()", "aefbbf2a": "BANKROLLER()", +"aefbdf3d": "REFERRAL_REBATE_PERCENT()", +"aefc15a8": "mintBPro(address,uint256)", "aefc4ccb": "associatedContract()", "aefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", +"aefcee53": "changeSetting(bytes,uint64,uint64,uint256,uint256)", +"aefcf798": "createPerson(string,int256,int256)", "aefd0299": "makeWager()", +"aefd7c97": "buyCityEvent(address,uint256)", "aefe5ee0": "cashOutTank(uint256)", "aefe696b": "changeColorPink()", +"aefe89b2": "userWithdrawRound(address)", +"aefe92da": "blockRewardLP()", "aefe9ca0": "s40(bytes1)", "aefea053": "timelockVault()", +"aefee53e": "getLengthArray()", +"af003b5c": "setSplitEth(uint256)", "af0062e4": "sellable_tokens()", +"af00aafa": "Start(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "af00be12": "_sendToken(address,uint256,bytes)", +"af00f4e2": "setLockedStakeTimeForMinAndMaxMultiplier(uint256,uint256)", "af017526": "whitelistAddress(address,bool,uint256)", "af01841e": "getownership(uint16)", "af01866d": "insertSchedules(uint256,uint32[],uint256[])", +"af018de8": "add(uint256,address,uint16,uint256,bool)", +"af01bfc8": "Unstaked(address,uint256,uint256,bytes)", +"af01c085": "createFarmStaking(address,uint256,address,uint256,uint256,uint256,uint256)", "af023335": "burnSynths(bytes4,uint256)", +"af026842": "userFarmsLength(address)", "af02d47b": "currentBonusPercent()", "af030d2c": "setResult(uint256,uint256,bytes32)", "af03105b": "depositMintSince(address,uint256,uint256,uint256)", +"af03334b": "izposoja(uint256)", +"af0378de": "newAllowanceReceiver(address,uint256)", "af0396ae": "PLDT()", +"af03be39": "getValueForUniswapV2Pools(address,address,uint256)", "af03e856": "MockUpgradeableToken()", +"af045980": "changeBondingPeriod(uint256)", +"af0465eb": "RESULT_RANGE()", "af047106": "sumPreICO2()", "af049ea9": "testFail_interface_call()", "af04d0c0": "Deal(address,uint256,uint256)", +"af0509a8": "createTokenSwap(address,uint256,address[],uint256[])", "af053b71": "CostToken()", +"af05ba89": "getPrivateAvailable()", "af05fa10": "upgradedVersion()", "af05fc63": "mulpow2(uint256)", "af0638f6": "currentMaxPurchase()", +"af0677f7": "votingConstructor(address,address,address,uint256,uint256)", +"af067969": "seneth(uint256)", +"af06f0ae": "aggregators(bytes32,bytes32)", "af079dec": "setHardwareWallet(address)", +"af07aa9d": "getShortRatesAndTime(bytes32,uint256)", "af07c768": "Arte()", +"af07e767": "eRedeem(address,uint256,uint256)", "af080014": "nameChange(string,string)", +"af086c7e": "issueMaxSynths()", "af086d6f": "setTestVar(uint256)", +"af087a08": "getPromoAddress(bytes)", +"af08a4db": "UnlockedTokens(address,uint256)", "af08e1ad": "get_arbits_presale_open(address)", "af093f9c": "specificBatchCheck(uint256)", "af09420b": "_addStackholder(address)", +"af094eed": "getTokenToEthInputAmounts(address,uint256)", +"af0968fc": "getOtokenDetails()", +"af098c72": "TokenSaleSupply()", +"af098c91": "lowPriceD()", "af0a078e": "tHasUpvoted(uint256,address)", +"af0a619c": "dflAccrued(address)", +"af0ab80a": "gt()", "af0aba4e": "setExpirationRequest(uint256)", "af0ac4b7": "submitNextStage()", +"af0b1327": "getAllDisputeVars(uint256)", +"af0b4b27": "lastLottery()", "af0b4cc0": "minerTotalTime()", "af0b7029": "KYCApprove(address[])", "af0bbfb8": "registerEndpoint(int256,string)", "af0bdb38": "to(address,bytes)", "af0c09db": "getChosenNumber()", "af0c9259": "Total_SoldToken()", +"af0ccefb": "getRoundLimit()", "af0cfe1f": "addArticolo(bytes,bytes10,bytes10,bytes)", +"af0cfe90": "OPTION_INFO_PARAM_LOC()", +"af0d5bce": "Get_address_creator()", +"af0d831c": "newDigitalAsset(string,string,address)", +"af0dbe54": "voter(address)", "af0def14": "startWonderAuction(string,address)", "af0dfd3e": "blockPeriod()", "af0e7ba3": "LeanFund()", "af0eec40": "assignWarriorsToBattle(address,address,uint256,uint256)", +"af0fa8a1": "harvestAllStrategies(address,uint8)", "af1034ab": "addUpdateGrantee(address,uint256)", +"af10351f": "maxPriceInXCHF()", "af106b10": "oracCost()", "af107749": "m_emissions(uint256)", "af10b8cf": "totalBooty()", "af10c810": "turnOff()", +"af1137f7": "rndTmEth_(uint256)", +"af11c34c": "five()", +"af120304": "decreaseTokensMulti(address[],uint256[])", +"af122b33": "transferByPartition(bytes32,bytes,bytes)", "af123fe7": "makeDeposit(address,address,uint256)", +"af125c62": "getLTVUnit(address)", +"af125e12": "payComisionSponsorTMSY(address,uint256,uint256)", +"af127354": "ApplicationExecution(bytes32,address)", "af129dc2": "numTokensTotal()", +"af130628": "action(uint256)", +"af132d91": "SetSafePriceFeed(address,bool)", +"af133d4b": "migrate(address[],address)", +"af135236": "contributionWithdraw(uint256)", "af135ff5": "getMemberInfoLength()", "af136dea": "setCheckInPeriod(uint256)", "af1380ad": "_getTournamentBattles(uint256)", +"af13a744": "setDevFeeDivider(uint256)", "af13aacc": "blocksPerPhase()", +"af13c4a6": "updateSharePrice(uint256)", "af13f1ad": "forSaleSupply()", +"af14052c": "rebase()", +"af1417d2": "isPrincipleToken(address)", +"af144d99": "AddressCreated(bytes32,string,address,uint256,uint256)", "af1484d0": "setForkReputationGoal(uint256)", +"af1496a0": "getUserInfoTamagIdContains(uint256,address,uint256)", +"af14b622": "retireAddress()", +"af14c88a": "ipfshash()", +"af14f09e": "BUSDBNBPairAddress()", +"af154011": "Wallets(address)", +"af154087": "voterRegister(address)", +"af155a44": "players(uint8)", "af157c19": "getContributors()", +"af15f532": "addPool(address,address,address,uint256,uint256)", "af164016": "PersonalTime(address,uint256)", +"af166062": "f1a()", +"af168d68": "setAllowIssuance(bool)", "af16972c": "mining(uint256,bytes)", +"af16b538": "yieldCollectionFee()", +"af16d8d8": "Qcount()", "af1747aa": "checkDeck(bytes32,uint8[],bytes32)", +"af178ea4": "finalizaLeilao()", +"af17d38a": "createRole(string)", "af17dea6": "symbol_()", +"af18472b": "issueSetOfSet(uint256)", +"af1885b8": "addEthReceivingAccount(address)", "af18a548": "lockBuying()", "af191aa5": "isCertificateRegisteredAndValid(address)", +"af193d96": "setMessageSourceChainId(uint256)", "af19f0d1": "CoinPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"af19f301": "updateOraclePolicy(address)", "af1af4df": "feeBurnerWrapperProxyContract()", +"af1b310a": "BiddersUser(uint256,uint256,uint256)", +"af1b597e": "setAutoBurn(bool)", "af1b5feb": "addWeiRaised(uint256)", +"af1b6acd": "getCycleFinancialsByCycleId(uint256)", "af1b7d90": "take(uint256,uint256[4])", "af1c084d": "adminName(address)", "af1c7940": "fiatInvestorShare(address)", +"af1c7f20": "unstakingTime()", "af1cd6d3": "test2(uint256,uint32)", "af1cd9f6": "getGGCTokenBalance(address)", "af1d06e8": "validateSignature(bytes32,uint8,bytes32,bytes32,address)", +"af1dbb77": "getTotalWithdrawnOf(address)", +"af1e0a21": "initProposal(string)", +"af1e0bd3": "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)", "af1e19d9": "getPlayers(bytes32)", +"af1e30b5": "depositeFund()", +"af1e37f3": "getTCreward(uint256)", +"af1e69ee": "enableRedeemed(address)", +"af1e6be7": "setupMetaData(string,string,uint8)", "af1ee630": "getBdpOwnershipStorage(address[16])", +"af1f7c4a": "updateDividend(address)", +"af1f8cda": "getUserLPTokens(address)", "af1ff972": "rateForCurrency(bytes4)", +"af2018ef": "lockPools(uint256)", "af2096ef": "MAX_PUBLIC_SOLD()", "af209cf8": "addFactory(address,uint8,uint256)", "af20b964": "maximumFundingGoalInETH()", "af21037f": "clearStartTime()", +"af218ded": "currentDailyReward()", "af224bdc": "parseAndStore(bytes)", "af225fd6": "get_last_user_recast(bytes32)", +"af22bd70": "redeemedShares(address)", +"af22e5f4": "getAllRoundData(address[])", +"af22f05d": "updateLocation(uint256,int8,int8)", "af22fd8e": "NtsToken()", +"af232921": "buoyancy(address)", +"af235c24": "adirr(address,uint256)", +"af2371e3": "ROLE_SIGNER()", "af23e1f1": "returnForMint(uint256,uint256,uint256)", +"af24608d": "inactiveOracle(address)", +"af247cdf": "DAI_COLLECTOR_ROLE()", "af24cba2": "setLastAction(uint256,uint256,uint8)", "af24d25c": "openTransfer()", "af250a5e": "calculateAndTransferTokens(address,uint256)", "af259886": "userToNumVillages(bytes32)", "af261875": "t_ImmlaBountyTokenDepository()", +"af262300": "submitMagicValue3(bytes32)", "af263ec9": "HomeToken(string,string,uint8,uint256)", "af269745": "upgrader()", +"af26b762": "missionId()", "af26ed68": "setReportProcessingFeePercentage(uint256)", "af2759f7": "timeUntilClaimAvaliable(address)", "af2768ec": "commitMove(bytes32,bytes32)", "af2780ee": "PERIOD_BLOCKS()", "af27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", +"af27d809": "setProxyContractForMetaTxsAddress(address)", "af28059d": "ChangeItemPrice(uint256)", +"af28410a": "triggerRequireWithReasonError()", "af2885b2": "minimumEtherCommission()", "af28a537": "totalRoundSeedAmount()", +"af28ee0e": "exitByPID(uint256)", +"af290bd4": "mintMulti(address[],uint256[],uint256,address)", +"af294a36": "getDAIPrice()", +"af297459": "Escrow(address,uint256)", +"af2979eb": "removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)", +"af297c05": "setApeLock(uint256)", "af299510": "HasBooster(address)", "af29e720": "remainingGasFund(uint256)", "af2a7fb2": "Brewers()", +"af2aae45": "RESET()", +"af2ac566": "fillBonds(uint256)", "af2b114a": "Erc20SupplyToken(uint256,string,uint8,string)", "af2b1925": "MarmotToken(uint256,string,uint8,string)", "af2b2e5c": "ReVo()", +"af2b4aba": "swap(bytes,uint256)", +"af2b6c9f": "FiatToEthEvent(uint256,uint256,uint256)", "af2b76ab": "airDropHero(uint16)", +"af2b9618": "setMaxLockLimit(uint256)", "af2bf027": "minMaintenanceMarginAmount()", "af2cff59": "removePVPContender(uint32)", +"af2d0f76": "RejectChallenge(uint256,uint256,uint256,uint8,uint256)", +"af2d9f1a": "div(uint128,uint128)", "af2e285c": "setBidState(bytes32,uint8)", "af2e2da9": "getValidatorName(address)", +"af2e6298": "string_1()", "af2f0c46": "SupportComponent(uint256,address,uint256)", +"af2f18c5": "setBuyingPremiumThreshold(uint16)", "af2f9105": "_performWithdraw(address,address)", "af2fa91c": "otherCurrenciesChecker()", "af2fcc17": "globalMinPurchaseAmt()", +"af2fff11": "StartCAVE(uint256)", "af303a11": "salvageTokens(address,uint256)", "af304bab": "getPriceByCredentialItemId(address,bytes32)", +"af306e16": "SECONDSPERYEAR()", "af30e4d6": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256)", "af30e9f7": "transferICOTokens(address,uint256)", "af30ee3f": "GOD()", "af310f02": "NotCoin(string,string,uint8)", +"af314312": "wbnbToBifiRoute(uint256)", "af314579": "isDayFirst()", "af31f49b": "startNextAccountingPeriod()", +"af32f6c8": "tokenTypeIssuers(uint256)", +"af32feb3": "getTeamShare()", "af3309d8": "heartbeatCount()", +"af333419": "setWhitelistRewardRebaser(address,bool)", "af333595": "proxyMergeMint_old(uint256,bytes32,address[])", "af339ee4": "convertLotById(bytes32)", "af33f8a5": "Order_execute(address,address,uint256,uint256)", +"af34e3f8": "addrInArray(address)", "af35314a": "INITIAL_TOKEN_FROM_COMPAIN()", +"af356bfd": "RW()", "af356eee": "preicoContractAddress()", "af35ae27": "getRemainingTokens()", "af35ae3e": "setSaddleShopSaleFee(uint256)", "af35b3f1": "why()", "af35c6c7": "enableTransfers()", "af35dac2": "convertToCents(uint256,uint256,uint256)", +"af3635fe": "selectWinnerPrecision()", +"af364c05": "weeklyRewards(uint256)", "af36778b": "aggregate()", "af36e7a7": "removeUserWhitelist(address[])", "af371115": "findCertificate(bytes)", +"af3718b8": "resultAuction(uint256)", +"af373604": "WeaponOwnerUpdated(uint256,address,address)", +"af374391": "setExchange(uint256,uint256,bool)", "af375838": "addBurnupGame(address)", "af378ce5": "bust(uint256)", +"af37b864": "testAndSetContractStorageLoaded(address,bytes32)", +"af37eda8": "_disableFeeAndGasHandlingInImpl(uint256)", +"af37efad": "maxContributionInEther()", +"af386ab9": "kebab()", "af38d757": "claimable()", +"af391a61": "setDistributor(address,string)", +"af392206": "totalCardValue()", "af3996c3": "fourthStageMinted()", +"af39a6ca": "allLoanContract(uint256)", +"af39e9dd": "gen0SellerAddress()", +"af3a3961": "withdrawDAIFees()", +"af3a48e3": "OpenBidPlaced(uint256,uint256,address,uint256)", "af3a4feb": "LOOMIA_LOOMIA_REMAINDER_ADDR()", +"af3a82cb": "stakingReward(uint256)", +"af3aea86": "rateIsFrozen(bytes32)", +"af3b19e5": "acceptProposal()", +"af3b66c8": "usersActiveO3Levels(address,uint8)", +"af3bb1f2": "pageShareholders(uint256)", +"af3bd83f": "getFirstClaimIndexToSubmitAfterEP()", +"af3c0aaa": "getJigsaw(uint256)", +"af3c4179": "addressLogger(address)", "af3cc6be": "MoxianCoin()", +"af3d615b": "setXrmToken(address)", "af3d8e43": "preICOTokenDelivery(address,uint256)", +"af3dc011": "testAndSetContractStorageChanged(address,bytes32)", "af3dc180": "ecosystemBuildingWallet()", +"af3e2122": "MARKETING_FEE()", "af3e8a40": "orderMatch(bytes32)", +"af3ec0a5": "insertPayment(uint256,address,uint256)", "af3f0ebe": "c_startTime()", "af3f12bc": "profitSharingContract()", "af3f1db4": "BMEtestToken1()", +"af3f3290": "viewUser(address,uint256)", +"af400681": "calculateTransferRelayerWeight(uint256)", +"af405bfe": "getJobsByIds(uint256[])", "af408d89": "setStatus(bytes)", "af40ce20": "revokeUnicorn(uint256)", "af40dd2f": "AccessToken()", +"af412119": "h(address)", +"af4170c4": "tradeCnt()", "af418e4c": "setReclaimPeriod(uint256)", +"af41b248": "esm()", +"af41cec0": "buyVaultOnBehalf(address)", +"af421b62": "top1_doi_thanhvien_50()", "af422cce": "marketSellOrders(uint256,bytes[])", +"af429708": "rndEth_(uint256)", "af42d106": "setKey(string)", "af431f03": "setUser(address,string,uint256)", "af43f597": "get_amount_minus_commission(uint256)", "af448721": "refundMe(address,uint256)", "af44e487": "overdraftPeriodsNumber()", "af45118e": "createProposal(address,bool)", +"af4539a5": "balanceOfKGov()", +"af456cf8": "v1Token()", +"af45ba1e": "trancheParameters(uint256)", "af45de05": "disableDonation()", "af463d2a": "CentaToken()", +"af465a27": "_tTotal()", "af468682": "startsAt()", "af46aa08": "stakeBalanceOf(address)", "af475a9b": "setUSDPerETH(uint256)", @@ -100324,12 +183570,21 @@ "af481be8": "mint(string,uint256,uint256,uint8,string)", "af488ca3": "setLiquid(bool,uint256,bytes)", "af489d5a": "_moveBalance(address)", +"af490c1d": "changeWbtcTokenAddress(address)", +"af497e92": "investNumerator()", +"af4988fc": "stakes(uint8,address)", "af49a228": "DeshiCoin()", "af49e321": "getHolderLimit(address)", +"af4a047a": "ticketsBought()", "af4a2984": "createPrizePool(uint256[])", +"af4a2cb1": "remainingGenesisTokens()", "af4a822d": "getCurrentTrancheIndex(uint256)", "af4b382d": "PaquariumToken(uint256,string,uint8,string)", "af4b3cab": "delBounty(address,address,uint256)", +"af4b4b12": "makeupReferrer(address)", +"af4b4cc5": "getInterestRateByDmmTokenAddress(address)", +"af4b7f14": "Update()", +"af4b7f26": "setBalancesMapNonPayable(uint256)", "af4bed26": "setExchangeRateByOraclize(address,bytes32,string)", "af4c14ee": "setAddressWhitelist(address,bool)", "af4c2288": "getNumAcceptance(address)", @@ -100340,47 +183595,100 @@ "af4d723c": "Libidocoin()", "af4e3d37": "withdrawReservedTokens()", "af4e4494": "TANKER_TYPE()", +"af4e4d4f": "jockeyHLength(uint256)", +"af4e7674": "seedFormatRate()", +"af4e8308": "mintProxy(address,address,uint256)", "af4e99de": "getGameData()", +"af4ed958": "depositCompound(address,address,uint256)", +"af4f1705": "ratioBuff()", +"af4fbe87": "redeemCEth(uint256,bool)", "af4fd9e7": "setValidLockingAmountToPeriod(uint256[3],uint256[3])", +"af500ba3": "stakedOf(address)", "af500fb7": "readBytes32(bytes,uint256)", +"af503191": "BuyBackRequested(address,uint256)", +"af503309": "holdings(uint256)", +"af504906": "deployedSportEvent(uint256)", +"af5057d9": "Create(address,uint256,string,string,uint8)", +"af506255": "slat(uint256,uint256,uint256)", +"af50dc2d": "getdToken(string,uint256,address)", "af50e0d3": "DeDeMasterContract(address)", +"af50f4c5": "OneBitEarn()", "af5177b1": "calcDrawCode()", "af519bf5": "doesProofExist(uint256,bytes32)", "af5260bf": "finalTime()", +"af529a0a": "updateInvestinVaultAdddress(address)", +"af52c981": "getServiceAgreement(bytes32)", +"af52f4cf": "ldo()", "af52fbed": "retrieveWineData(bytes32)", +"af534996": "set_Invest2cDAI_NEWContract(address)", +"af5355d8": "debtSnapshotStaleTime()", "af53dc6e": "contractbacklist()", "af54e324": "upgrade_self(address)", "af55bba0": "removeRegistryFromTagsIndex(address)", +"af55fabb": "alphaLeak(address,uint256,uint256)", "af5610dd": "isThisPreforkVersion()", +"af5623e1": "releaseEmployeeFund()", +"af5631b1": "getBumps()", "af567633": "minPresaleWei()", +"af56b5a7": "partitipantMap(address,uint256,uint256)", +"af56f219": "approve_236(address,uint256)", +"af5730fb": "getDepositIndex(address)", "af574319": "UpgradeProposal(address)", +"af575ab7": "updateConfig(address,address,address,address,uint256,uint256,uint256,uint256)", "af577c4c": "unlockReserve()", +"af57b4e4": "setPairPool(uint256,address,uint256,uint256,uint256)", +"af57bd9c": "lastTradingFeeDistributionAxia()", "af57d236": "STAGE_2_TIME()", "af580d2c": "getPurchaseById(string)", "af58574a": "getTierPosition(address)", +"af58731f": "set_unpause()", "af589421": "callerAdded(address)", "af589572": "getAssetIdTripStartTime(uint256)", +"af58b664": "recoveradmin()", +"af58c22c": "littPoolModified(address,string,uint256)", +"af58e6f0": "currentNFTIndex()", "af58eda8": "findSeedAuthorized(address)", +"af596e69": "bVaultsFund()", "af598bc7": "winnerOf(uint256,uint256)", +"af5990a0": "manure()", "af599a8d": "_depositTokens(address,uint256,address)", "af59c789": "setVendingAmount(uint256,uint256)", "af5a3db8": "finaliseVoting(uint256)", +"af5a519f": "addNewAsset(address)", "af5a7625": "getFundInfo(bytes32,string,address)", +"af5abcf9": "updateCommFund(uint256)", +"af5ac77d": "importCdpPosition(address,uint256,uint256,uint256,uint256)", "af5b065a": "getMinimumPurchase()", "af5b0ece": "getAmountContributed(address)", +"af5b6038": "CalculateRewardPeriod()", "af5ba32a": "_fund(uint256,address)", +"af5baa14": "changeNextPriceDeviation(address,uint256)", +"af5bb34e": "totalStaticWeight()", +"af5bef78": "_permissionHash(address,address,bytes32)", "af5c1020": "InfinityDataChain()", "af5c295a": "checkMaxAllowed(address)", "af5c4540": "getVoteTokens()", +"af5c54c6": "getBestRouteAmoungExchanges(address[],uint256)", "af5c6f38": "synthesize(uint16[5],uint256)", +"af5ca7fa": "dcash()", +"af5ce1df": "MatchAllGPsLock(address,uint256,bool)", "af5cfae8": "remainingInvestment()", "af5d4013": "toteLiquidatorTranserComplete()", +"af5e14fb": "rescuerRegister()", +"af5e30cc": "continentId_currentStakedLandId(uint256)", "af5ee700": "buyTokenPerEther()", +"af5f3fdb": "sha3keccak(string)", +"af5f65ee": "sCap()", +"af5f835f": "price_coeff()", +"af5f88da": "getFairShare(address)", +"af5faa8b": "showairdrop()", "af604173": "ico_startTime()", +"af60820c": "cSeal()", "af608fad": "isTimelockAllowed(address,address)", "af60b50f": "CGCoinsToken()", "af60dc4f": "SCMOXToken()", "af6128c2": "calcTotal(uint256)", +"af61f84c": "onSetDropable()", "af62a708": "getCrystalKindWeight(uint256)", "af62cfd2": "endBetBlue()", "af63066e": "userRound(address)", @@ -100389,70 +183697,117 @@ "af63da13": "getMemberRegistry()", "af640d0f": "id()", "af6499c5": "ActiveDigger()", +"af64b735": "playerToPrice(uint256)", +"af64f3b3": "sqaChunk()", "af653861": "applyAndLockSettings()", "af664f3a": "Bitkat()", +"af66545c": "IssuerRemoved(address)", +"af66760b": "burnableWalletsTable(address)", "af6682ab": "query(uint256,uint256)", "af66c560": "convertData(bytes)", "af66eb1f": "LogWithdraw(address)", "af6704ee": "NehalCoins()", "af67cdc4": "HBToken()", +"af67d0a2": "setFaasPool(address)", "af685482": "BonusChanged(uint8,uint8)", +"af68559a": "migrateLPtokens3auto()", "af68a2c4": "getMyGameDividends()", "af68dd3f": "getBaseInfo(uint256)", "af692e00": "getPullRequestById(bytes32)", +"af693a90": "multimintToken(address[],uint256[])", "af6972c0": "submitDeliveryCommitment(address[2],uint32,uint64[3],bytes32[],bytes32,uint256[2],uint256,bytes32,bytes32,uint8)", +"af69faef": "MOMO()", "af6a2c5c": "JTCCtoken(uint256,string,string)", +"af6a6d79": "visible()", "af6afce5": "min(int256[])", "af6b08a1": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256)", "af6b3615": "getInitialReportStakeSize()", "af6b3d43": "roundSwitch()", +"af6b82fe": "joysPerBlock(uint256)", +"af6bb105": "sellRemove(address,address,bool)", "af6bb824": "_cancelSale(uint256,address)", "af6bd8ce": "durations(address)", +"af6be95c": "registerAppBundle(uint64,string)", +"af6bf7c7": "Mint(address,uint8)", +"af6bfe4a": "dego()", "af6c0f60": "bntToken()", "af6c3021": "MaxReleasedBac()", "af6c7f77": "crowdSaleStartTime()", +"af6c9c1d": "removePair(address)", +"af6caba8": "setSwapRate(uint256,uint256)", "af6cd244": "acceptAnswerAndFinalize(uint256,uint256)", "af6d0437": "AtomicSwapRegistryConstructed()", +"af6d1fe4": "path(uint256)", +"af6dbc34": "postBounty(string,uint256,address,address,uint256)", "af6ddad8": "shift_left(uint256,uint256)", "af6df563": "withBonus(uint256,uint256)", +"af6e1ebf": "ActionTypes(bytes32)", +"af6e5689": "apis(uint256)", +"af6e6238": "pending(uint256)", "af6e66e6": "Lockup36m(address)", +"af6f220a": "debtIssuanceModule()", "af6f37a2": "getBasicTokenAmount(uint256)", "af6f964d": "minReached()", "af6fae22": "roomAvailable(string,uint256[],uint256)", "af6fce9a": "RoyaltyInformationContractSet(address,address,bool)", "af6fe8e2": "testGetToken()", +"af70f1cf": "calcFee(uint256,uint256)", "af713566": "batch()", "af713dda": "SUPPLY_FOR_PARTNERSHIPS()", +"af718e22": "maxRewardLevel2Number()", +"af71d3af": "getofficerent()", "af722ea7": "connectors(address,address)", +"af726f06": "viewAvailabiltyRewards(uint256,address)", "af7296ec": "remainingBankroll()", +"af730b1a": "isTokenTradable(address)", +"af73316a": "lastMinersCount()", "af737da7": "_setClientLastPaidRate(address,uint8)", "af738bbf": "setDepositoryDelegate(address)", +"af74989b": "TMTG_DeletedOperator(address)", +"af750770": "pendingCurry(uint256,address)", "af7520b9": "startingPriceOf(uint256)", +"af7568dd": "total_staked()", +"af75862d": "releaseTokenDecimals()", +"af759368": "moveToTick(int24)", "af75ad2d": "createDispute(address)", "af7665ce": "ethPriceFeed()", +"af768ee3": "activeBets(uint256)", "af769b54": "transferAcceptable(address)", "af769eff": "Paper()", "af76c4d2": "mined_blocks()", "af76ccd7": "finishedPromotionIDs(uint256)", "af77040e": "bonusIncreasePercentage()", "af77649d": "paySmartContract(bytes32,uint256)", +"af77a20f": "foreign_receipts(uint64)", "af77c473": "p_setGamePaused(bool)", "af77ebee": "transfersOnOff(uint8)", +"af77f896": "Rejected(address)", "af77f8bd": "setVIPBonus(uint256)", +"af782b5f": "pendingxCorlibri(uint256,address)", "af7885b5": "listSubName(bytes32,uint256,uint256)", +"af78abba": "CloseCrowdsale()", +"af78d8cc": "approve_17(address,uint256)", "af78facf": "valueBonuses(uint256)", +"af78feef": "WITHDRAWN()", "af7912a1": "bonusTake()", "af791df2": "recoveryDone()", +"af793a8b": "DF_FINANCE_CONTROLLER()", "af794a4f": "tulips(uint256)", "af79b437": "MintingDisabled()", "af79ffde": "userInitialized()", "af7a0899": "firstStageWallet()", "af7a1762": "getBetfundingAddress()", +"af7a2cd9": "_wallet_team2()", "af7a6164": "setMaxMessagesGlobal(int32)", +"af7a9f40": "getWithdrawalsLockTermId(address)", +"af7afe56": "totalPlayers(uint256)", "af7b2eb7": "listAddresses(address[],uint256[])", +"af7b66f9": "set_param(uint64,uint256,uint256,uint256)", "af7bcf5e": "LigoToken(uint256,string,string)", "af7bfd6c": "setValueAny(uint256)", +"af7c7cb4": "repaytokenBehalf(address,address,address,uint256)", "af7c8f96": "changetokenBurnAddres(address)", +"af7c9c75": "singleDeposit(address,address,uint256,uint256,uint256,uint256)", "af7d0eff": "setSellPrices(uint256)", "af7d1890": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "af7d469c": "setGeneratorAddress(address,address)", @@ -100460,53 +183815,91 @@ "af7d5ebe": "change_p4(uint256)", "af7d697e": "EnableTransfer()", "af7d6ca3": "spend(address,uint256)", +"af7dbf54": "signalTokenLock(address,address,uint256,uint256,uint256)", "af7e8577": "TCCCoin()", "af7ed9d7": "maxGasPriceInWei()", +"af7eedb5": "refundFromKickback()", +"af7f6342": "bytes32ToTrctoken(address,uint256,bytes32)", +"af7f653c": "mod(uint128,uint128)", "af7fdd76": "setModified()", +"af804420": "Triger_Withdraw_Head(address,address,uint256)", "af80562c": "testReceiveHash()", +"af8083da": "getSynths()", +"af80876d": "getCollateralTypeInfo(bytes32)", "af819c67": "TTCSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "af81bd03": "_voteAndCheck(uint256)", "af81c5b9": "addToken(address,uint256)", +"af81e175": "sellBond(uint256)", "af8214ef": "LIMIT()", "af82403c": "getNextNode(bytes32)", "af8255ab": "updateProgress(uint256,uint256)", +"af825b07": "updateStateOnRebalance(address,address,uint256)", "af825c78": "Hjjm()", "af83782e": "setMinimumWishTribute(uint256)", "af837832": "isPromo(address,address)", "af83f252": "historyRed(uint256)", +"af844a74": "ET(address,uint256,uint256)", "af8472b1": "consecutiveDeaths()", +"af84efcb": "exchangeSgaForEth(address,uint256)", "af84fb00": "withdrawAmount(uint256,uint16)", "af8532e3": "roundDeadline()", "af854db1": "allowedTransferDuringICO(uint256)", "af857a84": "batchTrade(address[13][],uint256[15][],uint8[2][],bytes32[2][],bytes32[2][])", +"af85b60d": "Freeze(address)", "af862b6a": "ETH_withdraw(uint256)", +"af865286": "totalPendingTingOfAddress(address,bool)", "af874a76": "isValid(address,address)", +"af87b076": "bloqueDelSorteo()", "af87c366": "walletUnlock(address)", "af87c833": "initiateProvider(uint256,bytes32)", +"af88182f": "_uniswapBurns()", +"af890ba3": "getDepositEndDate()", "af8927c1": "GetRealCost(address,uint32)", +"af894310": "gameTokenAllocation(address)", +"af896fef": "hot_wallet()", "af8979fd": "confirmDeath()", "af8996f1": "setPublicationFee(uint256)", "af899735": "playGame()", +"af8a1fd1": "EBK()", "af8a849c": "AllocationGranted(address,address,uint256,bool)", "af8af39f": "setRate555()", +"af8af708": "PaymentForTest(address,uint256)", +"af8b075b": "_setMaxSwing(uint256)", "af8b0ec7": "rewardRoto(address,uint256)", +"af8b1c6f": "treasuryVault()", +"af8b242f": "ENCORE_Liquidity_Transfered()", "af8b7525": "CollectAndReduceFees(uint256)", "af8b912d": "setVotingMachine(address)", +"af8b9d0f": "lockWithdrawals(address,uint64)", +"af8bc660": "MAX_TARGET_THRESHOLD()", "af8c1946": "refundAllEther()", +"af8cfd19": "lockedTokenBalanceLedger(address)", +"af8d2cae": "hitman()", "af8d5a48": "icoEndTimestampStage()", "af8d7611": "setPointIdentifier(string,int256)", "af8d98c9": "gameEndPlayNo()", "af8d9f37": "addressContainsContract(address)", +"af8ddc1a": "pledgeF(address,uint256)", "af8ec44c": "offerGanTokenForSaleToAddress(uint256,address,uint256)", +"af8ee37f": "acceptBid(uint256,address,uint256)", "af8f35c4": "_fallback()", +"af8f6b0b": "getMintTaskList(uint256,uint256)", "af8f7fdf": "ProductUpdated(address,address,address,string,bool)", +"af8f9b7c": "tradeTokenForEtherUsingReservesWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256)", +"af8feca8": "setDevMiningRate(uint256)", "af8ff2f8": "runPreMint(address,uint256)", +"af8ff64f": "lockGemAndDraw(uint256,address,uint256,uint256,bool)", +"af900492": "getTotalUnStaked()", +"af903d45": "bytes_1()", "af906cf3": "setToken(uint256,address)", "af91b947": "UnsuccessfulAttempt(address)", "af91c5fd": "getVotersChoice()", +"af91c8aa": "decodeAddress(bytes)", "af91e0bf": "freezeOracle()", "af92080b": "downTick(address)", +"af92a26c": "auc()", "af92a693": "addRegistrar(address)", +"af92e9c1": "stakeBNFY(uint256)", "af933b57": "withdrawEther(address)", "af93a6d1": "CatNamed(bytes5,bytes32)", "af93aebb": "adjustPhaseBasedOnTime()", @@ -100514,12 +183907,25 @@ "af93e308": "HookToken(address,address,uint256)", "af941129": "testMintGuyAuth()", "af944fc7": "getQueueLenght()", +"af9461d0": "lastSaveTime(bytes32,address)", "af949df9": "isValidUser()", +"af94b8d8": "targetAmountAndFee(address,address,uint256)", +"af94f362": "getImagesUsingAssetPack(uint256)", +"af955e3b": "getGasCostOfGetAmount1Delta(uint160,uint160,uint128,bool)", +"af9567ef": "advertisFund()", +"af95b7f1": "tradersFeesDeserved(address,address)", +"af95b812": "vaultDepositBalanceOf(address)", +"af95c2f8": "getVariable2()", +"af962560": "NTokenTagOf(address)", "af9658cd": "custodianVerify(address)", +"af97aaa1": "tradeOutput(address,address,uint256,address,uint256,uint256,address)", "af988341": "sendLink(string,string,string)", "af9890aa": "GUS()", "af98cfd6": "exchangeByBuyer(uint256,uint256)", "af98f757": "cancelRequest(address)", +"af9904a5": "getDataProviderMode()", +"af9913d0": "boundY2()", +"af9975e6": "mintingFinished_()", "af99a327": "finalizePartnerSale()", "af9a3f9b": "hashName(string)", "af9a51c6": "getComponents(uint16,uint8,uint256)", @@ -100531,19 +183937,28 @@ "af9b6bd2": "bidEMONTMin()", "af9bbcc4": "unbanAccounts(address[])", "af9c5e7a": "getWhitePlayer(bytes32)", +"af9c6887": "getPrice0(address,uint256)", +"af9cb3f2": "getBlockNumberDirect()", +"af9cb4a2": "getStraightInviteAddress()", "af9cb8c0": "StartOfPayments(address,uint256)", "af9cb9f6": "setRequiredStake(uint256)", +"af9d7820": "allInvestors(uint256)", "af9dfd1a": "FoodTokenEmissionEvent(address,address,uint256,bool,uint256)", "af9ee81d": "_unstake(address)", "af9efd4c": "_api_PlaceBet()", +"af9f1c7f": "totalYMENCRBLPTokensMinted()", "af9f3e20": "BTCVERVIER()", +"af9f4563": "cancelPledge(uint64,uint256)", "af9f788c": "TankWithdrawSome(uint256)", "af9fc8a8": "UHC()", "afa01c90": "CollectibleIndex4()", "afa03ac9": "doFailingTransfer()", +"afa04511": "getSecretdigestByID(bytes32)", +"afa099a3": "pendingNewLogic()", "afa0f8c9": "getUintCoinProduction(address,address,uint256)", "afa12a8a": "roundEnds()", "afa17725": "WillyCoin()", +"afa188cd": "PERCENTS(uint256)", "afa1d6c9": "mainSaleTokenRaised()", "afa202ac": "setRolesContract(address)", "afa25098": "returnCoins(uint256)", @@ -100551,119 +183966,213 @@ "afa31744": "saleTokensAddress()", "afa33fb8": "chkLockedB(address,uint256)", "afa3a5d1": "SetdivForTransfer(uint256)", +"afa3ce56": "PAID_AMOUNT()", +"afa3dc4f": "ListingWithdrawn(address,uint256,bytes32)", "afa3de9b": "revokeUserLicense(address,string)", "afa40bbd": "UNIT_PRICE()", "afa4179d": "_getInvestorLockedAmount(address,address)", "afa437c0": "callBackForRequestRandom(bytes32)", +"afa518f5": "total_register()", "afa560b0": "transferToICAPCallGas()", "afa5e0a9": "getCountry(uint256)", "afa5e56a": "decExchangeBalanceOf(address,uint256)", "afa5f45c": "changeDecimals(uint256)", "afa60035": "doesAssetTokenExist(address)", "afa60487": "getDocAsBytes64(uint256)", +"afa61541": "getTokensByRarity()", "afa6c735": "PRICE_PRESALE()", +"afa6d11e": "removeStakeUniPool(address)", +"afa725e7": "StatusChanged(uint8)", "afa72b9f": "CinderToken()", +"afa78d21": "raffleActivation(address,uint8)", "afa7a25f": "updateArtistsAccount(uint256,address)", "afa902a0": "isAutoFowarding()", "afa936b8": "deleteCertificate()", +"afa946f1": "refundDone(address,uint256)", "afa99860": "getTokenPrice(address,address)", "afa9a86e": "tokensInPlay()", "afa9f179": "toReal(int64)", "afaaa654": "setEndIcoPreICO(uint256)", "afaaf9f9": "DepositBroker()", +"afab2671": "VestingFinished()", "afab2b0f": "inventoriesOfDate(uint256,uint256,uint256[])", "afab729d": "EntrepreneurShop()", "afabe8b4": "CALLToken(uint256,string,string)", "afac8ed3": "rand(uint16,uint16)", "aface2f1": "mintTokensFor(address,uint256,uint256)", "afaebf3e": "setDispatcherAddress(address)", +"afaefe9e": "setDrift(uint256,int256)", +"afaf6b19": "SetLockups(address,uint256,uint256,uint256)", "afaf6b2e": "AuditSafeGuard(bytes20)", "afaf97e7": "privateSaleToken()", +"afb00703": "advPrice()", +"afb03075": "withdrawContractFee(uint256)", "afb058ce": "teamTwoPrefix()", +"afb05b39": "createChild(string)", +"afb0a369": "tokenRarity(uint256)", +"afb0a8fc": "NEW_EMISSION_PER_SECOND()", "afb0db5f": "random3()", "afb18fe7": "paymentTokenAddress()", +"afb1f3f6": "setAll10DiscountTranches(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"afb1f8d6": "g_priceInfo()", "afb2032b": "LuckChain()", +"afb24ecf": "getDisabler()", "afb390aa": "getIsSecondPhaseEndedByTime()", "afb3a8e9": "accept2(uint256)", "afb3ae7a": "SPECIALIST_ONE()", "afb47bb3": "approveModeratorship()", +"afb4b05d": "managerReclaim(uint256)", +"afb4c795": "newCollection(string)", "afb4d2ee": "getM()", "afb58d18": "setPriceOneToken(uint256,uint256)", +"afb62e56": "remainingRewards()", "afb688a2": "mineth()", +"afb6966c": "_claimPeriodForTitanReward()", "afb6b9a5": "m_hardCap()", +"afb76aff": "sro(address)", "afb7e495": "eruptionThreshold()", +"afb899d2": "setBurnDiv(uint256)", +"afb95521": "eGGprice()", "afb95eed": "logApproval(address,address,bytes32)", "afb97c20": "tokenTransferDelegate()", "afbae469": "mediumSize()", +"afbb1217": "marketForAsset(bytes32)", "afbb9d44": "ico1Bonus()", "afbc4ebc": "OWNER_CUT()", "afbcd19b": "CROWD_WAVE3_BONUS()", "afbcd904": "setDataColla_001_001(string,string)", +"afbce3b9": "cycles(uint256)", +"afbcfea1": "startFarming()", "afbd3b7f": "minLot()", "afbd8092": "CATRefundedForWei(address,uint256)", "afbdaa05": "isInBlockFilter(address)", "afbddfa9": "toggleFreezeTokensFlag()", "afbde5c9": "getNumTopics()", +"afbe1086": "returnStakedForFiveDays(address)", "afbea641": "SECToken()", +"afbec0fe": "setMinTokenBeforeSwap(uint256)", +"afbec8dc": "changeUniswapV2Pair(address)", "afbec8df": "TheGrid()", "afbfdd93": "Notonegoro()", +"afbff78d": "talons()", "afc01cb9": "getFinishTime()", +"afc03c51": "samxPerBlock()", "afc0b5d3": "Crypto010()", "afc0bf27": "registerName(string,address,bool)", "afc0bf43": "setRecoveryInfo(bytes32,uint256)", "afc0e324": "stringToBytes12(string)", +"afc120ab": "Draw(bytes32,uint256,uint256)", +"afc16bfb": "_setsymbol(string)", +"afc17694": "vaultFarm()", "afc17f80": "addLockedTokens(address,uint8,uint256,uint256)", +"afc18441": "unStakeToken(address)", +"afc19ee2": "__Circle_init(address,string,string,address,address)", +"afc1e8a6": "setVaultX(address)", "afc24bfb": "getRules(uint8)", "afc24e3d": "getChallengeAnswer(uint256)", +"afc26e82": "ActivateLoanType(bytes32)", "afc2cc46": "SGEICO()", +"afc2cfac": "meowthToWbnbRoute(uint256)", +"afc2e548": "_onDisputableActionChallenged(uint256,uint256,address)", "afc2f503": "allowEmployeeMigration(address,address)", "afc361bc": "tokenFrozen()", "afc3a2ad": "current_tier_sold_tokens()", "afc3b688": "perc(uint256,uint256)", +"afc3b93a": "approve_521(address,uint256)", +"afc3befb": "liquiRate()", "afc3c31f": "initDepositAccount()", +"afc41f7a": "calcNeedErc20ToPoolOut(address,uint256,uint256)", +"afc46617": "bookHashesPlaintiff(address)", "afc48052": "mintBounty()", +"afc4a608": "callPayableProtocol(address[],uint256[],bytes,bytes32[])", "afc4a982": "PathCost(uint16,uint32)", +"afc57f98": "setMinPricePerEdition(uint256)", +"afc60adf": "setCrimeCashToken(address)", +"afc62e99": "coinIds(address)", +"afc6522b": "setRewardUpdatePeriod(uint256)", +"afc65e2b": "OnRewardDailyFailed(address,uint32,uint32)", "afc6740e": "PricePerCafe()", +"afc67d1f": "setRebaseMintPerc(uint256,uint256)", +"afc695ce": "claimStakingReward()", +"afc6c649": "balanceCheck(address)", +"afc6e61d": "getGetMaxMiddle128()", "afc6fe2e": "MaybePerformWithdraw()", +"afc72e93": "getERC20RecipientAndAmount(address,bytes)", "afc75b1d": "SwissTrustToken()", "afc797a6": "lastStealValue()", +"afc7c226": "LogFundsReceived(address,uint256)", "afc7c400": "ProICOPrice()", +"afc7f3fa": "UpgradeFrom(address,address,uint256)", +"afc8057e": "CIOAddress()", "afc81953": "createGame(bytes32,uint256,uint256,bytes32,bytes)", "afc83802": "setTotalWeiToBeDistributed(uint256)", +"afc874d2": "doRevert()", "afc88141": "WhitelistAddressdisable(address)", +"afc8e01f": "depositAndBorrow(address,uint256,uint256,uint256)", "afc8fbc6": "MerkleAirDropToken(string,string,uint8,bytes32,uint256)", +"afc90461": "eSuggest(address,string)", +"afc9b259": "MIN_ROLL_UNDER()", "afca35e5": "QuadToken()", +"afca4200": "startNextEra(bytes32,uint256)", "afcac546": "getByteSize(bytes32)", "afcb0d3a": "place(int8)", +"afcb2aa8": "removeTopTopen(uint256)", +"afcb4602": "btsgErc20ContractAddress()", "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)", +"afcdbea3": "updateStateOnRedeem(address,address,uint256,bool)", "afce2d62": "PoC()", +"afce88ec": "getTeamStats(address)", +"afceada3": "playLuckCode(uint256)", "afcee461": "DungeonRunAlpha()", "afcf2fc4": "charityAddress()", "afcfad6e": "getJobPayments(bytes32)", "afd07e80": "getMiningWarRoundOfPlayer(address)", "afd09bab": "quadrupler()", "afd0a85a": "ListingCancelled(uint256,uint256)", +"afd0f906": "takeToken(address,uint256)", "afd0fd1d": "getDecimals(string)", +"afd17b28": "_FPTA()", +"afd1fe03": "removeLiquidityOneCoinThenBurn(bytes,uint256,uint256,uint8)", "afd20e33": "LOCKAMOUNT()", "afd237bd": "getTxn(uint256)", +"afd23d41": "flashBeamOrbiterTokens(address,uint256,address,uint256,uint256)", "afd23d4a": "STAGE_1_FINISH()", +"afd25caa": "acceptNetworkFeeOwnership()", +"afd2bb49": "points_type_weight(int128,uint256)", "afd2d5f6": "OpinionToken()", +"afd361fa": "stakeRecords(address)", +"afd369fd": "stakerMaxWithdrawable(address)", +"afd38184": "blacklist(address[],bool[])", "afd3f79a": "_isCorrectQuarterBuyin(uint256)", +"afd4267a": "BonusTokens(address,address,uint256)", "afd42fd3": "addCloud(uint16,uint16,uint16,uint8,uint8)", +"afd464f2": "TASKPROCESSING()", +"afd47d3e": "getWeight(address,uint256)", +"afd4b0f6": "_date()", +"afd4c8d6": "getCoefficients()", "afd51a6e": "updateLimit()", +"afd5644d": "size(bytes32)", +"afd5b0c7": "hasCorePrivilege(address,bytes4)", +"afd5e683": "getAddressPpblzStakeAmount(address)", "afd61d2c": "getBonusEgg(uint64)", +"afd675f8": "addPharmacy(address)", "afd6b607": "createRequestAsPayee(address[],address[],int256[],address,address,string)", +"afd6b8cb": "STF(uint256)", +"afd72d45": "coin_address()", +"afd74940": "ascensionEvent(address,address[],uint256[])", "afd7b21e": "companyCapital()", "afd7b9ed": "angelStartTime()", "afd7bf92": "noContract()", "afd7d464": "FaradTokenSwap()", "afd82067": "getScore()", +"afd83566": "userReinvestCapital()", "afd8515e": "setTotumPhases(address)", +"afd8b1d1": "addReader(address)", "afd8c8c4": "GasProxy(address,address)", "afd8fd5f": "createToken(string,string,address)", "afd925df": "setPermissionManager(address,address,bytes32)", @@ -100672,15 +184181,25 @@ "afda5460": "YDTToken()", "afdac68d": "query(uint256)", "afdb0970": "sendToBuyer()", +"afdb1d11": "bancorToUniSwapArb(address)", "afdbd499": "reclaimERC20(address,uint256)", "afdc3823": "updateTlcTlr(uint256,uint8,uint8)", +"afdca6d3": "insertACryptographAt(address,uint256)", "afdcd8ec": "RAZEN()", +"afdd3fc3": "lastAllocations(uint256)", "afdd4d23": "airDropValues(address,address,address[],uint256[])", +"afddb98e": "testMethodWithoutInputsWithOutputs()", +"afddf428": "weiPervSPACEXMax()", +"afde8160": "calRLFPriceUSDT()", "afde86c1": "getHash2(address,bytes32)", +"afde8eda": "MintLockedApproved(address,uint256)", "afdebfe7": "setWeiRaised(uint256)", +"afdec5b7": "approve_711(address,uint256)", +"afdf2da6": "LogSetContact(address,string)", "afdfaee7": "_preValidatePurchase(address,uint256,address)", "afdfb804": "getVendors(uint256,uint256,bool)", "afe007b6": "_transferAction(uint32,address,uint8)", +"afe01043": "currState()", "afe0e33c": "reputationRewardLeft()", "afe12e77": "withdrawWrongNode(bytes32,address)", "afe14c19": "clean(address,address)", @@ -100688,48 +184207,98 @@ "afe17129": "tokensStillInLockup()", "afe18413": "placeOrder(address,uint256,address,uint256)", "afe1d4cf": "setTechBonus3(uint256,string)", +"afe1f9a4": "synthetic()", +"afe29f71": "t(uint256)", "afe2ce0e": "setSaleAddr(address,bool)", "afe38ade": "payoutWinners(uint256,address[],uint256[])", +"afe3c7c6": "_RGPTokenAddress()", +"afe3eb62": "startTradeWaitTime(uint256)", "afe4720c": "toggleFeatured(uint256,string)", +"afe53a3f": "canListAddress(address)", +"afe5475f": "dilutionBound()", +"afe59f72": "userSignIn(bytes32)", +"afe5bde6": "PayOut(address,uint256,uint256)", "afe69bb0": "Create(bytes32,bytes32,address,address,address,uint64)", "afe70413": "getCommissionForType(string)", +"afe742c3": "setInitialPrice(uint256,uint256)", "afe76ab1": "calcProgress(uint256,uint256,uint256)", "afe80b8d": "newCmas(uint256,string)", +"afe81041": "_lastDistribution()", +"afe835ea": "Decrypted(uint256,uint256,uint256)", +"afe880b0": "_isRun()", +"afe89ab5": "lendersWithTokens(uint256)", "afe8abbf": "transferPresaleCoins(address,uint256)", "afe8b652": "countriesCount()", +"afe8e4f5": "MetadataGTKEminent(uint256)", +"afe92c1a": "setFXSEthOracle(address,address)", "afe948ce": "OKEToken()", "afe98be1": "calculateId(uint256,uint256,uint32,uint256)", +"afe9a2e0": "_extractCode(uint48)", +"afe9a9a5": "approveTransfer(address,address,uint256,address)", "afe9c776": "XITC()", +"afe9fa6e": "fromRay(int256)", +"afe9fb90": "setGameDuration(uint256)", +"afea02b4": "faasPerBlock()", +"afea07db": "DefaultGameUpdated(uint256)", +"afea7fc3": "getUSDCSpreadPerBlock()", +"afebb2ad": "unfrozenStakeTime(uint256,address)", +"afec22ea": "set(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"afec48c1": "OUT_RATE(uint256)", "afec91c4": "icoInstalled()", +"afecc630": "rewardsMultiplier(uint256)", +"afecd5e4": "gasUtilizing(address)", "afed762b": "toSlice(string)", +"afef0426": "setAdminFeeAddress(address)", "afef07da": "ico2receivedTotal()", "afef0e28": "MARKETING_supply()", "afef25d7": "Puremail()", +"afef75d2": "setSteak(address)", +"afef7efd": "borrow(address,address,address,uint256)", +"aff00e75": "freeCirculation()", +"aff02d1b": "jigoudengji(address,uint256)", "aff038e6": "sellForOtherCoins(address,uint256)", "aff06fbd": "playerCancelActiveGame(uint256)", +"aff098f5": "AdminChange(address,bool)", +"aff0a059": "setMaxClaimTimes(uint256)", +"aff0ba91": "badger()", +"aff0bf50": "approve_683(address,uint256)", "aff16621": "toSig(bytes)", "aff177ca": "updateWhitelist(address[],bool)", +"aff18575": "createWallet(address,address[],string)", +"aff1ad7a": "addxwinFund(address[],bool[])", "aff1e0de": "crowdsaleTotal()", "aff1f15f": "rate3()", "aff21b00": "imOut()", "aff21c65": "getMinimumEndowment(uint256)", "aff23300": "UserWallet(address)", "aff36885": "setBlockMaxVotes(uint256,uint256,uint256)", +"aff37535": "total270Frozen()", "aff3a08e": "CreateFAP(address,uint256)", "aff46572": "getMarketplaceContract()", "aff4b849": "getMemberName(address)", "aff4cbea": "SHIP_SLOTS()", +"aff4e812": "getBookings(bytes32,uint256)", +"aff4ee4d": "z(address)", "aff57736": "getNumbersFromString(string,string,uint32)", +"aff58648": "getNumberOfPoolsDeployed()", "aff5dff2": "getCreditsFor(string)", "aff5edb1": "deregister()", +"aff6ae55": "onTokenTransferPayable(address,uint256,bytes)", "aff6b3e8": "setupRace(uint256,uint256)", +"aff73deb": "__calcSettlementSharesDue(address,uint256)", "aff74c6d": "getTotalPeriods()", +"aff75576": "_setGenesisPhase(bool,uint256)", +"aff75ce1": "approvals(uint256,uint256)", "aff7bd49": "trackSell(address,uint256,uint256)", +"aff7c52e": "getNumAvailableDepositSlots()", "aff7fae4": "GodzSwapGodzEther(address,address,address)", +"aff85f35": "createAndCall(address,string,bytes)", "aff8c7ab": "IkuraAuthority()", "aff9b3cc": "getCarName(uint256)", "aff9e954": "topOptions(uint256,uint256)", "aff9f40d": "SaddleForSale(uint256,uint256)", +"affa26ca": "drmIncreaseApproval(address,uint256,string)", +"affa8817": "getWETHAddress()", "affb62dd": "dAdd(bytes32,address)", "affb672b": "realimmocoin(address)", "affbe8ab": "ACNCToken()", @@ -100739,175 +184308,334 @@ "affcba25": "createNewMintableUser(address)", "affcce10": "_unpackRaceData(uint256)", "affd0dd4": "Funding_Setting_funding_time_start()", +"affe06c5": "dayLimitStart()", "affe39c1": "owners()", +"affe78e0": "_tokenURIs()", "affed0e0": "nonce()", "affee29b": "submitEthToTokenOrderWHint(uint128,uint128,uint32,int256)", +"afff3249": "getMaxTotalSupply(address)", "afff33f4": "GameEvent(uint256,address,uint8)", "afff5064": "setBonusesForAmounts(uint256[],uint32[])", +"afff5758": "discountedStakeYELD(uint256)", +"afff5a64": "lastCreated()", +"afff848f": "rewardReleaseInterval()", "afff9720": "addrBounty()", +"afffa540": "swap(uint256,uint256,address[],address,uint256,bool,bool)", +"afffd5b7": "rewardCollector()", "b0005ff1": "validPresaleTrading()", +"b000c328": "migrateIn()", "b000c81b": "InitBetContract(address,address,uint256)", +"b000de00": "triggerAddress(address,uint256)", "b000dec2": "total_token_sold()", "b001134a": "balanceInTier()", "b0011509": "calcMarketFee(uint256)", "b00124c4": "epocum()", "b00140aa": "getHash(bytes)", +"b0017965": "exchangeEth(uint256)", "b0018bfc": "changeTokenName(string)", +"b001b3f8": "UpdatedLandData(address,uint256,string)", +"b0026433": "getSellCommission()", +"b00282f6": "forwardToCreator()", "b0036d32": "mintByGateway(uint32,uint64,address,string)", +"b003b9e3": "removeCharityRecipient(address)", "b003dd86": "encode(uint256[])", "b004079e": "lol(bytes32)", +"b00425e1": "depositAddress(address)", "b0043308": "setaddAddressListItemSet(bool)", +"b0046607": "getBidsExtra(uint256,uint256)", +"b005300d": "h_view()", "b00606a5": "confirm(bytes32,uint8,bytes32,bytes32)", "b0062595": "KcashToken()", "b006b86e": "_addEthereumAddress(uint256,address)", "b006de0d": "initialBalanceForCrowdsale()", "b006e2b0": "txhash(string)", +"b0070063": "eligibleDoubleDividend(address)", "b0070a30": "changeBeneficiary(uint256,address)", "b00791fa": "proxy_contribution(address)", +"b007a279": "Zeroplug_ins(string)", +"b008578d": "hasEnoughTokens(address,uint256,address)", +"b0086095": "decreaseAllowanceWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "b0091773": "orderExecutionBlockTime(bytes32)", +"b00938ed": "decreaseTokenBlance(string,address,uint256)", "b009c50d": "DevxToken()", "b00a0dbf": "allowanceTransfer(address,address)", +"b00a2922": "stableTokenReserve()", +"b00a4a9f": "addressSignaturesCounter(address)", "b00a81fb": "buy(uint256,uint256,string,string,string,string,string)", "b00b1239": "approveAndDeposit(address,uint256)", "b00baa11": "DaicovoStandardToken(string,string,uint8)", "b00bad50": "identifierToBuyoutPrice(uint256)", +"b00bdb8e": "iGovPerBlock()", +"b00c4c69": "changeOpenLongBlockElapse(uint256)", "b00cdd9b": "preICOgoal()", +"b00ced84": "lpAccounts(uint256)", +"b00cf049": "heapIndex(address)", "b00d4c75": "singleLineWrong()", "b00d70ca": "sollReserve()", "b00dba63": "setTokenData(uint256,bytes32)", +"b00e1749": "DemocCatAdded(bytes32,uint256)", "b00e8668": "can_refund()", "b00eb9fe": "feeCalculator()", "b00f9702": "setTeamPerfitAddr(address)", +"b00fb8f8": "_internalExchange(address,bytes32,uint256,bytes32,address,bool)", +"b00fe205": "deflationRate(uint256)", "b0102e20": "equipMultipleTokens(uint256[])", +"b0104e4d": "FundingFaucet()", +"b010c585": "mapDurationEnumToSeconds(uint8)", "b010d80e": "ensureTokensAvailable(uint256)", "b010d94a": "canExitPool(address)", +"b010fcc2": "lpUni()", "b0112ef2": "changeReserveCATDestinationAddress(address)", +"b0117f2c": "reservaWallet()", "b0119a22": "genOrder()", "b011fcf1": "doWithdraw()", "b0128c08": "getCeiling()", +"b0134f09": "getTranche(address,uint256)", "b013b369": "_errorBuyingTokens(string)", "b013f637": "getNicknameByAddress(address)", "b013fa91": "JadeCoinMining(address,uint256)", "b01454dd": "vrc()", +"b014c3a3": "transferAndSettle(address,uint256)", "b015b81a": "amountToTakeAsRake(uint256)", "b015c2ce": "FLOWToken()", "b0166b04": "testTransferringMkr()", +"b0168ba3": "ovmQueueOrigin()", +"b016a9c2": "collateralDepositLimits(address)", "b016f9f2": "ThirdAddressBalance()", "b0171fa4": "getCurrentGenerationId()", "b0175308": "PriceDecimals()", +"b01761e1": "getTokenSaleStartTime(uint256)", +"b0179e5c": "ERROR_REASON_GLOBAL_PAUSE()", +"b017a30f": "TRANSFER_EVENT_SIG()", "b017c036": "rlc()", +"b017d08c": "JACKPOT_FRACTION()", "b017d808": "assertEq32(bytes32,bytes32,bytes32)", "b01800f8": "createNewUser(bytes32,bytes,bytes32,bytes32,address)", "b0181b3c": "setMyIdentity(bytes32,string,string)", +"b0185da4": "setTimer()", +"b018abbd": "MonthlyNRTRelease()", "b018d65a": "maxAffiliate()", +"b018eb1c": "collectTax(uint256)", "b0192f9a": "auctionManager()", +"b0194942": "getPairUpdatePriceTime(address,address)", +"b019f1c3": "getBalanceIn()", "b019ffd2": "thirdDiscountCap()", +"b01a6a8e": "tokenUserEyeColor(uint256)", +"b01a70c6": "DEFAULT_OWNERS_ROLE()", "b01a71d8": "setProvider1(address)", +"b01ab0b2": "updatecost()", "b01ab46d": "validPurchase(address)", "b01afdab": "changeBaseValue(uint256,uint256,uint256,uint256,uint256,uint256)", "b01b0304": "ExchangeRateChanged(uint256,uint256)", +"b01b0ef7": "getExecutionAdmin()", "b01b299f": "setTokenPriceProposal(uint256,uint256,uint256)", "b01b3b6c": "_createSale(uint256,uint256,uint256,uint64,address)", +"b01b3e28": "getSubscriptionHash(address,address,address,uint256,uint256,uint256)", +"b01b6d53": "anchors(bytes32)", "b01b8877": "setFundingFueled()", +"b01beb9b": "getChickenBlockReward()", "b01c60b7": "getPrices(uint256,uint256)", +"b01c68be": "HASH_TYPE()", "b01d3d9e": "ENTToken()", "b01d54ed": "PolyAi(uint256,string,uint8,string)", "b01d5b63": "purchaseFor(address,uint16,address)", "b01d7a11": "sendTokensToFive(address,address,address,address,address,uint256)", +"b01db4ec": "getCompAccrued()", +"b01dedcf": "airdropPoolsInfo(uint256)", "b01e8308": "JointToken()", "b01ead43": "returnToOwners()", "b01eba14": "MIN_TOTAL_AMOUNT_GET_ETH()", "b01f1571": "unitsPerEth()", "b01f31c9": "hardcapInTokens()", +"b01fa271": "tokenPresaleWithdraw(uint256)", +"b01fd89a": "activeUser(address,address,uint256)", +"b02004b2": "getNonceOut(address)", "b0203f3f": "totalAmountsBetStage2(uint256)", +"b020961a": "setUsdtRate(uint256)", "b020b188": "developmentToken()", "b020d7a3": "_reinvest(bytes32,uint256)", +"b0213a45": "setInitialUserCredit(uint256)", +"b021465f": "entityIsNaaS(address)", "b021cace": "RubyCoin()", +"b0221bb6": "getContractAtIndex(address,uint256)", +"b0228f1e": "max_token_networks()", "b0228f8c": "icoEtherReceivedMainSale()", +"b02336a7": "NoThisIsPatrick(address)", +"b02420dd": "adel()", +"b0243143": "getPrefer(uint256)", +"b0244682": "removeExternalErc20Award(address,address)", "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()", +"b025b3fa": "TRANSFERFROM_SERVICE_NAME()", "b025cc45": "deadlines(uint256)", +"b025fbd6": "AuthorizePayment(uint256,bytes32,address,uint256)", "b0267126": "advisorySupplyRemaining()", +"b026a0d6": "Case(bytes)", +"b026ba57": "requestFunds()", +"b026d70b": "contributedGze()", "b0271023": "verifyFile(string)", "b0273de1": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256[])", +"b0276dbf": "jockeyIndexPrice(uint256)", +"b02873ad": "updateStatus(string,int8)", "b028c059": "createMatch(uint256,string,string,int32,int256,uint64,uint64)", "b028d73a": "isCrowdsaleAllowed()", "b028ee13": "s2b(string)", +"b0290a5b": "_encode_sol_bytes25(bytes25,uint256,bytes)", +"b029334d": "getWashTrader(address)", "b0293850": "claimBuyerFunds(address,address,address,uint256)", "b029c2c8": "approve_unwanted_tokens(address,address,uint256)", +"b029d427": "finishStakerChange()", "b029d940": "setPlatinumAddress(address)", "b02a2fd1": "withdrawLemonCoins()", +"b02a436a": "stakeToWithdraw(address)", "b02a73a1": "sendTo(address,uint256,bytes)", +"b02ae773": "poolsAutoKYC(address)", "b02af038": "bonusesSold()", +"b02b4a2f": "getJobCount()", "b02b69d6": "addBonus(uint256,uint256)", +"b02bc316": "editCategory(uint256,string,uint256,uint256,uint256,uint256[],uint256,string,address,bytes2,uint256[],string)", "b02bf4b9": "earn(address,uint256)", +"b02c0065": "upgradeFundController(address)", "b02c43d0": "deposits(uint256)", +"b02c570b": "batchBlacklistCountries(uint16[])", "b02c8054": "withdrawICO(uint256)", +"b02c808d": "openLoan(address,address,uint256,address,uint256)", +"b02c83b5": "InterestDays()", "b02da8d8": "diamondBonus(uint256)", "b02dbd07": "teamAllowance()", +"b02dbe45": "buyPrice2()", +"b02defe9": "DepositColor(uint256,uint256,uint256)", +"b02e786f": "assetTypes(address)", "b02e8496": "processSellRequest(string,address,uint256,uint256,bool)", +"b02eba05": "stableCoinRewardsPerTokenPaid(address)", "b02ef382": "SALE1_END()", +"b02f0b73": "exitPool(uint256,uint256[])", "b02f1edc": "TokenERC20(string,string)", "b02f53ae": "testConcatStorage31Bytes()", +"b02f6d63": "RefundCoin(address,uint256)", +"b02f9e3d": "generateDebt(address,address,address,uint256,uint256)", +"b0301280": "testfx()", "b03031b7": "_askQuestion(bytes32,bytes32,address,uint32,uint32)", "b0304813": "currentMilestone()", "b03053b6": "createListing(uint256,uint256,uint256)", +"b0306671": "transferNFT(address,address,address,uint256)", +"b0311079": "deploy(address,address,bytes32)", +"b0314599": "addTransferAgent(address)", +"b031abf0": "executeProposal(bytes32,string,bytes32[],address,uint256,bytes,uint8,uint256)", "b0321d45": "ZJMToken(address,address)", +"b0326003": "finishTokenRelease()", "b03260be": "scheduleTransaction(uint256,address,bytes)", +"b032ca28": "withdrawEVN(uint256)", +"b032ebe9": "queryUserTotalMine(address)", "b032fff4": "weiMaximumAmount()", "b0335ffc": "setStage(uint256,uint256,uint256,uint256,uint256)", "b033777f": "endCurrentGame()", "b033a02b": "payDivsValue(uint256,string)", "b033a6c3": "lookup(address,uint256)", +"b033b38e": "getPendingRewardOfUser(address)", "b033cab9": "voterStakes()", "b0340123": "votingToken()", +"b0341c20": "uplinePercentage(uint8)", +"b03429c8": "ERC721_RECEIVED_OLD()", "b0347c56": "estimatePots()", +"b0347d93": "burnUbase(uint256)", +"b0348328": "confirmContract()", "b0349184": "clearRecords(bytes32[])", "b0349650": "_removeControllerByPartition(bytes32,address)", "b034998b": "ChooseBwea()", "b034d5aa": "Total_Deposits()", +"b034e5c5": "approve_497(address,uint256)", "b034f3cf": "myLatestBid()", +"b0352cd8": "Employee(address,bytes32,bool)", "b0355b45": "LuHuToken(string,address)", +"b035b447": "checkIfValidTokenIdForNFTUser(address,uint256,address)", +"b035e768": "nftokenID()", +"b035edba": "withdrawCurrentRewards()", "b03645b5": "max_users()", +"b0366628": "f(bytes8)", "b036ab65": "LemoSale(uint256,uint256,uint256)", +"b037b3a7": "sendState(uint256,uint256)", "b037e4f5": "MCoin()", +"b0386931": "multipleSafeMint(uint256[],address,string,bytes)", "b0388344": "readTaskCreatedOn(string)", "b03903fd": "usernames()", "b03941bc": "dropable()", "b0397857": "secondaryListing()", +"b039a88f": "getGasAndDataLimits()", +"b039bd55": "pizzaPerBlock()", +"b039d5a6": "_rChaiPrice()", +"b039e1de": "initiateSoloBattle(uint256,uint256)", +"b03a2cee": "cfi()", +"b03a3d2e": "viewProtocolRate()", +"b03a5ba4": "setCheckRedeemedAmount(bool)", +"b03a635f": "executePayout(string)", +"b03a9a05": "invariant()", "b03b3a0a": "setPOOL_edit_13(string)", +"b03bdb04": "PROTECTED_TOKENS_CAP()", +"b03c1abc": "battleFees()", "b03c4b33": "setLock(address,bool)", "b03c6729": "inmax()", +"b03c6e4d": "ExtendedStart(uint256,uint256)", "b03cf9bd": "MerkleAirdrop(address,bytes32)", "b03d169c": "mineCount()", "b03d5ce8": "PVCToken(address)", +"b03df69d": "isDuplicatedPool(address)", "b03e02ad": "bluemoontestToken()", +"b03e6478": "burnSupply()", +"b03e8703": "usdtBuyOn()", "b03f75a5": "giveupBid(bytes32)", +"b03f9aa5": "getFamersContract()", +"b03fb96d": "pricePerKW()", "b04010c6": "fuse()", "b0402d36": "LiveAuctionEvent(address,uint256,uint256,uint256,uint256)", "b0407315": "purchaseWarehouseSpace(address,uint256,uint256)", +"b040785a": "availableToBorrowETH()", +"b0407cde": "toYieldToken(uint256)", "b0408721": "buyVouchers(uint256)", "b040d545": "tokenToTokenSwapOutput(uint256,uint256,uint256,uint256,address)", +"b0412cb0": "resumeMarketCreation()", "b0414a2d": "setMinimumGasLimit(uint256)", "b0417e98": "checkVote()", "b0419107": "_getNthNibbleOfBytes(uint256,bytes)", +"b041b192": "retSenderAddr()", +"b041d696": "isDisputed(uint256,uint256)", +"b041e272": "releasedDevFund()", "b042307d": "_isInterceptableMsg()", "b0423141": "StringStorage(string)", +"b04232b8": "prizeIndex(uint256)", "b04247e9": "DentacoinAddress()", +"b04253b3": "BbkUnlocked(address,uint256,uint256)", +"b0426a3f": "getLockInfo()", "b04287b3": "sharesOfVault(uint256,address)", +"b0428da6": "_totalShares()", +"b042c33b": "MessageExchangeEthStb(address,uint256,uint256)", +"b043324c": "contributionsMade()", +"b0433393": "FRANCISCUS()", "b0433fe9": "_supportsERC165(address)", +"b0445a21": "highInterestPerBlock()", "b0445a77": "PRIME_VESTING_DATE()", "b04464cd": "ChangeImage(string,uint256)", "b0448884": "updatePrice(bytes10,uint32,uint64,uint32)", +"b044a1e4": "Params(uint256,uint256)", +"b045009c": "escapeBlockLowerBound()", "b04510d5": "xultoken()", +"b0457b99": "_buy(address,bool)", +"b0458bf2": "GetHighGravityTraining()", "b0459d49": "LoanStandard(address,address,uint256,uint256,uint256,uint256,uint256)", +"b046229d": "getLatestTokenID()", "b0467deb": "getUser(uint256)", +"b046846c": "burnTokensAndClaimeShareOfTreasury(uint256)", +"b04699b1": "Cuts(uint256,uint256,uint256)", +"b046a449": "updateRebalancer(address)", +"b046db51": "getEventData(address)", "b0471d43": "primary_wallet()", +"b047935f": "getExecutorRegistryAddress()", "b047dd06": "tokensale(address,uint256,uint256)", +"b047e5b4": "mintManyIjins(uint8[],uint32[],uint8[],uint16[],uint16[],uint16[],uint64[],uint24[],bool[],uint24,address)", "b047ee56": "getBalance_Token1(address,address)", "b047f245": "listForSale(uint16,uint256)", "b047fb50": "cooAddress()", @@ -100915,147 +184643,278 @@ "b0483c3f": "reload(uint256,uint256)", "b048546f": "Divide(uint256,uint256)", "b0485706": "read_u32_array()", +"b04873f0": "ProxyCall()", +"b048dead": "setLoanFeeRation(uint256)", "b048e60d": "FebToken()", +"b0491e4e": "runRefund(address)", "b049474d": "disableSuicide()", "b049d176": "cancelSellToBlackMarket(uint256,uint256,bool)", +"b049e25a": "MINT_FEE_DEV()", "b04a1680": "GetConsentDirective(uint256)", "b04a3f1c": "EndLottery()", +"b04b2de2": "testMethodInputsEmpty()", "b04b3f57": "isCustodian(address,address)", +"b04b6179": "unregisterUserAdmin(address)", +"b04b82d3": "RequestDeclined(uint256)", +"b04c247a": "ght()", "b04ca7f0": "dateAdmin()", +"b04cd134": "maxBuyCap(address)", +"b04cd7d7": "levelBonusRate(uint8)", "b04d6638": "mangeFundAmount()", +"b04e1ab5": "setGGRPLPolicy(address)", +"b04e4559": "onMaintenance(bool,uint256)", "b04e74f2": "Gerritcoin()", "b04e7668": "createCastleWithToken(address,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", "b04eb639": "subCrystal(address,uint256)", +"b04ed8a4": "burnDivisor(uint256)", +"b04fb07c": "batchUpdate(uint256[],uint256[],uint256[])", +"b04fbddd": "simulateDispatchTransferFromCalls(bytes[],address[],address[],uint256[])", "b04fc4e1": "superContract()", +"b04fc7c9": "getPowerPoolPriceTokenToNDAO(uint256)", +"b0500311": "autoToLp1Route(uint256)", "b05005a2": "lock(uint128,string,address,bytes16,uint32)", +"b05088c4": "getAccountAuthorities(address)", "b050b49c": "rewardFoundersAndPartners()", "b050f83a": "proportion(uint256,uint256,uint256)", +"b051935a": "_getSupplyRate(uint256,uint256)", "b051d722": "loadRandom(uint256)", +"b0524422": "getOraclizeUrl()", "b052852f": "approveAllocation(address)", +"b0531524": "wethReservedForPoolRewards()", "b0532349": "_destroyContract()", +"b0532ff2": "_regAddress()", +"b0539187": "gauges(uint256)", +"b053e874": "CarHandleEvent(address,uint256,uint8)", "b054058a": "nSign(uint256)", +"b054122a": "getTokenCount(bytes32)", "b0544308": "newLockTimestamp(uint256)", "b0545532": "numGamesCompleted()", "b0547d8c": "deleteShopMods(address)", +"b054a9e8": "createWallet(address)", +"b054b081": "SellHistory(address,address,uint256,uint256,uint256)", +"b054b41c": "returnTokenCount(address,uint256,bool)", +"b054b903": "private_sendCharityFunds(string,uint256)", "b0557bf1": "updateParams(uint256,uint256,uint256,uint256)", "b055a62a": "INCRYPTHEDGE(uint256,string,string)", "b055d1bc": "amountProportion()", +"b055e237": "LogRevenue(uint256,uint256,uint256)", "b055fdf2": "isTarget()", "b05609ce": "pricegreengrey()", +"b0560acc": "getShareOwnership()", "b0560eba": "GuardaProva(address)", "b056561a": "DATE_31_DEC_2022()", +"b056b49a": "rollover()", +"b056b4b7": "retailer(address,string)", "b056bb81": "RedSoxYankees410()", +"b0570191": "xampContract()", "b0573de6": "getDefaultPartitions(address)", "b0575069": "ap(address)", "b05784b8": "retreive()", "b0578878": "translate(address)", +"b0579292": "getParty(address,address)", +"b057e457": "addLiquidityETHAlphaOptimal(uint256,uint256,address,uint256)", +"b058f124": "sayText()", +"b059158c": "mintLE(address)", "b05940f2": "getOpenAuctions()", +"b059450d": "tEarn()", "b059c177": "_0_name(uint256)", "b05a0071": "DET()", "b05a47d9": "VocToken()", +"b05b70da": "vbswapToken()", +"b05c4d31": "_computeMemberRewardOverInterval(bytes32,uint256,uint256,uint256)", +"b05d6e80": "catchMonster(address,address,uint32,string,address,uint256,uint256,uint256,address)", "b05d8096": "setStr(string,uint256)", +"b05d8edd": "holesForSchains(bytes32,uint256)", +"b05e33cc": "bonusOwners(address)", "b05e390a": "TokenEther(string,string)", +"b05e416d": "switchRootTransferLock()", +"b05e50f7": "lott()", +"b05e93e0": "maxDownLimit(address)", "b05eb08d": "_isLeapYear(uint256)", "b05f1b88": "getAmountOfTransactionsInProposal(uint256)", "b05f99f5": "changeInvestment(address)", +"b05fa2e0": "devWithdrawnAmt()", "b05fa837": "patronageContractForUsername(string)", "b05fceba": "mDepositWallet()", "b05fef55": "Issuer(address,address)", +"b0602cd3": "changeStakeTokens(uint256)", "b0603326": "auctionStatus(bytes32)", "b0604a26": "schedule()", "b0604a9c": "testCantBuyTokensInStoppedSale()", +"b0607988": "ReferenceConfirmed(address,uint256,address,uint256)", "b060b785": "getWithdrawableOperationFeeDatesAndAmount()", +"b060dc61": "setSupportBuyCurrency(address,bool,bool,uint256)", "b060de3a": "withdrawAllOptions(address[])", "b0619e85": "hasPermission(address,bytes32)", +"b061b39f": "bonusMultiplierStartBlock()", +"b061be1c": "verifyFundPoolWhiteList(address)", +"b061c62b": "callA(address)", +"b061d99b": "NetfRevenue(uint256)", +"b0622f67": "getGasCostOfGetTickAtSqrtRatio(uint160)", "b0623074": "frozenTime(address)", +"b0623d02": "addPublish(uint256)", "b063152a": "generateHash(string)", +"b0631ac5": "arbitrage(address,address,string[],uint256,string[])", +"b063a623": "lastApostleObjectId()", +"b063c56a": "srf(address,address)", +"b0641cbb": "constant_getPriZZZes()", +"b0645eab": "getActiveInvestments(address)", "b064bb56": "_ltoa(bool)", "b064ca18": "userForceGameEnd(uint256)", "b06576f3": "contrBonus(uint256[])", +"b065b722": "approve_786(address,uint256)", "b0660c3d": "transfersAllowed()", "b0667cf8": "queryPrice()", +"b0667f7a": "pauseUnpause(bool)", +"b0669b25": "rateStepsValue(uint256)", +"b066cc10": "gta()", "b066d3b7": "removeReputation(address,uint256)", "b066dca9": "MERZhToken()", "b066ef3c": "cooldown(uint32)", +"b066fb34": "hatcheryCat(address)", "b0670cc9": "get_size()", "b0671381": "isValidWalletSignature(bytes32,address,bytes)", "b0673d57": "getItemStore(bytes32)", +"b067d288": "testOnlyInvestorCanCancelInvestment()", "b0686584": "incNT()", +"b06867e3": "testPushPop()", "b068776b": "SaleFinished(uint256)", "b068b5b8": "getRank01()", +"b068f34f": "getMarketDetails(address)", +"b0690124": "setNodeBody(uint256,bytes)", "b06939a2": "notEqual(address[],address[],string)", "b0698763": "subdomainOwner(string,string)", "b069dbf1": "sendFromContract(address,address[],uint256)", +"b069ec2d": "TokenLock(string)", +"b06a5c1e": "Bonus(uint256,uint256,address,uint16,uint16)", "b06bcb40": "getAddressInfo(address,address)", +"b06c4244": "ADD_PRESIGNED_HASH_ROLE()", +"b06c5c3a": "evt_createRoomSucceeded(address,uint256)", "b06c76d0": "totalMinedSupply()", +"b06cb54b": "PlayerAttacked(address,address,bool,uint256)", +"b06ce14a": "boardroomSetOperator(address)", "b06df18e": "transfer(bytes20,address)", "b06df2ae": "GetMyOrders()", "b06e1e02": "changeTeamWallet(address)", "b06e64ca": "maxTokensWithBonus()", +"b06e8c65": "burnSynths(address,uint256)", "b06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", "b06ee044": "totalBasicIncome(address)", "b06eedf5": "getReferralBonusAmount(uint256)", "b06f4d00": "AICoin(uint256)", +"b06f576e": "ChangeRegionName(uint16,string)", "b06f8d34": "redeemWallet()", +"b06faf62": "isMigrated()", "b06fd1e3": "CRAWDSALE_START_DAY()", "b06fe82e": "changeEtherRatioForOwner(uint256)", "b07048d9": "remove_user(address)", "b0705e44": "getMySword()", "b070bbd4": "doCalculateRoom(uint256,uint256,uint256,bytes32,uint256)", "b070bdc6": "all_obstacles()", +"b070cb3e": "LogError(string,string)", +"b0713fd8": "EthReturnedToOwner(address,uint256)", +"b0718b17": "getFixRate(uint256,uint256)", "b071cbe6": "hardcap()", "b071fa2a": "SENC_HARD_CAP()", +"b071ffe5": "ico_flag()", "b0720613": "fundingMinInWei()", +"b0723080": "swapIn(uint256,uint256)", "b072bd10": "usedSummReserve()", "b0732278": "finishICO(address,address,address)", "b073e2b7": "testMath()", "b073f52b": "updateBalance(bytes32,uint8,int256)", +"b073f687": "totalAirdropAmount()", +"b074bddf": "getNodeForLabel(bytes32)", +"b074d2f6": "penaltyAddress()", +"b0750611": "destinationChainId()", +"b0750815": "setIBGRate(uint256)", "b0756562": "addLottery(string,uint32,uint32,uint32)", "b07576ac": "delMin()", "b0759c3e": "lockInBatches(address[])", +"b075a694": "buyMineSapphire()", +"b075ea3e": "removeFromVestedlist(address[])", +"b076a53a": "setSell(bool)", +"b0771ab0": "config(uint256,uint256)", +"b0772d0b": "getAllMarkets()", "b0773d12": "payAndRemoveInvestor(uint16,uint256)", "b07741fd": "refresherFee()", +"b0779c26": "mimeTypeRegistry(uint8)", "b077c09b": "readSample(bytes)", "b0780bd8": "getDonationStats()", +"b0783931": "operatorPercentage()", "b0786de9": "NeptunSupply()", "b078ffe8": "BitcoinUnicorn()", "b0792570": "beneficiaryStake()", "b0799375": "nameValue()", "b079cf62": "getRandomDragon(uint256)", +"b07a0821": "total90Frozen()", "b07a3107": "isOraclizeQueued()", "b07a6735": "processPrivateFunding(address)", +"b07adb36": "nyaFundAllocationRate()", +"b07b4607": "ethCustomRate()", +"b07bb3ba": "changePriceByAverageOf20Currency(uint256)", "b07bbefd": "updateValueAndMint(uint256,uint256,int256)", "b07be1fe": "createThemedSpinner(string,uint256,address,uint256)", "b07be207": "calculateTicketPrice()", +"b07c411f": "used(bytes32)", "b07c76e8": "LoggedDividend(uint256,string,uint8,string,bool,bool)", +"b07cb066": "getETHAddress()", +"b07cc9c7": "lastReapedAddress()", +"b07ccabf": "getSwapAmt(uint256,uint256)", +"b07cd20a": "unpauseProxy(address)", +"b07d20a2": "greenWireCutters(address)", +"b07d5bf0": "_minBuy()", +"b07d7e39": "saySomethingElse(string)", "b07e4e34": "_unpackCycleValue(uint256)", +"b07eb20a": "ctokenAddrs(address)", +"b07eb675": "updateCheckDeadline(bool)", +"b07ecd2e": "burnPynths(uint256)", +"b07ed3a9": "getStoreAddress()", "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()", +"b080627d": "eosToEth()", +"b081b4eb": "wrapEth()", "b081b9aa": "propose_beneficiary(address)", "b081cfc5": "_thresholdOne()", +"b08242fb": "pyramidAddress()", +"b082443b": "addNewToken(bytes32,address)", "b0827f42": "restrictedTokensDate()", +"b082ab30": "unpauseLGE()", "b082b9c7": "getOrganisationCount()", +"b0831492": "setNftRequired(bool)", "b0837524": "minIcoTokenLimit()", "b08428c1": "internalCalc(uint256)", "b08480d4": "finishSettlement()", "b08496dd": "_newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", +"b0849e9d": "setMaxEthCapToBuyToken(uint256)", +"b084d8f1": "newRandomNumber_uint(uint256)", "b08510a3": "setdissolvedcontract(address)", "b0859b6f": "oraclize_setGasPrice(uint256)", "b085a5af": "getMyWine()", "b085b9a5": "Example()", +"b08602b4": "liquidateCSP(bytes32)", +"b0862b6c": "getBidStatus_for_token(uint256)", +"b0863063": "onDisputableActionVoided(uint256)", "b08639e3": "getRepAvailableForExtraBondPayouts()", "b0867a5c": "joinGameRandom(uint8)", "b086d5aa": "getUriSetCount()", +"b086d740": "reduceBeneficiaryPct(uint64)", "b087b8bc": "getWorkflowCount()", +"b087d3ae": "maxDai()", "b0882c4b": "newETHUSDPrice(string)", "b0883120": "balanceOfBuyer()", +"b0883444": "currentbalance()", "b0885dd6": "distributeWithTransferFrom(address,address,address[],uint256[])", +"b088f2de": "accumulateDSR(address)", "b0891f4f": "setTokenAgent()", "b0894aa6": "getDateOfAcceptance()", "b0898886": "claim_devidend_for(uint256)", +"b089894c": "resolveDuel(bytes32,bytes32,uint256,uint256,uint256,uint256)", +"b089cde8": "updateProtectedLiquidityAmounts(uint256,uint256,uint256)", +"b089fe72": "whirlpoolAddress()", "b08a3619": "registerDepositAddress()", "b08af3dd": "get_participant_num_of_uses(address)", "b08b3410": "getStraightReleasableAmount(address)", @@ -101064,131 +184923,257 @@ "b08c2915": "JP_winningHash()", "b08c7730": "feeGame()", "b08c9bd1": "refuseSale()", +"b08cf556": "GetOwnershipByAddress(string,address)", "b08cfb84": "addWhitelistedAddress(address,address)", +"b08d024b": "timeLastCollectedPatron(address)", "b08d2718": "ReleaseableToken(uint256,address)", "b08db494": "toAddress(bytes,address)", "b08e0d3e": "applyRefund(uint256,bool)", "b08e0f4a": "manualWithdrawal(uint256)", +"b08e15c4": "icn1(address)", "b08f8e1d": "setContractHoldBalance(uint256)", "b08f965e": "SSA()", +"b09013a2": "drainTo(address[],address)", "b090c768": "LogSelectWinner(uint256,uint256,address,uint256,uint256,uint256)", "b09173f6": "viewAffBonus(address)", "b091a044": "transferRecord(address,address,uint256)", "b092145e": "whitelist(address,address)", "b0927de7": "newRepo(string,address)", +"b092deb1": "DISTRIBUTION_PERIOD()", +"b09324d0": "getNftBoost(address,uint256,int256)", "b0933f25": "fixAdvance(uint256,uint64)", "b0934d7d": "removeFromBlackList(address,address)", +"b0934f64": "jobsActive()", +"b09397be": "sendErc20Token(uint256,uint256,address,uint256)", +"b0940104": "deployed_registry_instances(address,uint256)", +"b094149f": "protester()", "b0949833": "NineStandardToken(uint256,string,uint8,string)", +"b094f2c4": "scaleDownCollateral(uint256)", "b0950b8c": "canCloseVoteCommitPhase(address,bytes32,bytes32)", "b09609d5": "LogMinting(address,uint256,uint256)", +"b096906e": "keepFXSmax()", +"b096f4e3": "PauseCrowdsale()", "b097bdbd": "PRESALE_STARTTIMESTAMP()", "b097c984": "setIEOAddress(uint256,address)", +"b098ab76": "withdrawAfter18Years(address)", "b098b86b": "ownsOrSelling(uint256)", "b098bdba": "getAppeals(uint256)", +"b098fc80": "balanceAaveAvailable()", "b09938b8": "VormaToken()", "b0994d4a": "authorizeOperator(address,bool)", +"b0998bb2": "StakingPaidGet(address)", "b099cceb": "makeBet(bool)", +"b09a5a1d": "checkCompleteContentActivity(string,uint256,uint256)", +"b09a8eec": "getValuePoolMiningFee(address)", "b09ac6f2": "isUserProduct(bytes32,bytes32)", "b09ad8a0": "upperBound()", "b09afec1": "getTokenData(uint256)", "b09b1a51": "buyUnicorn(uint256)", +"b09b9854": "godSetHouseRealtyContract(address)", +"b09bbc79": "_tokenTransfer(address,address,uint256,bool)", "b09bc3bf": "try_to_get()", +"b09bd39a": "gimmeSome()", "b09c0f30": "rewardWeekly(uint32,uint32)", "b09c235e": "MargamCoin()", +"b09cce65": "confirmGovernance()", +"b09d0449": "addCommodity(string,address,uint256,uint256)", +"b09d5d6e": "buyTokensPrivate(address)", "b09db392": "addressDevelopers()", +"b09ddf7b": "create(uint256,uint256,string,bytes)", "b09df36a": "getFunctionSignatures()", +"b09e26b8": "setAaveMigrationAddr(address)", "b09f1266": "_symbol()", "b09f168e": "tokenOfOwnerByRange(address,uint256,uint256)", +"b09f1fb1": "registerAllowedRfqOrigins(address[],bool)", +"b09f21c5": "createOption(uint256,uint256,bool,address,uint256,uint256)", "b09f4af5": "executeLock(bytes16,address)", +"b09feee0": "approve_293(address,uint256)", +"b0a05a2e": "one_to_n_address()", +"b0a05ef2": "_getCurrentTermId()", "b0a0662a": "FIRSTSALE_BASE_PRICE_IN_WEI()", "b0a08873": "adjustLoanParams(uint256,uint256,uint256)", +"b0a10249": "versement()", +"b0a16395": "dripFlapTend(uint256,uint256,uint256)", +"b0a1736c": "withdrawExactTokenWithAm(address,uint256)", "b0a1bfa9": "updateFeeBalance(uint256)", +"b0a1c1c4": "accountBalance()", "b0a1c666": "newComment(bytes32,string)", +"b0a1d7e0": "SHARES_PER_CHUNK()", "b0a1e2b4": "disputeID()", +"b0a21222": "UnFreezeAcc(address)", "b0a2365c": "percentTokensToSale()", "b0a254a7": "addStackholder(address)", "b0a267da": "userTipped(address,bytes32,uint256)", +"b0a26abd": "BuyTokens(uint256,uint256,uint256,address)", +"b0a2a917": "isBrickOwner(uint256,address)", +"b0a34443": "SetUserLastName(string)", +"b0a346e6": "NewUpgradeProposal(address,bytes32,address,address)", +"b0a3a766": "sushi_eth_dai_lp()", "b0a54a76": "TN()", "b0a5a57a": "createEmergencyFundReleaseProposal()", "b0a5c979": "CheckAmbientHumdtyException(bytes32,uint32)", +"b0a5df9a": "getTotalValueByStakeId(address,uint40)", "b0a66a84": "creator(bytes)", +"b0a677d5": "createMarket(uint32,uint32)", "b0a6a5ab": "IoTonToken(uint256,string,string)", +"b0a6aaa4": "withdrawAllFeesByTokens(address[],address)", +"b0a6ae77": "boolVotedAgainst(uint256,address)", "b0a6d947": "unfreeze(address[])", "b0a77ef7": "WithdrawToSponsor(address,uint256)", +"b0a79459": "getBalance(uint256,address)", +"b0a8043e": "approve_187(address,uint256)", +"b0a842a8": "deployShutdown(address,address,uint256)", "b0a8489e": "btycBalanceOf(address)", "b0a84974": "payedBalancesOf(address,uint256)", "b0a8be37": "RegCost()", +"b0a8faaa": "setSilverDollarAddress(address)", "b0a91659": "FixProfit()", "b0a94ef7": "Divest(uint256)", +"b0a97729": "ref_bonuses_percent(uint256)", +"b0a99913": "isBridger(address)", "b0a9b0ff": "createTeam(string,string,uint256,uint256,address,uint256)", "b0a9c7f4": "checkGameResult(address)", +"b0a9d1a1": "genCcash(uint256)", "b0aa09f2": "mainSaleStartTime()", +"b0aaa915": "stakeHoldersWeight(address)", "b0aab296": "getNextNode(bytes)", "b0aae3fa": "passGateway()", +"b0aaedd5": "Items(address,uint256)", +"b0ab4dba": "getOutboxMessageStatus(bytes32)", "b0abbc7b": "setData_23(string)", "b0ac0ef2": "currentActiveGameID()", +"b0ac16a6": "_perSpinFee()", +"b0ac19a0": "computeAddress2(uint256)", +"b0ac3ee3": "lowestAskEntryIdx(uint256)", "b0ac4c8c": "getLastData()", +"b0ac5f2f": "openInterestNotionalMap(address)", "b0acc531": "reserveWave()", "b0acd745": "EventCreateStatic(address,uint128,uint256,uint256)", "b0acde14": "withdrawInternal(address,uint256,address[],uint256[])", "b0ad38c4": "buildCity(string,uint256[2],uint256[2])", "b0ad3a5f": "not(bool)", +"b0ad9d00": "mmVault()", "b0ae1d64": "getpurchaserAtIndex(uint256)", +"b0ae83c5": "presaleOne()", "b0aed621": "addJugada(uint256,string,uint256,uint256)", +"b0af39d5": "dividendWithReferral(address)", "b0af768b": "setTokenBurner(address)", +"b0afb064": "CancelOfferForCity(uint256)", +"b0afb7dd": "transferOnlyGovernance(address,uint256,address)", +"b0afb95b": "criteria()", +"b0b002d8": "worthiness(address)", "b0b02c60": "setUpdateOperator(uint256,address)", +"b0b16c65": "currentBuilding()", "b0b185c7": "allowedForwards(uint32)", "b0b189ca": "sendToInvestor(address,uint256)", +"b0b19072": "userFiles(address)", +"b0b22c2c": "addToken(string,address)", "b0b24e2c": "ERC()", +"b0b268f8": "compoundToMaker(uint256,uint256,uint256,bool)", +"b0b27583": "ShardsAdded(address,uint32)", "b0b2b499": "test_token_fall_back()", "b0b315e7": "calculateMaxContributionUsd()", "b0b3c9a6": "ETHERAFFLE()", +"b0b48b58": "flshBinaryBal(address,uint256)", "b0b503f9": "MonyaToken()", "b0b53a1f": "WSKYToken()", +"b0b56dfa": "updateEmergencyUnlock(address,bool)", +"b0b58c2d": "refundFreezeBlocks()", +"b0b5afc6": "resolve(uint256,bytes)", "b0b60b06": "ZXGToken()", +"b0b62f5a": "unpaused()", +"b0b65ddb": "set(uint256,uint256,uint8,bool)", +"b0b6cc1a": "modules(bytes32)", "b0b773c4": "ESSgenesis()", +"b0b79b55": "getCrypozContractAddress()", +"b0b7d30c": "openBidTokenAuthority()", +"b0b82a5b": "nAddrHash()", "b0b8579b": "hop()", +"b0b8a8d6": "votes(uint32)", "b0b92263": "setTotalTokens(uint256)", +"b0b941c0": "RISK_FACTOR()", +"b0b94cff": "OrganizationSignup(address)", +"b0b95fa2": "lastUser()", "b0b9603b": "saleTokens()", "b0b99c7d": "createPotato(uint256,uint256,uint256,uint256,address)", +"b0b9d87f": "latestMap(uint256)", +"b0ba2b56": "linearRewards(address)", +"b0ba3c5a": "burn(string,bytes,uint256)", +"b0ba4da0": "executeRecovery(address,address)", "b0ba621a": "SoapBox()", "b0bb3759": "XPAAssets(uint256)", +"b0bb7034": "managerCandidates(address)", +"b0bb7ebd": "returnStaticContractAddress()", "b0bc4d67": "preserveHolders(address,address,uint256)", "b0bcc610": "scheduleTransaction(address)", "b0bcd8f3": "preCrowdsaleOwner()", +"b0bcf42a": "sushiPerBlock()", +"b0bd4111": "getCurrentBalance(bytes32,bytes32)", "b0bd5888": "transferredTokens()", "b0bdacc6": "setCoinAddress(address)", +"b0bdafdb": "canceledHashesOfMaker(address,uint256,uint256)", +"b0be980d": "sendTest(uint256)", +"b0be9a34": "approve_129(address,uint256)", +"b0be9c55": "MarketOrderCreated(uint256)", +"b0bea725": "callMe()", "b0bebdf5": "endICOp1()", +"b0bebf7e": "makePeme(string)", "b0bed0ba": "selfBalance()", "b0bed1e9": "SMSCoin()", "b0bf092a": "getSoftCapInWeis()", +"b0bf4e97": "emitTwoStrings()", "b0bfe169": "changeAirdropLimit(uint256)", "b0c0552f": "AuctionCreated(address,uint256,uint256,uint256,uint256)", +"b0c0bec4": "getan6hrtgcient()", "b0c13bfb": "addDestroyer(address)", +"b0c15278": "registerUserFull(address,uint256,uint256[])", "b0c1adac": "setPrice(uint256,bool,uint256)", "b0c20e4a": "setRateProvider(address)", +"b0c26ecf": "getTokensLength()", "b0c2a163": "currentDifficultyWei()", +"b0c2cb96": "exchangeSynthsForSNXAtRate(uint256,uint256)", +"b0c2e027": "swapFromZBUX(uint256)", "b0c2ebfd": "NathalieToken(uint256,string,uint8,string)", +"b0c2fc8d": "G_LIQUIDITY_FEE()", "b0c2ff43": "tokenAccountAddress()", "b0c35c05": "autoBirthFee()", +"b0c3654a": "onReinvestmentProxy(address,address,uint256)", "b0c39bbd": "setFreezeIn(address[],bool)", "b0c42691": "frozenWallet2y()", +"b0c4297c": "safeTransferBatch(address,address,uint256,uint256)", "b0c4b3bb": "dateEco()", "b0c5134e": "forwardEther()", "b0c577c1": "phase3TokenPriceInEth()", +"b0c6824f": "_preSoldierId()", "b0c6d7df": "clearMonsterReturnBalance(uint64)", +"b0c7044b": "LpOfPid(address)", +"b0c706f0": "setMinimumSystemDeposit(uint256)", "b0c73bc6": "getInvitor(address)", "b0c74430": "saysomething()", +"b0c78e77": "initiate(address,uint256)", +"b0c7c04c": "getCoefficient()", "b0c7f709": "kingAutomaticCollectFee()", +"b0c7fede": "getDownlines(uint256)", "b0c80972": "setBalance(uint256,bool)", +"b0c89fa9": "updateMooniswapPoolAddress(address)", "b0c8d2dc": "updateMeta(uint256,uint256,string)", +"b0c8dcc9": "getNextOpenRewardTime(uint8[],uint256)", "b0c8f9dc": "add(string)", +"b0c93dd2": "_tokenPool()", "b0c95b1d": "SetAccess(address,uint256)", +"b0c9b3f6": "INDICIES_PARAM_LOC()", +"b0c9b458": "artPurchasersGet()", "b0c9fec7": "ButtonClicked(address)", +"b0ca0689": "getSafety(address)", +"b0ca22d9": "updateMinimumFreeze(uint256)", "b0ca2e62": "VEC()", +"b0ca6ef2": "compareToIgnoreCaseTest()", +"b0cabaf7": "ADRPerBlock()", "b0cae18a": "WDNA()", "b0cb3299": "checkIfOnUncle(uint256,uint256)", +"b0cb4b0a": "mooniswapDeployer()", "b0cbaab2": "exp(int128)", +"b0cbbb83": "govTenure()", "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)", @@ -101197,32 +185182,57 @@ "b0ccbf8c": "rageQuit()", "b0cccbc3": "setFreezeOracle(bool)", "b0cccc84": "validResult()", +"b0cd0ba9": "setParams(address,int256,int256,uint256,uint256,address,address,address,address,uint256,uint256,uint256,uint256)", +"b0cddfe6": "setStableCoinSystem(bool)", +"b0ce3003": "allowedTokenNames(uint256)", "b0ce8668": "IJC()", +"b0ce893f": "mintTeamAndAdvisorsYear1Part1(uint256)", "b0cee590": "TwiceAWeekCoin(uint256,string,uint8,string)", +"b0cf09fc": "tweets()", "b0cf0dcb": "revokeTokenGrant(address,address,uint256)", "b0cf35f5": "getNewFallbackDeposit()", +"b0cf77d3": "releaseTokens(address,address[])", +"b0d04c7a": "totalValidSupply()", "b0d08d3d": "setTxCount(address,uint256)", "b0d12477": "listMAS()", "b0d138e8": "bounty_percent()", "b0d13a25": "retrieveEther(uint256)", +"b0d179a5": "setAddrs(address)", "b0d1a26c": "advisorTimeLock()", +"b0d1dc42": "projectPartUnlockedLPTimes()", +"b0d23427": "Delegate(address,uint256)", +"b0d25fa1": "setLpStaking(address)", "b0d26478": "setIdentity(uint256,address,address,string)", "b0d2b936": "_isTxExistWithArgs(bytes32,uint256)", +"b0d2d011": "minimumStakingAmount()", +"b0d34a1e": "setDelegateContract(address)", "b0d3a396": "ADDITIONAL_BONUS_NUM()", +"b0d3acc6": "HOUR_SALE_CONTRACT()", +"b0d3c431": "tokenSaleISLA(address)", "b0d3ef3d": "isOpenFor(address)", "b0d4ff96": "getMadeTX(uint256)", +"b0d51647": "enough(bytes32)", "b0d54bcf": "setTradingFee(uint256)", +"b0d55faa": "BOUNTY_PROGRAM()", "b0d56da6": "ElephantToken(uint256,string,string)", +"b0d5f172": "requestAll()", "b0d60c2e": "rawTransferFrom(address,address,bytes32)", "b0d65d29": "partialWithdrawal(uint256)", "b0d66291": "migratebyowner(address)", +"b0d6e51c": "proofOfOwnership()", +"b0d73d4e": "FEE_PROVIDER_REVISION()", +"b0d76a10": "poolsInRange(uint256,uint256)", "b0d79497": "allowOrRestrictMigrations()", "b0d7fd9a": "NewListing(uint256,uint256)", +"b0d80346": "resetStoreLogic(address)", "b0d81f94": "lockTokensForFs(address,address)", +"b0d8769e": "destroyTicket(address)", "b0d8a83c": "Osmium()", "b0d8b51f": "getOwnedTokenIds()", +"b0d8e181": "getNominalICR(address)", "b0d997d9": "bitGuildContract()", "b0d9fef9": "udfVUPDestination()", +"b0dbc976": "GetHeroStockPrice(uint16)", "b0dbce71": "setStreamityContractAddress(address)", "b0dc1666": "DacToken()", "b0dc63eb": "startWineryProductByRegulator(string,string,string,string,int256)", @@ -101230,34 +185240,67 @@ "b0dd15a6": "paint_pixel(uint256,bytes3,uint256)", "b0dd2858": "TokenBuyPresale(address,uint256,uint256,string)", "b0dd478a": "setCountdown(uint256[5])", +"b0dd5b62": "makeReserveToVault()", "b0ddaddd": "shareBalance(address,uint256)", "b0de0c40": "getBalancesList(uint8)", "b0de1cb7": "publish(uint64,bytes,uint64)", +"b0de2046": "changeCertificateAddress(bytes32,address)", +"b0de262e": "bake()", +"b0de5e29": "_stakingContract()", "b0ded9ce": "fechAllCandidates()", +"b0df1cc7": "mintToPayable(address)", "b0df5f81": "_computeWings(uint256,uint256,uint256)", +"b0df807d": "setClosePositionMaxFee(uint16)", "b0df9e53": "getCards()", +"b0dfb758": "perDiemRewardMultiplier()", "b0e0346e": "UNLB()", +"b0e0405c": "setMaxWhitelistWithdraw(uint256)", "b0e09ac0": "test_validShouldThrow()", +"b0e0a660": "PunkNoLongerForSale(uint256)", +"b0e0c681": "distributionAmount()", +"b0e0d136": "MAX_BOUND_TOKENS()", "b0e0ef09": "withdrawTokensFrom(address,address,address,uint256)", "b0e12715": "makeTrade(address,address,uint256,uint256,uint256)", +"b0e15934": "isStake_single(uint256)", +"b0e165de": "setNewName(uint256,string)", "b0e16cce": "removedotchtooffer(uint256,uint256)", "b0e1aaa5": "getNumPresaleTokensBought(address,address)", +"b0e1c1e1": "closeCampaign(uint256)", "b0e1f553": "whiteListingContract()", +"b0e21e8a": "protocolFee()", +"b0e22297": "sakeFeeAddress()", "b0e24364": "CaerusToken(address,uint256)", +"b0e353bd": "signature(string)", "b0e37f79": "isChecker(address)", +"b0e3a522": "createTestToken()", +"b0e4556f": "FRAX()", "b0e4925c": "BCIA()", "b0e547e8": "referrerLevel2Percent()", "b0e572c8": "getStrategy(bytes15)", "b0e5aa82": "_rememberBlockHash(uint256)", "b0e5aa89": "bonusStage2SecondDay()", +"b0e5e4fd": "approve_687(address,uint256)", +"b0e605b7": "minedCheckpoint()", "b0e657a7": "firstMintRound0(uint256)", +"b0e65d07": "operatorTransfer(address,uint256)", "b0e667a9": "bidSpaceship(uint256)", +"b0e66987": "OwnerChange(address)", +"b0e71766": "changeCapper(address)", "b0e757c5": "GameXChange()", "b0e849fe": "auctusWhiteListAddress()", +"b0e852f8": "isRewardContract(address)", +"b0e885c1": "multiplierBasisPoints()", +"b0e8b8a6": "requestTimelockChange(uint64)", "b0e8cba8": "toggleContractAccessForEverybody()", +"b0e97872": "juniorToken()", "b0e9a1ef": "setHodlerTime(uint256)", "b0ea1e2e": "START_TS()", +"b0ea3e7f": "SendGiftMultiAddress(address[],uint256[])", +"b0ea4fb5": "getValuePools()", +"b0ea6a1b": "crack(uint256)", +"b0ea7b6a": "changeBlacklistedTxFee(uint256)", "b0ea8d8f": "getRedeemableTokensStaker(bytes32,address)", +"b0eb1093": "startMiningTime()", "b0eb5162": "closeGeneralSale()", "b0ebb261": "withdrawGift()", "b0ebefbc": "distributeFoundersRewards(address[],uint256[],uint256[])", @@ -101266,63 +185309,117 @@ "b0ecca8f": "LookAtLastTimePerZone(uint256)", "b0ed439e": "getMaxHolder()", "b0ed656c": "claim(bytes32,bytes32,bytes32)", +"b0ed8bec": "verify(uint128,int128)", "b0ed9774": "changeTakeoutWallet(address)", +"b0ed9d8c": "getAltMaxAvailable(address)", "b0ee60a3": "_addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"b0eee8db": "WIZARD_MIN_TYPE()", "b0eeefea": "YANKEES(address)", "b0eefabe": "setArbitrator(address)", +"b0efb8a3": "unlockLvl()", "b0f07e44": "registerData()", "b0f0c96a": "hello(uint256)", "b0f11234": "getMessageCommunicationHash(address,uint256)", +"b0f1d3f1": "receiptCountInTree()", "b0f239e9": "totalCheque()", "b0f23d80": "SetCountryCode(uint16,string)", +"b0f26859": "addMaticPredicateProxy(address)", +"b0f28414": "_conjureWizard(uint256,address,uint8,uint256)", "b0f2b72a": "set_value(uint256)", "b0f32e55": "ContractFactory(uint8,uint8)", +"b0f3f47f": "events(bytes16,uint256)", +"b0f42b14": "changeBountySettings(uint256[],bytes32[],uint256,uint256,address,address)", "b0f42dc4": "isPure(uint256,uint256)", +"b0f4357e": "cardsForSale(uint256)", "b0f471dd": "_partFromProvider(uint256,address)", +"b0f479a1": "getRouter()", +"b0f482be": "shootSemiRandom()", "b0f5ae72": "exchangeEtherOnTokens(address)", +"b0f5f870": "getPricePerFullShareCheckpoint()", +"b0f640d2": "investorCaps(address)", "b0f69523": "rentOut(address,uint256,uint256)", "b0f72665": "multiSigDev(bytes32)", +"b0f7ccd3": "TWAP1Hour(address)", "b0f7d744": "getBoughtTime(address)", "b0f85a10": "airEndtime()", +"b0f899dd": "CONTRACT_APOSTLE_ITEM_BAR()", +"b0f8ea7b": "openBoxes(uint256,uint256,uint256[],uint256[],bytes32,uint8,bytes32,bytes32)", +"b0f8f221": "get3Teams()", +"b0f8f7b5": "allFtokenExchangeUnits(address)", "b0f94b16": "batchFishAquarium(uint256[],address)", "b0f9ba74": "destroyEternalStorage()", "b0f9f315": "accountClaimedReward()", "b0fa4926": "buyLicenseForETH()", "b0fa5032": "DDToken()", "b0fb3095": "transferDividendBalance(address,uint256)", +"b0fb4953": "userRewardPerToken1Paid(address)", +"b0fbf5fb": "investorUnlockLP()", +"b0fc13e9": "WordSetChanged()", +"b0fc29e6": "setLock(address,uint256)", "b0fc2c77": "peaceOf(uint256)", "b0fc2d72": "grantPurchasedTokens(address)", +"b0fc69ce": "eth_usd_consumer_address()", "b0fc9bdf": "lilitoken()", "b0fd035b": "safeWithdraw(uint256)", +"b0fd5963": "totalBalancePendingMigration(address)", "b0fd935b": "registerCertificationDb(address)", +"b0fdbb8a": "reEntrancyMutex()", +"b0fe186b": "deposit_holders(uint256)", +"b0ff3542": "_setOperator(address)", "b0ff4210": "BAFC()", +"b0ffff23": "transferApprovedNft(address,address,address,address,uint256,bytes,bool)", "b1000f23": "_airdrop()", +"b1006ac4": "setSakeFeeAddress(address)", +"b10090b8": "importFeePeriod(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "b100ad20": "incremCounter()", +"b10123ee": "tradeTokenForTokenUsingReserves(address,address,uint256,uint256,uint256,bool)", +"b102b8cb": "investorsComissionPercent(uint256)", "b102bfbe": "getOwner(bytes)", "b102f52b": "enterLottery(uint32)", +"b1035aa4": "setAaveAddress(address)", +"b1039e28": "getContractExpiration()", "b103bb58": "setMaximalInvestment(uint256)", "b103c1dd": "claimCofounditTokens()", +"b103cccf": "GetRecordIdFromRecordIndexAndDepositorRecord(uint256,address)", "b103ef5b": "buyfp(uint256,uint256)", +"b1042401": "getBuyTime(address)", "b10477c9": "getAntsSinceLastCollect(address)", +"b104872e": "MinusFreezingTime(uint256,uint256)", "b104c509": "earlyInvestorSupply()", +"b104e006": "intervalDays(uint256)", "b1050da5": "newProposal(address,uint256,string,bytes)", "b105126f": "initLottery(uint256,uint256,uint256,int256)", "b1057e9c": "sell2(address)", "b105be51": "BoonyToken()", +"b105c24d": "lastTopInvestorsWinningAmount(uint256)", "b105c904": "intrepidVouchersMinted()", +"b105e39f": "getKeepers()", "b1063c19": "setMiBoodleVault(address)", +"b106532b": "anubisPerBlock()", +"b10688bb": "uniqueTokens(address)", +"b106cc2c": "MiningwarContract()", "b106ef69": "Tutoreum()", +"b1077131": "aCHICAGOEBlock()", "b1077666": "hitWin(uint256)", "b107baa1": "minimunBTCToInvest()", "b107e815": "bet(uint32,uint8[4])", "b107ea12": "setDefaultAQL(uint256)", "b1084ce2": "currentNorsefire()", "b108501f": "WINNER()", +"b108a60e": "getPeakHourTaxOfBlock(uint256)", +"b108cbcd": "Revocation(address,address,address,uint256)", +"b108cd37": "getPoolsWithLimit(address,address,uint256,uint256)", +"b108fb4f": "setVirginLPAddress(address)", "b10908ff": "ACO_Token()", "b1091e1b": "Ez()", +"b1097a2c": "setParams(address,uint256)", +"b10985e6": "priceCalcLoop(int256[],uint256,uint256,address)", "b1099347": "buysTokens()", "b109bc6d": "getUpVoteCount(bytes12,bytes12)", "b109e894": "PRICE_VARIABLE()", +"b10a03c2": "batchSweepETH(bytes32[])", +"b10ac222": "cakeToTokenAPath(uint256)", +"b10c000c": "transferFromPitBoss(address,uint256)", "b10c7544": "getCmd()", "b10c7dc4": "revokeMembership(uint8)", "b10cf224": "userUnlockToken(uint256)", @@ -101330,57 +185427,107 @@ "b10d5a52": "setTechnicalPercent(uint256)", "b10d6060": "StorageToken(address,address,address[],uint256,string,string,uint8)", "b10d6b41": "getDocument(bytes32)", +"b10e1dbc": "set_new_goodwill(uint16)", "b10e4172": "remove(bytes32,bytes32)", +"b10e5ca8": "DepositRewardsPool(uint256)", "b10eabe8": "ADDOCoin()", "b10ec8da": "LogPrepareContribution(address,uint256,uint256,uint256)", "b10ed487": "minimumInvest()", "b10f8583": "update(uint256,uint256,bytes32,bytes32)", "b1103200": "poolEthCap()", +"b11092c2": "deposit(address[],address[],uint256[])", "b1110c29": "createTokenUri(uint8,uint8,uint8,uint8)", "b1112507": "bonusDeadlineDefault()", +"b1119b10": "HATCH_THRESHOLD()", +"b111cb84": "addDevice(address)", +"b111dfac": "profitLoss(address)", "b112349e": "get_my_dni()", +"b1127108": "setCollection(uint256,string,string,uint256,uint256)", +"b1128e3e": "init(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b1130207": "takeoutMfs(address,uint256)", "b1135686": "votesIter()", +"b113610f": "genesisMint(string,string,uint256)", "b113d9dc": "tokensale(address)", +"b113e7ce": "previousBalance()", "b11408b7": "free1Of(uint256)", +"b11411b3": "rotstorage()", "b1144c9a": "presaleAllocations(address)", "b114b96c": "left99(uint256)", "b11560c5": "removeFromWhiteList(address[])", +"b11569f5": "ADMIN_ADDR()", +"b115b8b6": "abiEncodeStringLiteral()", "b115d28c": "transferDaxsToken(address,uint256)", +"b115e4df": "DevWallet()", +"b1170825": "DARKv2()", "b1174177": "LogWhitelistRemove(address,uint256)", "b117a3e8": "kingBank()", "b118060e": "stringLength(string)", +"b1185244": "getDragon()", "b1186efb": "decode(bytes,uint256,uint256,uint256,uint256)", "b11873d1": "BOSX()", "b11888d6": "testThrowOnTransferWhenNotCreator()", "b11894c9": "addBadToken(address)", +"b1192e18": "changeFee(uint256,uint256,uint256,uint256)", "b1194648": "setSaleWeiLimitWithoutKYC(uint256)", +"b119490e": "initialize(string,string,uint256)", "b1194bc4": "setGlobalDelegation(address)", +"b1197a37": "adminTransferFrom(address,address,uint256)", "b1199a87": "resetMeter(address)", +"b119ebfe": "total(uint256)", "b11a19e8": "toString(bytes32)", "b11a1b89": "setCoinContract(address,address)", "b11a2a97": "setEDUPrice(uint256,uint256,uint256)", "b11a41fb": "AfrFballCoinToken()", +"b11a59ad": "serviceMinMineAmountInWei()", +"b11a882f": "ableToClaimReward()", "b11b40a1": "getDna2(uint256)", +"b11bead4": "test2(address)", +"b11c1512": "paperWethLP()", "b11c4fd8": "approveAndCallcode(address,uint256,bytes)", +"b11c5a02": "terminatorsAward(address)", "b11cc099": "winPrize()", "b11ce2db": "addContractAddress(address)", +"b11d7ec1": "setKeyManagerOf(uint256,address)", "b11d8bb8": "revealVote(uint256,uint256,uint256)", "b11dd097": "initEmployee()", "b11e0acb": "supplyAvailable()", "b11e3889": "bulkDepositTo(uint256[])", "b11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", +"b11e3c1a": "IsAdmin(address)", +"b11e93a9": "convertMultiple(address[])", "b11ec3b3": "MENSA1(address)", +"b11eec50": "BOUNTY_WINDOW_SECONDS()", +"b11f139e": "getFundReward(address)", +"b11f780a": "addonsBalanceOf(uint256)", +"b11fd41d": "payoutCutBuffer()", +"b11fd910": "approvedBridge(address)", +"b11fecd9": "standartProcedure(address,address,uint256)", "b1202774": "ico4Max()", +"b120bacd": "toggleAutoLevelUp(uint256)", "b120c16a": "setReputation(address,uint256)", "b120e1ef": "setTokenSaleDistribution(uint256)", +"b120f7db": "setSellHoldersFee(uint256)", +"b121500a": "usersTokenWant()", "b12155a9": "burnTokens2(uint256)", +"b1216630": "_depositNFTs(uint256,address,uint256)", "b121a199": "_transfer(address,address,bytes32)", +"b121acf0": "endCrowdSaleRoundOne()", +"b121f2ac": "getLevel(address,uint256)", "b122a0ef": "joinCommunity(uint256)", +"b1231b34": "Inflate(uint256)", "b1233451": "setTerm(uint256,string)", +"b12337ff": "deposit_wETH_beta(uint256)", "b1237eae": "withdrawAmountTo(uint256,address)", +"b123995e": "totalProtectionSeconds()", "b123f68b": "LogAddress(address)", +"b1248df3": "redeemBLT(address)", +"b12540f6": "m_My_Dear_Son(address)", +"b12603ff": "getForwarders()", +"b126167b": "setUsdDeletion(bool)", +"b1265077": "setAuthorisedToken(address,bool,uint8)", "b12673b2": "token10MstepCAP()", "b1267579": "totalTokenRaiseWei()", +"b1268c5c": "maximum_buy_limit()", "b126d0e5": "createAndSellAllAmount(address,address,address,uint256,address,uint256)", "b126dc4d": "blockIndex(uint64,uint64)", "b127221d": "ICO_BONUS()", @@ -101388,66 +185535,129 @@ "b1273db1": "batchSetInvite(address[],uint256[],uint256[])", "b1275f9a": "addPlayer(address)", "b1276a42": "addCurrencyExchangeRate(uint256,uint8)", +"b1277baa": "phase4EndBlockNumber()", +"b127a336": "Set_Price_USDT(uint256)", +"b127b230": "getBCInfoByCardId(uint256)", +"b127c0a5": "removeLiquidity(uint256,address[],uint256[])", "b1283e77": "markets(uint256)", "b1288c11": "bytes32ToString(uint16)", +"b1288e9f": "WhiteListUpdated(address,bool)", "b128ca5c": "adjustCap(uint256,uint256,uint256,uint256)", "b12931a6": "removeByValue(address)", +"b129404f": "whitelistUserGettedEthBack(address)", "b129497c": "john()", +"b12995a3": "getCode(address,bytes)", "b12a8229": "tokenSaleEndTime()", +"b12b5f76": "removeValidPluginContract(bytes32)", "b12b714f": "_add(uint256,address)", +"b12bc7e7": "CancelSaltTooLowError(uint256,uint256)", +"b12c10f7": "unstake(bytes32[])", +"b12c5956": "queryUserEpochAmountAtIndex(address,uint256,uint256)", +"b12d96f7": "createVote(address,uint256)", "b12dca5a": "ergebnis(uint256)", "b12de559": "invalidateOrdersBefore(address,uint256)", "b12dff65": "relaxFundingCap(uint256,uint256)", +"b12e0441": "_dropBirdMarket(address)", "b12e1449": "reserveEscrow()", "b12e3e60": "voltTransfer(address,address,uint256)", "b12e4410": "getTokenAddress(bytes32)", "b12e5f09": "OpsManaged()", "b12e9c41": "SYS_Token()", "b12ed9ef": "FCOIN1122Token(uint256,string,string,uint256)", +"b12f1cd2": "farmGeneratorsLength()", +"b12f4153": "estimateSellValue(uint256)", +"b12f7d3d": "getDmmTokenAddressByDmmTokenId(uint256)", "b12f9eab": "finalizeSet()", "b12fe826": "addMod(uint256,uint256,uint256)", +"b1301b83": "_userInfo()", +"b13101f0": "isFusioning(uint256)", +"b1312b84": "mintTicketPayable(address,uint8,address,uint256)", "b13170d6": "Change_approvePay(address,bool)", +"b131da40": "currentRatio()", +"b131f9cd": "increaseCommitment()", +"b13208c0": "getDepositTime(uint256,address)", "b1321ed7": "payOutPercentage()", +"b13266f4": "PROVAMIO()", "b1330ca9": "startVoting(uint256,string)", +"b13319a4": "helloCallback(uint256,uint256)", +"b1338cc4": "maxEthPurchase()", "b133f39b": "_shuffleParams(uint256,uint256,uint256,uint256)", "b13413b0": "allocateTokensToTeamAndProjects(address,uint256)", "b1343ee9": "paymentsByUserId(uint256)", "b1344271": "slasher()", "b1347e9d": "mintsub()", +"b1351bfd": "coverStatus(uint256)", +"b13542d0": "dssProxy()", "b1356488": "getEndDate()", +"b1357079": "cBalanceOf(address)", "b135bbb0": "nextGameId()", +"b135d9c2": "setHal9kAddress(address)", +"b135ed59": "_setTradingLive()", +"b1365888": "upgradeSingleContract(address,uint256,uint256)", "b1366d5b": "bet(uint256,uint256,address,bytes32)", "b1369e6a": "toFullUnits(uint256)", +"b1370488": "lookupMarketIB(address)", +"b1373929": "gamma()", "b13770af": "determinTID(uint256,uint256)", +"b13785a1": "midPerBlock()", "b13795af": "GDCNumber3()", +"b137cde6": "addEthLiquidityLGETEST1()", +"b137fee9": "type()", +"b13820a7": "outputBalanceOf(address)", "b138251c": "fetchAllResult()", +"b138316c": "sTesla()", +"b138437c": "oneAddress(address)", +"b1386143": "getIncomeList(address)", "b138d500": "presaleAmount()", "b138d838": "getContractEarnings()", "b139275f": "transferto(uint256)", "b139560b": "getCreateMarketEndTimeValue()", +"b1396542": "getSpreadAdjustedPrices(uint256,uint256,uint32)", "b139af17": "startSpaceship()", +"b139beea": "btcNetDiff()", "b139f780": "NRB_Common()", "b13a2e1f": "chargeOwe(bytes32)", +"b13b0847": "setOracle(address,bytes)", +"b13b1273": "liquidateNonCompliant(uint256,address)", "b13b4f2d": "wipe()", +"b13b69ba": "stakeExists(address)", "b13b6a2a": "_decreaseApproval(address,uint256,address)", +"b13bb160": "buy(address,uint256,address,address[],bytes,uint256[],uint256[])", +"b13bb73e": "BEP20MintRequests(uint256)", +"b13bd491": "getAPRs()", "b13bdfb6": "isAtMost(uint256,uint256,string)", +"b13be7c2": "store(address,address)", "b13c7047": "DragonKingTest(address,address,address,address)", +"b13c744b": "candidateList(uint256)", "b13c8fe0": "BILLION_TOKENS()", +"b13cd785": "cachedSynthDebts(bytes32[])", +"b13cdb20": "AAVE_BASIC_PROXY()", "b13d5180": "checkAndCallApprove(address,uint256,bytes)", +"b13d7bf9": "setTimestamps(uint256,uint256,uint256)", +"b13dfe92": "active(address,address,address,address,uint256,uint256,address,uint256,uint256)", +"b13e88f6": "CAP_CONTROLLER_ROLE()", +"b13e9d29": "getNodeTrusted(address)", "b13ef343": "Vesting()", +"b13f5f19": "registerAddress(string,address)", "b13fd2b8": "DividendAvailable(uint256)", "b1401858": "levelOneBonus()", "b1404198": "LogForwarded(address,uint256,bytes)", "b1406a33": "buyNac(address)", +"b1406b79": "setOnlyWhitelistedAddressesAllowed(bool)", "b140bee5": "testFailBuyAfterClose()", "b1418cf4": "payHouse()", "b14201d0": "requestForArtistRegistration(bytes32,bytes32,bytes32)", +"b1428b3a": "DMEX_CONTRACT()", "b1429863": "test_oneFalseAssertNoMessage()", "b1432cc3": "CrowdSale_Change_ReceiveWallet(address)", +"b1434e2e": "RESERVE_OLD()", "b1437e27": "tokenTotal()", "b143c703": "createBarCodeData(bytes32,bytes32,int256,string)", "b143c916": "getTeamPayouts(uint256,uint256)", "b143d6fb": "setRunning()", +"b144213d": "spendMaxPct()", +"b14428c7": "setTokenPrice(string)", +"b14430b5": "RecieveEth(address,uint256)", "b144a4d8": "DistributionSale()", "b144adfb": "balance_of(address)", "b14537b0": "maxContributor()", @@ -101455,18 +185665,27 @@ "b145c013": "checkPayout()", "b146ba8e": "changeQuecoinAddress(address)", "b146bdee": "cancelDigitalContract(string)", +"b1470773": "CompletelyClosed()", "b14762bc": "setAirDropDestination(address)", "b14781fb": "BITBalanceOf(address)", "b14823e1": "logDisputeCrowdsourcerTokensMinted(address,address,uint256)", "b148313e": "partnerSaleTokensPurchased()", "b1483eee": "_TARGET_EPOCH_PER_PEDIOD()", +"b148440f": "accrued(address)", "b14904b4": "BTCET()", "b14959dc": "setbonusDate(uint256)", "b1498e29": "insert(string)", "b149ece0": "joinPool(uint8)", +"b149f675": "setTokenAddresses(address,address,address,address,address,address,address)", "b14a44ac": "_unregisterArtist(address)", +"b14aa1fa": "atBlock(uint256,address)", +"b14abf42": "configWhitelist(uint256,uint256)", +"b14ac608": "canBeBought()", +"b14b0d7d": "setLuckModifier(uint256)", +"b14c63c5": "highestBid(uint256)", "b14cf5e0": "changeManager(address,address)", "b14d703f": "Bitsonalite()", +"b14d94e5": "set_baseReward(int128)", "b14debe4": "getEthPhiRate()", "b14e7bc1": "_isOperatorForPartition(bytes32,address,address)", "b14ec275": "_createHero(uint256,uint256,uint256,uint256,address)", @@ -101475,30 +185694,45 @@ "b14f2a39": "changeTreasury(address)", "b14f6439": "finshCrowdsale()", "b14f8432": "hasValidSubscription(bytes32,address)", +"b150023a": "OwnershipTransferInitiated(address,address)", +"b1503774": "BOT_ROLE()", +"b1504a88": "totalInvestmentAmount()", "b15089b1": "unlockBonusTokens(uint256,uint256,uint256)", +"b1513a13": "tokensRate(uint256)", "b151c0c8": "ModuleRegistrar(address)", +"b151cf75": "getTokensBalData(address,address[])", "b15201b2": "MIN_TIME_EXPLORE()", +"b1520922": "USDP()", "b1523087": "_transfer(address,uint256,address)", "b1527bd9": "CYFM()", "b152f19e": "getFirstSchedulableBlock()", "b152f6cf": "TOKEN_SUPPLY()", "b152fbd1": "lockingRatio()", +"b153545f": "setKeepMIR(uint256)", "b1536051": "_contractFallback(address,address,uint256,bytes)", +"b1540a01": "isDeployerAllowed(address)", "b154224e": "TimeLockMultisig(address,address[],uint256)", "b1542d39": "_createCrab(uint256,uint256,uint256,uint256,bool)", "b1546194": "TimeBoxToken()", +"b1548afc": "delegates(uint256)", "b154dea6": "NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID()", "b154f47c": "dev3Wallet2Pct()", +"b1552158": "emergencyWithdrawTWA()", +"b15573eb": "ChangeDefaultWallet(address,address)", "b1557c2c": "lastContract()", +"b155c4f5": "forceReleaseReserve(bytes32,bool,address)", "b155c7d6": "devTokensIco2()", "b155d434": "FINTIFLUSHKA()", "b15651ff": "emissionPrice()", "b156f79b": "FeeAddr2()", +"b15706ab": "_maxChronos(uint256)", "b1574b38": "toggleActive(string)", "b157528b": "getERC20(address,address,address,uint256)", +"b15762e8": "resourceLPToken2RateAttrId(bytes32,address)", "b157add3": "bonus_()", "b157bfab": "VerEstadoSocio(uint16,uint32)", "b157c5cd": "setJudge(address)", +"b1583aa7": "reject(address,uint256,uint256,string)", "b15868eb": "GetVersions()", "b15897cc": "setfreeze(bool)", "b158a23f": "betOpen(uint256,string,string,string,string,bool)", @@ -101508,58 +185742,95 @@ "b159bcff": "COMPANY_ACCOUNT()", "b159beac": "MINIMUM_QUORUM()", "b159d61b": "addSellerSig(string,string)", +"b15a0a12": "historicalProfit()", +"b15a0d5f": "setUintToZero()", "b15a3647": "trade(uint256,uint256[3],bytes32,bytes32,uint8)", "b15a72d8": "wagerPool13()", "b15aa5b7": "getSignHash(bytes32)", +"b15abece": "phase2time()", "b15addec": "Test1()", "b15b2c29": "GetContractStateEarlyTerminatedByTenantSecDep()", +"b15b37a5": "_latestAnswer()", +"b15be2f5": "renounce()", +"b15ccada": "totalInflated()", "b15d6f35": "requestChangeInsurer(address)", "b15dc523": "minFundInEther()", "b15dcc25": "query(address,bytes2,uint256)", +"b15ea33e": "requestIdToData(bytes32)", +"b15edbe5": "activeSupply(uint256,uint256)", "b15fbfe6": "getFromAmountBooks(address)", +"b15ff698": "turboMode()", "b16020a0": "STBIToken()", "b160a86b": "setKycHash(bytes32)", "b1610080": "TravelNote()", +"b1610ab3": "withdrawNerd(uint256)", "b1610d7e": "VOTING_PERIOD()", +"b1620616": "plans(uint256)", +"b1621085": "get_stock_fee()", "b16219c6": "feeWithdrawTokenAll()", "b1622818": "softWithdrawRewardFor(address)", +"b1626088": "priceETHUSDT()", "b162a382": "updateName(address,bytes32)", +"b162d5dc": "minInvestAmount()", +"b16396ed": "rentBlocks(address,uint256,uint16[])", "b163cc38": "addBalance()", "b1643e96": "changeFeeEVOT(uint256)", +"b16451ab": "addTotalExecutedPerDay(address,uint256,uint256)", "b1648152": "setBetMinMax(uint256,uint256)", "b1649a2d": "cancelOrder(address,address,address,address,bytes32)", +"b164e36b": "rentedFor()", "b1652b2f": "playerRollDice(uint256,address)", "b16562fe": "fipsRegister(address,bytes)", +"b1656ba3": "updateProjectScript(uint256,uint256,string)", "b165a332": "getPercentageBonusForIco(uint256)", +"b165af5b": "SaleUpdated(address,uint256,uint256,uint256)", +"b165c49f": "lastTxTime()", "b1662d58": "setModule(address,bool)", "b16661bf": "joinAgreement(bytes,uint8,bytes32,bytes32)", "b166b55a": "LogRemainingHalvingSubsidy(uint256,uint256)", "b166c1ba": "sendProfit(address,uint256)", +"b16704d1": "stcdr2stc_Ratio()", +"b16741e3": "withdrawTitan(uint256)", "b167c34e": "getTxAtIndex(uint256)", "b167d512": "allowedSince()", "b167fe1b": "getExploreItem(uint256)", +"b1681714": "UNIAPPRemainingForSaleInICO()", +"b1682fb0": "Bleach(uint256,uint128)", +"b16890c1": "getEstimatedETHforToken(uint256,address[])", "b168da8a": "getCustodianName(address)", +"b168dc5b": "getBurnerStatus(address)", +"b169542c": "cage(address)", "b1699e2e": "C(bool)", +"b16a0ce5": "presaletotal()", +"b16a4572": "FrozenFunds(address,uint256,uint256)", "b16a4a52": "TokensUnfrozen()", "b16a867c": "summary()", "b16ab3a3": "emergency_token_withdraw(address,address)", +"b16ab807": "topUpAave_unstake(uint256,uint256)", +"b16aee47": "fundCurrentRound(uint8)", "b16afaf6": "OChain()", "b16b1e28": "getAddressField2()", "b16b8485": "setExchangeStart(bool)", "b16bd58f": "maxTokenlossValue()", +"b16bde65": "TokenOwnerSet(address,address,string)", "b16c09f0": "clearIssuanceData(address)", "b16c9e59": "flexibleReward()", "b16d0839": "RootsToken()", "b16d0e38": "IBG(string,string,uint8,uint256)", "b16d1538": "nonEthWeiRaised()", "b16d22a0": "StopPaymens()", +"b16d2d58": "setUnbondDuration(uint256)", "b16d2fd1": "winnerTicket()", "b16d8622": "maxICOSupply()", "b16dd130": "baseKernel()", "b16deab2": "CentrallyIssuedToken(address,string,string,uint256,uint256)", +"b16e2862": "RemovedFromPrivateSaleWhitelist(address)", +"b16e9fd4": "changePool(uint256,address)", "b16eaafa": "PetsToken(address)", +"b16eb940": "RoundPayMask(uint256)", "b16f4a3a": "GPaid()", "b1700e61": "trackAddresses(address)", +"b17035b4": "pendingCock(uint256,address)", "b17076b2": "RemoveProofOfOwnership(bytes32)", "b1718455": "NUM_COIN_PER_AXIE()", "b171ae40": "ethSold()", @@ -101568,43 +185839,82 @@ "b17216f5": "mintForwarder(uint256,bytes32,address)", "b17231ac": "sendTokens(uint64,uint256)", "b1723215": "TestPersandToken()", +"b1724b46": "MAX_DURATION()", +"b1730ab9": "calculateLoss(uint256,uint256,uint256,bytes32,bool)", "b17346fd": "finalizeSeedSale()", +"b173d70d": "OnDeposit(address,address,uint256,uint256,uint256)", +"b1746b86": "burnGasToken(uint256)", "b174734c": "pendingOwner1()", +"b174b393": "getTLRTotalBalance(address)", "b175a0d2": "BONUS_TIER_3_LIMIT()", +"b175afa1": "KYBER_WRAPPER()", "b17607e9": "costoken()", +"b1764071": "setCirculatingSupply(uint256)", "b1766617": "ganTokenNoLongerForSale(uint256)", +"b17681bc": "vaultWithdrawRewards()", "b176a0b4": "RabbitArena(address)", +"b1770991": "authorizeUsers(address[])", +"b1770b37": "bondDetails(uint256)", +"b1773c41": "buyPower()", +"b177a7ae": "distribute(address[],uint256[],address)", "b1782d18": "tgrNumber()", +"b178366a": "initializedAt(uint256)", +"b178d768": "changeBounty(address,uint256,uint256,address[],address[],string,uint256)", +"b178e518": "newCertificate(address,string,string)", "b17922f6": "onlyRoles(address,uint16)", "b179882d": "RESERVED_PRESALE_CAP()", +"b179b2c4": "showBytes()", "b179f4d8": "G5()", +"b179f7d9": "epochMerkleRoots(uint256)", +"b179fe6d": "authereumEnsResolver()", +"b17a3fe8": "controllerUserId()", "b17a56f7": "isTrustedLink(address,address)", "b17a98b6": "withdrawAllToWithdrawalAddress()", "b17a9e11": "confirmCustomer(uint256)", "b17aa196": "_generateNewRandom()", +"b17ac1e1": "MINIMUM_FOR_VOTES_THRESHOLD()", "b17acdcd": "collectFees(uint256)", "b17b94c1": "testSystem()", "b17c3f99": "confirmation(uint256)", "b17c6ab8": "cancelSaleOrder(uint256)", +"b17d0570": "flashMintShortOptionsThenSwap(address,address,uint256,uint256,address[],address)", "b17d5938": "submitPool(address,uint256)", "b17d8646": "EpisodeManager(address,address)", +"b17deb14": "WithdrawJackpot(address,uint256,uint256)", "b17df316": "setMigratedBalance(address,uint256)", +"b17e38a4": "_mintingTokensUnlocked()", "b17e8c4f": "tokensForplutonics()", "b17eb9dc": "supporthill(uint256)", +"b17ef094": "verifyLiquidator(address)", "b17f0c1c": "tokenSaleWeiCap()", "b17f5332": "EnterCode(uint256)", +"b17f573e": "latestCampaignScheduled()", "b17fc36d": "setSoftCapDeadline(uint256)", +"b17fe5cf": "addressAPData()", "b18019bd": "_executeVote(uint256)", +"b181033a": "xETHAddress()", "b1816f60": "TEMTicket(address,uint256,uint256)", +"b1818ab7": "TKPUserRegistered(address)", "b181954d": "addAttribute(string,bool,bytes32,string,string)", "b18196f4": "GenexiToken()", "b181a8fc": "resetContract()", "b181d3d5": "GMF()", +"b18211d6": "clearVersion()", +"b182239e": "dividendsAccumulated(address)", +"b1824a51": "contributorExists(address)", "b1826ee7": "getLevelUpFeeByLevel(uint256)", +"b1827b81": "_createWizard(uint256,address,uint88,uint8)", "b1829738": "setContractorsProfitAddress(address)", +"b183e482": "tokenSpenderApproved(address,address)", +"b183ed8c": "depositGHT(uint256)", "b184be81": "drain(address,uint256)", +"b18510d6": "joid()", +"b1852c72": "getJobsInBoardCount(uint256)", +"b18548c5": "invert(int256)", +"b1855c82": "setActiveExchange(uint8)", "b18588fb": "updateGravatarName(string)", "b185a8a4": "ChangedTokens(address,uint256)", +"b1866962": "getResolutions()", "b186eed8": "dealerDay()", "b1871886": "growthReserve()", "b1874b99": "INVESTMENT_USER1()", @@ -101613,155 +185923,296 @@ "b187bd26": "isPaused()", "b1881225": "KEYS(uint256,string,uint8,string)", "b188c70d": "feeMode()", +"b188de71": "tokenWant()", "b1895823": "mintMultiToken(address[],uint256[],uint256)", "b189ad2a": "testErrorUnauthorizedAfterTransfer()", +"b189c352": "changeSPS(address)", "b189fd4c": "hash(uint256)", "b18a02a4": "getPlayers(uint8)", +"b18a2409": "twapMaxTradeSize()", "b18a714e": "getReservedBalance(address)", "b18a78e3": "currentBetAmount()", "b18af4e3": "addProduct(bytes32,uint256,string,string,string)", +"b18b5e7a": "viewEnableStake()", +"b18b78dd": "getOracleAddress()", "b18bca4d": "countAbstentions()", "b18c6847": "manualUpdateBalances()", "b18d0c80": "getImageWidth(uint256)", "b18de618": "EndQuestion()", "b18e0ab8": "FooWallet(address[],uint256)", "b18e4f5f": "appendKeyValue(string,string)", +"b18e5941": "getFirstClaimIndexToStartVotingAfterEP()", +"b18e83f9": "fdv2User()", +"b18e9151": "ThresholdChanged(address,uint256,uint256)", "b18ef18c": "GlobalChain()", "b18efff3": "GenesisCatsAdded(bytes5[16])", +"b18f0de2": "commitment(address)", "b18f1943": "ownersLength()", +"b18f5c5c": "testTransferTrxSelf(uint256)", +"b18fc167": "setSalesPerson(address)", +"b18fcfdf": "getBalanceTrieKey(address)", +"b1901b62": "or(uint256)", +"b1904c2a": "UnitsSell(address,uint256)", "b1905727": "getPermissionManager(address,bytes32)", "b19068c7": "minimumWager()", "b19129b1": "addCustomertoBL(address,address)", "b19183f2": "HodlReleased(bool)", "b191f79d": "isJobStart(uint256)", "b19208f3": "getPreIcoFunds()", +"b19210b0": "getAmountIn(uint256,uint256,uint256,uint32,uint32,uint32)", +"b19260c5": "nextPot()", +"b1928020": "so_necessary()", "b192da2d": "burnt()", +"b19337a4": "setConverter(address)", "b1933a0b": "getAllSharedAccounts(bytes32)", "b1934151": "tokenScaleFactor()", "b1936c24": "presaleOngoing()", +"b1940058": "converterFeedScalingFactor()", "b194073a": "getUmkaAddress(address)", +"b19414d8": "PoolBackedAmountUpdate(uint256)", +"b19425af": "SetLockValue(address,uint256,string)", +"b1949b99": "setAllowWithdrawInEther(bool)", "b194c73a": "EpinToken(address,address)", +"b194f196": "getRewardsAvailableAt()", +"b195454f": "divPoolRecords_(uint256)", +"b1954e95": "countRecommend(uint256,uint256,uint256)", +"b19582d2": "maxBlock()", +"b19660aa": "getCodeHashCreate()", "b196aabb": "maximumBaseContribution()", "b196f378": "weiLiquid()", "b1972567": "lockAddresses(address)", "b1976a02": "Get()", +"b1979197": "isAppOwner(uint32,address)", "b197997a": "getCurrentYearMinedTokenCap(uint256)", +"b19805af": "setFeeSetter(address)", +"b1987691": "nodeAccReward(address)", "b1987c7d": "NotaryPlatformToken()", "b1989a2b": "calculateFadeoutToPool(uint32,uint256[9])", "b198ef45": "checkVotingForAllowTransfer()", "b1999937": "leapYearsBefore(uint256)", +"b199c383": "RoundEnd(uint256,uint256,address,address,address,uint256,uint256)", +"b199c764": "setInversePricing(bytes32,uint256,uint256,uint256,bool,bool)", +"b199efb5": "tokenStorage()", +"b199fba4": "getPlanetETHShare()", +"b19a2c27": "sponsorDownlines(uint256,uint256)", "b19a4540": "allocatedEth()", "b19a5f62": "placeOpenPurchaseOrder(address)", +"b19a6225": "joinFarmPoolWithValue(uint256)", +"b19a81fd": "currentPriceHistoryIndex()", "b19ab052": "withdrawEtherManually()", +"b19ab076": "devTreasury()", +"b19ab66d": "changeUniswapFactoryAddress(address)", "b19ab945": "maxBurnThreshold()", +"b19ad577": "transferBalance(address,address,address,uint256)", "b19b1550": "FintechnicsPublic()", "b19b2162": "refundFailedAuctionAmount()", "b19bc02e": "Griddeth()", "b19c0f5e": "registerForCompetition(address,address,address,address,address,uint256,uint8,bytes32,bytes32)", +"b19d036c": "price1Current(address)", "b19d134d": "reviseNumAvailable(uint256,uint256)", "b19d4916": "setCompte_2(string)", +"b19d5b8c": "collectBettorTokens(address,uint256)", "b19d632b": "publish(bytes32,uint256)", +"b19d954c": "balanceOfTokenFreezed(address)", +"b19df14f": "getLengthBytes(uint256)", +"b19df54b": "presaleprice()", "b19e288c": "set_pauseCWC(bool)", +"b19e43b4": "migrateByAdmin(bytes)", +"b19f0739": "setUpdateOperator(address,uint256)", "b19f30e2": "changeKYCAddress(address)", +"b19f6bf9": "rxp_min()", +"b19f87ac": "totalUniswapLiquidity()", +"b19f8fdb": "calculateDirects()", "b19faed8": "doSucceedingApprove()", "b19fde5a": "getPresaleAllocation(address)", +"b19feeb5": "OperatorAddressAdded(address)", "b1a00406": "getactendlen()", +"b1a01dae": "_dec(address)", +"b1a03b6b": "userMultiplier(address)", "b1a0570d": "mintBIX(address,uint256,uint256,uint256)", +"b1a060e1": "_getAppsCache(address)", "b1a06ee7": "setPreSaleTokenExchangeRate(uint256)", "b1a08010": "orderTrader(bytes32)", +"b1a0e7ed": "getNoOfErc20s()", "b1a11c92": "trashedTokens()", +"b1a1242d": "getTotalTokenVotingPower(address)", "b1a1318a": "HolderAddress(uint256)", +"b1a1322c": "rejectPayout(string,string)", "b1a1b3bc": "get_chronus()", +"b1a2ac98": "oracleAddNewGame(uint256,uint256)", "b1a2bbd1": "TOTAL_TOKEN_CAP_OF_SALE()", "b1a329d7": "optionPoolTotal()", "b1a34e0d": "addClaim(uint256,uint256,address,bytes,bytes,string)", +"b1a39822": "removeFamer(address)", +"b1a3a5c4": "getTotalValueLockedAggregated(uint256)", "b1a3c6b4": "Balances_of(address)", +"b1a417f4": "deposit(address,address,address,uint96,bytes)", +"b1a4e0dc": "checkBot(address)", +"b1a52934": "writeSummary(string)", "b1a56055": "add_OEM()", +"b1a6043d": "getRoi(uint256,uint256,uint8)", +"b1a6505f": "approvedContract(address)", "b1a6676e": "isBurnActive()", "b1a681c8": "receiveEtherAndData(bytes)", "b1a6afd3": "declaration()", "b1a7c005": "hashDelegatedTransfer(address,uint256,uint256,uint256)", +"b1a8158c": "POT_DRAIN_INCREMENT()", "b1a82e8f": "Jaak()", +"b1a84699": "_taxRateBlack()", +"b1a8ac93": "supportRefundCaseFees()", "b1a8b25a": "returnBalanceToMainAccount()", +"b1a8f6f1": "pendingFish(uint256,address)", "b1a96135": "DMT_TotalSuply()", +"b1a963a7": "addressOfChoice(uint256,address)", "b1a997ac": "poke(address)", "b1a9bd77": "settlementIsRunning()", +"b1a9f809": "RESCUE_ROLE()", "b1a9f8a4": "_toString(bytes32[4],uint256,string)", "b1aa6dfa": "finishInitOwners()", +"b1aaa9f4": "OutcomeAssignment(int256)", "b1aac629": "addSoundEffect(uint256,uint8[])", "b1ab0999": "supportKickoffQuorum()", +"b1ab889b": "mysuint()", +"b1ab9317": "owned(address)", "b1ac478f": "_generateBattleReward(uint256,int32)", "b1ad4c48": "getInvestorDividendsAmount(address)", +"b1ad6282": "sdl(address)", +"b1adb083": "unstake(uint256[],uint256[])", +"b1adb190": "getMaxTokens(address,address,uint256)", "b1adc241": "BalanceDB()", "b1ae9017": "refundsall()", "b1ae9887": "lastTreeId()", +"b1af9233": "kask_usdc_uni_lp()", "b1afe96b": "setMaxInvestorContributionInWei(uint256)", +"b1b12ef6": "publicSell(address,uint256,uint256,uint256,bytes32,bytes32,bytes32)", +"b1b170d9": "getBurntTotal()", +"b1b17425": "TransferByOwner(address,address,uint256)", +"b1b1f900": "checkTokenOwner()", "b1b2aef3": "testInsertProductIntoCart()", +"b1b2dfee": "chartVolume(uint256)", "b1b30533": "contractTokenWithdrawToFreeTokens(address,uint256)", +"b1b30aef": "geticorunningdetails(uint256)", +"b1b367bd": "requestNewProtectedAddress(uint256)", +"b1b38c0f": "INX_DeleteCEx(address)", "b1b3d3f6": "allow()", +"b1b43ae5": "MINIMUM_DELAY()", +"b1b457f7": "poolTreasury()", "b1b5537c": "activateCycle(uint256)", +"b1b57af7": "approve_95(address,uint256)", +"b1b60ff0": "huntersLockAmount(address)", +"b1b62a10": "getBooksByISBN(string)", +"b1b64d20": "getEarnedInterest(uint256)", "b1b68cce": "getListIndices(address)", "b1b68fad": "makeTradable()", "b1b6a6ed": "addPremineAllocation(address,uint256)", "b1b6aecb": "SLMToken()", +"b1b71afa": "burnFactor()", "b1b79120": "setFightFactor(uint8)", "b1b7c88f": "getPreSaleBonusRate(uint256)", "b1b82922": "_getProviderRateHistory(uint256,uint256,uint8)", +"b1b8ed3f": "approveERC()", "b1b96fdf": "giveTokens(address[],uint256)", +"b1b9d963": "contractAddresses(uint8)", "b1b9e78d": "acceptOffer(address,uint256)", +"b1ba19ef": "showDrugMess(string)", +"b1ba1ce2": "popupServiceOffering(bytes32,uint8,string)", "b1ba6ad7": "privateSaleAddress()", +"b1ba9620": "getVaultInfo(uint256)", +"b1baba0c": "topBase(address)", +"b1baf4de": "getPeriodReward()", "b1bb1a60": "serviceGroupChange(address,address,uint8)", "b1bb4d35": "proxyMint(uint256,bytes32)", "b1bb5855": "maxTicket()", "b1bb5fde": "runningDebt()", +"b1bb79b1": "updateQuorumVotesInWei(uint256)", "b1bb7e0f": "verificationPeriod()", "b1bbc6f5": "onlyBouncerSetGasRefund(bool)", +"b1bbcc8b": "BOTwithdraw()", "b1bbd453": "winnerWithdraw(uint256)", +"b1bbd59e": "_whiteListDapp(address)", +"b1bc3105": "myVotingPower(address)", "b1bcc1b7": "depositOrder()", "b1bd7683": "maxAvailableForSale()", "b1bd7b80": "transEther()", +"b1be3eec": "set_denuncia(string)", "b1be53e9": "getCancel(bytes32)", +"b1be82f1": "setNewInterestModel(address)", "b1beb3c0": "NonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2],uint256)", +"b1bedda3": "getLastCheckIn()", +"b1bee6dc": "settleUnchallengedLiquidation(address,uint256)", +"b1befa99": "AinpMix(string[])", "b1bf0510": "getJobsBoard(uint256)", +"b1bf7d2f": "getAddressRating(string)", +"b1bf9a22": "getSub(uint256)", +"b1c0193f": "LogRecharge(address,uint256)", +"b1c02678": "getEnabledAssets(address)", +"b1c09b2a": "totalBuy()", "b1c0e063": "cancel(address[3],uint256[4])", "b1c0f2df": "maxWithWhitelist()", "b1c16a2b": "HARD_CAP_TOKENS()", "b1c19c4d": "LetItPlayTokenPromo()", +"b1c1e727": "playerETHWagered(address)", +"b1c1feb7": "increaseUnlockAmount(address,uint256)", "b1c23704": "myMethod3(string)", "b1c23ce6": "saleContributions()", "b1c25586": "lockTokens(address,uint256)", +"b1c266c7": "DefaultOperatorAdded(address)", +"b1c2bec1": "getPoolPayout(address,uint40)", "b1c30210": "setValidationData(uint16,uint16,uint8,uint8,uint8,uint8,uint16)", "b1c32b2b": "updateAngelLock(uint64,bool)", +"b1c37813": "TransactionsWithBurnMode()", "b1c3c97e": "increaseTotalWinningStake(uint256)", "b1c4b70d": "confirmLawfulness(bool,bytes32)", +"b1c5a3fe": "NewDeposit(address,uint256,string)", +"b1c5b7a1": "mint168Card(uint256)", +"b1c5f427": "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)", "b1c5f992": "setAffiliateRate(uint256)", "b1c62e8a": "createProductionUnit4()", +"b1c631dc": "addPool(bool,string,uint256,uint256)", "b1c6517a": "LookAtNumberOfPlayers()", +"b1c6c47e": "infiniteApproveStakingPool()", +"b1c6c88c": "PurchaseSuccess(address,uint256,uint256,uint256,uint256)", "b1c6f883": "recordCreate(address,uint256,int256,bool)", "b1c73525": "getKeccak256(uint256)", +"b1c7d36f": "stakingPoolShareFee()", "b1c8ac52": "minEthToContribute()", +"b1c8ffd1": "characters(address,uint256)", "b1c90f6f": "ClaimingTimeLimit()", "b1c9cc6c": "getSBounty()", "b1c9fe6e": "phase()", +"b1ca2106": "getExperience(uint256)", +"b1ca337b": "twapOns()", "b1ca3b3a": "_icoTokens()", +"b1cad5e3": "house(address)", "b1cb0db3": "expires()", "b1cb267b": "getE()", "b1cb4217": "betContractUP()", "b1cb43bf": "tokenToExchangeSwapInput(uint256,uint256,uint256,uint256,address)", "b1cb574b": "setEarlyParticipantWhitelistMultiple(address[],bool[],uint256[],uint256[])", "b1cb9425": "private_kill()", +"b1cbc5a2": "basePercentage()", +"b1cbf3ad": "buoy()", +"b1cc1420": "ActivatedSale()", "b1cc1d4d": "depositAndBundle(uint256)", "b1cc38d0": "setShortPositionExpired()", "b1cc4348": "placeWager()", "b1cc7c60": "mintInterest(uint256)", +"b1ccb828": "isLiquidityInitialized()", +"b1ccc564": "set_bb_address(address)", +"b1cd06e6": "getBill(uint256)", +"b1cd0fa9": "fromERC1155Id()", "b1cd221a": "redeem(address,uint256,string)", "b1cd79de": "setlockaddress(address,uint256)", "b1cdbe2a": "ELTC()", +"b1cdeba8": "getBalanceContrat()", "b1ce0a9b": "nextPayoutBlock()", +"b1ce149a": "saleRateAdapter()", +"b1ce8eab": "isOrganization(address)", "b1ceb746": "acceptContribution(address,uint256)", "b1cedd89": "PayPerkToken()", "b1cee330": "arrayOfTokensByAddress(address)", "b1cf404b": "sendTokensToOneAddress(address,uint256)", +"b1cf63de": "registerReceiversPMINE(address[],uint256[])", "b1d006d6": "extendICO(uint256)", "b1d0073b": "updateMaxNumMC(uint256)", "b1d05422": "SendEmail(string,string)", @@ -101771,32 +186222,57 @@ "b1d11f23": "setVesting(address,uint256,uint256,uint256,uint256,uint256,bool)", "b1d17c98": "distributeTokens(address)", "b1d1a159": "curRefNumber()", +"b1d1e494": "setLiquidateHoldingToken(address)", "b1d1fed9": "multisigDXF()", "b1d2372b": "JumboToken(string,string,uint256,uint256)", +"b1d23f02": "updateMinAmounts(uint256,uint256)", +"b1d24e62": "changeBeneficiaryTo(address)", "b1d27e3f": "setSmallPrice(uint256)", +"b1d36ee1": "totalAmountSwappedInContract(address)", +"b1d39c3f": "setBalancesMapPayable(uint256)", +"b1d3e05e": "getOperatorRequiredNum()", "b1d3ea61": "salesContract()", "b1d45fad": "HoneyBadger(address)", "b1d4e357": "addTokenToFund(address,uint256)", +"b1d50a48": "commit(uint256,uint256,bytes)", "b1d5114c": "Hawk2(uint256,string,string)", "b1d51d31": "pay(uint64,address)", "b1d66003": "getRareItemInfo()", +"b1d67bb1": "_nullcardFactory()", "b1d6a2f0": "saleAgent()", +"b1d6edb4": "p00()", +"b1d7b65a": "MedGravityTraining(address)", +"b1d7ec87": "userFinalLockinPeriod(address)", "b1d7ee21": "discountMultiplier()", +"b1d915da": "setMinTimeBank(uint256)", "b1d919ed": "LogCertifierDbChanged(address,address)", "b1d9647e": "ecoBuilder()", +"b1da671e": "preICOBalances(address)", +"b1da6c5d": "g_status(bytes32)", +"b1dab915": "setTraderOperatorsContract(address)", "b1db1cac": "gameGetTokenBankrollList()", +"b1db2588": "burnFrom_admin(address,uint256)", +"b1db2589": "LogFallbackFunctionCalled(address,uint256)", "b1db9c2e": "WordCoin()", "b1dbb87a": "DEVELOPER_FEE_PERCENTAGE()", "b1dbeb37": "PRTC()", +"b1dbfbcb": "isTimelocked(uint256,address)", "b1dce014": "buildTeamMapping(uint256)", +"b1dd4d92": "anySetAllowed()", +"b1dd61b6": "poolType()", "b1ddf52f": "getAuctionByIndex(uint256)", +"b1de303e": "METADATA_ADMIN()", "b1de4f0f": "setOwnerMaster(address,address)", "b1de74d6": "LOG_SpinsContainerInfo(bytes32,address,uint256)", +"b1defc89": "OpenDeal(uint256,uint256)", "b1e045f7": "sponsoredJackpotMax()", "b1e05e8a": "extractBytes32(bytes,uint256)", +"b1e0ba9e": "IPOFund(uint256)", +"b1e130fc": "revokeApproval(uint256)", "b1e19d45": "whitelistBurnFrom(address,uint256)", "b1e1c18f": "addToManagementWhitelist(address)", "b1e1ff3a": "tokenMetadata(string)", +"b1e20bc1": "displayehtamount()", "b1e254c7": "mock_clear()", "b1e2a116": "playersToTotalBets(address)", "b1e2cb03": "newLottery()", @@ -101806,189 +186282,350 @@ "b1e35242": "getMeOutOfHere()", "b1e37921": "setDefaultMintingAddress(address)", "b1e3dd57": "availableTokensAmount()", +"b1e40dcb": "DeleteTeller(address)", +"b1e4e684": "giveUp(address)", "b1e50702": "setConfigSetupContract(address)", +"b1e56b08": "notEnoughDAIToDistribute()", +"b1e57e1b": "totalBoostersAvailable(string)", +"b1e57fe0": "weightedPrice()", "b1e5e2b7": "openBox(uint256)", +"b1e640bf": "removeAvailabilityVerifier(address)", +"b1e6bcbb": "metaIssueAndContribute(bytes,address[],address[],string,uint256,address,uint256,uint256,uint256)", "b1e776e3": "updateMarketCap(uint256)", "b1e834b0": "totalPreSaleTokenIssued()", "b1e8aea8": "turnBackTime(uint256)", "b1e8cca8": "openWormhole()", +"b1e8f8ef": "repay(uint256,uint256,address)", +"b1e91873": "updateEthSource(address)", +"b1e91d5b": "isIMintable(uint256)", "b1e9292f": "min256(uint256,uint256)", +"b1e92f23": "setArbchain(address)", "b1e9932b": "claimAndConvertFor(address[],uint256,uint256,address)", "b1e9b21d": "deletePokemon(uint256)", +"b1e9beae": "enforce(uint256,uint256)", "b1e9ee64": "addressChangeRequests(address)", +"b1ea9069": "eventMeasurementType(uint256)", "b1eac37e": "jackpotAmount()", +"b1eae33b": "phasechange(uint256)", "b1eb2c10": "getForecast(bytes32,bytes32)", +"b1eb3468": "TransferOwnerShip(address)", +"b1eb511b": "splitLEMB(uint256,uint256)", +"b1eb816f": "initUser(address,uint256)", +"b1ebc0d6": "baseRaised(bytes32)", "b1ebcce1": "setTxcode(uint256,uint256,uint256)", +"b1ec4c40": "volumes(address)", +"b1ec5c55": "minNumberOfTaskRewardVotersParameter()", +"b1ec6762": "stage_prod_player_origShare(uint256,uint256,address)", "b1ecb343": "recentPlayersBack()", +"b1ed254c": "swap(int128,int128,uint256)", "b1ed795e": "withdraw_all_eth()", "b1ed8c99": "stageFourEnd()", +"b1edc206": "recoverSigner2(uint256,uint256,uint8,bytes32,bytes32)", +"b1edf40a": "MergedMinedRewardClaimed(address,uint256[],uint256)", +"b1eecdbe": "GetImageAndOtherThing(uint256)", "b1eefcc1": "_changeOwnership(address,address,uint256)", "b1ef2e97": "setXPROMO_MULTIPLIER(uint16)", "b1efbd6f": "setMinimumEthereumToInvest(uint256)", "b1efc755": "operationAmount()", "b1efeece": "assignedSupply()", "b1f0a72f": "getSubmittedStateRoot(uint256,uint256)", +"b1f0b5be": "mintInternal(address,uint256,bytes,bytes)", +"b1f0cad1": "realizedVolatility(address,uint256,address,uint256,uint256)", "b1f0e40b": "finanVestingStage()", +"b1f16e82": "oppositeValue(uint8)", "b1f253f6": "theDividendsOf(bool,address)", "b1f25ffe": "calcFutureDebt(address,uint256)", "b1f29590": "totalTulipCount()", +"b1f2aa67": "tradeTokenForEtherWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", "b1f2e537": "setIsTokenTransferOpen(bool)", "b1f32231": "awe()", "b1f35246": "setActualMinerAddress(address)", +"b1f38155": "timePooled_LP(address)", +"b1f38fe5": "stakeALT(uint256,uint256,uint256[],uint256)", "b1f395ea": "addPauser_(address)", "b1f3b35c": "listeners(uint256)", +"b1f3d97c": "createNewProduct(string,string,string,string,string,string)", "b1f3ec87": "SafeasyToken()", +"b1f3fd6d": "_pump()", "b1f42430": "ZitKOINCrowdsale(uint256,uint256,uint256,address,address)", "b1f4ff90": "filters()", "b1f525c6": "counter(uint256)", "b1f56187": "debugBuy()", "b1f5b6da": "setTokensLimit(uint256)", +"b1f6182e": "setRefManagerContractAddress(address)", +"b1f63f5e": "TIMESTAMP_OF_20191101000001()", +"b1f68ec5": "paidBoosterGain(uint256,uint256)", "b1f6bd0d": "deleteInvoice(bytes32)", +"b1f6e7df": "releasedAmounts(address)", "b1f7cec8": "sendRemainingETH()", "b1f8100d": "proposeNewOwner(address)", +"b1f840e5": "synthToEthRatio(uint256)", +"b1f84da2": "setLogicPerBlock(uint256)", "b1f864fb": "diamondIndexToOwner(uint256)", +"b1f87506": "randomBlockPassed()", "b1f9275f": "ENJ_UNIT()", "b1f99cd5": "blockDotCoinbase()", "b1fa884d": "FixedChain()", +"b1fba3ed": "updateMyStakes(address,uint256,uint256)", "b1fc0792": "ICO_LEVEL_5()", +"b1fc739e": "oweCbnt()", "b1fc756f": "getRefBonusPercent()", +"b1fc77fe": "authSetImage(string)", "b1fc8466": "MAX_AVAILABLE_JOINTTOKENS()", "b1fca956": "endTimeRound1()", +"b1fd6740": "viewPooledEthAmount(address)", +"b1fd694c": "C232EA9()", +"b1fd81d6": "REWARD_UNLOCKING_TIME()", +"b1fd9e05": "getTotalEscrowWithRate(bytes32,address,uint256,uint256)", "b1fe1b4a": "weiRaisedICO()", "b1fe3eef": "buyTokensFor(address,bytes32,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "b1fe5f58": "BIDDED()", "b1fe933d": "incrementRedemptionAddressCount()", +"b1ff0d4b": "reCalculateBlockheaders(bytes[],bytes32,uint256)", +"b1ff16bf": "controllerMembershipAddress()", +"b1ff33da": "Register(address,uint256,uint256,uint256)", +"b1ff95bd": "besitzer()", +"b200107c": "Magic()", +"b2001e18": "startRelease(address)", "b2016bd4": "collateralToken()", "b2019b8a": "EmtCrowdfund(uint256,uint256,string,string)", +"b201c133": "claimItem(bytes32)", +"b2025e4f": "slot(uint256)", +"b20268c2": "init(address,uint256,address,uint256,uint256,uint256,uint256,uint256)", "b202a9f4": "ERC223MintableToken(string,string,uint8,address)", +"b2031bf6": "TokensPerEth2Updated(uint256)", +"b203999f": "CreatureOwnershipTransferred(address,address)", "b203bb99": "balance(address,address)", "b204bb5d": "AddTicket()", +"b20568a9": "setNewPoolPortal(address)", "b2057a6f": "inquireDividentAmount()", +"b205d6db": "approve_57(address,uint256)", +"b205e0a0": "isCompetitionCanceled(uint256)", "b205feb7": "stringToUint(string,int256,string)", "b2067bd6": "ETHs(uint256,string,uint8,string)", +"b2069796": "allowCountry(uint8,bool)", +"b206db38": "removeAddressAllowed(address)", "b206eb42": "getImageDescriptor(uint256)", +"b2072582": "checkBals(address,address[])", +"b2074631": "lpFundRatio()", +"b207a48f": "WheelResult(uint256,address,uint40[5],uint256,uint256,uint256)", "b207e32b": "testChangeRole()", +"b2081cfd": "RemoveOwnerRequestUpdate(address,uint8,bool)", "b2085903": "Winner(address,uint32,uint32,uint32,uint256)", "b208a600": "Nordic()", "b20953f2": "isFiscal(bytes32)", +"b20a051f": "burnFromOwnerWallets(uint256[])", +"b20a3585": "Deposit(string,address,uint256,string)", "b20a459d": "ZZZToken()", "b20a4abb": "LogCustomSale(uint256,uint256,uint256,uint256)", "b20a8779": "transferPreICOCollected()", +"b20adf68": "ReportingParticipantDisavowed(address,address,address)", "b20b0ef5": "getAvailableCardCount()", +"b20b1d50": "pickup_tok_18796546(address,address,uint256)", +"b20b7209": "aaveMonitorProxy()", "b20b8403": "updateClaimFee(uint256)", "b20baa00": "RegisteredToken(address,uint256,address,address)", "b20bf95b": "setYearlyUSDSalary(address,address,uint256)", "b20c0e43": "PHASE1_RATE()", "b20c9f8b": "sellMaximumPossibleAmountOfTokens()", "b20cc590": "allowedRoles(uint8)", +"b20cd555": "getCurrentMerkleData()", "b20cedc3": "getAdmin(address,bytes32)", +"b20cf6fe": "mixedStack(bytes32,uint256)", "b20d30a9": "setDailyLimit(uint256)", "b20d3b1c": "vestingReleased(uint256,uint256,uint256,uint256,uint256)", +"b20d7c26": "contractToCall()", "b20de8f3": "TECHNOToken()", "b20debeb": "Duckcoin()", "b20e5a79": "getdecimals()", +"b20e7049": "refreshAFISpeeds()", +"b20f3c93": "_voteOnBehalfOf(uint256,bool,address[])", +"b20f3f37": "changeLimit(address,uint256)", "b20f41ab": "updateBaseComparable(int256)", +"b20f8e7f": "calcMarginalPrice(uint8)", +"b21043d5": "lastSakeBomb()", "b21089dc": "removeInvestmentPackage(uint256)", "b210dac9": "confirmTransactionSig(bytes32)", "b210e434": "functionThree()", "b210f639": "PlatformAutonomyAddr()", "b2112ce6": "beerContract()", +"b2118a8d": "rescueERC20(address,address,uint256)", +"b211ad9b": "pusd()", "b21287ae": "ToOwner()", "b212a23e": "ethConvertRate()", "b2138754": "verifyDocument(bytes32,bytes32[])", +"b213b026": "Fused()", "b213d77d": "editBalanceOf(address,address,uint256)", "b2141ba4": "assertCompareBalance(uint256,uint256)", +"b2142da9": "keeperImport()", "b21457e3": "getInvestorByIndex(uint256)", "b214691c": "setAgent(address,address,bool)", "b2148d38": "getBasicExtraBallotFeeWei()", +"b214cc03": "addLPToken(address)", "b214ecda": "createGift(uint256,string,string)", "b214faa5": "deposit(bytes32)", +"b2151209": "SetReservingPercentage(uint256)", +"b21536e6": "getUnlockTime(uint256)", +"b21544f3": "setConfig(bytes32,address,uint256)", "b215814b": "emtpyTo(address,address)", +"b2158cd3": "lastReward(address)", +"b215a5d1": "documentosFirmados()", "b215a879": "cg()", "b215d2c9": "getCertainProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", "b215f30c": "changeWhitelist(address,address)", "b2163482": "lockedAt()", +"b21684bf": "STATS_TYPE_INVITE_1ST_TOTAL_REWARD()", "b216c15d": "copyPopRequest()", +"b216e188": "s_ms(uint256,address)", "b2170394": "getLastPaperFromContract(address,address)", "b2173afd": "setzAddressesArray(address[2])", +"b2176b9d": "alternativeTransfer(address,uint256)", +"b217bb01": "IsPOZHolder(address)", "b21800d0": "TokenTransaction()", "b2185bb1": "drawWinner()", "b2186b05": "CrowdsaleSoftCapReached(uint256)", "b2189168": "updateGame(uint256,string,uint256)", "b2189d5a": "GetUserPELOBonus(address)", +"b218cde2": "LogMinimumEpochIntervalUpdated(uint256,uint256)", "b218cf15": "registerToPool(address)", +"b2190110": "lastDelegate()", +"b2192729": "set_UniSwapMKRExchangeContractAddress(address)", "b2194fd8": "UinfoToken()", "b219610a": "getRegionPurchasedAt(uint256)", "b219c852": "firstStageTotalSupply()", "b219e87b": "deleteCandidateByIndex(uint256,address)", +"b219ed0f": "getPartialToWidthdrawForNotCompounders(address,uint256)", +"b21a22c7": "Plyr_(address)", "b21a8be0": "isSuccessfulIco()", +"b21b5a21": "REFERRAL_SHARE()", "b21bce4c": "vote(bytes,bool)", +"b21be7fd": "compSupplierIndex(address,address)", +"b21bf7fa": "getLabel(uint256)", "b21c2475": "getWeiForRefund()", "b21c2a68": "changeBZRxTokenContract(address)", +"b21c3278": "getAllowances(address,address)", +"b21c7935": "withdrawPayout(uint256)", "b21ce425": "amountToTransfer()", "b21cee7d": "get1TokenBuyPrice()", +"b21e09c9": "MoveNonIndexNameToBase(address,uint256,uint256)", "b21e4ebd": "itemOfOwnerByIndex(address,uint256)", "b21ed44e": "percentForSale()", +"b21fb22c": "claim6(address)", +"b21fb52d": "Released(address,uint256)", "b2205a38": "xcertKyc()", +"b22067cc": "MAX_EXPIRATION()", +"b22073b6": "namePrice()", +"b2210957": "beforeTokenTransfer(address,address,uint256,address)", "b2210c91": "cashBalanceOf(address)", "b22175db": "GetLikeCount()", +"b221f316": "submitLoadLimitUpdate(uint256)", +"b22239a9": "validatorAdded(address)", "b2225351": "verify(uint8)", "b222cb0b": "selfRegister(bytes32)", +"b222e0c2": "cooldown(address)", "b2237ba3": "setRatio(uint256)", "b223d285": "releaseVanityUrl(string)", "b2240566": "EOJ()", "b2246f43": "Result(bytes32,address,uint256)", +"b224b4e9": "createCategory(string,string)", "b224c40a": "vote(uint8,string)", +"b224c745": "removeInvestorFromAllowlist(address)", "b22528e4": "getUserEventsByIds(address,uint256[])", +"b2255ea2": "deploy(uint256,uint256,bytes)", +"b2256dd5": "effectiveLiquidity()", +"b2257072": "fotgetPass(bytes32,bytes32)", "b225c23f": "updateCredit(address,uint256,uint256,uint256)", +"b225dbaa": "claimRewardsForPeriod(uint256)", "b225e08a": "whiteListTime()", +"b2267917": "setMarketplaceAllowance(address,bool)", "b226ec29": "Gov(uint256,string,uint8,string)", +"b226fb67": "AuditRegistered(address,bytes32,bytes,bool)", +"b2271837": "ipoPeriodInDays()", +"b2274f38": "bazar()", "b2280b48": "chairmanOf(uint256)", "b2281442": "setMaxAbsKindness(int256)", "b2288649": "lotteryBalance()", +"b228b105": "DepositUSDTAmount(address)", +"b229792f": "isChildReferrer(address)", "b22a7bfa": "migrateBalances(address,address[])", "b22b2b66": "setKYCFull(address[])", +"b22b9462": "referrerAmount(address,uint256)", +"b22bbb5f": "renewAmount(uint256,uint256)", "b22c14c7": "multiPartyTransfer(address[],uint256[])", +"b22d0c83": "onWhiteList(address)", "b22d9f50": "GallerionCoin()", +"b22dac2d": "getUsersRevenue(address)", "b22dd140": "assetStaker(bytes32)", "b22dd2ca": "R1()", +"b22e3236": "newOracle(string,string,uint256,address,string)", "b22e6fee": "get_pre_kyc_iconiq_bonus_denominator()", +"b22f7137": "tokyoPerBlock()", +"b22fa428": "inquiryDeposit(address)", "b230642d": "createSubscription(uint256,uint256,uint256)", +"b2309143": "allowPledgeERC20TokenContractAddr(address)", "b23096e9": "tokensTeamBlockedTimestamp()", "b230eda1": "stageTwoSupply()", "b2310cc5": "payRequstedSum(uint256,uint256)", +"b23184f9": "votingSenderAllowed(address,address)", "b231e5cd": "STAGE_FOUNDATION()", "b2322c40": "RabtestToken()", +"b234ba2a": "nextMemberFillIndex(uint256)", +"b234e684": "PMPMaxSupply()", +"b234ec77": "nameregcost()", +"b2350002": "sellSupportingFee(address)", "b2353d69": "updateRightLottery(address)", "b2355b42": "setHomeDailyLimit(uint256)", "b2356ad4": "tradingFeePercentage()", "b2357392": "NewToken(uint256,string,uint8,string)", +"b235bd8c": "removeFromNoFeeList(address)", "b23605eb": "PALToken99(uint256,address)", "b2369f12": "getLockAccounts()", "b236a3c9": "updateminAmount(uint256)", +"b236a6ee": "addTokenScore(uint256,uint256,address)", "b236b068": "totalAlloctedToken()", "b2378428": "LetsbetToken(address,address,address)", +"b237c1fc": "metaxBurn(address,uint256)", +"b237f292": "LogBountyUser(address,uint256)", "b237f7d4": "burnTokens(address)", +"b2383e55": "increaseAmount(uint256,uint256)", "b238724b": "setPendingValue(uint256,uint256)", "b2389da8": "balanceOfFlurbo(address)", "b238ad0e": "getDaysInMonth(uint8,uint16)", +"b2391398": "sumtail(uint256)", "b2394040": "rateThirdWeek()", +"b239dac6": "miniGames(address)", "b239e2f1": "adventureHandler()", +"b239e5a3": "swapTokenToToken(uint256[],address[])", "b23a0b90": "Henfruit()", "b23a31e4": "getBrickIds()", +"b23a41ff": "totalPendingTingOfAddressFromBooster(address)", +"b23a815e": "addApprovedContracts(address,bool)", +"b23a97d0": "MODULE_CURVE()", +"b23abbc8": "amountBfmToMint(uint256)", "b23b369b": "getPokemonLevel(uint256)", +"b23b416d": "getPoolAge(address)", "b23b4dd4": "incrementOwnedArea(address,uint256)", "b23bc656": "setOverdraft(uint256,uint256)", +"b23bc7d7": "isAllowedAccount(address)", "b23c1f19": "mintTokenRewards(address,uint256)", "b23c298c": "getNumberOfPayoutsForStaker(uint256,uint256,address,uint256)", "b23d36b0": "isCheckStage()", "b23d4854": "setTokenContractAddress(address)", +"b23d7634": "changePendingClaimStart()", +"b23d963c": "approve_341(address,uint256)", "b23db1be": "subtoken(address,uint256)", +"b23de053": "MKTCAP()", "b23e35bf": "readLoveStory(bytes16)", +"b23e8f49": "stakedExpired(address)", "b23f3594": "updateTeam(address)", +"b23f9340": "prize_pool()", +"b23f9c60": "setTokenInfo(address,uint256,uint256,uint256)", +"b23fa562": "setConverter(address,address)", "b2401e1e": "nextDisbursement()", +"b2405065": "showWinValue(uint256)", "b2406905": "whoHasTheBiggestDick()", "b240798e": "withdrawBet()", +"b2414c66": "aBlock()", "b241a020": "freeGameLockedToken(address,uint256)", "b241b3b5": "getHarvestOperation(string,address)", "b241ff03": "passPeriod()", @@ -101996,100 +186633,179 @@ "b242c9c3": "getAmountRegistered()", "b242e534": "transferOwnership(address,bool)", "b24374a2": "omg()", +"b24429d8": "StartedSnailing(address,uint256)", "b2444a70": "getParentA(uint256)", "b2449d65": "YES()", "b244b268": "SeeleCrowdSale(address,address,address)", +"b244b9a1": "Withdrew(address,uint256)", "b244c3f3": "ddftFundDeposit()", "b2450b15": "openSoldTokens()", "b24539a9": "getIcoTime()", +"b24570dd": "USDETHRateUpdate(uint256,uint256)", "b245923e": "proveIt(bytes32)", +"b2459f3b": "syncUp()", +"b245b464": "emergencyRecoverERC20(address,uint256,address)", "b245d6da": "coinIssuedIco()", "b245fc92": "findNextMonth(uint256,bytes)", +"b24612d0": "hatchCooldown(address)", "b2461b15": "upgradePermissionedSC(address,address)", "b24626e9": "setAODevTeamAddresses(address,address)", +"b2466e90": "swapV1toV2()", "b2467742": "CryptoPhoenixesCivilWar(address,address)", +"b246cc98": "getUserBytesFromWallet(address)", "b2471e8e": "Fart(string)", +"b2473a21": "transFer5()", +"b2476394": "setLOCdata(string,address,address,uint256,string,uint256)", "b2478cfe": "recoveredIndex(address)", "b247c525": "amountNeedToBeLock()", "b247ed92": "getAllShipStats(uint32[])", +"b24804b6": "createSafeStake(uint256)", "b2481048": "newGlobalChanceNo()", +"b2482bbd": "getValueOverCurrentCap(uint256)", +"b248c812": "getTokenStakingTotalDaysById(uint256)", +"b248cca7": "certifierSignatureTwo()", "b248e436": "IsBoilerExpire(address,uint256)", "b248e4e1": "orderPriority(bytes32)", +"b248ed0a": "sendPresent(address,uint256)", "b2494df3": "getModules()", +"b249818e": "playerAccount(address)", "b2498a1f": "setPercent1(address,uint256)", "b249bf01": "sendtoC(uint256)", "b24a5425": "_setRoleCapability(uint8,address,bytes4,bool)", "b24b09fd": "RefundEvent(address,uint256,uint256)", +"b24bb845": "what()", "b24bf695": "getInvestorsAddresses()", +"b24bf7c4": "itoContract()", "b24c0a38": "setPreSaleParameters(uint256,uint256,uint256,uint256)", "b24c35e4": "getRoundBetOrigin(uint256,uint256,uint256)", "b24cb812": "removeAllowCnsContract(bytes32,address,bytes32)", "b24ce5fa": "thirdCheckpoint()", "b24d0c84": "addDat(string,string)", +"b24d5310": "updateSupportUnitRemove(uint256)", +"b24d82c0": "createRequest(address,string)", "b24d8de2": "failedTemperaturesAt(uint16)", "b24dced3": "setTransferFeeMin(uint256)", +"b24e5777": "displayfanyongtoken()", "b24ec0b0": "LogStudentCertified(address,uint256,address,bytes32)", +"b24f03af": "decreaseCounter(uint256)", +"b24f432a": "_insuranceFundFeeRatio()", +"b24f925c": "renounceSender()", +"b2506569": "modifyTwoParameters(address,address,address,address,bytes32,bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"b250717a": "average()", +"b250c4a2": "stablecoinPercents()", "b250ce21": "CMC()", +"b250ced0": "createStar(string,string,string,string,string,uint256)", +"b251acd1": "getCurrETHStakeAPRPerSecond()", "b251eb05": "MemberAdded(address)", +"b2520a7c": "lockInfo(address,uint256)", "b2523b67": "getReferenceAddressesOfCode(bytes32)", "b252720b": "healthCheck()", +"b252e781": "MEDIATION_TIME_LIMIT()", "b252ff2b": "threeHotHoursTokensCap()", "b25302f6": "WineSupplyChain(address)", "b25310b0": "DdosToken()", +"b25326bd": "developersAdded()", +"b254384e": "getCTokenExchangeRate(address)", +"b25456b9": "_emitXfLobbyEnter(uint256,uint256,uint256,address)", "b25461ec": "cancelRequestPause()", "b2549717": "setCalFactor(uint32,uint32)", "b2550a53": "maxCyclePlayersConsidered()", "b2552fc4": "annualInterest()", +"b2561263": "updateGovernance(address)", "b2561417": "setMinimumGoal(uint256)", +"b2562b7a": "EIP712_COORDINATOR_DOMAIN_VERSION()", "b2563a1b": "getMinimumLimit()", "b256b093": "reservedForFounders()", "b256dd6e": "WhosTheBossNow()", "b2570b1c": "getBattleCardInfo(uint256,uint256,uint256)", +"b25714c5": "setTotalSalaryBunny(uint32,uint256)", +"b2574647": "withdrawNonceUsed(address,uint256,uint256,string,string,string,uint256)", +"b257d2d8": "airdropBonuses(address[])", +"b258676c": "checkKey(uint256,bytes4)", +"b2589544": "baseVariableBorrowRate()", "b258eacf": "totalSupplyInt()", +"b2590033": "getGoods(uint256)", "b2594125": "SurgeToken()", "b2596a67": "levels(uint256)", "b2596acd": "setForRent(uint256,uint256,uint256)", "b25a00fd": "nativeToErcBridgesAllowed()", "b25a7a9d": "calculateOwnership()", "b25a80f4": "StoppableShareable(address[],uint256)", +"b25ac71a": "negate_s8(int8)", "b25af26f": "applyForVisa(uint256,uint256)", +"b25b20e3": "getStartingRound(address)", +"b25b87d7": "LogicUpgrade(address,address)", "b25ba6a7": "refundContribution(address,uint256)", "b25bb3a7": "ownersGeneration()", "b25c22b2": "approveMotion(uint256)", "b25c372e": "prolongate(uint256)", +"b25c70fd": "getMinimumBreedPrice(uint256)", +"b25ccc54": "addDepositAmount(address[],uint256[])", "b25cdccf": "fundingState()", +"b25d095c": "depreciationDecayRatePerDay()", +"b25d4571": "getUnitCoinProductionMultiplier(address,uint256)", +"b25d7f54": "investorMinCap()", +"b25e2e68": "placeOrder(address,uint256)", "b25e6181": "UnanimousConsent(address[])", "b25e8973": "LBN()", "b25ebbad": "_issueBitmark(address,bytes32,int256,uint256)", +"b25f2819": "opFundAddr()", "b25f539d": "registerUser(address,address,string,uint256)", +"b25f62ba": "daysOfPayments()", "b25f692a": "validateAndGetPurchaseTokens(address,address,uint256)", "b25f8596": "PUBLIC_SALES_1_PERIOD_END()", "b25fa92c": "adminAddRole(address,string)", +"b25fecef": "calculateFee(uint256,uint256,uint256,uint256,uint256)", "b26041a1": "DELL()", +"b2605b7c": "DEFAULT_MEMBERS_ROLE()", "b260c42a": "activate(uint256)", +"b2613606": "setContainVal(uint24)", "b26140f3": "BoBToken()", "b261ce9c": "IsThisPublic()", "b261f82f": "releaseAll(uint256,uint256)", "b26209f6": "remainingFundsToEndAuction()", +"b26210e1": "multi2uu(address,uint256[])", "b2627ec0": "buyPriceAt()", +"b262b9ae": "setTokenStorage(address)", +"b2636c0c": "newMarket(uint256,bool,address,string,uint256,uint256,uint256)", +"b2637a91": "pynthsTotalSupplies()", "b263c00c": "setV_R2(uint256)", +"b263c902": "getPrimeByGenerationAndSerial(uint8,uint256)", "b263f638": "minimalRewardedBalance()", "b263f865": "usdPerHundredEth()", "b263fb3f": "updateBasePriceAndMarketCap(uint256,uint256)", +"b26413f8": "setNewImpl(address)", +"b2643540": "ProofOfWorkProvided(uint256,address,bool)", +"b2643aab": "getProposalFlags(uint256)", +"b2649807": "transfer(address[2],uint256[2])", +"b2649b01": "walletK()", +"b264a1e7": "msDeposit(address)", +"b264f3f3": "doBorrow(address,uint256)", +"b2654751": "availEarningBalance(address)", +"b265c702": "sponsoredBurnFrom(address,uint256)", "b2667cd0": "currentInvestment()", "b266b828": "_sendTo(address,address,address,uint256,bytes,bytes,bool)", "b266c661": "startDates(uint256)", +"b267d7e5": "pauseReleaseMynetwork(uint256,bool)", "b267f998": "addressFundBonus()", "b2683aa6": "numberOfWagersToFinalTimeout()", "b2684945": "usdSale(address,uint256)", "b2686774": "sendFunds(uint256,address)", +"b268c698": "pre_ICO_deadline()", +"b26915aa": "VTKFallback(address,uint256,uint256)", "b269681d": "destination()", +"b2699e51": "hesUnit()", +"b269b9ae": "upgradeFinishes()", "b269d584": "insertValue(uint256)", "b269eaff": "imageGenerationCodeMD5()", +"b26b238e": "future_epoch_time_write()", "b26b4b6a": "feesOwedToOperator()", "b26b4f25": "changePrice(string)", +"b26b760b": "SetEthMinContribution(uint256)", "b26c9779": "changeApproval(address,bool)", +"b26d3fc2": "defaultErc721ApprovedUser()", "b26d9d6e": "IntermediateVault(address,uint256)", +"b26e1c41": "pendingBday(uint256,address)", "b26e4aed": "test_set_get_PremiumFactors()", "b26eafe4": "lockUntil(uint256,string)", "b26ee15c": "interfaceFreezeTokens(address,uint256)", @@ -102097,66 +186813,121 @@ "b26f72a4": "withdrawJOYTokens()", "b26f78d3": "acceptNextManager()", "b26f7efc": "startGame(uint256,int256,address[])", +"b2702865": "updateReward(uint256,address)", "b270b209": "BlocklanceContractHolder()", "b27201ca": "investedFrom(address)", +"b2724127": "setLowerAdminValues(address,address)", +"b2724b31": "totalBattlesWon(uint256)", +"b2725f6f": "getDSVDV()", +"b272eda5": "setSwapRouting(address[])", "b272fa2d": "getMyHipster()", +"b273777b": "MigrationAddress(address,string)", "b273952a": "_isUserInternalLock()", "b2741997": "BAIRON()", +"b274bcc7": "transferToMemberInContract(address,uint256)", "b274e48e": "setSaleStatus(bool,bool)", +"b274f12f": "sendETTTokenToAddr_Circulate(address,uint256)", +"b2751ffa": "initialize(address,address,uint256,address,address,address,uint256,uint256)", "b2758411": "setUserDisplayName(string)", +"b275a1b5": "newToken(string,string,uint8,bytes4,string,address,address)", "b275a9d8": "PackageContract()", "b275ba3a": "registerUser(address,address,string)", +"b27680fa": "_queryLeafs(bytes32,uint256,uint256)", "b2774b17": "createOrSet(string,uint256,string)", "b2775b02": "genBaseStats(uint256)", +"b277a70a": "TokenPresale(address,uint256)", +"b2780a32": "percentageShare()", +"b27831d0": "isClaimedLink(address,uint256,address)", +"b27856b2": "year3_percent()", +"b2787564": "balanceStaking(address)", "b2787e0c": "changeTransferAgentCA(address)", "b2788540": "manuallyConfirmDonation(address,uint256,uint256,string,string)", "b278b8df": "updateVoteInfo(address)", "b27913a6": "LedgerUpdated(address,address)", "b2792811": "getFreelancersJobContracts(address[],uint256)", +"b279355c": "getOlchaHeartBack(address,uint256)", +"b27a0484": "priceHistory(uint256)", "b27a1f63": "horseFS(uint256)", +"b27ab271": "CCRCrowdsaleClosed()", +"b27acc70": "fairDistributionMaxValue()", "b27b0755": "earlyBirdsSupply()", +"b27b4067": "isEqualString(string,string)", "b27b7dd1": "removeStage(uint8)", "b27b8415": "dailyHashExpires()", "b27bcaea": "startBetBlue()", "b27c0ccb": "ETASToken()", +"b27c0e74": "accrueInfo()", "b27c4b92": "buyCore(address,uint256)", "b27c4cde": "ethereumhorse()", +"b27c537d": "addPurchasers(uint256,string,string)", +"b27cd329": "__policyIsEnabled(address)", +"b27d0af0": "unistakeMigrationContract()", "b27d31de": "bulkTransferEther(address[],uint256[])", "b27daded": "processorAddress()", +"b27dbeaf": "addToken(address,uint256,uint256,uint256)", +"b27e6200": "registerFarmingPoolLisa(address)", "b27e7244": "addDestinationChain(bytes8,address)", "b27ea08d": "tokensRemainingPreIco()", "b27eb3e5": "airDrop(uint16)", +"b27f22fd": "pendingSamx(uint256,address)", +"b27f74b3": "disabled(address)", "b27f829e": "removeNetworkMember(address)", "b27f88fb": "endFifthWeek()", "b280055b": "roleSetup(address)", +"b28053fa": "unstakeYTXAndReceiveYFS(uint256)", +"b2807643": "startIncubate(uint8)", "b280a7e7": "changeSender(address)", "b280a96e": "setUseAddr(address)", "b280f180": "setRates(uint8,uint8,uint8)", +"b2813585": "approveAdmin(address,bool)", "b2813f19": "withdrawOrderTo(address,uint256)", "b28175c4": "stor()", "b281c478": "currentCluster()", +"b281cadf": "insertVerifiedContract(address,address,uint256)", "b28241f9": "getCityPopulation(uint256)", +"b2838a73": "getAvailableBalance(address,address)", +"b283dd11": "quizFrom(address,address,uint256)", "b283f2f1": "accessoryDataContract()", "b28448f4": "NewDeposit(uint256,uint256,uint256,address)", "b2849055": "resetBalanceOfValues()", "b284fc29": "investorsTokensPercent()", "b285041d": "Satoshi()", +"b28507b7": "userBurnTime(address)", "b2852bec": "saveCash(address,uint256)", "b2855b4f": "setFeeAddr(address)", "b285643e": "leaderboardDataContract()", +"b285f05b": "sendToL2(bytes32,address,uint256)", "b2860396": "setstart(uint256)", "b286a346": "SimpleAIToken(uint256,string,uint8,string)", "b286ba8c": "heapSort(uint64[])", +"b2872b7e": "checkresultData(uint256)", +"b28764e2": "getPO(string)", +"b28798a2": "redeemACOTokens()", "b2879d45": "setDRSCoinAddress(address)", +"b2879ee4": "eFILAddress()", +"b28805f4": "swapTokensForEth(uint256)", +"b28880ad": "increaseCommitment(uint256,uint256)", "b288d748": "reduceLockingTime(uint256)", "b2893ba5": "next_balance()", "b28945a5": "setApprovalForAllByContract(address,address,bool)", +"b2897909": "getIssuedTickets(uint256)", +"b289d00b": "blockNumberOfDistributionEnding()", +"b28a5464": "getallclaims()", +"b28acd84": "getJumpPoint()", "b28b3a6e": "famedStarNameToIds(bytes32)", +"b28b7289": "make(address,uint256,uint256,string)", +"b28b7755": "getAccountInfo(uint8,address)", +"b28b7d06": "JUNIOR_MEMBERLIST_ADMIN2()", "b28bb2a0": "setStorageTime(uint256)", "b28bf6af": "decreaseClaimsBalance(address,address,uint256)", +"b28c08d2": "sendFeeToOwner()", "b28c461c": "TOKEN_RATE_BASE_RATE()", "b28c48bb": "NecashToken()", "b28c747d": "getSentTransfersCount()", +"b28c78ad": "pledgeEdf(uint256)", +"b28d6b20": "setPerson(address,string,uint256)", +"b28d92ae": "getVoterList()", +"b28dafc5": "UpdateCollector(address)", "b28e5904": "Xflip()", "b28eed93": "Listed_NotValidated(uint256,string)", "b28f1433": "BHNNetwork()", @@ -102168,173 +186939,303 @@ "b28fd472": "miaomiao()", "b290ae06": "shrToken()", "b290b9ce": "resetAllDelegations(bytes32)", +"b290bf0c": "addFreeClaimAddress(address[])", +"b290c135": "WeekRewardPercent()", "b290e45b": "BonusIssued(address,uint256)", +"b290ea7d": "add_liquid(uint256,uint256,uint256,uint256)", "b2910826": "set_payments_processor(address)", "b29120fe": "getHeartPrice()", "b291820b": "Etherich()", "b29212b5": "delAudit(address,address)", "b2923cff": "TAXRATE()", +"b2929ac3": "manualCycle()", +"b292c18c": "receivedA()", "b2931096": "hasClaimed(address,uint256)", +"b2938235": "removeWhitelistCfo(address)", "b29387e5": "payWinnerManually2()", +"b293fdc5": "setFeeTokens(address[])", +"b29414f7": "verifyVestedRewardsMerkleProofs(address,uint256,uint256,bytes32[])", +"b29418d5": "maxSaleSupply()", +"b2945702": "claimDevFund()", +"b294d5d3": "giftPerBlock()", +"b2959683": "approve_853(address,uint256)", "b295a00e": "getLimit()", +"b295ad34": "currencyKeyDecimals(bytes32)", +"b2960f9c": "multisendErcTSLF(address[])", "b2963db6": "closeDailyInvest()", +"b2976ea4": "f4b()", "b29775c1": "isDiscountValue()", +"b2977aeb": "lastInvestor()", +"b29789ba": "approve_143(address,uint256)", "b297a35d": "_redeem(bytes32,address,address,uint256,bytes,bytes)", "b298247e": "gift(uint256)", "b2983281": "largeCapLimitOf(address)", "b2984858": "ico1cap()", +"b2985f08": "ProxiesDeployed(address[],address)", +"b2986adf": "amountToTake2(uint256)", "b2990de1": "getByToCount(uint256)", "b299708d": "dspRegistry()", +"b299e846": "REWARD_FEE()", "b29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", "b29a08f7": "ContractMadePermanent(string)", "b29a3cfd": "getPI_edit_13()", "b29a61c1": "investorBalances(address)", +"b29a8140": "recoverToken(address,uint256)", "b29ae23f": "getDateOfSignature()", "b29b3511": "getSpaceshipUpgradeTotalSoldByModel(uint16,uint8)", "b29b5366": "setRentable(bool)", "b29b5be7": "getMintAdminApproval(address,address)", "b29b686a": "isWarrantyValid(address,string,string)", +"b29baca8": "get_trusted_num()", "b29c2493": "token(uint256,string,uint8,string)", +"b29c299b": "TOTAL_RATE()", "b29c62f4": "myAccount()", +"b29c7444": "startTimelock()", "b29cbcec": "LogChangeMultiSigAddress(address)", +"b29cd40f": "depositAddressOf(address)", +"b29ce5a0": "yourStakedTRY(address)", +"b29d4c44": "LogBetResult(address,bytes32,uint256)", "b29d7914": "getRefResults(uint256)", +"b29e0ce2": "stakeInMine(address,uint256)", "b29e201c": "spread(address,address[],uint256[])", +"b29e522c": "getValues(uint256)", "b29e9909": "sCVars()", +"b29ed7de": "isNeedStaked()", "b29f0835": "doIt()", +"b29f199e": "getAmount0DeltaSignedInvariants(uint160,uint160,int128)", "b29f2e77": "sendWarriors(address,address,uint256)", "b29f731d": "__tinyOracleCallback(uint256,bytes)", "b29f7f9e": "removeODEMClaim(address,bytes32)", +"b29f9a61": "isFrozen(address,uint256)", "b29f9d3b": "unfreezeAccountWithToken(address,uint256)", +"b29fce38": "handoverTramsMintage(address)", "b2a02ff1": "seize(address,address,uint256)", +"b2a044aa": "memberConvertAVECtoONUS(uint256)", +"b2a04ab2": "addRawMaterialToDrug(string,string)", "b2a072c6": "passUndistributedEther()", "b2a082b9": "suicaId()", +"b2a0bc24": "StartSession(uint256,uint256,uint256[10],uint256)", +"b2a0df7d": "REFERENCE_SELF_RATE()", +"b2a0e028": "selfServiceMint(uint256)", "b2a1449b": "out()", "b2a1a022": "getGasPrice(string)", "b2a1c540": "setMemberId(address,uint256)", "b2a1de22": "whitelistedCount()", +"b2a24d9f": "dmmTokenIds(uint256)", "b2a29615": "Criptomedicina1()", "b2a2a4e2": "complianceContract()", +"b2a2b722": "LOCKING_PERIOD()", "b2a3fd05": "WithdrawEth(uint256)", +"b2a442ca": "armAdharmaContingency(address,address,bool)", +"b2a45d28": "token2ProfitShare(address)", "b2a4c897": "createTable()", "b2a4efd4": "MASTERY_THRESHOLD()", +"b2a59c92": "deprecated_getStakerUnlockableTokensOnSmartContract(address,address,uint256)", "b2a5a012": "setTokenReturnRate(uint256)", "b2a5bc70": "_tokenLeft()", +"b2a60456": "inCaseStrategyGetStruck(address,address)", "b2a68466": "OZENToken(uint256)", +"b2a6cef8": "Levels(uint256)", "b2a6d21b": "COMPANY_RESERVE()", "b2a7239d": "sklToken()", "b2a780e4": "BITCLAVE_AMOUNT()", "b2a7d1b7": "AssetsExplorer(address)", +"b2a7e29d": "txCost()", "b2a840c0": "enable(string,uint256)", "b2a87fc3": "targetToAchieve()", +"b2a89491": "SmallerNum()", "b2a8a6f3": "sendFLC(address,address,uint256)", +"b2a8deab": "isKittyCreator(address)", "b2a8ff45": "Tokens_Per_Dollar()", "b2a91457": "OIA()", +"b2a9651d": "setDelayData(address,bytes4,bytes32,uint256)", +"b2a9684a": "maxBnbLimitTotal()", "b2a9ab9c": "getTotalBraggedVolume()", +"b2a9cd89": "zapEthIn(uint256)", "b2aa8291": "MAINSALE_CAP()", "b2aa9f0f": "increaseTotalSupply(address,uint256)", "b2aac51f": "lookupUser(string)", "b2aae005": "getBalanceOf(uint256)", +"b2ab1eae": "holly()", "b2ab526d": "approveUsers(address[])", "b2ab530e": "testFailRetractLatestRevisionNotUpdatable()", "b2ab70ba": "getMaxIterationsForRequestDividends()", +"b2ab982b": "spamPerBlock()", "b2ac1bbe": "buyInternal(address)", "b2ac5407": "GMRTokenManager(address)", +"b2aca819": "beneficiaryCirculationSupply()", "b2acbc13": "isOwner(bytes8,address)", "b2ad1993": "BalanceNum()", "b2ad35c0": "distributor_address()", "b2ad3d44": "updateComplianceProof(bytes32,bytes32)", +"b2ae48f0": "dfTokenizedStrategy()", +"b2ae658e": "getContractPercent()", "b2aeb260": "setHiringDone(address,uint256,address)", +"b2aef26b": "transferCheckerAddress()", +"b2af127c": "emergencyWithdrawTokens(address)", +"b2af7399": "bigFunCardMetadataUri(uint256)", "b2af9362": "isValidSignature(uint256,bytes)", +"b2afe582": "AuthorizedOwnerRemoved(address)", "b2b02109": "partnerSaleTokensAvailable()", +"b2b09ad9": "auctionsById(uint256)", "b2b0aefb": "verifyPendingShares(uint256[],uint256[],uint256,uint256[],uint256[],bytes,bytes,uint256)", "b2b106d6": "participate_in_arbits_presale_crypto()", +"b2b158ae": "WithdrawAdvisor(address,uint256)", "b2b158e8": "setHolderAmount(uint256)", +"b2b192e6": "urnCan(address,address)", "b2b28679": "getDelegationID(address,address)", +"b2b32887": "withdrawLp(address)", "b2b3abb1": "removeOrderFromList(bytes32)", +"b2b3f231": "importLoan(address,address,address,uint256)", +"b2b458e1": "approve_692(address,uint256)", "b2b45df5": "init(address,string,string)", "b2b4ae25": "isEntitled(address,address)", +"b2b57f0e": "transferInDoWhileLoop(uint256)", +"b2b5be09": "setIdentity(uint256,address,string)", +"b2b5c631": "setInstructionGas(uint256,uint256)", "b2b5d93c": "Stop(bytes32)", "b2b5f0cf": "IOBT()", "b2b5f86f": "getLocality()", "b2b5fbf5": "subDroneItem(address,uint256,uint256)", +"b2b64ec3": "NewSelfHybridizationPrice(uint256)", +"b2b6a8be": "getGlobalDistributionTimestamp()", "b2b6e37e": "_min256(uint256,uint256)", +"b2b6fd22": "NickUnset(string,address)", +"b2b7278d": "yourStakedYFICG(address)", "b2b74405": "PizzaParlor(address)", "b2b7d0ce": "HakataCoin()", "b2b877c1": "MithrilValkyrie()", +"b2b8b261": "_farm(bool)", +"b2b8b7dc": "COMP_ADDRESS()", +"b2b8d434": "removeSupportedToken(uint256)", "b2b95adc": "finalizeChangeInsurer()", "b2b96792": "proposeSettlement(uint256,uint256)", "b2b98ed2": "Winner()", "b2b99ec9": "removeNode(address)", +"b2b9f391": "ListLog(address,uint8,bool)", "b2ba0aa5": "feesPer10000()", "b2ba97de": "team_and_angel_beneficiary()", +"b2baa33e": "getCurrentEpochEarliestEndTimeInSeconds()", "b2bab02a": "startIssue()", "b2bae511": "initSiteRewards(uint256)", +"b2baea81": "depositedTokensForPredictionByAddress(address,uint256)", "b2baede4": "getListingContractAddress()", "b2bb419f": "ActivateEscrow(uint256)", "b2bb72bf": "getIndexInfo()", "b2bbac16": "firstWeekPreICOBonusEstimate()", "b2bbae69": "payForVote(address,bytes32,uint256)", "b2bbe75e": "Sunshine()", +"b2bbefd2": "trigger3(address)", +"b2bc0d84": "ProposalPassed(uint8,uint256,address)", +"b2bc12c8": "defaultUserCap()", "b2bc2f68": "Kitcoins()", "b2bc6c19": "PRICE_11()", "b2bcf495": "_releasableAmount(address)", +"b2bd62fa": "getuseOraclize()", "b2bd96b2": "AcceptsFUNDS(address)", "b2bdc6b3": "adminAddMonument(string,uint256,uint16)", +"b2bde85f": "forLaterProgress()", "b2bdfa7b": "_owner()", +"b2bdff6e": "ASSESSOR_ADMIN()", +"b2be6700": "buy(address[],uint256,bool)", "b2be8180": "TombCore()", "b2be8a0d": "getUserWalletTokenBalance(address,address)", +"b2be9117": "makeCollateralBag(address)", "b2bea9c1": "releasePurchasedTo(address,uint256)", "b2bec979": "cashOutCar(uint32)", "b2bf731d": "SPECTRE_BOUNTY_ADVISORY_DEV_TEAM_ALLOC()", +"b2bf7eae": "transferTokenFrom(address,address,uint256,uint256,uint256,bytes32,bytes)", "b2bfd948": "checkNumbers(uint8[3])", +"b2bffcc3": "updatePrice(bytes32[],uint256[])", +"b2c0112e": "setTurbulenceUpdator(address)", "b2c09c92": "gameWithdrawFrom(address)", +"b2c0ac17": "MintToken(address,address,uint256)", +"b2c0ccc8": "getCurrentRoundBalance()", +"b2c128de": "buyTokenForEth(uint256)", "b2c15f29": "updateLastTime(bytes32,bytes32)", "b2c1d7dc": "BGToken()", +"b2c1e0de": "isBlockListed(address)", "b2c2196f": "MxRecordChanged(bytes32,address)", +"b2c21c91": "leaveMessage(string,address)", +"b2c24bca": "ubn(address)", "b2c26f94": "updateParameterValue(bytes32,uint256)", "b2c2921a": "TeamBox()", +"b2c2f190": "setDeliveryTerms(bytes32)", +"b2c323ce": "deployToken(uint256,string,string,uint8)", "b2c3429d": "VouchCoin()", "b2c3609b": "Play(uint8)", +"b2c3f8a2": "setToken(address,address,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"b2c43bac": "updateLexDAO(address)", +"b2c4cc1f": "updateWallet(address,uint256)", "b2c50b92": "retryWinners()", +"b2c56c99": "hotMode()", "b2c5b208": "_returnReturnData(bool)", +"b2c5fb1e": "gotFullValidSolution()", "b2c60132": "wingsWallet()", "b2c60690": "finalizeVoting(address)", "b2c62d46": "endClaim()", "b2c652f3": "getMarkets(uint256[128])", "b2c6b6dd": "preSaleContract()", +"b2c710cc": "setRedeemTime(uint256)", +"b2c713b6": "notAccept(uint256,uint256)", +"b2c77626": "_calcRedemptionRate(uint256)", "b2c7c90d": "bitcoin_ratio()", +"b2c9336d": "setAutoAllocateThreshold(uint256)", +"b2c93c16": "numberOfACOTokensNegotiated()", +"b2c94ee6": "setPrefixURI(string)", +"b2c95ed5": "trashOf(address)", +"b2c96d4f": "update_rxp_ratio(uint256)", +"b2ca23cd": "_lastUpdate()", "b2ca38fe": "GAP()", "b2ca3ec4": "securityGuard()", +"b2ca6f02": "editAllowedReferrers(address,bool)", "b2cad9b7": "getLevel(uint32)", +"b2cae101": "buyWithLimitCall(address,address,uint256,uint256,address,uint8,uint256)", "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()", +"b2cb7a59": "loginUser(uint256,string)", "b2cb9f05": "Total_Deposited()", "b2cc0eb3": "SpaceCoinToken(address,string,string,uint256,uint256)", "b2cc36fc": "restoreFromColdWallet()", "b2cc4165": "getOrderAmount(address,address,uint256,address)", "b2cca39d": "pausedTime()", +"b2ccbdb0": "csalePrice()", "b2ccc4ab": "getFameBalance(address)", "b2ccda0e": "setPrimaryOperator(address)", "b2cd67ef": "Klein()", +"b2cd7cd3": "testMintToken()", "b2cda083": "PassCommitteeRoom(address)", +"b2cedc63": "sendDec(uint256)", "b2cefd2f": "LiteToken()", +"b2cf54ea": "amountInEth(address,uint256)", "b2cf9814": "assetManagerIncome(address)", "b2cfdfda": "stringToArray(string,string)", +"b2cfea3e": "gx_total_supply()", +"b2d05577": "getChunk(uint8,uint8)", "b2d111f6": "maxGasPriceValue()", "b2d1289b": "DepositManager(address)", +"b2d12c10": "getAggregatorWarningFlags()", "b2d138d2": "rspScience()", "b2d14545": "fbytes2(bytes2)", "b2d1573f": "getUserRank(address)", +"b2d162e0": "deliveryToken(bool)", "b2d1f9be": "buyStar(uint256,string,string)", +"b2d20597": "delTokenFromContract(uint256)", +"b2d234fb": "setFreeAddress(address)", "b2d23b7d": "fetchVoteResult()", "b2d27832": "vestingPeriodTime()", +"b2d2900f": "rewardStartBlock()", "b2d2c1de": "withdrawProfit(address,address)", +"b2d2f0ab": "GetPairFromTokens(address,address)", +"b2d2f998": "getCharityProfit()", "b2d318f7": "VeteranCoin(uint256,address)", "b2d37165": "startMinting(bool)", "b2d37e95": "remove_order(uint32)", +"b2d3b917": "swapRecentFst()", +"b2d3d72e": "PERASupply()", "b2d3e85e": "isPeriodAllTokensSold(uint256)", "b2d444df": "TIM6(uint256,string,uint8,string)", "b2d48237": "refferalsRateBonus()", @@ -102342,24 +187243,51 @@ "b2d5362d": "contractTokenBalance(string)", "b2d5ae44": "getRefund()", "b2d5e8b1": "VALUE_OF_UTS()", +"b2d679de": "swapENJtoDYT(uint256)", +"b2d681c3": "trustAddr()", "b2d6bc83": "fundCapital()", +"b2d6f922": "addtoken(uint256)", "b2d6fd0b": "id_for_address(address,address,address)", +"b2d7abc1": "poolTokensForHolder(address)", +"b2d8ef39": "_inkAddress()", "b2d8efe0": "crowdsaleOpen()", +"b2d966ac": "setLoliAddress(address)", "b2d96b81": "safeAssetData(uint256)", "b2da302b": "Thrill()", +"b2da4a1a": "grantReferrer(address)", +"b2da61b4": "MAX_BEES_PER_TARIFF()", +"b2dabdc5": "withdrawBonusUSDT()", "b2dad155": "trim(string)", "b2dad25d": "getNameOfAddress(address)", "b2dae885": "SpecialArrays()", "b2db1d23": "regularMaxPerPerson()", +"b2db6c81": "sown()", +"b2db919b": "createFee()", +"b2dc6fa6": "TwoRockets(address,uint256)", +"b2dc7115": "stopSelling()", +"b2dcb3a1": "payrate2()", +"b2dced0b": "setStorageAddress(bytes32,address)", "b2dd5c07": "registered(address)", +"b2dd6f79": "addClaimVotemember(uint256,uint256)", +"b2dd8472": "allowLocalBuy()", +"b2dd859f": "swap(address,address,uint256,uint256,address[],bytes,uint256[],uint256[],uint256)", "b2dda6b5": "totalEthReleased()", +"b2ddc255": "finishChangePercentTradeTrigger()", "b2de1a3f": "CONTRACT_PROVIDER_ADDRESS()", +"b2deae83": "changeDelegatedVotingPeriod(uint64)", "b2df8456": "sponge(uint256[9])", "b2df8bad": "getAvailableCoinsForCurrentStage()", "b2dfa399": "ZRX_TOKEN_ADDR()", +"b2dfcf21": "approve_342(address,uint256)", +"b2e01f65": "Looser(address,uint256)", "b2e02430": "divRate()", "b2e02fc1": "addRefund(uint256,uint8)", "b2e0baee": "SunContractIco(uint256,address)", +"b2e0df96": "setMaxBoost(uint256)", +"b2e0f6e7": "cancelAndRefundFor(address,uint8,bytes32,bytes32,uint256)", +"b2e16306": "emergencyWithdrawRewards()", +"b2e17607": "YearEndClearance(uint256,uint256,uint256)", +"b2e1b1db": "tokenProductName(uint256)", "b2e235c2": "BitBall()", "b2e2c1c9": "updateCondition(uint256,uint256,uint256,uint256)", "b2e2c75f": "totalUsed()", @@ -102370,21 +187298,40 @@ "b2e3d212": "IndexCoin()", "b2e4c183": "preICOBonusPercent()", "b2e4d35d": "validate(uint256,uint256,uint256,uint256,string,string,string)", +"b2e4ec10": "h(bytes)", "b2e545ac": "TokenGreeneum(uint256,string,uint8,string)", "b2e5d3ba": "getBtcRate()", +"b2e63575": "delistToken(string,string)", +"b2e635f6": "_byteNextFundAddress()", +"b2e65de7": "MarketCreated(bytes32,string,string,address,address,address,bytes32[],uint256,int256,int256,uint8)", +"b2e6b912": "getAdminAddress()", "b2e6ceeb": "takeOwnership(uint256)", "b2e752cb": "MINCAP_TOKENS()", +"b2e767b9": "alreadySent(bytes32)", "b2e774ce": "deliver(address,uint256,bytes32)", "b2e7c288": "recipientString()", +"b2e7c733": "_latestTimeAddLp()", "b2e85b67": "getPlayerStatus(address,uint256)", +"b2e8fc2b": "queryValidatorInfo(uint256)", +"b2e92898": "currentEmployeesPool()", "b2e94e78": "stage1_start()", +"b2e9949d": "operations(uint256)", "b2ea073f": "setGeneScienceAddress(address,address)", "b2ea088d": "returnUnsold()", +"b2ea08ed": "setPolls(address)", "b2ea0a39": "changeMinDonationLimit(uint256)", +"b2ea7054": "MAX_LIQUIDATION_RATIO()", +"b2ea8869": "mintToOne(address,uint256,string,string,string,string)", "b2ead7bb": "fundsOut()", "b2eafd57": "getRewarder(uint256)", +"b2eb1369": "getHunters(uint256[])", "b2ebe1c5": "_determineCharacterType(uint256)", +"b2ed1590": "drawAndSend(uint256,uint256,address)", "b2ed26f6": "addresses3(uint256)", +"b2ed32c7": "setGlobalShutdown(address)", +"b2ed8110": "BRR_RATE()", +"b2ee2f01": "getLatestPrice(bytes32)", +"b2ee572f": "TransferLockUp(address,uint256,uint256)", "b2ee95f9": "dateRelease6()", "b2eed299": "getPOOL_edit_28()", "b2ef089a": "isStateTokensale()", @@ -102392,164 +187339,324 @@ "b2f05133": "set_trader(address)", "b2f0575c": "FooMintToken(int256)", "b2f094de": "BittechPresale(address)", +"b2f0bb33": "approve_531(address,uint256)", "b2f106c0": "determineReward(bytes32)", "b2f1bb5b": "tellMeASecret(string)", "b2f1fe99": "refundManyTransaction(uint256[])", +"b2f229c8": "findUpline(address,uint8,uint8)", "b2f2303a": "BreakbitsERC20Token()", +"b2f2328b": "callNum(address)", "b2f24225": "set_minDETsPerReturnMoreThan(uint256)", "b2f2588b": "sortNumbers(uint8[3])", "b2f2b06d": "_createCar(string,address,uint256)", "b2f3319e": "ToggleTestMode(bool)", +"b2f35bdd": "payeesPaymentAddress(bytes32,uint256)", +"b2f3994f": "setbuyerPoolAddress(address)", "b2f3d299": "loadFunds()", "b2f3ded4": "allMarketsFinalized()", "b2f40531": "shutdownTransactions(address)", +"b2f4201d": "getPowerCurrent(address,uint8)", +"b2f4b44a": "updateBoosts(uint256[],uint256[])", "b2f4bdb0": "createdTime()", +"b2f4d6e0": "fail(bool)", "b2f5a54c": "getInvestors()", +"b2f5db01": "startLoan(uint256)", +"b2f5e6c2": "allowedReceiver(address)", +"b2f69472": "membersNLF(uint256,address)", +"b2f6ba61": "CountAllWork()", +"b2f6e708": "getCopyright(string)", +"b2f7543a": "usersActiveX6Levels(address,uint8)", "b2f7e989": "sourceTokens()", +"b2f87643": "removeSender(address)", +"b2f91c5b": "g0(uint256)", +"b2f951dd": "publicSaleTokensPerETH()", +"b2f9ac6b": "treasuryFeeBase()", "b2f9c5b9": "canTransfer(bytes32,address,uint256,bytes)", +"b2f9f571": "_balance1()", "b2fa1c9e": "isComplete()", "b2fa9206": "cancelIco()", "b2fadc78": "_getStorage()", +"b2fae454": "stakingTokenTaxes()", +"b2faec38": "politicianIndexToOwner(uint256)", +"b2fb30cb": "relock(uint256,uint256)", "b2fb3b90": "cancelActiveAuctionWhenPaused(uint40)", "b2fcb395": "GoldenBullChainToken()", "b2fce4ea": "delegateVote(int256,address)", +"b2fce5d7": "sendCommission(address,uint256)", +"b2fd231f": "currentPid()", +"b2fd232f": "updateSmolTingPotAddress(address)", +"b2fd2496": "fCashtoCurrentCashJuly()", "b2fd3a7d": "getHardcapUsd()", +"b2fe3d8e": "WhitelistSettings(uint256)", +"b2fe6034": "blockDecreaseWhenDevalue()", +"b2fe8f14": "acceptLease(uint256,bool)", +"b2fecc40": "_stakeLevel()", "b2fed358": "getsafemode()", +"b2ff38dd": "approve_174(address,uint256)", +"b2ff5b6c": "executeRelayedTx(uint256,address,bytes,bytes)", "b2ff7945": "setARR(address)", "b3002be7": "burnNSPs(address,uint256)", "b30054b4": "set_address_GIC(address,address)", "b3007dc6": "rateFirstWeek()", +"b300d016": "_calculateReferrerReward(uint256,uint256)", +"b30160c2": "getTokenInfo(address,address,address)", +"b3017d05": "lockLogs(address,address,uint256,uint256,bool)", +"b301e9f9": "sendETHtoContract(uint256)", +"b3028019": "getBlockTime(address)", +"b30286ca": "countMessages(address)", +"b302ce8f": "publish(bytes32,uint256,uint256,uint256,uint256,bytes32)", "b302ea1e": "setRaindropAddress(address)", "b302ec4b": "LocklistedAddress()", "b30300d7": "_increaseAllowance(address,uint256)", "b3034371": "unilateralRuling(uint8,uint256,uint256)", +"b30347da": "scanNFT(address)", "b30387a4": "gen0Count()", "b30390ce": "registerItem(uint256,uint256,bytes32,bytes32,bytes32)", "b303cec0": "addAccountReader(address)", "b303dcbd": "Owned()", "b303f9f7": "releaseHTOSupply(address)", +"b303fc75": "firstReserve(uint256,address)", "b304376c": "begins()", "b30475b6": "totalWeiClaimed()", +"b304a2ad": "pauseUnpausePresale(bool)", "b304b2e1": "allocated()", "b305836f": "feeWithdrawTokenAll(address)", +"b30643d9": "borrowingFeeTokensPaid(address)", "b3066d49": "setContracts(address,address,address)", "b3070c12": "ADVISOR_REWARD()", "b3074b8a": "SUTokenContract()", "b30779b1": "payCommission()", +"b307b704": "period3()", +"b307fc6d": "memberList(uint256)", "b3082d25": "CreateCards(uint256,uint256,uint256,uint256,uint256,bool)", "b30841d9": "totalEras()", +"b3084f08": "keySoldInterfaceId()", +"b308ac97": "buyLP(uint256)", +"b308b709": "userIDCounter()", +"b308e32f": "balanceLo(address,uint256)", +"b30906d4": "entries(uint256)", +"b30949d9": "createInitialReporter(address,address,address)", "b3097a08": "heldTotal()", +"b309a91a": "Contribute()", +"b309c36b": "seasonTradable(uint256)", +"b30a0e3b": "getLockedDai()", +"b30a7adb": "insertdetails(string,string,string,string)", "b30ab349": "getContent(address)", +"b30b515e": "divProxy(uint256,uint256)", +"b30bc9f2": "adjustMarkup(uint256)", "b30bca06": "sum(uint8[])", +"b30c5803": "transferSigil(address,uint16)", +"b30ca4d8": "createNewEscaperoom(address,string,uint256)", "b30cf414": "unpauseSALE()", +"b30d0bb2": "withdrawSomeCompound(uint256)", "b30d1bb8": "isDisableEther()", "b30d95a0": "changeBonus(uint256,uint256,uint256,uint256,uint256,uint256)", "b30dbc67": "DeNetToken()", "b30e4533": "ABBCToken()", +"b30e5a06": "rollUpFLTeamNetworkEarnings(address,uint256,uint256)", +"b30f0c56": "Obtain(uint256,string)", +"b30f3875": "listTokenForEth(uint256,uint256)", +"b30f4572": "stakeExecutor()", +"b30f5ca9": "BuyItem(address,uint256,uint256)", +"b30fc856": "approve_569(address,uint256)", +"b31062e5": "m_Group_Sum(address)", +"b310bf9c": "differentUser(uint256)", +"b31102e2": "stakesnap(uint256,uint256)", +"b3113b2a": "setLPStaking(address)", "b3113d3f": "hardCapPrivate()", "b311db2f": "setAccountType(address,uint256)", "b311ee0c": "refundClaimDeposit()", "b312dc91": "currentPayout(address,address,bool)", "b31394cb": "_checkThenTransfer(address,address,uint256)", "b3139d38": "updateSlasher(address)", +"b3140ac3": "gameSponsor()", "b3141c69": "localsReptoken(uint256,string,uint8,uint256,string,string)", +"b3143a21": "getMinSellAmount(address)", "b314a984": "burnRemain()", +"b314ccb8": "createTicket(string,string,uint256,uint256,uint256)", +"b314ea79": "LogLoanTaken(address,address,address,address,uint256,uint256,uint256,uint256,bool,bytes32)", "b3154db0": "check(address,address)", "b31567d3": "LogRemoveWhiteListed(address)", "b31597ad": "redeem(bytes32,bytes32)", +"b315ca22": "addIndividualRestriction(address,uint256,uint256,uint256,uint256,uint8)", "b315e453": "multiWithdrawReward(uint256[])", "b31610db": "getIndex(address)", +"b316675e": "confirmTraderOperatorsContract()", +"b316ff89": "getAllReservesTokens()", +"b3174fa1": "phaseLen()", +"b317550b": "LiquidateBorrow(address,address,uint256,address)", "b317d031": "STATUS_PAID()", +"b3187b5a": "Wager(uint256,uint256,uint256,bool,address)", +"b319031c": "isBlacklistable()", +"b31916ba": "TOKEN_FOR_INDIVIDUAL()", +"b3196cad": "VotingRegistry(address)", +"b319ae86": "nextSwapAddress()", "b319c6b7": "cooldownTime()", "b319e9fa": "distributeMultiple(address[],uint256[])", +"b319f139": "claimTokensFromBeingReferred()", +"b31a1398": "arbiterFees()", "b31a17f0": "FtC()", "b31a4047": "_convertBlueprint(string)", "b31a404a": "withdrawOnNoAvailablePlan()", "b31a4e0d": "allocatePresaleTokens(address,uint256,uint64,uint64)", "b31ab1c3": "disconnectOrderUser(address,address,uint256,uint256,address,address)", +"b31b4b0a": "feed(bytes32,address[],uint256[])", "b31ba590": "PlayerCreated(address,uint256)", +"b31c0d88": "approve_737(address,uint256)", "b31c5c64": "kscDecreaseApproval(address,uint256,string)", "b31c710a": "oldToken()", +"b31c796d": "addFeaturedId(uint8,uint256)", +"b31ca879": "partnerMap(uint256,address)", "b31cbe9a": "getAlice(uint256)", "b31cd1be": "secretTaken(bytes32)", +"b31cf2f8": "payByAffiliate(address,uint256,address,address,string)", "b31cf984": "getProgram()", +"b31d10b3": "lockOf(address,uint256)", +"b31d5062": "distributeSame1155s(address,uint256,address[],uint256[])", "b31d61b0": "whitelistAddress(address[])", +"b31d62c8": "_getMineNameByIndex(uint256)", +"b31d63cc": "parseSignature(bytes,uint256)", "b31d7730": "presaleFinalizeAgent()", "b31d8a6f": "FreeTokenAdded(address,uint256)", +"b31da708": "getTotalpTLPHarvest(uint8)", +"b31dc71d": "setImbalanceStepFunction(address,int128[],int128[],int128[],int128[])", "b31dcaad": "timeToUnlockDDHHMM()", "b31e1d4d": "delegateVote(address)", "b31e822b": "isAllowTransfer(address)", "b31e8889": "setParticipantWhitelist(address[],bool)", +"b31edac3": "getPlayersByGame(uint256)", "b31f8f93": "tokensLeft()", +"b31fe388": "StarSell()", +"b320064e": "createERC20Wrapper(bytes)", "b32022e8": "calculateKebabBuySimple(uint256)", "b3204b8b": "setParent(address,address)", "b3204cc3": "setLineUpEnable_pool(address,uint256)", +"b3204cee": "gasGrantAmount()", "b3205410": "getCustomerInfo(address)", "b3206453": "destination(bytes4,bytes)", "b3209136": "WakaWakaCoin()", +"b320b724": "mintNewToken(address,uint256)", +"b320ea80": "ven()", "b320f459": "removeBid(uint256)", "b32142a0": "getProgramPercent(uint256)", "b3215499": "ICOBonusPercent3week()", +"b321659b": "getReferralHistory(address)", "b3219d17": "calculatePurchaseBonus(uint256,uint256)", +"b321d259": "approve_270(address,uint256)", "b322269e": "GameStart(uint256,uint256)", "b32381ee": "addmoney(address,uint256,uint256,uint256)", +"b3241708": "addLCP(address)", +"b3241855": "_splitUint40ToArray(uint256)", "b324816a": "createPaymentsSplitting(address[],uint256[],uint256)", "b324c62a": "fastTokenSale(uint256)", "b324e80d": "depositEscrow(address,uint256)", "b324fb6b": "startTimePreICO()", +"b324fe83": "voucherIdToOwner(uint256)", "b3253e0f": "lastScheduledTopUp()", "b326124b": "tRegSaleStart()", +"b3261f57": "resumePRESALE()", +"b3266cfa": "RoomsAdded(string,uint256)", +"b3268b85": "PerseusUpdate(address,string)", "b326c189": "hasOpenCommissionerAuction(uint128)", +"b326f84e": "getAccountsDebtEntry(address,uint256)", "b32776e1": "getSigner(address,string,address,uint256,bytes32,bytes32,uint8)", +"b3280401": "_ethRateSource(address)", "b3280830": "addLibrarian(address,address)", +"b328441b": "updateRausPoint(uint16,uint16)", +"b329036b": "feeTimeout()", "b3292ff0": "addSuperAdmin(address)", "b329bf5c": "cancelTransfer(bytes32)", +"b32b01d8": "goldKeyCounter()", +"b32b06eb": "sysethnum()", "b32b2805": "getArmyFullData(uint256)", "b32b664f": "wantItForFree(uint256)", +"b32b68ac": "withdrawLiqList(address)", "b32b8e2c": "contains(uint256[],uint256)", +"b32bb42a": "getNoVote(address,address)", "b32c41d7": "crowdsaleTargetUBO()", +"b32c4d8d": "batches(uint256)", "b32c65c8": "contract_version()", "b32c6a25": "GenesisToken()", +"b32c7879": "getVoteVoter(uint256,uint256,uint8)", "b32cb292": "setStartICO(uint256)", "b32cec45": "CROWDSALE_ACCOUNT()", "b32d01c2": "modify_bytes(bytes)", +"b32d4610": "underlyingAmountToATokenAmount(uint256)", "b32dbcd8": "getNumKnights()", "b32dc51c": "totalPhase1Donations()", "b32e02e8": "_getRarePlusRarity(uint32)", "b32e4207": "setzString(string)", +"b32e5522": "stopEndure()", +"b32eaffd": "getDeterministicTokenDecimals(address)", "b32f19f9": "showFreezedTokensAmount(address)", "b32f4b9a": "Barbie()", "b32fab4e": "moneyback()", +"b32fe94f": "incrementBalance(uint256)", +"b3305ce6": "actions(bytes32,address)", +"b3311086": "creationTimestamp()", "b3311309": "SingularityTest5()", +"b332b62b": "setMCAddr(address)", +"b332bd3a": "srAddress()", +"b332c780": "setInvestorLimitForJurisdiction(uint256[],uint256[])", +"b332c822": "setMinRaffleTicketCost(uint256)", +"b332f15d": "global_balance_lotery()", "b3335e6b": "setICOStartDate(uint256)", "b33381fe": "calcAmountEther(address,uint256,uint256)", "b333adfc": "coursesLength()", "b333b0ee": "_stake(bytes32,uint256,uint256,address)", "b333ce0d": "icoFinish()", +"b333de24": "TakeDividends()", "b3344593": "trackingNo()", +"b3349880": "getWithdrawFeePercent()", "b334e90b": "tadpoleReq()", +"b334ed86": "dataProvider()", "b334fd07": "createFincontract(bytes32)", "b3350f03": "forbiddenAction()", "b33527d2": "CreateBAT(address,uint256)", +"b3355ade": "transferToUplineEmerald(address,address,address,address,address,address)", +"b335a5d1": "addTRXserver(string)", "b3369866": "indexOf(uint128[],uint128,bool)", "b336ad83": "getByName(string)", +"b336c1f1": "getAlltime(address)", "b336f8a3": "GetNumberOfRigs()", "b33712c5": "unpauseContract()", "b337a20d": "verifyLockSignature(bytes32,address,address,uint256,uint256,bytes32,bytes)", +"b337a926": "sendAirdrop()", +"b337d32c": "setPoolCorr(uint256,uint256)", +"b338b4a1": "createBundle(string,uint256,address[],uint256[],address,uint256,uint8,uint256,uint256[])", +"b338d2a5": "createMilestonePostponingProposal(uint256)", "b33926cb": "owner_withdraw(uint256)", +"b33960b5": "stakeWithERC20(address,address,uint256)", +"b33a0a1e": "submitPredWindow(uint256[])", "b33a10de": "cards_titanium(uint256)", "b33a2ea0": "lastBlock_v18Hash_uint256()", +"b33a4547": "purchasingToken()", +"b33a5a00": "setMaintenanceModeStaking(bool)", "b33a8a11": "setTokenReference(address)", "b33aca37": "Mcoin(uint256,string,uint8,string)", "b33adbf1": "darPremio()", +"b33bfec7": "findBlankSlot(uint256,uint256,uint256,bool,uint256)", "b33c24b2": "createERC20TokenNetwork(address,address,uint256,uint256)", "b33c4b1f": "end_now()", "b33cb8f6": "CrowdsalePaused()", "b33ceb2c": "AddGossip(address,string)", +"b33d3650": "subsidizedRebalancePoolRewards()", +"b33d5fd2": "soldAreas(uint256)", +"b33d96b0": "getFactoryReserveAndWeights(address,address,address)", +"b33dc190": "getPosition(address,address)", +"b33dd713": "getMintingRecipient()", "b33e8ee5": "exchangeTokensById(uint256,uint8,uint8)", +"b33ed508": "startPreICO(uint256)", +"b33f4e9f": "teamPerfitAmuont()", +"b33f78ca": "tokenExists(address)", +"b33f9527": "initialize(address,address,address,address,address,uint256,uint256)", "b33fcc7a": "multiTransfer(uint256[])", +"b34016c4": "userAuctionBidIndexes(address,uint256,uint256)", +"b3404efd": "swapDuration()", "b340a972": "getaddr(address,uint8)", +"b340c4b3": "schains(bytes32)", "b340d8cf": "encodePriceFeed(uint256,uint256,uint256,uint256)", +"b340ec81": "removeValidatorApproval(address,uint256)", "b340f2b4": "showAssetDetails(bytes32)", "b3413d9f": "_forwardFunds()", "b34195a3": "ICOTokensInvested(address,uint256)", @@ -102557,32 +187664,54 @@ "b34244e8": "setCBaddress(address,address)", "b34253be": "FundsVault(address)", "b342d7c0": "genEOS()", +"b342f143": "unFreezeRules(uint256)", +"b3432598": "setOmsxToken(address,uint256)", "b34362be": "setParter(address,uint256,uint256)", +"b34370d9": "claimRewardFromSharePool(address)", "b3446f85": "registerPlayer(string)", "b3447ac9": "getBytes32Values(bytes32)", "b344e002": "saleDeposit()", +"b344f9ab": "pauseCalculator(address)", +"b3452487": "getAllSumAssurance()", +"b3452b0c": "getTotalDeploymentCount()", +"b3461f2f": "tradeEthForDaiAndMintDDai(uint256,uint256,address,bytes,uint256,bytes,bytes)", "b3470e97": "addHashes128()", "b3472edb": "getMaxProfit(uint256)", "b3477201": "createPadlock(string)", +"b3479bad": "whitelist(address,uint256,uint256,uint256)", "b3480369": "_getWaitingBlocks(uint256)", "b3481e61": "updateTeam(address,uint32,uint8[],uint32[])", "b3485dca": "UpdatePrice(uint8,uint32)", "b3487a71": "getBetWaitEndEther()", +"b348a805": "finishPlay()", +"b348b607": "apmNamehash(string)", "b348ddde": "ETH750on54()", "b3490bfc": "allowTransfer(address)", +"b34926bc": "crowdsaleIsOn()", "b34937c9": "feedMessage(uint256,string,string)", "b349b973": "_init()", +"b349c806": "obtenerDeudaPrestamo()", "b349dbdc": "nfsPoolTransfer(address,uint256)", "b349f6c7": "attemptSpend(uint256)", +"b34a3fcf": "emergencyWithdraw(uint16)", +"b34af10f": "FillMaxInterestRate2()", "b34b2c26": "Simpletokenq()", "b34b4f69": "XingchenToken()", "b34b5825": "getAvailablePacks(bytes4)", +"b34baa9e": "TimeUnlocked(address)", "b34c28de": "calculateBurnGoldFee(uint256,uint256,bool)", "b34c3610": "assert1()", +"b34c4e5b": "readyNFTStake()", +"b34c5f25": "getUnderlyingTokenDecimal()", "b34c8afb": "getBaseAmount(address)", +"b34d1ceb": "holdStateStart(address)", +"b34d4539": "Transferred(uint256,address,uint256)", "b34d471d": "bulkCreateLamboSale(uint256,uint256,uint256)", +"b34d71a0": "getTimestampPlusHour()", "b34debac": "canUseResource(address)", "b34e0c47": "getUserScore(address)", +"b34e5134": "FirstStageEndsAtChanged(uint256)", +"b34e71e7": "_arr(address,address,uint256,uint256,uint256,uint256)", "b34e7b9d": "getgamecardlength()", "b34e97e8": "login()", "b34f094f": "INTToken(uint256,string,uint8,string)", @@ -102590,22 +187719,43 @@ "b34f407d": "setPerformer(address)", "b34f43c7": "SVDelegationV0101_1(address)", "b34f594b": "setNodePrice(uint256)", +"b34f59cb": "queryhashcodeused(bytes32)", "b34f7b50": "_generateDiscipleSale(uint256,uint256,uint256,uint256)", +"b34fad41": "emp()", +"b34fae48": "setSqrtEnable(bool)", +"b34fbc5b": "getTotalRewardsAmount(address)", "b350723f": "_guarantedBid(uint256)", "b3508654": "addController(address,bool)", "b3508783": "TOKEN_MAX()", +"b350df5d": "triggerLiquidation(address)", "b35176e2": "show_number_of_days_since_bank_opening()", +"b351f337": "LOG_HealthCheck(bytes32,int256,uint256,int256)", "b3521607": "XYCCTEST()", +"b3526d4c": "owner_fund()", "b3527cfe": "Follow(uint256,address,uint256)", "b3528158": "DASHABI(uint256)", "b352867c": "setFreeExtension(bytes32,bool)", +"b352c562": "leagueRosterContract()", +"b352d4af": "addCollateral(address,bytes32,address,uint256)", +"b352f444": "acceptETH()", +"b3533349": "theArbitral()", "b3535fe2": "_setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", "b35376b5": "getDiamond(string)", +"b3537893": "isEmergencyWithdrawalActive(address)", "b3539c44": "getMintForReportingParticipantTargetValue(int256)", +"b354592a": "test2(uint8,uint16)", +"b3545c01": "buyBackRateUL()", +"b35477e4": "getwergancient()", "b3549265": "coloredTokenCount()", +"b354d5e0": "_voteOnBehalfOfMany(address[],uint256,bool)", +"b354d7e2": "lastTimeBalancePositive(address)", +"b354fe1b": "neonAddress()", "b3559460": "getGenerationSize(uint256)", +"b355bf62": "emergencyWithdraw(uint256,bytes)", +"b356055f": "currentTargetPrice()", "b3562e6e": "getCrowdsaleTier(uint256)", "b356a3a5": "PLATFORM_GROWTH_VESTING_AMOUNT()", +"b356c181": "LetsInvest(address)", "b3570116": "mintIfNecessary(uint256)", "b357a028": "SCISSORS()", "b357a552": "claimAuctionableTokens(uint256)", @@ -102614,231 +187764,439 @@ "b358755e": "testerCanNotReentrant()", "b35893f3": "setExporter()", "b358e375": "JobsManager(address)", +"b3594f87": "pendingSashimi(uint256,address)", +"b3596f07": "getAssetPrice(address)", +"b359b8a7": "setStrategyNo(uint256)", "b359cedd": "getTime(string)", +"b35a30ab": "func_00001BDA(uint256,uint256)", "b35ae7e8": "ViotToken()", +"b35b1aeb": "PlatformTokenApp()", +"b35b26b4": "holderStep(uint8,address)", +"b35b712d": "ContractTransfer(address,uint256,bytes)", +"b35b91e3": "initializeMigrator()", +"b35bf373": "zCancelProposal(uint256)", +"b35c7218": "teamVestingTime()", +"b35cf9a0": "getVelocity()", +"b35dceab": "_increaseCollateral(uint256)", +"b35e1a27": "stakingHolder()", "b35e7d45": "setCriticalBucket(uint256)", "b35eeb46": "GenHeliosCoin()", +"b35f7284": "migrateToUniswap(address,address,uint256)", +"b35f9eaa": "idS(uint256)", +"b35fb542": "claimERC20(address,uint256)", +"b35fc3cc": "addrInOwners(address)", +"b3603889": "lastManualUpdateTime()", +"b360cfbb": "myReward(address)", "b3610f37": "destroyCar()", "b36117b2": "create18FilmsTokens()", +"b3613f11": "getBRR()", "b36216d3": "allTokensDecimalsBalancesWeights()", "b3621e1a": "addAddress(address[])", "b36234c2": "AltruismMode(address,uint256,uint256)", "b36292eb": "TestingCoin()", "b3629f79": "get_proposal_by_row(uint256)", +"b363873d": "genesisPhase()", "b3643e3a": "createSale(address,uint256)", +"b36543a9": "getVoiceCredits(address,bytes)", +"b36696ee": "_getMineLPDifficultyByName(string)", +"b366e299": "setupDefaultAdmin(address)", +"b367026b": "yourUNEXBalance(address)", +"b3670f9e": "curateIssues(address[],uint256[],uint256[],string,string,uint256[],uint256[],uint256)", "b36752ee": "addressFoundersShare()", +"b36760a3": "duration(address)", "b36763c9": "_owoAmount()", +"b367940e": "minimumRaiseAchieved()", "b367fb11": "platformTokens()", +"b3687351": "deleteAndBuyRaffleTickets(uint256,uint256,uint256)", "b36877c9": "DragonKing(address,address,uint8,uint8,uint8,uint16[])", +"b368995f": "setMaxOutLen(uint256)", "b368cb10": "getProviderInvitedUser(uint256,address)", "b369940c": "wingsETHRewardsPercent()", "b3699d0b": "withdrawedTeamCounter()", "b369af71": "intervalOf(uint256)", "b36a06b5": "preSaleFirstBonus()", "b36a0b15": "getSignDetails(uint256,uint8)", +"b36a0c30": "getSeats_SideA(uint256)", +"b36a31c6": "Average()", +"b36a5350": "reginsterProducer(string)", +"b36a9a7c": "checkPermissions(address,bytes32)", "b36ada82": "mintingOracle()", "b36af005": "Menu04()", +"b36afdcd": "_canVote(uint256,address)", +"b36b47f4": "set_ROUND_2_END_TIME(uint256)", +"b36b72df": "setOracleNotifierAddress(address)", "b36b9ffd": "bountyManager()", "b36ba252": "getSellOrderPrices()", "b36c1284": "MaxSupply()", "b36c14fe": "getWhitelistUser(address)", "b36c8022": "UnfreezeAccount(address)", "b36c973e": "payOutWinner(address)", +"b36d6919": "isBlackList(address)", "b36d829b": "getwinningaddress01()", +"b36dc641": "convertTokenToWBNB(address[])", "b36df681": "ExecutableBase()", +"b36df898": "EventEnergyUpdate(address,uint256,uint256,uint256)", +"b36e9826": "syncList(address)", +"b36ea4d4": "TransfersThawed(bool)", "b36eaad8": "createUserMeme(address,uint256,string,uint256)", "b36f2c30": "maxWeiUnverified()", "b36f8e8f": "allowManager()", +"b36fec57": "getPeriodDuration()", "b36fef76": "promoFishCommission()", +"b370b9dc": "changeOpenMarketFee(uint256)", +"b370ef99": "ChangeBurnPause(uint256)", "b3710a80": "infraEthWallet()", "b37139e6": "reduceCD(uint256,uint256)", +"b371aa4e": "userList(uint256,address)", +"b371c17f": "SYSTEM_FEE_COEFF()", +"b371d42b": "UnLock(address,uint256)", +"b371deac": "isCustomFeeSet(address)", "b37217a4": "getRandomNumber(uint256)", "b372bd31": "getCommissionBalanceWEIInfo()", +"b3731c78": "releaseAuthFlip(bytes32)", "b373a48b": "getOneself()", "b373a61c": "priceRandomFight2Death()", "b373a6cd": "sendTokens(address[])", +"b373e553": "supplyNumber()", "b373f167": "transfer(address,uint256,bytes,string,bool)", +"b374012b": "store(bytes)", "b3745afa": "changeAllocator(address)", "b3746849": "buyTokens(address,bytes)", "b374db9a": "secondsTimeLockedDefault()", "b3753107": "gweiBBDPriceInWei()", "b375603c": "raffleId()", "b375a72c": "getHashPicture(bytes32)", +"b375a790": "setdiscount(int256)", "b375b95a": "getMaxRankingSpots()", +"b375bb64": "duckToken()", "b3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "b37610ad": "getKey(uint16,uint16)", +"b3762557": "migration_id()", +"b3762e93": "Consume(address,uint256)", "b37681fd": "SetPlayerID(bytes32,uint16)", "b376feba": "_unsafeTransfer(address,uint256)", +"b377a9d5": "cancelPendingTransfer(address,bytes32)", +"b378772a": "secondBoardRoomFund()", "b378e89b": "CreateToken(address,uint256)", +"b378fd30": "maxCrowdSupply()", "b37983e2": "gasRequired()", +"b3799b55": "returnStatusPre(address)", "b379d235": "setFlowerAuctionAddress(address)", "b37a336d": "VESTING_DIV_RATE()", +"b37a4621": "setApy(uint32)", "b37a5de7": "throughputToday()", "b37a6a2c": "restartPrivatePlacement()", +"b37b195a": "boostWithLoan(uint256[5],address[3],bytes)", +"b37b3b04": "ashwin2(uint256,uint256)", "b37bcd94": "discountPeriod()", "b37c191b": "rank(uint256)", +"b37c2e39": "MIN_SKL_AMOUNT_TO_PURCHASE_WIZARD()", +"b37c5515": "addCollateral(address,uint256,address)", "b37c7dc0": "sub256(uint256,uint256)", +"b37c9606": "getTokenKey(uint256)", "b37cc2f0": "getUserEventsLength(address)", "b37d61f8": "checkMyBalance()", "b37d97b5": "addMany(address[])", +"b37da7c5": "stakeYTX(uint256)", +"b37dbaf6": "removeAttackContract(address)", "b37dcce2": "trainingFeeMultiplier()", +"b37e47e2": "getRule(address)", +"b37e4e35": "getCoinType(address)", +"b37ea9c9": "_anftMapIndex(uint256)", +"b37ebbd7": "getDefaultVoteParams(uint8)", "b37edb66": "FundingEntity()", "b37edfb6": "checkChangeOwnerArgs(uint256,uint256)", "b37f17ee": "migratingAmountBooks(address,address)", +"b37f2590": "updateRewards(uint256,uint256,uint256)", +"b37fd190": "rescueTokens(address,uint256,address)", +"b37fda04": "MULTI_ASSET_PROXY_ID()", "b3803956": "showPlayerFullScores(address)", "b380b0d4": "setProfitPercentage(bytes32,uint256)", +"b380b202": "setMarketPrice(uint256)", "b380beac": "setTotalWizzPandaOf(uint256,uint256)", "b380d365": "resolveDisputeSeller(string)", +"b38109f0": "hightPrice()", "b381cfe5": "iotpowerToken()", +"b381f7d2": "mintUnwrappedResources(uint256,address,uint256,bool)", "b3822da8": "getContents(uint256[])", +"b3823618": "setChangeManager(address)", "b38260fe": "totalAngelCardSeries()", +"b38296c0": "EarlyExit()", "b382b0d6": "createContract(uint256,uint8,uint256,uint256,address,address,address,address,address)", "b38336de": "getCoinAmount(uint256)", "b3834ed4": "getRefunded()", "b383616d": "setSupplyAgent(address,uint256)", "b38400ff": "getEndedGames()", +"b3840b7d": "testTokensBurn_beta(address,uint256,uint256)", "b38415f3": "getConfigBytes(bytes)", +"b38456d8": "Certificados(string)", "b384abef": "vote(uint256,uint256)", "b384e9b4": "incentivisationFundAddress()", +"b38502b4": "pendingCoinsBonus(address)", "b3850b2a": "total_reward_amount()", +"b3852029": "rSTAKD()", +"b385bea1": "totalSupplyOfTokens()", "b385e7b6": "playerPrizes(address,uint256)", +"b3867118": "swapEthToPiptByPoolOut(uint256)", +"b38697f6": "lamboIndexToOwner(uint256)", +"b3872dc7": "Yield(address)", +"b38779eb": "getFeeAddr()", +"b38780dd": "RateUpdated(uint256,uint256)", +"b3879586": "trex()", +"b3879598": "withdrawMultipleWithPermit(uint256[],uint256[],address,uint256,uint8[],bytes32[],bytes32[])", "b387ed6d": "getCompetitionStatusOfHopefuls()", "b387ef92": "currentOwner()", "b38854be": "ownable()", +"b388ed26": "bearishBaseAssetAllocation()", +"b38900f6": "calculateBondInterest(uint256,uint256,uint256)", "b38928c5": "Vineyard(address)", +"b38988f7": "hasCollateral(address)", +"b38a1620": "wipe(uint256)", +"b38aab9d": "claimFor(address[])", +"b38ad8e7": "FreezeKeeper(address)", +"b38b1333": "getTheoDoi(string)", "b38b2261": "addValidation(bytes32)", +"b38b4509": "batchMintAllTypes(address[])", +"b38b8bbc": "betBalances(address,uint256,uint8)", "b38bf811": "setMessagesSigned(bytes32,bool)", "b38c1504": "TOTAL_LBTOKEN_SUPPLY()", "b38c7e3a": "getStrong()", +"b38ce2de": "AllTimeStaked()", "b38ce3e7": "deedIds(uint256)", +"b38d1b15": "approveModule(address,address)", "b38d3ab4": "attackeePrizeByToken(bytes32,address,address)", +"b38db065": "generatePositionHash(address,bytes32,bool)", +"b38de030": "depositKittiesAndMintTokens(uint256[])", "b38de8ce": "DelGoods(uint32)", +"b38eae52": "alocationBounty()", "b38f974a": "buyFood(uint32)", "b38fb813": "crowdsaleInit()", "b38fced1": "availableThemedSpinners()", +"b38fe3fc": "_saleOnCurrency(uint256)", +"b3901253": "removeBypassByMethod(uint32,bytes4)", "b3908dc1": "IPXToken()", +"b390bb56": "BuildAsset(uint256)", "b390c0ab": "burn(uint256,uint256)", +"b39179af": "isInviteReward(address)", +"b3918922": "viewMonthlyBenefitAmount(address,uint256,uint256)", "b391983c": "getLimitAndPrice(uint256)", +"b391c508": "claim(bytes32[])", +"b3922495": "UnAuthorized(address)", "b3922c42": "TOKEN_INVESTORS()", +"b3923a99": "getAmountsIn(address,address,uint256,address[])", "b3924a58": "GreenMining()", "b3927eeb": "Expended()", +"b392c6a3": "setNCTPerBlock(uint256)", +"b3932da4": "Approved(uint256,bool)", "b3935caa": "trivenewstestToken()", "b3936f95": "basis(uint256,uint256)", "b3938edc": "changeETHUSD(uint256)", "b393a5b5": "setKingdomCreationFeeWeiRP(uint256)", "b393a759": "ipfsSet(string)", +"b393be03": "openBetSession(uint256,uint256,uint256)", "b393fa46": "fundersClaimed()", "b3942cbd": "setTransferAllowed(bool)", +"b3944d52": "getPoolLength()", "b3947c17": "muldiv(uint256,uint256,uint256)", +"b3948979": "TaoNhom()", +"b394c794": "indexarray(uint256)", +"b394ce2c": "logReportingFeeChanged(uint256)", +"b394e377": "indicatorForTheNext8Hrs()", "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)", +"b39688b1": "XUSDPerBlock()", +"b3969992": "interestApr()", "b396d7ad": "heapSort(uint256[])", "b3970f27": "updateHpbNodeBatch(address[],bytes32[],bytes32[])", "b397657d": "endInitialization()", +"b397afbd": "GetCampaignTotalContributors(uint24)", +"b397eaeb": "mintersLength_()", "b397ffd8": "m_foundersTokensStorage()", +"b39832d4": "orderPayout(string,uint256,string)", "b39852f9": "createGame(uint256,uint256,uint256,uint256,uint256,uint8)", "b398924d": "RangeGameProcess(address,uint256)", "b398e098": "setMaxETHAutoContributions(uint256)", +"b398eb21": "getBucketCobj(bytes32)", "b3997703": "Loser(string,string)", +"b3997ac8": "addRoutes(uint256,uint256[])", "b399a9f8": "setFungibleTokenAddress(address,address)", "b399b0bc": "remaining(address)", +"b399d068": "addrOfNestStaking()", "b39a64cd": "getNumCalled()", "b39a69a3": "withdrawPROV(uint256)", "b39a7fbe": "setBattleDeciderAddress(address)", +"b39a808e": "schainsForNodes(uint256,uint256)", +"b39ad3c7": "MIN_CHANGE_PERIOD()", "b39ad6e0": "DonatorInteract(string)", +"b39b5f24": "Authorized(address,uint256)", "b39c2944": "requiredAuthorities()", +"b39c4593": "defaultImplementation()", +"b39c645a": "RoundFinished()", "b39c8739": "Strikes()", "b39ca258": "createOrder(address,bytes32,bytes32,address,uint256,uint256,uint256)", "b39d49fe": "sellNapkins(uint256)", "b39d66d0": "LiipCoin()", "b39d6b7b": "DukatToken()", +"b39d9009": "addWhitelist(address,uint256)", +"b39dca9a": "wrapHegicTest(uint256)", "b39dcb1d": "showDepositEther()", "b39e12cf": "contractManager()", "b39e1c6c": "withdrawDirectDebit(address)", +"b39e5567": "totalUsersClaimed()", "b39e7bc1": "RealEstate(uint256)", +"b39f252d": "tokenTypes(address)", +"b39f2a62": "enforceMaxSingleHolding()", "b39f4171": "payForOther(address)", "b39f4483": "setPOOL_edit_28(string)", +"b39f6322": "callG(address)", +"b39f841c": "debtAuctionHouse()", +"b39f8f3f": "year2_percent()", +"b3a06d01": "mesPerBlock()", "b3a06e75": "airdropSingleAmount(address,uint256)", "b3a0b1ef": "basicInfoGetter()", "b3a0e188": "firstReserveTimeLock()", +"b3a115aa": "testCall1(address,uint256,uint256,bytes)", "b3a1362a": "setMessage(int256,string)", "b3a1584a": "toAddr(bytes)", "b3a18632": "stakeAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", "b3a196e9": "presaleSupply()", "b3a1ca52": "addressFundDigitalMarket()", +"b3a1e653": "tipo_avvenimento()", +"b3a2273f": "totalVoted()", "b3a26071": "LiquetLottery()", "b3a27842": "getEntity(uint256)", "b3a2a6c0": "setOfficialWebsite(string)", "b3a2a999": "nextWithdrawal(bytes16)", +"b3a2af69": "changeCycle()", +"b3a2c408": "transfer_pul(address,uint256)", +"b3a3140e": "hatcheryPlumber(address)", +"b3a329c7": "writea(uint256)", "b3a3c4f6": "identifierToRentPeriod(uint256)", "b3a3d671": "addAllowanceToRecieveToken(address[])", "b3a3dda3": "clearExpiredAssignments(address,uint256)", "b3a41c65": "power(uint256,uint256,uint256,uint256,uint8)", +"b3a426d5": "quickConvertPrioritized2(address[],uint256,uint256,uint256[],address,uint256)", +"b3a4f506": "pendingUserReward(address)", +"b3a53b09": "gintunderflow(uint256)", +"b3a5468b": "createTimeLockContract(address)", "b3a56077": "vestingPeriodLength()", +"b3a60f96": "purchasedCurrencyOf(address)", "b3a61c80": "tryNextTimeRange()", +"b3a66524": "borrowerList(uint256)", "b3a6d09d": "tgrSettingsPartContributor()", +"b3a74d55": "EventPaymentReceived(uint8,uint256,uint16)", +"b3a7b78a": "withdrawWithTimelockFrom(address,uint256,address)", "b3a7cbf6": "XRRsale()", +"b3a7ddf4": "addressToKU(address)", "b3a810f7": "tournamentOwnersCut()", "b3a844ae": "tokenClose()", +"b3a88fb7": "balanceOnC1()", +"b3a8a72c": "removeLiquidityRate()", "b3a9afb7": "getQuickBuyEtherToken()", "b3a9b5f6": "multiply(uint256,uint256,uint256)", +"b3a9c00b": "submitPlayersByRank(uint256,address[])", +"b3a9c91c": "onlyVault()", +"b3aa7e0d": "LOG_Request_CallbackOraclize(address,uint256,uint256,bytes32,uint8)", "b3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", "b3aae830": "deployProject(uint256,string)", "b3ab15fb": "setOperator(address)", +"b3ab4f70": "streak()", +"b3ab6a3e": "StartInvasion(bytes32,uint256,uint256[],address)", "b3ab715e": "getTileIDbyPosition(uint16,uint8)", "b3ac149c": "getCurrBalance()", "b3ac7acd": "ownerSetMaxProfitAsPercentOfHouse(uint8)", +"b3ac80e7": "maskToken()", "b3ad4600": "RedCarpetToken()", +"b3adb521": "isCardForSale(uint256)", "b3adc716": "is_banned(address)", "b3ade772": "shipProducts(string,string)", "b3adfa0c": "summLeskiw()", "b3ae1d2c": "completeTransaction()", +"b3ae49dc": "smashed()", "b3ae65d7": "initialBlockNumber()", +"b3ae7f48": "setMaxCommitmentIncrement(uint256)", "b3aefb75": "getCap(address)", "b3af4426": "jackpotTokenLoseRewardRate()", "b3af88f0": "proposalPresent(string)", "b3afe437": "SPECIALIST_TWO()", +"b3b0af6c": "PAYABLE_ROLE()", "b3b0c83f": "withdrawEndTime()", "b3b0cf86": "Birth(uint256,string,address)", "b3b0eae5": "getPaidAmount(string)", +"b3b1161e": "TransferEther(address,uint256)", +"b3b15edb": "getRelinquishmentToken()", "b3b163c4": "getLatestVersion(address,bytes32,address,bytes32)", "b3b294a6": "bonusOn()", "b3b2b1b6": "setPaidStatusCustomer(address)", +"b3b2bcc0": "terminalInflationSupply(uint256,uint256)", "b3b32dc0": "hasSeat(uint256)", "b3b39809": "Filiate_Changed(address)", +"b3b3f5f6": "OperatorUpdated(address)", +"b3b4340c": "b4se()", +"b3b44252": "checkParameter(string)", +"b3b459a4": "farmPeriod()", +"b3b46732": "getNewLoanId()", +"b3b48690": "bridgeISaiToIDai(uint256)", "b3b4b21e": "ZZZCoinDistribution()", "b3b4ec54": "acceptColuLocalNetworkOwnership()", "b3b4fd0f": "affiliateProgram()", "b3b51aa3": "recycleSkin(uint256[5],uint256)", "b3b548eb": "submitPrice(uint256,uint256)", "b3b55c0f": "ELTWagerLedger(address)", +"b3b57c87": "getInvestorInfoByUID(uint256)", "b3b5c0ee": "fillSellOrder(uint256,uint256,uint256)", +"b3b5df18": "getXCountToReward(uint256,uint256)", "b3b5eaa3": "dive2(address)", "b3b5ec33": "onPollFinish(bool)", "b3b5fc76": "getImagePartsCount(uint256)", +"b3b638ab": "triggerContract1ButRevert(address)", +"b3b64287": "AUCTION_VAL()", +"b3b685f9": "getPendingPremiumPaymentFraction()", "b3b71063": "BitPeso()", "b3b77a51": "lock(bytes32,uint256)", "b3b789fb": "GetLogMessageInfo()", "b3b78cc2": "crowdSaleZxcSupply()", "b3b81d38": "changeMinContribution(uint256)", +"b3b84fff": "howMuchConverted(address)", +"b3b85d9f": "isCardPrivate(uint256)", "b3b85e7f": "buyAtoken()", "b3b89158": "reserveUnlockTime()", +"b3b8a9c7": "setPrincipalOwed(uint256)", "b3b8c620": "icoRatio()", +"b3b91f4f": "REI15()", +"b3b95422": "turboBaseContract()", +"b3b9bcdf": "withdrawETHBalance()", +"b3ba8837": "initMember(uint256,uint256)", +"b3bacd5e": "seedFromCOO(uint32)", +"b3bad7e0": "unassignRole(address,string,string)", +"b3bb35e8": "burnSaleAddress()", +"b3bb3da3": "_getOrder(uint256)", "b3bb594c": "delivery(address,uint256)", +"b3bb790c": "mktVestingTime()", "b3bb8cd4": "_now()", "b3bb8d44": "OwnerDefined()", "b3bb9b58": "LiquidDemocracy(address,string,uint256)", +"b3bba6d1": "catRecords(uint256)", +"b3bba715": "previousAndCurrentUnanswered(uint32,uint32)", +"b3bbba51": "swapExactETHForTokens(uint256,address[])", "b3bc5b10": "editDefinedGame(uint256,string,uint256,uint256,int256,uint256,uint256)", +"b3bcfa82": "dec()", "b3bd870a": "participated(address)", "b3bf07a1": "balanceofSTCDR(address)", +"b3bf61c5": "disputeResolutionAgreementSignaturesCounter()", "b3c06f50": "transferFrom(address,address,bytes32)", +"b3c0afa1": "getPendingDeposit(address,address)", "b3c0b7be": "createOracle(address,uint256,bytes32)", +"b3c0d4fb": "numBurners()", "b3c10469": "hijackClones()", +"b3c10d20": "getDepositProfileById(uint256)", +"b3c12354": "setApproval(address,address)", "b3c185a7": "addNVTtoGame(uint256,uint256)", "b3c199c1": "dividendFor(uint32)", +"b3c1a4df": "getUStats(address,uint256)", "b3c1a588": "parseMsgData(bytes)", "b3c1ee88": "updateDescription(string,bytes32)", "b3c1fe4f": "donationMultiplier()", @@ -102847,116 +188205,208 @@ "b3c298ea": "angelInvestors()", "b3c2e8fa": "ethPause()", "b3c2eac1": "setStatus(bool,bool)", +"b3c2ec6f": "unsubscribeByAdmin(address)", "b3c3699f": "createLockedState()", "b3c3bbbd": "betters()", +"b3c3c2fb": "referralBonusWETH(address)", +"b3c45ba7": "sakeBombReward()", +"b3c49c77": "GetPlayerDetails(address)", "b3c4a36b": "setupToken(address)", "b3c4b54a": "updateDestination(bytes32,address)", "b3c4ee17": "userOfferCancelElement(uint256,uint256,uint256)", "b3c4f83b": "DoftToken()", "b3c5209f": "limitation()", +"b3c53536": "setLpRewardDivisor(uint256)", "b3c5998d": "onTransfer(address)", +"b3c606de": "currentUserid()", "b3c63629": "PTSDToken(uint256,string,uint8,string)", "b3c6487b": "setCatPrice(uint256,uint256)", +"b3c7166e": "refundStakings(address,address,uint256)", "b3c7476c": "TOSLittleHodingContract()", "b3c7618e": "getVoteRuling(uint256,uint256,uint256)", "b3c7d097": "theDeal(uint256)", +"b3c82f75": "LogCfdRefunded(uint128,address,uint128)", +"b3c84728": "tokenRaised(address)", +"b3c8ad8b": "transferCLV2LessGas(address,address,address,uint256)", +"b3c93151": "removeTokenTemplate(uint256)", "b3c9983a": "getPara(uint256,uint256)", "b3ca07d1": "closeRound(bytes32,uint8)", +"b3ca281a": "Tranferred(address,uint256,uint256)", "b3caba5a": "setReferralAddress(address)", +"b3cae8ec": "WorkOrderClaimed(address,address)", +"b3cb242b": "microCORE()", +"b3cb4234": "getDestinationPartition(bytes32,bytes)", "b3cb8885": "nextUnderdogPayout()", +"b3cba430": "_increaseBalance(address,address,uint256,uint256,uint256)", "b3cba833": "getData_16()", +"b3cbf396": "updateToken(address,bool)", "b3cc167a": "bidIncrement()", "b3cc35f0": "taxPerc()", +"b3cc59db": "toggleBurnable()", +"b3cc8728": "JetsToken()", +"b3ccbcfe": "loanManager()", +"b3cd913b": "bettleFees()", "b3cd95d3": "incRandNonce()", "b3cdabfd": "funForOwner()", "b3cea217": "ID()", "b3cea9e2": "createRadar(uint256,string,uint256,uint256,uint256)", +"b3cedfcf": "foo(bool,bool)", +"b3cfcf53": "earned2()", "b3cffc6e": "contributeBTCs()", +"b3d0403e": "setGateway(string,address,address)", +"b3d13d02": "previouslySeenSynthAsset(address)", "b3d14775": "getPOOL_edit_13()", "b3d159bf": "SearchMyFiles(string)", "b3d176c9": "setPOOL_edit_33(string)", +"b3d178f2": "cdpi()", "b3d1958d": "flush(uint256)", +"b3d1a2fe": "EtherOffer(address,address,address,uint256,uint256)", "b3d1b801": "getOwnerCars()", "b3d1bd95": "_recordFeePayment(uint256)", +"b3d1c6a2": "swap_UNI_UNI(uint256,address[],uint256,address[])", +"b3d1d94e": "converterRamp()", +"b3d21578": "dig(uint256[],uint256[])", "b3d2b441": "grantTokens(address)", +"b3d31735": "getBootstrapper()", +"b3d32171": "getRandomN(uint256,uint256)", "b3d34e1b": "WithdrawDevFunds(uint256)", "b3d39e63": "deleteProposal(bytes32)", "b3d3d37e": "takeSnapshot()", +"b3d3f3f0": "sendToNewContract(address)", "b3d4e279": "earlyBackerList()", "b3d4e3f2": "makeVendorValid(uint256,bool)", "b3d4e41f": "PURA()", "b3d62a25": "matchDay()", "b3d6e119": "lockedPeriod()", "b3d73743": "box1Star4()", +"b3d74228": "rollExpiredCall(uint256,uint256,uint256,uint256,uint256)", "b3d76188": "pay(address,address,uint256)", +"b3d797b1": "delegatecallSetNumber(address,uint256)", "b3d7ac6a": "transferCompensationEthers()", +"b3d7b8dd": "setCreateFastGamesCount(uint256)", +"b3d7f49b": "uniswapPrice()", "b3d8056d": "findString(bytes32)", "b3d84a28": "FreezeProduct(uint256)", +"b3d86bfe": "initialize(string,address,address,uint256,uint256,uint256)", +"b3d870a4": "getInvestorsCirculatingEthEarnings()", +"b3d8eb4b": "devAddresses(address)", +"b3d8f3b5": "getNumberOfStakeholders()", "b3d91e41": "DECIMALFACTOR()", +"b3d9799c": "setEarlyExit(uint256)", "b3da4b09": "mintEnergyAttributionToken(address,uint256,string)", +"b3da5737": "minimumStakeBalance()", "b3da6eed": "Alluma()", "b3daa652": "CLIFF_DURATION()", "b3daab8a": "updateInvestBalance(uint256)", "b3dac57f": "cancelUpcomingEvent(uint256)", +"b3dad736": "changeMiningETH(uint256)", "b3db410c": "allowTransferTimestamp()", "b3db428b": "depositFor(address,address,uint256)", +"b3db4761": "CanvasOfferedForSale(uint32,uint256,address,address)", "b3dc0e94": "transferSoldCoins(address,uint256)", +"b3dc242b": "InfluencerAdded(string)", "b3dcc5eb": "mint_and_transfer(int256,address,uint256)", "b3dd23e8": "BTC_SUISSE_TIER_2()", "b3dd5b1a": "WavesBitcoinToken()", +"b3ddbab4": "teamVestingTimeAtSupply(uint256)", +"b3ddd2fe": "cacheTotalSales()", "b3de019c": "changePrice(uint256,uint256)", +"b3de4740": "historyTotalSupply(uint256)", "b3de5cc0": "_getTimeLeft()", "b3de648b": "f(uint256)", +"b3de9b5d": "swapMin()", "b3dedf5c": "BACToken()", "b3dee386": "collect(uint16,uint16,uint8)", "b3df27f4": "checkFundingGoal()", "b3df5b45": "oxleytoken()", "b3df8737": "left50(uint256)", +"b3df8b96": "unnuked()", +"b3dfa13d": "payout(uint256,uint256,uint256)", "b3dfcdc3": "Contribution(uint256)", +"b3dfdbb2": "Partners(uint256)", "b3e18ed9": "finisGame()", +"b3e19c1e": "updateGoldBoxAmountAndPrice(uint256,uint256,uint256)", +"b3e1c718": "_safeMint(address,uint256)", +"b3e1f050": "getMintAmount(uint256,uint256)", "b3e1f523": "setUnpausedWallet(address,bool)", +"b3e224b6": "collectors(uint256)", "b3e2564a": "amendAmount(uint8,uint8,uint8)", "b3e25665": "collaborateInMerge(address,int256,int256)", +"b3e2767c": "sendErcBuyEth(uint256,uint256,address,uint256,uint256,address)", +"b3e2c80d": "migratePayFeeWithGem(address,bytes32,address,address,uint256)", +"b3e33379": "joinStakingPoolAsMaker(bytes32)", "b3e33a74": "mintingGoal()", "b3e366ab": "getLastMilestone()", "b3e3cc34": "sellToBlackMarket(uint256,uint256)", "b3e3d8b4": "startOrHoldCrowdSale(bool,bool,bool,uint256,bool)", +"b3e3f803": "markPropertyAsInactive(uint256)", "b3e53d8a": "maxPresaleContributionEther()", "b3e5519b": "getOpenBids(bytes32,uint8)", +"b3e5cc4a": "managementContract()", +"b3e5e0de": "setWhiteListState(bool)", +"b3e60546": "KycVerified(address)", "b3e6713e": "LogClaimTokens(address,uint256)", "b3e6c19f": "OJCToken()", +"b3e7993e": "initializeDirect(address)", "b3e7c201": "ethPromoHelpers(address)", "b3e7c2bd": "getVote(bytes32,address)", +"b3e7ca9d": "GetContractCreatorAddress()", "b3e83761": "KanCoin(address)", +"b3e86d68": "iGov()", +"b3e8badc": "getAvalancheStats(address)", +"b3e8fc56": "AddLock(address)", "b3e8fe00": "totalpro()", +"b3e90476": "amountOfMNEToBuyStakesSet(uint256)", +"b3e93396": "clientProposeResolver(address,uint256,string)", "b3e98f82": "viewClaimableInvestorDividendPool()", "b3e99b77": "systemClaimAirdropMultiple(address[])", "b3e9da0c": "businessersTotalBalance()", +"b3ea346b": "dapp_name()", "b3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", +"b3ea5340": "deactivateClaim(bytes32)", "b3ea553b": "JoyCoin()", "b3ea5984": "getIndexOfTarget(address[],address)", "b3eaaa7e": "calculateCHGAmountToEther(uint256)", "b3eae9ac": "WashingtonExchange()", +"b3eaff8b": "mintWithToken(uint256)", "b3eb3a86": "getClosedContract(bytes32)", "b3ebc3da": "weiRaisedTotal()", +"b3ec32f1": "PublicKeyRegistered(address,bytes)", +"b3ec6bac": "tokendebit()", +"b3ecc8b6": "COVEREDUP()", +"b3ecf7a6": "haltDuration()", "b3ed1957": "USDMToken()", +"b3ed1da4": "getBoxMetaData(uint256)", "b3ed2081": "fixedExpTest(uint256,uint8)", +"b3ed321f": "getUserTotalBurned(address)", +"b3ed9569": "totalInvestedFunds()", "b3ede13f": "addToPrizePool()", "b3ee4564": "assertStillValid(uint256)", "b3ee5307": "CountersUpdated(uint256,uint256)", "b3ee7248": "getDate(uint32)", +"b3eeb5e2": "deployMinimal(address,bytes)", "b3eee638": "icoEnablersTokensMinted()", "b3ef0045": "decodedRecipient()", "b3ef774b": "getNumOfTokensBonusOnPurchase(uint256)", +"b3efee98": "maxClaim(address)", "b3f00674": "feeReceiver()", +"b3f0433c": "checkVoteNow(address)", "b3f05b97": "finalized()", "b3f08078": "bookCanvasFor(uint32,address)", +"b3f08858": "EventOn_OwnershipTransfered(address,address)", +"b3f0b05d": "stakeLEXreputation()", +"b3f0ca51": "sentTokens(address)", +"b3f0dcac": "getDaiSplitValues()", "b3f15866": "CropOracle(address)", "b3f17c20": "miningOne()", "b3f19abd": "GetRecordAddress(uint256)", +"b3f19cf8": "ownerCard(address,uint256)", "b3f1c0c9": "setIssuer(address,uint32)", +"b3f1c8ed": "onRefererSet(address,address)", +"b3f1c93d": "mint(address,address,uint256,uint256)", "b3f1f31b": "testRecurringClones()", "b3f22cb4": "setLUCKContractAddress(address)", +"b3f25a64": "usersDxMatrix(address,uint8)", "b3f2c866": "startDateOfSaleStageLast()", "b3f2ecfd": "endDiscountTime()", "b3f2fa99": "playersShareAllocation()", @@ -102965,67 +188415,109 @@ "b3f3dcf6": "reinvestSubdivsAmount(uint256)", "b3f3e673": "switchPeriod()", "b3f3e737": "SendWalletFees(address,address,address)", +"b3f444bb": "getDsVDVTheoCuLy(uint256)", "b3f4d235": "updateCnyEthRate(uint256)", +"b3f4d5e4": "requireAmount()", +"b3f4db13": "externalCalcuate(uint256[20])", "b3f50029": "finishedGameWithdraw()", "b3f523a8": "devuelveTodasApps()", "b3f57bae": "tokenIncluded(address)", "b3f5849f": "Battle7oken()", +"b3f59c40": "setHold(address,uint256,uint256)", "b3f5ab78": "noncex()", "b3f691c2": "approvePendingCostume(uint256)", +"b3f73c40": "tradePositionWithOracle(bytes32,address)", +"b3f758ee": "birdSpeeds(address)", "b3f841ba": "minimumNumberOfTokens()", "b3f865f7": "rebalance(address,address,uint256)", "b3f8bef1": "tgeSettingsAmountCollect()", "b3f936f2": "getTypeName(uint32)", "b3f98adc": "vote(uint8)", "b3f9b6e1": "showPlayerScores(address)", +"b3f9e4cb": "resolverOf(uint256)", +"b3fa1609": "approve_810(address,uint256)", "b3fa24ef": "getUnlockSdc()", +"b3fa3eb0": "totIndexToApproved(uint256)", +"b3fa9a13": "create(bytes32,uint256,address,address,uint256)", +"b3fa9a6d": "createPool(address,uint256,uint256,uint256,uint256,address,address,address,address,address,address)", "b3faa12d": "blockTokens(address)", +"b3faad74": "east()", "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)", +"b3fc0d7b": "associatedToken()", +"b3fc176c": "migrateOut()", "b3fc34d4": "specialSanMint(string,string,address,address)", +"b3fc91e4": "getUnlockTimeLeft()", +"b3fc970a": "NFTStaking()", "b3fcb85b": "Sold_Token()", +"b3fd305b": "uni_min_deposit()", +"b3fd5071": "Approval(address,address,uint256,uint256)", +"b3fd94a8": "yourStakedCLOCK(address)", "b3fdc99d": "signalTradeIntent(address)", "b3feda02": "ASSET_MANAGER_WALLET()", "b3ff0065": "CGC()", "b3ff1112": "redeemFunds(uint256,uint256,uint256,bytes32)", "b3ff277d": "totalWon()", +"b3ff5a30": "OnRestoreWebGift(address,uint256,uint256,uint256)", "b3ff8bfb": "BONUS_5_DAYS()", "b3ffb760": "buy(address,uint256,address,uint256)", +"b3ffbd9e": "importFeeWithdrawalData(address[],uint256[])", +"b3ffc777": "setBoardroom(address)", "b4003de4": "removeFromTeamBalanceMap(address)", +"b4005106": "MAX_UINT_80()", "b4007cda": "emergencyFlag()", "b400d149": "betOnNumber(uint8)", "b40127f0": "bestmoney()", +"b4014879": "addCoin(address,uint256)", "b4015034": "cancelExplorationByShip(uint256)", +"b4015b1c": "declineMP(address)", +"b401d8a3": "setDebugData()", "b401faf1": "claimWinnings()", +"b401fd6a": "modifyPublicKeySize(uint8)", "b4022950": "collectFeesInEther(uint256)", "b4024d9f": "testTransferNoMoreThanTokenBalance()", "b4025b92": "deployProject(uint256,bytes32)", "b4026ed5": "clearAuth(address)", "b402973c": "SeeToken(uint256,string,string)", +"b4029b53": "getLastRewardBalance()", +"b403199f": "MidnightRunPayout(address,uint256,uint256,uint256,uint256)", "b4037767": "CryptoUniversityTuition()", "b4037bca": "setWins(uint256,uint16)", +"b4037e80": "initiateChannelClosure(address)", "b4038efe": "setVestTokenAllocationAddresses(address,address)", +"b403ae46": "sellBlock()", +"b403b578": "approveStake()", "b403c290": "getwinningaddress50()", "b404e001": "COMMISSION_PERCENT()", "b4051397": "TokenEtcb(uint256,string,uint8,string)", +"b4054b44": "pancakeRouterAddress()", "b405c549": "waiting()", "b40615c6": "soldTokensTotal()", "b4068734": "drawWinner(uint32,int8)", +"b406a4dc": "bitcoinPriceInWei()", "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()", +"b40992a1": "deleteOperator(address)", "b4099ff7": "queryImage(address,bytes)", "b409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", +"b40a4bfa": "domain_typehash()", "b40a5627": "bidCount()", "b40a9304": "allocateDelayedTokens(address,uint256)", +"b40afc1c": "withdrawVault(uint256)", "b40b234e": "DigitizeCoin()", +"b40b9bb6": "miningDifficulty()", +"b40ba16d": "getNumOfNftsStakedByAddress(address)", "b40bfd35": "AlexTestCoin()", +"b40c2454": "tokenDetailOf(uint256)", +"b40c26c7": "getMyStake(address)", +"b40d26dd": "_editTokenValue(uint256,uint256)", "b40d8d58": "hodlerTime9M()", "b40e415e": "mutagen2FaceContract()", "b40e4bec": "computeCap(uint256,uint256)", @@ -103033,9 +188525,15 @@ "b40ee3b3": "NewSmartSharingContract(string,uint256,uint256,string,string,string,uint256,string)", "b40ee8b4": "setCredit(address,uint256)", "b40f0352": "refund(address,address[])", +"b40f39ee": "smartSwapExactOut(address,address,uint256,uint256,uint256)", "b40f6f4c": "buyOptions(address,uint256)", +"b40fa1ce": "setbuyBackRate(uint256)", +"b4101dce": "attach(uint256,uint256,uint256)", "b41044c4": "btc_token(address,uint256)", +"b4107e72": "cYethAddress()", "b410a034": "issuanceRatio()", +"b410e2a1": "stakingEnds()", +"b410fdaa": "rewardRatePercentX100()", "b4114165": "foundationFundTokenCountInWei()", "b411e54f": "removePolicyFrom(address,uint8)", "b411ee94": "hash(string)", @@ -103048,111 +188546,196 @@ "b412b445": "icoBonus3()", "b412d4d6": "CafeDelivered()", "b412d627": "TokenWin(address,uint256,uint256)", +"b4132870": "maxSupplyHit()", "b4134e6e": "totalRedeemedValue()", +"b41364cb": "initialize(uint256,uint256,uint256,address,address,address,address,address)", +"b413c5b0": "itemIdToCelebId(uint256)", "b413c923": "setReservedTokens(uint256,address[],uint256[])", "b4144b79": "getTradesByAddress(address)", "b414d4b6": "frozenAccount(address)", +"b414d55b": "alterMinGameLength(uint256)", "b4150f17": "masterAuth()", +"b4155253": "addTrustee(address,bytes32,bytes32)", +"b4155613": "goosePerBlock()", +"b415b8a9": "transfersEnabledDate()", "b415c4ca": "total_burned_by_raffle()", +"b415d279": "BONUS_TOKENS()", +"b415f4f5": "PRESEED_OFFSET()", +"b416ab1c": "rxp_meth()", "b416bc93": "TokenAllowance()", +"b416cfd7": "wearables(uint256)", "b4174cb0": "right51(uint256)", "b41762f9": "capIncreased()", +"b417e19f": "TransferETH(address,address,uint256)", +"b41832e4": "validatorCounter(address)", "b41960d4": "redeemGift(string,address)", +"b419aaee": "transferCFOship(address)", "b419bd17": "getNumCoins()", "b419dd2d": "hashesUsed()", "b419f447": "ZipcoinToken()", "b419f73b": "proveIt(address,bytes32)", +"b41a5184": "orders(int256)", +"b41a558a": "_totalIssuedSynths(bytes32,bool)", "b41a6ce2": "changeSettings(uint64,uint64,uint8)", "b41a9f22": "totalRedemptionIdValue(address,uint64)", +"b41aa960": "getRgtDistributed(uint256)", +"b41ad469": "GAS_FEE_SUBSIDE()", +"b41b0736": "twin0LiqAddress()", +"b41b0f96": "nodeClaimReward(address)", "b41b208e": "DLP()", "b41b3967": "m_holders(uint256)", "b41bfa6a": "ABLGenesisToken()", +"b41c16ee": "AllItems(uint256)", +"b41c9b05": "BidWithdrawn(uint256,uint256,address)", +"b41cde50": "pctDIDToDetermineTaskRewardParameter()", +"b41d7213": "defaultPositiveRebaseLag()", "b41d989d": "angelsDayCooldownEnd()", +"b41dcb58": "pTokenBorrowGuardianPaused(address)", +"b41e4d0f": "seedLockedBalances(address[],uint256[],uint256[])", "b41e6640": "taxMan()", "b41e79d4": "firstChangeBlock()", +"b41e991a": "wrappers(address)", "b41f511c": "trade(uint256[],uint256,uint8,bytes32,bytes32,bytes)", +"b41f8acf": "getFarmingBag(uint256,address)", +"b41f9074": "z(address,uint256,address,uint256)", "b41fc258": "balanceOfPaillier(address)", "b4200294": "totalApprovedAmount()", "b42072e4": "tokenExchanged()", "b420feb2": "ethDepositAddress()", "b4210257": "addInitiator(address)", "b4214c8c": "LogWithdrawal(address,uint256)", +"b421cf9a": "SetStop(address,bool)", "b42220ad": "enableChangeChannel(bool)", "b4223757": "modifyMilestoneFrom(address,uint8,uint8)", +"b42241ab": "offerETH(uint256,uint256)", +"b4238f4a": "token_network_registry()", +"b42392f1": "numberPools()", "b423c31e": "catchYou(address,uint256)", "b423d93f": "icoUsd()", +"b423fd9e": "SelfDestroy(uint256)", "b424bd83": "getLastOrderId(address)", "b425282d": "getBonusPool(bool)", "b4256888": "openTime()", "b425bd43": "distributeTokenToAddressesAndAmountsWithoutHost(address,address[],uint256[])", +"b425f802": "locks(address,uint256)", +"b4260cbc": "setPerformanceFee(uint256,uint256)", +"b42652e9": "exit(address)", +"b4268890": "VersionAdded(address,uint256)", "b42748d3": "PSYT()", +"b42754a5": "poolIndex(address)", "b4279df3": "initialization(address,address,address)", "b427c148": "calculatePointsBlock(uint32)", "b4288aa5": "EventBattle(address,uint64,uint64,uint64)", +"b4292bbd": "referArr(address,uint256)", +"b4292f43": "allUserAddress(address)", "b42963f8": "executeUpdateTransferMinimumFeeProposal(uint256)", "b429844c": "userBanned(address)", "b429af5e": "changeBotAddress(address)", "b429afeb": "isController(address)", +"b429b892": "totalKct(uint256)", "b429f65a": "totalEtherCookieResearchPool()", "b42a02b5": "updateDID(string,string)", "b42a11f9": "refundAllCollateral()", "b42a275e": "bankAmount()", +"b42a644b": "incognitoSmartContract()", "b42a8bf9": "_distributeRevenue(uint256,uint256,uint8,uint8)", "b42b14c4": "DCNForGas()", "b42b8559": "createPreSale(uint256,uint256)", "b42c6b4f": "getPumpRate()", +"b42cab23": "totalLPTokensDEFLCTYMENMinted()", +"b42cdc1d": "poolint()", +"b42d3b40": "setTeamContractAddress(address)", "b42d6bd2": "SunToken(uint256,string,uint8,string)", "b42dfa0d": "gen()", +"b42e0f15": "approvedAll(address,address)", "b42e49ef": "rollFive(address,uint8,uint8,uint8,uint8,uint8)", "b42e8923": "pushBAU2(bytes32,address,uint256)", +"b42eea6d": "withdrawRemainingDai()", +"b42f6f4e": "TESTOPerBlock()", +"b42f84a2": "SaleStartTime()", +"b42fd336": "lookupAffiliates(address)", +"b42fdf9f": "LogMutation(bytes32,bytes32)", +"b4301ef2": "mapRoles(address,uint256)", +"b43029ac": "reserveHolders(address)", "b4307192": "Bible()", "b430da3c": "migrateHero(uint256,address)", +"b430fe73": "OrderEvent(address,bytes32,uint256)", "b431da0c": "JavaOwnerExample()", "b43216bf": "cvsquare(uint256[],uint256)", "b4328e5b": "TokenSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "b4330e24": "transferred_total()", "b43386cd": "testBalanceAfterDeposit()", "b434486a": "getPriceRiseAndFeePercent(uint256)", +"b43464c3": "SetActive(uint256,bool)", "b4349daf": "TOTAL_HAWKING()", "b4350e69": "ARBITRAGING(address)", "b43545bb": "ownerValidate(address)", +"b4366f87": "addAddr()", "b436db29": "deployNetwork(address,address)", "b43716a0": "getMajorityThreshold()", +"b4372c8b": "getAdditionalCollateralRatio(address)", "b43740c0": "casamenteiroToken()", "b4375dc9": "adminSetEnabled(bool)", +"b437d9cb": "startCollecting(uint256)", "b4380764": "totalTokenHolders()", +"b438689f": "withdraw(address,bytes,bytes32,bytes32,address,address,uint256,uint256)", "b438a2d0": "RigIdle()", "b438d018": "guessNumber(uint256)", +"b4392733": "DebugResetSubmissions(address,uint256,uint256)", "b439548d": "getStudent()", "b43959c0": "setMembershipStatus()", "b4396d42": "SAKECOIN()", +"b4398244": "lockedLiquidity()", "b439be79": "AHCToken()", +"b439dc3a": "changeFundingStatus(uint32,bool)", +"b43acc5f": "AFIAddress()", +"b43b615c": "setCurrentBonus(uint256)", +"b43b6501": "stakingIds(address,uint256)", +"b43b7ae7": "setMintFeeBps(uint256)", "b43bd069": "getNumPassingTokens(address,uint256,uint256)", +"b43c12ce": "openOrderMap(uint64)", "b43c19a6": "monsterAuction()", "b43c35a5": "p_update_action(uint256,address,address,uint256,string)", "b43c39a7": "_setRenewable(uint256,bool)", +"b43c5b1b": "_deregisterToken(address)", +"b43c7fde": "DiscipleVendAccept(uint256,address,uint256)", +"b43ced13": "withdrawMissedRewards()", +"b43cffe1": "encodeERC1155AssetData(address,uint256[],uint256[],bytes)", "b43d42ec": "revokeRatioVote(uint8)", "b43d4851": "transferSupply(address)", "b43d9ede": "setMapMaster(address)", "b43dbffc": "BulletinBoard(address)", +"b43e5741": "LoanContract()", +"b43e6cb4": "riskThreshold()", +"b43ea2d8": "changekDeviate(uint256)", "b43f8a5c": "registNameXname(string,string)", +"b4401646": "claimAndBuyBackBDOFromVswapPool()", +"b4402828": "setMdoPerBlock(uint256)", "b4402991": "userVoteFor(address,uint256,uint256,uint256)", "b440b5c7": "EthPyramid00XX()", "b440bf39": "setMonethaGateway(address)", "b440f7ff": "setInterestor(address,uint256,uint256)", +"b4413c79": "_cleanupJobOffers(uint256,address)", "b4421cbd": "isPreTokenSaleActive()", "b4421e7c": "releaseFoundationJM(address)", "b442649d": "IlluminaCoin()", "b4427263": "createTokens()", +"b442c24e": "SWAP_FEE_PERCENT()", +"b4433dd4": "complementoRegistroImobiliarioAto(uint256,string,string,string,string,uint256)", "b443a085": "boom(uint256)", "b443c607": "verifyCestificate(address,uint256)", +"b44468fb": "landToken()", "b444b606": "getNowTokenPrice()", "b444ff41": "setFirstRoundPricing(uint256)", "b44531d3": "test_payment()", "b4454253": "timePassed()", +"b4469fac": "collectPaidFees()", "b446b5aa": "addAuthorized(address,address)", +"b446d6f6": "changeApi(address)", "b446e7b9": "outterlockStartTime()", +"b446f3b2": "getMessageHash(string)", "b4472022": "AECTToken(uint256,string,string)", +"b4474add": "getAmountSales()", "b4478d7d": "updateTurnover(bytes32,uint256)", "b447968c": "enterWithReferral(uint256,address)", "b447acfa": "doubleSomeVar()", @@ -103160,17 +188743,30 @@ "b448017b": "periodPREICO()", "b449188a": "updateCirculation()", "b4495b7d": "MIN_USD_FUND()", +"b4496f1a": "buyItem(string,string)", "b44996c4": "checkProof(bytes32,bytes,uint256[],bytes,bytes)", +"b449c24d": "Claimed(address)", "b449c689": "testdata()", +"b44a4050": "requiredSignNum()", "b44a5e64": "GreenMed()", +"b44ae6c0": "balancePools(uint256,uint256,address,uint256,bool)", "b44b0836": "getEAAttributes(uint32)", +"b44b683f": "getRefundedAmountByRequests()", +"b44b8467": "testToken370()", "b44ba774": "_existPublicKey(bytes32,address)", "b44bd51d": "getConfig(string)", "b44bd688": "recoverLost(address,uint256)", +"b44c6b36": "completeTask(bytes32,address,uint32)", +"b44c6cda": "moneyForCashback()", +"b44c991c": "getSellermount()", "b44cac23": "addJobSponsorship(address,address,uint256,string,string,uint256)", +"b44ce893": "getBylawUint256(bytes32)", "b44d7325": "signedTransferFromHash(address,address,address,address,uint256,uint256,uint256)", +"b44dd785": "setreg(address)", "b44df72d": "tokensClaimed()", "b44e2ab9": "onlySignerMock()", +"b44e9753": "getLengthOfEntries(address,bytes32)", +"b44e9e5c": "totalRewardFees()", "b44ec921": "whiteListContract(address)", "b44eccc9": "periodICO()", "b44ed831": "isDailyUplimitReach(address,address,uint256)", @@ -103178,25 +188774,48 @@ "b44f776a": "Test22Coin()", "b44f794f": "removeUserRole(address,uint8)", "b44f8cda": "icoSaleDeposit()", +"b44fee31": "isProtect(address)", +"b4500c78": "_isEliminationPhase()", +"b45036f7": "initializeContracts()", +"b450fc05": "SetReferrerEvent(address,address)", "b45105b2": "post(string,address,string)", "b4512913": "voteStatus(bytes32,uint256)", +"b45129af": "approve_870(address,uint256)", "b45156fc": "startDate2()", "b451794e": "numberOfOrders()", +"b4523423": "getCharacters(string)", +"b45245f4": "cecr(uint256)", +"b452f973": "transferWithLock(address,string,uint256,uint256)", +"b4533527": "getTaxTierMediumFee()", +"b45345ab": "Rain(address,uint256)", "b4538897": "ICO_PHASE3_AMOUNT()", "b4539817": "Donator2()", "b453afb8": "getMinDisplayPrice()", +"b453eb79": "zIncrementGameID(uint256)", "b453fb01": "feeReceiverContract()", "b4542a70": "getLLV_edit_19()", +"b4545b9e": "unstake(uint8,uint256)", "b454c415": "rNo()", +"b454db18": "Investing(address,uint256,uint256,uint256)", "b454e62e": "addPool(bytes32,address,uint256,uint256,uint256,address)", +"b4550a59": "setProfileImageHash(string)", +"b4568f1b": "CONTRACT_APOSTLE_BASE()", +"b456ccb5": "adminBurnUser(address,uint256)", "b456d9e2": "activateCrowdSale()", "b456ecc5": "GetHash(bytes)", +"b4577882": "isGEMAdmin()", +"b4578a88": "frozenAwardedTokens(address)", +"b4579d60": "getTypes()", "b458189f": "setAccountB(address)", +"b458bdaf": "swapETH()", "b4590cbe": "ICOStatus()", "b4594c36": "numberOfQuestions()", +"b4594fa3": "LP_LOCK_FOREVER_PERCENT()", "b4596ea6": "setPlayerGeneralAttrAdd(uint64,uint8,uint32)", "b459c3fe": "WithdrawUnclaimed()", "b45a2712": "mintCapInUSD()", +"b45a3c0e": "locked(uint256)", +"b45a5c3c": "createTokenLocker(address)", "b45aff16": "pullBalance()", "b45b290d": "finalizePretge()", "b45b7a51": "TokenSold(uint256,uint256,address,address)", @@ -103205,7 +188824,13 @@ "b45cff5f": "houseBankRoll()", "b45db978": "Centspooladdress()", "b45dd873": "enableBurning(bool)", +"b45e69c7": "allWinToken()", +"b45ec021": "InvestorPropsChanged(address,address,string,bool)", +"b45eec92": "TokenModified(address,uint256,string,string,string,bool,string)", +"b45ef79d": "expiredWorkingGroupIds(uint256)", +"b45f578b": "sendToB(address,address)", "b45f6df2": "updateDayTokenFees(uint256)", +"b45f81e6": "getNextUnlockToken()", "b45fb209": "setNewMessageNumber(string,uint256)", "b460481d": "redeemShares()", "b46062ad": "setInterestRate()", @@ -103213,222 +188838,437 @@ "b4612d78": "CD(uint256,string,uint8,string)", "b4621d07": "LimitBottom()", "b4628c8a": "ENSRegistrar()", +"b462d35a": "viewVoter(uint256)", "b46300ec": "send()", "b46310f6": "setBalanceOf(address,uint256)", "b463a75c": "addTeam(address)", "b463bcde": "testThrowsSetNotTransferableNotOwner()", +"b463ff0e": "createPayStub(uint256,uint256,uint256,uint256,uint256,string)", +"b46405bc": "discountForBlacksmith()", "b46452a1": "convertTokensAmountInWeiAtRate(uint256,uint256)", "b464631b": "get(address,uint256)", +"b464a130": "changeMonitor(address)", +"b464b5c2": "approve_762(address,uint256)", "b464d582": "checkHowManyOwners(uint256)", "b464d99e": "startTimeEarlyBird()", +"b4653075": "coveredByDailyLimit(address,address)", "b465307c": "validPayAmt()", +"b46543c0": "getContractESDBalance()", "b4654d98": "transferMinusFees(address,uint256,uint128,uint16)", "b465e52f": "secondRefundPollDate()", "b46631cd": "SetTestModeHands(uint256,uint256)", "b466b76f": "fresh()", "b4670002": "updateEntries(address[],bool)", "b4679b06": "multiplyWithNumber(uint256)", +"b467d74f": "get_totalmint()", +"b467e6d6": "changeMind()", "b46801c2": "balanceUpdatesCount(address)", +"b468eaed": "setTransferAddress(address,address)", +"b468ebf3": "usdt_rate_up(uint256)", "b4693d23": "changeOpeningClosingTime(uint256,uint256)", +"b4694870": "farmRateBuy()", "b469ba24": "updatePokemon(uint256,uint256,uint256)", "b469d6c8": "setFundingLowcapReached(uint256)", "b46a8a21": "support_proposal()", +"b46b7919": "updateUserRank(address,uint256)", "b46bcdaa": "entries(bytes4)", +"b46bff89": "teacher()", +"b46e179a": "blessThreshold()", "b46e42ec": "setClue4(string)", +"b46e6714": "getNextSqrtPriceFromAmount0RoundingUpInvariants(uint160,uint128,uint256,bool)", +"b46e98b1": "lance(string,address)", "b46eeebb": "TOKEN_FUTURE_CAP()", +"b46f0d22": "deposit(address,address,address,uint256,uint256,bytes)", "b4706fa1": "tokenSalesCapReached()", "b470aade": "periodDuration()", +"b470f993": "modifyIndividualDailyRestrictionMulti(address[],uint256[],uint256[],uint256[],uint8[])", "b471fade": "_withdrawal()", +"b4720477": "sendMessageToChild(address,bytes)", +"b4722929": "_courtConfig()", +"b4724756": "startChange()", +"b472abdb": "OraclizeCreated(address)", +"b472fc81": "initialize(address,address,address,address,address,uint256,uint64,uint256,uint64,uint64,uint256,uint256,uint64)", +"b473b70d": "unlockAmountOf(address)", "b473d3b6": "EjariRulesC()", +"b473dd66": "reAP3LsPaused()", +"b4743fdd": "addDealD(address,bytes32,string,uint72,uint256)", "b4745939": "convertEtherToDust()", +"b474633a": "RequireThat0(bytes32)", +"b474682a": "totalGasSpent()", "b47481a9": "BajwaToken()", +"b4748585": "setDepreciated(bool)", +"b474c058": "sha256hash()", +"b474e35f": "pairHNY_LP1HNY()", +"b474ec7a": "adminUpdateLogic(address)", "b4750ca0": "getMiniumInputEther()", "b4755160": "mkhash(uint256,uint256,bytes32,string)", "b4758e82": "tokenAssignExchange(address,uint256)", "b475a1c8": "ALLOC_TEAM()", "b4765db7": "transferFromToken(address,address,uint256)", +"b476ac61": "MINIMUM_WITHDRAW()", +"b476ae3e": "newTok(bytes32)", "b476de2e": "callURL(string,string,string,string)", +"b476f78c": "ownERC721List(address,address)", +"b4773329": "gte(uint256,uint256)", +"b47749f9": "changeOpeningTime(uint256)", +"b477585e": "getTierOfUser(address)", "b47779ce": "FivePercent4Ever()", "b47784d9": "testControlDisownNotOwner()", +"b477bddd": "getCallerCut(uint256)", "b477e7d5": "getFullTicketDetails(int256,uint256,uint256)", "b4781f63": "change_coef(uint256)", "b4787dc5": "linkEID(bytes,bytes)", "b478886d": "promethCost()", +"b478f15a": "nftTeamIdToSequenceIdToCollectible(uint256,uint32)", "b478f416": "setBaseCurrency(address)", +"b478fc07": "erc20Balance(address)", +"b4798b60": "getFullTokensInfo(address,address[])", +"b47a5604": "adminFee_percentage()", "b47a7a67": "proveIt(string)", +"b47abded": "fetchPairAndDirection(uint256)", +"b47adea3": "addDepositProfile(uint32,string,uint8,address,uint256,uint256)", "b47b2cfe": "retraitStandard_4()", +"b47b55cc": "updateCommission(uint8)", "b47b6116": "removeCapFreeAddress(address)", +"b47b914d": "GetHero(uint32)", +"b47ba528": "updateFees(uint8,uint32)", "b47be3e4": "addToWhitelist(address,uint256,uint256)", "b47c11e8": "fidget(address)", +"b47c52a9": "Purchased(uint256,address)", +"b47c965b": "getUnclokedAmount(address)", +"b47ca3c7": "log10(int256)", +"b47cc556": "setMarketplaceAddress(address)", +"b47cf054": "getTotalCertificateCount()", +"b47d0dbf": "getLogForDB()", "b47d7409": "disablePurchase()", "b47d89ad": "Details()", "b47dbf22": "minPurchaseAmount()", "b47deb3c": "winner(uint256,uint256)", "b47df046": "setGrantEnable(bool)", "b47e4c6c": "getTestOne()", +"b47e9c79": "parts()", +"b47ec8d5": "clusterRewards(address)", +"b47f18a1": "todo()", "b47f817e": "confirmAllBuys()", "b47f833c": "contains(int8,int8)", "b47fa7e0": "DepositLimit(uint256)", "b4800033": "set(bytes32,string)", "b4801272": "Dust()", +"b480129c": "_collectProtocolFee(bytes32)", +"b48017b1": "queryOpenSwap(bytes32)", +"b48028e3": "revokeAuthorization(address)", +"b48067db": "cardSetList(uint256)", "b480eac0": "setTarget(uint256)", +"b480f6ad": "devFundAddress()", +"b4815658": "getBurnReward(address)", "b4816be9": "endOfRewardsConfirmed(bool)", +"b48171bb": "shopLength()", "b4819e76": "getTokenDescription(address,uint256)", "b481cbc0": "withdrawJajalanTokens(address)", "b4821203": "investInQueue(address,uint256)", +"b482356f": "accTKVNPerShareMultiple()", +"b48272cc": "burn(string,uint256)", +"b4834330": "CREATION_LIMIT_GEN0()", "b483c054": "setOtherFomo(address)", "b484d371": "fundReferrel(address,uint256)", "b484de0d": "GetHashedMove(string,string)", "b484e532": "getMyMsg()", +"b484f726": "getCurrentEpochRewardPercentageInPrecision(address)", "b48585e5": "ATM(uint256,string,uint8,string)", +"b4859601": "updatePairPriceAll()", "b4861ca5": "assertSaneBalance(uint256,uint256,uint256)", +"b4862fe7": "getAddressAtRow(uint256)", +"b486647d": "RESERVED_TEAMS_TOKENS()", "b48666ee": "silverSaleLimit()", +"b486c6e8": "isLessThanLimit(uint256,uint256)", +"b48713a8": "burn_counter()", +"b4871f5a": "getStringToSignWithKey(string)", "b4873ac7": "setCEOAddress(address,address)", +"b487ae1a": "balanceMar(address)", "b487b699": "addData(address[],uint256[])", +"b4881723": "withdraw_profit_panel2(uint256)", "b488abd8": "ANACoin()", +"b488ea41": "setSmoothingFactor(uint256)", "b488f00e": "runSuperPrivilegeLuckyDraw()", +"b488f1a8": "cryptographIndex()", "b4894b1d": "gaps(uint256)", +"b4894e28": "totalForFighter(address)", +"b4896ecc": "BORROW_DEPTH_MAX()", "b489b365": "authorizeStore(address)", "b489c597": "limitPresale()", +"b489d429": "getAppBundle(uint64,uint64)", +"b48aa05e": "getUserDepositInfo(address,uint256,uint256)", +"b48ab8b6": "batchMint(address,uint256[],uint256[],bytes)", +"b48ac0b1": "getregisteFee()", "b48ae96f": "finalizeRoom(uint8)", +"b48b3be7": "setKey(string,address,string,string)", "b48b4204": "register(bytes32,uint256,address,string,uint256)", "b48b73aa": "setDivBonus(uint256)", +"b48bc055": "_powerTransfer(int256,uint256,uint256)", "b48bc2ee": "transferDepositsToNewDao(address)", "b48c6807": "EtherLinkToken()", +"b48c7f69": "DisableTokenIssuance()", +"b48cd4f0": "recoverSignerHash2(bytes32,uint8,bytes32,bytes32)", "b48d323f": "getLiveChallenges(uint256)", +"b48d5401": "addDesign()", +"b48eb9e5": "ethRecords(address)", +"b48ec820": "getStateTransitioner(bytes32,bytes32)", +"b48edbb4": "electGovernanceBoard(address)", "b48eea44": "isWhitelisted(string)", +"b48f37a9": "updateVars(bool,bool,uint256,uint256,uint256,uint256,uint256)", "b48f4f5c": "PreICOCents()", "b48fcdc0": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256)", +"b48ffbb1": "elecPowerPerTHSec()", +"b4905ab4": "DividendDeposited(address,uint256,uint256,uint256,uint256,uint256)", "b4909307": "getData(address,address)", "b490e79f": "getChosenFreelancer()", "b4921774": "getReportsByReporter(address)", "b4929d4c": "publicSell()", "b492bd32": "setMulBonus(uint256)", +"b492d8b3": "holders_xdai_balance()", +"b492f8e9": "updateAllowanceReceiver(address,uint256)", +"b4930b79": "getContentDetailActivity(uint256,uint256)", +"b4937611": "getRewardPeriod(uint256)", +"b4939d5e": "getPaymentManager()", "b493b0d0": "GESToken()", +"b49413e4": "getPoolROI(address)", "b4942ad1": "transferByCoinOwner(address,address,uint256)", "b4944333": "getPlayerEarning(address)", "b494b49d": "variationProbably()", "b494f1fb": "totalReservedTokenAllocated()", +"b4953735": "getLpLock()", "b49575a7": "CORENET()", "b49593fe": "PREMIUM_SALE_PACK_COUNT()", +"b4959e72": "setLocalOperator(address,bool)", +"b496091b": "hatch(uint8,uint32)", "b4961379": "private_setOracleFee(uint256)", "b49651ef": "FAPFund()", +"b496887f": "payRecyclePool(uint256[],uint256[])", +"b4969b96": "setBurnRate(uint16)", +"b496ca71": "counter4()", "b4972398": "CTCToken(address)", "b497d17d": "TileUpdated(uint256)", "b4980148": "numberOfStarsToReserve()", +"b4984020": "ethEtherOffered(address)", "b49845f9": "EventClear()", +"b4988fd0": "initialize(uint256,address,address)", "b498e3e4": "NeverConfused()", "b4999e85": "endBlockNumber()", "b499a26f": "getHowManyLeftToDistribute(uint256)", +"b499ad77": "fundingETH(uint256)", "b499b2ce": "doNotThrowOnValidDiv()", +"b49a60bb": "getStrategies()", +"b49aa3b5": "INVALID_TOKEN_ID()", +"b49aa875": "unlockFounderTokens(uint256)", +"b49b9a0a": "setDevTeamAddr(address)", +"b49cae28": "payDividendPerYear()", "b49ce17f": "totalCapsules()", +"b49d18d6": "proposalVoterVotes(uint256,address)", "b49d3a53": "stopTokenTransfer()", +"b49d5fcf": "changeExhangeRate(uint256)", "b49e3b62": "getPenetration(uint256,uint256,uint256)", +"b49ea19a": "depositAll(uint256[],uint256)", +"b49eb7a5": "isAuthorizedToSellSgn(uint256)", +"b49ed57e": "searchAsset(string,uint256)", +"b49eebd9": "getDownload()", +"b49f1ccf": "MfrmPerBlock()", "b49f4afd": "getBasePrice()", "b49f57ad": "getLastLevel()", +"b49f5ffc": "isOldAmountSent(address)", +"b49f6463": "balancesArr(uint256)", +"b49fc6a2": "uintarrays2string(uint256[][],uint256)", "b4a09ba9": "canAccessExclusive(address)", "b4a0a6b8": "Sgethereum(uint256,string,string)", "b4a0e24c": "getQuotaCheck()", +"b4a11864": "LOG_CallbackOraclize(uint256,bytes32,bytes)", +"b4a16769": "cardTypeToEdition(uint256)", "b4a176d3": "restoreRegistry()", "b4a2251e": "getOp()", +"b4a2c6db": "setStudent(uint8,string,string,string,bool)", +"b4a2e6d0": "seed_nextProtectedLiquidityId(uint256)", "b4a3208a": "SUAppToken(uint256,string,string)", "b4a357a2": "get_participant(address)", +"b4a37163": "RedeemDaoBounty(bytes32,address,address,uint256)", "b4a39dfd": "getChildId(bytes32,uint256)", "b4a4136d": "BIMI_DAO_31()", +"b4a44f49": "entityModified(address,address,bool,bytes32)", +"b4a4f0f6": "resetUserInfo(address,uint256)", "b4a516a6": "addRTO(uint256,address)", "b4a523e8": "mintedTotallyByBridge(address)", +"b4a54781": "addResellingAmount(address,uint256)", "b4a5ef58": "updateDefaultTimeoutPeriod(uint256)", +"b4a5ffaf": "assignOracle(address,address,uint256)", "b4a61608": "MAX_STAKE_PATHS()", "b4a66678": "Numtokens()", +"b4a75c87": "accUniPerShare()", "b4a77b0e": "isUserBlocked(address)", +"b4a77fc0": "getTradeLimitsAndClass(address)", "b4a7a022": "_buyInBatch(uint256,address,uint256,uint256[],uint256)", +"b4a800ce": "totalSwaps()", +"b4a849e4": "FocusKi(address)", +"b4a8abdb": "testArbBetweenExchanges()", +"b4a8b128": "Get_Price_BNB()", "b4a8dd5b": "updateTimestampLimit()", +"b4a8e101": "setReservesRatio(uint256)", "b4a8f3e6": "timeOfDeath()", "b4a93d9b": "transferBasic(address,address,uint256)", "b4a97fc1": "removeBottomUpChild(address,uint256,uint256)", "b4a99a4e": "Owner()", "b4a9d156": "changeWaitTimeUntilWithdrawOrTransfer(uint256)", "b4aa24db": "uncheckedUpgrade(address)", +"b4aa3533": "burnONB(uint256)", +"b4aaf63e": "ao()", +"b4ab15e7": "mulScalarTruncate(uint256,uint256)", "b4ab271c": "giftIdToGift(uint256)", "b4abda8b": "sendOwnershipAndCall(address,uint256,bytes)", "b4abea24": "BONDS()", "b4ac5452": "exerciseCUSE(address,uint256)", +"b4ac6860": "getPoolsCount()", +"b4ac713f": "annulContract(uint256)", "b4ac8ad9": "getRetailerBalances(address,address)", +"b4ace4e9": "removeDataProfile(string)", "b4ad016d": "Socialife()", +"b4ad01c5": "setCardPoints(uint256[],uint256[])", +"b4ad24be": "maxBoostersAllowed(string)", "b4ad6b5b": "transferFromTo(address,address,uint256,bytes)", "b4ae641c": "arrayLimit()", +"b4ae7f80": "Developer()", +"b4aee96b": "tokenBuyersFraction(address)", +"b4aff36e": "taxCollectorPercentage()", "b4b063df": "addNewClaim(string,uint256,uint256,string,string)", "b4b06a74": "GiftClaimed(address,uint256,uint256)", "b4b097eb": "addNewState(string,uint256[])", "b4b0a6e2": "ADULTEUM()", +"b4b14242": "moveTokens(address,address)", "b4b14467": "submitTokenTransaction(address,address,uint256)", "b4b179dc": "getAmountToGive(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes)", +"b4b1a579": "calculateUserInvoiceCollateralETH(address)", "b4b1b6d9": "getRecordStateRequiredChanges()", "b4b1d9c7": "getDescription(address)", "b4b22b5e": "ico_allocation()", +"b4b22e94": "CustomerDetails(int256,string,string,string,int256)", +"b4b2725e": "bridgeStrategy()", "b4b2938a": "Finapse()", "b4b2d3d8": "phase3Price()", +"b4b32f2b": "ETHMaximalistZAP()", "b4b3b028": "AddChain(bytes)", +"b4b45c59": "setStakingContractAddress(address,uint256)", +"b4b471e4": "flashloan(address,uint256,address,address,address,address,uint256,address)", +"b4b48e55": "calcSwapPiptToEthInputs(uint256,address[])", +"b4b4f63e": "setupContractId()", "b4b4ff0a": "setDateStartTransfer(uint256)", "b4b54328": "getActualPeriod()", +"b4b577ad": "future_A()", +"b4b57c39": "v2Factory()", "b4b598ce": "TEAM_FUND()", "b4b5b48f": "tokenData(uint256)", +"b4b5ea57": "getCurrentVotes(address)", +"b4b63ead": "getBuyCoinAmountByID(uint16,uint256,bool)", "b4b68490": "totalTokenCap()", "b4b68dab": "createPermissionsBot(address)", "b4b71450": "PlaceRocketForSaleEvent(address,uint32,uint80)", +"b4b72c1d": "claimETHRewards()", "b4b7771d": "setInvadeAddr(address)", +"b4b82136": "registerCustodian(address)", +"b4b83f27": "getClaimable(bytes32,bytes32)", +"b4b84e1f": "updateRankAdmin(address)", "b4b857d8": "DepositEther(address)", +"b4b952eb": "nUriAuthorityRegistry()", +"b4b99b07": "GAS_FOR_CALLBACK()", "b4b9cd62": "UpgradeRig(uint8,uint16)", "b4b9d1f1": "lookup(uint256,uint256)", +"b4b9fec3": "areaRentPrice(uint8,uint8,uint8,uint8,uint256)", +"b4ba21c8": "assetToPrices(address)", "b4ba2a1b": "percentFrom(uint256,uint8)", "b4ba2eaa": "moveEther()", "b4ba349f": "sing()", +"b4ba68cd": "bye0()", "b4ba9e11": "claimFor(address,address)", +"b4ba9ead": "setPullDivisor(uint256)", "b4baf9ff": "HybridX()", +"b4bb12d1": "getBuyAmount(address,address,uint256,uint256)", "b4bb1b0a": "isEscrowActive()", "b4bb58fb": "mix(uint256,uint256)", "b4bbfb9e": "StateTransition(uint256,uint256,uint256)", "b4bc3564": "do_guess(uint256)", "b4bcc23b": "setInvest(address,address)", +"b4bccee0": "setUnbasePercent(uint256)", "b4bd5c75": "setupPREICOPeriod(uint256,uint256)", +"b4bd8af5": "setDistributionTime(string)", "b4bd9e27": "isOver()", "b4be6190": "getFreelancerHourlyRateCurrency(address,address)", +"b4bea77d": "pendingSmile(uint256,address)", "b4bede85": "transferSenderPaysFee(address,uint256,bytes)", "b4bee870": "ChangePoolName(string,string)", "b4beff8a": "GetMinerICOData(address,uint256)", +"b4bf1cdf": "changeImpl(address)", +"b4bf24e7": "newRound(uint32)", +"b4bf396e": "GetChangeRequestsAmount()", +"b4bff308": "editBasicInfo(address,string,string,string,uint256)", "b4c045e4": "NHMToken()", +"b4c0498b": "leaseCount()", +"b4c07547": "decodeOrder(bytes)", "b4c16970": "BigRedCoin()", "b4c16ea5": "CREATED_PROMO()", +"b4c18331": "setRevenueLevel(uint256[10])", +"b4c2025e": "globalMinters(address)", +"b4c27164": "swapAuthKeys(address,address)", "b4c28ead": "expertScoreOf(address)", "b4c2aaee": "tokenPriceMin()", "b4c2e22c": "_ownerOfLand(int256,int256)", +"b4c2f727": "updates(uint256)", +"b4c314ff": "log(bool,uint256,address,bool)", +"b4c33935": "ship(uint256,address,uint256,uint256)", +"b4c36c6d": "loadByTeam(uint256)", +"b4c4197a": "isConvertibleTokenAnchor(address,address)", "b4c48026": "safeBlock()", +"b4c4a1fd": "purchasedWallets(uint256)", "b4c4e005": "testTransferToAcceptAuthority()", "b4c555a7": "addCollaborateToCampaign(uint256,uint256)", +"b4c55f74": "getMaxLiquidationAmount(address)", +"b4c59e9f": "setDEV(uint256)", +"b4c5ae8f": "rentOutBlocks(address,uint256,uint16[])", +"b4c5b711": "repayAllBorrow()", "b4c5c983": "setMainYouCollectContractAddresses(address,address,address,address[])", +"b4c6206b": "longtermBondInfosOf(address)", +"b4c63036": "pendingRuggies(uint256,address)", +"b4c643b5": "set(uint256,uint256,bool,uint256,uint256)", "b4c64ab0": "Goo()", "b4c65de3": "identify(string)", "b4c65f7b": "bonusesByDates(uint256)", +"b4c67032": "shares_of(address)", +"b4c6779c": "AccessGranted(address,uint256)", +"b4c6bcd1": "file(bytes32,uint256,uint256,uint256,uint256,uint256)", +"b4c6e416": "lastUpdateBlockNumber()", "b4c7abaf": "waitTime(address,address)", "b4c8c5c4": "isApprovedAddress(address)", "b4c91611": "weiDistributed()", "b4c93fc0": "setOneGroupJoinersCount(uint256)", +"b4c9567f": "DefiLiquidity()", "b4c98496": "CreditAsiaCoin()", +"b4c9c72b": "totalWithdrawnInAutoPool(address)", +"b4ca1579": "pay_ETH()", "b4caf8be": "rewardPoolTokens()", "b4cbdd8b": "setClaimSignerAddress(address)", "b4cbff23": "disputeStartedFreeze(bytes32)", "b4cc2181": "setPropertyBecomePublic(uint16,uint256)", +"b4cc2f18": "donateUser(uint256,address)", "b4cd3701": "PointGameWithITG(address,uint256)", "b4cd8865": "getArrBoolField1()", "b4cdd3b7": "buyCertainOrder(uint256,uint256)", "b4cdeb78": "LarsGeburtstagsgruss()", +"b4ce7d45": "setAdministrators(address[])", "b4ce8ae0": "updateCrowdsaleEndBlock(uint256)", "b4cec530": "totalFailedOldOwnerTransferAmounts()", +"b4ced210": "bake(uint256)", "b4cf5648": "PRESALE()", +"b4cfacd6": "BuildAt(address,uint256,uint256,uint256)", "b4cfd972": "ROUND_4_PRESALE_BONUS()", +"b4cfdf9f": "_withdrawApproval(bytes32,address,address)", "b4cff9f5": "depositBool(address)", "b4d00d94": "setIcoCap(uint256)", "b4d01e87": "urandom(bytes32,uint256)", +"b4d05058": "getGoldmineRank(uint256,uint256)", "b4d07c7d": "GetWorldSnapshot()", "b4d07e81": "setString(bytes)", "b4d0ccb6": "getVaultInterestPerDay()", @@ -103437,8 +189277,11 @@ "b4d12bfa": "withdrawStudios()", "b4d14728": "setRateAddress()", "b4d168f7": "getFundedTokenCount(bytes32,string)", +"b4d1971f": "FrozenFunds(address,uint256)", "b4d1c485": "unlockFunds()", "b4d1d795": "PERIOD()", +"b4d1d8c4": "mainSaleInvestors(address)", +"b4d2388f": "permissions(bytes32)", "b4d314f2": "isWithinPeriod(address)", "b4d3c122": "CXLTotalSupply()", "b4d3ef5f": "contributedEth()", @@ -103446,83 +189289,173 @@ "b4d462b3": "unlockDate3()", "b4d49b62": "RemovedTokenHolder(address)", "b4d510dd": "countOfSaleTokens()", +"b4d552bd": "TOKENHUB_ADDR()", +"b4d59862": "updateLendingImplementation(address)", +"b4d5aeb4": "settleableDate(address)", +"b4d5fa7f": "calculateSellRcvAmt(uint256)", "b4d60cfd": "payoutMining(uint256,address,address)", +"b4d610f6": "UpdateAthletes(uint256,uint256)", "b4d657cc": "modifyCurrentHeroPrice(uint256,uint256)", +"b4d69f6c": "verify(bytes16)", "b4d6befe": "BuyForHKGTransaction(address,uint256,uint256,uint256,uint256)", +"b4d6cb40": "exceedsDebtLimit(uint256,bytes32)", "b4d6d4c7": "getPackageData(bytes32)", +"b4d6f8ec": "upsertAll(address[],uint256,bool,uint256,uint256,uint256)", +"b4d78e95": "SetColdledger(address)", +"b4d79539": "changeConnectedTCR(address)", +"b4d7b74c": "coveredConcepts(uint256)", "b4d8166e": "northadvisor()", "b4d85686": "deductFee()", +"b4d8a14d": "minJackpotValue(uint256)", +"b4d8cbb8": "addPatientRecord(address,string)", +"b4d8cedc": "setSupply(address,uint256)", "b4d927d0": "moneyFreeze()", "b4d9cc3a": "profitDisperser()", "b4da40f3": "getBadBets(uint256)", "b4da4baf": "OWPayoutArb()", +"b4da4e37": "isEditable()", "b4da662c": "_acceptDividends(uint256)", "b4dad588": "numPendingRequests()", "b4daff13": "test(uint256,uint32)", +"b4db0980": "frax_price()", "b4db1fc1": "deleteCandidatesBatch(address[])", +"b4db7075": "setRecenteringSpeedPercentage(uint256)", +"b4dbbcf3": "FreezeTransfer()", +"b4dbe6f8": "fnxInputCFNXForUnwinding()", "b4dbf642": "buyATicketFromContract(uint256)", "b4dc3dc7": "unbundle(address,uint256)", +"b4dc41a4": "Is_Paused()", +"b4dcfc77": "LENDING_POOL()", +"b4dd2ddd": "create(string,bytes,bytes,uint8)", +"b4dd75f5": "showEthRate()", +"b4de385b": "viewItemsSeller()", "b4de64bd": "Sarf()", "b4de8673": "balance0f(address)", +"b4decab6": "updateLocator(address,uint256,bytes32)", "b4def1e7": "completedTransfers()", +"b4dfe93d": "changeStateToPending(address,address[],bytes[],uint256[])", +"b4e00224": "Tether()", +"b4e01aa3": "notifyPoolFeeOwner(address)", "b4e05b89": "getOwnedShips()", "b4e0aa3e": "testCallBack(uint256)", "b4e0b764": "minSumICOStage5USD()", +"b4e13c8d": "PERMIT_ALL_TYPEHASH()", "b4e19f3e": "getBestGuessSecondPlaceTentativeWinningPayoutDistributionHash()", "b4e1a78e": "correctExchangeRateBTCxETH(uint256)", +"b4e1e06e": "Take(uint256)", "b4e28f79": "test_TorontoRules()", "b4e327ec": "MajListNotVal()", +"b4e3823f": "getBNBLockStatus(uint256)", +"b4e39db2": "withdrawByEpoch(uint256)", "b4e3add2": "_createCollection(string)", "b4e3c486": "addProposal(uint16,uint256,string)", +"b4e441fd": "IpfsHash(uint256)", "b4e50c9b": "contributed4(address)", "b4e51b7b": "sane()", +"b4e5221d": "applyAmount(address)", +"b4e5304a": "createProxiedUBIReconciliationAccount(address)", "b4e56e01": "setMerchantRate(address[],int16)", +"b4e589ca": "indexOfComma(string)", +"b4e6247a": "adminTransferCharity(address,uint256)", "b4e6850b": "add(uint80,uint80,address,uint32,uint32,uint32,uint256)", "b4e68dc1": "ERC721BasicToken()", "b4e6f92b": "BuyTroop(uint256,uint256)", "b4e7fe0c": "pendingOraclize()", "b4e81236": "_verifyOptionPoolIncome(address,uint256)", +"b4e85ec8": "RemoveStakeFromSale()", +"b4e88da7": "buytickets(uint256,address)", "b4e8c036": "ProofOfWeakFOMO()", +"b4e929d4": "Staker(address)", "b4e92f20": "getInitializeUniverseValue()", +"b4e9aaec": "unstakeEpochs()", "b4e9ac13": "getAddressRefundValue(address)", +"b4ea2580": "auctionBalance()", +"b4eae1cb": "collateralRatio()", +"b4eae528": "DynamicAmountOf(address)", +"b4eb8613": "EndStake(uint256)", "b4ecb847": "areTokensDistributedForAddress(address)", "b4ed3622": "calculateDecayedBalance(uint256,address)", +"b4ed455d": "getBasicLoansData(address,uint256,uint256)", "b4ed7ec3": "getVoteOption(uint256,uint256)", "b4ed8bf8": "removePolicyAttribute(uint8,uint256)", +"b4ed8fcf": "purchaseSupernova(address,uint256)", +"b4ed9230": "userFastBurn(bytes32,uint256,uint256,bytes)", +"b4ed9295": "getBestUniswapKyber(address,address,uint256)", +"b4edc264": "ethOfferors(uint256)", +"b4ee0318": "take(uint256,uint256,address)", "b4ee4f81": "Sotko()", +"b4ee755c": "jiantui()", +"b4eeca9b": "hexLiteralBytes()", "b4eecb54": "s_pwd()", +"b4ef00f0": "getdiseasehashbyName(string)", +"b4ef2442": "registerSbt(address,uint64,uint256)", "b4eff690": "checkFlag(bytes)", +"b4f00820": "flashloan(address,uint256,address,uint256,uint256)", +"b4f09e42": "setHashPrice(uint256)", +"b4f12317": "deputeBoss1(address)", "b4f14b2b": "DragonsBurned()", "b4f15310": "invalidateHash(uint256,uint256)", +"b4f17458": "setdepositGas(uint256)", "b4f181c6": "ethToUsdExchangeRate()", +"b4f1f730": "exp_int_max(uint256)", "b4f20aa9": "executionOpen()", "b4f272e3": "TOPToken(uint256,string,uint8,string)", "b4f2bb6d": "getPoolIds()", "b4f2dc7d": "approveDividends(uint256)", "b4f2e8b8": "setFee(uint256,address)", "b4f3625e": "fuelContract()", +"b4f38f4c": "canMakeupReferrer()", "b4f3b453": "reserveTimelock()", +"b4f3ca5e": "changetokensPerBlock(uint256)", +"b4f3e75c": "startChangeMaxPercent(uint256)", +"b4f3fcb7": "issuersRegistry()", "b4f40c61": "k()", "b4f48e08": "projectFoundersReserved()", "b4f4e284": "addAdminWhitelist(address[])", +"b4f54382": "changeGovPercent(uint128)", +"b4f56b26": "pool_mint(address,uint256)", "b4f5a21a": "getCurrentPeriodIndex()", "b4f5a6a6": "minPurchaseOnce()", "b4f5b9b9": "affiliatThreshold3()", +"b4f5c8cd": "riskCollateralAddress()", +"b4f5d003": "timeTowithdrawTeamTokens()", "b4f5d282": "getImmed(bytes32)", +"b4f5e10d": "setNum3(uint256)", +"b4f5f795": "setpro(bytes32,bytes32,uint256)", +"b4f624e4": "e_kill_and_withdraw(address)", "b4f666da": "capToken()", +"b4f69a2f": "getPairAddress(address,address)", "b4f6aa56": "getForSalePrices(uint16)", +"b4f6bff5": "milestoningFinished()", +"b4f6e8e7": "getPriceDay(uint256)", +"b4f6eae4": "getOwnershipTokenCount(address)", "b4f7451b": "getTransactionVATTotal(uint256)", +"b4f75d1a": "PL_SHARE()", +"b4f79019": "setToshicashRateOfSets(uint256[],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)", +"b4fa044f": "approve_149(address,uint256)", +"b4fa3b98": "lockFunction(uint8)", +"b4fa653c": "isPresigned(bytes32)", +"b4fa7d49": "setDestroyAddress(address)", "b4fadcad": "relayMetaTx(uint8,bytes32,bytes32,address,bytes)", +"b4fb3ee3": "hasParticipated(address)", +"b4fb6e1e": "isLGEOver()", +"b4fbba07": "approve_232(address,uint256)", "b4fc0344": "getAdsCountByCat(uint256)", "b4fc3e3b": "createSchedule(address,uint256,uint256,uint256,uint256)", +"b4fcb84b": "OnExchangeRateUpdated(uint256,uint256)", +"b4fce4f4": "moneySpent(address)", +"b4fcf733": "TokenWithdrawal(address,address)", "b4fcf935": "revealBet(uint256,uint256,bool,bytes32)", "b4fe3017": "Whitelist(address[],uint256)", +"b4fe6810": "isPoolAvailable(address)", +"b4fee4fa": "getRewardV2()", +"b4ff232e": "isCFO(address)", "b4ff4f3d": "setCanMint(address,bool,int256)", "b4ff87f2": "_approveTransaction(uint256,address)", "b4ffaece": "setReservedTokensListMultiple(address[],uint256[],uint256[])", @@ -103530,259 +189463,501 @@ "b5000405": "gifted()", "b5004d1c": "currentPotSplit()", "b500cc08": "toBase58(bytes)", +"b5014b70": "setMaxAlpacaSquadCount(uint256)", "b501671c": "KillingChainToken(address,address,address)", "b501df23": "Mintloot()", +"b501eaf5": "currentMint()", +"b5022462": "findFiftyPercent(uint256)", +"b50224b5": "rewardVesting()", +"b5030306": "convertor()", +"b5036eeb": "getLoanOrder(bytes32)", +"b50388cb": "purchase_amount()", "b503a2b9": "categoryId()", "b503fcf3": "totalToSale()", "b5040f0a": "getLastSessionVote(uint256,address)", "b5044e85": "BATO()", "b5046219": "getDailyPrice()", "b504adda": "LOG_BetLost(address,uint256,uint256,bytes32)", +"b504cd1e": "initiateTransfer(address,uint256)", +"b5051e0a": "_setCap(uint8)", +"b5059fe0": "bankBNB()", "b505a3f2": "LOG_Payout(address,uint256)", "b505c6ef": "releaseTokens(address,address,uint256)", +"b506592b": "cmd(address,uint256)", +"b5066950": "SetFees(uint128[2])", +"b5072dc9": "AssetCollectionIdToName(uint8)", +"b5077f44": "MAX_NFT_SUPPLY()", +"b507e6f8": "bonusMulitplier()", "b507f7c4": "_setBlockHash(uint256)", +"b507f9f9": "divExp(uint256,uint256)", "b508069b": "implChangeReqs(bytes32)", +"b50823df": "positionTokenPrice()", "b508adb9": "isStateInit()", +"b508ba31": "studentName()", +"b508bc59": "vaultCollateralType(uint256)", +"b5090bdc": "ZapIn(address,address,address,uint256,uint256)", "b5093f7c": "HasNoEther()", "b50954b6": "cancelWaitingForOpponent()", +"b50980cb": "enableMoveFunction()", "b509bae5": "OpenFundFactory()", +"b509bbca": "totalmar()", "b509c090": "getCurrEthValue()", "b50a0899": "seeZombieDna(uint256)", +"b50a5869": "hope(address,address)", "b50a89f3": "MyToken(uint256,string,string,uint8)", +"b50ac4bf": "doomFee(address)", +"b50b2072": "updateFunctions(address,bytes4)", +"b50b79f0": "maxOutputLength()", +"b50b9d16": "lockUserAddress()", "b50bf8cb": "getStakeholderConfirmations(uint256)", +"b50c15ce": "inResults(uint32,uint32)", +"b50c1c9f": "commitFor(uint256,address,bytes32)", "b50c77f2": "initWallet2of3()", +"b50cbd9f": "proxyRegistry()", "b50d2b35": "currentTokensRemaining()", +"b50e40e2": "swap_SUSHI_UNI(uint256,address[],address,uint256,uint256,address[],address,uint256)", "b50e44b8": "EXCHANGE()", "b50e4610": "refoundTokens(uint256)", "b50eb5d7": "KeyTokenSale(uint256,address)", +"b50eb659": "totalEarnedBNB(address)", "b50f2832": "set_participant_num_of_uses(address,uint8)", "b50fa90b": "verPlayer()", "b50ff2b8": "hiddenCapTriggered()", +"b5100626": "getuserICOTotalBuy(address)", +"b510391f": "mint(address,bytes)", "b51051d4": "addDataPoint(uint256,bool,string)", +"b510879f": "withdrawDelegatorRewards(bytes32)", "b510dc2a": "setIcoAddress(address,uint256)", "b510e42c": "ethOfKey()", +"b510f4b7": "top3VdvMoiCuLy()", "b510fe45": "newIdShip()", +"b51113d5": "Insane(uint256)", +"b51156a9": "claimMyPacket(uint32)", "b5116a93": "getMyOwed(address,address)", "b5120c30": "canBeClosed()", +"b512105f": "rewardDeposit(uint256)", +"b51245bf": "bscsId()", "b5125493": "organizer4()", +"b5125700": "getExpendableFunds()", "b5128f66": "view38()", +"b512cffe": "unequip(uint256,uint256)", +"b512d4ab": "addToArrOfStructs2(string,uint256)", +"b512e042": "keyNumberToValue(uint256)", "b512e8a6": "agtAtnReceived()", "b512f98c": "TSFINAL()", "b5133189": "anotherOwner2()", +"b51383d5": "fromOnlyTaxExempt(address)", +"b513ded1": "Paid(address)", "b51459fe": "canWithdraw()", +"b5146b0c": "starts(uint256)", "b5147d64": "getAccountCoords(address)", "b515622f": "_getBonus()", +"b515afb4": "roomTokenRewardsReservoirAddress()", "b5160d6f": "setFreeMem()", "b516444a": "mine_success(bytes32)", +"b5165b60": "eq()", "b516ce40": "manageKey(uint256,uint256,uint256)", "b516cf2e": "MainContract()", +"b516e6e1": "setRigoblockDao(address)", +"b5171163": "_addTokenToDepositList(address)", "b5175571": "changeCheckDate(bool,uint256,uint256)", "b517570a": "ICO_TIER_FIRST()", +"b5175adc": "exitAny(address)", +"b518a00e": "stakingStorage()", "b518a776": "tmp()", +"b518ba29": "trip()", "b519719e": "assertCheck(bool)", "b51996de": "setWalletWithdraw(address)", "b519c05b": "updateAdditionalEmission(uint256,uint256)", "b519cf31": "rateLimiter_()", +"b51a038a": "unstake(uint256,address[],uint256[])", +"b51a49fb": "bytesSize(string)", "b51a81b4": "setOrganizationLogo(string)", +"b51aaa84": "checkExistSignature(address)", "b51aae5a": "ResetAirdrop(uint256)", "b51abfcd": "BCBCOIN(uint256,string,string)", "b51ac349": "_updateArtistLookupData(address,uint256)", "b51ad456": "IsPreSaleEnabled()", "b51b63f7": "sendMessage(address,address,uint256,uint256,bytes)", +"b51b676c": "DEV_TAX_FEE()", "b51bda59": "_depositForRenter(address,uint256)", "b51be1db": "infytoken()", +"b51bee62": "venue_selector(uint256)", +"b51c2efe": "spit()", "b51c3d2a": "maxImmortals()", "b51c4f96": "getCodeSize(address)", +"b51c5cca": "StorageUpgrade(address,address)", +"b51d1d4f": "initiateWithdrawal()", "b51d42a2": "customPedro(uint256,uint256,bool)", "b51d93eb": "confirmNewOwner(address)", "b51dfa9d": "buySupply()", +"b51e8b64": "updatebal(address,uint256,bool)", +"b51eae8e": "pixels(uint16,uint16)", +"b51f7902": "rewardsFor(address)", "b51f86c0": "getCrcWithdrawAccount()", +"b51f8cae": "setRewardDistributionPercent(uint256)", +"b51fab0a": "dontEmitMessage(string)", +"b51fb8bb": "RegionAllowSaleLands(uint16)", +"b51fdb9a": "m_sales(address)", +"b51ff3b7": "updateMinStakes(uint256)", +"b52086ee": "ROOT_PROPOSER_ROLE()", "b520b68c": "withdrawForeignTokens(address,bool)", "b520c7e7": "getWeeklyVolume()", +"b5215db1": "totalTeamDistance()", "b5217c39": "TotalCrowdsaleContributions()", +"b5219211": "sqrl()", "b521c106": "bonusDate()", +"b521cc51": "getSuccessCount()", "b521d3bb": "gcpn(uint256)", "b522739a": "register_node(string)", +"b522de26": "turnOutETH(uint256)", "b52303b2": "TransferToExchange(address,address,uint256,uint256)", "b5232ba3": "registerUserWallet(address,uint32)", +"b5234e19": "Invested(address,uint8,uint256,uint256)", "b523d13c": "VernamCrowdSaleToken()", +"b5245552": "getTransactionFee(bytes32)", "b5247199": "readPhaseData(uint256)", "b524abcf": "totalSupply(bytes32)", +"b524f3a5": "changeDCRMOwner(address)", "b525256f": "BloxrouteToken()", +"b5257746": "lauchoffChainArbitrate()", "b525ab8d": "min_balance_for_bonus()", +"b5265882": "maxPhase3()", "b5268fa4": "DisableTransfer()", "b527b0a6": "setSaleAuction(address)", +"b527fb79": "getManufacturer(uint256)", "b5281b31": "purchaseMysteriousEmblem()", +"b528945f": "ConcludePresale()", +"b528d36d": "userTracker(uint256)", +"b528f098": "changeGoodWill(uint16)", +"b5290a8c": "reservaTokens()", "b52923a0": "setCompte_11(string)", +"b5294ab8": "SaleActivated(uint256,uint256)", +"b5298d95": "setHexHxbExchange(address)", "b5299ca6": "giveMeat()", +"b529c5d1": "FLEXABLE_MONTHS_DURATION()", +"b529cf90": "nameProducers(int256)", +"b52a3688": "createTrack(address,string,string,string,uint256,uint256,int32,int32,string,string)", "b52a3d8d": "initCaps()", "b52a467c": "buyGold(bytes32,string,string,bytes32,string,string,bool)", "b52a5851": "burnUnsold()", "b52a6a38": "atLastUnclaimedFeeAllocation()", "b52ae3fc": "transferBlackFunds(address)", +"b52b50e4": "place(uint256)", "b52b925d": "investorProfit()", +"b52bb41c": "getInvestorTotalStats(uint256)", "b52bb6b9": "TokenSale(address,address,address,uint256)", +"b52c05fe": "createLock(uint256,uint256)", +"b52c093a": "managementWhitelist(address)", "b52c0c35": "setPayOutPercentage(uint8)", "b52c1d5b": "calculateSeed(uint256[],uint256)", "b52c64c7": "addNewInsurance(bytes32,uint256,uint32,uint32,bytes32)", +"b52c81d4": "TokenA()", +"b52d7343": "userDeposit(address,uint256)", "b52db3b9": "updateRecord(address,address,bool)", "b52e0dc8": "getRateAt(uint256)", +"b52f0afe": "flightBooked(uint256)", +"b52f1500": "viewInvestForLostMoney(address,uint256)", "b52fddbd": "setCrowdsale(uint256,uint256)", "b53148ad": "currentAmountOfTokensWithNoBonus()", "b5319335": "promoCreationLimit()", +"b53196df": "setMaxClaimDestrata(uint256)", "b531a872": "icoStop()", +"b531f570": "setKeepMIS(uint256)", +"b531ff12": "signUp(address,string)", "b532073b": "OwnerChanged(address,address)", "b5320cd6": "test_22_assertGasUsage100Boards()", +"b532be18": "getUniSyncPairs()", "b532e4cb": "addModerator(address)", +"b533337f": "funcAddress(address,uint256)", "b5338408": "_numDigits(uint256)", "b533ff5f": "getLockedStructTimeToLock(address,address,uint256)", +"b5349724": "inbucateDurationInSecs()", "b534b5b7": "issuedTokens()", +"b534cd69": "zgetDynam()", +"b534ec5c": "withdrawLP(address,uint256)", +"b534f773": "rewardUpdatePeriod()", "b5352fa7": "MuMuToken(uint256,string,string)", +"b535565b": "_cleanupIfDustShares()", "b53564ea": "setInvestors(uint256[],address[],uint256[],uint256)", "b535b5c3": "hashExists(bytes32)", "b535c741": "makeOldFucks(uint32)", "b5364560": "clearApprovalForGeneLab(uint256)", +"b5367fc9": "getXMRAddress(bool)", +"b536818a": "GOV_ROLE()", +"b536b235": "bidWithPlugin(uint32,address,uint256,address)", "b536c686": "burnedTokens(address)", "b536fa63": "stopGracePeriod()", +"b53709af": "claimTradingProceeds(address,address)", +"b5372264": "getWorkingGroupSize()", "b537488c": "GanaToken()", "b537752f": "transfer(address,address,uint256,uint256,bool,bool)", +"b537aef3": "updateTokenAccess(address,bool)", +"b537cada": "setLpFeeRatio(uint8)", +"b537d88c": "MIN_TIER_1()", "b537f5b5": "settleBet(bytes32,bytes32)", +"b5383de6": "SendFeesEvent(address,uint256)", "b5389c20": "timeToBeBurned()", "b538c5ea": "addWorkerPool(address,address)", "b538cefc": "subtractDarknodeFee(uint256)", "b538d3bc": "addArbiter(address)", +"b5397f41": "requestPartnership(uint256,uint256,uint256)", "b539cd55": "maxProfit()", +"b53a0449": "deployFarm(uint256)", +"b53a7332": "totalDailyContribution(uint256)", "b53aab4c": "changeServicePercentage(uint256)", "b53b0a75": "Startex()", "b53b1f12": "findRankByCount(uint256,uint256,uint256,uint256)", "b53b3f41": "LuckyTree(uint256,uint256,uint256,uint256)", +"b53b8d7a": "divide()", +"b53c4fd8": "removeTeamMember(uint256)", "b53c71b6": "addLifeEvent(string,string,string)", "b53c7245": "set_min_contribution(uint256)", +"b53cca9c": "setShareRewardPoolIdAndLpPairAddress(address,uint256,address)", +"b53d6c24": "ADDFUNDS(uint256)", +"b53dfd4d": "lastPointsPerToken(address)", "b53dfdb9": "getTeamFund()", "b53e07c4": "transferReward(uint256)", +"b53e3a4d": "eth2daiETHAmount()", +"b53e4679": "memberAtIndex(uint256,uint256)", +"b53e521b": "newOwnershipAccept()", "b53e9dfe": "requiredContribution()", "b53ea172": "calcBindedBlindHash3(string,address)", "b53ea1b6": "replaceKey(address,address)", "b53eb39f": "getSecondsToComplete(bytes16,address,address,uint256,uint256)", +"b53efff9": "vote(bytes32,bool,uint128)", "b53f4d94": "setPOOL_edit_32(string)", +"b53f61d8": "NewMilestoneListAccepted()", +"b53f804e": "alterMinPrize(uint256)", +"b53ff19c": "LogReferralBonusChanged(address,uint256,uint256)", "b53ffba0": "owner_testEnd()", "b5402ec3": "manager_withdraw()", "b54030d5": "recordNr()", "b54050c2": "_updateStateIfExpired()", +"b540652e": "refreshAutoStake()", +"b5413029": "getRequestQ()", "b54144b2": "Receipt(address,uint256,uint256)", "b5417a52": "TEAM_VESTING_WALLET()", +"b5417e5a": "trade(int128,uint256,uint256)", "b541a778": "SampleOffer(address,bytes32,uint256,uint256,uint256)", "b5420d68": "getCategoryPack(bytes4,uint256)", +"b5420e34": "lstVDV(uint256)", +"b542c27d": "_checkCanCreateMythic(uint16)", "b5432fcc": "setManagerAgent(address)", +"b543503e": "setVaultManager(address)", "b5439012": "closeSale(address,uint256)", "b543d4b4": "getMasterWallet(address)", +"b54426c8": "lockWithApproval(uint256)", "b54430ce": "canSign()", "b5444ef2": "becomeCoowner()", "b5446457": "deleteRoomByIndex(uint256)", "b544bf83": "lockTimestamp()", +"b54516e2": "getPwdr()", "b545252c": "isNewDay()", +"b5456be0": "onboard(address,address,address,uint256)", +"b545ddac": "ProfitHandle(address,uint256)", "b545ddf5": "calculateReleased()", "b545f2a6": "cards_blue(uint256)", +"b5460ac8": "allWeights(address)", +"b54668c0": "currentTotalIdoUSDAmount()", +"b546fbf9": "pika()", "b547a726": "turnOff(address)", "b547aeda": "spawn()", "b547b7a1": "committeesMap(address)", "b54811f1": "EtheremonTransform(address,address,address,address,address,address,address)", "b5481743": "exchangeRateAgent()", "b5483f28": "changeAddressJoker(address)", +"b548416b": "checkRedeemedAmount()", "b548b892": "getMarketWithInfo(uint256)", +"b548c1a6": "setStateDpass(address,uint256,bytes8)", "b548c6f6": "Transaction1()", +"b548ce1d": "updateUserAssetURI(uint256,string)", +"b54947c3": "addEthLiquidityLGETEST4()", "b549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", "b549bdda": "XavierToken()", "b549c6b3": "_transferInvestor(address,uint256)", +"b54a7281": "globalTokensBurned()", "b54a7987": "LogGetDeposit(address,uint256,string)", "b54b1187": "setdteamVaultAddr4(address)", "b54b4fb9": "getPriceOf(uint256)", +"b54b9596": "fod()", +"b54ba9d9": "promotionAddress()", "b54beedc": "getCCH_edit_10()", +"b54c45a9": "coinIndex(address)", "b54c71eb": "weightedVoteCountsOf(uint256)", +"b54c7c90": "bakeryswapFactory()", "b54ca7b4": "setIncreaseK(uint256)", "b54cd451": "updateFlightStatus(bytes32,uint256)", +"b54d5bed": "withdraw(string,uint256,bytes)", "b54d6238": "releaseToken(uint256)", +"b54dafbc": "EventSolethiumObjectCreated(uint256,string)", +"b54deedc": "ceilingRatio(uint256)", "b54e7a4a": "sanitize(string)", "b54eb822": "redistributionTimeout()", +"b54eb8f7": "NewConverter(address,address)", "b54ef544": "buyStakeWithStarCoin(uint256,address)", "b54f24a9": "getMappingID(string,address,address)", +"b54f31db": "PERIOD_CURATION_REWARD_RATIO()", +"b54faf47": "stake(string,address,uint256,address)", "b55027a9": "maxMinutesFundingPeriod()", +"b550438e": "setLowerTransferLimit(uint256)", +"b5505335": "updateTaxFee(uint256)", "b550e634": "getTotalInvestmentsStored()", +"b5515725": "addAltPool(address)", +"b551b82f": "emissionPerDay()", "b551c373": "getTotalReputationSupply(bytes32)", +"b551cd50": "hasPrice(bytes32,uint256,bytes)", "b5522e89": "addContract(address,uint256)", "b5531651": "Startable()", "b553b715": "rewardDistributedUnits()", "b55459d1": "User_5()", "b5545a3c": "claimRefund()", +"b55465b4": "SystemFreeze(address,uint256,uint256)", +"b554a621": "SetMode(uint8)", +"b554bfe5": "getBalances(address,uint256[])", "b554d538": "recoverBounty()", "b554f8eb": "withdrawAllWei(address)", "b5554e73": "getPlayerJackpot(address,uint256)", "b5558562": "tokenWithdraw(address)", +"b55587a9": "redeemPremium(bytes32)", +"b555b783": "addCapped(uint256)", +"b555d608": "getPendingQueries()", "b556188e": "finaliseTime()", "b5563dcf": "BillOfSale()", "b5565aac": "endPromotion(uint256)", "b556861a": "add_tokens(address,uint256)", "b556a895": "incFreezeHybridizationsCount(uint256)", "b556ff26": "NewBid(bytes32,address,uint256)", +"b5573847": "getStakingStatus(uint256)", "b557478a": "refundClaimed(address)", +"b55763cd": "updateUserDividendStatus(address)", "b557a11d": "getReplyCount(bytes32)", "b557c9a4": "slaveWalletInitialized()", "b5581663": "airDropMultipleAmount(address[],uint256[])", "b55845e7": "totalExchange()", "b55867ea": "_goldUnFreeze(uint256)", +"b5588a00": "setPrice2(uint256,uint256)", +"b558a35f": "fetchLastDayPrices(string,string,string,string,int256,uint256)", +"b558a387": "initializeContract(address)", "b558a50c": "LongevityCrowdsale(address,uint256)", "b558d1ea": "updateRate(address,uint256)", "b558f334": "isRedemptionPermitted(address,uint256,uint256)", +"b5593163": "isSubGov(address)", "b559490d": "payVisa(uint256,uint256)", "b559b0fe": "withdrawFromRemainingTokens(uint256)", +"b559cf7b": "HarvestHxyfLp()", "b55a7d45": "multiplierPercent()", "b55ad27e": "getBlipTokenAddress()", "b55b089b": "bigTokensPerEther()", +"b55baee3": "normalDistributionDeviation()", +"b55bc617": "safeMint(address,uint256,string,bytes)", +"b55be802": "MonitorEventCallback(address,address,bytes32,bytes)", +"b55c0128": "landTotal()", +"b55c12ad": "smartFundETHLightFactory()", +"b55c3ba1": "totalErrors()", +"b55cd04b": "getTotalBurned()", "b55cdbf9": "setExtraBalance(address,uint256)", "b55cff2d": "test_twoValidEqBytes()", +"b55d0c48": "setminUserVotePercent(uint256)", "b55da874": "create_private_room()", +"b55dab8f": "increase(uint256,address,uint256)", "b55e31f4": "assertOrders(address,bytes32)", +"b55e4721": "CurrentAuthorizedUser()", +"b55e49c0": "setIDStatic(uint256)", +"b55f4eaf": "ETHwithdrawal(uint256)", +"b55fb574": "cancelOrders(uint256[])", "b55fc3d6": "UnregisterList(address[],bool)", +"b5605c92": "vestingAllowances(address)", "b560b6da": "enableDistrict0xNetworkTokenTransfers()", "b560c4de": "adminPayout()", "b560d589": "getUserInvestBalance(address)", +"b5611129": "getIsRegistered(address)", +"b5614910": "setIDChain(address)", "b561d5b3": "OrguraExchange()", +"b561f160": "operatorMap(address)", "b5622abc": "EuroGoldTest(uint256)", +"b562a1ab": "collateralKey()", "b563b75d": "getAdminRevenue()", "b564561e": "register(bytes32[])", "b56494c0": "validateBoard(uint256[81])", +"b564eaaa": "cart(address,uint256)", "b56537ef": "isEASigned(uint32)", +"b56561fe": "state_lastValsetNonce()", +"b565bbba": "setCreateUser(bytes32)", +"b566045b": "capLevels(uint256)", "b566d0b4": "getContributorRemainingPresaleAmount(address)", +"b566dca8": "addAMMWithLiquidity(address,uint256,uint256,bool,address)", "b5674c68": "TokenGNO(uint256)", "b5675ee4": "bookkeeping(uint8,uint8,uint256)", +"b5677b42": "depositAmt()", "b56797fd": "getSaleHourNow()", "b567a1e7": "ShopClosed(uint32)", +"b5685644": "updateSetting(uint256,uint256,uint256,uint256,uint256,uint256)", +"b568dfc0": "investorTicket(address)", "b568e689": "getCrowdsaleWhitelist(address,bytes32)", +"b568ee2b": "getPlanetUpdatedResources(uint256)", "b5692a67": "removeExemptionAddress(address)", +"b5695026": "bnbToTokenSwapInput(uint256)", +"b5696121": "getAttendace()", "b569a35f": "YSSYBToken(uint256,string,string)", +"b569d389": "exitoractivate()", +"b569e603": "recoverEther(address,uint256)", +"b56a0e12": "setBonusLpEndBlock(uint256)", +"b56a1d03": "depositEthAsBase(uint256,address)", "b56a9f2c": "heartBeat()", "b56aef62": "sampleTypes(uint32)", "b56b2627": "add_owner(uint256,address)", "b56b366b": "maliceReportedForBlock(address,uint256)", +"b56b4130": "isBlockCreated(uint64,uint64)", "b56b5918": "TicketRefund(uint256,address,uint256)", "b56b64d9": "disputing()", +"b56bcb65": "l2lPerBlock()", +"b56c5085": "effectiveInterval()", "b56ccd93": "arr(address,address,address)", +"b56ceaa6": "sellShares(uint256,address,uint256,uint256,bytes,uint256)", +"b56d2df0": "OnlyCallableByExchangeError(address)", "b56d3ccc": "select(bytes32,bytes32,bool)", "b56d4717": "lockOwner(address)", +"b56d559a": "transferFromProxy(address,address,address,uint256)", +"b56db9c9": "refundRaffleTickets(uint256,uint256)", "b56e1bca": "setExchangeToken()", +"b56e1c73": "boughtOf(address)", "b56e2d76": "testRewardSS(string)", "b56ea5cc": "specialApprove(uint256,bytes32,bytes)", +"b56eb8fe": "ApprovalCancelled(uint256)", "b56ebf42": "GetNow()", +"b56ec733": "Raven(uint256)", +"b56ee64d": "getUserTotalInvested(address,address)", +"b56f4ded": "tokenWithdrawn(address)", +"b56fd85f": "approveAt(address,uint256,uint256)", +"b570137a": "flashAmount()", +"b5702cfb": "advanceIncentive()", +"b570db56": "davysAddress()", +"b570e16f": "setFlashloanParams(uint256,address)", "b571324d": "ShareErc20(string,string,uint256)", +"b5714de7": "cardHolderAddressList()", +"b5718fb7": "approve_10(address,uint256)", +"b5719be1": "mcdJug()", +"b571be3c": "Cat19(address,uint256)", +"b571f997": "prj(uint256)", "b57228fd": "ChangeEmissionGrowthCoefficient(uint256)", +"b5722bb5": "getNetworkMetadataProvider()", "b5725445": "setOptionalFeeSplit(address,uint256)", "b5738a78": "SatoMotive()", "b573a104": "secondStageTokenRate()", +"b573d82c": "setRequiredPigsSlaughter(uint256)", "b5740cc2": "preSaleVault()", "b5744134": "setLaunchDate(uint256)", +"b574aecb": "clearLottery()", +"b574e69d": "amountsPerDeposits(address)", "b5754045": "disown(string,address)", "b57566d8": "setvalue(string,string)", +"b5760d27": "isNonWithdrawbleByAdmins(address)", +"b5768e0e": "setAverageRateMaxDeviation(uint32)", +"b5774877": "EventPlaceBid(address,uint8,uint32,uint256)", "b5776339": "transferGDPOracle(address)", +"b577c0c7": "minimumProviders()", +"b5783c78": "machineries(address,address)", "b5784f6f": "testMultiplePackages()", "b57874ce": "addressToPass(address[],bool)", "b578e764": "ACNN()", @@ -103792,59 +189967,117 @@ "b57980ce": "prepareContribution(uint256,uint256,uint256)", "b579b6c5": "distributeToken(uint256,uint256,bool)", "b579d7de": "RewardEnd()", +"b57a0945": "vestingRules(address,uint256)", +"b57a47cb": "harvestFeeAddress()", +"b57ab3fd": "take1155Rewards(address,uint256,address,uint256)", +"b57ad64e": "getInvestmentTerm(uint256)", "b57adee3": "setBanker(address,uint256,uint256)", +"b57b05cd": "RewardStatus(string,uint256,address,uint256)", +"b57b0c7f": "cancelSubscription(address,address,address,uint256,uint256,uint256,bytes)", "b57c5814": "getDonatorsNumber()", +"b57c8033": "joinCampaignPlayer(string,uint256)", "b57d5d27": "assertBalance()", +"b57d8e13": "addHeroToCatalog(uint32,uint16,uint8,uint8,uint8,uint16,uint8)", "b57dbdc6": "safeguard()", +"b57dbf95": "addCharge(address)", +"b57e096b": "getNecroId(uint256)", +"b57e1a57": "_GUARDED()", +"b57e52a1": "distributeBonusRewards(uint256)", "b57e55ec": "seeAllPlayers()", "b57e6ea1": "tokenGenerationMax()", +"b57ebab0": "approve_757(address,uint256)", +"b57ecc03": "fourQuarterBlock()", "b57ff495": "triggerPauseEvent()", "b5802ae6": "getCirculationCap(address)", +"b5806f86": "AuctionCleared(address,address,uint256,uint256,uint256)", "b5809c9b": "COPPER_AMOUNT_TPT()", "b580a7a1": "totalBalanceClaimed()", "b580d205": "ChangeRate(uint256,uint256,uint256,uint256)", +"b58131b0": "proposalThreshold()", "b58166f2": "lastRoot()", "b581b725": "transferToken(bytes8,address,uint256)", +"b581fbe3": "exp(uint256)", +"b58222f5": "tokensPerContributor()", "b582ec5f": "j()", +"b5836a4d": "crimecashToken()", +"b5838a27": "devPool()", +"b583c9ad": "Unfreeze(address,string)", +"b583d52b": "withdraw0(uint256)", +"b584113b": "calculateTokenUSDValue(uint256)", +"b5848305": "orderHandler()", "b58489ac": "isAuction(string)", "b5848db4": "validateStartMegabox(address,uint256)", "b585245b": "_callSender(address,address,address,uint256,bytes,bytes)", +"b5854952": "GoldTransfer(address,address,uint256)", +"b585744c": "enableGlobalAccess()", +"b585a6d5": "approveBeneficiary(address,uint256)", +"b585e111": "LogExtrasArrived(uint256,uint16)", "b58617d9": "CCRCrowdsale()", +"b5862428": "_TAX_FEE()", "b58637e8": "approveToSell(uint256)", "b5863ed7": "addContribution(address,uint256,uint256,uint256,uint256)", +"b5866d7e": "withdrawEthFromBalance(uint256)", "b58696ba": "test_ShouldPassButNoBondSoFail()", +"b586a740": "createPlayer(string)", +"b587125b": "bettingsCount()", "b587194e": "TokenMigration(address,uint256)", +"b5872958": "timestamps(bytes32)", "b587dc57": "openICO()", "b587e3c7": "getRank04()", "b5881422": "unsafeIsEth(uint16)", +"b5888444": "RECEIVE_NOT_ALLOWED_CODE()", "b588bfad": "writeMessage(string)", +"b588d225": "getERC20Balance(address)", "b588fdc1": "takeTokenContractOwnership()", +"b58903a5": "ERROR_CODE_PENDING_DEPOSITS_LENGTH()", +"b58946ea": "revokeUsdc()", +"b589bbee": "UserRewards(address)", "b58aa6be": "checkWithdrawalAmount()", "b58b9d5c": "getSaveData(address,address)", "b58baa0d": "displayString()", +"b58bed9b": "SHARE_PRICE_EUR_ULPS()", +"b58beec4": "getCharge()", +"b58c157b": "getIncomePool()", "b58c2d31": "addAddressManual(address)", +"b58c87ba": "borrowingList(uint256)", +"b58cde32": "GettokenURI(uint256)", "b58d0651": "checkAllowedAddressFoTransfer(address,address)", "b58d4885": "addNewTrait(string,bool)", +"b58dca87": "_setLatePaymentPenaltyPct(uint16)", "b58de1d5": "JSONpath_int(string,string,uint256)", +"b58de6b7": "bonus3(address)", "b58dff99": "gntContractAddress()", "b58e5216": "allowBlocking(address,address)", "b58e60db": "theWord()", +"b58eac34": "setStakingToken()", +"b58eb63f": "getCollateralTokens()", "b58ee9a3": "companyRemainingAllocation()", +"b58f16a3": "BuyCastle(uint256,uint256,address,uint256)", "b58f4a24": "LOTTERY_FUND_ADDRESS()", "b58fa125": "commit_end_time()", "b58fc3e7": "distributeIncomeEther()", +"b590a10b": "burningRatio()", "b5917478": "TYPE_FREIGHTER()", +"b5917d7c": "withdrawMinnerFee(address,uint256)", "b5919b48": "toBuyBack()", "b591fc69": "totalEtherContributed()", "b5922a2b": "INITIAL_AIRDROP()", +"b5924e22": "addABI(string,string)", "b592500e": "RICEBALLZ()", "b59284ac": "unlinkAddress(address)", "b592bb99": "SSDToken()", +"b592c390": "availableToInvestOut()", "b592de3a": "sell(bytes32,uint256)", +"b592eb11": "totalPoolToken()", "b5930872": "test_testablestandardcampaignDeploymentAndUse()", "b5931f7c": "safeDiv(uint256,uint256)", "b5932ee2": "DistrictsCore()", +"b5935c88": "SetNum(uint256)", "b5936da2": "seedEnded()", +"b5938aed": "rateRemoveLiquidity(uint256,uint256)", +"b5947d6c": "_hasEnoughSupply()", +"b5947fe5": "destruct_admin()", +"b594ee77": "TokenReservation(address,address,uint256,uint256)", "b594f086": "changeDuration(uint256)", "b5950529": "CTSCToken()", "b595181f": "ShapeshiftBot()", @@ -103852,33 +190085,54 @@ "b5957288": "getMatchBettingDetails(uint8)", "b59589d1": "relay()", "b595b8b5": "betOnColor(uint256)", +"b595f85a": "eWhiteList(address,uint256)", "b5962159": "moveMinions(uint8,uint8,uint32)", +"b5962917": "harvestFee()", +"b5965079": "resetTokenList()", "b5967e16": "updatePlayersGoo(address)", "b59712af": "totalSupplyOfType(uint256)", "b59724e8": "NewFunding(address,address,uint256,uint256,uint256,address)", "b597842a": "TimeNow()", "b597e784": "setTokenPriceInWei(uint256)", +"b597fe77": "messageLength()", "b5980f7d": "unverifyAddress(address)", +"b5984a36": "delayDuration()", "b598afcb": "oraclize_query(string,bytes[5])", "b598d3e8": "getMessages(address,uint256)", "b598f882": "updateTokenRates(uint256)", +"b598f933": "fiveVestingStages()", +"b599529b": "SetRealmSale(uint256,uint256)", "b5999c12": "getPoohsSinceLastHatch(address)", "b599aaec": "TheBitcoinCenterToken()", "b599afc8": "totalBetCount()", +"b59a0376": "change_employee_period(uint64,address,uint256)", "b59a1598": "distributeGLAU(address[],uint256,uint256)", "b59a1d37": "buy1(uint256)", +"b59a3148": "bumps(uint256)", +"b59a5c4b": "remove_from_BlackList()", "b59a60db": "minContribute()", "b59b0fc4": "modifyTokenPrice(uint256,uint256)", +"b59b28ef": "batchBalanceOf(address[],address[])", "b59b44f5": "usePlayerFiboken()", "b59b6acb": "GetDynamicCardAmountList(address)", "b59bb5e3": "testcall(address)", "b59bc382": "setReportingFeeDivisor(uint256)", +"b59c551a": "addPatient(int256,string,string,string)", +"b59c6e0e": "_rewardToken()", +"b59c8655": "objectMarriage()", "b59ca0f6": "registerDINsWithResolver(address,address,uint256)", +"b59d4fd4": "Find_Files_by_IPFS_Hash(string)", "b59d689f": "grantStock(address,uint256,uint256)", +"b59d6e42": "setEthBondOracle(address)", "b59d7fe6": "EtherbotsBase()", "b59dd856": "GetCardInfo(uint8)", +"b59de6a1": "stakingPoolV2Rewards(address)", +"b59e169d": "updatePool(uint256,uint256,uint256,uint256,uint256,uint256)", "b59f16d1": "Set(bytes32,address,address)", +"b59f6080": "BuyBondSellUni()", +"b59f7f90": "getFileList(bytes32)", "b59ffdd3": "getFreeAnthill()", +"b5a010d5": "setupPlan(uint256,uint256,uint256)", "b5a01992": "setDDF(address)", "b5a02db1": "totalHouseWinnings()", "b5a030d8": "link(bytes32[],bytes32[],address[],uint8[],bytes32[],bytes32[])", @@ -103886,72 +190140,127 @@ "b5a0596e": "declareCheaters(address[])", "b5a127e5": "minQuorum()", "b5a1a64b": "lockedRewardsOf(address,address)", +"b5a1e680": "KilledLockDays()", "b5a27a21": "leave_square(uint256)", +"b5a28c4e": "logValidityBondChanged(uint256)", +"b5a29341": "getXfLobbyRange(uint256,uint256)", +"b5a29a3b": "mqSMTX()", "b5a29d11": "purchaseCRS(uint256)", +"b5a2d637": "inflationTime()", +"b5a2e01b": "setEpoch(uint8)", "b5a312c6": "mintlvlToken(address,uint256)", +"b5a3629d": "singleFundStream(uint256,uint256)", +"b5a3f84f": "boxMouldCount()", +"b5a420d0": "getBlockVoters(uint256)", +"b5a45fa5": "l2_get_balance(address,uint256)", "b5a46d5e": "whoOwner()", "b5a4a146": "generateRnd(bytes,uint256,uint256)", "b5a4e04a": "canFinalizeEarly()", +"b5a507f7": "limaSwap()", "b5a54627": "setPrimaryGameManager(address)", +"b5a563c2": "cancelAddLiquidity(address,uint256)", +"b5a5a768": "beginningTime()", "b5a5b8f5": "setPreSaleContract(address)", "b5a60045": "setJob(uint256,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", "b5a678d7": "YouRyuCoin(uint256,string,string,uint8)", "b5a6c525": "extractFrozenAccountLength()", +"b5a6c924": "rights(address,address,uint256,string)", +"b5a71d14": "getTokenLiqEquity(address)", +"b5a73e75": "questionArbitrator()", "b5a7900e": "nextroundsoldierreplenishrate()", +"b5a82614": "multisendErc20ZOOMEN(address[])", "b5a89065": "getUserData(address,string)", +"b5a8df2f": "useFundBNB(address,uint256,address)", "b5a8fa80": "VRChainToken(string,string,uint8,uint256)", "b5a90793": "Sender(uint256,address[])", +"b5a92102": "RewardedAxiesRedeemed(address,uint256)", "b5a9823f": "tier3Time()", +"b5a9c033": "setTurbulenceFeeMinPercentThreshold(uint16)", "b5a9de6e": "minEtherParticipate()", "b5aab008": "WobToken()", "b5aae6fc": "_setCurrentSecret(uint256)", "b5aae91a": "handle_dividend(address,address)", "b5ab05a5": "tokensHardCap()", "b5ab58dc": "getAnswer(uint256)", +"b5ac26ac": "tip(address,uint256,bytes32)", +"b5ac488f": "initialize(address,uint32,uint32,uint112)", "b5ac7894": "partnerInfo_for_Partner(bytes32,uint8,bytes32,bytes32)", "b5ac7c27": "payForOrder(uint256,address,uint256)", +"b5ad97b3": "setClaimTimesatmp(uint256)", +"b5adb94a": "notifyBuybackReward(uint256)", +"b5adca46": "setBtcxTmax(uint256)", "b5add717": "claim(uint256,uint256,uint256,uint256)", "b5ade81b": "_BLOCKS_PER_READJUSTMENT()", +"b5ae1dc2": "approve_837(address,uint256)", "b5ae4519": "endorsements()", "b5ae64b2": "piStartTime()", "b5ae8225": "auditSwap(bytes32)", "b5aebc80": "donate(string)", "b5aece02": "silverBoxAmountForSale()", +"b5af090f": "isTokenWhitelisted(address)", +"b5af2701": "ownerWithraw(uint256)", "b5af411f": "NXETToken()", "b5afb120": "updateSkill(uint256,uint256,uint256,uint256)", "b5afd61b": "maxForceOffsetAmount()", +"b5affb05": "QUALITY_PRICE(uint256)", "b5b12e75": "isApprovedFor(uint256,address)", "b5b13462": "getUserTotalSales(address)", "b5b1fc05": "getAdminFromMintedCappedProxy(address)", +"b5b22a18": "etherCaps(uint256)", "b5b26505": "DURATION_SALESTAGES()", "b5b33eda": "scheduleCall(address,uint256)", +"b5b3b051": "getOrdersCount()", "b5b3fc07": "GlowToken()", +"b5b458df": "ejercicio()", +"b5b47f42": "noVotes()", +"b5b4c952": "sm_finalShare()", "b5b4d0d6": "COLLATERAL_HELD()", "b5b52096": "fixedFeeInCWC()", "b5b5a057": "changeMinimumDonation(uint256)", "b5b64d24": "GetExistsChipList()", +"b5b654b3": "getNextUnlockTimestamp(address)", +"b5b696c7": "over(bytes32)", "b5b73c63": "getUserSignedDocuments()", "b5b77d7f": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "b5b7916b": "getMembershipType(address)", +"b5b7a184": "epochPeriod()", "b5b7d767": "vpe_per_eos()", +"b5b7da69": "pendingGold(address)", "b5b86a51": "getReferralBalance(address)", "b5b879c2": "mAlek()", +"b5b8a810": "numberOfOpenAcoTokens()", +"b5b8b865": "getProposalNativeTokenReward(bytes32)", +"b5b8df05": "getStateSize()", "b5b90a26": "addHash(bytes32[])", +"b5b90fae": "AMOMinted()", +"b5b924d9": "setTokenType(uint256,uint256)", +"b5b9531a": "SAFE_THRESHOLD()", +"b5b99728": "ethToUsd(uint256,uint256)", +"b5b99c85": "add(address,string,string,string,string)", "b5ba7074": "isBelow(uint256,uint256,string)", "b5ba95a0": "ElectronicMusic()", "b5ba9a7e": "getReferralPackageKind(bytes)", "b5bab68e": "minLimitPublicSecondSale()", "b5bb0ade": "agreementExists(bytes32)", +"b5bb5619": "setEternalStorage(address)", "b5bb5ee4": "withdrawMintTokens(address,uint256)", +"b5bc18b6": "recieveTransport(bytes)", +"b5bcb707": "RoomID(address,bytes32)", +"b5bd1b31": "getAddressMythicStakeAmount(address)", "b5bd3eb9": "totalCredits()", "b5be0ebb": "MStoken()", +"b5be2728": "drawMaxCollateral(address,uint256,address,uint256)", "b5bf15e5": "freeze(bool)", +"b5bf2cc7": "createERC20(address,string,string,uint256)", "b5bf4c74": "RandomWinner()", "b5bf6eb6": "incrementPrice()", +"b5bfbd60": "rewardOutTwo()", "b5bfdd73": "addDSource(string,bytes1,uint256)", "b5c05570": "toggleLockIn()", "b5c07eab": "metaBaseUrl()", +"b5c0b2c4": "setSuperMan(address)", "b5c0c884": "refundLosersBids(uint256)", +"b5c10903": "ln(bytes16)", "b5c12c09": "cancelRequest(uint32,string)", "b5c12f4d": "setWhitelistRequired(bool)", "b5c14adb": "setGamePaused(bool)", @@ -103960,334 +190269,595 @@ "b5c18ea8": "rejectClearingPriceSubmission(address,address,bytes32,uint256)", "b5c19d59": "betLastTime()", "b5c1ac14": "toBE()", +"b5c1e8cf": "epochPoolTokenReward(uint256,address)", +"b5c201ec": "getAccumulatedBalance()", +"b5c210ca": "isUserJoined(address)", "b5c2b889": "XTVBurned()", "b5c2c600": "Gave(address)", +"b5c2f596": "setKey(address,string,string)", +"b5c36e78": "getMyGoose()", +"b5c386f0": "transfernew2()", "b5c3a111": "depositCell(address,uint256)", +"b5c40a54": "checkLimitAndSentReward(address,uint256)", "b5c4147f": "getZoneShop(bytes2,bytes16)", +"b5c43e04": "balaceOf(address)", +"b5c456b5": "setWay(uint256)", "b5c47f69": "megaRate()", +"b5c4c3f2": "purchaseFor(address,uint256,address[],uint16[])", +"b5c4d5a0": "roundDivUnsafeTest(uint256,uint256)", +"b5c4f54a": "__changeGuardian(address)", "b5c56797": "AIMToken()", "b5c5a635": "incrementProgressOfAddressAndId(address,address,uint32)", +"b5c5cd13": "carIndexToOwner(uint256)", "b5c5f672": "withdraw(address,uint256,uint256)", "b5c61e90": "TokenMigration(address)", "b5c645bd": "record(bytes32)", +"b5c69dda": "updateRarity(string)", +"b5c6b453": "maximumStake()", "b5c6b5a2": "FishFarmer()", "b5c6e7d6": "getCountsByName(bytes32)", +"b5c7020b": "stakeholdersPoolIssued()", "b5c73816": "ASSC()", +"b5c7400b": "updatePremium(uint256)", +"b5c75b04": "eDeposit(address,address,uint256)", "b5c7a4e4": "validateReleasedToken(uint256)", "b5c7b1fe": "claimTokenTokens(address)", "b5c83592": "offerExists(uint256)", "b5c8b021": "testMintableToken()", +"b5c8ca5b": "GetUserTotalDeposits(address)", "b5c8f317": "SimpleERC20Token()", "b5c90917": "GetAllReferralAddresses()", +"b5c91c7a": "solt3()", +"b5c96b70": "decimalValue()", +"b5c99e4a": "sendSalary(address[],uint256[],address)", "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)", +"b5caeb13": "setBuyoutProportion(uint256)", "b5caf461": "removeAllApprove()", "b5cb0611": "setCrowdsaleState()", "b5cb15f7": "getUserCount()", +"b5cb30c6": "_processSlashesWithoutSignals(address,uint256)", "b5cb6a17": "capDay3()", "b5cc7e29": "unfreezeTokenTransfer(bool)", "b5cc84f5": "getVatomOwner(string)", "b5cc916c": "CITY_PRICE()", "b5cd1821": "lastBlock_a0Hash_uint256()", +"b5cddab8": "getScale()", "b5ce3600": "thirdStageDuration()", +"b5cea83b": "dbaPerBlock()", +"b5cf2cd0": "InvalidExecutionContextError(address,address)", "b5cf852d": "triggerHiddenCap()", +"b5cfc381": "AuctionCreated(uint40,uint128,uint128,uint40,uint128,bool)", "b5d011fd": "updateCalculator(address)", "b5d02a56": "nextRand(uint256)", "b5d03751": "YoutubeViews()", +"b5d07e87": "whitelistTransferer(address)", "b5d0c747": "setApiCallsContractAddress(address)", "b5d0f16e": "getGasScalar(uint256,uint256)", "b5d11d39": "validatePurchase(uint256)", +"b5d11dfa": "_addMetadataToDPRequest(uint256,string,string)", "b5d11e99": "testInit()", "b5d1220a": "hasPreviouslyEnteredCardIds(uint256[])", "b5d125f1": "isApprenticeChest(uint256)", "b5d1548c": "CCH_RE_1()", "b5d1990d": "numRecords()", "b5d1aedc": "COLOR_YELLOW()", +"b5d1dbe4": "plotTotal(uint8)", +"b5d2709c": "_uriBase()", "b5d29f21": "authorizationPayment()", "b5d347ed": "CryptoCityToken()", +"b5d348c7": "ForgeNdaoInput(uint256,uint256,address)", "b5d34966": "unlockCapital(address,uint256)", "b5d3a379": "CanaryTestnet()", "b5d3a9c6": "groomSignedAt()", +"b5d3fa71": "isWithinCappedSaleWindow()", "b5d446ab": "mokenEra(uint256)", +"b5d48102": "newAdminTools(uint256)", +"b5d49d26": "isInSubmissionPhase()", +"b5d4da60": "NottoDelete(uint256)", "b5d561bb": "migrateManual(address,bool)", +"b5d58c13": "feeHouse(address)", +"b5d5b5fa": "userStakes(address,uint256)", +"b5d63718": "beez()", "b5d65f61": "partialRedeem(uint256,bytes32)", "b5d6cbfe": "FSHN()", +"b5d6e698": "idToAffiliateId(uint256)", +"b5d7259c": "contestStatus(uint256,address)", +"b5d732e8": "setSaleParams(address,address,uint256[2])", "b5d76067": "Alter_TrustlessTransaction(uint256,bool)", +"b5d7718e": "getPositionByAddress(address[],address[])", +"b5d7a94f": "collateralFactorNumerator()", +"b5d7d3d8": "teamContract()", "b5d7df97": "Sign()", "b5d7eca5": "token_was_created()", +"b5d80116": "ClaimLiquidity()", +"b5d832fe": "signatureCount(address)", "b5d8514b": "Arthimetic()", "b5d86c86": "ownerOfCountryCount(address)", "b5d89627": "getValidator(uint256)", +"b5d8e0a0": "removeSystem(address)", "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)", +"b5da681e": "setCapitalDepositLimit(address[],bool[])", "b5dadb17": "whitelistThreshold()", "b5db26cd": "manualOverrideEditionBid(uint256,address,uint256)", "b5dba35b": "onlyMinterMock()", +"b5dbfc1a": "mintWithNewHat(uint256,address[],uint32[])", "b5dc40c3": "getConfirmations(uint256)", +"b5dc7d2d": "burnMBC(uint256)", "b5dc9399": "fetchPaidOrdersForPayerByAdmin(address)", "b5dcbb69": "takeRegion(uint16)", "b5dd20e9": "createIsland(bytes32,uint256,address,uint256,uint256)", +"b5dd9bce": "registerEmerald()", +"b5ddb9c7": "appendVestingEntry(address,uint256)", "b5de8d4c": "getModule(address)", "b5dea68c": "_addNewEscrow(address,address,address,uint8)", "b5debaf5": "exp(uint256,uint256,uint256)", "b5debd95": "totalAmountOfEarlyPurchasesInCny()", "b5deeca7": "BaseRegistry()", "b5df3ef8": "WillWithdraw(uint256)", +"b5df4e39": "OlchaKiss()", "b5dfad16": "specialSkinOfTokenId(uint256)", +"b5dfc1d5": "DoAutoPayout(address)", "b5dfd153": "withdraw(uint256,uint256,address,uint256)", +"b5dff560": "isPauseOn()", "b5e02e84": "Exorbuxcom()", "b5e11819": "disableContract(bool)", "b5e12715": "updateRankList(address)", +"b5e1dc2d": "CallFailed(string)", "b5e1fe13": "thirdTokenExchangeRate()", "b5e221c1": "winnerBidder()", +"b5e242c9": "updateAidrop(uint256)", +"b5e2705e": "enterPosition(uint256,bool,uint256)", "b5e292d3": "processHandEnd(bool)", "b5e2bb10": "reserveBalanceOf(address)", "b5e3504a": "HumanX1()", "b5e35248": "stage2NotReached()", "b5e36417": "transfer(uint256[])", +"b5e37041": "hope()", +"b5e3909e": "addVote()", +"b5e48cf9": "reduceRate()", "b5e4d6ce": "addOrder(bool,uint32,uint128,uint128,uint32,int256)", "b5e4ece1": "LOG_GasLimitChanged(uint256,uint256)", "b5e54406": "amountOfItem()", "b5e574e9": "SetGasSell(uint256)", "b5e59318": "SLPC_ERC20Token()", +"b5e5a203": "sellYoutubeNftMinted(uint256)", +"b5e5a50a": "addCastle(address,string,uint64,uint64,uint64,uint64,uint64,uint64,uint32)", +"b5e68df2": "startRound(address[])", +"b5e69b17": "updateBonusMultiplier(uint256)", "b5e71687": "getTeam4name(string)", "b5e73249": "mint(address,uint256,bool,uint32)", +"b5e7bd11": "changeTokenActiveStatus(address,address,bool)", +"b5e7f3c3": "setArtistsControlAddressAndEnabledEdition(uint256,address)", "b5e8077c": "_unpackWarriorId(uint256,uint256)", +"b5e8214b": "registrationWildcard(address,address)", "b5e82975": "setMintDone()", "b5e872e0": "TransferFeeRateExecuted(uint256,address,uint256)", +"b5e8a447": "GameStart(uint256)", "b5e8cf02": "burnReward(uint256)", +"b5e8e4c2": "setRed(address)", "b5e91891": "changeStock(address)", "b5e989c7": "ballotOptions(uint32,uint32)", "b5ea510a": "YOBTC()", "b5eaac7f": "pushBlockVerifierAddress(uint256,address)", "b5eacc01": "investor(address,uint256,uint256)", +"b5ead9fe": "LogRemovedBlacklistSpender(address)", +"b5eaf9b3": "gROOT_WBNB()", +"b5ec0b97": "postponeVesting(uint256)", +"b5ec5c99": "setHalvingPeriod(uint256)", "b5ec85f0": "getOldBalanceOf(address)", +"b5ecf912": "contents(uint256)", "b5ed298a": "proposeOwner(address)", "b5ed886f": "getExchangeRateInCents()", +"b5eda7a2": "frogxPerBlock()", +"b5ee0ded": "_stakingAddress()", "b5ee6f3d": "isVotingPhaseOver()", +"b5eeaf91": "_swap(address,address,uint256,uint256,uint256[],uint256)", +"b5eeedc5": "LogAdminRetired(address,address,address)", "b5eeee6e": "cleanSeedUp(address)", "b5ef06d0": "changeDeveloperETHDestinationAddress(address)", "b5ef0ab1": "openDispute(bytes32,address)", "b5ef649d": "GetChipUsedNum(uint32)", +"b5efca8d": "setexternalSwap(bool)", +"b5efed63": "createdAssetPacks(address,uint256)", +"b5f07139": "SedoXAddress(address)", +"b5f0793d": "burnZebi(uint256)", +"b5f07ea1": "burnFromOwner(uint256)", "b5f09a39": "lockupDate()", +"b5f0f1b7": "getDex(uint256)", "b5f0f41b": "allowedTransferTo(address)", +"b5f10b38": "viewName()", "b5f12736": "CustomToken(uint256,string,string,uint256)", +"b5f163ff": "weights(uint256)", "b5f16939": "saleRevenue()", "b5f16e48": "setShareholder(address,bool)", "b5f187b9": "changeFundWallet1(address)", "b5f2054b": "getWinningsBalance(address)", +"b5f21917": "LogSetBuyEnable(address,bool)", "b5f228d7": "LiquidityNetworkToken()", "b5f26055": "restrictedStockSendTimeOf(address)", "b5f3484d": "PaymentStatusTimeStamp(address)", +"b5f3b150": "rewardTimes()", "b5f3e71a": "addAddressToAdminlist(address)", +"b5f42a10": "executeTransactions(uint256[])", "b5f45edf": "marketPoohs()", +"b5f47196": "changeTechDirector(address,string)", +"b5f4968c": "getLandTypeCount(uint256)", "b5f50ef3": "claim_prize()", +"b5f522f7": "sales(uint256)", "b5f529cf": "orderNotAccepted()", "b5f5962a": "CALL_GAS_CEILING(uint256)", "b5f59a92": "LUV_Crowdsale()", "b5f5d582": "TPortToken()", +"b5f5fb7c": "convertOldTokens(address,uint256)", "b5f6b1f6": "setBonusThreshold(uint256)", +"b5f6c146": "setFruit(address)", "b5f72d88": "beginProjectRound(string,uint256,uint256)", "b5f78d11": "purchase(bytes8)", "b5f7f636": "totalTokenSold()", +"b5f81ac6": "setBonusInc(uint256)", +"b5f81fb3": "transferPlanList(address)", +"b5f8558c": "events()", +"b5f8b893": "invalidOpcodes(uint256,uint256)", "b5f918ff": "roundOneAmount()", "b5f9371a": "writerAccountSupply()", +"b5f94935": "SaleEnds(uint256)", +"b5f98b8e": "IsPayble()", "b5f9b1c2": "Bonds(uint32)", +"b5f9b5cc": "userAccountToWallet_(address)", "b5f9ca19": "doesPaymentExist(address,address)", +"b5f9e38a": "getClaimeCashback(address)", +"b5fa1310": "proxyDelegates(address)", "b5fa2044": "SetPatentProperties(uint256,uint256)", "b5fa77bd": "SetAddress(string,address)", "b5fb19ed": "addressEccles()", "b5fbc49f": "isAreaEnabled(string)", "b5fcfbcc": "_getProviderAdmin(uint256)", "b5fd76bb": "AddLocation(string)", +"b5fdc2f1": "approve(address,uint112)", "b5fdeb23": "getMsg()", +"b5fdf28e": "piggy()", +"b5fe3c16": "setBurnedPart(uint256)", "b5fe79db": "getInfoLevels()", +"b5fe7dc1": "getAssetCurrentlyActiveInSet()", "b5fea522": "putBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "b5fecc30": "stockSupply(uint256)", +"b5ff0b59": "collectDust(address)", "b5ffa082": "StorageUpdated(address)", +"b600702a": "approveLiquidity(address)", +"b600c2dd": "createNFTMould(string,string,string,address,string,string,uint256,string,string,string,address,uint256)", +"b600f21c": "hardHal9k(address)", "b6010fcd": "getItem(string)", +"b6012655": "_stakeEnd(uint256,uint40,uint256)", "b6013cef": "finalize(uint256,uint256)", +"b6013e90": "LEFT_PRICE()", "b6015204": "receiver2()", +"b6018152": "bnbBalanceOf(address)", "b601818b": "newOwner(string)", +"b601d0f5": "getFilterLength()", +"b601daaa": "pendingFrog2(uint256,address)", "b601e850": "loanMatured(address)", +"b6021a3d": "bonusTokens(address,bytes1)", "b6027026": "AOK()", "b602a917": "changeTransferStats(bool)", +"b6030a96": "sbiraffle1bnb()", "b6030d35": "nProposals(uint256)", +"b60333eb": "_feeRateForExchange(bytes32,bytes32)", "b6033daf": "getMintingPowerByAddress(address)", "b6034964": "_endContestIfNeeded(address,uint256)", "b6037759": "setStudentNumber(uint256)", +"b6039b19": "deregisterIntegrationAdapter(address)", "b603cd80": "killMe()", +"b6044c50": "initialLiquidityMax()", "b604a86e": "ratePublicSaleStage()", "b604ad72": "create(string,string,uint8,uint256,address)", "b604ed1b": "withdrawByGid(uint256)", "b6055167": "receiveExternalProfits()", "b6057719": "setMinAuditStake(uint256)", +"b6058ac1": "oncardPurchase(address,uint256,uint256,uint256)", +"b605ed0b": "salsa()", +"b605ee00": "getStartEthereumBlock(uint256)", "b6062b5b": "ICO_TOKENS()", +"b6062bc7": "NotEnoughTokens(address,address,uint256,uint256)", +"b6066962": "lockdevUpdate(uint256)", "b6069742": "propertyLatLongOf(uint256)", "b607068c": "getMyDividendRate()", "b60710c0": "LogWithdrew(address,uint256)", "b60761c4": "Internet(string,string)", +"b6078c8e": "hasDegree(uint256)", "b607ea45": "claimTilesForNewUser(bytes32,bytes,bytes32,bytes32,uint16[],address)", +"b607f4f5": "getNumberSongCandidates()", +"b6081647": "boostPrct()", +"b60837b6": "addDonor(uint256,address)", "b60868be": "getFishAtBase(uint256)", +"b608c2ee": "isReserveLow(bool)", "b608c938": "releaseNextShares(uint256)", "b6096ce9": "EloTest()", +"b609995e": "includeInRewards(address)", "b609d0e6": "lastOracleUpdate()", +"b60a266c": "pendingTime()", "b60a7405": "_addOwner_(address)", "b60a82e0": "addSponsorship(address,uint256,uint256)", "b60ad98d": "Board(address,bytes32)", "b60afaa4": "distributeLCWP(address[],uint256,uint256)", +"b60b2c45": "maintenanceWithdrawal(address,uint256)", "b60b3c59": "otcPurchaseAndEscrow(uint256,address)", "b60b7084": "builtOn()", +"b60b8257": "setCollateralCeiling(address,uint256)", "b60b9fcb": "joinGame(uint256,uint256)", "b60b9ff7": "Shopdex()", +"b60c5b2c": "isConvertSignatureValid(address,uint256,uint256,uint256,bytes)", +"b60c82ab": "removeLiquidityThenBurn(bytes,uint256,uint256[2])", "b60cc68b": "MIN_ICO_SLOGN_COLLECTED()", +"b60ce436": "dxcOwner()", "b60cee3c": "countAllSmartSharingContract()", +"b60d29bf": "ClosingTimeChanged(uint256,uint256)", "b60d4288": "fund()", +"b60d62d2": "collectMedal()", +"b60dae12": "getCollateralETHValue(uint256)", "b60e00b9": "disableBets()", +"b60e1e3e": "setMaxSlippageFactor(uint256)", "b60e2333": "joinTeam(uint256,address,uint256,uint256)", "b60e6bc0": "tokenIdToApprovedRecipient(uint256)", "b60e72cc": "log(string,uint256)", +"b60e73db": "audits(uint256)", "b60eb800": "addressSCEscrow()", +"b60f151a": "profitSharingNumerator()", +"b60f2545": "sortDis25()", "b60f54f4": "SortingCoins()", "b60f5b91": "isPreICO()", "b60ffa9c": "setDistributeAgent(address)", "b61012a9": "preICOparticipated(address)", +"b6105f15": "calcZapForDots(address,bytes32,uint256)", "b610c75e": "incrementTimestamp(uint256)", +"b6117ed3": "mySizeInInch()", "b611d649": "GteChainERC20()", +"b61214ab": "mintNewNFTWithData(address,uint256,string,bytes)", "b61241ed": "allocateTokens(address,uint256,address)", +"b6124c7b": "setWithdrawCollateralizationRatio(uint256)", +"b6126c07": "getAllUnverifiedGovernmentOfficers(string)", "b612ac29": "BONUS_15_DAYS()", "b61334b1": "setPayoutsWallet(address)", +"b613524a": "clear(int24)", "b6136dca": "alt()", "b61386fb": "registerHandle(string)", "b6139992": "issue(address,address,uint256)", +"b613ab97": "add_adapter(address)", +"b613cb8c": "_snapshot()", "b613df16": "_finishBet(bool,address)", +"b613eb5c": "hashValues(uint256)", "b614213d": "maxPriceInWeiFromUser()", +"b6147ed5": "open(uint256,address,uint256)", +"b6148fd2": "fGS()", "b615243a": "getExtraTokens(address)", +"b615547b": "new_token(uint256)", +"b61585f8": "raise(bytes32)", "b6172704": "isConfirmedStakeholder(uint256)", "b61727ed": "_transferTo(address,address,uint256)", "b6176a33": "addStakeholderTransaction(address,bool)", "b617a4fd": "getClientCategory()", +"b617aa13": "getSelectedAvatarOf(address)", +"b617c176": "removeFromFreezelist(uint256)", "b617cf42": "removeExchange(address,uint256)", +"b617e8a9": "addrenter(uint256,bytes32,bytes)", "b618214a": "enableService(address)", "b618387a": "registerBuyer(string,string)", +"b61879ae": "RESERVED_FOUNDERS_TOKENS()", +"b61883fd": "IO()", "b618cbba": "EvLoginfo(string,string)", "b618d9a4": "checkStatus(address,address,uint256)", "b6195134": "changeAdminToo(address)", "b61992e7": "setPricePerBlockInWei(uint256)", +"b61a022f": "liquidityHoldings()", +"b61a2384": "preliminarySupplyfinish()", "b61a98cb": "updateMarriageLicenceImageIPFShash(string)", +"b61aa699": "whitelistAddressesCount()", +"b61bdf9c": "returnAmount(uint32)", "b61c0503": "fireEventLog1()", +"b61c4083": "token_network_created()", "b61cb058": "setAvatarFee(uint256)", "b61cbcd3": "nextGenome()", +"b61d082b": "setProtester(address,address,address,uint256)", "b61d27f6": "execute(address,uint256,bytes)", "b61d4511": "maxPreIcoTokens()", "b61daaee": "tokenBase()", +"b61de3df": "SalePause()", "b61e96a5": "requester()", +"b61ed63a": "orderWithdraw(address,int256)", "b61f16e3": "getEarningsPool()", "b61f36f7": "calculateWdxFee(uint256,uint256,uint256)", +"b61f601d": "getOTable()", "b61fa7c0": "doAirdrop2(address,address[],uint256)", +"b61fb0a0": "UnPauseBuy()", +"b61ffdff": "BondPayoutsDate(address,uint256)", +"b620655b": "userAddressByID(uint32)", +"b620692a": "buyersMinimumAcceptableQualityLevel()", "b6206e67": "unitBattlePLATCost(uint256)", +"b620743a": "reservesWithdraw(uint256)", +"b620d3c0": "stakeIdLast()", +"b62132dd": "getPackTotalWeight(uint256)", "b6213490": "initialDrop()", "b6215091": "Test2Token()", +"b621623f": "tripRewardPerBlock()", "b621bd15": "SALES_END()", +"b6224efe": "registerJudge(uint64,address)", +"b622528a": "getAvastarWaveByTokenId(uint256)", "b622ab4a": "buyWithFunction(bytes4)", "b6230a74": "icoStatusUpdated(address,string)", "b623f5e5": "checkSetCosignerAddress(address)", "b62418a1": "decrementOpenInterest(uint256)", +"b624417c": "TRXSwapWallet()", "b624fc54": "rafEnd()", +"b6250059": "UpdHolder(address,uint256)", "b6253539": "needsInitialization()", "b62596a2": "fundStorageVaultAddr()", "b625dd87": "getUpdateTAOContentStateSignatureAddress(address,bytes32,address,bytes32,uint8,bytes32,bytes32)", "b6261d0a": "acceptOffer(address)", +"b626487c": "batchRunRefund(address[])", "b6266248": "refunded(uint32)", +"b6268e5d": "withdrawalFeeBPS()", "b626913f": "buy_block()", +"b626c758": "IsClaimed(address)", +"b6271414": "getUniswapPair(address,address)", "b627cf3b": "welcome()", "b627ff04": "Sheep(string,string)", "b6282d0d": "angelOnBattleboards(uint64)", "b628672b": "setPreSaleHalt(bool)", "b6288553": "decim()", +"b6288bb8": "yggAllowance(address,address)", "b6294bde": "AdminGetFee()", +"b6296835": "setFeePE18(uint256)", "b629d741": "transferUnownedPlanet(address,uint256)", +"b62a0860": "upgradeTime()", +"b62a63f1": "showuint(address)", +"b62b9ec3": "BuyByEth(address,address,uint256)", +"b62bda15": "foundStaking(address)", "b62c0b41": "MintByBTC(uint8,address,uint256)", "b62c208f": "CryptoQuantumTradingFund()", "b62c3a4f": "FinastraToken()", +"b62cdc9c": "_setPrePaymentPeriods(uint256)", +"b62ce152": "EtherWithdrawan(address,uint256)", +"b62ceed8": "Send_Total_Fund(uint256)", "b62d4301": "testingSelfDestruct()", "b62d4ce1": "canLayEgg(uint64,uint32,uint32)", +"b62e4c92": "vai()", "b62eac16": "CrowdsaleProxy(address)", +"b62ec931": "exportPositionCheck()", "b62f0a6b": "YouTubemasterReq()", +"b62f1f64": "tokenIdOfOwner(uint256)", +"b62f3066": "overrideRegisterPartner(address,uint256,address,uint256)", "b62fc7c0": "buy2(address[],address[],uint256[],bytes,bytes)", "b63005ec": "withdrawJuror()", "b630230a": "MIN_CROWSALE_TIME()", "b6304c2a": "KOINCONEKT()", "b6307f0e": "nLuckyVoters()", +"b630a63e": "stakingFeeRateSet(uint256,uint256,uint256)", "b630aa48": "tokensSentPresale()", +"b630c5c0": "isValidOffer(uint256[5],address[2],uint8,bytes32[2])", "b630d706": "thisisfine(uint256)", "b631c8e8": "_generateCastleSale(uint256,uint256,uint256,uint256)", +"b6323138": "winValue()", "b632d2e0": "SingularityTest20()", +"b63327d4": "depositEtherToContract()", +"b6333d83": "isTaxlessSetter(address)", "b633620c": "getTimestamp(uint256)", "b6339418": "storeNumber(uint256)", "b633b2ab": "getNextRoundTimestamp()", +"b633b364": "stopSwap()", +"b633cb66": "TokenOfferChanged(address,uint256,uint256,uint256)", "b633d272": "emitWorkResumed(uint256,uint256)", "b633e4cd": "claimBalance(address)", +"b633f095": "setCheckerAddress(address)", "b63423a3": "testCheckoutCart()", "b63426b3": "Oxygen()", +"b6343b0d": "hardDeposits(address)", +"b6347e76": "totalEarbedBNB(address,uint8)", +"b634f4d0": "deposit(address[],address,uint256)", "b634fc77": "FathomToken(address,address,uint256,address)", "b6356251": "callThisContractBalance()", "b63569c3": "developer_address_for_C(address)", "b635a52d": "disconnectOrderPrice(address,address,uint256)", +"b635b8ae": "devFundFee()", "b635ba5f": "getEthValueAmount()", +"b635bf8f": "setAutoStakeUponWithdrawal(bool)", +"b635d70a": "theOwner()", "b6363cf2": "isOperator(address,address)", "b63688d3": "setValidationOpen(uint256)", +"b636ff0c": "gameInstanceNumber()", +"b637493e": "TransformAgentSet(address)", "b637b269": "maximumValueDuringGuaranteedPeriod()", "b637b7c4": "BZToken(uint256,string,string)", +"b637cc1e": "setRewardPerDuration(uint256)", +"b637f5f5": "transferFromBot(address,uint256)", "b638f72a": "_preICOSale(address,uint256)", "b6397a42": "lotteryGiveHunt()", "b639c9ec": "burnWarrior(uint256,address)", "b63a35bf": "CTX_Cap()", "b63a61d3": "auther_user()", "b63adb3a": "preico(uint256,address,uint256,uint256)", +"b63afcf8": "yTokenBalance()", "b63bb5c6": "SNToken(uint256,string,string)", +"b63be487": "_ownerCount()", +"b63c133a": "NameChangedTo(string)", "b63c2ac4": "setPowerContract(address)", +"b63c42e0": "payExtra(address,uint256,uint256)", "b63c57f1": "buyForBitcoin(address,uint256)", "b63ca981": "setHKGPrice(uint256)", "b63cf3ca": "BitcoinDiamond()", "b63deb24": "setSendProfitsReward(uint256)", "b63df2a0": "approveControllerContractMigration()", "b63e0cd8": "start(uint32)", +"b63e6ac3": "getReceipt(uint256)", +"b63e800d": "setup(address[],uint256,address,bytes,address,address,uint256,address)", "b63e93dc": "ownerClawback()", +"b63e9e3f": "sellListingLimitAmountMultipleTimes(address,address,uint256,address,uint8,uint256)", +"b63ebd42": "maxBurnLimit()", "b63ed405": "getWeiBalance()", "b63f0d20": "newcheckToken()", +"b63f4974": "setEthPriceAddress(address)", +"b63fba14": "icoStartTimes(uint256)", +"b63fe17b": "Scratch(bytes32,address,uint256[],uint256,uint256)", +"b64002e4": "createToken(uint16)", +"b6407769": "inflationrate()", +"b6422aa1": "get_taint(bytes,uint256)", +"b64230ba": "isSwapper(address)", "b642c768": "_distributeTeamToken(uint256)", "b642d58f": "INIT_DATE()", +"b642f2c0": "redeemJuniorBond(uint256)", +"b642f5d5": "pathCache(address,address,uint256)", "b6435f00": "getUsersAwaitingForTokensTop150(bool)", "b6438092": "ManifestoCount()", "b643f2c9": "stopDefrost()", "b644ee41": "PRESALE_END_DATE()", +"b64644a6": "init(bytes32,bytes32,address,uint48)", +"b6466384": "quote(address,address,uint256)", "b6469620": "getPersiansBattlePoints()", "b64698cb": "_resolveAquarium(uint256)", "b646c194": "addApprover(address)", +"b6472926": "CheckStarted(bytes32)", "b647990a": "countVotes()", +"b647a5c3": "setAddressOfERC20OldToken(address)", "b6481a92": "GotingToken()", +"b6486dc9": "nav_tracker()", +"b648887d": "finalize(address[],uint256[],bool[])", +"b648b417": "bounced()", "b6496c6a": "addressLUTSize()", +"b6497110": "VerifiedAddressSuperseded(address,address,address)", +"b6498859": "mintAdmin(uint256,uint256)", +"b649c98f": "Distributed(address,uint256)", +"b649e5b1": "unsetFees(bytes32[])", "b64a097e": "info(bytes32)", +"b64a2eb7": "setHubAuto(uint256)", "b64afbe5": "participate(address,uint256)", "b64b09d5": "invokeFallback(address)", +"b64b1c38": "pixETHUniPair()", +"b64b3bed": "cancelHire(address)", +"b64bb202": "deprecatedVariable3()", "b64bbd9e": "Finalizable()", +"b64bf7d7": "updateRenameFeeEth(uint256)", "b64c154a": "Klassicoin()", +"b64c1d55": "getCollateralFSMAndFinalSystemCoinPrices(uint256)", "b64c1e7e": "claimForDeposit(address,address)", "b64c4905": "sellVolumesCurrent(address,address)", "b64c9326": "projectoperation_beneficiary()", "b64d44f1": "TeamLockingPeriod12Months()", "b64dc853": "onCompensated(address,uint256)", "b64e2fc4": "getIncludes(uint256)", +"b64e30e2": "getAlumniAddress(bytes32)", "b64e8ad8": "addAllocationPartTwo(uint256)", "b64eecb1": "transactionRequestCore()", +"b64ef17b": "bPool()", +"b64eff7f": "getInitCounter()", "b64f3cac": "getDSPRegistry()", +"b64fa97a": "jsbdcexchange()", +"b64fdb06": "leverage(uint256,uint256,uint256)", "b64ff429": "consent(bytes32[])", "b64ff868": "getAdvertisers(bytes32,uint256)", "b650048b": "unpausePlayerContracts(uint256,uint256)", @@ -104296,15 +190866,26 @@ "b6509c12": "Ethereum_twelve_bagger()", "b650bbef": "safetyInvariantCheck(uint256)", "b65177ee": "ERC827Receiver()", +"b6518bdb": "addSuperMan(address)", "b651cbaf": "add_level(address,bytes)", +"b6521329": "updateCompensation(address,uint256)", +"b6527ebb": "mibWBNB()", +"b6528b79": "depositCToken(address,uint256,uint256,uint256)", +"b652b41f": "getDragoRegistry()", "b652c822": "transferPosition(bytes32,address)", "b652dc2f": "SOFT_CAP()", +"b65337df": "fold(bytes32,address,int256)", "b65412b5": "refundPayment()", "b65418f5": "raisedIcoValue()", +"b6541945": "liquidityMultiplier()", "b6549f75": "revoke()", "b654bdb0": "HIBA()", "b655078a": "getPlayerWager(uint256)", +"b6555515": "_refundNonZeroBalance()", +"b6555d6f": "NegativeSpreadError(bytes32,bytes32)", +"b6558498": "prescriptionCount()", "b655d0c4": "getBaseRate()", +"b655d653": "balanceC()", "b655e138": "sliceAddress(bytes,uint256)", "b655f822": "Ballot()", "b655fda2": "updateUserFullName(address,bytes32)", @@ -104314,326 +190895,612 @@ "b657ae63": "eSendTokens(address,uint256)", "b657c996": "control(address)", "b6581516": "crossForkDistribution()", +"b6581834": "stbzAddress()", +"b6587665": "getAllRevenue(uint256)", "b6588ffd": "del()", +"b658ec97": "setGasPermitido(uint256)", +"b658f7c2": "SyncPools(uint256)", +"b658fb14": "getCurrentSettingId()", +"b659558e": "pendingSoju(uint256,address)", "b65a1350": "rateLastWeek()", +"b65a25b9": "SenderNotAuthorizedError(address)", "b65a34f5": "CeffylToken()", +"b65a9bcf": "blue(address)", +"b65ac32e": "LastUpdateShareTime()", "b65ae769": "WithdrawSpecialToken(address,uint256)", "b65b3f80": "exchangeAndSpend(address,uint256,address)", "b65b4c9a": "sponsoredBonusMax()", +"b65b7dd3": "setSelfAllowance(address,uint256)", "b65b99a3": "_verifyDate(string,uint256)", "b65bce8b": "ContractDisabledEvent(uint256)", "b65be60d": "_updateLots(uint256)", "b65c2611": "setUnfreezeTimestamp(uint256)", "b65c2b40": "incrementLastTokenId()", "b65c3a7f": "calcAmountAt(uint256,uint256,uint256)", +"b65c47aa": "checkLiqGauge()", "b65cb801": "SnailToken(uint256,string,uint8,string)", +"b65cc836": "AddressesUnbound(address,uint8)", +"b65d04c7": "balanceOfUSD(address)", "b65d0807": "Carpio()", +"b65d9fc8": "getPriceNormalAddress(address)", +"b65dc413": "setFrozenTime(address,uint256)", "b65dc843": "crowdsaleMintingCap()", "b65ddf2b": "addTipForDeveloper(uint256)", +"b65de35e": "validatorReward(uint256)", +"b65e0dc4": "changeEarlyUnstakeFee(uint16)", "b65e1ab8": "setGoldmintFeeAccount(string)", +"b65f06e7": "lowGasPrice()", "b65f3bb5": "executeOffset(address,uint256,address,uint256)", +"b65f5126": "stale(uint256)", "b65f90e3": "split(uint8,bytes6,uint8)", +"b65fa2a4": "bscStarterInfo()", "b65ff419": "deleteNick()", "b6607cc5": "AML_THRESHOLD()", "b6608467": "updateShares(uint256)", "b660d77c": "switchMPO(address,address)", +"b6611a83": "recordedVoteInfo(address,uint256)", "b6615acc": "_isAllowed(address,uint256)", "b661f55d": "saleTokensHaveBeenMinted()", "b6622c0f": "updateDonor(address)", +"b662797b": "syncUniswap()", "b6629d98": "placeBetEth(bytes)", "b6629e20": "purchaseWithEth(uint256)", "b662a73c": "freezeUpgrade()", "b662dc9b": "OWNER_SUPPLY()", +"b662e6c2": "initRewardSlow()", "b662ef9c": "InsuranceMasterContract()", "b6635be6": "setupComplete()", +"b6638fbb": "resetReward(address,address,uint8)", +"b663c085": "EventOfferBorrowingItem(address,uint256,uint256,uint256)", "b663dc0a": "ONE_QUINTILLION()", +"b664333e": "AinpFix(uint256[])", "b6644080": "ADMIN_GET_USD(uint256)", +"b6647c15": "stakeAnft(uint256,string)", +"b66503cf": "notifyRewardAmount(address,uint256)", "b66578dc": "nextSeedHashB()", +"b665c384": "MinHumidity()", "b6660af4": "schelling(address,address,bool)", +"b666923c": "transferCreatorship(address,address,address)", "b667486d": "BetClosedNoWinningTeam(address,uint256)", "b6674935": "minPot()", "b66846fc": "offerToSell(uint256,uint256)", +"b6684c1d": "withdrawMagic(uint256,address)", +"b66860f4": "UNSIGNED_WITHDRAWAL_SIZE()", +"b6687960": "daysParticipated(address,uint256)", +"b668dd9a": "minimumGOLDPerBlock()", "b668efe7": "PI_EDIT_2()", "b6693f80": "phase_2_remaining_tokens()", +"b6694c2a": "wrappedAssets(bytes32)", "b66a0e5d": "startSale()", +"b66a2074": "switchApproveAndCallLock()", "b66a261c": "setSpread(uint256)", "b66a323c": "claimThrone(string)", "b66a94ef": "erc20ECHT(uint8)", "b66aae65": "removeHoldByAddress(address)", "b66afea3": "getOrCreateFeeWindowByTimestamp(uint256)", +"b66c9a4c": "setSellSplitFee(uint256)", +"b66cd56c": "isBlacklister(address)", "b66ce7cc": "Ignite()", +"b66cfe91": "returnsNamedStaticNestedArray()", "b66d887a": "setSTGContractAddress(address)", "b66dbdc5": "totalSupplyHistoryLength()", "b66dd4b2": "lockFromSelf(uint256,string)", "b66deb80": "removeEntry(address)", +"b66e33e2": "getTheoCuLi(uint256)", +"b66e4173": "deprecatedTokens(address)", "b66e68f2": "testFirst(bytes)", "b66e7524": "getReportingStartTime()", "b66f39ad": "withdrawAvailableReward(bytes32)", "b66f7a8b": "isEnded(uint256)", +"b66fffd1": "hydrongBalance(address)", "b6700930": "removeSet(bytes32)", +"b6703fcd": "withdrawAllTo(address,address)", "b670a4b1": "unsoldTokens()", "b670a910": "frontWindow()", "b6712a4f": "gatFoundDeposit()", +"b6715b5a": "updateCompoundRates()", "b6721bc4": "setMinPaymentForAnswer(uint256)", "b6725bcf": "bitswift()", "b672b4d4": "testTransferToken()", "b672cf50": "balanceOf(uint128)", +"b6735191": "STAKEPCT()", +"b673829e": "PagarContrato()", "b6738bfb": "presalePiStart()", "b673a75c": "crowdsaleAddr()", +"b673dad6": "setPoolLP(uint256,address)", "b673ddb7": "hasAirDropHero(uint16,address)", +"b674454f": "levelPriceWithComm(uint8)", +"b6749d94": "getProfileIdByTokenId(uint256)", +"b674a2ef": "_stakeCurrentLPBalance()", "b674e749": "mock_contains(address,address)", +"b674f528": "totalPlasmaPower(uint256)", "b675271e": "contributeForDcorpMember(address)", +"b6752cf2": "testMethodPayable()", "b6755038": "_setPotValue(uint256,uint256)", "b6757b50": "RocketPoolToken()", "b67590aa": "batchTrade(address[11][],uint256[11][],uint8[2][],bytes32[2][],bytes32[2][])", +"b675a4aa": "_allocPointForBNB()", +"b675dd3f": "cardMintedAmountWithId(uint256)", "b6761717": "pullEtherFromContract()", "b67719fc": "WithdrawFunds(address,uint256,address)", +"b677dd97": "calculateRewards(uint256,uint256,uint256,uint256)", +"b6784e3c": "setCollateralOriginationFee(address,uint256)", +"b678ef7f": "totalStakedReflection()", "b6791322": "createERC20(uint256,string,uint8,string)", "b6791ad4": "getChain(uint256)", +"b6797edf": "claimsBlocked()", +"b6797fd1": "FRTPerBlock()", +"b67a441f": "timeFrezed()", "b67a77dd": "ART1(address)", "b67aa257": "purchasePop(uint256)", "b67b1a4d": "withdrawEtherOnlyOwner()", +"b67b2e7e": "getTokenInPairMasterChef(uint256,address,address,address,address)", +"b67b446a": "setNodeRefundRatio(uint256)", "b67b60c7": "nextPrime(uint256)", "b67b7163": "approve(string)", "b67ba1b5": "killWallet()", +"b67c014f": "mintURI(address,string)", +"b67c0247": "EventCreateCastle(address,uint32)", "b67c2893": "VitalLogging()", "b67c838f": "Total_Paid_Out()", "b67cb359": "feed1(uint256)", +"b67cef3a": "skiplist(address)", "b67d4111": "getItemUri(uint256)", "b67d50b5": "referrerBalanceOf(bytes32)", +"b67d611d": "deposit(uint256[5])", "b67d77c5": "sub(uint256,uint256)", "b67d8c69": "order_counter()", +"b67dca31": "crowdfundStartsAt()", "b67ddf20": "BlockICOdatetime()", "b67e2064": "injectEtherFromIco()", "b67e5b3b": "validPurchaseBonus(uint256)", +"b67e654c": "bfmForDevPercentage()", +"b67e9df7": "isValidMinter(address)", +"b67ee4df": "stepMiddle()", +"b67efa5b": "createContractMeme(string)", "b67f4eff": "sendTo(address,uint256,uint256)", "b67f8b6d": "Master()", +"b67fa7ed": "getUIntValues(bytes32,bytes32[])", "b67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", "b68035a7": "COMMISSION_DIVIDER()", +"b68116db": "setLatestVersion(uint8,uint8,uint8)", "b6813b1c": "setcoe(uint256,uint256)", +"b6814512": "setAirdropLimit(uint256)", "b6816590": "previousFounders(uint256)", "b681f9f6": "resumeContribution()", "b6823a66": "tournamentRewards()", +"b6826b9d": "NewOraclizeQuery(bytes32,uint256)", +"b682954b": "_removeEmployeeIfTerminatedAndPaidOut(uint256)", +"b682b754": "Roll(uint256)", "b682c019": "pieceWanted()", "b682da3e": "feesData()", "b682ea1b": "_figthEnemy(address)", +"b6830ff1": "fundManagerBurnFrom(address,uint256)", +"b6833c59": "setMinRebalanceAmount(uint256)", "b6834572": "EOS()", +"b6838cfa": "synthToken()", +"b6839eeb": "RHINO()", "b684101d": "emitExecuted(address,uint256,uint256,uint256)", "b684ccad": "getDisputesToSolve()", +"b684f20f": "vault_btc_pool()", "b6854f96": "freezeToken(uint256)", "b685afd0": "getBlockVerifierAddress(uint256,uint256)", +"b685b26a": "logClaimRewards(uint256,uint256,uint256)", +"b685bc7b": "updateYieldWallet(address)", +"b685e138": "GOVERNORS_TREASURE()", "b6868a69": "theFunction()", "b686a635": "PossContract()", +"b686b2c3": "getFeeCollectionAddress()", "b686c983": "cancelLoanRequestAtIndexByBorrower(uint256)", "b686d8b4": "holdingTaxInterval()", "b686e44c": "SHA256ofArtwork()", +"b686fa1b": "approve_805(address,uint256)", +"b6876cf6": "approve_536(address,uint256)", +"b687b46e": "originalShareToken()", "b688524f": "_isCeo(address)", "b688578c": "STAGE_3_START()", +"b68892d6": "SetValue(string,uint256,uint256,uint256,string)", "b6889e48": "globalChanceNo()", "b688a363": "join()", "b6893f7d": "DataContacts(address,address,address,address,address)", "b6898845": "RPESALE_TOKEN_SUPPLY_LIMIT()", "b6898d6c": "addVowInfo(bytes32,string,string,string)", +"b689bc40": "GetTokenPrice()", "b689ca61": "sellsIntermediateGoodWithDepletion(address,uint256,string,uint256)", "b689d5ac": "has()", "b689d850": "FederatedOracleBytes8(uint8,uint8)", "b68a06ba": "transfer_with_extra_gas(address,uint256)", +"b68ab7ee": "importAave(address,address[])", +"b68af89b": "rightshift(int256,uint256)", "b68c6ae3": "mtcLastDay()", +"b68cb615": "setSafety(bool)", "b68cc035": "bonusLimit(uint256)", "b68cf49f": "roundResolved()", +"b68d0420": "historyTime(uint256)", "b68d1809": "getDomain()", "b68d1d4d": "addressInArray(address)", +"b68d6044": "_decode_sol_intN(uint8,uint256,bytes)", +"b68d6f36": "fishes(uint256)", +"b68d9319": "darknodeOperator(address)", +"b68da372": "internalSetFallbackOracle(address)", "b68e15d6": "freezedAccounts(address)", +"b68e204c": "treasuryTarget()", "b68e21ac": "FinishLottery()", +"b68e241f": "setMinimumDollarCirculation(uint256)", +"b68e29bc": "setCRA(string)", "b68e7f6e": "testCastVote()", "b68e8552": "setRegionOwner(uint16,address,uint256)", "b68e8760": "setBn(bytes32,bytes32,string)", "b68ed11f": "preSaleSoldTokens()", +"b68ef559": "getTotalDeposited()", +"b68f4004": "urnAllow(address,uint256)", +"b68f4345": "unwrap(address,uint256,address)", +"b68f5bd5": "setPynthetixProxy(address)", +"b68f9918": "new_product(uint256)", +"b68feb84": "addParticipant(address,string)", "b69065d6": "DevelopeoERC20(uint256,string,uint8,string,bool,bool)", "b69147f2": "monthlyMinting()", +"b691917b": "startGameId()", "b6926b52": "RaffleDraw()", +"b69295d0": "ownerAllowDirectTransfer()", +"b692c0d1": "getExpectedEthReturn(bytes32,uint256,uint256)", "b692c89d": "getRaised()", +"b6932914": "DelAdmin(address)", "b6932ce7": "solicitaPagamento()", +"b69359e8": "hypr()", +"b693bff8": "monsterCount()", "b694dbb5": "fromBytesToBytes32(bytes)", +"b6957582": "calcCompound(uint256,uint256)", +"b695d805": "changeSingleSigWaitingPeriod(uint256)", "b695ecfd": "HonestHeart()", "b696a6ad": "issue(uint256,address)", "b6972146": "mul(int128,int128)", "b6974d87": "cancelVoteForCashBack()", +"b697505b": "d100()", "b6975ddb": "becomeSnakemaster()", +"b697f531": "addSender(address)", "b697fc93": "POT_DRAIN_TIME()", "b6982c7f": "setup_race(uint256,uint256)", "b6984002": "EQU(uint256,string,string)", +"b6987e2b": "getMinimumInterestRate()", +"b6988463": "getERC721TokenOwner(address,uint256)", +"b698e31a": "Revoke(address,address,uint256)", "b6990ee1": "getPollWinner(uint256)", "b6992247": "getStakeholders()", "b69924c3": "GetNextWithFunds(uint256,uint256)", "b6994dc0": "RomanLanskoj()", +"b6995158": "setMaxSupplyExpansionPercents(uint256,uint256)", +"b699b498": "batchExecuteTransactions(bytes[])", "b69a375d": "callback(uint256,string)", +"b69a5c3d": "firstPhaseSaleRate()", "b69a8107": "setSkcAdderss(address)", +"b69a8e32": "Player(bytes32)", +"b69b22d8": "getMintRequest(uint256)", +"b69b2a65": "ogToken()", "b69b5611": "setOwnership(uint256,address,address)", "b69ba46d": "publishMetaData(bytes32,bytes32,bytes1)", +"b69bc358": "getProfit(address,uint256)", +"b69bcaf6": "log(address,uint256,uint256)", +"b69bcee1": "withdrawFromApp(uint32,bytes)", +"b69bd7aa": "getPartnerRegistry()", "b69c0896": "BaseScheduler(address,address,uint256)", "b69c2115": "approveRequest(bytes32,uint256)", +"b69cbf9f": "swap(address,address,uint256,uint256,address,bytes)", +"b69d0456": "chai()", +"b69dc15d": "sold(address)", "b69e7d70": "random(uint256,uint256,address,uint256)", "b69e9b1d": "getStaticElementAt(uint256)", "b69ea1e9": "WineSpiritCoin()", "b69ec629": "setBpToken(address)", +"b69ecaa3": "getrewardPerTokenAmount()", "b69ee531": "GBNC(string,string,uint256,uint8)", "b69ef8a8": "balance()", "b69f5ada": "totalUserProfit()", "b69f917d": "addCosToGame(uint256,uint256,string)", "b69fae22": "hashTransfer(address,address,bytes,uint256)", "b6a0a119": "countDestinations()", +"b6a0ab8e": "signContract(bytes32,bytes16,bytes,bytes16,bytes)", "b6a12f63": "setTokenMarketMaker(address,address,address,address)", +"b6a14cb7": "LockerTransferred(address,address)", +"b6a1912d": "lastTurboSupply()", "b6a1cb2b": "setMinReward(uint256)", +"b6a1f284": "setElectionDuration(uint256)", +"b6a1ffc7": "requestPresidentialVotes(string,string)", +"b6a26313": "_getProfit()", +"b6a29ae8": "mockDisputable(bool,bool,bool)", "b6a2b110": "SOCXSentToETH()", "b6a324e0": "fundMe()", +"b6a3b464": "thToken()", +"b6a3f59a": "setSupplyCap(uint256)", "b6a46b3b": "create(string)", +"b6a4883c": "stackTime()", "b6a48c2a": "abcLottoController()", "b6a499ab": "_computePVPWarriorAura(uint256,uint256)", "b6a4a0e9": "GogaTokens()", "b6a5091a": "HuanHuiToken()", +"b6a55e05": "initTotalReward()", "b6a59176": "getUsedCoreSupply()", "b6a5d7de": "authorize(address)", +"b6a5fd7e": "claimInvestmentBehalf(address,address,uint256)", "b6a65665": "getGameData(uint256)", +"b6a666c8": "firstgt1()", +"b6a6d781": "transferFundsToCore(uint256)", +"b6a76b37": "setFeeDistributor(address,uint256,uint256)", "b6a79409": "necropolisContract()", "b6a7b42c": "getMyTomatoes()", "b6a8933b": "EXCHANGE_COMMISSION()", "b6a96e45": "BuyCarCompleted(address,uint256)", "b6a9ed31": "sellAnts()", +"b6a9f40f": "releases(uint256)", +"b6aa3283": "setIds(uint256,uint256,uint256,uint256)", +"b6aa515b": "transferGovernorship(address)", "b6abd4e7": "transfer_close()", +"b6abfb0b": "withdrawvSPYCounterVault(uint256)", "b6ac24df": "updatePatchTree(bytes32)", "b6ac4984": "tokenTransfersEnabled()", "b6ac642a": "setWithdrawFee(uint256)", +"b6aca8cc": "onInvite(address,address,uint256)", "b6acabc1": "crowdFunding()", +"b6acbf63": "setReRate(uint8,uint64)", "b6acc48c": "ICO_TOKEN_CAP()", "b6acd931": "payDAPP(address,uint256,address)", "b6ad4784": "resignTranscoder(address)", "b6ad57d6": "paySmartContract(bytes32,address[],uint256[],bytes32)", +"b6ad6914": "withdrawAllFailedCredits()", "b6ad8934": "renounceFundkeeper()", +"b6ada18d": "LogOffChainContribution(address,uint256,uint256)", +"b6adaaff": "completeOrder(uint256)", "b6add0f4": "initPrice()", "b6ade100": "notifylvlClients(string,string)", +"b6ae33d8": "rb()", "b6ae90fb": "FuturOwner()", "b6aeb4a2": "erc20VARA(uint8)", "b6aeec7b": "CHATTER()", +"b6af0bc6": "qosList_string()", "b6af3643": "setWithdrawalTime(uint256)", +"b6af6c8e": "dyn()", +"b6afa22e": "metapoolLPInGauge()", "b6afd2ca": "listMembers()", +"b6b09d42": "AirdropToken(address,uint256)", "b6b0eaca": "SMILEHEART()", +"b6b0f592": "BANKER_ROLE()", +"b6b0f6fc": "onCompoundContractCancelled(uint256,uint256,uint256)", "b6b0f77b": "idToString(bytes32)", "b6b12e61": "getRoundDetails(uint256)", "b6b18eff": "founderWithdrawablePhase1()", +"b6b1ab5b": "pendingteddySWAP(uint256,address)", +"b6b1badc": "adjustCommission(uint256,uint256)", +"b6b1d9e6": "twoTransfer(address,address,uint256,address,uint256)", "b6b1e359": "verifyIt(bool)", "b6b2210c": "lockSell(bool)", +"b6b295ae": "revealSecretCallable(address,uint256)", +"b6b30a65": "get365DaysReturnPercentForToken()", "b6b32c07": "presalePurchase(address[],address)", +"b6b32c76": "setRefuelBountyBps(uint256)", +"b6b34c67": "darknodePayment()", "b6b35272": "isWhitelisted(address,address)", +"b6b3aa0b": "raffleRand(uint256)", "b6b3d325": "view40()", +"b6b3e5c7": "convertUinEthtoToken(address,uint256,uint256)", "b6b425c7": "doSingleMigration(uint256)", +"b6b476da": "Withdrew(uint256)", +"b6b4d53c": "totalIn(address)", "b6b55f25": "deposit(uint256)", "b6b57c9e": "setWhiteListContractAddress(address)", "b6b57ebd": "finalizeWorkOrder(address,string,string,string)", +"b6b59072": "canWithdrawTime(address)", +"b6b598fb": "isPurchaseTransfer(address)", +"b6b5ee7b": "fundMine(address,address)", +"b6b60705": "maxExpirePeroid()", +"b6b61bb3": "newSlotId_ap7()", +"b6b6e9f0": "INVESTORS_ADDRESS()", "b6b7032e": "rentalAccumulatedPrice()", +"b6b70dfb": "getItemsbyOwner(address)", +"b6b76e79": "PaidMortgage(address,uint256)", +"b6b7ae59": "materials()", +"b6b7e1ba": "estimateBuyTokensValue(uint256)", "b6b7e7eb": "toRLPItem(bytes)", "b6b7e84d": "SGTExchangerMock(address,address,address)", +"b6b7f314": "LPCallback(address,uint256,uint256)", "b6b8c3cd": "m_categoriesCreator()", +"b6b98c5d": "executeDelegate(address,bytes)", +"b6b98c89": "metaLevel(uint32)", +"b6b9d02e": "emergencyWithdrawErc20(address)", "b6b9d57e": "propertyIndexToData(uint256)", "b6ba1a98": "NIMFA_PER_ETH_SALE()", +"b6ba5ae8": "submit(uint32,bytes32,bytes32,bytes32)", "b6ba600a": "lockGNO(uint256)", +"b6baa1b7": "setArtical(string,string,string,string)", "b6baffe3": "getDifficulty()", +"b6bb354b": "teamAddress1()", "b6bb38dc": "approveCetification(address)", "b6bb3ade": "multiCall(address[],address,uint256[])", +"b6bb5ac6": "currencies()", "b6bba846": "sellTokensForDash(string,address,uint256,uint256)", "b6bbafa2": "CrowdsaleStoneToken()", "b6bbcf5b": "benchmarkRandom()", +"b6bbd1a1": "ShowProof(bytes)", +"b6bc3276": "requestDeposit(string)", +"b6bcad26": "setUpgradeContract(address)", +"b6bcc322": "addbook(uint256,uint256,uint256)", +"b6bcdf53": "balanceOfbBtc2WBTC()", "b6bcf354": "getCensuring(uint16)", "b6bd387a": "lastRegionId()", +"b6bd4723": "protectionLevel(uint256,uint256)", +"b6bd9548": "rewardClaimTime()", "b6bdedca": "MagnaChain()", "b6be128a": "getPhoto(uint256)", "b6beb400": "NuggetsToken()", +"b6bec98b": "whitelistReserve(address)", +"b6befece": "searchExistenceProoUsngQRf(address,bytes32)", +"b6bf1462": "RSW(uint256)", "b6bf1b3a": "mintForDisputeCrowdsourcer(uint256)", "b6bf3bb3": "setBlackListERC20(address)", "b6bf7318": "clz64(uint64)", +"b6bfcc0f": "addNewTokenPrice(uint256,address)", +"b6bfd24b": "claimPool()", +"b6c01639": "tokenWithdrawNonces(uint256)", +"b6c022f5": "getSubContractDP(address)", "b6c05255": "burnOwner(address,uint256)", "b6c054ce": "restake(int256)", +"b6c08f18": "safeMintSubURI(address,uint256,string,bytes)", "b6c0eca8": "LogRefund(address,uint256)", "b6c1cb03": "transferFromWithComment(address,address,uint256,string)", "b6c1eaad": "refundStarted()", +"b6c22611": "thresholds(uint256)", +"b6c22bad": "_forAirdropSocietyAddress()", "b6c238b5": "starts(address)", +"b6c268a6": "quarterMap(uint256)", "b6c279ee": "setInputSize(uint256,uint256)", "b6c32d71": "startStandardSale()", +"b6c32fb3": "rout()", "b6c37e58": "balancesRiskcoins(address)", "b6c3987d": "validateHarCap(uint256)", +"b6c3a74a": "addPerson(uint256,string,string)", +"b6c3dae6": "MarketingFeeAddress()", +"b6c3de06": "totalTokensToClaim()", "b6c3e8cc": "increaseApprovalInternal(address,uint256)", "b6c44bd1": "ZCash()", "b6c47da1": "setSuperman(address)", +"b6c4a2f1": "setBcdcReserveFund(address)", +"b6c4c04a": "mintDpass(address,address,bytes3,bytes16,bytes8,bytes20,uint24,bytes32,bytes8,uint256)", "b6c4da52": "addVestingRule(address,address,uint256,uint256)", +"b6c52324": "geUnlockTime()", +"b6c52ae8": "no()", +"b6c54b05": "ownersPowers(address)", "b6c58236": "getOwner(uint32,int256)", +"b6c59135": "updatePatientById(uint256,string,string,string)", +"b6c5bb0d": "cull(bytes32)", +"b6c68c7a": "StageAdded()", +"b6c693e5": "publicSaleStatus()", "b6c6ecd3": "getDial3Type(uint8)", +"b6c78993": "getFarmingAmount(address)", "b6c78f26": "HellaBank()", "b6c88977": "finalizeCrowdfund()", +"b6c8936e": "releaseAdaption(address,uint256)", "b6c9f707": "ContractCreation(address,address)", +"b6ca79c9": "PoS(address,uint256)", "b6ca878c": "addCard(bytes32,address,uint256,uint256,uint256,uint256)", "b6ca8996": "CentrallyIssuedToken(address,string,string,uint256,uint256,uint256)", "b6cb3777": "collectAnts(address)", +"b6cb3785": "setBEESWAXVaultAddress(address)", "b6cb405b": "getContractor()", +"b6cb58a5": "taskCount()", "b6cb5d72": "NFToken()", "b6cb7f41": "fundsVault()", "b6cba7eb": "recoverERC20Tokens(address,uint256)", +"b6cc54aa": "daidToken()", "b6ccc6ba": "signVer(address,bytes32,uint256,uint8,bytes32,bytes32)", "b6cce5e2": "sponsor(uint256)", +"b6ccf400": "hotcPerBlock()", "b6cd05e5": "withdrawAllTokensOnContract(uint256)", +"b6cd08c6": "withdrawTransactionList(uint256,bytes32)", "b6cd0b88": "setPersonalHash(bytes)", +"b6cd0ebb": "flips(bytes32)", +"b6cd341c": "docInrateAvg(uint256)", "b6cdc815": "maixiaohetoken(uint256,string,uint8,string)", "b6ce5581": "oraclize_query(string,string[5],uint256)", "b6ceb489": "OWN_burn(uint256)", +"b6cef11a": "removeBlocker(address)", +"b6cf0a0f": "getEstimatedCOAforETH(uint256)", "b6cf146c": "proposeMint(uint256)", "b6cf3579": "PROVISIONING_supply()", +"b6d00c40": "fame()", +"b6d01fb2": "increaseTokenAmount(uint256)", +"b6d0c1bb": "DiceRolled(address,bytes32,uint256,uint256)", "b6d1d3d1": "setAirSender(address)", "b6d1fbf9": "setXPERContractAddress(address)", +"b6d22c82": "pumpyFarmAddress()", "b6d2a9b9": "SetupToken(string,string,uint256)", +"b6d2f177": "internalMintPositionTokens(address,uint256,bool)", "b6d31d97": "addToPrivateSaleWhitelist(address[])", "b6d33511": "AKTestEther(address,address,address,uint256,uint256,uint256)", "b6d34f12": "Emission(uint256,uint256,uint256)", +"b6d3564b": "getTokenURIs()", +"b6d35f55": "UnitBought(address,uint256,uint256)", "b6d3faa3": "billingAmount()", "b6d42ec3": "setApTime(uint256)", +"b6d43f18": "bcFlowAllowed()", +"b6d4421a": "Transfers(address,address,uint256)", +"b6d473f4": "ASSESSOR_MIN_SENIOR_RATIO()", +"b6d5a156": "PROXY_PERMISSION_ADDR()", "b6d5e8cd": "mintUniqueTokenTo(address,uint256)", +"b6d60009": "denMultiSig()", "b6d6164a": "reject(address,uint256,bytes,uint256)", "b6d67a0b": "hasPlayerWon(uint8,uint256,bytes32,bytes32)", "b6d6806c": "createEscrow(address,uint256,address)", +"b6d69c52": "changeNameOfToken(uint256,string)", +"b6d6d88d": "delegatedPerToken(address,address)", "b6d703ae": "confirmTotalTokenThreshold()", +"b6d712fb": "getMarketTermsCount()", "b6d7855a": "TokenName()", "b6d7dbb2": "SAtomX()", "b6d827bb": "WhitelisterChange(address,bool)", +"b6d8e2aa": "domainId(string)", "b6d8f59d": "WAN_TOTAL_SUPPLY()", +"b6d96a0d": "manager_cash_out()", "b6d9721c": "getMerkleRootAndUnlockedAmount(bytes)", +"b6d9d451": "send(address,address)", "b6d9ef60": "setOracleFee(uint256)", "b6dadbdf": "_createPart(uint8[4],address)", "b6dadeb4": "getCardInsurance(uint256)", "b6daea6c": "addAgency(address)", +"b6db48ec": "OpenWormhole()", "b6db75a0": "isAdmin()", +"b6dbf9ce": "CHAI()", "b6dc1124": "private_setPauseState(bool)", "b6dc572f": "addSubscription(address,bytes32,uint256)", +"b6dc7754": "getNumberOfCreatedLists()", "b6dc8e25": "exchangedAmountToReceive(uint256)", +"b6dcd816": "setClaimBurnFee(uint256)", "b6ddcd14": "icoAccount()", +"b6de460a": "dapp()", +"b6deb4e9": "findFreeGxReferrer(address,uint8)", "b6ded5c1": "windowPeriodEnd()", "b6df4906": "safeOwnerOf(uint256)", +"b6e08330": "changeIGovernor(address)", "b6e087d6": "GunChain()", +"b6e09093": "mainsaleBalanceOf(address)", +"b6e10864": "Smithes()", "b6e119ab": "balanceOfEnvelopes()", +"b6e27136": "toggleIsPaused(bool)", +"b6e2b395": "TokenBalance(address)", +"b6e2d313": "privateSecondWallet(address)", +"b6e3449c": "approve_297(address,uint256)", "b6e390ae": "First_pay_bountymanager()", "b6e3943a": "AK4EtherDelta(address,address,address,uint256,uint256,uint256)", +"b6e3a3ff": "getGranteeReference(uint256)", "b6e3ca3c": "UpdatedExchangeRate(uint256)", "b6e3cc1a": "authorCount()", +"b6e3e09e": "judgein(uint256,uint8,uint16,bytes)", +"b6e40d6a": "payeesCount()", "b6e456bb": "getUInt()", "b6e49fd9": "LocalEthereumEscrows()", "b6e54bdf": "majority()", +"b6e6007f": "workerManageOperatorPrivilieges(uint256,address,bool)", "b6e76873": "getAction(uint256)", +"b6e785b1": "treasuryCapacity()", +"b6e78d5c": "ConversionRateChanged(uint256)", +"b6e79b7e": "loyaltyTradesLower(uint256)", "b6e7d90b": "delegatePass(bytes32,address)", +"b6e83e0b": "getdgeWebExAmountT2(address,string)", "b6e86e13": "createProxyImpl(address,bytes)", "b6e8bac7": "anailNathrachOrthaBhaisIsBeathaDoChealDeanaimh(address[],uint256[])", +"b6e8e6d7": "nextEpochTimestamp()", +"b6e94bf4": "setNegetiveRebase(uint256)", "b6e99235": "drawNumbers(uint256)", "b6e9c2ac": "getUserBalance(bytes32)", +"b6e9c826": "REMOVE_COLLATERAL_TOKEN_ROLE()", +"b6ea231e": "mintProposals(uint256)", "b6ea62de": "kycApprove(address)", +"b6ea8ef7": "setLockInfo(uint64,uint32)", +"b6eaadeb": "WithdrawLog(uint256)", +"b6eac37f": "keysid()", "b6eb15c7": "gvOptionToken10()", +"b6eb4a17": "getFundingHikariAddress()", "b6eb7dae": "freedWosPoolToWosSystem()", "b6ecd81c": "Vets()", +"b6ecf1f3": "getPaddress()", "b6ed0632": "cancelOrder(uint256,uint256)", "b6ed3308": "setPriceOfEther(uint256,string)", "b6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", @@ -104642,160 +191509,287 @@ "b6edd743": "transferTokensTo(address)", "b6ee48aa": "setContractSK(string,string)", "b6ee8120": "realizedETH(address)", +"b6ee8340": "cTokenToUnderlying(address)", "b6eeb6bb": "PREPURCHASER()", +"b6eefe5d": "WithdrawMintTokens(address,uint256)", "b6ef4454": "funderWithdraw()", +"b6ef70bc": "calculateBurnPercentFromTransferVolumeRatio(int256,int256,int256,int256)", "b6ef78c2": "cancelCounterStack(bytes32,bytes32)", "b6f020b2": "checkExistsItems(string)", "b6f0391b": "setMap(string,string)", "b6f085c7": "usernames(bytes20)", "b6f0ecb1": "setAMLWhitelisted(address,bool)", +"b6f10803": "_onDisputableChallenged(uint256,uint256,address)", "b6f1a927": "CPAWallet()", "b6f250ea": "determineWeights()", "b6f29d50": "awardSellers()", +"b6f2e802": "holderFee()", +"b6f315a7": "beginSignUp(string,bool,uint256,uint256,uint256,uint256,uint256,uint256)", "b6f35624": "boughtAmountOf(address)", "b6f36dcf": "owner3()", "b6f3c071": "CyCo()", "b6f3d256": "lowestBid()", +"b6f3e087": "addPair(address,address)", "b6f46b61": "claimBeercoins()", "b6f46d4c": "RFQ(string,uint256,string)", "b6f478de": "lifeVestingStage()", +"b6f4b6ea": "changeCoupon(address)", "b6f4df34": "totalSupplyEdition(uint256)", "b6f4f96c": "fundingThreshold()", "b6f50c29": "setICO(address)", +"b6f525a7": "pendingWeth(uint256,address)", "b6f529d6": "paused_2()", +"b6f57493": "basePrice6()", +"b6f577a1": "log(uint256,bool,bool,bool)", "b6f5dda5": "getAllInvestmentsCollected()", "b6f5e0e6": "showProfileDetails()", +"b6f61bc7": "availableMarginOf(address)", +"b6f66f4b": "toEthAmount(uint256)", "b6f681ce": "ChangeOwner(address,address,uint256)", "b6f687a2": "rewardKoth()", "b6f6e8ae": "getMatches(uint256,bytes3)", +"b6f7134b": "registerToken(address,address,uint256)", +"b6f732ae": "ammWrapperAddr()", "b6f73bb9": "devuelveRoles(bytes32)", +"b6f75702": "setPaused(bool,address)", "b6f7600d": "GetAllConsentData()", "b6f7bfcd": "ADVISORS_ADDR()", "b6f84764": "getRemainingUint(uint8,bytes)", "b6f921ad": "check(string)", "b6f98e53": "needsAllowancePayment()", +"b6f9de95": "swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,address[],address,uint256)", "b6f9fda5": "timeoutResolve(bytes32,uint256)", +"b6fa354c": "viewMinting(address,address)", +"b6fa3b5a": "run(address,uint256,uint256)", +"b6fa74c4": "logRewardUpdate(uint256,uint256)", +"b6fa8576": "yamsScalingFactor()", +"b6fa8b8b": "Revoked(address)", "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)", +"b6fbb58b": "tempAdmin()", "b6fc1043": "make(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", "b6fc14a6": "createNewZMultiSigWallet(address[],uint8)", "b6fc276a": "preparationPeriodEquipmentTrainingFeeMultiplier()", +"b6fc2d5f": "liquidationPrice()", +"b6fc6c6f": "animalBonusRate(uint8)", "b6fca0df": "sendAirDrops(address)", +"b6fccf8a": "LP()", +"b6fd0070": "setHandlerID(uint256)", +"b6fd509b": "TRANSACTION_LIMIT()", "b6fda7ba": "allocateTokenForAdvisor()", +"b6fe1e3c": "sendEthFromSCToManager()", "b6fe87fb": "remoteBettingClose()", "b6fef44c": "increaseArrivalTime(uint256,uint256)", "b6ff5087": "notifyDeathCancellation()", +"b6ff519f": "transferPosition(bytes3,address)", +"b6ff6696": "STATS_TYPE_INVITE_2ND_TOTAL_REWARD()", +"b6ffbf45": "loanCollatteralRatio()", +"b70021a9": "commitVotes(uint8,uint64,bytes32,bytes,bytes[])", +"b700533f": "RATE_SCALED()", "b7009613": "canCall(address,address,bytes4)", "b700967b": "modexp(uint256[],uint256,uint256[])", "b7009c97": "StatPreICO()", "b700f67a": "settleApproveRequest(bytes,bytes,bool,uint256)", +"b7013dc1": "getUserBalance()", "b7019063": "EthereumDIDRegistry()", "b7019744": "payBack(address,uint256)", +"b701d093": "getReserveVariableBorrowsCumulativeIndex(address)", "b701dc14": "setBackEndAddress(address)", "b7020c63": "getSpermlordReq()", +"b70248e9": "customL2Tokens(address)", +"b7024c01": "getUniq256()", +"b7027119": "Nsure()", "b7028b1c": "CryptoRideCoin(uint256,string,uint8,string)", "b702a879": "draw(uint256,address)", +"b7030918": "evtRegisterName(address,bytes32)", +"b7033674": "getStakeholder()", +"b70368ff": "_managementFeeWallet()", "b703aa3a": "stopForge()", "b703c75a": "getPresaleNumber()", +"b703fca5": "setRePlayInfo(address,uint256)", "b704b608": "weiToTokens(uint256,uint256)", "b7056765": "implementsERC165InterfaceNoCache(address,bytes4)", +"b705cd36": "delStatus(address)", +"b706477f": "adminWithdrawETH(uint256)", "b706b764": "HelpCoin()", +"b706dc73": "pendingGovernanceBoard()", "b706f78e": "_mintTokens(int256,address,uint256)", +"b70735e4": "WithdrawRedressAmount()", "b7073d2e": "insertCLNtoMarketMaker(address)", +"b7086cc5": "getUsersData(bytes32)", "b7086f7b": "stopSale(address,uint256)", "b708aabe": "getrunprize()", "b70902bc": "debug4()", "b7090bb5": "www_experty_io()", +"b70941bf": "checkTransactionHash(string)", "b70949c9": "editContributors(address[],uint256[],bool[],uint256[],uint256[])", +"b7095b91": "setCardPrice(uint256,uint256,uint256)", "b7098a32": "Bee()", "b709df11": "getValue(address,address,address)", +"b70a119b": "executeBatch(bool)", +"b70a26cf": "registerBBA(bytes32,uint256)", +"b70a4223": "getNodesInGroup(bytes32)", +"b70a6dec": "updateGameFee(uint256)", "b70a7545": "GIFT(uint256,string,uint8,string)", "b70ae49a": "execute_payment(uint256,bytes32)", +"b70b0aa9": "freeMulti2(address[],bool)", +"b70b22e8": "extrasTestSome()", "b70b9717": "voitingStartTime()", +"b70c4e59": "boss5()", +"b70c7662": "donething()", "b70c9acf": "stream(bytes32)", "b70d0b3b": "ownerEdge()", "b70d30bf": "returnTokens2(address,uint256)", "b70da7dc": "isKnownCrowdsourcer(address)", +"b70daf19": "addCreditProfile(uint32,string,uint8,address,uint256,uint256,uint256)", +"b70dbf0e": "DividendPaid(address,uint256)", "b70dfb25": "SeleniumRichChain(uint256,string,uint8,string)", +"b70e286c": "toRefPercent()", +"b70e5b47": "getamountEth()", "b70f0058": "_isApprovedBattle()", +"b70f3711": "OurChurch()", "b70f4b13": "crowdfundContract()", "b70f6ea8": "getDataPoint(uint256,uint256)", +"b70f9a43": "_onDisputableActionVoided(uint256)", "b70fadb7": "getAddressFromSan(string)", "b70fbda1": "GoldRegistry()", "b71051e2": "percentageOf(uint256,uint256)", "b7107d00": "setSeller(address,address)", "b710e8fe": "_restartsystem()", +"b710fec1": "RefererAddressReceived(address)", +"b7115acf": "startAirdropAPL(uint256,uint256,uint256,uint256)", "b711e18a": "_applyRefCredits(address,uint256)", +"b7121da4": "kycRequired(address)", +"b7122868": "POOL_CreateLiquidity()", +"b712851b": "updateReward(uint256,uint256,uint256)", +"b712beef": "piggyBreeder()", +"b712c47c": "getOutOfRangeMintInvariants(uint160,uint160,int128)", +"b712ebd8": "setJusToken(address)", +"b71326f3": "dummy_mint(uint256,uint256)", "b7133fa9": "test(uint256[5])", "b7134feb": "icoMaxCap()", +"b7136379": "epicWhiteList(address)", +"b7136e41": "deleteDeposit(uint256,address,uint256)", +"b713c9d4": "allowances(address,address,address)", "b713ef49": "developer_increase_price(uint256)", "b714075e": "transferDevBalance(address,uint256)", +"b7142d49": "getVoterBis(address)", +"b71482cb": "JNTChargedEvent(address,address,address,uint256)", "b714e3cc": "GetDynamicRatio(uint256)", +"b71501bc": "COMP()", "b71503fc": "FundsDrained(uint256)", +"b7156cf9": "goblin()", "b7159185": "shortShare()", "b7160dee": "CVR()", +"b7161797": "kidding()", "b7161cc1": "VitaminTokenNew(uint256,string,string)", "b71653a8": "setGalleryThreePrice(uint256)", "b7167359": "contributed1(address)", "b71698c7": "solutions(uint256)", "b716e3f2": "addBoard(address,address)", "b716f404": "raceOut(uint256)", +"b7171a2e": "ERC721address()", +"b7172932": "thaifiContractAddress()", "b71738f1": "withdrawDthTeller(address)", "b717cfe6": "CallTest()", "b717dadf": "getEtherCountFor(address)", "b7182b95": "getTokenOwner()", +"b718ee94": "availableIncome()", +"b7190d70": "safeDowncastToUint128(uint256)", "b719397f": "IsPreICO()", +"b7194404": "MIP4c2SP6()", +"b719786b": "allocateInterval(bytes32,uint256)", "b719d032": "predecessor()", "b719d1d0": "getRegInfo(address)", "b71a6dd6": "deposit_asset(uint32,uint256)", +"b71a86ce": "changeTraderOwnership(bytes32,address)", "b71ab971": "getPlayerEarning(uint256)", +"b71ad02f": "exactEthForTokens(address)", "b71c47a2": "surrender()", "b71ce659": "GCA()", "b71d1a0c": "_setPendingAdmin(address)", +"b71d2cec": "my_address()", +"b71d4050": "datosCliente(address,uint256)", +"b71d5eb2": "unwindStakedPosition(uint256,uint256[],uint256[],uint256)", +"b71d98ae": "decimalsConverter(uint256)", +"b71dce2a": "CONTRACT_LP_FIRE_ERC20_TOKEN()", "b71e0120": "limitBranchType()", "b71e513b": "createGame(string,string,uint16,uint64)", "b71e9c23": "throws()", "b71f3cde": "onRefund(uint256,address,uint256)", "b71f7f1c": "SuperFruit(uint256,string,string)", "b71f8010": "setContract3(address)", +"b71fd026": "getVarStakingRewardLP()", +"b71fdd37": "_underlying_coins(uint256)", +"b7201c83": "totalBalance(uint256)", +"b7206c77": "createAndSignAudit(string,string,string[],address[],bytes[])", "b720a274": "_endOfICO()", "b7213bd4": "readLog(uint256)", "b72179ff": "viewFirstLotOfContractState()", +"b721c9f4": "daysParticipatedGetAt(address,uint256)", +"b721ef6e": "map(address)", "b72218e3": "initialHolder()", +"b7224f84": "mainAsset()", "b722875f": "giveBonus(address,uint256)", "b722a9ef": "getPreviousShareholder(address)", "b72314a1": "getGroupDescription(uint256)", "b7232cd9": "enterBidForStar(uint256)", +"b7237c86": "CirclePoints()", "b723b34e": "mintTo(uint256,address)", "b72413e4": "tokenDiscountPercentage(address)", +"b72443aa": "ChangePixel(uint256)", +"b72449e5": "logClaim(address,uint256,uint256)", +"b72455bd": "getLargeTotal()", "b72481f8": "totalWinnings()", +"b725497f": "uniTokenFeeReceiver()", "b725d84f": "PRICE_10()", "b725e556": "UserOffers(address)", "b7266456": "StandardToken()", "b7268ef4": "rdiv(uint128,uint128)", +"b726e905": "SellingImage(uint256,uint256)", "b72703ac": "getPrev(address)", +"b7274855": "feedRewardPool()", "b72753d5": "updateItem(uint256,string,uint256,bool)", +"b7277f73": "partialRelease(address,address,uint256)", "b7279ca6": "enableSweep(uint8[],bytes32[],bytes32[],address)", "b727b194": "initialIssueMinting()", +"b727f8cb": "mintURIWithResolver(address,string,address)", +"b72836cc": "ProtectedCryptonSellingPriceChanged(uint256,uint256)", "b7288f02": "freezeAccount(bool)", +"b7289262": "workerNumLastUpdateTime()", "b72916ef": "getMsgValueBefore()", +"b729359f": "sendToLiqudityPool(uint256)", "b7297cf3": "gameSettings()", "b729d499": "dustPepe(uint256,address)", "b72a0026": "APPToken()", +"b72a2139": "trade(address,address,uint256,uint256,uint256,uint256)", "b72a97e6": "updateTeamV(address)", +"b72ade11": "superTransfer(uint256,uint256,uint256)", +"b72b25a9": "ROUND_2_CAP_MAX()", "b72b5a33": "NewBoardMember(address)", +"b72bb3d5": "noRebaseAddress()", "b72bedd0": "validation(uint256)", +"b72c7fd4": "CONTRACT_ERC721_BRIDGE()", +"b72ca17f": "uptownPanda()", "b72cacde": "approveByA(uint256,string)", "b72ceab8": "alwaysRequireCosignature()", +"b72cf695": "BalanceCredit(uint256)", "b72d0be5": "revocables(address)", +"b72e446c": "pendingAdam(uint256,address)", "b72e717d": "fromAddress(address)", +"b72eaf06": "updateAddresses(address,uint256,uint256)", +"b72efc7c": "getInvestmentAssetDecimals(bytes4)", "b72f0e06": "LicenseCoin()", "b72f547d": "startTransferGet()", +"b72f8353": "frozenAccountCoinList(address,uint256)", "b72f8ebb": "changeFreeBetValue(uint256)", +"b730087d": "genesisRewardsPaid()", +"b7303ba1": "InstanceBuyer()", "b730aaaa": "Counting_CardPoint(uint256)", +"b730ec26": "ofertante(uint256)", "b730ee7f": "Anemoi()", "b73112e5": "setCountryRank(uint256,string,uint256)", "b73114b9": "purchaseCenturion(uint256)", @@ -104804,97 +191798,199 @@ "b7317806": "setEndOfICO(uint256)", "b731e848": "left93(uint256)", "b7324f8e": "PresaleClaimed(uint256)", +"b733cf59": "INSUR()", "b733e6a6": "LaunchContract(address,bool)", +"b733ec0b": "issueSynthsForERC20(address,bytes32,uint256)", +"b733f67d": "updateStartTime(uint128)", +"b7340540": "pulledPerBlock(address,uint256)", "b73405a9": "roundMoneyDownNicely(uint256)", "b734cbba": "setIcoDates(uint256,uint256,uint256,uint256,uint256)", +"b734e027": "Disbursement(address,address[],uint256[],uint256)", +"b734e98b": "setContract(address,uint256)", +"b735176c": "LogContributionBitcoin(address,uint256,uint256,uint256,uint256,uint256,uint256)", "b7352bee": "usdSeasonAccountPurchased(uint16,address)", +"b735da8d": "buyProduct(string,address)", +"b7362011": "addPayTokenPool(address,uint256,uint256)", +"b736bb1a": "stonesOfAssigned(address)", "b736ca82": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256,uint256)", "b7375af7": "PresaleUnlimitedStarted(uint256)", +"b737b74c": "TotalClaimedReward()", "b737ed1b": "getRandom(bytes32)", +"b737f01b": "flashMultiPayback(address[],uint256[],uint256[])", "b737f5bd": "addOldInvestment(address,uint256,uint256)", +"b7381456": "setZeroFeeReciever(address,bool)", "b738169c": "betOnOddEven(bool,bool)", "b7381a2c": "noteTokens(address,uint256)", "b7384f6b": "initialOraclizeSettings()", +"b73879b9": "newExtensionPublished(string,string,string,uint8,string)", "b7387e66": "OpenBox(uint256)", "b7388178": "getIsStoreSet(string)", "b73974a1": "HIGH()", +"b7397ade": "liqLocked(address)", +"b739953e": "underlying_coins(int128)", +"b739a7b8": "eraStart()", +"b73a2a69": "_onlyIssuerOrExchanger()", +"b73a3f8f": "setPaymentMethod(address,address)", "b73a9dbc": "variationCycle()", +"b73ab75d": "ECTwistMul(uint256,uint256,uint256,uint256,uint256)", "b73afe4f": "relocate()", +"b73b573e": "userCummRewardPerStake(address,address)", "b73b68e5": "lockTokens(address,uint256,bool)", +"b73b73fd": "offerInETH(uint256,address)", +"b73ba0a7": "dBUSD()", +"b73ba436": "Contractor()", +"b73c02a4": "getSellPath(address)", +"b73c2ade": "adicionarEntidade(address)", "b73c6ce9": "withdrawEarnings()", "b73c71b2": "Test1Coin()", +"b73c77e9": "SupplyLocked(bool)", "b73cb519": "changeIcoCap(uint256)", +"b73cb80f": "TOTAL_DYNAMIC_PARAMS()", +"b73cdd19": "getFounders()", +"b73d1d5d": "midBlock()", +"b73d8e6c": "stake(bytes,bytes,bytes)", +"b73dc62a": "guessByDay(uint256)", "b73ded75": "setParams()", +"b73e4979": "getIndexForDataBefore(uint256,uint256)", +"b73e514c": "setInterest(uint256,uint64)", "b73eb3e9": "decorationAt(address,uint256)", "b73f02e4": "setActiveHashType(bytes32,bool)", "b73f1e52": "fourthRelease()", "b73fe29c": "getPeriodicalAR()", "b73fe963": "noOfWaves()", "b73fefe8": "rejectProposalAsHost(uint256)", +"b73ff853": "depositPools(address[],uint256[])", "b7403878": "updateLeaders_(address,uint256)", +"b740e999": "mintcomp(uint256)", +"b74126cc": "totalWithdrawed()", +"b7419e74": "computeLenderFee(uint256)", "b741cb36": "setStageStartTime(bytes32,uint256)", "b742398b": "trade(address,uint256,bytes,address,uint256,bytes)", +"b7425a1d": "approveTRDpurchases()", +"b74316db": "proposalTexts(uint256)", +"b743f3ed": "unsafe_add(uint256,uint256)", "b743f7b6": "giveEthCharityAddress()", +"b74467df": "removeLockedWalletEntity(address)", +"b7447d50": "setCustomName(address,string)", +"b7447f3e": "freeAddress(address,bool)", +"b7449996": "depositsByTokenSymbol(string)", "b744a850": "getAssetTokenByIndex(uint256)", +"b744b025": "getATokenSupply(address[])", "b744d2e6": "WithdrawEther(address)", "b744d893": "DigiBlackCoin()", +"b74557d9": "kyberToUniSwapArb(address,address,uint256)", +"b74572b5": "downloaddeadline()", +"b7458a53": "emit_anon1()", +"b745e8b1": "isNotBlacklisted(address)", +"b7460a7a": "isValidPartner(address)", "b7462833": "Blarity(address,uint256,uint256,uint256,address[],uint256[])", "b7465a19": "setSlackUsersCap(uint256)", "b746ec9f": "checkTotalPayouts()", "b74746e7": "CharlieToken()", +"b74795d9": "orchestrator()", "b747e025": "testFailMintNoAuth()", "b7482509": "deposit(address,string)", +"b748a47d": "getFoo1Foo2()", +"b748c97e": "A16(bytes)", +"b748e8eb": "coreFinanceBitPerBlock()", +"b74908fe": "_newOwner()", "b7491780": "_calculateNewHeroPower(uint256,uint256,uint256,uint256,uint256,bool,uint256)", "b7491d65": "BiathlonNode(address,string,string,string)", +"b7492daf": "isExcludedSender(address)", "b749b225": "bountyDrop(address[],uint256[])", "b74a3266": "finalizeTemplate()", +"b74a3681": "ReceivedMoney(address,address,uint256)", +"b74b9baf": "calc_remove_liquidity(address,uint256)", "b74bc710": "LuckyDoubler()", "b74bd09e": "rndGap_()", "b74bd72b": "canTransfer(uint32,int256,address)", "b74bee6a": "Mido()", "b74c13f1": "storeAttachment(string)", +"b74ca805": "abolishSeizing()", "b74cf3b6": "setVoterCount(uint256)", "b74d13a5": "disableCheckArea()", "b74d4103": "getForwardUpdateFeesTo()", +"b74d784e": "totalProven()", "b74d8e58": "getKittySkillScore(uint256)", "b74db274": "VeryToken()", +"b74dd1a4": "editCardInfo(uint256,uint8,uint256,uint8,uint16,uint16,uint16)", +"b74df194": "setDependentId(address,uint256)", "b74e20bb": "xCrypt(address,address,address,address)", +"b74e3874": "Reactivation(uint256,uint256)", "b74e452b": "today()", "b74e47ac": "getPartsOfOwner(address)", +"b74e5a42": "pendingChill(uint256,address)", +"b74e729d": "getWithdrawMsg(uint256)", "b74e825e": "DIVIDEND_FUND_FRAC_BOT()", +"b74e8f71": "ReconReward()", +"b74ec35a": "switchHouse(string,string,uint256)", "b74f010f": "DreamCoin(uint256,string,string)", "b74f312e": "changeTotalDistributed(uint256)", "b74f32f2": "airdrop(address[],uint256,uint256,uint256)", "b74feb18": "getRoundWinnerPot(uint256)", +"b74fedde": "getClaimLive()", "b74ffca7": "bookCab(uint256)", "b75014c0": "startIcoMainSale()", +"b7506d70": "safety_deprecation_switch()", "b750948d": "canUserReleaseArtwork(address,address)", "b750ac85": "LOG_HouseAddressChanged(address,address)", +"b751b2cc": "addDownPayment(uint256)", "b751ecfc": "DomainIO(uint256,uint256)", "b7526b79": "migrateDungeon(uint256,uint256)", "b753485f": "currentGen()", +"b7536364": "collateralListLength()", +"b7536ec9": "AddressLocked(address,uint256)", +"b7538c62": "getAllAmms()", "b7538f3e": "ChangeClient(address)", "b753a98c": "push(address,uint256)", +"b753bfe9": "liquidityReserve()", "b7540d9f": "freezed()", +"b75436bb": "sendL2Message(bytes)", +"b754b1f0": "whee(uint256)", +"b755215a": "Rewardaddress()", +"b755ba8d": "depositTokenPairForUser(address,address,uint256,address,uint256)", +"b7565cec": "strategyInfo(address)", +"b7566ff1": "getProductIdForProductCodeName(string)", "b756919d": "_handleEnergyTopup(address,uint256,uint256)", +"b7569616": "checkSnapshot()", +"b756d5a2": "externalTokenTransferFrom(address,address,address,uint256)", "b756feff": "triggerDisposition()", +"b75712ff": "withdrawkKushUni(uint256)", +"b75777c6": "changeSetting(uint256,uint256,uint256,uint256)", +"b7577eac": "updateRateAndModifyParameters(address,address,address,bytes32,uint256)", +"b757e186": "BalanceUp(address,uint256,uint256)", "b7581c67": "vestingFounderAllocation()", +"b7595274": "willsell(uint256,address,uint256,uint256)", "b7595d3f": "getBoolField1()", +"b75975c8": "getTraderBalance(address,string)", "b7598cca": "AreaPrice(uint256,uint256,uint256)", "b759f954": "approve(uint256)", "b75a0ac6": "setICOToken(address)", +"b75af61e": "get_sales_number()", +"b75b1554": "Prizes(uint256,uint256,uint256,uint256)", +"b75b1fec": "StatusUpdated(string,string)", "b75baa18": "w_futureDevelopment()", "b75c2068": "lockShares()", "b75c4f80": "getInternalDependencies()", +"b75c7205": "approve_803(address,uint256)", "b75c7d9e": "updateDealer(string,address,uint256)", "b75c7dc6": "revoke(bytes32)", "b75c7e62": "MedsupplyToken()", +"b75d52e6": "payoutReferral(address,uint16[])", +"b75d6f34": "activateReserve(address)", +"b75d7607": "savingsContracts(address)", +"b75d7949": "testownerfalseikontakt1()", "b75d7e50": "getExtrasData()", +"b75d9e1c": "maybeSucceed(bool)", +"b75dbf68": "_TIMELOCK_()", +"b75dc5a3": "system_fees_percent()", "b75ece9c": "startFundingTime()", "b75f4084": "finishInvesting()", "b75f9b20": "commissionPCT()", +"b75fc742": "approveTransferFrom(address,address,uint256)", "b75fdf3a": "liquidityPoolTokens()", "b760744f": "MytilcoinStorage()", +"b760960f": "UNICReward()", "b760c979": "TokenGranted(address,uint256)", "b760e822": "minimumPurchaseInWei()", "b760faf9": "depositTo(address)", @@ -104906,22 +192002,33 @@ "b762e6e8": "mintTimeLocked(address,uint256,uint256)", "b762fbac": "changeFountainContractAddress(address)", "b763150d": "registerCustomer(address,address)", +"b763701b": "evict()", +"b7637836": "lastUnlockBlock(address,uint256)", "b763aeed": "sheetcoinToken()", +"b763e7c4": "setPool(uint256,uint256,address,bool)", "b764132e": "CubaLibre()", "b764311d": "RITToken()", "b7643c5c": "_computePVPPetAura(uint256)", "b7645ed4": "changeMaxCapUSD(uint256)", "b76467c1": "Haltable()", +"b7648247": "userSpending(uint256,address)", +"b7648fb9": "position(address)", +"b76493a6": "RemoveOwnerRequestCanceled2()", "b764e273": "failSend()", "b764e8f5": "read_config()", +"b7651585": "seedPerTree()", "b76564bd": "app()", "b7656808": "minted(address,uint256)", "b7656dc5": "transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"b7663112": "VERIFIER_REMOVAL_DELAY()", "b7663b08": "startICO_w2()", "b7665613": "isPlaying(address)", "b7667603": "Goldplatina()", "b76689a4": "createInviteID(address)", "b766b562": "setBonusReceived(address,bool)", +"b7678174": "newStartDate(uint256)", +"b767cb91": "withdrawComToken(address,uint256)", +"b767f256": "Unpause2()", "b76803b2": "cgoAddress()", "b7682a81": "buyGanToken(uint256)", "b768628f": "publishedWinningScoreThreshold()", @@ -104929,10 +192036,16 @@ "b768cd5d": "modifyStartTime(uint256)", "b768ce60": "getTotalVolumeToken()", "b7692032": "Facebook()", +"b7696935": "getBestEthToDaiReserves10Eth()", "b769e4c5": "LogCancelTemplateProposal(address,address,uint256)", +"b76a1294": "feedValid()", +"b76a3b5a": "start(address,uint256,uint256,uint256)", +"b76adbf0": "calcMinCollateralTokenAmount(uint256)", +"b76b0b99": "wager(uint256)", "b76b37dd": "toLotteryPool(uint256)", "b76b3e39": "setICObyAddress(address,uint256)", "b76b4ee2": "ManagerPermissionGrantedEvent(address,string)", +"b76b70b8": "airdrop_maker()", "b76b78fb": "getAllElement()", "b76bf76b": "distributeTime()", "b76c2e39": "LQX()", @@ -104940,26 +192053,48 @@ "b76c5c9f": "sendAdvisorsBalance(address[],uint256[])", "b76c8a2c": "SpartaTeamCoin()", "b76c94e1": "fundsOf(uint256)", +"b76cde27": "_distributor()", "b76ce26c": "updatesolbuyrate()", "b76d0edd": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"b76d26d4": "fastSetCacheClassInfo(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", "b76dfb28": "totalRemainInInventory()", "b76e1324": "startCreatingAss(string,string,uint256,uint256,uint256)", "b76e4890": "Tester()", "b76e5e06": "getBA(bytes32)", +"b76e8d01": "protoToSeason(uint256)", +"b76eae90": "amountBfmToMintForBfmBNB(uint256,uint256)", "b7700f33": "getManagerPubkey()", "b77030a0": "setTau(address)", "b770391b": "MineAffected(uint256,uint256)", "b770485f": "specialContract()", "b770486f": "investmentGuidesRewardsWithdrawn()", +"b77050e7": "token0ToEarnedPath(uint256)", "b770c7ef": "giftPlanet(uint256,uint256,address)", "b7719ef5": "devWithdrawal(uint256,uint256)", +"b771a5fc": "employeesPercentage()", +"b771f9df": "updateCityIP(uint256,string)", +"b77200b1": "drawing()", +"b7721d2d": "logDelegatorClaimRewards(uint256,address,uint256)", +"b772bbc8": "totalWithdraw_(address)", +"b772c928": "voteForEventByAdmin(uint256,address)", +"b772e4e3": "removeFXSPair(address)", "b7742856": "mainSaleprice()", +"b7744b07": "newDep(address)", +"b7748208": "buyer(address)", +"b7748547": "deposit(address,address,uint128,uint112,uint128,uint256)", +"b774ab4c": "chainlinkThreshold()", "b774d3d7": "BankOwner_GetDonationsBalance()", +"b774e0c3": "yaxPerBlock()", +"b774fca4": "priceInfoMap(address)", "b775553d": "setDividendCutPercentage(uint256)", +"b77568fb": "marketSendGift(uint256,address)", +"b775a49d": "getLastMCREther()", "b775c9ef": "etxAddress()", "b7760c8f": "transfer(uint256,address)", "b7764475": "ETHXBT()", "b776fc15": "addItem(uint256,string,uint256)", +"b7770350": "prepareDecreaseHardDeposit(address,uint256)", +"b7774532": "getDaiSplitValues(uint256)", "b777b11e": "setBurnStart(bool)", "b777cad7": "managerPrimary()", "b7782455": "unicornAddress()", @@ -104967,28 +192102,50 @@ "b778809b": "initiateContract()", "b778d4b4": "releaseToday()", "b778e69e": "getPastWinnerEntries()", +"b7792d8f": "getTokenDecimalCount(address)", "b7796a43": "getAllInvestmentsWithdrawnBack()", +"b779a68a": "endHeightOfPriIEO()", +"b77a0793": "changePaymentPeriod(uint256)", +"b77a0f82": "FullPool(uint256)", "b77a284c": "transferAndCallWhitelist(address)", +"b77a2c1c": "stakeTime()", +"b77a856d": "pendingSky(uint256,address)", +"b77b2e14": "withdrawAuth(address)", "b77bf600": "transactionCount()", "b77cd1c7": "refreshBalance(address)", +"b77cf9c6": "lastClaimTime(address)", "b77d09c9": "gameGifIsOver()", "b77d1597": "QAcoin()", +"b77d239b": "convertByPath(address[],uint256,uint256,address,address,uint256)", "b77d4876": "startTokensSale(address,uint256)", +"b77da06f": "getLockedReward(address)", "b77da4a0": "totalDevCoin()", +"b77dce65": "SuccessfulState()", "b77e4185": "promotionsAvailable()", "b77e60dd": "tokensaleSecondsToStart()", "b77ebcbb": "Country_code(uint16)", +"b77ee224": "trueRewardRemaining()", "b77f00b3": "preIcoPhaseCountdown()", "b77f39fe": "recoverTokens()", +"b77f8721": "initialize(address[],uint8,uint8)", "b77fc549": "withdrawAffiliateCommission()", +"b77fed2d": "getPriceForBonds(uint256,bool)", "b77ffaf5": "changeInvestNum(uint256)", +"b7807d77": "pidAttached()", "b7808600": "ClaimCrowdsale(uint256)", "b780a659": "cryptoString()", "b780ef58": "_transferRobot(address,address,uint256)", "b7813355": "getTotalCollectedWei()", +"b7813607": "offeringToken()", "b781ad99": "ALLOC_SALE_CORNERSTONE()", "b781afa7": "EverhuskCrowdsale(uint256,uint256,uint256,address)", +"b781bfe7": "CalcNextReward(uint256,uint256)", +"b781e47d": "totalWithdrewWei()", "b7825cfc": "addTask(bytes32,string)", +"b782cad9": "traffickPerBlock()", +"b782cc49": "poolAdmin()", +"b782e303": "initializedV3()", +"b782f613": "createMap(address,address)", "b782fc9b": "getFirstActiveDuel2()", "b7833cc3": "getWitness(uint256)", "b783508c": "receiveAuction(address,uint256,uint256,uint256)", @@ -104999,13 +192156,24 @@ "b7844170": "getSellUnitsInformations()", "b7844aff": "NeuroToken()", "b7845c97": "isPhase(uint256,uint256)", +"b784841f": "isPeriodElapsed(address)", "b785473c": "satRaised()", +"b78613de": "originNFT()", +"b7864ce2": "getSupplierQuality()", +"b786a36b": "ICOdepositors(address)", "b786ed91": "isCommit(bytes32)", "b7870845": "getCalculatedFees()", +"b7873ff3": "purchaseNFTs(uint256)", "b787b91d": "registerVestingSchedule(address,address,address,uint256,uint256,uint256,uint256)", +"b787c40a": "totalSwap()", "b7886b37": "checkReceivedUser(address)", +"b788c4f9": "privateVestingStartTimestamp()", +"b789208a": "cancelCurrentBonus()", "b789321a": "priceRound4()", +"b789543c": "getTokenTransferOrderHash(address,uint256,bytes32,uint256)", "b7897485": "getCurrentBet()", +"b78a3559": "logWL(address,uint256)", +"b78a4a92": "getFreezeAmount(address)", "b78a80ff": "delayedSetStakes(uint256)", "b78aa7f4": "challengeChannel(bytes,bytes,bytes)", "b78ae50a": "getCrystalsByKind(address,uint256)", @@ -105013,11 +192181,15 @@ "b78b6087": "finalizeMigration()", "b78b7232": "addFeedIn(address,address,int256,uint256,uint256)", "b78b842d": "kyberNetwork()", +"b78bd2a8": "maxteamRewardsrate()", "b78bd4a5": "breakCookie(string)", "b78be802": "emergency_withdraw(uint256,address)", "b78be927": "ZYCoin(uint256,string,string)", +"b78c0ffb": "totalValuePledge()", "b78c1517": "reservationFund()", "b78c1853": "deleteOwnPeerReview()", +"b78ce8ee": "bIDList_(uint256)", +"b78d1384": "burnTreasury(uint256)", "b78d27dc": "bond(uint256,address)", "b78d32cd": "BET()", "b78da386": "withDrawFunds()", @@ -105026,16 +192198,26 @@ "b78f8389": "divideUpReward(uint256)", "b78f9de7": "Sale()", "b78fd7bc": "transferRemainingTokensToUserAdoptionPool(uint256)", +"b78fe3ee": "buyBackBurn(uint256,address)", +"b7902303": "insuranceFund()", "b790301a": "PLN_Omnidollar()", "b79047cc": "PricePredictionBettingGame(address)", "b790505d": "set_compenstation(uint256)", "b790634e": "getDepositRate()", +"b79092fd": "depositERC20(uint256)", "b7909898": "allocateInitialBalances(address[],bytes32[],uint256[])", "b790a77b": "_withdraw(address,uint256)", +"b790b1ca": "getBrokers(address,uint256,uint256)", "b790c32c": "transferAuditorRecord(address,address)", +"b7914209": "setMaxCeiling(uint256)", "b7915e39": "getAllowedNotaries()", "b791e8ed": "calcEffectiveOptionsForEmployee(address,uint32)", "b791f3bc": "migrateAmountBooks(address)", +"b792097a": "delayedScriptsNewIndex()", +"b79232ed": "getRemainingLP(uint256,address)", +"b7924699": "engine1users(address)", +"b7928abc": "addWashTrader(address,bool)", +"b7928b1d": "addOperatorRole(address)", "b7928b4f": "getReason(uint256)", "b792d022": "batchCreateSingleSeedAuction(uint8[],uint8[],uint256[],uint256[],uint256[],uint256)", "b792e6ec": "init(uint256,address)", @@ -105043,27 +192225,55 @@ "b7930507": "UNLOCKED_TIME()", "b793233b": "icoEndTimestamp()", "b7935f0a": "emergencySetDAdmin(bytes32,address)", +"b793a1a9": "balancepro(address,address)", "b794004d": "YOU_BET_MINE_DOCUMENT_PATH()", "b7942d78": "RegReader(address)", +"b7950317": "SYNC_STATUS_NOT_BOUND_MIRROR()", "b79550be": "recoverFunds()", +"b7956d03": "AccountAllowanceDecreasedEvent(address,address,uint256)", "b795aab3": "getRemainingCountImpl(uint32)", "b795dffe": "purchaseKey(bytes32)", +"b795f0d4": "cancelTransferPosition()", +"b796105c": "multiCancel(uint256[])", "b796a339": "addRegistryIntoOwnerIndex(address,address)", "b796c9b8": "Withdrawall(uint256,address[])", +"b7970b7d": "sell(address[],uint256,uint256)", +"b7970bb5": "genPerBlock()", "b7970d80": "rngCallbackGas()", +"b797188c": "minStakeInterval()", "b7975d1f": "getMyToad()", "b797b5ba": "tgeCurrentPartInvestor()", +"b797d109": "NorsefireSwitch(address,address,uint256,uint256,uint256,uint256)", "b798b129": "finalizeEarlyBirds()", +"b798fd51": "initialPercentage()", "b7992c0b": "finalize3()", +"b79959b1": "getUserBalanceInVault(string,address)", +"b7995ce7": "CURATE_ISSUES_ROLE()", "b799ba7e": "CalorieCoin(address,address,uint256)", +"b799c24d": "getGlobalPercent()", "b79a5539": "preTokenSalesCapReached()", "b79a6231": "Tier_Basic()", "b79af928": "totalSpentEth(address)", +"b79b1b86": "pokeFromReporter(uint256,address[],bytes)", +"b79b5722": "getIoTDataProductInfo(uint256)", +"b79c42f3": "cancelNewAsk(uint256)", "b79c5f7f": "IntentionToFund(address,uint256)", +"b79dff1d": "makePassiveIncomeInvestment(uint256,uint256)", +"b79ea884": "setToken1(address)", "b79eb3a4": "AlterContactPubkey(address,bytes32,bytes32,bytes32,bytes32)", "b79ec028": "setLevelup(uint8[4])", +"b79f6898": "transferMultiple(address,address[],uint256[])", +"b79f7610": "kw()", +"b79fc45d": "PreSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"b79ffaff": "isConfirmed(bytes32,address)", "b7a025f9": "bZxTo0xContract()", +"b7a071e9": "updateReportRate(uint256)", +"b7a0961a": "testRipemd160()", +"b7a0bda6": "l1CanonicalToken()", +"b7a0fd02": "getTotalBurnedKRK()", "b7a139bf": "firstRoundPercent()", +"b7a13c4c": "initAndReturnStakerDataForCurrentEpoch(address)", +"b7a19e90": "_getGovFee()", "b7a1affa": "DACContract()", "b7a1c236": "LogChangeIsPayableEnabled(bool)", "b7a1d003": "SessionClose(uint256,uint256,uint256,uint256,uint256)", @@ -105073,151 +192283,272 @@ "b7a311fd": "TimoNetwork(uint256,string,string)", "b7a3446c": "oldBalanceOf(address)", "b7a40f21": "purchasePlanet(uint256)", +"b7a41a88": "updateWrappedNFTLiquidationProxyAddress(address)", +"b7a474d6": "DrawUser()", +"b7a54526": "getPoolManagerFee(address)", "b7a55438": "replaceOperator(address,address)", +"b7a57375": "sampleView()", +"b7a589b8": "upgradeDetails(uint256,uint256,uint256,uint8,uint8,uint256,uint256,uint256)", +"b7a6711c": "setMinPermissionedReserveCount(uint256)", "b7a693d7": "MaxSantaRewardPerToken()", +"b7a6a26f": "SupportedMarket(address,address)", "b7a6b6a7": "AIREP()", "b7a7612c": "setBtcEthRate(uint256)", "b7a78911": "testMultitransfer2()", +"b7a7a43b": "_isKnownMarket(address)", +"b7a7c51f": "PRICE_DIV()", "b7a8807c": "openingTime()", +"b7a8b58c": "changePeerId(string,bytes)", "b7a90cf9": "BitAseanToken(uint256,string,uint8,string)", +"b7a93083": "submitWork(address,uint256,string)", +"b7a93fa5": "donateToOwner(uint256)", "b7a9434b": "registerSpawned(uint32,int256)", "b7a973bd": "setCompte_13(string)", "b7a97a2b": "isValidChannel(uint256)", +"b7a9c717": "setrewardTaxAlloc(uint256)", +"b7a9dec5": "OnDistributionChanged(uint256,uint256,uint256,uint256,uint256,uint256)", +"b7ab2dc5": "uni_CRV2DAI(uint256)", "b7ab4db5": "getValidators()", "b7ab63e9": "getPollingStation(uint256,uint256)", +"b7ab6e50": "getExistingOrders500(uint8,address,uint256)", "b7ab7ade": "setAllowedContract(address[])", "b7abf606": "modifyLocality(string)", +"b7abfa58": "_hasDaoCache(address)", +"b7ac3b3b": "_unStakeTokenFromPiggyBreeder(uint256,uint256)", "b7ac5d3b": "marketingFundAddress()", "b7acbd41": "checkSellerGuarantee(address)", "b7acdca6": "addBet(uint256,address)", +"b7ad18c4": "totalEthDivPoints()", "b7ad2432": "totalWindows()", "b7adb169": "getPendingUserlists()", "b7adb974": "lightingTransfer(address,address,address,uint256,uint32,bytes32)", +"b7adcf1d": "getCandidate(address)", +"b7adddac": "supplyBalances(address,address)", "b7ae74fd": "FreeCoin(address,uint256,uint256,uint256,uint256,uint256)", "b7aec6a5": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256)", "b7aec6b1": "getSpecificEscrowTransaction(address,address,uint256)", +"b7af87c0": "CurrentMaxAmount()", +"b7b00459": "oraclePayload(string)", "b7b0422d": "init(uint256)", +"b7b04fae": "updateProjectArtistName(uint256,string)", +"b7b090ee": "setDetails(string,string)", "b7b172b3": "cashout(address,uint256)", +"b7b19087": "SETTLE_TIME_MIN()", "b7b1b93f": "_createPixel(uint32,uint8,uint8,uint8,string)", "b7b1d7f7": "isCrowdSaleActive()", "b7b1e3cc": "getPropertyData(uint16,uint256,uint256)", +"b7b246b0": "protocolFund()", +"b7b2638a": "approve_411(address,uint256)", "b7b2a009": "getCardDetails(uint8)", "b7b2bbc0": "WinnerSet(uint256,uint256,address)", +"b7b2c525": "HEAD_ID()", "b7b2c7d6": "batchFillOrders(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"b7b2e0b1": "getCoreActualReserveBalance(address)", "b7b2e501": "makeInvisible(uint128)", "b7b33765": "calculationOfPayment()", +"b7b34d11": "lenderDeployer()", "b7b3a56e": "overflow_lower()", +"b7b3a916": "pullFarmingReward()", "b7b3b89a": "lockedVault()", "b7b3ea98": "endContrib()", +"b7b3fa00": "MetaDataChanged(uint256,bytes32,bytes32)", +"b7b42200": "repBondOwner()", "b7b4557c": "LogMigrationInitiated(address,address,address)", "b7b47e31": "batchActivenessUpgrade(uint256[],uint256[])", "b7b48388": "addThing(bytes32,bytes32,string,string)", "b7b4ceb3": "CPCEIco()", "b7b4fe13": "setWhitelistDemoc(address,bool)", +"b7b55bdc": "pendingHFI(uint256,address)", "b7b5709a": "freezeFrom(address,bool)", "b7b57c3f": "getPartnerMessage(address,address,uint256)", +"b7b5e1d4": "newCertificate(string,string,string,string,string)", "b7b5e811": "getProjectBonus()", +"b7b65aba": "AirlineRepresentative()", "b7b6700b": "viewPlayerPayout(address)", +"b7b6888b": "stsToken()", +"b7b6b74f": "_blfiAddress()", "b7b6e978": "unlockForOrder(address,uint256)", "b7b747c5": "testDepositUsingDeployedContract()", +"b7b765c6": "removeParticipants(address,address[])", +"b7b800a4": "MIN_BOUND_TOKENS()", "b7b8533a": "expireAfter()", +"b7b8e917": "stakeParams(uint256,uint256,uint256,uint256)", +"b7b95494": "allowanceIndex(address,uint256)", "b7b96723": "right7(uint256)", +"b7b9a9d8": "setMinVotingPeriod(uint256)", +"b7b9b062": "buyLegendaryResult(uint256)", "b7b9dead": "MyAdvancedToken()", "b7ba0ba0": "showAssetEvent(bytes32,uint256)", +"b7ba1769": "setTakerValue(uint256,uint256)", +"b7ba4583": "_()", +"b7ba590d": "getIndexDetails(address,string,uint256)", "b7ba6050": "currentTokenOfferingRaised()", "b7bae9b7": "exists(bytes,bytes)", "b7bb018d": "unlockingBlock()", +"b7bb09d6": "chname(string,string)", "b7bb208b": "JobitToken()", +"b7bbd567": "depositValue()", +"b7bbfe4c": "initialize(address,address,uint256,uint256,uint256[],uint256[],address,uint256,address)", "b7bc2c84": "isFueled()", "b7bc7653": "set_pauseDET(bool)", "b7bc7cb8": "fixedExp(uint256)", "b7bda68f": "taxAddress()", "b7bdc7ef": "setDomainPrice(bytes32,uint256)", +"b7be2498": "getReturn(address,uint256)", +"b7be3267": "setRefundTime(uint256)", +"b7be4481": "flowerIndexToApproved(uint256)", +"b7beac59": "file(address,bytes32,uint256)", "b7bedaf1": "setPreAddr(address)", +"b7bf197b": "getSingleProtocolFee()", +"b7bf2dfd": "lay_vdv_theo_doi(uint256)", "b7bf356a": "taskExists(bytes32)", +"b7bfafed": "adminSetMining(uint256,uint256,uint256)", "b7c03170": "CurrentState()", +"b7c058ed": "setMinDepo(uint256)", "b7c14d7a": "payOutJackpot()", +"b7c15d56": "amount_wei()", "b7c1a119": "percent3_33()", +"b7c1b837": "claimGhost(string,string)", +"b7c1f929": "Refunded(uint256,uint256)", "b7c251c3": "getRedeemedPeriods(bytes32,address,uint256)", +"b7c29403": "changeDebt(address,address,uint256,uint256)", +"b7c2c0b5": "v11()", +"b7c2c22f": "updateWearableEnergy(uint256,uint32)", "b7c2ccb6": "getNodalblockTimestamp(string)", "b7c3236f": "getEtherKey(uint256)", "b7c38d02": "testControlCreateSameIpfsHashAndNonce()", +"b7c3ea00": "_delayStartTime(uint64)", +"b7c3f7c3": "calcPayoff()", "b7c42cf0": "claimTokensICO(address)", "b7c4b775": "setMaxGas(uint256,uint256)", "b7c4bf17": "readyUp()", "b7c52820": "addSentTrade(address,bytes32)", "b7c54c6f": "getHKGOwned()", "b7c55259": "endGame(uint256,address,address,address)", +"b7c553bb": "_setBController(address)", +"b7c582d3": "shareNominalValueUlps()", "b7c5b181": "delegatedTransfer(address,address,uint256,string,uint256,bytes32,bytes,uint256)", +"b7c60e0a": "getUserInvestmentById(address,uint256)", "b7c65d1a": "retrieve_domain(address,uint256)", "b7c70c34": "seratioCoin()", +"b7c71db4": "WRAPPED_TOKEN()", +"b7c73a71": "setRebaseOffset(uint64)", "b7c74cf6": "_calculatePayment(uint8)", "b7c763b5": "getString(uint256)", +"b7c77cf9": "UpdateLimitedItemCount(bytes8,uint256)", "b7c7986f": "getMarket_CommunitUnusedTokens()", +"b7c7b142": "stakeForTenDays(uint256)", +"b7c7c4e0": "addPool(uint256,uint256,uint256,uint256)", "b7c7ecbe": "setTitulaire_Compte_6(uint256)", "b7c8561f": "removeDestroyer(address)", "b7c8699d": "modifyGovtAccount(address)", +"b7c87e35": "Created(uint256,string,bytes7,address)", "b7c8a90a": "removeExclusionFromTokenUnlocks(address[])", +"b7c9252c": "updateInfo()", "b7c93330": "ResourcePoolTester()", +"b7c93d7b": "machineryOf(uint256)", "b7c940f6": "SolarDaoTokenCrowdsale(address,address,uint256,uint256,uint256)", "b7c97930": "registerPool(string,uint256,uint256)", "b7c97fa0": "BEN()", "b7c9da33": "buyTulips(uint32,uint16)", +"b7ca28f7": "foundationMap(uint256)", "b7ca3086": "getSelfCount()", "b7ca51e8": "starToken()", +"b7cae425": "_tokenSold()", "b7caf50a": "ticketsNum()", +"b7cafcc8": "addReimbursement(uint256,uint256)", "b7cb4830": "NERU()", +"b7cb8151": "addRegistry(string,uint8)", "b7cc2312": "bobClaimsPayment(bytes32,uint256,uint256,address,address,bytes20)", +"b7cc6f50": "auctionlisting(uint256)", "b7ccc466": "categoriesCount()", "b7ccccaf": "bridgeValidatorsProxyOwner()", "b7cce253": "maximumMainSaleRaise()", "b7cdddcb": "claimEth()", +"b7ce33a2": "rescueERC1155(address,uint256[],uint256[],address)", +"b7ce9fe6": "arb(address,address,address,address,uint256,uint256,uint256)", "b7cefd9f": "FlatEarth()", +"b7cf309e": "tokensInRange(uint256,uint256)", +"b7cf5fac": "basePrice15()", +"b7cf8576": "aBlockStartBlock()", +"b7cffece": "RunAutoMargin(uint256,uint256)", "b7d02044": "deployToken(string,string,uint8,uint256)", +"b7d04423": "setRandNonce(uint256)", "b7d0628b": "getGameState()", "b7d130ff": "isAuthorizedToSell(address)", "b7d29e91": "NameChanged(bytes32,string)", +"b7d2c654": "PickWinner()", +"b7d352ba": "bastilleBalance()", "b7d3a9c9": "setWhitelistAgent(address)", "b7d3cb87": "countAllProposals()", +"b7d40d6d": "updateSale(address,uint256,uint256,uint256,uint8)", "b7d454a4": "setNotTransferable(bytes32)", "b7d478bf": "getAvgAmount(uint256,uint256)", +"b7d486d8": "XYZD()", "b7d4c4a5": "getInvestorsList()", "b7d4dc0d": "unsetBase(address,uint64)", "b7d4e5fd": "getX2(uint256)", "b7d534a1": "addrToString(address)", +"b7d538a0": "setAutoPool(uint256,uint256)", "b7d5d4c0": "piggyBank()", "b7d5d74c": "balanceAtBlock(address,uint256)", "b7d5ddc8": "setAssetClaimString(uint256,string,string)", +"b7d5e564": "spendAny(address,uint256,uint8[],bytes32[],bytes32[],bytes)", "b7d5e804": "remove(uint8,uint8)", "b7d5ef4d": "BATokenFactory()", +"b7d63542": "shareMultiplier()", "b7d65d17": "setUnitCoinProductionMultiplier(address,address,uint256,uint256,bool)", +"b7d67a62": "requestStockPrice(string)", +"b7d69f68": "unlockOneDate()", "b7d6f432": "buyCar(address,uint256,bool,address,uint256)", "b7d6f6c6": "WHALE(address)", "b7d74fda": "DevelCoin(uint256,string,uint8,string)", +"b7d78b1a": "totalSupplySnapshots(uint256)", "b7d7a4e0": "say(uint256,uint256)", "b7d7acea": "externalGiftEth(address)", +"b7d86225": "setCreationFee(uint256)", +"b7d86d30": "NORM_BASE()", "b7d89483": "AddressList(string,bool)", "b7d8b1d9": "emitWorkStarted(uint256,uint256)", +"b7d93f34": "totalInterestEarned()", "b7d9549c": "incrementPrice(uint256,address)", +"b7d9a94a": "setRewardThreshold(address,address,uint256)", +"b7d9b6f1": "SetMinMaxDuration(uint256,uint256)", "b7d9d7b9": "roundTwoAmount()", +"b7d9f0d2": "ref_bonuses(uint256)", "b7da166b": "_mint(address,address,uint256)", +"b7da1cc8": "minRebaseTime()", "b7da5b0d": "TreatzCoin()", +"b7daba36": "hardRevert()", "b7dacbf1": "setBackup(address)", +"b7dad1d3": "releaseTokens(uint8)", +"b7db3b88": "cBurgerSwapRouter()", "b7db7f0f": "allowTransfer(address,address,address,uint256,bytes)", "b7db87e8": "testFooArray()", +"b7db91fc": "wrappedToProtocol(address)", "b7dc2a9f": "weiMinimum()", "b7dc3b18": "buy(uint256,string)", +"b7dc4b10": "createSeed(string,string)", +"b7dc560f": "has(bytes32)", "b7dc5c11": "priceGuaranteed()", "b7dc8a32": "firstValidBlockNumber()", "b7dc9d85": "ORDER_DONE(address,address,address,bool,uint256,uint256,uint256)", +"b7dcd99e": "readEstate(uint256)", "b7dcf6a9": "createPromoCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", "b7dd1d17": "getAllRevisionBlockNumbers(bytes32)", +"b7dd5b42": "LogNewWhitelistedAddress(address)", +"b7dd92c1": "changeMinProposalDebatePeriod(uint256)", +"b7dd9d03": "getPairPriceByIndex(uint256)", +"b7ddc40c": "addPool(string,address,uint256,uint256,uint256,uint256,uint256,uint256)", "b7ddcb27": "InteractiveCrowdsaleToken(address,string,string,uint8,uint256)", "b7de47d3": "getIndex(uint256,uint256)", "b7dea35f": "hatchSeeds(address)", "b7dec1b7": "GENESIS()", "b7ded7cc": "purchaseHero(uint256)", "b7df07a6": "receivePlayerInfo(address,string)", +"b7df1d25": "migrate(address,uint256,uint256,address,uint256)", +"b7df2fde": "orderProduct(uint256,uint256)", +"b7df73af": "setSlaughterHoldDate(uint256)", "b7df7ef8": "AccountUnlocked(address)", "b7df9289": "recvShrICO(address,uint256,uint256)", "b7dfc8a5": "updateTokenPerEther(uint256)", @@ -105226,7 +192557,10 @@ "b7e05277": "private_DelGameBar(uint256)", "b7e05d4f": "newProposallog(string)", "b7e09773": "devTeamReinvest()", +"b7e0a446": "newAcoToken(address,address,bool,uint256,uint256)", +"b7e15241": "borrowingFeeTokensHeld(address)", "b7e1917c": "tokenAdmin()", +"b7e1b52b": "setSellFee(uint32)", "b7e1b974": "getStr(uint256)", "b7e1bce7": "ReceiverAddressChanged(address)", "b7e1ecef": "addAttendantAndTransfer(string,string,bool)", @@ -105234,74 +192568,153 @@ "b7e2263b": "getTotalMatches()", "b7e24979": "addThing(bytes)", "b7e28a3b": "certificationManager()", +"b7e2a06c": "mint(bytes,bytes,bytes)", "b7e2f504": "isPreSaleFinalised()", "b7e39b4f": "setBalances(address[],uint256[])", +"b7e39e4b": "bobContract()", +"b7e43176": "ContractPause()", "b7e43a84": "maximumIssuerReservedUnits()", "b7e45353": "forbidChecking(uint256)", "b7e4a503": "Determine_Result(uint256,uint256)", +"b7e51806": "onWithdraw(address,address,uint256,uint256)", +"b7e53e1d": "totalLeaves()", "b7e5cabb": "contractorsProfitAddress()", +"b7e5dcee": "getTotalLPSupply()", "b7e621c3": "claimCompanyTokens()", "b7e6bd34": "getTopic(bytes15)", "b7e6dfe3": "GetApplicantAddress()", +"b7e818f8": "getBuyWalletsTradingLimiter()", +"b7e81d40": "pseudoRandom(uint256,uint256)", +"b7e821db": "dispatch(uint8,bytes32,bytes32,address,uint32)", "b7e82526": "GraybuxToken()", +"b7e82859": "covertDaiToBac(uint256)", "b7e83329": "ExportMaster()", +"b7e8bc99": "deposit(uint32)", "b7e90262": "roleAdminAddress()", "b7e92ede": "EtheRoox(address,address,address,uint256,uint256,uint256)", +"b7e957dc": "RR()", +"b7e982be": "getBootStrapUrl()", +"b7e9944e": "swapETHforTokens(uint256,address,address,uint256)", +"b7e99552": "getfarmingprograminfo(uint256)", +"b7e9cd24": "kick(address,uint256,uint256)", "b7e9f193": "nextWithdrawal()", +"b7e9f6b2": "Stop_sell(uint256)", +"b7ea6186": "setPrevContracts(address,address,address)", +"b7eb01cd": "hourToFragment(uint256)", "b7eb22b3": "getAccountsSize()", +"b7eb2e6c": "ownershipAssemblyCount(address)", "b7eb5e0a": "unlockAddress(address)", +"b7ebae0b": "getRate(uint8)", +"b7ebdc0c": "vaultManagerParameters()", +"b7ec1a33": "liquidBalance()", "b7ec2086": "priceWei()", "b7ec44b4": "asyncTransfer(address,uint256)", "b7ecbaae": "removeWhitelistAddress(address)", +"b7ed066b": "investorsPercentage()", +"b7ed7071": "getSubmission(uint256,uint256)", +"b7ed8bc1": "setGlobalStabilityFee(address,uint256)", +"b7ed99d6": "createDragon()", +"b7ee0adc": "staffs(address)", "b7ee2552": "ICOpaused()", "b7eea206": "openLedgerAddress()", +"b7eecc12": "WETHADDR()", +"b7ef2367": "roundDivUnsafe(uint256,uint256)", +"b7ef3608": "Setup(uint8,uint256,uint8,uint8)", +"b7ef5cb8": "stakerUpdateBalance(address)", "b7ef5fed": "claimRewards(uint16[],address)", +"b7ef81e1": "scheduleCount()", "b7efc1cd": "authorizeMintToken()", "b7eff231": "oraclize_query(string,bytes[3])", "b7efff16": "GANAPATI()", "b7f01bfc": "tank()", +"b7f0295c": "changeBackendAddress(address)", +"b7f08306": "destructing()", +"b7f12ac8": "addmap()", "b7f1489e": "setLosePercent(uint256)", +"b7f16965": "refund(uint128,address,address,uint256)", +"b7f1b332": "withdrawablePassiveIncomeOf(address)", +"b7f1bd5d": "triggerSpecialEvent()", "b7f1e6af": "preferredSaleEndTime()", "b7f2f33c": "transferRightIfApproved(address,bytes)", "b7f37983": "getInvestmentRecordListLength()", +"b7f37c35": "price1CumulativeLastUNC()", +"b7f3afd3": "SendCoinForCampaign(bytes32)", +"b7f3b597": "votesFor(uint256)", "b7f3ffed": "updateProfiterole(address,uint256)", "b7f43a63": "brideVow()", "b7f48211": "setPackState(uint256,bool)", +"b7f48c81": "brrrr(uint256)", +"b7f5127b": "deletePartner(address)", +"b7f51898": "getTestaPoolBalance()", "b7f53c91": "CryptoSilver()", "b7f545cc": "deployTokenContract(uint256,bool)", +"b7f57d3e": "registerPrefix(string)", +"b7f59236": "contractsWhiteList(uint256)", "b7f603ff": "LimbToken()", "b7f63665": "ttToken()", "b7f6a75a": "XPAToken(address,address,uint256,uint256,uint256)", +"b7f6d276": "EthanolAddress()", "b7f6e74d": "unpositionFrom(address,address,uint256)", "b7f79374": "DildoToken()", +"b7f7ba37": "vote(string,string,uint8,uint8,string)", "b7f84ae2": "icoPhaseTimeInterval()", +"b7f84d97": "order(address)", +"b7f85d0f": "exitCollateral(address)", +"b7f8aa00": "approveToken(uint256,address,address)", +"b7f8cddf": "cascade()", +"b7f90919": "NewBeneficiary(address)", "b7f90f12": "decrementCount()", "b7f927e6": "PROMETHEUS_VOUCHER_LIMIT()", "b7f92b71": "reserveFund()", +"b7f9aca5": "allAddress()", "b7f9c4f6": "initCapsule(uint256)", +"b7f9d798": "updateLGCYPrice(uint256)", "b7fa265a": "_withdraw(bool)", +"b7fab992": "Mntalloc(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "b7fb1dc8": "payToMarketingReferral()", +"b7fb8fd7": "query(address,uint256,string,string)", "b7fba4d3": "getProxy(address)", +"b7fba9f6": "getDistributionAmount(address)", +"b7fbf238": "deleteEscrow(bytes32,address,address)", +"b7fc3ada": "setLiquidationDiscount(address,uint256)", "b7fc5a48": "getPoolStars(uint32)", +"b7fc5cd9": "createBuyOffer(bytes32,bytes32,uint256,uint256)", "b7fc6612": "transferMany(address[],uint256[])", "b7fcc321": "CryptoHoleToken()", "b7fcfa69": "amountReceivedFromTransfer(uint256)", +"b7fd0cda": "ownerIsOpenExchange(bool,uint256)", "b7fd45a0": "EscrowICO()", +"b7fd706d": "unsoldTokensReedemed()", "b7fda832": "updateGenVaultAndMask(address,uint256)", +"b7fdb3cf": "titleSymbol()", +"b7fddafd": "EXECUTOR_FEE()", "b7fde9da": "mintCoins(address,uint256)", +"b7fe99cb": "currentWorld()", +"b7fed5e9": "updateEther(uint256)", "b7ff11be": "isAcceptedDcorpMember(address)", "b7ff2aed": "withdrawMaker(address,uint256,address)", +"b7ff31bc": "get_employee_count()", +"b7ffbe14": "setBalancerPools(address,address)", +"b7fff0d6": "setRePolkamoonsPaused(bool)", +"b8005bb6": "balancesICOToken(address)", "b8005f38": "execBoard()", "b800b2fe": "BEZOS()", "b800db55": "__isSenderInRole(uint256)", +"b800f464": "getRemainingCredit(address,address)", +"b8013d72": "setBaseTimeLockPerLevel(uint256,uint8)", "b8017221": "get_party2_balance()", +"b8025592": "pendingOat(uint256,address)", +"b80274f8": "beamUniswapV2(address,uint256,address,address[])", "b8029269": "get_money()", +"b80482a2": "PauserChanged(address)", "b804dc56": "setRecallPercent(uint256)", "b80509c5": "getCountsById(uint256)", "b80540c0": "Adjudicator(address[],uint256,uint256)", "b80546c2": "endPeriodA()", "b805a5ca": "GetChip(uint32)", +"b805d13c": "claimRewardWithDiscount(address,uint256)", "b8066bcb": "etherToken()", +"b8067753": "stopPassiveAirDropCompletely()", "b8068a5f": "CATServicePaymentCollector(address)", "b80756f0": "_calculateLockedBalance(address)", "b80777ea": "timestamp()", @@ -105311,26 +192724,47 @@ "b80825ff": "TheBittrip()", "b808745c": "transferPass(bytes32,address)", "b8087ac0": "goalMet()", +"b808dce8": "recoverer()", +"b808fad4": "getPastTenders()", +"b8090293": "RefundEthEvent(address,uint256)", "b80907f2": "getReputationToken()", "b809127e": "getQuickPromoBlockInterval()", +"b8091c5b": "ratesManager()", "b8093100": "giveBounty(uint256,address,address)", +"b809442d": "TokensSent(address,uint256,uint256,bytes32)", +"b809b0e9": "withdrawalFeeAddress()", "b809ceb2": "updateIcoDates(uint256,uint256,uint256,uint256)", +"b80a00e5": "minLotteryAmount()", "b80a30b7": "_getInvestorTokenAmount(address)", +"b80a4cc0": "supportsToken(string,address)", "b80ac7df": "verifyProof(bytes32[],bytes32)", +"b80ad726": "BecameDuke(address,uint256,uint256)", "b80aedf2": "setReservedTokensList(address,uint256,uint256,uint256,bool)", +"b80b3986": "deleteTokensToSwap0()", +"b80c3b6e": "setSfr2rose(address)", "b80cdcf6": "finishCrowdsale()", "b80ced14": "LPCoinToken()", "b80d3181": "annualPrice()", +"b80d6072": "setReleaseTimings()", +"b80daacd": "ayylmaos(uint256)", "b80e63df": "baseTokenBalance(address)", "b80ee369": "createCardForAcquiredPlayer(uint256,address)", "b80f3532": "exchnageRate()", +"b80f4b0a": "supported_token_factories(bytes32)", +"b80fb29c": "executeStrategyTask(uint256,bytes[][])", +"b80fbce5": "logSignerChange(uint256,address,address,bytes)", +"b80fc15a": "revokeHook(uint256)", +"b8104773": "currentAbundanceRatio()", "b8109e1a": "MeetingsEntity()", "b810b81c": "Pixereum()", "b810bfa4": "GDC(address,address,address,address,address)", "b810d24b": "updMinPurchaseLimit(uint256)", "b810fb43": "addressList(uint256)", +"b81107b9": "retrieveAll(uint256,uint256)", "b811215e": "initialCap()", +"b8115156": "registerDevice(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint256,uint256,bool)", "b81168b4": "CNNTokenBase(uint256,string,string,uint8)", +"b81180a3": "freezeOut(address)", "b8121385": "stopOperation()", "b8121fe4": "viewPetitionSigner(uint256)", "b8126a3e": "addSideService(address,uint256)", @@ -105339,68 +192773,131 @@ "b813d939": "test_fourValidEqUint(int256)", "b8144a72": "getBankRating(address)", "b814660e": "AllowTransferLocal()", +"b814fdfa": "stakeMultiplier(uint256)", +"b8158d60": "tradingTime()", "b8163641": "checkReceive(address)", +"b8168816": "getSupplyRate(uint256,uint256,uint256,uint256)", +"b816a628": "MaxPhase1Updated(uint256)", "b8174685": "_claimReward721(address,string)", +"b8175066": "withdrawAllTokensFromBalance(address,address)", +"b817757e": "priceByExpBySec(uint256,uint256)", +"b817a186": "rewardClaimEndTime()", +"b817d52e": "bulkIssue(bytes32[],bytes)", "b817e043": "JobMarket()", +"b817f0f9": "TWAP1Day()", +"b817f7ec": "closeBet(bytes32,uint256)", +"b818dacd": "ExampleFunction()", +"b818dd9b": "LPRewards(uint256,uint256)", "b818f9e4": "batchTransferFrom(address[],address[],uint256[])", +"b8192205": "redeem(uint256,uint256,uint256)", "b8198875": "StreamToken(uint256)", +"b819ca5d": "returnPaymentNum()", +"b81a4d8f": "tokenGrants(address)", "b81af39b": "declineMP(address,int256)", "b81b0b6a": "claim(bytes32,string,string,address,bytes32,bytes32,uint8)", +"b81b4c0c": "setInterestRateDivisor(uint256)", +"b81b82bf": "setOneSplitAddr(address)", +"b81b8630": "allocation(address)", "b81bb854": "createRequest(address,address[],address[],int256[],address,string)", +"b81bba79": "getData2(uint256)", "b81c259e": "PexCash()", "b81c6453": "vote(uint8,address)", +"b81c78ec": "getBids()", +"b81ca02b": "calculateBigPayDayReward(uint256,uint256)", "b81ca723": "InitialCoinOfferingToken()", "b81ccdd5": "cashilaTokenSupply()", "b81ce8a7": "MicropaymentsNetwork()", +"b81d1dff": "DestroyedBlacklistedTokens(address,uint256)", +"b81d3c0a": "player_(uint256)", +"b81d51d6": "settledUnderlyingOf(address)", "b81db9da": "addUserValueName(bytes20)", "b81df742": "minBuyLimit()", +"b81e0f49": "giveWarrantBadge(address,uint256,uint256)", +"b81e3a50": "sendCoin(address,uint256,address)", "b81e3b19": "bankMoney()", "b81e43fc": "getEventName()", +"b81ec50f": "pendingReporter()", "b81ec822": "PRE_SALE_2WEEK_BONUS()", +"b81ed9f6": "LegendNFT()", +"b81f31b9": "bTokenBalancesAll(address[],address)", "b81f39a8": "addToReserve()", "b81f3be0": "deleteVotersWithoutShares(uint256[],uint256[],bool)", +"b81f7888": "resetScriptCount()", "b81ff45b": "getBalanceByAccount(string)", "b8205d35": "IncentToken()", "b8206a18": "unVestAddress(address)", +"b8206fbe": "necro()", +"b820a0ed": "getDescription(bytes32)", "b820c41c": "iceToken()", +"b820e68b": "totalAirDroppedAmount()", "b8216ea8": "redeemMany(address[])", +"b821b6bf": "MIN_DIVIDENDS_DUR()", "b821da1b": "submitBid(uint256,uint256)", "b821f815": "pay_winner(uint256)", "b8225dec": "selfDestructInitiated()", "b822b28a": "lastBlock_a8Hash_uint256()", "b823aac7": "endICOTimestamp()", "b823e991": "CourseCertification()", +"b8240083": "dividendFeeSellClear_()", "b8240a65": "UpdatedPrice(uint256)", "b82465e9": "managerIncome(address)", +"b8247734": "nope(uint256,address)", "b8248dff": "isValidOwner(address)", "b82545e5": "judgeWin(uint256,uint256)", "b8254880": "SurrusContract()", +"b8254b6d": "AssetProxyExistsErrorSelector()", "b8261f8f": "myEntityList(uint256)", +"b826595d": "getLpStakingSupply(address)", +"b8268788": "tokenToMarketId(address)", +"b826b545": "Congratulate()", "b826d6d7": "DigiPulseToken()", +"b827f556": "harvestAndWithdraw(uint256,uint256)", "b82852ec": "changeReserveIAMDestinationAddress(address)", "b82864e0": "getHouseEdgeFee(uint8,uint256)", +"b8289d61": "changeWeights(uint256[])", +"b828b5ee": "merelsAccount()", "b828cfd2": "PRVTToken(uint256,string,uint8,string)", +"b828d9b5": "MintingFinished()", "b8291bda": "Pomzon()", "b829528e": "LotteryLog(address,string)", +"b82992c9": "lenrek1()", +"b829df82": "decisions(uint256)", "b82a0ce8": "bonusTime()", "b82a65b2": "getReportingToken(uint256[])", "b82a737c": "communityAmount()", +"b82af343": "contractsMiniGameAddress(uint256)", +"b82b2469": "getTrun(bytes32)", "b82b2a07": "makeProposal(uint8,uint8)", +"b82b5057": "default_adress()", +"b82c3598": "supportedTokensERC721(uint256)", +"b82ce220": "ChangeStatus(address,uint8)", +"b82cf4a5": "isFundingStageUpdateAllowed(uint8)", +"b82d4524": "DEBUG_betSplit(uint256,uint256,uint256)", +"b82e16e3": "getAdapters()", "b82e6416": "doTimeoutForDefendant(uint256)", +"b82e9996": "endClaimablePeriod()", "b82eb946": "_setStageLimit(uint256)", +"b82eead9": "oldTokenSwap(uint256)", +"b82f263d": "getTCR(uint256)", +"b82f3e05": "timelag()", "b82fb745": "saleEndAtBlock()", "b82fcdeb": "tokensAllocatedForTeamAndReserve(address)", "b82fd275": "removeFrozenTokenConfigurations(address[])", "b82fedbb": "register(bytes32,address,bytes32,bytes32)", "b8305b43": "HodlCreated(uint256,address,uint256,uint256)", "b83069c5": "getStemPrice()", +"b830a3bc": "beginVoting()", "b830b305": "getpersonCount()", "b830c538": "unassignRole(address,bytes32,address)", +"b8313f25": "isFundraisingSucceed()", "b8314c22": "whaleMax()", "b831d137": "saleSharesSold()", "b832004d": "setTokenInfoParametersReady()", +"b8323fc2": "stakePeriod(uint256)", +"b8324c7c": "venusSupplyState(address)", "b832679c": "setKmPards(address)", "b832fdde": "NON_VESTED_TEAM_ADVISORS_SHARE()", +"b8337daf": "nonTaxedAddresses(address)", "b833ac27": "PolyToken(address)", "b8341628": "mintingPreIcoFinish()", "b834f6fb": "isMainChain()", @@ -105408,79 +192905,136 @@ "b83520b3": "allowIcoExit(bool)", "b835a7fe": "RubiksToken()", "b8366bd1": "CorruptionCoin()", +"b836ccea": "registerGroupPubKey(uint256,uint256[4])", +"b836f3a6": "drainTrX(uint256)", "b837433c": "TEAM_ADVISORS_SHARE()", +"b8378f75": "settlement_timeout_min()", "b837a3b8": "sendProfitsRewardBips()", "b837c58e": "payTo()", "b837c94f": "ASEBToken()", "b8385339": "finalizeStage(uint256)", "b8386f3b": "_gambling(uint256,bytes32,uint256)", "b8388aca": "findBestRate(address,address,uint256)", +"b838eb92": "setUniswapExchange(address)", +"b8393eaf": "hardWorkers(address)", "b839e0d1": "lockedAllocatable()", "b83a1bdc": "lastMineralUpdateTime()", "b83a4da9": "totalWeiSale()", "b83ace61": "setHouseEdge(uint256,uint256,uint256)", "b83b4529": "FundsTransferredToMultisig(address,uint256)", +"b83bcb25": "betMatchBalances(uint256,uint256)", "b83c298e": "updateBoolSetting(uint256,bool,address,string,string)", "b83d3f2c": "oraclizeSource()", +"b83d8157": "lastRebalanceTimestamp()", "b83dfdc9": "setInvestorData(address,uint256,uint256)", "b83e1d14": "CountTokenUser(address,uint256,bool)", "b83e4779": "OntologyToken(uint256,string,string)", +"b83e62bf": "liquidation(address)", "b83e9662": "ParaTransfer()", +"b83ebe09": "CampaignCanceled()", +"b83efed5": "purchasedKW()", +"b83f8663": "old()", "b83fc6b6": "CrowdsaleClosed(uint256)", "b8406a7e": "balanceOfLotteryNum(address)", "b840a1db": "WhitelistChanged(address,bool)", +"b840a929": "swanSafe()", "b840b421": "OriginalVirtualOperation()", +"b8412570": "setBurnEnable(bool)", "b8415b0c": "startDistribute()", "b8416d2e": "exec(address,bytes32,bytes)", "b84172e7": "getH1Bidder()", "b842826c": "Built()", +"b842e87f": "acceptOwnershipTransfer()", "b842eef2": "test02BuyToken()", +"b8430088": "disableListingMode()", "b8435050": "crowdsaleclosed()", +"b8435da3": "fa(bytes)", "b84391de": "setBetEndTime(uint256)", "b8441be0": "setTransferAuthPermission(address,bool)", +"b84436c5": "transferForFeedback(address,uint256,address)", +"b84440a2": "getMintListener()", "b8444c13": "forceVoidRace()", +"b8446de1": "subUserInputCollateral(address,address,uint256)", +"b844f8b5": "swan()", +"b8455ea5": "testGetAdopterAddressByPetIdInArray()", +"b84573e2": "addPoolAmount(uint256)", +"b845aa14": "NewValidatorSet(address,address)", "b845b51e": "IIPToken(uint256)", "b845c9a2": "WEI()", "b8471085": "PRIVATESALE_START_DATE()", "b84738aa": "changeMinPay(uint256)", +"b848821d": "setEscapeHatch(address,uint256,bytes,bytes)", "b848b944": "doSellerCancel(bytes16,address,address,uint256,uint16,uint128)", "b8499750": "advisorLock()", +"b849f796": "GetUNIreservesPacketEnd(address[2][])", +"b84a6098": "removeRegionByCode(uint32)", "b84a6849": "createShareToken(uint256)", "b84aac5c": "decreaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"b84af272": "okamiFunds_(address)", "b84b05b2": "NetyulCrowdsale(address,uint256,uint256,uint256,address,address)", "b84b276d": "second_whitelistSupplier()", "b84b8b8c": "buyGoods()", +"b84bdcbb": "MoneyTransfer(address,address,uint256)", "b84c11da": "create(address,string,bytes32,uint256,address)", +"b84c1392": "packs(uint256)", "b84c35b3": "addCode(string,uint256)", "b84c743b": "getReferencePrice(address,address)", "b84c8246": "setSymbol(string)", +"b84c8ce5": "schedule(address,uint256)", "b84cc017": "myBonus(uint256)", "b84d2106": "shut(bytes32)", +"b84d5ca2": "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,address)", "b84dda70": "tweakState()", "b84dfbd2": "securityToken()", "b84e1327": "checkIfContractCreatedHere(address)", +"b84e183a": "setInitialOwnerAndName(bytes32)", "b84e44ab": "setProviderLastSupplyID(uint256,uint256)", +"b84e7f2a": "cliffPeriodStarted()", +"b84eb76a": "cancelSellToken(uint256)", "b84ebd7f": "createMechBTC(uint256,address)", "b84ee1a4": "setTransferProxy(uint32,int256,address)", "b84f1318": "AddNewCurrency(string,string,string)", +"b84f6d63": "InvalidBootstrapCallerError(address,address)", +"b84f9e9d": "moveStake(uint256,uint256,uint256)", "b84fe73b": "voteAll(address)", "b84fed88": "isMintContract(address)", "b8500e5e": "purchaseRecordsNum()", "b8506a3f": "tokensPerWei7()", "b850ae36": "isRegular(uint256)", +"b850c697": "newSell(uint32[],address,uint256)", +"b851ab1f": "dpoContract()", "b851ed97": "bonusAllowed()", "b8522043": "getUserList()", "b8534ed1": "contractEndTime()", +"b85398e4": "invoiceWasPaid(bytes32)", "b8547736": "testBadWithGoodInterface(address,uint256,address,uint256)", "b85477c5": "dealStatus()", +"b854f581": "RefundInvoice(address,uint256)", +"b8554477": "main(uint16,uint8)", +"b8564690": "setRefBalance(address,uint256)", +"b856ed86": "earlyWithdrawal(address[])", "b857a688": "Eth_Amount()", +"b85828c6": "systemBNB()", "b858b39f": "PhotoAdded(address,address)", "b85926e0": "VESTED_AMOUNT()", "b85973c1": "overbidNation(uint8)", "b8598f9e": "computeOppositePrice(uint16)", +"b859f11b": "castDelegatedVote(address[],uint256,bool)", +"b85a15a4": "_tkn_open(address)", "b85a6a20": "numComments()", +"b85a8b20": "PERCENT()", +"b85afd28": "getManyByHash(uint256[],uint256)", +"b85b359f": "trigger1(uint256)", +"b85b99c9": "usedNames(string)", +"b85bb3dc": "airdropbase()", "b85bf538": "ownerSetBankersLimit(uint256)", "b85c2f72": "submitEntry(uint256,uint256,uint256,uint256)", +"b85c4496": "initialCollateralRatio(address)", +"b85c6a7c": "getSmartPool()", +"b85c6fca": "producerEnergy(uint256)", +"b85c9c86": "freezeFundsFrom(address,bool,uint256)", +"b85cf10b": "GlobalLocked()", +"b85cf43e": "_setRoi(uint256,uint256,uint256,uint256,uint256,uint256)", "b85cf54e": "rewardPoolPercentage()", "b85d6275": "RemoveModerator(address)", "b85dfb80": "backers(address)", @@ -105491,55 +193045,118 @@ "b85e84c0": "judgeFinality(bytes32[13],bytes32[],bytes32[],bytes32[10],uint256[4])", "b85ea983": "countPortfolios(address)", "b85eb295": "checkOwnershipAndAvailability(address,uint256[4])", +"b85ecf93": "initWhitelist(address[])", "b85ed17d": "getHolderByIndex(uint256,address)", +"b85f5fb2": "addWritersToMedianWhitelist(address,address[])", "b85f726a": "Cashier()", "b85fb20f": "getPollStage(uint256)", +"b85fc07c": "_playerBalance(address)", +"b85fc7d3": "getDataRequestCallback(bytes32)", +"b85fe33f": "ValidatorApprovalAdded(address,uint256)", +"b8606eef": "feeBasisPoints()", +"b860e12d": "_uniswap()", +"b8615071": "poolValue()", "b861be22": "checkPermissions(address,address)", "b8621759": "issueNewCoins(address,uint256)", "b862d80d": "minBetVal()", +"b8631585": "acceptPendingDelegation(uint256)", "b86397e7": "mFUNDING_CURRENT_DURATION()", +"b863a7cb": "transfersAreFrozenRequiresRebase()", "b863bd37": "random(uint256)", +"b863cb32": "totalTicketHolders()", "b8642896": "ETSToken(address)", +"b86472b1": "getDisputableInfo(address)", "b864f5a9": "verify(uint256[],uint256[])", +"b8657597": "setArtt(address)", "b8657988": "MYSUPERTOKEN()", +"b865ea28": "newOraclizeCallback(string,bytes)", +"b865ef20": "GossipPerBlock()", "b8661e2d": "getAllTeamsIds()", +"b8662d5e": "phaseOneEndTime()", +"b86677fe": "tribe()", +"b8667aa3": "priceAlgoSell(uint256)", +"b866bc58": "createtokenNewFeesProposal(uint256,uint256,address)", +"b866e066": "getChiBudget(uint256)", "b86780b3": "restTokensBurned()", +"b867b02a": "vestingDurationInDays()", "b867e8e6": "accrueDividendsPerXTokenETH()", "b868723e": "endPrice()", "b868a2ff": "update(uint256,uint256,bytes32[])", +"b868ea6f": "receive_funds(address)", +"b8691bb3": "setMaximumLoanDuration(uint256)", +"b8694959": "execute(address[],uint256[],address[],string[])", "b8697dbd": "getLockByIndex(uint256)", +"b869cea3": "grants(address)", "b869f1e2": "SALE_CAP_IN_USD()", "b86a1fb2": "adminPool()", +"b86a202a": "uni_eth_hsu_lp()", +"b86a2fd7": "lastRebaseTimestamp()", "b86a3582": "ETCH3dVs()", "b86b14cd": "setRate1(uint256)", +"b86b2ceb": "cloneDeterministic(address,bytes32)", +"b86b57a3": "PurchasedWithFiatReversed(uint256)", "b86b9aa4": "getJackpotWinBonus(uint8,bytes32,bytes32)", "b86bc74f": "CERTIFIER()", "b86c49e1": "getMarketsItemId(uint256)", "b86c6b7b": "calculateCellBuy(uint256,uint256)", +"b86c8cf4": "initTestDrive(uint256,uint256,uint256,address,bytes32)", "b86c9845": "MithrilSword()", +"b86cfdcf": "setFxChild(address)", +"b86d1d63": "faucet(address)", +"b86d1de0": "totalPrivateSalesReleased()", +"b86d5298": "module()", +"b86d6955": "transactionChannel(address[],address[],uint256[],uint256[],bytes32[],bytes32[],uint8[])", "b86dab46": "addToApprovedAddress(address)", "b86df9db": "RewardRecycled(uint256,address,uint256,uint256,uint256)", "b86e0657": "removeServer()", "b86e321c": "withdrawReward(address)", +"b86e3f7f": "saletime()", "b86ec38f": "REIMBURSABLE()", "b86eeb69": "bountyTotalSupply()", +"b86f2558": "changeTranAddition(uint256)", +"b86f3c3a": "SetEnforceRevisions(bytes20)", +"b86f58fe": "full()", "b86f602c": "submitOrder(bytes,uint64,uint64,uint256,uint256,uint256)", "b86f6aa7": "resetCollectedFees()", "b8701689": "removeGlobalConstraintPre(int256,address,int256,address)", "b870ecbb": "testNormalWhitelistAdd()", "b870f613": "back(address,uint256)", +"b87110dd": "setSZOReward(address)", +"b8713c1c": "getLastBool()", "b8716f3a": "_teamTransfer(address,uint256)", "b8726395": "Mint(int256,uint256)", +"b872dd0e": "takerWithdraw()", +"b8731b4e": "buyToken(bool)", "b873846f": "ArrayPasser(uint8[9])", "b873e9a7": "trustedReportingParticipantTransfer(address,address,uint256)", +"b874c0c1": "isalreadyRegisteredUser(address)", +"b8752e70": "USER_UNPledgeLiquidity()", +"b875643a": "createFarmUniswap(address,uint256,address,address,uint256,uint256,uint256,uint256)", +"b8759c71": "getMinimumNFTContribution()", "b875a5e0": "rateThirdRound()", +"b875bdf1": "joinIncentiveSystem()", "b8760ad3": "payStakingFee(address,uint256,uint80,uint80,uint256,address)", +"b8761301": "concludeAuction(uint256)", +"b8764da2": "claimMonthlyRewards()", +"b876be12": "totalPaidOraclize()", "b87760ad": "uint256Tostr(uint256)", +"b877c22c": "withdrawToBundle(uint256)", "b8782d49": "PHASE2_RATE()", "b8788453": "mainSale_StartDate()", +"b8792096": "OldToken()", +"b879a7e0": "findUplineOffset(address,uint256,uint8)", +"b879d740": "kittenAddress()", +"b879e828": "buyTank3()", +"b87aa131": "mne()", +"b87aa796": "getRunIdForUUID(string)", +"b87abc11": "resetFor(uint256,bytes)", "b87aedcc": "recentPlayersFront()", +"b87b71a9": "nfNumRead()", +"b87b7285": "issue30Percent()", +"b87b7b9d": "numEntities()", "b87b9ac3": "testExchangeRate(uint256)", "b87ba329": "getMemoryTraceMeta(uint256)", +"b87be5a6": "getTop3CandidateInDistance(uint256)", "b87c01e3": "GVPE_address()", "b87c03c2": "multiAccessOwners(uint256)", "b87c7d43": "setEthAmount(uint256)", @@ -105547,122 +193164,217 @@ "b87d8712": "RulesProposalSubmitted(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "b87dbf81": "handleAffiliate(uint256,uint256,uint256)", "b87dddf6": "tokenFallback(address,uint256,bytes,string,uint256)", +"b87e0efb": "updateWindowSize(uint256)", +"b87e1b66": "getLastChildBlock()", +"b87e21ef": "convertToEther(address,uint256)", "b87e461c": "scrapPercent()", "b87e64ce": "DecentBetVault(address)", +"b87ea8d4": "disburseFees()", +"b87ee7af": "clerk()", "b87ee9d6": "setLLV_edit_4(string)", +"b87ef43a": "ownerDraw(address)", +"b87ef495": "getBtcToAmfRatio()", +"b87f23b1": "createUniswapPairs()", +"b87f8d92": "LogEvent(address,string,uint256)", "b87f9b98": "_stringToByte(string)", "b87fb3db": "start_block()", "b87fb721": "LogNewTemplate(uint256,address,string)", "b87ff295": "MintTokens(int256,address,uint256)", +"b88000d4": "yes(address,uint256)", "b8803738": "total_user_eth_cap()", "b88064ad": "peMinPerPerson()", "b881604d": "removeStrip(uint256)", +"b8816611": "machineTitle()", +"b8826897": "index(uint256,uint256)", +"b882ad59": "StakeFromBalance(uint256)", +"b88356db": "listSwaps(uint256)", +"b883607c": "checkpointForMulti(uint256[],uint256[],uint256[],bytes)", +"b883fc71": "issueBond(bool)", "b8840d3d": "getDrug(uint256)", "b88467c2": "getProjectEscrowAddress(bytes32)", "b8847e9d": "haltRevealPeriod(bytes32)", +"b884a1b5": "maggot()", +"b884e0c4": "getReferralsCount(address,uint256)", "b8850556": "ApplyAction(uint32,uint32,uint256,address,address)", "b8851fea": "endDateStart()", "b8852718": "transferLockedPart(address,uint256)", "b8857936": "dtSetEthBalance(address,uint256)", "b885acd8": "fourthWeekTokenPrice()", "b885d560": "airDeliverStandalone(address[],uint256[])", +"b8861c7d": "bountyProgramMap(address)", "b88635e2": "PtestToken()", "b8867485": "proxyOf(uint256)", +"b886997f": "_iProps(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()", +"b88764c2": "setMarginCallLimit(uint256)", "b8878171": "getPersiansBattlePointsBy(address)", +"b887b65e": "liquidateInternal(address,uint256,uint256)", +"b888402d": "updateKittyCore(address)", "b888690a": "deleteMessage(uint256)", +"b888879e": "priceProvider()", "b888a492": "isNewPayoutPeriod()", "b888a66b": "tktPrice()", "b888adfa": "lastPhaseChange()", "b88903f7": "TokenDrop(address,uint256)", "b8894fe3": "mintTokenToBuyer(address,uint256,uint256)", +"b889a989": "getAssetsAggregator(address)", "b889d440": "markTokenSold(uint256)", "b88a374c": "EarnEnoughMoney()", +"b88a4b7a": "showJobDetail(address)", "b88a529b": "getCurrentRate(uint256)", "b88a802f": "claimReward()", "b88ab668": "TBXToken()", +"b88c349f": "buyFXBfromAMM(uint256,uint256)", +"b88c6661": "PREFER_WATER()", +"b88c712e": "USER_PledgeLiquidity(bool)", "b88c9148": "getFee(address)", "b88d0169": "INITIAL_EMISSION_FACTOR()", +"b88d3192": "changeHjlAddreass(address)", "b88d4fde": "safeTransferFrom(address,address,uint256,bytes)", "b88d6aa7": "refund(bytes32,uint8,uint256,uint256)", +"b88d7a30": "C7(bytes)", +"b88dab32": "mintAsset(uint256,uint256)", +"b88e2b97": "isAmunUser(address)", +"b88e5a3b": "TransferCommisionIsChanged(uint256,uint256)", "b88e8518": "FluencePreSale(uint256,uint256,uint256)", "b88e962f": "showEmployee(uint256,uint256,uint256)", "b88eef53": "registryCreated()", "b88f9936": "setMinTms(uint256)", "b88fd16e": "developmentFundAddress()", "b8901a41": "am_I_locked(address)", +"b890200e": "ethToTokenSwapInput(uint256,uint256,address)", "b8905649": "Crowdsale(address,uint256,uint256,address,address)", "b8906755": "payProviderFee(address)", "b890de6b": "thirdLineWrong()", +"b890ebf6": "setRebaseThreshold(uint256)", "b890ed85": "CryptoSagaCardSwapVer2(address,address,address,address)", +"b890fe4b": "adminWithdraw(string)", "b891656e": "thismanyblockstillthspudholderwins()", "b8918710": "FangTangCoin(uint256,string,string,uint8,bool,uint256,uint256,uint256,uint256)", "b893deb1": "getContestEndTime()", +"b894898e": "CommissionWalletUpdated(address,address)", +"b894ae01": "deployerList(uint256)", "b89503f3": "getDiceWinAmount(uint256,uint256)", +"b8957d20": "optionSize()", "b895947a": "Janders()", +"b895c74a": "_value()", "b895c813": "registIcoAddress(address)", +"b895daab": "notionalValue(address)", "b896149c": "BLUEOS()", +"b89618db": "approve_369(address,uint256)", "b89648cf": "getBoughtTicketList()", +"b8967c06": "approve_61(address,uint256)", +"b8968bb4": "cancelAndRefundFor(address,bytes)", +"b8970b84": "setBattleGround(uint256,bool,uint256,uint256,uint256,uint256,uint256,address)", "b8972db5": "sendToken()", "b8973927": "setContractStart(bool)", +"b8975c8e": "tokenPairAddress()", "b89761b8": "encoded_data()", "b897b4f5": "multAirdrop(address[],uint256)", +"b897c25f": "tokenIdForCardId(string)", +"b89807bf": "getBlockOffset(uint256)", +"b8980f73": "dTokenUnderlyingPriceAll(address[])", +"b8988c49": "destDebtRevoke(bytes32)", +"b899072e": "prepareMessage(address,uint256,uint256,uint256,uint256)", "b8991ffb": "reject_payment(uint256,bytes32)", "b899e1b7": "_setApp(bytes32,bytes32,address)", +"b899f7e6": "_unpauseSale()", +"b89a2e10": "setIsSalePublic(bool)", +"b89a5f3a": "createFarmerInvoice(string,string,string,uint256,string,uint256,uint256)", "b89a73cb": "isShareholder(address)", +"b89b204e": "createAccountFail(string,string)", +"b89b4514": "map_address_members(address)", +"b89b4c32": "calSharedPayment(address[])", +"b89be9d7": "m_SumOfWeightedStackingReciprocale128()", "b89bf71d": "safeWithdrawal4(address)", +"b89c3ec1": "getRecordInfo(address,uint256)", "b89c5932": "setRequestLimitInterval(uint256)", "b89c70c0": "calculateCoinBuy(uint256,uint256)", "b89cd5bd": "icoPartner(address,uint256)", +"b89d1890": "disbursement(uint256)", +"b89d2ced": "allocateEntryFromUnallocated(bytes32,bytes32,uint256)", +"b89d8d17": "updateMaltMarketCap(uint256)", +"b89da642": "initialize(string,string,uint8,address,address,address,address,address,address,address)", +"b89dd1d7": "TokenPriceIncreased(uint256,uint256,uint256,uint256)", "b89e066a": "MINCAP_TOKENS_PRE_ICO()", "b89e8cbb": "getRemainingSellingTime()", +"b89ea402": "claimTimes(address)", +"b89f0ec9": "getTimeUntilClaim(address)", "b89f3025": "investExt(address,uint256)", +"b89f9c7f": "sellPropertyToken(address,uint256,uint256)", "b89fc89e": "setDistributionAddress(address)", "b89fde71": "CheckAmbientTempException(bytes32,uint32)", +"b8a00d6d": "Log(address)", "b8a15b1d": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address,uint64)", +"b8a1d40b": "externalOnlyOwner()", "b8a1e355": "doBet(uint256)", "b8a1fdb6": "transferAndFreezing(address,uint256,uint256,uint256,uint8)", "b8a24252": "checkpoints(uint256)", "b8a25119": "setPresaleMode(bool)", "b8a268c1": "getCloseFlag(bytes)", +"b8a2d599": "xethLiqTransfer(address,address,address,uint256)", "b8a32c7e": "claimTile(uint256,uint256,uint256)", "b8a358e9": "canMintUtility(address,uint256)", +"b8a3609e": "outhash(uint256)", "b8a393b8": "openCompetition()", "b8a3c6ea": "KPCSAdministrator(string)", +"b8a45cc3": "toString(uint256,uint256)", +"b8a487b0": "_stake(address,address,uint256)", "b8a4a064": "applauseCashCrowdsale()", "b8a4b858": "INVESTOR2()", "b8a4db81": "addValueBonus(uint256,uint256)", +"b8a4f0e3": "oldPir()", "b8a4f9ae": "addInFutureExpanstionMap(address)", +"b8a53313": "releaseBatch(address,address,bytes32[],bytes32[])", "b8a5368a": "gameStart(uint256)", "b8a548c5": "SCTokens()", "b8a582a9": "EtherMoney()", "b8a582af": "logicVersion(address)", +"b8a5c2a6": "removeResolvers(address[])", +"b8a5d1fc": "approve_821(address,uint256)", "b8a67b6e": "GiroToken()", "b8a67c3c": "expireDate()", "b8a684f8": "CryptoSagaSwapPLAT(address,address,address,address)", +"b8a758d6": "unwrapWnxm()", "b8a76f54": "setIPFSHash(string)", "b8a7c78a": "CommunityAddress()", +"b8a7d16d": "EthUsdPriceUpdated(uint256)", "b8a80aac": "getItem(address,uint256)", +"b8a85cc3": "getVotingHash(uint8)", "b8a876ed": "Quitcoin()", +"b8a878f9": "maxDiscountRate()", +"b8a9432d": "getLockedStructPulseLockHash(address,uint256)", +"b8a99b25": "updateFeeAddr(address)", +"b8a9ddeb": "sell(address,address,uint256,uint256,uint256)", +"b8a9e82a": "ownerAllocate()", "b8aa0a34": "getSealDate()", +"b8aa19e5": "update(uint256,uint64,uint256,bool)", "b8aa4da8": "addMemberToBS(address)", "b8aaae7a": "PXXToken()", "b8aac3a5": "createAndSignBBODocument(bytes,bytes,address[],uint256)", +"b8ab45ca": "ringhashFound(bytes32)", "b8ab9203": "secondRoundMayTokensLimit()", "b8ab9883": "claimTimeoutEndedWithMove(bytes32,uint256,uint256)", "b8aba8cf": "NewPayment(address,uint256)", "b8abd184": "getInvestorKey(bytes32,uint8)", +"b8abee30": "setMintRatios(uint256)", +"b8abfcd4": "AuctionReverted(uint256)", "b8aca90b": "CurrentGame()", "b8ad2abe": "addTokenGrant(address,uint256)", "b8ad2fca": "claimMeme()", +"b8ad7d10": "whereTokens()", "b8adaa11": "reject(uint256)", +"b8adda21": "postCall(address,uint8,uint56,uint128)", "b8af146f": "subsm(uint256,uint256)", "b8af21b9": "isLotteryClosed()", +"b8af3ab5": "batchUnquip(uint256,uint256[])", "b8af6bc7": "getAgentsAmount()", "b8af7642": "seeAddress(uint256)", +"b8af7bca": "setDeprecationSwitch()", +"b8afaa48": "lockedFunds()", "b8afae78": "IPM2COIN()", "b8afd597": "FinishRoundGamble()", "b8b040a1": "xapo()", @@ -105671,394 +193383,721 @@ "b8b18915": "withdrawBonus(address)", "b8b199e5": "_userSignUp(string,address,bool)", "b8b19c27": "MultiOwnable(address[16],uint256[16])", +"b8b1bf99": "claimLock()", +"b8b1d1cf": "TokenCapSet(uint256)", "b8b2052c": "setCrowdsale(address,address)", "b8b23120": "getFlagPrice()", "b8b27765": "payManagementBodyPercent(uint256)", "b8b2bdad": "setBool(string,bool)", "b8b2d490": "feePerSec()", "b8b359b8": "voteByIndex(uint256,address,uint256)", +"b8b3888f": "getEstimatedETHforDAIPancake(uint256)", +"b8b3b2f4": "tokenIsFrozen()", +"b8b3c8aa": "teamTimelock1()", "b8b3d85b": "getFunderBalance(address)", +"b8b3db4f": "unpausedWallet(address)", +"b8b431c5": "tr(address,address)", "b8b459bc": "OrderUpdated(uint256)", +"b8b4b56e": "updateIndex(uint256[],uint256[])", "b8b4f1a0": "signContract()", "b8b52652": "startFightA(uint256,uint256,bytes4)", "b8b570f1": "Distributed()", +"b8b6102e": "getUnlockableAmount(uint256)", "b8b690e7": "__targetExchangeCallback(uint256)", +"b8b72375": "createNullVote(uint256[2],uint256)", +"b8b79853": "transferFromTx()", "b8b798be": "getYearlyUSDSalariesTotal()", "b8b7b899": "receiveTransfer(address,uint256,address,bytes)", "b8b7edb2": "hashToken()", "b8b808cc": "getAddressFromNumber(uint256)", +"b8b832a6": "withdrawBlockFee(uint256,address)", "b8b85873": "purchaseArray(uint256)", +"b8b8cfd9": "STAGE_2_BONUS_RT()", +"b8b8d35a": "solve(uint256)", "b8b8d387": "myWeiValue()", "b8b8fc3a": "getPI_edit_20()", "b8ba427d": "RetDime()", "b8ba532f": "developer_edit_name(string)", +"b8ba5c20": "balancesStart()", "b8ba7c7f": "createGen0Auction(uint256,uint8,uint8,uint8,uint8)", "b8baed2c": "calcTradeFeeMulti(uint256[],uint256[])", +"b8baf9db": "addPath(string,address[])", +"b8bb0001": "giveaway_count()", +"b8bb217a": "infoStableSystem()", "b8bb372c": "APIHeaven()", "b8bb41dc": "setReceiver6()", +"b8bb5c42": "originationFee()", +"b8bbd0df": "Buy(bytes32,address,uint256,bool)", +"b8bc81dd": "vote(address,uint256,address)", +"b8bc8669": "NewDWeb(bytes32,string,string)", "b8bcaad5": "_randomPack(uint256)", +"b8bcab45": "getNumbers(uint256,address)", +"b8bcb3c9": "tokensForSaleCount(bool)", +"b8bcd1b7": "getBancorRatio(address,address,uint256)", "b8bce6d0": "dateEcoRelease12()", "b8bcf6c9": "ico2ndPrice()", "b8bd3dbb": "setMakerFee(uint256)", +"b8bd81e6": "renounceManagerFeeIncrease()", "b8bdd8dd": "close(bytes)", "b8bdf701": "initiateCreateSale(uint256,uint256,uint256,uint256)", "b8be73ed": "offchainUploaderAddress()", "b8beafd6": "buyVolumes(address,address)", +"b8bec6a0": "setStakingStatus(bool)", "b8bf029b": "list(address,uint256,uint256,uint256,uint256)", "b8bf0f1f": "getRemainingBlocksUntilPayoutk()", +"b8bf60f9": "transferMinterRole(address)", +"b8c01c60": "typhoonToken()", "b8c0517a": "splitStake(address,address,address,uint256)", +"b8c06c03": "getdeal(address)", +"b8c0a5b1": "MOCK_USD_ADDRESS()", +"b8c0ebdc": "ownersRescue(uint256)", +"b8c0f745": "disableReserveStableBorrowRate(address)", +"b8c18808": "CreateTokenCM(address)", "b8c26d0b": "ContractWithParams(address)", +"b8c2787f": "_updateInformations(string,string)", "b8c2a9e1": "getBidReports(uint256)", +"b8c2daa0": "getDataTotalNum()", +"b8c34d6c": "quoteX(address,address,uint256)", "b8c375b6": "WavesToken()", +"b8c40298": "dfd()", "b8c48f8c": "setInitialParent(int256,int256,int256)", "b8c508e5": "MOBOL()", "b8c52477": "_exchange(uint256,uint256)", +"b8c572db": "isethsent()", "b8c577ff": "setGrowth(uint32)", "b8c58128": "setList(uint256,uint256[])", +"b8c5f641": "pendingDdx(uint256,address)", "b8c65462": "preICOSaleStart()", +"b8c6a388": "depositEthRetryable(address,uint256,uint256,uint256)", "b8c6a67e": "maxPendingParticipants()", +"b8c6c949": "_loadSlots(uint256,uint256,uint256,uint256)", "b8c6d2e9": "BretCoin()", "b8c6f579": "setAuction(address)", +"b8c6fd84": "rescueFund(address)", "b8c766b8": "saleClosed()", "b8c78391": "releaseableBalanceOf(address)", "b8c7dea3": "stageCurrentSum(uint256)", "b8c7e354": "tryToCompleteProject()", "b8c86aa6": "getArraySettingResult()", "b8c87a06": "setStage3()", +"b8c89338": "getTx(uint256)", +"b8c89cde": "Cat4(address,uint256)", "b8c8fb73": "solve(uint256,uint256,uint256,uint256)", "b8c92537": "acceptBidForCollectible(uint256,uint256,uint256,int256)", "b8c9371d": "getPassOwner(bytes32)", +"b8c94cc1": "v2swapROTforMAGGOT(uint256)", "b8c963a6": "atxContract()", "b8c9c4d2": "burnResource(uint16,uint256)", +"b8c9d25c": "pancakePair()", "b8c9d365": "h()", "b8c9e4ed": "getStr()", "b8c9e694": "getRaceMutation(uint32)", +"b8ca2289": "renounceDJ()", +"b8ca6bfc": "getNetPositionNotional()", "b8cb243d": "escrowTransfer(uint256,address)", "b8cb40e0": "getDistributedTotal()", "b8cb65ee": "removeTokens(uint256)", +"b8cc19f1": "transferOneToMany(address[],uint256[])", +"b8cc2751": "isTimeLocked(address)", "b8cc3c12": "depositToSubRound(uint256)", +"b8cc76fb": "setFeeCollectionAddress(address)", +"b8cc9ce6": "transferGovernor(address)", +"b8ccaedd": "getBurn()", "b8ccbd17": "removePermission(bytes4)", +"b8ccc175": "updateLpReward(address,address)", "b8ccc682": "constructUrl(bytes32,uint256)", "b8ccf4c7": "sendPositiveWhuffies(address,string)", "b8cd0b94": "DoorLock()", "b8cd4a8e": "joinCarveUpTen(uint256)", "b8cd81ed": "raffleTokenReward()", "b8ce670d": "burn(address,uint256,address)", +"b8cebc79": "overthrowKing()", +"b8ceee50": "priceD()", "b8cf14e7": "updateStatusPlayer()", "b8cf2515": "currentFundrise()", +"b8cfb6ba": "twap_bounds()", +"b8cfbe1a": "lock(uint256,uint256,uint16)", +"b8cfc412": "ticketsLength()", "b8d00d4a": "requestErc20Transfer(address,address,uint256)", "b8d04f4e": "getReferrerAddress(address)", "b8d08db2": "releaseCount()", "b8d0cf4a": "setTokenPriceUSD(uint256)", "b8d117fc": "bonusEnds4()", "b8d1194c": "tokenGoal()", +"b8d1452f": "setWeth(address)", "b8d16dbc": "isLeapYear(uint256)", +"b8d19a3a": "mapBetter(uint256,uint8,uint256)", +"b8d29276": "setConfiguration(address,uint256)", "b8d2f523": "no_aff()", "b8d364bb": "allDistinct(address[5])", +"b8d36ab2": "tokenToETH(uint256,address)", "b8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", "b8d3d08a": "assertEq29(bytes29,bytes29)", "b8d400d2": "fromEthers(uint256)", "b8d415c9": "bntyMicrodollarPrice()", +"b8d454d8": "tokenRewardsSimple(address,address[],uint256[])", "b8d46c9c": "setOrUpdateRecord2(string,string,string,string,address,uint8,bytes32,bytes32)", +"b8d49366": "misoDev()", "b8d4b642": "startICODate()", "b8d4efb5": "validate_percent(uint8)", "b8d55a91": "CPLToken()", +"b8d5650c": "addMeta(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint256)", +"b8d57df2": "getEth2DaiPrice()", "b8d5b7f0": "maximumToken()", +"b8d5efee": "getAmountBAndloop(address)", +"b8d641a3": "tradingPairCutoffs(address,bytes20)", +"b8d65042": "userStakedAddress(address)", +"b8d6da3b": "getPathForETHtoToken()", +"b8d6f78b": "setTokenChanger(address)", "b8d73101": "expirationString()", "b8d73849": "LogTokenDeposit(address,uint256,bytes)", "b8d74f4b": "getAcceptedTokenAmount(address)", +"b8d7b669": "getTokenAddress(address)", "b8d85d23": "adminSetAddress(address)", "b8d87069": "_removeContributor(uint256)", +"b8d8d679": "KTYburnAddress()", +"b8d91416": "transferToIEO(address,uint256)", "b8d94039": "writePosition(uint256,int256)", "b8d94b95": "buildDSNullMap()", "b8d9cbbe": "addMember(address,uint256,uint256,uint256)", +"b8d9ffd8": "rmETH()", +"b8da0c96": "setrebateOneRate(uint16,uint16)", +"b8da8795": "checkJackpot(uint256)", "b8daf1b1": "cancelChainlinkRequest(bytes32)", +"b8daf533": "propose(address[],uint256[],string[],bytes[],string,bool[2])", +"b8dbb58f": "withDramMoneyTo(address)", "b8dbf876": "transferFromOwner(address,address,uint256)", +"b8dc113c": "fixUnits()", +"b8dc491b": "sweep(address,address)", "b8dd3c55": "confirmSettingsChange(uint256)", "b8dd7a5b": "numberOfWagersToMinimumTimeout()", +"b8dda9c7": "map(uint256)", "b8ddc4df": "HPA_TokenERC20(uint256,string,string)", "b8ddef1a": "IdeaCoin()", "b8de3843": "allAmountRaised()", +"b8de6e1f": "InitialPerxPrice()", +"b8de7c3f": "change_address(uint256,address)", "b8de85d8": "p_setBankOfEthAddress(address)", +"b8debfbf": "testGetAdopterAddressByPetId()", +"b8df0dea": "feeTokenAddress()", "b8df17f0": "verifySigner(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"b8df4b33": "forceExitPool(uint96,uint96[])", "b8df5ce3": "ownerInitialBalance()", "b8e010de": "set()", "b8e046d1": "MinexoDigital()", +"b8e04b1e": "updateBullOwner(address)", "b8e0d08d": "increaseHardCap(uint256)", +"b8e0e7c8": "getMaxGameLength()", +"b8e0eeb7": "getCurrentEtherIncentive()", "b8e0ffbe": "getPaymentsLength()", +"b8e19eb8": "createProposal(address,uint256,string,uint256,uint8,uint256,uint256,uint256,uint256,address)", +"b8e22c13": "swap2(address)", +"b8e27059": "setUBIBeneficiaryFactory(address)", +"b8e295b2": "eligibleUser(address)", +"b8e2cf8e": "getSeigniorageOraclePrice()", "b8e2cfb1": "getMinMaxInvest()", "b8e31ee7": "MithrilGauntlet()", +"b8e33fb2": "parentNFT()", "b8e381e5": "subscriptions()", "b8e3d8e8": "LOL()", "b8e3e6da": "participateCrowdsaleAll()", +"b8e40cdf": "totalPoolCHIPBackStop()", "b8e4189c": "updateHighestMiles_(uint256,address)", "b8e42041": "invalidateOrdersBefore(address)", "b8e44852": "chargeTokensForManagement()", +"b8e45ddf": "draw2()", +"b8e47bec": "confirmTransferRoot(bytes32,uint256,uint256)", +"b8e4d9c8": "buyZTokenUsingWei(address,uint256)", +"b8e559fb": "setStartStakeBonusDate(uint256)", +"b8e5f1ab": "setTransferManagerContract(address)", "b8e60467": "LRCMidTermHoldingContract(address,address)", +"b8e660c4": "addTimeToSeal(uint256)", +"b8e67060": "ConversionsEnable(bool)", "b8e6a433": "calcFactorReward(uint256)", +"b8e6c8b5": "ibcToken_()", +"b8e70f42": "setBlack(address)", +"b8e816fa": "referralData()", +"b8e91ea8": "LordMessage()", "b8e920de": "buyTicketTest2(bytes)", "b8e945fc": "setOwnerNick(uint256,string)", "b8e9a6f0": "addLockedAccount(uint8,address,uint256)", "b8e9ac71": "BICToken(uint256,string,string)", "b8e9c22e": "getRate(address,uint256,bool,uint256)", +"b8ea3c4c": "recoverData(address[])", +"b8ea4910": "newTokenBank(string,address,address[])", +"b8ea578e": "stakedContractStakers(address,uint256)", "b8eaffcc": "getnodeparam(address)", "b8eb115e": "increaseDuration(uint256)", "b8eb3546": "maxSell()", "b8eb993d": "PUBLIC_SALE_TOKEN_CAP()", +"b8ebc267": "finalizeLock()", "b8ebed78": "rightForInterest(uint256,bool)", +"b8ec0e2a": "btcParam()", +"b8ec18a8": "depositWallet(address)", "b8ec59e4": "changeColorOrange()", +"b8ec6568": "pack(address,uint16)", +"b8ec849d": "emitted(int256)", +"b8ec90cf": "uniLOCK()", "b8edcd1f": "isOwnerOfJob(address,uint256)", "b8eddde1": "paymentsOwed(address)", +"b8eef922": "Mode()", "b8ef04e7": "_getRandomNumber(uint256,uint256)", +"b8ef4a2f": "personalEmissions(uint8,address)", "b8ef5f4d": "nextGameSeedPercent()", "b8ef9fcc": "cardAddressExists(address)", +"b8eff62f": "tokenTimelockContracts(uint256)", +"b8f12891": "removeMarket(address,address)", +"b8f1a010": "ownerWithdrawal(uint256,uint256)", "b8f20cfd": "myBalances()", "b8f249e2": "testThrowsSaleWalletIncorrectSaleAddress()", "b8f2690d": "TestDividendFund()", +"b8f2716f": "addVersionToWhitelist(uint8)", "b8f28531": "notEqual(address,address,string)", "b8f2954d": "addData(bytes32[],bytes32,bytes32,bytes32,uint256,uint256,uint256,uint256)", "b8f2bbac": "modify_perms(bytes32,bytes32,int256)", +"b8f2e436": "setup(uint256,string)", +"b8f330bf": "updatePercentWin(uint256)", +"b8f3962f": "swapETHForExactAlpha(uint256,address,uint256)", "b8f3b75d": "buyWithAddress(address)", +"b8f469ad": "SetItemOption(address,uint256,uint256)", "b8f47481": "withdrawErc20ForAddress(address,address,uint256)", "b8f48d3d": "setMaxRoundSize(uint256)", +"b8f5010f": "AddLiquidityExternAmountIn(address,address,uint256,uint256,uint256)", +"b8f53126": "saveUser(address,uint256,string,string,string)", "b8f53f36": "maxPrivateSaleStage()", +"b8f59f5b": "goalHit()", "b8f5e56c": "DeClub(uint256,string,string)", +"b8f615ad": "setOtherReserveValuePerBlock(uint256)", "b8f6c219": "purchaseDatesToken(uint256)", "b8f6d3ef": "getNodalblockData(string)", "b8f6e7ff": "changeMarketStatus(uint8)", +"b8f6e841": "_totalDeposit()", "b8f71f26": "scheduleTransaction(uint256,address)", "b8f75c0b": "bountyFactory()", "b8f76562": "setWithdrawable(address)", "b8f77005": "getQueueLength()", "b8f78178": "createNameAndPoint(int256,bytes32,address)", +"b8f79288": "setFeePermill(uint32)", "b8f7a665": "isLive()", "b8f7f41e": "drpCrowdsaleRecordedBalance()", +"b8f82c85": "approvedAddress1()", +"b8f85c63": "myTotalContributionAmount()", +"b8f860c0": "getLogConfirmationCount(uint256)", "b8f929ad": "saleWhitelist()", +"b8fa1043": "boolToBytes(bool)", +"b8fa20ea": "addVersion(string,bytes4,address)", +"b8fa3736": "setResource(bytes32,address)", "b8fa7778": "for_votes()", +"b8fa82e0": "setBootstrapRevealDuration(uint256)", +"b8fb5d1b": "drmApprove(address,uint256,string)", "b8fbb72d": "COMMON_WITHDRAW_SUPPLY()", "b8fbb87d": "isAssociatedAddressFor(uint256,address,address)", "b8fbe499": "Cygnus()", +"b8fc2bc6": "UNOS()", "b8fc7bd0": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256,bytes32)", +"b8fcf782": "COOL_DOWN()", "b8fcf937": "myToken()", "b8fd1e10": "updateBalancesContract(address)", "b8fd1ffa": "addressToEtherOwed(address)", +"b8fd5cf2": "sell(address,address,uint256,uint256,uint256,uint256,uint256)", +"b8fd8e73": "rebaseStartTime()", "b8fde2a4": "dailyPercentAtNow()", "b8fe6f93": "triggerTransaction(uint256,uint256)", +"b8fe8d11": "getfusionInterval()", +"b8fefcbb": "cpayContract()", +"b8ff5e78": "pageEndingBlock(uint256)", "b8ffc962": "isMaxSupplyLocked()", +"b8ffca32": "virtualDefaultSlippageFee()", "b8ffd53f": "getStageStartTime(bytes32)", "b8ffd64b": "PowTokenBase()", "b9002e62": "delegatedFwd(address,bytes,uint256)", "b900a870": "getApprenticeChestPrice()", "b900da19": "calculateBonusPercentage(uint256)", +"b900f040": "considerTransfer(address,address,uint256)", "b9019437": "eitherHaveAttribute(address,address,bytes32)", +"b901d3c0": "rewardsTokens(address)", +"b901e0b8": "_supplyCap()", "b9022e44": "updatePresaleWhitelist(address[],bool)", +"b9023154": "DiceRoll(uint8,uint8,uint8,uint8,uint8)", +"b9023a30": "withdrawVig(uint256)", "b90291c3": "changeWebsite(string)", "b902c833": "switchfor()", +"b902ce8c": "addVote(uint256,address,address)", "b90306ad": "Burn(uint256)", +"b90325bc": "ERC20TokenAddress1()", +"b9035c17": "randomResultMap(uint256)", "b9037bc2": "unlockTokensForAddress(address)", "b903a2a5": "MultiTransfer(address[],uint256)", +"b903dfca": "InsufficientTakerTokenError(uint256,uint256)", "b904088e": "maximumInvestment()", +"b9041443": "enrollCandidate(uint256,string,uint256)", +"b9042378": "openLockETHGenerateDebtProvideLiquidityStake(address,address,address,address,address,address,bytes32,uint256,uint256,uint256[2])", "b9043235": "_create(uint256,address)", "b90436ba": "MBT()", +"b90440d2": "newTop(address,address)", +"b9045079": "_drawPool()", "b9045c00": "InvestCoin()", +"b90497e0": "imageURL()", "b904ef4a": "delUIntValue(bytes32)", +"b9056afa": "allowedTxTypes(address,address,uint256,uint256,bytes)", +"b90661f5": "declineTaskAndSendToRework(bytes32,address,uint32,string)", "b9068d9e": "distributeFunds(uint256,address,address,address)", "b906b7b7": "burnPercentage10m()", "b9078616": "executeTrade(address,address,uint256,uint256)", "b907996a": "Forwarder()", +"b90817f2": "rescueRewards(address)", +"b9083b29": "okfPerBlock()", "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])", +"b908ca7b": "getWheat(uint256)", +"b908dcc8": "takeProfitOnlyInDpt()", +"b9092752": "tokenSaleSTA(address)", "b9093fc6": "addIdentity(address)", +"b9094851": "moon()", +"b90948b7": "usersStablePools(address)", +"b9096502": "setIsSubGov(address,bool)", "b9098b33": "krs()", +"b909b68e": "soldiers(uint256)", +"b909cdf4": "setOriginalReferrerPercentage(uint256)", +"b90a185c": "flipPauseSwitch()", "b90a4df1": "ApushJoustUser(address,address)", "b90ae5a1": "registrarAuth()", "b90b0108": "iconcontract()", "b90b09c0": "random_bool(uint8)", "b90b1248": "extractTokenEth(uint256)", +"b90b41cf": "FORWARDER_HUB_OVERHEAD()", +"b90b4bd5": "setFSERandom(address)", "b90b9aea": "EOCToken(uint256,string,string)", +"b90b9d44": "registrarPessoa(address,string,string,string,uint256)", +"b90bc519": "getReward(uint256,uint256)", "b90c1dbb": "getCreationDate()", +"b90c4034": "test123()", +"b90c72ae": "safeGuardAllTokens(address)", "b90c8566": "Somplak()", "b90c86a9": "LogOraclizeCall(uint256,bytes32,string)", "b90c92e2": "FysicalToken()", +"b90ce7fb": "AgentHired(uint256,address,bool)", "b90cec6d": "AddOfficialApps(address)", +"b90d104d": "depositEther(address,uint256,bytes32)", +"b90d27a9": "buyBonus(uint256,uint256)", "b90d3d0c": "data(address)", "b90d86b9": "autoMatch()", "b90d89a0": "start_seller(address,address,uint32)", "b90da496": "getRankTitle(uint256)", "b90dcc58": "SAFEToken(uint256,string,string,uint8)", +"b90deb6d": "getLocalPercent()", "b90e6bd8": "userRound(address,uint256)", +"b90ec1d1": "setBlocksTilColor(uint256)", "b90f1af1": "icoEndUnix()", "b90f65a2": "canCancelBet()", +"b90fb49e": "approveInch(address)", +"b90fd480": "gatPercentage()", "b910378d": "getBI(bytes32)", "b91038c7": "participate(address)", "b9103e1f": "refundAction(bytes32)", +"b9103f0c": "myMessageToTheWorld()", +"b9104591": "Miles(uint256)", "b9106dd9": "setAllowAccess(address,bool)", "b91070e8": "processEmergencyFundReleaseFinished()", +"b910a014": "remove_trusted(uint64,address)", +"b910b664": "cancelOrder(bytes)", "b9119b87": "ChangeSwapperAddress(address)", "b911f2fb": "settleCandyGetx(uint256)", "b912950e": "buyItemRaffleTicket(uint256)", +"b912ba55": "last10Percent()", +"b912e430": "_decode_sol_bytes28(uint256,bytes)", +"b91351e1": "getSellRate(address,address,uint256)", "b91366b0": "upgradeReactor()", "b9138584": "Deedcoin()", +"b913ee4f": "REFERRAL_POINT_PERCENT(uint256)", "b9140422": "readMailByAdmin(uint256,bytes16,address)", "b9144c96": "TokenMinted(address,uint256)", "b9145944": "verifySig(address,bytes32,bytes)", "b914cf7c": "leve1(address)", "b914d908": "getBeneficiaryIndex(address)", "b9156830": "hasPriorDuplicate(string,uint256)", +"b9156efa": "removeExchangeOnBehalf(address)", "b9166178": "investorWallet(address)", "b916c5ff": "redeemCoupons(uint256,string)", "b916de59": "reset(address[])", "b916e5d0": "goldenTokenId()", "b916f8fd": "delistMon(uint64)", "b9172dec": "changeStage(uint8)", +"b9173082": "getContractMemo(uint256,address)", "b9174330": "gco(uint256,address)", +"b917b5a5": "startCommitReveal(uint256,uint256,uint256,uint256)", +"b9181611": "authorized(address)", "b9186d7d": "priceOf(uint256)", +"b9195072": "finishGovernanceChange()", "b919be66": "useMultipleItem(uint256,uint256,uint256,uint256,uint256)", +"b919c30e": "pickWinner(address,uint256,uint8)", +"b919ce1e": "createNewUser(address,string)", +"b91ac788": "pairs(uint256)", "b91aedab": "transferLocked(address,uint256[],uint256[])", +"b91af97c": "getEntireDebtAndColl(address)", "b91bb31c": "initLottery(uint256,uint256,uint256)", "b91bf310": "initialChargeFeePool(address)", "b91c771f": "replaceProduct(address,address,address,address)", +"b91cd96b": "yfrbPerBlock()", "b91d1aed": "createPassport(uint256,bytes32)", "b91d3ace": "addDev(address)", +"b91d3f95": "dailyProcessed()", "b91d4001": "releaseTime()", "b91d4a0f": "frontWindowAdjustmentRatio()", "b91db40c": "FINE()", "b91dee6c": "ResetUpdateState()", +"b91e1e22": "CreateDepositorAddressToDepositRecordMapping(address,uint256,uint256,uint256,uint256,uint256,bool)", "b91e3422": "premiumHold()", +"b91e3e03": "setUnits(uint256)", "b91e4087": "validAddresses(address)", +"b91e73e6": "EpochTime()", +"b91f39a4": "updateWallet(uint256,address)", +"b91f3f97": "unlockLP()", "b91fe64b": "getLastDepositDate()", "b9204d1c": "TeamVestTimeLimit()", "b9209e33": "isVerified(address)", +"b920ade2": "getUserAllocation(address)", "b920c799": "Insureum(uint256,uint256)", +"b920d0b4": "cashRef(address)", "b920ded9": "_detectInvestorGroup(uint256)", "b920ef71": "removeExtension(uint256)", "b9212662": "s13(bytes1)", +"b9213246": "LEVEL_LIMIT(uint256)", +"b9216a59": "harvestMetal(uint256)", "b921e163": "increaseSupply(uint256)", +"b921f6e3": "DOWNTIME_THRESHOLD_PART()", "b9223946": "endVote()", "b9224385": "LogResultWinner(uint256,address,uint256,uint256,bytes)", "b92289ef": "sendleftmoney(uint256,address)", +"b9229dbf": "disposit(address,uint256,uint256)", +"b922fccb": "sendSndAndTndTokens(address,address)", +"b92356f9": "recipeIdList(uint256)", "b9235d08": "FlippedCoin(address,uint256,int256)", "b923909d": "check_hash_exist_in_chain(string)", "b923b205": "setWhitelist()", "b9247673": "buyListing(bytes32,uint256)", +"b9248e98": "PauseSell()", +"b924d4ef": "SECPYEAR()", "b9256f7e": "newTickerQueryResult(string,bytes32)", +"b9258cb6": "LogReferralPayment(address,address,uint256)", "b925af47": "creatorsTotalBalance()", "b92620bd": "targetWallet()", +"b9265adb": "setPayoutAndThreshold(bool,uint256,address[],uint256[],uint256[],address[])", "b926bd06": "Prepurchased(address,uint256,uint256,uint128,uint256)", +"b92708d8": "methodIds()", "b9272a11": "_redeemAdoptedAxies(address,uint8,uint256)", "b927ef43": "validatorSetApplyBlock()", "b928024d": "tokensPerWeiBonus250()", +"b928cb4e": "_setTechnicalAddress(address)", "b9291296": "useMyOldName(string)", "b9292158": "getTimestamps(address)", +"b9293e33": "premiumCarsBought(uint256,uint256)", "b929709a": "getPOOL_edit_1()", +"b929840a": "decreaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "b92984f8": "TokenGame()", +"b92a0ea5": "outstandingvSPACEXE18()", +"b92a1115": "multisendErcFRUIT(address[])", "b92a3961": "currentRoundBudget()", "b92a56bf": "deathData_v10()", +"b92a8126": "b(uint256,uint256,uint256,uint256)", "b92ae87c": "isSubscribed(address)", +"b92b0ea5": "link(bytes32,bytes32,bytes32)", +"b92b264e": "call_internal_func()", "b92b9d6c": "replacePublisherRegistry(address)", +"b92bc313": "PreICOPrivateOpened()", +"b92c404f": "tradeBooks(address)", "b92cb5b8": "addBrick(uint256,string,string,uint256,string,bytes32[],uint256)", "b92cc8cf": "isExisting(uint256)", "b92cd8f1": "officalHolding()", "b92ce1a7": "createRandomCharacter()", +"b92ce257": "publishedRegister(uint256)", "b92d6c2f": "TWCToken()", "b92dd395": "setManagerPowerful(bool)", "b92ddee6": "setStartTimeIco(uint256,uint256)", +"b92e5353": "gusdMinimum()", +"b92e6396": "setMinTransferAmount(uint256)", "b92e9f9e": "reportWasCalled()", +"b92ebd5f": "setEnableTrading(bool)", "b92edfc6": "NumberOfAuctions()", +"b92ee988": "airdropFinish()", +"b92f05cc": "setDefaultUserCap(uint256)", "b92f1986": "IMDEXinvalidateOrdersBefore(address,uint256)", +"b92f6899": "switchPlan(uint256)", +"b9300c55": "lasthack(address)", "b9308d9e": "updateName(address,string)", +"b930908f": "BURN_ROLE()", +"b930926b": "tier2(uint256,uint256)", +"b930dd26": "deboardSystem(address,address)", +"b9312d17": "generateCreateData(address)", +"b9313a92": "AddAddress(uint256,address[],uint256[])", "b9318b0c": "_born(uint256,uint256)", "b931b484": "bountyTokensLeft()", "b931bec5": "setContractErc20Token(address,address)", +"b9322a50": "setStartProfitedGamesAllowed(bool)", "b9324db6": "upgradeCardShield(uint256)", +"b9330105": "_transferToFeeAddress(address,uint256)", "b9330829": "maxUint256()", +"b933ceac": "rewards(address,uint256)", "b935170b": "addShopOwner(string,string)", "b93529bc": "tokenTicketPrice()", +"b93563a1": "getCurrentClaimedAmount()", "b9358ba4": "isApper(address)", "b9359169": "GayPersonalAds()", +"b9362b96": "NewPrice(uint256,uint256)", "b9364835": "getCatOwner(uint256)", "b93651bb": "__initFuse()", "b9368721": "balancesRiskcoins()", +"b9371343": "bridgeSupply()", +"b937a695": "JUNIOR_MEMBERLIST_ADMIN1()", "b93806ab": "setWinningNumbers(uint256,string)", +"b9381a4a": "devClaimBal(address)", "b9381f3c": "checkCapsAndUpdate(uint256,uint256)", "b93833c3": "changeRewardAmount(uint256)", +"b93838ff": "updateChainMarketInfo(uint256,uint256,uint256,bool)", "b9384f12": "changeMinCapUSD(uint256)", "b938b469": "SetRewardMultiAD(uint256)", "b938bf42": "sendBounty(bytes32)", "b93983dd": "StoxSmartTokenSale(address,address,uint256)", "b939d43a": "ARISCOIN()", +"b939e9a7": "set_UniSwapSAIExchangeContractAddress(address)", +"b93a421f": "canUpdatePayout()", "b93a4408": "setMintFrequency(uint256)", "b93a50b0": "_setApprovalForAll(address,bool)", +"b93a89f7": "getDetails(uint256)", "b93ab165": "getCurrentInfo()", +"b93ac4f1": "totalWithdrawnByUser_E(address)", +"b93ac792": "init1(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b93ae92d": "parentReferral(address)", +"b93ba41a": "vSPYAssetCounterVaultE18(address)", "b93c109f": "totalInterests()", "b93c3de2": "getHistoryRoundList()", "b93c7d42": "sellDividendPercentCandy()", +"b93c965d": "UniverseGalaxyStore()", +"b93caf91": "mintAUTH1()", +"b93d9004": "levelCost(uint8)", +"b93d9911": "tradeMiningEndBlock()", "b93dab0b": "getBetCount()", "b93dc802": "setEth(uint128[2])", +"b93dd41d": "repayFYDai(bytes32,uint256,address,address,uint256)", "b93e0e39": "ROCK()", +"b93e70a4": "calculateBaseTokenValue(uint256)", +"b93ea6a1": "requireSellerApproval()", +"b93ea7ad": "addHook(bytes4,address)", "b93ea812": "subtract(int256,int256)", "b93eb763": "x(int256,int256)", "b93f9b0a": "getAddress(uint256)", "b93fd2bf": "createCustomAtom(uint64,uint8,uint8,uint8,uint128,uint128,uint32)", +"b940726a": "freezeUntil(address)", "b9408373": "USD_PER_ETH()", "b940db1a": "sellAllDolAtOnce()", "b9413c47": "totalReturnedCredit()", +"b9415d65": "lastMiners()", +"b941d3e0": "pool2()", "b9420310": "tokenSale()", "b942394d": "getPercent2(address)", +"b9424b35": "signalRandom()", "b94265b8": "addReferrer(address,address)", "b9429069": "isFarmer(address)", +"b942d60d": "cheap(uint256,uint256)", "b94371ec": "getWhitelistOwner()", +"b9443841": "unlockSuperLock()", "b9447f7e": "customBuyerForIndex(uint256)", "b944ef3c": "initialTraining()", "b94512c7": "BioCoin()", +"b94534b5": "removerEntidade(address)", "b9459b70": "getCurrentLuckyStonePrice()", "b9460d04": "updateTicketVault(uint256,uint256)", "b94669e5": "interfaceThawTokens(address,uint256)", +"b9467105": "passTokenAddress(address)", "b9468f7e": "bid(uint256,bool)", +"b946b44c": "removeDonation(address)", "b946c19c": "rankDataContract()", "b946fab1": "maxAmountPresale()", +"b9470a46": "withdrawLQTY()", "b9474959": "_isTokenOperator(address,uint256)", "b94761b4": "SetupAllowance(address,uint256)", "b94776de": "mintUnlockTime(address,uint256,uint256)", +"b9477b0e": "ceo2()", "b9478ade": "DylanCoin(uint256,string,string)", +"b94805a2": "publicsale()", +"b94819e0": "getElectricityToConsume()", "b948348c": "purchaseTicket(uint256)", "b94844dd": "AAAToken()", "b9484955": "getInvestorArray()", +"b94879f6": "withdrawStaking(address,uint256)", "b9488546": "ownersCount()", "b9499cd6": "Midwife()", "b949f2f3": "finishPVEBatch(uint32[])", +"b94a000f": "orders(uint256,uint256)", +"b94a5320": "minEffeciveXPT()", +"b94a58d8": "bye1()", +"b94a8bd0": "BtcTokenBoughtAddressChanged(address,address)", +"b94ae47e": "Deployed(uint256)", "b94b0a3a": "getFulfillment(uint256,uint256)", +"b94b2dda": "createBill(uint256,uint256,string,string,string,string,bytes8,bytes8)", +"b94b6c79": "updateSteamFee(uint8,uint32)", +"b94ba521": "claimNFTfee()", "b94bae91": "setUser(address[])", "b94bc7fe": "proofOfSalt(bytes32,uint8)", "b94c3451": "techBuff()", "b94cc52f": "mark(address,bytes32)", +"b94cd48d": "Auth(string,address)", +"b94d27a0": "WithdrawxDai(uint256)", +"b94db895": "totalPoolWhiteListed()", +"b94e2036": "buyTokenFeePoints()", "b94e3516": "TAKCoin()", +"b94e923b": "queryGlobalInvest()", "b94e962a": "allocateTickets(uint256)", +"b94eb7f2": "sorts(bytes32,bytes32,uint256)", "b94ee0fc": "Triunvirate(address[])", "b94f5a6e": "eventPirze(address,uint8)", +"b94f675b": "updateAccountLockType2(address,uint8)", "b94f969c": "investmentBTC()", "b94fa03f": "requiredSharesToBeBoardMember()", +"b94fac30": "yfte()", "b94fb4a3": "WaykiCoin()", "b94fdaab": "upload_group_key(uint256[4])", +"b94fdb8e": "vowFab()", +"b94fe917": "getLatestPrice(uint256)", "b950556a": "setThingValid(bytes32[],bool)", +"b95079d4": "_amendFee(uint256)", "b950ae2b": "changeTopWithdrawable(uint256)", "b950f0a0": "rateTier3()", +"b951883a": "setEthUsdPrice(uint256)", +"b951bd9a": "retargetThreshold()", +"b952390d": "multiaddress(uint8,address[],uint256[])", "b95254f6": "setAsLotteryRunner(address,bool)", +"b9529201": "modify(address,address)", "b952ab7b": "unclaimedTokensForInvestor(address)", +"b952bb30": "getTrainingLog(address)", "b9531df3": "lowTimeBonusLimit()", +"b95359a1": "SongVoteReceived(bytes32,uint256)", +"b95375bd": "migrateAccountEscrowBalances(address[],uint256[],uint256[])", +"b9539642": "contribute(bytes32,uint256)", "b953a9ac": "getDocumentProposalCount()", +"b953f413": "SaleReady()", +"b9541045": "initialize(uint256,uint256,uint256,uint256,address,address,uint256,address)", "b9541ad5": "resetReferee(address)", "b95459e4": "moduleRegistry()", "b95460f8": "open(address)", "b954ca70": "setcapbounus(uint256,uint256,uint256)", +"b9551d14": "removeAuctionTemplate(uint256)", "b95594e5": "lineOfPlayers(uint256)", "b9559685": "StateHolder()", "b955b95c": "getKindOfPackage(address)", +"b955bd4a": "setRemoveLiquidityRate(uint256)", "b955e60d": "roundData(uint256)", +"b956528f": "_assetRegistry()", "b956a8a6": "easyMineToken()", "b9570c01": "transferAndCall(address,uint256,bytes32)", +"b9571bb5": "excludeDexAccount(address)", +"b9571ddb": "totalPoolAmount(address)", +"b9571e84": "mintBatch(address,uint256[],uint256[],string[],bytes)", +"b95747a1": "Execute2TokenUniswap(uint256,address,address)", +"b95750b5": "setUserAccessed(address,bool)", "b957aeb6": "getUserReaction(uint256)", "b957b886": "stackOffset(uint256)", +"b957c6a4": "UpgradedToPremium(bytes32)", "b9582195": "SFXToken()", "b958893e": "XTVAirDropped()", "b9588adc": "getStageAttributes(uint8)", @@ -106066,120 +194105,222 @@ "b958abd5": "setA(string)", "b9592e92": "setGM(address)", "b9599f3a": "fetchUndistributedProfit()", +"b959a0e5": "getVideoGameItemDetails(uint256)", +"b95a23b7": "newPublicPool(string,address[],uint256[])", +"b95a33c1": "transferAndBurn(address,uint256)", "b95a4baf": "daysSinceLaunch()", "b95a8327": "marketGrapes()", "b95af889": "processTransferToICAPResult(address,bytes32,uint256,bool)", +"b95b63f8": "mintedTokenIds(uint256)", "b95bb4f8": "price(uint16)", +"b95bdf91": "redeem(uint16)", "b95c2740": "buy(address,bytes)", +"b95c3808": "ValidMembersCountOf(address)", "b95cbed6": "currentExpiryInterval()", +"b95cd4c2": "gamesLinkedToCryptoPointers(uint256,address)", "b95d2a53": "deedUri(uint256)", +"b95d7020": "IssueAndFreeze(address,uint256,uint256)", +"b95dbeb6": "destroyTournament()", +"b95ed06f": "priceOf(address)", +"b95edbf9": "commision()", +"b95f0079": "rewardsB(address)", "b95f2be8": "_releaseVouchers(address,uint256)", +"b95f8f60": "isFactoryFPGenerated(address)", +"b95faba0": "setcToken(uint256)", +"b95fcc25": "DEPOSIT_CONTRACT_REGISTRY()", +"b95ffaa8": "TransactionStarted(address,uint256)", +"b95ffbce": "addToRewardPool(uint256)", "b96095fd": "GEND1()", "b960a45f": "unpauseTrueUSD()", "b960a6d4": "ITTMultisig()", "b96144fd": "removeUsername()", "b9615878": "getHeader(bytes32)", "b961716b": "getActiveTier()", +"b9619715": "setDebaseBoolean(uint256)", +"b961a9be": "uniToBancorSwapArb(address)", "b961b1e0": "teamNamingIncome()", +"b961de44": "setBuilding(uint256[],string)", +"b9626d21": "verifyState(address)", "b96297b5": "killya()", "b962de9a": "ProsperaToken(uint256,string,uint8,string)", +"b962e034": "batchBurnFor(address[],uint256[])", +"b962ea45": "_getAreaOrCategoryBits(uint256)", "b9632689": "numFunders()", "b9635685": "JAJToken()", "b963e1d0": "getPurpouse()", "b964608d": "get_return_by_level(uint256)", "b9649e52": "getPlayerPotWinning(uint256,uint256,uint256)", +"b964b604": "GUMA()", +"b964d8c6": "getSharePercents(uint8)", "b96528fd": "pubAddress()", "b9653382": "firstPeriodEndDate()", +"b965696a": "setWallet_fraud(address)", "b965817d": "UBSCoin()", "b9659d4a": "sibling()", "b9668eb2": "settleUnclaimedPerTokenPayouts(address,address)", "b966f350": "tokenMintingEnabled()", "b96732d9": "TransferToSAToE(uint256)", +"b9674327": "BOARD_RESERVED(uint256)", "b9676e72": "SPTToken()", "b967a52e": "setContactInformation(string)", +"b9681ccc": "noteInfo(bytes32,bytes20,string)", "b968440a": "Finalized(uint256,uint256)", "b968486e": "isLottoStarted()", "b96890a1": "airdroptoken()", "b96891e5": "getAddressesSize()", "b9689cf3": "crowdsaleAirdropAddress()", "b968a53c": "getBurnAddresses()", +"b968b5a1": "approve_729(address,uint256)", +"b969b236": "claimtovote()", "b969d399": "getBattleCooldown(uint64)", +"b96a280a": "approve_738(address,uint256)", "b96a39bd": "createPlayer(string,uint256,uint256)", +"b96a8995": "upgradeMultipleContracts(bytes2[],address[])", "b96b8edf": "changeAirdropQty(uint256)", +"b96bc520": "setMaxTotal(address,uint256)", "b96bf2b5": "expressReloadNumSec(uint256,uint256,uint256[],uint256[])", "b96c0866": "completeOrder(string)", "b96c10ba": "_assign(address,address,address)", +"b96d2d35": "capacityLimit()", "b96d64fb": "start_quiz_game(string,string)", "b96dc22a": "enableLambo(uint256)", "b96dc96d": "delCertificate(string)", "b96e988b": "addressBilborough()", +"b96f24fa": "listOfAssets(address)", "b96f54d1": "fixedReverse(uint256[10])", "b96f8a39": "Voting()", "b970e3d0": "JATICO()", +"b9713003": "returnOtherCrypto(address,string)", "b971667c": "calculateEmissionTokens(uint256,uint256,uint256,uint256)", "b9717b23": "setOdd(uint256,uint256,uint256)", "b971a1f8": "VivekTestToken()", "b971b4e5": "setNotTransferable(bytes20)", +"b9721cda": "devadr()", +"b9724d63": "getExtCodeHash(address)", "b9727dc2": "getProjectClient(uint256)", "b9727f50": "saveRevenueShareDistribution(address,uint256)", "b972b967": "transferTokensToTeam(address,uint256,uint256)", +"b972cf81": "WhitelistedCornerstoneStatusChanged(address,bool)", +"b9734931": "buyByERC20(address,uint256)", "b97386d1": "reputationProblems(address,bytes32)", +"b97399f5": "pinger()", "b973b286": "Imteaz()", +"b973b2e0": "_emit(bytes,uint256)", +"b973d7bc": "SetWhiteList_Address(address)", +"b974445a": "selectAll(uint256,uint256,uint256)", "b974b0a3": "allData()", "b974ddcb": "getAnimalById(uint256)", "b9750acf": "selfDestroy()", "b97585d3": "addOldNickname(address,string)", "b975ce23": "crownName()", "b975d9c7": "setCCH_edit_32(string)", +"b975e33d": "clientId(address)", +"b976025e": "GuardianAuctionCreate(uint256,uint256,uint256,uint256,uint256,uint256)", +"b9762776": "usersWithdrawShardToken(uint256)", +"b9763c16": "_mul(int256,int256)", +"b9766002": "AirDropEnd()", "b976b35b": "uponTransfer(address,address,uint256)", "b976f464": "authoriseAccount(address)", +"b9772fd7": "heroIdToMonster(uint256)", "b9774f7b": "confirmations(uint256)", "b9776301": "testTrustedTransferFrom()", +"b977eddf": "SetPoolPrice(uint256)", +"b9787f26": "uplineAmount(uint8)", "b9789d7d": "ChangeDeadLine(uint256,uint256,string)", +"b978b0ff": "approve_296(address,uint256)", +"b978e0be": "mkrRpow(uint256,uint256,uint256)", +"b978fc87": "depositAndLockCollateral(address,address,uint256)", +"b97907a8": "strategyfee()", +"b97912ff": "getReceiptInfo(uint256)", +"b9793dca": "Sponsors(address)", +"b9799682": "alright(bytes32,uint256)", +"b97a2319": "implementationAddress()", +"b97a5a0a": "registerFree(string,string,string)", "b97a6c12": "redeemForReportingParticipant()", "b97a7d24": "getGoal()", +"b97ac91e": "lpSlavePools(uint256)", +"b97aca41": "sfi_address()", "b97af2c8": "setTokenDecimals(uint256)", "b97b451e": "increaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"b97b55ce": "defaultNetworkTokenMintingLimit()", "b97b9df8": "AUACoin()", +"b97c7734": "maptest(address,address,uint256)", +"b97c9c1d": "printBroker()", "b97cab2c": "convert2Peony(uint256)", "b97ce4d3": "distributionteamFinished()", "b97d3627": "TosToken()", +"b97d62ca": "sendMoneyToAddr(address,uint256)", +"b97d7895": "existingType(uint32)", +"b97dbf59": "setDAI(address)", +"b97dd9e2": "getCurrentEpoch()", "b97df70a": "setTokenReward(address,address)", "b97e3b43": "setMintAgent(address,address,bool)", +"b97e8b9e": "incentive(uint256)", +"b97f58c1": "setRetailerAgent(address,address)", "b97fd9e1": "releaseWallet(address)", +"b9803bd1": "seed_protectedLiquidities(uint256[],address[],address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"b980441b": "xTokenAddress(uint256)", "b980a312": "PtestTokenICO(uint256,uint256,address,address,address,uint256,uint256,uint256,uint256)", "b980b10d": "masterCardEscrow()", +"b980d3df": "getDydxAddress()", "b9812d9a": "getNextReportingWindow()", "b981655f": "DebtManager()", "b9818be1": "feeOwner()", +"b981a11f": "pendingSkull(uint256,address)", +"b981bab9": "ERR_NOT_NEW_BEST()", +"b982dae7": "TransferDisabled(address)", "b982e5c1": "testAddPending()", +"b98358c0": "startProxy(address)", +"b983dfa6": "IMP17()", +"b984115e": "getPoolViewByAddress(address)", "b9843c7c": "setUnavailable()", +"b9843fd6": "updateStakeTarget(uint256)", "b9844d6f": "updateSelfDropStageState(uint256,uint256,uint256,uint256,uint256,uint256)", +"b9844d8d": "_nonces(address)", +"b9849ac6": "sendFundsFromReceiverTo(address,address,uint256,address)", +"b984ac64": "extendLSWEndTime(uint256)", "b9855c76": "restartPeriod()", "b9858a28": "addContract(address,address)", "b9861011": "setUniqueBlindedProposal(uint256,bytes32)", +"b9863a44": "getUserWhitelistStatus(address)", +"b98686b6": "setMinHealth(uint256)", +"b9868cbd": "wafflePost(string,uint256,uint256)", +"b986a261": "getCalcuBalance()", "b986b611": "withdrawAddressUpdate(address)", "b986bb67": "STATUS_DESTROYED()", "b9871548": "set_token_address(address,string)", "b9879450": "CREATOR_TOKEN()", "b987ae02": "fundWithdrawal(uint256)", "b987bdac": "InterCrypto()", +"b987cd76": "COMMON_PURPOSE_AMOUNT()", +"b987d09a": "orderIDs(bytes32)", +"b987eb46": "getCardPrice(uint256,uint256,uint256)", "b987f688": "gettotalCards()", "b9883b3f": "main(uint16,uint8,int256)", +"b9888472": "ethReceiver()", "b988899f": "setBenificiary(address)", +"b988aba0": "setIfTurnout(bool)", "b988c505": "newProposal(address,uint256,string,bytes,uint64)", "b9890a74": "initBonuses(string)", +"b989604f": "_wrapfeedivisor()", "b989915c": "lastUsdPerEthChangeDate()", "b989c7ee": "returnInt32(int32)", "b989ffa7": "getArtist(bytes32)", +"b98a2415": "read3BestTeam()", "b98a5418": "assignedAmountToAngelInvestment()", +"b98aa312": "getTraderOperatorsContract()", "b98aacf0": "retreiveHrt(string)", +"b98abf56": "lottery_id()", "b98ac0c5": "setUserAlloc(address,uint256,uint256)", +"b98aecdf": "startSalePUMPS(uint256,uint256,uint256,uint256,uint256)", "b98b5f9c": "listPrycto1()", +"b98b677f": "updateSwapRouter(address)", "b98bafde": "Redeemed(uint32,address)", "b98bcf16": "getPubKeyByHash(bytes28)", "b98c90c2": "ECOS(address)", "b98cb57e": "rinkeby()", +"b98d1fe2": "uniswap_factory()", +"b98d3411": "autoToken()", "b98d49a5": "getSponsorshipCount(address)", "b98dbb50": "updateprojectDuration(address,uint256)", "b98de7c7": "setLive()", @@ -106194,81 +194335,155 @@ "b9902eef": "Rate8()", "b9908cbb": "maximalIndividualContribution()", "b9910c5f": "JixoCoin(uint256,string,string)", +"b99115b9": "addSubTreePlan(uint256,bytes16,uint128,uint8,bool,bool,uint8,bool)", "b991357c": "isAdvisorsTokensThirdReleased()", "b99152d0": "balanceOfToken(address)", "b991bc14": "direct_refunds(address[],uint256[])", "b991f607": "Bank(uint256,uint256)", +"b9921848": "MARKET_OP()", +"b9922640": "coinName(address)", +"b9925f19": "optionsProvider()", "b9926d1d": "limitBuy(uint256)", +"b9927a9c": "swapETH2BSC(address,uint256)", "b992812e": "hasIssued(address)", +"b992c9f6": "getDuongChay(uint256)", "b9931d30": "getPlayerToken(uint32)", +"b99328c5": "unbindToken(bytes32,address)", "b9934b9e": "ownerResumeContract()", "b99371a0": "GetPrestigeInfo(uint256)", +"b9938f7f": "IPOnextAddressPointer(uint256)", "b993a53e": "preSaleBalancesOf(address)", "b993a91f": "migrationAccountCounter()", "b993c871": "NGToken()", +"b9947eb0": "underlying_coins(uint256)", +"b994a3a4": "Document_root()", +"b99503b7": "oxPerBlock()", +"b9951e03": "RemovedMasternode(address,uint256)", +"b9955e39": "add(uint256,address,uint256)", "b995b014": "_exploreUsingEmont(address,uint256,uint256,uint256)", +"b995c648": "onInitialize(uint256,uint256,uint256)", "b995ce4d": "returnTokenAddress(uint256)", "b99613cb": "getPlayRecordNoTurnData(address,address)", +"b996b52b": "initialLTVE10()", +"b996c248": "participant_keys(uint256)", +"b9970171": "agreementMap(bytes32)", "b99798e8": "accFounder()", +"b997a71e": "terminateService(uint256)", +"b997a7b9": "lv(uint256)", "b9980306": "processARvRevForecast()", +"b9981364": "newOrganization(address)", +"b9981608": "soldTokensUnlockTime()", "b9981a67": "firstBalanceOf(address)", +"b9982672": "setAvailableTokenManually(uint256,uint256)", +"b9990ede": "ethBor()", "b999279e": "VerifyProofAndUpdateState(uint256[],uint256[],uint256[],uint256[],bytes)", +"b9993f6d": "beyondTokenValueInDollar()", "b9997819": "ownerSetHouseEdge(uint16)", +"b9998a24": "setForwarder(address)", "b999abbc": "Spole()", +"b999d180": "set_pair(address)", +"b99a0f73": "_setProbability(uint256[6])", "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)", +"b99c7683": "unVerifyUser(address)", +"b99c9157": "getParentBlockInterval()", +"b99ce1ff": "perpetualRenderer(uint256,uint256,uint256[2],int256[12],bool[3])", +"b99d53e7": "BuyTicket(uint256,address,bytes,uint256,uint256)", +"b99d6b04": "redeemDepositedFXB(bytes32)", +"b99ddbf5": "totalUsdtAmountOfPubIEO()", "b99de11e": "endThirdWeek()", "b99dfe18": "getPackage(uint256)", +"b99e519d": "getInfoUpdateCoreParameters(bytes32)", +"b99e6571": "weeklyStart()", "b99ec99a": "AuditorRegistryReplaced(address,address)", "b99eccc1": "SplitWeighted(uint256)", +"b99ee501": "performanceInitiatorFee()", "b99f1d02": "claimClusters()", "b99f247d": "ERGCOIN()", "b99f48d5": "promisedPop()", "b99f6073": "tokenPurchased()", +"b99fa5f3": "previousEpochTimestamp()", +"b99fa9fc": "rewardPerSlot()", "b9a0157e": "setArrayIndexValue(bytes32,uint256,bytes32)", +"b9a04cdd": "externalTokenTransfer(address,address,uint256,address)", "b9a0a708": "testChargesAmountApproved()", "b9a0c1bb": "_approveRobot(uint256,address)", +"b9a0f93a": "toWeiPrice(uint256)", "b9a1bd86": "registerPrivateContribution(address,uint256)", "b9a2131b": "ContractTST()", "b9a29d42": "getKevin()", "b9a2de3a": "endAuction(uint256)", "b9a30afb": "HelloGoldSale(address,address,address,address)", +"b9a33094": "ADMIN_setPresaleLimit(uint256)", +"b9a3b1f9": "ShowwLPaddress()", +"b9a3c84c": "finder()", +"b9a3daf9": "withdrawethall()", "b9a41409": "gcpa(uint256)", "b9a45aac": "whitelistAddress(address,bool)", +"b9a49869": "getSynthSuspensions(bytes32[])", "b9a4a755": "afterApproveAction(uint256)", +"b9a4b344": "_getDevUtilsAddress()", "b9a4defe": "changeTargetAddress(address)", +"b9a4e0b8": "trustRo()", +"b9a510a8": "prepareCurrency(address,address,uint256)", "b9a52203": "saveRN(uint256)", "b9a527b4": "book(address,address,uint256,uint256)", "b9a54062": "getMaximumWritesPerStep()", "b9a59b83": "isEngineerContract()", "b9a5a2d9": "numberOfApprovedSteaks()", "b9a5e073": "contracteesSize()", +"b9a5ef2a": "LevDown()", "b9a60038": "totalTransactions()", +"b9a61961": "__acceptAdmin()", +"b9a6226b": "createTestPair()", +"b9a67749": "pendingKimbap(uint256,address)", "b9a68300": "bountyOnlineWallet()", "b9a6e94c": "buyTile(int32,int32)", "b9a6f7b0": "BTHB()", +"b9a72914": "NewCustomer(address,address)", "b9a804fb": "ArrowTestCoin()", +"b9a8248f": "setMintCoefficient(uint256,uint256,uint256)", "b9a82f80": "buyPepe(uint256)", +"b9a85ab4": "TokenPurchased(uint256,address,address,uint256,uint256,uint256)", +"b9a8bb0f": "setOracledPerBlock(uint256)", +"b9a8e9d3": "uPremia()", "b9a904f9": "testUnauthorizedSetBetaPackage()", +"b9aa4965": "deletedAdmin(address)", "b9aa8236": "getMaxAgonId()", "b9aaaeee": "populateTierTokens()", +"b9aae352": "distributeLoss(string)", +"b9aba48d": "punkAddress()", +"b9abac74": "setTodo(string)", "b9ac0524": "icoEtherReceivedTotal()", "b9ac38aa": "test_newProposalAndVoting()", +"b9ac6eb1": "pendingButterfly(uint256,address)", "b9aceb63": "BuyTicketUseVault(address,uint256)", "b9ad36b9": "prophecise(bytes32)", +"b9ad6083": "scheduleTokens(uint256)", "b9ad771c": "registerHWCWit(string)", +"b9ad7ea9": "bonds(bytes32)", +"b9ade646": "trade(address,uint256,address,address,uint256,uint256,uint256,uint256,bytes32)", +"b9ade768": "getTotalNoVotes(address)", +"b9ae1a10": "WithdrawReferrals(address,uint256)", "b9ae4bda": "associatedPubkeys(uint256)", "b9ae7364": "pauseAuction()", +"b9af132c": "patronageDenominator()", "b9af809e": "getMinEthersInvestment()", "b9afd6e1": "returnChildAddressForParent(address)", +"b9b02d6e": "BlacklistedAddressRemoved(address)", +"b9b07871": "voteOnBehalfOfMany(address[],uint256,bool)", +"b9b092c8": "balanceOf(address,string)", +"b9b13d89": "callerIsUnbankOwner()", "b9b162c3": "calculateTop5HeroesPower(address,address,uint256)", +"b9b178dc": "setPaxAddress(address)", "b9b1c90c": "moveToSafetyWallet()", "b9b237c2": "tokenFunded()", "b9b26bd2": "registerBroker()", +"b9b2735c": "calculateTax()", "b9b2a331": "setAccPrice(uint256)", "b9b2a890": "rewardDaily(uint32,uint32)", "b9b2b5cd": "totalFeeCollected()", @@ -106276,176 +194491,334 @@ "b9b42602": "ethRefunds(address)", "b9b43faa": "createInt256s(bytes32[],int256[])", "b9b466ab": "myLoveBlockCount()", +"b9b4aa72": "getGenesisDailyAPY()", +"b9b4c463": "reserves1()", "b9b6990b": "getUserBetsInARazInstance(uint256,uint256)", +"b9b69bac": "idleSupplyState(address)", +"b9b6ac05": "depositTokenMultipleEpochs(address,uint256[],uint256[])", "b9b6c2d4": "getAmountOwed(bytes32,address)", +"b9b6e637": "getSupplyWeight(address)", +"b9b6e802": "setup_minWei(uint256)", +"b9b6fb2a": "isPausedCalculator(address)", "b9b7238b": "addInvestorBonusInPercent(address,uint8)", "b9b7569b": "isGameLogicContract()", +"b9b75ebc": "setBouncer(address,bool)", "b9b7b68c": "limitbreak_contrib()", "b9b842e5": "setCandyLand(address)", +"b9b84c9b": "InvalidAccount(address,bytes)", +"b9b873f6": "signer_number()", "b9b8af0b": "halted()", "b9b8c246": "invest(address,uint256)", +"b9b8cc96": "activateEmergencyWithdrawal(address)", "b9b8e25d": "getRemainingTokensToSell()", "b9b94997": "repossessBooking(address,uint256)", +"b9b9525c": "cennzContract()", "b9ba2926": "receivedCollateral()", +"b9ba7e5a": "adminConduct(string,string,string,string,string)", +"b9baaff4": "verifyEtherMintSwap(uint256)", "b9bac5f8": "lockedUntilTime()", +"b9bcabe9": "collectFromLocked(address[],uint256[],address)", "b9bcf81f": "getTlength10()", +"b9bd4388": "EthNow()", "b9bd4f76": "newSale(uint256,uint256,uint8,uint256)", "b9bda244": "sumICO()", "b9bdbbbb": "FILMToken(uint256,string,uint8,string)", +"b9be101c": "mediaUrl()", +"b9be9565": "getEcosystemAvailable()", "b9beadae": "testCantBuyTokensInEndedSale()", "b9beeb8d": "DatingCoinToken()", "b9bf068e": "getUncompensatedContributors(uint256,uint256)", +"b9bf52fa": "creatorWhitelist(uint256)", +"b9bfb296": "distributedTotalAmountTillNow_E(address)", "b9c009f0": "checkContributorBalance(address)", "b9c0d227": "defaultTokensPerWei()", "b9c105cf": "getTaskRewardAndStatus(bytes32)", "b9c1a60a": "econReserveAllocation()", +"b9c1a6e6": "userDivWithdraw()", +"b9c25cae": "AllowReceiveGenesisTransfers()", +"b9c29221": "JustTokenAddress()", +"b9c2b915": "seedSystemBalances(address[],uint256[],uint256[],address[],address[],uint256[],uint256[])", "b9c2c6fb": "removeMember(bytes32)", "b9c2ee82": "upgradeController(address)", "b9c3395f": "getTokenAmountBonus(uint256)", "b9c3515c": "votingActive(bytes32)", +"b9c35e0a": "assetsToPrices(address)", +"b9c36209": "setThreshold(uint256,uint256)", "b9c390aa": "SaferEcRecover()", "b9c3a818": "TEAM_SUPPLY()", +"b9c3b9f3": "accept_prop()", +"b9c3c38d": "foreclosureTimePatron(address)", +"b9c439f9": "totalForAccrual(address,uint256)", "b9c4d0a7": "fundOrder(uint256)", +"b9c4d9fb": "getFeeRecipients(uint256)", +"b9c4eb43": "addSubAdmin(address)", "b9c53d04": "SECCoin()", +"b9c5416d": "showLockTimes(address)", +"b9c54f78": "vvv()", "b9c5be85": "allocatePurchase(address,uint256,uint256)", "b9c5eb90": "updateVoucherMthRate(uint256)", +"b9c61d99": "strongFryReserve()", +"b9c797f6": "allBeneficiaries()", "b9c7ce49": "totalIssuingCollateral()", +"b9c7f52e": "getWithdraws(address)", "b9c81f1d": "Membership()", "b9c8464d": "extractFees(uint256)", "b9c8559d": "RocketPoolReserveFund(address)", +"b9c87482": "setLpRewardFee(uint256)", +"b9c8794a": "currentSlotReward()", "b9c89ff7": "getTargetRepMarketCapDivisor()", +"b9c8db99": "ShareTheLove()", +"b9c935bb": "approve_298(address,uint256)", "b9c97a44": "UnlockAccount(address)", "b9c99e5e": "DepositUnfrozen(address,uint256)", +"b9ca67c0": "MyreferredRevenue(address)", "b9caebf4": "del(address)", +"b9caf852": "EtherWithdrawed(uint256)", +"b9cb2e1e": "multiTransferERC20(address,address[],uint256[],uint256,uint256,bytes32[])", "b9cb385d": "invitedInit(address,address)", +"b9cb4bc1": "giftbase()", "b9cb5b5f": "HatchEggs()", "b9cbbb62": "testInequalityAddr()", +"b9cbd8c4": "minTimeBetweenWithdrawals()", "b9cc8b48": "oraclizeOn()", +"b9cc9a8b": "pharmacistCount()", "b9ccaed2": "getMesas()", +"b9cccee3": "isSupporter(address)", +"b9cce328": "expiries(uint256)", "b9cce72c": "addFlag(bool[2])", +"b9cd8f78": "getPackCardData(uint256,uint256)", "b9ce10d5": "Fyle(string,string,uint8,uint256)", "b9ce795f": "createVoter(string)", +"b9ce896b": "disputeFee()", +"b9ceb4e4": "withdrawnTime(address)", "b9ceda19": "updateTokenNameAndSymbol(string,string)", "b9cf01a1": "Cardiology()", +"b9cf5005": "getTokenReserves()", "b9cf9d49": "getNextOrderUser(address,address,uint256,address)", +"b9d02df4": "users(uint256,address)", +"b9d04fe0": "callNonPayableProtocol(address[],uint256[],bytes,bytes32[])", "b9d0a638": "Bro()", +"b9d0ba9a": "computeContract()", "b9d1d49b": "minimumBalance()", +"b9d1e5aa": "test_invalid()", "b9d1ed4a": "ethDeposits(address)", "b9d1fd60": "fundingMaxAmount(address)", +"b9d208a9": "aaTotaltestTrackerReturn()", +"b9d2b803": "buyStake(uint256)", "b9d2fa35": "disableFundingWallets(address)", "b9d32a1f": "tokenTransferOwnership(address,address,address,address)", +"b9d32b7e": "numSaleConfirmations()", "b9d3514d": "addEventToUser(address)", "b9d36743": "priceToMint(uint256)", +"b9d3fb2e": "getPositionOf(uint256)", "b9d414bd": "setSecurityTokensWallet(address)", +"b9d44310": "toggleDiscountChi(bool)", +"b9d44d01": "DiceLargeBet(bytes32,uint16,uint256,uint256,uint256,uint256)", "b9d47fff": "mySubdividends()", +"b9d4f9ec": "testBuyerCanCancelPurchase()", "b9d5205c": "SASH()", "b9d54f6f": "setMinPurchaseLimit(uint256)", +"b9d583f5": "_0__hello_SPAM()", +"b9d5a065": "setRule(address,address,uint256,uint256,uint256)", +"b9d5acf2": "mintBPro(uint256,int256)", "b9d5d7fe": "resetUserPicture(string)", "b9d6257d": "DeletePool(string)", "b9d677f9": "_buyProp(uint256,uint256,uint256)", "b9d69a30": "sendTo(address,address,uint256,bytes)", +"b9d6ad67": "blockPerYear()", +"b9d6f3b5": "getPointList()", +"b9d71cdc": "TwelveHourToken()", "b9d723eb": "startNewPeriod()", +"b9d774df": "depositInfo(address,uint256)", +"b9d7f5d9": "mStoredAmount()", "b9d7fdf4": "bonusTierSize()", "b9d8350e": "getWeiFromUsdCents(uint256)", +"b9d83bb6": "swapship()", +"b9d8a209": "elementalThreshold()", "b9d92de8": "calculate(uint256)", +"b9d95ee2": "swapExactAlphaToETH(uint256,uint256,address,uint256)", +"b9d97ca3": "enterToken()", "b9da4033": "_randBySeed(uint256)", "b9da706e": "LandSale(address,uint256,uint256,uint256)", "b9da8360": "_setBattleContract(address,address)", +"b9db102a": "lastPayout()", "b9db15b4": "getProduct(uint256)", "b9db9a6d": "resetAllApproval()", +"b9dc1713": "getPeriodReturnPercentages()", "b9dc25c5": "approvedUser()", +"b9dccd55": "update(uint256,bytes32,bytes32)", +"b9dcdf01": "lastProduceBlock()", +"b9dda125": "hasCorrectFee()", "b9dda7b8": "_ERC20Contract()", +"b9ddc05d": "withdrawETHAmount(uint256)", "b9de1c41": "buyRaffleTicket(uint256)", "b9deb729": "isTransferEnable()", "b9dedc6a": "shareTransfer(address,address,uint256)", +"b9df0234": "matchRequestAsLender(uint256)", +"b9df1b95": "addLiquidityToBakerySwapDELTAxWBNBPair()", "b9df2d22": "isGameRunning()", "b9df819f": "receiveFunds(address,address,uint256)", "b9dfaf3a": "setPriceChannelMaxSize(uint256)", "b9e01aeb": "buySpaceshipUpgrade(uint256,uint16,uint8)", "b9e04eea": "withdrawStuckEtherOfAmount(address,uint256)", +"b9e0db35": "locations(uint256)", "b9e15a67": "coinAgeForAddress(address,address)", "b9e16b65": "issueDescription()", "b9e1aa03": "deposit(address,bytes32)", "b9e205ae": "updateExchangeRate(uint256)", +"b9e21004": "setSntToken(address)", +"b9e24e16": "_getCycle()", "b9e290f9": "setValue(bytes32,address)", "b9e328de": "GIDIDAX()", +"b9e35db0": "getClaimedRewards(address)", +"b9e37489": "univ2Router2()", "b9e3a8dd": "isCompositionOnlyWithBaseLayers()", +"b9e3adaa": "ZapInSingleSided(address,address,address,uint256,address,address,bytes)", "b9e3e2db": "releaseDate()", "b9e3ee01": "addNodeToWhitelist(address)", "b9e448df": "OpenFund(bytes32,string)", "b9e4d098": "setNewEndDate(uint256)", +"b9e4ebca": "minterCaps(address)", +"b9e53c8f": "getDebtScore(address,address,uint256)", +"b9e571ad": "withdrawGeo()", "b9e58ab0": "setPropertyOwnerSalePricePrivateModeFlag(uint16,address,uint256,bool,uint8)", "b9e5e2c4": "ratePerWeiInPreICO()", +"b9e5fdef": "origin_block()", "b9e6152b": "process(address)", +"b9e693c1": "LogWinChoice(uint256,uint256)", "b9e6ac68": "TabTradersToken(address,address)", "b9e6edcf": "s15(bytes1)", "b9e6f1d9": "get_amount()", "b9e70ed6": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", "b9e722cd": "caddress()", +"b9e73e7f": "setKOTHBonusPercentage(uint256)", "b9e77649": "OVISBOOKED_TOKENS()", +"b9e7a439": "clearData()", "b9e7afd1": "__setSecretaryGeneral(address)", "b9e7c061": "tempGetDataToCheck(uint256,uint256)", +"b9e7df1c": "walletTokenBalance(address,address)", +"b9e7e17b": "viewPubPrice()", "b9e7e2f9": "Beercoin()", +"b9e8302a": "icoshareprice()", "b9e8574f": "getReservedDestinationInfo(address)", "b9e95382": "store(uint32)", +"b9e9823f": "submitEvidence(uint256,bytes,bool)", "b9e99231": "EEM()", +"b9e9aec1": "beneficiaryAddr()", +"b9e9c8b4": "DISPUTE_THRESHOLD()", "b9e9d1aa": "futureOwner()", "b9e9e441": "exchangeTokensByAddress(uint256,address,address)", +"b9ea420b": "strafiGold()", +"b9ea9aa8": "manageTransactionsbalance()", "b9eb04f3": "hashPosition(uint32,int64,bytes16)", "b9eb5511": "setPI_edit_5(string)", +"b9ec7d74": "updateAllPools()", "b9eca0c8": "gID_()", +"b9ecb781": "raisup()", +"b9ece431": "sendwithhex()", "b9ed6df8": "withdrawEtherFromcontract(uint256)", "b9ed93e9": "setWaitTimeBlocks(uint256)", +"b9eda951": "gs(uint256,uint256)", +"b9edb1af": "user2()", "b9edf911": "approveBulk(address[],uint256[])", +"b9ee1e05": "startAward()", +"b9ef0830": "numLocks(address)", "b9ef7835": "infect(bytes32)", +"b9f0ac57": "_buyPrice()", +"b9f0bf66": "amount(address)", "b9f10278": "EtherPredictx()", "b9f14557": "unban(address)", "b9f1fb62": "transferPrivateReservedUFT(address,uint256)", "b9f2086b": "BlockWar()", +"b9f24aff": "proposeAction(address,address,address,uint256,bytes,string)", "b9f24e44": "freezeGame(uint256)", "b9f256cd": "newProposalInEther(address,uint256,string,bytes)", "b9f28076": "historyIdx(address)", "b9f2d592": "maxAllowedReservingPercentage()", +"b9f2e1f2": "reinvestInCarrots(uint8,uint256,uint256,bytes32)", "b9f308f2": "getEtherForTokens(uint256)", "b9f37c86": "Registrar()", +"b9f412b0": "updateIndex()", "b9f4657d": "approve_tx(address,bytes)", "b9f48cad": "performAction(address,bytes,uint256)", "b9f4b5c2": "refundStart()", +"b9f4d4e2": "last_t_index()", +"b9f4ff55": "canLiquidate(address)", +"b9f5be41": "depositUnderlying(uint256)", "b9f615d7": "bankRollInvest()", +"b9f66e82": "setDollarPriceToBuyBack(uint256)", "b9f696d5": "setNote(uint256,bytes32,string)", "b9f71934": "promotionsOfClaimant(address)", +"b9f79451": "reputation(address)", "b9f7d242": "restoreAllPersistentTokens(uint256)", +"b9f81918": "getOnlyRewards(address,address)", +"b9f86202": "setTokenBalance(uint256,uint256)", +"b9f890de": "getERC20Address()", "b9f89751": "withdrawAsCreator()", +"b9f8c997": "totalSupplyed()", "b9f96247": "SellMulti(uint256[],address)", +"b9f9850a": "jumpMultiplierPerBlock()", "b9f9d9a5": "test_insert_findNoHintAtPosition()", "b9fa2055": "capETH()", "b9fac520": "BIU()", +"b9fae3f5": "enableBuySell(bool,bool)", "b9fb0579": "Transfer_of_authority(address)", +"b9fb25d4": "CSTBurnedAmount()", "b9fb3ff8": "BOOYAHTEST()", "b9fb7b8c": "Deposit_referral()", "b9fbe331": "bonusTokenRateLevelOne()", +"b9fd7b8f": "editVoidReceiverList(address,bool)", +"b9fe1973": "revokeCopyright(string)", +"b9fe1a8f": "nextBorrowInterestRate(uint256)", +"b9fe8ca5": "exchcoinToUSDTCoinDeliver(address,uint256)", "b9fea3bb": "setBaseInfo(address)", +"b9fee928": "setDollarAmountToManageByCountryCodeAndIntroducerType(string,uint8,uint256)", "b9feeb05": "GetCategoryCount(string)", +"b9ff34b3": "setActivateAtBlock(uint256)", +"b9ff43d8": "DEFLCTLPperETHUnit()", "b9ff5fcf": "getMakerBetDetails(uint256,address)", +"b9ff6d0f": "votingIntervalParameterTitle()", "b9ffc576": "RevalootSwap()", "ba001de3": "revokeBountyTokens(address,uint256)", +"ba003134": "setSellTokenAmount(uint256)", "ba00660f": "publicWithdraw()", "ba00ab60": "cancelAuthorizations(address,address[])", +"ba00e495": "halfLifeReductionRate()", "ba0179b5": "confirm(uint256)", +"ba018062": "sashimiSupplyState(address)", +"ba019dab": "MIN_BPOW_BASE()", +"ba019e3c": "refundTradeOnlyTransaction(address,address,uint256)", +"ba01a3df": "eth2daiMaxSpread()", "ba02021d": "redeemTicket(uint256,address)", +"ba023d62": "border(address,address)", "ba029c97": "wei20()", "ba02cf47": "MORTU()", +"ba02da31": "getSpent(address,uint256)", "ba02e9f2": "Coincirculationchain()", +"ba02edcf": "getPlayerExtByAddress(address)", "ba02f006": "_concat(string,string)", +"ba02fcb9": "_getUint256Reserves(address)", "ba030c8c": "endRefundingingTime()", "ba033fe1": "buyAndTransfer(uint256,address,address,bytes)", +"ba03cda5": "upint(address,uint8)", "ba0410fb": "changeExhangeRate(uint8)", "ba044799": "setDropable(bool)", +"ba04573b": "ColourChanged(uint256,uint8,uint8,uint8)", +"ba04da79": "stake_contract()", +"ba04e1e6": "earlyFoundation()", +"ba056653": "programFees(address,uint256)", "ba057826": "MDXToken()", +"ba064e73": "emissionProviders(address)", "ba065e1f": "expired(uint256)", "ba067f59": "setToSendLeft()", +"ba06c9a6": "mintManagerFee(bool)", "ba075da2": "undermineComponent(uint16,uint256)", +"ba0760a3": "getWhiteListRoot(address)", +"ba07e543": "setDoTxLibs(address,bool,address,address,bool,bool)", +"ba0818e3": "isCA(address)", "ba081b8d": "PHOENIX_POOL()", +"ba082cde": "setUnderlyingTokenValuator(address)", +"ba08553a": "eraPeriod()", "ba086518": "delist(uint16)", "ba087b9d": "balanceOfAtType(address,uint256,uint256)", "ba08809d": "showTimeLock(address)", @@ -106454,6 +194827,8 @@ "ba0a272b": "icoEtherReceivedPreFirstSale()", "ba0a4ca9": "_safeGasStaticCall(address,bytes)", "ba0a93a8": "getRankOnePlayer()", +"ba0b3623": "repay(uint256,bool)", +"ba0b8e95": "getMinimumAmountOfLPTokens(uint256)", "ba0b9788": "setTitulaire_Compte_7(uint256)", "ba0bafb4": "currentWindow()", "ba0bba40": "setup()", @@ -106461,123 +194836,223 @@ "ba0bf0c4": "weiMaxInvestment()", "ba0bface": "managementBodyAddress()", "ba0c1777": "ecoLock13()", +"ba0c60c9": "max_mint_allowed()", +"ba0c7d8b": "getMyBalanceAS()", "ba0c9b54": "mcs()", +"ba0cb22b": "getUserShares(address)", +"ba0ceef1": "getYvaulyPerBlock()", "ba0cf581": "findDispute(address)", "ba0d291b": "CashMateToken()", +"ba0d4391": "unlockBatch()", "ba0d46f3": "BoraToken(uint256)", +"ba0d5315": "FreeOffer(uint256)", +"ba0d7c2a": "withdraw_from_gauge(uint256)", "ba0d94a8": "Bcigarcoin()", "ba0df427": "sumOf(uint256[])", +"ba0e053f": "ACns_WeiInFinney()", "ba0e0f5e": "removeTrustedAccount(address)", +"ba0e43bf": "targetLevel()", "ba0e6cc9": "removeVerified(address,address)", "ba0e930a": "transferManager(address)", +"ba0f2e7b": "MINIMUM_SIGNATORIES()", "ba0f5b20": "getDarknodeBond(address)", +"ba0f6566": "mapAsset_claimRate(address)", +"ba0fb861": "_allowed(address,address)", "ba0fbf0d": "_saleTokens()", "ba102763": "etherToSendSecurityPool()", +"ba104dd6": "getMyVaultAddress(address)", "ba1066ed": "pendingAmount()", "ba10db46": "transferEthHandleOwnership(bytes32,address)", "ba112d50": "setDataEquip(address)", +"ba11595d": "vswapFarmingPoolLpPairAddress()", "ba1162d7": "getFmLength()", "ba119e5a": "SEBCToken()", +"ba11e319": "NewValue(uint256,uint256,uint256)", "ba11ecde": "preSaleOpen()", "ba124401": "FrozenGuard()", +"ba12d087": "STURTAP_TEAM_ROLE()", "ba13a572": "lottery()", "ba14d606": "test(address,uint256)", +"ba14f26a": "userRewardPaid(address)", "ba151ad9": "USD_PER_TOKEN()", +"ba1558d6": "PermissionError(address)", "ba157d46": "setWebGiftEtherAmount(uint256)", "ba15e52e": "getInfo(bytes20)", +"ba15e56b": "bidRejected(address,uint256)", "ba15fcaa": "Tremendoustoken()", "ba16ae2d": "WBET()", "ba16d600": "minReward()", "ba16e00e": "bonusEnd05()", +"ba171449": "setLPGenerationCompleted(bool)", "ba17e592": "performWrite1()", "ba1803c1": "setCryptoJinglesContract(address)", "ba181ac6": "setWhitelist(address,address)", +"ba181d25": "setVault(address[],uint256[])", +"ba18b9ec": "getProfessor()", +"ba19322d": "interfaceID()", +"ba1966d8": "GetTokenName(address)", +"ba19dfad": "updateRewardPerBlockLogic(uint256)", "ba1a2243": "setTokenPaymentCustomer()", "ba1ad438": "newFee(uint256)", "ba1af80f": "phase4Price()", +"ba1b37f2": "fundsInjection()", "ba1b44da": "getBoardRating(address,uint256)", "ba1b6221": "calcUnMaskedGuEarnings(uint256,uint256)", +"ba1b7e76": "transferFromBatch(address[],address[],uint256[])", +"ba1b83b3": "nako()", "ba1c0201": "evRefund(address,uint256,address,uint256,bool)", "ba1c3b92": "setSalePeriod(uint256,uint256)", +"ba1c5e80": "getBorrowRate()", +"ba1cbf74": "P3_SHARE_PERCENTAGE()", "ba1ccbee": "getSupportedRolesCount()", "ba1cd983": "unitCreationFee()", +"ba1ce6db": "SpankBankCreated(uint256,uint256,address,uint256,string,uint8,string)", +"ba1d2aff": "getReleaseTimestamps(address)", +"ba1d69d4": "MAKER_OTC()", "ba1d8d4f": "createAutoridadElectoral(bytes32,bytes32)", +"ba1de6c7": "totalCurrentTokens()", +"ba1f83af": "releaseEcosystem()", "ba1f879f": "privateSale()", "ba1fd9f4": "widraw(uint256,address,bytes32)", "ba209dab": "rejectCertification(uint256)", +"ba20ac36": "maxCampaigns()", "ba20dda4": "getBeneficiary(bytes32)", +"ba2129b1": "setSwapRatio(uint256)", +"ba2136e4": "DeviceActivated(address,uint256,bytes32,bytes32,bytes32)", +"ba215f63": "setAdapterFee(uint256)", "ba21d62a": "Command(address,bytes)", +"ba21ebcc": "closeTrap()", +"ba226d2c": "swap2GOFRouting(uint256)", +"ba228c33": "sigilArray(uint256)", +"ba22f97d": "whitelistedAddressesList(uint256)", "ba2318ca": "totalSaleSupplyCap()", "ba236abe": "getMyWinAmount(address)", "ba255cd1": "liquidAllocatable()", +"ba258320": "LedgerFailed(string)", "ba25a585": "EventUpgradeTank(address,uint256,uint8)", +"ba25a5f7": "getAllofSupplierRecepitsid(bytes32)", "ba25d944": "longDescription()", +"ba2644b6": "BurnRatePercent()", +"ba27057b": "sendBTCPTokenToMultiAddr(address[],uint256[])", +"ba270c71": "getImageNew()", "ba278e08": "setStartTime(uint256,uint256)", +"ba27a911": "initializeWithExit(address,uint256,uint256)", +"ba281dec": "beginFarming(address,address,address,uint256)", "ba285f5d": "minimalPaymentInWei()", +"ba286a5d": "networkTrade(uint256[],bytes32[],address[])", "ba286ee3": "testRegisterCustomer()", +"ba28f269": "issue_for_ar(uint64,address[],uint256[])", "ba2902fb": "rehancoin()", +"ba29fdb1": "crowToWbnbRoute(uint256)", +"ba2a22d4": "ItemList(uint256)", "ba2a730b": "getAddressLastUpdate(address,address)", "ba2a98f2": "closeZoneShop(bytes2)", +"ba2aa15d": "getWeatherByGeohash(string)", "ba2ab079": "changeEndPrivateSale(uint256)", "ba2aee26": "addGains(address,uint256)", +"ba2cf3aa": "kTotals(uint256)", "ba2d5c88": "MINBET_perTX()", +"ba2d7597": "getValidatorReward(uint256,address)", +"ba2de9bc": "minCollateral()", +"ba2e115e": "conUser()", +"ba2e4892": "globalMask_()", "ba2e84f9": "publicsalesCap()", "ba2eb541": "isExpired(address)", "ba2ee51f": "ICO_TOKENS_AMOUNT()", "ba2ee65c": "manage()", "ba2eebb4": "transferControl(bool)", +"ba2f2c7e": "swapRouting(uint256)", "ba2fa957": "markettingPercentage()", +"ba2fbecd": "pendingTrex(uint256,address)", +"ba2fc836": "vortexTransferSyn(uint256,address,address,uint256,bool)", "ba3019de": "fwdPaymentAndData(address,bytes)", "ba3025d4": "epicenter_works_addr()", +"ba307cea": "SILVER_BOX_BASE_PRICE()", +"ba312a2f": "get_current_race()", +"ba312e9b": "transfercontractbalance()", +"ba31ff50": "usersEscrow(address)", "ba32348f": "reffUp(address)", +"ba325b3d": "newUbiBeneficiary(string)", +"ba32681e": "setInsuranceFee(uint256)", "ba32694c": "howCoin()", "ba331eab": "tokenSetTransferFeeAbs(address,address,uint256)", "ba33a876": "VBToken()", +"ba33c748": "bBalance()", +"ba33ed7d": "turnOn()", "ba34251b": "usdToEthPrice()", "ba344304": "Lydian()", "ba344743": "_rawTransfer(address,address,uint256)", +"ba3448df": "commissionOnInvestmentEth()", "ba346d11": "ArenaPool()", "ba34c8f1": "setrate(uint256)", +"ba34ef19": "batchFuturesTrade(uint8[2][],bytes32[4][],uint256[8][],address[2][],bool[],bytes32[],uint256[5][])", "ba353925": "paymentDisable()", "ba35749c": "deleteOffer(bytes32,address)", +"ba35a817": "withdrawDust(uint256)", "ba35b1d3": "TxMessage(uint256,uint8,uint256)", "ba35c0be": "changeSelectFight2DeathContract(address)", "ba35f38d": "eip20TransferFrom(address,address,address,uint256)", "ba3603fd": "usdPerMEth()", +"ba36ae08": "withdrawMonthlyStake()", "ba36f423": "att()", "ba3717c0": "setStrF1F2(string,string)", "ba376923": "Cez()", "ba377731": "getSupplyBalance(address,address)", "ba37caa4": "exchangeStaStb(uint256,uint256)", +"ba37d7bf": "getEstimatedDAIProfit()", +"ba383b5a": "acceptBountySubmission(uint256,uint256,uint256[],address,uint256,address[],bytes[],uint256[])", "ba386f0b": "propertyIdToAuction(uint256)", "ba38743b": "GrabUnallocatedValue()", "ba38c599": "announced()", +"ba38de35": "getCoverPremiumNXM(uint256)", "ba391bb2": "perTokenPrice()", +"ba397eac": "multiBetDetails(uint256,uint256)", "ba399ad2": "isInLockStage()", +"ba39cf89": "totalSentToStakeHolders()", +"ba3afbe2": "ownerOfBooster(uint256)", "ba3b60ed": "rawVotes()", +"ba3b8460": "setRewardContract(address,address)", "ba3c0067": "getTopPlayers(uint256)", +"ba3c6df4": "withdrawRewardsByProfile(uint32)", "ba3d0cb5": "retentionMin()", +"ba3d97e9": "ceoAddress2()", "ba3dc67c": "startingPoint()", +"ba3e38ee": "minTms_()", "ba3eb50f": "TokenEther()", "ba3eb61d": "InterfaceData(address)", +"ba3ecc5b": "postOverhead()", "ba3eefc5": "makeInvestment(uint256)", "ba3f41da": "beginCodeUpdate()", "ba3f56f8": "startFinalStage2()", "ba3f5a12": "tokenMultiplier()", +"ba3f6bd8": "maxWithdrawAmount(address)", +"ba3f7611": "setDividendRate(uint256)", +"ba3f78ae": "setTokenReward(address,uint256)", "ba3f8f2c": "getTokenPriceUSDWEI(uint256)", "ba3f8f31": "ReleasingScheduleLinearContract(uint256,uint256,uint256)", "ba3fc155": "ownerWithdrawal(uint256,address)", "ba3fd8f7": "currChampion()", "ba3fdb8f": "_createArt(uint256,address)", "ba40aaa1": "setGiveAway(uint256)", +"ba40c71a": "getTimeLockLength(address)", +"ba40f284": "deposit(bytes32,uint8,uint64,address,bytes,uint256)", +"ba412af0": "transferFromWithLockup(address,address,uint256,uint256[],uint256[],bool)", "ba414fa6": "failed()", +"ba415658": "DrawnCards(address,uint8,uint8)", +"ba419d0c": "cachedUpdatedBlock()", "ba41dc5b": "setwalletOne(address)", +"ba420816": "transferTxRelay(address,address,uint256)", "ba425379": "Ico_rejected(string)", "ba429f33": "getRewardsContractHash(address)", +"ba42b53e": "paidAutoPoolGain(uint256,uint256,uint256)", "ba42c8e5": "resolveSupervisorVote(uint256)", +"ba42e6da": "atomicMatch_(address,uint256)", "ba42fdb9": "handleLastProposal()", +"ba43265f": "getRewardUnlockingTime()", "ba437b5d": "KOKC()", +"ba43b949": "farmTokenAddress()", "ba441560": "SetRedeemRate(uint256)", +"ba443d33": "partitionTickets(address)", "ba4442ab": "ReassingTokens(uint256,uint256)", "ba44593c": "set(bytes32,address)", "ba44bc0b": "UserMinMaxCrowdsale(uint256,uint256)", @@ -106585,103 +195060,179 @@ "ba452930": "stopPrivatePlacement()", "ba454d60": "changeMaxEntries(uint256)", "ba457dd1": "BreezeCoin()", +"ba458535": "getTreeNode(uint32,uint32,uint64)", +"ba458e62": "getTotalNumberOfChildrenOf(address)", "ba45b0b8": "transfer(address,address)", "ba4611d9": "getClaimCount()", "ba463acd": "createPackage(uint256,uint256,uint256,string,uint256)", "ba4670da": "onlyOwnerSetAdvWallet(address)", +"ba46948a": "TaskCreated(uint256)", "ba46adeb": "exerciseLong(address[2],uint256[7],uint8,bytes32[2])", +"ba46ae72": "tokenInfos(address)", "ba470738": "changeRejectSetting(uint256,bool)", "ba47c5f8": "inpreSalePeriod()", "ba4823e1": "SoundcoinsToken(address)", +"ba484c09": "getDepositRecord(uint64,uint8)", "ba485844": "func_0C0E()", "ba487e62": "newCampaign(uint32,uint96,uint16,uint16)", "ba48e057": "setBatchTransferLimit(uint256)", "ba490a03": "SpudToRotator(uint256,address)", +"ba490e46": "stakedT1Holders(address,uint256)", +"ba4917b3": "claimAsset(address,uint256)", +"ba49848b": "finishChangeTreasury()", +"ba49a08c": "buyersCount()", "ba49e21f": "getAttoTokensAmountPerWei(uint256)", +"ba4a3bc4": "createproposal(string)", "ba4a579d": "canBetOnRound(uint256)", "ba4bcd72": "currentAdmin()", "ba4c206e": "removeCertificationDocumentInternal(address,bytes32)", "ba4c825e": "_transfer(address,address,uint256,bool)", "ba4d0c99": "conversion(uint256)", +"ba4d256b": "GetPlayerTickets(address)", "ba4d573f": "addSelctFight2Death(uint256,uint256,uint256)", "ba4e1c38": "airdropTotalQty()", +"ba4e5c49": "whitelistedAddresses(uint256)", +"ba4f6737": "_bettable(uint256)", +"ba4f7bf5": "setSale(address,uint256,uint256)", "ba4feabd": "createEscuela(uint256,address)", +"ba50531a": "toogleAppointee(uint256,address,bool)", +"ba50722d": "tokenETH()", "ba50f965": "add_creature(uint256,address)", "ba5129b9": "ethRateChanger()", "ba515481": "maturity_refund(address[],address,uint256[])", "ba51a6df": "changeRequirement(uint256)", +"ba51b14e": "organizations(bytes32)", "ba51b1b4": "setTokenSymbol(string)", "ba5233b2": "setPartnerQuota(address,uint256)", "ba52688d": "approveCycle(bool)", +"ba52c8b7": "burnDivisor()", +"ba52c8f8": "removeLiquidityPool(address,address,uint256,uint256)", "ba53d9f3": "getSpartansOnTheBattlefield(address)", +"ba548298": "fullfilled(address)", +"ba54a0e8": "mapPrices(bytes32)", +"ba54b1ce": "FAILURE_BLACKLIST()", +"ba54d3ec": "twapDollarPrice(address,uint256)", "ba554374": "updateTranchRate(uint256,uint256)", +"ba5569b3": "certificateType()", "ba5595d3": "numTokensAuctioned()", "ba5673c3": "getChildrenLength(bytes32)", "ba56763e": "getBidInfo(uint64)", +"ba568181": "ethRateSource(address)", +"ba56f393": "updateArtistSecondSalePercentage(uint256)", "ba56f6ee": "god()", "ba57225d": "LogCrowdsaleEnd(bool)", "ba575a39": "KOREKCHAIN()", +"ba5793d8": "ris3GovernmentAddress()", +"ba593714": "claimWeeks(address,uint256[],uint256[],bytes32[][])", "ba59a75e": "bn128_map_to_G1(bytes32)", "ba59f784": "ChessLotto()", "ba5a2d33": "exitPool(address)", "ba5abaf8": "startFightB(uint256,uint256,bytes4)", +"ba5b00a4": "registerEvent(address,string,string,string,string,uint256,address,string)", "ba5b0e95": "CPCEIcoDeposit()", +"ba5b1810": "closeFuturesPosition(bytes32,bool,address)", +"ba5b1dc1": "seller_products(uint256)", "ba5bea09": "addPendingPayment(address,uint256)", "ba5c3a9d": "distributionList(uint256)", "ba5c5d93": "address_book()", +"ba5c8b6d": "Push(address,string,bytes32,string,bytes32,bytes)", "ba5c9bd6": "processReinvest(address,uint256,uint256,uint256)", "ba5cb281": "uint32At(bytes,uint256)", "ba5cb999": "RealTotalSupply()", +"ba5d0067": "minCollateralization()", +"ba5d49a5": "addCandidate(uint256,string,address,bytes32,bytes32)", +"ba5d8ca9": "totalAttacksAmount()", +"ba5de8a3": "calculateProfit(uint256,uint256,uint256,bytes32,bool)", "ba5e286b": "getShipProductCount()", +"ba5e6306": "showisSold()", +"ba5ea04b": "YouBetToken()", "ba5eceb6": "borrowerBalance(address)", "ba5f3e46": "getPlayerBetData(address)", +"ba6047f4": "setTaxFraction(uint16)", "ba61021f": "calcBonus()", "ba612493": "getCurrentPassportLogicVersion()", +"ba6169fe": "endCrowdSaleRoundThree()", "ba61810c": "startNextPhase()", +"ba61813d": "getOrderByUid(uint256)", "ba61a960": "Launched()", "ba61ee09": "myRefBonus()", "ba622884": "isManufacturerAddress()", "ba622ddc": "getPlayerAnimals(address)", "ba625fe6": "WineCoin()", "ba629113": "contract12function2()", +"ba62f8b7": "unwrapHegic(uint256)", "ba6361fb": "payme()", "ba639d5a": "supplyRound1()", "ba63abd6": "getPInvestedSumByRound(uint256,address)", "ba63defb": "etherToSendJackpot()", "ba63e25a": "canBeWhitelisted(uint256,bytes32)", +"ba643943": "getMyMoneyPotsIds(address)", "ba6489e5": "getAccountReferrer(address)", +"ba64e301": "spill()", +"ba653ab4": "massMintNFTs(address,uint256,uint256)", "ba65fa25": "getMerchantPublicKeyByAdmin(address)", +"ba65ff28": "oracleEpoch()", +"ba667005": "Transmit(address,address,uint256)", "ba66d7a6": "MDKICO(uint256,uint256,uint256,address,address)", "ba6763ce": "withdrawBalanceFromStorageContract()", +"ba681c4d": "treasuryRatio()", "ba68693f": "PinZhiCoin()", +"ba68a2bf": "publish(address,string)", +"ba68d4fc": "triggerCallFrom(address,address,uint256,bytes)", "ba693c86": "addsmartContractAdress(address)", +"ba696663": "_bscVault()", "ba69fcaa": "deleteStringValue(bytes32)", "ba6a7e27": "AOABANK()", +"ba6aa741": "getUPSBurned()", +"ba6ad434": "SilverBoxSale(address,uint256,uint256)", "ba6afc50": "getIncentivesPool()", +"ba6b0fa0": "makerTotalOrdersWei(address)", "ba6b285a": "neuroChainAddresses(address)", +"ba6b2c38": "calculateMinPoolTokens(address,uint256,uint256)", +"ba6b4c0a": "signetures(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])", +"ba6e3652": "bonusBalance()", +"ba6e908b": "createFuturesAsset(address,string,string,uint256,uint256)", "ba6f30e4": "sellCenturion(uint256,uint256)", +"ba6f3baf": "_synth(bytes32)", "ba6f4ab0": "burnCarbonDollar(address,uint256)", +"ba6f4e82": "updateLevelPrice(uint256,uint256)", "ba6ff8ad": "RTokenBase(uint256,string,string,uint8)", +"ba7079ca": "changeArbitrator(address,bytes)", "ba70d049": "DonateAdded(address,address,uint256)", "ba70d54a": "ACTIVE_STATUS()", +"ba70f757": "getLastRoot()", +"ba712284": "getRate(bytes32[])", +"ba71b3a0": "complain(address,string)", "ba71c7f5": "setPricesManually(string)", "ba723f99": "stopBid()", "ba723fe2": "getRequestHash(bytes,bytes,uint256)", +"ba727a95": "cdpAllow(address,uint256,address,uint256)", +"ba72b6b0": "getKittyCreators()", "ba72cc36": "teamLock()", "ba730e53": "getSellPrice(uint256)", "ba7314ae": "AncestorHellNotes()", +"ba731d97": "runTokenUniswapTransferuniswapaddrssintransfer(uint256,address,address)", "ba7325be": "indexOf(string,string,uint256)", "ba736a99": "fetchOrderByIdWithWithPayer(string,address)", "ba73737d": "AndiosCoin(uint256,string,uint8,string)", +"ba738c8e": "_totalLpStakedUnrewarded()", +"ba73a5dc": "rentingCost()", +"ba73b739": "aggregateAddr()", "ba7435d9": "knightEquity()", +"ba747181": "addNewTokenType(address,string)", +"ba74e422": "dms()", +"ba756a6e": "LinkHashChange(uint256,bytes32)", +"ba756ed9": "replaceDepositProfileAtId(uint32,string,uint8,address,uint256,uint256,uint256,uint256)", "ba75bbd8": "front()", "ba75d0de": "minimumHydroStakeDelegatedUser()", +"ba75d806": "getNodeAt(uint256)", +"ba75dffe": "BASE_NUM()", "ba76000e": "Add_Patient(uint256,uint256,string,string,string)", "ba7607bf": "LogBidAccepted(bytes32,address,bytes32,address,bytes32,uint256)", "ba76938b": "freezeDeposit(uint256)", @@ -106690,12 +195241,25 @@ "ba770154": "getUserPictureByUsername(string)", "ba7705aa": "setIPFS(address,string,string)", "ba773a70": "icoPrice_()", +"ba777ed7": "SHIELD_MINING_PERCENT()", +"ba779ed6": "getAllCoef()", "ba77ddc9": "PresaleFinalized(uint256)", +"ba780556": "setReferrerNDirect(uint256,uint256,address[])", "ba780759": "EtherSportCrowdsale(uint256,uint256,address,address,address)", +"ba782a17": "ReconSwitchC2C()", "ba78a98a": "timelockEndTime()", "ba78c773": "declineBid(string,uint64)", +"ba795d6a": "excerciseOption(uint256,uint256)", +"ba79edcd": "mappingPositionToGirdId(uint16)", "ba7a8149": "lockEtherPay()", +"ba7ab84e": "logBool(bool)", +"ba7adf96": "NaSwapFlashEth(address,address,address,address,address,address,uint256,uint256)", +"ba7aef43": "mint(address,string,uint256)", +"ba7b1281": "isTokenApproved(address,address)", "ba7b37d4": "updateBalance(uint256)", +"ba7b604b": "setConstDelay(uint256)", +"ba7b6d82": "LogReopenBet(uint256,address)", +"ba7b7a13": "returnProfit(bytes32,uint256,uint256)", "ba7b86b9": "KhuuKoin()", "ba7badeb": "nextVersion(address,bytes32)", "ba7bd2aa": "withdrawTokens(uint256,uint256)", @@ -106705,99 +195269,171 @@ "ba7cc631": "createKingdom(string,string,uint256,address,bool)", "ba7ce849": "drawPool(uint256)", "ba7d0b3c": "ETE()", +"ba7d50db": "openAirdrop()", "ba7d619c": "returnTokensFromHoldAdditionalAddress(uint256)", "ba7da724": "devVUPDestination()", "ba7dc45f": "_removeOperation(bytes32)", +"ba7e30fa": "LogRedeem(bytes32,uint8,uint256,address)", "ba7e424d": "isIcoEnded()", +"ba7e49da": "approve_543(address,uint256)", "ba7e7cab": "getApprovalCount(uint256)", +"ba7e7d05": "burnCard(uint256)", "ba7ed2ff": "setMinInvestment(uint256)", "ba7efcdd": "investmentLimit()", "ba7fb1df": "getAddressToken()", "ba8029bb": "setStartSale(uint256)", +"ba80515b": "depositcall()", "ba809390": "AccountReaderAdded(address,address)", +"ba80cf3b": "ChangeGasRequired(uint256)", "ba80d787": "contributor()", "ba80e058": "landingDiscount_ppc()", "ba8118b1": "goNextRound()", "ba81522f": "maxBlockDrift()", "ba816496": "last50plusblocknr()", "ba818f8d": "affiliateFee()", +"ba81bbde": "setRoboRatePerBlock(uint256)", +"ba821088": "clearSession(address)", +"ba82345c": "piToBalancerGasOn(address,address)", "ba827243": "YangMaoZhuangYuan(uint256,string,uint8,string)", "ba82bde2": "bindusertop(address,address)", "ba82c897": "updateRewardToken(address,uint256)", "ba82f55d": "ethsoccer48()", +"ba835009": "getTotalLpTokens(address)", "ba838b01": "EdCoinToken()", +"ba83c16f": "getStateHolderAddress()", "ba83c970": "closeSell()", "ba83d63d": "getBidFreelancer(uint256)", "ba847552": "isAddrCanCallServer(string,address)", "ba84cb3f": "MobileApp()", +"ba8513c7": "resetURI(uint256)", +"ba855504": "rompiSalvadanaio()", "ba85571c": "getPlayerInfoByAddress(address,uint256)", "ba8661a2": "TimestampScheduler(address)", +"ba868787": "iaaStats(uint256,address)", +"ba873065": "batchNumber()", +"ba873286": "getCardTotalAmount(uint256)", "ba873f60": "setAssociation(address,bytes32,bytes32)", "ba8747b3": "addReport(uint256,string,string)", "ba874999": "getGameEngineAddress()", "ba87ebfa": "IMDEXsetOwner(address)", "ba87fdd4": "getSenderCities(address)", +"ba8804cd": "thisContractWillNotBeCorrectlyMerged()", "ba885446": "tokensPerAllocation()", +"ba888a85": "exp_minus_2(uint256)", +"ba88b4fa": "investorUnspentETH(address)", "ba88d537": "_getSenderStatus(uint256)", +"ba8907cb": "timelockListLength(address)", +"ba899a2e": "holder(uint256)", "ba8a141f": "EnterCoin()", "ba8a86c2": "whiteListedAddressPresale(address)", "ba8ad39e": "grantToAllowBlocking(address,bool)", "ba8af655": "returnAmountPledged(uint256,address)", +"ba8b36b1": "callUniswapRouterDegen(address,address)", "ba8b7152": "BlockOfLifeToken()", "ba8b9712": "adminRefundTokens(address,uint256)", +"ba8ba01c": "_ethToToken(address,uint256)", "ba8bb22a": "LIRAX(uint256)", "ba8c0c9d": "getPropertyLastUpdater(uint16)", +"ba8c65ae": "getLogic()", "ba8c6980": "hasGrantAccess(address)", "ba8cded7": "Bet(uint256)", "ba8d045a": "tobuy(uint256,address,uint256)", +"ba8dbea2": "tokensInfo(address)", +"ba8e9272": "FINAL_RGT_DISTRIBUTION()", +"ba8ef1e7": "getCurrentSalePrice()", "ba8ef244": "getEvaluation(uint64)", +"ba8f1b69": "getSaleFee(uint256)", "ba8fb567": "startPhase2(uint256)", +"ba903202": "getUserLockedCNTokens(address,uint256)", +"ba903a76": "ResizeBenchmarks(uint64[])", "ba904eed": "removeRegistrar(address)", "ba9072ea": "crownedTime()", "ba907b7e": "testFailCreateWithParentsSameItemId()", "ba90d553": "getContractsByType(uint256)", "ba90f022": "modifyRecord(uint256,string,string,string,bytes32,int64)", +"ba910cfa": "pendingGoogle(uint256,address)", +"ba91197a": "start(uint16)", "ba9130a6": "execCustom(address,bytes,uint256,uint256)", +"ba9131ca": "token_supply()", "ba91d87b": "mintForWorker(address,uint256)", +"ba91edde": "requesterIndexToClientAddressToEndorsementStatus(uint256,address)", +"ba91fd37": "shutdownCooldown()", +"ba921223": "issuePynths(address,uint256)", "ba922e04": "Karma(uint256)", +"ba929c5f": "numOfConfirmed(bytes32)", "ba92d382": "factory_address()", "ba9316b7": "getExp(uint256,uint256)", "ba9334a0": "testCombinators()", +"ba9344a4": "depositEthAsQuote(uint256,address)", +"ba9359af": "syncPriceById(uint256)", "ba9398e9": "publicSaleEtherRaised()", "ba93d5e5": "setBankrollAddress(address)", "ba93d980": "swapOpen()", "ba941154": "newTapProposalFromCompany(uint256)", "ba944118": "TMXGlobalToken(uint256,uint256,string,string,uint8)", +"ba9467c1": "removeNcard(uint256)", +"ba94dc0c": "totalDepositedLevel2()", +"ba9530a6": "calcOutGivenIn(uint256,uint256,uint256,uint256,uint256,uint256)", "ba953bc8": "KanadeCoin()", +"ba95478e": "initialize(uint32,bytes32,address[],uint32,uint8,bytes)", "ba95b235": "sayNo()", "ba95d63a": "leftSharePriceRateOfIncrease()", "ba95df98": "releaseUserPrivateBonusTokens(address,uint256,address)", +"ba96057e": "time_suspend()", +"ba965602": "buildRoads(uint256,uint256,uint8,uint256)", "ba967a84": "addInit(address,address,address,address,uint256,string)", +"ba96b027": "campaignCodeWeekly()", +"ba96c8c4": "BreathePeriod()", +"ba9730e0": "setLoanee(address,string,string,uint256)", "ba976ae5": "marketToken2018()", +"ba97c583": "withdrawDailyEarning()", "ba982c41": "tokensUnsold()", +"ba9862de": "appNicknames32(uint256)", +"ba994467": "addCallTo(address)", "ba996aca": "getPlayerLevel(uint256)", +"ba999812": "_Charge_LOGIC_()", +"ba99b87d": "updateKycMandate(bool)", "ba99d1a6": "RATE_DAY_0()", "ba9a061a": "START()", +"ba9a2b74": "calculateSales()", "ba9a4d6e": "hasAddressVotedInBallot(uint32,address)", +"ba9a7a56": "MINIMUM_LIQUIDITY()", "ba9a8b37": "convertibleTokenCount()", "ba9a91a5": "SALT()", "ba9a9e03": "StorageEnabled()", "ba9ac37f": "mul(uint16,uint16)", +"ba9ae895": "appointDelegator(address)", "ba9bb827": "CONTRIBUTION_MIN()", +"ba9be200": "AmountsLengthMustEqualOneError(uint256)", "ba9bf757": "getPlatformBalance()", "ba9c4637": "getMyPoints()", "ba9d0638": "receivedCount()", "ba9d407a": "GetAddressByName(bytes32)", "ba9d4c09": "devuelveAppaddr(bytes32)", +"ba9ddfcc": "lastPrime()", +"ba9de0e9": "keepers(uint256)", +"ba9de2aa": "olivsScalingFactor()", "ba9e0907": "XJF()", +"ba9e20fb": "mintUniOption(address)", +"ba9e7293": "get_stock()", "ba9e9a86": "binarySearchForChallenge(uint256,uint256,bytes,uint256,bytes32[])", "ba9ea413": "purchaseCostFiat(uint256)", +"ba9f10d7": "getFarmRewards(uint256)", +"ba9f4caa": "findNextEligible(address,uint256)", +"baa00099": "unlockTimeMarketing()", "baa0181d": "batchCancelOrders(address[5][],uint256[6][],uint256[])", +"baa01af0": "changeNNLimitTime(uint256)", "baa0b806": "content(uint256)", +"baa17c72": "candyVault()", +"baa1993b": "sendAll(address[],uint256[],uint256)", +"baa1ca98": "sendToOwnerAccumulateBalanceContract()", +"baa1f1d9": "CRV_LIQUIDATION_BONUS()", "baa23ac1": "SpecialDrawingRight()", "baa24fce": "rightVotes()", +"baa26757": "openMarket(uint256)", "baa28752": "listCenturion(uint256)", "baa290d9": "DANSToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"baa2abde": "removeLiquidity(address,address,uint256,uint256,uint256,address,uint256)", "baa2e587": "confirmReception()", "baa2edaf": "tokensDataProviders()", "baa2ff01": "get_blockhash(uint256)", @@ -106811,22 +195447,35 @@ "baa416b6": "CorsariumCore(address[],uint256[])", "baa46bdd": "_createDistrict(uint256,uint256,uint256,uint256)", "baa47694": "submitBlock(bytes32)", +"baa48808": "set_location(string)", +"baa49301": "confirmTransfer()", "baa5eb5c": "isDspRegistered(address)", "baa61df0": "tokenContractClaimTokens(address)", +"baa66bcb": "fnxBalanceInSushiSwap(address)", "baa6ab81": "priceByPeriod()", +"baa70a1d": "OneOfEachPyramidPrize(address,uint256)", "baa70a8b": "LBCoinJ(string,string,uint256)", +"baa727d6": "ticketPerJGN()", +"baa78369": "allowOwner(address,uint256)", "baa79dd3": "ethOdinRate2()", "baa7d1f3": "MULTISIG_ETH()", "baa83568": "requestColuLocalNetworkOwnershipTransfer(address)", "baa8529c": "give(bytes32,address)", +"baa854f3": "db_address()", +"baa8c65b": "totalDEFLCTContributed()", "baa90366": "isThereACoinAtCoordinates(uint16,uint16)", "baa92a05": "returnsenderbalance()", "baa93b56": "crownIfFreeze(address)", "baa9a8a9": "EtherbotsCore()", "baa9da15": "soldTotal()", "baa9e531": "totalTokensBought()", +"baaa17f2": "currentEpochDuration()", "baaa3eef": "setDistValues(string,string,string,string,string)", +"baaa46f9": "holdedCoverIDStatus(uint256)", +"baaa73b5": "soldList(address,uint256)", "baaa8b9a": "actualGotTokens(address)", +"baaaaad2": "timePerPeriod(uint256)", +"baaab047": "createJournalGroup(string,bytes32)", "baaac593": "LogWaterTree(uint256,address,uint256)", "baab7a3a": "isSuccessDoneState()", "baab89d5": "getLockedStructAmount(address,address,uint256)", @@ -106834,130 +195483,231 @@ "baac274d": "getCustomerBalance(address)", "baac4316": "sendTokensToMe(address,uint256)", "baac5300": "createTokenProxy(address)", +"baac7f19": "settleAndRestart()", "baad0828": "changeControllerInBntyTokenContract(address)", +"baad131b": "getRoleReleaseSeting(uint256)", "baad1532": "getMatchServer(uint256)", +"baad5b76": "allowedStaking(address)", "baad6c2e": "setInfoTier(string)", "baadbca0": "newTickerQuery(string,bytes32)", +"baadce90": "registerLand(uint256)", "baae172c": "setRefreshLockBalance(address)", "baaee21f": "getLastN(bytes1,uint8)", +"baaee553": "addPP(address)", "baaeecb0": "getAllApproval()", "baaefe5b": "priceInc()", "baaf2d4f": "transferOtherERC20Token(address,uint256)", "baaf4eef": "RESERVES_HOLDER()", +"bab161d4": "userAddressByID(uint64)", +"bab1ceed": "buyLockTokens()", "bab1d921": "closeCurrentStage()", +"bab1f0d8": "encodePackedDeposit(uint32,address,address,uint256,uint32,uint32)", "bab25514": "GRUToken()", +"bab2af1d": "deregisterToken(address)", "bab2b5e9": "percent3()", +"bab2d111": "artistSecondSalePercentage()", "bab2f2b5": "containsOnlyAlphaNumerics(string)", "bab2f552": "currentCycle()", +"bab313be": "changeAaveSaverProxy(address)", "bab41142": "takerApproves(uint256)", "bab41293": "getDataColla_001_002(string)", "bab42b54": "test_campaignRules()", +"bab4898e": "setMaximumInvest(address,uint256)", "bab4e3b1": "getOwnedToken(address,uint256)", +"bab50cc9": "getFileCount()", "bab54f69": "_isExcluded(uint256)", "bab5714c": "sendTeamSupplyToken(address,uint256)", "bab58ec9": "periodITO_tokenPriceUSD()", +"bab5933a": "getMyOrders()", +"bab5a666": "removeVerifySeller(address)", "bab5b64e": "spenderAddress()", +"bab5c53e": "Bless(address,string,uint256)", "bab5e2af": "LogBTHFoundationWalletChanged(address)", "bab6d101": "checkClaimTokenByIndex(uint256)", +"bab6d3d0": "setBarrelPrice(uint256)", "bab6f9bf": "generateRevokeStakeForDelegationSchemaHash(uint256,uint256)", "bab7b237": "totalRelease()", +"bab7bdf8": "comisionInTokens(address)", +"bab7d1a3": "depositPositionForBorrower(bytes32,address,address,uint256)", +"bab8586a": "ObtainTotal(uint256)", "bab86ea8": "test(string,string)", +"bab89e7b": "_signers(address)", "bab8bd04": "clearAllRequests()", +"bab8e1c0": "ibETH()", "bab8fe40": "claimableTokens()", +"bab90dbd": "getDoctorDetails(address)", +"bab9163f": "depositBatchIncentives(address[],uint256[])", "bab92a29": "get_owner_planets(uint256)", "bab94366": "AppUpdated(address,string,address,uint256,bool)", "bab95dba": "_getFeeAndNetAmount(uint256)", +"bab98a24": "hasBidder(uint256,address)", "bab99890": "CPollo()", "bab9c00c": "SmartSignature()", "bab9fc63": "testFailCreateWithParentParentNotInUse()", +"baba17e3": "FeeWindowCreated(address,address,uint256,uint256,uint256)", "baba4811": "recieveFunds()", "babb019d": "enact_liquidation_less(address,uint256,uint256)", +"babb3b53": "updateChecklistIdURI(uint8,string)", "babb3e0b": "updateEthRate(string,string)", "babbb78d": "teamTokenWallet()", +"babbc0ad": "ownerWallet1()", +"babcb423": "ratesAndStaleForCurrencies(bytes32[])", "babcc04c": "getLogsNum()", "babcc539": "isAllowed(address)", "babd222f": "addressToLarePurchased(address)", +"babd3b56": "view_address()", "babd7012": "activeSupply()", +"babdbde8": "StartProposal(uint256[],uint256[])", "babddb4c": "FundReturn(address,uint256,bool)", +"babe0061": "depositIsLocked()", +"babe1655": "UserList(uint256)", +"babe8a3f": "Line()", "babe9394": "EasyMineToken(address,address,address,address)", +"babe9a9e": "setExchangeWoolPrice(uint256)", "babf2b2d": "EscrowMyEtherEntityDB()", "babf5e37": "changeFree(uint256)", +"babf8901": "testEvents(address,uint256,string)", "bac02609": "buyEarlyWhitelist(address)", "bac03cd7": "totalContractBalance()", +"bac051ad": "updateReserve()", +"bac0aea8": "getVaultInfo(uint256,uint256)", "bac0b029": "BifreeToken()", "bac0b276": "allocate(address,uint256,uint8)", +"bac0c514": "pickDepositTotal()", +"bac100f2": "proposeUnbankOwner(address)", "bac127b9": "SecondAddressBalance()", "bac15203": "unPauseContract()", "bac18f9a": "handToBitmap(uint32)", "bac1e2e0": "testBitsAndSuccess()", "bac1e9f6": "getChannelSize(address,uint256)", "bac21a22": "totalSupplyLimit()", +"bac2a150": "LogICOInitialized(address,string,uint256,uint256)", +"bac2e6db": "getMaxAvailable()", +"bac30981": "queryNode(address)", "bac37239": "addMarketMakerAddress(address,address)", +"bac385c4": "updateFees(address)", +"bac3bf13": "providerFunds(address)", +"bac40739": "Burn(address,address,uint256)", +"bac4159d": "calculateSelfStakeNeeded(address)", +"bac426d0": "setHandler(address)", "bac506e0": "rf()", "bac55edd": "setDnsDomains(string,string,string)", "bac6068c": "inject(address,uint128)", "bac6241f": "LookRevToken(address,uint256)", +"bac642c7": "convertToDAI(uint256[2],uint256,uint8[2],bytes32[2],bytes32[2],uint256)", +"bac7429f": "protestWindowAvailable(bytes32)", "bac74b4f": "ISLABCoin()", "bac756e1": "PresaleToken(uint256,uint256)", "bac79651": "setTokens(address,uint256)", +"bac7984a": "setTeamAmount(uint256)", "bac7bb9f": "checkaddress()", +"bac7bf78": "swap0ForExact1(address,uint256,address,uint160)", "bac7c252": "BTC10kon54()", +"bac80b6e": "mintTFF()", +"bac91e2e": "submitEvidence(string)", +"bac91f1d": "ChangeIcoPhase(uint8,uint256,uint256)", +"bac956a1": "AllowTransfersChanged(bool)", "bac97647": "uncleSafeNr()", +"bac9ae6d": "ownerUpdateMaxRentalPeriod(uint256)", +"bac9c4d8": "farmingBitPerBlock()", "bac9dbab": "ROLE_COO()", +"baca803f": "upBalanceOf(address)", +"bacae742": "withdrawAllToVault(address)", "bacbe2da": "cancelVote(uint256)", "bacc2753": "vestTo(address,uint256)", "bacc2c42": "participate(uint256,uint256,uint256,uint256,uint256,uint256)", "bacc58d7": "backManusOwner()", +"bacc8faa": "isNtsPoolAdded()", "baccc92b": "RegulatorIfc(address)", "bacd2a90": "mallocBudget(address,uint256)", "bacd2e97": "executedCount()", +"bacd4428": "holdersShare(uint256,uint256)", "bacd70b7": "callSomeFunctionViaInner3()", "bacd8d88": "soldPercent()", +"bace2890": "unstakeALT(uint256[],uint256)", "bace4cf6": "Distribution(uint16,uint256,address)", +"bace9fd7": "OnWithdraw(address,uint256)", "bacef685": "createTokens(uint32,address)", +"bacf251b": "swapStartTime()", "bacf3f65": "secondPeriodOfICO()", "bacf5f84": "_addBaseStats(uint256,uint8[8])", +"bacf90c2": "bmPerBlock()", +"bacf9946": "setTrustedSigner(address,bool)", "bacfddbc": "isDepositAddress(address)", "bad09457": "test3(address[5],uint256[5],uint8,bytes32,bytes32)", +"bad0d4f1": "investmentLimitAddress()", +"bad0f934": "reloadGenesisBuys(address)", +"bad14eb4": "tokenSaleKHM(address)", "bad16031": "isBlackjack()", "bad19ead": "copyToAllUnits(uint256,uint256,uint256,uint256,uint256)", +"bad1d3da": "unitroller()", "bad1f08f": "open(uint256,uint32,uint256)", "bad21d65": "startInstantInterface(address,address,uint256,uint256,uint256,address,uint256,address,uint256)", +"bad2bd2c": "getNumberVotes(address)", "bad2d6d2": "removeBlacklist(address,address)", +"bad2e1da": "indexBetPlace()", +"bad36a73": "sellComp()", +"bad387af": "approve_631(address,uint256)", +"bad39b96": "removeAllowedMinter(address)", +"bad40597": "setEndMainSale(uint256)", +"bad42590": "transferToken(uint256,address)", "bad4d623": "setAltDeposit(uint256)", "bad568b1": "allowanceBcoupons(address,address)", +"bad5f514": "addStakerDetails(uint256)", "bad69502": "getProviderRateHistory(uint256,uint256)", "bad6b379": "changeCUSEaddress(address)", +"bad6b6a6": "melterOracle()", "bad751bc": "createPeerReviewContract(address,bytes)", "bad7726c": "checkDividendPaymentAvailable()", +"bad7b714": "getWrapped1155DeployBytecode(address,uint256,bytes)", +"bad7c12f": "approveNewVaultToken(address,address)", "bad7d46a": "CreateOffer(uint8)", +"bad7f7e2": "mills(uint256)", "bad84416": "eligibleVotes(address)", "bad845e6": "deleteProductInternal(bytes32)", "bad84c9e": "getNumTicks()", +"bad8d789": "SellItem(address,uint256,uint256,uint256)", +"bad92cc8": "showBestOffers3(bool,uint256)", "bad9643b": "balance_wirthdraw()", +"bada5726": "incrementTokenOwner(address,address,uint256)", +"bada9507": "setDrawerBonusRate(uint64)", +"bada9bd2": "sotaToken()", +"badaad2a": "useKey(string,address)", "badaba27": "packTable(uint256)", "badae9b4": "addArgumentToRequestUint(int256,uint256,bytes32,uint256)", +"badafb37": "tradeEtherForTokenWithFeeOnTransfer(address,uint256,uint256,uint256)", "badb2e5a": "UpgradeRigETH(uint8,uint256)", +"badb54ed": "getListCandidateByTeam(uint256)", "badb97ff": "adminBurn(uint256)", "badbaa3c": "setCallData()", "badbbf34": "RBACWithAdmin()", "badc9a52": "adminChanged(address,address)", "badca131": "kill_and_withdraw(address)", +"badcdc69": "porn()", "badcf391": "sendMail(bytes16,bool)", "badcfbcf": "withdrawSnowflakeBalance(address,uint256)", +"baddbfa0": "setDeployerInputLengthLimit(address,uint256)", +"baddd579": "startLoan(uint256,bytes)", "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()", +"badef30a": "INITIAL_WEEKLY_SUPPLY()", "badf3de9": "durationForBetAmount(uint256)", +"badf7767": "lastEntryAddress()", +"badf822b": "investToken()", "badf8b37": "TwoFactorAuth(string,string)", "badfa573": "setAllowTransferTimestamp(uint256)", +"badfb9ae": "startDistribution(address,uint256,address[],uint256[],uint256[],uint8[])", +"badfe767": "getDecryptedDataCount()", "badfedf2": "genEthsRec(uint256,uint256)", "bae07416": "canBeValidated(uint256)", +"bae0b815": "getUsageCalcContract()", "bae0c536": "addSaleAgent(address)", "bae118f4": "setHouseInfo(bytes32,uint256,string,bytes32)", +"bae12d4e": "extendLoanByInterest(bytes32,address,address,uint256,bool)", "bae18880": "getReceipt(address,uint256)", "bae18ac3": "setUpgradeFee(uint256)", "bae1c1ac": "doSendWithSignature(address,uint256,uint256,bytes,uint256,bytes,bool)", @@ -106965,60 +195715,93 @@ "bae2718f": "WithNoArgumentConstructor()", "bae2b6ab": "setLedgers(uint256)", "bae2ddb5": "XBHX()", +"bae37556": "changeIssuerAndApprover(address,uint256,uint256,uint256,uint256,address)", "bae37857": "getEndTimeOfSession(uint256,uint256[],uint256)", "bae3791e": "weisHardCap()", "bae3c066": "sendInternally(uint256,uint256)", "bae3c27f": "weiLimit()", +"bae45f01": "createProxyAndGemCDP(address,address,address,address,bytes32,uint256,uint256,bool,address)", "bae4f466": "roundKeys()", "bae5e693": "partnersAllocation()", "bae5f9dd": "takerAffiliateFee()", "bae61714": "setICOWeek3Bonus(uint256)", "bae667bc": "tokenOf(bytes32)", +"bae6a690": "discounts(uint256)", "bae6c2ad": "queueSize()", "bae6d62b": "manualOverride()", "bae70892": "setMyPubKey(bytes32,bytes32,bytes32,bytes32,bytes32)", "bae72565": "readAddress(address,uint256)", "bae728b1": "setUnholdDate(uint256)", +"bae747db": "FEE_DUMMY_ADDRESS()", +"bae787aa": "dayStealTime_(uint256)", "bae78d7b": "getEntry(uint256)", "bae804a7": "transferFromSender(address,uint256)", +"bae8c7b3": "emissionBP()", "bae8d888": "createArtefact(uint256)", +"bae930cb": "holding(uint256)", "bae944ba": "globalUnlockTime()", "bae971e4": "getWithdrawEtherAmountValue()", +"bae99493": "seniorRatioBounds()", "bae99efc": "ICO_MAX_CAP()", +"bae9d962": "currentEpochTotalBurned()", "baea0431": "getMsgDataAfter()", "baea3a21": "addToWhitelistInternal(address)", "baeb0718": "checkin()", "baeb8cad": "deleteGroup(address,address)", "baeb91ae": "invest(uint128)", +"baeb941c": "enterReward(uint256)", "baebcaf0": "getApp(address,uint256)", "baec1ced": "depositPresaleWithBonus(address,uint256,uint256)", "baec25ee": "ZYHToken()", +"baec68cd": "_isFeatureAuthorisedForWallet(address,address)", "baecd693": "sendTokensAfterBuy(address,uint256,uint256)", "baed8bb1": "getAddressValues(bytes32)", +"baedad25": "rddr(uint256)", +"baedd764": "buyOffer(uint256,bool)", +"baedfff6": "getDaiSplitThresholdGas()", "baee193d": "changeCountryLimit(uint256,uint256)", +"baee865e": "rebaseAmount()", +"baee99c2": "weightedStakeDate(address)", "baeeddfc": "Ublasti(uint256,string,string)", "baef73e9": "expiryOf(uint256)", +"baefbfc4": "DeleteOwner(address)", "baf00f76": "removeAllSubUsers()", "baf03586": "calculateBaseGet(uint256,uint256,bool,uint256)", "baf05a87": "hodl_interval()", +"baf11290": "pre_kyc_iconiq_bonus_numerator()", "baf11cab": "isCommitted(uint256,address)", "baf1256f": "withdrawToPlayer(address)", +"baf13a0a": "BASE_SUPPLY()", +"baf260e1": "withdrawDai(uint256,address,uint256,bytes,bytes)", +"baf2910b": "setOTC(address,address,uint256,uint256)", +"baf2f868": "t2()", "baf30051": "token_issued()", +"baf358b7": "take(bytes32,address)", "baf38352": "buy_for(address)", "baf3a4d4": "distDivRate()", "baf3d262": "Tickets_Sold(string,uint256)", "baf3ef13": "disableNode()", "baf44453": "FundAccount(address,address,address)", +"baf492d5": "changeInsuranceFees(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256)", "baf4960d": "createPlanet(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"baf4c8c1": "SetPhase(uint256,uint256,uint256,uint256)", +"baf4e136": "TIMEOUT2()", "baf4ec53": "sumICOStage3()", "baf4f6d1": "_endContestIfNeededStalemate()", +"baf5326e": "addTarget(address[],uint256[],uint256[])", "baf539ee": "changeGasLimit(uint256)", +"baf58c97": "networkGrowthPoolWallet()", "baf5fbff": "PreIcobonusEnds()", "baf652fe": "bonusThresholdWei()", +"baf66ce5": "writeNoInput()", "baf6f9ca": "saleis(bool)", +"baf6fabc": "isPositionOperator(uint256,address)", "baf6fd32": "setintertoken(address)", +"baf71609": "g(uint256[])", "baf73c0f": "holdingsOf_BULL(address)", "baf79eb4": "removeDealInternal(bytes16)", +"baf7e66e": "offerLegendaryResultForSale(uint256,uint256)", +"baf8267c": "test1(address,address,address)", "baf8809b": "releaseTimeLock(address)", "baf8c622": "_SUTokenContract()", "baf9b369": "post(bytes)", @@ -107027,111 +195810,202 @@ "baf9d0cf": "getRoundAwardTicketNum(uint256)", "bafa090d": "breakup(address,uint256)", "bafa9c9d": "FighterUpdated(uint256)", +"bafb3f59": "winnersOnlyTimestamp(uint256)", +"bafb8ceb": "getAllSireOffers()", "bafb8e83": "marketSupply()", +"bafbf5df": "getAttribute(address,uint8)", "bafc1437": "getPurchased(uint256)", "bafc7fe9": "zero_fee_transaction(address,address,uint256,uint256)", +"bafc9fc9": "burnDenominatedInDai(uint256,bytes)", +"bafcae1e": "lookupMarketCompound(address)", +"bafcd416": "bullPerBlock()", "bafcea6f": "dataSourceGetYellowCards()", "bafd244f": "setAmbassadorAddress(address)", "bafdaf5e": "_getTargetBlock(uint256)", +"bafdbbf7": "claimFanny(address)", "bafdebf3": "getServerAddress(string)", +"bafe0c84": "scarcityAddress()", +"bafe4f14": "masterContractOf(address)", "bafe648d": "BerithCoin(uint256)", +"bafe871c": "getPersonalBalanceWithFundingPayment(address,address)", "bafedcaa": "lastRewardAmount()", +"baff15ce": "listPool(address,address,uint256)", +"baff343a": "wNxmValue(uint256)", "baff4609": "lockTokenForNode(uint256,uint256,uint256)", +"baffa474": "Erc721AmountMustEqualOneError(uint256)", "baffa903": "getStartPrice()", "baffed2a": "disallowWrite(uint256,address)", +"bafff8c0": "table(uint256)", "bb004abc": "reserveManager()", "bb005d4f": "setPlayerResearch(address,uint256)", "bb007db9": "getSalaryTokenCount(address,address)", +"bb00b248": "priceRequest(address,uint256)", "bb00c8f9": "ownerMintAmount()", "bb00faca": "bonus02()", "bb00fc55": "bookEarnings()", "bb013206": "addNewCertificate(uint256,bytes32,bytes32)", "bb0165b1": "setContractAddress(uint256,address)", "bb01aa39": "unreserve(uint32)", +"bb01c612": "DepositToken(address,address,uint256,uint256)", +"bb01d725": "getPriceFromOracleActual(address[],uint256)", +"bb01ef9c": "OnRewardWeekly(address,uint32,uint32,uint256)", "bb01fb1f": "Issue(uint64,address,uint256)", +"bb032a66": "list(address)", +"bb038e15": "cdpManager()", +"bb039300": "change_dAddress(address)", +"bb03a58e": "isOpenRansom()", "bb043d53": "MinimalPayValue()", "bb053484": "getInitializeFeePerEthInAttoethValue()", +"bb0544a1": "initialize(address,address,address,uint256,uint256,uint256,address,address,address)", "bb056781": "purchaseGas(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bb0571dc": "uniswapV2FactoryAddress()", "bb057c5e": "proposedImplementation()", +"bb058a19": "DrinkCreated(uint256,string,address)", "bb05ca52": "JadeCoin()", "bb061fb5": "addWhite(uint256,uint256,uint256,bool)", +"bb0681e1": "customTimeLockFunctions(uint256)", +"bb069f43": "Ube()", +"bb06c473": "batchPushResult(address[],bytes4[],uint8[],uint248[])", "bb07576d": "voteToUpdatePrenup()", +"bb07bacd": "latestSubmission(address)", +"bb07c503": "currentTaskReceiptId()", "bb083c2b": "substractFee(uint256,uint256)", "bb08b247": "showAuction(string)", "bb08c6c3": "o_desafiante(bytes14)", "bb0936f7": "first_bonus_amount()", +"bb099ee3": "escrowBalance(uint256)", "bb09adbb": "privGoal()", +"bb09d9b7": "USDC_ADDRESS()", "bb0a420a": "user(address,address)", +"bb0a5d39": "getKudoerInfo(address)", "bb0a64b6": "batchTransfer(address[],uint256[],address)", +"bb0a6732": "addArtwork(address,uint256,uint256,bool)", +"bb0abba7": "ZapInTokenVault(address,uint256,address,bool,uint256,address,bytes,address)", +"bb0b248f": "offerors(uint256)", +"bb0b86ff": "submissionBaseDeposit()", "bb0bcbff": "AddPoolMember(address,string)", "bb0bef19": "validateFile(address,uint256,bytes,bool,bool)", +"bb0c071a": "lockAddresses()", "bb0c08b6": "getDebitNonce(bytes32)", +"bb0c6df6": "getPeeStaked(address)", "bb0c8298": "minimumAmount()", "bb0c8893": "claimUnrelatedTokens(address,address)", +"bb0cd5bb": "openDeposit(address,uint256,uint256,uint256,uint256)", +"bb0ce54f": "closeExchangeToken()", "bb0ce7d3": "TotalHoldersAmount()", "bb0d6fb6": "noCount(uint256)", "bb0d7f9a": "listTCC()", "bb0db551": "add_32(uint32,uint32)", "bb0e01fd": "isError(uint8)", +"bb0e1280": "setDemurrageParameters(uint256,uint256,uint256,uint256)", +"bb0f2e8d": "takeEverything()", +"bb0f8b6d": "enableSale(bool)", "bb102aea": "totalSupplyCap()", "bb10b2f1": "PRE_SALE_BONUS_PER_CENT()", +"bb10cbb5": "setLoanEnabled(bool)", +"bb1103c3": "approveERC20(address,address,address,uint256)", "bb119f6e": "productInfo(uint256)", "bb11ed7e": "rescueTokensInMultiplePolls(uint256[])", "bb128575": "StopSell()", +"bb12da5b": "hasProxy()", "bb13245f": "decimalsMultiplier()", "bb133331": "trusteeContract()", +"bb1365ca": "btcb()", +"bb13f383": "PlayerResult(bytes32,address,uint256,uint256,uint256,uint256)", +"bb141cf4": "getBlockInfo(uint256)", "bb1488d8": "_newAuction(uint256,uint256,uint256,uint256)", +"bb148a31": "choice1ETHBet(address)", +"bb15502f": "setConfig(address,address,uint256,string)", +"bb1570da": "setBurnPercent(uint256)", "bb1583fc": "isBatched()", "bb158dd5": "addToTokenLocked(address[])", "bb15ac8e": "readBool(bytes32)", "bb1630f2": "getAllSigs()", "bb169da5": "Diploma_landing_page()", +"bb16efc0": "getmatchAdv(uint256)", +"bb1705eb": "approve_874(address,uint256)", "bb1757cf": "claim(address,bytes)", "bb17a938": "toRlp(uint256)", "bb17c8cc": "round2StartTime()", "bb17e050": "Nullify(address,address,address,address)", "bb18705c": "_buildSettleId(bytes,bytes)", +"bb18fb69": "getLoanDataArr(address,address[])", "bb1953fe": "updateSeed()", +"bb196120": "editarDatosOwner(string,uint256,uint256,string,uint256,string)", +"bb198024": "FINAL_PRICE()", "bb1a473b": "VOLUME_25()", +"bb1a47ca": "getMySquid(address)", "bb1a5aad": "flipFinalizedSwitchTo(bool)", +"bb1a8617": "clientStructs(address)", "bb1ad687": "gateKey()", "bb1adf9b": "DURATION_BEFORE_RESTORE_UNSOLD()", "bb1af82b": "Test3()", "bb1b21ed": "RefCommission(uint256,uint256)", +"bb1b4269": "balanceOfPower(address)", "bb1b99ce": "isCurrentUserAdministrator()", +"bb1c3a96": "storageKey()", +"bb1c869d": "Closed(uint256,uint256)", "bb1c9351": "redeemNativeToken(bytes32,address)", "bb1cc065": "buy_lovelock_withLOV(bytes32,string,string,string,uint256)", "bb1d1cf9": "tier_rate_3()", "bb1d45fc": "setOtherManager(address,uint8)", +"bb1d660c": "BOARD_RESERVED_PERSENTAGE(uint256)", +"bb1d6ea2": "Cat18(address,uint256)", "bb1d7ffa": "weddingdate()", "bb1dfeca": "buildId3(address,uint256)", +"bb1e23cb": "paidCall(address,uint256,bytes)", "bb1e54bc": "TokenCrowdsale(address)", +"bb1ec2bb": "paidAutoPoolGain(uint32,uint8,uint256)", "bb1eeb59": "totalWeiAmountSale2()", +"bb1f3e3a": "setTransferFreeAmount(uint256)", "bb1f602e": "FailingDeployment()", +"bb1f807e": "approveDoctor(bool,uint256)", +"bb1f88fb": "withdrawServiceChargeTokens(uint256)", +"bb1fbac9": "FinalizedRefunds()", +"bb202d7b": "playerRewardOf(address)", "bb205c84": "getDownVoteCount(bytes12,bytes12)", +"bb205d8c": "Validator(address,uint256)", "bb210372": "getPresale(uint256)", +"bb212fa3": "chechSig(bytes,bytes32,bool)", +"bb21755e": "PROVGAS()", +"bb2213e7": "newBill(uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,string,string[])", "bb221cc8": "Hadescoin(address)", "bb221e4b": "FuelToken()", +"bb226c60": "_feeTransfer(address,uint256)", "bb22d75c": "PROMOTION_PROGRAM()", +"bb232f09": "LogStartPreSaleRound()", +"bb23a8e3": "RequestUpdate(uint256)", +"bb23ae25": "lastAnswer()", "bb23e3a9": "arr(uint256,uint256,uint256)", "bb23ef74": "setOwnerTestValue(uint8)", "bb2408e6": "PERCENT_DELIMITER()", "bb245283": "getHatchDurationMultiByGeneration()", +"bb24882e": "getOpenInterest()", +"bb24cdf7": "paybackOnBehalf(address,address,uint256,uint256,address)", "bb24f0dc": "operationsLength()", +"bb2504cc": "updateTimestampDifference(uint256)", "bb2559ca": "initialTokenBalanceFetched()", "bb256f68": "VaultCountPerProcess()", "bb25b143": "DrawReadyToPayout(uint32,uint8,uint8,uint8,uint8,bytes32)", "bb25bd15": "addWin(address,uint256)", "bb25fd7f": "SODIUMTOKEN()", "bb262080": "JaroSleep(address,uint256)", +"bb263a21": "operatorVoteTwo()", "bb26d9d1": "requestCosign(address,uint256,bytes,bytes)", +"bb26efc8": "getRestrictionData()", +"bb2783fc": "UniSwap_Zap_ContractAddress()", "bb27e19e": "getlen(bytes32,bytes32)", "bb280cba": "addBackers(address,uint256,uint256)", +"bb28353e": "Refund(address,uint256)", "bb287679": "mainFabricAddress()", +"bb28b451": "claimAndAddReferralSpin(uint256,uint8,address)", "bb28c3f2": "setNonce(string,uint256)", +"bb290753": "comaddr()", "bb29998e": "test(address)", +"bb2a0980": "getLoanAmount(uint256,address)", "bb2a51d1": "setSecurityGuard(address)", "bb2a7d0c": "addVestingSchedule(address,uint256[],uint256[])", +"bb2ab2ee": "enableRule(string)", "bb2aebe3": "createAssetPack(bytes32,string,uint256[],bytes32[],uint256)", "bb2bded0": "trinityDataContract()", "bb2c5ad7": "hasRandom()", @@ -107139,20 +196013,34 @@ "bb2ced1b": "previousFounders()", "bb2ced25": "startPoll(address,address,bytes32,bytes32,uint256,uint256)", "bb2d713e": "sells(uint256)", +"bb2d7f3a": "rewardsTotal()", +"bb2daa73": "idToIpfsHash(uint256)", "bb2dc863": "getChildBlock(uint256)", "bb2de15a": "TicketsBought(uint8,address,uint16[])", "bb2e6904": "hopeCoin(uint256,string,string)", +"bb2e75d5": "synthToEth(bytes32,uint256)", +"bb2e8047": "setRng(address)", "bb2eb4d2": "ONE_PERCENT()", "bb2eb982": "impl_rewardsFactor()", "bb2ebf83": "CostChip(address,uint32)", "bb2f159b": "read_i32()", +"bb2f2ef1": "RetrieveFinished()", "bb2f3228": "EOCSToken(uint256,string,string)", +"bb2f666c": "updateVaultData(string,address,address,uint256)", +"bb2f7199": "lockLiquidity()", "bb305ef2": "getBondOwner(uint256)", "bb3084db": "ICOStarted(uint256)", "bb30d796": "releaseAllocation(address)", +"bb3162d8": "blockIncreaseWhenRevalue()", "bb316f06": "contributeForAddress(address)", +"bb31878e": "BuyPlatinum(address,uint256,uint256)", +"bb318c42": "addDepot(address)", +"bb328a7d": "getPayment()", "bb32b6f8": "receivedCWC(address,uint256)", +"bb32c7a8": "assemblyGetEthToToken(address,uint256,bytes4)", "bb33072f": "refundToInvestor()", +"bb33797b": "allowPancake()", +"bb33c32d": "addPairAddress(address)", "bb33d729": "unpauseSale()", "bb33e730": "MoveTokens(address,address,uint256,string)", "bb340909": "initPecul()", @@ -107161,273 +196049,501 @@ "bb35783b": "move(address,address,uint256)", "bb35b29c": "MintIND(address,address,uint256)", "bb35f7ee": "rocketTravelTimeByResource(uint256,uint256)", +"bb3609b4": "isBTCPool()", "bb3611e7": "BonusWhiteListCrowdsale(uint256)", "bb36a233": "customtransfer(address,uint256)", +"bb36a61e": "winners(uint256,address)", "bb36e5d0": "returnExternalPayments(address,bool,bool)", "bb36ef7b": "addManyToKyc(address[])", "bb370bad": "orderWasValid(uint256,uint256,uint256,uint256)", "bb371fdd": "setMaxDeposit(uint256)", +"bb3751d8": "AddressInfo(address)", +"bb375f24": "nyaToLp0Route(uint256)", "bb37a162": "payAdvertisers(bytes32)", +"bb380d51": "changeTokenStatus(address,bool)", "bb389952": "unlockFounder()", "bb38be10": "notifyCharge()", +"bb38ce50": "setDevFundDivRate(uint256)", +"bb39694b": "bidToken(uint256,uint256)", "bb397161": "createNonRepeatableVpfFactory(string,bytes32,uint256,int256[])", "bb39a960": "trade(address,uint256,address,uint256)", "bb39c85f": "getTotalOwedTokenRepaidToLender(bytes32)", +"bb39cc3c": "registration(string,address)", "bb39ea60": "MIN_ACCEPT_ETHER()", "bb3a304f": "setFundingLock(bool,address)", "bb3a77ae": "ROLE_ARBITER()", +"bb3acde9": "issue(address,uint256,bytes)", "bb3b2a35": "withdraw_4()", +"bb3b4ff7": "terneryBranches(uint256,bool,bool,bool,bool)", "bb3b8dca": "getCertificateHash(bytes)", +"bb3b9697": "alreadyenrolled(address)", +"bb3bafd6": "getRoyalties(uint256)", +"bb3c15de": "OrdersPaid(uint256)", +"bb3c2bfe": "ownerWallet3()", +"bb3ca2ce": "getBlockedAccountCount()", +"bb3cb7c2": "_deposits_brrr(address)", "bb3ce7fe": "DepositHolder()", +"bb3cec1f": "GrabName(string)", "bb3cf577": "AddressListed(address,uint256)", "bb3d13c5": "addValidation(address,bytes32)", +"bb3d2435": "Winner(uint256)", +"bb3d493d": "_genBlockStart()", "bb3d5af2": "GetClaimCount()", "bb3d9326": "YTC()", +"bb3d995d": "LAND_REGISTRY_PROXY_ADDRESS()", +"bb3dabe8": "initializeAddress(address,address,address)", "bb3e409a": "buyEggs(uint256,address)", "bb3e443b": "FDataToken()", "bb3e5b0a": "setPI_edit_34(string)", +"bb3e8e1d": "TokenList(address)", +"bb3ea12e": "setSurplusAuctionDuration(address,uint256)", +"bb3ea8c4": "transferobelixTokens(uint256)", +"bb3eb1c1": "approve_240(address,uint256)", "bb3f0390": "min_inv()", "bb3f5330": "revertFunds()", "bb3f5b7d": "totalTransfer()", +"bb3f7305": "sendFeeFunds(address,uint256)", +"bb3f9cdd": "setStakes(uint256,uint256)", "bb3ff0bd": "TITSCOIN()", +"bb412cf7": "initialPwdrReward()", "bb41f421": "payerPercent()", "bb424892": "minimumCost()", "bb427d8a": "enterBet()", "bb42de92": "getSubscriberContentCount()", +"bb42e2ae": "checkRemainingTokens(address)", "bb43a11e": "getHashOf(address)", +"bb43b690": "LogTokenPricesSet(uint256[],uint256[],uint256[],uint256[],address)", +"bb43c29a": "transferOwnershipToNewController(address)", "bb440715": "getPoolBonusExpertFactor(uint256)", "bb440b82": "funComputeRoundPrice()", +"bb444a3a": "requireAndKey2Address(bytes32,string)", "bb445084": "getRDividends(address)", +"bb445161": "WETHMIN()", +"bb446f53": "Communityrelease()", +"bb4480ef": "setCoRate(uint64,uint256)", +"bb448a22": "transferManyViaSignature(address,address[],uint256[],uint256,address,uint256,uint256,bytes,uint8)", "bb449782": "setCommunityAccount(address)", +"bb44b9b9": "founderOffer()", "bb44e08d": "updateOrderNumber(uint256)", "bb452ea7": "objectDoublet()", +"bb453071": "FoundersTokenAllocationChanged(uint256)", "bb4534f1": "addrecruit(address,address,address,address)", "bb453d5a": "CBCToken()", +"bb456af3": "stakeWithReferrer(uint256,address)", +"bb45a335": "setXethBP(uint256,uint256,uint256,uint256,uint256)", "bb45d09d": "getCurrGameInfo()", "bb471d73": "getRealAmountBonus(uint256,uint256,uint256)", "bb472219": "resetGame()", "bb472c93": "bet2deltaOf(uint256)", "bb476637": "deliverTokensAdmin(address,uint256)", +"bb47c9b3": "getStats(uint256,uint256)", "bb48156a": "preSaleRound()", "bb4872de": "stoppable()", +"bb48cd3a": "updateProxyAdmin(address)", "bb48d190": "upgradeToPremium(bytes32)", +"bb498c27": "updateArtworkContract(string)", +"bb49d79d": "changeSymbol()", +"bb4a08b8": "ExpiredProposalIds(uint256)", "bb4a7f18": "getAllBusinessOwners()", "bb4b236a": "CSToken(uint256,string,uint8,string)", +"bb4b5734": "EXPIRATION()", "bb4b7bd0": "listForSale(uint256,bytes32)", "bb4c006c": "checkDeletable(address)", +"bb4c1ad7": "DepositTo(address,address,address,uint256,uint256)", +"bb4c2168": "convertToBytes32(bytes32)", +"bb4c6496": "receivedTimes()", +"bb4c6f5d": "Take_All()", "bb4c9f0b": "multiSend(address[],uint256[])", +"bb4cb967": "SellTokenToETH(address,address)", "bb4cbd0b": "gracePeriodStopBlock()", "bb4d0cb5": "FSC3()", "bb4d4b2f": "addVestingAccount(address,uint256,uint256)", +"bb4d7363": "playersToId(address)", "bb4d7cd1": "tag(uint256,string)", "bb4d9e22": "WithBonusPeriods()", "bb4e3f4d": "add(uint8,uint8)", +"bb4ef3b3": "myswapExactTokensForETH(uint256,address,address)", +"bb4f1912": "setRewardLockTime(uint256)", +"bb4f288d": "shipItem(uint256,address)", +"bb4f28df": "authorizePayment(bytes32,address,uint256)", "bb502bac": "EthbetOraclize(address,address,uint256)", "bb502dd9": "checkExchangeSupported(bytes32)", "bb504317": "divest(address,uint256)", +"bb506a26": "setTakerLeverage(uint256,uint256)", "bb50c67a": "crowdsaleRunning()", "bb510a77": "createChannel(address,uint256)", +"bb5153cf": "deployAndHandleBridgedNFT(address,string,string,address,uint256)", "bb5166e7": "getPaymentType(address,uint256)", "bb5196d6": "setParams(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb51d2ab": "ISEND()", "bb51de39": "IDEAL()", +"bb51de94": "deleteUniPair(uint256)", +"bb51e8eb": "tlrRewards(uint256)", "bb51f32d": "withdrawTeam()", +"bb522c8c": "setSwapConverter(address)", +"bb5260e4": "dflAddress()", "bb52ca2c": "getOrgClaimsCount(address)", "bb537ced": "matchesDelay()", "bb540231": "totalFartsReceived()", "bb542ef0": "setOwnerWallet(address)", "bb5530c4": "updateCampaign(uint256,string,string,string,address,address,address,string)", +"bb559dbf": "clearAnchorDecimals()", +"bb55b893": "markWithdrawn(bytes32)", +"bb5639c6": "_poolRewardDistributionIntervalMinutes()", +"bb5661e3": "itemIdToTraitValues(uint256,uint256)", +"bb56849a": "lexDAOtransfer(address,address,uint256)", +"bb568f45": "safeSmokeTransfer(address,uint256)", +"bb569627": "getBNBStakedByUser(address)", "bb56a683": "guaranteedBuyersBought()", "bb572896": "consolationRewardsRequiredFaith()", "bb57349c": "handleSaleClaimCallback(address,uint256)", "bb575333": "sessionEndTime()", +"bb575a8f": "add_2(uint256,uint256)", +"bb57a088": "_ensureCallerIsOwnerOrDeadmansSwitchActivated()", +"bb57ad20": "distributeFees()", +"bb57e1bd": "OnGetAward(address,uint256,uint256,string,uint256,bytes32,uint256,uint256,uint256,uint256,uint256)", +"bb580014": "RemoveGemmyMusicLock(address)", "bb582db6": "mgmtBodyAddress()", +"bb583f19": "getCastleWinLose(uint32)", "bb584a3a": "EventCancelAuction(uint256,address)", +"bb58aef6": "hasPermission(uint256)", "bb59b48c": "payableWeiReceived()", "bb59d68c": "DariaRotkoToken()", +"bb5a05ed": "averagesDownstakesOfBoosted(bytes32)", "bb5a1149": "myReferee()", +"bb5a3dfd": "computeReleasableNerd(address)", "bb5a4f4c": "placeBet(uint256,uint256,uint256,uint8,bytes32,bytes32)", "bb5a7ca0": "extendEventStartsTime(bytes32,uint256)", +"bb5a9417": "approve_418(address,uint256)", +"bb5ada95": "setBFX_Reward_Holder(address)", "bb5adf14": "setProxyManagementContract(address)", +"bb5b2645": "netFundingPerUnit(uint256,uint256)", "bb5b3edc": "emergencyWithdraw(uint256,bool)", "bb5b5203": "toggleActions()", "bb5b586b": "usdPerKEther()", "bb5b6aa4": "myInner2()", +"bb5b6c35": "GetGift_spon(uint256)", +"bb5bc87f": "exchangeLockTime()", "bb5bf0c3": "WisdomWorldStandardToken(uint256,string,uint8,string)", "bb5c3821": "total_ICO_supply()", +"bb5d3639": "approve_554(address,uint256)", "bb5d3bcb": "tokensPromotion()", "bb5d40eb": "isValid()", "bb5d69a0": "setEns(string,address)", +"bb5dcd95": "redeemBPro(uint256)", "bb5ddb0f": "sendMessage(address,bytes)", "bb5e0696": "LongTermReserveMinted(address,address,uint256,uint256)", +"bb5e34ef": "SENIOR_MEMBERLIST_ADMIN1()", +"bb5e3cc2": "tokenPerBlockForReward()", "bb5e3d3b": "doThing(string)", "bb5e5875": "InseeCoin()", "bb5e78a4": "HasSigningPermission(address)", "bb5e9dec": "get30Artworks(uint16)", "bb5e9eab": "thirdWeek()", +"bb5ed5da": "pendingSUB(uint256,address)", "bb5f4629": "orders(address,bytes32)", +"bb5f5155": "LevelUpdated(address,uint256,uint256)", "bb5f747b": "isWhitelistAdmin(address)", "bb5f95fe": "LSECoin()", +"bb5fac06": "initUniswap(address)", +"bb60160e": "setExchange(address,address)", "bb602e80": "Volkscoin()", +"bb603320": "isRole(uint8)", +"bb618c4a": "EvLotteryNumbers(uint256,uint256,uint256[])", "bb6198dd": "getOrCacheTargetReporterGasCostsWasCalled()", +"bb624671": "approve_204(address,uint256)", +"bb62b3e2": "updateClientKey(address)", "bb632244": "btcs()", +"bb633ca9": "initializeGovernable(address)", +"bb63b01f": "redeemForBuyoutFailed(uint256)", +"bb63d954": "get_pricefeeds()", "bb642f65": "seedCreatedCount()", +"bb648ab9": "changeImageOfToken(uint256,string)", "bb64c09b": "KIMEX(address,address)", "bb64c79e": "SearchTimeBlocknumber(string)", "bb64e420": "getTransactionByTransactionId(uint256)", "bb6534a9": "AMOUNT_TeamSupport()", +"bb654efa": "eggs(uint256)", +"bb65cbf0": "setRewardClaimFee(uint256)", +"bb65ccbc": "initialize(uint8,uint256)", +"bb65f02a": "ChangeName(address,string)", +"bb660d81": "isVoted(uint256)", +"bb664db2": "rewardChecking(address)", +"bb674f20": "documentos(uint256)", +"bb675355": "commissionRate(uint256)", +"bb67643a": "pauseDaysCA()", "bb67be65": "AFUN(address,uint256)", +"bb67e65a": "nextFreeProposal(address)", "bb68b86f": "maxTokensToDistribute()", "bb6954ce": "BourseToken()", "bb6996a5": "swapWinner(uint256,bool,uint256)", "bb6a0853": "GreedPit()", "bb6a0f07": "tasksCount()", "bb6a1427": "testThrowRestartEnforceRevisions()", +"bb6a47f1": "setYoutuber3(address)", "bb6a55bd": "_mintToken(address,uint256)", "bb6ad6ef": "withdrawTokenId(uint256)", "bb6af3da": "limit9()", "bb6af543": "setJackpotPayRate(uint256)", "bb6b13a1": "tier1()", +"bb6b275b": "API_RepaymentTicketDelegate(address)", "bb6b38bb": "setAdminAddressForComissions(address)", "bb6b4619": "SendETC(address)", +"bb6bd614": "setImmediatelyWithdrawableLimitPublisher(address)", "bb6c1178": "RentToken()", "bb6c4827": "burnThis(uint256)", "bb6d0132": "End_Promotion()", "bb6d203c": "spend(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"bb6d887f": "LEVEL_PRICE(uint8)", "bb6d8c77": "contractPoweredUp()", +"bb6e53ce": "spinTokens(uint256)", "bb6e7de9": "endContract()", +"bb6e85db": "getLockByIdx(address,uint32)", +"bb6ebe80": "setColPartRange(address[],uint256[],uint256[])", +"bb6ef776": "LogStarted(uint256)", "bb6f0f0f": "fetchAllCandidatesBySnapshotBlock(uint256)", "bb6f175f": "SimpleAquaPriceOracle(uint256,uint256)", +"bb6f2ca5": "getInterestPayout(address)", "bb6f6c15": "protectedDenominationOfOrigin()", "bb7029a9": "gameCollapse()", "bb702c8e": "discard()", +"bb706809": "_batchAddNewToken(address[])", "bb707059": "approveMany(address[])", "bb70abfa": "_computePVPBeneficiaryFee(uint256)", +"bb714359": "platformCoefficient()", +"bb716c68": "getOrderLength(string)", "bb718861": "scheduleCall(address[2],bytes4,bytes,uint8,uint16,uint256[6])", "bb71a7c3": "makeInvestment(address,address,uint256,uint256,address)", "bb72680c": "getHasPermission(address,string,string)", +"bb7291f3": "createNewEscrow(address,uint256,address,uint256)", "bb72b12d": "oldOwnerProfit()", +"bb72f8ea": "intendedBorrowRatio()", +"bb72f957": "notAccept(uint256)", "bb731f98": "Excalibur()", +"bb736f4b": "MINIMUM_TRADE_SIZE()", "bb73703f": "delRoleForUser(address,string)", +"bb73c562": "allDelegation(uint256)", +"bb73eb49": "approve_578(address,uint256)", "bb7436a7": "getUsersDroidsIds()", "bb74a5a0": "testValidationOfDoubles()", "bb74b4e6": "TOKEN_SUPPLY_OWNER()", "bb74dcda": "isRefunded(address,address)", "bb750232": "allowReceiver(address)", "bb75a2a9": "throwMe()", +"bb76559e": "CheckState()", +"bb76bd29": "dragoRegistry()", "bb76d8a5": "TimeLock()", "bb777028": "PRE_ICO_BONUS_TIME_3()", "bb777498": "calculateId(string,string,string)", "bb77b136": "planetAuction()", +"bb77b16f": "putIntoBlacklist(address)", "bb77d7d8": "ConunToken(uint256,string,uint8,string)", +"bb7828fa": "setAjioToHalf()", +"bb7831d5": "mnePerDay(uint256)", "bb784140": "AragonTokenSaleMock(uint256,uint256,address,address,uint256,uint256,uint8)", "bb7859b5": "periodThree()", "bb785f0e": "AirDropPayBitsR1(address[])", +"bb7887e9": "test3(uint8,address)", "bb78d159": "approveTokenControlInfo(uint256)", "bb79428c": "RateUpdate(string,uint256,string,string)", "bb7963e3": "hasArbiterVoted(uint256,address)", +"bb7a109b": "trustedRSV()", "bb7a6dba": "vestingHasStarted()", +"bb7aa367": "closePaused()", +"bb7b82b6": "log_2(bytes16)", +"bb7b8b80": "get_virtual_price()", +"bb7bb278": "agreementCount()", "bb7c15ab": "createDog(uint256,uint256)", "bb7c62cb": "getReferrerBonusTokens()", "bb7cb80b": "dropOffset()", "bb7d064f": "automatedReport(uint256[])", +"bb7d33f8": "packsPurchased()", "bb7d4f65": "ICOFFSHORE()", "bb7d715b": "startEthToCentsRateUpdateCycle()", +"bb7db981": "ResetPINPUK(uint32,address,address,address,address,address)", +"bb7dd5e6": "settingsManager()", "bb7dd72d": "finishMintingStruct()", +"bb7df172": "setMaxEthPurchase(uint256)", +"bb7e48e7": "approve_127(address,uint256)", +"bb7e683d": "trackingRun(uint256,uint256)", +"bb7e70ef": "build(address,uint256,address)", +"bb7e7f16": "get_unused_invoke_id(string)", +"bb7e9f5b": "investorDeposited(address)", +"bb7ef7e0": "computeRewardBalanceOfOperator(bytes32)", +"bb7f2054": "getieoCoinInfoByDao(address)", "bb7fa4ac": "sellCeiling()", "bb7fb08b": "getContributor(address,uint256)", +"bb7fb802": "test_pop()", +"bb7fddec": "_enabledLock()", "bb7fde71": "mint(address,uint256,uint256,string)", "bb7fe5c9": "LotteryAdmin(address)", "bb7ff992": "requestSellforETH(uint256)", +"bb7ffe1c": "Display(address,address,uint256,string,string)", "bb806dc9": "initial()", "bb813a9b": "KkkTokenSale(uint256,address)", "bb814746": "ICO_TWO()", "bb814e9e": "versionExists(bytes32)", "bb818ea6": "advancedNETH(uint256,string,string)", "bb81926d": "_applyCommission(uint256)", +"bb820400": "setAiVault(address)", "bb822605": "calculateTokensTier(uint256,uint256)", "bb826e50": "maxBlockActions()", "bb828f11": "setChallengeRewardsPercent(uint256)", +"bb82aa5e": "comptrollerImplementation()", +"bb8342c1": "createAuction(address,address,address,uint256,address,uint256,uint256)", +"bb834b0e": "minor()", +"bb836c90": "ethFeeForSellerLevel1()", "bb83a01f": "MyTALToken()", "bb843219": "closingDateFunding()", +"bb8435ec": "oldAddress()", +"bb84a918": "_tradeUserAsset(address,address,address,uint256,bool)", "bb84d362": "splitProfitVIP_only_Dev()", "bb850e01": "_transferOwnershipOnBuy(address,uint256,address)", +"bb852dbf": "liquidity(uint256,uint256,uint256,uint256)", +"bb8545a7": "test_DSProxyExecute2Values()", "bb85931b": "eSTATERToken(address,address)", +"bb85c0bb": "getMarketBorrowRate(address)", "bb862588": "getCET6ScoreById(uint32)", +"bb865ac0": "tokenToOwner(bool,uint256)", "bb86d8fe": "CPGPEREGRINE_FTL_SPEED()", +"bb86de8c": "proposeTasks(bytes32,bytes32,bytes)", +"bb872b4a": "setRewardPerBlock(uint256)", +"bb874e7f": "f128(uint256)", "bb878f2a": "ProposalAdded(uint256,uint256,string)", "bb87b5f8": "getPersonalStatus(address)", "bb87c1f2": "getAllowedUsers(address,uint256)", "bb889341": "ZiberToken()", "bb88c016": "decreaseApproval(uint256,address,uint256)", "bb898233": "getAct()", +"bb8a67aa": "price_wei()", +"bb8a88bb": "addLiquidityETH(uint256,uint256,uint256,address,uint256)", "bb8ab48c": "Bluechip()", +"bb8b0df4": "setIlkMinAuctionBidIncrease(address,uint256)", "bb8b2b47": "getUserContribution(address)", "bb8bbc90": "ContractEFT()", "bb8bcc46": "crowdSaleCap()", "bb8be064": "HardwareToken()", "bb8bedc9": "setMasternodeCandidate()", "bb8c256a": "ecadd(uint256,uint256,uint256,uint256)", +"bb8c6d6c": "setLoanLiquidationOpen(bool)", "bb8c7ce4": "ContributionReceived(address,bool,uint256,uint256,uint256)", "bb8c869d": "contestOver()", "bb8c9797": "claimReward(string)", +"bb8cdb3c": "gonnaChangeBurnRate(uint256)", +"bb8d2db9": "PropertyChanged(uint32,uint32,uint32,uint8,string,string,string,uint256,uint256)", "bb8d35ce": "medibitToken()", "bb8dc735": "getNonceCompareOp()", +"bb8e5b57": "updateMinimumAmount(uint256)", +"bb8e625d": "PREFERENCE_MAX()", "bb8e8f46": "isExecutionAllowed()", +"bb8ee1c5": "salesInfo(address)", "bb8f0dd2": "PonziSeller()", "bb8f712f": "generateGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb8f7c52": "setLsdAddress(address)", "bb90617b": "toUINT112(uint256)", "bb90cec2": "setNewRound()", "bb911607": "percents(uint256,uint256)", "bb912454": "setKNCPerEthRate(uint256)", "bb913f41": "_setImplementation(address)", +"bb91c330": "_totalReferReward()", +"bb91c339": "strategyInfo(uint256)", "bb91f8ae": "ownerTransferAllEther()", "bb925c19": "_selectWinner(uint256)", +"bb927c46": "numLenders()", +"bb9286d9": "deposit12m(address,uint256)", +"bb9356c6": "changeManagerAddress(address)", +"bb941b6a": "burnHxyf(uint256)", +"bb941cff": "lockedToken(uint256)", "bb94392e": "getRemainingTokenForArticle(string)", "bb945177": "produceTokens(address,uint256,uint256)", "bb9453a5": "assetProperties(address)", "bb95024c": "DevilsCoin()", +"bb957095": "upcomingLevel()", +"bb957493": "salvageTokens(address,address)", +"bb958692": "yourStakedHDG(address)", "bb95d992": "blockhashes(uint256)", +"bb95e70a": "iReferral()", +"bb95fa15": "setGoldenID(uint256)", "bb963c8a": "transferLibOwnership(bytes,address)", "bb969132": "getLandEstateId(uint256)", "bb9694f3": "Eth()", +"bb96a8a6": "TileClaimed(uint16,address,uint256,uint256)", +"bb96e90c": "getTokenUniswapPair()", +"bb9704e0": "addLockUser(address,uint256,uint256)", "bb971094": "finishAirdrops()", "bb979c3d": "getHotelsByManager(address)", +"bb9878dd": "approve_396(address,uint256)", +"bb9928c6": "setBuyBackRate2(uint256)", "bb9932a7": "addressReserveSupply()", +"bb993791": "countSuccess(bytes32)", +"bb994d48": "revokeStrategy(address)", "bb996043": "returnPtSafeXLarge()", "bb99999c": "TokenLinked()", "bb99dec1": "MoldCoin(uint256,address)", +"bb9aa28f": "getCandidatesCount()", +"bb9aad0a": "AddSalesEvent(uint16,uint128,uint256,uint256)", "bb9b02a8": "evLockFund(address,uint256)", "bb9b13d8": "getTotalInterestAmount(address)", "bb9ba82d": "Florijn(uint256,string,string)", +"bb9c0238": "setupTeam(address)", +"bb9c15d8": "EMPTY_BUD_ENERGY()", "bb9c3f2b": "minWager()", "bb9c6c3e": "verify(string)", +"bb9d1814": "getCurrentXP(uint256)", +"bb9d3e2f": "iterateUserOffers(uint256,uint256)", +"bb9dea04": "bonusThreshold(uint256)", "bb9e1edc": "ethBaseBalance(address)", "bb9e3547": "setTokenCost(uint256)", "bb9e37ec": "TitleApproved(uint256)", +"bb9ea07c": "getGainExp(uint8,uint8)", +"bb9ebde7": "anonymousTest()", "bb9efd5e": "bulk(address[],uint256[])", "bb9efdc6": "QUAK()", +"bb9f227d": "SPARE_RECOMM_ADDR()", "bb9fc9ed": "transferStmpsToOwnerAccount(address,uint256)", +"bb9fe6bf": "unlockStake()", +"bb9feee0": "syncTokens(uint256)", +"bba00ba5": "lendingPoolAddressesProvider()", +"bba014fb": "removeLiquidityAddress(address)", "bba02bf8": "LyuTestToken()", "bba04dc9": "resetExplicitState(uint32,int64,int256,uint64,int8)", +"bba0ada8": "currentTokenEthPrice(address)", +"bba1a27b": "probabilityMap(uint8)", +"bba20544": "mimmo()", "bba231ce": "_isPast(uint256)", +"bba27694": "estimateYield(uint256)", "bba2e907": "prepaymentFee()", "bba33ace": "sellerCut()", +"bba38b85": "removeExternalTokenMeta(address)", +"bba3e282": "LOVEPerBlock()", +"bba41cde": "CompanyCoinsGranted(address,uint256,uint256)", +"bba42c8d": "setDAFIContractAddress(address)", "bba45738": "setOmegaContract(address)", "bba46031": "LOFO()", +"bba49529": "allFundingUsers(uint256)", "bba4a876": "setStateDistributing()", "bba4b31e": "birthBlock()", "bba4c282": "RaiblocksClassic()", "bba4e4c0": "AddressForReturn()", "bba4e9bd": "getTraitCount()", +"bba50d76": "GetCampaignMoneyCollected(uint24)", "bba52516": "tokenTimelock()", +"bba565ee": "getImpactValue(bytes32,address)", "bba570cb": "getDatURL(string)", +"bba581f0": "setCatnipV2(address)", "bba5ad87": "registNameXid(string,uint256)", "bba5b24e": "buyTokens(uint8)", +"bba652d9": "claimTo(string,address)", "bba65ed1": "isbit(uint256,uint256)", "bba7a1ab": "getTokenVolumebasedBonusRateForPhase1(uint256)", "bba80923": "msub(uint128,uint128)", +"bba827cb": "setWeiPerBIDL(uint256)", "bba8a065": "insert(uint8,uint8)", +"bba8a6f1": "TokenTransfer(address,address,uint256,uint256)", "bba8b342": "PresaleMidexToken()", +"bba8b630": "myMapping(bytes32)", +"bba8bd20": "totalTokensNeeded()", +"bba8ce11": "reBaseFactor()", "bba90086": "updateAndTransferFrom(address,uint256,string,uint256,uint256)", "bba91ea7": "getHomeadvIndex(uint256)", "bba9a9f6": "zeroFeesTransfer(address,address,uint256)", @@ -107439,57 +196555,105 @@ "bbaaa787": "claimable(address,bool)", "bbaac1e8": "privateSaleTokensAvailable()", "bbab867c": "setSubContractAddresses(address,address)", +"bbabdee9": "get_status_user(address)", +"bbac1193": "setHeap(address)", +"bbac3d58": "makeAvailableForStud(uint256)", "bbac78a9": "setImmutableOwnership(address)", +"bbacd8b4": "inEpochWindow()", +"bbacdbcb": "LIQUID_POOL_AMOUNT()", "bbad490f": "phase_3_bonus()", "bbad6172": "ICOZ()", "bbadb845": "updateProduct(uint256,string,uint256,uint256,uint256)", +"bbae7ab4": "vestCmd1YearInstantInt(address,uint256)", +"bbaed518": "TransferTokenOwnership(address)", "bbaefe9f": "bytePrice()", +"bbaf8267": "lockerLockUpPeriod(address)", +"bbaf9bd5": "setupTransferRole(address)", "bbafb379": "updateBatchStartTime(uint256,uint256)", +"bbafd3d4": "destruct_auction()", "bbb01c9c": "privateIcoMinimumContribution()", +"bbb07296": "stage_prod_cbps(uint256,uint256)", "bbb0c054": "foundersVestedPayment()", "bbb0d58e": "_createNeighbors(int32,int32)", "bbb104cf": "FucksToken9()", +"bbb14713": "setGarden(address)", +"bbb1598d": "entityAdded(address,address)", "bbb1c4c0": "withdrawForFiveYear()", +"bbb1c7cc": "matchingHouseBonusRollUp(address,uint256)", +"bbb1d35a": "newPriceTicker(bytes32,string,bytes)", "bbb21c4d": "explore(uint256,uint256)", +"bbb255bf": "provide_Help(address,uint256)", +"bbb26c63": "payForService(address,uint256)", +"bbb276ba": "FEE_AMOUNT_FACTOR()", "bbb28a65": "contributors_count()", +"bbb2dcf6": "decodeMultiAssetData(bytes)", +"bbb30c5d": "getMinterStatus(address)", "bbb37f60": "purchaseLeader(uint256)", "bbb37f76": "registerTier2Users(address[])", +"bbb40d16": "getRebasePerc()", "bbb44989": "Token2GB(address)", +"bbb4a1d7": "getAmountToSell(uint256)", "bbb50b78": "vraWallet()", +"bbb601cd": "addCollaterals(address[])", "bbb655b6": "_setGasPrice(uint256)", +"bbb6630f": "isLighthouse(address)", +"bbb6a6d0": "IPOamountFunded(uint256)", "bbb7259c": "CrowdsaleLimit(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "bbb73e3e": "GetBuyPrice()", "bbb7d310": "getCompte_19()", +"bbb7d489": "warpControl()", +"bbb7e5d8": "roundDiv(uint256,uint256)", "bbb7eb64": "addInventories(uint256,uint256,uint256,uint16)", +"bbb82d89": "verified()", "bbb896ad": "isCurrentAdmin(address)", "bbb906f7": "TomSkin()", "bbb92642": "BotTradesToken()", +"bbb9fe95": "marketBuyRhinoWithETH(address[],uint256,uint256)", +"bbba205d": "EXP_SCALE()", "bbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", +"bbbaba15": "set_parameter(uint256,uint256,uint256)", +"bbbb0d7b": "flop()", +"bbbb704c": "multiSetAllowance(address,address[],uint256[])", "bbbc0f55": "_price_tokn_ICO_first()", +"bbbc4dac": "approvedCryptoAccounts(uint256,bytes32)", "bbbc67d0": "getParticipantDestination()", "bbbc77dd": "intersubtoken(address,uint256)", "bbbd2953": "startNewBattle(uint256,uint256,uint256,uint256)", +"bbbd89c9": "LogRandNumberBC(uint64,uint16)", +"bbbd92a1": "distributeBatch(uint256,uint256[])", "bbbdef70": "FreezoneToken()", "bbbe1390": "getEmployerJobsForFreelancerInvite(address,address,address)", +"bbbe3869": "startLiquidation()", +"bbbe6eca": "calculateAvailableBorrowsETHInternal(uint256,uint256,uint256)", "bbbeac89": "MastermindAlliancePublishingGroupToken()", +"bbbf725b": "isMemberAllowed(address)", "bbbf8fbd": "increaseWeiRaised(uint256)", "bbbf9384": "BATTLE_CASUALTIES()", "bbbfc4db": "mulsm(uint256,uint256)", +"bbbfdda6": "sendRewardsX(address,uint256)", "bbbff4fb": "updateMinAmountWei(uint256)", "bbbff571": "changeKey(string)", "bbc001c3": "alloc()", +"bbc04f6d": "offererBeneficiary()", "bbc0c1a2": "addOrg(string,string,string)", "bbc0ebbf": "soldForFirst()", +"bbc10a4d": "updateHarvestInterval(address,uint256)", "bbc10d1a": "distributeeBitcoinCashSmall(address[])", +"bbc19ab0": "lastMinted()", +"bbc1a300": "getMission2(uint256)", +"bbc1dede": "getBlockNumberUpdated(bytes32)", "bbc2402d": "startCrowdsale(uint256)", "bbc2986c": "setPrice(uint16,uint256)", +"bbc2dbe3": "getPrimaryOwners()", "bbc2fcf5": "TOKEN_PER_ETH()", "bbc30ad8": "getGalleryData(uint256)", "bbc32820": "autoPay()", "bbc39ab6": "readCharityAddress()", +"bbc3d4f0": "priceUp()", "bbc42b3f": "orderToContractor(uint256)", "bbc43d41": "pay(uint128,address,bytes1)", "bbc49130": "Milestone_OpenTheIco(string)", +"bbc4c4f3": "setYGov(address)", "bbc53086": "csvConcat(string,string,string,string)", "bbc5aa5b": "maxTransferAmount(uint256)", "bbc5d3d9": "setQuickConverter(address)", @@ -107499,25 +196663,32 @@ "bbc64582": "getVotesCount(address,uint256,bytes32)", "bbc6df30": "getRoundInfoByID(uint256)", "bbc6eb1f": "getDefaultDonation()", +"bbc76fd6": "getMakerVaultCollateralBalance(uint256)", "bbc7d0b9": "marketingPool()", "bbc7f045": "ZenCoin()", "bbc84d1a": "voteWorth()", "bbc878c4": "totalSeraphims()", "bbc894a1": "GuoCoin()", "bbc8e3cb": "disallowTransfers(address[])", +"bbc910c8": "refundOIDs_(uint256)", "bbc94fda": "priceProgression()", "bbc9626b": "move_o(uint8,uint8)", "bbc9f09a": "payPartners()", "bbca0a89": "c_endTime()", +"bbca6210": "dough()", +"bbcaac38": "updateFeeAddress(address)", "bbcac1c3": "vipBrokerFee()", "bbcb4e3a": "TokenERC20(uint32,string,string)", +"bbcb562d": "_getWipeDart(address,uint256,address,bytes32)", "bbcbce8e": "MIN_GOLD_TO_UPGRADE()", "bbcbe572": "d(address,address)", "bbcbefd0": "unset()", "bbcc69ef": "withdrawTokensByInvestors()", "bbcc8cea": "SaiSaiToken(uint256,string,string)", +"bbccf154": "MIN_PERIOD()", "bbcd0f02": "endorseClaim(string,string,string,address,address,string)", "bbcd5bbe": "setTokenContract(address)", +"bbcda2d0": "dilutionFee()", "bbcdd139": "initExploit()", "bbcded7a": "left73(uint256)", "bbce2c17": "lastBurn()", @@ -107525,243 +196696,447 @@ "bbce67ca": "lastPlayTime()", "bbce877b": "getbuymoney(address,uint256)", "bbced0d0": "newTopic(string)", +"bbcedb69": "getCurrentGenesisWtPoints()", "bbcef175": "end_redeem_period()", +"bbcf1a5d": "addAuthority(address,address)", +"bbcf61d8": "transferAirdrop(address,address,uint256,uint256)", +"bbcfab64": "userBets(uint256,uint256)", +"bbd0c404": "OVENPerBlock()", "bbd0c939": "computePrice(uint256,uint256)", "bbd1e186": "addModule(string)", "bbd1e1fc": "editionActive(uint256)", +"bbd1e943": "testOnlyProtocolOwnerCanAddLibrary()", +"bbd25cd4": "setDollarPriceToBuy(uint256)", +"bbd275ee": "setClaimTokensMV(uint256,int8,uint256)", "bbd2e01e": "betsLength()", "bbd2e059": "impl_transferMSI(address,address,uint256)", "bbd31db3": "openAll()", "bbd32de0": "massTransfer(address[],uint256)", +"bbd35114": "isRebalanceTowardsSnxRequired()", "bbd3684c": "reservedteamtoken()", "bbd37e37": "RICO()", "bbd37ef3": "getReportingParticipant(uint256)", "bbd39ac0": "coinBalanceOf(address)", "bbd3b27c": "loveEvent()", "bbd3b2ab": "inrSessions()", +"bbd3f638": "isAMMEnabled()", "bbd418e6": "testConcatStorage4Bytes()", "bbd425df": "bestUser()", "bbd4271f": "setRateAndStart(uint256,uint256,uint256)", +"bbd43916": "eth_pylon_uni_lp()", "bbd46303": "changeStage(uint8,uint256,uint256,uint256)", +"bbd48527": "setGper(uint256,uint256,uint256,uint256)", "bbd4e8c9": "numDeposits()", "bbd4edb1": "updateRatingCustomer(string,bool)", "bbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", "bbd5301a": "_devteam()", "bbd53bf7": "fairsale_protectionOFF()", +"bbd57098": "approve_520(address,uint256)", "bbd5d174": "LogGame(string,string,string,string)", +"bbd65e52": "executeBuy(address,uint256,bool)", "bbd6dd48": "getUserTokenInfos(uint256)", "bbd74748": "Ethraffle_v4b()", +"bbd75a12": "aad(uint256)", "bbd7a3c7": "scripts(address)", +"bbd7d209": "getTokenInfo(address,uint256)", +"bbd7f255": "_yBalances(uint256)", "bbd8b602": "getOracleOutcomes(bytes,address[])", +"bbd91d84": "MAX_STRUCTURE_HEIGHT()", +"bbd938ff": "ChangeTokenManager(address)", +"bbd94c2f": "nftOwners(uint256)", "bbd95c32": "inArray(uint256[],uint256)", +"bbd96d84": "transfer753(uint256)", "bbd974cc": "maxAllowedTakerBetsPerMakerBet()", "bbd9a5fa": "grantPermission(address,string)", "bbda1e9a": "BicycleToken()", "bbda33d9": "getGameName()", +"bbda5ffc": "aggregatedAnswer()", +"bbdaa3c9": "POST_RELAYED_CALL_GAS_LIMIT()", "bbdaebe2": "transferFromInternal(address,address,uint256)", "bbdb31cb": "challenge(uint256,address,bool)", "bbdb57c3": "batchTransferORSS(address[],uint256[])", "bbdbd31e": "beneficiaryAndBirth(bytes32,int256,bytes32)", "bbdc02db": "gameType()", "bbdc04d8": "getDealData(bytes32)", +"bbdc1d67": "getDurationForLevel(uint256)", "bbdc7709": "startDispute()", "bbdd366a": "DECIMALS_MULTIPLIER()", +"bbdd8aeb": "createContractAndCall(bytes,bytes32,bytes)", +"bbdd91db": "removeLockup(address)", "bbddaca3": "setReferrer(address,address)", +"bbddc02b": "StateUpdate(address,uint128,int128,int256,uint256)", +"bbddc3c9": "mediatorActiveBets(address,uint256)", +"bbdddd87": "setNewTokenContract(address)", +"bbde00a6": "SetMinHold(uint256)", +"bbde3adc": "viewProportionalWithdraw(uint256)", +"bbde4667": "updateRewardForDynamic(address,uint256)", +"bbde5b25": "blackListed(address)", "bbdefbbb": "AWMVoucher()", "bbdfbfba": "delivered()", +"bbdffa50": "showUsdtBalance()", "bbe00af5": "beneficiars()", +"bbe024a9": "baseVolatility()", +"bbe1396e": "setEmailAddress(string)", +"bbe15627": "profiles(address)", "bbe18d43": "betClosed()", +"bbe26b4b": "deposit3(address)", "bbe2b727": "burnWholeBalance()", +"bbe30254": "updateDebitRate(uint256)", +"bbe39817": "totalHsu()", "bbe42771": "closeDeed(uint256)", "bbe430de": "available(address,address)", "bbe437eb": "endICO_w2()", +"bbe4f6db": "getPool(address)", "bbe4fd50": "getNow()", +"bbe51974": "Price(string,uint256)", +"bbe55b89": "hasSocial(address)", "bbe562b0": "multiplication(uint256,uint256)", "bbe5d9d4": "addSpace(uint256,uint256,bytes)", "bbe61730": "get_sale_arbits_total()", +"bbe6a8fb": "godSetBlindAuctionsContract(address)", +"bbe6e4d9": "StockSellOrder(uint256,uint256)", +"bbe6ee81": "changeDepositeMaxAmount(uint256)", "bbe7180b": "envio_dinero()", "bbe7221e": "orderbookContract()", "bbe86e6a": "sendTokensToOne(address,uint256)", "bbe8a9b6": "registerSecretBatch(bytes32[])", +"bbe8f084": "buz()", "bbe93d91": "mul(int256,int256)", +"bbe95837": "getPools(uint256,uint256)", "bbe9c7d6": "takePromille(uint256,uint256)", "bbe9f99d": "isTeamMember(address)", +"bbea1783": "coinLocked(address)", "bbeadcad": "invalidateVotingAtIndex(uint256)", "bbeb5923": "joinFee_()", "bbeb76bc": "setMultipleParticipantWhitelist(address[],bool[],uint256[])", "bbec170f": "lockAllAccount()", "bbec3768": "createOrder(uint128,uint16,uint256,uint8,uint256)", "bbec9e1b": "deletePriceCredentialItemId(bytes32)", +"bbece26b": "to_rent(uint256)", "bbececa9": "left78(uint256)", +"bbed0478": "sendmsg(address,string)", +"bbed533a": "reservesPerTokenDest(address)", "bbed7177": "getContentTimestamp(uint256)", +"bbedb64b": "setSecondOwner(address)", +"bbedcb83": "OnTransfer(address,address,uint256)", +"bbee17a3": "setKodavV2(address)", "bbee1ab7": "forgiveIt(address)", +"bbee3694": "getBoundDots(address,address,bytes32)", +"bbeeca48": "addressToIsInLeaderboard(address)", +"bbeefd08": "dad(uint256)", +"bbef1bd0": "coinkarma(uint256)", "bbef83cf": "getContractNameById(bytes32)", "bbef8624": "calculateWithdrawalRequestWitnessHash(address[],uint256[])", "bbef86b8": "PayForServiceCHL(uint256)", "bbf02b00": "level_8_percent()", +"bbf0391a": "TransferVotes(address,address,uint256,uint256)", +"bbf0b7e9": "addOracles(address[],address[],uint32,uint32,uint32)", "bbf0f065": "keepEth()", +"bbf139d0": "approve_654(address,uint256)", "bbf14d67": "tier3Timestamp()", +"bbf1b2f1": "submitTransaction(address,bytes)", "bbf1e6d0": "SetMiningEnable()", +"bbf2831c": "setTokenIndex(address,uint256)", "bbf2a9a3": "changeAcct3(address)", "bbf2ee4e": "lockAddress(uint256)", +"bbf31644": "set_new_FULCRUM(address)", "bbf3ae00": "ccExchangeRate()", +"bbf3b544": "transferLongTermTokens(address)", +"bbf4084e": "harvest(address,bool)", +"bbf41a8c": "_getNeedTicketNum(uint256)", +"bbf4515e": "getAllowedToken(address,bool)", "bbf48d6f": "convertReward()", +"bbf4d20a": "FreeTokens()", +"bbf4f712": "SetPauseRebases(bool)", "bbf58f4d": "foundersVault()", "bbf59a41": "personal_withdraw()", +"bbf5ce78": "_QUOTE_RESERVE_()", "bbf646c2": "ethAddr()", +"bbf732c5": "setDenLotStore(address)", +"bbf74f02": "getLoanDataInTokenBalances(address)", "bbf7585c": "getDistributionAt(uint256)", "bbf76802": "purchaseApprove(address)", "bbf78026": "SetMemberInfo(address,address,bytes32)", +"bbf86c1a": "multisendBBT(address[])", "bbf89803": "addBuyer(address)", +"bbf8aa77": "levelEntry()", +"bbf8cf82": "hasQuorum(uint256)", +"bbf8eadc": "setFees(uint256[],uint256[],address,address)", +"bbf8edd8": "MiningRewardChanges(uint256)", +"bbf9727b": "depositNum(address)", "bbf9cd8b": "EACCoin()", +"bbfa00b6": "transfergrimmw(address)", "bbfa6153": "getRegulatorLevel(address)", +"bbfacbc7": "_feeLevel2()", "bbfad256": "updated(uint256)", +"bbfb2007": "provideLoan()", "bbfb2f7a": "getEndtime()", +"bbfb5dd6": "getMultiplierOfAddress(address)", +"bbfb68b7": "checkmember(address)", +"bbfb9682": "depositCreators(address)", "bbfbaaf8": "getWorkSecondsInProgress()", "bbfbe6b6": "discountedMiningDifficulty(address)", +"bbfbf784": "joinTeamPower(uint256)", "bbfcc86b": "getHistEthRate(uint256)", +"bbfd32d2": "getLayerNameFromId(uint256)", "bbfdc3c4": "logicStatic(address)", +"bbfdc718": "joinTheGame(bytes32)", "bbfe6b75": "externalCall(address,uint256,bytes,uint256,uint256)", +"bbfe7cd3": "isChildTokenErc721(address)", +"bc00cc91": "step1_setSwapTerms(address,uint256)", "bc0111a8": "initEnsRigistrar()", "bc014bb9": "earlyBackers()", "bc019eed": "getAffiliate(address)", "bc01b767": "freezeTransfersUntil(uint256)", "bc02844c": "totalRemaining(uint256)", +"bc029091": "userPeriodDebt(address,uint256)", +"bc029528": "updateManyUsersExtendedExternal(uint256[],uint256,uint256)", +"bc02f3f7": "_initialSharesPerFragment()", +"bc03179a": "Lockup(address,uint256,uint256)", +"bc0324ca": "tokenTimelockedAddress(address,uint256)", "bc032967": "getRetailerByAddress(address,address)", +"bc036be3": "getFullInfo(address,bytes32)", "bc03a31e": "superManager(address)", +"bc03a5a5": "timestampList(uint256)", +"bc03d0f3": "swapExactTokensForTokens(uint256,uint256,address[],address,address)", +"bc03f964": "decodeTransactionExecutionError(bytes)", +"bc0403e4": "withdrawSNX()", "bc04056a": "LockedDayAdded(address,uint256,uint256)", "bc0409bf": "addTokens(bytes32,uint256)", +"bc041c9c": "openICOSale(bool)", "bc04562d": "Reclaimer(bytes32)", +"bc048237": "RefundEvent(address,uint256)", +"bc048525": "unlockTrading(uint256)", "bc04cb0f": "FEED1()", "bc04d77b": "datasetHub()", +"bc0547e3": "_calculateRewards(uint256)", "bc055227": "ownerOfPiranha(uint256)", "bc05529b": "SaleDeadline()", "bc058968": "updateThingData(bytes32[],bytes32[],uint88)", "bc05d087": "registerProduct(uint256,string)", +"bc05ea66": "updRate(uint8,uint256)", "bc063e1a": "MAX_FEE()", "bc064863": "getRequestorAddresses()", +"bc06dc35": "voteSuccessOrFail(uint256)", +"bc06e81d": "getUSDCAddress()", "bc070e83": "minimumBuyIn()", +"bc072189": "uu4multi(address,uint256[])", +"bc076b6e": "topupstaking(uint256)", +"bc07aa64": "setMerkleRoots(bytes32[])", +"bc07c443": "test2(address,uint256)", +"bc08452b": "setCheckpointManager(address)", "bc084de9": "CrowdsaleAuthorizer(address,uint256,uint256,uint256,uint256,uint256)", +"bc086215": "addPP(address,address)", "bc08afd9": "WebOfTrustToken(address,uint256)", +"bc08b51d": "tokensToValue_(uint256)", +"bc08f5d2": "getMainFeeBP()", "bc09b5ec": "fundPreIco()", "bc0aaff2": "setzBytes32(bytes32)", "bc0aca61": "setFeeAccount1(address)", +"bc0ad0ba": "startLiquidityGenerationEventForHAL9K()", "bc0ae61e": "GazeBountyCoin()", +"bc0b1df6": "redeemCoupons(uint256,uint256,uint256)", "bc0b45fa": "OSPN()", +"bc0c6b1f": "OWNERSTAKE()", +"bc0c76db": "holdTime(address)", "bc0c868c": "stocksOf(uint256)", +"bc0c9683": "JNTControllerChangedEvent(address)", "bc0cd8d3": "BOOCOIN()", +"bc0d753d": "getPromiseIdFromVoucherId(uint256)", "bc0e7adb": "testThrowsDisownNotOwner()", +"bc0e872d": "addmember(address)", "bc0eaf0a": "calcAmountAt(uint256,uint256)", "bc0f920a": "AuthSuspend(bool)", "bc0fb9a0": "predictWinner(uint256,uint256,uint256)", "bc1013db": "m_totalWorkerPoolCount()", "bc101ffe": "twentyPercentWithBonus()", "bc104f24": "compareItemSlots(uint256,uint256)", +"bc106704": "totalMintedForTokenId(uint256)", "bc10a667": "euroRaisedICO()", +"bc10cc8a": "isWithdrawStake()", "bc10ce84": "Test(int256)", +"bc10e25b": "deposit10(uint256)", +"bc10efa6": "approve_289(address,uint256)", "bc1123fe": "isUInt256ValidIn64(uint256)", "bc112fa3": "ALC_FUNDATION_ADDRESS()", "bc11f72c": "DABcoin()", "bc120fe7": "whitelisted(address,address)", +"bc1265c8": "moveSaleForwardBy(uint256)", "bc126ba1": "totalCents()", "bc1292a0": "BonusChange(uint256)", +"bc1292d8": "LogSetDisputeFee(uint256)", "bc129a98": "accountedTokenSales()", "bc12d19d": "maxCapTokenPresale()", "bc12e3d7": "getAuction(uint64)", +"bc132751": "unlockedAddr(address)", "bc1351ba": "has_contract_started()", +"bc1366fe": "updateRegistery(address)", +"bc13c46e": "rewardsToken2()", +"bc13d1e7": "beginPresale()", +"bc13d409": "ACTION_EDIT_PASSWORD()", "bc13e3a6": "controller2()", "bc14016b": "removeAllOps()", +"bc141978": "batchRefundEth(uint64[])", "bc148094": "PostAdded(address)", "bc1558be": "MANHATTANPROXY3RDAVE()", +"bc157ac1": "deposit(uint256,address,uint256)", "bc15a2dd": "BEAXY()", "bc15be93": "firstRoundCosmosDiscount()", "bc15e5fe": "get_next_global_audit_document(bytes32)", "bc16272d": "requestRegistration(bytes32)", "bc168c90": "_setIPFSHash(bytes32,string)", +"bc169d4f": "categorie1(address)", "bc174df3": "ProofOfCryptoNick()", "bc17991d": "restoreBalances(address[60],uint256[60],uint256[60])", "bc17a0b4": "PAST()", +"bc17a7fe": "setPlatformProportion(uint256)", +"bc17a8a0": "mintingAdmin()", "bc17bd7e": "SelfDestructible(address,address)", "bc17e669": "exiteJugador(address)", +"bc17ea4a": "redeemTokens(address,address,uint256,uint8,uint64)", +"bc17effa": "SUBSCRIPTION_ADDRESS()", "bc186dc9": "unlockBalanceByIndex(uint256)", +"bc18f218": "tokenToEthSwapInput(uint256,uint256)", "bc18f727": "galleryFive()", +"bc193b38": "TradingUnlock()", +"bc195667": "tryAddBillIssueAmount(uint256,uint256)", "bc197c81": "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)", +"bc19a9e2": "setMaker(address)", "bc19bcbf": "submitBallotWithPk(bytes32,bytes32)", "bc19bce5": "resolveName(string)", +"bc19f604": "betOnHundings()", "bc1a3810": "thelnwaonCoins()", +"bc1a8e87": "killFaucet(address,string,address)", "bc1af71d": "_maxTokenSoldPreICO()", +"bc1b1e7c": "offerExists()", +"bc1b392d": "zero()", +"bc1b5d79": "getSellerByID(bytes32)", "bc1c002c": "call_contract(address,address)", "bc1c58d1": "contenthash(bytes32)", +"bc1c864c": "WHITELIST(address)", "bc1c9888": "CoOwnerSet(address)", +"bc1cfd49": "passiveAirdropStatus()", "bc1e9ca3": "USD_CENT_PER_TOKEN()", "bc1ea063": "LogContractOwnershipChangeInitiated(address)", "bc1f71e1": "depositKncForFee(address,uint256)", "bc2010cc": "feesC()", "bc2017f3": "adjustPriceOfCountryPlayersAfterWin(uint256)", "bc201a9d": "addSupport(address)", +"bc205ad3": "withdrawStuckToken(address,address)", +"bc206b0a": "can(address)", "bc208057": "enter(uint256,uint256,uint256)", +"bc20a7af": "durations(uint256)", +"bc21434b": "getInviter(bytes32)", "bc215cb6": "BBTokenBox()", "bc21ce9d": "Aggregation()", +"bc220bd2": "masterPoolId()", "bc22df1a": "buySpaceshipUpgrade(bytes5,uint16,uint8)", "bc22f570": "poolsToCreate()", "bc231983": "Temp()", +"bc233ac7": "DOG_4()", +"bc238d26": "arbs(uint256)", "bc24300e": "_borrowToken(address,uint256,uint256,address,address,bool,bool)", "bc244c11": "shut(address,bytes32)", "bc244fc9": "systemAddress(address)", "bc24612c": "claimableAmount(address,bytes4)", +"bc246143": "getResidual(address)", "bc246a36": "hashState(address,uint256,uint256,uint256)", +"bc24c46c": "Vutatech(uint256,string,string)", "bc24d886": "setSail(uint256,uint256,uint256,uint256,uint256,uint256)", "bc25415c": "produce(uint64)", "bc25a810": "lock(address,bytes32)", +"bc25cf77": "skim(address)", "bc25e2fd": "postProof(string)", "bc2622b4": "addKeyValue(string,string,string,uint256)", "bc2674b1": "LogExchange(address,address,uint256)", +"bc26de10": "PERCENTAGE_GROUP_5()", "bc27c7bb": "buyZoAssets(bytes32)", "bc28cfe4": "getTicketSet(address,uint256,uint256)", +"bc28d702": "isMintedBeforeReveal(uint256)", "bc28d878": "rejectProposal(uint256)", "bc294a7c": "setCEOAddress(address)", +"bc2a0696": "NewAlias(address,string)", "bc2a4dd6": "doBalanceOf(address)", +"bc2ae972": "setDayBlockSpan(uint256)", "bc2b6913": "donateSkin(uint128[],address[],bool[],uint256[])", "bc2bbad7": "getMyNotes(uint64,uint64)", "bc2be1be": "getStartTime(uint256)", +"bc2be72c": "setMambaPerBlock(uint256)", +"bc2bf73e": "getPreMintByIndex(address,uint256)", "bc2c3a12": "ValidContractAdded(address,address,uint256)", "bc2c5873": "reinvestPartial(uint256,bool)", +"bc2cdbaf": "bounty_supply()", "bc2d10f1": "finishEthGet()", +"bc2d73ba": "exampleFunction(string)", "bc2d87f5": "Set(string,string,address)", "bc2eb3f8": "removeNode(bytes32,bytes32)", +"bc2ee5a6": "getAllDurations()", +"bc2f45a7": "AIRDROP_FRACTION()", +"bc2f8dd8": "startWithdrawal()", "bc2fe07b": "transferCardOwnership(address,uint8)", "bc300ed3": "setBounty(address)", +"bc303370": "UpdateContract(string,address)", "bc304e55": "serverTransfer(address,address,uint256)", "bc308233": "autoreleaseTime()", +"bc30a618": "updateDistributor(address)", "bc30e4ac": "abcLotto()", "bc30f3f8": "modifyPlatformAddr(address)", +"bc318be3": "CT_payable(address)", +"bc31c1c1": "prices(uint256)", +"bc329d67": "raiseStakes(uint256)", +"bc32b64a": "updateKeep3r(address)", +"bc32fec5": "onEditBet(uint256,address,uint256,uint256,uint256)", +"bc334be7": "mintDevelopmentPart1(uint256)", +"bc33657a": "myContract()", +"bc337e21": "AirDropforBORGETH_MultiSender(address[],uint256[])", "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()", +"bc3501e2": "timeElapsedSinceFirstObservation()", +"bc3513fd": "cmImage()", +"bc352c91": "canFund()", +"bc355cfe": "BRONZE_COINS()", "bc356eea": "VEN()", "bc3574d4": "adjustSupply(uint256)", "bc3589bf": "TOKEN_FIRST_PRICE_RATE()", "bc358af9": "listItem(uint256,uint256,uint8,address)", "bc35c57f": "setMinAmount2Round(uint256)", +"bc35cf5c": "removeActiveSlot(uint256)", "bc3619dd": "onBlockClose(address)", "bc364d7b": "tokenVestingAddress()", "bc367377": "setTokenBurnApproveReset(address,address,address,address)", "bc376bbe": "unlockFor(address,uint256)", "bc378a73": "getProposalsLength()", "bc37d7b8": "setVendingFee(uint256,uint256,uint256)", +"bc37e1a3": "addLP()", +"bc386212": "tokenIssuer(uint256)", "bc389b6d": "callWithdraw(uint256)", "bc38a991": "testInsert()", +"bc38a9a3": "addtoContributos2(address,uint256,uint256)", "bc39d42f": "sigDestinationTransferFrom()", "bc3a72a5": "ETHHToken(uint256,string,string)", "bc3abbdb": "etherPerMiner()", +"bc3aedc2": "PolicyAttributeRemoved(uint8,uint256)", "bc3b0d31": "STCB()", +"bc3b446b": "compoundReferralIncentive(uint256)", "bc3bc814": "changeTolerance(bytes32,uint256)", +"bc3c08b1": "createMarket(address,address,uint256,string)", +"bc3c19f7": "burnedSupply(uint256,uint256)", +"bc3c1ffc": "periodInfoLength()", +"bc3c27d5": "pendingRuggiesOfPool(uint256)", "bc3c2846": "requestMediator(uint256,uint256,address)", +"bc3d4d16": "setRetryFee(uint256)", +"bc3d8540": "SaleCanceled(uint256)", "bc3d9390": "printBlockHash()", +"bc3da535": "refunds(address)", "bc3dde2f": "xxx(address)", +"bc3df4fc": "relay(bytes,address,uint256)", +"bc3ef7ad": "updatetime()", +"bc3f17c7": "ToMathedIUseNR(address,uint256)", +"bc3f34da": "changeClerkAddress(address)", "bc3f7bcb": "moleculartechnologySupply()", "bc3f931f": "getVote(uint256,address)", "bc4006f5": "erc721Metadata()", @@ -107770,65 +197145,119 @@ "bc408ec4": "ElixirUSD()", "bc40b52a": "startPreICO()", "bc40bac6": "getCrydrViewAddress(string)", +"bc414e7b": "upgradeEvilMorty(address)", +"bc41bbdb": "setCastleSale(uint256,uint256,uint256,uint256)", "bc41f298": "changeControllerAccess(address,bool)", +"bc42588b": "usi()", "bc427bc8": "setFreezeForFounding(uint256,address,uint256)", "bc428ee2": "getTimeOutAuthentication()", "bc431846": "getBetPriceID(uint256)", +"bc431b0d": "withdrawPpblz(uint256)", +"bc43cbaf": "accessController()", +"bc43f0e6": "yourBSCBalance(address)", +"bc43f6fb": "_rebaseJackpotLastBlock()", +"bc441327": "closingTimeOffset()", "bc4447ef": "getBlackListStatus(address,address)", +"bc444e13": "upgrade(bytes32)", "bc447a6d": "numDragonTypes()", "bc448782": "setCrowdsaleAddress(address,address)", "bc44e79d": "getStageWinners(uint8,uint16,uint8)", "bc44ea9a": "setBank(address,uint256)", +"bc451430": "approve_528(address,uint256)", "bc451844": "BONUS_DURATION_1()", "bc456c42": "changePaymentAddress(address,address)", "bc45d789": "setConfigUint(int256,bytes32,uint256)", +"bc463274": "ProcessedUnstake(bytes32,bytes32,address,address,address,uint256)", +"bc463a3d": "setPartialPauser(address)", "bc466ab2": "setNewEnd(uint256)", "bc467a3e": "ownedContract()", +"bc46943c": "getReferrerBonus(uint256)", +"bc4727cc": "bulkWithdraw(uint256[],address[],bytes32[])", +"bc4780e4": "obtainRecord(uint256,address)", +"bc479c3a": "starCount()", "bc48bc22": "erc20TokenCount()", "bc48f4be": "getLand(int256,int256,address)", +"bc48fdad": "ChangeOwnerTo(address)", +"bc49308f": "escrowID()", +"bc493d14": "whereIsPonderware()", "bc499814": "generatePrefixedPreimage(bytes32)", "bc4998b9": "eth2MNT(string)", "bc4a2030": "getCurrentRate(uint256,uint256,uint256,uint256)", +"bc4a8e8c": "partner3LockedValue()", +"bc4aa86e": "checkPropertyLastKnownValue(bytes32,address)", "bc4af295": "spawnAssetWithCreator(address,uint256,uint256,uint256,address)", +"bc4af3dc": "swapAmount(uint256)", "bc4afa67": "MBTCToken(address,uint256)", "bc4b3365": "addFunds(address,uint256)", "bc4b346d": "confirmQuest()", +"bc4b6b00": "endedGames(uint256)", "bc4bbad1": "updateCostETH(uint256)", "bc4c594b": "tokenManagerAddress()", +"bc4c8552": "isCountryRestricted(uint16)", +"bc4ce844": "adapter_total_principal()", "bc4d76e5": "EPay()", "bc4d9b50": "minerLockedAmount()", +"bc4da1ae": "outstandingTickets(uint256)", +"bc4de248": "verifyAggregatedProof(uint256[],uint256[],uint8[],uint256[],uint256[16],bool)", "bc4e3105": "unlockAddressDuringITO(address,address)", +"bc4e84a4": "withdrawAllByOwner()", +"bc4eaa3e": "bonusThreshold()", +"bc4f2d6d": "rebase(uint256)", "bc4f65a3": "addCity(bytes32,uint256,uint256)", "bc4fcc4a": "redeemedAt(bytes32)", "bc4fe17e": "addressToUser(address,address)", +"bc500409": "buyOrderLast()", +"bc50b3cd": "degrees(bytes32)", "bc50c09e": "playAnyTriples(uint256)", "bc517131": "walletVersion()", +"bc51ddcb": "setCertificate(string,string)", +"bc5207da": "addressForUGCForOptionID(uint256)", "bc5213b7": "_setCurrentRate(uint256)", "bc523229": "ShopDex()", "bc525652": "templates(uint256)", +"bc526509": "ref_withdraw_tokens()", +"bc527b22": "getPuntersAddress(string,uint256,uint256)", +"bc529c43": "accounts(bytes32)", "bc52b43b": "buyinAs(address)", +"bc5377bf": "FailedPayment(uint256,uint256,address,uint256,uint256)", "bc537bae": "getMeOutOfHereStocks()", +"bc539c43": "setGetallen(string)", "bc53a93d": "E4Token()", "bc54a168": "buyTokensOnInvestorBehalfBatch(address[],uint256[])", +"bc54a863": "marbleDutchAuctionContract()", "bc54f56f": "getTemplateDetails()", +"bc551fa4": "buyBackMin()", "bc562b9e": "loseSponsor(uint32)", +"bc566431": "DIFFICULTIES(uint256)", "bc56a240": "walletEtherPresale()", +"bc56b767": "dailyDistributedReward()", "bc56e749": "acceptProposal(uint256,address)", "bc57275b": "EthCnyPrice()", "bc579103": "totalPayed()", "bc57d5f5": "transferFrom(address,address,uint256,uint256,uint256,uint256)", +"bc57e52c": "orderPurchase(uint256,uint256,uint256)", +"bc586456": "grantPermission(bytes32,address)", +"bc58e863": "l_l3()", +"bc5920ba": "updateOwner()", "bc597d9f": "getProposalVotesCount(uint256)", "bc59afe6": "scanMany(address[],bytes1[])", "bc59d45a": "raisedWei()", +"bc5a28cc": "takeIssueRequest(uint256)", "bc5b75f4": "EtherWorldCup()", +"bc5b7afd": "retirePets(uint256,uint256,uint256,uint256,uint256,uint256)", "bc5bf5bf": "releaseVestingTokens(address)", "bc5c0c67": "setDowntime(uint256)", +"bc5ca93c": "baseRewardHistoryLength()", "bc5cfd4f": "lastBonusNumber()", "bc5d066e": "changeCompanyWallet(address,address)", "bc5d0f65": "beginExecution()", +"bc5d3e23": "EDIT_TIME_MAX()", "bc5dc168": "balanceOfLocked2Y(address)", "bc5dfd7d": "getCompte_23()", +"bc5e1908": "getBasicSensitivity()", "bc5e4bb4": "_hasSkillsCheck(uint256)", +"bc5e694d": "setStoragePermission(address,bool)", +"bc5f92bb": "depositAsCustomToken(address,address,uint256,uint256,uint256,uint256,bytes)", "bc5ff5e1": "oraclize_query(string,string[4],uint256)", "bc602ab7": "removeRandomClass(uint32)", "bc607f7b": "funcFromC2()", @@ -107836,145 +197265,262 @@ "bc60a365": "removeAdminAccount(uint256,address)", "bc60ac60": "StefyToken()", "bc61394a": "fillOrder(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"bc615668": "getFeesCollectionAddress()", "bc6171df": "sendETHToMultiSig(uint256)", +"bc619f52": "approve_648(address,uint256)", +"bc61b1bb": "oraclizeResponseLog(uint256,string)", +"bc61ca4d": "setTokenBar(address)", +"bc61e733": "isPaused(uint8)", +"bc62a9c3": "getWorkflow(bytes32)", "bc62c89a": "getTrainerEarn(address)", "bc62d8d8": "parse(string)", "bc632a21": "creationTime(address)", "bc634abb": "getDocumentProposals()", "bc636707": "_explorationTime(uint8,uint8,uint8)", +"bc63c19f": "getCurrBlockNumber()", "bc63cc90": "starCountsForOwner(address)", "bc64059b": "exchangeEtherForHavvensAtRate(uint256,uint256)", +"bc6419cd": "slime()", +"bc643d54": "soteMasterAddress()", "bc643df1": "getIncludes(uint256,uint256)", "bc649f4c": "grantProvider(address)", "bc6548fb": "etherVault()", +"bc655543": "approveAllowances(address[],address[],bool)", "bc655f54": "getEndDate1()", +"bc658659": "getStudentDetails()", "bc65c559": "preIcoInvestment(address,uint256,uint256)", +"bc65d434": "IsSatisfyTargetRatio(address)", "bc65d6f6": "getSubscriberContentHashes()", "bc65e9e1": "PenCoin()", +"bc660799": "newAction(uint256,bytes,address,uint64)", "bc6633f7": "setSaleState(uint16,bool)", +"bc663cfe": "setAave(bool)", +"bc664ee9": "sharesPerUsdOracle()", +"bc66ce0a": "incomeToken()", "bc677b46": "viewOwner()", "bc67f832": "setMessageSender(address)", "bc68118b": "setDeveryRegistryAddress(address)", "bc68fad9": "burnBalance()", +"bc694ea2": "MAX_BPOW_BASE()", "bc697319": "minimumGoal()", "bc698641": "relayBalance()", +"bc69dbf1": "calcBorrowFee(uint256)", "bc69dc89": "BenefyCashToken(string,string,uint8,uint256)", "bc6a49a3": "LaunchRocketEvent(address,uint32,int64,int64)", +"bc6a7035": "SellToken(address,uint256,uint256,uint256)", +"bc6a897e": "REWARD_PROVIDER()", "bc6ac112": "calculateRegionInitialSalePixelPrice(address[16],uint256)", +"bc6acc51": "setTotalCommitted(uint256)", "bc6b12b3": "odem()", +"bc6b6fd6": "setx5Address(address)", "bc6c06e7": "GoodfieldRetail(uint256,string,string)", "bc6c4d0f": "totalVotesForCandidate(uint256)", +"bc6ca2c0": "votNoUserdoc(uint256,uint256)", +"bc6cb1d9": "getRequiredCollateral(address,address,address,uint256,uint256)", +"bc6ccda4": "approve_135(address,uint256)", +"bc6d0577": "string_tobytes(string)", "bc6d68ee": "updateSubscription(address,address,bool,uint256)", "bc6d80fa": "getLenderAmountForIncreasePositionAtTime(bytes32,uint256,uint32)", "bc6e6604": "TOKENS_PER_ETH()", +"bc6e679f": "Deposit(int256)", +"bc6eec40": "_pools(address)", +"bc6f05fe": "changeDepositsAddress(address)", "bc6f1699": "clockpos()", +"bc6f504d": "actAllLimit(uint256,uint256,uint256)", "bc6f712a": "Attestation(string,bool,address)", "bc6f9021": "maxCapTokens()", "bc6fd6d9": "MINIMAL_WEI()", "bc70ad19": "IMEXX()", "bc713f1d": "AddPoolCoOwner(string,address)", +"bc7184c0": "initializeRecipient(address)", "bc71b0a6": "DeCenterToken(address,address,address,uint256,uint256)", "bc71cdcb": "BAInvestor()", "bc7202d7": "_updateSalePrice(uint256,uint256,address)", +"bc728d18": "usdctoeth(uint256,uint256,address)", "bc734f0f": "nextSeason()", "bc735d90": "setOperator(address,address,bool)", "bc73a7e4": "_preValidatePurchase(address,uint256,uint256)", +"bc73b641": "getMinter(address)", "bc73c971": "TierBasicDividendAddress(address)", "bc7411b2": "chargeBonuses()", "bc745a0d": "nextBonusStepLimit()", +"bc7513e2": "balanceOfCoupons(address,uint256)", "bc752b61": "buyTicket(uint256[],uint256)", +"bc755792": "purchaseRareNFT(uint8)", +"bc7588aa": "isUserPermissioned()", "bc76dca0": "GoWalletProject()", +"bc77a194": "Operation(bytes32)", "bc77b919": "_mySymbol()", "bc77f476": "EVCChain()", +"bc786876": "getBakeAmount()", "bc78ac81": "setPet(string)", +"bc79f81e": "staker_time(address)", +"bc7a1a22": "BallotInit(bytes32,uint64[2],bool[2])", +"bc7a322f": "Transfer(bytes32,bytes32,uint256)", +"bc7a36d6": "totalInterest()", "bc7a6e35": "_startAuction(bytes32)", +"bc7aa8bc": "adminTransfer(address,address,uint256,uint256)", +"bc7b1634": "sellBananas()", "bc7b3f86": "NewHighestBid(address,uint256,string)", "bc7b6d62": "setResolver(uint256,address)", "bc7b801e": "adminUpdateWorldSnapshot()", +"bc7be120": "setParameters(uint8,uint16,uint32,uint32,uint32,uint32)", "bc7c322c": "ratePerWei()", "bc7c55ed": "listing()", "bc7c72d7": "getmessagefromdovie()", +"bc7cd75a": "Upgraded(address)", "bc7d8cb4": "EURSToken(address)", "bc7dbc0d": "yearlyFee()", "bc7dce06": "setETHPrice(uint256)", +"bc7e35b9": "setup_ratioInchPerEther(uint256)", +"bc7e68a3": "nextRebase()", "bc7e8d3c": "isDeholdable()", +"bc7ef190": "removeSetting(bytes32)", +"bc7f00c5": "srxPerBlock()", "bc7f25e4": "getReferrerOf(address)", "bc7f3b50": "getDelegate()", +"bc7f3b5d": "pendingDefix(uint256,address)", "bc7f58b1": "addAgreement(address,bytes32,uint32,uint32)", +"bc7fb199": "add_level_income(address[],uint256)", "bc802c83": "userManagerContract()", "bc80bee8": "setFeerate(uint256[3])", +"bc80e2bd": "redeemETH(address,address,bytes32,uint256)", "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)", +"bc824a77": "getChecksumById(uint256)", +"bc82b85a": "TokenPurchaseRequest(uint256,address,uint256,uint256,uint256)", +"bc82d089": "callVoteEvent(address,uint256,bytes4,uint256,uint256,int8)", "bc82f4d3": "verifyEmailAddress(address,string)", +"bc834289": "ERR_CURRENCY_AVAILABLE()", +"bc8365f7": "sm_developerShare()", "bc83a6fb": "ekkoBlock1(uint256,string,uint8,string)", "bc83d001": "DividendFacial()", +"bc840826": "rewardSize()", "bc8409a4": "investWallet()", +"bc841408": "createRandomAyylmao(string)", "bc843509": "toByte()", "bc84a7ba": "getsometokenn(address,uint256)", "bc851718": "hashLast()", "bc855006": "SantaiToken()", +"bc8570d6": "kill_sc()", "bc85c055": "queryEOSTokenBalance(address,address)", "bc85e064": "merchantWallet()", "bc86a23a": "addPrimaryRecord(string,string,string,string,string,string,string)", "bc87103a": "removeFunder(address,address)", "bc8711fd": "getWinnersLength()", +"bc8756a9": "transferFunds(uint256,uint256,address)", +"bc87acbf": "approveAllDelegatePowers(address)", "bc87b70f": "oldestGen()", +"bc87ec1c": "maxEthDeposit()", +"bc87f62c": "tranche_S_virtual_utilized(uint256,uint256)", +"bc8802a2": "realitio()", "bc88adc4": "getBuyerBalancesOfCurrentAuctions(address[],address[],address)", +"bc88ccd9": "_isssueToken(uint256,uint256)", +"bc893a0e": "chainlinkETHUSDCOracle()", "bc899015": "CappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"bc89fd76": "burnrfiSanta()", "bc8aa899": "we_token()", +"bc8aac01": "confirmTransactions(uint256[])", "bc8b336d": "Ninecoin()", "bc8bde64": "_creator()", +"bc8be8e8": "oldestExtraStealProbability(uint256)", +"bc8c5b1c": "rawPackageReceived(address)", "bc8caa47": "resetDividendsCalculation()", "bc8cb3f9": "destTokensReferals()", +"bc8cf127": "stakingCapEnabled()", "bc8d7a51": "gemsOfOwner(address)", +"bc8d8348": "setConnectorAddress(address)", +"bc8db423": "eth_pylon_lp()", "bc8e1143": "processTransaction(bytes,uint256,address,bytes20)", +"bc8e9ca5": "getExpectedReturnRedeem(address,uint256)", "bc8e9cde": "createGen0Horse(uint256,uint256,uint256,uint256,uint256,uint256,address)", "bc8f3bcb": "ZeroDollarHomePage()", "bc8fbbf8": "nuke()", +"bc90106b": "setAssetDefaultStrategy(address,address)", +"bc902ad2": "insert(address)", +"bc9035c5": "getterInvestor2(address)", "bc903cb8": "getProposalInfo(uint256)", +"bc90763d": "swapFromAdelWalletRewards(uint256,uint256,uint256,bytes32[])", +"bc907ebc": "harvest(address,uint256,uint256,uint256)", +"bc9121cf": "setInitialApplicationAddress(address)", "bc912e1a": "WHITELIST_SALE_PRICE()", "bc9147a4": "Foundation()", "bc916a50": "hasOwner(uint16)", +"bc91970a": "calculateSpreadBps(uint256,uint256)", +"bc919744": "burnToLP(uint256,uint256)", +"bc91f93b": "setUnutilizedLeveragePercentage(uint256)", "bc921d54": "setImageData(uint256,uint16,uint256[])", +"bc9236a4": "_initMixinScheduler()", "bc92bea5": "getRandomItems(address,string)", +"bc93082b": "_setCreditLimit(address,uint256)", +"bc93a2cb": "minstakeTokens()", +"bc9419cc": "cancelRoadSale(uint256,uint256,uint8)", "bc944d9e": "newLowestAsk(uint256,address)", "bc950708": "totalRaisedInCents()", +"bc951217": "LogFinishRoundB(address,address,address,address)", +"bc95ab1b": "submitTransaction(bytes)", +"bc95dc08": "giveMeNumber(uint256)", "bc95f178": "make(bytes32,bytes32)", +"bc97337c": "curriculum1()", "bc9748a1": "pong()", "bc978361": "setrteamVaultAddr(address)", +"bc97938c": "initialDelay()", "bc97a8ac": "JackpotPayout()", "bc97fd06": "updateMultipleUsersReward(address[],uint256[])", +"bc985eda": "dydxProtocolAddress()", "bc98b8b0": "getTTTInfo(uint256)", +"bc98f6e6": "setReceivedTokenRate(address,uint256)", "bc9904ec": "updateProfile(address,bytes)", "bc99249e": "buy(address,bool)", "bc9968a2": "dataController()", +"bc99744f": "notSuspended(uint256)", "bc99c8be": "takerAddressAt(uint256)", "bc99cc37": "maxInvestors()", "bc99d04c": "YRQ(uint256,string,string)", +"bc99d8a8": "bonusEffect(uint256)", +"bc99ec61": "LogOrderFilled(bytes32,uint256,uint256)", "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()", +"bc9c5941": "prices(address,uint256,address,uint256)", "bc9cbcc8": "setImbalanceStepFunction(address,int256[],int256[],int256[],int256[])", "bc9cc1fb": "getAllbetByGtype(uint8)", +"bc9ce68e": "rariGovernanceTokenDistributor()", +"bc9cf98d": "updateStaticStakingContract(address)", "bc9d8d6a": "getLastWallet()", "bc9da641": "testToUint8()", +"bc9dd9fe": "NOTIONALa()", "bc9e080e": "setVerifierManager(address)", +"bc9e0da3": "availableTotal()", "bc9e6b0f": "_getClientLastPaidRate(address)", +"bc9eb2c3": "stakeLastEpoch(address,address)", +"bc9f28bc": "claimTeamFeeAndAddLiquidityLETSFUCKINGGOOOO()", "bc9f31e3": "mock_throwIfNotRemoved(address,address)", +"bc9f4700": "tokenMappeds(address)", +"bc9f51b8": "getColoredTokenBalance(uint256,uint256)", +"bc9faa3d": "AMO()", "bc9ff567": "InternetWealth(uint256)", +"bca02ea8": "showData()", +"bca04859": "transferPayment(address,uint256)", +"bca04b06": "removeCard(uint256)", +"bca0900c": "changeAnswer(address,bool,address,uint256)", "bca19900": "tokenHardcapIssued()", "bca19ca0": "TAAS_CONTRACT()", "bca1f81c": "lockOpen()", "bca2b941": "setTokenPrice(uint256,uint256,uint256)", "bca2bbc0": "EtherModifierMoops()", +"bca2e61d": "VoteForCandidate(string)", "bca36985": "ExposureSettled(bytes32,address,uint256)", "bca38dab": "createGuess(uint256,string,string,string,uint8,bytes,uint256,uint256,uint256[],bytes32[])", "bca3eb24": "setCAO(address)", +"bca4b595": "_approveAndRemoveLiquidity(uint256)", +"bca4bd50": "isWarehouse(address)", +"bca4fc43": "queryUserTotalCanSellQuota(address)", "bca50515": "transferFromPreSigned(bytes,address,address,uint256,uint256,uint256)", "bca51abf": "_detectStage(uint256)", "bca53fa0": "AIHTeamLockContract()", @@ -107986,155 +197532,274 @@ "bca7093d": "withdrawalPeriod()", "bca72b59": "revealVote(string,uint256,uint256)", "bca76131": "GoCryptobotCore()", +"bca773b2": "stateOfIncorporation()", "bca77cd6": "YUBToken()", "bca7a9e2": "lockToken()", "bca7bd85": "getAllLockerInfo()", +"bca7e71d": "balanceOfWeapon(address,uint256)", "bca7e96b": "needsFinalization()", +"bca8648d": "DigixGoldToken()", "bca86986": "testSetup()", +"bca88850": "setVswapPaths(address,address,address[])", +"bca8a7c1": "updateTimes(address,address)", +"bca8aeac": "PaymentCreated(uint256,address,address,uint256)", +"bca8c7b5": "executeCall(address,bytes)", "bca915c7": "createPromoPlayer(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bca91a14": "removeParticipant(address,uint32,bytes32)", +"bca91df3": "decreaseBalance(address,uint256,uint8)", +"bca93cf5": "feesReceiver()", +"bca93eba": "SELLER()", +"bca9469f": "getfilter()", +"bca95e31": "doAction(address,uint256,string,uint256,uint256,uint256,uint256,address,address,string,string)", "bca9745c": "display_time(bytes32)", "bca9a5c5": "getEmployee(uint256)", "bca9adef": "vestedAvailableAmount(address,address)", "bca9e546": "testControlCreateWithParentParentNotInUse()", +"bcaa0c55": "getAddress(uint8)", "bcaa218e": "myFrontEndTokens()", "bcaa85df": "lockAccounts(address,bool)", +"bcab4245": "fixRetWBet_(uint256)", +"bcab7a8b": "tokenForTeam(address)", "bcab7ad2": "TimeDecayingTokenBoundary(uint256,uint256,uint256,uint256,address)", "bcabb0c8": "getAllProposalVoters(uint256)", "bcabb54c": "modifyCommunityInfo(uint256,string,string,string,string)", "bcabbfb1": "startDonation()", +"bcac5685": "PLATFORM_FEE_FRACTION()", +"bcadc7ba": "removeLiqudity()", +"bcade28d": "hasBuyerApproved()", +"bcadf77e": "firstWith()", +"bcae15ab": "getBNBStakingStartTimeById(uint256)", "bcae19f4": "base58Address(bytes)", +"bcae978b": "setDefaultCallValue(uint256)", "bcae9d43": "theProxy()", "bcaedade": "STANDARD()", +"bcaee6b4": "createAstrodrop(address,address,bytes32,uint256,bytes32,bytes32)", +"bcaeed20": "sellTokenOrders(uint64)", +"bcaf0a89": "getPrizeIndex(uint256)", +"bcaf22e1": "link_ilk()", "bcafe9a9": "setIncreaseRepAvailableForExtraBondPayouts(bool)", +"bcb01f44": "setManagerFeeNumeratorChangeDelay(uint256)", "bcb02b74": "testFailPushWhenStopped()", +"bcb04427": "funds(address,bytes)", "bcb0a787": "_setSchellingRoundSupply(uint256)", "bcb0c2d7": "removeStakeholder(address)", "bcb0c7c0": "nomParticipant(uint256)", "bcb0f541": "setEarlyBirdDuration(uint256)", +"bcb13fa0": "assist_kyber(uint256)", "bcb1e4f7": "GetSellingTokenUnitPrice()", +"bcb21f44": "setPositionOperatorStatus(uint256,address,bool)", +"bcb2db39": "refLevel1_()", "bcb2f8c6": "externalFundProposal(uint256)", +"bcb31306": "tp_id()", "bcb32828": "emissionAddress()", "bcb39621": "currentSeason()", "bcb3b5d2": "getGamblesList(uint256)", +"bcb453f7": "decreaseStarSupply(uint256)", +"bcb45f80": "getTotalReferReward3()", +"bcb47298": "Claimed()", +"bcb48a80": "approve_535(address,uint256)", +"bcb49086": "boostLevelMultipliers(uint256)", "bcb593f1": "subOnStage(address,uint256)", "bcb60fa9": "blockTx(bool)", "bcb638cb": "parseImpressions(uint64,bytes)", +"bcb69d1c": "IncreaseCap(uint256,int256)", "bcb7b0d4": "pauseICOs()", "bcb7f880": "DTCC_ILOW_2()", +"bcb7f95e": "withdrawIERC20(address)", +"bcb81bfc": "addPastCheckpoints(address[],uint256[])", "bcb83450": "createMarriage()", +"bcb8b280": "rx()", "bcb98ba2": "changeChampsName(uint256,string)", +"bcba33e4": "gzeBonusOffList()", "bcba53f4": "_createBlock(uint256,uint256,uint256,string,address)", "bcba6939": "transferERC20Token(address,uint256)", +"bcbacb6d": "getPlayerLaffName(address)", "bcbb64c4": "softCapInToken()", +"bcbb96ac": "newPonie(string,uint8)", "bcbc1585": "_payRoyalty()", "bcbc758a": "SixStandardToken(uint256,string,uint8,string)", "bcbc9175": "prefixedHash(bytes32)", +"bcbcd4a3": "_evalPairListHashFromNode(bytes32[],bytes32)", "bcbd3bcd": "_editPersonalNote(string,uint256)", "bcbd82e5": "rateForPreICO()", "bcbd9881": "setFriendsFingersRate(uint256)", "bcbdbf40": "SaleResumed()", +"bcbe067b": "getEpochIndex(uint256)", "bcbea1ad": "transferCardTo(address,address)", +"bcbecff8": "_maxtxamount()", +"bcbf25f7": "distributePack(address,address)", "bcbf5b90": "totalSupplyForPresale()", +"bcbf6ba5": "buyPromote(uint256)", "bcbf7229": "resetVoteCount(uint256)", "bcbfe43c": "openSaleCompleted()", +"bcc0393e": "setOnlyVault()", +"bcc08919": "airdropAgent(address)", "bcc13d1d": "contributionMin()", "bcc1480a": "canTransferBalance(address)", "bcc17ca0": "getvalues(uint256)", +"bcc17dc7": "logData()", +"bcc1b154": "addRecoveryAccount(address,uint256)", "bcc221d0": "getBonusValue()", "bcc30409": "processPurchase(address,uint8,uint256)", +"bcc320e3": "getLastRewardBlock(uint256)", +"bcc33e9d": "adminTransfer(address,address,uint256,bytes,bytes)", +"bcc361c1": "getTotalRelease()", "bcc37dd4": "approvedAccount(address)", "bcc38018": "recycleReward(uint256)", "bcc38d59": "proxies()", "bcc3af24": "hasVotedOnConstitutionPoll(uint8,address)", +"bcc44587": "registerCitizenOwner(address)", "bcc44a72": "restoreTokenOwnership()", "bcc46e83": "addCollateral(uint256)", +"bcc471ad": "taskInitRandom(uint256,address)", +"bcc49e18": "SuccessfulVote(address,uint256)", "bcc4e4ab": "getVesting()", "bcc4f0ed": "isValidBuy(uint256,uint256)", "bcc5601b": "BaktFactory(address,bytes32,address)", "bcc5dce5": "stash(uint256)", +"bcc5e51e": "checkOfferBlockEth(uint256)", "bcc6092a": "MyEtherBank()", "bcc673bd": "GeneralToken(string,string,uint8)", +"bcc687bd": "_lockNFT(address,uint256)", "bcc70902": "create(address,uint256,uint256[],uint256)", "bcc74a3b": "isAdminAddressExist(address)", "bcc7900c": "SystemTest()", "bcc7db5a": "cleanupErrorGame(address,uint256,uint256)", +"bcc81c0c": "canCloseProposal(uint256)", +"bcc84b2c": "WithdrawETHAndTokens(address)", "bcc91d61": "sendEther(address[],uint256[])", "bcc941b6": "totalWinners()", "bcc94309": "calculator(uint8,uint256,uint256)", +"bcc96090": "stakedAccounts(address)", +"bcc980e6": "initilaize(uint256[],address,address,uint256,uint256,uint256)", "bcc9ed6f": "MAX_PAYOUT_FRAC_TOP()", +"bcca1e04": "unstake(address[],uint256[])", "bcca1fd3": "changeVotingRules(uint256,uint256,int256)", +"bccab3a6": "TokensSold()", "bccb6157": "RedemptionWalletUpdated(address)", "bccb8fc0": "vestTokens(address,uint256,address,uint256,uint256,uint256,bool)", +"bccbc36c": "userRegistered(address)", +"bccbc663": "currencyBurnRate()", "bccc85e6": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bccda80b": "burnMyBIDS(uint256)", "bccda810": "logicContractAddress()", "bccdd9a6": "getValueFromCents(uint256)", "bcce515d": "bulkMint(uint256[])", +"bcce6040": "HOUSE_EDGE_MINIMUM_AMOUNT()", "bccee504": "m_ETHPriceLifetime()", "bccf0972": "egrToken()", +"bccf158c": "updateMicrochip(uint256,bytes32)", "bccf5aa4": "issueTokenAndTransfer(address)", +"bcd05a18": "burnMulti(address[],uint256[])", +"bcd068da": "getBsdsAmountInPool(address)", "bcd0b22a": "getSnapsLength()", "bcd0ce28": "BitcoinUniversal()", "bcd101a6": "getStartDates()", +"bcd11014": "getRewardForDuration(address)", +"bcd222fd": "setRewardDistributionInterval(uint256)", +"bcd23b59": "is_claimed(address)", +"bcd24607": "doPay(uint256,uint256,uint256,uint256)", "bcd2780b": "addValidContract(address)", +"bcd28e05": "Minted(address,address,uint256,bytes)", +"bcd2f64a": "buyTokenWithUSDT(uint256)", "bcd2feff": "biotorBiomassToken()", +"bcd37526": "redeemCollateral(uint256,address,address,address,uint256,uint256,uint256)", "bcd396d1": "adminTrade(uint256[],address[],uint8[],bytes32[])", "bcd3d8ca": "Collector(address,address,uint256)", "bcd3ff89": "setGameSponsorInfo(address,uint256)", +"bcd407d3": "getTop3CompletedDistanceByTeams(string)", "bcd4144b": "giveGreed()", "bcd45a76": "HolderVacated(address)", "bcd47934": "hasBiometric()", "bcd5078c": "get_king_address()", "bcd533ae": "newRefundProposal()", "bcd5349f": "getCapacity(uint256)", +"bcd53992": "mediaHash()", +"bcd58f27": "checkCompliance()", "bcd59261": "getDepositBlock()", "bcd59b36": "secondsAfterStart()", "bcd60f6c": "winningProposal(uint256)", "bcd61c6a": "getGoodPrice(bytes32)", +"bcd674a2": "_managers(uint256)", +"bcd6deec": "wipeAllAndFreeGem(address,address,address,uint256,uint256)", +"bcd6ffa4": "updateStateOnDeposit(address,address,uint256,bool)", +"bcd74c04": "gettTokenTotalBalance(address)", "bcd789cc": "submitProposal(bytes32,string,address,address,uint256)", +"bcd7fec0": "DAI_TokenContractAddress()", "bcd85b6d": "getBackerStatus(address)", "bcd88a61": "viewInvestorDividendPool()", "bcd9cc60": "rejectCetification(address)", +"bcda1788": "rewardN()", "bcda2c0c": "_delete()", "bcda601f": "Panicked(address)", +"bcda9d07": "Pynths(uint256)", "bcdac66f": "Power()", "bcdaea36": "setOpGas(uint256,uint256,uint256,uint256,uint256)", "bcdb446b": "recoverEth()", +"bcdba58a": "currentNode()", +"bcdc3cfc": "totalStakedSupply()", +"bcdd1e13": "withdrawERC20Tokens(address,address,uint256)", "bcdd6121": "increaseApproval(address,address,uint256)", "bcdda53f": "TokenERC20(address,uint256,address)", "bcddd64e": "CHECKPOINT_KEY()", "bcde18f1": "fundingStart()", "bcde87eb": "totalAmountOfTeatokensCreated()", "bcdea6f9": "getStageMinimum(uint8)", +"bcdeb609": "getTop3CompletedDistanceByTeams()", "bcdf266c": "EphronTestCoin()", "bcdf43dc": "add_presale_arbits_sold(address,uint256)", +"bcdf451c": "is_profitable()", "bcdf569b": "finalize(address,address)", +"bcdf689a": "viewRank()", "bcdfe0d5": "Hello()", +"bcdfe5d7": "lastStakeOf(address)", +"bce03707": "getNextWithdrawBlock()", "bce0e87a": "payoutOnPurchase(address,uint256)", "bce0fb22": "takeOwnershipWithIndex(uint256,uint256)", +"bce12724": "unlockEscrow(address)", +"bce1b520": "restake(uint256)", "bce1cdc3": "getTotalEtherOfAllRounds()", +"bce2041e": "DEFLCTYMENLPperETHUnit()", +"bce23807": "chmToken()", +"bce23a78": "backTokenForRewards(uint256)", "bce24669": "removeGame(address)", +"bce2aa8e": "getMinuteProfitRate(uint256)", +"bce2aa92": "swapHistoryList(uint256)", "bce2b9a3": "purchaseEgg()", "bce2bb42": "setCoinTotalsContract(address)", "bce2d16d": "koef()", "bce32da4": "AndhraToken()", "bce3cc67": "TokensReclaimed(uint256)", "bce440d5": "TokensContractAddressSet(address,address)", +"bce472ea": "getTrophyBalance(address)", "bce49a90": "KKCToken(address)", "bce4d041": "updateCancels(address,uint256)", +"bce4d246": "onCoinDetail(uint256,uint256,uint256,bool,uint8,uint256,uint256)", "bce5a209": "owners2tokens(address,uint256)", "bce5fc53": "UIOCOIN(uint256,string,uint8,string)", "bce6158d": "PTransfer(address,uint256)", "bce643aa": "developer_new_symbol(string)", +"bce673f3": "mcdRegistry()", "bce70868": "buildingIsPublic(uint256)", +"bce800e5": "getConfirmationsCount(uint256)", "bce83d2a": "setWhitelist(address,address,string)", +"bce857fb": "setAddressForOwner(address)", +"bce918ed": "aifiAssets(uint256)", "bce94649": "getRangeURI(uint256)", +"bce998f4": "ratioStaking(address)", "bce9ae3d": "NewDeal(uint256,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "bce9ccb9": "GetCitySnapshot(address,uint256)", "bcea363d": "killContract(address)", +"bcea56e0": "lookupFrom(address)", +"bcea610e": "advertisements(uint256)", "bcea7ea0": "chargingGas(uint256)", "bcead63e": "lender()", "bceaf1fd": "CLOUDForGas()", +"bceb514d": "vote(address,uint8)", +"bceb5ae0": "jarBalance()", "bcec1df3": "ROLE_DISTRIBUTOR()", +"bcec8cf4": "totalOfToken(address)", +"bceca2a9": "enableDepositsOnMock()", "bcecbc65": "getSendersEth(address)", "bceceefe": "startCrowdsale0(address)", "bcecf667": "usdToEth(uint256)", @@ -108142,309 +197807,621 @@ "bced9cfd": "guessSeed(uint256)", "bcedb86c": "payQuarterFinalWinner(uint256)", "bcee2dd4": "getFeeCollected()", +"bcee41b4": "withdrawYOOMap(address)", "bcee6eb9": "validateProposedThroneRules(uint256,uint256,uint256,uint256)", +"bcee7612": "endStake()", "bceeb243": "getUserSSCeducationDetails(string)", "bceee05e": "isSuperuser(address)", "bceeeb9a": "SearchIPR(string,address)", +"bceef6a7": "coinsPerETH()", +"bcef2337": "addLiquidityETHOnlyForPool(uint256,address,bool)", "bcef393a": "balanceOfVault(uint256,address)", "bcef84b1": "getMaxBuy(uint256,uint256)", "bcefafab": "changeAccountAddressForSponsee(address)", +"bcf0196b": "AC()", +"bcf06a51": "book(uint8,uint256,bytes32)", +"bcf09fd8": "lambertPos2(uint256)", "bcf0dd8e": "marketTransfer(address,address,uint256)", "bcf0e1ea": "TerrariumCoin()", +"bcf14313": "getStageIndexAt(uint256)", "bcf175c8": "oraclize_cbAddress()", +"bcf1bc6d": "updateNFT(uint256,uint256,uint256)", +"bcf1ff5a": "tokenV4()", +"bcf26ad4": "mdxToken()", +"bcf27d64": "IdentityUnset(address,string)", "bcf2e323": "sort(bool)", +"bcf32b00": "MarketKi()", +"bcf36a9f": "penaltyActive(uint256,address)", +"bcf43a9e": "swapTokenOnDEX(address,address,uint256,uint256,address,string)", "bcf49c72": "dewhitelistAddress(address,address)", +"bcf561db": "exportFeeIndex(uint256)", +"bcf58014": "likeSlotRenew(address)", +"bcf59871": "approve_378(address,uint256)", "bcf599f1": "toUnixtime(bytes32)", +"bcf6079a": "distributePremintedToken(address,uint256)", "bcf610bc": "UnsetAgenda(string,address)", +"bcf61df2": "actionDetailActivity(string,uint256)", +"bcf64e05": "burn(uint256,bytes32)", "bcf6558c": "releaseMid()", "bcf685ed": "setAgent(address)", +"bcf68efd": "setAuthorizedToken(address)", "bcf68f87": "lockCrowdSale()", +"bcf6a68a": "Executed(uint256)", "bcf6b3cd": "changeBaseValue(uint256,uint256,uint256,uint256)", "bcf711b2": "CBXToken()", +"bcf71f0d": "modifyExchanges(address,bool)", +"bcf728b2": "leaveTokenGroupAndWithdrawBalance(uint256)", +"bcf754af": "nextReb()", "bcf7b67e": "emitFeesClaimed(address,uint256)", "bcf7bd0b": "requireEnoughExpForBreeding(uint256)", +"bcf81cfa": "SecondStageStartsAtChanged(uint256)", "bcf83634": "basecost()", +"bcf93dd6": "voteTime()", +"bcfa0786": "INITIAL_TOKEN_HOLDER()", +"bcfa41ba": "collectPrincipalRepayment(address,uint256)", +"bcfa4512": "JBDKFBERF934(address,uint256)", +"bcfa6971": "tokenInAiVault()", "bcfa87d2": "getBounsEarnings(address)", "bcfaa79d": "mintTokens(address)", "bcfb0140": "getTokenOrderDataHash(uint256[],uint256,uint256,address,address)", +"bcfb3f6d": "prepare(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"bcfb4e3a": "basePriceRareNFT()", "bcfb4ea1": "Million()", "bcfb9b61": "voteProposal(uint256,bool)", "bcfbd445": "getTrader(uint256)", "bcfc5078": "bountiesKey()", +"bcfc9a2a": "getExcludeTokenBalancesList(address)", "bcfcb03e": "allocateFounderTokens()", +"bcfcedaf": "ethtousdc(uint256,address)", +"bcfd9be0": "log(uint256,address,address)", +"bcfdc0cf": "getDefaultPartitions()", "bcfde742": "setHardCapCHF(uint256)", +"bcfe01e2": "enterBidForRPunk(uint256)", "bcfe070f": "batchCancel(address[],uint256[])", +"bcfe2b8d": "poolStakingInfo(uint256)", +"bcfe3489": "SUB()", "bcfe8fb4": "ArtTokenBurn()", +"bcfe9fe5": "darknodePaymentStore()", "bcfea3e4": "BLMCH()", +"bcfeb95c": "viewUserLevelStatus(address,uint8)", +"bcff0d93": "decodeAndGetTerms(bytes32)", +"bcff1210": "rewardVisitor(address)", "bcff702b": "salePause()", +"bcffb42f": "DemocCatDeprecated(bytes32,uint256)", +"bcffb71e": "setReinvestAmount(uint256,uint256,uint256)", +"bcffe5f4": "buyOrderIterate(bytes32)", "bcfffab8": "shopStoreNextId()", "bd002e1e": "startPoll(bytes,uint256,uint256,uint256)", "bd00b0c2": "changeDedeAddress(address)", +"bd00c9c4": "router02()", "bd0100c9": "registerAddress(string,address,address)", +"bd01bb32": "getTargetPrice()", "bd01c7d5": "buyTicketToDraw(uint256,uint256,address)", "bd025a79": "setDoge(address)", "bd02942f": "allocateAdvisors(address,uint256)", "bd02d0f5": "getUint(bytes32)", "bd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", +"bd030901": "getBoosterForUser(address,uint256)", +"bd03e501": "transferEther(uint256,address)", +"bd03f44f": "ROUND_3_TOKENSALE_LIMIT()", "bd041c4d": "vote(address,bool)", "bd042ca6": "GigsToken()", "bd04923f": "values(uint256,uint256,uint256)", "bd05c055": "timeBetweenGames()", "bd05cb4d": "createContractItem(string)", +"bd05fb75": "withdrawLockedTokensAfter1Year(address,uint256)", "bd06aa84": "WithdrawalContract()", "bd06e777": "SCORE_REPORT_START_TIME()", "bd075b84": "mint(address[])", "bd079484": "getmortiesSinceLastHatch(address)", "bd079a18": "YTPAY(uint256,string,string)", "bd088724": "mintDone()", +"bd08c08f": "set(address[],address[],address[],address,address)", +"bd091a09": "MintN(uint256,uint256,address,uint256)", "bd097e21": "fundContract()", "bd09f117": "eidooWallet_()", "bd0a0e85": "setLeaderboard(uint256,uint256)", +"bd0a51f7": "earnedBNB(address,uint8,uint8)", "bd0ae405": "voterReward(address,uint256)", "bd0af85d": "pay(address,address)", "bd0b65e4": "sub_id(string,uint256)", +"bd0bb4f6": "isStakeholderIndex(address)", +"bd0bd69e": "greet_all()", +"bd0c07ce": "setInterestModelParams(uint256,uint256)", "bd0c6307": "contrExit(uint256[])", "bd0cac13": "updPool(uint8,uint256)", "bd0cc4ee": "reverseSplitTokensAfterDistribution(uint256)", +"bd0d24d0": "_ethBuyswitch(bool)", +"bd0d639f": "foo(address,uint256)", +"bd0e0db7": "_claimRewards(address,uint256)", "bd0e5d07": "deposit4()", "bd0e6a0f": "startICO(bool)", +"bd0f371c": "add_or_edit_party(string,string)", "bd0fda3d": "EntityCount()", "bd102430": "blacklister()", "bd102993": "CurrentStageUpdated(uint256)", +"bd112073": "removeKingReserves(uint256)", +"bd113183": "setLoyaltyPoint(address,uint256)", +"bd115d01": "witness(string,string,string)", "bd119967": "add_rating(uint256,uint256)", +"bd11ab08": "MINOR_RATE()", "bd11e933": "wingsTokenRewardsPercent()", +"bd11f69d": "colors(uint256)", +"bd12313a": "getNegligibleRateDiffBps()", +"bd1279ae": "isAvailabilityVerifier(address)", "bd129b92": "batchFillOrders(uint256[],bytes[])", "bd12a007": "InterfaceId_ERC721Metadata()", +"bd12cdcf": "_creatContract(uint256)", "bd131a78": "firstAuctionsExtendableDuration()", +"bd14598f": "encode()", "bd149031": "LongToken(uint256,string,string,uint256)", +"bd14de96": "agreements(uint256)", "bd14fe3e": "hasOwnerAccess(address)", "bd153c64": "emitted()", +"bd156273": "properties(bytes32)", +"bd15c68c": "removeAddressesToWhitelist(address[])", "bd15e9ab": "hasMinBudget(address,uint256,uint256[])", "bd1607ed": "HashRush(string,string,uint8,uint256)", +"bd161ccf": "addrAlreadyRegistry(address)", +"bd1627e8": "initialSnapshot(address)", +"bd16742c": "getRootByIndex(uint256)", +"bd169119": "flashFee(address)", +"bd16a33e": "turbo(uint256)", +"bd16b5b4": "hashRatePerUsdt()", "bd16deaa": "ownerSetMaxBet(uint256)", "bd16f1f3": "unfreezeByIndex(uint256)", +"bd1714a1": "totaldai()", "bd1723e5": "blackBox()", +"bd17596a": "consumer(bytes)", "bd17647f": "changeMilestone(uint8,uint256,uint256)", "bd17a9d8": "blockAccess(address,bytes32)", "bd17d63a": "TokenStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", +"bd17ee6b": "ONE_YEAR_BLOCKS()", "bd183430": "ArtIs()", "bd185612": "changeCertificateHash(address,bytes32,uint256)", +"bd1870a3": "unlockUser(address)", "bd187e3b": "changeParticipationFeeForRaz(uint256,uint256)", +"bd188d3a": "ResellingSubtracted(address,uint256)", "bd189666": "DetailedERC20Mock(string,string,uint8)", "bd19036a": "investmentCapIcoPhaseTwoPounds()", +"bd190a28": "isValidSignature(uint256,uint256,uint8,bytes32,bytes32)", "bd1954c6": "ownerToBooty(address)", +"bd1a6a9f": "isValidStamperAddress(address)", "bd1a77a8": "sellNac(uint256,address,uint256)", +"bd1a84ab": "authKeysArray(uint256)", "bd1ad05c": "LogRecoveryChanged(address,address,address)", "bd1b324c": "NewMyToken()", +"bd1b7146": "debtNotifier()", "bd1b768b": "getApprovedAddressesOfList(address[],address)", +"bd1b820c": "convert(address,address)", "bd1baedb": "SignumToken()", "bd1bca06": "_getCrabData(uint256)", +"bd1cadb8": "offerMaskForSaleToAddress(uint256,uint256,address)", "bd1d3432": "FOUNDER_ADDRESS1()", +"bd1d3d6b": "BroadcastMessage(uint8,string)", +"bd1d617f": "RequestProcessed(uint256)", +"bd1db43f": "approvedIndex(uint256)", +"bd1ddd33": "createBeauty(string,address,uint256)", "bd1de900": "totalOffer()", +"bd1e7c2c": "setEarnedToToken0Path(address[])", "bd1edd81": "acceptDeposits(uint256[],uint256[],uint256[],uint256[])", "bd1f4b52": "withdrawErc20(address,uint256)", "bd1f7d52": "GetBoosterData()", "bd1fac00": "TOKEN_COMMUNITY()", +"bd203ddb": "buyBee(uint256)", +"bd205775": "hatcheryRice(address)", +"bd213b28": "claimFanny()", +"bd2143c3": "cur_price()", +"bd215256": "allBasicCollected(address)", "bd218493": "tokenLimitPerWallet()", "bd21a864": "DigitalTradingCoin(address)", +"bd21f29a": "USDT_GWTB()", "bd21fa47": "accountBalances()", +"bd220dae": "isPostSettlementDelay()", +"bd222509": "isSignatureValid(address,uint256,uint256,uint256,uint256,bytes)", +"bd224ce1": "feedPrice(address,uint256,uint256,uint128,int128)", "bd22b1cb": "millionDollarTokenReward()", "bd22d07f": "getTankByTokenId(uint256)", "bd22f1cd": "testSubmitHash()", "bd2302fc": "transferProposal()", "bd23076f": "LamboToken()", +"bd231ec0": "canClaimSingle(address,uint8)", +"bd23cd30": "registerInstitution(string,address)", "bd23eb39": "tokenFallback()", "bd242709": "initBob(uint256,uint256)", "bd249ff0": "lockedBoardBonusAddress()", "bd24b0d0": "ZHORA()", +"bd24db1e": "tokensPreIcoInOtherCrypto(address)", "bd24de29": "blockDuelBegin()", "bd24f08a": "isInBalanceLimit(address,uint256)", "bd2560a0": "_inverseGetTokenAmount(address,uint256)", +"bd25a765": "confirmOwnersUpdate()", +"bd25ee7e": "changeProxyAddress(address)", "bd262a20": "setAuthority()", +"bd270ebb": "opO(address)", "bd272880": "OnUpdateFee()", +"bd27d361": "platformMaintenanceBal()", +"bd27d362": "removeManufactory(address)", +"bd281ab5": "removeUserSettlement(address,address)", "bd2850ab": "Freeze(address,address,uint256,uint256,string)", "bd285ea8": "ReferedCrowdsale()", +"bd28ccfb": "cadastrar(bytes32,uint8,bytes32,bytes32)", +"bd28ce59": "requiredToken0ToBid(uint256,uint256)", "bd28d688": "TFOA(uint256,string,string)", +"bd28f351": "lastDepositTime()", +"bd28f375": "levelEnd(address)", "bd28f504": "_computePet(uint256,uint256,uint256)", "bd290d8b": "isValidLenth(string)", +"bd293850": "registerBatch(string)", "bd295f30": "GoodTronToken(address,address)", +"bd2a0eeb": "recentAverageRate()", "bd2b4ab7": "DigitalContentsToken()", "bd2b6444": "adminUpdateWhiteList(address,address,bool)", +"bd2bdcfd": "f3c()", "bd2c0ead": "removeHolder(address,uint256)", "bd2c245e": "privateIcoFinalized()", +"bd2ca09d": "ReserveAddressSet(address)", +"bd2cd1bc": "registerApiKey(address)", "bd2cef65": "callback_ForPayout(bytes32,string,bytes)", +"bd2d2d9e": "mdgLockerAddress()", +"bd2dcd38": "liquidationPrice(address,bool)", "bd2deecb": "create(bytes32,address,address[],address,bytes32)", +"bd2e065c": "sneakers(uint256)", +"bd2e66a7": "appointIssuer(address,bool)", +"bd2f37ba": "getLandImprovementData(uint256)", +"bd2f8a91": "claimTaxPercent()", "bd2fffb3": "FlipNA()", +"bd300089": "planId()", +"bd30243e": "withdrawLockedRewards()", +"bd30558e": "APR()", +"bd305625": "allowedBorrowers(address)", +"bd307d51": "yvecrv_eth_path(uint256)", "bd3124e0": "addToBank()", +"bd31a4d8": "requiredVotes()", +"bd31a971": "MatchUpdated(uint8)", +"bd31f561": "giveMeAnAddress(address)", "bd320dde": "firstSaleDelivery(address,uint256)", "bd322b77": "enableApi(address)", +"bd328922": "setDecreaseDifficultyConstant(uint256)", "bd32aa44": "initiateSelfDestruct()", +"bd32d3f9": "MIRROR_CHANNELID()", "bd336584": "first_release(uint256)", "bd338d85": "yearOneMultiplier()", "bd33cc91": "requestRefundContributor()", +"bd3410e9": "createInviteNameEvent(address,bytes32)", "bd345ed9": "setETH(string,uint256)", +"bd346bf4": "ethRebPrice1CumulativeLast()", "bd353ce2": "withrawDev()", +"bd35522b": "setProjectName(uint8,string)", +"bd355ec7": "tempNotLockedAccount(address)", "bd355f43": "amountOfBags()", "bd3566b7": "generateToken(address,uint256,string,string)", +"bd35d48a": "presetPaths(address,address,uint256)", "bd35d570": "GAS_TO_COMPLETE_EXECUTION()", +"bd35d86c": "pendingYieldMaster(uint256,address)", "bd366ddc": "reclaimEthicHubTeamFee()", +"bd368504": "fetchTokenPrice()", "bd36a5cd": "updateSaleStatus()", "bd36c881": "bytesToAddress(bytes,bytes)", "bd36cc93": "burnCancel(address,address)", +"bd36cd0c": "chainedEntropy(uint256,uint256)", +"bd3714e4": "setSynthAddressInProx(string,address)", +"bd3733fe": "uniswapPairAddress()", +"bd37b775": "redeemCollateral(uint256)", +"bd37c8aa": "toUint256(bytes)", "bd37fec9": "Protean()", "bd382b45": "getWindowAdjRatioForGameId(uint256,bool)", +"bd38837b": "converter()", +"bd3900c0": "_burnAddress()", +"bd39730e": "stopSaled(bool)", +"bd3980eb": "setRoutineAuth(bytes32,bool)", +"bd3a13f6": "initialize(string,string,uint256,address)", "bd3a2ef4": "updateOdds(string,uint256)", +"bd3a353c": "referral_percent4()", +"bd3a4dfa": "finishChangeFeeRates()", "bd3a5208": "getOraclizeRoundGasFee()", "bd3a9d3c": "_createAuction(uint256,string,uint256)", +"bd3b1046": "KYC(address)", +"bd3b2603": "outBPool2Win(address,uint256)", "bd3b5d07": "m_pending()", +"bd3bb1c7": "removeFromSets()", "bd3bef41": "NewLeader(uint256,address,uint256,uint256)", +"bd3c75fc": "GoldMigrated(address,string,uint256)", +"bd3c97ef": "LogFighter(uint32,address,uint256,uint256,address,uint256,uint256,uint8,uint256,uint64)", "bd3ccfc9": "getWeeklyTransactionVolumeSending()", +"bd3cdbdd": "bryToWbnbRoute(uint256)", "bd3ce132": "transferManually(uint256,address)", +"bd3ce92b": "createCrowdsale(address,uint256,address,uint256,uint256,uint256,uint256,address,uint256)", "bd3d0ecb": "newName(string,string)", "bd3e19d4": "getCost()", "bd3e7401": "setupSale(uint256,address)", +"bd3e8d5e": "num(address)", +"bd3e904f": "withdrawEtherTokenAmount(address,uint256)", "bd3f0965": "AiraEtherFunds(string,string)", "bd3f7817": "DaysToDestroy(address)", "bd3fe562": "getRadarsIds()", +"bd400cc4": "indexing()", "bd4074f9": "tokensForCrowdSale()", +"bd40e9db": "set_oracle_payment(uint256)", +"bd41350d": "mine(uint256,uint256,address)", +"bd4291c1": "addrOfNestMining()", "bd431462": "BuyBSTtokens()", +"bd4315f9": "setCanExecute(bool)", +"bd4347c9": "generateNft(address,string,string,uint256)", +"bd436f94": "ENCORE_Ether_Given()", +"bd440ffb": "sumWeightOfMultiToken(address)", +"bd44815f": "vaultId(address,address)", "bd45115c": "PGPToken()", +"bd45126d": "uniswapExchangeExecutionContract()", +"bd452696": "minimumStakeRatio()", "bd457de2": "KAPcoin(uint256,string,string)", +"bd45d230": "redeemBPro(address,uint256)", +"bd466461": "getBep2SymbolByContractAddr(address)", +"bd467b6e": "setTokenInfoData(address[],uint256[],uint256[])", +"bd475511": "erc1155MultiSendWithEtherBonus(address,address[],uint256[],uint256[],uint256[])", "bd478fcb": "readFromCart(address,uint256)", +"bd479cf1": "bonusMap(address)", "bd47c1a2": "getAccountListLenght()", "bd47dd7a": "lockSeedInvestors()", "bd484606": "techWallet()", "bd48fa0e": "unpause_3()", +"bd497855": "SaleWillStart(uint256)", "bd499af3": "updateOptionsRegistryAddress(address)", "bd49f00f": "ownersTokenList(address,uint256)", "bd4a359d": "getLatestVersion(bytes32,bytes32)", +"bd4ade6b": "x123()", "bd4b6bbd": "transferScoupons(address,uint256)", "bd4bb67e": "transferTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", "bd4c0755": "Test68()", +"bd4c0dc5": "DSDS()", +"bd4cc3e1": "redeemSharesEmergency()", +"bd4cc830": "calculateHeaderRelayerWeight(uint256)", "bd4cfadf": "getownerInfo(address)", +"bd4d54df": "setTokenLock(uint256,address)", "bd4dc024": "landRegistry()", +"bd4de9cd": "burnERC20(uint256,address)", "bd4e0b4d": "REFERRAL_TOKENS()", +"bd4e2194": "buyerNumber()", "bd4ed6cc": "sumHardCapPreICO2()", +"bd4fd134": "calcFrequency()", "bd5021af": "startRecovery(address)", "bd5034ff": "Redeem(address,uint256,uint256,uint256)", +"bd5053d1": "updateVotes(address,bool,uint256,bool)", "bd50b3b4": "transferAndLock(address,uint256)", "bd513bea": "getTreasure(bytes32)", "bd51525e": "typeOf(address,uint256)", "bd51654b": "showMyEtherBalance(address)", "bd516e04": "addCombat(uint128,uint128,bytes32)", +"bd517a70": "balanceRebalance(uint256)", "bd5196cf": "createGame(string,string,uint256,uint256,string,address,uint256,string,bytes32[2],bool,string)", "bd51d5d0": "hasBalance(address,uint256)", +"bd51e317": "STATS_TYPE_INVITE_1ST_TODAY_REWARD()", "bd51fa4c": "propose(string,string,string)", "bd527527": "setLLV_edit_13(string)", "bd52d81a": "_emitRoleRemoved(address,uint8)", "bd5304e3": "ContributorBalanceChanged(address,uint256)", "bd53cb96": "changeUnitsUserCanBuyLimit(uint256)", "bd541ad0": "depositEscapedFunds()", +"bd5433e8": "AllocatedAdvisors(address,uint256)", +"bd5437e8": "setTokenBinder(address)", "bd545f53": "cancelAllOrders(uint256)", +"bd549548": "setETHMin(uint256)", +"bd54a074": "nextOvernightFeeTime()", "bd54bced": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"bd54c89c": "changeMetadataBaseUri(string)", +"bd55022a": "tradeCount()", "bd550824": "_setPayTo(address)", "bd556252": "PRE_ICO_PERIOD()", +"bd5620c4": "LUCAXStake()", +"bd56b2e6": "setShop(uint256,address)", "bd58118f": "allocateAngelTokens(address,uint256)", "bd5821ca": "_refund(address)", "bd5821f1": "changeActualTokenValue(uint256)", "bd583bff": "registerManager(address,address)", "bd59434d": "setGame(uint8,address)", +"bd5950d2": "Birth(address,uint256,uint256,string,string)", +"bd59fd40": "MAX_STAKE_VALUE()", "bd59fdde": "ITube()", +"bd5a8f5f": "medianOracle()", "bd5acbd6": "continueOrder(uint128,uint256)", +"bd5addb7": "setMaxBattlePerDay(uint256)", "bd5ae945": "NodeSwapCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", +"bd5b3837": "lastUpdatedMinutes()", +"bd5b622a": "isWhitelistRewardRebaser(address)", "bd5b758d": "ObtainChip(uint32)", +"bd5b853b": "setup(address[])", "bd5b948d": "CCH_ILOW_1()", +"bd5bda09": "exchangeAdapters(bytes32)", "bd5c4e24": "TIMEOUT_DESTROY()", "bd5c5420": "setExchangeRate(address,uint256)", +"bd5c643f": "cockPerBlock()", +"bd5c82ee": "global1FallUid()", +"bd5c8b60": "hello(uint256,address)", "bd5ca3a3": "createProxyImpl(address)", +"bd5cea84": "taotacgia()", +"bd5d0b3d": "drawcoach(uint256,address)", "bd5d7b1d": "FEELCOIN()", "bd5dec98": "withdraw(address[])", "bd5e3a80": "GPPHARMTOKEN(uint256,uint256)", +"bd5ec3e2": "allTypes(uint256)", +"bd5ec8f2": "setLot(uint32,uint128,uint128,uint32,uint128,uint128,uint32)", +"bd5f6d4c": "loadPerBlock()", +"bd5fec65": "userOffers(address,uint256)", +"bd6015b4": "sellBase(address)", +"bd6018bb": "removeCreator(address)", "bd60527b": "getEmployerContracts(address,uint256[],uint256[])", +"bd60c288": "paidTeamActivationGain(uint32,uint256)", +"bd60cb42": "referPaid(address)", "bd611c73": "TOTAL_ICO_TOKENS()", "bd61ff75": "cmpn(uint256,uint256)", "bd6206ec": "initialDayWithdraw(uint256)", "bd621042": "setUnownedPriceInExoTokens(uint256,uint32)", +"bd6225d1": "NameTransferRequested(address,address,string)", "bd623d68": "encodeData(uint128,uint256,uint24,uint40,uint32)", "bd625f1b": "setend(uint256)", +"bd62d4d6": "pri()", "bd62fff3": "Nines()", +"bd630810": "getDisputableAction(uint256)", "bd632e10": "batchInvest(address[],uint256)", "bd633642": "MeissaChallengeToken()", +"bd6367a8": "AddedConverter(address)", +"bd637580": "addCode(bytes32)", "bd639259": "getOwnerAngelCount(address)", "bd63c338": "canRecover(uint256)", +"bd6428c1": "Configured(string,string,uint256)", +"bd6444cc": "DaiPool()", +"bd645a68": "WithdrawlStateChanged(uint8,address)", "bd646356": "calculateCommissionToWithdraw(uint32)", +"bd64782b": "totalRating()", "bd6501b1": "isValidator(uint64,address)", +"bd654390": "Reinvest(address,uint256)", +"bd655e7a": "addRunner(address)", "bd656daf": "Fomo2D()", +"bd6579f2": "getCommBalanceAdmin(address)", "bd659784": "addToList(address)", +"bd65b5e2": "addToArr2(uint256,uint256,uint256)", "bd65fc4c": "stb()", "bd66528a": "claim(bytes32)", +"bd669cc9": "getPeriodIndex(uint256)", +"bd66f5d7": "bulkRevoke(bytes32[],bytes)", "bd675c0e": "revealMove(uint256,uint8,string)", "bd679ab2": "WithdrawGains()", "bd679ad6": "burnDragons(uint256)", +"bd67c297": "getUsernameByWallet(address)", "bd6812a4": "lastBlock_a0()", "bd684865": "getAuthByPhone(string)", +"bd685019": "uMXOT(uint256)", "bd68817f": "clearRAMAll()", +"bd689854": "uf(bool,uint256,uint256)", "bd68eb34": "_spawnAxie(uint256,address)", +"bd694af2": "whitelistingStatus()", +"bd698bb3": "swapONUS()", +"bd69901a": "setTransferContractAddress(address)", +"bd69ddcf": "_anchor()", +"bd6a10b8": "setMaxOraclePriceAge(uint256)", "bd6a9abb": "hasClearingPrice(address,bytes32)", "bd6bbc31": "lastCollection()", +"bd6be09c": "crowBonusEndBlock()", "bd6bf475": "canUpdateCompany(string,address)", "bd6c4661": "fetchCancelledOrdersForPayer(address)", "bd6c6756": "cardsCount()", "bd6cac4f": "isPriorPack(address)", +"bd6d0f84": "getTotalWithdrawnableAmount(address)", +"bd6d605c": "options(uint256,uint256)", "bd6d894d": "exchangeRateCurrent()", +"bd6db976": "multisendErcKHM(address[])", "bd6de5a3": "dNextOffer()", "bd6e578a": "getPreSaleFund()", "bd6e5e03": "calcICO(uint256,uint256,uint256)", "bd6edba5": "getUserBalances()", +"bd6f4f2a": "setTargetPrice(uint256,bool)", +"bd6f51fa": "stakingPerLPT(address)", +"bd6fc18f": "totalBountyUsers()", "bd6fd20d": "getDeedTimestamp(string)", "bd7084b2": "getNextNonce()", "bd7095db": "GetCompetitionFunds(uint32)", +"bd70b294": "redeemAllToCentral(address)", "bd70c53a": "LYFToken()", "bd70fce9": "getApprenticeDistributedRandom(uint256)", +"bd713080": "TokenWithdraw()", "bd7162b6": "setPixelPrice(uint16,uint16,uint256)", "bd7173dd": "addLuckyblock(uint256)", +"bd71915f": "creatorPrize()", "bd719336": "canDistributeReservedTokens()", +"bd71a521": "COMMON_RARITY()", +"bd71dde9": "createAdaptionRequest(address,address,int256,uint256)", "bd71e476": "ownerSetMinBetMining(uint256)", "bd7243f6": "wipeBlacklistedAccount(address)", "bd725f6e": "UBSToken()", +"bd72798a": "secondaryEndTime()", "bd728083": "ShowPurchased(uint256,address,address,uint256,uint256)", +"bd72f976": "updateCardIdList(uint256[][],uint256)", "bd733dfb": "getUintsOwnerCount(address,address)", +"bd735d84": "auctionAllLength()", "bd739a2f": "existsManagedContract(uint256,address)", "bd73a9b4": "setTime4(address,uint256)", "bd7427f8": "forceRefund()", +"bd7456e3": "TRUSTED_WITHDRAWERS(address)", "bd7474ca": "upgradeDeploymentAdmins(address)", +"bd74a639": "viewloans(address)", "bd74c4e7": "setAttribute(address,address,bytes32,bytes,uint256)", "bd74dc9d": "servicePaymentWithCharityPercentage(address,uint256)", +"bd74f8b1": "houseCount()", +"bd752712": "wrapEthAndApprove()", +"bd7562ff": "referralFeeRate()", +"bd759859": "setMensaje(string)", +"bd75a423": "poolInfo1(uint256)", "bd763f59": "addPlayerData(uint256,uint256,string,uint256,uint64,uint64,uint64)", +"bd7644b8": "setUniswapPairAddress(address)", "bd76540a": "buyIn(uint8,uint256)", "bd76bf19": "addToBuyList(uint256,uint256)", +"bd77011e": "rankUpgradeSlabs(uint256)", +"bd7737d9": "TokenTimelockBeneficiaryChanged(address,address)", +"bd774ca1": "SafeGuardSuccess(bytes20,uint256,uint256)", "bd778fde": "CoinNext()", +"bd779352": "unlockDevMarketingTeamAdvisor()", "bd77ac2c": "disburse(uint256)", "bd780d0d": "getLastAttack(uint256,uint256)", +"bd7822be": "_sz_uint32(uint32)", "bd788c88": "allocate(address,address,uint256,uint8)", +"bd78b20d": "checkSubi(int256,int256)", "bd792db3": "setIcoAddress(address)", "bd797e32": "ChangeEmployeeState(address,uint8,uint8)", "bd79a42a": "decimalToPreciseDecimal(uint256)", "bd79d692": "depositEtherToVault(uint256)", "bd7a9fda": "nameRegistry(address)", +"bd7ae589": "cycles(address)", +"bd7aef24": "getInitData(address,uint256,uint256,address,address)", "bd7afb29": "lastBlock_f17()", +"bd7b02d2": "borrowAndSellFyTokens(address,uint256,uint256)", "bd7b09e4": "totalCitizens()", +"bd7b2194": "ClaimStakedTokens()", +"bd7b3196": "unlock_block_number()", +"bd7b6acf": "deed6()", "bd7b7849": "addFace(string,string)", +"bd7ba6d4": "ETHtoWETH(uint256)", "bd7be110": "SaveCoin()", +"bd7c0848": "getGateKey(bytes8)", "bd7c13c6": "phase1MaxEtherCap()", +"bd7c27e0": "mint(string[],uint256)", +"bd7c2f26": "calculateVoting()", +"bd7c40c7": "LEGENDARY_RARITY()", +"bd7ce9ff": "mCompany()", +"bd7ceb50": "Recycling(address,uint256)", "bd7d2789": "checkWinner(uint256,uint8,bytes32)", "bd7d3836": "pauseCrowdSale()", +"bd7d8df1": "_getTokenFromHere(address)", +"bd7e88cf": "UniSync()", +"bd7ed31a": "nsec3Digests(uint8)", +"bd7f2d11": "userDireMap(address,address)", +"bd7f4c8d": "getOwnerNFTCount(address)", +"bd7f6206": "getSoloPayableAddress()", +"bd7fd79a": "getReserveLiquidityCumulativeIndex(address)", "bd801ed4": "yishiliToken()", +"bd805cd1": "Buy(string,string,uint256,address,address,address,address,bytes2)", "bd80d449": "newOK()", "bd812166": "getSeasonInfo(uint32[99])", "bd815a10": "RecyclerToken(uint256,string,string)", +"bd81b1cf": "getLockupReleases(address)", "bd820688": "numOperators()", "bd826f2b": "currentnumber()", +"bd82cc7e": "showStupidShit()", +"bd833be4": "teamLockedTokens()", +"bd834345": "claimedRewards(address)", +"bd836554": "coldledger()", "bd837b2b": "approveToPullOutTokens(address,address,uint256)", +"bd839824": "limitTimeTransferEndDate()", +"bd83b6cf": "tunaPoolAddress()", +"bd83c163": "requestUpgrade(bytes)", "bd83ea8d": "createMarriage(string,string,string,string,uint256)", +"bd842a11": "moderators(uint256)", +"bd844f46": "nextWeightStartBlock()", "bd84d8f6": "ProgressiveIndividualCappedCrowdsale(uint256,uint256)", +"bd850125": "PRIME_PROVENANCE()", +"bd8518ba": "closedBlock()", "bd853960": "assertEq14(bytes14,bytes14,bytes32)", "bd85530c": "getAllSuccessInvestmentsCollected()", +"bd856d64": "setShareRewardPoolId(address,uint256)", "bd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "bd85948c": "startNewRound()", "bd85aac5": "getAllShareholdersAndShares()", @@ -108452,17 +198429,30 @@ "bd85e163": "FOURTH_USER_CUT()", "bd865d29": "end_auction()", "bd8697ab": "makeFailed(bool)", +"bd86e508": "setDelegate(bytes32,address)", +"bd880fae": "getSkill(uint256)", +"bd881e53": "computeRuling(uint256)", +"bd884ce8": "sar(uint256,uint256)", +"bd889a46": "setRATIO(uint256)", +"bd889ce4": "getBlacklistLength()", "bd88a04f": "p3dWithdrawForAdmin(address,uint256)", "bd88f603": "setImageData(address[16],uint256,uint16,uint256[])", +"bd88ff76": "setTerms(address[],uint256[],uint256[])", "bd897671": "KYRIOSToken()", "bd89d806": "y_Title()", +"bd8a175f": "no_authorize(address)", +"bd8a7322": "tv()", "bd8a79d5": "getFollowingCandidate()", +"bd8a9eed": "myunit256()", "bd8aa780": "whitelist(address[])", +"bd8ab2da": "fuck(uint256,uint256,address[],address,uint256)", "bd8b452e": "eatUnicorns()", "bd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", "bd8c5643": "disableMoving()", "bd8caabf": "setVirtualReserveBalance(uint256)", "bd8cb6ca": "removePlugin(address,address)", +"bd8ce3a9": "step2_acceptTerms()", +"bd8cfd41": "founderOne()", "bd8d34f5": "fundForTeam()", "bd8d585e": "NCO()", "bd8d5c7f": "EtherCartel()", @@ -108473,16 +198463,29 @@ "bd8e4725": "IxiniumFT()", "bd8e4a51": "getCAORatio()", "bd8e68c9": "PRICE_STAGE_FOUR()", +"bd8e9710": "birthdayMint()", "bd8f61d8": "PerfectCoin()", "bd8f997c": "getTotalQtyIpfsAddresses()", +"bd8fde1c": "REGISTRY_MANAGER_ROLE()", +"bd8ff817": "calcCost(address,uint8,uint256)", +"bd901bdd": "purchaseLPFor(address)", "bd902dad": "approveSingleUser(address)", "bd90df70": "targetContract()", "bd916452": "claimReferrerBonus()", +"bd91c964": "updateCardPrice(uint256,uint256)", "bd9215f4": "highest_bidder()", +"bd926ed3": "xfLobbyEntry(address,uint256)", +"bd929130": "LGE_HARD_CAP()", +"bd92fcfe": "isWhiteListManager(address)", +"bd9317d9": "suggest(bytes32,string,address)", "bd9335c0": "scheduleHangouts()", +"bd933d1b": "getTotalAgreements()", +"bd93a7c7": "startRemoveActivePool(uint256)", "bd93f493": "LAUNCH_DATE()", "bd945430": "OUTINGRESERVE()", +"bd948f13": "available_batch_id()", "bd94b005": "cancelSale(uint256)", +"bd94e93f": "emergencySafeTransferAsset(address,address,uint256)", "bd94fafc": "PRESALE_CAP()", "bd952178": "rejectAllocation(address)", "bd95264c": "store(address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", @@ -108490,154 +198493,281 @@ "bd95b1f2": "getdays()", "bd95d909": "sellTokenPerEther()", "bd95f042": "sendRemainsToOwner()", +"bd961070": "updateAuctionReservePrice(uint256,uint256)", "bd963442": "handleRefundRequest(address)", "bd965677": "setRelayed(address)", "bd968eed": "runeToWeiRatio()", "bd96b348": "GeBitToken()", +"bd971a0d": "emitPurged(address,uint256)", "bd97ce3a": "changeReferrer(address)", +"bd984ab6": "tknToCTkn(address)", "bd987008": "setAccountIsNotFrozenForReturn(address,bool)", +"bd98c63e": "claimTitanAvailableReward()", +"bd990bb3": "swap2BTRouting(uint256)", "bd991fc5": "setGroupRight(string,string,bool)", "bd9934f1": "freezeAddress(address,uint256)", +"bd993c9f": "custodianFilDepositAddress()", "bd993f9e": "COREthExchangeRate()", +"bd996b52": "cVideoWatched(address)", +"bd998cb3": "totalProfits()", "bd998dc8": "CloseSale()", +"bd99bec5": "SellTransaction(uint256,uint256)", "bd9a0158": "setTimeConstants(uint256,uint256)", "bd9a11fd": "finalstate()", +"bd9a1f5a": "mint_to_sell_by_pool_out(uint256,uint256,uint256)", "bd9a548b": "getPrices()", "bd9a5673": "oraclize_query(string,string[5])", +"bd9a5bc9": "vs(uint256)", +"bd9a70ce": "NextGameIdCalculated(uint256)", "bd9b49b7": "goalCompletedBlock()", "bd9b6d86": "confirmOwner()", "bd9b6e85": "tokenTranslate()", "bd9c33bc": "_discount(uint8)", "bd9c5688": "distributeFee(uint256,address)", "bd9ca422": "AIChain(uint256,string,string)", +"bd9caa58": "getPoolShare(address,uint256)", "bd9d6b37": "AddNewPresalePackage(uint16,uint256)", "bd9d6d7f": "memeData(uint256)", +"bd9d8ba7": "tokenBag()", +"bd9da935": "MAX_DEPOSIT_TIME()", +"bd9dc369": "contractStartTimestampSaved()", +"bd9dc8f6": "totalRewardClaimed(address)", +"bd9dfe27": "tokenOwner(address,uint256)", +"bd9e0c4c": "checkWhenLast_USER_Transaction(address)", +"bd9e5200": "getCollateralDetails(address)", "bd9e6bfc": "makeBuyOffer(uint32)", +"bd9e799d": "converterComputeAmountOut(uint256,uint256)", "bd9ead1f": "calculateClaimableReward(address,address)", "bd9ebfbb": "marketSellOrdersNoThrow(uint256,bytes[])", "bd9ec492": "maximumEther()", "bd9ef436": "witnessOf(uint256)", +"bd9f1e32": "commitToDisarm(bytes32)", "bd9f8917": "finalizeEnableRefunds()", "bd9fbe7b": "getDefaultAQL()", +"bd9ff41b": "isCollection(uint256)", +"bda00656": "isSellProfitable()", "bda00866": "getAmountOfUnlockedTokens(address)", "bda02782": "b(address)", +"bda02e77": "remargin()", +"bda088d4": "didVote(address,uint256)", "bda1504b": "currentSize()", +"bda159de": "tKS()", +"bda18324": "adminInitialized()", +"bda1c711": "updatePlot(uint256,uint256,bytes7,bytes32)", "bda1f35e": "Fleuth()", +"bda25953": "getUserXp(uint256)", +"bda27117": "UpgradeabilityProxyFactory()", "bda2aa53": "testUnsyncedRate()", "bda2e692": "DinosaurFarmerNew()", "bda330f7": "refundingStarttime()", "bda393d3": "totaldividends()", "bda4cf80": "_pfind(address)", "bda4fd89": "totalItem()", +"bda53107": "setPriceSource(address)", +"bda549f9": "auctionsAvailableDivisor()", "bda5c450": "calculateDividendTokens(uint256,uint256)", "bda5ea03": "tkwins()", "bda6642c": "changeStartingPricesLimits(uint256,uint256,uint256)", +"bda6688f": "newWallet(address)", "bda6c497": "borrowerReturnDate()", "bda70d92": "destroyOldCoins(address,uint256,string)", +"bda7716d": "doBatchDeposit(uint256,uint256)", "bda77531": "changeAdultDragonStage(uint8)", +"bda7b1cb": "trainees(address)", "bda7c3ee": "delegateTransfer(address,address,uint256,uint256)", +"bda8064d": "changePrizeNFTAddress(address)", "bda81086": "jsonRead(string,string)", "bda8bf45": "getWitnessWeiCost()", +"bda99d9e": "increaseUsableAmountLimit(address,uint256)", "bda9a055": "getStepsCount(uint256)", "bda9b45c": "whitelistMe(uint128,uint8,bytes32,bytes32)", +"bda9b5dc": "sendLeaderShipBonusEmerald(address,uint8)", +"bdaa4553": "signed(uint256,address)", +"bdaa686e": "NewContribution(address,uint256)", "bdaa80c1": "TronX()", +"bdaa8b99": "deleteInternalSoftwareDevTeamsAddress(uint256)", "bdaacabd": "buyXname()", "bdaacbbe": "calculateAdminFee(uint256)", "bdaae1e7": "createGame(uint256,uint256,uint256,uint256)", "bdab5fb0": "fishLocation(bytes32)", +"bdacb303": "setTimelock(address)", "bdace3de": "ChessClubLiveChessCoin()", +"bdace6cb": "getBlacklist(uint256)", "bdad3db2": "_mintTo(address,uint8,uint256)", "bdad4dc3": "allocate(address[],uint256[])", "bdad8112": "hashArguments(address,uint40,uint40,uint128,uint256)", +"bdadec12": "faucetBoundsMin()", "bdaeb0a0": "m_GameHidden()", +"bdaf03d6": "total_supply(uint256)", "bdaf2fae": "timeBought(uint256)", "bdaf78fb": "refundUser(bytes32,bytes32)", +"bdafb3f5": "_sz_key(uint256)", +"bdafcae7": "showTables()", "bdafcda9": "logClassic(string,address)", "bdb001a7": "mana()", "bdb00fb9": "blackjack(uint256,uint256,address)", +"bdb01ad8": "Modify(string,uint256)", +"bdb02619": "makeOrders(uint256[],uint256[],address[],address[],uint256[],uint256[])", +"bdb06a82": "receiverB()", "bdb084b2": "startCrowdsaleY1(address)", "bdb10825": "MOOVIN(uint256,string,string)", "bdb15209": "getNewPrice(uint256,uint256)", +"bdb19ab5": "startAirdropRHINO(uint256,uint256,uint256,uint256)", "bdb27170": "setLockinManagerAddress(address)", "bdb2e597": "TheBestToken(uint256,string,uint8,string)", +"bdb31fff": "updateUnstakeRewardAddress(address)", "bdb337d1": "gameOver()", +"bdb33d48": "recoverSigner2(bytes32,uint8,bytes32,bytes32)", +"bdb345cb": "mintAlgorithmicFRAX(uint256,uint256)", +"bdb4b848": "mintCost()", "bdb4dc6e": "getBrickSize()", "bdb4f321": "balanceOfStocksAt()", "bdb57edc": "TokenRedeem(address,uint256)", "bdb5daf5": "OvisAddress()", +"bdb5dccc": "setWithdrawPermission(bool)", +"bdb60877": "Hatch(address,uint16)", +"bdb60f45": "initializeContest(address,uint256)", "bdb66236": "pushDividends()", +"bdb67d8c": "whaleDump(uint256)", "bdb6bce8": "livingSupply()", +"bdb75785": "registerAvailabilityVerifier(address,string)", +"bdb7c73e": "transferGas(uint256)", "bdb81203": "newGrant(address,address,uint256,uint256,uint256,uint256,bool)", +"bdb90151": "sixBlock()", +"bdb97e89": "CSALE_WEI_FACTOR()", "bdb9c11f": "transferTokensFrom(address,address,uint256,uint256)", +"bdb9eb57": "payOracle(uint32)", "bdb9f28d": "setPresaleAddress(address)", "bdba9255": "getCounterLimit()", "bdbaae63": "mint(int256)", +"bdbab92d": "getUserNumberOfDeposits(address)", +"bdbad440": "feePercentX1000()", +"bdbb6755": "checkdlistFGW(uint256)", "bdbb829d": "haltICO(address)", "bdbbf429": "escrowHistory(address,uint256,uint256)", "bdbbfcad": "stageAmount()", "bdbcd001": "testSetValidProvider()", "bdbcd192": "PowerEnabled(address,address,address,address)", +"bdbdcd75": "reloadStakes(address)", "bdbed722": "getAllTokenIds()", +"bdbefbf6": "pool2currUserID()", "bdbf3a2c": "addBenefactor(uint256,address,string,string)", "bdbf40a9": "Certify(address,uint256)", "bdbf7d4c": "DELETE_NAME_ROLE()", +"bdbf8c36": "ovmTIMESTAMP()", +"bdbfccee": "initiators(address)", +"bdc029de": "emergencyETHWithdrawal(uint256)", "bdc056c0": "BanknadToken()", "bdc06de4": "SGTExchanger(address,address,address)", "bdc0ba8e": "disableMaintenance()", +"bdc0c8aa": "ContributeToAProject(uint32,uint64)", "bdc0f93c": "node_count(uint256)", +"bdc1a3a6": "hashArguments(uint256,uint256)", +"bdc1e6f3": "mintCard(string,address,uint256,string)", +"bdc1f840": "tokenWeisPerEth()", +"bdc1fd5e": "REWARD_RATE_BASE()", "bdc2866e": "MasterMindAlliance()", "bdc2f1e8": "multivestBuy(address,address,uint8,bytes32,bytes32)", "bdc31ce8": "Roto2coin()", +"bdc32be0": "getBaseTokenURI()", "bdc33928": "placeIndexToApproved(uint256)", "bdc441b2": "getItemCount(uint256)", "bdc4843a": "lockAddressAfterITO(address,address)", +"bdc60d7d": "_extraSpin(address)", "bdc6d9ab": "schedules(uint256)", +"bdc6f3c9": "forBurn()", "bdc742fc": "updAcceptDonate(bool)", "bdc74e23": "_processTokensAssgin(address,uint256)", +"bdc798ca": "transactionExecuted(uint256)", +"bdc7b54f": "enableArbitraryContractDeployment()", +"bdc7c12b": "getCollateralAmount(uint256)", +"bdc8144b": "setDepositLimit(uint256)", +"bdc84ac3": "resolveDispute(uint256,uint256)", "bdc850d6": "ALasser()", +"bdc8a37f": "exitLobbyOnBehalf(address,uint256)", +"bdc8e54c": "subscriptionPrice()", "bdc8e551": "isICOOver()", +"bdc90c29": "importTokenAddresses(bytes32[],address[])", "bdc95b32": "registerIdentity(string,string,string)", "bdc963d8": "getUIntValue(bytes32)", "bdc99152": "Token_1_Balance(address,address)", +"bdc9db54": "delProposal(uint256)", +"bdca38d7": "getTokenToTokenOutputAmounts(address,address,uint256)", +"bdca9165": "MAX_PERFORMANCE_FEE()", "bdcab795": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool)", "bdcafc55": "setSaleFee(uint256)", "bdcbd9d1": "howMuchCanXContributeNow(address)", "bdcbda5c": "AccountTransfersThawed(address,bool)", +"bdcbee33": "isContractOngoing(uint256)", +"bdcbf18f": "maxharvesterRewards()", "bdcc3439": "add_master(address)", "bdcc809a": "setReleaseCompany(uint256,bool)", +"bdcc8617": "daiAvai()", "bdccd1af": "TokenHolder(uint256,address)", "bdcd0262": "addRecord(bytes32,bytes32,bool)", +"bdcd0c2d": "swissFeePercentX100()", "bdcd21a1": "spawnRaceManual(uint256,uint256,bool)", "bdcd3071": "LogBonusLOTRedemption(address,uint256,uint256)", +"bdcd8d9c": "TokenSold(uint256,uint256,uint256,address,address,bytes32)", "bdcdc0bc": "updateTotalAvailable(uint256,uint256)", "bdcdc258": "transferAllowed(address,address,address,uint256)", +"bdce13eb": "finishChangeGasStipend()", +"bdce14fc": "resetPoolEvil(uint256)", "bdce46be": "PriceIncrease(string,uint256,address)", "bdced258": "VendCrowdsale(uint256,uint256,uint256,address,uint256)", "bdceed0b": "gvToken()", "bdcefb62": "FRST_CRWDSALE_RATIO()", "bdcf49b5": "changeContractStatus(address,bool)", +"bdcf8a55": "_BDM()", "bdcfbc37": "ANMInflationVesting()", "bdd079fc": "addManyToWhitelist(address[],uint256[],uint256[])", "bdd088e9": "littleMonster()", +"bdd12482": "synthetixProxy()", +"bdd1475e": "autoStakeUponWithdrawal()", +"bdd14f5e": "pump(bytes,bytes)", +"bdd15d65": "closeFuturesPositionForUser(bytes32,bool,address)", +"bdd1b96e": "trustedTxFee()", +"bdd1c3ba": "approve_234(address,uint256)", "bdd1de62": "delWhitelists(address[])", +"bdd2474f": "setTokensPerEth(uint256,uint256)", "bdd2ae24": "add(bytes,int256,uint256)", "bdd2d286": "drawPlayer(address,address)", +"bdd2d357": "deleteEvent(bytes32,string)", "bdd30406": "successfulWithdraw()", +"bdd32e4e": "denLotStore()", "bdd36562": "getBonusByAddressAndIndex(address,uint256)", +"bdd388ed": "Killed(bool)", +"bdd39951": "AllowTransfers()", "bdd3abd9": "MjolnirWebsite()", +"bdd3d825": "uniswapPool()", "bdd3fea0": "set_for_sale(uint256)", "bdd41d4c": "ParagonCoinToken(address)", +"bdd45c21": "__ReferPool_init_unchained(address)", +"bdd4bd82": "switch_usdt_buy(bool)", +"bdd4d18d": "members()", +"bdd50665": "eWalletChange(address,address)", "bdd50908": "approveWithdrawAddress()", +"bdd5915f": "WBTC_ADDRESS()", "bdd5be2f": "performBuy(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", "bdd5f8da": "weiPerSgd()", "bdd62b7b": "defective(bytes32,uint256)", +"bdd6429a": "addLiquidityLPtokens()", +"bdd6e73b": "startSaleChicago(uint256,uint256,uint256,uint256,uint256)", +"bdd71ba3": "tryExecuteSwitch(address)", +"bdd7432c": "calculateTradeValue(uint256,uint256,bytes32)", "bdd75267": "OPULENCE()", "bdd7908b": "getFishParams(uint256,uint256,uint256,address)", "bdd7c220": "CryptessaLiquidCoin()", +"bdd7cfe7": "updateArtistFundSplitter(address)", "bdd83add": "isAllocated12()", +"bdd847f8": "registerMM(address,bool)", "bdd8a366": "g1()", +"bdd8a847": "startLiquidation(address,address,address,uint256[])", "bdd8f051": "SmartOToken()", +"bdd975f8": "AccessorRemoved(address,address,uint256)", +"bdd9cb46": "globalInvestor(uint8,uint256)", "bdd9f4e7": "batchInnerTransfer(address[],address[],uint256[],uint256)", +"bdda145c": "INX_Whitelisted(address)", "bddac117": "SetAmount(string,uint256)", "bddae40e": "setCommittee(address)", "bddb7c83": "setUserBlacklisted(address,bool)", @@ -108648,45 +198778,96 @@ "bddd1e7e": "WITHDRAWAL_END_TIME()", "bddd3202": "_tryTriggerPayout(uint16,uint256)", "bddd3a6b": "step7()", +"bddd5cf9": "subscription(uint256,uint256,uint256,uint256)", +"bddd674c": "linkOpts(uint256)", +"bdddc613": "view_stat_array()", +"bdddd96a": "canWithdrawValue(uint256)", +"bdde7897": "updateSale(uint256,uint256)", "bddefc06": "withdrawed(address,uint256,string)", +"bddf1f4c": "setEthUSDDataProvider(address)", "bddf66ff": "claimMigrate()", +"bde04890": "currentBets(uint256,uint256,uint256)", +"bde10bcb": "setBorrowMinThreshold(uint256)", +"bde124e3": "findFreeO3Referrer(address,uint8)", "bde18839": "OHGVientiane()", "bde1f585": "endCrowdsalel()", "bde236a5": "checkClaimEntitlement()", +"bde24465": "PreICOPublicOpened()", "bde27f4a": "forwardToHotWallet(uint256)", "bde2ddf2": "_forwardFunds(address)", +"bde34f8d": "etherWithdraw()", +"bde3a8ff": "lockedInvest(uint256,uint256)", +"bde3cea4": "WithAss(uint256)", +"bde4aeca": "updateAllocPoint(uint256,uint256,bool)", "bde4e7c2": "tokenAddFee()", +"bde55aaa": "STAGE_1_BONUS_RT()", "bde5c4a2": "_stealCardWithId(uint256)", "bde60ac9": "donate(uint64,uint64)", +"bde63ce1": "SubmissionRewarded(bytes32,address,uint256)", "bde66362": "_createNinja(uint256,uint256,uint256,uint256,address)", "bde6a5a9": "burnPrice()", +"bde74d40": "_addToDelegatedByHolder(address,uint256,uint256)", +"bde7a70c": "Get(address,uint256)", +"bde7cac0": "CharPrice()", +"bde7e568": "viewArray(uint256)", "bde7ef86": "SynTokenCrowdsale()", "bde7fa7d": "removeWhiteListed(uint256)", "bde842ac": "getJobStatus(uint256,uint256)", "bde86dd1": "tokenExpirationTime(uint256)", +"bde86fbe": "stokens(uint256)", "bde8a93e": "setBankroll(address)", "bde8c509": "mintIdentityTokenDelegated(address,address,uint8,bytes32,bytes32)", "bde8cd4d": "icoPool()", +"bde8e7da": "InspireAGeneration(uint256)", +"bde8e9fa": "_openTransfer()", +"bde9084c": "changeURI(address)", +"bde926b5": "getMostProfitableStratWithToken()", +"bde95cc2": "ProtocolFeeRefundFailed(address,uint256)", "bde97455": "SCRefundVault()", +"bdea633a": "getTotalCount(address)", "bdeb130c": "doPayment(uint256,uint256,address)", "bdeb45b8": "expireIfNecessary()", "bdeb9fb4": "tokensAvailableForSale()", "bdec5cce": "LotteryRoundCompleted(bytes32,uint8,bytes4,uint256)", +"bdec76af": "oldBalances(address)", +"bdecd29c": "main1(uint256,uint256,uint256,uint256,address[],bool,uint256)", +"bdece04a": "replaceDev(address)", +"bded62ea": "setFrostPool(address)", +"bded9bb8": "feeAddToken()", "bdeddb45": "setMyICOContract(address)", +"bdedf4d3": "amountEntered(uint256,address)", "bdee21ff": "test_oneValidAssertFalse()", +"bdeeea55": "emitTimeRequestAccepted(uint256,uint256)", "bdef744b": "PriceTwoDisable()", +"bdef9303": "returnDeposit(address)", +"bdefce8c": "getPacked(uint256)", +"bdeff196": "setPoolFactory(uint8,address)", +"bdf11387": "InitialFundingWallet()", "bdf1211e": "getPercentBurn()", +"bdf17587": "balancesInternal(address)", +"bdf1baa4": "refundPayment(address,bytes32)", "bdf1e7cf": "getProviderReward(address,uint256)", +"bdf2430b": "wckContractAddress()", "bdf27b50": "setPOOL_edit_21(string)", +"bdf28c87": "stakingtime()", "bdf2a0f5": "fundDaoFor(uint256,uint256)", +"bdf2cd51": "getPriceAndReserveFromOracle(address,address,address,address,address,address)", +"bdf2e8d6": "depositWithDetail(uint256,string,string,string,uint8)", +"bdf30f39": "getBalanceToClaim(address)", "bdf3390e": "checkPwnData()", "bdf384a8": "peekUpdated()", "bdf391cc": "getPair(uint256)", "bdf3c4ae": "stock()", +"bdf3e088": "updateContractAddress(address)", +"bdf43b21": "bufferMin()", "bdf44067": "TCASHx()", +"bdf475c3": "get_pool_from_lp_token(address)", "bdf499e1": "DappHunt()", +"bdf4a767": "winnersEvt(uint256,address,uint256,uint256)", "bdf4bb73": "DatToDtrcNumerator()", +"bdf4d10e": "post(string,address[],address,uint256[])", "bdf4e7c6": "TaskRegister(address,address,address)", +"bdf58782": "peakHourTaxes(uint256)", "bdf5fba1": "COMMUNITY_POOL_ADDR()", "bdf63c15": "RSPLT_F()", "bdf692f4": "Propersix()", @@ -108696,98 +198877,202 @@ "bdf7220f": "getFinalTeams()", "bdf75a6a": "PRICE_RATE_FIRST()", "bdf7716d": "getNodeHeight(bytes32)", +"bdf78ba6": "borrower(address)", "bdf79c9d": "Adapter(address,address,address)", "bdf7a8e6": "airdrop(uint256,address[])", +"bdf7acce": "periodStartTime()", "bdf7f22f": "puremail()", "bdf82b2a": "killFrost()", +"bdf83132": "itemsBids(uint256)", "bdf86a66": "give(address)", "bdf88d34": "stopTest()", +"bdf89204": "getTotalReward(uint256)", "bdf944b3": "depositAffiliate(uint256)", +"bdf950c9": "cTokenBalances(address,address)", +"bdf99016": "getMyProfit(uint256)", "bdf99bd4": "AntPetTempleToken()", +"bdf9a07e": "batchRestrictCountries(uint16[])", +"bdf9a726": "freeze(bytes4)", +"bdf9d774": "getMaxDirectRegister()", "bdf9f646": "disApprove(address)", +"bdfa4a66": "postPhases(bytes32,bytes32[],address)", "bdfaa337": "totalAlloc()", +"bdfb1303": "distributeRgt(address,uint8)", "bdfb481d": "ABDEL_ALLOCATION()", +"bdfb48ef": "fnWithWhileLoop(uint256)", +"bdfb5b90": "supportUnits(uint256)", "bdfbab66": "getReferals(address)", +"bdfbe29c": "setTransferFeesFlag(address,bool)", "bdfc0522": "investBounty(address,uint256)", +"bdfcf08a": "LootboxPurchased(address,uint16)", +"bdfcf922": "put1()", +"bdfd084b": "callProxyHandler_getUserMaxWithdrawAmount(address,address)", +"bdfd1dc7": "createBundle(uint256[20])", "bdfd582b": "FailClosedVault(address,address,uint256,uint256,address,uint256)", "bdfd6257": "settingNameExist(string,address)", +"bdfd977f": "openBoxs(uint256,uint256,uint256[],uint256[],bytes32,uint8,bytes32,bytes32)", +"bdfd9877": "registerAirline(address)", "bdfdb519": "accept(string,uint256,uint16)", "bdfdbf56": "read_u16_array()", +"bdfde911": "dexMint(uint256)", +"bdfdf0ba": "GatewayAddrChanged(uint32,address,uint256)", +"bdfe4eba": "isTokenLocked()", +"bdfe571e": "UpdateMemberAddress(address,address)", "bdfe7d47": "addresses(string)", +"bdff43ee": "transfers(address)", +"bdff78ac": "getMintingLimit()", "bdff85cf": "ArrAccountIsNotFrozenForReturn(uint256)", "bdff9fca": "checkTotalPaid()", +"bdffa49b": "commisionRate()", +"bdffce6c": "CrowdsaleRefund()", "bdffd282": "SIZE()", +"be000767": "removeCollaborator(string,address)", +"be001cab": "userReinvestCurrentDivs()", +"be003d4c": "stakeUniV2(uint256)", "be0043bc": "removeMinterByIndex(uint256)", +"be00526d": "availableTOKENS()", +"be0071d3": "Withdraw(string,address,uint256,string)", "be007380": "DapdapNiubi()", +"be007832": "recordSyncAndTokens(address[])", +"be00bbd8": "getApp(bytes32,bytes32)", +"be010c40": "expiryTime(uint256)", +"be012fab": "modifyActivateGlobal(uint256)", "be01bc87": "carTaxiCrowdsaleAddress()", "be02bc3c": "internalTransfer(address,address,uint256,uint256)", +"be02ee6e": "m_accounts(address)", "be030bd8": "_setToken(address)", +"be033083": "_init(uint128)", +"be037b4a": "pure_string()", "be038478": "createPermission(address,address,bytes32,address)", +"be039d60": "plus_Approval(address,uint256)", "be03c602": "test_get()", +"be040307": "getGoaldAt(uint256)", "be040fb0": "redeem()", "be041614": "storedDataInBytes()", +"be041c7e": "swapFromEDai(uint256)", "be048d04": "getOrganizationalCertAddressByID(string)", "be0522e0": "inflation()", +"be056149": "UpdatedStarScore(address,uint256)", "be063693": "intermediadorAprovaPagamento(bool)", "be0638e4": "WealthShare()", "be06ae25": "VirsymCoin()", "be06e4e8": "inheritedConstant()", +"be07f57c": "deleteSchainByRoot(string)", +"be084c77": "getCurrentRewardsRate()", "be08728f": "_setRemovalPrice(uint256)", +"be08a9ee": "getTotalYvaultStaked()", "be08d744": "TFcoin(uint256,string,string)", +"be0948d2": "multisendErcISLA(address[])", +"be094b3f": "SendBunny(address,uint32)", "be099e7d": "endICOs()", "be0ad4d1": "calculatePayoutVariables()", +"be0b4c07": "calcVotesForETH(uint256)", +"be0be143": "testFraxPoolDeployment()", "be0ca01b": "resetChallenge(uint256)", +"be0ca465": "addLiquidity3(address,uint256[3],uint256,uint256[3],uint256,uint256,uint256,uint256)", +"be0ce30f": "weth_collateral()", +"be0d0efc": "cookieToLp0Route(uint256)", "be0d4da4": "produceLottoNumber(uint256,uint256)", "be0da251": "CANCELLED_FEE_FLAG()", +"be0da59c": "updateMaster(address)", +"be0e5c75": "slashDuplicatePropose(uint256,uint256,bytes,uint256,bytes,bytes,uint256,bytes)", +"be0e7927": "executeOnFlashMint(uint256,bytes)", "be0e9d75": "removeWorker(address,address)", "be0ecd32": "synthInitiatedExchange(address,bytes4,uint256,bytes4,address)", "be0f0a50": "setPriceStep5(uint256)", "be0f27cf": "rejectBountyTransfer(address)", "be0f6bcb": "End10()", +"be102855": "setParameters1xu(uint256,uint256,address[])", "be104849": "AutorizeRefund()", "be10862b": "partner()", +"be108f92": "getCTokenUnderlying(address)", +"be109c65": "cardPoints(uint256,uint256)", "be10c33d": "LogOperatorRem(address)", +"be111772": "setLevels(uint256)", +"be111af4": "createStakingPool(address)", +"be111d02": "buyPOly(uint256)", "be116c3b": "removeProxy(address)", +"be1193ea": "stakingPercent()", "be11ce2f": "minEthContribution()", +"be1253aa": "refundContribution(address,address[])", "be1271c4": "setPrice(uint8)", +"be12e668": "getDmapDetail()", +"be1329a3": "xampRate()", +"be13f47c": "initialize(address,bytes32)", "be140381": "firstEntranceToSaleStateUNIX()", +"be1479d5": "eq(bytes16,bytes16)", "be14e5fc": "ETH530on420()", +"be1526a1": "DateIcoEndUpdated(uint256)", "be154a18": "Partial8Transfer()", +"be15eeb8": "canWhiteList(address)", +"be15f16c": "initiallyDistributed(address)", +"be1609d2": "increaseUnpaidETHValue(address,uint256)", "be160a92": "ERC20token(uint256,string,uint8,string)", "be162060": "validCrowdsale()", "be163d75": "validPurchase(uint256)", "be165566": "setTokenBankrollAddress(uint8,address)", "be169856": "getOriginByIndex(uint256)", +"be16ba5c": "tokenSaleMDS(address)", "be16dccd": "tomoDeposit()", +"be1716a4": "getTotalLPTokensMinted()", +"be172d0b": "SubdomainCreated(address,address,string,string,string)", +"be175335": "getSellTreshold()", "be177c6a": "addJoinAirdropQuest(address)", "be17a8b1": "doCustomAirdrop(address,address[],uint256[])", "be17be5d": "total_minted()", +"be17fcf2": "get_rewardBlock(uint256)", +"be180984": "approve_259(address,uint256)", "be189035": "modifyIndividualCap(address,uint256)", "be18a08b": "finishUpRound(int256,string)", "be190032": "timespan()", "be19d926": "Britishcoin()", +"be19f0a7": "tokenFactoryAddress()", "be1abba5": "payoffAmount()", "be1b7b4c": "FIRST_UNLOCK()", +"be1b7bfe": "staticTokenRewardContract()", +"be1bca19": "updateShifter(address,address)", +"be1bd02d": "MIN_TOKEN_PER_BLOCK()", "be1c766b": "getLength()", +"be1d24ad": "exitPool(uint256)", +"be1d4d82": "claimLockedBonusTokens(address)", +"be1d686d": "payoffAtSettlement()", +"be1d86e1": "setMasterChefAddress(address)", +"be1deb36": "preRenounceOwnership()", +"be1ecb35": "CrowdsaleStartDateUpdated(uint256,uint256,address)", "be1eefbf": "hotStore()", "be1ef5c1": "approveWithdraw(address,address)", "be1faaaf": "depositCoupon(address[2],uint256[7],uint8,bytes32[2])", "be1ff08b": "sbtToken(address)", +"be203094": "initialize(address,address,uint256,address)", "be20d298": "AxiePresale()", +"be20e99c": "addToTransferWhiteList(address)", +"be20f62e": "newSlotId_ap2()", "be20f9ac": "getSlotInfo(uint256)", "be213c2d": "startBoughtExit(bytes32[],uint256,bytes32[])", "be220272": "houseWithdraw()", +"be22e581": "getPaperReward()", "be22f546": "daiToken()", "be22f6aa": "LUYOCrowdsale()", +"be235619": "collatteral(address)", "be23d291": "requestPrint(address,uint256)", +"be240396": "reward(address,address[],uint256[])", "be241871": "isTxExist(bytes32)", "be2430fe": "sendValues()", "be25270f": "hash(string,uint256)", +"be253124": "withdraw_2(uint256)", +"be256bfb": "addUsers(address[],uint256[])", "be25d0ce": "buyerCapHighEther()", "be2671c9": "getUserBonusBalance(address)", "be26733c": "Kill()", "be268c3f": "batchSubmit(address[])", +"be26a714": "accruedDFLStored(address)", +"be26c5e3": "sendNumber(uint16,address)", +"be26ed7f": "getCurrentCycle()", +"be27399a": "modiMerch(bytes32,uint256,uint256,uint256)", "be275680": "submissionOpen(uint256)", +"be275a5e": "stakeAmountFromPancakePool()", +"be278746": "uniLevelDistPart()", +"be27a8a4": "unWhitelistAccount(address)", "be27b22c": "claim(bytes,bytes)", "be2863ab": "addWalletsToWhitelist(address[])", "be28f5db": "makeTokens()", @@ -108795,61 +199080,122 @@ "be292552": "setMintAddress(address,address)", "be297530": "Coinname()", "be29783f": "commitVoteOnSpecialProposal(bytes32,bytes32)", +"be298397": "SWAP_RATIO_DENOMINATOR()", "be29d81f": "BRL_Omnidollar()", +"be2a1f79": "cast(address,bytes)", "be2a2ff2": "getAccountBlockedFunds(address)", +"be2a6c88": "restartProvableQuery()", +"be2a7b1b": "updateUserAmount(uint256,uint256)", "be2b1047": "hodlerTimeStart()", "be2b5996": "designateAdmin(address,address)", +"be2b9a79": "returnToOwner(address,uint256)", +"be2bd96c": "mineAddress()", +"be2c0e6f": "setUnsealTimestampLimit(uint256)", +"be2c1c3a": "krauser()", +"be2c86e0": "getTicketWinnersList()", +"be2cbc4f": "setIsClosed(uint256,bool)", "be2d8b2d": "PowerToken()", "be2dbe21": "Raffle()", "be2dcd6c": "buyMFCoins(address,uint256)", +"be2ea6f1": "tokensaddress()", "be2eaad4": "expectedFunds(uint256,bool)", +"be2eed10": "updateOrder(uint128,address[],uint256[],uint128)", "be2ef9f0": "secondWalletPercent()", "be2f3059": "RcdGet()", +"be2f401d": "collectAirdrop()", +"be2fa2f2": "calcRelease()", "be2fd146": "addMultiRequest(address,uint256,uint256,address)", "be2ff4a9": "withdrawBank(uint256)", +"be2ffb3d": "GetMiles()", +"be30324a": "tempUpline(address)", +"be3048aa": "sumadd()", +"be308c70": "moduleDeployer()", "be30eda8": "transferAndLock(address,address,uint256)", "be30f0a6": "setPurchaseLimits(uint256,uint256)", +"be3151d5": "_ocin()", "be317e7e": "ICOReserveLockUp()", "be31b600": "CART()", +"be31be35": "playerProdBoost(address)", "be31ffed": "AOSToken()", +"be32b3f8": "setEmergencyMode(bool)", "be32cf8d": "mix()", "be32eeba": "getFishIdByPos(uint256)", +"be331352": "global(bytes32,uint256)", +"be336e86": "getIssuanceRatio()", +"be338b21": "availableEthic()", +"be339fc1": "onReinvestment(address,uint256,uint256)", +"be33a3ec": "InvestERC20(uint256,uint256)", +"be33c82a": "tamag()", +"be33e8b7": "claimBurns(uint256)", "be3400b8": "CharityCashCoin()", +"be347190": "SmartMatrixNewsageFactory()", "be34dab3": "addBrick(string,string,uint256,string,bytes32[])", +"be351ca2": "buyGftUseRel(uint256)", "be354949": "setReservesForExchangeTokensWallet(address)", "be35525d": "setPlayerAffID(uint256,uint256)", "be357616": "withdrawFee(uint256)", +"be35cee8": "computeReleasableLPWithPenalty(uint256,address)", +"be35ef14": "getAddressStakeAmount(address)", "be361f60": "retrieveChange()", "be363e36": "sendMoneyBack()", +"be3647df": "balanceOfcDai()", +"be3688df": "proofToAmount(uint256,uint256)", "be36e676": "Set(bytes32,bytes32)", +"be378b89": "balanceOfRaw(address)", +"be37ec11": "Holdplatform_Deposit(uint256)", +"be3853c9": "buyBackETH(address)", +"be389d57": "buyNewLevel(uint8,uint8)", +"be38a4fe": "jar()", "be38e241": "activations()", "be3912fa": "registerProduct(uint256,uint256,uint256,bytes,bytes)", "be3945e4": "getFee(address,address,uint256)", "be395cd5": "setPoliticsForJackpotParticipantsList(bool)", +"be399be5": "redeemAll(address)", +"be3a7218": "getUserRewardInfo(uint256,address)", +"be3b5a26": "calculateSusdToBurnForRedemption(uint256,uint256,uint256,uint256)", +"be3b625b": "requestGasLimit()", +"be3bbd2e": "getFinalTokens()", +"be3bdb06": "dbEthOracle()", "be3c33f4": "ZeroXCoin()", +"be3c4a75": "updateVeraSwapContract(address)", "be3c8488": "previousStageIsFinalized()", "be3c92a6": "setLimitTokenPurchase(uint256,uint256)", "be3ca849": "getFunding(address,uint256)", "be3cbb04": "iWantXJade(uint256)", +"be3da497": "CapDefi()", "be3daf55": "shouldLiquidate(bytes32,address,address,address,address,uint256,uint256,uint256,uint256)", +"be3dcf62": "safeDecimals(address)", "be3dd131": "migrateFunds(address[])", +"be3de07e": "registra(address,string,address,address,uint256)", "be3dedae": "changeOwnership(string,uint256,uint256,address,address)", "be3e33d5": "play(bytes1)", "be3e41b1": "bonusFirstTwoDays()", "be3eac25": "WithdrawEnabled()", +"be3ecd13": "questionStates(bytes32)", "be3ee935": "addClient(string,string,string,string,uint256,uint256,uint8,uint8)", +"be3f302d": "_requireNewICRisAboveOldICR(uint256,uint256)", "be3f3471": "total_trades()", "be3f34a1": "collectIncome(address)", +"be3fb3f3": "swapOutTokens(address,uint256,uint256,uint256,uint256)", +"be3fb820": "releaseCommunityAllocation(address)", "be400cad": "KudosToken(string,string,string,uint8,address)", "be4054b9": "commitReading(address,uint256,uint256,string)", "be40887d": "sumDepth(uint128)", "be408a5f": "winner_percentage()", +"be40ad27": "SellerConfirm(uint256)", +"be40ba79": "isSetWhitelist()", "be410448": "getERC20Id(uint256,address)", +"be426616": "zkProofLength()", "be427b1c": "setFinderFee(uint256)", "be4299a6": "Maxsupply()", +"be42cae0": "swapETHForExactTokens(uint256,address[],address,address)", +"be4329f4": "getTimeLockedAmount(address)", "be4413fc": "Donator3()", "be4474b4": "processFee(uint256)", +"be44bd21": "getGainExp(uint32,uint32,bool)", "be44e2d6": "getdeptreqscount()", +"be4544da": "_adjustLateClaim(uint256,uint256)", +"be455572": "getReferenceBy(address)", "be457017": "validateRefundSignature(uint8,bytes,address)", "be45a26f": "variables()", "be45af43": "InnovateToken()", @@ -108858,15 +199204,19 @@ "be45fd62": "transfer(address,uint256,bytes)", "be46203e": "Claim_TRAC_900()", "be4663a1": "vestContract()", +"be46aec6": "poolEnabled()", "be46b94c": "ROLE_KNOWN_ORIGIN()", "be46bffb": "verifyLottery(uint8,bytes32,bytes)", "be46e9ca": "starting()", "be46ee5f": "postNewAnswer(bytes32,bytes32)", "be471027": "limitedSale()", +"be4763b3": "itemManagers(uint256,address)", +"be47a4bf": "onAirPot(uint256,uint256,address,uint256)", "be47dca1": "getNumberOfClients()", "be482cc2": "getCurrentLotteryJoiners()", "be48acc4": "MAX_PERSIANS()", "be48d81e": "team_accounts(uint256)", +"be48f6b0": "roundBetCount_(uint256)", "be490a04": "Banned(address,bool)", "be494573": "pureBalanceOf(address)", "be4951e4": "setBroker(address,address)", @@ -108877,171 +199227,330 @@ "be4a7160": "closeDistribution(bool)", "be4a90eb": "GoramCoin(uint256,string,uint8,string)", "be4aba09": "tokenR6()", +"be4af189": "secondsLeftInLiquidityGenerationEvent()", "be4b1772": "withdrawToken(uint256,address)", "be4bb31a": "WAmlingCoin()", "be4c3a0c": "getContractOwner(string)", "be4c45d5": "changeBuyingPrice(uint256)", +"be4c7618": "ReputationClear(address,string)", "be4c9e96": "TRONIC()", +"be4cb997": "hasBetting(uint256)", "be4cbafd": "RichGoldToken()", "be4cc281": "ManagerUpdate(address,address)", "be4ce05c": "JULY()", "be4d06cc": "setLLV_edit_16(string)", +"be4d10b7": "MIN_STAKE_FOR_WEEKLY_REWARD()", +"be4d823e": "computeResult(uint256)", "be4dbb5e": "getInvestorByValue(address)", "be4dbe26": "getBlocklancerContractHolder()", +"be4dedb8": "_getGeneratedDeltaDebt(address,address,address,bytes32,uint256)", "be4ea54d": "setDeveloper(string,uint256)", "be4eb0e9": "getUserFromId(uint256)", "be4ebda3": "BOUNTY_SHARE()", "be4f4fdf": "restrictedShare()", +"be4f55a7": "Love(uint256,string,uint8,string)", +"be4f9bd6": "numberActiveProfiles()", +"be509e17": "getUserInfo(address,address,address,address,address,address,address,bool)", "be50af2e": "tokenWithdraw(address,uint256)", +"be515e0c": "getJpycFromContractAllowance(uint256)", "be519862": "percDown(uint256)", "be51bc0a": "FuncToken()", +"be51d244": "burnPoolAddress()", +"be51f186": "setGoalEvent(address,string,uint256,string,string,string,bool,bool)", +"be520aad": "PauseBuy()", +"be523937": "cancel_relayed(address,uint256)", "be523c23": "dungeonPreparationTime()", "be5308ea": "BitplusToken(uint256,uint256)", "be53874f": "emergencyFundReleased()", +"be53a511": "addWhitelistFrom(address)", "be53f968": "getPreSaleStart()", +"be54be0b": "whitelistAddressRemove(address)", "be54c568": "starting(uint256)", "be54f214": "monthWithdraw()", +"be553481": "log(address,address,uint256,uint256)", +"be559b6a": "shoppingTreasureAdd()", +"be55b422": "newbShare()", +"be560d17": "Round3Time()", "be5638ff": "investor_contains(address)", "be5648c3": "getResoType()", +"be567a9e": "players_(uint256,uint256)", +"be56dff1": "leafOwners(uint256)", "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)", +"be57771a": "restrict(address[])", +"be57c820": "lookupMarketCream(address)", +"be5814c7": "get_minimum()", "be592488": "validateName(bytes)", "be597faa": "_finishTge()", "be59b4b1": "mostRecentCaller()", +"be5a7cec": "oneWMBTC()", +"be5ac73f": "toElAmount(uint256)", +"be5ae424": "getWalletNonce()", +"be5af966": "StakingToken()", +"be5af9fe": "creatorLimits()", +"be5afb1a": "lend(address,address,uint256,address,bytes)", "be5affd1": "address3a()", +"be5b2352": "CurrentPeriodChanged(uint256)", "be5b9c74": "MultiSigWalletMock(address[],uint256)", "be5babc2": "CryptoGems()", +"be5bf579": "addToWhitelist(address[100])", "be5c2423": "failedVerificationSlashAmount()", +"be5c2a31": "requireValidInput(uint256,uint256,uint256,uint256)", +"be5c4d0c": "LogDataSourceCallbackList(uint8[])", +"be5c52e6": "BeginDutchAuction(bytes32,uint256,bytes32,address,uint256,uint256,uint256,uint256)", +"be5cd8b0": "personToPrice(uint32)", +"be5d1be9": "future_epoch_time()", +"be5d38b6": "addCollateral(address,uint256,address,uint256,bool)", +"be5df298": "getAgentBankBalanceWEI(uint256)", +"be5df666": "initialTokensSupply(address,uint256)", "be5df6cb": "findLover(address)", +"be5e38c1": "transferReturnBalance(address,address,address,uint256)", +"be5e6c03": "wipeAndFreeETH(address,address,address,uint256,uint256,uint256)", "be5e72e0": "updateBasePrice(uint256,uint256,uint256,uint256)", "be5ea335": "betERC20(address,bool,uint256)", "be5eb443": "getScriptAction(bytes,uint256)", "be5eeb2d": "getSociety(uint256)", "be5f3d12": "allocateTokensForAdvisor()", "be5f5a5b": "setSecretSignerByIndex(address,uint256)", +"be5f84e4": "lockholders(uint256)", +"be5f9dc5": "changeDefholdPools(address)", "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)", +"be609fe2": "addNftMetaSecondary(address,uint256,uint256)", "be60be76": "TokenMigration()", +"be60c906": "ArrAccountIsLockByDate(uint256)", "be60e771": "ZAMZA()", +"be60f3d9": "withdrawETH(uint8,bytes32,bytes32)", +"be610676": "claimLimit()", +"be610c59": "updateRenderer(address)", +"be615335": "pendingReward(uint8,address)", "be616e83": "processAP()", "be621764": "TradeRegister()", +"be623a36": "enablePumpStage()", +"be62a377": "anySwapOut(bytes32[],address[],address[],uint256[],bool[])", "be62e98e": "MIN_PRICE_SALE()", "be6307c8": "getDraw(uint256)", +"be634045": "addItem(uint256)", "be6340b8": "mintedDirectly()", "be63c8ca": "Retire()", "be63f7b1": "TobkaCoin()", "be640921": "regInitAccount(string,string,string)", +"be640d83": "pool4percentage()", +"be64a1ad": "keepMIS()", +"be64a8ca": "mintables(uint256)", +"be6502e9": "teardown()", +"be65073d": "approveStakingContract()", +"be6552d9": "changeTokensForSell(uint256)", "be65d234": "Owner_Changed(address)", "be65d27a": "vaultDeposit()", "be66399f": "setOuverture_effective(uint256)", +"be66c717": "showEarned(address)", "be676ac6": "transfer_balances(address[])", +"be67e48e": "transferToAll(address[],uint256[])", "be67f4fd": "ActualShareManager()", "be6872af": "totalTokensForSold()", "be6896c3": "PropellerheadSupport()", +"be69283e": "inboundContractTrusted(address)", +"be69290a": "StarDeleted(uint256,address)", "be692cd3": "erase_data()", +"be6a62b2": "usersActiveGxLevels(address,uint8)", "be6ad6d2": "ForceEther()", "be6ae331": "get_session_state(address,uint32,uint32)", "be6b6ba6": "getVestingStageAttributes(uint8)", +"be6b7021": "add(uint16,address,uint16,uint16,uint16)", +"be6c0297": "updateMinDelayReduced(uint256)", "be6c03ff": "stakedForProposal(address,address,bytes32,bytes32)", "be6c554f": "firstCheckpointPrice()", +"be6c588a": "SUPERBEE_PERCENT_UNLOCK()", "be6c61f5": "unsetIdentity(address,address)", "be6c87ad": "item(address,address,uint256,bool,bytes)", +"be6c8d61": "devConstructor(address)", "be6cef0a": "msgExaminer()", +"be6cef70": "createAPYGraph(uint256[])", +"be6cff60": "offerDAIFactor()", "be6d055a": "proxy(address,bytes)", "be6d91e6": "getBalanceOfSender()", +"be6da4e0": "withdrawal_USDT(address,uint256)", +"be6f0ea2": "fetchUser(address)", +"be6f3571": "addrToCats(address,uint256)", +"be6fb536": "isNewProtocolDelayed()", "be6fc181": "getFeeParams()", "be71021f": "_crownFreeze(uint256)", "be7118a7": "Dilution(address,uint256)", "be71248a": "payWinner()", +"be7172e2": "addrAtIndex(uint256)", +"be71f5ce": "setAqueductAddress(address)", +"be71f8a4": "getEscapeHatchStatus()", +"be727196": "threePercentWallet()", "be737f72": "toSmallestShareUnit(uint256)", "be7385e3": "getPlayerSpaceships(address)", +"be739356": "sendReward(address[],uint256[])", "be73983a": "reservePR()", "be73d879": "joinBytes(bytes,bytes)", "be74264d": "getFeePercent()", +"be7432df": "getBtcxPower()", +"be743680": "getUnfinalizedPoolRewards(bytes32)", "be74381f": "calculatePercents(address)", "be743ccb": "MCCPP()", +"be745fff": "ETHEREUM_OBJECT_ID()", "be754ba4": "buy20Price()", +"be758452": "balanceOfLots()", +"be7587c3": "_maxXEthWad()", "be760488": "assign(address,uint256)", +"be76054b": "addTxIdForOnchainData(string,string)", +"be76ebe5": "increaseMinterAllowance(address,uint256)", +"be771fba": "testAssertFail()", +"be772d4c": "niftyRegistryContract()", +"be7768e9": "getTotalStakeAmountByUser(address)", +"be77aca5": "getUnclaimedBalances()", "be782f58": "setBreedTimeout(uint32)", "be78632e": "nstDeposit()", "be788e70": "getWithdrawableBalance()", "be78bb7a": "transferCallGas()", +"be78e114": "disarmBomb(string)", "be78e656": "buyXaddr()", +"be790b32": "getChainLinkPrice()", +"be795128": "getIIStats(uint256)", +"be797a32": "LogBet(uint256,address,uint256,uint256,uint256,uint256)", +"be79a0cb": "setInitialRewardStrategy(uint256,uint256,uint256)", "be79ca77": "preSaleBonus3Amount()", "be7a1540": "setlvlNfee(uint256)", "be7a3164": "getNextAuditRequest()", "be7aa7be": "SportStarToken()", "be7b4858": "isOpenDistributionClosed()", +"be7b864c": "getCurrentGov()", +"be7be663": "setHostowner(address)", "be7c06ba": "iniOwner()", "be7c29c1": "getNewDAOAddress(uint256)", +"be7c40e5": "setAgic(address)", +"be7c7ac3": "Remove(address)", +"be7cbc5c": "setRewardDistributedIndexCA(address,uint256)", "be7ccd7e": "setupMiniGame(uint256,uint256)", +"be7cce1d": "calcMinAmountIn(address,address,uint256)", "be7cddf8": "TwoD()", +"be7d798e": "PERIODS_PER_THRESHOLD()", +"be7d97b3": "getEmoji(uint256)", +"be7df27d": "ExternalTokenIncreaseApproval(address,address,uint256)", +"be7e18ed": "unbundleSome(address,uint256,address[])", "be7e2848": "SkillChainContributions()", +"be7e345b": "bfxTotal()", +"be7ed9f7": "setHal9kVaultAddress(address)", "be7edebe": "setURIBase(string)", "be7f5d23": "addressesReserving(uint256)", +"be7f8566": "setFee(uint8,uint256,uint256)", +"be7f8996": "Coin_manager()", "be7fdab1": "returnMoney(address)", +"be7fec0f": "updateCWGPrice(uint256)", "be80073a": "SentTo(address,address)", +"be801f01": "lastMintEvent()", "be802f05": "getIcoTokensSold()", +"be8051c9": "mapAsset_claimed(address)", "be80dcfd": "floatEconony()", +"be80f755": "approve_384(address,uint256)", +"be80fdec": "removeAllowTo(address)", +"be819ac8": "getChainIdInternal()", +"be81d477": "LifeCycle()", "be81d5bf": "CROWD_WEEK3_PERIOD()", +"be827a75": "addUnderlyingToken(address)", "be82f56b": "drainToken(address,address)", "be82fffe": "allPolls()", +"be8343ab": "_stop()", "be8360c5": "_maint_EndPromo()", "be83a6b4": "ShitCloneslordReq()", "be83b3c6": "LogFinishICO(address,address,address,address)", "be83ff83": "vipRate()", +"be84bf2b": "getData(uint32,string)", +"be8531e8": "getCommunityAddress()", "be854def": "robPantryT(address,uint256)", "be85bf3b": "PaymentWithdrawn(uint256,address,uint256)", "be85cbcd": "makeLoan(address,uint256)", "be85e4ef": "initEngineer()", +"be8601e0": "zLot()", "be86d5a7": "makerTransferEther(address,uint256)", "be86d996": "SINGLE_SALE_MULTIPLIER()", +"be871c0e": "Mfrm()", +"be872d8d": "TransactionConfirmed(address,bool)", "be87662b": "inviteProfit(address)", "be87bcfc": "getReport(uint256,uint256)", "be87c1ab": "returnBalance(address[2],uint256[7],uint8,bytes32[2])", "be882d91": "setQuestionFee(address,uint256)", +"be884b32": "useWhitelistFlag()", "be888bd7": "devteamReserve()", "be89900b": "PIOE()", +"be89959b": "destroyLOA(address)", +"be89f8ab": "submitOrder(uint256,uint256,uint256)", "be8a4737": "withdrawalT4T()", "be8a550d": "ICO(address,address)", +"be8a7719": "amountrequired()", +"be8ab6d8": "myStructure()", "be8acd3f": "ordersLength()", +"be8ace51": "collects(address,address,uint256[])", +"be8aff31": "updateRatePool(uint256,uint256)", +"be8b15c7": "keep_rewards()", "be8b4f45": "HussyToken()", +"be8b92d4": "activateRaffle(uint256)", "be8bd3df": "IlumXToken()", "be8c1bcc": "batchDrop(address[],uint256[])", "be8cd7b8": "participatePresaleNow()", +"be8ce243": "PMPPerBlock()", +"be8db0ca": "getResolutionsCount()", "be8db3cf": "deadlineBlockNumber()", "be8dd49a": "getTokenUserCounter()", +"be8e0d54": "input_bool(bool)", +"be8e3d13": "selecteWinnerPrecision()", "be8ecef3": "requestAddOwner(address,string)", "be8eef8e": "hasOpened()", "be8f316a": "testmsg()", +"be8f6d4d": "hny()", +"be8fb1c1": "getUIntArray2Value(uint256)", +"be902804": "AuthorisedUser(address)", "be90be7f": "clearPoolsDone()", "be9117cc": "curryChickenToken()", "be912a0a": "getAyantDroitEconomique_Compte_7()", "be913b6f": "ETH_FUND(address)", "be916531": "test_OverSixtyPercent()", +"be918376": "unflagAggregator(address)", +"be91d729": "onBlockInitialized(uint256)", "be91de53": "frozenBalanceOf(address)", "be91ebe5": "tgrSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "be92ccfd": "setDisableBet(uint256)", "be92f334": "astrSold()", "be9413a7": "_cancelRole(address,address)", +"be9448f5": "Invest2FulcrumiDAI_NEWContract()", +"be94a4dc": "monthlyEnd()", +"be94b383": "recover3(address)", +"be94b730": "reserveToTokenSwapOutput(address,uint256,uint256,uint256)", +"be958abd": "GetTotalAscended()", +"be95b8bc": "setDbContract(address)", "be95e01a": "payout(uint256,address)", "be96031e": "playerinfo(address)", +"be962797": "switchPrivateSale()", +"be9696ca": "address_refer()", "be96bb92": "_isFullOrNull(uint256,uint256)", "be96faf7": "AWYManKeepChain()", +"be974335": "_info(uint256)", "be975f57": "CreateSTR(address,uint256)", +"be97a980": "steCRV()", "be981ff4": "transferOwnershipForVanityURL(address)", +"be984353": "log(bool,uint256,uint256,bool)", "be986420": "quarters()", +"be987558": "_verifyMessage(address,uint256,string)", "be987c11": "PriceDecrease(string,uint256,address)", "be988dbc": "BroCoin()", +"be989523": "adjuster()", +"be989fd6": "colorIndexToOwner(uint256)", +"be99166e": "withdrawSlotReward(address)", +"be994201": "testStrLenRunes()", "be999705": "addFunds(uint256)", "be99a797": "setNewRegister(int256,string,string,uint256)", "be99a980": "setAddress(bytes32,address,bool)", +"be99aa22": "treasurePart()", "be99c50f": "purchaseInternal(uint256,address)", "be99ed6f": "getCompte_41()", "be9a6555": "start()", @@ -109052,121 +199561,246 @@ "be9b3282": "cookUpFee()", "be9b3e8a": "reclaimEth(uint256)", "be9ba97f": "maxContributionPerAddress()", +"be9baf50": "indirectRefer_threshold()", +"be9bc819": "pausedProxy(address)", "be9c1add": "heldBalanceOf(address)", +"be9c6615": "_mintTax(uint256)", +"be9ca040": "getFlashloan(address,uint256,uint8,uint8)", +"be9cc307": "previousGameStartTimestamp()", "be9d89c5": "createTokenToMarket()", "be9ddfed": "getSanTimeLastMove(uint256)", "be9e1080": "_escrowPaymentEarning(address,bytes32,uint256,uint256,address,address,bool)", "be9e3774": "deathData_f18()", "be9e4697": "getDiscountTrancheDiscount(uint8)", +"be9eaf99": "testOwnerCannotAddDuplicatedVersion()", +"be9ebd71": "earlyIncomePercent()", +"be9ee11f": "emergencyRecipient()", +"be9eea98": "isAffordable(uint256,uint256)", "be9f2dc0": "hourPotHighscore()", "be9f7a20": "setInsertCar(bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", +"be9f90dd": "consumerProtectionFundAllocated()", "be9fa8dc": "Ethex(address,address,uint256,uint256,address,uint256)", +"be9faf13": "yellow()", +"bea006e0": "addLpToken(address,uint256,bool)", "bea046a1": "cashOutShip(uint32)", "bea05440": "CurrentStatus(uint8)", +"bea0769a": "SetPayTo(address)", +"bea09669": "f(bytes32,uint256)", +"bea09ec7": "LuckyDraw()", +"bea0e66c": "CancelAuction(uint256)", +"bea0ea60": "swapErc20ToPipt(address,uint256,uint256)", +"bea0f919": "FreezingAgentChanged(address,bool)", "bea10370": "hasRecentPrice(address)", "bea124a6": "query(bytes,bytes,int256)", +"bea15815": "getAccountLockState()", +"bea16758": "minAnswers()", "bea1dcf8": "taxCollector()", +"bea1e2ea": "GetCampaignEndDate(uint24)", "bea24735": "create_a_new_market(address,uint256,uint256,uint256)", +"bea28115": "totalProductivity()", "bea28a30": "undoTransferOwner()", +"bea2baa6": "setStrategyStatus(address,bool)", "bea31228": "ObirumIssued()", +"bea322b5": "setindxAndPoolAddresses(address,address)", "bea3c8b3": "PardusNetwork()", +"bea3e45a": "AuctionCreated(uint256,uint256,uint256,uint64,uint64)", "bea40bad": "composeJingle(address,uint32[5],uint32[5],string,string,uint8[20])", "bea412fa": "RedBUX()", "bea433a9": "TriumHolding()", +"bea442dd": "quantumPay()", +"bea45a45": "total_alicoins_bought()", +"bea4680e": "EventChangedAddress(address,string,address)", +"bea469e6": "sendToPartner(uint256)", "bea4ae88": "saleDue()", "bea4c4ee": "setIBalance4(uint256,uint256,uint256)", +"bea4c883": "minHolderAmount()", +"bea4d4bb": "sdarkBalance(address)", +"bea4dfcb": "hasRight(address,address,uint256,string)", +"bea4e449": "TokensOffered(address,uint256,uint256,uint256)", "bea50ae3": "setConfirmationPeriod(uint256)", "bea51ec2": "SunnyX()", "bea51f81": "addToKYCList(address)", +"bea53d3b": "setParams(uint256,uint256,uint256,uint256,uint256,address)", +"bea54468": "addpair(address)", +"bea557a1": "allTeamsCosts(uint256)", +"bea586a2": "_TOTAL_SHARES_()", +"bea59594": "getSellTradeLimitAndClass(address)", "bea5f9cd": "newPokemon(uint256,uint256,uint256)", "bea677dd": "MCS()", "bea69bb9": "Bal()", +"bea6b8b8": "lastContributorBlock(address)", "bea70578": "getPOOL_edit_16()", +"bea726ef": "MetaTransactionExpiredError(bytes32,uint256,uint256)", "bea72c0a": "dsAdd(uint256,uint256)", +"bea7414c": "addERC721ForStaking(address)", +"bea75f28": "stakingTokenTransfer(address,address,uint256,bytes32)", "bea76c3c": "disputeBlockNos(uint256)", +"bea78b8d": "extensionAsset()", +"bea79e82": "saque()", "bea7c13a": "gasPriceForCompensationAtHomeSide()", +"bea80d0c": "getFooUint()", "bea8bd27": "updateVettingTime(uint256)", +"bea92e96": "daiMigrationContract()", "bea948c8": "GetGift()", +"bea9849e": "setUniswapRouter(address)", +"beaa04c2": "getMachineIdForCodeName(string)", +"beaa13b4": "setFundManageAddress(address)", "beaa4765": "setComplete(bool)", "beab0638": "TokenAllocate(address,uint256)", "beab3537": "isClaimed(bytes32,string)", +"beab6e7e": "electionFinished()", +"beab7131": "_chainID()", "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()", +"beaccfde": "addEthLiquidityLGETEST()", "beacf74f": "test_insert_findWithHintPrevDecreased()", "bead0513": "leaveCommunity(address)", "bead21a6": "lockAtTime()", "bead45cf": "deposit_amount()", +"bead84bd": "lewd()", +"bead9031": "proposedPair(address)", "beadd203": "confirmWarranty(string,string,string)", "beadf957": "cancelOperation(bytes32)", +"beae048c": "Buy(address,uint256,uint256,uint256)", "beae207f": "startAirdrop(uint256)", +"beae2aaf": "dailyDividendPercent()", +"beae6637": "TIME()", +"beaeb388": "setAllowance(address,address,uint96,uint16,uint32)", +"beaf48f6": "DebitRate()", "beaf56a6": "changeInsurer(address)", +"beaf8bed": "lastBonusMultiplerBlock()", "beafa2dc": "sacToken(uint256,string,string)", +"beafce91": "getTodayAmount()", +"beb0597a": "getQuoteTokenLength()", "beb08ab9": "projectWallet()", "beb0a416": "website()", +"beb0f3ca": "buyIt(uint256)", "beb1274d": "medianize(uint256[])", +"beb12b90": "syncAppFeesCashier()", +"beb17c81": "leaveWeeklyStake()", +"beb1fffd": "Build(address,uint256,uint16,uint256)", +"beb2743d": "getLeaf(bytes32[],uint256)", "beb2b55d": "balanceHaben(address)", "beb2bad6": "SHITP()", +"beb2cbe3": "indexLastUpdate()", +"beb2fa0f": "setDailyExpLimit(uint256)", "beb318a0": "updateSelfDropStageState(string,bool)", "beb38b43": "set(bytes12,address)", +"beb391d4": "rdivup(uint256,uint256)", "beb3a38f": "capDay1()", +"beb3e241": "waffleDescription(uint256)", +"beb3ed5d": "margin(address)", "beb40d58": "queryShare(address)", +"beb4cb86": "disableBountyReduction()", +"beb51701": "trigger2(address)", +"beb54615": "collateralMarkets(uint256)", +"beb5bd81": "getTokenSpender()", +"beb5cc0f": "setStrategyForce(address,address)", "beb5f658": "compare(address,address)", +"beb604e0": "voter_count()", +"beb62277": "cancelListed(uint256)", "beb6422f": "setClue1(string)", +"beb65893": "redemptions(uint256)", "beb7de13": "updateCaps(uint256,uint256,uint256,uint256)", "beb7fd4e": "_setMany(address,uint256,uint256[],uint256[],bool)", +"beb8314c": "calculateRewards(address,uint256)", +"beb8c644": "onAccepted(address,uint256)", "beb92f55": "setCaller(address)", +"beb9385c": "firstBucket()", "beb9571c": "User_3()", "beb96be5": "releaseFor(address,uint256)", "beb9716d": "canMint()", +"beb9c181": "determineWin(uint8,uint8)", "beb9c90d": "wavesGW()", "beb9d27e": "prepopulate(address)", "beb9df86": "fwdToENS(bytes)", "beba0b11": "ScallopCrowdsale(uint256,uint256,address,address)", "beba285d": "privatePlacementAllocatingToken()", +"beba30bd": "PrivateFundDisabled()", "bebaa421": "setTrustAddress(address)", +"bebacc8e": "ousd()", +"bebb00a3": "getTotalLpUnrealizedPNL(address)", +"bebb1da6": "bonusUnlockTime(address)", +"bebb1f72": "triggerCalculation()", +"bebb5c31": "getUserBaseRewards(uint256)", "bebb7756": "RecievedDonation(address,uint256,string)", "bebb7e60": "kscBurnFrom(address,uint256,string)", +"bebbad15": "degenLpToken()", +"bebbf4d0": "depositVault(uint256,address)", "bebc3bfb": "requestWithdrawal(address,uint256,string)", +"bebc8fc0": "priest()", "bebc9d93": "buyCopyright(uint256,string,string)", "bebcc045": "description(bytes32)", +"bebcd0f0": "getAllRuners()", "bebd284e": "registerCoinData2(address,uint256,address)", +"bebd9735": "onDisputableVoided(uint256)", "bebda5b9": "WhitelistUpdated(uint256,string,address)", "bebdd5ca": "GenericCrowdsale(address,uint256,uint256,uint256)", "bebe3c88": "advisorsPeriodLength()", "bebe4f6d": "Standard_5()", +"bebe7d0b": "sellIndex(address)", +"bebe9daf": "getValidatorLength()", "bebeb73f": "createRoom(uint256,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "bebf10d5": "WorkflowState()", "bebf8498": "addCardToRegistry(address,bytes32,uint256)", "bebfe207": "publishMessage(string)", +"bec029f1": "getBNBStakingEndTimeById(uint256)", +"bec04f72": "vaiMintRate()", +"bec0723f": "constant_getPrices()", "bec0d799": "removeBook(uint256)", "bec10cde": "increaseStake(uint256,uint256)", +"bec12624": "rSFI_minter()", "bec13af1": "doBuyerCancel(bytes16,address,address,uint256,uint16,uint128)", "bec17f69": "isPreIco()", "bec24a0d": "payJackpot1()", "bec272da": "IotaGoldToken(address)", "bec3150e": "EthereumBrilliant()", +"bec332e1": "sort(bytes32,bytes32,uint256,uint256,uint256)", "bec3e6f3": "overStage(uint8)", "bec3fa17": "transferTokens(address,uint256)", +"bec44b4f": "replaceBoardMember(address,address)", +"bec454a9": "getTradeInfo(address)", +"bec4de3f": "rewardInterval()", "bec507ce": "switchfun()", "bec5e7b2": "playerDataRecord(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bec5eb79": "mun()", "bec60bd2": "change_token_price(uint256)", +"bec62df3": "proposeDelistWhitelist(address)", +"bec64754": "userTotalLevel(address,address)", +"bec69b4f": "setEthUsdPriceFeedAddress(address)", +"bec6a554": "RefundDeposited(address,uint256,uint256)", "bec6bc67": "adoptionRequests(bytes5)", "bec6eb15": "buyGladiatorChest(uint256)", +"bec70c9f": "withdrawAllFromStore(address)", +"bec71e90": "set_extra_credit(bool)", "bec77cb1": "getOwnerCards(address)", "bec7abfd": "getBounsEarningsInRound(address,uint256)", "bec809ec": "tomoConvertRate()", "bec81091": "executeEtherDeltaBuy(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", +"bec82034": "setDailyInterest(uint256)", "bec823c6": "BitcoinGreen()", +"bec82f36": "showdynamic()", +"bec97f46": "mCanSpend(address)", "beca159b": "registerUser(address,string,uint256,uint256,uint256)", +"beca2bcd": "testExist()", +"beca2e86": "UnlockVault(string,string)", "beca40df": "PERC_TOKENS_TO_DEV()", "beca4a8e": "TeleGrams()", +"beca53bc": "addLiquid(string,address,uint256,uint256)", "beca7440": "right52(uint256)", +"beca75d7": "setFullPauser(address)", +"beca8cef": "_calculateSenderAmount(uint256,uint256,uint256)", +"becacda6": "strategyDev()", +"becaff92": "zyx()", +"becb1297": "setRecipients(address,address,uint256)", "becb1f35": "isForking()", +"becb3451": "getSwapRatio()", "becb44da": "token_sale_start_block()", +"becc35ba": "pendingCTO(uint256,address)", "beccdb77": "lastFeesCollected()", "beccdd91": "updateSecPerBlock(uint256)", "becd0580": "payEtherToWinner(uint256,address)", @@ -109174,224 +199808,390 @@ "becd7027": "withdrawPurchasedTokens()", "becda0ea": "tune(uint256)", "bece1b22": "GameData(address,bytes32[],bytes32[],int256[])", +"bece2c54": "reseller(address)", "bece2ea1": "tokenPriceIncremental()", +"bece7532": "oracleContract()", "bececd4e": "updateVerificationStatus(address,bool)", "becee565": "GodeCoin(address,address)", +"beceed39": "addRewards(uint256)", "becf0426": "registerAffiliate()", +"becf39b4": "transferOwnershipContractSouvenir(address)", "becf3add": "bonusPercent()", +"becf40b6": "HOUSE_EDGE_PERCENT()", "becf917f": "DistribFundsReceiverAddress()", "becf9ce1": "removeFromAccountList(address)", "becfbf69": "peekLastNonce()", "bed03fdb": "winnerSelect(uint256)", +"bed06041": "PoolPrice()", "bed09038": "updateMember(address,address,uint256)", "bed0a8e5": "testRegisterSwarmEth()", +"bed0b20c": "onSale(address,address,uint256)", +"bed0c441": "newLP(address)", "bed0d1b9": "validTransfer(address,uint256)", "bed18966": "getCompletedFlag(uint16,uint16)", +"bed197c0": "initMISOMarket(address,address[])", "bed1a924": "totalICOSupply()", "bed1b8b9": "convertToInt(string)", "bed1cfcd": "addToOwnership(address)", +"bed20c5b": "replaceAsset(uint256,string,address)", "bed230d0": "burningMansCount()", +"bed239ab": "userInviteRewardAmount(address)", +"bed23f34": "OnOpenGameResult(uint256,address,uint256,string,bool,uint256,uint256,uint256)", "bed25542": "onTokenReceived(address,uint256,bytes)", +"bed27807": "fast()", +"bed28712": "issuerPaid()", "bed289c9": "CPolloToken()", +"bed2af80": "getPunk()", "bed315f8": "setRate(uint16)", +"bed31bc7": "kyberApproveTokenProportion(address,address,address,uint256,uint256)", "bed33cae": "getCancelableAt(uint256)", "bed34bba": "compareStrings(string,string)", "bed36fee": "test_insert_null()", +"bed3baaa": "actualAmount(address,uint256)", +"bed3e838": "activateInsurance()", +"bed3fe25": "setPheonixContractAddress(address)", "bed411a0": "CheckPrize(address)", "bed43ffa": "CoinCrowdToken()", +"bed4784c": "TRUSTED_WITHDRAWERS(uint256)", "bed47ed8": "sId()", "bed50ef8": "emitFeesWithdrawn(address,uint256)", "bed531fd": "playersAmounts(uint256)", "bed54a24": "ert()", "bed6701f": "lastweek_winner2()", +"bed68374": "hasSentToUniswap()", +"bed69910": "PartnerAccount()", +"bed6b611": "molochDepositToken()", +"bed6d147": "addCtknMapping(address[])", +"bed71e62": "getReview(address,bytes32,bytes32,uint256)", "bed7437f": "setHydroTokenAddress(address)", "bed866f6": "donations(bytes32)", +"bed90c17": "WET_TOKEN()", "bed9404f": "calculateAccountLiquidity(address)", "bed9588b": "getUint256Max()", "bed99850": "burnRate()", +"bed99dde": "findList50Percent()", "bed99dec": "replaceSecurityDepositRegistry(address)", +"bed9c2fd": "uopPerBlock()", "bed9d712": "chargeJNT(address,address,uint256)", "bed9d861": "withdrawStake()", +"beda2483": "confirmChange(bytes32)", "beda363b": "dynamicReverse(uint256[])", +"beda6ab6": "PRIVATESALE_END()", +"beda6f0d": "getHatchAmount()", +"beda8015": "executeBoosted(bytes32)", "beda86b9": "removeContributors(uint256[])", "bedaa624": "setBZRxToken(address)", +"bedaadab": "pendingKind(uint256,address)", "bedb86fb": "setPause(bool)", +"bedba408": "heureCourant()", +"bedba636": "set_coin_address(address)", "bedbb1a5": "saucePoolTotal()", "bedc17ea": "testFailSetName()", +"bedc4066": "ga()", "bedc7796": "ownerCountOfCard(address,address)", "bedca054": "Crowdsale(address,address,uint256)", "bedcb4fc": "EthlanceContract(address)", +"bedccb72": "swapETHtoDYT(uint256)", +"bedcee3c": "createKey(uint256,uint256,uint256)", "bedcf003": "ownerBalance()", "bedd12a5": "depository()", +"bedd9e27": "pendingBonusAlpaca(address)", "bedda13f": "setData_1(string)", +"beddb533": "singleDividend(uint256,address)", "bedddbc4": "darkcoin()", "beddf557": "NOLLYCOIN(address)", "bede2cac": "joinedCrowdsales(uint256)", "bede4bd8": "lockupOf(uint256)", "bedecc06": "seatsCount()", +"beded8a5": "registerVendor(address,uint256)", "bedefffe": "getOwnerName(address)", "bedf0f4a": "Stop()", "bedf8e75": "Netyul(uint256,string,string)", "bee03488": "getAllSSP()", +"bee04f9c": "projectShowAllTokens(uint256)", "bee066a8": "blocksUntilWin()", "bee11672": "allowBundlingMultitoken(uint256)", +"bee12d53": "totalCash()", "bee1351e": "_getJYPCBonus()", "bee14b3d": "getDevBalance()", "bee16cae": "getCodeToken(uint256)", +"bee1a4ec": "_setTransferRate(uint256,uint256,uint256)", +"bee1aa74": "onUserValChange(bytes32,address,uint256)", "bee200cb": "underLimit(address,uint256)", "bee2135e": "prefixedHash(string)", +"bee21993": "setWallet4(address)", "bee23c42": "contain(address[],address)", "bee28042": "LVX()", "bee2e134": "ethCollected()", +"bee30b0b": "GP_amountBets()", "bee36f37": "disableMiniSwapLock()", +"bee3fa66": "setThreePool(address,address)", "bee40aa4": "setCallType(uint256,uint256)", "bee47606": "originalPricesBySpinner(uint256)", +"bee488de": "enableTransferAccess()", "bee4bbeb": "unsetIsBuyByAtom(uint256)", "bee4cc6b": "getBAB(bytes32,address)", +"bee523f9": "GetNextId()", +"bee52fb4": "doubted(address,address,uint256)", +"bee574b9": "getMAX()", "bee588e9": "registerCert(bytes32,bytes,uint256)", +"bee58ca9": "biscuit()", "bee5cdca": "getProjectById(uint256)", "bee5ea6d": "PurgeCoin()", "bee604ea": "addGame(address,string,uint256)", "bee6348a": "presaleOpen()", "bee712da": "buyZone(uint256)", +"bee7a212": "setTimeToLive(uint256)", +"bee8474c": "changeVoteC(uint256)", +"bee8fdb0": "updatePoolDividend(uint256)", +"bee9135b": "tokensICOPublic()", +"bee96ae9": "queryUserNetworkRewardDetailByIndex(address,uint8)", "bee96d9f": "updateGoldReferrer(address)", "bee98dff": "get(string,int256)", +"bee99067": "addNewStrategyWithFeeOnTransferTokens(bool,address[],uint256[])", +"bee9cd81": "dropDistributorAuth(uint256)", "bee9f6f3": "_getVATToCollect(uint256,uint256,address)", "beea7bfb": "newSubdomain(string,string,string,address,address)", "beea887c": "totalVCCoin()", +"beeadf16": "BAL()", "beeae9a6": "Ather(uint256,string,string)", "beeb0578": "processFundingFailedFinished()", "beeb0a82": "SeaCoin()", "beeb1b5d": "amountRaisedIsc()", "beeb6d87": "withdrawCoin(bytes4,bytes32,uint256)", "beebeff7": "tokenForAdvisor()", +"beebfeeb": "SetDelegate(address,address)", "beec1caa": "issueCertificate(string,string,string)", +"beec9b0c": "ctn(address,uint256)", +"beecb1ab": "many()", +"beed9b51": "validate(uint256,int256,uint256,int256)", "beee5852": "opponentAmount()", +"beee75da": "TransactionGasPriceErrorSelector()", "beee9a34": "TIER4()", +"beeecb7a": "SELL_N()", +"beef640d": "setFundingAccount(address)", "bef17ed0": "totalTeamContributorIds()", "bef19a8b": "narcosByDistrict(uint8)", +"bef21124": "setTaxlessSetter(address)", "bef23131": "_createBurnLot(address,uint256)", +"bef2613a": "CONTRACT_REVENUE_POOL()", +"bef26de0": "onWithdraw(uint256,uint256)", +"bef28149": "SmartContractRewardToVoter(uint256,address[],address)", "bef28736": "UpgradedController(address)", +"bef28bbf": "initializingTimestamp()", "bef2e0d8": "Variant()", +"bef2e1ee": "totalArticles()", +"bef347ed": "addToInUse(uint256)", "bef35ccb": "requestClose(uint64)", "bef39963": "releasedTokens()", "bef3a083": "deadLine()", +"bef40ec8": "toggleCollateralRatio()", +"bef41795": "setInitialCollateralRatios(address[],uint256[])", "bef44f18": "transferChild(uint256,address,address,uint256)", "bef4876b": "finished()", +"bef497fd": "transferLockOwnership(address,uint256,uint256,address)", +"bef4de37": "altParameter(address,address,address,address,address)", "bef4f95d": "alarms(uint256)", "bef5223f": "withdrawTokenToFounder()", +"bef54a5e": "dispense(address,uint256)", "bef55ef3": "readData()", "bef566ef": "requestForMigration(address)", +"bef5886a": "getMajorAddress(uint256)", "bef5bb45": "checkHash(address,string)", +"bef5d5dc": "qtoq(uint256)", +"bef648db": "setMaxSpread(uint256)", "bef72fa2": "controllerLookupName()", "bef7a2f0": "Fee()", "bef7c258": "tierStartTime(uint256)", "bef80387": "KYCCrowdsale(address)", "bef8f7a5": "userAddressAdded(address)", "bef90b94": "GetShipsByOwner(address)", +"bef90fd3": "swapToPrice(address,address,uint256,uint256,uint256,uint256,address,uint256)", +"bef9248f": "NewAnchorAdmin(address,address)", +"bef96eaa": "finReferCount(address)", "bef973e4": "getUnclaimedFunds()", "bef97c87": "transfersEnabled()", +"bef989d8": "validatorsCreated()", +"bef99961": "stars(address)", +"bef9b6e1": "Submit_answer(string)", "bef9e4ce": "getPreviousProfit(uint256)", "befa1e2f": "totalBets()", "befa7d5a": "addressFundDevelopers()", +"befa9903": "StartDealEvent(bytes32,address,address)", +"befade81": "testAirDropActive()", "befaed75": "Sell_Offer(uint256,uint256,uint256)", +"befb1982": "LogGameCreated(address,uint256,uint256,bytes32)", "befb6e56": "calCandidate(address)", "befbae04": "completeIcoPart2()", +"befbe99c": "minimumNaturalUnit()", "befc3e2b": "getInvested()", "befc5c32": "getOwnersItemList(address)", "befcc34d": "updateSignedDealsCount(address,uint256)", "befda2ff": "postIcoPhaseCountdown()", +"befdb9be": "hope(uint256,uint256,address)", +"befdd1e8": "unRegisterActiveReceiver(address[])", "befe0e79": "infinity()", "befe6299": "buySPIKE()", "befed472": "SKToken(uint256,string,string)", +"beff2a53": "devFeeStage(uint256)", "beff6dbf": "getInsurancesCount(bytes32)", "beff778e": "CoinBazarCap()", "beff90dc": "isVersionContractOrLogic()", "beffc416": "set_address2(address,address)", "befff6af": "setUseDELEGATECALL(bool)", +"bf004ba0": "sentTransferETH(address)", +"bf006ed3": "withdrawComm(uint256,address)", +"bf00eaef": "addGroup(string)", +"bf00fcd6": "setMaxFreeWithdraw(uint256)", +"bf010b21": "isOpenWithdraw()", +"bf0132f1": "tokenToPureChain(uint256)", +"bf014789": "authorizedAccts(uint256)", +"bf018376": "setPriceUSDT(uint8)", +"bf01be5d": "addCpPoolInfo(address,uint256,address,address)", +"bf020f61": "JACKPOT_FEE()", "bf02dbcf": "randNums()", +"bf032ae7": "URIUpdated(uint256,string)", "bf03e092": "join_address_pay(uint256,address)", "bf03ef7d": "setDailyTokenLimit(uint256)", "bf04820b": "totalLosses()", "bf050334": "resolveDisputeBuyer(string,address)", +"bf051c13": "SPECIAL_ROLE()", "bf052a8a": "countConfirmations(uint256)", "bf059dc2": "_nonce1()", "bf05cbe6": "hasFourStepWithdraw()", "bf05d653": "endVesting(address)", "bf06444b": "BrokenContract()", +"bf06dbf1": "f(uint256,uint256,uint256)", +"bf0705f5": "DrawResult(uint16[],uint256,uint8,uint8,uint8,uint8)", +"bf0752cb": "GetMultiBalance(address,address[])", "bf07aae7": "CQT(uint256,string,uint8,string)", "bf082e38": "GICT()", +"bf084298": "withdrawDarkCockUni(uint256)", "bf084408": "submitProof(bytes32)", "bf0872ef": "totalDiscount(uint256,uint256,string)", "bf08778c": "seeAllNumbers()", +"bf08c391": "checkMulDiv(uint256,uint256,uint256)", +"bf08cdc3": "taxReciever()", "bf09466f": "addEntryIn4WeekPeriods(address,uint256,bool,uint256)", +"bf09a342": "switchContract()", "bf0a07bd": "getHardCap()", +"bf0a3232": "addSchool(address,string,string)", "bf0a53f5": "Notarize(bytes32)", +"bf0aa8c7": "requestWithdrawal(bytes32,uint256,address,address)", "bf0aaaf5": "OWN_ChangeState_locked(bool)", "bf0af1ba": "checkProof(bytes,bytes32,bytes32)", "bf0b0c52": "PaisaToken()", "bf0b47ce": "getWinLoseAmountByBettingOwnerInGamblingParty(uint256,address)", "bf0b88aa": "CanYaDao()", +"bf0b93cf": "cancelTx(string)", "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()", +"bf0db9fe": "getUsrAdr(uint256)", "bf0dc1c0": "IICToken(uint256,string,string)", "bf0df0c1": "Start3()", +"bf0df445": "maxLockingPeriod()", "bf0e4900": "randomWithNonce(uint256)", +"bf0e4f1b": "weth_collateral_decimal()", +"bf0e5336": "BlockValueMoved(uint16,uint16,address,uint256,uint256,uint256,uint256)", +"bf0e5b95": "emergencyUnstake(uint256[])", "bf0e63d7": "FastGrowthToken()", +"bf0e6e79": "_uniV2Router()", "bf0e9d61": "getProof(string,string)", "bf0f5495": "volunteerWrite()", "bf0f88ae": "Google()", +"bf0fecd1": "phoenixAuthAddress()", "bf101b32": "isTransferAuthorized(address,address)", "bf1031d9": "proposeTemplate(address,address)", +"bf104555": "safeWithdrawFunds(uint256)", +"bf107590": "evidentirajIzlazakNaIspit(address,uint256)", +"bf109486": "statLuck()", +"bf10a704": "tos(address)", "bf10bde1": "calculatePrize(address,uint256,uint256)", "bf1152db": "preTransfer(address,address,uint256)", +"bf11815d": "withdrawInvest(uint256)", "bf11f412": "buyCreditsAndSpendAndRecover(string,uint256,uint8,address,uint256,address)", "bf120ae5": "freeze(address,bool)", "bf12165e": "fillUpSlot(uint256,uint256)", "bf125c49": "balanceIsZero(address,string)", "bf12bf4f": "transformContract()", +"bf13006b": "userDivdDate(address)", "bf13633c": "setvalues(string,string,string,string,string,string)", "bf137795": "canSpawnAs(uint32,int256,address)", +"bf13806e": "tokenTemplateCodeHash()", +"bf13d438": "getPriceAtTime(uint256)", "bf1482fa": "getDonators()", +"bf14abc2": "alreadyGuessed(uint256)", "bf14c119": "fund(bytes32)", "bf14dcbf": "collectStakingBonusTokens()", +"bf15071d": "order()", +"bf1512d3": "playerPairs(address,uint256)", "bf152765": "userBalance()", "bf15a645": "add_numbers(uint256)", "bf15d827": "issueTDETokens(address,uint256)", "bf15e42a": "CoinClaim(string,string,uint8)", "bf15e64c": "setPlayerLimit(uint256)", +"bf15e956": "globalInvestAddrCount()", "bf15ea76": "transferrableTime()", +"bf15ed54": "delegateClaimAllRewards()", +"bf162b4b": "finishOwnerChange()", +"bf16bccd": "Added(address,uint256,uint256,uint256)", "bf16e9e8": "PccToken()", "bf16ec99": "_computeCut(uint128)", "bf176c34": "profitAddr()", "bf1792b3": "toHex(uint256)", +"bf17f2f2": "ethBalance(uint256)", +"bf184f93": "bondedContract()", "bf187478": "shift_left(uint64,uint256)", "bf18dfbe": "PhantomToken()", +"bf190ade": "LogRevertCrossFork(bytes32,address,uint64,uint256,uint8)", "bf190c8e": "GACToken()", +"bf199e62": "rewardTokensLength()", +"bf19d77a": "transferFees(uint256)", +"bf19ff9f": "approve_589(address,uint256)", "bf1a2e52": "NucleusVisionTokensMinted(address,uint256)", +"bf1afd80": "startFinalDistribution()", +"bf1b206b": "refBuys(address)", "bf1b31c2": "ThirdPartyPlatformAddr()", "bf1b5f19": "withdrawRequest(int256,int256)", +"bf1b8dd3": "setLiquidationRatio(address,uint256)", "bf1bb055": "getCCH_edit_14()", +"bf1c0c24": "maximumBuyAmount()", "bf1c30f5": "applicationNameTaken(string)", +"bf1c5e5d": "tokenToEthSwapOutput(address,uint256,uint256)", "bf1c8016": "closedSaleWallet()", "bf1cd416": "GrowthPool_Released()", +"bf1d2c71": "getGasCostOfGetAmount1ForLiquidity(uint160,uint160,uint128)", "bf1d4c66": "lastPurchaseTimestamp()", "bf1dfb8a": "totalBattles()", +"bf1e4ad0": "nana()", +"bf1e5397": "directInvestors(address)", "bf1e799b": "getTimelock(address)", "bf1e8497": "preCrowdMinContribution()", +"bf1ec924": "shit2()", +"bf1f15d0": "vanillaDistributed()", +"bf1f2819": "getOwnerParameters(bytes8)", +"bf1f4647": "balanceofReddo()", +"bf1fb1f6": "checkparticipantinfarming(address)", +"bf1fdd74": "getFactoryAmountsOut(address,address,address,uint256,address)", "bf1fe420": "setGasPrice(uint256)", "bf205ebc": "luckyNumber()", +"bf207ad3": "TokenAllocation(address,uint256)", "bf208e00": "setMinAcceptedAmountInPresale(uint256)", "bf2095a4": "sellManually(address,uint256)", +"bf20a2e0": "setTrancheAExchangeRate(uint256)", +"bf20d9dc": "adminMintToken(string)", +"bf2120a5": "changeSTFactory(address)", "bf212637": "getMatronId(uint256)", +"bf21630c": "burnFor25XCredit(uint256)", "bf21e45d": "changeCrowdSaleDates(uint8,uint256)", "bf22c457": "getJob(uint256)", "bf22d670": "boolCallWithArray(bool[4])", "bf22f63d": "PasswordChallenge(bytes20,bytes32)", +"bf230d9c": "RefundContribution(address,uint256)", "bf23aec2": "getplaypool()", "bf23b411": "eosPRIVATE(uint256,uint256)", "bf24a794": "getMostVotedOptions()", @@ -109399,48 +200199,85 @@ "bf24de3d": "transferTo(address[])", "bf251bc6": "foundersPercentOfTotal()", "bf251e7f": "TOTAL_CROWDSALE_FUND()", +"bf253bb9": "Partner(address,address)", "bf254915": "set_Gas(uint256)", "bf255974": "GoldRegistry(address)", +"bf25811f": "burnableTokens()", "bf25bf2e": "ethToTokenRest(uint256,uint256)", "bf25c597": "VernamToken(uint256)", "bf25c61d": "isOwnerItem(uint256,bytes32)", "bf260037": "addressFutureInvest()", +"bf265e83": "AdminSet(address,address)", "bf2699e7": "initValidator(address,address,address)", "bf26bf58": "MartinKoTokenHolder()", +"bf26cafc": "getBadgesById(uint256)", +"bf26fd06": "getToken(bool,uint256,address[],uint32,uint256)", "bf277962": "beneficiary(bytes32,int256)", "bf27f585": "totalFundsReceived()", "bf27fa7c": "OCoin()", "bf2805e3": "getVestingAllocation(address,uint256)", "bf2860a4": "allocateProofTokens()", +"bf288d6c": "ProcessVoteTotals(uint256,uint256)", "bf28d7ee": "_setOutcome(int256)", +"bf28ece4": "setMaxReleaseLimit(uint256)", +"bf290eb0": "stableTokenPrecision()", +"bf291690": "butterToLp0Route(uint256)", "bf29a854": "aboutFactoryWorkers(uint256)", "bf29b90a": "changeAssociation(address)", +"bf29ba63": "distributeFunds(address,uint256,address,address)", +"bf29c4c4": "totalBurnReward()", +"bf2a458a": "providerModules(address)", +"bf2abd56": "unassignStarSystem(uint256)", +"bf2b1522": "getStoreByIndex(uint256)", +"bf2b4628": "FeeAdded(address,uint256)", "bf2b7524": "updatePoolAddressCapTier2(uint256)", +"bf2bc751": "callAny(address,bytes)", "bf2c1cc8": "setDailyDepositLimit(uint256)", "bf2c3dad": "TransferSellAgentSiteReg(address,uint256)", "bf2c7cbe": "rateT4T()", "bf2d9e0b": "totalRevenue()", +"bf2e077e": "getInviteCode(string)", "bf2e694f": "getPreviousRequest(address,address)", "bf2e727b": "BONUS_LEVEL_1()", +"bf2e9105": "verifyEIP712(address,bytes32,uint8,bytes32,bytes32)", +"bf2eb19e": "getTokenData(address[])", +"bf2ed60b": "Withdrawal(uint256,uint256)", +"bf2f3c76": "getOstanTotalBudget()", "bf303d14": "convertCountryIndexToBytes(uint256[])", "bf30d943": "changefirst24Percent(uint256)", "bf31196f": "offerPunkForSaleToAddress(uint256,uint256,address)", "bf314640": "newResolution(string,string)", "bf31d573": "send_to_darshil()", "bf31fc58": "VestingMasterContract(address,bool)", +"bf32442d": "getXVSAddress()", "bf326254": "unlockedCustomer(address)", "bf32a4b6": "withdrawOwner2(uint256)", +"bf32ab7b": "approve1()", "bf32bf97": "FailGuyTax()", +"bf32f4d1": "_stakingTokenToOwner(uint256)", +"bf333d94": "initializeShards(address,address,uint256,uint256,uint256,string,string)", "bf33589b": "createImageTest()", +"bf335e62": "newAccount()", +"bf33675c": "prevTotalETH()", +"bf33a1f5": "refreshApproval()", +"bf33bd4c": "setLiquidationFee(address,uint256)", "bf33be97": "balanceOfOrder()", +"bf33e914": "enableTransfersManually()", "bf34040d": "_depositEthereum(uint256)", +"bf340f61": "LogCurrencyRateReceived(uint256)", +"bf344183": "enableReserveStableRate(address)", "bf347404": "engravedToken()", "bf34ea7d": "makeBatchPayment(address[],uint256[])", +"bf3506c1": "canClaim(address)", +"bf353dbb": "wards(address)", "bf354389": "Eplay()", "bf35588b": "setDepositRate(uint256)", +"bf357dae": "_RState_()", "bf35af36": "vestingOwing()", +"bf35cb1d": "addStakingMapping(string,address,address)", "bf35d5de": "FighterCreated(address,uint256,uint256)", "bf35d96b": "Lock(uint256,address,address,uint256,uint256)", +"bf362a2c": "setLimited(address,bool)", "bf363b18": "transferFee(address,uint256)", "bf368399": "leaderboard(uint256)", "bf36c5b0": "offerPieceForSale(uint256)", @@ -109448,41 +200285,70 @@ "bf3724af": "f2(uint256)", "bf375fb5": "signFork(uint256,bytes32)", "bf37689c": "showArrayLength()", +"bf376c7a": "wrap(address,uint256)", +"bf37a66e": "getIndexMapping(uint256)", "bf37b8f1": "devOwed()", "bf381f93": "changeVestingAddress(address,address)", "bf385c00": "hasSufficientPaymentInternal(address,uint256)", +"bf386682": "baseBorrowRate()", "bf390355": "initCasino()", "bf391545": "getBAUU(bytes32,address,uint256)", "bf395d3d": "getShipProduct(uint32)", +"bf396df0": "pendingWithdrawalRateNumerator()", "bf3986ba": "TrustlessTransactions_TransactionHeight()", "bf39ba48": "PRIVATESALE_SUPPLY()", +"bf39edc6": "attachManyAddressesExternal(uint256[],address[])", +"bf3a5c02": "_owners(address)", +"bf3abc34": "GetWei(uint256)", +"bf3af1f9": "TIME_YEARS_STEP()", "bf3b1101": "transferWalletOwnership(address)", "bf3b397b": "tokensToEthereum_(uint256)", +"bf3b5de1": "getFPTAAddress()", +"bf3b75a3": "Airdrop(address,address[],uint256)", "bf3b9e38": "a(uint256,uint256,uint256)", "bf3bcc41": "isMod()", "bf3c1120": "setBytesValue(string,bytes)", +"bf3c459e": "totalStakedPpblz()", "bf3c685f": "TOTAL_VALUE()", +"bf3d4272": "isStakingStarted()", "bf3d6141": "setParams(uint256[],uint8[],uint256[],uint256[])", "bf3d9995": "officialWebsite()", "bf3da865": "scannedGoldCaps()", +"bf3df20d": "addScribe(address)", +"bf3e116b": "createStashAndDelegate(bytes32[],uint256[],address)", "bf3e394e": "withdrawInvestment()", "bf3e4a79": "CoreTeamAndFoundersWallet()", "bf3e67eb": "Sk8coin()", +"bf3e6eaf": "getFilledAmounts(bytes32)", +"bf3e92ee": "setPresaleEthereumDeposit(address)", +"bf3ebb47": "replicantCountByGeneration(uint8)", "bf3eea48": "privateFundEnabled()", "bf3f493c": "AdminAdded(address,address)", +"bf3fa530": "approve_605(address,uint256)", +"bf409fd6": "BONUSORACLE_ROLE()", "bf40b904": "getIssuedBlock(bytes32)", "bf40fac1": "getAddress(string)", "bf417b9f": "MINING_SUPPLY()", "bf419975": "MBLToken()", +"bf41a3dc": "getMintingPointTimersManager()", +"bf41ced6": "lockMachine()", "bf41e16f": "TOTAL_SHARE()", "bf428c17": "addTrustedContractAddress(address)", +"bf42d947": "NEW_IDAI_ADDRESS()", +"bf431a05": "finAddr()", +"bf431ccd": "LogS(string,string)", +"bf432049": "secondaryReceiversAmount()", "bf4386a0": "maxMembers()", +"bf439916": "zildTotalDeposit()", "bf439e80": "mintForEarlyInvestors(address[],uint256[])", +"bf43cb22": "newFactory(address,uint256)", "bf43e91c": "withdrawAffVault(uint256)", "bf43ed4d": "dateInit()", "bf43fffb": "getFirstEncounterIdFromDay(uint256)", +"bf4426ad": "createNewChildrenWithVerifiedRole(string[],uint256[])", "bf44aa70": "setSellCommission(uint256)", "bf44eb03": "liquidityReserveWallet()", +"bf4583cd": "getNftData()", "bf45db19": "ArtGallery()", "bf463341": "GetInitData()", "bf4637e5": "jackpotPercent()", @@ -109491,33 +200357,54 @@ "bf46ad1d": "approveSponsorableJob(address,uint256,address,address[])", "bf46d3df": "canSwap(uint256,address)", "bf474766": "joinGame(bytes32)", +"bf47d422": "_initializeACL(address)", +"bf47f715": "gSellBurnBP()", "bf485e95": "getElementLocation(address)", "bf487801": "getContractBalanceOf()", +"bf48b596": "currentCrowdsaleStage()", "bf48d8b5": "setCurrenseeFoundationAddress(address)", "bf49649b": "Galatasaray()", "bf49d120": "addReview(string,uint256,address)", +"bf4a13ee": "alreadyWithdraw(uint256,address)", "bf4a185b": "ClientOrderEvent(address,uint8,uint128)", "bf4a5485": "extLockBot(uint256,uint16)", "bf4a63f8": "withdrawSOC(uint256)", +"bf4a6da2": "MAX_USER_DEPOSITS_COUNT()", "bf4a79e6": "TimeChain()", +"bf4aa2f2": "referralBonusWETHClaimed(address)", "bf4aaf86": "DefaultActionDelayed()", "bf4aeff2": "payoutPeriodEnd()", +"bf4b0123": "checkAndConvertETHToWETH(address)", +"bf4b0331": "evtGameRoundStart(uint256,uint256,uint256,uint256)", +"bf4b136b": "calcRptAmount(uint256,uint256)", +"bf4b1990": "getETHUSDPrice()", "bf4b72e3": "metaTransferHash(address,uint256,uint256,uint256)", "bf4b7ddd": "updateEnabledStatus(address,bool)", +"bf4b91b1": "getIndirectLength(address)", +"bf4bdb27": "initializeLiquidity()", "bf4c06a1": "changeLogOwner(address)", "bf4d0abe": "NatoExchangeToken()", "bf4d5af4": "failures(uint256)", +"bf4d777d": "vips(uint256)", "bf4d89b5": "parseInt(string,uint256)", "bf4e9615": "calcPriceFromFactor(uint256)", +"bf4eb03e": "setCallerPercentage(uint24)", "bf4f7cc0": "onlyStores()", +"bf4fa858": "validMember(bytes32)", +"bf4fb0c0": "setAuthorized(address,uint256)", "bf503a6e": "crowdSalePercentage()", "bf506b47": "registerTXS(uint256,address)", "bf5103a1": "AUTH_CANMINT()", "bf5124d0": "displayCard(uint256)", +"bf515b6b": "bordem(address,address)", +"bf516886": "upPredictionDeposits(uint256)", "bf52439b": "BezantERC20Base(string)", +"bf5258df": "takemoney(address,uint256)", +"bf52f1cf": "amountFilled(address,uint256,address,uint256,uint256,address)", "bf530969": "setLabel(string)", "bf53253b": "NATIVE_ASSET()", "bf5371e3": "sendOnRequest()", +"bf5373dc": "check_period(address)", "bf538b68": "BOXToken()", "bf538f6f": "mintingCompleted()", "bf539711": "buyTokensPresale(address)", @@ -109525,124 +200412,208 @@ "bf53e3ba": "harvestQuorumPercent()", "bf53fa61": "PRIVATESALE_END_DATE()", "bf547894": "transferBatch(address)", +"bf549b34": "evtAirDrop(address,uint256)", "bf54bb60": "Bitscor()", "bf552230": "_changeAttributes(uint256,uint256)", "bf5522da": "bounties(bytes32)", "bf55486b": "Tanya()", "bf559d11": "startTournament()", +"bf55b96a": "AddToInvestmentBalance(uint256)", "bf566599": "changeMyName(string)", "bf5671fd": "changeSecOwner(address)", "bf568a4c": "endIcoByCap()", "bf56ac81": "withdrawAffiliateBalance(address)", "bf56cc08": "emergencyClawbackEther(uint256)", +"bf56ee26": "sellingContract()", "bf5772b9": "escape(uint32,uint32)", "bf583903": "remainingTokens()", "bf58aad8": "privatePreSale()", +"bf58d972": "transactValidatorRole(uint256,address)", +"bf594cf5": "sendRejoinAndMatchingBonusPool1(address,address)", "bf59cdff": "getH3Amount()", "bf5a451b": "foreverBlockBattleAddressUpdate()", "bf5a4dd3": "unlist(uint256)", "bf5a79ee": "_getSchellingRoundDetails(uint256)", "bf5abfe3": "SimpleConsent(string,address,address)", "bf5b2e5d": "MIND_FOUNDATION_AMOUNT()", +"bf5b3b18": "setRangeTimeBank(uint256)", "bf5b4c0c": "getPendingExploreData(address)", +"bf5b4d3f": "crv_gauge_addr()", "bf5b6016": "addContract(string,address)", "bf5b6234": "fillSellOrder(address,address,uint256,uint256,uint256)", "bf5bb323": "donationMap()", +"bf5bfdfb": "_guardCounter()", +"bf5c0071": "getCostToBuy()", +"bf5c06da": "Claim(string)", +"bf5c142e": "cancelSignature4NextOperation()", +"bf5c2920": "contract_creator()", +"bf5c2c88": "batchMint(address[],uint16)", +"bf5c5769": "giveMeSparta()", +"bf5c782a": "riskAssetDecimals()", "bf5c7f9b": "emissionProvidersCount()", "bf5c844b": "oneweek()", +"bf5c9822": "getFeeAmount()", "bf5cf791": "AIRDROP_TOKENS_NUMS()", +"bf5d0f3b": "setGameAddr_aa(address)", "bf5e54d2": "updateTokenImprint(uint256,bytes32,int256)", "bf5f0169": "deliverTeamTokens(address)", "bf5f2b67": "tradingBalanceOf(address,address)", +"bf5f3f08": "airDropTo(address)", "bf5f4edf": "addMonsterClassExtend(uint32,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", "bf5f93e7": "twoHightestBidsDifference(string)", "bf5fc2ee": "setStartsAt(uint256)", "bf604019": "coinTradeStart()", "bf606d14": "sendOneEtherToHome()", +"bf608f87": "lockRewardsForAllNFTs()", +"bf60c386": "giftToken(address,uint160,uint32,uint96,string)", "bf611c78": "OmniDex()", "bf61b517": "FEE_SILO()", "bf61e4b2": "AsuRaimu()", "bf620a45": "lockAccount(address,uint256)", "bf6211d9": "StripToken(address)", "bf624273": "expiryBlock()", +"bf6307f2": "openMine()", "bf630bc8": "AliCoin()", "bf6311c2": "_progressAdPrice(uint256)", "bf632e67": "stateController()", +"bf6411b2": "ZapIn(address,address,uint256,uint256,address,address,bytes)", +"bf641a1b": "minPercentClaim()", "bf6537a0": "crowdsaleBeneficiary()", "bf654aac": "maxFeePercentage()", "bf656791": "getMinContrib()", +"bf659885": "AdminRemoved(address,uint256,address)", "bf65d492": "FileName()", "bf65dd32": "_checkAndCallApprove(address,uint256,bytes)", "bf664892": "PARSECS_PER_ETHER_BASE()", "bf66a5f9": "indSaleDeposit()", "bf6713f6": "getGift(uint256)", "bf671782": "handleReferrals(address,uint256,uint256)", +"bf672c8f": "getImplementationAndProxy(bytes32)", +"bf67bf95": "sendByCall(address,address[2],uint256)", +"bf67ec12": "TokensMinted(address,address,uint256)", "bf686453": "PAN()", "bf6888c8": "VESTED_PERCENT()", "bf6896eb": "signAgreement(bytes32)", +"bf691171": "usdt_deposit(address,uint256)", +"bf6940b4": "HorseyPurchased(uint256,address,uint256)", "bf69d707": "punkBids()", "bf6a10d7": "validateContributor(address,uint256,uint8,bytes32,bytes32)", "bf6a1413": "hasSigned(address)", +"bf6a1c0d": "StartTrading()", +"bf6a2a22": "COMPENSATION_COMMISSION_ADDRESS()", "bf6ad320": "winnerPrice()", "bf6ad32b": "getgbyte()", "bf6afbaf": "FeePaid(address,address,uint256)", +"bf6b319a": "air_drop_count()", "bf6b43a1": "upgradeCrystalMine()", "bf6b6536": "SampleContractOther()", +"bf6b874e": "totalShares(address)", +"bf6bc335": "setStateRestricted(uint256)", "bf6c277a": "getTotalAccessorySeries()", "bf6c4de9": "newPLCRWithToken(uint256,string,uint8,string)", +"bf6c5e9b": "getProductNames()", "bf6ca138": "issuedExternallyTokens()", +"bf6ce8a7": "getUserTotalInvested(address)", +"bf6d1028": "commitERC20(address)", +"bf6d6b1b": "bytesCode()", "bf6d91be": "addClient(address,uint256,uint256,uint256)", "bf6d9abd": "unlockTransfer()", +"bf6da135": "swapERC20Token1ForERC20Token3(uint256)", "bf6deda4": "createLotto(bytes,bytes,bytes10,bytes10,bytes)", +"bf6e2337": "refreshConfigInternal()", "bf6eac2f": "stake(address,address,uint256)", "bf6eb070": "MAX_ALLOWED_STAGE_2()", "bf6ec777": "takeFee(uint256,address)", +"bf6ece40": "updateStagingMode()", "bf6edbd9": "mintFrozen(address,uint256)", "bf6f7755": "transferBaseOwnership()", +"bf6fc725": "eticatobosoms(address,uint256)", "bf7035c3": "getSaleContractDepositEtherMin(address)", "bf70a985": "PRESALE_ETH_IN_WEI_FUND_MAX()", "bf70bd75": "stopPreIco_step2()", +"bf7143c1": "mintIdleToken(uint256,bool)", "bf716708": "TOKEN_SUPPLY_SEED_PRESALE_LIMIT()", +"bf71f324": "mintBPro(address,uint256,uint256,uint256)", +"bf72bb7d": "testWithFlat(bool,uint256)", "bf730997": "modifyGuess(uint256,uint256,uint256)", "bf733e29": "oraclize_newRandomDSQuery(uint256,bytes,uint256)", "bf735b13": "createSale(bytes32,uint256)", "bf737c87": "JackpotWon(address,uint256)", +"bf73aa2c": "getOrdersForUser(address,uint256,uint256,address)", "bf7408de": "TAJ()", "bf742d56": "canExecuteArbitraryCode()", "bf748655": "isPaymentRegistered(bytes32)", "bf748e47": "get_pre_kyc_iconiq_bonus_numerator(address)", +"bf749b6a": "getUid(address)", +"bf753b26": "CuteCoinShopBuy(address,uint256,bytes)", "bf7540d2": "getMoneyCount()", "bf754558": "conversionsEnabled()", "bf75553a": "sacarWEA()", +"bf75838e": "IcoFinished(uint256)", "bf75fdb5": "CreateShortAlias(bytes32)", +"bf765598": "_decode_sol_bytes11(uint256,bytes)", +"bf76c0ef": "addMerchant(address)", +"bf76fe70": "unfreezeNest(address,uint256)", +"bf7736aa": "Recalled(address,uint256)", +"bf7746b8": "updateProfile(bytes32)", "bf77aa1f": "updateListing(uint256,bytes32,uint256)", "bf77afdb": "TokensReserved(uint256)", +"bf77beff": "callCustomJudge(bytes32,uint256,bytes32,uint256[4],bytes32,uint256,bytes32[],bytes32[10],uint256[4])", +"bf77fa9b": "setPrivateData(string)", +"bf77fd13": "Bought(address,address,uint256,uint256)", +"bf790663": "DeveloperReservedUnlockTimeChanged(uint256,uint256,uint256)", "bf7929a6": "refundeadline()", +"bf794707": "idxStart300()", +"bf79cb0d": "setWhitelistedRebase(address,bool)", +"bf79e065": "lendOnAave()", +"bf7a7921": "zeigePoolfahrtDaten(uint256,uint256,uint256)", "bf7abee6": "SetAuth(address)", +"bf7af634": "_addAFIMarkets(address[])", +"bf7b5d7a": "simulator()", "bf7b69ee": "payDebt(address)", "bf7ba12a": "LupeShares(address,address)", +"bf7bab73": "locked(address,uint256)", +"bf7c19dc": "setPercent()", "bf7c734e": "setMinSell(address,uint256)", "bf7c775e": "RESERVED_RESERVE_UNLOCK_AT()", +"bf7cb70b": "removeToken(address[])", +"bf7cd8c7": "TokenExchanged(address,address,uint256,uint256,uint256,address,uint256)", "bf7e214f": "authority()", +"bf7e2762": "xfFlushUNI()", "bf7e4026": "pizza_machine(uint256,uint256,uint256)", "bf7e7f62": "MaxCouponsPaymentUSD()", "bf7ea21c": "addWhitelistMember(address[],uint256[])", "bf7f10fe": "isTransferShipment()", +"bf7f23e3": "pAddrxName(bytes32)", "bf7f3cfe": "getVotesPerProposal()", "bf7f8b89": "EthernetCash()", "bf7ff81e": "bitwordsWithdrawlAddress()", +"bf80ff1a": "approve_560(address,uint256)", +"bf81473f": "snaps(uint256)", "bf815059": "updateUnidentifiedSaleLimit(uint256)", "bf81765c": "adminAddressForComissions()", +"bf81bf43": "expire(uint256)", +"bf823571": "getNirvana(uint256)", +"bf832a35": "campaignsStartedByUser(address,uint256)", "bf83735c": "changelp19(address)", +"bf838799": "releaseBySignature(address,uint256[],uint256[],address,bytes32,bytes)", "bf83f2a2": "setAllocator(address)", "bf843aed": "BuckyCoin()", +"bf848a91": "thugs()", "bf8554ff": "fireOnOfferingChanged(uint256,bytes32,uint256[])", +"bf856895": "lastUpdatedTime()", +"bf85790e": "setTokenURI(uint16,string)", +"bf8579c5": "defineToken(address,address)", +"bf859290": "USDTaddress()", "bf85cc27": "settleCfd(uint128)", "bf85e628": "startVesting(uint256,uint256)", "bf86d690": "isShutdown()", "bf86e013": "createPromoBot(uint256,address)", +"bf871b78": "getBotSellBlocked()", "bf872aee": "revokeConfirmation(uint256,bytes)", "bf8783e0": "callAndGetReturn(address,bytes,uint256)", +"bf879b5e": "_newAgreementAction(uint256,bytes,address,uint64)", +"bf884cbf": "_encode_sol_uint256(uint256,uint256,bytes)", "bf884cf5": "exitThisIcoForHalfOfTokenPrice()", "bf8853c6": "getUserInterest(address)", "bf8869b5": "GetBal()", @@ -109651,9 +200622,12 @@ "bf892eaa": "removeTrustedContract(address)", "bf89662d": "refundable()", "bf8981c0": "left36(uint256)", +"bf8a8b21": "getBalanceInfoFlat(address,address,address,bytes32,address,address)", "bf8af541": "setLockRatio(uint256,uint256)", +"bf8af9e0": "pendingVault(uint256,address)", "bf8b6466": "anOfferWeCantRefuse()", "bf8b7ec2": "OpenGift()", +"bf8b98ba": "tradingHalted()", "bf8ba305": "getCodeStorage(uint256)", "bf8bcee4": "setMaxLimit(uint256)", "bf8bdac1": "setService(address)", @@ -109661,12 +200635,14 @@ "bf8c50ff": "scheduleTransaction()", "bf8c6b63": "is_diagonal(int8)", "bf8ce97f": "_take0xTrade(address,uint256,address[5][],uint256[6][],bytes)", +"bf8cf62d": "setTokenDistributor(uint8,address)", "bf8d5df8": "setTickerSymbol(string)", "bf8dde4d": "calculatedReward()", "bf8e0ea4": "logGive(address,string)", "bf8eae55": "ChangeGasReuired(uint256)", "bf8ecf9c": "authProposals()", "bf8edd85": "setPriceInEth(uint256,uint256)", +"bf8ef0b2": "interestBearingPeriod(uint256)", "bf8f09cb": "cancelOrder(address,uint32)", "bf8faa9c": "AMLToken(string,string,uint256,uint256,bool)", "bf8fc670": "sendToAggregation(uint256)", @@ -109674,60 +200650,117 @@ "bf907def": "buyGold(bytes32,string,string,string,string,string)", "bf90c4e7": "PYRToEth()", "bf913c5e": "getFamedStarByMass(uint256)", +"bf917427": "_assertValidProtocolFee(uint256)", "bf91cbb5": "mineIsBigger()", "bf91ef18": "mergeBoostData(uint256)", "bf9222d0": "DNT()", +"bf922fe2": "validGeohashChars12(bytes12)", +"bf92857c": "getUserAccountData(address)", +"bf930545": "distance(uint256)", +"bf9321fc": "getRewardAddress()", +"bf93516c": "ZapOutWithPermit(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bf938897": "setTaxRate(uint256,uint256,uint256)", "bf93a8be": "changeOwnership(address,address)", +"bf93f83a": "searchDidDoc(string)", "bf947852": "blockInvestor(address)", +"bf9497bc": "callOtherContract()", +"bf94c0ba": "setBuyBackRate1(uint256)", "bf94de12": "createPoll(address,bytes32,uint256)", +"bf94f8ee": "reload(uint256)", "bf955038": "Judgement(uint256,uint256,uint256)", +"bf9569f3": "poolLP()", "bf962302": "addIntTag(bytes32,int32)", "bf96ae63": "signUp()", "bf981995": "getCountryInfo(uint256)", "bf983772": "BaseExchangeRateChanged(uint256)", +"bf988a3f": "getTwoStrings()", "bf98976e": "test_curatorDoesVeto()", "bf989b6e": "setContracts(address,address,address,address)", "bf98a50d": "GasReceipt(address)", +"bf98f1ee": "liquidityProviderAddress()", "bf99669d": "DevPromotionsMarketingSupply()", "bf99cce1": "buyTokens(address,uint256,bytes32[])", +"bf9a3a1b": "getUpdatedPoolCounters(address,address)", +"bf9a4b86": "enabled(uint256,uint256)", "bf9a5fde": "setConfiguration(uint256[],uint256[])", "bf9a6958": "createVoterOnElection(uint256,address,address,string,string,string)", "bf9ab00c": "getTeamPerfit(uint256)", +"bf9b6dc5": "mintStatus(uint8,uint256)", "bf9b8b38": "CrypviserToken(address)", "bf9bbe71": "TRE()", +"bf9bd6cb": "callnotchecked(address)", "bf9befb1": "totalStakes()", +"bf9c00d5": "buyBackRateRake()", "bf9c0d44": "RandomLedgerService()", "bf9c3949": "createFaucet()", "bf9c5001": "authors(address)", +"bf9c9561": "depositAny(uint256[],uint256[])", +"bf9ca02d": "prepareForgeBasset(address,uint256,bool)", +"bf9ce952": "product()", "bf9d3d39": "setLineUpEnable(uint256)", +"bf9d4075": "setNcard(uint256)", +"bf9e3ed7": "setReclaim(uint256)", "bf9e6b0e": "TokenSwap(address,uint256)", "bf9e7b75": "DeliveredBTC(address,uint256)", +"bf9e8515": "approve_6(address,uint256)", +"bf9ec5fa": "bonusTiers(uint256)", +"bf9ef865": "frozenAccounts(uint256)", "bf9f01f8": "buyMasterNodes(uint256,uint256)", +"bf9f50fc": "buy(address[],bool)", "bf9fc4e2": "balanceOfRobots(address)", +"bf9fe138": "initialize(address,uint256,uint256,uint256,address,address)", +"bfa005ce": "updateRates(bytes32[],uint256[],uint256)", +"bfa09b7b": "NewSender(address,address)", +"bfa0a0c0": "massage2(string,uint32,uint256,string)", "bfa0b133": "salt()", "bfa0fc93": "getVoteResult(uint256)", "bfa190f3": "mTransfer(address,address,uint256)", "bfa1bd62": "stakeAirdropWhileLocked(address,address,uint256,bytes)", +"bfa26380": "onRefferalUse(address,uint8,uint256,address,uint256)", +"bfa2c1d2": "drainToken(address,address,uint256)", +"bfa2ea51": "setL1MessengerAddress(address)", +"bfa3b99d": "setredeliveryRate(uint256)", "bfa3c1e6": "MySale(uint256,uint256,uint256,uint256,uint256,uint256,address,bytes32,address,uint256)", "bfa51df9": "isAirdropped(address)", +"bfa52b12": "submitCAVote(uint256,int8)", "bfa535c7": "apply(string,uint256)", "bfa54b3f": "BLB()", "bfa5f1f7": "getLandmark(uint256)", +"bfa65d17": "ycrvVault()", +"bfa6a830": "UpgradeHasBegun()", +"bfa6fddb": "lockSeconds()", +"bfa73f36": "_UniLP()", +"bfa7e5a2": "updateStakingTokenAddress(address)", +"bfa7f4c7": "sar_large(uint256)", +"bfa7f699": "openExchangeFee()", "bfa814b5": "func()", "bfa87e80": "tellPreviousContract(address)", +"bfa88455": "batchTransferLowerFailed(uint256,bytes)", "bfa8ad36": "createProof(bytes32,bytes32)", "bfaa1763": "FATA()", "bfaad84b": "getLastStarOfAssetId(uint32)", +"bfaae017": "userX3Site(address,uint8)", +"bfab2f8a": "setTokenParents(address,address[])", "bfab3db9": "withdrawContractBalance()", "bfab41c9": "getTargetBlock()", "bfab4f8b": "isMonsterAuction()", "bfabd754": "increaseFrozen(address,uint256)", "bfabe6c4": "ShakaliosToken()", "bfac0046": "getPlayerWallet(uint256)", +"bfac716a": "systemLevNum(uint256)", +"bfaca987": "safeRemoveAtIndex(uint256)", +"bfacad84": "getReserveUtilizationRate(address)", +"bfacae6e": "partnerIssue(address)", +"bfacba3d": "getMarketData(uint256)", "bfad16f4": "new_offer(uint256,uint256)", +"bfad226a": "viewReward(address,uint256)", +"bfad7f68": "getLpTokenWorth(uint256)", +"bfadd1b7": "YADD()", "bfae2f0e": "addrAdmin()", "bfae8867": "getLockTimestamp(string)", "bfaec04e": "publish(string,bytes32)", +"bfaed58a": "collectMedals(address)", +"bfaf3eec": "getCurrentReward(bytes32,address,uint256)", "bfafa8e6": "auditText(uint8,string)", "bfafb91c": "changeMaxCoefPlayerForEmission(uint256)", "bfafe92f": "_buyCallToOpen(uint256,uint256,uint256,uint256,address)", @@ -109736,16 +200769,33 @@ "bfb05e0b": "declineFightApproval(uint256)", "bfb08b4f": "MayanToken()", "bfb0d82e": "__callback(bytes32,address[])", +"bfb17ceb": "getSaleParams(address)", +"bfb18f29": "withdrawExchangeRate()", "bfb1fcf5": "dmlwallet()", +"bfb231d2": "items(uint256)", +"bfb2460c": "getEstimatedForETH(uint256)", +"bfb2599f": "setNewTesta(address)", "bfb2fad7": "totalDepositTokenAll()", +"bfb30921": "totalIssuedTokens()", +"bfb34983": "setMyCustomeHandler(address)", +"bfb39cc8": "tokensWithoutFee(address)", +"bfb3b868": "equip(uint256,uint256,uint256,string,uint8,bytes32,bytes32)", +"bfb3d6c8": "timeSwappersNRT()", +"bfb3eb7b": "_removeStaker(address)", "bfb42682": "addPresaleOrder(address,uint256)", "bfb460e9": "receiverSetAmountRequired(uint256)", "bfb47e72": "CryptoSurprise()", "bfb4d66f": "SudjuKoin()", "bfb4ebcf": "Foo()", "bfb51ac9": "startGame(uint256,bytes32)", +"bfb56d62": "setExperience(address,uint256)", +"bfb59242": "anyCall(uint256[],address[],bytes[])", +"bfb5ae20": "getNoOfDays(address)", +"bfb5ef77": "FSDv2()", "bfb65777": "allContacts(address)", "bfb68141": "disableTokensTransfer()", +"bfb6bd1f": "getProperty(address,uint256)", +"bfb6f943": "getNumElections()", "bfb77030": "BRM()", "bfb7896d": "OQToken()", "bfb790b4": "weeklyRate(uint256)", @@ -109755,380 +200805,717 @@ "bfb8a319": "withdrawal(bytes32,address)", "bfb8c63e": "confirmDeal(bytes16)", "bfb909ce": "applyFeeToAddress(address,address)", +"bfb96279": "signerNonceStatus(address,uint256)", +"bfb9d2a7": "EnactLaw(uint256)", "bfb9f088": "addInvestorList(address[])", +"bfb9ffac": "supportedAssets(string)", +"bfba0181": "executeOrder(address,uint256,bytes,bytes,uint256)", "bfba1e8d": "gamePlayed()", +"bfba31d4": "WithdrawSuccessful(bytes32)", +"bfba5705": "UserSignUp(string,address)", "bfba5dd6": "equal(address,address,string)", "bfba9029": "hashBetMax()", "bfbaa54d": "MithrilMace()", "bfbad8b9": "preSaleEtherRaised()", +"bfbb3767": "DGDsDroped(uint256,uint256)", "bfbb6a23": "winEth(address,uint256)", +"bfbba399": "doAirDrop()", "bfbbd489": "setMonsterAuctionAddress(address)", +"bfbbd53f": "getFairLaunchAddr()", "bfbbfb1d": "getWinNumberBySlot(uint256,uint256)", "bfbc37f7": "KOSHER()", "bfbc793c": "computeNameFuzzyHash(string)", +"bfbc8a1a": "MAX(uint256)", "bfbc944c": "oldTokenReward()", "bfbccfae": "currentCoinsCreated18Decimals()", "bfbcf293": "setChampEC(address,address)", +"bfbcff1a": "getRequestInfo(bytes32,uint256)", "bfbd5074": "getVillain(uint256)", +"bfbe346a": "multisendETH(address[],uint256[])", +"bfbe6afa": "packsRedeemed()", +"bfbe8e99": "breedingDelay()", +"bfbea889": "runnerLength()", +"bfbf57db": "safeFund()", "bfbf95cf": "participateICO(address,uint256)", "bfbfa8e4": "kBalance()", "bfc0a342": "owner_loadFunds()", "bfc0cc5c": "sendEcosysSupplyToken(address,uint256)", +"bfc0db87": "RewardsOwed()", "bfc0e849": "startNextEra(bytes32,uint256,int256)", +"bfc10279": "depositAndLock(uint256,uint256)", +"bfc11ffd": "buyOusdWithUsdc(uint256)", +"bfc12c05": "deploymentTimestamp()", +"bfc15d19": "kek(address)", +"bfc19948": "view_int256()", "bfc1f48c": "isCapFree(address)", +"bfc206ed": "idToOwner(uint256)", "bfc2a675": "CreateCredo(address,uint256)", "bfc2aa2a": "claimedSupply()", +"bfc2b3d0": "transfiraposAprovado(address,address,uint256)", "bfc303fa": "updatePublicData(uint256,string)", +"bfc36172": "ratioGoodAfter(uint8,address)", "bfc38592": "cancelItemSale(uint256)", +"bfc38c3a": "getEthUsdcRate()", "bfc3aef0": "setActiveStar(uint256)", "bfc3cd2f": "testFailChargeMoreThanApproved()", "bfc3d84b": "CT()", +"bfc404bd": "destroycontract()", "bfc47aa0": "tokensCrowdsale()", +"bfc4b8a7": "dmc()", "bfc4d11c": "subJobSponsorshipsBalance(address,uint256,uint256)", +"bfc4fce2": "Birth(uint256,string,address,bool)", "bfc54822": "bet(uint256,uint256,uint256)", "bfc5624a": "newBadAPM(bytes32,bytes32,address,bool)", +"bfc600c8": "minimumTokensHolder()", "bfc6cdd1": "DukevsKansas()", "bfc708a0": "reportMalicious(address)", "bfc7952f": "outstandingPayouts()", +"bfc7b47e": "OnUnpause()", +"bfc810b6": "changeFeeManager(address)", "bfc83af4": "setBountyTokenWallet(address)", "bfc84528": "juicyBonus()", +"bfc8483f": "addFeeAmount(uint256,uint256,uint256)", +"bfc87a46": "requestRewards(address,uint256)", +"bfc8b208": "interestsPerBlock()", "bfc8bfce": "executeTransaction(uint256,address,bytes,bytes)", "bfc99f5b": "unsafeWriteAddress(uint256,address)", +"bfc9b0c9": "leaveMonthlyStake()", "bfca33f7": "Court(address[],uint256[])", +"bfcaaeec": "input(uint256,uint256[])", "bfcabcbf": "changeFeeAmountThreshold(uint256)", "bfcae563": "dateSaleEnded()", +"bfcb344d": "convertLSUni(uint256,address,uint256,uint256)", +"bfcb7040": "getUserSettlements(address)", +"bfcb9079": "pauseUser(address)", +"bfcbc02f": "ORACLIZE_QUERY_MAXTIME()", +"bfcbd6f9": "muld(uint256,uint256,uint8)", +"bfcbdd47": "getTotalReferReward(address)", "bfcc4ab2": "change_time_stamp(uint256,uint256)", "bfcc8b6d": "ownerOfPlayer(uint256)", +"bfcc8e42": "pairObservations(address,uint256)", "bfcdbae9": "preICOStartTime()", "bfcdca48": "CastVote(bool)", "bfce0b7f": "mainSaleEtherCap()", "bfce477f": "forwardTransaction(uint256,bytes)", +"bfce5cf6": "SetHouseDetails(address,uint256,string,uint64,uint8,string,string,string,string)", +"bfce88d3": "EthCapMin()", "bfce8cbf": "redeemAdoptedAxies(address,uint256,uint256,uint256)", +"bfcece9f": "startTraining(uint64,uint8,uint8,uint8,uint8)", "bfcf04cf": "updateId()", "bfcf0baf": "testSliceToString()", +"bfcf4267": "moveIn()", +"bfcf5690": "_isBalanceIncreaseAllowed(address,uint256)", "bfcf63b0": "claimEther(address,uint256)", "bfcf73e7": "blocksToLive()", +"bfd05aaa": "lpBoostMaxRatioByToken(address)", "bfd07c38": "LowJackpotHolder()", "bfd0a553": "specWallet()", "bfd1084f": "BitNauticWhitelist(uint256)", +"bfd131f1": "withdrawAllToVault()", "bfd13217": "ethReceivedPresaleOne()", "bfd17831": "RECEIVER_ADDRESS()", "bfd201f5": "setTransferFees(uint256,uint256,uint256)", "bfd2385e": "allowanceOf(address)", "bfd24821": "BonusCrowdsale(uint256,uint256)", +"bfd2af78": "wayfarersTaxesLastClaimed()", "bfd2ed01": "bountyPercent()", +"bfd31c19": "getAscendingWizardId()", "bfd3c5fa": "refundTransactionAfterExpiry(uint256)", +"bfd3dc93": "REFERRAL_PERCENT_PER_LEVEL(uint256)", "bfd3fa6a": "becomeFairymaster()", "bfd431d1": "RefundToBuyers()", +"bfd45332": "getNextUnlockAmount(address)", "bfd45540": "BlocHipo()", +"bfd4b51a": "newPaymentAddress(address,address)", "bfd4d720": "investors_number(uint256)", "bfd4dce9": "WhatIsTheBestFoodInTheWorld()", +"bfd508b6": "FreezeAcc(address,bool)", "bfd525b3": "stopTimeLength()", +"bfd58158": "executeFlashLoanArb(address,uint256,uint256,uint256,uint256,bool[],bool)", "bfd61504": "_addControllerByPartition(bytes32,address)", +"bfd67d8b": "test4(uint256)", +"bfd6d22d": "upgradeShip(uint256,uint256[5])", "bfd6ef3e": "explore(uint256,uint256,uint256)", +"bfd72fd8": "getTypesByName(string)", "bfd74534": "getRequest(address,address)", "bfd7534f": "developer_address_for_D(address)", "bfd75da4": "TrueUSD()", +"bfd772fc": "receivers(uint256)", +"bfd79284": "bots(address)", +"bfd7c92d": "rewardData(address,address)", +"bfd7ffe7": "sendVaultBalance(uint256,address)", "bfd812ec": "suspend(bool)", "bfd8222a": "checkReward(uint256,uint256)", "bfd8300d": "setBonusInterval(uint256)", "bfd85808": "frozenTokens(address)", "bfd8a06e": "getFinalWinningReportingToken()", +"bfd8f56a": "getVerifierRegistry()", "bfd8fc93": "getOwnersLength(bytes32)", +"bfd9041b": "LP_TOKEN()", "bfd90435": "addDataset(address,address)", "bfd94c8c": "transferIsAllowed(address)", +"bfd96913": "eventUser(uint256)", +"bfd96d87": "updateMaximumStake(address,uint256,uint256,uint256)", "bfd9726d": "getMntTokenBalance(address)", "bfda3b1a": "setSharedStorage(address)", +"bfda4a49": "roles(uint256)", +"bfda8e8a": "getPastRounds(uint256)", "bfdad9a4": "SignedContractVault(string)", "bfdadc19": "change_price(uint256)", +"bfdb0ccc": "getLatestJpyUsdPrice()", "bfdb8796": "getPoolNameByID(uint256)", +"bfdb8a4a": "ufOn()", +"bfdbc680": "getOneBet(uint256,uint256)", +"bfdbfc43": "getBestPoolsWithLimit(address,address,uint256)", "bfdc35f2": "onBalance()", +"bfdc4a61": "events(bytes32)", "bfdcc9a2": "numBuckets()", "bfdcd480": "test_invalidProposalDuration()", "bfdcdbf5": "subkey(address,uint256)", "bfdd1a20": "getPOOL_edit_17()", +"bfdd2184": "feeStartTimestamp()", +"bfdddee8": "getContractBaseToken(bytes32)", "bfde4f62": "withdrawAllEthToOwner()", +"bfdec393": "RemoveLiquidity2PairToken(address,uint256)", "bfdecf8c": "purchaseTokenInPresale()", "bfdeddaa": "AllowedContributionCheck(uint256,uint8)", +"bfdf0866": "tailNode()", +"bfdf2c7f": "getTraderPayout(address,uint16[])", "bfdf5e80": "communityPot_()", +"bfdf7815": "MineUpdated(uint256,string,uint256,bool)", +"bfe07da6": "deposit(address,uint256,string)", "bfe0c27e": "getCurrencyAddress()", "bfe10928": "distributor()", "bfe1292a": "distributeLenderBot(address[],uint256,uint256)", +"bfe142a3": "AAVE_LENDING_POOL_ADDRESSES()", +"bfe1501e": "limitedBlockHeight()", +"bfe17c4d": "_passMessage(address,address,bytes,uint256,bytes32,uint256)", +"bfe19226": "scheme(uint256,uint256,uint256,uint256,uint256[],uint256)", +"bfe19957": "disputeResolutionAgreementSignaturesByNumber(uint256)", +"bfe23924": "getterInvestor4(address)", "bfe36f58": "HashCoinToken()", "bfe370d9": "bytesToBytes32(bytes)", +"bfe37343": "gameOverEvent(uint32,uint32,uint256,uint8,address,uint256)", +"bfe3897f": "addPETH(address)", "bfe38df5": "getTotalBet()", +"bfe3a478": "SWAP_DISABLED_AFTER()", "bfe3a664": "createCrowdsale(address,uint256[8])", "bfe3c39d": "JYKToken()", "bfe3e03a": "midGradeHold()", "bfe44c4b": "getUserValue(bytes20,uint256)", "bfe484de": "judge(uint256,bool,bytes32)", +"bfe4c2a5": "upDateProduct(uint256,string,address,uint256[],uint256[])", +"bfe4c3a3": "initialSupplyRemaining()", "bfe4ed8e": "Razoom(address)", +"bfe51c10": "authorizeSigner(address)", "bfe53e5c": "holdersWithdrowsOf(address)", "bfe597fe": "genesisBlockCount()", +"bfe5d9c5": "withdrawFees(bytes,address)", +"bfe5f50a": "benefactorCredit(address)", +"bfe611b0": "ETHReceived(address,uint256)", +"bfe62eab": "cashiers(uint256)", +"bfe66a2c": "_allTargetsMet()", "bfe689cf": "lockedValuesAndTime(address,uint256,uint256,uint256)", +"bfe6961d": "getNextReleaseTime(uint256)", "bfe6b1ac": "acceptOffer(uint16,uint256)", "bfe6c0c7": "viewa1(address)", +"bfe6cc88": "RefundEther(address,uint256,uint256)", "bfe70251": "_checkCertificate(bytes,uint256,bytes4)", "bfe713e3": "truecoin()", "bfe777c3": "addPrMemberById(uint256,address,address)", "bfe7e2eb": "BCBCYCoin()", "bfe86bbe": "publicGetElement(uint256,uint256,uint256)", +"bfe8707a": "listTime()", "bfe8936c": "getAssetDetailsURI(uint256)", "bfe8c107": "betOnDozen(bool,bool,bool)", +"bfe94e4a": "getTeamHaveOfMember()", +"bfe976a9": "lastFullPaymentBlock()", "bfe9b7df": "pubkeys1()", "bfe9e7f4": "pack(address,bytes)", "bfe9f204": "dividendCycleTime()", "bfea267a": "getBalanceToMint(address)", +"bfea4ae0": "TokensMarked(address,uint256)", "bfea8790": "enableScheduler()", "bfead4b9": "maxWithoutWhitelistPerUser()", +"bfeaedc3": "cancelReselling(address)", "bfeb049c": "IndexOfCurrentDraw()", +"bfeb0ea8": "totalMintedByBattleForTokenID(uint256)", "bfebb947": "unblacklist(bytes32)", +"bfec203a": "Distribution(address,address,address,uint256)", +"bfec3bdf": "zbtcfo()", "bfec83d6": "RoleAdded(address,string)", "bfec8b01": "insertSection(bytes32)", +"bfed5a9c": "genesisDollarAmount()", +"bfed7504": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],address)", +"bfed774a": "requestEthOraclePriceFulfillment()", +"bfed8903": "wnrzPerBlock()", +"bfed95b8": "getBasicMarketDetails()", +"bfedc103": "setLendingPoolDataProviderImpl(address)", +"bfedf238": "testCalculateInterestIndex_SmallInterest()", "bfee3569": "setTokenControlInfo(address,uint256,uint256,uint256)", +"bfef215f": "upbaseTimestamp()", +"bfef7bdf": "removeMarkets(address[])", "bfef9627": "set(bytes4,uint8,uint8)", +"bfefa76d": "OfferFinalized(address,uint256,uint256,bytes32)", +"bfefafd4": "volatileStorageSender()", +"bff02e20": "getValidators(uint256,uint256)", "bff04d6f": "testPostpone()", "bff05aef": "adminRefundTokens(address,uint256,uint256)", +"bff0a8cb": "endRatio()", "bff0fbb8": "calculateMeat(uint256)", "bff10815": "deleteOffer(uint16)", +"bff12c9f": "icoLDF()", +"bff13785": "boardMembers(address)", "bff179c4": "setJadeCoinZero(address)", +"bff18be9": "Melt(uint256,uint256)", "bff18c78": "deployFactory()", +"bff1b186": "approve_581(address,uint256)", "bff1f9e1": "totalUsers()", "bff2c413": "ChangeFoundersWalletAddress(uint256,address)", +"bff2d134": "tradeTokenForTokenWithFeeOnTransferSpecifyingFee(address,address,uint256,uint256,uint256,uint256,uint256,bool)", +"bff2fc2b": "minSakeAmt()", "bff35618": "setTransferLock(bool)", +"bff3a9f8": "userMint(uint256,address)", +"bff3d718": "tvl(address,uint256)", "bff41e36": "WEI_RAISED_CAP()", "bff44f0d": "confirmAddressChange(address,address)", "bff49180": "updateVendorValid(uint256,bool)", +"bff4fdfc": "canBurnSynths(address)", "bff547c0": "setOrganizationShareSymbol(string)", +"bff57555": "makePayments()", "bff5e021": "PumpToken()", "bff5fb64": "appNickname()", "bff5fccd": "myWishes()", "bff65668": "isPresaleHolder(address)", +"bff72b40": "hope(address,uint256)", "bff7df7c": "refundDeadLine()", "bff7e179": "multiPurchase(uint32[],uint8[],uint8[],uint8[],string)", "bff8314f": "SetMaxPosXblock(uint256)", +"bff852fa": "class()", "bff8a36d": "decreaseReserve(uint256)", +"bff9662a": "connectorAddress()", "bff974e8": "getContentReplies(uint256)", +"bff97d05": "_getCurrentSettingWithId()", "bff99c6c": "tokenWallet()", +"bff99d23": "getPoolInfoList(uint256)", "bff9e842": "getSamplesForOwner(address)", "bffa02d5": "sendP3D(address,uint256)", "bffa4e41": "getMintAmountApproval(address,address)", "bffa55d5": "claimRefund(address)", "bffa9258": "assetCount(address)", "bffb10de": "add_creature(address,string)", +"bffb6063": "putsSold(bytes32,address)", +"bffb691d": "blacklistEnabled()", "bffbe61c": "node(address)", "bffc235a": "mintedList(uint256)", +"bffc243d": "updateArbitrator(address)", +"bffcb408": "accTokenPerShareMultiple()", +"bffcc6e8": "userOnPoolsLength(uint256)", "bffcd758": "nasdaqo(uint256,string,string)", +"bffd3b17": "govChangeMaxvSPYE18(uint256)", +"bffd659c": "safe_investment()", "bffd952a": "transferMaintainer(address)", "bffdf3f1": "Test4()", "bffeadd6": "move(uint8,uint256,bytes,uint8,bytes32,bytes32)", +"bffec1a2": "voterServiceEntities(address,address,uint256)", +"bffee17b": "FastQuantDef()", "bffee609": "setSkills(address,uint256,uint256,uint256)", "bfff23f2": "CaptainKitty()", "bfff374d": "DepositReturned(uint256,address)", "bfffe670": "window1StartTime()", "c00007b0": "getReward(address)", "c0001786": "ownerBurn(address,uint256)", +"c0004213": "getTicker()", +"c0005827": "getTypeOffset()", +"c000a702": "solve(bytes)", "c0012077": "TeamContract()", +"c001472e": "depositAndStake(uint256,address[],uint256[])", "c002c4d6": "getTicket()", +"c0030032": "ballotCount()", +"c0034e0c": "REWARDS()", "c003598a": "XEN()", "c0036137": "ownerProfitPercent()", +"c0039699": "getBalancerToken()", "c003b082": "getMyPlayerID()", "c003f540": "sco(uint256,address,uint256)", "c00465ab": "CrowdsaleToken(uint256,uint8,address,bool,address)", +"c0046e39": "derivatives(uint256)", "c004a877": "shiftSalePurchase()", "c0056b7b": "updateAccount(uint8,bytes32,bool,bytes32)", "c005c686": "validateCompoundContract(uint256)", "c005dc7b": "hon2backup()", +"c0063363": "deploy002(uint256)", +"c0063993": "testMsgTokenValue()", +"c006719f": "totalScore()", +"c006a469": "tops()", +"c006a516": "OpenCarousel(uint256,uint256,uint256,uint256)", +"c006dec3": "getVotesCount(string,string)", "c00710fa": "userContractsPred(address,uint256[],uint256[],uint256)", +"c007175f": "changeContractStatus(address)", +"c0075662": "awardFromMany(uint256[],address,uint256[],uint256[],bytes,uint256[])", "c0075772": "setPromoTokenController(address)", +"c00824b1": "postIcoHold(address,uint256,uint256)", "c0086b19": "BCP(uint256,string,uint8,string)", +"c008bc84": "Aborted(uint8)", +"c0091415": "get_my_player_num()", "c00941d9": "Dominator()", +"c0098242": "buyT()", +"c009b1ed": "getLastEscrowPosition()", "c009b451": "setEventActive(bool,string)", "c00ab18c": "_toSgaAmount(uint256)", +"c00ac304": "AIRDROPS_POOL()", "c00ade41": "receiveTransferOwnership()", "c00b060c": "getArrBoolField3()", +"c00b3d3e": "getProtocolAddr(uint8)", +"c00bb4b2": "transferTokens(address,string,uint256)", +"c00c125c": "updateUserWithdrawFee(address,uint256)", "c00c176c": "GoGO()", "c00c2ceb": "isRedeemAllowed()", "c00c4e9e": "batch(address[],uint256[])", "c00ca383": "getByOwner(address,uint256)", "c00d5305": "oraclize_setNetwork()", +"c00d752c": "onAllowance(address,address)", "c00d8f3d": "processLotteryReward()", "c00daefe": "etherFund(bytes32,string)", "c00e4306": "getCurrentTokenAmountForOneEth()", "c00ea6ef": "Polaris()", +"c00f742c": "estimateDividendsOf(address)", +"c010b3d6": "seasonName()", "c0112678": "arcToken()", "c0116c3c": "doAirdrop(address[],uint256[])", "c011cd1c": "getClixToken()", +"c011ea8b": "lastChipTime(address)", +"c0125453": "approve_900(address,uint256)", +"c0129d43": "gm()", "c012e179": "mintDepositAccount()", "c0130adb": "addadjacencies(uint16[],uint16[],uint16[])", +"c0131476": "initiateFlashloan(address,address,uint256,uint8)", +"c0132fdb": "unlockLPPartial(uint256)", +"c013c2c5": "getUserStakesByAddress(address)", +"c013f30f": "freezeMinting()", "c0140fd1": "bid(bytes32,address,uint256)", "c014464e": "checkFeePeriodRollover()", "c014875f": "mint(bytes32,address,uint256,bytes)", +"c0148b1f": "bootstrapDollarPrice()", +"c014a320": "claimRewardOnly()", +"c014ce86": "MintToken(address,address,bytes32,uint256)", +"c014fb84": "expireMarkets(address[])", "c01569f9": "buyPiece()", +"c01595d1": "addFPGA(string,string,uint256,uint256,string,string,address)", +"c0159e5a": "most_recent_random()", +"c015faf9": "_update(address,address)", "c01685d4": "FTKTToken()", "c01706dd": "getContentByRank(address,uint256,uint256)", "c0171112": "timestamp(uint64)", +"c0182a43": "finishChangeTradeWaitTime()", +"c01830a1": "totalMintAfterInitial()", +"c0183eb9": "is_successful()", +"c0187f7b": "operatorFinalize(bool)", "c018d0e6": "getFeeAmount(int256,int256)", +"c018f413": "addLimitOrder(bool,address,uint64,uint32,uint32,uint72)", +"c018f579": "tokenFromMagnetion(uint256)", "c018fe0d": "sub_sessione(string,uint256)", +"c0191114": "checkPid(address)", +"c01928c1": "isCarFinished(uint256,address)", +"c0199598": "stakedToken(uint256,address)", +"c019f0e0": "tradeMiningSpeedUpEndBlock()", "c01a1c5f": "totalSellPrice(uint256,uint256)", +"c01a3cd2": "makerFunds(address,address)", "c01a8c84": "confirmTransaction(uint256)", "c01ae5d3": "drop(address[],uint256[])", +"c01af79f": "pageEtherSum(uint256)", +"c01b308a": "GUMAS()", "c01b3aa4": "STARTING_SNAKE()", "c01bc982": "isRestricted(address)", +"c01bdf04": "claimReserveRebate(address)", +"c01be858": "simulateSwap(uint256,address,address,address)", "c01c1ca3": "claimRemaining()", +"c01c5f97": "rewardInterest(address)", +"c01c7061": "setSchainIndex(bytes32,address)", "c01ca43f": "getPlayerState(address)", +"c01cf093": "doStep(uint256)", "c01d1c60": "getTokenExchangeRate()", "c01d8280": "get_balance(address,string)", "c01de45c": "storeBet(uint256,uint256,uint256)", "c01e38e6": "addPlayer(address,uint256,uint256)", "c01e3985": "StupidityToken()", "c01e8b6a": "Zigit()", +"c01f3a57": "burnMiniLimit()", "c01f475f": "_setClearingPrice(bytes32,uint256)", +"c01f5431": "WithdrawalAvailable(address,uint256)", "c01f56d0": "OfferToDisciple(uint256,uint256)", "c01f9e37": "proposalDeadline(uint256)", +"c0200c4e": "handleFill(uint256,uint256,uint256)", "c0204bab": "EasyOsmiumCrowdsale()", "c020df48": "updateGas(uint256)", +"c02124c6": "WhitelistRemove(address)", +"c021e13a": "batch(uint256,uint256,address)", "c022215c": "getTotalDeposit()", +"c0224edf": "batchRelease(address[],address)", "c0227bd3": "_toTaxes(uint256)", "c022abbe": "GetAuction(uint32)", +"c022dc62": "hasUserVoted(bytes32)", "c022ef43": "getTimeLeftToNextLocalBountyCollect(uint16)", "c023a231": "BitSTDView(address)", +"c023bdb3": "topVotes()", +"c0249f76": "depositAll0(address)", +"c0250e48": "tradeTokenForTokenSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool)", "c02515a9": "maxTokenForHold()", +"c0257783": "decimalLP()", +"c025aa33": "_AVG_SETTLED_PRICE_()", "c0263163": "ATT(address)", "c026327a": "removeBankToken(uint256)", +"c0270cf2": "add(string,uint64,string)", "c02738da": "generateTargetTokens(address,uint256,uint256)", +"c0281f78": "searchByProductCode(string)", +"c0283f9c": "EthRefunded(string)", +"c0288cf9": "lockDays(address)", "c02898a0": "potatoOwner()", "c028c674": "right82(uint256)", "c028df06": "offer()", "c028e3c9": "cordX(uint256)", "c0297bc8": "DreamX()", +"c029e868": "bucket()", +"c02aa3c4": "ico2StartTime()", "c02aaea1": "totalTokensForSaleDuringPreICO()", "c02b04d8": "rescueLostProperty(uint256,address)", +"c02b0509": "juryVoted(uint256,address)", "c02b5395": "NAMO()", +"c02bd9a5": "sendAllTokens(address)", +"c02be4a6": "OwnertransferAnyERC20Tokens(address,address,uint256)", "c02bf40c": "FundsDeposited(address,uint256,uint256,uint256,uint256)", +"c02c7082": "getTimeStatus()", "c02c89fe": "PreicoClose()", "c02cc957": "firstDigit(string)", "c02d0140": "buyCard(uint8,string,string,string)", "c02d1e02": "a_document(uint256)", +"c02d7b17": "yieldStream(address)", "c02e580e": "roundEnd()", +"c02e5a7f": "enterCatastrophicFailure()", +"c02e7f30": "GetShareIndexDebugForTestRPCShareIndex(uint256)", +"c02e9f31": "echo(int256)", +"c02ef565": "sendFundsToOwner(address)", "c02f081a": "shiftBits(bytes,int256)", "c02fd500": "E4Lava()", +"c0300011": "isCollectionFromFactory(address)", +"c03010ee": "getLatestPrice2()", +"c0304371": "enableHOTMode()", "c0309697": "challengeContract(address)", +"c030bae9": "frsDeposit()", "c030d8b8": "setCardContract(address)", "c030f3e2": "increaseSaleLimit(uint256)", +"c0314701": "startCrowdSaleRoundOne()", "c031a180": "getBytes(bytes32)", +"c031a6aa": "resetDeployedDrakonFor(address)", "c031a78b": "maxMedalsBurned()", "c0324c77": "setParams(uint256,uint256)", "c032846b": "getContractStatus()", "c0329a3e": "startAirdropFrom(address,address[],uint256)", "c032dc30": "execute(uint256,address)", "c0338a0c": "transferTileFromOwner(uint16[],address)", +"c033a490": "refunded(address)", "c0343b09": "setDisputeInterface(address)", +"c03475b0": "setMinUnit(uint256)", +"c034ca6c": "removeWildcard(uint256)", +"c034d0db": "SELF_HAT_ID()", "c035340c": "withdraw_1()", +"c035afa5": "dripAndFile(address,address,address,bytes32,uint256)", "c035e492": "onholdBalances(address)", "c0362523": "setUpgradedOwner(address,address,address)", +"c03646ba": "setWhite(address)", "c036c100": "NextGenHype()", +"c0373e2c": "addBoardOnUser(address)", +"c0377aef": "viewsTypes(uint256)", "c03785c3": "MyRefundVault(address)", "c03795ba": "departmentrequest(address,string,bool)", "c037ae58": "VESTED_AMOUNT_TOTAL()", "c037d9ce": "getElementsFromIndex(uint32,uint32)", +"c037f39c": "applyAddToken(address,address,uint256)", "c038a38e": "totals()", "c038f541": "setProperty(string,string,uint256,int256,string)", "c03951f7": "FaceWalletToken()", "c0395bb5": "isCurrentOrPastAdmin(address)", +"c0396624": "sort(address,address)", +"c0399474": "addNodes(address,bool)", "c039b88c": "_makeSpecialId(address,address,bytes32)", "c039bd87": "withdrawTokenFromPkt(address,uint256)", "c039d6db": "PutEther()", "c039daf6": "tokenCreationMin()", "c03a4018": "getGuessInfo(string)", +"c03aa15a": "MINIMUM_APPLE_PER_BLOCK()", "c03aac7a": "setSellDividendPercentageFee(uint8)", +"c03afb59": "setPhase(uint8)", +"c03b0fcd": "getUserBurnBonusLength(uint256,address)", +"c03b66f6": "_transferBurns()", "c03b70d5": "getTurnover(address)", +"c03b95e3": "VoteSuccessful(address,uint256,uint256)", "c03ba041": "BNC(address)", +"c03bd292": "isCycleFinish()", "c03bdbae": "setRdFee(uint256,uint256)", +"c03bdce4": "setTokenMinHold(uint256)", "c03c3003": "increment(int256)", +"c03c70da": "rootAmount(address)", "c03c72aa": "isBattleDecider()", +"c03cae09": "setDeleverAmtFactorSafe(uint256)", "c03ce1d8": "BondingManager(address)", "c03ce796": "crowdSaleStage()", "c03cf137": "getMyLocker()", "c03d00f3": "a_viewCoinSupplyAndFunding(bool)", +"c03d02ff": "is_duplicate(bytes)", "c03d1b1d": "verifyCertWithID(bytes32,bytes32,bytes32,address)", +"c03d224b": "DivEucl(uint256,uint256)", +"c03d5b47": "stakingPeriod()", "c03d848c": "convertEthToCents(uint256)", +"c03db340": "SCHAIN_CREATOR_ROLE()", +"c03e1581": "userAddress(bytes32)", "c03e2cbf": "Whitelisted(address,bool,uint256,uint256)", "c03e382f": "calculateShare()", +"c03f1634": "WithdrawalPayed(address,uint256)", +"c03f1cd4": "setGoddessFragments(address)", +"c03f2cac": "ethnum()", +"c03f7be3": "refresh_cooldown()", "c040188f": "preSaleLockEndTime()", +"c0403fb1": "createStash(bytes32[],uint256[])", "c0406226": "run()", +"c040725a": "getOptionsPoolAddress()", +"c040d62b": "increaseJackpotTimeAfterBetLevel4()", +"c040dac4": "editIpfs(uint256,string)", "c040e6b8": "stage()", "c040ebec": "getUserSize()", "c04123fb": "checkProposalCode(uint256,address,uint256,uint256,bytes)", +"c041283f": "ocesScalingFactor()", +"c0412860": "setManaBonus(uint256,uint256)", +"c0413fb0": "maxPools()", "c041652d": "getVendorApplicationStatusTrackCount(string)", +"c0419325": "setRequiredLockedForColorRegistration(uint256)", "c04198f3": "getEndDate(string)", +"c0423145": "transferBatch(address,address,uint256[])", "c042575f": "ETHmultiplier()", +"c042c68d": "viewSaleAPE()", +"c043322e": "setCollateralConfig(address,uint256,uint256,uint256,uint256)", "c0435e29": "setDefaultFriendsFingersRate(uint256)", +"c04365a9": "clearCNDAO()", "c043c0d9": "changeMaximumPlayers(uint32)", "c043df8c": "verifyWithdrawSignature(address,bytes)", "c04484fd": "resetInternal(uint256)", +"c0452f0a": "executeOperation(bytes32,address,address,uint256,address,bool,address)", "c045732c": "addPreIcoMembers(address[])", +"c045907d": "_decode_sol_bytes19(uint256,bytes)", "c0459899": "approvePreSigned(address,uint256,uint256,uint256,uint8,bytes)", "c04605b8": "softEndDate()", "c0462ec3": "withdrawAllTokensToExchange(address,address,uint256)", "c0463711": "lastUpdate()", "c0463810": "PalmToken()", "c0465f3a": "dateSisterWins()", +"c0467422": "removePosition(uint256)", "c046c691": "setMoveProductToWhom(address,uint256,address)", "c046d9b5": "borrow(address,uint256,address,bytes)", "c0472889": "currentIDnumber()", "c047c1d8": "transactionsStatusUpdate(bool)", +"c047e6fe": "clientBV(uint256)", +"c0482f13": "queryUserDCPRecordInfo(address)", "c0489af5": "foundersTimelock1()", "c048dfb8": "postpone(uint256)", +"c04944f1": "calculateLock(address,uint256,uint256,uint256)", +"c049604a": "buy(bytes32,address)", "c0496e57": "setNotarisationFee(uint256)", "c049813a": "preIcoStagePeriod(uint256)", +"c04a2bb4": "getDocByHashMappings(string)", "c04a5414": "developmentWallet()", "c04aa9b8": "rpow(uint128,uint64)", +"c04ab144": "UpdateRate(uint256)", +"c04ae37f": "total4TokenDivPoints()", +"c04b8388": "_markNonce(uint256)", "c04bb954": "rejectionRatio()", "c04c5947": "getGames()", "c04c68eb": "changeAllowTransferState()", +"c04c87b8": "veto(bytes32,bytes)", "c04c8e43": "SNSCOIN()", +"c04c8e9a": "setMinYesVotesThreshold(uint256)", "c04ca3f5": "_removeAgent(address)", "c04cc86b": "collecttaxes(uint256)", +"c04cca06": "refundFreezeMax()", "c04d90d0": "ownerByIndex(uint256)", +"c04db401": "priceInTOSHI()", +"c04db90f": "viewUserInfosChildId(uint256,uint256,bool,uint256,uint256)", +"c04dd339": "approve_492(address,uint256)", "c04de318": "slashAddressLikeUsername(string)", +"c04e7e17": "token_foundation_cap()", "c04ecdb8": "promoTokenController()", "c04f01fc": "power(uint256,uint256)", "c04fcad8": "INITIAL_TOTAL_SUPPLY()", "c0506782": "_createArtwork(string,string,uint32,address)", +"c050a7a6": "newPinnedAppInstance(bytes32,address,bytes,bool)", "c050f6dc": "admitUser(address)", "c0517c5a": "XferMoneyMarketing()", "c051f75f": "setSchemaRegistry(address)", +"c05218c6": "getVoteMetadata(uint256)", +"c0523cb3": "initialBounty(address,uint256)", "c05283ff": "logQuery(bytes32,address)", +"c052958c": "startSaleSHD(uint256,uint256,uint256,uint256,uint256)", "c0533b5d": "appVersionList(bytes32,address)", "c05374f7": "AirChn()", "c05390f6": "PRIZE()", "c053dc6b": "EtherBags()", "c053ebf5": "setProviderClosed(uint256,uint256)", +"c053f03d": "newVotingRound()", +"c054a0ac": "GetBALSpotPrice(address,address[])", +"c054d66f": "punchChad(address)", "c054e050": "extractProofOfExclusion(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"c05547c5": "LockLog(address,uint256,uint256)", +"c0560374": "REFERRER()", "c0567656": "subtractFee(uint256)", +"c056fee3": "weeklyNumberStart()", "c0576b73": "monsters(uint256)", +"c057a1c8": "SaleClosedFail(uint256)", "c057b40d": "SpainvsRussia()", "c057eca7": "minStakingTime()", +"c057f95f": "tel()", "c0584e68": "ContributorsSupply()", +"c0585ca5": "inCasedarkStuck()", +"c058c10e": "requestSp500Price(address,string)", +"c0592340": "startOfPayments()", "c0597a55": "freedWosPoolForThirdStage()", "c05a30b9": "_processFunds(uint256,uint256)", +"c05a81f5": "validAddress()", "c05a8e81": "getPosition(uint8[176],uint256)", +"c05af842": "deleteTemplate(string)", +"c05b674a": "getEstimatedInForOut(uint256,address[])", "c05b7cf6": "setCreationProfit(uint256)", "c05b8066": "setCompte_18(string)", +"c05c5e94": "adminContract()", +"c05c66d5": "mintLand(address,bytes8,string,string,string,string)", +"c05cb691": "changeRecpientIsOwner()", "c05ce08f": "calculatePoints(uint256,uint256)", +"c05d005f": "getBlockNumber64Ext()", +"c05d1b65": "terminatorPoolAmount()", "c05d1f0e": "PRESALE_JOINTTOKENS()", +"c05d7565": "drainContract(address,address)", +"c05db43c": "dotxNft()", "c05dd5d2": "MatchAborted(uint256)", +"c05e20f5": "ANNUAL_SECONDS()", +"c05e2486": "setTotalBunny_id(uint256)", "c05e5776": "giveRightToVote(address,address)", "c05f486e": "DEV_SUPPLY()", +"c05f995c": "NewAuthority(address,string)", +"c05fc178": "mapPID_type(uint256)", "c060ac53": "bytes20ToString(bytes20)", "c0615f09": "CPGPEREGRINE_EXTRACTION_BASE()", "c0619c70": "setPrimaryManager(address)", +"c061d8de": "BuildBond(address,uint256)", +"c0624afe": "getVoteForServicesCount()", "c06265d3": "createContractState(string)", +"c0627004": "setTransferEthGasCost(uint256)", +"c06282e1": "initiateClosing(uint256)", +"c062987a": "setPocTokenAddress(address)", +"c0629c59": "DataReceived(bytes)", +"c062c586": "set_test1()", "c062dc5f": "releaseAmount()", "c062ef86": "_random_empty_location()", "c062f578": "updateStage()", "c0631b12": "moneyWallet()", +"c06331dc": "powerOf(bytes32,address)", +"c06352be": "UnLock()", "c0645011": "getPastRound(uint256)", "c06474e0": "removeShare(address,uint256)", "c06508dc": "QBTCoin(address)", @@ -110136,115 +201523,237 @@ "c0659108": "beneficiariesLength()", "c065ecc2": "queryChildLength()", "c065fcf1": "RESERVED_PARTNERS_SIDE()", +"c0660d1d": "pendingAUTO(uint256,address)", +"c0661737": "rebalance(uint256,uint256,uint256,uint256,uint256)", +"c0668179": "exchange_()", +"c0669fb3": "MANA_CURRENCY()", +"c066a5b1": "privileges(address)", "c066bd1a": "addItem(uint256,uint256,address)", "c06702dd": "changeStage()", "c0670d2c": "calculateDistributionPeriods()", "c0675b78": "addBuyTokensRequest(string,uint256)", "c0677fb6": "SetIdentifiedContract(address,address)", +"c067e263": "transferCash(address,uint256)", +"c0680cd3": "getTokenAdapterNames()", +"c06885c3": "viewSaleBADR()", "c0689e2d": "newCrowdFundingCampaign(address,uint256)", "c068eae0": "player_collect_winnings(uint256)", +"c069f435": "addLiquidityTestB2(uint256)", "c06a22f4": "dollarsForEther()", +"c06a260d": "startCampaign(bytes32)", +"c06abfc7": "egg()", "c06b0d21": "BondToken(address,address,address)", "c06b5281": "buyXnameQR(address,bytes32,uint256)", +"c06b6f1d": "finalizeRewardFundInfo(address,uint256)", +"c06b730f": "linkDirectly(bytes32,uint256,uint256)", +"c06c02cd": "private_setHousePercent(uint256)", "c06c4474": "get_burned(bytes32)", "c06c66ca": "bountyFund()", "c06d1272": "startPreIco()", "c06d1490": "oppositeAnnouncement(uint256)", "c06d7744": "getAllSignersCount()", "c06dabf8": "_escrowHostPaymentEarning(address,bytes32,uint256,uint256,address,bool,uint256)", +"c06e2d24": "cancelMintRequest(bytes32)", "c06f146b": "setNumInvalidMarkets(uint256)", "c06f1bc4": "updateVoterTimes(address,uint256)", "c06f4c1d": "newCampaign(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,address)", "c06f8340": "cancelAuctionByAdmin(uint256)", +"c06f8b94": "removeRevoker(address)", "c06fad06": "items()", +"c06fcba0": "stakingInfo(address,uint256)", +"c06fe4ab": "setCapRatio(uint256)", +"c06ff7d9": "plySonBuyFlage(address,address)", "c06fff76": "proposePauseChange(bool)", +"c0702b3a": "consumerBulkBuy(uint256[],address,uint256,address)", "c0702d9c": "_mint()", "c07097a6": "coindropsLockEndingAt()", +"c070f94e": "_PoolAvailable()", +"c0713258": "safeTreeTransfer(address,uint256)", "c0715d1d": "assertSafe(bool)", +"c071b64a": "clearRHINO()", +"c071c12d": "MDOAddress()", "c071f3bf": "deliverPurchasedTokens()", "c072422d": "buyTokens(bytes32,uint256,uint8,bytes32,bytes32)", "c072497a": "claimPlotMultipleWithData(uint256[],uint256,string,string,string,string)", "c072dcf3": "ExampleContract()", +"c072ea43": "consultOneDeposit(uint256,address)", +"c0737bef": "setValidAcoCreator(address,bool)", "c073af55": "GetJackpotMin()", +"c073b81f": "newGT(string,uint256)", "c07401f0": "addToPool()", +"c0740356": "push_product(uint256)", "c0740c16": "numElementsOdd()", "c0741c53": "test_assetRegistration()", "c0743044": "partAllocations(uint256)", "c074313f": "pricePerStake()", "c074a27e": "proposeTransaction(address,uint256,bytes,string)", "c074fe80": "SetPrecioUnidadPase(uint256)", +"c075947d": "STATUS_ONGOING()", "c07653af": "Gavinhereum(uint256,string,string)", +"c076bf9e": "settima(uint256)", "c076c847": "NorthPoleAF()", "c0774df3": "canForward(address,bytes)", "c0777545": "balanceAD()", "c077b0f9": "getARSchedule()", +"c077eb78": "mixers(address)", +"c0784269": "NewAuction(address,uint256,uint256)", +"c07896c8": "userInfo(uint256,uint256,address)", +"c0791710": "openLockGNTAndDraw(address,address,address,address,bytes32,uint256,uint256)", "c079418b": "setTranchWei(uint256[])", +"c0794f55": "SlimStars()", "c0797ae1": "stakerIncomeShare(bytes32)", "c079c318": "adjustFee(uint256)", +"c079ebfc": "safeTransferAsset(uint256[])", "c07a1f0c": "changeHouseFeeAddress(address)", "c07a32c4": "dateIsLegal(uint256)", "c07a5537": "MintableTokenWithMinters()", +"c07aaf0f": "testSend()", +"c07afdf0": "current_profit_p3()", "c07b18ca": "PullPaymentMock()", "c07b2586": "SAFCOIN(uint256,string,uint8,string)", +"c07b3090": "mintToLiquidity(uint256,uint256,uint256,address)", +"c07b528a": "referralEarnings(address)", +"c07bb7b8": "withdrawODai(address,uint256)", "c07bcfdc": "updateLimitPerDay(bytes32,uint256)", +"c07bf52a": "createCard(uint256,uint256,uint256,uint256,uint256)", +"c07c1f21": "blockTimestampFirstCertificateStock(uint256)", +"c07d364d": "govElectionStartTime()", +"c07d3b35": "fixedStakeContract()", +"c07d6fc5": "Creation(address,uint256)", +"c07d7e1b": "totalPatronTokenGenerationRate(address)", "c07dc59c": "withdrawPot(string)", "c07dc890": "selfRegisterDINs(uint256)", "c07dd842": "buyFactor()", "c07e3391": "setMonethaAddress(address,bool)", +"c07e587a": "arNxmValue(uint256)", +"c07e9095": "millNums(uint256)", "c07f47d4": "latestVersion()", +"c07f589d": "loves_getLoves(uint256,address)", "c07f773a": "totalTokensAllocated()", +"c07fe203": "indexedOwnership(address,uint256)", +"c0803db9": "tokenOfSellerTokensByIndex(address,uint256)", +"c0806b03": "getUserDepositInfo(address,uint256)", +"c080b615": "WinningHand(uint256)", +"c080c4cc": "firstByOperation(bytes32)", +"c080c4ec": "exchangePynthsForSNX(uint256)", "c080f08f": "complexReturnType(int256,string,bool,string)", "c0819961": "Invest()", +"c0819c13": "FeesWithdrawn(address,uint256)", "c081efc1": "hasSellerBeenAccepted(address)", +"c082891d": "setBuyer(address,string,uint256,uint256)", +"c082bafb": "YMENcontributedForLPTokens(address)", +"c082dd20": "balanceOfUnderlying(uint256)", +"c083143d": "YGYRewardsInThisEpoch()", +"c0833c45": "delete_product_component(uint256,uint256)", "c083455f": "ownerPutInterest(uint256)", "c0835106": "isVotable(bytes32)", +"c0838afd": "buyTokenTo(uint256,address)", "c08415b1": "ORDER_PLACE(address,address,bool,uint256,uint256,uint256)", "c0845e8a": "catchMonster(address,uint32,string)", "c0846957": "EtherDeltaTokenBalance(address)", +"c084b10b": "getUserDeposit(address)", "c0851e09": "getEarlyPurchase(uint256)", +"c0856ffc": "SAFE_MSG_TYPEHASH()", +"c0857ba0": "checkpointManager()", +"c085d11b": "getOnlyEth(uint256,uint256)", +"c085d152": "freeLiqEth(uint256,uint256)", +"c086381e": "convertEthToUsd(uint256)", "c0864877": "tokensForOwner()", +"c0867ac7": "cancelBid(uint256,bool,uint256)", "c088003d": "getMinThresholdOfVoters(uint256)", "c0887991": "getOperation(address)", +"c088b0cc": "luogo()", "c088df47": "SECRET_BONUS_FACTOR()", +"c08939ad": "cancelTransactionIfInvalidated(address,uint256,string,bytes,uint256)", +"c089f115": "initialize(address,address,address,uint256,uint256,address,bytes)", "c08a86b1": "endGame(bool,uint256)", +"c08ab9a0": "isIndexed(bytes32)", +"c08b4d0b": "getDefaultBucketDetailsToUser(address)", +"c08b7502": "contractCaller(address)", +"c08bb34c": "aAmtqs()", +"c08c1713": "ShowPoolNumber()", +"c08c8ab0": "sideoutcome(uint256)", +"c08c9f9a": "lockedPermenantly()", +"c08ca32f": "proxyAddress(string)", "c08cc02d": "getProposalCount()", "c08d1fe5": "timeLimit()", +"c08d4146": "approvalNFTTransfers()", "c08dd1dc": "IOU(string,string,uint8)", "c08e05aa": "icoRuleCancel(uint256)", +"c08e0f96": "registerProduct(uint256)", +"c08e2230": "recoverERC20AmountV2(address,uint256,address)", "c08eea14": "cloneAccount(uint256)", +"c08f076e": "resetStartTime(uint256)", +"c08f66cb": "patronageOwedPatron(address)", +"c08f73b6": "Collateral(bytes32,uint256)", +"c08fa06b": "kfToErc20(address,uint256,uint256,address[][])", +"c08fa1a4": "claimedCount()", +"c08fb8af": "getProofUri(bytes32)", "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)", +"c0919ac6": "PERM_HINT_GET_RATE()", +"c091bf3a": "Approval(address,bool)", "c091c435": "refund(address[],uint256[])", "c091e45a": "redenominate()", "c0926d40": "HBOToken()", +"c09290bb": "getPynthSuspensions(bytes32[])", "c0929385": "confirmInit(address,address,string,bytes32,uint256)", "c092ecf4": "blocksToVest()", "c0934c45": "getNextRules()", +"c0935314": "getEventBalance(uint256)", +"c0938b34": "MAX_USDT_FEE()", "c0938c1a": "setMintAgent(int256,address,bool)", "c0942dfd": "registerNameXIDFromDapp(address,bytes32,uint256,bool)", +"c094686e": "getSetDetails(address,address[])", "c0946d54": "AtomCoin()", "c094c73e": "VeritaseumToken()", +"c094cb4f": "setMaxStakingAmountPerUser(uint256)", "c094df20": "shift(address,uint256)", +"c0952204": "getPositiveSlippageToUser()", "c0956fd9": "getRealTokenAmount(uint256)", +"c095ad3c": "checkNoReturnValues(bool)", +"c095daf2": "setCreatorCapitalRequirement(uint256)", "c0963d97": "getTokensAmount(uint256,address)", "c0966693": "RoomNonceAdd(uint8)", "c09689a6": "tryFinalizeProposalsByVoterIndices(uint256[],uint256[],bool[])", +"c0969170": "isReleaseTimingsSet()", "c096aa81": "fuint8(uint8)", +"c096bd41": "getBalanceOfUnderlying(address)", +"c0972f3c": "OrderNotFillableByOriginError(bytes32,address,address)", +"c0973eed": "rewardsAddress()", +"c0976078": "_setPieRate(uint256)", +"c0976f87": "getHeightDimensionArtworkInCm()", "c097d629": "setPI_edit_30(string)", "c0981285": "buyComissionUnits()", "c098201f": "updateEtherAndtokenAmount(uint256,uint256)", +"c09831ac": "getmoneys(address,uint256)", +"c09862d8": "test_addToRewardPool_noDelegatorRewards()", +"c0993eea": "DOMAIN_TYPE_HASH()", "c0997654": "destIndex(address)", +"c099a7c4": "setCashierAddress(address)", +"c09a449c": "VoteOnProposals(uint256[],bool[],uint256[],uint256[])", "c09a4ef4": "latestEthTxRequest()", "c09a898d": "SPTS()", "c09b2a2c": "weiMinSale(uint256)", +"c09b7aca": "updateInfo(address,bytes32)", "c09bdd06": "_escrow(address,address,uint256)", +"c09bf45e": "validUpgrade(bytes32)", +"c09c64c3": "NewUnsetBuy(address,uint256)", +"c09ca5dd": "withdrawFromCycle(uint256)", "c09d81be": "calculatePoundsTimesEther(uint256)", +"c09e7099": "bytes32ToSHA256(bytes32)", +"c09e8994": "team_accumuluated_multi(address)", "c09f32e8": "closeQuestion(uint256)", +"c09f4d75": "setBZxEther(address)", +"c09f6e3c": "OrderArranged(uint256)", +"c09f8104": "removeServiceOffering(bytes32)", +"c09f9442": "swapSetupFinished()", "c09fed25": "transferFromBalance(uint256,address)", +"c0a05084": "modifyGovernor(address)", "c0a06ecb": "infoWithdraw4()", "c0a0b5fa": "getKilledArray(uint256)", "c0a14da4": "isTeamLockInPeriodOverIfTeamAddress(address,address)", @@ -110252,56 +201761,101 @@ "c0a1a949": "x15()", "c0a1b72a": "totalSupplyWithOutBonus()", "c0a1e525": "createDaoPOLSKAtokens(address)", +"c0a20cf0": "Roll(int16,int16)", +"c0a21d32": "distributionAddresses(uint256)", "c0a2203e": "insert(address,address)", +"c0a23133": "deploy(address,address[],uint8[],string,string,uint256,uint256,uint256,uint256)", "c0a239e3": "valuePerShare()", +"c0a2526c": "BURN()", "c0a28014": "setTreeStructure(address,address)", +"c0a29756": "DefundingFaucet()", "c0a2d9b3": "EssentiaToken()", +"c0a2f304": "enterpriseRepay(bytes32,bytes32)", +"c0a302d8": "log(bool,bool,address,bool)", "c0a35d62": "burnReturn(address,uint256)", "c0a35e8b": "getTokensMintedAt(uint256)", "c0a36345": "getTokenOwnerRewardPercent()", +"c0a398c1": "mintToContract(uint256)", "c0a39fb0": "blockTransfer(uint256)", +"c0a3d223": "fireApprovalEvent(address,address,uint256)", "c0a41466": "etherSender(address,uint256)", "c0a42d91": "SignatureInvalidity()", +"c0a47c93": "setMasterContractApproval(address,address,bool,uint8,bytes32,bytes32)", +"c0a47d45": "getSiHandlerAddr()", +"c0a4d64d": "getLockTime()", "c0a5bcbd": "DefaultCents()", +"c0a6011d": "getCardCurrentAmount(uint256)", +"c0a6d78b": "possibleUnstakeTimeSet(uint256)", "c0a7639e": "checkIfAddressIsWhiteListed(address)", +"c0a7ac8e": "runtimeOther()", "c0a7f894": "MAVCash(uint256,string,uint8,string)", "c0a843a1": "getCurrentUserRefBonus()", "c0a8694d": "NamableAddressList(string,bool)", "c0a899f2": "transferAsChild(address,uint256,address,uint256,uint256,bytes)", +"c0a8a93f": "getTotalUnLockAmount(address)", +"c0a8d68d": "Sale(uint256)", "c0a8fb73": "FlightDelayController()", "c0a9066b": "LogValentineRequestCreated(string,string,string,address,address)", "c0a9581d": "sendFee(uint256)", "c0a963c9": "notifyWinner(address,uint256)", "c0a99a83": "oneTokenInUsdWei()", +"c0a9a692": "switchWalletAdmin()", +"c0a9cdfd": "updateBeneficiaryAddress(uint256,address)", +"c0aa0e8a": "terms(uint256)", "c0aa18e7": "History()", +"c0aa3458": "openShort(uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", "c0aa3b21": "ownerTokens()", "c0aa7e2e": "cancelInvoice(bytes32)", "c0aace0b": "totalKitties()", +"c0ab4b53": "updateTokenWithdrawFee(address,uint120)", "c0ab5704": "setVesting(address,uint256,uint256,uint256)", "c0ab86bd": "SBSolutions()", +"c0ab9cbc": "updateCompoundRate()", +"c0abda2a": "customers(uint256)", "c0abf829": "tokenCreationMinMile2()", +"c0abfe05": "setWrapFee(uint256,uint256)", "c0ac3d1c": "PRE_ICO_BONUS_RATE()", "c0ac9983": "tokenURIPrefix()", +"c0ad5f1d": "updateProfit(address,uint256)", "c0ad7427": "saleTokenSupply()", "c0adb725": "AuthCancel(address,address)", "c0adc465": "getCurrentBonusRate()", "c0ae6a3a": "ultimateOutcomes(bytes)", +"c0ae9659": "_decodeClaimsValues(uint128)", "c0aee5ba": "THAW_CYCLE_USER()", +"c0af0227": "getEmergencyCallsCount()", +"c0af8385": "setNewDestionation(address)", +"c0af993d": "preset_virtual_price()", +"c0b00dd0": "sauce()", +"c0b019d9": "prodRatesOptions(uint256)", +"c0b042dc": "denyRebasement()", +"c0b07893": "nftContractToWrapperContract(address)", +"c0b0fc07": "MultihashChanged(bytes32,bytes)", +"c0b0fda2": "_burnFee()", "c0b14de7": "setLandLimit()", "c0b204a6": "TeamWalletAmount()", "c0b241d7": "icoRate()", +"c0b2687a": "_tipsFeeRate()", +"c0b2f31f": "onSellMFCoins(address,uint256,uint256,uint256)", "c0b332c1": "moveCharge()", "c0b3569d": "setAssetProxy(address)", "c0b3870a": "withdrawJackpot()", "c0b39e68": "unfinalize()", "c0b3aff3": "INCREASE_RATE()", +"c0b3c67d": "tokenholderchecker(address)", +"c0b3cf12": "addPool(uint256,uint256,address,bool)", "c0b3dab3": "Devilsbest()", "c0b4d404": "setGrowingControlStartAt(uint256)", "c0b4e657": "HongkongerCoin()", "c0b4fa6d": "_reward(address[])", +"c0b4fd11": "setExchanger(address,bool)", +"c0b524f7": "vliquidPools(address)", +"c0b667ee": "getSmartWalletVersion()", "c0b6762c": "SILVER_AMOUNT_XPER()", +"c0b6d071": "transferFeesReceiver()", "c0b6f0c2": "NextRoundAndEvents()", "c0b6f561": "initiateOwnershipTransfer(address)", +"c0b74317": "getAllowedErc721ContractAt(uint256)", "c0b75b7d": "setMinContributionAmount(uint256)", "c0b7eba4": "game_allocation()", "c0b82515": "gzeUsd()", @@ -110311,46 +201865,81 @@ "c0b9b36a": "bountyTokensBatch(address[],uint256[],string)", "c0b9b8ce": "releaseToAdvisor(address,uint256)", "c0b9ecc8": "getNames(address,uint256,uint256)", +"c0ba4283": "createCandidate(bytes32,bytes32,uint256,bytes32)", "c0ba6adf": "gemDefenseConversion()", +"c0ba8fe4": "Submission(uint256)", "c0bac1a8": "isMigrated(string,string)", +"c0baf8f7": "mochi()", "c0bb20a6": "setBonusSale(uint256,uint256,uint256)", +"c0bb662b": "acoPoolBasicData(address)", "c0bb6c27": "setTotalPersistLimit(uint256)", "c0bb8466": "WithdrawFees()", +"c0bc7462": "setTokenLpAddress(address)", +"c0bcc07a": "getTokenDetail(uint256)", "c0bd3f40": "dumpData(uint256,uint256)", +"c0bd65d7": "SIGNATURE_TYPEHASH()", "c0bd8351": "getGameId()", +"c0bd9f16": "reserveAltAmount()", +"c0bdca05": "SF()", "c0be3e9a": "removeOffChainAddresses(address[])", "c0be4b51": "genWeeklySecondPrizeKey(uint8[4])", +"c0be5ed5": "proposal(address)", "c0be7ad3": "freezeAccountDirect(address,bool)", +"c0becbe8": "ISSUE_RESERVE()", +"c0bf10fc": "distributeTokens(address[],uint256[],string)", +"c0c05fff": "Discount(uint32,uint256)", +"c0c0e820": "setClosingPeriod(uint256)", +"c0c0e8d4": "printResult()", "c0c116d5": "getStringValue(uint256)", "c0c133a8": "DATE_ICO_END()", +"c0c176d1": "getBalancerTokensAndBalances(address)", "c0c19d29": "mock_length()", "c0c1b107": "changeOraclizeGasPrice(uint256)", "c0c1b18e": "getDepositSize(address)", +"c0c1c9f2": "countInSequence()", "c0c1cf55": "executeAction(uint256)", "c0c1dab1": "setReceiver1()", "c0c1eebc": "addToken(address,bytes32)", +"c0c265c4": "getLastActivateBlock(uint256)", "c0c2c087": "getOrdersInfo()", +"c0c3132c": "pauseUser()", "c0c3da9c": "totalSupplyLocked1Y()", +"c0c3f890": "getUserAssetRedeemed(address)", +"c0c41f22": "setChainName(string)", "c0c4440a": "totalAmountOfCrowdsalePurchases()", +"c0c46f25": "amendRewardsMulti(uint256,uint256)", "c0c47e12": "getDeal(bytes16)", +"c0c4a724": "calcValueInToken(address,uint256)", +"c0c4abfa": "getCurrentCashTofCashApril(uint128)", "c0c4d8a8": "Fundraiser(address,address,uint256,uint256,address,uint256,bytes32,uint256,uint256,uint256,uint256,uint256)", "c0c53b8b": "initialize(address,address,address)", +"c0c566f0": "getSalesPrice()", "c0c5fda5": "getTotalSupply(address,uint256,bytes,uint8,uint256)", "c0c602d9": "tokenAssigned()", "c0c620d2": "DroneToken(uint256,string,string)", "c0c6a430": "BadTronToken(address,address)", "c0c6a68a": "setMockedBlockNumber(uint256)", +"c0c6b4f1": "transContractLocked()", +"c0c6f7a4": "futureExpanstionMap(address)", "c0c76940": "StopperCoin()", "c0c77236": "resetHolder(bool)", "c0c77b71": "changeRegistrationStatusForGoldWhiteList(address,bool)", +"c0c786a7": "getConditionTypeRef(bytes32)", +"c0c79567": "TOKEN_TERMS()", "c0c81969": "tokenSupplies(uint256)", "c0c83c0d": "getDebtById(uint256)", "c0c8821a": "icoRuleUpdate(uint256,uint256,uint256,uint256,uint256)", "c0c8b567": "registerCertificateHash(address,bytes32)", "c0c8ccb3": "PreHELIX()", +"c0c8d66a": "gemIndexToOwner(uint256)", +"c0c901d0": "inviter(address,uint256)", "c0c91e6d": "getMinPriceSale()", "c0c95917": "BrinkzSupply()", "c0c98d6f": "setProof(uint256,bytes32)", +"c0c9a4a0": "referral_bonuses(uint256)", +"c0c9ce30": "setting()", +"c0c9e551": "TOKEN_MINT_USED()", +"c0caa066": "yourMark(address)", "c0cab256": "ZZWHToken()", "c0cad302": "setNetworkName(string)", "c0cc365d": "setExpirationTime(uint256)", @@ -110358,32 +201947,63 @@ "c0ccc863": "NacContract(uint256,uint256,uint256,address,uint256,uint256)", "c0cd1ec1": "recordLog(uint256,address,uint256,uint256,uint8,uint8)", "c0cd2e32": "chargeWeeklyRate(bytes32,address)", +"c0cd339e": "okFailTest()", "c0cd54c6": "GetGameType(address)", "c0cf067b": "deathData_v7()", "c0cf22e9": "setSendGiftPrice(uint256)", +"c0cf6f65": "Bet(uint256,address)", +"c0cf9303": "setOrder(uint256,uint256)", "c0cfa7e5": "startDispute(uint256)", +"c0cfc9b3": "buyerBalance(uint256)", "c0d061f4": "execute(address,uint256,bytes32)", "c0d0aa69": "daoMultisig()", "c0d129d4": "BallotPreferential()", "c0d13a6d": "MIN_BUY_ETHER()", +"c0d25203": "minBetLevel4()", +"c0d259ac": "bonusTotalUnlocked()", "c0d26946": "randomNumber(address,uint256)", "c0d2834b": "DataSource()", +"c0d2c49d": "maxOracles()", +"c0d3e848": "appeal(address)", "c0d3f378": "specialManagerListMap(uint256)", +"c0d41635": "investor_info(address)", +"c0d439c0": "getCoinAgeofPeriod(address,uint256,uint256)", +"c0d44075": "doWhile()", "c0d470a6": "setCCH_edit_23(string)", "c0d4fa0c": "emitFeePeriodDurationUpdated(uint256)", +"c0d5536f": "setFreeze(bool)", +"c0d64a87": "stake(bytes32)", "c0d6568d": "FEATURE_TRANSFERS()", "c0d6ce63": "punksRemainingToAssign()", +"c0d73884": "rwi()", "c0d75442": "TOKEN_SALE()", +"c0d78655": "setRouter(address)", +"c0d7a94f": "balanceOfRewarded(address)", +"c0d7eec1": "totalInterest(address)", +"c0d8012c": "getRewards(uint256)", "c0d84ce5": "TransferFrom(address,address,uint256)", +"c0d86991": "secondsBeforeTrade()", "c0d8b0b8": "setPetAuras(uint64,uint8,uint8,uint8)", "c0d910cd": "getTankOwner(uint256)", +"c0d91eaf": "init(address,bytes)", +"c0d99fcf": "setLockTokenNum(address,uint256)", "c0d9f997": "transperrun()", +"c0da73f8": "set2(uint256,uint256,bool)", +"c0da7e69": "setMergedMinerValidator(address)", "c0dab516": "adminPercent()", "c0db4dd7": "TRANSACTION_MIN_IN_ETH()", +"c0db7578": "mintCardForUserDuringSellEvent(uint256,uint256)", "c0db8dd8": "allowToLock(address,address)", +"c0dc15c3": "MCApplied(address)", +"c0dc28ae": "setMiMiContract(address)", "c0dcf63a": "isLastRaceFinsihed()", +"c0de286f": "unsafeBlockRandom()", "c0de3d71": "TransactionCancelledICAP(bytes32,uint256,string,address)", +"c0dead1a": "univ2SushiEth()", "c0df77d0": "getRefName(uint256)", +"c0df78f6": "setStrikeAsset(address)", +"c0dfd25c": "rewardToDistribute()", +"c0dff80d": "ConverterError(address,address,address,uint256)", "c0e06ca3": "whitelistAddressPresale(address,uint256)", "c0e093f1": "AirdropMultiple(address[],uint256)", "c0e09852": "isVesting(address)", @@ -110391,49 +202011,91 @@ "c0e18579": "ONETIMESOLD(uint256)", "c0e19314": "divideFractional(uint256,uint256,uint256)", "c0e1e272": "buyToken(uint32,uint32,uint32,address)", +"c0e1e294": "unlock(bool,bool)", +"c0e1f296": "PRECISION_UINT()", "c0e22f31": "frozenStatusOf(address)", +"c0e22f97": "decreaseCirculation(uint256)", +"c0e24d5e": "contractUri()", "c0e31001": "avatar(address,uint256,bytes)", "c0e3153c": "balanceSub(address,address,uint256)", "c0e317fb": "addToBalance()", "c0e33275": "perTokenAmountMax()", +"c0e34e3c": "getFixedRewardRatePerToken(uint256)", "c0e37b15": "transferData(address,uint256,bytes)", +"c0e38f60": "tokensCap(uint256)", +"c0e43987": "LogNonVestedTokensSent(address,uint256)", +"c0e467bf": "testDifferentSignature(uint256)", +"c0e46a2f": "prepareRedeemBassets(address[])", +"c0e493f8": "outPut()", +"c0e500a4": "winner_list(uint256)", "c0e59e4d": "lastRateUpdateTimeForCurrency(bytes4)", +"c0e5d300": "hasRedeemed(address,uint256)", +"c0e5e13d": "selfDestructInitiationTime()", "c0e5fbb6": "unlockBalanceOf(address)", +"c0e68d6b": "CancelOrder(address,uint256)", +"c0e68fec": "setTokenLimit(uint256)", +"c0e69af6": "revokeCreator(address)", "c0e71f54": "toKeyValue(string,string)", +"c0e721f0": "firstSupply()", "c0e738ef": "summAdvisors()", "c0e789cc": "friendsFingersWallet()", "c0e793c2": "transferOwnership(string,address)", "c0e79a11": "setAllowed(address)", "c0e8ad51": "LydianCoin()", +"c0e8b61f": "setBootstrapEnd(uint256)", "c0e9118e": "killAllXAITActivity()", "c0e91320": "finishPVEBatch(uint256[])", "c0e91569": "GRCToken()", +"c0e91dd5": "outAdjust()", "c0ea09d7": "rest()", +"c0ea2e77": "payoutBlocked()", "c0ea537b": "amountOfTokensPoolD()", +"c0ea542d": "stakeTokensOneMonth(uint256)", "c0ea6ff5": "test3_search()", +"c0eac446": "EXTENSION_TYPE_OFFSET()", "c0eaded2": "makeDeal(uint256,uint256,uint256,uint256,uint256,string,address,string,address,uint256,uint256)", +"c0eb2164": "getUnallocatedRewards()", "c0eb2325": "scheduleTransaction(address,bytes,uint256)", "c0eb2e70": "buy(address,uint256[],uint256[],bool)", +"c0ebb568": "GetMessageSender(string)", "c0ebc67a": "SimpleStateChannel()", "c0ebdba1": "InvestedOtherCrypto(address,uint256,uint256)", +"c0ec1983": "convertEthToDai(uint256,address[],uint256)", +"c0ec4ac5": "ethic()", "c0ec55a5": "buyPokemon(address,uint256)", +"c0ed00c9": "setRewardDuration(uint256)", "c0ed969a": "updateBackend(address)", "c0edec55": "CroatiavsDenmark()", +"c0ee01bc": "withdrawAllowance()", "c0ee0b8a": "tokenFallback(address,uint256,bytes)", "c0ee57a5": "giveReserveTo(address,uint256)", "c0ee6db8": "_lockToken(address,uint256)", +"c0ee954f": "bidTokens(uint32)", +"c0eea3c3": "shhImADecimal(int168)", +"c0eef161": "symbolToBytes32(string)", "c0efa161": "getDeveloperReservedBalanceLimit()", +"c0f02005": "wasComputeTriggered(bytes32,address)", +"c0f02140": "RequiredRcn(uint256)", "c0f0c21c": "updateMaxTokenLimit(uint256)", "c0f0e925": "getPercent3(address)", "c0f11a1b": "addressArrayContains(address[],address)", +"c0f14e46": "nodeFeeBalance(address,address)", "c0f16fab": "checkAllowedContribution(address,address,uint256,uint8)", "c0f17d13": "ChessCash()", +"c0f2165e": "setPrizes(uint256[])", +"c0f236a8": "addAmount(uint256,uint256)", +"c0f25f17": "checkallowance()", +"c0f2662d": "infoSos(address,uint256)", +"c0f27770": "previousInfo(uint256)", "c0f3622c": "updateRates(uint256,uint256,uint256)", "c0f3ab76": "B2BCoinContract()", "c0f40163": "issueFTT(address,uint256)", +"c0f4783d": "setDevFundReciever(address)", "c0f496ac": "ecosystemAllocation()", +"c0f4bbd2": "setTransferHandler(address)", "c0f4bfa4": "nbSellers()", "c0f4d29b": "setLocation(uint256,uint256)", +"c0f4ed31": "bid(uint256,address,uint256)", "c0f4f41e": "changeRefresherFee(uint256)", "c0f57529": "eth_seed_amount()", "c0f5a9cb": "deleteThing(bytes32[])", @@ -110442,40 +202104,83 @@ "c0f64f43": "attachAsset(uint256)", "c0f65734": "SignedDigitalAsset(string)", "c0f68859": "getMinimumGracePeriod()", +"c0f692de": "getTicketsWithRewards(address,uint256)", "c0f6a3f9": "reserveVaultAddr()", "c0f6c0da": "getTokensFromEth(uint256)", "c0f6c7b8": "getIdArray(address,uint256,string,string)", +"c0f6cf71": "_mks(uint256)", +"c0f6faed": "badge(uint256)", "c0f70d5a": "IOUSupply()", +"c0f7259c": "jxp()", +"c0f72e64": "isStakePoolVerifier(address)", +"c0f75e3d": "deleteLockup(address)", "c0f7c498": "create_planet()", +"c0f807d7": "allClaimsForAnAddress(address)", "c0f8275e": "detailsOf(uint256)", +"c0f86b94": "_amounts(address)", "c0f8940c": "decode()", "c0f8de32": "shouldThrowOnAttemptToTransferToNullAddress()", "c0f96105": "Enabled()", +"c0f97354": "setPowerBoost(uint32)", +"c0fa16cc": "setProtocolFeeCollectorAddress(address)", +"c0fab893": "useAll()", +"c0fb4568": "allProposal(bytes32)", +"c0fb6e51": "freezeCollateralType(bytes32)", +"c0fd120a": "setTamag(address)", +"c0fd1da4": "getSwapReward(address)", "c0fd43b4": "lastNonce(address)", +"c0fd912c": "contractLaunched(address)", "c0fdba2d": "YCBIToken()", +"c0fe282c": "claimFirstReserve()", +"c0fe3e7c": "beyondTokenAddress()", +"c0fe5730": "approveEndpoint(uint64,uint64)", "c0fe6c92": "isClientAddedBefore(address,address)", +"c0feb2c2": "getWatch(uint256)", "c0feb62d": "fundRaisedDuringPublicSale()", "c0feee42": "Error(bytes32)", +"c0ff20cf": "RaiseSlammer(bytes32,bytes32)", "c0ff3ebc": "ILFManager()", +"c1009469": "Isrenewable(uint256)", "c1009f1b": "testInitialLedgerBalance()", "c1013658": "createAsset(uint256,bytes32,uint256)", +"c101409d": "cambia_avvenimento(string)", +"c1014229": "infiniteApproveIERC20(address[])", +"c1018fce": "IPOFund(address,uint256)", "c1021099": "DBDVToken()", +"c102fe25": "PREFER_GOLD()", +"c1030fcc": "_retovn(uint256)", +"c1033302": "ApprovalBurn(address,address,uint256)", "c1039215": "PresaleExtended(uint256)", +"c1040599": "getCxcUnitsPerEth_cxc_to_eth()", "c10435cc": "lastEruptionTimestamp()", +"c10461a7": "initialize(uint256,address,address,address,address,uint256,bytes32,address,bytes32[],uint256[])", +"c104817d": "changeSubmissionChallengeBaseDeposit(uint256)", +"c105d274": "staticPricesMapping(string)", +"c105fa39": "checkClaimStatus(address,address)", +"c105ff67": "canSmWithdraw()", +"c10601eb": "spawn(address,uint256,uint256,uint256)", "c1061561": "shut_down()", +"c106f267": "ordersByNotary(address,uint256)", +"c1071657": "investorToDepostIndex(address)", "c1072279": "unicornBreeding()", "c1075329": "withdrawFunds(address,uint256)", +"c1075e57": "getEthBound1()", "c10796df": "_performTransferToICAPWithReference(bytes32,uint256,string,address)", "c107aa6f": "addAssociatedAddress(address,address,address,uint8,bytes32,bytes32,uint256)", "c107b9b8": "CTCB()", "c107e109": "addFactory(string,address)", +"c108184a": "decreaseUnpaidETHValue(address,uint256)", "c1082c00": "YBananaCoin()", +"c1086893": "Locked(bool,string)", "c108adab": "setChangeFee(uint256)", "c108d542": "distributionFinished()", "c108f3b4": "nextDelayedSetStake()", "c1098e2e": "preSaleFirstCap()", "c109e024": "blockdif()", "c10a0840": "CryptoChallenge()", +"c10a8f38": "IsLocked(uint256)", +"c10ab8a4": "getLatestDAIVsWeiPrice()", +"c10ac53e": "pushStakingPool(address,address)", "c10b30c0": "unlockPurchasedTokensClaim()", "c10b9358": "saleEnd()", "c10be521": "gapFactor()", @@ -110483,62 +202188,121 @@ "c10c0bd3": "logMatchdayResults(int16,string)", "c10c3463": "addProduct(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c10c3546": "setEscrow(address)", +"c10c9515": "pledges__amount(address)", +"c10cb612": "voteMoreThanTree()", "c10ce2b0": "calculateDiffPercent(uint256,uint256)", "c10d0f11": "didChangeCollateral(bytes32,address,uint256)", +"c10d1c20": "decisionMakersList()", +"c10d3c7e": "isMemberByUid(uint256)", +"c10d9727": "createCycle(uint256,uint256,uint256,uint256,bool,uint256)", +"c10dd4bb": "_assetMapIndex(uint256)", "c10dd4c6": "getEvents(bytes32[],address)", +"c10e1bbd": "testInvestorCanPutOnSale()", "c10e5fe7": "GemCoin()", +"c10e7d15": "addPools(address[],address[])", "c10e7dfe": "bonusInited()", "c10e9ba0": "isClientIdentRejectedOf(address)", "c10eb14d": "_withdraw()", "c10efd2f": "compareResults()", "c10f1a75": "proxyFactory()", +"c10f2700": "submitOracleResponse(uint8,address,string,uint256,uint8)", +"c10f410b": "transferOut()", "c10f5075": "KudosPoll(string,string,uint8,uint256,uint256,uint256)", "c10fa635": "channelParticipantCount(uint64)", "c10fa789": "withdrawalsVotes(address,uint256)", "c10fbf0e": "reDraw()", +"c10fd1ac": "setRewardDistribution(address,address)", +"c10fde1b": "rewardsClaimable(address)", +"c1101b87": "TakeDown(string,uint256,string)", +"c1107c11": "metaTxRelayer()", "c110afe2": "Percent(uint256,uint256)", +"c110e3b2": "_minters_number(address)", "c110e6a0": "HealthCoin()", "c111368b": "vestingsRemainBalance(address)", +"c111624d": "approve_484(address,uint256)", +"c111c559": "setPickerReward(uint256)", +"c111d73c": "EventContributors(address,bool)", "c112411e": "_clarifyPVPSchedule()", +"c11251f7": "testOnlyInvestorCanRemoveOnSale()", "c112601c": "transferLibOwnership(bytes32,address)", +"c1126a36": "registerTicket(address)", +"c1126f78": "Locked(address,uint256,uint256,uint256,uint256)", "c1127f90": "PresalePool(address,uint256,uint256)", +"c11296fc": "setTarget(string,address)", "c112a083": "finalizeChangeName()", +"c112bb2c": "B17(bytes)", "c112dfa3": "changeDecimals(uint8)", "c11301d4": "getSaleContractTargetEtherMax(address)", +"c11387d1": "setClosePositionFee(uint16)", "c1139ba0": "transferAuthorship(address,bytes32,bytes32)", "c113d195": "XECToken(string,string,uint8,uint256)", +"c113f503": "NewAuction(bytes32,address,uint256,uint256,uint256,uint256)", "c11403fc": "maxListingSeconds()", "c114301c": "icoPlatformWithdraw(uint256)", +"c1145ea1": "distributeBounty(address,uint256)", +"c11490cc": "updateNFT(uint256,uint256)", +"c1150c34": "hasEnoughBST(address,address)", +"c115335c": "floatAddress()", +"c11535b8": "ObserverChanged(address)", +"c1153aaa": "getAmountsOut(uint256)", "c115b06c": "CYFToken()", +"c115dca7": "RequestedMortgage(uint256,address,address,uint256,uint256,uint256,address)", +"c115e443": "proportionalSkew()", "c11645af": "test_threeInvalidAssertFalse()", +"c11645bc": "daiJoin()", "c116574c": "__update_oraclize(address)", "c1165781": "totalSupplyOnIco()", +"c1169548": "execute(address,address,bytes,uint256,bytes,uint256,uint256,address,address)", "c11737c7": "getFirstBuyer(address)", "c11741a9": "submitReview(uint256,bool)", +"c11746b5": "createDCForTest(uint256)", +"c117a3e5": "initializeOrg(uint256,address)", "c117c9eb": "isUserInAllowedList()", "c117cfe2": "TwoDimensions()", "c11808da": "getFloor()", +"c1181075": "setInitFee(uint256)", "c1184537": "changeContracts(address,address,address,address)", +"c1185434": "validRef(address,address)", "c118a9de": "getDiscountOf(uint256)", "c119167b": "numberOfExchInEstateNasBob(address,uint256)", +"c11966b7": "refillPrescription(uint256,bool)", "c119d019": "collectPayment(address,uint256)", "c11a4b47": "Origin()", +"c11a6b65": "acceptBidForGlyph(uint256,uint256)", "c11b2252": "equipContract()", +"c11b5d95": "matchDonorM2(uint256)", +"c11b6c29": "predictBnb(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c11bd455": "timeOfLastHalving()", "c11bf4e3": "execute(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", "c11bf8d6": "CLXToken(uint256,string,string)", +"c11c0616": "removeUserContract(address)", "c11c0cc1": "getSecondPoints()", +"c11c2e92": "convertDustToEarned()", +"c11c5590": "increaseAllowence(address,uint256)", +"c11cc2fb": "EvUpdateVersion(address,uint256)", +"c11cf780": "createProject(uint32,uint256,uint32,uint32,uint8,string,string,bool,uint8,uint8)", "c11d9d9f": "minEtherContrib()", +"c11da825": "AddedToBlacklist(address,uint256)", "c11dde0d": "setManufacturer(address)", "c11e1ff3": "getMe()", +"c11e8bf0": "addSubTreePlan(uint256,bytes16,uint128,uint8,bool,uint8,bool)", "c11efcdc": "getRaisedForCurrentStage()", "c11f49e3": "ETHERNETSUPPLY()", "c11f5284": "setReceivers()", +"c11f5344": "stakingDecimals()", +"c11f85b4": "setHikariAddress(address)", "c11fb13e": "trustedProposals(uint256)", +"c11ff507": "setAuthorizedAcoCreator(address,bool)", +"c1204612": "creatorCreateToken(uint16)", "c1204caa": "trade(uint256[11],address[4],uint8[2],bytes32[4])", "c12076f1": "holderGroupNumber()", "c120d1a4": "outingreserveBalance()", +"c120d59e": "isValidPair(address,address)", +"c12183d4": "getBurnableWalletCount()", +"c121939f": "transferVault(address,address,uint256,uint256,bool,uint8)", +"c12198e1": "uintProduction(address,uint256)", "c121be4d": "removeAddressManual(address)", +"c1223827": "cardAmount()", "c122759f": "issuerDistributedUnits()", "c1232366": "gameCloneFee()", "c1238940": "bmy(uint256,string,uint8,string)", @@ -110546,79 +202310,138 @@ "c1243528": "airdropRecord(address)", "c1246d39": "simulatePathwayFromBeneficiary()", "c124e2ea": "checkBetDozen(uint8)", +"c125072a": "ethBuyOn()", +"c12542df": "setLendingPoolConfiguratorImpl(address)", +"c1254a55": "SHARES()", +"c1255299": "DRAGON_MAX_TYPE()", "c1257bad": "testPassingAProposal()", "c1258f69": "txCount(address)", +"c125c861": "setTaxExemptStatus(address,bool)", "c1263215": "calculateObtainedJOY(uint256)", +"c1264d02": "_exitFee()", "c1266227": "pow2Bounds(int256)", "c12692dc": "tokenRaise(address,uint256)", +"c126df23": "REI08()", "c12719a7": "EthPriceDependent(address[],uint256,bool)", "c1273676": "fundingUnlockTime()", "c1273ba0": "likeCelebrity(uint256,uint256)", +"c1278371": "getBeneficiaryAddressesForSpecificTokenIdsSingleNft(address,uint256[])", "c127ae41": "getSignatureHash()", "c127c247": "addMember(address,string)", "c127ee20": "SearchUserPurchase(string,string)", +"c1281d53": "unstakePenaltyDays()", +"c128bdee": "_closeTimestamp()", "c128c9e7": "GetBuildingData(address,uint256)", +"c128d41e": "dropLumpSumERC20(address,address,uint256)", +"c1290312": "CTxRewardsAddress()", "c1292cc3": "lastId()", "c1294224": "payoff(address)", "c12954fa": "restartMinting()", "c129827b": "_setSpecialityValue21(uint256)", "c12a0fd7": "removeReverseRate(address[])", +"c12a9067": "transferMeAvailableSingleBeneficiaryERC721Token(address,uint256)", "c12ae5e9": "blocksInFirstCapPeriod()", "c12af1ce": "fipsRegister(uint256,bytes)", "c12b2513": "assignSubBroker(uint256,address)", +"c12b7c4e": "updateUniswapPair(address)", +"c12bc0f6": "changeSeason()", +"c12bddae": "setVerifier(address,string,string,string,string)", "c12c202c": "getGrapesSinceLastHarvest(address)", "c12c2eb3": "abstractENS()", "c12c31d6": "listAllAdmins()", +"c12c8ac2": "getXendTokensReward(address)", "c12d1d82": "updateToken(uint256,uint256)", +"c12d47fc": "setCollateralMinCollateralRatio(address,uint256)", "c12d7b01": "Error(uint16)", "c12d97de": "DevGiveBlockReward()", +"c12dda2d": "LogResult(uint256,bytes32,address,string,uint256,uint256,int256,bytes)", "c12dec39": "_fetchOrdersForMerchant(address)", +"c12e580a": "releaseMarketingAllocation(address)", "c12e760e": "agreeFromDrone()", +"c12e90e9": "redeemFeeDenominator()", +"c12e9ceb": "approve_292(address,uint256)", +"c12ea3ca": "unwrapTo(address,uint256)", "c12eb191": "updateEarlyParticipantWhitelist(address,uint256)", "c12edde6": "EURValue()", +"c12ef65b": "changeLimitedWalletsManager(address)", "c12f48e3": "AssetRegistered(address,string,string,string,uint256)", "c12fac40": "oneHundredThousand()", +"c1300637": "purchasedFund()", "c13026b0": "changePresaleCap(uint256)", "c13051d7": "getCellsInfo()", +"c130703f": "approve_385(address,uint256)", +"c1308df3": "markExited(address,address)", "c1309aea": "getOfferor(uint256)", "c1310951": "createNewDepositContract(uint256)", "c131acdf": "GetBestTokenCount(uint8)", "c1321111": "setSaleLength(uint256,uint256,uint256,uint256)", +"c1324de1": "userAddressToUser(address)", +"c1325661": "strikeAssetDecimals()", +"c1329984": "setWithdrawMinTrx(uint256)", "c132bc18": "balanceWosPoolForThirdStage()", "c132dd4f": "authorizedCreateTokensToPrivate(address,uint256)", "c1331bc3": "setBlacklistSpender(address)", "c1333a9c": "setPurchaseRequirements(uint8,address[],uint256[])", +"c1335077": "distroyContract()", +"c1342574": "liquidate(address,address,uint256,uint256)", +"c1347567": "CastleAuctionBid(uint256,address,uint256)", +"c134a215": "tokenWantAmounts(address)", "c134bc92": "hell()", "c13517e1": "createDispute(uint256,bytes)", +"c1356d26": "insert(string,string,uint256)", "c135a2d8": "getBackgroundValue(uint256)", "c135c040": "gzePerEth()", +"c1361a7c": "ensureCanReveal(uint256,address)", +"c1367129": "maxDaiDebt()", "c1374d5a": "EtherUSDPriceFactor()", +"c1378e78": "approve_706(address,uint256)", +"c137f4d7": "componentRedeemHook(address,uint256,address,bool)", "c138195c": "icoEtherMinCap()", +"c13819b6": "getDepositData(uint256)", "c1381ea3": "DutchExchangeProxy(address)", "c13862ea": "setBoardRating(uint256,uint8)", +"c138cb9b": "currentRightVersions(int128)", +"c1396295": "athletesTeam(uint256)", +"c139767c": "setMsg(uint256)", "c13982ee": "checkCap()", "c13992b4": "Metadium()", +"c139eb15": "forceInclusionPeriodSeconds()", +"c13a1166": "OwnershipTransferred(address,address,uint256)", "c13a135a": "getWinnerOfEvent(bytes32)", +"c13a2b0c": "getBoolValues(bytes32,bytes32[])", +"c13aa7b5": "controller(address)", "c13ab0fe": "WOLF4()", "c13afa91": "object_locations(uint256)", "c13b22ef": "setTokenTransferFeeAbs(address,address,uint256)", "c13b37c7": "updateIsRevertedEndTimeReached()", "c13b3895": "getHype(uint256)", "c13b72a8": "registerCDP(uint256)", +"c13b8030": "resetTransferTotals()", "c13c6813": "_addTimelock(address,uint256)", "c13ca374": "SimpleSale()", +"c13d995c": "rewardsAmount()", "c13e24d2": "Reinvest(uint256)", "c13e285d": "maxTrialDrops()", +"c13e85ac": "addSavings(address,address)", "c13f4af7": "claim(address,uint128)", +"c13f62e1": "sponsorDisputeRewardPct()", +"c13f690b": "lotteryAmount(uint256)", "c13fb08b": "breedOnAuction(uint256,bool,uint256,bool,string,string)", +"c14031e0": "withdrawInternal(uint256,uint256)", "c140635b": "audit(bytes32)", "c1408cda": "getDataFromAddress(address)", +"c14190da": "totalEthRewards()", +"c141a951": "ActiveFarmDeposit(address,address)", "c141e6da": "ERC721ReceiverMock(bytes4,bool)", "c141ed74": "calculateCrowdAmount(uint256)", "c14248a2": "lrcSent()", "c1429c11": "ChainStarToken()", +"c142a621": "setMappingDetailcodehash(string,string)", +"c1431eda": "unitsOwned(address,uint256)", "c143a372": "TokenTransferFrom(address,address,uint256)", "c143ab2c": "crowdSaleStop()", +"c143d8b5": "presale(address[],uint256[])", +"c143e1c7": "testIsContract()", "c143f701": "getRequestFundInfo(uint256)", "c1440167": "Voterplayer()", "c1441172": "setBlackFlagRequest(uint256,uint256)", @@ -110627,138 +202450,252 @@ "c144a510": "ADDR_WITHDRAWAL2()", "c144a5db": "Bytelending(uint256,string,string)", "c144d7dc": "buyMine(uint8)", +"c1459d31": "callGas()", "c145d105": "withdrawSettle(bytes32,address,uint256,uint256,bytes32)", +"c145e0a6": "askoStaking()", "c1460942": "getLiquidationSpread()", +"c1461d57": "depositFunds(address,address,uint256)", "c14634cf": "KudosTokenSale(address,uint256,address)", "c1468587": "mainwallet()", +"c1469e1b": "withdraw_emergency(uint256)", "c146eb02": "UNOPEN(string,string,uint256,uint256,bool)", +"c14731ca": "saveValue(uint256)", +"c147b8c2": "getParam(uint256,uint256)", "c148002c": "latestUnlockStage()", +"c1482ce8": "base_Rate_Reward()", +"c14832ac": "getProtocolMetadata(bytes32)", +"c1486b07": "ReturnTokens(address,address,uint256)", +"c148beb5": "addrUserRecord()", "c148e20e": "FCCToken(string,string,uint256,uint256,bool)", +"c1492599": "idVerification(address,uint256)", "c14958cb": "giveUp(address,address)", "c1499199": "_uncreditUser(address,uint256)", +"c1499f71": "getWorkers()", "c14a2455": "balDailyLotto()", "c14a3b8c": "mintTimelocked(address,uint256,uint256)", "c14a6046": "payerContract()", +"c14a785b": "stakerMint(address,uint256)", "c14a932f": "signedTransferFromSig()", "c14a9f05": "challenge(address,uint256,uint256)", "c14ab7a1": "PredictTheFutureCaller(address,uint8)", +"c14affba": "Farm()", +"c14b6644": "withdrawAndRemoveLiquidity(address,address,uint256,address,uint256[2])", +"c14b8e9c": "updateThresholds(uint256,uint256)", "c14bafb1": "lastPurchaseTime()", "c14bfd29": "hasAlreadyVoted(uint256,address)", "c14c1ce3": "requestUpdate(uint256)", "c14c5574": "Gold(address,address,int256,address)", "c14c7bd7": "performRead1()", +"c14cba3e": "LPtoken()", "c14d2358": "init(address,uint256[],uint256,uint8,uint256,bool)", "c14d3abe": "enableSuperUser(address,bool)", +"c14e2647": "stakingPoolV1RewardInterval()", "c14e50ce": "setValidater(address)", "c14e61ba": "overdraftTotal()", "c14e6cd0": "changeTransferLock(bool)", +"c14e6deb": "_transferFromByProxy(address,address,address,uint256)", "c14e7a3f": "setCooldown(uint16,uint32)", "c14e9f58": "submitBlockHeader(bytes)", "c14edad2": "teamDistribute()", +"c14f15cf": "calculateCompoundedInterest(uint256,uint40)", "c14f42fd": "mLoadAndReturn(bytes32)", "c14f7ea8": "rejectSubmission(uint256)", +"c14f9091": "currentLockTimer()", "c14fbd64": "satoshiMood()", +"c1501695": "depositTokenOnBehalf(address,address,uint256,uint8)", +"c1511395": "fulfillContract(uint256)", +"c1517a89": "viewGreatReward(address,uint256)", "c15185f5": "getAuditPrice(uint256)", +"c151a749": "end1StageSale()", "c151ac55": "_createMovie(string,address,uint256)", "c151c5ad": "getSignerTable()", +"c151d29b": "newUserId_ap2()", +"c151d2fd": "PayTableAdded(uint256,address,uint256)", +"c1520775": "editBlockedReceiverList(address,bool)", +"c1526213": "MultiAddressDistrubuteToken(address[],uint256)", "c15294a1": "creatGameBet(uint256,bytes32)", "c152d3eb": "setKYCTeam(address)", +"c152f59c": "_stakeLocked(address,address,uint256,uint256)", +"c152feae": "updateStakingRefLinePercentage(uint8,uint256)", "c1531ecc": "changeIssuer(address,bool)", +"c1536e97": "viewBonusAvailable(uint256,address)", +"c153dd07": "moduleIssueHook(address,uint256)", +"c15404b3": "rewardsPerSharePaid(address)", +"c1540de7": "_randomSeed()", +"c154d6ca": "isFreeze()", "c1551fc8": "QuadCoreChain()", "c1554658": "changeDepositorLimit(uint256)", "c155836d": "LuCyToken(address,string,uint8,string,string)", "c155cfde": "_preAllocateTokens(address,uint256)", "c1560a14": "hardCapInUSD()", "c1562547": "checkUser()", +"c156776a": "setWhiteList(address,uint256)", "c156ef6b": "_createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"c1570322": "offeredOf(address)", +"c1576214": "contractBeginNum()", "c157b869": "totalUsdValueOfAllTokens()", "c157d72c": "itemInfo(address,uint256,bytes)", +"c1586ad3": "canUnlock()", +"c158ef18": "GetUserCurrentDebtProportion(address)", +"c1590cd7": "nav()", "c1596534": "addReserve(address,uint8,bool)", +"c1597304": "phaseAggregators(uint16)", +"c15982df": "removePlatformAddress(address)", "c1598f6a": "newWage(uint16)", "c1599011": "conversionRateOfState(uint256)", +"c15998c4": "convertParent()", "c1599bd9": "X()", +"c15a483f": "stop(bool)", "c15a6791": "oneShotTokenRepartition(uint256)", +"c15aaf0c": "getHolderDetail(address)", +"c15adaa6": "getStakingEventsLength()", "c15ae376": "_shareToDistribution(uint256,address,uint256,uint256)", "c15aec44": "totalGasUtilizing()", "c15b42bf": "AsignarPasesLibres(uint16,uint32)", +"c15bae84": "str()", "c15c09b5": "admin_set_exchange_rate(uint256)", +"c15cb94d": "_euroMinter()", "c15d0b10": "getLoanValue(bool)", "c15d15da": "_isValidSignatureAndData(address,address,bytes)", +"c15d74ac": "monthlock(uint256)", "c15d7bca": "setEthToTokenConversion(uint256)", +"c15d7d6b": "userLastDayth(address)", +"c15df6c2": "getDepositTotalAmount()", +"c15e26ba": "isTokenValid(address)", "c15e47c4": "getFirstBatch(address,address)", +"c15e53bb": "config(uint256,uint32)", "c15e61c0": "Authorization()", +"c15e839f": "ensureCurrentPeriod(uint256)", +"c15e8ae0": "setDynamicArrayPayable(uint256)", +"c15ef5ae": "LogChangeFactorySubscriptionFee(uint256,uint256,address)", "c15f05fb": "changePrimaryArbitrator(address)", +"c15f25c4": "Open(bool)", +"c15f5257": "EventEat(address,address,uint256,uint256,uint256,uint256,uint256)", "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)", +"c15fb1fe": "resolvePercentRate()", +"c160b9b0": "_minterAddresses(uint256)", +"c16101c2": "financialVariables(uint256,uint256)", "c1614981": "allocateLocked(address,uint256)", "c1615945": "setAffiliateContract(address)", "c1615c87": "DEFROST_PERIOD()", "c161d506": "CollabCoinToken()", +"c16229fa": "addNewContract(bytes32,address,uint256)", +"c162b3b4": "callfunc()", "c162ba2f": "walletId()", "c162bc03": "clearProposal(address)", +"c1634d0b": "takeTokens(address[])", "c163bba7": "publish(string,string)", +"c163de3d": "closeEscrow()", "c163edf7": "OutcomeEvent(string,uint256)", "c163fb0e": "ownedHouses(address)", "c1640913": "RETAINED_TOKENS()", +"c1640e7f": "config_shareholder(uint64,address,uint256)", +"c1648fbd": "getTicketsForUser(address)", +"c164eddc": "tsupply()", +"c16503a7": "wrapHegicTest3(uint256)", "c166311f": "freeLotterySeconds()", +"c1665fdd": "IPOinfo(uint256)", "c166c458": "getUserRequestCount(address)", +"c166d13d": "whiteListedAddress(address)", "c166ee38": "sweepAccount()", "c1670257": "redeemContractSentTokens(address,uint256)", +"c1671bab": "tradeInExpansionOnly()", +"c1672177": "AddToStake(uint256)", "c1674b74": "assertReadyToClose(uint256)", "c167d1cd": "getAvailableSupply()", +"c167f099": "liquidatePosition(bytes32,uint256)", +"c167f98d": "migratePairPool(address)", +"c167fa84": "addChainlinkETHOracle(address,address)", "c1684711": "migrateTokens(address)", "c16849c0": "tokenSC()", "c1687877": "buyTokens(uint256,uint256,address)", +"c1687feb": "jackpotLevel4Amount()", +"c1688c3e": "BURN_SERVICE_NAME()", +"c168b5f8": "PlayerAdded(uint256,address,uint256,address)", "c168e037": "getCustomerPremium(uint256)", +"c168f104": "gameEndtime()", "c1691fc3": "add_bonus(uint256)", +"c16921b7": "COMPOUND_DAI_ADDRESS()", +"c1694a2f": "pauseProfile()", "c1694bd4": "TransferDetails(string,uint256,string,uint256,uint256,address[])", +"c169591f": "stakeTokenForShares(uint256)", "c16959b2": "_unpackRaceFinishData(uint256)", +"c1696533": "StakeTransferGenesis(address,uint256,address[])", +"c1697432": "UpdateEndTime(address,uint256,uint256)", "c1699a99": "stakePeriod()", "c1699bf6": "setPrimaryAccount(address)", "c169ec0d": "setBuzzCafe(address)", +"c16a58f3": "girlIndexToOwner(uint256)", +"c16a736e": "excludeReward(address)", "c16ac06f": "CM()", +"c16ae1e0": "setTokensaleWallet(address)", "c16ae3ce": "_receiveFrom(address,uint256)", "c16b451f": "_checkedTransfer(address,address,uint256)", "c16b9374": "regularEndGame(address,uint32,uint8,uint16,uint256,int256,uint256,address)", +"c16bb15c": "pendingWpcAccrued(address,bool,bool)", "c16bca13": "MIN_AUDIT_TIME()", "c16bea20": "addControllerByPartition(bytes32,address)", "c16c0851": "miningOneSelf()", "c16d1377": "IS_CND_CONTRACT_MAGIC_NUMBER()", "c16d3344": "setMinimumOfferPrice(uint256)", "c16d515a": "_createCenturion(address)", +"c16d7a9e": "test_wdiv_fractions()", +"c16e1201": "LUV()", "c16e50ef": "validate(bytes)", "c16f402c": "getEpisodes()", "c16fe907": "getTransfer(uint256)", "c1707f66": "stateSetOpen(uint32)", +"c170836a": "loopcheck(address)", +"c1708ad4": "timelockOf(address)", +"c170c38e": "prevAirdrop()", "c170fd54": "bid(uint40)", +"c17145d6": "getindexing(uint256)", "c171747b": "convertEthToMet(uint256)", "c1717f80": "BC2Token()", +"c171869d": "registerDDR(address,address,address,string,uint256,uint256,uint256,uint256)", "c171cfa6": "getBetValueByGamble(uint8,uint8)", "c171fb91": "referrerLevel1Percent()", "c172085e": "initialization()", +"c1721334": "isOpenPool(uint256)", +"c172646f": "enabledTokenIndex(uint256)", +"c1727615": "getLiquiditySensitivity()", "c17281d0": "refundPartial(address,uint256,uint256,uint256)", "c172aae5": "getIdentifier(uint256)", "c172f9c9": "receiveApproval(address,uint256,address,bytes32)", "c1733712": "authorizePayment(address,uint256,uint256)", +"c1733c6c": "depositDai(uint256,address)", "c1733f68": "getToken(string)", "c173508b": "removeConnection(address,address,bytes32)", "c1736222": "tokenForSPSold()", "c1739b69": "InfraOfOwner(address)", +"c1740323": "getLucaxPriceForBTCB()", "c1747585": "testEvent2()", +"c1747821": "distributeHeaderRelayerReward()", +"c1747fd4": "getSortedIndexOf64(uint64)", "c174cc59": "getrunused(address)", "c1751903": "lockBreak()", +"c1752ef1": "interfaceSignature_ERC721Metadata()", +"c175541f": "setExecutionDelay(uint64)", +"c175559b": "getNAllowed()", "c1756a2c": "sendEther(address,uint256)", "c1758fee": "vest2mlDevelopers(address,address)", +"c175a16f": "transfer_out_erc20(address,uint256)", +"c1762b15": "joinswapExternAmountIn(address,address,uint256,uint256)", "c1766657": "addBonusForMultipleHolders(address[],uint256[])", +"c17693c0": "investUnderlying(uint256)", "c176b1d8": "deletePriceIdv(bytes32)", "c176d42a": "NavGlobalTourCoin()", "c176e639": "payout(address[],uint256[])", "c176e73b": "pkt()", +"c1773f84": "oly()", "c177c20f": "CliToken()", +"c177c2fd": "sumbitNewTeamName(string)", "c177e804": "WEETtoken()", "c177f22e": "findKingdomCalled(string)", +"c177f248": "_gauge()", "c1784a4e": "safekey(uint256)", "c1786ab2": "pre(address,bytes32,bytes32)", "c178a2d4": "CreationContract()", @@ -110766,25 +202703,47 @@ "c1790561": "_getPetBonus2(uint256)", "c179186e": "collectWinnings(uint256,uint256,uint256)", "c179520c": "ManageAccount()", +"c179772e": "initializeToken(address,address,address[],address[],uint256[],address[],uint256[],address[],uint256[])", +"c1797ff4": "quotaManage()", +"c179a341": "checkNNLimitTime()", "c17a099b": "presaleBonusTokensDistributed()", +"c17a1013": "testa()", +"c17a340e": "getTaskCount()", "c17a893e": "transferAUTOtoken1(address[])", +"c17b2851": "turnOutToken(address,uint256)", "c17b5a93": "ProfitExchange()", "c17b9770": "log2Floor(int256)", +"c17bae2a": "timelock(uint8)", +"c17bb375": "amountEth()", +"c17bd75e": "bountyId()", "c17c0456": "ownerCEO()", "c17c3521": "setHourlyRate(uint256)", "c17ccc6c": "withdrawUnlockedTokens()", "c17d8720": "checkBank(string,address)", +"c17dd8b9": "calcQuantities(uint256[],uint256[])", "c17de343": "isStarOwner(uint256,address)", "c17e2aa1": "burnAllTokens()", +"c17e608f": "decayStartTime()", "c17e6817": "sendSafe(address,uint256)", "c17e92b6": "unregisterFromBlacklist(address)", "c17ed7bd": "purchaseSilver()", +"c17edb31": "stopAttack(address)", "c17f23e8": "getRoundID()", +"c17f343c": "harvestAndReinvest(address,address,uint256)", "c17f8891": "setEtherFeeMin(uint256)", +"c17f8ce9": "userAmountStaked(address,address)", "c17ffac6": "unsetRegionForSale(uint256,uint256)", +"c180176c": "FillMaxInterestRate()", +"c1803191": "payforflag(address)", +"c1806065": "adminId(address)", +"c180864c": "coOwner2()", +"c1808bf8": "arbUniAndSushiWithGasToken(uint256,uint256,address[],address[],uint256)", "c180e1d0": "GCPToken()", "c1811783": "FreezableToken()", "c1812b15": "reorganizeOwners()", +"c1817d7c": "switchWhitelistFeature(bool)", +"c181c482": "calcCheckValue(uint256,address)", +"c18230ec": "addTWAPSource(address)", "c1826d78": "Collect()", "c1829a14": "testFailTooFewConfirms()", "c182f531": "GetFreeEther()", @@ -110793,54 +202752,101 @@ "c18384ec": "setRestricted(address)", "c1838e92": "proposeTokenOwner(address)", "c1839258": "LogTokenPurchase(uint256,uint256)", +"c183eeee": "vIDArray(uint256)", "c1840b39": "_generateRandom(bytes32)", +"c184849d": "dividendstart()", +"c1848b5b": "feedFab()", "c1857bf7": "withdrawFoundation(address,uint256)", "c185d772": "emissionStages(uint256)", "c185e492": "preSaleThirdPrice()", "c186dcbf": "getStaticArraySum()", +"c186edac": "umbrellas(address)", "c18715f8": "prolongationPermitted()", +"c187377c": "ieoAddress(uint256)", "c1873e26": "releaseCoreTeamAccount()", +"c1874bfe": "totalUSDb()", +"c1876f0c": "_addToDelegatedToValidator(uint256,uint256,uint256)", +"c187cef1": "walletsNotLocked(address)", +"c187e719": "_getConstantsHolder()", +"c188214f": "getUserExtraLiquidityAmount(address,uint256)", +"c1882166": "blacksmith()", "c1889ff2": "payAccTax(uint256)", +"c188c0b9": "valueAvatar()", "c188f44b": "addproduct(string,string,uint256,string)", "c1891ac6": "multiplePing(address[])", +"c1892058": "USDT_ADDRESS()", +"c18981c3": "setRatio(uint256,bool)", "c1899ca7": "request_dividend(address)", +"c18a2780": "childDeposits(address)", "c18a40c7": "multiowned(uint256,address[])", "c18b4136": "AAC()", "c18b5279": "KFHToken()", "c18b8db4": "listings(bytes32)", "c18b9760": "test_insert_findWithHintPrevDecreased(int256)", "c18bca5f": "setCollectionAddress(address,address)", +"c18bd8ee": "printWithBrrr(uint256)", +"c18c9141": "rewardsByPoolId(bytes32)", +"c18c9d93": "checkPosition(address)", "c18ca54c": "testEvent(int256,int256,uint256,uint256,string,string)", +"c18d0dab": "Execution(uint256,string)", "c18d767a": "weiMinSalePreIco()", +"c18d9582": "hasAddressAssignedResourceChecksumPair(address,uint256)", +"c18dd5d7": "addUserD(uint256,string,address,string)", "c18e8903": "totalWeiRaisedDuringICO4()", "c18e94b4": "Keizer()", +"c18eb9d4": "calculateTokensOwed(address)", "c18edde1": "saleopeningTime()", "c18f4831": "burnFeeDenominator()", +"c1900558": "removeTokenByAddress(address)", +"c190472e": "allowanceProxy(address,address,address)", +"c19048b2": "PICKLE()", "c1908360": "createEntry(string,string)", +"c190adb1": "allocateConsumerProtectionFund()", "c190b129": "holderState()", +"c190f41e": "COFFEE_MAG()", "c1912433": "acceptAndPay(bytes32,uint256[],uint256[],int256)", +"c1916171": "_unsetLocator(address)", "c1918e90": "accountAddressForSponsee()", +"c191c18f": "CurrentTaxFee()", "c191cbd7": "TeamTokensAllocated(uint256)", +"c191d0c9": "wbtcPerRequest()", "c191d37d": "Escapable(address,address,address)", +"c1920208": "userProfit(bytes32)", "c1927292": "TIER1_BONUS()", "c1929d8c": "ADVISOR_THREE()", "c192ca98": "isCS(address)", "c1932833": "maxAirdropParticipants()", "c19358bb": "setPropertyLastUpdater(uint16,address)", +"c193f0d8": "tradingRewardsEnabled()", "c193fbf8": "pushArray(bytes32,address)", +"c1940c3d": "getDebit()", "c19455c8": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes32,address)", +"c1948330": "getTotalContributedEth()", "c1955e62": "spend(uint256,bytes32)", "c195dc41": "getStageEndDate()", +"c19603c4": "safeEggTransfer(address,uint256)", "c19678d5": "canLotteryBeExecuted()", +"c1968e2d": "enterBidForGol(uint256)", "c196b54f": "bound(uint256,uint256)", "c1971240": "dailyGrowthUpdated_date()", +"c19757c3": "addNextTopToken(address)", "c197a7b1": "getLastStoragePayDate()", "c197cdee": "preSaleTokenLeft()", +"c1988576": "chunkproposals(uint256,uint256)", "c1989276": "MaxItems()", +"c198def0": "_transactionIdx()", +"c198f8ba": "propose()", "c1991040": "getCurrentVotingDescription()", +"c1991219": "valid()", +"c199aa68": "GetNumberOfUsersOnThePlatform()", +"c199de32": "getConfigValue(bytes32)", "c19a8095": "deleteUser(address,address)", +"c19aed30": "isRound()", "c19bbf50": "getLockStatus(address,address)", +"c19bf50e": "resetAllowance(address,address)", +"c19bff31": "Redeem(bytes32,uint256)", "c19c9a21": "CCTHCoin()", +"c19ca8fd": "tmpEthGetCount()", "c19d7808": "MamaBearToken()", "c19d93fb": "state()", "c19da6b2": "canBuy(address,address)", @@ -110848,166 +202854,297 @@ "c19dd320": "cancel2(uint256)", "c19e33ce": "COIN_SUPPLY_ICO_PHASE_0()", "c19e7b00": "WeiCapChanged(uint256)", +"c19f829b": "claimRequest(string,string,string,string,address)", "c1a06de3": "Valens()", +"c1a0c948": "calcVotes(uint8,string,uint256,uint256[])", "c1a12d66": "crowdsaleOpen(bool)", +"c1a13d1a": "viewBalance(address)", +"c1a2007d": "getCurrentSavingStrategy()", "c1a21bf3": "sellerBalances(address,address,uint256,address)", +"c1a287e2": "GRACE_PERIOD()", +"c1a28b38": "setCategory(string)", +"c1a29772": "getBondOraclePrice()", "c1a2a8f4": "boards()", "c1a2babc": "getMemberSince(address)", +"c1a2f7b2": "EDITIONS()", "c1a38768": "STARTUP()", "c1a3bb06": "total_bet_withdrawn()", "c1a3bda5": "randomQueryID()", +"c1a3d44c": "balanceOfWant()", +"c1a45189": "emergencyWithdrawLusdTokens(address,uint256)", +"c1a47c36": "delegateToken(address)", +"c1a5b260": "STATUS_ERROR()", +"c1a69837": "unstakeBNB(uint256)", "c1a6ec6a": "ADVISORY_TEAM_PORTION()", +"c1a70d14": "stakePercentage()", +"c1a720e9": "zLotFutureProfit()", "c1a7db7b": "MtcDailyLimitChange(uint256)", "c1a82cdb": "reissueCertWithID(bytes32,bytes,bytes32,uint256,bytes32,bytes,bytes32,uint256,bytes32)", "c1a85e16": "test_insert_findWithHintNextUpdateTail()", +"c1a87948": "setSuggestion(uint256,string)", +"c1a962b8": "changeTier2Owner(address,address)", "c1a9953f": "checkRokTeam()", "c1aa049d": "getIsPurchased(address)", "c1aa104e": "OpenRetailContract(uint16,bytes32,string,string)", +"c1aa3900": "fundAllocationRate()", "c1aa5d98": "getGameIdByAddress(address)", "c1aa721d": "lockAfterManuallyMint()", "c1aaa717": "_bountySupply()", "c1ab1b54": "RebateCoin()", "c1abbf6a": "addjoinlist_even(address,uint256)", +"c1abd757": "GENERAL_PARTNER_ROLE()", +"c1abfaa3": "_supportMarket(address,address)", "c1ac7902": "playJackpot()", +"c1acbde6": "closeDust(uint256)", +"c1ad0160": "convertTokens(address[],uint256)", "c1ad5bea": "isdeposit()", "c1ad7925": "finalizeFunding(address)", "c1adb83e": "NecashTokenBase()", "c1ae36d0": "carsOf(address)", "c1ae4044": "checkBetColor(uint8)", +"c1ae4a19": "rBalance(address)", +"c1ae58c0": "transferxx(address,uint256)", +"c1ae771e": "inCaseLpStuck()", +"c1ae90c8": "rewardsClaimed()", +"c1aef4f2": "tokenImage()", "c1af5785": "enterLottery()", "c1afdd48": "belowSevenBets()", +"c1affa18": "stopTransaction()", +"c1b0420a": "_normalizeTargetUnit(address,uint256)", "c1b0510a": "GlobalBusinessSystem()", +"c1b05490": "highPersent()", "c1b0561d": "PDTToken()", "c1b056b0": "getNodeLeftChild(bytes)", "c1b06513": "registerEvent(bytes32[])", "c1b07b1a": "receiverOne()", "c1b082b6": "issueOfTokens()", +"c1b0cda5": "grantAccess(address[],bool[],bool)", "c1b0dc2f": "LogPolyClaimed(address,uint8,uint256,uint256,uint256)", "c1b15e44": "_setAllowance(uint256)", "c1b16cb0": "ownerAddAsset(string)", +"c1b1891d": "approveToRouter(address[],uint256)", +"c1b21411": "redeemPositionTokens(address,uint256)", "c1b2dfc1": "gameGiftMaxAmount()", "c1b36489": "QuickUnionPayChain()", +"c1b3aec8": "xkfi()", "c1b3e6ab": "blockedSum()", +"c1b410d4": "xetiPerBlock()", +"c1b43357": "votes(uint8)", "c1b43a17": "secondHighestBidder()", "c1b43af8": "IPchainStandardToken(uint256,string,uint8,string)", +"c1b43c9c": "ManagerPermissionGrantedEvent(address,bytes32)", "c1b466d6": "calculate0xbtcReceived(uint256)", "c1b4aa51": "burnContractCoins(uint256)", "c1b533b0": "getExchangeRateInUSD()", +"c1b5472e": "executeOrderTxn(uint256)", "c1b58f6c": "unlockAllAllocationAddresses()", +"c1b5d181": "addHandle(address,string,string,string,bytes)", +"c1b5f12c": "Lock(address)", +"c1b617ca": "unavailableEtherBalance(address)", +"c1b646fa": "CallProxyForNxCBurn(uint256,string[],string[])", +"c1b64f74": "totalPending(address)", "c1b664de": "setStageCount(uint256)", "c1b668a9": "getBoardInfo(address,address)", "c1b68a7c": "DebitClientOnce(address)", +"c1b6dddb": "undistributedTokenInterval()", "c1b73010": "removePauser_(address)", "c1b74ad8": "propose(uint256,bytes32,address)", "c1b7a892": "AsiaCoin()", +"c1b8411a": "DEPLOYER()", +"c1b85550": "EthMax()", "c1b8847b": "setMaxFeeWithdrawal(uint256)", +"c1b8a1f4": "arrayPushEmpty()", "c1b8b704": "updateGlobalMax(uint256)", "c1b90c7b": "_sendTokens(uint256,address)", +"c1b977bf": "MinContribution()", "c1b99811": "transferPrimordialToken(address,uint256)", "c1b9f177": "bountyReserve()", +"c1ba4e59": "setQuorum(uint256)", "c1ba93e1": "dbkDeposit()", +"c1bb4b54": "collateralTarget()", "c1bb95d0": "TransferConfirmed(address,uint256,uint256)", "c1bbcbef": "MICKTOKEN(uint256,string,string)", "c1bc2664": "ClearView()", +"c1bc87fc": "BonusCreditRevoked(address,uint256)", +"c1bce0b7": "borrow(address,uint256,uint256)", "c1bd1e85": "killFeed()", "c1bd3685": "proposeSolve(uint256,uint256)", +"c1bd4e22": "REFERRAL_LEVEL2_RATE()", "c1bd762b": "wantMyEther()", "c1bd8186": "crowdsalepricing(address,uint256)", "c1bd8ecb": "initializeCrowdsale(address,uint256)", "c1bd9b12": "getShareAddressFromId(uint256)", "c1bdff26": "onNewLoan(uint256,address)", "c1be4031": "XaurumProxyERC20()", +"c1be75f0": "feesDown(uint8)", "c1beb1e1": "MusereumToken()", +"c1bec32c": "getOutExactIn(uint256,uint256,uint256)", +"c1bf1d28": "ClaimUnVotedProposal(uint256)", "c1bf1dcf": "setRegistrar(address,bool)", "c1bf22a9": "XAUToken()", +"c1bf9e58": "withdrawFromPool(address,uint256)", +"c1bff1dc": "readDataByKeyIdx(uint256)", +"c1bff26a": "disperse(address,string)", "c1c02a46": "Atlas()", "c1c03094": "EventBattleOver()", +"c1c0a908": "unlockedstep(address)", +"c1c0c43e": "setCombCardMapping(uint32,uint32[])", "c1c0e046": "rescueAccount()", "c1c0e9c4": "exec()", "c1c1066b": "getCommentsCount()", "c1c11aca": "GitToken(uint256,string,uint8,string)", "c1c11c96": "getSender(address,uint256,address,uint256,uint256,uint256)", +"c1c12330": "updateMarketplacePlatformFee(uint256)", +"c1c1b640": "getRequestStats()", +"c1c1caad": "calcNextAbsorption()", "c1c1d218": "BOND()", +"c1c1ee82": "numberofblockplayer(uint256)", "c1c28d7d": "calNewTokens(uint256)", "c1c379ac": "tokenTwitter()", "c1c3eccf": "vestingPeriodInMonths()", +"c1c40a33": "mulTruncateCeil(uint256,uint256)", "c1c43648": "addAction(uint256,uint256,uint8[6],uint8[6],uint16[6],uint8[6],uint256,uint256)", "c1c4676e": "updateGameCost(uint256)", +"c1c49cbb": "BURN_CARBON_DOLLAR_SIG()", +"c1c53c49": "authorizeNewUsers(address[])", "c1c5897e": "AOMcoinERC20()", "c1c5a3b6": "CaptainSell()", +"c1c5dd27": "setRewardPercent(uint256)", "c1c5de4a": "tryDeposit()", +"c1c618b8": "getPostStateRoot()", "c1c64ecf": "mintPriceBuffer()", +"c1c68b49": "notifyReward2(address,uint256,uint256)", "c1c6c749": "changeWhitelistPrivateStatus(address,bool)", "c1c6d4e8": "addLoanProduct(uint32,uint32,uint32,uint256,uint32,bool)", +"c1c703b4": "Whitelisted(address[])", "c1c723f4": "validateProposedMonarchName(bytes)", +"c1c7283d": "enchant(uint256,uint256[],uint256[])", "c1c74dde": "_setFunds(address,uint256)", "c1c7bc68": "addFreeMineralMulti(address[],uint32[])", +"c1c7e14b": "setMinterPaused(bool)", "c1c8277f": "reclaimOwnership()", +"c1c8ac3a": "totalSupplyCheck()", "c1c8b89d": "Recash(uint256,string,string)", +"c1c8dc2a": "SelfMessage(address,address)", +"c1c90b8e": "Unlock(address,address,uint256)", +"c1c93a73": "getUniswapLastPrice()", +"c1c98d03": "disableLock()", +"c1c99ee4": "CampaignInformation(bytes32,address,string,string,uint256[3],uint256[])", +"c1ca99f8": "batchesInfoOf(address)", +"c1caa322": "swappedAdel(address,uint256)", +"c1caaee6": "getS2()", +"c1cac526": "setMostWeightedTokenAddress(address)", +"c1cb3ea6": "approve_661(address,uint256)", +"c1cbb0d0": "UniswapPairs(uint256)", +"c1cbb555": "setBtcNetDiff(uint256)", "c1cbbca7": "contribute(uint256)", "c1cbbe6c": "getRoundAvailableToken(uint256)", "c1cbdff3": "moreThanSoftLimit()", "c1cc0046": "returnOffer(uint64)", "c1cc0775": "calculateFeeDynamic(uint256,uint256)", +"c1cc57b0": "getResources()", "c1cc6958": "leekStealGo()", +"c1cc7010": "getAllReceivers()", "c1ccaed3": "pageBuyRecordByAccount(address,uint256,uint256)", +"c1cccc70": "nickNames(uint256)", "c1cd1759": "SpicePayroll(address)", +"c1cd1d59": "closePreSale()", "c1cda902": "setTradeable()", "c1cdaae8": "generate(address,address,address,uint256,uint256)", +"c1ce497b": "delayUnlock()", "c1ce53fc": "reflect(string)", "c1ce56eb": "addAccount(address,uint256)", "c1ce6647": "minAmountToGetBonus()", +"c1cea807": "totalLending(address)", +"c1cf66f8": "LogNewRandomNumber(string,bytes32)", "c1cfb99a": "get_balance()", +"c1d021cb": "NFTToken()", +"c1d022cf": "setProfitsContract(address)", +"c1d03657": "_claimableBalancesOf(address)", +"c1d037db": "sendEthFromUserToSC()", "c1d038b2": "getSkillIdByIndexAndLevel(uint8,uint8)", +"c1d0eb52": "setFeeFund(address)", "c1d11037": "updateAddresses(address,address)", +"c1d15049": "zeroWei()", "c1d1f5c0": "BirdToken()", "c1d1faf3": "createAuction(uint40,uint128,uint128,uint40,address)", +"c1d216cc": "AuctionPlatCreate(uint256,address,uint256)", "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)", +"c1d4503d": "setEligibleCount(uint256)", "c1d4691a": "withdrawalTo()", "c1d47a21": "submitPayment(bytes8,uint32)", +"c1d4931e": "Epoch(uint256)", "c1d4bc64": "originalsCount()", +"c1d4c303": "CredentialItemPriceDeleted(bytes32,address,string,string,string,bytes32)", "c1d4f708": "getMwLength()", "c1d55af8": "buy(uint256,address,uint256,bool)", "c1d5725f": "buyToken(address,address,uint256)", +"c1d5bcd2": "fCashtoCurrentCashApril()", "c1d5e84f": "addNewUser(address)", "c1d6036b": "contractExchangeRate(address)", "c1d63ce6": "deleteArrayBytes32(bytes32,uint256)", "c1d66482": "Postman()", "c1d6ab37": "setIsContainerForShareToken(bool)", "c1d6cbd8": "getPlayerPoint(uint32)", +"c1d74258": "SECONDS_PER_BLOCK()", "c1d75bea": "IBM()", +"c1d8f8cc": "deployPowerDeliveryProposal(uint256,uint256,string,uint256,string)", +"c1d92ab2": "getAvailableWinnings(address)", +"c1d9436f": "LockParameters(address,uint256,uint256)", +"c1d955ee": "buyERCIWithDai(uint256)", +"c1d9cf19": "_maxliquidationFee()", "c1d9e273": "nextFreeCount()", "c1da1881": "getPollType(uint256)", "c1da3923": "ICOstartTime()", +"c1da8db5": "allowedProtocol(address)", +"c1db275b": "getGoalCount(uint256)", "c1dbbfb3": "withdrawAllFromRoot()", "c1dbd9b2": "authorize(address,uint256)", "c1dbf5ef": "changePTSBAddress(address)", +"c1dcab14": "change(string)", +"c1ddfb00": "boostFactor()", "c1de0842": "quarterThird()", "c1de93df": "Forwarded(address,uint256,bytes)", "c1de9ef8": "getPositionHeldToken(bytes32)", "c1dfacb2": "getQualifiersPoints(uint160)", +"c1e01725": "Game(uint256,uint256)", +"c1e03728": "getTokenDetails(uint256)", "c1e0e604": "updateUsdPerMEth(uint256)", +"c1e0fc09": "setStakingBalancePerShard(uint256,uint256)", +"c1e107cc": "B1(bytes)", "c1e10f65": "distributeeBitcoinCashMedium(address[])", +"c1e1261f": "Fee(address,uint256,uint256)", +"c1e14fb2": "StockCancelBuyOrder(uint256,uint256)", "c1e1955e": "getaddressfocuscardid2(address,address)", "c1e1b327": "adminCollectPastShopFund()", +"c1e22012": "asm()", +"c1e31de9": "SUPPORTED_ORDER_VERSION()", "c1e31eab": "SERVER_TIMEOUT()", "c1e3bd3e": "getParticipants(uint256)", +"c1e3cf09": "TokenAllowance(address,address,address)", +"c1e3f90a": "ItemBought(uint256,uint8,uint256,address,address,uint256,uint256,string,string)", "c1e41f38": "COMPANY_TOKENS()", "c1e457c8": "experienceDelay()", "c1e472be": "returnNotes(uint256)", +"c1e47662": "rejectedMintBalance(address)", +"c1e481e3": "setIssuerStatus(address,bool)", "c1e4884d": "setSecondStageStartsAt(uint256)", +"c1e49241": "testStakingRewardsDeployment()", "c1e4dfda": "setPriceWei(uint256)", "c1e50f3c": "internalAddManager(address)", "c1e5202a": "isUserMakerFeeEnabled(address,uint256)", "c1e52775": "addDenomination(bytes8,address)", "c1e5304a": "CreateNewDraw(uint256,bytes)", +"c1e5325a": "addressV3(uint256)", +"c1e58087": "buoyPresale()", "c1e5976e": "getStarkKey(address)", "c1e59a50": "Example4(string)", +"c1e601a9": "endPoolLifeCircle()", "c1e6102b": "LunyrToken(address,address,uint256,uint256)", "c1e65cb9": "BTRS()", "c1e68672": "totalWhitelistedFunding()", @@ -111015,11 +203152,14 @@ "c1e6c506": "TokenPriceInWei(uint256,uint256)", "c1e70e63": "startManualPeriod(uint256)", "c1e71903": "getResults(uint256,string)", +"c1e7249b": "setVotingPeriodBlockLength(uint256)", "c1e7310a": "signEA(uint32)", "c1e74d71": "minPresaleContributionEther()", "c1e80334": "_acceptImplementation()", "c1e99a0e": "isInitialInvestor(address)", +"c1e9a905": "ownersSupply()", "c1e9c53e": "Lottery(uint8,uint256)", +"c1ea3768": "sale_detail(uint256)", "c1ea8b93": "preCrowdsaleTokens()", "c1eac693": "ArisaCoin()", "c1eb1840": "canBurn()", @@ -111027,186 +203167,380 @@ "c1eb354a": "setlockall(uint256)", "c1eb50a7": "LinaAllocation(address,uint256)", "c1eb5ddd": "DEV()", +"c1eb87d0": "setExtraDelay(uint256)", "c1eb8c89": "wihtdraw()", +"c1eb9ee0": "takeEarnings(address,uint256)", +"c1ebb47b": "swapBack(uint256)", +"c1ebb4ac": "openNextDraw(bytes32)", "c1ec10f4": "RigoBlock()", +"c1ec1149": "getWaifu(uint256)", "c1ec4a2a": "RegisterContract()", "c1eca4b0": "checkCanAddStockProfit()", +"c1ed05be": "registration(address,uint8,bytes32)", +"c1ed06b8": "crowdsaleDeposited(address)", +"c1ed26b9": "generatePassword()", "c1ed41fa": "appliedPresale()", "c1ed54a1": "isBetValid(uint256,uint256,bytes)", +"c1ed5a74": "stakerStakedContracts(address,uint256)", +"c1ed6092": "awardOpenBounty(uint256,address)", "c1ee22dd": "EMISSION_FOR_SALESTAGE5()", "c1ee3375": "autoTransferApproved(uint256,uint256)", "c1ef098b": "storeHarvestOperationByRegulator(string,string,string,uint32,uint16,uint16,string)", +"c1ef2838": "replaceOrders(uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])", +"c1ef665c": "setMscAddressAndId(address,uint256)", "c1f04f3c": "allWeights()", "c1f06e89": "changeYUMOAddress(address)", "c1f0dac1": "test_largeDeviationNotPermitted()", "c1f0e2c3": "createGameRound(uint256)", +"c1f0ea3c": "PermissionGranted(address)", "c1f10663": "withdrawAccumulatedFees(address)", +"c1f16904": "emergenceChangeLend(address)", "c1f16bdc": "getWeiBalance(address)", "c1f18e38": "isExpired(bytes)", "c1f19220": "summFounders1()", +"c1f1b1b5": "getPair()", "c1f1d116": "internalVote(bytes32,address,uint256,uint256)", +"c1f2d589": "giveANXToUser(uint256)", "c1f307c9": "_isTime()", +"c1f3bff1": "CurrentBlockNumber()", +"c1f4381d": "changeReceivers(address,address)", "c1f45e80": "sendForPreICO(address,uint256)", "c1f52604": "winningPrice()", +"c1f55c45": "getReceived(address)", "c1f573ca": "bidInAuction(uint256,uint256,uint256)", "c1f602e0": "intoRoom(uint256)", "c1f62946": "getSecretRevealBlockHeight(bytes32)", +"c1f62cc9": "totalTransformLocked()", "c1f64cb0": "supportedRoleList(uint256)", "c1f77309": "assignedPayoutAddress()", "c1f7c539": "initPricer()", "c1f8056b": "createAvatar(address,string,uint256)", +"c1f82571": "deflationEnabled()", +"c1f835f2": "uniqueIdentifier()", +"c1f919e5": "changeDataBaseAddress(address)", +"c1f970de": "MonthsApyPercentsDenominator(uint256)", "c1f979ab": "add_recent(uint256)", +"c1f9fdbb": "Seed()", "c1fa1ed0": "assertEq(bytes32,bytes32,string)", +"c1fab09f": "getActiveStakesById(uint256)", "c1fae25b": "receiveAirDrop()", +"c1fb2ea2": "ovmGETNONCE()", "c1fb7c34": "hmin(uint128,uint128)", "c1fb9b9e": "developer_How_To(string)", +"c1fbf442": "approve_765(address,uint256)", +"c1fc006a": "votingContract()", +"c1fc13bd": "setMultiplicatorWar(int256,uint256)", +"c1fc62c0": "shortCounter()", +"c1fc9582": "cancelSellOrder(uint256,address)", "c1fcf863": "getSoftwareExecRecord(uint32)", "c1fd2580": "spendable_supply()", +"c1fd4137": "setBrand(string)", "c1fd4339": "createMarket(bytes32,uint256,uint256,address)", +"c1fd9e2b": "_getMULTIPLIER()", +"c1fdc0d6": "isvalidOrg(address)", +"c1fe3e48": "stETH()", "c1fe5281": "minPurchaseNum()", +"c1feb1a6": "requestAsyncEvent(string,string)", "c1ff808d": "changeBonus(uint256)", "c1ffc0a5": "MinimumEthereumInvestmentUpdated(uint256,uint256)", +"c2001148": "releaseEther(address)", +"c200659e": "savingAssetConversionRate()", "c2006a18": "set_fixedFeeInCWC(uint256)", "c201293b": "setCollateralPoolContractAddress(address)", +"c20137fb": "indexOf(bytes32,bytes32)", "c20155df": "ethRate2()", +"c2017243": "transferPlusReceiveData(address,uint256,bytes)", "c201df97": "UnLockAddress(address)", "c2021d1b": "maxTeamBonusBps()", +"c202ea4c": "setTax(uint8)", "c203367a": "EnddatePresale()", +"c2038236": "balanceOf(bytes32,address)", "c2038560": "setOutcome(bytes,bytes)", "c203d77f": "setSaleFinishTime(uint256)", +"c2042202": "maxSlippageRate()", "c204505a": "testFailRetractLatestRevisionDoesntHaveAdditionalRevisions()", "c204642c": "airdrop(address[],uint256)", "c204b288": "InvestorChanged(address,address)", "c204f9f1": "_transferFromToICAP(address,bytes32,uint256)", "c2052403": "payOut()", +"c205316f": "withdraw_single(uint256,uint256)", "c20547b3": "getGameAmount(uint256)", "c205afd4": "deferredTotalTokens()", +"c205c6ef": "dydx(address)", "c205e64c": "revokeInsertAgentAuthorization(address)", +"c2060071": "getAPMNamehash(string)", "c20615ed": "ownerWithdrawn()", +"c20632ba": "addPool(address,address,uint256,uint256)", "c20652fe": "setApiAddress(address)", +"c2082687": "approve_158(address,uint256)", "c2083f55": "lacksFunds()", +"c2085cba": "characterNo()", +"c208ddce": "getDivdLoadV2Send(uint256)", +"c2091cfb": "getLockedAddressesCurrently()", "c2091d0e": "getPatron(uint256)", +"c20938e0": "withdrawERC20(uint256,address)", +"c209818a": "lockCard(uint256,string)", "c209fbe9": "change_notice(string)", +"c209fd9f": "swapDaiToEth(uint256,uint256,uint256)", +"c20a0382": "typeOfContract()", +"c20a0fd2": "crowdSaleTokens(address)", "c20a20d6": "setBlipTokenAddress(address)", "c20a6ae9": "EDMToken(address,uint256)", +"c20b7a35": "getTicketPrice(address,string,uint256,uint256)", +"c20baa28": "mint_sell(uint256)", +"c20bc1d7": "ProjectFailed(uint16)", +"c20bd5c0": "VoteOnProposal(uint256,bool,uint256,uint256)", "c20c0f3a": "betsForLevel(uint256)", +"c20c1931": "smgRelease(uint256,bytes32,uint256)", "c20c1d9b": "newWithdrawCommission(uint256)", +"c20c2c10": "setApprovedAccount(address,bool)", +"c20d1256": "_MOVE()", +"c20d49f6": "disallowAccount(address)", +"c20dc0e0": "freezeAccountAndAddToken(address,uint256)", "c20dcbf7": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", "c20e346f": "unFrozenToken(address,uint256)", +"c20e9c21": "YEAR2_BOUNTY()", "c20ec5dc": "numberOfFriends()", +"c20eec7b": "withdrawPrize(uint256)", +"c20f6dd3": "cityPopulation(uint256)", "c20f966b": "Utcoin()", +"c2100e5d": "getRewardBalanceByOwner(address)", "c2108a92": "calculateBalance(uint256,uint256)", "c210c623": "getKeys(uint32)", "c21191ae": "GechainCoin()", +"c211b705": "setIsStartUserSales(bool)", +"c211f9a4": "getLoanOriginationFeePercentage()", +"c2120922": "FUND_DAILY_USER()", +"c2124687": "getUniswapContract(address)", "c2127e03": "getMyShrimp()", +"c212b393": "ownerToNickname(address)", "c212bad5": "dropModule(string,bool)", "c212cffa": "NUGOLD()", +"c2133136": "update_balance()", "c2134b23": "addRecoverer(address)", +"c21357d7": "Dispute(address,uint256,uint256)", +"c2136ca1": "addMStableExchangeErc20Contract(address)", +"c213c373": "announceConditionQuestionId(bytes32,uint256,uint256)", +"c2146cb2": "_enforceSelfCallFrom(bytes4)", +"c214affd": "tokyo()", "c215290a": "frozenUntil(address)", "c215e800": "currentSubRound()", +"c215f1be": "finalizeTopExit(uint16)", "c2161c31": "getStringHash(string)", +"c2161c88": "checkFinalize()", +"c216212a": "packages(uint256)", +"c2164a4b": "sref(address,uint256)", +"c2167cc8": "bucketTransferAmountInfiniteLeverage(uint256,uint256)", "c2168ecd": "removeMintContract(address)", "c216c0d3": "addCredits(address)", +"c2171f5c": "setAXISAddress(address)", +"c2173d43": "isRegisteredAsNativeToken(address)", +"c2174598": "Farm(uint256)", "c217a724": "spendWithGasAndData(address,uint256,uint256,bytes)", "c217c0e1": "ClickGemTokenERC20()", +"c217cd08": "batchStartMining(uint256[],uint256[],address[])", +"c2186301": "investDFL(address,uint256)", +"c219043b": "modifyPermission(address,uint256)", "c2190c94": "registerSettlement(uint64,address,address)", +"c21934c9": "reserves(address[])", "c219c28c": "votingTokenAddress()", "c219d326": "getData_14()", +"c21a319d": "createOrderLegacy(uint256,uint256,uint256)", +"c21a82e4": "PaymentChannel(address,address,uint256,bytes)", "c21aa2e4": "PoHarj()", "c21ab7f9": "createToken(address)", "c21abf05": "tatalEthFromBuyer()", +"c21ad2a4": "XUSD()", "c21afa55": "MintingManagerRevoked(address)", "c21afe12": "schedulePriceUpdatesRolling(uint256,uint256,uint256)", +"c21b27c7": "mint_SFI(address,uint256)", +"c21bae0c": "lastClaimTime()", "c21bbe56": "SetupDone()", "c21c45e3": "iconRate()", "c21c5ee1": "fixSpecications(bool)", "c21c9c21": "validEvent()", +"c21ca275": "monsterToOwner(uint256)", +"c21ca3c9": "mul(uint112,uint112)", "c21d0204": "SetEvaluate(bytes32[],uint8,uint64[])", +"c21d2720": "extendLGE(uint256)", "c21d5ab7": "setNode(address)", +"c21d74fe": "gContractWhitelist(address)", "c21db033": "removeSupplier(address,address)", +"c21dbe90": "IndependentSellerJoined(address,uint256,address)", "c21de274": "transferReverseProxyThirdParty(address[],uint256[],uint8[],bytes32[],bytes32[])", "c21e5712": "makeLiquidCor()", "c21ea693": "retraitStandard_3()", +"c21ebd07": "pancakeRouter()", "c21ec92c": "getAssetIpfs(uint256)", "c21ed112": "genesisVirus()", "c21fb125": "SpecificApproval(address,address,uint256)", "c21fcffb": "DIYTubeCoin()", +"c21fe061": "CKNPrice(address,uint256,uint256,uint256,uint256,uint256,string)", +"c220101d": "getProceed(address,uint256)", +"c2203592": "getTargetPoolId()", "c2205ee1": "_authority()", +"c2206ae7": "getCitizenRefBy(string)", "c22082ab": "EveryCoin(address,uint256)", +"c22089f5": "maxTotalIdoUSDAmount()", +"c2209acb": "verifyClaim(bytes,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[])", +"c221c620": "institutionOwners(bytes32)", +"c221dfe7": "tokens3()", +"c22200ec": "allMembers(address)", +"c22215b8": "fulfillAndAccept(address,uint256,address[],string,uint256,uint256[])", "c2222b80": "claimSubscriptionDeposit(uint256)", +"c2229fea": "mintNft()", "c222ef6d": "periods(bytes32)", +"c2231ad2": "setAllowReentrantRequests(bool)", "c2234f67": "CONVERSION_DENOMINATOR()", "c2235e74": "getTotalAmountOfChatMessages()", "c2236b26": "setICO3Phase()", +"c22378ff": "initiateFlashLoan(address,uint256,address[])", "c2239daa": "setselfdropamount(uint256)", "c223f557": "stopRedeeming()", "c2248877": "getBarCodeDataCount(bytes32)", "c2248c22": "changeOldTokenReward(address)", +"c224da32": "_totalEthInvestedLevelTwo()", +"c225083c": "withdrawEtherByOwner(uint256)", "c2250a99": "transferStoreOwnership(address)", +"c2257337": "MaxHumidity()", "c225752c": "OneChanceCoin(string,string,uint8,address,address)", "c22598d2": "BitClemm()", "c225bf03": "resetContractDeploymentDate()", +"c2264c6a": "_getRValues(uint256,uint256,uint256)", +"c226793b": "initialize(address,address,address,address,address,address,uint64,uint256,uint256,uint64)", "c226d279": "setMiniPoolEdit_7(string)", "c226d9ee": "doTest()", "c2276090": "settleBet(bool)", +"c227c30b": "testMakeCheckpoint(address[],uint256[],uint256,bytes32)", "c227cee0": "shutThatShitDown()", +"c2289384": "ContractorStartedJob(bytes32,address)", "c2289576": "AddTitle(uint256,string,string,string,uint256)", +"c2289db6": "firmantesAutorizados(uint256)", +"c228b451": "voteEvent(address,uint256,uint256,uint256,address)", "c228bcc6": "getFillVolumes(bool,bytes,uint256,uint256)", +"c228e171": "approve_124(address,uint256)", +"c2294b65": "EcdsaSig()", +"c22986f2": "getMsgsLength()", "c2299e33": "shutdownMarket(bytes32)", "c22a146c": "Unlock(address,string,bytes32)", +"c22a2bfe": "swapToReenter(address)", "c22a933c": "setBaseDeposit(uint256)", "c22ab4e0": "reservedWallet()", "c22af7ff": "ComputeBuy(uint256)", +"c22b82f0": "getLiquidityPoolByReserveConfig(address[],uint32[])", "c22c4f43": "services(uint256)", +"c22c91a5": "approveTokenForSnipe(address,address,uint256)", +"c22cb04e": "addressTreasury(address)", +"c22ccad6": "approveCollateralPool(address,uint256)", "c22d6c3c": "setArenaInterface(address)", +"c22dc722": "setPause(address,bool)", +"c22eb409": "_battleGrounds(uint256)", +"c22ebf06": "_extractLitSentByMistake(address)", "c22f0ee2": "transferManagers(address)", "c22f1c54": "_initializeAccount(address,address,uint256,uint256)", +"c22f20cc": "baseInfoUrl()", +"c22f690e": "FOOTSTONE_ROUND_AMOUNT()", "c22f8250": "updateStandard(bytes4,bytes4)", "c22fc384": "exitScam()", +"c22fd76f": "callIncomeDailyTokensTrigger(uint256)", "c2304c4a": "addExplicitPosition(uint32,int64)", +"c230fd11": "startNFTReward(uint256)", +"c2311824": "minIdoUSDAmountEachDeposit()", +"c23121dc": "sponserDeposite(uint256)", "c2314be4": "CONFIG_FEES_DIV()", +"c2315af3": "addSubmissionManually(address[],string[])", +"c23177b2": "amountSupplied(address,uint256)", +"c231a2fa": "adminExecute(bytes,uint256)", "c231bace": "setMigrationTarget(address)", "c232209e": "_verify(address,string)", +"c2327ad4": "eUpdatePayout(uint256,uint256,uint256,bool,address)", "c2328516": "disablePrivateFund()", "c2329e5f": "_isNotOnSale(uint256)", +"c232e1c8": "workingRateNumerator()", +"c233b887": "BonustChanged(uint256,uint256)", "c233e870": "isLatestPatchTree(bytes32,bytes32)", +"c2341238": "startUNIX()", +"c2344914": "bAlphaMaster()", +"c234feb6": "setSysAdminSuccessShare(uint256)", +"c2351cdd": "balanceOfLpPair()", +"c23532ca": "setEnumPayable()", "c2353918": "getCount(uint256)", "c2356d23": "mintChest(address,uint16,uint24,uint24,uint8,uint8)", "c235a5c7": "getGameStart(uint256)", "c235e858": "VendorInterface(address)", "c2362dd5": "lastEpochBlock()", +"c2363c2f": "setLockupList(address,uint256)", "c23693e0": "multiAccessRequired()", "c23697a8": "check(address)", "c236cc66": "GeneralUpdate(uint256,uint256)", +"c236f5af": "createMetaCoin(uint256)", "c2370a62": "openGameResult(uint256,string)", +"c237108f": "increaseAllowanceWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"c2376dff": "rebaseOptOut()", "c237898d": "getOwnerBalanceInMilliTokens()", +"c237d392": "balanceOfAccount(address)", "c2381296": "beginPwn()", +"c2384f59": "depositCollateral(uint256,uint256,uint256)", "c2385fa6": "right78(uint256)", "c238999b": "dislikeTrack(address,bytes32)", +"c238d20f": "_setProperties(uint256,uint8,bytes32)", "c239dfe0": "PermissionAdded(address)", +"c239f6ff": "numberWithdrawalsPending()", "c23a25ba": "getRoundBetOrigin(uint256,uint256)", +"c23a5cea": "withdrawStake(address)", "c23a7427": "createMultipleWikiPages(string[])", "c23a9e84": "getuserinverst()", +"c23b4298": "changeWethTokenAddress(address)", "c23b4b5b": "bountyShare()", +"c23b60ef": "MAIN_GOVERNANCE_INFO_TAG()", +"c23befd4": "getMinWrapDepositAmount()", +"c23c1e18": "triggerChangeAdminKeyByBackup(address,address)", +"c23c783e": "NAV_FEED()", "c23c87d5": "play(bool)", +"c23d91bd": "accrueInterestSnapshot()", "c23da3a9": "initialSaleEndDate()", +"c23dbe39": "getNoOfAddress()", +"c23dc031": "add(uint256,address,uint32,bool,bool)", "c23de962": "DefaultActionCalled()", +"c23df959": "updateReferralRewardPerUnit(uint256)", "c23e1cea": "SaleTokens()", +"c23e3802": "allAds(uint256)", +"c23e61b9": "moveAccount(bytes32,address)", "c23ec301": "KSScidTOKEN()", +"c23eecda": "transferTokensToCommunityPool(uint256)", "c23f001f": "balances(address,address)", +"c23f85d6": "getStats(address)", +"c23fec51": "getCycleIndex(uint256)", "c23fed45": "setEscapeRequest(uint32,int256,uint32)", +"c23ffe6b": "ethpool()", "c2407089": "CursedToken()", +"c240aeac": "SetLog(bytes32,uint256)", +"c240db9b": "mintTrancheThree(address)", "c2410a69": "lockCostPerHour()", "c2412676": "Token()", +"c24188be": "emitNominRemoved(bytes4,address)", +"c2426345": "usdt_withdraw(uint256)", "c2427f76": "getBidID(address,bytes32,uint256,uint256,uint256,uint256)", "c242afaf": "bet(uint256,uint256,uint256[],uint256,address,bytes32)", +"c242feb3": "transferWrongSendedERC20FromContract(address)", "c243431e": "AnalyticProxy()", +"c243580d": "insert(bytes32,uint128,uint16,uint16,uint16,bool,bytes32,bytes32,uint256)", "c24366f0": "setKYCProvider(address)", "c243bdee": "isHolderOwnAddress(bytes32,address,address)", +"c2442f93": "farmToken()", +"c244c516": "signal_portfolio_diff_percent()", +"c244e254": "ETH_YFEED()", "c24504b7": "internalBuyTokens(address,address,uint256)", +"c24546e7": "_operateFee()", +"c2458d6b": "totalSupply(uint256,uint256)", +"c2458ef7": "postLikeCount(uint256)", "c245c1bc": "ownerBurnToken()", +"c246627a": "cashedOut(address)", +"c246c8e0": "ZapOut2PairTokenWithPermit(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"c246cc48": "acceptanceCasket(address,uint256)", "c2473378": "consortiumPlaceholder()", "c247620d": "getArtistInfo(address)", +"c24905af": "startAirdropTSLF(uint256,uint256,uint256,uint256)", "c2490a67": "removeCardOwner(uint64)", "c24924d6": "setQueryFee(uint256)", "c2494dbf": "transferOnWallet()", @@ -111217,28 +203551,52 @@ "c24a8908": "token_airdrop_cnt_max()", "c24a9674": "finalizeLastRound()", "c24ad463": "Refundpot()", +"c24b074f": "setForcedDecimals(address,uint256)", "c24becf3": "getLastTier()", "c24c153d": "addRound(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c24ca1d9": "nullifierHashDeposit(bytes32)", "c24d316e": "UNITDummyPaymentGateway(address)", +"c24d3186": "getInitialDiscount()", +"c24d3f63": "getAllowedErc1155ContractsLength()", +"c24d4c6f": "ethToTokenSwapInput(uint256,address,uint256)", "c24de0e4": "halvingSubsidy(uint256)", "c24dec82": "TOKEN_BUSINESS()", "c24e1fc1": "issuedSupplyRatio()", +"c24f3621": "EVALUATE()", +"c24f4d0c": "paidRewardsOf(address)", +"c24fa67a": "initilaize(uint256[],address,address,uint256,uint256,uint256,string[])", "c24fe21b": "transferLockup()", +"c250283c": "deposit(uint256,address,address,address)", "c2502d34": "claim_price_money()", "c2506eee": "setO3(address)", "c2507ac1": "getTokenAmount(uint256)", "c2507ef7": "_createPanda(uint256,uint256,uint256,uint256[2],address)", +"c2508c46": "removeTokenPauser(address)", "c250a312": "active_withdrawable()", "c250ef46": "refSystem(uint256,address)", +"c250f1ea": "updateUser(uint256,uint256,bool)", +"c25116b0": "twinAddress()", +"c2513f11": "setExecutorAddress(address)", "c25193ad": "lcm(int256,int256)", "c251a4e9": "G2Ufund()", +"c251adeb": "PERL()", +"c251ebf2": "fulfill_random(uint256)", +"c25234d9": "updateArtWorkCreationTime(uint256)", +"c2523a35": "createAssignedAthlete(address,string,uint256)", +"c252a33d": "getMinimumRequiredRTKAmount()", +"c252bbab": "Tournament(address,uint256,uint256,uint256)", "c252ca75": "getBonusPercent(address)", "c252d844": "rest_time()", "c253400b": "RPS(address)", +"c2534fce": "fulfillWithdrawal(bytes32,bytes32,uint256,address)", "c2535bf0": "COOLCOIN()", +"c2548c19": "addMoreBonus(uint256)", +"c254e2d4": "upgraderAddress()", "c254e4db": "SFT()", +"c254ffb7": "setCOO3(address)", "c2552497": "impl_mining(address,bytes)", "c255343e": "targetUser()", +"c255dd00": "benefactorFunds(address)", "c255fa40": "updateTotal()", "c255fb17": "getRefBalance(address)", "c25615c0": "joinOneLottery()", @@ -111246,99 +203604,165 @@ "c256ea58": "get_receiverCryptobank(uint256)", "c2571a0a": "percUp(uint256)", "c2572c51": "advisorsAndPreICO()", +"c257581d": "addWinBlock(uint256)", "c2577661": "getBallotPapper(uint256,uint256,uint256)", +"c257a46f": "writeData(uint256,string,string,string,string,string)", "c257c851": "calculateEtherReceived(uint256)", "c257eabb": "etherPaid()", "c257f3ab": "getNumberOfShipsByOwner()", +"c2582288": "addPairToTrack(address,bool)", +"c258b116": "Removed(bytes32)", "c258ff74": "List()", +"c25904fd": "gof()", "c2596b1e": "getDragonPrice(uint256,uint256)", +"c2599054": "setMaxInterestRate(uint256)", +"c259e9a7": "ethfee()", +"c259f0ae": "blockPayouts()", +"c25a40c7": "get_random_oneForZero_priceLimit(int256)", "c25a796e": "setHardcupFalse()", +"c25a7ff8": "voteVoid(address)", "c25ab8b0": "iOSCoin()", "c25acada": "Bithereum()", "c25ae09f": "EthealNormalSale(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"c25b1eaf": "blockchain(uint256)", +"c25b25bd": "setupFeeRecipient()", "c25b345a": "VivekRohitVibhayToken()", +"c25b49f5": "deltaWithdrawAllTokens(address)", +"c25ba112": "setStage(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c25c22ee": "stageTokenMul(uint256)", +"c25c47ce": "_rewardPerWeightStored()", +"c25cc8af": "viewGovernanceLevel(address)", "c25cf1d0": "changeLockPeriod(uint256)", +"c25cf2d3": "calculateFORKAllocate()", +"c25d08d3": "AllETHINVESTED()", "c25d0ac1": "tgeSettingsPartInvestor()", +"c25d0bab": "tokenBallots(address)", +"c25d8da9": "rewardTotals()", +"c25db8f6": "EthIn(uint256,uint256,address)", +"c25de16b": "paintingIndexToApproved(uint256)", "c25e6908": "ultimateOutcomes(bytes32)", "c25f1901": "addThing(bytes32,string,string,string)", "c25f1afe": "SponsorAdded(address)", +"c25f3cf6": "daos(address)", "c25f75fc": "pantry()", "c25fe1a4": "changeHoldingTax(uint256)", +"c260089f": "numberOfCanceledHashesOfMaker(address)", +"c2606c2f": "registerPresale(address,address)", "c2606d99": "BITTECHToken()", "c2608314": "getJntBeneficiary()", "c260f681": "IsBoilerValid(uint256)", "c2610cda": "SecretNumber()", "c26181e0": "censorUser(address,bool)", "c2619a5a": "AdministratorAdded(address,address,bool)", +"c261fa36": "mystring()", +"c26210c8": "fobo()", +"c2621a29": "upTransferFrom_(address,address,address,uint256)", +"c2624e1e": "FEE_MAX()", "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()", +"c2646d89": "payerRefundAddress(bytes32,uint256)", "c264786f": "pauseBlockNumber()", +"c2647d85": "GOB()", "c264a063": "withdrawExcess()", "c264a77c": "setSettleTimeout(uint256)", "c2656473": "CROWDSALE_LIMIT()", "c265a6c0": "KRCPreSaleContract(uint256,address,address)", +"c265b1d8": "binSize()", "c26613d5": "LogRebalance(address,bytes32,string,uint256,uint256,uint256)", "c2664609": "submitStackholderTransaction(address,bool)", +"c266c59f": "unsubscribeOptionByContract(uint256)", "c2674780": "freecommunitycoin()", "c2676e39": "VAToken()", "c267e4b8": "previousWeiBalance()", +"c2681126": "TransactionSentToShapeShift(uint256,address,address,uint256)", "c26875a4": "calculateCellBuySimple(uint256)", "c268e777": "setDailyHourLimit(uint8)", "c268e93f": "recordShareholders(address,address,uint256)", +"c268f9ba": "initialMint(address)", "c269014b": "getMemberId(address)", +"c2690abb": "createContractemoji(string)", +"c2692760": "createRepository(string,string)", +"c2693279": "lt(uint256,int256)", "c2695a25": "Rivercoin()", +"c2697420": "addLiquidityETHOnly(address)", +"c2698ff3": "brokerPercents(bytes32,address,address)", "c2699b1d": "getFirstBuyLimit(bytes32)", "c269f263": "PRETDESupplyRemaining()", "c26a331d": "bonusProvider()", +"c26a5339": "setLoanOriginationFeePercentage(uint256)", "c26aa3c9": "lockUnicorn(uint256)", +"c26aa810": "totalAmountSwapped()", "c26b41e7": "totalUETsSold()", +"c26b6b9a": "f(uint256[][])", "c26b7ce9": "CashTelexToken()", +"c26b8af7": "_betaMax()", "c26b93df": "vote(uint80,uint256)", "c26bacd1": "removeDriver(address)", +"c26bc73c": "playNextSong()", "c26c12eb": "getQuorum()", "c26c7472": "addTimeToExpiry(uint256)", "c26c84ec": "setBI(bytes32,int256)", +"c26cfecd": "EIP712_EXCHANGE_DOMAIN_HASH()", "c26d0412": "ethRate1()", "c26d0c2c": "emitWorkPaused(uint256,uint256)", "c26d69e1": "OnePercentGift()", "c26d7daa": "startGladiatorBattle(uint256)", +"c26dd077": "approve_170(address,uint256)", "c26dd189": "jade(uint256)", +"c26f6d44": "setWorker(address)", "c26fe7ce": "releaseVestedTokensFor(address)", +"c270b53c": "swapv2BRRR()", "c270cbeb": "BtcThumb(uint256,string,uint8,string)", "c270ce28": "rdCollectorAddress()", "c270d7cb": "getPlayerRoundWinningInfo(uint256,address)", "c2710949": "calcValuePerShare(uint256,uint256)", "c2714a97": "addBRA(address)", "c271ca90": "numMomentsOf(uint256)", +"c2722916": "postProcess()", "c2722ecc": "getStore()", "c2723d2e": "token_transfer(address,address,uint256,bytes)", +"c272d5c3": "callGasPrice()", "c272f73e": "burnSignature(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", "c27382d9": "buyAndPlayGame(uint256,uint256,address)", "c273b05f": "spentParsecs()", +"c2742f9a": "FXS_FRAX_UNI_STAKING_CONTRACT()", "c27509cf": "investDirect()", +"c2750d47": "mkb()", +"c2750f99": "getTotalFunding()", "c27549d9": "setRemainders(uint256,uint256)", +"c2755ae7": "setProductAddress(address)", +"c2758fd7": "hatcheryBulls(address)", +"c275d81b": "applyAddToken()", +"c275fe54": "addressConfig()", "c276086f": "createProducer(bytes32,uint256,bytes32)", "c2761031": "k(uint256,uint256)", "c2765b77": "setLegalToken(address)", "c276963f": "tabsOneEthCanBuyICO()", "c2769b11": "renounceVesterManager()", +"c276d7e2": "canceledOfHash(bytes32)", "c276dce3": "internalForward()", +"c276f013": "MathTo128(uint256)", "c2775347": "haltsTrades()", "c2777ce3": "currentEtherRateInCents()", +"c277b57f": "isRouterSupported(address)", "c277f1ac": "fromId(uint256)", "c277fe56": "pause(bool,string)", "c2783ee5": "viewCrowdSaleLive(bool,bool)", "c2784966": "TkoWhitelist(address)", +"c2791025": "brrr10x()", "c279d042": "product4_sell()", +"c279fb15": "historyOutTokenForExchange(uint256)", +"c27a500d": "getAllEvents()", "c27a65c1": "changeEthPriceQueryDelay(uint256)", "c27a74d0": "catOwners(uint256)", +"c27abace": "setPayments(address[],uint256[])", "c27b1ed9": "getConversionRateFactor()", "c27b2c2d": "collectEarnings()", +"c27b5166": "issueRebalancingSetWithERC20(address,uint256,address,uint256,bytes,bytes,bool)", "c27bc67c": "configureKeys(uint32,int256,bytes32,bytes32,uint32,bool)", "c27bc7b2": "fortifyClaims(address,uint16[],uint256,bool)", "c27c327e": "changeNewRubesUntilPayout(uint256)", @@ -111346,56 +203770,89 @@ "c27d1580": "getNorsefirePrice()", "c27d607b": "lastEvidence()", "c27d7721": "create(uint256[101][])", +"c27d8866": "newRateChange()", "c27e7398": "getLockedTimeUserInfo(address,address)", +"c27ec289": "_encode_sol_bytes16(bytes16,uint256,bytes)", +"c27f194a": "swapUsdToZebi()", +"c27f2db7": "bloodBanks(address)", "c27fc305": "f1()", "c280541c": "buy(uint256,address,bytes32)", "c2808d1a": "MinSum()", +"c2809700": "monthlyDeposit(address,uint256,uint256,uint256,bool)", +"c2812634": "getLatestUnlockEndTime()", "c2812f74": "triggerMinCap()", "c281309e": "feeTake()", +"c2817ec9": "_execute(address,bytes)", "c28196b1": "addImmigration(address)", "c281a013": "FinalizableCrowdsale(uint32,uint32,uint256,address)", "c281d19e": "cbAddress()", +"c281fb72": "accountStorage()", +"c2829ead": "freezeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c283226d": "reclaimTokens(string,string)", "c2832430": "withdrawForfeited(address,uint8,address)", +"c283f7ba": "setAllowlistAddr(address,bool)", +"c28427bc": "setWaifusAddress(address)", "c2843a14": "addInviterValue(uint256,uint256,address,address)", +"c2844915": "receive_asset(bytes32)", "c2844c60": "emitJobRatingGiven(address,address,uint256,uint8)", "c2844ebf": "isCustomerAlreadyRegister(address)", "c2845184": "SUPPLY_FOR_REFERAL()", +"c28482fd": "BuyOrder(address,uint256,uint256)", "c284ab55": "eLYQD()", "c284cdc5": "GetDescript(string)", +"c284d621": "LaserProtocol(address)", +"c2850410": "encodeClaim(address[],uint256[],uint256,uint256)", "c2852f38": "pauseContract(uint256)", "c2856ca9": "presoldMax()", +"c285831d": "earliestStartTime()", "c285a245": "preferredSaleTLYperETH()", +"c285ac47": "updateCometStore(address)", +"c285c820": "stakeInitialIndex()", "c285daf9": "Xoflife()", +"c2861176": "getUserOut(string,string,uint256[12])", +"c2862bce": "functionLike(address,uint256)", "c286ba5b": "unfreezeAccountTimeAndValue(address)", +"c286d923": "addCandidate(string,string,uint256,string)", +"c286eebe": "setMinInterestRate(uint256)", "c286f3d9": "SetLockAddress(address)", "c287820a": "kittensSold()", "c287fa72": "calcDiviDistribution(uint256,uint256)", "c288ab9d": "getUserCurrentMartialId()", "c288eeee": "nowPeriod()", +"c2893a95": "serveBeer(address,uint256)", "c2897b10": "stand()", "c289adfa": "getAssetPrice(uint128,uint128)", "c289dbe8": "first_withdrawal(uint256)", +"c289f149": "_claimedNFT(address)", +"c28a2ceb": "convertEth(uint256)", "c28a56f1": "checkReceiptProof(bytes32,bytes,uint256[],bytes,bytes)", "c28a9157": "bullsmasterReq()", "c28aafb1": "addWallet(address,string)", +"c28ac7c1": "changeLiquidityEpochLength(uint256)", "c28b4369": "giftCard(uint256,address)", "c28b4577": "setPermissionById(uint8,bytes32)", +"c28b4600": "MIN_STAKE_VALUE()", +"c28b4aed": "OfferCancelled(uint256)", "c28bfe5a": "testFailCreateSameIpfsHashAndNonce()", +"c28c7392": "setOddsEvt(uint256)", "c28c770a": "getLockedTokensPerUser(address)", +"c28cbb93": "getBuyCommission()", "c28cedf3": "DEMO()", "c28d38a8": "STARTING_SEEDS()", "c28d5644": "LogMinSell(address,uint256)", "c28db642": "tocancel(uint256)", "c28dbc38": "grantAccessForToken()", +"c28dc194": "stor1()", "c28de2cd": "upgraded()", "c28e5022": "collectAndUpdate(address[])", "c28e6e39": "ReducingSupplyCoin()", "c28eab85": "setMinimumTokenSell(uint16)", "c28ec9d7": "respondToChallenge(uint256[9],bytes,bytes32[],bytes,bytes32[],bytes,bytes32[],bytes,bytes,bytes32[])", +"c28f35b8": "couponRedemptionPenalty(uint256,uint256,uint256)", "c28f57ca": "ICOSaleStart()", "c28f812c": "getPaycarnita()", "c28f8e09": "icoFunded()", +"c28f9c19": "ref_bonus()", "c28f9df1": "requestVestingTrusteeOwnershipTransfer(address)", "c290367f": "playDiceCombinations(uint256,uint256,uint256)", "c290d691": "pay(uint256)", @@ -111403,10 +203860,15 @@ "c291bf6d": "AuthDapps(address,bool,int256,bool,bool)", "c291df56": "affPercent_()", "c29224ea": "roundFailedToStart()", +"c2927cbe": "BCCountByCardName(string)", "c292aae3": "McrForGasFailed(address,uint256)", +"c292b989": "getExpirationTime(string)", "c2930f91": "baseUnit()", "c29338cf": "cozyTime(uint256,uint256,address)", +"c2939d97": "jobId()", +"c293d7c1": "_tokenRate()", "c293fc0a": "SetBankerPrincipal(uint8,uint256)", +"c293fe1c": "getStakeAmount(uint256)", "c29402f1": "relistGenesisSales(bytes32,uint256)", "c2944f69": "_multiSendOwner()", "c2944f7a": "registHolderStep(address,uint8,address)", @@ -111414,106 +203876,228 @@ "c2954ff4": "Sent(address,uint256,bytes)", "c2955bdf": "setUserBlacklistedStatus(bool)", "c296302a": "transferRoot(address)", +"c29696b3": "shareCap()", +"c296c84f": "_coins(uint256)", "c296f721": "_buyLandForCandy(address,uint256)", +"c2971b41": "mediate(uint256,uint8)", "c29721e0": "sendArena(address[],uint256[],uint64)", "c297fa0f": "DEFAULT_DURATION()", "c2985578": "foo()", +"c298b8ce": "NextRoundStarted(uint256,uint256)", "c2992300": "setCreatePrice(uint256)", +"c2998238": "enterMarkets(address[])", "c29988db": "distributeEbyte(address[],uint256)", "c299a394": "getNextRank(address)", "c29a6fda": "setERC20(address)", +"c29ab95b": "accountLocks(address,uint256)", +"c29ad3ff": "switchPresale()", +"c29b2f20": "getProducts()", +"c29b8032": "TokenPurchase(address,address,uint256,uint256,uint256,uint256)", +"c29c2cbe": "sendEnvelope(address,address,uint256)", +"c29c9736": "setup(address[],uint256[],bool[])", +"c29cb5fa": "depositSB6(uint256)", +"c29cfbc6": "getGasCost(address,uint256,address,uint256,address)", "c29d350f": "startTimeOf(address)", +"c29d90b5": "calcPriceAndLeverage(uint8,uint256[],int256,int256,int256)", "c29d9d74": "startMultipass(string,string,string,string,string,uint256,address)", +"c29e0053": "cRewardUpdate(address,uint256,uint256)", "c29e8863": "setImplementation(bytes32,bytes32,address,bytes32)", +"c29fb0f1": "getCodes()", "c29fb94a": "transferFokenIssued(uint256,uint256)", "c2a029f0": "setID_control(uint256)", +"c2a052cc": "getVestedRewards(uint256)", "c2a15dbb": "_currentIcoPhaseBonus()", "c2a15e7e": "votingEndsInHHMM()", "c2a24b33": "Post(address,string,string)", +"c2a25828": "mint4()", "c2a2747b": "p1()", "c2a2916d": "nameAddress(string)", +"c2a2a07b": "depositArbCheck()", +"c2a2ce06": "changeDeposit(uint256)", "c2a33485": "setReg3(uint256)", "c2a394cb": "AuctionSuccessful(uint256,uint256,address,address,uint256)", +"c2a453b5": "mythird(address,uint256)", "c2a48c70": "revokeUserRole(bytes32,string,address)", "c2a49237": "memberSellToken(uint256)", "c2a5e5c2": "setTwitter(string)", +"c2a6390e": "unfreezeToken(address,address,uint256)", "c2a63e3b": "getEmployeeCount()", +"c2a672e0": "unstake(address,uint256)", +"c2a7c5e7": "supplyEthToCompound(uint256)", "c2a88340": "Deactivate()", +"c2a88347": "setRebasesPaused(bool)", "c2a8ec80": "betStats()", +"c2a926bd": "contracts(uint128)", "c2a95cc9": "updateTrustSettings(address,uint256)", "c2a960a1": "signSendFlower(bytes32,string,string,address,string,bytes16,uint256)", "c2a96ce5": "EscrowVault(address)", "c2a98b41": "mymethod(uint256,string)", +"c2a99256": "createNode(uint16,uint16,bytes4,bytes4,bytes32[2],string)", +"c2aa7433": "imageIdexRoundUp(uint256)", +"c2aab4f6": "releaseHeldTokens(uint256)", "c2aaf9c4": "receiveEth(uint256)", +"c2ab471f": "provisionApp(uint32,address)", +"c2ab58c0": "setDebtAuctionMKRIncreaseRate(address,uint256)", "c2ab66dd": "hasAttribute1ButNotAttribute2(address,bytes32,bytes32)", "c2ac0b4a": "intMax(int256)", +"c2ac1543": "defiScalingFactor()", "c2ac3aff": "addEth()", "c2ac481c": "disaToken()", +"c2ac5b5c": "isHoldOperatorFor(address,address)", "c2acc5cf": "mintTokens(address[],uint256[])", +"c2acf7ea": "inboundContractIndex(address)", +"c2ad4260": "currentRigelTokenUSDRate()", +"c2ad48ef": "getScoreEth()", "c2add678": "getLockerInfo(address)", "c2adf34a": "bonusWeiAmount()", +"c2ae1680": "grant(address[],uint256[])", "c2ae1a53": "sendTransaction(bytes32,uint256,int256)", "c2ae7e14": "approvePaillier(address,string)", "c2aeb355": "GRAMATON()", +"c2afbfb5": "sellSprite(uint256,uint256)", +"c2afdda7": "levelLifeTime()", "c2b06664": "setDS(address)", +"c2b09b37": "Invested(address,uint256,uint256,bytes16)", "c2b0c743": "payETHToProvider(address,address,uint256)", "c2b12a73": "setBytes32(bytes32)", +"c2b15727": "addressSupplier()", +"c2b18aa0": "rewardTokens()", +"c2b24eb9": "startSaleWOK(uint256,uint256,uint256,uint256,uint256)", +"c2b26aac": "remainingOvercollCredit()", +"c2b2775a": "slashBorrower(address,address,uint256)", "c2b2fb5e": "editionExists(uint256)", +"c2b2fdca": "claimingFeeInWei()", +"c2b303d0": "placeSellOrder(uint64,uint256)", "c2b373a7": "seedHash()", +"c2b3cf34": "getDNFTPrice()", +"c2b3db63": "setPositiveRebase()", +"c2b40ae4": "roots(uint256)", "c2b41ac4": "updateMinimumStakingTokenPercentage(uint8)", "c2b4470c": "FINLAB_PRESALE()", "c2b477a7": "mintLimitByTemplate(uint256)", +"c2b4a290": "Withdrawal(address,address,uint256,uint256)", "c2b4ab4d": "getCountBonus(uint256)", +"c2b4d999": "isRoomAddr(address)", "c2b4ddde": "setFundingEnabled(bool)", +"c2b55c8c": "mint(address,uint256,string,string,string,uint256,uint256,uint256,uint256,uint256)", "c2b6b58c": "isClosed()", +"c2b6f897": "changeFRTThreshold(uint256)", "c2b70850": "QuantiModoToken()", +"c2b79836": "latestProposal()", +"c2b799b0": "permit(uint256,uint256,uint256,uint8,bytes32,bytes32)", +"c2b7ba32": "setAffiliateProgramAddress(address)", +"c2b7bbb6": "addPair(address)", "c2b7be16": "addSupportedToken(address,address)", +"c2b7eabf": "setWildcardErc1155Address(address)", +"c2b848e8": "procPreSales()", "c2b8fd12": "MYRN()", +"c2b917d1": "juego()", +"c2b9764c": "migrateLPtokens1andwithdraw()", "c2b98295": "balanceOfNonKYC(address)", "c2ba4744": "canMint(address)", "c2ba5b40": "getPackageData(string)", "c2ba857e": "setJobAccepted()", "c2baa882": "tokensPerCHF()", +"c2babfd7": "isWorkerOrMinion(address)", +"c2bae8c6": "setVestingCliff(uint256)", +"c2baf356": "underlyingBalanceInVault()", +"c2bb1ea2": "getAllocatedAmount(uint256,uint256)", +"c2bb4bc4": "priceFeedL2Address()", +"c2bb6dc2": "isBPool(address)", +"c2bbe825": "setOpenWithdraw(uint256)", +"c2bc2615": "_unitBalances(address)", "c2bc2efc": "get(address)", +"c2bd9d95": "itemsList(uint256)", "c2bdb862": "verifyProofOfTransitionAgreement(address,uint64,uint256,bytes32,uint256[2],bool,bytes32,bytes32,uint8)", +"c2bddf26": "buyLandWithETH(address,address,address,uint256,uint256,uint256,uint256,bytes32,bytes32[],bytes)", +"c2bea6f5": "totalBunch()", "c2bf17b0": "recover(bytes32,uint8,bytes32,bytes32)", "c2bf1af7": "freezingStatus()", +"c2bf3880": "burnSynthsOnBehalf(address,uint256)", "c2c06f20": "OldRopeToken()", +"c2c08eea": "wrapAcquireLock()", "c2c13a70": "LOCKUP_WALLET()", +"c2c290e9": "gfcPerBlock()", +"c2c30548": "exploitBet()", +"c2c39f57": "MODERATION_SLASHING_AMOUNT()", "c2c3bd6a": "_v()", +"c2c3c0f1": "completeBet(bytes32)", +"c2c3d054": "updateCryptoCompareAPIPublicKey(bytes)", +"c2c40da8": "addAssetsTransaction(string,string,string,string,string)", "c2c4a328": "getInitPrice(bytes32,uint8)", "c2c4abe6": "ASSPToken()", +"c2c4c2c8": "cancelUnlock()", "c2c4c5c1": "checkpoint()", "c2c5143f": "bobMakesEthDeposit(bytes32,address,bytes20)", "c2c52055": "ChampionGameStarted(uint256,uint256)", "c2c546b8": "sumICOStage6USD()", +"c2c589f0": "ensRegistrar()", "c2c5b9f1": "setInt(string,int256)", +"c2c5c909": "addrOfNestQuery()", "c2c5ec41": "isValidProof(bytes32,string)", "c2c5f89f": "BonusAwareCalculator(address,address)", "c2c61d01": "agreeToTrade(address)", "c2c62562": "setCrowdsaleData(uint256,uint256,uint256)", +"c2c66b05": "resetLcp(uint256)", "c2c68ee1": "unlockTrading()", +"c2c75521": "getFlipStake(address)", +"c2c76cba": "EVP()", +"c2c79867": "setDummyPIDValidator(address,address,address)", +"c2c79dec": "getMarket(uint32)", +"c2c7b816": "BZZZZV2()", "c2c7ca1d": "extraTokensMintedDuringPresale()", +"c2c7f381": "setUserNotifications(address,address,bool[],uint8[])", "c2c7ff0a": "ToperCoin()", +"c2c868b3": "finalLPAmount()", +"c2c8a676": "ratesForCurrencies(bytes32[])", "c2c8fd40": "increaseWorldLimit(uint256,uint256,uint256)", +"c2c927e8": "createBtcAddressHex(uint256,uint256)", +"c2c93211": "sold(uint16)", +"c2c9a4a7": "onOrder(uint256,address,uint256,uint256,uint256,uint256)", +"c2c9e5b2": "partialUnlockTime()", +"c2c9e923": "getStETHByCstETH(uint256)", "c2ca058d": "clearBlacklistMapping()", +"c2cab3d1": "ransoms(uint256,uint256,uint256)", +"c2cac04b": "updatePoolFee(uint256)", +"c2cadc1b": "swiftResolverConfirmed(address)", "c2cb88bd": "giftMessage()", "c2cb9927": "reward(address,uint256,uint256,string)", "c2cba306": "TokenAddress()", "c2cbb299": "airdrop_auto(address,address)", +"c2cc7445": "_getERC20BridgeProxyAddress()", "c2cca62c": "TransferMinersReward()", "c2ccb8a8": "isCurrentAccountMinter(address)", +"c2cce805": "getCurrentPayoff()", +"c2ccfcaa": "hasZeroDebt()", +"c2cd0991": "predict(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c2cd0e01": "issueNewCoins(address,uint256,string)", "c2cd7632": "isEmployee(address,address)", +"c2cd9165": "_getWithdrawAction(uint256,uint256,address)", "c2cdaf24": "start1BonusPeriod1()", "c2cdbf01": "SyloToken()", +"c2ce49dc": "changeMaxParticipant(uint256)", +"c2cea42e": "usedPhoneNumber(uint256)", +"c2ceb95f": "harvest(address,address,uint256)", +"c2ceddfa": "existPair(address,address)", +"c2cf49f8": "x_adminSetRubyAddress(address)", +"c2cf696f": "L2_GAS_DISCOUNT_DIVISOR()", "c2cf7326": "hasConfirmed(bytes32,address)", +"c2cf7c40": "cashCloseCall(uint256)", +"c2cf98a4": "setDioneStaking(address)", "c2cf9bbb": "PotPotato()", +"c2cfaca2": "noParam()", "c2d0916f": "moveMetadata(address,address)", +"c2d09b40": "_setburnFee(uint256)", +"c2d13474": "schainIndexes(address,uint256)", +"c2d141be": "cTokens(uint256)", "c2d15d21": "totalIssuanceLastAverageBalance()", "c2d23e41": "continuousBacking()", "c2d25167": "closeIcoOne()", +"c2d27776": "KyberConvertExactTokenToToken(address,address,address,uint256,uint256,uint256,address)", +"c2d32459": "emissionFromToken(uint256,bool)", +"c2d35f0f": "nftx()", "c2d37428": "withdrawForWinner(uint256)", +"c2d38df9": "DivsDispatch(uint256,uint256,uint256,uint256,uint256)", "c2d415e2": "Chicken()", "c2d4160a": "GetEvaluate(uint256,uint8)", "c2d42ef2": "removeAccount(uint256)", @@ -111522,19 +204106,36 @@ "c2d4f851": "calculatePrice(uint256,address)", "c2d526aa": "_rank(uint256)", "c2d53eb4": "initOwner()", +"c2d53f96": "defaultUserCap(address)", "c2d560ab": "stopOraclize()", "c2d5baf9": "JJL()", +"c2d5d424": "getFundETH(uint256)", +"c2d6d6a1": "countReferral(address)", +"c2d77933": "uplinePercentage(uint256)", +"c2d78fa0": "fluidUntil(address,address)", +"c2d7c6cd": "houseTemplate()", +"c2d7ef6d": "decreaseCollateral(address,address,uint256)", +"c2d7f17f": "bonusCards(uint256)", "c2d83718": "randomTeam()", "c2d83e61": "UserPool(address,address)", "c2d86376": "NewDonor(address,uint256,uint256)", +"c2d8ba6d": "orderPaid(address,uint256)", "c2d8de54": "promisor()", "c2d936d9": "MINATOKU()", +"c2d9b684": "getWithdrawAccount(address)", "c2d9c196": "preico_startdate()", +"c2d9ecfa": "getToken0Balance()", +"c2da0786": "addRelayWorkers(address[])", +"c2da2447": "display(uint256)", "c2da621b": "setMeterPoint(address,int256)", "c2dab162": "mineit(address,uint256)", +"c2dab57b": "calcStockAndMoney(uint64,uint32)", "c2db0482": "getUnionIdByAddress(address,address)", +"c2db09c1": "distribution(address)", +"c2db1abe": "withdrawDeposits(uint256,address)", "c2db26fc": "unverifyAccount(address)", "c2db2c42": "purchaseToken(uint256)", +"c2db4dda": "adminRemoveNodeFromRegistry(address)", "c2db5890": "breedAxies(uint256,uint256,uint256)", "c2db8676": "BloodToken()", "c2db9e25": "getMinerHalvingHashRate()", @@ -111542,82 +204143,155 @@ "c2dc9af4": "hardCapHash()", "c2dcdfb4": "preferredSaleTokensLeftForSale()", "c2dced85": "numberDecimal18()", +"c2dde51a": "beneficiaryStakingAndFarming()", +"c2de0e9d": "editPositionMultiplier(int256)", "c2de2909": "drawRandomWinner()", +"c2de442f": "fundingBufferPeriod()", +"c2de73b9": "TRDTokenInstance()", "c2de89b7": "getCleide()", "c2def3b9": "getOrganizer()", +"c2df82e6": "bridgeTransferFrom(address,address,address,uint256,bytes)", "c2df8815": "Adnity()", "c2e0af44": "doMove(address,address,uint256)", +"c2e0b1e6": "newGame(address)", +"c2e0d02a": "__LnBandProtocol_init(address,address,bytes32[],uint256[])", +"c2e112d2": "getQuestionsCount()", "c2e12f21": "setDefaultTranches(bytes32[])", +"c2e1500b": "Online()", "c2e171d7": "Save()", +"c2e1ae53": "testCalculateFeePerUnit()", +"c2e243f6": "getHashByTokenId(uint256,uint256)", "c2e26adb": "bulkPay(address[],uint256,address)", "c2e28dd1": "setTitulaire_Compte_8(uint256)", "c2e2a338": "withdrawRejected()", "c2e2a33e": "setPermanentLimitForType(uint32,uint256)", +"c2e3140a": "selfPermitIfNecessary(address,uint256,uint256,uint8,bytes32,bytes32)", "c2e3460d": "Anxxia()", "c2e4601a": "getAffiliateRate(uint256)", "c2e46379": "transferBountyTokens(address[],uint256[])", +"c2e4ad3f": "ContributionAddedManual(address,uint256,uint256,uint256,uint256)", "c2e4b8fb": "TokensUpgradedFrom(address,uint256)", "c2e52206": "getPlayerCount()", "c2e55da3": "product3_pot()", +"c2e57564": "IEF403I(address)", "c2e5d950": "finalizedRefund()", "c2e5ec04": "setTradingEnabled(bool)", "c2e5feb5": "KeyReplaced(address,address)", "c2e62675": "COTToken()", +"c2e673ec": "BuyItem(uint256,uint256)", +"c2e687f5": "changeVoteTime(uint64)", +"c2e6c913": "setCanUpdateReferrer(bool)", "c2e78f12": "deVerify(address)", +"c2e7fb76": "isIgnoreOfPancake(address,address)", "c2e800ed": "isContractProxy(address)", "c2e88185": "CyberMusicToken()", +"c2e8cfdb": "_currentTransfer(address)", +"c2e8d52a": "updateMigrateAddress(address)", +"c2e952c7": "openBox()", +"c2e95852": "buy_eth()", +"c2e9f2e4": "testConstructor()", "c2e9fab3": "SubUser()", "c2ea2f9c": "halfCentury(address)", +"c2ea5104": "calcHarvestRewards(address,address)", "c2ea5c9e": "getInvArray()", "c2eaaeb3": "computeTxFee(uint256)", "c2eac875": "secure(uint256,string)", +"c2ead6b9": "gameOperator()", +"c2eafeb2": "afiFarmAddress()", "c2eb10a2": "makeBundle(uint256)", +"c2eb7379": "voteForSkipBlock(uint256)", +"c2eb7b46": "modify_admin(address,bool)", +"c2ec2818": "voterInfo(address,uint256)", "c2ecdf8e": "ownerCMIT()", +"c2ed2822": "setDeposit(uint256,address,uint256)", "c2ed2b05": "documents(uint256)", +"c2ed626f": "getDepositorInfo(address)", +"c2ed674b": "Privilege_Certificate_Issued()", "c2eddfd2": "kyberMultiSigWallet()", "c2edec0b": "setCharityDonation(uint256)", "c2ee0a57": "getBlockList()", +"c2ee39e4": "xbalance256()", "c2ee3a08": "ONE()", +"c2eed5a3": "saveContract(address)", "c2eef08e": "stopLandEthSale()", +"c2ef2a06": "setMinHolderAmount(uint256)", +"c2ef38bf": "leaveFarming(address)", +"c2f013bc": "depositUnderlying(address)", "c2f02b33": "Crowdsale7(address,uint256,uint256,uint256,address,address)", +"c2f08d3e": "tokenIssuedCrowd()", +"c2f0ad29": "GetProjectName(uint256)", +"c2f0add7": "getMeal(uint256)", "c2f0bb29": "getCardDetails(uint16,uint8,uint256)", "c2f0c083": "angelOnLeaderboard(uint64)", "c2f0d93f": "icoAbandoned()", "c2f0dbe2": "claimPremium(address[2],uint256[7],uint8,bytes32[2])", "c2f137f1": "swapAddr()", +"c2f19ee8": "periodicPrizeStrategyListener()", +"c2f218b9": "getContractBasic()", +"c2f2db5f": "SHELF()", +"c2f33d58": "HouseDeposited(uint256)", "c2f3ce10": "ADDRESS_LIMIT()", "c2f3d788": "read_total_number_of_purchases()", "c2f415b5": "CTBoatGame(address,address,uint256)", "c2f490e9": "caller_()", "c2f4976f": "setRoundFinalScore(uint16,bytes32)", +"c2f4e971": "WITHDRAWAL_AUTO_BUY_COUNT()", "c2f4faf4": "TestOrder(address)", "c2f61a9f": "setOraclizeQueryType(string)", "c2f666a3": "PriceIncrease()", +"c2f6873f": "tokenPRT()", +"c2f79b79": "fillTrade(uint256,uint256)", "c2f7c50a": "FindID(address)", +"c2f8eccf": "approve_563(address,uint256)", +"c2f96466": "collectRewardFromReward(uint256,uint256,uint256,uint256)", +"c2fa54a1": "setlayer(uint64)", +"c2fa59ba": "soldUnits(uint256,uint256)", "c2fa6697": "fundraiserCallData()", "c2fa8b2d": "PoetToken()", "c2faa691": "Constructor(uint256,string,string)", +"c2fb09a8": "ownerTokenCount(address)", +"c2fb26a6": "domain()", "c2fb538e": "updateFactoryContract(address)", +"c2fb6a1f": "currentVotingRound()", "c2fb8f36": "TinyHuman(address,address,address)", +"c2fb97f8": "transferLockedTokens(address,address,uint256)", +"c2fbc506": "queryCondition(address[])", "c2fbe7bc": "transferFees()", "c2fc048a": "transferOwnerToProxy()", +"c2fc247c": "shareNFTeGG(uint256)", +"c2fc76e4": "createContract(uint256,address,address)", "c2fcbf37": "isValidateParameter(string,uint256)", "c2fce718": "getPartsOfOwnerWithinRange(address,uint256,uint256)", "c2fd0263": "isTripleNumber(uint256)", +"c2fd2c89": "approve_601(address,uint256)", +"c2fd560d": "setAllMarketsAddress()", +"c2fe024c": "bday()", "c2fe2022": "getFollowers(address)", "c2fe3321": "PRE_ICO_ON()", "c2febe49": "QuantorToken()", "c2febef5": "removeCountry(uint256)", +"c2ff0db6": "EvDepositPayout(uint256,uint256,uint256,address,uint256,uint256,uint256)", "c2ff0f15": "NewShare(string,bool,string)", "c2ff3334": "jump(uint256)", "c2ff7a38": "adjustBalanceCheckpoints(address)", +"c2ffbb91": "getPowerAtBlock(address,uint256,uint8)", "c2ffc7bb": "slates(bytes32,uint256)", +"c2ffcd9a": "editHatchConfig(uint8,uint8,uint256,uint256)", +"c2fff781": "depositBatch(uint256[],address[])", "c2fffd6b": "setCancelFee(uint256)", +"c30015f4": "MuteTransfers(bool)", "c30096ef": "calculationTeamsRewards(uint256[])", +"c3009db4": "approvePoolBalance(address,uint256)", +"c30147d6": "BCRED()", "c3017200": "removeAssociatedAddress(uint256,address,address)", +"c30178d9": "getDAIxCOREBuyAmountsToEquilibrum(uint256)", +"c3024673": "OwnersProductAdded(address,uint256,address)", "c3027525": "getOwned()", "c302a45b": "crowdsaleStopped()", +"c302a4d0": "entranceFeeFactorLL()", +"c302e3d7": "aaveDepositUSDC(uint256)", "c302f747": "poolPresale()", +"c3031fac": "betList_(uint256,uint256)", "c30354cb": "VUP_TOKEN_SUPPLY_TIER3()", "c30381b9": "setSellCourse(uint256)", "c303c3d5": "returnEtherToInvestors()", @@ -111625,65 +204299,116 @@ "c304b368": "updatedRandom(string)", "c304ffc4": "CreateICE(address,uint256)", "c3059c63": "buyUpgradeCard(uint256)", +"c306176b": "airdropShares()", +"c3067bb9": "_factor(uint256)", "c306834e": "PRIVATE_SALE_LIMIT()", "c306cb90": "sendDevTokens()", "c30715d1": "setNumRewardsUsedForAddress(uint256,address,address)", "c30718e8": "testIntParser()", +"c307341a": "viking()", +"c307481c": "farmRateMaker()", "c3077c10": "settxpct(uint256)", +"c30796ab": "whitelistedAddress(address)", "c307f6ba": "withdrawWbtToken(address,uint256)", "c3082e95": "playerOutputAtNow(address)", +"c3084117": "removeTask(uint256)", "c308f55b": "fallback(uint256,address,uint256)", +"c30a614e": "claimedETF(address)", "c30a990a": "createPaymentChannel(address,uint256,uint256)", "c30b06e8": "allMultitokens()", "c30b182e": "sendVNET(address,uint256)", +"c30b3fbb": "mit()", "c30b8867": "maxPercentPerPlayer()", "c30bc5ef": "breedWith(uint40,uint40)", "c30bf4d8": "CodeEligible()", "c30c0c0c": "checkUsers(address,address)", +"c30c9b6b": "profitOfLots()", +"c30cfa2d": "isZeroCurve(uint256,uint256)", "c30d0ee4": "phiRate()", +"c30d9a7e": "sans(uint256)", "c30dafd8": "_setTittyForSale(bool,uint256)", +"c30de9da": "find6DOSNetworkRewardNode(address)", "c30df14c": "logPurchase(address,uint256)", "c30df586": "ZAI()", +"c30e264a": "setFreeSpinDelay(uint256)", "c30e9767": "canReceive(address,address,bytes32,uint256,bytes)", "c30ed0a4": "Getwsic(uint256)", +"c30f1be8": "buyAssetOrderETH(address)", "c30f4a5a": "updateURI(string)", "c31028dc": "hasFirstUnionIds(bytes32,bytes32)", "c31051fe": "teamPeriodLength()", "c31053f7": "NNT()", +"c310a979": "fulfillQuestionAskFragment(string,bytes32)", +"c310b884": "depositToken(uint256,address)", "c310b9df": "ProposalAdded(uint256,uint256,string,bytes32)", +"c3117f37": "takerValueLimit()", +"c3118ed9": "isP1Submit(string)", "c311a3cd": "GetHoga(address,uint32)", +"c311af08": "initiateMiningForSomeNFTs(uint256[])", +"c311c523": "supportsFactoryInterface()", "c311d049": "withdrawEth(uint256)", +"c311f972": "CreateTargetNames(address[],uint256[])", +"c3122381": "getStakingTime(address)", +"c3124525": "globals()", +"c3126381": "_launchVested(address)", +"c3127a30": "ROUND_2_END_TIME()", "c312d468": "sendPToken(address,uint256)", "c312ffed": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c3136b05": "createCard(address,uint256,uint256,address,uint256,uint256,bool)", "c31422ac": "calculateTokens(address,uint256)", "c3143fe5": "setUserCap(address,uint256)", +"c31443bb": "getCurrentLeverageRatio()", "c31453a7": "_unpackAttackParams(uint256)", "c3146814": "pegETHUSD(uint256)", +"c31491b5": "beforeListing()", +"c314bb99": "delegatorWithdraw(address)", "c3153834": "prefixedRecover(uint8,bytes32,bytes32,address)", "c315432a": "isGameStarted()", "c3155201": "XulCrowdsale(uint256,uint256,uint256,address)", +"c3155d23": "martaPerBlock()", +"c3156e6a": "hks()", "c31592af": "getY(bytes)", "c315a082": "KRT()", +"c315e864": "initialTicketPrice()", +"c315fc6a": "setProtester(address)", +"c3163512": "whitelistReferrals(address)", +"c3168fdc": "LogTokenSwarmHashChange(address,bytes,bytes)", "c3169ef2": "respond(uint256,uint256[4])", "c316c98b": "updateCollector(address)", "c3173774": "balanceThreshold()", "c317464d": "CryptoHearthStone()", "c31752c0": "getEmployerJobs(address,uint8)", +"c3180f6f": "reclaimLeftover()", "c3182360": "getTimeBonus(uint256)", +"c318266b": "setPayAmount(uint256)", +"c3190abc": "getCombCardPoint(uint32)", "c3191f31": "readWelfareAddress(uint256)", "c3192c82": "getcurrNumOfUpgrades()", +"c3192f14": "claimableFees()", "c319618f": "getAllMyPackageIds()", +"c3196a3e": "getDailyStaker(address)", "c31989ed": "TronGold()", +"c3198e1f": "calcStakingInterest(address)", "c319a02c": "right98(uint256)", "c319e412": "allowContribution()", +"c319ec63": "recommandCount(address)", +"c319eedc": "liquidatorWhitelist()", +"c319f866": "subTotalCash(uint256)", "c31a0972": "OrpheusRoyalSiamRailways()", +"c31a44ef": "getBestPrice(uint256,address,address,uint8,uint8)", +"c31a5f25": "createContractAthlete(string)", +"c31a7481": "getBeneficiaryDeposit(address,uint256)", "c31ad7dc": "voteYes(string)", +"c31ae7e0": "priceSupra()", "c31b29ce": "GAME_DURATION()", +"c31b604f": "NextRebase(uint256)", "c31bb2fb": "XEPToken()", "c31bb8d6": "percentToTakeAsRake()", "c31c0b62": "isSaleComplete()", "c31c5221": "approveSetTokenControlInfo()", "c31c6855": "presaleBonusTokensClaimed()", +"c31c9c07": "swapRouter()", +"c31cd7d7": "allocations(address,string)", "c31ce93e": "getExchangeGroups()", "c31ceb2a": "numberOfAttendees()", "c31d0031": "CrowdFundDAO(string,uint8,string)", @@ -111692,26 +204417,51 @@ "c31d3e8e": "maxPublicSale()", "c31e0547": "quickConverter()", "c31e6ee0": "sendTokensToService(address)", +"c31eba89": "swapFornote(uint256)", "c31f3537": "removeBotAddress(address)", "c31f586d": "cancelSaleAuction(uint256)", +"c31f5aa3": "safeDonutsTransfer(address,uint256)", "c31fa083": "setIpfs(string)", +"c31fda89": "adjust_price_period()", +"c31fe80a": "tradingEnabledAt()", "c32011f0": "unfreezeTeamRecepientBlock()", +"c3201add": "lockingsCounter()", "c3204954": "confirmTransactionByMediatorFee(uint256)", "c320c727": "setRegistrationFee(uint256)", +"c3210aac": "setCardTypes(uint16[])", "c3210eb7": "proposeCount()", +"c3217d64": "risk(uint256,uint256)", "c3218f50": "startPreICO(address)", "c321dc18": "showParticipantWei(address)", +"c32220be": "presaleMode()", "c32221cf": "_newRepo(string,address)", +"c322937e": "getPurchaseDetails(address,uint256)", +"c3232dda": "iconiq_presale_open()", +"c3233d61": "liquidate(address,address,address,uint256,uint256,uint256)", +"c323752b": "stakeyYFL(uint256)", "c32377df": "recevoirApprobation(address,uint256,address)", "c3237ff4": "emitFeePeriodClosed(uint256)", +"c323fac3": "issuerChange(uint256,uint256,uint256,uint256,uint256)", +"c323fd17": "usdSynthToken()", +"c3241931": "aCandidate(uint256)", "c32426c9": "ProvideToken()", +"c3242d6b": "setImplementationAddressManyToOne(bytes32,address)", "c324606a": "confirmStakeholderTransaction(uint256)", +"c3248fa1": "buyPool(uint256,uint256,address,address[],uint256[],bytes32[],bytes)", +"c324a258": "investorEnlisted(address)", "c324a669": "purchaseSoldiers(uint256,uint256)", +"c325752e": "updatePegValue(uint256)", +"c32580b0": "getRewardEstimate()", "c325ae4e": "belongsToUser(address)", "c3262dfd": "setUserID(bytes32)", +"c326bf4f": "depositedTokens(address)", +"c327deef": "algorithms(uint8)", "c3283d83": "getStrandContract(uint256)", +"c3285de6": "buyPool3()", "c32863a7": "every15()", +"c328c615": "redeemProduct(string,uint256)", "c32935d7": "getBuyPriceTimesByTime(uint256)", +"c3295817": "_minInterestForReward()", "c329e4a5": "BoardAddressChanged(address,address,address)", "c32a4369": "getAllSamplesForOwner(address)", "c32a4c7e": "returnCoke(uint256)", @@ -111721,92 +204471,158 @@ "c32a8edf": "someMethod1(uint256,uint256,uint256,uint256)", "c32a9b00": "do_grant_tokens(address,uint256)", "c32aaa86": "getNameWriterId(bytes32)", +"c32b4624": "blackListMap(uint256)", +"c32b4e88": "callInitAndTest()", "c32b8683": "creatorRequestFundTransfer(uint256,address,uint256)", +"c32ba2e7": "Eth_Mininmum_Contribution()", "c32c1e65": "setOperations(address)", +"c32c6c1f": "publicSaleStart_timestampInS()", "c32cc6d5": "investFor12Months(address,uint256,uint256)", "c32ceb14": "setQueryIdForAddress(bytes32,address)", +"c32cfee5": "calculateRewardExtraTotal(address)", +"c32d316c": "poolTransfer(address,uint256)", "c32d88bb": "changeDepositAmount(uint256)", "c32d946d": "performTransfer(address,address,uint256,bytes)", +"c32dc3b6": "getTotalReserve(address)", "c32dee3a": "second_bonus_amount()", "c32e16e7": "REQUEST_CANCELED_BY_LENDER_STATUS()", "c32e2b42": "SalesAgentRemoved(address)", +"c32e370e": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[])", "c32ee591": "isTransferAllowed(address,address,address,address,uint256)", "c32f6945": "MiningLevelup(address,uint256,uint256)", +"c32f8a43": "timeGame()", "c32fb5ea": "getNewAllowancePeriod()", "c32ff491": "ServerManager()", +"c330ced5": "setBonusClaimEnabled(bool)", +"c3310052": "totalCollected(uint256)", "c3310517": "reservedTokensDestinationsLen()", +"c33116f3": "getElectronicCertificateSummary()", +"c3314a2a": "widthdrawToken(address)", +"c3315856": "_TowerRoundDetails(uint256,uint256)", "c3315b4b": "EasyInvest25()", "c3328816": "TeamAdvisorsWallet()", "c3332621": "shippingDate()", "c3332732": "setNextGame(uint256,uint256,uint256,uint256)", +"c33342e9": "quotas(address)", "c3336c0f": "transferMultipleSame(address[],uint256)", "c3340892": "LogStateChange(uint8)", "c334447b": "bytes32ToTokenId(bytes32)", +"c3348a8b": "luckPoolBal()", "c334e875": "payByErc20(uint256)", "c334ea8f": "setMateAdvertisementRate(uint256)", "c3351b88": "getParticipantExternalId(bytes32)", "c3354632": "_premoveByIndex(uint256)", +"c3355b8d": "minting_fee()", +"c33587d3": "insert(string,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"c335b7b2": "doMath1(uint256,uint256)", +"c335da54": "redeemingBonus()", "c335f0a4": "RKGToken()", "c336937d": "Revoked(address,address)", "c3369b0d": "issueTokens(uint256,uint256,uint256)", "c336e7fb": "NobelToken()", +"c337036a": "getLotCutieRewardByIndex(uint32,uint256)", +"c3370837": "changeUniswapRouter(address)", +"c3371f85": "winningId()", +"c3374a57": "setGoalSucceededEvent(bytes32,bool)", "c3380b72": "getDefense(bytes32,bytes32,uint256)", "c33818fd": "Controller_Address2()", "c338287f": "getUSDPrice()", +"c3382d0f": "ovmEXTCODESIZE()", "c33890ff": "StartNewIteration()", +"c3391d27": "createPool(uint256,uint256,uint256)", "c3392f25": "PRCT100_R_TEAM()", +"c33989a1": "SetMaxDuration(uint256)", +"c339d10a": "StaticCall(address,bytes,bytes32)", "c33a4cc8": "PresaleUpdated(uint256,uint256)", "c33a5bb6": "RLCPerETH()", "c33a66e0": "updatePriceEDEX(uint256)", "c33a800b": "createHeldCoins()", "c33aa7fe": "submitBid(string)", +"c33abb85": "challengeAction(uint256,address,uint256,bytes)", "c33af352": "_getFunc(uint256,uint256,uint256,uint256)", +"c33b37f0": "EvInvestorPayout(uint256,uint256,uint256,uint256,bool)", "c33b76c6": "rakeAddress()", "c33bbe47": "LAM()", +"c33c4475": "accYaxPerShare()", +"c33c93b5": "buyERC(uint256,address)", +"c33ccb41": "blockedReceiverList(address)", +"c33cfd90": "getReserveTotalLiquidity(address)", "c33cfe36": "KolkhaToken(uint256)", "c33db789": "_triggerFinishTournament()", +"c33de793": "vestedlist(address)", "c33df4ba": "getNumOfRickHolders()", "c33e1844": "BTMC()", "c33e40a3": "setBasePoints(uint256)", "c33e4942": "definition(bytes32)", +"c33eb9f6": "getPendingWithdraw(address,address)", "c33fb877": "process()", "c3403ddf": "endVoting()", "c34052e0": "contains(uint256)", "c341031a": "Testereum()", +"c34136b6": "setAuctionDurationRules(uint256,uint256,uint256)", "c341b9f6": "freezeAccounts(address[],bool)", +"c341c500": "clipperCall(address,uint256,bytes)", +"c3421db4": "setNoFeeOnSend(address)", +"c3422094": "isBaseTokenForVault(address,address)", +"c34283dc": "dnftTokenAddr()", +"c3428d85": "getLeftTokens()", +"c342b559": "auctionTokenIds(uint256,address,uint256,uint256)", +"c342ca62": "depositable()", "c3430bce": "validWhiteListedPurchase(address)", "c3434883": "buy(uint256,uint256,bool)", "c3437e06": "approvedBuyer(address)", +"c34383c0": "isAnAddedGame(address)", "c3440022": "WhitelistedAddress()", +"c3443b69": "courtToken()", "c34492a7": "buyTokensByOptions(address,uint256,string)", "c344bc47": "HonestisNetworkTokenWire3()", "c344bc4a": "REALCrowdsale()", +"c344ccc6": "setClaimSubmittedAtEPTrue(uint256,bool)", "c344cdd2": "offerOptionsConversion(address)", +"c3453153": "getStakeInfo(address)", "c34588ba": "countOfDeeds()", "c3458d18": "callRecipient(address,address,address,uint256,bytes,bytes,bool)", "c345b571": "_subDai(uint256,address)", "c345c54b": "doSafeSend(address,uint256)", +"c346223d": "registerNewProducer(string)", "c3462818": "PFC(address)", "c34764cf": "makerWithdrawERC20Token(address,uint256)", +"c3476eed": "bondTransferRoot(bytes32,uint256[],uint256[])", "c347fe1f": "addCET4(uint32,uint32,uint32)", +"c34829bb": "withdraw_(address,uint256)", +"c348a24b": "totalLockedLeft()", +"c3490263": "claim(uint256,uint256)", "c3492908": "BASE_TIME_TO_COOK()", "c3496529": "setVesting(address[],uint256[])", +"c349d362": "sump()", +"c34a03b5": "updateProjectSecondaryMarketRoyaltyPercentage(uint256,uint256)", "c34a253a": "cardFacevalue(uint8)", +"c34a886f": "migrateMinterV2(address,uint256)", +"c34b44a0": "revokeSigner(address)", +"c34b45c9": "canSubmit(bytes32,address)", "c34b6ae0": "setFreeTransferAllowed(bool)", "c34ba3e9": "createPromise(address,uint256,uint256)", +"c34bdef0": "sellTokens(address[],uint256[],uint256[],address,bytes32,address)", "c34c08e5": "executor()", "c34c27ad": "SendOwner()", +"c34c30aa": "getSurplusTime()", +"c34c33ac": "LogTransfer(uint256,address,uint256)", "c34c4417": "registerData(bytes)", "c34c6b93": "getDateInfo(uint256)", "c34d2732": "MAX_COMMIT_DURATION_IN_SECONDS()", +"c34d3b18": "mintSgnVestedInDelay(uint256)", "c34da17c": "isBurned()", "c34db131": "CSCPreSaleManager()", "c34dd141": "percent_reduction()", "c34de22d": "genKeysRec(uint256,uint256)", "c34debc7": "updatePlayerWin(address,uint256)", +"c34e0270": "withdrawDepositById(address,uint32,uint256,bool)", +"c34e49c7": "groupDeltaBalance()", "c34e6e1b": "OnlyWhiteListedAddresses(address)", "c34ef9af": "second_bonus_duration()", "c34f1fea": "UnfreezeAmount(address,uint256,uint256)", +"c34f41c7": "LogAddCertificate(address,bytes32)", +"c34f5964": "approveCurve()", "c34f6b0d": "getPrize()", "c34f783d": "allocateToken(address[],uint256[],uint256[])", "c34f869b": "Voted(uint256,bool,address,string)", @@ -111815,13 +204631,22 @@ "c3501ff6": "redeemToken(uint256,address)", "c3502510": "UsdPerEthChanged(uint256,uint256)", "c3508d58": "refundByOwner(address)", +"c350a1b5": "initialize(address,uint256,address)", "c350bbb6": "RoscaERC20(uint256,string,string)", "c3513132": "accessTokenFee(uint256)", "c351fd77": "setGasPricePctOfBetValue(uint256)", "c351fdfd": "setBatchNumber(address[],uint256[])", "c3521b1a": "wolkFund()", +"c352300a": "testTransferTokenCompiled1()", +"c35233bc": "registeredExchanges(uint256)", +"c3525819": "minLp()", +"c3525c28": "HEALTH_FACTOR_LIQUIDATION_THRESHOLD()", "c352dae2": "getWalletInfo()", "c352fbda": "grantMarketingCoins(address,uint256)", +"c3535236": "argumentSource(uint256)", +"c3536e8b": "UpgradeOthersToLevel3FromLevel1(address[])", +"c353a38a": "metaAddIssuers(bytes,uint256,uint256,address[],uint256)", +"c353a650": "ratToken()", "c353a89e": "changeMember(address,address)", "c353c2de": "unPauseTokenSale()", "c353dbb1": "EtherPluscoin()", @@ -111830,34 +204655,61 @@ "c35506c0": "upgradingEnabled()", "c355b107": "cNiceGuy()", "c355eaf0": "setEthlanceSponsorWalletContract(address)", +"c35644ef": "TransferAction(address,uint256,uint256)", +"c356d5b0": "getLatestByMajor(uint64)", "c35740f9": "partner2_name()", "c3576b41": "setOwnersCommission(uint256)", "c35774a1": "setApproval(address,uint256[],bool)", "c35789cc": "Close()", +"c3579072": "receivePayment(address,uint8,uint8)", +"c3581dbc": "testFeeToken(address,address)", "c3584d88": "getMaxEtherToInvest()", +"c358554a": "vote(bool,bytes32,uint256)", +"c3587980": "setBurnToken(address)", "c358ced0": "isRevealPhase()", +"c35905c6": "paymentAmount()", +"c3599666": "Burn(address,bytes32,uint256)", "c359a2a4": "increaseContribution(address,uint256)", +"c359afd1": "xvsToWantPath(uint256)", +"c35a0ec6": "LogError(string)", +"c35a2b68": "swapForExact1Multi(address,address,address,uint256)", "c35a4d46": "DubaiGreenBlockChain()", +"c35aa6fb": "NewAuction(uint256,uint256)", "c35ac080": "modificaCurso(uint256)", "c35c08bd": "getCrowdsourcer(bytes32)", +"c35c280e": "investorBonusSize(address)", "c35c3265": "novumAddress()", +"c35c9746": "initiateCards(uint256[],uint256[])", "c35cabf4": "littClientId()", "c35d1e01": "RESERVE_TOKENS()", +"c35d64ea": "tToken()", +"c35da2fc": "calcProfitShare(uint256,uint256)", "c35dcf90": "getWhitelists()", +"c35e0ec8": "getStorageUint256(bytes32)", "c35e1b33": "MSERToken(uint256,string,string)", "c35ef892": "getWriteTimestamp(bytes32)", +"c35f1f0f": "execute(bytes,uint256,uint8,bytes32,bytes32)", "c35f4bbb": "calculatePrimordialMultiplier(uint256,uint256,uint256,uint256,uint256)", +"c35f6d3e": "poolAmountTrig()", +"c36002c9": "cancelAndTransferTokensToPresaleCreator()", "c3602ee5": "delayedRequest(string,uint256)", "c36086f0": "initTransaction(address,uint256)", "c360c616": "TittyPurchase(address,address)", "c3615e39": "set_address(address,address)", +"c36178c1": "_acceptedStableCoins(address)", +"c36183f5": "getPooledBalance12(address)", +"c362981a": "Deliver(address,uint256,bytes32)", +"c36300da": "KYCApproved(address,bool)", "c36360f2": "limit8()", "c36433e2": "createPromoDrug(bytes32,address,uint256,uint256)", "c3645759": "increaseDistrictWeed(uint256,uint256)", "c364a25d": "setHash(uint16,bytes32)", +"c364f65b": "gAAA()", "c3650a21": "danserviceTeamAddress()", "c36572d6": "hasEnded(uint256)", +"c3657d36": "cancel(address,uint256,bool)", "c3657f96": "setBoxCount(uint16,uint16)", +"c36596a6": "BONE()", "c365a646": "_setRiskParameters(uint256,uint256)", "c365d4f0": "initWidth()", "c36604ed": "secretNumber()", @@ -111865,124 +204717,225 @@ "c3663271": "Icoends()", "c366b1d3": "BulkToken()", "c3676a02": "mangeWhileList(address,bool)", +"c3678f65": "issuePlanned()", "c367ec17": "rewardAuditor(uint256,address,uint256)", "c36800eb": "IdentityCreated(address,address,address,address)", +"c3680ea7": "get_number_votes()", "c368109c": "monster_hp(uint256)", "c3681e3d": "change_p3(uint256)", "c3682ace": "time_end_sale()", +"c3682c54": "airdropvalueinwei()", "c36851bc": "bidOnWonder()", "c3685e89": "addMessage(address,string,string)", "c3689f01": "testControlSetNotRetractableNotOwner()", "c368b160": "disbursement()", +"c369488a": "batchStakeNft(uint256[])", "c36981f4": "withdrawNacNetfReController(uint256,address)", "c369c0c6": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"c369f63d": "EventChanged(address,string)", "c36a7b45": "getUserTotalEthVolumeSaldo(address)", "c36ad8a6": "deleteStar(uint256)", "c36af460": "getLatest()", +"c36bcc94": "ENCORE_LP_Token()", "c36c0155": "get_planet_info(uint256)", "c36c09e2": "setTrustedSender(address)", +"c36c92c6": "lockedIncomeBalanceOf(address)", +"c36c9edd": "yuan()", "c36ccedc": "approve(address[16],address,uint256)", +"c36d16a9": "setScanLength(uint256)", +"c36d7da6": "_beforeCall(bytes32)", "c36de353": "Ethereumt()", "c36de531": "smallestUnitName()", +"c36e0097": "_invest(address,uint256,uint256)", "c36e6fe5": "XclusiveCoin()", "c36e9546": "SVL()", +"c36fe3d6": "profiles(uint256)", "c36ff164": "claimFoundationToken()", +"c36ff3dd": "setStartDate(uint16,uint8,uint8)", "c36fff2d": "availableOptions(uint256)", +"c37014b2": "stakeHex(uint256,uint256)", "c37067fa": "donate(bytes32)", +"c3709caf": "verifyEntitled(address,uint256,bytes32[])", +"c370b042": "denom()", "c370b0b5": "BbeCoin()", "c370c86d": "setTokenName(address,string)", "c370d8fe": "ExpandandHarvest(uint256)", +"c371150e": "_updateBaseRateFromRedemption(uint256,uint256,uint256)", +"c3714723": "getExternalBalances(address,address[])", +"c371dda7": "ancillaryBytesLimit()", "c3720290": "giveSignOff()", +"c372046e": "j(bool)", +"c3720ff5": "lastStraightLength(address)", "c37210f4": "getDocumentSign(uint256,uint256)", "c3722b1f": "AutoSell()", "c3736dfa": "_shiftRight(bytes32,uint256)", +"c3736fe6": "getERC20Balance()", "c3737054": "changeManagerQuorum()", +"c373a602": "getProxyInfo(address,address)", "c373c0ef": "setStartDate(uint32)", +"c373d54f": "gys(uint256)", +"c373d7f3": "setWorker(address,bool)", "c37479b4": "mintForwarder(uint256,bytes32,address[],int256,address)", +"c374bc23": "initialize(address[],address,address,address,address,address)", +"c3750b65": "updateToken(address,string)", "c3751729": "mGenerateTokens(address,uint256)", +"c37597c6": "j1()", "c375ba8a": "getLavaPacketTypehash()", "c375c2ef": "removeContract(address)", +"c375fcfa": "poolOwners()", "c3762904": "ethraised()", +"c376b67b": "_evalParam(bytes32,uint32,address,address,bytes32,uint256[])", +"c3771eb3": "sendPayment(uint256)", +"c3776b47": "AddressUnfrozen(address)", "c37792b5": "generateSecurityToken(string,string,string,bool)", "c3780a3a": "myFunction()", +"c37846f9": "setRewardsToken_public(address)", "c3787865": "balanceFromToken(uint256)", "c378a83b": "EarthToken()", +"c378c0e2": "nameMap(address)", "c378ea76": "getFrom(uint256)", "c378f1af": "RemoveAll()", "c37981b3": "maxFixedSupply()", "c37991e3": "ProposalEnd(uint256,string)", "c37a676c": "acceptMins(uint256)", "c37a6e8d": "signer1_proposal()", +"c37a7c36": "investTokenToToken(address,address,uint256,address)", "c37a832d": "getRoundUserBalance(uint256,address)", "c37b0aa7": "modifyPriceCountry(uint256,uint256)", +"c37b17f9": "mint_rSFI(address,uint256)", "c37b85a6": "assignIndices(address[])", "c37bcb1e": "unlockDate1()", +"c37c4d7c": "getUnderlyingTokenForDmm(address)", +"c37c656d": "caps(uint256)", "c37cb1ae": "airdropsTokens(address[],uint256[])", +"c37cba0b": "withdrawWei(address)", "c37cdcfe": "doDisputeMemoryRead(uint256,bytes32,uint256)", "c37d1c8b": "tokensToMint(uint256)", "c37d8a7e": "indexReplies()", "c37d9044": "create(uint8)", +"c37dad41": "checkPair(address,address,address[],uint256,uint256)", "c37db253": "isNotZero(bytes32,string)", "c37dfc5b": "fillOrder(uint256,uint256)", +"c37e2155": "multiSigMintPool()", "c37e7379": "distributePresale(address)", "c37e74c7": "getRet()", "c37e8cb2": "testExportAuthorized()", "c37e8f11": "additionalCurrency(address,int256)", +"c37ee5d9": "paymid()", +"c37f3294": "claimBurner(address)", "c37f68e2": "getAccountSnapshot(address)", +"c37f773f": "releMar(uint256)", "c37f7f7f": "doTransferIn(address,address,uint256)", "c37ff3d9": "sha(uint256,uint256)", +"c37ff683": "getVoterBlockStaked(address)", "c3800257": "Addmember(string,address,address,uint256,bool,uint256,bool)", "c3800fdc": "CurrentToken(address)", "c3801938": "getStateRoot(uint256)", +"c38215d4": "lastSanta()", "c3830618": "reduceStake(uint256)", +"c3832c43": "clipCoupons(uint256)", +"c3834050": "reinvested(address)", "c3834d89": "setPromo(address,uint256,uint256)", +"c383abaa": "myDividends(address,bool)", "c383b1bb": "summon10SkinAppearance(uint256,uint128)", "c383e020": "endContract(address)", +"c383e22b": "plant(uint256)", +"c383e578": "MAX_DEST_AMOUNT()", +"c3842d5c": "roundsMap(uint256)", +"c38435bd": "RemoveMarket(address,address,address)", "c384521f": "tokenCapPhaseTwo()", "c384b170": "teamWallet2()", +"c384b1f4": "abq()", +"c384ce82": "chartPrice(uint256)", +"c384dd1f": "setProxyContractForMetatxsAddress(address)", +"c38533c6": "lockFromUpdate(uint256)", "c3858e82": "unregisttIcoAddress(address)", +"c385e98f": "PayoutQueued(address,uint256,uint256)", +"c3862c6a": "claimTitanReward()", +"c3863ada": "_aaveGovernance()", +"c3866e30": "getAvailableBonus()", "c38672a0": "confirmTokenTransaction(uint256)", "c38678c3": "addBuildingToServer(uint256,uint8[10],uint8[10],uint8[10],bytes32[10],uint8)", +"c386d614": "lastLevel()", "c386ff7d": "checkFunction(bytes32,uint256)", "c38789ba": "example(uint256,address)", "c387b2a7": "BatchTransferContract(address)", +"c387fd86": "stabilityFeeInMkr(address,bytes32,uint256)", +"c3882a76": "ChangeTime(address,uint256,uint256)", +"c3882fef": "integral(uint256,uint256)", "c3886f61": "checkWithdrawal(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "c3888bce": "transferTokenToMultiple(address[],uint256)", "c388c167": "setNameAndTicker(string,string)", +"c388c3e6": "bYcrv()", "c388cca6": "testBitAndFailIndexOOB()", +"c388db0e": "JackpotPayment(address,uint256)", +"c388e657": "getExoticFnMap(uint64,uint64)", +"c388ee0e": "totalStakedWeekly()", +"c388f456": "getReservesForSdarkEth()", +"c3894398": "superAdminsForIndex(uint256)", "c38a0306": "devFeeHandle(uint256)", +"c38a0fb4": "verifySelf(string)", "c38a0fcb": "MGLTOKEN()", +"c38a0fd3": "BetIDRec(uint256)", +"c38a7db7": "removeTokenLiq(uint256)", "c38a8afd": "minimumBet()", "c38ad273": "priceETH()", "c38ad65b": "getHeroPostAddres()", "c38bb537": "setPauseStatus(bool)", "c38c0fa7": "getParentPayoutDistributionHash()", "c38c5813": "registerAdmin(address)", +"c38c78b7": "layvdvtheoculy(uint256)", "c38c9800": "innerContract(string)", +"c38c9c88": "setLastPoolId(bytes32)", "c38caab5": "setPost(string)", +"c38cc208": "updateLockinCapPercent(uint256)", +"c38cf815": "tokenBakerySwapPair()", +"c38e10c6": "fixBreakfast(uint256)", +"c38e26e7": "resupply()", +"c38e2fd5": "withdraw_signal()", "c38e52c0": "deletePeerReview(address)", "c38e650f": "changeRoundManager(address)", +"c38e795c": "convertForLiquidation(address,address,uint256,uint256)", +"c38ef062": "setOraiAddressLength(uint256)", "c38f0741": "snapshotDailyGooResearchFunding()", "c38f1abf": "waitTokensPeriod()", +"c38f6f0b": "test8()", +"c38fb402": "balancerToPiGasOn(address,address)", +"c3908f97": "recoverFunds(uint256,uint256,uint256,uint256,uint256,address[])", "c391c1b5": "updateOwner(address,address,uint256)", "c391d581": "getXPROMO_MULTIPLIER()", "c392079f": "removeCoin(string)", +"c3920f44": "_withdrawDaiLeast(uint256)", +"c392c6f7": "getmVaultRatio(uint256)", "c392cf41": "reveal(address)", "c392f118": "getSellingStatus(uint256)", "c392f5a0": "getAllPackageReleaseHashes(string)", +"c392f766": "interest()", +"c3930c40": "getUserTranches(address)", +"c3930f9e": "getInternalBalanceOf(address,address)", +"c3931e2a": "create_event(uint8,address,uint256)", "c39387ad": "checkAndUpdateStage()", +"c393d0e3": "closePosition()", "c3946909": "setTheKingsQuote(string)", +"c394889f": "adminCloseDeposit(address)", "c394f6cb": "unclaimedTokens()", "c39513af": "setDeprecated(string,address)", "c395546c": "authorizedToSpend()", "c395a16b": "leaderBid()", +"c395e2e1": "addSupportNft(address)", "c395f336": "processPurchase(uint256,uint256)", +"c395fcb3": "hasAdminRole(address)", "c3964372": "startRound(uint256,uint256)", "c3966409": "endProject()", +"c396f524": "increasePledge(address,uint256)", +"c396faff": "setdata(uint256,uint256)", +"c3977fcd": "baseReward(uint256)", "c397ae1b": "holosForWei(uint256)", +"c397c5e7": "getAccRewardFromBlock(uint256)", "c39804ac": "generatePreimage(uint256,uint256,uint8)", "c39899c1": "isDeadline(uint256)", "c398a925": "supportsERC165(address)", +"c398d56d": "campaignDuration()", "c398f030": "expire(uint256,uint8,bytes,bytes,bytes)", "c399330d": "getBonusByTime()", "c399d7c5": "getAccountTokenStats(address)", @@ -111990,48 +204943,87 @@ "c39a9d97": "crowdSaleType()", "c39afb0b": "BitcoinEther()", "c39b79d4": "_contains_(address)", +"c39c4a0c": "setWhiteLists(address[],bool[])", "c39cb03f": "ERC827Token(uint256,string,string)", "c39cbef1": "changeName(uint256,string)", "c39ce8b6": "FranklinFrank()", "c39cf53d": "nextrafflenumber()", +"c39db983": "getConditionData(uint256,uint256)", +"c39e411a": "MintLock(address,uint256,uint256)", +"c39e5383": "createCar(address,string,uint8,uint8)", "c39e7394": "addAuctionReward()", +"c39e7dbb": "userWithdrawBaseTokens()", +"c39ef855": "rescueExpiredTokens()", +"c39f2d5c": "callCodeSize(address)", +"c39f4614": "getLastPoints(address)", +"c39f49c0": "historyAmount(uint256,uint256)", +"c39fdb28": "depositAvailable()", "c39ffc65": "GVFX()", +"c3a00039": "multisend(address[16],uint256)", +"c3a00b42": "updateRewardHis(uint256,uint256,uint256,address,uint256)", "c3a07df6": "getPermissions()", "c3a0ba73": "BlockFilesManagement()", +"c3a10ade": "whiteListBooster(uint256)", "c3a11c51": "etherPriceInUsd()", +"c3a13457": "_getUniswapExchange(address,address)", "c3a151de": "getPlayedGamePlayers()", "c3a18dec": "PRIVATE_SUPPLY_ADDRESS()", +"c3a1db4c": "_cancelOrderHash(bytes32,address)", "c3a1e7cc": "totalWEIInvested()", +"c3a25384": "getMakerByMarket(address)", "c3a25c4c": "computeCntrAmountUsingPacked(uint256,uint16)", "c3a267b7": "createEthGlobalDelegation(address,address)", +"c3a29d9a": "crlToLp1Route(uint256)", "c3a2a665": "retrieve(address,uint256)", "c3a2a93a": "getContracts()", "c3a2c0c3": "scheduleCall()", "c3a3017d": "issueMasterCardNumber(address,address,uint256)", +"c3a31280": "setIlkMinVaultAmount(address,bytes32,uint256)", "c3a34e1c": "timeTillImpact()", "c3a35825": "getUint(bytes32,string)", "c3a39544": "initialCompanysTokenAllocation()", +"c3a3c701": "trigFee()", "c3a3ee80": "setPartsToSell(uint256,uint256)", +"c3a43824": "devPercentage()", +"c3a47326": "encodedGatewayPath()", "c3a48741": "distributeTKLN(address[],uint256)", "c3a4ebf5": "_roundOver()", "c3a4f8b5": "hibit(uint256)", +"c3a5273a": "take(bytes32,uint256)", +"c3a52f33": "sst()", "c3a5fc4d": "IconFoundation()", +"c3a6266d": "manGasAddr()", "c3a62a68": "getDate(bytes10)", "c3a69a75": "dividendsDistributor()", "c3a6e2a7": "disableToken(bool)", +"c3a6e771": "advertisingSlots(uint256)", "c3a74e6a": "placeSellFciOrder(uint256)", +"c3a7b2ad": "SPASMfee()", "c3a83aab": "getTokensAvailableToMe(address)", "c3a869e6": "goldenTicketPrice(uint256)", +"c3a8962c": "getERC20Balance(address,address)", "c3a8da5f": "EthereumMark()", "c3a8f536": "rsub(uint128,uint128)", +"c3a93291": "setLiquidityIncentiveFund(address)", +"c3a96fab": "newTokenAndVote(address,uint256,bytes)", "c3a9b1c5": "sayHello(string)", "c3a9bd8b": "maximumTokens()", "c3a9be6b": "setLimitGame(uint256,string)", "c3a9c930": "Gift(uint256,address,address)", "c3aa0fe6": "setItemLimitHolding(uint256,uint256)", +"c3aa1684": "network(address)", +"c3aa9c98": "returnNotSoldTokens()", +"c3ab5fb4": "min_price()", "c3abe888": "sendBatch(address[])", +"c3ac3ad2": "changeTokenUri(uint256,string)", +"c3ac610d": "commit(uint256,bytes32,string)", +"c3ac8060": "generateCollectible(uint256,uint256,uint256,uint256)", "c3ac93df": "QCOToken(address,address,address,address,address,address)", +"c3ad2c4f": "getOne(address,address)", +"c3ad4b4a": "deleteDex(string)", "c3ad5ecb": "getTweet(uint256)", +"c3ad60b0": "treUpgradeArr(uint256)", +"c3ada1de": "getMinimumVote()", "c3ae43a0": "buy100tickets()", "c3aea22e": "fillSellOrder(uint256)", "c3aeacdf": "changeRules(address)", @@ -112039,29 +205031,51 @@ "c3aedd92": "updateIsVerifiedInBulk(address[],bool[])", "c3af38fa": "changeInfoUrl(uint256,string)", "c3af702e": "totalfv()", +"c3b03859": "quoteLimit(bytes32)", "c3b0f915": "KickToken()", "c3b1037b": "ownerSetGasPrice(uint256)", +"c3b12480": "ClaimSwapFee(address,uint256)", "c3b18fb6": "updateSplit(uint256,uint256)", "c3b18ff2": "totalSupplyICO()", "c3b1d52b": "recipientToGiftIds(address,uint256)", "c3b1ff93": "acceptGame(address,uint256,bytes32)", +"c3b23349": "setSuccessfulBountyFeeInBasisPoints(uint256)", "c3b24be0": "Leg()", "c3b2556d": "lookup(bytes)", +"c3b2c504": "_pros()", +"c3b2caea": "transferMMOwnership()", "c3b2d337": "_initialSupply()", +"c3b31472": "fac()", "c3b3271d": "updateStar(uint256,string,string)", +"c3b33fe4": "_incrementNonce()", "c3b35a7e": "withdrawTo(address,address,uint256)", "c3b3c656": "kickOutGroup(address,uint256)", +"c3b3ea5c": "lesserThanUintPassTest()", +"c3b4178c": "removeAllApprovedAddresses()", +"c3b45358": "returnTruncated()", +"c3b49d04": "partners(uint256)", +"c3b49e0b": "alpacaCore()", +"c3b4da6f": "NB_REASONS()", "c3b4db25": "setSeller(uint256)", "c3b55635": "log(string,bool)", +"c3b56f47": "transferTokenToOwner(address,uint256)", "c3b57af8": "getStageAmount(uint256,address,address)", +"c3b6088c": "investPrincipalWithInterest(uint256,address)", "c3b66bed": "getProposalVotersCount(uint256)", +"c3b6c80e": "playerinfoUser(uint256,uint256)", +"c3b6cb4b": "wipe(address,uint256,uint256)", "c3b6f939": "mToken()", "c3b7572c": "updateCommission(string,uint8,uint8)", "c3b75b8f": "setLockProductActiveState(uint32,bool)", +"c3b7a80f": "startLeague()", "c3b7e378": "startTimeStage2()", +"c3b7e6b8": "paytouser(address)", +"c3b84423": "approve_503(address,uint256)", "c3b8bfe5": "transferIfNoHF(address)", "c3b909d7": "progressiveId()", "c3b91d15": "AiBank()", +"c3b929f7": "setCopyright(address)", +"c3b92e7c": "receive_new_randomness(uint256)", "c3b9741b": "ModifiedCrowdsale(uint256,uint256,uint256,address)", "c3b9e2ed": "powerWithModulus(uint256,uint256,uint256)", "c3b9f21e": "p4()", @@ -112069,8 +205083,17 @@ "c3ba65e7": "totalChicken()", "c3ba7574": "mintForFund(address)", "c3ba938d": "JPY_Omnidollar()", +"c3bb1f2d": "depositForMember(address,uint256,address)", +"c3bb37cd": "profitAddress(address,address)", "c3bb68cf": "weisPerEther()", "c3bb8feb": "releaseSell(uint256)", +"c3bc0c3e": "baseRewardsLength()", +"c3bc4043": "NoBids()", +"c3bc7fe3": "ROLE_PRIVATESALEWHITELIST()", +"c3bc8910": "setFXSAddress(address)", +"c3bc8cc6": "BuyLottery(uint32,address,string,string,uint32,uint32,uint8)", +"c3bc9f1b": "mlmAddress()", +"c3bca0c2": "escrowLength(uint256)", "c3bcb586": "soldKeys()", "c3bd0bae": "CapLevelPrice()", "c3bdc16f": "setUserRole(address,bytes32,address,uint8)", @@ -112078,81 +205101,157 @@ "c3be3c24": "_updateTopUpAvailable()", "c3be6e8d": "SetStartTimeTLP1(uint256)", "c3be8df3": "addAff(uint256,bytes32)", +"c3be96d2": "registerContributors(uint256,address[],uint256[])", "c3bea9af": "createGen0Auction(uint256)", +"c3bf2ba4": "aliases(address)", "c3bf32e3": "numberOfHeroClasses()", "c3bf504a": "extractEth(uint256)", +"c3bf70f1": "tradeFeeBasisPoints()", +"c3bf9587": "_receiveETH()", "c3c0198c": "getAssesByOwner(address)", +"c3c05293": "setInsuranceFund(address)", "c3c0befb": "dumpPrize()", "c3c132b2": "_indexProofId(string)", "c3c1d4c7": "withdrawTokensTo(address)", +"c3c25ff8": "_recreateCondition(uint256)", "c3c2686c": "preSaleWallets(uint256)", "c3c2f066": "block(bytes32)", +"c3c354fc": "getLastSession(address)", "c3c357f9": "tokenSaleCompleted()", +"c3c3960c": "_launchBlock()", +"c3c49a63": "tokenToExchange(address)", "c3c5026c": "depositWEI()", "c3c503b7": "becomeBankermaster()", "c3c51aca": "cancelSellTokenOrder(uint64)", "c3c563f4": "validateAmount(uint256)", +"c3c579cc": "addTransactionFee(address,uint256,uint256)", "c3c59aa9": "walletTimeOf(address)", +"c3c59e27": "foo14(address,uint256[])", "c3c5a547": "isRegistered(address)", "c3c5b40e": "setSaleAddr(address)", "c3c63edc": "mintBadge(uint256)", +"c3c6de91": "COLLATERALIZATION_BASE_RATE()", "c3c6e202": "indexLastThreads()", "c3c6f0c9": "getCustomerTxTimestampPaymentKWh(address,bytes32)", "c3c735cb": "BITDRIVE()", "c3c74c45": "applyForCertification(string,string,address,string,string,uint256)", "c3c75e5c": "setEditionPackSize(uint8,uint8)", +"c3c7b080": "disableAssetType(address)", +"c3c7cc32": "donatedETH()", +"c3c7e336": "burnUnusableTokens()", +"c3c81e56": "DistributeProfitsOBELIX()", +"c3c87f62": "getDsVDV()", "c3c88a1d": "disableTransfer(uint256)", +"c3c8a4e6": "averageLp()", "c3c8c12b": "setVipInfo(address,uint256)", +"c3c8e427": "checkFounderDeveloper(address)", "c3c90e64": "checkReward(address)", "c3c95c7b": "getMarket(bytes32)", +"c3c9725c": "Criminal_Record(string,string,bool,uint256)", +"c3ca324f": "getMyPurchases(address)", "c3ca3c6a": "SingularityTest3()", "c3cad5e7": "senderMIT(address)", +"c3cafc6f": "banana()", +"c3cb3d9a": "ValidateProduct()", "c3cb4159": "getICOBonus()", "c3cb50ed": "setTileType(uint16,bytes32)", "c3cb8c14": "finalizeVault()", +"c3cba7ec": "stakeLiquidityTokens(uint256)", "c3cbc2c9": "offerSacrifice()", "c3cbd341": "create(address,uint256,address,address)", +"c3ccf3ca": "versusContract()", +"c3cd31c7": "totalMonths()", +"c3cd787b": "jackpot1()", "c3cd9996": "CLASS_AQUATIC()", +"c3cda520": "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)", "c3cdb4af": "getMinimeCheckpointSlot(uint256,uint256)", +"c3cdbd15": "adminTransferFund(uint256)", +"c3ce95fc": "TokenBagChanged(address,address,uint256)", "c3ceb939": "view58()", +"c3cf07f8": "MarketMigrated(address,address,address)", "c3cfe00f": "EEB(uint256,string,uint8,string)", "c3d014d6": "setContent(bytes32,bytes32)", +"c3d073ff": "holds(address)", "c3d08f06": "setPermissionByAddress(uint8,address)", "c3d0a20a": "NewToken(address,string,string)", "c3d0a564": "getAccountBalance(bytes)", +"c3d0b945": "setBackCommission(address)", +"c3d0c8e3": "tipHashOrBurnIfNoAuthor(bytes32,uint256)", +"c3d10570": "putCollectibleOnSale(uint256,uint256,bool)", +"c3d17706": "nextTargets(uint256)", +"c3d1840d": "setPartner(address,uint256,uint256)", +"c3d1c26c": "setGovernance(address,bytes)", +"c3d22677": "notVote(uint256,uint256)", "c3d23e10": "checkBet()", "c3d2c355": "setKey(bytes32)", +"c3d2c3c1": "tokenPools(address)", +"c3d2e92b": "greaterThanIntPassTest()", +"c3d2f556": "_setAnomalies(address)", +"c3d2fe3a": "__ycrvVault()", "c3d32e56": "PixelCore()", "c3d345c4": "getHangoutAddress()", +"c3d34ea1": "addLiquidity4(address,uint256[4],uint256,uint256[4],uint256,uint256,uint256,uint256)", +"c3d37aab": "hashUuid(string,string,uint256,uint256,address,uint256,uint8)", +"c3d37f10": "finish(uint32,bytes32)", "c3d38586": "newCookie()", +"c3d46f70": "TreasuryReserve()", +"c3d4770d": "createNewChildrenWithBalanceAndGarment(string,address,string[],uint256[],address)", "c3d4d75a": "getCommitHash(bytes32,address)", "c3d54c9a": "paiementConfirmation(bytes32,bytes32)", +"c3d54f32": "buyersMachineHoursDemand()", "c3d55adc": "calculateBuyGoldFee(uint256,uint256)", +"c3d5769a": "totalProfited()", "c3d58d95": "runICO()", "c3d59369": "setIcoDiscountPercentages(uint8,uint8,uint8,uint8)", +"c3d5db30": "crowdSalesWeapon(address)", "c3d5fd39": "getAdminInfo()", +"c3d635b4": "adoptChubby(uint256)", +"c3d64e4a": "STRONG()", "c3d68a85": "temporaryKill(address)", "c3d69d03": "NatureX()", +"c3d6c8d1": "lastypeId()", +"c3d6d09b": "givePLASMAreward(address,uint256)", +"c3d70db9": "soloAddr()", +"c3d74026": "maxBurnPercent()", "c3d7ad74": "sendPurchasedTokens(address,uint256)", +"c3d7d711": "user_nonce(address)", "c3d7e350": "removeAccount(uint256,address)", +"c3d840b8": "becameaminer(uint256)", +"c3d84cc4": "epochPwdrRewardPerDay()", "c3d8c099": "endICOStage5()", +"c3d91604": "allVotingProposals(uint256)", +"c3d92fac": "dissolvementFund()", "c3d97a27": "carsCount()", "c3d9820d": "RefillOraclize()", +"c3d9c075": "initialReporterWasCorrect()", "c3d9c4b4": "share(uint256)", +"c3d9c9d7": "setTaxAmount(uint256)", +"c3da3a90": "viewcert(address)", "c3da42b8": "c()", "c3da5153": "getEthartArtReward()", "c3daab96": "withdrawBond(uint256)", +"c3dab2ac": "smartSwapAddress()", "c3dac9a1": "time_bought()", "c3db397f": "unstakePartialContent(bytes32,uint256,uint256,bytes8,uint256)", +"c3db59b9": "CSTPriceUpTrigger()", "c3db5ead": "Uruntest()", +"c3dbc976": "updateJointSupply(uint256)", "c3dc0083": "finishDeal(uint256,uint256)", "c3dc1040": "orderInternal(uint256,bytes32)", +"c3dc6364": "setfundFactory(address)", +"c3dca07d": "presale1Started()", +"c3dcfd41": "changeOracleOwner(address,uint64)", +"c3dd21a9": "migrate(address[],address[])", "c3dd2395": "maxCapEur()", +"c3dd56b9": "pairInfo(address,address)", "c3de1ab9": "gamePaused()", "c3de7cbf": "checkRedemptionWindow(uint256,uint256)", +"c3debfa2": "CurMsgHash()", "c3ded82a": "toUint96Throw()", "c3dee67f": "updateAllHoldersShareInfo()", "c3defb70": "changePause()", +"c3df41f4": "presaleCampaign()", +"c3df45c3": "currentSeedPool()", "c3df99b6": "upvoteComment(bytes32,bytes32,bytes32)", "c3dfb938": "countFortunes()", "c3dfbeea": "migratePresaleBalances(address,address,address[])", @@ -112162,155 +205261,307 @@ "c3e06be9": "changeReceiveWallet(address)", "c3e0ae67": "future_round_percentage()", "c3e0bbad": "getContentByName(string)", +"c3e0d712": "internalActivationMinSpreadBps(address)", "c3e1d25c": "percentsOfProjectComplete()", +"c3e1d9b4": "_baelish(address)", "c3e2087c": "setManagementCompany(string)", +"c3e20c9f": "projectTitle()", "c3e27948": "setTrueUsdFastPause(address)", +"c3e2b5e6": "memoryAlloc()", "c3e2f26e": "icoedAmount()", "c3e38ae9": "setSEKU(uint256)", "c3e3908c": "get_pre_kyc_bonus_numerator(address)", "c3e3c7bc": "teamTokens()", +"c3e3f8fd": "meltHoldSeconds()", +"c3e439b3": "setWearRate(uint256)", "c3e50027": "dealConfirm(uint256)", +"c3e562f5": "isWithdrawOperator(address)", "c3e58eec": "blackListSectorExists(uint8[])", +"c3e5dcbb": "setLowerBoundAndUpperBoundAmount(uint256,uint256)", +"c3e618a3": "allowanceView(address,address)", +"c3e62111": "setAnchor(address)", +"c3e6d640": "decompose(uint256,uint256[],uint256[],uint256)", "c3e6ea31": "BONUS1()", +"c3e70055": "trash()", +"c3e712f2": "removeRelayByOwner(address)", +"c3e75bda": "firstRun()", +"c3e8dfa8": "setMinimumWeight(uint32)", "c3e8fb40": "smartToken()", +"c3e91345": "myVote()", +"c3e92075": "upgradeAMMWrapper(address,bool)", "c3e92f9e": "DrawLottery(string,uint256)", "c3e93fa3": "depositHelpe(uint256)", +"c3e98033": "harvestAndWithdraw(uint256)", "c3ea0fca": "promoEthCommission()", +"c3ea1136": "decoy()", +"c3ea7ffb": "rewardEarned(address,address)", "c3ea901d": "uint2ToStr(uint256[2])", "c3eb0723": "LogNewSecurityToken(string,address,address,address,uint256,uint8)", +"c3eb362e": "isEndpointApproved(uint64,uint64)", +"c3ec3b61": "userProfit(uint8,uint256,uint256,uint256)", +"c3ec6e72": "LogReturnEth(address,uint256)", +"c3ec8dda": "setBuyBackAddress1(address)", +"c3ece3e5": "renewMintRound(uint256)", +"c3ecf897": "getProgram(uint256)", +"c3ed8db3": "studentCount(address)", "c3edb4c2": "finalizeChangeInsuranceFees()", +"c3edbc26": "setManagement(address,bool)", "c3ee6311": "lockAndCall(string)", +"c3eec756": "transferHold(address,address,uint256,uint256,uint256)", "c3eed29a": "reinvest(uint256,address)", +"c3eee6ea": "buyJulFromFee()", +"c3ef2987": "multivest(address[],uint256[])", "c3ef473c": "ShareHolderVoted(address,uint256,bool)", +"c3ef522a": "updateAuctionTokenId(uint256)", "c3ef586a": "Gambit()", "c3ef83fc": "executionTimeOf(uint256)", +"c3efa7d6": "newOraclizeQuery()", +"c3efbe1d": "payReferral()", "c3f010f7": "numGames()", "c3f03fb8": "querySpecialRateForAddress(address,address)", "c3f07ba7": "addTokenAddresses(address[])", +"c3f0d327": "setBurnPercentage(uint256)", "c3f0dad9": "isGenerator()", +"c3f10a0f": "isMintedWithBonusNCT(uint256)", +"c3f147f1": "getValuePoolClaimingFee(address)", "c3f17ae8": "getAmountToIssue(uint256)", +"c3f186d3": "coeffs(address)", "c3f1a710": "getInvestment()", "c3f1b0ea": "changeRequest(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", +"c3f229d6": "setOracleFeeReceiver(address)", +"c3f28abd": "EIP712_DOMAIN_TYPE()", +"c3f2b62a": "changeNewAsk(uint256,uint256,uint256,uint256,uint256)", +"c3f2e0d3": "beautyOwnershipCount(address)", +"c3f314d6": "mintCheckerAdmin()", "c3f3310b": "tokensOfFounder(address)", +"c3f344a8": "farmTime(address)", +"c3f349f2": "transferAssets()", "c3f34a50": "Dao(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"c3f37c6f": "daibasLPPool()", "c3f3b854": "maxNumBets()", "c3f44c0a": "relayMetaTx(uint8,bytes32,bytes32,address,bytes,address)", +"c3f46810": "reindexTokens(address[],uint96[],uint256[])", +"c3f4d79f": "totalSYNCLocked()", +"c3f4f0fa": "antiPhishing()", "c3f51fca": "initMintable(address,address,uint256,uint256)", "c3f53e94": "ownerClaimTokensAndRefundForUser(address)", "c3f59687": "transferMastership(address)", +"c3f5b1a0": "_iCompanies(address)", "c3f6263f": "charityCutOf(uint256)", "c3f67cde": "withdrawSecond()", "c3f6e09c": "sendOnlyHash(string)", +"c3f6e5fb": "nMixForeignAddrandBlock(address)", +"c3f73a7e": "processGame(uint256,uint256)", +"c3f75dfc": "Invested(address,uint256)", +"c3f76bda": "LogFinishMintingSTO(uint256)", +"c3f78ffa": "modifyActivateSystem(uint256)", "c3f7ec97": "addLog(bytes)", "c3f7f169": "safeSend(uint256)", +"c3f7f29b": "distributeSafe()", +"c3f82030": "borrowInterest()", +"c3f82bc3": "getVersion(address)", "c3f843d7": "minVeriAmount()", "c3f84c05": "retribution(uint256,address)", "c3f90202": "f4()", "c3f909d4": "getConfig()", +"c3f90e4a": "onSendEth(address,uint256,uint256)", +"c3f911da": "getTesty(uint256)", "c3f9409f": "signBitcoin(bytes32,uint8,bytes32,bytes32)", +"c3f95c47": "top3DuongChay()", +"c3f9ab58": "locksOf(address)", +"c3f9c54f": "getFragment()", "c3fa4f27": "sendPowerToken()", "c3fa5f93": "BlockScheduler(address,address)", +"c3fa6eca": "synthEx(uint256)", +"c3fb0dff": "_tierFCFSOpenSeconds(uint256)", +"c3fb16ca": "revokeVault(address)", +"c3fb2ece": "getLeaderAward()", "c3fb31a4": "coolDungeon()", "c3fb5e5f": "createVestFundFor(address,uint256,uint256,uint256)", "c3fb90d6": "_storage()", "c3fbc632": "ICORunning()", +"c3fc0246": "getSetUserSigningKeyActionID(address,address,uint256)", "c3fc4787": "finalizeFork()", +"c3fcbf2b": "AdminMApping(address)", +"c3fcd42a": "depositA()", +"c3fd9b25": "incrementTotalUncommittedContractStorage()", "c3fdbef8": "totalInSharedPool()", +"c3fdf086": "resetTotal()", "c3fe3e28": "game()", +"c3feb6f5": "riskytoken()", "c3ff05d1": "getBoxCountZIndex(uint8)", "c3ff3878": "checkForValidChallenge(address,uint256)", +"c3ff58d0": "getStakingBalance(uint256,address)", +"c3ffa605": "getHatchConfig(uint8)", +"c4004648": "allowAddressToSendMoney(address)", +"c4014588": "setStrategyContractOrDistributionContractAllowance(address,uint256,address)", "c401a2a3": "destroyforproduction(uint256)", "c401d6b0": "totalTokensToSupply()", +"c401e426": "getTokensLeftForSale(uint8)", +"c4020ca2": "setSeigniorageOracle(address)", "c4021c13": "topupEnergyByToken(address,uint256,uint256)", "c4026d7b": "removeDev(address)", "c402e446": "Express_Satisfaction_MediatedTransaction(uint256)", +"c4037e98": "contractAt(uint256)", "c403adc8": "changeInSale(bytes32,bytes32,uint256)", "c403cf6d": "RESERVED_TOTAL_AMOUNT()", +"c403ed01": "actual_owner()", "c403f90f": "airdropTime()", "c4041bc5": "viewauction(uint256)", +"c4042133": "presigntrade(address,address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256,uint256)", +"c4042efc": "tokenExchange(uint256)", "c4043465": "MYEXCTOKEN()", "c404b3f6": "currentTranche()", "c4052559": "haraKiri()", "c4052a78": "airLiftPrice()", +"c4054610": "changebxtbTokenRatio(uint256)", +"c405637a": "convertToSLVD(uint256,uint256,uint256,bytes)", +"c4056493": "getLiqEquity(address)", "c4057e61": "getData_4()", "c40580de": "removeOwners2()", "c405b1f0": "addJob(address,uint256,uint256)", "c405d30e": "send2marketing(address,address)", "c405e11b": "_addAnswerToHistory(bytes32,bytes32,address,uint256,bool)", +"c4062443": "_isERC20(address)", +"c4066d42": "stopBots()", "c4069caf": "getPlayersByTrackId(uint256)", "c406d4af": "getPixelToken(uint24)", "c407670f": "donorCount()", "c4076876": "pay(address,uint256)", "c407c6d8": "chop(string)", +"c4081a4c": "setTaxFee(uint256)", "c4085bf6": "_sell(address,uint256,bytes)", "c4086893": "getLockedBalance(address)", +"c408c245": "beginTrading()", "c408efba": "isMigrationPhaseOpen()", +"c4091236": "getTokenAddress(string)", "c40940f4": "pricePerUnicorn()", "c409ad08": "exec(bytes,bytes,address[])", +"c409ec5a": "engine1userList(uint256)", +"c40a9ebe": "withdrawForMultipleDays(uint256[])", +"c40ab115": "addParticipants(address,address[])", +"c40ad4fd": "monMinter()", "c40af29f": "tokenTeamSupporter()", +"c40afff1": "getFreeLand(uint256)", +"c40b1532": "setGSNModule(address)", "c40b276b": "hasString(string[],string)", "c40b4c4d": "minSumPreICOUSD()", "c40b716c": "setLLV_edit_14(string)", +"c40b7e76": "calPenalty(address,address)", +"c40b8771": "setOneInchFlags(uint256)", "c40b8868": "changePresale(address,uint256[])", "c40b8dcf": "usdToHavPrice()", +"c40bc361": "partnersIndex(address)", "c40bdc05": "_requestLoans(address,uint256)", +"c40be495": "setOrcl(address)", +"c40cc338": "sortTokemns(address,address)", +"c40cefbf": "setBankETH(address)", "c40cf4eb": "memberContract()", "c40d19a5": "getAddressSize()", "c40d4163": "ArthToken(uint256)", +"c40d4d66": "setMooniswapFactoryGovernance(address)", "c40d62fe": "OrpheusBlockChainCitySiam()", +"c40d9e64": "totalInStake()", "c40dc8ec": "deadline(uint256)", +"c40dd66f": "supplySchedule()", +"c40de79a": "low()", +"c40efd37": "registerOnlyMode()", +"c40efecf": "isDController()", +"c40faab5": "potWithdraw(address,uint256)", "c40fdc94": "Delisted(uint256)", "c40fec3a": "forceOffsetExecuteFeeRate()", +"c4109648": "getBidder()", "c4109843": "OrdersMatched(bytes32,bytes32,address,address,uint256,bytes32)", "c4109d48": "baseTokensAllocated()", +"c4113b88": "unstake(address,uint256,bytes)", +"c4114b12": "levelUpFee()", "c411e4d4": "canCancel(uint256)", +"c411f50c": "getToy(uint256)", +"c4124f46": "revokeUop(uint256)", +"c4127fdd": "transferonKyber(uint256,address,address)", "c4128b6d": "upgradeCount()", +"c412967b": "toDisable(uint256)", +"c412db75": "car0Price()", +"c412ef22": "tPerBlock()", "c4130ae0": "registerEvent()", +"c413216c": "total_period_mint()", +"c4135399": "collectPointsWeekly()", "c413af2e": "setPreICOPhase()", "c413fdf3": "testPayout()", +"c4143cf0": "DEBUG_byte(bytes32)", +"c414af59": "weightedBlockReward()", "c414dede": "tablets(address,uint256)", "c41518f2": "luckyYouToken()", "c41559bb": "ETHbalanceOf(address)", +"c4157b29": "mintFrozenTokens(address,uint256)", "c415b95c": "feeCollector()", "c4163518": "isMining(address)", "c4164365": "investBalanceMax()", "c4166ea8": "OBGAllocation(address)", "c416a0d7": "emergencySetBBFarm(uint8,address)", +"c416a6ad": "linkInitialize(address[],uint256,uint256)", +"c416fd5b": "PRIVATE_SALE_PERCENT()", "c41728a7": "sectorOwnerCut()", "c4173548": "preSaleRaised()", +"c4174c52": "CreditPurchased(address,uint256,uint256)", +"c41780ba": "swapDaiToSai(uint256)", +"c417a8c5": "authorizedKey()", "c417becd": "RCToken()", +"c417df50": "RFI()", "c4184def": "BCBToken()", "c418c8c9": "TradeToken(address,string,string,uint256,uint256)", "c418c93e": "addOnStage(address,uint256,uint256)", +"c4195cb8": "getRestrictions()", +"c4197883": "controllerRate()", "c4198161": "setParameters(address,uint256)", +"c419a480": "PerxOld()", +"c41a0f4d": "debugCheckTableLength()", "c41a360a": "getOwner(uint256)", "c41a9892": "bet2()", "c41a9dfe": "has_joined()", "c41addb5": "newModerator()", "c41b0ae7": "getNumberOneArg(address,bytes4,address)", +"c41b7f39": "streamRewardReleased(address)", +"c41b8f7c": "safeTradeAMMtoAMM(address[],address[],address[],uint256,bytes[],uint256[])", "c41c19dc": "trackContributions(address,uint256)", +"c41c3129": "get_product_component_index_from_serial_number(uint256,uint256)", "c41c33af": "submitChallengeOrder(bytes,uint64,uint64,uint256,uint256,uint256)", "c41c3bde": "setBuyingTime(uint256,uint256)", +"c41c5177": "makerFixedFee()", "c41c9a61": "transferERC20Tokens(address,address,uint256)", +"c41d8f12": "castVoteERC20(uint256,uint256,uint256)", +"c41da185": "Party(address,uint256,uint256)", +"c41daaff": "etherPerToken()", +"c41dab03": "AdminAddressRemoved(address)", +"c41deb91": "startSales(uint256,uint256,address,uint256,address)", "c41e1d4f": "MAX_NUM_NAVITOKENS()", "c41efe08": "getBestSale(bytes32)", "c41f48a3": "DinosaurFarmer2()", "c41f4cc0": "takerStatus(address)", +"c41f55a0": "lastSurplusTransferTime()", "c41f9482": "getDateTime(uint256)", "c41fbbb5": "addFounder(address,uint256,uint256)", +"c41fd609": "link_collateral_decimal()", +"c4203d16": "getCdpsByAddress(address)", "c420928d": "EncryptoTelToken()", "c420f7fe": "getPlayerShipModelById(uint64)", +"c4211271": "setForceCost(uint256,bool)", "c421249a": "sui()", "c4215398": "publicSaleAddress()", "c4218d33": "oraclizeBalance()", "c421fa8e": "updateCrowdfundState(uint256,address,uint256)", "c421fc6b": "currentStageData(uint8)", "c422293b": "finishIssuance()", +"c4226807": "DirectValidMembersCount(address)", "c422d09b": "ConfirmOwner()", "c422ed19": "addFreeBet(address,uint256)", "c4236cdc": "catchStarters()", +"c4240c69": "getBacorConverterAddressByRelay(address,uint256)", +"c4242e47": "werewolfAddress()", +"c42498ea": "getCdpInfo(uint256,bytes32)", "c4254c7b": "CoreWallet()", "c4255d61": "addZeroTest()", +"c4259606": "darknodeSlasher()", "c4259e2e": "changeOwnerInfo(uint256,uint256,string,string,string,string)", "c4264738": "refundSafe()", "c426b1e5": "showDepositEther(address)", @@ -112321,135 +205572,222 @@ "c427a68b": "ExtremeSetupToken()", "c427af9b": "outcomeAmounts(address,int256)", "c427e699": "getContractsOf()", +"c4287250": "getIndexArray(address[],address)", "c42882e3": "getEarlyAccessKitsRemaining()", "c42890b6": "setCastleContract(address)", +"c428e114": "stakeRewards(address)", "c4290b76": "getAmountWithdrawal(address,bytes32)", "c42956d3": "nextExchangeRateIndex()", "c4298f89": "ACL(address)", "c429e4a3": "TEAM_ALLOWANCE()", "c42a0716": "erc20(string,string,uint256,uint256)", +"c42a8983": "updateMaxBuyTokens(uint256)", +"c42a903d": "IMP01()", +"c42afc16": "setGiftSendFlag(bool)", "c42b372d": "openAutoFree(address)", +"c42b3f7d": "mapPIDMember_votes(uint256,address)", +"c42b42a0": "currentPrize()", "c42b5fe1": "registerExternal()", "c42bb1e4": "contract_eth_value()", "c42bd05a": "newToken()", +"c42c11b1": "tokenBuyValue(uint256)", "c42c237a": "CortexCoin()", +"c42c5b0d": "managersArray(uint256)", +"c42c8089": "averageFeesPerBlockSinceStart(uint256)", "c42c9905": "register(bytes20,uint32,int24[4],int24[4],uint32[4],bytes32[])", "c42cb819": "goldBoxAmountForSale()", "c42cce7e": "total_tickets()", "c42cd8cf": "etherSplit(address,address)", "c42cf535": "setGovernor(address)", +"c42debdd": "getieoCoin(address)", "c42e04c0": "etherOne()", "c42e1ace": "TKP()", +"c42e2ca9": "getScheduleIndex(bytes32,uint8)", +"c42e34e7": "denySAFEModification(address,address)", +"c42e8cfd": "getiTokenData(address)", +"c42e9208": "mul_(uint256,uint256)", "c42ed894": "getRoundTargetBlock(uint32)", "c42edd61": "payFeesToggle()", "c42edf88": "leveRage()", +"c42ef357": "getAmountOutByPair(uint256,address,address,address)", "c42f61d3": "RhodoToken(address)", "c42fd368": "RateChanged(address,uint256,uint256)", +"c43037fc": "getBalorBalrenmal()", +"c4305576": "pendingSake(uint256,address)", "c4305a55": "windowBonusMin()", "c430bcda": "whitelistInvestor(address)", "c43147c1": "InitializeManifesto(string,string,uint256,bool,bool)", "c43148ca": "makeProposal(string,uint256,uint256,uint256,uint256,address,address)", +"c43190f5": "tradeWithHintAndFee(address,address,uint256,address,address,uint256,uint256,address,uint256,bytes)", "c4319bd8": "AgreementHashEn()", "c431f885": "addToContribution()", "c4321adb": "investInTheSystem(uint256)", +"c432332e": "getRaffleNftIds(uint256)", +"c4323fea": "LIQUIDATION_RATIO()", "c4329ae5": "totalChangedPixels()", +"c432c6f3": "fnxUnStakeFPT_B(uint256)", +"c432df5e": "_takeLiquidity(uint256)", +"c4336c1c": "delegations(uint256)", "c433793d": "removeWhiteListedAddress(address)", +"c433cfad": "lotteryGame()", "c433e8ca": "remainMintTokenAmount()", +"c4340ef6": "logBytes30(bytes30)", "c4342252": "latestScheduledUpdate()", "c434650c": "_checkOrder(address)", +"c435484d": "claimCoin()", "c4359c1b": "marketSeeds()", "c435ae0c": "setMaxGoal(uint256)", "c435d26f": "GREMToken()", "c435d2ac": "publishedTokenOfOwnerByIndex(address,uint256)", "c435d68e": "numberOfContracts()", +"c4363b10": "dartNumber()", "c4366149": "optionBalance(bytes32,address)", +"c4369743": "balanceOfD()", "c4373c05": "tickRequiredLog(uint256,address,uint256)", "c43782e0": "ZipToken()", "c437b951": "BytechTechnology()", "c43821aa": "issuanceCurrentBalanceSum(address)", "c43823e1": "jsonKeyExists(string,string)", "c4387936": "edgePigmentB()", +"c438aeb5": "tcr()", +"c4394cf8": "getOrderMetaOf(address)", +"c439848f": "initCrowdsale(address,address,address,uint256,uint256,uint256,uint256,uint256,address)", "c439af4f": "WAVEliteToken()", +"c43a0efd": "calcUintPrice(address)", +"c43a17ed": "setStakerAdminRole(address)", "c43a6a79": "returnsTwoNamed(uint256,uint256)", "c43aa319": "startTime_()", +"c43ad81d": "withdrawNerd()", "c43ae983": "GROWTH_BUMP()", "c43b7934": "stagePrice(uint256)", +"c43bb281": "BuyBack(uint256,address,uint256)", "c43bb538": "requestOwnershipTransfer(address,bytes32)", +"c43bb8cf": "checkAccountBalanceLimit(address,uint256,uint256,uint256)", "c43c633b": "traderBalances(address,address)", "c43c9e12": "addTokenAdmin(address,address)", "c43d0575": "scheduleCall(bytes4,uint256)", +"c43d4b71": "minionGroups(bytes32,uint256)", "c43d56bb": "changelp4(address)", +"c43d871e": "updateRewardsOf(address)", +"c43d8aa6": "startInvestment()", "c43d9ac9": "TCETest()", +"c43dc00d": "linkPreviousContract(address)", "c43e0e72": "_withdraw(address,address)", +"c43e3ed8": "investBlock(address)", "c43e9462": "getRoundNumber(uint256,uint256)", "c43eb0e0": "getAvatar(bytes32)", "c43ed2c8": "update(bytes)", "c43f22c4": "isInvestorAllowed(address)", +"c43f30f5": "numberPikaToReactivate()", +"c43ff0c8": "enableAllTranfers()", "c440008e": "foundersFund()", "c4400ed4": "getProfit(uint8,uint256)", "c4405fa7": "_getMaxRarityChance()", "c44088fd": "rewardUnitsRatePerYear()", "c440e875": "dedeNetworkAddress()", "c44193c3": "offerPunkForSale(uint256,uint256)", +"c441d616": "newOrder(address,string,uint256,uint256,uint256,bool)", "c44237dc": "EventUpgradeShip(address,uint32,uint8)", "c4426a88": "arbitrate(address,address,bytes32,bool)", "c44299c7": "preAlphaPrice()", "c4432f31": "P3DAddress()", +"c4437d7b": "balToken(uint256)", "c443a99a": "MicoinNetworkToken(uint256,string,string)", +"c443b525": "zzzV1()", +"c443e08c": "subOracle()", "c44412e3": "revokeBonusCreditOf(address,uint256)", +"c444214a": "makerBurnFeeBps()", "c4453bd0": "getPlayerMinions(uint32,uint8)", "c4454980": "fundManually(address,uint256)", "c4457e47": "load(uint8[],uint256,uint256,uint256,bool)", "c445e2ef": "RedPillToken()", +"c44633bf": "findFreeE2Sponsor(address,uint8)", +"c4467b6f": "EQUITY_TOKEN_NAME()", "c4468f69": "setNewPotWinner()", +"c446b6de": "dealTime()", "c4477a11": "Banknote(address,uint256)", "c4479812": "batchMultipleAmount(address[],uint256[])", +"c447f208": "stakeToken2(uint256,uint256)", "c44828be": "totalAllowance(address,address)", +"c448358e": "user_details1(uint256)", "c4489110": "BUYOUT_PRICE()", "c448fa85": "isExtraDistribution()", +"c44948cb": "getMyPurchasedTokens(address)", +"c4497224": "_ChallengeFailed(bytes32,uint256,uint256,uint256)", "c44a2a10": "ownerCredited()", +"c44a7f49": "LogRenExTokensUpdated(address,address)", "c44b0290": "setLockPostion1(address,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8)", "c44b10d9": "payoutOdds()", +"c44b11f7": "getConfiguration(address)", +"c44b75b0": "tokenFromAllocation(uint256)", +"c44bef75": "setStartTimestamp(uint256)", +"c44c0782": "approve_247(address,uint256)", +"c44c2c2a": "DeactivateProject(uint32)", "c44c2efd": "burnPLUTUSTOKEN(uint256)", +"c44c4344": "poolCoin()", "c44cb8fc": "viewTotalPayoutToPlayer(address)", "c44cd4df": "sendReaction(address,int8,string)", "c44ced7e": "ozr()", "c44d36ee": "protectedTransfer(address,uint256,bytes32)", +"c44d4c0a": "LogPositionTraded(bytes32,address,address,address,uint256,uint256)", "c44d6f87": "PAPER()", "c44dcaca": "draw(uint256,address,uint256)", "c44e6640": "getAuctionCount()", "c44e787f": "sideBetPay(bytes32)", +"c44ec612": "leng()", "c44f7864": "getRemainingTimeInSecond()", +"c44fb8ec": "cancelUpgrade(address)", +"c4501fed": "URIController()", "c450a08a": "queryLockedTokens(address)", "c450a25f": "unfreeze_contract()", "c450d98b": "getCommunityReputation(address)", "c4522c92": "removeStaff(address)", "c45250c8": "icoRound3()", "c45330b4": "remainingTotalBonuses()", +"c4539e1c": "totalSCBSpend()", +"c453a801": "itemIdToPrice(uint256)", +"c453c658": "changeBetNFTAddress(address)", "c453cdd4": "getMyVines()", +"c453e557": "valueOfAccountCollateral(address)", "c4543386": "TUIToken()", "c4545e6d": "_replaceModule(address)", +"c4549c93": "init(address,address,address[],uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"c454ea8a": "airdropMap(uint256)", +"c4550f16": "ContractControllerAdded(address)", "c4552791": "proxies(address)", +"c455fee8": "setSummonDelay(address,uint256)", "c4561d61": "finishICO()", "c456354e": "setEndTimeStamp(uint256)", +"c4568472": "whitelists(uint256,address)", "c4569504": "getKudosOf(address)", +"c456b39c": "AvatarTransferStateChanged(address,bool)", "c456d394": "getPixelPrice(uint256)", +"c456de92": "getOracleType(address)", "c4576525": "WEC()", +"c457aa8f": "setSystemRandomHardLimit(uint256)", +"c457b3fb": "approve_406(address,uint256)", "c457fb37": "getTokenPrice(uint256)", +"c4583240": "teams(address)", "c45849c2": "doDistribution(uint256,address,uint256)", +"c458b65a": "auction_end()", +"c458bc9f": "PlayerPaidOut(address,uint256)", "c458e5f3": "CrowdForceTestToken()", "c4590d3f": "setLimits(uint256,uint256)", "c4596419": "mintSoldTokens(address,uint256)", "c45982b9": "madd(uint128,uint128)", "c459b003": "ATTR_PERMANENT()", +"c459b731": "GetTotalTokenRewardDistributed()", "c459b9e3": "MaxStarIndexAvailable()", "c45a0155": "factory()", +"c45a2fe3": "deploy_all_capital_single_pool(uint256,uint256)", "c45a4047": "batchTrasfer(address[],uint256,uint256)", "c45a6f98": "unlockMultiple(address[])", "c45aa04c": "queryShareholders(bytes,uint256)", "c45ad06a": "etherSince50()", +"c45af5d8": "showReward(address)", "c45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", "c45bb448": "MIX()", +"c45c0beb": "recoveryRatePD(uint256)", "c45c4f58": "balance1()", "c45cda5a": "init_fund()", "c45d19db": "tokensToBeReturned(address)", @@ -112461,89 +205799,154 @@ "c45ddd87": "targetDiscountValue4()", "c45df8e5": "COSIGN_MAX_TIME()", "c45e4a7b": "SwiftDex()", +"c45eb835": "setBaseAddress(address,address)", "c45ec88c": "Put(bytes32)", "c45ef547": "offlineDiscipleSold(uint256,address,uint256)", "c46073f7": "LUCYD()", "c46093de": "_0xMonacoinToken()", +"c460ae04": "divMemoryCheck()", +"c460f906": "halfHope()", "c46180a7": "setBalanceOfActiveToken(address,uint256)", +"c4618101": "DEV_FUND_LOCKED_MONTHS()", "c461889e": "OkLive(uint256,string,string)", "c4618978": "MIN_INVEST_ACTIVE()", +"c461d0b3": "lottery_ticket_price()", "c4620549": "quaker(address)", "c4626ea7": "PumpHodl()", "c4628520": "cashoutEOSBetStakeTokens(uint256)", "c462a408": "maxParticipantCount()", +"c462aabd": "oraiAddressLength()", "c462bd11": "setupRules()", "c46362fd": "set_merge_mint_threshold(uint256)", "c463a1af": "CapitalMatchToken()", "c463b008": "triggerTransferEvent(address,address,uint256)", +"c4643e20": "log(address,bool,uint256,bool)", "c464fe65": "sellTokens(address,uint256)", +"c46528e5": "updateCreatorDPORequireAmount(uint256)", +"c465a3db": "aCap()", "c465e742": "UpdatedTokenInformation(bytes32,bytes32)", "c466313c": "GetMainSale()", "c4664649": "FIXEDREWARD_MM()", "c4666fab": "transferNodeContractOwnership(address)", +"c466fe84": "getDepositablePosition()", +"c467201e": "mintAllowed()", "c467706d": "startEarlyAdopters()", "c467a317": "freezeTeam()", "c467b0ff": "_play(uint256,uint256,uint256,uint256,uint256)", +"c467b2a8": "isTeamNameAvailable(string)", +"c46827ac": "ParticipantJoined(address,bytes32)", +"c4692049": "halvingMachine(uint256)", "c4694ec6": "ecoSupply()", "c4697667": "BONUS_WL()", +"c4697c21": "coreRole(address)", +"c4698ee5": "getLastUserPoint(address)", "c469eb99": "deleteFromWhiteList(address,address)", "c46a23a2": "signedAverage(int256,int256)", "c46a2925": "setMinApprovalCount(uint256)", +"c46a2ce3": "setRoboPercentages(uint8,uint8)", "c46a3a0d": "icoPhase1EndTime()", "c46a6262": "playEtherOf()", "c46aaf38": "PharmaGenome()", +"c46acb3f": "getCodeHashRevert()", "c46b2d9d": "denyBundling()", "c46b644b": "NewTicketEvent(address,uint8,uint8,uint8)", +"c46b77c2": "actualClaimLength()", +"c46c3479": "swap2BTIRouting(uint256)", "c46c3c68": "RuffToken()", +"c46ca0d8": "SHARE_NOMINAL_VALUE_ULPS()", "c46cacae": "initial_time()", "c46ce53e": "getOneTotalFeesCollected(uint256)", "c46d2235": "serverEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", "c46d4cf1": "thawAccountTransfers(address)", +"c46d6e88": "shortOpenTotal()", +"c46d927d": "getValueEpoch(uint256)", "c46df008": "walletData(address)", "c46e3e85": "unitGooProduction(uint256)", "c46e614a": "isCMCT()", +"c46e8810": "sakeRouter()", +"c46e8e63": "triggerContractAddressEvent()", "c46ed45a": "fee_percentage()", +"c46f18f7": "getStatusByItem(address,uint256)", "c46f3e25": "lastChanceEnabled()", +"c46f5605": "reserveMintWeight()", +"c46fa2af": "changeTimelock(address)", "c4701037": "aaa(bytes)", "c47028c1": "TOKEN_RATE_CROWDSALE()", +"c470303c": "unmintXBuoyToken(uint256)", "c47031ab": "getKarma()", "c470ff6d": "getInsideCallCount()", +"c47155d3": "etherCollateralsUSD()", "c4716d0f": "contributedCap(address)", +"c471b10b": "sellTRU(uint256)", +"c472367d": "addProtocolAdapters(bytes32[],address[],address[][])", "c4725577": "getPrice(uint256,uint256,uint256,uint256)", "c472c7e6": "setTotalWithdraw(address,uint256,address,bytes,bytes)", "c4735121": "thirdRoundTime()", +"c473af33": "EIP712DOMAIN_HASH()", +"c473df9f": "knightFee()", +"c473f8c0": "Log1_fnc(address,bytes32,uint256,string,string,function,uint256,bytes1,uint256,uint256)", "c4740a95": "removeAccount(address)", "c4749079": "_roundDivision(uint256,uint256,uint256)", "c4749bbd": "showInvestBalance()", +"c474a5cc": "setSlippage(address,uint256)", "c474e70a": "returnFundsForMultiple(address[])", +"c4752705": "DMG_GROWTH_COEFFICIENT_DECIMALS()", "c4752773": "priceStep3()", "c475abff": "renew(uint256,uint256)", +"c475b231": "Cause(address,uint256,uint8,string)", "c475cdf5": "issueNew(uint256)", +"c4761a43": "distributedSecond(address)", +"c476dd27": "couponIssued()", "c476dd40": "reportMalicious(address,uint256,bytes)", +"c476fe41": "toshimonMinter()", +"c4773a73": "totalTokensReleased()", +"c4775a68": "penalizer()", +"c4778998": "unstakeLP(uint256)", +"c477c3ff": "claimDFL(address[])", "c477d234": "checkIfAlreadyOrderedForDay(uint256,address)", +"c477d6ff": "claimBorrowRewards(address)", +"c477e06a": "transferPercent(address,uint256)", "c4784fd4": "setMsg(string)", "c4788efe": "resetTotalVotes()", "c478b52f": "PLATINUM_AMOUNT_TPT()", "c478fc37": "EtherWheel(uint256,uint256,uint8)", +"c47907f8": "migrate(address,address,bytes32)", "c4791421": "changeCooldownEndTime(uint40,uint40)", "c47958e2": "ERC20(string)", +"c4796437": "transactionIndexesToSender(address,uint256)", "c479ace6": "updateOwners(uint256,address,address[],uint256,uint8[],bytes32[],bytes32[])", +"c479bad6": "getMaximumDisputeRounds()", +"c47a4cbe": "gasBalance$()", +"c47a6607": "parliamentsTaxesLastDistributed()", +"c47ac1ac": "scValidDays()", "c47af5cf": "ChangeCost(uint256)", "c47af732": "setReserved(address,bool)", +"c47b8164": "cacheReserveAddress(address,uint256,bool)", "c47bc007": "add_funds()", "c47c4cc7": "getInitialBalanceByAddress(address,address)", +"c47c97c9": "getInvestitors()", +"c47cbb14": "PricePerCollectable()", "c47cf5de": "getAddress(bytes)", +"c47cfca1": "vestingOf(address)", +"c47d1d8b": "mintAndSetTokenURI(uint256,address,string)", +"c47d5844": "HDUD_RATIO()", "c47d5bb8": "unitsUserCanBuyLimitEth()", +"c47d702f": "HousePriceChanged(uint256,uint256,uint256)", +"c47dbf6b": "AuctionStarted(uint256,uint128,uint128,uint256)", +"c47e300d": "deposit(bytes,bytes,bytes)", "c47e7bcb": "softcap3Reached()", "c47e951f": "adjust_eth(uint256)", "c47e9fea": "ContributionRefund(uint256,address)", +"c47ec749": "add_to_BlackList(address)", "c47ef875": "activeTokens()", "c47f0027": "setName(string)", "c47f0f90": "getPurchases()", +"c47f8f54": "SHUFLE_BY_ETH()", "c47fae76": "autoPlayBot()", "c47fc244": "grantInvestorsTokens(address[])", "c48029d4": "AddTokensToMember(address,int256)", "c4806df4": "createTokenOwner()", +"c480c0d3": "RetireFromPool(bytes32)", "c480e583": "revertTransfer(address,uint256)", "c4811a0e": "maxICOThirdSupply()", "c4813b2c": "StgOnebonusEnds()", @@ -112551,37 +205954,59 @@ "c4818ae1": "joinPillar(uint256,uint8,uint256)", "c4818cdc": "_balanceOf(address,address)", "c482299f": "transferAUTOtokens10(address[])", +"c4823739": "onTokenSell(address,uint256,uint256)", "c482ceaf": "reinit()", +"c48305e2": "supraBal()", "c4834c30": "teamTotalSupply()", "c483b71c": "Map(address)", "c483befa": "setParameters(address,string,string,string,address,uint256,uint256)", "c4841369": "paymentsByPurchaser(uint128)", "c4843365": "getRarity(uint32,uint256)", +"c48467fb": "testSortedInsert()", +"c48481cb": "approve_305(address,uint256)", "c48513a4": "getStringConstant()", "c485297b": "HelloSystem()", +"c48546df": "tradeUni(uint256,uint256,address[],uint256)", +"c4856cd9": "loadLimitPending()", +"c48589d5": "isRPMapEnable(address)", "c48590e9": "PARTNER_SUPPLY()", "c485ac95": "setWalletForTokens(bytes32,address)", +"c485f5d6": "usdStakingAmount()", "c486301b": "AcceptsExchange(address)", +"c486456c": "STATE()", "c4864f45": "changeAcceptExchange(bool)", "c4868452": "preIcoActive()", "c486d133": "round1InitialBonus()", "c4871039": "totalWeiRaisedDuringPhase2()", +"c487ab0b": "referrerTomain(uint256)", "c4882e44": "disableRound0()", "c488847b": "liquidateCalculateSeizeTokens(address,address,uint256)", +"c488a09c": "withdrawETH(uint128)", +"c488a2a3": "unlockTimeStamp(address)", "c488d6f2": "stopOffering()", +"c4894507": "gettokensToEthereumbuy_(uint256)", "c489744b": "getTokenBalance(address,address)", "c489a649": "updateAirdrop(address)", +"c489c454": "_getUniswapV2Router01Address()", +"c489cce3": "addMilestone(string,string,uint256,uint64,address,address,address)", "c48a0dc0": "OptionToken()", +"c48a3940": "enableDistributeTransferWpc()", "c48a3cbf": "setStackPtr(uint256)", "c48a66e0": "transferTimelocked(address,uint256,uint256)", "c48a7560": "sellScams(uint256)", +"c48ab0f1": "giveDown(address)", "c48b1cf0": "test_5_accessRestriction_addMember_shouldThrow()", +"c48c1a71": "getPriceCount()", "c48c68ee": "addressFounders4()", +"c48cc73e": "pendingYfrb(uint256,address)", +"c48ce27d": "authorisedToken(address)", "c48d5a4a": "_buy(uint256,uint256,uint256,address,uint256)", +"c48d88ac": "setSRC2(address)", "c48d93d8": "JuraToken(uint256,string,string)", "c48d99ca": "DataDumped(address,string,bytes32)", "c48db366": "Africacoin()", "c48dc5fb": "JackpotAwarded(uint256,address,uint256)", +"c48ddbcb": "addExternalErc721Award(address,uint256[])", "c48e1c4d": "importAddresses(address[],address[])", "c48e5ec4": "getPurchaseDetail(uint256,uint256)", "c48e819c": "test_openRegistry()", @@ -112591,30 +206016,60 @@ "c490a266": "toUInt(bytes)", "c490dfa6": "isVerifiedAddress(address,address)", "c491fd18": "FlexibleTokenSale(address,address,uint256,address)", +"c4925b42": "editItemInfo(uint256,string)", +"c4925fea": "setApprove(address,uint256)", +"c49298ac": "reportPayouts(bytes32,uint256[])", +"c492b040": "Cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32)", "c493afcf": "closeRefund()", +"c4943fbc": "getBalanceETHReceiver(address)", +"c494448e": "approveStrategy(address,address)", +"c4947b9b": "getVoteCasterVestingDays()", "c494a080": "totalPlayer()", +"c494c313": "InitializedChallengeAddress(address[10],uint256[10])", "c494c3dc": "hashParent(uint256,bytes32,bytes32)", "c494c3f7": "teleportKnight(uint32)", "c494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", "c49589bb": "rateUSDcETH()", +"c49598fb": "acceptingSolutions(uint32)", +"c4960450": "updateFulfillment(address,uint256,uint256,address[],string)", +"c4966e95": "contractBalanceCheck()", +"c4968920": "_usdwei()", "c4969b8f": "setSellerAndAmt(address,uint256)", +"c496a4e1": "Account(uint256)", +"c496d708": "lendingpool()", +"c4970cbb": "beginOfPayments()", "c4977807": "getFrozenAccount(address)", +"c497da8d": "used(address)", +"c497dcdf": "Drop(address[],uint256[])", "c4983c65": "updatePoints(address)", +"c498c515": "setAllocations(uint256[])", "c498fcfd": "getUnitDefenseIncreases(address,address,uint256)", +"c4996f51": "_gonsPerFragment()", "c49a1ede": "updateShareValue(address,uint256)", "c49a3b04": "OraclizeVerifier(address,string,uint256,uint256)", +"c49a8b19": "getClaimRewardDetail(uint256)", "c49a8fc9": "secureUpdateOrderFunds(address,bool,uint128,uint128,uint128,uint128)", "c49b94e9": "getTokenTxn(uint256)", +"c49b9a80": "setSwapAndLiquifyEnabled(bool)", +"c49baebe": "VALIDATOR_ROLE()", +"c49c1ef1": "totalAmountToBeSwapped()", "c49c3635": "getEventOutcomeIsSet(uint256,uint256)", "c49d3b9f": "memberData()", +"c49d7205": "claim_wxeq(string)", "c49d9ff8": "chatMessages(uint256)", +"c49e4fd9": "permStorage()", +"c49e80a6": "isOpenForLiquidation(address)", "c49ee5b4": "finalUnpause()", +"c49eec5f": "bigFunCards(uint256)", "c49f91d3": "EIP712DOMAIN_TYPEHASH()", "c49fea77": "setVariables(uint8,uint8,uint8,uint8,uint256)", "c49fef66": "maxAnimals()", "c4a06710": "isKYCPassed(address,address)", "c4a0dada": "getOtherName()", +"c4a0f430": "LogStalePriceUpdate(bytes32,uint256,string)", "c4a13f23": "affiliateBonusPercent()", +"c4a17ec9": "redeemReputationByRewarder(bytes32,address,uint256)", +"c4a1dbad": "querySuperNode(address)", "c4a1dfda": "viewFirstBatchOfClauses()", "c4a1ee37": "gasLimitWithdrawConfirm()", "c4a1fedf": "increaseWeeklyTransactionVolumeReceiving(uint256)", @@ -112623,32 +206078,63 @@ "c4a2e641": "confirmTransaction(uint256,bytes)", "c4a2fe12": "setversion(uint256)", "c4a31557": "packSaleAddress()", +"c4a31da1": "getMessageHash(address,uint256[],uint256)", "c4a381b8": "setTokenRate(uint32)", +"c4a46e3c": "amIPeter()", +"c4a49b13": "topwinner2_percentage()", "c4a4cb4e": "countMilk()", "c4a4e267": "weaponToApproved(uint256)", "c4a4f265": "minimalContribution()", "c4a50433": "unprocessedProfits()", "c4a5350d": "createNewContract(string,string)", +"c4a5aafc": "cardIdCount()", "c4a5b138": "approved(address,uint256,address,bytes)", +"c4a63ee4": "getAllUnverifiedContractors(string)", +"c4a6d0d2": "getCurrentTokenID()", +"c4a6fed1": "FAILURE_WHITELIST_TRANSFER_LIMIT_MESSAGE()", +"c4a76eb7": "LogBonusThresholdChanged(address,uint256,uint256)", "c4a796c1": "setReferee(address)", +"c4a7c94b": "maxBPro(bytes32)", +"c4a80a2a": "getBassetIntegrator(address)", "c4a8158c": "getMyTurtle()", "c4a8598e": "BANCOR_X()", "c4a85bc1": "allowAccess(address)", +"c4a88275": "last_distribution()", "c4a89e9e": "lengthOf(uint256,uint256)", "c4a8a670": "getEvent(string,uint256)", "c4a8b570": "setdteamVaultAddr3(address)", +"c4a90815": "loans(bytes32)", "c4a942cb": "chunkSize()", "c4a96758": "getByteFromByte32(bytes32,uint8)", +"c4a96ecf": "LogStartNextGame(uint256)", +"c4a9bf9f": "stakingUniPools(address)", +"c4a9c7d1": "confirmToRelease()", +"c4a9d4d6": "playerInfos(address)", "c4a9e116": "stakeCount()", +"c4aa2617": "hecoPool()", "c4aa94a6": "withdraw(address,uint256,address[],uint256[])", +"c4aacb82": "totalBetsWonByAddress(address)", +"c4aba4a1": "_setDutyFee(uint256)", +"c4abd3eb": "setKatrinaExitFee(uint256)", +"c4abde4b": "lockedAccount2WithdrawedAmount(address)", +"c4abedc4": "meteorFromToken(uint256,bool)", +"c4ac59b2": "naasRewardPerBlockDenominator()", "c4ad32be": "generateTrees(uint256)", +"c4ada692": "pullCoverReward(uint256)", +"c4adacf9": "viewCurrentPrice(uint256)", "c4adb406": "validDestinations(uint256)", "c4ae16a8": "getPlayerId(address)", +"c4ae2f52": "updateFiatPrice(uint256,uint256,uint256)", "c4ae3168": "togglePause()", +"c4aff15a": "setRegistryOnlyMode(bool)", "c4b05f49": "addThing(string,string,string,string)", "c4b06c19": "SeedSale(address)", +"c4b07bcc": "updateStakeAddress(address)", +"c4b0e31e": "pendingAlpa(address)", "c4b14e0b": "getSignature(bytes32)", "c4b195ab": "r2(address)", +"c4b21cb0": "lpBal()", +"c4b22e7d": "KillMarket()", "c4b24a46": "checkReward()", "c4b2841c": "_doTradeWithEth(address,uint256,address)", "c4b293db": "getBuyRatio()", @@ -112657,211 +206143,402 @@ "c4b2eccb": "maxAmountAddresses(address)", "c4b35f3d": "DIV()", "c4b379f7": "earningsOfPlayer()", +"c4b37e3d": "batchSpendableBalanceOfByPartition(address[],address[])", "c4b3a516": "setPercentageAvailableToSell(uint256)", +"c4b3da14": "checkAwardPartner(address)", "c4b40fb7": "tkcAddress()", +"c4b47ec8": "percentWithdrawn(address)", "c4b4dff1": "PayChain()", +"c4b50cdf": "getEstimatedETHforToken(uint256)", "c4b54551": "MAX_SPARTANS()", +"c4b56273": "UNIROI()", +"c4b56da9": "lotAmount()", "c4b57df5": "createEscrow(uint16,address,address,uint256,uint16,uint32,uint32)", +"c4b5a425": "amountWon(address)", "c4b5cde2": "EventBuyShip(address,uint16,uint64)", "c4b5f891": "LTBToken()", "c4b62bbb": "updateAddressSetting(uint256,address,address,string,string)", "c4b67e8a": "generateReport2(int8[],uint32[])", "c4b6b5fd": "initChallenge()", "c4b6c2f3": "btcPriceProvider()", +"c4b6ebdf": "ref(address)", "c4b6fec9": "sendVal()", "c4b71cec": "ICO_LEVEL_1()", +"c4b740f5": "setVaultOnly(bool)", "c4b781a8": "setPercentAllocationFee(uint256,uint256)", "c4b7c4cf": "communityVote(bytes32,bool)", "c4b80f6e": "incPlayerOwed(address,uint256)", +"c4b8db46": "lastPaid()", "c4b9223f": "setVestingSchedule(address,address,uint256,uint256,uint256,uint256,bool)", "c4b9897b": "IagonToken()", +"c4b9b686": "ErcAddress()", +"c4ba8c26": "unpauseSatellitePool(address)", "c4baa573": "process2(bytes32,uint256[],bytes)", "c4baf4a4": "IQT_FUNDATION_ADDRESS()", "c4bb0173": "hash_sha3(string,uint256)", +"c4bb2f32": "coinAddress(uint256)", +"c4bbd25d": "playDiceGame(string,address[],string,uint256,uint256,uint256,uint256)", +"c4bc4210": "UnstakeAndClaim(uint256)", "c4bc5da5": "resumeContract()", "c4bc7b70": "setGlobal(uint64,bool)", "c4bd10d9": "getPollOption(uint256,uint256)", +"c4bd8519": "submissionTimeout()", "c4bd8ebc": "num_monsters()", +"c4bddc36": "withdrawPartial(address)", "c4bde5e1": "totalLotteryNumber()", +"c4be22d7": "primaryMint(address,address,address,string,uint256,uint256)", +"c4be6bb4": "mintThenLock(address,uint256)", "c4bebd69": "pauseLastStart()", +"c4bebec3": "donut()", +"c4bf0220": "emergencyCall(address,bytes)", +"c4bfc11b": "pendingFromPancakePool()", +"c4bfca83": "numDailyTraders(uint256)", "c4bff124": "addBlacklistItem(address)", +"c4c00cea": "emitAddUserIdToPersonId(address,string)", +"c4c00f28": "lastGuessValueToday(address)", +"c4c04195": "setAcoFeeDestination(address)", +"c4c0567b": "totalUserBalance()", +"c4c05c21": "updateVars(uint256,uint256,uint256,bool,bool,uint256)", "c4c0698d": "withdrawInEmergency()", +"c4c0f646": "setICO()", +"c4c12df9": "releaseByContract(address)", +"c4c14883": "Funded(uint256)", "c4c1b39a": "tokenPriceInitial_()", "c4c1c94f": "add(address[])", "c4c1d835": "DataAuction(address,address)", +"c4c1f97f": "canBuyTotalToken(address,uint256)", +"c4c20eec": "mCodeIndexPlus(bytes32)", "c4c22e98": "blockInterval()", +"c4c23898": "sdvdEthPairAddress()", "c4c24249": "turnLast()", +"c4c271fe": "approve_313(address,uint256)", "c4c2e702": "execute(uint32)", "c4c308be": "getBeneficiaryCash()", +"c4c30f4c": "approvedTransferAddress(uint256)", "c4c3718b": "satoshi_bth_decimals()", "c4c39ba7": "SWAP_CAP()", +"c4c3bc62": "writeBytes(bytes1,bytes16,bytes32,bytes)", +"c4c4039a": "Do_Stacking(uint256)", +"c4c4752f": "enterBet(uint256,uint256,uint256,uint256,uint256)", "c4c49380": "setCap()", "c4c4a89b": "buyNewDrone(uint256)", +"c4c4c7b3": "initialize(uint256,address[],address[],address)", "c4c4d00b": "CRBTTokenLive()", "c4c4e3c0": "GOLD_AMOUNT_SKL()", "c4c4e438": "oraclize_query(uint256,string,bytes[3])", "c4c50acf": "giftTokens(address,uint256)", +"c4c529b6": "getTotalCushion(address,address,uint256,uint256)", "c4c59c77": "ethIN()", +"c4c5d8fc": "yfs()", "c4c5f3de": "forecastingClosed()", +"c4c63bed": "setBounusBlock(uint256)", "c4c6710d": "buyTicket(uint256,uint256,uint256)", "c4c676cf": "TRBToken()", "c4c68b44": "getTotalSupplyForType(uint256)", +"c4c6eaad": "uniswap_pair()", +"c4c70493": "registerFarmingPoolLisaEth(address)", +"c4c714ec": "rERC20Impl()", "c4c745b6": "getBonusFactor(address,uint256)", +"c4c77e25": "withdrawLoan()", +"c4c7acec": "idkPerRequest()", "c4c842f7": "_emitJobBinded(uint256,uint256,bool)", +"c4c851b6": "batchFunctionCall(address,uint256,address,bytes)", +"c4c89218": "sendAlpaca(uint256)", +"c4c8b35b": "setNextThreshold(uint256)", "c4c90d70": "withdrawHouseFee()", "c4c90f4c": "tokenUsersSave(address)", +"c4ca3a9c": "requiredTxGas(address,uint256,bytes,uint8)", +"c4ca4ee9": "DOSRefund()", +"c4ca75bb": "withdrawLostERC20Tokens(address,address)", +"c4cad632": "blockPerPeriod()", "c4cae886": "setManualTradingAllowed(bool)", "c4cb291e": "unpaid()", +"c4cb58c8": "storeDocument(uint256,string,bool,uint256)", +"c4cb8dbb": "setChainLinkOracle(address,address)", "c4cbb591": "compot()", "c4cbd65b": "isTourUnfreezed(uint256)", "c4cbfa44": "isConstructor()", "c4cc161b": "SellSnail(uint256)", +"c4cc55e6": "getBulkLength()", "c4cc5616": "addStory(uint256,string)", "c4cc6e53": "TgeOtherReleasingScheduleContract(uint256,uint256)", +"c4cc9253": "takeFunds(address,uint256)", "c4ccf6ea": "getAmountBonus(uint256)", +"c4ceb0f2": "variable1()", +"c4ceb339": "burnFeePercentage()", +"c4cf71c9": "setWithdrawalCredentials(bytes)", "c4cf8a40": "createTradeContract(address,address,uint256,uint256,uint256,bool,bool)", +"c4cf9011": "dfg()", "c4cf9385": "MetaMorph()", "c4cfc5be": "PGE01NY()", "c4d01481": "getPreRemainCoins()", "c4d07951": "setVoting(address)", +"c4d081a7": "nextEpochPwdrReward()", +"c4d097ca": "Selfdestructs()", +"c4d0cede": "udons()", +"c4d0e4aa": "rewardStack()", +"c4d14e56": "MaxCanBuildAsset(address)", "c4d18b18": "calculatePoohBuy(uint256,uint256)", +"c4d1978a": "StateChangeEvent(uint256)", "c4d252f5": "cancel(bytes32)", +"c4d25468": "getCatnipV1Supply()", "c4d259ad": "setIsAdmin(address,bool)", "c4d2783c": "GTTAirdrop(address,address)", +"c4d2aefe": "SplitFromToken(uint256,bool)", "c4d2b1b3": "getLoanData(bytes32)", "c4d2bac9": "HelloToken()", +"c4d3249a": "validateTxGasLimit(uint256,uint256)", +"c4d352aa": "__ERC95_init(string,string,address[],uint8[],uint8[])", +"c4d36180": "Nhom2(uint256)", "c4d3926a": "currentTokenIdNumber()", +"c4d3f9d9": "payMiner()", +"c4d40556": "newProposal(address,uint8,bytes32,bytes32)", "c4d42292": "ResidualShare(uint256,string,string)", +"c4d4c323": "work(uint256,address)", "c4d4fdc0": "getBonusRateForTimeBased()", +"c4d5cc4a": "voteInfo(address)", +"c4d61469": "Defrosted(address,uint256,uint256)", "c4d66de8": "initialize(address)", +"c4d6b7cc": "isPrizeClaimed()", "c4d77090": "nodeAddresses(uint256)", +"c4d7841a": "Proposal()", "c4d7b98f": "erc20ContractSwitch(address,address,uint256)", +"c4d84fd3": "totalBetsLostByAddress(address)", +"c4d85d12": "WolfingBets(uint256)", +"c4d87284": "setWeiLimit(uint256)", "c4d8aa44": "VenaCoin()", +"c4d8f17e": "setx(uint256)", +"c4d8f237": "stakingProxyAddress()", "c4d9102f": "setNextID(uint256,int256)", +"c4d91361": "defineBonuses(uint8,uint256[],uint256[])", +"c4d92438": "choseWinner()", "c4d97470": "PeriodReset(uint256,uint256,uint256,uint256)", +"c4d99b0e": "syncMinimum()", +"c4d9dcaf": "setRequiredVotes(uint256)", +"c4da9480": "itembase()", "c4daa2a6": "roundFees(uint256)", +"c4db019d": "newPriceTicker(uint256)", +"c4db0b5a": "ExercisePut(address,uint256,uint256,uint256)", +"c4db7fa0": "stopRampA()", +"c4dbdcbf": "_own_address()", "c4dbf622": "buyPrice(uint256)", +"c4dc0042": "redeem_allowed()", "c4dc1556": "finalizeProposal()", "c4dcad1d": "mining(address,uint256)", "c4dd3b33": "checkUserSignature(address,string,uint32,string,string,bytes32,bytes32,uint8)", "c4dd5acc": "isLastBadgeEle(uint256,uint256)", "c4dddedd": "addressVerified(string)", +"c4de0b49": "swapUniBalancer(address,address,address,uint256,uint256)", +"c4deb478": "auditShared(address,uint256)", "c4ded499": "getActiveBetsAmount(address)", "c4df310a": "isWithinTokenAllocLimit(uint256)", +"c4df4431": "approve_345(address,uint256)", +"c4df83d9": "removeLiqidity(address,address)", +"c4e0d200": "approveERC20(address,uint256,address)", "c4e11c91": "updateStats(uint256,uint256)", "c4e12e1d": "updateMinVotedTokens(uint256)", "c4e16b7d": "whitelistToken(address,uint256)", +"c4e171e4": "setRoyalties(uint256,bool,bool,uint8,uint8)", "c4e1793f": "_onOverTimeBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", +"c4e18e59": "transferSubURI(address,address,string,string)", +"c4e1ccf2": "prohibit(address)", +"c4e24ea8": "resumeTokens(uint256)", +"c4e29797": "token_transfer_status()", "c4e29e66": "getOrderHash(address,uint256,address,uint256,uint256,uint256,address)", +"c4e2c1e6": "withdrawTo(address,uint256,address)", +"c4e34aba": "blocksInEpoch()", "c4e34d46": "lockBonusTokens(uint256,address,uint256)", "c4e37095": "setSaleState(bool)", "c4e3a63b": "firstPeriod()", "c4e41b22": "getTotalSupply()", "c4e5b7f2": "createAcceptAndPayFromBytes(bytes,address[],uint256[],uint256[])", +"c4e5f083": "setMinimumCommitTime(uint256)", "c4e5fd83": "_safeTransferFromInternal(address,address,uint256,bytes)", "c4e627c2": "maxTokenCount()", +"c4e628d9": "testUnavailableActionsWhenPending()", "c4e6aaa6": "setLocationId(uint32)", "c4e6c604": "otherAddress()", "c4e7099f": "mockTime(uint32)", +"c4e70e2e": "sellPool(uint256,uint256,address,bytes32[],bytes)", "c4e71adc": "firstReleaseTime()", +"c4e72dc9": "ToiletPotChange()", +"c4e7374a": "zgov()", "c4e7d14c": "MultiSender(uint256)", "c4e85b63": "flushTokens()", +"c4e87c66": "sCHICAGOSBlock()", +"c4e8a239": "setPosition(int256,int256)", "c4e9311b": "bindJobWithBoard(uint256,uint256)", "c4e98398": "SimpleRegistrar(bytes32,uint256)", "c4e9e80b": "setAutoSell(uint256)", +"c4e9fd0b": "eWithdraw(address,address,uint256)", +"c4ea66dc": "shuf()", "c4eaa978": "_price_token_ICO4()", +"c4eae915": "issuanceDataIndexOrder(address)", "c4eb2b3c": "putSaveData(address,address,string)", "c4eb8ec2": "transfer_ether(address,uint256)", +"c4ebc3c9": "newVoteLogged(address,bool)", +"c4ec22ad": "lastPoke()", +"c4ec3b19": "capEnabled()", "c4ecfbbe": "MonsterChampionship(address)", +"c4edcfbb": "defiStableCash()", +"c4edd54a": "Proposal(uint256,address,address,uint256,address,uint256)", +"c4ede67d": "unwindRewards(uint256[],uint256[],uint256[])", +"c4ee19ea": "globalCoverage()", +"c4ee5c77": "calcx(uint256,uint256,uint256,uint256)", +"c4ee86af": "traitIdByGenerationGeneAndVariation(uint8,uint8,uint8)", +"c4eedcd8": "withdrawCommissionBalanceWEI(address)", "c4eeeeb9": "isReissuable(bytes32)", "c4ef18fc": "setRentAuctionContractAddress(address)", "c4ef92d3": "OmiseGOGold()", "c4efa665": "decimalPrecision()", +"c4efcf0f": "minMessageIndex()", "c4f06ba9": "makerOf(uint256)", "c4f07cff": "getWithdrawTransactionIds(uint256,uint256,bool,bool)", "c4f0a043": "BTCPrice()", +"c4f0c1fc": "stakings(uint256)", +"c4f0c784": "getProposalYesAddr(uint256)", "c4f1215c": "maxGoalReachedAt()", "c4f141ff": "setWeiPerCHF(uint256)", "c4f14c9c": "restrict(address,address)", "c4f161ab": "isWinner(address,address)", "c4f1ce79": "clearCurPrize(address,uint256)", +"c4f23533": "toUnderlyingForReclaim(uint256)", +"c4f25f10": "procNormalSales()", "c4f2a64f": "blockWait()", "c4f2a7af": "GeneScience(address)", +"c4f2d249": "approveFor(address,address,uint256,bytes)", +"c4f2f27f": "Flyer()", "c4f35d6c": "WithdrawalToken(uint256)", "c4f363bf": "getVersionByte(uint256)", +"c4f3a853": "unlockAll(address)", "c4f3c097": "setBasicRate(uint256)", +"c4f467a0": "artUpdateTickets(uint256)", +"c4f48a09": "vegePerBlock()", +"c4f4912b": "scalarMultBase(uint256)", +"c4f4a8ae": "paidIndex(address,uint256)", +"c4f4face": "replaceAdmin(address)", "c4f54568": "blocktubeTag(string)", +"c4f57b83": "getExchangeAmountIn(uint256)", +"c4f5adda": "exchangeIdsFromSender(address,uint256)", "c4f5cd82": "firstAllocation()", +"c4f610ed": "getIntValue(bytes32,bytes32)", "c4f62031": "setPlayerPrice(uint256,uint256)", +"c4f62fee": "betaDelegateWhitelister()", +"c4f649ab": "isLockActivate(address)", +"c4f6735a": "INX_DeleteSuperInvestor(address)", +"c4f712f7": "BeneficiaryAdded(uint8,address)", "c4f7f1e2": "scaledRewardPerToken()", "c4f8210e": "_safeTransfer(address,uint256)", +"c4f82cf2": "setJoinFeeRatio(uint256,uint256)", "c4f8adc7": "consul_nme()", "c4f8b9fb": "testAdd(uint256,uint256,uint256)", "c4f8f339": "getPercent4(address)", "c4f95105": "showUnpayedPercent(address)", "c4f987a5": "removeWorker(address)", "c4f99aa5": "publicReservedAddress()", +"c4fa60f4": "total_voting_power()", +"c4fa71e4": "solveTask(uint256,uint256,uint256,uint256)", "c4fa9c6b": "getReservedTokenDestinationList(address,bytes32)", "c4faa950": "BrinkToken(uint256,string,uint8,string)", "c4fbdaff": "gibLambos(uint256)", "c4fc3a3b": "presaleTokenSupply()", +"c4fc7828": "excludeExchange(address)", "c4fc89e1": "bubbled()", "c4fce59a": "fourthExtendedBonusSalesEnds()", +"c4fcf826": "priceCapped()", "c4fd262a": "CrowdsaleStarted(uint256,uint256,uint256,uint256)", +"c4fd5002": "getRetirePrice(uint256)", +"c4fd6b2d": "failBorrowRate()", "c4fda23e": "sellTokensIcoWithReferal(address)", +"c4fdb782": "_setSashimiRate(uint256)", "c4fdc6b8": "pauseIco()", "c4fe2675": "getProtoIdByTokenId(uint256)", +"c4fe90d3": "functionalitiesToJSON(uint256,uint256)", "c4fed7fb": "addHouseCredits(address,uint256)", "c4ff3614": "Wallet(address[],uint256,uint256)", +"c4ff9816": "TRADE_OPERATOR_ROLE()", "c5007227": "DTToken()", +"c5009ed7": "AVAILABLE_NINJA_FOR_AIRDROP()", "c500ea36": "userPendingCrateNumber(address)", "c501024b": "setMinCutValue(uint256)", +"c5013863": "saleClockAuctionContract()", "c5015018": "TEAM_MONTHLY()", "c501825a": "WALK()", "c501b87f": "setCreditMcAddress(address)", +"c501ba59": "mintAndSend(address)", +"c502b13b": "saleTitle()", +"c5030fb9": "setCarrier(address)", "c503101e": "setCanClaim(bool)", "c503772d": "returnUint8(uint8)", +"c503911a": "premiumsAccum()", "c503a868": "getTeamFee(address)", +"c503fc3b": "querySellDPOAmount()", +"c5040a43": "returnLiquidity(address,uint256,uint256)", "c5043343": "tempSetWinner(uint256,address)", "c5044b62": "isDescriptionFinalized()", "c50497ae": "SUPPLY()", "c50499db": "developer_string_contract_verified(string)", +"c5049c0f": "offersTo(address)", "c504bfb8": "ColorsMain()", "c50508de": "initialAuctionDuration()", +"c5053add": "GetLastPoolId()", +"c5055f2f": "pledgeOf(address)", "c505c82c": "zxcSold()", +"c505cb54": "setADRPerBlock(uint256)", "c505ebce": "endRate()", +"c5067813": "mi_user(uint256)", "c506adae": "migrateInvestorsFromHost(uint256)", +"c506b864": "SwapRefunded(bytes32)", "c5072172": "justThrow()", +"c507aeaa": "add(uint256,address,bool,bool)", "c50853f5": "getNumPublications()", "c50886ae": "test_ConsensysNotReached()", "c508d8f2": "reederemPeriods(uint256)", +"c5094a5b": "sdvd()", "c5096a69": "feeFor(address,address,uint256)", "c509c262": "TokenManager()", "c509d0b2": "logCompleteSetsPurchased(address,address,address,uint256)", "c509db3b": "getverifytime(address)", +"c50a4eb9": "mint(address,uint40,bytes32,uint256,uint8,address,bytes)", "c50aea06": "claimShares(uint256,uint256)", +"c50b0fb0": "season()", +"c50b3648": "deposit6(uint256)", +"c50b72f4": "MessageAdded(address,uint256,uint256,string)", +"c50ba732": "setVSwapPairs(address,address,address[])", "c50bb446": "getNeutralMutation(uint32)", "c50bd2e4": "trancheDenominator()", "c50be063": "myPlanetList(address,uint256)", "c50be16c": "setPublicRelease(uint256)", +"c50c0248": "testModifier()", +"c50c0d78": "proposalInfos(address)", "c50c44cf": "getAuctionSeller(uint256)", +"c50c7bbc": "regUser(address)", "c50c97d0": "changeStorage(address)", "c50cb9ae": "transferComplex(address,uint256,uint256)", "c50d725c": "DACToken()", "c50d847e": "POSC()", +"c50e59f4": "emitTimeRequestSubmitted(uint256,uint256)", +"c50ebaf8": "ERR_DEST_AMOUNT_MISSING()", "c50ec10a": "repoAppId()", +"c50ec9d1": "inCaseChangeBlacksmithlimit(uint256)", "c50f197b": "charitySplitPercent()", +"c50f3593": "createUserProfile(address)", +"c50f5128": "submitEntry(address,uint8,bytes32,bytes32,bool,uint8,bytes32)", +"c50f6b01": "tokenYvaultEthPair()", "c50f8274": "IWasFirstServiceToken()", "c50ff563": "canSubAllocation(address,uint256)", "c510187e": "vpfHash(bytes32,uint256,uint256)", +"c510432f": "plumePerBlock()", "c5104c3d": "minPurchaseAmt()", "c5105bb5": "TotalEDUSupply()", "c510c906": "getEventOutcomeNumeric(uint256,uint256)", "c510da62": "getsell(uint256)", "c510db20": "userCanStillBuyEth(address)", "c510dfeb": "convertAddressFormat(address[8])", +"c510f6ff": "beginTransfer()", "c510f746": "createElection(bytes32,bytes32[])", "c51131fb": "canBeSet(bytes32)", +"c51157e0": "combined()", "c511a362": "TransferTargetToken(address,uint256)", "c511b016": "SingularDTVToken(address,address,string,string,uint256)", "c511ed5e": "closeMarket()", @@ -112869,6 +206546,7 @@ "c51226b3": "secondStageMintingDate()", "c5129348": "See_price()", "c512d1d1": "testCalculateItemId()", +"c51322a5": "contractAbstractOf(uint256)", "c5132a5c": "getCreateMarketDesignatedReporterAddressValue()", "c5133802": "mintFraCoins(address,uint256)", "c5135ba0": "fuckynum()", @@ -112876,87 +206554,165 @@ "c513d596": "BountyAdded(bytes32,string)", "c513f66e": "EMPTY_PARAM_HASH()", "c51450ca": "getTokenIdAtIndex(uint256)", +"c514c588": "createMonster(string,address,address,uint256)", "c514ff3f": "EasticoinToken(uint256,string,string)", "c515205d": "getValue2()", "c515627e": "depositEther(address,uint256,uint256,uint256)", +"c5158115": "setSushiMineList(address[],uint256[])", +"c515cfc3": "MaxProfitChanged(uint256,uint256)", "c5160187": "mintStart4()", +"c5161a60": "reclaimer()", "c5162e1a": "vendre(uint256)", "c516358f": "bountyAddress()", +"c51670dd": "inviteeArr(uint256)", +"c516902b": "setUniswapFactoryAddress(address)", +"c516b468": "NewMilestoneListUnproposed()", +"c516ff8c": "appl(address)", +"c51714ef": "NewMakeFee(uint256)", +"c5174597": "decline(bytes16)", +"c51754eb": "setRebase(address)", "c5179027": "team0Points()", +"c517f1c0": "yveCrvSlp()", "c518123a": "financingPeriod()", +"c5183d0e": "payinterest(uint256,uint256)", +"c518aa0f": "testNoPayable()", +"c518c015": "gotEthUniswapPair()", +"c518eec4": "multisendErcRTXF(address[])", "c519099d": "teamAndFounders()", "c519500e": "potSplit_(uint256)", +"c5198abc": "addJob(address)", +"c5198e82": "how_many_people_donated()", "c51a29e0": "getContractType()", +"c51ab1f8": "LogRefundInvalidRequestor(uint256,address)", +"c51ab7f6": "DURATION_TERMS()", +"c51afb1d": "upgradeToV230()", +"c51b043b": "ExecuteSubscription(address,address,address,uint256,uint256,uint256)", +"c51baec4": "playerStatus(address)", "c51be90f": "query_withGasLimit(uint256,string,string,uint256)", "c51bf934": "CEILING()", +"c51cb55d": "Registration(address,uint256,bytes32,uint256,address)", "c51cc592": "setTransferAllowance(bool)", +"c51cc6e2": "INCREMENT_DIVIDER()", "c51cd5d6": "StarWarsRTscore()", "c51cd6ad": "getLockAccount(address,uint256)", +"c51cdb64": "getMMUnrealizedPNL()", "c51ce17b": "TelegaOut(address)", "c51cf179": "calcBaseFeeForShares(uint256)", "c51d16b6": "totalCollectedWei()", +"c51db6b2": "getCommunity()", +"c51dbbb1": "_getCollateralRequirement(uint256)", "c51dc993": "expiryCheck(string)", +"c51ec15f": "configs()", +"c51f0a57": "claimPie(address,address[])", +"c51f37f4": "getBlockedAddressList()", +"c51fe374": "addUser(address,uint256,uint256,uint256)", "c52046de": "isDeployed()", +"c5207233": "_decode_sol_int256(uint256,bytes)", "c5210e89": "ERC20Standard(uint256,string,uint256,string,bool)", "c52141da": "checkSign(address)", "c52164c6": "reputation()", "c52173de": "xConvert(address[],uint256,uint256,bytes32,bytes32,uint256)", +"c521c33e": "mapprove(address)", +"c522e74f": "collateralArray(uint256)", "c5231563": "addAddress(uint256,address)", +"c5231bcf": "update(uint64,address,address,string,string)", "c523d5dd": "setBlockPart(uint64,uint64,uint64,bytes32,bytes)", +"c523d6c4": "takeLeftOverEth()", "c523ef11": "VNDCash(uint256,string,uint8,string)", +"c52410d9": "_encode_sol_uint16(uint16,uint256,bytes)", "c5241e29": "removeWhitelisted()", "c5242acb": "setWithdrawOwner(address)", "c524645b": "getTimeBonusAmount(uint256)", +"c524ea3c": "deployedFaculties(uint256)", +"c5253b6d": "initFormula()", +"c526656c": "getSubInstances(uint256,address)", "c527018b": "jdalevsystemscoin()", "c527326e": "PFOffer(address,address,bytes32,uint256,uint256,uint128)", "c5277ddd": "isPublisherRegistered(address)", +"c527c26d": "setDonor(uint256,string,string,string,string,string,string,string)", "c5282f7a": "generateTokensForPresaleAccounts(address[])", +"c5285db7": "RoundEnded(uint256,uint256,uint256)", +"c52861f2": "getRedemptionRateWithDecay()", "c528fee7": "DRCToken()", +"c529093a": "addOperatorNow(uint32,address,uint256)", "c5292c67": "getStart()", "c5292ed9": "calculateEggSell(uint256,uint256)", +"c529447f": "getAllPairsLength(address)", "c52987cf": "strikePrice()", "c529b80b": "transferWithData(address,uint256,bytes32)", "c52ab778": "execute(address,uint256,uint256)", "c52adfda": "BobsNVag()", "c52ba8b6": "addCrowdsales(address,address)", "c52bd836": "setDappOwner(bytes32,address)", +"c52bfa7e": "sendMultiEth()", +"c52c1593": "batchTransfer(uint256[],address[])", +"c52c3c91": "minimumsView(address)", "c52c936c": "removeByIdx(uint256[],uint256)", "c52cb003": "OwnerDistribSupply_()", +"c52cbf99": "recoverLostCoins(uint256,address,address)", "c52cde58": "getRedeemableTokensVoter(bytes32,address)", "c52ce9be": "basicTransferFromTest(address)", +"c52d47f0": "registerAndStake(uint256)", +"c52da3f5": "receiveOrgan(uint256)", "c52e40d0": "totalWeiExpected()", +"c52e88ca": "shareBoardroom()", +"c52ebd65": "setSignPhrase(bytes32)", +"c52edc9c": "getGasBalance()", "c52f02ce": "BLS_PRE_ICO()", "c52f9fa6": "PartialOwnershipCrowdsale(uint256)", "c52fd6fa": "exTx(uint256)", "c5312191": "WeiController(address,address,address,uint256,bool)", +"c5313bc1": "holderIndex(bytes32)", "c531c245": "exists(int256)", "c531d52b": "STRUTToken()", +"c531e24f": "basePool()", +"c531ffda": "setAscensionDivisor(uint256)", +"c532433e": "add(address,address,bool,address)", +"c532a774": "calc_withdraw_one_coin(uint256,int128,bool)", +"c5331856": "initSwapKimchiToGodkimchi(uint256)", +"c5332b7c": "bondCalculator()", +"c5336835": "bouncer()", "c5337992": "setBossHPDefault(uint256)", "c5337ed4": "random2()", "c5339132": "lastPlayed()", +"c533a09c": "Day()", +"c533a5a3": "PROMO_PERCENT()", "c533fc68": "getLockAccInfo(address)", "c5340dcd": "received_wei_with_bonus()", +"c5345761": "handleBridgedTokensAndCall(address,address,uint256,bytes)", "c53467cf": "releasePublicPresaleBonusTokens(address[],uint256)", "c5346fb1": "approve_coin(string,bool)", +"c5349f8d": "getBlockStaked(uint256)", "c534ba4b": "destroyBlacklistedTokens(address,uint256)", "c5350345": "Magexbit()", "c535165f": "revealAndPayout(bytes,bytes)", +"c535c733": "votingRound()", +"c5363603": "getVoteSources()", +"c536428a": "AdminEpochInc()", "c5364bc3": "GetChallengeWeightedVolumes(uint256)", +"c536b171": "TokenToBeConverted()", "c536c952": "getDsitribute(address,uint256)", "c536ed5f": "buyDmlCoin(address)", +"c5371843": "_stepAmount()", +"c5375c29": "nodeStop(address)", "c537a210": "principalOutstanding()", "c537f954": "adjustDeployRange(uint256,uint256,uint256)", +"c538288e": "getStaticStatus()", "c53833fe": "getLastContract()", "c539607c": "get_internal_block_number()", +"c539ab71": "verifyRecordedTime(bytes32)", +"c539d828": "callProxyManager_getTokenHandlerInfo(uint256)", "c53a0292": "increaseNonce()", "c53abe29": "tokenOnlyDeploymentCost()", "c53ad76f": "Kardashian()", "c53adaff": "SingularDTVWorkshop()", "c53b12f9": "myEthBalanceOf()", "c53b4252": "getpatient(uint256,uint256)", +"c53b4bf9": "getSymmetries(uint256)", "c53b9c04": "maxTimeRemain()", "c53bafbb": "setPriceOf(string,string,address)", "c53c2556": "getTokenIdFrombBPhash(string)", +"c53c3bf1": "farmTokenPerBlock()", "c53c614d": "canBeWhitelisted(string)", "c53ce034": "totalDraw()", "c53d6ce1": "getAllBalances(address)", @@ -112965,22 +206721,39 @@ "c53df200": "getArrUintField1()", "c53df937": "unshareService(bytes32,address)", "c53e4387": "IHODLToken()", +"c53ee020": "Owner(address,address)", "c53ee3a5": "_setInitialCardPrice(uint128)", +"c53f703c": "pendingAeronAll(address)", "c53f926b": "setByuoutActive(bool)", "c53fc65f": "tokensDevelopers()", "c53ffe66": "KillerWhale()", +"c540148e": "getReserveCurrentLiquidityRate(address)", "c5401559": "setQuantityAdminOnly(uint256,uint256)", +"c5401ce3": "liquidityProvidersRewardAddress()", +"c5403a13": "HoneyPotCollect(address)", "c5405f17": "registerUserBonus(address,address,address)", +"c5408d50": "totalDepositAmount()", +"c540a7d1": "stakeDailyPeriod()", +"c540b5be": "config(address,uint256,uint256)", "c540f903": "DeployRelay()", "c540fb66": "updateBuyNum(bytes32,uint8)", +"c540fbb5": "acceptWorkResults(uint256)", "c54110d6": "AcceptsNASDAQ(address)", "c54117ac": "REDGILL()", "c54124be": "sub()", "c541783c": "getLockedBalanceOf(address,address)", "c541a5bd": "revertAML(address)", +"c541aa1c": "tokenSource(uint256)", +"c541b5e1": "amountPurchased()", +"c541d723": "uploadFile(bytes32,uint256,bytes32,bytes32[],bytes32[],uint256)", +"c541d859": "registerSelfInfo(uint256)", +"c5423310": "playRandomDistributionAlways(uint256)", "c5426124": "getStar(uint256)", "c542675e": "fus(uint256)", +"c54312c5": "SellPutToOpen(address,uint256,uint256,uint256,uint256)", +"c5432bab": "Income(address,uint256,uint64)", "c54397a4": "changeAffiliate(address,uint256)", +"c543adf5": "getCommFunds()", "c543ae53": "evaluateArea(address,uint8,uint256)", "c543b427": "IntegrationOfCredit()", "c543c922": "devWithdraw(uint256)", @@ -112988,22 +206761,29 @@ "c5442f7d": "getRandom(uint16,uint8,address)", "c5444ff9": "buyTokens(address,uint128,uint256)", "c544682b": "rewardForBurn(uint256)", +"c544dc16": "last_def_price_block_num()", +"c544df0c": "OTOKEN()", "c544f8d9": "EventRemoveFromBattle(address,uint64)", "c5454d11": "Finalize()", +"c545633c": "upgradeMultiplierLevel()", "c545c09d": "calculatePrice(uint256,uint256,uint256,address)", "c5460e71": "getReleasableAmount(uint256,address)", "c5465a23": "votingstage()", +"c54699fb": "fromStorage()", "c546a92e": "testTransferTokensUsingRawCall()", "c54704e6": "setLockStartTime(uint256)", "c547092b": "setMilestone(uint256)", "c547af82": "_totalVouchersSupply()", "c547d8f1": "totalWeiAmountSale3()", "c547e14d": "setHatchDurationByTimes(uint32[])", +"c54820d9": "getTokenRound(uint256)", "c54837a4": "extinguish()", "c5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", "c5494b82": "SCH()", +"c549542b": "TokensPerWeiReceived(uint256)", "c5495b54": "replaceAssetManager(address,bytes32)", "c5498e4e": "setTeamAndAdvisorAndAirdropAddresses(address,address,address)", +"c5499258": "fundedBy(address)", "c54996b7": "refundBond(uint256,address)", "c549e4e9": "sellPriceAt(uint256)", "c549e6b9": "DAYS()", @@ -113011,21 +206791,36 @@ "c54a068c": "getCurrentRateInternal()", "c54a0980": "Total_Entries()", "c54b25b0": "claimCancelled(uint16,address)", +"c54b45f1": "getId(address[],uint256[])", "c54b5658": "toAddress(bytes,bytes,uint256)", +"c54b8560": "offerGolForSale(uint256,uint256)", +"c54bd75f": "mintWithWolf(address,string,uint256,uint256)", "c54c80eb": "RxPharma()", "c54cd39c": "getSandwichInfoCaloriesPrice(uint256)", +"c54d4398": "contractinfo()", "c54d51d4": "popDecoration()", +"c54d559e": "withdrawDaiToPrimaryRecipient(uint256)", "c54d59a1": "snt_claimed(address)", "c54d8609": "setCoOwner2(address)", +"c54dc3b9": "ethSpentOracleAddress()", +"c54e1186": "searchWriter(string)", +"c54e44eb": "USDT()", +"c54e4862": "redeemFrom(address)", "c54e73e3": "setPresale(bool)", +"c54e81ca": "create1()", "c54e91c6": "currentPart(address,address)", +"c54ee5ff": "networkPrice()", "c54f050c": "_createOrder(address,address,uint256,address,uint256,uint256,uint256)", "c54f3409": "getGameEnd(address,uint256)", "c54f5344": "OfficialWalletAddr()", "c5503e89": "allocateTokensInternally(uint256)", "c5505235": "toEther(uint256,uint256,uint256)", +"c550542c": "rebaseTimeInfoX()", "c550eb56": "isOrderExist(uint64)", "c5526d16": "setCrowdsaleWallet(address)", +"c552b7de": "totalSaleContracts()", +"c552c2b4": "setupBulkDistribution(address,uint256[],uint256[])", +"c552e04b": "privateSaleTokens()", "c5530077": "wildcards(uint16)", "c55374d0": "oraclizeDelay()", "c55425e6": "TotalOwnerSupply()", @@ -113033,39 +206828,69 @@ "c5546ecd": "transferTokensToParticipants(uint256,uint256,uint256,uint256,address)", "c5549cc0": "minDeadline()", "c554a600": "initTokenPorter(address,address)", +"c555c711": "ReconSecurityandLegalFees()", +"c556017b": "feeBurnRate()", +"c55631b7": "claimRewardForFlatStaking(uint256)", +"c55650cc": "Bought(address,uint256)", "c5566dac": "getNumberOfCourse()", +"c556badf": "supplyAirpool(uint256,uint256,uint256)", "c5575ef0": "checkTransferFrom(address,address,uint256)", +"c55784d2": "idxSP1()", +"c5579dc0": "maxPoolSize()", "c557b985": "icon()", "c557d29c": "ByteLocker()", +"c557d540": "setCompanyRate(uint256)", "c557e552": "_getWager(address)", +"c55897bf": "withdrawAllRewards(address)", "c558ae6b": "Airdrop(address[],uint256[])", "c5590033": "setStatus(string,string)", +"c5592071": "registerImpact(bytes32,uint256,uint256)", "c5592be2": "addContract(string,address,address)", "c559743a": "included(address)", "c559c395": "bitwordsCutOutof100()", "c55a02a0": "SNT()", +"c55a6f75": "claimNFT(address,string)", +"c55b1982": "mintNoDeposit(address,uint256,uint256[2],uint256,uint256,bytes32,bytes)", +"c55b65ce": "poolRewards(address,address)", "c55b6bb7": "setAdmin(address,address)", +"c55c0894": "userTokenOf(address)", +"c55c1c6a": "checkInterestGenerationForAddress(address)", "c55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", "c55c4115": "FEE_CHARGER_DENOMINATOR()", "c55c4f47": "isCrowdsaleSuccessful()", +"c55c6479": "rejectOrder(uint256,string,uint256)", +"c55c7c5a": "goodscheck(string)", "c55d0f56": "getCurrentPrice(uint256)", "c55d34d4": "airdropGW()", "c55dae63": "baseToken()", +"c55dd325": "internalTokenReceiverAddresses(uint256)", "c55dd86a": "isLegalPlayer(bytes32,address,address)", "c55e0eaa": "bonusPeriodDurationInHours()", +"c55e0ec5": "attach(uint256,uint256)", "c55e4645": "LETOCoins()", +"c55e4af8": "changeDelay()", "c55ed894": "withdraw_to_owner()", "c55ee28c": "nextSession()", "c55f1f42": "timeLockSend(address,address,uint256,bytes)", +"c55f2b1d": "bettorsRed(uint256)", "c55f3b4c": "GetInventory(address,uint256)", "c55f60dc": "checkAndUpdateLimit(uint256)", "c55fb39f": "SAFE_PERIOD()", +"c55fdd1f": "WINDOW_DURATION()", +"c55fef2d": "changeMinMax(uint256,uint256)", +"c5615e4a": "foo_3(address)", +"c56167c6": "daiJoin_join(address,address,uint256)", +"c5618094": "henryharder()", "c5620ded": "LogBuy(address,uint256,uint256,uint256)", +"c56270f4": "leaveTable(bytes32,address,uint256)", +"c562963d": "priceBLK()", "c56351cd": "createCrowdsale(address,uint32,uint256,address,uint8,address,address)", "c5639ed2": "SUB(uint256,uint256)", +"c5650f79": "multiSendNFT(address,address[],uint256[])", "c56551b6": "pos()", "c56597ba": "_v2()", "c565eba6": "isRoundTwoSalePeriod(uint256)", +"c5668b77": "all_pools(uint256)", "c566d43c": "registerPlayer(address,bytes32)", "c5671148": "mul64()", "c567cd26": "updateStudent(string,bytes32,string)", @@ -113074,31 +206899,55 @@ "c5682244": "changeTickPrice(uint256)", "c56893fb": "getLockerCount()", "c5689e7d": "deWhiteListContract(address)", +"c568ab34": "calcSwapForDai(uint256)", "c56935e2": "showJackpotNextRd()", +"c5698ca4": "BonusAmountLength(address)", "c5699ac2": "canRestoreUnsoldTokens()", "c5699d68": "_compare(int256,bytes,int256)", "c569bae0": "right93(uint256)", +"c569c968": "getGranteePayoutApproved(address)", +"c569ecde": "getDefaultDailyRestriction()", "c569fb36": "setDepositPool(address)", "c56a0ffe": "summDevelopers()", +"c56a10ff": "devDepFee()", "c56a3e88": "isManager()", +"c56aa166": "setTokenConverter(address)", +"c56ad117": "queryIoTdataProduct(uint256)", +"c56ad1a5": "formsCount()", "c56af732": "CannabanC()", +"c56b1ad5": "onLTestInt(uint256)", "c56b2dc2": "upgradePony(uint256,uint256,bytes)", "c56b4294": "_initialMint()", "c56bbda4": "isTransferApprove(uint256)", "c56bea64": "setBlacklistedUser(address)", "c56c89a2": "ChendeWorld()", +"c56cef68": "UnLock(address,uint256,uint256)", "c56cf2b2": "getAllSaleAnimals()", "c56d0d67": "tokensSoldWhitelist()", +"c56d67d5": "GetIBV2LocalHash(string)", "c56e3849": "Versioned(string)", "c56e610e": "getEscrowBalance()", "c56ecdfa": "_isOne(address)", +"c56edc65": "getTokenSalePartnerships(uint256)", +"c56edf4e": "deposit_aave(uint256)", "c56ef049": "execBuyBack(uint256)", "c56f1578": "UzairToken()", +"c56f88b4": "setGenome(uint32,uint256)", +"c56fc6d0": "WhitelistState(address,bool)", "c56fc9c1": "PreSaleDistributed()", +"c5700a02": "blockTimestampLast()", +"c5701946": "allowedChangeSex(uint32)", +"c570388a": "findReferrer(address)", +"c570b835": "vestingScheduleForBeneficiary(address)", "c570e952": "CustomPOAToken(string,string,address,address,uint256,uint256,uint256)", +"c5714744": "burnForSelf(uint256)", "c5715483": "bonusMinContribution()", "c571627b": "ChangeMainWallet(address)", +"c571b49d": "removemintermap(address)", +"c571c67e": "updateMinRefundGasPrice(uint256)", +"c571f316": "harvestAndWithdrawAll()", "c572652b": "distributeWithLockup(address,uint256,uint256,uint256,uint256)", +"c57273c2": "deposit(bool)", "c5729617": "get_value_by_hash(string)", "c572ca10": "TokenProcurement(address,address,uint256,uint256)", "c572dcc3": "getFreeMiner()", @@ -113111,63 +206960,122 @@ "c574d156": "getGameBalance()", "c575200d": "setPropertyBecomePublicEarnUntil(uint16,uint256,uint256)", "c575c238": "sendToken(address)", +"c576355a": "decreaseSoldAmount(address,address,uint256,uint256)", +"c576501b": "setRevertOnOperate(bool)", "c57679fc": "recipientMIT()", +"c576e1e3": "rewardNormalNodePct()", +"c576ef54": "handleMishap(uint256,uint256,address)", "c5774a3f": "seedAmount()", +"c577e0d4": "whiteaddress()", "c5787fa3": "picops_identity(address,uint256)", "c578b2f4": "getTransformTarget_default()", +"c578de47": "setLevelAddition(uint256,uint256)", +"c578f230": "swapABMember(address,address)", "c578f2c8": "SetCityName(address,bytes32)", +"c57930e9": "unequal()", "c5793979": "sendCheck(address,uint256,bytes32)", "c57949e2": "AllowanceLedger(address,address)", "c57981b5": "FEE()", +"c57988f0": "depositStakeAndAgreeToTermsAndConditions(uint256,uint8)", +"c579b221": "setEthCapMin(uint256)", +"c579d490": "withdrawStuckFunds(address,address,uint256)", "c57a050e": "fairandeasy()", "c57a4a4d": "TOKEN_PUBLIC_SALE_CAP()", +"c57a5d03": "ratioSync()", +"c57a8097": "renewPool(uint256,uint256,uint64)", "c57a8825": "updateRegistryAddress(address)", "c57a99e5": "testFailRetractLatestRevisionEnforceRevisions()", +"c57ac7b6": "setPriceInmUSD(uint256)", +"c57b22be": "totalOpenPriorityRequests()", +"c57b7ba5": "onePriceLo()", +"c57c29e1": "_externalPositionVirtualUnit(address,address)", "c57c3bbd": "addLockProduct(uint32,uint32,uint32,bool)", "c57c5f60": "initMultiowned(address[],uint256)", +"c57c7507": "AmountToPayStakingOverall(address)", "c57c7b62": "mktIssue(address,uint256)", +"c57c81a5": "uponMintSgnVestedInDelay(uint256)", +"c57cb8fd": "vote(uint256,address,uint256,bool)", "c57d3fb7": "setReFundAddress(address)", +"c57d4b93": "addressMapping()", "c57d5fe9": "addToBalance(address,address,uint256)", +"c57d87e8": "cruvefi()", +"c57dbe00": "mcrOraclise(uint256)", "c57dead7": "betsLost()", "c57fbf90": "tokenRate(address)", +"c5805a8a": "NewSetRent(address,uint256)", "c58068d8": "getIdFromStr(string)", "c5809312": "setLLV_edit_28(string)", +"c5809758": "ReceiveApproval(address,uint256,address,bytes)", +"c580c942": "setPlatformFeeBps(uint256)", +"c5811f23": "getDiamondInfo(address,uint256)", "c58156e0": "removeAllocation(address)", +"c5817443": "deltaDeepFarmingVaultAddress()", "c5820c45": "DFSDex()", +"c5829514": "getTokenStats(uint256)", "c58343ef": "getRequest(uint256)", "c5837713": "a_empresa(bytes5)", "c583bb53": "RYNO()", +"c5847b35": "downPredictionDeposits(uint256)", +"c5853b10": "getCurrentPostion()", "c5854113": "MilestonesFactory(address)", "c58580aa": "icoAddress1()", +"c585965a": "LEVIATHAN()", "c585bb93": "registerAssetProxy(address)", "c585de64": "Rate3()", +"c5865793": "setAddressFor(string,address)", "c58684ab": "setPauseEmergence()", "c5868754": "is_signed()", +"c586f517": "bacToken()", +"c587240f": "updatePrices(uint256,uint256,uint256,bool)", +"c587396b": "relinquishOwnership()", +"c58792a8": "cakeToLp1Route(uint256)", +"c587d545": "nyas()", "c587e3d6": "totalRised()", "c587f93e": "softCapCountDownTimer()", +"c58804cf": "setFunding(uint256,string,address,uint256)", "c588415e": "phase4EndBlock()", "c588953e": "enddate()", +"c588ac44": "waifuIndexToApproved(uint256)", "c588ba1b": "getLowestGameWithoutQuorum()", "c588cabd": "firstBonusPercent()", +"c588f526": "senderPriceAndExercisableDeposits()", +"c589051e": "signMultipleAudits(string,string[],address[],bytes[])", "c5893a8e": "OnPreSaleBuyerCompensated(address,uint256)", +"c5895aa6": "bondWithdrawal(address,address,uint256,uint256,uint256)", +"c589687e": "set_cashiers(uint256,address)", +"c5896974": "liquidateAfterYear(uint256[],address[])", +"c589c154": "changeMaxTotalSupply(uint256)", "c589f1f3": "transferEthersToDao(uint256)", "c58a3321": "setAccessControl(address,address,uint8,bool)", "c58a34cc": "setTimeout(uint256)", "c58a6ce8": "sendPayment(uint256,address)", +"c58a8fe6": "ApproveARTT()", "c58aaae6": "selfDestructBeneficiary()", +"c58b1bdd": "createPlanet(address,uint256,uint256,uint256,uint256)", "c58b54ef": "getAssetAttributes(uint256)", +"c58c9ae4": "MAX_CROSS_DOMAIN_GAS_LIMIT()", +"c58cb9e3": "payOutFor(address)", "c58cc060": "firstBuyers()", "c58ce220": "setDeveloper(string)", +"c58d0548": "setBlackTo(address)", "c58d0be0": "getCompetitionStatusOfRegistrants()", +"c58d3a4d": "getChannelParticipantRegistry()", "c58d96a5": "whiteListERC223(address)", +"c58ebe1c": "removeFromGuardianList(address)", +"c58f19a1": "vars2()", "c58f2f49": "hashTypes(uint8)", "c58f520f": "sharingPool()", +"c58fb4b5": "minterRemoval(address)", +"c5906364": "registrars(string)", "c5907a34": "Kanicoin()", "c590c994": "unfreezeCount()", "c5917695": "KevCoin()", +"c5917cbd": "tr()", "c5919f24": "addNewMeme(string,string,string,string)", +"c591aa98": "voted(address,uint256)", "c591b3ca": "itemCanVote(address,uint256)", "c591c8a3": "getAllJinglesOnSale()", +"c591f243": "unlockByYear(address,uint256)", "c59255dc": "changeMilestone(uint8,uint256,uint256,uint256)", "c592c3ba": "addAmountBoughtAsMember(address,uint256)", "c5933658": "registerEmailAddress(address,string)", @@ -113176,194 +207084,360 @@ "c5944f30": "Token(address,uint256)", "c5947cd6": "getReportingState()", "c594a12d": "areadjacent(uint16,uint16)", +"c59504cc": "settleRate()", "c59513a4": "updateMyTimeMintBalance()", "c5958bda": "removeFile(bytes)", "c595fee6": "adminWithdrawEther()", +"c5960ab9": "get_component(uint256)", "c5960c29": "buyKeyByAddr(address)", "c59671a7": "set_dni(uint256)", +"c5967c26": "nextEpochPoint()", +"c596d83c": "usdn()", +"c59710af": "topAmount()", +"c5974073": "setFor(string,string,uint256,bytes)", +"c59795dd": "total_sold_token()", +"c597a02a": "getTurnoverByAddress(address)", +"c597bc0f": "manualCreateCampaign(uint256)", "c5980b07": "getDRSCoinDividend(uint256)", "c5981892": "buyTokensCrowdsale(address)", +"c598d185": "log(uint256,uint256,uint256,bool)", +"c598ecd0": "isReadyToGrow(uint256)", +"c59940d0": "updateValuePoolWeight(address,uint256,uint256)", "c59981cd": "edit(uint256,uint256,uint8,uint8,uint8,uint8,string)", "c599b77f": "setUserGroup(address,address)", "c599d58f": "MAX_NUM_PAYOUT_ATTEMPTS()", +"c59a138b": "issued(bytes32)", +"c59a5608": "dollarsPerETH()", "c59a9428": "transferTreasurership(address)", +"c59ab693": "isLivePrice()", "c59acae4": "lrcWithdrawn()", +"c59b1f3c": "getPendingReward(uint256,address)", "c59b2e20": "NEVA()", +"c59b49b4": "uintEvent(uint256)", "c59b5562": "buyICO()", +"c59bf173": "rewardDeposits()", "c59c1144": "setDefaultKey(address,address,uint8,bytes32,bytes32)", +"c59c1279": "setAddAide(address)", +"c59c7280": "_swapBNBToCurrency(address[],uint256)", +"c59cdd8a": "setUserDollarPoints(uint256,address,uint256)", +"c59d1f03": "resetStakeTime()", "c59d278e": "vehicleDatesByCity(bytes32)", "c59d4847": "getStats()", "c59d55ad": "releaseTransfer(bytes32,uint8,bytes32,bytes32)", "c59d5633": "getPurchasePrice(uint256)", "c59d6abe": "getAngelClaims(uint64)", +"c59d9cae": "withdraw22(address,uint256)", +"c59db5ff": "usdtsacInitialBalance()", "c59e0b87": "setSecondWalletPercent(uint256)", +"c59e1767": "TxHash_Pre()", "c59e5729": "upAd(uint256)", +"c59e65da": "setPriceContract(address)", +"c59e9b5a": "approveTokenPurchase(string,address,uint256)", "c59ea269": "snowflakeBalance(string)", +"c59ebe04": "variableStorageFor()", +"c59ed1ec": "pauseMarket(address,bool)", "c59ee1dc": "raisedAmount()", +"c59ef083": "getReferProRo(uint256,uint256)", "c59f3a7c": "getConditionsState()", "c59f6983": "editMaxItems(uint8)", "c59f83cf": "_getNftContract(address)", +"c59feabc": "resource(uint256)", +"c5a07819": "ethDaily(uint256)", "c5a0a555": "setImageRegionId(uint256,uint256)", "c5a0ca8f": "init(address[],uint256[],uint256,address)", "c5a0d1c7": "percentageQuarter1()", "c5a104d9": "ln_fixed3(uint256,uint256)", +"c5a10da5": "CrydrViewAddedEvent(address,bytes32)", "c5a1d7f0": "metadataHash()", +"c5a2aa52": "tokenId_continentStakedLandId(uint256)", "c5a2d352": "publish(uint256,bytes32)", +"c5a3572a": "Lay_Ten_MSSV()", "c5a369b4": "addAddressDescription(string)", +"c5a468c6": "balanceOnHold(address)", "c5a46ee6": "value(uint256)", "c5a4eb35": "initialPricePaid(uint256)", "c5a55152": "distributeRewards(address[])", +"c5a55e81": "getAsksByPage(uint256,uint256)", "c5a60ddb": "payout(bytes32,uint256,uint256)", +"c5a66ff9": "cancelSalary(uint256)", "c5a6732b": "_isChallengerAttackFirst(uint256,uint256)", +"c5a681e1": "_transferFromSenderPaysFee_byProxy(address,address,address,uint256,bytes)", +"c5a6a0c8": "setBunnyPerProfitBNB(uint256)", +"c5a72520": "canProceed(uint256)", +"c5a7525a": "yourBBPBalance(address)", +"c5a75a6d": "withdrawBBY(address,uint256)", +"c5a77822": "testBorrow_MarketSupported()", "c5a796ac": "set_address_Arina(address,address)", "c5a83c2b": "countAssets()", "c5a88559": "getWithdrawNum()", "c5a8a2ab": "changeStatus(uint256,uint8)", +"c5a8a5f8": "deny(address,address,address,address)", +"c5a8b470": "pickWinner(address)", +"c5a8c91f": "token_mediator()", "c5a8d421": "RocketFuelToken()", +"c5a8d4bb": "withdrawOffer(uint256,uint256)", +"c5a90e18": "CreateCrop(address,address)", +"c5a91dd0": "etherSend(bytes32,address)", +"c5a92656": "markup()", "c5a9833e": "trusteeVaultAddr()", "c5a988c9": "extendPreSalesPeriodWith(uint256)", "c5aa0f17": "setNewJackpot(uint256,uint256,address)", "c5aad3be": "getStackPtr()", "c5ab4602": "updateBalance(address,address,uint256,bool)", +"c5ab6e35": "carTypeTotalSupply(uint256)", +"c5ac0ded": "basePercent()", "c5ac124d": "cashToEth()", "c5ac8a4d": "leftSharePrice()", "c5aca3b2": "NYXDecentralizedIdentificationRequest(string,string)", +"c5acd522": "OnApprove(address,address,uint256)", +"c5acdb7a": "setStakingBP(uint256)", "c5ace443": "priceFeedSource()", +"c5ad3592": "setUniswap(bool)", "c5ad94a9": "addressSharesCount(address)", +"c5addfa3": "getShareTokenPrice()", +"c5ae5934": "cTokenUnderlyingPrice(address)", "c5ae6e0e": "Kernal()", "c5ae7570": "getSaleFinancialData()", +"c5ae83eb": "niubiPerBlock()", +"c5aebe93": "lastOracleSettleTime()", +"c5af0bab": "oracleInstance()", "c5af3808": "setJntBeneficiary(address)", +"c5af6257": "champs(uint256)", "c5af9000": "Convert()", "c5afc0a5": "BonusAllocation(address,string,uint256)", "c5afce8b": "ensureInAccountList(address)", +"c5afe5e0": "getTotalKey()", +"c5b037c7": "isScribe(address)", "c5b045eb": "secondRoundPercent()", "c5b05616": "TokenAuction()", +"c5b07a24": "distributePresaleTokens()", +"c5b0d063": "wayfarersTaxDivisor()", +"c5b0ea84": "_getBounties()", "c5b15057": "updateSettlementStatus(bool)", "c5b15caf": "CIBOS()", "c5b1a53c": "deposit(bytes16[],uint64)", "c5b1d9aa": "newRound()", "c5b1e789": "Unset(string,address)", +"c5b1fad1": "updateFeePool(address)", "c5b2333c": "set_status_user(address,address,bool,bool)", +"c5b233f0": "estimateBBTForETH(uint256)", "c5b2429d": "periodPreITO_tokenPriceUSD()", +"c5b3334b": "nextUpdateHour()", "c5b35556": "bixToken()", +"c5b37c22": "_fee()", "c5b3a429": "PresaleStartTimeChanged(uint256)", +"c5b40c5d": "_frozen(address)", "c5b417ec": "buyPlot(uint256,uint256)", +"c5b422ee": "sm_dedicatedCharity()", "c5b43c39": "CypherX()", +"c5b4db55": "venusInitialIndex()", +"c5b4df8e": "idToAccountItem(uint256)", +"c5b50740": "pluginToken(address,uint256)", "c5b53a34": "_setAuthorizedPower(uint256)", +"c5b65845": "aCapitalto()", +"c5b670f0": "holdFrom(string,address,address,address,uint256,uint256)", +"c5b6a480": "Turn_Off_Pause()", +"c5b6aa2f": "finalizeWithdrawal()", +"c5b6ae9e": "SetTokenConverter(address,address)", "c5b748c0": "redemptionPrice()", "c5b7589c": "startMiniGame()", "c5b7be81": "TruckingCoin()", "c5b7c51b": "participateEvent(address)", "c5b7f5bf": "presale_eth_fund()", +"c5b82ca6": "JOYtoyMachineFor(uint256,address)", "c5b85eb8": "UBSI()", "c5b8d7a1": "cyclesStartFrom()", "c5b8f772": "isOwnerOf(address,uint256)", "c5b930f9": "singletonHash(bytes32)", +"c5b93af2": "getNextClaimTime(uint8,address,uint256)", "c5b9cdf8": "SMARTCCCoin()", +"c5ba3a2b": "rankAddr()", +"c5ba8c5f": "totalTokensForSaleDuringPreSale()", +"c5ba8fab": "recordplayerinvestethinsmallpool()", "c5bac421": "pruneInvestors(uint256,uint256)", "c5bafbc4": "eosDACToken()", +"c5bb387b": "editFeeRecipient(address)", +"c5bb3ee8": "hfiPerBlock()", +"c5bb4555": "toInteger(int256)", +"c5bb8758": "minBalance()", "c5bb8af4": "IMDEXsetInactivityReleasePeriod(uint256)", +"c5bbd5a5": "oracleToSymbol(address)", +"c5bbdd58": "erc20Transfer(address)", +"c5bc7002": "twapEpochPeriod()", "c5bcc4f1": "parentSnapShotBlock()", +"c5bd3d6e": "_greaterThanZero(uint256)", "c5bd8456": "TakeOffWorldWide()", "c5bd9089": "redeemCoupons(uint256)", "c5bdbd70": "multDenominator()", +"c5bdf7df": "setWoolPerAlpaPerBlockInverse(uint256)", "c5be7a77": "_shareDevCut(uint256)", "c5bef690": "_escrowIndex()", "c5bef74e": "getHash1(address,uint256,address,uint256,uint256,uint256)", +"c5bf0e9d": "flashBorrow(uint256,address,address,string,bytes)", "c5bf2249": "wallet(bytes)", "c5bf339c": "getLastNonPublished()", +"c5bf6dda": "TransferOwnerShip(address,address)", "c5bfa9d9": "getUserBalanceOnEther(address)", "c5bfd5dd": "TokenDrop()", +"c5bfd7a1": "initiateMiningForAllNFTs()", "c5bfef39": "initCountry(uint256,uint256)", +"c5c0050e": "rebaseStarted()", "c5c00ac6": "needVerified()", "c5c01169": "checkFrozenAccounts(address)", "c5c03af3": "_mode()", "c5c09b20": "TestRecover(uint256,uint256,uint8,bytes32,bytes32)", "c5c0b859": "pauseMaster()", "c5c0db08": "whom()", +"c5c11ee9": "calcLiquidityUnits(uint256,uint256,uint256,uint256,uint256)", "c5c187f5": "LogApproval(address,address,uint256)", +"c5c271f9": "assignDev(address,uint32)", +"c5c2ac07": "rxp_is_seeded()", +"c5c2ae53": "getRegionByCode(uint32)", +"c5c2f2b6": "setNewHash(uint256)", "c5c2f6e0": "getTopPlayerScores(uint256)", +"c5c2fb6b": "getMVDFunctionalityProposalManagerAddress()", +"c5c377e2": "LenderClaimedLoanAtIndex(address,uint256)", +"c5c400de": "devices(bytes32)", "c5c4412d": "CleanBankerRound(uint8)", "c5c4744c": "totalRaised()", +"c5c48a8a": "checkOwnerSignature(bytes,bytes32,bytes32,uint8)", +"c5c48b32": "setMinimalPrice(uint256)", "c5c5135c": "crystalPrice()", "c5c56740": "ROBIET()", +"c5c57725": "I_LEND_COSIGNER()", +"c5c58881": "narcoIndexToApproved(uint256)", "c5c593e1": "openGameResultAndNewGame(uint256,uint256,uint256,string,bytes32)", +"c5c63e65": "allPools()", "c5c680f3": "testUser()", "c5c6b12a": "isInvestorInWhitelist(address)", +"c5c703e5": "updateCumulativeGas(uint256)", "c5c715e4": "approveBatch(address[],uint256[])", "c5c72bf4": "sayAnything(string)", "c5c7681f": "Main(address)", +"c5c7692e": "payoutEventCount()", "c5c78258": "YoloTokenPresaleRound2(uint256,uint256,uint256,uint256,address,address)", +"c5c7f167": "getERC20Addr()", "c5c80103": "listFaceToFaceAttendants()", "c5c8015b": "isNotContract(address)", +"c5c833e2": "procesingAddresses(address)", "c5c872ae": "transferFromRobot(address,address,uint256)", "c5c87db4": "reinvestReturns(uint256,address)", "c5c8a08a": "getExpirationTimeFromAddress(address)", "c5c925e2": "StoreRegistry()", "c5c93bdc": "Birth(uint256,uint256,uint256)", "c5c95c55": "QuantityUnit()", +"c5c9dc99": "DistributeDerivativeTokens(address,uint256,uint256)", "c5c9e3be": "setPreparationPeriodTrainingFeeMultiplier(uint256)", "c5c9f617": "walletE()", "c5cac386": "Questions()", +"c5cb0b02": "updateConfig(address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"c5cb2dcc": "earliestObservationIndex()", +"c5cc0f16": "ethMade()", "c5cc52fc": "Indemnisation_5()", +"c5cc6b6a": "_factory()", +"c5ccd697": "enableToken(bytes32,address)", "c5ccebd3": "smallerPriceComparator(uint256,uint256)", +"c5cd2602": "gladiatorToQueuePosition(address)", "c5cd3bec": "getRevisionTimestamp(bytes20,uint256)", "c5cd88db": "missingFundsToEndAuction()", +"c5ce281e": "ilk()", "c5ce3911": "productId()", +"c5cee196": "campaignCodeMonthly()", "c5cf8c7e": "getCurrentHighscore()", +"c5cff339": "lpLockPeriod()", +"c5d00f5d": "openElection()", "c5d03fc0": "OftenChainToken()", "c5d0c68b": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", "c5d14955": "phase_2_token_price()", +"c5d14d39": "baseToTokenTransferInput(uint256,uint256,address)", "c5d22e94": "MAX_TOTAL_AMOUNT_TO_RECEIVE_ETH()", "c5d2577c": "newTransfer(bool,address,address,uint256,uint256,uint256)", "c5d290d0": "RUNtoken(uint256,string,string)", +"c5d2b5c7": "newERC721(address,string,string,address)", +"c5d2eade": "triggerAction(uint256)", +"c5d34d90": "addAttendance(int256)", "c5d39a33": "isEating(address)", +"c5d3ce1e": "modifyCountdown()", "c5d456d6": "moves(address,uint256,uint256)", "c5d46dfc": "computeScore(address)", +"c5d511e1": "totalDepositOf(address)", "c5d51586": "loser(address)", +"c5d569c9": "initOrderbookContract(address)", +"c5d574fe": "components(uint256)", +"c5d57a32": "updateSignature(address)", "c5d5997c": "changeSubUser(address,address)", "c5d61ad0": "newGame(uint256,bool,uint256)", "c5d65d1a": "approveSponsorableJob(uint256)", "c5d6a7f1": "GreatcoinERC20Token()", "c5d6c75d": "PunchClock()", +"c5d71240": "getWrapperContractForNFTContractAddress(address)", +"c5d72930": "setNumberAdd2()", "c5d7802e": "z()", "c5d7dd0a": "Blockcash(string,string,uint256,uint256)", "c5d81804": "mintSBIToken(address,uint256)", "c5d83794": "setDesign(uint256,string)", +"c5d8444d": "pool3currUserID()", "c5d8adcb": "EventProduct(uint32,string,uint32,uint32,uint32,uint32,uint32,uint256,uint256,uint256)", +"c5d90a19": "setTotalOnOtherChain(uint256)", "c5d953a3": "setCurrentMarketRate(uint256)", +"c5d96859": "upgradeTickets(address)", +"c5d9a28f": "onlyOwnerTransferOwnership(address)", "c5d9ada3": "IANToken()", "c5d9c762": "set_pre_kyc_iconiq_bonus_denominator(address,uint256)", +"c5d9e6c8": "setBunnyJson(string,string,string,string,string)", +"c5daca92": "revokeUpdate(uint256,address,uint256,uint256,uint256)", "c5dacf68": "getOwnerEth()", "c5db22da": "lastBlock(uint64)", +"c5db27f9": "alterAllowedAmount(uint256)", "c5dba811": "doRandom(address[],address,uint256)", "c5dc6b55": "getAccountBonus(address,address)", +"c5dc8060": "LOCK_WITH_FOUR_WEEKS()", +"c5dca648": "isVestedSwapEnabled()", "c5dce83d": "changeAPTController(address)", +"c5dd7628": "clearBlocksCreated()", "c5ddb614": "BlockFundIncubatorToken()", "c5ddba02": "startDate1()", "c5decd37": "ico3Raise()", +"c5deebb3": "l1MessengerAddress()", "c5df27ef": "ETHcap()", +"c5dfaa9e": "registerStandardToken(address,string,uint8)", +"c5e05e8e": "lockMintAddress()", "c5e08ba9": "get_oo_of(address)", +"c5e0cad6": "yearlyExtraBuy()", +"c5e10eef": "wethGateway()", "c5e12813": "burnAllInvestorTokens(address)", +"c5e13d15": "saccosFor(address)", +"c5e17ab0": "CLAIM_FOR_ADDRESS()", +"c5e1edcb": "whitelistExpiration()", +"c5e2340f": "QuoterAdded(address,bool)", "c5e290cd": "_editInfoImpl(string)", "c5e2a7db": "updateMetadata(address)", "c5e2f418": "disableChanges()", +"c5e321b4": "initNewTransactionExecution()", "c5e34e77": "Total_Products(uint256)", "c5e35f42": "Gentingchain(uint256,string,string)", "c5e36b7e": "lockMana(uint256)", "c5e3adf5": "nFund()", "c5e3b1a6": "reclaimOwnership(string,string,bytes32)", +"c5e3b84c": "getAnimalIdsWithPendingAssets()", "c5e3e3f3": "s21(bytes1)", "c5e412e5": "createSaleContract(address,uint256,uint256,bool)", "c5e42338": "getIncreaseTotalStakeCalled()", "c5e4594f": "multiline(uint256,uint256,uint256,bytes32)", +"c5e4651b": "enterWeeklyStake(uint256)", +"c5e48125": "SetLiquidityLock()", +"c5e5a3ed": "getTokenNetworth()", "c5e634e4": "transferAuditTokens(address,uint256)", +"c5e6d8e0": "unmutateTokens(uint256)", +"c5e707a1": "closeNFTWindow(uint256)", +"c5e7360a": "_subBalance(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()", +"c5e9cadc": "calcExchangeRate(uint256,uint256)", "c5ea01c9": "testF2(uint256)", "c5ea0b4a": "buySquare(uint8,uint256,address)", "c5ea3c65": "maxId()", @@ -113371,107 +207445,200 @@ "c5ea8e1d": "RefUpdate(string,uint256,uint256,uint256)", "c5eab684": "calculateDividends(uint256,uint256)", "c5eaccfd": "whitelistAddrAndBuyTokens(address,uint256)", +"c5eacfbb": "nodeReleaseByDay()", "c5ebeaec": "borrow(uint256)", "c5ec05fd": "scheduleSale(uint256,uint256)", +"c5ec0c17": "debtDai(bytes32,uint256,address)", +"c5ec358c": "claimBro()", "c5ec365f": "guideInvestmentAttractedShareToPay()", +"c5ec50e4": "getOutputAmountsAndGas(address[],uint256)", +"c5ec8970": "_expiry()", "c5ecfc61": "getEscrowDeposit(string)", "c5ed7162": "firstPresaleStart()", "c5ed8c99": "canCollect(uint256)", "c5edd450": "payFor(uint256)", +"c5ee00d1": "updateCurrentSupply(uint256[2])", "c5ee5688": "setCompte_25(string)", +"c5eeb8af": "removeChainId(uint256)", "c5ef4c3e": "set(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c5efa85f": "proposalPending()", "c5efaa11": "calculateValue(int256,uint64)", "c5efaae8": "buyCredits(address,uint256)", +"c5efbee9": "makeBoomed()", "c5efea68": "getAdminStatus(address)", +"c5f00841": "pauseRebase()", +"c5f0204c": "endLockup()", "c5f0d3d6": "geneKind()", "c5f2892f": "get_deposit_root()", +"c5f28fcc": "printFull(uint256,uint256,string,string,string,string,string,string,string,string,string,string)", +"c5f2ae49": "stageTwoBegin()", "c5f310c0": "register(bytes12)", +"c5f38d48": "getLastVoteCastTimeByAddress(address)", "c5f39cd7": "rateSecondTier()", "c5f40edd": "discountedDealAmount()", +"c5f4127a": "transferBatch(address,address,uint256,uint256)", +"c5f41979": "minTransferAccepted(address)", +"c5f451ce": "changeOwnerKey(address)", +"c5f4596b": "canBurnCollateralForUSDT(uint256,uint256)", "c5f4b3da": "RewardPoolAmount()", "c5f4c98b": "changeDiscountStep(uint256)", +"c5f598cc": "totalClaimedBNB(address)", "c5f5ce21": "advisorTokenWallet()", +"c5f5d822": "scLock()", "c5f60620": "expectedTokens(uint256,bool)", +"c5f69283": "sfp()", +"c5f702fa": "setDefaultSubMessageType(bytes1)", "c5f70682": "setByuoutCount(uint256)", "c5f713cf": "push(uint256,bool)", +"c5f72780": "deployPool(uint256,address,uint256,uint256,address)", +"c5f73c68": "setSendHelper(address)", "c5f7ed63": "NeckCoin()", +"c5f81822": "verify(bytes32,bytes,bytes,bytes32)", +"c5f8ace2": "vaccToken()", +"c5f8b5fb": "PrivateIcoFinalized()", "c5f913fe": "callExitFromUnknownContract(address)", "c5f956af": "treasuryAddress()", "c5f98578": "RequestFromContract()", "c5f98a3f": "mega()", "c5fa1924": "MMS()", +"c5faf1d5": "maxSwing()", +"c5fb7e43": "requestPushReport()", "c5fbe723": "result_payto()", "c5fc43cb": "Newera()", +"c5fc7911": "lockProofOfPersonhood()", +"c5fc836f": "acceptOwnership(bytes)", "c5fc98c9": "TOKEN_THIRD_DISCOUNT_MULTIPLIER()", +"c5fd24c7": "randomWallets()", +"c5fdfed7": "x3Address()", "c5feaf60": "PRE_SALE_START_1()", "c5fee757": "executeOrder2(uint256)", "c5ff2069": "MooTokenSale()", "c5ff2222": "playNo()", +"c5ff608a": "KSCTransferToEcosystem(address,address,address,uint256,uint256,uint256,string)", +"c5ffd6e1": "getNextWizardIndex()", +"c6003934": "directPercent()", +"c6008e05": "__idle()", +"c600bc77": "getRoleAddress(uint8)", "c600e1dc": "getProfit(address)", "c6011633": "setRateFees(uint256,uint256)", "c6017a25": "playerRoll(uint256,address)", "c601b7f8": "icoPhase1Start()", +"c601f344": "connectionModified(address,address,bytes32,uint8,bool,uint256)", +"c601f352": "getStakerData(address)", +"c60201d4": "oneYearBlock()", "c60211ee": "MineFinished()", +"c6023bbf": "getTransferVerifier()", +"c6023f66": "ninja()", "c6028cf3": "nextSaleStage()", "c6029e7b": "sendBPESOTokenToMultiAddr(address[],uint256[])", +"c6037ede": "isDevAddress(address)", "c603a4e3": "getTotalHP(uint256,uint256,uint256,int256)", "c603ae14": "jockeyFS(uint256)", "c603bd7d": "_executeOrder(address,uint256,uint256,bytes,int256)", "c603c97b": "NewPiedPiperCoin(string,string,uint8,uint256)", +"c60410af": "TOKEN_PENGDING_SWITCH()", "c6041333": "calculateKnowledgeBuySimple(uint256)", +"c6044c46": "init(address[])", "c6046f77": "mintAndTransfer(address,uint256,bytes)", "c6049946": "saleExchangeRate1()", "c604bec9": "hasExtension(address)", "c604e967": "delFilter(uint256)", +"c6059ed1": "jobDetails(bytes16)", "c605f76c": "helloWorld()", "c6062bc3": "sellerRefund(uint256,address)", +"c606a344": "set_status(bool)", +"c606b8fa": "FrozenFunds(address,bool,uint256,uint256)", +"c606bfb2": "accLucoPerShare()", +"c60733af": "dodaj_knjigo(string,string,string)", +"c60760f9": "getProofs()", "c60778cf": "RefundRequest(uint256,address,uint256)", +"c60781bd": "getUserHoldedCoverLength(address)", +"c60790ca": "verifyKey(string)", +"c607cde7": "accumulated(uint256)", "c6080b3f": "KiDhon()", "c60880e0": "Aster()", +"c608b17d": "releaseMarketingToken()", +"c6095210": "AttackStart(uint256,uint256,uint32)", +"c6097743": "setGlobals(address,uint256)", +"c6098256": "fee1()", "c609ab26": "setImageCurrentRegionId(uint256,uint256)", "c60aa10d": "newForgeCon(address)", "c60b099f": "removeRate(uint256,uint256)", "c60b7784": "queryEOSCrowdsaleKey(address,address)", +"c60ba35e": "setUserMaxTeams(address,uint256)", +"c60bb95a": "elementIndexToOwner(uint256)", +"c60bdbc6": "GamePlay(uint256,uint256)", "c60bdc7f": "setUsersContract(address)", "c60c13a3": "blockAccountFunds(address,uint256)", "c60c3aca": "callFor(address,uint256,uint256,bytes)", +"c60c9f06": "SecondKicker(uint256,address,uint256)", "c60cae29": "changePeriodTime(uint256,uint256)", "c60ccb0e": "takerBuyAsset()", "c60ce271": "findNextMinute(uint256,bytes)", "c60ced1b": "LetsGoChain(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"c60d12c3": "SetBackend(bytes32,address)", +"c60d22d0": "emergencyTransferETHAll()", +"c60d2d8f": "getEventResult(uint256)", +"c60da51e": "mintPartSigned(address,uint256,string,bytes)", "c60f56b2": "totalAcorns()", "c60f6462": "resetRick()", +"c60fe7a3": "getCreditProfileById(uint256)", +"c6102aa8": "getWithdrawalManager()", +"c61053a3": "LockedFunds(address,uint256,uint256)", +"c61067e8": "bridgeCall(address,uint256,bytes)", "c610bb07": "tranfer(address,uint256)", "c6113205": "getTokenByIndex(bytes32,string,uint256)", "c6114aaf": "updateIPOPrice(uint256)", "c6117d37": "xactionFeeShare()", "c611ded7": "reserveTokensAddress()", +"c612442c": "redeemMany(address[],uint256[],uint256[])", "c6129a5a": "GetVersion()", "c612cc4e": "compareDatesWithoutTime(uint256,uint256)", "c613089f": "getBetsEvenAndODD(uint256)", "c6132eb3": "timeBetweenRewards()", +"c6135f43": "calcSwapEthToPiptInputs(uint256,address[],uint256)", +"c6135f86": "push(bytes32,uint256)", "c6137977": "eliminateSmartContractByteCode()", +"c613aec0": "approvedStrategies(address)", +"c61400bb": "withdrawForUserWhenRefund(address)", +"c6142482": "switchSubscriptionToMonthly(address)", +"c6149439": "setMasterResellerContract(address)", "c614b522": "getAllInvestmentPackageIds()", "c614da67": "free(bytes12)", "c6150296": "checkBalances(address,address)", "c615365f": "EthBetter()", +"c6153bcd": "LogBurn(uint256,address,uint256)", "c6159a35": "icoTransfer(address,uint256)", +"c615ff3b": "currentTickets()", +"c61641cd": "setRestrictions(address)", "c6169e1f": "maxTournamentContenders()", "c616f412": "totalQuantity()", +"c616f783": "addUserD(uint256,bytes32,address,string)", +"c617338c": "emit_event3()", "c6178a65": "soldTokensSale()", +"c61795b2": "eth(address)", +"c617f3fb": "NewPlayer(uint256,string)", "c617fe6e": "_setAllowance(address,address,uint256)", "c6180d27": "silverBoxPrice()", "c618210a": "crowdsalepricing(address,uint256,uint256)", "c618a1e4": "volume()", "c618d15f": "ConvertNumbers(bytes5)", +"c61935bd": "token_address1()", "c6195d03": "ONE_DECIMAL_QUANTUM_ABC_TOKEN_PRICE()", "c6195d36": "setConfig(address,uint256)", "c6199b6d": "getCustomerServiceAddress()", "c619bbd3": "GetPower()", "c61ab738": "getSupplyLimit(uint32)", +"c61aff5a": "L_DATA()", "c61b06ae": "collectibleIndexToOwner(uint256)", +"c61b1fa8": "get_pairs_length()", +"c61b20e2": "fi()", +"c61b5f4c": "videoCount()", "c61b8a44": "rewardGenerationComplete()", +"c61c1dde": "submitZkProof(uint256,uint256[])", "c61c3c4b": "buyPackWithETH(bool)", +"c61cd66b": "setSubOracle(address)", +"c61d5da5": "PhaseAdded(address,uint256,uint256,uint256,uint256)", "c61de162": "_withdrawPromoter(address,uint256)", "c61e42ae": "mint(uint256,int256)", "c61e5be6": "cardSetsInCirculation(uint256)", @@ -113481,67 +207648,109 @@ "c61f13a1": "setWitdrawGas(uint256)", "c61f3a2c": "drpToken()", "c61fb3f1": "Moon()", +"c61fbbff": "burnAndSwap(address)", "c62072d2": "nfo_transaction(uint256,uint256,address,address,bytes32)", "c620b5fe": "isDaySecond()", +"c620daba": "approve_700(address,uint256)", "c620ecc7": "KYCTeam()", "c62122eb": "AmberToken()", +"c6213de7": "tvlStaking()", +"c6219c75": "withdraw(address[],uint256[],uint8[],bytes)", "c621f96e": "deleteDIDHolder(address)", "c6220fbd": "dividendDistributionStartTime()", "c6221878": "projectCompleted()", +"c6222331": "getLockData(address)", "c62239da": "printAllCompanies()", +"c6223e26": "withdrawForSwap(uint256)", "c6224757": "issueTreasury(address,address,address)", +"c6228485": "addFiatTraderCollateral(bytes32)", "c622afb0": "getInsertPointForNumTokens(address,uint256)", +"c6232725": "OnNameChanged(uint256,address,string)", +"c6235c34": "ms(uint256)", "c6235f8d": "delMarketMaker(address,address)", "c623674f": "ipfsHash()", "c6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", +"c623a7b1": "strategyFeeBase()", "c6240303": "SetAuxOwner(address)", "c6253f14": "XXXXXXXX08(uint256)", +"c6255626": "supportedTokens(uint256)", +"c625565c": "claimedLoyalty()", "c625bd27": "transferFromBRXPay(address,address,uint256)", +"c625bfb9": "CreateStudentGroup(string,string)", "c625e9b1": "buyTokens(uint256,address)", +"c6260251": "fusion()", "c62631a5": "LicensingToken()", "c62662f2": "setTotalCapitalization(uint256)", "c6266693": "setCoreContract(address)", "c626c52e": "isGame(address)", "c6279ab1": "voteClose()", +"c627cd48": "titleName()", "c627d0f8": "setCampaign(uint256,uint256)", "c628ddc3": "TAIL()", +"c628fdf9": "getRequiredSignatoryCount()", "c629061d": "external_oraclize_randomDS_proofVerify(bytes,bytes32,bytes,string)", "c6291223": "fundTransferWithin(address,address,uint256)", "c629cdf4": "collectPayout()", "c629e770": "donorList()", +"c62a7ae6": "changeMinimumBalanceforinterest(uint256,uint256,uint256)", "c62aa67d": "getNodeId(bytes32)", +"c62af258": "addressMaxCap(address)", +"c62af579": "QUERY_EXECUTION_DELAY()", +"c62b7547": "addToTransferBlacklist(address)", +"c62c2920": "lastGrillTime()", +"c62c4b60": "setquran(address)", "c62c5fda": "setIcoFirstWeekRate(uint256)", "c62cfa1d": "getMyNote(uint64)", +"c62cff53": "FeeWindowRedeemed(address,address,address,uint256,uint256)", "c62d7407": "frozenOf()", "c62dcd5b": "getSentTransactions()", "c62dee76": "HumanBlockToken()", +"c62e272d": "withdrawStuckAssetOnAcoPool(address,address,address[])", "c62eac5c": "create(address,uint256,bytes32,int256)", "c62fae5d": "getValueInfo(address)", "c63012a1": "setHashPiture(uint256,bytes32)", +"c630f01c": "get_holderBonusCount(address)", "c630f92b": "canEnterPool()", "c630f96b": "ZToken(uint256,string,uint8,string)", +"c6311e3f": "proposalList(uint256)", "c6314bf9": "companyAllocation()", +"c6315ef0": "transferChainLessGas(address,address,address,uint256)", "c6317f37": "Token_Saled()", +"c6318c23": "addInvestmentAssetCurrency(bytes4,address,bool,uint64,uint64,uint8)", "c631b292": "closeVoting()", "c631e758": "clearRole(address)", "c6321979": "buyTokenPack(uint256)", +"c632395e": "getRestAmount(address)", +"c63267b8": "approve_508(address,uint256)", "c632e654": "_takeRdFee(uint256)", "c633084f": "sendGreeting(address,string)", "c6335b26": "startInvasion(uint256,uint256[])", +"c6337f28": "stakerInfo(address,uint256)", "c633eb24": "generateReserve()", +"c634041d": "convertInfo(bytes32)", "c63445f3": "setFeePool(uint256)", +"c634b78e": "grantAdminRole(address)", "c634d032": "mintToken(uint256)", +"c634dfaa": "principalBalanceOf(address)", "c634fd83": "adminSetDefaultFee(uint256,uint256)", +"c63516e4": "IsInWhiteList(address)", "c63545e9": "developer_edit_text_fees(string)", "c6354bc0": "addCountries()", +"c63576e4": "signContract(string)", "c6357b54": "impl_forging(address,uint256,uint256)", "c635a9f2": "MinimumDeposit()", "c635bf38": "keyGt(bytes32,bytes32)", "c635d65e": "StandardToken(address,string,string,uint8,uint256,bool)", +"c635eba5": "cw()", "c6361267": "mintOneWeek()", +"c6363892": "totalReferralFeeEarned(address)", +"c6363b21": "providePermission(address,bool)", "c6366ce9": "TOTAL_ICO_CAP()", "c636813e": "disapproveSingleUser(address)", +"c6368560": "CEOshipTransferred(address,address)", +"c637516b": "roundImageIdx(uint256,uint256)", "c63755e1": "transferPresale(address,uint256)", +"c6377832": "getMemberTopupInfo(address,address)", "c6381649": "getChats()", "c6384071": "voteCount()", "c638529f": "SetProvider()", @@ -113551,128 +207760,272 @@ "c6399fc7": "_setItemNotForSale(uint256)", "c639e8c5": "registerVerifier(address)", "c63a4e05": "getCartLength()", +"c63a6ad2": "stakingRate()", +"c63aa3e7": "_blockTimestamp()", +"c63aa521": "getMaxBalance(address)", +"c63adb0a": "getJobOffersCount(uint256)", +"c63ae628": "setEthItemInteroperableInterfaceModel(address)", +"c63af2ad": "ApprovalReceived(address,uint256,address,bytes)", +"c63b3a49": "interestReserve()", +"c63b4e19": "changeSuperAdmin(address,string,bytes32)", +"c63b8e99": "executePullPayment(address,bytes32,uint256)", +"c63bb597": "startChangeMinInterval(uint256)", +"c63be5e4": "withdrawRiskyReward()", "c63c1a27": "calcFight(uint64,uint64,uint256,uint256)", +"c63c4e9b": "minDelay()", +"c63c6e0a": "testTransfeUsingInternalWallet()", +"c63ca431": "LOG_TradeWon(address,uint256,bytes32,uint256,uint256,uint256,uint256,string,uint256,string)", "c63ccb3b": "Discount()", "c63d04df": "BonusReferred(address,address,uint256,uint256)", "c63d99db": "auctionName()", "c63e2ebc": "setRoundStart(uint256,uint256)", +"c63e3f3d": "setStorageKey(bytes)", +"c63e5245": "addTamagPool(uint256,address,bool)", "c63e529b": "buy(string,string)", +"c63e8d1a": "claimTranches(address,uint256[],uint256[],bytes32[][])", "c63ebcbb": "claimedUnits()", +"c63f1089": "sellLogic()", +"c63f31d9": "auditOutcomes(bytes32)", "c63f49ab": "LuckyDice()", +"c63f7e90": "BigBoyReturn()", "c63fdcc7": "claimPayment(uint256)", "c63ff8dd": "claim(bytes)", +"c6400111": "cumulativeRates(uint256)", +"c64009d6": "exchangeEtherForDOWSAtRate(uint256,uint256)", "c64012a6": "CoinSent(uint256,address,string)", "c640487d": "_changeLogicContractAddress(address)", "c640752d": "update(address,address)", +"c640ee3d": "tellerModerators(address)", +"c640f350": "wallet_()", +"c6416f4c": "restoreTokens(address,address)", "c641aaca": "addPrivateSaleEndDate(uint256)", +"c641bf97": "txFeeNumerator(uint256)", +"c641eca7": "ERR_WAIT_PERIOD_SHORTER()", +"c641f72a": "getRecipientsInfo()", +"c64258e3": "getFees(uint256,uint256)", "c6427474": "submitTransaction(address,uint256,bytes)", "c642b103": "treasuryTimelockAddress()", +"c642d91d": "migrateCampaign(address,address)", "c642e7bf": "getRoundState(uint256)", "c642f094": "MOT()", "c6430e29": "get_firstbytes(address)", "c6434660": "isTakePermitted(uint256,uint256,uint256,address,address,uint256,uint256,address)", "c643872e": "paymentTo(uint256,bytes,address)", +"c6438841": "addMinionGroup(bytes32,address[])", "c6440b3e": "sub(uint32,uint32)", +"c6441798": "expire(bytes32)", +"c6448410": "checkPoints(uint64)", +"c644ee6f": "swapETHForTokens(uint256,address)", "c64572b8": "minimalPriceUSD()", "c645ecc4": "handleReturnBytes32()", "c6461625": "setIV_R4(uint256)", "c64743d5": "BlockMined()", +"c64751bd": "convict(bytes32)", "c6476fe9": "isMinimumInEther()", +"c64776f8": "WhiteListAddition(address)", "c647b20e": "setTaxes(uint256,uint256)", "c647c3d9": "t_1st_StageEnd()", +"c647e31f": "getTotalLastPoolReward()", +"c647f13b": "_bonuses(uint256)", +"c647f844": "rotationDelay()", "c648843a": "current_week()", +"c648a3a2": "transferAdministrator(address)", +"c648ac15": "func_071B()", "c6490835": "total_tokens()", "c64a2358": "_targetBlock()", "c64a3239": "updateExec(address)", "c64aace0": "airdropConjured()", +"c64bdf5a": "setFeeProvider(address)", "c64bf22d": "SummerGreen()", "c64bf32f": "distribute_token()", +"c64c2064": "nextRevealPhaseStartBlock()", "c64d73c6": "JCoin()", +"c64d9a33": "streamLpBoosted(address)", +"c64d9d93": "all(bytes32)", +"c64daca5": "tweleMonths()", "c64e03a2": "FAPcoin()", "c64e08a0": "CampaignPausd(uint256)", +"c64e1ae9": "ticketHolderReward(uint256)", "c64e8bc0": "executeN(uint256)", "c64f28c8": "createImage(address,uint256,uint16,uint16,uint16,uint16)", "c64f9490": "updateAccessoryLock(uint64,bool)", "c64fa2e4": "totalDividendShares()", "c64fbbce": "_calcRemainingRoundTime()", +"c64fc372": "Err()", +"c64fed2e": "invest(bytes16)", "c65025f8": "isSmartSharingEnded(bytes32)", "c6502da8": "basePayment()", +"c650627d": "subBalanceList(uint256)", +"c650ea59": "withdrawTokenReserves()", "c6512a33": "CNC(uint256,string,uint8,string)", +"c652e944": "WhitelistedEvent(address,bool)", +"c654465d": "getCommFunds(uint256)", "c6544e5c": "icoSpecConfirmed()", "c6548076": "isUserBlacklisted(address,address)", +"c654bd51": "project(address,address)", "c65538ec": "afterSTEDistributed()", +"c6557fd2": "removeStaker(address,uint256)", +"c655af8b": "addLiquidityToBakerySwapSCORExWBNBPair()", "c655d7aa": "recoverAddress(bytes32,bytes)", "c655fd2c": "setSlowDump(uint256)", "c6560856": "currentJackpotInWei()", "c6567835": "changeVaultWallet(address)", +"c6570d85": "rewardPerLPToken()", "c6570e67": "contractorTransfer_Scoupon(address,uint256)", +"c6572023": "getOptionPower(uint256,uint256)", +"c657852c": "freezeList(address)", "c65799a4": "ReturnRequested(address,address)", "c6580352": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256)", "c65808b9": "getSpell(uint32)", +"c6580d12": "EXIT_FEE()", "c6585a27": "updateNotaireAddress(address)", +"c6585b82": "addCollege(address,string)", +"c658616c": "lostSwapTest(address,address,address,uint256)", +"c658baa5": "MCD_CREATE_FLASH_LOAN()", +"c65937e3": "PermissionGranted(address,bytes32)", +"c65961f2": "votingMinHours()", "c659ce2b": "setBountyAddress(address)", "c659d443": "url(bytes32)", "c659dceb": "is_verified()", +"c65a0ea2": "isPausedStaking()", "c65a0fdf": "updatePixelIndex(uint16,uint16)", +"c65a3e7d": "MINIMUM_VIP_INVEST()", +"c65a3f76": "Issue(address,uint256)", "c65a4068": "_multisig(bytes32,uint256)", +"c65a4558": "removeTopMember(address)", +"c65a4915": "acoTokens(uint256)", "c65ac542": "saleUnpause()", +"c65acdf0": "resolveL1ToL2TransactionQueue()", "c65ad85c": "isReadyToStart(bytes32)", +"c65aea72": "Lib()", +"c65af3f5": "buyBoxs(uint256,uint256)", "c65b125f": "setContestContractAddress(address,address)", "c65b490e": "getBabyMakinPrice(uint256)", +"c65c0cc7": "isDataExist(uint256)", "c65c6eae": "getReadableContribution()", "c65c9567": "gameResult(uint256,uint256)", "c65c9d63": "getNextStakedNode(address)", "c65ccc07": "setLtdParams(uint256,uint256,uint256)", +"c65cd86d": "setOraclePrice(uint256)", "c65cec32": "refundTokenToCustomer(address,address,uint256,address)", +"c65cfd52": "contractStaked()", "c65d15b9": "reference()", "c65daea0": "allocated6Months()", +"c65de62f": "gzeToken()", +"c65e3242": "setPerformanceDevFee(uint256)", +"c65e53b8": "Staked(address,uint256,uint256,bytes)", +"c65f560c": "partnerArr(uint256)", "c65fb380": "isSet()", +"c65fc4b8": "motivation()", "c6601270": "getMyIceDragon()", "c660477b": "GetData(uint256)", +"c660c93e": "getChainDynamicDetails(uint256)", +"c6610657": "coins(uint256)", +"c66106db": "addSchainType(uint8,uint256)", "c6610dec": "owner_share()", +"c6616894": "TOKEN_PRECISION()", +"c6616ba1": "updateFees(uint256,uint256,uint256,uint256)", +"c6619ec8": "getCodeHashAtLastUpgrade(address)", +"c661a5cc": "UserCensored(address,bool)", "c661deb4": "issueHardcapToken(address,address,uint256)", "c661ee4d": "proofAddr()", "c661fed3": "isAdvisor(address)", "c6620580": "presale_tokens()", +"c662c1d4": "_setUpline(address,address)", +"c66301b2": "numberOfProducts()", "c6634ef5": "certify(uint256)", +"c6638a8b": "unprovideFunds(uint256)", "c6638df9": "LogTemplateCreated(address,address,string)", +"c663baa6": "lockcomUpdate(uint256)", "c66485b2": "setDefaultResolver(address)", +"c664cf7e": "mintHDUD(address,uint256)", +"c664f7f1": "referralBalance_(address)", "c665242b": "storeMsg(string)", "c6653041": "ParticipantRegistry()", +"c665f9df": "burntoken(uint256)", +"c6668d45": "getOracleDetails(uint256)", +"c6669132": "reject(uint256,uint256,string)", "c666c798": "setExtendedTokenCap(uint256)", +"c666ec3b": "getPiptTokens()", +"c66764e1": "callCode(address)", "c6677519": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c66777f0": "mintAndRedeem(uint256,uint256[])", +"c6678926": "approve_892(address,uint256)", "c667ab20": "setFundsRegistry(address)", +"c667fac8": "purchaseChest(uint16,uint16,uint256,address)", "c6685617": "record(address,uint256)", +"c66870ef": "LogNextWave(uint256)", "c6688445": "stringToSignExample()", "c668dfd7": "doAirdrop(address,address[],uint256)", "c668ee3d": "operatingFundAddress()", "c668f71b": "exchFee()", +"c6690a41": "firstCampaign()", +"c66966b7": "lastEmissionBlock()", "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()", +"c66b5814": "createAction(bytes32,address)", +"c66b96d1": "cancelSale(address)", "c66bd6aa": "updateEthICOThresholds(uint256,uint256,uint256,uint256,uint256)", "c66c2536": "doTransferOut(address,address,uint256)", "c66c67e9": "setReservedTokensPercent(uint256)", +"c66cd4a4": "dvdBurnedAmount()", +"c66cd93e": "giftSprite(uint256,address)", +"c66d564f": "thaw(bytes32,uint64,bytes32)", +"c66d6576": "claimAndFeed(uint256[],uint256[],bool)", +"c66e1dd5": "works(uint256)", +"c66e378b": "SetSupplyLock(bool)", +"c66e3c9a": "getUserSingleStakeSum(address)", "c66e4095": "icoContract()", +"c66e45bf": "NewShareholderListing(uint256,uint256,uint256,uint256,bool)", "c66e9260": "ESCCrowdsale()", "c66ed8f7": "lockGenesisImports()", +"c66f58ad": "Set_Token_Contract(address)", "c6702187": "CLAIM_SIGNER_KEY()", "c6705a00": "signupUsersManually(address)", +"c67060fd": "BravePlayer(address,uint8)", +"c67085cb": "godkimchi()", +"c670df67": "matrixReward(address,uint256)", +"c6710629": "getUserPendingReward(address)", "c6711049": "withdrawTokenManually(uint256)", "c67117f5": "InvEnterpriseAddr()", +"c67128d0": "manualRate(address)", +"c6712ee2": "BONUS(address)", "c67146a5": "check_bet(uint256,address,uint8)", "c6715f81": "left44(uint256)", "c6716590": "DovieBarMitzvah()", +"c67165a2": "setsessionBlockSize(uint256)", +"c671b934": "buyTokenFromGame(address,address)", +"c672624c": "pigeonArrive(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c672724a": "setClaimRewardDetail(uint256,uint256,uint256,uint256)", +"c6727538": "buyFlag(uint256,address)", +"c6728c5d": "getNextCollateralCeiling()", +"c6729f26": "setLockTransfer(bool)", +"c6739801": "BlacklisterChanged(address)", +"c673a8b3": "getETHEarnings(uint256)", +"c673c09b": "endsIn()", +"c673d137": "protesterLifetime()", +"c673fa37": "pendingNova(uint256,address)", +"c67400dd": "time_type_weight(int128)", "c67410fb": "getOwnersLoan(address)", "c67415f3": "mineCrystals(uint256)", +"c674532e": "BETATEST_BLOCKNUM()", "c674e0c9": "setSmartContractStatus(uint8)", +"c674f273": "OrderClosed(address)", +"c6756f69": "setParams(bytes32,uint256,uint256,uint256,uint256)", +"c675965f": "LOG_PolicyPaidOut(uint256,uint256)", +"c675f222": "getOpenInterestInAttoCash()", "c67685a9": "turnOffCanUpdateDeveloperMiningPower()", +"c676d458": "priceforSwap(address)", "c67747a5": "bitGuildAddress()", "c6776239": "BitPropertyToken()", "c6777e63": "changeUrls(string,string)", +"c677848b": "liquidityGenerationStartTimestamp()", "c677b207": "addElectedMember(address,string)", +"c6786e04": "MINT_TYPE_HASH()", "c6786e5a": "destroy(address[])", +"c67887c4": "ReferrerPayed(address,address,uint256)", "c6788bdd": "claims(address)", "c678ca19": "comfirmIsses(uint256)", "c678e618": "sendDividend()", @@ -113685,15 +208038,25 @@ "c67b099f": "createWildcard(string,uint256,uint16)", "c67b599a": "presaleMinPurchase()", "c67bbc24": "getVolume()", +"c67bdb19": "SetReleaseDate(uint256)", "c67c6eab": "stopCrowdSale()", +"c67ce254": "knowledgeBases()", "c67ce6f5": "FlightDelayNewPolicy(address)", "c67d376d": "getClosedCandidates()", +"c67da6bc": "topBidVotes()", +"c67e4043": "usersActiveM4Levels(address,uint8)", "c67e43c1": "setExpectedEnd(uint256)", +"c67e6876": "dx(int128[])", +"c67e9ff7": "tokenMigrator()", "c67f3ba3": "GanLiXia()", "c67f3e1f": "totalDistributedinWei()", +"c67f55db": "getAdjustedRewardsBalance(uint256)", "c67f7df5": "getDepositsCount(address)", +"c6803409": "EthRateSource()", "c6803622": "wasCalled()", +"c6807111": "burnVault()", "c68098d9": "personalCapEndAt()", +"c6810f3e": "UniLPAddress()", "c6814aa2": "copyPaper(address,uint256)", "c681d68d": "badgeBalanceOf(address)", "c68218d1": "setStrF1F2F3(string,string,string)", @@ -113703,121 +208066,239 @@ "c68309a7": "buyICloudSecsAgainstEther()", "c683630d": "isWhitelist(address)", "c6837a87": "getDepositeTime(address,uint256)", +"c6838198": "_ethToToken(address,uint256,uint256)", "c683d8e4": "enableSale()", +"c68416cf": "Reveal(uint256,address,uint8)", "c6842868": "registerBroker(address)", +"c6845210": "addGuardian(address,address)", "c6851889": "Sale(address,uint256)", +"c6853270": "setRngRequestTimeout(uint32)", +"c6854db8": "rewardPoolFee()", +"c685775a": "gauges(int128)", "c68581ea": "addFile(uint256,string,uint256,string,string)", +"c6859d07": "MARKETING_WALLET()", +"c685a956": "ResourceTradeFilled(uint256,uint8,uint8,uint256,uint256,uint256,address,address)", "c686554e": "getInfo(address,address)", +"c6872ee4": "Create(uint256,address,uint8,uint8,uint8,uint8,uint64,string)", +"c6873596": "justTest(string)", +"c6873a51": "DataStored(bytes32,bytes32,bytes32,bytes32)", +"c687714c": "getNFTDayBenefits(uint256,uint256)", "c687857c": "updateAsset(uint256,string,string,string,uint256)", "c687ce9d": "setInitialOwner(address,uint256,uint256)", "c6888fa1": "multiply(uint256)", "c68890c7": "AcceptGuardianOffer(uint256)", "c6891018": "take(uint256,bytes32[])", +"c68a0d95": "AquariumResolved(bytes32,address)", "c68a3c1e": "setShares()", "c68a536d": "GetLuckyRewards()", +"c68ac6b0": "closeMint(uint256)", "c68ad0a8": "Hold(address,address,uint256,uint8)", +"c68ade37": "setInflationMonitor(address)", "c68ae617": "authenticate(address,uint256,uint256,uint256)", +"c68b0cd4": "plyr_(address)", "c68b82c9": "ethLastUpdate()", +"c68b9dfa": "rewardPoint()", "c68bf3ea": "eDeposit()", "c68cd47e": "COIN_SUPPLY_ICO_TIER_1()", "c68cee04": "addArtistToRegistry(bytes32,address,uint256,uint256)", "c68d81e0": "a(address)", +"c68da032": "setWaitLine(bool)", +"c68dbb37": "supportedAssets(uint256)", "c68deb7e": "saleEndTimestamp()", "c68e35b0": "verifyHash(bytes32,uint8,bytes32,bytes32)", "c68e52d9": "setTimeStamp(string,uint256)", +"c68e7563": "_setWhitelistReserve(address,bool)", +"c68ebac7": "initialize(address,address,uint256,uint256,address,bool)", "c68ee9cd": "search(uint256,uint256)", "c68eebe3": "getCurrentTokenPriceInCents()", "c68f2ada": "getDoc(string,string)", "c68f7dfc": "test_hasClaimableShares_zeroClaimableStake()", "c68fd307": "minimumContributionPresalePhase1()", +"c68fd7b8": "LogAddToken(address,string,string,uint8,string)", "c68fe0c1": "WeClosedInto()", "c69034ab": "test_21_assertGasUsage50Boards()", +"c6908223": "executedPropsalTransactions(bytes32,bytes32)", +"c6908901": "totalCompetitionAmount()", +"c690908a": "enableToken(address)", +"c690a74c": "updateAllowedSetToken(address,bool)", "c690c9a5": "Apollo()", "c6912a39": "confirmRedbullQuest(address)", +"c691af92": "issuancePaused()", +"c6929713": "payAnnualProfit(uint256)", +"c6929e53": "PERCENT_FOR_FOUNDERS()", "c692c049": "pushData()", "c692d9de": "LogNeumarksIssued(address,uint256,uint256)", "c692f4cf": "renounceAgent()", "c69493a0": "subSale()", +"c694c87a": "_exitStakingEmergencyAndApproveGetUnderlying()", "c69500fd": "rewardPay(address,uint256)", "c695ff11": "randomAPI_url()", "c6960d4c": "winnerid()", "c6967c17": "DeviseToken(uint256)", "c6969604": "emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"c696e9cd": "TWAP1Week(address)", "c69768dd": "createInkeTrade(bool,uint256,uint256)", "c6979c0a": "WhitelistContract()", "c697cbec": "_startNextRound()", +"c697e4a3": "checkTimelock(address,uint256,uint256)", +"c6985a3c": "getClaimLiquidBalancePcnt(uint256)", +"c69889da": "bancorData()", "c6998dc2": "updatePartner1_vows(string)", +"c699c4d6": "symbol(bytes)", +"c699f189": "totalVinsCount()", "c69a00be": "setPeggedToken(address,address,address,uint256)", "c69a8e13": "erc20BalanceForAddress(address)", +"c69ac6f7": "getMarketManagerAddr()", "c69b3936": "getNumSigs(bytes32)", +"c69b50d1": "changeExpiry(uint256,uint256)", "c69b5df2": "prev_hash()", "c69b5dfb": "verifyInvestors(address[])", "c69b761f": "admin_set_deposit(address)", +"c69ba441": "hashAttestations(bytes32,address)", +"c69be2ac": "HoneyPotOldSchool()", +"c69c09cf": "setAddressFrozen(address,bool)", "c69c7069": "mintPaper(string,string)", +"c69cac34": "voteItems(uint256)", "c69cd09d": "breedingFee()", +"c69d0573": "logShareMinted(uint256,address,uint256,uint256)", "c69e06db": "transactionsActive()", +"c69e0e78": "checkClaimParams(uint256,address,uint256,uint256,address,address,uint256,bytes,address,bytes)", +"c69e4ae1": "_burnToken(uint256,address,bool)", +"c69e4b1b": "HAUS()", +"c69e546d": "handleTokens(address)", +"c69e5eb8": "setPausedMint(bool)", +"c69ea42f": "contributionsEth(address)", +"c69ec779": "erc20ContractSwitch(address,uint256)", "c69ed5f2": "executeTransaction(bytes32)", +"c69f0d9d": "cometRotationSpeed()", +"c69f43b7": "threshold_price()", "c69f4481": "setBlacklist(uint32,bool)", "c69f8623": "convertSignalToMinimal(uint256)", +"c69fa0bb": "acsVault()", "c69fa8a9": "setAuthorizerAddress(address)", "c69fbf48": "bountyProgram()", "c6a00369": "LRCFoundationIceboxContract(address,address)", +"c6a0067d": "CertsEstudiante(string,uint256)", +"c6a023e9": "setAmount(uint256,uint256)", +"c6a02cc9": "resultDeclared()", "c6a05c06": "payOut(uint8,uint256)", "c6a09d95": "grantAccess(address,address)", "c6a0b13f": "cancelOnSaleCrab(uint256)", +"c6a0e27d": "withdrawNotSoldTokens()", "c6a0eb24": "test_threeInvalidEqBytes32Message()", "c6a118d4": "impl_transferMS(address,address,uint256)", "c6a17d2b": "pow10(uint256,uint8)", +"c6a1baeb": "ManagementChanged(address,address)", +"c6a1dd8b": "drugs()", "c6a22681": "getParticipantIndex(uint64,address)", +"c6a246a3": "rejectResult(bytes16)", "c6a2573d": "oneTokenInEurWei()", +"c6a276c2": "removeBlacklisted(address)", +"c6a2a9f1": "getSpendNonce()", "c6a2afa7": "TokenECCAC(uint256,string,uint8,string)", +"c6a2e2f0": "testIn(uint256[5])", +"c6a3ca5a": "getHUDLAddress()", "c6a41bd7": "updateDetails()", +"c6a42669": "linkLogo()", "c6a470e2": "getDisputeState(uint256)", "c6a496bf": "Artwork(bytes32,uint256,string,string,string,uint256,address)", "c6a4d345": "setMaxEscrow(uint256)", "c6a4f4af": "getCurrentPotInfo()", +"c6a51535": "rVolDaily(address,address,uint256)", "c6a52959": "gba()", +"c6a5877a": "feed(address)", "c6a5d5da": "updateBlocksPerDay(uint256)", +"c6a645fe": "modelCount()", +"c6a64c1f": "test(bool,uint256)", +"c6a67b54": "ytx()", "c6a69931": "verifyCommit(address,uint40,uint256,uint8,bytes32,bytes32)", +"c6a6cf20": "adjustTrove(uint256,uint256,uint256,bool,address,address)", +"c6a6f82c": "concludeTournament(address,address,address,address)", "c6a71577": "WEKUToken(address)", "c6a725d8": "confirmTransaction(uint256,bool)", +"c6a768a8": "getAvatarOf(uint256)", "c6a7d3af": "setTokenExcange(address,uint256)", "c6a81857": "existsCountsById(uint256)", +"c6a84925": "findListDistanceRun()", "c6a898c5": "u()", +"c6a8b42b": "addIssuers(address,uint256,uint256,address[])", +"c6a8d91c": "_voteOnBehalfOf(address[],uint256,bool)", +"c6a96c8f": "auctionStartTimestamp()", "c6a97c60": "SolusToken()", "c6a98543": "ICONIC_NIC(uint256,string,string)", +"c6a990b7": "initialize(string,address,address,address,address,address,address,address)", +"c6aa901f": "ethAllowance()", +"c6aabdde": "reqIdTracker()", "c6ab4514": "sendRobust(address,uint256,uint256)", +"c6ab4f3c": "safepercentage()", "c6ab5429": "KotET2()", "c6ab5cdc": "closeBuy()", "c6ab5d90": "withdraw(uint8)", +"c6ab67a3": "provenanceHash()", +"c6ab78b9": "externalTokenDecreaseApproval(address,address,uint256,address)", "c6ab848a": "referralInstance()", +"c6ab88e0": "requestSwapExactTokensForETH(address,uint256,uint256,uint256)", +"c6abb7c7": "smallDeposits(address)", "c6abc298": "getBetAt(address,uint256)", "c6ac53fd": "submitTransaction(address,uint256,bool,bytes)", +"c6acc7a8": "log(uint256,bool,uint256,uint256)", "c6ad1191": "MyOwnCoin()", +"c6ad1d98": "getStakedTokenResults(address,address[])", "c6ad5d7c": "expireBid(address)", +"c6adddab": "ownerRewardTransfer(uint256)", +"c6adec5d": "underlyingTotal()", "c6ae3b57": "dEthereumlotteryNet(address,address)", "c6ae67ad": "fundcruToken()", +"c6aea018": "disableExchange()", "c6af3166": "checkDouble(address)", "c6af43f9": "updateThresholdNewAuction(uint256)", "c6af477c": "get(bytes32,string)", +"c6afba3c": "underlyingBalanceStored()", "c6afd98a": "requestConversion(uint256)", +"c6b0236a": "setChallengeAmountMultiplier(uint256)", "c6b0263e": "setPublicCapability(address,bytes4,bool)", "c6b0a1fa": "checkPricePair(uint256,uint256)", "c6b0de7e": "removeFromWhiteList(address,address)", "c6b0ffd0": "is_success()", "c6b20dc2": "Invacio()", +"c6b21b02": "setDeposit(address,uint256)", +"c6b2705f": "TransferIn(address,address,uint256,uint256)", +"c6b29a37": "TradeHistory(uint256,address,address,uint256,uint256,uint256)", "c6b2a5dd": "updateCurrentSupply()", "c6b3a7cf": "wplus(uint256,uint256)", "c6b3ad7b": "setTWhitelist(address[],uint256[])", +"c6b43514": "equityToken()", +"c6b483ab": "pool_principal()", "c6b4ad80": "ctu_owner()", "c6b511a1": "EshaCoin()", "c6b547e6": "getDocumentName(uint256)", +"c6b58ccb": "blackListToken(uint256)", "c6b59e9e": "changeParameters(uint256,uint8,uint256)", +"c6b5bb3a": "createEditionFor(address,bool,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", "c6b6005b": "TMSYToken(address,address,address,address,address)", +"c6b61e4c": "epochs(uint256)", +"c6b68169": "sellOusdForUsdc(uint256)", "c6b6b1e8": "ICOReserveSupply()", "c6b6bc3c": "burnPurchase(uint256)", +"c6b720da": "setNewParaswapSpender(address)", +"c6b72a1f": "approveERC1155(address)", +"c6b774fd": "unlock(uint256,address,uint256)", +"c6b81caf": "_void(uint256)", "c6b85d2b": "AtomicX()", +"c6b93df7": "amountBurnt(address,uint256)", +"c6b94936": "whitelistDhpt(address[],uint256[])", +"c6b966ae": "burnOnRedeemInternal(address,uint256)", +"c6b96c96": "setFixRet4Eth(uint256,uint256,uint256,uint256,uint256,uint256)", +"c6ba4c2c": "_updateRewardsToBeAccredited(uint256,uint256)", +"c6ba9a8e": "baseExRate()", +"c6baae62": "balanceOfTokenInPool(address,address)", +"c6bb1e6f": "feerapids()", "c6bbb6ef": "sendTokensTo7(address,address,address,address,address,address,address,uint256)", +"c6bbcaa5": "setPredictionContract(address)", +"c6bc1616": "setBufferAmount(uint256)", +"c6bc5182": "nftId()", +"c6bc6723": "l2_swap_raw_limit(string,int256,uint256,address,address,uint256)", +"c6bc7906": "withdrawDepositById(address,uint32)", "c6bc8dee": "testInitial2of3()", "c6bcd5f7": "INTEGROToken()", "c6bcefe5": "otherPoolTotal()", @@ -113825,43 +208306,68 @@ "c6bd5a13": "dividendsPaidPerShare(address)", "c6bd62f5": "get_CountAllHolderForProfit()", "c6bd9187": "closeEvent(bytes32)", +"c6bdf8e8": "generateRandom(uint8)", +"c6be396f": "updateExponentialRewardsEnabled(bool)", +"c6be59bd": "TranscoderResigned(address)", "c6bec93a": "startLottery(uint256)", "c6befedf": "createPoll(bytes32)", "c6bf03dd": "changeReleaseAccount(address,address)", +"c6bf2b65": "Username(string)", +"c6bf5768": "_decode_sol_address(uint256,bytes)", "c6bf7489": "sendLudumToMany(address[],uint256[])", +"c6bf87e4": "yfinPerBlock()", "c6c09252": "_generateCode()", "c6c18e31": "PCToken()", "c6c1e248": "ProductFactory()", "c6c20a75": "getTotalCardValue()", +"c6c22655": "takerLeverageMin()", +"c6c25bfd": "maxFund(uint256)", "c6c25d04": "artUrlList()", "c6c27c71": "_slrByrLmtChk(address,uint256,uint256,address)", "c6c2966d": "setFundingEnv(uint256,uint256,uint256)", +"c6c29bcc": "A10(bytes)", "c6c2ea17": "fib(uint256)", +"c6c2ff12": "onBondBuy(address,uint256,uint256,uint256,uint256)", "c6c332f2": "getUserEthVolumeSaldo(address,address)", "c6c39bda": "unitsOneEthCanBuyafter()", "c6c3bbe6": "mint(address,address,uint256)", +"c6c3cfcc": "GWEI()", +"c6c3f08d": "batchTokenSuppliesInfos(address[])", "c6c3f3f9": "setKyberProxy(address)", "c6c4676c": "currentResult()", "c6c4bf44": "issueFor(bytes32,address)", +"c6c4d444": "metaTransferFrom(bytes,uint256,address,address,uint256,uint256)", "c6c55773": "Topplay()", "c6c599c1": "changeApprover(address)", +"c6c5c2e1": "upgradeFundController(address,address)", "c6c5de53": "testFailMixItemStoreNotRegistered()", +"c6c62390": "totalDeposited(uint256)", +"c6c63fb8": "LogModuleAdded(uint8,bytes32,address,address,uint256,uint256,uint256)", "c6c65136": "spiderReq()", "c6c68eb7": "getAyantDroitEconomique_Compte_2()", "c6c6b3ed": "Sale(uint256,uint256,address)", +"c6c7be34": "admin_unlock(uint256)", "c6c7d143": "cancelRedemptionRequest(uint256)", "c6c7f5aa": "impl_amountOfOrderQueue()", "c6c839f0": "increaseFreezeValue(address,uint256)", "c6c85ca5": "updateTokenRate(uint256)", +"c6c85f26": "getOneReturn(address)", "c6c8823c": "getActionPrice(string)", "c6c8cdc7": "LogFundTransfer(address,uint256,bool)", +"c6c8ef2a": "AddVesting(address,uint256,uint256)", "c6c99744": "t01_setKey(bytes32)", +"c6c9d828": "resolverAddressesRequired(uint256)", +"c6caa087": "MinLPTokensGolden()", "c6caa959": "sellRock(uint256,uint256)", +"c6caeece": "getRemainBalance()", "c6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", "c6cb7ab8": "getBytesValues(bytes32)", "c6cbc52a": "revokeCertificate(bytes32)", "c6cbd5f0": "abandonedIcoBalances(address)", +"c6cc33fa": "get_eth_reward()", +"c6cc4039": "_treasurySup()", "c6cc68b9": "BuyStockRocket(uint16,address)", +"c6cccabc": "updateRejectionCost(uint256)", "c6cce2e7": "len(address)", "c6cd15aa": "frozenVaults()", "c6cd712d": "delegatedTransferAndNotify(address,address,uint256,uint256,uint256,bytes32,bytes,uint256)", @@ -113869,10 +208375,13 @@ "c6cdc6f6": "fastICO(uint256)", "c6cdf77e": "upgradeWeth(address)", "c6ce2664": "setBancorRegistry(address)", +"c6ce34fb": "setBLabs(address)", +"c6ce3ae9": "recoverERC721ApproveAll(address,address,bool)", "c6ce81f0": "manualSendTokens(address,address,uint256)", "c6ceafef": "setFeedAddress(address)", "c6ceb50b": "Decimals()", "c6cebebd": "get_info(uint256)", +"c6cecf02": "withdram(uint256)", "c6ced32b": "getWorkersCount()", "c6cf1c7f": "generateRandomPerformance()", "c6cf452b": "testInitialA()", @@ -113881,81 +208390,151 @@ "c6d04634": "BasicCrowdsale(address,address)", "c6d0be63": "emergencyCease()", "c6d0ffda": "failedTemperaturesLength()", +"c6d1d08d": "investTerms(uint32,uint32)", "c6d1d23d": "totalPledgedFeesAt(uint256)", +"c6d239f5": "uu2up(uint256)", +"c6d2c717": "latestVersionAppBase(bytes32)", "c6d2cb6a": "getLavaTypedDataHash(address,address,address,uint256,uint256,uint256,uint256)", +"c6d2ef89": "_canChallenge(address)", "c6d32838": "deathData_f3()", +"c6d3486f": "GovernanceStart()", "c6d3ab9d": "changeTokenSymbol(string)", +"c6d3afc9": "staked(address,address)", "c6d417de": "NewName(address,string)", "c6d44ecc": "_getTokenCountToBuyFromSeller(uint256)", "c6d456ec": "Winning_Entry()", "c6d48e0d": "getVersionsCount()", +"c6d56db2": "assertEvenNumber(uint256)", +"c6d605eb": "initRebase(address,address,address,address,address)", +"c6d6125e": "disableAllTransfers()", +"c6d63d8c": "claimSnapshotEarnings(uint256,uint256,bytes32[],bytes)", +"c6d67b14": "getRawInterestAccrued()", "c6d69a30": "setTaxRate(uint256)", +"c6d73231": "updateProjectScriptJSON(uint256,string)", +"c6d758cb": "inCaseTokensGetStuck(address,uint256)", "c6d761d4": "cancelEscape(uint32)", +"c6d77169": "woodContract()", "c6d779e6": "getAmountOrdersForDay(uint256)", "c6d784cc": "Statustelega(address)", +"c6d79e9d": "pool5userList(uint256)", +"c6d7a5e5": "BuyItem(address,address,uint256,uint256)", +"c6d7b519": "changeArtistAddressAndCommission(uint256,address,uint256)", "c6d81547": "DecisionTokenSale(uint256,address)", +"c6d87dd5": "MAX_DEPOSIT_FEE()", +"c6d89834": "swap(bytes32,bytes32,bytes32,uint256,uint128)", "c6d8a203": "setConversionRateAddress(address)", "c6d8be5a": "setPricingStrategy()", "c6d8f0c4": "getLocks(uint256)", "c6d90e70": "AcceptsDailyRoi(address)", "c6d9112a": "MAX_DAILY_TOKEN_COSIGN_SPEND()", +"c6d93f4a": "setImplementation(address,bytes)", "c6d95512": "ExchangeTokenPushed(address,uint256)", +"c6da13f2": "BOX(uint256)", +"c6da8a1a": "withdrawSubRound(uint256,uint256)", +"c6da991f": "AssignCall(address,uint256,uint256,uint256)", "c6dad082": "make()", "c6daeeaa": "TIME_TO_HATCH_1SNAIL()", +"c6db01ad": "calculateReedemable(address,uint256,uint256)", +"c6db164c": "setROTMAGGOTpair(address)", +"c6db5335": "isVaultKeep3r()", "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)", +"c6dd6edf": "setStakePools(address[])", "c6dd8018": "Cygnal()", +"c6dd98e9": "withdrawBalance_fixed_2()", +"c6ddb642": "infos(address)", "c6ddcfe8": "publicSellToken()", "c6ddd889": "ForeignBridge(uint256,address[])", "c6de150b": "soldIdeaWei()", +"c6de558c": "getServiceFeeInfo()", "c6de5709": "calc_partnerPercent(address)", +"c6dee4b2": "set_UniSwapsETHExchangeContractAddress(address)", "c6deeb9d": "contributionAccepted()", +"c6def076": "booster()", "c6df66a7": "firstPlay(bytes32,uint8,bytes32)", +"c6df79bd": "recoverNexium(uint256,uint256)", +"c6dfa13f": "getInterestRate(uint256,uint256)", +"c6dfe057": "lockedPrivatorForEcologyPartTwoSupply()", "c6e000b5": "mntpToken()", "c6e0329f": "LaoHuiHui(uint256,string,string)", "c6e04590": "rateHard()", +"c6e0550a": "addParticipant(address,uint32,bytes32)", "c6e08ba9": "EligmaCrowdsaleContract()", "c6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", "c6e0dc6e": "ChangeTransferStatus()", +"c6e11596": "getDefaultToken()", +"c6e17a77": "setWrappedAToken(address,address)", "c6e1c178": "TheLuckyOne(bytes)", +"c6e225d6": "validToken(address)", +"c6e2a071": "hand_info(bytes32)", +"c6e2a400": "addImplementation(address)", +"c6e36a32": "votes(uint256,uint256)", "c6e3a9b3": "_total_sold()", "c6e3d1b4": "promotionsOfHost(address)", +"c6e3e6b3": "releaseLISAv1()", "c6e3e8fd": "getManualByAddress(address,address)", "c6e3ffc3": "determinePID()", "c6e416b5": "addressGains(address)", +"c6e426bd": "setToken0(address)", "c6e5546c": "distributeTokens(uint256,uint256)", +"c6e591e6": "addManualSetter(address)", +"c6e5bc30": "totalTokenSupplyAt()", +"c6e62e0b": "presaleTime()", +"c6e65139": "isSmokerized()", "c6e68059": "DeAuthorized(address)", "c6e68ea6": "createTournament(bytes32,uint256,uint256)", "c6e6ab03": "allocateCandyToken(address[],uint256[])", "c6e6b803": "grantAt()", +"c6e6f592": "convertToShares(uint256)", +"c6e705cd": "isInvalid(uint256)", "c6e715e1": "rechargeDeposit()", "c6e81b07": "remainingAuctionable()", +"c6e85b3b": "addToken(address,address,address)", +"c6e8b35a": "CardBought(address,uint256,address,uint256,uint256,uint256)", "c6e8b4f3": "createProxyAndCall(address,address,bytes)", +"c6e8d6c5": "marker4()", +"c6e908f4": "maxTokenGetAmount()", "c6e946df": "ComputePharaohReq()", +"c6e94bc8": "initGameSettings(address)", "c6e994d7": "shareWithdraw()", +"c6e99c29": "potDrip()", "c6e9ce11": "NZD_CLEAR()", +"c6e9ecad": "profitDerivativePositive(uint256,uint256,uint256,uint256,uint256)", "c6e9ff54": "changeBonusDistributionAddress(address)", +"c6ea0307": "toggleCrowdsaleOpen(bool)", +"c6ea24a7": "transferToNativeFromKey(uint256)", "c6ea3037": "_createSale(uint256,uint256,uint256,uint256,address)", +"c6ea59b9": "getname()", "c6ead8af": "tokensBurnt()", "c6eae0c5": "limitEth()", "c6eb8a65": "stage2BeginTime()", +"c6ec2067": "getRevocable()", +"c6ec7f55": "tokenBought(address)", "c6ed3418": "TokenMintPoD()", "c6ed8990": "addTokens(uint256)", "c6ed8e1b": "getApprovedProxys()", "c6eda379": "totalZTKCheckAmounts()", +"c6edc413": "Problem2(string,string)", +"c6edde97": "freeTeamTokens()", +"c6ede619": "_getCurrentTroveAmounts(address)", "c6ee701e": "getInts()", "c6ee7a2c": "Linkable(address,address)", "c6eeeb04": "increaseTimeBy()", +"c6eef505": "prb_pi()", "c6f017e1": "addOrgan(address)", +"c6f0308c": "claimData(uint256)", "c6f03aaa": "getRegister(string,string)", "c6f0557f": "insertarMensaje(uint256,string,string)", "c6f067d1": "MVPToken()", +"c6f14776": "setAyrAYR(address)", "c6f1649f": "deposit(address,uint256,address,address)", +"c6f3a427": "assertValidStorageParams()", "c6f3a895": "endFirstPeriodTimestamp()", +"c6f43016": "pendingMETH(uint256,address)", "c6f47486": "getHistoricalPrice(uint256)", "c6f482aa": "largeCapDelay()", "c6f48866": "isGameOver(bytes32)", @@ -113964,96 +208543,161 @@ "c6f5b0e0": "getContributor(uint256)", "c6f5d91f": "getAddressWhiteList()", "c6f6122d": "transferredManually()", +"c6f6298c": "securities(uint256)", +"c6f62db9": "redeemTeamTokensLeft()", "c6f664af": "totalInsuranceFlows()", +"c6f678bd": "depositAll(uint256)", "c6f6d9d9": "lotteryCount()", "c6f6f216": "setMaxPerTx(uint256)", "c6f70370": "generateRoomNightToken(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c6f7b7eb": "investorlist(uint256)", "c6f88b0a": "_hasCorrectTreasury(address)", +"c6f91181": "joinCrew(uint256)", "c6f981d7": "setTrap(uint256)", "c6f9defe": "futureExpanstion()", "c6fadeb3": "fechAllSumNumForEncourage(uint256)", "c6faf736": "updatePromoBonus(uint256)", +"c6fb17a1": "setDisbursementWei(uint256)", +"c6fb5014": "redeemCEth(uint256,bool,address)", +"c6fbae5e": "setProcessWithdrawalsEnabled(bool)", "c6fc2bae": "ACEEquityToken(uint256,string,string,uint8)", +"c6fc5a2c": "covertBasToDai(uint256)", +"c6fc6e90": "distributeToken(address,address[],uint256[],uint256)", "c6fd2103": "recordImbalance(address,int256,uint256,uint256)", "c6fdee56": "isAddress(address,address)", "c6fe317f": "changeVanityURL(string)", "c6fe7296": "resetPhases(uint256,uint256,bool,uint256,bool)", +"c6fe8287": "adminFeeTotal()", +"c6ff0738": "rose()", "c6ff3ae3": "EthMark()", "c6ff4081": "tokenProcess(address)", +"c6ff90c7": "pendingWOLF(uint256,address)", +"c6ffb6cb": "setIssuancePaused(bool)", "c7005f04": "distributeInternal(uint256,uint256,uint256,uint256)", +"c7007e57": "WithdrawalToken(address,uint256)", "c701672f": "_recordPresalePurchase(address,uint256)", +"c701b774": "burn_price()", "c7021c9e": "submitPresetTransfer(address)", +"c70242ad": "deployedContracts(address)", "c7024b98": "deleteHybridization(uint256)", +"c7026097": "runTokenKyberUniswap(uint256,address,address)", "c7027329": "isBossWannaCryContract()", "c7028f96": "burnAllLeftTokens()", +"c702b5df": "setRewardRound(uint256,uint256,uint256,uint256)", "c702d3b4": "Unregistered(address,address,uint256,uint256,uint256,uint256)", "c7033137": "settleBets()", "c7033721": "genesisRoot()", +"c7035f89": "WithdrewEarnings(address,uint256)", "c70383a5": "takeOwnerShip(uint256)", +"c7039167": "validatorRegistryContract()", +"c703f44c": "currentInterest()", "c7046117": "sendAsGift(address,uint256)", +"c7046594": "proxy_init(address,bytes32,address,address,address,address,address)", "c7047fa7": "metadataUrlPrefix()", +"c704d9d0": "LogWithdrawProfit(bytes32,address,uint256,uint256)", "c704e04a": "recordingResultsOfBet(bytes16,bytes16[],uint8[])", "c704f7ed": "lockName()", "c705a1a8": "getMerchandise(uint256)", +"c705d524": "apy2k()", "c705e1a3": "allowToken(address,address,uint256,bool,bool,address)", +"c7067755": "controllableByOwner()", "c7071c3e": "MiningRewardChanged(uint256)", "c707936a": "Serpent()", "c707bae5": "getTopNames()", +"c707ec67": "viewLeisureReferral(address,uint8)", +"c708028f": "setTraderInfo(uint256,address,uint256)", "c708ed9c": "getPI_edit_15()", "c7091c5e": "INITIAL_STAGE()", "c70978da": "UnicornBreeding(address)", "c7097f62": "linkAddress(address)", "c7098e91": "decodeOrderTokenAndIsBuy(uint256)", +"c7098eb9": "engine3_index_winner()", +"c7099b8a": "getDefaultListTokens()", "c709c7b8": "priceStep7()", +"c70a094c": "EtherWithdrawal(address,uint256)", +"c70a19d0": "tokenAPRs(address)", "c70a24af": "ROLE_NEED_LOCK_UP()", "c70a3f1a": "whiteHat()", "c70a9246": "GetConsentData(uint256)", "c70ad05b": "identity_storage()", +"c70b470d": "godSetOpenAuctionsContract(address)", "c70bbc13": "emitRevoke(bytes32,uint256,address)", +"c70c0785": "whitelistReduce(uint256)", +"c70c82db": "saverProxyActions()", "c70cc560": "storePassword(string)", +"c70cced4": "teamAddBonusCacl()", "c70cdad8": "hashBacktestPositions(uint32,int64[])", "c70cef3a": "WalamaCoin()", "c70d169d": "answerRequest(uint256,bytes)", +"c70d7b6c": "firstEpochStartTimestamp()", "c70dd8b3": "procureTokens(address)", +"c70de94e": "delayedFunctions(uint256)", "c70e8640": "amountFundTeam()", "c70ef908": "setPI_edit_33(string)", "c70f5eaa": "buyCard(uint256)", "c70f8e71": "enableTypeById(uint256,uint256)", "c70faf90": "EndMinting(uint256)", +"c70fd8ec": "setRarityTitle(uint256,string)", "c70fe6bd": "migrateAuction(uint256,address)", "c71029e1": "getBankRequests(string,uint256)", "c7102df7": "__stopBlock()", +"c710629a": "CONTRACT_ELEMENT_ERC20_TOKEN()", +"c7108b43": "CAPPER_ROLE()", "c710a2aa": "marketplace_controller()", +"c710e922": "updateValidatorContractAddress(uint256,address)", "c7110035": "multiSigWithdrawal(address,uint256)", +"c71118e3": "iKompPerBlock()", +"c7120a00": "AddressRemoved(uint256,address)", "c7120bad": "linkAccount(uint8,string,string)", "c7120d77": "sendFunds(address,uint256,uint256,uint256,uint256,uint256)", "c712f3b3": "TradeId()", +"c7130fa6": "_allocPointForBFI()", +"c713316c": "changeNodesContract(address)", "c7133f53": "setAccountS(address)", +"c7139954": "perIntervalRewardOf(address)", "c713a67b": "momentNonceOf(uint256,uint256)", "c713aa94": "setEndBlock(uint256)", +"c713ac19": "ImportWinnersEvent(address)", "c713b10f": "isSameSign(int256,int256)", "c713bd70": "getMarketerRate()", "c7143c41": "notSameSeed(string,string)", "c7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", +"c714700c": "isDIDOwner(address,bytes32)", "c7153816": "lowerSupply(uint256)", "c715533e": "allFrozenTime()", "c715a2b1": "withdrawnOf(address)", +"c716389a": "getERC20TokenBalance(address)", +"c7166801": "getPointLength(uint256)", "c71692b6": "capPreICO()", "c716b616": "adopt(uint32,uint32)", "c7172710": "pouseCrowdsale()", +"c7174984": "chargeOutstandingManagementFee()", "c7178230": "isDeprecated()", +"c717e8ea": "mintToken(uint256,uint256,uint256,uint256,uint256)", "c717e9eb": "voidOrRevert(uint256)", +"c7183971": "LogInsertInvestor(address,uint256,uint256,uint256)", +"c71859b8": "changeAdminPercent(uint256)", "c718640a": "setDragonSpecialPeacefulSkill(uint256,uint8)", +"c7186be9": "_emitLeave(uint256,uint256,uint256,address)", "c718b272": "Floor(uint32,address)", "c718b2bb": "YunToken(address)", "c718d0e0": "_setFreezedBalance(address,uint256,uint256)", "c7192cda": "EventUpdateWasReset()", "c7192e44": "setPaid(address)", "c719348b": "safeCheck(uint256)", +"c719bf9e": "_stepFee()", +"c719e57f": "getUserBalances(address,address)", +"c719eafd": "createStakingEvent(uint256[],uint256,uint256[],uint256,uint256,uint256,uint256[],uint256[])", +"c719f4d5": "liquidityToken(address,address,address)", "c71a7aea": "distributedReservedTokensDestinationsLen()", +"c71ab83b": "onMessageReceive(uint256,address,bytes)", "c71ad84d": "vehrespond(uint256,uint256,address,bool)", +"c71aea4e": "MainSaleActivated()", +"c71b0038": "claimAndReinvestFromKebabPool()", +"c71b4b43": "add(uint256,address,address,bool)", "c71b583b": "closeRequest()", "c71ba100": "revokeBalance(address,address,address)", +"c71bdc6a": "DailyLimitChange(uint256)", "c71bee4c": "OMITokenLock(address,address)", "c71bf8ba": "multiplierOfPrice()", "c71c0b40": "fundRaised()", @@ -114064,12 +208708,18 @@ "c71cbcf3": "recoverAccount(address,address)", "c71daccb": "checkBalance()", "c71ddb9f": "releaseContract()", +"c71de8a3": "setEthVig(uint256)", "c71e48d6": "setOutcome(bytes32,bytes32[])", "c71e876b": "VESTING_DURATION_2Y()", +"c71ecb87": "setLockEightWeeks()", "c71eef58": "applyForTokenOneDay()", "c71f2bae": "AddOpenOrder(uint32)", "c71f311c": "setFABAcompanyTokensWallet(address)", +"c71f358d": "requestVolumeData(uint256[],uint256[],string,uint256)", "c71f4253": "getNumberOfVotes(uint256)", +"c71f6d79": "appendL1ToL2Batch()", +"c7209d57": "getRebalanceable(address)", +"c7213163": "getRewardPercentage()", "c7216a44": "_generate_special_horsey(address,address,address,bytes32)", "c721b34b": "setBattleAddress(address)", "c721b6bd": "grantVestedTokens(address,uint256,uint256,uint256,uint256,bool,bool,bool)", @@ -114078,48 +208728,92 @@ "c722328d": "withdrawToMultisig()", "c722e113": "_transferDivs(uint256,uint256,uint256)", "c722e462": "CoinX()", +"c722ebb2": "clearMDS()", +"c722f177": "domains(bytes32)", +"c723143f": "init(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"c72359f1": "setLockToBlock(uint256)", +"c72371e8": "airdropAmout()", "c7238af7": "escapeDestination()", "c724772c": "turnOnIco()", "c72486d2": "Unexpended()", "c724acb7": "calcDifficulty()", +"c72551be": "burnRequestNonce(bytes32)", "c7258d7f": "isUserWhitelisted(address,address)", +"c7264b89": "tknOfferors(uint256)", "c726c2b9": "getPI_edit_24()", "c726dea8": "memberArray(uint256)", +"c7273053": "addL1Transaction(uint256,uint48,uint40,uint40,uint32,uint48,bytes)", "c7277115": "ManagedToken(string,string,uint8)", "c727980a": "payDeposit(uint256,address,uint256)", "c7280315": "UnauthorizeToTransfer(address)", +"c7284549": "getSlopesStats(address)", "c7286a21": "removeContribution(address)", +"c7287e9d": "getDevFee()", +"c72896ac": "reap()", +"c728db94": "BondStartDate(address,uint256)", "c7291b7e": "descriptionHashHistory(uint256)", +"c7293668": "returnERC20(address)", "c729a567": "withdrawFundToAddress(address)", "c72a2328": "tier_rate_1()", "c72a480e": "DGameController(address[])", +"c72a4ac8": "calculate_return(uint256,uint256,uint256,uint256,uint256)", +"c72a8696": "withdrawal(uint256,uint256)", +"c72a8a14": "allowStakeRelease(address)", +"c72a8c63": "cancelTicketSale(uint256)", +"c72a99c0": "setupMultisig(address)", +"c72b50fd": "setDepositRate(uint256[3][3])", "c72b5176": "getGroups()", "c72b5e4f": "persentRate()", +"c72bc3eb": "TaxUpdate(uint16,uint8)", "c72be838": "gasForDCN()", "c72c1133": "Log(string,uint256,uint256)", +"c72c4d10": "addressesProvider()", +"c72c6883": "getBunnyId(uint256)", "c72c757e": "delete_allowedAddress(address,address)", "c72cbd78": "removeused()", +"c72deb17": "privateAsksMapping(address,address,uint256)", "c72e1576": "addAddressInWhitelist(address)", +"c72e160b": "getAmountsForLiquidity(uint160,uint160,uint160,uint128)", +"c72e26b8": "updateAdvertiserRegistry(address,string)", +"c72e2794": "JobClaimed(address,uint256)", +"c72e47dc": "calcLbtPriceAndLeverage(int256,int256,int256,int256)", "c72e57c7": "lockedTill()", "c72e6d03": "p_setRefPercent(uint256,uint256)", "c72e8baf": "PRICE_3()", "c72e9e45": "setEgeregAddress(address)", +"c72eeaba": "proposeUpgrade(address,address,bytes)", "c72f0dd9": "Player_HitOrStand(uint256,bool)", +"c7302ec5": "createInstance(string,uint256)", "c7303c61": "createPost(string)", "c7304f37": "changePool(uint88)", "c730bbd8": "rateWaiting()", +"c730c544": "Decision(uint256,bytes32)", "c730dfbb": "WemarkToken()", +"c73111dd": "executeRuling(uint256,uint256,bytes32,uint256,uint256)", +"c7312ed2": "setRouterPath(address,address,address[],bool)", "c731c504": "restoreFunds(address,address,uint256)", "c731e124": "rewardslength()", "c73202ff": "jpPercentageDivisor()", +"c7320978": "Doom(address,address,uint256,uint256)", +"c7321401": "balanceOfmVault()", "c732d201": "currentCount()", "c7330bf6": "getDepositesCount(address)", +"c73358de": "setMarketContractAddress(address)", "c7343754": "getLendingItemLength(address)", +"c7344165": "getNumHolders()", "c7347832": "asyncTransfer(address,address,uint256)", +"c734ddbe": "_withdrawFees(uint8)", +"c734ec0f": "mappeople(uint256)", "c734f917": "onTokenTransfer(address,uint256)", +"c7352ede": "getMaxCap()", +"c7356060": "answerHash()", +"c735a13a": "addOrEditTier2ChildsChildStakingContract(address,string,address,address)", +"c735f1f7": "joinCycle(uint256,uint256)", "c73659be": "RexToken(uint256,address)", "c736a051": "getPlayer(address,uint256)", "c736e118": "bgxWallet()", +"c7373386": "personIndexToSiringPrice1(uint256)", +"c7375737": "fake(uint256)", "c7377d80": "Bourneereum(uint256,string,string)", "c737b7c6": "getTotalTickets(address)", "c7381593": "Multimember(address[],uint256)", @@ -114130,22 +208824,34 @@ "c73992e4": "hasApproved(address)", "c73997b1": "changeBaseValue(uint256,uint256,uint256)", "c739d31c": "setPrivateSaleAgent(address,bool)", +"c739d3e4": "setCollateralFactorNumerator(uint256)", "c73a2d60": "disperseToken(address,address[],uint256[])", "c73aae86": "get_Release()", "c73b187d": "oraclizeMinCallbackGas()", "c73b302e": "projectsCount()", +"c73b7175": "someData()", +"c73bdd73": "buyWithETH(address,uint256,bool)", "c73c27bc": "getNodeId(uint256)", "c73c2a45": "WriteBible(uint16,uint16,uint16,uint16,string)", +"c73c8d5d": "updateRedemptionRate(address,address,address,bytes32,uint256)", "c73c933d": "ChangeBurnBoundsOperationEvent(uint256,uint256,uint256)", +"c73ccf68": "beamUniswap(address,uint256,address)", "c73d3b30": "getAbilities()", +"c73d7c7b": "setEmergencyStop(bool)", "c73defce": "ETCHaddress()", +"c73e0294": "delayWhitelist()", +"c73e293b": "referrers(address,uint256)", +"c73e3af1": "globalEffectTokenForContract(address)", +"c73e6183": "redeemERC20(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "c73ea367": "setNickName(string)", "c73ec2eb": "minCompositionFee()", "c73f0c11": "burnGlobFoneCoin(uint256)", "c73f20e3": "issueamount()", "c73fcee2": "CLNTotalSupply()", +"c740671f": "initialize(address,address,address,address,address,address,uint256,uint256)", "c74073a1": "close(address)", "c740bc9f": "setLongtermMinter(address,uint256)", +"c740f538": "historyProfitsArray()", "c7410070": "publicbattlestart()", "c7411eb4": "calculateAntBuy(uint256,uint256)", "c741764c": "oldE4()", @@ -114159,38 +208865,64 @@ "c742bab1": "VUP_TOKEN_SUPPLY_TIER1()", "c743092e": "Buy(uint256,address,uint256,uint256,uint256,uint256)", "c7430e28": "Trillionix(address,address)", +"c7431d49": "MultiTransferFrom(address,address[],uint256[])", +"c7431e9a": "setRealAddrs(address,address)", "c7431f5c": "changeETXAddress(address)", "c74352af": "FileServerManager()", "c74370db": "Transfer(address,address,uint48,bytes)", "c74442e6": "withdrawNexiums(address)", +"c74446d3": "addAirdropPools(address[],uint8[])", "c7445c22": "getPassportId(address,address)", "c7446565": "startAt()", +"c744700a": "_getRandomBurnAmount(uint128,uint128)", +"c744c486": "addOne(uint256)", +"c744e757": "merryMen()", "c74590e3": "LogInvestment(address,uint256)", "c745ca9a": "transferBack(uint256,address,address)", +"c745d9e7": "UNISWAP()", "c745dab9": "MakerDepositedEther(uint256)", "c7464e8a": "showRandomWinners()", +"c7468ebc": "createContractPolitician(string)", "c746a52d": "showme(uint256,uint256,uint256)", "c746b299": "PSCToken()", "c746c8f4": "addAllowedSender(address)", +"c746f51d": "validateTrade(uint256,uint256,uint256)", "c747ef76": "AbieFund(address[])", "c747f120": "totalIssuerCollateralisation()", "c74803de": "_isContained(bytes32,bytes,bytes32)", +"c74825e4": "ethToTokenSwapInput(uint256)", "c7489441": "closeMarketMaker(uint256)", +"c748a3dd": "MintPriceChange(uint256)", "c748b54b": "PeerWalletsERC20Token()", +"c7495dd8": "customInitialize()", +"c749ae15": "depositForConversion(address,uint256)", +"c749d614": "comUpdate(address)", +"c749efb3": "ReleaseGovernFunds(address)", "c74a2449": "canUserAnswerQuestion(address,uint256)", "c74a4000": "cnrtoken()", "c74a690c": "price_in_wei()", "c74a827c": "setMonsterCreatorAddress(address,address)", "c74a96eb": "setHGT(address)", +"c74ab7ac": "arrAvailableGames(uint256)", "c74abe43": "getMyTokensValue()", "c74b1e01": "startPresaleTime()", +"c74b2edf": "zero_rate()", "c74b5a3e": "open5Chest()", +"c74b7c3b": "getStakingAmount(address,uint256)", +"c74bcbdf": "getFirstStakedAtOf(address)", +"c74c0fac": "UNISWAP_FACTORY()", "c74c251f": "addSafely(uint256,uint256)", "c74c851a": "isValidInvestment(address,uint256)", "c74ca049": "unshareKey(bytes32,address)", "c74ce765": "TESTTESTToken(address)", +"c74e0394": "accountPartnerBase()", +"c74e3ab0": "iskanje(string)", +"c74e820e": "sink()", "c74e907b": "commit(address,uint256,uint256)", +"c74e9f77": "SetStakingPeriod(uint256)", +"c74f942e": "getUserCreateAuctionByPage(address,address,uint256,uint256)", "c74fc077": "guards(uint256)", +"c74fcd77": "MIN_REWARD_POLL()", "c74fda29": "_distributeAdvisorsToken(uint256)", "c7506049": "_processSalePurchase(address,uint256)", "c7508ec7": "removeClaim(address,address,bytes32)", @@ -114201,34 +208933,61 @@ "c7516da7": "CITY_INCREASE_RATE()", "c751e027": "PoolTeam()", "c752746e": "tokenHoldersClaimed(address)", +"c7527c28": "estimatedDailyRewards(address)", "c752a999": "MoneyTokenPromo(uint256,string,uint8,string)", +"c752f20c": "tokenTransferByAdmin(uint256)", "c752ff62": "totalUpgraded()", +"c7531342": "_daiBuy(uint256)", +"c753299a": "getEmozione()", "c75363b6": "BEGIN_TIME()", +"c7536ff0": "SOGNO2()", +"c7537f36": "claim(address,address,uint256,bytes)", "c7542f1d": "GCCToken()", +"c7545394": "unstakeEarly()", "c754fc08": "addGroup(uint256,uint256,uint256)", "c75514e8": "executeOptions(address,uint256,string)", "c7559da4": "uint256ToBytes(uint256)", +"c7560f46": "DIDHoldersArray(uint256)", +"c7564017": "removePendingModule(address)", +"c7569cb0": "setCostToBuy(uint256)", +"c756aa99": "getUserInvestmentByAddress(address)", "c7573e82": "registerStudent(address)", "c7574839": "communityWallet()", +"c7574fb9": "getJapanTime()", "c7576e8f": "TOBToken()", "c7576ed4": "finalizeMigration(address,address)", "c75782be": "startup(uint256,address)", +"c7580e45": "getHeroStrength(uint256)", +"c7582714": "yfnpPerBlock()", +"c7585886": "approveDai()", "c7586219": "burnShares(uint64)", "c7586cde": "THIRD_USER_CUT()", "c758b813": "ausGroupAllocation()", "c75902cf": "iwtfundtokens()", "c7591d35": "checkGuess()", +"c75934eb": "numDaysInMonth()", "c7593f01": "SKLAuction()", +"c7594df2": "_getPeriodStartTermId(uint256)", +"c759d070": "SUBSCRIPTION_ADDRESS_NEW()", +"c75a6224": "founderList(uint256)", +"c75a94f6": "BurnUnsoldTokens()", "c75abf24": "setup(uint256,uint256,uint256)", +"c75ba9c1": "push_v(int256)", "c75bc4fb": "setMaintenanceLock(bool)", "c75bc6f8": "UniverseShieldToken(address,address)", +"c75be87d": "INITIAL_COFFEE_SUPPLY()", "c75c6a06": "batchCancelVoteForCandidateByIndex(uint256,address[],uint256[])", +"c75cf245": "addCollateral(address,uint256,uint256)", "c75d9d29": "unlockPurchase()", +"c75ddfd0": "viewbal(address)", "c75e8d55": "setRecipientString(string)", +"c75ebb82": "getUserReward(address)", "c75fb740": "Error(bytes)", "c75fc22f": "freeEther()", "c7600cde": "getInitialReporterAddress()", "c7602316": "deploy(string)", +"c76072e8": "ZapInCurveVault(address,uint256,address,address,uint256,address,bytes,address)", +"c7610f73": "claimable_token()", "c7614487": "MAX_CROWD_FUNDING_ETH()", "c761a2f5": "revertFeeCalculatedFlag(bool)", "c762547d": "contractCreatedCount()", @@ -114240,250 +208999,482 @@ "c764427c": "addAllowedContract(address,address)", "c764d4c4": "withdrawCountriesToken()", "c764ee57": "VIWOZ()", +"c7650941": "getStakedAtBlock(address)", +"c7650bf2": "commitContractStorage(address,bytes32)", +"c76566e7": "DESC()", "c7656f6e": "startProject()", "c765defd": "setBeneficiary(address,bytes32)", +"c765e1f0": "createStream(address,address,address,uint256,uint256,uint256,uint256)", "c76668cf": "transferCheck(address,address,uint256)", "c7669337": "fundMinting(address,uint256)", "c766ce02": "addFactProviderToWhitelist(address,address)", +"c766f9d8": "test_swap_exactIn_zeroForOne(uint128)", +"c7671882": "deprecatedVariable()", "c768051a": "gla()", +"c7688cf3": "depositStop()", +"c7689a22": "initiateRequest(bytes32,uint256)", "c768a4cd": "upgradeSword(address)", "c768ac01": "totalWithdrew()", +"c76a19ca": "maxBetVal()", "c76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", +"c76a4d31": "liquidBalanceFor(address)", +"c76a6c9c": "getReserveLiquidationBonus(address)", "c76a74df": "Bitscoin()", +"c76b3ab6": "addDepositProfile(uint32,string,uint8,address,uint256,uint256,uint256,uint256)", "c76b838c": "bulkSell(uint8[],bytes6[],uint32[],uint32[])", +"c76c16cb": "PREV_TOKEN()", "c76c1ba5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", "c76c68d0": "CalcToc(uint256,uint256,uint256)", "c76c9269": "ethVest()", +"c76ca46f": "bonusBlockEnd(uint256)", "c76d0754": "fiatSend(address,uint256,uint256)", +"c76d41c8": "TLC()", +"c76d5306": "performSwap(address,address,uint256,uint256,address[],bytes,uint256[],uint256[],uint256)", +"c76d9c04": "freespinsAddress()", +"c76db6c0": "decloudPrice()", "c76de3e9": "Start(string,string)", "c76df481": "getArmyOwner(uint256)", "c76e7f32": "addressToPersonId(address)", +"c76e8dc2": "writeTradeData(address,uint8,int256,string)", "c76f0d13": "COSTToken()", "c76f80c8": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", +"c7704f4a": "setSign(string,string,string,int256)", +"c770e649": "editDiscountFeeList(address,bool)", +"c770ea7d": "ricochetionFromToken(uint256,bool)", +"c770ed7c": "pendingKraken(uint256,address)", +"c771c390": "setLockupPeriod(uint256)", +"c771ea19": "_setEnableWpcClaim(bool)", "c772173a": "ProsperToken()", "c7725426": "setAuthorizeMintToken(uint256)", +"c7727693": "Dodaj_Izposojevalca(string,string,string,string)", +"c7727df8": "withdrawnToken(address)", "c772af39": "boss()", +"c7736110": "rewardNeeded()", "c7736abf": "windowOpenTime()", +"c773bffb": "stakeSTBZ()", +"c7747217": "engine1Winners(uint256)", +"c774cecc": "_getChallengedAction(uint256)", "c77547f7": "maxTimeIntervalHB()", +"c775b542": "getMinedBlockNum(uint256,uint256)", "c7760b11": "getlevel(address)", "c77636fc": "PauseOwnerAdmin(bool)", "c77684f9": "ClipperCoin(uint256,string,string)", +"c77695d1": "NAPboostLevelThreeBonus()", +"c776cb89": "dev_fund()", "c776cc42": "FREEDOMCoin()", "c7775011": "setSlaveWallet(address)", +"c7778baa": "collectionOf(uint256)", +"c777fa6f": "isSmoked(address)", +"c7780ab2": "driftIncrement()", +"c7780c9b": "BuyPixel(bytes32,address,address,uint256,uint256,uint256,bytes32)", "c77810a4": "Pot()", +"c77828d0": "dropToken(address[],uint256[])", "c778427b": "migrationInitiated(address)", +"c77843b3": "exitAll(address,address)", +"c77858cf": "withdrawBenefit(uint256,uint256)", "c7786275": "Bitansuo()", "c778a46b": "doPresaleMinting(address,uint256,int256)", +"c7792a3c": "blocksPerDuration()", "c7798891": "TokensReleased(address,uint256)", "c77a0de6": "xfer(uint256)", +"c77a1594": "executeAction(address,bytes,uint256,bytes,bytes)", "c77a16ed": "resumeTransfers()", +"c77a7101": "setUserInfos(uint256)", "c77ae9bf": "resetRaz(uint256,address,uint256)", +"c77b6328": "setVaultY(address)", +"c77b66c2": "mint(uint256,address,uint256,bytes)", +"c77b6a13": "numberCombustToRegister()", +"c77b8fee": "Donate(uint64,uint64,address,uint256)", +"c77b92b6": "unsuccessfulBountyFeeInWCKWei()", +"c77b99b2": "minTopupBps()", "c77bd8cc": "acceptAdminToo()", "c77bdfce": "bindToken(address,address)", "c77c00f8": "openNewBet(address,uint256,uint256)", +"c77c7387": "vestingAddress()", "c77db34e": "PWNasdas()", +"c77ded31": "buyTokensWithETH(address)", "c77dff62": "shrimpyramid()", "c77e7614": "getTotalWithdrawAmount()", "c77ef9b8": "setAccessProvider(address)", "c77f58c8": "transferMinusComission(address,uint256,uint256)", "c77fe4d6": "incentivisingSupply()", +"c7801cc1": "feeReturnAddress()", +"c7803a42": "balanceOfFluidUtil(address)", +"c7807868": "withdraw(address,address,uint256,uint256,uint256,uint256,uint256[])", +"c780bd43": "userWithdraw(address,uint256,uint256)", +"c78161db": "claimedPerTokenPayouts(address)", "c781d7b0": "calculateAntSell(uint256)", "c781f97b": "getCurrentCrabPrice()", +"c7821a91": "batchFuturesTrade(uint8[2][],bytes32[4][],uint256[11][],address[2][],bool[2][],bytes32[],uint256[3][])", "c7825c3f": "Pruebalillo()", "c782fc60": "getExtraBalance(address)", +"c782ff1f": "offerer()", "c783dc9e": "pullEther(uint256)", "c783fb10": "validBalanceOf(address)", "c784648d": "addIdArrayItem(address,uint256,string,string,uint256)", "c7847d19": "createAnnoTrade(bool,uint256,uint256)", +"c7850035": "shl_combined(uint256)", +"c7851396": "swapMulti(address[],uint256,uint256,uint256[],uint256[])", +"c7851418": "gasTopUpLimitUpdateable()", "c7857d27": "setMyName(string)", +"c785ac8f": "v_to_parent(address)", +"c7865278": "getRouterVerv1(uint256)", +"c7868ace": "oneInchExchangeAddress()", "c786a66f": "_createSchedule(address,uint256,uint256,uint256,uint256)", "c786ebd1": "LogPrepareToStart(string,uint256,uint256,address,address)", +"c7876940": "storeClaimSeed(address)", "c7876ea4": "basePrice()", "c7878fa0": "setHumanityFund(address)", +"c787a56c": "onEndRound(uint256,uint256)", +"c788283f": "LPperBNBUnit()", "c7888a07": "claimSuperDragonEggs()", "c7891514": "forthWeekMainICOBonusEstimate()", +"c7892a36": "get_ServiceProviderAddress()", +"c7894921": "mintAFIToken(uint256,bool,address)", "c78974de": "get_test_data_length()", "c78982d5": "getIntervalCoefficient(bytes2,uint256)", "c789ea87": "acceptFoundation(string)", "c78a33e1": "DestroyEvent(address,uint256)", +"c78a3736": "ico(uint256,address,uint256,uint256)", "c78a4c98": "icoRaised()", "c78a8dfe": "Kardanor()", +"c78aa668": "setTwin(address)", "c78ad77f": "percentage()", "c78af2f7": "contributeByProxyContract(address,uint256)", "c78b200c": "transferableFromBlock()", "c78b616c": "totalListings()", +"c78b6dea": "sendReward(uint256)", +"c78baf88": "calculateContribution(address,uint256,uint256,uint256,bool)", "c78bd060": "makeInvestment()", "c78c0138": "timestamp_contract_start()", +"c78c2093": "financeslevel()", "c78c3a83": "getPredictions()", +"c78c8295": "collectedManyTax(uint256,uint256)", +"c78cd526": "getUserBorrowedOrderbyToken(address,string)", "c78cdf66": "mintTimelocked(address,uint256,uint32)", "c78d7380": "COINECTToken()", "c78d846d": "PTCToken()", "c78dc603": "alt_buyCollectible(uint256,uint256,int256)", "c78e139a": "setUpgradedContractAddress(address)", +"c78ef809": "setMarketingFeePercents(uint256)", "c78f3e18": "starteth()", +"c78f6803": "getFeeBalance(address)", "c78fc487": "indexedByOwner(address,uint256)", +"c79045cb": "TOP_BID_LOCK_TIME()", +"c79110aa": "kamal()", "c791316e": "minFundingAmount()", +"c7916cf9": "redeemReputation(bytes32)", +"c791713a": "createEtherStream(address,uint256,uint256,uint256,bool)", +"c7918b13": "creamWithdraw_FRAX(uint256)", "c791bd21": "AngelToken()", "c791cc39": "BOECoin(uint256,string,uint8,string)", "c791e16b": "platPriceOracleContract()", +"c791fbb7": "minimalDepositForBonusReferrer()", "c792024a": "tierRates(uint256)", +"c792433f": "handlerWhitelist(address)", +"c7926458": "pendingDividends(address)", +"c7929e8c": "EMERGENCY_LIQUIDITY_VAUL()", +"c792f36d": "signatures(address)", +"c792f6cf": "isDomainApproved(uint64,uint64)", "c79343e5": "isSYNVault()", "c7939f34": "oddsTotal(uint256,uint256)", +"c793ae91": "OAS_oraclizeRandomGas()", +"c793fcf9": "getAnswers()", "c79403f5": "moveFurnaceData(address[],uint16[],uint256[],bool[],uint256[])", +"c79414d4": "reqBox(address,uint256)", "c7941a09": "setDelegadoDeEscuela(bytes32,bytes32,uint8,uint8)", "c794549e": "setDesignatedReport(bool)", "c7946842": "URLOf(uint256)", +"c794c769": "F_ADDR()", "c794ef10": "purchaseCostEther(uint256)", "c794f575": "makeAnnualInvest(uint256)", +"c795379c": "earnedether(address,uint8)", "c7956846": "get_solved(address)", "c795dd24": "availableTokenBalance(uint256,uint8)", "c7963ae8": "Tabo()", "c7968135": "totalNumberOfFunders()", +"c7968ff0": "releasedFoundingInitiatorSales(address)", +"c7970477": "ponziFriendToLevel1Ref(uint256)", +"c7973bc7": "externalContract(uint256)", +"c7977be7": "EIP712_DOMAIN_TYPEHASH()", +"c797a3e4": "setAssigner(address)", +"c7981922": "getResourceById(uint256)", +"c7981b1b": "refundSeller()", +"c7987a00": "viewSaleZOOMEN()", "c798b5cf": "CommunityToken()", "c7990f70": "SetDevFee(uint16)", "c7995a4e": "_registerTrade(uint32,uint256)", +"c799cd11": "changeWalletImplementation(address)", +"c799d6c7": "pendingwanWan(uint256,address)", "c79a68cf": "setPrices(uint256,uint256,string,string)", +"c79ac4ab": "_emitStakeEnd(uint40,uint256,uint256,uint256,uint256,uint256,bool)", +"c79af676": "modifyOrder(address,uint256,uint256)", "c79ba27d": "kscTransferFrom(address,address,uint256,string)", +"c79bad43": "contractFrozen()", "c79bb895": "SGACrowdsale()", "c79bdb46": "setRewardPercent(uint256,uint256)", +"c79bef85": "addWithoutBurn(address)", "c79c9105": "countOfPublicKey(bytes32)", +"c79c9512": "freeSlot(uint32,uint32)", +"c79cc77c": "isSortedAscending(uint256[])", +"c79ce30d": "initialize(uint256,uint256,uint256,uint256,address,address,address,address,address,address,address)", "c79eaa22": "sub(uint96,uint96)", +"c79eb9a6": "set_cat(bool)", +"c79ee667": "changeEthCoef(uint256)", +"c79eff3a": "inceptionTime()", "c79f5321": "update_data()", +"c79f5e08": "take(string)", "c79f7cef": "_postValidatePurchase(address,uint256)", "c79f8b62": "error()", "c79fc609": "addressC()", "c7a02061": "totalEtherCollected()", "c7a08487": "_generateRandomDna()", +"c7a0b618": "_borrow(address,uint256)", +"c7a13879": "addInternalSoftwareDevTeamsAddress(address)", "c7a16847": "SetRewardMulti(uint256)", "c7a16965": "testUint(uint256)", "c7a1865b": "play(bytes32)", +"c7a1c040": "getLiquidityLimit()", "c7a1f221": "tokenPriceInCents()", "c7a1fb36": "PRE_SALE_CAP()", "c7a24403": "Illuminatus()", +"c7a25b51": "_swapETH(uint256)", "c7a28247": "stopBuyingTokens()", +"c7a29c6f": "setRewards(uint256)", "c7a2a663": "getCodeAtAddress(address)", +"c7a305c8": "rebind(address,address[],uint256[],uint256[])", "c7a323fe": "ACTION_INITIAL_BIDDING()", "c7a32726": "StartCrowdsale()", +"c7a34f9e": "raffle_closed()", "c7a37657": "getCfd(uint128)", "c7a3778f": "testControlRetractLatestRevisionNotUpdatable()", +"c7a3fdb2": "setBscVaultAddress(address)", +"c7a3fe0b": "pendingMinBurnAmount()", +"c7a49525": "setBuoyandBPool(address,address)", "c7a4af15": "setPrice(uint8,uint128)", "c7a4cf8d": "checkOverMaxcap(uint256)", "c7a4e4bc": "VIPCHAINToken()", +"c7a56783": "_features()", +"c7a5bdc8": "oraclePriceAndTimestamp()", "c7a5d285": "extract(address)", "c7a6c454": "confirmTransaction()", "c7a6c6d4": "_creditTokens(address,uint256)", +"c7a7103e": "IllegalReentrancyError(bytes4,uint256)", "c7a86dd2": "updateEnergy(uint32,uint32,uint256)", "c7a86e33": "signedApproveCheck(address,address,uint256,uint256,uint256,bytes,address)", "c7a96920": "stopICO_20_March()", "c7a9a64b": "depositNetfRevenue(uint256)", +"c7a9d2d3": "_withdrawReward(address)", "c7a9d6de": "startICO(address)", "c7aa278e": "poolInvestors()", +"c7aa327b": "playerBets(address)", +"c7aa37d0": "appOwners(uint32,uint256)", +"c7aa6ae7": "reinvestBountyBps()", "c7aaa83f": "Bounty0xToken()", +"c7aaadda": "lockedWalletAddress(address)", +"c7aacf0f": "swapAll(uint256,uint256,uint256,uint256[])", +"c7aad8e1": "lockupBalance(address)", +"c7ab02b7": "_convertToken(address,address,address)", +"c7aba573": "footballers(uint256)", "c7abc42a": "getgamecard(uint256)", +"c7abdb1e": "upgradeComponent(uint256,address)", "c7ac0909": "AddedName(address,string,uint256,address,uint256)", "c7ac14b1": "dividendCutPercentage()", +"c7ac315d": "purchaseHouse(uint256,uint256)", "c7acae2e": "getServerAddress()", +"c7acb01f": "spell(address,bytes)", +"c7acd531": "setCollateralConfig(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c7ace088": "_decode_sol_uint256(uint256,bytes)", "c7ad31b0": "LogHodlStartSet(address,uint256)", "c7adb61f": "initializeTreeCoinProject(address,uint256,uint256,address,address)", "c7adef28": "getCitationRecord(bytes32,uint256)", +"c7ae2007": "unlockScheduleCount()", "c7ae3ad5": "fillBuyOrder(uint256,uint256,uint256)", +"c7ae4e2c": "settled_sessions(bytes32)", "c7ae7451": "addEvent(address)", +"c7ae7af2": "calcPoolValueInETH()", "c7ae9632": "xfer(address,address,uint256)", "c7af18f1": "SedPoSToken()", +"c7af3352": "isGovernor()", "c7af3dd1": "updateCost()", +"c7af95f7": "setClaimStatus(address,uint8,address,uint8,uint256,uint256,uint256)", "c7afe9f2": "setTokenAddress(address,address)", "c7aff0d7": "manuallyProcessTransaction(address,uint256)", "c7b0235b": "DPPCrowdsale()", "c7b0f0ca": "lockTokensPercent()", "c7b0fc5e": "usedItem(uint256)", +"c7b10d5e": "Sale(uint256,uint256,address,address)", "c7b11fca": "mainMaxContribution()", "c7b160db": "getTotalNumberOfAddressesReceivedAirDrop()", "c7b1fd00": "usdPerEthLogSize()", +"c7b22551": "addClaimTopic(uint256)", "c7b23ec6": "initalizeOrgan()", +"c7b24ba2": "setLockupEpochs(uint256)", "c7b27a25": "IOReceipts()", +"c7b2940f": "unlock_team(address)", "c7b31ed0": "store(address,address,uint256,uint8,uint8,bytes)", "c7b3b0d4": "getCompanyInfo(bytes32)", "c7b41aa9": "getSmartCoins()", "c7b43f02": "expressBuyNums(uint256,uint256[])", +"c7b4854f": "retrieveValue(uint256)", +"c7b4b11c": "compoundToMaker(uint256,uint256,uint256)", "c7b5716d": "createSellOrder(address,uint256,uint256,uint256,uint256)", +"c7b57841": "isFounder(address)", +"c7b599a0": "totalPoolSum()", +"c7b5a483": "sm_profitSyncLength()", +"c7b5a48c": "PRESALE_ALLOCATION()", "c7b6084c": "backendOperator()", "c7b6ccae": "opetToken()", +"c7b6d432": "lockups(address)", "c7b6fd6a": "subDays(uint256,uint256)", +"c7b6fdba": "setGuardianSale(uint256,uint256,uint256,uint256,uint256)", +"c7b70bb9": "getHashDetails(bytes32,uint256)", "c7b799ae": "addressFunc(address,address)", "c7b7d6ca": "sendResearchAndDevelopment()", +"c7b7eb34": "sellEnergy(uint32,uint64,uint64)", "c7b81f4f": "isEpochDataSet(uint256)", +"c7b8331f": "tniPerBlock()", +"c7b84f8d": "INCREASE_ALLOWANCE_WITH_AUTHORIZATION_TYPEHASH()", "c7b850dd": "whitelistedContributors(address)", "c7b87d74": "setOldTokenAddress(address)", +"c7b8981c": "withdrawRewards()", +"c7b8b098": "_encode_sol_bytes3(bytes3,uint256,bytes)", +"c7b8de73": "isSellings(uint256)", +"c7b8e25f": "totalSTBZ()", "c7b97288": "addTokenEmission(uint256,uint256,uint256)", "c7b98dec": "right1(uint256)", "c7b9bc9e": "Token(uint256,string,uint8,string,string)", "c7b9c355": "setSecondBonusPercent(uint256)", +"c7b9d530": "setStrategist(address)", "c7ba24bc": "claimAndConvert(address[],uint256,uint256)", +"c7ba47c2": "rewardAdjustmentFactor()", "c7ba9264": "KAL4Token()", "c7bb38e7": "setAmount(bytes32,uint256)", "c7bb42f7": "TEAM0()", +"c7bb6ea2": "exit(address,uint256,uint256,address[],uint256)", +"c7bbb113": "increaseBorrow(address,address,uint256)", +"c7bbc88e": "removePartner(string)", +"c7bc119d": "LandNameToId(string)", +"c7bc163b": "seriesInfo(address)", "c7bc747d": "retrieveTokenByContract(address,uint256)", +"c7bc95c2": "getVotes(bytes32,bytes32)", +"c7bc9635": "getAdresses(uint256)", "c7bce243": "Menu05()", +"c7bce850": "betsDatabase(address)", +"c7bdbb8b": "coolDownPeriodSeconds()", "c7bdbb95": "allowTransferOwnership(bool)", "c7bdcde9": "IYAKIN()", "c7be44fa": "banReferrer(address)", +"c7be495b": "ReconMomentum()", "c7be7ae3": "frozenSupply()", +"c7bea69b": "changeAddresses(address,address,address,address,address,address,address)", "c7bec318": "removeAccountAddress(address)", +"c7bef6ee": "stakesAmount(address)", +"c7befd89": "claimingTokenAdd(address)", +"c7bf98f7": "p1Balance(address)", +"c7bfb5f6": "doApprove(address,address)", +"c7c02173": "drmBatchTransferToEcosystem(address,address[],uint256[],uint256,uint256[],string)", "c7c049fc": "saleGoal()", +"c7c09074": "scoreRate()", "c7c0c5bf": "modifyMarking(bytes32,uint256)", +"c7c1448d": "TicketsPurchased(address,uint256,uint256,uint256)", +"c7c14e80": "claimRenameFeesEth(uint32)", "c7c16353": "weiToRaise()", +"c7c1bcd2": "viewMyRebaseDip()", "c7c2aa25": "WarriorsBackToHome(address,address,uint256)", "c7c2aee3": "personalCap()", +"c7c30be1": "exchangeProxy()", "c7c3268b": "setBaseUrl(string)", "c7c36959": "GubbermentOverthrown(address,address)", "c7c3b1c1": "canTerminate()", "c7c3b2dd": "setMockedTotalCollected(uint256)", +"c7c3b53f": "fees(uint256,uint256,uint256,uint8)", +"c7c3c871": "getDiscountOnBuy(uint256)", +"c7c3f4a5": "requestRandom(address,uint256)", "c7c40fbb": "addPassportLogic(string,address)", "c7c4ff46": "depositor()", "c7c54e4d": "theEBCC(uint256,string,uint8,string)", +"c7c57c1f": "mcd_spot()", +"c7c59407": "InitiatingCounterparty()", +"c7c5a7b6": "algosByCreator(address,uint256)", "c7c5f59d": "forBounty()", +"c7c5fa2d": "gggg(bool)", "c7c625ee": "rand(address)", +"c7c68870": "createMythicMonster(string,address,address,uint256)", "c7c6939c": "LongPlace(address[2],uint256[8],uint8,bytes32[2],uint256)", +"c7c707c4": "holderExist(address)", +"c7c72685": "setBotLimit(uint256)", "c7c7322b": "testCantInitiateIncorrectSale()", +"c7c7c5ef": "updateRoundStatus(uint16,uint8)", +"c7c7dd26": "to128(uint256)", +"c7c7e15b": "sNft()", "c7c7e9ea": "getAllowed(address,address)", "c7c806cb": "ambassadorAddress()", "c7c80f02": "teamLockUp()", "c7c83804": "setFinancingsAdd(address)", +"c7c88d70": "isContainerForFeeWindow(address)", "c7c8b07b": "KillSwitch()", "c7c8c424": "ownersEth()", "c7c8ff35": "getNeutralMutationCost(uint8)", +"c7c9dde6": "giftAmount(address)", "c7ca07bb": "QuantityAvailable()", +"c7ca6daa": "paintings(uint256)", "c7cb94e3": "GenPlayerRatio(address,uint256)", "c7cbb9c8": "_createArea()", "c7cc3743": "addContractAddr()", "c7cc4ee9": "later()", +"c7cc54d0": "sakePerBlock()", "c7cc63aa": "getBetTitle()", +"c7cc6b3f": "lpTokensStatus(address)", +"c7cc8011": "ownerOnlyCreateUser(address[])", +"c7ccb1ea": "wireInvestInUSD(address,uint256,uint256)", "c7ccc559": "upgrade_cap()", "c7cd31d5": "setLLV_edit_23(string)", +"c7cdea37": "withdrawETH(uint256,uint256)", "c7ce060b": "publicDeductDeposit(address,uint256)", "c7ceac99": "calculateBattleBoost(uint16,address,address)", +"c7cec27d": "confirmAdaptionRequest(address,int256,int256,int256,uint256)", "c7cec7f8": "versions(bytes32)", "c7cefbf1": "IDH()", "c7cf28fe": "canClaimTimeout()", "c7cf6a2a": "LJSToken()", "c7cf8075": "getAvailableDevFund()", +"c7cf989d": "destorySupply()", +"c7cff367": "cancelOrder(string,uint8)", "c7d044be": "AutoChainToken()", +"c7d0749e": "MIN_XPER_AMOUNT_TO_PURCHASE_ARCHER()", +"c7d086c1": "numberOfOtherWindows()", +"c7d0b70e": "FreezeTokens(uint256)", +"c7d0bbfd": "massUpdateAreas()", "c7d128d1": "readTotalNumberOfUserPurchases(address)", +"c7d14237": "transferToFeeCollectionAddress(address,address,uint256,address)", +"c7d17fd1": "endPublicSale()", "c7d20f82": "addMeterpoint(address,int256)", "c7d22929": "betOpen(uint256,string,string,string,string)", "c7d26e90": "getAccessoryClaims(uint64)", +"c7d29266": "setTestResultC_danger(address)", +"c7d365b0": "init(address,uint8,uint256,uint256,uint256)", "c7d4f68e": "getRobotForUserByIndex(address,uint256)", +"c7d55057": "deleteSuperMan(address)", "c7d586c9": "provideProofOfWork(uint256)", "c7d5b6f1": "cancelSellOffer()", "c7d5c0af": "XVOTOKEN()", "c7d5d171": "costRecharge(uint256)", "c7d5dd36": "Factory(address,address)", +"c7d61ba5": "theMeaningOfLifeIs(uint256)", +"c7d69982": "voteDown(uint256,uint256)", "c7d6e988": "fundOwnerWallet()", "c7d6faf1": "easyPropose(address,uint256)", "c7d77970": "registerNameXaddrFromDapp(address,bytes32,address)", "c7d7b5a6": "fillOrder(address[5],uint256[6],uint8,bytes32,bytes32)", +"c7d7f33b": "getNFTtype(uint256)", +"c7d88b05": "instantBalance(address)", +"c7d91e2f": "_bzb()", +"c7d936ec": "pancakeProfile()", "c7d96304": "canMateWithViaAuction(uint256,uint256)", +"c7d9be66": "_transferFromExcluded(address,address,uint256)", "c7d9f4d1": "transferableBalanceOf(address)", +"c7da11f4": "sellerAcceptsToken(address,address)", "c7da93b7": "specialTransfer(address,uint256,uint256,uint256)", "c7daae0a": "firstFreeAddressIndex()", "c7dab436": "vestingTime()", @@ -114492,46 +209483,82 @@ "c7db3342": "getCurrentRoundKey()", "c7dbbc47": "nextTicket()", "c7dbc2be": "minimumPodSize()", +"c7dc03f9": "_EIP712_DOMAIN_HASH_()", +"c7dcd0ab": "_getAdminActionHash(uint160,uint256)", +"c7dd4008": "PERCENT_STEP4()", "c7dd4b4f": "gameID()", "c7dddf0f": "itemHistoryOf(uint256)", +"c7ddfb00": "setPairActive(address,address,uint48,uint256,bool)", "c7de2d13": "WithdrawToken(address,uint256,address)", +"c7dea2f2": "claimPayment()", "c7dea777": "areOldMiningKeysVoted(uint256,address)", +"c7ded66d": "emergencySell(address)", "c7deda22": "Doug()", "c7df0a90": "all_eth()", "c7df9054": "getBuyUnitsInformations()", "c7dfabcc": "Buy(uint8,string)", +"c7dfea55": "testCalculateInterestIndex_BlockDeltaRatePlusOneOverflow()", "c7e04670": "publicSaleTokenPrice()", +"c7e061bb": "slashWalker(address,uint256,bool)", "c7e0635d": "AGENT_STATUS(bytes32,address)", +"c7e06bb0": "trc20Address()", "c7e09d9c": "getSides(uint256)", "c7e12723": "Erc20Test(string,string,uint8)", +"c7e1ffe3": "priceManager()", "c7e210c3": "optionPoolMembersLockTotalOf(address)", "c7e22ac4": "setOracleGas(uint256)", +"c7e236cd": "mintInvest(address,address,uint256)", +"c7e27bd1": "_finalizeCommit()", "c7e284b8": "getTimeLeft()", "c7e293d9": "allocateFunds(address,address,uint256)", "c7e35a5c": "LOCK_START()", +"c7e38658": "effectiveBuyAmount(uint256,uint256)", +"c7e3af6b": "pegIn(uint256,address,string,bytes)", "c7e3b6e8": "airdropAndVault()", "c7e3ff4b": "pregnantMonsters()", "c7e40b3a": "StatXCoin()", +"c7e410b4": "nextDate()", "c7e416c5": "LOG_SuccessfulSend(address,uint256)", +"c7e42b1b": "withdrawErc20(address)", +"c7e48ae4": "ETHER_UNIT()", +"c7e4e8c9": "AuthorizedUserChanged(address,bool)", "c7e4f453": "TokenFactoryImpl(address)", "c7e50dc9": "isLOC(address)", "c7e52480": "convertYourTokens()", +"c7e548a6": "stakeNKCM(uint256,uint256)", "c7e56740": "_getIndex(address,address)", "c7e58644": "getSharesCount()", "c7e59334": "toggleAttachedEnforcement(bool)", "c7e5fc3b": "GlobalTechToken()", +"c7e61199": "getInTokenBalanceForWithdraw(address)", +"c7e617d0": "halfLifeRate()", "c7e67360": "GAS_BUFFER()", "c7e6926e": "_airdropTotal()", +"c7e6bda0": "removeAtIndex()", "c7e6d04f": "ownerConfig(address,uint256,uint256)", +"c7e708a0": "getTotalReferReward()", "c7e73adf": "getParticipantSource()", +"c7e772ed": "claimDividends(address)", +"c7e8001c": "changeCRate(uint256)", "c7e83451": "matchMultipleOrders(uint64[],uint64[])", +"c7e87213": "ethBondOracle()", "c7e92738": "MicroBTC()", +"c7e96b51": "harvestAllMetal(address)", "c7e975b8": "partner2_voted_update_marriage_status()", +"c7e97f5d": "upgradeLevelHolding(uint256,uint256)", +"c7e98a10": "valuePoolVestingDays(address)", "c7e9aaaf": "_isSiringPermitted(uint256,uint256)", +"c7e9cc51": "AxieRetired(uint256)", +"c7e9d141": "setWhiteListCost(uint256)", "c7ea07bb": "SealTokenSale(address,address,address,uint256,uint256,uint256,uint256)", "c7ea8a68": "EOSToken()", +"c7eaa0eb": "useTransfer(address)", +"c7eb222b": "setCollateralBalance(uint256,uint256)", +"c7eb5bd9": "redeemCollateral(bytes32,uint256)", "c7ebc8fe": "getWinnings(address,uint256,uint256)", +"c7ec7086": "retrieveV()", "c7ed1e86": "getNoOfMsgs(address)", +"c7ed3ce3": "withDrawMR(uint256)", "c7ed4555": "DepositSlot(address)", "c7ed4d8c": "distributeVM(address[],uint256,uint256)", "c7edaf33": "TheGoDgital()", @@ -114539,26 +209566,42 @@ "c7ee005e": "prime()", "c7ee1c4e": "getPreviousSeed()", "c7ee98c2": "trustedBurnTokens(uint256)", +"c7eec866": "NSEC3DigestUpdated(uint8,address)", "c7ef47d7": "isKill()", "c7efa689": "getSaleDay(uint256)", +"c7efb0e1": "checkUserPack1Exist(address)", "c7efb162": "setup(address,address,address,uint256,uint256)", "c7efb8ab": "ledger(address,bytes32)", +"c7efd1a0": "tokenV3()", "c7f04e65": "purchase(uint32)", +"c7f12b27": "binanceCoin()", +"c7f12fc0": "newAd(uint256,string)", "c7f132d5": "QuarterCoin()", "c7f18d5b": "updateData(uint256,uint256,uint256,uint256,uint256,bytes,bytes)", +"c7f1b13c": "littafi(uint256)", +"c7f1def8": "balanceOfKKCRVinkTUSD()", "c7f1f06f": "GetEmail(uint256)", "c7f24b11": "getCCH_edit_8()", +"c7f2746a": "DeadlineExtended(uint256)", "c7f2c3d9": "EasyInvest10()", "c7f2e6af": "Contribute(bytes20)", "c7f300ed": "CrowdSale_ModifyEndDate(uint256)", "c7f3166d": "getBetInfo(uint256,uint256)", "c7f31f1c": "HandWins(address)", +"c7f34ed1": "index_of_property_in_array(address,uint256)", "c7f36010": "setupClaim(uint256)", "c7f423c7": "setLeaf(uint256,bytes32)", "c7f42c64": "battleFee()", "c7f43b57": "TIER2_CAP()", +"c7f44e53": "setDefaultProduct(uint256)", "c7f46dea": "testRewardBS(bytes32)", +"c7f49b87": "close_tranche_sell(uint256,uint256,uint256)", +"c7f4b721": "Rejected(address,uint256,uint256)", +"c7f5ebc6": "_transferFund(address,uint256)", "c7f5f1e8": "DistributeNextNTokens(uint256)", +"c7f614ea": "processMigration()", +"c7f65ce9": "usersActiveM3Levels(address,uint8)", +"c7f6923c": "r(bytes32,uint256)", "c7f6f40c": "updateKYCStatus(uint256)", "c7f6fa60": "EIDTokenERC20()", "c7f71103": "futrMiner()", @@ -114567,128 +209610,247 @@ "c7f7be5c": "setGxCoinContract(address)", "c7f84605": "___upgradeTo(address)", "c7f86c37": "withdrawFundsRP()", +"c7f89159": "_snatchRate()", +"c7f8addd": "checkProp(uint256)", "c7f8fe65": "getBalanceReleased()", +"c7f95359": "viewMyDividend(address)", "c7fa1d47": "Hedge()", "c7fa52de": "setRegistryAddr(address)", "c7faa88d": "collectProfit()", +"c7fac1ec": "setCauseIsActive(uint256,bool)", "c7fb117c": "depositCancel(uint256,uint256)", +"c7fb647e": "Revoke(address,bytes32)", "c7fb9aab": "displaymultisig()", "c7fbad27": "revealStart()", +"c7fc69a2": "_tokenIn()", +"c7fc93ec": "grantEditor(address)", "c7fc9ace": "WorldNode()", "c7fccd3f": "isAuthorizedForToken(address,address,address)", +"c7fd30e3": "migrateAssets()", +"c7fde002": "startExchangeProx()", "c7fde81f": "changePOI(address)", "c7fe11d4": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", +"c7febe30": "setTreasuryZap(address)", "c7fee63e": "updateRate()", "c7ff1584": "isHalted()", "c7ff1b60": "maxCapReached()", "c7ff2086": "getPropertyColorsOfRow(uint16,uint8)", +"c7ff9aa7": "imageEventActual(bytes)", +"c7fff831": "communityTakeHomeRate()", "c8004293": "lastKnownPropertyAddress()", +"c800756f": "addTimestamp(bytes32,uint32)", "c80094b3": "testEquals()", +"c8009c5e": "_invite1()", +"c800d582": "addProfitAccount(address)", +"c80104f7": "marketingLockedValue()", "c8016c85": "MAIN_SALE_BONUS_PERCENTAGE_PHASE1()", +"c8019a18": "RewardRef(address,uint256)", +"c8019fb1": "setMaxExpirePeroid(uint256)", +"c801e067": "rVolWeekly(address,address,uint256)", +"c8023af4": "liquidationFee(address)", "c8027210": "Malaysia370()", "c8028bee": "auditorRegistry()", +"c80329e8": "updateAnySetInitializable(bool)", +"c8032a84": "tokensBalance()", "c803486b": "getAvailableFunds(address)", "c803ae2a": "kycComplete()", +"c803bfff": "getRegLimit(address,address)", "c803f981": "care(uint256)", "c8045941": "changeDescription(string,string)", "c8046827": "registerBurn(uint256)", +"c804a4e7": "fiveReserveTimeLock()", "c804a58e": "toggleRefunding()", +"c804beab": "AirDrop(address,uint256,uint256)", "c8051885": "isWithinContributionRange()", "c805801c": "VoipTken()", "c805914a": "setRespectRequiredToRecruit(uint256)", "c805b6bc": "PRESALE_TOKEN_HARD_CAP()", +"c805c8ad": "bountyAirdropTokensAddress()", +"c805cd93": "ChangedManager(address,bool)", +"c805e909": "integrationAdapterIsRegistered(address)", "c805f68b": "setRelay(address)", "c806286d": "setFreeze(uint256,bool)", +"c8062b1e": "PayoutAllValidBondPayouts(address)", "c80667e3": "appendUintToString(string,uint256)", "c80675de": "sendDiamond(address,bytes32,string,bytes16,uint256)", +"c806a8b0": "strengthOf(uint256,address,uint256)", "c806a91d": "TOKEN_TOTAL_CAP()", +"c806d471": "notionalAprilBestYield()", +"c806dcc6": "endCrowdSaleRoundFour()", "c80743c5": "maximumTokenAmount()", "c807be58": "endTimeSale2()", "c807cb02": "Uninjected(address)", "c807e645": "JECKAirdrop()", "c8081bd2": "requestMutualJobCancellation(bytes16,address,address,uint256,uint256)", +"c8084dd1": "match_bonus()", "c8088830": "_canPayOraclize(uint256)", +"c8089396": "updateScoreEq(uint256)", "c808cf86": "exchangeHelenium(uint256,address)", +"c80914cf": "setFeeToDistribute(uint256)", +"c80916d4": "handler()", +"c8092659": "MAXIMUM_VETO_QUORUM()", "c80944e5": "buildRight(address,uint256)", +"c8096ff6": "CheckTokensFromPair(address)", +"c8099adf": "flipPancake(address,address,address,address,address)", "c80a589b": "withdrawTokenBalance(uint256,address)", +"c80a5ba6": "proposalStartBlock(uint256)", "c80b05e1": "isViolated(address)", +"c80b11b7": "LogPayInterestForPosition(bytes32,address,address,uint256,uint256,uint256)", "c80bbb17": "ReserveFund()", "c80becb6": "enablePreSale()", "c80c14a5": "getBankBalanceWEIInfo()", "c80c28a2": "getNumberOfParticipants()", "c80d3694": "saleWeiCap()", +"c80d4b8f": "FELONY_THRESHOLD()", +"c80d9222": "isDurationExpired(uint256,uint256)", "c80db88c": "getSchellingExpansion(uint256)", "c80e0ddd": "saveCode(uint256,string)", "c80e3e1e": "SingularityTest23()", "c80ec522": "withdrawn()", +"c80edca4": "twiceProj(uint256,uint256,uint256)", +"c80f021a": "updateBannerContent(uint256,bytes32)", +"c80f3c8a": "addExisitingContributors(address[],uint256[])", +"c80f4541": "LIQUIDATION_ENABLE()", +"c80f5ae3": "s_fe()", +"c80f8943": "buyStage(uint256)", "c80f9a4f": "transferPokemon(address,address,uint256)", +"c8104e01": "getPriceAtIndex(uint256)", "c81050e6": "checkBranchInEpisode(uint256,uint256)", +"c810a539": "recordUTXOSweepMinerFee(uint256,bytes32)", +"c8111f27": "tiers(address)", "c8117b5b": "extractBalanceOfLength()", "c81196da": "numberOfMilestones()", +"c811cbcd": "usedRwCount()", "c8135ba1": "bids_decrypted_count()", "c813c30e": "testThrowSomething()", "c813e02e": "_isLeapYear(uint16)", +"c81415e9": "postcomments(uint256,uint256)", "c814324c": "timeBought(address)", +"c814429f": "activeSlot_ap4()", "c81450a0": "RaffleResult(uint256,uint256,address,uint256,uint256,bytes32)", +"c8147865": "getSubscriptionHash(address,address,address,uint256,uint256,uint256,uint256)", "c814864c": "CreateChips(uint256,uint256,uint256,uint256,bool)", "c8149cbc": "setMigrationLock(bool)", +"c814e314": "encode144(uint144)", +"c81533a4": "pool0()", "c8159d70": "Seriality()", +"c815c10b": "setNonWhitelistedDustThreshold(uint256)", "c815c9ef": "TerraEcoToken()", +"c815d107": "tokenScarcityObligations(address)", "c8162068": "setTeamAddr(address)", "c8162497": "BETX()", +"c81635a2": "setDAOvotecontract(address)", "c8166a8a": "Question()", +"c816727c": "withdrawByTokens(address)", +"c816841b": "uniswapPair()", "c817d75d": "Transfer(address,address,uint256,uint256,uint256)", "c817e84d": "addWhitelisted(address,bool)", +"c8182af0": "challengerCache(bytes32)", "c8187cf1": "determineReward(uint256)", +"c818915e": "setIsRefunding(uint256)", "c818acf7": "createCloneToken(address,uint256,string,uint8,string,bool,address)", +"c818d718": "setSecureHealth(uint256)", +"c818e2f0": "progressUnstakeWithProof(bytes32,bytes,uint256,uint256)", "c818faec": "updatedAt(uint256)", +"c819053d": "issueDivident(address[],uint256[])", +"c8193255": "toUint32(uint256)", "c8193841": "addSoftwareVersionRecord(bytes32,bytes32,uint256)", +"c81982e8": "getDollarUpdatedPrice()", +"c8198a37": "sellingcontract()", "c8199231": "createContractTot(string,uint256)", "c8199826": "buyTickets()", +"c819d388": "unstakeLP()", "c819f6e9": "levToken()", +"c81a27ad": "verifyExitProof(bytes32,uint32,address,uint16,uint128,uint256[])", "c81a5455": "Milestone_CloseTheIco(string)", "c81a7d10": "CurryCoin()", +"c81b1662": "SYSTEM_REWARD_ADDR()", +"c81bcdeb": "newUser(string,string,string,string)", "c81bd106": "approveNewOwner()", +"c81bde15": "getMyContracts()", +"c81bf2b1": "adminCanWithdraw()", +"c81c1743": "countBonus_Elite()", +"c81c198c": "pIDPlayer_(uint256)", "c81c590d": "getEtherAmount(uint256)", "c81caae7": "acceptMember(address,string,string)", +"c81cb523": "yfi3()", "c81cbc5c": "MIST()", "c81cf764": "getAmountFromBuyer(address,address)", "c81d1d5b": "getPunk(uint256)", +"c81d56be": "_claimMembers(address)", +"c81db5ab": "lastNFTindex()", "c81e05ad": "KODO()", "c81eccda": "getTokenId(bytes)", "c81ede67": "pollBurnQty()", "c81f49cb": "getTotalPaid(address,uint256)", +"c81fea11": "rand_a()", +"c8207a09": "oldZaiSwapped()", +"c820f146": "initialize(string,string,uint8,address,address)", +"c8216241": "approve_449(address,uint256)", "c8216f33": "getLineUpEnable_default()", +"c821861b": "getIntervalsForWindow(uint256,uint256,uint256,uint256)", +"c821c971": "MAX_PROMO_PRIMES_PER_GENERATION()", +"c821f19e": "totalSmartFunds()", "c8226e61": "withdrawEgereg(uint256)", "c822bd3d": "transferCost(bytes16,uint256)", "c822d7f0": "isRegistered(string)", +"c82337d8": "setBonusPoolWeight(uint256,uint256)", "c8234ac8": "createTokenUri(uint256)", "c82467c9": "ComputeTokenPrice()", "c8248f8d": "PreICO(address,address,address,address,address)", "c824a222": "auctionsOf(address)", +"c824c8b5": "evtBuyKey(uint256,address,uint256,uint256)", "c82531a3": "createAuction(uint256,address,uint256,uint256,uint256,address)", +"c8256cfe": "specialcheckWithdraw()", +"c825798a": "getTransferTimes(uint256)", "c825a939": "fundingRatePredictionBonusPoolInIBC()", +"c825ec97": "executeOrder(address[4],uint256[8],uint8[2],bytes32[4])", +"c826040e": "forK33perholdersv1(address)", +"c82655b7": "batchDeposit(bytes,bytes,bytes,bytes32[])", +"c8268604": "unstakingBalanceOf(address)", +"c8271b95": "checkAssetPayoutToken(bytes32,address)", +"c8272428": "getProgramFees(address)", "c827a7bb": "testExternal(uint256[20])", +"c827fc8a": "yourUNICBalance(address)", "c82829e0": "setSoftHardCaps(uint256,uint256)", "c828371e": "getStartTime()", +"c8283bf2": "setZuniBadge(address)", +"c82878c1": "pageEthers(uint256)", +"c8287909": "getsenderForB()", +"c82899ea": "rebalance(address[],uint256,uint256,address)", +"c828b82b": "issueAttribute(address)", "c828e6ee": "getCurrentlyClaimableAmount(address)", "c8290efd": "zen()", +"c8291d84": "childChainManager()", "c8291dbd": "increment(address,address)", +"c829335f": "grainBackerToken()", +"c829410d": "viewReferral(address)", "c829958c": "isImported(address,address)", "c8299b10": "gotransfer()", "c8299ed8": "afterClaim(uint256,uint256,uint256,uint256,uint256)", "c829b0e3": "MAX_LAYERS()", +"c829e356": "bids_burned(uint256)", +"c829e4fa": "isExsitLocked(address)", "c82aac47": "searchByTag(bytes32)", "c82b8ec5": "EtherDaruma(address,address,address,uint256,uint256,uint256)", "c82bb37b": "PotSplit(uint256,address,bool)", +"c82bb629": "setOpenRansom(uint256)", "c82bd265": "ContributionAccepted(address,uint256,uint256)", "c82c73c1": "isAddressSet(address)", "c82cd463": "transferFundkeeper(address)", "c82cd8e6": "ControllerRetired(address)", +"c82d4311": "inrateDayCount(bool)", +"c82d5744": "changeSetting(uint64,uint64,uint256,uint256)", +"c82d64f3": "componentIssueHook(address,uint256,address)", +"c82d762c": "updateSubmissionBlock(uint256)", "c82d81dd": "GICAToken()", "c82db402": "ownerSetOraclizeGas(uint256,uint256)", +"c82dcf8f": "viewAirdropROBX()", +"c82ed973": "luckyGenes(uint256)", "c82f2418": "decodeTokenOrderTokenAndIsBuy(uint256)", +"c82f3828": "swapv2v3()", "c82f8d9e": "distributeToken(address,address,uint256)", +"c83062c6": "free(bytes32)", "c83068eb": "setPre(uint256,uint256,uint256,uint256,uint256)", "c8306c89": "set_arbits(address,address,uint256)", "c830b89d": "ReleaseDateChanged(address,uint256)", @@ -114698,277 +209860,515 @@ "c831391d": "getPoolOverlapSize()", "c83261bd": "claimTokenFor(address)", "c83281e9": "UserAccount(bytes32,bytes32,bytes32,bytes32,bytes32)", +"c8329711": "stabilizerPools(uint256)", "c832b00d": "limitDateCrowdWeek3()", +"c8333bb2": "TOTAL_REWARD()", "c8335143": "AlekseiZaitcevPrivateSale(uint256,uint256,uint256,address)", "c8335ba0": "setInitSize(uint256)", "c833d7b1": "BigbomContributorWhiteList()", +"c83437e2": "investorCap()", "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()", +"c836fa0a": "exchangeOnBehalf(address,bytes32,uint256,bytes32)", +"c83715e0": "onTokenPurchase(address,uint256,uint256,address,bool,uint256,uint256)", "c83780a2": "crowdsaleCounter()", +"c837e8e0": "CapChange(uint256,string)", "c838ccb6": "getDelegates()", "c839008e": "setPixelPropertyContract(address)", "c8391142": "j1Timeout()", "c83923c5": "getMetadataChannel(string)", "c83927a0": "pdo()", +"c839380b": "getRPunk()", "c8393ba9": "initiateWithdrawal(address,uint256)", "c8398947": "currentStateActive()", "c839c0de": "CreateVersion(bytes,string)", +"c839fe94": "tokensOfOwner(address,uint256,uint256)", +"c83a1c2d": "whitelistLiquidityProvider(address)", "c83a7e94": "AEToken()", +"c83a9417": "RoundMyHeart(uint256,address)", "c83a9472": "deathData_a11()", "c83a981c": "openPool(uint8)", "c83abb40": "registerNotary(address,string,string,string)", "c83ac557": "ChangeCommunityHolder(address,address)", +"c83ad8aa": "swap(address,address,uint256,uint8,bool)", "c83be888": "single_move(uint256,uint8,uint8)", +"c83bff84": "createBC(string,uint256)", "c83cb16c": "_not(bool)", +"c83ce00a": "treasurySend(uint256)", +"c83ce3c8": "ethAutoHotWallet()", +"c83da635": "addLock(address,uint256)", +"c83dd231": "Factory()", +"c83e2f2d": "stakingDirectory(uint256,address)", "c83ea900": "soldDET(address,uint256,bytes32)", +"c83ec04d": "sellVoucher_new(uint256,uint256)", "c83ec89d": "tradeWithOutputFixed(address,address,address,uint256,uint256)", +"c83ecf10": "addManufactory(address)", +"c83ee0b3": "TOTAL_SPACE_ON_NODE()", +"c83fae91": "addToBlocklist(address)", +"c83fb932": "quarterlyRewardPeriod()", +"c83fc86a": "pendingReleasableDevFund()", +"c83fccd0": "distributeWeekly(address)", "c8401567": "betbucketTwo()", +"c840a062": "changeCRVHandler(address)", "c840b187": "goodsNotReceived(uint256)", +"c8412d02": "premiumPercent()", +"c8415b16": "buyerUpload(string,uint256)", "c841df4f": "getMonsterStats(uint256)", "c8420d2f": "CollectibleIndex5()", "c8422c2d": "boostrapParty(address,address)", +"c84242b1": "increaseReserveBalance(uint256)", +"c842897a": "unwrapWBsc(uint256)", +"c842ab6c": "GetBonds(address)", "c8435ba2": "levelOneTokenNum()", +"c843697a": "hashBiometricTemplates(string,string,string)", "c843c0c8": "getMyAlien()", "c8443fad": "revokeExchanger(address)", "c8449b65": "Gold()", +"c84533b4": "_ensureCurrentPeriodFees()", +"c8457387": "increaseAuthCount(address[],uint256[])", +"c84574b8": "unlinkCryptoAccount(uint256)", "c84640f5": "addtotalCardValue(uint256,uint256)", "c846690b": "initialiseToken()", "c847259c": "changeClub(address)", "c84748f9": "returnFrozenFreeFunds()", +"c8474ce5": "updateRewardLane(address)", +"c84767a3": "kindPerBlock()", +"c8481239": "zeigePoolDaten(uint256,uint256)", "c848a0bc": "notifySellToken(uint256,address)", +"c848c54a": "recommendedapi(address)", "c848fab7": "SeeleToken(address,address,uint256)", "c84920cb": "Ubisoft()", +"c849354c": "yieldnPerBlock()", "c84a6140": "BackdoorBurner(uint256,string,uint8,string)", +"c84a6353": "contractStep()", +"c84a705c": "setSwapProxy(address)", "c84a8766": "setRegionImageDataCloud(uint256,uint256,uint256,string)", +"c84aae17": "getBalances(address)", "c84aba9b": "demurrageBalance(address,address)", +"c84ae2bb": "newListProposal(address,uint256,uint256)", "c84b0555": "token(address,string,string)", "c84b1ce7": "PUBLIC_RESOLVER_LABEL()", +"c84b27d2": "updateType(string,uint256)", "c84b470f": "SALE_PERCENTAGE()", "c84ba84a": "finishedPurchase()", +"c84bff90": "totalDFLInvested()", "c84c009b": "Operated(address)", "c84c5963": "setPauseCutoffTime(uint256)", "c84c692a": "isTradableFciInSession()", +"c84c9e45": "whitelistedSpawner(address)", "c84c9ef5": "LastName()", "c84ca867": "getCurrentPriceAttoTokensPerWei()", "c84cda0f": "setRate(string,uint256)", +"c84d1384": "fundigGoal()", +"c84d3b1e": "_deposits_eth(address)", "c84d56e0": "setRealmSale(uint256,uint256)", +"c84df1e7": "rolloverAndAddLiquidity(address,uint48,address,uint256,uint256,bool)", "c84eb9e5": "invest(address,bytes)", +"c84ed836": "OverSoftCap(address,uint256)", "c84f5d6f": "RowanCoin()", +"c84f9ffb": "PublishResult(uint256)", "c850029e": "returnTokenOwnership()", +"c8508939": "beamBancor(address,address,uint256)", +"c8509d81": "handleFailAckPackage(uint8,bytes)", +"c850ce3e": "teamPlusLiquidationReserve()", +"c8512b29": "showbnum(uint8)", +"c851318c": "investmentContracts(address)", "c85147c5": "mediumCount()", "c8517b48": "CNDTTokenDeposit()", "c851b643": "legendsToken()", +"c851bfea": "socialClaimed(address)", "c851ed7c": "startNewVote(uint256,string)", "c8520131": "Withdrawable()", +"c85209b6": "unBlacklistSeller(address)", +"c8521df1": "queryIds(uint256)", "c85234c7": "startPreICOStage3()", "c8525c09": "unlock(bytes32,bytes32)", +"c852b24b": "verificationRequest(address,bytes32,string,string)", +"c852b3af": "changeKittyIdBeingAdvertised(uint256,uint256)", +"c8536639": "memberInfos(address)", "c853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", "c8544e81": "addGenesisPairs()", "c854db91": "vault_refund(address)", +"c854f599": "pendingBrain(uint256,address)", +"c8550134": "getTRDpendingApproval()", "c85501bb": "minThreshold()", "c855d689": "returnLongAddress(bytes32,uint8,bytes32[2])", "c855e7bb": "tokenForTeamGranted()", +"c8569d88": "getAmount1DeltaInvariants(uint160,uint160,uint128)", +"c856ec44": "prove(uint256,bool)", "c8578967": "setNewChecker(address,address)", "c857a88c": "createDataRequest(address,address,uint256,uint256)", +"c857c2d0": "BountyWalletAddressChanged(address,address)", "c8582572": "affiliateCommission(address)", "c8583ad6": "UnregisteredPrefix(string,address)", "c8583e69": "getEthUsdRate()", +"c85896f4": "getPoolPendingReward(uint256)", +"c858a3ea": "dataslot()", "c858c017": "testMsgSenderInVoters()", +"c858f5f9": "borrow(address,uint256,uint256,uint16)", +"c8590143": "inRecycleTokeneaseApproval(address,uint256)", "c859c482": "holdBalanceOf(address)", +"c859c972": "chainlinkTransfer(address,uint256)", +"c85a0f84": "priceUSDT()", +"c85ab793": "currentLeverage()", "c85aff48": "tokenNAVMicroUSD()", "c85b7941": "totalEthBankrollReceived()", "c85bb02a": "isParticipating(uint256,address)", "c85bb1f7": "_doMapAuto(address,string)", "c85bc22d": "getDefrostFactor()", "c85c11eb": "TOKEN_SECOND_PRICE_RATE()", +"c85c747b": "voterServiceEntityVotes(address,address,address)", "c85c75b2": "completeCodeUpdate()", +"c85c8925": "redeem(address,bytes32)", +"c85c93aa": "redeemIdleToken(uint256,bool,uint256[])", +"c85cafda": "updateLocked(bool,uint112,bool)", +"c85cd966": "dev_u()", +"c85cf955": "installWeaponToNFT(uint256,uint256)", +"c85d332b": "Cat15(address,uint256)", +"c85d69e8": "flshLeaderBonusBal(address,uint256)", +"c85da067": "calculateRatePerEth(uint256,uint256)", "c85dba67": "getPrefix(uint32,int256)", +"c85ddd1d": "getFinalFullTokenBalance(bytes32,address)", "c85e07b9": "stamp()", "c85e0be2": "setHost(address)", "c85e1f73": "totalRecalled()", +"c85e5efd": "changeInvestmentAssetHoldingPerc(bytes4,uint64,uint64)", +"c85e766d": "medicines(uint256)", "c85ee477": "FileCoinCash()", +"c85f6469": "RemoveLock(address)", "c85f6a80": "emission(address)", +"c85f75d3": "BuyDiscipleItem(address,uint256,uint256,uint256)", "c85fd4f8": "deployToken(string,string,uint8,string,address,bool,address)", +"c85fdbac": "expansionPercentLiquidityIncentiveFund()", "c86039da": "redeemedSupply()", "c8612b2f": "TOKENS_FOR_SALE()", +"c8616cf5": "LogNewInvestor(address,uint256)", +"c861a7fa": "badges(uint8,address,uint8)", "c861f243": "_getBonus(uint256)", "c861f3a0": "houseStake()", +"c862016d": "revenue_levels(uint256)", "c8622c24": "claim(address,bytes32)", "c86283c8": "withdrawTo(uint256,address)", "c862a134": "feePercent_()", "c8636bb9": "forbidToken(address[])", +"c8637ab2": "RatePlanRemoved(address,uint256)", +"c863a5e6": "vBNTToken()", +"c863bac1": "approveToken(address,uint256,address)", +"c864130f": "pool_top(uint8)", "c8643bc2": "MintOperationEvent(address,uint256,uint256,uint256)", +"c8644a2a": "addSigner(address,address,string)", +"c8645416": "isStaticContext()", +"c864b77b": "ethAddress(string)", "c864e760": "recordCommissionEarned(uint256)", "c865164b": "StakingPriceFeed(address,address,address)", +"c865463c": "getAddressDAI()", "c865c29b": "HopiumCoin()", "c865cadb": "setActiveValueBonus(bool)", +"c8660a32": "getRandom(address,uint256,uint256)", +"c8661e4b": "setBlockPadding(uint256)", "c86662a3": "addOwner_(address)", +"c866d071": "littContentOwnershipTransferred(bytes32,address,string)", +"c866e66c": "solid(int256,int256,uint256,uint256,uint256,int256)", +"c8670c83": "equalStringPassTest()", +"c867280a": "lockGem(address,uint256,uint256,bool)", "c86779a4": "lastBlock_v14()", "c867cccb": "Contribution(address,address,address,address)", "c867ea63": "GoldConnect()", +"c867f6ca": "setTRIPRate(uint256,bool)", "c867fa29": "BookERC20EthV1p1Factory()", "c86813a8": "PassContractorCreator()", "c8685f21": "validUsername(string)", "c868a569": "canBreed(uint40,uint256,uint40,uint256)", "c8690233": "pubkey(bytes32)", "c8691b2a": "getHistory(uint256)", +"c8695dd7": "ReleaseTokensToCalledDetail(address,address,uint256,uint256)", "c8695e59": "RPS(bytes32,address)", +"c869f61d": "hashedData(bytes32,uint256)", +"c86a3e7c": "set(uint256,uint256,uint256,bool,bool,uint256,bool,bool,uint256,bool,uint256)", +"c86a4921": "renounceOwnershipTRUEdefaultTRUE()", "c86a90fe": "sendCoin(uint256,address)", +"c86a98e2": "createSimpleMultiSigVote(address)", "c86a9dea": "isKickoffEnabled(uint256)", +"c86b6a4a": "getCurrentReqId()", "c86b7001": "randomOrgAPIKey()", +"c86c16f2": "Bill(uint256)", "c86c50f7": "changeAllowInvestment(bool)", "c86d0251": "_getTeamSupportAmount(uint256,uint256)", +"c86d4040": "tokenUSDC()", +"c86d6ae4": "savings()", "c86dca5a": "isExploring(uint256)", "c86e25d7": "tokenCreateContract()", +"c86ee10d": "_onBoardBounty()", +"c86ef5fe": "TokenBought()", +"c86f82b2": "smartFunds(uint256)", +"c86f90ce": "byte_to_bits(uint256)", +"c86fdadf": "cancelLoanBeforePrincipalWithdraw(uint256,bytes32)", "c87022d3": "startMonarchyGame(uint256)", +"c870279e": "PRESALE_GENERATOR()", "c8705544": "payAmount()", "c870ef78": "MINING_POOL_HOLDER()", "c8713608": "HELIX()", "c87158fa": "_addBlockProducer(uint256,address)", +"c87164e5": "modCampaign(bytes32,string,uint64,uint64)", +"c871a092": "getTotalSnapshotAddresses()", "c87235fd": "burnRemaining(address)", +"c8729b27": "totalPendingReward()", "c872da3c": "KIND()", +"c8730a86": "changeHDVault(address)", "c8738351": "uintFloor(uint256,uint256)", "c8744434": "lastTransferQueueIndex()", +"c87452f3": "defineOrder(string,address,uint256,uint256,uint256,string)", "c8750d8a": "testHitSoftCapPresale()", "c8756f12": "getTotalSponsorship()", "c875b1fb": "distributeBonuses()", "c875d16f": "ArthurStandardToken(uint256,string,uint8,string)", +"c8760b28": "changeStackingStatus()", "c8765ff2": "rateICO()", +"c8773af2": "sendRewards(address,uint256)", "c87744d9": "_approvedForTransfer(address,address,uint256)", +"c877583b": "setup(address[],uint256,string[],uint256)", "c8781368": "freezedMoment()", +"c87846db": "CreateAthlete(string,string,uint256,uint256,string)", "c8788134": "discountedPrice()", "c878851d": "setCreate(bool)", "c878dad9": "multiFreeze(address[],bool[])", +"c878f3c9": "infoTeam(uint256)", "c8796572": "collectFees()", +"c87974fa": "setFST(address)", +"c879b513": "acoFlashExercise()", +"c879d8c6": "debtValToShare(address,uint256)", "c87a31cd": "fillOrder(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", +"c87a3651": "isExistOrder(address)", +"c87a4740": "Revocation_Privilege_Certificate(uint256)", +"c87a737e": "getTokenExchangesCount()", +"c87a8701": "getRaiseOperatorsPending()", "c87b36ed": "disableBetting()", "c87b56dd": "tokenURI(uint256)", +"c87bda92": "WhitelistAllocationUsed(address,bool)", "c87be1af": "recoverHashSigner(bytes32,bytes)", "c87c07de": "deprecateMeleeSubtype(uint8)", "c87cfe63": "setData(uint256[])", +"c87e0337": "concatThreeStrings(string,string,string)", "c87e5613": "setMaxTokenBuyin(uint256)", "c87e8bd0": "icoRound6()", "c87f9386": "setAllItemActive(address,address,bool)", "c8804b7b": "DSC()", "c88098f2": "setParticipationFee(uint256)", +"c880ee9d": "selfdropvalue()", "c880fab1": "dragonTreasureToken()", "c8813ffd": "addToVIPList(address[])", +"c881986c": "tell(bytes32)", +"c881a169": "getAdresses()", "c881b3c0": "AllowedGasPriceUpdated(uint256)", "c88215e7": "calculateExcessBalance()", "c882acc8": "deleteMemberOfGroup(address,uint256)", "c882ee8c": "testUint(int256,uint256)", "c882ef92": "GameOpened(uint256)", "c8830ddf": "ECryptoToken()", +"c8833434": "unstage(uint256)", "c883346e": "_getProviderIsForRent(uint256)", "c8833f56": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[2])", +"c883bfd2": "safeApproveToken(address)", "c883d3fa": "addMappingForPlayerIDs(uint256,uint256,uint256)", "c88449a1": "_getTransferFeeAmount(address,uint256)", +"c884ef83": "claimed(address)", "c8852b5b": "getBirthCut(uint256)", +"c8852bf3": "init(address[],address[],address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c8857dcd": "setOperateMode()", +"c8858703": "setStakedContractCurrentCommissionIndex(address,uint256)", "c885bc58": "withdrawReward()", +"c885ca80": "Initialized(bytes32,uint256)", "c885e92d": "contlength()", +"c88601cf": "fsms(bytes32)", "c8860f41": "getWinningChoice(uint256,uint256)", "c886594d": "getNodeEnabledStatus(address)", "c8865c0e": "allocated24Months()", "c886ec0d": "getTreasureProbabilityType(bytes32)", +"c8871e85": "_claimPeriodForBzbReward()", +"c88721f4": "_startRound(uint256)", +"c887b06c": "addrPriceBetting()", +"c888f573": "PUREImage()", "c888fafd": "bankerDepositPer()", "c888fcc3": "getPollResult(uint256)", +"c88934ca": "setSZOToken(address)", "c8894a0c": "WMToken(address,uint256)", "c88961da": "createKingdom(string,address,address,address)", "c88996d6": "MessageCallTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", "c889e0de": "finishAirdropBy0Eth()", +"c88a5e6d": "deal(address,uint256)", +"c88a898e": "addRecipientAndSetReward(address,uint256,uint256)", +"c88b412e": "addShortableSynths(bytes32[2][],bytes32[])", +"c88b4ae4": "setBondTerms(uint256,uint256)", +"c88b4d09": "rewardEarned(address,uint8)", +"c88b56b3": "cdcPurchaseV(address)", "c88b675b": "setMaxAvailableSpot(uint256)", +"c88b7219": "token_dates(address)", "c88b77e0": "grantTeamAdvisorToken(address)", "c88b7c8e": "setConversionFee(uint256)", +"c88ba797": "_isFreshPriceUpdateTime(uint256)", +"c88bde70": "dataTransfer()", "c88bf75a": "applyRaises(uint256[])", "c88c5101": "investor_bonus()", +"c88cb1ae": "fromReferrs(address)", "c88cc6ac": "getCertification(address)", +"c88dbfeb": "systemprice()", "c88e662e": "externalSales(address,uint256)", +"c88e8b3f": "getLastBytes32()", +"c88f22a9": "setHealthRecordsDetails(string,address,string)", +"c88fa159": "setMinKeep(uint256)", +"c88fc6a0": "createThing(bytes)", "c88fd3ec": "changeIcoRate(uint256)", "c88fe1fa": "maxCapMintTransfer()", +"c89039c5": "depositToken()", "c890635a": "ownerSale(address,uint256)", +"c890d915": "setPynthetix(address)", "c890f27e": "GenChipByWeight(uint256,uint8,uint256[])", +"c8910913": "userData(address)", +"c8914edb": "isAdded(address)", +"c8915742": "FEE_POOL()", +"c8915d06": "canConfirmPropose()", +"c8918627": "gemCommission()", "c891a29d": "setEpochData(uint256,uint256,uint256,uint256[],uint256,uint256)", "c8922057": "MAXUM_SUPPLY()", "c89231b3": "mintForInvestor(address,uint256,uint256)", +"c8924fd0": "generateMachineForAddress(address,string)", +"c89261f5": "deleteLockUserInfos(address,uint8,uint256[],uint256[])", "c892693b": "setMotAddress(address)", +"c8927e6c": "reva()", +"c8929ab0": "extractAndChangeCatalyst(address,uint256,uint256,uint256[],address)", "c892cfdf": "amountRised()", "c8931355": "setONTExchangeRate(uint256)", +"c8934462": "FAILURE_NON_WHITELIST_MESSAGE()", "c893ae0b": "ptToPtwo()", "c894e1e5": "setTransferFeeRate(uint256)", "c895304b": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256,uint256)", "c89547f9": "adminSetTxFeeInviteGame(uint256)", "c89550a8": "BMICoin(address,address)", +"c8958a4b": "pendingUNIAPP(uint256,address)", "c89605a2": "DEALERWIN()", "c8961644": "unBan(address)", +"c896462d": "getInvestorLockedAmount(address)", +"c896782d": "ust()", +"c8971977": "usersX_Matrix(address,uint8)", +"c8972391": "minT()", +"c8973264": "PaymentOfTokens(address,uint256,uint256)", +"c8977132": "issueMaxSynths(address)", +"c897776f": "stakePoolCreators(uint256)", +"c89782cc": "nftJackpot()", +"c897d5a6": "productIndex()", +"c8985317": "approve_715(address,uint256)", +"c8986d7a": "getCASH_SHARE_Ratio(uint256)", "c89924da": "totalTokensForSaleDuringICO2()", +"c8992e01": "protocolByPoolToken(address)", "c8997121": "forwardFunds(uint256)", +"c899ce49": "incomePerToken()", +"c899ef0a": "rightFromPaymentCycle(address)", "c899fa77": "hodlerTotalValue3M()", +"c89a204c": "totalReserveBalance()", "c89a32ab": "releaseTargetToken(uint256)", +"c89ac510": "getRedeemRate(address)", "c89acc86": "send(address,bytes)", "c89b50c7": "credit(address[],uint256[])", "c89b7d8c": "buyCommonTTWByETH(uint256,address)", "c89b989e": "lckTokenAddress()", "c89baff5": "GoldenGate()", "c89cea99": "getMyAnts()", +"c89d5568": "registerRecipientsInfo(address[],uint256[])", +"c89d5b8b": "getAPR()", "c89d6063": "claim(bytes32,uint256,address,uint8,bytes32,bytes32,bytes32[])", "c89dcfce": "mint(address,bytes32,uint256)", "c89e4361": "delegate()", "c89e528e": "receiveCreateAuctionFromArray(address,address,uint256[],uint256,uint256)", +"c89eb562": "setBytes32Values(bytes32,bytes32[],bytes32[])", "c89ec68a": "startRecovery(address,address)", "c89f2ce4": "funds()", "c89f51ef": "createPromoRabbit(uint256,address)", +"c89f7f04": "resetgame()", "c89f8f08": "testGetController()", "c89faa72": "confirmTransferItem(address,address,string)", "c89fb5f0": "ethunpause()", +"c89fc72f": "withdraw(address,address,uint256,uint256,bool)", "c89fcf58": "setNoviceDungeonId(uint256)", +"c8a0d546": "pooIndexToOwner(uint256)", "c8a1becb": "_monthToNumber(string)", "c8a1e1c7": "sendInternally(address,uint256)", +"c8a1fc55": "unsafeTokenListener()", +"c8a23755": "biddingStatus()", "c8a2c880": "setCallStack(uint256,uint256)", "c8a2cc03": "strikersMetadata()", +"c8a2d603": "batchAddrMint(address[],uint256)", "c8a2e0bc": "addCustomerReqACC(address,address,address,address)", +"c8a2f675": "checkPoolForFunds(uint8,string)", "c8a3af72": "is111bit(uint256)", +"c8a42217": "taxRateS()", +"c8a4271f": "usdOracle()", "c8a45c44": "tokenMaturityPeriod()", "c8a48d71": "removeStep(bytes16)", "c8a4ac9c": "mul(uint256,uint256)", "c8a4c767": "kickCommitteeVote(address)", "c8a4ddc3": "resetBatches(address,address)", "c8a4e001": "EarlyPurchaseAmended(uint256)", +"c8a5113f": "getbaseMeta()", "c8a59bb6": "GrTokenTest()", +"c8a5a793": "priceIncrements(uint8)", "c8a5e6d7": "transferFundAndEndGame()", "c8a635b7": "setWeiRate(uint256)", +"c8a6af45": "arb(uint256)", +"c8a6c687": "setMediaHash(string)", "c8a6dab7": "test_tokenFreeze()", "c8a71e14": "bonusCalculationFactor()", "c8a73eca": "transferOpen()", +"c8a73f96": "setVaultPool(address)", "c8a7432f": "getPreIcoPurchase(address)", "c8a76494": "Bet()", "c8a7836e": "getFINMigrationRecord(address)", +"c8a7c8b8": "P1_TOKEN_REWARD_PERCENTAGE()", +"c8a7ef70": "promoAddr()", "c8a808d6": "avatar(address,address,uint256,uint256,bytes)", "c8a814b8": "firstSend(bytes32)", "c8a830ba": "max(uint256)", "c8a83384": "allowBurns()", +"c8a8a764": "Search(string)", "c8a8ac2e": "submit(uint256,bytes32,bytes32,bytes32)", "c8a90f76": "handlePresaleToken(address,uint256)", +"c8a9339a": "extendBookLoan(uint256)", "c8a9e841": "addCustomerFromKYC(address)", +"c8aa2c56": "addRewardBalance(address,uint256)", +"c8aa999a": "finishAddActivePool()", +"c8aadcfc": "addFile(string[])", "c8aafbc3": "NodeHash()", +"c8ab6017": "userSmallRoundkey(uint256,uint256,address)", +"c8ab84d8": "marketOfferCreate(uint256,uint256)", +"c8abe2be": "new_Reco(int256,uint256,string)", +"c8ac65c0": "approve_675(address,uint256)", "c8ac7014": "updateMerchantByAdmin(address,string,string)", "c8ad27e6": "finishPre()", "c8ad9645": "InactivityHolderResetBalance(address)", +"c8add11f": "getBorrowIndex()", "c8aded5d": "setDiscounts(uint256[],uint256[])", +"c8ae070f": "addValidPluginContract(bytes32)", +"c8ae2ad4": "emergencyWithdrawFarmingToken(uint256,bytes)", "c8ae8774": "_startMegabox(uint256)", "c8aef513": "preSendTTC()", "c8aeff39": "isMarket()", "c8af1538": "fallbackPayout()", "c8af46b4": "canAnyoneBurn()", +"c8af9b2d": "horseys(uint256)", +"c8afb8a9": "erc20Bank()", "c8b08125": "tokensRemaining()", "c8b0e68d": "getCEO()", +"c8b1031a": "registerToken(uint256,bytes)", +"c8b11624": "setStateAndPayTokenWithConsumer(uint256,address,uint256)", +"c8b18a48": "getScaleAmount(bool,address)", "c8b18b5b": "oneMonth()", "c8b19fa8": "ioxToken()", "c8b1a635": "pricePerCoin()", +"c8b20152": "forcedBurn(address,uint256)", "c8b21f18": "distributionuserFinished()", "c8b26773": "startEnrollment()", +"c8b295f8": "stage0()", "c8b2ccba": "addStrand(uint256,address,bytes32,string)", "c8b32089": "TokenLiquidityMarket(address,uint256,uint256,uint256)", "c8b342ab": "getBid(address)", @@ -114979,179 +210379,340 @@ "c8b4c5b8": "MarketToken(uint256,uint256)", "c8b4eb6e": "withdrawPresale(address)", "c8b52bfb": "ChangeCost(uint256,uint256)", +"c8b53254": "getThreeAthletesRunSoon()", "c8b56bda": "unregister_contract(bytes32)", "c8b5da66": "pressButton()", +"c8b635ea": "YearEndClearance(uint256,uint256)", +"c8b68672": "withdraw(address[],address[])", "c8b6a463": "ASUT()", "c8b70559": "_endContestIfNeeded()", +"c8b7a13f": "maxteamrewardrate()", "c8b7c3ee": "MITCoin()", "c8b7e8c3": "testMakeBet()", "c8b82220": "registerNameIP(string,string)", "c8b91531": "MINOR_VERSION()", +"c8b94d69": "candidatecount()", +"c8b97f71": "file(bytes32,bytes32,string)", +"c8b9bcd1": "ivtToken()", +"c8ba6c87": "_tokenContractAddressToResourceID(address)", "c8bb32e0": "updatePosition()", +"c8bb4dd5": "proposalForVotes(uint256)", "c8bb73ef": "testGetBitsFailIndexOOB()", "c8bb7d51": "unitRareGrowth()", "c8bc2452": "LuJiaZuiToken()", "c8bc429a": "removeDividendPathway(address,uint256)", +"c8bc6925": "imageHashURI()", "c8bc6fa0": "maxCapEth()", "c8bd14ef": "totalInvSupply()", "c8bd1d13": "VERIME(address)", "c8bd3782": "OsherCurrentICOPrice()", +"c8bd6be6": "get_reward_token()", "c8bdbfb6": "withdrawUnsoldTokens()", "c8bdc0c7": "RevokeDOT(bytes32,bytes)", +"c8bdd138": "setDateICO(uint256,uint256)", +"c8be6b9b": "mintCards(address,uint16[],uint8[])", +"c8be76c1": "Payout(uint256,uint256,uint256)", +"c8bed5f6": "depositedDAI(address)", "c8bf3388": "totalIRCAllocated()", +"c8bfef77": "dailyRewards()", "c8bffa93": "tier1End()", +"c8c00c53": "retrieve(uint256[])", "c8c01a55": "request(address,uint256)", "c8c08a89": "_isOfficialApps(address)", "c8c0b288": "bountyFundManager()", "c8c0cbbb": "setLockedAccountThresholdUsd(uint256)", +"c8c121ef": "execute(string,uint256,uint256,uint256)", "c8c1a400": "infoAboveSpot()", "c8c21594": "releaseByStage(address)", +"c8c22bf6": "TokenPrice(uint256,uint256)", +"c8c27c67": "adjustDirectCount(uint16,uint16,uint16)", "c8c2ed54": "tokenAssignmentControl()", "c8c2fe6c": "acceptManagement()", +"c8c30209": "InitialBonusUpdated(uint256)", "c8c365fc": "nowday()", +"c8c36d91": "locked_until(address)", "c8c388eb": "RegBase(address,bytes32,address)", "c8c3b926": "changeDragoDao(address)", +"c8c49793": "getERC20ListLength()", +"c8c4a80a": "mintPrime(address,uint256,uint8,uint8,uint8,uint8)", "c8c5139d": "setUserDisplay(address,string)", +"c8c529d6": "emitFeesClaimed(address,uint256,uint256)", +"c8c5c815": "vaultBaseDebt(uint256)", +"c8c61a79": "zrxSwap(address,uint256,bytes)", "c8c67ca1": "transferValuebyAddr(address)", "c8c719d2": "MangachainToken(address,address,address,address,address)", "c8c72bb4": "TEAM_RESERVE_FTX()", "c8c749ec": "preTgeManager()", "c8c75647": "setVerified(address)", +"c8c76f06": "setContractDependencies(uint8,address)", "c8c79643": "addBurningMan(address,uint256)", +"c8c89cf2": "claimEpoch(address,uint256,address,uint256,bytes32[])", "c8c89fa5": "secretBids(address)", +"c8c8bb2a": "inflateEtherPool()", +"c8c8ebe4": "maxTransactionAmount()", +"c8c96071": "isWhitelistedUser(string)", "c8c9b1f8": "shouldVerifySegment(uint256,uint256[2],uint256,bytes32,uint64)", "c8c9d745": "userLookup(uint256)", +"c8ca18ce": "_whiteListAmounts(address)", "c8ca645f": "getName(string,string,address)", "c8cada78": "oraclize_query(uint256,string,bytes[2])", +"c8cb23f8": "setRecipientWhitelisted(address,bool)", "c8cb60bb": "cancelBid(bytes32,uint8,int32,bool)", "c8cb7d04": "Kristina()", "c8cb8677": "WithdrawMyTokens()", "c8cb8a75": "setCreator(address,uint256)", "c8cb985a": "callDividend()", +"c8cc2fc2": "deployWallet(address)", "c8cc5cd8": "distributeYield(uint256)", +"c8cc73c7": "LogSetBlacklistDestroyer(address)", "c8cc9cc2": "getElement(address)", "c8ccaebc": "extendedTimeLock()", +"c8ccb13f": "hdudPoolAddr()", "c8cd09ae": "TransferredPreBuyersReward(address,uint256)", +"c8cd56ad": "_poolLifeCircleEnded()", "c8cd65e5": "processDeposit(address,uint256)", +"c8cd6cc6": "sendInSoldierReferal(address,address)", +"c8cdabbf": "getDaiSplitValueGas()", "c8cddd61": "test_validShouldBe3_increaseTimeBy30000()", "c8ce122b": "checkJackpot(address)", "c8ce2fec": "lifetimeDeposits()", "c8ce30b0": "blocksForWei(uint256)", "c8ceaa95": "mint(bytes32,int256,address,uint256)", "c8ceae12": "tavernContract()", +"c8ced355": "inviterOf(address)", +"c8cee7e0": "getApprovedOracleByIndex(uint256)", +"c8cf44bd": "testPackedArgs()", "c8cf4722": "getRequestsLength()", "c8cf67a1": "buySmartSpeed()", "c8cfb032": "getPlayerByAddr(address)", +"c8cfb5ea": "getNonceByUser(address)", "c8cfd490": "UNLOCK_TEAM()", "c8cfe153": "revealVote(uint8,string)", +"c8d063ca": "PoolStateUpdate(uint8)", +"c8d0e1b5": "BondYield(address,uint256)", "c8d0ec0a": "reduceAllowance(address,address,uint256)", "c8d172d6": "getTokenInfoNonce()", "c8d1c017": "addUIntValue(bytes32,uint256)", +"c8d1c6cf": "userDepositedWei(address)", "c8d1cf4a": "tokenPriceForMainICO()", +"c8d1dc70": "getTotalFee(address,uint256)", +"c8d22620": "setCheckInitialPeriod(uint256,bool)", +"c8d24cf7": "getAllProxy()", +"c8d2db78": "getBlocknumber()", "c8d3db82": "getPresaleMaxValue()", +"c8d3e41e": "UserWin(address,bytes32,uint256,uint256,uint256,uint256,address)", +"c8d3fe9a": "VaultAddr()", +"c8d4432c": "pairForOldRouter(address,address)", "c8d47f16": "replaceLogic(address)", "c8d4b389": "approveAndCallPreSigned(bytes,address,uint256,bytes,uint256,uint256)", "c8d508fa": "test_insert_findNoHintUpdateTail(int256)", "c8d50d7c": "nextBackWindowAdjustmentRatio()", "c8d52ee3": "refundTransfer(address,uint256)", +"c8d5c03d": "balanceOfMultiplier(address)", "c8d61985": "setCryptoAgent(address)", +"c8d648dc": "decodeLeafToNumber(bytes)", "c8d689b1": "addAllowedLock(uint256)", +"c8d70559": "shutDownFund()", +"c8d7b48b": "Top3distance25(uint256)", "c8d840fa": "EventEmergencyContinue()", "c8d86e35": "bullToken()", "c8d88829": "oslikiFoundation()", +"c8d889f2": "synthetixReceivedForEther(uint256)", +"c8d8b6fa": "fundsWithdrawal(uint256)", "c8d8cf88": "appIndex()", +"c8d8d7cc": "containsPlayer_SideB(address)", +"c8d90df8": "frozenTimestamp(address)", "c8d942b5": "Travelerscoin()", +"c8d972bb": "_decode_sol_bytes12(uint256,bytes)", +"c8d9a6fc": "_selfDestruct()", "c8d9c042": "AuctionCreated(uint256,uint256,uint256,uint256,bool)", "c8d9ebc4": "getTomato(uint8)", +"c8daa30a": "deleverAmtFactorSafe()", +"c8daa402": "withdrawEthTo(address)", +"c8dae72a": "returnSessionInfo(uint256)", +"c8db233e": "expire(address)", "c8db6a42": "functionCalling(address)", "c8db6af9": "getCompte_14()", +"c8dbb686": "frozens(address)", "c8dc60ca": "vehiclesByCity(bytes32)", "c8dc7e19": "setReconciliationDate(uint256)", "c8dd64ea": "daVinciAddress()", "c8dd6ce7": "getPlayerDetails(address)", "c8dda301": "VOTING_START_BLOCKNR()", "c8dda71c": "HistoryUpdated(string,uint256[])", +"c8ddc699": "isUserInLockList(address)", "c8ddf66f": "MMChainToken()", +"c8de0acc": "CreateAdminERC721(string,string,address)", +"c8de1af3": "searchWinnerSmartPotGlobal()", +"c8de1d56": "claimedBalanceOf(address)", +"c8dee3b1": "set_levels(uint256)", +"c8df245a": "halving()", +"c8df3390": "teamToken3rdReleased()", "c8df5da0": "BOSHICoin()", +"c8dfca13": "batchMint(address,string,uint256)", +"c8e007c0": "performanceInitiatorMax()", +"c8e07115": "mainOracle()", "c8e0f101": "userPlay()", "c8e11521": "TripBitToken()", "c8e13bb4": "fit()", +"c8e18b60": "getStakedLP(address,uint256)", +"c8e1b4ce": "setMinterCap(address,uint256)", +"c8e1cf84": "rubyPayment(address)", "c8e1fe3f": "getCountriesOfCampaign(bytes32)", "c8e2190d": "_cancelOperation(bytes32,address)", +"c8e26cae": "getProtocolFeeLastWithdrawnTime(address)", +"c8e2e651": "exportPosition(address,uint256,uint256,uint256)", "c8e2fca0": "use(address,address,uint256,uint256,uint256,uint256,uint256,string)", "c8e32074": "returnFrom(address,uint256)", +"c8e334a9": "pauseFab()", +"c8e369bf": "getAdminAddresses(string)", +"c8e3992b": "blocks_DEPRECATED(uint32)", +"c8e3d092": "pool_slots_3(uint256)", +"c8e3d18b": "earnedToToken0Path(uint256)", +"c8e40fbf": "hasAccount(address)", +"c8e48d14": "updateAffiliateRank(address,uint8)", "c8e49707": "activateExportFee(address)", "c8e4acef": "playerByAddress(address)", "c8e55708": "oraclize_query(string,string[1])", "c8e566c6": "betInputToBytes(uint40,uint40,uint40,uint40,uint40)", "c8e569a8": "stopICO()", "c8e56acb": "FAPFundDeposit1()", +"c8e5bbd5": "ratesAndInvalidForCurrencies(bytes32[])", "c8e5f54f": "ArcanaToken()", +"c8e624b0": "safeTrexTransfer(address,uint256)", "c8e626f8": "checkDivsBalance()", +"c8e634b2": "secondHouseOpen(uint256,uint256)", "c8e6b2a8": "logTimestampSet(uint256)", +"c8e6b85d": "unclaimedTokens(address)", "c8e6ba4d": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", "c8e6c7d9": "imin(int256,int256)", +"c8e6d267": "_isGameActive()", +"c8e6f395": "removeInversePricing(bytes32)", +"c8e704a4": "BIND_STATUS_TOO_MUCH_TOKENHUB_BALANCE()", "c8e706e2": "contractWallet()", +"c8e70707": "updateToken(address,uint256,uint256)", "c8e71424": "MotherDNAShare()", +"c8e714cd": "PMPTokenAddress()", +"c8e735e1": "rsvVestingTime()", +"c8e76982": "addressThis()", "c8e788c1": "RELEASE_EPOCH()", "c8e7ca2e": "getMsgData()", "c8e7e5ef": "TOTAL_NUM_TOKENS()", +"c8e7ea09": "TransferedToKSCDapp(address,address,address,uint256,uint8)", "c8e8ce63": "outsourceConfirmNode(uint256)", "c8e8d6d6": "TheTokenE()", "c8e8f487": "missedVerificationSlash(uint256,uint256,uint256)", +"c8e9c541": "test_literal_mix(uint256,uint256)", +"c8e9f8a8": "getPlayerInfos(address)", "c8e9fc8b": "testgas()", "c8ea0cfa": "CoinmakeToken()", "c8ea1f7f": "updateEntity(uint256,bytes32,uint256,bytes32,uint256)", "c8ea429e": "closeCdp(uint256,uint256,uint256)", +"c8ea75d3": "BackerTokenTransfer(address,uint256)", +"c8eaa40f": "EventNewsState(uint8)", "c8eab537": "randomJackpot(uint32,bytes32,uint32)", "c8eaf28f": "addWhitelists(address[])", +"c8eaf9a7": "calcJuniorTokenPrice()", +"c8eb1197": "lockList(address,uint256)", "c8eb747a": "B42Token()", +"c8eb809c": "basixERC20()", +"c8eb8cd4": "__MappingTokenFactory_init(address,address,address,address,address)", +"c8eba6d8": "Set_Token_Address(address,address,address)", +"c8ebede7": "airdropTokenCount()", "c8ec2eb8": "MUBEX()", "c8ec57ed": "revokeConfirm(bytes32)", +"c8ed2c69": "tokenPurchase()", "c8ed6253": "ManagedToken()", +"c8ed7680": "getPoolReward(uint256,uint256,uint256)", "c8ede712": "makersAverageRating(address)", "c8edf65e": "GetAndReduceFeesByFraction(uint256)", "c8ee0c6b": "withdrawBySubscription(address,uint256,bytes32,string)", "c8ee2da8": "setReputationIRNNodeShare(uint256)", +"c8ee9171": "ERROR_REASON_PENDING_DEPOSITS_LENGTH()", +"c8eedcd6": "getGains(bytes32)", "c8ef8b00": "window2TotalSupply()", +"c8efa9c8": "HashRegistered(bytes32,address)", +"c8efb214": "_mintSecondary(address,uint256)", +"c8efb632": "setPatient(uint256,string,string,string,string,string,string,string,uint256,uint256,uint256)", "c8efd7af": "getResolverFee()", +"c8f006c1": "nopay()", +"c8f00ee3": "batchSendAirdrop(address[],uint256)", +"c8f023e4": "calcWidthdrawUnbalanced(uint256,uint256[3])", "c8f07770": "funcThatReverts()", "c8f09634": "visaOfferingsLength(uint256)", "c8f099cb": "upgradeEvilMorty(address,address)", "c8f0d741": "AlienFarmer()", +"c8f1ecd8": "_hashTypedDataV4(bytes32)", +"c8f1f063": "_onERC721Received()", "c8f21d22": "TagadaTsoinTsoinCoin()", +"c8f255db": "mock_remove(address)", "c8f2835f": "transferBack(address,uint256)", "c8f288ad": "getPoo(uint256)", +"c8f33c91": "lastUpdateTime()", +"c8f35b5d": "testingMode()", "c8f3a9e1": "getLastRollOutput(address)", "c8f3e5f0": "getParameterByTitle(bytes32)", +"c8f3f560": "spendableWallets(uint256)", +"c8f3f986": "generateProofSet(string,address,address,address,uint8)", "c8f41706": "pausePhase()", "c8f478e1": "SetChangePlatformFlag(bool)", "c8f490c8": "numOfBalloonsTypes()", +"c8f49941": "runEntries(uint256)", +"c8f4ab9b": "ContractsClosed(address)", +"c8f526e8": "getProposalTimes(bytes32)", +"c8f5a2f9": "sendMemoOnly(address,string)", "c8f5c3f9": "LNCHSale(uint256,uint128,uint256,uint256,uint128,string,uint128,string,uint128,string,uint128,string,uint128,string)", "c8f5d8b0": "total_coins()", +"c8f64ed7": "indexOf(string)", +"c8f73d98": "deposit1()", +"c8f779d0": "LogNFTGifted(address,uint256,uint256,address)", +"c8f781c2": "depositToContract()", "c8f803f8": "setUnitJadeStealingMultiplier(address,address,uint256,uint256,bool)", +"c8f869fe": "dataConsumerRegistry()", "c8f87d36": "_register(uint256,address)", "c8f88076": "emissionMasOneType(address[],uint256[],bytes32[],uint256)", "c8f8d75d": "Config(uint8,address)", +"c8f901b8": "TokensUnpaused()", +"c8f96c08": "updateDistanceRuned(uint256,uint256)", +"c8f97f0a": "amaura()", "c8f98db8": "getWinningFaction()", +"c8f99b9a": "AuctionStarted()", +"c8f9cb5b": "calculateCollateral(uint256,uint256,uint256,bytes32)", +"c8fae1a5": "fxs_address()", +"c8fb1573": "freeCardOrPurchased(address,uint256,uint256,string,string,address)", "c8fbbdda": "getGPSStartTime()", +"c8fc7696": "mockStaticFunction()", "c8fca35e": "getBidHash(uint256,uint256,address,address,uint256,uint256)", "c8fd39f7": "GetEthShop()", +"c8fd3fb5": "getMaxPeriodTransitions()", "c8fd6ed0": "unstake(uint256,bytes)", +"c8fd90f9": "setWithdrawSelector(address,string,bool)", "c8fdc891": "numberOfMonarchs()", "c8fddb80": "updateLemonCoinsRemainingToDrop()", "c8fdf67d": "holdTransaction(uint256,uint256,uint256)", "c8fe2065": "getSingleBetItemCount(uint256)", "c8fea2fb": "collect(address,address,uint256)", +"c8feab05": "_modifyTimelockInterval(bytes4,uint256)", "c8fed3f6": "withdrawCashReserveFund()", "c8ff80a1": "setMonsterClass(uint32,uint256,uint256,bool)", +"c8ffb873": "cumulativeRewardsSinceStart()", "c9000726": "nextStep()", +"c90054ee": "updateStakeAmount(uint256)", +"c90082f1": "glyphOfferedForSale(uint256)", +"c900b1f8": "updateTenderToExpired(address)", +"c900d987": "setUnstakeVault(address)", "c90109fa": "removeSomeCWCsFrom(address,uint256)", +"c9014734": "_isStopped()", "c90189e4": "fechAllVoteResultPreStageByBlock(uint256)", +"c9028aff": "allDepositIds(uint256)", +"c9029f3f": "totalAddressesMibWBNB()", "c902c3ae": "bets(bytes32)", "c902d1b6": "_checkClientSign(address,bytes32,bytes)", "c902ee36": "tokensAvailable(address)", "c9030ea0": "addMember(address,bool)", +"c903ab5e": "transferURI(address,address,string)", +"c9040370": "nonceTaken(uint256)", +"c90418b4": "tradeTokenForTokenSpecifyingFee(address,address,uint256,uint256,uint256,uint256,bool,uint8)", "c904a2ee": "minAllowedReservingPercentage()", "c906a5aa": "testDeleteVoter()", "c906baa3": "GACFund()", @@ -115159,313 +210720,614 @@ "c906cd68": "ForceCoinTransfer(address,address,uint256)", "c90755e2": "secretaryGeneral()", "c90763f0": "subAllocation(address)", +"c9076fc6": "LogGetToken(address,address,uint256)", "c9079673": "last_payment_timestamp()", "c90797ea": "suicideContract(address)", "c907d53b": "getTakeOwnershipFee(uint256)", "c9085820": "set_owner(bytes12,address)", "c908f302": "searchPursesByAddress(address)", +"c90902cb": "getUserDetails(uint256,address)", "c9090c7f": "levelFourTokenNum()", +"c9091aff": "getAmountCurrentlyFarmStakedByContract(address,address,address)", +"c90954a1": "pSlotSum(address)", "c9099385": "addApplication(string,string,string,string)", "c909b929": "closingTimePeriodTwo()", +"c909ea42": "getChild(uint256)", +"c909f152": "startReward(uint256)", "c90a6a8e": "MAIN_SALE_BONUS_PERCENTAGE_PHASE4()", "c90aef26": "Fetch_Game_Board_Vitualization(uint32)", +"c90bd047": "ACTIVE()", "c90c205b": "CLAIM_AMOUNT_ETH()", "c90c589a": "OAR()", "c90c83a8": "scheduleCall(address,uint256,uint256,uint256,uint256)", +"c90c85f9": "setEthUsdPriceFeed()", "c90c949b": "checkForBonuses(uint256,uint256)", "c90cfb0b": "newFact(string,string)", "c90d080a": "registerEvent(bytes)", "c90d1431": "MYLASTTOKEN()", "c90d2cd9": "createBallot(uint256,address,string,string)", +"c90d857d": "oracleEnabled(address)", +"c90d9ce7": "checkmessagePrefixed2(address,uint256,uint256)", +"c90db447": "cancelRecovery(address)", +"c90dbac1": "exitKebabPool()", +"c90dd5d1": "onKill(uint256,uint256,uint256)", "c90de215": "ClockAuction(address,address,uint256,uint256)", +"c90ea396": "calcChange(uint256,uint256)", +"c90eb5d9": "placementBonus(uint8,address)", +"c90edbfa": "getBillBasicInfo(bytes32)", "c90f34f0": "Bitstarti(uint256,string,string)", +"c90f6520": "_verifySeller(address)", "c90f793e": "currentAgreement()", +"c90fb671": "aBalance()", "c90fc8ee": "allTotalSupply()", +"c90fd957": "stock(bytes32)", "c90fda80": "countRC(address)", "c9100bcb": "getClaim(bytes32)", "c9101f6c": "increaseApproval(uint256,address,uint256)", "c9102029": "_getTokens()", +"c9106389": "getGuard()", +"c91145cc": "submitSolution(uint256,uint256,uint256,uint256)", "c9116b69": "myBalance()", "c9116e4a": "yearThreeClaimed()", "c911b56e": "isController(address,address)", +"c912ff7a": "excludeDerivative(address)", +"c91317f4": "addGame(address,bytes32)", +"c9131da0": "multiStake(address[],uint256[],uint256[],bool[])", "c913b552": "getVersions(bytes)", "c913f364": "addMoonPrizePool(uint256,uint256)", +"c91441ca": "_legacy_hashForSignature(bytes32,uint256,address,bytes32)", +"c914b437": "borrowRate()", "c914ef54": "SetAllow(address)", "c91540f6": "getCurrentCompetitionValues(string)", "c915fc93": "proposeUpgrade(address)", "c91610cd": "transferDelegator(address)", +"c9161a54": "_editTokenBandColor(uint256,string)", +"c916d968": "getIDAuthorities(uint256)", "c91752b2": "girlIdToAuction(uint256)", +"c917c2d3": "OASIS_WRAPPER()", "c91813ca": "testToBool(bytes)", +"c9190e59": "payEth(address,uint40,uint72)", +"c91987d2": "totalLinearRewards()", +"c9198c03": "LPStrategyFactory()", +"c9199165": "getHelpHoi()", "c919992d": "changeBrokerImp(address)", +"c91a7349": "rdivRound(uint256,uint256)", "c91b0149": "setWhitelister(address,bool)", "c91b46c6": "claimHero()", +"c91b6b46": "purgeDAO()", "c91bc856": "withdrawCAT()", "c91c6fa5": "completeSupply()", "c91ca6c7": "calculatePeerTokens()", "c91cd9d0": "minimumNumber()", +"c91ceaab": "distributedTeamTokens()", +"c91d59fe": "gasToken()", "c91d7e9c": "getFee(bytes32[])", "c91d956c": "setMinBalance(uint256)", "c91e4cc8": "getItemsByTypeAndOwner(string,address)", "c91e5ad6": "DatingTokenTest()", +"c91f35d4": "createTokenEscrow()", +"c91f5ebc": "moveToNewChannel(address)", +"c91f9981": "BentoBox()", +"c91fa97b": "lvl(uint256)", +"c91facaf": "MaxRedeemable(address,bytes32)", "c91fc619": "getTotalOut(address)", +"c920014f": "initSushiMine(address,uint256,uint256)", "c92015f6": "getAccountUnlockTime(address)", "c9206ddf": "setSalvageable(address,bool)", +"c9211c82": "withdrawEarnings(address,uint256)", +"c92132a4": "cfin(uint256)", +"c92184b3": "_PAPERAddress()", "c9219a7a": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[8])", +"c921a4ec": "uniswapPoolsToSettings(address)", +"c921b392": "E083FF9AB()", "c921f647": "GiftSend(uint256,address,address,bytes32,string,bytes16,uint8,bytes24,uint16,uint16,uint256)", +"c9224296": "requestedBatchToken(uint256,uint256)", +"c922461b": "coverage(uint256,uint256)", "c92261b5": "set(bytes32,int256)", +"c922e937": "emergencyUnstake(uint256,address,address[],uint256[])", "c922f446": "emergencyWd()", "c9230c5d": "assetName()", +"c92371c6": "loopringDelegate()", "c923c870": "getsysdayruns()", +"c923cadf": "createApp(string)", +"c9242986": "rewarding(uint256)", "c9247058": "MasternodeRewardAddedToRewardPool(uint256)", +"c924a43b": "enchant(uint256,uint256,address)", "c924c524": "secondSend(bytes32)", "c924d441": "EnableTokenWithdrawals()", "c92501b7": "setStopTime(uint256)", +"c9257775": "susd()", +"c9257dda": "updateMinAndMaxDepositDays(uint256,uint256)", +"c925bd51": "getEndStage_1()", +"c925c680": "getUserWeight(address)", "c926435c": "bonusInfo()", +"c9266029": "graduate(bytes32,string)", +"c9267a62": "fired()", "c926aae6": "kscSell(address,address,uint256,string)", +"c926c52e": "grainShareNumerator()", +"c926f091": "chocoPerBlock()", "c9270652": "returnLoanLength(uint256)", "c92728a1": "_ballotIdToNamespace(uint256)", +"c927ebef": "nameOfSigner(address)", +"c9280f06": "getPrice(bytes32,uint256)", +"c9286220": "etherMintSwap()", +"c928668b": "presentPercent()", "c9295bc6": "getOrgInfo(address)", "c9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", +"c9297808": "setTicketValidityPeriod(uint256)", +"c9298c5a": "bpoolCreator()", "c929bdac": "notaioAccounts(address)", "c929ccf3": "setTokenId(uint256)", "c929d55e": "overrideTokenHolders(address[],uint256[])", "c92a1ad8": "bonusPriceDeltaPerHour()", "c92a1e26": "setting(bytes)", +"c92a27b0": "SUSPEND_MINING_BALANCE()", +"c92a5a71": "addgov(address[])", "c92aecc4": "chi()", "c92ba8b2": "add(address,uint32,uint128,uint128)", "c92babd1": "SITMock(address)", +"c92c5b7b": "getUIntValueConverted(bytes32,uint8)", +"c92c998e": "approve_109(address,uint256)", "c92cd4d3": "getNewTokenBalanceOf(address)", "c92d2385": "transferPreSignedHashingWithPrefix(address,address,uint256,uint256,uint256,uint256)", "c92d3ea9": "Amazon()", +"c92d50c1": "mintAUTH4()", +"c92dae4f": "loan(uint256,address)", "c92db04d": "VanMinhCoin(uint256,string,uint8,string)", +"c92dd696": "removeManager(address[])", "c92e365f": "placeBid(address,uint256,uint256,uint256,bytes,int256)", +"c92e3ac0": "pendingYields(address)", +"c92e41f7": "DirectionChosen(address,uint256,uint256,uint256,uint8)", +"c92eeb4a": "inversors(address)", "c92f068c": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[])", +"c92f085a": "isJobActive(uint64)", +"c92f146a": "RemoveGenesisAddressFromSale()", "c92f3a0c": "GameICO()", "c92f8954": "withdraw(address,uint256[3])", +"c92f9227": "power(uint216,uint216,uint256)", +"c93090f1": "dasha()", +"c931ac21": "hashOffer(uint256[],address[])", +"c931c0de": "collecterz()", +"c9322adb": "reservedOf(address)", +"c932699b": "getAmount0Delta(uint160,uint160,int128)", +"c9329226": "getFileHistory(address)", "c932c71e": "USDsToken()", "c932ca62": "setBuildersAddress(address)", "c9330bfb": "ethToTokenConversion()", "c9334051": "decodeAssets(bytes32[])", "c9335f58": "worldwidegiftcode()", +"c933762a": "sendConcorditito(address,uint256)", +"c9340db9": "permissionedControllers(address,uint256)", +"c9348285": "setBORG(address)", +"c934ae5a": "getTotalRewardsWithdrawnInPool(uint256)", "c9351571": "WorldCupToken()", +"c9354bb5": "totalDaos()", +"c935b0f9": "dusting(address)", +"c935e1ab": "interestRatePerDay()", "c93685b8": "getQuorumPercent()", +"c9374500": "minSubmissionCount()", "c937b0a9": "platinum()", +"c937d968": "AdOffered(uint256,uint256)", "c937da12": "addToPublicWhitelist(address)", "c937e091": "SearchUserID(string)", "c9380d3e": "DeciserToken()", "c938acc8": "checkExistsOwnedPet(uint64)", "c9393c62": "NewState(uint8)", +"c9393e33": "setVeloMintGovFactor(uint256)", "c939625b": "LuckCashCrowdsale(uint256,uint256,uint256,address,address)", +"c939ebfc": "out(bytes32,address)", "c939fd50": "remainingIssuableNomins(address)", "c93a6c84": "setDefaultFee(uint256)", "c93aac88": "setReleasingSchedule(address)", "c93ab4c3": "checkTreesWatered(uint256[])", +"c93abcc3": "agentSellAmountHasRecord(address)", "c93b9755": "mintAgents(int256,address)", +"c93ba86b": "requestSwapExactETHForTokens(address,uint256,uint256,uint256)", "c93c266e": "updateWalletAddress(address)", +"c93c666d": "createSaleCardToPlayer(uint256[],address)", +"c93c8f34": "hasStaked(address)", "c93ce90f": "chefOwnerWithdrawal()", "c93ceec8": "collectDividends(address)", "c93cff84": "test_validContractBalance()", +"c93d0b1e": "lockups(address,uint256)", "c93dd31a": "Blammascoin()", +"c93e05a9": "userBigRoundKey(uint256,address)", "c93e253d": "balanceOfBasic(address)", "c93e718b": "removeAddressesFromOperators(address[])", "c93e8862": "_checkCap(address)", "c93e8b15": "getActiveBuyOrders(uint256)", +"c93f70e7": "proposeWhitelist(address[])", +"c93fc83d": "setSplitter(address)", "c9406e86": "crowdsaleEnds()", +"c9409693": "businessCountry()", +"c940b09f": "AwardInvation(bytes32,bool,uint256,address)", "c940c1b7": "addCustomerHash(bytes32,bytes32)", +"c940e801": "Trade_721eth(string)", +"c94103b1": "easy_sandbox(address)", +"c94103d7": "quote(bool,address,uint256)", "c9410b76": "ClockAuction(address,uint256)", +"c9411e22": "addStrategy(address,uint256)", +"c9416fd4": "getAccountFlag(address)", "c942940c": "Sukaya()", +"c942adf7": "reports(uint256)", +"c9435f05": "lunaContract()", "c944a38e": "CharlyLifeLog(string,int256)", +"c944b723": "requestCreateOrder_TKN_TKN_WithPermit(address,address,uint256,uint256,uint8,bytes32,bytes32,uint256[])", "c9456530": "isRespectTimeFrame()", "c945b53f": "lottoIdentifier()", +"c945b831": "test_DSProxyCacheAddr2()", +"c945d941": "claimBulkRentForTokens(address[],address)", +"c946e5dc": "getRemainingRewards()", "c946f3af": "Standard_3()", +"c946fd3c": "priceDescription()", "c94727f0": "getWinChoice(uint256,uint256)", +"c94750a8": "getRbtcRemainder()", +"c94762e5": "gtn()", "c947db81": "earlyWithdrawalFeePct()", +"c94914e5": "initializeContext(uint256,uint256,address,address,uint256)", "c9498266": "hash_passcode(bytes32)", "c949ba9b": "TokenBase()", "c949c0c9": "_houseOf(address)", +"c949ce80": "parcelToken()", "c94a18ba": "kpyGoalReached()", "c94a5841": "BITVesting()", "c94b0ac1": "CryptoTwitch()", "c94b56e3": "isMinCapReached()", "c94b5c3d": "cabbageToken()", +"c94ba754": "onOwnershipTransfered(address,address)", "c94bfdb1": "setTokenDescription(address,uint256,string)", +"c94c2245": "UpdateToken(address)", +"c94c5b7c": "withdrawERC20(address,uint128)", "c94c6787": "specialSend(uint256,address)", "c94c79dd": "EtherTots()", +"c94c8201": "enterRegeneratorUpdateStagingMode()", +"c94cbd04": "approve_670(address,uint256)", +"c94cc192": "cakeLPTokensLockDurationInDays()", +"c94d06fb": "calculateRebaseSupply()", "c94d0eee": "oddEven(uint256,address)", "c94d9caf": "createTxEth(address,uint256)", +"c94dbd33": "addResolver(address,bool,uint256,bytes)", "c94dc71e": "Satochi()", +"c94e3420": "fmul(uint256,uint256)", "c94e643c": "grantTokens(address,uint256)", "c94e6567": "fetchBlocks(address)", "c94e7b5c": "icoTokenSupply()", +"c94ea06a": "mintingEpoch()", +"c94eb2da": "onSetTokenPrice()", "c94f2d69": "ILOTContract()", +"c94f740f": "getLastMCR()", "c94f7983": "StillToGo(uint256)", "c94fbd4b": "Reek()", +"c94ff7f8": "_getDesiredSingleAssetReserve()", "c9507465": "useraddinverst(uint256)", +"c95074ef": "loteryDayWaitingForWinnerNew()", "c9511b59": "setAddressToken(address,address)", "c95292c4": "EthlanceDB()", +"c952b93c": "Confirm(address)", +"c952fa56": "lastImportIndex()", "c95320db": "migrationPhase()", +"c953283d": "setHoldings(address,uint256,uint256,uint256)", +"c9535920": "setJumpPoint(uint256)", "c9537838": "getExpectedBalance(address)", +"c9540c8f": "joinEthJoin(address,address)", +"c9540fd9": "_snatchPool()", +"c95473db": "setP(uint256)", "c954d4fa": "blendbacktest(uint32[],bytes32[],bytes32[],uint64[])", +"c954e01b": "getPeriodCurrent()", +"c9550041": "onContractStart(uint256)", "c9553010": "testDistributing()", "c955457e": "getRandomArbiter()", +"c9557cfd": "lastDailyEntry(address)", +"c9557f4d": "nyanV1LP()", +"c95591d7": "TicTacToeRules(address,address,uint256)", "c955b514": "addCancelled(bytes32,uint256)", "c955bde2": "getExpirationRequest(bytes32)", +"c9566fcc": "baseAssetReserve()", "c9567bf9": "openTrading()", +"c9569413": "getWithdrawalTimes(address)", +"c956b8c7": "manu()", "c956d497": "helpWithdrawal(address)", "c956db57": "WOLF3()", "c957012e": "caps(bytes32)", +"c9571af8": "setPrizeFromNewAddress(uint256,uint256)", +"c9579ee8": "usersInfo(address,uint8)", +"c957b899": "Loan(uint256)", "c9580804": "setAccessManager(address)", +"c9581f7b": "getStakerBalance(uint8,address)", "c9584008": "registerTicker(address,string,string,bytes32)", "c959467b": "setInterestDB(address,uint256)", +"c959c42b": "deal(uint256)", "c959ec57": "GetRocketStock(uint16)", "c95acadd": "ethAuction()", "c95ae083": "isMethodAllowed(bytes4)", +"c95ae4bc": "GetMyMoney(address,uint256)", +"c95ba3f4": "knowIfAlreadySignTransactionByAddress(address)", +"c95ba8a2": "ccotc(uint256)", "c95bd3aa": "closePreSignedHashing(address,bytes32)", +"c95c0d1a": "setMinHarvestInterval(uint256)", "c95c0efd": "setBonusUnlockAt(uint256)", "c95c0f7b": "getTransactionIds(uint256)", "c95c1036": "calculateStakeAmountWithBonuses(uint256,address,uint256)", "c95c16af": "imported(address)", +"c95c4ac2": "setInfo(address,uint256,uint256,uint256)", "c95c67dc": "ADVISORS_SUPPLY_LIMIT()", +"c95c6f12": "checkBuyable()", +"c95c7c1f": "investedRound(address)", "c95c9a83": "ThinkCoin(uint256)", "c95d8e40": "clientSign()", +"c95dabc5": "unclaimedPurchasedToken()", +"c95de7cf": "_setLiquidateFactor(uint256)", "c95e0909": "resetPlayer(address)", +"c95e18ed": "InsufficientProtocolFeeError(uint256,uint256)", +"c95e4007": "threeMonths()", "c95e81cb": "MyBet(uint8,address)", +"c95f0afa": "getTournamentV2(uint256)", +"c95f70c1": "DebugCallAgain(uint8)", "c95f79ba": "closeLeaderboard(uint16)", "c95f8b91": "TransferFunds(address,uint256)", "c95f95bb": "ComputedGainsRate(address,uint256)", +"c95f9d0e": "addLiquidity(uint256,address)", +"c95fc9f6": "UserDividendRate(address,uint256)", "c96027b3": "ethpaused()", +"c9604c75": "unblockContactEvent(address,address)", +"c9604e0e": "getPrice(string,string,bool,uint256,address,address)", +"c9606e4c": "eIsland()", +"c960c1e8": "changeWeight(uint256[])", +"c9610247": "stakingAccount()", "c9613733": "startNextEra(bytes32,uint256,int256,uint256,int256,uint256,int256)", +"c961909b": "get_level_income(address)", +"c961b884": "freezeETHPayment()", "c961df66": "contract_period()", +"c96206de": "incomeFrom(address)", "c9620770": "doVote(address,uint256,uint256)", +"c9623e52": "isValidProtocol(bytes32)", "c96266e8": "getDragonFight(uint256)", +"c962689d": "getStaticMetadata()", +"c9628010": "lpValue()", +"c962c2df": "transferVolumeNowBucketTimestamp()", "c96304e8": "balancesAddressDescriptionUpdate(string)", +"c963483c": "_currentTokenId()", "c9634f32": "randomContestant(uint256,uint256)", +"c963f44c": "setPendingGuardian(address)", "c9644b77": "retireAxie(uint256,bool)", +"c964506a": "getAlrightStartedTime(bytes32)", "c96492c4": "SspManagerContract(address,address)", +"c964ad45": "dailyReward()", +"c964d873": "initialize(bytes32[],uint256[],address)", "c964e493": "getSpaceship(uint256)", "c9651729": "firstLineWrong()", "c9653bea": "MainExchange()", +"c9657441": "revealManyBallots(uint256,address[],bytes[],uint256[])", "c96593a0": "The10ETHPyramid()", "c965e1d3": "constructAPIParam()", "c965ed7b": "OwnerReward()", +"c96609ba": "exchangeRateMint()", "c9660d07": "ownerSetEdgeRangeAndPayout(uint256,uint256,uint256)", +"c9666835": "getMyOriginSender()", +"c96679fe": "userIndex(address)", "c966865e": "notRandom(uint256)", +"c96781de": "pool2Amount()", "c9679537": "HafizToken()", +"c967c2e3": "totalRewardforTC(uint256)", +"c9686425": "getDifficultyExponent()", "c968907f": "grantVestedTokens(address,uint256,uint256,uint256,uint256,uint256,bool)", "c968aab3": "makeUntradable(uint8)", "c968ac68": "getWin(uint64)", +"c968b84e": "getDeployedTimestamp()", "c9693411": "deliverPresaleFuelBalances(address[],uint256[])", +"c96a4b5a": "lengthStorageFor()", +"c96aa6c7": "swapForExact0Multi(address,address,address,uint256)", "c96adb01": "getUserBet(address)", +"c96b6544": "getCurrentPriceToMint()", +"c96be4cb": "slash(address)", +"c96c24db": "Lucknumber(address,uint256,uint256)", "c96c54a7": "airdrop(address[],uint256,uint8)", "c96c8a1d": "ownerListMap(uint256)", "c96cd46f": "suicide()", "c96cea70": "updateUsername(string)", "c96d2dfa": "getStateAndProof(bytes,uint256)", +"c96dab36": "onWithdraw(uint256,uint256,address,bytes32,uint256,uint256)", "c96e5627": "numRegistered()", "c96e785f": "setWhitelisted(address,address)", "c96e83db": "firstContributorId()", "c96e8fee": "Bury(address,uint256)", +"c96f14b8": "totalUnclaimed()", "c96f3238": "getWithdrawAmount(uint256,uint256)", "c96f5041": "addHash(string,uint256)", +"c97061f1": "rewardPerBlock1()", +"c970e99f": "buyBackAndBurn()", "c971442c": "getDBs()", "c971aade": "FINALSTSTEST()", "c971b12b": "_onRandom(uint256,bytes32)", +"c9723b21": "getDayBenefitsByTokens(uint256[],uint256)", +"c9727bb1": "wasEverRemovedForSale(address)", +"c972fba5": "ApproverChanged(address)", "c9734ebd": "WatchLastPayout()", "c97358df": "GGPCToken()", +"c9736d80": "frozenInfos(address)", "c973851d": "kMaxStake()", "c97399d0": "_isOwner(address,uint256)", "c973c2e3": "collectorAddress()", +"c9741e95": "setWhiteListed(address)", "c9744029": "getPremium()", "c974631b": "platformWithdrawalProposed()", "c974947d": "unlockAddress(address[])", "c975653d": "StartCity()", +"c975b2dc": "totalLockInTokens()", +"c975f7fc": "washa()", +"c975fab4": "shareholdersCounter(uint256)", "c9762f8f": "TooBigPriceDiff(uint256,uint256)", +"c9766b83": "getReferenceAmount(address)", +"c976a359": "adminOnly()", "c976b4f9": "slowDump()", "c976bbbb": "_compare(int256,bytes2,int256)", "c976ce9c": "privateSaleLimit()", "c977a7a7": "setUsdToEtherExchangeRate(uint256)", +"c977f4bd": "UserAdded(string,uint256)", +"c97829db": "lookupAffiliateTokens(address)", +"c9788027": "setTimeSchedule(uint256)", "c9788631": "beneficiaryWallet()", +"c97890f1": "refreshBlockVerifier()", "c978a7bc": "inviteRate()", "c978c45d": "setNewMessage2(string)", "c978ee59": "fourthStageMintingDate()", "c979113c": "nextStageEmission()", "c9791e0d": "confirmBobIndirectPay(uint256)", +"c9798870": "manualDeletion()", +"c979b05a": "setSnowflakeAddress(address)", +"c979b1de": "withdrawFarmingToken(uint256,uint256,bytes)", "c97a06ce": "isHardcapReached()", +"c97a184f": "setUnstakePeriod(uint256)", +"c97a19d6": "twin1LiqAddress()", +"c97a413a": "withdrawToken(string,uint256)", +"c97a472f": "zigWallet()", +"c97a6650": "SlotsLargeBet(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "c97aae82": "NulsStandardToken(uint256,string,uint8,string)", +"c97ab21a": "bonusBeforeCommonDifference()", "c97ab7ca": "isICOClosed()", +"c97ad47f": "_emitFeeSet(uint256)", "c97b5278": "XYZSecurities()", "c97b6d1f": "updateBatch(int128[],uint128[],uint8[],bytes32[],bytes32[],bool)", "c97be180": "lock(address,uint256,uint256,uint256)", "c97c1505": "readRate(string)", +"c97c4d5c": "giveRuling(uint256,uint256)", "c97c6353": "testHello()", "c97ca645": "updateWeiPerWholeToken(uint256)", "c97cc71e": "getTransferRawAddress(bytes)", +"c97ceeac": "unstakeCar(uint256)", "c97cef81": "Shelter(string,string)", +"c97d15fb": "setTargetBorrowLimit(uint256,uint256)", "c97dc17b": "DatareumToken()", +"c97dd1e8": "withdrawDividendEarnings()", +"c97e18fc": "setShouldRevertReceive(bool)", "c97e8480": "delegatedTransfer(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "c97ec033": "changeOverERC228(address,address,uint256,address)", +"c97ec6bd": "removeWhiter(address)", +"c97ee925": "unlockTotal()", "c97f8363": "setBonusAddress(address)", +"c97fcc3e": "getInterestRate(uint256,uint256,uint256)", "c9801b50": "f_public()", "c98031be": "hintURL(int256,bytes32,string)", "c980c626": "setImage(uint256,string)", +"c980e8d4": "smonk()", "c98165b6": "createTarget()", "c98166c0": "ethAmount()", "c9818728": "candyCap()", "c9819d1e": "GuardaRegistro(bytes32)", +"c981dbb6": "delayClaimBlock()", +"c982939c": "rewardIncome(address)", "c982e353": "getCurrentPrice(uint256,uint8)", "c9838930": "setReferralTokenContract(address)", +"c98390b5": "maxcount()", +"c984aaaf": "minTickets()", +"c98517c5": "MAX_STAKE()", +"c9853211": "allowedTransactors(address)", "c985c221": "get_all_levels()", +"c985cfcc": "getHeapSort128()", +"c9865c57": "NewMilestoneListProposed()", +"c98668db": "withdraw(address,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32,bool)", "c986cf7c": "defrostAdvisorsTokens()", +"c98707a8": "that(bool,bytes32,bytes32)", +"c987336c": "upgrade(address,bytes)", "c987a78a": "AISI()", "c987c5a1": "userAdd(address)", "c988d70f": "getDailyWithdrawLimit()", "c9891384": "PendinglinesToLines()", +"c9893a39": "bnbShares(uint256)", "c9894b5c": "taxValue()", +"c989971a": "totalSupplyPerPool(uint256)", +"c989da89": "GWTB_USDT_IS_OPEN()", +"c989edbb": "RareNFT()", +"c98a5aa6": "setUSDxPerUsdcOracle(address)", "c98a79fb": "getBallotLogN(address)", +"c98b07b9": "tautrinoUniswapPairs(uint256)", +"c98b14d4": "INVESTMENT_LIMIT_PUBLIC()", +"c98b5500": "setCToken(address,address)", +"c98b6b58": "synthsETH()", "c98b7027": "bgb_per_Keos()", +"c98b9379": "setApproveAmount(uint256)", "c98bd7da": "isWinner(uint256,uint256)", "c98bdd2f": "year5LockAddress()", +"c98bf689": "requestForDeployment(uint256)", +"c98c05b7": "collateralBalance()", "c98c3083": "OutcomeToken()", +"c98c3434": "getReplicantByTokenId(uint256)", "c98c6e08": "payAmountForLoanAtIndex(uint256,uint256)", +"c98cc002": "logUpdateCommissionRate(uint256,uint256,uint256)", +"c98cdf86": "setOsm(bytes32,address)", +"c98ceefd": "unlockEcosystem()", "c98cf6e3": "COBToken()", +"c98cf9d9": "preSaleScheduleReleaseStart()", +"c98d1906": "overallMNEStaking()", "c98d3457": "alliance(address,address)", "c98d9b83": "getTokensContractAddress()", +"c98da208": "AirDropEvent(address)", +"c98e00e4": "BlockAddress(address)", "c98e4149": "setKingdomFactory(address)", +"c98eaea1": "contract_rxp_value_bonus()", "c98f0ad9": "getUnlockedBalanceLimit(address)", "c98fc4d9": "adminSetConfig(address,address,address)", +"c98fd4b9": "comAirDrop_()", "c98fefed": "convertFor(address[],uint256,uint256,address)", "c99051dc": "getWildcardsRemaining(uint16)", +"c9907b08": "misoDiv()", "c9912255": "gago()", +"c99142f1": "keepSUSHIMax()", "c99252d3": "joinGame(uint256,uint8,uint8)", +"c9927ec5": "wbnbToElevenRoute(uint256)", +"c99323a0": "massMint(address[],uint256[])", +"c9935487": "randomClassIds(uint256)", "c99380c9": "getAttoTokensBoughtInICO()", "c9940c31": "getPoolCandidateContract(uint256)", +"c9943085": "RFDeclare(address)", +"c9946980": "TransferStatus(bool)", "c994fe31": "setCompanyManager(address)", +"c9950318": "swapOldBRRR()", "c995623e": "revealMove(bytes32,uint256)", "c9956b05": "FMCToken()", +"c9969750": "TAX_COLLECTOR_ADDRESS()", +"c9970d42": "maxPercentClaim()", "c99749a8": "prepareWithdrawProposalGivenSplitProposalId()", "c997c1e2": "mul18(uint256,uint256)", +"c997d9c7": "getOchaReward(uint256,uint256)", +"c997e501": "valAmount(address)", +"c9980098": "_poolOwner(address)", "c99842f9": "startPreIco(uint256,uint256,uint256)", +"c998512f": "withdrawByUser(uint256,address)", +"c998d8fd": "getIsOrderCurrentlyValid(uint256,address)", "c998e9dd": "changeUserKeyFromRecovery(address)", +"c998eef4": "lease()", +"c9990aa6": "location(uint256)", "c9991176": "addAdministrator(address)", +"c999477e": "LogChangePolyRegisterationFee(uint256,uint256)", "c99a975d": "optInFcnMinGas()", "c99ae8a7": "setFechaTax(uint256)", "c99b1f28": "icoWeek4Bonus()", "c99b27ad": "updateFirstWallet(address)", "c99c3c62": "getCarProductCount()", +"c99c5580": "preIcoDistribution(address,uint256,uint256)", +"c99d3a06": "removeCollateral(address)", "c99d89fc": "PriceOneEnable()", "c99d9ef7": "startIcoDate()", "c99db1ba": "_calculateLockedPercentage(uint8)", "c99dccf9": "getInvestor(uint256)", +"c99e8b9d": "multisendErcAPL(address[])", "c99f3357": "DRAIN_DELAY()", +"c99fea94": "joinLeague()", "c99ff644": "dilute(uint256)", "c9a04e55": "getDailyEthProfit(address)", "c9a0e252": "ICOParticipants(address)", +"c9a1d448": "getUnlockLPAmount(bool)", "c9a1d88b": "placeBet(uint16,uint16,bool)", "c9a2ab19": "aragonDevMultisig()", +"c9a2d645": "reanimateCountry(uint256)", +"c9a2f3ad": "pynthsByAddress(address)", "c9a30482": "BurnableCrowdsaleToken(string,string,uint256)", "c9a365a7": "foundationlock()", "c9a3f228": "SCLCrowdsale(address,address,address,uint256)", "c9a43b2b": "m_software(uint256)", +"c9a4738c": "enableDebtPhase()", +"c9a4bb3f": "_IN_EXEC_LOCK()", "c9a4faa6": "AdexContract(address,address,address,uint256,uint256,uint256)", "c9a5003c": "lastHello()", "c9a52d2c": "setBytesValue(bytes32,bytes)", @@ -115474,104 +211336,174 @@ "c9a6b2a8": "addAuction(uint256,uint256,uint256,uint256,address)", "c9a6e480": "tokenSupplyFromCheck()", "c9a75d90": "setPI_edit_20(string)", +"c9a760f4": "calcPrice(uint8,uint256)", "c9a7623a": "buyingPrice(bool)", "c9a77e3d": "totaleMsg()", +"c9a781ba": "totalIssuingBalance()", "c9a815bd": "setSpendingLimit(address,uint256)", "c9a82aa8": "markCrowdsaleEnding()", +"c9a8b55a": "pullFromStrategy()", "c9a8baae": "myFirstLoop()", +"c9a8e48e": "secretRevealed(address)", +"c9a92a07": "creationTimeContract()", "c9a99f19": "subscribeCaller(address,address,uint256,address,uint256)", "c9aa013b": "Start5()", +"c9aa2e87": "givePack(address,uint256,uint256)", "c9aa4cf8": "testHasTokens()", "c9aa71b8": "getFlyingUnicorns(bytes32,uint64)", +"c9ab097b": "_stakerWithdrawFeeRate(address)", +"c9ab22a7": "updatePricesById(uint32,uint256,uint256)", "c9ab521f": "AddBook(uint256,string,address)", +"c9abf005": "change_duration(uint256)", +"c9abf232": "adminWhitelistAdministrator(address,bool)", +"c9abfa89": "poolDao(address)", +"c9ac0d32": "unsetETHRefundable()", "c9ac836d": "transferPet(address,address,uint64)", "c9acab84": "left59(uint256)", "c9ad51b5": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE3()", +"c9adc9d3": "bondFundAddress()", "c9ae5594": "countHand(uint8[])", +"c9ae7436": "proposeWeights(address[],uint256[])", "c9af089f": "getOrCreateChildUniverse(bytes32)", "c9af2418": "checkUp(address,bytes32)", +"c9af5504": "candidateNumber(string)", +"c9af71b2": "betColor(uint256,uint256)", +"c9aff70c": "outstandingCoupons(uint256)", "c9b06a4b": "AECloudToken()", +"c9b0a2a7": "Active()", +"c9b0c2bc": "_roundNames(uint256)", "c9b0d97b": "canCollect()", +"c9b0da6a": "clientTokenBalances(address)", +"c9b0e277": "appendRoot(bytes32,bytes,bytes[])", "c9b0eef4": "oracleItQuery(uint256,string,string,string,uint256,uint256)", "c9b110cb": "getAmountOfWithdrawals(address,address)", +"c9b17149": "lastReward()", "c9b1a517": "Show_Doctor(uint256)", "c9b1b2ae": "etherKing(uint256)", +"c9b21613": "loanCredit(address,uint256)", "c9b25f0f": "transferEther()", +"c9b27359": "infiniteApproveIfNeeded(address,address)", "c9b2a580": "UTTotalSupply()", "c9b2e522": "getSymbol(address)", "c9b31d4b": "getCurrentSecret()", +"c9b34ce2": "mint(address,string,string,uint256,string,string)", +"c9b3878b": "lastStack(address)", +"c9b38e71": "classIsPreminted(uint256)", +"c9b3932f": "PlayerJoined(address,uint256,uint256)", "c9b3e736": "getTokenSellPrice()", +"c9b3ffd9": "switchTransferFromLock()", +"c9b435bd": "wrappedETH()", "c9b44821": "FIRETRADES()", "c9b46bbb": "test0_adding()", "c9b4cb94": "BIBToken(uint256,string,uint8,string)", "c9b4ddb2": "receiveLockedAmount(address,uint256)", +"c9b56ae9": "unSet(address)", "c9b5757e": "refundBet(uint256,uint8)", +"c9b58fb0": "holdersSettlement(address)", +"c9b5aef2": "getTotalTweet()", "c9b5e555": "founderAddr()", +"c9b5ef8e": "relayer(address)", +"c9b62eb1": "metaData(string,address)", +"c9b63569": "LogTokenBuilt(address,uint256,string,uint160,uint96,uint32)", "c9b67627": "NonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2],uint256)", "c9b7ab8b": "getPostLink(uint256)", +"c9b7d928": "minBurnDivisor()", "c9b8020d": "starbaseToken()", +"c9b84d4d": "parentRegistry()", "c9b86d43": "manualState()", +"c9b8eee1": "totalRewardClaimed(uint256)", "c9b94eb9": "liabilityFinalized(uint256)", +"c9b961c4": "SaleCancelled(address,uint256)", "c9ba0d4d": "r9kAddress()", "c9ba32f4": "COPPER_AMOUNT_NDC()", "c9ba73a3": "getmypost(uint256)", "c9ba93be": "getIndexFromAddress(uint256,address)", +"c9baaec9": "bonusUntilDate()", +"c9bb4ae1": "setEasyBooster(address)", "c9bba27b": "manualEmissionEnabled()", +"c9bbc1d0": "tokenIdsFromUserERC721(address,address)", "c9bbc8c0": "donkeyName(address)", +"c9bbd04a": "sushiMasterChef()", "c9bc0883": "transferFromForcibly(address,address,uint256)", "c9bc2bf5": "updateSnipCoinToEtherExchangeRate(uint256)", +"c9bc3dad": "withdrawBUSDAfterPresaleOver()", "c9bc5dbd": "requestCeilingRaise(uint256)", "c9bd2893": "fines()", +"c9be579b": "setMarketCapThreshold(uint256)", +"c9be6678": "usersP2Matrix(address,uint8)", "c9bebd90": "ownerAlias()", +"c9bed446": "transferAnyTokensFromThis(address,address,uint256)", +"c9bed948": "POINT_ROLE()", +"c9bf5b15": "top3(uint256)", "c9c08bb7": "tickerAddress()", "c9c09ac8": "denyBundlingMultitoken(uint256)", "c9c0c77a": "deposit(uint16)", "c9c0f25e": "getAllWorkers()", +"c9c0f468": "getlockedVestingStage(address)", "c9c1db4a": "launchFund(uint256)", "c9c1ed93": "testControlRegisterContractIdAgain()", "c9c1eded": "EPYCOIN()", "c9c22deb": "getStarDistanceInLyThousandths(uint8)", "c9c286c6": "getUnitRafflePlayers(uint256)", +"c9c2c2fe": "getUnderlyingWithdrawalFee()", +"c9c2fce0": "azrPerBlock()", +"c9c30efa": "prize_block_number()", "c9c347b9": "EthereumOneToken(string,uint8,string)", +"c9c372bf": "BiometricUnlocked(address)", "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)", +"c9c5a244": "totalAdminMints()", "c9c5b5b4": "migrate(string)", "c9c6176c": "BidSubmission(address,uint256,uint256)", +"c9c61a74": "setPercentLPLevelRefer(uint256,uint256)", +"c9c65396": "createPair(address,address)", "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)", +"c9c85a55": "setDollarValue(address,uint256)", "c9c85ec6": "currentGameCost()", "c9c8ffd2": "test_increaseBlockNumber30211()", "c9c92c12": "transferWineFromVineyardCellar()", "c9c92dc5": "getProposal(bytes32,string)", +"c9c95036": "subtractRbtcFromSystem(uint256)", +"c9c9556c": "TokensExchanged(address,address,uint256)", +"c9c9a5a0": "emptyBucket(bytes32,bytes32)", "c9ca080d": "Indecoin()", "c9cb0043": "supportTokenAmount()", "c9cb0e9b": "emitNewSmartToken(address)", +"c9cb1405": "setFeesPercentage(uint256)", "c9cb6f47": "distributeDifferentAmountOfTokens(address[],uint256[])", "c9cb7204": "unsold()", +"c9cb74ee": "dittoBoostAddress()", "c9cbc222": "PicAdded(address,uint256,address,bytes32)", "c9cbf8c9": "saleExchangeRate3()", "c9cc0498": "buyComission()", "c9cc0ed5": "setGuardianSale(uint256,uint256)", "c9cc1a05": "transferTokensToContributor(uint256)", +"c9cc2e8e": "setUnstakeFrozenTime(uint256)", "c9cd40a2": "vestingEntries(address)", "c9cda91f": "changeTokenAddress(address)", "c9ce1c23": "KUEKeNParty(string)", +"c9ce5546": "viewManagers()", +"c9ce5d86": "getCETHAddress()", "c9ce624f": "buyBackFund()", +"c9cead83": "setTotalLockedTime(uint256)", "c9cf03ce": "refundMoneyForUser(bytes32)", +"c9cf0fe6": "getListApplication()", "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)", +"c9d03de1": "farmPerformanceFeeGovernance()", "c9d07650": "NetkingToken(uint256,string,uint8,string)", "c9d12d11": "RC(address,uint256,uint256,uint256,uint256)", "c9d2373b": "marketKnowledge()", @@ -115579,140 +211511,273 @@ "c9d27afe": "vote(uint256,bool)", "c9d27bcf": "doDisputeMemoryAccessSequence(uint256,bytes32)", "c9d2d217": "TokenState(address,address)", +"c9d303cb": "storeVersion(uint256)", +"c9d3403e": "callE()", "c9d34622": "diffDays(uint256,uint256)", +"c9d35f11": "MasterAddressRemoved(address)", +"c9d3a885": "notarisationFee()", "c9d4623f": "engine()", +"c9d48c55": "getTradingResult(address,uint256)", +"c9d50892": "setMaxSwingRate(address,uint256)", +"c9d509ef": "BurnReputation(address,address,uint256,address)", +"c9d524b3": "sendchalz(address,uint256)", +"c9d559b8": "disallowToLock(address)", "c9d57328": "managePlayer(uint256)", "c9d66690": "RedeemEvent(address,uint256)", "c9d68389": "airdropper()", +"c9d6bebd": "LogActive()", +"c9d6c0f8": "lastRefresh(address)", +"c9d6fee9": "getCount(bytes32)", +"c9d7cf0f": "setTokenTransfer(address,bool,bool,uint256,uint256)", "c9d7d862": "drawFundsAfterTransfer(uint64)", "c9d82560": "RewardBonusTimePeriod()", "c9d82c96": "ICO_DURATION()", +"c9d871aa": "createShareHolder(address,uint256)", "c9d96393": "updateGenVault(uint256,uint256)", "c9d9c2b4": "deathData_a0()", "c9dab438": "Subrosa()", "c9dac221": "Bussines_Card(string,uint256,string,address)", +"c9db127c": "subFromPartner(address,uint256)", "c9db1bbf": "setPreICOStartDate(uint256)", "c9db2bbd": "addPendingContribution(address,uint256,uint256)", "c9dbc259": "ExchangeSwitch(bool)", "c9dca9ba": "changeTokenMinter(address)", "c9dd3a56": "annualInterestUpdateToken()", +"c9dd8ae3": "getBallotInfo(address,address)", "c9dd915f": "checkPremium(address)", "c9ddd118": "checkPersonalRemaining(address)", "c9ddd12f": "getTimestampOfDayEnd(uint256)", "c9de31c7": "EOToken()", "c9deb567": "collectionsAvailable()", +"c9df6df5": "setProtectionCircuit(bool)", +"c9df7c3a": "tokenFromMirror(uint256)", +"c9df9ce3": "phase1TokenPerBlock()", "c9dfa731": "lost(uint256,uint256)", +"c9dfd48b": "presale_funds()", "c9e01787": "registerAffiliate(address[],uint256[],string)", +"c9e03479": "sum_premium_players()", +"c9e0706c": "EPOCHS_PER_YEAR()", "c9e075c6": "showLockState(address,uint256)", "c9e077e6": "bride()", +"c9e18015": "utilisationMultiplier()", +"c9e18986": "totalDividendsPaid()", "c9e20791": "_setName(bytes32,string)", +"c9e20dce": "recipientRegistry()", "c9e25251": "buy(bool)", +"c9e2eff9": "_playerLink()", "c9e3af7e": "currentBetLimit()", "c9e3e66c": "secondCheckpointPrice()", "c9e40106": "getConsolationPrizeTokenId(uint256,address)", "c9e43221": "MIN_WTH()", +"c9e445fb": "claim(string,bytes32,bytes)", +"c9e48653": "tswap()", "c9e4d8bb": "isService(address,address)", "c9e525df": "N()", "c9e55b4e": "adminFixMaxSupply(uint256)", +"c9e57aa6": "getLPTokenAddress()", +"c9e672bc": "REI18()", +"c9e6bd34": "showLockValues(address)", "c9e6bef4": "_endsAt()", +"c9e6da19": "getCurrentPoolAddress()", +"c9e76516": "RetractRevision(bytes20,uint256)", +"c9e7dc03": "setTier1EndTime(uint256)", "c9e7fd4b": "SovTokenCrowdsale()", "c9e84346": "bonusLevels(uint256)", +"c9e846a8": "setInvitedBy(address)", +"c9e857dd": "giveDividendPerPlayer(string)", +"c9e8848e": "WithdrawTokens(address,address,address,uint256)", "c9e904be": "totalEthRaised()", +"c9e9694d": "banReason(address)", +"c9e9cc4d": "feePoolProxy()", +"c9e9e26e": "mnePerDayLength()", "c9e9f4dc": "donateToLottery()", "c9e9ff2c": "CPBWallet()", +"c9ea62c1": "setDifficulty(uint256,uint256,uint256)", "c9ea7c7c": "setMinimumFundingGoal(uint256)", +"c9ead258": "addPlayerPair(address,address)", "c9ebb5e8": "freeMem()", "c9ebeba6": "setIPFSParameter(string,string)", +"c9ec05ea": "Stake(uint256,uint256)", "c9ec6cf6": "setOpenCloseHour(uint8,bool)", +"c9ec9df3": "Contribute(address,uint256,uint256)", "c9ecc566": "PurchasingAllowed(bool)", +"c9ed9d87": "unavailableEtherArray(uint256)", "c9eda121": "setArrayIndexValue(bytes32,uint256,string)", "c9ee21fa": "GUNS()", +"c9ee2bf0": "setPhoto(string,string)", "c9eea77c": "_updatePrice()", +"c9eebb3c": "Transition(bytes32,uint256)", "c9eebd9d": "modifyVictim(uint16,string,string)", +"c9eee900": "token_details(uint256)", +"c9ef345a": "removeWhiteListTransfer(address)", "c9ef5569": "getVolumeBonusPercent(uint256)", "c9efa392": "bonusMilestones()", +"c9efd583": "getTradeablePuts()", "c9efda2c": "canStartAuction()", +"c9f00e21": "update(bool,bool,uint256,bytes32,bytes)", "c9f09090": "populateTrancheTokens()", "c9f0a02d": "burnAuction()", +"c9f10f8c": "APPROVE_TYPEHASH()", +"c9f111cc": "withdrawDDR(uint256)", +"c9f12e5d": "failedKycList(uint256)", "c9f166f8": "ctz32(uint32)", +"c9f18ebd": "redeemCredits(uint256)", "c9f1b7f0": "TeamToken()", "c9f21fec": "setAuditTimeout(uint256)", +"c9f230ab": "submit(address,uint256,uint256,uint256,uint256,bytes)", +"c9f2e86a": "primarySalePrice(uint256)", "c9f316dc": "getReferenceCodesOfAddress(address)", +"c9f3b530": "removeMinorOwner(address)", "c9f3d62e": "getCarProductEarning(uint32)", +"c9f3dac8": "key(address,address,uint256)", +"c9f51e5a": "changeVote(uint256)", +"c9f613d5": "addPresale(address,uint256,uint256,uint8)", +"c9f67072": "rewardInfo()", "c9f68025": "AMToken()", +"c9f7153c": "getTokenPrice(address,uint256)", +"c9f716ba": "accrueBonusTokens(address,uint256)", "c9f73464": "maxCandidateId(uint256)", +"c9f761ce": "JobCreated(bytes32,address,uint256)", +"c9f807d9": "issueRebalancingSetWithEther(address,uint256,bytes,bytes,bool)", "c9f84e1a": "unlockSecondPrivate()", "c9f88f27": "invokeContracts(bytes)", +"c9f8993a": "forceUnlockUpTo(address,uint256)", "c9f8cf20": "getCanvasesWithSellOffer(bool)", +"c9f97c7c": "initialize(address,address,uint256,address,bool)", +"c9f9cab8": "remittanceTo(address,uint256)", "c9fa11df": "EventChain()", "c9fa595b": "paused_3()", "c9fa8f2d": "houseFeeHoldover()", "c9faa7c5": "isActivated(address)", +"c9fafbb8": "centurionIndexToOwner(uint256)", "c9fb975c": "UnicornsSold(address,uint256,uint256,uint256)", +"c9fba54d": "getUniswapBurns()", "c9fbdc36": "referral_fee()", "c9fbe626": "TweetRegistry()", +"c9fc5990": "max_alicoins()", "c9fca8a5": "rivetzRegister(uint256,uint256,uint256,address,address)", +"c9fd076e": "withdrawLiquidated(uint256,uint256,uint256,uint256)", "c9fd1955": "getVestingWalletLength()", +"c9fd3dbc": "setApi(string)", +"c9fd3e96": "_recoverNexenTokens(uint256)", +"c9fd4c93": "exchangeRateProvider()", +"c9fd5946": "NewRound(uint256,uint256,address)", +"c9fd716c": "LARGE_DIVISOR()", "c9fd83e2": "lastFeePeriodStartTime()", +"c9fd8ee8": "revokeSignature(bytes32)", +"c9fde270": "PETH_ADDRESS()", +"c9fe215b": "safeWlfTransfer(address,uint256)", +"c9fe9c0a": "BuyBackRateMin()", +"c9fec892": "SearchFileTransferProof(bytes32)", +"c9fedf28": "swap(address,uint256,address[])", +"c9fef62f": "OW(uint256)", "c9ff34ec": "privateTime()", +"c9ff6f4d": "updateFor(uint256,uint256)", +"c9ff79aa": "f8()", "c9ffb6e3": "claimPocketMoney()", "ca001903": "AntarctiCoin()", "ca00aad3": "closeLottery(uint256,string)", "ca0157cd": "getGameIds(address)", +"ca01a52c": "dailyTotalInvestment(uint256)", "ca01b37c": "DASToken()", "ca01ba39": "generateTokens(uint256)", "ca01d731": "XinfinUpgradeableToken(address)", +"ca01f936": "eCRVGauge()", +"ca01fed5": "delegateBond(address,address,bytes32,uint256)", +"ca022898": "presaleAccount()", +"ca02620a": "bind(uint8,string)", +"ca02b267": "setChildTunnel(address)", "ca02dbe3": "Requestprofit()", +"ca0341c6": "selfStakerDeposits(address)", +"ca0364d9": "actives(address)", "ca0370f7": "calculateCompoundContract(uint256,uint256)", +"ca03d3ee": "prescriberCount()", "ca03dab5": "withdrawSubdivsAmount(uint256)", "ca03fdcd": "ShowADV()", +"ca04c834": "getCar()", "ca04d26f": "transferReadable(address,uint256)", "ca04e076": "getOwnerPixelCount(address)", "ca051844": "withdrawBalance(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"ca054803": "balanceShares()", "ca056aed": "addTokens(address,uint256,uint256)", +"ca05abe1": "isProviderLiquid(address,uint256,uint256)", "ca06226d": "Ecopackcoin()", "ca07218c": "setIt(address)", "ca077f72": "allocate4ProjectToken()", "ca0781a1": "getRateAndCheckCap()", "ca079c52": "Upd(uint256,string,address,uint256,uint256)", +"ca086180": "uniswapLiquidityDeposit(uint256)", "ca087b96": "FlexFitRewards()", +"ca093047": "rewardAmounts(uint256)", "ca093888": "gameIsSundown()", "ca0941b4": "findIdByHostPort(string,uint256)", +"ca09749b": "addUpgradeAddress(address)", +"ca0a93e8": "transferSwap(address,address,uint256)", "ca0a992e": "IvyKoinContract()", "ca0a9c2d": "makeUser(address,string,string)", +"ca0af043": "compBorrowerIndex(address,address)", "ca0b1878": "addValue(address,uint256)", "ca0b49ae": "getMyCarsIdx()", +"ca0b7dde": "WalletCreated(address,address,address)", +"ca0bfcce": "batchDeposit(bytes[],bytes[],bytes[],bytes32[])", "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)", +"ca0c9d79": "updateQueuePeriodInSeconds(uint256)", "ca0cd7c0": "setUnlockLater(uint256)", +"ca0cdea8": "donors(address)", "ca0d01a6": "_yearTwoSupply()", "ca0d0d82": "getMilestoneInfo(uint8)", +"ca0d151e": "lowMAX()", +"ca0d4c86": "changeDAIfeedAddress(address)", +"ca0d50b3": "setCurve(address,int128,int128)", "ca0d6e48": "Mariton()", "ca0d9564": "removeAdminList(address[])", +"ca0dbd8e": "multisign(address)", "ca0dcf16": "mintRate()", +"ca0e192d": "getRewardRateByReward(uint256)", +"ca0e26de": "matchBuyOrderAmount(uint256,address,address,uint256)", +"ca0e2e20": "MAX_AMOUNT_SCALE()", "ca0e5c27": "ViewProjects()", "ca0f1215": "initialSaleDuration()", +"ca0f937c": "findBalances(address,address[])", "ca0fe62a": "CryptoMemes()", "ca0fe751": "switchRankings(uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"ca10c3fa": "TokensBurned(string,uint256)", "ca1149d1": "getUserEntryStatuses()", +"ca11be69": "activate(address,uint256)", +"ca12c3f1": "pendingTrams(uint256,address)", "ca1314af": "getMax(uint256[])", +"ca134531": "updateNinjaAdd(address)", +"ca135988": "LOG_Bet(address,uint256,uint256,uint256,uint256,uint256)", "ca13b818": "setWinningTeam()", "ca13fb0f": "minInvestCents()", +"ca146284": "RetrieveToken()", +"ca14fa84": "updateStakeAuthority(address)", +"ca150fde": "sell(address,address)", "ca154008": "AssetContract()", +"ca15c873": "getRoleMemberCount(bytes32)", "ca15fb65": "getCardPower(uint256,uint256)", "ca1637f5": "getGDemocsN()", +"ca16814e": "pNetwork()", "ca169e66": "Voodka()", +"ca16dfec": "weeklyAmount()", +"ca1728fd": "setUnitCap(uint32,uint32)", +"ca1748af": "triggerWithdrawAll()", +"ca17a062": "MntpMigrateWanted(address,string,uint256)", "ca17cad1": "getBoxPrice(uint256,uint256)", "ca185022": "foundersFundAddress()", "ca1861aa": "stockCancelBuyOrder(uint256,uint256,uint256)", +"ca189370": "creatorCanWithdrawFund()", "ca18da3f": "setGender(uint8,string)", "ca18ebbf": "preICOPrice()", "ca1929aa": "LogBeerRedeemed(address,bytes32,uint256)", "ca1938e5": "houseCutPercentage()", +"ca19df0b": "getArrayStart()", +"ca19ebd9": "querySellQuoteToken(address,uint256)", "ca1a2eb4": "localPaiementConfirmation(bytes32,bytes32)", "ca1a3086": "transferChickenFrom(address,address,uint256)", "ca1a4942": "CountExecs()", @@ -115726,32 +211791,56 @@ "ca1bf69f": "froze(address,uint256)", "ca1c3bb3": "testNonExistingVoteWeight()", "ca1c8895": "setPriceOfToken(uint256)", +"ca1d004d": "addReservation(address,uint256)", +"ca1d07a2": "OnlyCallableByStakingContractError(address)", +"ca1d1d2c": "TokensBought(address,uint256,uint256,uint256,uint256)", "ca1d209d": "fund(uint256)", "ca1d6f73": "doTeamMinting(address)", +"ca1dfeb0": "EventSuicide(address,address,uint256,uint256,uint256,uint256,uint256)", +"ca1e3b1b": "_decimalsMultiplier()", +"ca1e455d": "take(address,uint256,bool)", "ca1e5bb7": "mintTokensByETHExternal(address,uint256)", +"ca1e7819": "validators()", "ca1e9738": "getPricePerToken()", "ca1ea20e": "dataMigration(address,address,address[])", "ca1eb8be": "marketaWallet()", +"ca1f908c": "updateMinterLimit(address,uint256)", "ca209c8b": "Bullexi()", +"ca2100ad": "isOriginalReferrer(address)", "ca2145a7": "CoinHot()", "ca215005": "getIndividualPrice(address,uint256)", "ca2156bd": "redenominate(uint256)", "ca2177ef": "NSPFallback(address,uint256,uint256)", +"ca2189ab": "seedPositions(uint256[],address[],address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", "ca219b16": "XsearchToken()", +"ca21d8bd": "coinAgeOf(address)", +"ca222979": "getWeightsAndSwapFee(address)", +"ca22eb3d": "overseerWithdraw(uint256)", +"ca2311be": "renounceCreator()", "ca2317dd": "changeReserveTeamRecepient(address)", "ca2322c2": "mashToken()", +"ca2326ef": "monthlyBurn()", "ca2392f8": "sell(uint8,bytes6,uint32,uint32)", "ca24034b": "deathData_v17()", +"ca24295c": "merchantStakingAddress()", +"ca246aed": "ResourcesDiscovered(uint256)", +"ca251542": "setparms(uint256,uint256)", "ca2527e5": "batchTransfer2(address[])", "ca256771": "weiPerUSDinTGE()", "ca2571af": "lockedEarningsOf(address)", +"ca2577e1": "totalPynthsInKey(address,bytes32)", "ca25bf6f": "IncubatorGlobalGas()", "ca25e9c5": "setPurchaseRatios(address[],uint256[])", "ca263a49": "registerDomain(bytes8,string)", "ca2659dc": "commitPhasesDerived()", "ca265c0f": "getCurrentSpend(address)", "ca267f28": "getRecordCount()", +"ca26b888": "CardUpgraded(address,uint8,uint256)", +"ca2719c2": "completeStage(uint256)", +"ca272cc1": "activeBonusCacl_3()", +"ca273b61": "RemoveOwner(address,address)", "ca2748bd": "transferAndFreeze(address,uint256,uint256,uint256,uint256,uint256)", +"ca275931": "initialize(string,string,address[])", "ca276c07": "updateTierMinimum(uint256,uint256)", "ca2785bf": "flushHouseFees()", "ca278feb": "VanityURL()", @@ -115759,25 +211848,42 @@ "ca27eb1c": "createListing(bytes32,uint256,address)", "ca281fd9": "renounceControl()", "ca28d2ae": "SEKCapitalToken()", +"ca28d7d2": "setBRDContract(address)", +"ca28f1a1": "replaceAdvisorAddress(address,address)", +"ca291e51": "isTokensClaimable(address)", "ca292622": "getCompany(bytes32)", +"ca2965a5": "PulledFromCirculation(uint8)", +"ca299460": "individualTransferFeeNumerator(address)", +"ca299b96": "upgrade_finish()", "ca29cae8": "bufferWallet()", +"ca29fd21": "StorageOverride()", +"ca2a1b32": "InvestmentsWithdrawn(uint256,uint256)", "ca2a2f99": "_inMoney(uint256)", +"ca2a308c": "maxRankNumber()", +"ca2aabcc": "setRelayRespondLimit(uint256)", "ca2acfff": "_getTokenAmountWithoutBonus(uint256)", +"ca2b4d68": "InvestmentWithdrawn(address,uint256)", +"ca2bdfe6": "collectAndDistributeInterest(address)", "ca2bf047": "predictPacks(uint256)", "ca2c139c": "getCurrentQuickPromoBonus()", "ca2cba95": "playerwithdraw()", "ca2cd9d3": "marketactive()", "ca2cef51": "MiningWarContract()", +"ca2cfc20": "addWhitelistedAddresses(address[])", +"ca2d0299": "encode(uint112)", "ca2d553a": "setAccessControl(address,address,uint8)", "ca2dfd0a": "removeVerifier(address)", "ca2dfff1": "notforked()", "ca2e2f49": "firstVestedLockUpAmount()", "ca2e8cc5": "markRedeemed(address)", +"ca2ec6ea": "getGlobalRewardInfo()", "ca2f281b": "FMC(uint256,string,string)", "ca2f5a07": "PubRejected(address,string)", "ca2f5cb4": "_addPauser(address)", "ca2f6487": "Zettabyte()", +"ca2f91e7": "_encode_sol_bytes20(bytes20,uint256,bytes)", "ca2fd584": "getCommanderPot()", +"ca30305e": "anySynthOrDETRateIsInvalid()", "ca30597d": "BoomstarterPreICO(address[],address,address,uint256,bool)", "ca30a279": "setTgeAsSaleAgent()", "ca313539": "EMISSION_FOR_SALESTAGE2()", @@ -115787,60 +211893,117 @@ "ca3228d7": "_updatePlayersMilk(address)", "ca325469": "destinationAddress()", "ca3261c6": "giveAuthorization(address)", +"ca32d5c6": "getSlotProgress()", "ca330563": "isRedeemed(address)", +"ca339b45": "setpublicStatePayable(uint256)", "ca33a817": "_guardianVendPrice(uint256,uint256)", +"ca342058": "sendETHToTreasury(uint256,address)", +"ca34333b": "openedCountryTeller(bytes2)", "ca343d2b": "getICOBonusAmount(uint256,uint256)", +"ca34857d": "pool3percentage()", "ca34a0e3": "iterate_next(uint256)", +"ca34e185": "approve_213(address,uint256)", "ca34e1d6": "WineMarket(address)", +"ca34e3c6": "inviteCodeMap(bytes4)", "ca35271c": "numDebtors(address)", +"ca35947d": "submitRing(address[2][],uint256[7][],uint8[2][],bool[],uint8[],bytes32[],bytes32[],address,address)", +"ca35ae54": "addTicket()", "ca35bff2": "setCaps(uint256,uint256,uint256,uint256,uint256)", +"ca35ce63": "levelprice(uint256)", +"ca360e9c": "hostowner()", "ca36226d": "removeCrowdsaleContract(address,address)", "ca3654e7": "requestBonus()", "ca36695c": "setUsdPerEth(uint256)", "ca368538": "randN()", +"ca36a307": "allocateToken(uint256)", +"ca370d72": "adminWithDraw(uint256,uint256)", "ca37a9eb": "setWeiPerCent(uint256)", "ca37dfad": "crossBalance()", "ca37f7d9": "reserverWallet()", "ca386496": "setPassword(string,string)", "ca392c49": "setPreITO(address)", +"ca392e0e": "govSetContractWhiteList(address,uint256)", +"ca399671": "maxAllowed()", "ca39e5ef": "fight(uint256,uint256)", +"ca3a1e69": "getTokenIds(address,uint256[])", +"ca3a3654": "calcCanBuy(uint256)", "ca3a3f0d": "_payTicketByEarnings(uint256,address)", +"ca3a8fc1": "alcoholics(uint256,address)", "ca3aa607": "LendToken()", +"ca3b3a1c": "INITIAL_GROWTH_NUMBER()", "ca3b5c91": "hasRelation(bytes,bytes,address)", "ca3c7519": "getReffName(address)", +"ca3c80db": "registerNewVaultAddress(address)", "ca3c8e11": "BRONZE_AMOUNT_NDC()", "ca3c9147": "ownerHistoryEntry(uint256,uint256)", +"ca3d1598": "initiate(address)", +"ca3d409f": "win(uint256,bool,uint256)", +"ca3d5039": "ROUND_1_CAP_MIN()", +"ca3d6539": "addLiquidity(address,address,uint256,uint256,uint256,uint256,address)", "ca3dd175": "approveAuthority(address)", "ca3e1176": "DaoRulesProposals(uint256)", "ca3e1733": "ico1Tokens()", "ca3e5333": "isFundManager()", +"ca3e8ce1": "setCharacterAttributes(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"ca3ea930": "dividendBalance_()", "ca3fc092": "CheckPrivilegeAccomplishment(uint256)", +"ca3fc1f5": "proposalEnded(uint256)", "ca4028da": "BabyBorn(string,uint256)", +"ca40808d": "TimeLockDefaultChange(uint256)", "ca408e14": "publishSerie(string,string,string,string)", +"ca40ab7d": "UpdatedPartnersReleaseDate(uint256)", +"ca40c419": "kick(uint256,uint256)", +"ca40f674": "PLAN_INTEREST()", "ca414006": "setData_11(string)", +"ca418927": "ClosedManually()", +"ca41bb10": "mfwejde()", "ca41d16f": "SMTfundAfterPreICO()", +"ca41ea04": "getUserProfitMakingEth(address)", "ca4223ad": "LATIME()", +"ca4229ad": "icoEndTimes(uint256)", +"ca42415b": "swapExactETHToTokens(uint256,uint256,address,address[],bool[])", "ca42afda": "getGErc20ToDemocs(address)", +"ca42fb88": "alertTime3()", +"ca430519": "recall(address)", +"ca431341": "totalPayout(address)", +"ca433331": "enterNewBid(string)", +"ca435e7f": "Transaction_Item_WithToken(address,uint256,uint256,uint256)", +"ca436ea4": "_QUOTE_()", "ca43801a": "SelfDesctructionContract()", "ca4398e3": "StellarToken(uint256,string,uint8,string)", "ca43b191": "armySatelitesCount(uint256)", +"ca43f313": "_openTrade()", "ca4401f1": "investor_addRefBonus(address,uint256)", "ca440ca3": "decimalDiv(uint256,uint256)", "ca441b85": "randomBlockStart(uint256)", +"ca4429f0": "updateReserveInterestRatesAndTimestampInternal(address,uint256,uint256)", +"ca443e8b": "slotResults(uint256)", "ca446dd9": "setAddress(bytes32,address)", "ca448a88": "revokeAsset(bytes32,uint256)", "ca44c8e4": "testMemoryIntegrityCheck4Bytes()", +"ca459e4b": "setDecimals(uint8,uint8)", +"ca45d516": "getRegisteredOracleByIndex(uint256)", +"ca46aec7": "txtPrice()", "ca46e41f": "CROSAIR_VOUCHER_LIMIT()", +"ca471f3f": "getminerLpTokenListData(address,uint256)", "ca4742f1": "getRN(uint256)", +"ca47434d": "BookingChanged(string,uint256[],uint256,address,bytes32)", +"ca47b390": "_setBonusDistribution(uint256)", +"ca48122a": "claimAllTokens(address[])", "ca482264": "GetApplicant(uint32)", "ca482849": "_finalSupply()", "ca4858af": "evacuateTokens(address)", "ca48b0be": "setupToken(address,address,address)", +"ca48db1c": "Call(uint8,address,string)", "ca4938fb": "totalFreezed()", "ca495022": "weiFromExchange()", +"ca497d52": "userVotesDistribution(address,uint256)", +"ca49815e": "HEXcontract()", +"ca49f47c": "decodeStaticCallAssetData(bytes)", "ca4a0298": "maxAirDrop()", "ca4a2bf7": "NewTokensSold(uint256,address,uint256)", "ca4a3df3": "winlose()", +"ca4a74ef": "ckAddress()", "ca4b208b": "developer()", "ca4b4fd6": "remove(bytes32[],bytes32)", "ca4bb2b5": "printAllProducts(uint256)", @@ -115849,100 +212012,177 @@ "ca4c8fc6": "OneTestCoin()", "ca4cbf67": "getUint(address,string)", "ca4d1435": "GWGF(uint256,string,string)", +"ca4d1774": "_recoverAddress(bytes32,bytes)", +"ca4d663b": "UniV2()", "ca4e02d0": "Jump(address,uint256,uint256)", +"ca4e0c19": "validRange(uint16,uint256)", "ca4e4863": "VECTORZILLA_RESERVE()", "ca4f0911": "preICOPush(address,uint256)", +"ca4f2f25": "NewPendingAdmin(address,address)", "ca4ff630": "priceForStage(uint8)", +"ca506993": "Unfreeze(address)", +"ca50ad91": "noPOSRewards(address)", +"ca5105ee": "companys(uint256)", +"ca510ede": "forward(bytes,address,bytes,address)", +"ca510f32": "minBuyTokenPerUnit()", +"ca5140c9": "returnBook(uint256)", +"ca51750e": "endFarmingByToken(address,address,address)", +"ca517731": "cancelAndRefundFor(address,uint8,bytes32,bytes32)", +"ca525821": "activateTrait(uint256)", "ca5271a1": "funcWithoutArguments()", +"ca52bf45": "managersRemove(address[])", "ca52cc86": "CollectibleOffered(uint256,uint256,uint256,address,uint256)", "ca53135a": "min_bet()", +"ca537dc9": "lastCrossoverConfirmationTimestamp()", "ca5397c7": "cancelSellOffer(uint32)", +"ca53de48": "remove_employee(uint64,address)", +"ca5412fd": "siteSet(uint256,uint256)", +"ca544213": "parseByteCode(bytes)", "ca5450ce": "any_customer_payments_yet()", "ca5454db": "createTransferAgreement(uint256,uint256,address)", +"ca54cdc3": "setMaxPenalty(uint256)", "ca54ea4e": "pointOf(uint256)", +"ca54f06d": "createKey(address)", "ca5541c1": "nextRoundReserve()", "ca555f2c": "setInitLockedAccount()", "ca558b25": "DataContacts(address)", "ca55954c": "getTokenHolder(uint256)", "ca56106c": "testCopy()", "ca561d4d": "KiemTraNamNhuan(uint16)", +"ca571ce6": "isAdminApproved(address)", "ca579642": "GroupBuy(address)", +"ca57bf6a": "getTierProbabilities(uint256,uint256)", "ca585774": "RewardForum(uint256)", "ca588f14": "delAdmin(address,address)", "ca58a06c": "managerKey()", +"ca58b198": "inflationMonitor()", "ca58d2b4": "FUNDS()", "ca58da1a": "changeReserve(address)", +"ca58f2a2": "set(uint256,uint256,uint32,bool,bool)", +"ca5946f7": "lots(uint32)", +"ca595b9a": "validateOrderParameters_(address[7],uint256[9],uint8,uint8,uint8,uint8,bytes,bytes,bytes)", +"ca59621b": "toggleAllocsForCollatDB()", +"ca59a4e7": "LogFinishPreSaleRound(address,address,address,address)", +"ca59ea8c": "canaryOwnershipTransferred(address,address)", "ca59f45b": "transferRecord(bytes32,address,uint256)", "ca59fa8d": "_distributedTo(address,uint16)", "ca5a3b4a": "isAllowedWhitelist(uint256,uint256)", "ca5a3f38": "getDaysPassedSinceLastRefundBallot()", "ca5a899c": "totalStashedPayouts()", +"ca5a8b21": "addRecordWithSignature(string,string,string,uint256,string,string,string,string,address)", +"ca5ab9f9": "tokenInput(address)", "ca5adadc": "processEthPulicFunding(address)", +"ca5b0218": "setZrxProxy(address)", "ca5b4207": "log8(uint8)", "ca5b428f": "Police_2()", +"ca5b648b": "updateMaxTotalWinnerTickets(uint256)", "ca5b8a52": "REGULAR_CATEGORY()", +"ca5be7d6": "GameStarted(bytes32,address,address,uint256)", +"ca5be808": "updateVaultConfig(uint256,uint256)", +"ca5bf5ca": "encodeCollectibleData(uint256,uint256,uint256)", "ca5c058d": "founderTokensLockedUntil()", "ca5c1547": "preSaleFirstPrice()", +"ca5c6e95": "getRefCommission()", "ca5c7a34": "getLand(int256,int256)", "ca5c7b91": "lockedSupply()", +"ca5ce2ec": "liquidate(address,address,address)", "ca5d0880": "airDrop()", +"ca5ddcf3": "updateRequestDetails(address,address,bytes32,uint256)", +"ca5e1f8d": "isLegacy()", "ca5eb5e1": "setDelegate(address)", +"ca5f001f": "createMarket(uint256,bytes32,uint256,uint256,uint256,bytes32)", +"ca5f11b1": "downcastToUint64(uint256)", +"ca5f301e": "etherFundsOf(address)", "ca5f4282": "amountWanted()", +"ca5fe129": "setPower(uint8,uint256,uint256,uint256,uint256,uint256)", +"ca5ff780": "executeAction(bytes[],bytes[],uint8[],bytes32[])", "ca607c4e": "transfer_other(address,address,uint256)", "ca60f409": "CurrentIcePrice()", "ca61295b": "removeFRA(address)", "ca615662": "testFailCreateWithForeignParentNotInUse()", "ca6158cb": "itemId()", +"ca61b123": "get_pending_rewards(uint256)", "ca61cdac": "testSub()", "ca61e9b3": "verifyHashWithPrefix(bytes32,uint8,bytes32,bytes32)", "ca621ac3": "DEVELOPER_RESERVED()", +"ca62270e": "longPositionSize()", +"ca624ed1": "voteDetailsUser(address)", "ca626232": "exchangeAdapterManager()", +"ca627eb9": "priceUnit()", "ca628c78": "withdrawToken()", +"ca62a099": "_feeAccount()", "ca632cc5": "bountyPaid()", "ca639025": "getNujaRegistry()", "ca63a55b": "getHotelsLength()", "ca63b5b8": "freezingCount(address)", "ca63f057": "DISCOUNT_STAGE_ONE()", "ca6490cf": "elementFunction()", +"ca6492e4": "registerFile(string,string,string,string,address)", "ca64a02d": "withdrawBalances(address)", "ca64a095": "viewNextRelease(address)", "ca64ad89": "getNotPayableTime(uint256)", "ca64cd34": "marketCapRed()", +"ca64f9e7": "getStakeManager()", +"ca650a89": "transferFromIt(address,address,uint256)", "ca6528cc": "increaseBalanceOrWithdraw(address,address,uint256,uint256)", +"ca659a5e": "explorePending(address)", +"ca65be0b": "fxs_eth_oracle_address()", +"ca65d3fa": "setVaultThreshold(uint256)", "ca6649c5": "joinGame(uint256,uint8)", "ca668eb2": "MyERC20Token(string,string,uint256,uint256)", "ca66a9c7": "blocktubeCoin(uint256,string,uint8,uint256,string,string)", +"ca66ac84": "placeS(uint8)", +"ca6702cc": "getRegisteredPointLength()", "ca67065f": "tokensAreFrozen()", "ca67628f": "presaleFemaleEnd()", +"ca67bc02": "isValidResourceToken(address)", "ca68968e": "ConversionRates(address)", "ca68a45d": "createLastWill(address,string,string,string,uint256,uint256)", +"ca69583b": "rateAdmin()", +"ca69584f": "startAirdropAPE(uint256,uint256,uint256,uint256)", "ca698873": "countWhitelists()", "ca699de1": "StagedRefundVault(address)", "ca69e323": "maxToken()", +"ca6a3eb9": "boostedRewardsSecond()", +"ca6a48c2": "jars(address)", "ca6ad198": "oraclizeMinCallbackGasPrice()", "ca6ad1e4": "setCustomGasPrice(uint256)", +"ca6b229d": "cldrnPerBlock()", "ca6b72fd": "XtracoinToken()", +"ca6c546a": "VaultAccounts(address)", "ca6c7400": "getBuyerSignature(string)", +"ca6cf001": "balanceOfYCRV()", "ca6cf796": "startWinery(string,string,string,uint256)", "ca6cfd95": "_createToken(string)", "ca6d56dc": "addMember(address)", "ca6d5d0c": "getLockedTokensInGroup_(address,uint256)", +"ca6ddbae": "lendingPool(address,uint256,address)", +"ca6dea5a": "LogPreSaled(address,uint256,uint256)", +"ca6e648a": "AvailableIncreased(uint256,uint256,uint256,uint256)", +"ca6e822d": "Ping()", +"ca6f0007": "uniqueUserId(address)", "ca6f8295": "RDOToken()", +"ca6fe7d3": "end(uint256[])", "ca7044c3": "RelentlessConscience2Token()", +"ca706e2f": "GetProjectTotalMoneyCollected(uint256)", "ca708230": "funnel()", "ca709a25": "getFeeToken()", +"ca70fc41": "LODGE_ROLE()", "ca710013": "hasAllowanceToRecieveTokens(address,address)", "ca7140ad": "playerForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"ca71b594": "playerRoundInfo(address,uint256)", "ca722cdc": "settleBet(uint256,bytes32)", "ca7230e9": "transferFromRegister(address,uint256)", "ca7275cc": "SpiceHours(address)", "ca733c32": "commandAddress()", "ca73419e": "addAddressesToBlacklist(address[])", +"ca736a1c": "harvest(address,uint256,string)", "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()", +"ca7541ee": "getOwersLength()", "ca758f42": "stcMaxBonus(uint256)", "ca75b954": "PRESALE_HOLDER()", "ca75cbfe": "submitTransaction(address,uint256,address)", @@ -115952,18 +212192,26 @@ "ca76e548": "updateRest()", "ca76ecce": "gettotalBondDivs(uint256)", "ca7729f7": "_parseIntScientificWei(string)", +"ca774c88": "checkHasPermissionForPack(address,uint256)", +"ca776b66": "referralSale(address,address)", "ca77a6e8": "handleALU(uint256,int256,uint256,uint256,uint256,uint256)", "ca77ab65": "calculate()", "ca77ab8a": "getNextFile(bytes)", +"ca77b2d3": "token0Out(uint256,uint256,uint256)", "ca77ba31": "totalIssuanceCurrentBalanceSum()", +"ca77d454": "addRewardNftFixed(uint32,uint128,uint128)", "ca77ea25": "createTokenByAtes(address,uint256,string)", +"ca7873a5": "setBtf(address)", "ca78e65b": "disableManuallyMintTokens()", "ca790380": "AstatosToken(address)", "ca792754": "_assign(address,uint256)", "ca79e2f2": "mintLongTermTokens(address,uint256)", "ca79f967": "abortInactiveFight(uint256)", "ca7a08ef": "compensate(address)", +"ca7a982f": "SelectWinner20(address)", "ca7b15da": "tokenRate5()", +"ca7b6932": "setFarmingVaultAddress(address)", +"ca7bf822": "variableFeeRate()", "ca7bfc5d": "FinanceChain(uint256,string,string)", "ca7c4dba": "getEtherPrice()", "ca7c4e35": "OmenoToken()", @@ -115971,21 +212219,42 @@ "ca7c9296": "calculateFundedValueTokenToken(address,address,uint256,uint256,address,uint256)", "ca7c95f2": "PRE_SALE_20_BONUS_MIN()", "ca7ca5b4": "removeMember(address,bytes32)", +"ca7ce4e8": "bits(uint256)", "ca7d18fe": "CORPayCoin()", +"ca7d34b6": "totalValidatorStake(uint256)", "ca7dc5b1": "getNumberOfTweets()", +"ca7e0835": "adminClaimableTime()", "ca7e321f": "startBuyBackDate()", +"ca7e323c": "_currentSaleToken()", "ca7e88ba": "setOutcome(bytes32,uint8)", +"ca7e9d73": "account_table(address)", +"ca7ee8a0": "studio()", +"ca7f171a": "editWithdrawFee(uint256)", +"ca800144": "giveAway(address,uint256)", "ca80b489": "setGenes(uint256,uint256)", "ca8127d4": "tradingFeeModifiers(address,address)", +"ca8160d7": "totalVirus()", "ca819d35": "getUserIDByWallet(address)", +"ca81c8f1": "setNotAllowInterTransfer(bool)", +"ca824064": "allocatorContract()", "ca82a7c8": "rentModified(uint256)", "ca82b5aa": "playBps(uint8)", +"ca837b9e": "yourStakedXFI(address)", +"ca84463d": "willbuyInfo(address,uint256)", +"ca848149": "getFinalBaseCollateralPrice(uint256,uint256)", "ca84c176": "bonusAfterPresale()", "ca84d17d": "payLeaderAndDev()", +"ca84d591": "STAKE(uint256)", +"ca854912": "_voterStateFor(bool)", "ca855a57": "SecureEgg()", +"ca858f45": "addCardMintedWithAmount(uint256,uint256)", +"ca8594d3": "priceOracle(uint256,address,address)", "ca85dbfc": "quickSetStarterClasses()", +"ca85fd35": "BONUSONE_MULTIPLIER()", +"ca8605e5": "NewToken(uint256,string)", "ca862298": "BitcoinWorld()", "ca8695a4": "resetNewTokens()", +"ca877aac": "EndGame(address,address,uint8)", "ca8786c9": "bacancyToken()", "ca879753": "burnMe()", "ca87cb2a": "MRASToken()", @@ -115993,65 +212262,118 @@ "ca87eb50": "Seo(address,uint256)", "ca8836d2": "isPending(uint256)", "ca88552d": "stock(address)", +"ca8858d7": "transferOwnershipRedEnvelope(address)", "ca887dc4": "getAllGameStatistic()", "ca88a7b0": "_shareToReferer(address,uint256,uint256)", "ca88b3b2": "destructAll()", "ca88bd5b": "isAccountBlocked(address)", "ca88c5bd": "_getChallengeSuccess(uint256,uint256,uint256)", +"ca8973a7": "LogParticipant(address,uint256,uint256,uint256,uint256)", "ca899878": "depositForRelay()", +"ca89f4e4": "cardIndex(uint256)", +"ca89f64d": "UserToGroupAdded(address,bytes32)", "ca8a2c08": "createEstate(int256[],int256[],address)", +"ca8a3bc0": "getFunderAmount(uint32)", "ca8ab933": "countInstructors()", "ca8b39c8": "setRegionBlockUpdatedAt(uint256,uint256)", "ca8b42e4": "max_index()", +"ca8b5d12": "setAnimal(string,string,string,string,string,string,string)", +"ca8c2746": "updateAaveRepayment(address)", +"ca8ca80a": "requestAlarmClock(uint256)", +"ca8e2bdd": "loadedContracts(uint256)", +"ca8e35af": "getNFO()", +"ca8e6c03": "setTotalAllocPoint(uint256)", +"ca8e8fe9": "MAX_ETH_POOL_SEED()", "ca8ee75a": "read_u8_array()", +"ca8f3a41": "setAccpetToken(address,bool)", "ca8f8ff3": "isExist(uint256)", "ca8f9651": "voterVotingTime(address)", +"ca901ca9": "addRewardToken1155(uint32,uint256,uint256)", +"ca91c560": "isBlueAccount(address)", "ca922078": "fundingStage(bytes32)", +"ca925fd1": "userLastLevelForTokenInContract(address,address,address)", "ca929e12": "transform(uint8,uint8)", "ca92a136": "result_hash()", +"ca92f517": "agentRewardAmount(address)", +"ca93068e": "hatcheryTurtles(address)", "ca940bba": "getPastBet(uint256)", +"ca943837": "setRelayerCost(uint256)", "ca94452d": "setCrowdsaleTransfer(address,uint256)", "ca94692d": "abiSignature()", +"ca948e74": "calculateCollateralValue(address,uint256)", "ca949a1d": "blackjackValue(uint8)", "ca94a927": "UnicornManagement(address)", "ca95402d": "ExpRegistrar()", +"ca95a200": "amountReleaseInOne(address)", +"ca964a44": "_ensurePaymentAmount(uint256,uint256)", +"ca964f6d": "auction__finalPrice()", "ca965c3f": "transferCEO(address)", +"ca969f23": "removeShortableSynths(bytes32[])", "ca96d7fc": "claim(bytes32,bytes32,uint8)", "ca970bac": "donateDivs()", "ca972cd4": "registerNewAccount()", "ca97a248": "MoveRerolled(uint256,uint256,uint256)", "ca97d274": "updateTokens3PerEth(uint256)", +"ca97f520": "initV2()", +"ca9833e0": "reducirMontoHerencia(uint256)", +"ca986a11": "IFY()", +"ca988cba": "approve_668(address,uint256)", +"ca98beff": "requireNotFrozen(uint32)", "ca990859": "getPlayedInfo(address)", +"ca9969ef": "ProtectionTxCancelled(bytes32)", "ca997200": "getForecastData(bytes32,bytes32,bytes12,uint8)", +"ca998f56": "workerToManager(address)", "ca9a06df": "calcReservedTokens(uint256,uint256)", +"ca9a3fd1": "dodajStudenta(address,string,string,uint256)", "ca9a9386": "getNickname(address,address)", +"ca9b48b3": "removeRoles(address[],string)", +"ca9b7b71": "bidAndWithdrawWithEther(address,uint256,bool)", +"ca9c0bad": "setRandom(address)", "ca9c2862": "getCrydrController()", "ca9c4b33": "hatchEgg()", +"ca9c9869": "lastWinningColor()", "ca9ccd3d": "secondRoundTime()", +"ca9cdd1b": "APR(uint256,uint256,uint256)", +"ca9ce291": "cancelStake()", +"ca9cf52e": "MonthlyEarning(address)", "ca9d07ba": "refill(uint256)", "ca9d0f8d": "process2(uint256,address)", +"ca9d39ee": "upgrades(address)", +"ca9d6deb": "payTokenMapping(address)", "ca9defb7": "ownerTransferZTH(address,uint256)", "ca9e1993": "_transfer()", +"ca9e3d4f": "deployTokenContract()", "ca9ec138": "toEthSignedMessageHashBytes(bytes)", +"ca9ece35": "pullFundsMinThreshold()", "ca9efc73": "left81(uint256)", "ca9f0803": "reservedInvestors(address)", "ca9fa49e": "halfyearteam_trade_date()", +"ca9ff922": "removeERC20Token(address)", +"ca9ffe94": "computeAddress(bytes32,bytes)", "caa02e08": "winnerCount()", "caa035d6": "getTokenSaleType()", "caa03a3e": "getPlayerId(string)", "caa0f0af": "devAllocateTokenInMinutes(address,uint256,uint256)", "caa0f92a": "getNextTokenId()", +"caa14707": "whitelistPlugin(address)", "caa14e36": "setGiveBirthType(bool)", +"caa19168": "getRandomCard(uint8,uint16)", "caa25756": "registerProductContract(address,address)", "caa3b6e4": "TicTacToe()", "caa3d559": "TRCExchangeRate()", +"caa3f820": "assignedBonusRates(address)", "caa4041e": "getAccountLimit(address)", +"caa43c30": "nexID()", "caa4c5d0": "assumeControl()", +"caa4d061": "TIDE()", "caa5aba2": "ConfigurableParameters(uint256,uint256)", "caa648b4": "getTotalValue()", "caa67873": "CreateKDT(address,uint256)", +"caa6d21a": "getAccountVaultCounter(address)", +"caa6ed8c": "setPublicSellLength(uint256)", "caa6fea4": "emergency()", "caa7590d": "MIN_INVEST_BOARD()", +"caa76a5b": "totalReclaimAmount()", "caa774ed": "petOnLeaderboards(uint64)", "caa7b4b8": "ABToken(uint256,string,uint8,string)", "caa7be13": "ClientPaymentEvent(address,uint8,uint8,int256)", @@ -116059,15 +212381,21 @@ "caa82ab2": "TokenSendFail(uint256)", "caa872ae": "_takeAll(address,address,uint256)", "caa877e7": "buyFor(address,address)", +"caa8c8cf": "__RajaToken_init(uint256)", "caa8e084": "div(uint32,uint32)", +"caa95756": "calculateTransferFromFee(address,address,address,uint256,address)", "caaa2045": "addressToNumTowns(address)", "caaacb12": "totalForMining()", "caab0acc": "testThrowCreateRetracted()", "caab21d2": "Ore()", +"caab2dab": "removeERC721Token(address)", "caabe889": "inAllocationLockPeriod()", "caac87d0": "airdropPlays()", "caad5b18": "withDrawEther(uint256)", "caade55b": "AddrPartnerPocket()", +"caae144a": "messageRecipient(bytes32)", +"caae4184": "calculateetherReceived(uint256)", +"caae42d5": "assetMarketSettings(address,bytes32)", "caaed302": "rejectMilestone(uint256)", "caaee91c": "setProxyOwner(address)", "caaf2dd7": "getInitialAnswerResult(uint256)", @@ -116078,7 +212406,14 @@ "cab067c0": "initialiseCrowdsale(uint256,uint256,address,address)", "cab09273": "getUsedPaymentSupply()", "cab0f632": "changeSponseeAddress(address)", +"cab16940": "expRewards(uint256)", +"cab17046": "MinETHInvest()", "cab17220": "VotesNecessary()", +"cab19f7c": "getCA(address)", +"cab22fa8": "approve_489(address,uint256)", +"cab2e805": "setCallRestriction(bool)", +"cab3389b": "updateTVLAddress(address)", +"cab34c08": "REWARD()", "cab36e92": "addHash(uint256,string)", "cab37586": "partnerWithdrawed(address)", "cab39db9": "_updatePhase(bool)", @@ -116089,54 +212424,111 @@ "cab5c0f1": "_incrementState()", "cab60267": "getGameCalculatedStats(uint256)", "cab63661": "setPublisher(address)", +"cab64bcd": "rewardReserve()", +"cab666d0": "musd()", +"cab68138": "currentPercentage()", "cab6eade": "_destroyDeed()", +"cab6ebc4": "reverse(address,address,uint256)", +"cab74c0d": "noOutput(string)", "cab7e3d9": "purchaseCars(uint256,uint256,bool)", "cab7f0cc": "test_insert_findWithHintNextRemoved(int256)", "cab7f521": "invoke()", +"cab88ed8": "BIDDING_PRICE_RATIO_PERCENT()", "cab896dc": "gameCost()", "cab925a3": "BurnReceipt(address,uint256)", +"cab93b51": "quickScope(address,address[],uint256,uint256,uint256)", "cab9c32a": "sellLimit(uint256,uint256)", "caba203d": "Loyalty()", +"cabac91c": "registeredPoints(uint256)", +"cabb001f": "transferFromIncentivising(address,uint256)", +"cabb37a9": "fCashtoCurrentCash()", "cabb3a3a": "isAlphaNumeric(string)", "cabc0f43": "isLotteryOpen()", "cabc6589": "awardWinnings()", +"cabc6f14": "createYesNoMarket(uint256,uint256,address,address,bytes32,string,string)", "cabc737c": "_addMaster(address)", +"cabc9366": "UNIPAIR()", +"cabc9657": "adjustTitanBonus(uint256)", "cabcaaa0": "associateWithFile(bytes32)", "cabd27de": "Motion(address)", +"cabd4fae": "settle(address,uint256,uint256[])", "cabd734f": "reject(bytes32)", +"cabd9fed": "cbondsMaturingByDay(uint256)", "cabe0452": "getCampaign(bytes32)", "cabe2c0a": "levelEndDate()", "cabf72e5": "WSBCCoin()", "cabf8493": "balancesImporter4()", +"cabfaa18": "getParticipantsCount()", "cabfb934": "replace(address)", +"cabfc903": "getSwapOutput(address,uint256,address)", "cabfd1bf": "allocateTokens(address)", +"cac03009": "ClaimedTokens(address,address,uint256,uint256,uint256)", "cac07bbf": "distributeTeamCut(bool,uint256)", +"cac0feb1": "ZapIn(address,address,address,address,uint256,address,address,bytes)", "cac12d2d": "tokenGenerationCap()", +"cac1d649": "setMaxGasPrice(uint128)", +"cac21ea7": "getMonthlySupply(uint256)", +"cac236f7": "setWithdrawalFeeFreePeriod(uint256)", +"cac24c63": "markToken()", +"cac27a9e": "changeUnlockTimer(uint256)", +"cac2ac4c": "updatedetails(address,uint256,string,string,string,uint256,uint256,string,string)", "cac35112": "tokenRelease()", "cac37f93": "totalTokensWithdrawn()", +"cac39a05": "contractMap(bytes32)", "cac3e64a": "checkToken()", +"cac3ed26": "Claim(address,address,address)", "cac3f6c9": "percOf(uint256,uint256,uint256)", +"cac42c99": "setPublicKey(bytes,bytes32)", +"cac43479": "log(address,bool,bool,bool)", +"cac49772": "citizenContract()", +"cac4fab1": "DUCK()", +"cac4fbdb": "testOneIncrement()", +"cac55647": "addBuyerToWhiteList(address)", +"cac5b114": "claimMon()", +"cac5c512": "markCompleted(uint256)", +"cac5f753": "setReceiverA(address)", "cac625e6": "transferTokenOwnership(address,address,uint16)", +"cac63f7f": "getUIntaggregate()", +"cac65b1d": "gTransferToBurnBP(address)", +"cac6cb89": "firstOfNextMonth()", "cac6d78f": "ToexCoin()", "cac6edd8": "rightLottery()", +"cac7495c": "getInvestment(address,address)", +"cac76ce5": "init(bytes32,bytes32,bytes32,uint256)", "cac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", "cac7db8a": "addUserToList(address)", +"cac7fb2e": "mintToFounder(address,uint256,uint256)", "cac7fc71": "allBalances(address,address,address[])", "cac8d538": "setERC20Contract(address)", +"cac8ea6c": "medianizerInstance()", "cac92fe1": "Aeroneum(address,address)", "cac952ae": "isValidCustomerTxPaymentForMCW(address,bytes32)", "cac98d6d": "getCCH_edit_24()", +"cac9986d": "getContractorsCount()", "cac9a94e": "changeWalletOwnerAddress(address)", +"cac9aa9a": "getCouponDiscountRate()", "cac9ffbd": "fillIndexedBid(uint256)", "cac9ffee": "unWhitelistAddress(address)", +"caca2516": "preferredCurrency(address)", "caca66bd": "transferPlatformship(address)", +"cacafaf3": "setAlias(bytes32)", "cacb27f4": "_D_sendToTeamEthContract()", +"cacb3a13": "contractWebsite()", +"cacb7f9f": "LGEStarted()", +"cacb93f0": "getCurrentSetting()", +"cacb96a9": "pairUNC()", "cacc24eb": "transferFromViaProxy(address,address,address,uint256)", +"cacc774a": "getSpacetimeUnitsMax()", +"cacc81eb": "Authdistributors(address)", "cacca238": "getBaseAmount(uint256)", "cacca4a0": "approveTransfer(uint256)", "caccd7f7": "developerAddress()", "caccd805": "daoPOLSKAtokens()", +"cacd67bf": "work2(address,uint256,bytes)", +"cacd7109": "ur2slow()", +"cacd73d5": "weekTime()", "cacd7a66": "creatUserID(string)", +"cacda096": "maxValidatorShares()", "cace12e6": "roundInfo()", "cace467e": "cancelSell(uint256,uint256,uint256,uint256)", "cace7bd3": "claimRewardK(uint256)", @@ -116149,46 +212541,77 @@ "cacfd8e9": "playTypes(uint256)", "cad079ed": "investedUSD()", "cad0899b": "sum(uint256,uint256)", +"cad1216e": "clientTokensWithdrawn()", +"cad167ac": "sendRejoinAndMatchingBonusPool3(address,address)", +"cad1abee": "assignSantas()", "cad1c663": "getChildOperation(bytes32,uint8,uint8)", "cad1d39b": "getPersonalAirdropUnlockTimestamp(address,address)", "cad2042f": "O2OToken(uint256,string,string)", +"cad26fd6": "unstakeAndClaimDelegated(address,address,address)", "cad27ae1": "random(uint64,uint8)", "cad283a0": "EtherBetIO(address)", +"cad29e9c": "getBalanceEquity()", +"cad3be83": "_beforeTokenTransfer(address,address,uint256)", +"cad3cbf9": "numRewardWithdrawed(address)", "cad3d24d": "calculateBoatFee(uint256)", "cad41357": "darknodeBond(address)", "cad461ea": "setWeiPerUSD(uint256)", "cad4ae37": "_addToBlacklist(address)", +"cad4f588": "createLiquidation(address,address,address,int128,address[],uint256,uint256)", +"cad577ee": "removeAddressToNeedLockUpList(address)", +"cad58448": "addrPids(address)", +"cad5cd3c": "PWDR_TO_MINT()", "cad60d17": "freezeTokens(uint256,uint256)", "cad66781": "NumOfStudentsRequests()", +"cad67971": "depositWeiPatron(address)", +"cad68599": "queryPoolInfo(uint256,address)", "cad6dd1f": "sumPreICOUSD()", "cad7214d": "supplyRound4()", +"cad7a58b": "hatcheryBanker(address)", "cad80024": "left58(uint256)", +"cad88842": "createCandidateWithERC20ForUser(string,address,address)", +"cad8dd71": "updateAnimal(uint256,string,string,string)", "cad916ec": "DEVELOP_CAP()", "cad93688": "Test2(uint256)", "cad9639d": "DEXK()", "cad9642b": "getReportCount()", "cad987f5": "updateAppreciationStep()", +"cad9acb5": "awardOrder(string,address,uint256)", +"cada4b19": "nvtContract()", +"cada9162": "GateOpened(address,address)", "cadaacbf": "g(address)", +"cadad40f": "withdrawTokensWei(uint256)", +"cadae002": "getMonaPerEth()", "cadb1166": "modifyWhiteList(address[],bool)", "cadb3031": "timeoutY()", "cadb48d9": "contractCreationBlockTime()", "cadb5236": "vestToAddressEx(address,uint128,uint8,uint32)", +"cadbe820": "raffle(string)", "cadbead4": "Pentacoin()", +"cadc8d9a": "claimsByPerson(address,uint256)", "cadc958f": "VoteOnTransferStarted(address)", "cadca796": "setShareHolders(bool,uint256,uint256)", "cadcbce4": "PartComplete()", "cadd888b": "getRewardToken(uint256,uint256)", +"cade3476": "sellTo(address,uint256)", "cade3a5d": "_createPixel(uint24,uint32,address)", "cade4f31": "collected_crowd_vitas()", +"cade57b9": "mostEntryCount()", "cade77fa": "readAddress(address)", +"cadebfcd": "_getDaiAddress()", "cadec1b2": "Registrar(address)", +"cadecd69": "feePrice(uint256)", "caded61f": "saleRatio()", "caded711": "subOpenRoomCount(address)", "cadf338f": "valueOf(uint256)", "cadf74e2": "_unclaimedChickenOf(address)", +"cadfaddb": "isSettingsManager(address)", +"cadfff91": "lookupDocument(bytes32)", "cae039eb": "getWishTime(uint256)", "cae07d2a": "TOKEN_SCALE()", +"cae130ab": "ZitetagUpdate(bytes32,string,string)", "cae15051": "tokenReceived(address,uint256)", +"cae16183": "gwtb_usdt(address,uint256)", "cae20b59": "getAnimalIdsWithPendingCostume()", "cae21530": "fightZeroMonster()", "cae270b6": "sell(address,address,uint256)", @@ -116201,11 +212624,18 @@ "cae523c1": "testOwnedTryAuthUnauthorized()", "cae57913": "addTwo(uint256)", "cae5c8c3": "APP_STORE()", +"cae5f11e": "getWETH()", "cae6047f": "INVERSE_BASIS_POINT()", "cae61d2e": "offer(string,uint256,uint256,address)", +"cae65058": "deleteCountry(string)", +"cae6738e": "forEMOONholdersv1(address)", +"cae67510": "setOneSplitSlippageMin(uint256)", "cae6b9c5": "tapPoll()", "cae6ff18": "SKPT()", "cae774b3": "maxInterval()", +"cae81e6e": "getCollFactors(address[])", +"cae86089": "otherReserveValuePerBlock()", +"cae88f98": "depositEthWithSeller(address)", "cae8e284": "newProposal(address,uint256,string,bytes32)", "cae8eb2f": "ctrtToken()", "cae96610": "WorldWifi()", @@ -116218,213 +212648,397 @@ "caeb2e2c": "_emitSkillAreasSet(address,uint256)", "caeb30e9": "Configurator()", "caebb256": "channelManagerByAsset(address,address)", +"caebb25f": "emergencyUBXGTransfer(address)", +"caebf4eb": "fetchPresalePrice()", +"caebf872": "hugeetherinvest(uint256)", "caec390e": "getinfolaff(address)", "caec3c79": "getBatchTransfer(address,address)", +"caec8347": "daiJoin_join(address,address,uint256,bool)", "caecc5aa": "turnrefund()", +"caecef1e": "internalViewFunc(uint256)", "caed4f9f": "DataService()", "caed80df": "registries(address)", +"caedb681": "getAllCardByAddress(address)", +"caedf410": "clashingInitialize(uint256)", "caee04b5": "AddGameCategory(string)", "caee1daf": "creationRateOnTime()", "caee262c": "sharesRec(uint256,uint256)", +"caee309f": "feeExemptionNormalizedDifference(uint256)", "caee3305": "firstVestStartsAt()", "caee4e18": "CommunityVotes(uint256)", "caee7c78": "grantsCreated()", +"caeed555": "ServiceRemoved(address,uint32)", +"caeee7ae": "playerToWinCounts(address)", +"caef11ad": "_DPP_()", "caef2181": "GetTimeMultiplier(uint256)", +"caef2cff": "DonationGoalReached(address)", "caef5dec": "getSubPayeesCount(bytes32)", "caef6a84": "ETHMONEY()", +"caef92ae": "getTournamentContractAddress(uint256)", "caefb79e": "setCaps(uint256,uint256,uint256)", "caefc5d5": "SemfaxToken()", "caefdbe9": "FWDaddrETH()", +"caf050ec": "setFactor(uint256,uint256,uint256)", "caf05ce3": "isStopPlay()", "caf0887d": "split(uint256,uint256,uint256)", +"caf152c6": "blockDistancePerBonusMultiplier()", +"caf171da": "_yfi()", +"caf17269": "initialAllowance()", "caf19e5a": "toText(bool)", "caf1bb7c": "repoBase()", "caf29765": "PERCENTAGE_DIVISOR()", +"caf2f5fe": "fiveHundred()", "caf306c2": "ratePerWeiInMainICO()", "caf439cb": "angelBurn(address,uint256)", "caf44683": "test2(uint256)", +"caf46096": "Locked(address,bool)", "caf597f3": "INVEToken(address)", +"caf5c1e5": "paidTeamBonusGain(uint256,uint256)", +"caf5f67d": "clearBalance()", "caf66171": "bigRoundMaxRoundNum()", +"caf6a7b7": "contributeKAI(uint256)", "caf6cb3f": "marketDefaultFeeHigh()", "caf6e1c9": "setClosedManually(bool)", "caf6fe1a": "randomGenes()", +"caf70c4a": "hashOfKey(uint256[2])", "caf71743": "createSellOrder(address,uint256,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"caf79833": "DailyJackpotWon(address,uint256)", "caf798d7": "transferRegion(uint16,address)", +"caf7bd9c": "queryCore(address)", "caf7caf1": "_multiplyDecimalRound(uint256,uint256,uint256)", "caf807a1": "closeEth()", +"caf82789": "redeemUnderlyingAndTransfer(address,address,uint256)", +"caf8b5a0": "_requireNoCollWithdrawal(uint256)", +"caf90dab": "featureRegistry()", "caf91b30": "airdrop(uint8,bytes32,bytes32,uint256)", +"caf9b502": "payoutPoolAmount()", "caf9bf58": "getContributionsCount(address)", "cafa1cde": "PajCoin223()", "cafa22d7": "setLeftICOTokens(uint256)", +"cafa6c75": "updateTaxFeeAmount(uint256)", +"cafab289": "lpUnlocked()", "cafab7e1": "viewPetitionShareholderWithAddress(address)", "cafaed51": "deadlineParticipation()", +"cafb13cb": "getQuarterlyAvailableReward(address)", "cafb2202": "invested()", +"cafb44d4": "swap_give_token(uint256)", +"cafb9b35": "claimMinter(address)", "cafbc49d": "createProduct(bytes32,string,address,uint256,uint8,uint256)", "cafbcc8a": "inInnerScope(uint256,uint256)", "cafc0fbd": "isRegulated(address)", +"cafcc938": "seedAddr(uint256)", +"cafcd838": "setWethAddr(address)", +"cafcde56": "getLowerUpperLimit(bytes32)", +"cafce998": "setMinEthDeposit(uint256)", +"cafcf789": "_requireSingularCollChange(uint256)", +"cafd3a07": "decodeTransactionError(bytes)", "cafd3d52": "setUpCrowdsale()", "cafe0e90": "setFee(string,uint256)", +"cafe2698": "getcurrencyProposal(address)", "cafe2f19": "setReachCapped()", +"caff0730": "addPresaleAllocation(address,uint256)", "caff4b03": "Response(bytes32,uint256)", +"caffbec7": "takeOut(uint256)", +"cb003a83": "setRandDelay(uint256)", +"cb005742": "tokenStrategyAmounts(address)", "cb009d2c": "KellerWilliams(uint256,uint256)", "cb00e7f8": "MCTContractToken(uint256,address)", +"cb0134c7": "paus(uint256)", "cb0177a0": "disableAllocationModificationsForEver()", "cb0195ee": "changeDeveloperTemplateAmountLimit(uint256)", "cb01a9bf": "payRent(bytes32,string)", +"cb01bbbb": "setSushiSwap(address,uint256)", "cb01c70c": "episodesNum()", "cb01cd02": "masscreate(uint256,uint256)", "cb01f15c": "GetLogMessageWarning()", "cb01f431": "maxTokensToSaleInClosedPreSale()", +"cb01f8b3": "updateTemplate(bytes32,address,uint256)", "cb0210a0": "updateReputation()", "cb029785": "Aphrodite()", "cb02ba28": "multiSend(uint256,address[])", +"cb02edf2": "_memoizeHash(bytes32)", "cb030cee": "_reducerunmoney(address,uint256)", +"cb0316d0": "adminAddBurner(address)", "cb03e43b": "AnimalFoodToken()", +"cb03fb1e": "lastUpdate(address)", "cb040e0b": "createTemplate(string,bytes32,bool,address,bytes32,uint256,uint256,uint8,uint256)", +"cb045a96": "nextPaymentTime(uint256)", "cb04a34c": "getMarketTotalPar(uint256)", +"cb04ed53": "deployWithSalt(bytes32)", "cb05b93e": "getEth()", +"cb06247e": "addFile(string,string,string,string,uint256)", "cb076478": "getTicket(address,uint256)", "cb07b94b": "getLastRegionId()", +"cb07e6cd": "approve_393(address,uint256)", +"cb0882bc": "perpetualRenderer(uint256,string,uint256[2],int256[13],bool[3])", +"cb08a10c": "messageCallStatus(bytes32)", +"cb08e3ca": "withdrawSelector(address)", +"cb0939d2": "StartedSale()", +"cb099626": "closeMany(uint256[],address[])", "cb09abc2": "resolveProp(uint256)", "cb09b0d0": "ownerAPI()", +"cb09e7c0": "balanceOfStake(address)", "cb0a2d95": "HashtagToken(uint256)", "cb0a3889": "setPreIcoStart(uint256)", "cb0ab425": "getIPFSHash(address)", +"cb0abe2a": "setbootstrapStartThreshold(uint256)", "cb0b6161": "_calcRelease()", +"cb0b77f7": "pendingPIA(uint256,address)", "cb0b7b03": "setContributionMinimum(uint256)", +"cb0b8ca1": "blockDeltaEndStage(uint256)", +"cb0cb76a": "getBackupAddress(address,uint256)", "cb0cedb8": "getFineLevelOfAddress(address)", "cb0cfaa2": "finalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", "cb0d3133": "setEscrowedProjectBalances(uint256,uint256)", "cb0d3981": "getMintForReportingParticipantTargetValue()", +"cb0e0d7d": "addressToId(address)", +"cb0ebac4": "_upgradeFacadeTo(address)", +"cb0ef21d": "KYBER_ADDR()", "cb0ef7d0": "hgtRates(uint256)", "cb0f86ab": "cards_black(uint256)", "cb0fb059": "getNumberTwoArgs(address,bytes4,address,address)", +"cb0fcb52": "claimKong()", +"cb102556": "mintokenperblock()", "cb10e0c5": "getLastDuel1()", +"cb10f215": "adminSetResource(address,bytes32,address)", +"cb10f94c": "stateSender()", "cb10fa76": "safeToMul(uint256,uint256)", +"cb112131": "fieldPrice(uint256)", "cb11526d": "moving()", "cb117f0c": "approveAndCallAsContract(address,uint256,bytes)", +"cb118f22": "approve_856(address,uint256)", "cb122a09": "setFee(uint8)", +"cb128728": "TGEDate()", "cb12b48f": "me()", "cb12be81": "prometheusShipMinted()", "cb12fc1d": "LAMDEN_DECIMALS()", +"cb135fda": "dayNumberBegin()", "cb1374a2": "claimTokens(address[],uint256[])", +"cb13cddb": "deposited(address)", +"cb14382f": "setDevBreedingPercentage(uint256)", "cb146814": "baseETHBalance()", "cb149b09": "unlockWorker(address,address)", "cb14a5cf": "treeDetails(uint256)", "cb14b170": "SubscriptionModuleImpl()", "cb14d93b": "getHash(bytes,address,uint256)", +"cb151112": "OneDay()", +"cb155d1d": "showBestOffers(bool,uint256)", +"cb1560e5": "renounceBarkeeper()", "cb1579ec": "checkOrderBatch(uint256[48])", "cb15d07b": "getOfferAmount(uint256)", +"cb1611cf": "intUsers(uint256)", "cb161f8a": "AddDiv()", "cb16415f": "fundsToOwner(uint256)", "cb1650b4": "createThread(string,string)", "cb16d4a2": "sendEther(uint256,address)", "cb16e6d0": "earlyParticipantWhitelist(address)", "cb170735": "createBools(bytes32[],bool[])", +"cb17d14f": "getPeriodFinish()", "cb192f2c": "setAdvertisingAddress(address)", +"cb1977e3": "transferAllToken(uint256)", "cb19bf53": "Testtoken5()", +"cb1a295f": "userB()", "cb1a32a4": "aotLength()", "cb1a7b1d": "tokenDelta(address,address,address,uint256,uint256,uint256)", +"cb1a8015": "burnBAEXtoERC20(address,uint256)", +"cb1a823e": "_totalFunding()", "cb1aaa31": "distributed_bounty()", "cb1ab340": "setFinancialAdmin(address)", "cb1b82b7": "getuserbalance(address,address)", +"cb1b9496": "getGasCostOfGetLiquidityForAmount1(uint160,uint160,uint256)", "cb1ba60f": "voteOnElection(address,address,address,address,uint256)", +"cb1baa09": "copiesRareNFT()", "cb1be21a": "configureWallet(address)", "cb1c2b5c": "MIN_STAKE()", +"cb1c80f8": "currentDividendsRound()", "cb1c8b6a": "purchaseDefense()", +"cb1cbbe3": "mintOnlyByNft(address,uint256)", +"cb1cbc9f": "getKFactor(uint256,uint256,uint256,uint256)", +"cb1d50a2": "initialize(address,address,address[],address[],uint256[],uint256,bool,uint256,uint256,uint256)", "cb1d8418": "getForkingMarket()", "cb1d9d63": "setENGCommunityAddress(address)", "cb1de087": "transferFromFST(address,address,uint256)", "cb1e4389": "isMajorityConfirmed(bytes)", +"cb1e4e44": "decrementDID(address,uint256)", +"cb1f8a07": "NFTMouldRoyaltyData(uint256)", "cb1fa715": "setSingleWithdraw(uint256)", "cb1faac1": "leftVotes()", +"cb1fb014": "forAirdrop()", "cb1fc276": "createPassportByOwner(address)", "cb1fc7bc": "totalSzaboInBids()", "cb207166": "LifeFactor_iv()", +"cb20a288": "SCDCAP()", +"cb217d34": "g(int256,int256)", +"cb21dc7d": "TransferKing(address,address)", "cb227cae": "getPOOL_edit_18()", +"cb22874b": "pendingHolly(uint256,address)", "cb22c0aa": "setBudget(address,string)", "cb22d392": "windowFinalBlock(uint256)", "cb22d41b": "numBeneficiaries()", "cb22fd59": "setFeeCharge(uint64)", +"cb2316a4": "setRequestURL(string)", +"cb232bec": "ethIco(address)", +"cb234dba": "HirerLastResortRefund(bytes32,address,address,uint256)", +"cb2384ce": "_unbondUnderlying(uint256)", "cb238ffa": "returnHashLong(address,uint256[3])", +"cb23a3f4": "getMaker(uint256,address)", +"cb240198": "chiGrowth()", "cb2410b9": "changeContentData(uint256,uint256,bytes32)", "cb244f65": "koreanCitizen()", "cb24e8f1": "Foorp()", +"cb2537cb": "setFeeParameters(uint256,uint256,uint256)", "cb254080": "TomToken()", +"cb254f7e": "buyETH(uint256,uint256)", "cb25d9a2": "JFDToken()", +"cb26eb74": "cleanERC()", +"cb271b59": "viewUserZREReceived(address,uint256)", "cb27bdc1": "revealDeadline(bytes32)", +"cb27c4dd": "RefundVote(uint256,uint256)", +"cb27d6b6": "getEthPerToken()", +"cb27ea96": "registerv2(bytes32,bytes32)", "cb27f28a": "endCrowdFund()", "cb282253": "totalEthContributed()", +"cb28989e": "transaToThisContract()", "cb28ba6a": "AIToken(uint256)", "cb28c716": "createKycData(address,string,string,uint256,uint256,string,string,string,string,int256,uint256)", "cb293e7a": "rentRentable(bytes32,address)", "cb294dc5": "ULTRONEUM()", "cb2971b1": "eosTokenAddress()", +"cb2971ba": "_hdcoreVault()", "cb297ef0": "_performRenewal(uint256,uint256)", "cb29881c": "createEggScheme(uint256,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"cb29b1c5": "calculateWorkTime(uint256)", "cb29eee0": "medsupply()", +"cb2b0791": "validPrices(address)", +"cb2b0d61": "stakeTokens(uint256,bytes32,uint16)", "cb2b34d6": "setSalary(uint256)", "cb2b5668": "EVBChain()", +"cb2b6d26": "withdrawMax(bytes32)", "cb2b9031": "addressToBytes(address,address)", +"cb2b9dfd": "ge(uint256,int256)", +"cb2bc9bb": "BUY_N()", +"cb2bddee": "UpdateBootyBaseEvent(address,address)", "cb2bea55": "setEmergencySecrets(uint256,uint256)", "cb2c05dc": "viewInitialPricePerShare()", +"cb2c38ed": "setWithdrawCom(uint256)", "cb2c8723": "addUtilityHolder(address)", +"cb2d3dc1": "SetManualPrice(uint256,uint256,uint256)", +"cb2d9007": "Test3(uint256)", +"cb2da07c": "emails(address)", "cb2e0814": "iii(address)", "cb2e1d10": "icoRound4()", "cb2e46f3": "endTimer()", +"cb2ec47a": "betEven(bool,uint256)", +"cb2ec549": "releaseFundsAfterDestroy(address,uint256)", "cb2ec895": "deposit(bytes32,address,uint256,bool)", "cb2f7b87": "update(uint32,uint128,uint128)", "cb2f7c49": "hashDifficulty(bytes32)", +"cb2f89d0": "mintNiftyType(address,uint256,uint256,string)", +"cb2fb17b": "getPlatformTokenFactory()", "cb2fe520": "remainingTokenBurnt()", +"cb2fea63": "ethIds(string)", +"cb300785": "request(string,string,string,string)", +"cb319db4": "blockEnd(uint64,uint64)", +"cb31ac9a": "getAllContributers()", "cb31b6cd": "multiTransferFrom(address,address[],uint256[])", "cb3204a8": "getKycHash(uint256)", +"cb32564e": "xConvert2(address[],uint256,uint256,bytes32,bytes32,uint256,address,uint256)", +"cb32ca2c": "_encode_sol_header(uint256,uint256,bytes)", "cb338436": "doSendProfits(address)", +"cb338ea8": "EPIC_RARITY()", "cb33e7fa": "doTrade(address,address,uint256)", +"cb34a805": "reservesOwner()", +"cb358efa": "UpdateAddresses(address[9])", "cb35ef2c": "demotest()", +"cb3670fa": "toReceiveCashback(address)", "cb3687df": "core(uint256,uint256,uint256,uint256)", +"cb3688a9": "runswapTokenforWETH(uint256,address,address)", "cb3694ba": "getManualInvestorsCount()", "cb379765": "tsauction(uint256)", +"cb381632": "PayoutSet(uint256,address,uint256)", "cb381b61": "teamETHUnlock1()", "cb381c3c": "setGas4Token(uint256)", +"cb3827b9": "getProof(address,bytes32)", "cb388b9b": "test_callIt()", +"cb38b223": "updateIssueFee(address,uint256)", "cb38c7b4": "getWithdrawalList(address)", +"cb390f97": "isRiskAdjusted()", +"cb3919d5": "userWithdrawBonusOnCycle(uint256)", +"cb393465": "sendETH(address[],uint256[])", "cb393ecb": "Dice5()", "cb3993be": "decreaseApprovalAndCall(address,uint256,bytes)", "cb39aafb": "validateRequest(bytes32[8],bytes,bytes,bytes)", "cb3a11f9": "withdrawUserSpecifiedFunds(string,uint256,uint8)", +"cb3a528d": "initializeNested()", +"cb3aabe0": "createPoll(uint256,uint256,string,string[],uint8)", "cb3ab271": "WYQToken(uint256,string,string)", "cb3ae150": "Playforbulktoken()", "cb3b0c79": "LotToken()", +"cb3b1bb2": "COMPOUND_IMPORT_FLASH_LOAN()", +"cb3b3325": "ALLOWLISTED_INVESTOR()", +"cb3b727c": "getRegistryType(uint64)", "cb3bc227": "LogBeerBought(uint256,address)", "cb3c28c7": "trade(address,uint256,address,address,uint256,uint256,address)", +"cb3c506a": "deploy(address,string,string,uint64,address,string,string,address,address)", +"cb3c69ce": "findWin(uint256,uint256)", +"cb3c951d": "InvestmentInETH(address,uint256,uint256,uint256,uint256,bytes32)", +"cb3ca249": "keepOpiumMax()", "cb3cb085": "validateTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "cb3ce26e": "m_owners()", +"cb3ce756": "viewStudent(int256)", "cb3cf99a": "decode(bytes,uint256,uint256,uint256,uint256,uint256,uint256)", +"cb3d0ed8": "payBorrowBack(address,uint256)", "cb3d6b5f": "devTeamWithdraw()", +"cb3db69f": "newRoundStarted(uint256,uint256,uint256,string)", +"cb3de910": "WhiteList(address,uint256)", "cb3e394d": "transferFromWithFee(address,address,uint256,uint256)", "cb3e64fd": "unhalt()", "cb3ebec2": "ownerDividend()", "cb3eecc9": "getNewInstance()", "cb3eef2c": "allWorkers()", "cb3fcb56": "setGrowthTokensPercent(uint256)", +"cb4048bc": "viewPrivPrice()", +"cb40577f": "proposalPublishCostUSDP()", +"cb405837": "SetEthMaxContribution(uint256)", +"cb40bb5f": "calcReward()", +"cb41175c": "setTrap()", +"cb412d9d": "retrieveWei(uint256)", "cb4153e9": "destroyNinja(uint256)", +"cb418d8c": "getRewardAddresses()", +"cb41b745": "stringcode(string)", +"cb41eda8": "defaultReferAddr()", "cb421a21": "denemekontrat()", +"cb422860": "transferProofState(address,uint256,uint256)", "cb424c24": "HZRToken(address)", "cb42a77b": "stringTobytes32(string)", "cb43269d": "getRegistryImplementation()", "cb4360d9": "allocateToken(address,uint256,uint256)", +"cb43ac99": "receiverC()", +"cb43b2dd": "withdrawRewardTokens(uint256)", +"cb43d229": "depositedMibBUSD(address)", "cb43e079": "drain_block()", +"cb43f18a": "mintOWL(uint256)", +"cb44031d": "newNFT(address,string)", "cb44211e": "addApproval(address)", +"cb447c50": "Trade(address,address,uint256,uint256,uint256,address,address)", "cb44b53d": "ResolutionProposals()", +"cb4502c4": "poolCorrespond(uint256)", +"cb454ec9": "minerVotes(address)", "cb457d47": "unlimited()", "cb45a294": "getSecondTokens()", +"cb46b282": "USDTPool()", +"cb46dc3a": "getMcdAddresses()", "cb4717b2": "SetProperty(bytes32,uint256,uint256,uint256)", "cb4735f2": "estimatedFundingAmount(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cb4799f2": "getMetadata(uint256,string)", "cb47a8ce": "MultiChampion()", "cb47abc7": "getTotalNumberOfTransactions()", +"cb47b341": "updateGlobalRewardIndex()", "cb48e1a5": "assignShareTokens(uint256)", +"cb49a130": "migrateBOOGIELPtoRave()", +"cb49bfd5": "RequestBuywithFX(address,uint256)", "cb4a15c5": "checkStringLength(string,uint256,uint256)", +"cb4a7155": "approve_811(address,uint256)", "cb4b0105": "Unhold(address,uint256)", "cb4b3710": "setStopSelling()", "cb4b9db1": "EchoChainToken()", @@ -116434,52 +213048,100 @@ "cb4c86b7": "funding()", "cb4c88ae": "MediatedTransferStatusModified(uint256,bool)", "cb4c8ee4": "isRSPScience()", +"cb4d11b7": "Deposits(uint256)", +"cb4d3195": "removeOldSupportedPool(address)", "cb4d3d67": "AddedTokenHolder(address,uint256)", +"cb4dc61a": "LPcutRewards(address)", +"cb4de1e0": "withdrawRemainingEth(address)", "cb4de968": "ICO_BASE_PRICE_IN_WEI()", +"cb4e57e8": "generateId(bytes32,bytes32)", "cb4e75bb": "smbl()", "cb4e7fdc": "icoIsRunning()", +"cb4e9d0b": "addOffer(address,uint8,bytes32,uint256)", "cb4f1d85": "getPolicyHolder(bytes)", +"cb4faed0": "setNewStakeFee(uint256)", +"cb4fd908": "getDAI_SHARE_UniswpPair()", +"cb4fec2b": "transferMeManyERC721Tokens(address[],uint256[])", +"cb4ff316": "get_Old_sys()", "cb50301a": "unsoldAddr()", +"cb506488": "setIsRiskAdjusted(bool)", +"cb506c37": "IslandAttacked(uint256,uint256)", "cb510e97": "isStaff(address)", +"cb513a06": "setGemAddress(address)", +"cb51a7f4": "createContractMemo(uint256,uint256,uint256,uint256)", +"cb51b690": "removeTransferBurnExceptAddress(address)", "cb51c418": "_toString(address)", "cb51f777": "TOKEN_PRICE_NUM()", +"cb521b7f": "STASH_VERSION()", "cb526229": "RefundChequeByHash(uint256)", +"cb528dc4": "getDeploymentAddress(uint256)", "cb52926a": "getBoughtAssetPacks(address,address)", +"cb52b533": "setOrderSizeFactors(uint256,uint256)", "cb52c25e": "updateAmountRemainingForSale(uint256)", +"cb536714": "sakeFactory()", +"cb538b01": "RemoveBid(uint256)", +"cb53ff9b": "changeVoteB(uint256)", +"cb544bb2": "referralPercentage(address)", "cb553ac9": "sweepWizardCommission(uint256)", +"cb554779": "oneJLP()", +"cb555d0a": "removeEndpoint(uint64,uint64)", "cb55adfb": "getStrategyTokenAndWeightByIndex(uint256,uint256)", "cb560ac4": "winningMultiplier()", "cb562fb3": "Uniond()", +"cb56577d": "releaseTeamToken1st()", +"cb567d33": "lockingFinished()", +"cb5690e5": "MBTC()", "cb56d626": "testFailBlobStoreNotRegistered()", "cb56dd79": "getFinalState(uint256)", "cb56e40b": "getTrader(uint8)", "cb574b8c": "buyUpgrade()", +"cb577319": "testItGreets()", "cb577480": "prepare(uint256)", +"cb57bcd0": "getGrillAmount()", +"cb57d43f": "wbnbToFuelRoute(uint256)", +"cb57e210": "PresaleWhitelisted(address,bool)", +"cb57e4a6": "createCrypton(string,uint8,uint256,uint256,address)", "cb5829ab": "Revision()", +"cb582f95": "setCollateralLevels(uint256,uint256,uint256,uint256)", "cb5853a8": "claimTaxex(uint256,uint256)", "cb58594e": "airDropShadowMoney()", "cb586251": "MintableMultiownedToken(address[],uint256,address)", +"cb596466": "partowners(address)", +"cb59aa09": "revokeLogConfirmation(uint256)", +"cb5aa18b": "mojo()", +"cb5b176c": "getDeployDate()", +"cb5b4a42": "canUserStake(address,bool)", "cb5b6bef": "setPriceStep8(uint256)", "cb5bf9b8": "EthersRaised()", +"cb5c3742": "recommend(uint256)", +"cb5cc109": "sin(uint256)", "cb5cf43f": "supplyReady()", "cb5d0646": "Presale2Sold()", "cb5e4805": "NvcFundCoin()", "cb5e7d2d": "newMember(address,bytes20,uint64)", "cb5e891f": "_setActiveSupply(uint256)", +"cb5ec87a": "autoUpdateCeiling(address)", +"cb5ee318": "LAVAStakerContract()", "cb5f18db": "get_ads()", "cb5fa63f": "getRoundEth(uint256)", "cb5fd01f": "TestToken(address,address,address,address)", "cb5fe36e": "VESTING_2_DATE()", +"cb601c52": "changeLatestDeployer(address)", "cb60f8b4": "sellStartTime()", "cb6142c9": "freezeAllAccountInEmergency(bool)", "cb61522d": "MILLIODS()", +"cb61738d": "deleteJob(bytes32)", +"cb619a33": "lockValues(address)", "cb61b42d": "updateShares(uint256,uint256,uint256)", "cb61b49e": "_setRate(address,address,uint256)", +"cb623d21": "setDistribution(address[],uint256[],uint256[],string,string,uint256[],uint256[],uint64,uint64,uint64,uint64,uint256)", "cb6291cb": "ownerSendTokens(address,uint8,uint256)", "cb6308f1": "approveVersion(address)", +"cb631699": "nextSet()", "cb6367d1": "verifySignatures(bytes32,uint8[],bytes32[],bytes32[])", "cb637d85": "changeAccountService(address)", "cb639322": "realReserve()", +"cb63d509": "BuyerUltimateBonusWon(address,uint8)", "cb63da4e": "ALLOC_RES()", "cb63ddb6": "makeProposal(uint8,uint256)", "cb642180": "_updateNodeHeight(bytes32)", @@ -116489,12 +213151,23 @@ "cb656a13": "adviserSold()", "cb65ad66": "MobileAppSupply()", "cb65c0f5": "withdraw_excess_tokens(uint256)", +"cb660d87": "ParticipantsTurns(uint256,address)", "cb662fe1": "claimedList(uint256)", +"cb66667f": "getTaxRate()", +"cb66d960": "setPublicGoods(address,uint256)", +"cb66fe00": "findDate(uint256)", +"cb67558e": "setVendingMachine(address)", +"cb67574c": "batchLeaveLobby(uint256,uint256)", +"cb67ce04": "setKittyTokenAddress(address)", "cb67f20f": "SaleClosed(uint256)", "cb67f948": "unlockTokens(address)", "cb68780f": "GetICOData(uint256)", "cb6890d9": "setAccount(address,uint256)", +"cb68bef8": "toggleEmergency(bool)", "cb692928": "dataControlSetFeePropMaxGlobal(uint256)", +"cb69adfa": "viewInitRandomPoolParams(uint128)", +"cb6a1105": "LastSystemDebtFactor()", +"cb6a5262": "slTokenUnderlyingPrice(address)", "cb6ad855": "log10Ceiling(int256)", "cb6af4cb": "createChannel(string)", "cb6b1f05": "cf2Wallet2Pct()", @@ -116503,40 +213176,67 @@ "cb6bfa03": "BNIToken()", "cb6bfd23": "CyTestCoin(uint256,string,uint8,string)", "cb6c1655": "tokensFor1EthP1()", +"cb6c319c": "getPledge(address,uint256)", "cb6cec4b": "getIpfsAfterTitle(bytes32)", "cb6d0c5f": "minimumDurationInBlocks()", +"cb6d8ee6": "totalStakedToken()", +"cb6da670": "emissions(uint256)", "cb6da9da": "takerCount()", "cb6e3fa9": "shouldUpdateFunder(address)", +"cb6e572e": "buy_to_redeem(uint256,uint256)", +"cb6eacd1": "loanParams(bytes32)", +"cb6eb3f4": "bridgeMint(address,uint256,bytes)", +"cb6f37ab": "getUpline(address)", +"cb6f74aa": "prip(address,uint256,uint256)", +"cb6f8e60": "WithdrawFoundation(address,uint256)", +"cb6fdcd9": "_aindexes(address)", +"cb6fe3ad": "unlockDate10()", "cb70d9a7": "changeUserCertificate(bytes32)", +"cb70ea6f": "getMinterIssued(address)", "cb712535": "_transferFrom(address,address,uint256)", "cb7129a3": "resolvePriorBets()", +"cb715ef4": "hardPerBlock()", "cb724422": "testPayTokens()", "cb739476": "MAGExCoin()", +"cb73999f": "redemption_fee()", "cb739c0f": "changeRateLoss(uint256)", "cb740c61": "grant(address,uint256,uint256,uint256)", "cb742358": "virtualBalanceOf(address)", "cb752679": "buyTokensWithPoly(uint256)", "cb757e92": "REGO()", "cb758a89": "addDataPoint(uint256,bytes32)", +"cb75b997": "signs(uint256)", "cb76937c": "getUserBetsTimeStampInARazInstance(uint256,uint256)", +"cb76b172": "hardCap1Stage()", "cb7729d3": "shiny()", "cb774d47": "startingIndex()", "cb775d5a": "consumePower(uint256)", +"cb77baa7": "multipleFinishBattle(bytes32[])", "cb77ed34": "_getProviderSupply(uint256)", +"cb78972d": "mintCash(address,uint256)", +"cb78b88b": "LogCloseBet(uint256,address)", "cb78bebc": "USER_BUY_LIMIT()", "cb78c9f0": "flips()", +"cb794dd8": "getDataStaking(address)", +"cb7956b0": "mc()", "cb795a64": "allowedBuy()", +"cb797533": "creat(uint256)", +"cb797836": "sendToOwner(uint256)", "cb79d573": "maxCompanyValue()", "cb79e31b": "votingRightsOf(address)", "cb7a0a6f": "getPlayerSpaceshipBattleModeById(uint256)", +"cb7a81d1": "rankPoolIndex(uint256)", "cb7aac1e": "transferTokensFromProjectFundAddress(address,uint256)", "cb7acdd9": "hola()", "cb7b3f0a": "readPaymentChannels()", "cb7b3fb9": "KinguinIco()", +"cb7b4206": "timeWizard()", "cb7b4ad4": "canCPCreateInFactory(address,address)", "cb7b8673": "setTokenExchangeRate(uint256)", "cb7bba39": "lockaddress(address)", "cb7bba61": "prove(string,string)", +"cb7bcbb1": "autoPoolLevel(uint256,uint256)", +"cb7bdbc0": "mapPID_grant(uint256)", "cb7c05e7": "verify_fund()", "cb7c225e": "Send_TrustlessTransaction(address,uint256)", "cb7c30f2": "m_D_n()", @@ -116545,92 +213245,166 @@ "cb7e70fa": "buyTokensOnInvestorBehalf(address,uint256)", "cb7e9057": "dispatcher()", "cb7e9bf1": "rewardHistoryMapOf(address,uint256)", +"cb7ee140": "mintCryptoAvatar(string)", "cb7ef63d": "Coinage(uint256,uint256,uint256,uint256,uint256,uint256)", "cb7fd9db": "checkVeracity(string)", "cb802c8b": "getInvoice(bytes32)", "cb80bd60": "LogRefundFailed(address,uint256)", +"cb80ff80": "maticsendTokens(address[],uint256[])", +"cb8106f4": "getHolderByIndex(uint256)", "cb810ea9": "sendTokensSingleValue(address,address,address[],uint256)", +"cb81cf56": "LogVaultChanged(address,uint256)", +"cb81d702": "isDappEnabled()", "cb81fecf": "lockRequestCount()", "cb821f03": "calculateClaimByIndex(address,uint256)", +"cb8231bf": "closeTrade(uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"cb8241ad": "Issue(uint256)", +"cb824280": "assetConverterHelper()", +"cb827474": "initiateDeposit(uint256)", +"cb82cc8f": "depositStake(uint256)", "cb82d5df": "canMakeNoFeeTransfer(address,address)", +"cb83bcd6": "dividendOf(address,address)", "cb84e69e": "setMessageMaxCharacters(uint256)", +"cb852271": "makeA()", "cb8523c6": "addAllowed(address)", +"cb8550d8": "restStakeingCapacity()", "cb856252": "getFreezeList()", "cb859c09": "getGameRules()", +"cb85ce67": "govAddr()", "cb85f175": "WhiteListedInvestorAdded(address,string)", +"cb868f62": "addSyntheticAsset(address)", +"cb86b828": "TransferFrom(address)", "cb86df95": "moveStartDate(uint256)", "cb8820ef": "setWriterId(address,bytes32,bytes32)", "cb884207": "deathData_f5()", +"cb8843c0": "totalShareholderPoint()", "cb885a36": "Crowdsale(address,uint256,uint256,uint256,address,address,uint256)", +"cb88b88d": "setCallerWhitelist(address,bool)", +"cb88d86e": "terminateTheContest()", +"cb892acc": "plyBuyAmount(address)", "cb89558d": "AgreementHashRu()", "cb899024": "defrostToken()", +"cb899a28": "addToHousePot()", +"cb89e191": "totalPayoff()", +"cb8a191b": "deployNewDataUnion(address,uint256,address[],string)", "cb8a67ed": "ownersForChange()", +"cb8a9c95": "calcCommissionValue(uint256)", "cb8b4b83": "CollectERC20(address)", +"cb8b5c7e": "myVerify(bytes32,uint8,bytes32,bytes32)", "cb8b99b2": "_addCryptantFragments(address,uint256)", "cb8c2982": "getMyKebabers()", "cb8c478a": "activeTime()", +"cb8c9721": "getInitialBalanceByAddress(address)", "cb8cb4a3": "getGoals(address)", +"cb8cc89f": "getTimestamp64()", "cb8cd7cb": "transferFee_()", "cb8d0f46": "tstop()", +"cb8d51b7": "SHAREHOLDER_RIGHTS()", +"cb8db53c": "getDaysPassedAfterStakingStart()", +"cb8e2c7a": "brProfesora()", "cb8ff46f": "koinconekt()", +"cb906af8": "isGenesis()", "cb908d78": "_updateEthereumPrice()", "cb912ffb": "tokenCountSet()", +"cb914491": "tokenValue(uint256)", "cb918634": "setDrawP(uint256)", +"cb9199a2": "totalTokens(address)", "cb91a6ba": "setGemPerMiner(uint256)", "cb91aec7": "getFreelancerContracts(address,address)", "cb91f1c2": "periodPreITO_endTime()", "cb92042c": "removeShare(address)", "cb923813": "saled()", +"cb923c84": "createNFTMould(string,string,string,address,string,string,uint256,string,string,string,uint256,uint256)", +"cb926bbc": "maxTokenSize()", "cb92bfa1": "_computeCurrentPrice(uint256,uint256,uint256,uint256)", "cb92c28d": "rewardEvery1000Draw7(uint256)", "cb92cb52": "BuyBackStart(uint256,uint256,uint256)", +"cb92ef4a": "dayClaims(uint256)", "cb930934": "KopihitamToken()", +"cb939053": "sellOusdForUsdt(uint256)", "cb93abb2": "BUYER_STEP_1(bytes32)", "cb93e347": "CryptoGamesMarket()", +"cb93e65d": "getSmoothingFactor()", "cb93f7ef": "withdrawDevFee()", +"cb9429b5": "signUp(address)", "cb944e24": "saleCapUsd()", "cb945312": "testEqual()", "cb949213": "addressToPurchasedTokens(address)", "cb949e51": "getCustomer(address)", "cb94aa26": "withdrawBatch(address[],uint256[])", "cb950c37": "updateValidMCAmount(uint256)", +"cb953bde": "totalHxyFrozen()", +"cb9576b9": "reflectLPFees(address,address,uint256)", "cb9580e0": "TotalPaid()", "cb95a6f6": "Bounty(address)", "cb96012e": "hashTo256(bytes32)", "cb965ae9": "allKeys()", "cb96b0d6": "MAX_EXCHANGE_FEE_PERCENTAGE()", +"cb96c7c7": "priceN()", "cb96f11d": "Oversight()", +"cb971df0": "InvestAmount(uint256)", +"cb97492a": "h(uint256)", "cb9756ad": "buyClimateCoinsAgainstEther()", +"cb97c956": "getAddressbullshitStakeAmount(address)", +"cb9803f2": "setDBAddress(address)", +"cb984a58": "transferGovenorship(address)", "cb9854a2": "confirmSwap()", "cb985708": "investorWalletAddress()", "cb985dd1": "MARKET_SHARE()", +"cb989f64": "viewRoundInfo(uint256)", "cb990457": "holdersByIndices(uint256,uint256,bool)", +"cb991b2f": "getMinGameLength()", "cb991efe": "depositEscrow(uint256)", +"cb99b8d3": "add(uint256,uint256,address,address,bool)", "cb99cbac": "startServer(uint256)", "cb99d98e": "_addWhitelisted(address)", "cb9a20d0": "MINI_GAME_ADD_TIME_DEFAULT()", "cb9a3251": "finalizeMany(uint64[])", "cb9a32a5": "promoMasterpiecesCreatedCount()", +"cb9a4b9a": "getPhase(bytes32)", +"cb9a56b3": "revokeBalance(address,address)", "cb9a5edd": "availableLand()", +"cb9a8c7e": "canEmergencyWithdraw()", "cb9aac64": "usesLibrary()", "cb9ae707": "latestDifficultyPeriodStarted()", +"cb9afbb2": "getLatLon(uint256)", "cb9b3a3c": "getCCH_edit_4()", +"cb9b51c8": "proofIsCorrect(uint256,address,uint256,bytes32[])", +"cb9bad2b": "initialize(address,address,address,address,uint256,uint256,uint64,uint256,uint64,uint64,uint256,uint256,uint64)", +"cb9bd15a": "getLockingStatus(address)", "cb9bdf45": "tokenSoftcapIssued()", +"cb9c7189": "BetLost(address,uint256)", "cb9c8505": "throwIfStartPastBlocktime()", +"cb9d1223": "externalCallEth(address[],bytes[],uint256[])", +"cb9d410b": "cmsRate(uint256)", "cb9d5eb4": "safeMove(address,address,uint256)", "cb9d6176": "LogDelete(address,uint256)", "cb9d86e2": "BlockRefunded(address)", "cb9dd1a0": "setMoving()", "cb9e2755": "deleteEntity(uint256)", +"cb9eae45": "calBonusRefer(address)", +"cb9f0cda": "EquityWithdrawn(address,uint256,uint256,address)", +"cb9f1220": "etherUnit()", +"cb9f1eb2": "claimEmergency()", +"cb9f2bd0": "emitJoin(address,uint256)", +"cb9fc263": "singleAirdropAmount()", "cba01a49": "LunarLink()", "cba0e996": "isExcluded(address)", +"cba13030": "answerIdCounter()", +"cba1ddee": "RsvVestingTime()", "cba1fa10": "set_iconiq_presale_open(address,bool)", +"cba22f17": "surprisePercent()", "cba25e79": "presaleHardcap()", "cba2c735": "createPurse(string)", +"cba44d4f": "decentBetToken()", "cba456df": "casinoProxy(address,address,address)", +"cba45df2": "wrappers(uint256)", "cba4bc94": "_setHowManyOwnersDecide(uint256)", "cba4f643": "changePreIcoRate(uint256)", "cba50fd1": "generateUserRelation(address,uint256)", +"cba510a9": "getAppHash(uint64)", +"cba52c0e": "safeApproveToken(address,address)", +"cba57e38": "isSpecial(uint256)", "cba58ab6": "disableService()", "cba59827": "Reject()", "cba5b465": "endContract(address,uint256)", @@ -116638,17 +213412,29 @@ "cba66250": "FTV(address,address,address,address)", "cba66e14": "sliceBytes20(bytes,uint256)", "cba6a3a2": "setTransferAuthorized(address,address,uint256)", +"cba7064f": "getAmountsOut(address,uint256,address)", "cba74da1": "getResource(bytes32,uint256,bytes32)", +"cba85c70": "incomes(address)", "cba88872": "countdown()", "cba8901b": "getPayoutKeys()", "cba8be1c": "setServerAdmin(address)", "cba91a35": "roundTwoTime()", +"cba9794a": "claimingEndTime()", "cba9a794": "handleReturnBool()", "cba9c0e0": "presale_start_block()", "cbaa0b25": "playerAttack(uint256,uint256)", "cbaa0bec": "amendSingleResult(int16,string)", +"cbaa14ba": "_updateIntent(address,address,address,bytes2,uint256,bytes32,uint256)", +"cbaabced": "AwardInvation(bytes32,bool,uint256)", +"cbaae552": "sellDAIforWETH(uint256,uint256)", +"cbaae558": "updateRootChainManager(address)", +"cbab5b74": "_1_shouldBeLesserThan_2()", +"cbab993b": "ris3()", "cbaba70f": "EADC()", +"cbac028c": "TeamVestingTime()", +"cbac0d0a": "accountStaked(address)", "cbac21b8": "periodPreITO_mainCapInUSD()", +"cbac5cf1": "removeApprovedWallet(address)", "cbac8816": "tokenRate20()", "cbaca250": "RewardSplit(uint256)", "cbacb269": "stopBonusCompaign()", @@ -116656,12 +213442,16 @@ "cbad3779": "getPublisherRegistry()", "cbad60b6": "spread(uint8)", "cbad7bf6": "cg(address,uint256,uint256,uint256)", +"cbadca82": "pendingTESTO(uint256,address)", "cbaddbaa": "BurnMe()", "cbae0163": "readPosition(uint256,int256)", "cbae0978": "NewResolver(uint256,address)", "cbae1467": "deleteAllAvatars()", "cbaeadb4": "getRewardHistory(address)", +"cbaed377": "userActiveWalletCount(address)", "cbaedd3c": "slashUsername(bytes)", +"cbaef59b": "submitRings(bytes)", +"cbaf3858": "decodeAverageRateD(uint256)", "cbaf4742": "OPERATE_SUPPLY()", "cbaf5104": "_isClosed(bytes)", "cbaf566d": "updateRentInfo(uint256,uint256,uint256)", @@ -116670,184 +213460,329 @@ "cbb04cbd": "debtPaid()", "cbb05527": "totalCapInWei()", "cbb0c95a": "getPlayerWithdrawEarning(uint256)", +"cbb0f738": "MIN_LEVERAGE_AMOUNT()", +"cbb0fa46": "showmethemoney()", "cbb105d6": "NewWorld()", +"cbb128df": "setVersusRewardsContract(address)", +"cbb151d3": "xfLobbyExit(uint256,uint256)", +"cbb16cbc": "supportedTokensERC20(uint256)", +"cbb1862e": "changeSaleSettings(address,uint256,uint256,uint256)", "cbb1d761": "confirmBySigner(bytes32,address)", +"cbb23f57": "fixRet_(uint256)", +"cbb27ff3": "getTicketControls(uint256)", "cbb2fd5d": "TRTToken()", "cbb31da9": "maker(address)", +"cbb38d73": "_encode_sol_bytes1(bytes1,uint256,bytes)", +"cbb40dae": "withdraw(address,uint256,uint256,bytes32,bytes32,uint8)", "cbb433ea": "DeepToken()", "cbb45120": "TOTAL_WINS()", "cbb45444": "test_transfer_to_contract_without_fallback()", +"cbb4899d": "getReferenceParent(address,uint256)", +"cbb4b9c2": "UNICORE_Snapshot_Block()", +"cbb501f1": "sendLetter(address,string)", "cbb50d30": "teamAllocationTokenSend(address,uint256)", "cbb6e5c9": "transferTopLevelDomainOwnership(bytes32,address)", "cbb70c92": "addLOC(address)", +"cbb831c1": "addSecondaryOwner(address)", "cbb8b158": "TESTH()", +"cbb8f4d5": "xaceth()", +"cbb941af": "_payTwoProtocolFees(bytes32,bytes32,uint256,address,address,address)", +"cbb955a7": "UPDATE_TIME_MIN()", "cbb9818c": "turn_flag_ON()", +"cbb98c3f": "hashForSign(bytes4,address,address,uint256,uint256,uint256)", +"cbb9955c": "creamWithdraw_crFRAX(uint256)", +"cbb9d385": "createUri(string)", "cbb9dbb9": "depositCoupon(address[2],uint256[8],uint8,bytes32[2])", +"cbba1f5a": "getProposalAcceptedByVotingMachine(bytes32)", "cbba3f4b": "DCSToken()", +"cbba69cc": "getCandidateFirstVoteAccount(uint256,uint256)", +"cbbac463": "testDelimAndSplit()", "cbbacd48": "cliffs(address)", "cbbaed1b": "incentiveDistributionMaxRounds()", "cbbb2698": "checkBlackAccount(address)", +"cbbbb63a": "getKeyRingVersion()", +"cbbbc91a": "gas_used(address)", +"cbbc10bd": "setRGPReveiverAddress(address)", "cbbc1bf3": "setCosignerAddressForUser(address)", "cbbc8504": "GnosisTalk()", "cbbc8a51": "setForeignDailyLimit(uint256)", "cbbcdf77": "addCurrency(uint256)", "cbbd809c": "approvedAddressInLUT(uint256)", +"cbbd8a04": "incrementSupply(uint256)", "cbbda00e": "Ptest()", "cbbdca36": "Upgradable(address)", "cbbe2199": "ActualTokenManager()", "cbbe2569": "Bogocoin()", "cbbe300b": "FooMintToken()", "cbbe974b": "unlockUnixTime(address)", +"cbbe9a21": "walletTable(address)", "cbbea348": "getModeratorAtIndex(uint256)", +"cbbf425f": "poolA()", +"cbbf526b": "addEtherOutPlans(uint256,bytes16,uint256[],uint256[],uint256[])", "cbbf879c": "getNumParentOperation(bytes32,uint8)", "cbbf9420": "distributeVES(address[],uint256,uint256)", "cbbfe168": "getOrder(uint256,address)", "cbc066ab": "_transferOrderMoney(uint256,address)", +"cbc0df49": "SellOrder(address,uint256,uint256)", "cbc12d13": "maxRingSize()", "cbc1cfd2": "emergency_withdraw()", +"cbc1d390": "removeHarvestStrategy(address)", +"cbc20e0f": "CTO(address,uint256)", "cbc24224": "MuskToken()", "cbc264f2": "nestedFirstAllToAll(uint256)", "cbc265ac": "revealSeckey(bytes32)", +"cbc2844e": "luckCodeResList(uint256,uint256)", +"cbc3ab53": "getReserve(address,address)", "cbc3b73e": "delegateHasValidSignature()", +"cbc3db5c": "new_epoch(uint256,address,address)", +"cbc3ec97": "progressUnstake(bytes32,bytes32)", "cbc3fb0d": "blind_sha256(string,address)", +"cbc42814": "onOpenPackage(address,uint256,bytes32)", "cbc44835": "PlateMate()", "cbc469de": "STRToken()", "cbc52ee4": "EtherIslands()", "cbc598c5": "isAmountAllowed(address,uint256)", +"cbc5ec1f": "v2Proxy()", "cbc61daf": "mintForMarket(address,uint256)", "cbc69c8d": "SocialMediaToken()", "cbc6c267": "ejenfwdToken()", +"cbc6ecff": "numProposedOwnersConfirmations()", "cbc7755c": "registerNameXnameFromDapp(address,bytes32,bytes32,bool,uint8)", +"cbc7763b": "_evalParams(bytes32,address,address,address,bytes32,uint256[])", +"cbc77861": "main3v1(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256)", "cbc7854e": "setTokens(address,address)", +"cbc7ef09": "checkBlockLimit()", +"cbc82386": "pancakeswap_rate()", "cbc846d9": "setBoosters(address)", "cbc85c97": "getAllCardsClaimContender()", "cbc8ae5f": "TOKEN_SUPPLY_ICO()", +"cbc8b506": "orderbase()", "cbc9023c": "forceRoll()", "cbc91e98": "sendTokensAfterBuyExp(address,uint256,uint256)", "cbc9c89c": "Claim_TRAC_3800()", "cbca02d3": "trasnferFromOwner(address,uint256)", +"cbca3434": "RedeemSwap(address,bytes20,bytes32)", +"cbca47db": "initialized(address)", "cbca99c7": "updateWLAddress(address)", "cbcaacab": "checkTransferWithReference(address,uint256,string)", "cbcabc13": "changeMdtTeamAddress(address)", +"cbcb2e23": "valueToGive()", "cbcb3171": "tokenReserve()", +"cbcc054a": "initForwarder(address,uint256)", "cbcc65eb": "ACL_APP_ID()", "cbccf9d6": "Simpletoken()", "cbcd5dfe": "MintableMasterToken()", "cbcdc2e4": "transferBalanceToOwner(uint256)", +"cbce0cc3": "FrozenTokens(address,uint256)", "cbce2fcf": "setAmountBasedBonus(uint256[],uint256[],uint256[])", "cbce4c97": "gift(address,uint256)", +"cbceb2a7": "TokenDeployed(address,string,string)", +"cbcec0ca": "CreateSalesPipe(address)", +"cbcef4c2": "setMinSharingThreshold(address,uint256)", "cbcf4d25": "icoAccounts(address)", "cbcf8ece": "setAccountBonus(address,address,uint256)", "cbcf98e6": "changeSecondaryWallet(address)", "cbcffd2f": "ShowInfo(uint256,string)", +"cbd0650c": "unreserve_from(address,uint256)", "cbd076f8": "depositForUser(address,uint256)", "cbd07fd8": "paidDividends(address,uint32)", "cbd08c8c": "config(uint256,uint256,uint256,uint256)", +"cbd138ae": "closeTrove(address)", "cbd1b782": "test_claimShare_notTranscoder()", +"cbd21766": "setAllFtokenMarkets(address[])", "cbd21f00": "JBartContract()", "cbd243b4": "SetWhy(uint32)", +"cbd258b5": "poolExistence(address)", +"cbd27c62": "recoverSigner(uint256,uint256,bytes)", "cbd2ac68": "confirmWhitelistRemoval(bytes32)", "cbd2bdfd": "getAllAuctions()", "cbd2c73b": "signUserKeyChange(address)", +"cbd2d528": "shouldValidatorReport(address,address,uint256)", "cbd2ecd2": "transferAllowance(address,address,uint256)", +"cbd2fb5f": "prescriber(uint256)", +"cbd31882": "requiredEarn(address)", +"cbd31fe5": "tokenOut(uint256)", +"cbd324d6": "getMultiplierOfBlock(uint256)", +"cbd33d05": "assignAddress()", "cbd3b403": "getLuck(address)", +"cbd3df38": "changePriceFeed(address)", "cbd3faef": "amountOwedForApiForBuyer(uint256,address)", +"cbd411b6": "setETHRefundable()", "cbd49462": "_sender()", +"cbd4be3f": "lockGemAndDraw(address,address,address,address,uint256,uint256,uint256,bool)", +"cbd4ece9": "relayMessage(address,address,bytes,uint256)", "cbd5131b": "sponsoredBonusAmount()", +"cbd52f25": "_popTokenCaches()", "cbd57134": "KTCToken()", +"cbd57967": "removeAuthorizedSender(address)", "cbd5bb2b": "setRound(uint8)", +"cbd5c1a3": "getBcCurrentPrice()", +"cbd69f3f": "maxSlots()", "cbd6cc67": "SendDataToken(uint256,string,uint8,string)", +"cbd6d856": "Get_Orders(address,string)", +"cbd74009": "SIL()", +"cbd74b3a": "setGlobalQuorum(uint256)", +"cbd7951a": "LogMatch(uint32,uint256,uint64,uint256,uint256,address,uint256,bool)", +"cbd7a4ed": "rescuecDAI()", +"cbd7be97": "SWAPROUTER()", "cbd85c76": "bytesToBytes4(bytes,uint256)", "cbd88663": "drawJurors(uint256,uint256)", "cbd8877e": "stakeMinAge()", +"cbd88f48": "workerAddress()", +"cbd8c06a": "fuckexecute3(address,bytes)", "cbd8e690": "setTokenAmountPerHeritor(address,address,uint256)", "cbd8ff79": "ContributionToPrizeFund()", +"cbd94ca7": "SelfDestructInitiated(uint256)", "cbd9597d": "GenChipLevel_Special(uint256,uint256,uint256)", +"cbd99d03": "setDoubleProxy(address)", "cbd9d2e0": "InvalidCaller(address)", +"cbd9e740": "unclaimedBidsByAuctionIndexByBidder(uint256,address)", "cbda1d85": "fundingGoalHardCap()", +"cbdaf0c8": "currentCostOfDot(address,bytes32,uint256)", "cbdb2469": "_getPetBonus1(uint256)", "cbdb4f72": "GetClientBalance()", "cbdc5aa4": "tokensTradeable()", +"cbdce4e0": "AvailableStakedAmountOf(address)", "cbdd3268": "genesisImportsComplete()", "cbdd69b5": "tokensPerEth()", +"cbdd9d86": "configUnlock(address,string,string)", "cbde2ff0": "isUnfreezed(uint256)", +"cbde832a": "gameStatusCtrl(bool)", +"cbdec1fc": "bonusLockUpBps()", +"cbdef940": "preRegAdmins(address[])", "cbdf02fb": "rejectCertificate(address,address)", +"cbdf0fab": "TokenReleased(bool)", +"cbdf382c": "poolToken()", "cbdf3878": "goldLevelBonusIsUsed()", "cbdf8692": "Lockup()", +"cbe0861e": "fragmentsPerWeek()", "cbe0a1aa": "totalEthCharityCollected()", +"cbe0afaa": "requestFilterUpdate(uint8,address,address)", "cbe0e49a": "presaleGranteesMapKeys(uint256)", +"cbe12969": "authorization(address)", +"cbe1553e": "ALPHA_ADJUST_THRESHOLD()", +"cbe1c99b": "issueList(address,bytes32)", +"cbe1f06c": "gsnExtraGas()", "cbe211ec": "adPriceWeek()", "cbe230c3": "isAllowedToken(address)", "cbe239ed": "setIcoPaymentStatus(bool)", "cbe23b94": "cards_start_total()", "cbe29f34": "advisorsSupply()", +"cbe2e7f8": "uniswapV1()", "cbe2e97e": "setGameStatus(bool)", "cbe324d8": "_setSuggestedAdPrice(uint256,uint256)", "cbe335c1": "verifyDocument(bytes32,bytes,uint16)", +"cbe33d60": "whitelistPayee(address)", "cbe37e25": "BYBToken()", "cbe3a072": "add(uint32)", +"cbe3b20f": "participantTokens(address)", "cbe3be97": "KeplerCoin()", "cbe40622": "setup(address,address,uint256)", "cbe432b0": "ico3Tokens()", +"cbe4375b": "showMAS()", "cbe44fa2": "setWhitelisted(address,uint16)", "cbe5404f": "setAccountFrozen(address,bool)", +"cbe54173": "automateInterestCollectionFlag(bool)", "cbe56377": "amendLock(uint256,uint256)", "cbe566de": "deleteCascade(uint256)", "cbe7a150": "getCryptoMatch(uint256)", "cbe7b838": "YunKaiCoin()", "cbe8047e": "testValidation()", "cbe8623f": "divUp(uint256,uint256)", +"cbe89f14": "vague()", +"cbe91c35": "ownerOfCont()", +"cbe938d6": "transferAnyTokensFromMaker(address,address,uint256)", +"cbe94b77": "getActionType(bytes32)", +"cbe955b1": "_removeSynth(bytes32)", +"cbe99476": "getWolfBurnRefund(uint256)", +"cbe9e764": "locked(bytes32)", "cbe9ef39": "BasicCoin(uint256,address)", "cbea4412": "getItemHolders(uint256)", +"cbea5191": "darkv2_approvals_mint(address)", "cbeb5749": "ShoreCoin(uint256,string,uint8,string)", +"cbeb7ef2": "setWithdrawable(bool)", "cbebc563": "computeTraitScore(uint256,uint256,uint256)", +"cbebe187": "companyIndexToOwners(uint256,address)", "cbec09a7": "bonus01()", "cbec455f": "continueCrowdsale()", "cbec72f3": "ownerHasClaimedTokens()", "cbec78b9": "requestPrice(string,string,int256)", +"cbec94dd": "addWalletList(string[],address[])", "cbecb89e": "refferal(uint256,address)", "cbed1568": "addAdminWhitelist(address)", +"cbed45eb": "minerReward()", "cbedbf5a": "sendMoney()", "cbeea68c": "permit(address,address,bytes32)", +"cbeef022": "anyoneTrade()", +"cbef362f": "notarize(bytes32)", "cbefe55c": "calcTokenRate()", +"cbf097cc": "users_2(address)", "cbf09802": "rateOf(address)", "cbf0b0c0": "kill(address)", "cbf0fa2d": "totalWageredForAddress(address)", "cbf1304d": "balances(address,uint256)", "cbf1382f": "founderStorageVault()", "cbf1591d": "setDenyContract(bool)", +"cbf191ba": "approve_98(address,uint256)", "cbf21837": "isSelling()", "cbf26c0b": "DeviceOwner()", "cbf2ad23": "confirmedBy()", "cbf2b203": "Crowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"cbf2f8dc": "DonationCreated(address,uint256)", +"cbf325b6": "poolDecayPeriodVote(address,uint256)", "cbf33562": "addTrustLink(address,bool)", "cbf346cc": "_sellCrowd(uint256,address)", +"cbf383d5": "updateCheckpointReward(uint256)", +"cbf3f861": "setIdentityRegistry(address)", +"cbf409ba": "isactive()", "cbf4531d": "dividendsAmount(address)", +"cbf45929": "airDropPot2_()", +"cbf476e5": "SetMinETH(uint256)", +"cbf48666": "Set_Block_Weight(uint256,uint256)", +"cbf4efa1": "userEthSpenttInPresale(address)", +"cbf50bb6": "removeChain(uint256)", "cbf66a02": "withdrawRune()", +"cbf6c6ed": "PollCanceled(uint256)", "cbf6fff9": "SALE_SUPPLY()", +"cbf7358c": "irkEkle(string)", +"cbf76569": "collectUnsoldTokens(uint256)", +"cbf78f47": "getAddressesLength()", "cbf7c9a7": "isUserKyc(address)", "cbf7cc2e": "deployFinished()", "cbf7f009": "FAPFounder()", +"cbf807bd": "callerMax()", +"cbf82161": "workoutDeziMeters()", +"cbf86d15": "getDmapDetailchash()", "cbf89ed8": "DividendDeposited(address,uint256,uint256,uint256,uint256)", "cbf9051c": "setPublisherRewardPool(bytes32,uint256)", "cbf93c9b": "_claimExploreItemUsingEMont(uint256,uint256)", "cbf97572": "HipsterFarmer()", +"cbf98511": "SetOwner(address,address)", "cbf9a125": "queryChibiAdd(uint256)", "cbf9b6dd": "getRecorderAddress(uint32)", +"cbf9fe5f": "locked(address)", +"cbfa03d2": "forwardFee()", "cbfa18ea": "contractRefundFinished()", "cbfa3c9c": "scaling()", "cbfba0e1": "withdrawFee(bytes8)", +"cbfbf8e9": "updateGeneralSetting(bytes32,uint256)", "cbfc12ba": "Soniq()", "cbfc4bce": "gift(address)", +"cbfc6e2b": "setBaseSlab(uint256)", +"cbfcaed5": "removeNFTProfileAtId(uint32)", "cbfd14a2": "publicSaleSupply()", "cbfd79e2": "AirdropFan()", "cbfe6d41": "documentExists(bytes32)", +"cbfe81c9": "topupCompletedAmount(uint256)", "cbfebb34": "setETHRate(uint256,uint256)", "cbff158f": "addPollOption(uint256,bytes)", "cbff17fa": "_setMinted(uint256,address)", "cbff2cfc": "_getValueEther(uint256,uint256)", +"cbff5d96": "havvenTokenFallback(address,uint256)", "cbff69db": "contributionAt(uint256,uint256)", +"cbff75cb": "isVoted(address)", "cbffb1ae": "updateConflictResolution(address)", +"cc00551e": "revokeToAddress(address,address,uint256)", "cc00814d": "setPublicOfferLimit(uint256,uint256)", "cc00ce12": "set_arbits_sale_open(bool)", "cc01e39f": "availableAmountToCollect(uint256)", @@ -116856,206 +213791,403 @@ "cc02d73f": "setColorContract(address)", "cc03477d": "nMsgsWaiting()", "cc03c342": "setPlatformAddress(address)", +"cc047a04": "ownersIndices(address)", +"cc04fb0c": "betMinimum()", "cc05d836": "executeOrder(bool,address[3],uint256[4],uint256,uint8,bytes32,bytes32)", +"cc060ec5": "LogRemovedBlacklistDestroyer(address)", "cc062b58": "enableSelling()", "cc06c359": "maxLevel()", "cc06f5ea": "getPeriodReceivedBalanceFor(uint256,address)", "cc071051": "purchaseWolk()", "cc075fa7": "stopTeamTrade()", "cc07a94d": "_createMobster(string,address,uint256,uint256)", +"cc07b8e2": "thirstQuarterPerBlock()", "cc07dc37": "userReferralsWei(address,address)", "cc08ebf6": "CryptoSportZ()", +"cc091b86": "remainInvestAmount(uint256)", +"cc0922fb": "add(uint256,address,uint16,uint16,uint16)", +"cc097cf5": "mul112x224(uint112,uint224)", "cc09c6b3": "OXO(uint256,string,string)", "cc0a26d1": "CurrentMined()", "cc0b2c9f": "tokenToOwner(uint256)", "cc0b5a5f": "cancel(uint256,address,address)", +"cc0b7138": "claimRewardAmount(address)", "cc0b94b7": "getChannelStatus(bytes32)", "cc0b9dff": "addExitToQueue(uint256,address,address,uint256,uint256)", +"cc0ba586": "setLoadPerBlock(uint256)", "cc0bb8e5": "proof_of_public_key2()", +"cc0bd62e": "getBlockCount()", +"cc0c886f": "setInitialActionParameters()", +"cc0cab4c": "destruct(bytes32)", "cc0d0c90": "BlueTitaniumClassic()", +"cc0d4ed7": "rescuer(address)", +"cc0d50e6": "isTreasurer(address)", +"cc0e0fa7": "isOnlyGov()", +"cc0e1195": "_micropenis()", "cc0e13e2": "enableMaintenance()", "cc0e1f66": "startOver()", "cc0e24e1": "CheckDOT(bytes32)", +"cc0e7e56": "gasTopUpLimitPending()", +"cc0e82c1": "Destroyed()", "cc0e97c9": "logicContract()", +"cc0e9f93": "emergencyUserWithdrawToken()", +"cc0ea55b": "pendingSHUF(uint256,address)", "cc0f1786": "feeDecimals()", +"cc0f2f1d": "maxActiveIncubationsPerUser()", "cc0f65f7": "GetMinerData(address)", +"cc0fe4a4": "getWithdrawRequest(uint256)", +"cc0ff04a": "Ticket(address,uint256,uint256,uint256)", "cc10145f": "ownerWithdrawRune()", "cc1027ea": "_validateReferrer(address)", "cc105441": "MMOcoin()", +"cc105a44": "allowedToBet()", +"cc10b18a": "deleteTokensToSwap1()", +"cc10b866": "newAddresslist(string)", +"cc10c792": "jobIdMapping(bytes32)", "cc10d53d": "IsPatient(address)", +"cc10df09": "updateRebase()", "cc10e401": "create(string,bool)", "cc11298e": "getRewards(uint256,uint256)", "cc121ac1": "unsoldTokensVault()", +"cc1252ae": "depositFeePercent()", +"cc126a23": "calculateLiquidityFee(uint256)", "cc129f4d": "radd(uint128,uint128)", +"cc12f928": "LATE_PHASE_RATE()", "cc130482": "SUNX()", "cc131be1": "CreateNewDraw(uint256)", "cc135555": "currentGene()", +"cc1362ec": "transferYGYDevFee()", +"cc13c745": "getKiboBuyPrice()", "cc1423bf": "releaseBubToken()", "cc143ce9": "NewXRateProvider(address,uint16,address)", "cc147334": "payAllRewards()", +"cc1484d7": "SetCrowdsaleAddress(address)", "cc148bf4": "awardBalanceOf(address,uint8)", "cc14a7a3": "paidAddress()", "cc151c82": "tokensToSellOnce()", +"cc157950": "allowExchanger(address)", "cc15bee7": "isPurchasingPaused()", "cc15c26c": "buyTokensReserve()", "cc15d080": "getEmployeeInformation(uint256)", +"cc15e398": "setArtistCommissionOnNextSale(uint256,uint256)", "cc1602df": "lotteryCore()", +"cc1634f7": "linearVesting()", +"cc16ab6e": "ADDFUNDS()", "cc16e6e1": "TOTAL_RESERVE_FUND()", "cc16f5db": "Burn(address,uint256)", +"cc17a5bf": "wrap(uint256[])", "cc17aa28": "numAdoptedAxies(address,uint8,bool)", "cc181ca8": "king()", "cc189d00": "Vault(address,uint256)", +"cc190f8b": "lastUpdateTimeofMSPool()", +"cc191157": "addLiquidityToUniswap()", +"cc192309": "changeTotalFee(uint256)", +"cc19723d": "SafeWork()", "cc198380": "totalSoldSlogns()", +"cc19ecf7": "updateDelegate(uint64,address,string,string,uint64)", +"cc19fa95": "rewardEnginePlt()", +"cc1a2865": "addressIndex(uint256)", +"cc1a378f": "setRewardsDuration(uint256)", +"cc1aa9c6": "isUseFreeze()", +"cc1ab9aa": "deploy(address,address,address,address,uint256,uint256,uint256)", +"cc1ace9a": "claimEarning(uint256)", +"cc1b2643": "getWantTokenWhiteListSymbolOnly()", +"cc1b4bf6": "createStream(address,uint256,address,uint256,uint256)", "cc1b63d5": "setStakeStartTime(uint256)", "cc1b8de6": "freedWosPoolToTeam()", "cc1bc747": "deallocate(address,address)", "cc1c0937": "NeuralToken()", +"cc1c5b0e": "manualSetters(address)", +"cc1cbf68": "depositODai(address,uint256,address)", "cc1d050d": "startBlockProfit()", +"cc1d1ad1": "setProtocolVersion(uint32)", "cc1d1e18": "_getCurrentTokenPrice()", "cc1d4c02": "certified(address)", +"cc1d4cab": "initBlocks(string)", +"cc1e1290": "getPooled(address)", +"cc1eaac7": "confirmRelease()", "cc1ef080": "startPreSTOSale()", +"cc1f2afa": "TARGET()", +"cc1fc7f1": "pendingAllLef(address)", "cc204cc2": "amountsWithdrew(address)", +"cc2084c0": "EthOld()", "cc20d075": "getChannelId(address,address,uint8)", "cc212a48": "disburseFunds(uint256)", "cc21a9a2": "_weekFor(uint256)", "cc21e972": "US_INSTITUTIONAL()", +"cc221edc": "yen()", +"cc224d44": "addEscrow(address)", "cc234ee1": "setICORunning(bool)", +"cc23847a": "DemocErc20OwnerClaimDisabled(bytes32)", "cc23a690": "releaseValue2()", "cc23b75b": "HARD_CAP_IN_TOKEN()", +"cc23cd41": "fivePercentWallet()", "cc242f40": "CardsRead()", +"cc24c800": "setPool2(address)", "cc24f571": "releaseTenPercent()", +"cc254bdd": "distributeTokens(address,uint256,uint256)", "cc255b38": "testBazMethodId()", +"cc25b8a9": "AllowTransfer(address)", "cc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", +"cc25eb92": "userWithdrawBalanceOf(address)", +"cc262e62": "TOKENS_DECIMAL()", "cc268393": "setDescendant(address)", +"cc2710b9": "notifyGoaldCreated(address,address)", "cc2761a4": "test_me(int256)", +"cc2799c7": "createERC20TokenNetwork(address,uint256,uint256)", "cc27f97b": "LSYP()", +"cc287f30": "getClaimableFor(address,address[],uint256[])", "cc289fa9": "getPartnerAddressStatus(address)", +"cc28eca5": "pay2seeResult(address)", "cc293aea": "setRenewalsCreditAffiliatesFor(uint256)", "cc2942da": "SetAElfCommunityMultisig(address,address)", "cc29a0e6": "transferTTProduction(address,address,uint256)", +"cc29a306": "distribute(address,uint256,uint256,uint256,address,uint256)", +"cc2a6a07": "TEAM_MEMBER_1_SHARE()", +"cc2a8d14": "retrievedate()", "cc2a9192": "LogWinnerPaid(address)", +"cc2a9a5b": "initialize(address,address,address,address,address,address)", "cc2aa2c7": "NAMINORI()", +"cc2adec7": "blackListTo(address)", "cc2b20ff": "refferBonusFunction(uint256)", +"cc2b27d7": "calc_withdraw_one_coin(uint256,int128)", +"cc2b85cd": "withdrawAfterStageOneEnd(uint256)", +"cc2bcdb4": "changeExecutionTimeout(uint256)", +"cc2bdbfd": "getStalePrices(uint256)", +"cc2c1bbd": "basePrice9()", "cc2c2058": "addSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", "cc2c2bcf": "MotionFactory(string,string,string)", "cc2c5453": "add_sword(uint16)", +"cc2c82b5": "addDealD(address,bytes32,string,uint16,uint256)", +"cc2d6e1b": "sellAllAmountAndMigrateSai(address,address,uint256,address,uint256,address)", +"cc2da8b7": "changeFreeAnimalsLimit45(uint256)", +"cc2dcac4": "assetPriceinETH(uint256)", "cc2dcd7e": "removeSideService(address,uint256)", +"cc2ddda8": "_newVote(bytes,bytes)", "cc2e08ea": "getRecTransactionData(uint256)", "cc2e15cc": "getSponsorableJobs(address)", +"cc2e2e8a": "countryStructs(uint256)", "cc2eacb1": "setReferralPercent(uint16)", +"cc2f1847": "blockReward(uint256,address)", "cc2f5029": "updateNoteMetadata(uint64,uint16)", "cc2f5186": "Balances(address,address,address)", +"cc2f8452": "getModulesPaginated(address,uint256)", +"cc2f84cb": "promises(bytes32)", "cc2fd120": "unofficialUserSignUp(string)", "cc304924": "DocumentAdded(uint256,string,uint256)", "cc305ae6": "userAssignElement(uint256,uint256,address)", +"cc305c0e": "setMapping(string,string)", +"cc307795": "getPrizes(uint256)", "cc308a54": "whitelistStartBlock()", +"cc30cdf7": "commitEth(address)", "cc30eeb1": "isEligibleForRepayment(uint64)", +"cc311c83": "addressV2(uint256)", "cc3154f8": "attendeesList()", +"cc31b2a0": "BanBots(address,uint256)", "cc326e1c": "currentPhaseRate()", "cc328f2f": "b531647b()", +"cc329e81": "calcIndateEthDone(address,uint256)", +"cc32d176": "treasuryFee()", "cc32f8ad": "transferMoneyForTaskSolutions(string,uint256)", +"cc332d65": "getFileData(uint256)", +"cc3342a2": "oneUnit()", +"cc33aa21": "mint_account()", "cc33ad3d": "DSP(uint256,string,string)", "cc33c875": "tokenInfo(uint256)", +"cc340097": "liquidityLoopTimeWarp()", "cc341430": "coordinatorAgreeForEmission(address)", +"cc34293c": "repBond()", "cc342eba": "RoseToken()", "cc3451d6": "MultiverseToken()", "cc3471af": "maxClaimBlock()", +"cc348002": "icoAddrs(address)", +"cc348245": "withdrawBinaryBonus()", "cc348429": "Ethmall(address,address,address,uint256,uint256,uint256)", +"cc3488ab": "revokeStakeRequest(bytes32)", "cc34a247": "icoEndTimestampStage1()", +"cc34a929": "pendingFobo(uint256,address)", "cc34f810": "AllstocksToken()", +"cc358699": "Deprecate(address)", +"cc35a7a9": "requestExchange(uint256)", "cc361cc4": "getTotalBonusPerShare()", "cc364f48": "getRange(uint256)", "cc36809f": "fee_msg()", "cc36a328": "team0Query()", "cc36f8eb": "ArtCoin()", +"cc370c3b": "getMinors(uint256)", "cc373d79": "withdrawCommissions(uint256)", +"cc37e1e8": "setPriceWithTime(address,uint256)", "cc38639f": "newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", +"cc387eb5": "tryAddReward(address)", "cc38c8a0": "insuranceAccount()", +"cc38d7ca": "SetFreezingTime(uint256)", "cc3938f9": "chkLockedA(address,uint256)", "cc397ed3": "getCurrentFor(address)", "cc3a0c8d": "customerExchangeEther(uint256,address,string)", "cc3ad9a1": "unPackParams(uint256)", +"cc3ae6e6": "pegInEth(string)", "cc3b8806": "getCertificateMetaDataCount(bytes32,bytes32,bytes32)", +"cc3b8e06": "investorGain()", "cc3bb31a": "crowdsaleStart()", "cc3bde3d": "TOTAL_SUPPLY_LIMIT()", "cc3bf9e9": "redeem(bytes32,address)", +"cc3c0f06": "claimed(bytes32)", "cc3c2c01": "getValidityBondFloor()", +"cc3c4ca1": "yell()", "cc3c59cc": "Paymec()", +"cc3c6df6": "mintManagerFee()", "cc3c7098": "createTokenToMarket2021()", "cc3c74a1": "proposalNonce()", "cc3ccf57": "previous_owner()", "cc3d2721": "minWithdraw()", +"cc3d4c75": "blackListBooster(uint256)", "cc3d574b": "ElectedBoardController(address,address[],uint256,address)", "cc3d967b": "getUserDetails(address)", "cc3df01f": "issueToken(uint256)", +"cc3e0f4d": "albert()", +"cc3e20df": "mint(address,address,address,address[],uint256[],address[],uint256[])", "cc3e378e": "hasEnoughFundsToStart()", +"cc3e57d9": "myArray(uint256)", +"cc3ea6fa": "questionIDToRuled(bytes32)", "cc3eacbb": "getOraclizeFee()", +"cc3eea6a": "frontrunExactTokens(uint256,uint256,address,uint256,address)", "cc3efd6b": "PUKCoin()", "cc3f44bf": "getGoldStatusMinted(address)", "cc3f51d0": "hitPotProcess(string,bool,uint256)", +"cc3f5ec1": "deployAuctions(address)", +"cc3f6106": "TransactionCompleted(address,address)", "cc3fa0fd": "NobleAssetsCoin(uint256,string,string)", "cc3fdd4c": "buyFeePercent()", +"cc4027c0": "rewardRate3()", +"cc411e73": "addItem(uint256,uint256,uint8)", +"cc41241c": "getHoldedCoverDetailsByID2(uint256)", "cc41a396": "rateStage3()", "cc41d3b2": "refundPreIco()", "cc422cc2": "coeRemainingAtCurrentRate()", "cc423c28": "setSchellingExpansion(uint256,uint256)", +"cc423c42": "lv1PerBlock()", +"cc42a7f3": "qianMintCost()", +"cc42adab": "getRemainAirdrop(address)", "cc42e83a": "withdrawWinnings()", +"cc4355c6": "userETHLGE(address)", +"cc435bf3": "isValidAsset(address)", "cc436196": "initialFundsReleaseDenominator()", "cc436e42": "memberIsActive(uint8)", +"cc438d8b": "bsdPerBlock()", +"cc43f3d3": "setBurnAmount(uint256)", +"cc4422a2": "unIssuedGoldKeys()", "cc442c3f": "ICO_PRICE4()", +"cc442dab": "controlBasePrice(uint256)", "cc445611": "purchase(bytes32)", +"cc44919b": "Check(address,uint256)", +"cc44a2fd": "loanPlans(uint256)", +"cc44aa20": "balanceAirDropToken(address)", "cc44b15b": "setCode(address,bytes32,uint256)", +"cc44d753": "pendingZUSE(uint256,address)", "cc44fd2b": "changeManagement(address)", "cc451581": "getCurrentBigPromoBonus()", +"cc455910": "_calcRateFromQty(uint256,uint256,uint256,uint256)", "cc4580c8": "getBetsLength()", "cc459696": "contentCount()", "cc466256": "_roll(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"cc469125": "createContractCity(string,string)", +"cc46ceda": "NewBuyPrice(uint256)", "cc4720c7": "calculateRewardTokens(uint256,uint8)", "cc47a40b": "reserve(address,uint256)", "cc47de73": "ExpandT()", +"cc47dfc9": "geticoremaining()", +"cc481912": "disallowPrecirculation(address)", +"cc4830f5": "changeHouseRate(uint256)", +"cc48f4db": "interfacesImplemented(bytes32)", "cc490e64": "getSplitCount()", "cc494291": "setJobController(address)", "cc4999ea": "getTradingInfo(uint256)", "cc49ede7": "getVesting(address)", +"cc4a27fd": "getEstimatedTokenForETH(uint256)", +"cc4a2f13": "getAddressByY(address)", +"cc4a43c0": "_users(uint256)", "cc4aa005": "getDestroySharesOwnerValue()", "cc4aa204": "ERC20()", +"cc4b0d3a": "songCandidates()", "cc4b998a": "titleIds()", +"cc4bedfd": "collectOwnerWinnings()", "cc4bf6a3": "miningTen()", "cc4c1c05": "SwytchToken()", +"cc4c59b1": "minDoTxEarly()", +"cc4c9ba4": "Do_Game_Update()", "cc4cc05f": "collectToken()", "cc4d233c": "Reclaimed()", +"cc4d3240": "lpTokenExistsInPool(address)", +"cc4d424e": "TokenSold(uint256,uint256,uint256,address,address,string,uint256)", "cc4d819c": "tokensPurchased()", "cc4d96df": "_refreshVoteForVoter(uint256)", "cc4da8f4": "EventWinReward(address,uint256)", +"cc4daf62": "rejectGrant(string)", "cc4e0008": "Ticket(address)", +"cc4f4d83": "addDelegatorStateChangePermission(address,bool)", +"cc4fa08d": "rollbackTransfer(address,address,uint256)", "cc4fa81b": "exchangeCalculator(uint256,uint256,uint256)", "cc4fbc43": "acceptTokenPayment(address,uint256,address,uint256)", "cc5061da": "voteForUser(uint16,address)", "cc50dacb": "buyCar(uint32)", "cc50fc28": "mintInternal(int256,address,uint256)", +"cc51e143": "recognizeSubRegister(address)", +"cc523287": "startPrime()", +"cc527775": "getFilledAmount(bytes32)", +"cc527d8c": "gettenantname()", "cc537821": "buyNextRank()", "cc539eb1": "replaceAccount(address,address)", +"cc53e53f": "testmarketsMarket()", +"cc54f5e8": "protocolTokenAuthority()", "cc552c8e": "setHardCapUSD(uint256)", "cc5530eb": "endPreSaleStage()", +"cc554558": "GetAccountIsLockByDateCount()", +"cc558dc0": "instantWithdraw(address,uint256,address)", +"cc56ac13": "addFundWL(address)", +"cc56f581": "getUserInfos(address)", "cc577f38": "addPresaleAmount(address,uint256)", "cc57e4f8": "increasePregnantCounter()", +"cc57e99e": "approve_694(address,uint256)", +"cc57f89a": "Log2_fnc(address,bytes32,uint256,string,string,string,function,uint256,bytes1,uint256)", +"cc58b5ef": "finishRequest(uint256)", "cc58bcf8": "getCurrentLevel(uint256,uint256,uint256)", +"cc58ed08": "getIsPause()", +"cc59200e": "getAdminActionID(uint8,uint160,uint256)", +"cc59a723": "depositeFortuna(uint256)", "cc5a02cb": "withdraw(address,uint8)", +"cc5a671a": "m_DSwap_Main_Address()", "cc5a7051": "_setMinDailyPerUser(uint256)", "cc5a7804": "payoutTokens(address,uint256,uint256)", "cc5aba27": "ConstructorTest(uint256,uint256,string,string)", "cc5b13a0": "PAYOUT_DELAY_INTERVAL()", "cc5b2292": "DepositForDividends(uint256)", +"cc5b2873": "executeProposal(address,address,bytes)", +"cc5b2f64": "getLTVAaveV1(address)", +"cc5b4899": "pricesXAU(uint256)", +"cc5b4f79": "thirtySixMonthReward()", "cc5b542e": "toBeDistributed()", +"cc5bd455": "getMarketPrice(string,string,string,uint256,bool)", "cc5c095c": "mintableSupply()", "cc5c4224": "setFreezingManager(address)", "cc5c4a6b": "attachPresale(address,address)", +"cc5c5656": "pumpMo()", "cc5cab33": "userRewarders(address,uint32)", "cc5cee0a": "calculateEthereumReceived(uint256,uint256)", +"cc5d6e91": "addNonPayableAddr(address)", +"cc5da974": "updateRun(bool)", +"cc5dcd11": "multiTransferTokenEther(address,address[],uint256[],uint256,uint256[])", +"cc5edcc6": "reapplySubmission(string)", +"cc5ef057": "updatePublicCalls(address)", "cc5f0240": "batchCancelVoteForCandidate(address[],uint256[])", "cc5f09fb": "getNbCitizensLocation(string)", +"cc5f5cb6": "Pay(bytes32,address,uint256)", +"cc5fc0a3": "tokenToTokenTransferInput(address,address,uint256,uint256,uint256,address)", "cc5fc0d7": "updateInvestBalance()", "cc603ed5": "collectRate(address)", +"cc608747": "freeGST2(uint256)", +"cc60bc4f": "extendBiddingTime()", +"cc616028": "endIco(address[])", +"cc61697b": "_IPFSHashHasBeenSet(uint256)", "cc61d0cb": "changeMinWithdraw(uint256)", "cc620704": "joinToTrack(bytes32)", "cc6266a1": "getHashFromData(bytes32,bytes32)", @@ -117065,27 +214197,48 @@ "cc638e03": "rublaJEPoken()", "cc63996e": "getHairValue(uint256)", "cc63a3c9": "set_token(address)", +"cc63e03e": "makeBet(uint256,uint256,address,uint256,uint256,uint256)", +"cc63e7ba": "RemoveLiquidityWithPermit(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"cc641335": "burnMultiFrom(address[],uint256[])", +"cc642784": "distributors(address)", "cc642cc2": "numHolders()", "cc64cfcb": "getDeployedMarriages()", "cc64e2d5": "depositEthers(address)", +"cc653f60": "submitVote(uint256,uint256,string,string)", +"cc6552d1": "vipUserEnabled()", +"cc65533f": "updateBonusBalance(uint256)", "cc657697": "GetMatchLength()", "cc657e62": "sendToken(uint256,uint256)", +"cc664733": "rarityByImages(uint256,uint256)", "cc668524": "verifyPosition(uint8,uint64,uint64,uint64)", "cc66d3c7": "buyEngineer(uint256[8])", "cc66ec47": "TerraformReserve(address)", +"cc674309": "setBaseURi(string)", "cc677679": "setEMAPeriods(uint256)", "cc679ffc": "TUPC()", "cc67b1bf": "getTransferPerc()", +"cc67bd08": "setKeepers(address[],address)", +"cc68691c": "mint_testSFI(address,uint256)", +"cc68a7c3": "expiringTicketsAtIndex(uint256,uint256)", "cc69084f": "PHASE_CLOSED()", "cc691763": "draw(uint32,uint8,bytes32)", +"cc694d48": "ERR_WRAPPER_INVALID()", +"cc6a02f3": "adminWithdraw(address,uint256,address,address)", +"cc6a1a06": "EmergencyWithdraw()", +"cc6aa117": "assign(address[],uint256[])", +"cc6be5e4": "feeHolder()", "cc6c010d": "ATMGold(uint256,string,uint8,string)", +"cc6c51f2": "increaseShareholderPoint(address,uint256)", "cc6c8e31": "NFXCoinToken()", "cc6ca7b7": "specialBaseLayer(uint256)", +"cc6cb19a": "donations(address)", +"cc6cdcef": "getVerifierName(address)", "cc6cf340": "BERTCLUBCOIN()", "cc6d7850": "burnILF(address,uint256)", "cc6d8ba6": "inheritInvestorPosition(uint256)", "cc6da375": "recipientVIP(address)", "cc6db55f": "setJackpotModulo(uint256)", +"cc6dbc27": "withdrawAll(address,uint256)", "cc6e15e5": "setDelayedTokenAllocator(address)", "cc6e6f25": "Withdraw_5()", "cc6e70e8": "MSTCOIN()", @@ -117093,70 +214246,120 @@ "cc6ec39a": "switchToGame(string)", "cc6eced7": "priceOfTeam(uint256)", "cc6f0ed0": "BirthdayCandy()", +"cc6fc7b9": "createTerpene(string,string,string)", +"cc701bc7": "removeCallTo(address)", +"cc704d54": "getFPY(uint256)", "cc70993d": "earlyTimeLock()", +"cc70baef": "setL1Messenger(bytes32,address)", "cc70bb1a": "publish(string,string,string,address)", +"cc70cdb7": "kilele(address)", "cc70decb": "showBonus(address)", +"cc717f99": "updateETHV(address)", "cc7188a5": "unLinkFromMasterWallet(address)", +"cc720470": "enterBidForLegendaryResult(uint256)", "cc724b27": "isTesting()", +"cc729406": "UniverseGalaxy()", "cc72c918": "queryOwnerAddr()", "cc72ecb0": "purchaseStartBlock()", +"cc73db08": "totalStarEntry()", "cc741c9c": "getDidClaimBooty(address,uint256)", +"cc74234b": "projectIdToAdditionalPayeePercentage(uint256)", "cc743a86": "ICO_PROMO_REWARDS()", "cc74e2ca": "min_refund_block()", +"cc74f4c0": "addToTransferWhitelist(address)", "cc750395": "setMonthOpen(uint256,uint256,uint8,uint256,uint256)", "cc754a28": "ICOStartTimeChanged(uint256)", "cc755b70": "releaseFrozenBalance()", +"cc755f9a": "CurveSUSDSwap()", "cc759458": "unconfirm(address)", "cc759f88": "removeBools(bytes32[])", "cc75ac19": "_withdrawAffVault(uint256)", "cc75c4b1": "abc(uint256)", +"cc75c9b0": "removeRegisteredUpgrade(bytes32)", "cc75cc9b": "SendmoneyCall(uint256)", "cc764986": "updateEmaDailyYield(uint256)", +"cc76a32c": "bbuyTokens(address)", "cc774681": "mapCompletionNumberForWithdraw(address)", +"cc775f9c": "mintLLCwithDetails(address,string)", +"cc77828d": "getCurrentTokens()", +"cc77967b": "chalzToken()", "cc77b82d": "BEEFYToken()", +"cc780be2": "secondaryReceiverRevenueSources(address)", "cc783c5e": "setBankrollerContractOnce(address)", +"cc786424": "checkModifier(address)", "cc78cc98": "multisigPreICO()", +"cc78fddc": "GetAddressFinancier()", "cc7949ae": "round_count()", "cc797d8e": "setMaxAttackPrizePercent(uint256)", "cc798890": "queryAccounts()", "cc79aa04": "getProposal(bytes32,bytes32)", +"cc79c682": "cannabinoidCount()", "cc79eaf0": "getColors(uint32)", +"cc79f97b": "CHAINID()", "cc7a060f": "ethersCollecteds()", "cc7a2049": "permissionManager()", +"cc7a262e": "stakedToken()", +"cc7a4870": "getClaimedCount()", +"cc7ae663": "removeShortablePynths(bytes32[])", "cc7b2ee7": "initAirdropAndEarlyAlloc()", "cc7b41ec": "changeRollUnder(uint256)", "cc7b60fe": "_emitWorkFinished(uint256,uint256)", +"cc7b93d8": "calc_add_liquidity(address,uint256,uint256)", +"cc7bed3f": "rootId()", "cc7c4c39": "gotWinner()", +"cc7c814d": "srcDebtRedeem(bytes32)", +"cc7cab95": "tokenMinterContract()", "cc7cd9f8": "fundingEthGoal()", "cc7cddb8": "dive3(address)", +"cc7ceaf1": "LogPrepaidRedeemed(address,uint256,string,uint160,uint96,uint32)", "cc7d1a0f": "currentHighestBid()", +"cc7d4d53": "totalVotes(bytes32)", +"cc7d788a": "daiocInitialBalance()", +"cc7dbbc6": "yeldies()", +"cc7de1d0": "CHAD(address)", "cc7e1b9a": "setRedemptionAddress(address)", "cc7e2208": "Order()", "cc7e492e": "refillInstantMintPool()", "cc7e930c": "commitmentsOf(address,address)", +"cc7ebdc4": "compAccrued(address)", "cc7f365c": "VLADALINA()", "cc7f593c": "setRequiredMajority(uint256)", "cc7f608d": "setSaleType(uint8,uint8,uint32,uint256,uint256)", "cc7f8266": "read_i8_array()", "cc7fa928": "nbMonthsPay()", +"cc7fc810": "setReceiptAsset(address)", "cc7fe38c": "addPresaleInvestor(address,uint256,uint256)", +"cc800385": "setupCardFactory(address)", "cc80f6f3": "show()", "cc80f9e8": "ownerOfID(uint256)", "cc81dbb5": "DEFROST_FACTOR_TEAMANDADV()", "cc822f54": "changeYDistAddress(address)", +"cc824473": "reservesLength(uint256)", "cc826160": "ownershipDistributed()", "cc82e72e": "SetPlatformInformation(string)", "cc833e69": "Cryptonationz(string,string,uint8,address,address,address,address,address)", +"cc83eef5": "ratePerToken()", +"cc83f546": "RequiredRebuy(address,uint256)", +"cc840048": "interestBalance(address)", +"cc841348": "initialize(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cc851cac": "SecuritiesVaultBank()", +"cc85654c": "MinReward()", +"cc85dd33": "_plyrNames(uint256,bytes32)", +"cc85f080": "profits(address)", +"cc85f194": "APInternal(uint8,uint256)", +"cc862de5": "writedownAmount()", "cc863948": "withdrawTokenShare()", "cc86566c": "tempMngr()", "cc8658b3": "chkStaff(address,address)", "cc865b71": "withdrawRoundController(uint256,address)", +"cc867a17": "INTERIM_ADMIN()", "cc872b66": "issue(uint256)", "cc876ded": "born(uint256,uint256)", "cc87ed82": "checkNumCards(uint256,uint8,uint8,bytes32,bytes32)", "cc8818f6": "setReservefund(uint256)", "cc88be52": "NuoBaoChainToken(uint256,string,uint8,string)", +"cc88c1ab": "setWeb(string)", +"cc88c99a": "getIEOsInfo(address[])", "cc891023": "depositLock(address)", "cc893855": "calculateTotalPayment(uint64)", "cc896494": "_setGameOver()", @@ -117164,31 +214367,57 @@ "cc897e40": "END_SKO1_UNITS()", "cc89d596": "getCryptantFragments(address)", "cc89e8bc": "ecosystemTokens()", +"cc8a45d7": "pharmacy(uint256)", "cc8a86a0": "Y2_release()", "cc8af0fe": "bytesToUInt(bytes,bytes)", +"cc8af1b9": "allowSharePriceDecrease()", +"cc8b1ac9": "smgMint(uint256,bytes32,uint256)", +"cc8b2cb4": "registerDapps(string,string)", "cc8b34ab": "CrowdCoin()", +"cc8b47eb": "divCardIndexToApproved(uint256)", +"cc8b7b73": "delta(uint256,uint256)", "cc8b96e5": "prepare(uint256,address,address)", "cc8baf63": "m_tokenDistributor()", +"cc8bcfee": "drawDai(address,uint256,bytes32,uint256)", "cc8bd060": "setUnitsOneEthCanBuy(uint256)", +"cc8bd816": "mintFeePercentage()", "cc8c0f9f": "transferLocked(address,uint256,uint8)", "cc8c3c45": "getTokenIdsLength()", "cc8c49aa": "sc(uint256,uint256,uint256,uint256,uint256)", "cc8cd5c5": "withdrawDragonsFilm()", "cc8ce27e": "CryptoChamps()", "cc8ce862": "allowedGasPrice()", +"cc8d1f71": "stringify(address)", +"cc8d22e8": "LimitsChanged(uint256,uint256,uint256)", +"cc8d383a": "feesCollectorAddress()", +"cc8e2394": "getPassword()", +"cc8e3f2b": "getBirdBalanceMetadataExt(address,address,address)", +"cc8e42ce": "getSubscribedInfo(uint256)", "cc8e4bc2": "LOCKAMOUNT3()", "cc8eac6c": "isSTOAttached()", "cc8eb425": "newuser(address,address)", "cc8f0b48": "withdraw(bytes32,address,uint8,bytes32,bytes32)", +"cc8f3b8e": "setPercentMultiplier(uint256,uint256)", +"cc8fd393": "targetRate()", +"cc900021": "changeTitanETHPair(address)", "cc90050e": "GetCurrentRoomAndRound(address)", +"cc9018de": "Create(address,uint256)", +"cc90333d": "transfer_gas_cost_map(address)", +"cc90530a": "triggerEtherTransfer(address,uint256)", "cc9062f9": "finalizeTransferChildrenOwnership()", "cc90da29": "bonusNum()", "cc90e725": "addProject(string,address)", +"cc915339": "getPeoples()", +"cc91dfa7": "TMTG_Whitelisted(address)", "cc91e91c": "Freezable()", "cc925957": "logAccess(string,string,uint256)", "cc92bad4": "updateParkingRate(uint256)", +"cc92d31c": "createVault(address,address)", +"cc92e737": "abzPerBlock()", "cc92ebad": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", "cc937ccd": "Doves()", +"cc93b001": "Buy(uint256,address,uint256,uint256)", +"cc93dab4": "setPunishForUnreveal(bool)", "cc93ee70": "forwardCoins(uint256)", "cc93f66e": "endTournament(uint256,uint256)", "cc9415d0": "commitOn(uint256)", @@ -117196,154 +214425,276 @@ "cc949797": "balanceAffiliateOf(address)", "cc94d923": "createTransaction(address,uint256,bytes32,address,address,address)", "cc94e4a2": "set_sale_address(address,address)", +"cc952b57": "totalLoans()", "cc954820": "changeFallbackDeposit(uint256)", +"cc959c73": "setID(uint256,uint256)", "cc95d8d1": "s36(bytes1)", "cc96019f": "referralTokenWallet()", +"cc964827": "loadTopPartyTeam()", "cc96b943": "offerOptionsToEmployee(address,uint32,uint32,uint32,bool)", "cc976620": "usdPerEthCoinmarketcapRate()", "cc97b38f": "BANCOR_X_UPGRADER()", +"cc97baf9": "dvdTotalSupply()", "cc97edbf": "bmi()", "cc98c893": "developer_Transfer_ownership(address)", +"cc98ed7b": "hasExited(address)", "cc98ff20": "purchaseVillage(uint256)", "cc991d8a": "BTestToken(uint256,string,uint8,string)", "cc996d1b": "bids()", +"cc99ece1": "jewelContract()", +"cc99fbf6": "LogPauseRoundC()", +"cc9a10a6": "setOracleType(uint256,address,bool)", "cc9a31a7": "isRepresentor(address)", "cc9a88c9": "canSend(uint32,uint32,int256)", "cc9ab267": "voteForCandidate(bytes32)", "cc9ac376": "addLock(address,uint256,uint256)", "cc9ae3f6": "getMyReward()", +"cc9ae693": "take(bytes32)", "cc9b31c9": "exchangeFeeIncurred(uint256)", +"cc9b35d3": "setCobjBucketC0(uint256)", "cc9b714c": "ClearAuth(address)", "cc9b71c2": "TaskCoin()", "cc9b7826": "setGuaranteedAddress(address,uint256)", +"cc9b91dc": "adminPercentage()", "cc9ba6b2": "buyRef()", "cc9c0936": "startedWorkTS()", +"cc9c1807": "availableTradingFeeOwner()", "cc9c437c": "get_orderAddress(address,uint256,uint256,uint256,uint256)", +"cc9ce84f": "cryptoDODO()", "cc9d7519": "getTierInfo(uint256)", "cc9d858d": "FundsRegistryTestHelper(address[],uint256,address)", "cc9de25d": "bytesToUint256(bytes)", "cc9e735f": "decrementDate()", "cc9f28ea": "getDeletedTeams()", +"cc9f7358": "createPromoColor(uint256,uint256,uint256,string,address,uint256)", "cc9fd9d9": "onSetCredit(address,uint256)", +"cc9fe445": "allprize()", +"cc9ff632": "destroyDelay()", "cca07f44": "setSpecialLimits(address,uint256,uint256)", "cca08d55": "updatesolsforhire()", +"cca0b7b2": "deleteProvider(uint256,address)", +"cca0fc09": "totalInvestedPerAddress(address)", "cca0feb6": "updateTax(uint256)", "cca10ba5": "getMultiSigBalance()", +"cca13628": "TransferWithLockEvt(address,address,uint256,uint32)", +"cca16fa8": "allowance(uint256,uint256)", "cca213a1": "setTranchTime(uint256[])", "cca2194c": "getInvestorContribution(address)", "cca26917": "getRoundBalance(address,address,uint256)", +"cca3a8c8": "getAddressOfContract()", "cca3e832": "_balanceOf(address)", +"cca3f136": "VotingStatus()", "cca40111": "_recharge(address,uint256)", "cca41651": "addressPrivateSale()", "cca470d2": "roundInvestorInfoByAddress(uint32,uint32,address)", +"cca49202": "contractTransfer(address,uint256)", "cca4f3c5": "winthdraw(address,address,uint256)", "cca5020b": "totalLBSold_PRIVATE()", "cca520ee": "transferFromMoreThanAllowedTest(address)", +"cca55fc4": "buyLevelViaContract(uint256,uint8,uint32,uint256)", +"cca5c188": "DOGS()", "cca5dcb6": "isTransferEnabled()", "cca63f4f": "buyXname(uint256,uint256,string)", +"cca652cd": "susafe()", "cca6ae0b": "getGPSMinEth()", "cca746df": "getAnnualFee()", "cca78d53": "getActiveListLength()", "cca794da": "setGzeBonusOnList(uint256)", +"cca7bb26": "getInterestFeesUnclaimed()", +"cca854a4": "setProperty(string,string,uint256,string)", +"cca88cf7": "testFairDistribution(address,address,uint256)", "cca91579": "PlaceHolder(address)", +"cca92d9c": "mapMemberPool_balance(address,address)", +"cca955a0": "recieveMoney()", "cca97025": "_performTransferFromWithReference(address,address,uint256,string,address)", "cca9943c": "wei25()", "ccaa5135": "LIFECOIN()", "ccaa5c65": "LomeliToken()", "ccaab1ca": "companyPercent()", "ccaaef45": "purchaseCompanyAdv(uint256,string,string)", +"ccaaf98b": "addNNReward(uint256)", +"ccab01a3": "stableRateSlope2()", "ccab1be7": "SubmissionAccepted(address)", +"ccab22c2": "calculateAMMAddress(address,address,uint256)", "ccab841b": "divf(int256,int256,uint256)", "ccabcfca": "XMLYBadge()", +"ccabec72": "stsTokenPerBlock()", "ccac77f5": "GooLaunchPromotion()", +"ccacb435": "parliamentsTaxDivisor()", +"ccacb9d8": "verifyRateDeviation(uint256,uint256,uint256,uint256)", +"ccace0b0": "grantSnapshotRole(address)", +"ccace7df": "burnCAToken(uint256,uint256,address)", +"ccad0280": "BoughtTicket(uint256,address,uint256)", "ccad19e4": "sendEtherFromAddContract(address)", +"ccad30eb": "inAmount()", +"ccad973d": "onWithdraw(address,uint256)", +"ccadb604": "Sell_Item(address,string,uint256,uint256)", "ccadd6b1": "bet1Of(uint256)", +"ccadd8a2": "LoanProductAdded(uint32)", "ccadef15": "_setOCPTokenContract(address)", "ccae794a": "showFPCount()", +"ccae9915": "adminSetVoteFee(uint256)", +"ccaec232": "makeOrganUnavailable(uint256)", "ccaee929": "JihoyContract()", "ccaf4b03": "setIreg(uint256)", +"ccaf6921": "MinPrizeAltered(uint256)", +"ccafb35a": "ownerSendTokens(address,uint256)", +"ccafc387": "SAFE_TX_TYPEHASH()", +"ccafe922": "updateSynchronous(bool)", "ccb00344": "changeEtsAddress(address)", +"ccb045b9": "marketDetailsForAsset(bytes32)", +"ccb06307": "get_adapter_address(uint256)", "ccb07cef": "crowdsaleClosed()", "ccb0893d": "isUIntPrivate()", +"ccb08ac3": "inCashStuck(address)", +"ccb0cdf7": "addSuperWhitelisted(address)", +"ccb12f04": "registerBuyer(string,string,string,string,string)", +"ccb13693": "latestNewSpriteForSale()", "ccb13cbd": "_acceptAnchorAdmin()", +"ccb15b20": "badgerHunt()", "ccb1c0a1": "getQuestion(string)", "ccb1cbbc": "testFailBurnNoAuth()", "ccb20e8e": "StormBrewCoin()", "ccb22e37": "description3()", +"ccb2d4b0": "ij()", "ccb2e9a4": "insertAccount(bytes32,string,uint256,string,string)", "ccb3449e": "NewPresaleAllocation(address,uint256)", +"ccb3d830": "DistributeFirst(address,uint256,uint256)", +"ccb440be": "jpSplit_(uint256)", "ccb50a29": "SIGMA_MAX_CARGO()", +"ccb51f6a": "addAthletes(string,uint256,uint256,uint8)", "ccb53365": "startICOPhase()", "ccb570e3": "transfer(uint256,address,address)", +"ccb5f721": "timetest()", "ccb60e39": "rentOutMultiple(address,uint256,uint256[])", "ccb61dad": "MICRO_DOLLARS_PER_BNTY_MAINSALE()", +"ccb646c6": "protectContent(bytes32)", "ccb64997": "isBCDCToken()", +"ccb69ff8": "addressTRDbalancesPendingSize()", "ccb6cbe8": "icoBottomIntegerPrice()", +"ccb6e043": "getPeriodIsFinalized(uint256)", +"ccb75d7f": "TAX_FRACTION()", "ccb767ae": "transferTo(address,uint32)", +"ccb770b9": "allPlanDetails(uint256)", "ccb783a9": "setGPSStartTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"ccb7d4d7": "removeCardType(uint256)", +"ccb801bf": "setTokenWhitelistId(uint256)", +"ccb86cd4": "EthMin()", +"ccb8c1e0": "getSum(uint256[])", +"ccb91792": "subReservedAmount(uint256)", +"ccb934f8": "totalBlock()", +"ccb962a7": "createItem(uint16,uint16,uint16,uint16,uint16,bool,uint256,address[],uint256[],address)", +"ccb9891e": "stakingOffer()", "ccb98ffc": "setEndTime(uint256)", +"ccb9cc4c": "setHolyVisor(address)", +"ccba268d": "setMultiPrice(bytes32[],uint256[])", +"ccba7e20": "frozeUser(bytes32,bytes32)", "ccbac9f5": "randomNumber()", "ccbae5f6": "createEscrow(address,address,uint256,uint256)", "ccbb41d0": "TOC()", "ccbb52f5": "getGroupRates(uint256)", "ccbba441": "setMigrateStage()", +"ccbbc9b3": "existAuctionsOf(uint256,address)", +"ccbbd260": "daos(uint256)", +"ccbbffce": "bulkSendETH(address[],uint256[])", +"ccbc0ed2": "msToken()", "ccbd5152": "bankrollBeneficiaryAmount()", "ccbd8d25": "setDropAmount(uint256)", "ccbd8d29": "tokenAvatar()", +"ccbd99ba": "WithdrawEth(address,uint256)", "ccbda1af": "getChannelByName(string)", +"ccbdb85c": "declineOrder(uint256)", "ccbde432": "delete_candidate(uint8)", "ccbe2a68": "kill(uint8[176],uint8)", "ccbe4968": "Withdawal(address,uint256)", +"ccbea408": "TokensBurned(address,uint256,uint256)", "ccbfc6ed": "revokeSignature(bytes)", +"ccbff979": "types()", +"ccc0446b": "PreGrant(address,address,uint256)", +"ccc05bf4": "reloadOwnershipTransferContract(address)", +"ccc07058": "DisputeCrowdsourcerCreated(address,address,address,uint256[],uint256,bool)", "ccc08913": "Restricted()", "ccc08974": "setGameActive(bool)", "ccc108d7": "reopen()", +"ccc109e2": "baseUserInvestment(bytes32,address)", "ccc11f11": "hasAssetRights(address,bytes32)", "ccc13814": "max(int256[])", +"ccc2195f": "values(bytes32)", +"ccc2bfb3": "approve_452(address,uint256)", +"ccc39909": "transferManagership(address)", "ccc39b5d": "DonationClaimed(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"ccc39d7d": "KYCAddress(address,bool)", "ccc51afb": "lookupFillingRing(address,uint256)", +"ccc529af": "OnlyERC1155ProxyError(address)", "ccc54d69": "LOCKUP_3M_ICO_TIMESTAMP()", "ccc55189": "Nation(address,address)", +"ccc57490": "GOVERNOR_ROLE()", "ccc5d05f": "testNoTokensNoCalls()", "ccc61bef": "REWARD_WIN_MULTIPLE_PER()", "ccc62bbe": "assertEq2(bytes2,bytes2,bytes32)", "ccc643d7": "updateSaleTime(uint256,uint256)", +"ccc6461b": "emergenceTriggerProvider(uint256,address,uint256,string,bytes)", "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)", +"ccc9e2f3": "fiveDayHodlPercent()", "ccca123b": "waitTime()", "ccca237c": "foundationAsset()", +"ccca293a": "setEventEndDate(uint256)", +"cccb2a9f": "getAvailableBalanceForSale(address,address)", +"cccb2fad": "balance(bytes8)", "cccb987f": "withdrawTwice()", "cccc020f": "changeInsuranceFeesOperation()", +"cccc2f60": "transferENS(address,bytes32,uint256,bool,bool,bytes)", "cccc8f91": "getDappId()", "ccccc36b": "createAcceptAndAdditionalsFromBytes(bytes,bytes,bytes,uint256[])", +"cccd2451": "getBetProfit_(uint256)", "cccd2ea8": "getProductData(address)", +"cccd8960": "harvesterReward()", +"ccce1d7f": "blocksToLiquidationDangerZone()", "ccce413b": "symbols(uint256)", "ccce6458": "createKingdom(string,string,uint256,bool)", +"ccce9506": "initiateRewardDeposit(uint256)", "ccceee48": "lastBlock_v1Hash_uint256()", +"cccf1275": "rewardTransfer(uint256,address)", +"cccf3a02": "poolName(uint256)", "cccf3a94": "gasForCLOUD()", "cccf7a8e": "has(uint256)", "cccf88f9": "batch_refund_bix(address[],address,uint256[])", +"ccd06318": "setConverter(address,address,address)", +"ccd0ef69": "addSolution(uint256,address)", "ccd15921": "addTransferAndCallWhitelist(address)", "ccd1a621": "addguess(uint256)", +"ccd1c06c": "cronaddOf(address)", +"ccd22016": "coinAgeForAddressAt(address,uint256)", +"ccd28a4c": "airDropHistory(address)", +"ccd2a556": "PynthsRates()", "ccd30a62": "getWhitelistedAddresses(uint256)", "ccd331bf": "bountyAmount()", "ccd385f5": "staff_3()", +"ccd39037": "campaign(uint256)", "ccd3948b": "removeRestaurant(address)", "ccd39537": "dilute(address,uint256)", "ccd4020c": "PassTokenReborn(address)", "ccd46ae4": "BuyTicketUseVault(uint256,uint256)", +"ccd50d28": "playerRolls(address)", +"ccd5b18f": "setPatient(uint256,string,string,string,uint256,string,string,string,string)", "ccd65296": "initialize(uint256,uint256,uint256,uint256,address)", "ccd6559b": "newRandom(string)", "ccd65c0a": "activateMainSale()", "ccd68f3b": "stamps(uint256)", +"ccd6a4dd": "callProxyManager_getTokenHandlersLength()", "ccd6aca4": "preSaleSecondCap()", +"ccd6be6f": "onLevelUp(uint256,address,bytes32,uint256)", "ccd71e8c": "armySubmarinesCount(uint256)", "ccd75361": "setFooInt(uint256)", +"ccd7cd7b": "updateApiAddress(address)", +"ccd849e3": "trexPerBlock()", "ccd89ecd": "calculateManyHash(address,address[],uint256[],uint256,uint256)", +"ccd8a2cf": "restartSettlementState()", "ccd8ad0c": "setGenTime(uint256)", "ccd8c186": "DebitCoinTokenGenesis(address)", "ccd8e2cf": "AnmiToken()", @@ -117351,75 +214702,137 @@ "ccd93998": "getRequiredSignatures()", "ccd95a50": "sendTokenToMultiAddr(address[],uint256[])", "ccd96ab0": "cite(bytes32,string)", +"ccd96eb4": "govAttachTWAP(address,address,address)", +"ccd96eb6": "lockerCount()", "ccd9aa68": "passedKYC(address)", +"ccd9b676": "theStage()", "ccd9d08f": "MLIOU()", +"ccda46bc": "MIN_BALANCE_TAX()", "ccda4b99": "getMethodValue(string)", "ccda696b": "ownersTransfer(address,uint256)", +"ccdabc2f": "sett(uint256)", +"ccdad94f": "my_gas()", "ccdaeab0": "getTechBonus3(uint256)", "ccdb05d4": "NokuCustomERC20(string,string,uint8,address,address)", "ccdb3f45": "newAddress()", "ccdbbff5": "securityTokensWallet()", +"ccdc3097": "bossRoundNumber()", "ccdc535e": "placeBetV1(uint256,uint256,uint256)", +"ccdd0149": "nextSupplyRate(uint256)", "ccdd1979": "multisend(address,address[],uint256)", "ccdd49f2": "StyToken(address,address)", +"ccdd6d86": "ContractAdded(address,string)", "ccdd95d6": "releaseEnjinTeamTokens()", +"ccdd9f5d": "liquidateLoan(uint256)", +"ccddcdf2": "acoTokensData(address)", +"ccdeb7ba": "_liquidatePair(address,address,address,address)", +"ccdf114b": "deconvert(address,address,uint256)", +"ccdf4299": "closePrice()", "ccdf68f3": "isOutcomeSet()", +"ccdf9763": "swiftResolverTokenBalance()", "ccdfcfa4": "returnFundsForAll()", "cce0244d": "setSafeContract(address,bool)", "cce0a1ca": "isPresaleSetup()", +"cce0b64c": "transferMBCFrom(address,address,uint256)", "cce0c0fa": "addOneGame(string,uint256)", "cce0cd0c": "blockVersion()", "cce106f8": "AmountToLittle()", "cce1dfd2": "minimum_token_sell()", "cce21eda": "DividendsWithdrawal(uint256,address,uint256,uint256,uint256,uint256)", "cce2270a": "isSecondStageFinalized()", +"cce253bc": "pausenetwork(uint256)", "cce2771e": "redeemUTXO(bytes32,uint8,uint256,bytes,bytes,bool,uint8,bytes32,bytes32)", +"cce28096": "historicalVotingPowerAtNonce(address,uint256)", "cce29ea7": "preSaleEndTime()", +"cce2f3fb": "shutdown(address)", "cce2f8e3": "checkAddressMisused(address)", +"cce34ec6": "getGasCostOfComputeAddress(address,address,address,uint24)", "cce356b5": "getHodlers()", +"cce37daa": "setSlotNumber(uint256)", +"cce37f3e": "orderFilledAmounts(bytes32)", +"cce38761": "ThugswapCall(address,uint256,uint256,bytes)", "cce3906b": "hasWithdrawnRake()", "cce3c13b": "isLeaf(uint256)", +"cce401fd": "transferChainlinkProxyGas(address,address,address,uint256)", "cce48e65": "GeeTestCoin()", +"cce4937f": "SnowflakeWithdraw(address,uint256)", "cce4bd52": "reclaimFunds()", +"cce4f96d": "TransfersEnabledChange(bool)", +"cce5ff7f": "setSchedule(address,uint32,uint32,uint256)", +"cce6765d": "await(address,uint256)", +"cce684c2": "changeContractLockStatus(uint8)", +"cce6ff7d": "Airdrop(address,uint32,uint256)", +"cce76348": "changeForDokiBuybackRate(uint256)", +"cce784cb": "hasMigrator()", +"cce79e78": "transferTokensToTeams(address,uint256)", +"cce7dacf": "setDARKv2MinDAO(uint256)", "cce7db58": "swipe(address)", "cce7ec13": "buy(address,uint256)", "cce81927": "EtherDice(address,address)", +"cce82891": "setNewReleaseTime(address,uint256)", +"cce85055": "rewardsPoolAddress()", +"cce8fbf2": "ContestCanceled(uint256)", "cce91957": "take(bytes)", "cce93ae1": "PeriodChanged(uint256,uint256)", +"cce987d4": "maxSwapAmount()", +"cce9a250": "dealOrder(uint256,uint256)", +"ccea7b86": "redeemedSupply(uint256,uint256)", +"cceae561": "nom()", "cceb6368": "receiveTicket(address)", "cceb9214": "setAuctionStatus(bytes32,uint8)", +"ccebac8b": "finalizedDeposits()", "ccebca11": "Foo(address,bytes32,address)", +"ccebfa3f": "tokenLocks(address,uint256)", "ccec1461": "bulkEtherSender(address[],uint256[])", +"ccec3716": "rescueERC20(address)", "ccecc71f": "getPlayerPoints(bytes32)", +"cced2104": "matrixBonuses(uint256)", "cced2bb6": "LogOwnerRemoved(address)", +"cced41ff": "getGeysers()", "cced9b63": "setBestMatch(uint256,uint256,address)", "cceda56c": "CAPPED_SUPPLY()", +"ccedc41f": "setCompGovernorAddress(address)", "ccedf3d2": "getChainCode(string)", "ccee31e8": "setNbKingdomsType(uint256,address,bool)", "ccee8047": "settleCall(uint256,uint256,address)", +"ccef0c07": "setTreasurerPermission(address,bool)", "ccef6d63": "_isClientPaidUp(address)", +"ccefb2c0": "previousContractBalances(address)", "ccf053ba": "TOTAL_TOKEN_SUPPLY()", "ccf06abf": "canCompose(string,uint256[],address)", "ccf0768a": "transferDividends(address)", "ccf12304": "set_mint(uint256)", "ccf1454a": "addressOf(string)", +"ccf14a66": "intMinB()", +"ccf15a1c": "_joinPot(uint256)", +"ccf19ee6": "Inc()", "ccf1ab9b": "usurpation()", "ccf1e80b": "JUNE()", "ccf20872": "ChainKey(uint256,string,string)", "ccf24838": "updateOwner(uint256,address,address)", "ccf27a4e": "setPrice2(uint256)", +"ccf288c6": "FEE_DECIMALS()", +"ccf28be8": "permis4()", +"ccf2a742": "phaseEnd()", "ccf2b87b": "sendWithFreeze(address,address,uint256,uint256)", +"ccf2e552": "getLiquidityPairIncentiveRate(uint256,uint256)", +"ccf34c49": "physicalAddressOfOperation()", +"ccf3eb9f": "ctoken()", "ccf41499": "TokenFactory(uint256,string,uint8,string)", "ccf4a941": "getVendorApplication(string)", "ccf4b70a": "RATE1()", "ccf4f413": "setSubRegistrar(string,address)", "ccf53a84": "getFile(uint8)", "ccf5401e": "checkQuest(address)", +"ccf55797": "LIMIT3()", "ccf5c5cf": "registerConsumer(address,uint32)", "ccf64316": "playerRollDiceSingle(uint256)", "ccf670f8": "setLevelUpFee(uint256)", "ccf69e9b": "randomContract()", "ccf6b8b3": "CCCoinToken(string,string,uint256,uint256,address,address,address,address,uint256)", +"ccf6c99c": "UnaccreditWarehouse(address)", +"ccf6e37f": "addReader(string,address,address)", +"ccf790a1": "log(address,bool,uint256,address)", "ccf7ba0f": "recoverPrice(address,address)", "ccf7d0d4": "sendTokensAfterCrowdsale()", "ccf7fe56": "JustinCoin()", @@ -117427,218 +214840,405 @@ "ccf8bcf3": "transferOVISBookedTokens()", "ccf8e5d0": "CLITOKEN()", "ccf8ef24": "undelegateVote()", +"ccf9bbb6": "getResourcesQuantityByRarity(uint256)", "ccf9f35f": "awardsCount()", "ccfa8e71": "addBank(string,address,string)", "ccfaa72f": "setRentalPricePerHour(uint256)", +"ccfb3ce9": "ethero()", "ccfbdb9e": "CrowdSaleDapCar()", "ccfc0053": "withdrawMILs(uint256)", "ccfc1e4e": "preSaleWeiCap()", +"ccfc2187": "obiettivi(address)", +"ccfc2e8d": "setFeeDistributor(address)", +"ccfc51c7": "masterBelt()", "ccfc811b": "registerParticipant()", "ccfc8729": "registerWithToken(address,uint256,address)", "ccfc9556": "USDChain(uint256,string,uint8,string)", "ccfcbdbe": "canMakerTerminate(bytes32)", +"ccfd5baa": "getCEthAddr()", "ccfdca9a": "setMinPaymentAmount(uint256)", +"ccfde620": "earnBalance()", +"ccfdeb0a": "fee_()", +"ccfe0b56": "stopAbsorption()", "ccfe4691": "CtfToken()", "ccfed305": "CMDToken()", +"ccff0605": "land2IsPrivate(uint256,uint256)", "ccff361f": "AibitbankToken()", +"ccff3aed": "sum(uint8[3])", "ccff42b2": "isValidAdapter(address)", +"ccffceb3": "l(uint256,uint256)", +"cd001f9c": "transferFromViaSignature(address,address,address,uint256,uint256,uint256,uint256,bytes,uint8)", "cd008f1a": "getMine()", "cd00ee0d": "startToken()", +"cd019cb1": "getBonusTotal()", +"cd01e91b": "getWithdrawnableList(address)", +"cd025b90": "rentBox(string)", +"cd026945": "totalChildrenMapped(uint256)", "cd027be5": "getAllowAmount(address)", +"cd031d3d": "withdrawDeadline()", "cd034234": "refundRequest()", "cd0389fd": "metadataToken()", +"cd039620": "acceptPlatformWallet(bool)", "cd03b093": "getSupportersForTopic(string)", "cd041ae9": "removeCooldown()", +"cd042f6d": "normalizedRatio(uint256,uint256,uint256)", +"cd045524": "openFlashLong(address,uint256,uint256)", "cd048de6": "setWord(string)", "cd04ccfc": "newProposalEthUSDOracle()", +"cd05115c": "updateLevel2batch(bytes2,bytes3[],bytes4[])", "cd05c214": "TOKEN_FOURTH_PRICE_RATE()", "cd05d1eb": "shopPants()", +"cd05e433": "mintArtwork(uint256,uint256)", "cd062734": "getCallABISignature(bytes32)", "cd0643ee": "takeInvestments()", "cd066fd6": "computeInitialPrice(uint256)", "cd0699e9": "OysterPrePearl()", "cd06a7bf": "rewardsupply()", +"cd06db56": "exchangeEthForSgr(address,uint256)", +"cd072ec0": "initCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,address)", +"cd075266": "addTmv(uint256,uint256)", "cd076620": "mint(address,uint256,int16,int16,int16,int16,int16,int16,uint256)", +"cd07987b": "notifyRiskFundingOwner(address)", +"cd079fd7": "_degen()", "cd0845fd": "bool2str(bool)", "cd09039b": "PayForFlag(string)", +"cd091ea3": "setPredpath(string,string,string)", "cd09263f": "rate_toCap()", +"cd094fb1": "setAllowPrice(uint256)", +"cd097b4f": "withdrawFromApprovedWithdrawals(address[],address[])", +"cd09b6c3": "processMonth()", "cd0a314b": "walletBalance()", +"cd0b7150": "addBounty(string,uint256,uint256,uint256[])", +"cd0c397d": "Lock(address,uint256,bytes1)", "cd0c5896": "etherBalance(address)", "cd0c870d": "XAP()", +"cd0d0ce7": "getCashier()", +"cd0d1bcf": "crossChainMigrator()", +"cd0d71e3": "apply_envoy(uint32)", +"cd0d9bfd": "claimSharesInUpdate(address)", "cd0e761d": "getCurrentContextAddress()", "cd0e8900": "DEFACTO()", +"cd0e8fdc": "editItem(uint256,string)", +"cd0ee138": "unwrapFromNetwork(uint256,address,uint256)", "cd0ee59b": "_payByErc20(uint256)", "cd0f26c6": "setRedemptionContract(address,address)", "cd0f5abd": "DTCC()", +"cd0f77a8": "domainOwner()", +"cd0f7a45": "transferMintKey(address)", +"cd0f887f": "tokensForInvester1()", "cd0fdc24": "getPaintingArtistId(uint256)", "cd0ffdba": "NukTestToken()", "cd103b4d": "RateToken(uint256)", +"cd10c04b": "belongsTo()", +"cd111614": "updateText(uint256,string)", +"cd112382": "rebalanceStableBorrowRate(address,address)", +"cd11331e": "getAuthKeysArrayLength()", "cd11731d": "setPlayerBookAddress(address)", +"cd117ae6": "FEE_PERCENTAGE_BASE()", "cd11c85d": "timeTillNextAttack()", +"cd126657": "addAirdrop(uint256,address,uint256,bytes32)", "cd12efc8": "getsecond(uint256[])", +"cd12fa92": "updatePool_single(uint256)", "cd132aad": "addPrivateSale(uint256)", "cd133c8f": "buyXid(uint256)", +"cd135549": "setLocatorWhitelist(bytes2,address)", "cd13592a": "claimTokensByUser()", +"cd137064": "HEXmeUsersLobbyETHperDay(address,uint256)", +"cd138b19": "getPendingDisbursementTurbo()", +"cd13acd2": "infoAllocations(address)", "cd13c6f8": "wildlifeconservationToken()", +"cd13ee77": "canLiquidate()", +"cd1409b6": "FLASH_TOKEN_V1()", +"cd147c41": "dmmTokenIdToUnderlyingTokenAddressMap(uint256)", +"cd14a6ee": "BotList(address)", +"cd151e9a": "removeRelay(address)", "cd152c0a": "getPreAuthorizedAmount(address)", "cd154c59": "mainSaleExchangeRate()", "cd15c6ab": "MANACrowdsale(uint256,uint256,uint256,uint256,uint256,address)", "cd15fc71": "ContractFeatures()", +"cd1603ad": "CastleSaleCreate(uint256,uint256,uint256,uint256,uint256)", +"cd161d2e": "addApprovedOBO(address)", +"cd162faf": "presale2Left()", +"cd16c719": "InvestStop()", "cd16ecbf": "setNum(uint256)", "cd17c4b6": "numOfTokens()", "cd180fdc": "transferTokensFromAdvisorsAddress(address,uint256)", "cd1814d7": "selfDestroyTime()", +"cd1839ca": "depositsStat(uint32)", +"cd184684": "CanvasFinished(uint32)", +"cd185823": "campaignCodeDaily()", "cd187043": "_price_token_ICO1()", "cd18c168": "TakeEth(address,uint256)", "cd18d5a4": "airDrop(address)", "cd197ff6": "fechVoteInfoForVoter(address)", +"cd1a2e91": "getPage(uint256,uint256)", "cd1a4e4d": "setHyperDisbursementAddress(address)", "cd1a5cad": "PricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", "cd1a8ad7": "EGGS_TO_HATCH_1SNAKE()", +"cd1ad2dc": "getclaimRate()", "cd1b9311": "challenge(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"cd1bbe77": "hxyLiquidity()", +"cd1bf2ff": "getCouncilVoteCount(string)", +"cd1c0cbd": "SetJackpotMinimumAmount(uint256)", "cd1ce6d5": "setAdvisorFee(uint256)", +"cd1d155f": "electionVictorEncoded()", "cd1dc527": "isTokenAddressAlreadyInList(address)", +"cd1df0ed": "trustlinesNetworkToken()", "cd1e0355": "totalRefundedAmount()", "cd1e0717": "getRequester()", "cd1e484b": "reserveStarsForOwner(uint256)", +"cd1e9e2b": "professors(address)", +"cd1ea226": "createPrivFixedPool(string,address,uint256,uint256,uint256,uint32,address[])", +"cd1ed21f": "JypcBonus(uint256,uint256)", +"cd1edd30": "ResolveEmergency()", "cd1f63dc": "getMinBuy(uint256,uint256)", +"cd1f7e9b": "poolLists(uint256)", "cd1f8393": "logsCount()", "cd1f9a57": "totalContractHolders()", "cd1fca94": "BETNetworkTeamAddress()", "cd1fdc14": "_claimReward20(address,string)", "cd2057d0": "fail(bytes)", "cd20b24b": "saosao5()", +"cd20b91a": "Created(bytes32,address,address,address,string)", +"cd216c13": "investorUnlockedLPTimes(address)", +"cd21bd27": "incrUStats(address,uint256,uint256)", +"cd22bcb9": "createCC(address,address)", "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)", +"cd24ee08": "firstPendingWithdrawalIndex()", +"cd2525d5": "HardcapFinishedManually()", +"cd25390b": "LastReward()", +"cd253d99": "CHANGE_AGREEMENT_ROLE()", "cd257213": "RemoveTickets(uint256)", +"cd259b9e": "mcdEnd()", "cd25f56e": "OptionExercise(address,uint256)", +"cd262c45": "sppAmounts(uint256)", +"cd265eba": "PauserRemoved(address)", +"cd2689f0": "processWithdrawal(uint256)", +"cd26ac83": "verifyReceiverAddress(address,address,uint8,bytes32,bytes32)", +"cd26c64b": "mint(string,uint256,uint256,uint8,bytes32,bytes32)", "cd26e1a8": "SECURITY_ETHER_CAP()", "cd271488": "newSaleProjects(string,string,string,uint256)", "cd277e6c": "addSolution(bytes32,address,uint32)", "cd27d1a0": "setMaxRaiseAmount(uint256)", "cd27f1d9": "cappedTokenSupply()", +"cd285020": "pynthsByKey(bytes32)", +"cd28ef0d": "setOrchestrator(address)", +"cd29c0a1": "adjustBuyBackPercentage(uint256)", "cd29c71a": "metadataUrl()", "cd2a0c29": "purchase_with_eth(uint256,address,uint256,uint256,uint256,address,bytes)", "cd2a11be": "EnableTrade(bool)", +"cd2a16ba": "minBidIncreasePercent()", "cd2a68e5": "withdrawBillionsCoins()", "cd2a7a61": "broadcastState(bytes)", "cd2ab49e": "setupBankrollInterface(address)", +"cd2abdf6": "ManufacturerRewardWalletChanged(address,address,bytes32)", +"cd2acfa4": "PerformUserWithdraw(address,address,uint256)", "cd2b5a82": "weiToDistribute()", +"cd2b85db": "canClaimSettlement(uint256)", +"cd2b8828": "harvestYields()", +"cd2ba3ad": "mint(address,uint256,string,string,uint256,uint256,uint256,address)", "cd2cdd5b": "claimOwnershi()", "cd2cde48": "authorizeIcoBurn()", "cd2d5291": "walletAdvisor()", "cd2d8a2d": "historyId()", "cd2ec3fe": "runAnnualInflation()", +"cd2ed8fb": "getNumTokens()", "cd2f0710": "getItemById(uint256)", "cd2f5f2b": "clearFooArray()", "cd2f7357": "tokenTransfer(address,uint256,uint256)", +"cd2f7606": "deployAssessor()", "cd2f7c1a": "Census()", +"cd2fc484": "PayToSeller(uint256)", +"cd2fee85": "setBulkWhite223(address[])", +"cd2ff0da": "userProfit(uint256,uint256,uint256)", +"cd300536": "tokenToConverter(address)", "cd306137": "initialiseGlobals()", +"cd309801": "canSuicide()", +"cd309d70": "getCourseInETH(address)", "cd31037c": "BlockScheduler(address,address,address)", +"cd313a24": "getSpendableCostPerTokenForUser(address,address,address,uint256)", "cd313ad9": "listOfFunds(uint256)", +"cd31bf81": "emergencySubmitTransaction(address,bytes,uint256)", "cd31f391": "SixtyPercentRules(address)", "cd3265a3": "setUpgradeTarget(address)", "cd327398": "addExceptions(address[])", +"cd328786": "wearable()", "cd3293de": "reserve()", +"cd32f086": "isReleaseStart()", +"cd33174a": "KillDevicesStorage()", "cd336707": "reopenContributions()", "cd342917": "Lesson(address,uint256)", "cd35c5e9": "Eurotrad()", +"cd35fce7": "unpeg(bytes32,uint256,address)", "cd3651a7": "setLevelBonusJPYC(uint256,uint256,uint256,uint256)", "cd367936": "fundICO(address)", +"cd367d5f": "nineMonthReward()", +"cd377c53": "getCollateralRatio()", +"cd379964": "isOwner(address,string)", "cd37dcb8": "peCap()", "cd3882d5": "stage4()", "cd38aa87": "chooseWinner()", +"cd38ba95": "buyTokensWithEther()", +"cd38dcb8": "LaunchpadFactory()", +"cd392a83": "isPaid(uint256)", "cd394a41": "ETH10K()", "cd395a96": "_transferAndLock(address,address,uint256,uint256)", "cd3a1dde": "MaxAirDropXblock()", "cd3a376a": "changeSeller(address)", "cd3a7531": "loadVotesForParticipantVerify(bytes32,bytes32,uint8)", +"cd3a9b24": "payOracleFees()", +"cd3b0212": "setRewardLiquidationThreshold(uint256)", "cd3b0309": "CTokenCoin()", "cd3c3011": "getPublishTime(bytes32)", +"cd3c6c26": "withdrawB()", +"cd3c7539": "issuanceSettings(address)", "cd3ce306": "redeemEther(bytes32,address)", "cd3cf20e": "messageWithinLimits(uint256)", +"cd3cf8bc": "createYieldToken(uint256)", +"cd3d7ed5": "AddReceivedToken(address,string,uint256)", +"cd3daf9d": "rewardPerToken()", +"cd3db58a": "expiryCount()", "cd3de8d5": "payToController()", "cd3e0155": "BucketDestroyed(bytes32,uint256)", +"cd3e318a": "create(string,string,address,bytes)", "cd3e45c5": "getTop10Messages()", +"cd3ef951": "setMinimumBond(uint256)", +"cd3f2910": "setCurrentPhase(uint8)", "cd3f7a50": "DepositMTU(uint256)", +"cd3fc706": "requestVoucher_ETH_ETH(uint256,address)", "cd3fe21d": "getTotalNumberPlayed(uint256,uint256)", +"cd3fed6f": "getMyVoteForCurrentMilestoneRelease(address)", "cd40137f": "resetTimeSeal()", "cd402189": "list_files()", "cd402c8e": "payoutSize(address)", +"cd405819": "getOccupiedCollateral()", "cd40a48d": "send1Mil(address)", "cd41ada1": "addressDividendReserve()", "cd4217c1": "freezeOf(address)", "cd423c99": "getDistributedOreBalances(address)", "cd42693d": "victorieumToken()", +"cd42cbd4": "promoPrice()", "cd43def3": "updateServiceTokensPerCredit(address,uint32,uint256)", "cd43ebf9": "totalSpankStaked()", "cd43ee99": "isAffiliateProgram()", +"cd446e22": "masterContract()", "cd45376c": "sellWine(uint256)", +"cd4558fd": "transferFund(address)", +"cd459bc6": "generateMerklePath(uint256)", +"cd45d39b": "testCallTrxInsufficientBalance(uint256,address)", "cd45e561": "CHSToken()", "cd45fcdb": "Fxxk2Token()", +"cd4651ba": "investorUnlockTimes()", "cd46abe4": "ecosystemPercentOfTotal()", "cd46d7e5": "approveByIndex(uint256)", +"cd46f56a": "bulkwhiteListIt(address[])", +"cd4704ff": "requestRate(string,string)", "cd474b04": "chainStartBlockNumber()", "cd47c0e1": "cooRemoveReviewer(address)", "cd47f390": "rescueLostKydy(uint256,address)", +"cd481212": "setApprove(address)", "cd482d9f": "getLLV_edit_2()", "cd48578f": "MaxEth()", +"cd4911aa": "managerSetPrice(uint256)", +"cd493f04": "withdrawMyDividend(address)", "cd495391": "setNonlistedUser(address)", +"cd495a5e": "BundlingStatus(bool)", "cd496e35": "votePositionOf(uint256,uint256)", "cd497999": "isHardCapGoalReached()", "cd499523": "userList(address,uint256)", +"cd49d789": "totalNickNames()", +"cd4aa182": "getInterestRateByUnderlyingTokenAddress(address)", "cd4aed30": "errorWithMessage()", "cd4b3c57": "newSubdomain(string,string,address,address)", "cd4b6914": "getRandom(uint256)", +"cd4b98cd": "availableItemResources(address,uint256,address[])", "cd4c04c6": "Appoint(uint256,address)", "cd4c4c0c": "getCurrentBucket()", +"cd4c57c7": "getSwitchInfo(address)", +"cd4ca002": "totalTLPGrown(string)", +"cd4cc05a": "getMcdProxy(address)", "cd4d0570": "getbuynode(address)", "cd4d1664": "EconomyRebated(string,string,string,string,string)", +"cd4d1a10": "candidateConut()", +"cd4d4558": "getOptimalCollateral(address,uint256)", "cd4d4b46": "BONUS_CAP()", "cd4d6895": "verifyEIP20(address)", +"cd4d87aa": "AddExtraEarnings(address,address,uint256)", +"cd4daaa8": "toSigned(uint256)", "cd4e28b5": "setNextBidExpireBlockLength(uint256)", "cd4e396b": "USER_ACQUISITION()", +"cd4ed176": "_isAccountUnderwater(address)", +"cd4f191b": "stopFsm(address,bytes32)", +"cd4f1be4": "setUserCap(address[],uint256[])", +"cd4f4cfb": "adminWhiteListTransfer(address,bool)", "cd4f5e90": "MTToken()", "cd4fb3be": "newBurnableOpenPayment(address,string,uint256,uint8,uint256)", +"cd4fe8ec": "calN(uint256)", "cd501bf7": "SignalsCrowdsale(address,address,address,address)", "cd503c0b": "claimFees(bytes4)", "cd504bd8": "getPhasePricesPeriods(uint256)", +"cd506ee8": "approve_828(address,uint256)", "cd50d44f": "CheckRepresentment()", "cd51bcae": "setBuyRequestLimit(uint256)", "cd51f084": "owner_freeze_term()", +"cd524ae8": "sCapq()", "cd5286d0": "getAsset(string)", "cd53a3b7": "makerWithdrawAsset(uint256)", "cd53ac45": "MANHATTANPROXYFDR()", +"cd53d08e": "creators(uint256)", "cd53e455": "receivedEther()", "cd5406e4": "getBalanceAtSnapshot(address)", +"cd5442e7": "trackingCompleted(uint256,uint256,uint256)", +"cd544e1e": "longAmount()", +"cd545231": "pendingGra(uint256,address)", "cd54c54e": "setCirculationCap(address,uint256)", +"cd54e72c": "claimTranche(address,uint256,uint256,bytes32[])", "cd550cc8": "XferMoneyTeamAddress()", "cd55205b": "KotET()", +"cd557fdd": "startAuctionForItem(string,uint256)", "cd559561": "getPeers()", +"cd55a458": "Proposal(string,string,string)", "cd55cda2": "determineFinalOutcome(uint256)", +"cd55e092": "addLiquidityExactOut(address,uint256,uint256,uint256)", +"cd55e709": "getPivot()", +"cd55e9da": "getVoterServices(address)", +"cd55f199": "miningWithdrawAmount()", "cd56028f": "ArjToken()", "cd560862": "EZ25COIN()", "cd5617b6": "STCDR()", +"cd561889": "saveTop3(uint256)", +"cd563acb": "permittedRolls(uint256)", "cd5655da": "setPixelBlock(uint256[],uint256[],uint256[],uint256[])", "cd565bc5": "determineAffID(uint256,uint256)", "cd5681d5": "mintRefs(bytes32)", "cd568d0f": "submit(string,int8,int8,int16,string)", +"cd568d1f": "txId()", "cd56f019": "getDefaultClaim(address)", "cd572a07": "BOF()", +"cd574605": "setInterestTokenToUnderlyingStablecoin(address,address)", "cd575c32": "mintGem(uint256,string,uint256,bool,uint256)", "cd576dd0": "IPAC()", "cd5777e2": "allocateTokensToInvestors(address,uint256)", +"cd579335": "getOutcome(uint256)", "cd57a448": "SwapContract(address,uint256)", "cd57a650": "BasilNetwork()", +"cd580ff3": "b(uint256)", +"cd582800": "meterDatosCliente(uint256,uint256)", "cd584045": "enableApproval()", "cd586a50": "OnliCoinToken()", "cd58a867": "internalAssignTokens(address,uint256,uint256,uint256,uint256)", +"cd58c872": "changeToken()", "cd58e75b": "newBurnableOpenPayment(address,uint256,uint8,uint256,string)", +"cd590602": "getWeeklyWinner(uint256)", "cd591822": "CanaryV7Fast()", +"cd594c00": "getTotalInviteCount(address)", +"cd596583": "bridgeContract()", +"cd5976c6": "isActive_single(uint256)", "cd59bf5b": "getNowFromOwner()", "cd5a489d": "killContract(bool)", "cd5a57cb": "registerOpinion(uint256,string)", @@ -117649,25 +215249,47 @@ "cd5b8837": "distributeGREEN(address[],uint256,uint256)", "cd5ba752": "firstPlacePot()", "cd5ba978": "presale_end_block()", +"cd5bba72": "withdrawTokenNotOwnedByUsers(address)", "cd5bfb63": "tokenIdOf(bytes32)", "cd5bfbe4": "initialVestAmount()", "cd5c222f": "msgMap(uint256)", "cd5c4c70": "deleteOwner(address)", +"cd5c6f57": "exchangeRatePrior()", +"cd5cecf8": "setRescuer(address)", +"cd5cfdaf": "meta(uint256)", +"cd5d2118": "auth(address)", +"cd5d47fb": "apyOfPool(address,uint256)", +"cd5d5a32": "iHaveAnyWildcard()", "cd5d6c2b": "betInfoIsLocked()", +"cd5d72be": "lastPendingExchangeEntryId()", "cd5d950f": "TaxiToken()", "cd5dba1e": "WhiteElephant()", "cd5dd1d0": "showMsgSender()", "cd5e2038": "t_ImmlaTokenDepository2()", "cd5e3c5d": "roll()", +"cd5e5483": "fundCnt()", +"cd5e7365": "ADVISORS_POOL_SUPPLY()", "cd5ebd93": "calculateTimeout()", "cd5ecd60": "theWinnernumber()", +"cd5ed9fc": "_value(uint256)", +"cd5eee9b": "getOut1(uint256)", "cd5f49d5": "transferRewards(address,uint256,uint256)", "cd5f5c4a": "tryGet(bytes12)", +"cd600ba9": "users(uint256,uint256)", +"cd604ada": "getNextRoundDetails(uint256,uint256)", +"cd607941": "resolveReserve(address)", +"cd607cc3": "sumShares()", +"cd608cbb": "PRESALE_FACTORY()", "cd60aa75": "TokenPurchase(address,uint256,uint256)", +"cd60f59f": "transferCollateral(address,address,uint256)", "cd60fe35": "MAX_TOTAL()", +"cd611db1": "getPresalesCount()", +"cd616ea3": "TOKEN_LOCKER_ROLE()", "cd619681": "count_nodes()", "cd61a95a": "sellOrder(uint256,uint256)", "cd61cb3a": "setTokenUpgrader(address)", +"cd61fe8d": "changeMinimumDepositBFIAmount(uint256)", +"cd6247fd": "getOrderByIdConsumer(address,int256)", "cd62b382": "Sunset(bool)", "cd634920": "buyLeader(uint256,uint256)", "cd635b71": "ownerShipTransfer(address)", @@ -117677,27 +215299,43 @@ "cd63d930": "distributionCap()", "cd64b135": "_depositToken(address,uint256)", "cd64d952": "buildConnection(address,address,address,int256,uint256,uint256)", +"cd656197": "SalePeriod(uint256)", "cd6566b0": "battle(bytes8,bytes5,bytes8,bytes5)", "cd65908e": "changeIPFS(string)", "cd65bb67": "ViewToken()", +"cd660299": "bpowi(uint256,uint256)", +"cd66439a": "mintWithId(address,uint256)", +"cd669be0": "updateSafu(address,uint256)", "cd67571c": "accept(address,uint256)", "cd679413": "ASHLEY_ALLOCATION()", +"cd67bf1e": "claimedmorties(address)", +"cd67d560": "BallotAdded(bytes32,bytes32,bytes32,address)", "cd67e55e": "LSTRatePerWEI()", "cd67f3bc": "LimingCoin()", "cd68100c": "lastAddress()", +"cd68f6b0": "totalWeiSpent(address)", "cd69859e": "vestedAdvisors()", "cd69a7f1": "weightsApportionDecimals()", "cd6a7ca7": "allowance(address,address,address,address)", +"cd6b8388": "totalRewardsLiquidated()", +"cd6ba3c6": "getRebalanceTowardsSnxUtils()", "cd6c4bb0": "startSettlementPreparation()", "cd6c8343": "getAttributeValue(address,uint256)", +"cd6cce1c": "OnDemolished(address,uint256,uint256)", "cd6d7f81": "PRICE_FACTOR()", +"cd6dba33": "maxBDevSupply()", "cd6dc687": "initialize(address,uint256)", "cd6dca9e": "SaleFinalised(address,address,uint256)", "cd6e05e2": "totalPotAwayTeam()", +"cd6e3bf9": "getOpenPredictToken()", "cd6e4dad": "LBCToken(address,address)", +"cd6e659e": "Transfer(address,address,uint256,string)", "cd6e8855": "setMedications(bool)", "cd6ebff6": "betAmountAtNow()", "cd6ee0c2": "WISDOM()", +"cd6ef2b0": "getBasket()", +"cd6f2333": "stakeContract(address,uint256)", +"cd6f3cd0": "reinvestGlobalCount(address)", "cd6f4e0d": "dragoCount()", "cd6f7c50": "GeneNuggetsToken()", "cd6f7fdb": "applyKarmaDiff(address,uint256[2])", @@ -117706,15 +215344,20 @@ "cd704cb4": "getGeneralRelation(uint32)", "cd71a397": "contract6function1()", "cd71a471": "withdrawMkt(address,uint256)", +"cd71bc44": "setUsdPerEther(uint256)", "cd72250d": "multiTransfer(address[],address[],uint256[])", "cd728815": "setSubContractAddresses(address)", +"cd7290d5": "getAmountIn(uint256,uint256,uint256,address,address)", "cd7292a0": "ChessLottery()", "cd729a91": "unlockedTeamAllocationTokens()", "cd72ab69": "etherRaised()", "cd73d26c": "blocksPerDeal()", "cd73df78": "getAllUsers(bool)", "cd74096a": "getDataHoldersRefBonus(address)", +"cd74a00e": "REWARD_EARLY_BONUS_BOOST()", "cd755b41": "subs(address,address)", +"cd7563d5": "checkdlistLP(uint256)", +"cd75c7d4": "getHolder(address)", "cd761b9c": "Grass()", "cd762827": "joinGame(address,uint256)", "cd76635b": "_setAddr(address)", @@ -117723,88 +215366,146 @@ "cd7724c3": "getEthToTokenInputPrice(uint256)", "cd77521a": "setFSTAddress(address)", "cd77a0c8": "purchaseToken(address)", +"cd77a6f9": "inCaseapprovedark()", +"cd77d7ac": "sinkToken(uint256,address)", "cd7805bc": "pinged(address,uint256,uint256,uint256)", "cd781bf3": "pullEntry(uint256)", "cd784d1b": "isSuperUser(address)", "cd78a3b7": "processVote(bool)", +"cd78aefb": "indexToOwner(uint256)", +"cd7958dd": "calculateHash(address[])", "cd79f86d": "submitPkgHash(string,string)", "cd7a2c3b": "ResumeICO()", +"cd7af078": "ProposalIdByHash(bytes32)", +"cd7b36d9": "addd(uint256,uint256)", "cd7b6744": "lockGlobalToken()", "cd7ba8fd": "currentBlockHashCst()", +"cd7c0326": "proxyRegistryAddress()", +"cd7c141c": "callIncomeWeeklyTokensTrigger(uint256)", "cd7c92e3": "requestPrice(uint256)", +"cd7cea04": "revertTimelock(address,address)", +"cd7d3a46": "min_withdrawal()", "cd7d5b92": "STARTING_SWORD()", "cd7da845": "throwsWhenFinalizingWithIncorrectCap()", "cd7da914": "renounceArbiter(address)", "cd7dfa31": "setStarDeleted(uint256)", "cd7e3184": "getValueBonus(uint256)", "cd7e9fa6": "RefondCoin(uint256,string,string)", +"cd7ea095": "setDuration(uint256,uint256)", "cd7eac3a": "house_fee_pct()", "cd7ec171": "developer_string_C(string)", "cd7ecda0": "grantPromoPack(address,uint8)", +"cd7eea47": "nyanV2()", +"cd7f6315": "_openTimestamp()", "cd7f85fa": "budgetMultiSigWithdraw(uint256)", "cd7fa74b": "setPendingReview()", "cd7fb38c": "isValidMatingPair(uint256,uint256)", "cd7ff921": "stringIndexOf(string,string)", +"cd80d350": "getActiveUserDepositAmount(address)", "cd80da82": "tokenShare(address)", +"cd80efbd": "getColInfo(string[])", "cd819bdd": "setaddrFWD(address)", +"cd81b0c2": "rolloverAndProvideLiquidity(address,uint48,address,uint256,uint256,bool)", +"cd820edc": "setActivePeriod(uint256)", +"cd826495": "getAggregatedStatsForCurrentEpoch()", +"cd826503": "m_Accelerator_Total_Stacking()", "cd82a778": "_allowTimelock(address,address)", +"cd82f286": "approvedPurchaseAmount(address)", +"cd830484": "setust(bytes32,address)", "cd836e15": "SHARDING_REWARD()", "cd838f0f": "getNames()", +"cd839edf": "exchangeAndPrices(bytes32,uint256,bytes32)", "cd83b57c": "TacoCoin()", +"cd83c654": "ownerCardNum(address)", +"cd843b77": "winnerIndexes(uint256)", "cd84cff4": "wwwithdrawww(uint256)", "cd852330": "buyFromTrusterDealer(address,uint256,uint256)", "cd854072": "affiliatThreshold1()", "cd8550b8": "setBonus(bool)", +"cd857a1c": "stakeNKSN(uint256,uint256)", +"cd85afd4": "getReserveRates(address,address[],address[])", "cd85e945": "EtalonToken()", "cd863e25": "startOffering(uint256)", "cd866ee1": "MaximCoin()", "cd868648": "setEndBlockNumber(uint256)", +"cd86db34": "maxTerm()", "cd86eee2": "tokenCreationMinMile1()", +"cd8702e6": "verifySender(bytes)", "cd871b16": "matchBytes32Prefix(bytes32,bytes,uint256,bytes)", +"cd8735b0": "approve_750(address,uint256)", "cd875247": "OffGridParadise(string,string)", +"cd877826": "timeOfTWAPInit()", +"cd87a3b4": "ROOT_HISTORY_SIZE()", "cd880b1e": "kcck256stradd(string,address)", "cd881742": "teamTokensReleased()", "cd88333e": "coldStore(uint256)", "cd887739": "getExpertiseId(uint256)", "cd88bac4": "teamTokensLockAddress()", +"cd89019d": "finaliseMarket()", "cd897b75": "withdrawSubRound(uint256)", +"cd8a3243": "golBids(uint256)", "cd8aa272": "Icarus()", +"cd8ab2e8": "venusToWantPath(uint256)", "cd8b02c8": "Revoce()", +"cd8b0478": "setVoteProxy(address)", "cd8b0a77": "getProjectJudge(uint256)", +"cd8b2712": "Set_TimeStamp(uint256,uint256)", +"cd8b94dc": "setMaxEntriesInQueue(uint256)", "cd8c063b": "isTransferAllowed()", +"cd8c92cd": "verifyElectronicSignatureAuthenticity(bytes32,uint8,bytes32,bytes32)", "cd8cc844": "lotteryStart()", "cd8cdccd": "XiiPay()", +"cd8ceab1": "depositForRecipent(address)", +"cd8d2e3e": "addethtest(address)", "cd8d3918": "calcLuckyCoinBenefit(uint256)", +"cd8d5fd6": "CreateTarget(address[],uint256[],address)", "cd8d8da0": "tokenFallbackExchange(address,uint256,uint256)", "cd8db998": "isDepositBlock(uint256)", "cd8df8ec": "activateLastSale()", "cd8e250a": "frozenBalancesOf(address)", +"cd8e99ff": "YMEN()", "cd8ed6f6": "addMarking(bytes32,bytes32,int256)", "cd8f8b3c": "updateMintingAgent(address,bool)", "cd8fce49": "Consents()", "cd905dff": "isOperational()", "cd9063f6": "replaceToken(address)", "cd906676": "changelp1(address)", +"cd909f5e": "getChainSwapOut(bytes32)", "cd90b99d": "spawnInstance(address,uint256,uint256,uint256)", +"cd90dbc3": "awaitingRew(address)", +"cd912946": "_PHASE_CALM_ENDTIME_()", +"cd915e1a": "getUserTotalHashRate(address)", "cd91672d": "firstStageDatetime()", +"cd9183b1": "calculateEarn(address)", "cd91866a": "_startGameRound()", "cd9217f7": "eventListener()", +"cd926e13": "YourTotalFarmingTillToday(address,address)", "cd928f69": "updateAllowedTransfers(address,bool)", "cd92dec0": "WaterMeterAcorn(address)", "cd92eba9": "debtLedgerLength()", +"cd931e40": "setContractAddresses(address,address)", "cd932c9c": "parseTimestampParts(uint256)", "cd93307a": "EthereumSmart(uint256,string,string)", "cd9354e4": "successesOf(address)", "cd9380d5": "testSetBalanceSetsSupplyCumulatively()", +"cd93ebd3": "maltMarketCap()", "cd93f6f3": "SetPoolEntryFee(string,uint256)", "cd943e54": "transferToLock(address,uint256,uint256)", "cd944e3b": "EXPERTS_POOL_TOKENS()", "cd94a2a4": "owlToken()", +"cd94de28": "DEBUGparseConnectorsByPool(address)", +"cd94f2e4": "IMPOSS10()", +"cd94ff78": "approve_656(address,uint256)", "cd953744": "getZTKCheck(address,address)", "cd9548ce": "CompanyURL(string,string)", "cd955faa": "hasSantaCoins(address)", +"cd95fa17": "intergerTest()", +"cd96711f": "maxSeniorRatio()", "cd9679dd": "issuePRETDETokens(address)", "cd9745f2": "voteForTransaction(uint256)", +"cd978646": "cardRanges(uint256,uint256)", +"cd97a270": "getUserLatestPremium(address,address)", +"cd980e56": "setRebalanceCallerFee(uint256)", "cd9847bc": "testAccessControl()", "cd98b214": "getMarketCreatorSettlementFeeInAttoethPerEth()", "cd997aa3": "getData_31()", @@ -117813,64 +215514,145 @@ "cd9a27ba": "defaultRegionTax()", "cd9a3c98": "any(bool[7])", "cd9a7a56": "revokeOperatorByTranche(bytes32,address)", +"cd9a81ef": "updateContractManager(address)", +"cd9a97b1": "nftToErc20(address)", +"cd9aa6c2": "onPurchase(address,uint256,uint256)", +"cd9ab4a4": "getpool()", "cd9b2f05": "addContributors(address[],bytes32[])", +"cd9b950f": "transferReserve()", +"cd9bd2d2": "ApprovalToAll(address,uint256)", "cd9c8d80": "VerifiedInfoHash(bytes32)", "cd9d12f2": "icoStartUnix()", "cd9d27ed": "setDelegadoDeDistritoVerify(bytes32,bytes32,uint8)", +"cd9d6b1c": "total180Frozen()", +"cd9deaca": "lastRequest()", +"cd9df8e1": "getTRX()", +"cd9e3fe8": "createStream(address,uint256,uint256)", +"cd9e41dd": "LogReturnOtherCrypto(address)", "cd9ea342": "testMode()", "cd9f05b8": "balanceEtherAddress(address)", +"cd9f4ec4": "changeMember(uint256,address)", +"cd9f65cf": "lastRewardMintingTime()", +"cd9fe3e2": "resolveStake(uint256,uint256,address,bytes32,uint256)", +"cd9ffa0b": "setAssetsAggregator(address,address,uint256)", +"cda03875": "setPrice(uint32,uint128)", +"cda03eb8": "approveLink(uint256)", "cda0574e": "emitNominUpdated(address)", +"cda0af96": "getUsermTokenBalance(address,address)", "cda0eeaa": "gameMinBetAmount()", "cda113ed": "globalBet()", +"cda16717": "removeAllowedWearableType(uint256)", +"cda1eab6": "setContractOrigin(address,bool)", +"cda218c7": "updateCachedSynthDebts(bytes32[])", "cda2695a": "sponsor(address,uint256,uint256,uint256)", +"cda2c198": "sub112(uint112,uint112)", +"cda2c967": "OnRedistribution(uint256,uint256)", +"cda30944": "eventAction(uint256)", "cda35494": "bonusMintingAgent()", +"cda36304": "PurchaseTokens03()", "cda368c3": "teamV()", "cda3c001": "getUnsoldPeriod()", +"cda3c499": "create(string,uint256,uint256)", "cda4351b": "ViewBetByID(uint256)", +"cda43b3a": "thresholds()", "cda43ec5": "returnHrt(address,string)", "cda4beef": "createAuction(uint256,uint256,uint256)", +"cda4ed08": "create(uint256,address,string)", +"cda534f9": "confirmAsPartyA(uint256)", +"cda54cd6": "assignBeneficiary(address)", +"cda5de0c": "setRetirementAddress(address)", "cda6239d": "getArrayOfTiers()", +"cda651ec": "RbalanceOf(address)", +"cda674ff": "setBlockSpan(uint256)", "cda68e5d": "LogDecreaseCap(uint256)", +"cda691bd": "pendingTROP(uint256,address)", "cda6e92a": "sendTransaction(address,uint256,uint256,string,bytes)", +"cda6f181": "W(uint256)", +"cda70ec5": "Settlement()", +"cda7421f": "countMakeUp(address)", "cda78dea": "DTransport()", +"cda7a31b": "numberTwo1_1()", "cda8300e": "Transfer_data_enabled()", +"cda875eb": "updateCollectibleSaleStatus(uint256,uint256,bool)", "cda87e33": "getConfigBoolz(bytes)", +"cda8c715": "withdrawTokenFromBalance(address,address)", +"cda92be4": "getGlobalConfig()", "cda95d80": "Reserve()", +"cda95e9b": "withDrawBonus(uint256)", +"cda9a7ce": "UNISWAP_SwapEthForTokens(address,uint256,uint256)", +"cda9d580": "benchMarkValue()", +"cda9dd2b": "getAllwinUsdRate()", +"cdaa3e85": "ASSESSOR_OLD()", +"cdaa608d": "set_team_address(address)", +"cdab4d99": "SoldTokens(uint256)", "cdab73b5": "blackList()", "cdab9b5b": "setProviderName(uint256,string)", "cdaba786": "addBet(uint256)", +"cdabdaac": "setTargetRate(uint256)", +"cdac69ed": "certificateDatabase(uint256)", +"cdac6cb6": "generateSupply(uint256)", +"cdacaaca": "surplusAuctionHouse()", +"cdad498f": "addLiquidityHNY(bool,uint256)", "cdad5f94": "sendState(bytes,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "cdad6576": "changeBountyArbiter(uint256,address)", "cdadb0fa": "right58(uint256)", +"cdae5f6d": "ERC20TokenCreated(address,address)", "cdaeb47d": "removeAddressFromMaster(address)", +"cdaee114": "CRVMinter()", +"cdaef719": "fireChildIdenticalEvent(address)", "cdaf4028": "getMigrationCount()", +"cdaf76ef": "poppins()", +"cdafbbb6": "playerStats(address)", +"cdb026a1": "getCombinedNextSetUnits()", +"cdb076aa": "getAddressSC()", "cdb0ec6b": "getLinkedWallets(address)", +"cdb0f73a": "adminAddRelayer(address)", "cdb0fed9": "Livetest()", +"cdb1272e": "changeDelayBeforeRewardWithdrawn(uint256)", +"cdb1b44b": "approveTransactions(address[],bytes32[])", "cdb230be": "DHAMAR()", "cdb23c2d": "getMonarchyFactory()", +"cdb25754": "finish_rent(uint256)", +"cdb2866a": "autoCompoundData(address)", "cdb2867b": "canVote(uint256,address)", "cdb294a2": "startDeal(bytes32,address)", "cdb30482": "setBalancesUSD(address,address,uint256)", "cdb3344a": "createGravatar(string,string)", +"cdb3632a": "closePositionMaxFeePercent()", "cdb38f4f": "preICOTokenIssuedTotal()", +"cdb4d6a7": "_nerdToken()", +"cdb50771": "getBucketNBTC(bytes32)", "cdb532b9": "deleteCharity(uint256)", "cdb58e21": "DUBI()", "cdb616b2": "ForkDelta(address,address,uint256,uint256,address)", "cdb627b2": "showRecastConfigs()", "cdb62c16": "getCashOutAmount(uint256)", "cdb6753b": "setNav(uint32)", +"cdb71aeb": "AuctionPlatCancel(uint256,address,uint256)", +"cdb725a6": "delegatecall_stake()", +"cdb75d95": "brewToLp0Route(uint256)", "cdb75f2b": "NemoXXToken()", +"cdb76224": "isThisNo(address,uint256)", "cdb7699a": "manualTransferTokensToWithBonus(address,uint256,uint256,uint256)", "cdb78a2a": "giveNxc(address,uint256)", +"cdb79c43": "BORROW_ENABLE()", "cdb7ef81": "getMinAuditPriceMax()", "cdb80c51": "_service()", "cdb88ad1": "setPauseState(bool)", +"cdb8acf0": "getRecord(address,uint256)", +"cdb98676": "updateRequiredHarvestAmount(address,uint256)", "cdb986cc": "getExperience()", "cdb99909": "fstPrivateSalePortionNumerator()", +"cdb999f3": "permissions(address,bytes4)", +"cdb9d318": "getUnderlyingOptionId(uint256)", +"cdbaa8ac": "sowReward()", "cdbaed5a": "_isValidDepositCountry(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cdbb02af": "getAddressCount()", +"cdbc2ed4": "getlockedLiquidityLen()", +"cdbc925e": "minerMinMineDays()", "cdbccf50": "unfreeze_end_date()", "cdbce03d": "checkOwner()", +"cdbcec98": "itemId2Status(address,uint256)", "cdbcff6d": "getQuotas()", "cdbd0f0e": "getRatioOf(address)", "cdbd1031": "craftTwoCards(uint256,uint256)", @@ -117879,301 +215661,590 @@ "cdbdc7a4": "DeveciToken()", "cdbdd569": "SetLastRoomAndRound(address,uint8,uint256,bool)", "cdbdf391": "left34(uint256)", +"cdbeee1a": "approve_859(address,uint256)", +"cdbf5315": "earnedtoken3(address)", "cdbf9c42": "multiply13(uint256)", "cdbfd448": "memberLog()", "cdc04961": "setStates(address[],uint8[],uint8[])", "cdc0563a": "presaleTokenRate()", +"cdc05e58": "ydfToken()", "cdc06bdd": "CrypviserICO(address[],uint256)", "cdc07bbc": "_destroy(address,uint256)", +"cdc0f154": "balanceOfWant(address)", "cdc18424": "withdrawer()", "cdc25845": "setBuyPrices(uint256)", "cdc26dcb": "dorcasToken()", "cdc2895c": "getOffer()", +"cdc2cfe2": "getProperty(uint256,bytes32)", +"cdc30507": "getMyDirectReferrals(address)", +"cdc38d8f": "_rebalance_AMM_FRAX_to_price(uint256)", "cdc39f4a": "addCardSet(uint256,uint256,uint256,bytes32,string,address,uint8)", +"cdc3c07f": "removeCrowdsaleContract(address)", "cdc3e046": "balanceMaxSupply()", +"cdc42344": "referralProgram()", +"cdc48eb7": "claimRewardTo(address)", +"cdc5060b": "shareholdersLedgerByIdNumber(uint256)", "cdc57fd3": "modifyTokenPrice(uint256)", "cdc5c7cd": "updateLinkHash(uint256,bytes32)", +"cdc610e2": "unbondedContract()", "cdc62c03": "getFeeToTokenConversion(uint256)", "cdc62d39": "ballotDetails(uint32)", "cdc68b85": "create_all()", +"cdc6af79": "setWhiteListPayableToken(address,uint256)", "cdc7076d": "getMilk()", +"cdc787b0": "priceAgents(address)", +"cdc78a65": "lockCheckpointTwo()", "cdc81bc2": "totalInVaults()", "cdc86ec4": "tokenCreationMinPayment()", "cdc89404": "round5StartTime()", "cdc8d357": "mintVerify(address,address,uint256,int256,uint256,int256)", +"cdc91c69": "acceptAnchorOwnership()", +"cdc935ca": "init(string,string,uint8,address,address,address)", +"cdcab4a3": "drainETH(uint256)", "cdcb3cdb": "crowdsaleSupply()", +"cdcb760a": "deploy(bytes32,bytes)", "cdcb7c8f": "chase()", "cdcb8788": "nextRoundFee()", "cdcbac0d": "phase3StartingAt()", +"cdcbe6e3": "Get_Price_USDT()", +"cdcbed5d": "OverspentWethError(uint256,uint256)", "cdcc599b": "YunnimToken()", "cdcc5d3e": "getTokenHolderTribunal()", +"cdcc863b": "_swapExactTokensToTokens(uint256,uint256,address,address,bool)", +"cdcce9b1": "promotes(uint256)", +"cdcd5858": "destVaultWillBeSafe(address,uint256,uint256,string)", "cdcd77c0": "baz(uint32,bool)", "cdcda9a8": "DogeCash(uint256,string,string)", "cdcdb463": "getRiskParameters(bytes32)", +"cdcddbe9": "InitiateSwap(address,address,uint256,bytes20,address,bool,uint256)", +"cdce101b": "cliff(address)", "cdce240c": "WillCoin(string,uint256,string,uint8)", "cdce5206": "getUserNum()", +"cdce9624": "LogChangeCEO(address,address)", +"cdcee5d5": "setBP(address)", "cdcf0c4a": "dispute(string,address)", "cdcf4b9b": "priceDenominator()", "cdcf5794": "checkCooldown(address,address)", +"cdcfea7f": "test_totalSupply()", +"cdd02d37": "TokenRemoved(string)", +"cdd033c8": "changeTokenBlockedStatus(address,address,bool)", +"cdd0e255": "main1V2(uint256,uint256,uint256,uint256,uint256)", "cdd11b83": "roundTotalWinnings()", "cdd13589": "batchDistributeWithAmount(address[],uint256[])", "cdd13673": "rewardReductionRate()", "cdd13701": "getEventHashes(uint256[256])", "cdd1b539": "getSequenceNumber(uint256,address)", "cdd2067e": "getVendingAmountSold(uint256)", +"cdd21b18": "OnPlay(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cdd247a9": "offerAd(uint256,uint256)", +"cdd2e9b9": "RemovedFromWhitelist(address)", "cdd2ef0c": "starBuy()", "cdd3574a": "crowdsaleStartBlock()", "cdd3ab58": "addDistributionSources(address[])", +"cdd3b35e": "withdrawRemainingTokenReward(address,address)", +"cdd3d59f": "getQianByUser(address)", "cdd432d0": "rewardNumerator()", +"cdd59aa2": "get_vote_question(uint256)", +"cdd5f2c8": "closeEpoch()", +"cdd60153": "changeFunctionFees(uint256,uint256)", "cdd63344": "moveTo(uint256)", +"cdd64443": "depositWithPermit2(uint256,uint8,bytes32,bytes32,uint256)", +"cdd682ce": "WinnersLength()", "cdd6d079": "_tokensForEth(uint256,uint256)", "cdd72253": "getVoters()", "cdd739f6": "tokenCapForPreICO()", +"cdd78b96": "withdrawExactToken(address)", "cdd7b1fd": "init(uint256,uint256,uint256,address)", +"cdd7b715": "setDPlayStoreOnce(address)", "cdd8750e": "getDueTime(bytes32)", +"cdd87618": "createUser(address)", "cdd8b2b2": "registerBeneficiary(address)", "cdd8cc49": "debug_string(string)", "cdd8d4e8": "mgmtRewardPercentage()", "cdd90fbb": "firstRoundWMDiscount()", "cdd93332": "getTradingStart()", "cdd977e0": "addrService()", +"cdd9e4c6": "changeEthBackRate(uint256)", +"cdda01a9": "studios(uint8)", +"cdda22f2": "setFeedingEndBlock(uint256)", "cdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", "cdda96cf": "TokenPriceETH()", +"cddab28b": "rejectProposal(address)", +"cddade79": "airdropcount()", "cddaf241": "distributeReservedTokens(uint256)", +"cddaf715": "testMethodPure()", "cddb4e44": "getDataAddress()", "cddb523b": "changeTeamWallet(address,address)", +"cddb73f9": "getOrdersSellAmountInTokens(bool,uint256,uint256)", "cddb8e94": "buyProduct(address,uint256)", +"cddb9914": "initialize(string,string,uint256,uint256,address,uint256,address)", +"cddbb7ea": "test_hardcode2(uint256,uint256,uint256,uint256)", "cddbe729": "game(uint256)", "cddbff7c": "CRYPTODUBAI()", "cddc028b": "IndexEmpireToken()", "cddc37c1": "withdrawForTwoYear()", "cddce877": "TOKEN_SHARE_OF_LEGALS()", +"cddcec23": "dodajStudenta(address,string,string)", "cddd351c": "transferFromOnBehalf(address)", +"cddd906e": "REGESTER_FEE()", +"cdddc1bc": "Pipe(address,address,address,uint256,uint256)", +"cdde0dbc": "EventBurnCoin(address,uint256)", +"cdde2932": "removeTokenAgent(address)", +"cdde3d6b": "decreaseAllowance(address,uint256,uint256)", "cdde5413": "updateTileTimeStamp(uint16)", "cdde76f7": "hasAnyAttrs(uint256,bytes2)", "cdde9294": "avgTokenWinValue()", "cddeaba0": "setTokenPrice(uint256,uint256,uint256,uint256)", +"cddec6dc": "setWBTC(address)", +"cddf2c6e": "approvePool(address,uint256)", +"cddf3815": "nextAvailableCard()", +"cddf65db": "setBRDPerBlock(uint256)", +"cddf6ed7": "ADDRESS_LOCKED_LP_ACCUMULATION()", +"cddfae3d": "otherOracles(address)", "cddfbaaf": "AirDropAFTKSeven()", +"cddfde27": "sellAndwithdraw(address)", "cde02b25": "totaldivineTokensIssued()", +"cde0a105": "calcOvercollAmount(uint256)", "cde0a4f8": "setRegulator(address)", "cde180a9": "listContractByModuleId(string)", "cde1d97a": "ChangeTokenVaultAddress(address)", "cde25f8a": "getWineOwner(address)", +"cde27a35": "presaleCount()", "cde2c35a": "rewardBobaBase(uint256)", "cde2d72a": "receiveBTC(address,string,address,uint256,string)", "cde2e8d7": "A2ACrowdsalePartner()", +"cde36cc1": "dailyStart()", +"cde39dd2": "CancelBuyOrder(address,uint256,uint256)", "cde4018e": "AgriChainData()", +"cde4037a": "requireCorrectState(uint256)", "cde40bc8": "bonusFirstWeek()", "cde43f28": "mintTokens(uint256,int256,address,uint256)", +"cde4c62c": "sendRace()", "cde4efa9": "flip()", +"cde5721e": "_resetPoints(address)", "cde596b2": "Pay(address)", "cde5f58f": "RELEASE_INTERVAL()", +"cde62c36": "setHitmanVaultAddress(address)", "cde68041": "hasPermission(address,address)", "cde74e51": "licenses(bytes32)", +"cde77580": "changeStartDateState(uint256,uint256)", +"cde7d4b0": "ungrabbed()", "cde7da75": "claimActingPlayerOutOfTime(uint256)", "cde7f980": "save(string,address,uint256)", "cde93eec": "NewIssue(address,uint256)", "cde99727": "calculateROI()", +"cde9ef78": "newGame(uint256)", "cde9f2ea": "startdate()", "cdea76d6": "buyLong(address[2],uint256[2],uint8,bytes32[3])", +"cdea7c70": "rootBridge()", "cdeaf5bc": "addItem(uint256,uint256,uint256,uint32[8])", "cdeb1485": "massTransfer(address[],uint256[],bytes32)", +"cdeb1ccd": "uniswapRoutes(address,address,uint256)", +"cdeb2ad4": "toUSDC(address,uint256)", "cdeb7bac": "MaiToken2()", +"cdeba044": "Triggered(uint256)", "cdebf885": "Rent(address,uint256,uint256,uint256)", "cdecd1d7": "FUN()", +"cded1ea2": "governance_eth_balance()", +"cded244b": "executionMap(bytes)", "cded6986": "_getBridgeTokenFee(uint256)", "cded6fa5": "JesusCrowdsale()", "cdeda055": "_assert(bool)", +"cdee058a": "systemPartiallyPaused()", "cdee2112": "CyberToken()", "cdee2b92": "saleclosingTime()", "cdee5c4a": "raceRegistration(uint256,address)", "cdee8973": "Swapped(address,uint256)", +"cdeec284": "createGen0Alpaca(uint256,uint256,address)", "cdef3911": "assignTokenOperator(address)", +"cdef91d0": "rewardToken(address)", "cdef9423": "create(address,address,address,address,address,address,address,uint8,string)", "cdef9fb6": "SimpleStore(uint256)", "cdefa007": "FondoNetwork(uint256,string,string)", "cdefa4de": "ParaD2Test()", +"cdefb7ae": "setSharedPayment(address[],int256[],int256[],uint256)", "cdefe704": "getLOCbyID(uint256)", +"cdeff7ca": "getEstimatedSwapTokenAmount(address,address,uint256)", "cdf016ca": "minimumBounty()", +"cdf04564": "myInvestmentAmount(uint256)", "cdf05ab5": "voteTime(uint256)", +"cdf08a2a": "conscious(address,address,uint256)", +"cdf10baf": "claimable_reward2(address)", +"cdf13120": "balanceOfBonds(address,uint256)", +"cdf1512d": "_isSchemeRegistered(address)", +"cdf1c9d6": "extendLock(string,uint256)", +"cdf20564": "putsOwned(bytes32,address)", "cdf20e1e": "currentSyndicateValue()", +"cdf2a877": "onCapReached(uint256)", +"cdf2a8a3": "averageXAU()", +"cdf2f72b": "dea()", "cdf32cab": "totalInvestedWei()", "cdf3bc6f": "revise()", "cdf3bdab": "GetMyAcorn()", +"cdf3c356": "PhoenixPurchased(uint256,address,address,uint256,uint256)", +"cdf3e7da": "cashOutDivs(uint256)", +"cdf456e1": "baseAsset()", "cdf45c03": "FourLeafClover()", "cdf46344": "mint(address,string,string,uint256,uint64,uint64,uint64)", +"cdf48b53": "correspondences(uint256)", "cdf4d6b4": "registerKYC(address[])", "cdf574f1": "purchase(uint256,bytes7)", +"cdf5a564": "setMinTickets(uint16)", +"cdf64a76": "setValidatorContract(address)", "cdf6ddb4": "activeCrowdsalePhase1(uint256)", +"cdf71e43": "ReleaseDate(uint256)", "cdf744b2": "setFounderPercent(uint256)", +"cdf7a090": "validatorMinRewardPercent(uint256)", +"cdf7b717": "CAKE_POOL()", +"cdf8491d": "set_redepositRatio1(uint16)", +"cdf85b40": "crew()", +"cdf864e8": "clientExists(address)", +"cdf8adf1": "calTeamAthFinishedHalfRace()", "cdf90e02": "Roles2LibraryAndERC20LibraryAdapter(address,address)", +"cdf93057": "pendingPepe(uint256,address)", "cdf93c0f": "EtherBlock()", +"cdf96dd9": "getUserEstimatedCurrentProfitWithoutFee(address)", "cdf99413": "CrowdsaleToken(string,string,uint256,uint256,bool)", "cdf9b77e": "getCurrency(uint256)", +"cdfa0054": "approve_422(address,uint256)", +"cdfa2c36": "rewardEarned(uint256,address)", +"cdfa67d1": "setOldVersion(address)", "cdfb0a21": "PRVTSToken()", "cdfb2b4e": "enableWhitelist()", "cdfb5832": "setClaimer(address)", +"cdfb6cf3": "getUserBalance(uint256,address)", +"cdfb8738": "stake(address[],uint256[],int256)", "cdfbc437": "setMaxBetAmount(uint256,uint256)", "cdfbc8f1": "MINIMAL_PURCHASE()", "cdfbe22c": "isAnExchanger(address)", +"cdfbea58": "bounties(address)", "cdfc20aa": "addHashType(uint8,string)", +"cdfc4199": "voteForProject(string,string)", +"cdfc6b7e": "pending_DEV_rewards()", +"cdfcc984": "hotTokenAddress()", "cdfd293b": "BOUTSPRO_AMOUNT()", "cdfd72e8": "calcTeamEarnings(uint256,uint256)", "cdfd7474": "SONICToken(string,uint8,string)", +"cdfdb089": "endBet(uint256)", "cdfdb7d6": "increaseAllowance(address,uint256,address)", +"cdfdb7dc": "setRatios(uint256,uint256,uint256)", "cdfe2815": "createVip(address,uint256,uint256,uint256)", +"cdfe66e9": "convertExactERC20toETH(address)", +"cdfec380": "setAllowSponsorChange(bool)", "cdff1be4": "pauseWithdrawal(address,address)", "cdff5857": "updateUint256s(bytes32[],uint256[])", +"cdff735e": "mint(address,uint8[7],uint8,bytes32)", +"ce002515": "callRouter(string,address[2],uint256[2])", +"ce0086f6": "removeHolderAddress(bytes32,address)", "ce00d49c": "_transferWithRate(address,address,uint256)", "ce017242": "updateICOPrice()", +"ce01725b": "getCommissionReceiver()", "ce01e1ec": "set2(uint256)", "ce021384": "numberOfReferralCodes(address)", +"ce0237a3": "setUser(address,uint64,uint64,uint64,bool,uint256,uint256)", +"ce0268aa": "mintDegree()", +"ce032cc1": "calcMintAlgorithmicFRAX(uint256,uint256)", +"ce033170": "LogTokensBought(address,uint256,uint256)", +"ce034cf2": "returnBook(uint256,uint256)", +"ce03c0a2": "upgraderInfo(address)", +"ce042eae": "init(address,uint256,uint256,uint256,bool)", "ce0457fe": "NewOwner(bytes32,bytes32,address)", +"ce048f1c": "submitAddOwner(address,uint256)", "ce04a8c5": "isDAppReady()", "ce04c10e": "highContributionAward(address)", "ce050632": "setBettingTime(uint256)", "ce05264f": "createInterceptorFromVault()", "ce05369b": "releaseTokenHolder()", +"ce057dbc": "forcedDecimals(address)", "ce058d0d": "ChangeLEXTokenAddress(address)", "ce0617ec": "lockedUntil()", +"ce06d7e1": "payWithBae(uint256[7],address[2],uint8[2],bytes32[4])", "ce072163": "collectPayments()", "ce07d2b4": "proxyTransfer(address,address,uint256,bytes)", +"ce0806d4": "AdoptedAxiesRedeemed(address,uint8,uint256)", +"ce088f7a": "iCreamPerBlock()", +"ce08bf13": "cr_boost_max_multiplier()", +"ce08c28a": "icoHasRestarted(uint8)", +"ce096940": "setLastExchangeRateForSynth(bytes32,uint256)", "ce098093": "createtoken(string,string,string,address)", +"ce0998c1": "op_div_v(int128)", "ce0a191a": "setLotteryTokensPercent(uint256)", +"ce0a6d5f": "lockTokenTimeAfterCoverExp()", +"ce0afb4c": "RegistryMoved(address)", +"ce0b3073": "claimInfo(bytes32)", "ce0b5bd5": "cancelWhitelistRemoval(bytes32)", +"ce0b63ce": "depositETH(address,uint256,uint256)", +"ce0b6635": "Debug(uint16,uint256,uint256,bool)", "ce0bb9c4": "looksCoin()", "ce0bd51f": "bancorConverterFactory()", "ce0befcf": "remainTokens()", +"ce0bf61f": "vsc()", +"ce0cf4bc": "pylonAddress()", "ce0d5f78": "addAddressToBlacklist(address,address)", +"ce0da80f": "difference(address)", "ce0df06b": "FreezeAccount(address)", "ce0e19ba": "appendString(string)", +"ce0e234c": "usdtIn(uint256)", "ce0f802d": "MaazBTC()", "ce0f92b7": "hashOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"ce0fb3d1": "updateQuorumValue(uint256)", +"ce0fd371": "workerResetCollectible(uint256,uint256,uint256,uint256)", "ce0ff8d8": "CSStoken(uint256,string,string)", "ce10814c": "wmax(uint128,uint128)", "ce109195": "internalDoesEventExist(bytes32)", +"ce10cf80": "fundsByBidder(address)", "ce10cf88": "getAddressByIndex(uint256)", +"ce110e4b": "mapMember_poolCount(address)", +"ce114c25": "removeWhiteListAddress(address)", +"ce116a62": "supplyPerInterval(uint256)", +"ce11a4e9": "setStakingPeriodInSec(uint256)", +"ce11d7d2": "setFarmPerformanceFeeStrategist(uint256)", "ce11f2bb": "vote(uint256[])", "ce120afb": "_safeTransferPaymnt(address,uint256)", +"ce12f2b1": "deleverageOnce(address)", "ce139296": "icoPhaseDiscountPercentage1()", "ce13bfb7": "cancelLoanOffering(address[9],uint256[7],uint32[4],uint256)", "ce144eb9": "spiceUp(string)", +"ce146828": "friends(uint256)", "ce146d3d": "getTotalWins()", "ce148564": "TIER3END()", "ce148c1f": "tempTokensPeriodOf()", "ce14a46e": "totalPeriod()", +"ce14c1ee": "linkPriceOracle()", "ce14d404": "PieTokenBase()", +"ce14e759": "withdrawInternal(bytes32,address)", "ce14eeb8": "BASE_HARD_CAP_PER_ROUND()", "ce14f10b": "disabled(uint256)", "ce15647a": "getTeam(uint8)", +"ce1570dc": "mintETH()", "ce158ba2": "approveCompanyAllocation(address)", +"ce1609a9": "referLimit()", "ce160edd": "searchAndBid(uint256,uint256)", "ce1619f8": "_lockPaymentTokens(address,uint256,uint256)", "ce161b57": "AngelTestToken()", "ce165894": "updateExpectedAmount(bytes32,uint8,int256)", +"ce168fbe": "freeETH(address,address,address,uint256)", +"ce16b770": "setChiBudget(uint256)", +"ce17273c": "mNormalizePledge(uint64[])", +"ce173296": "transferFrom(address,address,uint8)", "ce17f01e": "Hostblock()", +"ce18d474": "startLuckyDraw()", "ce18eb0b": "stage1Deadline()", "ce19419b": "testThrowsSetNotUpdatableNotOwner()", +"ce19d9d7": "PixelPainted(uint32,uint32,uint8,address)", "ce1a70a3": "SimplePreTGEContract()", "ce1aafc0": "VinaexToken()", "ce1afbe1": "_transferToken(address,address,uint256)", "ce1b088a": "withdrawDonations()", +"ce1b815f": "getTrustedForwarder()", +"ce1b81b4": "TEAM_FEE()", "ce1bd789": "DestroyTransferFeeCoin()", +"ce1bda4e": "ERC20Approve(address,address,uint256)", "ce1c1538": "getCardByOwner(address)", "ce1c93af": "abandon(string)", "ce1cf229": "SimpleMultiSigWallet()", +"ce1d0ccd": "CardUpgraded(uint256,uint256,uint256)", +"ce1d42a6": "UpdateBalance(bytes32,uint8,int256)", "ce1d6ea0": "testAppendTranch()", +"ce1d82f5": "pendingMinterAdmin()", +"ce1d8ab2": "sharedMultiplier()", +"ce1e09c0": "maxCommitmentAge()", +"ce1e430a": "sixReserveTimeLock()", +"ce1e9dc8": "dracoTrade(address,uint256,uint32,address[],uint256)", "ce1ed182": "getLastMilestoneStartsAt()", "ce1ed2bb": "BecomeSquirrelDuke()", "ce1f561c": "holdingTaxDecimals()", +"ce1f9c28": "buyProjectToken(address,uint256)", +"ce1fc5d8": "initializeValues(address,uint256)", +"ce1ff67e": "tokenUser(address)", "ce1ffcd9": "setTransferEnable(bool)", +"ce200963": "xConvertPrioritized2(address[],uint256,uint256,bytes32,bytes32,uint256,uint256[])", "ce203b83": "officialUserSignUp(string,address)", "ce204b78": "defrozen(address)", "ce204bf1": "TOKEN_LOCKING_PERIOD()", +"ce20af77": "userSwapData(address)", "ce20fd84": "query(bytes2,int256)", +"ce217c2a": "factorStake()", +"ce219fe0": "_identity(address)", "ce21abf3": "sendUnsoldPRETDETokensToTDE()", "ce21fbf4": "GolemToken()", "ce220ecf": "testAddBalanceFailsAboveOverflow()", +"ce226a0c": "ContinueDistribution(bool)", "ce2293ca": "EIB(string,string,uint8,uint256)", +"ce22958b": "sellToken(address,uint256,uint256,address)", +"ce22a28a": "sortTraders(uint256)", +"ce22f858": "trxToTokenTransferInput(uint256,uint256,address)", "ce230030": "unlockSupervisedFunds(address)", +"ce232e87": "setSeigniorage(uint256)", "ce233452": "limitPurchasing(uint256,uint256)", +"ce2355ab": "deleteMember(string)", "ce23772b": "removeWalletFromWhitelist(address)", "ce23e8bc": "LIQUIDATION_TOKENS_PER_ETH()", "ce23f2b2": "newLoan(bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"ce240d9c": "transferOwnershipOnIdentityRegistryContract(address)", "ce241d7c": "LogSetOwner(address)", +"ce245c80": "VARIABLE_RATE()", +"ce24807f": "GameEnded(uint256)", "ce248843": "removeOne(address)", +"ce24e8dc": "_poolRewardDistributionRate()", +"ce2529c9": "poolId1(address)", "ce255bba": "setsafekey(uint256)", +"ce255e91": "mintMin()", +"ce25d71c": "CLOSING_PERIOD()", +"ce260908": "setTokenHandlerBorrowLimit(uint256)", +"ce261186": "addErc721Predicate(address)", +"ce265203": "getMaxShares(uint256)", "ce266af8": "tom()", "ce267b55": "ecdsaVerify(address,bytes,uint8,bytes32,bytes32)", +"ce269871": "rewardsOnPoolOf(address)", +"ce2742ec": "selfDestructAndRemoveFromRegistry()", "ce2777a3": "BigchatToken(uint256,string,uint8,string)", "ce27a21a": "setLogoPrice(uint256)", +"ce281041": "depositByVaultId(uint256,uint256)", "ce289284": "Result(bytes1)", +"ce292b76": "lastRedemptionTimestamp()", +"ce29555f": "setUintCoinProduction(address,uint256,uint256,bool)", +"ce296026": "gasLimit(uint256)", +"ce2a4a74": "postOffer(uint256[],uint256[])", "ce2a9f62": "totalEthCollected()", +"ce2aa78b": "EnableProfitDistribution()", +"ce2ab971": "getMinRatio()", +"ce2b5f54": "approve_629(address,uint256)", +"ce2b7854": "playerGoodsList(address,uint256)", "ce2c6ad5": "getChainFeeArray()", +"ce2c8e55": "ico_percent()", +"ce2cc1d0": "_grantRole(bytes32,address)", "ce2ce3fc": "getLocation()", "ce2d173f": "setSelfOff()", +"ce2d29ac": "approvedWithdrawAddresses(address)", "ce2d3fa1": "returnKVTToOwner()", +"ce2d4f96": "EIP191_PREFIX()", "ce2dfd00": "createFootballerStar(uint256,uint256,uint256,uint256)", +"ce2e395c": "setminPPDEXGolden(uint256)", +"ce2e9fbf": "openTrade(string,uint256,string)", +"ce2ec5de": "withdrawExchangeStake(address)", "ce2f67a2": "exampleFunction()", "ce2fc873": "setArticleHash(uint256,string)", "ce2fc8b1": "RequestC(bytes32,bytes32)", "ce2fce38": "getTransferInfo(address,uint256)", +"ce308b76": "acoFeeDestination()", "ce3099fa": "testNBool()", "ce30b8d9": "operatorBurn(address,uint256,bytes)", "ce3174ca": "revokeSubmission(address,address)", +"ce325bf8": "getStake(uint256)", +"ce32808b": "DmapContract()", "ce329570": "byzantineCloseChannel(bytes32)", +"ce330973": "_synthetix()", +"ce335733": "updateArtworkTechnique(string)", +"ce3423e6": "setInversePricing(bytes32,uint256,int256,uint256,uint256)", +"ce347a3e": "cUSDC()", "ce347a65": "fund(uint16)", +"ce349715": "enterDailyStake(uint256)", "ce3498b8": "DelegatedIdentity(address)", "ce356e3a": "addTeam2(uint64,uint64,uint64,uint16)", +"ce36062c": "distributePenalty(uint256)", "ce371431": "queryFunds(address)", +"ce373870": "init(address,address,address,uint256,uint256,uint256)", "ce373b95": "heroOfThePit()", "ce376aa3": "buy_king()", "ce3800e1": "moonLevel()", +"ce380dac": "reduceShare(uint256)", "ce383ec7": "view68()", "ce389e53": "getTokenAddHold()", +"ce38b717": "pendingTaco(uint256,address)", +"ce393877": "testDividedByFunction()", "ce394696": "calculateCost(uint256,uint256)", +"ce3975b2": "setLazySelectedBestStrategy(address)", "ce39952a": "disableSecureMode()", "ce39976d": "getUrlAtIndexOf(address,address,uint256)", "ce3a7076": "Cancelot(address,address)", +"ce3aeace": "token0UNI()", "ce3b0475": "changePriceDecraseTime2Action(uint256)", "ce3be6bb": "withdrawWallet1()", +"ce3c178e": "rariFundPriceConsumer()", +"ce3ca52d": "autoGrowingFee()", "ce3cc3aa": "changeTolerance(address,bytes32,uint256)", "ce3ccfd0": "shouldReturnDefault(bytes32)", "ce3cd997": "setStage(uint8)", "ce3cef0d": "stopTakeToken()", +"ce3cfc0d": "f(uint16)", +"ce3d1738": "called_again()", +"ce3d8afd": "myDividends(address)", "ce3d9237": "mintMarginTokens(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", +"ce3dcec7": "pendingEthy(uint256,address)", +"ce3decdc": "setZonehash(bytes32,bytes)", +"ce3e39c0": "calculator()", +"ce3e5ee4": "dcv()", "ce3e82a4": "KorkToken()", +"ce3eeb41": "balanceOfWhitListUser(address)", +"ce3f3adb": "maxProtectionDelay()", "ce3f865f": "collect(uint256)", +"ce3fccf8": "withdrawRemainingBalance(uint256,uint256)", +"ce3fe641": "votar(string)", "ce3fff35": "ONTTotalSupply()", +"ce4013db": "_claimPeriodForSwapReward()", +"ce40453d": "scoreEth()", +"ce405e53": "rdc(uint256)", +"ce406395": "smallfundpoolandtimer()", +"ce4079ef": "endReleaseBlock()", +"ce40b03f": "price_()", +"ce40c911": "setTaxTierMediumFee(uint256)", "ce4150eb": "migrateMarketInFromSibling()", "ce419871": "openKYC()", "ce41d75d": "NewIntelTechMedia(address)", "ce4254ce": "terminationTime()", "ce4258e9": "OPENAI()", +"ce427bcc": "p2(uint256)", "ce429429": "generateOrderByMerchant(address,uint256,string,string,string)", "ce42bb11": "getLockedDevFundAmount()", +"ce42ebcd": "setData(string,int256)", "ce42fa88": "Telcoin(address)", "ce435f4b": "SetParticipantAgrHash(address,address,bytes32)", "ce43b0c0": "creditorAddresses(uint256)", "ce43c032": "getUsername(address)", "ce43c097": "CradTimeLock(address)", +"ce443d33": "checkAddrBalance(address)", +"ce444209": "frozenAccountSend(address)", "ce44573a": "GenChipByRandomWeight(uint256,uint8,uint256[])", +"ce448e90": "burnWBTC(bytes,uint256,uint256)", +"ce44a196": "testAA()", +"ce453326": "converterAddress()", +"ce459112": "increaseNonce(address,address)", "ce45a260": "CryptoDime()", +"ce45c14a": "LogClosedAuction(address,uint256)", +"ce45d837": "collectData(uint256,string,address)", "ce45f981": "MooAdvToken(uint256,string,string)", +"ce46643b": "stakeTokens()", "ce468922": "transferCat(bytes5,address,address,uint256)", "ce46e046": "isPayable()", "ce471aee": "kompitechToken()", +"ce474e74": "boost(bytes32,uint256,uint256)", +"ce4760de": "cancelAddBackup(address,address)", +"ce47af21": "presaleIndividualCap(address)", "ce47befd": "checkoutCart(string)", "ce47e604": "sendAliceBlue(address,uint16,uint256)", "ce483c42": "statusI()", "ce483e88": "incrementOpenInterest(uint256)", +"ce4843e9": "currentTotalStake()", +"ce485c5e": "_addCompMarkets(address[])", +"ce48a328": "set(uint256,uint64,uint256)", "ce48a54d": "getHeroLevel(address,address)", +"ce48d3c6": "actualizarUrl(string)", +"ce48f983": "shareRewardPool()", "ce49735a": "distributeAlliniTokens()", +"ce49f27c": "setmaxPurchasableTokenPerWallet(uint256)", +"ce4a1c7f": "bct()", "ce4a6f09": "offerCanvasForSaleToAddress(uint32,uint256,address)", +"ce4a7a83": "initalSupply()", +"ce4a7e07": "poolForPair(address,address)", "ce4a9206": "minPayInterval()", "ce4ae74a": "setRewardMinter(address,uint256)", +"ce4b1c59": "withdrawPJ()", +"ce4b5bbe": "SCALE_FACTOR()", +"ce4bd05e": "unconfirmedMap(address)", +"ce4bd9bd": "addPairToLiquidate(address,address,address,address)", "ce4c4a74": "TrueFlipToken(address)", +"ce4cbe4b": "mixed(uint256,uint256)", "ce4cf4c8": "advisorTotal()", "ce4d01a3": "validate(uint256)", "ce4d66b9": "roundBonus(uint256)", @@ -118182,460 +216253,838 @@ "ce4ddabd": "updateTimeRC(address,uint256,uint256)", "ce4e42d2": "BountyManager(address)", "ce4e5aa4": "findBestMatch()", +"ce4e7fa5": "oldDISTX()", "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)", +"ce4f1666": "getCurrentTerminatorAmountPool()", +"ce4f55b7": "hunters()", +"ce4f73b2": "YFTE()", +"ce4ff5e9": "decodeBalanceAndReserve(address,address)", "ce507401": "oraclizeGasPrice()", +"ce50d83c": "EventRunBeforeApplyingSettings(bytes32)", +"ce50dc7b": "nftlookup(bytes32)", "ce50f72d": "getAvailableBalanceOf(address,address)", "ce50f926": "getMinLimit()", "ce510d46": "neededAmountTotal()", "ce513b6f": "withdrawable(address)", +"ce51412c": "riskClose(uint256,uint256,uint256,uint256,uint256)", +"ce518384": "getMyHourlyIncome(address)", +"ce51ef7f": "buyWithUSDT(address,uint256)", +"ce5201a0": "blockFarmingStarted()", "ce52242e": "gotchinfo(address)", "ce522f22": "updateWeiCap(uint256)", +"ce524a37": "SaleResumed(string,uint256)", +"ce52b9f4": "withdrawSubmission()", "ce52c4ef": "createDelegation(address,uint256)", "ce52cf84": "encoding_format()", +"ce5328e4": "buyBackToken1()", "ce53ee2d": "voteNoLockByAdmin(address,address,uint256)", "ce5440bb": "depositAgent3(uint256,uint256,uint256[],uint256[],uint256)", "ce5478a4": "lockedCapitalOf(address)", "ce5494bb": "migrate(address)", +"ce54a5c1": "commAddr_()", +"ce54cde9": "matchOrdersWithMaximalFill(bytes,bytes)", +"ce5535a5": "getPair1(address,address,address)", +"ce554ad1": "getCap(address,uint8)", +"ce554f6d": "baseSupplyHasBeenInitilized()", "ce5566c5": "cash(uint256,uint256)", "ce557031": "purchaseTokens(address)", "ce5570ec": "isWallet(address)", +"ce55c852": "getEtherValue(uint256,address)", "ce563036": "BaseContract()", "ce5659bc": "changePartner2(address)", "ce56c454": "withdrawEther(uint256,address)", "ce56f3fb": "moneybuy(address,uint256)", +"ce56fa05": "pendingMars(uint256,address)", +"ce576095": "VerifyWinners(uint256,uint256)", "ce5774c6": "Proposal(string)", "ce578cd6": "managementContractAddress()", "ce57d8d5": "getSingleInvestor(address)", +"ce584bfa": "infos(uint160)", +"ce58a2a8": "currentEpochMultiplier()", "ce5910f3": "unfreez()", "ce592586": "setThresold(uint256,uint256)", "ce5968da": "onMint(int256,address,uint256)", "ce597164": "normalDemurrageAmount(uint256)", +"ce5a1cdb": "setNumberThree(uint256)", +"ce5a1f9c": "freeGasTokens(address,address,uint256)", "ce5a5df7": "createUnicorn(address)", "ce5a63ff": "purchaseBlock(uint256,uint256)", "ce5ac32d": "Firmament()", +"ce5bec5a": "acceptBidForItems(uint256,uint256)", "ce5c073d": "setMintMaster(address)", "ce5c2c33": "performTransaction(uint256)", "ce5c4fd8": "finalizeSale(uint256,uint256)", +"ce5c5069": "fasher()", "ce5c5201": "cryptogsAddress()", +"ce5d26a1": "entidadesPermissionadas(address)", +"ce5d2d53": "StakeProcessed(address,uint256,bytes32)", +"ce5d65d8": "enterBet(uint256,uint256,uint8,uint8)", "ce5d80e6": "stealCardWithId(uint256)", +"ce5d9917": "setJT(address)", +"ce5dbc0b": "admComiss(address)", "ce5e13aa": "getPlayerProfit(address)", "ce5e4190": "set_tokens_per_ether(uint256)", "ce5e6393": "tgrSetFinished()", "ce5e84a3": "activate(bool)", "ce5e9ffb": "CORRECTION()", +"ce5ec65a": "l1L2TxsDataHashMap(uint32)", +"ce5ec92e": "setVotingEscrow(address)", +"ce5f32d2": "countOfInvestments()", "ce5f9454": "numerator()", "ce5fa1e9": "secondExchangeRatePeriod()", +"ce5fc8d0": "lpt()", "ce5fd7f3": "OfferContract()", +"ce603aad": "divScalarByExp(uint256,uint256)", +"ce60646c": "__TermPoolInner_init_unchained(address)", +"ce606c2d": "_mintToken(uint256,uint256,address)", "ce606ee0": "contractOwner()", +"ce6073f3": "syncFromOldContract(uint256[],address[])", +"ce60c692": "delegates(address,uint48)", "ce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", +"ce617462": "takerValueMin()", +"ce6197ab": "accountPoB(address)", "ce622ec5": "announceWinner(string)", "ce6236ca": "getRoundLength()", +"ce625bbe": "freeGasTokens(address,uint256)", "ce627bd9": "mineblocksAddr()", "ce629a6b": "_computeTournamentBooty(uint256,uint256,uint256)", +"ce62cd4a": "removeLocker(address)", "ce63066f": "test_6_basicTransfer_increaseBlocksBy1000()", +"ce63094d": "loanCount()", "ce6342f3": "getAbiVersion()", +"ce63bc53": "cg_for_crimers()", +"ce63c1cb": "_soldierSurvivalBlocks(uint256)", +"ce63c519": "cronoutOf(address)", "ce63cc89": "postTask(string,string,uint256,uint256)", "ce649b39": "setEthereumRate(uint256)", +"ce64bf80": "ZEROxBTCHaters(uint256)", "ce655952": "_cancelSale(uint256)", +"ce661a48": "totalFrozenLpBalance(address)", +"ce6641e7": "plySonBuy(address)", "ce665dd8": "OFFSET()", +"ce66c71e": "balanceOfWBTC()", "ce67bda6": "testNop(int256,int256,uint256)", +"ce67c003": "redeem(uint256,bytes,string)", "ce686e40": "IcoToken(string,string,uint256,string)", "ce686e62": "BurnableOpenPayment(address,uint256,bool,uint256,string)", +"ce687361": "sell(address,uint256,uint256,bytes,address,address)", +"ce687a30": "tokenActiveStartTimestamp()", "ce691294": "kRate()", "ce6933d5": "fetchPaidOrdersForPayer()", "ce695d7f": "_addArea(address,uint256)", "ce699a41": "releaseVestedTokens(address)", "ce69cd20": "MIN_BID()", +"ce69f42b": "unitsBuy()", +"ce6a0880": "removeVotes(address,uint256)", "ce6a9bd6": "proofType_Ledger()", "ce6b3467": "withdrawExcessToken(address)", +"ce6bdfb3": "remainingCredit(bytes32)", "ce6c0b64": "_getTokenNumberWithBonus(uint256)", +"ce6c1d20": "importAssets(uint256,bool)", "ce6c2589": "_emitOracleRemoved(address)", "ce6c5080": "tokenSetAudit(address,address,address,address)", "ce6c9a89": "changeMinimalWei(uint256)", +"ce6ccfaf": "getRoles(address)", "ce6d35d1": "migrateToken(address,address)", "ce6d41de": "getMessage()", +"ce6db4a5": "CRV_INTEREST_STRATEGY()", +"ce6de9ff": "saviours(address)", +"ce6e1c4e": "input(uint256)", +"ce6e1e21": "getBalanceForSale(address,address)", +"ce6e23b2": "minTokenId()", +"ce6e73ac": "BurnCoin(uint256)", "ce6eaef5": "startSecondSale()", "ce6eaff9": "YOU_BET_MINE_DOCUMENT_SHA512()", "ce6efb07": "AmountLimitCrowdsale(uint256,uint256)", "ce6f149c": "WEEKS_26()", +"ce6f6e88": "createContractGame(string)", "ce6f899d": "EventLogin(address,string)", +"ce704db8": "unibTransfer(address,address,address,uint256)", +"ce7079ba": "wbtcBuyback()", +"ce707df5": "pingfang(uint256,uint256)", "ce709c9b": "proposalCreateTime(uint256)", "ce70faec": "createUltimateOracle(address,address,uint8,uint256,uint256,uint256)", "ce71b83c": "TianqibaoTokenERC20(uint256,string,string)", "ce71caee": "juryOperator()", +"ce71e548": "supporterExists(bytes32,address)", +"ce720877": "BalanceRewardPool()", +"ce72483e": "AddHolder(address,uint256)", "ce72a696": "ICO_PERCENTAGE_1()", +"ce72d8fd": "ethUsdcUniswapOracle()", +"ce733589": "bidPlaced(uint256,address)", "ce73a61d": "setWhitelistExpiration(uint256)", "ce73b41a": "addBuyTokensRequest(address,string,uint256,uint256)", +"ce73cfd9": "getBooksByAuthor(string)", "ce742222": "SCARABToken2()", "ce744ba5": "SellOffer(address,address,uint256,uint256,uint256,uint256)", "ce746024": "recover()", "ce7462e9": "setStarSellPrice(uint256,uint256)", "ce749c29": "defund()", +"ce74a508": "getVoteReceiversRewards(uint256)", +"ce74e734": "LogPauseRoundA()", +"ce750581": "totalSharedRewards()", +"ce757d29": "signaturesRequired()", +"ce7689ee": "contractBurn(uint256,address)", "ce774030": "raiseCoinsAdded(address,uint32,uint256)", +"ce77beaf": "unminingFeeNumerator()", "ce77cf42": "Rafflecoin()", "ce782e08": "floorLog2Test(uint256)", "ce784216": "scrapCount()", "ce7842f5": "referralBonus()", "ce784564": "findPositionInMaxExpArray(uint256)", +"ce787a6c": "hbtPerBlock()", "ce78b752": "ActivatedEvent(bool)", +"ce79049b": "optionMarketLibrary()", "ce7917d7": "GEOCOIN()", +"ce793a20": "revokeControlByOwner()", "ce794294": "multisignature()", +"ce797ac0": "withdraw(address,address[],uint256[],string)", "ce799b0a": "changeStakeRate(bytes32,uint256)", "ce79add1": "givableBalanceOf(address)", "ce79d17d": "Storesumdata(bytes32,bytes32,uint64)", "ce7a0697": "_internalTgeSetLive()", "ce7a2b02": "processPayment(address,address)", +"ce7a468a": "getEscapeHatchForSmartWallet(address)", "ce7a60ab": "unlockBalance(address)", "ce7a94eb": "SliceByte32(bytes,uint32)", "ce7aa79f": "PXMCToken(uint256,string,uint8,string)", "ce7ab6a7": "set_refunded(bool)", +"ce7b375d": "getUplines(uint256,uint8)", +"ce7b7864": "withdrawAllToSigned(address,address,bool,bytes)", +"ce7b7d03": "createRandomPizza(string)", "ce7ba916": "_initBadges(address,uint256,uint256,uint256)", +"ce7c249a": "activeReferralFree(bytes)", "ce7c2ac2": "shares(address)", "ce7c5d7f": "transferEthToOwner(uint256)", "ce7ca615": "FoundationAddress()", "ce7ca665": "medalBoost()", "ce7cdbb7": "getIndexRoot(bytes32)", +"ce7cec63": "seizeARTT()", +"ce7d1f77": "xfLobbyEnter(address)", "ce7d3539": "AVMDisputeProcess()", "ce7e23a0": "UnityToken(address,uint256,uint256)", "ce7e51e3": "uint256ToString(uint256)", +"ce7e9390": "isCheckInitialPeriod(uint256)", "ce7f6e82": "CoinPulseToken()", "ce7fc203": "accForTeam()", +"ce7fccba": "getAvailableRewardsForAccountForPeriod(address,uint256)", +"ce7ff169": "changeManagementContract(address)", "ce803a70": "noOfSeats()", +"ce804db7": "src721HandlerAddress()", +"ce805642": "reveal(uint256,bytes)", "ce806176": "setPurchasing(bool)", "ce809e4e": "ETH_DECIMALS_FACTOR()", +"ce8124fd": "TransferAndCall(address,address,uint256,bytes)", "ce813d8f": "addTurretParts(uint8[])", "ce816706": "X4BToken()", "ce818ed5": "SiringClockAuction(address,uint256)", +"ce8235cc": "setPercentTypeTwo(uint256)", +"ce825130": "levelMonster(uint256,address,uint256)", "ce82eb33": "ico4Bonus()", "ce830f5b": "_unlockToken(address)", +"ce841e67": "tokenIdsOfOwner(uint256,address)", "ce845d1d": "currentBalance()", +"ce846173": "juniorBondsMaturitiesPrev()", +"ce8480ea": "lastRateUpdateTimes(bytes32)", +"ce84f57b": "setReferralTracker(address)", "ce85e801": "MAX_PRICE_SALE()", "ce85fbe2": "joojinta()", "ce860a62": "getShipIdsByOwner()", +"ce864312": "vaultEndTime()", +"ce86739c": "bBadgerAmount()", +"ce869903": "size(string)", "ce869a64": "fails()", "ce8721b2": "daoAccounts(address)", +"ce872d87": "rewardsEndBlock()", "ce873a67": "processReferer(address)", "ce8775a4": "win(uint256,uint256,uint256,bytes,uint256)", +"ce877a92": "calcPayoutRewards(uint256,uint256,uint256)", "ce87f626": "replaceWizardRP(address)", "ce8804c9": "setAdvertAddr(address)", "ce883cdb": "getPoolsLength()", "ce8883af": "potFee(uint256)", "ce88a9ce": "setProduction()", "ce88b145": "getAccount(uint256)", +"ce88b439": "deposit(address,uint256,uint256,uint256)", +"ce88d407": "tokenIsRegistered(uint256)", "ce89a2a2": "changeSettings(uint256,uint8)", "ce89b5de": "buy100()", "ce89c80c": "calcKeysReceived(uint256,uint256)", +"ce8a7da4": "create(address,uint256,address,uint256)", "ce8ac033": "getAvatar(address)", "ce8ae9f3": "giveReward(address,uint256)", +"ce8b5b5c": "dflSupplyIndex()", "ce8b5b60": "setLockAfterManuallyMint(bool,int256)", "ce8b7151": "isHF()", "ce8b7be4": "consultantsAllocation()", "ce8bbe4b": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address)", "ce8bcae3": "allFundsCanBeUnlocked()", +"ce8c1ab2": "isValidMarketMakerStorageId()", +"ce8c42e8": "withdrawToVault(uint256)", +"ce8c8904": "max_sqrt()", "ce8d054e": "_setupNoCallback()", "ce8d096d": "redeemVestableToken(address)", "ce8d1910": "claimFromSeveral(uint256,address[])", "ce8d388d": "disableWithdraw()", "ce8d73de": "o_labirinto(uint256)", +"ce8da27f": "LogAddedBeneficiary(address)", "ce8dc388": "TOTAL_ROUNDS()", "ce8e120a": "thawTransfers()", "ce8e2fd8": "SaintArnouldToken(address,uint256,uint256)", "ce8e5170": "burnedAfterSaleCount()", +"ce8e55bb": "manualGetBNB()", "ce8e95d4": "updateRegion(uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", "ce8ebfc8": "makeSchoolToken()", +"ce8f145f": "changeEarlyExecution(bool)", +"ce8f5129": "mintContracts(address)", +"ce8f582e": "addLiquidityAndLockLPTokens()", +"ce8f6078": "configs(bytes32)", +"ce8fac31": "forceFinishAll(address[])", "ce8ff29b": "TicTacToeAdjudicator(address,address,address,address,uint256)", +"ce8ffe66": "BurnRewardIncreased(address,uint256)", "ce90203c": "computeSellPrice()", "ce906c6a": "listPrycto5()", "ce909980": "checkTimeout(address)", "ce90bafa": "topUpERC20(address,uint32,uint192)", +"ce90ea74": "_FREEZE_DURATION_()", "ce912692": "createNew(address,address,address,uint256,uint256,uint256)", +"ce916bc0": "genesisStartTimestamp()", "ce916d85": "icoTokensReceived(address)", +"ce917421": "setCostUSD(uint256)", "ce91e4b3": "freezeaccount(address,bool)", "ce923728": "setDealMembers(address,address,address,uint256)", +"ce92b33e": "setMany(string[],string[],uint256)", +"ce92d825": "A_INTEREST_EARNED()", "ce92dced": "newBid(bytes32)", +"ce936908": "getLinkedGames(address)", +"ce9381da": "ArtWorkChangeRequestApproved(address,uint256,uint256,string,uint256)", "ce93b0e4": "returnAdvisorTokens(address,uint256)", +"ce94852c": "trackVotes(address,address,uint96)", "ce950d1e": "FancyAssetsCoin(uint256,string,string)", "ce952345": "icoAssignReservedBounty(address,uint256)", +"ce959bc0": "tokenRewardsEarned(address,address)", +"ce95a6d7": "refuelHoldingTokenAmount()", "ce95aad2": "isOnCraftingAuction(uint256)", "ce95b475": "getBalanceByAdress(address,address)", +"ce95d8de": "scalars(uint256)", +"ce96193b": "deployPause(uint256,address)", +"ce96751b": "openGift()", "ce96c8e4": "set_deposit_manager(address)", "ce96ec6b": "setRefer(address)", +"ce970505": "claim(address,uint256,uint256,uint256,uint256,uint256,uint8,bytes32[])", +"ce970630": "sourceVault()", "ce972050": "token_orderSheet(address,uint32)", "ce972f33": "Menu01(address,uint256)", "ce97f61a": "submitTally(uint256,uint256,uint256)", "ce9822c7": "Magic10(uint256,address)", "ce99151e": "p_wallet()", +"ce991b60": "beforeFirstPoolTokenTransferIn(address,uint8)", +"ce997f88": "investments(bytes32,address,address)", +"ce99ccd0": "getEstimateReward(address)", +"ce9a142b": "mlTesla()", "ce9a3b0f": "special()", "ce9a6ac8": "putOn(uint256,uint256,address)", "ce9ae667": "PharmaWit()", "ce9ae91c": "getARed(uint256,uint256)", "ce9af2b9": "isReserved(string,address,string,bytes32)", +"ce9afd41": "deploy002(address,address,bytes32)", "ce9b4321": "calculateCommission(uint256)", +"ce9b7930": "delegator()", +"ce9baf7e": "deleteMarketingAndSalesAddress(uint256)", +"ce9bde1d": "KYBER_INTERFACE()", +"ce9be9ba": "isTokenBlacklisted(address)", "ce9c39c9": "stepTwoStartTime()", +"ce9cdb53": "queryUserPledgeCanSellAmount(address)", +"ce9d88ad": "changeLockTimer(uint256)", "ce9e673b": "forceOffsetBasicFeeRate()", "ce9e6bb7": "setEndTimeIcoStage2(uint256)", "ce9e7730": "createSubcourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256)", +"ce9ea398": "mintWithCondition(address,uint256,uint256)", "ce9f24dc": "SilentNotaryCrowdsale(address,address,address,uint256)", +"ce9f4a3f": "set_NecroName(uint8,string)", +"ce9fa5b8": "tokenFromRetraction(uint256)", "ce9fb088": "TransferSellAgentBounty(address,uint256)", +"ce9fbc33": "setupPayout()", +"ce9fdb70": "addWeapon(uint16,uint8,uint8,uint8,uint8,uint8,bool)", +"cea01962": "rewardRate(uint256)", "cea024d9": "tokenPriceNum()", +"cea07b13": "IsMemberEligibleToWithdrawROI(uint256,address)", "cea08621": "changeDailyLimit(uint256)", +"cea0a058": "withdrawPool12(uint256)", +"cea0c59e": "idleAccrued(address)", +"cea0fe6b": "getTokenToSynthOutputAmount(address,bytes32,uint256)", "cea10af7": "hardFundingGoal()", "cea15706": "DarkrenlandCoin()", +"cea15c3e": "NewGameRules(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cea16c83": "endFinalStage2()", "cea198c8": "LogBidCanceled(bytes32)", +"cea217ac": "changeMinTokensPerUser(uint256)", "cea22b51": "ico_stage()", +"cea23121": "suppliers(uint256)", +"cea26958": "setBurnFeePercent(uint256)", "cea289db": "debugInt(uint256)", "cea2ed48": "CreatedPet(uint64)", +"cea376b4": "GameHasFrozen(uint256)", +"cea3e113": "ERR_POOL_CLOSING()", +"cea3e530": "contractCreationTime()", "cea4b687": "updateListingWithSender(address,uint256,bytes32,uint256)", "cea5033c": "_requestTokens(address,uint256)", +"cea5725a": "creatorClaimed()", "cea5b151": "getLabelHash(string)", +"cea5d625": "ownerTokenBal(address)", "cea5d64b": "shift_right(uint256,uint256)", +"cea5e087": "requestsPerBlockGroup(uint256)", +"cea60d42": "XGPay()", "cea63361": "transactionFeeRateM()", "cea65e97": "addressIsOwner(address)", "cea67184": "getHydroId(address,address)", +"cea6a9c2": "cSBlock()", +"cea6ab98": "users(bytes32)", "cea7555b": "distributedFundariaStakes()", +"cea7edb8": "sen(address)", "cea81ab1": "generateContestForDelegationSchemaHash(address,uint256,bytes32)", +"cea85459": "TokensDistributed()", "cea876ba": "EthMatch(uint256)", +"cea8b27f": "tokenDAI()", +"cea93fc3": "profitsContract()", "cea943ee": "getSaleConfig()", "cea9707a": "getMyTicketList(bool,uint256,uint256)", "cea99275": "hasInitMartial()", "cea9b7af": "ICO_EOS_AIRDROP()", "cea9d26f": "rescueTokens(address,address,uint256)", "cea9f621": "setVars(address,address)", +"ceaa4aa8": "mintHero(uint32,uint32,uint32,uint32)", "ceaa50d4": "getLastPayoutAmountAndReset()", "ceaae25d": "massChangeRegistrationStatusForGoldWhiteList(address[],bool)", "ceaafb67": "AnonymousDeposit(address,uint256)", "ceab09d8": "set_participant(address,uint256,uint256,uint256,bool,uint8)", "ceab4ea7": "VOODOO()", +"ceabe35d": "signLease()", "ceac2aed": "submit_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", +"ceacbe47": "pendingFFARM(uint256,address)", "ceacc749": "calcCurrentMinBid()", +"ceacf7b5": "_calcStakeBonusHearts(uint256,uint256)", "cead2c29": "get_ptc_balance(address)", "cead4620": "putBtoWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ceada432": "RevertTransfer(address,uint256)", "ceadd9c8": "donateAsWithChecksum(address,bytes4)", +"ceae2228": "BurnNToken(uint256)", "ceae3424": "balanceSoll(address)", "ceae7f64": "thirdStageMinting()", +"ceae8b32": "getIndexSize(address)", +"ceae909d": "calc_token_amount_deposit(uint256[3])", +"ceaeeba9": "setImpliedVolRate(uint256)", +"ceaef4cc": "_globalrAmount()", "ceaf0bfb": "admAccount(address,bool)", +"ceaf12d3": "request_data(bytes,bytes,bytes,bytes32,uint256)", "ceaf1e94": "_transferToAddress(address,uint256)", "ceaf9519": "needToGetFree()", "ceafb18d": "getCard(address)", +"ceb04e29": "setWithdrawAmount(uint256)", "ceb0884d": "getSolution(address,uint32)", +"ceb09448": "bonusInfo(address)", +"ceb0c3f1": "failSafe(address,uint256,address)", "ceb10f1c": "preIcoCap()", +"ceb13cc0": "publisherAffiliates(uint256)", +"ceb16433": "transferWant(address,address,uint256)", "ceb21433": "Activate(address,address,address,address)", "ceb22fa0": "meteredEarn(uint256)", "ceb24797": "getKycLevel(address)", "ceb2731a": "purchaseCrate()", +"ceb274d7": "crossoverConfirmationMaxTime()", +"ceb293cf": "redeliverynum()", +"ceb30c6e": "getBlockPrices()", +"ceb35605": "contributor(address)", "ceb35b0f": "addAddress(string,address)", +"ceb3d41c": "_pendingSushi()", "ceb408b4": "_set5()", "ceb41385": "getHashLeftPad()", "ceb44d04": "checkSplitEnd(uint256)", +"ceb4b13c": "BonusConstant(uint256,uint256,uint256,uint256,uint256,uint256)", "ceb51f0a": "setApproved(address,uint256)", "ceb5bc46": "proshgold()", +"ceb5f4d7": "log(bool,uint256,bool,bool)", "ceb60654": "getGroup(uint256)", +"ceb62914": "getSecretKeyPre()", +"ceb688dc": "tradeAddress(address,bool)", +"ceb68c23": "removeVault(address)", +"ceb6a22f": "getAuctions(uint256,uint256)", "ceb6dbc3": "time_of_token_swap_end()", +"ceb6f8fc": "safeTransferFrom721(address,address,address,uint256,bytes)", "ceb791d9": "priceRate()", "ceb7bc87": "tokenTransferFrom(address,address,uint256,address[])", "ceb7e43c": "getAddOnComplete(uint16)", +"ceb7e46a": "totalSupplyRewards()", "ceb88ff4": "setContribution(address,uint256)", +"ceb8b508": "VendorRemoved(address)", +"ceb8bab9": "amountToBonus2()", "ceb8ee8b": "durationInMinutes()", +"ceb9838c": "removeSmartToken(address)", "ceb98dc7": "unbuy()", "ceb9a5fd": "getGameCurrentRoundId(uint256)", +"ceb9e69e": "IncreaseNonce(address,uint256)", "ceba1794": "MAX_LOAN_AMOUNT()", "ceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", "ceba5029": "MOBTokenIssue(address)", "cebac2f2": "LRCLongTermHoldingContract(address,address)", "cebae575": "GLAU()", +"cebafd1d": "MAXIMUM_INVEST()", "cebb8bb0": "testControlRestartEnforceRevisions()", "cebbbce5": "ClaimAirdrop(address,uint256)", "cebc141a": "devCount()", +"cebc626d": "TOKEN_INSUFFICIENT_BALANCE()", "cebc9a82": "getDelay()", "cebce72d": "token(uint64)", +"cebd234c": "payee_count()", "cebd31bc": "getStartingPrice()", +"cebe04be": "SetLandNamePrice(uint256)", "cebe09c9": "quota()", "cebf3bb7": "minRaise()", +"cebf9e13": "my_recommender(address)", "cebfa61e": "month18companyUnlock()", "cec0213e": "HealthDataChain(uint256,string,string)", +"cec03ce3": "claimRefund(uint256,address)", +"cec0d427": "onWithdraw(address,uint256,uint256,uint256,uint256)", "cec0f734": "setTransferToken(uint256)", "cec10c11": "setFees(uint256,uint256,uint256)", +"cec119db": "setNewFundAddress(address)", "cec1365a": "ShortLimit(uint256)", +"cec13aad": "ReferralFailedPayout(address,uint256)", "cec17a12": "ChrisBell(uint256,string,uint8,string)", +"cec1870b": "_approveAll()", +"cec1bae6": "Burned(uint256,uint256)", +"cec1ebba": "serviceInvocation(address,uint256,bytes32)", +"cec20640": "cdai()", +"cec21acb": "ownershipTokenCount(address)", +"cec23a47": "uploadImage(string,string,string)", +"cec24d18": "curriculum7()", +"cec29683": "acceptBidForRPunk(uint256,uint256)", +"cec297a0": "referralCounts(address)", +"cec3114d": "setOrai(address)", "cec33f4e": "getPatentFee(address,uint16[5],uint256)", "cec3638d": "VotingChallenge()", "cec36cb4": "refundPoweredUp()", +"cec41052": "globalTokenSymbol()", +"cec472a3": "approve_890(address,uint256)", "cec4a1cc": "pauseRefund(bool)", +"cec4a539": "buyWithPermit(uint256,uint256,bool,uint8,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", "cec4ab9c": "whitelistEnable()", +"cec4b83a": "_releaseTimestamp()", +"cec50cbd": "gum()", +"cec570df": "ciphered_offer_b()", "cec63cea": "NamoToken()", "cec68824": "registerFull()", +"cec695fa": "getUserStake(address,uint256)", +"cec70038": "checkAccessAddy(address)", "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)", +"cec9bb9f": "minNumberOfTaskRewardVotersParameterTitle()", "cec9df89": "getAddressBetsForEvent(bytes32,address,string,string)", +"cec9f51e": "_encode_sol_bytes22(bytes22,uint256,bytes)", "ceca122d": "activate(bool,bool,bool)", +"ceca126e": "House(bytes32)", +"ceca46c2": "transferRules()", +"ceca49c2": "redeemRisk()", "ceca7e8e": "fundLock(address,uint256)", +"ceca88cb": "isRaffleOver()", "cecaf395": "buildBlocks(int32,int32,bytes16)", "cecb06d0": "mintOwner()", "cecc33e7": "issueTickets(address,uint256,uint256)", "ceccc10e": "getHoldersNameAddr()", +"cecccf97": "Withdrawed(address)", +"cecce38e": "setMaxSupplyContractionPercent(uint256)", "cecd0264": "executePayment(string)", "cecd0ab5": "_processFundsOverflow(address,uint256)", +"cecd4275": "collateralRatioOf(address,address)", +"cecd9a6a": "setStopRewardPool(uint256,bool)", "cecd9dd4": "_isNeededNewLottery()", +"cecda1fa": "SWW(uint256)", "cecdc6aa": "TEAM()", +"cecee862": "SENDER_WEIGHTS_COUNT_MAX()", +"cecf01df": "isLockFinished()", +"cecf757a": "startFarming(uint256)", +"ced0120a": "getRewardContractDetails()", +"ced066c9": "getStakingAmount()", "ced095d6": "getContest(string)", "ced0a3a5": "setHookOperatorContract(address)", "ced0bcc3": "MangaCoin()", "ced0c0c2": "subscriptionRate()", "ced0d31d": "setFeeRate(uint256,uint256,uint256,uint256,uint256,uint256)", +"ced11b41": "initialize(address,address,bytes32[],uint256[],uint256,address,uint256,address)", "ced11e40": "addMemory(string,bytes)", "ced1a60b": "pooja()", +"ced28d77": "addProto(uint16,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bool)", "ced29978": "LogFrozenAccount(address,bool)", +"ced2c238": "userNetworkRewardAmount(address)", +"ced2d894": "wobbuffetPerBlock()", "ced32b0c": "setSender(address)", +"ced35070": "bitcoin()", "ced39558": "buyLand(uint256)", "ced3fb9c": "isAddressAuthorized(address)", +"ced4138a": "sEBlock()", "ced444bf": "offerStarForSaleToAddress(uint256,uint256,address)", +"ced4aac8": "findAssistingID(bool,address,uint256,uint256,bytes32)", "ced4c064": "withdrawTo(string,address)", "ced4f4b8": "sellEther()", +"ced5ca6f": "deleteMapping(uint256)", +"ced65381": "getSwapData(uint256,uint256)", +"ced6539f": "bonde(address,uint256)", "ced659b6": "burnMktCoins()", +"ced6a89e": "remove_multi_trusted(uint64,address[])", "ced72f87": "getFee()", +"ced7487b": "userWithdrawROI()", "ced78ed1": "getImageData(uint256,uint16)", +"ced7bc70": "Log3(bytes,bytes32,bytes32,bytes32)", "ced7d018": "reFundByOther(address)", "ced80aca": "updateMultipleReservedTokens(address[],uint256[],uint256[],uint256[])", "ced84a71": "addInvestor(address,uint256,uint256)", +"ced8cf06": "getTransferable(address)", +"ced923ae": "setOraiRewardPerBlock(uint256)", "ced92670": "changeMultiplier(uint256)", +"ced9e504": "getReallyPrice()", +"ced9e8e1": "buy(uint64,uint64)", "ced9f7c0": "mokenNoName(uint256)", +"ceda0f0b": "sourceContract(bytes32)", "ceda4a03": "NovioCoin_TEST()", +"ceda7dbe": "incrementCirculatingISupply(uint256,uint256)", "cedadaca": "SingularityTest6()", +"cedb217a": "submitClaim(uint256,uint256,uint256,uint256,uint256,bool)", +"cedb77a1": "IoTDevicesKey(address)", "cedbbeee": "createTokens(address)", +"cedbcf27": "bonusEndBulkBlockSize()", "cedc01ae": "getActivator(address)", "cedc2ce1": "setMaxTransfers(uint256)", "cedc7277": "getBuyPrice(address)", "cedcbd99": "ACTION_BUY_OFFER_ACCEPTED()", +"cedcc88d": "updateMintRate()", "cedcd770": "foundationWithdraw(uint256)", +"cedcf993": "hardHDCORE(address)", "cedd90f6": "purchase(bool,bool)", +"cedd9c3b": "setVariable1(uint256[])", +"ceddcc44": "lock_duration()", "ceddd07d": "balanceOfUnlocked(address)", +"cededfb3": "GetOperator()", "cedf222e": "congressMemberThreshold()", +"cedf7329": "Vrnitev_Knjige(int256,int256)", +"cedf8c13": "_voteTotalSupply(address)", +"cedfbff2": "updateToken(address,uint256,bool)", +"cee012ae": "openOrdersCount()", "cee024dc": "getNumberOfVotes()", "cee02a86": "SOFTCAP_ETH_LIMIT()", +"cee08990": "OnNewRound(uint32)", "cee0b4fe": "CRTSTAL_MINING_PERIOD()", "cee13e28": "Conversion(address,address,address,uint256,uint256,int256,uint256,uint256)", +"cee14bb4": "voteForSingleWitness(address,uint256)", +"cee15290": "copyNextBatch()", +"cee1c864": "lockRecordMap(address,uint256)", "cee24e31": "gambler1()", "cee26ed5": "sellers(uint256)", "cee2a9cf": "isInvestor(address)", +"cee35426": "checkDayTime()", +"cee36053": "setFounderWallet(address)", +"cee3739e": "setFactoryandOwner(address,address)", +"cee3ff10": "deploy(address,uint256,uint256,uint256)", "cee401ef": "enableICO()", +"cee4def9": "totalPoolCHIPCommissions()", +"cee4f4d7": "_debaseUniswapLPContract()", "cee594c8": "addStage(uint256,uint256,uint256,uint64,uint64,uint256)", +"cee5aa9b": "getExcessCollateralValue()", +"cee66f63": "withdrawAllStakedtokens(address)", +"cee67a8c": "cyY3CRVAddress()", "cee6b0d9": "AcceptsSunny2(address)", "cee6b53c": "updateLastActivity()", "cee6ee38": "aEthereumlotteryNet()", "cee6f794": "SEKEM()", "cee6f93c": "getResultOfLastFlip()", +"cee718e5": "unboundedLimit(address)", "cee73630": "buyTPT(uint256,uint256,uint8,bytes32,bytes32)", "cee749bc": "withdrawTokenRefund(uint256,address)", +"cee79d40": "triggerAbsorption(uint256,uint256,bool,bool)", "cee80356": "min4payout()", "cee829ea": "refundMany(address[])", +"cee84d37": "LogStartRoundA()", +"cee897e1": "kittiesOf(address)", +"cee8b1ee": "UniSwap_Address()", "cee8fa1f": "Funding_Setting_cashback_time_end()", "cee93e23": "isActive(uint32,int256)", +"cee94032": "trade(address,address,uint256,address,address,bytes,uint256,uint256[])", "cee96f49": "setissuedSupplyRatio(uint256)", "ceea3914": "lookupUserDonationHistoryByCampaignID(address)", +"ceeabeae": "PancakeFactory()", "ceead4b6": "setCompte_10(string)", "ceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", "ceeb7066": "setJoinFee(uint256)", +"ceebb6b4": "_encode_sol_int128(int128,uint256,bytes)", "ceebe28d": "repoInterfaceVersion()", "ceec8f8f": "removeProduct(string,string)", +"ceed1b90": "priceGetter()", +"ceed77d2": "Invest2FulcrumContract()", +"ceed948d": "minCALockTime()", +"ceedd63d": "restartValue()", +"ceee2e20": "callee()", "ceee4119": "getUsersRadarsIds()", +"ceee604e": "getFunctionalitiesAmount()", "ceee9658": "rotate_right(uint256,uint256)", "ceeea0ea": "completeAttack(bytes32)", +"ceeea109": "maxMatchAge()", "ceef3800": "calculateBonusTierQuotient()", "ceef3d93": "changelp7(address)", +"ceef573d": "validateRequest(uint8,address,address,uint128,uint256)", "ceef644c": "LIFEINVIDER()", "ceefbbd6": "prePreIcoEndAt()", +"cef010ca": "vetoQuorum()", "cef037fd": "setContinueSelling()", "cef062fc": "reserveVault()", +"cef0a604": "withdrawUSDCToPrimaryRecipient(uint256)", "cef0e9e2": "getFalconmasterReq()", +"cef14bfe": "numberTokensApproved()", +"cef1ba02": "_calculateSignerAmount(uint256,uint256,uint256)", +"cef22444": "setElPrice(uint256)", +"cef238d2": "oneDeposit(uint256)", "cef24cac": "AmountToFund(uint256)", "cef29521": "PRICE_MULTIPLIER_ICO4()", +"cef2d1dd": "withdrewTokenBalance()", "cef2e559": "marketplace_storage()", +"cef2fece": "approve_431(address,uint256)", +"cef342f7": "rthGenesisParcel()", +"cef35a4b": "buyToken(uint256,string,string,string,string,string,string,string)", +"cef37535": "suancaiPool()", +"cef3c156": "minStakeLimit()", "cef42254": "getContribution(uint256)", "cef4be3c": "partialClaim(address,uint256)", +"cef4cde4": "paths(address,address,uint256)", "cef55ae1": "newComp(uint8)", +"cef562bd": "devAccountLength()", +"cef57b63": "airdropSubmittedEncodedData(uint256)", "cef5ed69": "changeServiceAgent(address)", "cef6a39a": "createMinerAuction()", +"cef6c04f": "LogUpdateTokenDetails(string,string)", "cef6cfb2": "addToWhiteList(string,address)", "cef75d9f": "myCardDividends()", +"cef793a8": "withdrawProfitDev(address)", +"cef7a09b": "getShareOfBaseAmount(address,address)", "cef7a4d0": "LogTemplateSet(address,address,address)", +"cef7d846": "to128x128(bytes16)", +"cef7e0de": "fixedBytes()", "cef7e760": "initialCaps()", +"cef82dfc": "donutsPerBlock()", +"cef857db": "toggleCHI()", "cef887b0": "storeBlockWithFee(bytes,int256)", +"cef89ee6": "transferFor(address,address,uint256,bytes)", "cef8d343": "buyShare(uint256,bool)", +"cef92653": "dailyOROdistribution()", "cef94360": "updatefundingEndTime(uint256)", +"cef95c49": "changeStr(string)", "cef9601f": "timeTillNextSteal()", +"cef9b488": "oneSidedReveal(uint256,bytes32,bytes32,bytes32,uint256,bytes32)", "cef9ca6b": "ThreeDLPrivate()", "cef9db6d": "TOKEN_SUPPLY_TOTAL()", "cefa624b": "getPlayerAirdropGameData(address)", "cefa80fc": "foundersTeam()", "cefaba7f": "prc(uint256)", +"cefac2ea": "disInterTran(address)", "cefad386": "_accountOkayChecks(bytes32,uint64)", "cefb09b6": "getBrokerInfo(uint256)", "cefb3605": "vaultToWallet()", +"cefbfa36": "types(uint256)", "cefc0848": "minimumStakingTokenPercentage()", "cefce1f2": "GameOver(string)", "cefd2239": "unlocktoken(address,address,address)", +"cefd9e6c": "mirrorFromToken(uint256,bool)", "cefddda9": "isGenesisValidator(address)", "cefdfcf3": "testControlRetractNotRetractable()", +"cefe1927": "giveMeDayStart()", "cefe23dd": "HarjCoin()", +"cefe7397": "onBuyEvent(address,uint256)", "cefeb6f7": "MeshPointManager(int256)", +"cefebc80": "getContractsFromIndexes(uint256[])", "cefed526": "Atlantide(uint256,string,string)", "ceff149b": "getRoundLuckyPot(uint256)", "ceff6fe6": "cancelApproveForAddress(uint256)", +"ceff98b6": "convertFrom(address,uint256,string)", "ceffbaf1": "isReleaseApproved()", +"ceffd371": "getLastBlockCheckedNumber(address)", "cf0023ec": "pvt_plmt_max_in_Wei()", "cf007460": "nextClaim(address)", "cf00c197": "stageOneEnd()", "cf00cba0": "BlocksquareSeriesA()", "cf00d4b9": "prizePoolPercent()", "cf011b26": "excludedAddresses(address)", +"cf01b866": "sendWhitelist(address)", +"cf023779": "totalStaged()", "cf02ba9d": "optionsPerShare()", +"cf0317aa": "ambil(uint256)", "cf034b1d": "transferFromTrustedContract(address,uint256)", "cf03e589": "Registered(address,string,address)", "cf03f5f4": "activateMasterKey(address)", +"cf04153d": "defaultListTokens(uint256)", +"cf04a19d": "setMinimumLockPeriod(uint256)", "cf04dd7e": "DAPSTOKEN()", +"cf04eec5": "RaceEvent(uint32,uint256,uint256)", "cf04fb94": "changeVerifier(address)", "cf054fb2": "hardCapAmount()", "cf0682bc": "warning()", +"cf069d67": "showblocknumber()", "cf06b141": "assertEq17(bytes17,bytes17,bytes32)", "cf06b3ba": "KOIOSToken(string,string,uint256,uint256)", "cf071005": "showLastPoolAddress(address)", +"cf076453": "marketBuySwanWithToken(address[],uint256,uint256)", +"cf07c3a8": "registerENS(address,address,bytes32,bytes32,address)", "cf07fbb6": "HUToken()", "cf082176": "ETHERION()", "cf083591": "listAllAttendants()", +"cf083a6a": "swapBAC()", "cf086765": "getPatronsCount()", +"cf08fed5": "color()", "cf094497": "betCount()", +"cf09b4ae": "minLoanSize()", "cf09c6dd": "lastBlock_f10Hash_uint256()", "cf09e0d0": "createdAt()", "cf09e6e1": "SetBigContract(address)", "cf09e820": "getPropertyOwnerSalePrice(uint16)", "cf0a07b2": "Choon(address,address,address)", "cf0a50d3": "DopeToken()", +"cf0a5af3": "ejectFundsGovernor()", +"cf0a93a0": "transferETHget()", "cf0aed0e": "setMinimumBuyValue(uint256)", +"cf0af4b5": "getFolderTransferProofs(address,uint256)", +"cf0b2270": "poolOwner()", +"cf0be531": "setSellSystem(bool)", +"cf0c4070": "PaymentTokenChanged(address)", +"cf0cb127": "acShare()", "cf0cb613": "finalUnlockTransfer()", +"cf0cc31f": "contrib_arbits_max()", +"cf0cd58a": "depositDays(address,uint256)", "cf0dbc27": "getH2Bidder()", +"cf0e21aa": "pendingHbtShow(uint256,address)", "cf0e4076": "findAddress(address,address[])", "cf0e4be5": "eggsInTimeSlot(uint8)", "cf0e80fe": "getClaimedBalance(address)", +"cf0eda84": "rollover(bytes32,bytes)", "cf0f02bd": "IntoQueue(address)", "cf0f0593": "shl8(uint8,uint8)", "cf0f2bf8": "transferPreSigned(address,uint256,uint256,uint256,bytes)", "cf0f34c4": "setMaxDuration(uint256)", +"cf0f4588": "claimableProfitAt(uint256)", "cf0f864e": "battleCardIdRange()", "cf0fc7d5": "_fetchOrderByIdWithMerchant(string,address)", "cf0fdacb": "getRarityBonusValue(uint256)", "cf100287": "payToManager(uint256)", +"cf102a2a": "fiveBlock()", +"cf10b16b": "recordIncomingFloat(address,bytes32,bytes32)", +"cf10e748": "getAppIdPosition()", "cf112453": "canUpdateNextGameInitalMinBetSize()", "cf124ba3": "tokenSaleIsFinished()", "cf1259d8": "badge_obj()", +"cf126837": "withdrawETHForMarketing()", "cf12789a": "percOf(uint256,uint256)", "cf12b725": "releaseTokenPrivate()", "cf12d99f": "xorexs()", @@ -118649,10 +217098,15 @@ "cf157942": "endsigning()", "cf158fe9": "scheduleTransaction(uint256,uint256,uint256)", "cf15b87d": "IcoCompleted()", +"cf15dc3f": "pole()", "cf160cf2": "addModerator(address,string)", "cf16b4a2": "_packPlayerData(address,uint256)", "cf16cc83": "getRoundStart(uint256)", "cf16e955": "buyOnBehalf(address)", +"cf170471": "changeClaimPercentage(uint256)", +"cf170d55": "BurnFrozenFunds(address)", +"cf1787e6": "setLateFeeApr(uint256)", +"cf1814bc": "depositBonus(uint256)", "cf187228": "_createChar(string,address,uint256)", "cf187df1": "addFrozenBalances(address,uint256)", "cf18811f": "getTrusteeIndex()", @@ -118661,13 +217115,22 @@ "cf19463d": "newPokemonMaster(address)", "cf195101": "Zchain()", "cf195e34": "issuedToDate()", +"cf1a0ddc": "updateMaster()", "cf1a6243": "MIOTCrowdsales(address,address)", +"cf1a80d5": "whitelistAddressFromTransferFees(address)", +"cf1aa958": "updateSTOLPrice()", +"cf1acdfe": "closeOpenEdition()", "cf1b037c": "registerCallback(address)", "cf1b11e8": "tokensPerWeiPlusBonus(uint256)", "cf1b3f08": "withdrawTop(uint256)", "cf1b45c3": "User(address,address)", +"cf1b927e": "maxSlippageFactor()", +"cf1bb5c0": "transferToPriest()", "cf1c13ce": "setBonusRate()", +"cf1c1928": "setRecastStartBlock(uint256)", "cf1c316a": "addAuthorized(address)", +"cf1c6243": "getBuyOrderPage(address,uint256,uint256,uint256,uint256)", +"cf1c8d7e": "futureDeals(address)", "cf1c9f52": "pauseDET()", "cf1cd249": "secureSend(address)", "cf1d21c0": "ETHER_ADDRESS()", @@ -118676,6 +217139,7 @@ "cf1e3bcb": "projectReserve()", "cf1eba78": "promoMap(bytes32)", "cf1ec58d": "usdPerEthLog(uint256)", +"cf1ed887": "_proportion(uint256,address,address)", "cf1edfea": "checkIfLockCanBeRemoved(address)", "cf1ee6f9": "OVISRESERVED_TOKENS()", "cf1eef50": "UpdateRateAgent(address)", @@ -118683,33 +217147,60 @@ "cf1f3dd7": "ledgerName()", "cf200e9f": "getBalancesSeller(uint256)", "cf202727": "myfirsttoken()", +"cf205e1b": "fundWithEther(uint256,uint256)", "cf20ac40": "citadelBalance()", +"cf2105ee": "sync(address,uint256,uint256)", "cf210e16": "restrictedAcct()", "cf216207": "tokensToTransfer(address,address,address,uint256,bytes,bytes)", "cf21977c": "mint(address,uint256,uint256,uint256,uint256,string)", +"cf21dfa3": "participateMine1(uint256)", +"cf224128": "GetCurrentDay()", "cf225109": "getSellAgents(uint256)", +"cf229ad2": "StakeContractSet(address)", "cf22c803": "Election(bytes32[],uint256,uint256,uint256)", +"cf2305cd": "withdrawFromVault(uint8,address,address,uint256)", +"cf230979": "removeAmm(address)", "cf2317d5": "nBallots(bytes32)", +"cf234bc6": "UNISWAP_SwapTokensForEth(address,uint256,uint256)", "cf235743": "whitelist(address[],uint256[])", "cf23616e": "enableTimelock(uint256)", +"cf23a8ab": "approveForever()", +"cf24a0ea": "setNextHeaderBlock(uint256)", +"cf25b09f": "pin()", +"cf25c394": "getKiboSellPrice()", "cf25e4e8": "getActiveBusinessesPerType(uint256)", +"cf260baf": "userTickets(address,uint256)", +"cf268434": "setEarnedToToken1Path(address[])", "cf26ac9b": "getLinkOwner(address)", "cf27539e": "LBL(uint256,string,string)", "cf278430": "split(address,bytes32,uint8,uint256)", "cf279ff1": "inserirOuvidoriaNoCadastro(address,bytes32,uint8,bytes32,bytes32,int256)", "cf27d016": "isInGracePeriod()", +"cf28185e": "_emitTrackingEvent(bytes32,bytes32,uint256)", "cf282878": "_createNode()", "cf2887e5": "transferTo(address,address[],uint256)", "cf28b18e": "p_update_tokensRewardsAllocated(uint256)", +"cf28f39a": "viewCreditedENCORETokens(address)", "cf295a5c": "mintbuy(address,uint256)", +"cf2965f8": "SetAw0(address)", "cf299d04": "joinPre()", +"cf299ea9": "liqStream(address)", +"cf29ddc4": "removeWhitelistByTokens(address,address,address)", +"cf2a037c": "encodeSlashPackage(address)", +"cf2a2907": "getArtworkData(uint256)", +"cf2a44f4": "frob(address,uint256,address,int256,int256)", "cf2a8612": "two(uint256)", +"cf2adac8": "balancesGetNext(uint256)", "cf2affca": "changeRequiredAdmin(uint256,bool,bytes)", +"cf2b0f99": "typesNumber()", "cf2b16d9": "Game(address)", "cf2b3b47": "createRoomQuick()", +"cf2b4295": "sendAirdrop(address,uint256)", "cf2b8c05": "getRealisation_effective()", "cf2c52cb": "deposit(address,bytes)", +"cf2cd0be": "streamedRewardUntil(address)", "cf2d03ae": "minJump()", +"cf2d1b81": "Cancel(address,bytes32,uint256)", "cf2d31fb": "register(bytes32,string)", "cf2d5d66": "TestSelfDropToken()", "cf2d5eb4": "ICO_TRIGGER()", @@ -118718,33 +217209,52 @@ "cf2e161c": "DOWN_winBets()", "cf2e3efc": "GetBankAccountBalance()", "cf2e80cc": "_setSentReveal(uint256,address,bool)", +"cf2f5039": "setOracleUpdateAllowance(uint256)", "cf2f856e": "gracePeriodMinTran()", "cf2f9a4a": "transferTokenContractOwnership(address,address)", "cf2fb7ca": "setDIDTokenAddress(address)", +"cf2fe8fd": "calculateRedeemTokenPrice(uint256,uint256,uint256)", "cf3006a1": "setEthPriceInDollar(uint256)", "cf309012": "locked()", +"cf30cce1": "UpdateContract(uint256)", "cf310642": "Police_1()", "cf314b6a": "verifyAccount(address,bool)", "cf317b7e": "getSellerInfo(address)", "cf31e9fe": "getOutputHash()", "cf31ff86": "isAddressValid(address)", +"cf323460": "burnMany(uint256[])", "cf32b062": "deadlines()", "cf32b957": "LockInventory()", +"cf32d873": "KeyLock()", "cf33babc": "VotingStarted(uint256)", +"cf34719b": "renderPreview(string,uint16[3],uint8[2],uint8[4],uint8[2],uint8,uint8[3],uint8[4],string)", +"cf348425": "tokenImage(uint256)", +"cf34ef53": "Log(string)", "cf351c1d": "setFeeTokenAddress(address)", +"cf35214e": "firstBeneficiary()", "cf35238a": "googleSupply()", +"cf356e08": "externalRawBalanceOf(address)", "cf356f83": "parcelGzeWithBonusOnList()", "cf357364": "getOrderType(bytes32)", "cf35bdd0": "assets(uint256)", "cf35f275": "transferFromStakedisbursementfund(address,uint256)", +"cf35f823": "f5(uint256)", "cf3630b4": "setNextStartTime(uint256)", "cf36fe8e": "bobMakesEthPayment(bytes32,address,bytes20)", "cf3743c6": "DuxToken()", +"cf378343": "awardItem(address,string)", +"cf37b495": "setGelatoGasPriceOracle(address)", +"cf3823f3": "FOMOFund()", "cf38b609": "priceChibi()", +"cf394485": "log(address,bool,bool,address)", "cf397201": "addLockedTokeA(address,uint8,uint256)", "cf39bff5": "accoutToSummonNum(address)", +"cf3a785f": "referBalanceOf(address)", +"cf3acfbc": "proposalCategoryInitiate()", "cf3b1967": "TOKEN_DECIMALS_UINT8()", "cf3b70e6": "CreatedIAM(address,uint256)", +"cf3b9f9f": "SetIdentifiedContract(address)", +"cf3c5d16": "BancorEtherToken()", "cf3c6fd3": "distributeFounderTokens(address,uint256)", "cf3ca0fa": "blockDotGasLimit()", "cf3cb33f": "exchangeToken(address,uint256)", @@ -118758,22 +217268,39 @@ "cf3e52b8": "ValidateWorldSnapshotInternal(uint256)", "cf3e52d9": "topWizard()", "cf3e9519": "lrcUnlockPerMonth()", +"cf3f3b93": "_getDepositAction(uint256,uint256)", +"cf4007e5": "RevealStop(uint256)", +"cf40631b": "PledgeUpdated(address,uint256,string)", +"cf408823": "setRecord(bytes32,address,address,uint64)", +"cf40ae28": "getUserUpline(address,uint256)", "cf40bb58": "currentTimeIndex()", "cf40f290": "EventLuckyNumberUpdated(uint256,uint256,uint8)", +"cf40fc9c": "getDummy()", +"cf41632f": "getGasCostOfAddDelta(uint128,int128)", "cf4186cb": "rejectMint(uint256,uint256)", "cf41d6f8": "getPaid()", +"cf41ed73": "fee_unit()", +"cf41ee0f": "godRound()", +"cf41f701": "BalancerOracle()", +"cf42190c": "getDefi99BalanceMetadata(address,address)", "cf4228ea": "isSignedByAll()", "cf4246a6": "ethereum2USDprice()", "cf424b16": "releaseForSeed(address,uint256)", "cf427d1b": "currentPenalty(address)", "cf4315bb": "MINBET_perROLL()", +"cf438bb3": "bookHave(address)", "cf43f4aa": "TrustedhealthToken()", "cf4422e8": "getMilestoneDetails(bytes32)", +"cf44c4d1": "PERCHARACTERS(uint256)", "cf44f5f7": "updateKeyMasks(uint256,uint256,uint256,uint256)", "cf456865": "createCompany(bytes32,bytes32,uint256)", +"cf456ae7": "setMinter(address,bool)", +"cf45d7d5": "isBarkeeper(address)", "cf45f83b": "MADToken()", "cf460fa5": "right16(uint256)", +"cf46111a": "sendToken(address,uint256,bytes)", "cf462616": "isVestingSet(address)", +"cf4639b2": "pendingMul(uint256,address)", "cf464997": "safeAssert(bool)", "cf46827e": "getStakingMetrics(address,bytes32)", "cf46bd24": "TransferContractOwnership(address,address)", @@ -118784,80 +217311,153 @@ "cf47c326": "generateCryptsyToken()", "cf488329": "BITCASH(string,string,uint8,uint256)", "cf48d1a6": "setVox(address)", +"cf4962c4": "valuePoolsDays(uint256)", +"cf497e6c": "setMasterCopy(address)", +"cf4a0c5e": "depositFor(address,address,uint256,uint256)", "cf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", +"cf4a543c": "addrCET4Count(address)", +"cf4aa598": "test_wdiv_trivial()", +"cf4b0765": "potFunded(address,uint256,string)", +"cf4b4d64": "buyArtworkETH(uint256[6],address[2],uint8,bytes32[2])", +"cf4b55cb": "pendingShare(uint256,address)", +"cf4b8ac8": "invoices(string)", "cf4baa4b": "kemnagToken()", "cf4c3eac": "reservedWeis()", "cf4cc8fb": "BitBallCoin()", "cf4cea67": "dateBonus(uint256,uint256,uint256)", +"cf4d308c": "accountsCanShareProfit(uint256)", "cf4d3a88": "PeopleSeedCapitalCoin()", "cf4d6c0b": "AcceptsHyperDivs(address)", "cf4e593a": "getPlayedGameJackpot()", "cf4e964a": "cardStructs(uint8)", "cf4e9ec3": "endCallRequestDate(address)", +"cf4f775c": "getRenTokens(address,uint256)", "cf4fab1f": "PERFORMANCE_FEE_RATE()", "cf504d48": "projectActive(uint256)", "cf509b9d": "gracePeriodAmount()", +"cf512b53": "swapKyber(address,address,uint256,uint256,address,uint256,address,bytes,bool)", +"cf518e11": "getBlockRewards(uint256,uint256)", +"cf519688": "changeFeeInfo(uint16,uint16,uint16,uint16)", "cf51ee7a": "removeValueBonus(uint8)", "cf51f582": "NucleusVisionAirDrop()", +"cf5207ba": "boostedRewards()", +"cf528067": "deployedBlogs(uint256)", "cf52a7b2": "whiteListAddress(address)", "cf52ab0b": "New(address,uint256,uint256)", +"cf52e8b3": "tellorId()", "cf5303cf": "checker()", "cf530bc3": "LOG_NewBet(address,uint256,uint256,bytes32)", "cf53951d": "test_registrationInformationAccurate()", "cf53d630": "getBetInfoByID(uint256)", +"cf53f72f": "logWarpSyncDataUpdated(address,uint256,uint256)", "cf54aaa0": "getDecimals(address)", +"cf54ce47": "setNetworkFee(uint256)", +"cf55180b": "getWholeBalance()", "cf561cea": "TestKToken()", +"cf561fe9": "community_rate()", "cf564ab5": "getVehicleByAddress(address)", +"cf56535f": "WatchClaimTimeMin()", +"cf567d1e": "buyerToSentWei(address)", +"cf56be10": "govenors3(address)", "cf5713b6": "whatsMyName()", +"cf57be30": "claimRewardTokenInTpool(address,address)", +"cf57ee69": "getStakeCount(address)", +"cf5830c1": "StarUpdated(uint256,uint8)", +"cf585a73": "setLiquidityPool(uint256,uint256,bool)", "cf58802f": "getOverview(uint256,uint256)", "cf58a045": "memberBuyToken()", "cf58fbeb": "test_insert_findWithHintNextRemovedUpdateTail()", +"cf59d563": "LUSD()", +"cf59e705": "bidInterval()", +"cf5a0191": "getEstimatedTokenForTokenSushi(uint256,address,address)", +"cf5a50f5": "setOracul(address)", +"cf5ab68b": "midGradeCarsBought(uint256,uint256)", "cf5ae516": "PauseICO()", +"cf5b2816": "setInternalPriceCurve()", "cf5b5a77": "medalUnFreeze()", "cf5b8018": "summSupporters()", "cf5b90f0": "sendToken(address[])", "cf5ba53f": "create(bytes)", "cf5bd8e6": "EthBlockExplorer()", +"cf5bf059": "Search_flight_ID(uint256)", "cf5c1b52": "setForSale(uint256,bool,uint256)", "cf5c2ac7": "usdCentsBalance()", "cf5c8b99": "CuratorRules(address,address[])", +"cf5c9008": "createPaymentMethod(uint256,uint8,address,address)", "cf5cb132": "getRegisteredAssets()", +"cf5cbcc8": "lastPhase()", "cf5d4e4d": "BarterCoin()", "cf5d57db": "changeReward(uint256)", +"cf5db295": "Lucky(uint256)", +"cf5dfafe": "lock(address,uint256,uint256,address,uint256,uint256,uint256)", "cf5e36df": "getWeiContributed(uint16,address)", +"cf5e7bd3": "unbind(address)", "cf5f2201": "unMinedPop()", +"cf5f7df9": "removePoolDeveloper(address)", "cf5f87d0": "updateConsumable(uint256,uint256,uint8)", +"cf5fa39a": "system_fees()", +"cf5fb753": "claimBond(bool,bytes32,bytes32)", +"cf5fe0a1": "setAvalanche(address)", "cf6036fd": "length(bytes1)", +"cf60402f": "setMinimumTokenRedemption(uint256)", +"cf604f5d": "sushi_wbtc_poolId()", +"cf618bb8": "setZeroFeeSender(address,bool)", +"cf61d63f": "beamToWallet(address)", "cf62277c": "ThePiContract()", +"cf622e33": "deposit2(uint256,uint256)", +"cf628eb2": "pompContract()", "cf62d4e3": "changeMaxBetDoubleDice(uint256)", "cf6304d4": "endPreTokensale()", "cf6346cb": "presaleMinValue()", +"cf63976a": "minRaffleTicketCost()", "cf63bb83": "neymarHasMinted(uint256)", "cf63edea": "tokenIdExist(uint256)", +"cf64a643": "zGov()", +"cf64a68f": "GetLockedTokens()", "cf64c42f": "endCrowdsalePhase1Date()", "cf64da7f": "HOVERCRAFT_TYPE()", "cf652d1d": "setDefaultBoxNumber(uint256)", "cf654886": "getHeroLevel(uint256)", +"cf65725d": "proposeCall(bytes,uint256,string)", "cf65952c": "deactivateDevice(address)", +"cf65b4d3": "toInt16(int256)", +"cf662a53": "closeWithSwapWithGasToken(bytes32,address,address,uint256,bool,bytes)", "cf662b5e": "JGCoinOld()", "cf665443": "nextMint()", "cf6661fb": "getNativeAsset()", +"cf66785e": "addConnection(address,address,bytes32,uint8)", +"cf66a6bc": "mcdSaverTakerAddress()", +"cf672578": "minXmon()", +"cf675365": "mintCumulation()", "cf67805c": "MumsTheWord()", "cf682b3c": "VMVToken()", "cf69318a": "left60(uint256)", "cf693418": "_teamJackpot(uint256)", "cf69443c": "getCurrentUserTotalReward()", "cf69df28": "getDataRequestLength()", +"cf6a019d": "tripIds(uint256)", "cf6a8722": "removeBytes32(bytes32)", "cf6accab": "sendCharityPrizeToCharityAddress(uint256)", "cf6ad876": "cancelAgreement()", "cf6b1081": "proxyGetRefund()", "cf6b3822": "WatchCollectedFeesInSzabo()", +"cf6b673d": "bundlesDefinition(uint256,uint256)", "cf6b70cf": "many_payments()", "cf6b8bbf": "XYT()", "cf6bd8b9": "view62()", +"cf6c0d43": "buy_redeem(uint256,uint256)", +"cf6c25f5": "devsRewardAddress()", +"cf6c62ea": "addLiquidity(address,address,uint256,uint256)", +"cf6d01ab": "stakingLineLimit(uint8)", "cf6d06a1": "transferFree(address,uint256)", +"cf6d102c": "lottery_active()", +"cf6dbf77": "setSecretRevealSlashPercent(uint256)", +"cf6dda78": "spendableTokenCount()", +"cf6e1620": "setWeightsChangeDuration(uint256)", "cf6e4488": "custodianChangeReqs(bytes32)", +"cf6e5de9": "payout(address,uint256,address,uint256,address,uint256,bytes32)", +"cf6ea478": "NewOrder(address)", +"cf6ec2bb": "setSaneRate(address,address,bool)", "cf6efb49": "getCdRate()", "cf6f3b59": "userAdd(uint256)", "cf6f3fe4": "distance_driven()", @@ -118865,48 +217465,83 @@ "cf6fbeea": "takeAway(address,address)", "cf6fcbb0": "calculateAveragePixelPrice(uint256,uint256)", "cf7018d4": "setAdURI(uint256,string)", +"cf701ff7": "calc_token_amount(uint256[4],bool)", +"cf706205": "getPercentBeingSold()", +"cf706bb7": "approve_402(address,uint256)", +"cf708410": "wallst()", "cf70ba36": "tokenZNT()", +"cf70c6c7": "setUpgradeState(uint8)", +"cf70e27b": "getInfo3(address)", +"cf70fa40": "blockreward()", "cf710b34": "showTeam()", "cf710b73": "test_setMaxSize_update()", +"cf7149cf": "increaseDevFee()", +"cf71efa9": "dustLimit()", "cf72085f": "deliverTokensBatch(address[],uint256[])", "cf7209c5": "KyberHandler(address)", "cf724096": "transferEthers(address,address,uint256)", "cf72b511": "get_refund_deposit_addr_amount(uint256)", "cf7315c6": "retract(bytes20)", "cf731bd7": "Temgean()", +"cf73266a": "getCrossReserveReturn(address,address,uint256)", +"cf7398d2": "percFeeToFundingCollectors()", "cf73a1bc": "managerAddress()", +"cf7405e5": "StakingPaidLength(address)", "cf756935": "determineLuckyVoters()", +"cf756fdf": "initialize(address,address,address,uint256)", +"cf759f0b": "netTotalUserWithdrawableWithDividend(address)", +"cf760092": "spendTimeOf(address)", "cf763d1c": "periodLimit()", +"cf766788": "setXYZTokenAddress(address)", "cf76a3b9": "TokenState(uint256,uint8)", "cf76cb7d": "simInstallments(bytes)", "cf76ebf9": "carsGifted()", "cf772c7d": "victims(uint16)", "cf7730f1": "reserveFundSupply()", "cf775255": "configureDomainFor(string,uint256,uint256,address,address)", +"cf7759ad": "aeth()", +"cf7775ec": "setAccountLockType4(address,uint256)", "cf77c8db": "setAffiliateContract(address,address)", "cf78044d": "setMaxIndex(uint256)", "cf783d8a": "allAccounts()", +"cf786f8f": "VAT_ADDRESS()", "cf78a450": "unlockBBK(uint256)", "cf78cf0d": "ContractCreated(address)", +"cf790bbb": "transformClasses(uint32)", "cf7956ab": "SIEToken(address,address)", "cf79d8b4": "completeRemainingTokens()", +"cf7a1d77": "initialize(address,address,bytes)", "cf7a8965": "steal()", "cf7aebea": "transferAntique(address,bytes32)", "cf7b38a2": "resumeCollectToken()", +"cf7b4a09": "ids(bytes32)", +"cf7b6741": "indexToPipe(uint256)", "cf7b8c5f": "player_count()", "cf7bb192": "canStakeExisting(address,bool,uint256,uint256,uint256,uint256,bytes8,uint256)", +"cf7bf5bb": "getGeneratedYELDIES()", +"cf7bf6b7": "pokeBoost(address)", +"cf7c106c": "FUELTOKEN()", "cf7c2985": "setAuctionPriceLimit(uint256)", "cf7c2b31": "paymentOf(address)", +"cf7c4eb5": "setSpawnLimit(uint256)", +"cf7c7976": "m_TotalStackingOfLastUpdate()", "cf7d0304": "MintableLazyCoderToken()", "cf7d23a3": "Withdrawn(uint256,address,uint256)", +"cf7d3618": "NewSchemeProposal(address,bytes32,address,address,bytes32,bytes4)", +"cf7d6db7": "isCoinFactoryAdmin(address)", +"cf7d8226": "withdrawMonthlyEarning()", +"cf7d9998": "lptPrice(address)", "cf7dcc15": "distributeEth(uint256,uint256)", "cf7e01ba": "ICO1Period()", "cf7e06cb": "setCapForParticipants(address[],uint256[])", +"cf7e122d": "getSynthToEthOutputAmount(bytes32,uint256)", "cf7e69f8": "changeCooldownIndex(uint40,uint16)", "cf7e9242": "getAgreements()", "cf7efb4c": "SketchMarket()", "cf7f12ea": "getBidCountForSketchesWithHolder(address)", +"cf7fdc9d": "BRIDGE_ADDRESS()", "cf808000": "iWantXKeys(uint256)", +"cf80f763": "triggerWhiteListApproval(uint256,bool)", "cf81377d": "eosDASH(uint256,uint256)", "cf813e3f": "getLockTime(uint8)", "cf81978b": "recipientMIT(address)", @@ -118914,65 +217549,113 @@ "cf820461": "txFee()", "cf82601b": "removeInstitutionAsset(string,string)", "cf82731f": "getPic(uint256)", +"cf8273bf": "_getCalled(uint256)", +"cf828136": "mulDiv(int256,int256,int256)", +"cf83142d": "isEpochEnd()", "cf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", +"cf837290": "allPartiesLength()", "cf837fad": "contractLock()", +"cf838001": "citizen(string)", +"cf839365": "withdrawkushOGUni(uint256)", "cf8407c9": "registerFund()", +"cf849442": "REWARD_AMOUNT()", "cf854969": "rate1()", +"cf8589b9": "pendingBids(uint256)", +"cf85e21e": "getGroupB()", +"cf865aa6": "arbn(uint256,uint256,address)", +"cf866c8e": "getTimeUpdated(string)", "cf866d6f": "LastProposalCanDiscard()", +"cf8695ca": "arrlength()", "cf86a95a": "transferMintership(address)", +"cf86add5": "stake(address[],uint256[])", +"cf86cc89": "CloseProposalEvent(address,uint256)", +"cf86d73f": "supernovas(uint256)", +"cf86f674": "ethMintDRSCoinRate()", "cf876b72": "setAccountUrl(string)", +"cf8776cb": "devRewardAddress()", +"cf879346": "JoinEthron(string)", "cf879e83": "isRevoke(address,address)", "cf881ad9": "fUseAmount()", +"cf889b16": "dailyPlayers(uint256)", "cf88eebe": "enableBuyBackMode(address)", "cf8951d1": "CollateralTransfered(uint256)", "cf89744f": "MaxBetUpdate(uint256)", "cf89956e": "Base(uint256,string,uint8,string)", "cf8a24de": "emulatePurchase(address,address,uint256,uint256,uint256)", +"cf8bbcde": "ubiFactory()", +"cf8bc197": "minSakeHolder()", "cf8bc918": "getCrowdsalesLength()", "cf8c9cc8": "submitTransaction(address,address,uint256,uint256,bytes)", +"cf8ca426": "balanceAave()", +"cf8ca760": "recentFstAddress()", "cf8d652c": "tokenCreationRate()", "cf8d8ca0": "walletName()", +"cf8e4fde": "AddUser(string)", +"cf8e8505": "setTechAccount(address)", +"cf8e984d": "setMinWithdraw(uint104)", "cf8e9996": "MuellerFiredby51()", "cf8eb597": "AccountIsFrozen(address)", "cf8eeb7e": "subBalance(address,uint256)", "cf8f4d4f": "getParticipantRegistry()", "cf8f8f12": "finishICOInternal()", +"cf8fd5a5": "getTokenToETHPrice()", "cf8fee11": "getBasicRate(address,bool)", "cf904e7d": "delCertAdmin(address)", "cf9057f7": "findNextYear(uint256,bytes4)", "cf905858": "hasIdentity(address,address)", "cf90bfc9": "DatPayToken()", +"cf90c754": "viewRecentRewardTokenAmount(address)", "cf90e741": "Presale(uint256,uint256,address)", "cf910b37": "_getRandom(bytes32[4],uint8)", "cf913ae7": "setKoikeToken(uint256,address)", "cf914a87": "ownerSetOverride(address,bool)", "cf91e331": "TransferGenesis(address)", +"cf91e7e5": "setSavingsPoolAddress(address)", +"cf91eb1a": "investIn(string,string,bool)", +"cf920e91": "Airdropped(uint256,uint256)", "cf92e19b": "maxPlayableGameId()", +"cf9315eb": "setBtcTxFeeRewardRate(uint256)", +"cf932c40": "GetAllTeams()", +"cf933e42": "getLoanContractDetails()", "cf934d67": "newIndex(bytes32,uint256)", "cf934fb8": "sendToBeneficiaryContract()", +"cf948c5c": "endLease(address,uint256)", "cf94e395": "set_hosp(uint256,string)", "cf951c9f": "initAsset(uint256,string,string,string)", "cf9530d0": "totalSupplyOf(address)", +"cf9540a6": "_decode_sol_int8(uint256,bytes)", +"cf9561bc": "farm(bool)", "cf957ce0": "ROSCA(uint16,uint128,uint256,address[],uint16)", +"cf95833e": "releaseMarketing()", "cf9676c1": "setMintRequestUintMap(uint256,int256,string,uint256)", "cf96ce03": "setHouseEdgePercent(uint256)", +"cf9732ae": "ETHpendingCashoutB(address)", "cf9779cd": "accountFor(address,bool)", "cf984f16": "testFailRestartEnforceRevisions()", "cf98e120": "calculateStagePrice()", "cf991259": "BRANDS_ADDR()", +"cf992e33": "cancelRequestFutureStragety(address)", "cf99a4d9": "buybackTypeTwo()", "cf99cd2e": "iterateThroughSwarm(address,uint256)", "cf99d935": "finalizeIfNecessary()", "cf9a60d4": "ETH_USD_EXCHANGE_RATE_IN_CENTS()", "cf9ac727": "logPrice(address,address,uint256)", "cf9ac928": "bbd36484()", +"cf9b3c8d": "accountsList(uint256)", "cf9b62d9": "OwnerOf(uint256)", "cf9b9e0a": "FDCToken()", +"cf9d0b5f": "stakeRewards()", "cf9d33d8": "GeniusInvest()", "cf9df5eb": "insert(address,address,address,address,uint256,address,bytes32,uint256)", +"cf9e0398": "expiryID(uint256)", +"cf9e0b15": "isPriceManager(address)", +"cf9e28e1": "stakeBonusContract()", +"cf9f23b5": "ext()", "cf9f3db2": "PresaleTimeRangeChanged(address,uint256,uint256)", "cf9f5ef6": "MANW()", +"cf9f7338": "getAsgardCount()", "cf9faf1d": "ownerSetRate(uint256)", +"cf9fc954": "DeleteTellerModerator(address,address)", "cfa0136f": "setPresaleEndTime(uint256)", "cfa01baf": "prepareForEarlyFinalization()", "cfa059ee": "getIssuanceIds(bool,bool,bool,bool,uint256,uint256)", @@ -118980,24 +217663,45 @@ "cfa084b0": "setTransferOwnership(address)", "cfa0c480": "addTx(address,uint256,bytes)", "cfa12510": "returnHash(address[2],uint256[7])", +"cfa15bcd": "tokenIssuedTeam()", +"cfa18290": "playerBScore()", +"cfa20ebf": "asegurados(address)", +"cfa2450a": "MintdUSD(uint256)", "cfa24ee3": "setFighterCoreAddress(address)", +"cfa2ebdf": "pauseTransferToNativeFromKey(bool)", +"cfa2fe86": "nbAssetPerOptionID(uint256)", +"cfa38bb8": "updatePerReward()", "cfa3bfce": "_validateLockupStages()", "cfa3c132": "parentOf(uint256)", "cfa446ec": "Standard_2()", "cfa46990": "getSellUnicornFullPrice(uint256)", +"cfa4a21c": "cauldrons(uint8)", "cfa4a6a6": "getPools(bytes32)", "cfa4f3e8": "setRelease(uint256)", "cfa517df": "getOwnerByAnimalId(uint256)", "cfa51e01": "getAllTokenSold()", +"cfa558ba": "hasVotedInFavorOf(uint256,uint8,address)", +"cfa56694": "SetBallotsPer30Days(uint256)", +"cfa576a8": "_blockTimestampLog(address)", +"cfa57e9b": "donate(uint256[5],uint256,bytes32[3],uint8)", "cfa5cfd3": "balanceInSpecificTier(uint256)", "cfa5d53b": "blocktubeTransfer(address,uint256)", "cfa5df4b": "swapAbleToken()", "cfa5f02a": "exchangeETH()", +"cfa66e52": "future(address,address,uint256)", "cfa675cc": "_revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", +"cfa67f91": "marketCloseTimestamp()", +"cfa6f827": "collect(uint256,uint256)", "cfa7074b": "BuyRateChanged(uint256,uint256)", +"cfa7097f": "distributedTokensFor(address)", +"cfa728b6": "withdrawWithLockedWithGasToken(uint256,address)", "cfa75d43": "developer_add_string_B(string)", +"cfa82b91": "updatePendingSushi(uint256)", "cfa83079": "minHpDeducted()", +"cfa84dfe": "_description()", +"cfa84fc1": "mint(uint256,address[],uint256[])", "cfa86845": "RedeemingTimeLimit()", +"cfa8fb42": "permitAll(address,address,bool,uint256,uint8,bytes32,bytes32)", "cfa9fa85": "percentageHumanityFund()", "cfaa234c": "_isNotMixing(uint256,uint256)", "cfaa759d": "privateIcoStartTime()", @@ -119006,55 +217710,111 @@ "cfab3056": "guesses(int256)", "cfab472f": "isUserEnabledForContract(address,address)", "cfab6554": "sumElements(uint16[])", +"cfab6868": "yDeposit()", "cfab8862": "pfcController()", +"cfabc634": "placeOrder(uint256,uint256,uint256,address,address,address[],address,uint256)", "cfabe67b": "acceptVestingTrusteeOwnership()", "cfac2280": "uniqueJingles(bytes32)", +"cfac57c7": "DAI_JOIN_ADDRESS()", +"cfad3d6c": "setStopOrder(address)", "cfad5277": "totalAddresses()", +"cfad57a2": "setGov(address)", +"cfad7410": "addBalance(address,uint256,uint256)", +"cfad78b1": "t3()", +"cfad9c8c": "foresight()", +"cfadacbf": "CrydrViewAddedEvent(address,string)", +"cfadb0a5": "totalDepositedLevel3()", +"cfadf68f": "removeFeedETH(address)", +"cfae2497": "getAllLock()", "cfae2c65": "dispenseTokensToInvestorAddressesByValue(address[],uint256[])", "cfae3217": "greet()", +"cfae5084": "is_burnt(bytes32)", "cfae52e1": "createFirstDay()", +"cfae6d44": "WithdrawTeamTokens()", "cfaed1e2": "minAllowedBetInEth()", "cfaf7315": "BuyEggs()", "cfaf8a33": "sellTile(uint256)", "cfb009cf": "Obredis()", "cfb079d3": "DX()", +"cfb07dcd": "vipLevelToDown(address,uint256)", +"cfb0ac99": "updateRequest(uint256,string)", +"cfb19a56": "buyTokensByETH()", +"cfb25bf8": "supporterToValidator(address)", "cfb27084": "switchAirDrop(bool)", +"cfb27945": "setDynamicWeight(address,uint256,uint256,uint256)", "cfb3647b": "tokenMinter()", +"cfb39c9b": "aVideoWatched(address)", "cfb3a493": "getMyBounty(uint256)", "cfb3b886": "jack_nonce()", "cfb45e3c": "_cancelOperation(bytes32,uint256)", +"cfb51052": "reward(bytes32,bytes32)", "cfb51928": "stringToBytes32(string)", "cfb5a5f8": "getShare(uint256)", +"cfb5d685": "createBrand(bytes32,uint256)", +"cfb5d6d6": "publicSaleContractAddress()", +"cfb5df18": "jackPot_()", +"cfb620a2": "transferProofState(uint256,string)", "cfb64dfc": "addCustomerFromProviderAdmin(address)", +"cfb6857a": "amountobuy()", "cfb6e9af": "LogBet(address,uint256,uint256)", +"cfb6f69f": "removeAlerterWrappedContract(address)", "cfb75c92": "slavenAdress()", "cfb7b9e9": "PROM()", +"cfb869bf": "pets(uint256)", +"cfb8c131": "noom1()", "cfb9147d": "exploreFastenETHFee()", +"cfb92efe": "isAllWalletsApproved()", +"cfb9c531": "Start(address,uint256)", +"cfb9c885": "priceForBorrow()", +"cfb9cfba": "stakerRewards()", "cfb9e26f": "getStateOfPlan()", "cfba0279": "hasSkill(address,uint256,uint256,uint256)", "cfba24ac": "isSenderBiometricLocked()", "cfba4fe0": "findBalance(address)", "cfba99dc": "getQuoteAsset()", +"cfbae999": "ntokenCounter()", "cfbb2047": "currentSmartSpeedNumber()", +"cfbb3dbd": "setApr(uint256,uint256)", "cfbb4b24": "Invent()", "cfbb7d36": "teamWithdraw()", +"cfbb8871": "set_base_asset_address(address)", "cfbb9f37": "DOW_THU()", +"cfbbb575": "daiBuyOn()", "cfbbbd9e": "PASS()", "cfbbd902": "calcWinNumbers(string)", "cfbbda3d": "seekApproval()", +"cfbbdc8f": "PriceRaise()", +"cfbc1b59": "hyfi()", +"cfbc5ce9": "setMaxTimelockPeriod(uint256)", +"cfbc9cf6": "ownerPerc()", "cfbd3bbb": "GetCarrot(address)", "cfbd4885": "revokeMinter(address)", +"cfbd4d32": "impliedVolatilityWeekly(address,uint256,address)", +"cfbda8ee": "minInvestmentInCHF()", "cfbe2cb3": "walletDeposit(address,uint256,uint256)", +"cfbeb83e": "FIRST_BEE_AIRDROP_AMOUNT()", "cfbed755": "getCard(uint64)", "cfbef67d": "extract(bytes,uint256)", +"cfbf1b90": "BURN_SIG()", "cfbf92a9": "getNodeStake(address)", "cfbf9a36": "getBetRecord(uint256)", +"cfc01fd8": "_minLottoTokens()", +"cfc0423f": "TokenNames(address)", "cfc05b56": "setTokensSoldGoal(uint256)", +"cfc0afeb": "simpleSwap(address,address,uint256,uint256,uint256,address[],bytes,uint256[],uint256[],address,string,bool)", "cfc0cc34": "getStrategy(uint256)", +"cfc0ff1b": "BAT_ADDRESS()", +"cfc14bb7": "burnAddressModify(address)", +"cfc16254": "setGovernanceAddress(address)", "cfc19710": "closeMtr()", +"cfc1b419": "acceptUpgrade(address)", "cfc220b6": "SpermLabs()", "cfc2a93e": "dividendRoundsBeforeFoundersStakeUnlock()", "cfc2aad2": "generateBonusForGene(uint256)", +"cfc2ac21": "setMcapOracle(address)", +"cfc2cb60": "usersPoolBoost(uint256,address)", +"cfc2d3d2": "getLastTwap()", +"cfc3fc93": "pendingFAAS(uint256,address)", "cfc41c91": "reb()", "cfc450af": "maxInvestmentInWei()", "cfc45610": "Makindo()", @@ -119064,62 +217824,110 @@ "cfc54848": "sendEth(uint256)", "cfc5a969": "bytesToUint(bytes32)", "cfc5e7c8": "getSellCount(address)", +"cfc61592": "removeBounties(bytes32[],uint256[],string)", +"cfc6452d": "setMaxDiff(uint256,uint256)", +"cfc6f518": "burnUnsoldLIDOTokens()", "cfc72007": "selfdestruct(address)", +"cfc74cec": "_3crv()", "cfc7e2da": "getMinAmount()", +"cfc86f7b": "_baseTokenURI()", +"cfc9b68c": "wethOverdraft()", +"cfc9c796": "v1ImplV0Addr()", "cfc9cb7f": "ForestingToken(address)", +"cfca3147": "setProtocolFeeCollector(address)", "cfca375c": "NooCrowdsale()", +"cfcadb9f": "twentyDayHodlPercent()", "cfcb2b7e": "createController(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"cfcb6008": "setServiceVault(address)", "cfcb69d1": "TelegramTON()", "cfcba2f8": "firstRefundRoundFinishTimestamp()", +"cfcbe5c5": "getPoolReward(uint256,uint256,uint256,uint256)", "cfcc09a9": "simpleICO(string,string,uint8,address,uint256[],uint256[],int256)", "cfcc57ad": "maxFundsThatCanBeWithdrawnByOwners()", "cfcc7720": "rechargeRobot(uint256)", +"cfccbdef": "takeFees(address,address)", "cfcccb32": "escrowList(address)", "cfcd84a9": "collectibleIndexToPrice(uint256)", "cfcd8c2d": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,bool)", "cfcdde19": "PRICE_PREBUY_BONUS()", +"cfcddeb0": "addrToUser(address)", "cfd00530": "isContractSignedBySigner(string,address)", +"cfd030a2": "pendingGrants(string)", +"cfd06169": "_syncPoolRewards(bytes32,uint256,uint256)", "cfd0a970": "TierClassicDividendAddress(address)", "cfd129f8": "stageSoftcap(uint8)", +"cfd1f319": "BuyCredits(bytes32)", "cfd28966": "getMigrateOutDestinationValue()", +"cfd299f3": "addQuip(string)", "cfd2eb49": "StoreComission(address,uint256)", "cfd32aa0": "removeFunder()", "cfd32ef7": "isMember(address,bytes32)", "cfd3c17d": "currentLuckyStoneNumber()", +"cfd3ee2f": "setStopRepaying(bool)", +"cfd43dc1": "LogNewPrices(address,uint256)", "cfd447d7": "startSale(uint256,bool)", +"cfd47663": "getStake(address,uint256)", +"cfd47829": "poolBootstrapping()", "cfd4ca6b": "contract_md5()", "cfd4edcf": "ProofOf()", +"cfd4eec9": "getWeiPriceUnitTokenList(address,address)", "cfd550a3": "ICO_ENABLERS_CAP()", "cfd56a13": "_sell(address,uint256,uint256)", "cfd5cb77": "userAttackMonsterCDSeconds()", "cfd65fdb": "assertEq19(bytes19,bytes19)", +"cfd692a6": "total_profit()", "cfd6eea2": "QDCoin()", +"cfd7789c": "ZapOut2PairTokenWithPermit(address,uint256,address,bytes)", "cfd7ab91": "STARTTIME()", "cfd7be04": "backNewHopeOwner()", +"cfd7dbca": "_safePool()", "cfd7f1fb": "_chkBuyerLmtsAndFinl(address,uint256,uint256)", +"cfd8511c": "withdrawFees(address,uint256,uint256,uint256,uint256,uint256)", "cfd8a175": "betPrice()", "cfd8d6c0": "setProvider(address)", +"cfd91f2b": "getFooBar()", "cfd938df": "Channel(string)", +"cfd9480b": "pubSaleStart()", "cfd94b01": "votersLen()", "cfd9e0ea": "getStateForTime(uint256)", +"cfda1206": "setpendingClaimStart(uint256)", "cfda7175": "getArbiterFeeAmount(uint256,uint8,uint256,address)", "cfdac910": "getSketchesWithAuthor(address)", "cfdacb58": "SetCryptoPrice(uint256,uint256)", +"cfdad63b": "bonus1(address)", "cfdafde4": "saleIsFinished()", "cfdb2eb7": "freeClaimAllowanceOf(address)", "cfdb35ed": "setLKCExchangeRate(uint256)", +"cfdb42a8": "oneCoinNeedAmount()", +"cfdb9a7c": "unpermit_user(address)", "cfdba320": "getRemainLockedOf(address)", "cfdbf254": "MAX_BATCH_SIZE()", +"cfdd2104": "TokenDistribution(uint256,uint256,uint256)", +"cfdd2f30": "addTransaction(uint256,bytes32)", +"cfdd3302": "kicks()", "cfdd4520": "showCurrentBidValue()", "cfdd7557": "CountOfAlastayaToken()", "cfdd7e8a": "createFirstCommonsForum()", +"cfde237b": "top3_tg_culi(int256)", +"cfde424e": "setbExchangeProxynPools(uint256)", +"cfde9e29": "approve_852(address,uint256)", +"cfdec606": "quitPool(uint256)", "cfdf35b6": "removeLog(string)", +"cfdf677e": "batches()", +"cfdf9135": "getDataLevelInFourLine(address,uint256)", +"cfdfae71": "rebate(uint256,uint256)", +"cfe0008b": "ismFactory()", "cfe01e23": "anyAuditRequestMatchesPrice(uint256)", "cfe0a5dc": "tokenKoef()", "cfe0d487": "backup_finishIcoVars()", "cfe0eeb7": "startSale(uint32,uint64,uint64)", +"cfe10abc": "getVestingById(uint256)", +"cfe10b30": "getNumContracts()", +"cfe171b6": "listTokenForERC20(uint256,uint256)", "cfe186b2": "finishGame(uint256)", "cfe1887b": "delListReq(string,uint256,uint256)", +"cfe1de35": "exchangeTransfer(uint8,address,address,uint256)", +"cfe1f7bf": "ctnum()", "cfe2b37a": "setIntF1ArrBoolF2AddressF1(int256,bool[],address)", "cfe2f4e2": "Nicks()", "cfe30939": "houseEarnings()", @@ -119130,16 +217938,24 @@ "cfe52bdd": "sendFunds(address)", "cfe5344a": "updateNovaAddress(address)", "cfe5655c": "createDataControl()", +"cfe57d80": "mintNonFungibleBatch(address,uint256[])", "cfe60c87": "LookRevToken()", "cfe643ac": "getRightAndRoles()", "cfe67587": "getWeeklySellVolume()", +"cfe6766b": "topicfee()", +"cfe6ba22": "playerExists(address,uint8)", +"cfe6e455": "approve_440(address,uint256)", "cfe6f220": "CertificateAddresses(bytes32)", +"cfe71103": "liquidationFeeRatio()", "cfe76488": "whitelistApplication(uint256,bytes32)", +"cfe79f85": "getAllPairs(address,uint256,uint256)", "cfe7b770": "getBetInfo()", "cfe7e7a0": "createLamboSale(uint256,uint256)", "cfe7f3c0": "AddForm45(uint256,uint256,uint256,uint256)", "cfe8c535": "giveAnimals(uint8,address)", "cfe9a7b8": "getPackageName(uint256)", +"cfe9fad5": "_contribution(address)", +"cfea1024": "getEasyBidBNB(uint256)", "cfea3bb6": "swapTokenInfo(address)", "cfea751f": "getIsAllTransfersLocked()", "cfeaa5ea": "setBonusList(address)", @@ -119154,10 +217970,24 @@ "cfec6ca3": "calculateProfitGameType1(uint256,uint256)", "cfec8d83": "GetUserPELOAmount(address)", "cfec934a": "runCrowdsale()", +"cfecc657": "CPEarned(address)", "cfecd73d": "EtherIncPrivate()", +"cfecfa36": "getExchangeDataByAddress(address)", +"cfed246b": "prices(address)", +"cfed7196": "availableOut()", "cfed9199": "timePassed(uint256)", +"cfedab16": "bambooToWbnbRoute(uint256)", "cfedc04a": "neverdieToken()", +"cfee5189": "LogRemovedMinter(address)", +"cfee61bd": "withdrawalFee(address,address,uint256)", "cfee88db": "closeClaims()", +"cfee9c6e": "setCalcAddr(address)", +"cfef1441": "claimOrderedWithdraw(address)", +"cfef6078": "create(uint256,uint256,uint48)", +"cfef7f80": "totalUndistributedTeamTokens()", +"cfef9135": "encoreVaultAddress()", +"cfef941b": "composeLand(uint256,uint256,uint256,uint256)", +"cfef9ccb": "globalslaughter()", "cfefaa8b": "Executed(string,uint256)", "cfefb3d5": "payout(bytes32)", "cfefcfb0": "VotedForProposal(uint256,address)", @@ -119169,40 +217999,79 @@ "cff0ab96": "params()", "cff12797": "setIcoPhase3(uint256,uint256)", "cff13efb": "newCar(string,bytes17)", +"cff1b4ec": "setLoanStage(uint256,uint8)", "cff1b6ef": "updateAdminFee(uint256)", "cff29dfd": "bidders(uint256)", +"cff2ddad": "FEE_PERIOD_LENGTH()", "cff2fa42": "_returnFee(address,uint256)", +"cff30d46": "LogN_fnc(address,bytes32,uint256,string,bytes,function,uint256,bytes1,uint256,uint256)", "cff382ae": "AICrypto()", +"cff395d7": "revokeOperators(address[])", "cff3d4d8": "stage1()", +"cff3db9e": "sellIdle()", +"cff3f889": "drawRai(address,uint256,bytes32,uint256)", +"cff3fe1f": "approve_763(address,uint256)", "cff410b4": "Exit()", "cff43a03": "verifyNewOrganizer(bool)", +"cff48002": "_getLPReserveExchangeRate()", "cff4d6cd": "payoutTotal()", "cff5b28e": "FLUX()", +"cff606a0": "enableScriptExecutor(uint256)", "cff61fb6": "batchExchange(address[])", +"cff63d98": "TotalActiveStaker()", +"cff693f3": "explodeSupernova(address,uint256)", "cff6bc21": "allSigners(uint256)", +"cff6cdc2": "SLOPES_ROLE()", +"cff70001": "getRatio(uint256,uint256)", "cff72e67": "changeDevelopersRecipient(address)", +"cff7409c": "increaseDebitNote(address,uint256)", "cff76d67": "totalEthBankrollRecieved()", "cff82e22": "getTicketCount(address)", "cff9293a": "vote(uint32,uint32)", "cff941fc": "Configured(address,address)", +"cffa2603": "changeLockPeriod(address,uint256,uint256)", "cffa4346": "DIETCoin()", +"cffaf5f5": "getLocators(address,address,bytes2,address,uint256)", +"cffb47cf": "maxReserveSupply()", +"cffb5a92": "DidVCInit(bytes32,bytes32,bytes,uint256,address,address,uint256,uint256)", +"cffb7517": "get_decimals()", +"cffc18bd": "converterMap(address)", +"cffc74f1": "LogBuyForInvestor(address,uint256)", +"cffc84ba": "suggestionsCounter()", "cffc9997": "SetBuildingData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "cffdc976": "WithdrawOwnerFunds(uint256)", +"cffdd46c": "changeProhibiter(address)", "cffe02cf": "setCrowdsaleRate(uint256)", +"cffe03c6": "AirdropInvoked()", +"cffe5e82": "sync(address,bool)", "cffe764c": "Insure()", +"cffe7d34": "SaleToken(address,uint256)", +"cffeabed": "cooldownBetweenCampaigns()", "cffee328": "successfulDeals()", +"cfff1232": "setCrossForkBlockNumber(uint64)", "cfff25bb": "getNumReserves()", "cfff63ca": "assignMediator(address)", "cfff8974": "mintToInfluencer(address,uint256,string)", "cfffa030": "lanch_atak()", +"d0004c05": "delegatedHarvest(address,uint256)", "d0005aa4": "salesStart()", +"d0007aef": "generateOrderId(address,uint256)", "d0008a6d": "addNewMember(address,uint256)", "d000a404": "PT(uint256,string,string)", +"d0011d9d": "createCollection(uint256)", "d001425a": "bank2()", "d0015500": "ownerSecondary()", +"d001746c": "getGameInfoByRid(uint256)", +"d001c5dc": "getBatchBalances(address,bytes[])", +"d001e4a2": "psaSMTX()", +"d0021791": "howManyTokensAreReservedFor(address)", +"d00223e7": "getDefaultPack()", "d002462b": "setDeploymentFee(uint256)", +"d0029560": "approve_523(address,uint256)", "d002a41c": "getUnReportedMatches()", +"d0031ef4": "amountWithdrawable(uint256,address,uint256)", "d00408b7": "StandardToken(address)", +"d004399a": "pure_tuple()", "d0044f9a": "_getLuckyList(uint256,uint8)", "d0045341": "totalMintAmount()", "d0047acf": "mint(address,uint256,uint32)", @@ -119210,38 +218079,74 @@ "d004f38b": "setRates(uint256,uint256,uint256)", "d0064c00": "maxDebt()", "d0068f80": "getClient(uint256)", +"d007242e": "getTokenHandlerInfo(uint256)", "d0072e59": "forceReturn(address)", +"d0072ec4": "purchaseTicket(uint256[])", "d007c644": "payInterest(address)", +"d007db29": "userFeeStage(uint256)", +"d007f35e": "viewPubEnd()", "d007ff4b": "showJackpotBalance()", +"d008150c": "kControl()", "d0089141": "ovedclaimBountyairdrop(address,uint256)", +"d008a10b": "uploadSignedString(string,bytes20,string)", "d008d7a2": "BosToken()", "d00910a3": "yearlyTeamTokensPaid(uint256)", "d0095cc6": "genNumber()", +"d009b2d6": "freezeDeposit(address,uint256)", +"d00a818f": "minTimeLock()", "d00a9058": "getOwnTokens()", +"d00ae3d5": "alerters(address)", +"d00b3191": "itoken()", +"d00c1aec": "isProposalExecuted(uint256)", "d00cce41": "roleExists(string)", "d00d20f4": "getTokensCrowdsaled()", +"d00dba5e": "SetPicosPerEther(uint256)", +"d00dbcb0": "ownerBunnies(address,uint256)", +"d00e3a3a": "collateralOracleHasUpdate(address)", +"d00e44e0": "pullSUSD()", +"d00e7dd0": "setTestPerBlock(uint256)", +"d00e9918": "yflToken()", "d00eef6a": "TokenGranted(address,uint256,string)", "d00ef880": "setShareTokenAddress(address,address)", +"d00f4689": "userRewardss()", +"d00f9c64": "upcast(bytes25)", +"d010da12": "weiMax()", +"d01192c2": "issid()", +"d011f32a": "bpowApprox(uint256,uint256,uint256)", +"d01215ae": "denominatorMax()", "d01296d9": "addmember(uint256,address)", +"d012d8be": "timeSlotToAmountBonded(uint256)", "d0130009": "Subtraction(uint256,uint256)", "d013a182": "getServerBuildingWeapon(uint256,uint8,uint8)", +"d013c45c": "calculateBurnAmount(uint256)", +"d013cbe2": "bnbBalance()", +"d014103a": "globalNoOfInvestors()", "d0142c47": "ImperialCreditToken()", "d014c01f": "enter(address)", "d014d667": "XCDT()", "d0158b87": "fetchCancelledOrdersForMerchantByAdmin(address)", +"d015a940": "breed(address,uint256)", "d015d86f": "getRoundStats()", +"d015e13f": "out(uint256)", "d015f6dd": "NorthPoleAddress()", +"d01607b6": "addHazer(address,uint256)", +"d016492e": "delete_allowedAddress(address)", "d01678f0": "raiseDay2()", +"d0168e4d": "sendGuess(string)", "d0169c1e": "lockAsset(bytes32)", "d0169f4c": "start_POSTICO()", "d016ec40": "vipBrokerNum()", +"d0173c33": "disableServiceFee(address)", "d0174145": "create(address,address,uint256,uint256,uint256,uint256)", "d017c2b4": "returnTokensToWallet()", "d017cdcf": "acquireFame(uint256)", "d017e20d": "processing(address,uint256,uint256,uint256)", +"d017ecb4": "calculateNeumarkDistribution(uint256)", "d017f49b": "JustOneToken2()", +"d018458e": "lastTimeRewarded(address)", "d01860d0": "isFinishedSuccessfully()", "d018a00f": "redeemBeer(bytes32)", +"d018aae6": "unlockCheck(uint256)", "d018db3e": "attack(address)", "d0198c33": "getFunctionIdentifier(string)", "d019d2c4": "MRT()", @@ -119249,52 +218154,86 @@ "d01a9453": "BitAirToken(address,string,string,uint256,uint256)", "d01ab2e6": "_cancelOrder(address,address,uint256,address,uint256,uint256,uint256)", "d01ab31a": "ICOStart()", +"d01af8bc": "getCarInfo(uint256)", "d01b555d": "setSalePause(bool)", "d01ba5f0": "increaseShardBalance(address,uint256)", "d01bbdc9": "setOracleCallbackGasLimit(uint256)", "d01c0904": "FujintoToken(uint256,string,uint8,string)", +"d01c44cd": "claimVested()", "d01d0175": "StorageConsumer(address)", "d01d6b86": "amountOfRegisters()", +"d01dbc62": "pauseOff()", +"d01dd6d2": "setBlacklisted(address,bool)", +"d01df68c": "nyanPoolMax()", "d01e2df9": "testContains()", +"d01e547f": "getOperationKeyCount(address)", "d01ec886": "importPresaleContribution(address)", +"d01f137e": "setNftFactoy(address)", +"d01f2285": "upgradeCard(uint256,uint256,uint256,uint256,uint256)", "d01f4c9f": "hoursSinceTimestamp(uint256)", "d01f4ffe": "stopSecondSale()", "d01f63f5": "getWhitelist()", +"d01f6944": "monsterIds(uint256)", +"d02021cc": "releaseEndTime()", +"d0202d3b": "tokenOut()", "d02041f3": "advisorsPeriodAmount()", "d02042a3": "relief()", "d020ae40": "gameTotalGen()", "d020dc3b": "rejectMessage(uint256,string)", +"d0212f4c": "changeTokenController(address,address)", "d02143ed": "getRefToLength(address,address)", "d0216dce": "XXXXXXXX07(address)", "d021d8da": "Coinbase()", "d0220b1c": "setCreateChampFee(uint256)", "d0225e9e": "MAX_LRC_DEPOSIT_PER_ADDRESS()", +"d022f4f3": "withdrawIncentive(address,address,uint256)", +"d022fda5": "commissionMultiplier()", +"d02330c9": "RegisterUser(bytes32,bytes32,uint256,string,bytes32)", "d0237ab8": "EtherLiteSupply()", +"d0238a1c": "removeOperatorWrappedContract(address)", +"d0239d7d": "Stake(bytes32,address,address,uint256,uint256)", "d023d2bd": "getGladiatorChestPrice()", "d023d32c": "setEndAfterSecond(uint256)", +"d0241dac": "swapExactETHForTokens(uint256,uint256,address[])", +"d0246f33": "mintByETF(address,uint256)", "d024768f": "computePropertyHash(string,string)", +"d02495b7": "LogBeBanker(address,uint256)", "d024cd02": "startAuctionDirect(uint256,uint256,uint256,uint64,address)", +"d024dbb0": "registerPrenup(string)", "d02528e6": "GetGameIndexesToProcess()", +"d0259e69": "setMintPower(uint256)", +"d02641a0": "getTokenPrice(address)", +"d0267be7": "getAddressesProviderIdByAddress(address)", "d02721cb": "withdrawProvider()", "d02764f3": "releasesCount()", "d0280037": "buyin(uint8,bytes32,bytes32)", +"d02804cb": "pendingPEPE(uint256,address)", "d0286ab2": "setEmissionTime(uint256)", "d028754b": "Withdraw_1()", "d028a625": "deathData_v11()", "d028c246": "Compaq()", +"d028e96c": "lastSoldFor(uint256)", "d028f571": "getTokenForTeam(address)", +"d0290384": "addDistribution(address,uint256,uint256[],uint256[],bool)", +"d0290aa7": "allActiveBatches()", +"d0295134": "tuneParameters(address,uint256,uint256,uint256,uint256,uint256)", "d0297bc6": "changeMaximumContribution(uint256)", "d02982cf": "isMember()", "d029a530": "buyUnicornWithCandy(uint256)", "d02a4f84": "bcn()", "d02a6db7": "TokenLongExercised(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", "d02a9889": "getDateOfFirstPayment()", +"d02af638": "getPlayerWin(address)", +"d02b1153": "addPreMint(address,string,uint256,bytes32)", "d02b1653": "enablePrivateFund()", +"d02b1982": "landlordCancelLease(uint256)", +"d02b4c37": "addadmin(address[])", "d02b97aa": "withdrawPromoter()", "d02bf162": "spinTheWheel()", "d02bf828": "lotteryTokensWallet()", "d02c438a": "enableTokenSupport(bool)", "d02c8cdf": "cancelMatch(uint256)", +"d02c9f93": "BDPMasterPending()", "d02cc69f": "playWar(uint256)", "d02d08b2": "hasCrowdsaleFinished()", "d02d1382": "getPlayerCard(uint8)", @@ -119302,41 +218241,68 @@ "d02d4554": "createUser(address,address)", "d02d518d": "setArtEvt(string,string)", "d02dade4": "getProviderCounter()", +"d02dcd5e": "TTS()", +"d02dd425": "mins(int256,int256)", "d02ddc12": "insert(bytes1,bytes1)", "d02e140a": "finalizePrivatesale()", "d02e5cfb": "mtcDailySpent()", +"d02e79d4": "increasePrepaidValue(uint64,uint256)", "d02e8f70": "MONUMENT_CITY_FEE()", "d02ea39e": "DuckToken()", +"d02eb3f4": "wBNB()", "d02ecbb5": "ObitanChainxToken()", "d02f5463": "pillarTokenFactory()", "d02f7351": "seizeAllowed(address,address,address,address,uint256)", "d02f8b98": "getApplications(address,bytes32,address)", +"d02f9f7d": "muld(int256,int256)", "d02fcad9": "wdiv(uint128,uint128)", "d0302051": "rewardPercent()", "d031370b": "reserveTokens(uint256)", +"d03150c6": "PeriodsIssuedCounter()", +"d03153aa": "slippageTolerance()", "d0315658": "getShareDistributionWithTimestamp(bytes)", +"d0315bb2": "unregisterArtist()", "d031babf": "LikeCrowdsale(address,uint256,uint256,uint256)", "d031d8c4": "_transferLand(uint256,uint256,address)", +"d0322fbf": "settle(bytes)", "d032ae76": "doAirDrop(address[])", "d033c456": "addAddress(address,string)", "d033d277": "OwnerNamed()", +"d033e2cb": "findCheapestOrder()", "d033e6ee": "preAllocate(address,uint256,uint256)", "d033f913": "getRoundSeedHash(uint32)", +"d0342acd": "fixMediatorBalance(address,address)", "d034536e": "logFileClosing(string,uint256,string,string)", +"d034a884": "computeFinalTally(uint256)", +"d034bf24": "removeEth(uint256,uint256)", +"d0355373": "watches(uint256)", "d0356fa8": "createVestingGrants()", "d035bed4": "validContract(address,uint32)", "d035e45f": "token_escape(address)", "d0360e59": "drainContract()", "d036261f": "amountBonuses(uint256)", "d036bce2": "_calculateTokens(uint256)", +"d036f386": "napV1()", "d0376283": "onlyApprovedOrOwnerOfToken(uint256,address,bool)", "d0378d07": "decreaseReserve(uint256,uint256)", "d038906a": "FloraFicToken()", +"d0397a6c": "remainingAirdropSurplusAddresses(uint256)", "d0399bb8": "endGame(uint256)", +"d039b888": "mintReferrer(address)", +"d039fca1": "executeMetaTransaction(address,bytes,string,string,bytes32,bytes32,uint8)", +"d03a4dcd": "Delete(address)", "d03b41a9": "bountyBalance()", +"d03b4d83": "REI16()", +"d03becd8": "addrOfNTokenController()", "d03bf119": "RANGESTART_11()", +"d03c2206": "Issue(bytes32,uint256,address)", +"d03c390c": "toggleProjectIsActive(uint256)", "d03c8e34": "addAngel(address)", +"d03c9e8c": "neighbours(uint256,uint256)", +"d03cda2f": "inbestToken()", "d03cff97": "devMiningRewardPerETHBlock()", +"d03d23b4": "arbtwo()", +"d03d2a9f": "ChangedAdminToo(address,address)", "d03d5231": "raffleDraw()", "d03d9604": "maskIt(address,uint256)", "d03e1021": "ORACLIZE_GASPRICE_GWEY()", @@ -119344,87 +218310,162 @@ "d03e6817": "Volkstest()", "d03e9bcc": "LogReceiveFunds(address,uint8,uint256)", "d03e9fff": "plusTourFreezingTime(uint256)", +"d03efa2c": "changeShuffleCount(uint256)", "d03ffefb": "createDeposit()", +"d0410e3c": "LockStatus(address,uint256)", +"d0414815": "TransactionFee()", "d04148d6": "m_account()", "d04206f3": "CROSS_RESERVE()", "d042a795": "multiSendA(uint256,uint256)", "d042ce2c": "currentStageTokensBoughtByAddress()", "d04301f2": "Annexe_SO_DIVA_SAS_5()", "d0431cf5": "_openBox(uint256)", +"d04323c5": "recoverToken(address,uint256,address)", "d0435cb0": "MonsterTokenCrowdsale(uint256,address,address,uint256,uint256)", "d043d028": "toBytes4(bytes,bytes,uint256)", +"d044930e": "transData(address)", +"d045a279": "calculateInterestRate(uint256,bool)", "d045e1ff": "_inverse()", "d046065e": "addBet(uint256,uint256,address,uint256)", +"d04653dd": "FreezeAddress(address,bool)", +"d0470e30": "shortcodes(string)", "d0471ee1": "Leverages(address[])", "d04737bd": "Yuzhuralzoloto_2()", "d0479abc": "burnUnsoldTokens(uint256)", +"d0479ef9": "bonusPrice(uint256)", "d047a0d0": "getEmergencyTransferSigner(address,uint256)", +"d04802c0": "modifySlavePool(uint256,string)", "d04807e9": "Heronium()", "d0481f82": "hasLicenseTerms(bytes32,bytes32)", "d048bc87": "inAngelPeriod()", "d048db37": "getOfferCount()", +"d04954ba": "DoUnPause()", +"d0496d6a": "context()", "d04a419b": "getDegree(bytes32)", "d04a46b0": "sendFutureExpanstionBalance(address,uint256)", +"d04ab2d8": "getOrderInfo(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)", +"d04ad965": "MultiERC20Transfer(address,address,uint256,address)", "d04b019e": "getWalletResourceBalance(address)", +"d04b3787": "recieved()", "d04b5f82": "test01Token()", +"d04bd8f1": "addBorrowAsset(address,address)", +"d04be398": "getGlobalRewardDecrement()", "d04bfc9c": "buyer_pay()", +"d04c6983": "sell(uint256,uint256,address)", +"d04c6c18": "approveTokenProportion(address,bytes,address,uint256,uint256)", "d04c9115": "getLoyaltyPoints(address)", "d04cb43f": "withdraw_all_token(address,address)", +"d04ce2b4": "currentProdRatesType()", "d04d26fe": "updateStrength(uint256,uint8)", "d04d2ca3": "BlacklistParticipant(address)", +"d04d5ed0": "updateSupportedTokenList(address[],address[],address[])", "d04d8667": "authorized_recordPlatformFee()", +"d04da390": "supportsInterface(address,bytes4[])", "d04dbdea": "Testtoken4()", +"d04dd66e": "TokenUpdateEvent(uint256,bool,bool,address,uint256,string,string)", +"d04e48f1": "setDate(uint256)", "d04e5586": "MEAManager()", +"d04eed06": "operators(bytes32)", "d04f0535": "PisticciCash()", +"d04f19b4": "workingSharePercentage(uint256)", +"d04fd24b": "confirmDDR(uint256)", "d04fe107": "getActiveAds()", "d050498e": "assertEq24(bytes24,bytes24,bytes32)", "d050557d": "bulkRegisterPoA(bytes32,bytes32,bytes,uint256)", +"d0505f26": "LogStageDistributed(uint256,uint8)", "d05144c8": "getMakeCount()", "d0516650": "frozen(address)", "d0516b82": "maxPresaleAmount()", +"d0516c7c": "changeManager(address,bool)", +"d0518137": "UnregisterPresale(address)", +"d051a38d": "createTokenId(uint256,string)", +"d051bb2a": "SecureLineProperties()", "d051dfd3": "prizes(uint256,address)", +"d052023e": "DEV_FUND_RESERVE_PERCENT()", +"d0524d62": "curveCoefficient()", "d052fbf6": "getHistory(string,uint256)", +"d0537546": "nounces(uint256)", "d05391d2": "admin_transferFrom(address,address,uint256)", +"d053b440": "addLifeDeathPair()", "d05407d4": "SetStepFunctionWrapper(address,address)", "d054261e": "_generateRandomHash(string)", "d05461a6": "mintForReportingParticipant(int256,address,uint256)", "d0549602": "scheduleTransaction(address,uint256,uint256,uint256)", +"d0549b85": "numConfirmationsRequired()", "d054cd87": "badBoardSent(bytes10,uint256,uint8,bytes32,bytes32,bytes10,uint256,uint8,bytes32,bytes32)", +"d0562cf2": "updateCardsData(uint256)", "d0569bc8": "getWinResults(uint256)", +"d0569c22": "getPreMintCount(address)", "d056cc69": "stateCode(uint256)", +"d0573a41": "handleRestrictedTokenTransfer(address,address,uint256)", +"d0575708": "buyCard(uint32)", +"d0575cf9": "a_b25()", "d0578df9": "SMGC()", +"d057913b": "LogFreezeTransfers(bool,uint256)", +"d05832eb": "convertSubA()", "d0587032": "tablet_length()", +"d0590557": "plowFromToken(uint256,bool)", "d0590bad": "generateMessageToSign(address,uint256)", +"d05951a0": "closeLoan(uint256)", +"d05a2a21": "spare()", +"d05b0981": "getNameAuthors()", "d05b7ca4": "uintToChar(uint8,uint256)", "d05ba4da": "addPokemonToSellingList(address,uint256)", "d05bb517": "withdrawFeeToken(uint256)", +"d05be735": "setAllAvailableTokensAndWrappers(address[],address[],uint256[],bool)", "d05c78da": "safeMul(uint256,uint256)", +"d05c826c": "addLiquidityTokenAndEth(address,uint256)", "d05c9342": "_getATxToken()", "d05c9ad6": "setNumRewardsAvailableForAddress(uint256,address,address)", "d05cb545": "registry(address,uint256)", +"d05cd9f8": "EtherTransfer(uint256)", +"d05d2292": "stakePpblz(uint256)", "d05d996f": "TXDELAY()", +"d05dcc6a": "attributes(uint256)", +"d05e44a4": "_GENERAL_LOCK()", "d05ec6c5": "getBonus4(uint256)", "d05ee727": "teamAccount()", "d05efd40": "directorA()", +"d05fcfe3": "SentToLiquidator(uint256)", +"d05fd991": "adminTokenTrans()", "d0600560": "AD()", +"d060288f": "referralBalanceForAddress(address)", +"d0607562": "imageOf(uint256)", "d0607948": "getteamnum(address)", "d060a2a5": "doSmallDrop(uint256,uint256,uint256,uint256)", "d0610ac9": "interpolate(uint256,uint256,uint256,uint256,uint256)", +"d0614567": "upgradeFacadeToAndCall(address,bytes)", "d0617f2f": "OMICrowdsale(uint256,address,address,address)", +"d0620b01": "setRebate(uint256)", +"d06238cc": "EALRY_PHASE_RATE()", "d062c7ab": "CleanBankerCandidate(uint8)", "d06301d3": "__resolve(uint256)", +"d06384da": "idleSupplierIndex(address,address)", +"d063b446": "techDirectorFingerprint()", "d063f55f": "toLittleEndian(uint64)", "d06426d5": "convertUsdToEther(uint256)", "d0647f30": "_createDebt(bytes,bytes,uint256)", "d06502b9": "batchTransferAgileToken(address[],uint256[],address,address)", "d06544d0": "getCoinAddress(string)", +"d065835a": "liquidExitPenalty(uint256)", +"d0658539": "safeCidTransfer(address,uint256)", "d0658850": "ListingDB(uint64,uint64,address)", +"d065ef3c": "canDisenchant(uint256)", +"d0666f4a": "Comparison(address,uint256,string,string,bool)", +"d0668b3c": "stakedCoins()", +"d06699e5": "setInitLockPeriod(uint256)", "d066c841": "GenesisBuyPriceHistory(address,uint256)", "d06760da": "isPartOfOrg()", "d0676647": "ProposalClosed(uint256,uint256,uint256,uint256,bool,uint256)", +"d067667a": "playername(address)", "d06798f2": "fourweeks()", "d0679d34": "send(address,uint256)", +"d067c425": "destoryLock(bytes32,uint256,address)", +"d067f646": "mobsterBalances(address)", "d0683428": "executeRulingA(uint256)", +"d0684f85": "Divest(address,uint256)", +"d068cdc5": "totalSupplies()", +"d0690954": "_validateProto(uint16)", "d0692775": "gamesLeft(address)", "d06980f1": "LogHodlClaimed(address,address,uint256)", "d06982b2": "setDemurrageAmount(uint256)", @@ -119435,108 +218476,204 @@ "d06b3ea0": "whackingPool()", "d06b44a6": "YKCToken(uint256,string,string,uint256)", "d06b6f7e": "setMinTokensToSale(uint256)", +"d06b817d": "getNumOfNftsStakedForSet(address,uint256)", "d06ba559": "WrestleCoin()", "d06c54fb": "acceptNextOwner()", "d06c7b5b": "signalToken()", +"d06c8b60": "setDAOWallet(address)", "d06c91e4": "multisigEther()", "d06ca26c": "managedWallets()", +"d06ca61f": "getAmountsOut(uint256,address[])", "d06cdc73": "LuckyNumberService()", +"d06d04cc": "addLiquidityETH(uint256)", "d06d4612": "jak()", +"d06e2ec1": "removeLastAddedReserve(address)", +"d06f0e6d": "setPercentBank(uint256)", "d06f887b": "destroyMyToken(uint256)", "d06f9734": "setTreasurer(address,bool)", +"d06fcba8": "nftToken()", "d0707c61": "PerformingDrop(uint256)", +"d0707df4": "spreadEther(uint256)", "d0708e31": "DocumentCertoChainContract(string,string,string,string)", +"d070b83b": "solidIndexToOwner(uint256)", "d071f7b1": "recover(bytes32)", +"d0720d63": "_get(address,address,uint256)", +"d0725182": "minPriceRate()", +"d0726e98": "validateSignature(uint256,bool)", "d073c531": "IMOSToken()", "d073ca3d": "SUCCESS_FLAG()", "d074443f": "DeathFactor_i()", +"d0745f5d": "setSeed(address)", "d0747a9c": "getGoldmintFeeAccount()", +"d0749503": "add_pool(address)", "d074a38d": "biddingTime()", "d074de8c": "Testico()", "d074f215": "PHASE_1_PRICE()", +"d0752ae6": "calcTotalDiscount()", +"d07547b6": "etherHoldings(address)", +"d0757694": "getOriginalReferrerPercentage()", "d075c11c": "viewNoncsallocations(address)", +"d075dd42": "getTvl()", +"d07673eb": "totalinvest_(uint256)", +"d077279c": "FounderTkn()", "d0774f74": "GENSIS_TOTAL_COUNT()", +"d07764c7": "redeemStableBond(uint256)", +"d0776c2d": "enableFarmBurn()", "d077814b": "divBase()", +"d077e3b1": "getOrderHash(uint256[],uint16,bytes4,address)", +"d077fa5c": "removeApprovedTokenContract(address)", +"d0782461": "newEtherDeposit(uint256)", "d0785dd7": "getNumberOfPlayersInCurrentGame()", "d07866d2": "sizeOf(uint256)", +"d0789075": "outAmount(uint256,address[])", +"d078cebc": "get_3_longest_run_length_teams(uint256)", +"d0790019": "bxtbFoundation()", +"d07900bb": "collateralTypes(bytes32)", +"d0797f84": "inject(address[],uint256[])", +"d079821e": "set_loan_interest(uint256)", "d0799bee": "setRole(string,string)", +"d079d512": "adjustOfferRate(uint256)", +"d079db0a": "addAssetMilestones(address)", +"d07a7ea8": "addMeterpoint(address)", "d07a8bd7": "RisingToken()", "d07ac4c4": "oraclize_query(uint256,string,bytes[4],uint256)", +"d07ad498": "computeProxyAddressManyToOne(address,bytes32,bytes32)", "d07adab3": "getOutAmount()", "d07bff0c": "getVoter(uint256)", "d07c53b6": "thinkMode()", +"d07ccbbb": "Timelock(address,uint256)", +"d07d33d1": "dealsIndex(bytes32)", +"d07e0db9": "checkKyc(address,uint256)", +"d07e240d": "returnStakingRewards()", +"d07e305f": "hdcore()", +"d07e382c": "ApproverTransferred(address)", +"d07e5d88": "claimed(uint8,address)", "d07e7d7c": "setTTCTokenAddress(address)", "d07e9f90": "getJobsCount()", +"d07ef206": "voteYes(bytes32)", "d07f29e5": "addFounderAccounts(address,uint256)", "d07f2ff6": "GreenWorldFarm()", "d07f3a8f": "RobBanker(uint8,uint256,uint256,uint8)", "d07f8181": "decreasePaymentsBalance(address,uint256)", +"d07fc0a5": "icoInvestments(address)", "d07fdfb0": "October12_2017()", +"d0800fb2": "_adminFeePct()", +"d080ad05": "podeEndTimestampLocked()", +"d08110b4": "triggerAdminRemoval(uint256,bool)", +"d08150b2": "lastTicket()", "d081b681": "vows()", "d081b9f5": "networkState()", "d081f2b8": "BOUNTY()", "d0821b0e": "bet(uint8)", +"d08237b8": "isEnoughNodes(bytes32)", "d08275f1": "WolframAlpha()", "d08279b0": "unpauseTournament()", +"d0829c13": "TransactionsShutDown(address)", +"d082e381": "tokenCounter()", "d082ea8c": "setExchangeAddress(address)", +"d082ec34": "canBurnCollateral(uint256,uint256)", +"d0835a2a": "test_IndexOf()", "d083955c": "adjustMintRates()", +"d083bc86": "getImplementationHolder(bytes32)", +"d084059b": "mintTrancheTwo(address)", +"d0847f1c": "mintGasTokens(uint256)", "d084f670": "getLocked(bytes16)", +"d08525e5": "cashbackPartner()", +"d08533d0": "wethWithdraw(address,uint256)", "d085835a": "timeLock()", +"d085ae76": "totalBulkPurchasedTokens()", "d085b82f": "TIMECOIN(address)", "d085c8b8": "StartDistribution()", "d085e66e": "GetPart(bytes32,uint256)", +"d085f6ea": "changesafeGuardStatus()", "d0863580": "blocksRemaining()", +"d0863dca": "CURVE_TAX_DENOMINATOR()", "d0868223": "returnATXChanges()", "d086a201": "main_ico(address,uint256)", +"d086c254": "getPending(address)", +"d086fb60": "notifyRewardAmount(uint256[],address[])", "d087d288": "getNonce()", "d088070a": "checkWhitelist(address,uint256)", +"d088650a": "lastProposalTime()", +"d088a231": "lockDeposits()", +"d088ba87": "votedUniPool()", "d088f50d": "getNumeroCeldas()", "d0894297": "EARLY_INVESTOR_WALLET()", "d0897347": "engrave(bytes32,string,string,bytes32)", "d089e11a": "accountRegistry()", +"d089ed93": "setOneRouterImpl(address)", "d08a787c": "bytes32ToString(bytes32,bytes)", +"d08a8e13": "lockValueData(address)", +"d08aebff": "Menu07(uint256)", +"d08b4ecc": "lockFloat()", "d08b89f3": "disableStopping()", "d08bc007": "logRef(address,uint256)", "d08bfe26": "CrowdsaleClose(uint256,bool)", "d08c6803": "deletePerson(uint256)", +"d08c96fc": "cUsdc()", +"d08c9702": "matchReceiver()", +"d08d18dc": "g_invalidated(address,bytes32)", "d08d5559": "AABToken()", "d08d66ec": "setBonusState(uint256)", "d08d6753": "mdtRewardAmount()", "d08e2354": "goldPercentage()", +"d08f109d": "shareLevelIncome(address[],uint256)", "d08f2c67": "getHistoryAt(uint256)", "d0900033": "COLONERToken()", +"d090223e": "setDefaultGasFee(bytes32,uint256)", "d09119b4": "mortgage(address)", +"d091226d": "debtTot()", "d0914c8d": "RelestToken()", "d091b550": "newOwnerCandidate()", +"d091dfc3": "mAddrs(bytes32)", +"d091ec31": "removePost(address)", +"d091f6b5": "getIterationTokens()", +"d092e186": "removeLast()", +"d0933181": "CompleteSimpleProvision(address,uint32,address,uint256,uint256)", +"d093410b": "setLockSchemesToLMC(address[],address)", "d0937598": "getLuckyblockBase(bytes32)", "d09398ee": "transferCDP(address,uint256)", "d093e04b": "payJackpot(uint256)", "d0940a5d": "best()", "d0946d00": "subFreeMineral(address)", +"d0948bbc": "getTol(address,address,bytes)", "d0949f99": "UINT256_MAX()", "d094dd21": "getLLV_edit_14()", "d095761f": "withdrawNetIncome()", "d095d499": "profit3eggs()", "d095edb2": "initializeModuleAddresses(address[])", +"d09600df": "setRefundPolicy(uint256,uint256,uint256,uint256,uint256,uint256)", "d09677df": "TankSellMaster()", "d09685b0": "getEntriesCount()", "d096b8f0": "setupRaffle()", +"d09704e7": "pendingNugget(uint256,address)", +"d09706b4": "SellerApproveMarket(address,address,uint256)", "d0973af8": "transferTokensFromContract(address,uint256)", +"d0979cbb": "PayoutsRejected()", "d09812e1": "settlementRegistry()", "d0982feb": "tokenLockDuration()", "d0983f4b": "tokenRatios()", "d0988149": "MANHATTANPROXYMADISONAVE()", +"d09916e1": "requestAsyncExchangeRate(string,string,string,uint256)", "d0995198": "returnMinGoal(uint256)", "d0995b33": "refundBalances(address[])", +"d099b35f": "setAuthorAddress(address)", "d09a6a62": "transferUnlock()", +"d09ae534": "lockUserLP(address,bool)", "d09b0ae4": "RealEstate()", +"d09b0c9a": "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint256,bytes)", +"d09c54ba": "claimVenus(address[],address[],bool,bool)", "d09cb807": "isCurrentAdmin(address,address)", +"d09cc57e": "resultFor(bytes32)", +"d09d1c51": "walletCommunity()", "d09de08a": "increment()", "d09e21ee": "ignore(bytes4,bool)", "d09e3526": "setStatusI(address)", "d09eae58": "SCAMToken()", +"d09ec112": "TradingFeeChanged(uint256,uint256)", "d09edf31": "authorizer()", "d09ef241": "getOrder(uint256)", +"d09f4065": "safe(address)", "d09f85ca": "Eventine()", "d09f872a": "VenusToken(uint256,string,string)", "d09f8b8b": "addXY(uint256,uint256,uint256,uint256)", @@ -119544,54 +218681,118 @@ "d09fbcee": "HumanTokenAllocator(address,address,address,address,address)", "d0a05fea": "setI_S(uint256)", "d0a06fb9": "cloneCard(address,uint256)", +"d0a126ed": "WRITE_OFF_PHASE_E()", +"d0a159d4": "krwEtherium()", "d0a1adf4": "contains(bytes1,bytes1)", +"d0a1ae3b": "subscribe(bytes32,uint256,uint256,uint256,uint256,address)", +"d0a215f2": "commitPendingAccount(address,address,bytes32)", "d0a27473": "teamUnlock1()", "d0a2da8e": "give(address,uint256,string,string)", "d0a2f2c4": "getAllInvestors()", +"d0a3328e": "getFarmOwner()", +"d0a38974": "PurchasedSupernova(address,uint256)", +"d0a3a7e4": "containsSeries(uint256)", +"d0a3b0c8": "tokenID(bytes32)", +"d0a41eda": "SetupPriceFeed(address)", +"d0a43afd": "initRegistry(address)", "d0a45f84": "getVersionImplementation(address,bytes32,address,bytes32,bytes32)", +"d0a494e4": "flashLoan(uint256,uint256,address,bytes)", "d0a4a81b": "setTellerModerator(address)", +"d0a53136": "getUserProfitsGivenToId(address)", +"d0a55fb0": "cancelPairLimitOrders(address,address,uint256)", "d0a56299": "GetAssetTypeAverageSalePrice(uint256)", "d0a579fb": "releaseForEarlyInit(address[],uint256)", +"d0a5af40": "assetFile()", +"d0a5d5cb": "changeSwapRatio2(uint256)", "d0a5eb4e": "setMainWallet(address)", "d0a61995": "sell_(address,uint256)", "d0a62566": "approveIndexed(address,uint256)", +"d0a63307": "wanWan()", "d0a63663": "incrementLimitBranch()", +"d0a65717": "sowed(address)", +"d0a6b677": "lockend()", +"d0a6cc13": "consumeFParty(uint256)", +"d0a6d1a6": "SUCCESS()", "d0a6f018": "LogBalanceChange(address,uint256,uint256)", "d0a6fa54": "getPriceById(bytes32)", +"d0a712ff": "claimTimeRewards(address,string)", +"d0a74fd3": "backup(uint256)", +"d0a753af": "allTickets(uint256)", "d0a7b467": "setAragonDevMultisig(address)", +"d0a7e596": "getCurrentInstallment(address)", +"d0a7f725": "getUserIntraBorrowAmount(address)", +"d0a7fdea": "pendingHabanero(uint256,address)", "d0a826f3": "setWildcardList(address,address,bool)", "d0a835e3": "buyShip(uint32)", "d0a8c801": "fshare()", +"d0a960f7": "numberPikaToUpdate()", +"d0a9e0c0": "packets(uint256)", +"d0a9f20f": "sharePriceDecimals()", "d0aa0313": "setCompte_38(string)", "d0aa407f": "withdrawEther(bytes32,uint256,uint256,uint256[])", +"d0aaa0c3": "uniLp()", "d0aac5cf": "teamProfile(uint256)", "d0ab0066": "calcFlexibleReward(uint256)", "d0ab48e9": "toB32(bytes,uint256,bytes,address)", +"d0ab528a": "dynamicExtraIncentiveAmount()", "d0ab8432": "whitelistRegisteredAmount(address)", +"d0abf0a5": "freezeTimeBlock(address)", "d0ac01ac": "setOfferExpiry(uint256)", "d0ac2252": "getShipEarning(uint32)", +"d0ace48e": "redeemCErc20Tokens(uint256,bool,address)", +"d0ad1709": "hasMinority(uint256)", +"d0ad4bec": "secret_registry_address()", "d0ad7fb8": "buyTicket(uint256[],address)", +"d0ad8802": "withdrawForOperationalCosts(uint256)", +"d0ada6c1": "updateProtocolIdentifier(address,bytes32)", +"d0adc35f": "Sin()", "d0ade72d": "assertEquals(uint256,uint256)", "d0ae4356": "getRequestStatus(address,address)", +"d0ae50ae": "getDelegateCalldata(address)", "d0ae9aec": "setMinInvest(uint256)", +"d0aeade7": "getBlockCount(uint256)", +"d0aef4a9": "refundLockedPayment(uint32)", +"d0af13dc": "canBurnAmount(address)", +"d0af1849": "RepeatBlockAltered(uint256)", +"d0af6c66": "devFundAvailable()", +"d0afb00e": "VendingGuardian(uint256,address)", +"d0afed1d": "SetParticipantURL(address,string)", +"d0aff000": "requireHasRole(bytes32,address)", "d0aff67d": "setNeverdieContractAddress(address)", +"d0b0051a": "userOptOut(address)", "d0b01e68": "__setBeneficiary(address)", "d0b02abc": "createProductionUnit3()", +"d0b0654e": "GetVDVTheoDoi(uint256)", "d0b06f5d": "lastUpdated()", +"d0b089aa": "sojuMax()", "d0b0c0d5": "unlockDevTokenSupply()", "d0b18fbf": "transferByForce(address,address,uint256)", "d0b1b910": "FXSToken()", "d0b2b579": "seedFund()", +"d0b2f183": "balanceOfBondedDollar(address)", "d0b368a0": "addToApproveList(address)", +"d0b371bd": "getStudentDetails(address)", "d0b3da99": "join(uint256,bool)", +"d0b3de21": "BlackList(address)", +"d0b42373": "less()", +"d0b45cd6": "inc1()", "d0b4755c": "RATE_SALESTAGE1()", +"d0b48509": "timeOf(address)", "d0b52156": "getIpfsHash(address,address)", +"d0b591a5": "TWAP12Hour()", "d0b5981f": "closePreICOPublic()", +"d0b5d570": "updateJob(uint64,uint256[])", +"d0b66d67": "_getTokensIn(uint256)", "d0b68efb": "yoobaTokenAddress()", +"d0b6b6db": "mintContract()", "d0b6ba2a": "moveFunds()", +"d0b6f447": "cancelPartnership(uint256,uint8)", +"d0b71b1e": "cdf(int256)", +"d0b7363f": "viewPool(uint256)", "d0b74806": "claimA()", "d0b753f3": "sendPreSaleBonus(address,address)", "d0b7ca57": "mintToken(address,uint256,bytes,bytes)", +"d0b82fb4": "getLuckNum()", "d0b83db9": "insertUser(address,bytes32)", "d0b86d15": "FaradEscrow()", "d0b8bc84": "OwnerUnfreeze(uint256,address)", @@ -119600,60 +218801,119 @@ "d0b99ee2": "_distributeLandholderTax(uint256)", "d0b9e58b": "SspContract(address,address,address,uint256,string)", "d0b9e792": "returnBorrowedEth()", +"d0ba542f": "factorD()", +"d0bacf11": "SentHouse(uint256,uint256,address,address,uint8)", +"d0baf798": "_calcSwapFee(uint256,uint256)", "d0bb1d40": "airdropsCount()", +"d0bbb0d7": "MAX_TOKEN_COUNT()", +"d0bbf209": "createCustomer(string,string,string,string,string,string)", "d0bc1a88": "addMoney(uint256)", "d0bc97d0": "isCrowdsaleFull(uint256,uint256)", "d0bcebc8": "collectBack3()", "d0bcfc0c": "Bankroll()", +"d0be6813": "addProduct(int256,int256,string,int256,int256)", "d0bec975": "countBid(uint8)", +"d0bf4bb7": "paidBondCoins()", "d0bf4d95": "SmokeExchangeCoin(uint256,address,address,uint256,uint256,uint256)", "d0bf9502": "btcLastUpdate()", +"d0bf9c54": "setTreasuryRate(uint256)", +"d0bfbd7b": "addLiquidityToUniswapCUSTODYxWETHPair()", +"d0bfe431": "partnerBecome(uint8)", "d0bff051": "testSetBalanceDb()", "d0c03f35": "multisigVault()", "d0c0c39c": "countTokens(uint256,address)", +"d0c152f8": "checkCounterparty(uint256)", +"d0c183be": "Buy(address,address,uint256)", "d0c1c844": "getLimitedBalanceOf(address)", "d0c1d117": "editAddressDescription(address,string,address)", "d0c24e93": "setNotUpdatable(bytes20)", +"d0c257c9": "removeGaugeMapping(string,address)", "d0c3033c": "generalBounty()", +"d0c32403": "turn128(uint256)", +"d0c32d49": "setFreezeOut(address,bool)", "d0c32dd3": "otcPurchase(uint256,address)", "d0c32ea9": "SearchALLFileLength()", +"d0c3454a": "updateSystemNumber(uint256)", +"d0c362fc": "GetBalanceContract()", "d0c39f14": "Lottery(address)", +"d0c40276": "getRewardDetails()", "d0c412ec": "ENDOairdrop()", "d0c426e6": "burnAllRemainingIBC()", +"d0c42770": "setBpoolCreator(address)", "d0c475e5": "addRecordStrict(uint256)", +"d0c49894": "EventNewRevision(address)", +"d0c4a691": "pendingAllFromSharePool()", +"d0c51e69": "address2PID_(address)", "d0c55ea9": "withdrawForPartner(bytes32,address,uint256)", "d0c5c585": "getBurnAmount()", "d0c5c946": "refundBpToken(address)", +"d0c5cf41": "_Withdrawal(address,uint256)", +"d0c5fe6b": "gravy()", +"d0c6c2c0": "UnlockParameters(address,uint256)", +"d0c73d26": "addFarmTemplate(address)", +"d0c74434": "nirwanaReward()", "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()", +"d0c7e885": "getEstimatedWithdrawalAmount(uint256)", +"d0c87c1e": "deploy_interval()", "d0c8a7a5": "randgen()", +"d0c8f27c": "getFeesValueFromUniswap()", +"d0c93a7c": "tickSpacing()", +"d0c9bb59": "getPoolView(uint256)", "d0c9bb92": "releaseTCLRinTeamTokens()", "d0ca12ba": "ICO_START()", "d0ca1982": "getCrowdsaleInfo(address,bytes32)", +"d0ca4591": "addCheapStruct()", "d0ca4dd7": "ownerWithdrawTokens(address,address,uint256)", "d0ca5e7a": "createTokenToMarket2020()", "d0ca7379": "mintReferralShare(uint256,address,uint256)", "d0cac952": "HouseManaged()", +"d0cb1ff9": "exitSharePool(address)", "d0cb874a": "getTokenByMineID()", +"d0cbe1b5": "ViewStartStakeBonusDate()", +"d0cc0cfa": "sendBal()", +"d0cc6cf2": "queryIdToGladiator(bytes32)", +"d0cc7289": "ERC20_PROXY_0X()", +"d0cc82e3": "MAX_VESTING_ENTRIES()", "d0ccf4bc": "createInstance(bytes32,bytes32,address,bytes,bytes32,bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"d0cddd67": "updateFloat(address)", +"d0ce4729": "validNewUnbankOwner(address)", +"d0ce5466": "MCD_SUB_ADDRESS()", "d0ce659f": "SwitzerlandvsCostaRica()", "d0ce7360": "closeContract(uint256)", +"d0cf300c": "PlayerIndexToApproved(uint256)", "d0cf49e9": "zoLastRefreshTime()", +"d0cfcd2c": "ArrAccountIsNotLockForReturn(uint256)", +"d0cfef32": "unclaimedPayoutTotals(address)", "d0d0ed05": "withdrawVault()", "d0d13e87": "smartContractIsForSale(uint256)", "d0d1ea70": "setTrustee(address)", +"d0d24e5d": "Ownt()", +"d0d26b05": "doHardWorkv1()", +"d0d2ba3e": "rebalanceAuctionModule()", +"d0d2c92d": "getGST()", +"d0d2d110": "mintReqInvalidBeforeThisBlock()", "d0d2e745": "manualExchange(address,uint256)", "d0d38b65": "setFirstRankForFree(bool)", "d0d390bf": "HubToken(address)", "d0d3b9df": "IfModuleRegist(address)", +"d0d3d544": "minTokenGetAmount()", +"d0d3d62a": "removeEntries(address,bytes32)", "d0d3f5ba": "removeNode()", +"d0d41fe1": "setDevAddress(address)", "d0d44cca": "setPOOL_edit_34(string)", +"d0d45cbe": "swapTokens(address,address,address,uint256,uint256)", +"d0d46a0b": "getClaims(address)", "d0d511f9": "getGoalsCount()", "d0d529a7": "openWindow()", "d0d552dd": "setAsset(address)", +"d0d603e1": "toEnable(uint256)", "d0d68241": "betALenght()", +"d0d71962": "getMinimalProxyCreationCode(address)", +"d0d81f15": "get_swaprate(uint256)", "d0d832ad": "fundraiseType()", +"d0d849c9": "switchUsdtBuy(bool)", "d0d89ce3": "cummulativeTokensSold()", "d0d968c0": "burnFromReserve(uint256)", "d0d98276": "revokeOffer(address)", @@ -119661,19 +218921,34 @@ "d0d9fcf7": "RANGE_STAT_MAX()", "d0da3e86": "getNextAntiReplayTag(uint256)", "d0dad7e1": "maxCapMain()", +"d0dae3e6": "setSharePerUsdOracle(address)", "d0db5083": "hatch()", +"d0dbd91d": "setTraitOracle(address)", "d0dc0a04": "all_creatures_for_species(uint256)", "d0dc5c65": "updateTotalSupply()", +"d0dc9b7b": "deployAssessorAdmin()", "d0dd38ad": "setDepositGasCost(uint8)", "d0de7b29": "MetadiumVesting(address,uint256,uint256,uint256,bool)", +"d0de8377": "getRewardSoFarOf(address)", +"d0de8531": "startHRV(uint256,uint256,uint256,uint256)", +"d0de9074": "ethRewardTotal(address)", +"d0deef99": "calculateDailyReward(uint256)", "d0def521": "mint(address,string)", +"d0df4512": "saleCorrection(address,uint256)", "d0e075c7": "BitcoinPurple()", "d0e0813a": "promote(address)", "d0e0ba95": "setId(uint256)", +"d0e0d426": "totalClaimedSupply()", "d0e0e8f6": "isLockedConfig()", +"d0e12903": "volume(bytes,uint256)", "d0e2bef0": "initFactorReward(uint256,uint256,uint256,uint256)", "d0e2dc64": "playAway()", +"d0e2dfba": "escrowContracts(uint256)", +"d0e2f5be": "updateAccountLockType3(address,uint8)", +"d0e301f0": "getDelegatorRewardTokens(address,address)", "d0e30db0": "deposit()", +"d0e32681": "takeLoanOnSelfStaking(uint256,uint256,uint256[])", +"d0e335c9": "burnPercentX1000()", "d0e33b1b": "testGetResults()", "d0e3cbbe": "getCurrentTotalEther()", "d0e3f734": "setPubkey(string)", @@ -119681,94 +218956,173 @@ "d0e46235": "buyCardsAndSendGift(uint8,address)", "d0e4713d": "CEC()", "d0e55727": "changeOfferTime(uint256,uint256)", +"d0e5b51e": "setParams(address,uint256,address,address,address)", +"d0e5eaaa": "Finalize(address,uint256)", +"d0e65538": "updateMinMPONDStake(uint256)", "d0e6cfec": "bountyTokenWallet()", "d0e709b6": "initialTransfer(address,uint256,uint256)", +"d0e7390f": "getMinorInfo(bytes32)", "d0e7a5cb": "editPrice(uint256,uint256)", +"d0e85359": "getZionStackersNumber()", +"d0e8cf46": "refundlist(address)", "d0e95ded": "MithrilOre()", "d0e98c14": "sendRestBack()", "d0e9f00f": "BNTBalance()", +"d0ea5f4d": "isAdminOrSystem(address)", +"d0eb665c": "safeAdd128(uint128,uint128)", +"d0ebdb73": "liquidityLaunch()", "d0ebdbe7": "setManager(address)", +"d0ebfd99": "irkOku()", "d0ec057e": "getFeeAmount(uint256,bool)", "d0ec1607": "cancelPoll(uint256)", +"d0ecab15": "toggleShield(address)", +"d0ecab43": "acceptableEthAmountInWei()", +"d0ecfa09": "yourMTFBalance(address)", +"d0ed26ae": "addReward(address,address,uint256)", "d0ed5c2f": "walletContract()", +"d0ed88a3": "TokenTransfer(address,address,uint256)", +"d0ede344": "userCancelOrder(uint256)", "d0edf912": "createTransaction(address,uint256,uint256,uint256,uint256)", "d0ee32c4": "getSymbolFromAddress(address)", +"d0eeb624": "_exchangeEtherForSNX()", +"d0eede67": "viewReward(address)", "d0ef1048": "_getRand()", +"d0ef2467": "LogSubmissionGasPriceLimitUpdated(uint256,uint256)", +"d0ef31cf": "pendingPrizes(uint256)", "d0ef368d": "setAllocation(address,address,uint256,uint256,uint256)", +"d0ef72d8": "addTransaction(string,string,string,uint256,string,uint256)", +"d0efe753": "repayAmount()", "d0eff891": "weiToEther(uint256)", "d0f040c4": "checkOwnerAllowance(address)", +"d0f081b5": "s(uint256,uint256)", +"d0f0d582": "get180DaysReturnPercentForToken()", "d0f0efcb": "buyPredictXname(bytes32,uint8)", "d0f13638": "minimumPrepaidClaimedPercent()", "d0f15e9e": "WalletWithEmergencyTransfer()", "d0f17d41": "contributionMaximum()", +"d0f1a7e9": "_totalStakingShareSeconds()", "d0f2019c": "hasToken(address,address)", +"d0f2ac90": "OnPlay(address,uint256,string,uint256,uint256,uint256,uint256)", "d0f3235d": "_transferAirdrop(address[],uint256,bytes)", +"d0f32e67": "nextL1ToForgeQueue()", "d0f3aa80": "allowSale()", +"d0f3ca9a": "getAllotmentPerBuyer()", +"d0f43097": "challengeExit(bytes32[],bytes32[],uint8,uint8,address)", +"d0f45c29": "criaProduto(string)", "d0f46c0b": "getUsersContract()", +"d0f48715": "withdraw(bytes,bytes,bytes)", "d0f4f99c": "solvePuzzle(uint256)", +"d0f52910": "GetPoolExtraData(uint256)", +"d0f55260": "getEncoded(address,address,bytes)", "d0f5f4cd": "getPixelColor(uint16,uint16)", +"d0f61614": "rewardMultipliers(uint256,uint256)", +"d0f67c4a": "BNBStakingToken()", +"d0f69579": "initialize(address,address,uint32,uint32)", "d0f6fc40": "QuantityFactorSet(uint256,uint256,address)", "d0f76bb8": "End3()", "d0f7a601": "etherRate()", +"d0f7afce": "getUniq64()", "d0f817db": "getOrgCertificatesCount(address)", "d0f86c9d": "getUser(int256)", "d0f86ea8": "getMemoryRead(uint256,uint256)", +"d0f86f7e": "bondRatio()", "d0f86fec": "ENKToken()", "d0f87ce7": "periodPreITO_mainCapInWei()", +"d0f88763": "setContactTelephon(string)", +"d0f89344": "appendSequencerBatch()", "d0f89c6d": "setWhiteBackersByList(address[],bool[])", "d0f8c714": "add(bytes32,uint256,bytes,bytes8)", "d0f8e6a4": "DelegationTransferred(address,address)", +"d0f9582a": "addFallback(string,address)", "d0f96983": "composite(uint256,uint256,uint8)", "d0f96f6b": "DigitalPadlock(string)", +"d0f9bad1": "ARCHER_MAX_TYPE()", +"d0f9ff8c": "isOraclizeEnabled(address)", "d0fa968a": "s14(bytes1)", +"d0fab3ca": "releaseRewards()", "d0fab480": "meg()", +"d0fb0203": "feeManager()", +"d0fb293f": "getBuyerbyaddress(address)", "d0fb8909": "activations(address)", "d0fbb9e4": "claimRemainEth(uint256)", "d0fbe7fe": "buyTickets(uint256[])", +"d0fc1618": "strategicPartnerships()", "d0fc1e7d": "getFrequency(bytes32)", "d0fc2782": "multisigs(uint256)", "d0fc35cf": "StandardFormula()", +"d0fc3e83": "hardRewards()", +"d0fc81d2": "UINT_MAX_VALUE()", "d0fc899a": "presaleInvestorsETH(address)", "d0fca0ca": "gogo(bytes,bytes,address[])", +"d0fcdff1": "fund(bytes32,string,uint256)", +"d0fd40bb": "returnSwapContractOwnership()", +"d0fd5139": "enlisted(address)", +"d0fe0412": "_setEnableDistributeSeizeWpc(bool)", "d0fe3e85": "releaseTokensTo(address)", +"d0fe5743": "bdd(address,uint256)", +"d0fe5c66": "zapEth()", "d0febda9": "getModerator(address)", "d0febe4c": "buyTokens()", "d0fef78f": "Visor()", "d0ffecaa": "setWhaleMax(uint256)", +"d0fffafd": "cacheTimestamp()", +"d1000b22": "_originalContract()", "d10032dc": "getTokeRate()", +"d1007142": "save(uint256,address[],uint256[],uint256,uint256)", +"d1011ea7": "storageWrite()", "d1013fec": "endTimeSale1()", +"d101401b": "MintOwnershipTransferred(address,address)", +"d10165fd": "AxiesRewarded(address,uint256)", "d101d3b2": "timelock(address,uint256,uint256,uint256,bool)", +"d102072f": "claimAndUnstake(uint256)", "d1026aa8": "YESToken()", "d10271a1": "OxProtocol()", "d103449c": "addURL(string)", "d1037a11": "swap(uint256,address,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"d10383d4": "ETH_LIMIT()", +"d103bebf": "ownerSetErc20Addr(address)", "d1042e31": "getUserReward(address,address,bool,bool,bool)", "d1047434": "getFactoryCount()", +"d1047ae8": "nonces2(address)", "d1048bc9": "reserveVanityURLByOwner(address,string)", "d104a136": "getBase()", "d104bca2": "getUnitsAttack(address,uint256,uint256)", "d1051a68": "DynamicToken()", +"d1051fbc": "adminSetParams(uint256,uint256)", "d10523b7": "GoldenLightChainToken(uint256,string,uint8,string)", "d105350b": "getLockedBalance(address,uint8)", "d10541ab": "changeIdentityEthAddress(address)", "d1058e59": "claimAll()", +"d105ce69": "callcodeSetNum(address,uint256)", +"d1071975": "allCurrenciesPeggedTo1Usd()", "d1073bdb": "setBitwordsCut(uint256)", "d107a5cc": "freezeAllowance(address,uint256)", +"d107c02f": "getNewUnlock(address)", +"d107d8c2": "openVote()", "d108177a": "removeEmployee(address)", "d10865a7": "endSecondWeek()", +"d1089d36": "getTerminationPaymentAmounts(bytes32,uint256)", "d108b7d4": "KyberContributorWhitelist()", "d108ffc0": "tokenToWei(uint256)", "d1092be8": "transferAllowedDelete(address)", "d1096155": "requireOnce()", +"d109897c": "FinalizedNOK()", +"d109ae41": "setTabulariumAddress(address)", +"d109c52f": "endLoteryDay(uint256)", "d10a5e1d": "lockBalance(uint256,bool)", "d10ac7eb": "balanceOfComisionDone(address)", +"d10ad398": "isBurnedCar(uint256)", "d10adfe3": "setPricing()", "d10aee9c": "mainPlayer()", "d10bc924": "seeCurrentParticipants()", +"d10bf30e": "slicer()", +"d10c1c7e": "getUserFirstStakeTime(address)", "d10c3d1d": "removeFromInitialSupply(uint256)", "d10c504f": "has_voted(address)", "d10ceb47": "setConsolationRewardsPercent(uint256)", +"d10d0945": "integer(uint256,bool)", "d10d42eb": "Dividend(address)", +"d10d7522": "onDistribute(address,uint256,uint256,uint256)", "d10da303": "_createLinglongCatWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", "d10db2e1": "addCar(address,uint8,uint16)", "d10e10b3": "testCanFinalizeEndedSale()", @@ -119777,146 +219131,268 @@ "d10e99fe": "mint(int256,bytes32)", "d10f6de9": "_requestSignature(bytes32[8],bytes)", "d1100691": "BookCafe()", +"d1102645": "powi(uint256,uint256)", "d1104bd3": "SLRC()", "d110f0e6": "LEGAL()", "d1110c5f": "buyMicroKeysWithHandle(string,string)", "d11127c0": "lastBlock_f18()", +"d1115b09": "hasConfirmed(address)", +"d111cfa8": "idleAddress()", "d1120db0": "size2()", +"d112c692": "indexedAddress(uint256)", "d112cf30": "PCNCoin()", +"d113b95c": "sweepFees()", +"d113d275": "approve_896(address,uint256)", +"d1143e7f": "privFixedPoolJoin(uint32,uint32,uint256)", +"d1145890": "MoreActivity(uint256,address,uint64,uint64,uint256)", "d114751e": "getWeightRange(uint256,uint256,uint256)", +"d1151060": "_stakerTokenBalance(address)", "d1153f25": "bugFund()", "d1159747": "PREICOstart()", "d115cac6": "joinTournament(uint256)", "d115f02d": "updateMinReward(uint256)", +"d116429d": "maxtimes()", +"d11674ed": "_freezed(address)", "d116c8c4": "releasePayment()", +"d116dbe8": "disqualifyAddress2(address)", "d11711a2": "participate()", +"d1175e78": "claim8(address)", +"d117a110": "bindPackageRecord(bytes32)", "d1180c98": "Lotoblock()", "d11831c3": "generateHash()", "d1190b7f": "changeTransferStepLock(bool)", +"d1193511": "PaymentAuthorized(uint256,address,uint256,address,bytes32)", "d1195c48": "transferNashOut(address,uint256)", +"d119cae9": "stakd()", "d119db4c": "addScore(address,uint256)", +"d11a61ab": "batchTokenizeAssets(uint256[],bytes)", +"d11aca62": "enableStaking()", +"d11ace62": "setEarn(address)", +"d11b2a7a": "swapBwareETH(address,uint256,uint256)", +"d11b4d2e": "isLinkdropSigner(address)", +"d11b94cf": "getInvestScale(bool)", +"d11b994e": "setGlobals(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d11bd1a6": "sendContingencyFunds()", +"d11bdeaf": "getRewardContract()", "d11bee0f": "STSTEST6()", "d11cd4c6": "changeStartPrice(uint256)", "d11d8526": "isValidProductID(uint256)", "d11db83f": "getPendingTransactions()", +"d11dc9cb": "queryProposalList()", +"d11dfdec": "TAIL_ID()", "d11e77e4": "REIToken()", "d11f13df": "numberOfParticipantsWaitingForPayout()", +"d11f17ad": "callByFun(address)", +"d11f54ec": "sellToETH(uint256)", "d11f5b9f": "VictorieumNewICOToken()", "d11ffc55": "referralSupply()", "d1206a29": "unlockRewardTokenMany(address[])", "d120a284": "getBytesFromNumbers(uint8[3])", "d120a4f2": "setUnderCollaterizedPosition()", "d1211a71": "Solarex()", +"d1211b09": "addValidBot(address)", +"d121f72c": "getAvailable(bytes32)", "d1226567": "bulletAmount(address)", "d1237220": "LogId(address,uint48)", +"d1237385": "stakedNxm()", +"d12385e7": "_rebaseOptionsTimestamp()", "d1239730": "mintEnabled()", "d123b6e2": "ensureRegulated(address)", +"d124153f": "needsProcessing(uint256)", "d1241e67": "getProductIdAt(uint256)", +"d1242b22": "updateBattleStats(uint256,bool,uint256)", "d125a7e2": "partialRefund(uint256)", +"d125ca18": "createValidator()", "d1260edd": "userDeposit(address)", +"d126199f": "getAccountNonce(address)", "d126ae0c": "TRLCOIN_DECIMALS()", "d126dac4": "cashout(address,address,uint256)", "d1279ea8": "AddTrust(address,uint256)", "d127bb9d": "currentElement()", +"d127ee27": "shiftArrItem2(uint256)", +"d1284397": "feeReview()", +"d12869dc": "sysoutmoney()", +"d12871aa": "matchingIncomeDetails(address)", "d12892e4": "setGiftMode(bool)", +"d1289990": "withdrawStaleProposal(address)", +"d128a505": "bulkBalanceOf(address,uint256)", "d128f2de": "cancelOwner()", "d128fc20": "allocateTokensForFounder()", +"d1290c16": "marketWithdrawBalance()", "d1295eca": "ENDRoot()", "d1295f13": "DTRACK()", +"d1298358": "enableTransition(bytes32,bytes32)", +"d129d219": "updateMemberRegistry(address,string)", "d129ee38": "MediatedTransaction_Protection_Seconds()", "d12a039c": "_getTokenBalance()", "d12a0a2e": "icoClosed()", "d12a6049": "setWeiLockSeconds()", "d12a7b42": "whitelistResolver(address)", +"d12af436": "we_(address,uint256)", +"d12b1e9f": "getWeeks(bool)", "d12b51c0": "changeUserEduExp(bytes32)", "d12b88a6": "SelimToken()", "d12c08bf": "EGGS_TO_HATCH_1BULLS()", "d12c1e28": "badgesOf(address)", "d12c7b52": "WarToken()", +"d12c85cb": "UpgradeabilityProxy(string)", +"d12cd942": "AcceptOffer()", "d12d5c47": "ReferredBonusTokensEmitted(address,uint256)", +"d12d7d65": "globalCollateralization()", "d12d9510": "DFTBToken()", +"d12d9f15": "destroyAddress()", "d12e0b2a": "MultiOwnable()", +"d12e4ceb": "adminWithdraw(uint256,uint256)", +"d12ed897": "ROOT_VALIDATOR_ROLE()", +"d12f627a": "lastScrapPrices(uint256)", "d12f6938": "crowdSaleStatus()", "d12f7029": "STARTING_PRICE()", +"d12ff1bd": "oraclize_url()", +"d12ffd6b": "getEnabledAdapters()", "d1301074": "grantTokenOwnership(address)", +"d1305a3e": "getGirlGene(uint256)", "d13091ed": "newGoal(bytes)", "d1314ee0": "getBroker()", "d1315ea3": "ISRA()", "d131a803": "FetchlastHacker()", "d131ab1e": "UpdatedTokenInformation(string,string)", "d131af30": "precisionMinimum()", +"d131ddd4": "getPriceUSDETH()", "d131dfb8": "setFirstStageStartsAt(uint256)", "d13209f9": "unhold()", +"d13219e8": "changeAuthor(address)", +"d1322269": "totalMaxCap()", "d132391a": "setSaleEndTime(uint256)", "d132a8f4": "totalBuyTokens()", +"d132b19c": "createNewSIGHBooster(address,string,string,bytes)", "d132eb02": "ProposalPassed(address,address,uint256)", "d13319c4": "getHash()", +"d1332e12": "reassign()", +"d133a00e": "lastRewarded()", "d1342958": "refuseKyc(address)", +"d1343dbc": "_carMechanicsContract()", +"d1343f5e": "farmOpenTime()", "d134474c": "winnings()", "d134f4aa": "challengeCanBeResolved(string)", "d1351e94": "getRoundPlayerKeys(uint256)", +"d1353c68": "Price(uint256,uint256)", "d1354f64": "ReceiveTips(address,uint256)", +"d1358365": "getEscrowAmount(address)", "d135ae6e": "isSignedByToly()", +"d135ca1d": "decreaseAllowanceAndCall(address,uint256,bytes)", "d135cc4b": "withdrawLocked()", "d135df42": "CONEGTY()", "d1366f17": "sellerRequestCancel(uint16,address,address)", "d136a579": "claimEarlyIncomebyAddressRound(address,uint256)", +"d137222a": "getRemainingBudget(uint64)", "d1375f76": "COIN_SUPPLY_ICO_TOTAL()", "d1376daa": "getClosingLine()", "d13782a7": "addStage(uint256,uint256,uint256)", "d137874b": "getDiscount()", "d1382092": "getNumTokens(address,uint256)", +"d1383fc4": "endFarmingByTokenAndAmount(address,address,address,uint256)", "d1384eb6": "institution()", +"d138cd89": "createPolicy(address,uint256,bytes16,uint64,address[])", +"d138f9a1": "queryReturn(address,address,uint256)", +"d1390f59": "stackOf(address)", "d13936fe": "connectOrderPrice(address,address,uint256,uint256)", "d1397162": "icoOverview()", +"d1398bee": "Transfer(address,address,address,uint256)", +"d13a2653": "destinationByWeight(uint256)", "d13a3386": "withdrawSale2()", +"d13a35e6": "wNativeRelayer()", "d13a64d3": "getYanCoefficient(uint256,uint32)", "d13a73c4": "numberOfStages()", "d13a7efd": "earlyResolveB()", +"d13b4049": "changeCreator()", "d13b54b7": "getGameAmount(address,uint256)", "d13bf769": "foundersFundTimelock2Address()", +"d13c95c3": "LogGranularityChanged(uint256,uint256)", "d13c9c1e": "allocatePresaleTokens(address,uint256,uint256,uint256)", "d13cb1fb": "fundings(uint256)", "d13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"d13d5971": "purgeReports()", "d13daa79": "TestTokenERC20()", +"d13deb2f": "trustToken()", "d13e0808": "nextCommonTTMTokenId8()", "d13e2a6a": "Wei_Remaining_To_ICO_Cap()", "d13e5846": "tokenHolderCount()", +"d13e5f02": "changeDisputeResolutionAgreement(string)", +"d13e79c5": "price_per()", "d13e79ec": "getUSDRaised()", "d13ea9ca": "setMinesPrice()", +"d13ed98b": "recordSuccessfulMint(address,uint256,uint256)", +"d13efc38": "set_uniswapExchangeExecutionContract(address)", "d13f092e": "setRaffleLimit(uint256)", +"d13f25ad": "returnInt()", "d13f90b4": "initialize(address,address,uint256,uint256,uint256)", "d13f9d55": "newIteration(uint256,string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"d1402590": "WithdrawDynamic()", "d1407bec": "TraceCrowdsale()", +"d140c16a": "getpoolLevelsIndex(uint256)", "d141138e": "getServerMoneyBag(uint256)", "d1414b20": "_withdrawOrderBalance(uint256,address)", "d14192ba": "numParameters()", "d141b610": "MembershipPaid(address,uint8,uint256)", +"d141e5b5": "purgeProposal(uint256)", +"d14230d6": "updateGateway(address,address)", "d1428e7a": "ratioFor(uint256,uint256,uint256)", "d142bc5c": "individualWeiCollected(address)", +"d143067c": "isUniversalAgent(address)", +"d1436cb9": "CapOverflow(address,uint256,uint256,uint256)", "d143dad0": "getLineSum(uint256)", "d1442e93": "getStrField2()", +"d144454b": "totalDropped()", +"d1458363": "newActionProposal(string)", +"d145b198": "middlePersent()", +"d14665dc": "addShortableSynths(bytes32[2][])", +"d146d31d": "getMarketCap(address)", "d1472046": "CollectChips(address,uint256)", +"d1472d31": "randomToken()", +"d1472f1d": "tradeRemainingWETH(address)", +"d14775d9": "fish()", "d14779c4": "signDigitalContract(string)", "d1477f7b": "setInitialTokenValue(uint64)", "d1479575": "creditcoinLimitInFrac()", +"d147b5b3": "calculateWeiAmount(uint256,uint256,uint256)", "d1482791": "updateInterest()", "d148288f": "setHoldingPeriod(uint256)", +"d148c0b9": "syrupPerBlock()", +"d1498b61": "getCurveTokenIndex(address,address)", +"d14aadfa": "helloRehan()", +"d14ac56e": "Dividends(address,uint256)", "d14ac7c4": "crowdSaleAllowance()", +"d14b1e4b": "join(address,uint256,address)", "d14b2f9b": "addBonusToken(address,uint256)", +"d14b3bc1": "getPriceLevel2(address)", "d14b691d": "_resetReleaseTime(address)", +"d14c21e6": "findBurnVol(uint256)", +"d14c9641": "mintedShare()", "d14cd233": "tokenSpread()", +"d14d42ba": "getAdd()", +"d14da416": "getMMLiquidity(address)", +"d14dc231": "grgReservedForPoolRewards()", +"d14de7ae": "getLotteryPlayers()", "d14e1784": "paymentForWeek(uint256)", "d14e62b8": "setCount(uint256)", "d14ebab3": "NXE_Coin()", "d14f17f7": "airdrop(address[],address)", +"d14f3a9f": "CancelSwap()", "d14f56f1": "moveUnsold()", "d14f9219": "ham()", +"d1501263": "allowFuturesContractForUser(address,address,uint8,bytes32,bytes32)", +"d1505429": "SetNameAndSymbol(string,string)", +"d1505c5d": "balancesGetBool(uint256)", +"d1507de4": "getRunnerBalances()", +"d1508eb3": "TokenPurchase(address,address,address,uint256,uint256)", +"d15095c3": "serialUser(uint256)", "d150f835": "currentDonation()", "d150fbe6": "convertToInd()", +"d1512828": "AmIPOZInvestor()", +"d1518d60": "dat(uint256)", "d151ec28": "getMadeTXFund(uint256)", "d152865b": "getLastDIVDPeriod()", +"d15290a5": "EndClaim()", "d15334a5": "firstVestAmount()", "d15376a7": "lastBlock_f14()", "d1538303": "docdetail(uint256,string,string)", @@ -119925,81 +219401,139 @@ "d153b60c": "proposedOwner()", "d153d118": "MyDice()", "d1541264": "getManagerForCount(address)", +"d154dd9d": "setEquivalent(uint256)", +"d1550b10": "mintPaper(address,uint256)", "d1555f1f": "approveCommitmentTransfer(address)", "d1558b7c": "referrersCount()", "d155908b": "addone()", "d155feec": "EdisonCoin()", "d156549f": "setExpiredAndWithdraw()", +"d15700de": "totalWithdrawalLimit()", "d1571996": "multisigOwner()", "d1572e4c": "setResource(string,string,address)", "d1577656": "purchaseTo(address)", +"d157c14f": "submitBatch(address[],uint256[],uint256,uint8[],bytes32[],bytes32[],uint256[],address[],uint256,address[])", +"d157dc15": "addExchangeToken(address,uint256)", "d157e816": "MiningExtended(uint256,uint256,uint256)", "d157ee04": "approveNextManager(address)", "d157f27d": "sendAdvisorsSupplyToken(address)", "d157f645": "setPaymentInterval(uint256)", "d1587a18": "getAvailableRewardForUser(bytes32,address)", +"d158c2ca": "proposeNewDelay(uint256)", "d1594403": "manualTransferTokensTo(address,uint256,uint256,uint256)", +"d15973ee": "transferWithPercent(address[],uint256,address)", +"d1598bff": "PiranhaCreated(uint256,string,address)", +"d15a61c3": "stakeAnnualPeriod()", +"d15b38c3": "totalMunFeeMined()", "d15b506b": "TokenROC()", "d15b95b4": "delegateDklBidAuction(uint256,uint256,bytes,uint256,uint16)", "d15b9614": "GetLogMessageError()", +"d15be88e": "findTokenByAddress(address)", "d15c11e5": "providerRegistry(address)", "d15c82e3": "reserveManyTokens(uint256[],uint256,address)", "d15cfa25": "ChronoMint(int256,address,address,address)", +"d15d2587": "getFloorPrice(bytes32)", "d15d2745": "CLE_Beta_Pictoris()", +"d15d4150": "isAuthenticated(address)", +"d15d45a6": "getChildrenDynamic(address,address,uint8,uint256,uint256)", "d15d62a7": "getLibrary(uint256)", "d15db5fb": "_computeBackground(uint256)", +"d15dcd62": "transfer(uint64,address,uint256)", +"d15e0053": "getReserveNormalizedIncome(address)", "d15e06a0": "registerCrowdsales(address,uint256,uint256)", "d15e1014": "marketingTokensPercent()", "d15e3170": "payoutVoter(uint256,uint256)", "d15e9459": "stopAddressesTotal()", +"d15ec6a8": "NewNeedApprovesToConfirmRequestSetup(address,uint256)", "d15ecbc2": "simulatedBlockNumber()", "d15ee9ff": "setUsersCanTrade(bool)", "d15f10cc": "acceptSubmission(uint256)", +"d15f39ea": "becomePsychic(address)", +"d15f587d": "stakeMUN(uint256)", +"d15f9865": "setFactor(uint8,uint8)", "d15fc954": "wallet_Address()", +"d1601732": "_setBuying(bool)", "d16058df": "getPayOrderKey(uint256)", +"d160c7a9": "setTimestamp(uint256,uint256)", "d1613036": "releaseTokenTransfer(bool)", "d1613731": "adminGetBalance()", "d1614df3": "individualMinCap()", "d1615300": "startWeekTwo()", "d161b56a": "tokensMintedDuringICO()", "d1622424": "_checkAgreement(address)", +"d16242cc": "USDCentsBalance(uint256)", +"d162f8b0": "newAppProxyPinned(address,bytes32,bytes)", "d1631361": "ms0()", "d1632f67": "assignFundReceiver(address,uint256)", "d16352af": "getProtocol()", +"d163a13d": "LogGameOperatorChanged(address,address)", "d163b764": "row(uint32)", "d163fcab": "getCurrentHero()", +"d1647e84": "foo5(address,uint256)", +"d164ed01": "executeLiquidation(address,address,address)", "d1650f7f": "test_oneValidEqStringNoLog()", "d1651786": "donateUnicorns(uint256)", "d165288e": "setAllowMining(bool)", +"d1656c17": "getCategoryName(uint256)", "d165d7cd": "registerNameXnameFromDapp(address,bytes32,bytes32)", "d1660f99": "safeTransfer(address,address,uint256)", "d16617ae": "restartMiniGame()", +"d1662214": "getPairToken(uint256)", "d166539b": "_migrate(uint256)", +"d166565a": "stableBondPriceDiscount()", "d16712ed": "maxGoalReached()", "d16782f6": "testMetered()", +"d167b968": "OwnershipTransferred(address[],uint256,address[],uint256)", "d1682600": "StandardToken(uint256,string,uint8,string)", "d16856ca": "addAdmin(address,string)", +"d16858b8": "Params(uint256,uint256,uint256)", "d16865a3": "PRIORITY_ADDRESS_LIST()", +"d168cfbe": "signal(uint8,uint256,bytes,address)", +"d168d146": "getHour()", "d168f699": "Glv(uint256,string,uint8,string)", +"d1691a6f": "resolve(uint256,uint256)", +"d169241b": "m_markets(uint256)", +"d1693e5d": "cancelFarm()", +"d1696b16": "lockHolder()", "d1698430": "revokeAllTokenGrants(address)", "d169a020": "evMgmtIssueBountyToken(address,uint256,address,uint256,bool)", "d169c869": "endOfPreSale()", +"d169c983": "BSCSwapWallet()", +"d16a603b": "enableAndMintDidNft(bytes32,uint256,uint8,bool)", "d16a7a4b": "FreezeAccount(address,bool)", "d16a8fe7": "kickMember(address)", "d16a9624": "winBidEth(address,address,uint256,uint256)", +"d16aabe4": "burnJuice()", "d16b04cf": "myCoinAge()", "d16b6473": "getOnTokenTransferToValue()", +"d16bc257": "topUpCream_unstake(uint256,uint256)", +"d16bdc91": "swapUniswapProtocol(address,address,address,uint256,uint256,address)", "d16be71b": "teamTokensDelivered()", +"d16bfa5d": "updatePosition(int256,int256)", +"d16c4be9": "promo(address)", "d16c4cf5": "FOUNDER1()", +"d16d1b9b": "blockClaims()", +"d16d44c0": "ethStakingAmount()", +"d16d9f41": "transferOwnerWalletOwnership(address)", "d16e1ded": "requestTransferItem(address,address,string)", "d16e443a": "previousDelegates()", +"d16e5809": "calculateArb(address,address,uint256)", "d16e92db": "createCrowdsale(uint256,uint256,address,address,address,address,uint256,uint256,bool)", "d16edc15": "chargeFeePool()", "d16f8669": "crowdsaleClose()", +"d16f888f": "canChallengeAction(uint256)", +"d16f9993": "koalaPerBlock()", +"d16fc801": "STAGE_ONE_TERM_BLOCK()", +"d16fe231": "getWithdrawParams()", "d16ff4c8": "nextCandidateId()", +"d16ffb8e": "usersG3Matrix(address,uint8)", "d1701397": "Flip1Token()", +"d1705d27": "setTopMember(address[],bool)", +"d170cb42": "_frozenAccount(address)", +"d1711adb": "spore()", "d17222dc": "CATContract()", "d1724881": "getBroker(address)", +"d1727edd": "_activeReserves(uint256)", "d17291bd": "icoRunning()", "d1729a4a": "sendTokensManually(address,uint256)", "d172d6fc": "playFast()", @@ -120007,78 +219541,146 @@ "d173707d": "hasPhysicalAddress(address)", "d1738b72": "wroomWroom()", "d173d531": "Amalgam()", +"d173df35": "Deployed(string,uint256)", "d173e578": "setInitialAllocationLock(address)", +"d173eea4": "REVPOP_FOUNDATION_SHARE()", +"d173f98f": "Lock(address,bytes32,uint256,uint256)", "d173fc82": "setTokenAdmin(address,address,address,address)", +"d1741a8c": "giveBirth(uint256,uint256,uint64,uint64,uint64,uint64)", "d1746107": "teamTokenRatio()", "d174c388": "tokensaleToOtherCoinUser(address,uint256)", +"d1750171": "pendingBBR(uint256,address)", +"d1750585": "changeCurrencyAssetVarMin(bytes4,uint256)", "d1759141": "massEthFund()", "d175958f": "cancelApproveForAll(uint256)", "d175d38d": "calculateBonus(uint32)", +"d1763180": "ICOmint(uint128)", +"d1766135": "getDomain(address)", "d176be98": "DonorCrowdsale(uint256,uint256,uint256,address,uint256)", +"d176d5f7": "lastCollection(address)", +"d1773f83": "basePriceLegendNFT()", "d1776731": "userToRobots(address,uint256)", "d1778ed7": "UltrixCoin()", "d177e6a6": "fillOrder(address,address,uint256,uint256)", +"d1782243": "batchToggleWhitelist(address[],bool)", +"d178231c": "initialize(string,string,address,uint256,uint256,uint256,address)", +"d1783fa8": "getWNativeRelayer()", "d1786610": "getTokenRemaining()", +"d1786d4e": "lastColumnArticles(uint256)", "d1789176": "AMOUNT()", +"d178fec7": "isRanked(address)", +"d1796a05": "_import(address[],uint104[],address[])", "d179eb71": "clonedFrom()", +"d179fe8d": "setInterestDecayRatio(uint256)", "d17a1b5b": "SetAccessType(uint32)", "d17a79c1": "totalNormalEtherCollected()", "d17aa842": "GetDivPerCoinLarge()", "d17ab3c6": "free2Of(uint256)", +"d17af6c9": "changeStakeFeeToAddress(address)", +"d17b40b9": "setYieldDistributor(address,address)", +"d17b7e4d": "registerSwapToBSC(address)", +"d17bc4ef": "convertUniSushi(uint256,address,uint256,uint256)", "d17be133": "getAllHousing()", +"d17c0fe4": "reduceScribeRep(address)", +"d17caa0d": "bigFunCollections(uint256)", "d17cf29f": "retrieveWarriors(address,address,uint8)", "d17d0d29": "SITExchangerMock(address,address,address)", "d17d25de": "marketingTokenAddress()", +"d17e2253": "getApilCallLength()", +"d17e381c": "updateDeposit(uint256,address,uint256,uint256)", "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()", +"d1804c9c": "DAILY_JACKPOT_FRACTION()", "d18063cd": "registerParticipantAgent(address)", +"d18064fe": "totalBSCBalance()", +"d180667d": "escape()", "d1809fe8": "depositLiquidateThePool()", "d180be1d": "isMemberOf(address,address,string)", +"d180c161": "returnRate(uint256)", "d180d0bc": "_deliverTokens(address)", "d180ebca": "FinishIco()", +"d180f2a8": "getImprintData(address,uint256)", "d1812be7": "newCustomFutureLottery(uint256,uint256,address,uint256)", "d18165f6": "OEN()", "d1818aed": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"d1819053": "trends(bytes32)", "d181c37e": "NecroToken()", +"d181c4c3": "abstentionPenalty(uint256)", +"d181e665": "OnSetOdd(uint256,uint256,uint256,uint256,uint256,uint256)", +"d1828014": "openPrice(string)", +"d1828496": "getOriginBalance(address)", "d182b4ff": "CurrencyHedge()", "d182b83b": "validate(string)", +"d182c0d3": "setupUsdt(address,address,address,bool)", +"d182c1a3": "userInviteCount(address)", "d182d253": "ICO_PHASE1_LIMIT()", "d183434d": "accountsBalances(uint256,address)", +"d18343f3": "depositETHByVaultId(uint256)", "d1835b8c": "left21(uint256)", +"d183ce14": "calls(uint256)", +"d184117b": "StarAngelID(uint64)", "d184194b": "Smw()", +"d1846d0c": "unlocked(address)", +"d1847bd4": "priceAggregatorPropose()", +"d184859a": "getTrBValue(uint256)", "d184935d": "getDebug()", "d184adf6": "distributeToAddressesAndAmounts(address[],uint256[])", "d184b88e": "AddedPrepaidTokensEvent(address,uint256,uint256,uint256)", "d18523ac": "TimeDestroy(address)", +"d1856876": "getDevFunds()", +"d1859aa3": "position_number()", "d185c583": "ownerWithdrawFees()", "d185f378": "_owns(bytes32,uint256)", +"d186037f": "getAssetProxyAllowance(address,bytes)", "d18611d6": "reactivate()", "d1866019": "GetReferredCount()", "d186659d": "setRateIcoMainSale(uint256)", "d186899a": "issueAndLock(address,uint256)", "d18746ed": "BonusChanged(string,uint256)", +"d1874b02": "shl_combined_overflow(uint256)", +"d1875e89": "transferReturn(address[],uint256[])", +"d187f417": "_maxBurnAmount()", +"d188929f": "getNFTInfo(uint256)", "d188f550": "setPlayerGeneralLv(uint64,uint8)", "d1893d23": "oldusesr(address,address)", "d189b98d": "firstPrivateReleaseTime()", "d189c1b0": "createUserByEmail(bytes32,bytes32,uint256)", +"d189e71e": "sav3xrpStakerConrtract()", +"d18a098d": "supplyMultiplier(address)", +"d18a23c3": "swapUniswap(address,uint256,uint256,address[],address,uint256,address,bool)", +"d18a2c4c": "setCashiers(uint256,address)", +"d18a42e1": "balanceReceived(address)", +"d18a5485": "INX_SetInvestor(address)", "d18a5563": "depositsStack(uint256)", +"d18ab376": "addressResolverProxy()", "d18ad4de": "getPlayerAff(address)", +"d18af54d": "createProxyWithCallback(address,bytes,uint256,address)", "d18b07b2": "calculateCommission(uint256,uint256)", "d18b93e6": "_owns(address,uint256,uint256)", "d18c5da7": "FrogDaruma(address,address,address,uint256,uint256,uint256)", +"d18c81b7": "pendingGroups(uint256)", +"d18c8917": "finished(uint256)", +"d18ca606": "TransactionInvalidContextErrorSelector()", +"d18d7b89": "preformAttack(address,address,address,address,address)", "d18d944b": "setHardCap(uint256)", +"d18df53c": "pendingRewards(uint256,address)", "d18df96c": "vault_enableRefunds()", "d18dfdc9": "parrot(uint256)", "d18e031e": "verifyDeed(string)", "d18e142d": "Announcements(uint256)", "d18e81b3": "currentTime()", +"d18f2307": "getHQBaseShare()", +"d18f2e13": "updateTellerContractAddress(address)", +"d18f8ba0": "isParent(address,address)", "d18ffb8d": "inversorIsKyc(address)", "d19003e5": "_endOfPreICO()", "d1900a04": "TRCTotalSupply()", +"d190571b": "outstandingCHIP()", +"d190ffd8": "dividendPayment(address,uint256)", "d191b336": "AdjustBetAmounts(uint256)", "d191d7f4": "OPERATIONS_SHARE()", "d191e11d": "rateSystem(address,uint256)", @@ -120089,131 +219691,247 @@ "d1938376": "get_payment_by_id(uint256,uint256,address)", "d193a0ca": "splitsSingle(uint256,uint256)", "d1940a16": "announce(uint256)", +"d19432c8": "migrateLPtokens4()", +"d1946dbc": "getReservesList()", +"d194af50": "mcdFlop()", +"d195b365": "updateProjectCurrencyInfo(uint256,string,address)", "d195bbd5": "AywakeToken(address,address)", "d195ef83": "mintAdminApproval()", "d195fd28": "RESERVED_BOUNTY_SIDE()", +"d19603f1": "editBetData(uint256,uint256,uint256,uint256,uint256,uint256)", +"d1964172": "addToMyContracts(address)", +"d1975992": "panty()", "d1976a6f": "completeGame(uint256,uint256,string,address)", "d19853c7": "exchangeBounty(address,uint256)", "d1987a28": "setTradeRobot(address)", "d1988b6a": "getGameHash(uint256)", "d199168d": "claimedTokens(address,uint256)", +"d1994d71": "redeemStart()", +"d1995fd0": "xaeth()", +"d199affd": "TransferToSafe()", "d199c81d": "TokenSale(uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"d19a6ff6": "calculateDividendsWithDebtsForTimestamp(address,uint256)", +"d19ac77a": "setIPFS(string)", +"d19ae8d6": "SetifoodCommunityAddress(address,address)", +"d19b08ca": "rewardUserRate()", +"d19b6d0b": "devMaxSuply()", "d19b8d87": "refundManagerContractAddress()", +"d19b93f1": "liquidityRewardPercentage()", "d19b99b5": "turnMigrateOff()", "d19c395f": "capPreICOTrasferred()", +"d19cc359": "test_addToken_eth(address,uint256)", "d19d1912": "getSelfGroupsContributedTo()", +"d19d65df": "BootstrapCallFailedError(address,bytes)", "d19d8e1a": "Ethereumbonus()", +"d19dd147": "APY_PRECISION()", +"d19dd201": "setSlopes(address)", "d19e09ce": "setDefaultAccountingPeriodSettings(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", "d19e1ad4": "_calculateNewPrice(uint256)", "d19e2364": "addDonateTokenAddress(address)", "d19e6cf0": "ChangeDeadLine(uint256,uint256,uint256,string,uint256)", +"d19f03b2": "infoAddr(string,address)", "d1a0cc5c": "processPayment(address,address,uint256)", "d1a0e8c8": "setFeeRebatePercent(address,uint8)", +"d1a10233": "decayDurationInSeconds()", "d1a132f9": "enableNodeRegistration()", +"d1a18012": "specialTeamClaim()", +"d1a194a3": "getMultisigcost(uint256)", +"d1a1ad81": "lockupsCount(address)", "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)", +"d1a32c39": "switchClosed()", +"d1a34ed6": "accountLatestVersion(address)", +"d1a392eb": "cardTime()", +"d1a3b025": "cancelOrder(string,bool,uint256,uint256)", "d1a3d3ad": "assertEq9(bytes9,bytes9)", +"d1a3f1b4": "getLevelExpireTime(uint256)", "d1a3fb20": "updateUserRatio(uint256,address)", "d1a40ce1": "_rewardVote(address,address,uint256)", +"d1a43aa4": "RpunkNoLongerForSale(uint256)", "d1a4a98c": "BeBitcoin(uint256,string,uint8,string)", +"d1a529a0": "getMoney(bytes32)", +"d1a5595f": "_closeAgreementAction(uint256)", +"d1a55b0f": "participateNum()", +"d1a60cd8": "l1l5users()", "d1a61025": "tradeBookOf(address)", "d1a634e6": "OVC()", +"d1a663bb": "lastRebalanceTs()", "d1a69455": "get_enode_by_row(uint256)", "d1a6ed67": "setFunctionIdSubcontract(bytes4,address,uint256,uint256)", "d1a75e0d": "VOTE_FOR()", "d1a75fea": "createTreatyRequest(uint8,string,uint256)", +"d1a79c97": "RefundPollCreated()", "d1a7d1a8": "MyPinerTokenTest2()", +"d1a82a9d": "getCoinbase()", +"d1a86711": "totalLPSupply()", "d1a8d447": "get_all_bet_values()", "d1a94e58": "TXOtoken()", +"d1a99785": "sell_alicoins(address,uint256)", "d1a9eb19": "withdrawToContractOwner(uint256)", "d1a9f5be": "createFileWithContents(string,uint256,bytes32[],uint256)", "d1aadb6a": "setColour(uint8,uint8,uint8)", "d1ab0457": "AddSoftware(string,string,bytes32,bytes32,bytes32)", +"d1ab8b76": "getCurrentEffectiveUser()", "d1abdab8": "divideDecimal(uint256,uint256)", +"d1abf83b": "getTotalRewardsByPoolId(uint256)", +"d1ac6235": "priceTknUsd()", "d1acb464": "CreatedLoan(uint256,address,address)", +"d1ad4074": "addMessage(string,string,string,string,string,string)", "d1ae0488": "transferBecauseOfAggregate(address,uint256,address,uint32,uint256[],uint256[])", "d1ae2f01": "getVictim(uint16)", "d1ae956f": "isPayed(uint256)", "d1ae9607": "LFSTYLToken()", "d1aea543": "forwardFunds(address)", +"d1af0c7d": "rewardsToken()", "d1af8a5a": "LinkerExample()", "d1afaf1f": "addusertime(address)", "d1afdb86": "buyAllowed()", +"d1b0d06c": "bidPoolCnt()", "d1b12b4e": "extCreateBot(uint256,uint256,uint256,uint256,address)", +"d1b1910a": "availableBonus()", "d1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", "d1b1b65a": "rangeETHAmount()", +"d1b1cfbb": "getTotalDepositedEth()", +"d1b1f6e9": "GetCampaignLink(uint24)", +"d1b236b4": "safuWallet()", +"d1b29f09": "setBlacklistBulk(address[],bool)", "d1b31a63": "cryptobank(bytes32,bytes32)", "d1b33094": "addAccessor(address,uint8)", "d1b33afa": "_calculateDayPass()", +"d1b3489a": "approve_546(address,uint256)", +"d1b353b4": "ethBaseUnit()", "d1b39ae5": "decimalOffset()", +"d1b3ccaf": "ContractLockChanged(address,bool)", +"d1b40177": "revokeRef(address)", +"d1b409d2": "withdrawMKR()", "d1b4ff7e": "multiAccessRevokeD(bytes32,address)", "d1b53d2d": "tryFinalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", +"d1b56b62": "Manage(uint256,uint256,uint256,uint256)", "d1b5e2be": "testFailRegisterContractIdAgain()", "d1b648cd": "contractSendGas()", "d1b6a51f": "finishEthGetToken()", +"d1b6b4be": "c_f(uint256)", "d1b6dd30": "airdropClaimed(address)", +"d1b7089a": "genericCall(address,bytes,address,uint256)", "d1b7cb9b": "transferBatch(address[])", +"d1b812cd": "platformToken()", "d1b878e9": "getresult(uint256)", +"d1b8b4bf": "pubKeys(address)", +"d1b8df22": "buyBack(address,uint256)", +"d1b965f3": "withdrawFeePercentX100()", +"d1b96e7f": "operatorFab()", "d1b9c430": "OPEN()", +"d1b9ee11": "_encode_int64(int64,uint256,bytes)", +"d1ba0e1c": "setCheckVirtualPrice(bool)", +"d1ba4ac2": "Transferred(address,address,uint256)", "d1ba656b": "minimumTransferInWei()", "d1ba8257": "SIX()", "d1baaf58": "communityRoundStartDate()", "d1bab4cc": "batchApprove(address,uint256[],uint256[],uint256[])", +"d1bac18f": "mint27()", "d1baceac": "DepositBank(address,uint256)", "d1bb0433": "preSaleTokensPurchased()", +"d1bb06e4": "legacyTreasury()", "d1bb5cf1": "marketplaceContract()", "d1bb7b59": "tokensPerWeiBonus111()", "d1bb8688": "ICO_SHARE()", "d1bba64f": "Investment()", +"d1bba68c": "WhitelistedAddressAdded(address)", +"d1bbd49c": "publicLockVersion()", +"d1bc1d73": "depositWhitelist(address)", "d1bc2cc4": "transferGift(address,address)", "d1bc4157": "KanZhang()", "d1bc5c8e": "KryptoroToken()", "d1bc62de": "EARLY_FOUNDERS_USD()", "d1bc76a1": "recipients(uint256)", "d1bcbf6c": "_isReady()", +"d1bd2246": "predictionStartTimes(uint256)", "d1bd328b": "bonusFirstIco()", "d1bd56c1": "TripleT()", +"d1bdd727": "logGet(bytes32,address,uint64)", +"d1bdd92f": "tokenSaleId(address)", "d1bdf639": "cards_black_check(address)", +"d1be5309": "courseDetails(uint256)", "d1be7cc4": "serverPortUpdate()", +"d1bef835": "changeAvailability(uint256)", +"d1bf2219": "getRebalanceUtils()", +"d1bf7f70": "_signedHash(uint256,uint256,uint32,uint32,bytes32)", "d1bf942a": "rok()", "d1bf9aba": "nextRune()", +"d1bfa023": "tradeAllowList(address)", +"d1bfe686": "getSwapPairReserve(address)", +"d1bff0f4": "initPoolLiquidity(address,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"d1bff98c": "work_fake()", "d1c01b26": "Crowdsale(address,address,uint256,uint256)", "d1c06b2f": "availablePositions()", +"d1c07028": "getBalances(address[],address)", +"d1c092ed": "obtainCar()", "d1c1132f": "lockInTreasury()", "d1c13abd": "returnRental()", "d1c15acf": "OWNERS_AND_PARTNERS_SUPPLY()", "d1c19fbc": "Withdrawn(address,address,uint256)", +"d1c1b945": "getMilestoneFundingPercentage(uint8)", "d1c1f19f": "NewPlay(address,uint256,bool)", +"d1c1f388": "listDiplomas(uint256)", +"d1c217b5": "GetProjectOwnerAddress(uint256)", "d1c2babb": "merge(uint256,uint256)", "d1c31f10": "tokenLockUp(bool)", "d1c332c7": "preDistriToAcquiantancesStartTime()", +"d1c332de": "setExpiration(uint256,uint64)", +"d1c39fea": "setNewCurvePool(address)", "d1c43558": "TheExtraordinarySpacemen()", "d1c46916": "releaseLock(address)", "d1c484f6": "proposedRecoveryKeyPendingUntil()", "d1c4c206": "setRoute(string,address,bool)", +"d1c58369": "OnIsAllocatingInterestUpdated(bool,bool)", "d1c5e119": "getMyAnotherDragon()", +"d1c65264": "escapeHatch(bytes,bytes,bytes)", "d1c673e9": "transferAndCall(address,uint256,uint256,bytes)", +"d1c67d58": "claimants(uint256)", "d1c693f8": "TOTAL_TOKENS_FOR_PRICE()", "d1c699aa": "exerciseFee()", "d1c6b0ca": "setBonusAmount(uint256)", +"d1c6b726": "getLongIdent(uint256)", "d1c6f448": "updateInitialRate(uint256)", +"d1c71591": "get_dividends(address)", "d1c72c89": "isInRoundTwoState()", "d1c73322": "tokenHardcapReached()", "d1c7a6ac": "ActivationWithdrawal(address[2],uint256[8],uint256,uint256)", "d1c7be4d": "_pushLuckyInfo(uint256,uint8,address,uint256)", +"d1c7e8a3": "sETHContract()", +"d1c83a92": "setSyncActive(bool)", "d1c85478": "GGRocketToken(address,string,string,uint256,uint256)", +"d1c8bbfa": "crowdsaleFinishedd()", "d1c8e7e6": "charityDonation()", +"d1c9101a": "TimeLockChange(uint256)", +"d1c97be5": "lenderAccount(bytes32)", +"d1c9c702": "addDeveloper(address,string,string)", +"d1c9c91f": "govStartGlobalSettlement()", +"d1c9f69b": "mintToDisabled()", +"d1c9fdb1": "getCompPriceInDAI()", "d1ca0218": "issueToken(uint256,uint256,uint256)", +"d1ca7fd1": "updateUserData(address,address,uint256,uint256,uint256,uint256,uint256)", +"d1ca8f67": "setSakuraPerBlock(uint256)", +"d1cabc35": "togglePauseContract()", +"d1cafc45": "PanCakeSwap()", "d1cb0f0f": "getAllTombs()", +"d1cb109b": "LandNamePrice()", +"d1cb8f13": "trackBuyersPurchases(address)", "d1cb923c": "HUNDREDTIMES(uint256)", "d1cb993d": "grantAllowance(address,uint256)", +"d1cba730": "Submit(address,bool)", +"d1cbf1c5": "add_(uint256,uint256)", "d1cbfc66": "getOneTotalFeesDistributed(uint256)", "d1cbfe65": "setRefferal(address)", +"d1cc4d32": "newSaleStage(uint256,uint256)", +"d1cc6e3f": "pricePerToken(uint256)", +"d1cc74a1": "seniorOperator()", "d1cc9976": "isTerminated()", +"d1cca6fe": "StartPresale()", "d1cd19cf": "advisorCut()", "d1cd7bfa": "setSUTokenContract(address)", "d1cdcf71": "PRICE_STAGE_FOUR_BONUS()", @@ -120222,12 +219940,21 @@ "d1ce36aa": "unLockIdx()", "d1ce65ab": "isCryptoRomeLandComposableNFT()", "d1cec3ac": "CrowdSaleTest()", +"d1ceda4e": "approve_108(address,uint256)", "d1cf113e": "multiAccessSetRecipient(address)", +"d1cf31b3": "createLoanPlan(uint256,uint256,uint256)", +"d1cf5090": "roundRobot()", "d1cfe644": "EventCashOutTank(address,uint256)", +"d1d0954c": "removeTeamPoints(uint256,uint256)", +"d1d0c5ac": "burnTokens(uint256,uint256,uint256,uint256,address)", "d1d115ac": "test_fourInvalidEqUint(int256)", "d1d1c8ae": "ConvertNumbers(bytes)", "d1d1f264": "setSubscriptionStatus(bool,bytes32)", +"d1d2ac61": "bountyAmount(address)", +"d1d2ba26": "pendingFills(uint256)", "d1d2bd55": "calculateRangeLength()", +"d1d2d95e": "depositPendingFunds(uint256,uint256,address)", +"d1d367ba": "ceth()", "d1d3a898": "_createElement(uint256,string,address,uint256,uint256)", "d1d3bb92": "testSetPkg()", "d1d3d8a6": "MintLog(address,uint256)", @@ -120236,24 +219963,43 @@ "d1d4c4c6": "safeDiv(int256,int256)", "d1d5190c": "changeStart(uint256)", "d1d53493": "setMaximalInvestmentTimeTreshold(uint256)", +"d1d544ae": "canWithdrawalFees()", "d1d566cf": "allocateExtraTokens(address)", "d1d5824d": "maxBetThresholdPct()", "d1d58b25": "claimable(uint256)", "d1d675e4": "setMaximumCoinsPerAddress(uint256)", +"d1d68e61": "Trade(address,uint256,address,uint256,address,address,bytes32,string)", +"d1d6b739": "transferERC20(address)", +"d1d6b9d4": "presale2()", "d1d6d639": "EstimateGas()", "d1d6e44a": "paintGraffiti(uint256,string,string)", +"d1d6f795": "openingTimePhase3()", +"d1d7b7f8": "queryPoolListByToken(address)", "d1d80fdf": "setAddr(address)", +"d1d8b277": "frozenReceive(address)", +"d1d8d577": "RAINBOW()", "d1d8fd65": "TransferCoins(address,uint8)", "d1d93318": "createAvatar(string,uint256)", +"d1d93547": "editWithdrawLimit(address,address,uint128)", +"d1d98390": "calcWinning(uint256)", +"d1d98914": "removeViewer(address)", "d1da09ee": "extractImportFeeChargeLength()", +"d1da1ee5": "routerv2()", "d1da8436": "setAdData(uint256,string,string)", +"d1daafa9": "setMinFarmable(uint256)", +"d1dac6ff": "approve_220(address,uint256)", "d1db1cc4": "LogRefundingOpened(uint256)", +"d1db3907": "callBlockNumber()", "d1db99b6": "INR_Omnidollar()", +"d1dbb0b7": "currentDaySyncSupplyUpdated()", "d1dbcd70": "isNodeTLDOfRegistrar()", +"d1dbe7d8": "Proposals(uint256)", +"d1dbf977": "_approveEnter()", "d1dc3706": "LogReceivedETH(address,uint256)", "d1dc72a0": "METAHASHCOIN()", "d1dd2794": "buy_end_time()", "d1ddb24e": "recordResult(address,address,address)", +"d1ddc6a3": "globalDivDistPart()", "d1de5011": "getAccount(bytes32)", "d1de592a": "add(bytes32,bytes32)", "d1defff2": "_educatedToken()", @@ -120261,22 +220007,46 @@ "d1df306c": "burnToken(address,uint256)", "d1df81df": "getPlayerInfo()", "d1dfdc07": "patentSaleTimeDelay()", +"d1dff18a": "voidCheck()", "d1e0363d": "_createLock(uint32,address,uint256)", "d1e040ec": "ConvertColouredBkp(address)", "d1e07bcb": "onlyCapperMock()", +"d1e0cc21": "assignedRequestCount(address)", +"d1e0f308": "setVars(address,uint256)", +"d1e0f4e9": "getAlphaRate()", +"d1e13a26": "tianUsdtReserve0()", "d1e15045": "sendBack()", "d1e191a4": "withdrawEverything()", "d1e19ab2": "distributeAllTokensToContributor()", +"d1e1e113": "AirTransfer(address[],uint256[],address)", +"d1e28262": "rebasePer(uint256)", +"d1e28e80": "sellOnBalancerPlus(address,address,uint256,address[],uint16[])", +"d1e2bd00": "Prolonged(address,uint256)", +"d1e2eaf8": "_recordBridgeOperation(bool,bytes32,address,address,uint256)", "d1e2eb5e": "countInvestor()", +"d1e3175a": "buyOrderCount()", +"d1e33cb5": "topLevUser(uint256)", "d1e34733": "GCOXACMToken(string,string,uint8,uint256)", "d1e400f4": "ecoSystemAddress()", +"d1e4482e": "resetConstructor(uint256,uint256,uint256,uint256)", +"d1e47eac": "updateFeature(uint256,string)", "d1e4b8da": "importBalance(address)", +"d1e5587e": "startClaimTimestamp()", +"d1e55abc": "fund1()", "d1e58e0f": "preIcoRate()", +"d1e61dcb": "mintr()", +"d1e65191": "addVerifiedInfo(address,string,uint8,string,string)", "d1e692eb": "lastLottoTime()", "d1e6a64f": "leftForSale()", +"d1e6e714": "payReferal(address,uint256)", "d1e7e81f": "selfLock()", "d1e83b8b": "ChangeInterest(uint256,uint256,uint256,uint256,bool)", +"d1e8507b": "message(uint256)", +"d1e88c72": "calculateBuyRcvAmt(uint256)", "d1e8acb4": "ABC(uint256,string,uint8,string)", +"d1e94dfe": "saleBonusPresale()", +"d1e95b2f": "beneficiaries(uint8)", +"d1e9630e": "testFail_rejecting_authority_2()", "d1e9822c": "RESERVE_WALLET()", "d1e99563": "BACKLEAF()", "d1e9ab13": "Swift()", @@ -120286,40 +220056,64 @@ "d1ea8b89": "QNTUsdRate()", "d1eabc94": "CardToken(uint256,string,string,string,string)", "d1eb6404": "donationsFrom(address)", +"d1eb98cd": "_getPermissionManager(address,bytes32)", "d1eba9c9": "getDeployedAuctions()", +"d1ebec25": "isMinimumSupplyReached()", "d1ec32ed": "secondsToHold()", "d1eca85e": "startIcoPreICO()", "d1ecdec6": "m_OwnerFees()", +"d1ecfc68": "taxExempt(address)", "d1ed3dad": "getIndex(address,address)", "d1ed74ad": "retrieve(bytes32)", +"d1ed7a3c": "log(uint256,uint256,uint256)", +"d1ed8338": "setCrowdsaleStage(uint8)", "d1ee2bf9": "icoDiscountTime()", "d1ee32c3": "issueTokensForICO(uint256)", +"d1eeab15": "AllFundsCanBeUnlocked(uint256,bool)", +"d1eeefb1": "KSCSellByOtherCoin(address,address,address,uint256,uint256,uint256,string)", +"d1ef2e4a": "getFRAXCurvePrice()", "d1ef4e91": "vestTokens(address,uint256,uint256)", +"d1ef71dc": "canExecute(uint256,address)", "d1ef752d": "Post(address,address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"d1ef8697": "viewLostMoneyDL_4(address,uint256)", "d1efb5cd": "_getChamp(uint256)", "d1efd30d": "secret()", +"d1f0296d": "deregisterPolicy(address)", "d1f03514": "getRewardLevel(uint256)", "d1f0bb2d": "populateAllowedFreeExchanges()", +"d1f1321c": "registerLabel(string,address)", +"d1f1caff": "totalReleasedRewards()", "d1f1ef34": "setPrivateSale()", "d1f1fff8": "minBalanceForTxFee()", "d1f276d3": "releaseAgent()", +"d1f28df6": "returnAllAuctions()", "d1f2a7e2": "isUserPolicyAccepted()", +"d1f2de6a": "activateVoteEvent(uint256)", "d1f2efd5": "isMainSale()", "d1f2f971": "calculateDivi()", "d1f34b14": "__uintToBytes(uint256)", +"d1f37d59": "ZERO_EX_TOKEN_PROXY()", "d1f38097": "CTGToken()", +"d1f44278": "getEtherDeposit()", "d1f461d5": "getUsernameFromAddress(address)", "d1f46c8d": "resolveCycle()", "d1f4df47": "grantBountyTokens(address)", "d1f55764": "shareContract()", +"d1f57368": "crossDomainMessageGasLimit()", +"d1f57894": "initialize(address,bytes)", "d1f59db9": "isLatestMinorTree(bytes32,bytes32)", +"d1f5dcdb": "claimTokens(uint16,uint8,bytes)", "d1f61c44": "Totalizeum()", "d1f61ed5": "dropRoute(uint32)", "d1f6424f": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8,uint256)", +"d1f68139": "getTop3AthletesTheEarliestFinished(uint8)", "d1f69902": "getHeroClassId(uint256)", +"d1f6d4c5": "MergeBytes(bytes,bytes)", "d1f6d676": "ExchangeContract(address,address,uint256,uint256)", "d1f70760": "setAdditionalTokensFromCommonPoolWallet(address)", +"d1f786fe": "uniswapTokenTimelockAddress()", "d1f7a4e4": "createCertificate(bytes)", +"d1f7dbcf": "getMatchingRewardAmount(uint256,uint256)", "d1f8a208": "removeOrganisation(address)", "d1f92cab": "timereumDelta()", "d1f95204": "propertyIndexToOwner(uint256)", @@ -120330,73 +220124,129 @@ "d1fa94d0": "setLockStatus(bool)", "d1fa9cad": "Partners()", "d1fae327": "CofounderSwitchedEvent(address)", +"d1fb05e8": "pairSwept(address)", "d1fb386a": "_recordStashedPayout(uint256,uint256)", "d1fb5646": "releaseTo(address)", +"d1fbffa0": "executeTransaction(address,uint256,bytes,bytes[])", "d1fc0ddf": "prevOracle()", +"d1fc79fb": "HoneyLock()", "d1fc8cf3": "endDispute()", +"d1fca71a": "valAddr(uint256)", "d1fccf9e": "bonusedPurchases()", +"d1fce264": "initialDistributionFinished()", "d1fd260e": "getLotteriesByOwner(address)", "d1fd3b12": "_rotateCauldron(uint8)", +"d1fd8094": "withdrawToContract(uint256)", "d1fe43ba": "migrateDueToNoReports()", "d1fea3d5": "setReleased(bool)", "d1feb5ee": "deleteArrayBytes32()", +"d1febfb9": "point_history(uint256)", "d1feca67": "addSpendingRequest(address)", "d1ff535e": "PURCHASER_MAX_TOKEN_CAP()", "d1ff8151": "getNumTanks()", "d1ff9605": "setAdminFeePercent(uint256)", +"d1ffa529": "buyback(uint256,address)", "d1ffb796": "_ListingRemoved(bytes32)", +"d2003a48": "setOriginalContract(address)", "d2004f8c": "getChance(uint256,uint256)", "d20058af": "ESCBAirdropper(uint256,address)", "d2008118": "logPromiseConfirmed(uint256)", +"d2010944": "oneEthToDollar()", +"d201114a": "totalStakingAmount()", +"d2013fa5": "Revoke_Policy(address)", +"d201fdc8": "claimWithProxy(uint256,uint256,bytes32[])", "d202158d": "keyHasPurpose(bytes32,uint256)", +"d202b351": "_getActionAndSetting(uint256)", +"d2030cdb": "CurrentPoolMultiplier(uint256)", +"d2034106": "getL1MessageSender()", "d2038d4d": "finalize4()", "d2051f8e": "updatePassword(uint256,string,string,string)", +"d20588c6": "ERC721BurnableInterface()", "d205ad7d": "proposeDissolve(bytes)", "d205bcb0": "isPendingOracle(address)", "d205f1e6": "testFail_set_price_without_token()", "d2064e2f": "getStamp(uint256)", +"d2067035": "getChecksumPairIdByAssignerAndResourceId(address,uint256)", +"d206ff1c": "assetPrice(uint256)", "d2077782": "changeRequestCount()", "d2079c0f": "playersLength()", +"d207a8c3": "setBondingMinimumSeconds(uint256)", +"d207b7aa": "tokenPerETH()", +"d207cf2c": "SendDivedend(address,uint256)", "d207e757": "ownerSetOraclizeSafeGas(uint32)", "d2080ccd": "pauseWhitelist()", +"d2080e5c": "BuyGuardian(uint256,uint256,address,uint256)", "d20838f4": "setRegistryContractAddress(address)", "d208fd60": "getMessageSender(uint256)", +"d20955ba": "EventNewComment(address,uint256,uint256,uint256)", +"d2097037": "rejected(address,address)", "d209a566": "BP_PERSIAN()", +"d20a1f9f": "approve_682(address,uint256)", +"d20a31d8": "global_(uint256)", +"d20a593b": "_newAgreementAction(uint256,bytes,address)", +"d20ad7d7": "setRatio(uint32)", "d20ae2b5": "getMyWorks(bytes32,bytes32)", "d20c34de": "TaylorToken()", "d20cd8e5": "Solved(address,string,string)", "d20d6119": "createTokenUri(uint8,uint8,uint8,uint8,uint8)", +"d20da525": "f(uint256[],uint256[])", "d20db416": "_approvePurchaser(address,uint256)", +"d20db66b": "setPrivateUsers(uint256,address[],bool)", "d20de0bc": "nextParticipantIndex()", +"d20e30bc": "unlock(uint256,uint16)", "d20e54a8": "startBet(uint256)", +"d20eb346": "sendEthToAddress(address,uint256)", +"d20f1005": "depositMultipleWithPermit(uint256[],uint256[],address,uint256,uint8[],bytes32[],bytes32[])", +"d20f34ec": "shadowsProxy()", "d20f5029": "advisorsTokensAddress()", +"d20f7f26": "retrieve(uint256,address)", +"d20fe4b5": "PurchaseResumed()", +"d20ff078": "submitBnbAddress(string)", +"d2104299": "getEthToSynthInputAmount(bytes32,uint256)", +"d2105a00": "users_(address)", "d21077f3": "areFundsReleasedToBeneficiary()", +"d210e1fe": "swapExactAmountIn(address,uint256,address,uint256,uint256,address)", "d211483f": "RoleRemoved(address,string)", "d211fd18": "capital()", "d211fe86": "icoEndtime()", "d21220a7": "token1()", "d212a69a": "_fees()", +"d2133e02": "blissey()", +"d21346bc": "switch_eth_buy(bool)", "d2134b26": "expTx(uint256,uint256,uint256)", "d2135356": "isValidRelease(uint256)", "d213ed96": "manageApprovedMintingModule(address,bool)", "d213f109": "calcAmtReclaimable(address)", +"d213f62e": "getContributionCeiling(address)", "d21407fa": "crowdSalesCompleted()", "d214326f": "GetWinners()", "d214becb": "charactersCountOf(address)", +"d214c6ca": "playerMap(address)", +"d214d15a": "activeGame(uint256)", +"d2156be2": "selfBlacklist()", "d21577f2": "stakeEther()", +"d215f391": "AllocatedTeam(address,uint256,address)", "d2161687": "reflectSwitch()", "d2164302": "forgeWeaponPureDamage(uint256,uint256,uint256,uint256)", +"d216720c": "intervalSize()", "d216995b": "determineBonus(uint256,uint256)", "d2169d2f": "getMonsterLevel(uint64)", "d2169dfd": "RETURN_DATE()", "d216a47d": "decreaseApproveAndCall(address,uint256,bytes)", "d216a86c": "publicEventActive()", +"d216ce6f": "getInviter(address)", "d216d55d": "etherandomExec(bytes32,bytes32,uint256)", "d21705ff": "admin_proportion()", +"d2171d94": "governanceUseUniswap(bool)", "d2178b08": "get2()", "d217b149": "managerUnset()", +"d217ebd8": "rewardsDeadline()", +"d2180e61": "approveToken(uint256,address)", "d218e144": "calculateRanking()", "d218f92d": "checkinter()", +"d2195f7c": "settenantname(string)", +"d219ab81": "razCompletion(uint256)", +"d219ab93": "changeChainlinkData(bytes32,uint256)", "d219f103": "collectedEtherFrom(address)", "d21ad1ed": "calculateWinnerCut(uint256,uint256)", "d21b84ac": "createNewDAO(address)", @@ -120406,35 +220256,62 @@ "d21bdee4": "Bitforce()", "d21c39a1": "acceptPayment(address,uint256,address,uint256,uint256)", "d21c700f": "stopToken()", +"d21c87ad": "getPoolData(uint256)", "d21cacdf": "referrerOf(address)", "d21cbffc": "getIfVoted(uint256,address)", +"d21ccf1c": "MODERATION_REWARD()", "d21ceba0": "RemainingTokensReceiverAddress()", "d21cf24f": "setSingleWithdrawMax(uint256)", "d21d2cd1": "lifePoints()", "d21d7950": "changeGasLimitOfSafeSend(uint256)", +"d21d88cf": "unsafeMultiplicationShouldOverflow()", "d21e17a6": "_payEthereum(uint256)", +"d21e581c": "balancesTotales(uint256)", +"d21e70eb": "FaultyContribution(address,address)", +"d21e82ab": "nullifiers(uint256)", +"d21eaf33": "isTopNode(address)", "d21efc35": "endPhase()", +"d21f8350": "participantLimit()", "d21fa4e1": "contract_alive_until_this_block()", "d2201c3b": "CreateLUNETS(address,uint256,uint256)", "d22057a9": "register(bytes32,address)", +"d2209ad9": "init(address,string,string,uint256)", "d220b727": "ProposalTallied(uint256,int256,uint256,bool)", +"d220e078": "ReplaceManager(address,address)", +"d220e68c": "votingCounterForContract()", +"d2216410": "withdraw(uint64,uint64,uint256)", "d2225635": "getBetterNumOfWinnings(address)", "d22290a4": "feeBips()", "d222dc04": "requiredSignedAddress()", +"d222f1bc": "gTransferBurnBP()", +"d22302ae": "FUNC_897334DC(uint256)", "d2231919": "TransactionRefundedByMediator(uint256,uint256)", "d22341a9": "withdrawDeveloperPot(address)", "d2234b37": "withdrawal2()", "d2235998": "_cancelAuction(address,uint256,address)", "d223926f": "buyBooster(uint256)", "d224118f": "PrepareDraw()", +"d2246209": "getGasCostOfGetLiquidityForAmount0(uint160,uint160,uint256)", +"d2246d39": "pendingDonuts(uint256,address)", +"d224a9a7": "LogTokenGift(address,address,uint256,string,uint160,uint96,uint32)", "d224c3e0": "gen0Step()", "d224f1ed": "proxiesCount(address)", +"d225269c": "placeSellOrders(uint256,uint96[],uint96[],bytes32[],bytes)", "d2254db0": "DDEToken()", +"d2258beb": "getLPBalance(address)", "d22591c8": "addBook(string,address)", +"d2260f2f": "withdrawUnClaimed()", "d226d11f": "foundEvidence()", +"d226d723": "preSaleWhitelist(uint256)", "d226ff1b": "User(string)", "d2273f37": "_changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", +"d22741b8": "enginePrice()", +"d2278261": "updateMaxNumber(uint256)", +"d2279709": "test_zeroed_indicies(uint256)", +"d2279dec": "getDepositorAddress(address)", +"d227c31c": "getUserCurrentBorrowRate(address,address)", "d2282dc5": "setUint256(uint256)", +"d22893cd": "maxBurntMEDAL()", "d228cfc5": "claimHodlRewardFor(address)", "d229a94a": "lockTokensForTradingMarketContract(address,uint256)", "d22a1180": "finanReserveAllocation()", @@ -120445,64 +220322,120 @@ "d22b3de6": "setTitulaire_Compte_10(uint256)", "d22b64a2": "getDonationByAddress(address,address)", "d22b9177": "getImageRegionId(uint256)", +"d22bc441": "ethPerToken()", "d22bdce2": "_getNextStage()", "d22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", "d22c78f8": "getPlanetDetails(uint256,uint256)", "d22d9c6d": "tokensInUse()", +"d22db6ab": "ClaimBonusOn(uint256)", +"d22dd46b": "losePayAmountDegree()", "d22dee48": "claimProfit(uint256)", +"d22e6a41": "sETH_TokenContractAddress()", "d22e7b69": "validatePublisher(address,bool,string)", +"d22ec592": "sendMISCBNB(address,uint256,string)", +"d22eeacc": "getPassengerStatus(string,uint256,uint256)", "d2305f07": "getCloneArray(uint256[])", +"d230d23f": "leastSignificantBit(uint256)", "d230e875": "MaxValue()", +"d23226e2": "POOL_UNSUPPORT()", +"d2322703": "stageOneDepositEndBlock()", +"d23254b4": "votes(uint256,address)", "d232790d": "setLastWinner(address,uint256,uint256,uint256)", "d232a8f5": "firstStageCap()", +"d232c7e5": "IssuerAdd(address)", "d23376ec": "getPOOL_edit_14()", +"d233a3c7": "remapToken(address,address,bytes32)", +"d233c579": "enrollmentIndex(address)", "d233e5c0": "oxen(address)", "d233fc0b": "changeRecovery()", +"d2344287": "ZOOM_SOTA()", "d235f947": "setMaxHealthAndMana(uint256,uint32,uint32)", +"d235fb61": "getBalanceUSDTContract()", "d23628f1": "CyberRailNET()", +"d2364ec6": "trylog()", "d2368f64": "Billing(uint256,uint256)", +"d236fd58": "LogNewOraclizeQuery(string,bytes32)", +"d2370a70": "_twos_complement_256(int256)", +"d2377356": "investorRefund()", "d237a427": "TT()", +"d237b144": "lockedLabSupply()", "d237b43f": "reclaimResourceDeposits(address)", "d237bc74": "paymentSizeC()", +"d2380768": "AddUniswap(address)", +"d23890e9": "tu(int128)", "d238cd1b": "redeemVoucherSingle(uint256,address,address,uint256)", "d238ec90": "HWGLToken()", "d2395dcd": "buyTokens(address,uint256,uint256)", "d239ea8b": "getSchemasLenght()", +"d239f003": "toggleWithdrawals()", +"d23ab97a": "getTotalDeposit(uint256)", "d23ad39d": "setCommons(address)", "d23b8f5c": "drawDailyWinner()", +"d23b90a5": "incrementDarknodeBalance(address,address,uint256)", +"d23bed56": "CancelOrder(bytes32,bytes32,address,address,uint256,uint256)", +"d23d1161": "withdrawToVault(address,uint256)", +"d23d7e8a": "testSha3()", +"d23db1cd": "getMission1(uint256)", "d23dcee0": "_generateTokenURI(bytes32[],uint256)", +"d23dd04e": "viewAPUserDetails(address,uint8)", "d23df2d1": "RENEX_SETTLEMENT_ID()", "d23e09f5": "trioContract()", "d23e8489": "transferOwnership(uint256)", +"d23e8ada": "usdtPerRequest()", "d23ea159": "eGoldchainStart()", +"d23ece73": "updateOtherOracles(address[],uint256[])", "d23ef360": "setExchangeRegulatorWallet(address)", +"d23efae7": "createAsset(string,address[],uint256[])", "d23f0abb": "issueTokensForPresale(uint256)", "d23f1bba": "noBets()", "d23f4450": "scoreDown(address)", +"d23facbf": "distributeWithLockup(address,uint256,uint8)", +"d2401fa4": "tokenURI_()", +"d240ae52": "totalShareUntilRd()", +"d240e127": "TokenPurchase(uint256,uint256,address)", "d24155c1": "getAmountBonusRate()", "d2415852": "TheDivine()", "d241ead8": "testMinReturn0WithReturn()", +"d2423b51": "batch(bytes[],bool)", "d242448c": "transferredCrowdsale()", +"d2424b0f": "LEVEL_ONE_LIMIT()", "d24257c0": "betAmount()", "d2427db5": "checkTotalPayout(address)", +"d2428300": "setIsRewarding(bool)", "d242b051": "reserveWaveLockup()", +"d2432969": "partyCoincieded(address,uint256,uint256,address)", +"d2435e2d": "lastSnapPrice()", +"d24378eb": "assetPrice()", +"d243b86f": "rebateOne_(uint256,uint256)", "d243ec26": "payDev()", +"d243f6b7": "latestMarketPrice()", "d244059a": "whiteListLimit()", +"d2442bf4": "multisendErcABJ(address[])", "d24481ea": "checkWin()", +"d2452784": "setAccountLockType5(address,uint8)", +"d2457370": "validTokens()", "d24594b8": "canApply(uint256,bytes32)", "d245a084": "TransactionRefundedAfterDispute(uint256,uint256)", "d245aa92": "endBlockBonus3()", "d245da28": "updateEarlyParicipantWhitelist(address,address,uint256)", +"d246780c": "buys(uint256,uint256)", +"d2467e2a": "updateXwinMaster(address)", "d2467e31": "GetSellingTokenDecimals()", "d246a8c9": "lastNegativeVoting()", "d246b379": "calculateRevenue(uint256,uint256,uint256)", "d246d411": "burnAddr()", +"d246eb41": "ATContractsList(uint256)", "d247160a": "ethertoteDevelopmentTransferComplete()", +"d24726d6": "payoutNoWorker(address,uint256,address,uint256,bytes32)", +"d247d3c2": "keepMISMax()", "d24876b7": "sellCMTAgainstEther(uint256)", +"d2488678": "buyeGG6eFAME()", "d248cf1f": "DASHABI(uint256,string,string)", +"d2493b6c": "getReserveTokensAddresses(address)", "d24987fc": "getNewTokenPrice(uint256)", "d24999ca": "getkillerPriceConversionFee()", "d249a52e": "update(bytes,uint256[],uint256[])", +"d24a1c98": "getReferralRate(address)", "d24ac764": "getRejectionCount(uint256)", "d24b06b7": "registryRequestCustodian()", "d24b08cc": "callstoredaddress()", @@ -120511,201 +220444,379 @@ "d24b7e7a": "setEthPrice(uint128)", "d24bcb15": "usechainWallet()", "d24bcf54": "getEarlyIncomeByAddressRound(address,uint256)", +"d24bdad5": "removeInversePricing(bytes4)", +"d24c2047": "ProposalAccepted(uint256)", "d24c48bc": "getLiquidationSpreadForPair(uint256,uint256)", "d24c5a36": "random1()", "d24c8fe4": "_getCurrentStage()", "d24d11ad": "BattleProvider(address,uint256,uint256,uint256,uint256,uint256)", "d24ddcfe": "buyKissBTC()", +"d24e491c": "availableX()", +"d24e567a": "depositWBTC(address,uint256)", "d24ecc10": "initializeSale(uint256,uint256,uint256,uint256,address)", "d24ef4f3": "PLATFORM_DEVELOPMENT()", +"d24f1652": "rampTokenFarmingWallet()", "d24f8a17": "convertShortedTokensToLiquidationToken(uint256)", +"d24fe623": "intTransfer(address,address,uint256)", +"d24ff1fa": "getChainlinkEthDollarValueWithMultiplier(uint256)", "d2500033": "RISE()", +"d250185c": "getFee(uint256,uint256)", +"d2503485": "addLockManager(address)", +"d250496c": "balanceMap(address)", +"d2505f9d": "Bid(uint256,bytes32,uint256,string,string)", "d25090ff": "withdrawContribution(uint256)", +"d250e699": "liqAddBalance()", +"d250ee78": "setWalletOwnerAddress(address)", "d25119c7": "getMsgHash(address,string,string)", +"d2514e84": "total(address)", +"d251657a": "isEligiblePool(address)", +"d2519c1e": "getEarning(uint256)", +"d251b06c": "DEVELOPMENTredeemedTokenAmount()", +"d251d035": "usersX4MatrixPlacements(address,uint8)", +"d251fefc": "whitelistArray(uint256)", "d2521034": "marriageStatus()", "d2526418": "getFeePercent(address)", +"d252971e": "changeRules(uint256,uint256,uint256,uint256)", "d2531590": "CANCEL_EXTRA_GAS()", "d2536893": "setDividendWinners(uint256[],uint256[],uint8[],uint256)", +"d253eced": "update_and_check_reach_majority(uint64,string,bytes32,address)", +"d2542490": "warpOutFrom(address,uint256,uint256)", "d2548393": "team2019TokenCreated()", "d255494a": "removeInventory(bytes32)", "d25570f2": "AliceToken(uint256)", +"d2557456": "nextCastTime(uint40,uint40,bool)", +"d2558db1": "herosForSale(uint256)", "d2558fca": "Token3D()", "d2559533": "WinancesToken()", +"d255bb3b": "STAKE_PLS(uint256)", +"d256413e": "MaxTxAmount()", "d256451c": "setRates(uint256,bytes32[],uint256[])", +"d2569482": "ObirumsDroped(uint256,uint256)", +"d256b21a": "addSon(address)", "d256c7a5": "setTokensPerEther(uint256,uint256)", "d2571062": "setAllContracts()", +"d2572c8b": "registeredPools__rewardPerTok(address)", "d2577fec": "_getRoleSignature(address,bytes32,address)", +"d257daca": "clearTESLA()", +"d257f648": "userLockedTo(address)", +"d258191e": "registerAddressesProvider(address,uint256)", +"d2588d18": "getFinalWithdrawlStake(uint256)", "d258d7b6": "test_4_generateTokensAccrossBlocksAfterDestroy_increaseBlocksBy1000()", "d258f2f4": "TeTeToken()", "d2591068": "TLCMarketCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", "d259224a": "ssstt()", +"d2594b06": "_getExpectedReturn()", "d2598c4c": "removeTrader(uint8)", "d2599300": "savedReferral(address)", "d2599312": "initShareRule4Publicity()", +"d259ab42": "setSwapContract(address)", "d259d761": "changeAdminContract(address)", "d25a1212": "revokeAttributeSigned(address,uint8,bytes32,bytes32,string,bytes)", "d25a13b4": "roundTwoBlock()", "d25a5be9": "airdropTotalSupply()", +"d25b00d0": "exerciserFee()", +"d25b07c6": "createAuction(address,uint256,uint256,uint256,bytes)", +"d25b2da3": "markProjectAsComplete(uint32,uint256)", "d25b3ee1": "AcademiCon()", "d25b4f2a": "CrowdsaleRC()", "d25c0767": "isSaleAuction()", +"d25ccf53": "restartAuction(uint256)", "d25d19e2": "SetThrdOwner(address)", "d25d603c": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,string)", +"d25d7cc0": "migrate(address,bytes32)", +"d25d822f": "purchaseToken(uint256,address,address)", +"d25db814": "badgerTokenAddr()", "d25dc056": "transferToWinner(address,address,uint256)", "d25e3443": "ISLToken(uint256,string,string)", +"d25e5f0a": "huntersLockDateTime(address)", +"d25e90f4": "createVesting(address,uint256,uint256,bool)", "d25f08b1": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],bool)", "d25f1c35": "CPGPEREGRINE_MAX_CARGO()", +"d25f80ab": "getPacketAmounts(uint32)", "d25f82a0": "getAirdrop()", +"d25f9c3a": "disableAddress(address,bool)", +"d25faca8": "LogGameCreated(address,uint256,uint128,bytes32,bytes32)", "d25ff342": "MNXToken()", +"d25ff397": "three_pool()", +"d2600e91": "setListTime()", "d2602930": "RockPaperScissors()", "d26031ab": "phase2EndingAt()", +"d260529c": "isV28OrHigher()", +"d26110a1": "testelopioarg(uint256)", +"d2615858": "releasedTokenAmount(address)", +"d261ae73": "marketCreatorFeesAttoCash()", "d261de38": "NVCTToken()", "d261fbed": "addressCallWithArray(address[3])", "d2620e2d": "holdOf(bytes32)", +"d262271d": "getTWAPPrice()", "d2625fce": "pendingOracleB()", +"d2629e0a": "ForceTransfer()", "d2631e42": "changeRewardManager(address)", +"d2632e80": "ProposalExecuted(address,bytes32,int256)", +"d26376d9": "createSmartFundLight(string,uint256,uint256,bool)", +"d2639eca": "PartnerRemoved(address)", "d263b7eb": "ownerkill()", "d263be48": "myWallets()", "d263d2a4": "setWildCardToken(uint256)", +"d263f5ce": "sendHouse(uint256,uint256,address)", +"d2640d29": "rariFundController()", +"d264309b": "setERC20TokenAddresses(address,address)", "d264a878": "getOraclizeWinnerTimeOffset()", "d264cfdc": "lockAccountOf(address)", "d264e05e": "forward()", "d2650fe5": "RedeemEvent(address,uint256,uint256,uint256,uint256)", "d2651855": "changeERC20(address)", +"d2653b31": "updateDetails(string)", "d2654219": "getCurrencyDenominated()", "d2656069": "SmartContract_Allowed(address)", "d26574ac": "setCardPerkText(uint256,string)", +"d2658dc6": "approve_849(address,uint256)", "d2663184": "setDividendCardAddress(address)", +"d26642ba": "approveOperatorVote()", +"d266c689": "newFDT(string,string,address,address,address[],uint256[])", "d266e83b": "isActive(address,uint256)", +"d266fd67": "InitiallAllocationUnlocked(address)", "d2670025": "REQ()", +"d2674dd7": "depositfund()", +"d2675085": "giveLoan(address,uint256)", "d2676711": "getCommentAccountsLength()", +"d267849c": "checkTicks(int24,int24)", "d267dc96": "Tradenexi()", +"d26873f6": "_Available()", "d2689abc": "ecdsaverify(uint256,uint256,uint256,uint256,uint256)", +"d26981f6": "_yvaultMaster()", "d269ae55": "MAX_ALLOWED_TOTAL()", +"d26abffa": "claimableReward(address,address)", +"d26b6c0c": "checkRunner(address)", +"d26b8301": "feeRebates(address)", +"d26bc13d": "IcoFinished()", +"d26c4a76": "timelockList(address,uint256)", +"d26c6f38": "candidateExecutePayout(uint64,uint64,uint256)", "d26c8a8a": "coinBalance()", "d26cbe1e": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d26cf3ad": "getStakedTokenWithdrawableDates(address)", "d26cfeae": "setMinAmount4Round(uint256)", +"d26d1fe6": "accrualDaysProcessed()", +"d26d4fb2": "element(uint8)", "d26da39e": "isRequestFromOwnerOrMeterKey(address)", "d26dbd2a": "preSaleTokensDisbursed()", +"d26e1414": "token_foundation_created()", +"d26ea6c0": "setProxyRegistryAddress(address)", +"d26eaace": "SetOwnership(address,bool)", +"d26eb752": "insertIndex()", +"d26eb7f3": "updateVictimContractAddress(address)", "d26ee061": "getAvailableFundsForTheTeam()", "d26f9cd7": "backofficeRedeem(uint256)", "d26ff86e": "submit(bytes32,bytes32)", "d270085e": "addNoFeeAddress(address[],address[])", +"d27043a6": "transferToUplineFourteenK(address,address,address,address)", "d270b8e8": "tokenDistributionEndTime()", "d270cbaf": "buyAAC()", "d270e7ab": "mainContract()", +"d270f987": "overrideLoyaltyPoints(address,uint256)", "d271011d": "transferEthers()", +"d27109de": "individualTokenCap()", "d2715a6b": "getEmblemOwner()", "d2718fbe": "setOwnerFlag(uint256,uint8)", "d271900d": "linkContract(address)", "d2719d22": "btcRate()", +"d2719e15": "forContractBalance()", "d271b067": "ln(int128)", +"d271be3f": "redeemAndTransfer(address,uint256)", +"d2722656": "updateLootbox(uint256,address,uint256)", "d2727e6c": "_oneTokenInWei()", "d2728f90": "Bought(uint256,address,uint256)", +"d27312eb": "_calcRewardShare(uint64,uint256)", "d273285b": "createdWallets()", "d27399b5": "countAddressesSet()", "d27416ec": "verify(bytes32,uint8[5],bytes32)", +"d2746b56": "treasuryRewardPeriod()", "d27482a4": "claimOwner(address)", "d274b230": "registerFor(address,address,uint256,uint256,uint256)", "d274fa91": "amendRetention(uint256,uint256)", "d2756e11": "finalizeNumber(uint256)", "d2758538": "createOneDrink(string)", "d2760b64": "_isBuying()", +"d2762179": "systemWithdraw(uint256)", "d27626fd": "pushToken(address[],uint256,uint256)", +"d2763667": "log(bool,address,address)", +"d2764a23": "queue2(uint256)", "d2769df1": "isValidComposition(uint256[],uint256)", "d276a3e1": "auctionedEth()", +"d276a6d8": "getrateone()", +"d276fa5a": "KctAddress()", +"d2778040": "gg16(uint16)", "d2786ba4": "getMetaData()", +"d2787a2d": "purchaseToken(string)", "d2789aa5": "getPrivilegeState(string)", +"d2797b59": "claimable_reward(address)", "d279830c": "addMilestone(uint256,uint256,uint256)", "d279c191": "claimReward(address)", +"d27a27f9": "removeCustomerKYC(address)", "d27a43f6": "_checkWin(uint256,address)", "d27a6f28": "ZyPPACrowdsale(uint256,uint256,uint256)", "d27aa18e": "Secure()", +"d27aa6ce": "getUNIprice(address)", "d27bf2e3": "getCurrentLocation()", +"d27c7bdb": "getSettleInfo(address)", "d27d1bc4": "proposalsNumber()", "d27d3e88": "bulkSend(address[],uint256[])", +"d27dc3aa": "getConverter(address)", +"d27efb08": "addNewHolder(address)", "d27f41cd": "CharityInProgressWallet()", +"d27f8e66": "sendViaTransfer(address,uint256)", "d27fcf96": "gmtFundAddress()", "d27ffef1": "OLIFEToken()", +"d2806620": "fundCampaign(bytes32,address,uint256)", +"d28076d8": "MntpHold(address,string,uint256)", +"d2812ca9": "RewardDuration()", +"d2819ab3": "referralTokens(address)", +"d2819ba4": "LogDarknodeRegistered(address,uint256)", +"d281d051": "bankDeposit(uint256)", "d282866a": "whichTick(uint256)", "d282db01": "_withdrawal(address)", +"d28303a0": "setMinter_number(address,uint256)", "d2835c58": "P4P()", "d283833d": "toekensForTeam()", "d283859d": "removeBlack(address)", +"d283bac3": "collectPurchased()", +"d283e75f": "debtOf(address)", +"d2840073": "viewUserLevelExpired(address,uint256)", "d2840362": "addAdvisors(address,uint256,uint256)", +"d284381e": "viewEthRaised()", "d28442ef": "ownerProfit()", "d2846c7b": "isProxyContract()", +"d2849f6a": "indexes(address,address,uint256)", "d285b7b4": "loan()", "d286dbf2": "internalNewRound(uint256,uint256)", "d2871105": "tokensIssuedBySTO()", "d2874e49": "withdraw(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", "d2879f47": "_getContractTokenBalance()", +"d287e9e4": "totalJackpotsWon()", "d2886ebc": "getUserSkills(address)", "d288c878": "blackListERC20(address)", +"d28958b8": "foo3()", "d289ade2": "payFee(uint256)", +"d289be68": "Round4Time()", +"d289e7ae": "roadCost()", "d289eb82": "buyMultipleItems(uint8)", "d289f187": "_addBonus(address,uint256)", +"d28a1685": "createCategoricalMarket(uint256,uint256,address,address,bytes32[],bytes32,string,string)", "d28a4f9e": "setKyberContractAddress(address)", +"d28a9498": "incomeLastUpdateTime()", "d28ae9ef": "calcMiningSharesAmount(uint256,uint256)", +"d28b2c2b": "buy_tife_bnb(uint256)", "d28b5317": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address,string,int256)", +"d28b7103": "fdTfId(uint256)", +"d28bbda5": "getAssetPermitSupport(uint256)", +"d28bc150": "hasExistentToken(uint128)", +"d28bd65a": "lay3vdvnhanhnhat(uint256)", "d28be797": "getShitClonelordReq()", "d28c25d4": "changeGreeting(string)", "d28c2aaa": "fix_parents(uint256,bool)", +"d28c51b7": "getGasCostOfComputeSwapStep(uint160,uint160,uint128,int256,uint24)", +"d28c9ad0": "readVote(address)", "d28cb7b5": "availableWallet(address)", "d28cbded": "ERC20Token(uint256,string,uint8,string)", "d28d4e0c": "queryAllAccounts()", "d28d8852": "_name()", +"d28da5aa": "addLiquidityToSakeSwap()", "d28dcdea": "haltPurchase()", +"d28de273": "UNIROUTER()", +"d28e091b": "bounds_max()", "d28e4355": "updateClaimable(uint256)", "d28e88bd": "freezeDateOf(address)", +"d28eb963": "upgradeVersion(address)", +"d28f6936": "purchasingLogSubString()", "d28f95ba": "withdrawalEth()", "d28fa960": "withdraw_all_funds()", "d28fdde8": "updatePrice(uint256[])", "d2901c47": "RATE_SOFT()", +"d290c21d": "getPoolsToBeRemoved()", "d290ee06": "revokeTokenTimelock(address,uint256)", +"d29157fb": "PERMIT_SELL_TYPEHASH()", +"d291aea0": "sethProxy()", "d291fa81": "GetMinerAt(uint256)", "d29208d4": "MasterCoin()", "d292515d": "totalMintNums()", +"d2927d38": "c_tokenPrices(uint256)", "d292b920": "CryptaurMigrations()", +"d292d5d7": "ambassadorsPremined(address)", "d292e6cb": "_sendPriceUpdate(address,uint256)", +"d292eea1": "addPoll(address,bytes32,bytes32[],uint256,uint256,uint256)", +"d293767e": "buyTokensWithBNB(address,string,uint256)", +"d293c710": "getCurrentICR(address,uint256)", "d294cb0f": "accountBalance(address)", +"d294ccef": "addItem(bytes)", "d294f093": "claimFees()", "d2953f84": "assetByIndex(address,uint256)", "d29543af": "FolioNinjaToken(address,address,uint256,uint256)", +"d295e90e": "removeUserFromBlackList(address)", +"d29662a2": "pendingYFNR(uint256,address)", "d296853a": "whitelistPreSaleAddress(address,bool)", "d2968a7f": "addContribution(address,uint256,uint16)", +"d296c23c": "bonusPoolUserPoint(uint256,address)", +"d296d0a1": "addCardInfo(uint8,uint256,uint8,uint16,uint16,uint16)", +"d296d1f1": "liquidate(uint256,uint256)", "d2970120": "getSettlingTimeoutBlock(bytes32)", "d29709fb": "returnDeposit(address,uint256)", +"d297128f": "getCompApr(address,address)", "d2973f93": "setUserType(address,uint256)", "d2983dfd": "LoadedRefund(address,uint256)", +"d298a3a8": "userDepositId(address)", +"d298d9c9": "getBtcPriceProvider()", "d299dac0": "blake2b(bytes,bytes,uint64)", +"d29a0025": "kill(uint256)", +"d29a4bf6": "depositERC721(address,uint256)", +"d29ab9c4": "externalTokenDecreaseApproval(address,address,uint256)", "d29b5d2f": "mintReputation(uint256,address,bytes32)", +"d29b93a4": "withdrawApprovalWaitPeriod()", +"d29c000a": "applicableIssuanceData(address,uint256)", "d29c8c96": "createdBlockOnCommitsPhase(uint256,address)", +"d29ca17d": "EventAppEntityAssetsToNewApplication(address)", "d29cafe1": "ZilliqaToken(address,uint256)", "d29cbd60": "getMonsterBaseStats(uint64)", "d29d44ee": "_transferOwnership(address)", "d29d503c": "addHolder(address,uint256,uint8,uint256)", "d29d91ca": "getNarcoHomeLocation(uint256)", +"d29dad83": "balanceOfTotal(address)", "d29db7e4": "_processPurchase(address,uint256)", "d29dd76d": "whitelistAdmins(address)", "d29e2746": "place_buy_order(uint16,string,address,string,string)", "d29e319c": "TOKEN_ICO3_LIMIT()", "d29e6803": "secretHash()", "d29ebd2e": "privateOfferingSupply()", +"d29f0747": "setCollateralFactors(uint256,uint256)", "d29f541d": "getPosition(uint256,address)", +"d29f6d8b": "changeForkAddress(address)", "d2a09b96": "_updateReferrals(uint256,uint256)", "d2a17959": "transferTokensFromVault(address,uint256)", +"d2a1a645": "communityAirdrop()", "d2a1e045": "FuBi()", +"d2a200ee": "initialize(address,address,string,uint256)", +"d2a221d4": "getTokensPerBnb(uint256)", +"d2a27df9": "bestSubScore()", "d2a2feaa": "STRI()", +"d2a30e36": "ATokenWeight()", "d2a32c12": "bonus_amount()", "d2a3899c": "payOrder(uint256,uint256,uint256)", "d2a3b190": "SAToken()", "d2a405f7": "_issetConverter(address)", +"d2a4671b": "setAddressCreatorInvestPool(address)", +"d2a47884": "SetNewController(address,address)", +"d2a4a5e0": "stockIssueLimit()", "d2a4ccc5": "redeemBuzzCafeBal()", "d2a569c3": "startAirdrop()", "d2a59d69": "dragons(uint256)", +"d2a5bb9a": "setVotingSignaturesForAddress(address,bool,bytes4[],bool[])", "d2a6629c": "playerActiveGames(address,uint256)", +"d2a6b51a": "setCreator(address,uint256[])", +"d2a6bc40": "OPENINGTIME()", +"d2a6c5ca": "EnableBonus(uint256,uint256)", "d2a6cf5e": "internalTrade(uint256,uint256,uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"d2a6efcc": "TopUp_Deposit(uint256)", +"d2a6fbc1": "setLockUp(uint256,uint256,uint256,uint256)", +"d2a70162": "setDropRate(uint32)", "d2a718ec": "isRefundLocked()", "d2a753e4": "cancelBid(address,bytes32,int32,bool)", "d2a764d1": "contributeInBNB()", @@ -120713,75 +220824,128 @@ "d2a7d38a": "MIN_FUNDING_AMOUNT()", "d2a7ea17": "setSelfAsPureShareholder(string)", "d2a86985": "_ORAK()", +"d2a8b730": "earnedAfterTax(address,uint256)", +"d2a8f889": "mintForBunnyBNB(uint256,uint256,address)", +"d2a8fe49": "updateNAVs(bytes32[])", +"d2a99ba5": "vaults_collect()", "d2a9b6ed": "getVotingFor(address)", +"d2a9d641": "users_5(address)", +"d2a9d862": "yfii()", +"d2a9db5b": "fundCost(uint256,uint256,uint256)", "d2aa24b6": "getControlInfoMaxPerBlockImbalanceList()", +"d2aa3ab9": "ratePool()", +"d2aaef4e": "getFeeRate(uint256)", "d2ab6be1": "start(uint8)", "d2ab78b7": "getGameName(address)", +"d2ab9c8c": "testMintself()", "d2ac0f59": "setHeroContract(address)", "d2ac1c8e": "addApprovedAddress(address)", "d2ac2d8a": "heldOf(address)", "d2acbc0d": "card_metal_minamount()", "d2accad3": "_changeText(uint256,string)", "d2ace0cc": "_newVoting(bytes,string)", +"d2ad07fb": "checkTransfer(address,address)", "d2ae5f65": "earlyInvestorTokenRaised()", "d2ae8eaa": "getGenesForSale()", "d2aeb90f": "removePoweruser(address)", +"d2aed6d7": "coinIndex(bytes32)", "d2aee00b": "getCanAttackMonsterIds()", "d2afa8c1": "isERC721()", "d2afeeeb": "createBoard(bytes32,bytes32,uint256,uint256,uint256)", "d2b001fb": "PREMIUM_TYPE_COUNT()", "d2b022d5": "pendingWithdrawalsBalance()", +"d2b04fd6": "mint(address,uint256,string,bytes)", +"d2b069e0": "max_mint_period_amount()", "d2b0d554": "getDisclaimer()", "d2b10b75": "AirDropContract(address,address)", "d2b1569e": "redeemRewardedAxies(address,uint256)", "d2b3fe93": "updateRoundLimits(uint256)", +"d2b40742": "getAllAssignedBalance(address)", "d2b420ce": "isOfferSorted(uint256)", "d2b4a460": "getJackpotFee(uint256)", +"d2b4dcf0": "checktokenallowance(address)", "d2b50743": "DOW_FRI()", +"d2b58fb6": "withdrawtokenall(address)", "d2b5c227": "AsideTokensHaveBeenAllocated(address,uint256)", "d2b5d9e1": "refferalFee()", +"d2b64472": "getPaymentDecimals()", +"d2b6a5d4": "vliquidPools(address,address)", +"d2b6dde6": "whodidthat()", +"d2b71c9b": "transferFund(address,uint256,address)", "d2b73cea": "getActiveContractAddress(uint256)", "d2b74f70": "CryptoFamousStorage()", "d2b75b70": "_upsert(address,uint256,bool,bool,uint256)", "d2b77264": "pollMap(bytes32)", "d2b78529": "getContractNetBalance()", +"d2b7c48a": "getAcceptances()", "d2b7d957": "executeDelegatecall(address,uint256,bytes)", "d2b8035a": "draw(uint256,uint256)", +"d2b80d08": "initNUM()", +"d2b84a90": "getSellOrderID(address)", +"d2b855fc": "updateArtworkPaused(uint256,bool)", "d2b8915c": "offerPosition(uint256,uint32,uint256)", "d2b8b867": "doPayment(uint256)", +"d2b8cd2e": "startVotingForStartPayment(uint256,uint256)", +"d2b90f0b": "initializeFund(address,address)", "d2b93303": "EternalToken()", "d2b962f2": "createLiability(bytes,bytes)", +"d2b9791e": "CONTROLLER_AAVE_RESERVE()", +"d2b98503": "getEncryptedDataCount()", "d2b9da84": "Office(string,string,uint256)", +"d2ba1f36": "MAX_FEE_PCNT()", "d2ba499c": "IS_SIGNATURER(address)", "d2ba5537": "numberOfClaimants()", "d2ba8073": "minbid()", "d2bafbe6": "setMaxCoordinate(uint256)", "d2bb6fd5": "timeTier2()", +"d2bba305": "customSymbol(address)", "d2bbda29": "registerName(string,address,string)", "d2bbf6df": "getIndexId(address,bytes32)", +"d2bc4bc9": "gm(int256,int256)", +"d2bc5b89": "SignPrps(uint256,uint8,address)", +"d2bcb704": "wav3()", "d2bd3dd9": "YAP()", "d2bec28c": "startCraftingAuction(uint256,uint256,uint256,uint256)", "d2bf36c0": "getPackData(uint256)", +"d2bf3cc2": "f(uint256,uint8)", "d2bf779f": "getKingdomInformations(string)", "d2bfd24b": "setgamecard(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d2c00bad": "wdivT(uint256,uint256,address)", "d2c03c01": "auto_withdraw(address)", +"d2c04f43": "setClaimPeriod(uint256)", "d2c0e032": "set(address,string,string)", "d2c18e0b": "api()", "d2c18f59": "emergencyManager()", +"d2c2c4fa": "setDistributeToken(uint256,address[])", "d2c33eb2": "claimRaisedWei(address,address)", +"d2c35ce8": "updateFeeCollector(address)", +"d2c367c0": "depositList(uint256,uint256)", +"d2c36e91": "AddNewBalanceCheckData(address,bool)", "d2c37621": "getUserLocalTokenBalance(address)", "d2c3a1ec": "updateStageInfo(uint256,uint256)", +"d2c3fbb7": "verifyString(string,uint8,bytes32,bytes32)", "d2c411d3": "closeBatch(uint256)", +"d2c41b57": "endSetUpDelay()", +"d2c44197": "MAXIMUM_LGE_DURATION()", +"d2c4770c": "incrAIIStats(address,uint256,uint256)", "d2c49b7f": "getTimeUntilEnd(uint256)", +"d2c4b598": "getTokenTransferProxy()", "d2c51c72": "withhold()", "d2c5c368": "testFailRestartNotUpdatable()", "d2c5ce31": "dateTimeAddr()", +"d2c5e34c": "thereceivertopaybalance()", +"d2c5ed86": "setNetworkPrice(uint256)", +"d2c6b762": "AssetProxyRegistered(bytes4,address)", +"d2c6ce53": "approvedOfItem(uint256)", "d2c73093": "createTokens(uint256,address)", "d2c731d9": "TermsOfUse()", +"d2c7a58c": "getVerifierLocation(address)", "d2c877f8": "setDollarRate(uint256)", "d2c87b02": "MB(address,address,address,address,address)", +"d2c904bb": "clone(address[],uint256)", "d2c936ff": "currentBonusLevel()", "d2c94ec5": "C4FToken()", +"d2c9ed27": "gladiatorToCooldown(address)", "d2ca159a": "listUnconferences()", "d2ca2115": "periodLength()", "d2cad255": "BankDeposit(address,uint256)", @@ -120789,131 +220953,257 @@ "d2cae700": "getAllFailedInvestmentsCollected()", "d2caeea8": "aomucoin()", "d2cafe2d": "allAssetsOf(address)", +"d2cb533c": "TIMELOCK(uint8)", +"d2cba55c": "cTokenManager()", "d2cbcea6": "getSSP(address)", +"d2cbf7ad": "getAPY()", "d2cc7015": "placeMove(uint8)", "d2cc718f": "accumulatedInput()", "d2cced90": "getAnnualInterest(uint256)", +"d2cd581d": "RepeatAddonBlockAltered(uint256)", "d2cd9673": "totalMining()", "d2cd96bd": "changeQuorum(uint256)", +"d2cd9de2": "getTurnoverSetting()", "d2cdf580": "setKYCpassed(address)", "d2ce33f8": "preMinting()", +"d2ce6bb5": "initializeTasks()", +"d2ce8420": "mIdOwner(uint256)", +"d2ce8892": "SNX_TokenContractAddress()", "d2ce89e5": "logoURL()", +"d2ceaeb8": "updateHoldersDay(bool)", +"d2ceebc8": "lifeTimeMintedByUser(address)", +"d2cf60d7": "userWhiteList(address)", "d2cf7704": "BanAttempt(address,address,uint256)", +"d2cfcfef": "getLocalReceipt(uint64)", "d2cfe5a7": "posscoin()", +"d2d0d503": "setFarmCreator(address)", "d2d0ded1": "referrerBonusPercent()", "d2d0e066": "deposit(address,uint256,uint16)", "d2d10162": "initialize(address,address,uint256,uint256,address,address)", "d2d10be8": "TGEToken(string,string)", +"d2d13473": "createUserAndConnection(address,bytes32,uint8)", "d2d153a4": "Grand_Solar_Minimum()", +"d2d154be": "privateFifthWallet(address)", +"d2d1602c": "createShardToken(uint256,string,string)", +"d2d16c5d": "claimsaleagent()", +"d2d1fb25": "claimAllocation()", +"d2d2070a": "setMintCap(uint8)", +"d2d21278": "rewardBalanceOf(address,address,address[])", "d2d21e85": "sendToNest(uint256)", "d2d26edc": "Cloudcoin()", +"d2d27b41": "getPeriodTokenStatement(uint64,address)", "d2d3b8e0": "multiAllowance(address,address[],address[])", "d2d3d7fb": "fetchAllVoters()", +"d2d3e657": "isLimitEnable(bool)", "d2d42074": "getExchangeContractAddress()", "d2d44955": "Cindicator()", "d2d4bd72": "getCrossRate(bytes,bytes)", +"d2d4fb6d": "tokenRemainingForSale()", "d2d5a55c": "ownerValidator()", +"d2d5b999": "excludedFromLotto(address)", +"d2d63bb7": "passURIToChild(uint256)", +"d2d65d46": "transferTokenErc20(bytes32,address,uint256)", +"d2d6dc75": "createContractWaifu(string)", +"d2d71d5c": "setENSRegistrar(address)", "d2d7231f": "calculateReward(uint256)", +"d2d745b1": "multisendToken(address[],uint256[])", "d2d791c0": "payBatch(bytes32[],uint256[],address,address,bytes)", "d2d85cf2": "rootsMatch(address,address)", +"d2d86a8d": "sSsBlakjh()", "d2d8cb67": "TOKEN_PRICE()", "d2d8fd0a": "settleFrom(address,address,uint256)", "d2d92f24": "getWhitelistEntry(uint256)", "d2d93f90": "ethRate()", +"d2d95547": "getTokenRewardByAddress(address)", "d2d976da": "webpage()", +"d2d97b06": "globalCollateralValue()", "d2d97d9f": "coldStorage()", +"d2d9a0ca": "_referRewardRate()", "d2d9b8c6": "setCompte_24(string)", "d2d9d44e": "awardTitanium(address,address,address)", "d2da29c7": "hostAddress()", +"d2da4206": "UsernameOwner(bytes32,address)", +"d2da7c71": "rentProperty(uint256,uint256,uint256)", +"d2dad8b5": "inCasesdarkStuck()", +"d2daf7aa": "stake(uint256,uint256,uint192)", "d2db29af": "claimFutureUse()", +"d2dbb4d4": "lqTaxFee()", "d2dc0869": "add(string,uint256,string,string,address)", +"d2dc32b9": "electionVictor()", +"d2dc3892": "sendRejoinAndMatchingBonusPotofgold1(address,address)", +"d2dc3cf5": "acceptRide(uint256,address)", +"d2dc7406": "FrozenBalance(address,uint256)", "d2dcd933": "totalSupplyAtTime(uint256)", +"d2dcddc8": "transactionpayment(address,uint256)", +"d2dd2f16": "reportingCounterTotal(uint256)", +"d2dd3b40": "unloackedTokenBalance()", +"d2dd54b4": "getTokenDetails(address[])", "d2dd8d2a": "authorized_updateCardClaimerAddress(uint256,address)", "d2dd9f79": "transferVault(address)", +"d2dddba3": "confirmTaskCompletion(bytes32,address,uint32,uint32[],uint256,uint256,bytes)", "d2ddf1ae": "TradingForest(address)", +"d2de07d6": "_employeeExists(address)", +"d2de2f85": "updateVaultAddress(address)", +"d2de5527": "proposalDepositReward()", +"d2de6474": "senderFor(address)", +"d2de6af5": "inUSDT(int256)", "d2de6cca": "getArrayValueByKey(string,string)", "d2de6ec5": "distribute(uint256,uint256,uint256)", +"d2de76fc": "_isMinter(address,address)", "d2de9989": "stopPreIoc()", +"d2df117c": "NotaryUnregistered(address)", "d2df254c": "weiToUSD(uint256)", "d2df9222": "recoverStockKey(bytes12)", "d2df9cc1": "startTimeSaleNoBonus()", +"d2dff949": "ContributionReceived(address,uint256,uint256)", "d2e013d9": "Execution(string,string,string,string,string,string)", "d2e01b2f": "getLockPosition(address)", "d2e0637b": "createContractTot(string)", +"d2e06a54": "poolAmount(uint256,uint256)", +"d2e0c062": "updateSetSaleDates(uint256,uint256,uint256,uint256)", +"d2e0cbd1": "trainerExtraBalance(address)", "d2e10879": "getReceiptRoot(uint256)", +"d2e108d9": "__removeOwnedAsset(address)", +"d2e10d9d": "ChangeNumberofToken(uint256,uint256)", +"d2e11020": "lockingFee()", +"d2e1470a": "ArgonToken()", "d2e1d201": "setstring(string,string)", "d2e2acf5": "_proxyTransferEvent(uint256,uint256,uint256,bytes32)", +"d2e30585": "rayMul(uint256,uint256)", +"d2e35a5d": "isBetExists(uint256)", "d2e3646c": "optionsConverter()", +"d2e3984d": "uint256_to_uint256(uint256)", +"d2e45915": "DaiToken()", "d2e474b3": "PROMOTORS_POOL()", +"d2e4a597": "RevertedUnstake(bytes32,bytes32,address,address,uint256)", +"d2e55d48": "Referral(address,address,uint256,uint256,uint256)", +"d2e5c89c": "BADRrtAirdropBADR(uint256,uint256,uint256,uint256)", +"d2e69de3": "getAuctionConfigInfo()", "d2e73d78": "withdrawDepositorFunds(address,uint256)", "d2e78ace": "DestructionContract()", +"d2e7a1bb": "tranche_total_unutilized(uint256,uint256)", +"d2e7e77d": "_titan()", "d2e80494": "setConversionRate(uint256)", "d2e81bf9": "initPlayer(address)", "d2e8309e": "test_messageSenderEq()", +"d2e8642e": "blockTimestampLastCertificateStock(uint256)", +"d2e87561": "estimateReward(uint256)", "d2e90d0f": "startTimeICO()", "d2e91b85": "getset()", "d2e9236b": "sendEthValue(address,bytes,uint256)", +"d2e94e85": "maskNoLongerForSale(uint256)", "d2e9953a": "setAdmin(address,address,bool)", +"d2ea5ee3": "setUsableLimitMode(address,uint256)", "d2ea7f7f": "CreditDAOfund(address)", "d2eb6483": "EVMDB()", +"d2ec25c5": "__poolId()", +"d2ec5002": "setAvailableProvider(address,address)", +"d2ec85d3": "burnTokens(address[])", "d2ecb4f9": "initialAllocation()", "d2ed2d30": "setWorst(uint8)", +"d2ed97a3": "hydgPerBlock()", "d2eda057": "checkBool(bool[])", +"d2ee8b7a": "LaborHourToken(address,string,uint256)", "d2eeead7": "PatrickTestCoin()", "d2ef0669": "denyAccess(address,address)", "d2ef3b0d": "getCreateShareTokenMarketValue()", +"d2ef4054": "router01()", +"d2ef42a0": "setTokenMinResolution(address[],uint256[])", +"d2ef4ae6": "EPause()", "d2ef7398": "challenge()", "d2efeef3": "TradableTokens()", +"d2f00475": "long(bytes32)", "d2f03bf6": "registerWithETH(address)", "d2f070b9": "email(address)", "d2f0be99": "getRefund(uint256)", +"d2f13d88": "setMintTap(uint256)", +"d2f167ab": "countryBlacklist()", "d2f1f189": "ICOAddress()", "d2f1f712": "getVoters(uint128)", +"d2f26038": "airdropToStake(address[],uint256[])", "d2f27cf4": "setCelebrityPrice(uint256,uint256)", "d2f28141": "calculateBonus(uint256,address)", "d2f2d549": "CLPTestNetToken()", "d2f32d94": "get_card()", "d2f343c7": "timeWindow()", "d2f3b963": "dateICOEnded()", +"d2f3dd4c": "NextPeriod(uint256,uint256)", "d2f3ea43": "getPurchaseAmount(uint256)", "d2f40cab": "getFunctioName()", "d2f4a50a": "wallets()", +"d2f550bf": "Images(uint256)", +"d2f5aa3d": "TotalWithDraws(address)", +"d2f5c3bb": "transferAvailable(address,uint256)", "d2f5e28b": "requestEthereumPrice(string,string)", +"d2f65044": "ChildHandle(address,uint256,address,uint256[],uint8)", "d2f65fbc": "setMockBytes32(bytes4,bytes32)", +"d2f6b78f": "assignSerialNumber(uint256)", "d2f6f67d": "mintingContract()", +"d2f70c40": "approveCToken(address,uint256)", "d2f7265a": "exchange()", "d2f7c5db": "GetDetail(address)", "d2f7f377": "testRegisterNickWalletEth()", "d2f80c15": "addDivisionJurisdiction(bytes32[],bool[])", "d2f82026": "quickSortBids()", +"d2f84ed5": "getAaveReserves()", +"d2f8cf24": "hashWei()", "d2f8dd45": "Owned(address)", +"d2f934b9": "isAddrSupporter(address)", +"d2f95c72": "pendingSAPEForPool(uint256)", +"d2f9c36c": "presaleMaxLimit()", +"d2f9cb00": "bids_ignored(uint256)", +"d2f9efab": "gameTreasury()", "d2fa1f8b": "proxyPurchases(bytes32)", +"d2fa34b3": "getUserTotalWithdrawnDividends(address)", "d2fa635e": "setMaxGasPrice(uint256)", +"d2fa7170": "votingAddress()", "d2fa9a67": "RESERVED_TOKENS_FOR_FURTHER_TECH_DEVELOPMENT()", "d2fabaec": "VITToken()", +"d2fae182": "_oraclePriceAndTimestamp()", "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)", +"d2fbe42c": "calculateAndSendGasRefund(address,uint256,uint256,uint256)", +"d2fbea8a": "testAssert1(address,uint256)", +"d2fca08a": "getActiveX3Levels(address)", +"d2fcbc86": "maximum_deposits_total()", +"d2fd7e87": "flushNonce()", +"d2fe0d76": "percentDevFund()", +"d2fe62e1": "KYC(address,bool)", +"d2fee4e4": "arrayAdd(address,uint256)", +"d2ff44d6": "BasedPrice()", +"d2ff4b15": "payoutOCDividend(address)", "d2ff5d4f": "allWETHbalances(address,address[])", "d2ff8fd8": "ICOtokensSold()", "d2ffca2d": "currentTotalExcess()", "d2ffd541": "mintAdminCancel(address,address)", +"d30010b8": "revokeTrade(uint256)", +"d3001314": "getFailDetail()", "d30047bc": "firstPreSaleEndDate()", "d3006dea": "ValueFinalized(bytes8)", "d300746f": "pullTokensBack()", +"d30096ba": "lockupPhase4(address)", "d300a034": "oraclize_query(string,bytes[])", "d300a968": "isSecurityToken(address)", +"d300d010": "lockedPrivatorForDevelopSupply()", +"d30104b9": "limiton()", "d3017193": "addUser(address,uint256)", +"d3019478": "requestBTCCNYPrice()", "d301c85f": "ownerAllocateTokensForList(address[],uint256[],uint256[])", +"d302312b": "assToAllApprovals(uint256)", "d30272b8": "signAgency(uint256)", "d302af4a": "isAirdropContract()", "d302b0dc": "unFreeze(uint256)", +"d30369a3": "getCdpsById(uint256)", "d303b750": "Coupon(address,uint256,uint256)", "d303e3b2": "checkMidiNoteValue(uint8)", +"d303e7b2": "getRank()", +"d304380b": "triggerAirDrop(address)", "d3050195": "_ownsRobot(address,uint256)", +"d3053071": "_masterchef()", "d305399d": "addToWhitelist(address,uint16,uint256)", "d305577e": "GSSingle(uint256)", "d305671a": "Dario(uint256,int256,uint256)", @@ -120921,338 +221211,628 @@ "d30592c6": "_trim(uint256[],uint256)", "d3059c91": "maxTokensForCommand()", "d305a45d": "requestDivident()", +"d306254d": "burnTracker()", "d3062b24": "getIndicesWithClaimableTokensForBuyers(address,address,address,uint256)", "d3066879": "withdrawVestings(address)", +"d3066daf": "bscxSafe()", "d306967b": "TokenCreated(uint256,string,uint256,address)", +"d306f36e": "mag()", +"d3078c94": "gauge_relative_weight(address,uint256)", "d30792d4": "bonusesMapPos(bytes32)", "d30796a2": "OwnerTransfer(address,address,uint256)", "d307cd53": "_b4(string,uint256)", +"d3080cbf": "getTotalReferReward2()", "d3087ff5": "startOpenPpTime()", "d3088b52": "transferWithMessageAndRequestAddress(address,uint256,address,bytes)", "d3088b5f": "CesaireToken()", "d30895e4": "player1()", "d308cbe2": "withdrawMoneyByAdmin(uint256,address)", +"d308ce64": "claimLBD()", "d30920c1": "contractTotalInvested()", +"d30944b3": "changePrice(address,uint256)", "d3098883": "memberFee()", +"d3098b9a": "tables(bytes32)", "d30a119b": "calculateBonusTokens(uint256)", "d30a1325": "checkProposalExistence(string)", "d30a512e": "betOnColumnOrDozen(bool,bool,bool)", "d30a969a": "RemiCoin(uint256,string,string,uint8)", "d30b5386": "payFee(bytes32,uint256,address)", +"d30b827f": "userBidsIndex(address)", "d30bbde8": "checkWorkingInfra(uint256,uint256)", "d30beffa": "unholdGold(address,uint256)", "d30bf323": "setTaskRewardPaid(bytes32)", +"d30c04a0": "drawInternal(uint256,uint256)", "d30c0a64": "encodeUint(uint256)", "d30cad77": "nextRoundDuration()", +"d30cf4de": "getCycleDividend(address,uint256)", +"d30d4b96": "getLavaPacketHash(bytes,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"d30d6418": "totalDAITokenToSellForTheNext8Hrs()", "d30e2004": "setRegionUrl(uint256,uint8[128])", "d30e268b": "saleTokensPerUnit()", +"d30e2d0c": "findTokenConfigIndexBySymbol(string)", "d30e9302": "distributionTokens()", +"d30eafd0": "EnableDistribution()", +"d30ec5d7": "publicSellLength()", +"d30f133d": "updateMainAdmin(address)", "d30f945a": "setNewManager(address)", "d30fa946": "fulfillDeliverable(bytes32)", "d30fbd0d": "safeSubtract(uint256,uint256)", "d30fc8a1": "FundsAdded(uint256)", +"d30fff63": "setAggregateAddr(address)", "d3100538": "YOLOCASH()", "d3109af3": "drainWei()", "d310bc32": "releaseName(string)", +"d310f49b": "vaultDebt(uint256)", "d3111d3f": "_getLockedAmount(address,address)", "d3115524": "_bptc(uint256,uint256,uint256,uint256,address)", +"d31187ab": "presaletime()", "d3118a5a": "addDoc(string,string)", "d3119dc0": "minEtherForAccounts()", "d311b44d": "everyBidFee()", +"d311ff20": "setTeamProfitPercent(uint256)", +"d3127e63": "setMaxLeverage(uint256)", "d312846b": "uniqueContributors()", +"d312c61c": "checkKey(bytes32,bytes32[],bytes32)", +"d312e8e5": "getAllScalingFundsAgents()", "d313f235": "terminateTokenSale()", +"d3140613": "getStakeHolderInfo(address)", "d3140a65": "createOpenLockAndDraw(address,address,uint256)", "d3146a46": "Claim_TRAC_9600()", +"d315ad4c": "_getSingleProtocolFee()", +"d3162500": "legendre_bit_multi(uint256,uint256,uint256)", "d316e912": "deleteGrantee(address)", +"d316eddd": "distributionReward()", +"d3182bed": "getAnchorCount()", "d3183864": "calculateMultiplierAfterBurn(address,uint256)", +"d3184e80": "isContractAdmin()", "d3195184": "_canNowTransfer()", "d3195c82": "refundTransactionAfterDisputeFee(uint256)", "d319ab75": "getProposalContractor(uint16,uint16)", +"d319e760": "lexContractAddress()", "d31a8be1": "setCentsPerEther(uint256)", +"d31aa18d": "serviceSetPrice(uint256,uint256)", "d31af484": "updateTokenUri(uint256,string)", "d31b3320": "getUserTokenInfo(address)", +"d31b332a": "OlchaFuck()", +"d31bc67e": "roundownables(uint256)", +"d31bffff": "team_mhs()", "d31c153c": "AllocateAgentChanged(address,bool)", "d31cfed6": "initialMonthWithdraw(uint256)", +"d31d5c2d": "walletSetMultiSigWalletAddress(address)", "d31d7b0a": "MoonCatRescue()", +"d31dc55d": "cancelOrder(address,address,address,uint256,uint256,address,uint256)", "d31efc7e": "createHero(string,uint16,uint16,uint16)", "d31f0f38": "RamenCoin()", +"d31f1384": "setMinDeposit(uint104)", +"d31f3f6d": "integrate_checkpoint()", +"d31f973c": "daoTaxBP()", "d31fdffd": "setHammer(address)", "d31feea1": "OpenLongevity()", "d31ff13c": "changeContractOwner(address,string)", +"d320ac30": "getMatchedData(uint256,uint256,address,uint256)", "d320ac9a": "DonationDeposited4Matching(address,uint256)", +"d320bb9b": "setVerifiersPerShard(uint256)", +"d321ea7c": "dfgGoldKey()", +"d321ee7d": "setRouting(address[],address[])", "d321fe29": "getAmount()", "d3220144": "newPriceDecreaseRate(uint256,uint256)", +"d32215e3": "Multisigs(uint256)", "d3226425": "DuMangoCoin()", +"d323a115": "getMineInfo(address)", +"d323c654": "extractSignature(address,uint32,bytes32,uint64,bytes,bool)", "d324191c": "Codexstandard()", +"d324e14b": "claimBNB(uint256,address)", "d3251aa2": "setHelpCoinAddress(address)", "d3257034": "AgriChainCultivation()", "d3258b9e": "DevDorothyCoin()", +"d325a2c1": "maxFreeCollateral(address,bytes32)", "d325c2e8": "revertPurchase(address)", "d3261592": "dripRate()", +"d3262b55": "onBuys(address,uint256,uint8)", "d32632fd": "migrationGate()", +"d326363d": "getUserRefsStats(address)", "d327523a": "getTotalNumberOfBoards()", +"d3275426": "_minBlackAndWhiteBuy()", +"d3276080": "TokenAllocated(address,uint256,uint256)", +"d327c1eb": "getEIP712DomainHash(string,string,uint256,address)", "d329ce51": "developer_cycle(address,uint256)", +"d329f047": "_minBurnTime()", +"d32a57fa": "newpumpeds()", "d32a7ee0": "updateLand(uint256,uint256,uint256,uint256)", +"d32a8f67": "defaultPair()", "d32a9cd9": "settle(bytes32,bytes32)", "d32ab21d": "voteFor(uint8,uint8,uint8)", "d32aba42": "getPresaleBonusAmount(uint256)", +"d32b0c10": "pooled(address)", "d32b1bea": "encodeAddress(address)", "d32b607c": "sumElements(uint32[])", "d32b8575": "_startAuction(uint256)", +"d32bb02b": "changeOp(address)", +"d32bfb6c": "cancelAndRefund(uint256)", "d32c943a": "resolveChallenge(bytes32)", "d32cb0fe": "exercise()", "d32cbabb": "Ast()", +"d32d665b": "GS_betSizeFinney()", +"d32d9ebd": "tradeShouldSucceed(address,address,uint256,uint256,uint256)", +"d32dd624": "cntUserAttacks(address)", +"d32e18d1": "getBuyerBalance(uint256)", "d32e245b": "getContributorRemainingCap(uint256)", "d32e29de": "setApproveFee(uint256)", "d32e48c0": "LockOpen(address)", +"d32e6c7e": "distribute_funds()", +"d32e81a5": "lastCheckpoint()", +"d32ecc11": "streamLpReserved(address)", "d32ef1e5": "RhodonToken(address)", +"d32fc05a": "Channels(bytes32)", +"d33081d5": "isUserExist(address,string)", +"d3309a29": "isAddrCreatorOfValidator(address,uint256)", "d3309a7e": "productTribe(string)", "d3313802": "EtheraffleDisbursal(address)", +"d3317121": "carSerialNumber(uint256)", "d331aeb3": "getAllFiatTransactionsCount()", "d331b696": "computeNameFuzzyHashET(string)", "d33219b4": "timelock()", +"d33253e9": "createEvent(string,uint8,uint8,uint256,uint256,uint256,uint256)", +"d3338cf0": "zCreateProposal(uint256,uint256,uint256,uint256,uint256,uint256)", +"d333c6f1": "cadidateList(string,uint256)", "d333d7cf": "destroyShares(address,uint256)", "d333ec79": "changeServiceAccount(address)", "d334d75b": "expireLoan()", +"d335ebda": "getTemplateId(address)", "d3363dd7": "icoThresholdBonus3()", "d3364687": "PRESALE_START()", "d33656e0": "primaryOperator()", "d336ac80": "getPersonInfo(uint256)", +"d336b55e": "wtrxPerBlock()", "d337616e": "resetLottery()", +"d337836f": "setFastStakingEnable(bool)", "d337b9c9": "myWeapons()", +"d337b9fe": "bproTotalSupply()", "d337ce86": "addProject(uint256,string,address,uint256,uint256)", "d337e72e": "EtherToken2()", +"d337f6e6": "getBound3()", "d3382a55": "whitelistRate()", +"d3385923": "Reconpatents()", +"d338e52b": "BalanceChange(uint256,address,uint256,uint256)", +"d338edf3": "hasClaimed(address,uint8)", +"d338faf3": "addBlackList(address[])", "d3392545": "spawnItem(uint256,uint256,address)", +"d33937b5": "getCapPerAccount(address)", +"d33a1a22": "sendDenominatedInDai(address,uint256,bytes)", +"d33a2cb0": "COOAddress()", +"d33a3924": "OnBuyToken(uint256,address,address,address,uint256,uint256,uint256)", "d33abd33": "t_2nd_StageEnd()", +"d33abfd1": "rfiContributed(address)", "d33b79d9": "addBallotAndVoterNoPk(bytes32)", +"d33bb24a": "FindYourToken(uint256)", "d33c0a4d": "getMyCells()", "d33c449f": "gesamtGuthaben()", "d33ca02b": "externalCall(address,uint256,uint256,bytes)", +"d33cca21": "verifyXtokenBurnSwap(uint256)", "d33cf9fa": "MultiSigMint(address)", "d33d1aac": "getWeeklyTokensForWebsitesAmount()", "d33d5f3e": "CLOSE_TIME()", "d33d6732": "totalSupplyMintTransfer()", "d33d6f65": "Delivery(address,uint256,uint256,int256,int256,int256,int256,address)", +"d33deddb": "autoPoolDist(uint64)", +"d33e05ef": "sd(address,uint256)", "d33e1a48": "genRNGContractAddress()", "d33ecfee": "setResume()", +"d33ef3a1": "publishExtension(string,string,string,uint8,string)", +"d33f429e": "buyEngineThree()", +"d33f7978": "seedAddress()", +"d33ff411": "registerAsset(bytes32,bytes32,address,address)", "d3400a1d": "etherRatioForOwner()", "d34047b6": "mint(address,string,bytes32)", +"d3406abd": "expectedReturn()", +"d34070a6": "arbitrageBuy(address,address,address,address,uint48,uint256,address)", "d340ab41": "addInvestorBonusInTokens(address,uint256)", +"d340b18a": "changeMachineReferrerAccount(address)", "d340dd8a": "getCCH_edit_13()", "d340e8f8": "setDistributionPercentage(uint256,uint256,uint256)", "d341281a": "ALH()", +"d341519e": "get_max_supply()", "d3418fb7": "capOfTotalSupply()", "d3419bf3": "prices()", "d3419d4e": "TokenAiContribution(address,address,address,address,address,address,address)", "d341e052": "JoyGameDemo(address,address)", "d342275e": "setProgress(uint256)", "d342c598": "Bou(address)", +"d342da08": "mintedHxy(address)", +"d342db50": "arbitrationLicenses()", "d342e4f4": "runInOneDay()", "d3437bd3": "ProofOfStableClone()", "d3437fe0": "assertFact(uint256,bytes)", +"d3442edf": "C(uint256,uint256,uint256,uint256)", "d3446856": "tournamentPaused()", +"d344d499": "getEquity(address)", "d344e01b": "stopTransferToken()", "d3451379": "updatePower(uint256)", "d3456121": "amountInContract()", "d3462259": "howManyTokens(uint256,address)", +"d34628cc": "addBots(address[])", +"d346658b": "cozyCoolDowns(uint256)", +"d346bd18": "aff_to_players(uint256)", "d346feb8": "changeCertBot(address)", "d3471035": "KarmaToken()", +"d34729c7": "applyCampaign(bytes32,uint8,string,string)", "d347c205": "transferableTokens(address,uint64)", +"d347d3ff": "revokable(uint256)", "d347de03": "setPlayerGeneralCd(uint64,uint32)", "d3481bd0": "buyBlock(uint256,uint256)", "d3484c1c": "TOKEN_SUPPLY_MAINSALE_LIMIT()", "d348b409": "calculatePrice()", +"d348b5a4": "withdrawOther(bytes32,address,address)", +"d348bc6d": "_pauseOff()", +"d348c964": "adminAllowPresaleGenerator(address,bool)", "d348ee9a": "correctResult(int16)", +"d34925d7": "finishChangeRewardPercentLP()", +"d349eb4e": "inCaseMarkStuck()", "d349f8b4": "MobileGoToken()", "d34a280a": "setPreAmounts(uint256,uint256)", "d34a412c": "switchRankings(uint16,uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"d34ac2bc": "getOracleAggregator()", "d34acd12": "functionCalls(uint256)", "d34afaff": "getLatestIndex(address)", "d34b1537": "minFundingReached()", "d34b1aef": "returnUnsoldSafeLarge()", "d34b2451": "BurritoPurchased(uint256,address,uint256)", +"d34b4da1": "yield21Sep30Maturity()", "d34b6cd3": "BBDToken(uint256,uint256,uint256,uint256)", +"d34b6fb1": "smartSkim(address,address)", "d34b7e25": "checkWin(uint256[])", "d34bb772": "EndsAtChanged(uint256)", +"d34bbc64": "minerBurn(uint256)", "d34be5be": "startVotingPrepare(address)", +"d34c2223": "_beacon()", "d34cc179": "updateDaoContract(address,string)", +"d34d4fa5": "setExpireBlocks(uint256)", +"d34d6062": "checkPlans()", "d34d8e43": "oracleItQuery(string,string,uint256,uint256)", "d34dd1f0": "safeWithdrawal(address,uint256)", +"d34dfc68": "getCylinders(uint256,uint256,uint256)", +"d34e3252": "boostLpStream()", +"d34e3c83": "bulkRegister(uint256,bytes32)", "d34e4b20": "getWinnerHistory(uint256)", "d34ed095": "getSoilTempException(bytes32)", +"d34efadb": "getMultiplierBalance(address)", +"d34ffdc7": "isOwnerCandidate(address)", "d35066e6": "rsrvToSale(uint256)", "d3511f82": "getRoundBetNumber(uint256,uint256,uint256)", "d3516b7e": "setVote(uint256,bool)", +"d351b5fd": "setBankContract(address)", +"d351c4ab": "syncSupplyByDay(uint256)", +"d3522d51": "sides()", "d3525adf": "setMetadata(bytes32,bytes32)", "d35262ef": "getInt256Min()", +"d3527bd6": "batchAddWhitelisted(address[])", "d3528d9b": "createBetAcrossDeposit(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", "d352a862": "ownerOfTwitterId(uint256)", "d3535452": "buyPosition(address)", "d353a1cb": "finish(uint256)", +"d353ac7c": "getHoldings()", +"d353e99f": "setOpenseaEnabled(bool)", +"d3548f8b": "WorkerPoolSubscription(address,address)", +"d3552712": "getUserReferralInfo(address)", "d3554dd5": "NieShichaoToken()", "d35590c2": "sponsors(address)", +"d355e1db": "TOKEN_MINT_TOTAL()", "d355f139": "requestBatchLoans(uint256)", +"d3560c74": "TransferGenesis(address,address)", "d3565934": "YANG()", "d3568560": "calcDates(uint256,uint256)", +"d3568dc3": "issueToken(address,string,string,string,string,string,string,string)", "d356a28b": "addSERAPHIM(address)", "d356a879": "removeAddressByIndex(uint256)", +"d3571a17": "operationsContract()", +"d357958b": "liquidityToAdd()", "d357aa15": "raise2ndAppeal()", +"d357edd4": "LogServerUnregisterCanceled(string,address)", "d357f0ce": "_checkPixelLeft(uint256)", "d357ff87": "sweepRoundsActive(bool)", +"d3585a9e": "buyTicket(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"d35860b1": "enableSideChain(uint256)", +"d358f793": "returnValid()", "d359b0c7": "XeniaToken()", "d359be70": "distributeExternal(uint256)", +"d359dc8f": "beauties(uint256)", "d359f82c": "updateExpiry(uint256)", +"d35a904d": "depositFrom(address)", "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)", +"d35cf790": "lock(uint256,uint256,address)", "d35cf913": "mint_tokens(address,uint256)", "d35d031e": "SellerChanged(address,address)", +"d35d284e": "firstReserve()", +"d35d7148": "isE(address)", "d35d90ba": "MPKToken()", +"d35db587": "removeDepositProfileAtId(uint32)", "d35e29d7": "mint(address,uint32)", +"d35e469a": "finish(address,uint256,uint256)", "d35e48e6": "PLBToken()", "d35e6537": "IONIATOKEN()", "d35e656b": "userNameTaken(string)", "d35f0a16": "_getShares()", +"d35f19d7": "npoll()", "d35f4a99": "mint(int256,address,uint256)", +"d35f6721": "approve_62(address,uint256)", "d35fbbfb": "range(uint256,uint256,uint256)", "d3604bc9": "yesContract()", +"d3609e68": "startChangeMinTradeSplit(uint256)", "d3614854": "getAdministratorETH()", "d3617e7a": "MyToken(address)", "d361ab64": "sendFreeTokens(address,uint256)", +"d361cc3c": "secondStageFund(address)", +"d3623432": "RemoveWorker(address,address)", "d3626d09": "getyestoday()", +"d36277dc": "withdrowUserETHorDaiAll(address[],uint256)", +"d363002b": "setStudent(uint8,string,string,string,string,bool,uint8)", "d3631e00": "refundUnconfirmed()", +"d3632095": "newContract(uint256,uint256,bytes32,address,string,string)", +"d3635628": "logBytes26(bytes26)", +"d3635a02": "withdrawUsdt(uint256)", "d3637c27": "icoArray(uint256)", +"d363b051": "plyrForPrizeOrders_(uint256)", +"d363b56f": "currentPeriodHsuTotal(uint256)", +"d364d13e": "getWithdrawAmount(address,address,address)", "d3650fb8": "approvers(uint256)", "d365a08e": "masterAddress()", "d365a3fb": "settleBet(uint256[],bytes32)", +"d3661fa5": "WALLET_ID()", +"d3662452": "buyPool(uint256,uint256,address)", +"d3662cfd": "le(uint256,uint256)", "d366f83b": "allSidesPledgedAmount()", "d366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", "d3670cb4": "BitcoinBlackToken()", "d3671166": "PurchaseSuccessful(address,uint256)", +"d3672a33": "setUSDPPriceForLUCAX(uint256)", +"d367380b": "plow(uint256)", "d367a398": "NVTAddr()", +"d367e2aa": "changeFeePool(address)", +"d36811b9": "Opts(uint256)", +"d3681b95": "uniPool()", +"d368236d": "holderDetailInTimeSlot(address)", +"d3682d57": "extraTokensAllocated(address)", +"d3690a61": "getbetamount()", +"d3691b20": "_overnightFeeRatio()", +"d3693606": "getAllowedTokenNames()", "d3695161": "deleteUser(string)", "d369a744": "CCtestToken(address)", "d36a1fa8": "ALKACOIN()", +"d36a2f67": "Deposit(uint256,address,uint256,uint256)", "d36a35c9": "strikersBaseContract()", +"d36a72d8": "_proxyAdmin()", "d36a8026": "Phoenix()", +"d36a9746": "getTotalUserFees(address)", +"d36aa6f1": "chargeGas(address,uint256)", "d36ae26b": "commBallotPriceWei()", "d36afad5": "hasKey(address)", +"d36b907d": "SOLO_MARGIN_ADDRESS()", "d36b96a9": "controllerFailed()", "d36b9e64": "contributorsPeriodsElapsed()", "d36bed21": "getGameAddressById(uint256)", "d36bf8a1": "increaseWithdrawalChunk()", +"d36c98dc": "setAutoRenewStakeStatus(address,bool)", +"d36d0497": "sellPercent()", "d36d9b19": "request_callback(uint8)", "d36dbc0c": "addWineryOperation(string,string,string,uint256,uint16,string)", +"d36dedd2": "getOrder()", +"d36e0ef0": "gg32(uint32)", "d36e0f39": "EIP20Token()", "d36e9ac3": "burnUnused()", "d36e9b2a": "RentalAgreement()", +"d36ec061": "playerIds(address)", "d36ef2cc": "PolicyPalNetworkCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d36f0e9c": "etherForCharity()", +"d36f147f": "messages()", "d36f5c87": "stitch(int256,int256,bool)", "d36f69eb": "getEthInCents()", +"d36fdb18": "changeTimeToChallenge(uint256)", +"d36fe2d5": "bpValue()", "d3701ff2": "TongToken()", "d3707129": "_removeShareFromLastOwner(address,uint256,uint256)", "d3708487": "setInfoAboveSpot(uint256)", +"d3710c40": "account2(address,uint256)", +"d3716630": "tokenIPFSHash(uint256)", +"d3717a02": "setBusinessAddress(address)", "d37194f5": "getTotalDepositsAmountLeft()", +"d3719f04": "WithdrawFees(address)", "d371d551": "addAddressToCappedAddresses(address)", +"d371db83": "coinIndex(address,bytes32)", +"d371f8fa": "stratCooldown()", +"d37212af": "RefundLog(address,uint256)", +"d37238a1": "updateMfrmPerBlock(uint256)", +"d3727c89": "createEPNwithENS(address,uint256,string)", "d372e3a0": "isCrydrViewAddress(address)", +"d372fa59": "FIRSTSTAKE(address)", +"d372fbcd": "isForkingMarket()", "d3732642": "FastRealisticPyramid()", +"d3733fa7": "_addRetailer(address)", "d373507b": "setAllowSell(bool)", "d37360a0": "efw()", +"d373a114": "returnOwnedToken(address)", +"d373f4ee": "direct_drop_address()", +"d3741e4c": "profitValue()", "d3749a15": "user_contract()", +"d374cf8f": "expansionPercent(uint256)", "d375b921": "orderUsable(address[8],uint256[6])", +"d375d668": "total_of_reco()", +"d375e68a": "apiVersion(string)", +"d3760436": "tokensToSwap1(uint256)", "d3775371": "has_reading()", +"d377b4d1": "referralFees(uint256)", "d377bc5f": "lockedMoney(bytes16)", "d377dedd": "currentNiceGuy()", +"d3780008": "add_trusted(uint64,address)", +"d3785974": "minExecProviderFunds(uint256,uint256)", "d378f4e0": "NOOR()", +"d379465e": "setKunMax(uint256)", +"d3796738": "_factorylimit()", "d37990ce": "setGenerationSeasonController(uint256)", "d379be23": "claimer()", +"d379dadf": "getUserInfo(uint256)", "d37a9bb0": "restrictTransfers()", +"d37aec92": "getKey(string)", "d37aff82": "changeStatus(uint8,bytes32)", "d37b34d7": "blacklistAccount(address)", +"d37b7fa6": "proposeMelodyAddition(address,string)", "d37b8a96": "deploy(string,string,uint8,string,address)", +"d37bb707": "OnCapSet(uint256,uint256)", +"d37c04a7": "balanceOfYYCRVinyTUSD()", +"d37c4d8b": "debtBalanceOf(address,bytes32)", +"d37c5db8": "usdcAmountFromDai(uint256)", +"d37c6c9e": "destruction()", "d37cd1d9": "TalentCoin(address,uint256,string,uint256,string,uint256)", +"d37cd55d": "updateBurnerStatus(bool)", "d37d753f": "spin(address,uint256)", +"d37d87c4": "weaponTeam(uint256)", +"d37db1d2": "BLOCKS_PER_YEAR()", +"d37e190c": "tokenHost()", +"d37eb950": "marketingAndRNRBal()", +"d37ee6c0": "triggerAddresses(address)", +"d37f4acf": "approves(address)", "d37fe6cb": "balanceOfWithoutUpdate(address)", +"d380599a": "setTenPercentCap(bool)", "d3807fa5": "NameChange(string)", +"d380c38c": "setBtcxPower(uint256)", +"d380c679": "setFeeGrowthGlobal0X128(uint256)", "d380e036": "marketDefaultFeeLow()", "d3811c0f": "setMetadataBase(string)", +"d38120c9": "transferCheck(address,address,address,uint256)", "d38159b8": "testPass()", "d38185d3": "_buyXid(uint256,uint256,bytes32)", "d381ba7c": "setRootUser(address,bool)", "d381c67e": "isRentAuction()", +"d381d6ba": "getWantTokenWhiteListAndETH()", +"d381f212": "ECOSYSTEM()", +"d3821a3c": "getReward2()", "d383b80d": "getCurrency(bytes32)", +"d383e622": "bioPerBlock()", +"d383f2c7": "addNewCertificate(bytes32,bytes32,bytes32,bytes32,bytes32)", "d383f646": "issue()", "d384077d": "_closeProvider(address)", +"d3840b47": "limitList(address)", +"d3844445": "yourStakedGLXYLp(address)", +"d38446e2": "Recovery(address,address,address,uint256)", +"d38447d0": "usdAmountFromDai(uint256)", +"d38480cb": "replaceAllStakableDirectory(string[],address[],address[])", +"d384a756": "lastContributor()", "d384af87": "checkpopa()", "d384d177": "haveCommonPrefixUntilZero(bytes32,bytes32)", "d385293d": "confirmTokenTransferToBooking(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d38537cf": "TimerAuction(string,uint256)", +"d3853b5b": "swapPiptToErc20(address,uint256)", +"d3856f3b": "voter(uint256,uint256)", "d385fac9": "bwin()", "d38609f9": "unhaltFX()", "d386130c": "Encrypt(uint256)", +"d38642f0": "mix(bytes32,uint256[2],uint256[2][2],uint256[2],uint256[4],address,uint256,address)", "d38685ee": "unlockGlobalToken()", +"d386dee3": "isFarmActive()", "d3872d57": "getLandRevenue(uint256)", "d387978d": "cancelled(address,bytes32)", "d387c4c1": "getOwnedTokens(address,address)", +"d387e9a9": "Set_Best_Wishes(string,string)", "d388089a": "getJobDetail(uint256)", "d3884c3f": "removeService(bytes32)", "d38875ec": "addDeal(uint256,uint256,string,string,uint256,string,bytes32)", +"d388bd02": "percentStubFund()", "d388e416": "getAccountReferalsStats(address)", "d3890a43": "DaoCasinoToken(uint256,uint256,uint256,address)", +"d38955e8": "foo1()", +"d3895a19": "distribution_contract_uni_principal()", "d3895c91": "changeConversionRate(uint256)", +"d389734b": "getUserScoreProgressPerSec(address)", +"d38976db": "UINT_ITEMBAR_PROTECT_PERIOD()", +"d389800f": "earn()", "d38ac5ac": "WayBackToken()", +"d38b2110": "getHeapSort256()", +"d38bcdee": "setUsdcAddress(address)", "d38bd9f0": "newTokenOwner()", "d38bee56": "PlaceSell(address,address,uint256,uint256,uint256)", "d38bfff4": "transferGovernance(address)", "d38c3253": "ownerSelfDestruct()", "d38c4cca": "removeFromTokenTransferDisallowedAddresses(address)", +"d38c8c61": "balanceOfyvm3CRVinWant()", +"d38c97c9": "_TotalPresaleEth()", "d38cba4b": "paymentRewardTokensPriority(uint256,uint256)", +"d38d0a92": "rewardType()", "d38d0f28": "updateSplit(uint256)", +"d38d2bea": "getExpectedRate(address,address,uint256,bool)", +"d38d2e55": "MultisigReparametrized(bytes32)", +"d38d7029": "tokenToEthTransferInput(uint256,uint256,address)", "d38e5ab7": "TransferDisable()", "d38eb9d3": "escrowFrom(address,uint256)", +"d38f2d82": "confirmationTimes(uint256)", "d38f3b68": "getMedications()", +"d38f74c5": "burnRateBase()", +"d38f79d1": "assert0()", +"d38f9ca7": "removeProfitAccount(address)", +"d38fb1d1": "eveSuperPlayer(bytes32,uint256,address,uint8)", "d38fe43f": "setMembershipContract(address)", "d390021d": "getLastTimeUpdated()", +"d3907377": "Activitys(uint256)", +"d390e333": "SRA(uint256)", "d390e819": "disableDonationContract()", "d391014b": "ROLE_ADMIN()", "d391a970": "removeFromOwnedTokens(address,uint256)", "d391ce7a": "CrowdsaleContract()", +"d39235b6": "gme()", "d3927c15": "reimburse()", "d392c5a2": "getNumOptionChains()", "d3933154": "MYL(uint256,string,string)", +"d3933ada": "releaseReserve()", +"d39381ad": "totalSupplySum()", +"d393965c": "validateUint64(uint256)", "d393c871": "register(string,address,uint256)", "d393cde5": "wholeLineWrong()", "d393f628": "changeDemurringFeeOwner(address)", "d3943976": "getSGCUsers(address)", "d3943ab4": "setIntArr(uint256,uint256)", "d3943c83": "numberOfWithdrawls()", +"d39451e3": "getNamespace(address)", "d3946ea4": "manuallyEndAuction()", +"d3948a4c": "isLeftTokenBurned()", "d394a12e": "secondPresaleStart()", "d39502bb": "AIBITTECH()", +"d3951002": "registerUser(string,uint256)", +"d39512b8": "BALLOON_MAX_TYPE()", "d3953822": "getThisAddress()", +"d3953944": "removeClaim(address,address,bytes32,bytes32)", +"d3957872": "setTokenMaxAmount(uint256)", "d395ee0f": "setQuickBuyPath(address[])", "d3962239": "getCustomerPassword(address)", "d3964ca1": "operationsEthWallet()", +"d3967685": "AttackPir(address)", "d397e9e4": "getDisputeCrowdsourcer()", "d397f861": "TRAC_Tokens_left()", "d3980d87": "ReferenceToken(string,string,uint256,address[],address)", +"d3986f08": "swap(uint256,address)", "d398806d": "updateMinJump(uint256)", +"d398809b": "convertToBep2Amount(uint256,uint256)", +"d3993418": "SetMarketInterestRateModel(address,address)", "d399354b": "KYC_USD_LMT()", +"d399f119": "juicy()", "d39aa15c": "_getTransferFeeAmount(address,address,uint256)", +"d39ac0cb": "getUniswapRouterAddress()", "d39b0cbb": "Start10()", "d39b1d48": "setDistributeAmount(uint256)", +"d39b6f78": "daysSinceNerdReleaseTilNow(address)", "d39b7e4f": "setBPAddress(address)", "d39bbf06": "MAX_INVESTOR()", +"d39c1fef": "userToStakes(address)", +"d39c3343": "withdraw_wETH(uint256)", "d39c7880": "setAddressOfERC20Token(address)", "d39c9afd": "OwnerKill()", +"d39ca7de": "setPendingSuperAdmin(address)", "d39cb111": "getShortId(bytes32)", "d39cce1c": "calculateSaleReturn(uint256,uint256,uint16,uint256)", "d39ce83a": "paymentMixed(uint256,uint256,uint256)", "d39cee11": "benchTransfer(address[],uint256[])", +"d39d44b3": "secondChar()", "d39d8fce": "presaleStart_6_December()", "d39de6e9": "getAuthorizedAddresses()", "d39e4607": "LogIcoCompleted()", @@ -121261,156 +221841,298 @@ "d39ec1fe": "currentTethers(address,uint256)", "d39f4149": "fxpMul(uint256,uint256,uint256)", "d39f532d": "SafeGift(uint256,string,string)", +"d39fa233": "numbers(uint256)", "d3a057c8": "isConfigured()", "d3a05872": "AutoFareCalculator()", "d3a0d0ab": "RTokenBase(uint256,string,string,uint8,bool)", +"d3a10792": "transferOCRLink(address,address,address,uint256)", +"d3a201c4": "setId(uint256,uint256,uint256,uint256)", +"d3a252c7": "setMinimumBalanceForPayNoder(address,uint256)", +"d3a2ab10": "assignRole(address,string,string)", "d3a2d050": "addData(uint256[])", "d3a3086e": "ActorCoin()", +"d3a32bb0": "setRewardFactorByType(uint256,uint256)", +"d3a33629": "mintLand(address,uint256)", +"d3a3537e": "ama(uint256,uint256)", +"d3a37165": "lastClaimedTimestamp()", "d3a39686": "getAddress(bytes32,bytes32)", +"d3a417a2": "ownershipTransfer(address)", +"d3a4583e": "getMoneyAfterFail()", +"d3a48036": "updateProtocol(address,address)", "d3a516d3": "viewSuperOwner()", +"d3a53825": "CancelPayment(uint256,bytes32)", "d3a56ec3": "processRequest(uint256,uint256,uint256)", "d3a5768b": "RoundWinner(address,uint256)", "d3a57b9f": "showRdWonNum(uint256)", +"d3a5b01b": "fixedBytesHex()", +"d3a5b107": "changeOwner(bytes32,address)", "d3a5dcb0": "EQUITRADER()", "d3a60bd5": "Exchange(address,uint256,uint256,uint256,address,address)", "d3a61150": "setDatabaseDownloadUrl(string)", +"d3a637f2": "totalDrawn(address)", +"d3a638ae": "report(bytes32,uint256,uint256,bytes32[])", "d3a699cd": "PePaDe()", "d3a6be66": "donotXXXDappToken()", "d3a6c234": "benWallet()", +"d3a6d03c": "finishStaking()", "d3a70dba": "getReaderId(bytes32)", +"d3a71202": "totalIssuedPynths(bytes32)", "d3a73d12": "modifyLevelCaps(uint256[])", +"d3a73e8b": "allowPayouts(address,uint256,string)", +"d3a7f65a": "DECAY_PER_SECOND()", +"d3a80e00": "succeedingMigrate()", +"d3a818ca": "____deprecated____()", "d3a85394": "currentPeriodTokenCollected()", "d3a86386": "minimumBid()", "d3a871e9": "REELToken()", +"d3a88e81": "OnWhiteListChange(address,address,bool,uint256,uint256)", "d3a9187e": "mintTemplate(uint256,int256,uint256,uint256,uint256,string)", +"d3a980b7": "sendOutEarnings(address)", "d3a99388": "JcashUpgradeableToken(address)", +"d3a9e308": "lastEarnAt(address)", "d3aa22c7": "transferTLA(string,address)", "d3aa831f": "testOwnedTryAuth()", +"d3aad9ef": "unwhitelistCountry(uint16)", +"d3ab996e": "updateMaxTotalStaked(uint256)", +"d3abfc06": "etherValue()", +"d3ac25c4": "changeAllocationStrategy(address)", "d3aceae2": "_balance(address)", +"d3ad1cbf": "_calculateFee(uint256,uint256)", +"d3ad34cc": "_setWpcSpeed(address,uint256)", +"d3ad3a3a": "ethozsent()", +"d3ad8791": "transferBond(bytes16)", +"d3ae26b3": "lendingPoolAddress()", "d3ae2814": "LogTokensFrozen(bool)", "d3aefeeb": "pauseUnpauseICO()", "d3af4dc7": "processRequest(uint256,uint256)", +"d3b0b1e4": "tme()", "d3b0d9eb": "refundFunds(address)", +"d3b0f414": "claimCollateralAtMaturityForSellers(address)", "d3b15dd6": "Millet()", +"d3b15f92": "_decode_sol_bool(uint256,bytes)", +"d3b1719e": "getRValues(uint256,uint256,uint256)", "d3b19ee1": "dislike_trackable(address)", +"d3b1d5c5": "getdepositGas()", "d3b234fc": "getAttoTokensToBeFounder()", "d3b246d0": "upgradeEvilMorty()", "d3b25696": "tradeIntentOf()", +"d3b2f598": "updateAdmin()", "d3b302e7": "applyForMembership(string)", +"d3b33b63": "drift()", "d3b3809c": "EscrowGoods(address,uint256,uint256,uint256,uint16,uint256)", +"d3b3db01": "addERC721Contract(address)", "d3b3eccb": "isARTDistributed()", +"d3b3f73a": "open(bytes32)", +"d3b46393": "getOrderIdForAddress(address,uint256)", "d3b4be21": "Obtener_Reputacion(address)", "d3b5305c": "setAgriChainDistribution(address)", +"d3b54a31": "WTRXPerBlock()", +"d3b553a4": "bonusAmountDegree()", "d3b5695c": "setOraclizeCallbackGasLimit(uint256)", +"d3b57be9": "LogTest()", "d3b58024": "RepeatCustomerToken()", "d3b5c016": "submitSolution(uint256,string)", "d3b5dc3b": "precision()", "d3b6486a": "setLeastFund(uint256)", "d3b6664a": "purchaseTrophy(uint256)", +"d3b688db": "_calculatePaycheckForFixedPrice(uint256)", +"d3b6949d": "ANTIFIAT()", "d3b6ac97": "defenceElementBySubtypeIndex(uint256)", +"d3b6c080": "monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)", "d3b6fbc2": "MOVIECREDITS()", +"d3b718d2": "pendingLenrek1(uint256,address)", +"d3b73c3c": "withdrawWithoutReward(uint256)", "d3b7576c": "update(uint256,bytes32)", +"d3b7b7c0": "OCDividendDistribution(address,uint256)", "d3b7bcf1": "preAllocation()", "d3b7bfb4": "fundingAddress()", +"d3b7c392": "getCurrentCollateralRequirementId()", "d3b7ef5e": "SCE(uint256,string,string)", +"d3b90926": "setWithdrawOpenPositionPenalty(uint256)", +"d3b94aa8": "numberFactor()", +"d3b9d4d6": "changeAllOperationKeys(address,address[])", +"d3ba33fd": "CONTRACT_LP_KTON_ERC20_TOKEN()", "d3ba95ce": "throwsWhenFinalizingIfNotMultisig()", +"d3baaf59": "cuantasPosibilidades()", +"d3bac6a4": "refillStakingContract(uint256)", "d3bac6e3": "coordinatorAccountCount()", "d3bbb2c8": "b13ToBytes(bytes13)", +"d3bbd144": "colorBonds()", "d3bc89b7": "GetGuestTokenNo()", "d3bc9aca": "addCourse(uint256,string,uint256,uint256,string,string)", "d3bca884": "addBalance(address,address,uint256)", +"d3bcca75": "founderLockDayLength()", +"d3bce2e2": "_grouthCondition()", "d3bced2c": "withdrawBotFee(uint256)", +"d3bcf6d1": "Raphael()", +"d3bd465e": "holderID(address)", +"d3bd4bde": "weekCounter()", "d3bd5a4b": "resetUserPromoBonus(address)", "d3bd6e23": "newUpdater(address,address)", "d3bd7713": "setCapAtDuration(uint256)", "d3bdbd8f": "editMilestone(uint256,uint256,uint256,uint256,uint256,string)", "d3bdd242": "isMovingEnable()", +"d3be9d34": "crowdsourcerGeneration()", "d3bf0ce6": "AAP()", +"d3bfa38f": "AccountCleared(address,address)", "d3bfe76a": "revokeApproval(address,address)", +"d3c049d3": "vote(bytes32,bool,uint256)", "d3c0715b": "vote(uint256,bool,string)", +"d3c0c310": "newBot(string)", +"d3c0e331": "admin_destroy()", "d3c13c25": "GCOXAPLToken(string,string,uint8,uint256)", "d3c18378": "getPlayersBalance(address)", "d3c1c838": "batchTransfer(address[])", +"d3c25678": "set_Invest2FulcrumiDAI_NEWContract(address)", "d3c2a592": "claimAsset(uint256)", +"d3c2b0af": "reveal(string,address,bytes32)", +"d3c2e7ed": "SUB_MAX_INDEX_VALUE()", "d3c33c52": "ipc()", +"d3c342e7": "GetCampaignOwner(uint24)", +"d3c40054": "TokensSent(address,uint256,uint256,address)", "d3c4055d": "VITE()", "d3c41dae": "FindCourseBaseOnIdStudent(uint256)", +"d3c4f7f7": "DepositETHCount(address)", +"d3c55897": "removeAddressFromGovernance(address)", "d3c564ad": "tokenZLT()", +"d3c56726": "getAddrByReason(bytes32)", "d3c567c1": "cancelVoteForCandidateByStage(address,uint256,uint256)", +"d3c576cd": "executeSubscription(address,address,address,uint256,uint256,uint256,uint256,bytes)", "d3c5ea45": "ICO_PHASE3_PERIOD()", +"d3c5f137": "getProfileIdbyUrl(string)", +"d3c6027a": "Burn10percentOfLockedTokens()", +"d3c61444": "resetRewardPerBlock(uint256)", "d3c62676": "MiamiToken()", "d3c65384": "ContributedAmount()", "d3c65737": "sumICOStage4USD()", "d3c683e5": "LOG_FailedDraw(address,uint256)", "d3c6a6d6": "getWitnessCount()", +"d3c6d9f6": "setBlocksInEpoch(uint256)", "d3c764f2": "buyPixelBlock(uint256,uint256,uint256,bytes32)", "d3c78097": "startDistribuion()", "d3c7adf9": "JimatCoin()", "d3c7c2c7": "getSupportedTokens()", "d3c7ca2f": "Allinone()", +"d3c86f54": "unpaidOf(address)", "d3c8dd69": "Parent()", "d3c8e99e": "_shareDiscountPrice(uint256,address)", +"d3c9727c": "sell(uint256,uint256,uint256)", +"d3c99975": "retreiveUsername()", "d3c9ad17": "REBALANCE()", "d3c9cc26": "getTokens(uint256)", +"d3ca4a6e": "getStakingPerAddress()", "d3caee1b": "currencyToToken(address,bytes16,uint256,bytes)", +"d3cb5162": "createLoanApplication(uint256,uint256,uint256,uint256)", +"d3cbe71b": "channelStartTimestamp(uint64)", "d3cc0c37": "batchVote(address,address[],uint256[])", +"d3cc12d5": "_convertVirtualToRealUnit(int256)", "d3cc8d1c": "claimTokensFromSeveralAuctionsAsBuyer(address[],address[],uint256[],address)", +"d3ccc298": "fannyReadyToClaim(address)", +"d3cce151": "setInternalStateNonPayable(uint256)", "d3cce1d2": "setOldContractData(address)", +"d3cd2cd8": "isBaseFilled(bytes32)", "d3cd6052": "getProposalCount(bytes32)", +"d3cd9dcc": "getActionEXR()", "d3cdb97b": "partIndexToOwner(uint256)", "d3cde1a5": "updateReferral(address,uint256)", "d3cde1c0": "getIndexAndCheckIfAllowedToPublish(uint256,uint256)", +"d3cde344": "withdrawCollateral(bytes32)", "d3cdf6c5": "calculateTokenAmount(uint256,uint8)", +"d3ce6012": "bfmPerBfmBNBFlip()", "d3ce71df": "buyCozy(uint256,uint256,bool,address)", "d3ce77fe": "destroyTokens(address,uint256)", +"d3ce7905": "addBlacklistAdmin(address)", "d3cea787": "setContractServerBlackWhiteListType(string,uint256)", "d3cecc4d": "checkVestingCondition(address)", +"d3cecd20": "addInternalTeamContributionAddress(address)", "d3cedfee": "sspCount()", +"d3cf70b3": "flashBorrow(address,address,uint256)", +"d3cfb3b6": "setManagerFeeNumerator(uint256)", +"d3d03cfc": "getMulti(uint256,string[])", "d3d10d87": "OwnerChanged(bytes32,address)", "d3d18836": "publicLock(address,uint256)", "d3d19965": "deleteCroupier(address)", +"d3d1e7bd": "protectedLiquidityIds(address)", +"d3d202fd": "close(uint256,address)", "d3d2172e": "total_reward()", +"d3d35041": "aheadMar(uint256)", "d3d37a31": "setSaleCap(uint256)", +"d3d38193": "getTotalBalance(address)", "d3d3b01c": "ToRent(uint256,uint256,uint256,address)", "d3d3d412": "getGateAddress(address)", "d3d3dd85": "updateHpbBallotAddress(address,address)", +"d3d42513": "UpdateTransaction(bytes32,address,uint256,address,uint256)", "d3d43efa": "returnLoanStatus(uint256)", "d3d44e8b": "getBlockCount(uint256,uint256,bytes32)", +"d3d4c538": "getUserTermInfo(address,uint256)", "d3d54129": "setPCAddress(address)", "d3d55493": "calculateRefundAmount(uint256,uint256)", +"d3d55d51": "uFrags()", +"d3d584c1": "updateUinswapV2(address)", +"d3d5ad2e": "setTriste()", +"d3d5d569": "_tierFCFSMultipliers(uint256)", "d3d6a975": "testThrowsTransferNotEnabled()", +"d3d6f843": "decreaseTroveColl(address,uint256)", "d3d70c3c": "setPrivelegedWallet(address)", "d3d77f98": "setCoeff(uint8,uint128,uint8,bytes32,bytes32)", +"d3d7ed42": "setLockDurations(uint256[14])", +"d3d862d1": "encodeMultiAssetData(uint256[],bytes[])", "d3d864f5": "isFundingOpen()", +"d3d873b9": "getgameinfo(uint256)", +"d3d88917": "NYANToken()", "d3d8aa55": "IG()", "d3d8acf8": "checkMyVestingPeriod()", +"d3d967b5": "TrustSet(address,address)", +"d3d9af65": "last_epoch_date()", +"d3d9d1e4": "priceFeedUSDC()", "d3d9e741": "SuperCoin()", +"d3da53a4": "getRegisterCalldata(address)", "d3da927f": "isRegistered(address,address)", "d3daa8aa": "EtheremonPayment(address,address,address,address,address)", +"d3db0eb7": "RoundOpen(uint256,uint256)", "d3db2371": "DHCSToken()", +"d3db4cb0": "removeReservContract(address)", "d3dbc861": "Initiate()", +"d3dc1ce0": "approve_598(address,uint256)", +"d3dc1fdf": "verdict(uint256)", "d3dc9794": "pendingTxs()", "d3dcc175": "devTeam()", "d3dccb03": "ERC20Token(string,string,uint8,uint256,address,uint256,address[],uint256[])", "d3dcd55a": "calcTokensFromEth(uint256)", +"d3dd5fe0": "toggleMint()", +"d3dd623c": "perpetualRenderer(uint256,uint256,uint256[2],int256[13],bool[3])", "d3dd9a18": "addManyAuthorizeToWhitelist(address[])", "d3ddebce": "STATE_BET_DISABLED()", "d3de5834": "disableFeesForUser(address,uint256)", +"d3de895c": "CRV_DECIMALS()", "d3deedfd": "MANHATTANPROXY2NDST()", "d3df2d01": "maxUsdFundingReached()", +"d3df34f7": "setBeyondExProx(address)", +"d3df508c": "pieInitialIndex()", +"d3df8aa4": "pausedInvesting()", "d3e00f4b": "stampBirth(uint256,address)", +"d3e04401": "Admin_3(address,address,uint256)", +"d3e0915c": "earnedInCircle(address)", "d3e0996a": "checkProductGenuine(address,address,uint256)", +"d3e0bc56": "getNumberOfVaults()", +"d3e0beae": "withdrawCheckerAdmin()", "d3e141e0": "left5(uint256)", "d3e15747": "setLock(uint256)", "d3e212c5": "bidExchange(uint256,uint256)", +"d3e231ce": "getAPR(address,address)", "d3e242c2": "_confirmTransaction(uint256,address)", "d3e2846a": "LINKFund()", "d3e3623b": "earlyBackersAmountLeft()", +"d3e3c5f2": "_deprecated_unlockableBeforeBurningAndCanBurn(address,address,uint256)", +"d3e566fa": "Vote(uint256,address,address,uint256)", +"d3e5ca87": "balances(address,address[])", +"d3e64b77": "retireOnePL(uint256,string)", "d3e65414": "contributedToken(address)", "d3e65b6c": "buyTicketByOther(uint256,bytes32,bytes32,bytes32)", "d3e66a9e": "startCompetition()", "d3e6dda7": "removeFound(address)", "d3e6f49f": "isReadyToBreed(uint256)", +"d3e72598": "TokenOver(uint256)", "d3e73312": "allocatedFounders()", "d3e7d44d": "tokensBurnedTotal()", "d3e82be8": "getMinPrivateSaleBuy()", @@ -121418,114 +222140,221 @@ "d3e848f1": "systemAddress()", "d3e89483": "policies(uint256)", "d3e8b207": "distributeWithLockup(address,uint256,uint256,uint256)", +"d3e90049": "hasbeenLocked()", "d3e91a98": "destroyAllTokens(address)", +"d3e9385a": "spouse(address)", +"d3e9c314": "getAuthorizationStatus(address)", "d3ea3322": "testBuildTokenSystemCost()", +"d3ea4350": "calculateRewards(uint256)", +"d3ea7a28": "rot()", +"d3eaa4d8": "flashBorrowAndSteal(address,address,uint256)", "d3eb11d6": "payoutsWallet()", "d3eb667e": "BigBoobsToken()", "d3eb6f61": "isGoalReached()", "d3ebd2dc": "transferFron(address,address,uint256)", "d3ebf454": "LotteryRoundDraw(address,bytes4)", "d3ecb95f": "wc()", +"d3ecebd7": "executed(uint256)", "d3ed0ea2": "setAuthor(uint256,string)", +"d3ed3000": "poolProxyAdmin()", +"d3ed7c76": "speedUp(address,bytes,uint256)", +"d3eda40d": "redeem(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "d3edcb0a": "_wholeToken(address)", "d3edcb5b": "getCreditorAddresses()", +"d3ede120": "unclaimedDebt()", "d3ee86e7": "mmax(uint128,uint128)", +"d3ee9f5a": "automaticSaverProxyAddress()", +"d3eec711": "Spent(address,uint256)", "d3eee5ad": "lockForDays(uint256,uint256)", +"d3eeea4d": "_setPrice()", +"d3ef00b0": "withdrawRewardOp(address)", +"d3ef5e33": "userlastQuarterlyRewardWithdrawTime(address)", +"d3ef8977": "old_brrrx()", +"d3efa73c": "_modifyEscapeHatch(address,bool)", "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)", +"d3f0d2de": "pageVokens(uint256)", "d3f16925": "setDevLimit(uint256)", "d3f189bd": "COMMUNITY_ADDRESS()", "d3f1a78c": "updateDelayTime(uint256)", +"d3f1e30e": "getPurchaseList(address)", "d3f1fbd7": "updateLastMiningTime(uint256)", "d3f233af": "burnOf(address,uint256)", "d3f297d6": "claimLiquidityReward()", "d3f2b996": "PTH(uint256,string,uint8,string)", "d3f2e7cf": "runningRound()", +"d3f33009": "gameContract()", "d3f3bea2": "distributionRealized()", +"d3f3f5ea": "getAllDeposits()", "d3f40a02": "denyAccess(uint256,uint256)", +"d3f4a268": "population(uint256)", +"d3f4e3e9": "wetrustManager()", "d3f4fcd9": "claimInitialAllotment(string,string)", +"d3f5445a": "_releaseToken()", +"d3f5559c": "Destroy(uint256)", "d3f574e7": "testToUint128()", +"d3f5e60b": "_modifyTimelockExpiration(bytes4,uint256)", "d3f60667": "trackBuyBack(uint256,uint256)", +"d3f60859": "calcWidthdrawSingle(uint256,uint256)", "d3f60d9c": "startTimeRound2()", +"d3f60e9e": "setpriceFeed(address)", "d3f6a157": "setWallets(address,address)", "d3f6be9f": "LogDeposit(address)", "d3f6c328": "AMOCoin(address)", "d3f6dc52": "oracleItQuery(string,string,string)", +"d3f6fd2a": "setwethusdc()", "d3f71ecc": "checkIsOnSale(uint256)", +"d3f730fd": "rewardsClaimed(address)", "d3f73bd4": "getOwnerCEO()", +"d3f7c0f3": "getUnclaimedAssetWithBalance(address,address)", "d3f8868b": "getFrequency(uint256)", "d3f8cc95": "exhaustAfterFusion(uint256,uint256,uint256)", "d3f92288": "WhiteList()", "d3f9ba69": "processOneCombat(uint32,uint32)", +"d3f9ddfe": "rewardWithdrawn()", +"d3f9e5fa": "userWithdrew(address,uint256,uint256,string)", "d3f9fc33": "ownerRecoverTokens(address,uint256)", +"d3fa7e2c": "wrapEthAndDepositAndLockCollateralAndBorrow(address,address,uint256,uint256,uint256)", "d3faaeca": "softCapInTokens()", +"d3fb07d7": "updateBetsStates()", +"d3fb43c6": "setMintPricePerVersion(uint8,uint256)", +"d3fb73b4": "anchor()", +"d3fbbacb": "rolloverAccount(address,uint48,address)", +"d3fbf399": "employee_accounts(uint256)", "d3fbf39d": "mintNFTNotForSale(uint256,string)", +"d3fbfba2": "validateTP(bytes32)", "d3fc310a": "_addExtraReceiver(address)", +"d3fc6681": "dNyanV2()", "d3fc9864": "mint(address,uint256,string)", +"d3fcd522": "contractMin()", "d3fd311e": "trading_deactivated()", +"d3fd8987": "updatePrice(address,address,string)", "d3fd9eba": "transferAuction(address,address,uint256)", +"d3fdadf7": "shockParameter()", "d3fe1ae1": "updateMember(address,uint256,uint256,uint256)", +"d3fef2bd": "gluwaApprove(bytes32)", "d3ff09a5": "setTotalTaskEscrow(uint256)", +"d3ff831f": "updatePoolRate(address,uint256,uint256,uint256,uint256)", +"d3ff8921": "_holdtime()", "d40027ec": "lockoutPeriod()", +"d400336f": "minEthBeforeSwap()", +"d4009ad5": "SIGNATURE_PERMIT_TYPEHASH()", +"d40105f0": "yieldGetBest(uint128)", +"d40117ff": "addERC721ForStaking(address,uint128,uint128)", +"d40170d7": "periodrewardtemp()", "d401defe": "getBasicInfo(address)", "d40224ec": "triggerSale(bool)", +"d402353e": "revealConvict(address,bytes32,uint256,uint8,bytes32,bytes32)", +"d402756e": "wasEverMinted(uint256)", "d402be57": "calcMode()", "d402f87c": "setTotalProfit(address,uint256)", "d4030114": "tableSize()", "d40394be": "batchAddWhitelistedTransfer(address[])", +"d403a8b3": "generatePackageReleaseId(bytes32,uint256)", +"d40446e2": "depositOutput(uint256,uint256,uint256)", "d404d6c2": "pushEther()", "d404ea23": "hashKey()", +"d4050d43": "totallockedtime()", +"d4055b64": "getTokens(address,bytes32[])", +"d4056655": "canPrintProtocolTokens()", "d405a069": "grantInitialAllocations()", "d405d6f4": "Chally()", "d40619b8": "getUsersScannersIds()", +"d406534c": "delLocal()", "d4065763": "returnRemainingMoney()", "d406e403": "test_startBlock()", "d407d212": "claimJ()", "d408746a": "GetContractAddr()", "d4088e33": "setPrice(uint256,uint256,uint64)", +"d408f657": "feeWhitelist(address)", "d4092dd2": "getPOOL_edit_29()", "d409a12c": "Kcoin()", "d409ddda": "EtherizationUtils()", +"d40a3569": "reform_signers(uint64,address[])", +"d40a6db8": "GameBet(uint256,address,address,uint256,uint256,uint256)", "d40a71fb": "step1()", +"d40af9d0": "swapETHforTokens(uint256,uint256,address,address,uint256)", "d40b9d9a": "OwnerHeartbeated(address)", "d40c0a58": "saveTeamSpent(address,uint256)", "d40c3084": "fundValues()", +"d40c4c7e": "pendingHbt(uint256,address)", +"d40d4599": "setChangelogIPFS(address,string)", "d40d4d76": "etherToSendBankRoll()", +"d40da967": "createRawPackage(bytes32,bytes32,bytes32,uint256,address,address)", "d40dc870": "MAX_AMOUNT()", +"d40ddb8c": "remove_liquidity(uint256,uint256[])", +"d40dfac7": "hashes(address,bytes32)", +"d40e29cc": "STAGE_ONE_LAST_WITHDRAW()", "d40e35da": "Interest_Rate()", +"d40e831f": "getMyReceiptsAmount(address)", +"d40e8f4a": "accountBorrows(address)", "d40e985d": "decompose(uint256)", "d40e9b9c": "rakeEventPlaceholderAddress()", +"d40f5f0d": "extractReward(uint256,uint256,bool)", "d40fa8bf": "ZRX()", +"d40fb6c5": "discountSwap(address,address,address,uint256,bytes,uint256)", "d40fd402": "salarySent()", +"d40fe3f1": "powerTotalPopping()", +"d40ffacb": "azimuth()", +"d40ffcf8": "triggerExpiration(uint256)", "d41097e3": "disbandTo(address)", "d4112c56": "changeUtilityAccount(address)", +"d411a96a": "dangky(string,uint256,uint256,uint256,string)", +"d411b0fa": "getRewardView(uint256)", "d41212c8": "_insertTokenMetadata(uint256,string)", +"d412f490": "myuint()", "d41376e1": "withdrawl(address,address,bytes32)", "d4138673": "IkuraTransferToken(address,address,uint256)", +"d4138a75": "renDOGE()", "d413bd66": "OfflineMultiSig(address,address,address[],uint256)", +"d4147867": "nexusGovernance()", "d414da2a": "addPatternUserIndex(address,bytes32)", +"d4150901": "getUserTotalStakedTamag(uint256)", "d4155d1f": "getJuror(address)", "d41584ab": "LogCertifierRemoved(address)", +"d4158d03": "clearReward()", +"d415b905": "Confirmed(address)", +"d4168a43": "buylottery(uint256,uint256,uint256,uint256,uint256,uint256)", +"d416a27d": "setProxyApproval(address,bool)", "d416c997": "_stringsEqual(string)", "d416d1a6": "lastInvestorPaidOut(uint256)", "d416d4f3": "Balance(address,address)", "d416efdb": "donationTo(address)", "d417f18d": "getTopicNameAndVotesAt(uint256)", +"d4184f81": "lockGem(uint256,address,uint256,bool)", +"d418634a": "getEpochReward(uint256)", "d4186ba4": "test_oneValidEqInt3()", +"d4194f9a": "getMultipleFoo()", "d41977cd": "contractFee()", +"d419935f": "tokenFormulas(address)", +"d419c9ee": "butter()", "d419ef9f": "WinToken(address)", +"d41a234d": "setSystem(uint64,uint64,uint256,uint256,uint256,uint256)", +"d41a5df3": "priceOfBfm()", +"d41ad990": "ELYC()", "d41b6853": "enter(address,uint256,uint8,uint8,uint8,uint32[11])", +"d41b6db6": "level(address)", "d41bcb81": "phaseEndTime(uint256)", "d41bdea7": "unlock(bytes32,bytes32,bytes32)", "d41be98d": "createDebtToken(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"d41c3a65": "getPaymentToken()", "d41c85fa": "__redeem()", +"d41cb9b0": "safetyETHWithdraw()", "d41cc314": "EventUpgradeTank(address,uint32,uint8)", +"d41cdd0f": "ExpB()", +"d41ce4b1": "stakedSupply()", "d41d661e": "remOne(address)", +"d41dcbea": "getPoolList()", "d41ded30": "encodeLength(uint256,uint256)", "d41e3281": "DocumentManager()", +"d41e98ff": "claimableAmountOf(address)", +"d41edb18": "setNewTokenPrice(uint256)", +"d41f2365": "transfer(uint256,address[])", +"d41f2556": "resolve(bytes32,uint256,string,uint256)", +"d41f283c": "getTotalValue(uint256)", "d4200f94": "setCreditBitContract(address)", "d4203561": "transferFee(uint256)", "d420e4e0": "BCaaS()", @@ -121533,118 +222362,240 @@ "d4212e93": "storeInitialClaim(address,uint16[],uint256,bool)", "d4214d1b": "releaseUnclaimedBounty(address)", "d42151b0": "FFCTToken()", +"d42198e6": "buyBoosterCard(uint256)", +"d421c5cb": "swappedSoFar()", +"d421dd7e": "changeIconUrl(bytes32,string)", +"d4224fab": "freeAvgPrice()", +"d4229020": "isExitsRecommander(address)", +"d4229044": "getHashOwnersCount(bytes32)", "d4229b1a": "appBase(bytes32)", "d422cf58": "numLocks()", "d422e4e0": "takeFee(address,uint256,string)", "d422e810": "exchange_commission_wallet()", "d423740b": "setter(uint256)", "d423754b": "removeFactProviderFromWhitelist(address,address)", +"d423d608": "claimLocked()", +"d4244fd0": "resetTokenName(string)", "d4245e5b": "transferringETH(address)", "d424f628": "fundingGoalReached()", +"d4255a85": "getUopBalance()", +"d4259bb6": "getEqualReward(address)", "d425bd91": "calculateDepositInfoWitnessHash(uint256[])", "d4264af0": "mintTo(address,bytes32,string,uint256)", "d4269986": "getPuzzle(uint8)", "d426b04e": "largeContribThreshold()", "d426bb47": "allocateForPrivateSale(uint256)", +"d426f462": "claimXGT(address)", "d42706bd": "Batix()", "d4270d60": "recall()", "d427ccbf": "getEventAddress()", "d427ce74": "getBylawsProjectDevelopmentStart()", +"d4280d5a": "createInvoice(string,uint256)", +"d4285f91": "totalETHLPTokensMinted()", "d428bf3b": "SetdivForPrice(uint256)", +"d428d8a5": "changePayoutPercent(uint256)", +"d428d9d6": "depositReward(uint256,uint256)", +"d428ea5c": "mintStopped()", "d4291e0c": "num_hosts()", +"d429aada": "createdValidatorCount()", +"d429b6d9": "country_getAllCountriesForContinent(uint256)", "d429bfae": "currentTokenOffered()", "d42a5011": "setPackLimit(uint16)", +"d42a62d3": "setLayerNumner(uint256)", +"d42a7c79": "entryFee(uint256)", +"d42a925e": "exitAllCoin(address)", "d42a9dd5": "ICO_PHASE1_PERIOD()", "d42aa2f6": "getHealth(uint8[176],uint8)", "d42ad6ea": "getMinAuditPriceMin()", +"d42aecab": "setClaimTimeSchedule(uint256)", "d42b31b9": "_DeclineInsurance()", +"d42b7254": "getLatestDelegatedStake(address)", "d42bd8a4": "receivedUETreturn(address,uint256)", "d42bf301": "doTriggerTryAuth()", "d42c334e": "DepositMasterContract(address)", "d42cc0d1": "Planetagro_Exchange(address)", "d42cda15": "getOnMintTargetValue(int256)", +"d42cdb5a": "set_playBook(address)", +"d42cecd6": "setExpansionPercent(uint256,uint256,uint256)", "d42cfc41": "transferFeeDenominator()", "d42d24fc": "auditContract()", "d42d4c10": "PASSToken()", "d42d8eed": "tag(address,uint256)", "d42db190": "versionAddresses(bytes32,bytes32,address)", +"d42dc0c2": "getOutcomeSlotCount(bytes32)", "d42dca55": "getAuditors(uint256)", +"d42de04d": "matchPoints(uint256[],uint256[])", +"d42e0b32": "getTimelocksInfoForConract(address)", "d42e26f5": "initializePresaleFundraiser(uint256,uint256,uint256,uint256)", "d42e87ed": "callOnSignUp()", +"d42eb23a": "shoppingPoolLength()", +"d42ec3fe": "depositToPool(uint8,string,uint256)", "d42ed758": "MixManager()", +"d42edb03": "setrSetter(address)", "d42eeb4f": "EtherDrugs()", +"d42eefbe": "totalYtxFeeMined()", +"d42efd83": "created(address)", +"d42f0ab9": "ethToFiatDelivered(uint256,uint256,uint256,string)", +"d42f5f3c": "advisors(uint256)", +"d42f8a35": "aSiBlock()", "d4300225": "publicGetBalance(address)", "d430381b": "mayorCutPercentage()", +"d4305193": "transfer_erc20(address,address,uint256)", +"d4310dbf": "_storestartTime()", +"d4313506": "lockableToken(address,uint8,uint256,bool)", "d4313945": "setProviderInvitedUser(uint256,address,bool)", +"d4318a9b": "healthGemId()", +"d4319f33": "oracleAddress(string)", "d431b1ac": "setPause()", "d431ba8e": "lastBlock_v8()", "d432a885": "withdrawedFoundationCounter()", +"d432f221": "totalPooledBPT3()", +"d432fbc5": "WithDraw(address,uint256,address)", "d4331c21": "setSubTourFreezingTime(uint64)", "d4332f50": "changeBPaddress(address)", "d4335bd2": "getSevenCount()", "d433ea6a": "CueCrypto()", +"d4343d29": "exitAndWithdrawDAI()", "d4346010": "verifiedTransferFrom(address,address,uint256,uint256,uint256,uint256)", "d43503ab": "Sunset()", +"d4356e1a": "convertEthToEVN(uint256)", "d4357107": "address_to_tokens_prev_week1(address)", "d43582c8": "removeNOSPackage(uint256)", +"d4363765": "tolerancePercentageToOraclePrice()", "d4365b4b": "Weaver()", +"d436a677": "transferEthersToDividendManager()", "d436b6e2": "EtherAdvance()", +"d436dfdd": "rnt()", +"d436f5c9": "getOtcAddress()", "d4371968": "MAX_IMMORTALS()", +"d437509e": "reject_request(uint256,uint256)", +"d4378c57": "claimableDelta()", +"d437c26c": "testBalance(address)", +"d4381d74": "unicPerBlock()", "d4384156": "UbexToken(uint256)", +"d4387a99": "set_rate(uint256)", +"d438e493": "mintToSell(uint256,uint256,uint256)", +"d438e5a1": "NoOfTokens()", "d438fdbd": "offlineSales(uint256,uint256)", +"d439053d": "REBALANCING_SET_NATURAL_UNIT()", "d439390c": "MIN_PURCHASE()", "d43948ee": "transferGainedEther()", +"d43966f0": "saveAddress(uint256)", "d439ef55": "distributionMinimum()", "d43a0b4c": "hodlerTotalValue9M()", +"d43a632f": "reward(address[])", +"d43a6837": "setjs(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d43a7c16": "finalizePrivateIco()", +"d43b221e": "that(bool,bytes32,bytes32,bytes32,uint256,uint256)", +"d43b40fa": "update_mining_parameters()", "d43c3bb9": "getData_30()", +"d43c43ac": "yourMemosCount(address)", +"d43c44fe": "ModifyRelease(uint256)", "d43c45b8": "withdrawSurprisePot(address)", "d43c5a4a": "setTeamVault(address,address,uint64)", +"d43c7199": "getAllDirectSponsor(address,address,uint256)", +"d43c9535": "setDailyDistribution(address[],address[],uint256[])", +"d43cdb62": "accountInfosLength(uint256)", +"d43d3e90": "defaultGuaranteeTime()", +"d43db34e": "handleBC()", +"d43db5e8": "checkblockheight()", "d43ea9e1": "levelTwoTokenNum()", "d43ef6b9": "__mulmod(bytes,bytes,bytes)", "d43f24b0": "removeApprovedContractAddress(address)", "d43fb152": "isMilistoneSubmited(bytes32)", "d4403495": "OWN_mintToken(uint256)", +"d44084df": "noticeOfSend()", "d440c6f3": "getWorkerAffectation(address)", +"d441426a": "getCurrentPriceToBurn()", "d441ea62": "CleanBankerProfit(uint8)", +"d4423f4c": "bullCallSpread(address,address,uint256,uint256,uint256)", +"d442b465": "participatePool2(uint8)", +"d442f9bc": "devMultiplier()", "d4430bc7": "tokenSaleOngoing()", "d443173d": "requestUnFreezeAccount(address,string)", "d4434387": "PolyCompliance()", +"d443cb5f": "human_readable_blockhash(uint256)", "d443f64a": "Start_Resume_PreICO()", "d443fc85": "acceptGuardianVend(uint256)", "d4440991": "callTransfer(address,uint256)", +"d4447ad6": "makerOrderIds(address,uint256)", +"d4448163": "setCrossDomainMessengerWrapper(uint256,address)", +"d444b2c3": "viewStatsFor(address)", +"d444b69d": "getUserBeltStat(address)", +"d444b81c": "setMinPuulStake(address,uint256)", +"d4450661": "getVerifiedContractors()", "d44512e3": "changePrestige(address)", +"d445a671": "ownerAccWei(address)", "d445afdc": "week1Price()", "d445cc78": "unfreezeTransfer()", +"d44608f5": "getContractEth()", +"d4470aa0": "privateSaletokenLimit()", "d44750f5": "bonus_price()", +"d4477b3c": "setTokenState(uint256[],bool)", "d448273c": "mineForMany(address[],bytes32[])", +"d4483164": "submit(bytes32,bytes32,uint8)", "d4483263": "secondRoundMayStart()", "d4492c57": "addInvestorGrant(address,uint256,uint256,uint256)", +"d4494c00": "convertExactTokenToEth(address,uint256,uint256)", +"d4497d2a": "clearBucketBalances(bytes32)", "d449844d": "XbitfwdToken()", +"d4499a17": "rewardTaxRate()", "d449a832": "decimals(address)", "d449ce7c": "Administered()", +"d44a078f": "SPPF(uint256)", "d44a2863": "changeBooking(string,uint256[],uint256,address,bytes32)", +"d44a3d12": "TIMEOUT0()", +"d44a6dd2": "Migrate(address,uint256,uint256)", +"d44a862f": "setUni_USDC_ETH(address)", "d44aadf7": "initROS()", +"d44ad680": "_encode_sol_bytes24(bytes24,uint256,bytes)", "d44aecb0": "ico1_startdate()", "d44b01ec": "safeWithdrawERC721(address,uint256,address,address)", +"d44b11f0": "getPositionDebtShareOf(uint256,address)", "d44bc088": "getTaskId(uint256)", +"d44c39bb": "monthlyRewardsClaimed(address,uint256,uint256)", "d44cf3dc": "_setPriceFactor(uint256,uint256)", +"d44cfe5a": "setMinLeverageRatio(uint256)", "d44d159d": "mintWithBase(address,uint256,uint256)", "d44d3394": "WIDTH()", +"d44d4cfb": "third_round_base_multiplier()", +"d44d8d8b": "PublicTokenTransfer(address,uint256)", +"d44da683": "LogDebug(string)", "d44dbbaf": "addStringComparison(bytes32,bytes32,bytes1)", "d44dd681": "beginLiquidation()", +"d44e293c": "assignWinnerAndSubmitAnswerByArbitrator(bytes32,bytes32,address,bytes32,bytes32,address)", +"d44e4479": "syncInterest(uint256)", +"d44ee9dc": "owner1SetTokenPlafond()", "d44f2d3d": "getInitialWithdrawalDone()", +"d44fa33e": "isAssetSupported(bytes32)", +"d44fce6e": "maxBetAmt()", +"d45017be": "_registerStandard(bytes4)", "d45036c7": "viewTeamTokens()", "d4508698": "driveCar()", +"d450dc8f": "SubCanceled(uint256,address)", +"d4511868": "setWindow(uint256,address,bytes32,string)", +"d45167d0": "recoverSigner(bytes32,uint8,bytes32,bytes32)", +"d4519ba2": "getReleasableAmount(uint8,address)", "d4524c72": "manualEtherWithdraw()", "d45294f5": "charityAmtToCharity()", "d45318b9": "scoringDuration()", +"d4532c9a": "sKimBapEDBlock()", "d4538051": "_emitHolderAddressAdded(bytes32,address,uint256)", +"d454019d": "lastJob(address)", "d4540ca7": "isDeployerOrOperator()", +"d4547e64": "miningDPOAmount()", "d454f92e": "mNumVoters()", "d4550efd": "addEngineerQuest(address)", +"d4551ec9": "uni_bsg_dai_lp()", +"d4558a87": "signOwner()", "d455b973": "changeStageBlock()", +"d455ef18": "calculate(address,uint256,uint256[],address[])", +"d455fc86": "isEventScheduled(bytes32,bool)", "d4565916": "activateproduct(uint256)", +"d4567cf1": "charityRecipients(uint256)", +"d4568e35": "pendingOracled(uint256,address)", +"d4570c1c": "claimable(address,address)", +"d45754f8": "f(bytes)", "d45769b8": "N2Contract()", "d4582b56": "Token(string,uint8,string)", "d4589835": "sellMorties()", @@ -121657,18 +222608,34 @@ "d4597aa1": "tokenFrozenUntilTime()", "d459fc46": "SetCheckpoint(uint256,bytes32,bytes32,uint64,uint8[],bytes32[],bytes32[])", "d45a717e": "topGoodsId()", +"d45b0007": "cancelEscrow()", "d45b1ae4": "StandardGasPriceLimit(uint256)", "d45b5f71": "getIcoStep(uint256)", "d45baeab": "Deposit(uint8)", "d45bcac1": "listAddresses(address[],uint256[],uint256[])", +"d45bce88": "setYELDIES(address)", +"d45c0d7e": "flagAccountForLiquidation(address)", "d45c1b06": "Bank(string)", +"d45c1dfd": "createOrder(uint256,uint256,string,string,string,string,uint256,uint256)", "d45c241c": "minBonus()", "d45c4435": "getTimestamp(bytes32)", +"d45c895f": "trade(uint256[],bytes32[],address[])", +"d45d76b3": "acceptTokens(address)", +"d45d7fb5": "DEFLATION_REWARD()", "d45e09c1": "canTransfer(address,uint256)", +"d45eb82f": "wildcardErc1155Address()", "d45efad5": "getAccessControl(address,address,uint8)", +"d45fc1a9": "initialize(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d4607048": "buyForEverybody()", +"d46087f9": "accurateRatio(uint256,uint256,uint256)", +"d460e3b9": "SetUserWithdrawalAccount(address)", +"d4614c63": "sushiToken()", "d461518c": "p_setGameDuration(uint256)", +"d461614b": "postPhases(bytes32,bytes32[13])", "d4616967": "deployCode(bytes)", +"d4619756": "SignIn()", +"d461b62c": "getEcaBalance()", +"d461d2f0": "queryInviteBonus(address)", "d4620041": "getFirstRoundReleaseTime()", "d4625a3a": "equals()", "d4629ae7": "ddftFund()", @@ -121680,9 +222647,14 @@ "d463eeb3": "numLoans()", "d464520c": "PowX()", "d4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", +"d46528e7": "SetDefaultBidData(address,uint256,uint256,uint256)", "d4653a3b": "EXToken()", "d465abca": "notInArray(address)", "d465c392": "revealProofOfPerfBlock(uint32,string,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", +"d466016f": "setReserveBaseLTVasCollateral(address,uint256)", +"d46655f4": "changeMasterAddress(address)", +"d4665e30": "Locked(address,uint256,uint256)", +"d46684b2": "getDelegatedStake(address,uint256)", "d466a03f": "citizensAmounts(uint256)", "d466a046": "LogBidExpired(bytes32)", "d466ab6b": "ROLE_BOUNCER()", @@ -121690,34 +222662,65 @@ "d467cc64": "DoubleOrNothingImpl()", "d4683f6d": "ArticCoin(uint256,string,string)", "d4686534": "LYNIA()", +"d46870d7": "sellerHasTheCoupons(address,uint256,uint256)", +"d468cf9e": "addproduct(uint256,string,string,string)", +"d468f2e1": "secondRoundWinners(uint256)", +"d4695028": "decodeAssetProxyId(bytes)", +"d4697f17": "lastTimestampPerUser(address)", +"d4698016": "liquidityWallet()", +"d469946a": "build(address,address)", +"d469e535": "priceDayIncriment10_6()", "d46a005a": "addWhiteListUser(address,uint256,uint256)", +"d46a3977": "swapExactTokensForTokens(uint256,uint256,address[],address[],uint256,bool,bool,bool)", "d46a5d7e": "vote(uint256,bool,uint256)", +"d46a9160": "tokensTransferred(address)", "d46aa610": "buyInMarket(uint256)", "d46b2987": "Luvtoken()", "d46b9b84": "lifeN(uint256)", "d46ba0c9": "etherRaisedPerWallet(address)", +"d46c0705": "congress(address)", "d46c0f40": "finishPrivatePlacement()", +"d46c1fd4": "_diagnoseAndEmitUSDCSpecificError(bytes4)", +"d46c98d1": "RemovalFromWhiteList(bytes32,address)", "d46cddd4": "capPresale()", "d46d0393": "getNextRegionId()", "d46d0a22": "setV_S(uint256)", +"d46d20da": "ImplementationChanged(string,address)", "d46d79bb": "withdrawAllEth(address)", +"d46d8fe8": "sgnMinimumLimiterValueN()", "d46dbca1": "developerTemplateAmountLimit()", "d46dd5bb": "showCurrentWinner()", +"d46df5b9": "reverseQuote(address,address,uint256)", +"d46e5a28": "advancePeriod(uint64)", "d46ea4a4": "EXP_18()", "d46eb119": "wrap()", +"d46f2f66": "router_address()", "d46f8eb1": "getSource(string,string,string,string)", "d46ff2f1": "getTweetsDiff(uint256)", "d470097c": "lastLargestHODLER()", "d4701c35": "activate_kill_switch(string)", "d4702576": "calculateTokens(uint256,uint256,uint256)", +"d470316b": "stakerAddress()", +"d470470f": "proposeAsBackup(address,address,bytes)", +"d4712591": "transfer_funds(uint256,uint256)", +"d47134cb": "longBuy(uint256)", "d4717240": "setkeytoken(address)", +"d4718104": "pubKeyToAccountData(bytes32)", +"d4718645": "addMembers(string)", +"d4718d8f": "SetLevel1Price(uint256)", "d4724a57": "TokenTransferForFounder(address,uint256,address,address)", +"d472b90c": "getRatioScale()", "d472d6bf": "get_token_balance(address)", "d472fa26": "lockTokenToDate(address,uint256,uint256)", "d472fe7e": "totalTokensICO1()", +"d47327bc": "createdIphoneMade()", +"d4734447": "getLockedTokensByYear(address,uint256)", +"d47356a3": "removeDepositer(address)", "d4735d92": "Transfer(bytes32,address)", "d4737d11": "setSampleRegistry(address)", "d47380e0": "_mintToken(address,uint256,uint256,string)", +"d473c2da": "maxDisagreement()", +"d473e09a": "underlyingToCToken(address)", "d4740b78": "getAmountWeekly(uint32)", "d4747f0a": "IQC()", "d474a352": "submitBlockHeader(bytes,uint256)", @@ -121726,18 +222729,29 @@ "d475b1ab": "phase5Price()", "d475bfa8": "proxyClaimTokens(address,address)", "d47637f7": "getLittafiContent(bytes32,uint256)", +"d4764b0a": "balancerToPi(address,address,uint256,uint256)", +"d47650f1": "getDayUnixTime(uint256)", "d476620b": "winnerKey()", "d476758f": "extractablePercentage()", "d4768994": "soldIdeaWeiPostIco()", +"d47749d7": "setFolds(uint256)", +"d4778321": "getUnitCoinProductionIncreases(address,uint256)", "d477e3d4": "checkAddERC20(address)", +"d477edf4": "updateLockDuration(uint256)", "d477f05f": "setDev(address)", +"d4780e36": "_getValues(uint256)", "d47875d0": "getScore(address)", "d4788cc3": "HGT_Reserve()", +"d478a725": "pauseEthDeposit(bool)", "d478f533": "allowFreezing(address)", "d4793a9b": "getNextGuessId()", +"d47975c9": "uniqueReferers(uint256)", "d4798327": "getPendingBattleRewardsCount(address)", "d47a2010": "bnbRaised()", +"d47af199": "lockedAces(address)", +"d47b1cf3": "_removePosition(bytes32,address)", "d47b44c3": "Fool()", +"d47b8ff7": "gb()", "d47bb75c": "TOKENERC20(uint256,string,string)", "d47c0fb0": "onIncome()", "d47c9e11": "eastadsCREDITS()", @@ -121745,24 +222759,45 @@ "d47cc9d7": "start_the_race()", "d47cf598": "setDayThird()", "d47d3202": "releaseINATokenToTeam()", +"d47d376c": "trackLiquidityRemoved(address,uint256)", "d47d5cfe": "swarmTree()", "d47d996e": "addCrowdSale(uint256)", "d47dbde2": "buyerFundRelease(uint256,address)", +"d47dd02f": "_flipToWBNB(uint256)", +"d47e470d": "numCollateralConfigs()", +"d47e5af6": "CONTRACT_LAND_RESOURCE()", "d47e813d": "SteveCoin()", "d47e81eb": "blockSettlement(uint64,uint64)", "d47eb8ee": "validCall(uint256,bytes)", "d47eca0a": "checkDiv()", "d47ee6c1": "numberOfLeaderboardPlayers()", +"d47ef3e7": "_internalTransferFrom(address,address,uint256)", "d47f269e": "getHand(uint256)", +"d47fc70b": "MEMBERSHIP_PRICE(uint256)", "d4807fb2": "initializeRound()", +"d4808abc": "Set(string,address,uint32)", +"d48092f7": "g(bool)", +"d48098b3": "oxt()", "d4810b61": "PRE_ICO_START()", +"d4816108": "setIsExtension(address,bool)", "d48210bc": "perValue()", "d4821432": "endICOStage8()", +"d482301c": "NONVOTING_ONBOARDING()", +"d482725f": "setActive(string)", +"d48317a6": "addPrice(bytes32,bytes32,bytes32,uint256)", +"d48330d8": "minProgressive()", +"d4841d5e": "lastTopSponsors(uint256)", +"d484506f": "getTokenOffset(uint256)", "d4849a8b": "newEthBackedLoan(uint32)", "d484a285": "PRE_ICO_SLGN_LESS()", +"d484db75": "getPlayerIds(address)", +"d484ecb5": "defaultRotationSpeed()", +"d485045e": "tradingFeeTokensHeld(address)", "d48599e3": "setdrawadm(address)", "d4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "d4859dc5": "disableManager(address)", +"d4863834": "AttackEnd(uint256,uint256,bool)", +"d486645c": "lastIdx()", "d48675f3": "minGoal()", "d4867694": "updateship(uint256,uint256)", "d48684d8": "changeLimit(uint256,uint256)", @@ -121773,6 +222808,8 @@ "d4878cac": "_transferChild(address,address,uint256)", "d487b21a": "assets_controller()", "d4884b56": "getEventEnd()", +"d48887bc": "EvUpdateJackpot(uint256,uint256,uint256)", +"d488ebe8": "viewRewardTokenAmount(address)", "d4897729": "getCET4InfoById(uint32)", "d489a018": "adminAddWorldBalance()", "d489b701": "starEthRate()", @@ -121782,13 +222819,23 @@ "d489fc8b": "_useOraclize()", "d48a1f6e": "returnPurchasedEther()", "d48a9340": "SaveCryptoToken()", +"d48a9d43": "authorizeHubByManager(address)", +"d48ab308": "distributionInfo()", +"d48ad404": "buyToken(uint256,uint256,address,uint256)", +"d48af3cd": "cutOrangeWire(bytes2)", "d48b2e92": "Identify()", +"d48b38b7": "lockedWalletInfo(address)", "d48b55e5": "calculateTokenOnlySellPrice(uint256)", +"d48b5c73": "disableDebtPhase()", +"d48b6519": "getRedeemedPrizes(uint256)", "d48b7a9d": "CryptoMyWord()", +"d48ba6dd": "pendingMochi(uint256,address)", "d48bb321": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes4,uint256)", "d48bfca7": "addToken(address)", +"d48c14d5": "setTestaPerBlock(uint256)", "d48c4193": "addWhitelistedTransfer(address,address)", "d48d02f6": "withinLimits(uint256)", +"d48dd049": "setDefautlMarginCode(address)", "d48e638a": "getCreator(uint256)", "d48e6a1b": "TEAM_TOKENS_PERCENT()", "d48e9cd5": "OMG()", @@ -121797,65 +222844,125 @@ "d48f7196": "numHodlers()", "d48fb85c": "FIVE_YEAR_KEEPING()", "d48fe280": "OK()", +"d490da4d": "isOnlyOwnerModule()", "d4912ab1": "SNTPlaceHolderMock(address,address,address,address)", "d491461a": "Gnosis()", "d492283f": "switchLock(bool)", "d4923d4e": "getUserVote(address)", +"d492f13d": "newBornBreedingCoolDown()", "d493b9ac": "transferAnyERC20Token(address,address,uint256)", +"d493d2ba": "cardIdWithIndex(uint256)", +"d4947a78": "withdrawRem(address,uint256,address)", +"d4947ce4": "changeExcludedAddress(address,bool)", "d494c388": "setMinBuyAmount(uint256)", +"d494d586": "getCollateralUsd(address)", +"d495ece0": "setTrancheAFixedPercentage(uint256,uint256)", "d49620ec": "RoundFinalized(uint256)", "d49636c2": "san()", +"d4967282": "stakeLength()", "d496a4f1": "cashBackVotes()", "d496bde4": "mainSaleTime()", "d496f9d2": "PlayReferred(uint8,uint8,uint8,uint8,address)", "d4971613": "HashBounty()", +"d4973565": "X_RATE()", +"d4975011": "timeLockProposalTime()", "d49758d6": "use_bounty_token(address,uint256)", "d4975d71": "changeVoter(address,address,string)", +"d4978d56": "freezingWallet(address)", +"d497a35f": "getForwardersToFlush(address)", +"d497b5af": "DappsSet(uint256,string,string)", +"d497b6bd": "monsterClassSiteSet(uint256)", "d4981928": "WorkOrder(uint256,address,address,address,address,uint256,string,address,address)", +"d498c716": "approve_81(address,uint256)", +"d49930fe": "PresalePrice()", "d499555b": "getFirstActiveDuel()", +"d4997fcd": "latestUnstakeTime(address)", +"d49981a4": "PayDividends(address,uint256)", "d49982cc": "sendPreSaleBonusMany(address[])", "d499b2c3": "pks(uint256)", +"d499d29f": "CrowdsaleEnded()", +"d49a54aa": "WETHToETH(uint256)", "d49ab244": "ICOWhitelisted(address)", +"d49acec8": "giverOfHope()", "d49ad161": "addTokenDetails(uint256,address[],uint256[],uint256[],uint256[])", +"d49bdad0": "renounceFactory()", "d49c51b7": "claimedMK(address)", +"d49c55f7": "draw(uint256[],uint256,uint256)", "d49ce78d": "WiggaToken()", +"d49cec7f": "swapForToken(uint256)", +"d49d170f": "servicePoolClaimingFeeDenominator(address)", "d49d1836": "openegg(uint256,uint256)", "d49d1bac": "transferERC223(uint256,address,address,uint256,bytes)", "d49d5181": "MAX()", +"d49d7867": "denySAFEModification(address)", "d49dbb5c": "minBalanceToSell()", +"d49dd013": "setERC20WrapperModel(address)", "d49dd9a8": "getStateofContract()", "d49dd9e4": "SonnetCoin()", +"d49e0cdd": "unlistDda(address)", +"d49e3c88": "transferFeesToGovernor()", +"d49e77cd": "devaddr()", "d49edbd8": "lastPrizeGiven()", +"d49f67a8": "IMPOSS07()", +"d49f76b0": "cmt()", "d4a03f60": "acceptAdoptionRequest(bytes5)", "d4a04ff4": "importFromOld(address,address,address,address,address[],uint256[])", +"d4a1361d": "creditPlanOf(address)", +"d4a15ebe": "cancelMarriage()", +"d4a17b15": "TheBigBurn()", +"d4a1c51a": "earnedRewards()", "d4a226c3": "bountyManagerDistributionContract()", +"d4a22bde": "setManagement(address)", +"d4a24129": "setCoinHandler(address)", "d4a2498d": "addData(string)", "d4a24f06": "checkPermissions()", +"d4a28267": "isInterestsController(address)", "d4a28823": "EOSSale(uint256,uint128,uint256,uint256,uint128,string)", +"d4a2aa33": "poolB()", "d4a2f3ca": "getShipAuctionEntity(uint32)", +"d4a309cc": "VALID_ADDRESS_LENGTH()", "d4a34564": "start3BonusPeriod3()", "d4a34a9e": "tokenDecimalsLeft()", +"d4a35c62": "getUserProfitsAmount(address)", +"d4a3803f": "acceptDeposit()", "d4a3e9d7": "capture()", "d4a436cc": "_countBits(uint256)", "d4a4513e": "fpct_packet_size()", +"d4a50953": "Vest(address,uint256)", "d4a61d61": "OnlineCasinoCoin()", "d4a631ab": "ContractLogEvent(int256,int256,uint256,string,string)", +"d4a6554b": "issueRebalancingSetAndReturnExcessBase(address,address,uint256,bool)", "d4a67930": "openBuy()", "d4a6fd3e": "has_presale_started()", "d4a8d9ba": "Inbox(string)", +"d4a98a11": "pendingWtf(uint256,address)", "d4a9991f": "requestDividends()", "d4a99d61": "finishDelivery()", "d4aa6b59": "Button(uint64,uint64,uint64,uint64,uint64,address)", "d4aa7394": "GameStatusUpdate(bool)", "d4aa7d38": "City(uint256,string,string)", +"d4aaa768": "mintA(uint256,uint256)", +"d4aaafb4": "categoryActionDetails(uint256)", "d4aae0c4": "kernel()", "d4ab4a89": "_migrateRobot(string)", +"d4ab9af9": "getPriceRMPL_USD()", +"d4ac2763": "addsu(uint256)", +"d4ac38c8": "updateLevelCost(uint8,uint256)", +"d4ac5a17": "WithdrawEthEvent(address,uint256)", "d4ac6af5": "MAX_REFERRAL_TOKENS()", +"d4ac9b8c": "winningBid(uint256)", "d4acaf6c": "ecrecoverFromSig(bytes32,bytes)", "d4acfa01": "tokenFrozenSinceBlock()", +"d4ad2673": "create(uint256,address,address)", "d4ad678e": "addItem(bytes16,uint16,uint16,bool)", +"d4ad825a": "_unwrapEther(address,address,uint256)", +"d4adad6a": "getGrantVestingDuration(address)", "d4ae1061": "getPurseDetails(uint256)", +"d4ae68f2": "setCutieGenerator(address)", +"d4ae71ba": "unstakeDNyanV2LP(uint256)", "d4afc8b6": "retrieveERC(address)", +"d4b01542": "isOpenSwap()", +"d4b03ba7": "claimDevFee(uint256)", "d4b03d34": "changeValueBonus(uint8,uint256,uint256)", "d4b088f9": "ICO_PHASE2_AMOUNT()", "d4b0a23b": "addWhitelists(address[],uint256[])", @@ -121867,99 +222974,191 @@ "d4b1a462": "LogBought(uint256)", "d4b1cdcc": "isResolverFor(uint256,address)", "d4b1d19f": "testThrowsTransferDisabled()", +"d4b22c0a": "getUniswapMiddlePriceForSevenDays()", "d4b2931c": "tokenSEEDcap()", "d4b2d5f0": "SQR_TOKEN()", "d4b3f5b6": "tokenWithdraw(address,uint256,uint256)", +"d4b40b06": "mintManuallyQuantityWithId(uint256)", +"d4b473c9": "combine2(uint256[],uint32,bytes)", +"d4b52acd": "nextMintLPTokensForNode()", "d4b572be": "RESERVE_TOKENS_SUPPLY()", +"d4b5d4c8": "_presaleBurnTotal()", +"d4b633c3": "setleasestatus(bool)", "d4b64f35": "getBalanceOfModifiedWeth()", +"d4b6846d": "defaultFactory()", +"d4b6b5da": "lookup(address)", "d4b71aa9": "maxPresaleWei()", +"d4b748f2": "approve_678(address,uint256)", "d4b795c0": "getCurrentRoundEntry()", +"d4b7eac3": "exchange(uint256,uint256)", +"d4b7f403": "SWAP_ROLE()", +"d4b815c2": "incomedaysecondthree(uint256)", "d4b83992": "target()", +"d4b85adc": "InitTigerPerBlock()", "d4b8a6f1": "setFeeSchedule(uint256,uint256,uint256,uint256)", +"d4b8db7d": "percentageTreasury()", +"d4b9311d": "modifyParameters(bytes32,bytes32,uint256)", +"d4b95f21": "ThirdPartyRequestor()", +"d4b968b2": "createSale(string,address,uint256[],bool,bool,bool,uint256)", +"d4b97046": "_QUOTE_TOKEN_()", "d4b9e410": "coiner()", +"d4ba14e9": "LPTokenBalance(address,address)", "d4ba15ad": "earlyPariticipantWeiPrice()", +"d4ba4b8f": "betDeposit(uint256,bool,uint256)", "d4ba769c": "getLatestComponent(string)", +"d4ba9549": "LogBrokerRegistered(address)", +"d4ba9d39": "UniSwapDAIExchangeContractAddress()", "d4badfad": "totumAllocation()", "d4bb02e4": "changeRatePreSale(uint256)", "d4bb1f28": "FCOIN1346Token(uint256,string,string,uint256)", +"d4bb8975": "setPauseBlock(uint256)", "d4bc0942": "withdrawOracleFunds()", "d4bc87d9": "currentPriceChangeNumber()", +"d4bcae3b": "transferTokensWithSignature(bytes,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "d4bcffe4": "AbxyjoyCoin()", "d4bd5a0d": "addCollaborator(uint256,address)", +"d4bd8446": "sell_Card_Ownership_At_FixedAmount(uint256,uint256)", "d4bdb879": "tokenSaleHasFinished()", "d4bdc45f": "downvote(uint256,int256)", +"d4bdd7f9": "stopMaintenanceMode()", "d4bde313": "ownBalance()", "d4bdfe00": "ETCTransfer(address,address,uint256)", "d4be5f68": "ATL_PER_ATP()", "d4be6356": "authentication(bytes8)", "d4be7714": "bornFamedStar(uint256)", +"d4bec8eb": "_PERPETUAL_V1_()", +"d4bf22cd": "leq()", +"d4bf51a7": "mint(address,uint256,string,bytes32)", +"d4bf6fdc": "ack(uint256,address,address,uint256,bool)", "d4bffa5a": "STATE_INITIAL_BIDDING()", +"d4c08afe": "ExternalTokenTransfer(address,address,address,uint256)", "d4c0cbce": "NovaCoinTransfer(address,uint256)", "d4c1089b": "WorldRecord(string,bytes32,address)", +"d4c10cc2": "TaskSolved(uint256,uint256)", +"d4c11152": "maxnum()", +"d4c143a4": "unipairs(uint256)", +"d4c15161": "removeCastle(uint32)", +"d4c19bda": "updatePrice(int256)", "d4c24db7": "StarterTokenSale()", "d4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", "d4c30ceb": "getFeeBalance()", +"d4c31bd4": "mainnetAddress(address,string)", "d4c34dbb": "changeSoulCap(uint256)", +"d4c3cf44": "info1()", "d4c3eea0": "totalValue()", +"d4c4131e": "estimateReward()", +"d4c45fc8": "addTokenPool(address)", "d4c46fa6": "setDeploymentPriceYear(uint256)", "d4c49094": "WithrawDevToken()", +"d4c50dc1": "TokensaleFinishTimeChanged(uint256,uint256)", "d4c50f00": "coinPerEth()", "d4c55f56": "wkaToken()", +"d4c6564c": "sendToUniswap(uint256,uint256)", "d4c6d9ad": "getbetresult(bytes32)", +"d4c720d3": "enableMint(uint256)", "d4c72e7f": "etherollBeneficiary()", "d4c76e8b": "MaxToken()", "d4c80edf": "amountWagered()", "d4c8fdae": "saleEtherRaised()", +"d4c92ab2": "enterResult(bool)", +"d4c9a8e8": "setCustomHardDepositTimeout(address,uint256,bytes)", "d4c9b1f2": "setMainAddress(address,address)", "d4ca68ea": "replacePolicyTo(address,uint8)", "d4cab39b": "AddedPrecommitment(address,uint256)", +"d4cacbaa": "closeUpgrade()", +"d4cadf68": "getSwapFee()", "d4cae6e2": "getMetadataURL(bytes,uint256)", "d4caf2a4": "setCodeSize(uint256)", +"d4cb78cb": "eGasFromToken(uint256,bool)", +"d4cc54e4": "allocatedFunds()", +"d4cd2188": "AUTO_MARGIN()", "d4cd5509": "CulturalCoinCrowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"d4cda4f9": "setMigratedAmounts(address[],uint256[])", +"d4cde43c": "setPreShrimp(address,uint256)", "d4cdeb3c": "isInPresale()", "d4ce1415": "detectTransferRestriction(address,address,uint256)", "d4ce545a": "random(bytes32)", +"d4ce85f3": "isMarketOpen()", "d4cf02ef": "getStringToSignWithKey(string,int256)", +"d4cf1559": "BecomeStarAngel(uint64)", +"d4cf269c": "marketApproval(uint256,uint256)", +"d4cf6d01": "initParameter()", +"d4cf9af7": "prompts(uint256)", "d4d0aced": "transferPartOfUnsoldTokens(address,uint256)", "d4d0d6e6": "addTrusted(address)", +"d4d0e7d4": "getSashimiBalanceMetadataExt(address,address,address)", "d4d0e931": "resetAllVotes()", +"d4d11185": "stateRootProvider()", +"d4d12d64": "mOldStaking()", +"d4d1b35e": "WITHDRAW_PENALTY_DENOMINATOR()", "d4d1b7da": "approveTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", "d4d227de": "PBToken()", +"d4d2646e": "change_gauge_weight(address,uint256)", +"d4d2a7b3": "calcDaiTokenAmount(bool,uint256,uint256,uint256)", "d4d2af8d": "sellCoin(uint16)", "d4d2e23c": "LogRandom(uint64)", +"d4d2e7f2": "manager(address)", "d4d30bd9": "GreenX(address,address,address)", "d4d33ece": "isRebirthAllowed(uint256,uint256)", "d4d37883": "sendSurplusTokens()", +"d4d39b38": "LogServiceAdded(bytes32,uint256,uint256)", "d4d42658": "getTokenRateEther()", "d4d42c91": "SetupML(uint256,uint256,uint256,uint256)", +"d4d4c6d9": "registerCertified(string,uint256,address)", +"d4d52df4": "previousHash()", +"d4d543c5": "upgradeStatus()", +"d4d54695": "_resolveTo(address,uint256)", +"d4d5763c": "FreezeFreeMint(uint256,address,uint256)", +"d4d5b1b1": "calcPrice(uint256,bool)", "d4d5d32a": "collectFee()", +"d4d623c1": "LockSubBalance(address,uint256,uint256,uint256)", "d4d64f2b": "getRevokeHash(bytes,uint256)", +"d4d650b9": "timeOfInitTWAP()", "d4d6adc0": "SiliconXCoin()", +"d4d6bc77": "sumloop(uint256)", "d4d6cdc4": "getStageTotal()", "d4d6d366": "metadataUrlSuffix()", "d4d6f5ee": "deleteChannel(address,address,address)", "d4d70128": "totalContributions(uint256)", "d4d728fe": "IsClaimed(bytes32)", +"d4d77b75": "getBurntAmountTotal()", "d4d7b19a": "isHolder(address)", "d4d81a13": "ClownCore()", "d4d82dae": "MCFitCrowdsale(uint256,uint256,uint256,address)", +"d4d840f7": "RANDOM_DNA_THRESHOLD()", "d4d84da5": "addTokenShop(address,uint256)", +"d4d89996": "revokeTransfer(address)", +"d4d8ce4d": "parFeeAcct()", "d4d90bd5": "MINIMUM_PURCHASE_AMOUNT_IN_WEI()", +"d4d917e3": "setAssetAddress(uint256,address)", "d4d91bdd": "_createOpinion(string,address,uint256)", "d4d92b14": "mintInternal(address,uint256)", "d4d96ac5": "flag(string)", "d4d9748d": "NeoToken()", +"d4d990bb": "UniverseForked(address)", +"d4d997fd": "set_sBTCPercentage(uint32)", "d4d9bdcd": "approveHash(bytes32)", +"d4d9ef9c": "timeoutThreshold()", "d4d9f559": "addWhiteListAddSetAuctionObj(address,uint256,uint256)", +"d4da3db7": "approve_474(address,uint256)", +"d4dac57b": "send2Bridge(uint256)", "d4db3791": "processTransferResult(address,address,uint256,bool)", +"d4dbc469": "EventCatchMonster(address,uint8,uint64)", +"d4dbcc7a": "getPendingUnbankOwnerList()", +"d4dc4d89": "pixelRgb(uint16,uint16)", "d4dc8e83": "walletCreateSnap(uint256,uint256)", "d4dca69b": "thisAddress()", "d4dcbc60": "declineApproval(uint256)", +"d4dcc620": "previousParticipants(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()", +"d4ddce8a": "tokenPrice(uint256)", +"d4de918b": "maximumRebaseTime()", +"d4de9960": "approve_540(address,uint256)", +"d4dee891": "getStudentScore(string,string)", "d4def0ba": "escrowedTokens()", "d4df0c6d": "setSaleAuctionAddress(address,address)", "d4df1be8": "getETHNeedPay(uint256,uint256)", @@ -121967,64 +223166,113 @@ "d4df89e2": "messageBoard1(string)", "d4dfadbf": "getMarket(address)", "d4dfc4b9": "MinimalManuscript(bytes32,string)", +"d4e027f3": "addLiquidityToUniswapTSLAxWETHPair()", "d4e08743": "isVaidUsername(string)", +"d4e10729": "setGreeting(string,string)", "d4e12f2e": "approve(address,int256)", +"d4e157ee": "delegate(uint256[],uint256[],uint256)", "d4e17e6d": "closeBuy(bool)", "d4e19bd1": "HART_NETWORK_ID()", +"d4e20b01": "deposit(uint256[3])", "d4e30489": "NewYorkCoin()", "d4e32938": "subuser(address,uint256)", +"d4e36a87": "idxRadd(address)", +"d4e39d32": "liquidateTrade(uint256,uint256,uint256,address,uint256)", +"d4e3fae8": "clearOwner()", "d4e4716f": "_setWhitelistedUser(address)", "d4e4841d": "tokenToEthTransferOutput(uint256,uint256,uint256,address)", +"d4e49c38": "BalanceTransfer(string,string,uint256,uint256[2],uint256[2])", +"d4e50773": "COMPOUND_ADDR()", +"d4e51e39": "_disableTrading()", +"d4e53957": "min_ether()", "d4e678b8": "refundTransaction(uint256)", +"d4e69a54": "OwnershipDistributed()", +"d4e6b7a1": "_gegoMapIndex(uint256)", "d4e75363": "NextDistribution(uint256)", "d4e77133": "SendCoin(uint32,uint32,uint32,address)", "d4e78272": "Draw()", +"d4e79e86": "PREDICT_ALLOWED_DURATION()", "d4e7b9cf": "amountAvailableToCashout()", "d4e823a3": "createVendingItem(uint256,uint256,uint256,uint256,uint256)", +"d4e85496": "setItemsEC(address)", +"d4e87423": "approve_555(address,uint256)", "d4e8b749": "periodITO_weiPerToken()", +"d4e8be83": "file(bytes32,address)", "d4e8e063": "startGrantAuthentication(address)", "d4e90e24": "CCTC()", +"d4e918ec": "setvalidchecker(address)", +"d4e92774": "_repayLoss(address,address,uint128,uint256)", "d4e93292": "withdrawal()", +"d4e9914b": "delegatedStakeToPoolByOwner(address,bytes32)", +"d4e9a7c5": "HeirAppointment(address,address)", "d4ea7b08": "_emitPublicCapabilityRemoved(address,bytes4)", +"d4ea7fa2": "balanceContrato()", "d4eaa9fd": "approveAndCall(uint256,bytes)", "d4eb139d": "migrateSet()", "d4eb21ff": "PonderAirdropToken()", +"d4eb30f8": "init(address,uint16,uint8,address)", "d4eb4186": "setB0xAddresses(address,address,address,address)", "d4eb4540": "BLOCKTIMEOUT()", "d4eb487e": "getProtectHourglass(bytes32,uint8)", "d4eba667": "updateNovaContractAddress(address)", +"d4ebc4b2": "withdraw_aETH(uint256)", "d4ebc5ff": "voteUp(uint256)", +"d4ebf7c6": "contributeWei(uint256)", +"d4ecba4f": "requestMap(bytes32)", "d4ed0b46": "setCRaddress(address)", +"d4ed0f85": "tokenVolumeInput(address)", "d4ed2cf5": "candidateTillExchange()", +"d4ed3aac": "JP()", "d4ed8990": "updatePoolAddressCapTier1(uint256)", +"d4edf5e5": "beforeTransfer(uint64,uint64,uint64,uint64,uint256)", "d4ee025f": "resetRequest()", "d4ee1d90": "newOwner()", "d4ee4041": "removeBlock(address)", +"d4ee7097": "constant_getContracts()", "d4ee9415": "addPurchased(uint256,uint256)", +"d4ee9734": "isGuardian(address,address)", "d4ee9fba": "existPublicKey(bytes32,address)", "d4eeb6ad": "seasonTopSalesRewards(uint16)", "d4eec5a6": "optOut()", +"d4ef1722": "defaultAmountIn()", +"d4ef889e": "writtenOptions(uint256)", +"d4efcbe8": "GetRecordIndexFromDepositor(address)", "d4efcfe4": "getAccountInformation(uint256)", "d4f04289": "ownerSellArmy(uint256,uint256)", "d4f06298": "UpdatedMainAccount(address)", "d4f0ca3f": "onlyTestSetTimestamp(uint256)", +"d4f0d960": "TokenFallback(uint256,uint256)", +"d4f0e5e8": "createEvaluator(string)", "d4f0ebe6": "getWeaponNb(uint8[176],uint8)", "d4f114a6": "numOfBoundaries()", "d4f11ab2": "updateCompanyWallet(address)", +"d4f26c51": "setFarm(address)", +"d4f274d8": "toPositiveInt(uint256)", "d4f2e67c": "ico(address,uint256)", "d4f2f1da": "EthereumNano()", "d4f397b5": "getLootClaimed(uint256,address)", "d4f3d6b8": "updateEditionType(uint256,uint256)", "d4f3dd84": "_generation()", +"d4f42873": "registerNewHouse(string,address,uint256)", +"d4f43975": "Payment(address,uint256)", +"d4f4b368": "addAddressesLimits(address[],uint256[])", "d4f50f98": "getVoter(address)", "d4f639ea": "run2()", "d4f6aa98": "getLargePaymentBonus(uint256)", "d4f7329e": "minttoken(uint256)", +"d4f74579": "amountOfGenesisToBuyStakesSet(uint256)", "d4f74bf4": "curatorAccount()", "d4f77b1c": "joinGame()", +"d4f8b250": "chainLinkETHAggregator(address)", +"d4f8db61": "PROMOTIONAL_MINING_RATE()", +"d4f8f4b9": "totalPendingRuggies(address)", +"d4f922dc": "VARIABLE_ID()", "d4f96a09": "giveawayAddr()", +"d4f9f93a": "setNotFlip(address)", +"d4fa4070": "sellSharesDebug(uint256,uint256,uint256)", "d4fa83c3": "setWhitelistTx(address)", "d4fa9021": "DeductABS(uint256,uint256)", +"d4fac26a": "setBaseRateLookup(uint256[4])", "d4fac45d": "getBalance(address,address)", "d4fb0bc1": "payOut(uint256,uint256)", "d4fb0d23": "totalGuess()", @@ -122032,64 +223280,108 @@ "d4fbe1e0": "devAllocation(address,uint256)", "d4fbeb19": "registerToken(address,string)", "d4fc5822": "userWeiSpent(address)", +"d4fc9fc6": "query(address)", +"d4fcea15": "addBorrowTotalAmount(uint256)", +"d4fcebea": "swapForDai(uint256)", +"d4fd27eb": "deleverToZeroBorrowBalance(address,address,address,uint256,string,bytes)", +"d4fd3818": "pendingEleven(uint256,address)", +"d4fdbc57": "manualWithdrawEther(uint256)", "d4fdbcff": "ViewDividendPoolEnds()", +"d4feea1b": "isDirectMode()", "d4fef717": "APC(uint256,string,string)", +"d4ff493f": "getUserLockForTokenAtIndex(address,address,uint256)", "d4ff60cb": "URB()", +"d4ff73f7": "getPairInfo(address)", "d4ff88d5": "TokenSent(address,uint256)", +"d4ff9b9c": "AllocationApproved(address,uint256)", "d4ffd1bd": "updateStrategy(uint256,string,string,string,address[],uint256[],bytes32)", "d5002f2e": "getTotalShares()", "d50030ad": "getMyDividends()", +"d5003789": "testDataTypeBytes()", "d5005c35": "COINVR()", "d5009584": "getManager()", "d500ca00": "assignReward(address,uint256)", +"d500d2fb": "setMaxAdArticles(uint256)", "d500dd6a": "challengeTimeout(uint256,bool,address)", "d500f861": "buyFromWallet(uint256,bytes32)", +"d5015e9b": "wordsalad_()", "d501953d": "poolTokenAmount()", +"d501d975": "createPerOtherWindow()", "d5020ce8": "daysMinutesTilExpiryTime()", "d5025625": "terms()", "d502db97": "getAddr(string)", +"d50301b9": "ChangePool(address,address,bytes32)", +"d5032376": "poolAccumalator()", "d5034f2f": "changeRegistrationStatuses(address[],uint256[])", "d503d33f": "MyPoolBalance()", "d503e948": "developer_edit_text_minimum_period(string)", "d503ef95": "getCategoryEvaluation(address,uint256,uint256,address)", +"d50487c8": "shareholderInformation()", "d50495f4": "addTransaction(bytes)", "d504cb65": "currentBet()", "d504ea1d": "getArray()", "d5050493": "tokenOf(address,address)", +"d505accf": "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)", "d505c1cf": "currJackpotBetID()", "d506355c": "getRentInfo()", "d5064037": "BitcoinVision()", "d5065090": "setVendingStartPrice(uint256,uint256)", +"d506c32c": "makeTokenAvailableForEnglishAuction(uint256,uint256)", "d5072607": "auditTimeout()", +"d5074284": "hdudStaking()", +"d507b6f7": "grantLoan(address,uint256)", +"d507c60a": "globalAuctionId(address)", +"d507de39": "viewRecoLostMoney(address)", +"d5083ac1": "incByValue()", "d5089396": "Token(string,string,uint8,uint256)", +"d5092b56": "tokensPerShare()", "d509b16c": "testWithdraw()", "d509b1f9": "like(address,address,uint256,string,address)", "d50a04f4": "dataPerUsd()", "d50a3d2c": "privateSale(address,uint256)", +"d50ac52e": "oraiPerBlock()", +"d50acd82": "distribuir(address,address,address,address)", "d50b3065": "addTokenBalance(address,uint256)", +"d50b5acd": "areInvestorTransfersDisabled()", "d50b65d7": "startBlockjack()", "d50b7123": "testLockTokensForTrading()", "d50bb794": "getComponent(uint256,uint256,uint256,uint256)", +"d50c0de0": "syncWithOldSC(uint256)", "d50cb88b": "priceMultiplier()", +"d50d0043": "_stakeHolderMap(address)", "d50d4822": "revokeParticipation(address)", +"d50d57ab": "ManagerAddress()", +"d50df00d": "nonces(uint64)", "d50e38c6": "IbkToken()", "d50e829e": "setStopped(bool)", +"d50f3982": "balanceOfPCRVRenBTC()", "d50f6bf0": "transferETH(address)", "d50f6d3a": "getPartner(address)", "d50f7c73": "lastBlock_v10()", +"d50fac49": "participar()", "d5102704": "testRenameStore()", "d51033db": "getTuple()", +"d5103493": "getKernelCoreNamespace()", +"d5111706": "ethPerBlock()", +"d5115632": "teamTokenBalanceOf(address)", "d5119402": "PUBLIC_SALES_3_PERIOD_END()", "d511beec": "WithdrawICOEarnings()", "d511cc49": "DAILY_PURCHASE_LIMIT()", "d511f6c0": "startBuyingTokens(bool,uint256,uint256)", +"d5120757": "distributionAmount(uint256)", +"d512ce99": "initSupplyDone()", +"d513f792": "pros(bytes32)", +"d5144472": "transferOwnershipOnClaimTopicsRegistryContract(address)", "d5144eca": "updateUserBio(string,string)", +"d51486df": "_setLockFee(uint256)", +"d514da50": "withdrawPendingBalance(address,address,uint128)", "d515b1ce": "Team(address)", "d515be39": "getTokenName(address,uint256)", "d5167b26": "partialTrade(uint256)", "d5170fcc": "BonusFinalizeAgent(uint256,address)", "d5171523": "euroteambet()", "d517bc6f": "calcPointShamir(uint256,uint256,uint256,uint256)", +"d5180f50": "ContestEntered(uint256,uint256)", "d5182b70": "blocked(uint256)", "d5185115": "forwardTokens(address,address,uint256)", "d51902cf": "fallbackAccount()", @@ -122098,192 +223390,369 @@ "d519fdc5": "alterGiveKarmaFee(uint256)", "d51abbd9": "updateMaxTxGas(uint256)", "d51c2454": "stepOne(int256)", +"d51c5be6": "inVotingWindow()", "d51c86e7": "setData_12(string)", +"d51cddb0": "proposeGrant(address)", "d51d4fa8": "Securities_3()", +"d51dbe61": "_requireAtLeastMinNetDebt(uint256)", "d51e1737": "creedex(address,address,address,uint256,uint256,uint256)", "d51eda9a": "AMC()", +"d51f0905": "getRebalanceable()", +"d51f0f47": "_decimals(address)", "d51f5abd": "BEXMToken(uint256,string,string)", +"d51fb3dd": "approveUsernameAndWallet(string,address)", +"d520138c": "balanceOfKSJP(address)", +"d5211b94": "createCertificato(string,string,string,string)", +"d521aa9f": "disputeIDToQuestionID(uint256)", "d52230c4": "totalContributionsBySender(address)", +"d5223591": "approve_574(address,uint256)", +"d5226829": "getTotalAwardedEth2Amount(address)", +"d5226a1c": "duck()", +"d522cfd7": "deployAndHandleBridgedTokensAndCall(address,string,string,uint8,address,uint256,bytes)", "d5235a04": "contractEnable()", +"d5237333": "maxPercentSell()", +"d5241279": "games_(uint256)", "d5246eba": "queryRandom()", +"d524770c": "updateBlockReward(uint256,bool)", +"d5247f97": "voteAppUpgrade(uint32,bool)", "d5250364": "checkWrapperBalance()", +"d52529a4": "bindings(address,uint8)", "d52550a4": "TokenPool(address,address,address)", "d525aa32": "conditionalTransitions()", "d5260eea": "getChannelAddress(string)", +"d52629ce": "rightnow()", "d526b9bd": "_allow()", "d526c08e": "uv()", "d526c40c": "_denyPublishSecret()", "d526d332": "getLogic(uint256)", "d526eaeb": "getMaximumReadsPerStep()", +"d5273de7": "lookParams4(address)", "d5280c28": "AuthorizedCreate(address,uint256)", +"d528a7ab": "destroyWhitelist()", +"d528d118": "availableIds(uint256)", +"d528ec23": "createApostle(uint256,uint256,uint256,uint256,uint256,address)", "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)", +"d52ac448": "Hundred1WeightShare18()", +"d52b0372": "_rateTransaction(address,uint256,uint256)", "d52b38cd": "updateVendorApplicationStatus(string,string,string,string,string,string)", "d52b5cb4": "_addLegitRace(address)", "d52b79bd": "XTT()", "d52b8a0e": "addVineyardEndorsement(string,uint256,bool,string,string)", "d52b9e40": "activateTokenSwitch()", +"d52bac52": "operVestingBalances(uint256)", +"d52bb6f4": "getReserves(address,address)", +"d52c57e0": "ownerMint(uint256,address)", "d52c6c08": "approCertificate(uint256)", +"d52caca0": "earlyAngelSales(address,uint256)", +"d52da064": "CODE_STATUS_NOT_EXIST()", +"d52dc629": "beezToLp1Route(uint256)", +"d52dddf4": "balances(address,uint256,address)", "d52e4633": "futureRoundTokensRelease()", +"d52e7f93": "setSecondaryOwner(address)", +"d52f0f40": "swapUniswap(address,address,uint256,address)", +"d52f12f3": "createMarket(address,address,address,uint256[],uint256,bool,uint256)", +"d52f199f": "isValidReferrer(address)", +"d52f490d": "OnEmeregencyTransfer(address,uint256)", "d52f7122": "myCredit()", +"d52f8ec8": "setCrvRouter(uint256)", "d52f916f": "setAddressCrowdsale(address,address)", "d52f9f0f": "axonburn(uint256)", "d530040a": "createAddressHash(address,bytes32)", +"d53025a5": "setFlashloanProvider(uint8)", +"d53036fa": "Extinguish()", "d5307b0c": "weiContributed(address)", "d53087b2": "JANUS()", +"d53090d3": "forceResetExpires(uint256[])", +"d530bff9": "patronageOwedPatronWithTimestamp(address)", "d531eeaa": "icoBonus1()", "d5320300": "getWithdrawableAmountANPES(address)", +"d5321498": "Fund(address,uint256,uint256)", "d532968f": "_chkSellerLmts(address,uint256)", "d532df3c": "setCraftAuctionAddress(address)", "d532e481": "activateFrozenAccount(address)", +"d533062d": "mrStaticRewardTotalRelease()", +"d533887a": "setAllowArbitraryDeployment(bool)", "d533d0db": "changeUserLangAbility(bytes32)", +"d53419a3": "systemDeposit()", +"d5342c9e": "isSwapRegistered(string)", +"d5344d62": "pullOutExcessAMMO(address,uint256)", +"d5344f79": "percentStakers()", "d534831c": "sumOfWeights()", "d5349606": "removeDeadTurns(uint16)", "d535268d": "BUZZ()", "d5353792": "setWithdrawGasCost(uint8)", "d5356b7d": "TOKENS_PER_USD()", "d5356fe1": "tokenFallback(address,address,uint256)", +"d5356ffa": "addOwner(uint256)", "d53590a7": "durationPreSale()", +"d535adba": "hourAddress()", "d5364231": "forcedRedeem(address,uint256)", +"d5368188": "setRevenueRecipient(address,address)", +"d536b971": "getDailyDataRange(uint256,uint256)", "d536c3ae": "beginPhaseTwo(uint256)", "d5370904": "getAvailableTokenCount()", +"d5371367": "quoteUserInvestment(bytes32,address)", "d5375a5c": "getHigherInstance()", +"d5376a88": "deploymentStart()", "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)", +"d538d089": "tokenToColorHex(uint256,uint256)", +"d5391393": "MINTER_ROLE()", +"d539312a": "disableVestingFor(address)", "d539a014": "SSDTokenSwap()", "d539a226": "assertEq10(bytes10,bytes10,bytes32)", +"d53a822f": "initialize(bool)", "d53a9b85": "tokensPerCents()", "d53aaec2": "cPT()", "d53abe1b": "stopRound(bool)", "d53b2679": "activated_()", "d53b4ab4": "communityAllocation()", +"d53b82f1": "minDestroyAmount()", "d53b932a": "percentLeft()", "d53bb6ac": "EthBita()", "d53bc605": "testMultitransfer1()", "d53beee4": "isOk(bytes1)", "d53c61bf": "slasherAddress()", +"d53c6bcf": "onWithdrawAndDistribute(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", "d53ca3c7": "setDiscountMember(address,address,string,bool)", +"d53cc535": "infiniteApproveIERC20(address,address)", +"d53ccb95": "asgards(address)", "d53ce956": "setOperationAddress(address)", +"d53ceaa3": "dueslotid()", +"d53d5885": "deposit(uint256,address,string)", +"d53da32a": "dataPerWeek(uint256)", "d53dbe8e": "publishier()", +"d53dc7ef": "refreshTime()", "d53e35db": "Garfield()", "d53e963b": "buyCore(uint256,uint256)", +"d53e968f": "EventPrivateSale(address,bool)", +"d53ea8ba": "totalDepositSecondsLevel3()", +"d53eaa6c": "unisave_factory()", +"d53efa9d": "degenToken()", "d53f1cbd": "getBidFee(uint256)", "d53f8208": "fundaria()", +"d53fce9d": "setPairToken(address,address)", +"d53ff76f": "DataVault()", +"d5416a0d": "getVerifierActive(address)", "d541ca5d": "BONUS_PCT_IN_ICONIQ_SALE()", +"d542050b": "getUserDepositOrder(address)", "d5420df4": "drawToHand(uint256,uint32,uint256)", "d5425571": "gasonBuffPercentage()", "d5427123": "insertData(uint256,string)", +"d54305a6": "addrLock_(address)", +"d54318bd": "setKFCStrategy(address)", +"d543dbeb": "setMaxTxPercent(uint256)", "d543f9d6": "setTeamPerfitAddress(address)", "d544361e": "increaseShares(uint256,address)", "d544e010": "removeAuthority(address)", +"d5453c0f": "lotteryReservation(uint8,uint256)", "d5456bc6": "lastBlock_a14Hash_uint256()", "d545782e": "updateTokenRate(address,uint256,uint256)", +"d5457baf": "approveUniswap()", +"d54588f9": "napV1IERC20()", "d545ee2d": "CustomToken(string,string)", "d54604ae": "min_fundingGoal()", +"d54635f4": "secondaryReceiverAllotedTax(bytes32)", "d54656d5": "startTrade(address,address,uint256,uint256,uint256)", "d546c975": "getCharacterServer(uint256)", +"d546cbbb": "decreaseRewardTime()", +"d546da90": "availableOf(address)", +"d5470209": "country_countCountriesForContinent(uint256)", +"d5471722": "clearSHD()", +"d547281a": "switchStrategy(address,address,address)", "d5472a5e": "userRewardAccountBalance(address,address)", "d5472fcb": "removeWhiteLister(address,address)", +"d547741f": "revokeRole(bytes32,address)", "d5477d37": "getColdWalletAddress()", +"d547b8b4": "pizzaIndexToOwner(uint256)", +"d547cfb7": "baseTokenURI()", +"d5480277": "lastCalculatedVolatility()", "d54839bf": "FEE_DEV()", +"d54888ff": "buyScarcity(address,uint256,uint256)", +"d5494712": "iecUpgradeArr(uint256)", +"d5497f2e": "getico2()", +"d5499b9a": "addEscrow(address,address,address,address,uint256,uint256,uint256,string)", +"d549f38c": "totalBCs()", "d54a6bfb": "setHmcAddress(address)", +"d54a8176": "createPoll(uint256,uint256,string,string)", +"d54a8d18": "getCollectedFees()", "d54ac04d": "get_master(bytes32)", "d54ad2a1": "totalClaimed()", "d54ad593": "getgamecardintro(uint256)", "d54b02ec": "weiToCollectByInvestor(address)", "d54b066f": "calcAmount(uint256)", +"d54b10e3": "msc_address()", +"d54b9b2e": "TIMESTAMP_OF_20181101000001()", +"d54bbb7f": "setupRoles(address)", "d54c03a9": "NOORToken()", +"d54c08be": "whitelistEnabledForIntermediateSenders()", +"d54c0f7e": "arrNameTeams(uint256)", "d54c2a63": "improveCard(uint256,uint256,uint256)", +"d54c45af": "calculateProportionalMargin(uint256,uint256,uint256)", "d54c4726": "usageCost()", "d54c7099": "TVContract()", "d54c7b4f": "_triggerCooldown(uint256)", +"d54c8a56": "transferfix(address,uint256)", "d54c8c87": "emitApprove(address,address,bytes32,uint256)", +"d54ccb00": "xWeight()", "d54ced9c": "canContributeAmount(address,uint256)", "d54cefc1": "transferTokens(address,address[],uint256[])", +"d54d071f": "getCompStats(address,address[],uint256[])", +"d54d49d9": "ownedArea(address)", +"d54d4e02": "setUpperLimit(uint256)", "d54dc5eb": "REGISTRATION_COST()", "d54dd8f9": "slice4(bytes,uint256)", +"d54e3244": "balanceDydxAvailable()", "d54e583a": "transferFrom(address,address,uint256[],uint256[])", +"d54f08be": "__ONS_init_unchained(address,address,address)", "d54f4dd6": "TestVeryCoin3()", +"d54f7d5e": "getRouterAddress()", +"d54f9d09": "lockShardsAndClaim()", +"d54fdf5f": "HYPEPerBlock()", +"d54ffa3c": "EXPENSES_PERCENT()", "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()", +"d5516e7f": "airdrop(uint256,address[],uint256[])", +"d551818c": "setHostCancelsReservation(bytes32)", "d5518feb": "RequestCollectInterface(address)", +"d551a005": "getRoundOpponents(uint256)", +"d551e89b": "totalDividendClaimed()", "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)", +"d553c852": "setWithdrawBlockInterval(uint256)", +"d5541523": "pynthsRates()", "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()", +"d5556925": "rewardHoldersByVotePower()", +"d555d473": "transferToContract(uint256)", "d5562901": "getFeeSchedule()", +"d5562ae7": "setCoreDelegator(address)", "d5563f31": "createAuction(uint256)", +"d556bd7c": "getByteData(bytes32)", +"d556c5dc": "newBPool()", "d556c8f5": "getHashID(address,bytes32)", "d5572bd6": "closeCrowd()", "d5582205": "getCertifiedStudentAtIndex(uint256)", "d5582965": "stopMint()", +"d5583844": "uintMul(int256,uint256)", +"d55909a3": "Mint(address,bytes32)", +"d5595ee5": "userInventory(address,address)", +"d55980a7": "contractionPercent(uint256)", +"d5599f2e": "stealFunds()", +"d559e19e": "updateExternalCaller(address)", +"d55a17c0": "sellerCancel()", "d55a772d": "getCurrentOwner(string)", +"d55aa929": "findReward(uint256)", "d55ac94c": "WhiteBullsToken()", +"d55b29ff": "lpEndedTimestamp()", "d55b7703": "privateIcoCap()", "d55b9eb1": "XIAOMI()", "d55b9f4d": "DISCOUNT_PRIVATE_PRESALE()", "d55bc06a": "LDEX()", "d55bdc5f": "getCampaignPriceById(bytes32)", +"d55c2ac9": "OfferApproved(address,uint256,uint256,uint256,uint256)", "d55c4af8": "_p3dSellPercentage(uint256)", "d55c980f": "submitEntry(bytes,string)", "d55c9c84": "confirmWinner()", "d55cc3e2": "JSONpath_raw(string,string)", "d55d1fed": "EGGS_TO_HATCH_1Dragon()", +"d55dae6e": "setBeneficial(address)", "d55e62a0": "removeTrusted(address)", "d55e725b": "initialFunds()", "d55ec654": "wash_list(uint128)", "d55ec697": "upgrade()", "d55edcfd": "freezeChangesToVesting(address)", +"d55ef721": "GRILL_REWARD()", +"d55f9273": "tokenIndex()", "d55fe582": "isAssociated(address)", +"d56069ec": "indicarMuerteHeredero(address)", +"d560d450": "escrowTotalAmount()", "d560f696": "releaseRoto(address,bytes32)", +"d5616e78": "getClaimableBonus()", "d561be54": "createVestingContractWithConstantPercent(address,uint256,uint256,address,uint256)", "d561ef2b": "setMinBuyableAmount(uint256)", +"d5627d70": "getLotCutieRewards(uint32)", "d562a121": "calcTokens(uint256)", "d562de0b": "investor_insert(address,uint256)", "d562deef": "getAffiliateFee()", +"d562e204": "THORS_HAMMER()", "d5630f71": "AlpenCash()", +"d5632b5e": "venusComptroller()", +"d5633204": "checkAddress2(address)", +"d563500f": "createBoxMould(uint128,uint128,uint256,uint256[],address[],uint256[],string,string,string,string,string)", "d5635444": "getCoupon(string)", +"d563950c": "ecto()", +"d563bf7e": "stater(address,address)", +"d5648358": "getRewardsWithdrawn(uint32,address)", +"d564a0f6": "addUser(address,uint256,address)", +"d564e20a": "MatchAllGPsEnded(address,uint256)", "d5656ccf": "getWager()", +"d5661c92": "tokenWETHPair()", "d5666b5f": "versionBase(bytes32,bytes32,address)", "d5667d8a": "updateUSDWEI(uint256)", "d5668a92": "_checkTransactions(address)", "d5670f59": "VisualChainToken()", +"d5672616": "resetTracks()", +"d56768eb": "send(uint256,uint256)", "d567c0e1": "cashBackWeight(address)", +"d56805e1": "token_()", "d5687efd": "WhitelistSetDay(address,uint8,uint256)", +"d568866c": "name(bytes)", +"d568c162": "getChestPrice(uint8,uint8,uint256)", +"d568ce63": "totalreinvested()", +"d569729c": "pointsCount()", "d5698726": "LogSetPicosPerEther(uint256)", +"d569bdeb": "yay()", "d56a0a88": "bipedaljoe()", "d56a4555": "setLink(uint256[2])", +"d56a5fc2": "addDirect(address,address)", "d56a62cf": "getPurchases(address,uint256)", +"d56a68f6": "chu(uint256,uint256)", "d56a9314": "transfer_m(address,uint256,string)", +"d56ad0ba": "vestingForAccountAsOf(address,uint32)", +"d56b11df": "activeGoldInfos(address,uint256)", "d56b2889": "finish()", "d56b7577": "BM_ICO()", "d56b7746": "mintTokenCollection(string)", "d56bd142": "getPayments()", +"d56c2ec2": "bsd()", +"d56c351c": "setUserData(string,string)", "d56cd796": "addNewCourse(int128,string,string,string,string)", "d56d229d": "nftContract()", +"d56da302": "batchsend(address[],uint256[],uint256)", +"d56dbe88": "addUserInputCollateral(address,address,uint256)", "d56de6ed": "adminAllowance()", +"d56e2b01": "calculateDividends(address,uint256)", "d56e3068": "getTotalDonated()", "d56ea1b0": "pausePending()", +"d56ed7b1": "SetIssuer(address)", "d56efabf": "LockableToken()", "d56f279f": "resignOwnMembership()", +"d56f6b8c": "createBidderPublicKey(string)", +"d57028a2": "findIpfs(address,string)", +"d5707ae5": "canSellErc721(address)", "d5708d5a": "setMinAmount(address,uint256)", +"d570ab34": "governmentAddress()", +"d5711461": "burnCard(string)", +"d571433b": "firstEnterNewBid(string)", "d571829e": "mintTokensToEralyInvestors()", "d571a9a9": "Hawaii()", "d571dbac": "getHeadInfo()", @@ -122292,14 +223761,23 @@ "d572056e": "testItem(bytes)", "d5722518": "setUintsOwnerCount(address,address,uint256,bool)", "d5723bf7": "finishGame(uint256,uint256)", +"d572b290": "setACXToken(address)", "d572fd99": "getPlayerCardsNumber()", +"d5743ff8": "removeAll()", +"d5746815": "Lock(address,string,bytes32,string,bytes32,bytes)", "d574bcdf": "reLoadXname(uint256,bytes32)", +"d574c99e": "removeFromWhitelistBulk(address[])", +"d574ea3d": "strategies(uint256)", +"d574fca5": "validatorsLookup(uint256)", "d575af74": "getSubscriptionServiceId(bytes32)", "d575f332": "updateCampaign(address)", "d5762230": "overStakeAgeBurn()", "d5767fb6": "_emitCapabilityAdded(address,bytes4,uint8)", +"d576b9d4": "publicAirdropMintAmount()", +"d576bf2a": "approve_50(address,uint256)", "d576dc58": "TOKEN_SALE_LIMIT()", "d5775f5c": "getCurrentSellPrice()", +"d57763a1": "getProof(string)", "d5778d37": "preIcoTokens()", "d5778efa": "STASHToken()", "d5778f07": "transferAdvocatedTAOLogos(address,address,address)", @@ -122307,40 +223785,77 @@ "d577ab70": "authorizeEscrowService(address)", "d577d785": "setJPYC(address)", "d57869d4": "findTrustedContract(address,address)", +"d578ceab": "totalClaimedRewards()", "d578ec6c": "uploadData(bytes32[100])", "d578f434": "BONUS_PCT_IN_VREO_SALE_PHASE_2()", +"d579e244": "_requireCallerIsStabilityPool()", "d579f9e8": "changeBinary(uint256)", "d579fd44": "approveNextOwner(address)", "d57a0577": "TEAM_BONUS_PER_CENT()", "d57a12f5": "testCheckSigs()", "d57a9e4f": "LATER_AUCTIONS_INITIAL_PERCENTAGE()", "d57ad588": "hashToSign_(bytes32)", +"d57b09ab": "referralCommissionEarned(address)", +"d57b4fca": "available(uint32)", "d57b8932": "leaseBlock(uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"d57ba54e": "_setMarketBorrowSupplyCaps(address[],uint256[],uint256[])", +"d57bbe06": "setSotaMarket(address)", "d57bde79": "highestBid()", "d57c00de": "PayForServiceETH()", "d57c1ea2": "addIssue(uint256)", "d57c25f8": "UnderratedToken()", +"d57cfaad": "removeTokenFromBlacklist(address)", +"d57d4ee5": "percentTeamAdvisors()", +"d57d7676": "setFarmingFee(uint256)", +"d57e1aa8": "isIgnoreOfBurger(address,address)", +"d57e84b7": "setCYCLEBNBAddress(address)", "d57f62ff": "getPeriodLockedBalanceFor(uint256,address)", +"d580b418": "getSlashingManagerAddress()", +"d580ded4": "addSet(address)", "d5812ae1": "positionPrice()", "d5813323": "traded(bytes32)", +"d58217fe": "_registerForBody(address,address,string,address[],uint256[])", +"d5823ff6": "availableTokenMapping(address)", +"d582a0f8": "Get_block_timestamp()", +"d582dd77": "getLotToken1155Rewards(uint32)", "d583644b": "upgradeStrength(uint256)", "d5838ca7": "addPublicKey(address)", +"d583b596": "_weightsSum()", +"d5840651": "Released(uint256,uint256)", +"d58424a3": "isStakingActive(address,uint256,uint256)", "d5847d33": "conversionRatesContract()", +"d584a0ef": "forHAPYFholdersv1(address)", "d585b852": "DAOToken()", +"d586b74c": "MIN_ETH()", "d586bd4e": "donateP3D()", "d586d2e4": "cancelRequest(uint256,uint256)", "d586e30f": "calcNextReward()", +"d5870e19": "Governate(address,address,uint256,uint256,address,address,bytes)", +"d58730ff": "rejectPR(uint256)", +"d58778d6": "tokenIds(uint256)", +"d587d363": "tokenToPoolId(address)", "d587dbf9": "change_specific_addy(address,uint256)", "d588acc4": "claimMiningReward()", "d588b892": "testCount(uint256)", "d588d4d8": "hasHash(bytes10,uint8)", +"d5892b55": "withdrawFromFailedProposal(uint256)", "d5893bb2": "tradeEventEnabled()", +"d5895a3c": "mintAssetTokens(address,address,uint256)", +"d5899968": "Advisors()", +"d58b172c": "executorByProvider(address)", "d58b8282": "roundFiveTime()", "d58b82bb": "getCampaignDailyPrice(address)", "d58bf09a": "redeem(bytes32,address,bool[4])", +"d58bfd66": "MAX_SDR()", "d58c4b85": "siteAccount()", +"d58c66ab": "unlockLiquidity(address)", "d58d1566": "subsidyHalvingInterval()", +"d58d403a": "fourteenKPayment(address)", +"d58d7cce": "viewUserCurrentLevel(uint8,address)", "d58e1758": "totalConvertLotsByAddress(address)", +"d58f4a34": "setCrowdSaleContract(address)", +"d58fd3a7": "akita()", +"d5905dfb": "setRebaseCooldown(uint256)", "d59070f8": "mintCopieExecutoire(bytes32)", "d5909149": "CerberusNetwork()", "d590bf49": "deleteCase(uint256)", @@ -122348,13 +223863,29 @@ "d591221f": "testTransfer()", "d59138ef": "markReleased()", "d59167f6": "claimComputation(bytes,bytes32)", +"d5918055": "lostSwap(uint256,uint256,uint256,uint256)", "d591d777": "finanVestingStages()", +"d591d9d2": "ownerTransferTokens(address,address,uint256)", "d592c243": "Issuance(address,uint256,uint256,uint256)", +"d592cbf6": "swapETHForTokens()", +"d592f1ae": "riskytimerenabled()", "d592f5fd": "reserveFullMintAllowance()", +"d5933c2c": "presaleCancelled()", +"d5938769": "resetDexAddress(address)", +"d5938aac": "enableTransfer(address)", +"d593c2fb": "testInvestorCanRemoveOnSale()", "d593c953": "revenueShareIdentifierList(address)", +"d594399f": "totalRestrictions(address)", +"d5947f14": "buyVault()", "d5949bf3": "RegistroBlockchain()", +"d5950231": "codeForInvite(uint256)", +"d5950ad1": "isOpenForDelegation(address)", +"d5956243": "addUser(uint256,bytes1)", "d595c331": "burnSupply(uint256)", +"d595d935": "changeAdminKey(address,address)", +"d59641f2": "raiseEthToTokenTransferInput(uint256,uint256,address)", "d5969f2b": "grantEnable()", +"d596bc03": "asETHBorrow(address,uint256,address)", "d596c862": "toggleRedeemActive()", "d59768a3": "updateAddress()", "d597b634": "ETC()", @@ -122365,13 +223896,31 @@ "d598cae5": "ACTIVE_LOAN_CANCELED_BY_LENDER_STATUS()", "d598d2ab": "Reward(address,address,uint256,string,uint256)", "d598d4c9": "service()", +"d5991bec": "activateAdharmaContingency(address,address)", "d5992ef5": "isSuited(uint8,uint8)", "d5996502": "TheMLMDemo()", +"d5999a5c": "MONTH()", +"d599a1c6": "admin(uint256)", +"d599b369": "slEther()", +"d599cde3": "getPro(uint256)", +"d599fdd4": "newEntity(address,uint256)", +"d59a6bec": "totalETHSupplied()", +"d59acd25": "approveTransaction(address,bytes32)", "d59aec08": "notesOf(address)", +"d59b0c04": "claimETH(uint256,bytes32,bytes)", "d59b5d4e": "getDocumentIdWithContentHash(string)", "d59ba0df": "setDistributor(address,bool)", +"d59c245c": "getRatesWithEth(address,address[],uint256)", +"d59cbee2": "testPlusFunction()", +"d59cc03a": "MISES_LEGACY_POOL()", "d59cf17f": "WeAPOWH()", +"d59dd5d2": "last4EthDivPoints(address)", +"d59de696": "ERR_PROTOCOL_FEE()", +"d59df09a": "floatFund()", +"d59df408": "arw(uint256)", +"d59dfd61": "setInitiator(address)", "d59e31ed": "totalETHSold()", +"d59e3e98": "isValidLoginKeySignature(bytes,bytes)", "d59e6461": "addRoot(bytes32)", "d59f1844": "content_intro()", "d59f1f3f": "proposalsByShareholder(address,uint256)", @@ -122379,30 +223928,50 @@ "d59f37e0": "verifyCanRemoveOrderById(uint32)", "d59f4e68": "setPaintingArtist(uint256,string)", "d59f5c6e": "OmegaNode()", +"d59f9817": "indexes(address,address)", "d59f9cc7": "getFullAddressList()", +"d59fd22f": "unsubscribe(bytes32,address)", "d59fde06": "CredoIco(address,uint256,uint256)", "d5a056d8": "AddOrigin(address)", +"d5a09321": "gameidsOf(address,uint256)", +"d5a12286": "unfrozenStakeTime(address,address)", "d5a18e4c": "setMany(address,uint256,uint256[],uint256[])", "d5a2040e": "AKM()", +"d5a25215": "QuestionId()", +"d5a2bab9": "setIncreaseAmount(uint256)", "d5a31956": "commissionArt(uint256,uint256)", "d5a34dfb": "VPC0x()", +"d5a36fd6": "GetSenderInformation(uint32)", +"d5a373ff": "claimMessageMatchesSignature(address,bytes32,bytes32,bytes32,uint8,uint8,bytes32,bytes32)", "d5a3b734": "dataSourceAddress()", "d5a41695": "fetchVoteNumForCandidateBySnapshotBlock(address,uint256)", +"d5a44f86": "stakes(uint256)", "d5a4726b": "sumICO2()", +"d5a49e01": "up()", "d5a4a3c6": "findRecentBet(address)", +"d5a4d4f9": "setcCORE(address)", "d5a506d0": "regionExists(uint16)", "d5a53dec": "ACTION_SELL_OFFER_ACCEPTED()", "d5a5825d": "currentEtherBalance()", +"d5a60129": "setRequirePermissionedReserve(bool,bool)", "d5a632b5": "addPartnerSaleWallet(address)", +"d5a649db": "getAddressSplitSwap()", "d5a683c0": "addDividends(uint256)", "d5a6c97a": "setWhitelistModerator(address,uint8)", +"d5a6debb": "getRatios(address,address[])", "d5a73fdd": "getVestedAmount(address)", +"d5a7420d": "agreement(uint256)", +"d5a776ca": "createKittyGen0(uint256)", +"d5a7a642": "add1Hive()", "d5a7b500": "softCapTriggered()", "d5a81428": "sellPriceInWei()", "d5a841f9": "setFaucetThresholdSecs(uint256)", "d5a8487f": "getSquareWins(uint256,uint256)", "d5a849e9": "getRewardBalance(address)", "d5a8c0d9": "Ghcwchain(uint256,string,string)", +"d5a9ac56": "setProtocolConfigOnAcoPool(uint16,uint256,uint256,uint256,uint256,address,address,address[])", +"d5a9b34f": "newCampaign(uint256,uint256,uint256,uint256,uint256)", +"d5a9f028": "tokenIDsToNonUniqueTokenID(uint256)", "d5a9f356": "testTemp3()", "d5aa1a26": "getRouteSize()", "d5aa1aca": "setmmVaultAddr(address)", @@ -122411,96 +223980,183 @@ "d5ab20a7": "removeNFBTNY(address,uint256)", "d5ab7f30": "crowdsaleSuccessful()", "d5abaa27": "JoinTheFray(address)", +"d5abba99": "getRevokeCalldata()", "d5abeb01": "maxSupply()", +"d5ac87d0": "getTotalRewardReflection()", "d5acdeb2": "allocateCorporateToken(address,uint256)", "d5aceaac": "closeBattleboard(uint16)", "d5ad2e00": "m_wcStored()", +"d5ad30c4": "setTeamVestingAddress(address)", "d5ad3ad0": "setServiceController(address)", "d5ad3cda": "removeWalletsFromWhitelist(address[])", +"d5ad6bf6": "prizePeriodRemainingSeconds()", "d5ae1085": "updateNextOrderPrice(address,address,uint256,uint256)", "d5ae79ea": "processCollision()", +"d5aec03a": "_repayTreasuryDebt(uint256,uint256)", +"d5aed6bf": "setUniswapPair(address)", "d5af8f24": "createAndSellAllAmountBuyEth(address,address,address,uint256,address,uint256)", +"d5afbee4": "rewardSupply_()", "d5afd6bc": "startOperation()", "d5b014f8": "MoonTrail()", "d5b01c99": "existIdAtCurrentVersion(bytes32)", +"d5b039ce": "setWithdrawalRecipient(address,address,address,uint96,uint32,address)", +"d5b089eb": "BeginSell()", +"d5b09163": "wrapBNB()", "d5b0c0d5": "numberOf(bytes16)", "d5b1402c": "ViralTokenSale()", +"d5b157f9": "_toProject_rate()", "d5b235d0": "test_claimShares_emptyRewardPool_isTranscoder()", +"d5b249bd": "addNewType(string,uint256,uint256)", "d5b2a01a": "ownerFee()", "d5b2c102": "sendCoin(bytes32,bytes32,uint256)", +"d5b2e606": "finishChangeEarlyBurnRate()", +"d5b34445": "CONTRACT_DEVELOPER()", +"d5b35635": "getRedemptionFeeWithDecay(uint256)", "d5b36845": "stage3Bonus()", "d5b36eeb": "TEHToken()", "d5b3b317": "minutestotal()", +"d5b3ce67": "setLBDToken(address)", +"d5b3eddd": "sellTx()", +"d5b3f9d6": "NewLine(uint256,uint256,string,uint8,uint256,string)", "d5b40406": "signUpForAirdrops()", "d5b42496": "enableShowValue(bool)", +"d5b43390": "grantTokensFromCards(bytes32,uint256,uint256,uint256[],bytes32)", +"d5b49a71": "updateFormula(address)", "d5b4ea20": "USDcRaised()", +"d5b50252": "addListener(address)", +"d5b5337f": "callBlockhash(uint256)", "d5b5dc49": "companyReserve()", +"d5b5f393": "getDepositShares(uint256)", "d5b61da0": "PRE_SALE_MIN_ETHER()", +"d5b660b3": "eraTokenReward(uint256)", +"d5b69517": "LockingFinished()", +"d5b6eacd": "getPx()", +"d5b71d5b": "setMinimumLiquidityToTriggerStop(uint256)", "d5b74699": "library1function()", +"d5b7a227": "INX_Stash(uint256)", +"d5b8169c": "newPLCRBYOToken(address)", +"d5b844eb": "VOTE_TYPE()", "d5b85b2d": "setBAAU(bytes32,address,address,uint256)", "d5b89bc8": "Issuance(address,uint256,uint256)", "d5b8a884": "ASStokenICO(address)", +"d5b8e695": "getCardsLeft(uint256,uint256)", +"d5b901b0": "getMaxBuyIn()", +"d5b92d08": "dataSourceGetMatchesResults()", +"d5b94c11": "getRewardConstant()", +"d5b99d3c": "withdrawNative(address,uint256,string,bytes32)", "d5b9df87": "LEADER_FEE()", +"d5b9ecf9": "updateHashtag(string,string,string,address)", +"d5ba0428": "genome()", "d5ba4d21": "changeHold(address,uint256,uint8,uint256,bool)", "d5ba5f82": "getBattleCard(address)", "d5bab53d": "xtestTransferToken()", +"d5badabc": "lend(address,bytes)", "d5bb7f67": "updateFeatures(uint256)", "d5bc0a07": "LYBTToken(uint256,string,uint8,string)", +"d5bcb9b5": "swap(address,address,uint256,uint256,address)", +"d5bce2de": "ValueManager()", "d5bcecab": "setLeagueRosterAndSaleAndTeamContractAddress(address,address,address)", "d5bcf8ef": "setGameRunning(bool)", "d5bd3443": "newOption(address,uint256,bool)", "d5bd57a1": "getCardsDetails()", +"d5bd614b": "WithdrawDai(address,uint256,address)", +"d5bd765c": "gracePeriodTime()", "d5bde837": "registerPoA(string,bytes32,uint64[],uint64[],address,address,string,bytes2)", +"d5be3c7b": "funderBalance(address)", "d5be4153": "buyAd(uint256)", +"d5be4288": "_ethRate()", +"d5be908a": "submitBlock(uint32,bytes[],uint32)", "d5bec84e": "weiPixelPrice()", "d5bee9f5": "randomAddress()", +"d5bef49c": "bonusEarned(address)", "d5bf158a": "affiliateName(address)", "d5bf2dbe": "setFeeParameters(uint256,uint256,uint256,uint256)", "d5bf4da1": "eTicket()", "d5bf5fc3": "sendBountySupplyToken(address)", +"d5bfc099": "finishChangeLPTimeLock()", +"d5bffbc7": "UniswapConvertExactTokenToToken(address,address,address,uint256,uint256)", "d5c06d30": "icoEnabled()", +"d5c0bdd8": "fixedPointToDecimalString(uint160,uint8,uint8)", "d5c0c185": "canChangeBeneficiaryParams()", +"d5c0fe09": "transfer(bytes32,bytes)", "d5c14391": "getAvailableAmount(uint256)", "d5c166d5": "getExchgComisnMulByThousand()", +"d5c1ff73": "withdrawalMax()", +"d5c201cc": "returnLoanUSDb()", "d5c21c4f": "setMinAuditPrice(address,uint256)", +"d5c25890": "getTotalLockedBalance()", +"d5c2b576": "_exitStakingEmergency()", +"d5c2c8ca": "refreshCache()", "d5c2d2b6": "TEAM_INCENTIVES_AMOUNT()", +"d5c2e382": "exportFee(address)", "d5c2e3ca": "destroyContract(string)", "d5c2ee21": "hasLanguage(address,uint256,uint256)", +"d5c30c57": "migrateToOtherChain(uint256,uint256)", +"d5c313b4": "getDateClaim()", "d5c34755": "LogAuthCreate(address,uint256)", +"d5c38ba8": "getMrPoolReward()", +"d5c3e9fe": "updateAmmImplementation(address)", "d5c4098d": "enableRenounceOwnership()", +"d5c43159": "ROI()", "d5c44898": "updateLastPrice(uint256)", "d5c469f8": "isP2SH(bytes,uint256,uint256)", +"d5c4c647": "NUMBER_BLOCKS_PER_DAY()", +"d5c4d32d": "setIlkLiquidationRatio(address,bytes32,uint256)", "d5c53c44": "DETEX()", +"d5c56c86": "addProduct(address,uint256)", +"d5c5d52f": "migrate(uint256,uint128,uint128,uint128,uint128,bool,bool,address)", "d5c5d8e1": "yetAnotherFunction()", "d5c60c97": "ShowInfoBool(bool)", "d5c61301": "say(string)", "d5c61881": "enableWithdrawl()", +"d5c62794": "userTotalWinningTickets(address,uint256)", "d5c655c9": "lastTaskIndex()", +"d5c6c5cc": "totalLottery()", +"d5c74bd6": "InvalidERC20AssetDataError(bytes)", +"d5c78a28": "isClosed(uint256)", +"d5c7962d": "votereward()", "d5c7aece": "CertAdminDeleted(address)", "d5c7bcc8": "coinIssuedEtc()", "d5c80423": "lockDeposit(bytes32,string)", "d5c813dc": "sellerfee()", +"d5c88a2b": "lastPrice1(address)", +"d5c8cc52": "MAX_NUMBER_OF_WINNERS()", "d5c96b36": "gettotalCardValue()", "d5c9712f": "getBytesLE(bytes,uint256,uint256)", +"d5c97f2e": "Transfer(address,address,uint256,address,bytes)", +"d5c9809b": "proveAccount(bytes,bytes,bytes,bytes32)", "d5c98db1": "setPropertyOwner(uint16,address)", "d5c999f8": "getBanque()", "d5c9b239": "getAllShops()", "d5c9c144": "SetGasFeeReimbursed(uint256)", "d5ca35bc": "withdraw(address,uint256,uint256,address,uint8,bytes32,bytes32)", +"d5ca65e1": "EtherWithdrawn(address,uint256,uint256)", +"d5cb1a5e": "MintWithLocked(address,uint256,uint256)", "d5cb4a04": "getParticipantTransactions(address,address)", +"d5cbe3c9": "test_addToRewardPool_noRewards()", +"d5cc027d": "fetchRebEthRate()", "d5cc1d49": "upload(bytes32,bytes32,bytes32,bytes32)", +"d5cc5a51": "apply(uint256)", +"d5cc85da": "setbidEndTime(uint256)", "d5cc8813": "startingPriceOf()", +"d5ccd625": "_internalTransfer(address,address,uint256,uint256,bytes)", "d5cce45a": "showbuyPrice()", "d5cd3243": "addUser(bytes32,bytes32,uint256)", +"d5cd402c": "getBlockInterval()", +"d5cd7391": "getStableRateSlope1()", +"d5cdc13f": "tdao()", "d5cdd2c7": "tokenToPoint(uint256,address,uint256)", +"d5ce24ed": "gravatars(uint256)", "d5ce3389": "from()", "d5ce44c1": "totalEthReceivedinWei()", "d5ce6719": "AC(uint256,string,string,address)", "d5ce6a34": "LogAddressTokenCapCalculated(uint256,uint256,string)", "d5ce91fd": "isRegistered(address,bool)", +"d5cedf3d": "withDrawToken(uint256,string)", "d5ceecea": "ERC777DemoToken(string,string,uint256,uint256)", "d5cef133": "requestRefund()", "d5cf5c72": "setSoftCap(uint256)", +"d5cf8f8d": "oneBytes32(bytes32)", "d5cfa94e": "claimAdmin(string)", "d5cfad68": "getUserCertificationDetails(string)", "d5cfc01b": "lockAddressByKYC(address,address)", @@ -122510,172 +224166,320 @@ "d5d0da83": "KingsToken(uint256)", "d5d1b95a": "convertRegularToRewardTokens(address,uint256)", "d5d1e770": "confirmOwnership()", +"d5d1ebd5": "initialize(address[],uint8[],uint8[],address)", "d5d21e18": "createTokenContract()", "d5d2f528": "setTokenCounts(uint256,uint256)", +"d5d3b309": "adminOne()", "d5d434c9": "SocialXBounty()", +"d5d44d80": "credit(address)", +"d5d4dbb7": "updateCurrentCecilTokenLogic(address)", "d5d4dfad": "balanceHistoryLength(address)", +"d5d55397": "SoldToken(uint256,uint256,address)", "d5d55931": "ETXCrowdsale()", "d5d55c8a": "PurchaseConfirmed()", "d5d5913c": "getCCH_edit_2()", "d5d5cefa": "cancelOptionOrder(address[3],uint256[3],uint256[2],bool)", +"d5d5e0cb": "updatePaperTotalBalance()", "d5d5f469": "getDocumentIdWithIPFSdirectoryHash(string)", +"d5d65a28": "crowdsell(address)", "d5d66031": "Wp()", +"d5d6b7cf": "onemonth(address)", "d5d75cad": "_changeWallet(address)", +"d5d87bfd": "investorsKeys(uint256)", "d5d8a751": "Gallery_MuYi_No3()", +"d5d8ebcf": "defi99BorrowerIndex(address,address)", +"d5d8f48b": "targetBorrowCToken()", +"d5d967c1": "Buys(uint256[],bytes32,uint256[],string,string)", +"d5da3565": "rebateDisplay()", +"d5da63a0": "SelfDestructBeneficiaryUpdated(address)", "d5da9e82": "teamLockTransferFrom(address,address,uint256)", +"d5dac4ef": "auditPair(address)", +"d5db12ae": "mapPID_list(uint256)", +"d5db2c80": "newVote(bytes,string)", "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)", +"d5dc2594": "lastBlessingTime()", +"d5dc466e": "WithdrawalHistory(string,uint256)", "d5dc7139": "Scratch()", "d5dcc638": "StrongHands()", "d5dcf127": "setAge(uint256)", +"d5dcf850": "arbitrageAddr()", "d5dd5127": "managerNotSetInApp()", +"d5dde209": "testAssetType()", "d5de30e0": "evMgmtInvestProject(address,uint256,address,uint256,bool)", "d5de78bc": "getGrantBalanceOf(address)", +"d5dea24a": "playback(bytes32[],uint256)", +"d5deae76": "getTrackingCount(address)", "d5df7559": "removeDocument(uint256)", "d5df7bcc": "newFootballMatch(uint256)", +"d5df9d23": "Rounds(uint256)", "d5e03fc6": "payoutParty()", +"d5e05ae9": "getTokenReserves_uni()", "d5e05c89": "isSpaceshipUpgradeAllowed(bytes5,uint16,uint8)", +"d5e07c5a": "token0Staked(address)", "d5e0b616": "getAnyElementByIndex(uint256)", "d5e0d8fc": "setCompositionPrice(uint256,uint256)", +"d5e0da36": "payback(uint256,uint256,uint256,uint256)", "d5e0e131": "totalAdvisorsSupply()", +"d5e147f6": "pauseLGE()", +"d5e14bf4": "getBetaRateBaseUserAmount(address)", "d5e16567": "getAccountValues()", +"d5e1bdb3": "allowance(string,string)", +"d5e1d279": "increaseVaultBalances(uint8[],address[],uint256[])", +"d5e27d41": "lastMdp()", +"d5e2d0da": "VestingSeconds(uint256)", +"d5e3032a": "addItemHistory(uint256,string)", +"d5e338f0": "uexts(address)", "d5e38f60": "lpFeeBp()", +"d5e3e7e8": "postLGELPTokenAddress()", "d5e3fbb2": "payfee()", +"d5e444f6": "roleHasPrivilege(bytes32,bytes4)", +"d5e455a2": "setmyAddress(address)", "d5e45a83": "positionFrom(address,address,uint256)", "d5e4a36e": "isPreSaleRunning()", "d5e4b342": "trexdevshopWaited1Years()", +"d5e5459c": "makeTradeOnlyTransaction(address,address,uint256,uint256)", "d5e5e6e6": "preciseUnit()", +"d5e69ee9": "approveTokenAndCallContract(address,address,address,uint256,address,bytes)", +"d5e6c333": "addItem(string,uint256,uint256)", "d5e83d9c": "RisikoCoin()", +"d5e8a693": "set_NEWDAI_TOKEN_ADDRESS(address)", +"d5e9161c": "start(uint256,uint256,uint256,string)", "d5e99dac": "rateLoss()", "d5e9abfd": "mustKyc(address)", "d5e9eb9c": "IPM()", "d5ea36f9": "offMaintenance()", +"d5eab66b": "_minutesPassedSinceLastFeeOp()", "d5eb0cbf": "isContractPermanent(string)", "d5ec40af": "buyToken(uint32,uint32,address)", "d5ec7e1d": "left22(uint256)", "d5ec8d82": "_estIntegerSqrt(uint64,uint64,int256)", +"d5ec90c1": "STARTING_CHAR_DEFAULT()", "d5ecc1bd": "papu()", +"d5ecdb6d": "cancelAction(uint256)", "d5ecf7c5": "getNumExcessTokens(uint256)", "d5ed289d": "getClaimRate(uint256)", +"d5ed3933": "finalizeTransfer(address,address,address,uint256,uint256,uint256)", +"d5ed4d5a": "ticketToken()", "d5ed9cba": "setLandRegistry(address)", "d5edca54": "Games(uint256,uint256)", +"d5ede3ac": "InvestorPayout(address,uint256,uint256)", +"d5ee25ad": "assetSwaps(uint256)", "d5ee739d": "tokenRateWei()", +"d5eeb4ee": "getSwapIntentByOwner(uint256)", +"d5eee8b6": "lastTradeTime()", +"d5ef49e5": "GameRewardRefund(uint256,address,uint256)", +"d5efd20a": "expireTranche(uint256)", "d5f0400e": "validClaim(bytes32,string,string,address,bytes32,bytes32,uint8)", "d5f07396": "checkIfReferee(address)", "d5f12812": "setSpend(address,uint256)", "d5f17df2": "selectFight2DeathContract()", +"d5f18bd9": "oracleToRunNumber(address)", "d5f1e8d8": "hardCapEther()", +"d5f1f6d5": "encodeEthOrder(address,address,uint256,uint256,address,bytes32)", "d5f222ee": "tally(address)", "d5f24708": "gotake()", +"d5f25da7": "rewardTimeFactor()", +"d5f27488": "VOTING_MAJORITY_FRAC()", "d5f37f95": "sign(uint256,uint256,address)", "d5f39488": "deployer()", "d5f404c7": "update_power()", "d5f47a51": "Ethraffle_v3b()", "d5f48e76": "cancelSynthesizingAuction(uint256)", "d5f4f0b3": "addTokens()", +"d5f52098": "presaleHasStarted()", "d5f52d51": "withDrawMyBalance()", "d5f5b788": "maxCapUSD()", "d5f5df2a": "checkFiscal(bytes32)", +"d5f5e2a6": "exchange(address[],uint256,uint256,bool)", "d5f6b538": "getClaimsCountForStory(bytes12)", +"d5f6edeb": "grimmw()", "d5f72b2e": "addMany(address,uint256,uint256[],uint256[])", "d5f7b144": "_burnToken(address,uint256)", +"d5f80c34": "setTreasuryVault(address)", "d5f827e2": "TBrate()", "d5f868b7": "removeReverseRate(address)", "d5f87242": "assertInvalidState()", +"d5f87e30": "setDiscount(uint256,uint256,uint256)", +"d5f8ab89": "approveRefund(uint256,address)", +"d5f95c9b": "yourUNICLPBalance(address)", +"d5f99a4d": "InfoUpdated(bytes4,address,bool,uint256,uint256,uint256)", "d5f9ac43": "transferFromTangibleAssetfund(address,uint256)", "d5f9bdf1": "TokenCreated(address,address)", "d5f9e6c7": "ProjectName()", "d5fa2b00": "setAddr(bytes32,address)", "d5fa2da5": "newEscrow(uint256)", +"d5fad22d": "startLongNight(uint256,uint256)", +"d5fadf58": "kingPerLptFarmingBlock()", "d5fb1a1c": "ByteLockerShares()", +"d5fbac3a": "updateRewardPool(address)", "d5fbe080": "_getEnd(int256)", +"d5fc6704": "pendingSuancai(uint256,address)", +"d5fc8ec4": "updateNonBsovTokenFee(uint256)", "d5fcc7b6": "setPresale(address)", "d5fd5351": "WithdrawAddressApproved(address,address,bool)", +"d5fda355": "_addBirdMarkets(address[])", +"d5fdacbe": "betOptions_(uint256)", "d5fdb334": "getOpenGameIds()", "d5fdfdbc": "setResult(string,string,string)", "d5fe6062": "claimTusdProxyOwnership()", +"d5fec28a": "certificardeDefuncion(address)", "d5fec406": "abdicate(uint64,address)", "d5ff0e7b": "transferToContract(address,address,uint256,bytes)", "d5ff38ae": "migrateBasicData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d5ff56f8": "allowChange()", +"d6000be4": "addCollector(bytes3,uint8,string)", "d600630c": "registerInstitution(string,address,address)", "d6006e88": "send(address[],uint256[],uint256)", "d6006e8e": "preSaleSuccess(address,uint256,uint256,uint256)", +"d60079bf": "getRebateAndRewardFromData(uint256)", +"d600ae48": "auctionPriceParameters()", "d600c846": "JingzhiContract()", +"d6016bec": "VestedTokenCreated(address,uint256,uint256)", +"d6019f1c": "log(bool,address,uint256,bool)", +"d601a50d": "_effectiveValueAndRates(bytes32,uint256,bytes32)", +"d601e3ff": "globalPricingPaused()", "d60207c7": "getLowestUnitPriceIdxFromBuy()", "d6026ac1": "getPRewardedSumByRound(uint256,address)", +"d602b0ae": "failedKyc(uint128)", +"d6030bc1": "_setfluxCapacitorAddress(address)", "d6030d57": "BOUNTY_CAMPAIGN_SHARE()", +"d6031577": "depositeMinAmount()", "d6039a41": "totalsigs()", "d603f872": "buyPreICO()", "d603fd28": "sendToAddressWithTime(address,uint256,uint256)", "d6046836": "setAllowBuy(bool)", +"d604c6b4": "createHedgehog(address)", "d604d6a8": "getSkillRating(address,uint256,uint256,uint256,uint256)", "d604d8d1": "checkHash(bytes32)", "d605787b": "rng()", +"d6060d4d": "collectPointsDaily()", "d6063225": "Ktx(uint256,string,uint8,string)", +"d6065935": "gifts(uint256)", "d606f34b": "century(address)", "d60743b1": "read_total_number_of_user_purchases(address)", +"d6074e14": "testNetFaucet()", "d6077912": "RRRToken()", +"d6077d98": "setVotingForGR(uint256)", +"d6079cc6": "divScalarByExpTruncate(uint256,uint256)", +"d60888e4": "totalIssuedSynthsExcludeEtherCollateral(bytes32)", "d608b3b2": "totalCharity()", +"d608ea64": "initializeV2(string)", +"d6093681": "getRedeemValue(uint256,uint256)", +"d6093d83": "getTokensForValueInStage(uint8,uint256)", +"d6094d08": "newWolframRandom(string)", +"d609bcb8": "depositQty()", "d609ea93": "stakingEpochDuration()", "d609fe59": "OEO(uint256,string,string)", +"d60a0955": "baseMultiplier()", +"d60a0fbb": "tokenPriceRegistry()", +"d60a2e78": "precalculateWorkflowData(bytes32,address,bytes)", +"d60b347f": "isInitialized(address)", "d60bf518": "Test3(address)", +"d60cec33": "tTokenInit(string,address)", +"d60d2ce6": "testx()", +"d60d6bd4": "getLatestBRRData()", "d60d7044": "_char(bytes1)", +"d60daca0": "yfnp()", "d60dcb5d": "Switch()", "d60df5be": "xmr()", "d60e1447": "supplyBezNolei()", +"d60eb91a": "applyLiquidationDiscount(address,uint256)", +"d60ec6d3": "ArtistID()", +"d60ec6f7": "tokensPerPeriodAreSet()", +"d60ef602": "attackTrainer(uint8,uint8,uint8,uint8,uint32,uint16[6])", "d60f0e5a": "BonusWhiteList(address,address,uint256,uint256)", "d60f2eae": "buyPBTTAgainstEther()", +"d60f6bea": "Set_Slot_Count(uint256)", +"d60f6c64": "balanceFrom(address)", "d60f6cd9": "sendNumber(uint16,address,address)", "d60fa784": "Voicecoin()", +"d60fcb89": "reducibleFreezeTo(address,uint256,uint64)", "d60fd1be": "Hopecoin()", +"d60ff008": "viewInterest(uint256,uint256)", +"d610101b": "suppliedInUnderlying()", "d6103b26": "_newPepe(uint256[2],uint64,uint64,uint64,address)", "d6106696": "withdrawal_last_voter()", "d6106b3e": "buys(uint256)", "d611225b": "addContract(string)", "d61191bd": "distributeValidityBond()", +"d61201d1": "releaseMyShares(address)", "d612be77": "dpToken()", "d612cff5": "permissionHash(address,address,bytes32)", +"d612e731": "didMintShares()", "d613ac91": "buybackTypeOne()", "d613be0a": "forceChangeContractOwnership(address)", +"d613e7b6": "addMar(uint256,uint256)", "d6142c5b": "createProvider(bool,string,string,string,string,uint8,bool,address)", +"d61430e4": "update_product(uint256,string,string,bool,uint8)", +"d6149459": "SkipPayment(uint256,bool)", +"d614aeee": "yourStakedUNICLP(address)", "d615950d": "mintUpdateToken(uint256)", +"d6159fe5": "VOTING_DELAY()", "d61647f2": "developer_string_golos(string)", +"d6164d66": "getInterestFeeRate()", "d616fe6e": "setTxAboveLimits(address,uint256,bytes32)", +"d617094f": "exitgaz(uint256,address)", +"d617a12a": "Pid(uint256)", "d617ad7d": "getPatentFee(address,uint16[5])", +"d617e0d3": "removeOwnership(uint256)", +"d6187a1f": "buyHashRateWithHE1(uint256,address)", "d618996b": "orderEnd()", "d6192c6c": "hodlerStakes(address)", +"d6196673": "secondTokenAddress()", +"d61990ed": "setTokenHandlerExist(uint256,bool)", "d619d216": "retrieveEth()", "d619f6b3": "sendIndividualAmount(address[],uint256[])", "d61a4524": "setdissolveaddress(address)", +"d61a47f1": "rewardToken2()", "d61bd8fb": "getAvlShares(bool)", +"d61c40dc": "withdrewAlready(address)", "d61ca7eb": "RYH()", "d61ccf84": "RABAToken()", +"d61e031e": "giveMoneyForCommission(address,uint256)", "d61e7201": "updateStatus(uint256)", "d61e9274": "SetRate(uint32)", +"d61ea9f3": "approve_594(address,uint256)", +"d61eec0f": "anti()", "d61f92a3": "getJoinAddr(uint256)", +"d61f9c9c": "ChangeTreasury(address,address)", "d61fb0bf": "dateIT()", +"d6203d85": "plyseed(address)", "d620c7c8": "LogNewContractProposal(address,address,address,uint256)", "d620caaa": "walletFromTeam()", +"d621a169": "importVestingSchedule(address[],uint256[])", "d621a4f2": "setWithdrawBankFee(uint256)", +"d621adad": "burnToChai(address,uint256)", "d621b83f": "_createKydy(uint256,uint256,uint256,uint256,address)", "d621c878": "improvementContract()", "d621e813": "tradeEnabled()", "d6223305": "ReleaseableToken(uint256,uint256,address)", "d6224a6b": "getPixelText(uint256)", +"d6226347": "releaseLockAccount(address)", +"d622baa5": "unzapToETH()", +"d6230aa0": "settle(uint64,uint64)", "d6233491": "getPaid(string,address)", "d6236ad0": "MetisCoin()", +"d6238647": "wbRewardCoin()", +"d6239dd0": "merkleRootsWalletRewards(uint256)", +"d623ba33": "_ownerAddrTwo()", "d62457f6": "callValue()", +"d624a42e": "updateNovaTransferRate(uint256)", "d624fdb6": "approveUser(address)", "d625a7a6": "BetAdded(uint256,address,uint256,uint256,uint256)", "d625c654": "migrateLosingTokenRepToWinningToken()", +"d625c680": "exchange(address,address,uint256,bytes)", "d6264b75": "transferBack(uint256,address)", "d626db79": "setPublicWhitelistAbility(bool)", +"d626e043": "generateTransferHash(address,address,address,uint96,address,uint96,uint16)", +"d626e9b8": "setExchangeAmount(uint256,uint256)", +"d626fabd": "getManaForNFT(uint256[])", "d6271727": "processUpgrade(address,uint256)", +"d627d25e": "unwhitelistToken(address)", "d628e0a6": "WatchBalance()", "d628ecd7": "multiValueAirDrop(address[],uint256[])", "d6291f6f": "VitalKey()", @@ -122683,160 +224487,310 @@ "d62a13ac": "ExhaustionCoin()", "d62a7127": "getlastid()", "d62ac58c": "AdvisorsPartners()", +"d62ae399": "MIN_FEE_PERIOD_DURATION()", "d62b255b": "setOwner(address,string)", +"d62b2a4d": "createDWeb(bytes32,string)", "d62b6f7e": "Main()", "d62c6523": "cancelReservedTokens(address,uint256)", +"d62c7696": "maxForPassive()", "d62d3115": "testCreate()", +"d62d5bb8": "BOUNTY_LOCKUP_MONTHS()", +"d62d97a9": "setValidatorParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d62de90d": "setBitcoinMovingAverage(uint256)", "d62f0f22": "getMyRice()", "d62f146b": "updateSkill(uint256,uint256,uint16)", "d6300201": "getPercent(address)", "d630bd53": "pledgeApprove(uint256)", "d630d100": "releaseAdmPercent()", "d630efbc": "getAllTotalPrize()", +"d631147d": "convertUintoToken(address,uint256,uint256)", "d63124d7": "checkMidiNotesValue(uint8[])", +"d631ea91": "lastDivsCashoutById(uint256)", "d631eed7": "withdrawEthForUser(uint256)", "d631f6d4": "DeleteProject(string)", "d63241a6": "EtherCheque()", "d63249ee": "_placeBet(uint256,address,bytes)", +"d632a5d9": "depositIds(address)", "d632f639": "_privateSale()", "d632fd1d": "PIP()", +"d633c16e": "payTokens(address)", +"d633e835": "getCompletionContractDetails(bytes32)", +"d633ea86": "COR(string,address)", +"d6342ddc": "isNFTOwner()", "d6349dd6": "referralDividendsOf(address)", "d634ba22": "baseNumber()", +"d634ca24": "extrasTestNone(address)", "d6351433": "getRichToken(uint256)", "d635357e": "TestContract(int256,string)", "d63547e6": "GetFreeCnt()", +"d6354e15": "hasRegisteredFact()", +"d63561b5": "etherCollateral()", "d63581de": "setPricePoints(uint64[])", "d63587a2": "randomNum(uint256)", "d635b69f": "preValidatePurchase(uint256)", +"d635f2ee": "total_deposit(address)", "d635fc63": "getReveralSupply()", "d6362e97": "getMin()", +"d6368619": "setArbitratorLicense(address)", +"d636b2cf": "backendSetStatus(address,uint8)", "d6370149": "_errorAndRefund(string,uint256,uint8)", +"d63788b1": "changeOneProtoAddress(address)", "d6380f37": "complete(uint256,uint256)", "d6387a3e": "getMinersAt(uint32,uint32)", +"d6388ad1": "manageRole(string,string)", +"d638ae86": "GameStarted(uint256,address,uint256,uint256,uint256)", "d638d981": "SingularityTest24()", "d63900d5": "getTileLocation(uint16,uint16,address,address)", "d6391a01": "Total_TokenSupply()", +"d6398f34": "stakingDay()", "d639bf80": "Bitstocksmarket()", +"d639cd73": "mTransfer(uint64,uint256[],uint64)", +"d639ec42": "getAssetAmount(uint256,uint256)", +"d63a02bd": "take721Rewards(address,uint256,address)", "d63a1389": "mintFeeFlat()", +"d63a450e": "extractPermission(uint32)", +"d63a4d5c": "clamp(uint256,uint256)", "d63a6ccd": "usd()", "d63a8e11": "allowed(address)", +"d63acecd": "singleReplenish(address,uint256)", "d63bed4c": "_setPermissionManager(address,address,bytes32)", +"d63c88a6": "mintMinerReward()", +"d63cb831": "numIncludedDeposits()", +"d63cc1ed": "ProductPriceChanged(uint256,uint256)", +"d63cf308": "burnpercent()", "d63d4af0": "getOwnerTokens(address)", +"d63d5989": "getProjectDeadline(uint32)", "d63e6ce7": "increasePeriod()", "d63e7cc1": "priceICO()", +"d63e80f9": "store0()", "d63ebe92": "StepVesting(address,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d63ed56b": "getProofConfirmationCount(uint256)", "d63eea42": "MAX_NUMBER_BETTERS()", +"d63f4594": "retrieveERC20(address,address,uint256)", "d63fe1c7": "TARGET_TOTAL_SUPPLY()", +"d6410ef5": "final_buy_redeem(uint256,uint256)", +"d64178ff": "LogGameRejected(address,uint256)", "d64196f8": "minInvestedLimit()", "d641f3e4": "playGame(uint256,uint256,uint256,bytes32)", "d64232c0": "option10name()", +"d64240de": "getChallengeInfo(address,uint256,uint256)", "d6424ea7": "calculateAmount(string,uint64)", "d6427c24": "randomPlayer()", +"d6432fab": "hasPool(address,address)", +"d643c1c3": "I_MARGIN_SPEND()", +"d6447368": "isTokenPaused(uint256)", "d6449e15": "cancelTXwithCode(bytes32)", "d644af34": "withdrawAndSend()", "d644c46f": "wuxiaMasterPrice()", "d644e356": "index(uint256,address,uint256,uint256)", +"d645985e": "setS(address)", +"d6459a26": "StakeReleased(bytes32,address,uint256,uint256)", +"d645bebd": "canAnswerChallenge(uint256)", +"d645cac2": "USAddress()", "d645ddf6": "mint(string,string,string)", +"d6461a3a": "DidStartSettling(bytes32)", "d64637c7": "distributeDivident(uint256)", "d6464b7c": "getSellerOfToken(uint256)", +"d646f92e": "csm(uint256)", +"d6472225": "totalBrred()", "d6475c3a": "returnTokensForDay(uint256,uint256)", "d647bb22": "Customcoin()", +"d647d2e0": "FPT_USDC()", "d647e2da": "test_set_get_RiskParameters()", +"d647eb1a": "HORSEFLYPairAddress()", "d6481502": "setFreezingPercentage(uint8)", +"d6487031": "historicalVotingPowerAtIndex(address,uint256)", "d648a647": "fundingStartBlock()", +"d648b150": "getAstroIdxsByPage(uint256,uint256,uint8)", +"d648c27f": "activeRoom(uint256)", "d648d7fd": "post(address,uint256)", +"d648febc": "_getExchangeRateInDenominationToken(address)", +"d64946d9": "approve_160(address,uint256)", "d6495676": "emitPaymentReleased(uint256)", +"d64acab1": "registerUsers(address[],uint256,uint256)", +"d64b079a": "getTimeDiff(uint256,uint256)", "d64b12cf": "MAX_UNICORNS_TO_GIFT()", "d64bcc1a": "releaseIcoTokens()", "d64c2018": "setNextImagePart(uint256,uint16,uint16,uint16,uint256[])", "d64c34fc": "getLockAmount()", +"d64c62f3": "balanceOfMarketOutcome(address,uint256,address)", +"d64cfcda": "maxPodeContributionTokens()", "d64d136d": "wnFromGas(uint256)", +"d64d22ae": "canRetrieveEMB(address,uint256)", +"d64d6820": "settleable(address)", "d64d6968": "isReferrer(address)", "d64dc79f": "bidDkl(uint256,uint256,uint256,bytes,uint256)", +"d64e0cd9": "futureTrans(uint256)", +"d64e1022": "setLiftoffEngine(address)", +"d64e3c2f": "lptPerBlock()", "d64e4e1b": "PKTToken()", "d64ee8d2": "unBlockContract()", +"d64eebb9": "LogId(string,uint256)", "d64f5135": "In(address)", "d64f86c0": "nextTransferFeeProp(uint256)", "d64fe5ea": "getLockedWalletReleased(address)", +"d65014c3": "transferIn(uint256)", +"d65024a5": "getR(uint256)", +"d65061c2": "buyGem(address,uint256,uint256)", "d650cb2e": "forgiveMe()", +"d65104a0": "_getExchangeEntry(address,bytes32,uint256)", +"d6511753": "setLpLock(address)", +"d6519e08": "ContributionWithdrawn(address,uint256)", "d652818d": "ZYMToken()", "d6528231": "FACTOR_3()", +"d652846d": "claimByAddress(address)", +"d6532c06": "_airdropBalance()", +"d653f90d": "DEFAULT_ADMINS_ROLE()", +"d6542d42": "UNIAPR()", "d6545ede": "hbtoken()", +"d654c6bc": "getVoterVote(uint256)", +"d6550f51": "initialUserCredit()", "d6555687": "migrateUserData()", +"d655c691": "lastCheckTime()", "d655c786": "cancelOrderInternal(uint80,bool,bool)", +"d6565a2d": "snapshots(uint256)", +"d6566e34": "tokenSaleSPS(address)", "d656a794": "stopForce()", +"d656e765": "numberStuff()", +"d6576c84": "purgeCachedPynthDebt(bytes32)", "d657ae0c": "actualTotalSupply()", +"d6581975": "usedTokensOf(address)", "d6582d0d": "isWeekDay(uint256)", +"d658c6af": "setMCDValue(address,address,address,address,address)", "d658d2e9": "hashes(bytes32)", "d658d3ed": "setLedgerValue(string,address,address,uint256)", +"d65939dc": "swapDiscount(uint256,uint256,address,bytes,uint256)", +"d6594d09": "Tradeable(bool)", "d65995ed": "attemptBeginLoanAtIndex(uint256)", "d659afb6": "_isCooldownReady(address)", +"d659d11d": "dplayStore()", "d659d968": "is_open()", "d65a16c0": "isOneToken()", "d65a4184": "tokenSaleActive()", +"d65a5021": "nextSupplyInterestRate(uint256)", +"d65a6843": "subAFun()", "d65aabc1": "t_Slava2()", "d65ab5f2": "startGame()", "d65b476c": "Governable()", "d65b48fd": "ReceivedTokens(address,uint256,address,bytes)", +"d65b872a": "_getDistribution(uint256)", +"d65bd422": "clone2()", "d65c0035": "removeAddressFromWhitelist(uint256,address)", +"d65c7f30": "claimCreator(address)", "d65c8c6c": "claimDiamond(uint64,uint64)", +"d65ca97c": "xrp()", "d65d8876": "SitOut(address,uint256,uint256,uint256,uint256)", +"d65e1936": "RakeTokenAddress()", +"d65e880d": "views()", +"d65f37cd": "createCard(uint256,string,string,uint256,bytes32,bytes,uint256,bytes32,bytes)", "d65f86f2": "setLeed(string)", +"d65fb160": "purchaseIds(uint256)", +"d65ff979": "changeLpAmount(uint256,uint256)", "d6604881": "whitelistBonusLockPeriod()", "d660521c": "depositStake(uint256,bytes)", +"d660bbdf": "beijingPerBlock()", "d660c897": "theRichest()", "d660ea36": "lastBlock_v1()", +"d661910e": "changeStakeParameters(uint256,uint256,uint256,uint256,uint256)", "d661952a": "removePrivilegeAddress(address)", +"d661981d": "arrayPop()", "d6619ffb": "funds_address()", +"d661b22b": "EventNewPet(uint64)", "d661d206": "INITIAL_FOUNDER_SUPPLY()", "d661dd31": "MULTIPLIER_DIVISOR()", +"d661e90a": "setUniswapPairs(address,address,address)", "d661f244": "getRoomName()", "d6636307": "stateSetOver()", +"d663d83d": "addActivePool(bytes32,uint32,uint256,uint256,uint256)", +"d664047a": "createEpoch(address,address,uint256,uint256)", "d66495cd": "getSpaceshipProductTotalSoldByModel(uint16)", "d6649861": "tokenTransfertoACC(address,uint256)", +"d664caaf": "requestDefault()", "d664cd89": "askMembership()", +"d665a708": "set_preset_virtual_price(uint256)", +"d665d5a6": "creatorCreateTokens(uint16[])", "d6661999": "securityTokenOffering(address,uint256,uint256)", "d6664653": "landmarkToOwner(uint256)", +"d66691e9": "CreateEstate(address,uint256,string)", +"d66692a7": "stakedTotal()", +"d666c844": "votersList(uint256,uint256)", "d667dcd7": "houseEdge()", +"d6680960": "getLastMintAmount(address)", "d6680a69": "getAllIntel()", "d6682007": "getGameNumSides(uint256)", "d66847df": "distributeARTToken()", "d668a461": "escapeHatch(bool)", +"d668c464": "getEthTldLabel()", +"d668e026": "sellTokenToEth(address,uint256,uint256)", "d668e654": "LogTokenReceiver(address,uint256)", +"d6691315": "mulProxy(uint256,uint256)", "d669133f": "PotSplit(uint256)", +"d6694027": "getTradeInfo()", "d669899c": "sendLudumToSingle(address[],uint256)", "d6699f48": "addPolicy(uint8,uint256,uint8)", +"d669c11c": "updatePairPowers(address[],uint256[])", +"d669ce13": "sfiPerBlock()", "d669e1d4": "MAX_CAP()", +"d66a2553": "getTroveDebt(address)", +"d66aadb9": "balanceOfFreezed(address)", "d66b0b51": "komission()", "d66b2207": "escrowTransferInfo(address,uint256)", "d66bd524": "reserves(address)", +"d66bfc9e": "addMarketType(uint32,uint32,uint32)", "d66c7faa": "ICO_PHASE3_LIMIT()", "d66c9cc2": "transferSenderPaysFee(address,uint256)", "d66cac2b": "invest(uint32,uint32,uint64,uint16)", "d66cb9e1": "renewbeginnerprotection(uint256)", +"d66d1407": "bindRefer(address,string)", +"d66d3a5b": "GamePrizeTaken(uint256,address)", +"d66d6c10": "register(uint256,uint256)", +"d66d75f6": "removedSum()", "d66d9e19": "leave()", +"d66ddc86": "getMultipleNumericData(uint256,bytes32[])", +"d66e1827": "toggleRoundActive(uint256)", "d66e5726": "getWriter()", +"d66e6a78": "setCollateralSupplyMiner(address,address)", "d66f146d": "refundPoll()", "d66f3afa": "addEmployee(address,string,uint256[3],uint256)", "d66fd10d": "LogVote(address)", +"d67014df": "minions(address)", +"d6703a81": "projectPartyRefund()", +"d6708a1d": "approve_86(address,uint256)", +"d6709016": "currentLimit(uint128,uint128,uint64)", +"d670e768": "marketVotingBlocks()", "d6714924": "calculateBoardScore(uint256)", +"d6717f32": "Receive(address,uint256)", "d6721000": "addCommissionToPendingWithdrawals(uint32)", "d6728d51": "developer_EKN()", +"d6734a81": "AddDistribution(address,uint256,bool,bool)", "d673c93b": "split(address,uint256,uint256,uint256)", +"d673f4c3": "_epoch()", "d6740de5": "mint_for_testing()", +"d6747555": "totalStackedBYN()", +"d67480bf": "setTokenLp(address,address,uint256)", +"d674b353": "pausedAddress(address)", +"d674b567": "newKeyRingAndUSDCWithdrawal(address,address,uint256,address,uint256,bytes,bytes)", "d674d6a1": "RimuoviNegoziante(address)", +"d67509e8": "totalPaidFromSystem()", "d6755434": "remainingCapInWei()", +"d67558a4": "CalculateKiTraining(uint256)", "d6757f39": "_existPlatform(bytes32)", "d675ecbd": "addPrivateInvestor(address,uint256)", "d67601ac": "starsRemainingToAssign()", +"d676ee91": "addInAllApiCall(bytes32)", +"d6770f81": "getSenderSideQuote(uint256,address,address)", "d67772d3": "PennyEther()", +"d677947e": "canDistribute()", "d6779b01": "winningsClaimable(address)", "d6779d6f": "isWarrantyValid(string)", "d678724f": "getGameNumberOfEntries(uint256)", "d6787711": "betHash()", +"d6789ec0": "takefCashOnBehalf(address,uint32,uint128,uint32)", "d678ba48": "depositLRC()", +"d6793461": "can(address,address,uint256)", "d679677a": "currentTier()", "d6798645": "set_cooldown(uint256)", +"d6798e32": "tokenMainRatio()", "d679c4f2": "claimDividendPercentage()", "d67a073f": "Drain()", "d67a10e3": "etherDelta()", @@ -122845,20 +224799,27 @@ "d67a1694": "getBountyChance(uint256)", "d67a7e5f": "updateSignedDealsCountInBulk(address[],uint256[])", "d67ae54d": "EUR(uint256)", +"d67b2c75": "swapdexPerBlock()", "d67b534e": "socialIdentityToCardId(uint256,uint256)", "d67b9a89": "ONLY600Coin()", +"d67bdd25": "messageSender()", "d67bf1ad": "coinBurnMkt()", "d67bf379": "getByUser(address)", "d67c1a7a": "finishCrowdSale()", "d67c4497": "_approveTransfer(uint256,address,address)", +"d67c6872": "sellShares(uint256,uint256,uint256)", "d67c7f35": "p_update_mResaleMultipler(uint256)", "d67c9961": "pass(uint256)", "d67cbec9": "release(uint32,uint32,uint32,bytes20)", "d67d0bb9": "tokenCreationMaxCap()", +"d67d264c": "sendRejoinAndMatchingBonusPotofgold2(address,address)", "d67d3af8": "cancelRequest(address,address)", "d67d73e0": "removeAllowedContract(address,address)", "d67d78cd": "addCard(uint32,uint32,uint32,uint32,uint32,uint256)", +"d67ddf7f": "getCardIdListOfPack(uint256)", +"d67f156d": "rfy()", "d67f4d1b": "TittyFarmer()", +"d67f7077": "getEstimatedMarginExposure(address,address,uint256,uint256,uint256,uint256)", "d67fd89e": "setout(bool)", "d6805f49": "novaTransfer(address,uint256)", "d680914d": "SLABToken()", @@ -122867,119 +224828,213 @@ "d681ffa7": "getDefinition(uint256)", "d6820709": "beginTimeTS()", "d6823455": "minQuanValues()", +"d6824f49": "ExchangeFinished()", +"d6829d69": "_getNewSeed(bytes32)", "d682b601": "auditContract(address,bytes32,bytes,bool)", "d6830af3": "setSettingTAOId(address)", "d68314ea": "setReserveWeight(uint32)", "d68352d2": "BeatTokenIcoPhase1Started()", +"d683af00": "_withdrawAllIn(address)", "d683d1a2": "markRedemptionFulfilled(bytes32)", +"d68462d9": "fd1()", "d6847cd8": "getWithdrawalCoolingPeriod()", "d68526c8": "withdrawGemmyMusic(address,uint256)", "d68561a3": "_isOwnerOf(address,address,uint256)", +"d685743a": "updateCachedSynthDebtWithRate(bytes32,uint256)", +"d6857f15": "billUser(uint256)", "d6858850": "AlphabetConvert(address)", +"d685aa7e": "setGoldPerBlock(uint256)", "d6872352": "sendEtherManually(address,address,uint256,uint256)", "d6875520": "reclaimUnwantedGift()", "d687a9b3": "_deleteAddress(bytes32)", +"d687b4d1": "setDevFeeAddress(address)", "d687b57e": "interSend(address,uint256)", +"d687ce5a": "committedTokens(uint256)", +"d687fc49": "getPricePerSpacetimeUnit()", +"d6881367": "postSettlementSurplusDrain()", +"d6896bf6": "Message(address,uint256)", "d689cfe1": "_setClientPaidUpTo(address,uint256)", "d68a9fb8": "getFreeTokensAmountOfUser(address)", +"d68afa39": "setReleaseBlock(uint256,uint256)", +"d68bbea4": "DomainTransfersLocked()", +"d68c22fe": "xBNBScalingFactor()", +"d68c5c41": "postSetTaxRateRequest(uint256)", "d68c967f": "addAddressToBackEnd(address)", +"d68cd51f": "setSystemPlayerNum(uint256)", +"d68cfb7d": "DistributeProfitSenateCouncil()", +"d68d48fd": "starterCount()", +"d68d6ae4": "unfreezeEthAndToken(address,uint256,address,uint256)", "d68d961a": "ROLE_MINT()", "d68e0ff7": "DestroyCoin(address,uint256)", "d68e462c": "withhold(address,uint256)", "d68e9b1e": "createGen0Token(uint8)", "d68f30a7": "recordMoment(address,uint256,uint256)", +"d68f4dd1": "getLock(uint256)", "d68f65f8": "SHAToken(uint256,string,string)", "d68f6aac": "salers(uint256)", "d68f93df": "changeBonuses(uint256[],uint256[])", "d68fac6d": "knuckReward()", "d68fbe5c": "testCannotGetTokensInNotInitiatedSale()", +"d6905c19": "fundsForwarderFactory()", "d6906295": "withdrawCloneTokens(address)", +"d6909930": "remboursement()", +"d690aa26": "detailIndexToOwner(uint256)", "d691092a": "predictExploreReward(uint256)", +"d6910937": "getOtherToken(address,address)", +"d6911ac5": "setApiKey(string)", "d6914217": "getServerUserIndex(address,uint256)", "d6916c34": "airDrop(address,uint256[],address[])", +"d69191f0": "inviteUpper2(address)", +"d692a5c6": "replaceFamer(address,bool,uint256)", +"d6933789": "deleRoleADMIN(address)", +"d693452e": "gatewayRegistry()", "d6938c18": "StagebleCrowdsale()", "d693dca2": "setAllowCnsContract(address,bytes32,address,bytes32,bool)", "d693e17f": "internalSend(uint8,address,uint256)", +"d693f789": "LevelUp(address,address,uint256,uint8)", "d6940c8c": "_RemovedFromGeneration(address,uint256)", "d69450d5": "setUUID4Bytes(bytes)", +"d69475e6": "__Offering_init_unchained(address,address,uint256,address,uint256,uint256)", "d6948c47": "winningTeamId()", +"d694fe7a": "arbitrage(address,address,uint256,address,int128,int128,address,int128,int128)", +"d69539d7": "getDailyAmount()", "d69570e2": "durationOfState(uint256)", "d6960697": "confirmPurchase()", +"d69623ba": "buy2mint(address,address[],address[],uint256[],bytes,bytes)", "d6965ff7": "shops()", +"d6967170": "onEthSell(address,uint256)", "d696888a": "EpietherCrowdsale()", +"d6973fc6": "exit(uint32,uint16,uint128,uint256[])", "d697a9f1": "CooCoinToken(uint256,string,string)", +"d6980ba1": "totalIssuedPynthsExcludeEtherCollateral(bytes32)", +"d6986d45": "sliceTokenHex(address,uint256)", +"d6990e6e": "setnextConvertTime(uint256,bool)", "d69932a3": "getLpBidPrice()", "d699c00e": "transferWeiToWallet(uint256)", "d699fe3d": "setPhase(uint256,uint256,uint256,uint256)", "d69a0d2f": "getMostExpensiveCryptoGamer()", "d69a1a5f": "getNextPayoutEstimation()", +"d69a2986": "getPassiveDetails(uint256)", +"d69a5b2a": "mintDolls(address[],uint256[])", +"d69a84c9": "SetOverfillE18(uint256)", +"d69b197f": "viewAirdrop()", "d69b6cf4": "IdolToken()", +"d69c151c": "ghostPerBlock()", "d69c3d30": "nextNonce()", +"d69c6cd1": "participantToBRAbought(address)", "d69c9275": "extraDistributionPart()", +"d69cb2d6": "clearAnchorAddress()", "d69d895e": "NUM_RESERVED_COIN()", "d69dbf63": "getIssuanceBlockTimestamp(bytes32)", "d69dc9a5": "balance_(address)", "d69dd156": "setInt256(int256,int256)", +"d69de4bd": "m_BlockNumOfLastUpdate()", +"d69de7e7": "addToken(uint256,address,bool)", +"d69e1e2d": "setInstructor(address,uint256,bytes16,bytes16)", "d69e37da": "doCall(address)", +"d69ec025": "setAmguPrice(uint256)", +"d69eca4c": "getTotalTokenBalance()", +"d69efdc5": "replaceImplementation(address)", "d69f13bb": "reportBenign(address,uint256)", +"d69f5a8c": "TokenAdd()", +"d69fb39a": "approve_844(address,uint256)", +"d6a022b8": "getRemaining()", "d6a02bc2": "getSignedSubscribers()", "d6a039f0": "Qbase()", "d6a0810f": "ContractPurchased()", "d6a0dec5": "buyTicketByOther(uint256,bytes32,bytes32,bytes32,bytes32)", +"d6a149f8": "updateExternal1(address)", "d6a15231": "getIcedInfos(address)", "d6a1f6a7": "breakIdUniqueness(uint256,uint256,address)", +"d6a25426": "saldi(address)", +"d6a28987": "RatePlanInventoryChanged(uint256)", "d6a2a596": "CrowdSale(address,uint256,uint256)", "d6a30fb4": "start_quiz_quest(string,string)", +"d6a32446": "setupOwnership()", "d6a39db0": "lockUp(bool)", +"d6a3b2b8": "getHatchConfigFeatureIdSize(uint8)", "d6a3b623": "HONORABLE_LOSS_BONUS()", "d6a3bc16": "finalReserveWallet()", "d6a3f374": "dividendRate()", +"d6a422cf": "addStream(address)", "d6a43a3e": "setPermissionById(uint8,bytes32,bool)", "d6a45623": "setAuctionsEnabled(bool)", +"d6a4b8b6": "getTransferBurns()", +"d6a4c06e": "maxDataPoints()", +"d6a50996": "approve_460(address,uint256)", "d6a527eb": "share1()", "d6a55e10": "sub_arbits(address,address,uint256)", +"d6a57d73": "getDivdLoad(address)", "d6a595ac": "payto2()", "d6a5e546": "emergencyRefundContract()", +"d6a613d2": "addTokens(address[],address[],uint256[],uint256[],uint256[])", "d6a619e3": "transferIfPuritanical(address)", "d6a62445": "confirmReturnToken(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"d6a63c9f": "DEVELOPER_RATE()", "d6a6a520": "undoUpgrade()", "d6a6da3e": "angelInvestorsTokens()", "d6a75d82": "winningsClaimable()", +"d6a75eb0": "withdraw50k()", "d6a78004": "burnRemaining()", "d6a83613": "bytes20ToString(bytes20,bytes20)", +"d6a898c7": "FCOMPOUND_ACTIONS()", "d6a90bcf": "tokenMultisigWallet()", +"d6a98724": "SetInfo(address,uint256,uint256,uint256)", "d6a9c807": "_createDog(uint256,uint256,uint256,uint256,address,uint8,uint256,bool)", +"d6a9cf08": "redeemCoupons(uint256,uint256)", "d6a9de51": "getSeller(uint256)", +"d6a9e253": "burnAndReward(uint256)", "d6a9e9d1": "teamPercentage()", "d6aab015": "getBonusPool()", +"d6ab0cd3": "isPropertyRegistered(bytes32)", +"d6ab66fe": "approve_760(address,uint256)", +"d6ab848d": "WOLF_1()", "d6abe110": "tokenDetails()", "d6ac2394": "payoutInvestor(uint256)", +"d6ac5f6c": "changeInfo(uint256,string,string)", "d6ad00a9": "DOJC()", "d6ad5e5e": "MIN_ACCEPTED_VALUE()", +"d6ae3284": "totalPendingDeposit(uint256)", "d6ae5f29": "getUsedReserveSupply()", +"d6aea001": "tSymbol()", +"d6aeb28c": "withdrawForeignTokens(address,address)", "d6aefb61": "setBatchTransfer(address,address,bool)", "d6af9411": "Rouleth()", "d6afc9b1": "getProfile()", "d6b0f363": "OpusToken(address)", "d6b0f484": "disableWhitelist()", +"d6b13890": "createCustomer(address)", +"d6b1aa5d": "getEpochs()", "d6b1deac": "KTOCrowdsale()", "d6b1e4a9": "buyMinersWithEther(uint64)", +"d6b21f50": "playSpecificTriples(uint8,uint256)", "d6b224f2": "getNextActiveBuyDetails(bytes32,uint64)", +"d6b26813": "legacyNFTAddress()", +"d6b27c67": "setOracleContractAddress(address)", "d6b2b242": "Realize(uint256)", "d6b2e2ba": "PARSEC_CREDITS_PER_ETHER()", "d6b33f59": "getNextActiveSellDetails(bytes32,uint64)", +"d6b3798a": "getTargetFunding()", +"d6b37ce9": "ethichubFee()", "d6b44859": "scheduleUndoIt(uint256)", +"d6b452db": "setupReserve(address)", +"d6b4a221": "cardsStaked(address,uint256,uint256)", "d6b4ec12": "getDailyWithdrawalLimit()", "d6b52d9a": "partnerETHRewardsPercent()", "d6b53175": "UpdatePoolState(uint8)", "d6b5983d": "checkAmount(address,uint256)", "d6b5abc9": "weiToPonzi(uint256,uint256)", +"d6b5b852": "contractStakerAtIndex(address,uint256)", "d6b645bc": "react(address)", +"d6b69802": "withValue()", "d6b6f9f1": "secondXRChangeBlock()", +"d6b725ac": "getMaxStableRateBorrowSizePercent()", "d6b74865": "watcher()", +"d6b78768": "minProposalDebatePeriod()", "d6b7c81d": "BountyIssued(address,uint256)", "d6b867e6": "exchange(uint256,address,uint256)", "d6b8746d": "getConversionManager()", +"d6b89a03": "getLPTokenPerEthUnit(uint256)", "d6b8ae26": "jexp(uint256,uint256,uint256)", "d6b8ec66": "presaleEth()", "d6b92187": "_syncLockedDepositsAmount(bytes32)", @@ -122992,55 +225047,99 @@ "d6bb9eff": "getMartialCardTypeIdList(uint256)", "d6bc1b39": "setPrices(bool,uint256)", "d6bc1e57": "fromWei(address,address,uint256)", +"d6bd3203": "SAFE_ENGINE_ADDRESS()", +"d6bd32aa": "toInt64(int256)", "d6bd603c": "getBalance(address,address,address)", "d6bd64fc": "test_get_expired()", +"d6bd8125": "auditID()", "d6bd8727": "getUrl()", +"d6be0bc1": "NewCdp(address,address,uint256)", "d6be178d": "rateStage2()", +"d6be5ec3": "_fundingFeeLpShareRatio()", +"d6be695a": "DEFAULT_GAS_LIMIT()", "d6be6bd5": "birth(bytes32)", "d6bea5fd": "rangeToProposalID(uint256)", "d6bec803": "setExpiredAndWithdraw(address)", "d6beebf7": "buyTokens_ETH(address,uint256,uint256,bytes8)", "d6bf28e4": "_sendMonsterPrize(uint256,address)", "d6bf7530": "getEthDepositAddress()", +"d6bfc22f": "toggleTransferable()", "d6bfc2d4": "oykooshi()", +"d6c0297f": "BonusRound4()", "d6c0ceab": "changeBountyDeadline(uint256,uint256)", "d6c12f88": "pricingPlan()", "d6c1869b": "s33(bytes1)", "d6c19fe0": "build(bytes,uint256,uint256,address)", "d6c1be92": "gameEarnings()", +"d6c225f9": "pase2()", +"d6c23ad3": "phx()", "d6c242d6": "approveViewer(uint256,address)", "d6c2479a": "donationsAddress()", +"d6c2698c": "distributeAfter()", +"d6c3179d": "_tokenLp()", +"d6c31871": "configAddress()", +"d6c341c0": "createDeal(uint16,uint16,bytes32,string,address,string,bytes32,bytes32,string,uint16)", "d6c3453c": "addTrancheRateAndTokens(uint256,uint256,uint256)", +"d6c38271": "estimateAdjustPosition()", +"d6c43475": "ParentChanged(uint256,uint256,uint256)", +"d6c4979c": "doMath(uint256,uint256)", +"d6c4b5b2": "getConvertibleTokenSmartToken(address,uint256)", "d6c54bf7": "destroyTokens(address,address,uint256)", "d6c5a41e": "tier3End()", "d6c5d823": "getScientificData(uint256)", +"d6c66c1a": "updateCurrentAnimalLogic(address)", "d6c6f48e": "mintAgents()", "d6c75abf": "RiskPrices(address[],uint128[])", "d6c7b4ad": "receiver1()", "d6c7b65b": "addInfo(address,address,uint256,string)", +"d6c85529": "M(uint256)", +"d6c86b1b": "softCapInWei()", "d6c8976b": "changeTokenController(address)", "d6c8f93c": "getCooldownIndex(uint256)", +"d6c92cc3": "getLpRewards()", +"d6c99eae": "TWAP6Hour(address)", +"d6c9a084": "exitDai(address,uint256)", "d6c9d27a": "addCountry(uint256,uint256)", +"d6ca59d5": "terminateICO()", "d6ca8ccb": "disown(bytes20)", "d6cb56e6": "FishCoin()", "d6cb9ec2": "viewContractState()", +"d6cc0b30": "setFarmPerformanceFeeGovernance(uint256)", +"d6cc0c14": "takeLoanOrderOnChainAsLender(bytes32)", "d6ccb332": "FED(uint256,string,uint8,string)", +"d6ccc19f": "cancel(address,bytes32,bool)", +"d6cce7a1": "betsP1(uint256)", "d6ccf7a7": "addTokenTime(uint256,uint256)", "d6cd4a02": "listAgents()", "d6cd9473": "renounceWhitelisted()", +"d6ce4a5f": "_limitAntibot()", +"d6cec05e": "redeemOut(address,uint256)", +"d6cf0c37": "observationIndex()", "d6cf18e7": "createPiranhaTokens()", "d6cf5297": "oracleItSetNetwork()", +"d6cfeae0": "getAllSwaps()", "d6cfece1": "preBonus()", +"d6d00375": "lastTopSponsorsWinningAmount(uint256)", "d6d02c51": "whois(string)", +"d6d0931d": "levelFee(uint8)", "d6d0be9f": "getProductData(uint256)", "d6d13ac0": "Split(bytes32,uint8)", "d6d14171": "initialTimestamp()", +"d6d19b27": "convert(address,uint256,address,address)", +"d6d1aee4": "_finalizedTime()", "d6d1b8bb": "TCLRToken()", "d6d1f369": "Test4(uint256)", "d6d1fc2a": "SoSoCoin()", "d6d21dfd": "who()", +"d6d21f73": "forGenesisStakingPool()", "d6d22fa4": "MetaCoin()", +"d6d24465": "boolVotedFor(uint256,address)", "d6d25008": "coldStoreLast()", +"d6d273af": "addSsTokenToSwap(address,address,bool,int128,int128)", +"d6d27ab5": "rj()", +"d6d2aedb": "getBestPrice(address,address,uint256)", +"d6d2b6ba": "delegate(address,bytes)", +"d6d2dcf9": "tend(address)", "d6d30a51": "increaseJackpot(uint256)", "d6d3286c": "geProposalInfo(uint256)", "d6d329b9": "ships(uint64)", @@ -123049,164 +225148,312 @@ "d6d4136a": "checkPos()", "d6d5c8d5": "DEFROST_MONTHS()", "d6d65f3d": "getCurrentMilestoneIndex()", +"d6d66ddf": "viewAccruedPlusCapital(address)", +"d6d68177": "deposits(address,uint256)", "d6d6945e": "doPurchase(address,uint256,uint256)", "d6d707a6": "BaseStoreToken()", +"d6d7479d": "approvedCurrencyTokens(address)", +"d6d75f51": "moneyMarket()", "d6d76ed5": "status(address,bytes32)", "d6d76fb7": "ArtCertificate(address,bytes32,string,string,string,string,string,address)", +"d6d77ea1": "isATMPaused(address)", +"d6d788c3": "setSwapFee(uint32)", "d6d7d525": "get(bytes)", +"d6d7f1cf": "impliedVolatilityDaily(address,uint256,address)", +"d6d7f210": "calculateProfit(address,address)", "d6d80f0b": "withdrawal_party_a_gets()", +"d6d838ad": "cnt()", "d6d86646": "UpdatePolicyState(address,string,string,uint8)", "d6d902c4": "claimThroneFor(bytes,address)", +"d6d92558": "changeTaxRatio(uint8)", "d6d9266a": "setNewUseIndex()", "d6d98ffc": "CosmicExperiencePoints()", "d6da0805": "registerName(bytes32)", "d6dad4cb": "BCFLeague(address,uint256,uint256,uint256,uint256)", +"d6db152d": "incvStartReleasingTime()", "d6db71e9": "allowRefund(address)", "d6db85af": "fracExp(uint256,uint256,uint256,uint256)", "d6db8ab6": "dividendPayouts(uint256)", "d6dbf1c2": "getPOOL_edit_9()", +"d6dc0b0d": "initializerAddress()", +"d6dc4a31": "setPenalty(uint16,uint256)", +"d6dc9833": "OrderPaidInToken(uint256,address,address,uint256,uint256)", "d6dd1f0f": "ConnectLeaf(uint256,uint256)", +"d6dd8207": "setEntryDays(uint256)", "d6dda33d": "isPremine()", "d6ddbd2d": "purchaseAdv(uint256,uint256,string,string)", "d6ddd21b": "vestingStartTimestamp()", +"d6de053a": "ggg8(int8)", +"d6de07d0": "updateValidatorDelegation(bool)", +"d6de13a8": "releaseTimeLines(uint256)", "d6de8dc4": "getPlayBlockNumber()", +"d6debc05": "executeAppointment(uint256)", +"d6df68c1": "globalWhitelistState()", +"d6dfa50f": "editPrice(uint256,uint256,uint256)", "d6dfb77a": "getIndexToken(uint256,uint256)", +"d6e08d3f": "UniV1()", "d6e0bf29": "OwnerDeposit()", "d6e0d73c": "mintA()", +"d6e13fdb": "refusalTx(uint256)", +"d6e158bf": "externalSafeDiv(uint256,uint256)", +"d6e19b5e": "registerProject(string,uint256,uint256,uint256,uint256,string,string)", +"d6e1f6f3": "tickectPrice()", "d6e20a56": "confirmKYC(address)", +"d6e2280c": "getAssetId()", +"d6e23c20": "getMakerClearAnchor(address)", "d6e2bcb5": "SwordMaster()", "d6e325ae": "joinClub()", "d6e38114": "addBet(address)", "d6e3bb94": "addAudit(address,address)", "d6e3dd77": "balancesImporter3()", +"d6e44dc9": "someOtherDummy()", +"d6e45735": "TeamSold(uint256,uint256,uint256,address,address,string)", +"d6e4636d": "getAuraEquipAtIndex(address,uint256)", "d6e4ddc5": "ownerOf(address[16],uint256)", +"d6e4fa86": "nameExpires(uint256)", +"d6e50535": "basePrice17()", +"d6e55539": "startThreshold()", +"d6e560d6": "setHatchery(address)", +"d6e5e4c4": "refundUserToken(address)", +"d6e5e7a2": "setYTX(address)", "d6e5fe98": "setStakeRequirements(uint128,uint128)", +"d6e6184a": "startChangeFeeRates(uint256,uint256)", "d6e67215": "newCajutel()", +"d6e6b5e4": "setLiquidateEthPrice(uint256)", +"d6e70193": "AllFrozenFunds(uint256,uint256)", "d6e78eb0": "setGasMin(uint256)", +"d6e7a55e": "getFeeRates()", +"d6e848ac": "changeSearcher(address)", +"d6e8555b": "setDailyDistribution(address,address,uint256)", "d6e871ff": "loser(address,uint256)", +"d6e882dc": "rpower(uint256,uint256,uint256)", "d6e898ad": "vest2team(address,address)", "d6e89cf0": "setTransferStatus(uint256)", "d6e8a0b0": "incrementBid(uint256)", +"d6e91e91": "getNumDeposits(address)", "d6e95f77": "isSellable()", "d6e9b019": "getDisputeData()", +"d6e9e803": "grossNetworkProduct()", +"d6ea0a51": "setURI_Prefix(string)", +"d6ea4c10": "withdrawOutput(address)", "d6ea53b1": "changePayer(address)", "d6ea5a0e": "distributionEntryCount()", "d6ea8c90": "decimalOddsForOutcome(uint8)", "d6eab9f2": "setHostFee(uint256)", +"d6eabaea": "setDynamicArrayNonPayable(uint256)", "d6eac4cd": "initTokenGrants()", +"d6eac95d": "withdrawDai(uint256,uint256,uint256)", "d6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", "d6eb1bbf": "authorised(address)", +"d6eb5910": "getTotalCollateral()", "d6eb748c": "setRelation(address,address)", "d6ec0065": "CHN()", "d6ecb38a": "firstAddressFromDeployer(address)", "d6ecff50": "Identified()", "d6ed8f52": "addAirdropList(address,uint256)", "d6edb047": "addAllocationPartOne(uint256,uint256)", +"d6edbc0f": "withdrawEnd()", +"d6edf7fc": "swapAtUniSwap(address,uint256,address)", +"d6eed08b": "setClaimLPFee(uint256)", +"d6eef86d": "_safeGetPartialAmountFloor(uint256,uint256,uint256)", +"d6ef21c6": "getUserAccessed(address)", "d6ef25d5": "addVersion(uint64[3],address,bytes)", "d6ef3de2": "Stocks()", +"d6ef56f3": "_excluded(address)", +"d6ef70e0": "getMsPriceToUsdt(address)", "d6ef7af0": "withdrawRewards(address,uint256)", +"d6ef8f65": "startNextDay()", "d6efb030": "sendEthToContract(address)", "d6efc8eb": "marketBuyOrders(uint256,bytes[])", "d6effa2b": "ICOwei()", +"d6f0948c": "propose(address,string)", "d6f0b484": "serverEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,address,bytes)", +"d6f10a21": "numTokenOfGen0(address,uint256)", +"d6f124f0": "updateOracle()", "d6f12a6a": "refundT4T()", "d6f15469": "setBuyEnabled(bool)", +"d6f19262": "earned()", +"d6f22029": "tokenId2Item(uint256)", "d6f22e69": "getChecksumPairCount()", +"d6f2dc44": "changeToyPrice(uint256)", +"d6f31081": "updateBotRare(uint256,bool)", "d6f327cc": "swapCardForReward(address,uint8)", +"d6f32e06": "hasWaitingPeriodOrSettlementOwing(address,bytes32)", "d6f35eb4": "setMinAmountSale(uint256)", "d6f3c45f": "tokenCrowdsaleCap()", "d6f42038": "PhoneToAddress()", "d6f4472d": "BTCS_PORTION_MAX()", +"d6f4496a": "setM(address)", "d6f4c235": "setInstructor(string,uint256,string)", "d6f4e56e": "allTokensSold()", "d6f50ed6": "registrarApp(bytes32,address,bytes32[])", +"d6f551e4": "buyItem(uint64)", "d6f5792d": "isCurrentAccountReader(address)", "d6f5988e": "getInfoMarkTokens(address)", "d6f5c939": "tie()", "d6f6b6e7": "closeFailedVotingAndWithdraw()", +"d6f6d8ef": "safeCode(address,string)", "d6f7ddf9": "topUp(address,uint256)", "d6f8307f": "requesters(address)", "d6f8560d": "withdraw_eth()", "d6f8ecae": "time2()", +"d6f9885e": "getImagesCreatedByAddress(address)", +"d6f9d5eb": "transferDIDOwnership(bytes32,address)", "d6fa3efa": "requiredTimeBetweenDraws()", +"d6fad488": "getBenefit(uint256,uint256)", "d6fb1678": "mineableSupply()", "d6fb69b9": "_sendWinnerJackpot(address)", +"d6fb7c6b": "dispermitRestoreAccount(address,address)", "d6fbf202": "startingPrice()", +"d6fbfd1c": "volts()", +"d6fc0263": "canExecuteOrder(address,address,address,address,bytes,bytes)", "d6fc2e62": "rateProjectSecondParty(bytes32,uint8)", +"d6fc4829": "listCandidate(address)", "d6fd1fe9": "saleAction()", +"d6fd7302": "cefi()", "d6fd8822": "threeTimes(address,uint256)", +"d6fdc9b6": "setlatestFund(uint256)", "d6fe3d6d": "afterForkRescueContractBalance()", +"d6fe81ae": "swapType(bytes32,uint8)", +"d6fe94a0": "moveTokens(address,address,address,uint256)", +"d6fe9aab": "eachExercisePrice(uint256,uint256)", "d6fea306": "weiICOMaximum()", "d6febde8": "buy(uint256,uint256)", +"d6fee33d": "rollUpD50FL(address,uint256,uint256)", "d6feecde": "ret_len()", +"d6ff02e2": "totalClaimableSupply()", +"d7000422": "isTokenMinted(address,bytes32)", "d700071a": "minorPartnerAddress()", "d7003222": "unitCost()", +"d70080ce": "boolvalue()", +"d7009350": "setIntraWeekPrice(uint256,uint256,bool)", "d700ed39": "isStarterClaimed(address)", "d70108a6": "getCmd_control()", "d702087f": "setSecretSigner(address)", "d7020b0c": "setarg_3(uint256)", "d7020d2a": "approveEscrow(bytes16,address,address,uint256)", "d702b63d": "for_longterm()", +"d702c0d8": "getFlashloan(address,uint256,address,bytes,uint256,uint256[])", "d702db81": "UserRetireHodl(uint256)", +"d702dda5": "claimErc20Token(uint256,uint256,address)", "d702e364": "setPreICOSoldAmount(uint256,uint256)", +"d702ffd0": "uni_factory()", +"d703650b": "bfin(uint256)", +"d70457b5": "takerOpen(address,address,uint128,uint128,uint256,uint16,int8,uint256)", +"d7046962": "pollChoices(uint256,uint256)", +"d704ba9b": "setWithdrawalMaxDeviationThreshold(uint256)", "d7052e17": "GotTokens(address,uint256,uint256)", "d705763d": "Tset(uint256,string,uint8,string)", +"d7057797": "upgradeHouse(uint256,uint256)", +"d705c5c7": "hasEnd()", +"d705cf85": "burn_Inactive_Contract(address)", "d705d6d7": "MainSale(address,uint256,uint256,uint256)", +"d70645d6": "TransferTo(address,address,uint256)", "d70657ac": "getBalanceHolder()", +"d7066144": "returnStakedForTenDays(address)", "d7067dc5": "crowdSalePaused()", "d70695bb": "swarmRedistribution(address,uint256)", +"d706be31": "changeMetaEvidence(string,string)", "d706df8c": "BioStem()", +"d707004e": "getNewArray()", "d7074aaf": "GetCard(uint32)", "d70754ec": "node()", +"d7076797": "getLOrder()", +"d70793ea": "lockeds(uint256)", "d7079ee7": "startPublicsale(uint256,uint256)", "d707d466": "allocToMember(address,uint256)", +"d708120e": "createNewStrategy(uint256,uint256,uint256)", +"d70815af": "koiFundDeposit()", "d7081e03": "transferAmount(address,uint256)", "d7085e05": "SafeSend(address)", +"d708e2c1": "cycleTime()", "d70907b0": "freezeWithTimestamp(address,uint256)", +"d7090a34": "submitRUMBStartEarlySwapTx(address)", +"d7091fa3": "getRelections(address)", "d70925b4": "teamEthTransferComplete()", +"d7093817": "onlyNetwork()", "d70948b5": "_create_drug(bytes32,address,uint256,uint256)", "d7098154": "claimPrize(uint256)", +"d709b4b0": "setInitialCollateralRatio(address,uint256)", +"d709d23e": "referralRateDepositor()", +"d70a6f31": "setMaximumDepositAmount(uint256)", "d70afa96": "FEE_ADMIN()", +"d70b01c1": "addMinter(uint256,address)", "d70b6342": "minInvEth()", +"d70b9a49": "fundedDays()", +"d70c2c0e": "LOG_OraclizeCallback(uint256,bytes32,string,bytes)", +"d70c6f4e": "results(uint256,uint256)", "d70cf105": "moveBalance(address,address,uint256)", +"d70d0616": "onSellOrder()", "d70d2e26": "DetherTx()", "d70d37e6": "OptedIn(address,address)", "d70d532b": "provideAccess(address,uint8)", +"d70d642c": "changeYieldPool(address)", "d70d9254": "isBetClosed()", "d70d9604": "Sales()", "d70dbf7d": "Aequitas()", +"d70e0f4a": "UPDATE_ENTRY_ROLE()", "d70e0f90": "disableAuto()", "d70e62eb": "lowLimit()", +"d70eac58": "setdaiweth()", "d70ed38a": "withdraw(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", "d70efa86": "_inRateFallEffectLimit(uint256,uint256)", +"d70f174a": "createApplication(uint256,string)", +"d70f83c2": "estates(uint256)", "d70fe207": "cancelOrdersOnOption(uint256,uint256)", +"d70fe8a4": "ethersRaised()", +"d70feb3f": "lockTakeTokens()", +"d7100375": "pay(address,address,address,uint256,uint256,address[],bytes,uint256[],uint256[],string,uint256)", "d710999d": "SiliconValleyCoin()", +"d7109ce6": "LOG_MAX_UINT256()", "d7109dda": "getCurrentSaleDay()", +"d710b891": "getNumberAtIndex(uint256)", "d710e2f0": "sendAllToOwner(address)", "d710eaac": "NewWallet(address,address,address)", +"d71113ca": "CrowdsaleClosed(address,address)", +"d71115f0": "unstakeQuery(address,uint256)", +"d7115bd7": "tenPercentCap()", "d71186b9": "Fund_Contract()", "d7121f4b": "HolikopterToken()", "d7123dff": "_createBuilding(uint256,uint256,uint256,uint256,uint256,uint256,address,bool)", "d712800f": "setLockValue(address,uint256,string)", +"d712b46c": "LogRefund(uint256,address,uint256)", "d712d06d": "tokenDestroyed(address,uint256,string)", "d712eb4a": "voteWeight()", "d7130651": "getCity(uint256)", +"d7130e14": "adminCanClaimAfter()", +"d71317c6": "rewardsTokenInit()", "d7131e5f": "createToken(uint256,address,string,string)", "d71331c2": "getCountPlayerByTrackId(bytes32)", +"d7136328": "vote_for_gauge_weights(address,uint256)", +"d71486fd": "setItem(uint8,uint8,uint8,string,string)", +"d714df97": "withdrawShadows(uint256)", +"d715135d": "updatePayoutPercentage(uint256)", "d715c8b2": "ownerHistoryCount(uint256)", "d716222c": "is_owner(uint256,address)", "d716e9ca": "getTotalInvoices()", "d71710e0": "countAttributeTypes()", +"d71787e9": "_getNextDODOV2Pool(address,uint256,address,address)", "d717b05e": "exchangeLimit()", "d71801d4": "gallerySix()", "d7182850": "ownerTokensAllocated()", "d7186f2b": "KNTTToken()", +"d718c085": "luckCodeList(uint256,uint256)", "d718e763": "FinalizableCrowdsale(address,address)", +"d7190851": "ChangeSlogan(string)", "d719213e": "preBuyPrice1()", "d719843f": "getVendingStepPrice(uint256)", +"d719a68b": "getParticipantAddressByIndex(uint256)", "d71a0d7c": "HolahopxToken()", +"d71a1ba1": "BONUS_FACTOR()", +"d71a9b01": "setIntValue(bytes32,bytes32,int256)", +"d71b5ced": "_setGenesisPhase(address,bool,uint256)", +"d71bd690": "UpdateWebsiteOrg(address,string)", +"d71be24b": "placeBet(bytes6)", +"d71be8db": "locked(address,bytes32)", "d71c14aa": "_isAOContentUsageType(bytes32)", "d71c4028": "DRPCrowdsale(address,address,uint256)", +"d71c9c12": "locker(address)", "d71cdd78": "BONUS_HI_QTY()", "d71cf1e4": "getFee(uint256,address,address,address,address)", "d71d3b3c": "CrowdSalePreICO()", @@ -123217,48 +225464,87 @@ "d71e58f8": "admin_set_exchange_rate(uint256[])", "d71e8296": "canIWithdraw()", "d71e930c": "teamAddressTwo()", +"d71eb4b5": "setTaxAllocations(uint256,uint256,uint256,uint256)", "d71eb6ab": "recursive_store(uint32,uint256)", "d71f1bd6": "LottesyAddress()", +"d71f1e9b": "authenticateAppend(address)", "d71fcbe6": "BaseBountyContract(address)", +"d71ff9d8": "approve_115(address,uint256)", +"d7200dac": "teamFees()", "d7203294": "ZeroXEth()", "d7206124": "setInvestorLock(bool)", +"d720bf33": "presetURI(uint256)", +"d72115dc": "addAlias(string,string)", "d721b0af": "batchExchange(address[],uint256[])", "d721c760": "IssueAssigneeLoaded(bytes32,string)", +"d721e03c": "StalematePayout(address,uint256)", +"d7224d17": "depositTrophies(address,uint256)", "d7228bb5": "doSucceedingTransferFrom()", +"d722b0bc": "getChainName()", +"d723323b": "ethJoin_join(address,address,uint256)", "d7237e45": "invitedByReferalBonus()", "d723879c": "icoOver2()", "d723b7c6": "rewardAtRound(uint256)", "d723bb73": "fetchVoteInfoForVoterBySnapshotBlock(address,uint256)", +"d723bbe6": "FounderTokenTransfer(address,uint256)", +"d724129d": "mintTokenOwnerOnly(address,uint256,uint256)", +"d7242487": "TokenBounty(address,uint256)", "d72473f3": "Added(uint256,string,address,uint256,bool)", +"d724b37c": "addCheckpoint(address,uint32,uint256)", +"d724da36": "getDittoEthRate()", "d72503ba": "buyCat(uint256)", +"d7259f3b": "mintAgreement(uint256,uint256,uint256,uint256,address,address,address)", +"d725a9ca": "mintable_in_timeframe(uint256,uint256)", "d725a9f0": "crowdSaleaddress()", "d725f10d": "curse(address,address)", +"d7260006": "I()", "d7260cba": "refundGame(uint256)", +"d7262eda": "LevelUp(uint32)", "d726755b": "moveFloor(uint256)", "d726f7c7": "mainCoinSentToEther()", "d7276479": "battlesOwner()", "d727d64b": "disputeSettledTerminate(bytes32,address,uint8,address,uint8,bool,address)", +"d7285e47": "withdrawROBO()", "d7289cb4": "FundsReturned(address,uint256)", "d728b6db": "getCatOfferPrices()", "d728cc72": "novaCoinAddress()", +"d728f5b7": "checkGasPrice()", "d7290181": "emptyWrongToken(address)", +"d7296662": "setPurchasePrice(uint256)", "d7299009": "isCustomerHasACCfromWL(address)", "d7299ef7": "pausePresale(bool)", +"d729dd3d": "addMilestone(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d72a0a53": "redeemAsset(bytes32,bytes32)", +"d72a0e4d": "setMinWithdrawDuration(uint256)", +"d72a75d0": "adminUnset(address)", +"d72aa565": "payDDR(uint256)", "d72ad259": "unlockFunds(address)", "d72ad623": "getReferrerReward()", +"d72adf66": "rebaseOffset()", "d72b11bd": "reserveWallet()", "d72b6d3b": "CREATION_LIMIT()", "d72bdc53": "initialize(address,string,string,uint8,uint256)", +"d72c5577": "attend()", +"d72c69eb": "queryPriceAvgVola(address,address)", +"d72c80fd": "newBlock()", "d72c83c0": "SmokeExchangeCoinCrowdsale(uint256,uint256,address,uint256,uint256,uint256,address)", "d72c9391": "confirmTransactionSig()", +"d72ca82f": "totalTeamAthletes()", "d72d04db": "addGame(address)", +"d72d6819": "lastSingleSalePrices(uint256)", "d72d8dd6": "numRegistries()", "d72dec33": "changeVaccinHistory(address)", "d72e2b78": "soldTokensWithoutBonus()", "d72e3de1": "createCustomReservation(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "d72e4167": "getCompte_38()", "d72eabb8": "minimalToken()", +"d72eac14": "distributeRewardsFromRoboToken(address)", +"d72eec75": "unlockQuantity(address)", +"d72ef771": "work(uint256,address,uint256,uint256,uint256,bytes)", +"d72f0e43": "lastSurplusAuctionTime()", +"d72f3149": "withdrawnBNB()", "d72f7958": "fortune_break_current()", +"d72f7e1e": "SetMinorEditsAddr(address)", "d73019e9": "icoStartDate()", "d7303eaf": "nicole()", "d7304b09": "cleanupOdd()", @@ -123266,11 +225552,20 @@ "d7311963": "m_controller()", "d7315d60": "totaldeposited()", "d731a779": "removeTRA(address)", +"d7322862": "requestPriceData()", "d732a3fa": "newRound(uint256,bytes32)", +"d732b835": "stakesCounters(address)", +"d732be6c": "jackpotWIN()", +"d732cfa2": "minimumFailRebalancePeriod()", "d732d30e": "getGamblingPartyInfo(uint256)", "d732d955": "decrease()", +"d7340cef": "blocksTillTargetShoot(address)", +"d73463d8": "Stage2(address,uint256)", "d73478f8": "userToNumTowns(bytes32)", +"d734a320": "_tierThreeBonus()", +"d734fa19": "conversionPath(address,address)", "d735140d": "fourthTokenExchangeRate()", +"d73531b9": "stakeCreator()", "d7353371": "PeerLicensing()", "d7354b49": "getBirthDay()", "d735875d": "Start_quiz_g(string,string)", @@ -123283,272 +225578,509 @@ "d737c2b0": "setContractInfo(bytes32,address,bytes20)", "d737d0c7": "msgSender()", "d7385abd": "placeBet(int8,int8,uint32,uint256)", +"d7389881": "removePayoutAndThreshold(address[],bool)", "d7397a72": "setUrl(address,uint256,string)", "d739aaf8": "getGameInfoById(uint256)", +"d739ad84": "isSignatureValidBuy(address,uint256,uint256,uint256,uint256,bytes)", "d73a24fc": "canBeWithdrawn()", "d73a2901": "setManagedVote(uint256,uint152,bool)", "d73b0cf2": "buyerFundRelease(uint256)", "d73b1dc9": "decreaseAllowance(address,address,uint256)", "d73b3a67": "withdrawal_Eth(uint256)", +"d73b97c6": "AG_RATE()", "d73c277c": "storageName()", +"d73c86e3": "submitTransaction(bytes,uint256)", +"d73c9de4": "getGroupMember(uint256)", "d73cbc6b": "testLen()", "d73cbcba": "daCall()", "d73cedd4": "SPECTRUMZ()", +"d73cf080": "_updateWhitelist(address,address)", +"d73d054d": "PricePerDyn()", +"d73d38c1": "setATMToMarket(address,address,address)", "d73dd623": "increaseApproval(address,uint256)", "d73e0c89": "getBookCount()", +"d73e30d6": "InvestmentInBTC(address,uint256,uint256,uint256,uint256,string)", "d73ec78d": "_checkCancelAvailability(uint256,uint256,uint256)", "d73f0b25": "lookupCampaignPart1(uint256)", "d73f3408": "SimpleMultiSig(uint256,address[])", +"d73f6968": "IMPROVEMENT_WEIGHT()", "d73fe0aa": "getShares()", "d73ff0db": "preSaleBfPlatform()", +"d7404664": "issueCertificate(bytes32,bytes32,uint256,uint256,string)", "d740547e": "mintBonusTokensForGames(uint256)", +"d7405481": "relayTokensAndCall(address,address,uint256,bytes)", +"d7406965": "setRewardTokenPerBlock(uint256)", "d740766e": "testNoTokenTransferIfNotApproved()", +"d740b9a3": "syncPriceForTokenList(address[])", +"d741b9c3": "userWhitelist(address)", "d741e2f9": "pip()", +"d742069e": "wildSwapToken()", +"d7426327": "getUserPaidIn(address)", +"d742a14d": "setLp_token(address)", "d743015a": "createAssetPack(bytes32,uint256[],bytes32[],uint256,string)", +"d74319e0": "dayLimitProgressProc()", +"d7439f97": "registerFeed(address,string,bool)", "d743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", +"d743f748": "setNextUpgradeMaster(address)", "d7441753": "getTypicalItemById(string,uint256)", +"d7443eba": "ABS()", +"d74471ed": "clearET0H()", "d7447c8c": "addCandidate(address,address,bytes32)", "d744aec8": "getTokenBalanceInContract(address)", "d744f2a3": "wantMyToken(uint256)", "d744f330": "IdClaveChain(address)", "d744f47c": "validateMessage(string,bytes32,uint8,bytes32,bytes32)", "d744fcb8": "ClaimFeesFromSharesBought(uint256)", +"d7450aa2": "advertiserBalances(address)", +"d7453543": "removeSwapPools(address)", "d74543f0": "communityusersCap()", +"d7455eb6": "infoFor(address)", +"d7455ec0": "mintExtensionAsset(address,uint256)", +"d745b2a1": "reward_bank_update(uint256)", +"d745b4ef": "insertPatient(uint256,string,string,string)", "d7463573": "getOpeningTime()", "d746a38b": "getMicroModuleByIdPart1(uint256)", "d7471ad2": "nemocoin()", "d7480aa4": "AuctusEtherVesting(address,uint256,uint256,uint256)", +"d7488b79": "setAmt(address,uint256)", +"d748c2e4": "tankSizes(uint256)", "d748d1f6": "revokeEditorRights(address)", +"d748eca2": "pendingAplfi(uint256,address)", "d749eaab": "newPrimera(address,address)", +"d74a4d76": "CommentAdded(string,address,address,uint256)", "d74a960e": "BGFTToken(uint256,string,string)", "d74a99d4": "create(uint256,string,uint8,string)", +"d74ad321": "forceWithdrawalAndInterrupt()", "d74ae98e": "redeemShip(uint256)", +"d74af263": "raiseFlag(address)", "d74afaa1": "newowner()", +"d74b1f07": "multisendBepq(address[])", "d74b2722": "setRefunder(address)", "d74be848": "maskSender(address)", +"d74c5d92": "battleInfos(uint256)", +"d74c6a32": "isLastDKGSuccessful(bytes32)", "d74c894e": "setSecurityWallet(address)", +"d74ce8c5": "periodsCounter()", +"d74d4dee": "claimSwapFee(address,uint256)", "d74d763e": "setUCCoinPerEther(uint256)", "d74d7e79": "calculateRewardAt(uint256)", +"d74d8808": "Name_New()", "d74e0d9e": "SetBanker(uint8,address)", "d74ea11e": "addMockPendingWinner(address,uint256)", "d74f8e9a": "getLastPayments(uint256)", "d74f8edd": "MAX_OWNER_COUNT()", +"d74f9512": "setLaunchWhiteList(uint256,address[],uint256[])", +"d75039bd": "unpoolSmoke()", "d7504385": "validateToAddress(address)", +"d7504c23": "getDateCreation()", +"d750663a": "isDepositPossible(address,uint256)", "d7508a55": "prepareAuctionForNonOGChain()", +"d750da0b": "bidAtPrice(address)", "d7517caa": "getPresaleStatus()", +"d751b6cf": "totalPledgeBOR()", "d751b8de": "Request(uint16[],string,address,uint32[],uint256)", "d7520298": "SetfirstTTaxAmount(uint256)", "d7522582": "isCurrentTierCapReached()", +"d752aec9": "minSecTurboDuration()", +"d752cd87": "updateAgreement()", "d752dd8e": "AFSBToken()", +"d752de4e": "main2(address[],bool,uint256)", +"d752f85e": "validateChangeHolder(uint256[2],string,uint256[2])", +"d752fab2": "removeLiquidity(address,address,uint256)", "d75318f8": "SecretCoin()", +"d7531d91": "f4(uint256)", "d75320b1": "_subtractFromMintPool(uint256)", "d7533595": "keccak_f(uint256[25])", "d7533751": "UnvestedSkyeCrypto(uint256,string,string)", +"d7533910": "phaseversion()", "d75352e1": "marginCall()", +"d7540227": "userRating()", +"d7542f85": "safeTransferAllFrom(address,address,bytes)", "d75446fe": "etherGet()", "d7546da7": "Commitment(address,address,address)", +"d75471cf": "bryToLp0Route(uint256)", "d754a6bc": "adminResetEmail(address,address,string)", +"d754d326": "publishTallyHash(string)", +"d754df5d": "buyTicket_Airdrop()", "d754f0ac": "LOCKOUT_PERIOD()", "d754f3d5": "currentEraIndex()", +"d755017d": "getUnderlyingTokenBalance()", "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)", +"d7561eae": "FeaturesUpdated(address,uint256,uint256)", +"d7567d21": "cancelOrder(address,address,uint256,uint256,address,bytes32)", +"d75689e0": "pendingSRMboost(uint256,address)", +"d7568b6e": "priceDrop()", +"d756985b": "auctionStartPrice()", +"d756b901": "numberRedeemed(uint256)", +"d75734c8": "getMktSellAmount(uint256,uint256,uint256)", +"d75735da": "payRefEventLog(address,address,uint256,uint256,uint256,bool)", "d7575592": "addr_teamPartToken()", "d757579e": "XxxTokenSale()", "d7578295": "Cashpayz()", +"d7581298": "externa1(uint256)", +"d758c5d7": "userBurnRemarks(uint256,bytes32)", +"d758d944": "icoTokenHolders(address)", +"d759001a": "waffleTickets(uint256)", +"d7590f70": "flowerIndexToOwner(uint256)", +"d7595ed3": "getUniswapV2AmountOut(bool,address,uint256)", +"d7599b6d": "ambassadors()", +"d759dbeb": "lowUtilBaseRate()", +"d75aca19": "farmingPool()", "d75b2b18": "takeCollateral(address)", "d75b363f": "userRewardCount(address,address)", +"d75b3e5b": "SetTokenValue(uint256)", "d75b5d9d": "RAFEND()", "d75b80cc": "a_incognita(uint256)", +"d75b814f": "set_issue_period_param(uint64,uint256,uint256)", +"d75c0cea": "withdrawTicket(uint256)", +"d75c50d5": "collectdeveloperfee()", +"d75c82fe": "setData(address,address,address)", +"d75ca06f": "ChallengeBegins(address,uint16,uint256,uint256)", "d75d93f6": "registerMeOnToken(address,uint256,string)", +"d75da696": "changePZS(address)", +"d75db9fc": "arbChain()", "d75de4ab": "isAddressInWhitelist(address,address)", +"d75e1214": "PurchaseQuantity()", "d75e30cf": "drawFee()", "d75e662f": "OverpayRefund(address,uint256)", "d75e7afd": "calDivs(address,uint256)", "d75e87ef": "PersonalInfoAdded(address,string,string,string,string,string,string,string)", +"d75e9527": "setRedeemThreshold(uint256)", "d75ebde2": "joinGameFromBalance(uint256)", "d75f0dd6": "SixtusToken()", +"d75f9a40": "updateBuyAddress(address)", "d75fabb0": "RewardOffer(address,address,bytes32,uint256,uint256,uint128,uint256)", "d7604a78": "modifyWhitelist(address,uint256,uint256,uint256,bool)", +"d7610881": "setGasBackRate(uint8)", +"d7610978": "initAddr(address,address)", +"d7611cc1": "lockEth()", "d7625c88": "hasMigrated(address)", "d762755d": "minimumContributionWeiByOneInvestor()", +"d7628cb9": "devTransferAddr(address)", +"d7629ba2": "HACKED_CONTRACT()", +"d762a37b": "updateTransferLimit(uint256)", +"d762f34e": "takeCurrentCash(uint32,uint128,uint32,uint32)", "d7638b73": "phase2Cap()", "d763f92d": "FintechChain()", "d7642ae2": "COIN_COST_ICO_TIER_3()", "d7643e18": "protoCount()", +"d764b78f": "staking(address)", "d7651471": "Notes()", "d7655b98": "OmixToken(uint256)", +"d765925d": "transferEth(address,address,uint256)", +"d7665a48": "cancelOrder(address,address,address,address,bytes)", +"d7666de6": "setLiqFee(uint256)", "d7669119": "NewPrice(uint256,string)", +"d766f877": "hbtLock()", "d767aee0": "bbb()", "d767e0d6": "SoldToCustomer(string,string)", "d767ee4d": "updateLogic(uint256)", "d7682701": "_cancelPermissions(address,address[])", +"d768561b": "balanceOfbBtc()", "d768729d": "getRecentDiary()", +"d768779a": "updateToken(address,uint256,uint256,uint256)", "d7688d31": "destEthFoundationDev()", "d7689460": "CryptoRex()", "d768d95b": "finaliseContract()", "d768d95e": "fetchVoteMainInfoForVoterBySnapshotBlock(address,uint256)", "d768dd4b": "Stage3Allocation()", +"d76919f7": "maximalDecimalPercent()", +"d7693c07": "toggleUF()", "d769ae1b": "SLCAdvancedToken(uint256,string,string)", +"d769cd82": "Invest2cDAI_NEWContract()", "d769f32a": "mulXY(uint256,uint256,uint256)", "d76a0cb8": "HybridBlock()", "d76a130a": "TokenCDCQ(uint256,string,string)", +"d76a386a": "setArtist(uint256,address)", +"d76a3cfe": "bunnyBurnCount(uint8)", "d76a69e2": "Fund(address,address,address,address,address,address,address,address,address[])", "d76b6095": "phase1Rate()", +"d76b9af5": "sendToFactory(address)", +"d76bbd52": "clubToken()", +"d76bc9c7": "claimInvestinFee()", "d76bce7c": "dropEth(address[],uint256[])", +"d76bf9d9": "sellerHasApprovedCoupons(address,uint256)", +"d76c2c4f": "complaint(bytes32,uint256,uint256)", +"d76d1443": "qualifiedPartners(address)", +"d76d17d2": "getAuctionIdFor(address,uint256)", "d76d6ee0": "query(bytes32,bytes2,int256)", "d76dc2eb": "LOCKAMOUNT1()", "d76dc656": "GDCAcc02()", +"d76dd31d": "maxRewardArrayLen()", "d76dddd3": "unfreezeTime()", +"d76e48b1": "getFireRo(uint256)", "d76e5765": "getUserIpfsFromId(uint256)", "d76f288f": "metaBurnHash(address,uint256,uint256,uint256)", "d76f94aa": "toAlphabet(uint8[])", +"d76fabf5": "updateLuckDrawContract(address)", +"d76fc900": "CustodianChangeRequested(bytes32,address,address)", +"d76fe48d": "buyToken(uint256,uint256,address,uint256,string,uint256)", +"d76ff2bb": "getUserDelay(address)", +"d770ae1b": "getPrice(string[])", +"d77163ef": "setMaxTotalDAILiquidationAmount(address,uint256)", "d7717750": "tokenLogic()", +"d771a37a": "getCurrentSupplierAddress()", +"d771b0a6": "stakingStart()", "d7723231": "getIcoPurchase(address)", "d772ddc0": "setProcessorAddress(address)", "d7730236": "maxEthRaised()", +"d7733e8f": "borrowContracts(address,uint256)", "d7734855": "getDiff(uint256,uint256)", +"d77366a4": "kyberNetworkProxy()", "d77371e0": "GoodDayToken()", +"d77379f1": "bmiToken()", +"d773d207": "setdailyLimit(uint256)", +"d7740ee1": "registerPool()", "d7744b9f": "getReferee(uint256)", "d774c038": "multisend(address[],address)", +"d774f1f9": "pendingSunflower(uint256,address)", +"d7754ba6": "getPooledBalance3(address)", +"d77570c5": "functionReferralRegistration(address)", +"d7757dee": "lockedance(address)", "d775db2a": "testThrowsSaleWalletIncorrectMultisig()", "d7760500": "partnersRelease()", +"d77678ef": "Cards(uint256)", "d7768c47": "prepare(bytes)", +"d7769965": "setAccountLockType(address,bytes1)", +"d776b050": "updateHopMarketCap(uint256)", "d77727de": "seeOwner(uint256)", "d7777c29": "startPreICOStage1()", +"d777ed9f": "usdtSlp()", +"d77836ce": "withdrawAdmin(uint256)", "d77844f6": "isLimitationPeriodActive()", "d77849c7": "tokenTakeback(address,uint256)", "d778610e": "updateStateWithPrivateSale(uint256,uint256,uint256)", "d7787f33": "setUpgradeContract(address,address)", +"d7789a3d": "OraclizeQuery(string)", "d7789a9f": "unsetEndorsement(address,uint256)", "d778c911": "price3()", +"d778e301": "cloudDoRound2(uint256)", +"d779039b": "setDepositMinTrc20(uint256)", "d7790c11": "waipaytoken()", "d7796915": "checkWithdrawValueFX(uint256)", "d779ca24": "payoutBonusesToHolders()", +"d77a1d3a": "lastTWAP()", "d77a39c9": "addPresaleTokens(address[],uint256[],uint256)", +"d77a4f3f": "pendingMink(uint256,address)", +"d77a5655": "ReservedSale(address,uint256)", "d77a80a8": "lastFunder()", "d77a86a0": "sendTo(address,uint64)", "d77ac32d": "discountSum(uint256)", "d77b0ff7": "keyAtIndexHasNext(uint256)", "d77bd1ae": "ProposalAdded(uint256,address,string)", "d77bf0cf": "CONFIG_PRICE()", +"d77c5e17": "setTokenPool(address,address)", "d77c96f8": "mainICOThirdWeekEndTime()", "d77d0012": "getBankPercent()", +"d77d1a3f": "tokensLocked(uint256,address)", "d77d3f79": "KoaStandardToken(uint256,string,uint8,string)", "d77da4f4": "withdrawToTeam(uint256)", "d77e2f55": "pendingEtherForCroupier()", "d77e8986": "isExistsEscrow(bytes16,address,address,uint256)", "d77ec4a4": "executeWithdrawTransaction(uint256)", +"d77ecb41": "whitelistSpender(address)", "d77fc50f": "checkZeroValue(uint256)", +"d77fe1cd": "pivot()", "d77ff9ea": "eventCardRangeMin()", "d7800fa2": "PurchaseRegistered(bytes32,address,uint256)", +"d7805ece": "contributionOf(address)", +"d78155b8": "TACLockupContract()", "d7815ba4": "shareholdersHolding1y()", +"d7816b7d": "countBunny()", "d7816f45": "transferlocked()", "d781be46": "endDatetime()", +"d781c63e": "Fee3(address,address,uint256)", "d781d0f4": "YaoToken(uint256,string,string)", "d781f3f4": "FootScoutCrowdsale()", "d781fbf9": "removeERC223(uint256,address,uint256)", "d78235cf": "setconfigurationEtherPrice(uint256)", "d78276c6": "withdrawERC20(uint256)", +"d7828d9c": "setETHPoly(address)", "d782cc54": "setNewBonusLevel(uint256,uint256)", "d782d647": "createdTokens(uint256)", +"d7830ccb": "lookUptokenIdToStarInfo(uint256)", +"d7834bc7": "ProfitShare(uint256,uint256,uint256,uint256)", "d7837ec9": "withdrawNonTop(uint256)", +"d783a2b5": "reducibleFreezingCount(address,address)", "d783aacf": "ItalyToken()", "d783b53b": "addSupporter(address)", +"d7841c04": "approveViaSignature(address,address,uint256,uint256,address,uint256,uint256,bytes,uint8)", +"d7843e55": "setImageUrlOf(uint256,string)", "d784601a": "myEthBalanceOfNoFee()", +"d784a60d": "getVotesUsed(address)", "d784d426": "setImplementation(address)", +"d784df9e": "symbolProxy(address)", "d78506ce": "RoyaltysOwing(address)", "d785c19c": "worldCupResultPart1()", "d785e5c9": "m_isCirculating()", +"d785e837": "vendingMachine(uint256)", +"d785f4e4": "_topMembers(address)", +"d786253b": "getPath(address,bool)", "d78724d6": "getUserContractCount(address)", "d7872745": "GumToken()", +"d7873d38": "getCooldownDuration(uint256)", "d788a945": "_isLongitude(int256)", +"d788c37f": "frax_to_buy_out_issue()", "d7892b6a": "changePeaceRelayAddr(address)", "d789479d": "celtic_cross()", "d78996d8": "getUtilizationAndAnnualBorrowRate(uint256,uint256)", "d789b4c1": "uintMax(uint256)", +"d789b640": "InvalidApprovalSignatureError(bytes32,address)", +"d78a5b61": "nouniPerBlock()", "d78b16a1": "emitTokens(uint256)", "d78c15d9": "isPromoted()", "d78c20ff": "voteApprove(uint256)", "d78cb1b2": "buyXgoldTokens(address)", +"d78cddba": "tokenInPriceChange_()", +"d78d3d22": "AddtotalSupply(uint256)", "d78d610b": "getRecipients()", +"d78d7c2e": "assetPosition(bytes32)", "d78db648": "multStore(int256)", +"d78dc003": "trigger8(address)", "d78e1bb1": "teamPot_()", "d78ed508": "getShipProductStartPriceByModel(uint16)", "d78efa67": "addrecruit(uint256,uint256)", +"d78fac5a": "transferHouse(uint256,string,address,uint256)", +"d78fbc6c": "Ainput2D(uint256[][])", "d7901260": "closePreICOPrivate()", "d7901645": "GetDappinfo(string)", "d790dce7": "endOfSaleFullWithdrawal()", +"d7910e4e": "tokenLockEndTime()", "d79185d7": "StartGuess_wis(string,string)", "d791de63": "unlock(address[])", "d791ed7a": "BaoBaoToken(uint256,string,string)", +"d79225e6": "getWithdrawSwerveAmount(address,uint256,uint256)", +"d792a871": "purchased(uint128)", "d792b356": "teamTokenAllocation(uint256)", +"d792ba43": "imageTimeLockStatus(uint256)", +"d792d9ee": "batchMap(address)", +"d792e9a6": "TestRandom()", +"d7934d76": "changeQuarterlyFee(uint16)", +"d79351b2": "addToGuardianList(address)", +"d79397ac": "getAddressRating(address)", "d793f7a9": "preICOamountBonusMultipierInPercent(uint256)", "d7942050": "Setuppresale(uint256,uint256)", +"d7943b27": "maxHighRateN()", +"d79494df": "DistributeProfitsOBELIXFarmer()", +"d79511e2": "addStudent(bytes32,address)", "d79521e8": "getPokemonDetails(uint256)", "d7955eaf": "Santal()", "d7959cf9": "ipfs()", +"d795ab41": "put(address,address,address,address)", +"d795bfe1": "startVotingForChangeBuySellLimits(uint256,uint256,uint256,uint256)", +"d79604c2": "reduceWeight(address)", "d7963f94": "changeOwners(address)", +"d7972580": "lockUser(address)", +"d79779b2": "totalReleased(address)", +"d7978317": "TokenSendStart(address,uint256)", +"d797920b": "getMinerNest(address)", "d7982a6c": "unlockEscrow()", "d7984cff": "CappedAndBurnableToken(uint256)", "d79875eb": "sell(uint256,uint256)", "d7988c98": "makeGrant(address,uint256,uint256,uint256,uint8)", "d7989a93": "advancedTokensPerEth()", +"d798f86e": "removeLiquidity(address)", "d79941d8": "getQueryRandomCallbackGas()", "d79964c3": "addDeprecation(uint256,address,address,address,uint256,address)", +"d799733b": "monthlyRewardsPayOuts(address)", +"d79ab046": "setRewardAddressTeam2(address)", +"d79afac4": "oneSplitAddress()", "d79b5bc6": "DonationSentButNotMatched(address,uint256)", "d79bd499": "retrieveBalance()", +"d79c0994": "depositToCurve(uint256,uint256,uint256)", "d79c1f7f": "batchReclaimExpiredSwaps(bytes32,bytes32[])", "d79cb6fd": "buyScams()", +"d79ce631": "PayByErc20(bytes32,address,address,uint256,uint256,uint256)", +"d79d06d8": "loanInterestAmountShare()", +"d79d373c": "updateTokenOracleAddress2(address)", "d79d5c7a": "COMPANY_TOKENS_PERCENT()", "d79d63be": "getCardPrice()", "d79d8e6c": "set(bytes32,address,bytes32)", +"d79d955f": "Rule(address,string,address,uint256)", +"d79d9a52": "getEth(int256)", "d79e1e7d": "sumElements(uint64[])", "d79e3755": "totalPromo()", "d79e5de8": "HeliumToken()", +"d79e5e1d": "specialMultiplier(uint256,address)", "d79e7894": "isAfterICO()", +"d79f33bf": "getBPTStakingPools()", "d79f5678": "DazzioCoin()", +"d79fb125": "pendingWRN(address)", +"d79fca80": "intermediateReSaleCommissionPercentage()", +"d7a0314b": "registerServiceOffering(bytes32,uint64,uint16,uint8,string)", +"d7a07add": "claim2(uint8)", "d7a084e0": "isWhiteListGame(address)", "d7a08641": "checkCanRelease(bool,uint256,uint256)", +"d7a0cd72": "REFERRAL_LEVEL3_RATE()", "d7a10acb": "balances2(uint256)", "d7a1192d": "STAGE3_TIME_END()", "d7a14a05": "totalAmountOfEarlyPurchases()", "d7a15951": "winnerReward(address,uint256)", "d7a17187": "ico2Raise()", +"d7a1cd63": "deposits(address[],uint256[])", "d7a1cfe1": "addFriend(address)", "d7a23fd4": "getActivityCount(uint256)", +"d7a24718": "What_Did_Swearing_Cost_Me()", +"d7a2729a": "whole_balance_limit()", +"d7a29963": "setLotWithToken(uint32,uint128,uint128,uint32,uint128,uint128,uint32,address)", +"d7a2e057": "nodeClaim(address,address,address)", +"d7a38989": "freezeBal(address)", +"d7a3a6e5": "getFundingCollectors()", +"d7a405a6": "groupsBlocked(bytes32)", "d7a42b54": "isEntity(uint256)", "d7a4a09d": "detectJanuary(uint8)", +"d7a57ce5": "amendMarketTerms(uint256,string)", "d7a58658": "changeHouseedge(uint8)", "d7a5afcf": "holderPartnershipsTokens()", "d7a5f278": "slashInvalidUsername(bytes,uint256)", "d7a5fdee": "DGPTokenOldContract()", "d7a66ebe": "readContent()", +"d7a6f547": "updateSubToken(address,address)", "d7a71868": "setManualPrice(uint256)", "d7a78db8": "freeze(uint256)", +"d7a84693": "changeModulesGovernor(address)", +"d7a853be": "setNiftyName(uint256,string)", "d7a8560f": "invoicesStackCount()", +"d7a88e3c": "stakeValue(address)", +"d7a89333": "emergencyGetToken(uint256)", +"d7a90588": "UNIAPP()", +"d7a9cd79": "_relayerThreshold()", "d7aa6d74": "ShitCloneFarmer()", "d7aa8273": "getTransactionInfo(uint256)", "d7aa89b8": "storageOracle()", +"d7aabfb1": "startSaleRTXF(uint256,uint256,uint256,uint256,uint256)", "d7aae0e6": "executeProposal(uint256,address)", "d7ab2770": "fetchGiven(address,bytes32)", +"d7ab8024": "approveETHredemption()", +"d7ac71ff": "POSITION_ID()", "d7ac79ba": "deleteHeir(address)", "d7ad28ec": "GSMulti(uint256,uint256)", "d7ad4931": "buyNow(bytes32)", +"d7adbc08": "NUMBER_OF_NODES_FOR_TEST_SCHAIN()", "d7ae339b": "ForecastChainToken()", "d7ae76b6": "DING()", "d7af26f8": "getPlayersBalances()", +"d7affae3": "file(bytes32,uint256,uint256)", "d7b03000": "resetCards()", +"d7b03c6a": "tokenFromProtocol(uint256)", +"d7b044b6": "projectIdToAdditionalPayee(uint256)", "d7b0a358": "shiggidyToken()", +"d7b0c197": "getBorrowToLiquidityRateDelta()", "d7b0ca65": "last50plusblokhack()", +"d7b0e1a8": "requestAssignment(bytes32,uint256,string)", +"d7b0e363": "setBasePoolToken(address,address,address)", "d7b0e692": "set_new_admin(address)", +"d7b0fef1": "latestRoot()", "d7b11125": "pwr(uint64,uint64)", "d7b12454": "checkContract(address)", "d7b12f38": "PRICE_STAGE_TWO_BONUS()", "d7b15a88": "getLockedFundsLastSpending()", +"d7b16d91": "DIDHolders(address)", "d7b1b9c4": "foundationTokensAllocated()", "d7b1bb22": "cadastrar(bytes32,uint8,bytes32,bytes32,int256)", "d7b2aae6": "setContactInfo(string)", @@ -123557,16 +226089,24 @@ "d7b33f66": "updatePercentToTakeAsSeed(uint256)", "d7b33f94": "PRE_ICO_AMOUNT()", "d7b40107": "auctionByAssetId(uint256)", +"d7b44d02": "getLpStakingReserve(address)", "d7b4750c": "getFunder(uint256)", +"d7b489f5": "changeItemPrice(int256,int256,int256)", +"d7b4908f": "getPigeonOracleKey()", "d7b4a7f6": "MinerOneCrowdsale(address)", +"d7b4be24": "stakingAddress()", "d7b4c9b1": "lookupKittyDetails1(uint256)", +"d7b52a1f": "test_store_ok()", "d7b53081": "closeSaleAnyway()", "d7b5507d": "blockchaincertified()", +"d7b5555e": "getCodeContractBytecode(address)", +"d7b61ca5": "updateVoterRewardPerBlock(uint256,uint256)", "d7b701b6": "SarahCoin()", "d7b7024d": "approvedWithdrawAddresses(bytes32)", "d7b7913b": "f3(uint256)", "d7b7961c": "getPairHash(address,address)", "d7b84f68": "moveDataContractBalanceToWorld()", +"d7b8be0b": "returnbackescrow(address,bytes32,uint256)", "d7b8cdf4": "MinimumContributionChanged(uint256)", "d7b8de00": "setMaxCollectable(uint256)", "d7b91bcc": "buyTokensICO()", @@ -123577,54 +226117,94 @@ "d7ba42fc": "addActionAccount(address)", "d7ba95ca": "share2()", "d7baa041": "PublicLayer()", +"d7bb0559": "inc(address)", +"d7bb460f": "retreatHero(uint256,uint256)", +"d7bb5dd2": "CORExWETHPair()", +"d7bb5e0e": "wipe(uint256,uint256)", "d7bb913f": "accountTokensPurchased(address)", "d7bb99ba": "contribute()", "d7bbce2a": "setOrCacheDesignatedReportStake(uint256)", "d7bc23af": "newParameters(int256,uint256,uint256,uint256)", +"d7bc78a5": "bridgeableNfts(uint256)", +"d7bcb375": "claimBehalf(bytes32[],address)", +"d7bd088b": "minimumMoutaiPerBlock()", +"d7bd4547": "changeDistributeItemWeight(uint256,uint256)", +"d7bd4a2a": "getTotalUncommittedAccounts()", +"d7bd679a": "g(string[],uint256[][])", "d7bd6d0d": "addExchangeAccounts(address,address)", "d7bd8987": "testTransfering()", "d7bdaaa6": "WLMWallet()", "d7bdc3fa": "addVolumeDiscount(uint256,uint8)", +"d7bdee88": "getremainingfarmingdeposit()", +"d7bdfdef": "manual_init(uint256,uint256,uint256,uint256)", "d7be503f": "_tokePerEth()", +"d7be55d6": "viewBonusEarned(uint256,address)", "d7be708c": "BoulePreSale(address,uint256,uint256,uint256,address)", "d7be8ceb": "performFetch()", "d7bea56a": "totalExcessEth()", +"d7bf81a3": "MINT_FEE()", +"d7bf9110": "setCutoff(uint256)", +"d7bf9c24": "bodys(uint256)", "d7bfc8c5": "BabyDragon()", +"d7bffc92": "dailyLimits(address)", "d7c01c3e": "SetTakePot(uint256)", "d7c0302e": "numOfCitizensWhoReceivedDrops()", "d7c06439": "AriumToken()", "d7c06919": "getAuctions()", +"d7c071b1": "disarmCommitBlock(address)", "d7c0d42d": "ControlledToken(uint256,string,uint8,string)", +"d7c0da4a": "GetUserID(address)", "d7c0f72b": "getTitulaire_Compte_5()", +"d7c1465d": "getUserInvestmentIds(address)", +"d7c157db": "viewMyWithdrawable(address,address)", "d7c23572": "historyTimesPlayed(address)", "d7c23578": "addSig(bytes32,bytes32,bytes32,uint8)", "d7c26adb": "oraclize_setProof(bytes1)", "d7c2a887": "MANAGEMENT_FEE_RATE()", +"d7c2eec7": "release(address,bytes32)", +"d7c31a69": "pro()", +"d7c34457": "SupplyNotForBurn()", "d7c35657": "EthsqrGate()", "d7c39cc6": "totalSellingItem()", +"d7c41c79": "initialize(address,address,address,address,uint256,uint256)", +"d7c45198": "setMinCrowdFundingAmount(uint256)", "d7c482ef": "Defroze(address,bool)", "d7c48e2b": "preseller()", +"d7c49938": "updateRaceAddress(address)", +"d7c4b860": "ProtocolTransfer(address,uint256)", +"d7c4c1aa": "deleteWsFromPreviousClearing(address)", "d7c4e7ac": "HarlleriumCoin()", "d7c4f9d3": "SignatureAdded(string,string,uint256)", "d7c5b986": "LogContribution(uint8,address,uint256)", "d7c61e7b": "CreateSaleAvgPrice(uint256,uint256,uint256,uint256,uint64,address)", +"d7c65d9c": "approveAvailable(address,uint256)", "d7c7159c": "buyWithKYCData(bytes,uint8,bytes32,bytes32)", "d7c74279": "deployChildren(address)", "d7c8112d": "WithdrawAllFunds(uint256)", "d7c81b55": "gameId()", "d7c81fdc": "MSCCStandardToken(uint256,string,uint8,string)", "d7c8843b": "getEggsSinceLastHatch(address)", +"d7c894ea": "NewTokens(uint256)", "d7c8e90c": "voteAmendment(uint256)", "d7c8f959": "CreateEmployee(address,uint32,uint32,uint16)", "d7c94efd": "teamFee()", "d7c97fb4": "erc721Contract()", "d7c9a0e3": "getMyMoney()", +"d7c9ebdd": "removeRecipient(bytes32)", "d7ca01b5": "confirm(address,uint256)", "d7ca20e6": "HashStore(uint256)", "d7ca3a90": "CelebrityMarket(address)", "d7ca7cc5": "changeLockingPeriod(uint256)", +"d7ca8166": "finalEndTime()", +"d7ca8888": "alocationDeveloper()", +"d7ca8b72": "takeIcm(address)", "d7ca9949": "totalSoldTokens()", +"d7cb0e00": "icoLevel3()", +"d7cb416f": "token1Address()", +"d7cb4bd1": "getStorageMetadataURIs(bytes32,uint8,uint8)", "d7cb55a2": "AToken()", +"d7cb7b04": "LOG_PolicyApplied(uint256,address,string,uint256)", +"d7cb8517": "airdropClaimed(uint256,address)", "d7cbac05": "BONUS_ICO_STAGE1_PRE_SALE1()", "d7cbbb73": "getAllCardsAddress()", "d7cc43bf": "aSetStart(uint256)", @@ -123632,145 +226212,278 @@ "d7ccc2c3": "getLastPayment()", "d7cd6c13": "burnFundAccount(address,uint256)", "d7cd7209": "newGroup(address,bytes32,address[])", +"d7cdaf71": "getGasCostOfGetAmount0Delta(uint160,uint160,uint128,bool)", "d7ce330b": "Deco()", +"d7ce3c6f": "modifyTimelockExpiration(bytes4,uint256)", "d7cea877": "monthStr(uint256)", +"d7ceab4c": "createValidatedRequest(address[3],uint256[12],bytes)", "d7cee31e": "houseAddress()", +"d7cefab7": "Dividends(uint256)", "d7cf1d20": "HDT_Token()", "d7cf61d7": "assertSignedByBoth(uint256,bytes32,uint8,bytes32,bytes32)", "d7cf7bcb": "purchaseSafe(uint256,uint256)", +"d7cf7c29": "_cancelApproval(uint256)", +"d7cf851e": "getJumpSensitivity()", +"d7cfa9ca": "isETHRefundable()", +"d7cfda20": "lockStakingPoolV2Rewards()", "d7cff986": "submitAnswerCommitment(bytes32,bytes32,uint256,address)", "d7d0afa4": "_fetchCreatedOrdersForMerchant(address)", +"d7d0d077": "getPendingMetal(uint256)", "d7d12297": "taskTotalBalance()", "d7d15059": "functionName()", "d7d1b48c": "_setWingsValue12(uint256)", +"d7d1bbdb": "approveRequest(uint256)", "d7d1bdbd": "getUnsoldOwner()", +"d7d1d07c": "getCurIncomeRate()", +"d7d20975": "distributeEth(address[],uint256[],string)", +"d7d21f5b": "callcodeTest(address,uint256)", "d7d23155": "owner_linkage()", "d7d29315": "drawReuslt(uint256,address[],address[],uint256,uint256,uint256)", "d7d319e4": "CWCreturnQuery()", +"d7d3aab5": "getBalanceForAddition(address)", +"d7d3c3b9": "approveTokenSpender(address,address,uint256)", "d7d3c4d5": "pvpContenderRemoved(uint256)", "d7d40523": "HardwareWallet()", "d7d43b41": "MoedaToken()", "d7d49532": "lastBlock_a9()", +"d7d50a5f": "tokenSalePUMPS(address)", +"d7d52266": "forgeValidator()", +"d7d56f21": "LIST_ADMIN()", "d7d5878d": "revokeSchedule(address,address)", +"d7d5b928": "operatorRedeem(address,uint256,bytes,bytes)", +"d7d5e708": "getSpendersGroup()", +"d7d6e868": "WithdrawalEther(address,uint256)", +"d7d6f43d": "pushPrice(bytes32,uint256,bytes,int256)", "d7d7442f": "updateThreshold(uint256)", +"d7d79289": "calculatePowerReceived(uint256)", "d7d7be34": "oraclize_query(string,bytes[1])", "d7d88043": "endSaleDate()", "d7d8cdd5": "addTRA(address)", "d7d90fb1": "ClearCLevelSignature()", "d7d96a12": "StarToken()", "d7d9fef0": "scheduleTimelock(address,uint256,uint256)", +"d7da1dee": "getRewardsLength()", +"d7da5e52": "getTotalStackedAmount()", +"d7da973a": "f(bytes32)", "d7dae83c": "active_withdraw(address)", +"d7db2351": "totalWeiRaisedDuringICO()", +"d7db7003": "ProjectAdded(uint64)", +"d7db90c1": "oracleHeartbeatPeriod()", "d7dbb88b": "getn2Exception(bytes32)", "d7dbdbe3": "setVicepresidenteDeMesa(bytes32,uint256,bytes32)", "d7dc6203": "calculateInterest(address,uint256)", "d7dcaa19": "BuToken()", "d7dccb1e": "EthSplit(address[],address)", "d7dd2ae3": "ValidateCitySnapshotInternal(address,uint256)", +"d7dd41f2": "mining(uint256)", "d7dd8652": "refundCrowdsale()", +"d7ddb569": "bytesToBytes(bytes2)", "d7dde189": "StartupToken()", "d7de57c6": "challengeWithFutureCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"d7de7323": "findfourPercent(uint256)", +"d7de7b39": "activateOwnerBurn()", "d7de9c6e": "setOracleQueryString(string)", +"d7dee270": "Refunded(address,uint256)", +"d7dee814": "getRemainingSeconds()", +"d7dee86a": "StartInvasion(bytes32,uint256,uint256[])", +"d7df459f": "createGen0DODO(uint256,uint256,address)", "d7df7ef9": "_createWonder(address)", "d7dfa0dd": "logic()", +"d7dfe254": "endInvestment(uint256)", +"d7e05740": "lastTimeRewardApplicableByPID(uint256)", +"d7e07581": "disableReserveFixedBorrowRate(address)", "d7e07d5f": "destTokensReserve()", +"d7e0842a": "cancelProposedModule(bytes32)", "d7e0b6e3": "registerUser(address,bytes32)", "d7e0d83d": "setPrvd(address)", "d7e0e776": "getBalanceOfInstance()", "d7e11e9d": "AddTicket(bytes)", +"d7e1ea17": "amountClaimed(address)", +"d7e24337": "upgradeToAndCall(address,string,bytes)", "d7e25c36": "isCapReached()", "d7e2f000": "preallocationsWhitelist()", +"d7e2fa7c": "safeJungleTransfer(address,uint256)", +"d7e3056f": "checkComputeSwapStepInvariants(uint160,uint160,uint128,int256,uint24)", "d7e30832": "TankTransfer(address)", "d7e31d67": "setRewardChance(uint256)", +"d7e3433b": "setStakePermission(address,bool)", +"d7e38afc": "getUserUnrealizedPNL()", "d7e3aab2": "VestedMultisigWallet(address[],uint256,uint256)", "d7e44b89": "splitPay(address[],uint256,address)", "d7e4e1f7": "setSail(uint16,uint16,bool)", +"d7e52745": "unstakeTime()", +"d7e54ce4": "startAirdropx(uint256,uint256,uint256,uint256)", +"d7e5a8f4": "removeFromBL(address)", "d7e5c07d": "allocateTokens(uint256,uint256,address)", +"d7e5fbf3": "registerContract(address,address)", "d7e64c00": "investorCount()", +"d7e6bef8": "setUniswapPercent(uint256)", +"d7e6ddfd": "hydrogen()", "d7e7088a": "setUpgradeAgent(address)", "d7e751ff": "tokenWithdraw(uint256)", "d7e8015a": "FuckToken(uint256,string,uint8,string)", "d7e84fbf": "builder()", "d7e8553a": "_deleteValidator(address)", +"d7e87c18": "addToTokenList(address[])", +"d7e89737": "maxUnlockIterationCount()", +"d7e8e85b": "deposittime(address)", +"d7e991d2": "CapReached()", "d7e9ec6e": "RemovedBlackList(address)", +"d7e9f178": "fundAppeal(address,uint256,uint8)", "d7ea39c6": "referralDone()", +"d7ea76b8": "AirdropStart(uint256,uint256)", "d7ea977b": "V1ChainToken()", "d7ea97e2": "setBTHFoundationWallet(address)", "d7ead1de": "right74(uint256)", "d7eae6db": "setUnPauseEmergence()", "d7eaef90": "LGTToken()", +"d7eb3f3a": "artistAddress()", +"d7ebd4fb": "donFundAddress()", +"d7ebe122": "convertOnetoToken(address,uint256,uint256,address)", "d7ebf53d": "countActiveCastle()", "d7ec1fac": "CrowdSaleTokenSoldout()", "d7ecb5e3": "MINI_GAME_BETWEEN_TIME()", "d7ecba0c": "numBarriersPerBoard()", "d7ecc129": "supplyTo(address,uint256)", "d7ed3fb1": "get_participant_topl_address(address)", +"d7ed714e": "startRewardBlock()", "d7ed7453": "redeemWinnings(uint256)", "d7edddb2": "withdrawAdministratorMoney(uint256)", "d7edf88c": "replenishEth()", +"d7ee674b": "flog(uint256)", "d7ef1356": "best_adjustment(bool)", "d7ef4a04": "CreateCredoIco(address,uint256)", "d7efbf34": "transition()", +"d7f080b8": "erc20ConctractAddress()", +"d7f08a83": "nameSignUp()", "d7f08eed": "unlistSubName(bytes32)", "d7f0d86b": "attackUnit(uint256,uint256)", "d7f0df73": "Betcash(uint256,string,uint8,string)", "d7f0f01b": "fund(uint8,uint8,uint8)", +"d7f130e5": "getItemMinedBalance(address,uint256,address)", +"d7f1608e": "LogPayerAddrChanged(address,uint256)", +"d7f1b27c": "isInitializedModule(address)", +"d7f23b61": "orderIDs(uint256)", +"d7f29c63": "requestEthereumPrice()", +"d7f2c385": "resumePynth(bytes32)", "d7f31eb9": "forward(address,uint256,bytes)", +"d7f35550": "c_safe()", +"d7f3c66d": "setUsdtToken(address)", "d7f3c770": "Mesut()", +"d7f3e71d": "_onDisputableAllowed(uint256)", +"d7f426df": "transferReceivedCounter()", "d7f42ee2": "getBBLibVersion()", +"d7f45e2a": "kamikaze()", +"d7f4c763": "batchReturnTokensIfDisabled(uint256)", +"d7f5549d": "latestSignerUpdateEpoch(uint256)", "d7f56ef7": "partnershipsTokenAddress()", "d7f59fd0": "tgeSettingsBlocksPerStage()", +"d7f5b359": "migrateBridge(address)", "d7f5b43e": "setCapacityByIndex(uint256,uint256)", +"d7f66352": "bonusRewardPerTokenStored()", "d7f6f81c": "getProviderBadge(address)", +"d7f7098f": "daiBalance(address)", +"d7f742c0": "airdropuser(uint256)", "d7f746ce": "tickingBomb()", "d7f7582c": "totalCapitalization()", +"d7f79f52": "flashloanVault()", +"d7f7b2de": "venusToBnbPath(uint256)", "d7f7f3aa": "markTransferTokens(address,uint256)", +"d7f83263": "timc(uint256)", +"d7f854a3": "batchWithdraw(address,uint256[])", +"d7f889bf": "sendTokensToList(address[],uint256)", "d7f8a053": "TokenRate(uint256)", +"d7f933fb": "panicAndError(bool,uint256,uint256)", "d7f9d655": "Divies()", +"d7fa023d": "createStake(uint256,uint256)", "d7fa1007": "setHash(bytes32,bytes32)", +"d7fa107d": "earlyClosure()", +"d7fa2335": "companyRate(address)", "d7fa445e": "claimBidReward(uint256)", +"d7faaf5c": "createAccountRefund(string)", +"d7fb00f8": "allowToLock(address)", "d7fb4f1d": "endTime_()", "d7fb5ef5": "angelSupply()", +"d7fb6f6c": "currentSupplierIndex()", "d7fb7427": "transferNewCoin(address,uint256)", "d7fb8dc0": "messageForReason(uint8)", +"d7fbc2e4": "rooms(bytes32)", "d7fc1b9b": "register(string,string,bool)", "d7fc23a2": "createNewAsset(string,string,uint256)", +"d7fc3681": "addNewPool(uint8[30],uint256)", +"d7fc3a43": "createMintingAuction(uint256,uint256,uint256,uint256,address)", +"d7fc898a": "createRewardProject(uint256,uint256,string,bytes[],bytes[])", "d7fc98c3": "subscribeIndividual(bool)", "d7fd00b0": "TEAMS_PER_ENTRY()", "d7fd0e77": "requestTime()", +"d7fd1f72": "LogEvent(string,string,uint256)", "d7fe270e": "multipleTokensSend(address[],uint256[])", +"d7fe5d2a": "magic_dex_now()", +"d7febb4b": "UNIlevelTeamAmount(uint256)", "d7febcb9": "TestUserBitFlag(address,uint256)", "d7ff4d7a": "WODECESHIBI(uint256,string,uint8,string)", "d7ffbbaa": "setInformation(string)", +"d7ffca91": "getUserCheckpoint(address)", +"d800c7d9": "uniswapAPY2KPerEth()", +"d800e5e7": "checkNoOfContributor(uint256)", +"d80137e1": "RAMRouter()", "d8013c4e": "addNote(bytes32,bytes20,string,string)", "d80162fc": "setRecommendStatus(bool)", "d8018c42": "getReleaseTimes(address)", "d801aa84": "isWalletFromUser(string)", "d8020a18": "marketingPercent()", +"d802178e": "getTokenBalances(address,address[])", +"d803087f": "__Governable_init__(address)", "d80326a9": "VentanaToken()", "d80364ba": "LogRegister(address,string)", +"d803d93c": "_isDeviationAboveThreshold(uint256,uint256)", +"d803eb96": "currencyPricesAddress()", +"d8046e7d": "revertStrings(uint256)", "d8047a07": "RobotChain()", +"d804d4bc": "_isAccepted(uint256,uint256,uint256,uint64,uint64)", +"d804d53f": "removeReaderFromMedianWhitelist(address,address)", "d80528ae": "stats()", "d8055812": "votesDecline()", "d8058712": "UnicornAccessControl(address)", +"d8060cd5": "updateMinStakeAmount(uint256)", +"d80621dc": "authorizeFundManagerDataSource(address)", "d8063ea6": "addDelegate(address,address,string,address,uint256)", +"d8065f78": "ERROR_DEFAULT()", +"d806b337": "bulkRewards(address)", "d8070c40": "IcoPrice()", "d807a688": "wper(uint256,uint256)", +"d80817fb": "getWeightPerSecondBounds()", "d8085306": "mintTokensForSecondStage()", "d8085f78": "ownerCanClaimCard(address,address,address[3],uint256)", "d8085fee": "multiMerge(address[])", "d80866da": "isValidZ(uint16)", "d8090cbf": "resetReclaim()", "d809d248": "startNextGame()", +"d809d770": "setAgicFundPool(address)", +"d80a546e": "allowOSMFreeze(address,address,bytes32)", "d80a5c3b": "MyContribution()", "d80ad1ed": "getSponsorshipProportionalAmount(address,uint256,uint256)", "d80aea31": "_setCreatedBlockOnRevealsPhase(uint256,address,bool)", "d80b1a68": "createAndEndowC1(uint256,uint256)", "d80b2056": "emptyWrongEther()", +"d80b771b": "allowMultiple(address[],uint8)", +"d80c815c": "wlfPerBlock()", "d80cc340": "retainBalance()", +"d80ce5e9": "addNewVault()", "d80d3025": "changeBonusSystem(uint256[],uint256[])", +"d80d4d10": "migrateLPtokens2manualinput(uint256,uint256)", "d80d9c55": "changeSecondsInBlock(uint256)", +"d80dcc83": "open(address,address,uint256,uint256)", +"d80debc5": "addLiquidityImbalanced(uint256,uint256,uint256)", "d80e821c": "reevaluateICO(uint256)", +"d80e85bc": "SupplierTrade(uint256,address,uint256,address,address,uint256,bool)", "d80e8700": "CurrentTime()", +"d80efffd": "setLockedToken(address)", +"d80f0170": "findPairs(address,address,uint256,uint256)", +"d80f6c48": "auctionClosed(uint256,uint256,uint256,bytes)", +"d80f6d3d": "privateSaletokenSold()", +"d80f8607": "setRecordHaveWithdrawal(address,uint256,uint256)", +"d80f8621": "epic(uint256)", "d80ffb20": "drawNumber()", "d8104e19": "GetMyEarning()", "d810f298": "computeSettlementAmount()", @@ -123781,12 +226494,19 @@ "d811f09e": "ownershipTransferAllowed()", "d811fcf0": "farmer()", "d81230c8": "shareactive()", +"d812aee7": "updateB4sePerBlock(uint256)", +"d812d346": "calcMarginalPrice(address,uint8)", "d812d961": "getSanName(uint256)", "d812f2b0": "setDelegadoDeEscuela(bytes32,uint256,uint256)", "d8132807": "_getMinAuctionStartPrice()", "d8134a23": "removeAcceptedToken(address)", +"d8134d59": "pullGuildFunds(address,uint256)", +"d8138f8a": "Claimed(address,uint256)", "d813b4b9": "setArtIdt(string,string)", "d8145062": "squirrelmasterReq()", +"d8145e2d": "organizationProposals(bytes32)", +"d8146a2e": "LogRateUpdate(uint256,uint256)", +"d81476fa": "isFeesClaimed()", "d8148166": "DistributionMint(address,uint256)", "d81494ba": "blacklist_addys(address[])", "d8149fe7": "dive1(address)", @@ -123795,63 +226515,124 @@ "d815fa30": "ERC20Token(uint256,string,string,uint256)", "d816187f": "PreIcoWallet()", "d8162db7": "lockedUntilBlock()", +"d8165743": "getMarketState()", +"d81671bc": "getSwapCount()", +"d816c7d5": "unstakingFeeRate()", +"d8173b49": "MyBalance(uint256,address)", "d8174150": "MAX_PRESALES_EXTENSION()", "d8175101": "ownerHasCardSimple(address,address)", +"d8178e3d": "ovmCREATE2()", +"d817a351": "getRecentHoldedCoverIdStatus(address)", +"d8184521": "sendToB2(address,address)", "d81849b8": "additionalTokenRate()", +"d818750a": "addrToDoctor(address)", "d818eb63": "Fundraiser(address,address,uint256,uint256,uint256)", "d818ecee": "setDisputed(address,string)", +"d8193b98": "sentAmount()", +"d819917f": "swapROTforMAGGOT()", "d81a91e9": "get_party2()", +"d81aa8c4": "addRecord(string)", "d81ab0c1": "invoke(uint256,address,address,bytes)", "d81ad101": "IMPACT_REGISTRY_ADDRESS()", +"d81ad859": "transferFromContract(address,uint256,address)", "d81b1020": "setForceContract(address)", +"d81bc97c": "bucketBProTecPrice(bytes32)", +"d81be788": "x8Count(address)", "d81c2232": "icoPhase2TimeBonusInPercentage()", +"d81c513a": "animalToOwner(uint256)", "d81c6741": "removeAddressFromBonuslist(address)", +"d81c8e52": "DEPOSIT()", +"d81c994b": "usdtsasLPPool()", +"d81d0a15": "mintBatch(address,uint256[],uint256[])", "d81d5062": "relayBuyerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", "d81d8f89": "getSalaryTokensTotalValue(address)", +"d81da832": "MBTCFormula()", "d81dd9f7": "destroyGame(uint256)", +"d81df7c9": "savePOI_IALForPersonId(address,string,string)", "d81dfe30": "LOCKED_TIME()", +"d81e61c7": "paymentsInfo(uint256)", +"d81e78fa": "cancelOrder(address,uint256,address,uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", "d81e8423": "get(address,address)", "d81efdc4": "euroCentsInOneEther()", +"d81f1add": "calcArbySell(address,address,address,uint48,uint256,address)", "d81f53fd": "EtherId()", +"d81f69f5": "middlePercent()", "d81f84b7": "getAddr(uint256)", "d81f9830": "BONUS_WINDOW_2_END_TIME()", +"d81fba16": "checkPreMintImage(string,bytes32)", +"d8201817": "BigDickLength()", "d8207301": "MyWishCrowdsale(uint256,uint256,uint256)", "d820ab95": "secondStageReserve()", "d8211b0d": "BENZCoin()", "d821b9f9": "initialAllocations(address)", +"d821f81a": "setMetaData(string)", "d8220323": "setLoto(address)", "d82277cc": "createInvestment(address,uint256)", +"d822979f": "finishChangeStakersPercent()", +"d822b6f8": "forceTransferEnable()", +"d82323f2": "maxMortgageFactor()", "d823eec9": "TEAM_TOKEN_CAP()", +"d8251655": "BR34PTokenAddress()", +"d825589b": "mintLockedTranche(address,uint256,uint256)", "d825b510": "addDisagree(bytes32)", +"d825ce70": "katDataStore()", "d825ebc3": "calculateMinting(uint256)", +"d8260c44": "bnbUserLiq(address)", +"d8264920": "UNISWAP_ROUTER()", "d826505d": "isEthNoEnc(uint16)", +"d82671c9": "overlord()", "d8267fef": "letItRain(address[],uint256[])", "d826853e": "sellKeys(uint256,uint256,string)", "d826f88f": "reset()", +"d826f9ab": "lastEndedLoteryDay()", "d826fdf1": "checkRefundExistanceByOwner()", "d8270dce": "creationTime()", +"d827291f": "amountToSellForTheNext8Hrs()", "d82745c8": "withdrawCooldown(address)", "d828435d": "getNonce(address,address)", +"d82845aa": "setValueInMeth(address,uint256)", +"d828bb88": "setParams(uint256,uint256,uint256,uint256,uint256)", "d8291e97": "CHELSCOIN()", "d8294ede": "minimumTimeout()", "d82974f8": "moveUnsoldTokensToFoundation()", +"d8297e44": "setFeePoolProxy(address)", +"d829e887": "spendableInfos(address,address,uint256)", "d829f1e0": "blendWithOthers(address,uint256,uint256,uint256)", +"d82a5513": "claimedETH(address)", "d82a6d56": "isOBR()", +"d82a841d": "_slotCount(uint256,uint256,uint256)", +"d82aff11": "setMarketManager(address)", "d82b394f": "createShip(uint256)", "d82beb9e": "sender_enode()", +"d82c0339": "is_Re(address)", "d82c6df4": "inactivate()", +"d82ce19a": "getCurrentCycleCount()", "d82ce857": "getPI_edit_26()", +"d82d41ac": "YFI()", +"d82d8421": "setCollateralAsset(address)", +"d82e2ced": "getAvailableToClaim()", "d82e3962": "calculateReward(address)", +"d82ea2cc": "timelist(uint256)", "d82ed7eb": "unwhitelistAddressPresale(address)", +"d82f19d2": "Knights()", "d82f6a3f": "maxWeiInvestment()", "d82f94a3": "deleteMinter(address)", "d82fa3f1": "doInvest(address)", +"d82fc192": "setCollateralRatio()", +"d830d27c": "_setValidLockups(bool,bool,bool,bool)", +"d830d97b": "calculateDeltaPenalty(uint256)", +"d830f5e4": "swapEthToToken(uint8,uint256,address)", +"d8319113": "increaseTaxAmount(uint256)", "d831a158": "ownerCtuContract()", "d831b714": "withdrawDeklaBalance(address,bytes)", +"d831d493": "shareDenominator()", +"d832a57d": "taskFinish(uint256)", "d832d0c8": "isFoundation(address)", "d833590f": "totalSupplyPretty()", "d833c736": "tripleRoomMax()", "d833dbe9": "preSaleRate()", +"d8340209": "registerProvingKey(uint256,address,uint256[2],bytes32)", +"d8340a66": "userLastUnclaimedReward(address)", "d834e619": "min(uint256[])", "d834f1e8": "setConfiguration(string,string,uint256)", "d8353b75": "vestingDateEnd()", @@ -123860,53 +226641,108 @@ "d83671b7": "addLock(address,bool)", "d83678ac": "tradeToken()", "d8367d41": "startIncomeDistribution()", +"d836a746": "lotusPerBlock()", "d836b12d": "getInvestorTokenPercentage(address,uint256)", "d836f06a": "VestingKYCSetted(address,uint256)", "d836f794": "sellKebabs()", "d836fbe8": "changeHatchEscapeCaller(address)", +"d83735a0": "addCountInvestors(uint256)", "d8377b20": "buyAndSetDividendPercentage(address,uint8)", "d8381df0": "createCastle(uint256,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"d83866e9": "settleVC(bytes32,bytes32,uint256,address,address,uint256[4],string)", "d8389dc5": "hash(bytes32)", +"d83905d8": "coefficientTimeStep()", "d8392c92": "WithCoin()", +"d83970a1": "dogIndexToApproved(uint256)", +"d839d2c0": "getUSDPPriceForBNB()", "d83a223a": "changeFounderWalletAddress(address)", "d83a7f67": "getDepositAddress(address)", +"d83a8225": "CONTRACT_DIFFICULTY()", "d83a8d11": "testProposing()", "d83aabbe": "getWagerCount()", +"d83c1484": "amountInVestings()", +"d83c6319": "Burned(uint256)", "d83c68b9": "Pilendthereum(uint256,string,string)", +"d83c87ed": "initialize(uint256,address[3],address[3])", "d83cb681": "getMixer(bytes32,uint256)", +"d83d0f76": "publicAllowed()", "d83d2afc": "leftoverWeiAmount(address)", +"d83d793c": "winnerFund()", +"d83e1042": "_weightBalances(address)", "d83edd70": "refundEth(address)", "d83f24a2": "multiMerge(address[],uint256[])", "d83fcfa3": "TMN()", +"d840ce0e": "setMinerPoolFeeNumerator(uint256)", "d8412808": "HazzaTokenInterface()", +"d841c1dd": "addOrUpdateUser(bytes,string,string,string,uint256)", +"d841f995": "getBancorRelayer(address)", "d84201bf": "buy5()", +"d842036b": "viewTaskCheck(uint256)", +"d8420b6d": "getPromiseDeposit(uint256,address)", "d8420e3a": "_isValidWithCompositions(uint256[],uint256)", +"d842b22b": "COMMISSION_BASE()", +"d842b8ac": "_encode_sol_int8(int8,uint256,bytes)", "d8436663": "destroyIBTCToken(address,uint256)", +"d843691f": "weekBonuses(uint256)", +"d8437b79": "epicList(uint256)", "d8439165": "upgradePonyResult(uint8,uint256)", "d843dcbb": "ELF()", "d843e40a": "getRoundNum()", "d843e721": "convertToATK(uint256)", +"d84462bd": "BAR()", "d844a0fa": "TierionNetworkToken()", +"d844a4b6": "lockHashesProxy(address[],bytes32[],uint8[],bytes32[],bytes32[])", +"d8454c6c": "batchCollectERC20(address,address,address[])", +"d8456960": "yeLog(uint256)", "d845a4b3": "request(uint256)", "d8460e8c": "Menu09()", "d8464746": "getEyesValue(uint256)", +"d8467e31": "openLockETHAndGiveToProxy(address,address,address,bytes32,address)", +"d8470576": "genome(uint256)", +"d8476fec": "getNumVotes(address,uint256)", "d847e48f": "BlingTokenSale()", +"d847ea03": "setDifficultyConstant(uint256)", "d8485ed6": "FCOIN1519Token(uint256,string,string)", "d84891da": "EM122()", "d8489a81": "MaxDistribPublicSupply_()", "d848dee7": "setDeprecated(bool)", "d8493983": "GroverBucks()", +"d849bd00": "EtherPriceChanged(uint256,uint256)", "d849eeba": "gotResult()", +"d849f8aa": "WithdrawContributorsToken(address,uint256)", +"d84a139d": "vestingInfo(address,uint32)", "d84acf20": "restoreAllTempTokens(uint256)", +"d84b5734": "withdrawTTT(uint256)", +"d84babca": "_rebaseLastPriceUSDCumulative()", +"d84bba1d": "addLiquidityTokensOnly(address,uint256)", "d84bd737": "xcc()", +"d84bef39": "POOL_MINT_BORROW_PERCENT()", +"d84bf7a8": "totalMarketingFees()", +"d84c1b38": "addTokenToWhitelist(address)", +"d84c89fe": "createSwap(uint256[],address[],uint256[],uint256,uint256,bool,address[])", "d84cb6ad": "ETH_Rate_Factor()", +"d84d010e": "LogAddQuestion(address,address,string,uint256,uint256)", "d84d2a47": "spreadMultiplier()", +"d84d527b": "getUserId(address,uint256)", +"d84d5687": "getMais(string)", +"d84d64fb": "setMaxYearDividend(uint256)", "d84d95ba": "confirmMultipleTransactions(uint256,uint256)", +"d84daef4": "CHANGE_PERIOD()", +"d84db837": "tradeAMMtoAMM(address[],address[],address[],uint256,bytes[],uint256[])", "d84dbdc3": "verifyInvestor(address)", +"d84ded7e": "getTicketIssuerCount()", +"d84e0d6a": "viewPosition(uint256)", +"d84e6650": "healthOk(uint256)", +"d84f55ee": "getUserName(address)", +"d84f91e8": "PAUSE_MANAGER_ROLE()", "d84f93cb": "priceOfOfficalCardSold()", "d84fdbed": "getSponsorships(address,address,bool)", +"d8501f4f": "totalSwapped()", "d850288b": "etherlist_top()", "d8507a8d": "unfrezee()", +"d850b3f2": "_countRanking(uint8)", +"d850c4ea": "yourUNOSBalance(address)", +"d8516935": "deletePullPayment(uint8,bytes32,bytes32,bytes32,address,address)", "d851eb5d": "betPlaced(address,uint256)", "d8523fc2": "askForMatch(uint256)", "d8526677": "MintMasterTransferred(address,address)", @@ -123914,55 +226750,88 @@ "d8528af0": "allowedSpenders(address)", "d85349f7": "cliffDuration()", "d8542d51": "oldTokenAddress()", +"d854fb75": "getRewardPoolBalance()", "d8550112": "putServerAddress(string,address,uint256)", +"d85539c6": "updateLottery(address)", +"d8555315": "pendingDPC(uint256,address)", +"d855a9d2": "get_total_laws_count()", "d855c059": "setExtraConfig(uint256,uint256,uint256,uint256,uint256)", +"d855d353": "getOutstanding(address,uint256)", "d85633ec": "releaseOwnership()", "d8567213": "chargeAll(uint256)", "d856cbae": "ICOMinTresholdReached(uint256,string)", "d8574e16": "addressD()", "d857561d": "enableWithdrawal()", +"d8578660": "alocationAdvisor()", "d8578d14": "showPlayerSafeById(uint256,uint256)", "d857eba6": "getTagAt(uint256)", "d8583895": "getNumberOfDeposits()", "d85874b9": "badgerAmount()", +"d8589446": "airdropToSubscribers(address[],uint256)", "d8589be3": "CoinFlipper()", "d858b5c8": "order_sell(uint256,uint256)", +"d858d644": "transferfromViaSignature(address,address,address,uint256,uint256,address,uint256,uint256,bytes,uint8)", "d858ebf4": "createVisaOffering(uint256,bytes32,bytes32,uint256,uint256,bytes32)", "d8590f93": "clearingPrice(address,bytes32)", "d8592d79": "closeWormhole()", +"d859d497": "duree_turbo()", +"d85a2009": "acorns(address)", "d85a82f6": "processDIVD()", +"d85ab498": "cardPoolPledgeTime(uint256,address)", "d85b07e0": "stopIcoAndBurn()", "d85b228e": "testCreateGame(string,string,bool)", +"d85b402d": "transfer(address,uint256,address,uint256,address)", "d85b559f": "startSelection()", +"d85b6eea": "MinimumTimeBeforeUpdateChanged(uint256)", +"d85b9756": "taxTo()", "d85ba798": "getCutieId(bytes)", "d85bd526": "running()", +"d85be5b2": "pushFeeForToken(uint256,uint256)", +"d85c20f5": "nftg()", "d85c8966": "ownerTransfer(address,uint256)", +"d85cc5c9": "FundClaim(address,uint256)", "d85d3d27": "mint(string)", +"d85d5c30": "setOpenPredictToken(address)", "d85d656f": "getSMPTokensAmountPerWei(uint256)", "d85d6d41": "finishLocking()", +"d85d7f5b": "totalAvailable()", +"d85d859e": "tempString()", "d85e2d20": "b(address,uint256)", "d85e5486": "privateCap()", +"d85e6776": "SetBlacklistAddress(address)", "d85e88db": "item(address,uint256,bool,bytes)", +"d85e9fb3": "MAX_TIME_BONUS_PERCENT()", "d85edab6": "m_investors(uint256)", +"d85ef95e": "stage_prod_player_cbps(uint256,uint256,address)", +"d85effb2": "submitAction(address,uint256,uint8)", "d85f4450": "numberOfWins()", +"d85fd03c": "erc721ControlledTokens(address)", "d860ced1": "TIER1END()", "d86123e1": "setMany(address[])", "d8615e5b": "transferAndPay(address,uint256,bytes)", "d86202cb": "getUserProductAtIndex(bytes32,uint256)", +"d8626eca": "getItemPosition(uint256)", "d8627542": "intialSupply()", "d862b611": "extraMint()", "d8632388": "allPlayCount()", "d8632ae3": "sign(uint8,bytes32,bytes32)", +"d8638a00": "airdropData(uint256)", "d863f7f4": "DigiPeso()", +"d86479df": "investedETH(address)", "d86491fc": "testReentracy()", "d864c322": "changeAccountStorage(address)", "d864e740": "committee()", "d8650f49": "tokenGenerationLock()", +"d8651ad0": "commitVote(bytes32,uint256,bytes32)", +"d8652642": "logBytes18(bytes18)", "d865897c": "_getHashKey(address,uint256)", "d865a374": "instruct_1()", "d865ae9b": "hasRole(address,bytes32,bytes32)", "d865dc4f": "tokensSoldCount()", +"d866fb3c": "switchCompound()", "d8674554": "tokenTransfertoKYC(address,uint256)", +"d86775ee": "rewardTokensAt(uint256)", +"d867b36a": "tmpadd(uint256)", "d867bb25": "getONG(bytes32)", "d8682e69": "returnTimeLeft()", "d86892a7": "setSellerGuarantee(uint256)", @@ -123971,6 +226840,7 @@ "d8692f17": "calcMerkleDefault(bytes32[],uint256,uint256,bytes32)", "d869c681": "issuedTokenBalance()", "d869d86d": "getAmountsForChangeWeight(address,address,uint256)", +"d86a455e": "createBC(string)", "d86afbbb": "giveItem(address,uint256)", "d86b2982": "numbersCount()", "d86b3721": "getblock()", @@ -123978,212 +226848,418 @@ "d86bc1b0": "cancelByAdmin(uint256[])", "d86c31e5": "BOXSToken(address,address,int256)", "d86c5bf7": "angelWheelFinanceSupply()", +"d86d53e7": "unstakeClaim(uint256)", +"d86d744e": "consts()", "d86df333": "deleteAccounts(address,address,address[])", "d86e1850": "AuditBalances()", +"d86e1ef7": "setDelayDuration(uint32)", "d86e762d": "getTotalAmountRaised()", "d86e79c3": "createFixedPeriodVpfFactory(string,bytes32,uint256,uint256,int256[],uint256,uint256,uint256)", "d86eb3b7": "reservedTokensAddress()", "d86ec25a": "setNotaryParcel(uint256)", +"d86ed3e5": "afterAgreementCreated(address,address,bytes32,bytes,bytes,bytes)", "d86f26f2": "BigBucksToken()", +"d86f5a6b": "createStake(address,uint256)", "d86f8ccd": "getAccountLockState(address)", "d86fb89d": "updateRoundsInformation(uint256)", +"d86fdbf9": "gasleft()", +"d86fefca": "pendingAZR(uint256,address)", +"d8703e1e": "getAllPairsData(address)", +"d8705537": "setSt(uint256,address,string,string)", +"d87190a9": "boostLevelThreeCost()", +"d871b0e0": "getListCandidate()", +"d871d5c5": "auctionObjOf(address)", "d871e94b": "tokenClaimWaitingPeriod()", +"d87214b9": "tokenSaleAPL(address)", "d8730ef2": "getMaxCommunityTokens()", "d8737d8a": "buyEthUnit(uint256,uint256)", "d873f0d6": "tokenSaleMin()", "d874082a": "fundtransfer()", "d8743fad": "weiMinContribution()", +"d8745b68": "etherchain_fund()", +"d874be64": "notifySigner(address)", +"d874e453": "INITIAL_SALE_SUPPLY()", "d87522ae": "pauseEnd()", "d8754716": "createNewTankHull()", "d87574e0": "airDropPot_()", +"d875de00": "lotteryFailed()", +"d87622ed": "setMonthLevels(uint256[3])", "d87624ba": "buyGrimReapersAgainstEther()", "d87692d9": "transferAllAndCall(address,bytes)", +"d876c754": "CrowdSaleTokenContractCreation()", "d876c9c0": "SECOND_AUCTIONS_INITIAL_PERCENTAGE()", +"d876fb21": "jmul(uint256,uint256,uint256,uint256)", "d8772e79": "get_transaction_count()", "d8774d99": "restrict(bool)", +"d877b9bd": "betWithVault(uint256,uint256,uint256)", +"d877bc58": "serviceCharges(address)", +"d877bc7f": "updates(bytes32)", +"d877f3cf": "sef(address)", +"d8780161": "redeem(uint256,address,uint256)", "d8783b04": "PRICE_MULTIPLIER_ICO6()", "d8787fde": "nextContract()", "d8788e68": "getTokensForSaleCap()", +"d878adba": "putGasFee()", +"d878da7c": "callRetryMapping(uint256)", "d879380d": "timeoutRegistration()", "d879914a": "getBidsLength()", +"d879d283": "ClaimingCount()", "d879e911": "JORDAN()", +"d879eff8": "mintBegin(string,uint256)", "d87a253b": "registerNameXnameFromDapp(address,bytes32,bool)", +"d87a794f": "userToNonce(address)", +"d87aa643": "invest(uint256,uint256)", "d87adaa0": "registerPubKey(address,bytes)", "d87b5c29": "getSpawnCount(uint32,int256)", +"d87b8fcb": "blocksPerReadjustment()", +"d87bb80b": "findPlayerByTicket(uint256)", "d87bc4cd": "WEGC()", "d87bca3f": "VictorieumToken()", "d87be21b": "lastBlock_a4Hash_uint256()", "d87c3df5": "applyBonus(uint256)", "d87c5df6": "assignTokensWallet(address,address,uint256)", "d87c5fb9": "balanceOfBuyer(address)", +"d87c789a": "calcToWeth(address,uint256)", "d87c9478": "getStageAverageBonus(uint8)", +"d87ccf59": "getuserPresaleBonus(address)", "d87ce037": "round1Cap()", "d87d2a66": "ETH_CRWDTOKEN()", "d87d2b8d": "BuyMOYTokens()", +"d87d2f42": "indexAddress(uint64)", +"d87d7a45": "CreateTeam(string)", "d87d9a66": "get_account_balance_eth(address)", "d87ddccc": "WithdrawEvent(string)", +"d87e061a": "currentFloor()", "d87e568a": "setHWCDeposit(address,uint256)", "d87f8da5": "cancelAuction(uint256,bytes)", +"d8800854": "carve()", "d880285e": "sPeriodEndDate()", "d880610c": "appendKeyValue(string,address)", "d88080ed": "ERC20Standard(uint256,string,string,uint256)", +"d880ae7d": "approve_248(address,uint256)", "d880b0b0": "LogChangePCWallet(address)", +"d880cd85": "updatePancakeRouter(address)", "d8819e0a": "maxTrainerLevel()", "d8822727": "CarDeregistered(uint256)", +"d8826fec": "changeDao(address)", "d882ad5e": "Valeriumcoin()", +"d882b376": "setPurchaseorder(string,string)", "d883e789": "PayWins(address)", "d8844241": "getTotalCategories()", +"d8844c91": "validateReference(address,address)", "d884a322": "betMaxAmount()", +"d8855234": "uniBuy()", +"d88564f9": "removeVerifiedMinterRole(address)", +"d8862484": "g_expiryRampTime()", +"d886ad49": "halfNodes()", "d886daa2": "revokeAccessDeposit(address,address)", +"d8872aeb": "unqueuedUnauctionedDebt()", +"d8873666": "_decode_sol_bytes15(uint256,bytes)", +"d8876471": "batchTransfers(address,address[],uint256[])", "d8879dd8": "isValidString(string,string,uint256)", "d8879fdc": "deleteBio(bytes3)", "d887ac35": "mUpgradeCostFactor()", +"d887b4e7": "getOrderCosts(uint256)", +"d88823c3": "meloetta()", +"d8884795": "getSavingAssetBalance()", +"d8887315": "curEpoch()", "d8887efc": "withdrawForTrexdevshop()", +"d888863b": "getUserReferrer(address,uint256,uint256)", +"d888e614": "urls(address)", "d88905fa": "sanMint(string,string)", "d8894bb5": "fraction()", +"d889984b": "AuctionRepriced(uint256,uint256,uint256,uint64,uint64)", +"d88a2d78": "_decode_sol_bytes4(uint256,bytes)", +"d88a3168": "setPairAAA(address,address,address)", +"d88a32a6": "_mintToken(address,uint256,bool)", "d88a3af9": "register(address,string,string,uint256,string,string,bytes32,address,address)", "d88ae250": "setProjectsContractAddress(address)", +"d88b06db": "init(uint256[])", "d88b0815": "numberOfCrySolObjects()", "d88b2da2": "_registerReferral(string,address)", +"d88b4830": "setPercentageRate(uint256,uint256)", "d88b8676": "addTrustedAccount(address)", "d88b9732": "BUXCOIN()", +"d88bba11": "LDO()", +"d88be3c0": "recommend(address)", "d88bfbad": "ContractDisabledBlock()", "d88c271e": "isWhitelistedUser(address)", "d88c5237": "VenusCoin()", +"d88ca2c8": "updateAndCall(address,bytes)", "d88cdbd6": "setMe(uint256)", +"d88d2000": "getDailyReward(uint256)", +"d88d734c": "withdrawTokenSnipe(address,uint256)", "d88d8b38": "registerToken(uint256,bytes,uint256)", "d88dc1c6": "winner_announced(address,uint256)", +"d88df3a2": "setRebasePeriod(uint256)", +"d88e0b00": "fow()", +"d88e3e3b": "getPath(address,address)", +"d88e6965": "_sourceChainIdLength()", "d88e92a7": "OmegaProtocol()", +"d88e9653": "make_testcase()", +"d88eb6f3": "distributeORACLE(address,uint256)", +"d88f111f": "nodeSupplyed()", +"d88ff1f4": "getAllPools()", +"d8906180": "storeArray(uint256[8])", "d8909e74": "withdrawMyDeposit(uint256)", "d8910b70": "getTransferProxy(uint32,int256)", "d89135cd": "totalBurned()", "d8915fc5": "DCAssetBackend(bytes32,bytes32)", "d8916bb9": "etherToWei(uint256)", +"d891e08e": "setCoreParamAddress(bytes32,address)", +"d8924530": "withdrawRefEvent(address,uint256)", +"d8927c1a": "balance_()", +"d8927e25": "toggleVestedSwap()", +"d8931689": "getUnderlingAddress(address)", "d89397b1": "btcsBuyRecipient(address)", "d893b9f1": "soldTokensPreSale()", "d894e937": "setSomeValue(string)", "d894f861": "costFunds()", +"d8952a49": "setContracts(address,address)", "d895530c": "getCurrentCandidateForPrize()", "d8959512": "getConnectorBalance(address)", +"d895ea52": "mint(address[2],uint256[2])", +"d8960e51": "_buyShares(uint256,uint256)", "d8966ad3": "getTombByOwner(address)", +"d8969921": "highestScorer()", +"d896c3fd": "setBFX_ETH_Reward(uint256)", +"d896cadc": "getGapSize()", "d896dd64": "setStatus(uint256,uint8)", "d89739b1": "Marketplace(address)", "d897833e": "setSaleStatus(bool)", +"d89784fc": "guardianStorage()", +"d897fe12": "addVault(address,bool)", +"d8984a73": "getTour()", +"d89859df": "devClaim(address,uint256)", "d898e1b9": "_depositEther()", +"d898f874": "getNyanRewards()", "d899299e": "realUnicornAddress()", +"d89961cb": "getTeamDeposit(uint256)", "d899d312": "Testimony()", "d899e112": "target3()", +"d89a4076": "payoutNoReviewer(bytes32,bytes32,bytes32)", +"d89a4f81": "AuctionSettled(uint256,uint256,uint256,address,address)", +"d89a6fa6": "farmPool()", "d89ab6d3": "YouCollectCoins()", "d89b465c": "getUnitAttackIncreases(address,address,uint256)", "d89b8057": "setOscar(address)", "d89b908d": "checkFundingCap()", +"d89b9cd4": "updateOne(address,uint256)", +"d89bb32e": "toDouble(bytes16)", "d89bcaaa": "BATsPerEth()", +"d89bd347": "TwoAndAHalfXMultiplier(address)", +"d89be4b3": "registerbuyer(address)", +"d89c9d6e": "LogDiscountRemoved(uint256,address)", +"d89cbc8f": "mtFinance()", "d89cca38": "assignLawyer(string)", "d89d4404": "_payEther(uint256)", +"d89d52de": "gk()", "d89dc0ad": "MarketOpen(address)", +"d89e912e": "tBTC()", "d89ea0f5": "setClearingPriceComponent(address)", "d89edecf": "returnAmountPlusInterest(uint256)", "d89ef018": "addUsersWhitelistA(address[])", +"d89ef3c6": "getIsUsed(bytes32,uint8,string,string)", +"d89ef802": "totalAvailableBNBRewards(address)", +"d89ef8e3": "Check_money_launderers(address)", +"d89f17ef": "removeFromWhitelistSingle(address)", "d89f9719": "getOrderOtherArguments()", "d89fb919": "episodePurchase(uint256,address,uint256)", "d89fda34": "Fish()", +"d89fe9db": "_internalIssueSynths(address,uint256,uint256,uint256)", "d89fec58": "aboutCurrentPack()", +"d8a06f73": "vaultFactory()", "d8a0aa6c": "getPositionById(address)", +"d8a0adf9": "stcPerior_()", +"d8a0c927": "setInterestRate(uint32)", "d8a119b9": "ownerSetVisible(string,string)", "d8a140f9": "peony()", "d8a1e70a": "widthrawDev()", +"d8a1f76f": "mintSecondaryRewards(uint256)", +"d8a2339a": "updateSyrupPerBlock(uint256)", "d8a2848d": "setPaymentEscrow(address)", +"d8a33a78": "seniorDebt_()", "d8a351de": "_getDefaultPartitions(address)", +"d8a3c35b": "queue3(uint256)", "d8a3daa0": "createEntry(uint256,uint256[])", "d8a3f0bf": "getFactoryPrice()", +"d8a40f6b": "toEthPersonalSignedMessageHash(bytes)", +"d8a433fb": "exchangeCxcToEth(string)", "d8a489d9": "pauseTournament()", "d8a506f3": "thirdStageDiscountPriceOfTokenInWei()", "d8a52178": "ContractManager()", "d8a54360": "totalRemaining()", +"d8a5cc03": "getTransactionDetails()", "d8a5cca1": "Finalised(address,uint256)", "d8a6021c": "transferTreasury(address)", +"d8a6c685": "setUser(uint8,uint8,uint256,uint256)", "d8a7233e": "addBook(string,string)", "d8a74c7c": "getGamblingPartySummarizeInfo(uint256)", "d8a74f3b": "ThrowError()", "d8a79d87": "wolf3Balance()", +"d8a7be06": "changeMintingRecipientProxy(address,address)", +"d8a8033b": "TransferAllFundsOut(address,uint256)", "d8a865f6": "getElementAt(uint256)", +"d8a8da95": "accesss(uint256)", "d8a8e03a": "move(uint256,address)", +"d8a94239": "OpeningTimestamp()", +"d8a95977": "test_DSProxyExecuteFailMethod()", +"d8a970da": "_calculateNonVestedTokens(uint256,uint256,uint256,uint256,uint256)", "d8a9e45e": "getProductContractUser(address)", +"d8aa109e": "updateImplAddress()", "d8aa9f85": "totalForOutcome(uint8)", +"d8aaf059": "addETHForLiquidity()", "d8ab8274": "getStates()", "d8ab9208": "addressByIndex(uint256)", "d8aba1c6": "partFees()", +"d8abdb1b": "orderItemsBuyer(uint256)", +"d8ac0fb0": "maxPurchasableETHForPresale()", "d8ac1bb3": "buyTokensReferral(address,string)", "d8ac26c0": "ForksTestContract()", "d8ac289f": "frozenWallet4y()", "d8ac5b4e": "tokensPerCents_gte5kUsd()", +"d8ac6774": "StakingPaidGetAt(address,uint256)", "d8ad1c5c": "getCapAmount()", +"d8ad1eed": "setMinimumCollateralRatio(uint256)", +"d8ad6840": "claimUserReward()", "d8ae6139": "WavesPay()", +"d8ae6faf": "addKPRCredit(address,uint256)", +"d8aed145": "repay(uint256,uint256)", "d8aeedf5": "freezingBalanceOf(address)", +"d8afaf39": "changeTransferFee(uint8)", "d8afc2fe": "getAdminVariables()", "d8afd392": "advisorySupply()", +"d8afe9e9": "MoondayToken()", "d8b0403a": "Bithemoth(address,address)", +"d8b07383": "m_Trading_Charge_Lib()", "d8b0b499": "country()", +"d8b0f965": "TimeLockCustomChange(string,uint256)", "d8b11d54": "AddItemExtra(uint32,uint16,uint256,uint16,uint16,string,address)", "d8b120c1": "getMeshPointByName(int256,string)", +"d8b14d2a": "totalRewardAmt()", +"d8b153af": "_blockedBalances(address)", "d8b163d0": "eventsAdmin()", +"d8b194a7": "supplyOnAllChains(uint256)", +"d8b1f90c": "equalIntFailTest()", +"d8b20b1e": "getGroupsContributedTo(address)", +"d8b2114e": "kycVerdict(address,bool)", +"d8b2532a": "complete(address,string)", "d8b29324": "unlockAmount(string,uint8)", +"d8b29bc1": "_tokenToEth(address,uint256,uint256)", +"d8b2b658": "claimTokens(uint16,uint8,uint256,bytes)", +"d8b31c77": "setFaucet(address)", "d8b3315f": "public_withdraw(uint256)", +"d8b37014": "LogTaxTransfer(address,address,uint256)", +"d8b3829a": "futuresAssets(bytes32)", "d8b3a2eb": "isOdd(uint256)", "d8b3ad77": "setDateTimeLib(address)", "d8b3d69a": "getVendorApplicationScoringTrack(string,uint256)", "d8b3e417": "USD20TestToken()", +"d8b41647": "wearablesCount()", +"d8b45f9f": "castVoteInternal(address,uint256,uint8)", "d8b4e580": "uploadBalances(address[],uint256[])", "d8b50a63": "addAction(string,uint256)", +"d8b560e2": "_decode_key(uint256,bytes)", +"d8b5bb00": "liqAdded()", "d8b5cf43": "beneficiary_modify(address)", +"d8b5d833": "getBalanceInOf(address)", +"d8b60532": "calcLength(uint256[])", +"d8b61a77": "generationSeasonController(uint256)", +"d8b63eb9": "tradeEthVsDAI(uint256,bool,uint256)", "d8b66ae1": "sendTokens(address[],uint256[])", +"d8b6e79a": "withDraw(uint256,uint256)", +"d8b70c11": "getAccountRewardsFor(uint256,address)", +"d8b729e3": "sellERCIforERC20tokens(uint256)", +"d8b736fe": "custodian20(address)", +"d8b7622a": "tokenIdToRecIndex(uint256)", +"d8b765e2": "getAmountRequired(uint256,address[2])", +"d8b77346": "_devCanEat()", "d8b79543": "FxxkToken()", +"d8b83e85": "isWithdrawalEth(bool)", "d8b86753": "getOrderCount(address)", +"d8b95188": "isBottlenecked()", "d8b964e6": "approved(address)", "d8b98118": "CRLperEther()", "d8b98fca": "AirDrop(address)", "d8b9a2a0": "addContract(address,address,uint256)", "d8b9a7e8": "CLC(uint256,string,string)", +"d8ba3637": "escapeBlockUpperBound()", +"d8ba65c3": "migrateLPtoAvalanche()", "d8ba6de2": "Endorsements()", +"d8ba83d5": "addFund(uint256,uint256)", "d8ba8ce3": "setNextDiscountTTMTokenId6(uint64)", "d8baa905": "getAreaEvaluation(address,uint256,address)", +"d8baadcb": "setNewSmartFundERC20Factory(address)", "d8bad5bd": "userLoans(address,uint256)", +"d8bad99a": "buybackInterval()", +"d8baf7cf": "removeMaintainer(address)", +"d8bb0369": "setwithdrawfee(address[],uint120[])", +"d8bb1222": "getGetMinMiddle64()", "d8bbae03": "getTransferValueFor(address)", +"d8bbe8cf": "setOtherOperator(address,uint8)", +"d8bc2263": "batchDecreaseAllowance(address[],uint256[])", "d8bd4761": "createCurrency(string,string,uint8,uint256)", +"d8bddcb2": "TeamReleased(uint256)", +"d8be16da": "notPublic()", "d8be2838": "unSuspend(address)", "d8be30fc": "getUserMessage(address)", +"d8be782a": "ChangeAddressHeroTime(uint32,uint256)", "d8bea898": "addReferredInvestor(string,address)", "d8bf0568": "level1Bonus()", "d8bf0ef8": "finishBurning()", "d8bf1773": "calculatePoohBuySimple(uint256)", "d8bf63b7": "START_BLOCK_NUMBER()", +"d8bff5a5": "votes(address)", "d8c02572": "Gallery_MuYi_No2()", +"d8c03be9": "receiverAddresses(uint256)", +"d8c05789": "updateCoupons(uint256,uint256)", +"d8c062e1": "Vesting(address,uint256)", +"d8c0b5ee": "calculateTokenABonusFee(address)", +"d8c136a0": "getPlyFreeGftInfo(address)", "d8c1c3c2": "getNumberOfTx(uint256)", +"d8c1cdce": "depositWithPermit(uint256,uint256,bool,uint8,bytes32,bytes32,address,uint256)", "d8c1fad1": "StakeIt()", +"d8c1fad5": "expectedTokensFromERC20(address,uint256)", +"d8c233d2": "fstCentral()", +"d8c24541": "getBalanceOfOwner()", "d8c251b5": "isNotRegistered(address)", "d8c26129": "foundationWithdraw()", "d8c2c1c1": "getcoeffcient(address,uint256)", "d8c2c878": "PlexCoin(uint256,string,uint8,string)", +"d8c2d84c": "INT_UNIT()", "d8c30700": "getCurrentCap()", "d8c34127": "isKnownSignature(string)", "d8c35273": "getHumanNumber()", +"d8c37669": "removeFromDebtRegister(bytes4,uint256)", "d8c37ecd": "calculateMarketPixelPrice(address[16],uint256)", "d8c3c1ed": "finalizeIto(uint256,uint256,uint256)", "d8c42e42": "doublePrice(uint256)", "d8c4661c": "getNID()", "d8c4c34e": "KaraOmToken()", "d8c4cd7d": "saveStudent(uint256,string,string,address,address)", +"d8c5181d": "settlementFragment(uint256)", +"d8c55af7": "conditionIds(uint256)", +"d8c55bb7": "AccountFrozen(address,uint256)", "d8c57892": "getDecision(bytes32)", +"d8c59377": "deployMoni()", "d8c5c6f8": "disapproveInternal()", +"d8c633f2": "_pause(uint256)", "d8c65cbb": "_setEyesValue4(uint256)", +"d8c67819": "pTokenRedeemForUser(address,uint256,address,string,uint256,uint8,bytes32,bytes32,uint256)", "d8c681a7": "BaoFengChengCoin(uint256,string,string)", "d8c6bd6f": "checkMine(uint256)", +"d8c73360": "getSingleOrder(bytes32)", +"d8c75e48": "hasStartingSnails(address)", +"d8c89aff": "addToWhitelistMassive(address[])", +"d8c8d19e": "updateECPVCLockdownState(bool)", "d8c90762": "addTrustedIssuer(address,string)", "d8c929a8": "getCurrentRoundRewards()", "d8c9334b": "TextChanged(bytes32,string,string)", "d8c94cd5": "_addToken(address,uint256)", +"d8c9538b": "excludeAccount(address,bool)", "d8c97f34": "transferFromVest(uint256)", "d8ca713a": "getStringMember()", +"d8ca7cfe": "LockedTokensTransferred(address,uint256,uint256)", "d8ca8a55": "distributeIQTTokenBatch(uint256)", "d8cb2d4a": "STOCoin()", "d8cb4aa3": "bonus(address)", @@ -124193,208 +227269,404 @@ "d8cbce53": "calculateDividendsFor(address)", "d8cc3c5e": "get_milestone_information(uint256,address)", "d8ccd0f3": "free(uint256)", +"d8cced2a": "isAnchor(address)", "d8cdac0d": "window0StartTime()", +"d8cea0ec": "Started()", +"d8cea9e3": "transferACryptograph(address,address,address,uint256)", +"d8cec0f2": "AllocatenonCSTokens(address,uint256)", "d8cecc7b": "MdedicalChainCoin()", +"d8cf24fd": "getLastPrice()", "d8cf9184": "getServerCreationFee()", +"d8cfbd2f": "getSecondsLeftForCycleToEnd(uint256)", "d8cfd15a": "LogB(bytes32)", "d8cff716": "NBAT101(address,address,address,address,address)", "d8d07637": "poll(uint32)", "d8d0819f": "CoinVilla()", +"d8d11f78": "getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)", "d8d1d507": "whiteListContracts(address)", "d8d1efea": "releaseTimeSecond()", +"d8d2317c": "setStats(address)", +"d8d28a4f": "changeRealeseTime(uint256)", +"d8d2dc88": "joinPool(address,uint256)", "d8d34c89": "ManualTransfer(address,uint256)", "d8d3b1a4": "TIER1()", +"d8d3ed93": "getTop3Team()", "d8d40cee": "gameNumber()", +"d8d40d59": "_hasBeenInitialized()", +"d8d41a64": "setExitPositionOnly(bool)", +"d8d42d32": "_theBiggestDick()", "d8d45d13": "setShipping(string)", "d8d4a75e": "AUD_Omnidollar()", "d8d4ec02": "checkVesting(address)", +"d8d54d72": "setAddressTokenType(address,uint8)", "d8d5740c": "XMLYToken()", "d8d5a200": "payBountyManager()", +"d8d5fc87": "isKeyValid(string)", +"d8d618fa": "lockedPrivatorForBaseSupply()", +"d8d724cc": "angelTierTokenId()", "d8d736c5": "_makeDepositForPeriod(bytes32,uint256,uint256)", +"d8d75d98": "changeMonsterName(string,uint256)", "d8d777f2": "_attack(uint32,uint8,uint64)", +"d8d787f9": "setDeflationBaseRate(uint256)", +"d8d79700": "makePayment()", +"d8d7c90f": "getMaxTrust(address)", +"d8d81a5c": "CHAI_TOKEN_ADDRESS()", "d8d8e2f2": "test_23_assertGasUsage200Boards()", +"d8d8f69b": "setGovernanceRewardsAddress(address)", +"d8d8fa1e": "ACTION_EDIT_ADMIN()", "d8d9159d": "pr0coinAddress()", +"d8d928b0": "LogAddToken(address,string,string,uint8,bytes,bytes)", +"d8d96610": "queryAgentPledgeRecordDetailByIndex(address,uint8)", "d8da3bc0": "getCurrentPotSize()", +"d8da5ce9": "addToMelters(address)", +"d8da64f3": "mintViaCToken(uint256)", "d8da708f": "preico_enddate()", +"d8da8131": "stash()", +"d8db39d7": "bAlpha()", "d8db583f": "getFreelancerSkills(address,address)", "d8dbb475": "JSONpath_string(string,string)", "d8dbb712": "OfferCancel_internal(uint8,bool)", "d8dbe4c9": "setContractManager(address)", +"d8dca092": "smonkPerBlock()", +"d8dcb93f": "uniswapAll()", "d8dd2b79": "emitTransferFeeRateUpdated(uint256)", +"d8dd97fb": "setTransactionSeen(bytes32)", +"d8de4550": "OnIsChargingTokenTransferFeeUpdated(bool,bool)", "d8de5a41": "splTransferFrom(address,address,uint256,uint256,uint256)", +"d8de6587": "control()", +"d8de899d": "getBytes(string)", +"d8def2a5": "getRewardsByGroup(uint256)", +"d8df33ba": "setPrice6(uint64)", "d8df44fd": "maxTimeBonus()", "d8df5dc1": "lockAmount()", "d8df9aad": "setDayWithdrawCount(uint256)", +"d8dfba93": "setKpopArenaContractAddress(address)", +"d8dfeb45": "collateral()", "d8e09dac": "setTrustee(address,bool)", +"d8e0fa37": "FeeAccountChanged(address)", +"d8e136e2": "userlist(uint256)", +"d8e159f8": "getWithdrawalFee()", "d8e1b9ba": "explore2(uint256,address,bool)", "d8e20e2c": "brickPrice()", "d8e223b5": "issueMedal(address)", +"d8e25da1": "getApiCallDetails(bytes32)", "d8e2e392": "admin_set_isRequireData(bool)", "d8e30740": "ETH_RECEIVED_CAP()", +"d8e3784c": "getCurrentSlot()", "d8e3c1c8": "buyPlatinum(uint256,uint256,uint8,bytes32,bytes32)", "d8e3c33f": "gridToIndex(uint256,uint256)", "d8e476ab": "icoPhaseDiscountPercentage2()", +"d8e49f7f": "updateWhaleClubStat()", "d8e4ab0d": "isOmegaContract()", "d8e4f9d9": "teamTwo()", +"d8e501d2": "subsidyPoolProtocolTokenBalance()", "d8e5ae6a": "Etheramid()", "d8e5c048": "scheduleCall(address,uint256,uint256)", "d8e5c797": "concat(string,string,string,string)", "d8e5e64e": "getAsAddressOrZero(bytes32)", "d8e60616": "OFNOG()", +"d8e690cf": "priceMainCumulativeLast(uint256)", +"d8e6afcd": "distributionCycle()", "d8e6b249": "findPossibleDelegatorsOf(address)", "d8e71b35": "ico3receivedTotal()", "d8e74ed7": "monsterStrength()", +"d8e75f62": "founders(uint256)", +"d8e773a2": "whiteListedAddresses(address)", "d8e86854": "setPrices(uint256,uint256,uint256,uint256)", "d8e8752a": "resetUsedToday(uint8,uint8)", +"d8e8a490": "setHXYFExchange(address)", "d8e8b177": "interestOf(address)", +"d8e94ea9": "_setMintAllowed(bool)", "d8e9602b": "tierCap(uint256)", "d8e963b3": "PRE_ICO_END_TIME()", "d8e97a56": "averageTimestamp()", +"d8e9b2e0": "setBalancerPoolAddress(address)", +"d8ea6b08": "closeEmergencyPause(uint256)", +"d8ea81d2": "hasValidTicket()", +"d8eaa36d": "buyWithEth(address)", +"d8eb3075": "getInterestModelAddr()", "d8eb3a98": "withdrawAuctionBalance()", "d8eb6af3": "redeemEthers(address,uint256)", +"d8eb6cf7": "updateSession(address,int256,string)", +"d8eb8cec": "ENCOREETHLPBurnAddress()", "d8ebfe5a": "interaddmoney(address,uint256,uint256)", "d8ec55ed": "meh()", "d8ec696f": "__address1__()", +"d8ecb11b": "emitStringPair()", +"d8ed3d6a": "newPir()", +"d8eda0b2": "bzbSupply()", "d8edbd79": "ZTToken()", +"d8edeb1b": "dailyCheckin()", "d8ee2ff4": "_buys(uint256,uint256)", +"d8ee4b51": "PynthsByKey(bytes32)", "d8ee796f": "founderAllocatedTime()", "d8eea572": "getMinInt64()", +"d8eeb7c1": "EXCHANGE_FOR_ADDRESS()", "d8eebd8d": "spentBalance()", +"d8eeccc3": "updateRiver(uint256)", "d8eef28b": "ordersFor(uint256,uint256)", +"d8ef147a": "blockDifficulty()", +"d8ef4f44": "borrowToInvest(uint256)", "d8f012c6": "StatelessFactory(string,string,string)", "d8f06b52": "closeAfterWhitelisted(address)", +"d8f0a7b3": "clearOKS()", "d8f0b9c4": "amountToBeneficiary()", "d8f0c358": "getSetupParametersCount()", +"d8f10bae": "queue1CurrentUser()", +"d8f14f2b": "cvp()", "d8f163ab": "totalTokensDistributed()", "d8f248b8": "getForge(uint256)", +"d8f28709": "myTotalClaimableReferralBonus()", +"d8f28cf1": "processSAFE(bytes32,address)", "d8f2cd12": "onceSetOwners()", "d8f2f09f": "china()", "d8f306a1": "setAvailableToken(uint256)", "d8f342be": "getBTCETH(uint256)", +"d8f36705": "bakeryRouter()", "d8f3790f": "ethBalance(address)", "d8f42fca": "SzeToken(address,address)", "d8f45fdb": "LICToken()", +"d8f4dfbd": "stakeRewardFeeRate()", +"d8f4e0eb": "defaultFeeVote(uint256)", +"d8f54138": "couponPremium(uint256)", +"d8f55b54": "dectivateVoteEvent(uint256)", "d8f5d098": "privateUnlock(address)", +"d8f5e6c9": "cancelPaymentGlobally(uint256)", +"d8f6435f": "SetpriceCalculation(uint256,uint256,uint256,uint256,uint256)", "d8f6d596": "getSale(uint256)", "d8f6dcf2": "getTaskById(bytes32)", "d8f71809": "MAX_COMMISION()", +"d8f8a4f6": "_decode_sol_int(uint256,bytes)", "d8f9659b": "withdrawnTokens(address[],address)", "d8f9d144": "changeOwner(string,address)", "d8f9e51b": "EkoBeerCoin()", "d8fa191b": "setProviderDetailFields(uint256,bool,bool,uint256)", "d8faefc9": "fixDistribution(uint8,uint256)", +"d8fb9337": "totalLocked(address)", "d8fbbf31": "removeContractFromWhiteList(address,uint256)", +"d8fbd5a0": "setAmt(uint256)", "d8fbe994": "transferFromAndCall(address,address,uint256)", "d8fbff9f": "createDroneFromVault()", +"d8fc063d": "withdrawUSDC()", +"d8fc7893": "operatorBurnDenominatedInDai(address,uint256,bytes,bytes)", +"d8fca1ac": "curveSwap()", "d8fce0d4": "pinchVillain(uint256,uint256)", "d8fcfd6b": "convertRealTo256(int128)", +"d8fd1a0b": "setTokenPrice(address,address,uint256,uint256)", "d8fd1ed9": "creatorReward()", "d8fd2043": "getSkullyById(uint256)", +"d8fd419f": "harvest_interval()", "d8fd7ae3": "subtractAllowed(address,address,uint256)", +"d8fde871": "validatePlotLatLng(uint256,uint256)", +"d8fdf9e5": "swapEthToDepositToken(bool,uint256,uint16)", +"d8fe022a": "clearFrom(address)", "d8fe1558": "BaseICOTokenWithBonus(uint256)", "d8fe511f": "tithes()", +"d8fe549a": "getUnlockedPercentages(uint256)", "d8fed39e": "tokenSoftcap()", +"d900175f": "marketplace(uint256)", "d90025d1": "DIVIDEND_FUND_FRAC_TOP()", "d900a6ae": "hgtSold()", +"d900d676": "find(address,uint256,uint256,address)", "d901402b": "getCommitHash(address,uint256)", "d9019530": "request(address,uint32)", "d901b98c": "test_1_generationAcrossBlocks_increaseBlocksBy100()", +"d901c144": "_addAuthorizedAddress(address)", +"d902442b": "calcGroup(uint256)", "d902ac2e": "insert_data()", "d9037441": "setEthFundDeposit(address)", "d9037522": "removeVoter(address,string)", +"d903a822": "NewMultitoken(address)", "d903c5ae": "minimumTDEContributionInWei()", +"d903dfed": "setReferal(address)", "d904094e": "ownerCancelArmyMarketplace(uint256)", +"d9046b97": "updatePlan(address[],uint256[])", +"d904c732": "versionHub()", "d9057007": "supportsInterface(address,bytes4)", +"d905af55": "TYPE_NF_BIT()", +"d90635e9": "test7(address)", +"d9067bf8": "totalRewardMinted()", "d9067fbd": "initCongress(address)", +"d9068d37": "approve_334(address,uint256)", +"d906be6e": "rejectWorkResults(uint256)", +"d906ce85": "latlonDecimal()", "d9076129": "secondBonusPercent()", +"d907813c": "toggleDeposits()", "d907e02e": "_cancelBet(uint256)", "d9082962": "totalRefunded()", +"d9084ea1": "userList(uint32)", "d9089b11": "_processDividends(uint256)", "d9099f67": "endPreICOStage3()", +"d909a232": "updateTokenDetails(uint256,string)", +"d909aa53": "incrementOvmContractNonce(address)", +"d909b403": "ok()", "d90a28c0": "fullProfit()", +"d90a3437": "NEWFEE()", +"d90a452c": "notifyRewardStart(uint256)", +"d90a730e": "underlyingSymbol()", +"d90a77a0": "getNumberSwaps()", "d90a8224": "getNumberOfSuccessfulDeals()", "d90a88cd": "getContentReplies(uint256,uint256)", "d90b02aa": "left80(uint256)", "d90b4958": "completeProject(bytes32)", +"d90ba24d": "setParams(address,address,address,uint256,uint256,uint256,address)", +"d90bf71a": "init(address,address,address,address,address,uint256,address,uint256,uint256,uint256)", "d90c1759": "dayFor(uint256)", "d90c2861": "Albertheijn()", +"d90c2afa": "TMTG_RoleTransferred(uint8,address,address)", +"d90cda29": "freeaddress1()", +"d90cde1f": "printLetters()", "d90cdfb4": "getCanvasInfo(uint32)", +"d90d253a": "Invest(address,uint256)", +"d90d3317": "setCpPoolInfo(address,uint256,address,address)", "d90d5b58": "copyright(address)", +"d90d6962": "OperatorRoleTransferred(address,address)", "d90d870b": "adminSetPercent(uint256)", +"d90f64cc": "packagePrice(uint8)", "d9106264": "clearAuth(string)", "d910c805": "MAX_POWERBALL_NUMBER()", "d9114476": "addAudit(bytes32,uint256,bytes32)", +"d912905f": "SetRefFeeRatio(uint256)", "d912d248": "transfertOwnership(address)", "d912ebb2": "tokensIssuedIco()", +"d912f506": "mintCollection(string,address,uint256,uint256,string,uint256[],uint256[])", "d9134c46": "isGlobalConstraintRegistered(int256,address,int256,address)", "d9135493": "AdPotato()", +"d9139f63": "zapOut(address,uint256)", "d913dea2": "UsdRateSet(uint256)", +"d91443b7": "withdrawAndMint(uint256,uint256,bytes)", "d9144448": "upgradeProposal(address,address,address,uint256)", "d9144712": "numberClaimToken()", "d914cd4b": "addPool(address)", "d915562b": "isControlled()", "d9159f60": "sealedBy()", "d915cdbd": "investBalances(address)", +"d9169487": "CANCEL_AUTHORIZATION_TYPEHASH()", "d916d8fd": "getPlayersCountByGame(uint256)", "d916ec32": "getEmissionProviders()", +"d9174b75": "_fakePowInternal(uint256,uint256,uint256,uint256)", "d917863e": "addExchangeTestAccounts(address,address)", "d9178993": "maxPeriodDuration()", "d917deb5": "Donate()", +"d9180a00": "supportedRewardTokens()", +"d9181cd3": "deploy(address,address,address)", "d91921ed": "addBalance(uint256)", "d9194d2c": "toggleTransferable(bool)", "d9194fcb": "setCEO(address,bytes)", +"d9199433": "NameFinalized(address,bytes32)", +"d919ac64": "ro()", +"d91a35b9": "disableDevMode()", +"d91a716a": "pledgeOrder(uint256,uint256,bytes)", "d91aee02": "getTotalGamesParticipated()", +"d91b0cf5": "setPoolFarmId(uint256)", +"d91b99e8": "MATH_PRECISION()", +"d91bd1b0": "transferTokenProportion(address,bytes,address,uint256,uint256)", +"d91c070c": "makeBuyPrice(uint256,uint256)", +"d91c4143": "coffer_value(address)", +"d91c6f43": "setAccountLockType3(address,uint8)", "d91c98d3": "startingBlock()", "d91ca13e": "EquinoxCoin()", +"d91cb268": "getWithdrawParams(uint256)", "d91d81c6": "preIcoEndAt()", "d91dc952": "timeLock(address,uint256)", +"d91e0ddc": "getCanWithdrawTime(address)", "d91e1c63": "totalGambles()", "d91e24c2": "TIMEToken(address,uint256)", +"d91ed42c": "LAST_TX_SHORTERM_BURN_COUNTER(address)", +"d91efc3b": "ethToToken(address,uint256)", "d91f3f33": "BookERC20EthV1Dec()", "d91f68a2": "currentMessageNumber()", +"d920ba17": "YfsiRewards(uint256,address)", +"d9210be5": "registerRequestType(string,string)", "d92126fc": "NewFees(uint256,uint256,uint256)", "d9214848": "CONFIGURE(bytes32,bytes32)", "d921eb78": "isRefund()", +"d921f952": "ZapIn(address,address,uint256,address,bytes32,address,uint256)", +"d9220171": "redeemAllUnlocked()", +"d9222996": "INX_DeleteInvestor(address)", +"d9225408": "BETH()", "d9226ced": "_setMaxAssets(uint256)", "d922aa30": "core(uint256,address,uint256)", "d922b6ab": "stage_1_tokens_scaled()", "d922cd12": "InsightChainToken()", "d922d5c8": "TimeLockedController(address)", "d922f603": "Purpose()", +"d9233624": "TestClaimSig(address,address,address,address,uint256,uint256,uint256,bytes)", +"d9239724": "accountVersion(address,uint256)", "d923a0be": "setLoyaltyWallet(address)", "d923c99e": "getRecordByRow(uint256)", +"d9242875": "twap_counter()", "d9244bf9": "maximumHodlDuration()", "d9246bec": "activateICO(uint256)", +"d9249bff": "pushRedeemedStakeCommissions(address,uint256,uint256)", "d9249e7e": "PuppiesCore()", "d924c660": "shift_right(uint32,uint32)", +"d924d98b": "buyerHasTheUSDC(address,uint256)", +"d924df19": "nutsToken()", +"d924f0c3": "setBancorX(address)", +"d9250da4": "fulfill(bytes32,bytes32,address)", +"d925a56d": "GREEDY_TOKENS_BLOOM_FILTER()", +"d925c76e": "keepUNI()", +"d925ef2c": "valueFounder()", "d9269cb4": "at_permille(uint256)", +"d926de1c": "addAmm(address)", +"d92753f2": "emergencyExit(address,address,uint128,uint112)", "d92782ac": "sumICOStage5()", "d927b5ad": "addDistributionPeriod()", +"d927b5ee": "farmingParticipants(address)", +"d927e1f5": "getPlayerProfitInMatch(uint256)", +"d92832e8": "init(address,address,address,address,address,uint256,address)", "d928a3d8": "_getSchellingRoundSupply()", "d928e32e": "ERC20Basic(string,string,uint8,uint256)", +"d9290e48": "storeText(string)", +"d9292e7e": "setNerdLPAddresses(address[])", +"d9296df2": "changeConfigGovernor(address)", "d9296e45": "totalWeiFunded()", +"d92a6cf6": "removeKYCAdmin(address)", +"d92af3b2": "arcFee()", +"d92bda9d": "onDisputableChallenged(uint256,uint256,address)", +"d92bf913": "default_call(bytes)", "d92c4f7c": "AirContactToken(uint256,string,uint8,string)", +"d92c848f": "setAnnualPrecent(uint256)", "d92ca5b4": "tokensTeam()", "d92cb5b0": "WinRound(address)", +"d92cc500": "abondPaid()", +"d92d1ebf": "redeemMultiple(uint256,uint256)", +"d92d2ff9": "get_SaleStart()", "d92d5bb3": "ADSToken()", +"d92d68e5": "assessorAdminFab()", "d92d7056": "option20name()", "d92da722": "processBuyRequestFiat(string,uint256,address,uint256,uint256)", "d92da8f8": "bountySupplyRemaining()", "d92dc325": "MintAndTransferToken(address,uint256,bytes32)", +"d92e82e4": "CONFIG()", "d92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", "d92ec71b": "addDeal(uint256,string,string,uint256,bytes32,string)", +"d92ec73b": "runPayout(uint64,uint64)", "d92ed48d": "rebalanceBuckets()", +"d92ee2fe": "getPeriodList()", +"d92f3d73": "setUnirouter(address)", +"d92f5999": "strategyProfitInReturnToken(uint256)", "d92fb5e9": "newClaimer()", +"d92fc67b": "tokensLength()", "d9300e30": "checkIfAllALCDistributed()", +"d930563b": "_buId()", "d9305ba7": "LOG_OwnerDeposit(uint256)", "d930a90b": "testFailMoveBalanceDueToInsufficientFunds()", "d93112e3": "totalEarlyStage()", +"d9319764": "privFixedPools(uint32)", +"d931a869": "addExitToQueue(address,address,address,uint256,bytes32,bool,uint256)", +"d931bd94": "sCount()", "d9326337": "PiaoPiaoToken()", +"d932a90a": "S4FTokenPrice()", "d932b248": "AssetISR()", "d932ed92": "MarriageCertificates()", "d933b5f2": "SLABSToken()", +"d933c066": "isSubscriptionReady(address,address,address,uint256,uint256,uint256,uint256,bytes)", "d933c1fb": "XYOracleBonus()", "d933dac7": "view26()", +"d934b3cf": "setInternalStatePayable(uint256)", +"d934c3bd": "jigoutuihuanbili()", "d9357438": "getInfoByAddr(address)", "d9359419": "payoutERC20(string)", "d935bac3": "test1Vote()", @@ -124404,57 +227676,110 @@ "d9368ba2": "getUserOptState(address,address)", "d93761fb": "transferSKM()", "d937ed44": "grantVestedEDEXContract()", +"d9383975": "groupName2index(bytes32)", "d9386789": "coreTeamMemberTwo()", "d9386c9f": "cofounderVUPDestination()", +"d9388bbf": "setMetricsByID(bytes32,string)", +"d938bf92": "from_sushiswap_to_uniswap(address,uint256,uint256,uint256,address[],address[])", +"d9393814": "unStake(address,uint256)", +"d9396e33": "setDeflationaryMultiplier(uint256)", "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)", +"d93b9f60": "count_votes(string)", +"d93be433": "agentxID_(uint256)", +"d93cca2a": "WelcomeVIP(address)", +"d93ced70": "getRegistrationDetails(bytes32)", +"d93cf52a": "rewardsConstructor(address,address)", "d93d6ad0": "isKeyHolder(address)", +"d93d7361": "balances(bytes32,address)", +"d93d8467": "CatnipV2LP()", "d93da7f0": "ROUND_5_PRESALE_BONUS()", "d93dbeff": "calculateLevel(bytes8,bytes5)", "d93debd5": "registerDappAddress(address)", "d93e5aeb": "count_next_address(address,uint256)", "d93e7573": "disown(bytes32)", +"d93ecddb": "sm_reciever(address)", "d93eeb5c": "safeTransferManyFrom(address,address,uint256[],bytes)", "d93ef85f": "Photos()", +"d93f2445": "applyVault()", +"d93f709f": "attack(bytes16)", +"d93f8a68": "addSale(uint256,uint256,uint256)", "d93fabfa": "addSeller(address)", +"d93fae75": "stakeForWei(uint256)", +"d94073b5": "UserTikenAmount(address,uint256)", "d94073d4": "PT()", "d94085cc": "FindMyFish_EnterBarcode(bytes32)", "d9409bc5": "WFCC()", +"d940a7ea": "ipfsUrlForProductId(string)", "d940c3ee": "processPayroll(address,uint256)", "d94123b8": "channel_api()", "d94178c2": "getvalue(string)", "d9417b6a": "balanceWosPoolToWosSystem()", "d9417d69": "wikiRemoveTokenFrom(address,uint256)", "d941c4ad": "prepare(bytes32)", +"d9420a86": "getUpgradability(uint256,address,string)", "d94288de": "totalFeatures()", +"d942a364": "spotifyAddress()", +"d942bffa": "transactionAmount()", "d94389bd": "__char(bytes1)", "d94395e2": "lastCitizenPaid()", "d943c8b6": "oldHolders(address)", "d9441f14": "playerMsgs(uint256)", +"d9443923": "liquidityAdded()", "d944534a": "generate(uint256,address,string)", +"d9446bd0": "setRateByID(uint16,uint32)", +"d9448b5a": "harvestVault(address,uint256,uint256,address[],uint256)", "d944c749": "ADVISOR_FOUR()", "d945799f": "removeLockFund(address)", "d94585bd": "proveAndClaim(bytes,bytes,bytes)", +"d9462719": "getCrossDomainMessageGasLimit()", "d9468475": "findRecentInterest(address)", "d946af8f": "addNodeAddress(uint256,address)", +"d946fe0b": "smartFundERC20Factory()", "d9474ad7": "unlockedProvider(address)", +"d9478b9f": "reCommented(address)", +"d9479509": "updatePoolMultiplier(address,uint8,bool)", "d9479692": "contract_name()", "d947c8d1": "transferSketch(address,uint256)", +"d947d2b2": "minimum_buy_limit()", "d947e234": "offerGuardianVend(uint256,uint256)", +"d94852e3": "pendingTokyo(uint256,address)", +"d9489aa2": "claimBurner()", "d948d468": "forward(bytes)", "d94929fe": "setTokenSaleRounds(uint256[5],uint256[5],uint256[5],uint256[5],uint256[5],uint256[5])", +"d949473f": "donationOf(address)", +"d949571a": "assToOwner(uint256)", +"d949c655": "getEstimatedBACforDAI(uint256)", +"d949cbd3": "removeMintableCurrency(address)", "d94a0a7d": "findNextwaitPairBetIDs(uint256,uint256)", +"d94a2e29": "setRewardPointsByTokens(address[],uint16[])", +"d94a3505": "getAuctionInfo()", "d94a75bc": "MELON_CONTRACT()", +"d94a862b": "getPlans()", "d94acc0a": "distributeVSN(address[],uint256)", +"d94ad837": "deviationThreshold()", +"d94ade83": "convertToBrandedTokens(uint256)", +"d94afade": "whiteListed(uint256)", +"d94b0686": "MvpLaunched(uint256)", +"d94b36a5": "showETHContract()", "d94b9843": "toContractAddr()", +"d94bb9bd": "MetadataEnergySource(uint256)", +"d94c211d": "setupAdministrator(address)", "d94c7c29": "updateTokPerLockRate(uint256)", "d94ca0f9": "approvePrimordialTokenAndCall(address,uint256,bytes)", +"d94cc0e0": "initialize(string,string,address[],address[])", +"d94cca64": "rollDice(uint256,uint256,uint256)", "d94d0316": "timeIncrease()", "d94d0787": "EthlyteToken()", +"d94d3f15": "lpTokenSharePool()", +"d94d4208": "approveSAFEModification(address)", +"d94d843a": "INNOVATOR()", +"d94e73c7": "referralCodeMappingIndexedByID(uint256)", +"d94f9ee4": "CapNhatKhoangCach(uint256,uint256,uint256)", "d94fd026": "applyPixelChange(uint256,uint256,uint256,uint256,uint256[])", "d94fe832": "idOf(address)", "d95030cb": "ticketTransfers(uint256,uint256)", @@ -124462,62 +227787,112 @@ "d950aec6": "splitWinnings(uint256)", "d950c432": "multiFreezeWithTimestamp(address[],uint256[])", "d950cc3c": "getUserCap()", +"d950f365": "setSwapsContract(address)", "d9510215": "withdraws()", "d9515238": "forward_funds(uint256)", +"d951707e": "selectHash(string)", +"d9519422": "mountInsuranceTokenRate(uint256)", "d951d39a": "tokensIssuedForBonusRangeThree()", "d951d7ec": "updateMIN_BET(uint256,uint256)", "d951e357": "bonusFourthWeek()", "d9520c9a": "allTokenOwnerOnStart()", +"d95210d0": "naasRewardPerBlockNumerator()", +"d95270f1": "rely(address,address)", "d9527fa7": "buyShares()", +"d953421b": "claimPie(address)", "d95374ce": "pendingJackpotForHouse()", +"d95393eb": "DAI_ADDR()", +"d953bb7f": "hatcheryHipster(address)", "d95402e7": "Redeem()", "d95405f2": "lockTokenDays(address,uint256,uint256)", "d95425e6": "TXwithCode(bytes32)", "d95431cd": "lookupFeaturedSprites(uint256)", +"d954863c": "deposit(bytes32,address,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()", +"d955a88c": "usdtBuySwitch(bool)", +"d955e939": "setKatManager(address)", "d955ec17": "setMiniumInputEther(uint256)", +"d9560e2c": "GameEnded(uint256,address,uint256,uint8)", "d95660be": "timeNow()", "d956634f": "claimTokensAndRefund()", +"d9573655": "start(bytes12)", "d9573c1a": "taxEth(uint256,address)", "d9575ec5": "registerNameXID(string,uint256,bool,uint8)", +"d957dd3c": "isOk()", "d95808f0": "lastBlock_f3()", "d9583497": "acceptFulfillment(uint256,uint256)", +"d95894d8": "revenues(uint256)", +"d958a8fc": "gauge_type_names(int128)", +"d958ad06": "addSacco(string,address[],address,uint256)", "d9592676": "packKey(uint8,uint128)", "d9597016": "multisetCustomGasPrice(uint256[],address[])", "d95983c3": "Destroy(address,address,uint256)", "d959868a": "total_no_of_CTD()", +"d959bd8e": "getCEthAddress()", "d959cbd2": "fMul(uint256,uint256)", +"d959d8bc": "addLiquidityInPool(uint256,uint256,uint256,uint256,address)", "d959e244": "left25(uint256)", "d95a0aa5": "setDirectMintLimit(uint256)", "d95a2d42": "lendGovernmentMoney(address)", "d95a820f": "LogStartPreICO()", "d95ab72d": "getMemberWallet(address)", "d95ace6f": "checkSigned(bytes32,uint8,bytes32,bytes32)", +"d95acf65": "future_fund()", +"d95b28bd": "getTokenReserves(address,address)", "d95b6371": "isOperatorFor(address,address)", +"d95be43a": "setVoucherKernelAddress(address)", +"d95c2730": "setRebateWallet(bytes32,address)", "d95c6092": "StartreasureToken(uint256,string,uint8,string)", +"d95c75d8": "DEFLECT()", +"d95c9b6a": "_currentPlayerAmountUnclaimedAll(address)", +"d95cc085": "claimDevReward()", +"d95cfe41": "grantGemlyMinter(address)", +"d95d218f": "addProjects(bytes32[10],bytes32[10],uint8[10],uint8[10])", +"d95d4cef": "AccessAllowed(address)", +"d95eb3d2": "AllowenceCheck(address,address)", +"d95ee7d9": "createblock(string)", "d95efb98": "genesisAddress(address)", +"d95f7473": "stakeDarkCockUni(uint256)", "d95ffc08": "myEthBalance()", +"d96027c4": "startVotingForAllowTransfer(address,uint256)", +"d9605867": "proofOfHumanity()", "d9606ca1": "WINE(uint256,string,string)", "d96073cf": "swap(uint256,uint256)", +"d9608d8a": "userGlobalInfo(address)", "d960924d": "dtAddEthBalance(address,uint256)", +"d960ab9c": "changeLeadReward(uint256)", "d960ede1": "sectionPrice(uint256)", +"d9614551": "lpOut(address,uint256)", "d96152c3": "executeRuling(uint256,uint256)", "d961de44": "domainConnector(bytes32)", +"d96249d3": "inscription()", +"d96256be": "totalGainInMainNetwork(address)", +"d9627aa4": "sellToUniswap(address[],uint256,uint256,bool)", "d9629e06": "casinoGames(uint256)", "d962a68b": "buyTokensByUSD(address,uint256)", "d962c51e": "redeemByTranche(bytes32,uint256,bytes)", "d962dd99": "setCompte_43(string)", +"d9630685": "execWithRecipient(uint72,address,bytes,uint32,address)", "d9637826": "safe_sub(uint256,uint256)", +"d9638422": "set(uint256,uint256,uint16,bool)", +"d9638d36": "ilks(bytes32)", +"d9645099": "addDatas(uint32[],uint16[],uint64[],bytes32[])", +"d964a8f2": "clearIssuanceKindsData(address)", "d964f28a": "TokenAiNetworkToken(address,address)", "d9652cb1": "startTimestampOfBonusPeriod()", +"d965b998": "STATIC_CALL_PROXY_ID()", "d965ea00": "getMemberLength()", +"d965f8f4": "productBatches(address)", "d9663f6a": "START_PREICO_TIMESTAMP()", +"d9665a5b": "DisableService(address)", +"d96661ef": "route()", "d966cfc3": "totalAllocatedToAdvisors()", +"d96709ac": "addDecision(bytes32)", "d967f752": "rentMachine(address,uint256,uint256,uint256)", "d968595f": "isValidProposal(uint256)", "d968dab1": "chipBalanceOf(address,address)", @@ -124525,39 +227900,69 @@ "d969b919": "Etherplanet()", "d969ead4": "countpro(uint256)", "d96a094a": "buy(uint256)", +"d96a1fc6": "phrase_(uint256)", "d96a22b8": "windowBonusStep1()", +"d96a4592": "enroll(address,string)", "d96a8687": "XMPToken()", +"d96ac2a6": "approve_539(address,uint256)", +"d96ad877": "approveTokensForUniswap(uint256)", "d96aee49": "MultipleConstructorTest()", +"d96b309b": "sigilsOfferedForSale(uint16)", +"d96b6d9b": "externalCaller()", "d96bcd8f": "randomTargetAssign()", +"d96be950": "Transfer(uint256,bytes32,address,address)", "d96bfbb3": "resetUser(uint256,address)", "d96c0991": "quitFromAirdrops()", "d96c26c9": "submitTransaction(address,uint256,bytes,bytes,bytes)", "d96c30a4": "checkTime(address,uint256)", "d96c550a": "_preValidatePurchase(address,uint256,uint8)", +"d96c65f7": "enlist_token_for_auction(uint256,uint256,uint256)", +"d96c7fce": "get_previous_balances()", "d96cb018": "icoCap()", "d96cc905": "toB32(uint256,uint256,bytes,address)", +"d96d6b3c": "addCollaborator(string,address)", "d96d7ea2": "PRE_EXECUTION_GAS()", "d96db2ec": "OfferToRealm(uint256,uint256)", "d96de4ce": "AdminDrawError()", "d96e1f76": "icoStatus()", +"d96e44db": "closeCurrentRound()", "d96e5565": "testThrowsRetractNotRetractable()", "d96ed505": "minGasPrice()", +"d96edc3f": "createUser(string,string,uint256,string,uint256,string,uint256,string,uint256,string,uint256)", +"d96ee754": "prepareCondition(address,bytes32,uint256)", +"d96f8dc8": "airdropForGenesisUsers(address[])", "d97036c2": "ARM1Token()", "d9703dac": "getResoMethod()", "d97049bb": "regs(uint256)", "d97095f3": "AST()", "d970c19b": "raiseCoinsSeeded(address,uint32,uint256,uint256)", +"d970e674": "BLOCK_PER_DAY()", "d9710278": "TwoFucksToken()", +"d971407c": "depositNFTAndMintTokens(uint256[])", +"d9718d87": "changeSubmissionDuration(uint256)", "d9719e56": "CROWDSALE_SHARE()", "d971da94": "priceUSDcETH()", +"d9726d2e": "setbook()", "d972bc59": "setICO_Contract(address)", "d972e8ad": "getTranche(uint256)", "d972ea3e": "dragon()", +"d9735605": "timeDiffApril()", +"d9736390": "getDoTxToStake(uint256,uint256)", "d9740383": "SAWJewelleryChain()", "d9741bd9": "PinMoToken()", +"d9748a76": "findFreeE1Sponsor(address,uint8)", +"d974ab79": "convertLPtokens()", +"d974b4e2": "getAddressMap(string)", +"d975422d": "renounceOwnershipTRUEdefault()", +"d9754f60": "updateLatestK()", "d975767b": "eLitecoin()", +"d975b467": "takeBack(uint256,uint256,uint16[],bytes32,uint8,bytes32,bytes32)", "d975f3b7": "withdr(uint256)", +"d97624aa": "maxteamMintrate()", +"d976506e": "balanceOfPending()", +"d97694a7": "getDepositBalanceByUser(string,address,address)", "d977076e": "getExtraBets()", +"d97779bd": "addArrayEntry(string)", "d9779fbe": "currentTokenSupply()", "d977a59c": "getCurrentRateByStage()", "d977b282": "getValue(address,address,uint256)", @@ -124565,61 +227970,115 @@ "d9785451": "timerMax()", "d9787517": "getTotalPossibleTokens(address)", "d978a0d3": "setFinancialOfficer(address)", +"d978b492": "claimCollectedTax()", +"d978ffba": "getProposalType(uint256)", "d9795f66": "usersNTD()", "d9797076": "CoinBroSupply()", +"d9799809": "setFarmAddress(address)", +"d979c4aa": "_stakeUpgradeProposals(uint64)", "d979e906": "getXNKPurchased()", "d979f5aa": "setHolder(address)", +"d97a4c41": "collectPlayerWinnings()", +"d97a4d97": "transferFundBFX(uint256)", "d97a9c39": "resetContent(string,address,string,string,string,uint256,uint256)", +"d97aed82": "accountRiskRatio(address)", "d97b0a6e": "Workcoin()", "d97b14f0": "sendAdvisory(address,uint256)", +"d97c05be": "resetMember(uint256,address)", "d97c5be5": "losePooling()", "d97cec3f": "transferMultiSameValue(address[],uint256)", "d97cf075": "onlyBouncerExecuteCall(address,uint256,uint256,bytes)", +"d97d191c": "getCurrentParentWtPoints()", "d97d4f52": "FOUNDERS_LOCK_DATES(uint256)", +"d97d6630": "yourName()", +"d97de126": "changeNeonPresale(address)", "d97dec19": "transferAll(address,address,uint256,address,uint256,uint256,address)", "d97e38d6": "getApprovedBuyerForIndex(address,uint256)", +"d97ebbd5": "openLockGNTGenerateDebtAndProtectSAFE(address,address,address,address,bytes32,uint256,uint256,address,address)", +"d97f2bec": "setEthCap(uint256)", +"d97f4f19": "enterMonthlyStake(uint256)", +"d97f6cb6": "firstVestingStages()", "d97fc929": "CommitSolutionHash(bytes32)", +"d98016e9": "addTRY(address,address)", "d9803cb2": "addOfficer(address)", +"d98057c8": "transferFromNative(address,uint256,bytes32)", +"d981d240": "deposists(address)", +"d9820487": "ubaseApy()", +"d9821967": "issuerSubscription(bytes32,bool)", +"d98228a2": "sponseEvt(address,uint256)", "d9823996": "withdraw(uint152,address,uint256)", "d982466d": "getPlayerAwardByRndNo(uint256,address)", +"d9828efe": "executeStake(uint256,uint256)", "d98299a0": "RedBlue()", "d9829cbc": "getRewardAndPrepareWithdraw()", "d982a84e": "citadelAddress()", +"d98380ea": "openBoxes(uint256[],uint256[],bytes32,uint8,bytes32,bytes32)", "d9844e25": "hexAddress(bytes32)", +"d98512d7": "redeemReward(string,uint256)", "d9852ca9": "nbDispute()", +"d9853763": "returnUserDepositedAllTime(address)", +"d9856c21": "addNewToken(string)", "d985f122": "RelayToolsTest()", +"d9870a70": "setSafeApprove(uint256)", +"d9870f03": "bonusAddressLength()", "d9875c93": "stageNow()", +"d9878082": "totalProjectPartyFund()", +"d987a3ac": "TransferFeesChanged(uint256,uint256,uint256)", "d988a0f9": "Payoutnextrefund()", +"d988a68c": "setGovenors4(address,bool)", +"d988da9d": "PMPAddress()", +"d989b2c5": "_transferQuoteOut(address,uint256)", "d989f5f2": "productOwners(address,uint256)", +"d98a5364": "getdiscount()", "d98a977d": "TestWorldSnapshotInternal(uint256)", "d98ae811": "transferDay(uint16,address)", "d98b094c": "communityPeriodsNumber()", "d98b2fbf": "getOverviewsCounter(uint256)", "d98b43f7": "removeOracleAddress()", "d98b9bb5": "placeBid(address,uint256)", +"d98bb5b1": "getSafetyRatio(address)", +"d98bc7c3": "servicePoolAccepted(address)", "d98bce37": "batchBurnAssets(uint256[])", +"d98beb80": "ditto()", "d98bf529": "LimitTop()", "d98c08b5": "CryptaurDepositoryTest()", "d98c1524": "getPortfolio(bytes32,address)", +"d98c4408": "calcPrice()", "d98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", +"d98d0c7e": "contractsRegistry()", +"d98d23b1": "grantBurnerRole(address)", +"d98dae46": "removeLiquidityWhenShutdown(address)", "d98de8a5": "isCrydrViewRegistered(string)", +"d98dfd10": "approve_401(address,uint256)", "d98e14bd": "STAT_COUNT()", "d98e2997": "addMiningToken(address,uint256)", +"d98e6106": "rewardPaids(address)", +"d98f2495": "maxSupplyExpansionPercent()", "d98f47fe": "recieveEscrowTransfer(address,uint256)", "d98f4ea2": "sumICOStage7USD()", "d98f6088": "blockDelay()", "d9901ce4": "DappToken(uint256)", +"d990c618": "unwhitelistBetaDelegate(address)", +"d990f8c2": "LEVEL_TWO_LIMIT()", +"d9918634": "initialize(address,address,address,address,address,address[4],uint256,uint256[3])", +"d9919801": "getUserNumOfWithdrawals(address)", "d991c58f": "mintMaster()", "d99202c5": "STCDRListing()", "d9923a16": "Account_timePayout(address)", "d992aa70": "createBounty(string,uint256[])", +"d992b87b": "CollectorshipTransferred(address,address)", "d992bd5b": "testResultNotZero()", "d9934a8c": "holdAddress4()", "d993693c": "LOTTYcoin()", +"d993de62": "getCampaignDetails(uint256)", +"d994502d": "getBoolValue(bytes32,bytes32)", "d9946793": "shareHolderBalanceOfAtTime(address,uint256)", "d9946a79": "PERSONAL_CAP()", "d9948af7": "sumICOStage1USD()", +"d994a849": "hazerAllocPoints(address)", +"d99530a6": "addERC721WrapperModel(address)", "d9964d92": "getResourceName(uint16)", +"d9965c3f": "salesEndTimeStamp()", "d9967889": "BalanceOf(address)", "d9969061": "prove(bytes32,uint256)", "d9971e92": "reject(uint64,string)", @@ -124629,220 +228088,385 @@ "d997933f": "canBreedWith(uint40,uint40)", "d997a153": "transferBatchIdempotent(address[],uint256[],bool)", "d997ccb3": "payMe()", +"d9980479": "_buildHeaderBlock(address,uint256,uint256,bytes32)", "d9987c07": "ReturnToOwner(address,uint256)", +"d998cc36": "getPoolDataList(address[],address[])", "d998d0d5": "chunkNr()", +"d9990df1": "otherPoolDividendWeight()", +"d9991df6": "investLp(uint256)", "d99929db": "getAssetIdTypeSequenceId(uint256)", +"d99947de": "availablePynthCount()", +"d9995d67": "xrmToken()", "d99969df": "DUNE_BUGGY()", "d999741e": "grantFoundationToken()", "d999b17e": "CROWDSALE_PHASE_3_START()", +"d999cbdf": "addMargin(bytes32,address,bool,uint8,bytes32,bytes32,uint64,uint256)", +"d999d53d": "uponTransferSgaToSgnHolder(address,uint256)", "d999f132": "optionDescription(uint256)", "d99a8dc3": "submit(string)", "d99a9d20": "_setTransferFeeProp(uint256)", "d99bb9f7": "removeOwnership()", +"d99bc057": "getChrismasAirdrop()", "d99c6c76": "_invest(address)", +"d99c86f8": "dividendsOwing(uint256)", +"d99d13f5": "getVault(address,uint256)", "d99d83e3": "txsPerHour(uint256)", "d99dbdbe": "changeBookState(uint256,uint256)", "d99dd314": "companyTimeLock()", +"d99e869d": "REIGAI17()", +"d99ebc43": "serviceSwitchTransferAbility(address)", "d99f8bd8": "VarnixToken()", "d99fe20d": "dexTestApprove(address,address,uint256)", "d9a0b299": "deactivateClaim()", +"d9a0c217": "mooniswapFactoryGovernance()", +"d9a1398a": "ownerWithdrawalAll()", +"d9a13c00": "lisa()", +"d9a153a1": "PurchaseMade(address,uint256,uint256)", "d9a18f6d": "totalTokensForSaleDuringICO1()", "d9a19a7a": "MMOTOKEN()", +"d9a239d4": "ctokenAmount()", +"d9a27c6e": "needAmount(address,uint256)", "d9a2a083": "TeamWalletUpdated(address,address)", +"d9a2a31b": "tokensPer3Eth()", "d9a2fff5": "airDropPercent()", +"d9a30acf": "ExchangeEvent(address,address,uint256)", +"d9a326dd": "APCurrentId(uint8)", "d9a3988d": "LogPollApproved(bytes32)", +"d9a3af65": "addWithdrawal(address,uint256)", "d9a3c199": "testSaleToken()", "d9a457fe": "endRound(address)", +"d9a465aa": "wxHOPR()", "d9a4ad8b": "shouldHadBalance(address)", "d9a4cc33": "_finalizeSale(bool)", +"d9a4cda7": "getBidStartTime(uint256)", "d9a50120": "SaniCoin()", "d9a52ab3": "getForkMigrationPercentageBonusDivisor()", "d9a569f5": "OfferPlay(address,uint8,uint8)", "d9a57382": "propertyIdToEscrow(uint256)", +"d9a59c8e": "harvestVaults(address[])", "d9a5b0a7": "testHighestTranchNotExact()", "d9a6c6db": "FactbarDeed()", "d9a6cf81": "transferableUntil()", "d9a6e2de": "VST(string,string,uint8,uint256)", +"d9a72444": "getTroveFromTroveOwnersArray(uint256)", +"d9a74be0": "emergencyStopStrategy()", "d9a7556f": "indexThreads()", +"d9a83b47": "setAutoNewlevel(bool)", +"d9a83ce9": "RemoveBNB()", +"d9a845d8": "isInitialized(uint256)", "d9a8748c": "fundAccount()", "d9a8e212": "GOLDQ()", +"d9a8faf8": "collateralLiquidationRatio(address)", "d9a96c92": "LegalToken()", "d9a96f9b": "saleManagerAddress()", "d9aa1881": "tokenDestroyed()", "d9aa5543": "newDoc(bytes32,uint256,string)", "d9ab1ec9": "smallCount()", +"d9ab2c5c": "ROOT_UPDATER_ROLE()", "d9aba9ce": "getProduct(address)", "d9abedb4": "take_fees_eth_dev()", "d9ac03a6": "getCurrentCertificateNonce(address,address)", +"d9ac31fe": "buildPrepaidToken(bytes32)", +"d9ac8ed3": "MultiSendTokenComplete()", "d9ac9a88": "getAuctionTotal()", +"d9ac9edd": "getRateStalePeriod()", +"d9ae131c": "loopringProtocol()", +"d9ae7da4": "initialize(uint256,address,address,address,address,address,address,address)", "d9aea707": "modifyCeo(address)", "d9af3691": "verifyCertificate(address,uint256)", +"d9af3da0": "m_nameToAddr(bytes32)", "d9afa38b": "payDividends(address,uint256)", +"d9afa435": "setbonusMultiplierEndBlock(uint256)", "d9b02ddf": "setGeneral(uint32,uint8,uint8,uint16,uint16,uint16,uint16,uint32[4],uint32[4],uint8)", +"d9b050a3": "liquidationPerSec()", "d9b058bd": "setOraclizeGasprice(uint256)", "d9b158b1": "angelInvestorsWallet()", +"d9b159e2": "enforceKyc()", +"d9b18ff1": "bdip02BootstrapSupplyExpansionPercent()", +"d9b195d9": "getRewardSum(address)", +"d9b1b6e0": "registerToIssuanceModule(address)", "d9b238ea": "test_insert_findWithHintNotTightBound(int256)", "d9b25a24": "proxyBuyTokens(address)", +"d9b2c611": "manageTargetContracts(address[],bool)", "d9b36043": "TJFucks()", +"d9b3d9fe": "isWorsePrice(uint8,uint256,bytes32)", "d9b4abf5": "marketplace_controller_v2()", "d9b5134c": "getTotalExchanged(address)", +"d9b54946": "addFundManager(address)", "d9b5618c": "TimeBroker()", "d9b596c7": "generateRand()", "d9b5b5ca": "exponential(uint256,uint256)", "d9b5c4a5": "nodeRegistry()", +"d9b6192e": "registerPayment(uint256,address,uint256)", "d9b627dd": "CancelledByBuyer(bytes32)", +"d9b66890": "TransferEth(address,uint256)", +"d9b69774": "gContractCheckBuyLevel()", "d9b6aec4": "allInvestments()", "d9b6b197": "tempAdvisorsTeam()", +"d9b6c8c1": "updateSwapsForLPEnabled(bool,uint256)", +"d9b6ccbf": "scdMcdMigration()", +"d9b7a6e7": "getLiquidityValue(address,address,uint256)", "d9b7d154": "applyForTask(uint256)", "d9b7d41b": "createFootballer()", +"d9b88019": "_validFee(uint32)", +"d9b8c83a": "transferTokenBack(address)", +"d9b92ef4": "godSetHousesContract(address)", +"d9b95f95": "totalCommitterBalance()", +"d9b9e787": "updateRoundLength(uint256)", "d9ba32fc": "getWhitelistStatus(address)", +"d9ba3338": "getAdaptionValues(address,uint256)", "d9ba8ea4": "finishLastRound()", +"d9bad8ca": "setValidExchange(address)", +"d9bb3f4a": "setupDAO(address,uint256,uint256)", "d9bb57c6": "removeGameManually(address,address)", "d9bb6102": "HealthCashMock()", +"d9bb7170": "calculateMintAmount(uint256,uint256)", "d9bc9873": "getCanvasPaintedPixelsCount(uint32)", "d9bcc65b": "setSeedContract(address)", "d9bccfd6": "getWarrantyPrice(address,uint256,uint256,uint256)", +"d9bcd313": "rejectSelling(address)", "d9bd0799": "clearPeriods()", "d9bd2468": "getToken(uint256,address)", "d9bdc10c": "getPlayerHasGetFree(address,address)", "d9bdd6fa": "createCDPLeveragedAllDai()", +"d9be7533": "customerDeposits(address)", "d9be976c": "GainmersTOKEN(uint256,uint256,address)", +"d9bea4d5": "setPreMineLimitFor(address,uint256)", +"d9bee0fc": "merchantWallets(string)", "d9bf3187": "setOutcome(int256,uint8,bytes32,bytes32)", +"d9bf3f0e": "readCapped()", "d9bf8238": "setWinery(address,bool)", "d9bfa73e": "orderEpoch(address,address)", +"d9bfc4ac": "disagree(string,string)", "d9c01911": "mintIdentityToken()", "d9c090a0": "updateRoleName(address,bytes32)", +"d9c09371": "_setManagerFeeNumerator(uint256)", +"d9c146de": "depositStart()", +"d9c182f9": "expansionPercentDebtPhaseReserveFund()", +"d9c18515": "Vest(address,address,uint256,uint256)", "d9c1a344": "balanceTotalOf(address)", "d9c1ac25": "transferAllERC20Token(address,uint256)", "d9c24acb": "_unlockedAmount(uint256)", "d9c263f8": "purchaseWithEth(uint256,uint256,uint256,address,bytes)", +"d9c26b85": "deposit(uint256,uint256,uint256,uint256,bytes)", +"d9c26d99": "BNB_DISTRIBUTION_TIMESTAMP()", "d9c27cc6": "setPep(address)", +"d9c282f0": "userBonusPaid(address)", "d9c3193d": "setSpaceshipPrice(uint16,uint256)", "d9c397f6": "gmtFund()", "d9c39fca": "setSilverContractAddress(address)", "d9c3d3c9": "checkReturn()", "d9c4870e": "beneficiaryAddress()", +"d9c50320": "minYesVotesThreshold()", +"d9c504a7": "setMywallet(address)", "d9c522ec": "daiRate()", "d9c52d27": "getDiscountTrancheEnd(uint8)", "d9c55ce1": "fill()", "d9c57bcc": "importExchangeSale(uint256,address,uint256)", +"d9c58d30": "getSummoning(address)", +"d9c65414": "dL()", "d9c67404": "getMerkleRoot(bytes)", "d9c682a7": "borrowerReturnFiatPerEthRate()", "d9c6925e": "AccountIsNotFrozenForReturn(address)", "d9c693cb": "emergencyLock()", +"d9c6d9d8": "REI06()", +"d9c6f876": "setAuthorityAndDelay(address,address,uint256)", "d9c7041b": "ownbalance()", "d9c76d61": "coolHero()", "d9c779ce": "_buyP3D(uint256)", "d9c7ddfa": "_updateBurnRate()", "d9c850f4": "getItemKindCount()", "d9c88e14": "ownerWithdraw(address,uint256)", +"d9c91725": "setExternalAddresses(address[])", "d9c97699": "__callback(bytes32,string,uint256)", +"d9c995f6": "betPoolAddress()", "d9ca0b7f": "transferRoutingCode(bytes32,address)", +"d9ca1c63": "updateBuyLimitRange(uint256,uint256)", +"d9ca21d5": "lastRebalanceTime()", +"d9ca9264": "cjnein8f4f(address)", "d9caa3d2": "submit(bytes32)", "d9caaada": "minPreContribution()", "d9caed12": "withdraw(address,address,uint256)", "d9cba1a1": "MulTraToken()", +"d9cbb87e": "borshchPerBlock()", +"d9cc4b7c": "isAmbassador(uint256)", "d9ccf695": "strayToken()", "d9cd6046": "BuyTicketSeed()", +"d9cd8745": "addParty(address,address,uint256,uint256,uint256)", "d9cd9273": "Arycoin(address,uint256,uint256,uint256)", "d9cd98b0": "withdrawDevFees(address)", "d9ce2451": "setLeaf2(uint256,uint256)", "d9cea519": "getDealInfo(uint32,uint64,uint64,uint64)", +"d9cef725": "__ctoken()", +"d9cf95db": "authereumProxyBytecodeHashMapping(bytes32)", "d9cfc182": "getHighestPriceAt(uint256)", "d9cff93a": "last_result(address,address)", +"d9d07fe1": "voteOnBehalfOf(address,uint256,bool)", "d9d0b091": "AddMarking(bytes32,bytes32,int256,uint256)", +"d9d0b814": "_maxClass()", "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)", +"d9d29faf": "voteTotals(uint64)", "d9d2d058": "Splitter()", "d9d34ce1": "isForkingMarketFinalized()", +"d9d36609": "attendants(address)", +"d9d3c53e": "adminWithdrawFunds(uint256,uint256)", "d9d3cc78": "seriesByName()", +"d9d3e07d": "updateSiblingMigrationTotal(address)", +"d9d4df3a": "setRejectTransferFlag(bool)", +"d9d55eac": "genesisLockRound()", "d9d578e5": "airDropSetup(address,uint32,uint256)", "d9d60b52": "getGameState(address)", "d9d61655": "getOwnedTokens(address)", "d9d61a10": "GetUserSafesLength(address)", +"d9d670da": "bnbTobusdPath(uint256)", +"d9d6bd86": "hire(address)", "d9d73887": "Diana()", "d9d770bb": "_triggerPVEStart(uint256)", +"d9d7858a": "dToken()", +"d9d7d296": "CertifyAccount(address,bool,uint256)", +"d9d803b8": "attackerPrizeByToken(bytes32,address)", +"d9d81e2e": "checkAndSlash(int256)", "d9d84531": "getRemainingKingdoms()", +"d9d85b07": "depositAbleToWithdraw(address)", "d9d8b2ee": "creationInvestmenting()", "d9d958ec": "setUint8(uint8,uint8)", +"d9d98ce4": "flashFee(address,uint256)", "d9da0142": "cancelEscrow(bytes20)", "d9da2738": "changeOfficialAddressIfNecessary(address)", +"d9da47bf": "buySeparately(address,uint256,bool)", "d9da486a": "initialEcologyAccount(uint8)", "d9da76de": "DailyMint()", +"d9da8dad": "claimedDividendsOf(address)", "d9daa497": "getStageTargetAmount(uint256)", "d9daae78": "CCH_Seaport_1()", +"d9dab0ea": "release(address,address,bytes32)", "d9dac92c": "acceptDiscipleVend(uint256)", "d9dad80d": "ownerOf(uint256,uint256)", +"d9daf4e6": "addOrUpdateCard(uint256,uint256,uint256,bytes32[],string)", "d9db1f55": "deprecate(string,string,string)", "d9db3c73": "revealVoteOnSpecialProposal(bytes32,bool,bytes32)", +"d9db4adb": "getArtistRoyalties(uint256)", +"d9db6547": "refund1ICO()", "d9db9d89": "globalSupplyAfterPercentageLogic()", "d9dbd382": "FUTX()", "d9dc7fcd": "EVM()", +"d9dc9a91": "feeAddress3()", +"d9dca6c5": "interestDate(address)", +"d9dd800d": "MSR_REDUCING_COEFFICIENT()", +"d9dd9fdd": "setCurrentUserID(uint256)", "d9ddafb3": "exchangeTransfer(address,uint256)", +"d9ddc291": "usdcTousdpInStableSwap(uint256)", "d9de1e98": "HuuumanStandardToken(uint256,string,uint8,string)", "d9def89a": "buyShitClones()", "d9df2878": "CryptoCollectorContract()", +"d9df77de": "strongFeeInWei()", +"d9df98a2": "addrCommission()", "d9e0dc59": "getLocation(address)", "d9e19a91": "setAccountValue(uint16,uint8,uint8,int64)", +"d9e2502d": "setTokenProvider(address,address,bool)", +"d9e268d3": "initialize(address,address,address,address,address,address,string,uint256,uint256,uint256,uint256)", +"d9e31351": "getPassport(uint8)", "d9e34038": "ODCToken()", "d9e39e50": "getTransferDetails(address)", +"d9e40af9": "GetPlayerExtByAddress(address)", +"d9e43f40": "createTicketedEvent(string,uint256,uint256,uint256)", +"d9e48f5c": "getEventCount()", "d9e4fa6a": "setUsdPerKEther(uint256)", "d9e50186": "setWeiMin(uint256)", +"d9e530ac": "SaleCancelled(uint256,address)", "d9e55f7a": "getAllowedToMine(address)", "d9e5a50b": "getSnakemasterReq()", +"d9e5b125": "f16(uint256)", +"d9e66553": "inCaseDAI_NEWgetsStuck()", "d9e68b44": "left100(uint256)", +"d9e6b063": "endthirdroundtime()", +"d9e6cb66": "playSingleDiceBet(uint8,uint256)", +"d9e6dae9": "MAXIMUM_BEP20_SYMBOL_LEN()", "d9e73095": "MiracleToken()", +"d9e73f3b": "RegisterAddress()", "d9e79c72": "admin_dividend(uint256)", +"d9e7b595": "safeTransferSubURI(address,address,string,string,bytes)", "d9e7c8ca": "createRace(uint256,uint256,uint256)", "d9e7ee1c": "new_game(uint256,uint256)", "d9e8843f": "payRent(uint256)", "d9e947f3": "kickOutMember(address)", "d9e95a98": "addVoter(address,string)", +"d9e9aa08": "lockTimeSeconds()", "d9e9c745": "decreaseShardBalance(address,uint256)", "d9ea1b47": "Raffle_Finished()", "d9ea372b": "myfichain()", +"d9ea7ed5": "returnIsValidSendingKey(address)", "d9ea9bfa": "createBtcAddressHex(uint256,int256,uint256,int256)", "d9eac337": "MegaWattContract()", "d9ead22b": "accountForClose(uint256)", +"d9eadb7d": "INVEST_MIN_USDT_AMOUNT()", +"d9eb2d5e": "BLOCK_GAS_LIMIT()", "d9eb547b": "extractCLNfromMarketMaker(address,uint256)", "d9eb5947": "flatFee()", +"d9eb8a44": "enterLobby()", "d9ec0508": "testThrowTransferNotEnabled()", +"d9ec2a5e": "getAmntClaimed()", "d9ec3018": "submitSpendLimit(uint256)", +"d9ec338a": "ordersBySeller(address,uint256)", +"d9ec371c": "OperatorTransferred(address)", "d9ecad7b": "breed(uint256,uint256)", "d9ece4c7": "changeMaximumContributionForPrivatePhase(uint256)", +"d9ed1a7a": "calVtpAndMCRtp()", +"d9edc139": "_getDORequestMetadata(uint256)", "d9ee369a": "withdrawDifferentToken(address,bool)", "d9ef1ee3": "insert(string,uint256)", +"d9ef1fb9": "BatchUnmount(address,uint256,address,uint256[])", +"d9ef2b40": "updateEtherUsdPrice(uint256)", "d9ef58a5": "thisAddr()", +"d9ef86b1": "ethSentToDistribute()", "d9f00023": "SBGToken()", "d9f01878": "centralMinter()", "d9f02210": "StarbaseMarketingCampaign()", "d9f0354d": "buildMilestone(uint256,uint256,uint256)", "d9f035aa": "cardList(uint256)", "d9f0cf04": "createAuctionWhenPaused(address,address,uint256,uint256,uint256,uint256)", +"d9f0dd51": "withdrawMyPoolShare()", "d9f165dc": "updateFactory(address)", "d9f1a1a9": "PublicBallot(address,string,string)", +"d9f20f36": "sell_refund_accept(uint256,uint256)", +"d9f226e9": "registerAccount()", +"d9f230c5": "systemWithDraw(uint256)", "d9f2ac8a": "decr()", +"d9f2c5b6": "swapAsset(uint256)", +"d9f2e8ce": "setAvailable(uint256)", "d9f300ce": "referedRateBonus()", +"d9f303a2": "updateAuctionEndTime(uint256,uint256)", "d9f38388": "RequirementChanged(uint256,bytes32)", +"d9f38c99": "getGlobals()", "d9f3afff": "addCurrency(string,uint8)", "d9f47e41": "totalDevelopmentFundBalance()", "d9f4ecbb": "lastProfit()", "d9f4f56e": "_ethRefund()", +"d9f5779c": "getmycardNumber()", "d9f58923": "GlobalConstraintRegistrar()", +"d9f69101": "_existsEntry(uint256)", "d9f69e4e": "addUserWhoBuy(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d9f6f5ce": "updateCountryToContinent(uint256,uint256)", "d9f754a3": "LogSetWithdrawLimit(address,uint256)", +"d9f7c723": "setOrbit(address)", "d9f7e285": "returnExcedent(uint256,address)", "d9f7eacf": "removeGains(address,uint256)", "d9f80c65": "setMinInvesment(uint256)", +"d9f81ae8": "retool(uint256,uint256)", "d9f81b83": "timeWithoutUpdate()", +"d9f82d58": "purchaseViaAddr(address)", +"d9f85fbd": "IEO()", "d9f861b1": "getFreelancerInvoices(address,uint8)", "d9f884bf": "BIONICCOIN()", "d9f8a3c3": "lastTransactionReceivedInWei()", "d9f8a4e2": "calcCurrentTokenPrice()", +"d9f9027f": "strategies()", +"d9fa1d13": "changeRoleRestrictions(bool,bool)", "d9fa1e78": "PractiParlezCrowdSale()", "d9fa8c54": "unClaimedToken(address)", "d9fa9335": "houseKeeping()", @@ -124850,83 +228474,137 @@ "d9facc80": "MerchantWallet(address,string,address)", "d9fb6963": "stateSetLocked()", "d9fb7413": "lockTimeLeft()", +"d9fc0e7f": "bonusWithdrawn()", "d9fc4b61": "safeTransferFrom(address,address,address,uint256)", "d9fc8026": "getPubKeyArr(bytes32,uint256,uint256[])", "d9fca769": "setWinner(address)", "d9fcb31f": "comm_channel()", +"d9fd7341": "orderCancelledAmounts(bytes32)", "d9fdd155": "isLegendaryPart(uint256,uint256)", "d9fe0137": "_transfer_byProxy(address,address,uint256,bytes)", +"d9fe07c9": "Released(uint256,string,address)", "d9fe1045": "MidasDiscountToken()", +"d9fe110d": "getPlayerInvterCount(address)", +"d9fe3eae": "sweepErc20(address)", "d9fe60f3": "DTHPool(address,address,uint256,string,string,string)", "d9feb8ce": "loserTwo()", "d9feeeb6": "fillMyOrder(uint256)", "d9fefb93": "getData_34()", "d9fefbf8": "addData(uint256,uint256,bytes32)", "d9fefd6c": "bountyTokenTimelock()", +"d9ff332d": "kickoffRandom()", "d9ff4ad8": "burnFrom(address,uint256,bytes)", "d9ff8e9d": "setWalletOut2(address)", "d9ff8ffc": "BetAnB()", "d9ff94b7": "setRegionPurchasedAt(uint256,uint256)", +"da0039ce": "ChangedAllowedToSell(bool)", "da00586b": "houseKeep()", "da00a1f4": "setGetFree(bool)", +"da011c25": "getHashedSignature(uint256)", +"da020a18": "user_point_history__ts(address,uint256)", "da0225db": "belongsTo(address,uint256)", "da0239a6": "remainingSupply()", "da025051": "freelancePlayer(address)", "da02b6cf": "computeWinner(address,uint256,uint256,address,uint256,uint256,uint256)", "da02f5f3": "updateIsVerified(address,bool)", +"da02fcd7": "setTestVaultAddress(address)", +"da03095c": "setCrowdsaleClosed(bool)", +"da03172e": "viewPool(address)", "da0321cd": "addresses()", +"da033ff1": "DeletedClaim(address,uint256,bool)", "da037fd1": "confirmPerfectReception()", +"da038baf": "lastPublishEndBlock()", +"da03de7c": "mockSetTermRandomness(bytes32)", "da040c0f": "purchasingAllowed()", "da04197e": "Duration(uint256)", +"da046052": "oliv()", "da04f82b": "addUserManager(address)", "da05277e": "ImpactRegistry(address)", "da05f535": "RefundCrowdsaleFactory(address)", "da062d68": "ExCToken11()", +"da06c1ff": "releasedRewards()", +"da06ccea": "LogBountyTokenMinted(address,address,uint256)", "da06d96c": "_tokensToEthereum(uint256)", "da074874": "getRemainingEthAvailable()", +"da075111": "offerStore()", "da0774ad": "getCallFeeScalar(uint256,uint256)", +"da0791fc": "getCoverArticle()", +"da07af33": "aave(address)", "da081204": "littAdmins()", "da08c5a3": "setTransferWhitelist(address)", "da09118e": "addTokenGrant(address,uint256,uint128,uint16,uint16)", +"da094dec": "onAccountMovedIn(address,address,uint256,uint256)", "da09c72c": "devAddr()", +"da0a18da": "HighestBidIncreased(uint256,address,uint256)", "da0a599e": "EjariRules()", "da0a5fe0": "TestToken(string,string,uint256)", +"da0a75c8": "getBalance(int256)", +"da0adaa8": "NewBonusAtom(address,uint256)", "da0b0682": "beginGame()", "da0b0c36": "getNumDesignatedReportNoShows()", "da0bba7b": "changeOraclizeConfig(bytes32)", "da0bba90": "sendPrize(address[],uint256[],uint64)", +"da0cb2ae": "claimTheBigCheeze(uint256)", +"da0d71b4": "updatebal(address,uint256)", "da0d76f8": "betContractDOWN()", +"da0dbc3a": "TransferFromContractAddress(address,uint256)", "da0e1451": "distributionForRefers(uint256,uint256,uint256)", +"da0ebf8e": "lastDrawnAt(address)", "da0ef68b": "ICO_END_DATE()", "da0f039d": "MaxTotalSupply()", "da0f3877": "postFreezeDevCATDestination()", "da0f57d0": "confirmWithdraw(uint256)", +"da0f90d7": "fastTrackAuction(bytes32,uint256)", "da0fab61": "BlockContract()", "da1070da": "newEscrow(address,address,bytes32)", +"da11546a": "togglePayToMakeOffer()", "da11f709": "bank1()", "da122e02": "Fishbank(address,address,address)", +"da123e70": "getEmpty3Foo()", +"da12457a": "continuousSupply()", "da128527": "finalizeUpdateState()", +"da12d96f": "updateStateOnRepay(address,address,uint256,uint256,uint256,bool)", "da12e9ef": "TokenHolder(address,uint256)", +"da12ee83": "NewOperator(address)", +"da132857": "getIncomeMineInWeiPerSec()", "da13610c": "rewarding(address)", +"da14017e": "Jellydrop(address,address[],uint256[])", +"da141074": "getMetahash(bytes32)", +"da141bd5": "applyList(address,address)", +"da1435e5": "getAmountOutUniswapProtocol(address,address,address,uint256)", "da1441cd": "KudosBank(uint256)", "da147d32": "tradeTracker()", +"da148711": "Stringvalue()", "da14c723": "setCustomBuyer(address,uint256)", "da14e3b2": "transferAndFreezeTokens(address,uint256)", +"da14e4fa": "unfreezeAmount(address)", +"da15b9bd": "revokeAttribute(address)", "da16241b": "Platopay()", +"da16be24": "MarketingTokenRedeemed(uint256,uint128,address)", "da17835f": "FermionToken()", "da178cb0": "plot()", "da17c21b": "BlockchainMoneyEngine(uint256,string,string)", +"da187d07": "VoteSuccessful(address,uint256,uint256,uint256)", "da18bcef": "getMin(uint256[])", "da1919b3": "mintFor(address,uint256)", +"da19ad89": "tripPerBlock()", +"da19c10b": "TransferToParent(address,uint256,uint256)", +"da19ddfb": "STAKING_CONTRACT()", "da1a13ce": "fitsTokensForSaleCap(uint256)", "da1aaa59": "_withdraw(address)", +"da1ab187": "rctFundDeposit()", +"da1ac3f0": "pendingWaitTimes(bytes32)", "da1ad97f": "clearHpbNodeCache()", "da1b2d9d": "comDrop(uint256,uint256,uint256,uint256)", "da1b4359": "uploadFinish()", +"da1b51a2": "thong_tin_vdv(uint256)", "da1b620b": "getTarget(string)", "da1b95a6": "DAO(address,address,bytes32,bytes32,address,address,address)", "da1bd8ab": "setupTrustedAccounts()", +"da1c075a": "owner_debug()", +"da1cd79c": "clearRewardsandResetInflation()", "da1d7711": "createHive()", +"da1deb77": "isOperatorAndAdmin(address)", "da1eb542": "ceil1(int256,int256)", "da1edb38": "shareLastTen(uint256,uint256)", "da1ee417": "MoveChain(uint256,string,uint8,string)", @@ -124934,43 +228612,76 @@ "da1f6433": "AtomUX()", "da1fe7d5": "configureDomain(string,uint256,uint256)", "da1ff555": "cliffTeamTokensRelease()", +"da201248": "lastAveragePrice()", "da2216ef": "getContractCreatedTimeById(bytes32)", "da2242b8": "createActivity(uint256,string,uint256,uint256)", +"da224c0f": "priceToOpen(uint256,uint256,uint256,uint256)", "da228f9c": "bountyTokensCreated()", +"da229641": "UniV2Address()", "da22ec07": "storing()", "da233128": "getCrowdsaleContract()", +"da235b22": "getTimeStamp()", "da23c057": "editAd(uint256,string,string,string,string,bool,bytes32,bytes2,uint8,bytes4)", "da23d18b": "updateOnSaleSupply(uint256)", +"da23fb86": "getEthBound2()", "da2424ae": "setPI_edit_22(string)", +"da24450d": "updateBallotPrice(uint256)", +"da2448cb": "blockRewards()", "da24b08c": "UsdPerKEtherUpdated(uint256,uint256)", +"da24e402": "setPuppySports(address)", +"da24f3c7": "testToken1toToken2()", +"da2506b1": "findBlankSlot(uint256,uint8,uint32,bool,uint8)", +"da250c28": "getVerifySignatureResult(bytes,uint8,bytes32,bytes32)", +"da251502": "KiToTrain()", +"da25201d": "MakeOffer(address,address,uint256)", "da257cb4": "setMinRevenue(uint256)", +"da25a7b3": "testFail_mul()", "da25c0cd": "ThisExternalAssembly()", "da25de3c": "remainingBalance()", "da262f58": "setTokenInfo(string,string)", "da26358a": "unregisterVendor()", "da26663a": "getPrice(uint32)", +"da26bff6": "createPair(uint256,address,uint8,uint256,string)", +"da26c1dd": "Top3VDVTheoCuly(uint256)", "da26c241": "approvePauseChange(bool)", "da26d0b9": "addAuction(uint256,address,uint128,uint128,uint64,uint64)", "da26ebc2": "getPayeeCount()", +"da26ec22": "depositDelegate(address)", "da26f7f6": "CIFR()", "da274488": "getMotd()", +"da275505": "forceW(uint256)", "da27ab1f": "getFreeShitClone()", "da27cb0f": "Lottery(string,uint256,uint256)", +"da27dd90": "contractCreateTime()", "da280fe5": "resetHasAutoVote()", "da284dcc": "expirationTime()", +"da2895a5": "invest(address,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "da28c81a": "updateKYClist(address[])", "da293136": "TestCrowdsaleController(uint256,address,uint256)", +"da2a4d2b": "releaseAddress()", "da2a97d8": "GetCurrentNumbers()", "da2aa615": "addRandomFight2Death(address,uint256)", "da2b2589": "GenExtWeightList(uint8)", +"da2b4c1e": "voteFee()", +"da2b65c8": "enableCollateral(address[])", "da2b7416": "testBitsAndFailIndexOOB()", +"da2b9bfa": "lpGov()", +"da2ba107": "BuyCallToClose(address,uint256,uint256,uint256,uint256)", "da2bbfc7": "setTokenURIBase(string)", +"da2bcc16": "protestEnd()", "da2c0460": "gameGiftOnceAmount()", +"da2c7b1d": "POOL_IMPL()", "da2d7b70": "userSubscriptionsLength(address)", "da2d8720": "payJackpot2()", "da2d8c88": "updateRestrictedStockSendTime(address,uint256)", +"da2da63d": "setFundDisabled(bool)", "da2dcea6": "returnTokenMulti(address[])", +"da2e35c5": "bountyPrice()", +"da2eac5c": "breedNameToID(string)", +"da2f5ca4": "WRITE_OFF_PHASE_B()", "da302fc3": "lighthouseLib()", +"da303d9d": "updateCumulative()", +"da30631d": "HEX_LAUNCH_TIME()", "da306946": "ShareDATA(string)", "da30d418": "cancelDist()", "da311588": "getCoin(uint256)", @@ -124979,15 +228690,25 @@ "da328377": "ownerSetStakeCommence(uint256)", "da333ca6": "payOut(uint256)", "da337465": "getPenguinsByOwner(address)", +"da33976a": "totalActiveIncomeOf(address)", +"da342565": "withdrawStakingAndMarketining()", +"da3436a4": "setPresaleParams(uint256,uint256,uint256,uint256)", "da34b7f3": "_transfer(uint256)", "da35762a": "getPI_edit_16()", +"da358a3c": "setData(int256)", "da359dc8": "setBytes(bytes)", "da35a26f": "initialize(uint256,address)", +"da35c664": "proposalCount()", "da35d581": "DaoHubAccount()", +"da35e091": "SendEther(address,uint256,address)", +"da36752a": "withdrawAllPossible(address)", "da3678df": "transferTokenByContract(uint256,address)", +"da36814b": "changeToyData(uint256,bytes)", "da36d217": "lockupTok(address,uint256)", +"da36e5be": "setUserUseReserveAsCollateral(address)", "da36fd03": "FundingAccepted(address,uint256,uint256)", "da374157": "changePopulous(address)", +"da379941": "getDisputeIdByDisputeHash(bytes32)", "da38abb3": "randomGen(address)", "da38daba": "getLeftCoordinate(bytes1)", "da38f805": "TaskToken()", @@ -124995,8 +228716,15 @@ "da392f06": "availableNow()", "da397985": "CBOToken()", "da3986e4": "getTAOIds(uint256,uint256)", +"da39d16a": "setExcludeReward(address,bool)", +"da3a2741": "set_pros_address(address)", +"da3a29b9": "getCitizenWallet(string)", +"da3ac460": "updateCardsData(uint256[][],uint256[][],uint256,uint256[])", "da3b6b35": "totalHashRate()", "da3c300d": "currentFee()", +"da3c843c": "Destruction(address,uint256)", +"da3ca81d": "isLPGenerationCompleted()", +"da3ca8b5": "qd()", "da3cbf96": "getShipClass(uint32)", "da3cd674": "GetDChainDOTHash(bytes32,uint8)", "da3d18e8": "PlusUltra()", @@ -125005,189 +228733,378 @@ "da3d7d7f": "reconfigure(uint256,uint256)", "da3e0fd1": "getAuctionsById(uint32[])", "da3e3397": "approveToken(address,address,uint256)", +"da3e3ef6": "totalRewardSFR()", +"da3e92bf": "_updateCashPrice()", +"da3ed419": "maxDebtRatioPercent()", +"da3f7bd1": "addCategory(string,uint256,uint256,uint256,uint256[],uint256,string,address,bytes2,uint256[])", +"da3f7eab": "sasher()", +"da3f8ade": "updateCitygovernor(uint256,address)", "da3f8c38": "Amethycoin()", "da3fb6f7": "mainSaleRateP2()", +"da3ff648": "floor(int256)", +"da401739": "maxLoans()", +"da40385d": "addMarkets(address[])", "da4077b9": "finishHim()", +"da419c57": "set(address[],address[])", "da421df5": "pageFiles(uint256,uint256)", +"da424210": "TokenDrop(address,address,uint256)", +"da424e6f": "togglePrivateTransferability()", "da42eea5": "setRedeemWallet(address)", +"da4339fb": "transferConcent(address)", +"da43eab6": "getCbondInterestRate(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "da440a1d": "wallcoinToken()", +"da444b35": "revokeVotingRight(address)", "da446958": "totalTokensCap()", "da4493f6": "activationTime()", "da44d275": "viewWinners()", +"da44d800": "alloc_idx_nonce()", "da44e034": "maximumTokensForForth()", +"da451895": "Donate(uint256,address)", "da46098c": "setAllowance(address,address,uint256)", "da465d3f": "saleSharesAvail()", +"da465d74": "set(string,string,string)", "da46a73c": "setGameOperator(address)", "da46e48e": "setGLA(uint32)", "da46e6c4": "transferFeeIncurred(uint256)", "da46eda1": "setBlockDotDifficulty(uint256)", "da46fe62": "ethereumToTokens(uint256,uint256)", +"da473b22": "setRelayHubAddress(address)", +"da4745b3": "make_profit(uint256)", "da4751c0": "setMinPrivateSaleCompanyBuy(uint256)", "da4778c2": "delayHours()", "da4793ac": "setMaxSecurityGuardDelay(uint256)", "da47d856": "getService(bytes32)", "da481ce0": "DemeterCrowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"da4890b2": "PoolPremiumLimitUpdate(uint256,uint256)", "da489997": "addAsset(address,address)", "da49613c": "ownedfunction()", +"da497078": "setStrongHandPercentile(uint256)", +"da497fe7": "_claimSatoshisSync(uint256,address,bytes20,uint8,uint256,address)", "da498084": "addTokenHolder(address)", "da499f6f": "SupportAddOn(uint256,address,uint256)", +"da49c7d9": "deleverAmtFactorMax()", "da49cdb5": "getLostTokens(address)", "da4a22dc": "MXN_Omnidollar()", +"da4a48f9": "CheckAllowance()", "da4a76c0": "becomeGameSponsor()", "da4a77aa": "isRatifier(address)", +"da4a898e": "pendingowner()", "da4a8ef6": "SettingsSet(address,uint256,uint256)", "da4b5e29": "contains()", +"da4b6672": "lastCompletedIdxs(address,bytes4)", +"da4ba30d": "changeDevRatioFromTax(uint8)", +"da4bf01b": "getPackPrice(uint8)", +"da4c83b9": "depositToBag(address,uint256)", +"da4ceafe": "SnowflakeMinted(string)", "da4d0756": "vehicleExist(address,string)", "da4d2615": "Gomblot()", +"da4da088": "set(int256,string,string,int256,int256)", +"da4dfce6": "processProposal(address,uint256)", +"da4e7605": "sendERC20ToTreasury(address)", +"da4ea95d": "transferPreSignedHashing2(address,address,uint256,uint256,uint256)", "da4f2899": "isUserInGroup(bytes32,address)", +"da4f5af8": "periodTotal()", +"da4f6528": "_moapUniswapLPContract()", +"da4fbe52": "getCore()", +"da505169": "gamesByPlayer(address,uint256)", +"da5082ca": "mamba()", "da5136b8": "setWhitelistAddress(address,address)", +"da5139ca": "toShare(address,uint256,bool)", "da5140fc": "lockTokensForAddress(address,uint256,uint256)", +"da5163cc": "openRebalance(uint256[])", +"da516aa9": "lastCall()", "da5196e0": "getmemreqdetails(uint256,uint256)", "da51bbd9": "luckyPendingIndex()", +"da51cc85": "upgradeContract(address[],uint256[],uint256[],address[],uint256)", "da51f168": "GetDayReward()", +"da525716": "childImplementation()", "da5269a6": "getListOfConsents()", +"da52d3d2": "CDAI_ADDR()", "da5341a8": "issueMaxNomins()", "da53462c": "initialize(address,address,uint256,uint256,uint256,uint256,address,address,uint256)", +"da534f06": "agreeToAcceptControllerOwnership(address,bool)", "da535758": "lockUp(address,uint256,uint256,uint256)", "da547dcf": "preIcoHardcap()", "da548e29": "priceExpirationBlockNumber()", +"da54c368": "_processAllSlashesWithoutSignals(address)", "da5520cd": "HeroNodeToken()", +"da559f72": "staleThreshold()", +"da561510": "displayBoard()", +"da562a98": "lpIn(address,uint256)", +"da5633ef": "addressMap(address)", +"da5671ad": "isValidOwner(uint64,address)", +"da5679b5": "subscription(uint256,uint256,uint256,uint256[5],bytes32[3],uint8)", +"da56ff48": "testFeeToken(address,address,address)", "da57736f": "stageThree()", +"da58c1fa": "requestSwapExactTokenForTokens(address,address,uint256,uint256,uint256)", +"da58c265": "getWrapperAddress(address)", +"da58c7d9": "voters(uint256)", +"da5917ae": "requireSynthExchangeActive(bytes32)", "da5950a4": "tokenBought(uint256,uint256)", +"da59cbf3": "canceledHashesOfFromToken(address,uint256,uint256)", +"da59cf76": "minimum_contribution()", "da5a9366": "getAppBase(bytes32)", +"da5ab5d9": "qir(address)", "da5abf5d": "payment_returned(uint256)", +"da5b166a": "checkGasPrice(uint256)", "da5b1f5c": "buy50()", +"da5b26cb": "testBurn(uint256)", +"da5b5ca8": "_imza()", +"da5b7385": "starttime(uint256)", +"da5bc0b0": "tokensSoldCrowdSale(address,uint256)", +"da5bfbf5": "changeApproval(address,uint256,bool,bytes)", "da5c0a7c": "testDisown()", +"da5c4242": "authereumFactoryAddress()", "da5c5b55": "noVotes(uint256,address)", "da5c7ec2": "WNCT()", +"da5ccfbe": "stakersCouns()", +"da5cdee6": "managerImportBalance(address,uint256)", +"da5d2fac": "games(uint32)", "da5da3b9": "initializeTokenSaleWithToken(uint256,uint256,uint256,uint256,address,address)", +"da5dabdf": "serviceSetCarrier(uint256,address)", "da5db748": "firstRelease()", "da5e4489": "resetListing(string)", +"da5e62fc": "addProduceritems(int256,string,int256,int256)", +"da5e6c90": "userWithdrawCurrentCapital()", +"da5e882b": "checkMiningETH()", "da5e9c62": "whitelistDayMaxStake(uint8)", "da5ea40c": "computeMerkle(bytes32,uint256,bytes32[])", +"da5ea426": "bonusTwoEnds()", "da5f3ac1": "GAME_END()", "da5f838d": "weisRaised()", "da5fa890": "_addManager(address)", "da60278a": "receivable(address)", +"da603318": "drawAll()", +"da6035ca": "withdrawMKRLiquityTokens()", +"da60a206": "UnlockReserveLog(uint256)", "da60d7e8": "BOARD_2()", +"da6174d0": "mintPeriodStart()", +"da620cd7": "addLiquidity(bool)", +"da6261a0": "min_unit()", +"da626c48": "blocksUntilBoogiePoolCanBeActivated()", +"da6271c3": "GlobalShareSeconds()", "da62a246": "rewardsTokenSupply()", +"da62fba9": "claimers(address)", +"da62fc28": "accDuckPerShare()", +"da636e92": "activateRebasing()", "da640668": "checkNameOccupied(bytes32)", "da6443ad": "addAddressToWhitelist(address,address)", "da649c63": "startSalePhase(uint256,uint256)", +"da650454": "getProofData(uint256)", "da652b4a": "summBilborough()", "da6585ff": "calcSrcQty(uint256,uint256,uint256,uint256)", "da658f22": "birthPerHundred()", +"da66050c": "isTimeOpen(uint256)", +"da663257": "getUnderlyingPrice(uint256)", "da66cb3e": "secondRoundICOTokensLimit()", +"da676f20": "report(uint256,uint256,bytes32)", "da67ac42": "MIPCoinToken()", "da682aeb": "onApprove(address,address,uint256)", "da6838ff": "getIfBonus()", "da683c63": "Token(string,bytes32)", +"da6841aa": "getTotalAccounts()", "da68d47d": "licenseNFT()", +"da68fc76": "removeExceptAddress(address)", +"da6925ba": "ownerRestake(uint256)", "da69f1c8": "arrayTest(address[])", "da6aabbe": "set_sale_address(address,string)", +"da6aaeab": "_daoUpgradeProposals(uint64)", +"da6af971": "changeURI(uint256,string)", +"da6b0eea": "setReportDelaySec(uint256)", "da6b31b9": "testErrorTransferToNullAuthority()", +"da6b4db8": "winningAmount(address)", +"da6b5ab0": "bondControlVariable()", "da6babca": "setNextPrice(uint256,uint256)", +"da6bae10": "getGoldPrice()", "da6c5832": "CROSAIR_MAX_PRICE()", +"da6c6e08": "setRate(uint256,uint256,uint256,uint256,uint256,uint256)", +"da6caa99": "increaseDay(uint256)", +"da6ce4fe": "viewUserlevelBuyCheck(address,uint256)", +"da6d1be9": "activeClaim()", +"da6d2e61": "ETH_BLK_MULTIPLIER()", +"da6d5407": "CryptoHeroesAddress()", "da6d8ca4": "LotteryRecharge()", "da6dfea7": "setRate(address[],address[],uint256[],uint256[],bool)", "da6e11a5": "approveFactoryContract(address,bool)", "da6efb01": "winAddressOf()", +"da6f0d9b": "isAllowedToPropose(address[],bytes[],uint256[],address)", +"da6f1030": "Call(address,address,uint256)", +"da6f533c": "Prepped(address,address,uint256)", "da6f76b5": "updateEpisode(string,uint256)", +"da6f7b12": "recordUsdAddrCount()", +"da702170": "streamReleased(address)", +"da705163": "crv_handler()", "da70db17": "HireGoToken()", "da710422": "getTokenAmountForWei(uint256)", "da7150b9": "Qwidex(address,address,address,uint256,uint256,uint256)", +"da71ae79": "lastRateChange()", "da721672": "checkFloatingSupply(address,uint256,bool,uint256)", +"da7220d0": "destinationChains(bytes8)", "da72c1e8": "adminTransfer(address,address,uint256)", +"da72d128": "setMinimalSchainLifetime(uint256)", "da7360df": "paymentInternal(bytes32,uint256[],uint256)", "da73630e": "addTeam(address,string)", +"da73645b": "users_4(address)", "da737613": "placeBet(bytes22)", "da73f0f9": "conversion_rate()", +"da742228": "setTrustedForwarder(address)", +"da743da0": "getTValues(uint256)", +"da748316": "wallet_addresses(address)", "da748b10": "pausedUntil()", "da74c5a1": "citiesSold()", "da74ce27": "tokenCapForFourthMainStage()", +"da74dba8": "canUntop()", "da7545d0": "titleCount()", "da756ba7": "BEAT()", "da75b901": "deployStepTwo()", +"da75d1ac": "_globalrFee()", +"da75deb6": "Trade(address,address,address,uint256)", "da76d5cd": "withdrawBalance(uint256)", +"da773605": "setwhiteaddress(address)", "da7855a3": "reclaimLocalNodeFee()", "da78d655": "owner1OK()", +"da78eff1": "estToken()", "da7911e1": "getOrderListLengthFactor()", "da79a9fc": "setTxAsSpent(bytes32,bytes32,uint256)", +"da7a77be": "getDepositTimestamp(address)", +"da7a9b6a": "delegatorMinStake()", +"da7af32d": "depositCount_()", +"da7b0a7b": "TransferAdmin(address)", +"da7b4827": "vote5(address,address)", "da7bd3e9": "getVestingScheduleEntry(address,uint256)", "da7c0ad4": "SaleScheduled(uint256,uint256)", "da7c6a42": "registrations(bytes32)", "da7ccce9": "test_oneValidEqInt1()", "da7d0082": "isCertification(address,bytes32)", "da7d249f": "UnsetBlockForSale(uint256,uint256,address)", +"da7d3d04": "executeHold(string,uint256)", "da7d57f9": "startRareRaffle(uint256,uint256)", +"da7d6b4a": "checkProof(string)", "da7d7827": "getSubscriptions(address,string)", "da7d86fd": "softDelete(bytes32)", "da7e019e": "AlterContactName(address,bytes32)", "da7e6fdf": "TokenDrop(address[],uint256[])", "da7eadd4": "totalAffiliateDDT()", +"da7f8c2d": "fiatCollectedToEth(uint256,uint256,string)", "da7fc24f": "setBackend(address)", "da7fc7c5": "payoutCompleted()", "da7fd1f0": "gemmyMusicSupply()", "da7ffbd4": "generateRandomSpell(uint8[14],uint32)", "da801f20": "approveAndCall(address,uint256,address,address,bytes32,uint256,uint256,uint256)", +"da8081e7": "bet(uint8,uint256,string)", +"da813f9f": "joinWithRef(string,string,string,address)", +"da816894": "proposeChangeUpgradingScheme(address,address,bytes32,string)", "da81b09b": "lastPeriodStarDate()", "da8267e3": "hasDirectorAccess(address)", +"da826a95": "setMinterTokenRole(uint256)", +"da827434": "retirementAddress()", "da82a035": "sweepCommission()", "da8300d2": "initialEnemyCombination()", "da832237": "SMALLEST_TOKEN()", "da834ac4": "getPayoutNumerator(uint256)", "da83a649": "onlyAdmin(bool)", +"da83fbe7": "setRefillInverval(uint256)", +"da83fe4a": "removeUserPoints(address,uint256)", +"da841b68": "setPoolInfo(uint256,string,string)", +"da846893": "usdtDeposits()", +"da84b1ed": "loadLimitValue()", +"da84b30e": "WhitelistTokens(address,bool,uint256)", +"da84ca21": "TokenURISet(uint256,string)", +"da84e000": "processPayout(string)", "da850601": "MKYCToken()", +"da856390": "person1bet()", "da8567cb": "AldiyoCoin()", "da857f2c": "reduceLastWeekStake(address,uint256)", "da85868e": "fifthExchangeRate()", +"da87c969": "stackCounter(bytes32)", "da883e6a": "addItems(uint256[],uint256[],address)", +"da885a06": "Recall(address)", "da88a831": "updateBaseTokensPerEther(uint256)", +"da88ab47": "FrostbiteGranted(address,uint256,uint256)", "da89970b": "hasntStarted()", +"da89a7b1": "redeemRebalancingSet(address,uint256,bool)", +"da89edf6": "stuff2()", "da8a01a5": "CROWD_WEEK2_BONUS()", +"da8a1600": "setTierAmount(uint256)", "da8a46e0": "listUserRecastsFrom(address,bytes32,uint256,bool)", +"da8abf24": "_quadraticRewardCurveY(uint256)", "da8ad6b6": "getTAO(address)", +"da8b0d71": "decompress(uint8,uint256)", +"da8bb7c7": "addRoot(address)", +"da8c1cf4": "MAX_TOKEN_SELL()", "da8c229e": "controllers(address)", +"da8c3eac": "createTransaction(uint256,address,string)", "da8d2f35": "ChannelDeleted(address,address)", "da8e2890": "payNihilum()", "da8e44d8": "registerColor(string,uint256)", "da8ee786": "transferFromContract(uint256)", +"da8eecb7": "PROXY_WEIGHTS_COUNT_MAX()", "da8f410a": "ApprovedToken()", "da8f54d8": "testVali(address,uint256)", "da8f9fe5": "DetailedERC20(uint256,string,string,uint8)", "da8fb7cd": "ASSToken(uint256,string,uint8,string)", "da8fbf2a": "pauseMinting()", +"da9017dc": "openBar()", +"da906fed": "Set_Updater_Address(address)", +"da907ecf": "getGasDepositsForConsumer(address)", "da909b09": "setExchanger(address)", "da91254c": "whoAmI()", +"da912926": "See_Ethweight(address)", +"da916692": "setBeyondExchangeAddressProx(address)", +"da9182f4": "rebaseable()", "da918f76": "placeBlock(uint16,uint16)", "da9287d1": "acceptHybridization(uint256,uint256)", "da9332bb": "addCompanyURL(string,string)", +"da93a7cb": "setClaimedBonusAmounts(address[],uint256[])", +"da93cdde": "onLTestStr(string)", "da93d0d1": "setPrice()", "da93dfcf": "give(address,bytes32,address)", "da93f938": "maxAppeals()", +"da9403cb": "completeOrder(uint128,address,address,uint256,string)", +"da9425e2": "reserved(address)", "da942ab3": "issueTokensExternal(address,uint256)", +"da942cbf": "burnLiquidity()", "da94e770": "YBVToken()", +"da95006d": "numberCakeToReactivate()", "da9534b4": "Stex()", +"da95691a": "propose(address[],uint256[],string[],bytes[],string)", "da9590cb": "addPublicSaleWallet(address)", "da95ebf7": "requestWithdrawal(address,uint256)", +"da95f1d4": "checkBidable()", "da96bbcd": "publicEventTokens()", "da977038": "volumeBasedBonus(uint256)", +"da97754e": "getAddressArray(address)", "da979b8d": "SpecialRate(address,address,uint256,uint256)", "da98655e": "getNullAddress()", "da9893dd": "Resource(address,string,string,string)", +"da98c40b": "toggleAntibot()", +"da998dca": "serviceAdmin()", +"da99b5b1": "rebasingLP()", +"da99faa1": "BondsClaim()", +"da9a0906": "ownerAccountsMap(address)", +"da9a804b": "_createTree(bytes32,uint256)", +"da9a94d0": "multisendErcRHINO(address[])", "da9ab565": "changeId(string)", "da9ad094": "changeParameter(uint32,uint32)", +"da9aef0b": "FAHMY()", "da9b3cb4": "getGameBid(uint256,uint256)", +"da9b4640": "avgFactor_releaseWeight()", "da9b90c4": "TOKEN_FIRST_DISCOUNT_MULTIPLIER()", "da9bca21": "numActiveMembers()", "da9bdbfc": "CKCoin()", "da9bf54c": "icoPhaseDiscountPercentage4()", "da9c2697": "GaillardTokenSale()", "da9c273d": "cancelInvoice(uint256)", +"da9c35b1": "DXD()", "da9c6a46": "getReplyCount(uint256)", +"da9c7d93": "weekGameAccountStakes(uint256,uint256,address)", "da9c87fa": "changePayRate(uint256)", "da9d0f6b": "withdrawCustom(uint256,address)", +"da9d2a77": "mnbks()", +"da9d2e31": "Retired(address)", "da9d56d7": "getBidIds()", +"da9d83ea": "playedWallets(uint256)", +"da9d8aa0": "claimLaunchReward(uint256)", "da9d95bc": "commonWithdraw(address,uint256)", "da9da572": "tryAirdrop()", "da9dd8bf": "isAddressVerified(address)", @@ -125199,55 +229116,100 @@ "da9f6918": "MultiSigWallet(address[],uint256,uint256)", "da9f7550": "requestRandom()", "da9f84a6": "rerollValue(uint256)", +"da9fb1bd": "createMonsterBNB(string,address,string)", +"daa01015": "issuePynthsOnBehalf(address,address,uint256)", "daa08539": "mintShares(address,uint64)", "daa0ab0e": "majorityForTeam()", +"daa0d986": "TOTAL_INVESTMENT()", "daa0f79f": "LEGAL_EXPENSES_ADDR_1()", +"daa12ea5": "setSensorMeasure(string,string,string)", "daa147f3": "redeemLevAndFeeByStaker()", "daa170ca": "difficultyBalance()", "daa17f49": "marketplaceAddress()", "daa1d7d4": "maximumPercentageOfDaysSupply()", +"daa1fb59": "dispropose(bytes32,bytes32,string)", "daa21e0e": "testBitSetSuccess()", +"daa22f7a": "setActive(bool,uint256)", "daa232ac": "_bonusRatio1()", "daa283c8": "__callback(bytes,string)", "daa3a163": "isUpgradeable()", "daa44bf8": "getInStreamOf(address)", "daa45281": "_addTo(address,uint256)", +"daa483a1": "grantVatAccess(address,address)", "daa4cf88": "getCurrentStageIndex()", +"daa50485": "toggleRedeeming()", "daa50ee0": "DSTMultisig()", +"daa59d7a": "TradeListing(address,address,address,uint256,uint256,bool,bool)", +"daa5ee71": "CollectorAddress()", +"daa5f36d": "lastPresentAt()", "daa5f48b": "findbit(uint256)", "daa69c9e": "killDividentContract(uint256)", +"daa6d556": "requestRateUpdate()", "daa6f417": "howMuchTokensAvailableForExchangeFromStock()", "daa7370f": "onFailure()", +"daa78c0f": "addETHReward(address)", +"daa7ee69": "changeAdminInterestPct(uint256)", +"daa80bb3": "getEarning(address)", +"daa82a56": "extractETH(address,uint256)", "daa86216": "getAllowedContractsCount()", "daa89fef": "issueNewHeldCoins(address,uint256)", +"daa8f28a": "updateTokenJson(uint256,uint256,string)", +"daa91f2e": "withdrawalAmount(address)", +"daa92214": "voteDates(address)", +"daa931ce": "finishChangeETHSpentOracleUse()", "daa94ab1": "frozenAccountProfit(address)", +"daa95d6d": "lastFortnightPayed(address)", "daa9604d": "byPonzi(address)", +"daaa2d00": "wildcards(uint256)", "daaa50c9": "transferWithCustomReservingNet(address,uint256,uint256)", "daaa6b5d": "setReleasedAddress(address,address)", "daaadd8e": "arr(address,address)", +"daab713e": "jgdengjidteth()", "daab88a6": "createEngine(uint256)", +"daabb6b7": "foreignSwapPair()", "daac1f64": "reqfee()", "daac518a": "playerTokenAddress()", "daacb24f": "right42(uint256)", "daad98f4": "socibit()", "daae717c": "setIndividualMinCap(uint256)", "daae7e98": "setCompte_20(string)", +"daaeec86": "toggleSaleState()", +"daaf3796": "airDropSingle(address,uint256)", "daaf3d2e": "attack(uint256,uint256,address)", +"daaf7468": "kimbap()", "daafe0a5": "setPrice(uint32)", +"dab02527": "gsnFeeTarget()", "dab0537b": "change_p2(uint256)", +"dab05ba3": "gst()", "dab09999": "returnMyEthBalance(address)", +"dab0efff": "externalTokenTransfer(address,address,uint256)", "dab122de": "dInit(address,address,bool)", "dab12beb": "SmartSweep()", +"dab155d0": "requestWithdrawForTokenPair(address,uint256,address,uint256)", +"dab1fa12": "lengths()", +"dab2060e": "get_last_updated_timestamp()", +"dab229eb": "rewardPerTokenCircle(uint256)", +"dab22e4c": "notifyClaim(uint256,address,uint256)", "dab23f7c": "__callback(bytes32)", +"dab24783": "_fallbackRoot()", +"dab249b3": "mapPID_votes(uint256)", +"dab2931a": "getlistmintingPool()", +"dab2997b": "staketoken()", +"dab2d394": "getHarvestableStrategiesCount()", +"dab301da": "getStakingAndDAOAmount()", "dab306b1": "votingFee()", "dab30ccc": "addBonusPeriod(uint64,uint64,uint256,uint8,uint256,uint8)", "dab3ed63": "withdrawMyInvestmentsBack()", +"dab400f3": "EIP712_DOMAIN_SEPARATOR()", "dab41935": "TootyrToken()", +"dab41d0d": "removeRole(uint8)", "dab43e6d": "PreSale3DAPP(address)", "dab46553": "removeOracle()", +"dab4c527": "tokenHCrv()", "dab4c65e": "totalDowSold()", "dab4cb87": "gameValue()", "dab4d1c1": "PixelPrice(uint16,uint16,address,uint256)", +"dab55129": "getUnlockedCollateral()", "dab5cec2": "setExtraTokensPercent(uint256)", "dab5f340": "setRoot(bytes32)", "dab5fdc4": "DOWN_totalBets()", @@ -125257,26 +229219,45 @@ "dab80d6f": "addSponsor(address)", "dab8194f": "enableGame(address)", "dab8263a": "weiPerToken()", +"dab830c8": "setImages(bytes32,bytes32,bytes32)", "dab83b9a": "selltokens0()", +"dab860a2": "getCommunityDevelopment()", +"dab86783": "buyInsurance(address,string,uint256,address)", "dab88ad7": "VI6()", "dab8a18b": "specialTransfer(address,uint256,uint256)", "dab8c01a": "Zorro01Token()", +"dab8e4b4": "onTokenPurchase(address,uint256,uint256,uint256,uint256)", "dab8ef38": "addRooms(string,uint256)", "dab8fa73": "setPackage(string,uint64[3])", "dab91e87": "linkToMasterWallet(address)", +"dab937f2": "NewHashLockContract(bytes32,address,address,uint256,bytes32,uint256,bytes)", "dab93a93": "PolarisDEX(address,address,address,uint256,uint256,uint256)", "dab951ba": "arrayFunc(int256[10])", +"dab95dc9": "recollateralize(address,uint256,uint256)", "dab9938e": "setIcoBeginDate(uint256)", +"dab99885": "verifyBatch(address,address,bytes32[])", +"dab9add2": "_nftFarmingContract()", "dab9afa4": "Test12Address()", +"dab9df4b": "sm_maxDevelopers()", +"daba459e": "selfManager()", +"daba6eb6": "enableBuyout(address,address,address,uint256[4])", +"daba92f9": "vestingCliffDate()", "dabb0531": "getCharacter(uint256)", "dabb37d4": "Lakshmi(uint256,string,string)", "dabb624b": "rate_ETHUSD()", "dabb6360": "percentage_of_three()", "dabb6778": "vestingTeamWallet()", +"dabb8ae6": "setEvent(string)", +"dabba1e3": "honeyLv4Num()", "dabbbd0b": "sharesChainToken()", "dabbd2bd": "removePlayerFromServer(uint256)", "dabbd670": "team2Token()", +"dabbf852": "setBridgeableNfts(address[5])", "dabc0c37": "isPassOwner(bytes32,address)", +"dabc1de4": "flag(address)", +"dabc3741": "activeBonusCacl_5()", +"dabc4d51": "getMerkleTreeRoot(uint256)", +"dabc527a": "funcNotCalled3()", "dabc706e": "getProposalCost()", "dabd2719": "setDiscount(uint256)", "dabd2eb2": "changePrice(bytes32,uint256)", @@ -125284,66 +229265,129 @@ "dabdc1f2": "ChangeActiveDigger(address)", "dabecd8d": "_newBid(bytes32)", "dabed8be": "Update_UserWinningHistory_Data(uint32,uint32)", +"dabf0630": "setTimeToExitLiquidity(uint256)", "dabf7dc8": "PayoutDividendEarly(uint256,bool)", "dabf7ec4": "helper(uint256)", "dabf8246": "EventAuction(address,uint256,uint256,uint256,uint256,uint256)", +"dabf9a23": "getJurisdictionFlow(uint256,uint256)", +"dabfaef5": "TwoEtherIcons(address,uint256)", "dac00420": "maxHalvings()", "dac05adc": "test_1_ensureVoteWorks_increaseBlocksBy100()", +"dac0eb07": "B(uint256)", +"dac11090": "redeemLE(uint128,uint8[2],uint16[3],uint8[4],uint8[2],uint8,uint256)", "dac1182e": "signBBODocument(bytes,bytes)", +"dac1257a": "isBoosterEscrow(address)", "dac17430": "lastVoteTime()", +"dac19165": "isNominated(uint256)", "dac194f1": "setAutoInvest()", +"dac19e5f": "totalStakings(address)", +"dac1d55b": "REMOVE_LIQUIDITY_DURATION()", "dac1e5e5": "_computePVPReward(uint256,uint256)", +"dac258f9": "getTopReferralAddress()", +"dac2c1af": "minted_tokens(uint256)", +"dac2cbe6": "getSplitVerifier()", "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)", +"dac4cc09": "myVotes(address,uint256)", "dac4fcdb": "getNewCustomPrice(address,address)", +"dac5436b": "pendingPid(uint256,address)", "dac54b8a": "returnHoldings(address,uint256,uint256)", "dac54daa": "OPLTest()", "dac5b8ae": "TokenSale(address,uint256,uint256,uint256)", +"dac6270d": "getTimeRemaining()", "dac645bd": "getBUI(bytes32,uint256)", +"dac6492c": "devUpd(uint256)", "dac649c8": "NEWC()", +"dac66125": "onb()", "dac6af5e": "SWIFTH(address,address[],address)", +"dac6b1a8": "CoopStamp(uint256,string,string,string)", +"dac6be44": "lpTokenAddressToPairs(address,uint256)", +"dac6db1c": "itemPrice()", "dac796bb": "getInvestorBalance(address,address)", +"dac7abc2": "GetPayouts(address)", "dac7c858": "TOKEN_TRANSFER_PROXY_ADDR()", +"dac816bb": "commentInfo(bytes3,string)", "dac84ee4": "moveToReceiver(address,address,uint256)", +"dac84fed": "withdrawTokenToOwner(uint256,address)", "dac8df25": "DEVELOPER_CUT()", "dac90466": "_error(bytes32)", +"dac94724": "iChillFiinance()", "dac9555d": "allocate_slot(address)", +"dac9594f": "limitLock(string,uint256)", "dac9882a": "offChainAddresesValidCount()", +"dac9f9db": "claimHandlerReward(uint256,address)", +"daca1663": "TotalUser()", +"daca2ac2": "deposit_aETH_beta(uint256)", "daca5ce0": "bonusTokensPercent()", +"daca6f78": "verifySignature(bytes32,bytes)", +"daca853e": "proposal_transfer_from(uint40,uint256,uint256,address,address,uint256)", +"daca9edd": "setInviteUser(address)", "dacaeb07": "pledge(bool,uint256)", +"dacb2d01": "requireAndGetAddress(bytes32,string)", +"dacbafd2": "currentCycleNumber()", +"dacc5370": "allAddresses(uint256)", "dacc8e11": "getTPrice(uint256)", +"dacceeec": "newChangeTokenAddressAction(bytes32,address,address)", "dacd06fc": "KongQiCoin()", "dacd4472": "PixoArenaFounderToken()", "dacdbb93": "removeAccountSearch(address)", +"dace00ab": "newPersonalERC20(string,string,uint256,address)", "dace4557": "setUnlockTime(uint256)", +"dacea54f": "ChangeWithdrawTimeRange(uint256,uint256)", +"dacec154": "restrictionEnd()", +"dacee347": "usdcPrice()", "dacef51b": "payincount()", "dacf18c7": "getDeathCoin()", "dacf9483": "getUIntValueConverted(bytes32,uint8,uint256)", "dacfa06f": "manualDraw()", +"dacfb074": "NbPrizes()", +"dacfbd79": "BONUS_PERCENTS_PER_WEEK()", "dad0128d": "calculateAdjustedFiguresForBattle(address[3],address[3])", "dad03cb0": "returnError()", +"dad04213": "clearWOK()", +"dad0aee1": "initializeMultipleWinners(address,uint256,uint256,address,address,address,address,uint256)", +"dad13219": "withdrawn(address,address)", "dad13822": "setMonsterClassSiteSet(uint256,uint256)", +"dad1d4c1": "getTotalOrder()", +"dad1fc53": "importFee(address)", "dad22781": "AdvancedArtificialIntelligenceSafetyDefense()", +"dad228cd": "calculateBnbReceived(uint256)", +"dad22e53": "SATOPolicy()", "dad24541": "PresaleToken()", "dad2771d": "signReceipt(uint256,int256)", +"dad2829f": "applyInterestHandlers(address,uint256,bool)", "dad30cfc": "test_transfer_to_contract_with_fallback()", +"dad31972": "RuleChange(bool,bool,bool,bool,bool)", "dad38294": "PowTokenHashedBase()", "dad39151": "multiApprove(address,address[],uint256[])", +"dad3eb74": "getTotalLockedWorth()", +"dad3f6b3": "drainTokens(address,address,uint256)", +"dad41588": "setPendingValues(address[],uint256[])", +"dad4a7d3": "kingWithdrawTaxes()", "dad52c72": "_itemCancelMarkets(uint256)", "dad59f35": "raisedEthers()", "dad5c2e3": "validAstroCount()", "dad5c3ee": "chainyShortLink(uint256,string)", +"dad5d7fc": "balanceOfeCRV2ETH()", "dad5fda3": "vester()", +"dad618a7": "iStakingCapEnabled()", "dad6b482": "userHasPositveBalance(address)", +"dad6dab3": "addETH()", +"dad6e2fa": "changeETHMin(uint256)", "dad72332": "claimUnsold()", +"dad73684": "sendRbtcRemainder()", "dad788d9": "isJobExpired(uint256)", "dad7ad9e": "aix()", "dad7c095": "transferWithAllowance(address,address,address,uint256)", "dad7e4d2": "Aaa()", +"dad7f110": "redeemTokens(address,uint256)", +"dad852ac": "NFI_TOKEN()", "dad86b45": "teamETHUnlock3()", +"dad8f147": "stakesDaily(address)", +"dad8f25c": "mintMulti(address,uint256,uint256,string)", "dad90035": "withdrawalRequests()", "dad901be": "callWithdraw()", "dad950f4": "InvestorPart()", @@ -125351,7 +229395,9 @@ "dad99119": "ddf()", "dad99989": "burnCoins(address)", "dad9a423": "setDuesIn(uint256)", +"dad9e832": "hatcheryCrocs(address)", "dada85c3": "setAirdropOn(uint8)", +"dadab303": "AccountFundsUnblockedEvent(address,uint256)", "dadad8fe": "addNewStreetName(string)", "dadb20be": "ChangeTokenName(address)", "dadc89eb": "setPreIcoDates(uint256,uint256)", @@ -125359,112 +229405,201 @@ "dadcb460": "bumpPointer()", "dadce8b0": "setExpiration(uint64)", "dadd9e8e": "withdraw_some_amount(address,uint256)", +"dadd9fed": "getETHpendingCashoutB(address)", +"daddcf8d": "getProviderContracts()", +"dadddf94": "oneTokenInFiatWei(uint256)", "daddff33": "claimController()", +"dade39c9": "last_uid()", "daded88e": "addMessageRequest(address,address[],string)", +"dadee88a": "orderedWithdrawAmountTotal(address)", "dae072d9": "GameWon(address,uint256)", +"dae0f05e": "releaseTimes(address)", "dae1bd84": "AddChip(address,uint32)", "dae1ddd2": "check_period(address,address)", "dae1f17a": "getShopOwner(string)", "dae21454": "toEthereumSignedMessage(string)", +"dae254dd": "setRewardReceiver(address)", +"dae27495": "callsAssigned(bytes32)", +"dae2844e": "alterRedeemRequestAmount(bool,uint256)", "dae37abc": "cancelParticipation()", "dae37fac": "spendAvailable()", "dae392ee": "softFundingGoal()", +"dae3a5c1": "deadlineorder(uint256)", +"dae3de98": "cachedPynthDebts(bytes32[])", "dae3f7e2": "Gralaxious()", +"dae4036a": "cancelDispute(bytes32,address,address,uint256,uint256,bytes)", +"dae466d5": "setCoinStorage(address)", +"dae487ca": "tks()", +"dae4c4e7": "enableReserveStableBorrowRate(address)", "dae595e5": "getAuctionStart(address,address)", +"dae5f0fd": "decimalShift()", +"dae607db": "BZRXWeightStored()", "dae611c4": "lockUnlockMatchGPForBetting(uint256,bool)", +"dae6530d": "lockETHGenerateDebtProvideLiquidityUniswap(address,address,address,address,address,uint256,uint256,uint256,uint256[2])", "dae6f081": "setScrapMinStartPrice(uint256)", "dae79483": "getMemsize()", +"dae7a13c": "tickets(address,uint256)", "dae7e05d": "_bonusAll(uint256)", +"dae83f08": "lastblock(address)", "dae8865c": "ETHERCToken()", "dae89f18": "coordinatorAccountIndex(uint256)", "dae8af77": "getFeeWindowId(uint256)", +"dae9012b": "swapWithFee(uint256,address,address,address)", +"dae917b5": "lpClaimTotal()", "dae9c31b": "ProofPresale()", "dae9e379": "getFundBalance()", +"daea74c5": "contractStopped()", "daea85c5": "approve(address)", "daeab905": "issueReceipts(address,uint256)", +"daeacf04": "finishChangeMinTradeSplit()", +"daeb1b07": "mcdJoinEth()", "daeb1c98": "PlusToken()", +"daeb697c": "trade(address,address,address,bool,uint256,uint256)", "daeb860d": "versionAddresses(bytes32,bytes32)", "daec4582": "AuctionEnded(address,uint256)", "daec75f3": "buyXwithdraw(bytes32,uint256)", "daec8128": "mintTokensForFounders()", +"daec9b18": "mintPromoTokens()", "daecc910": "getCKOwner(uint256)", +"daecfa6c": "supply(uint256,uint256)", +"daed03e1": "set1155to721Ids(address[],uint256[],uint256[],uint256[],address)", "daed6726": "ETHCollected()", +"daed67cd": "swapExactETHForTokens(uint256,address[],address,address)", "daee4dd6": "readCheck(address,uint256)", "daee9e35": "level2Bonus()", "daeed3a6": "rateFinalStage2()", "daef0e92": "stopCurrentGame(uint256)", +"daef173f": "approveEscrow()", "daef4df8": "addCar(string,address,uint256,uint256,uint256)", "daef569f": "insChainTokenLedger()", +"daef8ff7": "AssetProxyRegistration(address,bool)", "daf017a9": "GetRocket(uint32)", "daf059c6": "createGuess(uint16,uint64,uint64,uint16)", +"daf0cf43": "getGroupMembersIndexer(uint256,uint256)", +"daf0d4aa": "log(address,address)", "daf13a47": "reserveLockup()", "daf161e2": "getThirdAdmin()", "daf1af19": "Current_balance()", "daf1db09": "readyForFinish()", +"daf2299d": "releseToken()", "daf22f4d": "identify(bytes32)", +"daf2fd58": "returnCollateral(address)", "daf32370": "getPurchaseAddress(uint256)", +"daf33a99": "setEarnedToMDOPath(address[])", +"daf38441": "buyPackage(uint256,uint8)", +"daf45967": "x_adminSetFeesRewards(uint256,uint256,uint256)", "daf47ba3": "incGenLabFace(uint256)", "daf488b1": "setReferrerPercent(uint256)", "daf49451": "BINGToken()", +"daf49863": "vestings(address)", +"daf4a021": "newXPool()", "daf4f66e": "isLimitEnabled()", +"daf541e9": "ReDrawUser(uint256,uint256)", "daf64aa5": "getCompanyDetails(uint256)", "daf69093": "BLOCKCHAIN_DEPOSIT_BETA_1M()", "daf6ca30": "saleContract()", "daf6e5ae": "DeepBrain()", +"daf70acc": "verifyAndUpdate(address,bytes32)", +"daf72214": "IMPOSS13()", "daf760d0": "getData_6()", "daf7f103": "_error(uint256)", +"daf81d5a": "_burn(address)", "daf8f438": "startRedeeming()", +"daf90514": "deposerEther()", "daf9812f": "updateBincentiveErrand(address)", "daf9a535": "getData_20()", +"daf9ada4": "buyreleaseETH(address)", +"daf9feb3": "getTokenAdapter(bytes32)", "dafa1d2d": "burn(string)", "dafa55a1": "creatureIndexToOwner(uint256)", "dafae408": "checkThreshold(uint256)", "dafaf94a": "getOracle(bytes32)", "dafba12f": "setMAGContractAddress(address)", +"dafba184": "OnExchangeBuyUpdate(uint256,uint256)", +"dafbb681": "wefjne98(address,uint256)", +"dafc4a12": "HighestBidIncreased(address,uint256,uint256)", "dafc5608": "TransferFeeRateConfirmed(uint256,address,uint256)", "dafc64c4": "ERC223MintableTokenFactory(address)", "dafd54a6": "ExaEUR()", +"dafd6580": "onMummyAccountWitdraw(address,uint256)", +"dafd700e": "artWorkChangeRequests(uint256)", "dafd70c9": "RESERVED_UTILITY_GROUP()", +"dafddd15": "participantsNum()", "dafea207": "smax256(int256,int256)", "daff0093": "setReference(address,address,bytes32)", +"daff97b5": "setPaused(uint256,bool)", +"daffa182": "LogNFTBought(uint256,address,uint256)", +"daffd9c9": "TRL()", +"daffe86c": "totalRoundCount()", "db00345d": "BookToken()", "db006a75": "redeem(uint256)", "db00758a": "getSGNTokenManager()", "db00b848": "_performGeneric(bytes,address)", "db00d1a9": "_preValidateCancellation()", +"db01ca4f": "award(uint256,address,uint256,uint256,bytes32[])", "db0251e9": "contributeMsgValue()", +"db02609f": "toggleConversionAllowed(bool)", +"db027900": "pack1users(uint256)", "db035918": "deployForeignBridge(address)", "db041965": "fightBetaMonster()", "db0436c2": "RUNEToken()", +"db0461a4": "calculateUpfrontSplit(uint256)", +"db04636d": "registerUser(bytes32,uint8)", "db04a0ee": "getOrganizerActivationStatus(uint256)", "db04aef4": "getHoldersLength()", "db051653": "setEtherFeePercent(uint256)", "db054134": "mintForReportingParticipant(uint256)", "db059dfb": "createSsp(address,uint256,string)", +"db05c547": "tI()", +"db05c6ba": "tkbToken()", "db05ccfc": "setValue(address,uint256,uint256,uint256)", +"db060b73": "approveOnBehalf(address,address,uint256)", "db060e1a": "RESERVED_TOKENS_FOR_FINANCIAL_INSTITUTION()", "db068e0e": "setExchangeRate(uint256)", +"db06ccd1": "test_inline_assignment()", "db06f0c2": "doPresaleMinting(address,uint256,uint256)", +"db073602": "checkredeemable()", "db078f08": "toggleKey(address,bool)", +"db07b68e": "getCreationFee()", "db0827e9": "ashcashToken()", +"db082fac": "getMaggotAmountFromROTSTorage()", "db0834cf": "lockedAllocation()", "db08444a": "toUint(int256,string)", +"db085905": "PERCENTAGE_GROUP_2()", "db087ad5": "getCurrentPricePerWei()", +"db08bf51": "allOwner(uint256)", "db08ccec": "enjinTeamAddress()", +"db08d597": "withdrawalEvent(address,uint256)", +"db092658": "Board(uint256)", +"db09fd08": "bnbmarket()", +"db0a0461": "getTeamBonus(uint256)", "db0a087c": "getTypeName()", +"db0a9c3d": "buybackAmount()", "db0aa668": "Bittwatt()", +"db0ad116": "RetBalance(address)", "db0ad29c": "SocialMediaMarketToken(uint256)", +"db0adb05": "starAuctions(uint8)", +"db0b27fd": "tradedToken()", +"db0b569e": "settleMarket(uint256)", +"db0c004b": "individualTransferFeeDenominator(address)", "db0c154a": "hitCharacter(uint16,uint16,uint8)", +"db0c7ca8": "isRegisteredAddress(address)", "db0c9a02": "marketSell(uint256)", "db0d5175": "getTransfer(address)", +"db0d7a38": "unlockedAddressesDuringITO(address)", "db0d7ce5": "LotteryRoundCreated(address,string)", "db0db014": "dividendsForAmountAndTime(uint256,uint256)", "db0dd71e": "addAbility(string,bool,uint8,uint8,uint8,uint256,uint256)", "db0e127a": "openDoor()", "db0e16f1": "emergencyERC20Drain(address,uint256)", +"db0e6a2f": "renounceRetailer()", +"db0e8f45": "refsCount(address)", +"db0eaf91": "getUserInfoDeposit(address)", "db0ec968": "transfer(address,uint16[])", +"db0ed6a0": "initialize(string,string,address,address,address)", "db0edd08": "PubKeyHashAdded(bytes20,uint8)", "db0fb107": "updateSafeSender(address)", +"db1016bd": "setPrescription(uint256,uint256,uint256,uint256,uint256)", "db107371": "DecentrEx(address,address,address,uint256,uint256,uint256)", "db11040f": "LogRegError(address,string)", "db112977": "Project_Info(uint256)", @@ -125474,68 +229609,148 @@ "db123b1a": "ZRX_ASSET_DATA()", "db12630a": "fundariaCap()", "db12999b": "airdropTokens(address,address[],bool)", +"db1364ce": "uniswap_pair1()", "db1366bf": "buyExchangeRate()", "db136b1e": "createAsset(address,uint256)", +"db13771d": "pool24_(uint256)", +"db139705": "topUid()", +"db13b24f": "withdraw2(address,uint256)", +"db13b669": "DonateETH()", +"db140068": "avg(uint256,uint256)", +"db14c5d5": "setBurnTxFee(uint256)", +"db14ee03": "SyncOldData(address,address[])", "db15520d": "TPTContributors()", +"db158aff": "configureTokenDistributor(address,address,address,address[],uint256[],address[])", "db15b72d": "getDInfo(bytes32)", +"db15d185": "setUniswapRouterAddress(address)", "db165a76": "createLand(address,uint256)", +"db16cb5b": "SetStakeForSale(uint256)", "db16d0fe": "optionExist(uint256,uint256)", +"db16d8ac": "getDenormalizedWeights(address,address[])", "db171211": "returnToSender()", "db171754": "vestedAddress()", +"db1741ff": "Exchange(string,uint256,string,uint256)", +"db17e11d": "updateAcceptedToken(address)", "db180b2b": "LOCKAMOUNT2()", +"db185847": "_unsetAppFee(bytes32)", +"db18af6c": "rule(uint256)", +"db18bf70": "steamerEnable()", "db18c972": "play4(address,uint256)", "db18f962": "updateSplitandSend()", +"db190f77": "set_DAI_TOKEN_ADDRESS(address)", +"db191d5d": "updatePremium(uint256,uint256)", "db192761": "Clockpay()", +"db1a1903": "stackingPhase()", "db1a71ae": "trackable_likes(address)", +"db1b2582": "calculateTotalSTBZ(address)", "db1b569f": "previousSender()", +"db1bcf92": "payDividendsPerYear()", "db1bdd1d": "TheTokenG()", "db1c45f9": "getAllGames()", "db1c53e2": "isTransferedUser(address)", +"db1c6686": "_totalTokenBalance()", +"db1c901e": "min_withdraw()", +"db1c9fc6": "getXEth()", +"db1ca260": "change_type_weight(int128,uint256)", +"db1cb723": "setwad(address,uint256)", +"db1ce2e2": "test_burn_full(uint128)", +"db1ceca6": "_forSeedSellAddress()", "db1d0fd5": "alpha()", +"db1d5a96": "price1CumulativeLast(address)", "db1d68b5": "countryWinnerID()", +"db1e0eec": "loadCrowdsalePurchases(uint256)", +"db1e50ee": "swapUSDCForTequila(uint256,uint256)", +"db1e8924": "blacklistSeller(address)", "db1eeb51": "MizeCoin()", +"db1f2954": "payUserFromAirdrop(uint256,address,bool,uint256)", "db1f6689": "authorContentByIndex(uint256)", +"db1fdb6c": "intelCount()", "db201648": "AppicsFund()", +"db2087c1": "formalizeWedding()", +"db209a2d": "approve_356(address,uint256)", +"db211f30": "updateCharge(uint256)", +"db21e48d": "changeUniswapProxy(address)", "db21fc9c": "gettimeback()", "db22032f": "rentalTimeRemaining()", +"db22095b": "getUserTotalMinted(address)", +"db225ffb": "ClaimCompThree(address[],address[],uint256)", +"db22d399": "devFundAddr()", "db2307b6": "changeRecvEthStatus(bool)", "db230b52": "viewScore(address)", +"db236e24": "removeTokenBySymbol(bytes32)", "db239951": "cbAddresses(address)", "db23c5d7": "icoRuleAdd(uint256,uint256,uint256,uint256)", +"db23f20d": "signingInfo()", "db23f7e3": "veztUserArrayIdentifier(address)", +"db23f9f3": "getTotalOwners()", "db246fda": "withdrawalTimeOf(address)", +"db247f7f": "doAnything(address,bytes,uint256)", "db248091": "assignBonus(address,uint256)", +"db254e50": "ZapIn(address,address,uint256,uint256,address,bytes,address,bool)", "db25b407": "listActive()", "db25c328": "joinToProvider(uint256,address)", "db25e637": "Strikes(address[])", +"db260b3e": "setRewardsVar(uint256)", "db264a36": "s10(bytes1)", +"db26760f": "icb_address()", +"db269894": "editAssetLimit(address,uint256)", +"db2698bc": "NewSetBuy(address,uint256)", "db27b0bc": "addUInt(uint256,uint256)", "db27b8dd": "vestingManager()", +"db281e1b": "getUserTotalAwards(address)", +"db28bfd0": "totalWithdraw(uint256)", "db299492": "IGFC(uint256,string,uint8,string)", +"db29ade4": "searchHistory(uint256)", +"db29f87f": "create_badge(string)", "db29fd6e": "increaseDistrictCoke(uint256,uint256)", "db29fe12": "addShareholder(address)", +"db2a0527": "addLiquidityToCore()", "db2a0cb7": "HumanStandardTokenFactory()", "db2ac8d8": "WINTOKENADDRESS()", +"db2b71b2": "setUpgradePower(uint256)", "db2becb0": "getWalletFeeSignatures()", +"db2c0b91": "RARE_RARITY()", +"db2c1c69": "payoutAfterVote()", "db2c4e2d": "complexScaleObsTest(address)", +"db2c5518": "setURIProvider(address)", +"db2c7b16": "OlchaSmile()", "db2d10a5": "PreICOTokenPushed(address,uint256)", "db2d5841": "batchRelease(address[])", +"db2d73b1": "_validateTradeParameters(address)", "db2e21bc": "emergencyWithdraw()", +"db2e4440": "swapExactTokensForETHSF(uint256,uint256,address[],address,uint256)", +"db2e511d": "unStakeTokenLP(uint256,uint256)", "db2ea20e": "arrayTestMulti(address[],address[],uint256[])", "db2ea5c0": "_callERC165SupportsInterface(address,bytes4)", "db2f1d83": "TalkCrypto()", +"db2fd745": "setMinCompToSell(uint256)", +"db2ff861": "removeProjectLastScript(uint256)", +"db3015e6": "harvestFeeRate()", +"db30b27f": "RecoveredAddr()", "db3119bb": "manageLink(uint256,uint256)", "db318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", +"db31b755": "setUptAddress(address)", "db31dd17": "removeAddressFromWhitelist(address,string)", "db31fb03": "excessEth(address)", +"db32646c": "total_distribution_amount()", "db3268d8": "getBU(bytes32)", +"db327491": "submitClaim(uint256,bytes)", +"db32b3d8": "eventEndMiniGame(address,uint256)", "db32be98": "refundICO()", "db330794": "addToVestMap(address,uint256,uint256,uint256,uint256)", "db3359f0": "makeNonFungible(uint256,address)", +"db3410af": "makeHFLYContractOwner()", +"db345d45": "getLockedReward(address,uint256)", +"db34a679": "takeBuyOrder(address,uint256)", "db35132c": "WithdrawEther(address,uint256)", "db3543f5": "setFoundation(address)", "db35a03d": "allowedSpenders()", +"db35a189": "plyrRnds24_(address,uint256)", +"db36975e": "mint_to_sell(uint256,uint256,uint256)", +"db36b789": "stakeTimestampFor(address)", "db36c2e5": "destroyOldCoins(address,uint256)", +"db372359": "swapTokensToExactETH(uint256,uint256,uint256,address,address,bool,address)", +"db37822a": "value3D()", "db37ceec": "maxEthContribution()", "db37e42f": "multisetProofType(uint256[],address[])", "db383bf2": "MyNewToken()", @@ -125543,94 +229758,202 @@ "db395d2e": "bonusPercentForWeiAmount(uint256)", "db39a8e8": "getTokenTransferInsByAddress(address,address,uint256)", "db39ceac": "MyBalance2(address,address)", +"db39dc79": "calcValueInBase(address,uint256)", +"db39e3e9": "ethOnContract(address)", +"db3a4bc6": "isGovernance()", +"db3ad22c": "totalPower()", +"db3af7d2": "NewAutoRentAtom(address,uint256)", "db3b73db": "getPlatformName()", +"db3bc7c1": "currentCoreContract()", "db3c1b94": "EtmPerBtc()", +"db3ca7c5": "_payFees(address,uint256)", +"db3d17c2": "tokenSaleFADR(address)", +"db3d51e0": "destroy_contract()", "db3d8421": "getTotalAngelCardSeries()", +"db3dce3f": "Log2(bytes,bytes32,bytes32)", +"db3ddc34": "queryToSettle(address,bytes32)", "db3e7f4f": "forgeTokens(address,uint256)", +"db3f052f": "PushAuthor()", +"db3f8ead": "MintLong()", "db3fab84": "Hamza_Ahmed_Coin()", "db3fd0b8": "usedReserveSupply()", +"db3ff812": "exitClaim(address,uint256)", +"db403717": "cardDetails(address,uint256)", "db403747": "mintForYear(address,uint256)", +"db403e8a": "SendVote(address,string)", +"db404803": "assetToStats(uint16,uint256)", "db40e896": "stopExchange()", "db40ed24": "WeGoldToken()", +"db411ae0": "defineInterest(uint256)", "db412f39": "preSaleDelivery(address,uint256)", +"db41f804": "ComplianceStatus()", "db420fe3": "serverAddress()", "db422e0b": "sendTokensAndRefund(address)", +"db426682": "getExchangeCostSell(address,address,uint256,bytes)", +"db427f68": "convertForPrioritized(address[],uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"db42a3eb": "OLD_SUBSCRIPTION()", +"db4310a0": "updateTaxToken(address)", +"db433ba8": "index2emissionProvider(uint256)", +"db43cf92": "preciseMul(uint256,uint256)", +"db43d819": "updateUniswapRouters(address[],bool)", +"db4416e2": "facebook()", "db447c04": "getPurchaseDetail(uint256,uint256,address)", +"db44fe07": "isBurned(uint256)", "db45479b": "closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)", +"db454a51": "enrol(address,uint256)", +"db4563d3": "fmk()", +"db456439": "modifyTreasury(address)", "db456f77": "extraReceiverByIndex(uint256)", +"db459d0c": "buyWax()", "db45a30f": "buyPlanet(uint256)", +"db460f3f": "TokenToEthSwap(address,uint256,uint256,uint256,uint256,bool,bool)", +"db463b55": "withdrawAllTicket()", +"db4749cc": "totalEarnedETH()", "db475044": "SHITcoin()", "db478d08": "levelTwoBonus()", "db47b9c9": "isTokenSupported(address,address)", +"db47f1c1": "hland()", "db480704": "HCTToken()", +"db4819fb": "allTimeMinted()", "db4844f3": "setRequestFailed(uint256)", +"db487103": "tokenProofs(address,address,uint256)", +"db487d9e": "_voteEndDate(uint256)", "db491d49": "ContributionReward()", "db491de9": "daysToUnfreeze(address,address)", "db491e80": "getNote(uint256,uint256)", +"db4944e0": "exchangeExactIn(address,uint256,uint256,address,address,uint128)", +"db49b8ec": "withdraw_aETH_beta(uint256)", +"db49ca45": "logVestingAllocation(address,uint256,uint256,uint256,uint256)", +"db4aba10": "approve_338(address,uint256)", +"db4acb64": "importGlobal(address,string,string)", "db4ad99f": "constructUserIdentity(address,string,uint32,string,string,bytes32,bytes32,uint8)", +"db4af8b7": "replaceOrders(uint256[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])", +"db4b066e": "setCdlContract(address)", +"db4baec9": "putihkan(uint256,uint256)", "db4bb866": "bitskiToken()", "db4bd421": "trackable_record(address,uint256)", +"db4bea00": "getVesting(bytes32)", +"db4c15bb": "presale(address)", "db4c528b": "increasePositionOnBehalfOf(address,bytes32,uint256)", +"db4c545e": "initCodeHash()", +"db4c6bd4": "ksj()", "db4cacec": "Other()", "db4ce763": "DTRExpensiveWallet(uint256)", "db4cf8e6": "getAccountAddress(uint256)", +"db4d0ae0": "getMarginLevels(bytes32,address)", "db4d1296": "confirmAdminTx(uint256)", +"db4de8d8": "interestRatetoUser()", +"db4e0f73": "callInner(address)", "db4e1df5": "setBTTSToken(address)", +"db4e68fa": "claimTotalReserves(address)", +"db4e8a6f": "Created(string,address)", "db4ecbc1": "CONTRACT_ADDRESS()", +"db4fd010": "NetworkMemberAdded(address,address,bytes32)", +"db4fec88": "flashRepay(uint256[5],address[3],bytes,uint256[2])", +"db4ffbef": "tim(address)", +"db5009a5": "delWhiteAccount(address)", +"db512e85": "isLeader(address)", +"db516b55": "setCountOverTime(uint256)", "db518db2": "withdrawFor(address,uint256)", "db51d62b": "OpenTime()", +"db522bd4": "UniswapV2Router01()", "db52e130": "saveString(string)", +"db52f420": "convertWETHPair(address,address,uint256)", "db530222": "nextEndTime()", "db536d2f": "getDefaultKey(address)", "db5370c3": "EEAcoin(address)", +"db53864f": "he3TokenAddress()", "db543fdc": "adviserAndBounty()", +"db54702c": "LOG_PolicyDeclined(uint256,bytes32)", "db5517b0": "snapshots(address,uint256)", "db5549d8": "TokenBurn(address,uint256,bool)", +"db556458": "addArtworkFile(uint256,string,string,uint256)", "db55bd2d": "authoriseNextAction()", +"db55d584": "checkBalanceSNXDirect(address)", +"db56313e": "getCrossForkId(string)", "db56702b": "firstWeekEndTime()", +"db56755d": "totalTokensToMintPerEpoch()", "db56c29d": "Billionstrader()", "db56d26c": "ChangeFiliate(address)", +"db56dfe5": "change_creator(address,address)", "db57c429": "createPromoGameItem(address,string,uint256,uint256)", "db5861ed": "ULA(uint256,string,string)", +"db588ec2": "unminingFeeDenominator()", "db589907": "setCosts(uint256,uint256)", "db589bbe": "getInternalDrawings(uint256)", "db59190d": "C1(uint256)", +"db595b3b": "apply()", +"db59ab3a": "Staking(uint256,address[],uint256[])", "db59c052": "getFreeTokens(uint32,bytes32,bytes32,uint8)", +"db59e892": "applyt()", "db5a2778": "adminAddCountry(string)", +"db5a5d99": "getUniswapDAIExchange()", "db5ad407": "setData(bytes32,uint256,uint256,uint256,uint8[])", "db5b4183": "oracleOutcomes(bytes,address)", "db5b5799": "setClientSupply(address,uint256)", +"db5b5a8a": "shut(uint256)", "db5b7635": "TokenMacroansyPower()", +"db5b78ad": "pendingGgx(uint256,address)", +"db5c17b1": "Message(uint256)", "db5c92a7": "getTokensInUSD(uint256)", "db5c9442": "TRIAL()", +"db5ca09d": "_feeLevel1()", "db5cf9de": "getSpaceshipProductClassByModel(uint16)", "db5d855b": "getReceiptId(address,address,uint256)", +"db5dd710": "viewTokenValueInEther(uint256)", "db5df447": "redemptionPriceCalculate(uint256)", "db5eef61": "PredictionMarket()", +"db5ef6c6": "addproduct(uint256,string,uint256,uint256)", "db5f2f31": "calcExchangeRate()", "db5f5d7c": "usedAPI()", +"db5f853e": "requireIsNotPaused()", +"db6039b3": "OldEthrimObj()", "db606931": "pointRootNode(address)", +"db613e81": "getAccount()", +"db6149ce": "schemes(address)", "db618c08": "TestAuditor()", +"db61c76e": "buy(address,uint256,address)", +"db61e317": "stablePrice()", +"db61f978": "setOracleIpfsHash(string)", +"db620485": "continueInvesting()", "db623bd5": "ErrorSendingETH(address,uint256)", "db624887": "W()", "db62df0e": "likeTrack(address,bytes32)", +"db62ec59": "GetMinMaxETHInvest()", +"db63323e": "getSupplyToDebtFor(address,address,uint256)", "db6380ec": "tokenCapForMainICO()", "db638e51": "resetUserRefBalance(address,address)", "db63e149": "EmployeeWallet(string)", "db641ab4": "Game_balance_in_Ethers()", "db642bce": "GoddessToken()", +"db647749": "getCanReportEvent()", +"db647b76": "rewardLiquidityProviders()", +"db661100": "escrowedProjectBalances(uint256)", +"db663865": "buyEggs(address)", "db6648c0": "collateralisation(address)", +"db6690a9": "stake3m(uint256)", +"db66dfa9": "MasterMinterChanged(address)", "db66ef59": "getPublicKeyN()", +"db6711e3": "commitmentMinWait()", "db6727c1": "myBitFoundationPercentage()", +"db674dc9": "getAllBoosterTypes()", +"db6754ed": "pancakeswapRouter()", +"db67c4d5": "collateralIds(address)", "db680e3d": "getMeterInfoByMonth(uint8,uint256)", +"db6816a8": "land2BarRate(uint256,address,uint256)", "db681e1d": "GameScored(bytes32,int256,int256,uint256)", "db681e54": "getGenerationForCall(bytes32)", "db681e9f": "sendRefund(uint256)", +"db68afa4": "Refunding(address,uint256)", +"db6900fa": "setFailOverStakeContract(address)", "db6997ae": "getCitiesData(uint256[])", "db6a3652": "addOrder(address,uint256)", "db6aef35": "amountOfWorkpointQueue()", +"db6b14de": "addSupporter(bytes32,address)", +"db6b2087": "OrderCancelled(uint256,uint256,bytes32,uint256)", "db6bb289": "Zygoma()", "db6bbeb2": "abx_token()", +"db6be044": "setrefRate(uint256)", "db6be534": "end_ts()", "db6be871": "getAmountByCoupon(bytes32)", "db6bed22": "addPresaleWallets(address[],uint256[])", @@ -125639,77 +229962,156 @@ "db6c71d6": "rspContract(address,uint256)", "db6c7286": "CTokenGB()", "db6c9416": "AgoraToken()", +"db6d7da3": "getCurrentAddressCount()", +"db6e30bc": "calcSwapErc20ToUniverseInputs(address,uint256,address[],uint256)", +"db6e3c98": "calcActualAmount(address,address,uint256,uint256,uint256,uint256)", +"db6f0045": "ContributionByToken(address,uint256,address,uint256,uint256,uint256)", "db6f1e74": "getUser(uint32)", "db6f7537": "getPOOL_edit_22()", "db6f9deb": "rewarded(uint256,address)", "db6fcf01": "is_destroyed(uint256)", +"db6fff8c": "setMaxPerTx(address,uint256)", +"db7015a1": "qhash(uint256)", "db7057fb": "rngId()", +"db708ce7": "pendingMoutai(uint256,address)", +"db70cf6e": "mintAndCall(address,uint256,address,address,bytes)", +"db7110c9": "requireReserveNotFreezedInternal(address)", +"db71410e": "checkSlippage(address[],uint256[])", "db714efe": "getBlocks(uint256,uint256)", +"db716042": "CORE_MULTISIG()", "db71c776": "setRateIcoPreICO(uint256)", "db71d8b6": "FEE_SELECT_LRC()", +"db71eaff": "asgardAllowance(address)", "db723e73": "personalMincap()", +"db7242bd": "pool7userList(uint256)", "db72496f": "cancelSubscription(uint256,uint256)", +"db7266ce": "Requested(bytes32,address,bytes4,uint256,address,bytes32,uint256)", +"db72a759": "SalePrice()", +"db72d56f": "getTotalPriorImplementations(address,address)", +"db736183": "getStakingPosition(address,address,address)", "db737c78": "getToken(uint256,bool)", "db73bfce": "gameInfo()", "db7400a5": "createAppInstance(bytes32,bytes)", +"db74559b": "referralCount(address)", "db747f21": "setOraGasLimit(uint256)", "db74847d": "distributeTratok(address[],uint256[])", +"db748775": "endPage()", +"db749772": "getVerifySignatureResult(address,address,uint256,uint256,bytes32,bytes32,uint8)", "db74c27a": "backRedPillTokenOwner()", +"db74dc37": "transferLocking(address,uint256,uint64)", +"db74fa36": "getTransferGroup(address)", +"db74fb37": "oldSprkAddress()", +"db754422": "claimMarketsProceeds(address[],address,bytes32)", +"db7563e6": "sandwiches(uint256)", "db75dd5f": "AQBToken()", +"db75ec48": "setLGEAddress(address)", +"db7617c4": "rewardPerTokenByPID(uint256)", +"db762bc9": "lockInfo()", +"db767865": "isAfiComp()", "db76790f": "setAdvisorWallet(address)", +"db7696ac": "icoThirdWeekRate()", "db76e9c2": "setMemberLevel(address)", "db77032d": "RATE_SALESTAGE4()", +"db770d72": "oneString(string)", +"db774c79": "bidding()", "db775041": "donation(bytes32,uint256)", "db775410": "setTypedJackpotWinner(address,uint256)", "db7757cf": "valueRaised()", +"db77cae2": "helloMessages(uint256)", +"db78c0e8": "allWinners(uint64)", "db78d0ce": "getAirdropAtSnapshot(address)", "db78f5ef": "withdrawOnBehalf(uint256,string,uint256,uint8,bytes32,bytes32)", +"db7941ab": "closeUSDCVault(uint256,uint256)", "db79a65f": "resetUserWhiteListAmount()", "db79e673": "getTradeOfferRecipientItems(uint256)", "db7a0855": "MZToken()", "db7a2f42": "projectAgent()", +"db7a3c0f": "pendingHarvest()", "db7a4605": "getWallets()", +"db7a6cf8": "cancelNewAsk(uint256,bool)", +"db7a6d90": "getContractProxyAddress(string)", "db7a80f8": "getContributionUSD(address)", +"db7ac399": "getTotalDepositedAmount()", +"db7b1ca4": "addDevAddresses(address[])", +"db7b363c": "claimERC721(uint256,address,uint256,uint256,address,bytes,address,bytes,address,uint256)", +"db7b373e": "baseDecimal()", +"db7b69ce": "getAdjConstant()", +"db7b8049": "transferOwner(uint256)", "db7b87ff": "init(address,uint256,bytes32,uint256,uint256,uint256,bool,bool,address)", "db7bc073": "refundWhenNotClosed(address)", +"db7bdff6": "updatePresetPaths(address,address,address[])", +"db7c2314": "updateGiver(uint64,address,string,string,uint64)", +"db7c4e57": "testCheckValidatorSignatures(address[],uint256[],uint8[],bytes32[],bytes32[],bytes32,uint256)", +"db7c632c": "nutsPerEpoch()", +"db7c695a": "regtokens(address)", "db7ca38a": "XaurmProxyContract()", +"db7d22da": "SearchFileTransferProofWithTime(bytes32)", "db7d2665": "FundTransfer(address,uint256,address)", "db7d9065": "assignedAmountToCooperativePartner()", +"db7dffee": "hasher(address,uint256,uint256)", +"db7ec1ae": "calculateRepaymentAmount(uint256,uint256,bool)", "db7ed9e7": "addAssessorToPool(address)", "db7ef562": "_2_nation()", "db7ef7c6": "verifyEscrowVendor(uint256,address)", "db7f1e6b": "getInitialEnemyCombination()", +"db7f521a": "setStabilizer(address)", +"db7fbc86": "contractaddress()", +"db7fd408": "mint(uint256,bytes)", "db7fea95": "WALLET_T8EX_RESERVED()", +"db802a32": "openLockGemAndDraw(address,address,address,address,bytes32,uint256,uint256,bool)", "db803a86": "post(string,address[])", "db80813f": "set(bytes32)", +"db80821d": "getBackupEffectiveDate(address,uint256)", "db80a787": "emitCourtUpdated(address)", +"db80eb09": "spentAct(address)", "db80fbc9": "balanceOfLockup()", +"db819422": "verifiedRefs(string)", +"db81e9e1": "govs(uint256)", "db82967c": "createUsingProxy(address,bytes)", "db8298f3": "_commissionTarget()", "db833e3a": "sellShares(bytes32,uint8,uint256,uint256)", "db83694c": "getSaleInfo()", "db8374ee": "buyOracleFor(bytes,address,address)", "db83d02f": "VREO_SALE_CLOSING_TIME()", +"db83f59d": "startParty(address[],address[],address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "db84252c": "tokenCreator()", "db852ee7": "pieceSold(address,address,uint256)", "db856759": "depositOldTokensFor(address,uint256,address)", "db856f28": "_updateCard(address,uint256)", +"db8582dc": "willsellFindSpot(address)", +"db85a0c2": "fetchMex(address)", +"db85bcb9": "BuyCopper(address,uint256,uint256)", "db85bd78": "registerTraderAccount(address)", +"db85d59c": "extensions(uint256)", +"db86d25f": "_availableManagerFee(uint256,uint256,uint256,uint256,uint256)", "db86d850": "transferGoo(address,uint256)", "db87cbcc": "GetPermissionsList(address,address)", "db88176f": "getQuestion(uint256)", +"db881d91": "setWeiPerMinToken(uint256)", "db8850bc": "_merge(uint256,uint256)", "db886f23": "Marketing()", "db89c044": "reputationOf(address)", +"db89c70c": "swapLP(uint256,uint256,uint256)", "db89edb2": "BitDailyBot()", +"db89f1c4": "schoolList(uint256)", "db8a61d4": "APP_BASES_NAMESPACE()", +"db8ac95a": "setMinNetworkTokenLiquidityForMinting(uint256)", +"db8b2c3d": "LogRefundInvalidFundsLocked(uint256,uint256,uint256)", "db8b6ccf": "addSubjectMatter(string)", "db8b7fae": "transform(address)", +"db8bb3a1": "swapPaths(address,uint256)", "db8bcec4": "MAX_TIME_RANGE_COUNT()", +"db8c5eb4": "eatSandwich(uint256)", +"db8cabfb": "DEATH()", +"db8cb286": "transferOutDevFee(address,uint256)", "db8cee5e": "_generateRandomDna(uint256)", "db8cfa5a": "HAVtoUSD(uint256)", +"db8d1ffc": "isWithdrawBonus(address)", "db8d55f1": "getFees()", "db8d7c39": "disableRestriction()", +"db8dc059": "getlength(address)", +"db8e09f8": "rebaseDownAmount()", +"db8e54bd": "setGrgProxy(address)", "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)", @@ -125718,298 +230120,536 @@ "db8f2f75": "EthStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", "db8f5a35": "feesAndBountySupplyRemaining()", "db8f7fb5": "preDiscountPercentage()", +"db904862": "getPromoPack()", "db9078b4": "CheckGenChip(uint32)", "db9090a7": "devTokenWithdraw(uint256)", +"db90e83c": "getIDBinIndex(uint256)", "db91095e": "LVXToken()", +"db913236": "removeMarket(address)", +"db914192": "depositToDevFood(uint256)", "db91774c": "setMinValue(uint256)", +"db922843": "swapExactETHForTokensCustomx(uint256,address[],uint256)", "db9254a5": "_buy(address,uint256,uint256)", +"db92db0a": "CASHOUT_REQ()", +"db92ed35": "isSupplyLessThan100Thousand()", +"db92f7f0": "timelockTotalSupply()", "db9311c2": "getBlocksToNextRound()", +"db937480": "lastTurboUpdate()", "db93f375": "startTokenVotes(address[],uint256,uint256,uint256,address[])", +"db943dd0": "userDetails(address,address)", +"db943fa1": "setupBinaryOptions(address)", "db946a11": "PlayStationChain()", +"db94d92e": "slotReward(uint256)", "db958f18": "FootCoin(uint256,string,string)", "db95937d": "orderContractorProposal(uint256)", "db967d05": "endOfPhase3()", +"db968327": "cZSwapMemory()", +"db96f1e7": "userV1ItemNumber(address)", +"db970340": "revokeDeployerApproval(address)", +"db972038": "setBlacklistForShardPool(uint256)", +"db973986": "IsTransferable(address)", +"db9771f5": "setMainAddress(address)", +"db977791": "node_address()", +"db97a93d": "transferSender(address,address,address,uint256)", "db97c24d": "uzziToken()", +"db97eb44": "lend(bytes32,bytes,address,uint256,bytes,bytes)", +"db983d57": "getExpectedRate(address,address,address,uint256,uint8)", +"db986502": "calculateGroupDividendsForTimestamp(address[],uint256)", "db98abd8": "testThrowCancelSellOrderTwice()", "db98d73f": "setRecordAddress(address)", +"db995608": "unpaidETH(address)", "db99800c": "fetchCreatedOrdersForMerchant(address)", +"db9996f4": "valuePoolMiningFeeDenominator(address)", "db9a21bb": "CreateRZM(address,uint256)", +"db9a8729": "removeLiquidityETHWrapper(address,uint256,uint256,uint256,address,uint256)", "db9abbd4": "arr(bytes32,bytes32)", +"db9b3d3f": "NetworkMemberRemoved(address,address,bytes32)", "db9b6775": "testMintThis(int256)", "db9b7170": "setApproval(address,bool)", +"db9bcc48": "devBal()", +"db9bee46": "getDisputeManager()", +"db9c0c21": "collateralToTokenSelling(uint256)", +"db9c1e2b": "lastHatchPrice(address)", +"db9c27ac": "exchangeSynthsForDOWSAtRate(uint256,uint256)", +"db9c778b": "setClosePositionFeeDecay(uint256)", "db9cc410": "createAsset(string,uint256)", "db9cc99d": "AuctionCancelled(uint256,uint256)", "db9cd8d3": "tab()", "db9d28d5": "numDigits(uint256)", +"db9d3d9a": "restartCachedNAV(bytes32)", "db9d5d31": "AdminRemoved(address,address)", +"db9d5e46": "BonusFromGet(address)", "db9dfb35": "newTeamOnEnd(uint16,uint64,uint64,uint64)", +"db9e39e5": "sendkushOGToFund(uint256)", +"db9e4c67": "C15(bytes)", +"db9ed47e": "getTokenAddr(uint16)", "db9f16a8": "takeOffItem(uint256,uint8)", +"db9f2c3d": "air_drop()", "dba01cfe": "distributePENT(address[],uint256,uint256)", +"dba03d81": "transferMinterAdmin(address)", "dba07858": "_removeFromList(address[],address)", +"dba0d296": "delegateDeposit(address,uint256,uint256,uint256,uint256)", "dba0e9bb": "ethertoteDevelopmentWallet()", +"dba0eb91": "setDualRewardsDistribution(address)", +"dba11a6d": "callfee()", +"dba140ae": "inflateRoundsWithDonor(uint8,address)", "dba1a5f9": "allocateFunds()", "dba1ac3d": "getEnforceRevisions(bytes20)", "dba21586": "ProofOfTrevonJames()", "dba21657": "askForEther(uint256)", +"dba21d8e": "withdrawReferrals()", "dba22cb0": "transferPlanet(address,uint256,uint256,uint256)", "dba232e3": "POPToken()", "dba2a570": "_tune(uint256,uint256)", +"dba2d85d": "rebalanceWithGST()", "dba2d875": "forcedRefund()", "dba31911": "bookSpaVisit(uint256)", +"dba31ad8": "beijing()", "dba33c03": "saleTokensCents()", +"dba3b487": "convertTo(address,address,uint256,uint256)", "dba3e704": "setMinimumContribution(uint256)", +"dba43282": "borrowAmountIsDustExplicit(uint256,uint256,string)", +"dba4b784": "revealSpan()", "dba4c85c": "GetWithdrawBalance(address)", +"dba50167": "NewTokenSellRequest(address,string)", +"dba53c52": "returnExtraTokens()", "dba56cb8": "buyTokensFromContract(address,uint256)", +"dba58d69": "AddPrivatePurchaser(address,uint256,uint256,uint256)", +"dba5a7f5": "createGlyph(uint256)", "dba5e917": "SelfDestruct()", +"dba62b1a": "getTimeOfLastSuccesfulDKG(bytes32)", +"dba6874b": "getPreviousAwardedTotalEth2Amount(address)", +"dba69522": "StarBasePurchasedWithEth(address,uint256,uint256,uint256,uint256)", "dba6f7be": "verifyCreateSig(address,uint256,uint256,bytes32,bytes)", "dba72a4e": "ICONIQ_SALE_OPENING_TIME()", +"dba7ab6c": "utterance()", "dba7ef7d": "Bookie(address,address)", "dba86ab6": "claimCardboard(uint64)", "dba8be6e": "chickenTokenDelegator()", +"dba8fc61": "query1_fnc(uint256,string,string,function,uint256)", "dba989ca": "_bonusTime2()", "dba9a8a2": "setTrCut(uint256)", "dba9daab": "pickBigWinner()", +"dbaa159d": "pay_relayed(address,uint256)", +"dbaa3c6f": "getLuckPool()", +"dbaa9d89": "show_Available_Token_For_Selling_OwnerShip_only()", "dbaaa2dd": "MIN_CONTRIBUTION_PRESALE()", "dbaab3e1": "setMarketingAdmin(address)", "dbaad1e5": "ownerDied()", +"dbaad32f": "observationIndexOf(uint256)", "dbab2f97": "merge(address[],bytes32,bytes32,int256,int256)", +"dbab4f09": "getConway(bytes18)", "dbab7f1b": "UserInfoContract()", +"dbabd138": "setCofixRouter(address)", "dbac248b": "MannaCoin()", +"dbac26e9": "blacklisted(address)", "dbac4cbf": "GetContractStateTerminatedSecDep()", +"dbac7329": "TimelockAllowed(address)", "dbac7806": "milestone()", "dbacc237": "holderOf(uint256)", +"dbacd2a1": "setReward(address,address,uint256,address)", "dbad21af": "tickets1kprice()", +"dbadb5fc": "depositMR(uint256,address)", +"dbae3a5d": "addLockedBalance(address,uint256,uint256)", +"dbae5e5e": "ActivateSubRound(uint256,uint256)", "dbaea636": "UVPToken()", "dbaec0fd": "createPattern(bytes32,string,address,string)", "dbaf023d": "LogoVote()", "dbaf2145": "requestWithdrawal()", +"dbaf2b84": "setTrxAddress(string)", "dbaf5ce7": "changeRatesToken(uint8,uint256)", "dbaf7247": "getValueByIndex(uint256)", "dbafd0f2": "getTotalSeconds()", "dbafdbb6": "setBalanceLimit(address,uint256)", "dbb094ef": "Crowdsale(address,uint256,address,address)", "dbb173d9": "test_updateKey_decreaseNoHint(int256)", +"dbb1815d": "beneficiaryIndex(address)", "dbb183c2": "setAuthorizedLogicContractAddress(address)", "dbb24554": "updatePriceDenominator(uint256)", +"dbb24c04": "investorWithdrew(address)", +"dbb32599": "checkAndWithdraw_sETH()", "dbb34667": "getDsoStake(uint256)", "dbb3cef3": "developer_update_Terms_of_service(string)", "dbb47d77": "claimPlayerWinnings()", +"dbb4c1b4": "exitArb(uint256)", +"dbb51e3e": "uniswap_to_uniswap(uint256,uint256,address[])", "dbb56384": "encodeUtxoPosition(uint256,uint256,uint256)", "dbb57a4b": "transferOne(address,uint256)", "dbb61238": "maxDelay(uint256)", "dbb62f24": "setDataMining(address)", "dbb633f1": "ownerWithdrawalDate()", +"dbb686cf": "SCBAddress()", "dbb72f67": "nullify(address)", +"dbb79909": "_eccAddress()", +"dbb7dc95": "withdrawForUser(address,uint256,address,uint256,uint8,bytes32,bytes32,uint256)", "dbb80e42": "allTokensLength()", "dbb82429": "_randByRange(uint256,uint256)", "dbb833df": "investWithoutId()", "dbb8a305": "getBetName(uint256)", +"dbb8abac": "batchIncrementBalance(uint256)", +"dbb8af18": "unstakeAndClaimReward()", +"dbb8cc46": "currentDayIndex()", +"dbb9869c": "setRabbitSirePrice(uint32,uint256,uint32,uint256,uint32,uint256,uint32,uint256,uint32,uint256,uint32,uint256)", "dbb98cae": "limit7()", +"dbb9928c": "userVote(address,uint256)", "dbb9deda": "goNext()", +"dbba0f01": "transfer(address,uint256,address)", "dbbabdfe": "getnum(uint256)", +"dbbae0f3": "userInvested(address)", +"dbbb06d2": "exp2(int256)", "dbbb119c": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", "dbbb206f": "buy(address,address,address,address,address)", +"dbbb33ef": "recycleExact(uint256,uint256,uint256)", +"dbbbb176": "SetCap(uint256,uint256)", "dbbbe8df": "transferByCrowdsale(address,uint256)", +"dbbc392d": "LogServerRequestedEnd(address,uint256)", +"dbbc4a57": "FASTGAS()", "dbbc6fcc": "isPayableEnabled()", "dbbc853b": "tokenURISuffix()", +"dbbcaa97": "gameIDs_(address)", +"dbbcdf55": "approve_615(address,uint256)", "dbbd3a71": "addClaim(address,bytes32,string,string,address,uint256)", "dbbd4865": "isEarlyBirdsStage()", +"dbbd702e": "REDFINE()", "dbbd78da": "getAccountNickname(address)", "dbbd7934": "findItem(address[],address)", +"dbbd85a6": "totalJurorsActiveBalanceLimit()", +"dbbd8c05": "approve_831(address,uint256)", "dbbd9a04": "ALLOC_MAX_PRE()", "dbbdad8c": "generateReleaseTokensSchemaHash(address,address,uint256,bytes32)", "dbbdae63": "updateSeller(address)", +"dbbdd935": "getUserLiquidity(address)", "dbbdf083": "register(uint256,address)", "dbbe2ff9": "setCirculationShares(string)", +"dbbe9379": "findBlockRefefrrer(address)", +"dbbed6b2": "forPAPR3KAholdersv1(address)", "dbbf01b2": "setAddUsers(address,address,string,string,uint256)", +"dbbf8c5a": "stakedFor1()", "dbbfcd7c": "getCOR()", "dbc02821": "XTVNetworkContractAddress()", +"dbc0a675": "payoutDenominator(uint64)", "dbc0c085": "teamMultisig()", +"dbc0e635": "nuancedBinaryTemplateId()", "dbc139be": "LogMigration(address,uint256)", "dbc1f226": "suicide(address)", +"dbc21d9a": "getVin(bytes32)", "dbc27799": "pendingNewRound()", "dbc2783d": "DoNotDeployThisGetTheRightOneCosParityPutsThisOnTop()", +"dbc2bd05": "pendingCONNECTx(uint256,address)", "dbc2d042": "consumerAddress()", "dbc2ef49": "getNotUsedToken_()", "dbc38940": "executeTxn(uint256)", +"dbc3e35b": "getRecipientsLength()", +"dbc41b11": "RoundMyDonation(uint256,address)", "dbc45228": "newProposal(address,uint256,bytes,bytes)", "dbc488e2": "ESlotsCrowdsale(address)", +"dbc4c7ae": "totalFstBoughtValue()", +"dbc4cc2b": "canAsk(address)", +"dbc4feb6": "totalPoint()", "dbc53c07": "read(uint16,uint16)", "dbc56297": "claim(address,bytes32,bytes32,uint8,bytes32,bytes32)", "dbc57971": "getIcoStatus()", +"dbc58561": "downwardCounter()", "dbc5d002": "sendQuery(string,uint256,uint256)", "dbc65f85": "preBuyPrice2()", "dbc69521": "totContribution()", +"dbc6f548": "affiliated(address)", "dbc7464b": "getEquippedItemId(address,uint256)", "dbc837c5": "insurer()", +"dbc866ce": "priceOrRandom()", "dbc8817d": "GOLDENRATIO()", "dbc91396": "cancelOrder(uint128)", "dbc91ed1": "subset(string,uint256,uint256)", "dbc933bc": "p_withdrawDevHoldings()", +"dbc938d8": "distributeEth()", +"dbc974d7": "gettotalsold()", "dbc9ef42": "_removeAuction(uint40)", "dbca1207": "getLastSeed()", +"dbca587c": "setBXHPerBlock(uint256)", +"dbca81c8": "NewEra(uint256,bytes32,uint256)", +"dbcab96c": "mintTeamAndAdvisorsPart8(uint256)", +"dbcac1ce": "activate(address,uint256,bytes)", +"dbcb401a": "testUnavailableActionsWhenReturned()", "dbcbaca4": "investorInfo(address)", "dbcbb362": "setTransperRun(uint256)", "dbcc4658": "getSmartContractByPosition(uint256)", "dbcc6caf": "second_release(uint256)", "dbccb926": "CreatedToken(address,uint256)", +"dbcd1ca4": "yesNoShareBalances(address)", "dbcd258d": "blocksPerHour()", +"dbcd8128": "G_AllEth()", "dbce1ff7": "referralRateInviter()", "dbceb005": "split(uint256)", +"dbceb1b3": "withdrawDonateWEI(address)", "dbcf0531": "ContractFullfilled(address,int256)", "dbcf194a": "GetInventoryCount(address)", +"dbcf6cb4": "Charity(uint256,address)", +"dbd0064c": "getClaimsTokenCA(uint256)", "dbd01de1": "cluster()", "dbd05767": "RBA()", +"dbd06c85": "currencyKey()", +"dbd0cf84": "mediatorActiveBetsIndexes(address,uint256)", "dbd0e1b6": "getSeller()", "dbd16774": "IGMathsContract()", "dbd19619": "round_earnings(uint256)", +"dbd1a08e": "setImprovementContract(address)", +"dbd1b856": "mintBCsByCardName(address,string,uint256)", "dbd1be77": "getDrone(uint256)", +"dbd1c08f": "getTotalEarned()", "dbd1df92": "setTitulaire_Compte_1(uint256)", "dbd229ff": "totalSupplyMarket()", "dbd2a4c5": "promoterInfo()", "dbd2ac60": "distributeCallback(uint256,uint256)", +"dbd2b1bc": "depositETHtoContract()", "dbd3100e": "getBuilding()", "dbd3313e": "PizzaPoll()", +"dbd3a6a7": "weeksSinceLastIssuance()", +"dbd3a87d": "BONUS_MULTIPLIER_1WEEK()", "dbd3c372": "safeMulticastTransfer(address[],uint256[],uint256[],bytes)", "dbd3cd62": "withdrawPayment(uint256)", "dbd3d021": "findNextSecond(uint256,bytes2)", +"dbd4053a": "Holdplatform_Airdrop(address,uint256,uint256,uint256,uint256)", +"dbd41799": "tName()", "dbd42da5": "ranked()", "dbd4a422": "synthetixState()", "dbd4a8ea": "setBase(address,uint64,bool)", +"dbd4afc8": "setMaxBetCount(uint256)", "dbd54b62": "setMasterAuth(address)", "dbd55fb3": "ACTION()", "dbd594bb": "FoundsTransferd(address,uint256)", "dbd5ef6d": "setFeeConfig(uint256,uint256,uint256,uint256)", "dbd64ae9": "closeSale3()", +"dbd64bf0": "maxBetFromProbability(uint256,uint256)", +"dbd65ecc": "setDistributor(address[])", +"dbd6636e": "setKushAddress(address)", +"dbd695f3": "addTrustees(address[])", "dbd6da8c": "isUidSet(string)", "dbd6f5c1": "allocationAddress()", +"dbd722a6": "_getKey(bytes32,address)", +"dbd727fe": "__MappingToken_init_unchained(address,uint256,address,address)", "dbd760ca": "PriceThreeDisable()", "dbd7fd13": "saleMilk()", +"dbd83e83": "VestedTokensFor(address,address,uint256)", "dbd84659": "receiveTokenByClientAccount(string,uint256,address)", "dbd848e3": "ICO_Ended()", "dbd8987c": "contractFeePercentage()", "dbd8c25f": "BasicTokenImpl()", +"dbd9135e": "userWithdrawCurrentBonus()", "dbd91792": "multiowned()", +"dbd94482": "LONG_EXECUTOR()", +"dbd96554": "hireAndAuthorize(address,address)", "dbd9a4d4": "setAllowances()", +"dbda7e7d": "claimAndStake(uint256)", +"dbdad432": "getVotingPower(uint256,address)", "dbdb8b56": "eosGAS()", "dbdb96c2": "updated_policy_payload()", +"dbdbb51b": "etherBalances(address[])", "dbdbbb28": "getRoundBonusRate()", "dbdc275d": "createB()", +"dbdcebde": "createToken(address,uint256,uint256)", +"dbdd0aab": "getParentId(uint256)", +"dbdd0ab9": "setGroupingThreshold(uint256)", "dbdd5ae6": "actOnBehalf(bytes,uint256,uint8,bytes32,bytes32)", "dbdd5d74": "swapsFor(address)", "dbddcdb7": "getScouponBalances(address)", "dbde1988": "transferFromWithoutReward(address,address,uint256)", "dbde2f19": "min(uint8,uint8)", +"dbde5222": "validateParams(uint8,uint8,uint16[3],uint8[4],uint8[2],bool)", "dbdef054": "setFinalizeAgent()", +"dbdf3572": "setPeerInvite(address)", +"dbdf70aa": "FirstQuantDef()", "dbdf7fce": "resetCounter()", "dbdf8538": "_emitWorkStarted(uint256,uint256)", +"dbdf9b8e": "Burn(address,uint256,address)", "dbdff2c1": "getRandomNumber()", "dbe01790": "getAllHpbNodes()", +"dbe03a8b": "feeManagerContract()", +"dbe0901f": "setAllowanceForPoolToken(address,uint256,uint256)", +"dbe0e67c": "getKstPerBlock(uint256)", "dbe1053d": "sendEthBackToUsers()", +"dbe17923": "totalAuthorizedForPayment()", +"dbe17a58": "changeRootHash(bytes32)", +"dbe1b998": "BalanceUp(address,uint256)", "dbe201c7": "getAllBidsByAdslot(uint256)", +"dbe21427": "crowdSaleClosingBlock()", +"dbe2193f": "setMintRate(uint256)", "dbe2bc84": "_suspendMarket(address)", "dbe2c85b": "checkFiscalVerify(bytes32)", +"dbe2dc9b": "getAndUpdateNetworkFee()", "dbe2e296": "pushToPot()", "dbe3010c": "WINNER_SHARE()", "dbe3071a": "Kitchen()", "dbe3117a": "tier2Timestamp()", +"dbe32e54": "withdraw_fee()", "dbe35007": "getAuctionsLength()", "dbe3e92f": "provenanceOf(address)", +"dbe4017f": "OptimalSell(address,uint256)", +"dbe47ed7": "__createVaultFor(address)", +"dbe49d31": "reward_epoch()", "dbe54524": "set_CWC_Address(address)", "dbe55e56": "platformAddress()", "dbe587b9": "CashPokerProPreICO()", +"dbe59809": "joinElection(uint64,uint64,string,string,address)", "dbe5bab5": "getOpenOrders()", "dbe5ca78": "POAP()", "dbe5fe9d": "setMaxCoinSides(uint8)", +"dbe60438": "betList(uint256)", "dbe6c02f": "isOwnerOrOperator(address,address)", +"dbe6e987": "beneficiaryShares(address)", "dbe705ea": "fetchCreatedOrdersForMerchantByAdmin(address)", +"dbe74364": "getDots(address,address,bytes32)", "dbe7e3bd": "claimed(uint256)", +"dbe83e08": "newRewardStartBlock()", +"dbe84d4d": "depositAmount(uint256,uint8)", +"dbe923ce": "setBondsOwner()", +"dbe93451": "getRewardsAmount(address)", "dbe992af": "updateEntry(uint256,address,uint256)", +"dbe9b0e1": "getAnimalByHash(uint256)", +"dbe9de9d": "iUniswapV2Factory()", "dbe9eebf": "getPricePointsLength()", "dbea52d8": "lotteryPrice()", "dbeab275": "createRoutingCode(bytes32)", "dbeabd21": "getPplsAddr(uint32)", +"dbeaf8dd": "CypherShop1155()", +"dbeb61c7": "fundsMultisig()", +"dbeb86b0": "gg16(int16)", +"dbebbfa9": "invest_withdraw()", +"dbec0351": "EB()", +"dbec4e88": "unlockSdc(address)", +"dbec6c89": "preSaleTokens(address)", "dbecc372": "Example(uint256)", "dbecfb25": "koth_v1b()", "dbed1e88": "getUnlockTime(address)", "dbed3a30": "GamePoolAddress()", +"dbedc815": "mulFloor(uint256,uint256)", "dbedf9e4": "TB01()", "dbee0dea": "releaseTimeLock()", "dbeea819": "tokenGrantees(uint256)", "dbef0790": "returnUnsoldTokens(address)", +"dbef3306": "maxCollateralCeiling()", +"dbef989f": "_stakeBalance(address,address,uint256)", "dbefe789": "NUM_OF_PHASE()", +"dbf0497b": "initiateFlashLoan(uint256)", +"dbf0b73b": "addBusinessman(uint256,address,uint256,address)", +"dbf0f3e2": "emergencyTransfer(address,uint256)", "dbf14295": "claimSilver(uint64,uint64,uint64,uint64,uint64,uint64)", "dbf14dd9": "buyfloaksAgainstEther()", "dbf1b00b": "claimBeer()", "dbf1bfee": "ballotFee()", +"dbf1e121": "transferGasToken(address,uint256)", "dbf1ede3": "_getLogTokenContract(uint256)", "dbf1f780": "_hasEntryForCompetition(address,uint256)", "dbf1fe48": "calculateTokensFromWei(uint256,uint256)", "dbf27e0c": "updateConstitutionPoll(address)", "dbf2c9da": "isValidAuthority(address)", "dbf2f3c2": "get_reward(address)", +"dbf3191d": "raffleActivation(address,address,uint8)", "dbf323dd": "DEDToken()", +"dbf326a3": "getUserRanks(address)", "dbf35430": "ownedOwnershipTransferred()", +"dbf3b1b0": "withdrawClashToken(address,uint256)", +"dbf3ed27": "findRefById(uint256)", "dbf44530": "isWhite(address,address)", "dbf45aa3": "EthBank()", +"dbf4ab4e": "getPublisher()", "dbf4c54c": "batchTransfer(address[],address[],uint256)", "dbf502c0": "getCentsPerETH()", +"dbf51325": "safeBurn(uint256)", "dbf517a2": "_connectModule()", "dbf53a0e": "StandardTokenMock(address,uint256)", "dbf552aa": "LOG_InvestorEntrance(address,uint256,uint256)", +"dbf5633e": "validatorCanSettleEpoch(uint256)", "dbf5b91b": "setSafeGas(uint256)", "dbf5eb1c": "closeTokenSale(address)", "dbf63340": "availableSynthCount()", "dbf675c9": "bonusAddresses(address)", +"dbf6bb5c": "usdcDeposits()", +"dbf6c703": "com_()", "dbf724c7": "setReceiver2(address)", +"dbf75d84": "get_curve_point(uint8,uint8)", "dbf76c03": "bountyOfflineWallet()", "dbf79dcd": "StatusCow(address,uint256)", "dbf7dc0c": "getEntityList(bytes32[],uint8[])", +"dbf80fec": "refer_info(address)", "dbf81cc6": "foundersTokensAddress()", +"dbf83cde": "protectSAFE(address,uint256,address,address)", +"dbf8a28a": "setPrizePercentage(uint256)", +"dbf8a3e3": "inxrouter()", +"dbf8b168": "milk()", "dbf8d2fa": "sendTips()", +"dbf8e634": "registeredGames_(address)", "dbf98f6a": "totalSupplyBonds()", +"dbf9f652": "tokenBuyPrice()", +"dbfa3100": "balanceOfCUSDC()", "dbfa5863": "_endDate()", "dbfa6226": "interfaceInstances(uint256)", "dbfa980b": "Slogan(string)", "dbfab65b": "AvalonToken()", "dbfb129e": "ChecksumDatabase(string,string,string)", "dbfb18e7": "GoblinChainToken()", +"dbfbe729": "Find_Files_by_MD5_Hash(string)", "dbfc74cb": "ORACLIZEGASPRICE()", "dbfccd16": "ethersplay(uint8)", "dbfdb6e5": "getIcoTokensAmount(uint256,uint256,address)", "dbfdef01": "TechnoEng()", +"dbfe6062": "viewSaleDEFIX()", "dbfe791b": "confirmed(bytes32)", +"dbfe8a54": "addSugestion(bytes)", "dbfeb17f": "eth_cap()", "dbfec8b7": "CHEXToken(address,uint256,uint256)", +"dbfedcac": "batchControllers(address[])", "dbfef710": "getDefaultRequiredGas()", "dbff4182": "seedCoins(address,uint32,string,uint256)", +"dbff8e8b": "EthMinContribution()", +"dc0035d2": "setYfinPerBlock(uint256)", "dc00adef": "buyLand(bytes32,int256[],int256[],address)", "dc00b602": "EllipseMarketMaker(address,address,address)", "dc00e43b": "BananaBasket()", +"dc011367": "QuestionIds()", "dc012626": "ballotOf(address)", "dc015851": "minimumContributionPhase4()", "dc01bd0c": "calculateAmountForDAI(uint256)", +"dc020567": "mmDecimal()", "dc021628": "setFund()", "dc02511e": "addPermittedContracts(address[])", "dc02f456": "decodeTransfer(bytes)", +"dc0374d1": "getPoolToken()", +"dc039e2d": "token270FrozenBalances(address)", +"dc03ee69": "getRatesCompactData(address)", "dc042405": "getNames(address[],address)", "dc048cf2": "withdraw(uint256,string)", +"dc04bc3e": "withdrawFromGateway(address,address,uint256[],uint256[])", +"dc04fc04": "submitProposal(uint8,address,address)", "dc0527de": "NDEX()", "dc06269f": "showWhaleAddr()", +"dc06300c": "setFeePaused(bool)", "dc06b859": "numMarketMakers()", "dc06d8f8": "lnTest(uint256,uint256)", "dc06e754": "_setRspTokenAddress(address)", +"dc06e9df": "battleToFighterToBet(uint256,uint256)", "dc070657": "changeBeneficiary(address)", +"dc08a6ac": "createSingleProductOrder(uint128,uint128,address[],uint256[],uint128)", "dc08a80b": "safeToAdd(int256,int256)", "dc08b611": "EXAC()", +"dc08b6a7": "logBytes11(bytes11)", "dc08e2c5": "getVIPOwner(uint256)", "dc08e5ff": "getStockCount()", +"dc08fa9d": "getBorrowBalanceUnderlying(address,address)", "dc09426c": "GetGameInfo()", +"dc099301": "_stakeBalances(uint256)", "dc09996c": "escrowDatabase(address,uint256)", +"dc09c3e4": "removeExecutors(address[])", "dc09d8fd": "showInvestorsComission()", +"dc0a15ca": "_enabledLottery()", +"dc0a2c94": "mortgageAmounts(address)", +"dc0a4229": "pairInfo(address)", +"dc0af7c4": "onPlayerWin(address,uint256,uint256,uint256)", +"dc0b1134": "dodajIspitniRok(string,bool)", +"dc0b1179": "UserTreasures(address)", "dc0b3564": "players()", "dc0b48c1": "startPubTrade()", "dc0ba228": "change(bytes,uint256[])", +"dc0bbf08": "activeEntities()", "dc0bd011": "collectDonations()", "dc0bd38e": "appendDecryptedBids(uint256[],uint256[],uint256[],address[],address,uint256[],uint256[],uint256[])", "dc0bd75f": "arr(address,uint256,uint256)", @@ -126017,38 +230657,58 @@ "dc0c7735": "isPreSaleTokenSet()", "dc0d3dff": "funders(uint256)", "dc0d4cb6": "merculetContract()", +"dc0d9d5f": "setCrewAddress(address)", "dc0eb1a3": "PredictTheFutureChallenge()", "dc0f5ffc": "get_candidate_pic(uint8)", +"dc10abb0": "SetIncubator(address)", +"dc111bbf": "cloneToken(string,address)", +"dc119bec": "ContractSolidStamp()", "dc11a496": "changeAdmin(address,bool)", "dc11b386": "getDailyTarget(uint256,uint256)", "dc11be24": "smallSize()", +"dc12365f": "levelRate(uint256)", "dc126e63": "unlockVestedTokens(address)", "dc1279d4": "getPureFromGene(uint256[2])", "dc129870": "Loom()", "dc12a805": "right57(uint256)", "dc12abb5": "setPresaleDates(uint256,uint256)", +"dc1301af": "deleteOrganization(uint256)", "dc132be8": "getAmountofTotalParticipants()", "dc13352a": "TeamSupply()", "dc135226": "getValueFromDollars(uint256)", +"dc13cdc0": "isVerifiedByHash(uint256)", "dc13f85f": "getMaxPriceSale()", "dc14af38": "setIncrEth(uint256)", "dc1542aa": "testSafeAdd()", "dc154918": "_computeTournamentContenderCut(uint256)", "dc154a19": "buyAndSetDivPercentage(uint256,address,uint8,string)", "dc15c635": "getdeptinfo(uint256,address)", +"dc15d0fb": "createSwitch(bytes32,uint256,uint256,address,address)", +"dc1600f3": "ERC20Bridge(address,address,bytes)", "dc165652": "bountyTokensVault()", +"dc16747a": "eLog(string,uint256)", +"dc174937": "_setMinInterestForReward(uint256)", "dc1790e3": "getdeptreqdetails(uint256,address)", +"dc17bbdb": "getNumberOfTransactions(uint256)", "dc17c9ca": "getTokenOwner(address)", "dc17e808": "getPaidOrderByIndex(uint256)", +"dc17f2e1": "getOpt(bytes32)", +"dc17fb29": "getVetoCount()", "dc183d64": "setBridgeValidatorsImplementation(address)", "dc184e70": "reserveAccount()", "dc190074": "setsafemode(uint256)", "dc19266f": "Total_of_Players()", +"dc1941f1": "subBalances()", "dc199335": "checkIdentifier(string)", "dc1997ea": "landlord()", +"dc19e842": "isCrp(address)", "dc1abb6e": "MAX_AUDIT_TIME()", +"dc1abb8b": "advIssue(address)", +"dc1b7328": "setUnitPrice(uint256)", "dc1b93cb": "COREXCoin()", +"dc1b9933": "disclosureCount()", "dc1bba17": "getTxAmountMCW(bytes32)", +"dc1bc51d": "isSwapStarted()", "dc1bebe6": "creditExecutedFundsLessFees(uint128,uint256,uint256)", "dc1c1389": "acceptOfferForCity(uint256,uint16,uint256)", "dc1cb47b": "priceTLP2()", @@ -126056,36 +230716,68 @@ "dc1d70c3": "presaleBonusLock()", "dc1d83b3": "changeTelephone(address)", "dc1df3f6": "myTokens(address)", +"dc1e79a8": "addERC1155WrapperModel(address)", +"dc1e872d": "Grant(address,address,uint256)", "dc1eab83": "standardSale()", +"dc1f58ba": "estimatedSettlementProfit()", "dc1fb5a5": "community()", +"dc1fc208": "call_lucky(address,address)", "dc1fca7e": "dateSaleStarted()", "dc1fdff0": "commissionSum()", "dc201838": "QuickPrice()", "dc206e5f": "oraclize_query(uint256,string,string[])", +"dc20c6fa": "decodeId(uint256)", "dc20d6e7": "updateRandomNumber(uint256)", "dc20f957": "assetIncome(bytes32)", +"dc2173f3": "approveAndExecuteWithSpecificGasAndChargeForIt(address,address,uint256,uint256,uint256,uint256,address,bytes)", +"dc2189d2": "addCar_CSPM(uint256,bytes32,bytes,uint256,uint256,uint256,bytes32,address,uint256)", "dc21b3de": "preIcoBonus(uint256,uint256)", +"dc220359": "referrals_pool()", +"dc2218ec": "setbetamount(uint256)", "dc22aca5": "GalaxiumCoin()", +"dc22c5b9": "PayToSeller(uint256,address)", "dc22cb6a": "series(uint256)", "dc22eba6": "register(uint256,uint256,uint256,uint256,uint256)", +"dc239bf5": "COMPOUND_ORACLE_NEW()", +"dc23ea04": "releaseTransferLock()", "dc2424fc": "setPositionPrice(uint256)", "dc242e38": "calTotalSupply(uint256)", +"dc24fc07": "getBufferBalance()", +"dc24ffee": "getTotalStakingShareSeconds()", +"dc252246": "bons(address)", +"dc2560c7": "NON_WHITELISTED_ERROR()", +"dc25ca51": "updateSupportUnitAdd(address)", +"dc263022": "pt()", +"dc268db9": "isOnCastle(uint32,uint64)", +"dc271167": "_battleUnits(uint256)", "dc2811cd": "KDOU()", "dc2816b7": "AddNewChip(uint32,uint8,uint8,uint8)", +"dc28c27d": "addAirdropAddress(address)", "dc28d0c9": "tokenToValue(address,uint256)", +"dc28fcf7": "setRebaseRewardCNYx(uint256)", +"dc2901d3": "getuserProposalVoteStatus(address,uint256)", +"dc291e57": "service_registry_contract()", +"dc293382": "currentSeasonId()", "dc298682": "createCategory(string)", "dc29a89e": "concatBytes(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", "dc29da22": "getNodeHash(address)", "dc29ec37": "tokenReserve(address,uint256)", "dc29f1de": "topUp()", +"dc2a0502": "setProjectVestingContractAddress(address)", "dc2a3056": "setTripleRoomMax(uint256)", "dc2a60f6": "isReadOnly()", +"dc2abf6c": "MT(address)", +"dc2aee0b": "worldCupIdToOwnerAddress(uint256)", "dc2af3de": "getCEOAddress()", "dc2b32e6": "getWeiInvested(address)", "dc2ba357": "SetupQDA(string,string,uint256,uint256,uint256,address,address,uint256)", +"dc2bf7a3": "supportCaseFee()", +"dc2c5e3b": "ShareWithThirdParty(address,string,string)", "dc2c928a": "pausePlayerContracts(uint256,uint256)", "dc2cf3f5": "timeElapsed()", +"dc2d1d72": "convert(address,address,address)", "dc2d46f8": "getWeiAmount()", +"dc2d70a7": "ArrayAccountIsLockup(uint256)", "dc2df955": "get_project_information(uint256)", "dc2e47c8": "save4(address,bytes,string)", "dc2e7b33": "cal(uint256,uint256)", @@ -126094,46 +230786,79 @@ "dc2f7867": "setMaxLength(uint256)", "dc2f8744": "bounties(uint256)", "dc2f8a38": "setResult(uint256,uint8,int8)", +"dc2f8c87": "terminatePoll(uint256)", +"dc302bd8": "share_amounts(address)", +"dc303a12": "setTokenAddresses(address,address,address,address,address,address,address,address)", "dc30685e": "gas4Token()", +"dc307953": "set_voting_time_intervall(uint256,uint256)", "dc3080f2": "spentAllowance(address,address)", "dc30e253": "doFinalizeSale(uint256,uint256)", "dc30f912": "addTokenization(string,string,uint8)", +"dc311dd3": "getSubscription(uint256)", "dc3134ae": "getIslandBattleStats(uint256)", +"dc314b44": "registerPair(address)", +"dc3193f9": "kyberApproveTokenAmount(address,address,address,uint256)", "dc31adee": "releaseMarketingTokens()", "dc31e06c": "NEKOCOIN()", "dc31e473": "opmAddress()", "dc322802": "stage2Bonus()", +"dc3237be": "requestChange(address,address)", "dc32c72f": "secondReserveTimeLock()", +"dc332cbd": "getSystemFee(uint128)", +"dc33f08b": "pendingGOAT(uint256,address)", "dc340a76": "dataControlDelOwner(address,address)", +"dc343316": "formGroup()", +"dc347922": "lpUsdWeekAmount()", "dc3496d7": "allHashTypes(uint256)", "dc35213f": "change(address,uint256[])", +"dc35338c": "DoMint(uint256,uint256)", "dc35a6bd": "LOWER_PRICE_RESET_PERCENTAGE()", "dc35a900": "createOffer(uint256,uint256,uint256)", "dc35ea16": "bonusInPhase1()", +"dc3647f8": "getRetailerBuy(address)", +"dc369cec": "tokensLocked(address,string)", +"dc36cce9": "transactionBatch(uint256,uint256)", "dc371e54": "deleteName(bytes32)", "dc376392": "ETCCoin()", "dc3774b3": "availableBalances(address)", +"dc380cbb": "proposeJob(address)", "dc382cbf": "sumAcceptedContrib()", +"dc38679c": "targetPrice()", +"dc38b0a2": "setStorageContract(address)", +"dc390d48": "getReleasedPercentByRound(uint256)", "dc391176": "delayedPayments()", +"dc392023": "auditConfig(address)", "dc39537a": "AVAILABLE_BONUS2_SUPPLY()", +"dc395b7b": "bscGETAddress()", "dc39d06d": "transferAnyERC20Token(address,uint256)", "dc39e5fe": "removeOperationType(uint32)", +"dc39f332": "calcUserProfit(address,uint256)", "dc3a1cad": "setIBalances2(uint256[],uint256[])", "dc3a8372": "controllerApproval(address,uint256)", "dc3a9433": "lockedFundsPercent()", +"dc3aa743": "buySXPMultiple(address[],uint256[])", "dc3ab866": "checkEarnings(address)", "dc3acebe": "getApp(address)", +"dc3b8535": "ticketsEarned(uint256,address)", "dc3c39aa": "TCDC()", +"dc3c630d": "_ownerAddrOne()", +"dc3ca1bf": "setFeeTarget(address)", "dc3ccfdd": "transfer_tokens_from_contract(address,uint256)", +"dc3d180b": "checkBurn(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)", +"dc3dd225": "functionArgumentSend(address)", +"dc3e718e": "mapL1TxQueue(uint32)", "dc3ecbb4": "debug_wei()", +"dc3ef126": "tokenList(address,address)", "dc3ef685": "feePromille()", "dc3f65d3": "createdByMe()", "dc3f7536": "AdamToken()", +"dc3f7758": "setSymmetries(uint256,uint256)", +"dc40033e": "fnxIntegratedStakeFPTs_FRAX_FNX(uint256,uint256,uint256)", "dc40af1f": "oneTimeTickets(address)", "dc414448": "_addToParticipants(address)", "dc415804": "setFiscal(bytes32,uint256,uint256,uint256)", @@ -126141,70 +230866,118 @@ "dc41e726": "IndoJek()", "dc420fd2": "withdrawPayoutFromBet(uint256)", "dc4243f1": "setSalaryToken(address,address,address,uint256)", +"dc42f2ed": "withdrawDifferentToken(address)", "dc441754": "addDocument(bytes32,string,string,uint256,uint256)", +"dc449a75": "withdrawKlay()", "dc44bb1c": "createEscrowFrom(address,address,uint256,uint256)", +"dc44e347": "extRewardPerBlock(uint256)", +"dc44ed1c": "DsrBalance()", +"dc45111c": "participant2()", "dc454c13": "EDROP()", +"dc4558cc": "Dub(address,string)", "dc45b93a": "contributorsCompleteCount()", "dc45bfb3": "buyPack(uint256)", "dc45d08e": "getEtherBalance(address)", "dc45e27f": "getBonusBalanceByType(uint256,uint256,bytes1)", +"dc460766": "add(uint256,address,bool,bool,address)", "dc460933": "assignRole(address,bytes32,address)", "dc46a76d": "getIdeasSinceLastDeploy(address)", "dc46c813": "TwoExRush()", "dc46d984": "numGamesCanceled()", +"dc46ea94": "verifyBlockProof(uint256[],bytes32,uint32)", +"dc47b361": "Cancel(address,address,address,bytes32,bytes,bytes)", "dc47b3c1": "numberOfTokenIds()", "dc47e5b7": "approveAndCall(address,address,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"dc47fca7": "encrypt(address,string)", "dc489c9b": "setAirdropper(address)", "dc493790": "advisoryWallet()", +"dc496fd5": "setSaleParams(address,address,uint256[3],bool)", "dc4a307c": "createCommonAuction(uint256,string)", +"dc4a7f7f": "registrationCost()", +"dc4ad377": "getVoteCaster(uint256,address)", "dc4b3115": "thirdPriceTime()", +"dc4b9205": "defineExtendedKeys(uint256[])", "dc4baedd": "checkVerify(address)", "dc4bc06e": "getUserCategory(address)", +"dc4bfb85": "oracleAddresses(uint256)", "dc4c4005": "RemoveUser(address,address)", +"dc4c90d3": "poolManager()", +"dc4ce32b": "_burn_rate()", +"dc4d19f5": "upgradProofDatasAddress(address)", +"dc4d20fa": "nope(address)", "dc4d2ccd": "DiscountPercentToken(uint256,string,string)", +"dc4d3171": "removeTokens(uint256,address[])", +"dc4d6057": "finishingMinting()", +"dc4e7173": "calculateUntaxedBNBReceived(uint256)", "dc4ece27": "BONUS_3_DAYS()", "dc4ee13f": "overallTakenEther()", +"dc4f3a0e": "getFunderContract()", +"dc4f5caa": "oneDayDuration()", "dc4f63cc": "cap_max()", "dc502d64": "ethToBeDistributed()", +"dc5065a8": "metaChangeIssuer(bytes,uint256,uint256,uint256,address,uint256)", +"dc5074af": "isMetaTransactionProcessor(address)", "dc50af26": "against()", +"dc51b6ac": "totalMapped()", "dc51fba8": "SetherFinalized()", +"dc52382a": "gasNeeded(uint256)", "dc52696f": "tokenSupplyChanged()", "dc52c514": "batchCreateDrawings()", "dc533342": "reconciliationDateSet()", "dc53903b": "fundsReceived(uint256)", +"dc53e5cf": "setRebalancePeriod(uint256)", "dc540979": "POFOMO()", "dc5418b1": "view32()", "dc541eb7": "SelfllerySale()", "dc542a79": "isMaximumGoalReached()", "dc542c0f": "ALIToken()", +"dc543d92": "_isRevivalPhase()", "dc547301": "setCurrentSupply(uint256)", "dc54d919": "long_tokens(uint256)", +"dc550b1b": "loanOf(address)", "dc555090": "updateTime()", "dc555766": "createWithdraw(address,uint256)", +"dc56021c": "isReadyToFusion(uint256)", "dc566787": "topdownAndCashout(address,uint256)", "dc570aad": "setPermission(address,string,bool)", +"dc570ad9": "CoreTeamReleased(address)", +"dc572fd4": "updatePriceContract(uint256)", "dc57726f": "TokenGenerationEnabled()", "dc57c1ef": "CopyrightToken(uint256,string,string)", "dc57c323": "nextInputProfit()", +"dc57ca71": "testUnboundedForLoop(uint256)", "dc57d553": "epochLast()", "dc583801": "doubleyour5()", "dc585713": "EtherFundMeIssueTokensCrowdfunding(string,string,string,uint256,uint256,uint256,address,address,string,string,uint256,uint256,uint256,uint256)", +"dc58a72b": "proxySetOwner(address)", "dc5936f0": "addCountry(bytes2)", +"dc593ca5": "burnToken(uint256,address)", "dc596304": "NineLTDevToken()", "dc597b47": "getAnimals(uint8)", +"dc59c90f": "emitMessageNoParams()", "dc5a2199": "ICO_WALLET()", +"dc5a3dd4": "NODE_SHARE_LV4_PCT()", +"dc5a81c3": "serviceVotes(address)", "dc5aa474": "lastBlock_f2Hash_uint256()", "dc5acb90": "getOrThrow(string)", "dc5b041b": "validationPassed(address)", "dc5b0662": "getIndexByShip(uint256)", +"dc5b1924": "resultNumber(uint8,bytes32,bytes32,uint256)", +"dc5b42d2": "removeGoodContract(address)", +"dc5b68a6": "initialize(address,address[],address)", "dc5b87cf": "getPartnerAllocation(uint256)", +"dc5b9897": "acceptRepayment(uint256,bytes32)", +"dc5bb7cd": "sellTwo(address,address,uint256,uint256,uint256[],uint256,uint256,uint256)", "dc5bc461": "RadToken()", "dc5bcafb": "UnicornToken(address)", "dc5bf961": "totalTokensLocked()", "dc5c3e06": "setFundraiseLimits(uint256,uint256)", "dc5c9677": "changeSellerProposedValue(uint256)", "dc5d184f": "setID(uint256)", +"dc5d2799": "claimPop(uint256)", "dc5d9bfe": "migrationStep(uint256)", +"dc5dccc3": "setupLinearDistribution(address,address[],uint256[],uint256[])", +"dc5de0ba": "payNoderIndex(address,address)", "dc5df3fd": "ExperimentalPreICO(address,uint256,uint256,uint256,uint256,uint256,address)", "dc5dff36": "LottoComplete(address,uint256,uint256)", "dc5fced4": "totalRake()", @@ -126217,20 +230990,44 @@ "dc61164d": "getMySperm()", "dc61456c": "cooAddCro(address)", "dc622bcc": "setTokensAllocation(address,uint256,address[],uint256[])", +"dc628c04": "removeAddressFromAccountFor(address)", "dc62da61": "checkGameListed(address)", "dc63a62c": "getFileListHead()", +"dc63c219": "updateSwhPerBlock(uint256)", "dc63f0be": "getSatOwed(address)", +"dc6453dc": "getGasSpent(bytes32,address)", "dc646367": "endSale(bool)", "dc64752d": "collectsAccountDividends(address)", +"dc647e29": "updateRatio(uint256)", +"dc64ccf8": "depositToSharePool(address,uint256)", +"dc654a73": "liquidityLockDivisor()", "dc659907": "useModule(address)", +"dc65de54": "safeMeloettaTransfer(address,uint256)", "dc661aaa": "mainICOFirstWeekEndTime()", +"dc66249c": "pendingMdo(uint256,address)", +"dc6663c7": "timelock_address()", "dc6668db": "make_anonymous_withdraw(uint256)", "dc667d0c": "getCountriesCount()", "dc669dd4": "EndorToken()", +"dc67c8ec": "approveIfBelow(address,address,uint256)", +"dc6839ba": "getAppFee(bytes32)", +"dc686c8c": "increaseVaultBalance(uint8,address,uint256)", +"dc689af7": "invalidateXShort()", "dc689d3c": "getBaseDenomination()", +"dc68a38b": "DisableWhiteListForever(address,uint256,uint256)", +"dc68d7ea": "splitEstate(uint256,string,string,uint256,uint256)", +"dc68e16b": "getInvestmentCurrencyByIndex(uint256)", "dc693ca7": "totalWeiAmountSale1()", +"dc695bd5": "setBrand(uint256)", +"dc697a47": "totalGainInLevels(address)", "dc69a2d6": "tearDown(uint256)", "dc69aa23": "SudanGoldCoinCrowdsale(uint256,uint256,uint256,address)", +"dc6a7ee7": "TransfersBlocked(address)", +"dc6ab527": "params(bytes32)", +"dc6ae4e3": "getAAIStats(address,address)", +"dc6aed19": "raiseSwapExactTokensForTokensInput(uint256,uint256,address,address,uint256)", +"dc6b0145": "huoguoPerBlock()", +"dc6b1a8b": "_setCourier(address)", "dc6b1cbd": "setUser(address,address,uint256,uint256)", "dc6b7fb4": "LockedAccountThresholdUsdUpdated(uint256,uint256)", "dc6b9b29": "notesLength()", @@ -126239,155 +231036,298 @@ "dc6bfbb5": "nextBallotId()", "dc6c0cdd": "Share()", "dc6c3ee4": "setMaxTokenCap(uint256)", +"dc6c6bac": "totalVestingSchedules()", +"dc6cb5b2": "notEqualBoolFailTest()", +"dc6cfe10": "requestRandomness(bytes32,uint256,uint256)", +"dc6d9dae": "stix()", +"dc6dbcad": "bptPool()", "dc6dd152": "playerRollDice(uint256)", +"dc6e13e1": "stakings(address)", +"dc6e5384": "treasureMap()", "dc6e7262": "refundTransactionByMediatorFee(uint256)", "dc6e9cf9": "_MINIMUM_TARGET()", +"dc6ea828": "MoveTokens(address,address,uint256)", "dc6f39a3": "TriggerCooldown()", +"dc6f6428": "supportedPlatformWallets(address)", +"dc6fcf6a": "callValueEther(uint256)", +"dc6fd8ab": "POOL_INIT_CODE_HASH()", +"dc6fe7ea": "getUserBiddedAuctionByPage(address,address,uint256,uint256)", "dc6ff38e": "MAIN_MAX_CAP()", "dc7049bf": "annualManagementFee()", "dc706a3a": "VictusToken()", "dc70ab02": "setTotalExecutedPerDay(uint256,uint256)", +"dc7154cb": "deleteAdministrator(address)", +"dc715d1b": "counts(uint256)", "dc718791": "changeRules(uint256,uint256,uint256,uint256,uint256)", +"dc71b814": "getActiveSetAssetBalance()", "dc71db43": "worldCupResultPart2()", "dc720528": "AgriChainProduction()", "dc726205": "rates(bytes32)", +"dc72bb97": "stakeReward(uint256)", +"dc72fd71": "sendMultiGameWinningAmount(uint256,uint256,uint256[])", "dc730c50": "initialSingleWithdraw(uint256)", +"dc7317c9": "getUserQuery(uint256)", "dc73e49c": "swapToken()", +"dc743260": "approvedMinterForAll(address)", "dc7454dd": "amountReleased()", "dc74665e": "totalLeaderboards()", +"dc74a339": "intMaxA()", +"dc75b81e": "limit1hAmountTrading()", "dc75f2db": "multiowned(address[],uint256)", "dc760edf": "hardCapCrowdSale()", +"dc76a348": "_getCashPrice(address)", "dc76dc8d": "applyForCertification(string,string,string,uint256)", "dc76fabc": "getSpotPrice()", "dc77e5e1": "serviceTokensBurn(address)", "dc787bba": "getCountTempHolders()", +"dc788a24": "cancelSwapIntent(uint256)", +"dc78ac1c": "addTrustee(address)", "dc799f88": "BaseCertoChainContract()", "dc79b176": "getUserGroup(address)", "dc79c2ef": "addUser(bytes32,bytes32,bytes32,bytes32,bytes32)", "dc79d069": "investorSupply()", +"dc7a72e7": "verifyContractor(address)", +"dc7a9aea": "addAssetListingContract(address)", +"dc7aacf9": "replaceSecurity(uint256)", "dc7abeb3": "OPENSOURCE_TOKENS()", "dc7ac1ba": "lendVault()", +"dc7acc42": "approve_461(address,uint256)", +"dc7ad269": "getBulkBonus(uint256)", +"dc7b3371": "addSwapInStageOne(address)", +"dc7b5d4c": "lastRewardShared()", "dc7b808e": "callLibSet(uint256)", "dc7bbd72": "hasThreeStepWithdraw()", +"dc7bda02": "DSPRegistered(address)", "dc7cbfab": "priceCounter()", +"dc7cc30a": "freezedWallets(uint256)", +"dc7ced3d": "_rewardPool()", +"dc7d5ad0": "rollExpiredCAll(uint256,uint256,uint256,uint256)", +"dc7d7a65": "mintedNFT(uint8)", +"dc7d9369": "createSalary(address,uint256,address,uint256,uint256)", +"dc7dd56e": "usr(address)", +"dc7df0a7": "setGrainConfig(uint256,uint256,bool,address,address)", "dc7df9d8": "testToUint(int256,bytes)", +"dc7e0ce8": "SAFE_MULTIPLIER()", "dc7e5762": "goNextPeriod()", "dc7e88e8": "amountOfBooked(address)", +"dc7e8a05": "GameAuction(uint256,address,uint256,uint256,uint256,uint256)", +"dc7f0124": "checkEnabled()", +"dc7f2a71": "walletsSequenceNum()", +"dc7f7cac": "teleport(string,uint256)", +"dc7faa07": "isApprovedDeployer(address)", "dc7fc898": "bankermasterReq()", "dc80035d": "setFoo(uint256)", +"dc801b27": "dave(address,address[])", "dc801db6": "MyYLCToken(uint256,string,uint8,string)", +"dc8053df": "approve_641(address,uint256)", "dc80aaee": "DeltaToken()", "dc81e2b8": "DarenHui()", +"dc822736": "_setAddressValue(bytes32,bytes32,address)", +"dc822cf2": "getWinningPowerballNumberBySaleId(uint256)", "dc82697c": "getContractValue()", "dc835df5": "Sense()", "dc8369ce": "myStakesOnCountry(uint256)", +"dc8371d6": "startCrowdSaleRoundThree()", "dc8452cd": "required()", "dc845934": "getPlayerBetResult(uint256)", "dc846d95": "Own()", +"dc84e3a4": "Authorized(address)", "dc84e79e": "raisedPreSaleUSD()", "dc851b02": "itcERC20()", "dc85561b": "firstRoomAvailable(string,uint256[])", +"dc859718": "swap_curve(address,address,uint256)", "dc85b996": "window1EndTime()", +"dc8601b3": "requireToPassMessage(address,bytes,uint256)", +"dc861faa": "importAccount(address[],address[],address[],address[],uint256)", "dc8650de": "_removeFreezer(address)", +"dc8689fc": "amountOfMNEForTokenSet(uint256)", "dc86e6f0": "baseUnit(bytes32)", "dc87cfbf": "executeTransaction(uint256,bytes)", +"dc87f8f7": "batchUpgrade(address[])", +"dc881888": "addressLength()", "dc885527": "burnUnmintedTokens(uint256)", +"dc888348": "_endDates(uint256)", "dc88e838": "getOAR()", +"dc8908b8": "getCoinbaseAddress(bytes)", +"dc89a9e7": "opUT(uint256,uint256)", "dc8a0f65": "change_game_dice(string)", +"dc8ac935": "kashvir2()", "dc8b0203": "clearApprovalAndTransfer(address,address,uint256)", +"dc8b5e3c": "setupGemForRewardChecker(address)", "dc8bc70d": "finalizeSale(address)", "dc8c06d8": "addEmployerFeedback(address,uint256,address,string,uint8)", "dc8d1095": "simpleSubmit(uint256)", "dc8d2696": "inboxSize(address)", "dc8d26ad": "changeICODates(uint8,uint256,uint256)", +"dc8d734f": "getNumberOfNodesInGroup(bytes32)", +"dc8da59c": "teOdio(address,bool)", +"dc8de379": "reserveBalance(address)", +"dc8df387": "UNSTAKE()", +"dc8e516f": "withdrawRemainingETH()", +"dc8e92ea": "batchBurn(uint256[])", "dc8ee41e": "coldWallet1()", "dc8f2ae0": "addExplicitPosition(uint32,int64[2])", +"dc8f4a1b": "setCrossDomainMessageGasLimit(uint8,uint256)", +"dc8fa6c2": "depositSynths(uint256)", "dc8fbb44": "deathData_f12()", +"dc8fd770": "getWallets(uint256)", +"dc9031c4": "stack(uint256)", "dc903eb7": "addChunk5ToWhiteList()", "dc904e69": "waveCap3()", +"dc907a18": "wppV2Owner()", "dc90e42f": "restrictedStockOf(address)", "dc91868f": "backTo(address)", "dc91b634": "Ticketh()", "dc91ea68": "PayerStringUpdated(string)", +"dc91f954": "initToken(address,uint256)", +"dc927faf": "LIGHT_CLIENT_ADDR()", "dc92beec": "setManyWhitelist(address[])", +"dc92f8f0": "emergencyWithdrawEther()", +"dc93161b": "offerStats(address)", +"dc936bb2": "delegateUpdateRole(bytes32,address)", +"dc937e1c": "delegateByType(address,uint8)", "dc93f7c9": "feePayedPerReserve(address)", +"dc9464b9": "add(uint256,address,uint16,bool,bool)", +"dc946b93": "addRentToAddressForToken(address,address[],uint256[])", +"dc949ee4": "LogEnable(address)", "dc94b4a4": "doPay(bytes32,uint256,uint256)", "dc94e45d": "setDistrito(uint256)", +"dc94eebf": "RegisterTeller(address)", +"dc950523": "BALL_PRICE()", "dc9513c1": "JustifyClaimWithWitness(uint8)", "dc951fdc": "totalOverthrows()", +"dc953a97": "applyCharity(int256)", "dc9564d5": "buy(uint256,string,address,address,address,address)", "dc9590f0": "_START_TARGET()", +"dc95f70b": "confirmUnregisteringServer(uint256)", "dc965479": "FooContractCall(address)", +"dc9667d0": "LayDanhSachTheoDoi(uint256)", +"dc96b69b": "float_target()", +"dc973312": "setReceiverC(address)", +"dc977fbe": "setFeeDevShare(uint16)", "dc97a4f9": "getTotalUnPayedDividendsAmount()", +"dc97c27a": "twofifty()", "dc97d962": "getInt(bytes32)", "dc97e366": "stageIndex()", +"dc97f574": "viewURI(uint256)", "dc9861db": "updateMeDao(address)", "dc988b40": "allowWorkerToContribute(address,address,address)", +"dc98a0a1": "getAmtForSale(address)", "dc992aa0": "minUSD()", +"dc993a23": "setChildChainManagerAddress(address)", +"dc9950bd": "setDefaultExitFee(uint256)", +"dc996199": "nameHorse(uint8,string,bytes32)", "dc998901": "SaveData()", +"dc99a86d": "setFeePerCode(uint256)", +"dc99fd0e": "conversionToUSDEvent(uint256,uint256,uint256)", "dc9a1535": "isPublic()", "dc9a190e": "isAllowedTrade(address)", "dc9a1df3": "SafecontractsTREXToken()", +"dc9a2e60": "Two()", +"dc9a5333": "closeBankAccount()", +"dc9a7b82": "savetop1(uint256)", "dc9ac994": "iconiqSaleOngoing()", "dc9ae17d": "burn(bytes,address,uint256)", "dc9b6d68": "getTimeSinceLastEvent(address)", "dc9bb7db": "noKing()", +"dc9bd300": "_2_shouldBeGreaterThan_1()", "dc9c6e15": "_myinitialSupply()", +"dc9cc645": "getImplementation(bytes4)", +"dc9d3238": "getStakerLevel(address)", "dc9d625b": "setMaintainance(bool)", +"dc9da8cb": "claimTrueCurrencyProxyOwnership()", +"dc9db6d2": "VerifiedTransfer(address,address,address,uint256,uint256,uint256)", "dc9deea3": "amountPurchasedWithDecimals()", "dc9deeff": "setPresellPrice(uint256)", "dc9e7a87": "TransferedERC20(address,address,uint256)", "dc9e9ba0": "allowStart()", "dc9eb903": "Tbond1()", "dc9ebff7": "getTotalInvestedEther()", +"dc9efbab": "give(address,address,uint128,bytes)", "dc9f0622": "transferManual(address,uint256,string)", +"dca081b5": "placeNewBet(uint256,uint8)", +"dca08f26": "checkDailyTraders(uint256,uint256)", "dca0b866": "TwoPersonContract(address,address,bytes32)", "dca0f3ef": "getEntryFeePaid(address)", +"dca1eaac": "evtMaster()", +"dca25c3b": "getRoundBetCount(uint256)", "dca27d5e": "setV_R4(uint256)", +"dca31e42": "validateAddress(bytes,bool)", "dca44b39": "setPerOneEther(uint256)", +"dca4d1a5": "maxSquareBets(uint256)", +"dca4f18a": "_getMostRecentCumulativeReward(bytes32)", +"dca4fc2c": "compoundConnect()", +"dca5b6ab": "unsetFee(bytes32)", "dca5f188": "AddressBook()", +"dca5f5c3": "getAccountMarketData(address,address)", "dca5f6b0": "jurors(address)", "dca60034": "isMapped(string)", "dca6058c": "canSetTransferable()", "dca67e5d": "_createResident(string,string)", +"dca6c08c": "getmycar_reservation(uint256)", "dca6f378": "withdrawTokensFromPool(uint96)", "dca703d0": "LogSetQuestionFee(address,uint256)", "dca73e6b": "getMyStores()", +"dca7b13a": "setBNBPriceForUSDP(uint256)", "dca7bcbe": "getWords()", +"dca7c7be": "exitWithDiscount(address,uint256)", "dca80bc6": "EtheremonRankBattle(address,address,address)", +"dca82cfb": "setHalfLifePeriods(uint256,uint256)", +"dca84d36": "createResaleOBO(uint256,address,uint256,uint256,uint256,bool,bytes)", +"dca85203": "UserNamePrice()", +"dca8a9e4": "getBalance(address,address[])", +"dca919de": "dividendAccounts(address)", "dca92eb5": "terminateLiquidation()", "dca95419": "recoverSigner(bytes32,string)", +"dca9d035": "allowBypassFees(address)", "dca9fd5b": "editStatus(uint256,string,uint256,uint256,int8)", +"dcaa0a6b": "viewEtherInPlanLength(uint256,bool)", +"dcaa3e9f": "exchangeEtherForPynthsAtRate(uint256)", "dcaa5620": "findNextWeekday(uint256,bytes)", "dcaabed7": "getLastDeedByAddress(string)", +"dcab0704": "IslandSold(uint256,uint256,uint256,address,address,bytes32)", "dcabf93f": "refundstate()", "dcac652e": "setOwnerShare(address,uint256)", "dcac69c3": "inheritedPure(uint256,uint256)", "dcace702": "getClientLastPaidRate(address)", "dcacf19a": "finalizeAndRestart(address)", +"dcadfe6e": "beginRewardAmount()", "dcae2cb4": "getWinningPrize(uint256)", +"dcae76ab": "collectedRewardForHeaderRelayer()", +"dcae9e41": "hotelBalances(address)", +"dcaeace0": "transformed(address)", "dcaee066": "setStakeDisbursementAddress(address)", "dcaeea15": "setadmin()", "dcaf391e": "totalAirDropToken()", +"dcaf9c44": "collateralizationRatio()", "dcafa43e": "SaxoToken()", "dcafaec2": "setCostToCreateGame(uint256)", "dcafee05": "killBalance()", +"dcb003be": "safeInfiniteApprove(address,address)", "dcb01759": "salesEth(address)", "dcb032ce": "addNodeGroup(string)", "dcb04503": "testConcatStorage33Bytes()", +"dcb06fe8": "claimRewardAmountUser(address)", "dcb0a094": "tokenSetBurnFeeProp(address,address,uint256)", "dcb12421": "isSoftcapOn()", "dcb1c012": "ChowSale()", +"dcb25a6b": "isStackingActive()", "dcb27883": "CallAborted(address,bytes32)", "dcb31b82": "isConfig()", "dcb35d06": "getTransactionApproveCount(uint256)", "dcb36063": "crowdsaleMinter()", +"dcb3ec3f": "reset(uint256,uint256,address,address)", "dcb3ff58": "updateDividendBalance(uint256,address,address,uint256)", +"dcb43191": "StakeMap(address,address)", "dcb46e38": "setWorstCaseRateFactor(uint256)", "dcb4775e": "tokenPartner()", "dcb4876f": "removeAddresses(bytes32[])", "dcb5930a": "ratingContractAddress()", +"dcb5d18f": "subscribeToSpp(uint256,uint256,address,address)", +"dcb5ec23": "transferableShadows(address)", +"dcb6aa6b": "lockLiq(uint256)", "dcb6af48": "calcAverageICOPhaseKeyPrice(uint256)", +"dcb7ab7b": "BonusRound1()", "dcb7e083": "teamTokensInitial()", "dcb7f86f": "getWinningPayoutDistributionHashFromFork()", "dcb814ef": "presaleWhitelistDiscount()", @@ -126395,41 +231335,80 @@ "dcb9528e": "getBiddingInfo(address)", "dcb9d457": "updateClientOfContractorManagers(uint256,uint256)", "dcba03da": "MINEA()", +"dcba48b6": "minerv1()", +"dcba9847": "updateCMC(uint256,uint256,uint256)", "dcbab608": "initialize(uint256,uint256,uint256,uint256,uint256)", "dcbac60c": "winPrizes(uint256)", "dcbad97b": "setEndIcoMainICO(uint256)", +"dcbb4948": "_getPeriodBalanceDetails(uint256)", +"dcbb8253": "providersSize()", +"dcbb9a13": "isEnlisted(address)", +"dcbbe0b8": "setTokenSwapLimit(uint256)", "dcbc1288": "m_SMR()", "dcbc1c05": "Deposit(address,address,uint256,uint256)", "dcbc84ab": "coinsIssuedMkt()", +"dcbd128e": "blockTimestampFinished(uint256)", +"dcbd7a53": "withdraw(uint256,address,uint256,bytes)", "dcbda04c": "setCrowdsaleInterface(address)", +"dcbe61f5": "transferadds(address,uint256)", "dcbe7cf1": "addInsuranceProduct(uint256,uint256,uint256,string,string,bytes32)", +"dcbf068a": "calculateFee(uint256,uint256,uint256,bytes32)", "dcbf16d4": "Normal(uint8)", +"dcbf38d8": "swapUsdc(uint256)", +"dcbf62f6": "seniorRatio()", +"dcbf8925": "_setFeeAmount(uint256)", "dcbfa406": "sendVirtTokens(address,uint256)", "dcbfa4b7": "addSkills(bytes32[])", +"dcbfd36c": "bproxToBtc(uint256,bytes32)", "dcbfe3d5": "clearRequests(bytes32)", +"dcc009b4": "get0xUNI(address)", "dcc0ccf3": "Dao(address)", "dcc0e622": "setTokensForCrowdSale(uint256)", +"dcc16929": "setUnderlyingBalance(uint256)", "dcc1fd02": "angelSaled()", "dcc23730": "setCurrency(uint256)", "dcc279c8": "setHalted(bool)", +"dcc27d04": "publishToken(address)", "dcc33e0b": "updateOperationalAddress(address)", +"dcc345f2": "setDeveloperAddress(address)", +"dcc38fe7": "disableOpenItem(uint256[])", +"dcc3e06e": "rewarder()", "dcc42e9b": "cards_blue_total()", "dcc439cf": "updatePlayersGooFromPurchase(address,uint256)", +"dcc43d16": "setup(string,string,address)", +"dcc44ed3": "location(address,uint256)", +"dcc4c02a": "owner_change(address)", +"dcc4f684": "MINT_FEE_TRUSTEE()", +"dcc4ff75": "referrerRateLevel2()", "dcc5237b": "FlatPricing(uint256)", "dcc53305": "getMail(uint256)", +"dcc54387": "zTreasury()", +"dcc59b6f": "claims()", "dcc60128": "getProjects()", "dcc6131c": "checkBalance(uint256[],address)", "dcc66b4b": "addRelationshipBindingWineryOperation(bytes32,uint256,bytes32,int256)", "dcc66cc2": "getDelegate(uint256)", "dcc6762c": "withdrawalInitiate()", +"dcc69f5f": "showBetRight(uint256)", +"dcc6b133": "addCardSet(uint256,uint256[],uint256,uint256,uint256[],uint256,bool)", "dcc6e7ad": "refundEth(uint256)", +"dcc7094a": "payerAddr()", "dcc71ed4": "AdvisorsAndFounders(address,uint256)", +"dcc721d2": "doAdd(uint256,uint256)", "dcc76a92": "Ranking()", +"dcc79ba5": "setStdlib(address)", +"dcc7a8e6": "ExportOnChainClaimedReceiptLog(address,address,uint256)", +"dcc7d143": "withdrawAllBToken()", "dcc7f6b0": "Ethen(address)", "dcc819c8": "computeCntrAmountUsingUnpacked(uint256,uint16,int8)", +"dcc85630": "backgrounds()", "dcc8592c": "KOCMOCToken()", "dcc8a508": "partnerBonus(uint8)", +"dcc8ab21": "updateGenesis(address)", +"dcc91c9b": "deployLiquidator()", +"dcc9606f": "swapNFT(uint256)", "dcc9a58c": "testCreateGame(string,string,bool,string,address,string)", +"dcc9e14e": "loanStatus(uint256)", "dccb0c89": "test_1_someTest()", "dccb37f1": "initialTokenBalance()", "dccb5afb": "_emitTimeAdded(uint256,uint256)", @@ -126439,30 +231418,59 @@ "dccbfa2a": "minInvestedCap()", "dccc6c94": "fireCloseProposalEvent(address,uint256)", "dcccb41d": "setTransferAddress(string,address)", +"dccce74d": "decrementByValue(uint256,uint256)", "dccd4315": "startingAt()", "dccdc893": "setNewWhiteList(address)", +"dccdd105": "sushiswap_swapExactTokensForTokens(uint256,uint256,address[])", "dcceaaa8": "sendShipmentTo(address,uint256)", "dccee5b2": "posibleDividendsOf(address)", +"dccee995": "requireReserveActiveInternal(address)", +"dccf2f8b": "Evidence(address,uint256,address,string)", +"dccf3998": "giftWrap()", "dccf77ce": "setCurrentBlock()", "dccfbb62": "overthrow(bytes23)", +"dccfe310": "removeAdminRole(address)", +"dcd04793": "setPrimary(address)", "dcd0fa9e": "get_arbits_min_contribution(address)", +"dcd12881": "myInvestmentAmountAllDays()", +"dcd18dd4": "removeFunder(address)", "dcd1e670": "checkAmount(uint256)", +"dcd214a1": "getCurrentSupplierMachineHoursAvailible()", +"dcd23a9d": "m_referrals(address)", +"dcd26769": "_requireCanBurnOnBehalf(address,address)", +"dcd2af17": "virtualBalance()", +"dcd2f4b6": "create(uint256[],uint128[],uint64[],uint128[])", "dcd320a0": "bouncyCoinToken()", +"dcd326f3": "willbuyFindSpot(address)", +"dcd3345c": "createXToken(string,string)", +"dcd37c8d": "removeHoursFromInUse(address,uint256)", +"dcd38b5b": "oxtPerBlock()", "dcd3c2e5": "QLALA()", "dcd4090b": "getStage3Start()", "dcd4eb14": "addNewTicket(uint256,bytes32,uint256,uint256,uint256,bytes32,string)", "dcd58e2f": "FUTURE_ME_ADDRESS()", +"dcd62cf1": "sysusermoney()", "dcd65479": "numPeriods()", "dcd6561d": "currentSaleSold()", +"dcd68128": "vaultExists(uint256)", +"dcd6a5cd": "Vote(uint256)", +"dcd726e1": "Bid(uint256,address,uint256)", +"dcd72894": "approveERC20Funds(address,address,uint256)", +"dcd7dd23": "unlockTokensAfterSixMonhts(address,uint256)", "dcd7dd2e": "setKYCLevel(address,uint8)", "dcd8023c": "TokenBranch(uint256,uint8)", +"dcd80d30": "setDoTxLib(address,bool)", "dcd84f2a": "UserDestroy(address)", "dcd93691": "retrieveOnFail()", +"dcd962b2": "updateCommissionRate(uint256,uint256)", "dcd9c289": "getBAA(bytes32,address)", +"dcd9d7b1": "finalizeCoinOffering()", +"dcda0b62": "zeroExValidation()", "dcda0c8f": "requestDiplomaByNr(uint256)", "dcda2385": "TransferSellAgentCreators(address,uint256)", "dcda4554": "dazoToken()", "dcda4bf3": "mOwner()", +"dcda722a": "approve_787(address,uint256)", "dcdaa35b": "mintAmount2()", "dcdb622b": "MessageSet(string,uint256,uint256,address)", "dcdbbe37": "lockTransferFor(address,uint256)", @@ -126472,152 +231480,280 @@ "dcdd6d38": "getHolderAddresses(bytes32)", "dcdd9af2": "DEX(address,address,address,uint256,uint256,uint256)", "dcdda6d7": "teamUnfreeze()", +"dcddb9bf": "voidTotal()", "dcde0019": "disapprove()", "dcde835e": "NewSale(uint256,uint256,uint256,uint256)", +"dcde9704": "AddProfit(address,uint256,uint256)", "dcdea898": "MintToken(address,uint256)", +"dcdf5049": "poolBonus()", +"dcdf5158": "executeWithSpecificGas(address,uint256,bytes)", +"dcdfe3e8": "checkMaximumBetAmount()", +"dce02ce3": "removeFavorTokenUser(address)", +"dce05010": "reinvestEarnings(uint256)", "dce0b4e4": "creationFee()", "dce11375": "emitter()", +"dce15449": "accountAssets(address,uint256)", +"dce17484": "cake()", +"dce1880a": "AccountIsLockup(address)", +"dce191af": "LogTokenClaimed(address,uint256,uint256,uint256)", "dce1d3c6": "addTokenPendingToken()", "dce23e97": "getPriceValue(bytes32)", +"dce24d2e": "originalBalance()", +"dce25786": "luckyPendings(uint256)", "dce293a7": "minLength(uint256)", "dce2b4c1": "getMarkup(uint256)", +"dce2c861": "checkCoverExpired(uint256)", +"dce2cb13": "toggleWithdrawAdminFeeRefund()", "dce2f2dd": "Vouched(address,bytes32)", +"dce306ad": "disableRestrictions()", "dce388b6": "payeePartsToSell()", +"dce493aa": "finishedWithdrawalTime()", "dce4a447": "at(address)", "dce4ae87": "DigixConfiguration()", "dce4b34e": "submitAnswerByArbitrator(address,bytes32,bytes32,address)", +"dce4e6c2": "urlFinancialDetailsDocument()", "dce4fa38": "IcoTokens()", +"dce52dfa": "tolerance()", "dce57755": "getBlockLength()", "dce579d1": "extendIco(uint256)", "dce59311": "didOwnerEndCrowdsale()", "dce59c00": "addPayee(address)", "dce5c5a9": "norsefirePrice()", "dce5c757": "cool()", +"dce5d858": "toggleProjectUseHashString(uint256)", "dce5f277": "investorsAddress(uint256)", "dce6417d": "DebitCoinToken(string,string,uint8)", +"dce69665": "subscribe(address,uint8)", +"dce6de2c": "bMoon()", "dce722dd": "getJobSkills(uint256)", "dce77d84": "getCurrentRate(address)", "dce85216": "moveUnsoldTokens()", +"dce96225": "ownerSetV2Data(uint256,uint32,address)", "dce98784": "NiewGold()", +"dce9c0ce": "mVestingSpent(address)", +"dce9c276": "makeFullRequest(bytes32,bytes32,uint256,address,address,bytes4,bytes)", "dce9f6c3": "SuperConductToken()", +"dcea0a3f": "stakesOpened()", "dcea0a64": "ADX()", "dcea7113": "buyOutPrice()", "dcea80a5": "exchangeIEO()", "dceacb93": "_createNewBadge(address,uint256)", "dceaf74c": "youAre(address)", +"dceb0f66": "withdrawBatch(address[])", "dceb3e7d": "getConfirmations(bytes32,address)", +"dceb986d": "stakeETH()", "dcebb122": "extendSale(uint56)", +"dcec3294": "lockedTokens(uint256)", "dcec5ecc": "calcNewEmployeePoolOptions(uint256)", "dcec7204": "EtherNeo()", "dced2f1a": "currentCharId()", +"dced96b1": "maxBProxBtcValueInfiniteLeverage(uint256,uint256,uint256,uint256)", "dceda27b": "getRegularCarSupply(uint256)", "dcede2c3": "testIsSameSign()", "dcedeeed": "claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"dcee7fe3": "withdrawStaking()", +"dcee8eb2": "pendingBsf(uint256,address)", +"dceec23f": "addStakeReward(uint256)", "dceeeae8": "ServiceController(address,address,address,address)", "dcef8165": "CoinBirdDEX()", +"dcef83d2": "totalInvestmentARGON()", "dcefa538": "buyTokens(address,address,uint256)", "dcefcb8e": "extractCallData(bytes)", +"dcefff49": "recipientPercents(uint256)", "dcf00b6e": "getAccreditationActive(bytes32,bytes32)", +"dcf0aaed": "getAddressForOrDie(bytes32)", +"dcf0bb3a": "mintThenDeposit(address,uint256,uint256[2],uint256,uint256,bytes32,bytes)", +"dcf0c1a0": "setLevDown(uint256)", +"dcf13831": "TransactionExecutionErrorSelector()", "dcf1579c": "thirdBonusPercent()", "dcf1a9ef": "commissionBalance()", +"dcf1ac05": "BurnAddr()", "dcf1df05": "showValue(address,address)", "dcf219f2": "setLootboxFee(uint256)", +"dcf25bf4": "rewardPerIntervalDivider()", +"dcf2ad4c": "claimPerformanceFee()", +"dcf2c67f": "multiSignForDeposit(uint256)", "dcf34a91": "SpendingUnblockedEvent(address)", "dcf3fb2a": "revoke(address,address)", +"dcf43f90": "_getKeyRingVersion()", +"dcf48ca9": "yToken(address)", +"dcf49e16": "PROJECT_LINK()", +"dcf4ff5b": "investWithReferrer(uint256)", "dcf537b1": "multiply7(int256)", +"dcf53e0b": "exempted_accounts(uint256)", "dcf63591": "course()", +"dcf642e0": "proposeAndQueue(address[],uint256[],string[],bytes[],string)", "dcf6a592": "isGreaterThan(uint256,uint256)", +"dcf6e819": "setDefaultReferrer(address)", +"dcf70129": "freeTokenCollateral(address,address,address,uint256)", "dcf72c10": "buyTo(address)", "dcf73856": "generateGroups()", +"dcf7952b": "bots()", "dcf7bb5c": "changeTarget(address)", "dcf7c0d0": "TokenTrader(address,uint256,address,uint256,uint256,uint256,bool,bool)", "dcf7c2f9": "asset(uint8,string,bytes)", "dcf8045e": "tiersInitialized()", "dcf8113e": "campaignEndedSuccessfully()", +"dcf81d17": "openUntilAtLeast()", +"dcf82dc3": "_getCTokenSymbol()", "dcf86587": "_transferWallet(address)", +"dcf8ce35": "FirstStageStartsAtChanged(uint256)", "dcf8f13a": "getCurrentItemPrice(uint256)", "dcf90793": "IcoWallet()", +"dcf9082e": "maximumHODLTimeRewardable()", "dcf91ea9": "MoftakToken()", +"dcf93f32": "isToken0()", "dcf946c2": "getAllParentIds(bytes32)", "dcf97439": "revealX(uint256,uint256)", "dcf988d6": "GetFeeBalance(uint256)", "dcf9bbec": "hasVerifiedAttributeIndex(address,uint256)", "dcf9e836": "setProviderLimits(address,uint256,uint256)", +"dcfa18d5": "listTeam(uint256)", "dcfa6ac4": "buyChamp(uint256,address)", "dcfa9222": "transferAccessTo(address,address)", "dcfa9cc0": "testProxyCall()", "dcfac095": "CPX(uint256,string,string,address)", +"dcfb70a6": "TreasuryWithdrawn(uint256)", +"dcfbc0c7": "pendingComptrollerImplementation()", +"dcfc1705": "repay(uint256[6],address,address,bytes)", "dcfc3b46": "getAdIdByUser(address,uint256)", "dcfc4430": "groomAddr()", +"dcfc4726": "participate(bytes32,uint256)", "dcfcda2b": "changeEscrow(address)", +"dcfd12e1": "Dogs(uint256)", "dcfda779": "allowCrowdsaleAddress(address)", "dcfe63a9": "finishPrivateSale()", "dcfe64e9": "SHA256()", "dcfe8eb4": "SetIPR(string,string,address,string,string,uint256,string,string)", +"dcfee15e": "black(address)", +"dcfefddf": "Added(address)", "dcff2f76": "createAndJoinCDP()", "dcff5581": "NewFeeAddress(address)", +"dcffb5f7": "COUNTER_LIMIT()", +"dcffcdc9": "revokeTrueProof(bytes32,uint8)", +"dcffd7cb": "stakeRisk()", "dcfff171": "setDelegadoDeDistrito(bytes32)", +"dd001179": "KYCConfirmed(address)", "dd001254": "nameToTokenId(string)", "dd00182b": "dogeAddress()", "dd004ca8": "_endEdit()", +"dd007212": "sessionsOf(address,uint256)", "dd009f48": "recursiveCeil(uint256,uint256,uint256)", "dd00a9dc": "close(uint256,uint256,bytes)", "dd00b605": "normalCheck()", +"dd00da7c": "payoutETH(address)", +"dd010495": "initTypes(address)", +"dd011c15": "adminRemoveLease(uint256)", "dd012a15": "setIt(uint256)", +"dd015856": "EventWithdrawEther(address,uint8,uint256)", "dd01f781": "goToWork(uint256)", "dd01f9e4": "LogNeededBalance(uint256)", "dd022727": "getGameByIndex(uint256,bool)", "dd029560": "CoreLayer()", "dd02e30d": "isValidTxPaymentForKWh(bytes32)", +"dd031997": "getBytes32Array(bytes32)", "dd03447f": "DiamondCash()", +"dd034779": "poolSize(uint256)", +"dd03f5b9": "epochsPoolGotRewardFor(address)", +"dd046f3d": "mock_setMaxPeriodTransitions(uint64)", +"dd049cd0": "issueLock(bytes32,uint256)", "dd052519": "withdrawAllPlayers()", +"dd05c6df": "safeoldprice()", "dd05db9a": "amountPerRelease()", +"dd062348": "approve_862(address,uint256)", +"dd064a7d": "circuitBraker()", "dd0669d4": "getZCount(uint8,uint8)", +"dd068ec1": "exercise(address,uint256)", +"dd06b66c": "BuyToken(address,uint256)", "dd0702d6": "changeTeamPoolForFrozenTokens(address)", +"dd074cc7": "balanceOfNestInPool(address)", +"dd07a2a3": "rebase(uint256,bool)", "dd083f20": "teamPart()", "dd0860a8": "IsOwner(address)", +"dd0881d1": "yWeight()", "dd08b5c9": "disableRedemption()", "dd090981": "setName(uint256,uint256,bytes32)", "dd09de33": "soldTokensOnIco()", "dd09e13c": "totalRegistrationBonusAmount()", "dd0a1019": "isReserveGenerated()", +"dd0a35db": "viewRecoLostMoneyDL_4(address)", +"dd0ac1a2": "satayPerBlock()", "dd0ac8ac": "HoldCrowdsale(uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,address)", "dd0b1af5": "setMythexTokenAddress(address)", "dd0b281e": "start(address)", +"dd0b6cfa": "_fromAddress(address)", "dd0b7ffe": "setBuyNowPrice(uint256)", "dd0c189c": "updateFirstExhangeRate(uint256)", "dd0c42ab": "updateRequiredEntries(uint16)", +"dd0c4d3f": "claimComp(address[])", +"dd0c8643": "sc()", +"dd0ce56a": "lockAmounts(address)", "dd0cf15d": "sendFund()", "dd0cf7d4": "stopGuess(uint32,bool)", +"dd0d1489": "newBurnRate()", +"dd0d1d74": "fruitPerBlock()", +"dd0d3e3b": "marketLiquidityForLoan()", "dd0d74ff": "IssueBank(address)", +"dd0dca2d": "InitialReporterRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", "dd0e2373": "voterAddresses(uint256)", +"dd0e3056": "EXPECTED_INTERVAL()", "dd0e3902": "setData_6(string)", "dd0e7832": "transferWithChange(uint256,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"dd0eef3d": "cumulativeFeeMultiplier()", +"dd0f0265": "changeChallengerBaseDeposit(uint256)", "dd0f0808": "genEvent()", +"dd0f3084": "setBirthblock(uint32,uint256)", "dd0f5a9a": "presalePiEnd()", "dd0fa641": "winning_bets_total()", "dd100efa": "getIcoEnded()", +"dd108f46": "catsRegister(uint256)", +"dd10d14f": "AuthorizedAdded(address)", "dd10d97e": "getPlayerWaiting()", +"dd10f338": "getApproved(uint256,address)", "dd11247e": "totalTickets()", "dd114c22": "publish(address,uint256,address,uint256)", +"dd117a11": "Migrated(string,string)", "dd1219fd": "powerSwitch(bool)", "dd12b51f": "getPermissionCheck()", +"dd12e496": "NotEnoughTokensLeft(uint256)", +"dd12f976": "crowdsale_rxp_fund()", +"dd13025e": "lastUnfrozenAwardedTimestamps(address)", +"dd137455": "viewAllDeposits()", "dd137b5d": "toBase58(uint256,uint8)", "dd13e20a": "forgeWeaponRarity(uint256,uint256,uint256,uint256)", "dd13fd5f": "_acceptContribution(address,uint256,uint8)", +"dd144d56": "getBirthCount(uint32)", +"dd148b8b": "globalSlaughter()", "dd14ab79": "updateTimestamp(bytes32,uint256)", +"dd14b09f": "setInvestorStatus(address,uint256)", +"dd14d8ad": "minimumsView()", +"dd14da9e": "getResultList()", "dd151d1e": "pushAddressArray(bytes32,address)", "dd155f3f": "removeAddress(uint256,address[])", +"dd15603f": "currentAward()", +"dd157132": "addRewardType(string)", "dd15b66c": "MyWill(address,string,string,string,address,uint256,uint256)", "dd15f993": "depositUSD(address,uint256)", +"dd169cae": "swap_sell_token_mtmsk(uint256,uint256,uint256)", "dd16d981": "isCampaignValid(bytes32)", +"dd16f5ad": "curveConstant()", "dd16fe09": "getCashBackObject(uint256)", +"dd1730e2": "bar(uint256,uint16)", +"dd173df1": "getBalanceKAIContract()", +"dd1752f0": "SwapRL3RToRLR()", "dd17e151": "sendabr(uint256)", "dd17eaec": "setMultipleRates(bytes32[],uint256[])", +"dd18491b": "OracleProposed(address,address,uint256,bytes)", "dd18b250": "getIdArray(address,address,string,string)", +"dd191719": "emergencyWithdrawAll()", "dd192de7": "affiliatesAddress()", "dd193e7b": "addPerSell(uint16,uint256,bool)", "dd1956b0": "InfiniviToken()", +"dd19869c": "work(uint256,address,uint256,uint256)", +"dd198e04": "deregisterCustomer(address)", +"dd19aa58": "getEarn()", +"dd19b8d1": "viewClaimPeriod()", +"dd19e6e0": "destroyValidator(uint256)", "dd1a293a": "burnTokensFrom(address,uint256,uint256)", "dd1a56a7": "WellnessToken()", "dd1a5f0d": "_grandPVPLoserReward(uint256)", @@ -126625,338 +231761,644 @@ "dd1aa549": "PARTNERS_WALLET()", "dd1b1928": "getInputSize(uint256)", "dd1b6137": "push(uint256,uint256)", +"dd1b79fc": "f4(bool)", "dd1b7a0f": "nonFungibleContract()", "dd1b89c6": "freezeExists(uint256)", "dd1b9c4a": "POOL_FEE()", +"dd1ba309": "executeCompoundRedeem(address[])", "dd1bb3d1": "confiscateBalance(address)", "dd1bb6f5": "TokenICOGAT()", +"dd1bdb90": "setFeesAmount(uint256)", "dd1c35bc": "recycle(uint256)", +"dd1ccc86": "mint(uint256,string,uint256,uint256)", "dd1cdf84": "keybasePubURL(string)", +"dd1d0aad": "renderTop100()", +"dd1d1733": "createCycle(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint8,uint256)", "dd1d5e64": "incGenLabFight(uint256)", +"dd1da862": "softCapMet()", "dd1dbc3a": "calcUnMaskedEarnings(uint256)", "dd1dc0ad": "RequestSale()", +"dd1dcd9f": "Registration(uint256)", "dd1dffb7": "getFundsCollected()", "dd1e2651": "getUserKey(uint256)", +"dd1e2e0f": "crowdsales(address)", "dd1e4e11": "_getRandom(uint256)", +"dd1e9d02": "USDTtoExchcoinCoinDeliver(address,uint256)", "dd1ee3d7": "whaleAddress()", "dd1eee44": "couponTokenSaleAddr()", +"dd1f7596": "userRounds(address,uint256)", "dd1f969b": "PURCHASE_AMOUNT_RATE_REFERENCE()", "dd1fc642": "_approvedFor(address,address,uint256)", +"dd1fe62c": "freeReduxTokens(address,uint256)", +"dd2015df": "enableWhitelist(address)", +"dd20580f": "testDataTypeBytes32()", +"dd206202": "writeString(string)", "dd20a53e": "createTournament(uint256)", +"dd2104e9": "userRewardsTierMap(address)", +"dd210f9f": "ContributionIncrease(uint256,uint256)", "dd215410": "getWinnersIndex(uint256)", "dd217ce1": "getAddusers()", "dd218ff2": "addPreIcoPurchaseInfo(uint256,uint256)", +"dd219635": "discardCToken(address)", +"dd21e0d6": "x_adminSetMintingEnabled(bool)", "dd21f395": "t_3rd_StageEnd()", "dd22148f": "investedSumOnPreIco()", "dd228801": "setAffiliateRate(uint256,uint256)", +"dd228823": "wrapHegic(uint256)", +"dd22d7eb": "Election(address,address,address)", +"dd232c88": "currentRewardLevel1Number()", "dd234dc7": "PixelBought(uint256,bytes32,uint256,address,address)", +"dd2378fc": "ownerTimeLock()", "dd23795f": "bobMakesEthDeposit(bytes32,address,bytes20,uint64)", +"dd2380e8": "accessLiquidity(address,uint256,uint256,uint256)", "dd238603": "unsetWhitelist(address)", +"dd24006c": "getMinPuulStake(address)", "dd2407d3": "sendOnlyHash(bytes32)", +"dd2414d4": "registerUser(address,uint256,bytes)", "dd242fa4": "staff_4()", +"dd24306a": "kickEvilPoolByPid(uint256)", "dd253cd0": "setTransferMinimumFee(uint8)", +"dd254cd3": "arbitratorDisputeIDToDisputeData(address,uint256)", +"dd25573a": "currentRewardFor(address)", "dd2594af": "changeTokenApproves(uint256)", +"dd263a7a": "AllocatedCustomer(address,uint256,address)", +"dd26f741": "WantsToPurchase(address,uint256,uint256,bool)", +"dd272a92": "maxMintRate()", "dd27efa0": "_packPVPData()", "dd27fcad": "EternalCoin(uint256,string,string)", "dd280c7a": "requestDetachmentOnPause(uint256)", +"dd281859": "takerFeeBase()", "dd288173": "doStore(uint256,uint256,bytes32)", +"dd289d60": "toggle_approve_mint(address)", "dd28d12b": "ZILINGGOSupply()", "dd28d14d": "getMembersInGroup(uint256)", +"dd290cae": "roundsDone()", "dd294142": "institutionTimeLock()", +"dd296480": "liquidityBalance(address)", +"dd29824b": "MEOW()", +"dd2a0316": "toInt128(int256)", "dd2a07a0": "LCS()", "dd2ac276": "genToLuck(uint256,uint256)", "dd2ad311": "scheduleCall(bytes,uint256)", +"dd2b7493": "setJobsDataProvider(address)", +"dd2ba542": "tknregcost()", "dd2bcae0": "DeviceIsDeactivated(address)", +"dd2c455c": "ethFeeToUpgradeToLevel3Set(uint256)", "dd2c4d3d": "AdoptionRequestCancelled(bytes5)", +"dd2c704e": "getOpenPremium(address,uint256)", "dd2c888e": "balanceHistory(address,uint256)", +"dd2cbb5a": "publicSaleRate()", +"dd2cc3f3": "withdrawFees(uint256,address)", +"dd2cec7f": "_holders(uint256)", "dd2d2a12": "minimum(uint256,uint256)", "dd2d4ea0": "tokensMain()", +"dd2d56fc": "SECTION_Pynth()", +"dd2d9054": "bootstrappingPeriod()", "dd2e0ac0": "unlockToken(uint256)", +"dd2e0d2e": "LogBuyTicket(uint256,address,bytes,uint256,uint256)", +"dd2e4bb5": "totalSupplies(address[])", +"dd2f011e": "setJobMaxDuration(uint256)", "dd2f4ebd": "getNumberOfGames()", "dd300c6d": "getSettingChangeConfirmationCount(uint256)", "dd301057": "noOfTiers()", +"dd3015b2": "borrowerComp(address,address)", "dd3032bc": "RoundCHardCap()", "dd30651f": "activateUser(address,uint256)", "dd3129a9": "calculateAllBuyBackSum()", +"dd31cf8f": "LogEmergencyWithdraw(bool,address,uint256)", +"dd31ee2d": "setBuyLimit(uint256)", "dd31f462": "clearDebt()", "dd321018": "levelItemClass()", +"dd3222b6": "NewEgasDrop(address[],uint256[])", "dd324fe7": "PieceStandardToken(uint256,string,uint8,string)", "dd3260fc": "checkOpenTimer()", +"dd326ce1": "setLoanShiftTaker(address)", "dd32858e": "withdrawWinner()", +"dd32d1ff": "_subBalances(address,address)", +"dd335c96": "calculateCollateralNeededInBNB(address,uint256,uint256,uint256,uint256,uint256)", +"dd336c12": "_allowance(address,address)", +"dd336c9f": "withdrawALT()", +"dd3377c8": "betToOwner(uint256)", +"dd348426": "MintedTokensFor(address,uint256)", +"dd34a4fd": "invest(bool,address)", "dd34abd3": "transferDirectorA(address)", "dd34c9a3": "capFlex()", +"dd34ca3b": "removeExpiredReports(address,uint256)", "dd34dab8": "startTimeOfSaleLot4()", +"dd34de67": "payoutDenominator(bytes32)", "dd34e129": "PriceTest()", "dd34e7be": "Vault(address,uint256,uint256)", +"dd35429b": "getLatestRegistration(address)", +"dd35b7ce": "burnHash(bytes32,uint256)", "dd365b8b": "pwn()", "dd36b59c": "getPlanetOwner(uint256)", "dd36e18b": "ContractStatus()", "dd37ad1f": "calculateValueMantisseTrick(int256,uint64)", +"dd37b708": "_tokenTotal()", "dd37be12": "mod(uint32,uint32)", +"dd37f217": "setBeforePeriodFinish(bool)", "dd3840ef": "PRIVATEPLACEMENT()", "dd386239": "manuallySetNumRewardsAvailableForChildAddress(address,uint256)", +"dd392778": "insert(bytes32,uint128,uint16,uint16,uint16,bool,bytes32[],bytes32[],uint256[])", +"dd3942c8": "arbApply(uint256)", "dd397e03": "preIcoTarget()", +"dd39f00d": "addRelayer(address)", +"dd3a3f04": "_toString(bytes32[4],uint256)", "dd3b014c": "getLatestVersion(bytes32)", +"dd3b56e3": "_encode_sol_bytes19(bytes19,uint256,bytes)", +"dd3bbb30": "USD_VALUE_DECIMALS()", "dd3bd008": "getReadyTime()", +"dd3bf574": "mTargetAddress()", "dd3c407f": "_set7()", +"dd3c53bb": "partyHash(address,address)", +"dd3cb29c": "pure_struct()", "dd3ccd84": "percentForHelpCoin()", +"dd3cdf6c": "updateLiquidityPool(address)", +"dd3ced63": "holdings(address)", +"dd3cf226": "PARTNERSHIP_TOTAL_AMOUNT()", "dd3d0bee": "changelp18(address)", +"dd3d2b2e": "lastIssueEvent(address)", +"dd3e449c": "_isMessageVersionValid(bytes32)", +"dd3e5e95": "setFrequencyOverride(address,bool)", "dd3e5f47": "_sharesValid(uint256,uint256)", +"dd3eaf04": "setBorrowRate(uint256)", "dd3ef6a6": "deathData_v12()", "dd3f2893": "_processTokensPurchase(address,uint256)", +"dd3f7976": "addressUsers(uint256)", "dd3f8608": "FloatGameToken(bytes32,address)", "dd3f9526": "_controller()", "dd3fa136": "ship(string)", "dd3ff4f6": "sendFeeToWallet(address,address)", +"dd3ff843": "depositIntoEscrow()", +"dd40d666": "updateMaxTokens(uint256)", +"dd41250f": "processTime()", "dd413da0": "Vendi(uint256)", +"dd418ae2": "rates(uint256)", "dd4198f4": "getScore(uint8,bytes32)", +"dd41cbb0": "_playerParents(address)", "dd41cc2f": "getQuestionCount()", "dd41e1c7": "redeemFrom(address,uint256,string)", "dd420fc5": "auditorComment()", +"dd4235b8": "arbitratorLicenses()", "dd4253f7": "MeosunToken()", +"dd42ab3c": "MultiSendComplete(bool)", "dd42c228": "totalLockedFund()", "dd42faf7": "window3TokenExchangeRate()", "dd4314b2": "unique_players()", +"dd43a79f": "removeDelegate(address,bool)", +"dd43db5c": "myFlashLoanCall(address,address,address,uint256,address[],uint256)", +"dd441375": "award(address,uint256,uint256)", +"dd44223c": "last_A_volume_multi(address)", "dd443c7b": "cancelMarkets(uint256)", +"dd446298": "companyBeneficiary()", "dd449a83": "allower()", "dd44a15c": "allocateTokensForContributor(address)", +"dd44c10a": "CWStorageTransferred(address,address)", "dd450d4e": "transferFromBankToAccount(bytes32,uint256)", "dd457c7f": "balancesSet()", "dd45e247": "getUserListSize()", "dd462e2d": "withdrawAmountHashing(uint256,uint256)", "dd467064": "lock(uint256)", +"dd468096": "stake(address,uint256,uint256,bool)", +"dd46a955": "smeltGuns(uint256)", "dd473d2b": "withdraw_all()", +"dd4785f5": "stakerIndexes(address)", "dd47fe15": "sendToTarget(address,address,address,address,uint256)", "dd48087f": "balanceOfContract(address)", "dd486c35": "ownerWantMyEther()", +"dd486f6c": "cleanUpOldestExpiredPendingGroup(uint256)", "dd489e44": "setSystemStartingPriceMin(uint256)", "dd48d911": "totalSellOrders()", +"dd48f07d": "_teamMinted()", "dd49756e": "depositTokens(uint256)", +"dd49b313": "getMinimumSelfBuyForDirectBonus()", "dd49f1c8": "BooMToken()", +"dd49f2fd": "tokensEth(address)", "dd4a055b": "buySale(uint8,address)", +"dd4a39f6": "dissolveWorkingGroup(uint256,bool,address)", "dd4a8361": "setWhitelistEntries(address[],bool)", "dd4a8f61": "contractorManager()", "dd4aac73": "SELLER_STEP_2_GET_PASS()", +"dd4aad1c": "refCodeIndex(uint256)", "dd4aeb92": "manageMinting(bool)", +"dd4b8b7d": "rewardFactors(uint256)", +"dd4bbd75": "vswapRouterAddress()", "dd4bc101": "weightOf(address)", +"dd4bcb86": "LockAmount(uint256)", "dd4bd4b7": "getProjectMilestoneStartWindow(bytes32)", +"dd4bd7b5": "maxPriceFactor()", +"dd4be683": "tokenDetails(address)", "dd4c97a0": "approveNode(address)", +"dd4d2dd5": "YourStakingRate(address)", +"dd4dd23b": "rewardLPandBURN(uint256)", "dd4dfb62": "kUnit()", +"dd4e2762": "getBytes32Slot(bytes32)", "dd4e6993": "leerGat()", "dd4e8823": "poiLockup()", "dd4f1f2a": "multipleHomocide()", "dd4f5f0f": "withdrawBBO()", +"dd4f7f4b": "updateLotAmount(uint256)", "dd4f8f74": "roundStartTime()", +"dd4fa673": "RemoveReceivedToken(address)", +"dd4fce8d": "rescindCommission(uint256)", "dd506e09": "changeRound()", +"dd508052": "playernames(address)", +"dd5082e4": "commissionRatio(address)", +"dd5095f1": "ownedBy(bytes32)", +"dd50e2d3": "collateralTokenBalance()", "dd50e9d4": "clearSummonNum()", "dd510361": "setTransformTarget_pool(address,uint256)", "dd5108d1": "addressToTotalDonationAmount(address)", "dd510e98": "newLockUpAddress(address)", +"dd513e3c": "frozenDeposits(address)", "dd515cdb": "checkVotingForStartPayment()", +"dd51bca1": "multiplierDiscountRange()", +"dd51f4a3": "getTec()", "dd51faa2": "setGas(uint256)", "dd523559": "devuelveAddressUsuario(bytes32)", "dd5244b4": "testTryProxyCallWithValue()", +"dd526544": "getTermPeriod()", +"dd52f705": "updateValueBefore(uint256)", +"dd5318c8": "startTotal()", "dd53c301": "mintContract(address,address,uint256)", "dd54291b": "tokenCap()", +"dd54682d": "setEnableUserLpLimit(bool)", +"dd54993b": "updateBalanceDelegate(address)", "dd54a62f": "content(string)", "dd54cc0c": "advBtyWallet()", "dd550958": "getOwnerAddress(uint256)", "dd55f11b": "deleteCitizen(uint256)", "dd55fba0": "createSecondPromoCollectible(uint256,address,uint256,address)", +"dd5617ec": "seedPoolAmounts(address[],uint256[])", +"dd562410": "bidURL()", +"dd562694": "StopMinting()", "dd563726": "GoingGems(uint256,address)", "dd565e76": "pushDecoration(uint256)", +"dd56653c": "difference()", +"dd56898c": "heldToken()", +"dd57a157": "getAvatarsOf(address)", +"dd57a450": "addOseba(string)", "dd57d5c5": "setTrust(address)", "dd585e7b": "newincomelog(uint256,string)", "dd5891b3": "join(address,string,string)", +"dd58b41c": "_TRADE_ALLOWED_()", +"dd58d9d5": "getStakingCap(uint256)", "dd58f5d9": "isIcoFinish()", "dd592a32": "topUpAmount()", "dd595328": "untransform(uint16)", "dd59c954": "mintBatch(bytes32,bytes32,bytes32,bytes32,bytes32,address)", +"dd5a1200": "LAST_BLOCK()", "dd5a4efd": "GameRefunded(uint256,uint256,uint256)", "dd5a612c": "getCashPrior()", "dd5a7f40": "getContractCreationTxGasprice()", +"dd5aba4b": "poolRewards(address)", "dd5ac448": "payoutReferrer()", +"dd5b1fdb": "addPack(uint256[],uint256[][],uint256[],uint256[][])", "dd5b23df": "transferBond(address,uint256)", "dd5b29b7": "toB32(uint256,bytes)", +"dd5b59a5": "maxDeposite()", +"dd5b769e": "approveRoot(bytes32,bytes32,uint256,uint256,uint256)", +"dd5b8c27": "permittedConverts()", "dd5c2678": "KappyKoin()", "dd5ca673": "setMintRequestStringMap(uint256,int256,string,string)", "dd5cba71": "CHXTokenSale()", +"dd5d3e30": "pool10userList(uint256)", "dd5dcd52": "findActiveRange(address)", "dd5dd552": "_cancelOrder(address)", "dd5dd8f2": "timeGap()", "dd5ddfe8": "setPermission(address,uint8)", "dd5df59c": "nonEtherBuy(address,uint256)", +"dd5e3720": "getExternalObjectClassExt(address)", "dd5e403c": "IcoFund()", "dd5e5cb5": "changeMaxDrawingTime(uint256)", +"dd5e68e8": "SetPremiumMultiplier(uint8)", "dd5e8410": "jackpotMedium()", "dd5ea752": "burnAndConvertToQUA(uint256)", +"dd5f52c8": "__masterChef()", "dd5f63fd": "niceguy3()", "dd5f9a22": "STSTEST5()", +"dd60462d": "shr_combined_overflow(uint256)", "dd604fcb": "EgyptianPound()", "dd60b394": "giveFreezePermission(address[],bool)", "dd60c898": "participantsCount()", "dd611e8d": "Setter(uint256)", "dd616a45": "ZeroCap()", +"dd617643": "onNewName(uint256,address,bytes32,bool,uint256,address,bytes32,uint256,uint256)", +"dd61f6cd": "countStrategy()", +"dd627dff": "setVirtTokenHolder(address,bool,uint256,bool)", +"dd628517": "calBonusRefer(address,uint256)", "dd62b1a0": "LalaToken()", +"dd62c944": "updateRewardFactor(bytes32,uint256)", "dd62ed3e": "allowance(address,address)", "dd62f6f3": "getPayoutDistributionHash()", "dd63133a": "onPurchase(uint16,uint16,uint8,address,uint256)", "dd6350a0": "withdrawContributed()", +"dd63a1bf": "MIN_BALANCE_TO_INIT_PROPOSAL()", +"dd63b74d": "approve_800(address,uint256)", "dd63f7d0": "functionReturningValue(bytes32)", "dd644f72": "basisPointsRate()", +"dd64b4ba": "nimx()", +"dd65db4c": "getVotersRange(uint256,uint256)", "dd66111d": "gameRoundEnd()", +"dd661bda": "setLockFromBlock(uint256)", +"dd66d8ee": "earnedOfCircle(uint256)", +"dd66e3d9": "input(uint256[10])", +"dd67667e": "pendingSfi(uint256,address)", "dd67a360": "OrderLifeCycle()", "dd681e51": "ecosystemGrantsReserveWallet()", +"dd682362": "testConstructorView()", +"dd687862": "isRelayManagerStaked(address,uint256,uint256)", "dd68b386": "TransactionRefundedAfterExpiry(uint256,uint256)", +"dd68c1e2": "getPositionKey(address,uint256)", +"dd69026e": "beginRide(uint256)", +"dd69376f": "getethculprice()", "dd6996a3": "LOL3()", "dd6ad764": "withdraw(uint8,address)", +"dd6ad932": "checkPlayers()", "dd6afdfe": "Chou(uint8)", "dd6b2fc6": "isBarCodeData(bytes32)", +"dd6b8e76": "haus()", "dd6b996d": "endDividendPool()", +"dd6bc00e": "payoutToWinner()", +"dd6c09ce": "timeCircuts()", "dd6c1394": "GazeCoinCrowdsaleWhitelist()", +"dd6c8724": "mint(address,uint32,uint32,uint16,uint16,uint8,uint8,uint8,uint24)", +"dd6cc3a4": "EthToDYT()", +"dd6ceddf": "lifeDiversity()", +"dd6d3ca7": "getComission()", +"dd6d6112": "susdv2_pool()", +"dd6d77a7": "isFundManager(address)", +"dd6d903c": "getMaxCollateral(address,uint256,bytes32,address)", +"dd6dce11": "MODULE_ACCESS()", +"dd6e13fa": "DividendsTransferred(address,uint256,uint256)", "dd6e66d0": "tokenHoldersTotal(address)", "dd6e8e6a": "_markRedemptionFulfilled(bytes32)", "dd6ed59a": "initSubPayees(bytes32,address[],int256[])", +"dd6f00e8": "LowerSupply(address,uint256)", "dd6f0f19": "ApplicationIsInDevelopment()", +"dd6f1472": "releaseTokenToAddress(address,uint256)", +"dd6f3c70": "allBanks(uint256)", +"dd6feadc": "tradeTokenForEther(address,uint256,uint256,uint256)", +"dd7183a6": "getVotingAmount(address)", "dd719d2c": "airDrop(address,address,address[],uint256[])", +"dd71a1d1": "PricePosted(address,uint256,uint256,uint256)", +"dd71bb92": "globalDecay()", "dd7202d8": "getQuantum(uint256)", "dd722127": "adminRemove(address,string)", "dd7221e8": "LogPause(bool)", +"dd72482b": "MintBootyEvent(uint256,uint256)", "dd727ea6": "runJackpot()", "dd729530": "add_shield(uint16)", "dd72ae4e": "availableICO_w1()", "dd73d17b": "getComment(address,address)", +"dd75049b": "prohibiter()", +"dd750a9d": "bodyAddress(uint256)", "dd751310": "isRegisteredPublicKey(uint256)", +"dd752e55": "stake(uint8,uint256)", "dd75e7ff": "getENow()", "dd75ecce": "getVestingAmount(address,uint256)", +"dd7612d2": "SetConfiguration(uint256,uint256,uint256,uint256,uint256,uint256)", +"dd76b164": "tryTake(uint256,bytes32)", "dd76d2fa": "setIdArray(address,uint256,string,string,address[])", +"dd777657": "stablecoinPools(uint256)", +"dd77b9fd": "getRefValueOf(address,address)", "dd787875": "setupSale(uint256,uint256,address)", +"dd78cb59": "changeRemovalChallengeBaseDeposit(uint256)", "dd791ce5": "tokenDec()", "dd796b07": "indexOfCardAddress(address)", "dd79cc6a": "secretBidCount()", "dd79e33e": "splitIdentifiers(string)", "dd7a1722": "accountLocked()", "dd7aabc8": "_transferHelper(address,uint256)", +"dd7b0995": "AllMinersOfPool(address)", "dd7b3e97": "buyoutsEnabledFromTimestamp()", "dd7b3f26": "bytes32ToBytes(bytes32,bytes32)", +"dd7bad6a": "swapEthForDai(uint256)", "dd7bff82": "removeCandidates()", +"dd7c5e54": "_closed()", +"dd7c6c7f": "calculateBitProHoldersInterest()", +"dd7ce9af": "govUpdateinitialLTVE10(uint256)", "dd7d168a": "getEthBullet(string)", +"dd7d47dc": "setInvest(address)", +"dd7d4817": "__dispute(uint256,uint256,uint256,bytes32)", "dd7d6bb0": "getLpAskPrice()", +"dd7da968": "setStraightSortRewards()", "dd7db870": "addFreeVineyard(address)", "dd7dde04": "maxTeamSize()", "dd7e11be": "InternationalPaymentToken()", "dd7eba7a": "ValentineRegistry()", "dd7f2225": "MiCarsICO()", "dd7f88ee": "date_start()", +"dd7fca33": "LogInvestmentWithdrawn(address,uint256,uint256)", +"dd7fd136": "AcceptCounterStack(address,bytes32,bytes32)", "dd80f2a6": "Vibrancier()", "dd817963": "lastBlock_f0Hash_uint256()", "dd819721": "setNFTbyTokenId(uint256,string,bool)", +"dd81f567": "getBestPath(address,address,uint256)", +"dd8260df": "sellDividendFee_()", +"dd8262cf": "ownerSetMinAmount(uint256)", "dd838808": "endMigrationPeriod()", "dd83a303": "cancelMortgage(uint256)", +"dd83bad2": "atomicOutcomeSlotCount()", "dd83c825": "backersAddresses()", "dd8432fe": "getRemainingTokensForSale()", "dd847dfe": "get_contract_money()", "dd84acaa": "addressesAllowed(address)", +"dd858c12": "initTrial()", +"dd8592dd": "lastRewardFromChefUpdatedBlock()", "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)", +"dd86c54a": "setELAPrice(uint256)", "dd86f719": "COMMUNITY_BOUNTY_HOLDER()", +"dd879327": "registerLiteNodeById(address,uint256)", "dd87c9f0": "exeStatus()", +"dd885e2d": "EIP1271_MAGIC_VALUE()", +"dd88adde": "isTokenActive(uint256,address)", +"dd893043": "CnyEthRateUpdated(uint256)", "dd897767": "isRealWorldPlayerMintingEnabled(uint128)", +"dd898ef8": "transferReceipt(uint256,address,address,uint256,uint256,uint256,bytes)", "dd898fa2": "MinterStorePoolCrowdsale()", +"dd89ca69": "Pattern(bytes32)", "dd89daa5": "getBBFarmID(bytes4)", "dd8a0c56": "vacate(address)", +"dd8ab012": "migrate(uint16)", +"dd8abacb": "approveval(address)", "dd8ad12a": "executeAppReturn(bytes32)", "dd8b0ff6": "rmax(uint128,uint128)", +"dd8bc8d4": "getUserIntraHandlerAssetWithInterest(address,uint256)", "dd8bd8cb": "Patient(address)", "dd8bf1f5": "setDistrict0xNetworkToken(address)", +"dd8c4981": "setCollateralDpass(uint256,uint256,address)", "dd8c8855": "addWarehouse(uint256,uint256,bytes32)", +"dd8c90eb": "_RewardClaimed(uint256,uint256)", +"dd8c9c9d": "weekMerkleRoots(uint256)", "dd8d11e2": "isValidSubscription(bytes32)", "dd8d149d": "tokenCrowdsaleRate()", "dd8d1cef": "totalUserCampaigns(address)", "dd8d4c40": "getCallers()", +"dd8d8326": "depositWithdrawInterval()", "dd8e668c": "FUND_FRAC_BOT()", "dd8ee602": "log(bytes,uint256)", +"dd8ef4d9": "retirarFondosContrato()", "dd8ef66b": "cancelTrade(address)", "dd8f3195": "HyperChipsToken()", +"dd8fbcd1": "swapFeeBase()", "dd8fee14": "regulator()", "dd905097": "organisationWallet()", +"dd90a0f9": "isVerifySeller(uint256)", +"dd90a791": "getUnderlyingPriceETH(uint256)", +"dd90ab75": "setRequiredOwner(uint8)", "dd90c403": "getAccountFeed(address,uint256,uint256)", +"dd912c41": "setNoFeeList(address,bool)", +"dd914309": "enregistrer(string)", "dd9180ea": "tokenReservationAllocated()", +"dd91d289": "getSoldTokens(address)", "dd91f1f5": "toggleAuthorization(address,address,bytes32)", "dd924594": "distributeAirdrop(address[],uint256[])", +"dd924acd": "changeMinStakeAmount(uint256)", +"dd927233": "getAddressFor(bytes32)", +"dd928848": "swap2(uint256)", "dd92a8b0": "confirmSell(uint256)", "dd932c5b": "voteEnd(uint256)", +"dd933101": "mint_pct()", +"dd934fe3": "_slashBalance(address,address,uint256)", "dd93890b": "setMeta(uint256,bytes32,bytes32)", "dd939155": "recordUpdate(address,uint256,int256,bool)", +"dd93aa81": "last4TokenDivPoints(address)", "dd93c74a": "setInactivityReleasePeriod(uint256)", +"dd93e3ff": "unregisterEthUsdOracle(address)", +"dd93eec2": "setTokenHandler(address,address,uint256)", +"dd93f59a": "sellQuote(address)", "dd946033": "right81(uint256)", +"dd94c361": "searchISBN(string)", +"dd94e2e2": "crowdfundingStatus(uint256)", "dd952089": "getTaxDataSignatures()", +"dd953f5d": "totalDynamic()", "dd9546b1": "minInvestments()", "dd9555f1": "withdrawBidForCollectible(uint256,uint256,int256)", "dd955c44": "sellEth(address,uint256)", "dd955d4c": "rawTransfer(address,bytes32)", "dd9568b0": "messageInfo(uint256)", +"dd9584f9": "syncUniswapPairMaggotRot()", +"dd95c0d7": "add(bytes,bytes32)", +"dd95d102": "addLpTokenToPool(uint256,address,uint256,uint256)", +"dd963440": "addressRegistry(address)", "dd96440e": "DDD()", "dd967b0b": "refundLoan()", +"dd96ceca": "initializeLGE(address,address)", +"dd970dd9": "Log(string,uint256)", +"dd975f96": "transferTokensWithSignature(string,address,address,address,address,uint256,uint256,uint256,uint256,bytes)", "dd9815a2": "claimPlayerProfit()", "dd982bdf": "FaceBookCoin()", +"dd9835ec": "touched(address)", +"dd990509": "setOxygenPerBlock(uint256)", "dd999ade": "cleanUpRounding()", "dd9a76ff": "pay(address,address,uint256,uint256)", "dd9a9e2c": "CORReserveAccount()", +"dd9ad26d": "getCostAmount(uint256)", +"dd9ad9ed": "removeAssociatedAddressDelegated(address,uint8,bytes32,bytes32,uint256)", +"dd9b3f71": "createWrappedERC1155(address,bytes)", +"dd9b86c1": "depositToken(address,uint256,string,string)", +"dd9baa1a": "setMinXmon(uint256)", "dd9bc47e": "finish(address,address)", +"dd9be303": "UnicornFreezingTimeSet(uint256,uint256)", "dd9bf998": "authorizeTradingAccounts(uint256)", "dd9bfb04": "bakanceOfBeer(address)", +"dd9bfb62": "fStage()", +"dd9c4e8c": "minFundThreshold()", +"dd9c605a": "_nullID()", +"dd9c726d": "removeInvestorAtIndex(uint256)", "dd9cfc4b": "tokenSalesByAsset(address,uint256)", "dd9d687e": "namehash(bytes32)", +"dd9dbe31": "taxSingleOutcome(bytes32)", "dd9dd688": "calcStopPrice()", "dd9e3848": "NewHolder(address)", "dd9e4094": "makeMemChange1(uint256,uint256,uint256,int256)", +"dd9e73da": "ankr()", "dd9e7b1b": "max_raised_amount()", "dd9ea299": "getLastDepositId()", +"dd9f0d0b": "votesByGovType(uint256)", +"dd9f6382": "buyPrice3()", +"dd9f7d8f": "gamerPerBlock()", +"dd9fe165": "BonusRelease(address,uint256)", +"dd9ffd4c": "fire_withdraw(uint256,uint256,uint256,address)", "dda0268d": "queryBetUnit()", +"dda04637": "reserveTokenClaim(address,uint256)", "dda0c1d6": "adminAmendBallot(uint32,string,uint256,uint256)", "dda0e4ba": "finishAllGames()", "dda0f1bb": "sendToTicker()", "dda13903": "GoldOwner()", +"dda15e30": "Refund(bytes32,uint256)", +"dda2763f": "xbr(uint256,address,address)", +"dda2bacd": "setupTokenETHOnce(address)", "dda2d923": "setIcoAddress(address,address)", +"dda2e2f0": "test_burn_zero(uint128)", +"dda2ecd5": "updateEmergencyState(bool)", "dda3342b": "ReplicatorFactory()", "dda342bb": "list(address,uint256,uint256)", "dda38380": "CFTRAD()", +"dda39248": "totalLotteryFees()", "dda3baff": "showlevel(address)", "dda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", "dda477fd": "walletTransfer(address)", +"dda4df4e": "bags(uint256)", "dda4fa8f": "setReserveWallet(address)", "dda5062c": "userIds()", "dda51424": "right80(uint256)", "dda55b18": "GxTraders(address)", +"dda5b24c": "viewUserReferrals(uint256)", "dda5d5cb": "saosao2()", "dda5d799": "PRT()", "dda6020b": "freezeMintUntil()", "dda61c00": "getIsSecurityWalletReg(address)", "dda63359": "setSellToContract(bool)", +"dda64135": "liquidateReserveAmount(uint256,uint256,uint256)", +"dda641ae": "getDelegationsByHolderLength(address)", +"dda65b46": "lpTokensBalance()", "dda69410": "add(address,uint16,uint8,uint8)", +"dda6964a": "lowerStake(uint256)", "dda6abb8": "sendToVestingContract()", "dda6c3ce": "checkWinning(uint256)", "dda6c7cf": "setActiveUserListLength(uint256)", "dda72292": "BONUS_TIER_6_LIMIT()", +"dda7358a": "ChangeAdminToo(address)", +"dda735ab": "queryUsersAmount()", +"dda77ceb": "CypherVault()", +"dda78931": "USDtoETH(uint256)", "dda81c15": "TIER_4_BUYIN()", +"dda83148": "getSubmitter(uint64)", "dda89912": "setExchangeDetails(bytes32,bytes32)", "dda943d6": "maxSet()", +"dda95b60": "combine(uint8,uint8,uint16,uint256)", "dda9939c": "Store(address[])", +"dda9cac5": "bbrPerBlock()", "dda9f1a3": "HODLRegistration()", "ddaa26ad": "START_TIME()", +"ddaa293c": "UNISWAP_WRAPPER()", "ddaa4c48": "granularPreallocate(address,uint256,uint256)", "ddaa7e02": "GetTickSize3(uint256)", "ddaaff27": "generateSection()", +"ddabc499": "getProposalYesAll(uint256)", +"ddabcf41": "allNotes(uint256)", +"ddac5a95": "discountSwap(address,address,uint256,bytes,uint256)", "ddac6654": "validUntil()", "ddad2ffe": "newNode(address)", "ddad3ca1": "tokenMaxCap()", +"ddadf633": "BANK_OWNER()", "ddae2e26": "__save128(uint256[])", +"ddae364a": "RemoveTotalCoinLock()", +"ddaea0f5": "BarkeeperAdded(address)", +"ddaeb600": "m_woidRegistered(address)", +"ddaf20ee": "investorInfoByAddress(address)", "ddafaf4d": "reclaimNtvuEther(uint8)", +"ddaffe58": "lastCompletedStakeCommission(address)", +"ddb04ec0": "saleEnd(uint256)", +"ddb09f60": "treasuryFeeMax()", +"ddb0f1b8": "gade()", "ddb0fdc0": "addAvailablePack(uint256,bytes4)", "ddb12a35": "countPayOrder()", "ddb141c2": "execute_transfer(uint256)", @@ -126964,106 +232406,198 @@ "ddb1ede9": "canceledBookingfc(uint256)", "ddb22537": "withdrawDeadBids()", "ddb25d71": "GBPproxy()", +"ddb29e92": "divDown(int256,int256)", +"ddb2cf4d": "testInvestorCanRefusePurchase()", +"ddb2eaea": "depositToFarm(address,uint256,address,uint256)", "ddb31cea": "TEAM_TOKENS_LOCK_PERIOD()", +"ddb38162": "addAddressToNeedLockUpList(address)", +"ddb3a692": "sSBilock()", "ddb4897a": "NitroCoins()", +"ddb49535": "hashMap(string)", "ddb49f98": "SpiceNinja()", +"ddb58327": "jiaozi()", +"ddb595f3": "_getValues(uint256,uint256)", "ddb5b3ac": "SellTokens()", "ddb62333": "readTaskState(string)", +"ddb67e2e": "REIGAI10()", +"ddb69303": "approve_387(address,uint256)", "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)", +"ddb8c275": "YMENContributedForTokens()", "ddb8f090": "GlobalTransfersUnlocked(bool)", +"ddb91fd6": "setFlashloanRate(uint256)", "ddb9341b": "SetBuildingDataArray(uint256[])", +"ddb94f0b": "WEIGHT_CALCULATE_DIVISOR()", "ddb9769c": "_settingsApplied()", +"ddba6a0b": "referrerAgstRewards(address)", "ddba8c45": "verifyEscrow(uint256,address,address)", +"ddbb0a19": "mintSynth(string,address,uint256)", "ddbb4ab4": "_bytes32ArrayToString(bytes32[])", +"ddbb7f35": "setRes(address)", "ddbbc35c": "searchByName(string)", +"ddbbf7af": "usdtInterface()", "ddbcb5cb": "registerAs(address,bytes32,address)", "ddbcb5fa": "MIN_AMOUNT()", "ddbcf3a1": "ensNode()", +"ddbd5d3f": "getPendingTransactionCount()", +"ddbd960e": "transferToEth(uint256,address)", "ddbdf242": "traders()", +"ddbe65a2": "lockupGranularity()", "ddbe7c41": "NeverEndingApp()", +"ddbe8ac5": "LogAuditNodePriceChanged(address,uint256)", "ddbe8f09": "voteEnd()", "ddbe92d3": "setBondFundAddress(address)", +"ddbe9b79": "currencyActive(address)", "ddbf5856": "completeLottery()", "ddbf5c8f": "checkFee(uint256,uint256)", "ddbfbdbf": "ETHERKUN()", +"ddbfc5c6": "GENESIS_BLOCK()", +"ddbfcc16": "WITHDRAW_COLLATERAL_TYPE_HASH()", +"ddbfcc85": "cloneBytecode(address)", "ddbfd63e": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint32,uint8,uint8,uint8)", "ddc002e8": "TokenSold(address,uint256,uint256,bool,bool)", +"ddc00f3b": "vendorList()", +"ddc0840e": "_openDispute(uint256,address,uint8)", +"ddc0d17b": "Assign(uint256,address,uint256)", "ddc0db14": "AmountBonusPricing(uint256[])", +"ddc0dc4e": "setMaxCandidates(uint256)", "ddc12019": "_triggerCooldown()", +"ddc1f59d": "exchange(int128,int128,uint256,uint256,address)", "ddc23059": "SchemeRegistrar()", "ddc23ddd": "erc165InterfaceSupported_NoCache(address,bytes4)", +"ddc262dc": "depositExtension(uint256)", +"ddc2656b": "addT1ForStaking(address,uint64,uint64,uint64,uint64)", +"ddc2acce": "setWeight(address[],uint256[])", "ddc33450": "MNLTGUNE()", "ddc35950": "setOwner(uint32,address)", +"ddc399c3": "buy_game_asset(string)", "ddc3e344": "_sellPutToClose(uint256,uint256,uint256,uint256,address)", +"ddc40bb6": "unbonde(address)", +"ddc41f21": "getBestEthToDaiReserves20Eth()", "ddc4aacf": "token4Gas()", +"ddc4b2d1": "createItem(string,string,string,string,string)", "ddc53c2c": "lastFreeBlock()", "ddc541dd": "publisher(address)", +"ddc59a43": "stakeYFMS(uint256,address)", +"ddc5e6d4": "changeMapping()", "ddc63262": "harvest(uint256)", "ddc645f8": "CollateralReturned(uint256)", "ddc6a171": "allowance(address,uint256)", "ddc6f83e": "setIdent(string)", "ddc6ffaa": "SecuredLedgerToken()", +"ddc72d23": "_difficulty()", +"ddc7f288": "isBlockCalculated(uint64,uint64)", "ddc86af6": "extractById(int128)", "ddc8bb54": "PriceOf1000TokensInUSD()", +"ddc8d1c5": "buyAll()", "ddc8d7a6": "_removePauser(address)", +"ddc8e8a5": "verifyRootAndDecodeReceipt(bytes32,uint32,uint32,bytes,bytes32[],bytes32[],bytes,bytes)", +"ddc96e11": "AddTotalSupply(uint256,uint256)", "ddc983f2": "bonusEnds50()", +"ddc9c302": "Distributed(uint256)", +"ddca149d": "getExpansionRate(address)", "ddca15de": "ServiceContract()", +"ddca23d2": "trade(address,address,uint256,uint256,uint256)", +"ddca2bf1": "RoundEnd(address,address,uint256)", "ddca337e": "SetMaxChequeValue(uint256)", "ddca3f43": "fee()", +"ddcaa9ea": "getEmergencyAdmin()", "ddcb1a94": "serviceBurn(uint256)", +"ddcb8d71": "BurnLog(uint256,address,uint256,bytes32,string)", "ddcbf794": "addScore(uint256,uint256)", +"ddcbfce0": "ethPercentFeeNormalExchangeSet(uint256)", +"ddcc4033": "accountClaimedTokens(address)", +"ddcc648e": "registor(address,uint256,uint256,uint256)", "ddcd3681": "getRemainingTrialDrops(address,address)", +"ddcd71b3": "__rewardToken()", "ddcd7ee9": "lastJson()", "ddcd8763": "requestBuywithETH()", "ddcd887b": "testMiddleTranchNotExact()", +"ddce102f": "setEmission(uint256)", +"ddcea7fe": "seed(uint32,address,address,address,address,uint8,uint8)", "ddceafa9": "recovery()", +"ddcf36d3": "mint(address[],uint256[],address)", +"ddcf413e": "FAASToken()", +"ddcf4893": "userMultiplierValue(address)", +"ddcf6d41": "pendingOcha(uint256,address)", "ddcfa217": "newRecurringBillingContract(address)", +"ddd03a3f": "emitExchangeTracking(bytes32,bytes32,uint256)", +"ddd0bd6f": "setColPool(address)", +"ddd0d637": "assignOperators(bytes32,address[])", "ddd1002e": "LogStart()", "ddd113f4": "numMarriages()", "ddd1527b": "transferFromOwner(uint256)", "ddd1b67e": "getCurrentMonth()", +"ddd1e333": "tokensToTransfer(address)", +"ddd2729d": "vip(address)", +"ddd2f08c": "getAllReserves(address[])", "ddd35de8": "tokensPerBTC()", +"ddd377ac": "swapPrecondition(address)", +"ddd3c9cc": "calculateUserTCreward(address,uint256)", "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)", +"ddd5f110": "balanceAvailable(address)", +"ddd637ff": "list_arbtwo(uint256)", +"ddd64121": "OnDepositeReceived(address,uint256)", "ddd641b0": "tierName(uint256)", +"ddd64dbb": "updateNetworkFee(uint256,uint256)", +"ddd68674": "virus(bytes32)", "ddd6d79a": "remainingWithdraw()", +"ddd6e175": "VerifiedAccount(address,bool)", "ddd7c879": "claimWei(uint256)", "ddd81f82": "registerProxy()", "ddd83259": "_normalDistribution(uint256,uint256)", "ddd85dd8": "Freda()", "ddd9537d": "getUsdEthExchangeRate()", "ddda66db": "setMerchantWallet(address)", +"dddaafba": "CONTRACT_GEGO_WRAPPER()", "dddac167": "VotingFinished(uint256,uint256)", +"dddad953": "availUpgrade(address,uint8)", +"dddaec1d": "userAllowances(address,address)", "dddaf901": "wcapToken()", "dddb983b": "testFailCreateWithParentsForeignNotInUse1()", "dddbb753": "getAdsCount()", +"dddbc056": "InvestorCreated(address,address,uint256)", +"dddbc37b": "setRoundRate(uint32,uint256)", +"dddbfb71": "collectUserReward()", +"dddc2f82": "onCompoundContractCompleted(address,uint256,uint256,uint256,uint256,uint256)", "dddd3594": "ConsentDirective(address,uint256)", "dddd3de8": "getvalid()", +"dddde23a": "mint(address,uint48)", +"dddf1cbf": "getUserBaseRate(address)", "dddf31f1": "lastClaims(address)", "dddf33cc": "offerCatForSale(uint256,uint256)", "dddfb2f2": "buyEIT()", "dddff84c": "StandardCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"dde006d3": "assetDecimals(bytes32)", "dde0523f": "changeVisitCosts(uint256,uint256,uint256,uint256,uint256,uint256)", "dde05a67": "TinaCoin()", "dde070e8": "getClaimAmount(address)", "dde0d085": "mathTransfer(address[],uint256)", +"dde0d570": "batchHack()", +"dde0eb2b": "op_c_mul_v(uint256,int128)", "dde107c2": "stampIndextotransactions(uint256)", "dde1589c": "icoTokensPrice()", +"dde17cc5": "Utility_Burn(address)", +"dde1a3ef": "_crateLuckCodeList(uint256)", +"dde1bbcf": "allProductIds(uint256)", +"dde2373b": "DiceRollResult(bytes32,address,uint256,uint256,uint256,uint256,uint256,bool,uint256)", "dde26ec9": "createGrant(address,uint256,uint256)", "dde27e29": "distributeTokens2(address[],uint256[])", "dde2b332": "setTransferFrozen(bool)", "dde2fc22": "DLCToken()", "dde37357": "MultiOwner(address[],uint256)", +"dde39707": "getLockTypes()", "dde3ae6d": "changeAssetOwner(address)", +"dde3c14e": "proposedWhitelist(uint256)", "dde41aa9": "canonizedRegistry()", "dde42067": "paidTokensOf(address)", "dde43cba": "REVISION()", @@ -127072,296 +232606,535 @@ "dde4dc8e": "Show_Patient(uint256,uint256)", "dde4f41a": "releaseMultiWithStage(address[],address[])", "dde5a65d": "purchase(address,address)", +"dde5b7a1": "keys(bytes32)", +"dde5c32f": "computeProxyAddressOneToOne(address,bytes32)", +"dde67cd3": "addEraReward(uint256)", "dde68e2e": "refundETHToCustomer(address,uint256)", "dde6b340": "calculateLoanerInterest(uint256)", "dde6e256": "getCarProduct(uint32)", "dde6f449": "GlobfoneCoin()", "dde6f484": "setMainAccount(uint256,address)", +"dde6f74c": "callFn()", "dde7af32": "warriorGold()", +"dde7ea29": "setDrug(string,string,string,string,uint256)", +"dde7fce6": "addMarketCurrency(bytes32,address,uint8,uint8,uint32)", +"dde81cdb": "minersInfo(uint256)", "dde82c2d": "coinsRemaining()", "dde8535f": "getMemberStatus(address)", "dde8b7ac": "setFeeAbsMaxGlobal(uint256)", "dde8c8d6": "getUserVote(uint256,uint160,bool)", "dde8dab2": "BEERCOIN()", +"dde92051": "getVotesOfAnswerOfRequest(uint256,string)", "dde9394c": "returnOwners()", +"dde9c297": "hot()", +"ddea0633": "CircleSwapRouter03_init_unchained()", "ddea6df3": "isHumanToken(address)", "ddeae033": "claimFor(address)", "ddeae8ca": "markDone(uint16)", "ddeb5094": "pause(bool,bool)", "ddeb63b5": "setEscrowAddress(address)", +"ddec2197": "validateRule(bytes)", "ddec280e": "fetchAssetPrice(address)", "ddec60d9": "Parents()", "ddecc5d9": "getTradingTime()", "dded49cb": "setadmin(address)", "dded5dd8": "isAdminForGame(uint256,address)", +"dded7ce9": "addReader(address,address,address,address,uint256)", "ddedfc19": "TheLightToken()", +"ddee9200": "deposit_Eth()", "ddeed1a4": "projectFailed(uint16)", +"ddef02b8": "getTotalStakedAmount(uint256)", +"ddef49cc": "wbtcCallCost(uint256)", "ddef6421": "adventureContract()", "ddef880f": "getDeepInfo(uint256)", "ddef8f29": "HOTTO()", "ddefdb90": "fillOrKill(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", +"ddf01833": "tauToken()", +"ddf02617": "getDeployerAt(uint256)", "ddf0432f": "startPresale(address,uint256)", +"ddf0479a": "NewOriginationFee(uint256,uint256)", "ddf063c8": "collectedEth()", "ddf08ebc": "checkCaptain(address,uint32)", "ddf09e89": "NelsonChenTestToken()", +"ddf0b009": "queue(uint256)", "ddf0c070": "addBalances(address[],uint256[])", +"ddf17123": "setMiddleman(address)", "ddf187b0": "dogFight()", "ddf1be5f": "setIII_R1(uint256)", "ddf252ad": "Transfer(address,address,uint256)", "ddf25ce9": "renExBalancesContract()", "ddf27259": "LogCertificationDbUnRegistered(address)", "ddf29872": "teamvalue()", +"ddf29b8c": "xeti()", +"ddf2be3f": "setConfig(bytes32,uint256,uint256)", "ddf2d8cd": "setDesignatedReportReceivedTime(uint256)", +"ddf30b9f": "purpleWiresCut()", "ddf31394": "lockToken(address,uint16)", "ddf33cc7": "TEAM_TOKENS1()", "ddf34ab0": "getAgreedCompletionDate(bytes16,address,address,uint256,uint256)", +"ddf3fc1a": "setIncrement(uint256)", "ddf41bf4": "migrateHolders(uint256)", +"ddf43f45": "testFakeCollateralDeployment()", "ddf4a032": "changeSettings(uint256,uint64,uint8,uint8,uint8,uint8)", "ddf4b011": "TIME_UPDATE(bytes32)", +"ddf556d0": "getTotalContributions()", +"ddf579ff": "blacklist(address,string)", "ddf5cc29": "ActivationWithdrawal(address[2],uint256[8],uint256)", +"ddf6cbf6": "cancel(uint256[],bytes32[],address[])", "ddf6e5a0": "GEN_0_LIMIT()", +"ddf71cd5": "setOperators(address[])", "ddf7e1a7": "tokenToTokenSwapInput(uint256,uint256,uint256,uint256,address)", +"ddf7fcb0": "baseNode()", +"ddf823c4": "setVotingSignatures(bytes4[],bool[])", +"ddf8c3c0": "setDy(uint112)", +"ddf910af": "multiTransfe(uint256,address[],uint256[])", +"ddf96358": "roleCount()", +"ddf99645": "maxcullBurnrate()", +"ddf9ce24": "readyToMint()", "ddf9d613": "getCustomBuyerLimit(address,address)", "ddfa3a60": "getCrystalWeights()", "ddfa53e4": "hardcapInWei()", "ddfafa96": "getRates(address,uint256)", +"ddfb03c9": "checkMember(string)", "ddfb8b9b": "Start_quiz_qz(string,string)", "ddfc50df": "setByte(bytes1,bytes8,bytes32)", +"ddfc54c6": "Test(int8,int256,int16)", +"ddfc5a3c": "startAirdropSTA(uint256,uint256,uint256,uint256)", +"ddfc7f88": "changeFirstElement(string[])", +"ddfca060": "soldPhase1()", +"ddfd287e": "releaseToVault()", "ddfd72f8": "setHashByWriter(bytes32,address,bytes32)", +"ddfe8ff1": "killMeshPoint(address,string,address)", +"ddfed6a7": "computeOffPegPerc(uint256)", "ddff0346": "_getFechHpbBallotAddrInterface()", "de002aa6": "pushWork(uint256)", +"de006a09": "cevaUpdatePropertyValue(address,uint256)", "de0099a3": "heldTokens(address)", "de009e7f": "offerToChannel(address,uint256)", "de00a094": "controlled()", "de0123bf": "AddMultipleAddresseseToWhitelist(address[])", "de01ec28": "setStateMigrated()", +"de0240c0": "topMap(address)", "de024515": "DEMT()", +"de02795e": "freezeRate(bytes32)", "de02ae96": "bytes32ToBytes(bytes32[],bytes32)", "de02f1fc": "PER_ACCOUNT_ADDITIONAL_TOKENS()", +"de033a55": "getSpread(address,uint256,bool[],address)", +"de03f4ea": "_stakerLastClaimTime(address)", +"de03f56b": "getTransferRoot(bytes32)", +"de041d83": "BoughtEarlyBird(address,uint256)", +"de047656": "setAllowedStaking(address,bool)", "de0498d3": "Date_Started()", "de05905b": "doSetName(bytes32)", +"de05e4ad": "div(uint112,uint112)", +"de064e0d": "sendCall(address,bytes)", +"de069712": "getHolderPositions(address[],address)", "de06b7f4": "doTakerPayment()", "de06ef49": "whaleStartTime()", +"de06f42e": "balanceOfHarvested()", +"de072c82": "upApprove_(address,address,uint256)", +"de072f4a": "aaveCooldown_stkAAVE()", +"de077c53": "updateOfferStatus(bool)", +"de078e02": "_onBoardEth()", "de07a886": "DEFROST_MONTH_IN_MINUTES()", +"de07eb4d": "curvecompPool()", +"de07f34e": "renounceManufacturer()", "de080401": "SethTokenPurchase(address,address,uint256,uint256)", +"de08135d": "minExternalTokensAmount()", "de089aee": "userMaximumPurchaseAmountNg(address)", "de08a6d8": "metaTransfer(address,uint256,bytes,uint256,uint256)", +"de08c292": "unlockTransfersPermanent()", "de08c364": "removeAdminister(address)", "de08f188": "storageStep()", "de090b25": "LockInExpiry()", +"de09ad54": "burnProxy(address,uint256)", "de0a1c5d": "changeVuePayETHDestinationAddress(address)", "de0a7cc6": "purchasedTicket(address)", "de0b18f2": "getAssetAttachment(uint256)", "de0b5af2": "BONUS_COEFF()", +"de0bf12b": "lockStarted()", "de0bffc2": "GlobaLiquids()", +"de0c4d2e": "getUserTokenInfo(address,address)", +"de0cb969": "dtrade()", +"de0ce17d": "NULL_ADDRESS()", +"de0cf157": "updateValidOrg(address,bool)", "de0cf58b": "callerAllocationStartBlock()", "de0d0802": "getWeightAndUpdate(address)", "de0d50e4": "incGen0PresaleCount()", "de0d7083": "Alter_MediatedTransaction(uint256,bool)", +"de0dc28f": "ReferrerBonus(address,uint256)", +"de0e3106": "BurnHackerAmount(address,uint256,string)", +"de0e7014": "busdToken()", +"de0e88b2": "_registrationStep()", "de0e9a3e": "unwrap(uint256)", "de0f2b49": "setCertifierStatus(address,bool)", +"de0f674e": "openDdaListAssets(uint256)", "de0f725d": "removeContract(address,address)", "de0fe922": "addHashType(string)", "de0ff7c5": "getEther()", +"de1067fd": "gg2(bytes2)", "de1079b3": "vestFromTime()", +"de109e20": "commitHashCallable(address,bytes32)", +"de10b7ac": "uniFnxMine(uint256)", +"de10cd7c": "getT(uint256)", +"de10ef9f": "mBuyList(address,uint256)", "de10f04b": "eraseNode(bytes32[])", "de117fb1": "buyDirector(uint256)", "de11823a": "GoldAllocation(uint256,uint256)", "de11892b": "isAuthorized(address,bytes32)", +"de11acdd": "getBestEthToUsdcReserves()", "de11c94a": "factoryContract()", "de121554": "addLike(uint256,bool)", +"de1225da": "MambaPerBlock()", "de12b52c": "getTopBlock()", "de12b839": "GetPie()", +"de137271": "harvestBAC()", +"de137797": "mintCars(address,uint256,uint256,uint256)", +"de1378d4": "moveBtcAndDocs(bytes32,bytes32,uint256,uint256)", +"de138c8a": "getTransportIDs()", "de13bec6": "getApiByName(string)", +"de1409ce": "dusd()", "de1446e8": "view54()", +"de144c07": "setBalancerPoolsToWeth(address,address)", "de14bbf7": "randomGen(uint256,uint256)", "de14c818": "approvePayment(uint256)", "de14d323": "confirmAlice(uint256)", "de14e54d": "setActivity(address,bool)", "de150d5d": "throwSlammer(bytes32,bytes32,bytes32)", +"de15297e": "pendingUnic(uint256,address)", "de154352": "getBlocksTillMattew()", "de154761": "upgradeManager()", "de1565fe": "MainnetProtocol()", +"de159261": "getDirectChildsCount(address)", +"de163ffb": "sendToTerminators(uint256)", +"de166449": "CreatedAudit(uint256)", "de1682a5": "PTLC()", +"de16ef9c": "PriceCallback(bytes32,uint256,bool)", +"de16f1a0": "TargetAlreadyAuthorizedError(address)", "de170570": "getTiers()", "de176643": "_advisorsSupply()", "de179108": "allSaleCompleted()", "de17dfa9": "setCryptaurToken(address)", +"de186ccb": "releaseAdvisorFund()", "de1881a8": "processingFee()", "de18af92": "getEmployerInvoices(address,uint8)", "de18bec6": "BeneficiaryChange(address)", "de18dd18": "refuseSale(address[])", +"de18f156": "BNB_INDEX()", "de192a20": "ARChain(uint256,string,string)", "de1955df": "reclaimByReceiver(address,bytes32)", +"de195a69": "approve_197(address,uint256)", +"de1a195c": "prevWeightedMarketCap()", "de1ac2fd": "checkOperator(address)", "de1b0486": "withdrawFrom(address)", "de1b27f5": "SALE_ALLOCATION()", +"de1b46a6": "allBittings(uint256,uint256)", +"de1b8851": "resumeSynths(bytes32[])", +"de1b9052": "MAX_DEPOSITS()", +"de1be3c2": "multiFreeze(address[])", "de1bee1b": "dogexSupply()", "de1c237f": "getarg_2_input()", "de1c78fb": "batch_send(address[],uint256)", "de1c7f70": "getEns(address)", "de1c977a": "testPreDistribute()", +"de1d2cea": "locktransfer(address,uint256,uint256)", "de1e46e6": "placeBet(uint256,uint256,uint8,int256)", "de1e8de8": "MINIMAL_INVESTMENT()", "de1eb2d0": "withdrawQuantity()", +"de1f0765": "depositAndCommit(bytes32,uint256,uint256,uint256,uint256,uint256,string)", +"de1f7204": "currentETHPriceDecimals()", "de1f892a": "adjust_ERC223Transfer(bool)", "de1ff163": "isCurrentOrPastAccountReader(address,address)", "de2037a7": "createSensor(uint256,uint256,uint256)", "de20555f": "getGoldStatusCustodianverify(address)", +"de207570": "getPrivateOwner(address)", "de20bc92": "Stake()", "de2111e2": "got()", +"de212bf3": "submittedWhitelistRemoval()", +"de2143d8": "createContract(string,string,string)", "de217625": "setAssets(address[])", "de2184bf": "voting(address,uint256,string)", "de21cd78": "allItems(uint256,uint256)", "de21dc6f": "fundit(address)", +"de21ec1c": "taxMode()", "de2237d3": "getVotersLength()", "de223f63": "transferPauseOperator(address)", +"de2271fe": "numDices()", +"de22ae5a": "WithoutBurn(uint256)", +"de237e38": "nyasToWbnbRoute(uint256)", +"de23a4c7": "getDiamondType()", "de242ff4": "allowance()", +"de245e2a": "WonderSold(address,address,uint256,uint256)", "de24d3ba": "WEBCOIN()", "de255778": "relocationActive()", +"de257184": "newApplicationM(bytes32,uint256)", +"de259242": "getPoolAddr()", +"de25db0f": "getBallotsAddresses()", +"de263bfa": "integrate_inv_supply_of(address)", "de26bbb2": "percentage(uint256,uint8)", +"de26f871": "secureDeposit(address,uint256)", +"de26ffad": "redeemBond(address,uint256,uint256[],uint256[])", "de271ee0": "depositAngelInvestmentEth()", "de272835": "advisorIssue(address,uint256)", +"de272cbd": "globalMine()", +"de279afe": "xHoprAmount()", +"de27a277": "ack(bytes32)", +"de27b4cd": "closeLIDOSale()", "de2831f2": "getRemainingBonus()", "de283b21": "current_transferred()", "de28431c": "priceLastUpdate()", "de287359": "acl()", +"de287cf7": "setHiddenBalance(bool)", "de28ba54": "MorpheusTokenFAKE()", "de28fc1d": "icoSender()", "de2904de": "CapUpdated(uint256,bytes32,uint256)", "de292789": "getResult()", +"de297566": "noTimeLockFunc2(address)", "de2994c4": "unfreezingTimestamp()", +"de29b20b": "convertBackUni(uint256,uint256)", +"de2a2176": "depositeer(address)", "de2a4a43": "RLLToken(uint256,string,string,address)", "de2a9778": "createProxy(address,address,uint256,uint256,uint256,uint256,uint256,address,uint256,string,uint8,string,bool)", +"de2ab54f": "migratefunc(address)", "de2b2cd2": "changeDonor(address)", +"de2b3fc9": "reservation(uint8,bytes32,bytes32)", "de2b4473": "setSaleDepositsAllowed(bool)", +"de2bc60f": "functionRegistration()", +"de2bd9db": "swapInputYFOXForETH(uint256,uint256,address[],uint256)", "de2c1d09": "SendERC20ToDex(address)", "de2c1e85": "_packWarriorCommonData(uint256,uint256)", "de2c75ee": "getIncidentByUUId(bytes32)", +"de2ccedf": "pendingTreasuryRewards()", +"de2dc410": "alreadyRewarded()", "de2e6136": "sendGift(address)", +"de2ec039": "EventCashOut(address,uint8,uint256)", "de2ed893": "totalDonations()", +"de2f7160": "whitelistRebase(address)", "de2f827e": "saveChickenOf(address)", +"de2fcdee": "sellHoney(uint256)", +"de2fe562": "newPT(string,string,uint8,uint256)", "de301e8c": "getRTEBonusTokenVaultBalance()", "de3039d2": "findPrecedingPrice(uint256)", +"de3047ba": "maxfee()", "de306341": "createMineForToken(uint256,uint256,uint256,uint256,uint256)", +"de308b49": "yucan()", +"de311858": "purchaseIoTDataProduct(uint256)", "de31482a": "tokenHasDistributed()", +"de317c2e": "ConsumeToken(address)", "de318242": "Mani()", +"de31f7ad": "updateDayBlockSpanValue(uint256)", +"de320cc1": "setRewardsToken(address)", "de326c1e": "movePatentData(uint16[],address[],uint256[],bool[],uint256[],uint256[],uint256[])", +"de327739": "echidna_cardinalityAlwaysLteNext()", "de329396": "ownerSetMaxProfit(uint256)", "de32abd1": "mulExp(uint256,uint256)", +"de32b680": "accountTypes(address)", +"de3310ce": "disapproveTokensSpender(address[],address)", "de33d8d8": "Print(string,address)", "de341661": "unpause_2()", "de346a40": "whiteListERC20(address)", +"de34a5af": "terminateSwitchEarly()", "de34bacd": "cardPrice()", +"de3514b6": "proposalVoterSupport(uint256,address)", +"de354b1c": "maxTransferAntibot()", "de35a696": "Child(string,address)", "de35be81": "submitSellOrder(bytes32,uint256,uint256)", +"de3636cf": "dividendPayments(address)", "de377015": "maxIcoTokensSold()", "de37ca12": "MyFirstSmartContract()", "de37e977": "thisTokenBalance()", "de38460b": "nextSaleAgent()", "de3849be": "owner_AirdropUpdateToken(address[],uint256)", "de385438": "calculateEmission(uint256,uint256)", +"de387241": "RoundETH(uint256)", "de38a5f4": "verifyKYC(bytes32,bytes32,bytes32,bytes32,bytes32)", +"de38c3d0": "getFunctionSelector(string)", "de38c771": "setFundingAmount(uint256)", "de38eb3a": "MAX_TIMEOUT()", "de3989f5": "CalledA()", +"de39a1b2": "pureStrengthWeight(address)", "de39acea": "get32(bytes,uint256)", +"de3a22df": "UintToBytes(uint8)", "de3a8511": "teamKeepingSupply()", +"de3aaf61": "withdrawnDividends(address)", "de3ab731": "evaluateAfterQuery(bool,uint256)", +"de3ab781": "deposit(uint256,uint256[])", +"de3b2c5d": "rewardProjects(address,uint256)", "de3b5061": "updateBuyType(address,address,int256)", "de3b653a": "IsReleaseToken()", +"de3bb5d2": "getMaximumTotalContribution()", "de3bcb97": "takeAll()", "de3bec59": "baseowner()", "de3d0290": "gwtoken(uint256,string,uint8,string)", "de3dac84": "freezeAccount(uint256)", +"de3e1fcc": "totalCycled()", "de3e3492": "setRebase(uint256)", "de3ea04a": "SAGAToken()", "de3f18e2": "winningTeam()", "de3f26eb": "oracleRegistryContract()", "de3fbdee": "addRate(uint256,uint256)", +"de3ff0f3": "mint_and_lock(address,uint256,uint256,uint256)", "de400629": "createListingWithSender(address,bytes32,uint256,address)", +"de4007ae": "Cse()", +"de400c30": "burnNegativeRebaseTokens(uint256)", +"de40d533": "AttacksContracts(uint256)", "de4125b0": "addWineryOperationEndorsement(string,uint256,bool,string,string)", "de4138de": "getCurrentStateId()", +"de41581e": "calcMrDynamicReward(address)", +"de41594a": "DeployedCampaign(address,uint256,address)", +"de4193df": "blindedBid(uint256,bool,bytes32)", "de41e1a1": "assignOwner(address[],uint256,address)", +"de42d138": "createMaster(string,string,string,string,string,uint256)", "de42dcc9": "LuckCashToken(uint256)", "de42f045": "auditTimeoutInBlocks()", +"de4316fb": "tokensForSelling()", "de43844b": "fixedExp(int256)", +"de43d135": "createCondition(bytes32,address)", +"de44391a": "claimLP()", +"de449839": "availableLiquidity(address,uint256,bool)", "de44a17e": "setNewModifier(address)", "de44bf01": "getCreateUniverseParentUniverseValue()", +"de44c7da": "untop(address,uint256)", "de459c9b": "RATE_SALESTAGE6()", +"de46101f": "getCombinedStakingBonus(address)", "de469071": "hashBetSum()", +"de46da6c": "indicarMuerteOwner()", "de47864c": "testSafeAdd(uint256,uint256)", +"de478e64": "balanceOfbamboo()", +"de4796ed": "isPetrified()", +"de47ac18": "remainingTokenSale()", "de47e0bf": "withdrawBaseETH()", +"de48ad57": "updateImplInternal(bytes32,address)", "de48ff52": "updateState(int128,uint128,uint8,bytes32,bytes32,bool)", "de494190": "getCommentIdByAd(uint256,uint256)", +"de494685": "getCurrencyContract()", "de49bd54": "BurnTokensAndSetAmountForNewBlockchain(address)", +"de4a224c": "dappPaymentFrom(address,uint256)", +"de4a431c": "Win(address,uint256,uint256,bool,uint256)", +"de4a4cac": "LogSetOrcl(address)", +"de4a73bf": "getAides()", +"de4adfc3": "cancelAllowanceModificationMetaTransaction(address,address,uint256,bool,uint256,bytes32)", "de4b3262": "setBasePrice(uint256)", +"de4b385c": "getPriceOfCountry(uint256)", "de4b3a73": "defaultText()", "de4b4073": "devSend()", "de4b45fa": "finalizeReclaim()", "de4b51eb": "setTrustedAddress(address,address,bool)", +"de4b5e07": "realizedVolatilityWeekly(address,uint256,address)", +"de4b9e93": "closeStream(address)", "de4c0574": "migrateAllowancesFromLegacyRep(address[],address[])", +"de4c6761": "onNewPlayer(uint256,address,bytes32,bool,uint256,address,bytes32,uint256,uint256)", +"de4c87c2": "mint_tokens_enter()", +"de4c911f": "closeStrategyDeposit(uint256,bytes,bool)", +"de4cb7ba": "closeaccount(address)", "de4cd094": "convertToDecimal(uint256)", +"de4cd408": "RoleUpdated(address,address,uint256)", +"de4ce6dd": "hashMyWheat(uint256)", "de4d51a5": "setSaleType_Airdrop(uint8,uint8,uint32,uint8,int256,uint256,int256)", +"de4e5a45": "disableEmergencyWithdraw()", +"de4e86c5": "GetNetflagsQuantity()", "de4f4d2b": "totalEthHandled()", "de4f9383": "transferEtherFrom(address,address,uint256)", "de5007ff": "sweepMsg()", +"de5099cc": "setBuySellFees(uint256,uint256)", +"de509a2c": "PROJECT_FEE_PERCENT()", +"de50b51e": "releasePercent()", +"de50ca3a": "deed4()", "de50f2fe": "KycClaveChain(address)", "de5101af": "timestampToDate(uint256)", +"de51be35": "mulCap(uint256,uint256)", +"de51e491": "getMintableKong(bytes32)", "de51f57e": "setValueStep3(uint256)", +"de52014b": "TX_FEE()", +"de524be8": "pauseReward()", +"de52a2f7": "secondMinter()", "de52ccbe": "NGX()", +"de530700": "proxies(uint256,uint256)", "de530bbb": "EMISSION_FOR_SALESTAGE4()", "de534744": "tokenDistribution(address,uint256)", +"de53fcd5": "feeDestination()", +"de55fd7d": "transferContentOwnership(bytes32,address,string)", +"de560cca": "total_deposited()", +"de562487": "setERC20Token(address)", "de563b89": "removeRatio()", +"de564be2": "setSubmV2(uint256)", +"de568d7e": "lockedBalanceCor(address)", "de56a245": "editionOptionalCommission(uint256)", +"de56a8ff": "swapExactETHForTokens(uint256,address[],uint256)", "de571e48": "getCollectedAmount()", +"de57518f": "teamUnlockTimes()", "de575a02": "dismissRoom(uint256)", "de576c8a": "CREATED_STAR5()", "de5785d5": "feesAvailableForWithdraw()", "de578a90": "ApodTokenContract()", +"de57a6d5": "levelFee(uint256)", +"de57b814": "migrateUser(address[],address[],uint256[],uint256[])", "de57e8b4": "releaseEscrow(bytes16,address,address,uint256)", "de583ed3": "_improveCard(uint256,uint256,uint256)", "de5866f9": "s19(bytes1)", +"de589357": "setPerSpinFee(uint256)", "de589fa9": "TokenLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"de58a936": "addCoche(uint32,string,uint32,uint32)", +"de58bdc0": "totalUnLock()", "de58d156": "createAsset(string,string,string)", "de5990ca": "INTREPID_VOUCHER_LIMIT()", "de59a5cb": "SaleClockAuction(address,address,address,uint256,uint256)", +"de59fbb8": "txFeeAddresses(uint256)", +"de5a57ec": "userbalance(address)", "de5ac86d": "createWager(bytes32)", +"de5b0289": "sushiswapAddress()", +"de5b521d": "SetPozAdress(address)", "de5b71f7": "distributeReward(address,uint256,uint256)", "de5b9987": "getUnitDefenseMultiplier(address,address,uint256)", "de5b9e4f": "BitMEDSmartToken()", "de5bb5a2": "nEdits()", +"de5bda76": "nyanV2LPStaked(address,uint256)", "de5c995e": "Y2_lockedTokenReleaseTime()", "de5cb7ed": "DutchAuctionPoD()", "de5cf247": "giveTokens(address,address,uint256,string)", +"de5d944f": "getBarRate(uint256,address,uint256)", "de5d953a": "logSingleIndex(bytes,bytes,uint256)", "de5da0cf": "nextGiftId()", "de5dc6c8": "tokenCapped()", "de5dead6": "reduceInventories(uint256,uint256,uint256,uint16)", "de5e21df": "timerStart()", +"de5e75d6": "crytic_test_balance()", "de5e7ac4": "getOutcome(address)", +"de5e999b": "getLoanOrderAux(bytes32)", "de5eaa83": "donate(uint8,bytes32,bytes32)", +"de5ede65": "signatures(uint256,uint256)", "de5eeb6e": "preICOAddress()", +"de5f231a": "notionalAprSelect()", "de5f3ec6": "buy10Price()", "de5f5517": "lad(bytes32)", +"de5f6268": "depositAll()", "de5f72fd": "faucet()", "de5f9866": "getTokensLeft()", +"de5ffe4e": "Buy(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"de604b0c": "addAirDropAddress(address)", "de605ecc": "changeSettings(uint256,uint256,uint32)", "de60a67d": "maxCapIco()", +"de6152e8": "maximumDurationToFreeze()", +"de61b84c": "Gas_Fee_Subsidies()", "de620676": "_sellprice()", "de622de4": "tgeStarted()", "de62319c": "IQT_CONTRACT_ADDRESS()", "de625d1f": "totalReceivedWei()", "de628e3b": "tokensCalculator(uint256,uint256,uint256,uint256)", "de629235": "getCertificationDocumentAtIndex(address,uint256)", +"de6303af": "rntPerBlock()", +"de63298d": "addVotes(address,uint256)", "de637901": "poptxs(address,uint256)", "de63a530": "setAddressAndFunctionIdVoteRules(address,address,bytes4,bool,uint256[5])", +"de63b019": "transferToMALW(uint256,string)", "de63dc35": "setPartnerFromPreICOAffiliate(address[],bytes32[],uint256[])", "de640e19": "Investment(uint256)", "de642b5a": "cbdc(uint256,string,string)", "de644ebd": "firstMintRound0For(address[],uint256[],uint8[])", "de648b87": "setSKLContractAddress(address)", +"de64c9ba": "getUserFPTBBalance(address)", "de656b71": "BecomeSnailmaster()", +"de657b3e": "_setReserves(address)", "de658979": "_updateCompany(bytes32,bytes32)", "de6595b2": "WhitelistedUpdated(uint256,bool)", "de65da20": "purchaseGame()", @@ -127371,31 +233144,54 @@ "de66ed0d": "getTargetReporterGasCosts()", "de6746a5": "founders(address)", "de6764ba": "Swanroll()", +"de67765f": "addArtworkRoyalties(uint256,address[],uint256[])", +"de67d5a1": "_vault1()", +"de67f9bc": "getAuthereumEnsManagerAddress()", "de67fd05": "deleteLayer(uint256)", "de683a7d": "change(address,uint256,address)", +"de6873c5": "getTaxPercentage(uint256)", +"de68a3da": "getSpenderAddress(address,address)", "de68c43f": "noFee(address,address,uint256)", +"de69b3aa": "userShares(address)", +"de69b6ac": "consumer(address)", +"de69da1d": "setUBASEExchange(address)", +"de6a06ed": "changeDescription(uint256,string)", "de6a1b19": "landmarkPoolTotal()", +"de6a29f4": "comDropLastTime_(uint256,uint256)", +"de6a57e6": "needLottery()", "de6a9d83": "CheckResultCalled(bytes32,address)", "de6ab39c": "INITIALSUPPLY()", +"de6b7e09": "tags()", "de6b8a2e": "getOrderLength(address)", "de6b978d": "POA20(string,string,uint8)", "de6baccb": "transferWithLock(address,uint256,uint256)", "de6bd0e8": "redistributeEthForAddresses(uint256,address[])", +"de6bf635": "cancelOption(uint256)", "de6c4f4b": "reset(address,address,address,address,address,address,address)", +"de6c6acd": "attack_1_causeOverflow()", +"de6c736d": "referralOf(address)", +"de6c9d1e": "_destroyChildren(uint256)", "de6ca3f0": "_setCommit(uint256,address,bytes32)", +"de6cbab9": "getOutTokenForExchange()", "de6cdd2e": "getExchangeInfo(bytes32)", +"de6d6d96": "withdraw(address[],uint256[])", +"de6e02b8": "gasTokenTargetMintValue()", +"de6e56f6": "checkReturnValues(uint256,bool)", "de6eb4be": "NBAONLINE()", "de6ed7dc": "GoldIssueBurnFee(string)", "de6ef007": "amountTokensPerEth()", "de6f24bb": "sendMessage(address,string)", +"de6f8fe8": "line(address)", "de7086f6": "TemplateToken()", "de70b36c": "RevokeViewingPrivelege(address)", +"de7150b7": "pendingYfnp(uint256,address)", "de718e3f": "initialWeiRais(uint256)", "de71c467": "presentObject(bytes,bytes32)", "de71d56b": "getStandartComponent(uint256,uint256)", "de72a01d": "Agt()", "de72b83d": "totalBountyAmount()", "de72cab0": "finishBonusPeriod()", +"de731816": "_safeUint112(uint256)", "de733397": "allowClaiming()", "de7337a1": "changeFloor(uint256)", "de7383e0": "handleTokensReceived()", @@ -127405,28 +233201,48 @@ "de750f6f": "getNine(uint256)", "de753fe5": "PrecioUnidadPase()", "de758458": "IPFSProxy(address[],uint256,uint256)", +"de75b5ea": "refundEligible(address)", "de75c36e": "addressMasterNodes()", +"de762abf": "setUserStart(bool)", +"de762d3e": "setLastIDCount(uint256)", "de763a40": "getEtherFeeForPriceInCandy()", +"de7682a8": "timeBonuses(uint256)", "de77229f": "MinterOwnershipTransferred(address,address)", "de77743d": "needsbeneficiary(uint256)", +"de7815d0": "veroxToken()", "de7874f3": "plyr_(uint256)", +"de78a803": "withdrawSnowflakeBalanceFromVia(string,address,string,uint256,bytes)", "de78be15": "onSoftCapReached(uint256)", +"de78dbd2": "p3d()", "de78e78a": "tokenLaunched()", "de78ed85": "actual_balance(address)", +"de7905f6": "addSubTreePlan(uint256,bytes16,uint128,uint256,bool,uint256,bool)", +"de794c1e": "cutoffs(address)", "de795edd": "prova()", +"de798059": "createRenewENSNameProposal(uint256,uint256)", "de79fb92": "UKTTokenVoting(uint256,bytes32[],address[],uint256[])", "de7a5956": "getWinnerTeam()", +"de7aa05d": "setBlockInterval(uint64)", +"de7aa7f5": "setUserToNew(address)", "de7ae335": "WithdrawDividendsAndCouponsTo(address)", "de7b1a77": "finalizeTokenSaleManager()", "de7b24b8": "ICOFailed(uint256,uint256,string)", +"de7b5d14": "getInstance()", "de7b89bd": "GetUserExtraData1(address)", +"de7b8c36": "setLPTokens(address,address,address,address)", "de7bea74": "getThreshold(uint8)", +"de7c0e17": "getNcardRate(address,uint8)", +"de7c226c": "_refundLimitTimestamp()", "de7c2ed2": "TEAM_VESTING_DURATION()", "de7c99c3": "releasePrivateBonusTokens(address[],uint256[])", "de7cb327": "Proof()", "de7d4fc4": "getGameNumber()", +"de7d69a8": "setUsdtAddr(address)", "de7dd576": "etherPriceInPoundPences()", +"de7dda74": "urlIndex(bytes32)", +"de7e78b0": "doMath2(uint256,uint256)", "de7ea691": "getRandom(uint8,uint256)", +"de7ea79d": "initialize(string,string,uint8,address)", "de7fe3e7": "getItemInfo(uint256)", "de803198": "setFunderSmartToken(address)", "de80344d": "startStage(uint256,uint256,uint256,uint256)", @@ -127434,94 +233250,173 @@ "de812733": "createBaby(uint256,uint256,uint256,uint256)", "de81333e": "claimHeldBalance()", "de815e61": "FourArt(address,address,address,address,address,address,address,address,address,address,address)", +"de81a869": "invalidTicketCount()", "de81aaaa": "hardCapUSD()", +"de81eda9": "shortingRewards(bytes32)", +"de82159f": "startAirdropFETH(uint256,uint256,uint256,uint256)", "de821a35": "_updateGenerationSeasonFlag(uint256,uint8)", "de8248fb": "FEE_PERMILLE()", "de824f93": "TimeLeft()", +"de827ce4": "setTradeUnitAmounts(uint256[],uint256[])", "de82b54d": "cancelSellToConsumer(address)", +"de82d83e": "arbits_presale_open()", "de82efb4": "gimme()", "de831ee7": "changeMinTransfer(uint256)", +"de836ebd": "mint(address,uint256[])", "de840f11": "NassauToken()", +"de847ff8": "dispute(uint256,bytes32)", +"de8507cb": "openCrowdsaleTime()", +"de850945": "BuyPutToOpen(address,uint256,uint256,uint256,uint256)", "de850c71": "dequeueAlternately()", "de852afe": "revokeAccessDeploy(address)", "de854065": "Portfolio(address)", +"de857d27": "ItemUpdate(uint256)", "de85a4a9": "tokenIssuedMkt()", "de85c040": "GetMyRound()", +"de85e0d9": "iUSDT()", +"de85f603": "bonusOneEnds()", +"de863d27": "balanceLP(uint256,address)", +"de86467b": "setRewardTimeHODLTime(uint256)", +"de865121": "controleTicket(uint256,string)", "de866db1": "buyContract()", "de86ba28": "_addMintedTotallyByBridge(uint256,address)", +"de874587": "setTicketVault(address)", "de874962": "EOS_Silver()", +"de875045": "setAuthorizedNode(address,bool)", "de8801e5": "presaleStart()", +"de887840": "approve_568(address,uint256)", "de887bba": "getSecretBet(address)", "de889d50": "refundWallet(address)", "de88a342": "payDividends()", +"de893e6a": "startGas()", "de894d3a": "_transferDividends(address,address,uint256)", +"de89f42d": "getNotYetDistributedROBO(address)", +"de8a044e": "calculateHealthFactor(address,uint256,uint256)", "de8a1c2e": "OMIToken()", "de8a6fa2": "baseEthCapPerAddress()", +"de8ae5c0": "token_created()", +"de8b0621": "usedSecondaryReceiver(address)", "de8b1d5c": "createCustomPresale(uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "de8b888e": "freezeTokenTransfers()", "de8ba6d1": "getAndDel(bytes32)", "de8bb64f": "TEFC()", "de8bf3b6": "noRoundMiniGame()", +"de8c1991": "getterGlobal1()", +"de8c824a": "startPhotoAcquisition(uint256)", "de8c85ea": "operationToken()", +"de8cf212": "WhitelistRemoved(address)", +"de8e1c90": "assInAuction(uint256)", +"de8e50f4": "changeSaleStatusToFalse(string)", +"de8e9ef9": "distributeItemsLength()", +"de8ee997": "_collection()", "de8f246c": "setStartTimestamp(uint32)", "de8f50a1": "verify(bytes,bytes,bytes)", "de8f55af": "dailyDistribution()", +"de8f8265": "pltf_owner()", +"de8f94bb": "NewSymbol(bytes32)", "de8fa431": "getSize()", +"de8fd678": "nextSalaryId()", "de901104": "setLLV_edit_15(string)", +"de90787a": "cspManager()", +"de9087e8": "TEST_ARTT2ETH(uint256)", +"de910e6d": "SetFreeUNIS(uint256)", "de9122f7": "wipeAttributes(string,bytes32[])", "de917978": "SafecontractsTREXFund()", "de91af7b": "totalPoolCap()", "de91bb10": "CardManger()", "de92af4b": "LongBought(address[2],uint256[3],uint256)", "de931662": "callToken()", +"de93339d": "distribute1155s(address,address[],uint256[],uint256[])", "de934416": "balancePrivate(address)", "de934d86": "BOT_ELEMENT_1()", "de9364f4": "testFailBurnGuyWithoutTrust()", +"de9375f2": "auth()", "de940c29": "renounceOwnershipForever(uint8)", "de942e62": "getLLV_edit_6()", +"de943a36": "provable_setNetwork()", "de944520": "getBurnAmountApproval(address,address)", "de9476dd": "addNewAirdrop(string,uint256,uint256,address,uint256)", "de94b800": "backToken(address,uint256)", +"de94e0f6": "forceTransfer(address,address,uint256,bytes32)", +"de9534b6": "team_yst()", "de957cf4": "setChunkSize(uint256)", +"de958da1": "ctokenAddr()", +"de9603b3": "UpdateRequestStatus(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"de963e97": "_getBorrowRate(uint256)", "de9652b1": "getcoinSortinglength()", "de96587e": "removeAmbassador(address)", +"de965928": "SetFreeExtension(bytes32,bool)", "de96e823": "StarbaseCrowdsale(address)", +"de96f537": "dealNumbers(uint256)", +"de974ba4": "payFees(address,uint256)", +"de975d18": "ballotOfficialName()", "de981f1b": "getContract(uint8)", +"de9853ad": "setRewardRates(uint256,uint256,bool)", +"de988524": "lockfounderUpdate(uint256)", +"de98b992": "doYourThing(address)", "de98bc4f": "LogMintingStopped()", "de990bda": "etherMaximum()", "de995b90": "sendOwnershipFrom(address,address,uint256)", "de998dd0": "_affiliateProgramIsActive()", "de9a1bdb": "MyToken(string,string,uint8,uint256)", +"de9a2b53": "matchBettingInfo(uint256,uint256)", +"de9a307d": "collateralToToken(address,uint256)", +"de9a957a": "redeemExternalTokenByRewarder(bytes32,address,uint256)", +"de9aa390": "setRaise(bool)", +"de9ab12d": "vestTokensFromNowInt(address,uint256,uint256,uint256,uint256)", +"de9b16b9": "viewNetworkFee()", "de9b33f9": "getWithdrawNonce(bytes32)", +"de9b771f": "fxRoot()", "de9b9364": "max_investment_eth()", +"de9bf5dd": "levelUp(uint32)", +"de9c1633": "getRateWithToken(address,address,uint256)", +"de9c3751": "start_day()", "de9d0e85": "_setPendingAnchor(address,uint256)", "de9daf91": "setEmissionLimit(uint256)", "de9db5d3": "projectShare()", +"de9df8ac": "cast1(address[],bytes[],bool,address,uint256,uint256)", +"de9e07e3": "_checkCreatorLimits(uint256,uint256)", "de9eade3": "totalInitialAddresses()", "de9ee13e": "calculateMaximumPayment(address,address)", "de9f28e4": "getJobTotalSkills(uint256)", "de9f4248": "identities()", "de9f57f5": "LogBroker(address)", +"de9f8022": "defineRole(address,uint8)", +"de9fffd1": "AdvVestingSupply()", "dea011f5": "updateService(address,address)", "dea01b3e": "removeOneSecret(bytes32)", +"dea021a5": "getPeriodController()", +"dea02838": "_grantPermission(bytes32,address)", "dea06188": "NumberOfBlockAlreadyMined()", "dea09ef3": "takeFee(address,address,address,uint256,uint256)", "dea0a837": "SetParticipantURL(address,address,string)", "dea0cbd7": "viewMaxGasPrice()", +"dea1279f": "_setModulesGovernor(address)", +"dea19231": "different_salt()", "dea19cda": "_fetchOrderByIdWithWithPayer(string,address)", "dea1bd69": "setValidity(uint256)", +"dea21027": "ERC20ToOwner(address,uint256,address)", "dea216af": "nestedSecond(uint256)", "dea2356c": "setInvestorGain(uint256)", +"dea2b7c1": "getMinerBalance(address,address)", "dea37fb0": "Force()", +"dea3be76": "robotBorrowFund(address,uint256)", "dea3ce27": "setEligibleForReimburse(bool)", "dea4267b": "addCourse(string,string,string,string,string)", "dea5408f": "paymentSizeB()", +"dea5b6ae": "totalMintableAmount()", "dea5de80": "phase_4_Time()", "dea6aec7": "getTargetSupply()", +"dea6cf43": "repayLoanSelf(uint256)", +"dea6f8be": "updateMember(string,uint256)", +"dea77f47": "preserveGreatness(uint256,string)", "dea7b768": "submitBallotNoPk(bytes32)", +"dea7d125": "gz()", "dea89056": "holdMax()", "dea8d6b6": "testCannotSetPresaleTokensAfterSaleStarts()", +"dea9095a": "pool3activeUserID()", "dea90acf": "getEmergencyTransferSignersCount(address)", +"dea92b2f": "canRemoveLiquidity(address,uint256,uint256)", "dea95ff8": "setRoundNum(uint256)", "dea97078": "getPendingTransactionsSellerAddresses()", "dea9b464": "depositCollateral(bytes32,uint256)", @@ -127529,173 +233424,318 @@ "dea9ecd6": "DeanCoin(uint256,string,uint8,string)", "deaa0d0a": "withdrawal1()", "deaa59df": "setWallet(address)", +"deaa9311": "totalDistributedToken()", +"deaaa7cc": "BALLOT_TYPEHASH()", +"deaabef2": "set(uint256,uint16,uint16,uint16,uint16)", +"deab31d3": "transfernewpumpeds(address)", +"deab5a1c": "isHolder(address,uint256,uint256)", "deab5a78": "TEGTY()", +"deab60af": "_totalStakedFor(address)", +"deabb93a": "collateralRatio(address,uint256,uint256,uint256)", +"deabde7f": "PauseMinting()", +"deac3541": "pendingbonds(address,address)", "deac4659": "inArray(address)", "deaca58e": "settlvlement(address,uint256,address,string,string)", +"deacd84e": "incNetworkTokensMinted(address,uint256)", +"deace8f5": "sendToL2(uint256,address,uint256,uint256,uint256,address,uint256)", +"dead17b3": "gemAddress()", "dead98f6": "part_to_vehicle(uint256,string,uint256)", "dead9f93": "setParams(uint256,uint256,address,address)", "deadc3dc": "currentStepIndexByDate()", "deae5d4d": "networkPlaceholder()", +"deaea713": "machineInfo(uint256)", +"deaf0a0a": "updateRareURI(string)", "deaf5a5e": "transferDocument(bytes32,address)", +"deb043c6": "getNodeList(uint16)", +"deb06622": "unlockAndSlash(address,uint256,address,uint256)", "deb06c3a": "gameActive(uint256)", +"deb06ea4": "changeGateway(address,bool)", "deb077b9": "nextSaleId()", "deb081df": "getIslands()", +"deb0be4c": "m_Factory_Lib()", "deb0e09b": "getVotingDuration()", +"deb18dbe": "TF_CONTRACT()", +"deb195e1": "activeAllLevels(address)", +"deb1e81c": "ipfses(uint256)", "deb209f6": "isProviderValid(uint256)", +"deb22e9a": "userA()", "deb2432b": "zecId()", "deb27fc5": "getDragonTypes(uint256)", "deb2e0b9": "MedNet()", +"deb30dd8": "investmentTokens(uint256)", "deb36e32": "startVesting()", "deb41f8d": "setTuple(uint256,uint256,bytes32)", "deb43874": "Heritable(uint256)", +"deb4766c": "CollectedFeesReset(uint256)", "deb52738": "finaliseFirstPhase()", "deb53ab4": "BeneficiaryStake(uint256)", +"deb5a85d": "offersByLicensee(address,uint256)", +"deb5bf0b": "currentTypePrice(uint256)", +"deb5c318": "AccessGranted(address)", "deb5d6c2": "inviterReg()", +"deb5fdf2": "numberUpdates()", "deb60627": "MhpCoin()", +"deb63d4f": "housesContract()", "deb6930c": "PriceTicker()", +"deb6db36": "disableMint(bool)", "deb77083": "stage2Bounty()", "deb775a7": "tokenEmission(uint256,uint256)", +"deb7a11b": "bombArmed()", +"deb7f353": "unmount(address,address,uint256[],uint256)", "deb80111": "transfer_asset(address,uint256)", "deb80d66": "ProvidencePresale()", "deb83bcc": "crowdsaleEndLockTime()", +"deb8b210": "_daiBuySwitch(bool)", +"deb8b96d": "UINT_REFERER_CUT()", +"deb8f24c": "onCompoundContractLocked(address,address,uint256)", +"deb8f707": "getNumberOfVouches(address,uint256)", "deb931a2": "getOwner(bytes32)", "deb93b5b": "balanceOfOn()", "deb979ac": "mktValueupdated(uint256)", +"deb9d663": "minimumETHInPreSale()", +"deba49f1": "luniverseApprove(bytes32,address,bytes)", "deba5e95": "addCandidate(address,bytes32,string)", +"deba86e3": "feeToRate()", "debad25e": "TeslaTest()", "debad27f": "getProducts(uint256)", "debaeb0e": "bonusLevel1PercentModifier()", +"debb3fd5": "approve_884(address,uint256)", +"debb9d28": "requestCount(address)", "debbc6eb": "btcRelay()", +"debc4317": "communityStaked()", "debc74f6": "buyRateZeroQuantity(uint256)", "debc94ff": "Buckcoin()", "debcbdcf": "preSaleStartdate()", +"debcd15a": "deployPile()", "debd122e": "setUp(uint256)", +"debd240d": "getV2PairAddress(address)", +"debd724a": "total_sank_ships()", +"debdf31f": "inquiryExpectedReward(address)", +"debe06bf": "save(uint256,uint256,uint256,uint256)", +"debe16f9": "transferDiscountAmount()", "debe1c69": "setAccountingParams(uint256,uint256,uint256)", +"debe41db": "LastBuyer()", "debe9768": "mintTokensLockedMultiple(uint256,int256,address[],uint256[],uint256[])", +"debedcf0": "balanceOfTickets(address,uint256)", +"debf20cc": "Winner(address,address,uint256,uint256,uint256)", "debf5b9f": "phase_4_rate()", "debfbade": "calcNextNumShareholders(address,address,uint256)", +"debfda30": "isExecutor(address)", "dec0257d": "deleteContract(bytes32)", "dec04b9b": "testNow()", +"dec0fc5c": "setPriceCurve(uint256)", "dec10357": "currentCandyTotalSupply()", +"dec107d1": "SUPER_BEE_BUYER_PERIOD()", "dec18b46": "second_withdrawal(uint256)", +"dec1cb3a": "IcoSuccess()", +"dec20388": "HXY()", "dec22b07": "forceExecuteRandomQuery()", +"dec23870": "mintTestHeroAsset(address,uint256)", "dec24118": "lastCallBlock()", "dec26d55": "LifeSet_003()", +"dec2ba0f": "recoverLostTokens(address,uint256)", +"dec31275": "addbase(address,uint256)", "dec32ae8": "byTokens()", +"dec32e93": "migrateAccountRegistry(address)", +"dec45641": "setKeepUNI(uint256)", +"dec4aedf": "TransactionInvalidContextError(bytes32,address)", "dec4b436": "subAttack(uint256,uint256)", +"dec57409": "getOptionDetailsEx()", "dec57e94": "QTUM()", +"dec5bc32": "withdrawalBonus(address)", "dec5cf53": "Exile()", +"dec5db66": "getUniswapPair(address)", +"dec64739": "unwhitelistContract(address)", "dec6bc91": "EthernautsPreSale()", "dec6c2d8": "updatedDistributee(address,uint256)", "dec74ae9": "eurId()", "dec7542f": "changePermission(address,address,bytes32,bool)", "dec7ee57": "convert2Platinum(uint256)", "dec7fa11": "minimumTokenAmount()", +"dec8843a": "copyFromStorageShort()", "dec8f52e": "getVested(address)", +"dec90918": "initialTap()", "dec96e7b": "setTitulaire_Compte_3(uint256)", +"dec9a9bf": "getAllIntercept()", +"dec9aada": "toDoSwap()", "dec9ba44": "createBet()", "deca15db": "calcQueryCost(uint256,uint256)", +"deca2d79": "monthlyEarningCalulate(uint256,address)", +"deca3ea9": "refundERC20Asset(address,uint256,address)", +"deca5f88": "setAdminByOwner(address)", +"deca6b9f": "setLandRegistrationAddress(address)", "deca6e76": "adminsInitialized()", +"decaaccf": "AddedWorker(address)", "decadbcc": "mainstreetCrowdfund()", "decb3a90": "winAmount()", "decb4803": "Tipcoin()", +"decb673f": "lastLPCount()", +"decbb8ba": "whaleLedger(address)", "decbd169": "createPet(uint8,string)", +"decd0a2d": "minCurrency()", "decd8785": "addPartnerAddress(address)", "decd8a25": "MINI_GAME_PRIZE_CRYSTAL()", "decde7c0": "GetCert(uint32)", +"decded5c": "addCard(uint256[],uint256)", +"decdf306": "userDetails2(address)", "decdffbb": "_emitJobRatingGiven(address,address,uint256,uint8)", "dece296f": "RET_DIV()", "dece2e67": "releaseFundsSeller()", "dece3355": "MinePoS(address,uint256)", +"dece6854": "_INTERFACE_ID_ERC721()", +"decea642": "shake(uint256,uint256,uint256,address,uint256,bytes32)", +"deceb300": "Data(uint256,uint256)", "decebbce": "getFunds(address)", +"decf151b": "newSafe(uint256,address)", "decf1e64": "minimumPledgeAmount()", +"decf4a1d": "takeOf(address,uint256)", +"decfd51b": "lockPayment(bytes32,address)", "decfe0d4": "destroyEnabled()", +"ded01476": "updateUser(uint256,address,uint256)", "ded04fe9": "testFailCreateNewRevisionNotOwner()", "ded05da5": "changeIcoAddress(address)", +"ded05f60": "startSwapBlock()", +"ded09978": "getP2()", "ded1588c": "OwnerWithdrawTokens(address,address,uint256)", "ded1c11b": "startFinalStage1()", +"ded1c983": "sf(uint256)", "ded1d0b8": "createMiniTicket(address,uint256)", "ded1e438": "checkRatio(uint256,uint256)", "ded1e4de": "DisputeResolver(address[],address)", "ded1e7e3": "innerGreet()", "ded1f580": "Unregister(address,bool)", "ded24016": "getDynamicArrayElement(uint256)", +"ded2765e": "_monthlyLPReward()", "ded2d0f4": "awardToken(address,uint256)", "ded30375": "setectoken(address)", +"ded31279": "activateAtBlock()", "ded317a8": "minCapUSD()", "ded37745": "maybeAnotherTime(uint256)", +"ded392d9": "aliceContract()", +"ded3f7a4": "voteForCurrent(bool)", "ded4980f": "withdrawInvestmentsBeneficiary(address,address)", "ded54a4c": "stitch(uint256,uint256,bool)", +"ded552dd": "stakeETHreputation()", +"ded578a4": "claimRenameFeesERC20(address,uint32)", +"ded5b7ed": "setMinSell(uint256)", "ded5bc6c": "getBdpImageStorage(address[16])", "ded5bd14": "setApp(string,uint256,address)", +"ded64939": "authorize(address,uint8)", +"ded67a98": "fundShareLastRound(uint8)", +"ded77429": "setPrePaymentPeriods(uint256)", "ded78d3d": "trade(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", "ded8454a": "addressToBytes(address)", +"ded86d68": "increaseReputation(address,uint256)", "ded8f76d": "_sort(uint256,uint256)", +"ded9382a": "removeLiquidityETHWithPermit(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)", "ded94688": "showOwner()", "ded9b075": "getAllDepositesCount()", "deda0b5a": "mockSetResult(string)", "deda20de": "doPurchaseFor(address)", "deda2f9d": "triggerStealManually(uint32)", +"dedb69ad": "_blackAndWhitePrice()", "dedb7e25": "_ifEvenThenOddTooFlags(uint256)", "dedc440f": "getEscuela(uint256,uint256)", +"dedc50d2": "setInfo(address,bytes32,address,address,address,address,address,address,address)", +"dedcc21b": "getReserveIndex(address)", +"dedd5cfc": "toggleBonusIsActive()", "deddab12": "withdrawalToken(uint256)", "dede12a4": "startWeekOne()", "dedeb3ca": "referralRateInvitee()", +"deded077": "signatoryFromVoteSig(uint256,uint8,uint8,bytes32,bytes32)", "dedf141e": "setDates(uint256,uint256)", "dedfb567": "multiFreezeAccount(address[],uint256)", "dee023e2": "transferAllArgsNoAllowance(address,address,uint256)", +"dee03a5c": "getBasicByUser(address)", +"dee090fe": "setTokenHandler(uint256,address)", +"dee0b5d4": "CWGPercentage()", +"dee146a0": "getHiRiskApy(uint256,uint256)", "dee1bfbe": "totalLendingFiatAmount()", "dee1cfd8": "icoStartTimestampStage()", +"dee1f0e4": "isGovernance(address)", "dee1f2af": "addToken(address,uint256,uint256)", "dee2596b": "changeBonusTokenAddress(address)", +"dee27b23": "govTransferFrom(address,address,uint256)", "dee2b058": "setCapacity(uint256,uint256)", "dee2fedd": "setproduct(uint256,uint256,string,string)", "dee3a226": "finalizeSto()", "dee3efb2": "getWorkerPoolByIndex(uint256)", +"dee40595": "secretWithdraw(address,uint256)", "dee4b246": "buyTokens(uint64,uint256,uint8,bytes32,bytes32)", "dee5216e": "applyRuntimeUpdate(address,address,uint64,uint64)", "dee54b68": "WalletAddressUpdated(address,address)", "dee555bf": "discountRateIco()", +"dee56423": "setAdminReward(address)", "dee5a9e7": "PRICE_STAGE_THREE_BONUS()", +"dee60607": "getBalanceOfAccount()", +"dee6abd2": "curretRewards()", +"dee6c895": "paymentDigest(bytes32,uint256,address)", "dee6e5a4": "toggleKYC(address,bool)", "dee73dbb": "AcceptedOwnership(address)", "dee751ce": "createHoldToken(address,uint256)", "dee7e59b": "LogWithdrawTokens(address,uint256)", +"dee81061": "setOVRLandURI(uint256,string)", "dee81a13": "Local()", "dee846c5": "updateJoinedCrowdsales(address)", "dee8575c": "getNumBits(uint256)", "dee86dfb": "marketIdeas()", "dee8bd51": "ReleaseICO()", "dee9f53f": "idOf(uint256)", +"deea908d": "dailyRate(uint256,uint256)", "deeb2efe": "getShifters(address,uint256)", "deeb7124": "MDAToken()", +"deeb8c76": "cfd()", "deebeac9": "transferToken(address)", "deec053d": "getMarketCachedIndex(uint256)", +"deec2bb8": "buildPrefixedHash(bytes32)", "deec4c20": "getCardsInfo(uint256)", "deecb187": "KyberNetworkProxy(address)", "deed18e2": "isReadyToFinalize()", +"deed1c80": "deflectDevFeeClaimed()", "deed2be0": "getDailyPlayers()", "deed4b80": "isFirstLockTimeEnd()", +"deeda564": "update(bool,uint256,bytes32)", +"deee7b69": "getFeesByToken(address)", "deee9adb": "setPOOL_edit_10(string)", +"deef0869": "_getRandomPositionIdxAndBurnAmount(uint128)", +"deef6236": "resetBurnamintable(address,address,bool,uint256)", "deef6c99": "ZigguratToken(uint256,string,uint8,string)", +"deef79b8": "setupicos(uint256,uint256,uint256)", "def04570": "TheFrozenDeadShitCoin()", "def0defa": "getOwnerHistoryCountOf(bytes32)", "def18101": "currentBid()", "def1a2da": "vc3Wallet4Pct()", +"def1d20f": "shuxue(address,address,uint256,uint256)", +"def1e52c": "RemoveOwnerRequestSetup2(address,address)", +"def20fd6": "C13(bytes)", "def2489b": "convert(address)", "def2be48": "getBAAAU(bytes32,address,address,address)", +"def4576c": "walletTo()", +"def4aa4c": "setRewardFee(uint8)", "def4ba32": "utrTestToken()", +"def4bc47": "BRRRxContracts(address)", +"def4d540": "hashIdToMultisig(bytes32)", +"def4daa9": "returnExpiredPut(uint256)", "def51dc2": "CIC()", +"def51ff1": "priceToClose(uint256,uint256,uint256,uint256)", "def59575": "manualyAddReferral(address,uint256)", "def59ea5": "addMember(address,address,uint256)", "def5bbd0": "strConcats(string,string,string,string,string)", +"def5e98d": "baseToTokenSwapInput(uint256,uint256)", +"def71c78": "TOKEN_PRICE_MULT()", +"def79ab5": "ownerList(uint256)", +"def7b31c": "recoverNMR(address)", "def7eb44": "maxChangeFee()", +"def807af": "subTokenId(uint256,string)", "def843ef": "createOfAthleteCard(string,address,uint256,uint256,uint256)", "def86cbb": "modifyWhitelist(address[],address[])", "def871ef": "AirDrop(uint256)", "def8ecf4": "removeBuyOrder(uint256)", "def9176c": "team1Balance()", "def92c69": "MAX_BALANCE()", +"def92d68": "overflowaddtostate(uint256)", +"def93129": "Drained(uint256)", +"def9613b": "nameofmember(address)", "def98a72": "recipientExtraMIT()", "def9c7e2": "_escrowStakeOwnerPaymentEarning(address,bytes32,uint256,uint256,address,bool)", "defa92ee": "depositDividends()", @@ -127703,23 +233743,43 @@ "defafa37": "setRefundTimelock(uint256)", "defb9584": "PROMO_CREATION_LIMIT()", "defbc073": "weiUnlocked()", +"defc1074": "add(uint256,uint256,address,bool)", +"defc644e": "updateSire(uint256,uint256)", "defc876e": "removeAddressFromCaller(address)", "defc8ae9": "BuyOffer(address,address,uint256,uint256,uint256,uint256)", "defce6d8": "FlagAddress(address)", +"defcf51f": "airdropByOwner(address[],uint256[])", +"defd0373": "assocFee()", +"defd6c5f": "purchasePrice()", +"defdfae6": "changeDeployer(address)", +"defe2053": "rewardsManager()", "defe2883": "totalSupplyByAsset(bytes32)", "defe2c47": "_checkRecommend(bool,uint256)", +"defed2ce": "setUsdtType(address,bool)", "defefe96": "payCompoundTerm(uint256,uint8,uint8)", +"deff2213": "whoIsLeading()", "deff30c6": "sellTokens(address)", "deff3a37": "purchaseReject(address)", "deff41c1": "m_owner()", "deff5757": "setPartnersRelease(uint256)", +"deff5d11": "withdrawFountain()", "deff71b8": "setAllFlagPairs(bool[2][])", "deff7f2f": "CrowdFundings()", "deffbaee": "addOwnershipChest(address,uint256)", +"deffbb20": "memeIndexToOwner(uint256)", +"defffffb": "UpgradeFinalized(address,address)", "df000ff7": "acceptParityOwnership()", +"df006450": "clone2Address(address,uint256,address)", +"df011852": "setDollarsPerETH()", +"df011c41": "collateralFactor()", "df013fab": "setDelegadoDeEscuela(bytes32,bytes32,uint256,uint256)", "df018dbd": "process(address,address,address,string,string)", +"df01e52d": "checkGetTickAtSqrtRatioInvariants(uint160)", +"df021a17": "isAdmin(string)", "df022cbc": "hello1()", +"df02995d": "deploy(uint256,address)", +"df02b86f": "screw(address,address,uint256)", +"df02f1db": "setSecondaryPayoutAddress(address)", "df034586": "lockCount(address)", "df034cd0": "updater()", "df034db8": "aCASATest()", @@ -127727,97 +233787,175 @@ "df0441cc": "_checkUnlock(address)", "df054797": "securityAudit()", "df0584af": "ClimateCoinAddress()", +"df05a52a": "setLiquidityLimit(uint256)", +"df05d8c5": "estAssetIn(uint256)", +"df05eef5": "launchedOn()", "df065d78": "TEST_PLAYER()", +"df066804": "getProposalsForExactPool(uint256)", "df06c1d8": "plotsOwned(address,uint256)", "df06f906": "numBets()", +"df076c86": "startJob(uint256,uint8)", +"df077c74": "getAppBylawBytes32(bytes32)", "df0795aa": "setKycProvider(address)", +"df085678": "FOUNDATION_POOL()", "df08ce62": "give(address[],uint256[])", "df09176b": "ActualizePrice(uint256,uint256,uint256,uint256)", "df0969dc": "clearPlayerPrize(address)", "df09921f": "institutionAllocation()", +"df09d604": "getClaimTopics()", +"df09fa7e": "pollThreshold()", +"df09fea7": "getCoverDetailsByCoverID1(uint256)", "df0a2bda": "refundIgnoredBids(uint256)", "df0a8589": "dealAmount()", +"df0ac846": "approve_755(address,uint256)", "df0ad3de": "upgradeabilityAdmin()", "df0b1344": "SchmeckleTokenSale()", "df0b52c8": "keyAddress()", "df0bcf4d": "setAvatar(uint256)", +"df0bd1eb": "misoPerBlock()", +"df0bee96": "createMishap(uint256)", +"df0c3198": "allocateShares(uint256,address)", "df0c428c": "releaseAdvisorsTeamTokens()", "df0c7a55": "nextPrice(uint16)", +"df0cb934": "received(address)", "df0cd37b": "Etheremojis()", "df0d05d9": "EmporioExchage()", "df0d1078": "volumeType1()", +"df0d2530": "turbulenceUpdator()", +"df0d88b3": "farm(address,uint256)", "df0da20e": "BONUS_WINDOW_1_END_TIME()", +"df0e0768": "getWETHaddress()", "df0efbf5": "rateForSale(uint256)", "df0f093b": "purchasePeriod()", "df0f26f9": "getBalanceAddr(uint256)", "df0f3227": "DurationAltered(uint256)", "df0f3c19": "getGameCountdown()", "df0f3e1c": "isFalse(bool,string)", +"df1016ce": "forwardFee(uint256)", +"df1022e9": "getSenderInfo(uint8)", "df109ee1": "AuctionManager()", "df10dd6e": "checkSubAvailability(bytes32)", +"df1145d2": "kill(uint256,uint256,address)", "df117c47": "updateSuperPrivilegeParams(uint256,uint256)", "df11d258": "witness(bytes32,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"df12941c": "repayErc20(address,address,uint256)", "df12b94e": "investBalance()", +"df133bca": "vote(uint256,bool,bool)", "df133cf9": "minesPrice(uint256)", "df1340a0": "QTR_Token()", "df13569d": "FACTOR_6()", +"df136d65": "rewardPerTokenStored()", +"df13984b": "writeNewCall(uint256,uint256,uint256,uint256)", "df13994e": "callback(bytes32)", +"df1405f3": "allStarIndexToApproved(uint256)", "df143fb7": "HackerGold(address)", "df148cdb": "setPonziAddress(address)", "df155488": "startLockTime()", "df15c37e": "getWinners()", "df15f87e": "FiatRaisedUpdated(address,uint256)", +"df161171": "getIpfsFromLabel(string)", "df1614cf": "setLendFee(uint256)", "df1673e9": "CHINESE_EXCHANGE_4()", +"df16e362": "didChallengerWin(uint256,uint256)", +"df173f16": "rewardPerToken3()", "df175e9b": "newCampaign(address,uint256,uint256)", "df17c4b1": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32)", +"df17e316": "NotWhitelisted(address)", "df181831": "staff_1()", "df1836ca": "referrerAndOwnerPercent()", +"df183853": "queryConfigInfo(bytes32)", +"df18685d": "getCurrentTicketPrice()", +"df18e047": "owed(address)", "df18e215": "updateTokenStore(address)", "df190048": "getAdPrice(uint256)", +"df194ca5": "TokenBurn()", "df19b71c": "digitToNumber(uint8)", "df19df5d": "ownerOperationsLength(address)", +"df1a1b35": "setAirdropPool(uint256,uint256,bool,uint256,bool,uint256,bool)", "df1a5aab": "reservedTokensClaimStage()", +"df1a701c": "degenMode()", +"df1a9e0e": "getPoolsMintedAmounts()", "df1abf83": "revertTokensByKYC(address)", +"df1b76fa": "lpMiningContract()", "df1b817e": "setupCutie(uint40,uint16)", +"df1ba69d": "handleCallHookData(address,uint256,address,address,bytes)", +"df1c269f": "approve_78(address,uint256)", "df1c455c": "unallocated()", +"df1ca9f5": "buy(uint256,bool,bytes)", "df1cd2b5": "volumeBonusesTokens(address)", "df1cf293": "addAuction(uint32,uint256,uint256,uint256)", "df1d4559": "setFOUNDATION_POOL_ADDR(address)", +"df1d5de7": "doAirDrop(address[],uint256[],uint256)", +"df1d5fb1": "processUnpeg(bytes32)", "df1dbbc9": "ShareToken()", +"df1dcaa9": "setLockedTime(uint256)", "df1dd826": "trade(uint256)", "df1e36c6": "unlockDeposit(string,address)", +"df1e6646": "approveWeth(uint256)", "df1ead82": "disinvest()", "df1ec3ea": "BesideERC20(uint256,string,string)", +"df1f021c": "distributePBIT(address[],uint256,uint256)", +"df1f29ee": "getOrigin()", "df1f4a6e": "getTimestring(uint256)", +"df1f6a0f": "funderEthAmt(address)", "df1fc781": "KickicoCrowdsale(address,address,address,address,address,address,address,address,address)", +"df20095f": "setChangelogSHA256(address,string)", "df201a46": "simple()", +"df2025dc": "f7()", +"df202b9e": "exchangeSposTokensOnBonusTokens(uint256)", +"df202f42": "_cliffAmount()", "df203ff7": "depositGasCost()", +"df207545": "updateNumberPika(uint256,uint256,uint256)", "df20b119": "balanceEthCrowd(address)", "df20c021": "addNewChannelAndRankofuser(address,string,int256)", "df20d738": "BokkyPooBahsEtherRefundablePrize()", +"df2126b2": "viewFiatDexSpecs()", +"df2186d8": "GS_betTimeoutSec()", +"df21950f": "removeRule(address)", +"df21d240": "determinarNumeroGanador()", "df221223": "setWeiExchangeRate(uint256)", "df22bf83": "canUseTokens(address,uint256)", +"df22db88": "burn(uint256,bool,uint256)", +"df22f63b": "sell(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "df23128f": "adjustTranche(uint256)", "df234815": "tokensAvailableAtTierInternal(uint8,uint256,uint256)", +"df23b45b": "strategyData(address)", +"df23cbb1": "pauseIssuance()", "df2436b3": "isExistByBytes(bytes32)", "df247c5d": "CareerXonToken(uint256,uint256,uint256,uint256)", +"df24805d": "isInitialize()", +"df2484ff": "democList(uint256)", +"df24e16a": "changeToOpenPresale()", "df25322d": "getFundReceiver()", +"df25e8a8": "pendingYieldNet(uint256,address)", "df25ecf8": "DSTContract(string,string)", "df25ee23": "getIndexId(address,bytes)", "df25f3f0": "minPerTx()", +"df2671cf": "getTotalMultiplier(address)", "df26ca08": "emitError(uint256)", +"df273cb6": "Withdrawal(address,uint256,uint256)", +"df275c3e": "getAutorAddress()", +"df279cc7": "oraclelist(address)", "df28aef7": "withdrawLiquidatePool(uint256)", "df28d6fa": "Dex2(address)", +"df28e011": "LogPayInterestForPosition(bytes32,address,address,uint256,uint256)", +"df29194f": "promotePlayer_SideB(address)", "df294588": "get_Gains(address,address)", "df294cad": "allocateNominalToken(address,uint256)", "df295080": "changeAbstractStorage(address)", +"df296647": "mintTeamAndAdvisorsPart(uint256)", +"df297ab4": "notifyFees(address,uint256)", "df29b982": "emergencyWithdrawERC20(address,uint256)", "df29dfc4": "get_start_time()", +"df29ea97": "setRunner(uint8,address)", +"df2a00c2": "defaultContractDuration()", "df2a201b": "setSystemOraGasLimit(uint256)", "df2a2753": "LDGToken()", "df2a29da": "getDenominationToken()", +"df2a5698": "RDDR()", "df2a6e4f": "kscBatchSellByOtherCoin(address,address[],uint256[],uint256,uint256[],string)", +"df2ab5bb": "sweepToken(address,uint256,address)", +"df2b1660": "init(address,address,bool,uint256,uint256,uint256,address)", "df2b1cf8": "toBytes(uint256,uint256)", "df2b1f28": "tokenSetTransferFeeReceiver(address,address,address,address)", "df2bf12b": "totalBatchOf(bytes32)", @@ -127829,75 +233967,140 @@ "df2df29a": "CEO_Signature()", "df2dfb20": "canIBuy()", "df2e5c0f": "changePricePerUnicorn(uint256)", +"df2eb350": "enableBeginning()", +"df2ebdbb": "NATIVE_TOKEN_ADDRESS()", +"df2efc85": "setAirdropMaker(address)", "df2f0a4a": "getDecisionBlockNumber(uint256,uint256)", "df2fbae6": "totalAvaliableSupply()", +"df2fcc4c": "keyBought()", "df300b46": "getThing(bytes32[])", "df305680": "clearProposalLocked(address)", "df30e592": "isValidContributorId(uint256)", "df31566e": "setUInt(string,uint256)", "df3164c6": "Release()", +"df317267": "deleteBlackFunds(address)", +"df318201": "pendingDOGS(uint256,address)", "df31b589": "bonusForPreICO()", +"df31f208": "getRewardToBeGiven(uint256,uint256,uint256)", "df320b29": "refundBet(bytes32)", +"df321166": "getDepositsAmount()", +"df32205d": "unclaimedPotatoYield()", "df32754b": "owned()", "df32dc5c": "withdrawEarning(uint256)", +"df32f341": "totalLost(uint256)", "df331545": "reservedOperationalExpenses()", "df334093": "acceptingDeposits()", +"df33a0d1": "founderDeveloperMintAVEC(uint256,address,address,address,address,uint256,bytes32,bytes32,bool)", +"df33db6d": "tellerContractAddress()", +"df33fa88": "cross(int24,uint256,uint256,uint160,int56,uint32)", "df342d66": "setSubcontractAddressAndDataPattern(uint256,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"df349ed5": "totalStakes(address)", +"df34d30c": "IssuancePaused()", +"df35bd0f": "memeContracts(uint256)", "df36318a": "exchangeStart()", +"df3658ca": "LogTransferSold(address,uint256)", +"df36bb72": "remainingAirdropSurplus(address)", +"df371d9c": "updateUserBookAddress(address)", +"df379770": "userRewardsCircle(address,uint256)", +"df379876": "earnedBalances(address)", +"df37c617": "proxyFundsAddr()", +"df37f177": "priceOfProduct(uint256)", "df3864d5": "ticketsSold(uint256)", "df390d63": "encodeData(uint128,uint256,uint24,uint40)", +"df391d8e": "simple_if(uint256)", "df3959f5": "setInitializeUniverseValue()", +"df39f929": "removeGov(address)", "df3a4fa1": "maxSubdivisions()", "df3a635a": "removeDeed(address,uint256)", "df3a6b10": "testMemberAddedEvent()", "df3aa1fc": "FTXToken(address)", +"df3aeab9": "productQualityMinorDefect()", +"df3b642d": "GetPricePerFullShare()", +"df3b64ab": "coreDev()", "df3b75f0": "test_standardCampaignDeploymentAndUse()", +"df3be62c": "registerEthUsdOracle(address)", "df3be668": "productLimits(bytes32)", "df3be9e8": "ERCFW()", "df3c211b": "calculateVestedTokens(uint256,uint256,uint256,uint256,uint256)", "df3c3a30": "mintLocked()", "df3c5a42": "supplyICOContract(address)", "df3c8620": "num_challenges()", +"df3c975e": "f8(bytes32)", "df3cc390": "setUsdRate(uint256)", +"df3cc8a1": "_unlockBalanceAdmin()", +"df3cf5f7": "transferFromDepositorContract(uint256)", +"df3d8e1c": "setPeopleFundAddress(address)", +"df3d90b3": "docTotalSupply()", "df3e0a1d": "completeEscrow(uint256)", +"df3e2bb8": "_factorycount()", +"df3e576f": "dataProviders(uint8,uint256)", +"df3e9813": "withdrawAdmins()", "df3f5974": "readPublicRecord(bytes32,bytes32)", +"df3f8222": "setMigrationLimit(uint256)", "df3fb59e": "DSPRegistryReplaced(address,address)", +"df4015fc": "metaIssueBounty(bytes,address[],address[],string,uint256,address,uint256,uint256)", +"df401a96": "downAllowance(address,uint256)", "df40503c": "getRemainCoins()", "df40a089": "setDrawAddress(address,address)", "df41765e": "circulatingTokensFromSale()", "df418fbf": "returnBytes1(bytes)", +"df41bc5f": "lockLPToken(address,uint256,uint256,address)", +"df41cec7": "setPrescriber(string,string,string,string,string,string,address)", "df41d979": "ico_distribution(address,uint256)", +"df41e254": "bagTypes(uint256)", "df426401": "founderTokenUnlockPhase2()", "df428e3b": "createChildUniverse(uint256[],bool)", "df42dfa9": "initialARXSupplyInWei()", "df42e80e": "Asset()", +"df42f0fd": "issuable_fxb_value_in_frax()", +"df433c84": "incrIAIStats(uint256,address,uint256)", +"df43469b": "getAllowedChangeSex(uint32)", "df43b699": "setInvoiceCancelled(address,address,uint256)", "df43b830": "absolutCBD()", +"df442adc": "gxt_allocation()", "df444df1": "createEscrowBySeller(address,uint256)", "df459426": "parse_signature(bytes32,bytes,bytes)", +"df45ee5a": "mint(address,string,uint64)", "df4604b3": "submitOrVote(bytes32)", "df462098": "setNextCommonTTMTokenId7(uint64)", +"df462a47": "lkd()", +"df463a66": "PAYMASTER_ACCEPTANCE_BUDGET()", "df463ed3": "buyService(uint64,uint64)", +"df465e15": "parkFunds(uint256,address)", +"df469ccb": "GameOver()", +"df4738ab": "set_rate_source(address)", +"df478463": "minerMinMineAmountInWei()", "df47a924": "DiaToken()", +"df4817a7": "InitialLastBuyer(address)", "df482ad5": "privateFundSupply()", "df483622": "addLotteryParticipant(address,uint256)", "df487962": "FibokenCreated(uint8,address,uint256)", "df48a2b0": "setReinvestmentAddress(address)", +"df48dbb7": "yourEMaxBalance(address)", "df49804a": "mtv()", +"df49b59e": "premium_rewards(address)", "df49dfe3": "updateTransferMinimumFee(uint8)", "df4a2ecc": "hasNext()", +"df4a529d": "deletePreTransfer(uint256)", "df4aaf04": "COIN_SUPPLY_ICO_TIER_2()", "df4adb94": "getOutcomeByIndex(uint256)", "df4b2970": "getRabbitMother(uint32)", "df4b3351": "collectEtherBack(address)", +"df4b4776": "getStakes()", "df4bcf58": "isMigrationAgent()", "df4bd18d": "setPriceAndRate(uint256,uint256)", "df4bef32": "searchInList(address)", "df4c2164": "mintableAddress()", +"df4c8adc": "createCrowdsale(address,uint256,uint256,uint256,uint256,uint256,address,uint256)", +"df4c9167": "ArCoin(uint256,string,uint8,string)", "df4c98b5": "createRentAuction(uint256,uint256,uint256,uint256,uint256)", "df4cbb96": "commitProposal(bytes32,string)", +"df4cbfd8": "get_seconds_until_epoch_end(uint256)", "df4d17dc": "initToken(address)", +"df4de466": "updatePoolIndex(string,uint64,uint64)", "df4dfa7f": "PRE_ICO_TOKENS_AMOUNT()", +"df4e3026": "onUniswap()", +"df4e550a": "creditRules(uint256)", "df4e79fa": "VESTED_TOKENS()", "df4ebd9d": "buyWanCoin(address)", "df4ec249": "step3()", @@ -127906,55 +234109,116 @@ "df4f5a72": "refunder()", "df4fc373": "SetIPR(string,string,address,string,string,uint256,address)", "df4fcf8e": "newFeePercentageIsSet(uint256)", +"df4fddf5": "investmentsDeadlineTimeStamp()", +"df50352c": "checkCompliance(bool)", "df5055e6": "adminVer()", "df506768": "payTeam(address)", "df506801": "preSaleThirdCap()", +"df5081fc": "ETHBet(uint8)", "df50a8c1": "updateFundraiser(address,bool)", "df50afa4": "setAllowTransfers(bool)", +"df50e925": "setTokenSend(address)", +"df5163f4": "setPOlyPrice(uint256)", +"df51aa49": "getWebsite()", "df51d46b": "setUnlockEarlier(uint256)", "df520efc": "pricePerTokenInWei()", +"df5243e0": "enableHoldLimit()", +"df52eb75": "calcPoolSpotPrice(address,address,uint256,uint256)", "df52f321": "CinociCoin(uint256,string,string)", "df53623f": "_unlockContract()", +"df53a5d3": "getAgicFundPool()", +"df541dc2": "assignBounty(address)", "df5483ad": "setImageWidth(uint256,uint16)", "df54c659": "TransferredFoundersTokens(address,uint256)", +"df555007": "changeStateSyncerAddress(address)", "df55b41a": "owner(string)", "df55f529": "UNLOCK_TEN_PERCENT_PERIOD()", "df565ca2": "rateRatioCVSThreshold()", +"df56e168": "frax_info()", "df571e33": "postSoftRate()", "df57904a": "GoodfieldNewRetail(uint256,string,string)", "df57a6ec": "_generateRandomDna(string)", "df57b742": "getReverse(bytes32)", +"df57f2fa": "getLiquidityInfo(uint256)", "df58471d": "increaseFundingGoal(uint256)", +"df58a040": "orbiSupplyTotal()", "df58d236": "WipedAccount(address,uint256)", "df590d89": "KnowHowChain()", "df591e82": "goForward()", +"df593c01": "LogAddAdmin(address,address)", +"df593f22": "getPumpstore()", +"df59b3db": "burnOnSellEth(address,uint112,uint256)", "df59cbeb": "OwnedUpgradeabilityProxy()", "df5a1417": "PLAYERWIN()", +"df5a30f3": "execute2(address,uint256,bytes)", +"df5a9fc1": "MINT_PERIOD_DURATION()", "df5b588c": "PublishWinnersScoreThres(uint16)", +"df5c1804": "resourceSupply()", +"df5c8a9e": "buyBackRate1()", +"df5c924f": "bridgeTasks(uint256)", +"df5ca1e4": "CreateGift(uint256,uint32,address,uint256)", +"df5ca36c": "Jackpot(address,address,uint256)", +"df5cb786": "addtoPrivateSale(address,uint256,uint256)", "df5cc291": "get4(bytes,uint256)", +"df5cd718": "leaseByAssetId(uint256)", "df5cf723": "delegation()", +"df5d0341": "rewardWithdraw()", "df5d3e89": "subBuy(bytes32,bytes32,address)", "df5d3ec7": "setSaleEnd(uint32)", +"df5d76aa": "playgame(uint256)", +"df5d7a33": "bulkTokenSend(address[],uint256,string)", +"df5d97ec": "updateMembers(address,address[],uint256)", "df5dd1a5": "addOracle(address)", "df5dd98f": "refFeeVal()", +"df5dd9c8": "triggerContract1(address)", "df5e3569": "hasBet(uint256)", +"df5e9b29": "isComponent(address)", +"df5eb0e7": "updatePaymentWallet(address)", "df5f0603": "retrieveEth(uint256)", +"df5f2889": "removeLiquidityOneCoinUnderlying(address,address,address,uint256,int128,uint256)", +"df5f2a1e": "spendCoinAge(address,uint256)", "df5f53f1": "checkWithdrawal(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"df5fe704": "isHeaderSynced(uint64)", +"df5fffc2": "SanMinted(address,uint256,string)", "df603769": "reconcile(uint256,address[],int256[],uint8[],bytes32[],bytes32[])", +"df608f36": "infoOfPool(address,address)", +"df612d6d": "tokenPurchaseRate(address)", +"df615b39": "Logs(string)", "df61f51b": "TokensIssued(address,uint256,uint256,uint256)", +"df61f6c8": "OnLogPlaying(address,uint256,uint256)", +"df6203dd": "_swapETHToLP(address,uint256,address)", +"df623698": "flashImport(address[],address[],address[],address[],address,uint256,address)", +"df62a87d": "createERC20WithReferral(address,string,string,uint256,address)", +"df636ea0": "mint(address,uint256,address,uint256,uint256,uint256,uint256,uint256)", "df6378e9": "getAuctionAddress(uint256)", +"df6392fc": "setuseToken(address)", "df63d908": "testYBool()", "df63e659": "deleteAllMessages()", "df642cad": "setCost(uint8,uint256,uint32)", +"df64c505": "approve_488(address,uint256)", +"df65845a": "getReferrers(address)", "df65d1ef": "getLuckBoyAddrList()", +"df663d03": "cefiPerBlock()", +"df668eca": "SWAPPER_ROLE()", +"df66f294": "Yes()", "df66fc14": "sendTokenTeamAdvisor(address)", "df67184a": "getRequiredBalance(uint256)", +"df672aeb": "setRegister(uint256,string,uint256,string)", "df673d35": "SISA_token()", +"df6760c5": "getHash(uint8,bytes32,bytes32)", "df67ae3d": "GetStuffList(address)", "df67d82d": "minETH()", +"df683e92": "directDistribute(address,uint256)", +"df689ec6": "onWithdrawBenefit()", "df68a516": "viable_print(int256,uint256,uint256,uint64)", "df68c1a2": "canTransfer()", +"df68c1c9": "buscaProduto(string)", "df68fd99": "popElementWithPos(uint256)", +"df692929": "numberOfContributions(address)", +"df692f1c": "changeMaxDirectRegister(uint256)", +"df69433b": "canSettle(uint256)", +"df698fc9": "demoteAdmin(address)", +"df69e016": "__Governable_init_unchained(address)", "df6a000d": "safe_withdraw(uint256)", "df6a6002": "fourthMonthEnd()", "df6a6b38": "redeemed(address,uint256)", @@ -127970,266 +234234,499 @@ "df6cf923": "IXTPayment()", "df6d3afa": "setAngelHolder(address)", "df6d4843": "getMaxLimit()", +"df6d7831": "setTokenControlData(address[],uint256[],uint256[])", "df6da6f9": "tokenSellData(address)", +"df6dfbb9": "chkOwnerList(uint256)", "df6e1331": "drawGame(uint256,string)", "df6e7a5f": "setTokenDelegation(address,address)", +"df6e9911": "setNFTName(uint256,string)", "df6ee5f2": "lend(bytes32,bytes,address,uint256,bytes)", "df6ee6b7": "addStage(uint256,uint256,uint256,uint256,uint256,uint256)", +"df6ef662": "deployTokenTime()", "df6f023d": "reLoadCore(uint256,uint256,uint256,uint256)", +"df6f55f5": "getPoolsInactive()", +"df6f63f0": "deployChild(address,address,uint256)", +"df6f8ea2": "balanceOfFillOrders(address,bytes32)", +"df6fa20e": "deactivateAdmin(address)", +"df6fd807": "RewardDistribute(uint256,uint256,address,uint256)", "df700074": "setadmin(address,address)", +"df703a95": "migrateThroughOneFork(uint256[],string)", "df706f77": "JTrex()", "df708f01": "setMainContract(address,address)", "df70ab71": "increasePositionOnBehalfOfRecurse(address,address,bytes32,uint256)", +"df70e4d6": "externalMaxUint256(uint256,uint256)", "df70f3b5": "Jumanji()", "df713abd": "get_time_locked_contract_size(address)", +"df7225eb": "getEarnings(uint256)", +"df73496b": "ChangeOwnership(address,address)", +"df7400cb": "proposeDAOUpgrade(address,string)", "df7447dd": "createTicker(uint256)", "df7458cd": "addReply(bytes32,string,uint256,address)", "df745d28": "releaseBatch(address[])", +"df75111b": "getTokenToDaiProfit(address,uint256)", "df752519": "MANHATTANPROXY1STST()", +"df7540eb": "trucetime()", "df75574a": "buyItem3()", "df755a98": "prPercent()", +"df75ce91": "increaseTokenPrice()", "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()", +"df77a52f": "getSettlemetPriceByRoundId(address,uint256,uint80)", +"df77d5cf": "cambia_ora(string)", "df77e074": "GetBetInfo(uint8,uint256,address)", "df77eb1e": "transferHomeViaRelay(address,uint256)", "df78c1dd": "payIn(uint256)", +"df78fa68": "geticoperiod()", +"df791e50": "swap(address,address,uint256)", "df79d8fa": "initialInvestorAccount(uint8)", +"df7a82b1": "hashShare()", +"df7a95ae": "Set(uint256)", "df7ae3d8": "debugVal()", +"df7b6e97": "useUniSwapPrice()", "df7b70ab": "writesExercised(bytes32,address)", +"df7bbb2f": "NewKT(string,uint256,uint256,uint256)", "df7be446": "_removeNFToken(address,uint256)", "df7bf704": "matchResult()", "df7c5fca": "checkPeriodic()", +"df7c7c8f": "crowdsaleMinElapsedTimeLevels(uint256)", "df7cc70d": "ethUnPause()", +"df7ce7e4": "liquidityProvidersAPY()", "df7cec28": "cancelBid(bytes32)", +"df7d5cd8": "approve_603(address,uint256)", "df7dbd70": "prTokens()", "df7dfef7": "deleteAction(uint256)", +"df7e7ddd": "stakedToWithdrawTime()", +"df7e944a": "viewUserReferrals(address)", "df7efed8": "WeiinEth()", +"df7f453b": "isSuperAdmin(address)", +"df7fc143": "A(string)", "df8011b2": "HOWL()", +"df80207c": "copyReserves(address)", +"df808487": "general_pool_amount()", "df8089ef": "setAdministrator(address)", +"df80d293": "testownerfalseikontaktX()", "df811d7d": "numberOfPlayersInCurrentRound()", "df816206": "getGiftIdsByRecipient(address)", +"df8164cf": "withdrawSafe(uint256,uint256)", "df817e54": "checkPreIcoStatus()", +"df81b8ec": "_requireTroveIsActive(address)", "df821cf7": "BIDCOIN()", "df833a1a": "createGato(uint256)", "df8344fe": "allAllowancesForManyAccounts(address[],address,address[])", +"df837972": "devWithdrew(address,uint256,string)", "df84807a": "templateIdOf(uint256)", "df851f03": "calcNextPrice(uint256)", +"df85fa73": "transactionFailed(uint256)", +"df862e7b": "balanceOfsteCRV()", +"df8644c0": "BidPlaced(address,uint256,uint256)", +"df864576": "enableFees(address[],bytes[])", +"df8673d3": "testCalculateDiscountedBorrowDenominatedCollateral_RidiculousLiquidationDiscountCausesOverflow()", +"df86fcd4": "buyFirstTokens(address,bytes,uint256[],uint256,uint256)", +"df86fe7f": "remuneration(uint256)", "df8713ed": "addPot(uint256)", +"df878f0b": "CSALE_HARDCAP()", +"df87c84e": "GameLocked(uint256)", +"df87ee42": "userSpec(address)", "df88126f": "lockedInBets()", "df8812c7": "addStageAmount(uint256)", "df88401c": "KillahyToken()", "df885536": "nxtAddr()", +"df8879b8": "rebalance(uint256,uint256)", "df888f4e": "AO()", +"df88ee02": "RegistrarAdded(uint256,address)", "df88f5b8": "setNotConstant()", "df88fb44": "exchangeByPet(uint256,uint256,address)", +"df8926c6": "receiveFunds(address)", +"df898e32": "makeBet(uint256,uint256)", +"df89f819": "createRequest(string,string)", +"df8a8305": "LogRequestArbitration(bytes32,uint256,address,uint256)", +"df8b0348": "getNotValidedOwners()", "df8b7771": "initialiseValues()", +"df8baf47": "getRlpUint(bytes,uint256)", "df8bb140": "cancelCampaign(bytes32)", +"df8bd747": "setLockedAmount(address,uint256)", +"df8c7185": "newDigitalRetainer(string,address,address,string,string,uint8,uint8,uint8)", +"df8c7514": "setIsSatellitePool(address,bool)", +"df8ca76a": "updateTokenAllowState(address,bool)", +"df8cbcf1": "_lastEnsuredTermId()", "df8d52a9": "get_comp(uint256,uint256)", "df8d66e4": "addPlatform(bytes32)", +"df8da94e": "approveMintDelegate(address)", "df8dc370": "Reservation(address,address[])", +"df8dce1c": "extractStuckTokens(address,address)", "df8de3e7": "claimTokens(address)", "df8e03b1": "BasicWhitelist()", "df8e739d": "bitzToken()", "df8e9261": "_testItem()", +"df8f0582": "setTmvAddress(address)", "df8f4376": "calcSTQAmount(uint256)", "df8f4eb7": "originalTotalSupply()", "df8f7971": "ProfileOwner()", "df8f8a81": "setETCLockingAddr(address)", +"df8fa430": "initialize(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"df8fc3fd": "getTasksOfUser()", "df90061b": "onSaleTokens()", +"df904c41": "freeze(address[],uint256[])", "df90c98d": "whiteListEndTime()", "df90f719": "mln()", +"df90f7ce": "seeMaxLoaningAmountOnUserStakings(address,uint256[],uint256)", +"df918b95": "moneyIn()", "df91f2ab": "SggCoin()", "df9204b6": "powerStatus()", +"df921354": "NotTheContractOwner(address,address)", "df922744": "ScamSeal()", "df922f3a": "changeCommission(uint256)", +"df92c0de": "nextChainID()", +"df9388fb": "mintWithdraw(string,uint256)", "df93c9aa": "testrevert()", +"df940347": "addToAirDropList(address)", +"df9467c3": "ethx()", +"df9548ac": "RemovedFromPublicSaleWhitelist(address)", "df957b04": "_couldWithdrawFromHolder(address,uint256)", "df958553": "burnForGateway(address,string,uint64,uint64)", +"df95d35e": "transferTokensVested(address,uint256)", +"df961d28": "changeMultisigWallet(address)", +"df962bd6": "dropRoots(uint8)", "df9669e0": "setCrowdsaleEndDate(uint32)", "df969bc0": "ADVISOR_TWO()", "df96a336": "Bitkeun()", +"df96ba29": "updateIsExtraAdded(bool)", +"df97174b": "state_lastBatchNonces(address)", +"df977a53": "createChildProposal(string,string,uint256,uint256,string,string)", "df979b92": "setIncreaseTotalWinningStake(bool)", +"df982985": "reportExpirationTimeSec()", +"df985866": "UsingETHnonethpooldeposit(uint256,address,uint256)", +"df985c60": "depositLocker(address,address,uint256)", "df98ba00": "m_opNum()", "df98ef33": "getResource(bytes,uint256,bytes)", "df990c33": "becomeOwlmaster()", "df9933e5": "SetPwd(bytes32)", +"df9958d9": "pull(address,uint256,uint256)", +"df998ee2": "getStakeDROI(uint256)", "df998f59": "checkSertificate(address,address)", +"df99a2b2": "arb(address,address,uint256,bytes,uint256,uint256[])", "df99f8bf": "TradeToken()", +"df9a2b1c": "unbondUnderlying(uint256)", "df9a4f56": "registerAuditor(address)", +"df9a8388": "getUserProfitsGivenToAddr(address)", +"df9aae0a": "TOKEN(string)", "df9abaa0": "smallUintFunc(uint8,uint256)", +"df9aedab": "itemTokenByIndex(uint256)", +"df9af2f6": "_getAndIncrementNonce(uint256)", "df9b0774": "SwapResumed(uint256)", "df9b2931": "FANBASE()", "df9b3bae": "ZperToken(address,uint256,uint256)", +"df9b5027": "treeToOwner(uint256)", +"df9b56a9": "vsd()", "df9b5fe9": "ALH3()", +"df9b94c0": "withdrawTeamAssets(address,address)", +"df9c035e": "getPromoBonusHashing(address,uint16,uint256)", "df9d3580": "accountBuyLimit()", +"df9d6d67": "unsetIntent(address,address,bytes2)", +"df9dd331": "RefundedBalance(address,uint256)", "df9e33e8": "getForeverRose()", +"df9e3734": "verify(address,bytes32[],uint256[])", +"df9f2b90": "autoPoolDist(uint256,uint256)", "df9f3139": "out4Done()", +"df9f400b": "FrozenTokensTransferred(address,address,uint256,uint256)", +"df9f5ccb": "test_return()", "df9f92fb": "Scan(address[],uint256[])", +"df9fde7e": "getTargetRepMarketCapInAttoCash()", +"dfa08b6a": "zeroExToken()", +"dfa0b5db": "old_v2_brrr()", "dfa0ca14": "swapProject(uint256)", +"dfa0de8c": "exoticBalance(address,bool)", +"dfa0dfa5": "setRewardsContract(address)", "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)", +"dfa3802f": "withdrawAttributions()", "dfa38fea": "NANI(address)", +"dfa39011": "setEnableTax(uint256)", "dfa4591c": "removeLogicVersion(uint256)", +"dfa4818a": "Token_ID()", "dfa54594": "getStandartRobot(uint256)", +"dfa5471c": "getGirlCoolDownEndTime(uint256)", "dfa5a25d": "purchaseCoffee()", +"dfa62c4e": "ssToWithdraw(uint256)", +"dfa69901": "cancelPermissionsOfRole(address,address[])", "dfa6bc72": "LoggedPhaseICO(uint256,uint256,uint256,string,string,uint8,bool,bool)", "dfa72237": "innerPlayerFlight(uint256,uint16,uint256)", +"dfa7491a": "tokensale(uint256)", "dfa78bf5": "savior()", +"dfa86b8e": "price0Current(address)", "dfa8be5f": "hackEducated(address)", +"dfa8f2d4": "racePool()", +"dfa913bb": "confirmBountyAmountChange()", "dfa93d64": "relayContractAddress()", "dfa9b440": "addAddressToWhiteList(address[])", "dfaa3136": "addToMap(uint256[])", +"dfaa5276": "picto()", +"dfaa96ef": "registerMatch(string,uint256,string)", +"dfac424f": "IdentityApproval(address,address,uint256)", +"dfada569": "LogTokenSetPresalePhase(uint8,uint256)", "dfadb43c": "candyLandSaleAddress()", +"dfade125": "bondingBalance(address)", "dfae7dc1": "vestingWhitelister()", "dfaeaf67": "ThrowProxy(address)", +"dfaee3df": "pumpstore()", +"dfaf33e9": "collectionsSize()", "dfaf3658": "closeCdp(address,uint256,uint256)", "dfaf734a": "lastReleaseTime()", "dfafaa72": "sendTo(address,uint256,address)", "dfafb31d": "QUANTH()", "dfafcf7e": "isMinion(address)", +"dfafd146": "updateLockTokenFee(uint256)", "dfafe10f": "addParticipant(address)", +"dfafe8c5": "_exercisableDeposits(uint256)", "dfb01c8f": "BCC()", "dfb03cf7": "put(address,address)", +"dfb05d5b": "etherValueTransfer(uint256)", "dfb06d85": "AgentContract(address,address,address,uint256,uint256)", "dfb0fb28": "ANGEL_ADDRESS()", +"dfb131a8": "TokenTransferEvent(address,address,uint256,string)", +"dfb154cf": "membersAcctsIndex(address)", "dfb1913d": "withdrawFor(address[],uint256[])", "dfb1abc0": "distributeReservedTokens(address,uint256)", "dfb1c0e5": "buyToKen(uint256)", +"dfb1f4f3": "decrUStats(address,uint256,uint256)", "dfb259de": "SmartPoolToken(uint256,address)", "dfb2866d": "priceFactor()", "dfb29935": "sendHash(string)", +"dfb2f13b": "completeAward()", "dfb30c14": "getPlayerSpaceshipModelById(uint256)", "dfb3557b": "BNB_MIN_CONTRIB()", "dfb36b0b": "villagePrice()", "dfb41e7c": "getForecast(bytes32,uint8,uint256)", +"dfb46f3c": "pokeTemp()", "dfb4a12e": "updateCandidateInfo(address)", "dfb4ae3a": "WHOM()", "dfb4b2f0": "deadline_status()", +"dfb4b724": "faasPool()", "dfb59249": "EthRental()", +"dfb59a6f": "toggleRefundStatus(bool)", "dfb5a995": "countStureq()", +"dfb5d9b4": "userIncomePerTokenPaid(address)", "dfb5f420": "Crowdsale(address,uint256,uint256,uint256)", +"dfb60fe2": "getTradeRatio()", +"dfb643a5": "getBlockMiner(uint256)", "dfb685cb": "BIT()", "dfb69cb2": "colors(uint8)", +"dfb6a75f": "addMinion(uint16,uint8,uint8,uint8,uint8,uint8,uint8,bool)", "dfb6c468": "transferCoinvest(address)", +"dfb7184c": "StdlibChanged(address)", +"dfb7300e": "upgradeTransferRules(address)", +"dfb76a1c": "retovn(uint256)", +"dfb7da3e": "isContractLegit()", +"dfb80831": "getImpl()", +"dfb84f65": "yusdt()", "dfb873fb": "getPrizeByToken(uint256)", "dfb87be1": "setEndRate(uint256)", "dfb8a38d": "getTokenPackPrice()", "dfb8c6c2": "battleContractAddressCanBeUpdated()", +"dfb9366d": "vestingsOf(address,uint256)", "dfb9560c": "right24(uint256)", "dfb9bdca": "exchange(address,address[],uint256[],uint256)", +"dfba2954": "WithdrawByShares(uint256,address,uint256)", "dfba3be1": "pvpFinished(uint256[],uint256)", "dfba9570": "removeStaff(string)", "dfba9798": "withdrawMytoken(uint256)", "dfbb3036": "currentRoundInformation()", "dfbb4021": "checkGrid(uint8)", +"dfbb634b": "IMPOSS18()", +"dfbb69d1": "whitelistPresale(address,bool)", "dfbb70c9": "timeOfLastIncrease()", "dfbc3de1": "applyMember()", "dfbcb8d9": "transferCard(address,address,address)", +"dfbce6b4": "FF9374C()", "dfbd5c69": "EggsRedeemed(address,uint256)", "dfbd6150": "subowner()", "dfbd9973": "pageByAccount(address,uint256,uint256,uint256)", "dfbde5a7": "FedCoup()", "dfbe0587": "sellPorftolio(uint256,uint256)", +"dfbe873b": "toInt256(uint256)", "dfbebd07": "licenseExpirationTime(uint256)", "dfbec00e": "requestTopic(string)", "dfbed623": "updateCaller(address,bool)", "dfbef8de": "AllowExchanger(address)", "dfbf53ae": "winner()", +"dfbfbab3": "feesPercent()", "dfc027ef": "replayAnser(uint256,uint256[])", "dfc0bedb": "setCode(uint256)", +"dfc0dff0": "getFlightKey(address,string,uint256)", +"dfc0f577": "withdrawPartnerAward(uint8)", "dfc10ea8": "callerAllocationEndBlock()", "dfc119b0": "testRfind()", +"dfc16484": "ReturnBet(address)", +"dfc1e7d6": "epochRewardMultiplers(uint256)", "dfc28653": "NucleusVisionTokenUnlocked()", "dfc2a146": "ORACON(uint256,uint256)", +"dfc2d1ba": "addStake(address,address,uint256)", +"dfc34d6e": "createTrend(string,address)", +"dfc3506d": "onUpPlayerRound(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"dfc35ad1": "registerDao(address,string,string,uint256)", "dfc366e8": "tenthousandths()", "dfc3a987": "cntMembers()", +"dfc3ed37": "transferSingle(address,uint256)", "dfc42f7c": "OmegaContract()", +"dfc458d1": "tokenDrops(uint256)", "dfc4a516": "doApprove(address,address,uint256)", +"dfc4d213": "buyingPremiumFeeMaxPercent()", +"dfc53cfa": "priceOfBunny()", +"dfc5b4aa": "viewSaleRHINO()", +"dfc5e174": "extS2()", +"dfc6459e": "GetInventoryHero(address,uint256)", +"dfc6921d": "calcRewardWithoutPrecision(uint256,address)", "dfc6fbaa": "presaleBalanceOf(address)", "dfc6ffc6": "CharlieCoin()", +"dfc71be9": "yearn(address)", "dfc74cb4": "testPlaceBet()", "dfc75b9c": "sendJigouByOwner(address,uint256)", "dfc765dc": "getMatchers_by_index(uint256)", "dfc78bdc": "ProposalTallied(uint256,bool,uint256)", +"dfc7a6a8": "totalDepositedEthBalance()", +"dfc7b95b": "multLpChef()", "dfc7d488": "getTransactionFee(uint256)", "dfc86d56": "UsdToEtherConvert(uint256)", "dfc89632": "PresidentElections()", +"dfc8bf4e": "validatorSetContract()", "dfc8bff1": "updateLock(uint256)", +"dfc91e1c": "doRefundETH()", +"dfc9ee0e": "claim(uint256,address,uint256,uint256,address,address,uint256,bytes,address,bytes)", "dfca2f53": "LookAtPrizes()", "dfca685a": "unlockPrivate()", "dfca8fd2": "contributeForMakers(address)", +"dfca9008": "getProtectionInfo(uint256)", +"dfcab417": "winnerTickets(uint256)", +"dfcac77d": "getCodeContractHash(address)", +"dfcae622": "claimed(bytes32,address)", +"dfcaf240": "_tokenURIsOwner(string,address)", +"dfcaf8fb": "setTransferChecker(address)", "dfcb4157": "saleAfterRefundPeriod()", "dfcb737f": "allocateMarket_CommunitTokens()", +"dfcba993": "getRamount()", +"dfcbb301": "putBackCollat_Inv(uint256)", "dfcbb794": "TrustFund(address,uint256,address)", "dfcbc298": "CancelBuyOrder(bytes32,address,uint256,uint256,address)", +"dfcc00f2": "preciseMulInt(int256,int256)", "dfcc4b86": "ConcludeChallenge(uint256)", "dfcc525d": "info_SeeTINAmotleyLine(uint256)", +"dfcc97cc": "FoundationDeposit(uint256)", +"dfcc9e75": "createPromoBrand(bytes32,address,uint256)", "dfccdef5": "collectedETH()", +"dfcd65fc": "withdrawActFunds(address,uint256)", "dfcdc7f2": "regReferrer(address)", "dfcdde5e": "calcAmount()", "dfce5a7a": "changeGrantsController(address)", "dfce791a": "counterWagerAndDeposit(uint256)", "dfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", "dfceb5ba": "refund_and_die()", +"dfcee0da": "doAdditionalMinting(address,uint256)", "dfcefd7e": "indexOf(uint64[],uint64,bool)", +"dfcf048d": "getFee(uint256,address)", +"dfcf5f6e": "divPoolRecordsSingle(uint256)", +"dfcf6688": "mintUniqueTokenTo(string,string)", +"dfcf6878": "transferFromBothExcluded(address,address,uint256)", +"dfd00749": "getRollbackLength(bytes4)", "dfd0163e": "voteNoLockBatchByAdmin(address[],address[],uint256[])", "dfd024c1": "allocateInvestors()", +"dfd06cdf": "LogRoundOfSixteenArrived(uint256,uint8)", "dfd0c510": "ICOReward()", +"dfd0ff3d": "calculateL2ERC777Address(address)", "dfd142c1": "IncreaseWithdrawalAmount(uint256)", +"dfd16f19": "hasNFT(uint256,address)", "dfd17111": "ConstructZCashClue(bytes32)", "dfd17f2b": "buyInBatch(uint256,uint256,uint256[],uint256)", "dfd1be58": "platformFundingPerEpoch()", "dfd200c5": "setRunning(bool)", +"dfd22ded": "getEndpointAuthorizers(bytes32,bytes32)", +"dfd28122": "Corlibri()", "dfd2c96d": "updateHouse(address,address)", "dfd2ddec": "setForeignBridgeProxyOwner(address)", +"dfd2f8ac": "cleanMachine()", "dfd4715e": "setDAdmin(bytes32,address)", "dfd4e0f6": "setPrivateSaleHalt(bool)", "dfd50f52": "contestants(uint256)", "dfd51b4c": "updateIris(bytes32,address)", "dfd52b74": "_getIcoAddr()", +"dfd5b1c9": "FULL_ALLOC()", "dfd5d3b0": "creditMcAddress()", +"dfd5d6b1": "stakingDeadline()", "dfd5dd6b": "ranksCount()", +"dfd60935": "deploy(string,address,address,address)", +"dfd61429": "API_MoveToken(address,address,uint256)", "dfd6a9d5": "getPoolTotalStakeQspWei(uint256)", "dfd6e6c5": "getIcoPhaseOneThreeDayIndex(uint256)", +"dfd7c9f0": "_lastChanged()", "dfd80665": "whitelistAgent()", "dfd84c13": "sendGain()", "dfd8d516": "IsThisInternal()", "dfd92f8a": "registerProduct()", "dfd94849": "addNewSpinner(uint256)", +"dfd9d5b0": "adminAddElection(string,string[])", "dfd9e184": "droneIndexToApproved(uint256)", +"dfda1f36": "Trained(address,uint256,bool)", +"dfdab20d": "slugOf(uint256)", "dfdadcb9": "isValidPurchase()", "dfdadec6": "AlphaCarToken()", +"dfdb1b8f": "deregisterFee(address)", "dfdb27da": "FoundGameCoin()", +"dfdb5ae4": "DAOWallet()", "dfdb5f17": "doBurn(address,uint256)", +"dfdbcb00": "NEW_ALLOWANCE()", "dfdc349d": "getLestCommonMul(uint256,uint256)", +"dfdc4689": "getDaiAvailable(bytes32,uint256)", +"dfdc6f57": "SpenderERC20TransferFromFailedError(address,address,address,uint256,bytes)", "dfdc99c7": "setKpopCelebContractAddress(address,address)", "dfdce77b": "setScrapPercent(uint8)", +"dfdd32c3": "blockSpacing()", +"dfdd369e": "ragekick(address)", "dfdd3997": "maxETHAutoContributions()", "dfdd4293": "voidCaller(address,address)", +"dfdded04": "calculateBonusInRange(uint256,uint256,uint256,uint256,uint256)", +"dfde2404": "PresaleFinalized()", "dfde567f": "processAR(uint256)", +"dfdecfaf": "refund(bytes16)", +"dfdf306a": "cqw(uint256)", +"dfdf8c9f": "userStakingLimit()", +"dfdfa1fa": "calculatePriceFraction(uint256)", "dfdfb261": "addEsgoTX(address,uint256,uint256,uint256,uint256)", +"dfe00c51": "addProduct(string)", +"dfe05031": "voting_escrow()", +"dfe085ec": "AAVE_COLLECTOR()", "dfe0f0ca": "transferWithSender(address,address,uint256)", +"dfe11cf1": "wrapTo(address,uint256,uint64,uint64)", "dfe1304c": "HumanStandardToken123(uint256,string,uint8,string)", "dfe138a6": "rewardPerUnit()", +"dfe15bac": "setMinDepositAmount(address,uint256)", "dfe1b17e": "dequeueOrder()", "dfe1dcf6": "adminSendEthtoAddContract()", "dfe1f357": "checkHash(address,uint256,address,uint256,uint256,uint256)", +"dfe23f84": "renounceRole()", +"dfe2773c": "OnDrawStart(uint32)", "dfe2de30": "boughtTime(address)", "dfe333bd": "copiesSold(uint256)", "dfe33748": "TokensAreFrozen()", "dfe346d0": "NicksTastyToken()", +"dfe36478": "setMaxStrategySteps(uint8)", "dfe3a52b": "CUTOFF_PRESALE_TWO()", +"dfe3de7c": "removeIndividualDailyRestriction(address)", "dfe3e746": "setMasterNode(address)", "dfe4858a": "constuctor()", +"dfe48aa2": "_mechanicsAddress()", +"dfe4a8c8": "TokenListingCancelled(address)", +"dfe4af50": "bnbDeposit()", "dfe4c261": "approveTransaction(uint256,uint256,string)", "dfe525a2": "addHandler(address,address,string,string)", +"dfe53796": "get_available_S_balances()", +"dfe55e70": "setunitDefenseMultiplier(address,uint256,uint256,bool)", +"dfe56acd": "changeBaseInfoUrl(string)", "dfe5ef48": "issue(address,uint256,uint256)", "dfe64599": "getAllHpbNodesExt()", "dfe699b1": "SetApplicant(string,string,string,int256,string)", @@ -128237,110 +234734,206 @@ "dfe6d366": "gamblers()", "dfe71183": "createCDPLeveraged()", "dfe71486": "displayuserdetails(address)", +"dfe75335": "managerIssuanceHook(address)", +"dfe7868b": "calculateAmountForClaiming(address,uint8)", +"dfe7a37a": "registerEvent(address,string,string,string,string,string,uint256,address,string)", +"dfe7e285": "srt(uint256)", +"dfe811a3": "getPriceFromBand(string,string)", "dfe81a26": "GnarlyTimes()", +"dfe824ea": "RESERVE_NEW()", +"dfe86ac5": "domainHash()", "dfe921cb": "lifeReserveTimeLock()", +"dfe9722f": "amountEntitledTo(address)", +"dfe9e2f1": "payouts(uint256[])", +"dfea6690": "payoutRewardERC721(address,uint256)", "dfea6ec2": "placeBetWithInviter(uint256,uint256,uint256,uint8,bytes32,bytes32,address)", "dfea8483": "Countout()", "dfeade00": "AceEquityToken(uint256,string,string,uint8)", +"dfeb0661": "lockFreeAmount(address)", "dfeb1719": "getNotaire()", "dfeb1fd3": "getUserVotes(address,string,string)", "dfeb34b6": "stakeFailOverRestrictionLifted()", "dfeb3c49": "getNonces(address,address)", +"dfeb3cf8": "setContractor(address,string,string,string,string,string)", +"dfeb7521": "PlaySlotEvent(uint256,address)", +"dfeba59e": "closePosition(bytes32,uint256)", "dfebb4ee": "viewMostRelevantClauses()", +"dfebe328": "public_goods()", "dfec375e": "calcCurPointsForAcct(address)", +"dfed5513": "juryNeeded(uint256)", +"dfedd814": "setAssetsBalancer(address)", "dfedff20": "getTwit(address,uint256)", "dfee01d8": "mUpgradeSpeedup()", +"dfee1dd9": "buyBackRate2()", "dfee2bad": "phaseReleaseAmount()", "dfee6348": "COMMUNITY_PLUS_PRIORITY_SALE_CAP_ETH()", +"dfeed9f6": "depositNFT(uint8,bytes32,bytes,uint256)", "dfef54a3": "TihoToken(uint256,string,uint8,string)", "dfef58a6": "registration(bytes32,uint256,address)", "dfef5f69": "mintingStartTime()", +"dfef6679": "numberOfStakes(address)", +"dfef6beb": "toUint160(uint256)", +"dfefadff": "applications(uint256)", "dfefaf3f": "secureUnapprove(address)", +"dfefb67b": "strikeAssets(address)", +"dfefe8e7": "resellingBalanceOf(address)", +"dff00e92": "setVariationAddress(address)", "dff0259f": "donationSum()", "dff05de4": "pctDIDOwned(address,address)", +"dff05f82": "depositTimeStamp(address)", +"dff0f744": "getMiningBackMount(string)", "dff114dd": "investedCrowdsaleTokenOf(address)", +"dff16241": "hasReward()", "dff18fe0": "provideTeamHolderToken(address)", "dff1ab15": "checkProposalCode(uint256,address)", +"dff1e013": "myUniswapProxy()", "dff2db71": "binaryAddress()", +"dff2e315": "__idleUnderlying()", +"dff332fb": "fixedAmounts(address)", +"dff3b497": "getIdByAddress(address)", +"dff3cd37": "presentLevelYield()", "dff3f3b9": "ownerWithdrawal(uint256)", "dff3f83e": "resolveRawDelegation(bytes32,uint256)", "dff44b2f": "divorce()", +"dff460b5": "init(address,uint32,uint32,uint256,uint256)", "dff4a5e8": "getRestaurant(address)", "dff53231": "love()", "dff538e6": "_currentDay()", "dff5f5cb": "updateStartPhase(uint256)", "dff649dc": "NameChanged(address,uint256,string,string,uint256)", +"dff64b0d": "CurrentContractBalance(uint256)", +"dff65f31": "addMinorOwner(address)", +"dff667bf": "BURN_FEE_INSURANCE()", "dff675c2": "getDelivery()", +"dff69787": "stakerCount()", "dff79905": "LogTokenRemover(address,uint256)", +"dff86202": "pairETH()", "dff90b5b": "sendFees()", "dffa771f": "_setWeaponValue9(uint256)", +"dffac834": "setReleaseInterval(uint256)", "dffb0bd1": "getPlayerTotalDividend(address)", +"dffb2406": "isRefundAble()", +"dffb35bb": "setCutbackRate(address,uint256,uint256)", +"dffb6ef8": "sendBackLostEth(uint256,address)", "dffbbef5": "stopDistribution()", "dffbd9de": "TokenAdded(address,address)", +"dffc8b2e": "createQuestion(string,string)", "dffcf9a7": "transferableHavvens(address)", +"dffd2b38": "optimalUtilizationRate()", "dffd5e57": "buyToken(bytes32)", "dffd6054": "changeGameAddress(address)", "dffd722f": "totalEarn()", "dffd9b8e": "CEO_TEAM_SHARE()", "dffdc75d": "forward(address,bytes,uint256,bool)", "dffe0a63": "getStatGames()", +"dffe1818": "addAddressAllowed(address)", "dffeadd0": "main()", "dfff2f79": "autoReinvestFor(address)", +"dfffca76": "exchangeOnBehalfWithTracking(address,address,bytes32,uint256,bytes32,address,bytes32)", "dfffcbdb": "triggered(uint256)", +"dfffd867": "cryptoScore(address)", "e0004f43": "batchTransferTokenS(address,address[],uint256[])", +"e000b526": "LogAPICallsMade(uint256,address,address,uint256,uint256,uint256,address)", +"e000c661": "getOtherParty(address)", "e000eec3": "createPixel(uint24,uint32)", +"e001323f": "calculateYeild(bytes32)", "e0018f2f": "showPlayerSeasonScores(address,int8)", "e001ddf1": "teamTokensCurrent()", +"e00208fc": "rainbowsPerBlock()", "e0020f1a": "tokensPerEthPublicSale()", "e0024ae3": "_mine(uint256,address)", "e002a486": "changeForwardTo(address)", +"e002b6a9": "tapFaucet(uint256)", +"e002e1dd": "changeTraderOperatorsContract(address)", "e002f2ee": "cpCap()", "e0031b1d": "GetDOTDelegatedRevoker(bytes32,uint8)", +"e00320bd": "whiteListSigner(address)", "e003604e": "close(address,uint32,uint192,bytes)", "e0036d1d": "verifyPosition(uint16,uint8,uint64)", +"e0037a6c": "nextFundingTime()", +"e0037c41": "kcrv()", +"e0038305": "getLockTokenTime(address)", "e0041396": "slice(bytes,uint256,uint256)", +"e00425a3": "predictCompAccrued()", "e0046553": "ownerSetSpreadPremium(uint256)", "e004b76f": "PermissionRemoved(address)", "e004fe97": "CarRegistry(string)", "e004feb0": "testFailMintGuyWhenStopped(int256)", +"e005116c": "_dropLastSong()", +"e0051aa9": "toAddress(uint256)", "e0056019": "setLand(uint8,uint8,uint8,bool,uint8[])", +"e0059b31": "orderMonthlyDue(uint64,uint256)", "e0063224": "vouchers(bytes32,uint256)", "e0068052": "division(uint256,uint256)", "e00686e4": "rewardPerBlockPerAddress()", "e006997c": "authenticate(string,bytes)", +"e00713e9": "TOTAL_GONS()", "e007b330": "sterilize(uint256[])", "e0081b8c": "approve(bytes32,bytes32,uint256)", "e00824bb": "payCreator()", +"e0084770": "matchDonorM(uint256,uint256)", "e0089ce7": "UCtestCoin(uint256,string,uint8,string)", +"e008cb62": "getConfig(uint64)", "e008cdf3": "SBSCoin()", +"e008f022": "remove(uint256,bytes)", +"e009cfde": "disableModule(address,address)", "e00a1e8b": "addToSendAllowed(address)", +"e00a23cd": "permit_multi(address,address,address,uint112,uint256,uint8,bytes32,bytes32)", "e00a7fc5": "transferFromOwn(address,uint256)", "e00ab6dd": "private_setminBet(uint256)", "e00ac9a3": "thirdTime()", +"e00b2f84": "add(address,address,address,bool)", +"e00b58db": "TotalRewardsForLP()", +"e00b95a7": "updateCollateralPrice(address,bytes32)", "e00bc0f4": "setIsContainerForMarket(bool)", "e00bc7fb": "vota_un_candidato(address)", "e00be2a9": "getErc20Rate(string)", +"e00c04ac": "addUser(uint256,uint256)", +"e00c2cef": "foo7(address,uint256)", +"e00c50e7": "listNewTokens(uint256[],address[],uint256[],address[],uint256[],uint256[])", "e00cb0bc": "etherReceivedPrivate()", +"e00cdaac": "Problem1(string)", "e00d0aed": "TalosToken()", "e00d0f3d": "updateCandidateAddrByIndex(uint256,address,address)", +"e00d34c5": "approve_812(address,uint256)", "e00d7e5c": "ExampleToken()", +"e00dbb41": "bondageAddress()", +"e00dbca2": "tokensOffered(address)", "e00dd161": "currentId()", +"e00e0612": "UsersAddresses(uint256)", +"e00e0e70": "approve_198(address,uint256)", +"e00e3ecd": "setPenaltyPercentage(uint256)", +"e00e419a": "marketPayment()", +"e00f1e0e": "tenthClaimPrize()", "e00f882c": "numberOfExchInEstateNasAlice(address,uint256)", "e00fb7b7": "getInvited(uint32)", "e00fe2eb": "getText()", +"e01017db": "invoiced(address)", +"e01026d5": "TranscoderUpdate(address,uint256,uint256,uint256,bool)", +"e01030e5": "basepercent1()", "e01060f8": "transferOwnership(uint8[],bytes32[],bytes32[],uint256,address[])", "e010c686": "newProposal(uint256,uint256,bytes32)", "e011171d": "setDOwner(bytes32,address)", "e0117441": "setRegistrationPrice(uint256)", +"e0117aa6": "birdSupplierIndex(address,address)", +"e0118a53": "deployerLength()", "e011ac87": "amountLeft()", +"e0124633": "updateBidStatus(address)", +"e012ab12": "setupRelease(uint256,uint256,address[],uint256[],bool)", +"e0132421": "approve_580(address,uint256)", "e01330bb": "testMul(uint256,uint256,uint256)", +"e0138476": "exchangePool()", +"e0147014": "lostMoneyDL_3(address,uint256)", "e014a39f": "weiRaisedIncludingFiatCurrencyRaised()", "e014a83f": "takeToken(address,uint256,string)", "e01546a8": "fromFraction(int256,int256)", "e01567cf": "ethBioxRate1()", "e015c62a": "calculatePrice(uint256,uint256,uint256)", "e015d863": "variation()", +"e0160a10": "stakeLock(address)", +"e0164fc2": "getRes1()", "e016603f": "createMultipleShows(uint256[])", +"e01709bc": "syncAttribute(bytes32,uint256,address[])", "e0179e6c": "etherValue(uint256)", "e0180115": "culcurateBonusRate()", "e0182436": "cancelEscrow(uint256)", @@ -128352,7 +234945,10 @@ "e019ac29": "setKycCertifier(address)", "e01a38c6": "ecrecoverSigner(bytes32,bytes,uint256)", "e01a6ace": "vote_Candidate_name(bytes32[])", +"e01a6c3f": "setSelectWinnerPrecision(uint256)", +"e01a89b5": "burnNonFungible(address,uint256)", "e01ac5a4": "giveReward(bytes32,address,uint8)", +"e01af92c": "setSwapEnabled(bool)", "e01b1b10": "ICODays()", "e01bb918": "_withdrawAll(uint256,address)", "e01bc60b": "totalCustomBuyersMapping()", @@ -128362,32 +234958,64 @@ "e01cdfaa": "getEmployeeInfoById(uint256)", "e01cff84": "getTransferringForCount(address)", "e01d1f3d": "MultiSigWallet(address[],uint256,uint256,string)", +"e01d4aac": "GetIBV1CloudHash(string)", +"e01d9b79": "validateSignature(address,uint256,bytes32,bytes)", "e01dd67b": "AMBASSADOR_THREE()", +"e01df108": "pausedHatch()", "e01e0618": "feeDiv(uint256,uint256)", +"e01e80eb": "whitelistedPoolCount()", "e01e92d2": "abs(int128)", "e01ea00c": "getDarknodesFromEpochs(address,uint256,bool)", +"e01ec505": "_internalLiquidation(address,bytes4,uint256)", +"e01ee88d": "ownerWithdrawAllERC20(address)", "e01ef1f8": "addInventory(bytes32,string,string,string,string,uint256,uint256)", +"e01f62bf": "totalLiquidityLocked()", "e01fff13": "familyContract()", "e0201e07": "Eclipse()", +"e0202f87": "totalSell()", +"e02038ac": "calcContractStakeAndInterest()", +"e020455c": "pendingWhiteListAdmin()", "e0204585": "get_bet(address,address)", +"e020566b": "MoneyWithdrawn(address,uint256)", +"e0207ec0": "bonusTokenInvestments(address)", "e020b8a3": "contract_date()", "e02163e7": "etherContributionOf(address)", "e021b8cb": "useWeapon(uint8,uint8,uint8,uint8,uint8[176])", "e021deff": "meta(address)", "e022040c": "setReceiver5()", "e02243ee": "buyInternal(address,uint256)", +"e02273b4": "blacklistValidUntilBlock()", +"e022d77c": "add(uint256,uint256,uint256,uint256)", +"e0230869": "capsuleToOwner(uint256)", "e023094f": "createDroid(uint256,string,uint256,uint256,uint256)", +"e02325f0": "buyRoadster()", +"e0232b42": "flashLoan(address,uint256,bytes)", +"e023c845": "bTokenGetCollateralIn(address,uint256)", "e023f90e": "getCity(uint16)", +"e0240783": "checkSignStatus(uint256)", "e02426c1": "getSignatureHash(bytes4,uint256)", "e024ec5a": "getFmmsDetail(bytes32)", +"e025494c": "setStream(address)", "e0256835": "balancesCrowd(address)", "e02584bf": "listPairForReserve(address,address,bool,bool,bool)", "e025a666": "rewardPercentageDivisor()", +"e025d1d4": "_circle()", +"e026049c": "renounceGovernor()", +"e026c4af": "s(address)", "e027034d": "isWithinIEO()", +"e027c61f": "lastDisburseTime()", "e028222f": "CreateABet(address,uint256)", +"e0287b3e": "MIN_DIVIDENDS_DUR_TIME(uint256)", "e028ff3b": "lotteryGiveHuntMinimalNumber()", +"e029892f": "forceSellStables()", "e0299621": "GBIToken(uint256,string,string)", +"e029a285": "hxbRatio()", +"e029e563": "rageQuit(address[])", +"e02a2ee5": "loadPresalePurchases(address)", +"e02a81b4": "_convertToLP(address,address,uint256)", +"e02ae075": "leave(uint256,uint256)", "e02b8b29": "HardcapToken()", +"e02b99ff": "exchangeRate_()", "e02ba030": "excess_token()", "e02bc1c6": "bidDeposit(bytes32)", "e02bcd3e": "getLendTokenBalance()", @@ -128395,91 +235023,167 @@ "e02c7e1f": "timelockAllocationAddress(address,uint32)", "e02c85a4": "_checklottery(uint32,uint32)", "e02cec51": "refund(address[])", +"e02d077c": "changeNick(string)", +"e02d08c2": "InPoolProp()", "e02d1c0e": "tradeStarttime(uint256)", "e02d306f": "getUNTSQM()", +"e02d982d": "fnWithForLoop(uint256)", "e02df495": "MAX_ETHER_24H()", +"e02dff39": "explorationResults(uint256,uint256,uint16[10],uint8[10],uint8[10][10])", +"e02e08fd": "testMethodInputsBytes(bytes1,bytes16,bytes32,bytes)", +"e02ea484": "thirdParty()", "e02f8d33": "PRICE_STAGE_THREE()", "e02f9027": "iTime()", "e02fab06": "anubisToken()", +"e02fda00": "CreateNewSkin(uint256,address)", +"e02feb92": "playerTimeout()", "e0300fc4": "unregisterFor(address,bytes32,address,uint256,uint256,uint256)", +"e03022fb": "lastMintedNFTId()", "e0303a2e": "getFirstTwoOutputs(bytes)", "e0304542": "oddEven(uint8)", +"e0304590": "establishEarned(address)", +"e03047b7": "bondDepletionFloor()", "e0307e94": "gcsp(uint256)", +"e0309a70": "retroCatchUp()", "e030bbd5": "tokenToPointByMetaMask(uint256,uint256)", "e030dfb9": "emergency(bytes32,bytes1)", +"e031535b": "voteStart()", +"e0316f9c": "validatorCanRunning(uint256)", "e03179b4": "LogContribution(uint256,uint256)", +"e031d453": "rVolDailyRecent(address,address)", "e031d6f0": "isICOFinished()", "e0328c5f": "setRecovery()", "e0328c80": "hasRedeemed(address,address,uint256)", +"e032c5e2": "getComputerForcastCost()", +"e032e917": "transferCurrentAnimalsLogic(address)", "e033192c": "gettransferableStartTime()", "e03335b4": "_calculatePricePerPixel(uint256)", +"e03341e1": "setOneDay(uint256)", "e033f73c": "executeApplication(address)", "e0340a05": "Maya_Preferred()", +"e0348cb0": "Deliver(address,address,uint256)", +"e034f3dc": "loansById(uint256)", +"e034f67a": "shark()", +"e03535be": "SecretKey_Pre()", +"e0359131": "claimTokensFromTeacher()", +"e035aae3": "activatePurchase(uint256)", "e035e1ac": "thirdBonusEnds()", +"e0360ec3": "update_mint_arg(uint256)", +"e0362356": "Set_Factory_Lib(address)", "e03652c2": "isTransactionPending()", "e0376e74": "LOG_EmergencyWithdrawalSucceeded(address,uint256)", "e037a71c": "withdrawLimit(address,uint8)", "e03827d2": "left70(uint256)", +"e038347b": "balancesUSD(address)", +"e038454b": "SNMMasterchain(address)", +"e0387019": "stakeBurn()", "e0389a47": "removeAccountMilestone(address)", "e038c75a": "circulating_supply()", "e0391b6f": "trackable_dislikes(address)", +"e0397a94": "setArtistsControlAddress(uint256,address)", "e03992fd": "nextForkUrl()", "e039967c": "migrateTransfer(address,address,uint256,uint256)", "e039e4a1": "getOwner(uint8,uint8)", "e039f224": "isFork()", +"e03aefc2": "checkRegistry(address)", +"e03b1c45": "strategyNo2(uint256)", "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)", +"e03cf71e": "amore1()", +"e03d852a": "minimumSwap()", "e03d890b": "_addTokenToAllTokensEnumeration(uint256)", "e03e09a8": "_createAuction(address,address,uint256,uint256,uint256)", +"e03e22cf": "getNumAvailableWithdrawalSlots()", "e03ec01d": "getTargetWallet(address)", +"e03f0bed": "changeYZYVault(address)", "e0401918": "SMRToken()", +"e0401c7d": "adminsLength()", +"e0402c21": "allowModifyParameters()", "e0402d26": "validDoHash(bytes32)", "e04093d6": "updateOracleWithENS()", +"e0409987": "finishIco(address,address,address,address)", "e040c164": "createT513(uint256,uint256,address)", "e040f3e1": "_humanSender(address)", +"e04110e7": "priorityTime()", "e0412a54": "setBonusRound2(uint256)", "e0429b6c": "ShinySquirrels()", +"e0429d09": "lastRewardClaimed(address)", "e042ad58": "operationWallet()", +"e0433b4b": "batchAddWhiteListAddress(uint256,address[])", +"e043dac3": "endActiveFarmingSeason(address)", +"e043f56f": "sBTC()", "e0443e92": "LogCreate(address,address,uint256,uint256)", "e0446273": "messageIsEmpty(string)", "e044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", "e044c47f": "playerRollDice()", +"e044f9a9": "addToken(address,string,uint128,uint120)", "e0453376": "hasFourYearWithdraw()", "e0457049": "trustedInput()", "e0457884": "betResolution(uint8,uint8,uint8,bool)", +"e045a9a5": "BELTAddress()", +"e045e41a": "add(uint256,uint56,address,bool)", "e0462547": "setEndPreSale(uint256)", "e0462d0a": "coreTeamMemberOne()", +"e0465cd1": "accMBCOREPerShare()", +"e0468931": "updateVictimContractAddress(address,address)", "e046c4dc": "Delete()", "e046f06f": "deathData_a1()", "e0470e02": "matureDragon(uint256)", +"e0470fd9": "withdrawPrizePool()", +"e0471753": "approve_728(address,uint256)", "e0472e36": "swapProposal(uint256)", "e0475e27": "holderMarketingTokens()", +"e048507a": "changePriceForChangingName(uint256)", +"e048757b": "validateDonationCampaign(address,address,address,string)", "e048d0fc": "voteCancelCurrent()", +"e048e292": "LogUserDeleted(address,bytes32)", +"e049162c": "changeEmissionBP(uint256)", +"e0493f8c": "claimBurnFee()", "e0495a64": "getNormalBuyers()", +"e0495f0c": "kassiahotelsScalingFactor()", +"e0498a55": "unFrozenFunds(address,bool)", "e04a1942": "test_fourValidEqUint()", "e04a2525": "NoahDividend(address)", +"e04a42aa": "getPassiveIncomeStatus(uint256)", "e04a8c08": "Sold()", +"e04a9060": "reInit(address,address,address,address)", "e04ac09e": "BountyIssued(uint256)", +"e04bfd81": "lpErc()", "e04c130b": "token_transferFrom(address,address,address,uint256)", "e04c1830": "findNextHour(uint256,bytes2)", +"e04cab8b": "ComisionPayEvent(address,uint256,uint256)", +"e04cb538": "TokenSold(uint256,uint256,uint256,address,address,string,string)", +"e04cbbd1": "getBunnyInfo(uint32)", "e04cd07c": "BOLTH(address,address[],address)", "e04d5105": "calculateSeedBuySimple(uint256)", +"e04ecd85": "testOwnerCannotAddInvalidLibrary()", +"e04ed2ff": "m_totalDividends()", "e04f31e9": "forward(address,uint256,bytes,bool)", "e04fac0c": "aVideoCost()", "e0504910": "buyWithTokens(address)", +"e050639f": "l1l1users()", "e050674c": "_deliverWhitelistBonus(address)", +"e050e964": "getNumWithdrawalRequestsProcessed()", +"e051b7d1": "totalTokensByStage(uint256)", "e0522012": "getAdjustedPotAsFixedPointForGameId(uint256,bool)", "e052a587": "isNotExpired(uint256,uint256)", +"e052e82b": "amountDecimals()", +"e052eda3": "setDelayClaimBlock(uint256)", "e052f0c8": "setParams(string,string,string,string,uint256,address,uint256)", "e053178a": "XCPlugin()", +"e05329bf": "batchSettlePositions(bytes32[],bool[],address[])", +"e0533f5e": "runnerFee(uint256)", "e0539225": "preicoPrice()", "e054057d": "LogBuy(uint256,address,uint256)", "e0540d85": "CDreamingICO()", +"e05425e4": "SetPozTimer(uint16)", +"e0549f85": "_dividendContract()", "e054c029": "changejp2(address)", +"e0556445": "_feedivisor()", "e055bba4": "turnId()", "e056989a": "OfferUpdated(uint256,bytes,uint256,address)", "e056c1eb": "isGlobalPause()", @@ -128488,161 +235192,287 @@ "e0585ce8": "BetcoinICO()", "e058cc59": "setMemeTemplate(string)", "e0591ddc": "gizerItemsContract()", +"e059ac2b": "layerNumber()", "e059c868": "private_UpdateGameBarLimit(uint256,uint256)", +"e059d807": "nextRollupId()", +"e05a0c77": "getPoolStats(address,uint256)", "e05a48cd": "unregisterVendor(address,address)", +"e05a66e0": "encodeEvent(uint8,uint256)", +"e05ada9a": "doSushiswapV1Sell(address,uint256,uint256)", +"e05b0cc2": "RedeemMax(bytes32)", "e05b4c5f": "GetReferredAt(uint256)", "e05b5456": "ChenToken(address,address)", +"e05ba89a": "presaleTokenBP()", "e05bac82": "amountReceivedFromExchange(uint256)", +"e05bb5a6": "getieoCoinInfoByDex(address)", +"e05c50a3": "get_sales(uint256)", "e05c5a83": "sellerOf(uint256)", "e05cb6f4": "Mitrav()", +"e05cf918": "tokenReward10()", +"e05d53fc": "token1UNI()", "e05d769e": "expirationSeconds()", +"e05d76f2": "_grant(bytes4,address)", "e05e3028": "getCommunityManagement(uint256)", "e05e91e0": "returnUint64(uint64)", "e05ea744": "frost()", "e05ee7a4": "RATEotu()", +"e05f13ba": "getLiquidityStatus(address)", "e05f149e": "getTotalRuns()", +"e05f64c7": "miningTokens(uint256)", "e05f7d67": "setPCoinContractAddress(address,address)", "e05fad90": "decode(bytes,uint256,uint256)", +"e05fd0ce": "clearLoanOwner(address,bytes32)", "e0607290": "confirmChangeOracle()", "e06174e4": "settings()", "e0619859": "At(uint256,bytes32)", "e061ddca": "getSensorAddress()", +"e0622b27": "upgrade(address,uint256)", "e0623632": "UNSOLD_ADDRESS()", +"e0629570": "validateBalance()", "e062aff8": "startTimeNumber()", "e06309bb": "ValueOwners()", "e06375c8": "_fDist()", "e063a439": "_computeFee(uint128)", +"e0641680": "privateVestingEndTimestamp()", "e06452d0": "Completed()", +"e064648a": "setSellFee(uint16)", "e064bc82": "setFoundersTokensWalletSlave(address)", "e064c1ec": "denyChanges()", "e065029e": "PokemonPow()", "e0655fe5": "changeBuyFee(uint256)", "e06572ec": "sell(address,uint256[],uint256[],bool)", "e065914c": "isPersonalLock(address)", +"e065c793": "progressStakeWithProof(bytes32,bytes,uint256,uint256)", +"e065deb2": "setLimitToken(address,uint256)", "e065e388": "NewBOP(address)", +"e066ca13": "baseStrategyVersion()", +"e06743cb": "OfferGameCreated(address,uint8,uint256,uint8)", "e067ea46": "Etherep(address,uint256,address,uint256)", "e067f631": "intervalUpdate()", +"e0681e36": "updatePrivilege(string)", +"e0683095": "uniqueNames(bytes32)", "e06868e2": "numberOfBet()", +"e068cd29": "earnVotes(uint256,address,address,address)", +"e068e8a1": "setHorseDataAddr(address)", "e06902fa": "ito()", +"e0695ddd": "testMethodInputsInt(int8,int16,int32,int256)", "e06a09ec": "calculateInterestIndex(uint256,uint256,uint256,uint256)", "e06a60ff": "HumanityCard()", "e06aa145": "TokenBurned(address,uint256,uint256,uint256)", "e06abd36": "updateMAX_AMOUNT(uint256,uint256)", "e06af204": "BetlyCoin()", +"e06b3da9": "erc20TokenContract(bytes32)", +"e06b3f1e": "registerDDR(address,address,address,string,string,uint256,uint256,uint256)", "e06b5837": "getCanSellUnit(address,address,uint256)", "e06b7e39": "getInitOrInput()", "e06b850c": "testIntParserTwoDecimal()", +"e06b8bf6": "refreshTopSuggestions(bytes32,uint256)", +"e06bacb7": "pausedDeposit()", "e06c0fd2": "SatoshiToken()", +"e06c55e1": "_getVoteId(uint256,uint256)", "e06c5808": "burnFromAddress(uint256)", +"e06d57d2": "_decode_sol_bytes29(uint256,bytes)", +"e06d86c0": "pausedUser(address)", "e06d8de9": "acquisitionsLockEndingAt()", +"e06db5d8": "certificateStocks(uint256,address)", "e06e0051": "withdrowETH()", +"e06e0688": "EligibleEmp(uint256)", "e06e0e22": "postRelayedCall(bytes,bool,uint256,bytes32)", "e06e0e43": "overLimit()", "e06e3873": "encrypt(uint256[])", "e06e6b20": "Like(bytes32,bytes32,uint256)", "e06e82b2": "teamNIMFAAddress()", +"e06e8dbd": "findFreeX6Referrer(address,uint8)", +"e06e9c65": "setBondOracle(address)", "e06e9d22": "addCustomerTokenAmount(address,uint256)", "e06ec0bb": "isListing()", +"e06ec422": "isInBiddingPhase()", +"e06f1c99": "KeyValueMappingTokenID(uint256,string)", "e06f3d38": "ownerA()", "e06fa13d": "ETCL()", "e06fa68e": "updateAfter(uint256)", "e06fc6d4": "mainsaleRemaining()", "e0709589": "blink_block()", +"e070af52": "ShowlastBill(uint256)", +"e070f94f": "PER_BLOCK()", +"e0710ef5": "BuyTicket(uint48)", "e0715a86": "unlocksCount()", "e071681d": "setManyAccountsVerified(address[])", "e071c0ca": "transferVaultOwnership(address)", +"e072533f": "mainsaleCap()", "e072830c": "FUNDING_ETH_HARD_CAP()", "e0728801": "ANV()", +"e0728bae": "boxWithdrawableTmv(uint256)", "e072bd10": "getPlayerInventory(address)", +"e073413a": "processRewards(uint256,address,uint256,uint256)", +"e0735ed5": "revokeProviderPermission(address)", +"e0738a4e": "executeWithdraw(uint256,uint256)", "e073ef69": "pubKeyToBitcoinAddress(bytes,bool)", "e0741187": "createBreedingAuction(uint256,uint256,uint256,uint256)", "e074278d": "setOwnerAddr(address)", +"e0744fb6": "newIlk(bytes,bytes,bytes32,address,address,address)", +"e0745596": "ChangeRate(address,uint256,uint256)", "e074b027": "hasExecuted(uint256)", "e074bb47": "removePermission(address)", +"e074c0b0": "setThread(string)", "e074ee55": "getPeriodsToPay(bytes32,address,uint256)", +"e074f6bd": "getCrossMultiplier(uint256,uint256)", +"e0752aaa": "successList(address)", "e0755792": "Permission(bytes32,address[],bytes4[])", "e0755b35": "WePOW()", +"e0758c9d": "kodaAddress()", +"e075c2a6": "setShouldFailAssertValidStorageParams(bool)", +"e076471d": "bet_token()", +"e076913c": "highest(uint256)", "e076c0ae": "queryNow()", +"e0771cdc": "changeMinimumDepositETHAmount(uint256)", "e0772f6a": "CROWDSALE_TOKEN_IN_WEI()", "e0775be1": "create(address,address,address,address,address,address,address)", "e0778211": "_releasableAmount(address,uint256)", "e077ca97": "fx()", +"e077e723": "masterBeltAddress()", +"e07872b7": "buyCheck(address,uint256)", "e078c549": "getNumberOfTokensToIssue(uint256)", +"e0794af0": "editPayment(uint256,uint256)", "e07959bd": "setGainsRate(uint256)", +"e0799565": "updateTrader(uint256,address,address,bool,bool)", +"e0799620": "unregisterFromIssuanceModule(address)", +"e079cee9": "current_min_signatures()", +"e079db4f": "setChildReferrerPercentage(uint256)", "e079e334": "getNewCoinFee()", "e079e7e5": "addStock(string,uint256,uint256,uint256,uint8)", +"e07a0c30": "setPublisherAffiliate(address,uint256)", "e07a2671": "migrationSetPlayer(bytes32,uint256,bytes32,address,uint256,uint256,uint256)", "e07a31c7": "getWinningCount(uint256,uint256)", +"e07a439f": "brewToWbnbRoute(uint256)", "e07a5d29": "CLRCoin()", +"e07b1c38": "setBuoy(address)", +"e07b302e": "init_contract(address)", +"e07b86ee": "querySelfBonus(address)", +"e07b93c7": "updateUtpduValue(uint256)", "e07be247": "createSellENS(string,uint256)", "e07c80fb": "getKindAddress()", "e07ccdeb": "totalPartnerWithdrawSupply()", "e07cd936": "ArtcoinPlaceholder(address,address)", +"e07d39bd": "updateLCstate(bytes32,uint256[6],bytes32,string,string)", "e07d4f6b": "saveCarDataTransaction(address,address)", +"e07dbfbd": "eraIsOpen(uint256)", +"e07df5b4": "flashFee()", +"e07dfcf7": "pack3userList(address)", "e07f0b66": "SendMessage(uint256,string,address)", "e07f0f13": "ZhangPeiPei(uint256,string,uint8,string)", "e07f0f5e": "transferToken(address[],uint256[])", "e07f3dd6": "go(uint8)", "e07fa3c1": "withdrawFund()", +"e07fe07f": "getBurningInform(uint256)", "e080241c": "setNFTDetached(uint256)", +"e0803779": "changeROI(uint256)", +"e08098ee": "transferComp(address,uint256,uint256)", "e080b60c": "apiCallsContractAddress()", "e0812c75": "migrateInvestorFromHost(address,address)", "e0813e25": "getRandomInt(uint256)", "e0813e5e": "updateTokensPerEthOnce(uint256)", +"e08146cf": "viewUserchilds(address)", "e08155dd": "ICO_PERCENTAGE_4()", "e0815ca9": "findNextMinute(uint256,bytes2)", "e0818669": "lps()", "e081b569": "DiceOnline()", "e081fdfe": "availableBalanceOf(uint256,uint256)", +"e0821349": "getAllExchangeAddresses()", +"e0822db7": "getGrgVault()", "e082707c": "_uintToString(uint256)", "e0832cf6": "getWinCount(address)", "e0834ea4": "WatchBalanceInEther()", "e083a1b5": "_createEstate(int256[],int256[],address,string)", +"e083b8ab": "higherStake(uint256)", "e083d4c8": "dividendBalanceOf(address)", +"e0849bfd": "updateUnderlyingPrice(address)", "e084a819": "prepareCrowdsale()", "e08503ec": "calculateNextPrice(uint256)", "e085448f": "FIRST_USER_CUT()", "e085942a": "getSubjectMattersSize()", +"e0859aa3": "Sold(bytes6,bytes6,uint32,uint32,int64,uint256)", "e085c539": "getPlayerScore(address)", "e085f82b": "rejectCertificate(address)", "e086141d": "Assigned(address,uint256)", +"e08616c9": "_getNewNominalICRFromTroveChange(uint256,uint256,uint256,bool,uint256,bool)", "e0862fd7": "getNumBadBets(uint256)", +"e086cf36": "BETHTokenAddress()", +"e086da6c": "CollectibleCreated(address,uint256,bytes32,bool)", "e086e5ec": "withdrawETH()", +"e08737ac": "Withdraw(address,uint256,uint256,uint256,uint256)", +"e08738da": "getGlobalConstraintParameters(address,address)", "e0873c06": "reissueAsset(bytes32,uint256)", "e08761f5": "dtValidateCitySnapshot(address,uint256)", +"e0876aa8": "getFile(string)", "e087cd55": "withdrawIncentives()", +"e08805bb": "freezeToken(address,address,uint256)", "e0882af8": "airDrop(address,address[],uint256[])", "e0886f90": "at(uint256)", "e088747b": "withdraw(address,uint256,string)", +"e08895ba": "ownerSC()", "e088a96b": "claimerUnset()", +"e0893744": "_lastFounderUnlock()", +"e089aa5a": "closeFuturesPosition(bytes32,bool)", +"e08a01b4": "calculateBondInterest(uint256)", "e08a5f9e": "startPresaleDate()", +"e08a96cd": "maxAmountOfBets()", "e08ac014": "unlockPeriodNum()", +"e08b0197": "applyForBuyoutETH(uint256)", +"e08b0c0b": "NewLowestAsk(uint256,address)", +"e08b16e6": "removeTeamContract(address)", +"e08b3371": "CPTContractAddress()", +"e08b36be": "play(uint8,bool)", +"e08b4624": "getSwapTokenBalance(uint256)", "e08b63ad": "getAddTokenNonce()", "e08bc3fe": "parseInt(bytes)", +"e08c694c": "getClientRecordByIndex(uint256)", +"e08cd34b": "onEndTx(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "e08d28d3": "maxInvestmentICO()", +"e08d4d68": "MAX_TICKET_PER_ADDRESS()", "e08d8497": "ICO_LEVEL_2()", "e08e433a": "transferTime()", +"e08ecead": "NLFunds(uint256)", "e08ed5f9": "withdrawBid(int256,int256,int256)", +"e08ef142": "setHarvestDuration(uint256)", +"e08f0797": "getFireScByLevel(uint256)", "e090318c": "setFacts()", +"e090bea3": "removeOddTokens()", "e090ebab": "VUO()", "e0911183": "devTeamAutoBuy(uint256,uint256)", +"e091a8bf": "tokenFromPlow(uint256)", +"e091bbf5": "_burnSynths(address,address,uint256,uint256,uint256)", "e091de56": "MDA()", "e091f453": "setDividend(uint256)", +"e09286de": "getInterestRateByDmmTokenId(uint256)", "e0929b95": "claimFreeFirstCard(address)", "e092e85f": "getStakedBalanceUnOrdered(uint256,bytes32)", +"e0932d58": "SOGNO1()", +"e0934e4b": "sellBurnRate()", +"e09363fb": "beyondExchange()", "e093a157": "abs(uint256,uint256)", "e09413ba": "totalDistributedAirdrop()", +"e0945a2c": "Staked(address,address)", "e0945a80": "wbcoin()", "e0950ddf": "getBet(uint256,address)", +"e095c306": "autoAmount()", "e095f814": "etherToToken(uint256)", +"e0961f17": "contributedAmount(address)", "e0963ced": "LinkEyeStandardToken(uint256,string,uint8,string)", "e09678fd": "setIcoContract(address)", +"e096a4f8": "init(string,string,uint8,address,address,uint256,uint256,uint256,uint256,bytes32,bool,bool)", "e097e7b9": "sendTokensBack()", +"e097ec0a": "getAssetModelID(address)", "e098161b": "getRareCoinAddress()", "e09874c0": "setPlayConfigs(uint256,uint256,uint256)", "e0987873": "BurnedAllRemainedTokens()", "e098c76d": "optionPoolTotalMax()", +"e098d0bc": "rewardOfEachUser(address)", +"e09a8c4e": "mintBCByCardName(address,string)", +"e09ab428": "withdraws(bytes32)", "e09adc70": "ethToTokenRate()", +"e09b4ad5": "stu(string)", +"e09bfef7": "mintCat(uint256,address,uint256)", "e09ca60c": "secureApprove(bytes32,uint256)", "e09ceada": "_newAuction(uint256,uint256,uint256)", "e09cffcf": "SingularityTest18()", @@ -128650,157 +235480,296 @@ "e09dbfa4": "checkPatternExistance(bytes32)", "e09dd024": "FNCTToken()", "e09ded57": "lengthOfCommonPrefix3232(bytes32,bytes32)", +"e09e251d": "createContractItem(string,bytes32,address)", +"e09e630c": "getRuleManager(string)", "e09e9490": "releasePendingTransfer()", "e09ea701": "BaseMonoretoCrowdsale(uint256,uint256,uint256)", "e09ee57f": "feePercentageMax()", "e09ef83e": "promoCutieCreatedCount()", "e09f0020": "subCreditScore(uint256,string)", +"e09f2206": "maxMine()", "e09f310a": "get_iconiq_presale_open(address)", "e09f6f49": "successAtBlock()", "e0a09c1f": "Crowdsale(address,address)", +"e0a0b586": "transfer_ownership_deadline()", "e0a0f50d": "setSlaveWalletPercent(uint256)", +"e0a10103": "cumulativeblockToReward(uint256)", +"e0a18fcf": "bondGain(uint256,uint16)", "e0a1a292": "addressAdvisors()", "e0a1be53": "updateTargetedMoneyReached()", "e0a1ca6e": "winningChance()", "e0a1fdad": "unset(bytes12)", "e0a21739": "setBlackFundsWallet(address)", +"e0a2506b": "commissionRateMap(address)", +"e0a25f37": "VipAgreementSign(uint256,address,uint256,uint256,uint256)", "e0a27b2c": "withdrawWinnings(uint256,uint256)", "e0a29e23": "owner_freeze_start()", +"e0a2b037": "setTeamAddressPool(uint256,address)", +"e0a2b5a0": "initialize(address,address,string,string,uint8,address)", +"e0a2ff54": "streamBalance(address)", +"e0a345fd": "withdrawFromL2(uint256,address,address,uint256)", "e0a3bff7": "RollCount()", "e0a3e7ec": "computeDeferBlock()", +"e0a42035": "ADMIN_REWARD_AMOUNT()", +"e0a46791": "setPrice1(uint256,uint256)", "e0a49f14": "setMatchOutcome(uint256,string)", "e0a4aacb": "ExacoreContract(uint256,string,string)", +"e0a4c98b": "changeBonusEndBlock(uint256)", "e0a53397": "createSingle(uint256)", "e0a550fc": "closeMainSaleICO()", +"e0a5c949": "ERC1155_RECEIVED()", "e0a60ea3": "BITTOToken()", "e0a62339": "getSha256_UInt(uint256,uint256)", "e0a668b4": "setVesting(address,uint256,uint256)", "e0a70811": "restart(bytes20,bytes)", "e0a73a93": "premium()", "e0a7527d": "updateCABoxToken(address)", +"e0a79b16": "totalStaking(address)", +"e0a7a22f": "executeTransaction(address,uint256,string,bytes,uint256,address,uint256)", "e0a7b2c3": "startChallenge()", "e0a802ba": "scanInputs(bytes,uint256,uint256)", "e0a827c6": "RxI()", "e0a8299f": "galleryTwo()", "e0a82ea8": "setMinBetPerRoll(uint256)", "e0a8aa72": "channelOpened(uint64)", +"e0a8f09a": "guess(bool)", "e0a8f6f5": "cancelProposal(uint256)", +"e0a91109": "getPlatforms(uint256,uint256,uint256,uint256,uint256,uint256)", +"e0aa2797": "isWrapper(address)", "e0aa5654": "getCountReadyPlayerByTrackId(bytes32)", +"e0aa57a5": "resume_S()", +"e0aac9ac": "chargeTitan(uint256)", +"e0ab0772": "addLiquidity(uint256,uint256,uint256,uint256,address)", +"e0ab1039": "GetMessageSender()", +"e0ab7649": "pairWithdraw(address,uint256)", +"e0abca0b": "priceFeedAddress()", "e0abdf66": "setBlockTimestamp(uint256)", +"e0ac028d": "rewardBalanceOf(address,address)", "e0ac2b72": "HaHaChainToken()", "e0ac50cb": "isTreasureBox(address)", "e0ac61bb": "changeOwnerSharePerThousandForMating(uint256)", "e0acac7f": "withdrawSum()", +"e0ad121a": "getPrice(uint16)", "e0ad411d": "assets(bytes)", "e0ae751f": "setAuthorizedContract(string,address,bool)", +"e0ae93c1": "getRequestUintVars(uint256,bytes32)", "e0ae96e9": "din()", +"e0aed932": "ApproveMintDelegate(address)", +"e0aef7db": "claimed_bonus()", +"e0af073f": "brine()", +"e0af3616": "_WETH()", +"e0b00695": "pendingETH(uint256,address)", +"e0b04521": "GetHoneyFromJar()", +"e0b118c0": "userControl(address,uint256)", +"e0b13f62": "Pool(address)", +"e0b1c300": "depositV2(address,uint256)", "e0b1cccb": "updateBalance(address,uint256)", "e0b1cecd": "DataToken()", +"e0b22c4c": "drainToken(address)", +"e0b23d3f": "kimchiMan(address)", +"e0b28190": "info_ForSaleInfoByIndex(uint256)", "e0b30178": "OVCLockAllocation(uint256,address,address,address)", "e0b3198c": "serverPort()", "e0b34ef1": "_setERC820compatibility(bool)", +"e0b3944a": "setIssueAuthAddr(address)", "e0b3c49c": "acceptTermsAndJoinDXF()", "e0b3cc90": "priceOf(uint32)", +"e0b3f08b": "coininn()", +"e0b4153e": "priceToOpenCancel(address,uint256)", "e0b438ef": "removeNameByOwner(string)", "e0b45487": "_setValidator(address)", +"e0b47077": "iiiiCall(bool,uint256,uint256,bytes)", "e0b490f7": "getAccountId(address)", "e0b4cf0a": "setMinMaxBet(uint256,uint256)", +"e0b6a364": "submitTransaction(address,address,uint256,uint256,string)", +"e0b6adbc": "getNumLoans(address)", +"e0b6bb67": "lockMint()", "e0b6cddd": "LLV_311_EDIT_2()", +"e0b75317": "addResource(address,uint256)", "e0b78225": "RemoveTrustedContractAddress(address,address)", +"e0b7e33a": "transferToEth(uint256)", +"e0b7ff21": "setUnstakeEpochs(uint256)", +"e0b80c76": "mOracleArray(uint256)", +"e0b8594a": "zWithdrawOwnerBalance()", "e0b86c53": "decreaseLock(uint256,uint256,address)", +"e0b91e3d": "ethRateUp(uint256)", +"e0b95720": "outAmount()", "e0b999a1": "getAmount(address,uint256)", "e0b9e83d": "update(address,address,address,uint256,uint256,address)", +"e0bab4c4": "DAI()", "e0bab523": "for_rewards()", +"e0bb2a3f": "nodeinc_(uint256)", "e0bb933b": "getDragon(uint256)", "e0bc6c44": "claimInsurance(bytes32)", "e0bc6dea": "removeTransferableAddress(address)", +"e0bcf13a": "totalHardDeposit()", "e0bd3015": "getClaimableBalance()", "e0bd53be": "sellTokensForZec(string,address,uint256,uint256)", "e0bd7d15": "addContributor(address,uint256)", +"e0be4aa3": "Price(string)", +"e0be8d89": "quitB()", +"e0becc25": "calculateUserReserveCollateralETH(address,address)", "e0bede59": "firstPeriodSupply()", +"e0bf7147": "napV2()", "e0bfa1f7": "removeUtilityHolder(address)", +"e0bfc46d": "set_USKIContract(address)", "e0bfe9ad": "MAX_TOKENS_RESERVE()", "e0c012ff": "modifyairdrop(uint256,uint256)", +"e0c01d6e": "Cat17(address,uint256)", +"e0c09c7d": "setDirectTokenMap(address,bool)", +"e0c0fc02": "_calculateDisengageLPQuantity()", "e0c104ad": "DONC()", +"e0c18f70": "locked_stake_time_for_max_multiplier()", +"e0c22cba": "hasMinRebalanceBalance(address)", "e0c2bc77": "CDEos(uint256,string,uint8,string)", "e0c2dcbd": "last_win_wei()", +"e0c34767": "_cardBought(uint256,address)", +"e0c374d5": "userValueFromSpending(address,address)", +"e0c3e1e7": "transferWithtLockUser(address,uint256,uint256[],uint256[])", +"e0c3ebcf": "updateMarginalSettings(address[],uint8,uint8,uint64,uint64)", "e0c4cea8": "GrowToken()", +"e0c4f12d": "treasuryFund()", +"e0c5338f": "transferfeth(address)", +"e0c570ba": "MIN_STAKE_DURATION()", "e0c5f3a0": "add256(uint256,uint256)", "e0c6046c": "donateToProject(uint16)", "e0c6190d": "checkTime()", +"e0c62269": "burnForERC20(address,uint32)", "e0c63902": "Ok()", +"e0c65339": "removeNodeFromExceptions(bytes32,uint256)", "e0c67b9c": "ROKToken()", +"e0c67c22": "balancer_to_balancer(address,address,uint256,uint256)", "e0c68158": "changeIssuanceAddress(address)", "e0c68db0": "shr(uint32,uint8)", +"e0c6c19d": "unstakeAndClaimRewards(uint256)", "e0c6d1ed": "migrateForInvestor()", "e0c78337": "XITOToken(address)", +"e0c78af1": "ProjectCreated(address,uint256,uint256,address)", "e0c7c117": "Randao()", "e0c82651": "RWToken()", +"e0c891b1": "setStakingPool(address,uint256)", +"e0c89dbb": "submit(string,uint256,address,uint256,uint256)", +"e0c89e9d": "setBatchCreateDrawingsAddress(address)", +"e0c931df": "mythicCreated(uint16)", +"e0ca075e": "setCrowdsaleAddr(address)", +"e0cabe33": "FPSstockinput(uint256)", +"e0cad01b": "approve_470(address,uint256)", +"e0cada2e": "EtherRefunded(address,uint256)", +"e0cb151f": "royalDecks()", +"e0cb3644": "airdrop_token_wallet()", "e0cb3aa0": "buyWithLimit(uint256,uint256)", +"e0cb6a9a": "getFixedArray()", +"e0cb9ac0": "approve_573(address,uint256)", "e0cbbde7": "makeCode(uint256,string)", "e0cbc2cb": "changeInGameAmount(uint256)", "e0cbf845": "testAddLocked()", +"e0cc0d68": "approveVault(address)", +"e0cc13e1": "stakedTime()", +"e0cc26a2": "getCommissionRate(address)", "e0cc4e1b": "LifCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "e0cd34f6": "getBlockBuildFee(uint256)", "e0cd6eff": "board_size()", "e0ce0b79": "processSeason(uint32)", "e0ce72cb": "_fConfig()", +"e0ce8f99": "getLuckCodePool()", "e0ceb25b": "fairsaleProtection()", "e0cec919": "setDailySupply(uint256)", +"e0ced0e1": "allBets(uint256)", "e0cee23f": "SuccessfullyTransferedFromCompanyInventory(address,uint256,bytes32)", "e0cf1316": "_transferPlayer(address,address,uint256)", "e0cf17a5": "totalStoredDDT()", "e0cf1e4c": "removeMembers(bytes32,address[])", +"e0cf4542": "exchangesNum()", "e0cf715d": "EtherTrend()", +"e0cf7285": "totalPhantom()", "e0cf72e1": "ERC20Token(uint256,string,string)", "e0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", "e0cfde22": "setRestrictedParticipationCap(address[],uint256)", +"e0cfe6ba": "avgHodl()", +"e0d015d8": "claimNyanVersus()", +"e0d050c6": "bonusEndRound()", "e0d05c51": "MemoireClement()", +"e0d152af": "miners(uint256)", +"e0d1a378": "cbc()", "e0d1ba52": "Rate_Eth()", +"e0d1caff": "needChangeTime()", +"e0d20f73": "solve(bytes4)", "e0d2771d": "MINIMUMINVESTMENTPRESALE()", "e0d29d38": "STARTING_POOH()", +"e0d313ab": "airdropAddr()", "e0d3558e": "GetBoosterData(uint256)", "e0d370ac": "site()", +"e0d3b9a3": "end(address[])", "e0d4ea37": "getSeed(uint256)", "e0d4ea7e": "addDestructionProposal(string)", +"e0d53c55": "WithDraw(address)", "e0d54970": "getInstructions()", "e0d5af94": "ownerWithdrawAll()", +"e0d5b10d": "removeWithoutBurn(address)", "e0d669d8": "tradesLock(address)", +"e0d68737": "log2(int256)", "e0d6d530": "setContracts()", "e0d751da": "returnBets()", "e0d77ff6": "hasBeenBooted(uint32)", "e0d79d38": "addcertifieddata(string,string,string)", +"e0d7cb6f": "happy()", +"e0d84a7d": "_wallet_team3()", "e0d872b7": "getSideServices()", +"e0d8a5bc": "findFreeParentInDown(uint256,uint256)", +"e0d8b65d": "perUserLimit()", +"e0d8bdb8": "iCream()", +"e0d8fa90": "BurnForTransaction(address,uint256,string,uint256)", +"e0d90a4b": "forAgentRate()", +"e0d945bf": "setTokens(address,address[],uint256[],uint256[])", "e0d9bc7b": "sybmol()", "e0da260c": "widthdraw(uint256)", "e0da4abd": "getDefaultExchangeRate()", +"e0db1b91": "getPublicKeyById(uint256)", "e0db6781": "offerDraw(bytes32)", "e0db874d": "moneyBack(address)", "e0dba60f": "setController(address,bool)", "e0dbbea2": "search(uint256,bytes32)", +"e0dbbfb8": "changeCSTPriceCluster(uint256,uint256,uint256,uint256,uint256)", "e0dc892c": "GiftHasBeenSent()", "e0dcf2d8": "processInitialDistribution()", "e0dd31da": "MDCSToken(uint256,string,uint8,string)", +"e0dd580c": "isApplicable(address,bytes32,int64)", "e0dda563": "GetContractStagePreMoveIn()", "e0ddaa0e": "MAX_TOKEN_BUYIN()", +"e0de0bf5": "showOwnedJob()", +"e0de0c68": "calculateEarnings(address)", +"e0de16e5": "depositBNBRewards()", "e0dec0c0": "contractValue()", +"e0dee06e": "approve_193(address,uint256)", "e0df51bb": "test_oneValidAndInvalidEqAddress()", "e0df53b9": "LotteryRoundStarted(bytes32,bytes32,uint256,string)", "e0df5b6f": "setTokenURI(string)", +"e0df7216": "sale_active()", "e0dfd0a6": "GIFTCOIN()", +"e0dff5f9": "tokenFromCastings(uint256)", +"e0e01eb5": "transTimes()", "e0e04685": "setOldContract(address)", "e0e081d7": "marketStatus()", +"e0e0a95a": "divsPerSnail()", "e0e0e2d3": "random(uint8)", +"e0e0f5c7": "viewCustomer(int256)", +"e0e0fbb9": "lowerDeviationThreshold()", "e0e1104d": "tierWhitelist(uint256)", "e0e11a14": "newVowIdFlag(address,uint256,uint256)", "e0e1593c": "decayedPriceFrom(uint256,uint256)", +"e0e16394": "betToTaker(uint256)", "e0e16f91": "TestContract(address,uint256)", +"e0e189a0": "sweepTokenWithFee(address,uint256,address,uint256,address)", "e0e1a7f0": "testSHA3()", +"e0e1abb0": "deposit0(uint256)", +"e0e22518": "getOddValue(uint64,uint256)", "e0e267e5": "minimumWei()", "e0e29ac1": "SLMICO(address)", +"e0e2c1e6": "managerSetMinimum(uint256)", "e0e32504": "isDaySixtyChecked()", "e0e34e06": "getGlobalConstraintParameters(address,int256,address)", "e0e3671c": "checkOwner(address)", +"e0e39540": "pendingSwapShip(uint256,address)", "e0e3b9d7": "ImmutableShares()", "e0e3ba5a": "getLosesShare(address)", "e0e3feae": "skimALittleOffTheTop(uint256)", @@ -128808,10 +235777,17 @@ "e0e4704e": "RequestDetachmentOnPause(uint256)", "e0e4731a": "TokenGoalReached()", "e0e4c438": "sendInternally(address,uint256,uint256)", +"e0e5228d": "setWrapper(address,bool)", "e0e58009": "BookingPoC(address,address,uint256)", +"e0e5db7a": "Dividend(uint32,uint32)", "e0e5fffd": "preSale4()", +"e0e602a1": "getRCodeOffspringByAddress(address)", +"e0e6393d": "targetThreshold()", +"e0e66aef": "LogBet(bytes32,address,uint256)", +"e0e686e2": "swap(string,uint256,uint256,address)", "e0e69937": "setDefaultVestingParameters(uint256,uint256,uint256,uint256,bool)", "e0e6d6cb": "requireValidIndex(uint256,uint256)", +"e0e70cae": "getTerminationCancelDepositDetails(bytes32,uint256)", "e0e7127a": "getContractOwnerAddress()", "e0e722b7": "MAX_ALLOWED_STAGE_3()", "e0e81ccb": "getCurrentSchellingRoundID()", @@ -128820,8 +235796,13 @@ "e0e85fe8": "StatEventA(string,address)", "e0e8823c": "withdrawDai(uint256,address)", "e0e8a555": "KAL3Token()", +"e0e8ee09": "BasicCAP()", +"e0e90acf": "cast(address[],bytes[],address)", +"e0e9169b": "handleIsTaken(bytes16)", "e0e9b349": "getReportRegistrationFee()", "e0ea129e": "militaryToken()", +"e0ea4edd": "getMonths(bool)", +"e0eb2180": "recipientFor(address)", "e0eb3035": "registerAudits(bytes32[],bytes,bool)", "e0eb60b2": "initialSpinners(uint256)", "e0eb6613": "PresalePool(address,uint256[],uint256)", @@ -128829,36 +235810,61 @@ "e0ebd259": "discountValue()", "e0ebdbff": "getAuditRequestor(uint256)", "e0ec289a": "creditsExchanged()", +"e0ed34f5": "getSearchBatchBounds(uint64,uint256,uint256,uint256)", "e0ed78d1": "setRouletteRules(address)", +"e0ee036e": "rewardDelegatedStakeWeight()", +"e0ee43a2": "maxDistributedTokenAmount()", +"e0ee7251": "redeem(address,address,uint256,address,uint256,address)", "e0ee74e9": "changeActualQueue(address)", "e0ee94e9": "PocketCoin()", "e0eef0b9": "BOOKIE_POOL_COMMISSION()", +"e0ef97c8": "setTestResultB(address,uint256)", "e0efdaf9": "softCapTokensAmount()", +"e0f01612": "t1Stakes(address,address,uint256)", "e0f0497d": "currentTokenSaleId()", "e0f06352": "testIsContractAddress()", +"e0f0b56b": "investIn(uint256)", +"e0f0ea6f": "addSubmissionManually(address,string,string,string)", +"e0f1515b": "receiveRoot()", +"e0f1c9c5": "pancakeFactory()", +"e0f1f8eb": "setCollection(uint256,uint256,string,string)", "e0f20a65": "etherLock()", +"e0f2685c": "bcdc()", +"e0f2a2a9": "payoutTrader(address,uint16[])", "e0f31fae": "isDoneReporting(address)", "e0f32198": "runSweepStake()", "e0f3691d": "thisEther()", "e0f426fa": "numMCApplied()", "e0f47580": "withdrawCommisionToAddress(address,uint256)", "e0f4a1a2": "minimumPRETDEContributionInWei()", +"e0f4ea07": "request_APPLT_Price()", "e0f4ed01": "parcelEth()", "e0f50bac": "senderWithdrawal(uint256)", +"e0f56ff6": "SetIndex(uint256)", +"e0f584d3": "addi4()", "e0f609d4": "unsafeIsEncrypted()", +"e0f680e9": "updateCar(uint256,string,uint8,uint8)", +"e0f6a8e6": "withdrawCoinbaseFee(uint256)", "e0f6cc07": "isChain(string)", +"e0f6ef87": "productCount()", +"e0f6fb44": "ThingDestroyed(uint256)", "e0f74cde": "BONUS_TIMES_VALUES(uint256)", +"e0f75254": "getPackBuy(address,uint256)", "e0f76121": "GlobalCryptoShares()", "e0f771c9": "Bithumb(uint256,string,string)", "e0f7b44d": "PreTgeExperty()", +"e0f7f772": "div(bytes16,bytes16)", "e0f898e4": "totalTokenLossValue()", "e0f8c670": "getFirstPaymentAmount()", "e0f8da97": "sponsoredBonusToken()", "e0f9210b": "batchDistributeReward(address[],uint256[],uint256)", +"e0f9225a": "lastBetBlock(uint256)", +"e0fa8398": "balanceOfUNI()", "e0faf0a8": "getOnSaleIds()", "e0fb8459": "recevedEthFromExchange(address,uint256)", "e0fce922": "deliver(address,uint256,uint256)", "e0fd59bf": "disableAdminForever()", +"e0fd6e82": "setUserClaimVoteCA(address,uint256,uint256)", "e0fddf81": "setemployee(address,string,uint256)", "e0fdf336": "finalReserveTimeLock()", "e0fe01f4": "makePrediction(int8,string)", @@ -128866,50 +235872,93 @@ "e0fe42be": "existsPriceOnAssetPair(address,address)", "e0fe4a84": "updateStrategyCategory(bytes15,uint256)", "e0fe6d07": "SideBridge(uint256,address[])", +"e0fe7709": "settleChallenge(uint256,uint256)", +"e0fe7f5c": "stepTimeSale()", "e0fe9ccf": "WaltonTokenLocker()", +"e0febffa": "HEART_BEAT_START_TIME()", "e0ff5b8b": "getBook(uint256)", "e0ff5d2f": "setMaxRacers(uint8)", "e0ffa0da": "lastBlock_f13()", +"e0ffd49a": "postBounty(string,uint256,uint256,address,uint256,address[],bytes[],uint256[])", "e0ffe8e3": "newOrder(string,string,uint256,uint256,string,string,string)", "e1005556": "allowTransferWhitelist()", +"e10076ad": "getUserBasicReserveData(address,address)", +"e100bc7d": "approveClaim(string)", +"e100d940": "limitPerPeriod()", +"e100ee12": "totalClaimedBNBRewards()", +"e1016284": "_niftyIPFSHashes(uint256)", "e1017332": "sellPaused()", +"e101a2ce": "processCommitmentUser()", +"e102006d": "getArtistName()", "e1021b53": "getLuckyRecordSize()", "e10289b8": "addContributor(uint256,address,uint256)", +"e10295ad": "caseOpenings(uint256)", "e102baab": "setTokenController(address)", +"e102c996": "mockPrice(address)", "e102d950": "getNameHash()", +"e103100c": "BurningStateChange(bool)", +"e1032b83": "undelegate(address,uint96)", "e1036f86": "tax_distributed()", +"e1038647": "snapShot()", +"e1039e65": "stakeInUni(uint256)", +"e1039f48": "setControllerShare(uint256,uint256)", "e103f176": "transfer_master(address,address,uint256)", "e1041d86": "__throw()", +"e1042af6": "DefiPriceExchange()", +"e1046058": "ERROR_CODE_GLOBAL_PAUSE()", +"e10591f3": "dissolved()", +"e105be4a": "initialize_base(address)", +"e1064a1c": "updateOwners()", +"e106a705": "setClassForTokenId(uint256,uint256)", "e106fae9": "lottoLowestNumber()", "e106fb4b": "stringToBytes(string)", +"e107aa17": "memeLtd()", "e1082335": "to(bytes32,address)", +"e1086347": "setTransferAllowance(address,uint256)", +"e1087aa7": "goldSalesRecord(address)", +"e108854c": "setHashedSecret(bytes27)", "e1089240": "Csts()", +"e10895da": "arbitratorDisputeIDToChallenge(address,uint256)", "e108d2d6": "setMintAdminApproval(address,address,address)", "e1094ff6": "DGZTokensSold(address,uint256)", +"e1095bed": "currentVotingEndBlock()", "e1097249": "initStage()", +"e109d2a1": "RedressInfo()", "e109ef24": "setTokenOperatorApprovals(address,address,bool,bool)", "e10a70b7": "LogRedeemVIBE(address,uint256,uint256,uint256)", "e10aa985": "Elyxr()", +"e10ade8e": "signalConfirmationMinTime()", "e10b650b": "winnerWithdraw()", "e10bcc2a": "startMilestone(bytes32,uint256,address,uint32)", "e10be707": "changeGoodBye(string)", +"e10c49d9": "ExecutionFailed(uint256,address,uint256,bytes)", "e10c7bb5": "EventStore()", +"e10cc836": "presalePeriod()", +"e10d0dc1": "currentCeiling(uint256)", +"e10d1769": "determine(uint256,address)", "e10d29ee": "queue()", "e10d416f": "enablePurchasing(bool)", "e10d4c0b": "isSaler(address)", "e10e274a": "CrazyEarning()", +"e10e354b": "EarnedEth(address,uint256)", +"e10e384a": "payTaxes()", "e10e5dce": "_build(bytes)", "e10e66e6": "changeWeiPerToken(uint256)", "e10e8ffe": "doOraclize()", "e10e95c9": "fundingEnabled()", +"e10e9dc9": "divisible()", "e10eda7a": "IOCFundIndex()", "e10f1b06": "isTournament(address)", "e10fb98f": "testMul()", "e1103422": "retractRewards()", "e11074cb": "initFund()", "e1108706": "rfind()", +"e110b86b": "balancesWrapper(address)", "e1112648": "record(bytes)", "e1115aa5": "addUserRewards(uint256,uint256,address)", +"e111a269": "AddWei(uint256)", +"e112624b": "erc20Deposit(bytes32,uint256)", +"e11304f9": "updateLandImprovementData(uint256,uint256)", "e1134799": "claimDaoStakeSupply(address)", "e11398e8": "burnLeftovers()", "e113c6fd": "ICO_SINCE()", @@ -128917,207 +235966,390 @@ "e1152343": "payout(uint256)", "e11527d4": "linkedContract()", "e11583b7": "TokenOPSSaleAddress()", +"e115ae16": "removeFeaturedId(uint8,uint256)", "e116b17e": "getKudosLeftForProject(address,address)", +"e11731cb": "TicketsPurchased(address,uint256)", "e1175a79": "getMyTickets(string,address)", +"e1175b3f": "UnfreezeTokens()", +"e117694b": "mapToken(address,address,bool)", "e117e6f9": "MyToken(uint256,string,uint8,string,uint256,uint8,uint256,string,string,string,string,string,string,string)", "e1181c73": "faucetLif()", +"e118658b": "numTicketTypes()", "e1187e2e": "getCollectibleWithMeta(uint256)", +"e118861b": "lockstart()", "e118eda4": "featuredSpritesLength()", "e118fba2": "redeemPurchases()", +"e11932cf": "calculateInterest(address)", +"e11951d4": "getMintEnableCount()", "e119f8bb": "migrateMarketInFromNibling()", +"e11a478f": "removeGroupAccess(address[])", "e11a5a4f": "allocateStartBlock()", +"e11a9cbd": "crvToUsd(uint256)", "e11aa56d": "getDeedTimestampByAddress(string,uint256)", +"e11ab456": "resurrection(address)", "e11b09e0": "softCapCompleted()", "e11b53af": "getContributionsCount()", +"e11b7a15": "pickup_eth_76550374(address,uint256)", +"e11c296f": "getWithdrawWithLocked(uint256)", +"e11c4b58": "setParams(address,address,uint256,int256,int256,uint256,address)", +"e11cdee4": "setRoseToken(address)", +"e11d57ab": "getHash(uint8)", "e11dba54": "messagesLength()", "e11df80d": "batchVipWithLock(address[],uint256[],bool)", "e11e1b0c": "escrowBalance()", "e11efa06": "getProgress(uint256)", +"e11f2d13": "changeUniPercentage(uint256)", "e11f493e": "reentrancy()", +"e11f5668": "uniSyncs(uint256)", "e11f6398": "MAXIMUM_PERCENT()", +"e11f891b": "topUpRefundFund()", +"e11fbfa9": "e_add_to_whitelist(address,address)", "e11fe9ec": "hasItem(uint256,uint256)", "e12073a0": "getAllDetails(address)", "e12097b7": "getCurrSale()", +"e120d52b": "getUnlockableOptionsCount(address,uint256,uint256)", "e121c102": "incentives(uint256)", "e1221400": "getCoinInfo(string)", +"e1224f9a": "withdrawCommission(address,uint256)", "e1226164": "getFamilyById(address)", "e122c028": "totalLBSold_GENERAL_2()", +"e122db6c": "convertorContract()", "e122f1b2": "GoldenCurrencyToken()", "e123182b": "purchase(bytes32,uint256)", +"e123bf27": "underlyingTokenValuator()", "e1248d52": "DYLC_ERC20Token()", "e124e37b": "add_allowedAddress(address,address)", "e124f899": "toPool()", "e1252b9b": "make_anonymous_registration(uint256,uint256)", "e1254fba": "getDeposit(address)", "e125501f": "refundParticipants(uint256)", +"e12577a2": "HandleTransfered(bytes32,address)", +"e12582f2": "networkGrowth()", +"e125f70d": "SetCastleSale(uint256,uint256,uint256,uint256)", "e125f88b": "aoccoin()", +"e12640c3": "fucknance()", "e1266042": "setTakeOwnershipFeePercents(uint256)", +"e1268115": "increaseAllowance(address[])", "e126eb7d": "referralCodeFromAddress(address)", "e1270b6e": "approval(address,address)", "e1281280": "setAddressUIntMapping(address,uint256)", "e12849b2": "getMineGenesis()", "e1287520": "getBets(uint256,uint256)", "e128f0d6": "getTogetherDate()", +"e12923b9": "BurnToken(address,uint256)", "e12925a9": "setUnownedNickname(uint256,string)", +"e1292df5": "isUserBoughtInPresale(address)", "e129330b": "factorContributed()", +"e12936d0": "VIRUS_MINING_PERIOD()", +"e12972c8": "m_ownerIndex(uint256)", +"e1297b50": "getPairs(address[],address)", "e129c99d": "notaryBookSize()", "e129f783": "NameRegistered(address,bytes32)", +"e12a0601": "setOwnerFeeDistributor(address)", "e12a3bbe": "icoAllocation(uint256)", +"e12a4102": "changeAdminToTrader(address,address)", "e12a894e": "CbdStandardToken(uint256,string,uint8,string)", +"e12ab1af": "logConfirmAuction(uint256,uint256,uint256)", +"e12ab559": "setTradingFees(uint256)", "e12badcf": "PlatformInformation()", "e12bcd68": "relayerName()", "e12bceeb": "performEqual(address,address[],uint256)", +"e12c385c": "getLeadTime()", +"e12c81ed": "userIds(uint256,uint256,bool,address,uint256)", +"e12c9eb3": "currencyAvailable()", "e12cbb3c": "SIGNAL_DELAY()", "e12cbb9e": "updateOrderBatch(bool[],uint32[],uint128[],uint128[],uint32[],int256)", +"e12dcc6c": "refreshLendingPoolCoreConfiguration()", "e12ed13c": "currentBlock()", "e12ee8d7": "totalAmountRaked()", +"e12f14a9": "k2(uint256)", "e12f3a61": "getClaimableAmount(address)", "e12f670f": "DiscourzeToken()", "e13044fb": "changeEth_to_usd(uint256)", "e13062c2": "getInvoices(address,uint256[])", +"e1313569": "withdrawbullshit(uint256)", "e1313dfb": "additionalInfo(uint256)", +"e13208b4": "updateProjectAdditionalPayeeInfo(uint256,address,uint256)", "e13245b1": "getCommunityBallotsEnabled()", "e13251b9": "listAssetsFrom(uint256,bytes32,uint256,bool)", +"e1329239": "depairTokens(bytes32)", "e132db41": "checkRate()", "e1332ab9": "setParameter(string,string)", "e13380e9": "EmClassic()", "e133ad53": "extendCost(uint256)", +"e133b461": "gemDifficulty()", +"e1340a3d": "Art(bytes32)", +"e1345416": "drawed()", "e1345b02": "SMARTGold()", "e134c9ff": "shutdownMarket(address,bytes32)", "e134e33d": "reason()", "e1351c05": "pay_coin()", +"e1352215": "WRITE_OFF_PHASE_D()", +"e13549a4": "zzzV2()", +"e136f65f": "usdtPrice()", "e1370365": "makeLogFill(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", "e137047b": "RESELLING_LOCK_UP_PERIOD()", "e1376da2": "updateFirstActiveGamble(uint256)", "e137cdd9": "totalTokenCreationCap()", +"e137ec2d": "priceETHXBT()", +"e1385a75": "depositSome1(uint256)", +"e13887d7": "test_rmul_rounding()", +"e138e613": "mushroomPerBlock()", "e138efb2": "setAllowStart(bool)", +"e139054f": "nextJackpotSplit()", +"e1393443": "daiosInitialBalance()", +"e139691e": "onRefund(address,uint256,uint256)", "e139bbd8": "getBalance1(address,address)", "e139e569": "getPriceAndTime()", "e13a7716": "testReturn()", +"e13aa389": "balanceOfInGameAccount(uint256,bytes32)", "e13aba48": "testBurn()", +"e13b468e": "setTkn(address)", +"e13b571d": "spillover()", +"e13ba6ff": "saveValueAddr()", "e13bd03c": "delCashier(address,address)", +"e13bd82a": "transferbucksmaster(address)", "e13c6b39": "externalContribution(address,uint256)", +"e13c96a9": "currentGblockNumber()", +"e13d3c79": "rewardableInitialize(address,uint256[3],uint256,uint256,address,uint256[2],address,address,uint256[2],int256)", "e13da09f": "HARJToken(string,uint8,string)", "e13dc28b": "testValidTransfers()", "e13e2ecf": "dev_issueTo(address,uint256)", +"e13ea810": "setDateCreation(uint256)", +"e13ebe1f": "priceOfCake()", "e13ec1fa": "RoundChanged(uint256)", +"e13eef91": "approve_591(address,uint256)", "e13efb79": "getReferenceHash(bytes32)", +"e13f360a": "Withdraw(int256)", "e13fafdb": "marketCoins()", "e13fe91c": "REALPlaceHolderMock(address,address,address)", +"e13ff08d": "renounceSuperAdminRole(bytes32)", "e1404b41": "setNewMembers(address,address,uint256,uint256)", +"e1409a40": "checkAvailability(string)", "e1419546": "makeLiquid()", "e1421a45": "makeIntString(string,uint256,string)", +"e142400e": "createToken(string,string,address,uint8)", +"e14285bb": "strainData(uint256)", "e142967e": "addClaim(uint32,int256,string,string,bytes)", +"e142ae56": "refundBatch(address,address,bytes32[])", +"e142d631": "setGegevens(string)", +"e1434e25": "ValidatorRemoved(address)", "e1437b00": "calculateCurrentMarketPixelPrice(address[16])", "e143b3a1": "createNewEscrow(address,address,address)", "e1444721": "minGoalReached(uint256,string)", +"e144ab41": "bountyAddresses(address)", +"e144ce12": "startinit()", +"e1456cb4": "payoutsTo_(address)", +"e145c09d": "heroReceivedXp(uint32,uint16)", +"e1461263": "setPancakeSwapInfo(uint256,uint256,uint256,uint256)", "e1472d88": "increaseBalance(address)", "e1479d07": "megoAddress()", "e1479ebe": "is_registered(bytes32)", +"e147aaa7": "bankOwner()", "e1482188": "showCollectedFee()", "e1486ea8": "getContest(uint32)", "e1489191": "commission()", "e148bae9": "assignClientIfNotAssigned(address)", "e148fe28": "transferTokensFromReserveAddress(address,uint256)", +"e14916b4": "SaleSuspended()", "e1496d16": "TEAM_NAMES(uint256)", +"e149c426": "updRateTimes(uint8,uint64,uint64)", "e149f036": "ownedTokens(address,uint256)", "e149fbfa": "ShapeshiftBotSolo(string)", "e14a147e": "addPokemon(string,address,uint256)", +"e14a605e": "totalInvested_(address)", +"e14a6258": "rip()", +"e14a6b95": "cardIdToStashedPayout(uint256)", "e14acc04": "getCanLoanAmount()", "e14b238a": "EITToken()", +"e14b441a": "getSpent(address)", "e14b7571": "stage_3_price()", "e14b983e": "LevelToken()", +"e14be666": "arbits_sale_open()", "e14c4675": "rateForMainICO()", "e14c5e17": "setcreatorAddr(address)", "e14ca10e": "oraclizeCallbackGasLimit()", +"e14d6bff": "getLiquidityEpoch()", +"e14de3b1": "activeAuctionIndexes(uint256,uint256)", "e14df8b7": "subDepotEth(address,uint256)", +"e14e06f6": "sendFn()", "e14e1ba7": "_getTokenAmountWithReferal(uint256,uint8)", +"e14e572a": "Reveal(uint256,address,uint256)", "e14e5ca4": "BETHER()", +"e14ea2e3": "transferfund(uint256,address)", "e14ed045": "getContributionOf(address)", "e14f08d5": "renounceTokenOwnership()", "e14f680f": "sendAll()", +"e14f870d": "pairFactory()", +"e14fbb4a": "spoolOpenTime_()", +"e14fee7f": "getSumOfTokens(address)", +"e150718c": "evacPunk(uint256)", +"e150bbd2": "swapAndBurn(address,address,address)", +"e1518136": "setFeesCollectionAddress(address)", "e151fb62": "_updateMetadata(uint256,string)", +"e1522536": "approved_to_deposit(address,address)", +"e1533876": "RotoStaked(address,uint256)", +"e1534301": "minBuyPerAddress()", "e153591c": "FairyFarmer()", +"e15363cc": "TOKEN_INDEX()", "e1538b32": "gasPayback()", "e1539c53": "claim(bytes32,string,string)", "e153af40": "RiyazToken()", "e153b74e": "tokenFallback(address,uint48,bytes)", +"e153d0e9": "haveKYC(address)", +"e153dcd6": "LogFunderInitialized(address,uint256)", "e154179e": "addToTrusted(string)", "e1541b7d": "testDiacritcs()", "e1541bc3": "setTdeIssuer(address)", +"e15455d1": "increaseBlock(uint256)", +"e1546a23": "TOKEN_RATE_EXPIRES_AFTER()", "e154d17d": "heldTokens(address,uint256)", "e155999e": "getFreeCrocs()", "e155b66c": "ConvnertToSecret(uint8,string)", +"e155b997": "getLandMiningStrength(uint256,address)", +"e1560fd3": "approveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", "e15618b9": "founderWithdrawablePhase4()", "e1567997": "kscBatchTransferToBounty(address,address[],uint256[],uint256,uint256[],string)", "e1568024": "totalAmountOfCrowdsalePurchasesWithoutBonus()", "e1569f6b": "testThrowsSetNotRetractableNotOwner()", +"e156a8f3": "newAppProxy(address,bytes32)", +"e156cd04": "estimateNNFT(address)", +"e156d58e": "trade(uint256,uint256,uint256,address,uint256[4][])", "e15746af": "TJCUToken(uint256,string,uint8,string)", "e157819a": "distributeCOMIKETCOIN(address[],uint256)", +"e1579c85": "revertTokens(address)", +"e157b58c": "getCompletedKey(address,uint256,address,uint256)", +"e157d687": "tokenFeeReceiver()", +"e157ee2e": "setRewardLiquidityLockCaller(bool)", +"e157fcc4": "getRegistryTypeFromAddress(address)", "e1587aae": "maxFinneyPerSaleLessThan()", "e158a24e": "ethTransfertoACC(uint256)", +"e158ab4c": "EX_ID2_PARAM_LOC()", "e1590ed7": "mainEtherReceived()", +"e159f3d1": "totalAssetsArray()", "e15a307c": "killAndRefund()", +"e15a56c8": "setPrivileged(address,bool)", +"e15a80ec": "rdr(uint256)", +"e15b694b": "SecretBidEvent(uint256,address,uint256,bytes32,bytes)", +"e15b7f1d": "MarketOrderAskConsume(uint256,address)", +"e15bdd6a": "paymentId(uint256)", +"e15c8a70": "getSaleQuantity(address)", "e15cba26": "_pay(bytes32,address,uint256,uint256,uint256)", +"e15cc8da": "swapTokensForETH(address,uint256,uint256)", "e15d051f": "adminUnsigned(address)", +"e15d0aba": "attackTail(bytes)", +"e15db43d": "shareFile(address,bytes32,bytes32)", +"e15e14a2": "LiquidationFunction(address,address,address,uint256)", "e15e9d47": "depositFlag(address,uint256,uint256)", +"e15ebf64": "_Charges(uint256)", +"e15ef141": "_getKingOfLoosers()", "e15f3ec2": "Sent(address,address,int256)", +"e15f47d8": "setBolRate()", +"e15fe023": "setHash(string,string)", +"e1604b70": "totalUser()", "e1606013": "issueCert(uint256,bytes)", "e160a1d6": "manaPerEth()", "e160e146": "createContractToken(string)", +"e1613f9b": "prepareInstance(string,string,uint64[3],uint64[3])", +"e16176ae": "KeyValueMappingOptionID(uint256,string)", "e161c3bf": "getPercentage(uint256)", +"e161eb56": "rebalanceDivisor()", +"e161f8db": "addFoobar(uint256)", "e1621b04": "getDatePosted(uint256)", "e163698a": "setTokenForPublicSale(uint256)", +"e1638583": "tokenTime(address)", "e16385fc": "destroyTokens(uint256,address)", "e163b75b": "settleBet(bytes20,bytes20,bytes32)", +"e1642561": "coverFactory()", +"e1642f36": "pieSupplierIndex(address,address)", "e164483f": "numberOfBlocksToStartGame()", "e164ac50": "teamPercent()", "e1654fad": "roundIn(uint256,string)", +"e1660b81": "pendingRAMBA(uint256,address)", "e1661eff": "getClaim(address,address,bytes32)", "e1661ff2": "Later(address)", "e1662aa6": "saveMsgByUser(string,string)", +"e1668c04": "MIGRATION_MANAGER_ROLE()", +"e16695b5": "getMaturity()", "e166b756": "ownerMethod()", "e166bebd": "BINOToken()", "e1674588": "getTokenURIs(uint256,bool)", "e1675421": "changeFsTKAuthority(address)", "e167dbca": "exchangeTokens()", +"e16824c6": "removeAddressMP(address)", +"e1685858": "frozen_team(address)", +"e168723c": "isCapReach()", "e168a31a": "getOwnedArea(address)", "e168ae8a": "_isPreICO()", "e168c3ec": "votes()", +"e168f162": "g_filledAmount(bytes32)", +"e1696349": "pancakeswap()", +"e169d793": "mapAddress_Whitelisted(address)", "e16b924d": "sellBonds(uint256,bool)", "e16ba8c6": "privateSale1Hardcap()", "e16bd3b7": "getSales(address)", +"e16c42df": "tAmount()", "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)", +"e16cf225": "cidByHash(bytes32)", "e16dbb2f": "Multiplication(uint256,uint256)", "e16dd936": "getVestingSchedule(address,address)", +"e16e0f84": "removeSellOrder(uint64)", "e16e2843": "setdividendFee(uint8)", +"e16e4753": "testN()", +"e16e9289": "clearTransfer(address[],uint256[])", "e16e9340": "getAddressArrayIndex(bytes32,uint256)", "e16e93aa": "DU30Token(string,uint8,string)", +"e16e9749": "set(uint256,uint256,uint256,uint256,string)", +"e16ed75a": "charityGoal()", "e16f374c": "getHarborLocation(uint16,uint16)", "e16f5fe9": "DeathFactor_iv()", +"e16f66d4": "changeOwnerFee(uint256)", +"e16faa64": "calculateNovaPerBlock(uint256,uint256)", "e16fb2f9": "recordInvestment(address,uint256,uint256)", +"e16fc60b": "setFeesPpm(uint256)", +"e16fcb66": "_onDisputableVoided(uint256)", +"e16fd62e": "isVotingPeriod()", "e16fe580": "CalcHash(bytes)", +"e17023f9": "init(uint256,uint256,uint256,uint256,uint256,address,address)", "e1703521": "setPriceMoreThanOneETH(bool)", +"e17039b8": "addAddressToWhitelist(address,uint256)", "e170dd81": "MintingSale(address)", +"e171ca76": "updateValues(address,address,uint256)", +"e171fcab": "getTradeCalldata(address,address,address,uint256,uint256,bytes)", +"e172050b": "destinationPartition(bytes32,bytes)", "e1725c92": "decimalPlaces()", "e1726faa": "pushDividendPayment(uint256,uint256,uint256)", "e1727807": "splitPot()", "e1727fc6": "contractDeployedTime()", "e172a57e": "updateGenerationStopTime(uint256,uint8)", +"e172c7be": "relockLiquidity(uint256)", +"e172cf21": "yieldDuration()", "e172dac8": "ethOdinRate1()", "e1733234": "get_all_activity(uint256,address)", +"e17361ab": "addVoter(address,string,uint256,uint256)", +"e1736d29": "setRefund(address,uint256)", +"e17376b5": "depositERC20(address,uint104,address)", +"e1739bea": "calcUpdateNAV()", +"e173ad25": "strategyName()", "e173b0d0": "reserveAll()", +"e173ccb4": "FinishMintingRequestSetup(address)", +"e1745e06": "hasClaimedFreeReferralPack(address)", "e17463c2": "changelp5(address)", "e174f106": "ManualMigration(address)", "e1757a3c": "TIMEOUTBLOCKS()", "e1758bd8": "nativeToken()", +"e175ae13": "nextStrategy()", "e175c86a": "getInviteInfo()", +"e17604d1": "registerHashtag(string,string,string,address)", +"e1761f10": "createNFT(bytes32,uint256,uint256,uint256)", +"e1762ef3": "DAYS_IN_SECONDS()", "e1765073": "getPath(uint256)", "e17682eb": "StablePrice(uint8)", +"e17714fc": "TokensDonated(uint8,address,uint256)", "e177246e": "setDelay(uint256)", "e17755c4": "zrxTokenContract()", "e177573c": "setHatchTime(uint64,uint256)", @@ -129125,96 +236357,194 @@ "e177b18b": "minCoordinatorCount()", "e177b707": "Valdela()", "e177bb9b": "registerCode(string)", +"e177bda7": "_canProceed(uint256)", +"e1780345": "proposedToWhitelist(address)", +"e1780dd3": "ContributionEdit(address,uint256,uint256,uint256,uint256)", +"e178905a": "vaultDuration()", +"e178e051": "sacrifice(uint256)", "e17928ba": "BOBOTOKEN()", "e17a3ccf": "paused_4()", "e17a5894": "yoobaTeamAddress()", +"e17a6318": "_getMinActiveBalance(uint64)", "e17a7c70": "stage3_start()", "e17b25af": "setMetadataAddress(address)", +"e17b2d78": "newSafe(uint256,address,bool)", "e17b3054": "creatorOwner(address)", "e17b35ed": "isMint(address)", "e17bf87a": "testRewardBB(bytes32)", +"e17c0017": "addLiquidity(address,uint256,address,uint256,bool)", "e17cb777": "rewardRetweet(address)", +"e17df3b7": "querySynthRateBackwards(uint256)", "e17e1274": "testTransferToRejectAuthority()", "e17e1a86": "SetupWWC(string,string,uint256,uint256,uint256,address,address,uint256)", "e17e7a20": "setTotalStaked(uint256)", +"e17eba5d": "depositEtherTokenProportion(address,uint256,uint256)", "e17fc704": "canMintFoundation(uint256)", "e17fe6a0": "getCreatorReward()", "e17fec26": "Unregistered(bytes32)", +"e1801e88": "getEscrowPairAddress(uint256)", +"e1802723": "changeAuthereumFactoryAddress(address)", "e180819e": "setBuyTime(uint256)", "e18099e1": "ethTokenRate()", "e180dbbd": "isEarlyBird(address,address)", "e180e23b": "Annexe_CPS_6()", +"e180ed0e": "serviceContractActive(address)", +"e1815874": "setMinimumInvest(uint256)", +"e181ff33": "maxIssuance(bytes32)", +"e1825d06": "setL1BridgeAddress(address)", +"e1829a8e": "stakeBoxs(uint256)", +"e1829cfe": "withdrawAllWETH(address)", "e182e27a": "fastHatchingPrice()", "e182fd01": "tokensBankPartners()", +"e1834582": "_setTReward(uint256)", +"e183955e": "setTxFee(int128)", +"e183a720": "Swap2LegTransactionWithLoan(uint256,uint256,uint256,address,address)", +"e184882f": "setMultiParams(bytes32[],uint256[])", "e184c9be": "expiry()", "e1851b83": "getMaximumFundsInEuroCents()", +"e1856ff4": "mint(bytes32,uint256)", "e1859169": "communityContributionQuota()", "e185a890": "widthdrawRefunds(address)", "e185b24c": "emptyIndex(address[])", +"e185c919": "setAnnualMintPercentage(address,uint256)", "e1863b19": "MultisigWalletMock(address[],uint256,uint256)", +"e186aa8f": "degovDaiLpPool()", "e186fb27": "checkcitizendetails(uint256,string,string,string,string)", "e1878925": "isDeregisterable(address)", "e187a550": "logCall(uint256,uint256)", "e187eaf7": "addMoreTime(uint256,uint16)", "e1883433": "withdrawEther(uint64)", +"e188939f": "updateSafe(uint256)", +"e188dcc8": "tbn(address)", +"e188e80e": "LogBlacklistedUser(address)", +"e189549b": "Vote(uint256,bool,address)", +"e1897b59": "mintForWarpSync(uint256,address)", +"e189ce14": "redeemBonds(uint256)", "e189dba1": "sellIssuerTokens(uint256)", +"e18a7b92": "cupcakeBalances(address)", "e18a9134": "getLockProducts(uint256)", +"e18aa335": "transferAndChargeForGas(address,address,uint256,uint256,uint256,uint256,address)", "e18af2b8": "PHPCoin(uint256,string,string)", "e18b170e": "tune(uint256,uint256,uint256,uint256,uint256)", +"e18b551c": "levelUp(address)", +"e18b5a7f": "cJulSwapRouter()", "e18b7fcf": "receiveFee()", +"e18c0ad2": "closedLoanIds(uint256)", "e18c52ae": "testControlTransferNotTransferable()", "e18c8cf9": "etherInWei()", +"e18cb3d6": "pendingWKSA(uint256,address)", +"e18cb4fe": "setDevFee(uint16)", "e18d38ce": "getPlayerName(address)", "e18d9bba": "getUSDAmountByWeis(uint256)", +"e18da8bf": "checkContractState(uint256)", "e18dc0f6": "pricingStrategyAddress()", +"e18dec95": "getPublicId(address)", "e18e34d5": "setPayoutFee(uint256)", +"e18ecb6e": "conditions(address)", "e18ed57b": "_calculateTax(uint256)", "e18f1355": "TestERC20Token(uint256,string,uint8,string)", +"e18f32b7": "getClosestGuess()", "e18faad8": "_adduserdayget(address,address,uint256,uint256)", "e18fb814": "setFixPrice(uint256)", +"e18fc609": "PolicyRuleAdded(bytes4,address,bytes32,bytes32,uint256,uint256)", +"e18fe53f": "mdg()", "e18fe709": "AirRewardTotalSupply()", "e190264f": "newCampaignAccount(uint256)", +"e19057df": "bonusLevel4()", +"e1905f30": "_liquidityRewardsDivisor()", "e1909035": "GetCompetitionResults(uint32,bool)", "e190d1b5": "claimFreeCrab()", "e1911d70": "METADATA_URL()", "e19136a4": "urbitAdminAddress()", +"e1913c81": "REFERRAL_BONUS()", +"e1913d01": "card3()", "e191548d": "AnimecardCore()", +"e19260af": "Transfer(address,address,uint256,bytes)", +"e192782b": "MAX_NUM_HAT_RECIPIENTS()", "e192c4e0": "investor_Refund()", +"e1932168": "MAX_GEN0_THC()", "e193289f": "setVotingHelper(address)", "e1938b14": "oraclizeSetWinner()", "e193b735": "tokensDonated()", +"e193f54c": "LogRefunderSet(address)", +"e194361a": "approve_527(address,uint256)", "e1948e44": "ethRateExpiration()", +"e1949ebe": "decrementCirculatingISupply(uint256,uint256)", "e194e369": "getFamedStarByName(string)", +"e194e3b8": "totalWithdrawnDividend(address)", +"e195232e": "strongPool()", +"e1953790": "AddYearInterest(uint256,uint256)", +"e195418a": "marketIdToTradeId(string)", +"e1954443": "LockedLP(address,uint256)", +"e195873b": "submitMagicValue4(uint256)", "e19593e5": "cashout(uint256,address,address,address,uint256,bytes,bytes)", "e195d096": "tokenReserved()", "e195f2ec": "howManyFees()", +"e196001b": "EXCHANGE_V2_ORDER_ID()", +"e19709e0": "getChainOwner()", +"e1974006": "_reservedBalance()", +"e197bcae": "claimNirvanaReward(uint256)", "e1980d15": "setBuyAuctionAddress(address)", +"e199038d": "unitDefenseIncreases(address,uint256)", +"e1994797": "returnsArray()", +"e1994e8b": "timeOfTwapInit()", +"e1997e9a": "rewardTopNodePct()", +"e199a03a": "stakeAmountLPLv1()", "e199b7e4": "getMasterAdress()", "e199c8a8": "SafiraToken()", +"e199d68b": "earnLocked(uint256,uint256)", "e19a7bc8": "stopMigration()", +"e19a84f1": "proposals(address,uint256,uint256)", +"e19a9dd9": "setGuard(address)", "e19ab767": "totalDistrictSupply()", "e19aca85": "takeDividends(address)", +"e19b0647": "mintPart(address,uint256,string)", +"e19b8ee3": "migrate(bytes32)", "e19bb964": "priceIncreasingRatio()", "e19bc813": "bonusesCount()", "e19bc8e5": "initPrivateIco(uint256,uint256,uint256,uint256,uint256)", +"e19bdefb": "sendInSoldier(address)", +"e19be150": "getBondForTransferAmount(uint256)", +"e19c175d": "setProtocolAdapter(address)", +"e19c17cb": "rollUp(address)", +"e19ccf87": "stakeNKCN(uint256,uint256)", "e19d36ff": "removeAsset(bytes32,address)", +"e19d6020": "freezeByTimestamp(address,uint256)", +"e19e7168": "cancelWithdrawRequest()", "e19eaf79": "blocknumber(address)", +"e19ed711": "Withdrawal(address)", +"e19ef893": "depositTreasuryFund(uint256)", "e19f1c55": "EstatePurchased(uint256,address,uint256)", +"e19f4be9": "getVoteReceiverVestingDays()", "e19fb933": "MentalHealthLifeToken(uint256)", "e19fd3c5": "determinePurchase()", +"e19fe40a": "Open_()", "e1a05087": "getImpactUnmatchedValue(string)", "e1a05344": "createSaddle6(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"e1a0681d": "FinishMinting()", +"e1a0e3fa": "processGuildKickProposal(uint256)", +"e1a150a5": "systemWithdraw(address)", +"e1a160ef": "unSwaaveTo(address,uint256)", +"e1a1a66c": "CONTRACT_ERC712_NAME()", "e1a1cd8d": "crowdfundEndDate()", "e1a27ad3": "needsAdministration()", "e1a283d6": "mintingPaused()", "e1a29a3f": "setVariationAddress(address,address)", +"e1a2b38e": "InvestToNLF(address,uint256,uint256)", "e1a2c446": "lockRewardTokenMany(address[])", +"e1a2f315": "sendTokenTo(address,address,uint256)", +"e1a317d1": "PaymentTicket()", "e1a382f4": "ZTHToken(uint256,string,string,uint8)", "e1a3e55c": "buy(string,address)", +"e1a41bcf": "submissionInterval()", "e1a44749": "setOptions(uint256)", +"e1a477de": "approve_886(address,uint256)", "e1a566f4": "challengeExists(string)", +"e1a56959": "approve_145(address,uint256)", "e1a57611": "tokenReceivers(uint32)", +"e1a589da": "getSenderInfo(address)", "e1a58a74": "flowerContract()", +"e1a609f5": "index2PolicyId(uint256)", "e1a63c14": "PixelMap()", "e1a67cd3": "overrideTokenHolder(address,uint256)", "e1a69d88": "level_1_amount()", @@ -129222,126 +236552,216 @@ "e1a6df9e": "FLIGHT_NUMBER()", "e1a6e625": "TradingStart(uint256)", "e1a6f014": "offer(uint256,address,uint256,address,uint256,bool)", +"e1a7557a": "PynthetixReceivedForEther(uint256)", "e1a7739c": "getExercisePeriodDeadline()", +"e1a7b947": "userPod(address)", +"e1a87b26": "CurrencyExchangeRateAdded(address,uint256,uint256,uint256)", "e1a8af8a": "getWinnerPrize(uint256)", "e1a9109d": "setSeedPrice(uint256)", +"e1a974a0": "getOpenDeposit()", "e1a9a2b1": "endRound(uint256,uint256)", +"e1a9af06": "getDelayDataHash(address,bytes4)", +"e1a9cc0c": "isCanReg(address,address)", "e1a9f9b9": "_buyCallToClose(uint256,uint256,uint256,uint256,address)", +"e1aa1047": "setInitAccess(address,bool)", "e1aa1098": "GuardaRegistro(string)", "e1aa1bcc": "refundDeadline()", "e1aa60dc": "lastBlock_v3()", "e1aa7e95": "createNewUser(bytes32,bytes,address)", +"e1ab36f0": "setMinContributionForRound(uint8,uint256)", "e1ab5860": "declarePublicOfferingPlan(uint256,uint256)", "e1ab690e": "ANRToken()", "e1ab7cda": "OnetVN()", +"e1ab96d8": "getDelegatorReward(uint256,uint256,address)", "e1aba68e": "newProposal(address,string)", "e1abf819": "GetWinner(bytes32,address,bytes32,address)", +"e1ac0b9c": "INITIAL_SALE_ARTIST_SHARE_NUMERATOR()", +"e1ac0ed5": "kton()", "e1ac48ad": "saleableTokens()", "e1aca6fb": "quickSort(uint256,uint256)", +"e1acb766": "newChainRequest(string,string)", "e1ad1162": "transfer(address,uint256,bool)", +"e1ad418e": "userAmount(address)", "e1ad7699": "setPayload(string)", "e1ad84a0": "GetFixedPrice(uint256)", +"e1ad855d": "unAuthorized(address)", "e1addfbb": "priceOfreservations(address)", +"e1ae6ae6": "backAddr()", "e1ae91b3": "TestToken(address,uint256,uint256)", +"e1aea53d": "withdraw_all_LP(uint256)", +"e1aeb58f": "_tokenBalance(address)", "e1af0121": "associationOf(address)", +"e1af6b78": "getBeneficiaryDepositsCount(address)", "e1af915d": "changeGenes(uint40,uint256)", +"e1af9a95": "offeringAmount()", "e1afb08c": "unlock(bytes16)", "e1b0513b": "withdrawGame()", "e1b0d4b2": "setTransactionsAllowed(bool)", "e1b10970": "moveFactory(uint8,uint8)", +"e1b1aef1": "Bought(address,address)", +"e1b1c216": "getIfTimelockIsRevertible(address)", +"e1b1d20a": "transferTestFrom(address,uint256)", +"e1b1e7ef": "NNewRec()", "e1b27e6b": "COO()", +"e1b32dc7": "userLockedRev(address,uint256)", +"e1b3490a": "REI01()", +"e1b3a5a7": "deregisterDarknode(address)", "e1b3f338": "undoPending(address)", "e1b40a76": "ipfsAddress()", "e1b41513": "LIVEToken()", +"e1b4291a": "JGN()", "e1b4d6cb": "HOTCRYPTO()", "e1b5265a": "PutForExchange(address,uint256)", "e1b53078": "makerAffiliateFee()", "e1b54285": "endDateOfVipPlacement()", "e1b5989d": "FastLoan()", "e1b5ce0f": "buy(uint256,string,string)", +"e1b6ad74": "_requireCanIssueOnBehalf(address,address)", +"e1b6b3d4": "addStakeUniPool(address,address)", +"e1b6cf7c": "getCheckerboard(bytes32)", +"e1b6e340": "Burn(uint256,address,uint256)", "e1b7535f": "getDepositor()", +"e1b765e2": "changeUserAdmin(address,address)", +"e1b7849c": "_blocknumber()", "e1b7abda": "HOST_SHARE()", +"e1b802a9": "uniOption()", "e1b8347b": "testFundsAreTransferrableAfterSale()", "e1b84ac3": "_storeSettingCreation(address,uint8,string,address,address,string)", "e1b8708f": "OwnerChanged(address,address,bytes32)", +"e1b8c38e": "cancelAcquisition()", "e1b92b21": "LogOmegaEggSale(address,uint256)", "e1b9dc08": "setCallbackGasLimit(uint256,uint256)", "e1b9dea4": "Globglogabgalab()", "e1b9ed9d": "_buyTokens(address,uint256,uint16)", +"e1ba4001": "RiseAddress()", "e1ba84a9": "testFallbackThenAdd()", +"e1ba95d2": "unlockStakes()", "e1baa2a0": "ownerAngelTransfer(address,uint64)", "e1baa9cb": "CNT_Common()", "e1baed1a": "hireBountyHunter(uint256)", +"e1baf830": "funds(uint256,address,uint256)", +"e1baf839": "d_list(address,uint256)", +"e1baf9c3": "LOG_ChangeGameSettings(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint8,bool,uint256)", +"e1bb5133": "setReporter(address,bool)", "e1bc048e": "clones_to_create_one_idea()", "e1bc3003": "reveal(bytes,string)", "e1bccc7f": "FccToken()", +"e1bd0368": "setFractionToInvest(uint256,uint256)", "e1bd5af9": "contractHolderAddress()", "e1bdc3c9": "addAddressMappingProposal(address,address)", "e1be7467": "bounties()", +"e1bea1af": "AddToken(address,uint256)", +"e1bebe43": "StartTimeChanged(uint256)", "e1bedf2a": "AlarmTester(address)", "e1bf34e9": "transferToKnownContract(address,uint256,bytes32[])", "e1bf4f50": "upgradeM5Logic(address)", "e1bf50c8": "_transferChamp(address,address,uint256)", +"e1bf9c08": "computeFee(uint256)", "e1bfc31e": "acceptOp()", +"e1c01b13": "notEqualBytes32PassTest()", "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)", +"e1c214c6": "foreclosureTime(uint256)", +"e1c22b50": "setAssetIntroducerDiscount(address)", +"e1c29b99": "getMNW2(uint256)", "e1c33523": "xpaFundDeposit()", +"e1c36569": "safeWithdrawalNoDownload()", +"e1c39f15": "CreateEsusu(uint256,uint256,uint256,uint256,uint256)", "e1c3aedc": "updateRewardVaultContract(address)", +"e1c3aff9": "seasonFunder()", "e1c3bac6": "stakeMaxAge()", +"e1c3be38": "set_new_CHAI_TokenContractAddress(address)", "e1c3fb91": "_hasClosed()", "e1c49dde": "previousRounds()", "e1c4a6a6": "getIsRemoved(bytes32)", "e1c4c9fe": "remainingReward()", "e1c52dc6": "Confirmation(address,bytes32)", +"e1c55751": "mintMonster(address,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", "e1c5d838": "createOrgan(string)", +"e1c5e54d": "Funds(address,uint256)", "e1c621c0": "_rewardTokens(address,uint256)", "e1c66292": "Create(uint32,address)", "e1c68f31": "findFloorKey(uint256)", "e1c6b14b": "addToOtherMap(uint256,uint256)", +"e1c6e517": "dusd_info()", "e1c70b29": "_createPow(string,address,uint256,uint256,uint256)", +"e1c71578": "EIP712_COORDINATOR_APPROVAL_SCHEMA_HASH()", "e1c7392a": "init()", +"e1c7ad26": "getUserEstimatedCurrentFee(address,address,uint256)", +"e1c7b27a": "__SingleTokenVestingNonRevocable_init(address,address,uint256,uint256,uint256)", +"e1c7dbe3": "totalDonationCnt()", "e1c7f06a": "AddSharedAccount(bytes32,bytes32,bytes32,address)", "e1c80391": "setArtcoin(address,address,address)", +"e1c89cca": "drawMoney(address,uint256)", +"e1c8d308": "depositLock(address,address)", "e1c941b0": "batchSendWebGiftToken(address[],uint256)", "e1c95bb9": "updateThresholdNewTokenPair(uint256)", +"e1c98d8c": "lockStake()", +"e1c99f7f": "AddAllowed(address)", "e1c9ccaa": "ShopalToken()", "e1ca1b7d": "FilmoljupciCoin()", "e1ca6f6f": "distribute_100_tokens_to_many(address[])", "e1ca8b57": "setNewPriceFuncAddress(address)", +"e1ca9092": "getSubscriptionTypeLength(bool)", "e1caa0c7": "createAndCall(string,bytes)", "e1cb0e52": "getVal()", +"e1cb24dd": "mySring()", "e1cb5515": "newArticle(string,string,string,address)", "e1cba8d2": "TUBECOINcontract()", "e1cd5fc0": "PROJECTOPERATION_SUPPLY()", +"e1cd955d": "getMessageAtIndex(uint256)", "e1cda468": "createRequestFromBytes(bytes)", +"e1ce0802": "changeOwner753(address)", "e1ce95c8": "summon10SkinAppearance(uint256)", +"e1cea2c2": "cardInsuranceAccount()", +"e1ceefda": "commit_new_parameters(int128,int128,int128)", "e1cf0b3b": "refundAllPlayers()", +"e1cf73b9": "maxTimeLock()", +"e1cfdee6": "getConwaysTable(uint256,uint256,bool)", "e1d001eb": "mintAllowance(int256)", "e1d03d11": "setUnlockedAddress(address)", "e1d07058": "_modifySpendLimit(uint256)", "e1d10d85": "getMyTickets()", "e1d10f79": "calluseraddress(address)", +"e1d143a0": "approve_501(address,uint256)", +"e1d19178": "totalTokenWithdrawals_(address)", "e1d1e8ef": "getCurrentUnitPrice()", +"e1d1f81b": "getPriceETH_USD()", +"e1d21b14": "coverageLeft(address)", "e1d2d3e4": "SocialMedia()", "e1d2f649": "restartAuction(uint256,uint256,uint256)", "e1d30979": "wolkInc()", +"e1d33203": "updateNode(string,string,string,string,string)", "e1d35155": "ProudofYourCoin()", "e1d4efc4": "YHT()", +"e1d5201c": "storages()", +"e1d53157": "setRevokedDefaultOperator(address,address,bool)", +"e1d592b3": "increasePrice(uint256)", "e1d5988e": "discount(uint256,uint256,uint256,uint256,uint256)", "e1d5e8eb": "rollDices(uint256)", "e1d5ec4c": "seedShare()", +"e1d5f64e": "ENCODED_AUCTION_ELEMENT_WIDTH()", +"e1d648d1": "withdrawStakes(uint256[])", "e1d6aceb": "transferWithComment(address,uint256,string)", "e1d6e166": "getContracts(address,uint256)", +"e1d703f6": "BountyGranted(address,uint16,string)", "e1d76c8e": "getBlocksByOwnerDesc(uint256,uint256,address)", "e1d7ce2c": "EthCentsUpdated(uint256)", "e1d7fadc": "disqualifyHopeful(uint256)", "e1d81736": "addUser(uint256)", +"e1d83ddc": "_mimi2()", +"e1d84514": "PCT_PRECISION()", "e1d8501d": "getUSDAmount(uint256,uint256)", +"e1d8833c": "get_total_allocation()", +"e1d8d66a": "__callback(string)", +"e1d916f7": "getSpecial(uint256)", +"e1d936f8": "setSymbol(address,string)", "e1d94d94": "ownerChangeSlogan(string)", "e1d9627f": "ReputationChanged(address,int32,int32)", +"e1d9bbbd": "bb(address)", "e1da4135": "bountyFundAddress()", "e1da4f85": "setStartStage2(uint256)", "e1da5637": "setPercentWeiJackpot(uint256)", @@ -129350,71 +236770,134 @@ "e1db206c": "limitTier1()", "e1db8e7e": "getCreatedPayoutNumerators()", "e1db8ff2": "mineForMany(address[],address[],uint8[],bytes32[],bytes32[])", +"e1dbc10f": "updatePoolWithReferrer(address)", "e1dbc281": "changeBank(uint256)", "e1dc7792": "OptedOut(address,address)", +"e1dc7beb": "applyExit(bool,uint256,address,bytes32,bytes)", "e1dcafa3": "setDefaultReputationReward(uint256)", +"e1dcb1f9": "assetReturns(uint256,uint256)", "e1dcf3de": "NewBooking(address,uint256,uint8,uint256)", +"e1dcf89b": "testFail_wdiv_zero()", +"e1dd1204": "awardAirdrop(address)", +"e1dd5959": "butterPerBlock()", +"e1dd5c30": "_pull(address,uint256)", "e1de02f3": "_exit(address)", +"e1de0877": "streamLpTimeleft(address)", "e1de373f": "addPlayerName(string)", +"e1de7c80": "amountVested()", +"e1debaca": "addItem(uint256,string,string,uint256,uint256)", +"e1decef3": "getHubOverhead()", "e1df4517": "WealthChainToken()", "e1df507c": "calculateAmounts(uint256)", "e1df7f60": "startstopICO(bool)", +"e1e0485e": "getGrade(uint256)", "e1e073b6": "amountTokenIssued()", "e1e09299": "addUserRole(address,uint8)", "e1e158a5": "MIN_DEPOSIT()", +"e1e1d3b9": "rewardTokenTaxes()", "e1e1f977": "parseTx(address[4],uint256[3],uint32[4])", "e1e29558": "completeTask(uint256)", "e1e2ccd2": "sellDrugs()", "e1e3f915": "parameterizer()", +"e1e417c4": "escrowOwner()", "e1e46351": "mvpLaunchedAt()", "e1e46f24": "tokenRate2()", "e1e471eb": "BankingPayToken()", "e1e4d737": "setTokenFront(address)", "e1e5c093": "controlSum()", +"e1e5cdd7": "updatePromStats(bytes32)", +"e1e63451": "getTaskCompletionReward(bytes32,address,uint32,uint32[])", +"e1e68820": "minReturnAmount(address,uint256)", +"e1e6b898": "receipt()", "e1e7c320": "getGamesPlayerBids(uint256,address)", +"e1e85af2": "generateDebtAndProvideLiquidityUniswap(address,address,address,address,uint256,uint256,uint256[2])", "e1e85c4b": "splitProfit(uint256)", "e1e867e5": "getFees(uint256,uint256,address)", "e1e87c28": "refundToBuyers()", "e1e87f40": "LogDividend(address,uint256,uint256)", "e1e87f60": "_getBid(address,uint256,uint256)", +"e1e8aab7": "rentCar(uint256)", +"e1e8ab88": "getMinPuul(address)", "e1e902af": "transferToLock(address,uint256,string)", "e1e93604": "atomicMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])", +"e1e9c9ca": "tokenIdOfRefer(uint256)", "e1e9e249": "encodeAddress(address,address)", "e1ea0a57": "TOKKA()", +"e1ea4847": "setRefuelHoldingToken(address)", "e1ea5e05": "token_fallback(address,address,uint256,bytes)", +"e1ea88d6": "userFarmedTokens(address)", +"e1ea955b": "CreateCaptain(uint256,uint32,address,uint256)", "e1eac4a8": "get_bountyHunter(address,address)", "e1eae0b4": "fullUnitsStaked(address)", +"e1eb3841": "getHostDetails(string)", "e1eb5f87": "NewPrice()", "e1ebdb6d": "setWhitelistA(address,address)", "e1ec12c7": "TopPlayerToken()", +"e1ec1331": "currentDayIndexActual()", +"e1ec3c68": "loans(uint256)", +"e1ecbd30": "registerSender(address)", +"e1ecc8b5": "getParentTree(address)", +"e1ed16dd": "StatusChanged(address,uint256)", +"e1ed3ad3": "withdraw(int256,int256)", +"e1ed4286": "minDebtSize()", "e1ed7fcb": "setBagMultiplier(uint256,uint256)", "e1edd8ec": "getSupplyAgent(address)", "e1eddc6d": "_rand(uint256)", +"e1ee38ec": "getPendingTransfer(address,bytes32)", +"e1ee54fb": "OnPushedAddress(address,uint256)", "e1ee9284": "getOwnCard(address)", "e1ee9a3d": "isPreIcoDate()", +"e1eea34f": "sendBonus(uint256,address)", +"e1eec7cd": "setGovVault(address)", +"e1eee6d6": "getRequestVars(uint256)", +"e1ef1ebe": "transferFreeAmount()", "e1ef42b1": "Total_Investors()", +"e1efb596": "lock(string,uint256)", "e1efda6d": "airaSend(address,address,uint256)", +"e1f019a6": "addMarketFromExistingDmmToken(address,address)", +"e1f02ffa": "withdrawProposal(uint256)", +"e1f06a8e": "setupWallets(address,address,address)", +"e1f095aa": "getDollarPrice()", "e1f0ae1b": "NexoToken()", "e1f0c376": "gameDuration()", +"e1f1176d": "configHash()", "e1f11822": "carnumOf(address)", "e1f16616": "invcoinSentToEther()", +"e1f18e3e": "kebabFarmingPoolId()", +"e1f20d80": "ownerCow(address)", "e1f21c67": "approve(address,address,uint256)", +"e1f2d12a": "LogReportSubmissionError_ExpiredAudit(uint256,address,uint256)", +"e1f351a1": "addSuperAdminRole(bytes32,address)", +"e1f3a38d": "curve3Gauge()", +"e1f42133": "seedWhitelist(address)", "e1f4895a": "getCostToken()", +"e1f49956": "apull(address,uint256)", "e1f4a9b1": "set_pre_kyc_bonus_denominator(uint256)", "e1f51aca": "listTokenByRank()", "e1f5760b": "horsesRemaining(uint256)", "e1f57846": "com_fee_transaction(address,address,address,uint256,uint256)", +"e1f5acf6": "commissionAddr()", "e1f5eb3f": "convertTokens(uint256,address)", "e1f5ebc5": "_projectAddNew(address,uint256)", "e1f6452e": "AggiungiNegoziante(address,bool)", +"e1f66469": "loansWallet()", +"e1f68d34": "ownerDABReward()", "e1f69952": "voteSvp02(bool)", +"e1f7af09": "AudaxDocTxDetails(address,string,uint256)", +"e1f7c70a": "getRateMultiplier()", "e1f7d0e1": "PRE_SALE_END()", "e1f7ec5a": "getStored()", "e1f82d60": "publicReservedToken()", +"e1f82f9a": "setInitialParams(address,address,address)", +"e1f8436c": "yoinkEth(uint256,uint256)", "e1f86887": "getPortfolioTable()", "e1f87904": "getNextDouble(address)", +"e1f8792b": "addCandidate(uint256,address,string)", "e1f8922e": "transferName(address,string)", "e1f8926b": "depositEthPool(uint256)", +"e1f93d81": "getCharge(address,address)", +"e1f97067": "SanSlotPurchase(address,uint256)", +"e1fa4b0e": "lgeDuration()", "e1fa70ef": "endCloseSale()", "e1fa7638": "attack(uint256,uint256)", "e1fa78e9": "AgriChainLabelInt()", @@ -129423,65 +236906,123 @@ "e1fa8e84": "register(bytes32)", "e1fac58d": "lockedBalanceOfByDate(address,uint256)", "e1fb070e": "MtTaborToken()", +"e1fbcb43": "investForLostMoney(address,uint256)", "e1fbeaed": "CUCUX()", +"e1fc52e1": "tokenFromeGas(uint256)", +"e1fc5788": "withdrawComm(uint256[],address[])", "e1fcad6a": "_equipUpOne(address,uint256)", "e1fcb86d": "YouTube()", "e1fd3d4e": "emergencySetDOwner(bytes32,address)", +"e1fd56ce": "getOstanItManager()", "e1fd632f": "EDU_KYC_BONUS()", "e1fdb4b4": "refundBet(uint256)", +"e1fdd982": "flashBeamOrbiterTokens(address,uint256,string[],address[],string,uint256[],uint256)", +"e1fde322": "getUnspentUpfrontAmount(bytes32,address)", +"e1fe1c3d": "swapTokens(uint256,address,address,uint256,address)", +"e1fe9114": "farmLimit()", +"e1fec15a": "lastBlockFee()", +"e1fed21c": "bondFees()", +"e1ff178a": "store(uint256,string)", +"e1ff7916": "resetOnRecovery(uint256)", "e1ff98f2": "getTotalCounter()", "e1ffdecb": "tokensPerTranche()", +"e1fffcc4": "Deposit(address,uint256)", +"e200281b": "vaultTotal()", "e20056e6": "replaceOwner(address,address)", +"e20075cd": "approve_321(address,uint256)", +"e200b2c0": "testOnlyStakingPoolOperatorModifier(bytes32)", "e200cee8": "setBossWannaCryInterface(address)", +"e200d033": "convertPriceFromTokensToWei(address,uint256)", "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)", +"e202e572": "emitRebalancedRewards(uint256,uint256,string)", +"e2030e67": "set_max_eth(uint256)", "e20314ed": "trade(uint256[10],address[4],uint256[6],bytes32[4])", "e2034834": "RemoveRocketForSale(uint32)", +"e203b0f1": "flashgt1()", +"e203b506": "Accounts(address)", "e203f335": "leafPrice()", "e2045452": "setUsername(address,string)", "e2045b5e": "getBadgeInfo(uint256)", "e2047589": "assertEq(address,address,bytes32)", +"e204bc99": "totalPooledBPT12()", "e204ce12": "transferExtra(address,uint256,uint256)", "e2056c46": "ExtraBalToken()", "e2059fdf": "showIssueDetail(address,bytes32)", +"e205c108": "lockETH(address,address,uint256)", +"e206036a": "cashiers(address)", "e2069734": "destroyRemainingTokens()", +"e206bcab": "getSmeltInfo(uint256)", +"e2074e7e": "_setMinBonusAmount(uint256)", +"e207bb77": "CreateChildren(uint32,uint32,uint32)", +"e2080c8f": "InternalTransfer(address,address,uint256)", "e2087a44": "receiveApprovalTest(address,uint256,address,bytes)", +"e2095c07": "entry(uint256)", +"e20964a0": "resetOrderReviewAddress(address)", +"e20981ca": "withdrawRewards(address,address)", "e209bf22": "addMeme(string,string)", +"e209c46b": "validatorEmptyJailed(address)", +"e209ea1f": "LogGoldBonus(address,address,uint256)", +"e20a270e": "Set_Punishment_Span(uint256)", "e20a4bcd": "recoverAddressFromCooperativeSettleSignature(bytes32,address,uint256,address,uint256,bytes)", "e20a5ac2": "bonusFourthWeekPeriod()", "e20a9ae9": "Tesoro()", "e20acc79": "changeInterval()", +"e20ad26f": "mdsPerBlock()", "e20b7d3c": "checkPoolAddressTierCap(uint8,uint256)", "e20bbd8d": "RecoveryWithTenant()", +"e20bbf65": "LogBuys(uint256,uint8,uint8,uint8,uint8,address)", "e20bc67b": "autoUnlock(address)", "e20bce0a": "lowTimeBonusValue()", +"e20be69a": "trade(uint256,uint256)", +"e20c0a4c": "freeCollateral(address,address,uint256)", +"e20c1342": "PlyrRnds_(address,uint256)", "e20c6d3d": "getMessageData()", "e20ccec3": "pending()", +"e20ce6ba": "takeRemainingTVOTokens()", "e20cfc4a": "payedDividendsUSD()", +"e20d2d5b": "tradersRewarded()", "e20d35ad": "CellBlocksToken()", +"e20d790d": "equalBoolPassTest()", "e20dc05b": "globalOperator()", "e20de6eb": "addrLockedFunds()", "e20e1dc3": "createProxy(address[],uint256)", "e20e36a0": "ExchangeAdapterBase(address,address)", "e20e54a5": "getMHTHoldersNumber()", +"e20e5a9b": "getRate(uint32)", +"e20eedc8": "updateCurrentTokenId(uint256)", +"e20f7ac0": "getGasCostOfGetNextSqrtPriceFromOutput(uint160,uint128,uint256,bool)", +"e20fbce4": "investorAccountCount(uint256)", "e20ff6f7": "fetchCurrentSatoshiState()", "e2101509": "getSketchesWithHolder(address)", "e211003d": "processOffChainPurchase(address,uint256)", "e2119c80": "computeRealCap(uint256,uint256)", +"e211b875": "pokeWeights()", +"e2120de0": "safeTransfer(address,address,address,uint256)", "e2121de1": "withdrawAny()", "e2130d1e": "unlockTeamTokens()", +"e2131378": "hashVote(uint8,bytes32)", "e21316ea": "mortal(address)", +"e2133fe7": "distributePassiveIncome()", "e213beb7": "transferCoOwnership(address)", "e213e10a": "_createMeme(uint256,string,address,uint256)", +"e213e756": "solveLoanAfterLitigation(uint256,uint256)", +"e2142fde": "hasTicket(address)", "e2153231": "SahilToken()", "e2155c14": "galleassMint(address,uint256)", "e21608be": "ReserveToken()", "e2164700": "currentRewardNum()", +"e2166c64": "setBonusContract(address)", +"e216a390": "adminTerminateLease(uint256,address)", +"e216ad1c": "seniorToken()", "e216bf4d": "SetBlockForSale(uint256,uint256,uint256,address)", +"e2170993": "bbase(uint256)", "e2172000": "left63(uint256)", +"e2174d86": "isUserAllowedToBorrowAtStable(address,address,uint256)", +"e217866c": "GetOrderInfo(uint256)", "e2179b8e": "g()", "e21827a1": "unmintedTokens()", "e218519c": "getref()", @@ -129489,48 +237030,84 @@ "e2188190": "CROWD_WAVE3_PERIOD()", "e219aa11": "GetEscrowETHBalance()", "e219b9e1": "rebateOneFenmu_()", +"e219bdc6": "addRewardAccount(address)", "e21a430b": "publicRelease()", "e21aaa0f": "_getShipPrice(uint256,uint256)", "e21ac8a1": "AvatechToken()", +"e21ae432": "getSaleProceeds(uint256)", +"e21afe2b": "setDepositHandler(string)", "e21b0b95": "updateGlobalMinContribution(uint256)", +"e21b2778": "payAppFees(bytes32,bytes)", +"e21b418e": "discountedExtractLiquidity()", "e21b63b2": "setNewMint()", +"e21b6ade": "maxStakeDays()", "e21b9d08": "m_changeable()", +"e21bcb7a": "auctionStart(uint256)", "e21be4f4": "CBMTToken()", +"e21c0970": "withdrawFromWaifusion()", +"e21c1d87": "darkBalanceOfThisContract()", +"e21c40c0": "getBurnRequest(uint256)", "e21c4783": "isPermitted(address,bytes32)", +"e21ca7c8": "getApostleInfo(uint256)", +"e21ce0d4": "pushMember(string)", +"e21d0723": "_balances(address,address)", +"e21dd9a8": "checkdlist(uint256)", "e21e221b": "ContributionRegistration(address)", +"e21eabed": "setUserInfo(string,string)", "e21f37ce": "message()", "e21f44f4": "PoolCreated(uint8,uint256,uint256)", +"e21f7923": "excessUtilizationRate()", "e21f8e56": "get_game_fees()", "e21fd9fc": "_owns(address,uint256)", +"e22023ae": "getTokenId(string,string)", "e2202a4d": "jester()", +"e220a811": "liquidateUnclosedLoan(address,uint256)", "e2211592": "TWO_DAYS()", +"e22155f6": "BUCKET_C0()", "e2217114": "forwardEther(uint256)", "e2217d5c": "payeth()", "e2219773": "webGiftOnceMaxAmount()", "e221d5d5": "getDukeNickName(string)", "e222b00c": "blocksPerPayPeriod()", +"e22305ca": "getBatchOrders(uint256)", "e22325ad": "transferBase(bytes32,address)", "e2233ada": "smartDoor(address[])", +"e2234b49": "newInstance(string,address[],uint256[],uint64[3],uint64,bool,uint256[4])", +"e2235c58": "sendMessage(address,string,uint256)", "e223b547": "calcFixedReward(uint256)", "e223cb37": "AddBill(uint256,uint256,uint256,bool)", +"e223ccec": "tokensByType(uint256,uint256)", +"e223e9a9": "setFRAXEthOracle(address,address)", "e223ed87": "getPetValue(uint256)", "e223facb": "USER_GAME_WITH_TOKEN(uint256)", +"e223fe1a": "tokenHolderIndex()", "e224179e": "icoOverride()", "e22497e4": "removeFromPublicSaleWhitelist(address[])", +"e225a043": "testIncrementByValue(uint256,uint256)", "e225c56b": "KudosToken()", +"e225cf60": "defaultEpochLength()", "e225e588": "TNCN()", +"e2264850": "stakerCommissionPer()", "e226a1b6": "getAddressStatus(address)", "e226cdec": "sellOffline(address,address,uint256)", "e226ed22": "balanceOfERC20(uint256,address)", +"e227a486": "concedeGame()", "e227b5d1": "ETHContributed(address)", +"e2285cce": "giftToken(address)", "e228647f": "olty_6()", +"e22875c9": "allHedgehogs(uint256)", "e228a6f4": "withdraw(uint256,uint8,uint16)", +"e228bb43": "minInterestAccumulated()", "e228d627": "nextTokenAddress()", "e228ecb4": "lockBalance()", +"e2292850": "serviceEntityVotes(address,address)", "e22938bd": "ShareManager()", "e22955c6": "MultiplyContract(address,uint256,uint256,uint256,uint256,uint256)", "e2298591": "xIPFSPublicKey()", +"e2299fdc": "onCompoundContractValidated(uint256)", +"e229ecf5": "wasabi()", "e22a3af8": "canClaimTokens()", +"e22a5d5b": "run3()", "e22a6231": "addCandidate(address,string,string)", "e22a9877": "getHWCAddress(address)", "e22aa47a": "lockTokensForCs(address,address,address)", @@ -129540,10 +237117,15 @@ "e22b3fb4": "changeOwner(bytes)", "e22b94e8": "ForceCryptoInvestmentCoin()", "e22baa56": "nonZero(uint256)", +"e22bce27": "getFollowersCount()", "e22bda35": "eventVenue()", "e22c6128": "getIncome(address)", +"e22cfd3f": "preciseDiv(int256,int256)", "e22d1581": "saleEnd2()", +"e22dd683": "hashtag_id(uint256)", "e22e8046": "getLunckyIndex()", +"e22ead3b": "nativeLoops()", +"e22eb1c9": "getCycleMemberIndex(uint256,address)", "e22ed995": "createStudent(string,string,string,uint32,bytes1)", "e22f8dc9": "buy_lovelock(string,string,string,uint256)", "e22fb860": "CJXToken()", @@ -129553,30 +237135,47 @@ "e2306253": "o1Address()", "e230dfbd": "setETHUSD(uint256)", "e230e246": "cutFor(address,uint256,uint256,uint256)", +"e230e7b5": "match_pools(uint256)", +"e230f8f5": "Marriage(string,string,string,string,uint256)", "e2311a78": "Payperblock()", "e2313d1f": "ClaimOrichalcum()", "e231bff0": "redeemed()", +"e231dae7": "dividendRewards(address)", "e2322c73": "firstPeriodWindows()", "e2326909": "addCourse(string,string,string,uint256,uint8,uint8,uint16,uint8,uint8)", "e2331332": "AortaToken()", "e2332120": "secondUnlockTime()", "e233ee0d": "publicFillOrder(bytes32,uint256,bytes32)", +"e2346d71": "handleWithdrawal(address,uint256)", "e2356efd": "holdTokensOnStage()", "e235847a": "addSourceForTimeline(uint256,uint256,string,bool)", +"e23584f0": "buyLotto(uint256,uint256,uint256,uint256,uint256,uint256)", +"e235af23": "releasePrivate()", "e235ca59": "revealsCount(uint256)", +"e235e238": "getNonBsovTokenFee()", "e236de22": "distributorWallet()", +"e236f46b": "models(bytes32)", "e2376be1": "sendMon(address,address,uint64)", +"e237a6a2": "totalDeclinedDeposits()", +"e237f75b": "getSelf()", "e2387bb6": "AuctionHouse()", +"e2389679": "RoundLastGreedyMan(uint256)", "e238c7ed": "setAllowanceAdmin(address,address,uint256)", +"e238d8c2": "set(address,address,address,address)", "e238def9": "getReleasedBalance()", "e23941bc": "testDepositWithdraw()", "e239421d": "Lotthereum(uint256,uint256,uint256,uint256,bytes32)", +"e239c400": "getLockDuration()", "e239ccba": "Disco()", "e23a15b5": "logSigned(string,bytes16)", "e23a4916": "getMainLockup()", "e23a7785": "approveAndBuy(uint256,address,uint256,bool)", "e23a845a": "getExpirationTime()", +"e23a9a52": "getReceipt(uint256,address)", +"e23b49ae": "delEvent(string)", +"e23ba338": "fountainToken()", "e23c5063": "getAttributeValue(address,bytes32)", +"e23c61a6": "afitoken()", "e23caa06": "getLotteryDetailsA(int256)", "e23cbad1": "getArkData(uint256)", "e23d0996": "getDBallotID(bytes32,uint256)", @@ -129584,62 +237183,112 @@ "e23da75a": "setTokenApproval(uint256,address)", "e23e231f": "TOKENS_NOT_FOR_SALE()", "e23e3229": "investorIndex()", +"e23e59b5": "getLastBlockTimestamp(uint256)", +"e23e5a41": "jackpotValue(uint256,uint256)", "e23eaae6": "SmogToken()", "e23eb0c5": "_calculateFEE2Distribute()", "e23f5e49": "checkLucky(address,uint256,uint256)", "e23f61f6": "isCurrentOrPastAdmin(address,address)", "e23fc908": "_setBurnFeeAbs(uint256)", +"e23fe94e": "newVersionAddress()", +"e2403019": "getReserveAvailableLiquidity(address)", +"e2412630": "setUpdater()", +"e2414a73": "getDayPrecision()", "e2418c15": "throwsWhenNetworkPlaceholderIsBad()", +"e2419baa": "setDeflationaryBlocks(uint256)", "e241c1d9": "deriveKey(uint256,uint256,uint256)", +"e241c7f2": "flipSafetySwitch()", "e241e9c5": "_getUt(address)", "e2420bd2": "setTwitterBot(address)", "e242df57": "MiracleTeleToken(uint256)", "e242fbbb": "addHuman(string,uint8)", "e244054a": "trade(bool,bytes,uint256,uint256)", "e2442441": "VpaxContract()", +"e2442f00": "tradeContractCollectBid(address,uint256,uint256)", +"e24455c4": "updatePoolReward(uint256,uint256)", "e24459ce": "rakugoPresaleAddress()", +"e2445a31": "setContractionPercent(uint256,uint256,uint256)", "e2449c13": "createSqr(uint256,address,uint256,uint256)", +"e244f286": "gokusScalingFactor()", "e244fe89": "addToCommunitySaleWhitelist(address[])", "e2454522": "verify(uint8,bytes32,bytes32)", "e2457f50": "changeZS(address,address,uint256,uint256)", +"e245dd93": "getPoolTamagIdAtIndex(uint256,uint256)", "e24613ea": "getNexOrdertUser(address,address,uint256,address)", +"e2462e6f": "ispiti(uint256)", "e2466cb6": "invalidateAnnouncement(uint256)", "e24670eb": "EthToCentsUpdated(uint256)", "e246ddba": "icoFinishTime()", "e246f71a": "EventAddManager(address,address)", "e247a2e2": "updateVolume(uint256)", +"e247be81": "fref(address,uint256)", +"e247ca1c": "BankrollRemoved(uint256,address,uint256,uint256)", +"e2481b3a": "getUnderlyingOptionParams(uint256)", +"e2488a32": "B_POOL()", +"e248a921": "addAuraEquip(uint256)", "e248b435": "setCCH_edit_15(string)", +"e248cff2": "executeProposal(bytes32,bytes)", +"e248d0c2": "insertToPendingGroupListTail(uint256)", +"e248e7be": "setHoldingTime(uint256)", +"e2490d5b": "Max_supply()", +"e24927db": "computeStateForEvent(bytes32,bytes32)", +"e249496d": "boogieSentToRave()", "e2496d5b": "tokensWeiRaised()", "e2499b98": "stakedContentById(bytes32)", "e249a575": "setTermsNumber(uint256)", +"e249fd9f": "pylonsScalingFactor()", "e24a1d1e": "deauthoriseMaker(address)", "e24a5042": "transmuted(uint256)", +"e24a7b65": "returnInvestment(address[],uint256[])", +"e24b0f71": "swapKAI(address,uint256)", "e24b4403": "_emitDeposited(address,uint256,address)", "e24b7721": "addressLeskiw()", +"e24be65f": "_dsrWithdraw(uint256)", +"e24bea03": "prop()", "e24c36d0": "flushEra()", +"e24cc914": "pendingEarth(uint256,address)", "e24cddd6": "getCartLength(address)", +"e24ce44f": "isFinishedMinting()", "e24cf226": "closeEscrow(uint256)", +"e24d6c4c": "setShardsCreatorProportion(uint256)", +"e24dde78": "setOreAddress(address)", +"e24f0bd7": "laserPerBlock()", "e24f8313": "addReputation(address,uint256)", "e24fe110": "Decentralized()", "e24fed00": "assertEq(bytes,bytes,string)", "e2506eab": "setEMAValue(uint256)", +"e2507b4a": "ethVolumeLimit()", +"e2508697": "MAX_FEE_SPLIT_NUMERATOR()", "e250ecfe": "Cogenero(uint256,uint256,uint256,address)", +"e251071e": "maxLPTAvailableForFarming()", +"e25187c1": "openLockTokenCollateralAndGenerateDebt(address,address,address,address,bytes32,uint256,uint256,bool)", +"e251de71": "privFixedPoolClose(uint32)", "e251e358": "preIcoSoftCap()", "e25209b6": "roundOneLimit()", +"e252934f": "hdg(address,address,uint256)", "e253c21d": "ZBCToken()", "e253dd6b": "setBonusRound4(uint256)", +"e25403a7": "reflectionTillNowPerToken()", +"e2541836": "TokenCreated(uint256,string,bytes5,uint256,address)", +"e254222e": "setFinalLPAmount(uint256)", "e2542f03": "updatePurchasePossible(bool)", +"e254ae5a": "getLeverage(uint256,uint256)", "e2550156": "smallBlind()", +"e2551319": "riskymultiplier()", "e25520a7": "LocklistAddressdisable(address)", "e2558086": "calculateLandmarkPrice(uint256)", "e255d5ad": "maxBuyRateInPrecision()", +"e255e5f9": "getter2()", "e25665da": "earlyBackersPoolAddress()", "e256888f": "PERCENTAGE_PRECISION()", +"e256c661": "overrideDiscount(address,uint256)", "e2573266": "withdrawRC()", "e2575e48": "_isMultiple(uint256)", "e2576998": "changeMaxCoefPartnerForEmission(uint256)", +"e257877d": "approve_288(address,uint256)", "e2583070": "balanceImportsComplete()", "e25876d3": "weiToFinney(uint256)", +"e25890a6": "refundAmount(bytes32)", "e258a0f0": "createItem(string,uint256,uint256,uint256[6])", "e258aa02": "createPromoRegion(address,string,uint256)", "e258be32": "removeBookSigner(bytes16,address)", @@ -129648,23 +237297,48 @@ "e259d074": "endauctionother(uint256)", "e25a2a99": "updateTier(uint256,uint256,uint256)", "e25a51b6": "setCompositeReputation(string,uint32)", +"e25a6218": "RESERVES_POOL_SUPPLY()", +"e25aa5fa": "getVirtualPrice()", "e25ade5f": "issueTokens(address,uint256,uint256,bool)", "e25b5cbd": "STAKE_APR()", +"e25b7f6f": "link_apt()", "e25bc771": "_transferCard(address,uint256,uint256)", "e25bd409": "receivePositionOwnership(address,bytes32)", +"e25c10bc": "profit_period()", +"e25c33ff": "TaskSolved(uint256)", "e25c80d0": "_currentIcoPhaseMinimum()", +"e25c8c71": "editAdmin(address,bool)", "e25c9c33": "getBadgeLevel(bytes32,uint256)", +"e25ccef6": "maxWhiteListFnxAirDrop()", +"e25cdab7": "externalBonusTokensAllocated(address)", "e25d4dac": "mintFund(address,uint256)", +"e25d8515": "RevokeGrant(address,uint256)", +"e25d9203": "aprovarFidelidade(address,uint256)", +"e25e920b": "hl0(uint32)", +"e25eb8bd": "onInjectEtherFromIco(uint256,uint256,uint256)", "e25f0a98": "requestedForMigrationAt()", "e25f71ac": "isRoundAwarded()", +"e25fbb9b": "setConvertPortalAddress(address)", +"e25fcaf7": "wakuang(address,uint256,uint256)", "e25fe175": "step()", "e2616387": "MPY(uint256,uint256)", "e26176d9": "FundRanking(address)", +"e261d132": "pushEthLiquidity()", +"e261d225": "farmTokens(uint256)", +"e261f1e5": "lands(uint256)", "e261fc63": "UserRank(address)", +"e262113e": "INVEST_MIN_AMOUNT()", "e2621a66": "HPBToken(address)", +"e2621fb2": "renounceMiddleman(address)", "e26259a4": "updateMyHns(string,address)", +"e26274bd": "getGasCostOfGetAmountsForLiquidity(uint160,uint160,uint160,uint128)", +"e2629974": "transferAssetsToNewContract(address)", +"e26350b9": "_getValidatorService()", +"e26356c0": "depositEDai(address,uint256,address)", +"e263dc82": "phaseOneAt(uint256)", "e264172c": "drainETH()", "e26422fe": "DaysToDestroy()", +"e2644f8d": "PayoutAll(address,uint256)", "e2646a9f": "getICOStage()", "e2649caf": "voteToFreezeFund()", "e264a2f4": "KIN_PER_USD()", @@ -129673,251 +237347,477 @@ "e26534bf": "whaleExchangeRate()", "e2659324": "require_email(bool)", "e265c5e2": "getTotalTokenWithdrawByAddress(address)", +"e26608f1": "lastFiredFund(uint8)", "e2664254": "priceDivisor(uint256,uint256)", "e26659da": "getAllBaller()", +"e266870c": "userBounties(address,uint256[])", "e26693ac": "stakeDice()", "e266e5ad": "Mystical()", +"e267191c": "getRebalanceCut(uint256)", "e267761f": "unmintedGBT()", +"e267aa63": "price0CumulativeLast(address)", "e267dd9b": "addAgent(uint256,uint256,uint256,address)", +"e2680342": "sendROI(address,uint256)", "e26814d8": "withdrawCoins(address,uint256)", "e26835ce": "giveToken(address)", +"e2683dd2": "t1StakeFactors(address)", "e2684f08": "_isPaused()", "e268ea6b": "SOFT_CAP_T()", "e269053a": "getNumberOfAssets()", "e2693180": "DHANACOIN()", +"e269dcf5": "userrmapstruct(address)", "e269f929": "recoverRevokeHash(bytes,bytes,uint256)", "e26a687f": "BP_IMMORTAL()", +"e26a9e6d": "getUserFundETH()", +"e26b013b": "defaultLimit()", +"e26b12d9": "myTotalClaimableReservations()", +"e26b3848": "SwapdUSD(uint256)", +"e26b727f": "moveDaiToVenusFarm(uint256)", +"e26b9b29": "Approval(address,address,uint32)", "e26ba086": "getTargetInvalidMarketsDivisor()", "e26bc039": "numRegisteredModules()", +"e26c0ab6": "bestTrade(address[],address,address,uint256,bool)", "e26c2da9": "TerraToken()", "e26c551e": "publishConditions(string)", "e26c8434": "AdminStartDraw(string,bytes)", +"e26db6fc": "updateAddresses()", "e26dee0e": "IcoExt()", +"e26e2056": "accumulatedPayouts(address)", +"e26e295b": "_deleteOracle(address)", +"e26e3945": "metaCoinAddresses(uint256)", "e26e7b50": "calculateCritMassRewards(uint256)", "e26e8d84": "FillSellOrder(address,address,uint256,uint256,uint256,uint256,uint256)", "e26f0342": "ArrayTypesTest(uint256[10])", "e26f21bf": "setHoldPercentage(uint256)", "e26fdc12": "equipDown(uint256)", +"e26ff10a": "stakeHolders(address)", +"e26ff34c": "getCAAvgRate(bytes4)", "e27008c2": "_createRareCard(address,uint256,uint256,uint256,uint256)", +"e2701c22": "preSalePercent()", +"e2702fdc": "cage(bytes32)", "e270398a": "emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", +"e270b52c": "earned(bytes32)", "e270bc81": "resumeICO(address)", "e270f88c": "_getFreezeTime(uint256)", "e27131f9": "MintCoin()", +"e271a976": "getValueInBurrow(address)", +"e2724b72": "getCyclesLength()", "e2725161": "calculateOdds(uint8)", "e2726e94": "minSumICOStage4USD()", "e272b892": "pauseContract(bool)", +"e272e2aa": "previousAscensionTimestamp()", "e2734c93": "getPlayerBalance(address)", "e273f117": "SetServiceProviderFee(address,uint256)", "e2740b4e": "getTradesRoot()", +"e2740f87": "ApproveUSDT(address)", "e2749799": "GBank(uint256)", "e274a3e7": "Papergold()", +"e274c426": "getTacGia()", "e274fa4e": "BitcoinXL()", "e274fd24": "eventContract()", "e2757a50": "PepFarmer()", +"e2759a33": "trustRegistry(address)", "e275a016": "check_data(string)", "e275f296": "transferFromMulti(address[],address[],uint256[])", +"e2762d4b": "removeWhitelistedLiquidityProvider(address)", "e27671ff": "hillpayout()", "e276729d": "getPeriodStarted(uint256)", +"e2768edc": "marketLibrary()", "e276c799": "getx()", +"e277274b": "setminPPDEX(uint256)", "e2775da5": "getMartialOwner()", "e2776ab8": "CryptoPhoenixes(address)", +"e2784b6e": "LunaCore()", "e2786d65": "refundSplitMembers()", "e278c0f2": "setInvestorsFee(uint256)", "e278d283": "getLineUpEnable_pool(address)", "e278fe6f": "closeRound()", "e2790853": "OX()", +"e2790c8a": "tokenOfFreeze(uint256)", "e27929b6": "addRecord(bytes32,string,string)", "e27a8aca": "addWhiteListedInvestor(address,string)", "e27a9c74": "setOwnerName(uint256,string)", +"e27aa1d8": "isTradable(uint256)", +"e27af3b9": "timeToken()", +"e27af68a": "distances(uint256)", +"e27b4f6b": "cancelSync()", "e27b73f0": "issueWithExternalFoundation(address,uint256,bytes32)", +"e27bc280": "withdrawLocked(address,address)", +"e27c105f": "deployContract(uint256,bytes)", +"e27c2294": "ERROR_REASON_NOT_ENOUGH_UNCLOCKED()", +"e27c32e9": "UNIFARMPerBlock()", "e27c5b17": "testSlice()", +"e27d067b": "validateRequest(uint256)", "e27da9c6": "current_tier()", +"e27e2f18": "setSensorFirmware(string)", "e27e3fd3": "CancelGame()", "e27ecfcc": "LogStartDate(uint256,uint256)", "e27f0236": "agingBalanceOf(address,uint256)", "e27f1692": "Bitsonatoken()", +"e27f3124": "namePizzaExists(string)", "e27f3853": "timeFreezeTeamTokens()", +"e27f49d6": "GetQuotes(uint256,address)", "e27fe50f": "startAuctions(bytes32[])", +"e28039c4": "_hdcoreWETHPair()", "e280b58f": "tokenIssuedLockUp()", +"e280c9ec": "farmPerBlock()", "e280d66b": "updateWonNums(uint256,uint256)", +"e280e26c": "intMaxD()", "e2812256": "Monarch()", "e281d7e4": "CryptoSlotsGame()", +"e2822970": "_usdRate()", +"e2822ea9": "bet(uint8[],uint256,address)", "e282348c": "w_Founders()", "e282726b": "reserveAddr()", +"e2828ef9": "potofgold1Register()", "e282938d": "founderLockEndTime()", "e282969e": "getPerson(uint256,bool)", "e282cda6": "calculateBucketId(bytes32[])", +"e283040d": "NULL_ISSUANCE_HASH()", +"e283672d": "setPrivate(bool)", "e283d1ec": "registerEscrow(string,string)", +"e283da1a": "Created(uint256,uint16,uint16,uint256,uint256)", "e2842d79": "getAllUsers()", "e28435c4": "ownerETHCashout(address)", "e284cbfa": "getAllAdIdsByCat(uint256)", "e284f217": "distributeToAll(uint256)", +"e285cff6": "getFXSReserves()", "e2861c8d": "cashOutProfit()", "e2865b4d": "growCost()", +"e2867ed6": "bonusTokenPerETHUnit()", "e2868c54": "Airdrop2(uint256)", "e2869853": "RefID(string,string)", "e2869f70": "setCrowdsaleAndVesting(address,address,address)", +"e286a842": "SetDiscipleVend(uint256,uint256)", +"e286bca5": "tokenReserveContract()", +"e2872fd6": "updateExpireTime(address,uint256)", +"e28756b4": "p1(uint256)", "e2877e04": "transferFactoryResourceAmount(uint16,address,uint256)", "e287adf4": "addSig(address,bytes32)", "e2889c82": "setTimeLimit(uint256)", +"e288ccdd": "bInit(uint256)", +"e288ea64": "claimJackpot()", +"e2894519": "blacklistAdr(address)", "e2894a8a": "OwnerAnnounce(string)", "e2896598": "leaderTimestamp()", +"e28987b6": "addEarlylist(address[])", +"e2898b69": "ERROR_REASON_PENDING_DEPOSITS()", +"e2899625": "doMint(int24,int24,uint128)", "e289fcb6": "contractActive()", +"e28a327d": "getAvailableCollateral()", "e28a5e63": "sellDeadline1()", "e28ab336": "MAX_INVEST_SHARE()", "e28b0d9a": "updateFundingEndBlock(uint256)", "e28b2b76": "ipoPlatform()", "e28b7555": "CapiterContract()", +"e28cfe2e": "EndDateUpdated(uint256,uint256,address)", +"e28d371c": "collect_dust()", +"e28d4906": "operators(uint256)", "e28d717b": "transferETH()", "e28d8c4b": "claimBonusTokens()", "e28deda5": "sweepTokenAmount(address,uint256)", +"e28e681a": "m_nTotalSupply()", "e28e6b3a": "masterTotalEarning()", +"e28f0e85": "_dropAFIMarket(address)", +"e28f1412": "NewAppProxy(address)", "e28fa27d": "setHardcap(uint256)", "e28fed1e": "userRescues(address)", +"e2908856": "multisend(address,uint256)", +"e2909149": "govTransferFromBatch(address[],address[],uint256[])", +"e290fdc2": "marketingFeeDivider()", "e29121de": "ADVISOR_TOKENS()", "e2912367": "_getValuePartByPercent(uint256,uint256)", +"e2914e08": "xwinBenefitPool()", +"e291ccfc": "getOwner(uint8,bytes32,bytes32,bytes32)", +"e2928ffb": "exchangeRate(uint256)", "e292c740": "setLargeInvestorWei(uint256)", +"e29331a6": "axeth()", +"e2934b68": "_LTRGiftCampaign(uint256)", "e2935edb": "getUpgradeCardList(address)", +"e29392b5": "calculateCollateralAndShareMintAmount(address,uint256)", +"e293d100": "TransferEthEvent(bytes32,address,uint256)", +"e2943ff7": "getNestedMapping(uint256)", +"e294870c": "cranePerBlock()", "e2948c21": "marketingTeamTokens()", +"e294f12f": "lilPepe()", +"e2950c9c": "isCATokensBooked(address)", "e29532c1": "getDataFromCode(string)", "e2954a14": "purchaseSeconds()", +"e295501a": "getRewardLP()", +"e2956095": "presaleEscrow()", "e29581aa": "getNodes()", "e2958974": "read_transfer_config()", "e295c9d6": "getActiveBanners()", "e297273a": "getBlockHashOrZero(uint256)", +"e297b0a7": "getSafetyRatio(address,address)", "e298287f": "senderAddressIsSecretContract(address)", "e2982c21": "payments(address)", "e2985596": "angelCardDataContract()", "e298d85c": "discountBlock()", +"e29917bb": "listTeamDistanceRun()", +"e29929aa": "stakeNow(uint256)", "e2996879": "HuoNiu()", +"e299adbb": "depositWithGasToken(uint256,uint256,address)", "e299beb3": "SimpleIndex()", "e29a2e89": "publishMessage(string,string,string)", +"e29a618b": "withdrawBidForItems(uint256)", "e29a82d3": "BigFishRoll()", +"e29a8d09": "buyPower(uint256)", +"e29bc68b": "vestingBegin()", "e29bfe13": "submitWithdrawTransaction(address,uint256)", +"e29c1979": "finishTransferVaultToNewClaimer()", "e29c6a7b": "addYearToken()", "e29caee2": "currentStageTokensRate()", +"e29cd6af": "_removeSupply(uint256)", +"e29e0974": "lpBalance(address)", "e29e1345": "amountPerDay()", "e29e1864": "PresaleCapChanged(address,uint256)", "e29e3a4c": "artistsArtworkCount()", "e29e436a": "setWorldCupTeamDesc(uint256,string)", "e29eb836": "totalCollected()", +"e29eecd3": "NewReveal(uint256)", +"e29efdb0": "WatchClaim()", "e29f5182": "byte32ToString(bytes32)", "e29f610d": "end1Timestamp()", "e29f99f0": "tokenAdd()", "e29f9da6": "_getrand09()", "e29fa4b4": "setOriginalOwner(uint256,address,address)", "e29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", +"e29ff7f5": "SingleTransaction(address,address,uint256,bytes,address)", +"e2a00544": "_endRound(uint256,int256)", "e2a034dd": "participantsFirst(uint256)", +"e2a0620c": "getGrantTotalClaimed(address)", +"e2a08c9e": "VersionAdded(string,address)", "e2a0d56d": "FundsBurned(uint256)", +"e2a1ae58": "a3CRVToken()", "e2a27ca8": "_setBorderValue14(uint256)", "e2a288c0": "placeCoin(uint16,uint16)", +"e2a293af": "getwithdrawGas()", +"e2a29690": "epochBsdPerBlock(uint256)", "e2a2adc2": "divisionRoundedUp(uint256,uint256)", +"e2a2ae2e": "GasPriceUpdate(uint256)", +"e2a2deea": "constant_getOldDetails(uint256)", +"e2a33732": "getIsMining(uint256)", "e2a3382f": "holdedOf(address)", +"e2a36911": "approve_110(address,uint256)", "e2a376ec": "addContributor(address,uint256,uint256,uint256,uint256)", "e2a38a4b": "removeTokens(address,address,uint256)", +"e2a3b18b": "hydroIDDestroyed(string)", "e2a4853a": "setUint(bytes32,uint256)", +"e2a4ce36": "setFormular(address)", "e2a51b8f": "amountOfParticipants()", +"e2a58200": "removeMintUser(address)", "e2a5c39f": "revealPeriodStartedTimestamp(bytes32)", +"e2a5ecac": "CHANGE_PRICE_DURATION()", +"e2a6118b": "wrapFinish(bytes32,address,bytes,bytes,uint256,string)", +"e2a6fbb5": "Allocate(address,uint256,uint256)", "e2a71f12": "accountDelete()", +"e2a72cce": "getLiquidityProvider()", +"e2a7515e": "swap(address,address,uint256,uint256,uint256[],uint256)", +"e2a7efa7": "getSmallIndexUser(uint256)", +"e2a80ee9": "initialNumForReward(address)", "e2a8215b": "purchaseTokens(address,uint256,address)", +"e2a8f841": "dropped_nfts()", +"e2a92bb0": "bDevVestingTime()", +"e2a92c14": "updateStrategyAddress(address)", "e2a9ba05": "getBoosterDuration(uint256)", "e2a9bb53": "CreateBattleCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "e2a9ca4c": "disableTokenTransfer()", +"e2a9cb60": "rivendale()", +"e2aa1ef3": "getRanking(address)", +"e2aa28e8": "PWDR_ROLE()", +"e2aa2a85": "_rewardCount()", "e2aa2dcf": "CryptoPeopleName()", "e2aa6003": "gameResult(uint256,uint256,uint256,bool,uint256,uint256)", "e2aa6c66": "createPasswordChallenge(bytes20,bytes32)", +"e2aa71c9": "KYC1(address)", +"e2aa773f": "SelectWinner50(address)", "e2aa99ab": "startCrowdsaleY2(address)", "e2aafa21": "inWhitelist(address)", +"e2ab352e": "Postcomplete(address,address,address,uint256)", "e2ab691d": "lock(address,uint256,uint256)", +"e2ac77b0": "hasPendingRewards(address)", +"e2acae2a": "bonusPercentPrivateSale()", +"e2acbb47": "testFailureCondition()", "e2acf75d": "auctionCancel(bytes32)", "e2ad0699": "addCertification(address,bytes32,bytes,bytes32)", +"e2ad4b3a": "setMaxFeeIncrement(uint256)", +"e2adc734": "getInvestmentStatus(uint256)", +"e2adff04": "lossesLength()", "e2ae0c79": "setParentID(uint256,uint16)", +"e2ae93fb": "funds(address)", "e2ae9de0": "deleteArrayUint(bytes32,uint256)", +"e2aeb2ae": "Purchase(uint256)", +"e2af413f": "updateStableCoinAddress(string,address)", +"e2af6b3e": "setSwingyToken(address)", "e2b05077": "getSaleDate(bytes,uint256)", +"e2b07e9a": "test_wmul_trivial()", +"e2b0ac7a": "getOperatorsLengh()", +"e2b0afd3": "WhiteListedCaller(address,bytes4)", "e2b0caef": "when()", +"e2b11a64": "previouslySeenCollateral(address)", "e2b13fa0": "ManagerPermissionRevokedEvent(address,string)", "e2b178a0": "getAuthority()", "e2b202bf": "deleteUint(bytes32)", "e2b20a72": "SecretToken()", "e2b2579b": "isClean(address)", "e2b26323": "proceedToNewStage(int256)", +"e2b332d4": "addTicketList(string[],string[],string[])", "e2b375a9": "transferOwnership2(address)", +"e2b39ae3": "setChainStaticDetails(uint256,string,string)", +"e2b3c0b0": "snartcool()", "e2b43e23": "setDepositInterface(address)", +"e2b4b2f7": "initialize(address,bytes32,address,uint256)", "e2b4b30d": "getvaluejoinlist_odd(uint256)", +"e2b4ce97": "controllerNode()", "e2b4f4b5": "lockedTeamUFT()", +"e2b55dca": "Hundred1Time()", +"e2b57d45": "balanceOfEthInPool(address)", +"e2b612f9": "LogFinalized(bool)", +"e2b6bf6b": "toggleBotThrottling()", +"e2b76c9b": "sushi_eth_usdc_lp()", "e2b770b4": "updateUSDMonthlySalaries(address,uint256,uint256)", "e2b7713f": "Midel()", +"e2b7b4df": "shitcoinMenu(uint256)", +"e2b83ab4": "getterInvestor3(address)", "e2b863cf": "calculatePayout(bytes32,uint256)", "e2b8766c": "testFailTransferNotTransferable()", +"e2b8f8a1": "OnTokensPerUsdRateSet(uint256,uint256)", "e2b91318": "createOptionAndUnderwrite(bool,address,uint128,uint128,address,uint64,uint256)", "e2b9e186": "name_()", "e2b9e322": "bondsOutstanding(address)", "e2ba53f0": "winnerName()", "e2ba600e": "starting_giveaway()", "e2ba6ce8": "m_KYCProvider()", +"e2bb9657": "savePrice(string,string)", "e2bbb158": "deposit(uint256,uint256)", +"e2bbfe24": "setUsdtPOLYN(uint8)", "e2bc1971": "getGamblerGameIds(address)", +"e2bc2a68": "createGen0BudBatch(uint256[],uint256[],uint256[],address)", "e2bca77e": "calculatePrizeAmount(uint256,uint256,uint256)", "e2bd505b": "setTitulaire_Compte_2(uint256)", +"e2bd8a22": "battleLoseReward()", "e2bd8e43": "CodysToken()", +"e2be30c3": "addLockUpPool(address,uint256)", +"e2be328d": "totalTokensForSaleDuringICO()", +"e2be9109": "swapExact1For0(address,uint256,address,uint160)", +"e2bea1ec": "transferNFT(uint256[],address)", +"e2bef754": "setOptionCollaterizationRatio(uint256)", +"e2bf56f3": "ITEMS()", +"e2bfcb42": "bulkClaimReward(uint256[])", +"e2bfe213": "UpgradeBonusLimit(string)", "e2c03ace": "itemsCount()", +"e2c0eee8": "MsgAndValue(string,bytes32)", +"e2c149ea": "directSellAllowed()", "e2c14bdd": "getMapping(bytes32)", "e2c1f02c": "buySuperDragon()", "e2c1f7d7": "firstCapEndingBlock()", "e2c20836": "updateAndGetHodlTotalValue()", +"e2c2a5bb": "authQuoteEngine()", "e2c2ae5a": "isBuyPrice(uint16)", "e2c2d72c": "setChallengeScienceContract(address)", "e2c31be6": "icssale(address)", "e2c345e2": "originalContract()", "e2c38eaf": "findProductIndexById(uint256)", "e2c3941a": "DOG_Token()", +"e2c3e988": "totalUpsSupply()", "e2c3f9a8": "RATE_PUBLIC_SALE()", "e2c41dbc": "depositFunds()", +"e2c43277": "_transferItems(address,address,uint256)", +"e2c486ce": "setPairXBTWBTC(address,address,address)", +"e2c49de1": "stateSenderAddress()", +"e2c4f6e9": "getUnstakeTime()", "e2c516be": "icoReceivedWei()", "e2c518fa": "lastMovement(address)", "e2c5449e": "chanceNo()", "e2c61114": "setImportFee(address,uint256)", +"e2c69519": "createERC20Token(string,string,uint8,uint256,address)", "e2c6d41c": "council()", +"e2c6e438": "supportedToken(address)", "e2c718d8": "right20(uint256)", "e2c76bb0": "SpeculateCoin()", +"e2c77cb4": "returnKeyUserTokens(address)", +"e2c79268": "isValidTokenId(uint16)", "e2c7f7ae": "majorOwnerShares()", +"e2c8416d": "getRegisterName(address)", "e2c86092": "ifoodCommunity()", +"e2c8688c": "getBirdPlusAddress()", "e2c8a8ad": "contributorPoolMintQuota()", "e2c8dd34": "dividendsWallet()", "e2c8e54a": "senderIsPosition(address,address)", "e2c8f7c8": "ARIWallet()", "e2c92a52": "distribute(address,uint256,uint256)", +"e2c964aa": "getListTeam()", "e2c9b07d": "ChangeBillLeasingInfo(uint256,uint256,uint256,bool)", "e2c9bc9e": "GenesisTransfersCount()", "e2ca01f0": "addNewOrUpdateHolder(uint256,bytes32,bytes32,bytes32)", "e2ca481c": "swaps(address,bytes20)", +"e2cab14d": "updateOwnerParameters(bytes8,address)", +"e2cb29a9": "getEthAllocationOnHedge(uint256)", "e2cbb9b7": "evCreatedToken(address,uint256,address,uint256)", "e2cc20bd": "dealerHit()", "e2cc7a51": "signingPrefix()", +"e2ccb077": "getDSAWallets(uint256,uint256)", +"e2cd1412": "addLiquidityToBakerySwapBSCxWBNBPair()", +"e2cdc1ee": "arcticChestPrice()", "e2cdd42a": "vote(uint256,address,bool)", "e2ce7e67": "read_i16_array()", +"e2ce875e": "addCommission(uint256)", +"e2ced449": "getDeployableContractCount()", +"e2ceebd1": "setCollateralMintFee(address,uint256)", +"e2cf55e6": "forceOraclizeUpdate(uint256)", +"e2cf615e": "IPFSToIds(string,uint256)", "e2cf8b0d": "createBundle()", +"e2cf953c": "cambia_luogo(string)", "e2d07a33": "QYKToken()", +"e2d09e79": "hash(string,string,string)", "e2d0d519": "sendOwnership(address,uint256)", +"e2d13f7b": "setInflationContractAddress(address)", +"e2d16d4e": "startChangeTargetPrice(uint256)", "e2d17ab1": "checkGoals()", +"e2d1800f": "getMerchants()", "e2d1da31": "createBuildingOmni(uint32,uint8,uint8,uint8,uint8,uint8,address,bool)", +"e2d1e75c": "approvalDelay()", "e2d2a868": "autoRefundCrowdsaleContributor(address)", "e2d2dcca": "removeMemberAcct(address)", "e2d2e219": "dividendsPerShare()", +"e2d3145b": "initialize(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[100])", "e2d31df4": "getTeamPerfitAmuont()", +"e2d32d18": "tokenSaleFETH(address)", +"e2d349f1": "setBurnDivisor(uint256,uint256)", +"e2d37946": "mutantRewardAvailable()", +"e2d39f9e": "ComplianceSensorReading()", "e2d45f7b": "transferMultipleDelegated(address,address[],uint256[],uint256,uint256,uint256,bytes)", +"e2d54669": "HoldToken()", "e2d56060": "balanceInWei()", "e2d5d11b": "revealCap(uint256,uint256)", +"e2d5f71c": "setMintParams(uint256,uint256,uint256,uint256,uint256)", "e2d6eddc": "get_row_col(uint256,uint256,uint256)", "e2d7a7c0": "setAttrCustom(uint256,uint256,uint256,uint256)", +"e2d7bee4": "setStakeFee(uint256)", "e2d7c64c": "darknodeRegisteredAt(address)", +"e2d82c38": "currentEpochLength()", "e2d84e23": "getLink()", +"e2d8edaf": "getOrCreatePreviousDisputeWindow(bool)", +"e2d90ec7": "_depositedFecoreBalance()", +"e2d9eddf": "triggerMinCount()", +"e2da1f9b": "ASSESSOR()", "e2daeb9c": "NICTO()", +"e2db1fb3": "approve_439(address,uint256)", +"e2db84f0": "releaseAllFunds(address[])", "e2dbbf62": "changeIcoDiscountLevels(uint256,uint256)", +"e2dbd46b": "receiveTeasury(uint256)", "e2dc35e0": "transferFund(address,uint256)", +"e2dc4310": "contribution(address)", "e2dc5da5": "finishMintingTokens()", "e2dc7763": "freeze(address[],bool)", +"e2dc85dc": "removeLiquidity(address,address,uint256,uint256,uint256)", "e2dc9aa1": "addTransaction(string,uint64,string)", +"e2dcb616": "allocateReward(uint256)", +"e2dd3411": "withdraw(uint256[2],uint256[2][2],uint256[2],uint256,uint256,address)", +"e2de3b5f": "getWeightPerSecond(uint256,uint256,uint256,uint256)", +"e2de4c18": "scs(address)", +"e2de4d3f": "SuspendedMarket(address)", "e2dea715": "getMinerId(address)", "e2deaa81": "set_reference(uint256,uint256,uint256)", "e2deb962": "signUp(uint256,bytes32)", @@ -129926,178 +237826,334 @@ "e2df15d6": "setRewardClosed(uint256)", "e2df20d1": "setAvailable(bool)", "e2df2472": "Aurum()", +"e2df5448": "whoOwns(string)", "e2df6c6f": "getBonus3(uint256)", "e2e0c049": "UpdateSellAgent(address)", "e2e15f2e": "Reward()", +"e2e1c6db": "isPool()", +"e2e1de97": "getStakedAmountOfUser(address)", "e2e1ff4d": "getBallotsNum(address)", "e2e267fc": "SintToken(uint256)", "e2e29ffe": "assertThat(bool)", "e2e2e5cf": "UpdateMinBalance(uint256)", +"e2e35000": "_currentWiseDay()", "e2e39498": "_verifySignature(bytes,bytes,bytes)", +"e2e3c237": "updateDepositDebt(uint256,address,uint256)", +"e2e40317": "withdrawablePayment(address)", +"e2e441a3": "nextCreatedIndex()", +"e2e45fe7": "newTransaction(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "e2e51348": "LogContractCreated(address,uint256)", +"e2e52ec1": "write(bytes32,bytes32)", "e2e54288": "getCertificationList(bytes32,bytes32)", "e2e5bd42": "setBetBasic(uint256)", "e2e5fade": "presaleSales()", "e2e616bb": "whiteListEnabled()", "e2e68372": "IAM_PER_ETH_PRE_SALE_RATE()", "e2e686d0": "safeAdd32(uint32,uint32)", +"e2e6f732": "setupWeiPriceForZToken(address,uint256)", "e2e71098": "_FCTOKEN(uint256,string,uint8,string)", +"e2e71f93": "feeAccounts(address)", "e2e794c3": "setPremiumMultiplier(uint8)", "e2e79a02": "level2(address,address)", "e2e7ab3a": "setEthlanceInvoiceContract(address)", +"e2e7afa3": "collectPaycheck()", +"e2e7d264": "admin_balances(uint256)", +"e2e7ec21": "patronageNumerator(uint256)", +"e2e7ed9f": "isValidOutcome(uint256,uint8)", "e2e831cf": "genders(uint8)", +"e2e8445c": "SetUnpaidPercentage(bytes32,uint8)", "e2e8b978": "sizeOfUint(uint16)", +"e2e8f9c7": "revokeIdentityKey(bytes32,address)", +"e2e9142b": "legalSupply()", +"e2e971ae": "collectDeadEth(address)", +"e2e97811": "UPDATE_LAG()", +"e2e97fac": "startPresale3()", +"e2e9dfca": "changeToCoin(address,uint256)", "e2e9e6e8": "updateMaxMinComparables(uint256,uint256,uint256)", +"e2e9e8ba": "feeRo()", +"e2ea1319": "setStake(address)", +"e2ea7e7f": "bproDiscountPrice()", +"e2eab483": "receivePayment(uint256)", +"e2eb0cb6": "totalLess()", "e2eb3336": "_performPurchase(uint256,uint256,address,uint256,address)", +"e2eb41ff": "players(address)", "e2eb91cc": "removeAddressFromOwners(address)", +"e2ec1641": "setProfitParams(uint256,uint256)", +"e2ec4641": "deactivateBooster()", "e2ec6ec3": "addAddressesToWhitelist(address[])", +"e2ec724d": "createBoxMould(uint128,uint128,uint256,uint256[],address[],uint256[],string)", "e2ecb311": "createEscrow(address,uint256,uint256)", "e2ecef03": "boleno()", +"e2ecf093": "transferTokens(address,address,uint256,uint256,address)", +"e2ed8d3d": "placeTrade(bytes32[],uint256[],uint256)", +"e2edc004": "setItem(uint256,uint8,uint8,string,string)", "e2edf7be": "usd2FokenByStage(uint256,uint16)", "e2edfc20": "collectAirDropTokenBack(uint256)", +"e2ee29c3": "claimEthDistribution()", "e2ee2e89": "isPlayerInRound(uint256,address)", +"e2ee30a5": "FreezeAcc(address)", "e2ee9941": "tap(bytes20)", +"e2eef9c3": "_getMetadataCountForDPRequest(uint256)", "e2ef9241": "FawnCoin()", +"e2f02980": "ENABLE_TRANSFERS_ON_SUCCESS()", "e2f0a05a": "TokenCLC(uint256,string,uint8,string)", +"e2f0e526": "phase1StartBlockNumber()", +"e2f1827f": "gettBalance()", "e2f1d298": "_addGroupToMember(address,bytes32)", "e2f23224": "isEnableBuySell()", +"e2f2554c": "depositToken6Reserve()", "e2f273bd": "updateAdmin(address)", "e2f2eb27": "NUMBER_OF_BOOSTERS()", "e2f31829": "updateStatus(uint256,uint256)", +"e2f31f5f": "AddedOffChain(address,uint256)", "e2f35f17": "teamAccountAddress()", "e2f36034": "calculateRevenueAtBlock(uint256)", +"e2f3de67": "monthLevels(uint256)", +"e2f43271": "isKYCConfirmed(address)", "e2f45eba": "PrettyGirl(uint256,string,string)", +"e2f47b16": "earnRewardAmount(uint256)", +"e2f5cc0d": "getstring()", "e2f60706": "specialPurchase()", "e2f60c26": "getMintAuditApproval(address,address)", +"e2f6778d": "assetsETH(address)", +"e2f72f03": "wipeFrozenAddress(address)", "e2f779f3": "withdrawTokensFromCustody(address,uint256,address,address)", "e2f77ae2": "setPriceInExoTokens(uint256,uint32)", +"e2f7b6e4": "setGlobalEffectToken(address,address)", +"e2f80cdc": "GetParkingFee(uint256)", "e2f8a017": "payInstallment(uint256)", +"e2f8a3b1": "pushed(address)", "e2f8b790": "buyBlueStarEgg(uint256,uint16)", +"e2f8d108": "NewService(address,uint32)", "e2f8fa16": "getPendingTaxData()", +"e2f8fd53": "freezeOf(uint8,uint256)", "e2f8feb2": "internal_tester(int256)", "e2f90632": "notTooLongSinceUpdated()", +"e2f97c8d": "votingPowerLimitParameterTitle()", +"e2fa2ff3": "increaseUserPointsMultiple(address[],uint256,uint256)", "e2fa5398": "pack(uint16,uint64,uint64)", "e2fa5fb1": "secondDiscountCap()", "e2fa6f90": "_removeTokenFromOwnersList(address,uint256)", "e2fa9ee0": "openShop(uint256)", "e2faf044": "createDAO(address,uint256,uint256,uint256)", +"e2fb1894": "updateBZXs(address)", "e2fb3d4a": "setReferralSmartContract(address)", "e2fc2691": "upvotePost(bytes32)", "e2fc421d": "crowdsaleStartTime()", "e2fc5d19": "setConfirmations(bytes32,bool,bool)", "e2fc6f68": "beneficiaryBalance()", +"e2fc90ca": "presaleIsRegistered(address)", +"e2fcae42": "contributorDistributedReward(address)", "e2fd38e9": "startEvent()", "e2fd3c08": "OmVPNToken()", +"e2fd6ff9": "getCurrentStrategyUnlockedRewards()", +"e2fdc845": "receivedTokens(address)", "e2fdcc17": "escrow()", "e2fdf807": "purchasableTokens()", "e2fecdf3": "copy(bytes,uint256,uint256,uint256)", +"e2fed7b0": "updateMeta(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint256)", +"e2ff025b": "provableSetGasLimit(uint256)", +"e2ff2d43": "completeWithdrawal(address,uint256)", "e2ffe3f3": "storageToUint(string)", "e3004b57": "depositToken(address,bytes)", "e30081a0": "setAddress(address)", +"e30081d1": "rans(uint256,uint256)", +"e300e4ce": "deprecateCollateralToken(address)", +"e3017826": "referral_percent3()", +"e30182c7": "getCurrentUnmintedRewards()", +"e3021b0a": "approve_30(address,uint256)", +"e30329e9": "getVersion(uint64[3])", "e3038aaf": "calcOrderToMsAmount(uint256)", "e303a92b": "drawLottery(uint256)", "e303cccd": "sellKun(uint256)", "e303e81e": "authorizeForTier(uint256,address[])", "e30443bc": "setBalance(address,uint256)", +"e30470be": "totalBonusOf(address)", +"e3049468": "pre_with_fund(uint256)", "e3049b6f": "getFighters(uint32)", "e3049ded": "AllyNetworkToken()", +"e304c608": "getCdpDetailedInfo(uint256)", +"e304e1d3": "halfWad()", "e305044f": "disableServiceMode()", +"e3056a34": "pendingGovernor()", "e3059cef": "recover(uint8,bytes32,bytes32,address)", +"e305a376": "updateBazarContract(address)", +"e305b3c1": "WalletApproved(address)", "e305c210": "getPositionFromBattleboard(uint16,uint8)", "e30637d6": "REFF_TOKENS()", "e30651b4": "COMMUNITY_CAPPED_VALUE()", +"e3067449": "lastBurnTime()", "e3069e4d": "HTX()", "e306d361": "setUnits(address)", "e306f779": "EIP712_DOMAIN_HASH()", +"e3075e4e": "ticketMax()", +"e307bf2a": "complaints(bytes32)", +"e307c865": "mint_tokens_exist()", +"e307fc2d": "removeAllowedToken(bytes32)", +"e3081a80": "setstartBuyBackTwo(uint256)", "e308262a": "kycPassed(address,address)", +"e3082f6a": "feePoolState()", "e3083fb5": "removeFromContribution(uint256)", +"e3084632": "setTransferFeeReceiver(address)", +"e308632b": "RegisterAdd(address,string,bytes32)", "e308700f": "thresholdEtherLimitForSeedRound()", +"e308b71f": "paidContractDefaultFee(uint256,uint256,address,address,uint256)", "e308c213": "getBag(uint256)", +"e3091a7c": "getDevFundAccount()", "e30922fc": "isGameLocked(address)", "e309396b": "addSchema(string,string)", "e3098986": "totalSold_()", "e309aa15": "RefundSent(address,uint256)", "e309d1b5": "tierTwoRate()", +"e309db3e": "setUniswapV2PairForV1zzznap(address)", "e309f318": "spermlordAddress()", +"e30ac6c3": "conversionRateDecimals()", "e30addb4": "set_property_layout(uint256,string,string,string)", +"e30af348": "accountShareholders(address,uint256)", "e30b407e": "payWinningGladiator(uint256,uint256)", +"e30bad35": "_tier2StartTime()", "e30bd740": "reverse(address)", "e30c36f1": "bubbleSort(uint256[])", "e30c3978": "pendingOwner()", +"e30c3bb9": "lockedValues(address)", +"e30c5c2c": "LogParticipant(address,uint256,uint256)", +"e30c5fa8": "licenceDAOLocked()", "e30c7b0a": "TronXtended(uint256,uint256)", +"e30c9c3d": "changeControllerByMCWS(address,uint256)", "e30ca7cb": "getBalanceOfContractInSzabo()", "e30cfa40": "isExecuted(uint256,uint256)", "e30d1625": "stateUpdate(uint256,uint256,uint256,uint256,uint256,uint256,bytes)", "e30dd27a": "EpsBonus()", "e30dfb94": "callAndFailWithoutReason()", +"e30e1cf4": "getDepositorIndex(address)", "e30e3334": "BonusTokens()", "e30f4e2b": "addMultipleAddressesToWhitelist(address[])", "e30f4f84": "addWhiteBacker(address)", "e30f7c8b": "startAirdrop(address[],uint256)", "e30fe37a": "setQueryAddress(address)", +"e3100d1e": "setBlockMinted(uint256,uint256)", +"e3103273": "remove_liquidity_imbalance(uint256[2],uint256)", "e310c2ca": "emissionPay(uint256)", +"e310fa5d": "yfi()", +"e311bc1c": "BarClosed()", +"e3126368": "permittedPools()", +"e312848f": "_maxGovernValueRate()", "e312e00f": "approve(address,uint256,bytes,string)", "e3140c51": "PCHAIN()", "e31418be": "rateMap(uint256)", +"e3142d56": "setSaleCap(int8,uint256)", "e3142e90": "logInitialReporterTransferred(address,address,address,address)", "e31430c0": "acceptEscrow(address,address,uint256)", "e314d852": "mintWithMemo(string,address,uint256)", "e3153827": "reading_card_reversed_at(uint8)", +"e3161ddd": "updatePool()", "e316bd56": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string)", +"e316e297": "addOrUpdateTokenConfigSource(address,uint256,address,uint8,bool)", "e316e9c0": "Issue(uint256,address,uint256,uint256)", "e31743d7": "setTransferBlocked(bool)", +"e317ef5b": "exchange(address,uint256,uint256,address[],uint256[],uint256[])", +"e3180060": "withdraw_NFT(address,uint256)", +"e3180c32": "saleBalances(string)", "e31870dc": "mlDevelopers()", +"e31877bb": "Admininstrator()", "e318a74c": "RACEFORETH()", "e318b52b": "swapOwner(address,address,address)", "e318de73": "getString(address,bytes32)", +"e319044b": "markProposalWithExpiredAnswerAsInvalid(bytes32)", +"e3195fcf": "approve_585(address,uint256)", "e3199044": "setGoalsPlayed(uint256,uint256,uint256,bool)", +"e319990c": "fname()", +"e319a3d9": "_treasury()", "e319b0e2": "advisorsUnlockedAfterCliff()", +"e319e7b9": "addWei(address,uint256)", +"e31a0079": "getRemQtyForSupply(uint256,address)", "e31a0292": "getostToken()", "e31a7c01": "triggerTransfer(address,address,uint256)", "e31a8116": "getMinPrice()", "e31a9d92": "lastID()", "e31b1aae": "ChangeInterest(uint256,uint256,uint256,bool)", +"e31b789d": "B10(bytes)", +"e31b9c83": "updateCommissionTier2(address,uint256)", +"e31bdee6": "collectAMMFee(address[],address)", "e31bfa00": "next_id()", +"e31c5a1f": "mintStock(address,uint256,uint256,uint8,bytes32,bytes32)", "e31c60e3": "Request(address,uint256)", "e31c71c4": "safeToSub(uint256,uint256)", +"e31c7b8d": "Deposit(address,uint256,address)", "e31d3460": "addused(uint256)", "e31d3938": "MINT_INTERVAL_SEC()", +"e31d48ad": "bidRatio(uint256,uint256)", "e31e0c46": "set_end_block(uint256)", "e31e2d6d": "func_0A93()", "e31e450d": "checkBoard(uint256)", +"e31e5164": "relayTokens(address,uint256,address)", +"e31edd5d": "campaignListLength()", +"e31f120e": "isMiniBEP2Token(bytes32)", +"e31f27c1": "incrementShorts(bytes32,uint256)", "e31f28ef": "getTransferInfoTime(address,uint256)", "e31f3e0c": "startUpgradePoll(address)", "e31f4263": "theCamp()", +"e31f584c": "getMaxCollateral(uint256,bytes32,address)", +"e31ff556": "foreignPair(address)", "e31ff6c2": "recordOffChainContribute(uint256,address,uint256)", "e3206975": "bet_MAX()", +"e3208a3a": "kickAss1(bytes32)", "e321045a": "_storeSettingDeprecation(uint256,address,address,address,uint256,address)", "e321192b": "addTransaction(address,uint256,uint256,string,bytes)", "e3218219": "DungeonTokenAuction(uint256)", "e321adb3": "_canTransfer(uint256,address)", +"e321be7e": "agst()", +"e321bf77": "basePrice13()", "e3224ac3": "piecesOwned(address)", +"e32261fe": "short(bytes32)", +"e322ef4c": "ENTROPYSEEDS_PROVENANCE()", +"e322f1fe": "compoundComptroller()", +"e322f2b9": "getCumulatedBuyBackPrice(uint256,uint256)", +"e3235c91": "MAX_ADDRESSES_FROM_RESOLVER()", "e32381b6": "kscMintTo(address,uint256,string)", +"e323e2be": "refundMoney(address)", +"e323f825": "depositTo(address,uint256,address,address)", +"e3240325": "CanceledMortgage(address,uint256)", "e32497c4": "getArtefactsIds()", +"e324abaa": "DEA()", +"e324ecba": "onFundingReceived(address,uint256)", +"e324fe92": "addInvestorsToWhiteList(address[],bool[],bool[],bool[])", "e3252a76": "oraclize_randomDS_proofVerify__sessionKeyValidity(bytes,uint256)", "e32540b4": "OptionTransfer(address,address,uint256,uint256)", "e3256429": "COMPANY_RESERVE_FOR()", +"e325c357": "setFastStakingCard(address)", +"e325ef74": "getStakerStakedContractLength(address)", "e325fb4b": "bonusCap()", +"e3260506": "queryIdToIsEthPrice(bytes32)", +"e326ac43": "firstSeen(address)", "e326acbf": "uintFloor(uint256,uint256,uint256)", +"e326dbbf": "setBasicParams(address,address,address,address)", "e326e6ad": "DEFAULT_PRESALES_DURATION()", +"e327105d": "approve_216(address,uint256)", "e32754a0": "MyFreeCoin112(uint256,string,uint8,string)", "e327a46f": "breakdown(uint256)", +"e327a6af": "isOwner(address,uint256)", "e3280126": "addOrder(string,bool)", +"e328c7ae": "query_user(address)", "e328cc5c": "getActiveArbiters()", "e328ef67": "INDInflationVesting()", +"e328f299": "__isReceivableAsset(address)", +"e3292a87": "getPriceByMetadataUri(string)", "e3296684": "transferToPie(uint256)", "e329e871": "endTime1()", "e32a29bb": "burnClosedTokenMultiple(bytes32[])", +"e32a3b52": "totalStakedPower()", "e32aa56a": "acceptLastMilestone(bytes32)", "e32ae93b": "getQueueOpening()", "e32af410": "CSClosed(bool)", "e32b349a": "JCB()", +"e32b3f52": "BURN_FOR_ADDRESS()", "e32b6325": "releaseForIco(address,uint256)", +"e32bb67b": "setDefaultGasLimit(uint256)", "e32c5f01": "managePID(uint256,uint256)", +"e32c6329": "submitGuess(uint256)", "e32c65f2": "tokensPerWei15()", +"e32c7c59": "requestVoucher_TKN_ETH_WithPermit(uint256,address,uint256,uint256,uint8,bytes32,bytes32)", "e32cb7fc": "decimalPlace()", "e32d264e": "addDefaultOperatorByTranche(bytes32,address)", "e32d5cf8": "setApprovals(address,address,uint256)", @@ -130105,19 +238161,34 @@ "e32e68ec": "isNewSchool(uint256)", "e32e9f22": "setDeploymentReward(uint256)", "e32ecd18": "LEXT()", +"e32ecfcf": "setInterests(address,uint256)", "e32ef3c5": "refereesCount(address)", +"e32fa6d3": "ExtraMint()", +"e3303657": "ChangesDenied()", "e33051dd": "setGasPriceLimit(address)", +"e3305bd3": "approveBuyer(address,uint256)", "e3306a6f": "CurrentStatus()", "e330a737": "setCrowdsaleCloseTimerFor(uint256)", +"e330a935": "setNonce(address,uint256,uint256)", +"e3315f40": "PHILO_TOKEN()", +"e331c928": "setRainmaker(address)", +"e331d039": "swapFor(address,address,uint256,uint256,address,address)", "e332dfe9": "Token0901(uint256,string,string)", +"e3338c1c": "Unpause(address,uint256)", "e333f969": "setUserAllocMax(address,uint256)", +"e3342950": "addmarketingAndSalesAddress(address)", "e3343501": "_playRealOdds(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e3346891": "swapEthForSaleTokenxczs()", +"e334924a": "totalOhmsReward()", "e3349637": "addshop(uint256,string,string,string)", +"e3349c6a": "_borrowedTransferFrom(address,address,uint256)", "e334cd92": "getAstrosLength()", "e334f32e": "encodeString(string)", "e3350d7c": "setValidKYC()", "e3353f3e": "increaseBlockTarget()", +"e3356cd5": "ivaultPerBlock()", "e335b5e9": "allocateSupply()", +"e335cfab": "withdrawSelfStake()", "e335e1f8": "LogFundsLocked(address,uint256,uint256)", "e33607da": "saleMarket()", "e336e01d": "saleQuantity()", @@ -130126,106 +238197,180 @@ "e337dd35": "SendingBounty(bytes32,uint256)", "e337eca6": "TalkBounty(bytes32)", "e3380b7e": "joinPillarCore(uint256,uint256,uint8)", +"e3382b2d": "getBuyTradeLimitAndClass(address)", +"e33865b3": "STATUS()", "e3386a98": "trustedToken()", "e338a490": "DEVELOPER_FEE_FRAC_BOT()", "e3393a6d": "voting(string)", "e3396d2f": "updatePlayersCoin(address)", +"e33973c2": "changePool(uint256,uint256,uint256)", "e339886c": "ADDR_WITHDRAWAL1()", "e3399538": "ArithValue()", "e33a9ab7": "createOffer(uint16,uint256)", +"e33b5f5f": "networkFeeParams()", "e33b7de3": "totalReleased()", "e33b8707": "append(uint256)", "e33ba574": "hashSecret(bool,bytes32)", "e33bb62a": "BRDCoin()", +"e33c3d3f": "DistributeProfitsOBELIXFund()", +"e33c3fcb": "AirDrop_SinglerSender(address,uint256)", "e33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", "e33c9755": "getActionIds(bool,bool,bool)", "e33d27e4": "complete_sell_exchange(uint256)", "e33d28d7": "vestBalanceOf(address)", "e33dafbf": "emitters(bytes4)", +"e33e5580": "superprizeAddress()", "e33e59d8": "getInsuranceContracts()", "e33e5c5e": "getAddressUInt8(bytes32,bytes32)", +"e33e6b89": "writeNoInputName(string)", +"e33eaaf7": "ContractTransferAllFundsOut()", "e33f6aaf": "getOnBurnAmountValue()", +"e33f77ca": "getState(string)", +"e33fcf07": "setBreedingAddress(address)", +"e3404ecf": "startFreezePeriodDate()", +"e3405c37": "userLockInfo(uint256,address)", "e3407276": "bigModExp(uint256[6])", +"e340a29a": "upbaseFactor()", "e340c2fb": "bidETHIncrement()", "e340d0d6": "renewDec(uint256,uint256)", +"e3412e3d": "addLiquidity(address)", "e3419202": "redits()", +"e341a987": "saleOverSet()", "e341eaa4": "sign(uint256,bytes32)", +"e342b598": "unlockAll(uint256[])", "e342c2e6": "investorWhiteList()", +"e3433615": "createPool(address,address)", +"e343fe12": "swap(address,address,address,uint256,uint256)", "e343fea6": "contractPays()", "e344606b": "hashtagCommission()", "e34486f8": "isActivePoll()", "e344ce6b": "updateWhiteLists(address[],bool[])", "e3450e13": "lastPlayer()", "e34514ba": "getVirtualBalance(address)", +"e3452e73": "approve_898(address,uint256)", +"e3454c51": "userQuotaStateMap(address)", "e345514c": "CreateTokenToTax(address,uint256)", +"e34592ac": "switchReceive()", +"e345a380": "unstakeEarly(bytes32)", +"e345e0bc": "allowance(uint256,address)", "e345f098": "showLastBidder()", +"e345f8d1": "fetchRecord(uint256,bytes32)", +"e345f925": "releaseConfig()", +"e3462048": "finishUpgrade(string)", "e34639cb": "AllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"e3463fd7": "usersm4Matrix(address,uint8)", "e3464b1b": "Drop()", "e346b380": "totalPreSale()", "e346f79e": "submitTokens(address)", "e3470882": "markFirstSaleComplete()", +"e3476cd4": "takeDebtSnapshot()", "e347a773": "shares(bytes32,bytes32)", +"e3480e31": "setBytes32Code()", "e348270d": "killMePlease()", +"e3485946": "calculateExitTime(address)", +"e34880dd": "changeATFactoryAddress(address)", "e3489a4f": "setII_R1(uint256)", +"e34918ff": "RewardDistributed(address,uint256)", "e3495569": "MAX_DISCOUNT()", +"e3495a39": "upgradeWallet(address,uint256)", +"e349621d": "payToMakeOffer()", "e3499381": "checkPlayerPayout(address)", "e349c313": "addPlayerToBoard(bytes32,bytes32)", "e349c7df": "settleUncle(bytes32,bytes32)", "e349cb12": "change_name(string)", "e349f108": "jokerAddress()", +"e34a0890": "RAINBOWBalance(address)", "e34a90a7": "distributeBounty()", "e34ac873": "avatarTransferState()", "e34ad653": "EmissiveToken(address,string,uint8,string,string)", +"e34ae240": "profitableBelow(uint256)", +"e34afb08": "withdrawalAnnouncements(address,address)", +"e34b5c82": "swap(uint256,address[])", "e34b7983": "doPremine()", +"e34bc6f3": "PARAM_BOOK()", +"e34bd8a0": "sortDis50()", +"e34c331c": "hasValidUniV1Route(address,address,address)", "e34c3896": "FundUpdated(uint256)", +"e34c7772": "IsReadyWithdrawInvestment(uint256)", "e34c8dbf": "distributionDate()", "e34da795": "claimTokens4mBTC(address,uint256)", +"e34db7ac": "setInvestNumerator(uint256)", "e34dd755": "CrowdsaleAddress()", +"e34e0af7": "MmMnnUbYIuinU87786756()", "e34e1700": "StarlightToken()", "e34e32c0": "assignOwnership(address)", "e34e5786": "test_testableStandardCampaignPayoutToBeneficiary()", "e34e7889": "unlistDomain(string)", "e34e7cda": "maxRoundDelta()", +"e34e9137": "viewDoubleDividendByIndex(address,uint256)", "e34f2a9e": "fundingStartTimestamp()", "e34f7137": "_performApprove(address,uint256,address)", "e34f947d": "repairCar(bytes17,string,string,uint256)", "e34f9dcc": "GCOXPACToken(string,string,uint8,uint256)", "e34ffcb8": "changeMinAmount(uint256)", "e3500b48": "setResolver()", +"e350328c": "_setStage(uint256)", +"e3503ca2": "syncPrice(address)", "e35060d9": "RequestEthereumCollect(address)", "e350b490": "gameToWinner(uint256)", +"e350b8e4": "STAKE(uint256,address)", +"e351140f": "log(uint256,address,bool,bool)", +"e351869c": "checkTokenExists(address,uint256)", "e3524d36": "getCurrentDiscountPercent()", "e3528455": "burnPrimordialTokenFrom(address,uint256)", "e3530e9c": "spendFromMultisig(bytes32,uint256,address)", +"e3537d68": "amendOffer(uint256,string)", "e3539dcc": "LogReceivedETH(address,uint256,uint256)", +"e35410b0": "AttributeTypeAdded(uint256,string)", +"e35430ed": "unsubscribeFromTrip(string)", "e3546ac5": "isRatio()", "e354a3f2": "freezeAccount(address,bool,string)", "e35501be": "activate_admin_commission()", "e3552808": "RoboToken(uint256)", "e35568cb": "getAvailableTokens()", +"e355bdd4": "getAllUserTokenSymbols(address)", "e355cd4a": "SharkPool()", "e35694c0": "callFunction(address,address,uint256,bytes32)", +"e357420e": "timeLastCollectedBenefactor(address)", "e3577e71": "setPaymentSettings(string,string)", "e3579ea5": "publish(string,string,address,uint256)", +"e357b1d3": "adjustPrice(uint256,uint256)", +"e35804f2": "isStale(bytes32)", +"e3581b68": "log2ApproxTimes1M(uint256)", "e3583870": "replaceDecomissioned(address)", "e358b0e1": "withdrawPreICOEth()", "e358d75a": "getFairymasterReq()", +"e35977a6": "maxDownLimit_(address)", "e3599c21": "updateGame(uint8,uint8[],uint32,uint8,uint8)", +"e3599c58": "API_UpdateLatestJoinTime(address)", "e359cbbb": "hasEnoughBalance(address,uint256)", +"e359f0ed": "pairAllowStates(address)", "e35b37fe": "TRANSFER_COST()", "e35b8717": "GolixTokenDistribution(uint256,uint256,uint256,address,address,address)", "e35b9699": "Namek()", +"e35bff96": "isSwapActive()", "e35c606b": "JiggsR()", +"e35c6b00": "setNewTokenUnitsPerOldToken(uint256)", +"e35c8026": "counterPercents()", "e35c96d4": "NextToken(address)", +"e35ca137": "fetchBHT(address)", "e35ca326": "cancelOrder(uint80,bool)", "e35d1a86": "sendFundsToOwner(address,uint256)", "e35d3590": "AddSocialAccount(bytes32,bytes32,bytes32)", "e35d75a9": "tokensToEthereum_3(uint256,uint256)", +"e35da7fc": "openChannel(bytes32)", +"e35df13e": "walletInfos(uint256)", +"e35e57a1": "copyFromStorageLong()", "e35e6078": "tokenPerUsdDenominator()", "e35e6e0c": "setPrice(uint16,uint16,uint8,bytes32,uint256)", "e35f0254": "numberOfProposals(string)", "e35f4db3": "developer_edit_text_amount(string)", +"e35fb5d8": "_flipper()", +"e35fc7e2": "buyPool10()", +"e35fe366": "verifiedUsers(address)", +"e360020a": "stakeFlip(uint256)", "e3602077": "withdrawInWei(address,uint256)", +"e36057b7": "delayStartTime(uint64)", "e360736e": "getHistory(string)", "e360a49e": "latestUpdate()", "e361112a": "isPaying()", @@ -130236,161 +238381,303 @@ "e362efdc": "getTotalPayout()", "e362f168": "CoinAdvisorPreIco(address,address,uint256,uint256)", "e362fcaa": "Creditors(address)", +"e3636038": "testTransToken1toExch1()", "e3637435": "supportAccount()", +"e3637b66": "totalPaidCustV(address)", +"e3638d65": "isMigrator(address)", +"e36407b6": "addLiquidity(address,uint256,uint256,uint256,bool,uint8)", "e3643106": "getLatest(uint256,uint256)", "e364bd01": "KEOS()", +"e364db92": "dueCheck(uint64,address,uint256)", +"e3650366": "hasServiceFee(address,uint256)", "e3650781": "setGasForGR(uint256)", "e3651ef3": "fetchRecentSubmittals()", "e3659e69": "CNIFCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e365c472": "getAuctionMakers(address,uint256)", "e365fd7f": "setMiniPoolEdit_8(string)", "e3661586": "confirmManager()", "e3669d7c": "Ballot(string,bytes32[])", +"e366c1c0": "ValidatorAdded(address)", +"e366da2c": "assetDecimals(address)", "e3677664": "transferPiece(uint256,address)", +"e3684e39": "metadata(uint256)", "e3685ef7": "PocketMoneyContract()", "e3686b49": "PopeCoin(uint256,string,uint8,string,address)", "e3688d7a": "maxNumMC()", "e3692473": "setMockedDate(uint256)", +"e36987be": "NewMaxTimeHolder(uint256,address)", +"e3698853": "kill_me()", "e3699763": "_addAddress(address)", "e36a0e6e": "hasPermissionFrom(address)", +"e36a4ec7": "bondedToken()", +"e36aab9d": "checkpointAndCall(uint256,uint256,uint256,bytes,address,bytes)", +"e36aed28": "lockWithdrawals()", +"e36aef5b": "incumbent(address)", "e36af50d": "betsKeys()", "e36b0b37": "stopSale()", +"e36b9813": "monRecords(uint256)", "e36b9b9f": "addMemberById(uint256,address,address)", "e36ba174": "updateMaxCapEthOnce(uint256)", +"e36bd0f3": "refunds(uint256)", +"e36bd90d": "updateMatchingBonusUplineLimit(uint256)", +"e36c15e6": "WhiteListCost()", "e36c2072": "countCourses()", +"e36c3ace": "razName(uint256)", "e36c3f70": "BENEFITToken(uint256,uint256,uint256,uint256,uint256)", +"e36c62a2": "resetMode()", "e36d036c": "mintPresale(uint256,address)", "e36d3844": "CardCreated(address,uint256,uint256,uint256)", "e36d392c": "DeliverInfo(uint64,uint256,uint256,uint256,uint256,bytes32,uint64,bytes32)", "e36d3a43": "SENDING_BLOCK()", +"e36d4590": "setY1(address)", +"e36d6498": "startingIndexBlock()", "e36db785": "creditor()", "e36dd1f9": "withdrawalMoneyBack()", "e36e1051": "setcardsalemoney(uint256,uint256)", +"e36e25ff": "setMN(string,string,string,uint256,string,string,string)", "e36e5d18": "showTopsPlayer()", +"e36e6d3e": "validateTrades(uint256[],bytes32[],address[])", "e36f3177": "maxIssuingSupply()", +"e36f3236": "_usdn3crv()", "e36f3e7c": "getAddressDescription(address)", +"e370f7c1": "RejectionReason()", "e3710599": "SendTokens(string)", "e371817e": "calculateTokenAmount(uint256,address)", "e371c0e6": "transferPermissions(address,uint256)", "e371cdd4": "luke(uint256,string,string)", "e371dfdb": "allFamily(uint256,address)", +"e37218f9": "originMintAmout()", +"e3726115": "getProposals(uint256,uint256,address)", "e372d0eb": "ownersOfArea(uint256,uint256,uint256,uint256)", +"e372ee44": "taxMany(uint256,uint256)", "e37362ab": "NRB_Main()", +"e373b6b5": "contractIsSigned(bytes32)", +"e37404a6": "seizeInternal(address,address,address,uint256)", "e37426d4": "StopCrowdsale()", +"e374a0d3": "mintedByCrowdsale()", "e374e8d4": "isMyWalletLocked_Receive()", +"e3752029": "Confirmations(bytes32,address)", +"e375b64e": "lockTokens(address,address,address,bytes)", "e375dfed": "StarbaseCrowdsale(address,address)", +"e375f961": "paidMegaPoolGain(uint256,uint256)", +"e3766292": "necroCount(uint8)", +"e376a8cd": "TokenDropped(address,address,uint256,uint256)", +"e3776764": "isChildFarm(address)", +"e3779f76": "newStealRewards(uint128,uint128[])", "e377ac31": "legal()", +"e377e966": "buyerInfo(uint256)", +"e377fe35": "getMdxReward(uint256)", "e3787c61": "TestContract(string)", "e3788da6": "ExternalAccountsBase()", +"e378e720": "sellableValue(address)", "e378f045": "window0TokenCreationCap()", +"e379c31b": "initializeTwap()", "e37a012f": "fireEventOnTokenTransfer(address,uint256)", "e37a7fff": "newPlayer(uint256,uint256)", "e37aa618": "distributeValue()", "e37aca99": "BOXICOIN()", "e37b346d": "redistribution()", +"e37b52c2": "getAmountWithFee(uint256)", "e37b71ce": "getFundTX(address,uint256)", +"e37b917d": "DrawGif(uint256)", "e37bddc3": "changeEnd(uint256)", +"e37c3289": "failedMessageDataHash(bytes32)", +"e37c6225": "setMetadata(string,uint256,string,address,bytes32[])", "e37c6cf8": "redeemDisavowedTokens(address)", "e37c8613": "balanceOfPendingToken(address)", "e37ccac7": "getSuperseded(address)", "e37cd202": "getBonusRate(uint256)", "e37d46bd": "myDivs()", +"e37d4b79": "venusBorrowState(address)", "e37d4fed": "withdrawToFounders(uint256)", "e37d883a": "NumbersToken()", +"e37da23a": "changeMaxMintable(uint256)", +"e37db511": "addToNestedMapping(string,uint256)", +"e37e1747": "set_mint_account(address)", "e37e26cc": "_buyFromMarket(uint256,bool,uint256)", +"e37e2eac": "getBuyerBills(address)", "e37e60d1": "testControlRetractNotOwner()", "e37e7d1a": "init(address,uint256[],uint256,uint8)", +"e37f9566": "IMP07()", +"e37ff29f": "initialize(address,bool,uint256)", "e380575a": "presaleFundsRaisedInWei()", +"e38075d4": "ZEROxBTCLovers(uint256)", "e380ae96": "setNow(uint256)", "e380b7bd": "balanceOfToken(address,uint256)", +"e380cd30": "calcRewardFor(address)", "e38138a2": "startPurchaseTokens()", "e3814b19": "fromUint(uint256)", "e38180ec": "addToPayeeBalance(address,address,uint256)", +"e381906b": "getAmntClaimedBy(address)", +"e38192e3": "removeLiquidity(address,uint256,uint256)", "e381a8d9": "StegoCoin()", +"e3820ba0": "generateDebtAndProvideLiquidityStake(address,address,address,address,address,uint256,uint256,uint256[2])", +"e3822207": "getSetting(bytes32)", +"e3824462": "future_admin_fee()", +"e382930a": "PaymentClaimed(address,uint256,uint256)", "e38296e4": "changeDelegate(address)", +"e3829c0b": "topBidAddress()", +"e382add4": "isPermittedAddress(address)", +"e382afc3": "getArbiter(bytes32,address,address)", "e382b854": "_setPackedTimestamp(bytes20,uint256)", "e382c3e6": "getPeriodBonus()", "e382fe45": "deathData_v4()", +"e3830e28": "crv_minter_addr()", +"e38335e5": "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)", "e383da38": "totalAffiliateTokensSent()", +"e383fae8": "LPRewardsContract()", +"e3843463": "isSender(address)", "e3843f6e": "myLoseShare()", "e3844a61": "isBetPossible(bool)", +"e3845cf4": "garmentDesigners(uint256)", "e3848e5b": "thing(string,string,string)", +"e384c6b9": "ETH2STRONG(uint256)", +"e38507cf": "buyOptionsPayfor(address,address,uint256,uint256)", +"e3852eca": "replaceModule(bytes,address)", "e385b43a": "DistributionNextPos()", "e385f7d2": "SendResult(uint64,bytes18,bytes32,bytes11)", +"e386b0e9": "MintRequest(uint256,uint256,uint256)", "e3873ad7": "setDepositBankFee(uint256)", +"e3875610": "changeStartFarmingTime(uint256)", "e3877391": "DDJETHToken()", "e3877acd": "frozenDaysForAdvisor()", +"e3878667": "removeLiquidityOneCoinDust(address,address,address,uint256,int128,uint256)", "e38787aa": "internalBurnTokens(address,uint256)", "e387d31a": "estateRegistry()", +"e3880ec6": "defineToken(address,uint256,string,string,uint256)", +"e388c423": "vesting(address)", "e388cbb9": "swpFundDeposit()", +"e38999c0": "poolInfo(uint256,uint256)", "e389b63f": "transfer(address,uint256,bytes,string,uint256)", +"e389d712": "currentOLYProfitForEpoch()", +"e38a303b": "isUpgrade()", +"e38a4747": "PROPOSAL_DGAS_AMOUNT()", "e38bc1f0": "timeThatFinishGuaranteedPeriod()", "e38c35b6": "getLockedUserBalance(bytes32)", "e38c4585": "JointICOContractAddress()", +"e38c7dcc": "mapPID_timeStart(uint256)", +"e38c93d0": "_decode_sol_bytes24(uint256,bytes)", "e38c9825": "maxgame()", "e38cc06b": "testDiv()", "e38d0fbd": "FirstTradingEcosystem()", "e38d6b5c": "maxPrice()", "e38d7e99": "_next_id()", "e38da1a1": "storeDoi(bytes32,bytes32)", +"e38dd396": "investorsList(address)", "e38e2cfb": "step(uint16)", +"e38e3b24": "create(address,uint256,string,bytes)", +"e38ef7a3": "getEthCreationFee()", "e38f4861": "initLock()", "e38fbdf6": "addBoundary(address)", +"e38fe040": "getPriorVotesinPool(address,uint256)", +"e38fe473": "FAILURE_PURCHASE_TRANSFER_LIMIT_MESSAGE()", "e38ff5dc": "updateInvestor()", "e39062f5": "MDTKAirdrop(address,address)", "e3906b3d": "mintNextCard()", +"e3907143": "getRefundedAmountByRequests(uint256,uint256)", +"e390a1b8": "isAudit()", "e390e263": "disableWhiteListForever()", "e3914699": "dEthereumlotteryNetWinners(address)", +"e3914a39": "setBurnrate(uint256)", "e391a7c4": "revokeSignaturePreSigned(bytes,bytes,uint256)", "e391b3d1": "ssword(string)", "e391bda5": "transferImpl(address,address,uint256)", "e39253e6": "SampleToken(uint256,string,uint8,string)", "e392a521": "indexPrice(uint8)", +"e393065c": "_depositPosition(bytes32,address,address,uint256,uint256)", +"e3936355": "approveProof(bytes32)", +"e3937725": "totalDiff()", +"e39383a4": "transactionConfirmations(uint256,address)", +"e39431b0": "WHITELIST_DISCOUNT_FRAC()", +"e3944049": "takerOrderlist(address,uint256)", "e3945eba": "planetLife(uint256,uint256,uint256)", +"e3946556": "setWhiteList(address[],uint256[])", +"e394732b": "feeFund()", +"e3950c92": "view_int8()", +"e3952eef": "modify_moa(uint256,uint256,uint256)", +"e3956a95": "burnRewardTokens()", +"e3956ed0": "lastSwapPrice()", "e395983a": "bountyTokensBatch(address[],uint256[])", "e39608af": "ETUToken(string,string,uint256,uint256)", "e3961174": "tokensCreationCap()", "e3964b8c": "ERC20Token(string,string,uint8,uint256,address)", "e3967d6a": "currentTimeBonus()", "e3967eed": "totalUserNumber()", +"e3968d58": "resultNumber(bytes32,bytes32,uint256)", "e396bd60": "LogEscrowWeiReq(uint256)", +"e396c2fb": "depositValue(uint256)", "e396da73": "checkProof(bytes32,bytes32[],uint256)", "e3973b5a": "NiteshToken()", +"e3976edf": "pendingAddresses(bytes32)", "e397dfd1": "updatetoken(uint256,string,string,uint256)", +"e39824c6": "claimedReferredTokens(address)", +"e3987e0d": "PayInterest(address,uint256)", "e39898d1": "checkSaleValid()", +"e3991b0c": "buyingWBTCTokenFee()", "e399331b": "coinAllocation()", "e3994993": "addDiary(string)", +"e3996410": "withdrawUnclaimedTokens(address)", "e399cb0d": "initializeCappedFundraiser(uint256)", "e399daab": "zoomraffleFee()", +"e39a36ef": "usersMatrix(address,uint8)", "e39a686c": "ChainBackedOption()", "e39b2284": "ZEONPrivateSale(address,address,address,uint256,uint256)", "e39b40d8": "_createCard(string,uint256,address,address,bool)", +"e39b80c4": "maxEpochPeriod()", +"e39b8265": "readUsersEth(address)", +"e39babac": "setXChangerImpl(address)", "e39bbf68": "dividedBy(uint256,uint256)", "e39bdfab": "getCutie(uint40)", +"e39c08fc": "earned(uint256,address)", "e39c6d80": "batchTransfer(address,uint256[],uint256[])", "e39c742a": "_caluLocktime(uint8)", +"e39ca6d3": "OnFreeLostToken(address,uint256,uint256,address,uint256,uint256)", "e39cbe80": "senderAdminAndSaleNotFinal()", +"e39ceb52": "indiceAtos(uint256)", "e39d2a98": "nextCommonTTMTokenId2()", "e39dcc21": "blah()", +"e39dd79c": "setPrice(uint256[])", +"e39e071d": "currentIphoneMade()", +"e39e08c1": "marketplaceExecute(address,address,bytes,address,uint256)", +"e39e134b": "footballerToOwner(uint256)", +"e39e45e2": "fundStatus()", +"e39e5569": "initTokenSUPPLY()", "e39ebde9": "FOLIToken()", +"e39f722a": "lastRefundMonth(address)", "e39fa059": "queryRandomCallback(bytes32,string,bytes)", "e39fbd88": "tokensDispensed()", +"e39ff19f": "transferFunds(address)", "e39fff72": "Divs()", +"e3a057c9": "testComplexCombinationWithOnlyOwnerOracle()", "e3a0a148": "giveOwnership(address)", "e3a0de36": "admin(string,string,string,string)", "e3a12480": "getBalance(uint8)", "e3a135b9": "_bid(uint256,uint256,uint256,uint256,address)", +"e3a15141": "NotEnoughValue(uint256,uint256)", "e3a199d6": "testThrowCreateNewRevisionNotUpdatable()", +"e3a19fd6": "MNEOneYearBondsCount()", "e3a2a327": "SmartCityCrowdsale(address,address,address,uint256)", +"e3a2e04f": "Eth_Raised()", +"e3a326a2": "verifyClaim(address,uint256,address,uint256,bytes32[])", "e3a37ea2": "newIndex(bytes32)", +"e3a3a411": "MultiTransact(address,bytes32,uint256,address,bytes,address)", "e3a47b00": "standing()", +"e3a4e5e7": "getReservedPoolValue(address,address)", "e3a531a3": "setSaleAuctionContractAddress(address)", +"e3a5ab78": "swapWithReferralMulti(address[],uint256,uint256,uint256[],uint256[],address,uint256)", "e3a5f6f8": "_receiveToken(address,address,uint256)", +"e3a69092": "addAuction(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "e3a70ec1": "max_goal_amount()", "e3a71e32": "deliverBonusTokens(address[])", "e3a75485": "TORUE()", +"e3a78c40": "airdropBalances(address)", "e3a797f1": "getCandidateMemberInfo(uint256)", "e3a79840": "finishPresale(uint256,uint256)", +"e3a7c8fb": "HEXmeLobbyEntryQueue(uint256)", +"e3a7c903": "unlockVotes()", +"e3a7ca15": "approve_638(address,uint256)", "e3a7f45a": "ecrecoverWrapper(bytes32,uint8,bytes32,bytes32)", +"e3a81b76": "CHIPContract()", "e3a83290": "SALE_address()", "e3a861a4": "setCrydrView(address,string)", "e3a87f8b": "secondPrivateReleaseTime()", @@ -130398,6 +238685,8 @@ "e3a8b345": "emptyContract()", "e3a8e29c": "addBorrower(address)", "e3a8e50b": "Subscription(bytes,address,bytes)", +"e3a94051": "destroy(uint256,uint256)", +"e3a946d8": "usdn_gauge()", "e3a94e9f": "addPacksToStandardSale(uint32[])", "e3a96cbd": "getDispute(uint256)", "e3a9744b": "mintTokens(int256,uint256,address,bool)", @@ -130410,37 +238699,74 @@ "e3aa3fbb": "startEscrow(string,uint256,uint64)", "e3aa62b1": "responsavel()", "e3aae11b": "isStartGame()", +"e3ab5449": "_requireTCRoverMCR(uint256)", "e3ab8492": "requestGWAPrice(string)", "e3abeaf3": "setAllowedTransferTo(address,bool)", +"e3ac2542": "sellAll(address)", "e3ac3880": "backupfarmItems(address[],uint256[])", "e3ac5d26": "prize()", +"e3ac83da": "contest()", "e3ac8e16": "setFinalizationTime(uint256)", "e3acc49a": "catIndexToPriceException(uint256)", +"e3acef8f": "devGreed()", +"e3ad3d3c": "onlyExtension()", "e3adf4ea": "ChangeICOEnd(uint256)", +"e3ae1025": "inviteLower2Count(address)", "e3ae1667": "commRate()", +"e3ae3984": "handleNativeNFT(address,address,uint256)", +"e3ae469a": "grantLoan(address)", "e3ae85f0": "winReward()", "e3aec30c": "ballotStarted()", "e3aeedc4": "lastMintedTokens()", "e3aef2bd": "checkUnlockedTokensData()", "e3af2ed9": "TWToken()", +"e3af3720": "EventAddVoteIntoResult(uint256,bool,uint256)", +"e3af5527": "getMaxPayment(address)", +"e3af6eaf": "setProviderPaysGas(bool)", "e3b0073e": "getVoteCounter(uint256,uint256)", "e3b08f56": "concatYearMonth(uint16,uint8)", "e3b09a85": "HungrCoin()", +"e3b0a9df": "lpComponent()", "e3b10447": "GITToken()", +"e3b14757": "tokenIdToAuction(uint256)", +"e3b14ad1": "getBox(uint256)", +"e3b212e8": "autoCrackingFee()", +"e3b23332": "_feeToDistribute()", +"e3b23d6b": "getTokenUSDOracle(string,uint256)", +"e3b24504": "claim(uint256,uint256,uint8,bytes32,bytes32,uint256)", +"e3b25728": "withdrawDeposits(address,uint256)", "e3b2594f": "fundingCap()", "e3b26a8c": "SocialNetwork()", +"e3b2ef9d": "mansdata(uint256)", +"e3b34c88": "updateProposal(uint256,string,string,string)", "e3b3847c": "SubmitProofOfOwnership(bytes32)", "e3b3932a": "bookKeeper()", +"e3b39c2c": "constuctor(string)", +"e3b421e9": "TwoApply(uint256,address)", +"e3b42ef5": "getIntercoinAddress()", +"e3b43317": "FinishMintingRequestUpdate(address,uint8,bool)", "e3b45ab7": "MIN_TOKEN_AMOUNT()", "e3b460c9": "hookOperator()", "e3b49a03": "rollSystem(uint256)", "e3b55276": "AdminBuyForSomeone(uint16,address)", "e3b5a153": "lastEpochTX()", +"e3b5d0ef": "investor_amount()", "e3b6040e": "amountSlicesCount()", "e3b61135": "reinvestProfit()", +"e3b6137b": "divideUpReward()", +"e3b619b8": "mintChild(uint256,uint256,address,bytes)", "e3b62158": "TokenVault(address)", +"e3b62e30": "hasCurrencyInPool(uint8,string)", +"e3b65ddc": "ActiveStakeDeposit(address)", +"e3b6964c": "changepaper(address)", +"e3b6ceff": "lotteryResult(uint256,uint256)", +"e3b6e740": "chooseTeamAndDis(uint256,uint256,uint256)", "e3b71ded": "setMaxContributionCrowdsaleAddress(address)", "e3b7b668": "_setMaxDailyPerUser(uint256)", +"e3b7fc7b": "reject_prop_time()", +"e3b86865": "changeAllowedUserBalance(uint256)", +"e3b8838b": "reissueAsset(uint256)", +"e3b8b6b3": "aggregate(address,address[],uint256[],address,uint8,bytes32,bytes32)", "e3ba3398": "importTokens(address)", "e3ba80d0": "purchaseImpl(uint16,uint64,address)", "e3bab7ce": "buildInternalSalt(uint128,address,address,address,uint256,uint64)", @@ -130448,34 +238774,70 @@ "e3bb3445": "releaseSupply(uint256,uint256)", "e3bbab85": "test_smallDeviationPermitted()", "e3bbb4f1": "MAX_GAS_PRICE()", +"e3bbb565": "getOracleContract()", "e3bc2bb5": "newPassword(string,uint256)", +"e3bc8082": "allTimeTotalStaked()", +"e3bc92c0": "unstakeRequestAtIndex(uint256)", +"e3bce10e": "releaseReward()", "e3bd9638": "getContract(address,address,uint256)", +"e3be8a0b": "_deprecated_nonRebasingCredits()", "e3bea282": "callnotchecked()", +"e3bf34fd": "createToken(string,string,uint8,string,bytes32,uint256,bytes32)", "e3bfdcfe": "pollBurnInc()", +"e3c02884": "pendingChicken(uint256,address)", "e3c04c32": "getNota(uint256)", +"e3c06403": "lockStakesDao(address,uint256,uint256)", "e3c08adf": "getPlayerLAff(uint256)", +"e3c0d82a": "purchasedPerAcc(address,uint256)", "e3c10714": "setMinContrib(uint256)", +"e3c13874": "addrOfNestBurning()", +"e3c1e58c": "loanLiquidationOpen()", +"e3c277dd": "dripAndFile(address,bytes32,uint256)", +"e3c28961": "approve_749(address,uint256)", "e3c2e4b9": "_setCreatedBlockOnCommitsPhase(uint256,address,bool)", "e3c33a9b": "hasRole(string)", "e3c3b200": "proposeWithFeeRecipient(address,address,bytes)", +"e3c3c0b3": "NewSenderPro(address,address,address,address,address)", "e3c3ec92": "BONUS_REWARD()", "e3c3f180": "_setPurchasePremiumRate(uint128)", "e3c4b1ae": "minSumICOStage2USD()", +"e3c4d97d": "resolveWeight(address)", "e3c517a9": "lockFlag()", +"e3c55e40": "changeCreatorFee(uint256)", +"e3c5729d": "rewardUnlockingTime(address)", "e3c5862b": "setCAO(uint256,uint256,uint256,uint256,uint256,uint256)", "e3c5a852": "buyTickets(uint256[],uint256,uint256)", "e3c5d11a": "MIN_BUY_TOKENS()", +"e3c6413a": "own(string)", "e3c6e66d": "discountedIcoStartBlock()", +"e3c71a5a": "approve_21(address,uint256)", +"e3c7336b": "addProtos(uint16[],uint8[],uint8[],uint8[],uint8[],uint8[],uint8[],uint8[],bool[])", "e3c73d32": "minimumPriceCount()", "e3c79a20": "enterOnBehalfOf(uint256[],uint256,address)", "e3c82106": "becomeDuke(string,string)", +"e3c8284f": "playerBGamesWon()", +"e3c9236d": "hasEscrowExpired()", +"e3c92bbe": "NorsefireSwitch(address,address,uint256)", +"e3c9780e": "sell_redeem(uint256,uint256)", +"e3c998fe": "getStaker(uint256)", +"e3c9e9b3": "setSlot(uint256,address,bytes32)", +"e3ca0086": "rewardsPerTokenPoints()", "e3ca12c6": "sendtoB(uint256)", +"e3ca21a3": "setHFLYAddress(address)", +"e3ca4058": "setSt(address,string)", +"e3ca8ad5": "MaxFee()", +"e3ca940c": "getUintCoinProduction(address,uint256)", +"e3cacb9c": "setCapReached(uint256)", "e3cafbb0": "TOKEN_EARLYSUPPORTERS()", "e3cb0cf0": "maxTransferPerTimeframe()", "e3cb49f9": "setBlockingState(address,uint256,uint256)", +"e3cb6ea3": "endSwap()", +"e3cb720b": "getUpAddr(address)", "e3cb8563": "playToken()", +"e3cb9f62": "updateValset(address[],uint256[],uint256,address[],uint256[],uint256,uint8[],bytes32[],bytes32[])", "e3cbe744": "updatePlayersCoinByOut(address)", "e3cc3570": "mintMigrationTokens(int256,address,uint256)", +"e3cc3e36": "addAdminData(address,string,string,string,string,string,string)", "e3cc65e2": "getInvestorsLength()", "e3cc83cf": "withdrawWhenFinished(address)", "e3ccb809": "voteOnProposal(bool)", @@ -130484,63 +238846,103 @@ "e3ce9714": "proxyWithdraw(address,uint256,uint8,bytes32,bytes32)", "e3ceb06d": "YesNo(bytes32,address,string,address,uint256)", "e3cee57b": "calLast5RoundProfitForRead(uint256)", +"e3cf0e00": "Purchase(uint256,address,address,uint256)", "e3cf1ad3": "changeRegistrationStatus(address,uint256)", +"e3cf3321": "DIDAttributeChanged(address,string,bytes,uint256,uint256)", "e3cf6644": "sendKmPards()", "e3cfef60": "timeRemaining()", "e3cff634": "test(uint32)", +"e3d0035e": "removeTopNode(address)", "e3d021d5": "purchaseTicket(uint16[])", "e3d0252b": "defaultTriggerTime()", "e3d0799c": "PLATFORM_FEE_PER_10000()", "e3d0be5c": "EARLY_INV_BONUS()", +"e3d0fe94": "daicoContract()", "e3d1072c": "Giveafuck()", +"e3d10ed8": "setUserClaimVoteMember(address,uint256,uint256)", "e3d13592": "newTechSupport()", "e3d1afd4": "TestToken(uint256,string,string,address)", "e3d1e6d6": "hasProof(bytes32)", +"e3d22ebd": "getLastVfull()", +"e3d27966": "shouldFail(uint256)", +"e3d29c5d": "thisChainId()", "e3d2a98c": "setCurrentFundingGoal(uint256)", "e3d2c1bf": "presaleTokensPerDollar()", "e3d33fc9": "transferCount()", "e3d36a98": "Credit(address)", +"e3d37265": "Utility_Setting(address,address,uint256,uint256)", +"e3d3e162": "amountWithId(uint256)", "e3d3f4cd": "bidGift(uint256,address)", "e3d4187f": "Buy(address,uint256)", +"e3d4f36e": "takerDepositMarginUpdate(uint256)", "e3d51a0f": "repayBorrowInternal(uint256)", "e3d5d88b": "getServerBuildingName(uint256,uint8,uint8)", "e3d5e6a3": "year2Unlock()", "e3d670d7": "balance(address)", "e3d6ce2b": "addFiatTransaction(string,int256)", "e3d6e4a3": "setFundsCreditBitContract(address)", +"e3d6e69f": "cardMintFee(uint256,uint256)", "e3d74457": "releaseTimeFirst()", +"e3d776cf": "CrydrTransferredFromEvent(address,address,address,uint256)", +"e3d7ba5f": "incomecomunity(uint256)", "e3d7f159": "FIRST_TIER_DISCOUNT()", +"e3d80242": "updateLicenceDAO(address)", +"e3d8394d": "awardItem(address,uint256,uint256,uint256)", "e3d86998": "declareNewerVersion()", +"e3d9109f": "replaceSigner(address,address)", "e3d91ebf": "bonusPoolsOf(address)", +"e3d91f7b": "setInterestRate(uint256,uint256,bool)", "e3d9e8ea": "drawnArbiter(address,uint256)", "e3da41b5": "sortWinningNumbers(uint8[5])", "e3da5399": "left90(uint256)", "e3da9f8f": "tranchesOf(address)", "e3dac959": "makeTapTop()", +"e3db16f7": "rerouteTx(uint256,bytes32,bytes32)", "e3db17b8": "updateContract(address)", "e3db6670": "isHardCapTokensReached()", "e3dbaff1": "tokensSpent()", "e3dbda67": "setArtistsControlAddress(uint256,address,address)", +"e3dc1dfb": "setKernelsAddress(address)", +"e3dc9055": "reportTime()", "e3dcd2c8": "maxPaymentInEther()", "e3dd164e": "setNewTokenImporter(address)", +"e3ddd1f9": "viewEnvelope(uint256)", +"e3de093e": "delegate(address,uint256,bytes)", +"e3de1703": "setQuote(string)", "e3de18b2": "withdrawMyClosedDeposits()", +"e3de5c05": "jackpotLevel2Amount()", +"e3de7b6f": "getEthBlockExpiresAt(bytes32)", "e3dea4b7": "setMcrAmountForGas(uint256)", "e3debbbe": "getSubscriptionServiceID(bytes32)", +"e3dec8fb": "depositFor(address,address,bytes)", +"e3ded295": "createDispute(address,bytes,string)", +"e3dee239": "getCurrencyAssetAddress(bytes4)", +"e3df84c3": "UpdateTeller(address)", "e3e06c45": "PayPayCoin()", "e3e10762": "calculateIdeaBuySimple(uint256)", +"e3e184eb": "setPublicSale(uint256)", "e3e1dcb3": "getRouteNameByIndex(uint256)", "e3e2342f": "callTokenHolderTribunal(string)", +"e3e262d5": "lastUpdatedTPS()", "e3e28bab": "setTimes(uint256[],uint256[])", "e3e2b1ba": "add_number(uint256)", +"e3e2cc78": "WithdrawM5(address,uint256,uint256)", +"e3e316fb": "startAirdropRBX(uint256,uint256,uint256,uint256)", "e3e4001b": "buyWithReward(address)", "e3e42b0c": "ZenAD()", +"e3e43398": "setPriceICO(uint256,uint256)", "e3e4a1b4": "burnUserTokens(uint256)", "e3e4b9fb": "claimJob(uint256)", +"e3e4f6bd": "MAX_RESERVES()", "e3e5075c": "depositBattleValue(address)", "e3e532a2": "setInstantToken(address)", "e3e5439c": "specDWallet()", "e3e54ac2": "CarDeregistrationFaled(uint256)", +"e3e55f08": "SILVER()", "e3e5c9c1": "WhiteListBonusTokensEmitted(address,uint256)", +"e3e606dd": "approve_634(address,uint256)", +"e3e699bb": "saleCount(address)", +"e3e6ca7d": "hasAddressVoted(address)", "e3e7399e": "addWinner(address,bytes4,uint256)", "e3e7519c": "getTokenPriceforDapp()", "e3e77055": "MultipleTokenVesting(uint256,uint256,uint256,address,uint256)", @@ -130548,6 +238950,7 @@ "e3e7b439": "cryptoWillToken()", "e3e7c665": "makeMoney()", "e3e7d4f4": "leaderboardEntries(uint256)", +"e3e84213": "setRewardInterval(uint256)", "e3e88734": "SigUser(address)", "e3e9800d": "_cancelSellOfferInternal(uint32,bool)", "e3e98cad": "COSSToken()", @@ -130559,94 +238962,175 @@ "e3ec0251": "subtraction()", "e3ec0666": "clearJackpotParticipants()", "e3ec5046": "DECIMALCOUNT()", +"e3ec6299": "goverFundDivRate()", "e3ec7584": "showTokensUnfreezeDate(address)", "e3ecbd7e": "isEditionEnabled(uint256)", "e3ed14db": "getDiamond(uint256)", +"e3ed1902": "borrowerLoans(address,uint256)", "e3ed48a4": "getTokenScope(uint256)", +"e3ed547f": "disableExchangeWithVote()", +"e3eda7af": "pharmasist(uint256)", "e3edbfd3": "getAmountDue(address)", +"e3ee160e": "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"e3ee20ac": "TokenWithdrawnByAdmins(address,uint256)", +"e3ee6e47": "maxBonds()", +"e3eece26": "governors(address)", +"e3eed6c6": "updateCityName(uint256,string)", +"e3efbee0": "restaMemoria(int256)", "e3f037d8": "FlightDelayUnderwrite(address)", +"e3f060ae": "rewardsMinted(uint256)", "e3f0920a": "coinMaster()", "e3f0b761": "walletF()", "e3f0dd48": "getMult(bytes32,bytes32,uint256)", "e3f10188": "updateFlagCount(address,address,uint256)", +"e3f16180": "bk()", "e3f16a61": "GRPlaceholder(address,address)", +"e3f175af": "totalAmountPlacedInRequests(address)", +"e3f2311e": "getSubscriptionFees(address)", "e3f25f01": "_delegateforward(address)", +"e3f2b3cf": "getHeroType(uint256)", +"e3f2d24f": "reportCnt()", "e3f2e4a4": "ante()", +"e3f305c5": "SERVICE_NAME()", "e3f310c7": "priceToSpend(uint256)", +"e3f3707f": "C8P_TOKEN()", "e3f38dd6": "GetSignVersion(string,address,uint256)", +"e3f41841": "transferpipiaka(address)", +"e3f4730f": "batchSet(address[],uint256[],uint256[])", "e3f4937f": "outOverRoundId()", "e3f4ffdc": "GeezerToken()", "e3f5009f": "payWithMileagePoint(uint256)", "e3f508f5": "setLeaf(uint256,uint256)", "e3f52c99": "warrior()", +"e3f54d2d": "setVisibility(uint256,bool)", "e3f563f6": "generateCompoundTerms(uint256)", +"e3f56eaa": "totalStakeOf(address)", "e3f596a4": "ownerPrice()", +"e3f59c44": "addProject(string,address,uint256,bool)", +"e3f5aa51": "MAX_GAS_LIMIT()", "e3f61948": "getStartIndex(uint64)", "e3f688d3": "ThingschainToken(address)", +"e3f6927c": "ChangedWeiCostOfToken(uint256,uint256,uint256)", "e3f6b544": "member()", +"e3f6dc43": "addChallenge(bytes32,string,string,string)", +"e3f77659": "CYFMAddress()", "e3f7faaf": "calculatePrice(uint256,uint16)", +"e3f81f34": "getAmountOfWithdrawals(address)", +"e3f8adcd": "unverify(address)", +"e3f8f3d1": "RefundReceived(address,uint256)", +"e3f91f3a": "withdrawEvent(address,address,uint256,uint256)", "e3f954be": "buyICOTokens()", "e3f96400": "getTotalOwnerAccounts()", "e3f9ba0e": "returnEth()", "e3f9cd17": "lockTokenForExchange(address)", +"e3f9e352": "sponsorRate()", +"e3fa1cd7": "___refer_init_unchained(address,address,address)", +"e3fa4b04": "getOrCreateCurrentDisputeWindow(bool)", "e3fa5882": "tryWithdraw(uint256)", +"e3fb1ac6": "setQuality(uint256,uint8)", +"e3fba207": "_lpFundRatio()", "e3fc03a8": "Guess(address,uint256,int256,int256,uint256)", "e3fc43b2": "ended(bool)", "e3fcbac1": "getSharesPercentage(address)", +"e3fcd18e": "PayinTargeted(uint256,address)", "e3fcf122": "_sctc(uint256,uint256,uint256,uint256,address)", +"e3fdfb0b": "Addmember(string,address,uint256,bool,uint256,bool)", "e3fe0317": "_setAllocationFee(bytes32,uint256)", "e3fe48a1": "loadWhiteList(address[],bytes32[])", "e3fe6a9e": "sehrRaised()", +"e3fe9023": "getDataBetting(address)", "e3fe9740": "icoThresholdReached()", +"e3fec1d0": "viewProposal(uint256)", +"e3fed8f5": "getTotalBalance(address[])", +"e3fedc51": "managerStruct(address)", "e3ff2f05": "weiExchangeRate()", +"e3ff949a": "lpTokenIsExist(address)", "e3ff9ac2": "MACHToken()", "e3ffc9a3": "sendEtherToOwner()", "e3ffcb84": "loserOf(uint256,uint256)", "e3ffefe3": "ZeroReturnProfit()", "e4002b30": "commitEuro()", "e4007949": "buyRegistration()", +"e40095b5": "unlockedRoundsBalance(uint256,uint256,uint256,address)", +"e40108ed": "interestPerSecond()", "e4019e07": "BOB()", +"e401fa56": "getMultiplyingFactor(address)", "e40205d6": "roundEndTime()", "e4020804": "isHealthy()", +"e4023714": "returnEscrow(address,address)", "e4024194": "returnedData()", "e4027126": "mSumRawSpeed()", +"e4028eee": "_setCollateralFactor(address,uint256)", +"e402ceeb": "SOUL()", +"e402dcf2": "startingSharePrice()", +"e403d411": "reservesRatios(address)", "e40418a0": "trustedContractAddr()", "e4043b37": "updateProduct(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "e4048049": "createBool(bytes32,bool)", +"e404f5b2": "riskOk(uint256,uint256)", "e4062df5": "SkychainToken()", "e4063140": "getAllActivity(uint256)", +"e4064a77": "compounding(uint256,uint256,uint256,uint256)", "e40652e3": "creatUserPurchase(address,string)", "e4065c4c": "Alias()", "e406bb4b": "minedTokenCount()", +"e406f1d8": "settleClaim(uint256)", +"e407845f": "safe2Withdrawal()", +"e407869b": "monthOpen(uint256)", +"e407c3d2": "cardsInfo(uint256)", "e407ccb9": "Repayment(uint256)", "e40819af": "lastTokenCreated()", "e4083daf": "create_game_invite(bytes32,address,uint32,uint32,uint8,uint16,uint8,address,uint256)", +"e4085dec": "callApprove(address,uint256)", +"e4086f5d": "tracker(address,uint256)", "e408de80": "buyInWithAllBalanced()", "e40906ed": "getBorrowBasicInfo(uint256)", +"e40932f9": "set_BoundedSale(bool)", +"e4094e5a": "Updation(uint256)", "e4098655": "getCallCalledAtBlock(bytes32)", "e409edf1": "chooseWinnerDeadline()", +"e40a18ee": "debugAdd()", "e40a72d4": "_internalToken()", "e40a7545": "collectBuyFee(uint256,address)", "e40a955c": "grantTeamTokens(address)", "e40b4523": "activateVault(address,uint256,uint256,uint256,uint256)", +"e40b836d": "canceledOrders(address,bytes32)", +"e40bfe5f": "KingdomETHCom()", "e40c231e": "StoneToken()", "e40cc359": "getListParamsUnOrdered(uint256)", +"e40ccf27": "farmEnableat()", "e40d3692": "contributedAmountOf(address)", +"e40d4864": "addApprove(address,uint256)", +"e40d82ea": "addUser(bytes32,address,bytes32,bytes32,uint8,uint64,bool,bytes32)", "e40d835e": "getPositionIdFromNonce(uint256)", "e40d8fc3": "addICOEndDate(uint256)", +"e40da2ed": "AuctionSuccessful(uint256,uint256,uint256,address)", "e40dd35b": "isGameApproved(address)", +"e40de887": "getCollection(address)", +"e40df156": "feesTotal()", +"e40df744": "getSeizeInfo(uint256)", +"e40e1b45": "executeRemLiq(uint8)", "e40e56d3": "regular_coins()", "e40e8457": "requestBurnerContract()", +"e4101de5": "individualMaximumAmount()", +"e4103143": "judge(bytes32)", +"e4103996": "eCreateRare(uint256,uint256,address)", "e4105ed5": "setToken(uint8,address)", "e4109df8": "MAGTOKEN()", "e410a0c6": "setup(address,uint16)", "e4115a8c": "ApcrdaZebichain()", +"e411c71f": "minimumInitialBudgetForAudits()", "e4120220": "getTokenTrust(address)", "e412828a": "Shark()", +"e4128fb3": "userAddress()", "e412c526": "set_pre_kyc_bonus_numerator(address,uint256)", +"e41462d3": "devmint()", +"e414e2f2": "_notThis(address)", +"e415cfc1": "expectedTokensFromETH(uint256)", "e415f4ee": "_addDai(uint256,address)", "e4160e48": "admin_active_withdrawable()", "e4165e15": "ownerDeactivateToken()", +"e41691e9": "initMISOLiquidityLauncher(address)", "e416d173": "PreICO(uint256,uint256,address,address,uint256)", "e416f6b4": "_startRound()", "e416faa0": "getBetNum()", @@ -130656,82 +239140,152 @@ "e41765de": "addBotAddress(address)", "e417c38c": "Reward(address,uint256,uint256,uint256)", "e417c62c": "ProofFund(address)", +"e417dc35": "getOwnedItems(address)", +"e4186aa6": "_depositBalances(address)", "e4187d02": "multiplyDecimal(uint256,uint256)", +"e4188bb0": "earlyWithdrawalPenalties(uint256)", +"e418b11f": "getPositionOwner(address,uint256)", "e418f592": "receiveToken(address,uint256,bytes)", +"e4196fd1": "lockamounts(address)", +"e419d406": "gtc()", "e419f189": "multiAccessIsOwner(address)", +"e41a055a": "aaveProviderAddress()", +"e41a5d17": "getBlockRoot(uint256)", +"e41a7e9d": "getLotRewards(uint32)", "e41adb25": "PoolPreICO()", +"e41b07e3": "transactionLimit(address)", "e41b1d28": "noAccountedWithdraw()", +"e41b697a": "setCanBeBought(bool)", "e41c02c9": "determineFirstPeriodOutcome(uint256)", "e41cc093": "getItemStore(bytes12)", +"e41cf89c": "systemCancelAddLiquidity(address,uint256)", "e41d0944": "acceptDonate()", +"e41d5a40": "checkAndRemoveFromPendingGroup(address)", "e41d65e0": "payWinnerManually()", +"e41dfa32": "ModifyAddress(address,address)", +"e41e65ad": "distributeTokensForInvestment(address,uint256,string)", +"e41e84fb": "sendMultiSigToken(address,uint256,address,uint256,uint64,address[],bytes[])", "e41eaa41": "fakeNow()", "e41ee46a": "MAX_QUANTITY()", +"e41f2576": "boogiePoolActive()", "e41f7dc1": "ethPriceProvider()", "e41fb842": "comunityMintedTokens()", +"e41fda9a": "minRewardPoolAmt()", "e420264a": "g(uint256)", +"e4206ce9": "bulbasaur()", "e420a904": "FirstToken()", "e420dcc5": "tokenDrian()", "e4218416": "redemptionPayouts(uint256)", +"e421a51e": "getOwnerOfENS(string)", +"e421f322": "cancelAction(uint256,uint8)", +"e4220f27": "getAllIDs()", +"e42255d8": "viewPooledTokenAmount(address)", "e422d6b8": "createRareCard(uint256,uint256,uint256)", "e422ebe9": "getBot()", "e422f311": "secondWeekEndTime()", "e422f699": "toBE(uint256)", +"e42306ae": "counterBeneficiaries()", "e4232069": "MAX_INPUT_USERS_COUNT()", +"e4233669": "_addressToWithdrawalNonce(address)", +"e423be36": "deboardTrader(address,address)", +"e423c158": "setFile(string)", +"e423dcee": "lastcreated()", "e4246ad2": "canContractExchange(address)", "e4246ba0": "setPaymentContract(uint8,address)", +"e42480fe": "virtualEarnings(address,uint8)", "e424ddbd": "allocateFoundersTokens(uint256)", "e4251361": "getTodayInvestment()", +"e4251bdd": "Computed(uint256,uint256,uint256)", "e4254585": "MFNToken()", +"e42548dd": "rePay()", +"e425bd09": "setGovernanceStaking(address)", +"e4267295": "speedsDev(uint256)", +"e426e2b1": "tokensTypes()", "e4274453": "PUBLIC_CROWDSALE_SOFT_CAP()", "e4277f78": "backToOldOwner()", "e427a197": "previousMinters(address)", +"e427eeda": "cad()", +"e427f941": "currentSumOfExchangeWeights()", +"e428abd2": "_remote()", "e428ad8a": "ReferralReward(uint256)", "e428fd5f": "takeBackMoney()", +"e42907db": "setLP(uint256,string,uint256,bool)", +"e42954d9": "existUser(address)", "e42996d1": "redeemCoinsToICO(uint256)", "e429bd8b": "getUsableAmount(address,address)", "e429cef1": "addAuditor(address)", +"e42a071b": "getReferenceDataBulk(string[],string[])", "e42a4556": "KKTokenNew()", "e42a8bc9": "dAddBallot(bytes32,uint256,uint256)", "e42a9156": "AppleproToken()", "e42a96e7": "escrowContract()", +"e42ab25d": "invokeMe(bool)", +"e42aeb2a": "arbTwoApply(uint256)", "e42b0193": "test_insert_findWithHintNextIncreased(int256)", +"e42b2c65": "change_token_bank(uint64,address)", "e42bb93f": "StarUniteChain(uint256,string,uint8,string)", "e42bff66": "mintBadge(address,uint256)", "e42c04f4": "Cryptshopper()", "e42c08f2": "tokenBalanceOf(address)", "e42c1337": "getSalary(string)", "e42c1b76": "BountyActivated(uint256,address)", +"e42c5502": "getIsaq()", "e42cb9f3": "statement()", "e42d5be0": "getPaymentOf(address)", "e42d674d": "refundIco()", "e42d6efa": "unregisterUsers(address[])", "e42d70ba": "safeAddCheck(uint256,uint256)", "e42def21": "CryptoHill()", +"e42df0d9": "TokenClaimed(address,uint256)", "e42f4cc0": "addPersonalInfo(address,string,string,string,string,string,string,string)", +"e42f5912": "plyBiggerAmount()", +"e42fd39f": "putmar(uint256,uint256,uint256)", +"e43009a6": "tokenToType(address)", +"e4300d5f": "convertSlippage(address,address)", "e4309307": "fortifyClaims(uint16[],uint256,bool)", +"e4309dc3": "unspentInvestorAMOProfit_E18()", "e430bb5b": "getFreeCoins()", +"e430f972": "dUSDBalance(address)", "e4310205": "addMastercardUser(address)", +"e4310739": "arAsset_coef2(uint256)", "e431af36": "_addMember(address,uint256)", +"e431b3e5": "zom()", "e431d241": "validateAndRegisterClaim(address,bytes32,uint8,bytes32,bytes32)", "e4322464": "MatchBettingFactory(address)", "e43252d7": "addToWhitelist(address)", "e432f0e5": "queryOracle(string)", +"e43301e2": "zapETHtoROTtoMAGGOT()", "e4330545": "dump()", +"e43349c0": "EventCreated(uint256,address)", +"e43381cb": "TradeExecute(address,address,address,address)", "e433bb3a": "HAVY()", "e4340e6a": "Wallet5()", +"e4352758": "current_eth_balance()", +"e4354081": "referrerRateShare()", +"e43561b3": "testing(bytes32,bytes32,uint8,bytes32)", +"e43581b8": "isGovernor(address)", "e435f2c9": "takeOwnershipMultiple(uint256[])", +"e43608d8": "withdrawProvidedETH()", "e4360fc8": "getFileListElement(bytes)", +"e4361e1e": "getRecipientAddress(bytes32)", +"e43631fc": "rentedCar()", "e43650b6": "changeILFManager(address,bytes32)", +"e436a05e": "songCandidates(uint256)", "e436a3f7": "getRoot2_16(uint256)", "e436bdf3": "Draws(uint256)", +"e437176b": "ash()", "e4372d0f": "setRestrictedAcct(address,uint256)", "e437d1a7": "unRedeem(uint256)", "e437d815": "getDsitributeMulti(address[],uint256[])", +"e43888da": "farmKeeperFeeMin()", +"e438a3ed": "onFlyMintedAmount()", "e438ff55": "changeINAWallet(address)", "e43926fb": "refundTokenToCustomer(address,uint256)", "e439501e": "AntmineToken()", +"e4396d50": "_encode_sol_int256(int256,uint256,bytes)", "e4397db1": "getBetsState()", +"e4397e21": "getHeroMagic(uint256)", +"e439f537": "transferFromLock()", "e43a0bb2": "pullFunds()", "e43a8897": "DonatedBanner()", "e43aa5ff": "Medban()", @@ -130740,200 +239294,356 @@ "e43b72b4": "discountedInvestors(address)", "e43ba0bd": "isStrategy(bytes15)", "e43bb0f6": "link(uint256,address,address)", +"e43bbfbf": "stakeFPTA(uint256)", "e43bc1e9": "functionName3(bytes32)", +"e43c09f4": "deny(address,address)", +"e43c5284": "userUnlocks(address,uint256)", "e43c74a4": "BRoyalCoin()", +"e43c897d": "dfgBronzeKey()", "e43cd900": "PoolBounty()", "e43d68ce": "GetBanker(uint8)", +"e43d7543": "userRegist(address,string,string)", "e43dfebf": "burningTokens()", +"e43e81df": "removePack(uint256)", "e43f696e": "setWhiteList(address[],bool)", "e43f8424": "burnGoldTokens(address,uint256)", "e4403507": "tokenContractBalance()", +"e440ec29": "removeUserENS(address)", +"e4413637": "getBurnt(address)", "e4415d98": "investorDividends(address,address)", "e44171b1": "Arina_amount_judgment(uint8,uint256)", +"e441b3df": "ChangeToxed(uint256,uint256,uint256,uint256,uint256)", "e4424c9e": "createNew(bytes32,address)", "e443253a": "DataFromSetting(uint8)", "e443348e": "ONE_TOKEN()", "e4440a86": "marketWallet()", +"e4442fd9": "userLocations(address,uint256)", "e4444feb": "removeAllowedAddress(address,address)", "e444504c": "nextClaim()", "e44451ba": "removeAddressFromAdminlist(address)", "e444a2e1": "_birthPerson(string,string,uint64,bool,bool)", +"e444a5be": "addressETHin(address)", "e44501c4": "inactive_dividend(address)", +"e4451f66": "getLiquidityRemoveFee()", +"e44542df": "updateEndTime(uint256,uint256)", "e4454fdc": "GetMaxStageEthAmount()", +"e4456ecb": "withdrawLP(uint256)", "e44591f0": "isNonFungible(uint256)", +"e4463eb2": "periodSize()", +"e4470489": "registerLbt(address,uint64,uint256)", "e4480dd8": "withdrawl(uint256)", +"e4486a30": "testEvent(int256,uint256,string)", "e448ee26": "joinChallenge(uint256)", "e4492fcd": "TokensPerETH()", "e4495b15": "confirmSetIssuer()", +"e4499561": "_registerNameXid(string,uint256,bool)", +"e449aa81": "growthAddress()", "e449c52a": "getStr(string)", "e449de9f": "prevContract()", +"e449f341": "unstake(uint256[])", "e44a94d3": "minContributionPresale()", "e44ac1e4": "addLock(address[])", +"e44b09ab": "RegisterVote(uint256,bool)", +"e44b560a": "divRatioPrecisely(uint256,uint256)", +"e44b87f9": "setWithdrawalPublisher(address)", "e44b974f": "placeBet(uint8,uint256,uint256,uint8,bytes32,bytes32)", "e44bc43f": "stepOneRate()", +"e44c2ee6": "lama()", "e44c333a": "DreamTeam()", "e44c96c9": "addInitialOwners(address[])", "e44caea6": "balances3(uint256)", +"e44cf92a": "amounts(address,address)", +"e44d26ac": "cloudDoRound2(uint256,uint256)", "e44d3084": "testFailure()", "e44d311b": "ticketPrices(uint256)", "e44d6f04": "beatTeamWallet()", +"e44d7a69": "revealedValue(uint256)", "e44dbb75": "addAddressListItem(uint256,address)", "e44ddaf5": "healthAndMana(uint256)", "e44de421": "buyTokenFrom(address,address,uint256)", +"e44ef225": "setInvest(uint256,uint256,uint256,uint256)", +"e44f4577": "createNewMerchant(address)", "e44f777c": "returnETHforUnqualifiedBuyers(uint256,uint256)", +"e44f82db": "cancel(address,uint256,bytes)", "e450056c": "tokenPartition(uint256)", +"e4500ee0": "finishClaimerChange()", +"e45014f8": "_getRepaidDeltaDebt(address,uint256,address,bytes32)", "e4503da4": "startPhaseMaximumcontribution()", "e4504f62": "dogCore()", "e451197a": "OrdoCoin()", +"e45142b8": "paymentsTimestamps(address)", +"e451e507": "addToArray2(uint256)", "e451ecfa": "swapTokenValueForCredits(address,address,uint256,address,string,uint256,uint8,address)", +"e4520770": "calcCumulativePayoff(uint256[],uint256[])", +"e4523ef9": "biop()", "e45285cf": "setAIRDROPBounce(uint256)", +"e452b790": "invokeStorage(address,address,bytes)", +"e45310a6": "createBet(address,address,uint256,uint256)", "e4536316": "removeARA(address)", "e4536b84": "BalanceReader()", +"e4537a74": "addGlobalConstraint(address,bytes32,address)", "e453877e": "_approveTransfer(uint256)", "e4538c6c": "addUndergraduateTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", "e454158c": "futureSaleAllocation()", "e4543410": "setIncrementPercentage(uint256)", +"e4547406": "_honestyCreditTotal()", "e4547443": "releaseTimeLock(address,uint256)", "e4547f98": "documentExists(bytes)", "e45499c1": "updatePriceOfToken(uint256)", "e4556549": "get_session_balance(address,uint32,uint32)", "e4556f2d": "MaturityPrice(uint256,uint32,bool,bool,bool)", +"e4558e6a": "getGasCost(uint256,address,uint256,address)", "e455d26c": "getCurrentNeedsCount()", "e455fce7": "extractOversightAddressesIndexLength()", "e4560388": "endTimeMain()", "e45648ac": "exchangeOldVersion()", "e4564a4a": "returnAddressBonuses()", +"e45673a2": "EarningPercent(address)", "e4569c4e": "eeeeeeeeeeee()", +"e4575e07": "takeFee(uint256,uint256)", +"e4576749": "getPids(address)", "e4578590": "SplitPaymentMock(address[],uint256[])", "e457deda": "FindSlug()", "e457e1e5": "charge(uint256)", +"e45877ac": "GetSlotNumber()", "e458c754": "whitelists(uint8,address)", +"e4596dc4": "enableFaucet(address)", +"e4597dac": "_rebasePositivePercent()", +"e45a0e09": "RegisteredAddress(address,bool)", "e45a4fb4": "isMultipleOf(uint256,uint256)", +"e45a57d0": "levelRewards(uint256)", +"e45a8a75": "PROXY_WEIGHTS_SUM()", "e45a93cc": "GIT()", +"e45a98dd": "_hasStart()", "e45aa608": "tokensForfortis()", "e45ab391": "Technology5G(address)", +"e45ac6f4": "presaleLocked()", "e45b1d1b": "openClosedToken()", +"e45b289a": "pendingSAV3XRP(uint256,address)", +"e45b39b3": "setReferBenefitRate(uint256)", "e45b7388": "subscribers_TO_HATCH_1CraigGrant()", "e45b8134": "transfersFrozen()", "e45bc0ae": "dollcoin()", "e45be8eb": "minPrice()", "e45bf7a6": "forwardTo()", +"e45c084d": "BLOCKER_ROLE()", "e45c1879": "getAuctionsCount()", +"e45c20b6": "RAISING_MIN()", "e45c210c": "LogFunderInitialized(address,string,uint256)", "e45c47b9": "SetPermissionsList(address,address,uint8)", "e45ce7e3": "refillTxFeeMinimum()", "e45ceec1": "getUnreadMessages(address)", "e45d0550": "getAddressArray(address,string,string)", +"e45d3dca": "lastUserCooldownAction(uint256,address)", "e45d4717": "withdrawLogic(bytes32,uint256,uint256,uint256[])", "e45da0be": "freezeAddress()", "e45dbabd": "addAddressesToWhitelist(uint256,address[])", +"e45e225d": "updateSyncEventsAddress(address)", +"e45ea8d3": "GetDealsAmount()", "e45ebe93": "checkVoteStatus()", +"e45ed10a": "cookieToLp1Route(uint256)", "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)", +"e4628745": "getReserveCut()", "e462c888": "createEscrowByBuyer(address,uint256)", "e463b659": "EtownCoinTest(uint256,string,uint8,string)", +"e463f471": "settleSynth()", "e463fa6b": "AddWhitelist(address)", "e464dcc8": "userHasLuckyStone(address)", "e4651465": "addEthTeller(address,uint256)", "e46523f2": "_isNeighbor(uint8,uint8)", +"e4652f49": "transferIn(address,address,uint256)", "e46537ba": "JJCOIN()", +"e465b053": "SymbolChangedTo(string)", +"e465c122": "_getCumulativeRewardAtEpoch(bytes32,uint256)", "e465c465": "like(address)", +"e465cd67": "createVestingPeriod(address,uint256,uint256,uint256,address)", "e46617b6": "releaseMultiAccounts(address[],address)", "e4662939": "CLBToken()", "e46638e6": "canTransfer(address,address,uint256)", +"e4664096": "actualValue()", "e46694e8": "lastStakePriceUSCents()", "e46751e3": "exp(int256)", +"e46761c4": "pol()", +"e4677cb6": "updateECPCVLockdownState(bool)", +"e467d942": "voterData(address)", +"e467f149": "gnonce()", "e467f7e0": "mint(address[],uint256[])", "e4682f00": "cancelSpendLimit(uint256)", +"e4683311": "gradeTwoCount()", "e4683a79": "refund(bytes32,bytes32)", "e4684d8f": "AXNETToken()", "e468688e": "addTotalSupply(uint256)", "e46871f1": "governingLaw()", +"e468a184": "UnlockTokens(uint256)", "e468cb72": "FUTM()", "e468dc16": "Testokenmaking()", "e4690a0b": "popRequest()", "e469185a": "updateReserveRatio(uint8)", "e4693e98": "endFundingTime()", "e4698ee7": "start5Phase2020()", +"e46a1ace": "balanceOfEther()", "e46a5c21": "getArmyBattles(uint256)", +"e46a7c1f": "depositHeroesToGateway(uint256[10])", +"e46adf62": "setRebaser(address)", "e46c2cc4": "bytarr28(bytes28[])", +"e46c4e5f": "getAddrBalance(address)", +"e46ce1c0": "setValues(uint256,bool)", "e46d1939": "napoleonXAdministrator()", +"e46d5ba6": "DLONG()", "e46d6cb1": "canChangeRecoveryAddress(uint256)", "e46da1b9": "MeiJiuToken(uint256,string,uint8,string)", +"e46dbc98": "registerRewardToken(address)", "e46dcfeb": "initWallet(address[],uint256,uint256)", +"e46dd249": "setStrengthRate(uint256,uint128,uint128)", "e46dea92": "BlockChainPay()", +"e46e2680": "getCurrentPriceCumulativeLast(address,bool)", +"e46e32e6": "yuanAddress()", +"e46e3846": "revoked(address,bytes32)", +"e46efa45": "pizzaIdToApproved(uint256)", "e46f20dc": "getTransferHash(address,uint256,address,address,uint256,uint256)", +"e46f3162": "inAllowlist(address)", +"e46f49ae": "emitStartWorkRequested(uint256,uint256)", +"e46f4ead": "stakeERC20(address,uint256)", +"e46f7d51": "updatedAt(address)", "e46f9ecf": "enableCodeExport()", "e46fbe76": "burnSomeEther()", "e46feb2c": "orgy1f(string,string)", +"e4701e51": "setAjioToFull()", +"e4706268": "_getDelegationPeriodManager()", "e4706e3a": "TokenRateChange(uint256)", +"e470a29f": "LogBrokerDeregistered(address)", "e470ddf8": "totalKittiesBurned()", +"e470df58": "suspendSystem(uint256)", "e47112bd": "sendTokens()", "e471a5b9": "putIntoPackage(uint256,uint256,address)", +"e471bcfe": "removeSignerFromOracles(address[],address)", "e471d770": "StopTheFakesPromo()", +"e47224a1": "dividendCreditedTo(address)", +"e4722cd3": "hash(string,string,uint256)", "e472311b": "handleHTLCUpdateTx(address,bytes32,bytes32)", "e4723828": "TestMath()", "e4725ba1": "accept(bytes32)", +"e47278f2": "bulkAddRole(bytes32[],address[])", +"e4730f0a": "addWork(address,uint256)", +"e473a6d0": "roiDuration(uint256)", +"e473c74f": "AddToken(address)", "e4745970": "transfer(uint256,address,string)", "e474777e": "applyForCertification(string,string,bool,string,address,string,string)", +"e474db5e": "unatomized()", +"e474df21": "yourXFIBalance(address)", "e474f97a": "setPreicoAddress(address,uint256)", +"e4751f7c": "MAX_MINT_PERC_PARAM()", "e4752159": "DigitusToken()", "e475222e": "activeGames()", +"e4759493": "transferFrom(address)", +"e475ac5d": "osmMom()", "e476137b": "windUp()", +"e4761d02": "submit_signal(uint256,uint256,uint256)", +"e4765349": "participantsRatio(uint256)", +"e4766110": "canAirDrop()", +"e4767706": "getPixelAt(uint16,uint16)", "e476af5c": "revokeAttributeSigned(address,uint8,bytes32,bytes32,bytes32,bytes)", "e476cb86": "_mintTokens(address,uint256)", "e4772ae3": "getDailyCount(address)", "e4779d73": "register_user(address)", +"e477cff6": "lotteryMemberCount()", +"e4787de8": "initialization(address,uint256,uint256,uint256,uint256,uint256,uint256)", "e4788384": "CancelAuction(address,uint256,uint256,uint256,uint64,uint256,address)", "e478b578": "ProofofConcept()", +"e47935e6": "presaleCreatorClaimWei()", +"e4798530": "Response(address,string)", +"e4799cac": "IncreasePreSaleSupply(uint256)", +"e479d5c4": "getEstimatedTOKENforETH(uint256)", +"e479e487": "makeFullPayment(uint256,bool)", "e47a192e": "FactomIssued()", +"e47a37e3": "triggerThreshold()", +"e47a500c": "SynthToMint()", "e47a6a9f": "disbursementPeriod()", +"e47b9296": "setTokenHandler(address,address)", "e47bc32b": "ShanHuCoin()", +"e47bfee8": "isDAO()", "e47c0c20": "GetCityData(address)", "e47c5902": "ecverify(bytes32,bytes)", "e47c66ca": "removePanelist(address,address)", +"e47c81dd": "mint_address()", +"e47ca0cc": "levelupValues(uint256)", "e47ca4eb": "LogNewAnswer(bytes32,bytes32,bytes32,address,uint256,uint256,bool)", "e47cb18f": "PointToken(uint256,string,string,uint256)", +"e47cf4d4": "prepare(address,address,uint256,uint256,uint256,uint256)", +"e47d166c": "toAMM(bytes)", +"e47d6060": "isBlackListed(address)", "e47d8085": "isCurrentUser(address)", "e47d914a": "fechVoteInfoForVoter()", "e47da59e": "consumeTicket(address,string,uint256)", "e47dace5": "totalLenderBalance()", "e47dea1d": "setWithdraw(address)", "e47e1c0b": "getAssetIds()", +"e47e25a2": "chunkProposalsCounter(uint256)", +"e47e65a3": "reduceReserves(address,address,uint256)", "e47e7e66": "ask(uint256)", "e47ea649": "isICOfinalized()", "e47f0d64": "list_products()", "e47f18d0": "CryptoTorchToken()", +"e47f5d86": "withdrowUserETHorDai(address,uint256)", +"e47f660a": "CrowdsalePaused(address,address)", "e47ffb64": "setSoft_Cap(uint256)", "e480ba6a": "isDailySettlementOnGoing()", +"e481553e": "disallowAddressToSendMoney(address)", "e4818a5d": "totalUnreleasedTokens()", "e4818e4b": "secondPeriod()", +"e481aea8": "global2FallUid()", "e481c884": "ACFWallet()", "e481ebf0": "getOwnedActiveEntry(uint256)", "e48225ce": "startStakingAt(uint256)", "e4828367": "buyEther(uint256)", "e48341db": "getUpdateCount(bytes32)", "e4845c2f": "Sperm()", +"e4849475": "claimLandTokens(address,uint256[],uint256,uint8,bytes32,bytes32)", "e4849b32": "sell(uint256)", "e4852b9b": "transferAccount(address)", +"e4858494": "repay(bytes32,uint256,uint256)", "e4860339": "tokens(address)", "e486387a": "ReferenceToken(string,string,uint256)", +"e4866084": "_getDepositAction(uint256,uint256,address)", +"e48671c4": "interestPaid()", "e486869b": "setstoredaddress(address,address)", +"e4868996": "universeBP()", +"e486df15": "erc20ContractAddress()", +"e48702a6": "genesisEventEnd()", +"e4873060": "minRemoveLiquidity()", "e487624b": "EarnedGNS(address,uint256)", +"e487c7a5": "getOrCreateFeeWindowBefore(address)", "e487c88b": "CROWDSALE_UNVERIFIED_USER_CAP()", "e487e87b": "activateICOStatus()", "e487eb58": "getOwner(bytes20)", "e487fdb6": "participant1SentTokensCount()", +"e4880dc1": "removeCommonPetId(uint256)", "e4881813": "cat()", +"e4883121": "accurateWeightsTest(uint256,uint256)", +"e4886e05": "BORINGDAO()", +"e4887440": "LogSetCustomDisputeFee(bytes32,uint256)", +"e488a6ea": "PERCENTAGE_GROUP_4()", +"e488baf3": "init(address,address,address,address,address,address[],address[],uint256,uint256,uint256,uint256)", +"e488cd9f": "setStrikePrice(uint256)", +"e489a5d4": "LogDiscountSet(uint256,uint256,address)", +"e489c3b7": "porscheWinner()", "e489c5ff": "haltIco()", +"e489d0b1": "tokenSaleDOGZ(address)", "e489d510": "MAX_TOKEN_SUPPLY()", "e489fc68": "NdexSupply()", "e48a1d60": "assertPaymentIndexInRange(uint256)", +"e48a351f": "placeBets(address,uint256[],uint256)", "e48a4a29": "mayjaKill()", +"e48a5f7b": "getConfig(address)", +"e48b10ea": "fundingGoalPerc()", +"e48b81e6": "fulfill(bytes32,bytes32,address,uint256,bytes32)", +"e48bd949": "test_transfer_withValidAmount()", +"e48c015e": "BATCH_TIME()", "e48c09fe": "getFiltersLength()", "e48c3c5c": "lockInDays()", "e48cf65f": "_setClassViewValue2(uint256)", @@ -130941,126 +239651,221 @@ "e48db5d4": "ProofVote(address)", "e48e0d69": "ownerRetrieveTokenDetails()", "e48e603f": "right54(uint256)", +"e48eb309": "rhino()", +"e48f0de6": "getRewardCalculator(address,uint256,uint256)", +"e48f76b3": "CENTI_FEE()", "e49013b3": "jigoutuihuan(address,uint256)", +"e4901776": "adminRemoveRoles(address[],string)", "e490c513": "getEntityState(bytes32)", +"e4915145": "mintOnAvatar(address)", "e49168f3": "whichEpoch(uint256)", +"e4917d9f": "setExecutionDelay(uint256)", "e4917fd2": "provenAddresseList(address[],bool)", "e491936f": "getDisputeTX(uint256)", +"e4927935": "_transferFromUnderlying(address,address,address,uint256)", "e49280cb": "close(address,uint256)", "e492814f": "play(address)", "e4928550": "daylimit()", "e4929aa4": "FCC(address)", +"e492f0a1": "ProfitTransfer(address,uint256,uint256,uint256)", +"e492fd84": "setMyUint(uint256)", "e4932abe": "INC()", +"e49352fe": "blockPerDay()", "e493ef8c": "Q()", +"e4940157": "placeBid(address)", "e4942930": "SetMinLot(uint256)", +"e4944f27": "withdrawMark()", "e4952ddb": "transferDataOwnership(address)", +"e495afbd": "hasDataFlags()", "e495f08e": "getHouseInfo(bytes32)", "e495faf4": "bonusesPayed()", +"e4962d2a": "getCandidateLength(uint256)", +"e4963fb3": "hlHero()", "e496f510": "oraclize_query(uint256,string,bytes[3],uint256)", +"e4974ca9": "getOfficersCount()", "e497718e": "receiveLoan(address)", "e497e88e": "XDCE()", +"e497fa26": "unsubscribeOption(uint256)", +"e4982759": "getStakingRewardSecond(address)", "e4983e27": "HEOContract()", "e498922f": "getExp(uint256)", +"e498b5c7": "MasterNodeReturned(address,uint256)", "e498b98f": "setRedeemRequestLimit(uint256)", +"e498de92": "eurs_gauge()", "e498f5de": "FrozenFunds(address,bool,uint256)", "e4995a1d": "ProdTokensale()", "e4997dc5": "removeBlackList(address)", "e4998173": "blockHalving(uint256)", "e499f542": "distribute_reward(uint256,uint256)", +"e49a1456": "startSales(uint256,uint256,uint256,uint256,uint256,address,address)", +"e49a6c83": "sellitems(string,uint256,uint256,uint256,string)", +"e49a7cad": "TOTAL_PERCENT()", +"e49aad4f": "pendingFromKebabPool()", "e49b4c64": "ownerModAdmin(address,bool)", "e49b606c": "claimWinnings(bytes32)", "e49c9529": "underwrite(uint256,uint256[6],bytes)", +"e49ca94a": "CharityAddedEvent(uint256,string,uint8)", "e49cb2fb": "withdrawERC20Tokens(address,uint256)", "e49cc6a9": "getUserBalancesLastBet()", +"e49cde77": "setWhitelist(uint256,address[])", +"e49cdf25": "interestrate()", +"e49db1e9": "FEE_TRANSFER()", +"e49dbafe": "sellToken(address,uint256,uint256,string)", +"e49dc2e7": "getMarketRates()", "e49dcee9": "fixTokens()", +"e49e2887": "Buy(uint256,uint256,uint256,uint256,uint256)", +"e49e5cba": "addApprovedWallet(address)", "e49f6e91": "editContact(address,string)", "e49fdaa8": "setClaimLimit(address,address,uint256)", "e4a008a0": "cancelEthOffer()", +"e4a03c11": "stuff1()", "e4a05c1f": "_nibblesToTraverse(bytes,bytes,uint256)", +"e4a08427": "CheckMinter(address)", "e4a0c124": "QCSTToken()", +"e4a0c953": "setDydxAddress(address)", "e4a0d386": "ethToBeClaimed()", +"e4a0dd8f": "exchangeToToken(address)", +"e4a0edb0": "simpleStake(uint256)", "e4a13fa4": "getICOAddress(uint8)", +"e4a154a4": "data_union_sidechain_template()", "e4a1d868": "deposit_token(address,uint256)", +"e4a24016": "addExternalTokenMeta(address,uint16,uint16,uint256)", "e4a27ba0": "_play()", +"e4a28a52": "MAX_WEIGHT()", "e4a2a8af": "getOwnerClientDetails()", "e4a2ac62": "getCompactData(address)", "e4a2c6d6": "loadProfit()", +"e4a2f15f": "canContractLock(address)", "e4a30116": "initialize(uint256,uint256)", "e4a30200": "BRV(uint256,string,string)", +"e4a34dce": "setTransferWhitelist(address,bool)", "e4a358d7": "getPrefix(uint32)", "e4a36a77": "getBondRemainingToBePaidOut()", +"e4a3a0f3": "spendAgeOf(address)", "e4a41c7f": "becomeFriendsWithMe()", "e4a46a99": "howManyEthersToBecomeOwner()", +"e4a481ca": "arrIdx2predUnitArr(uint256,uint256)", +"e4a4b7b1": "harvest(uint256,uint256)", +"e4a4ebf6": "gradualDivsById(uint256)", +"e4a59ef4": "auctionAccessManager(uint256)", +"e4a61042": "__TermPool_init(address,address,address,address,address,address)", "e4a682d8": "InvestorToken()", "e4a6e85a": "CoinStorage()", "e4a72b13": "bZxContractAddress()", "e4a77d29": "setInitialVaribles(uint256,uint256,uint256,address,address,address)", "e4a7f363": "NewSymbol(string,uint8)", "e4a86349": "getSubscribersCount()", +"e4a86a99": "setWhiteListAddress(address,bool)", "e4a8de44": "quater1()", +"e4a91fe9": "cdpink()", +"e4a95319": "getTraderInterestForLoan(bytes32,address)", "e4a9b286": "getVestingDuration(address,address)", "e4aa0741": "AmericoTokenToken()", "e4aa2436": "SouthAfricanRandsToken()", "e4aa533e": "guess(bytes32)", +"e4aa5e3f": "EndICO(uint256)", "e4aa6c5c": "MHCBC()", "e4aa8140": "MAX_WEI()", "e4aa82d7": "test_addAndGetVersion()", "e4aa8da9": "checkReceiptProof(bytes,uint256,bytes,bytes)", +"e4ab708e": "DemocEditorSet(bytes32,address,bool)", +"e4ab8c03": "sellNum()", "e4abae32": "respond(uint256,address,address,bool,bool)", "e4abf00e": "UnFrozenAddress(address)", +"e4ac252a": "isTaskRunning(bytes32)", "e4ac3206": "withdrawIQT(uint256)", +"e4ac9e18": "StockTransfer(address,address,uint256,uint256)", "e4acecf3": "SALE0_END()", "e4ad9a18": "takeTokens(address,uint256)", "e4ada9fa": "setFeeForFirstArtWorkChangeRequest(uint256)", +"e4adaa67": "_onlyOracle()", "e4adc325": "UBS()", "e4adc4f0": "ownerTransferWeiThirdWallet(uint256)", "e4ae2e88": "enableEdition(uint256)", "e4ae7d77": "getResolver(string)", +"e4aec39d": "transferModeration(address)", +"e4aed7ff": "accDepositBalancePerUser(address)", "e4af29fc": "accountCount()", "e4af5f30": "getMinMaxBet()", "e4af8331": "func_02E5()", +"e4afe014": "GameId()", +"e4b08267": "ContractUpdated(address,address,string)", "e4b0a97b": "test_doubleVotingAgainst()", "e4b0d3e6": "preRelayedCall(address,address,bytes,uint256)", "e4b1443b": "KIK_ADDRESS()", +"e4b1530e": "userCap(address,address)", +"e4b166cb": "getDeployableContractDeployedAddress(uint256,uint256)", "e4b19e98": "amountRefunded()", "e4b1e977": "hadd(uint128,uint128)", "e4b1f93a": "isValidPurchase(uint256,uint256)", "e4b1fe54": "totalGas()", "e4b203ef": "sealed()", +"e4b26360": "advisorTeam()", +"e4b270a1": "SessionClose(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4b29691": "getFreeWithdrawBalance(address)", +"e4b2fb79": "depositors(uint256)", +"e4b2fddb": "sha3()", "e4b34274": "round4StartTime()", "e4b3c517": "crowdsaleContinue()", "e4b42498": "AfrFballCoinXToken()", +"e4b44513": "killOptionContract()", +"e4b487ed": "subsidizedMintNewWeek()", "e4b503ec": "MinAmountByBetChanged(uint256)", "e4b50cb8": "getToken(uint256)", "e4b50ee8": "setRaiseRatio(uint256)", "e4b541f3": "currentDevFees()", "e4b5553c": "AddPromoter(address)", +"e4b57076": "onSetMintable()", "e4b5762a": "setPriceFeed(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e4b58cdc": "setRouter(uint8,address)", "e4b5ddeb": "addInvestorAtID(uint8)", "e4b5e557": "CPWAToken()", +"e4b643e3": "router(address)", +"e4b64970": "invest(uint8,address)", "e4b64da9": "sellOrders(address)", +"e4b6734b": "_erc20Weight(uint256)", +"e4b6921e": "get_out_share()", "e4b6ac4c": "bonus2StartETH()", +"e4b6db4c": "getPoolAddresses()", +"e4b6e469": "feeList(address)", "e4b6f799": "withdrawDai()", "e4b6fbe2": "getApproveSpenderValue()", +"e4b72516": "treasuryRate()", "e4b73ac9": "foundersWallet3()", "e4b74590": "distance(uint256,uint256,uint256)", "e4b7b1b0": "Payroll(address,address)", +"e4b7baeb": "tokenMessage(uint256)", "e4b7fb73": "getRemainingSupply()", +"e4b80c4d": "getReserveAddressesByReserveId(bytes32)", +"e4b87227": "swapThenBurn(bytes,uint256,uint256)", +"e4b8cb61": "transfer2(address,uint256,address,uint256)", "e4b8ebb7": "powercoin()", "e4b90ed2": "reclaimInternal(address)", +"e4ba2e8e": "calcFreezingRewards(address)", "e4ba3969": "supportRecord(uint256)", +"e4bb4369": "fulfillOracleRequest(bytes32,address,bytes4,bytes)", "e4bb7160": "adjustInflationRate()", "e4bbb4b0": "POLY()", +"e4bbb5a8": "initialize(address,address,bool)", "e4bc01b4": "FooMintableToken()", +"e4bc2eb9": "quoteAssetReserve()", "e4bd6695": "create(string,string,uint8,address,uint256)", +"e4bd7fd6": "FPBought(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4bd9a7e": "last_withdraw_date()", "e4bd9ebd": "calcId(uint256)", "e4bdaa61": "buy(uint16,address)", +"e4bdeb85": "createEscrow(uint256,uint256,uint256,string,string,string,uint256,bytes)", +"e4be2200": "calcEffectiveLiquidity(uint256,uint256,uint256)", "e4be5159": "queryChild()", "e4be782a": "createSecurityToken(string,string,uint256,uint8,address,uint256,address,uint256,uint8,uint256,uint8)", +"e4be8c0f": "multipleBalanceOf(address[])", "e4bf56b8": "getPastGamesLength()", "e4bf6195": "changeGroupInfo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4bf9a31": "positionMap(address,address)", +"e4bfe251": "depositBenefits(address)", "e4bff515": "_pointToResolverAndResolve(int256,bytes32,address)", "e4c01bbb": "LogSetSymbol(string)", +"e4c027f2": "SetAvailableProvider(address,address)", "e4c05a7d": "checkEngineerQuest(address)", "e4c0aaf4": "changeGovernor(address)", "e4c14a34": "Tx(address,address,uint256,string)", @@ -131068,138 +239873,268 @@ "e4c21cf2": "CheckSoftCap()", "e4c28308": "buyPortfolio(address,uint256,uint256)", "e4c2db06": "getPreviousFile(bytes)", +"e4c2fe15": "fannyPerBlock()", +"e4c33f35": "emter()", "e4c487c9": "Betsicbo()", +"e4c4b47c": "loadLuckyDraw(address)", "e4c53f04": "setCreationCurator(address)", +"e4c5676c": "expenses()", +"e4c58bf2": "lock(string,uint256,uint256)", +"e4c5efe9": "getUIntArray3Value(uint256)", "e4c5ff46": "manualMint(address,uint256)", "e4c60492": "RANGESTART_8()", +"e4c65151": "WithdrawCanceled(address)", +"e4c75c27": "pending(uint256,address)", +"e4c77745": "initialPair()", "e4c82881": "change_tokenReward(uint256)", +"e4c90501": "totalStakeHolders()", "e4c92731": "FAST()", +"e4c93152": "_getEthers()", +"e4ca060d": "FeeRemoved(address,uint256)", "e4ca784b": "isPoliceNode(address)", "e4cb30ad": "getCharacter(address,uint256)", +"e4cb5fdd": "Vote(uint256,address,uint8)", +"e4cbecdf": "monthlyRent()", +"e4cbedbb": "DEFAULT_MAX_CAMPAIGNS()", "e4cc1161": "seedWithGasLimit(uint256)", "e4cc18be": "finishMint()", +"e4cc3f42": "setAddrBTCUSDpriceFeed(address)", "e4cc98a5": "dividendPeriod()", +"e4cd1aec": "initalRewardPerShare(address)", "e4cd7d96": "OX_ORG()", +"e4cd9bec": "patch(address)", "e4cdf3cc": "takeBack(uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"e4ce06ad": "createCannabinoid(string,string)", "e4ce25ac": "roundEthShares()", +"e4ce27b4": "SAFETY(address,bool)", +"e4ce3800": "DemocInit(string,bytes32,address)", +"e4ce5839": "getMonetaryModelState()", "e4ce6ccf": "deed(bytes32)", +"e4cea2e2": "removeApp(string,string[])", "e4cecd32": "cf_request(uint256,uint256)", +"e4cee038": "unzap()", +"e4cf1ca8": "collectAllForce(address[])", "e4cf77bb": "GoodBoyPoints(uint256,string,string)", "e4cfcbf7": "setChainNext(address)", "e4cfe9eb": "callerAllocationPeriod()", "e4cff610": "process_merge_mint_ious(address)", +"e4d00ec3": "marketRegistryAddress()", +"e4d06547": "jackpotPayRate()", +"e4d06d82": "keep()", +"e4d0d9d3": "divcheck()", "e4d0f41d": "setAuthorized(address,address,bool)", "e4d13625": "pauseActivity(uint16)", +"e4d18da0": "addLiquidityBNB(uint256,uint256)", "e4d1b2cc": "allocatedToken()", +"e4d1ba07": "setKeyStatus(address,uint256,uint256)", +"e4d2620e": "getUserTier(address)", +"e4d286cc": "marketBuyLuaWithToken(address[],uint256,uint256)", "e4d2fecf": "isListening(address,address)", +"e4d3ad50": "ask(uint8,string,string,bytes32)", "e4d433e8": "startDealForUser(bytes32,address,address,uint256,uint256,bool)", +"e4d4d906": "receiveUpgrade(uint256)", "e4d534cb": "feewallet()", +"e4d56637": "limitOfAction()", "e4d5a558": "updateAndSafeTransferFrom(address,uint256,string,bytes)", "e4d609cc": "addRequester(address)", +"e4d640c4": "setStrategyInfo(uint256,address,uint256,uint256)", +"e4d6804b": "calcStakeVol()", "e4d6d778": "getused(address)", "e4d74f2e": "BCBcyCoin()", "e4d75c9d": "setVestingAddress(address)", "e4d76d3b": "ATN(uint256)", "e4d7a3d4": "getAllClients()", "e4d7c28c": "decision()", +"e4d7cc33": "ownerYieldMasterReward()", +"e4d8074e": "setSystemSettings(address)", "e4d8dead": "setChild(uint256,string)", "e4d91372": "setlevel(address)", "e4d9d212": "isPVPListener()", +"e4d9d3e8": "landRegistryOpened()", "e4d9de94": "getInfo(uint8)", "e4d9e130": "CrowdsaleToken()", +"e4d9e3be": "okPassTest()", +"e4d9ff8c": "ETransferOddEther(address,uint256)", "e4da3860": "XfinityAsset()", +"e4dae387": "withdrawFeeTo()", +"e4dafec9": "getRaffle(uint256)", +"e4db0c5e": "refundPool(address)", "e4db2230": "addCard(uint256,uint256,address)", "e4db2ceb": "auth(string)", "e4db4dc1": "CheckEligibility(address,string,string)", +"e4db51d1": "getLikesByIndex(uint256)", +"e4db53e9": "maxPoolSizeFixedPoint24(int256)", "e4db6062": "GivethBridge(address,address,uint256,uint256,address,uint256)", "e4db915e": "citadelBuy(uint256,address)", "e4dbc385": "assertEq12(bytes12,bytes12)", +"e4dbe249": "DEV_PRINTS()", "e4dbf719": "FlightDelayLedger(address)", +"e4dc18fe": "SetTokenToStake(address)", "e4dc2aa4": "totalSupply(address)", +"e4dc37bb": "GetMinDuration()", "e4dc3d8b": "raisedSale1USD()", +"e4dc5577": "tokenGroupsOwnershipAlloced(uint256)", "e4dcb06b": "open(string)", +"e4dd22f6": "quickConvert2(address[],uint256,uint256,address,uint256)", "e4dd7794": "fundingPaused()", +"e4dda60f": "totalFarmed()", +"e4ddbab8": "PC_DENOMINATOR()", +"e4dde9ab": "REGISTRY_ADDR()", "e4de6ec6": "AyeshaCoin()", +"e4de79c8": "_updatePrices(uint256,uint256,uint256)", +"e4dea940": "getCandidateByEvent(uint256,address)", "e4deb007": "setNextSaleAgent(address)", "e4dec825": "setAllowContributionFlag(bool)", "e4dedc7f": "DeleteContract()", +"e4deeb4f": "setBylawBytes32(bytes32,bytes32)", "e4df2531": "topBalance()", +"e4df2b5c": "approve_665(address,uint256)", +"e4df5265": "xfFlush()", "e4e075cc": "_getPlayerInfoByAddress(address)", +"e4e09495": "top_up(uint256)", "e4e0bd1f": "PointPowerCoin()", "e4e0c030": "makePayment(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"e4e0fefc": "fpure()", "e4e103dc": "rewardUser(address,uint256)", +"e4e17b37": "issueNomins(bytes4,uint256)", "e4e1aae6": "BlockChainShopCoin()", "e4e1bd53": "DisableTransfers(address)", +"e4e1e538": "bind(address,uint256,uint256)", "e4e1f29b": "discountStep()", "e4e1f6c5": "compare(address)", "e4e1f7af": "mintTokensMultiple(uint256,int256,address[],uint256[])", +"e4e266e9": "curveTokenIndexStorageId()", +"e4e2934c": "globalFallType()", "e4e299f7": "zero_out(uint256)", "e4e2bfe4": "canFinalize(uint256)", "e4e2ca59": "supportsEIP20Interface(bytes4)", "e4e2d2ae": "changeScore(uint256,uint256)", +"e4e327db": "_PHASE_BID_ENDTIME_()", "e4e3466a": "AIToken()", +"e4e412f8": "maintainence_pool()", +"e4e439f1": "proveInConfirmedBalances(bytes,bytes32)", "e4e4c8c0": "eMTV()", +"e4e53395": "exchangeToken2(uint256)", +"e4e54891": "mintManyChilds(address[],uint256[],string[],string[])", "e4e57b9e": "sellTokens(address,uint256,uint256)", +"e4e5caae": "hydraz()", +"e4e5e693": "approve_320(address,uint256)", "e4e609de": "LogBuyCoins(address,uint256,string)", "e4e663a9": "getStatLotteries()", +"e4e6778c": "card2()", +"e4e69155": "getPathBancor(address)", +"e4e695fe": "getAvailableGasTokens()", "e4e6de18": "setPaoContactAddress(address)", +"e4e6e7da": "getBatchBalancesAndAssetProxyAllowances(address,bytes[])", "e4e713e0": "DTCC_ILOW_6()", "e4e76c16": "setCryptoSoulContract(address)", "e4e790b8": "withdraw_GIC(uint256)", "e4e80c49": "SpudToRotator(uint256)", +"e4e80ca6": "balances(uint32)", +"e4e81129": "percentUnfrozenAfterBuyPerPeriod()", "e4e85963": "tokenRemainPreSale()", +"e4e8db3e": "xX89hH8h98()", +"e4e93d10": "airDrop_(address,address[],uint256)", "e4e985a8": "getKycProvider()", +"e4e9924d": "transferInT(uint256)", "e4e9bcca": "setEthPriceProvider(address)", +"e4e9de87": "dsrWithdraw(uint256,bool)", +"e4ea33ef": "collateralBorrowRate(address)", +"e4ea3a70": "EosHaters(uint256)", "e4ea58a5": "withdrawInviteRewardToOrder()", "e4eab468": "getWarrantyPrice(address,string,uint256,uint256,uint256)", "e4eacd70": "curentBallotId()", "e4eaee4c": "setBool(bool,bool)", +"e4eb7874": "plusTen(uint256)", +"e4eb7b10": "OwnerUnlock(address,uint256)", "e4eba2ef": "supplylimit()", +"e4ebdfa5": "mapMemberPool_Added(address,address)", +"e4ec0f68": "CreatePool(address,uint256,uint256,uint256,uint256,uint64,address,bool,uint256,uint256)", +"e4ec29b0": "HorseyRenamed(uint256,string)", "e4ec3762": "onChain(address)", "e4ec404c": "AG()", +"e4ec5129": "isCycling(address)", +"e4ec552b": "inRegistry(address)", +"e4ed54c1": "Declaration(string)", "e4edf852": "transferManagement(address)", "e4ee07b7": "UtlToken(address,address,address,address,address,address)", +"e4ee82ce": "rewardType(uint256)", +"e4eec3f6": "setSecondTokenDifficulty(uint256,uint256)", "e4ef2cef": "link(address,string)", "e4ef3eaa": "SetEvaluate(address,uint8,uint8)", +"e4ef7672": "prov(address,address)", "e4f02750": "listGlobalAuditDocumentsFrom(bytes32,uint256,bool)", "e4f06100": "adminSetDiv(uint256)", "e4f20fb2": "mintPresale(address,uint256)", "e4f2487a": "salePhase()", +"e4f2494d": "converters(address,address)", +"e4f24cb0": "totalRewardsEarned(address)", "e4f26633": "betStage(uint256,uint256[])", +"e4f34a50": "lockRewards(address,uint256,uint256)", "e4f37374": "pixels(uint32)", +"e4f3e739": "liquidate(bytes32,address,uint256)", "e4f3f47f": "BuyCurrentTypeOfAsset(uint256)", +"e4f42b94": "SuperPrivilegeLuckyDrawResult(uint256,bool,address)", +"e4f45709": "block_now()", "e4f4c554": "AddressDefault()", +"e4f5a2ab": "FARMPOOLCOUNT()", +"e4f5a6ab": "fogLockPercentage()", "e4f627fe": "keysCount()", "e4f6973f": "BIPOOH_DAO_32()", "e4f7a076": "set3RoundTime(uint256)", +"e4f7b152": "AirDropCoin(address,uint256,uint256,uint256)", "e4f7de93": "isIcoComplete()", +"e4f830c2": "listExaminee(address)", "e4f84173": "defValue()", "e4f843f9": "deprecateTurretSubtype(uint8)", "e4f896e8": "proclaimAllInactive()", "e4f8b908": "_payout(address)", "e4f8c6fb": "YettaCrowdSale()", +"e4f8d84b": "tokenReward4()", "e4f95226": "getLastInvestors()", +"e4f95bef": "checkWithdrawBalance(uint256)", "e4fa8fc3": "hash_of(address)", "e4fab06f": "delegatedFwd(address,bytes)", "e4fae421": "ALLOC_ECOSYSTEM()", +"e4fb5155": "totalGifts()", +"e4fb7aa9": "foreclosedPatron(address)", +"e4fb9b11": "UNIV2ROUTER2()", +"e4fbb609": "CREATOR()", +"e4fc4537": "paybackDebt(address,uint256,bytes32,uint256)", "e4fc6b6d": "distribute()", +"e4fc7494": "runTokenUniswapTransfernew(uint256,address)", +"e4fcb8e5": "numberOfVotersAgainst(uint256)", "e4fcf329": "setBonusRate(uint256)", +"e4fd35f7": "invests(address,uint256)", +"e4fdae2e": "setAMOProfits(uint256,bool)", "e4fe8eb1": "getUserBigPromoBonus(address)", +"e4fe9d15": "reserveTokensVault()", "e4ff0f18": "rocketshipReachedDestination()", "e4fffb3a": "updateMaxTokensToDistribute(uint256)", "e50007b9": "TerminateEmployee(address,address,uint32,uint8)", "e5002347": "setLimitMaxCrowdsale(uint256,string)", "e5002a05": "whitelistAddress()", +"e5009bb6": "join(bytes32,uint256)", +"e500b8ac": "chinlinkGetSuccess(uint256,uint256,uint256)", +"e500c3d2": "ClaimPayout(address,string,string)", +"e5020a62": "changeTeam(address,uint256)", "e5027880": "fortyEndTime()", "e50278a6": "sellAllAmountPayEth(address,address,address,uint256)", +"e50322a2": "shift(uint256,uint256)", "e5033268": "endPreICOTimestamp()", "e5033ee4": "maxBridgeHeight()", +"e5036c56": "HolderOperationalChanged(bytes32,bool)", +"e503d239": "unassignableTokens(address)", "e503f70d": "newArticle(string,string,string)", "e5042271": "setNick(string,string)", "e5043632": "ElectronicHealthRecordToken(uint256,string,uint8,string)", "e5045002": "setSecurityWalletAddr(address)", "e504862b": "assertEq30(bytes30,bytes30)", +"e504b838": "AllowedTransactorAdded(address)", +"e505fea3": "grabbed()", +"e5060672": "setFuturesLiquidationFee(uint256)", "e5065522": "updatePermissions(address,uint256)", +"e506b25b": "claimStakeReward(uint256)", "e506b9b7": "joule()", "e5071024": "setSemaphoreExternalNulllifier()", "e5071b8e": "incrementCount()", @@ -131207,93 +240142,176 @@ "e507d6dd": "getPlanActiveTime()", "e507e7a4": "brandAccountsLength()", "e508202d": "triggerLibraryEvent()", +"e5088f7a": "moveShare(address,address)", +"e50926ee": "VoteCountAtProcessingStartByProposal(uint256)", +"e5098279": "updateCycleMember(uint256,address,uint256,uint256,uint256,bool)", "e5098e85": "eliminarEntidades(uint256)", "e509b9a0": "initiateTransfer(string,string,uint256,uint256)", "e509cac5": "_changeTokenAddress(address)", +"e509dace": "stakingContractsMainnet(address)", +"e50a31b3": "decrementLongs(bytes32,uint256)", "e50a32a9": "PriorityQueue()", "e50a3bb1": "oraclize_query(string,string[],uint256)", "e50ab759": "contractIndex(bytes32)", +"e50b9ecd": "startCycle(uint256)", +"e50bda38": "overnightFeeRatio()", "e50beffb": "voteStart(uint256)", +"e50bfadf": "increaseBy(uint256)", +"e50c6529": "lockTokenWhole(address[])", "e50d0473": "SetRank(uint8,address,uint16)", "e50d2da1": "setSuperInvestor(address)", +"e50d3180": "transferFrozenToken(address,address,uint256)", +"e50d48f1": "whitelistTokenForCreator(address,uint256,uint256,uint256,uint256)", +"e50d582c": "evaluators(address)", +"e50d67d1": "addMulti(address[])", +"e50d703a": "unlock(address[],uint256[])", +"e50d71ea": "getMarketId(address,address)", "e50d8a8a": "deauthorizeMintRequester(address)", +"e50da99d": "setTransactionAmount(uint256)", "e50dce71": "testControllerApproveSetsAllowance()", "e50dd26a": "contractTokenWithdraw(uint256,address)", "e50dd478": "isFiscal()", +"e50e0ef7": "getOwnership(bytes32)", "e50e2f65": "EARLYADOPTERS()", +"e50e97ab": "_lastTokenSupply()", +"e50ee889": "registerPrimitive(address)", +"e50eea8d": "sellAds(uint256)", "e50ff8e9": "TestSportsG()", "e5104307": "IsPlayer(address)", +"e510574b": "indexCry()", "e5106ae9": "isValidNodalblockJson(string)", "e51073f4": "withDrawInWei(uint256)", "e510989a": "setNewDepositCommission(uint256)", "e5113280": "RecipientStringUpdated(string)", +"e5123aaa": "Image()", +"e5128b80": "getPortionCount()", +"e5134628": "sellEthToToken(address,uint256,uint256)", "e513575a": "getGblockWithOffsetFromCurrent(uint8)", "e5135ae3": "CSZ_ERC20()", +"e513d0e7": "drawCoach(uint256,address)", +"e513e9ca": "_setBirdOracle(address)", +"e5144c9f": "createPayment(uint256,address,uint256)", +"e5146f22": "getConcepts()", +"e515063f": "debug_print_constraints()", +"e515804a": "set(uint16,uint256,bool)", "e515a4d1": "gen0Limit()", "e515cd38": "deliver(address)", +"e516ce69": "setStoremanGroupStatus(bytes32,uint8)", "e516f4dd": "LogOwnerChange(address,address)", "e5173942": "PRE_SALE_SOFT_CAP()", +"e5174cbd": "spPublishHashOfS1(bytes32)", "e517fd54": "getBonusPercents(uint256)", +"e5182293": "setWithdrawMinRatio(uint256)", +"e5182e92": "HasNewMember(uint256)", "e5189e2a": "minSumICOStage3USD()", +"e518c699": "__test__refund(uint256)", "e5193c48": "withdrawGalacticTokens(address)", "e51949fb": "getMinAuditPriceSum()", "e51a3b40": "mul(uint8,uint8)", "e51a7826": "buyCore(uint256,uint256,uint256,bytes32)", "e51ace16": "record(string)", +"e51ad643": "mintForUsers(uint256)", +"e51af50f": "playerIds(uint256,address)", "e51bfd9a": "selfHybridizationPrice()", "e51c3257": "isTokenRateCalculated()", +"e51c3a52": "servicePoolsDays(uint256)", +"e51c7c4e": "userlastTreasuryRewardWithdrawTime(address)", +"e51cecf4": "BTC2xLongPercentage()", "e51d2093": "getSaleFee()", "e51d5c33": "Bitstraq_Token()", +"e51da4cb": "sixReserveWallet()", "e51dc14a": "setMinBidDifferenceInSzabo(uint256)", "e51dfd90": "cancelSellOrder(uint256,uint256)", "e51e3c61": "transferReserveFundTokens(address,uint256)", "e51e88bd": "MintingManagerApproved(address)", +"e51ed0a0": "depositBalance(int256)", +"e51f038b": "sendRewards1(address,uint256)", "e51f2c68": "change(address,uint256)", +"e51f4c92": "_claimFees(address,bytes4)", "e51f95cc": "init_crowdsale(address)", "e51fcfa2": "LLV_311_EDIT_4()", "e51ff1fc": "iterateOverThings()", "e520f09e": "tokensToMintInHold()", "e520fc7e": "treasure()", +"e5210e83": "GENERAL_VOTING_RULE()", "e5212deb": "_buyIcoToken(uint256)", "e521357c": "LocalsValidation()", +"e5215c65": "Split(address,uint32)", "e521889c": "distributePrizes(uint256,uint8)", +"e521e660": "changeicosetup(uint256,uint256,uint256,uint256)", "e5225381": "collect()", "e52269c2": "Ooredoo()", +"e52297a7": "getUserPunishedFeesByPID(uint256,address)", +"e522d1cf": "msTimestamp(address)", +"e522ef06": "curvesGauge()", +"e5233047": "cross(address,uint256)", "e523757e": "Cashback(address,uint256)", +"e524b36c": "_setDFLPercentages(uint256,uint256,uint256)", "e524d618": "UBetCoin()", +"e524e951": "insuranceRate()", +"e5253105": "withdrawFunds(uint256,uint256)", "e5254036": "changeNameOperation()", "e5258557": "setMigrateFeesDueToFork(bool)", "e525af22": "TOAB()", "e525c3d8": "dTRIGGER_NEXTWEEK_TIMESTAMP()", "e5260958": "Defraycoin()", "e5269bbf": "limitDefaultType()", +"e526a56a": "tokenCirculation()", "e526d7a0": "getTeamAddress(bytes32)", "e527217b": "Object(string,string)", +"e5277880": "checkDepositStart()", +"e527bcc8": "DifficultyChanged(uint256)", +"e5282c76": "autoTriggerSafeRebase()", "e52858c6": "token_b()", +"e5285dcc": "isSpent(bytes32)", "e5286c80": "token1stContract()", +"e52870f2": "STABLES_POOL_REWARD_ALLOCATION()", "e5291ac5": "getVMParameters(uint256)", +"e529abde": "rewardsGiven(address)", "e52b6a56": "getAmountBonus(uint256,uint256)", "e52bb742": "getGenre(uint256)", +"e52bc129": "addLiquidityIbETHv2AlphaOptimal(uint256,uint256,uint256,address,uint256)", "e52c0f24": "changeICOStartBlock(uint256)", "e52c17a8": "test_increaseTimeBy800000_timecheck()", +"e52c3558": "isDapp(address)", "e52c66c1": "getTotalLosses()", "e52c9da1": "giveaway(address,uint256,uint8)", +"e52cb36a": "isExecuted(bytes32)", +"e52cb68e": "enforceDistributeRewards()", +"e52cc3aa": "abalance(address)", +"e52cdcd4": "FundsLocked(address,uint256,uint256)", +"e52cf04c": "setExchange2(address)", "e52d0404": "addressOfIndex(uint32)", "e52d0659": "setPriceForBasePart(uint256)", +"e52e58fd": "contractDestruct()", +"e52e8c61": "newUserId()", "e52e9f15": "isAddressLocked(address)", "e52eb288": "buyFuel(address)", "e52eb764": "updateVIPBoard()", "e52efbf1": "getCompte_4()", +"e52f53d3": "addDepositors(address[],uint256[],uint256[],address[])", "e52f64ce": "releaseMany(address[])", +"e52fb346": "mintGasEnabled$()", +"e52fbc8b": "getToken(address,string[],string[])", +"e530a7d0": "MARKETING()", +"e530d14c": "addSubOwner(address)", "e530db1c": "pool_percentage()", "e531a9b8": "numOfUntransferableEcTokens(address)", "e53229c7": "zasxzasxqa()", +"e5328e06": "tvl()", +"e532c64c": "generateLongterm(uint256)", "e5333b5e": "close_next_bucket()", "e534155d": "holder()", +"e534315f": "approve_239(address,uint256)", +"e5348ad1": "mint_amt()", "e534a34b": "addThing(uint256,uint256,uint256,uint256,bytes32)", "e534bf4f": "sha(bytes32)", "e534c676": "getRefillPercFor(string)", +"e5356153": "receiptors(uint256)", +"e5357747": "_depositFees()", "e5357b02": "ReturnCode(uint8)", +"e53599c3": "withdrawPosition(bytes32,uint256)", +"e5359c79": "getEarnedJFC()", "e535ed35": "closeChannel(bytes,bytes,bytes)", "e5362206": "hdiv(uint128,uint128)", "e5362667": "getTotalTokenCount()", @@ -131301,74 +240319,149 @@ "e536a41f": "USD20Crowdsale()", "e536c723": "lowestContribution()", "e536f869": "pai_add(string,string)", +"e536f9eb": "CompanyAdded(uint256)", +"e5373c05": "maxRoi()", +"e5375d07": "getRecipientIndex(address,uint256,uint256)", "e53767bd": "denied(address,address)", +"e537862a": "getDrink(uint256,uint256)", "e537a195": "getSeatAvatarUrl(uint256)", "e537ceb9": "userOddsCycle(address)", "e53831ed": "setSomeValue(uint256)", +"e53863d1": "setMintlock()", "e5390e05": "thirdPeriodOfICO()", "e53910a2": "TestNetReputationToken()", "e5393f25": "GetSoftwareCount()", +"e5398a43": "BondPayoutsPaidDate(address,uint256)", +"e539a027": "installRelayer(address)", +"e539ef49": "_BASE_TARGET_()", +"e539f7c7": "SymbolUpdated(string,string)", +"e53a07ea": "ServicePurchase(address,uint256,uint256,uint256)", "e53a22ac": "addSubMilestone(uint16,string,string,uint64,bool)", "e53a8a5f": "GRAPE()", "e53a8cf4": "getTokensLeft(string)", "e53ae072": "PUCOINToken(address,uint256)", +"e53af7dd": "pendingtuna(uint256,address)", +"e53b2017": "rescueFunds(address)", "e53b373e": "TimeBankChain()", +"e53b3f6d": "warn(address)", +"e53b8f4f": "setMarketing1Account(address)", +"e53b958d": "claim3Crv()", +"e53c1421": "getEta(uint256)", "e53c4548": "transferOwner(address,uint256)", "e53c9a5f": "cf_confirm(uint256,uint256)", "e53cacba": "listOutEmployees()", +"e53cb355": "setchristmasday(uint256)", "e53cf8c9": "XBornID()", "e53cfed9": "setupMiniGame()", "e53d4988": "WLLToken()", +"e53dceff": "ownerOf(uint256,uint256,uint8)", "e53e04a5": "refillGas()", +"e53e92b5": "claimByAdmin(uint256,address,uint256)", "e53eb53d": "amountToSeedNextRound(uint256,uint256)", "e53ecb79": "allocatedBalance()", +"e53f714f": "allBalances(address)", +"e53f856a": "setReferral(uint32,uint32)", +"e5406dbf": "getSupportedAssets()", +"e5407ec6": "getInfoUpdateWhitelist(bytes32)", "e5408eae": "TEAM_RESERVE()", +"e540b8f2": "contractMemosCount()", "e5411525": "crowdsaleStartTimestamp()", +"e5411bcf": "updateInflationManager(address)", +"e5412eb8": "payloads(address)", "e54135ac": "updateExchangeRates(uint256)", +"e5417c34": "setDonCoin(address)", +"e541c71e": "clientCount()", +"e5423274": "buyTicket(bytes32)", "e54280e7": "setBZxContract(address)", "e542e7a3": "updateEtherCost(uint256)", "e542e7c5": "newIdAuctionEntity()", +"e5437265": "getNumberOfRewards()", "e54384f9": "removeEntryManual(uint256,address)", "e5438f5e": "FLiK(uint256,string,string,uint256,uint256)", +"e543945a": "deposit(bytes32,string)", +"e5442a9e": "aboveDustOrZero(address)", "e5449600": "unFreezeUser(address)", "e544b52c": "setNextRules(uint256,uint256,uint256,uint256)", +"e5451103": "currentOwner(uint256)", +"e545684f": "IsBlocked(address)", +"e5457f8d": "delegationByAddr(address)", "e545f941": "releaseToken(address)", "e546299b": "activatePass(bytes32)", "e5463032": "getWLAddress()", +"e54699c1": "clearSaneRate(address,address)", "e546bb0c": "apiAddress()", +"e546c0ca": "totalInvestmentAfterInterest()", "e546d9c4": "removeTeam(address)", +"e5473027": "buyLevelInfo()", +"e547e693": "getHolderTokens(address)", "e548799c": "registerCrowdsale(address,address,uint256[8])", +"e548b899": "setNyanContracts(address)", "e548cf13": "betOnColumn(bool,bool,bool)", "e548f086": "ETHOfCrySolObjects()", "e549053f": "AnotherStorage(address)", "e549114b": "stageOneCap()", +"e54919bf": "getKunCount()", "e54919e6": "hasInitCard2()", "e5494be1": "unlock2Y()", "e5499e55": "LWFToken()", +"e5499ffa": "stakingTaxEnabled()", "e549ec26": "safeDrain()", +"e54a0320": "NewListing(uint256,uint256,uint256,uint256,uint256)", +"e54a0a23": "firstDelegationsMonth()", "e54a29bb": "getRegisteredUser(address)", "e54a9646": "netAddress()", "e54aae13": "getMarketTopLevels()", +"e54ac468": "claimWpc(address)", +"e54af25f": "twisted3DTokenCreator()", +"e54ba74c": "getArrayTeamName()", +"e54bf056": "test_bytes()", +"e54c1671": "editRewardDistribution(uint256,address,uint256)", "e54c495a": "majorityReward()", "e54c4f98": "getRefundValue(address)", +"e54c8033": "_DODO_PROXY_()", "e54d4051": "receiveInteger(bytes,uint256,uint16)", +"e54d5d2d": "re_regUser()", "e54d62e9": "simDuration(bytes)", +"e54d7026": "verifyAffiliate(address)", "e54d8ccb": "Mappings()", +"e54d8fcb": "masterpieceToSnatchWindow(uint256)", +"e54e13c9": "getAvailableServiceEntityVotes(address)", +"e54e26b9": "allContracts(uint256)", +"e54e3c99": "setContributionParams(uint256,uint256)", "e54ebe61": "updateBalance(uint256,bool)", +"e54ee6b1": "isBlockSizeSupported(uint32)", +"e54f52cd": "burger()", +"e54f7522": "tokenName(address)", +"e55060c5": "executeOrder(address,address,address,bytes,bytes,bytes)", "e5514c9d": "MAX_PRESALE_TOKENS_SOLD()", "e55156b5": "setFee(address,uint256)", "e5515b55": "updateAssignedAudits(uint256)", +"e55175c6": "getSalesEndTime(uint256)", "e55186a1": "getUnit()", "e551bff0": "PokerPayoutValue()", +"e551d11d": "borrowLimit()", +"e5520077": "NewEvolveAtom(address,uint256)", "e5520228": "getEarningsRate()", "e55219c6": "Chromium()", "e5522a5b": "getClassMintCount(uint32)", +"e55254a5": "MAX_CHUBBIES()", +"e5527f72": "addLiquidityBNBOnly(address,bool)", +"e55296f1": "REDEEM_TYPE_HASH()", "e5533790": "setBiddingComponent(address)", +"e5535262": "brlxAddress()", +"e55393c7": "OrderApprovedPartTwo(bytes32,uint8,bytes,bytes,address,bytes,address,uint256,uint256,uint256,uint256,uint256,bool)", +"e5539406": "games(uint256,uint256)", +"e5541ff6": "_sortitionSumTrees(bytes32)", "e554482e": "arrayLength()", "e554a5ff": "closeBid(address,uint256)", +"e554ae57": "avi()", "e554af57": "BAJIDOR(uint256,string,uint8,string)", +"e554b66f": "activeTechPoll()", "e5553b33": "GenChip(uint32)", +"e5555b8f": "getMintMultiOutput(address[],uint256[])", "e555c1a3": "sellMyTokens()", +"e555e1c2": "viewKatForUsdtAmount(uint256)", +"e5562797": "bfclEuroRateFor72h()", "e5568317": "setDeliveryAddress(string)", "e556a08c": "validateToken(address,bool)", "e557498b": "reFund(address,uint256)", @@ -131379,109 +240472,174 @@ "e5583c59": "executeTxn(address,uint256,uint256)", "e5589756": "Debug(string,address,uint256)", "e5593b4d": "allocateTeamAndPartnerTokens(address,address)", +"e55955ed": "getBWprice()", +"e5595ac5": "addTrueProof(bytes32,uint8,bytes32,bytes32)", "e559afd9": "addToWhitelist(address,address[])", "e559c724": "TEAM_VESTING_PERIOD()", "e55a07b6": "setTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", "e55a07c2": "tokenSaleClosed()", +"e55a099a": "teamTimelock6()", +"e55a2587": "getwithdrawablemax(address)", +"e55a4c69": "emergencyDrain24hAfterLGEIsDone()", "e55a6ef6": "votingPeriodStartTime()", "e55a7afb": "Gemmes()", +"e55a87c9": "kycStatuses(address)", "e55ae4e8": "getPlayer(uint256)", "e55b4aa8": "getBalloonCosts()", +"e55b4ed0": "addAssetFundingManager(address)", "e55b55ce": "getPreSaleTokensAvailable()", "e55b69b3": "startPostIco(uint256)", "e55b8b62": "getPeerTokens(address)", +"e55bfd16": "_tokenSaleMode()", "e55c6d07": "getStartDateOfCampaign(bytes32)", "e55db48e": "roundId_()", +"e55e8be9": "changeDevPercent(uint128)", +"e55ec205": "paySlotReward(uint256)", "e55ed42e": "_phxToken(address)", "e55f98f3": "Log1(uint128,string)", "e55fae77": "setUpdatePeriod(uint256)", +"e55fdf9c": "updateFromOld(uint32)", +"e55ff0bf": "distributorMint()", "e56044c8": "incMemberBadRep(address,uint256)", "e5604559": "UserUpgraded(address,uint256,uint256,uint256,uint256)", "e560bf2e": "setOraclizeGasCost(uint256)", +"e560ce9c": "saveToken(address)", "e5612b3b": "finishDistribute()", "e5612d0e": "transferPaillier(string,address)", +"e561dddc": "getTotalBatches()", "e561f28a": "cityIndexToApproved(uint256)", +"e5627d81": "TakeDown(bytes32,uint256,string)", "e562dfd9": "openRound()", "e562f0ec": "setKYCRequiredToSendTokens(bool)", +"e563037e": "balancer()", +"e5632dee": "setBackup(address,uint256,address,uint256,uint256)", "e5637956": "MIN_INVESTED_ETH()", +"e563a7d0": "calculateLoanOriginationFee(address,uint256)", "e563d541": "delFrException(address)", "e564bd4d": "accFoundation()", +"e564da69": "setTokenPrice(uint256[],uint256)", "e564f88e": "tokensToIssue()", "e564fd25": "setNotary(address,bool)", +"e5653e99": "vault_btc()", "e56556a9": "getPlayerID(address)", "e5656f9c": "updateMsgSenderBonusDrops(uint256)", "e565b387": "FOUNDATION_POOL_ADDR_VEST()", "e565beeb": "softMtcTransfer(address,uint256)", +"e565eb4c": "minimumReached()", "e565fd1b": "SetStorage(address,address)", "e56646ae": "SmartPonzi()", +"e5664be6": "unwrapGift(uint256)", "e5664f65": "prePreSalePeriod()", "e5665b57": "_softcap()", "e566be4e": "EthRelief(address)", "e566dfc6": "_handleFunds(uint256,uint256,address,uint256)", +"e5670810": "rootBalance(address)", "e567756f": "setDevelopmentAuditPromotionWallet(address)", +"e5685df2": "giftRate()", "e56860c3": "fundingLock()", +"e56879b9": "combust()", +"e568959a": "rewardDecreasePerCheckpoint()", "e5689afa": "updateStorage(uint256,uint256)", +"e568ae6d": "KillerLockDays()", +"e5693f41": "priceFeed2()", "e56988dd": "latestBidTime()", "e569c1d4": "getMintOwner()", +"e56a869d": "wearableTypeMintCap(uint32)", "e56a9973": "marketCells()", "e56adb5f": "IsWhite(address)", +"e56b2430": "dBTC()", "e56b3e68": "mediate(uint256)", "e56b9dce": "GetPrize(uint256)", "e56bb194": "calculateMyPercents()", +"e56bc4f4": "removeSchainForNode(uint256,uint256)", "e56c10a0": "ONTExchangeRate()", "e56c174b": "getRate(address,address,uint256)", "e56c38b1": "modify_uint(uint256)", "e56c8155": "initialiseMultisig(address,uint256)", "e56c8552": "spinTheWheel(address)", +"e56ccc3b": "setWithdrawWaitingPeriod(uint256)", "e56d3fea": "developer_add_address_for_B(address)", +"e56dca1e": "setTaxrate(uint8)", +"e56df6c6": "editMintFee(uint256)", +"e56e03cc": "lW(address)", +"e56e3479": "NFTMachineFor(uint256,address)", "e56e4776": "avgSalesToCount()", "e56e56b2": "sellCard(address,uint256,uint256,uint256,uint256)", "e56e60f6": "SingularityTest12()", "e56ee3c1": "cityPrice()", +"e56f052f": "WhiteListSuccess(address,uint256)", "e56f3815": "isKnownOnly()", +"e56f8e8a": "jobs(bytes)", "e5700ddf": "jack_winner()", "e5702701": "minSellRateInPrecision()", "e57053cd": "airdropWinTime()", +"e5705a68": "setXendTokensReward(address,uint256)", "e5707fa2": "teamContact()", +"e57097c9": "deleteGroup(bytes32)", "e570be18": "DVIPBackend(address,address)", +"e571049b": "getSmartTokenCount()", +"e5711e8b": "rescueToken(address,address,uint256)", +"e5711ffc": "adapters(address)", +"e57131b8": "suicideMe()", "e5714ea3": "insertCLNtoMarketMaker(address,uint256)", "e571c35e": "ReverseRegistrar(address,bytes32)", "e571fd2d": "addPrescription(uint256,string)", "e5720f2d": "getCredibilityScoreOfClaim(bytes12,bytes12)", "e5723b6d": "buyerApprove(address,uint256,bytes32)", +"e5726b7f": "ChangeAddressTrust(address,bool)", "e572dee5": "bountyTokens(address,uint256)", "e5731b77": "UnpackRevocation(bytes)", "e5734c57": "setPhase1DurationInHours(uint256)", "e574015c": "auditSupply()", "e57405e2": "EMISSION_FOR_TEAM()", +"e5742970": "addSchedule(uint128[],uint128[],string)", +"e574cfc0": "myStakePoolShare(address)", +"e57567db": "neolastics()", +"e575c3dc": "mint(address,string,string,string,uint256,uint256,uint256,int256,int256)", "e575c5cb": "assertOnlyTo(uint256)", "e575df72": "getUserStatus(uint256,address)", "e576038f": "addNewSampleType(string,uint256)", "e5760520": "bountyWallet()", "e5766e84": "initPayoutTable()", "e5769ab9": "getLastPresser()", +"e576cd70": "griffin()", +"e576f40d": "setMintCostStaking(uint256)", +"e5771815": "setAllowMintAddr(address,bool)", +"e57738e5": "claimAndConvert2(address[],uint256,uint256,address,uint256)", "e5775515": "getUserWallet(string)", "e577d2c2": "updateEthToTokenOrderWHint(uint32,uint128,uint128,uint32,int256)", "e5781b71": "SatFix(int256,int256,int256)", "e5782fd5": "setFeeStructure(uint256,uint256,uint256)", +"e5789d03": "maxGasPerTx()", "e5789f5f": "getTotalLevelValue()", +"e579192c": "synchronize(bytes32,uint256)", "e5791c3e": "mustHoldFor()", "e5796716": "restrictTransfert()", "e579ebeb": "chAirDropFshare(uint256)", "e57a68da": "StephenHawking()", +"e57a9351": "onWithdrawAndDistribute(address,bytes32,uint256,address,bytes32,uint256,uint256,uint256)", "e57ac748": "resolveDisputeSeller(string,address)", +"e57b6d3b": "wadDiv(uint256,uint256)", +"e57b847e": "UserUnlock(uint256)", "e57b921d": "_createNumber(string,uint256)", "e57bc079": "DrawAddr()", "e57c09bc": "contentById(bytes32)", +"e57c0d25": "forceGetMortage(uint256)", +"e57c2434": "getNearestHour(uint256)", "e57c78ec": "unregisterPresale(address)", "e57c8d1b": "dummyAgent()", "e57d4adb": "approvedOrders(bytes32)", +"e57d5636": "initMarginRatio()", "e57d880a": "externalPurchase(address,string,uint256,uint256,uint256)", +"e57dc29f": "calcFee(uint8,uint256)", +"e57deb39": "check(uint256,bytes)", "e57e31fa": "approveSubmission(address,address)", "e57e5741": "onXon()", "e57e6593": "createClaim(string,string,address,uint256,string)", +"e57e79c7": "bankBudget()", "e57ea16d": "checkValueSent(bytes,bytes20,uint256)", "e57ebc0f": "FRPToken()", +"e57f14e1": "excludeFromFees(address)", "e57f5a1d": "removeFromStud(uint256)", "e58018c5": "openSaleEndTime()", "e5807e06": "unfreezeBoughtTokens(address)", @@ -131490,85 +240648,154 @@ "e580f6ab": "createGame(uint8)", "e581002e": "strategybacktest(uint32[],bytes32[],bytes32[],uint64[],bytes32)", "e5815b33": "JohanNygren()", +"e58160cb": "valid_coef()", "e58172b1": "cardCost()", +"e581762e": "getBatchesCountP()", +"e581890a": "collateralMintFee(address)", "e5820af7": "pushtx(address,uint256)", "e582645e": "isTokenSaleRunning()", +"e5829d20": "setCollateralizationRatio(uint256)", "e582b7e0": "lastBidAmount()", +"e582b9d0": "oog()", "e582dd31": "stored()", "e58306f9": "adminMint(address,uint256)", "e5834b4d": "setShareactive(bool)", +"e58378bb": "OWNER_ROLE()", +"e5837a7b": "UnfreezeKeeper(address)", "e5839836": "isFrozen(address)", +"e5843242": "delegates(address,address)", +"e5853980": "setMultiParams2(bytes32[],bytes32[],uint256[])", +"e58554f6": "AffiliateStatusChanged(address,bool)", +"e58555b3": "flashStart()", +"e585d548": "calcVotesForERC20(string,uint256)", "e585f69f": "TokenResolver()", +"e5862515": "setAvailableMin(uint256)", +"e58626ae": "cakeLiquidityAdded()", +"e586ced2": "farmerInvoices(uint256)", +"e586d764": "_checkTradeSize(address,uint256)", +"e58732a7": "updateMinimumShiftOutAmount(uint256)", +"e587c68f": "wethStrategy()", "e587fb71": "setTreasureBox(address,bool)", +"e5887f6f": "like_trackable(address)", "e588a2bb": "ChannelWithdraw(address,address,uint32,uint192)", +"e588a304": "price0Last(address)", +"e588b9bd": "promoMass(uint8[5],address,address,address,string)", "e5893cbe": "Register(address,bool)", "e58a6509": "SMTfund()", +"e58a90d9": "getTotalBillNft(address)", "e58ae45b": "migratePhraseData(uint256,uint256,uint256,uint256,uint256)", "e58b0eb1": "WinkelERC20()", "e58b5ab2": "setFinishedTx()", "e58b69f2": "getCompte_6()", +"e58b75ca": "UNI_SFI_EARNED()", "e58ba9e4": "stealCardWithSocialIdentity(uint256,uint256)", +"e58bb639": "acceptGovernor()", +"e58bc3f0": "winRate()", +"e58c3e86": "issuePynthsOnBehalf(address,uint256)", "e58c68bc": "MAX_GEN0_GIRLS()", "e58c8c5c": "checkParticipantStatus(address)", "e58ca07e": "IntegratedMoney()", "e58cd3cb": "setTokenCapInUnits(uint256)", "e58d116b": "addConfirmation(bytes32)", "e58d478e": "btcAddrPubKeyUncompr(bytes32,int256,bytes32,int256)", +"e58d8935": "setExpiryTimestamp(uint256)", +"e58da61f": "authenticate(bytes32,uint256,string,string)", "e58dd55a": "endThirdBonus()", "e58dede7": "_tokenAllocator()", +"e58e230a": "getGracePeriodEnd()", +"e58e9532": "totalsupport(uint256)", "e58eda1b": "ARTWORK_AUCTION_DURATION()", "e58ef8a8": "executeTransfer(address,address,uint256)", "e58f0289": "MANGGAHTOKEN()", "e58f2623": "getLotteryData()", +"e58f9ce6": "cra()", "e58fc54c": "withdrawForeignTokens(address)", "e58fdd04": "isFeed(address)", +"e5906a91": "seedPerBlock()", "e5910f04": "setCourceSale(uint256)", "e591253c": "refundPreICO()", "e59160e3": "nomin()", +"e5917769": "Bond(address,address,address,uint256,uint256)", +"e5919a4f": "trustedContracts(address)", "e591fa26": "getProjectFeedbackWindow(bytes32)", "e5920ab5": "getNoVotes()", "e592172e": "test_twoInvalidEqString()", +"e5924708": "queryAll()", +"e5926540": "ExpandY(address)", "e5926ddc": "getSaleLength()", +"e5927787": "pepFarm(address,address,uint256)", +"e592ac56": "pool6currUserID()", "e592f95a": "getRewardWinnings(address,uint256)", +"e5932c40": "setReward(address)", "e593428f": "PURCHASE(bytes32,uint256)", +"e5939089": "luckModifier()", +"e593e447": "addGuest(string,string,address)", +"e594203d": "getReserveToken()", "e5949b5d": "channels(uint256)", +"e594ab59": "maxNumOfValidators()", "e594ad35": "assignCore()", +"e594d081": "OwnerRemoved(address,address)", +"e5953382": "updateCurveRegistry(address)", +"e5959e48": "distributeLPfees(uint256)", "e5962195": "blocked(address)", +"e596d3c1": "initialize_base(address,address)", "e596d811": "approveBatchTransfer(address)", +"e596ead3": "normalizeDrawAmount(uint256,uint256,uint256)", +"e596f564": "totalSettleClaimedTokens(address)", +"e5974619": "repayBorrowBehalf(address)", "e597a27f": "getNumberOfBlocksRemainingToWin()", "e597f402": "create(bytes1,bytes32,bytes)", +"e5981a42": "upAllowance(address,uint256)", +"e5982220": "totalDepositedBNB()", "e59843ec": "allowAutoInvest(address)", +"e598d697": "accountSupply(address)", +"e599036c": "LogUpdateVerifier(address,uint256,uint256)", +"e5990d20": "toEthBytes32SignedMessageHash(bytes32)", "e5994905": "transferTokenFrom(address,address,address,uint256)", +"e59990f9": "calcSeniorTokenPrice(uint256,uint256)", "e59997c9": "getFmmsDetail(uint256)", "e599a767": "GGG()", +"e59a0407": "registeredNameRecord(address)", "e59a29a6": "getStakePerDraw()", +"e59a76b7": "emergencyWithdrawTME()", +"e59a9e92": "removeAddresToAudits(address)", "e59af25b": "buy_spice_melange()", "e59b0e14": "testIsNull(bytes)", +"e59b96be": "requestAirdropFromToken(uint256)", +"e59bafe9": "txRec_(bytes32)", "e59bcf52": "subLockValue(address,uint256)", +"e59c0390": "SalaryReceived(uint256,address,uint256,uint256)", "e59c4fa3": "smallUintFunc(int256,uint8,uint256)", "e59c5e56": "Filled(address,uint256,address,address,uint256,address,uint256,uint256)", +"e59c9815": "returnTokenValue()", "e59c9ada": "getBonuses(uint256)", "e59cef17": "RaisedFunds()", "e59cf926": "FOUNDER_ADDRESS3()", "e59d2b7f": "unfreezeTeamWalletBlock()", "e59d4912": "setOracleInterval(uint256)", "e59d843a": "Replicator(bytes,uint256,uint256,address)", +"e59d895d": "setInterface(bytes32,bytes4,address)", "e59de295": "setItemPerPage(uint16)", "e59de3a5": "drawToken(address)", +"e59e09ca": "Holdplatform_Withdraw()", "e59e1ca6": "getBrickBuilders(uint256)", "e59e6759": "ZXZX(uint256)", +"e59ee0c6": "validatorState()", "e59eee2e": "PRE_ICO_MIN_DEPOSIT()", "e59f611f": "InputLimit(uint256)", "e59ff828": "createOrder(uint32,uint32,uint256,bool)", "e5a01e69": "getWeaponNumber()", "e5a07419": "sellDividendPercentEth()", "e5a078a7": "cancelRegistration()", +"e5a0a6d7": "denyToken(address,address)", +"e5a13992": "cryptographs(uint256)", "e5a17818": "cancelSeller(bytes32,uint256)", "e5a1eac2": "setSellDividendPercentageFee(uint8,uint256,uint256)", "e5a23e7e": "changeBirthSettings(uint256,uint8,uint8)", "e5a252b1": "playerTempReward()", "e5a27038": "Pluton(uint256,string,uint8,string)", "e5a284f8": "roundFourBlock()", +"e5a2b5d2": "state_powerThreshold()", "e5a31c5d": "canGrantVestedTokens(address,address)", "e5a3363c": "luckyVoters(uint256)", "e5a34f97": "getFullround()", @@ -131576,48 +240803,84 @@ "e5a3c771": "expiredLockPeriod()", "e5a4bed3": "getInterest()", "e5a512af": "refund_with_close_position(address[],address,uint256[])", +"e5a5150b": "PlayerAdded(uint8,string)", +"e5a5832a": "OnRefund(uint256,address,uint256,bool,uint256,uint256)", +"e5a583a9": "setExitFee(uint256)", "e5a5fbc8": "crowdsaleInProgress()", +"e5a604bf": "costToPower(uint256)", "e5a62ffc": "Tile()", +"e5a649b4": "updateDuongChay(uint256,uint256)", "e5a64de6": "CompraUnidadesPases(uint16,uint8)", "e5a6b10f": "currency()", +"e5a6c28f": "userReward()", "e5a6fadd": "ReinsureSeveralDeaths(bool)", "e5a70ef7": "feeMultiplier()", "e5a71eb6": "Itterator9000Ultra()", "e5a749e8": "needSurvive(bytes32)", +"e5a758a4": "grandRewardPercent()", "e5a7b51f": "parentChange(address,uint256)", "e5a82fe7": "REXEN(address)", "e5a85478": "getUserTXCount()", +"e5a87063": "ownerToBalance(address)", +"e5a8765a": "declareLost(address,address,bytes32)", +"e5a8b31a": "setDeveloperFund(address,uint256,uint256)", "e5a912c7": "xdest()", "e5a93dd8": "inCirculation()", +"e5a97f07": "updateSupplyCap(uint256)", +"e5a98c47": "changeRis3Address(address)", +"e5a9d39b": "createContractGem(string)", "e5a9d6b0": "get_registrant(bytes32)", +"e5a9f52f": "pure_int256()", "e5aa3d58": "i()", +"e5aa8bff": "buyCrowdToken()", +"e5ab892b": "borrowerDebt()", "e5ab8be0": "isCollaboratorOrOwner(address,uint256)", +"e5ac125f": "setMarketContractRegistryAddress(address)", "e5ac7291": "lockAccounts(address[],uint256)", "e5ac808e": "checkProof(bytes32,bytes32,bytes32[],uint256)", +"e5acc85a": "transferfunds(address,uint256)", "e5ace862": "getPoolMinStakeTimeInBlocks(uint256)", "e5aceac5": "getWorlCupByID(uint256)", +"e5ad0667": "approve_200(address,uint256)", +"e5ad9ef9": "balanceOfpUNI()", +"e5adf64d": "timeToFinishGame()", +"e5ae48ef": "uniswapLiquidityDeposit(uint256,uint256)", "e5ae7721": "submitPayment(bytes32,bytes32[],uint256,uint256,uint8)", +"e5ae796f": "FarmerRequestedCertificate(address,address,uint256)", +"e5aeabe0": "SetAdvertiserAffiliate(uint256,address)", "e5af0e89": "setNewTokenURI(string)", "e5af18c5": "score(bytes32)", "e5af350e": "reloadWhiteByName(uint256)", "e5af3a35": "throwsSaleWalletIncorrectMultisig()", "e5af48d8": "isApproved(address,address,uint256)", "e5af8d92": "iiinoTokenAddress()", +"e5afa566": "stakeAmounts(address)", "e5afe3e6": "tokenPrices(uint256)", "e5b02393": "addSaler(address)", "e5b02447": "findTopNValues(uint256[],uint256)", +"e5b0c77f": "crowdSaleBonusBDeadline()", "e5b0ee4d": "changeVestingPeriod(uint256)", +"e5b11ebc": "convertWETHPairWithPermit(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"e5b12cc0": "behodler()", +"e5b1d55c": "singlePrice(uint256)", "e5b2169f": "Registry(string)", "e5b28c07": "weeksFromEndPlusMonth()", "e5b2a58d": "SinoeCoin()", +"e5b394aa": "setDividendContract(address)", "e5b4003b": "grantPoolRole(address)", +"e5b416b6": "getCommBalance()", +"e5b44eec": "adminUsrChange(address,address,bool)", "e5b5019a": "MAX_UINT()", +"e5b56182": "weekPeriod()", "e5b598d9": "hasChampSomethingOn(uint256,uint8)", "e5b5a527": "giveStellarReward()", +"e5b5d374": "setSgaTotal(uint256)", "e5b5fe72": "Put(address)", +"e5b6779c": "Add(uint256,address,uint256)", "e5b6b4fb": "Securities_5()", "e5b6eac4": "teamUnlock2()", "e5b73e08": "payer(address)", +"e5b74bd5": "gNonPayable()", "e5b754fb": "Redeem(address,uint256,uint256)", "e5b7ec88": "setVoteCut(uint256)", "e5b82bba": "dayTokenFees()", @@ -131625,51 +240888,110 @@ "e5b9a74c": "submit(address,string,string,string)", "e5ba08e5": "_baseDebt(uint256,uint256,uint256,uint256)", "e5ba0b8a": "sellOffer(uint256,uint256,address,bytes32)", +"e5ba9f07": "finishChangeMaxPercentAndTime()", "e5bb6575": "blockUser(address,address)", +"e5bb6819": "removeMix2()", "e5bb9fb9": "cancelTx(uint8)", +"e5bbd4a7": "updateProposerRate(uint256)", +"e5bc6c6e": "setValX()", "e5bc7be0": "replaceModuleHandler(address)", "e5bcb303": "getAccessorPurpose(address)", +"e5bce0ea": "calcEffectDCP(uint256)", +"e5bdcd37": "createProject(uint256,uint256,uint256,uint32,uint8,string,string,bool,uint8,uint8)", +"e5be91ee": "maxGagePerArtist()", +"e5bef9ac": "paraswapParams()", "e5bf1b75": "getElectionId(string)", "e5bf93b9": "balanceEther(uint256)", +"e5bff92a": "getBatchIdByIndexP(uint256)", +"e5c02d07": "setCreator(string)", +"e5c08635": "muld(uint256,uint256)", "e5c0de3e": "Labereon()", "e5c0fa69": "torchDividendsOf(address)", +"e5c18508": "sendeth(address,uint256,address,uint256)", "e5c19b2d": "set(int256)", "e5c2205e": "_calculateTokens(uint256,uint8,uint256)", +"e5c28bc6": "profileUpdateEvent(address,bytes32,bytes32)", +"e5c302bd": "votersInfo(uint256)", "e5c31ddc": "rejectTransfer(uint256,uint256)", "e5c361b0": "totalTokensICO4()", "e5c389cd": "setConfig(uint256,uint256,uint256,uint256)", +"e5c42a3b": "setExchangeContract(address)", "e5c42fd1": "addStakeholder(address)", "e5c46869": "refPercentage()", "e5c46944": "MultiSigWallet(address[],uint256)", +"e5c4855c": "LOG_receiveApproval(address,uint256,address,bytes)", +"e5c5097e": "setIPFShash(string)", +"e5c5d870": "testOnlyInvestorCanAcceptSale()", "e5c5dabb": "CSCResourceFactory()", +"e5c5e9a3": "decode(bytes)", +"e5c5f1d5": "burnaddress()", "e5c60091": "highest_bid()", "e5c60d0b": "INVESTMENT_FUND_TOKENS_SUPPLY()", "e5c6258d": "withdrawCrowdsaleTokens(address,uint256)", +"e5c69a3c": "Amount(uint256,uint256)", +"e5c6b618": "Nodename()", +"e5c6eb33": "setContract(address,bytes32,bytes32,address)", +"e5c7160b": "blocklist(address)", "e5c774de": "houseEdgeDivisor()", "e5c7bc6c": "treesOnSale(uint256)", +"e5c7d5b5": "activeSlot_ap3()", "e5c7e509": "testThrowTransferDisableNotEnabled()", +"e5c806a8": "transferGETfee()", +"e5c83d7f": "approvedMinter(address,uint256)", +"e5c855c9": "removeCoinFactoryAdmin(address)", +"e5c880f0": "transferWithMultipleAuthorizations(bytes,bytes,bool)", +"e5c89a68": "bulkSendERC20(address[],uint256[],address,address)", "e5c8b03d": "renounceSigner()", "e5c8eb2f": "mytesttokenToken()", "e5c91047": "addMeByRC(address)", "e5c92020": "freezeFrom(address,uint256,uint256,uint256)", +"e5c97b22": "lastRunIndex()", "e5c98b86": "RoundSet(uint64,address)", +"e5c993ec": "amountOfThreeFourth()", "e5c9c2ed": "_initialize(address,address)", +"e5c9d701": "kassiahotel()", +"e5ca7e34": "bandOracleMap(bytes32)", +"e5ca8dbe": "isIgniting(uint256,uint256,uint256,uint256)", +"e5cb3ec8": "createWagerAndDeposit(bytes32,address)", +"e5cb7fad": "sendInvestorsTokens()", +"e5cc68f6": "NewSell(uint32,address,uint256)", +"e5cc7da4": "getCompReadAddress()", +"e5cd21f4": "contractGasStationDelegate(uint256)", +"e5ce0143": "callApproveDirect(address,address,uint256)", +"e5ce1fef": "sellFloorCrv()", "e5ce8200": "withdrawForMkt(address)", +"e5cee35d": "API_NewJoin(address,uint256,uint256)", "e5cf2297": "amountOwed(address)", +"e5cf40ae": "executedMsg(bytes32)", "e5cf45b0": "FruitionToken()", "e5cfd1bc": "player3Timestamp()", +"e5cfd849": "R(uint256)", +"e5cfeeb5": "tokensStaked(address,uint256)", "e5d00bee": "initiateCrabPartData()", "e5d00f1f": "checkDepositQuest(address)", "e5d02cd0": "PriceReturn(uint256,uint128)", "e5d0713b": "maxGamesPerBlock()", "e5d0c1bd": "LATToken()", +"e5d0cfdf": "assignClientOracle(address,uint256)", "e5d17171": "skl()", +"e5d1785f": "updatePunkBio(string,uint256)", +"e5d1c6af": "getInputPrice(uint256)", "e5d2ce2f": "setCategory(uint256)", +"e5d382ed": "setRoleAddress(uint256,address)", "e5d3d9d7": "getBuyArray(address)", +"e5d41c6b": "minTokensBeforeSwap()", "e5d4610f": "generatorTransfer(address,uint256)", +"e5d5049b": "changeStakeMaxAge(uint256)", "e5d5876d": "_sell(uint256)", "e5d5c898": "isSuperior(bytes32[],bytes32[])", +"e5d5dd72": "requestData(address,bytes32,uint256,string,string)", +"e5d5f9ac": "paymentDetails(uint256)", +"e5d60411": "testIn(uint256)", "e5d607f3": "SocialLendingToken(uint256,string,string,uint256)", +"e5d648ba": "Unstake(address)", +"e5d69e3f": "changeLeastEth(uint256)", +"e5d69f60": "lastDividendInfo()", +"e5d6c33a": "superBeeUnlocked()", "e5d71cfe": "rewardLottery(bool)", "e5d787f2": "moreTokenPerEtherForPresaleRound()", "e5d8011f": "getCurrentTokenAmountForOneBtc()", @@ -131677,237 +240999,442 @@ "e5d824a7": "addData(uint256)", "e5d8f1ca": "removeAmount()", "e5d90d94": "LuckchemyToken()", +"e5d92891": "SafeEx()", +"e5d9c0ad": "update(int256,uint256,bool)", "e5d9dac4": "assetTransfer(address,uint256)", +"e5da1b68": "tokensBalance(address,address[])", "e5da2717": "BOBToken()", +"e5da2cb2": "stakeLP(uint256)", +"e5da378f": "getTicketBalance(address)", +"e5da47c3": "walletsIDMap(string)", +"e5daa4fa": "verifyProof(address,uint256,uint8,bytes32,bytes32)", "e5dada63": "_pushRoomNight(address,uint256,bool)", "e5db1a68": "bytes32Func(bytes32)", "e5db2612": "addPrivatePurchaser(address,uint256,uint256,uint256)", "e5db7a20": "mainnetAccountDict(address)", "e5db9b49": "getJobInvoices(uint256,uint8)", +"e5dbd426": "totalOut(address)", +"e5dc00b9": "mySecondFunction(uint256)", "e5dc476f": "getVideoGameCurrentPrice(uint256)", +"e5dc5f1a": "setPendingMaster(address)", "e5dc67d6": "setGameCloneFee(uint256)", +"e5dc7833": "GetPartyRole(address)", "e5dcc824": "getInfo1(address,address)", "e5dd05ab": "primaryLedgerCount(string)", +"e5dd455a": "isAutoComp()", +"e5dd5521": "investEvt(address,uint256,uint256)", +"e5dd6b91": "withdrawPurchaseToken()", "e5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", "e5ddb19d": "_applyLevelBonus(int256,uint256)", "e5de0b89": "EGGS_TO_HATCH_1FALCON()", +"e5de1a31": "mobsterIndexToApproved(uint256)", "e5de2925": "endPreSales()", +"e5de88e8": "playBalance(uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint8)", +"e5df0020": "_isMinter(address)", +"e5df32a3": "UniswapTranTransfrom(uint256,address,address)", "e5df3dd0": "unfrozen(address,uint256)", "e5df669f": "recoverAddr(bytes32,uint8,bytes32,bytes32)", "e5df7b10": "getBoughtTokens()", +"e5df8b84": "tokenAddresses(uint256)", "e5dfbe78": "setCreateDividendPercent(uint256)", "e5e04a33": "SendResult(uint64,uint64)", +"e5e058c5": "MintNToken(uint256)", +"e5e0e101": "CreatedWhitelistedTokenProxy(address,uint256)", "e5e123f1": "funeral(bytes32,int256)", "e5e1a202": "endTimeOne()", +"e5e1c9bd": "iteratePairLiquidationInfo(address,uint256,uint256)", +"e5e21164": "voteParams()", "e5e231dd": "pauseTokens()", +"e5e27d4f": "UpdateTargetToken(address,uint16,uint16)", "e5e288e5": "sendTransaction(address,uint256,bytes)", "e5e2fd7b": "balanceTreasury()", +"e5e31b13": "isPair(address)", +"e5e32587": "setTitanUsdt(uint256,uint256)", +"e5e367e5": "betterBetAmounts(address,uint256)", "e5e38fc7": "test_twoTrueAndFalseAssert()", +"e5e3a9b0": "migrationStrategy()", "e5e3ac4f": "removeAssociatedAddressDelegated(address,address,uint8,bytes32,bytes32,uint256)", "e5e41a63": "publishOption(uint256,uint256)", "e5e45b16": "notifyTempBreach(int256)", +"e5e47a2e": "createHegic(uint256,uint256,uint256,uint8)", "e5e4807f": "setPriceToPreSale()", +"e5e48a34": "contractsWhiteListMap(address)", +"e5e4d0c7": "NMP_DONATED_PERCENT()", "e5e51bd7": "getOrderTokenCompletedAmount(uint256,address)", "e5e53493": "requestKinTokenOwnershipTransfer(address)", "e5e5cfac": "Altcoin()", "e5e5dff1": "cancelBounty(uint256)", "e5e5e5d6": "emitGenericProposal(string)", +"e5e5eab8": "creationOther()", +"e5e675f6": "setTokenLock(address,uint16)", "e5e6a0aa": "ticketTransfereesAmount(address)", "e5e75fee": "fountainContractAddress()", "e5e792de": "_pro(address,uint256)", "e5e7a136": "CEO_SHARE()", "e5e7b82b": "ethEurRate()", +"e5e7bf58": "setFlipToken(address)", "e5e7c276": "isData()", "e5e7fa53": "div(uint96,uint96)", +"e5e8093a": "registerNewUser(string,bool,string)", "e5e88590": "unholdSubscription(uint256)", +"e5e95ec2": "commitUnstake()", "e5e9a9bb": "registerUsers(address[])", "e5ea1201": "changeTicketType(uint256,string,uint256)", +"e5ea1698": "BraveDeadPlayer(address,uint256,uint8,uint8)", +"e5ea7759": "validateAsset(bytes32)", "e5eab096": "setDomain(string)", "e5eabf14": "playInternal(address,uint256,uint256,address,uint256)", +"e5eae3d0": "token0UNC()", +"e5eb2f1a": "getPriceConvertTo(address,address,uint256)", +"e5eb37b0": "threeMonthReward()", +"e5eb6ab5": "getDivisor()", "e5eb9d7a": "SilverMoon()", +"e5eba075": "f(bytes20)", +"e5ebccf4": "erc721token()", +"e5ec083d": "minedBalance()", +"e5ec1d8c": "bounce()", +"e5ec1f02": "zzzV1IERC20()", +"e5ec51ce": "seedRate4()", +"e5ec87cc": "initialize(string,string,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "e5ec8df3": "calcTimedQuotaByPower(uint256,uint256,uint256,uint256)", +"e5ec9db9": "getPriceETH(address)", "e5ed1d59": "startGame(uint256)", "e5ed31cb": "updateBytes32(bytes32,bytes32)", "e5ed44c2": "Koplak()", "e5ed78bb": "setDateStart(uint256)", +"e5ed7c28": "totalUnlockedTeamTokens()", +"e5ee0f6e": "daiOracleKey()", "e5ee8dae": "publicGetElementOffer(uint256,uint256,uint256)", +"e5eeb32c": "totalDue(uint256)", +"e5eec444": "changeFee(uint256,uint256,uint256)", +"e5eed8ab": "transferSupporter(address)", "e5eee9be": "longJudge(uint256,address)", "e5ef0b95": "BitRRToken()", +"e5ef8abb": "recipients(bytes32)", +"e5ef8e38": "unic()", "e5f06556": "fillRequest(bytes32,string,uint256)", +"e5f0ab59": "EventLayEgg(address,uint64,uint64)", "e5f171d6": "BLOCKCHAIN_DEPOSIT_BETA()", "e5f2806a": "createPlayer(uint32[7],uint256,address)", +"e5f2c651": "curveFi()", "e5f2d88f": "settotalCardValue(uint256)", "e5f363f8": "FTTtoken()", "e5f3b2dc": "advisorsTokensWallet()", +"e5f3d3a5": "getFee(bytes32)", "e5f3e7b5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", "e5f3fcb1": "alias_price()", "e5f4906a": "moveTokenICO(address,uint256)", +"e5f4c56f": "_forMarketingAddress()", +"e5f55c7e": "purchaseCoupons(uint256)", "e5f59e7c": "setIsChargingManagementFee(bool)", "e5f5d05b": "tokensRaisedRound()", "e5f6186d": "maxContributionWei()", "e5f643cf": "InvestorWhiteList()", "e5f65c71": "initialBlockCount()", +"e5f688e2": "lastMintedtime()", "e5f6a908": "AddrCommunityDistribute()", "e5f6b137": "getOutCar(string,uint256)", +"e5f6cadd": "ethInvestors(uint256)", "e5f6d376": "updateStatusViaTokens()", "e5f6f252": "getUserNumEntries(address,uint256)", "e5f6f716": "thirdChainETH()", "e5f796fd": "CONTRIBUTION_END()", "e5f79bee": "PRE_SALE()", +"e5f81b73": "FinishGame(bytes32)", "e5f8ce92": "setPercent2(address,uint256)", "e5f92973": "conclude()", "e5f952d7": "rewardMathGeniuses(uint256,uint256)", +"e5f978e5": "with_Token(uint256)", "e5f982a4": "validateChainlinkCallback(bytes32)", "e5f9a40f": "TRHToken(address,string,string,uint256,uint256)", +"e5f9b080": "currentRoundPrice()", +"e5f9b501": "tmcPerBlock()", "e5f9ec29": "left51(uint256)", "e5f9f510": "BetMe(address,uint256)", +"e5fa2b70": "setBlocksPerYear(uint256)", +"e5fa6ff8": "getRewardValue(uint256)", +"e5face61": "isEvent(address)", +"e5fad4bf": "_LastRecordSet()", +"e5fad978": "maxWorkerCount()", "e5fb08c0": "tokenExchangeRateMile2()", "e5fb9211": "constructLeaf(uint256,address,uint256)", "e5fb9332": "mintProject(string,string,string,address)", +"e5fc25cf": "_deactivateOption(address)", +"e5fd04e6": "newStaking(uint256,uint256)", +"e5fd493d": "pipiaka()", "e5fd6364": "unregisterPublicKey(uint256)", "e5fdac45": "presentMissingChunk(bytes)", +"e5fe123b": "ROUND_1_TOKENSALE_LIMIT_PER_DAY()", "e5fe3d7a": "aprovaPagamento(bool)", "e5fe4f31": "buy(uint8,bytes32,bytes32)", "e5fe7870": "vote(string,uint128,uint256)", +"e5feb781": "depositCollateral(address,uint256,bool)", "e5ff2e8a": "mintTeamTokens()", +"e5ff5333": "_launchLimitAmount()", +"e5ff6b29": "resourceLPToken2RateAttrId(address)", +"e5ff6bc8": "_isStakeholder(address)", "e5ff7674": "restartPresale()", +"e5ffadc3": "testBytesConversionThrowsOnInvalidLength()", +"e5ffcf8e": "designatedWallet()", "e5ffea8e": "testCalculateNeededCollateral()", "e5ffeaf6": "fixAddress(address,bytes32)", +"e6006864": "tokenFromTinville(uint256)", "e600c817": "verifyUser(string)", "e600fd93": "getBonusPercentageByMachineMode(uint8)", +"e6018c31": "setNewMemberEth(uint256)", +"e601dd12": "sign(string,string)", "e6025572": "ShadowBox()", +"e6026348": "balanceByAddressAll(address)", +"e6029515": "getDAIAddress()", +"e6029a5c": "getFileData(uint256,uint256)", "e602af06": "confirmChangeOwnership()", +"e6031dcc": "accBoogiePerShare()", +"e6037b37": "CurWeightShare18()", +"e60389c1": "testGreaterThanOrEqual()", +"e603c270": "desciption()", +"e60451f4": "addItem(bytes32,uint256)", +"e6048a0b": "wbtcPrice()", +"e604a6ab": "_collectedAmountForLottery()", "e604cf9f": "get_all_squares()", +"e605bca0": "syncFee()", +"e606df87": "DAI_TOKEN()", "e6072d5a": "BONUS_MID_QTY()", +"e6074da7": "tokenDeposits(address)", +"e607861b": "TokensSent(address,address,uint256)", "e607a638": "DataController(address,address)", +"e607eb15": "DeleteShop(address)", +"e60830fa": "buyTokensWithBCH(address,string,uint256)", "e608433b": "weiForRefundPreICO(address)", "e608ca67": "calculateSubscore(address,int16,int16)", "e608d3e5": "marketingCap()", "e609120a": "intercrypto_convert(uint256,string,string)", +"e609295c": "exchange(string,bytes32,address,address)", "e609348a": "upgradeOwner(address)", +"e60a0abb": "setRewardRatePerDay(uint256,uint256)", "e60a33aa": "userEndGame(uint32,int256,bytes32,bytes32,uint256,address,bytes)", "e60a72bc": "ReferalsTokenHolder(address)", "e60a955d": "setActive(uint256,bool)", "e60aafab": "setIcoStatus(uint256)", "e60b0cad": "endPreICOStage1()", "e60b1424": "bytes32ToUint(bytes32)", +"e60b202f": "deleteRRSet(uint16,bytes,bytes,bytes,bytes)", "e60b2c9a": "SALE_2WEEK_BONUS()", "e60b7ff7": "batchTransferToken(address,address[],uint256)", +"e60baa7a": "produceBlocksPerDay()", +"e60bc3aa": "getTokenBal(address)", +"e60bd345": "push_inbound_counter()", "e60c11a0": "subContractBalance(uint256,uint256)", +"e60c754d": "Trust(address,address,uint256)", "e60d3caf": "updatePowerDayRate(uint256)", +"e60d3e20": "endandDie()", +"e60d585a": "getMatches(uint256)", +"e60d9b56": "totalCatnipSwapped()", "e60dbaae": "Jump()", +"e60dd4a3": "createNote(address,uint256,string)", +"e60df1b6": "getLastBlockCheckedNum(address)", +"e60e1904": "TraderStamp(uint256,string,string)", +"e60e6706": "GDPOracleTransferred(address,address)", +"e60ee411": "removeByValue(uint256)", +"e60f0b98": "payForService(address,address,uint256,address,uint256)", "e60f1ff1": "getExit(uint256)", +"e60f23bf": "SellOrder(bytes32,address,uint256,uint256,address)", "e60fb021": "publishOwner()", "e60fd342": "getCreateSharesFxpValue()", +"e6104340": "Error(uint8,bytes32)", "e6107cbb": "isBurnApproved()", "e6108fc9": "increaseLockBalance(address,uint256)", "e61109fd": "setFiscalVerify(uint256,uint256,uint256,bytes32)", "e611ad32": "CourseBaseOnIdStudentFunct(uint256)", "e6120842": "warningERASEcontract()", +"e61235b7": "withdrawSysAdminFunds(uint256,address)", +"e6125eab": "originalKimchi()", "e612a4b6": "get_order(string,uint256)", "e612c0ad": "team2()", "e6131706": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", "e6131a64": "UpdateBeneficiary(address)", "e6135ffe": "_removeIndex(uint256)", +"e6136ab6": "viewHistoricalReward(address)", "e6136d84": "icoBegintime()", "e61387e0": "knc()", "e6138b37": "TESTBRB()", +"e613b059": "getAvailableCpoll()", +"e613bb4e": "set_ready(bool)", "e613d3b2": "getParentUser(address)", +"e613da47": "eventStartDate()", +"e6147ff2": "lotteryEvent(address,uint256,uint256,uint256,uint256)", +"e6149e33": "cancel_authorization(address)", +"e614d0d6": "EIP712_DOMAIN_SCHEMA_HASH()", +"e6150400": "pendingWithdrawals(uint256)", +"e615362c": "activeStar(address)", "e6153d1b": "mint(string,bytes16,uint256,uint32,address)", +"e615524c": "Octan()", +"e6157140": "updateVerifier(uint256,uint256)", "e615ed91": "AragonTokenSaleTokenMock(address,uint256)", +"e61601bc": "displaybd()", "e61604cf": "liquidateBorrow(address,address,address,uint256)", +"e61632cf": "setSireOffer(uint256,uint256)", "e616c975": "GetAccountIsFrozenCount()", +"e6170a53": "setItemsMinters(uint256[],address[],uint256[])", "e6175794": "MaPToken()", "e617f204": "setWhiteListAdmin(address,address)", "e618f558": "TempTokensSend(address,uint256,uint256,uint256)", +"e6193cb9": "richCriterion()", "e6197f41": "setTokenSaleFinished()", +"e6198705": "predicate()", +"e619cf24": "to_staking()", "e61a3c73": "GuDuFengCoin(uint256,string,uint8,string)", "e61ab6c9": "accountPubPreSale()", +"e61abd4a": "proposedTimeLock()", "e61b6557": "reserveOwner()", +"e61b71da": "applyForPartner(uint8)", "e61b762b": "cancelAllSellOrders(address,uint256,uint256)", "e61b959e": "dev_outStream()", "e61c51ca": "topUpGas(uint256)", "e61c6320": "_recoverAddressFromSignature(bytes,bytes32)", +"e61c97b0": "artPurchaser(address)", "e61ca819": "indexToAddress(uint256)", "e61d5d50": "raisedOBR()", +"e61d945e": "burnBCsByCardName(string,uint256)", +"e61de305": "calcBalanceOfUnderlying(address)", +"e61f3851": "orderByAssetId(address,uint256)", "e61fde91": "BiciDevuelta()", +"e6203ed1": "liquidateDelinquentAccount(address,uint256)", "e6206711": "SendEthOn()", "e6207611": "setChests(address)", +"e620a25c": "swapToEth()", +"e620af69": "changeTDeployerAddress(address)", +"e62104a2": "foo9(address,int256)", "e6213127": "deprecate(bool,address)", "e621350d": "getDiscountAndSupply()", +"e62164c4": "approve_722(address,uint256)", +"e6219ac3": "createGen0DODOBatch(uint256[],uint256[],address)", "e621b149": "softCapUSD()", "e621b5df": "redeemEther()", "e6229c14": "_createBid(address,uint256,address,address,bytes32,uint256,uint256)", "e622abf8": "LOCK_END(uint256)", +"e622dd71": "KeyValueArrayOptionID(uint256,uint256)", "e6232ba1": "updateEndDate(uint256,uint256)", "e6234260": "depositCollateralOnBehalfOf(address,bytes32,uint256)", +"e6239168": "testUint256(uint256[])", "e623a1a6": "kcck256straddadd(string,address,address)", +"e623a37a": "forceCancelElection()", "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)", +"e624c4bc": "setLiquidityProvider(address)", "e624d199": "partnerSaleWallets(uint256)", "e625215c": "withdrawStake(uint256,bytes)", "e6252c0f": "deleteHpbNodeCache(address)", "e6256509": "SPNToken()", "e62580cb": "MYToken(uint256,string,uint8,string)", "e6259f53": "timeArrayOf(uint256)", +"e626223a": "childContract()", +"e626648a": "borrowFee()", +"e627f2db": "getTotalRewards()", "e6281254": "FundsMoved(uint256)", "e628dbf9": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256)", "e6293e23": "burnerAddress()", "e629837c": "updateAndSafeTransferFrom(address,uint256,string)", +"e629adff": "getTokenUserBP()", +"e62a0319": "removeWritersFromMedianWhitelist(address,address[])", +"e62a0bc3": "submitRinghash(uint256,address,uint8[],bytes32[],bytes32[])", "e62a4ac9": "setBUI(bytes32,uint256,int256)", +"e62a572a": "mooncake()", +"e62a6af3": "crlToLp0Route(uint256)", +"e62a9543": "_requireValidMaxFeePercentage(uint256,bool)", +"e62ab86b": "requestStake(uint256,uint256)", +"e62ab95c": "frozenNum(address)", +"e62abe76": "sonNumber(address)", "e62af875": "isContractOwnerLocked()", +"e62b5b0d": "piToBalancerGasOn(address,address,uint256,uint256)", +"e62b6575": "maxCapOfTokens()", "e62b795c": "addCourse(string,string,string,string,uint8,uint8)", +"e62bbc61": "_forAirdropMediaAddress()", "e62bd899": "mintStart1()", +"e62bdf49": "roll(uint256,uint256,address)", "e62c04bb": "OwnershipTransferred(address[],address[])", "e62c2f9c": "get_location()", "e62c9df9": "participantToEtherSpent(address)", "e62cc611": "ETHER_HARD_CAP()", +"e62cd26e": "signer_join_height(address)", "e62cd55c": "test_oneInvalidFalseEq()", "e62d64f6": "withdrawableBalance()", "e62d809d": "subdividendsOwing(address)", +"e62d8f64": "setMinimumFund(uint256)", "e62d909f": "TargetCreated(address)", +"e62dd287": "setName(address,address,string)", +"e62dfb38": "obtainDynamicGains(uint256)", "e62e3c07": "getTransactionDetails(bytes)", +"e62e87c7": "updateMigrationEnabled(bool)", +"e62ece30": "setPNetwork(address)", "e62eea47": "startSettling(bytes32)", +"e62f4148": "fireSimilar()", +"e62f6b92": "AUTHORISE_TYPEHASH()", +"e62f9814": "allowStaking()", +"e62fb2a6": "LogUpdateVerifier(address,uint256,uint256,uint256,uint256)", +"e62fc127": "SECTION_Pynth_EXCHANGE()", +"e630f5d6": "setSdrTotal(uint256)", "e631b536": "fields(address,uint256)", "e631e9b3": "solveIO(uint256,bytes32,bytes32,bytes32,bytes32)", +"e6321c62": "startTheProject()", "e63227b0": "freezeGlobalTansfers()", "e6324270": "profilParticipant(uint256)", "e632c2f3": "totalPurchased()", +"e632d424": "setRewards(uint256,uint256,uint256,uint256,uint256,uint256)", +"e6331d65": "lastFiredWinnerReward(uint8)", "e633cefe": "itemInfo(address,address,uint256,bytes)", "e63466a3": "_getToken(address)", "e6346867": "imaxChainToken()", +"e6347635": "addChicken(string)", +"e6348d28": "modifyProfit(uint256)", +"e6355f52": "setStakingRatio(address,uint256)", +"e635ba92": "reserveVaultAddress()", +"e635c5c3": "populateMatrix()", +"e635f9b4": "_whatDo(address,uint256)", +"e63614b0": "air_drop_range_start()", +"e63653eb": "defi99SupplyState(address)", "e63697c8": "withdraw(uint256,address,uint256)", "e6369e41": "Timestamp()", "e636bc3c": "addRoyLuxList(string,string,uint256,uint256)", +"e6378848": "pendingDollarValue(address)", "e6378d3a": "joinGame(bytes32,string)", "e637f824": "GetPlayerDataAt(address)", +"e638ca61": "withdrawnToday()", "e638d76d": "migrateDomain(bytes32,uint256)", "e638f372": "getDIVDPayoutPercent()", "e639481a": "getUpperBoundBlocksTillGameEnd()", "e63988bd": "getContributorInformation(address)", +"e639dded": "userName(bytes32)", +"e63a06d5": "getSkills(address)", +"e63a391f": "FEE_PRECISION()", "e63a6788": "miningOnePlat()", +"e63ab1e9": "PAUSER_ROLE()", "e63b029d": "finishSalvage(address)", "e63b681e": "redeemExternalToken(bytes32,address)", "e63b6b87": "DipTokensale()", "e63bc62d": "processProposal(uint256)", +"e63bc8c0": "baseAddresses(bytes32)", "e63c83c1": "getTotalWithdrawn(uint64,address)", "e63d38ed": "disperseEther(address[],uint256[])", "e63d4957": "totalLimitUSDWEI()", "e63da5f7": "bootstrap2()", "e63da84c": "getBattleRandom(uint256,uint256)", +"e63db398": "getSwapAmountAt(uint256,uint256)", "e63df4a7": "createJobEscrow(bytes16,address,address,uint256,uint256,uint32,uint32)", +"e63ea408": "emergencyWithdraw(address,address,uint256)", "e63edfef": "Learn()", "e63fb7d2": "getAdText(uint256)", "e6400bbe": "suspend()", "e64044c0": "payoutKeys(uint256)", "e640663a": "removeFromOwnershipAuctionTokenIDs(address,uint256)", "e640d5a8": "PubAccepted(address)", +"e640f352": "withdrawMyGain()", "e6416f4e": "sendFoo(address,uint256,bytes)", "e641bde1": "addInvestor(address)", +"e64290b6": "Created(uint256,string,string,address)", "e642b7b6": "isWhitelistOnlyStatus()", "e642b900": "Bugcoin()", "e642b9be": "MTP_PER_ETH_PRE_SALE()", @@ -131924,11 +241451,26 @@ "e6470fbe": "updateDefaultPayment()", "e6471555": "remForSalesBeforeStageLast()", "e64853c4": "polls()", +"e6488fc9": "fillDebtOrder(address,address[6],uint256[8],bytes32[1],uint8[3],bytes32[3],bytes32[3])", "e648ce75": "setSelfClaim(bytes32,bytes)", "e64906a4": "setTokenForPreSale(uint256)", +"e64a21f3": "unstakeBatch(uint256[])", +"e64a392b": "Reissuelog(uint256)", "e64a4e27": "updateDealConditions(uint256,uint32,uint32,bool,uint256)", +"e64aa2af": "isTokenPairValid(address)", "e64acfa4": "getRealValueToReturn(uint256)", +"e64b4f23": "removeSmartPool(uint256)", +"e64b4f94": "calculateAmountsInOut(address,address,uint256,uint128)", +"e64b5de7": "getAddressOfUser(uint256,address)", +"e64bfe93": "RemovedFromWhitelist(uint256,address,address)", +"e64c3e92": "burningRate()", +"e64c4871": "minimum_bid()", +"e64c7220": "allowPools(uint256)", +"e64cec63": "PlayerRefund(bytes32,address,uint256)", +"e64d2fb4": "claim(string,uint256)", +"e64df79c": "increaseTax()", "e64e3241": "mint(bytes32,bytes,uint256[],bytes,bytes)", +"e64e3751": "zapETH()", "e64f15a2": "deleteTask(bytes32)", "e64fd8b0": "transferTokenWallet(address)", "e650672b": "setGreenToken(address)", @@ -131937,37 +241479,60 @@ "e6511ce2": "createCodeContract(string)", "e6512ea2": "fundBounty()", "e6514de2": "PreSaleLimit()", +"e6516a15": "minVersion()", "e6519a35": "getCreationTime()", +"e651e04c": "supplyTotal()", "e6527376": "OneWorldCryptoCoin()", "e65284f1": "getRealPriceSpeed()", "e652ca86": "LowcarbonToken()", "e652f4cc": "getVoteCount(address)", "e6530b97": "addArbiter(address,uint256)", +"e653aab5": "ratifiedMintLimit()", +"e653be74": "delete_adapters()", +"e653bf3a": "setExchangeProxy(address)", "e653d52d": "approveProxy(address,address,uint256,uint8,bytes32,bytes32,string)", "e653d5d3": "GlobalStorageMultiId()", +"e653e187": "quitAmount(uint256)", "e653ec6a": "unsubscribeFromPool()", +"e6541431": "OpenSale()", "e6544b87": "ICORatio()", +"e6547f9b": "unsetVipAddress(address)", +"e6549002": "takeTeamShare()", "e65500e9": "startincreaseWithdrawalTeam()", "e6560c94": "_saveBonus(address,uint256)", "e6562fe1": "approveForwardedAccount(address,address,string)", +"e6569275": "setAddress()", "e6569b1e": "getConID()", "e6571176": "checkCertificate(bytes)", +"e6572f95": "getStakingCount()", +"e6574c51": "testRuntime()", "e657807b": "endIco()", +"e657e31a": "lastHeightVRF()", +"e6586b97": "OneOfGalleryFunctionsLaunched(bool)", "e658d221": "claimPlotMultipleWithData(uint256[],string,string,string,string)", +"e6590f35": "takerMarginMax()", "e6591f4e": "setNSFW(uint8,bool)", +"e6594abd": "initAccessControls(address)", "e65a0117": "earn(uint256)", "e65a2e7f": "forceEmpty(bytes32)", +"e65a715e": "yaxisBar()", "e65af219": "PlusCoin()", "e65b00b6": "Confirmation(address,bytes32,bool)", "e65b1fd0": "getConsecutiveDeaths()", "e65b490d": "_rewardWinners()", "e65b743e": "dispatchGains()", "e65b782f": "getCurrentTranche()", +"e65b830b": "numCauses()", "e65b96a7": "MyDanaToken()", "e65b99c6": "uservalue()", "e65bbceb": "makeAdoptionRequest(bytes5)", "e65c1244": "holderEthers(address)", +"e65c1310": "setyarnPerBlock(uint256)", +"e65c207b": "isCorrectSecret()", +"e65c817a": "UpdateBase(uint256,uint256)", "e65ca2fe": "Crowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"e65cd6e3": "removeBearer(address,uint256)", +"e65cf6c5": "Router_Address()", "e65d1522": "fromWei(uint256)", "e65d19ca": "createInactiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", "e65d6b49": "getCommission()", @@ -131982,34 +241547,56 @@ "e65f1d98": "bigLoop(uint256)", "e65f2a7e": "enroll()", "e65f5ea4": "distribute10MT(address[])", +"e65fd31d": "getClaimableBonusForAddress(address)", +"e65ff754": "eventConf()", "e6601fb4": "viewFunds(address)", +"e66056a0": "setBridgeStrategy(address[],address[])", +"e66075c2": "createControl()", "e660c7aa": "PresaleAddress()", +"e660cc08": "support(address)", "e660dd54": "compWallet()", +"e660e747": "interestRateTimeframe()", "e661a98f": "ecosystemtoken()", "e661b3d5": "returnStatus(uint256)", "e662bd25": "doTransfer(address)", "e662e9af": "getPersonalStakes(address,address)", "e662ff97": "sellMyTokensStocks()", +"e6631c63": "callRebase(address)", +"e66330d3": "operator(string,bytes32,string,string,address)", +"e6633c68": "setCurrentImplementationAddress(address)", "e6634e41": "tokensPerEthAtRegularPrice()", "e664214a": "releaseUnlocked(address,address,uint256,uint256)", "e6642528": "BitcoinIndigo()", "e664725b": "bn128_add(uint256[4])", "e664755b": "withdrawAttacker()", +"e664a34d": "AddNewProduct(uint256,string,uint256,address)", "e664d8e8": "showhospital(uint256)", "e664e1e0": "getAddressTwo(address)", +"e6653f3d": "_borrowGuardianPaused()", "e6657008": "TicketsInGame()", +"e665b266": "myAddr()", "e665dba0": "addAuthorizedExternal(address,address)", +"e665edf0": "getSynthExchangeSuspensions(bytes32[])", "e66623ad": "ETbankWord()", "e6662e2b": "UrbitToken(address,address)", "e666767b": "getPlayerBetForCurrentPlayRound(address)", +"e6671f90": "updateSchedule(uint256,uint256)", "e6678f33": "updateReferralBonusRate(uint256)", "e66825c3": "pricePerUnit()", +"e6685244": "upgradeStrat()", +"e6685721": "ASSESSOR_ADMIN_ADMIN2()", "e668a547": "SingularityTest8()", "e668a7af": "buyFrom(address,uint256)", +"e668d6d8": "tokenPoolBPs(uint256)", "e668e1f3": "noContestTime()", "e668e5ce": "getPlayerBetCount(string,uint256,string)", +"e668f6b6": "d6(uint256)", +"e6690474": "SystemChangePercentWeiJackpot(uint256,uint256)", "e6690fb1": "nextAuction(uint256)", "e6691249": "getCompte_5()", +"e6692f49": "updateDynastyValue(uint256)", +"e6695e68": "getSchainIdsForNode(uint256)", +"e66a4220": "migrateRouterAddress(address,uint8)", "e66a5e6b": "waveCap1()", "e66a6b22": "isSigned()", "e66aa720": "pureBalance(address)", @@ -132017,48 +241604,93 @@ "e66c4175": "LargeCapStartTimeChanged(uint256)", "e66c66d9": "setMonsterCreatorAddress(address)", "e66caeb4": "payFortune(uint256)", +"e66cbac6": "totalSponsered(address)", +"e66cfda3": "blockStars(address,uint256)", +"e66d02b5": "addMinterAdder(address)", "e66d1b84": "countHoldAmount(address)", "e66d4694": "gymContract()", "e66d9874": "REQUEST_REJECTED_BY_HOST()", "e66dda4e": "wallocked()", "e66dde38": "startRound(bool)", +"e66de073": "taxDeduction(uint256)", "e66e00f8": "getAdminDashboard()", +"e66f3fd6": "deposited1()", "e66f51fd": "AxieERC721Metadata()", "e66f53b7": "curator()", +"e66f5ab0": "getDynamicGain(address)", "e66f6e75": "getIsAttack()", "e66f7bba": "oracleItQuery(uint256,string,string)", +"e66f9603": "typeToPredicate(bytes32)", +"e66fa239": "vestingTypes(uint256)", +"e66fbd91": "GLXYLP()", +"e66ff375": "safemooncakeTransfer(address,uint256)", +"e6702c93": "getPoolInfoByIndex(uint256)", +"e6706cb9": "getRefsTo(string)", +"e670c15d": "removeNodeSelf()", "e670f7cd": "checkHash(string)", +"e6710e5b": "approve(address[2],uint256[2])", +"e671499b": "buyToken(address,uint256,uint256)", "e6714f63": "eth_min()", "e6717d3f": "setPresidenteDeMesa(bytes32,uint256,bytes32)", "e671ac23": "getMonthClaimed(address)", "e671f510": "onEtherandomExec(bytes32,bytes32,uint256)", "e6722531": "checkBoosterQuest(address)", +"e67254fc": "setDistributionPaused(bool)", +"e672c4d3": "setCFD(address)", "e672eb49": "GetBetInformation(uint256)", +"e6731390": "LowGravityTraining(address)", +"e673df8a": "operators()", "e673f646": "setContributor(address,address,bool,uint8,uint8,address)", +"e67405cb": "timelockedAddresses(address)", "e6744035": "booleanToUInt()", +"e6744e8d": "newPuzzle(bytes)", "e6748da9": "setBytes(bytes32)", "e674a0bd": "unlock(address,address)", +"e674f5e8": "callPrec(address)", "e67524a3": "mintTokens(address,uint256,string)", +"e675265e": "unsealTimestampLimit()", +"e67552b3": "crowdsaleAllowance(address)", "e6758649": "revokeStakeholderConfirmation(uint256)", +"e676882f": "defaultVotes()", "e676d53f": "GRAD()", "e6774e1e": "setCapTab(uint256,uint256)", "e6779bba": "_calculateTokensAmount(uint256)", "e677d67d": "decode(bytes,uint256)", +"e6788c7d": "onSale(uint8,uint8)", +"e678ac10": "getEventsVoter(uint256,address)", "e679366f": "setExchangeTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"e679aa7b": "fund2()", +"e679c4a9": "Utility_Status(address,uint256)", +"e679e29d": "earnedToAFIPath(uint256)", +"e67a81f4": "setTotalActiveBalanceLimit(uint256)", "e67ad254": "airBegintime()", "e67bcfb6": "viewPreSaleCancelledList(address)", +"e67bea52": "totalToRefund()", "e67c4f96": "_createItem(string,address,uint256)", +"e67c55f6": "_currentPlayerAmountUnclaimed(address,uint256,uint256)", +"e67c876e": "confirmBlockerOperatorsContract()", +"e67ca8a3": "controlledBurn(uint256)", +"e67caeb4": "extractMT(address)", "e67cdfb7": "moveOldUser(uint256)", +"e67ce706": "buyBaseToken(uint256,uint256,bytes)", "e67d35c6": "UmeTravelNet()", "e67d5b16": "SpeedJump()", "e67e04f9": "startAcceptingDonation()", "e67e3d56": "ethTaxRate()", +"e67e402c": "mint(uint256,address,string)", +"e67e7c72": "smgFastBurn(bytes32,bytes32,uint256,uint256,address,bytes,bytes32)", "e67e8aaf": "cliffPercent()", "e67eed44": "getTicketOwner(int256,uint256)", "e67f3cde": "about(address)", +"e67f4cc5": "returnAllUsersEscrows(address)", "e67fcd10": "createSale(string,uint256,uint256,uint256,uint256)", "e6807ca9": "checkBlacklist(address)", +"e680be4d": "getUnlockableAmount(address)", +"e680c2fd": "STCDRToken()", +"e680ed8e": "managerClose(uint256)", +"e68112e2": "updateTranche(address)", "e68122e2": "createConsent(address,string,string)", +"e681c4aa": "ESCROW()", "e681e906": "_disableModule(bool)", "e681f989": "saveMetaData(address,bytes32,bytes32)", "e68215ec": "getOrganizerInforById(uint256)", @@ -132068,10 +241700,20 @@ "e682e290": "getWhitelistStatus(address,address)", "e682e2b2": "PingToken()", "e6838ffa": "CbDataStandardToken(uint256,string,uint8,string)", +"e683ad44": "stake(uint256[],uint256[])", +"e683ff07": "listToken(string,string,uint256)", +"e6848e62": "GetDynamicProfitTotalAmount()", +"e684a55f": "Bid(address,uint256)", "e684aa5c": "amountAlreadyPaidBack()", "e684d75d": "from_Initialisation_to_Lifecycle()", +"e685cc04": "openLockETHAndDraw(address,address,address,address,bytes32,uint256)", "e685f2fe": "SilcCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e686882e": "isSupplyLessThan100Million()", "e686b89a": "stage_2_price()", +"e68777d7": "numManagers()", +"e687b912": "preR1()", +"e687ecac": "pool10users(address)", +"e6884244": "rankPoolIndexMap(uint256)", "e6885aad": "Notary()", "e688aab4": "changeOperative(address)", "e688d097": "activekey(address)", @@ -132079,81 +241721,157 @@ "e6890105": "addRefundTransaction(uint256,uint88)", "e6891995": "KStarCoin()", "e6891a55": "underwritePriceOf(uint256)", +"e6893d6b": "set_new_taxAddress(address)", "e6898a7d": "getSex(uint256[2])", "e689928e": "seventyeight()", "e689aa66": "isAllocated9()", +"e689c476": "MARKETING_ADDRESS()", +"e689eb97": "addYToken(address[])", "e68a471d": "getLatestTokenPayday(address,address,address)", "e68a555d": "UpdateUserPELOAmount(address,uint256)", "e68a655c": "setEtherDeltaFees()", "e68a7c3b": "getAccounts(uint256,uint256)", "e68a9610": "releaseTokensTo(address,address)", +"e68af518": "getCountOfMultipliers()", +"e68b0944": "nftTokens(uint256)", +"e68b4951": "whitelistedMarkets(address)", +"e68b7cf4": "totalDebtDai(bytes32,address)", "e68c32b3": "cgadmin(address)", +"e68cc947": "endCrowdsale(uint256,uint256,uint256)", +"e68d0c6e": "approveTarget()", +"e68d3569": "borrow()", "e68d3ae3": "escrow(uint256,string,address,uint256)", +"e68d5f63": "YEAR3_BOUNTY()", "e68d7535": "cancelWhiteList(address[])", +"e68da9ce": "approve_435(address,uint256)", +"e68deb59": "addReduction(uint256[5])", +"e68df4d0": "approve_218(address,uint256)", +"e68e035b": "currentEpochReward()", "e68e64cb": "getCurrentUserReward(bool,bool)", +"e68e9950": "investorTokens(address)", "e68f05fe": "SetCrowdsaleAddress()", "e68f08a0": "MatchGetted(uint256,bool,uint256,uint256,uint256)", +"e68f909d": "queryConfig()", "e68fb207": "makeOrder(address,address,uint256,uint256)", +"e68fc0ee": "principalBalance(address)", +"e68fdc5f": "defineRole(bytes32,bytes4[])", +"e6900896": "setDEFIBASEToken(address)", "e690833a": "getPropertyRatingTuple()", +"e690bc2b": "estaActivo()", "e690d9bf": "Rollercoaster()", "e6917e67": "tierOnePurchase()", +"e6919c82": "underlying(address)", "e691bed4": "get_arbits(address,address)", +"e69201b3": "ResourcesTransfered(uint256,uint256,uint256,uint256)", +"e6924fe2": "getAllSaleAddressesBySaleID(uint256)", "e693e4d1": "neironixProfitAddress()", "e69405fd": "_endDutchAuction(uint256,uint256)", "e69432c8": "getMyNormalDragons()", "e694d107": "getlastDividendPoints()", +"e694de80": "baseDoomFee()", "e694f694": "distributeLRNX(address[],uint256)", "e69506aa": "Tokens_Per_Dollar_Denominator()", +"e6953eaf": "launch(uint256,string,uint64,uint64,uint256)", "e6955d7c": "XYCC()", "e6957514": "mergedMinerValidatorAddress()", +"e695acac": "viewLoanConatractDetails()", "e695c00c": "assertEq29(bytes29,bytes29,bytes32)", +"e6960d02": "curriculum3()", +"e696303d": "getSynthBytes32(string)", +"e696393a": "nonRebasingSupply()", +"e69650a6": "reveals(uint256,uint256)", "e696d10d": "processPurchase(address,address,uint256)", +"e696d303": "transferRight(address)", "e696fb9a": "_6_friends()", "e696fd64": "change_ico_finish(uint256)", +"e69715f9": "__ProxyFactory_init(address)", "e6972dbb": "readEventFromDatabase(uint64)", +"e6974a0a": "claimBirdPlus(address)", "e6979b90": "multiAdd(address[],uint256[])", "e697b5d8": "referrals(address,uint256)", +"e697ea62": "approve_893(address,uint256)", "e69852d0": "getUserNameOf(address)", +"e6985e41": "getConvertValue(address)", "e698816f": "getTokenIdOfCR(string)", +"e698c692": "openPurchase()", +"e698d4b9": "nyaCash()", +"e69919ae": "pc()", "e69932e5": "getFreeSeeds()", "e6997f6d": "rootUTXOMerkleTreeHash()", +"e69980ce": "mintMarketingYear1(uint256)", "e699e8c3": "removeDefaultOperator(address)", +"e69a2972": "TFI_minter()", "e69a2d9a": "Lent(uint256,address)", +"e69a96f1": "LogModuleRemoved(uint8,address,uint256)", +"e69af248": "isRewardingCatnip()", "e69b414b": "issuedTokensAmount()", "e69b9b65": "exchangeableTokensFromSale()", +"e69c0171": "uplinesToRcvEth(uint256)", +"e69c04d9": "getAddressOfSender()", "e69d09cf": "releasedForTransfer()", "e69d27a8": "lifeFactor_v()", "e69d849d": "donate(address,uint256)", +"e69dfcfc": "getUserLevel()", "e69e04b3": "defaultPrice()", "e69e4640": "calculateBalance(uint256,uint256,uint256)", +"e69e564e": "disableTransition(bytes32,bytes32)", +"e69e87ac": "NINJA()", "e69e9337": "PERSONAToken()", +"e69ec653": "isTokenListed(address)", +"e69edc3e": "TransferOwnerToZeroError()", +"e69f5b31": "rewardNest()", +"e69f8fd4": "AuctionRulesChanged(uint256,uint256,uint256)", "e69fde41": "KentraToken(uint256,uint256)", "e69ffce8": "changeRegulator(bool)", "e6a0525f": "getStudentID(bytes)", +"e6a0796a": "changeHoldersW(uint256)", +"e6a092f5": "target0drop()", +"e6a12ca9": "shifterRegistry()", +"e6a1ba4c": "depositTokenSymbol()", "e6a1e811": "newBet(uint8)", +"e6a23c3d": "endPrivateSale()", "e6a27cf2": "getUserEarningsInfo()", "e6a33268": "secondRate()", +"e6a3890a": "setBackupExpiryDate(address,uint256,uint256)", "e6a3afe8": "sendTreasuryTokens()", +"e6a3c07d": "joinMutual()", +"e6a43905": "getPair(address,address)", "e6a43d63": "crowdsaleSoftCap()", "e6a45026": "fetchStageIndexBySnapshotBlock(uint256)", +"e6a454e7": "amountsDue(address)", +"e6a46225": "setMaximumOpenAcoOnAcoPool(uint256[],address[])", "e6a50d84": "getAddressFromIndex(uint256,uint8)", +"e6a5789a": "initializeETHBalance()", "e6a5d78d": "_getMerkleRoot(bytes32,bytes32[])", "e6a605df": "PreTgeEnable()", +"e6a63711": "seeTrackDetails(bytes32)", "e6a6d4c8": "getExecutedTransactions()", +"e6a71e61": "getClientRecord()", +"e6a73891": "scans(uint256,uint256)", "e6a7638c": "eucledianDistance(uint256,uint256,uint256,uint256)", +"e6a81ec4": "getOwnerRequireNum()", +"e6a89721": "addSettings(address,uint256,uint256,uint8,address,address)", +"e6a8e745": "latestRootMessageSender()", "e6a8fe04": "evHarvest(address,uint256)", "e6a9026b": "submitTransaction(address,uint256,string,bytes)", "e6a9627c": "setAgentAddress(address,address)", +"e6a96508": "setDepositMinTrx(uint256)", +"e6a98c32": "breedingMultiplierCoolDown()", "e6a9b2d8": "createTAO(string,string,string,string,bytes32,address,uint256)", "e6aa216c": "getExchangeRate()", +"e6aa3f31": "gradeThreeCountLimit()", "e6aa96a5": "CRS()", +"e6aa993e": "openLockGemAndDraw(address,bytes32,uint256,uint256,bool)", "e6aaae81": "tokensSoftCap()", "e6aac98f": "currentDayTS()", +"e6ab5688": "_wrapfee()", +"e6ab8d48": "getMultLPLength()", "e6ab96ed": "unstakeContent(bytes32)", "e6abaaba": "tier_cap_2()", "e6ac17a1": "tokens_total()", "e6acca00": "_finishBet(address)", "e6acf0c1": "determineOutcome(bytes32,uint8[],uint8[])", +"e6ad0535": "AccountPayment(bytes32,uint256)", "e6ad204e": "vestingAccounts(address,uint256)", "e6ad5bc7": "getFrozenTimestamp(address)", "e6adde32": "setIsHiddenMessages(bool)", @@ -132164,39 +241882,85 @@ "e6ae967b": "updateOrder(bool,uint32,uint128,uint128,uint32,int256)", "e6af2d5d": "TRICToken()", "e6af35f0": "calculateFee()", +"e6af61c8": "totalPenalty()", +"e6b0060f": "purchaseViaName(bytes32)", +"e6b05950": "depositAt(address)", "e6b09e92": "setAd(string,string)", +"e6b0eaf1": "ret(uint256)", +"e6b1303d": "setTournamentAddress(address)", +"e6b14fe4": "getNextAdminActionID(uint8,uint160)", "e6b1602f": "buyOneRabbit(uint256)", "e6b18f52": "LongTermProjectTokensAddress()", "e6b1c48d": "Amal()", "e6b1e71c": "jackpot(uint256,uint256)", +"e6b2cf6c": "nextEntryId()", +"e6b2d214": "getUnclaimedXGT(address)", +"e6b2e2dd": "lossAmount()", +"e6b2fb4a": "manualMinted()", "e6b35875": "getAllbetByGtype(int8)", +"e6b5352c": "move(address,address,uint128)", "e6b55ff3": "TokenEmissionEvent(address,uint256,bool)", +"e6b5bb0d": "depositToken(address,address,uint256,string)", +"e6b5dacb": "wrgEthz()", +"e6b6db97": "ClaimRequested(uint256,uint256,uint256,address,bytes,bytes,string)", "e6b6f9d5": "baseDiscounts(uint256,uint256,string)", "e6b71e45": "changeIncrease(address[],uint256[])", +"e6b7ad2e": "mappingDone(uint256)", +"e6b82229": "StartBurnerTimer(uint256)", "e6b827a6": "becomeSpermlord()", +"e6b89136": "tradeChargeFee(address,uint256)", +"e6b8b825": "liquidationPremium()", +"e6b8f954": "voteCastersWeights(uint256)", +"e6b92a66": "nctRead(uint256)", "e6b950f3": "_computeCooldownRemainingTime(uint256)", "e6b96447": "updateMaxNum(uint32)", "e6b96fe3": "setupFund(bytes32,address,uint256,uint256,address,address,address[],address[],uint8,bytes32,bytes32)", "e6b972f5": "userName(address)", +"e6b9e165": "NewWinner(address,uint256)", +"e6b9e897": "burnAndCollectEther(address)", +"e6ba2bfe": "sbdo()", +"e6ba4136": "internalStatus()", "e6ba54c1": "specialInfo(uint256)", +"e6ba8e28": "Flights(uint256)", "e6bb64b4": "generateChampionTokens(address,uint256,uint256)", "e6bb88b3": "setMinEscrow(uint256)", +"e6bba1bc": "buy(address,address,uint256,uint256,uint256,uint256,uint256)", +"e6bbe424": "deployedTimestamp()", "e6bbe9dd": "getMinThreshold()", +"e6bbfc71": "acomToken()", "e6bc2cc9": "Marcela_Birthday(string,string,string,string)", +"e6bc304d": "dSMTX()", "e6bc5269": "CrypexToken()", +"e6bc5fd8": "setArbitrationResult(uint256,uint8)", "e6bc7d2a": "FairDistributionToken()", +"e6bc8c98": "__AllowTokenTransfer()", "e6bcbc65": "mostSignificantBit(uint256)", "e6bcc297": "STARTING_BANKER()", +"e6bce1ae": "exit(bytes32,address,uint256,bytes)", "e6bd0eca": "newUser(address,string,uint256)", "e6bd11b2": "availableBuyInShares()", +"e6bd1c64": "setBrightIdVerifiers(address[],uint256)", +"e6bd8bb8": "testLockShareContract(uint256,bool)", +"e6bd92b9": "preSaleTarget()", +"e6be0b87": "drawCards()", +"e6be9b56": "getAuctionBalances()", +"e6beeac3": "batchFuturesTrade(uint8[2][],bytes32[4][],uint256[12][],address[3][],bool[2][],uint256[5][],string,string)", "e6bf3fdc": "removeFarmer(address)", "e6bf6ca2": "check_deadline()", "e6bf70e2": "register(bytes20,uint96,uint32,bytes32[],uint16)", +"e6bfbfd8": "initialize(address,address,address,address[])", "e6c01488": "addComment(bytes32,bytes32,string)", +"e6c01f94": "transferFromOneToMany(address,address[],uint256[])", +"e6c0356b": "totalstakings(address)", "e6c0459a": "right79(uint256)", +"e6c09edf": "disable(address)", +"e6c0b5d2": "doctorDetails(uint256)", "e6c0e6d5": "discountRate()", "e6c0e9e1": "randomDS_sessionPubKeysHash(uint256)", "e6c160dc": "RateSetter()", +"e6c169be": "OrderEpochErrorSelector()", +"e6c1892f": "AdminDisabledForever()", +"e6c1909b": "isTaxEnabled()", "e6c1beb4": "prepend(address)", "e6c1d7fc": "getHedgeIndices(address)", "e6c21c24": "isCertified(uint256,uint256)", @@ -132207,201 +241971,355 @@ "e6c2f4fe": "SendmoneySend(uint256)", "e6c3329d": "EthaToken()", "e6c35a91": "batchAirDrop(address[],uint256[])", +"e6c3b1f6": "tokenType(uint256)", "e6c3b4ab": "testBalanceAuth()", "e6c4498b": "LOCKING_UNLOCK_TIME()", +"e6c4698c": "cxcUnitsPerEth()", "e6c4a46a": "_addRecord(bytes32,address,string,string)", "e6c4c2c7": "admin_tokenAdd(uint256)", "e6c50020": "callAllFromMew(uint256,address)", +"e6c51233": "founderAdmin()", "e6c52016": "setToken(address,uint256,address)", "e6c54139": "BitmassXToken()", +"e6c57897": "daiToHe3Address()", "e6c57a08": "timeIncreasePerTx()", +"e6c58bbe": "cast2(address[],bytes[])", "e6c5e94c": "setinterval(uint256,uint256)", "e6c63912": "lastBlock_a17Hash_uint256()", +"e6c681c3": "setApproval(address)", "e6c721e4": "senderDelegates(address,address)", +"e6c74822": "originalAmounts(address)", "e6c75c6b": "triggerEvent(string)", +"e6c780dd": "setKey(string,string)", "e6c7c456": "balanceOfContract()", +"e6c7c60f": "setLiquidityProviderContract(address)", +"e6c7f7fe": "setExternalContract(uint256,address,uint256)", +"e6c81c72": "prizeNFT()", +"e6c82503": "Redemption(address,uint256)", +"e6c856b3": "setPpblzAddress(address)", "e6c88b31": "auditor(uint256,bytes32)", "e6c89d4a": "makeOfferForCityForSomeone(uint16,uint256,address)", "e6c8fcf1": "getExpirationRequest(uint256)", +"e6c93b13": "boughtIn(address,string)", +"e6c9f6bc": "approve_533(address,uint256)", "e6c9f6ee": "shelf(string,address)", "e6ca00b5": "_abortAllRounds()", "e6ca0f47": "setStages()", +"e6ca2084": "isTxUsed(bytes32)", +"e6ca5c90": "closeLong(bytes32,uint256)", "e6cb9013": "safeAdd(uint256,uint256)", +"e6cbb1a6": "_addJobOffer(uint256)", "e6cbcba9": "PlusOnePonzi()", "e6cbd74c": "TokenSold(uint256,uint256,uint256,uint256)", "e6cbe351": "saleAuction()", +"e6cc2c55": "withdrawFromPancakePool(uint256)", +"e6cc5432": "capitalPaused()", +"e6ccc9bd": "removeApprovedWithdrawAddress(address)", +"e6cd5f9f": "getIsOpenDeposit()", "e6cda5ff": "countDays()", "e6ce1622": "ProcessMarkings(bytes32,uint256,uint256,uint256)", +"e6cf9966": "addSign(bytes32,uint8[],bytes32[],bytes32[],address[])", "e6d02bf0": "unsubscribeCaller(address,address)", "e6d04d5e": "whitelistedParticipants(uint256)", +"e6d076fe": "withDrawAllBas()", "e6d09529": "getTTTCount()", "e6d0a37d": "RemovePoolMember(address,string)", "e6d0dfda": "setDiscountTime(uint256)", "e6d1092d": "vestedTeam(uint256)", "e6d17238": "specialWallet()", +"e6d176b5": "createFarm(uint256,address,bytes)", "e6d17cfc": "_updateToken(uint256,uint256)", +"e6d18190": "getReserveTotalBorrows(address)", "e6d18a7a": "nihilumBalanceOf(address)", +"e6d1dc43": "daiRaised()", "e6d20a23": "king_of_returning_shirts()", +"e6d245d5": "set_root(address,string)", "e6d26bc6": "setTeamContractAddress(address,address)", +"e6d273da": "transferSnapshot(address)", "e6d2ceab": "set_pool_percentage(uint8)", "e6d30bf2": "finishMinting(bool,bool)", "e6d343a5": "getTransContractLocked()", +"e6d39541": "zeroExProxy()", "e6d3b85b": "getOwnershipForCloning(uint256)", +"e6d3bba7": "certifiedTokens(string)", "e6d3f673": "distributeGeneratedPower(uint256)", "e6d41b39": "isApprovedTransferer(address,uint64)", "e6d44122": "limitPreSale()", +"e6d44399": "_authmen()", +"e6d4a0ee": "calculateBitcoinMovingAverage()", "e6d4d217": "addAddressToWhitelist(address,string)", "e6d54815": "delSpecialPrice(address)", "e6d55f3a": "buy10ktickets()", +"e6d5c547": "batchMintToken(address[])", "e6d61f70": "resetInactivityTimer()", +"e6d642c5": "getIntegrationAdapterWithHash(address,bytes32)", +"e6d65216": "PORTION_OF_TOTAL_PRECISION()", "e6d660dc": "UBT(uint256,string,uint8,string)", "e6d66ac8": "sendTokens(address,address,uint256)", +"e6d73d97": "_totalReferReward3()", "e6d76a76": "withdrawSynthetix(uint256)", "e6d78add": "tokensPerWei5()", +"e6d7cd75": "getDMember()", "e6d7fd33": "TokenERC20(uint256)", +"e6d83b1e": "NewDeposit(uint256,address,uint256)", +"e6d858f1": "Transferred(address,uint256)", "e6d8a47a": "MIN_INVEST_BUY()", +"e6d8a94b": "captureAwardBalance()", "e6d8d435": "AMBASSADOR_ONE()", "e6d944a7": "computeCurrentPrice(uint16)", "e6d95eb8": "DSAuthorized()", "e6d970aa": "registry(address,address,bytes32)", "e6d9bb0f": "secondsUntilEnd()", +"e6da494e": "m_signaturesTransferOwnership(address)", "e6da89cd": "addVestingForBeneficiary(address,uint256)", "e6dab965": "startTrack(bytes32,uint256)", "e6dad824": "withdrawFrom(uint256)", +"e6db3262": "AcceptDividends(uint256)", "e6db38c7": "purchaseFromTime(uint256)", "e6dba7e8": "EX()", "e6dbf486": "setCLC(address)", "e6dc3655": "_validateUrl(string)", "e6dc85a3": "weiTotal()", "e6dc992d": "buySquareAtAuction(uint8,uint256,address)", +"e6dca5ea": "overflowmulocalonly(uint256)", +"e6dcae76": "MIN_SKL_AMOUNT_TO_PURCHASE_ARCHER()", +"e6dce7cd": "onEndTx(bytes32,address,uint256,uint256,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"e6dd5105": "addRiskyStakeholder(address)", "e6dd672c": "enterMainSale()", "e6dd9a8d": "endBookings()", +"e6ddc653": "updateAllWInUsdRate(uint256)", +"e6de12c6": "calculateNAV(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e6de48e0": "estimateReward(address)", +"e6de6282": "MAX_VERIFIER_COUNT()", +"e6de6528": "_setVenusVAIRate(uint256)", "e6deb223": "addPlayerMapping(string,string,uint256,uint256)", "e6deefa9": "deposit(address,uint16)", "e6dff3b4": "whitelistInvestor(address,bool)", "e6e05562": "getIslandPreviousOwners(uint256)", +"e6e057f0": "ECOSYSTEM_POOL_SUPPLY()", +"e6e07225": "confPay(uint256)", "e6e08ba4": "openPreICOPrivate()", +"e6e13625": "payTokenPoolLength()", "e6e13795": "_addEntry(bytes32)", +"e6e1c122": "Confirmed(address,address)", +"e6e25d10": "unlockEnd()", "e6e261b2": "getFundAllTx(uint256)", +"e6e28a63": "approve_91(address,uint256)", "e6e2c041": "_removeDiscount(uint256)", "e6e2e1cd": "VestFFTokens(uint256,uint256)", "e6e35407": "startCoinFlip(bytes32,bytes32,bytes32)", "e6e45ea2": "MyHumanStandardToken(uint256,string,uint8,string)", "e6e46238": "idCount()", +"e6e5113b": "updatePlatformSalePercentage(uint256,uint256,uint256)", +"e6e52920": "buyEngineTwo()", "e6e5b492": "AirwayBill()", +"e6e5c04b": "totalRubyMined(uint256)", +"e6e5f146": "isChargeRegistered(address,address)", "e6e623d5": "setTokenSymbol(address,bytes32)", "e6e68cb3": "map(uint256,uint8)", "e6e7237f": "claim_time_victory(uint256)", +"e6e825ca": "_xfLobbyEnter()", "e6e84bf8": "Suren3Token()", "e6e88593": "_contractStatus()", "e6e8c692": "computeResponseFirstHalf(uint256,uint16)", "e6e91cfc": "voidFailedPayment(uint256)", "e6e93b14": "setbetEnd()", +"e6e97ead": "distributeTokens(address,address,uint256[])", +"e6eaadd7": "avgFactor_releaseTimeSum()", "e6eb00ce": "drawingNo()", +"e6eb1afd": "isUserQualifiedbuyMineGold(address)", "e6eb6867": "updateKey(bytes)", "e6ecc9c1": "getReservedAmount(address)", "e6ecf8a0": "CONTENT_FUND()", "e6ed4746": "setBonus(uint8)", "e6ed51b7": "createToken(uint256,address,address)", "e6ed6c74": "getRabbit(uint256)", +"e6ed9a7f": "pausedIncubate()", +"e6ede60e": "referrerRateLevel3()", +"e6edea84": "b1(address,uint256)", +"e6edf70b": "paymentCounter(address)", +"e6ee3e64": "voteToOwner(uint256)", +"e6ee62aa": "gap(bytes32)", "e6ee78bd": "approveRemoveOwnerRequest()", +"e6eeb2ae": "viewSaleCAKEX()", +"e6ef0c01": "getCurrentRewardReserve()", +"e6ef73d6": "taxReceiver()", "e6effbe9": "createAuction(address,uint256,uint256,uint256,uint256,address)", "e6f02bf9": "computeBonuses(uint256)", +"e6f0409a": "adjustBr34pBuyBackPercentage(uint256)", "e6f041c1": "testLessThan()", "e6f0823c": "deleteNota(uint256)", "e6f091f9": "isAccepted(address)", +"e6f0aaf6": "addErc20(address,string)", "e6f0b6cf": "individualCapInWei()", "e6f0beeb": "sort(uint8[4])", "e6f1a189": "isCustomToken()", +"e6f1daf2": "claim_rewards()", +"e6f26425": "newProduct(string,uint256,uint256)", +"e6f272b3": "pendingmooncake(uint256,address)", +"e6f2e598": "valueInterpreter()", +"e6f307d4": "setConverterAddress(address)", +"e6f334d7": "consecutiveWins()", "e6f3ae3c": "neighbor(uint256,uint8)", +"e6f3b6ce": "getGetMaxMiddle32()", "e6f46410": "RBC()", "e6f47613": "multiSubWithdrawFor(address[],address[])", +"e6f4b7c1": "brrPool()", "e6f4c4a7": "setOtherSettingOwner(address)", "e6f602ff": "benTook()", "e6f6266a": "numMinters()", "e6f67ef2": "payOrganizer()", "e6f6b789": "setInterfaceImplementation(string,address)", "e6f6e19f": "emissionStage()", +"e6f70531": "permit(address,uint256)", +"e6f714f1": "SAKE()", "e6f7bf89": "GetOwnerAddress()", "e6f7ec75": "populateTierRates()", +"e6f814da": "Trade(address,address,uint256,uint256,uint256,uint256)", "e6f8263e": "JackpotPeriods()", "e6f8298c": "cancelActiveLoanAtIndex(uint256)", "e6f82ca3": "_clearBridgeTokenFee(uint256)", "e6f859e7": "descriptions(uint256)", +"e6f8809b": "BCInfoByCardId(uint256)", +"e6f8e364": "voteGBP()", +"e6f922fd": "RegistrationFeeUpdated(address,uint256)", "e6f9476a": "getContribPeriod()", +"e6f9e63e": "getDesiredTokens(uint256)", "e6f9f265": "areNoncesValid(bytes,uint64[],uint64[])", "e6fafef0": "ContributionMinimumUpdated(uint256)", +"e6fb52b7": "proxContract()", "e6fb5c4a": "CHLToken()", +"e6fb65b5": "DrawRedress()", +"e6fb9e94": "idToUri(uint256)", "e6fbf441": "transferFromSenderPaysFee(address,address,uint256)", +"e6fc0e4d": "releaseTimestamps(address,uint256)", +"e6fc67ea": "removeWhiteListAddress(uint256,address)", +"e6fcc84b": "did()", +"e6fcdf99": "updateLockToken(address)", "e6fd2982": "initialReserve()", "e6fd42ee": "currentHalving()", "e6fd48bc": "startTimestamp()", "e6fd604c": "cut()", +"e6fd9489": "rlpPerCredit()", +"e6fe39ed": "updateResolver(address)", +"e6fead33": "RENBTC_CRV_STRATEGY()", "e6febc9b": "investorWithdraw(uint256)", "e6ff0853": "advisorsTokenWallet()", "e6ffd50d": "OXGOLD()", +"e6fff2ff": "releasableAmount(address,uint256)", "e6fff409": "TetherGBP()", "e7001b84": "setOwnedCount(address,uint256,uint256,bool)", +"e700222d": "isUserEnrolled(address)", "e700d63a": "FeesConverted(uint256,uint256,uint256)", "e700efc4": "MaxSupply(address,uint256,bool)", +"e7013ddd": "dioneStaking()", "e701900c": "refundTransaction(bool)", "e701a6d3": "handlePresaleTokenMany(address[],uint256[])", "e701d051": "setMarketerRate(uint256)", +"e701e2f0": "isSalePrivate()", +"e701fb9f": "startArgs(uint256,uint256,uint256,uint256,uint256[])", +"e7025593": "f9()", "e70265a5": "FRACTION_ETHER()", +"e702701f": "participant1()", +"e702d7af": "multiSendEth(address[],uint256[])", "e7031501": "jackpotWinPercent()", +"e7032021": "pct(uint256,uint16)", +"e7036bd8": "Psychic()", "e703e9c3": "CheckActivate()", +"e7043ad5": "AddedToWhiteList(address,address)", "e704430d": "numberOfTreasuryOfficials()", "e70468b1": "cancelOpenBids()", "e7046bf0": "setFx(address)", "e704f151": "burnContributorTokens(address)", "e7058e15": "Rollback()", "e705a519": "SALE_1WEEK_BONUS()", +"e7061950": "tokenIsSupported(address)", "e7062263": "checkEndorsementExists(bytes32,bytes32)", +"e70626e6": "ethAssetId()", "e706918c": "testToggleBitSuccess()", +"e706e59a": "getstakingprograminfo(uint256)", "e7073a4c": "MarketplaceV2(address)", "e7074de2": "FOUNDATION_TOKENS()", +"e707697a": "setLPFund(address)", "e7077a3a": "CCToken()", +"e707b1f7": "transferFeesForPool(bytes32)", "e7084b7e": "closeTimeout()", +"e7085d59": "NegativeSpreadErrorSelector()", +"e7091366": "TestValue()", "e7092b41": "getAllowance(address,address,address)", "e7095e97": "mintTo(address,string,uint256,uint256)", "e70990d7": "summon10()", "e7099763": "client_wallet()", +"e709c553": "addFrozener(address)", "e709cd09": "ONDEONE()", +"e70a2738": "idleUnderlying()", +"e70a2936": "EnableFee()", "e70addec": "right87(uint256)", "e70b11df": "revokeAllocation(address)", "e70b5259": "mapHeight()", "e70b793a": "blankbreedingdata(uint256,bool)", +"e70b9e27": "rewards(address,address)", "e70c052a": "ethFundDepositAddress()", "e70c3276": "HyipProfitTokenTeamAddress()", +"e70ccff2": "add_liquida(address,uint256,uint256,uint256)", "e70cd5ec": "destroyItemsStorage()", +"e70d6dc5": "allowances(uint256,address,address)", +"e70da0ac": "payAndDonate(uint256,uint256,address)", +"e70dd0b3": "_ownerAddressSupply()", +"e70e308e": "getPriceFromFeed(address)", +"e70e47c7": "RestrictedAddressChanged(address)", "e70e690a": "set_gas_price_max(uint256)", "e70e6ece": "BOURSETOKEN()", +"e70e7785": "unlockDate13()", +"e70e95fb": "tresury(address)", "e70eb392": "claimReward(uint256,address)", +"e70ef444": "ADD_REWARD_ROLE()", +"e70f5b0c": "WithdrawEth(address,address,uint256)", "e70f5d95": "setIV_R3(uint256)", "e70fe5e3": "GenesisToken(address,uint256)", "e7105795": "_raceOpened(uint256)", "e710efc6": "regSpot(uint16,bytes32)", +"e7110ad1": "expiry_month()", +"e7117264": "UserPurchasedAstro(address,address,uint256,uint256,uint256)", "e711da27": "writeToStorage()", "e71264fa": "addNewTokens(uint256)", "e7127e29": "addressToTrainer(address)", "e712b694": "comp_count()", "e712bbad": "enterArena(uint256[4],address)", +"e712f5ba": "setYvaultMaster(address)", +"e71327f5": "setQuickApprove(address)", "e71346f4": "removeAnimalIdFromCountry(uint256,uint256)", "e7137dbf": "withdrawETH(address,address,uint256)", "e713cda8": "returnUint32(uint32)", +"e7143552": "listingLock(address,uint256,uint256)", +"e71469f5": "DAILY_STAKE_RETURNS()", "e714a028": "cancelWithdrawalRequest()", +"e7150134": "getNodeFee()", "e7151828": "deathData_v1()", "e7152a5c": "transferStar(address,uint256)", +"e7156fa3": "getBestPools(address,address)", "e715920f": "doBuy(address)", +"e715c591": "requestForInspectionsRecords(uint256)", +"e715e19c": "AVVoteProposal(bytes32,bool)", +"e715e234": "setMultLP(address,address)", +"e7166d4b": "getWantTokenWhiteListAndX()", +"e717502f": "testArbitrage(address,uint256,address[],address[],uint256,uint256)", "e717db5c": "CheetahCoin()", "e717dc3d": "tax_fund()", "e717ea61": "getCurrentAddress()", +"e717fc7d": "pendingBFI(uint256,address)", +"e7182220": "ubxtToken()", "e718234d": "tokenLock()", "e71897cd": "alfatokenteam()", "e718ad01": "ReclaimPeriodChanged(uint256,uint256)", +"e718afcd": "canFusion(uint256,uint256)", "e718f7aa": "_Setting_Default_GameBoard(uint256)", +"e7192d63": "arr_struct_grid(uint256)", +"e7198474": "earnedAddress()", "e7199f82": "transferCentralBanking(address)", "e71a02e1": "DELAY_PERIOD()", +"e71a1eb8": "remitFee(uint256,bytes32)", +"e71a3bfd": "newTalentsAndPartnershipsBal()", "e71a402e": "mul_float_power(uint256,uint8,uint8,uint8)", "e71a5577": "getNumPullRequests()", "e71a7811": "completeOwnershipTransfer()", @@ -132411,39 +242329,91 @@ "e71bbf48": "TokenSyndicateFactory()", "e71bdf41": "addDelegate(address)", "e71c3b38": "LogSetRBInformationStoreAddress(address)", +"e71c452f": "burnPynthsOnBehalf(address,address,uint256)", +"e71c8876": "_pbaseEthUniswapPair()", +"e71c8d11": "withdrawSwap()", "e71c9697": "placeBet(uint256,uint256,uint256)", "e71d3ae2": "CYFR()", +"e71d541e": "getUnderlying(uint256)", "e71d77a7": "PRICE_CHANGE_TIME_STEP()", "e71d7bf0": "testControlTransferNotEnabled()", +"e71dd5b9": "Cat12(address,uint256)", "e71df6d6": "acceptMembership(address,uint8,uint256)", +"e71e0e1a": "payBackDebt(address,address,uint256)", "e71e592b": "replaceDelegates(address[],address[])", +"e71e6bcb": "AAVE_TOKEN()", +"e71e8203": "yflink()", "e71ecf6e": "revenueShareCurrency(address)", "e71efd18": "Mytoken(uint32,string,uint8,string,address)", +"e71fb211": "setLoyalty(address)", +"e71fb56c": "fundCollected()", +"e71fe7d5": "SetDAI(address)", "e7201d7d": "masterOwner()", +"e7204ffb": "drawPool()", +"e720ac8e": "getCurrentBatchId()", "e720b4a7": "DEEM()", +"e720c1ba": "REGISTER_COST()", "e720e1b3": "marmoOf(address)", "e7211134": "createDAO(uint256,string,bytes32)", "e7212728": "getFreeChicken()", +"e722136b": "addressesDepositedMibWBNB(uint256)", "e7225175": "timeoutSEC()", +"e7225d63": "_getDraftConfig(uint64,uint64)", +"e7227ea9": "SAV3XRPperBlock()", "e722a522": "createContractPeriodicTable(string)", "e7233ce7": "getAdIds()", +"e723406c": "isSettlementAllowed(address)", +"e7238b11": "set_new_SNX_TokenContractAddress(address)", "e7239ed2": "getTimebasedBonusRate()", "e723a8f9": "setFundraising(address)", +"e723b9d9": "diseaseChunksCounter(bytes32)", "e724529c": "freezeAccount(address,bool)", +"e724983b": "setGovenors2(address,bool)", +"e724ab19": "setStatus(uint256,string,string)", "e7255ef9": "desiredOutcome()", +"e72572c2": "mock_getUInt(address)", +"e725872d": "balancePf(bytes32,address)", +"e725d128": "subIds(uint256,uint256,uint256)", +"e725e21e": "_carAddress()", +"e725f877": "tokenName(uint256)", +"e726d29b": "setQuranAddress(address)", "e7271c34": "removeArts(address)", +"e72726b8": "KFI()", +"e727331a": "setVoter()", +"e72763ea": "getValueCom(uint256)", +"e72767f7": "verifySignature(uint256)", "e7278231": "DesToken()", +"e7278e7f": "get_count()", "e727de55": "setEggPrice(uint128)", +"e7284ffe": "Withdraw(bytes32,address,uint256)", +"e72852da": "tokensPooled(uint256,address)", +"e72869ed": "task(address,bytes)", +"e728b86c": "isLoanContract(address)", +"e728bfcc": "BlockRewardChanged(int256,int256)", +"e7296454": "approveRewardToken()", +"e729798e": "PROTOCOL_RATIO_TARGET()", "e7299675": "DroplexToken()", "e729b416": "lockIndexes(uint256)", "e729ebe8": "getSignatureParts(bytes)", +"e729f194": "backMar(address)", +"e729f220": "hbt()", +"e72ada0f": "votedForOrAgainst(uint256,address)", "e72b0e23": "CreateTUBE(address,uint256)", "e72b6091": "extendSaleTime()", +"e72b769e": "sUSDSlp()", +"e72ba08c": "postincr(uint256)", "e72c40dc": "CoreTeamMinted(address,address,uint256,uint256)", "e72c81cf": "demo1(address,uint256,bytes,string)", +"e72c9f71": "distributedFees(address)", "e72cba6e": "ICO_PHASE1_AMOUNT()", +"e72cfcb8": "reviewPeriods(address)", +"e72d6343": "rescuebtcgwTokens(address,address,uint256)", +"e72d7fe9": "tokenReward1()", "e72e46fd": "ImmlaIco(address,address,uint256,uint256,uint256)", "e72eb439": "DogTestToken()", +"e72ebba7": "crlToWbnbRoute(uint256)", +"e72f3e57": "refillRewards(uint256)", +"e72f47e1": "tellSecret(string)", "e72f4f2a": "s38(bytes1)", "e72f5f63": "maxRandom()", "e72f7a78": "finishCurrentGame()", @@ -132451,53 +242421,94 @@ "e72fd4e1": "developerCut()", "e72fee5d": "massTeamMsgHash()", "e7302541": "convertOldToken(address)", +"e7303308": "deployed_instances(address,uint256)", +"e7303528": "addToPool(int256)", +"e730395a": "ethContributions(address)", +"e73072d8": "validateEmployee(address)", "e730e87a": "stageOneSupply()", +"e73117d7": "_duelScore(bytes32,bytes32,uint256,uint256)", "e73140c1": "setPublicOfferingDate(uint256,uint256,uint256)", "e7316a95": "_set10()", +"e73183d7": "registerDifferPayment(address,uint256)", "e731b034": "HawalaKickoffTime()", "e731bb09": "cpn(uint256)", "e7320f9e": "getGameMaxNumberOfBets(uint256)", +"e73238bf": "increasePositionWithFlashLoan(address,address,uint256,address,uint256,address,uint256,bytes,bytes)", "e7326806": "transferOracle(address)", "e7328000": "userTokenBalances(address)", "e7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", "e732a7e1": "preAllocationsPending()", +"e732dd03": "executeRewardBatch(string,uint256)", "e7334156": "processNextDeposit(address)", +"e73396af": "activeReceiver(address)", +"e734032d": "future(address[],address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"e73449cf": "pendingSushi2(uint256,address,uint256)", "e73471fa": "_mintNativeCoinsByErcToNativeBridge()", +"e73496cd": "metadatas(uint256)", +"e7356cb5": "propertyManager()", +"e735afb2": "present()", "e735b48a": "updateDescription(string)", "e735f667": "destroyChildren(uint256)", "e7368a1f": "isOnSale(uint16,uint64)", "e736f03c": "actived()", "e7377ccb": "vestingMembers(address)", "e7383c91": "ICOStarted(uint256,string)", +"e73872b9": "canUpdate(address)", +"e7388274": "gameStatus_(uint256)", "e73886b0": "addLocked(address,uint256)", "e738a7a5": "createDungeon(uint256,uint256,uint256,uint256,address)", +"e738aa9b": "bonusRewardPerToken()", "e738cb69": "EventLogged(string,uint8,uint256,address)", "e738d2b3": "claimingFee()", +"e738e5b9": "Timc()", "e7398fa3": "setTokenRate(address,uint256)", "e73995cd": "setSale(uint256,uint256,uint256,address)", "e739a4fe": "initialSeed()", +"e73a7430": "processCHI(uint256)", "e73a914c": "setDAO(address)", +"e73b7779": "EmergencyTransfer(address,address,uint256)", "e73b7d77": "testControlCreateNewRevisionNotUpdatable()", "e73b9e2f": "bridgeAmount(address)", +"e73bb62b": "AdminlockSelling()", "e73c032b": "PRESALE_TOKENCAP()", +"e73c1e89": "linkUser(address,bytes32,bytes32)", +"e73c292e": "approve_875(address,uint256)", "e73c3c53": "pingOracle(uint256)", +"e73c5eb3": "_lotteryLimit()", "e73c6353": "Payroll(address,uint256,uint256)", "e73c99a0": "METADOLLAR()", "e73cba34": "getTicketRound(uint256)", "e73cc2eb": "walletPeriodOf(address)", +"e73cced3": "transferFromAndSettle(address,address,uint256)", "e73cf000": "EMIToken()", +"e73d0189": "l3l6users()", +"e73d4a83": "checkCrowRewardPerBlockByBlock(uint256)", "e73de430": "releaseAccount(uint8,address)", +"e73e14bf": "hasStake(address)", "e73e5063": "setRewardManagerLimit(uint256)", +"e73e87d5": "adminStart(bool)", +"e73eae52": "JuryContested(uint256)", +"e73efc9b": "activeMarkets(uint256,uint256)", +"e73faa2d": "unitPrice()", "e73fc0c3": "getTokenByName(string)", +"e73ff964": "activateGateway(address)", "e740ce26": "DSToken()", +"e740f2e0": "claimSashimi(address,address[])", "e740f4fc": "card_start_first()", "e7416f01": "lastBlock_a18Hash_uint256()", +"e741cc4e": "hashOf(uint256,bytes)", "e7422d29": "sendBalance()", +"e742806a": "mintSupply(address,uint256)", "e742b943": "ispackagesaleSetup()", "e742db66": "tokenTaxRate()", "e742f18a": "Task(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"e743388d": "ContractorCompletedJob(bytes32,address)", "e743892b": "escrowExpiration(bytes32)", +"e743c4cf": "setYELD(address)", "e744052b": "FalconFarmer()", +"e744092e": "allowedTokens(address)", +"e744d789": "setTrustedIssuersRegistry(address)", +"e745426f": "beneficiaryHPS()", "e745656b": "removeImmigration(address)", "e7463688": "MasharibTestCoin()", "e7477f1c": "WithdrawDeposit(uint256)", @@ -132505,93 +242516,160 @@ "e747f31c": "debit(uint256,uint256)", "e74803db": "putSaleRequest(uint256,uint256)", "e74915d0": "distribute(address,uint256,address)", +"e74922b9": "nftID(address,uint256)", "e74997a8": "transferInternal(string,address,string,address,string,uint256,uint256)", +"e749d6a6": "whitelistedDapps(address)", +"e749e123": "sendto()", "e74a19fa": "AirdropTokensHolder(address,address,address)", +"e74a444b": "_setTimelockIntervalPrivate(bytes4,uint256)", "e74a48be": "reservedTokens(address,uint256)", "e74a5847": "getGladiatorCooldown(address)", "e74a84ea": "issueToken(address,uint256)", "e74ab046": "increasePrice_20_January()", +"e74ac257": "getExchangeParam(address,string[],string[])", "e74ac94a": "RetailLoyaltySystemToken()", "e74b981b": "setFeeRecipient(address)", "e74b9d11": "safeToSubtract(uint256,uint256)", "e74ba7b3": "getMntTokensPerEth(uint256)", "e74baeef": "Upgrade(address,bytes)", +"e74bc8e9": "getTransferHash(uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"e74bc921": "adminSetup(address)", +"e74cbe61": "createPair(address,uint8,address,uint8)", "e74cd692": "testNextRune()", "e74ceb77": "EGGS_TO_HATCH_1CHICKEN()", "e74d6d1b": "getLeader(address)", +"e74db5a9": "adaptorPrivKeys(uint256)", +"e74dc11c": "business()", +"e74df1c9": "isFuse(address)", +"e74e2c9b": "setMakerFee(uint256,uint256)", "e74e66d7": "toB32(uint256)", "e74e6e9e": "GBMToken()", +"e74f0783": "LevelUP(address,uint32,uint32)", +"e74f0d80": "distributeWithdrawals(uint256,uint256)", "e74f3fbb": "claimVestedTokens()", +"e74f8239": "slash(address,address,uint256)", +"e74f8ed5": "sendNestNodeForStateOfEmergency(uint256)", "e74f8eff": "firstDayTokenLimit()", +"e74fc4de": "eachDayRelase()", +"e74fe887": "modify_unit(uint256,uint256)", "e74ffbd5": "getPart(bytes32,uint256)", "e750b5c0": "getProjectAddress(string)", "e7514287": "IsGenesisAddress(address,address)", +"e75179a4": "reserve(address)", +"e7518c2e": "NewEntry(address,uint256,bool,uint256,uint256)", "e7519ac0": "_setTokenName(address,uint256,string)", "e751f271": "execute(bytes32)", +"e7520123": "temp_var()", "e75235b8": "getThreshold()", "e7528e1f": "createSubmission(string,bytes32)", "e75303a5": "recentWinners()", "e7530cfc": "_batch3_icosaleStartTimestamp()", +"e7536d30": "setIFriendAddr(address)", "e7542782": "Recovery(address)", "e754a4e5": "presale2_startdate()", "e75528cc": "buyBuilding(uint256,uint256)", +"e7553708": "p2Balance(address)", "e75539e7": "Schrodinger()", "e7556704": "GPSToken()", "e755aaaf": "takePoint(uint32,int256,bool)", +"e755d884": "sign(uint256,bool)", "e755e077": "MKToken()", "e755e60f": "settleBetTest(uint256,bytes32)", +"e755f7ea": "isFarmPool()", +"e75600c3": "isMaker(address)", "e75623d8": "setDeploymentAdminsContract(address)", +"e7563f3f": "updateVault(address)", +"e7567def": "reserveConstant()", "e75705c7": "submitFakeHeader()", +"e7571752": "batchReceiveFor(address[],uint256[])", "e7572230": "getPrice(uint256)", "e7574128": "abcToken()", +"e7576a98": "getVestedAmount(uint8,address,uint256)", +"e757785f": "qiang(address,address,uint256,uint256)", "e757835e": "Yotra()", +"e757887d": "mmmcontract(address,uint256)", "e7579c24": "totalBuyerSupply()", "e757c17d": "preSalePrice()", +"e757e073": "cancelCampaignAndGetTokensFromDistributor(uint256)", "e75864e4": "StarsICO(uint256,uint256,uint256,address,address,address,address,uint256)", "e758d445": "getCurrentTierInfo(address,bytes32)", "e759dfb8": "investorsBatchSize()", "e75a0747": "Staker()", +"e75aa8f7": "isTransfersPaused(address)", +"e75ac809": "apy(uint256)", "e75afb65": "endCrowdfund(address)", +"e75b34ae": "AccountVerified(address,string,string)", "e75b4642": "_decreaseAllowance(address,uint256)", "e75b8b23": "getRecordById(uint256)", "e75bd44a": "currentPrize(address)", +"e75bd63d": "calcSeniorTokenPrice()", "e75bf79b": "ESEVENTYSEVEN()", "e75bf820": "extraTokensHolder()", +"e75c0b44": "getClaimTreasuryFee(uint256)", +"e75c4e4a": "tokenTypeAvailableQuantity(uint256)", +"e75c94dc": "_postIds()", +"e75cc5d5": "bDevVestingTimer(uint256)", "e75cdd7b": "isAddressInServer(uint256,address)", "e75d1721": "vevcoin()", +"e75d72c7": "claimRelayerReward(address)", +"e75d7b04": "canWhitelist()", "e75dcb19": "partnerSaleTokenPrice()", +"e75e04d0": "setFarmingPool(address)", +"e75e2c58": "getTotalLockedTokens(address)", +"e75e454e": "totalDistribution()", "e75e69d6": "TryCoin()", "e75ea9da": "preICOEndDate()", "e75ef9b2": "trackSpend(uint256)", "e75f02e3": "UraniumPlus()", "e75f1634": "pearlSend(address)", +"e75f24bb": "_setname(string)", "e75f6e21": "totalMfr()", "e7609c16": "getFarmer(address)", "e760a11a": "attachContracts(address,address,address,address,address)", "e760d284": "BOOKIES(uint256)", "e760da9d": "createCP(address,string,string)", "e760fb06": "groveAddress()", +"e76108d8": "TokenRecharge(address,uint256)", "e7619fad": "allTokenIds()", "e761eec6": "RecordTransfer(address,address,uint256)", +"e76217a7": "sellCrv(uint256,uint256,address[])", +"e762319f": "getBorrowAmount(address,address,uint256,uint256,bool)", "e76240a4": "calcZWCAmountByToken(address,address,uint256)", "e76261fb": "GetContractStateCancelledByLandlord()", +"e762ab2d": "monthlyTokenBurn()", +"e7636bad": "liquidity_pool()", "e7637b5b": "deleteInfo(uint256,bytes32)", "e7638445": "getRaffleTimeLeft()", +"e763a8ee": "PaymentBook(uint256)", +"e763ed71": "PartnerAdded(address)", +"e76477bd": "dController()", +"e764b198": "first_round_base_multiplier()", "e7651d7a": "normalProcess()", +"e7654b3c": "setFeeDivisors(uint256,uint256,uint256)", "e7657e15": "ids()", +"e7658b3d": "meowth()", "e765bc5a": "thirdStageEnd()", +"e765c122": "getStake(bytes32)", "e765c69a": "betOnDozen(uint256)", "e765cb44": "auctionMinPrice()", +"e765ced6": "resourceId(uint256)", "e7663079": "owner_()", +"e766c835": "totalStakingBalance()", "e766d79e": "CrowdsaleEndChanged(uint256,uint256)", +"e7672051": "hasSDCC(address,uint256)", "e767b578": "createPlayerAndAssign(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,address)", "e76895bf": "OwnerAdded(address,bytes32)", +"e768c93c": "becomeAdmin(address)", +"e769078f": "rmu()", "e7694493": "is_white_listed(address,uint256,bytes)", "e7696a29": "updateWeedTotal(uint256,bool,uint16)", "e769dfbd": "buyTransferFee()", "e769f61f": "private_withdrawAll(address)", "e76abcb9": "presaleBonusTier2()", +"e76ae200": "newRoundInterval()", +"e76b29ed": "setArbiter(bytes32,address,address,address,uint256,uint256,bytes)", "e76b8126": "finish(address,address,address,address)", +"e76b87cf": "setRoute(string)", "e76cc0d3": "failWithoutReason()", "e76dd3ef": "returnBet(uint64)", "e76e337d": "Honolulu()", @@ -132603,52 +242681,97 @@ "e76f0836": "getcurrNumOfCards()", "e76f3d5a": "REFERRED_BONUS_PERMILLE()", "e76f62cd": "Reissue(uint256)", +"e76f9d4e": "start(address,address,uint256)", +"e7702d05": "positionCount()", "e770390d": "deleteMultitoken(uint256)", +"e7708d03": "d1(uint256)", +"e770e11c": "ActiveProposalIds(uint8)", "e771066f": "marriageProof(bytes)", "e7712a94": "MDTCrowdsale(address)", +"e77176c4": "allDeposits(uint256)", "e7718594": "totalAccessories()", "e771e193": "GetCountryCode(uint16)", +"e771e91a": "minerBalance(address)", "e7722f9b": "isAddressInvited(address)", +"e77349e7": "eth_usd_block()", +"e7734e0c": "StartCoinFlip(bytes32,bytes32)", +"e77369c4": "canAddLiquidity(address,uint256)", "e773c82f": "bonusEnds2()", +"e773eccd": "contextBalance(address,bytes32)", "e773ffd5": "queryPlayerUnAwakeSkillIds(uint32[11])", "e7740cf9": "revealPaper(string)", +"e774e45b": "LogFinishRoundA(address,address,address,address)", "e7751e48": "ownershipAuctionCount(address)", +"e7755761": "files(string)", +"e7757162": "uniqueDepositors()", "e775781b": "getPopularity(bytes32)", +"e775eb4a": "getCurrentCollateralPrice()", "e775f01f": "CAPToken()", +"e7767278": "pricesAUSC(uint256)", "e776a5b5": "wallet_address()", "e776fa22": "AlphaconCrowdsale(bytes32[5])", "e77772fe": "tokenFactory()", "e777b97b": "LogRegisteredInterval(uint64,uint64)", "e777d060": "removeProviderAdmin(address)", +"e777ff25": "referralsHeld(address)", "e7781f3c": "ToppedUp()", +"e778220b": "executeShort()", +"e7784156": "SuckerAddress()", "e77900e9": "projectMemberAddress()", +"e77924e0": "executeTransaction(uint256,bool)", +"e7796f33": "setAuthority(address,address)", +"e77995e0": "districts(uint256)", "e779a8cf": "airLimitCount()", +"e779b936": "change_current_pool(address)", +"e779e9ec": "depositMS(uint256,address)", +"e77a1a99": "signDoc(bytes20,address)", +"e77a2d26": "depositToPool(address,address,uint256,uint256,bytes)", "e77a6daa": "tokenCalculate(uint256)", "e77a912f": "prefilled()", "e77aaee2": "enterRecoveryMode()", +"e77ab7e2": "setLevel1AddressForOwnershipSale(uint256)", "e77b077f": "canExchange(address)", +"e77b166b": "getBlockSpan()", +"e77b5ad6": "initialize(address,address,address,address,bool,string,string)", "e77b8d94": "ipow(int128,int64)", "e77ba2c9": "checkIfMegaJackpotWinner()", +"e77be3d7": "rateAddLiquidity(uint256,uint256)", +"e77bf27f": "setExemptSender(address,bool)", +"e77c2b47": "listOwner(uint256)", "e77c646d": "redeem(uint256,bytes)", +"e77cdf23": "CRV2WBTC(uint256)", +"e77cea40": "drawdownpool()", "e77cfa1c": "weiPending()", "e77db232": "isKYCApproved(address)", "e77dd5b3": "setSoftCapUSD(uint256)", "e77df041": "LykkeTokenBase(address,string,uint8,string,string)", "e77e02d3": "giveAdvisorsTokens(address,uint256)", "e77ef21f": "drawdown()", +"e77f37c4": "UnAuthorize(address)", "e77f9906": "gameListOf(address)", +"e77fc7a4": "initialize(address,address,address,address,uint256,uint256,uint256)", +"e77fd614": "bsgs()", "e77ff2f6": "centralAuthority()", "e77ff818": "privateSaleEndTime()", "e780377e": "liquidityPoolAllocation()", "e7804444": "allowMigrate()", +"e780ada1": "_getDPRequestsCount()", "e780f6c9": "setDestructionAddress(address)", +"e780faa3": "luckyNumbers(uint256)", "e7810318": "updateInitialBonus(uint256)", "e781d8c5": "getPC()", "e7827e85": "unfreezeTokens(uint256)", +"e78285e9": "claimStatus(address,address,uint256,uint256)", "e7829152": "prometh(address)", "e782b172": "transferWithLockBatch(address[],uint256[],uint256[],uint256[])", "e783bfb1": "totalAllocatedToTeam()", +"e783c73d": "currentSupplyRate()", +"e783e53e": "ROLLUP_ADDR()", +"e7841531": "totalsupplyStake(uint256)", "e7843949": "STATE_PAYOUT()", +"e784478d": "buy(bytes18)", +"e78482c1": "getMintedSectorCountByRarity(uint16,uint16)", +"e78489a1": "swapTokensForTokens(uint256,uint256,address[],address,uint256,address)", "e784a923": "thisweek()", "e7850f2d": "Sunny()", "e78562c0": "dividendRecentBuyersPercentageDecreaseFactor()", @@ -132657,26 +242780,37 @@ "e786140e": "setBio(bytes3,bytes)", "e78631fb": "changePhaseToICOweek2()", "e78686eb": "reclaimContribution(address)", +"e786a539": "hasJurorClaimed(address,uint256)", +"e786f13d": "registerLoanCompany(string)", "e78721af": "getSmartSharingByID(uint256)", "e7873b58": "tokensBurned()", "e787418a": "isSubmitted(uint256)", "e787654c": "_forumIdToAddr(string)", "e787887b": "initialRewardFraction()", "e787b523": "CLKToken(address)", +"e787f169": "addWithdrawRequest(uint256)", "e788b5eb": "emitAreaSet(uint256,bytes32)", +"e789c633": "openAccessToSubmitBlocks(bool)", +"e78a70fe": "setMaxForcedExitCount(uint256)", "e78b8a37": "setPoolSize(uint16,uint32,uint16)", "e78bfee0": "allocate(address,uint256,uint128,uint256)", "e78c1136": "CreateLCD(address,uint256)", "e78c219b": "takeBuy(address,uint256,uint256,address)", "e78c3462": "betsOff(uint256)", +"e78c81c4": "increaseMonth(uint256)", "e78ce8db": "getCarEarning(uint32)", "e78ce986": "KOK()", "e78cea92": "bridge()", +"e78d13cc": "withdrawMythic(uint256)", "e78d6306": "getBountyTransfers(uint256)", "e78dd6f1": "mainSaleTokenLocked()", +"e78e26d6": "startRewardDate()", +"e78e3797": "EventNewAd(address,uint256,uint256)", "e78e3ab1": "ESOPOpened(address)", +"e78f4972": "_setFee(uint8)", "e78f5412": "_whichCourse(uint256)", "e78fd9a8": "submitMint(address,uint256)", +"e78fe03e": "isTimeFrerzed()", "e78ff581": "getProposalPayloadHash(bytes32,uint256)", "e7906208": "setA_Signature()", "e790aa9e": "joinMountain(bytes32,address)", @@ -132688,137 +242822,243 @@ "e7933601": "getOverBalanceWEIInfo()", "e7933d58": "setIcoPhaseAddress(address)", "e7938b82": "minAllowedStakeInPercentage()", +"e793b3e3": "openPosition(address,address,address,address,address,uint256,uint256)", +"e794462b": "who_referred_user(address)", "e79487da": "checkInvariant()", "e7950ede": "logs(bytes)", +"e7956f21": "setStrategyOk(address[],bool)", "e795c149": "FinalToken(uint256)", "e79609e2": "getOrCacheDesignatedReportStake()", "e7964b49": "sendeth(uint256)", "e796570b": "isClearingPriceValidator(address)", +"e796776f": "protocolFeeBase()", "e796818e": "AEFTOKEN()", "e79695da": "WhitelistUpdate(address,bool)", "e796a6eb": "refund(uint256,address,uint256)", +"e796b68a": "_validReserveWeight(uint32)", "e796c43c": "_cancelActiveAuction(uint40,address)", "e797398f": "IsMultiFreeze(address,address[])", +"e7973d16": "collAsset(address)", "e797496b": "sigDestinationApproveAndCall()", "e7977701": "setLotteryOptions(uint8,uint256,uint16,uint256)", +"e7979689": "startDistribution(uint256)", "e7979efa": "LOG_BetWon(address,uint256,uint256,bytes32)", "e797ec1b": "enableMinting()", +"e798225b": "save_coffer(address)", "e7984a3b": "updateRewardForContributor(address,uint256,string)", +"e7984d17": "SUCCESS_MESSAGE()", "e7986466": "setSupportedToken(address,bool)", +"e79899bd": "logs(uint256)", "e798f4eb": "webpud()", "e7990596": "getAddressAndBalance(address)", +"e7991c8c": "updateMarketsRegistryImplementation(address)", "e7992845": "pendingInstallments()", "e7996f07": "removeAttribute(bytes32)", +"e799b059": "_ensureVoterCanCommit(uint256,address)", "e799f374": "fundingMaxInWei()", "e79a198f": "unregister()", "e79ab547": "bulkTokenSender(address[],address[],uint256[])", "e79b4388": "LogBidExpired(uint256)", +"e79b745f": "CheckUserByWallet(uint256)", +"e79bf13b": "holdings()", +"e79c3c81": "exercise(uint256,uint256,address[])", "e79d0860": "partnerCount()", +"e79e0840": "toDisable()", "e79e0a22": "getEthers(uint256)", "e79e2bd3": "updateArea(uint256)", +"e79e316c": "sixH()", "e79e770f": "EmergencySafe()", +"e79ee101": "_calculateMintingFee(uint256)", +"e79f1806": "setMessageToken(bytes32,address)", +"e79f5bee": "initializePayableWithValue(uint256)", "e79faa58": "unpause(string)", "e79fb53c": "setUSDEtherPrice(uint256)", +"e79fec64": "TeamAddressAdded(address,uint256)", +"e79fee29": "isOrderInRange(uint8)", "e79ffa11": "_dev()", "e79ffa99": "getpurchasersLength()", "e7a01215": "right2(uint256)", "e7a01352": "adjustHardCap(uint256)", "e7a02352": "MintDarioToken(address,int256,uint256)", +"e7a03679": "wantAddress()", +"e7a04371": "payoutEndTime()", "e7a0459a": "setCatalogPlayersAddress(address)", "e7a05f08": "isTokenSaleToken(address)", "e7a17d83": "emitTaskCreated(uint256,uint256)", +"e7a1c1c0": "setOperator(uint256,address)", +"e7a200cb": "unlockList(address[])", "e7a25bfc": "JustEscrowTestCoin()", +"e7a2c01f": "executeAffirmation(bytes)", "e7a2e28e": "fishbank()", +"e7a324dc": "DELEGATION_TYPEHASH()", +"e7a33174": "setBorrowLimit(uint256)", "e7a33822": "seal(address,uint256)", "e7a35405": "managerAddressNumberMap(address)", "e7a3c218": "testFail_mint_without_add_authority_to_controller()", "e7a4581a": "getCirculationSupply()", +"e7a45f2e": "getSyntheticAsset()", +"e7a486fb": "executeMint(uint256)", +"e7a488df": "msgToOwner(uint256)", "e7a49c2b": "trustedTransferTokens(address,uint256)", +"e7a4b46f": "randomQueryMap(bytes32,uint256)", "e7a4d9d3": "LIQUID_TOKENS()", +"e7a4e8a6": "cashOracle()", +"e7a5dc59": "PrevContractSet(address)", "e7a60a9c": "getValidatorAtIndex(uint256)", "e7a6e75c": "ETH_USD_rate()", "e7a7043d": "addPrecommitmentAdjustment(address,uint256)", +"e7a72bab": "calculateFeesBeforeSend(address,address,uint256)", +"e7a77395": "nyanLP()", +"e7a7b5a0": "virtualDefaultFee()", "e7a83c74": "AT()", +"e7a891b9": "PERIOD_LENGTH()", "e7a8a5cb": "setTier(uint256)", +"e7a8de3c": "getDurationsAndRatios()", "e7a95a7f": "WHOLESALE_THRESHOLD()", +"e7aa0bd7": "setClaimed(uint256)", "e7aa3afc": "getProjectStatus()", "e7aa8ed5": "CrowdsaleMCS()", +"e7aaa0da": "requestData(bytes,bytes4,address)", "e7aab290": "set_s(string)", +"e7aaec88": "investmentBalance_()", +"e7ab12e2": "transferBatch(address,address,address,uint256[])", "e7ab4f1c": "getShareholderArray()", +"e7ab6de5": "maxStability()", "e7ac4df8": "launchInvestment(uint256)", +"e7ac5128": "becomeGeneral(uint256)", +"e7ac593e": "proposeToRemoveScheme(address,address,string)", "e7ac81e5": "productSold(uint64,uint32,string)", "e7acaa1e": "createJob(bytes32,address,address,uint256)", "e7acb2b4": "ZitronSupply()", "e7acdcd0": "deleteInvest(uint32,uint32)", +"e7ad3209": "getUserSwapData(address)", +"e7ad3325": "set_aa(address)", +"e7ad3724": "announceStrategyUpdate(address,uint256)", +"e7ad64ca": "retrievePosition(bytes32)", +"e7adbdb3": "_synthBalance()", +"e7ae8f24": "govSetEpochPeriod(address,uint256)", +"e7aed7ab": "batchFetchModuleStates(address[],address[])", "e7aef169": "refreshInvestor(address,address,uint256)", "e7aefd01": "allowTransfersEnabled(bool)", "e7af4540": "ChiyouCulturalAcchain(uint256,string,uint8,string)", "e7afae52": "WayCellToken()", +"e7b061e8": "closeSwapIntent(address,uint256)", "e7b0f666": "totalPaid()", "e7b172ed": "GAS_PRICE_LIMIT()", +"e7b182bc": "addressKYCStatus(address)", "e7b1983e": "giveReward(uint256[4],uint32,uint8,bool,uint32[4])", "e7b1a7ae": "collect_fee(string)", "e7b1d43c": "withdrawVotingRights(uint256)", "e7b1d6dd": "setServerStatus(string,uint256)", +"e7b238ab": "_getDODOHelperAddress()", "e7b2d7e5": "deprecateAndUpgrade(address)", "e7b3387c": "getVoteCount()", +"e7b353d3": "beneficiaryDetails()", "e7b379c6": "TokensUnlocked(address,uint256)", +"e7b39c19": "tradeFee(int256,uint256)", +"e7b4294c": "defaultGasPrice()", "e7b43c44": "changePuzzle(uint8,uint8,uint8,uint8,uint8)", "e7b48d98": "getBurningMans()", "e7b48f74": "get(int256,address)", +"e7b4cac6": "devices(address)", "e7b4e5ab": "entrants(uint256)", "e7b512ec": "setAddress(bytes32,bytes32,address,bool)", "e7b5d97d": "getMyReferralDividends()", +"e7b5e7bd": "calculateCumulativeRate(uint256,uint256,uint256)", "e7b6135d": "getClown(uint256)", +"e7b63c3c": "stakePower(uint256)", "e7b6805b": "OriginalMyIdRepository()", "e7b686a7": "UnpackEntity(bytes)", +"e7b692ef": "submissionList(uint256)", "e7b69e74": "interest(uint256)", +"e7b6ea63": "_LPSupplyOfPairTotal()", "e7b6ff08": "beerAndHookersCap()", "e7b70b38": "getPurchaseInfo(uint256,uint256,uint256,bool,uint256,uint256)", +"e7b73493": "getMyTenders()", +"e7b73651": "enableStakingFor(address)", "e7b7aea5": "changesp2(address)", "e7b7c2a6": "setup(uint256,uint256,uint256,address,uint256,uint256,string,address,address)", +"e7b7d08d": "caxSupply()", "e7b808ea": "getAccountFeeModifiers(address)", +"e7b82a12": "getGasMintPrice()", "e7b83730": "tokenAmount(uint256,uint256)", "e7b89977": "setFeeAccount2(address)", "e7b8d977": "editionsOfType(uint256)", +"e7b8fc5a": "newProposal(uint256,uint256,uint256,address,bool,uint256[])", "e7b94df4": "donationWallet()", +"e7b98668": "impliedVolatilityHourly(address,uint256,address)", "e7b9aaef": "FIRST_VOLUME_BONUS()", "e7b9db8d": "confirmBurning(uint256)", "e7ba1012": "supplyController()", "e7ba2cc8": "BelottoCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,address)", +"e7ba338c": "StartProvision(address,uint32,address,uint256,uint256,uint256,uint256)", "e7ba6c46": "resetReservations(address,bool)", +"e7baf8dd": "setMedianizer(address)", "e7bb22cd": "getValidClassId(uint64,address)", "e7bb5233": "crowdsaleState()", "e7bbda11": "heroCore()", +"e7bbe79a": "getFragmentsPrice(address,uint256)", +"e7bbf2b2": "setFarmingContract(address)", +"e7bcef44": "AddValidator(address,int8)", "e7bd85ca": "PFGC(uint256,string,string,bool)", +"e7bd9a6d": "ownerToNumActiveIncubations(address)", +"e7bdd0bf": "dismiss(address)", +"e7be153b": "setMinionManager(address)", "e7be5617": "setOracleReference(address,address)", +"e7bebeb4": "getTotalOchaRewardWithinAllPools(uint256)", "e7bf5352": "_withdraw(uint128,address,uint256,uint128)", "e7bf7b08": "GroupCreated(uint32,uint256)", "e7bf7dfc": "getProductPrice(uint256)", "e7bfcf57": "HighCoin()", "e7bfdc93": "clearLevels()", +"e7c042d9": "unlockWallet()", "e7c0bd15": "SeedLog(address,bytes32,uint256)", "e7c0dad5": "checkApprovalRatio()", "e7c0e558": "BoomerangLiquidity(uint256,address)", "e7c12837": "getPOOL_edit_24()", "e7c158c6": "_setStrengthValue18(uint256)", "e7c17972": "btcToTokens_(uint256)", +"e7c306a1": "getEfficiency(address)", +"e7c3712a": "requestOracles(uint8,string,string,address,bytes4)", +"e7c3965f": "withDrawFunds(uint256,address)", +"e7c398f5": "insuranceFundAddress()", "e7c4118a": "certIssued()", +"e7c51f1b": "nextBatch()", +"e7c56229": "phase1()", "e7c5c27f": "saleOpen(address)", "e7c5d907": "Broker(bool)", "e7c6229a": "publicOfferingHolder()", +"e7c643c9": "votesByProdRatesType(uint256)", +"e7c667f1": "thirdReleaseTime()", "e7c6978e": "RSCCoinCrowdsale(address,address)", +"e7c6eade": "mon()", "e7c77c80": "getAmountDailybyNum(uint32,uint8[4])", +"e7c80f17": "depositUSDT(uint256)", +"e7c86ee3": "registerUBetCheck(address,string,string,string,string,string,uint256,string,string,uint256)", +"e7c898ef": "whileLoop()", +"e7c8cc4c": "NFTAttached(address,uint256)", "e7c8d171": "getTotalWidth(uint16,uint16)", "e7c8dd6d": "GemsToken()", "e7c8f61e": "enableAura(uint256,uint256)", +"e7c90a14": "setManagers(uint256,address)", "e7c957c0": "MultiTransact(address,bytes32,uint256,address,bytes)", +"e7c9cfcc": "purchaseWithTOB(uint256)", "e7ca1343": "setReserveForCompany(address)", "e7ca438d": "getUserDisplay(address)", +"e7cba709": "ChangePrimaryArbitratorWallet(address)", +"e7cbe05a": "forwardLiquidity()", +"e7cc2c8e": "upgradePMM(address)", +"e7cc55cc": "etherOutPlans(uint256,uint256)", "e7cc62bd": "total_users()", "e7cc862b": "storehouseIndex(uint256)", "e7cc8ded": "generateLockupTokensDelegationSchemaHash(address,uint256,bytes32)", +"e7ccbfd2": "updateTokenMetadataURI(string)", +"e7cd29d7": "UNICRYPT_LOCKER()", "e7cd4a04": "addWhiteList(address)", +"e7cd8146": "query_id()", +"e7cdb1a1": "getPersons(uint256)", +"e7cdc1e5": "setCardId(uint256)", +"e7ce5848": "replaceVerifierRegistry(address)", "e7ceaeab": "getTrackOwner(bytes32)", "e7cf0171": "enableTokenClaiming(bool)", "e7cf514d": "setMinOrderEthAmount(uint256)", @@ -132826,57 +243066,109 @@ "e7cf6fcb": "changeEtherTxLimit(uint256)", "e7cf7b34": "ICO_PRICE3()", "e7cfafce": "getBirthMonth()", +"e7cfe3cd": "setRune(address)", "e7d00518": "FinishTokensale()", +"e7d015f2": "indexToken()", "e7d0242b": "totalWeiCollected()", "e7d03e93": "setMaxiumInputEther(uint256)", "e7d0c552": "getRoyaltyPartners()", "e7d0c7e7": "timeStampOfCrowdSaleStart()", "e7d11a44": "getFutureTransByIdx(uint256)", "e7d137ec": "balancesAddressDescription(address)", +"e7d163e6": "joinPlys_(uint256)", "e7d1a024": "NewOne(address,uint256,uint256)", +"e7d1ebf4": "claim(address,uint256,uint8,bytes32,bytes32)", +"e7d1fb2d": "carma()", +"e7d2150d": "rescueOthers(address,address,uint256)", +"e7d22fdb": "validAddresses()", "e7d2340f": "playervanity(address)", +"e7d27998": "snx()", +"e7d28dda": "assetValue(uint256,uint256)", +"e7d28f39": "ethExchangeContract()", +"e7d2932a": "JUDGE_ETH_LP()", "e7d29d8b": "withdrawExtraToken(address)", "e7d29e38": "addHolderAddress(bytes32,address)", "e7d2c590": "showCompany(uint256)", "e7d2f315": "totalSupplys(address[])", +"e7d372ff": "HoduSale()", "e7d3fe6b": "mint(uint256,uint256,address)", +"e7d4526e": "getTokenToTokenInputAmounts(address,address,uint256)", +"e7d4539e": "member(address)", "e7d4761b": "unhalt_15day()", "e7d47c2e": "selflleryManagerWallet()", "e7d48741": "allOldUsers(uint256)", +"e7d4e741": "EndDutchAuction(bytes32,uint256,address,uint256,uint256)", "e7d4fd91": "getTokenControlInfo(address)", "e7d50e5c": "FarmShare()", "e7d53fcb": "privateSale(address)", "e7d5a62b": "testNot()", +"e7d643cf": "setRegistrationFees(uint256,uint256)", +"e7d6faf7": "depositWithPermit(uint256,uint8,bytes32,bytes32,uint256)", +"e7d7701b": "setExchangeSystemAddress(address)", "e7d80c70": "getOrderCreator(bytes32)", "e7d854af": "setWithdrawABIHash(bytes32)", "e7d86204": "registerTeamScores(uint256[])", "e7d87cda": "arbTokenExists(uint256)", +"e7d882a3": "requestProof(address,bytes32,string,string,string)", "e7d8c7db": "MicroToken()", +"e7d92ddd": "retrieveBlackAddress(address)", +"e7d931e4": "cover()", "e7da257f": "highestBidderCC()", "e7daaa5a": "OwnerManager()", "e7dac983": "submitClaim(uint256,uint256,uint256,uint256,uint256)", +"e7dadade": "setIsTaxActive(bool)", "e7dafdb6": "transfer_token(address,address,uint256)", +"e7db0d9a": "rxp_fallback(address,bytes)", "e7db6770": "startWork(uint256,bytes32,bytes32,address)", +"e7db742a": "timeEntered(address)", +"e7dbc903": "initialStakes(uint256)", +"e7dbe771": "select_adapter_for_liquidity_removal()", +"e7dc3bde": "cardIdLists(uint256,uint256,uint256)", +"e7dced67": "fxs_price()", +"e7dd4b2c": "revokeAll(address)", +"e7dd9750": "vendorIds(address)", "e7dde9a3": "_setDailyLimit(uint256)", "e7de559c": "contrDividends(uint256[])", "e7de72a4": "createFlag(uint16,uint256)", +"e7dea022": "currentQuestion()", "e7dee968": "KittyCore()", +"e7df02d9": "gggaaerras(address,uint256)", "e7df2f3e": "disburseAddr()", "e7e00d1d": "assignTestAddresses(bool)", "e7e024ce": "janwin(uint256,uint256)", +"e7e0a14a": "Mustang()", "e7e0ca7b": "tariffIndexForAmount(uint256)", "e7e10490": "cancelSale()", +"e7e1109e": "defaultWithdrawableTmv(uint256)", "e7e1e69f": "commitBid(bytes32,string)", +"e7e1ef57": "getPrivateData()", +"e7e2736e": "erc1820()", "e7e2aa0e": "buyer_cancel()", +"e7e2fe19": "getDepositBounds()", "e7e31d52": "setNinjaKindCount(uint8)", "e7e31e7a": "addSpender(address)", "e7e3411d": "fechBalanceByAddress(address[])", "e7e3e167": "rate(address,int256)", +"e7e3e3a7": "restoreAllFee()", +"e7e3f3c1": "CLAIMING_PERIOD()", +"e7e44725": "decentralizeCash()", +"e7e44c77": "LSRouter()", +"e7e4552c": "get_players()", +"e7e466eb": "long_dyn()", "e7e481c5": "BP_SPARTAN()", +"e7e4e1f7": "stake(uint256,string)", +"e7e51070": "batchMintTo(address,uint256)", "e7e52369": "firstMembershipPurchase()", +"e7e537f7": "bfxContractAddress()", +"e7e572d1": "viewUntakenETH(string)", +"e7e6a2eb": "changePriceFeedAddress(address)", +"e7e6a4ca": "wXEQBurned()", "e7e6aed1": "test_testableStandardCampaignContribution()", +"e7e725c4": "transferAvailableFrom(address,address,uint256)", "e7e766ca": "CSCRarePreSaleManager()", +"e7e7ac66": "updateWDXPrice(uint256)", "e7e7e3e8": "ETHEREMON_PROCESSOR()", +"e7e81070": "setDividendPoolData(uint128,uint128)", "e7e8116e": "forceTransferTokenOwnership()", "e7e96a43": "getPOOL_edit_2()", "e7e9e106": "rewardVote(address,address,uint256)", @@ -132887,134 +243179,253 @@ "e7ea8122": "isStateInitializing()", "e7eaaa05": "totalAvailableForSale()", "e7eb285f": "stepEtherValue()", +"e7eb2e06": "dohack(address)", "e7ebc348": "nonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"e7ec0531": "EventFundingReceivedPayment(address,uint8,uint256)", "e7ec6aef": "getSigners(bytes32)", "e7ec8182": "issueTeamTokens()", +"e7ed3045": "addStakingMapping(string,address,address,address)", +"e7ed3084": "getTaxSentToGovernment()", +"e7ed35e3": "execute(address,uint256,address,bytes,bytes)", +"e7ed6f18": "godSetEthExchangeContract(address)", "e7edab45": "_cancelParticipation()", +"e7ede8a8": "player(address,uint256,uint256)", +"e7ee3d3a": "loyaltyTradesHigher(uint256)", +"e7ee463f": "usedSchainNames(bytes32)", "e7ee6ad6": "rate(uint256)", +"e7ee7ced": "calculateContribution(address,bool,uint256)", "e7ee85a5": "quickBuyPath(uint256)", "e7eed1f7": "getCurrentPot()", +"e7ef2c60": "lastDay4ProfitOf(address)", +"e7ef921a": "redeem(uint256,address,uint256,bytes32[])", +"e7efa416": "setFeeAddressBuyBurn(address)", "e7efcfc2": "totalPayoutAmount()", "e7f034c1": "getUri(address,uint256)", +"e7f04e80": "allStarIndexToOwner(uint256)", "e7f0a865": "transfertokenContract(address)", "e7f1111e": "initializeHolding(address)", "e7f18249": "insertShareholder(address)", +"e7f1a554": "addTokenTimeLockInBlocks()", +"e7f1b802": "day_ethIn(uint256)", "e7f1c468": "UserSold(address,uint256,uint256,uint256,uint256)", +"e7f1c8c4": "houseShareBP()", "e7f23cb1": "getCallStack(uint256)", +"e7f292da": "GetAirdrop()", +"e7f326e4": "payoutInvestorAddress(address)", +"e7f33789": "changeFee(uint64)", +"e7f34e92": "YoFatMomma()", "e7f35484": "NewAquarium(address)", +"e7f3fbde": "totalAllocationPoints()", "e7f4037a": "demintTokens(address,uint8)", "e7f40d35": "IntervalBytecodes()", +"e7f41cf0": "dealers(uint256)", +"e7f43c68": "getOperator()", "e7f44523": "ReceivedLTC(address,uint256,string)", "e7f4767c": "delimiter()", "e7f56111": "ClaimPayout(uint8[],bytes32[],bytes32[],bytes)", "e7f578e1": "createDoc(string,string,string)", +"e7f62e7d": "updateSwapAdmin(address)", "e7f6edbd": "holdingTax()", +"e7f8cb5a": "startStakerChange(address)", +"e7f8ce56": "checkResolutionWindow()", +"e7f8d308": "lockB21TokensFees(uint256)", +"e7f91fae": "SaleWinner(uint256,uint256,address)", +"e7f95c45": "roomNightIndexToOwner(uint256)", +"e7f9871e": "getAmmStates(address)", +"e7f9cefd": "acceptSuperAdmin()", "e7f9e408": "stopTransfer()", +"e7fa1e86": "AUTOPerBlock()", "e7fa443e": "unlockCashpledge(bytes32)", "e7fa6883": "investFor24Months(address,uint256,uint256)", "e7fa7969": "assertEq25(bytes25,bytes25)", +"e7fa8322": "MintPriceConfigurationChange(uint256,uint256,uint256,uint256)", +"e7fa8737": "ChangedPublicationFee(uint256)", +"e7fa9f7d": "totalOwed()", "e7fac728": "friendsFingersRatePerMille()", +"e7fae522": "rewardLiquidity(address)", +"e7faec25": "hasValidBeneficiary(address,address)", "e7faecec": "testFailInsufficientFundsTransfers()", "e7fb5388": "exit(string)", "e7fb74c7": "buyItem(uint256)", +"e7fb81cb": "kratosId()", "e7fbee28": "checkIfCustodiesServedBBD(address[])", +"e7fc18f8": "getTRC20(address)", "e7fc4b64": "ricardianVoucher(uint256,string,uint8,string,string,string,uint8,uint8)", "e7fcde9b": "setFeeType(uint256,uint256,uint256)", "e7fcf520": "signToResetTokenControlInfo()", +"e7fcfd53": "consumerBulkBuy(uint256[],address,uint256)", "e7fd9a13": "addEmployee(address,uint256)", +"e7fdb103": "periodFor(uint256)", "e7fdc514": "buyFromVault(uint256,uint256,uint256)", "e7fde97a": "_withdrawDividends(address)", +"e7fefaa7": "whitelistedFreezeActivated()", "e7ff0e38": "bountyDistributed()", +"e7ff42c9": "getBalanceForRemoval(address)", +"e7ff6d43": "testTransferTemp()", "e7ff8901": "transferWine(address,bytes32)", +"e8001288": "poolRewards(uint256)", "e8001e93": "sellerApprove(address,uint256,bytes32)", "e80080d0": "cancelBurnRequest(uint256,string)", "e80160ab": "order(bytes32)", "e8017bb7": "getHTLCSpendingHash(int256,bytes32)", "e801a361": "tileTimeoutTimestamp(uint256,address)", +"e801de7c": "KittyJoined(address,uint256,uint8,uint256,uint256,uint256)", "e8022dc9": "PLAgreements(address,address)", +"e8023cdf": "penultimateWinner()", "e8024468": "getHeroRequiredGoldForLevelUp(uint256)", "e8024d75": "eNomCoin()", "e8025d77": "changeStatus(uint256)", +"e802c3da": "getCountCollections()", +"e8033c47": "setFeeAddress2(address)", "e8038e25": "TokenSale(uint256,uint256,address)", "e803b708": "setDetails(string,uint256)", "e803bcc6": "SetPriceIncrease(uint16)", +"e804069b": "showValues(uint256,uint256,uint256,uint256)", +"e8040ba1": "mmFarmingPoolId()", "e8046759": "decimals_multiplier()", +"e804d0a4": "getGlobalStakeByStatus(uint8)", "e8055e9c": "burnExcess(uint256)", +"e805b4b4": "isSellTransaction(address,address)", +"e805d6fc": "getBaseAssetDeltaThisFundingPeriod()", +"e8061e26": "getUserTotalProfits(address)", +"e8067bd5": "divuu(uint256,uint256)", +"e8068889": "sendExternalTokens(address,address)", "e8069e84": "verify(bytes32,bytes,address,address)", "e806c603": "robottradingToken()", "e8071f30": "exponential_decay(uint256,uint256)", +"e807275d": "finalYearDebitAmount(address)", "e8078d94": "addLiquidity()", +"e808033d": "tokensByPercentage(uint256,uint256)", "e8083863": "finalizeAuction(uint256)", +"e8084483": "increaseUndistributedSp(uint256,uint256)", "e8088ca2": "GetEvaluate(bytes32,uint8)", +"e808a872": "addTokenLiq(uint256)", "e808aef7": "isIcoSuccess()", "e808d671": "crowdsaleTokenMint()", +"e808f839": "changeBurnRate(uint8)", "e809046f": "NumeraireBackend(address[],uint256,uint256)", "e80919d5": "mintUnderCap(uint256,uint256)", +"e80a3558": "_maxMintable()", "e80a4df7": "NotusNetwork()", +"e80a9d48": "totalSupplyAvailable()", +"e80ac7de": "BEP20_DEPLOY_FEE()", +"e80b04b5": "getBurntAmountByRequests()", "e80b128f": "tournamentsAddr()", +"e80b2b3d": "currentCycleRewardPool(address)", "e80b7ab6": "clearArray()", +"e80b98dc": "takeBuyRequest(uint256)", +"e80bbb07": "Modified(address,uint256,bytes32,bytes32,bytes32[],bytes)", "e80bd3e5": "addCertificationDocumentToSelf(bytes32)", +"e80bd6b5": "rewordForSecond(address)", "e80c4182": "ShresterToken()", +"e80c72c0": "batchOrchestrate(address,bytes4[])", "e80d2ef8": "calculatesubscribersell(uint256)", "e80d47dd": "USDSTEMPRICE()", "e80d60b8": "CryptohomaToken()", "e80db5db": "coreContract()", +"e80db812": "uintvalue()", "e80f23aa": "tokenApprovalWithSignature(address,address,address,uint256,uint256,uint256,bytes32,bytes)", "e80f72c0": "getTransactionFromProposal(uint256,uint256)", "e80fd970": "etherToSendDev()", "e810267a": "dateEcoRelease6()", "e8107ed4": "ElectriumToken(uint256,string,uint8,string)", +"e810b5e1": "getRegisteredProperties()", +"e8113f9d": "stockhouse(address,string)", "e81140a8": "setPreICOStartTime(uint256)", "e811f50a": "collectedFee()", +"e812064f": "borrowedLiquidity()", "e8125eb9": "updateContractTokenBalance()", +"e812bcd5": "empty_to()", +"e812cc64": "hashingsha3(string)", +"e8139843": "hasExistentOrder(uint128)", "e814018d": "getCrowdsaleHardCap()", +"e81409d3": "updateCallerStatus(address[],bool[])", "e8141f93": "logUint(int256,uint256)", +"e8144192": "freezeStreams()", "e8144c42": "advisorsTokensLock()", "e8147a25": "changeMinBet(uint256)", "e814c941": "removeParticipant(address[])", +"e814cb71": "royalty(uint256)", "e815b60d": "SencToken()", +"e8164624": "_reporter()", "e8168177": "lastBlock_a2()", "e816a515": "takeFlight()", +"e816d97f": "isAccountFrozen(address)", "e816f76f": "Association(address,uint256,uint256)", "e8171f37": "valueOfScheme(uint256)", +"e8173a46": "addressToFeeEarnings(address)", +"e8175720": "feeAddBb()", "e81766e8": "AgriChainDataContract()", +"e8176caa": "lockForGovernanceVote(address,uint256)", +"e8177dcf": "getInterestRate(address,uint256,uint256)", "e8179abf": "getStar(uint256,string,string)", +"e817c2f2": "changeListingprice(uint256)", +"e81805b6": "giveEthFundAddress2()", +"e8187ff0": "DEFAULT_ACL_APP_ID()", +"e818ac21": "systemCoinOracle()", "e819172a": "TestCoin2()", +"e81960d0": "RATE_HELPER()", +"e819729e": "buylevel(uint256)", "e8197a4b": "totalSuppliedAfterLock()", +"e8199f0a": "hasStateTransitioner(uint256,bytes32)", +"e81a5c73": "vaultLimit()", "e81a6c58": "issueRefundIfNecessary(uint256)", +"e81a75ab": "erc20stringtosend(address,address,uint256)", +"e81a8c70": "NewWhitelistParticipant(address)", +"e81ab519": "bytesNN_padded()", +"e81b2a4c": "shouldDistributeDAI()", "e81b34af": "_deployContract()", "e81b3c88": "CardCount()", "e81b53d0": "computeCost(address,bytes32,bool)", "e81ba080": "updateMaxCap(uint256)", +"e81bc1ad": "setBasePrice(string,string,uint256)", "e81c17a1": "setOwnerAt(uint16,uint16,uint8,address)", "e81c2fec": "reDistribution()", "e81ca129": "consumeTicket(address,uint256)", "e81cf24c": "replace(uint256,uint256)", +"e81d4a1b": "capnhatchay(uint256,uint256,uint256)", "e81d53cf": "arr()", "e81d6c6f": "reserveY2()", "e81dd181": "callSoftCap()", "e81e0a09": "Win(address,uint8,uint256)", "e81e1ccc": "withdrawDonation()", +"e81e83db": "acceptLease(string,uint256,bool)", "e81e935a": "summPrivateSale()", "e81ecb4c": "received(uint64)", "e81f0154": "pipeIndex()", "e81f02b6": "withdrawFrom(address,address)", +"e81f2c28": "optionsTokenLibrary()", "e81f35fd": "setLastTokenId(uint256)", +"e81fb33f": "getRarityWeights(uint256)", "e81fdd77": "restCandy()", +"e81fe697": "Operator(bytes32,bool)", "e8203e38": "emitWithdrawn(address,uint256,address)", +"e8205a73": "coreVaultBitPerBlock()", "e820a32f": "vetoPayout(uint256,uint256)", "e820ce4a": "setCTime(uint256)", +"e82105fe": "profitsDistributedFarmers(bytes32)", "e8211eeb": "setUpDistribution(address[],uint256[],uint256)", +"e8214400": "rewardsForDynamic(address)", "e8223468": "sha3clone(bytes)", "e8227611": "setRealisation_effective(uint256)", +"e822f478": "getReleaseSpeed(uint256,address,uint256)", +"e82330b2": "claimFor(address,string)", "e8238688": "setTokenVestingFactory(address)", +"e823917d": "juniorBond()", "e823b9bf": "toInt256Safe(uint256)", +"e823c249": "_requireAmountGreaterThanZero(uint256)", "e823da03": "VKBToken()", "e823fa20": "checkDragonStatus(uint256,uint8)", "e8244d48": "changeHouseEdge(uint256)", +"e824600f": "collateralType()", +"e8249d40": "mintIdentityTokenDelegated(address,uint8,bytes32,bytes32)", "e824b9c7": "moftakToken()", +"e824f2b5": "getGroupMembersIndexerByDepositor(address,uint256)", +"e8252ed5": "_amountOutMin()", +"e82617fb": "getUintValue(bytes32)", "e827653c": "referalCount(address)", "e827b3e2": "latestPost(address)", +"e827ecbb": "EMax_ETH_Lp_Balance(address)", "e827f7f3": "request(bytes32,string,uint256)", "e827ff89": "HDToken99(uint256,address)", "e82898b3": "loser()", @@ -133022,138 +243433,258 @@ "e82906b3": "ISCoin(address)", "e82935da": "like(uint256)", "e8294aad": "bonus1Ends()", +"e8295588": "zeros(uint256)", "e8297da2": "defaultLockInDuration()", +"e8297f97": "setTokenSaleTokensMinimumNumberForBuy(uint256)", "e829945a": "buyProperty(uint16,uint256)", "e829a171": "MIN_GET_AMOUNT_FINNEY()", "e829d86d": "releaseAgents(address)", "e82a7d8d": "submitAnswer(address,uint256)", "e82aa31f": "createTeam(uint256[])", +"e82b15f4": "emitTransferSingleEvent(address,address,address,uint256,uint256)", "e82b7cb2": "proxySetCosignerAddress(address,bytes32)", +"e82b9000": "InterfaceId_IMultiToken()", "e82bef29": "fundAddress()", +"e82c5f77": "SpenderChanged(address,address)", "e82c6e7b": "totalTokenSales()", "e82c6e8a": "mintFirstTokens(address,uint256,uint256[])", "e82cc47f": "getFundInfo(bytes32,string,address,address)", +"e82cd0f5": "Name(address,bytes32)", +"e82d2ba7": "zeroFeeSender(address)", "e82d777c": "FHCContract()", "e82db7a0": "Batman(uint256,string,string)", +"e82e1d76": "tokensPer2Eth()", +"e82eb6fa": "getEventAddr()", "e82ed40c": "communityContributionWithdraw(uint256)", "e82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", +"e82fec2f": "MAX_STABLE_RATE_BORROW_SIZE_PERCENT()", "e83007b2": "RunLottery()", "e83029bb": "checkbalance(address)", "e8303659": "ETHER_CAP()", "e8307d00": "setMinPurchase(uint256)", +"e830b690": "getMinCollateral()", +"e8314319": "FrozenFunds(address)", "e8315742": "maxTokens()", "e831884e": "getPhaseAtTime(uint256)", +"e8325cd2": "nTokensWithdrawn(address)", "e832b482": "channelConfiguration(uint64)", "e832fda3": "select_at(uint256)", "e833bb53": "FLKDForGas()", +"e833c660": "LogCloseGameSuccessed(uint256,uint256)", "e833cc12": "getNamespace(uint256)", "e83400f6": "getBudgetOfCampaign(bytes32)", "e83447d0": "breakLink()", "e834a834": "claimed()", +"e834d0f8": "addAlerterWrappedContract(address)", "e834e89c": "FlexCoin()", "e8350fae": "proclaimInactive(uint8)", "e8358025": "isCrowdSaleFinalized()", "e835852b": "LogQueryFeeSet(uint256,uint256)", "e835dd27": "STAKE_MIN_AGE()", +"e835dfbd": "rewardUpdate()", +"e8363e99": "submitVote(bool)", +"e8365854": "setNote(string,string)", +"e8367b4c": "c_mod_vote_count()", "e837ab59": "getParticipantByAddress(address)", +"e837ae74": "preconfigure(string[],string[],uint256)", +"e83805ec": "chargeAdvertisers(uint256[],uint256[],uint256[],address[])", "e8380983": "BChain(uint256,string,uint8,string)", "e83851f8": "EtherAsteroid()", +"e8385df0": "f2b()", "e8387af8": "_mint(int256,address,uint256)", +"e8388fea": "setRewardLockPercentage(uint256)", +"e8389fd2": "UnlockBalance(address,uint256)", +"e838e375": "initialize(address[],uint8,uint8,address,address,uint256,uint256,uint256,uint256)", "e839554e": "getBasicCentsPricePer30Days()", +"e839e32a": "executeFlashLoanArb(address,uint256,uint256,uint256,uint256,bool[],bool,address)", "e839e65e": "query2(string,string,string)", +"e839f625": "DGD_ADDRESS()", +"e83aafd2": "HATCH_COOLDOWN_MAX()", +"e83aca45": "Token_Issue_Address(address,address,address)", "e83b2adf": "PTestYankeeCoin(uint256,string,string)", +"e83b9bbb": "viewUserReferralMatrix2(address)", "e83ba1fe": "stageFundGoalReached(uint8)", "e83c0bba": "setEmployeeTokenAllocation(address,address,address[],uint256[])", "e83c272c": "setTime2(address,uint256)", "e83c460d": "TimeWeekOne()", +"e83c4671": "retrievePayoutData(string)", "e83c78d4": "toggleContractStopped()", +"e83ca76b": "crowdSaleBonusAPercentage()", +"e83ccdf7": "getUserTotalStakedAmount()", "e83ce1f9": "addAddressAlias(address,address)", "e83cf468": "sendBattleTokens(address,uint256)", "e83d1c5e": "LatestRechargeTime()", "e83d589b": "getLLV_edit_24()", +"e83dbf74": "getExchanges(address,address[])", "e83ded8e": "balanceOfLockTime(address)", "e83dfe5a": "ConcludeChallenge(uint256,string)", "e83e0359": "dividendsRightsFixUpdate_(address,uint256)", "e83e34b1": "maxFees()", "e83e92ac": "setSalesFee(uint256)", +"e83eb629": "mobDivRate()", +"e83eb6b4": "namelist(uint256)", +"e83f0e5c": "getSecondPartyActiveBets(address)", "e83f682a": "beginContinuousSale()", +"e83f7843": "withdrawExpiredStakings(uint256[])", +"e83f7f18": "transferredToXDai(address,uint256)", +"e83f967b": "sendTokens(address,address[],uint256[])", +"e83faea1": "SomebodyGuessed(address,uint256,uint256)", +"e83fd260": "getFullDataForId(uint256)", +"e83fd93c": "exercisePut(uint256)", "e8400be5": "startBetting(uint32,uint32)", +"e84019f0": "intvalue()", +"e840ba13": "com(address,uint256)", "e840c116": "SocialNote()", +"e840dc5b": "RemoveCallSpenderWhitelist(address,address)", "e8421b94": "PlayToken()", "e84221ef": "playBigOrSmall(uint256,uint256)", "e8425467": "USDDecimals()", "e8429510": "TokenForInvestor(uint256,uint256,uint256)", +"e842aea7": "FundTransfer(address,uint256,bool)", +"e84354c5": "minRebalanceAmount()", "e8436936": "StatsMinted()", "e8436ca5": "setMainCampaignStatus(bool)", +"e8437ee7": "adminSetGenericResource(address,bytes32,address,bytes4,bytes4)", +"e843aa40": "bakeToWbnbRoute(uint256)", +"e8441007": "cap_nhat_thoi_gian_hoan_thanh(uint256,int256)", "e8443708": "PaygineHasDeployed(uint256)", +"e8445adc": "kudo(address,address)", "e844ca34": "withdrawTokensToAdvisors()", "e844cb18": "batatacoin()", "e844d097": "addCandidate(uint256)", "e845105c": "countriesLockEndingAt()", +"e845626b": "GetToken(uint256,address)", +"e845ce8f": "bool2()", +"e84657d4": "setUniswapPool()", "e846e7c0": "drawPeriod()", "e846f1f4": "collectPercent(uint256)", "e846f997": "contributionWallet()", +"e846fd91": "addResolvers(address[])", "e8474230": "getHybridizationFullPrice(uint256)", +"e8477107": "nerdLpTokenMap(address)", "e8477bda": "setBuyMaxLimit(uint256)", +"e8477f85": "setBackendProxyBuyer(address)", +"e847a609": "execute3(address,uint256,bytes)", +"e847c09d": "swapConfirmed(address,uint256)", "e847ca9c": "BAXI()", +"e847e2c0": "availableBonusForETH()", "e84818bc": "largeContribPercentage()", +"e8488252": "refundees(address)", "e8489626": "setProxy(address,address,bytes32)", "e848aba2": "addWhiteListUsers(address[],uint256[],uint256[])", +"e848c629": "getBurnPercentage(address,address,uint256)", +"e849871d": "GetNumberOfProjects()", +"e849c21a": "_deleteCSP(bytes32)", +"e849d659": "supplyCompound(uint256)", "e849ec8c": "ChangeTokenContractOwner(address)", "e84a481b": "adddotchtooffer(uint256,uint256)", +"e84a6e0c": "TEAM_PRIZE()", +"e84a9728": "setMintSigner(address)", +"e84a9bbf": "eventCreated(uint256,address)", +"e84abef1": "increaseTransactionCount(uint256)", +"e84ac262": "maxBznTankSizeOfPremiumCarWithIndex(uint256)", +"e84aeae4": "TRUSTED_RECIPIENTS(uint256)", "e84b53bd": "addItemTo(address,uint256,uint256,uint256,uint256)", "e84b69e4": "editTimer(uint8,uint256)", "e84c9d5c": "removeWhitelister(address,address)", +"e84cd6c9": "setHolderFee(uint256)", "e84d2abf": "inMainSalePeriod()", +"e84d5547": "_balanceOfAt(address,uint256)", "e84d90c0": "checkDisabledStatus()", "e84d92e8": "_getBridgeNativeFee(uint256)", +"e84e5a9d": "setTokenPrice(address[],uint256[])", "e84f7054": "refundMyIcoInvestment()", "e84f82f0": "emitBegin()", +"e84fb681": "__Circle_init_unchained(address,address)", "e85034a2": "walletTrade(address,uint256,address,address,uint256,uint256,bool,bytes32)", "e85061ca": "playerAction(uint256,uint8)", +"e850639c": "play(bytes32,uint8)", "e850899a": "StartPreSale()", "e850a8ef": "payTo(address[])", "e850e4c4": "GetContractStateEarlyTerminatedByLandlord()", "e850efaf": "setRegionTax(uint16,uint8)", "e850f3ae": "getGenerationIdForCall(bytes32)", +"e8510fc9": "deleteKey()", +"e85177e5": "KSCSell(address,address,address,uint256,string)", "e851808e": "CHARITYSEACOIN()", "e8518341": "transferOwnershipWithHowMany(address[],uint256)", "e8518be0": "requestReplaceOwner(address,address,string)", "e8518dc6": "rateWithBonus()", "e85230e9": "minETHin()", +"e8523187": "_search(string)", +"e852e741": "isSold()", "e85353e1": "admin_set_withdraw(address,bool)", "e85365d5": "firstblock()", "e8539244": "SetPayrollLocked(bool)", "e85393d7": "WithdrawEmergency()", +"e853a1c2": "bor()", +"e853c035": "TENS_Token()", "e853cda3": "checkKncArbitrageRate(uint256)", "e853ce64": "joinTeam(uint256,uint256)", +"e8542b07": "adminsMap(address)", +"e8543357": "insurancePayoutRate()", +"e8543420": "setLine(address,uint256)", +"e85437f8": "editTranche(uint256,bytes32)", +"e85455d7": "isLiquidityPool(address)", +"e85457fd": "LogBurningPercentageChanged(address,uint256)", "e854d135": "executeWill(address)", "e854dfb4": "Order(address,uint256,uint256)", "e854eeb3": "fciDecimals()", +"e854f53d": "minimumWeightChangeBlockPeriod()", "e85501d8": "revokeRequest()", "e8554e8b": "getRaceBaseStats(uint256)", "e855aee5": "_mint(uint256,address)", +"e855f44a": "setTotalOrbits(uint256)", +"e8561730": "NotedTokens(address,uint256)", "e8561d36": "cashBackFromProject(address,address)", "e856528a": "mul(uint128,uint128)", +"e85753e7": "getDealer(address)", +"e8578496": "total_stake_funds()", "e8580dd4": "Survey(address,uint256,string,bytes32[])", +"e8584f1a": "GoldMigrateWanted(address,string,uint256)", +"e8588147": "MessageRefundEth(address,uint256)", +"e8594b31": "nextGov()", +"e85976a1": "stakeAmountFromKebabPool()", +"e859e56c": "referralShare()", +"e85a89fd": "_vaults(address)", +"e85abe09": "getUserReferralBonus(address)", "e85ac5b0": "ownerSetAuditor(address)", +"e85b0080": "erase(address)", "e85b26c0": "createClaim(address,uint256)", +"e85b2afc": "RocketLaunch(uint256)", +"e85b62fe": "RefundClaimed(address)", "e85ca2a4": "bitcoin_multisig_vault()", +"e85d05ba": "infoOfPool_v2(address,address)", +"e85db60c": "setMyStructure(uint256)", "e85dcfe8": "ScheduleTransaction(string,uint256,uint256)", "e85de8e7": "valueInUSD()", "e85e0bd7": "addToken(uint256,uint256,uint256)", "e85e3d92": "LongClosed(address,uint256)", +"e85e8434": "uniswap_reserve_pair()", "e85efc50": "assertEq(uint256,uint256,bytes32)", "e85f3be6": "TOSPrivateHoldingContract()", "e85f3fb0": "setAuthorizedSpender(address)", +"e85f5003": "settenantwallet(address)", +"e85f8297": "XFI()", +"e85fded7": "set_Contract_Vars(uint256,uint256)", +"e85ff4f1": "alienDeposits(address)", +"e86098f5": "erc20List(uint256)", +"e860a07c": "Boss()", +"e860ed49": "strategyLength()", "e86142b5": "orderOnSaleAuction(uint256)", +"e8619c85": "MAX_PURCHASABLE_SUPPLY()", "e861c4f1": "dividendEndTime()", "e861dc85": "VETO_PERIOD()", +"e861e067": "testAllRates()", "e861e34d": "minInvestInWei()", "e861f077": "HaltStatus(bool)", +"e8620d14": "donate(uint256,uint256,uint256,uint256)", "e8625060": "testDisputedInvalidSequenceWrongWriteValue()", "e863051c": "SmartForestCoin()", "e86310eb": "exp(address,address,uint256)", +"e8632a28": "_redeem(address,address,bytes32)", +"e8637636": "getValuePoolsSumWeights(uint256)", +"e86383b3": "useCode(uint256)", "e863a122": "getPercentageCW()", "e863d8cc": "repeatedPayment(address,uint256,uint256,uint256)", "e863f0d3": "acknowledgeOrder(uint256)", @@ -133161,16 +243692,29 @@ "e86434ef": "startRefundPayment(uint256,uint256)", "e864f2b6": "exchange(address,uint128)", "e864fd27": "checkCap(uint256)", +"e8651aa0": "buyPutTickets()", +"e8657538": "BuyShare(uint32,uint32,address)", +"e865ffe8": "createFeeManagerFor(address)", +"e866294a": "allowTransferOn()", +"e86637db": "encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)", "e8665638": "bonusVestingPeriod()", "e866d302": "setJackpotWinCount(uint256)", "e86701e0": "playerFlight(uint256,uint16)", +"e8672bc9": "dplayTradingPost()", "e8672de9": "removeRatePlan(uint256)", +"e86783a7": "hashEth()", +"e86790eb": "tokenSalePrice()", "e8679512": "getTransformInfo(uint32)", +"e867a136": "sellAllTokens()", "e867ecda": "setPricing(uint256)", "e8685ba1": "getNumOfCandidates()", +"e868764c": "tokenRatePerEth()", +"e8689bb8": "futuresContractsAddedBlock(address)", "e8689bf8": "_emitUserRatingGiven(address,address,uint256)", +"e8689daa": "getUnderlyingAsset(address)", "e868b55e": "createReaderWriter(bytes32,address,address,bytes32)", "e868cd17": "ManUnitedSC()", +"e8699228": "blacklistStake(bool,uint256)", "e86994ea": "getPropertyColors(uint16)", "e869d45f": "registerScheme(address,bytes32,bytes4,address)", "e86a3b8b": "WSIPrivateEquityShare()", @@ -133178,64 +243722,123 @@ "e86afde0": "description(uint64)", "e86ba262": "getTimeLimitForReplyOnProposal()", "e86ba99d": "tryFinalizeProposals(uint256[],address[],bool[])", +"e86bd14d": "BiggerNum()", "e86bf267": "takeCfd(uint128,address)", "e86c6431": "isTransferManager(address)", "e86c87d3": "func_0778()", +"e86cd59f": "setBuyerWithdrawal(address,uint256,uint256)", "e86cf04b": "TinyProxy(address,uint256)", "e86d24ca": "getSmartSharingByHash(bytes32)", +"e86d3b0c": "underlyingBalanceGauge()", +"e86d5344": "emergencyStartNewCycleForTesting()", "e86d86ea": "totalTransferWhitelistMapping()", "e86dad29": "assetArray(uint256)", "e86dea4a": "feeNumerator()", +"e86e282f": "allPendingPiggy(address)", "e86e3f2a": "setArrIntF1StrF2(int256[],string)", "e86e52ec": "isBlocked(address,uint256)", +"e86e6340": "forceFailIfPairExists()", +"e86ef23b": "fetchServer(uint256,uint256)", +"e86ef40b": "getUserBorrowed(address)", "e86f2c75": "mainSaleSecondBonus()", "e86f6699": "isWhitelistedAddress(bytes32,uint8,bytes32,bytes32)", +"e86f6a0d": "totalLiquidityStaked()", +"e86f95a5": "badTokenOf(address)", +"e86fb9b2": "burnGovernance(uint256)", +"e86ff71e": "isLeasedByAssetId(string,uint256)", +"e8702cf7": "tadPerBlock()", +"e8709c40": "contribution(uint256)", "e870a88e": "setnumMax(uint16)", "e870bec1": "logging(uint256)", +"e87142eb": "YFWin()", "e871614a": "getResponseUint(uint256,bytes32)", +"e871c539": "amount_wn()", "e871f35f": "addCourse(string,uint256,uint256,string,string)", "e872a05e": "addrMine()", +"e872c26b": "priceFeedSet()", +"e872df5e": "REI11()", "e873d02d": "cap2(address)", "e8742b55": "setComment(string)", +"e874a411": "getAvailableGameWithID(uint256)", "e87508be": "investorDeposit()", +"e8755446": "closeFactorMantissa()", "e8755d00": "setServiceFee(uint256,uint256)", "e8756037": "finishExchange()", "e8757d19": "donations()", +"e87596c0": "cancelLandSale(uint256)", +"e875a613": "getVoucherPriceToken(uint256)", +"e875b11d": "swapExactTokensToETH(uint256,uint256,uint256,address,address,bool,address)", "e875bfbc": "getMinimumFunds()", +"e875cb0c": "allPendingRose(address)", "e8763023": "ProofOfAwareness()", "e876bdef": "getEtherRaised()", "e876c273": "TotalSupplySet(uint256)", +"e876d4ea": "minimumLockPeriod()", "e876e3f1": "investorsFee()", +"e876f4af": "clientTokenFees(address)", +"e877288a": "bulkClaimOnBehalf(address[])", "e87752f4": "icsToken()", "e8777158": "grantVested(address,address)", +"e877b873": "blockhashMapping(uint256)", +"e877db1a": "updateRecurringPaymentCycleInBlocks(uint256)", "e877e541": "bankuToken()", "e877f910": "sendToContract(address,uint256,bytes)", +"e8781789": "AuctionPlatPriceChange(uint256,address,uint256,uint64)", "e8787040": "ElevenElevenToken()", "e8789d88": "getEndTimeOfStage(address,uint256)", "e878d65f": "QIUToken()", +"e878fc22": "setReserveTrigger(uint256)", "e879790a": "HHRFallback(address,uint256,uint256)", +"e879a13e": "mult()", +"e879c19f": "EIP712_PERMIT_TYPEHASH()", +"e87a0180": "totalFarmableFannies()", "e87a0a59": "EIB()", +"e87a0b64": "UpdatedTransactionVerifier(address)", "e87a9d84": "phase1AccountTokensMax()", "e87aa769": "_getShinyPurity(uint16,uint16)", "e87b0242": "ADVISORS_LOCK_DATES(uint256)", +"e87b3266": "createVirtualEntityAndConnection(address,bytes32,uint8)", +"e87b99f9": "LogpayToRevenue(address,uint256,bool)", "e87bbdbb": "spawn(bytes32,address,address)", +"e87bf925": "netTotalUserWithdrawable(address)", "e87c05c6": "restSupply()", "e87c0ee6": "getGameCount()", "e87c1463": "bidTicket(uint256)", +"e87c4572": "initialize(address,address,address[],address[],uint256[],uint256,bool,uint256,uint256)", +"e87d31b6": "NSN(address)", +"e87d7630": "putin(uint256)", "e87da468": "addChild(bytes32,bytes32)", +"e87da856": "lpFeePct()", +"e87de768": "getCurrentPlans()", "e87df70e": "fivetimes()", +"e87e69fe": "getPreBlockEnd(address,address,bytes32)", "e87e77fe": "switchAirdrop()", "e87ea055": "checkCurrentStage()", +"e87eb292": "updateRoom(string,string,string,string,uint256,uint256,uint256)", "e87ed8b5": "RTB2()", "e87f41bb": "deleteInvestorTokens(address[],uint256[])", +"e87f4d80": "merchant_status()", "e87ff056": "getTeamByPosition(uint8)", "e8801360": "soldTokensCounter()", +"e88035bf": "PRIVE_LOCK_TIME()", +"e880de18": "find_block_epoch(uint256,uint256)", "e8814606": "CryptosisToken(uint256,string,string)", +"e88193e8": "renounceBlackLister()", +"e881958f": "adjustBurnRate(uint256,uint256,address)", +"e8822698": "ttlUsers()", +"e8822e02": "ConfirmationETHNeeded(bytes32,address,uint256,address)", +"e8823af1": "depositorsProxy()", +"e8829d48": "latestLoanId(address)", +"e882c3ce": "moveRegistry(address)", "e882f844": "DINAR()", +"e882fd0e": "lastGift()", "e883429a": "isTransferAllowedteam()", +"e88343e6": "BYTES()", "e8836183": "blockLock()", +"e8836dcb": "total6TokenDivPoints()", "e88390aa": "coinSendDifferentValue(address,address[],uint256[])", "e883d157": "outstandingPower()", +"e884269a": "devFeePercentage()", "e88499a9": "claimPayout()", "e8850978": "reportMissingChunk(bytes32,uint256,uint8,bytes32,bytes32)", "e8853e32": "getData_28()", @@ -133243,53 +243846,83 @@ "e885910f": "trackCrowdsale(address)", "e885b81f": "Bonuslist(address)", "e8862924": "decodedLocksroot()", +"e8864b20": "removeGulpPool(uint256)", +"e8868866": "PresaleMinted(address,uint256)", "e886dade": "bulkTransfer(address,address[],uint256[])", "e887841e": "to(uint256)", "e8878b11": "wakeUpProxy()", +"e887de22": "Error(uint256,bytes32[])", "e88810ff": "presalePiDiscount()", +"e8882920": "updateMaster(uint256,string,string,uint256)", "e8884aee": "_useFromDailyLimit(uint256)", "e88885fa": "price1Of(uint256)", +"e8888915": "transferIn(address,uint256)", +"e888a99e": "minStability()", "e888e445": "CatalogoOuvidorias(bytes32,uint8,bytes32,bytes32,int256)", +"e88958dc": "creatorFee()", +"e889b470": "initTotalSupply()", "e88a728f": "getAssetIdOwnerAndOIndex(uint256)", "e88ab341": "contributorsVestTokenAllocation()", +"e88aeb18": "ownerTransfer(uint256)", "e88b0067": "mintInvestment(string,string,uint256,address,uint256)", "e88b8ac6": "confirmAndCheck(bytes)", +"e88b91ea": "nftManager()", "e88b9436": "MYR_Omnidollar()", "e88bc2ba": "Variation(address,address)", "e88c6a8a": "moveToken(address)", +"e88cc556": "rejectJob(bytes16)", +"e88d0b8c": "fluxCapacitor()", "e88d27eb": "registerProperty(string,string,string,string,string)", "e88d9567": "changeDepositFee(uint256)", "e88dc5b7": "rewardPeriod()", +"e88dcd21": "updateLamaPerBlock(uint256)", +"e88dfc67": "lendingList(address,uint256)", +"e88e03ea": "updateSupplyDelta(int256)", "e88eff06": "setUserRoles(address[],bytes32[],address[],uint8[])", +"e88f3588": "InsertProposalEvent(address,uint256,address)", "e88f3a86": "addBonusToBlock(uint256,uint256,uint256)", +"e88f3bc7": "topped(address)", "e88f4510": "LigerToken(address,address,address,address,address)", "e88f4c6f": "usedCoreSupply()", "e88f97bd": "query2_fnc(uint256,string,string,string,uint256)", "e8903656": "executeSubscription(uint256)", +"e8906716": "IsERC20Maincoin(address)", +"e8906757": "utpdu()", "e8906a2d": "addSigners(address[])", "e89152ac": "ItemReceived()", "e8916af9": "addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"e8917855": "setLimitInAYear()", "e891c9db": "validateWithdrawalSignature(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32)", "e8927fbc": "increase()", "e8928f7a": "setMaxWei(uint256)", "e8930efd": "Investors(address)", "e8932ea1": "burnClosedTokenInternal(bytes32)", +"e89352de": "setKeep3rRequirements(address,uint256,uint256,uint256,bool)", +"e89355c2": "coll()", "e8936b29": "liveSince()", "e894000b": "authorizedPower()", "e89401a1": "multihash(bytes32)", +"e8940888": "getcontract()", "e894326c": "addDepositCreator(address)", "e8944564": "test_insert_findWithHintPrevRemoved()", "e894f117": "TokenTimelock(address,address,uint64)", "e8959b94": "addUser(int256)", +"e895c514": "setEcosystem(address)", +"e895fb97": "setMaxAmaunt(uint256)", "e8974832": "levelTwoBonus(uint256)", +"e897888e": "canRefundTime()", "e89826ac": "addGame(string)", "e89876d6": "POSController(address,uint256,uint256,uint256,uint256)", "e89927ef": "voteForCandidate(string)", "e8992d40": "additionalTotalSupply(uint256)", +"e8997c4b": "__setVotingPeriod(uint256)", "e8997dbd": "setFeesController(address)", +"e899ae3d": "setTiming(uint256,uint256)", "e899e848": "Fastmarketnetwork()", +"e89a3020": "packageRelayerAddressRecord(uint256)", "e89a49e2": "setPrivateName(bytes32)", "e89a4e92": "getFeeRatioForJS(address)", +"e89a66d5": "tokenReleaseComplete()", "e89ac5dd": "OrganizeFunds()", "e89aeaca": "redeemLand(address)", "e89b0e1e": "addAccount(address)", @@ -133298,57 +243931,86 @@ "e89b5d4b": "incrementInventory(uint256,uint256)", "e89b727c": "myTotalStakeAmount()", "e89b9ff6": "errCounter()", +"e89baf63": "setInvestContractAddr(address)", "e89bc86b": "getBooleanMapCount(string)", +"e89c4f07": "ButtonWinner(address,address,uint256)", "e89c9b5d": "doThrow(string)", "e89cdff5": "setTeamName(uint256,string)", "e89d0d17": "getTeamLeaders()", "e89d7f23": "payDividend(uint256,uint256)", "e89df228": "shippingService()", +"e89e4ed6": "milestones(uint256)", +"e89e6202": "setUniswapTMETMCPair(address)", "e89f0f40": "DTR()", "e89f3477": "grip()", "e89f38d4": "BonusToken()", "e89f5329": "createDebt(uint256,address,uint256)", "e89f7672": "fight(bytes32,bytes32,bytes32)", +"e89f78db": "client_provisioned(uint256)", "e89f98a2": "TokenContractChanged(address)", +"e89fd314": "bproToBtc(uint256)", "e8a01f11": "BagSold(uint256,uint256,uint256,uint256,address,address)", "e8a0aed3": "createToken(string,string,uint8)", "e8a0cf44": "getScannersIds()", "e8a0d312": "issueIndividualTokens(address,uint256)", "e8a0e3c9": "BigbomPrivateSaleList()", +"e8a11072": "AddTokenBalance(address,address,uint256)", "e8a12479": "CBCT()", "e8a1c08f": "nibbleToChar(uint256)", "e8a207ad": "freeTokensAvailable()", "e8a21157": "setNonEtherController(address)", "e8a21382": "calculateInstantBonusAmount(uint256,address)", +"e8a22ddb": "AssignToken(address,uint256)", +"e8a24516": "VestedTokenRevocation(address)", "e8a28d52": "changeAllowAllBurnTransfers(bool)", "e8a2a5ba": "Resolved(address,uint256,uint256,bool)", +"e8a32462": "halfLifeTime()", +"e8a3345b": "CardCreated(uint256,uint16,uint16,address)", +"e8a35392": "getFeeReceiver()", +"e8a38b32": "getRandomString()", +"e8a3d485": "contractURI()", "e8a43960": "elixor()", "e8a478ad": "round0Bonus()", "e8a481bd": "edit(address,bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", "e8a4b797": "isTokenApproved(address,uint256)", +"e8a50435": "setMaxFeeRatio(uint256)", "e8a5282d": "setConfig(bytes32)", +"e8a52c19": "approve_186(address,uint256)", "e8a55471": "_transfer(address,uint40)", +"e8a5563e": "isMarketingTokensAllocated()", +"e8a5fe04": "deployMarket(uint256)", +"e8a60558": "register(string,string,uint256)", "e8a61357": "testInternal(uint256)", "e8a61cc8": "refundBuyer()", "e8a62235": "storeAction(address)", "e8a6d7dc": "START_RATE()", +"e8a6ec7a": "priceRatioCampaign(bytes32,uint8,uint256,uint256,uint256)", "e8a71012": "switchCrowdSaleStage()", "e8a7228b": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[])", "e8a748e7": "whitelistOneAddress(address)", +"e8a74998": "refundErc20Token(uint256,uint256,address)", "e8a7be57": "MRVToken(address,address)", "e8a7e256": "ownerTopUp()", +"e8a89cc6": "Burnt(address,address,uint256)", +"e8a915ad": "stage_prod_origShare(uint256,uint256)", "e8a9594f": "rateOfEmissionPerYear()", "e8a96b46": "getHolder(uint256)", "e8a97ea8": "StateChanged(uint8,uint8)", +"e8a9b53b": "arbiter(address)", "e8aa1f5e": "makeOwnerBitmapBit(address)", "e8aa377b": "storeHarvestOperation(string,string,uint32,uint16,uint16,string)", "e8aa58ce": "vaultToWallet(address,uint256)", "e8aa6b6f": "TeamtokenRelease4()", +"e8aab957": "extractAndAddGems(address,uint256,uint256[],address)", "e8aabf9c": "ownerTransferWeiSecondWallet(uint256)", "e8aada0c": "ViewBet(address)", "e8aadc3f": "locationId()", +"e8aaf284": "changePizza(uint256)", "e8ab245b": "WarriorsAssignedToBattlefield(address,address,uint256)", +"e8ab6ed3": "ERC20TokenAddress3()", +"e8abe379": "IntendedPurpose()", "e8ac0e76": "getPropose(address)", +"e8ac5abd": "set_Invest2Fulcrum2xLong_BTCContract(address)", "e8ac764b": "twoMillionFourHundredThousand()", "e8aca46a": "addReferral(address)", "e8aca672": "getNodalblockURL()", @@ -133357,77 +244019,141 @@ "e8ad2369": "getCaseAtIndex(uint256)", "e8ad6912": "setGasForCLOUD(uint256)", "e8ad7bcc": "secondTTax()", +"e8adca4d": "SUBBALANCE_ROLE()", "e8adf589": "getRateScale()", +"e8adfbc7": "lotteryNFT()", +"e8ae2f5b": "disableReserveAsCollateral(address)", "e8ae7dd2": "getCCH_edit_22()", "e8ae8c6e": "DescriptionInt()", "e8af214a": "fundingRemainingAvailableInEth()", +"e8af6aff": "AUTOv2()", +"e8afa8e8": "changeRootChain(address)", "e8afedd9": "setCommissionTarget(address)", +"e8b07ab7": "depositWithPermit(uint256,uint256,uint8,bytes32,bytes32,uint256)", +"e8b092b7": "RefundEthEvent(bytes32,address,uint256)", "e8b0a262": "ICO2Period()", "e8b13c44": "getChainyTimestamp(string)", +"e8b1ace2": "getUIntaggregate2()", +"e8b1b8e5": "UpdateUserDebt(address,uint256)", "e8b1d0f3": "relayCall(address,bytes4,bytes)", +"e8b1e40b": "regUser(string,uint256)", "e8b1e825": "getTokenPriceInWeiAndPhaseIdxs()", "e8b23632": "playerRefundAll()", +"e8b344df": "Deposit_Eth()", +"e8b35086": "setTokenAddresses(address,address,address,address,address)", "e8b3891e": "userTransferUser(address)", "e8b3ed65": "addDoc(string,string,string,string)", +"e8b442c9": "may()", "e8b49df2": "payWithEth(uint256,address)", +"e8b4bdfc": "setMarketPayment(uint256)", "e8b4c9d7": "OPEN_PACKAGE_PRICE()", "e8b50802": "PRESALE_END()", +"e8b52d17": "setSwapUsdcForBtf(bool)", +"e8b57acd": "CRV2DAI(uint256)", "e8b5b796": "transferownership(address)", +"e8b5cdf5": "currentDevFee()", "e8b5e51f": "invest()", "e8b611d6": "dailySupply()", "e8b69081": "checkActionIsAuthorisedAndReset()", "e8b6bbe4": "feeToSeconds(uint256)", +"e8b6c22e": "addAppOwners(uint32,address[])", "e8b6fa80": "claim(int256,int256,int256,int256)", +"e8b75b9c": "getTestaFee(uint256)", +"e8b86f39": "withcall(address)", +"e8b8dd6e": "addERC721Contract(address,bool)", +"e8b93ad7": "tokenID_Address(uint256)", +"e8b96de1": "decreaseStake(uint256)", "e8b9d536": "SingularityNetToken()", +"e8b9e3f3": "ibase()", "e8ba2fc9": "FundWallet(address,address)", +"e8ba5d0c": "uniHXBETH()", "e8ba6509": "isFinished(uint256)", "e8ba854f": "updateWallets(address,address)", "e8ba8f8b": "fixPlayerSurname(uint256,string)", +"e8ba994d": "versionTotal()", +"e8bb0dca": "addNewParticipant(uint256,address,bool)", "e8bb7143": "removePackCategory(uint256,bytes4)", "e8bba4f6": "getDepositedOf(address)", +"e8bbbce7": "_currentWarriorPrice(uint256)", "e8bc0d40": "activateNextRound()", "e8bccab3": "Neglect(address,uint256,uint256,int256)", "e8bd09ff": "GetPlayerNumber(uint8)", +"e8bd3a3d": "elysia()", "e8bd5cc4": "NTRYPerEther()", +"e8bda9af": "withdrawCard(uint256,uint256)", "e8be2e8e": "NewsContractEntity()", "e8be3853": "setOffchainPayment(address,bool)", "e8be73dc": "BenkiICO(address)", +"e8be98fa": "setQianMintCost(uint256)", +"e8bee352": "IS_RARI_FUND_CONTROLLER()", "e8beef5b": "fireEventLog3Anonym()", "e8befc0d": "getDividends(bool,address)", +"e8bfbfb9": "approve_473(address,uint256)", "e8bfe5b8": "landmarkPriceStepNumerator()", "e8bfebec": "ISSUE_METHOD()", +"e8c0136e": "StoreActive(string,address,bool)", "e8c0485f": "profile(string)", "e8c09c0d": "verificationHoldersValueMap(address)", "e8c0a0df": "totalDepositBalance()", +"e8c18625": "trumpVictoryIPFSHash()", +"e8c1f7a6": "getNftLockedToStakeRoom(uint256,address)", "e8c23649": "referralName(string)", +"e8c238a1": "makeMythicTradable(uint16)", "e8c28358": "calculateDispensedTokensForGasPrice(uint256)", "e8c2cb16": "equal(string,string,string)", "e8c32d13": "DoacaoEvento()", "e8c3a65f": "save1(address,bytes,string)", +"e8c3c54f": "provide(uint256,uint256)", "e8c3e34d": "GetProperty(bytes32,uint256,uint256)", +"e8c3fb7d": "LevelOf(address)", "e8c494f1": "calcPresaleTokenSupply()", +"e8c4be30": "proposedAggregator()", "e8c4d328": "airDropNumber()", "e8c4fa04": "coinIssuedGemmyMusic()", "e8c5ff96": "jackpotLarge()", "e8c61c4e": "actionB(uint256)", +"e8c63470": "marketDebt()", "e8c66cac": "fundingReserve()", "e8c67216": "getRateLimit()", +"e8c6cb49": "setSpreadRate(uint256)", "e8c6ed14": "niceGuy()", "e8c78934": "disableReservePurchases(address,bool)", +"e8c7b756": "d34rc(address)", "e8c7df8a": "admin_token_add(uint256)", "e8c80880": "VestingAddressChanged(address,address)", "e8c8a52a": "reinvestDivs(uint256)", "e8c8bb52": "_getRegistry()", +"e8c8bfac": "SWAP_RATE()", +"e8c8f5fd": "WP_LASTLEVEL()", +"e8c903d2": "whoscoindefi()", "e8c93aa9": "createProductionUnit7()", +"e8c949c3": "LetsInvest(address,uint256)", "e8c96256": "Lesson_2(address,uint256)", +"e8c98b22": "globalConstraintsPost(uint256)", "e8c9a3e5": "withdrawnTokens(address)", +"e8c9f085": "getCuponContract()", "e8c9f9de": "LocalToken(uint256,uint256,string,string,string,address,address,address)", +"e8ca0ca3": "removeDebt(address,bytes32,address,uint256)", "e8ca1609": "startNewPayoutPeriod()", "e8ca3bbb": "auctionsContract()", +"e8ca8db4": "getDecreaseStamp()", +"e8cacd72": "setContract(address,bool)", +"e8caeb87": "fulfillSendTransfer(bytes32,uint256)", "e8cb635b": "checkRequestSignature(bytes,bytes,uint256,bytes)", "e8cc00ad": "withdrawOwner()", +"e8cc1159": "stakerPower(address)", +"e8cc7fb6": "protocolFeeShareBPS()", +"e8ccbf8d": "getAfterTransferLockedTokenBalances(address,bool)", +"e8ccd388": "_FXS_contract_address()", +"e8cd9d3a": "setHolds(address[],uint256[])", +"e8cdcc99": "buy(address,address,address,uint256)", +"e8ce4b41": "getBloodLineWeight(bytes32)", +"e8cf01fc": "setEthMaxContribution(uint256)", "e8cf0aca": "depositEthersFor(address)", "e8cf56a9": "C2L()", +"e8cf5c2e": "setProductQuality(address,uint256)", +"e8cf6d7c": "list(address,uint256,uint256,uint256,uint256,address,uint256)", +"e8cf8608": "keeper(address)", "e8cf86ff": "MyTestCoin()", "e8cf958e": "setBwMarketValidCaller(address)", "e8cfc40d": "EtherPrice(uint256,uint8)", @@ -133435,138 +244161,283 @@ "e8d07525": "getLockerAddr(uint256)", "e8d0affb": "addOwner(address,bool,bytes)", "e8d0ed31": "sendInvestor(address,uint256)", +"e8d0fd90": "requireToPassMessage(address,bytes)", "e8d11d9c": "DavidCoin()", "e8d1891b": "removeOracle(address,uint256)", "e8d199ec": "BetterBitcoin()", "e8d1e961": "lockAccount(uint256)", +"e8d1ecfc": "redeemFromFailedRebalance(address)", +"e8d310d2": "sumOfOutputTime()", "e8d320e6": "coinBalanceOf(address,uint8)", "e8d3280f": "decrement(address)", +"e8d33588": "lockedTokens(bytes32)", "e8d34f5d": "ensureCollateralBalance(uint256)", "e8d375fe": "week_in_blocs()", "e8d3a5a9": "joinboard(string)", +"e8d3ae9c": "getAuthQuoteEngine()", "e8d3cad5": "getDepositsLength(address)", +"e8d3e793": "getValuePoolVestingDays(address)", "e8d47923": "fAdd(uint256,uint256)", +"e8d4a0f3": "governanceRecoverUnsupported(address)", "e8d50403": "ChangeDates(uint256,uint256,uint256,uint256)", +"e8d522bb": "buyEthWithToken(address,uint256,uint256)", +"e8d5704b": "claimWonShard(uint256)", +"e8d5940d": "vote(string,string)", "e8d59fae": "PROMO_TOKEN_AMOUNT()", +"e8d608ef": "disallowBypassFees(address)", "e8d663a4": "requalify(address)", +"e8d66c66": "setMessageFixed(bytes32)", "e8d6b5aa": "TORCToken()", "e8d6f62d": "p1Of(uint256)", "e8d70569": "setGameAddress(uint8,address)", +"e8d72b6b": "getStastiticsByAddr(address)", +"e8d8220e": "KiSpeed()", "e8d83383": "whitelistMaxContribAmount()", +"e8d8565c": "rollPayment(uint256)", +"e8d857b0": "tweets(uint256)", +"e8d885fd": "LogWalletWithdrawal(address,address,uint256,uint256)", "e8d88bd4": "Race()", +"e8d8a255": "whitelistedAmount(address)", "e8d8c3a7": "decreaseApprovalAllArgs(address,uint256,address)", +"e8d8cac4": "processNetworkFees(uint256)", +"e8d947d7": "Balance(uint256)", +"e8d9861d": "Cancel(bytes32)", "e8d9d76a": "WCMY()", +"e8da0424": "getResult2()", +"e8da06f5": "GiverUpdated(uint64)", "e8dad6d3": "getOrganizerAddress(uint256)", +"e8dba85f": "getTotalStakedByPoolId(uint256)", +"e8dbdbde": "testDataTypeInt32()", +"e8dc12ff": "convert(address,address,uint256,address,address)", +"e8dc7eed": "totalIssuedNomins(bytes4)", "e8dc800c": "setReadings(bytes32,uint256,bool)", "e8dca673": "throwsWhenSaleIsNotTokenController()", +"e8dccd06": "finishUpgrade(address)", "e8dcd15f": "NeuralProtocol()", +"e8dcd7b1": "PurchaseOrderByID(string)", +"e8dcdc07": "_upgradeRelayHub(address)", +"e8dd05f2": "getNextSmartWallet(address)", +"e8dd29ad": "withdrawStakeEarning(address,uint256,uint256)", +"e8dd63cb": "totalTokensKnown(address)", "e8ddb731": "myshowindex(address)", +"e8dddc12": "getDirectChilds(address)", +"e8dde232": "testBool(bool)", "e8ddf15a": "withdrawEthBalance()", "e8de636c": "add(bytes20,address)", +"e8de704d": "updateAssetFee()", +"e8def032": "setIADDAddress(address,address)", +"e8defba9": "log(bool,uint256,bool)", "e8df0ca1": "checkRefundPollDate()", "e8dfa50d": "addPigment(address,uint256,uint256,uint256,uint256)", +"e8dff779": "changeDevFeeReciever(address)", "e8e03280": "window0EndTime()", "e8e09563": "PresaleToken(address,address)", +"e8e09b8b": "issueSynthsOnBehalf(address,uint256)", +"e8e0d19a": "setMinHolders(uint256)", "e8e0d5bf": "getConversionInfo(string)", +"e8e11409": "ownedContracts(address)", +"e8e18891": "yALPHAReward(uint256)", +"e8e201c2": "findByOwnerAddress(address)", +"e8e23ac0": "certifiedExplicitly(address)", +"e8e2c803": "getPancakeswapPrice()", +"e8e30d07": "modProxy(uint256,uint256)", +"e8e325eb": "setAllAddresses(address,address,address,address,address,address,address,address,address)", +"e8e33700": "addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)", "e8e44248": "transferMiner(address,uint256)", +"e8e49a71": "EmitOne()", +"e8e4b092": "isRecomended(address)", +"e8e5339a": "updateTopic(uint256,string,string)", +"e8e57118": "xToken(uint256)", "e8e5882e": "SmartpoolVersion(address[3])", +"e8e7264d": "IsReward()", "e8e72f75": "ownerSetPriceOracle(uint256,address)", "e8e7426e": "Presale(address)", "e8e7c73d": "useMonthlyAccess()", +"e8e7f800": "getWithdrawAddress()", "e8e81fe4": "setTelegram(string)", +"e8e877c0": "updatePlayTokenContract(address)", +"e8e88f00": "executeEpoch()", +"e8e9a7df": "TokenReserved(address,uint256,uint256,address)", "e8e9eeae": "getPremiumCentsPricePer30Days()", "e8ea0675": "redeemedEscrow(bytes32)", +"e8ea52e1": "numberSongCandidates()", +"e8eafa94": "getProfitDta(uint256,uint256)", "e8eb2284": "amountOf(uint256)", +"e8eba1ef": "uintMaxA()", "e8ebf3c5": "iii()", +"e8ec7ddd": "setNewBornBreedingCoolDown(uint256)", +"e8ecb130": "existOrder(address,address,address,address,bytes)", "e8ecea05": "getSpecialNum()", "e8ed024e": "LoopringToken(address)", "e8ed1cdd": "getAccountQuantity()", +"e8ed269e": "takeProfitsWithCHI()", +"e8ed4568": "lasttimestaked(address)", +"e8ed9214": "extendCNEPOff(address,uint256,uint256)", +"e8eda9df": "deposit(address,uint256,address,uint16)", "e8edb2ff": "geneticallyEngineer(string)", "e8edc816": "spender()", "e8ee8b44": "MIS()", "e8ee8c75": "deleteCandidateBySnapshotBlock(address,uint256)", +"e8eeb3f8": "cobbDouglasAlphaDenominator()", "e8eecf4c": "maxTxValue()", "e8eed374": "hashTerms(string,string)", "e8ef51db": "getCCH_edit_15()", +"e8ef9f22": "setAdminAccount(address)", "e8efc1a0": "updatedValue(bytes32)", "e8efe846": "blocksOwners(uint256)", +"e8f00331": "totalPoolLiquidity()", "e8f00990": "calcPlayerDivs(uint256)", "e8f04e84": "disableLotteryGiveHunt()", +"e8f099f4": "committedSupply()", "e8f09e24": "getDisableBet(uint256)", +"e8f15864": "propose(address,address)", "e8f1736c": "TakeMoney()", "e8f1bd8c": "getNeighbourhoodOf(uint256)", "e8f1dc9a": "_unpackMakeData(uint256)", +"e8f1ef54": "withdrawPrincipleAndForfeitInterest()", "e8f35f2c": "updateUSeqvol()", "e8f38323": "getJobHunterWithdrawalAmount()", +"e8f3b0c0": "getOverallBorrowRateInternal(uint256,uint256,uint256,uint256)", "e8f3cd59": "getFunderContributionClaimed(address)", +"e8f45561": "getJurorShare(address,uint256)", +"e8f4880d": "getAccountVersions(address[])", "e8f4bc12": "InitUpgradeCard()", "e8f54364": "JJ(uint256,string,string)", +"e8f5c522": "TokensPerEtherUpdated(address,uint256,uint256)", "e8f5cf36": "changeWCT2Controller(address)", +"e8f5fb1c": "minDays()", "e8f62764": "feesController()", +"e8f627c3": "testFail_rejecting_authority_1()", "e8f62f46": "someMethod2(uint256,uint256,uint256)", "e8f64680": "purchaseFor(address,bytes32,uint256)", +"e8f67c3b": "transferGasLimit()", +"e8f6aa6f": "depositETH(address,uint256,address,uint256)", "e8f6bc2e": "changeAccountLevelsAddr(address)", +"e8f6fd7f": "setHarvestFeeRate(uint256)", "e8f72850": "interactWithXYZ()", +"e8f79006": "buyToken(address[],uint256,uint256)", +"e8f823b6": "get_totalusers(uint256)", "e8f88890": "dev_inStream()", +"e8f88eaa": "InterfaceId_IBasicMultiToken()", "e8f8a1d2": "buyBuyerTokens()", "e8f95666": "transferPreSigned(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e8f98f88": "getAddressByString(string)", +"e8fa0efd": "TVL(uint256)", "e8fa1d51": "handleCloseChannel(address,bytes32,uint256,address,uint256,address,uint256)", +"e8fa46b6": "drawed(uint256)", +"e8fa55a3": "referral_percentage()", "e8fac4cd": "transfer(address,address,address,address[],uint256,uint256)", "e8faf89c": "ETHER_MAX_CONTRIB_USA()", "e8fb02d2": "sellFeeMilliPercent()", +"e8fb478f": "edgexPriceSource()", +"e8fb7530": "initialSupply(address,uint256)", +"e8fbb43e": "claimInterests(bool,bytes32)", "e8fbc67d": "MultisigWallet(address[],uint256,uint256)", +"e8fbd6de": "contestContractAddress()", "e8fc0780": "_malloc(uint256)", "e8fc451a": "init(uint256,uint256,address,uint256,uint256,uint256,uint256)", "e8fc9273": "verify(address,string)", "e8fc9c10": "UnicornContract(address,address,address)", "e8fcda45": "_set8()", +"e8fcf723": "commitments(address)", +"e8fd2506": "unsetAppFees(bytes32[])", +"e8fdca16": "Pancake_Router_Address()", "e8fe6b66": "getCode(bytes32)", "e8fe9473": "test_threeInvalidEqUint(int256)", +"e8ff0b1d": "getAddressSlot(bytes32)", "e8ff269e": "setMaxAvatarNumber(uint8)", "e900604d": "claimTokenOwnership(address)", "e9007d4e": "settleGame(uint256,uint256,string,uint256)", +"e900a491": "adminOperator()", +"e900c270": "setSkiplist(address[])", +"e900e3eb": "decreaseCurrentAndNextBalance(uint256,uint256)", +"e900ead8": "commit(bytes32,uint256)", +"e9011c0e": "adjustMinRM(uint16)", "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)", +"e9049abd": "cast(address[],bytes[])", +"e9053c71": "oBTC()", +"e9057678": "tokenWithdraws(address)", +"e9058a0e": "tokenSalePartnerships(uint256)", +"e9060864": "AccountIsFrozenByDate(address)", "e906c804": "_distributeBridgeFee(uint256,bool,bool)", "e906e664": "getx2Policy(address,uint256,uint256,uint256)", "e90799d2": "unlock4Circulate(uint256)", +"e907f003": "computeRewardBalanceOfDelegator(bytes32,address)", +"e9081ec7": "getDepositedAmount(address)", +"e9082b82": "mintSetPrice(uint256)", "e9083a41": "drainMe()", "e9084739": "economyBoost(uint16,uint16)", +"e90847f4": "setMessage()", "e9085957": "RANGESTART_1()", "e9087eb7": "canMove(address)", "e908a6d6": "Initialize_PlayUnit(uint256,uint256,uint256)", "e9092bca": "weeOneEthCanBuy()", "e90956cf": "setCurator(address)", +"e9095e5c": "UpgradeOthersToLevel3FromDev(address[])", "e909ebfa": "addDelegate(address,address)", "e909f2cc": "updateCancelDistFlag()", +"e90a182f": "sweepToken(address,uint256)", +"e90a1b6e": "canMakePayment(address,uint256)", "e90a3cf2": "addressCashwolf()", "e90ab7fe": "lunetReserve()", +"e90abb86": "setAccountNonce(address,uint256)", "e90acd53": "bidder(bytes32)", +"e90b2454": "maxSupplyContractionPercent()", "e90bcb32": "senderToProxy(address)", +"e90beb2f": "updateSwitchExecutor(address)", "e90cb9b9": "setBurnAddress(address,address)", "e90d2120": "etcWallet()", +"e90d4c06": "commitments(uint256,address)", +"e90d5cfb": "_setTimelockExpirationPrivate(bytes4,uint256)", "e90dae86": "TokenAUC(uint256,string,uint8,string)", +"e90dbd8c": "getLastClaimTimestamp(address)", "e90dd9e2": "tokenState()", "e90e5453": "rand(uint256,uint256,uint256)", +"e90eaa51": "mm()", "e90ecfce": "EvoToken(address)", +"e90f0d04": "addLiquidityUSDC()", +"e90f13e7": "callGasLimit()", +"e90f6589": "setValidPool(address,bool)", "e90f84bd": "getETHFromTokens(uint256)", +"e90f93e8": "addLiquidityToBakerySwapHDxWBNBPair()", +"e9102fb1": "sliceOverflowStart0Throw()", "e9105cf1": "unblockTokens()", "e9108538": "mintSilcToken(address,uint256)", +"e9108d84": "LiquidationCall(address,uint256)", +"e910947d": "TierScheduled(uint256,uint256)", +"e910afb2": "ERR_RETURN_INDEX_VALUE()", +"e910ce1c": "dividendsOf(address,uint8)", +"e910d361": "share_address()", +"e911439c": "PROOF_LENGTH()", +"e911a1c9": "minimumBonusThreshold()", "e91208ad": "galleryFour()", "e9121758": "token_holders_array(uint256)", "e9121b12": "transferAndApply(address,uint256)", "e9126154": "returnLoan(uint256)", +"e912832d": "bookId()", "e912ae4f": "getLastPaidTransaction()", "e9130d4a": "test_twoInvalidEqBytes()", +"e9131b82": "TOKEN_PROXY()", "e9140274": "stakeTAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,address)", +"e9144e73": "collateralOracle(address)", "e914575b": "endPublicIcoForTesing()", "e9149e34": "investedWei()", +"e914a146": "multisendBep(address[])", +"e914d494": "removeWrapper(address)", "e914d828": "TimeMoneyToken()", +"e9150741": "addInvestor(address,uint8)", "e9156cfe": "getMutation(uint32)", +"e915ad3c": "approve_649(address,uint256)", +"e9164867": "setRedistributionPaused(bool)", +"e91671da": "timeWithdrawstock()", +"e9167ab7": "set_pause()", +"e916b10f": "setjigoutuihuanbili(uint256)", +"e916b88b": "performanceStrategistMax()", "e916d0f0": "doBalance(address)", "e916d29e": "matchBytes32Prefix(bytes32,bytes)", "e91710aa": "DogCoinCrowdsale(uint256,uint256,uint256,uint256,address)", @@ -133579,12 +244450,20 @@ "e9187ef4": "refundAction(bytes32,uint256)", "e9198076": "fillBuyOrderPartially(uint256,uint256,uint256)", "e919ca10": "getMyDiscount()", +"e919d567": "UpdateMatch(address,uint8,uint8,uint8)", +"e919fd7f": "findArgsByIndex1(uint256)", "e91a08a2": "grantedParsecCredits()", +"e91a4485": "curvesPool()", +"e91a5842": "applyLiquidationDiscount(uint256)", +"e91a604e": "viewEnvelopeId(uint256)", "e91a68bf": "getAllRightLeg()", +"e91ac393": "isWalletFromUser(uint256,string)", "e91b3ac5": "getMutalbeInfo()", "e91b6987": "addNewObj(address,uint32)", "e91bb26e": "redeemEgg(address)", +"e91bf08f": "setCoefficient(uint256,uint256)", "e91c3a3e": "getStatusInfo()", +"e91c943c": "isTokenAddressRewarded(address)", "e91cc17c": "withdrawFunder(address)", "e91ccdc0": "allFundingProcessed()", "e91cd09d": "thisbalanceETH()", @@ -133594,23 +244473,46 @@ "e91df8da": "AuctionSoldOut(uint256)", "e91e10af": "allocationFinished()", "e91e13a9": "CHUNK_SIZE()", +"e91e6918": "synthExchangeSuspension(bytes32)", +"e91e722a": "getContBalance()", +"e91e7fc5": "getLockedTokenCount(address)", +"e91ed7c9": "viewLPTokenAmount(address)", "e91f9d96": "getNftsByOwner(address)", +"e91fa83b": "pendingCoins(uint256,address)", "e91ff7ca": "STORAGE_WALLET()", +"e920e6d8": "allowToStart()", +"e921237a": "submitEntropy(bytes32,uint256,uint256,address,uint256,uint256[2])", +"e921459f": "permis3()", "e921528e": "evTransfer(address,uint256,address,address,uint256)", +"e9219212": "pairBallots(address)", "e921b4f8": "buyByAddress(address)", +"e921d63b": "updateAndPush()", "e922248e": "MinterFunc(address,uint256)", "e92254ba": "finaliseFunding()", +"e9227faa": "_internalLiquidation(address,bytes32,uint256)", "e922ee6f": "removeParent(address)", "e9233a65": "getNameIds(uint256,uint256)", "e92340b5": "ICO_BONUS_TIME_2()", +"e9235f65": "lockLiquidityETH()", +"e9237e19": "setMar(bytes32,address)", +"e9238cc4": "getAddressByNumber(uint256)", +"e923b3f0": "setAllocatorContract(address)", "e923c3d6": "_setUint(bytes4,uint256)", "e923e707": "hardCapWei()", +"e9240c2d": "sushiswapRouter()", +"e92476a6": "tradePositionWith0x(bytes32,bytes,bytes)", +"e924de59": "calculateEurUlpsAmount(uint256,uint256)", +"e924f5a9": "mcdVat()", "e9253156": "force_deduct_fees()", "e92565be": "settrans(bool)", +"e9260898": "getTotalStakingAmount(address)", "e9262dae": "changeMinApproval(uint8)", "e9263f9d": "ifcoinToken()", "e9266fca": "collectRobot(uint256,uint256,uint256,uint256,uint256)", +"e926d298": "Vote(uint256,address,uint256[])", "e92704e8": "setGason(uint32,bool)", +"e9275796": "farmRateDraw()", +"e9275fee": "getActualBuyLimit()", "e927a8c0": "changeContracts(address,address,address)", "e927ca04": "addVesting(address,address,address,string,uint256)", "e927da3f": "buyPackWithKitty(uint256)", @@ -133619,240 +244521,425 @@ "e927fc5c": "creatorAddress()", "e9288d72": "pushToBank(address)", "e928ad47": "createEthBidAuction(uint256,uint256,uint16)", +"e928ce72": "lockedRewards()", +"e928e93e": "approve_150(address,uint256)", "e9298b97": "changePermissions(address,uint8)", +"e92a217e": "removeItemBoucle(uint256)", +"e92a494a": "GovernorMint(address,uint256,uint256)", "e92a5d74": "createTimeDecayingToken(uint256,uint256,uint256,uint256,uint256,string,uint8,string,uint8)", +"e92b34af": "famedStars(uint256)", "e92b6818": "CONTRIB_PERIOD1_STAKE()", "e92b7f4b": "AddVoters(string)", +"e92b9046": "multisend(address[36],uint256)", "e92ba335": "airdropCountLimit1()", "e92bb686": "_CallAborted(address,bytes32,bytes18)", "e92bf2a8": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address,address)", "e92c02cf": "startOpenWindow(uint256,uint256)", +"e92c58a2": "getBoardsByIds(uint256[])", +"e92c965a": "isAllowedContractHost(address)", "e92d5178": "bankerBeginTime()", +"e92da7a4": "viewChicago()", "e92dfb23": "LimitBalance(uint256)", +"e92e2c1b": "smgFeeReceiverTimeout()", +"e92e2f92": "kdai()", "e92e4505": "test_9b_testGoodTransfer_thenInvalid()", "e92e4d63": "setReservingStep(uint256)", "e92e5c34": "getVoterCount(uint256)", "e92e5f03": "PRESALE_TOKEN_SUPPLY_LIMIT()", +"e92e85d9": "get_owner_addr()", +"e92f0935": "getAirdrops(address)", "e92f2904": "Compra()", +"e92f4bf7": "isFactoryTGenerated(address)", "e92f7447": "isDayThird()", "e92f8cfc": "MIN_BUYBACK_VALUE()", "e92f9c1d": "getWarriorsFromIndex(uint256,uint256)", "e92fdeaa": "ethRec(uint256,uint256,uint256)", +"e9300c6c": "createProduct(string,uint256)", +"e9307358": "escrowedTaskBalances(uint256)", +"e930d269": "overCollRemoveRatio()", "e930f06f": "setToSaleWallet(address)", "e930f3a6": "ethContractBalance()", "e93119d9": "balanceOf(address,address,uint256)", +"e931873f": "pushEmpty(uint256)", "e931f1ba": "secondRoundMayEnd()", "e931fa0c": "setMonsterGene(uint64,uint256)", "e93239d3": "outputWalletAddress()", +"e932406f": "MOD_ROLE()", "e9324444": "preSaleState()", "e93314ab": "getS()", "e9333fab": "set_admin(address)", +"e933708b": "create(address,uint256,uint256,uint256,uint64,uint64,bytes)", +"e93375f2": "depriveToken(address,address,uint256)", "e9339de5": "Moneda(address,address,address)", +"e933a6b7": "TOKEN_INITIALSUPPLY()", "e933cfb0": "mintCard(uint256,address)", "e933e6eb": "checkPriceCrowdsale(uint256,uint256)", "e9347e31": "_sellKeys(uint256,uint256,bytes32)", "e9348532": "kncRateBlocksTrade()", "e934ab0c": "ActualCommitteeRoom()", +"e934ceb5": "RAMBAPerBlock()", "e9353cb7": "createProductionUnit3Beta()", "e9358b01": "newENS(address)", +"e935b7b1": "nextProjectId()", "e9360096": "cancelCompetition(uint256)", "e9361d34": "ethartRevenueReward()", "e93680d5": "_my_transfer(address,address,uint8)", "e936e878": "disburser()", "e9377aca": "mtEndTime()", +"e937a301": "hello3(uint256)", "e937f689": "_getElement(string,uint256)", +"e9382115": "changeFPTBLockedPeriod(uint256)", +"e93841d0": "n_gauges()", "e938f121": "testFunction(address,uint256,bytes)", +"e9390f9b": "winner(address,uint256)", "e9391db9": "getBenificiary()", "e9395679": "uintToString(uint256)", +"e9398715": "ERC20Address(uint256)", +"e939cbb2": "manualCheckIn()", "e93a1906": "buyFeeMilliPercent()", "e93ab977": "bids_ignored_refunded()", +"e93b6372": "BADRrtSaleBADR(uint256,uint256,uint256,uint256,uint256)", "e93b9c89": "stepVestingPercent()", "e93ba042": "distributePrices(uint256)", "e93ba06f": "getWhitelistAt(uint256)", "e93c5973": "UpdateRequiredSignatures(uint256)", "e93c980d": "tokenUnit()", "e93d3e5f": "setNextRoundFee(uint256)", +"e93df1b7": "addOG2(uint256)", +"e93e1a7d": "issue(bytes32,bytes)", "e93e25fe": "zilleriumToken()", "e93e40db": "offerCollectibleForSale(uint256,uint256,uint256)", +"e93e6775": "boolAlertStatus()", "e93e7b26": "Stage3Deadline()", "e93f29bd": "_setPartitionControllers(bytes32,address[])", "e93f3f8d": "setBuyPrice(uint256,uint256)", +"e93f5665": "PERFORMANCE_FEE()", "e93f57b9": "capAmount()", +"e93f710b": "setAcoPoolMaximumOpenAco(uint256)", +"e9403256": "totalDeposits(address)", +"e9404187": "sealUnlock()", "e9408491": "setInitialBal(uint256)", "e94087d6": "joinAsBroker()", +"e9408a8b": "sub(uint112,uint112)", +"e940dd7a": "balanceOfAssets(string)", +"e9413d38": "getBlockhash(uint256)", "e941fa78": "withdrawFee()", "e94200f1": "burnAllOwnerTokens()", +"e9422046": "setMinimumStakeTime(uint256)", "e94233f6": "oraclizeGasCost()", +"e942353e": "pendingOrca(uint256,address)", +"e9425dd2": "mintHero(address,uint256)", "e942b516": "set(string,string)", +"e942bdd2": "minters(uint256,address)", "e942c564": "getWei(uint256)", "e9433ab6": "endDonations()", +"e9437537": "_numNiftyMinted(uint256)", +"e9438d59": "yfBeta()", "e943cc01": "powerDayEndTime()", "e944267c": "FourArt()", "e9445d5a": "createAudit(uint256,uint256,uint256)", "e94479a9": "MinterRemoved(address)", "e944a6d7": "claimSpecialResource(uint256)", +"e944a7cd": "SetApp(bytes32,bytes32,bytes32,address)", "e944f52d": "addressToBytes(address,address,address)", "e94559b1": "ETToken()", +"e945605d": "setGovenors1_open(bool)", +"e9458ba3": "VersionRemoved(address,uint256)", +"e945a4d2": "changeGetAbonusTimeLimit(uint256)", "e945c391": "setEndTime(uint64)", +"e945dbf3": "sbdoToLp0Route(uint256)", "e945e26c": "CCH_OLI_1()", "e946115b": "flushVault(uint256,address)", +"e94662bb": "lockedSyntheticAmount()", "e946ad4a": "getUpgradesOwned(address,uint256)", +"e946bee9": "fileFromChunk(string,bytes32,uint256)", +"e946ca73": "ServiceFeeAddress()", +"e9476f5f": "update(string,string,string,uint64)", "e947962b": "pushRefIncome(address)", +"e947d7d5": "getUserAddressUsingId(uint256)", "e9482aa6": "UsingANormalStruct()", +"e9483ac0": "rewardDistributed()", "e9485982": "canBePurchasedByETH(uint16)", "e949fba1": "_getPurchaseToken(address,uint256)", +"e94a0102": "authorizationState(address,bytes32)", "e94a4db1": "isSuitableGen(uint256,uint256)", +"e94aa016": "getBuyersQualityRequirement()", "e94acf0e": "TinyRouter(address)", +"e94ad65b": "depositContract()", "e94aea8a": "lastStealBlockNumber()", +"e94af53a": "registeredMarriages(uint256)", "e94b6aef": "getLayEggInfo(uint32)", +"e94bb54b": "signDC(uint256,string)", "e94bc926": "cancelVoteForCandidate(address,address,uint256)", +"e94c16de": "inviteDown(address)", +"e94c369f": "changeMaxVMRPerUser(uint256,address[])", +"e94c3dfa": "SwapBancor(address,address,address,uint256)", +"e94c4e96": "whitelistCapsRound1(address)", "e94c8dc0": "NXX()", "e94d7af6": "getCountAllBuildings(uint256,bool)", +"e94dbf89": "holdingsLength(uint256)", "e94dc568": "freeBalancesOf(address)", +"e94e14a5": "getRoomList(uint256,uint256)", "e94e4bf1": "maxDailyCap()", +"e94e53ca": "EMaxEthLp()", "e94e80fa": "playerIndexToApproved(uint256)", "e94e83d8": "Answer(string)", "e94f1dc6": "setWhitelistInternal(address,address,uint256)", +"e94fba76": "approve_210(address,uint256)", +"e94fd945": "setOldTamagContract(address)", "e95015b9": "spawnMonster(uint256,address)", +"e9501955": "calcVotingResult(uint256)", +"e9503425": "claimableReward(address)", +"e9506acc": "staticPool()", "e9506c73": "_investAsBonusProgram(address,uint256)", +"e950c085": "modifyTimelockInterval(bytes4,uint256)", +"e950f518": "yYFLStaked(address)", "e9512fa4": "setVotingQuestions(string,string,string)", +"e9514afa": "removeTrustee(address,bytes32)", +"e95164f5": "withdrawERC(address)", "e9519a6b": "FirexToken()", "e951c35b": "NewAppleToken()", +"e952080d": "buyPack1()", "e9523c97": "getAllAdmins()", +"e95296cd": "viewRandomInit(uint128)", "e952f74f": "airdropCount()", +"e953e7f7": "user_zilddeposit_amount(address)", "e9540395": "getRewardDivisor()", +"e9543fa2": "showuint160(address)", "e9546d08": "increaseK()", "e95502fb": "lockedShares()", +"e9554062": "burnSoul()", +"e95552e9": "maxroll()", "e9556430": "SECONDS_PER_MINUTE()", +"e955746a": "Triger_Deposit_For_Tail(address,address,uint256,uint256)", "e9559803": "getShipById(uint256)", +"e955c9ec": "nonInitializable(uint256)", "e955ee03": "revertNoncsallocation(address)", "e9560b3b": "getParticipantBalance(address)", "e95626c5": "Lizun()", +"e9563dee": "isValidAffinity(uint256)", +"e95690aa": "transferMadicineWtoD(address,address,address)", "e95715cb": "jackpotSend()", "e9577a11": "getHistBtcRate(uint256)", +"e957f00a": "removeElementOfArrayType(uint8,uint64,uint8)", "e95823ad": "safe(bytes32)", +"e9587e86": "getUserLimit(address)", "e958d15f": "partnerMessagesCount(address,address)", "e958d1ae": "TreeContract()", "e9592a9f": "AuctionStarted(uint64,uint64,address)", +"e9594508": "outboundWhitelistsEnabled(uint8,uint8)", "e9596db3": "betInfo(bytes32)", +"e959b38a": "addRole(bytes32,address)", +"e95a4ce6": "oldVersionAddress()", "e95a644f": "checkIn(uint256)", +"e95a6623": "potatoes(uint256)", "e95ac9f7": "LBToken(address,uint256)", "e95af01b": "identify(address,address)", +"e95b0fb4": "EMACTokenPurchase(address,address,uint256,uint256)", "e95b2bb8": "Ethraffle_v2b()", "e95b4aa8": "nameOf(address,address)", +"e95bbc23": "InitialAllotmentRecorded(string,uint256)", "e95bcfb1": "UVDICO()", "e95bd5f2": "testToData(bytes)", "e95bee59": "checkFormat(string)", "e95d0a59": "MarbleEarth(address,address)", +"e95d6182": "getEndpointParams(address,bytes32)", "e95d716c": "FEE_SELECT_MARGIN_SPLIT()", "e95d74e0": "set_coin_minimum_trade(string,uint256)", "e95db6f9": "buyKey()", +"e95db8db": "presaleCapInBUSD()", +"e95dc8e5": "SentBack(address,uint256)", +"e95e21bc": "xor(bool,bool)", +"e95ef5ea": "out(address,address)", +"e95efda0": "userStakesTimeframe(address)", +"e95eff56": "redeemUSDCBondgetReward(uint256,uint256)", "e95f206e": "MIN_WEI_AMOUNT()", "e95f2c7d": "getMaxLoanAmount(uint256)", +"e95f2f6e": "publishMessages(uint256[],uint256[],address[],uint256[],address[],bytes32[],bytes32[],uint8[])", "e95f6414": "dayPotExpiration()", "e95f72e3": "ROD()", +"e95f92ab": "setForbiddenAcoCreator(address,bool)", "e95fa798": "SellerCancelDisabled(bytes32)", +"e95fdd1d": "newAction(uint256,bytes,address)", "e9600f12": "release(bytes16,address,address,uint256,uint16)", "e960127e": "set2RoundTime(uint256)", +"e960662b": "startBurn()", +"e9608b10": "joinPreSale(uint256)", "e960b940": "DoubleSixToken()", "e960bb48": "balanceOfLocked(address)", "e9616fb0": "changeFreezingAgent(address,bool)", +"e9620fa8": "updateBudThc(address,uint256,uint32)", +"e9626616": "collectedToken()", "e962867d": "BillionsToken()", "e9629d7f": "phase1Cap()", +"e9630183": "xDaiContract()", "e96309e7": "gatherOldBalanceOf(address)", "e9639c80": "releaseTheOriginal(uint256)", "e963f3e8": "MAX_BUYIN_GAS_PRICE()", +"e964b644": "rewardBalanceOf(address)", +"e964c96a": "createSharesFor(address)", "e9653482": "hasValidProfile(address)", +"e9656954": "getLiquidateAmount(uint256,uint256)", +"e966403a": "housesCancelHouseSale(uint256,uint256)", "e966668c": "advisorset()", "e9668128": "isTransactionsAllowed()", "e9677b6b": "safeExecuteOrder(address,uint256,uint256,bytes,int256)", "e967a9b7": "dataSourceCallbackExtras(uint256,uint16)", "e967bb18": "refundAllMoney()", "e967e60c": "placeBid(string)", +"e967eb1a": "nxmToken()", +"e9689675": "Link(bytes32,address)", "e968ab95": "enableTokenTransferability()", "e968d087": "shrink128(uint256)", "e968e1ec": "setPLATPrice(uint256)", +"e968f3ee": "maxIndex(address)", +"e969285c": "addFeedETH(address,address)", "e9698f62": "setBurnAmountApproval(address,address,uint256)", "e969c871": "swapTokens(address[],uint256[])", +"e96a1435": "get_D()", "e96a6b38": "getSignerFlagFor(address)", "e96b462a": "isOwner(address,bytes32)", "e96b5e13": "SERENITY()", "e96b8aa6": "bitwordsWithdrawalAddress()", +"e96b95a6": "_FPTBColPool()", "e96bf86d": "lastHour()", +"e96c3ccf": "MineChipped(address,uint256,uint256)", "e96cd01c": "SoraToken()", "e96d01d4": "setPlayerOverrideId(uint256,uint256)", +"e96d13bc": "RentPaid(bytes32,string,uint256,uint256)", "e96d36ac": "communityAllocating()", +"e96d6a63": "setMinBurnTime(uint256)", "e96d6e4f": "publicKeys()", "e96da99e": "reply(bytes32,uint256)", +"e96db43e": "getLocators(address,address,address,uint256)", +"e96dbb68": "dailyNumberStart()", +"e96dbd57": "checkIsAddressCoreDev(address)", +"e96defdd": "insert(bytes32,uint128,uint16,uint16,uint16,bool,bytes32,uint256,address,uint16,uint16,uint16)", "e96e5950": "getEventHash()", +"e96e6d5a": "isVoteAmountValid(uint256)", +"e96ea84c": "lockAdjuster()", +"e96fe9a7": "addDealD(address,bytes32,string,uint256,string,uint256)", "e96fefec": "resetTransferToValues()", "e9703701": "byteToUint(bytes1)", +"e97066be": "CardNameByTokenId(uint256)", "e970754b": "getTxs(uint256,uint256)", +"e970a518": "addSettings(address,address,address)", +"e970dedb": "NickSet(string,address)", "e970e86d": "testBlockNumber()", "e9715de9": "referralBonusPercent()", "e97193a6": "removeAuthor(address)", "e971c252": "issue(address[],uint256[])", +"e97206a9": "range()", "e972261d": "calculateProfit(uint256,uint256)", +"e9728281": "submitProposal(uint256,uint256)", +"e972fc62": "pendingDcash(uint256,address)", "e9733b27": "checkStakeBalance()", "e9734172": "createWagerAndDeposit(bytes32)", "e9739db7": "getTokenRate(uint256)", +"e9739e00": "MIN_ROI_WITH()", +"e9739e01": "GetCampaignContributionAmount(uint24,uint24)", "e973b7ba": "node_height(uint256)", "e973f2c4": "reinvest_color(uint256,uint256,uint256)", +"e973fc7e": "CertificateId()", "e9742d23": "createGun(uint256)", "e9748e58": "renewalsCreditAffiliatesFor()", "e974c000": "checkIsOnlyOwner(bytes32)", +"e9751f6b": "keepCRVMax()", +"e9754908": "createVesting(address,uint256,uint256)", +"e975e6c1": "earlyadopters(address)", +"e97678d9": "balanceComisionHold()", +"e97750ed": "DEPOSIT_COUNT_LIMIT()", "e97758a2": "thirdRewardPeriodEndBlock()", "e977992d": "Doubler()", "e9779b76": "depositOldTokens(address,uint256)", "e977a11c": "wavesAssetId()", "e977fa76": "_forceTransfer(address,address,uint256)", +"e9787b56": "batchRemoveInvestorsFromAllowlist(address[])", +"e97919e0": "ClaimLiquidity2()", "e9794dc1": "CreateHash(uint8,string)", +"e979796c": "ticketeerAddress(uint256)", "e9799993": "Wafflecoin()", "e979af97": "pushArray(bytes32,string)", "e979bac1": "getCustomerBankRating(string)", +"e979dd0d": "sellForETH(address,address)", "e979fed6": "ownerstake()", +"e97a0e9b": "_stakedSoldier(address)", "e97a4779": "evaluateProposalPreCondition(uint256)", +"e97af53d": "writeMessage(bytes32)", "e97b2190": "add_wall(uint16)", +"e97b63fe": "createTokenBallot(address,uint256,uint256,bool,string,string)", "e97b7689": "getTotalBuyers()", "e97b97fe": "neumark()", +"e97c8fad": "approve_73(address,uint256)", "e97cf883": "calculate(uint256,uint256,uint256)", "e97cfab4": "withdrawDivs(uint256)", +"e97d537e": "setRewardStakingPool(address,address)", +"e97d8068": "cutRedOrBlueWire()", "e97d87d5": "releaseStartTime()", +"e97d8ea1": "stepAddress()", +"e97d9426": "addWhitelistedList(string[])", "e97db66e": "setJackpot()", "e97dcb62": "enter()", "e97e490c": "canuse(address)", "e97e6dca": "applyPresale()", +"e97ebd3f": "maxBznTankSizeOfMidGradeCarWithIndex(uint256)", "e97ed99c": "TurtleFarmer()", "e97f6313": "token_airdrop_amount_each()", +"e97fddc2": "unstakeClaimTokens_new(uint256)", "e97fe114": "tradeModifiers(address,address)", +"e97fe540": "TransferAll(address,address,uint256)", +"e97fe63a": "getReserveFund()", +"e98009ce": "NDR()", +"e9804c2b": "assetInformation(address)", "e98096fc": "numberOfNames()", "e980c2e0": "littafiContentCommit(bytes32,string,string,string,string,bool)", +"e980e1eb": "deposit(uint256,uint256,uint256,bool)", "e9813f9c": "_distinctOwners(address,address)", "e981c803": "rejectPauseChange(bool)", +"e9820579": "setIncubateDurationInSecs(uint256)", +"e98241f0": "releasableRewardAmount(address)", +"e9827b45": "petsClaimedDiamond(uint64)", "e982d5a9": "transferOwnership1(address)", +"e9833c2f": "currentPrice(address)", "e9835ee1": "LogAgreementAmended(address,string)", +"e983cdb5": "testStrLenRunesEvenMoster()", "e9841bd8": "certifyTradeAsCounterparty(bytes32,address)", +"e9841cb4": "currentFarmingPool()", +"e9843b50": "defineRatesExternal(uint256[])", "e98444e8": "BIMI_DAO_31_a()", +"e984cb0b": "lockedAccount2WithdrawTap(address)", "e984d794": "setRarity(uint256,uint256)", "e984dd74": "ZenixSupply()", +"e98525a3": "depositLocker(address,address,address,address,uint256[],uint256,string,bool)", +"e9857da1": "getRandomTrustee()", +"e9859e66": "depositStorage(uint256)", "e985e367": "saleToken()", "e985e9c5": "isApprovedForAll(address,address)", "e9867fe7": "_splitElement(uint256)", +"e9869d7a": "addPlayer_SideA(address,uint256)", +"e986eecd": "create_new_account(address,address,address,uint256)", "e9874106": "pricePerTicket()", "e98799e0": "Mejasa()", "e987cc45": "getfrom(address)", +"e9881a5e": "getInvitees(address)", "e9884b44": "depositClient()", "e9886064": "_sendPrimordialTokenAndRewardDev(uint256,address)", "e988998a": "refreeze()", +"e988c4e1": "stakeHoldersfee()", "e9892821": "isSpendableFrozenCell(address,uint256)", "e9893c67": "awardAmount()", +"e98a0c64": "setAllowGroupTransfer(uint256,uint256,uint256)", "e98a0de7": "setGitHub(string)", "e98a1439": "priceOfMultiple(uint256[])", +"e98a182f": "request(bytes16,uint256,string,string,string,uint256,uint256)", +"e98a5654": "callback(bytes)", "e98ae339": "cancelMarginCall(bytes32)", "e98b1679": "set_pre_kyc_bonus_denominator(address,uint256)", +"e98b6662": "testTwice()", "e98b7f4d": "getKitty(uint256)", "e98bf38e": "test_insert_zeroKey()", "e98c365b": "totalMigratedOut()", +"e98c59cd": "getNumTicketsPurchased(uint256,address)", "e98c7608": "mod9710(bytes)", "e98cab50": "burnIndexed(uint256)", "e98cf987": "turnOnSale()", @@ -133860,14 +244947,27 @@ "e98dcba2": "approveExchange(address,address,uint256)", "e98df8bf": "registerMeeting(address,uint256)", "e98e130c": "GetCandidatePrincipal(uint8)", +"e98e4e02": "getAvailableBPoll()", +"e98e5a49": "pendingMDN(uint256,address)", "e98e8a64": "getKeccak(bytes32)", +"e98eae77": "CharityAdded(address,string,string)", "e98ebdd5": "numResponses()", +"e98f0aab": "SYNBNB()", "e98f402c": "getClassCheckOwner(uint64,address)", "e98f5708": "Dgp(address)", +"e98f83d5": "getGifted(address)", +"e98fbbad": "getUserTotalSupply()", "e98fe5ce": "AgriChainType()", "e9900714": "sendIBTCToken(address,uint256)", +"e9904980": "twapOracle(uint256,uint256)", +"e9906a12": "approve_511(address,uint256)", +"e99150f0": "setRandomPlayerAddress(address)", "e991ae55": "valid_weights(int256[],uint256,uint256,uint256[])", +"e991fb27": "minWrapAmount()", "e9922f12": "getCoinInfoFromId(uint16)", +"e9923d3b": "balanceGive()", +"e992415c": "withdrawAmountBeb(uint256)", +"e9924e34": "feesToLike()", "e992a041": "_setPendingImplementation(address)", "e992ae5a": "INCXToken()", "e992d8d8": "KNC()", @@ -133878,36 +244978,63 @@ "e99392c0": "localsAvatar(bytes32,address,bytes32)", "e993a9c0": "change_flag_hash(bytes32)", "e993c056": "SaloniToken()", +"e993d175": "killEthOptionsDex()", +"e9946b20": "loans()", +"e9946f6c": "renounceGuardian()", "e9947583": "addAuditorToMultiRequestAssignment(uint256,address)", +"e994c15d": "totalCards()", +"e994d6c1": "percentsForUser(address)", "e995064e": "changeEmployee2(address)", "e995194f": "transfer(address,uint256,uint256,int256)", "e99543aa": "Trash(uint256)", "e9958314": "getRequest(uint32)", "e9959105": "setMintHelper(address,int256)", +"e99610b7": "addFeature(string)", "e99667ad": "OwnershipTransfer(string,address,address)", "e99671ad": "movePermission(address)", +"e996987d": "newWinner(address,uint256)", "e996ee88": "getItemStage(uint256,bytes32)", "e9970b6c": "isLessThan(uint256,uint256)", "e99718d8": "addressOf(address,bytes32)", +"e99762cc": "onSaleFlag()", +"e997fffd": "finishDeployment()", +"e9985198": "setWhitelistingAgent(address,bool)", "e9986f90": "activeStarGenome(address)", "e9989220": "viewShareholderListing(uint256)", "e998d2fa": "revokeVerification(address)", "e998db2a": "directMessage(uint8,string)", +"e99996b1": "setLiquidPledging(address)", +"e999a598": "buildVotingPrivateKey(uint256,uint256[2])", +"e999e2e7": "lastPlayerTime()", +"e99a1459": "setBeyondExchangeAddressInLoan(address)", "e99a7a72": "createCeleb(string,uint256,address,uint256[6],uint256[6])", "e99a7dca": "lastCampaignID()", +"e99b242d": "totalStakedDaily()", +"e99b4ce3": "addDoTxToPool(uint256,uint256,uint256,uint256)", +"e99b6b31": "test_constructor()", +"e99b9251": "getPwdrPool()", "e99b9ab7": "getProposalCreatedOn(address,uint256)", +"e99bc2d8": "totalFeesAvailable(bytes32)", +"e99c0fa6": "setMaximumManagerFeeNumeratorChange(uint256)", +"e99cd784": "NewCompany(bytes32,bytes32)", "e99d2866": "setSeller(address)", "e99d2db4": "universalToken()", "e99d7333": "BlitzCrypto()", "e99ebee2": "dist_multiple_airdrop(address[],uint256)", "e99ed199": "getAddressLiquidatePool()", +"e99f3b60": "mdoAddress()", +"e99f5b80": "lastSwapBlock(address)", +"e99fb634": "swapExactTokensForTokens(uint256,uint256,address[],uint256,address,uint256)", "e9a05055": "newMerchant(address,string)", +"e9a0af81": "adminSetSupportedToken(address)", +"e9a0ce42": "RoundCreated(uint16)", "e9a0dd77": "cancelBid(bytes32,int32,bool)", "e9a158a6": "currentETHPrice()", "e9a1e689": "PreICO(uint256,uint256,uint256,uint256,address,address)", "e9a241cc": "checkRoundsNumberToRun()", "e9a24e24": "userlength()", "e9a3773c": "setBotContract(address)", +"e9a3bff4": "buyoutProportion()", "e9a3f454": "setAgriChainSeal(string)", "e9a51c0d": "call1(uint256)", "e9a5605d": "WheelOfFortune(uint256)", @@ -133917,206 +245044,380 @@ "e9a62ba6": "MEGAMALLCOIN()", "e9a6cce4": "getClaimKeysCount()", "e9a6fdc3": "addressAt(bytes,uint256)", +"e9a734ff": "compareStringsbyBytes(string,string)", "e9a765eb": "checkICOStatus()", "e9a76ff7": "getInputName(uint256,uint256)", "e9a78a1e": "decodedNonce()", +"e9a88fc6": "LogEvent(uint256,string,uint256,uint16,address,uint256,uint256)", "e9a8bae6": "getArray(string)", "e9a909a2": "setOraclizeAddrResolverI(address)", +"e9a910c0": "approve_459(address,uint256)", +"e9a91efd": "totalDeveloper()", "e9a9c1b4": "get_party1_balance()", "e9a9c50c": "redeemTokens()", +"e9a9c850": "MINT_ROLE()", +"e9a9e144": "cancelStream()", +"e9aa550f": "ClaimedTokens(address,uint256)", "e9aa80b1": "contributorsAddress()", +"e9aa9d2c": "tokenToSynth(address,bytes32,uint256)", +"e9ab0300": "orderedWithdrawAmount(address,address)", "e9ab04a8": "hatchEgg(uint256,string)", "e9ab1bd7": "True()", "e9ab77e5": "getTimes()", "e9ac31f2": "msgdata()", "e9ac5918": "whatDidJasonSay()", +"e9acd85a": "adjustDistributionTime(address,uint256,bool)", "e9ad1b38": "findAddressByEndpoint(string,int256)", +"e9ad1cd7": "KingsTaxesClaimed(address,uint256)", "e9ad72d7": "_canLotteryFree(address)", +"e9ad7ac6": "yield21Sep30AnnualizedYield()", +"e9ada0fd": "jrtPerBlock()", +"e9ae0da4": "getCurrentImplementationAddress()", +"e9ae767a": "OfferWithdrawn(address,uint256,uint256,bytes32)", "e9aeb932": "dUpgradeToPremium(bytes32)", +"e9aedacc": "Money(address,string,uint256,uint256,uint256,uint256)", +"e9af0292": "claimComp(address)", +"e9af335e": "getNonceOfUser(address)", "e9afa7a1": "signedApprove(address,address,uint256,uint256,uint256,bytes,address)", "e9afad38": "getTotalVesting()", +"e9afc8b8": "wait(address,uint128)", "e9b00581": "LogStartWeek(string)", "e9b04e69": "addSourceForBudget(uint256,uint256,string,bool)", "e9b07bbf": "transfer(address,uint256,bytes,bytes)", "e9b0c0e1": "adminContractSecurity(address,bool,bool,bool)", +"e9b13991": "deviationMovement()", "e9b18084": "Diary(address,bytes)", "e9b1f1ce": "updateRandomSource(uint256)", +"e9b20a15": "gameWhiteListOf(address)", "e9b23b8b": "updateLeaderboard(address,address)", "e9b29a9d": "setAPI(address)", "e9b2f0ad": "unfreezeTokens(address,uint256)", "e9b32a3f": "HOUSE_EDGE_DIVISOR()", +"e9b391e2": "getSwapTOken()", +"e9b3aed2": "betNumber(uint8,uint256)", "e9b3fd39": "TradeBox()", "e9b48288": "insertMessage(string,bool)", "e9b4a028": "payAirdrop(address[],uint256)", "e9b54840": "viewReferral(address,uint256)", "e9b58225": "extDestroyBot(uint256)", "e9b5a2f7": "firstWithdraw()", +"e9b61909": "b3()", +"e9b627b8": "changePeriodByMCWS(address,uint256)", "e9b62f13": "lastBlock_f4()", +"e9b64aae": "startLotteryPresale(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"e9b652aa": "changeRoadPrice(uint256,uint256,uint8,uint256)", +"e9b66f8c": "approveProperty(uint256)", +"e9b68c40": "createContractPerson(string,uint256)", "e9b6953b": "team1Token()", +"e9b6d671": "borrowItem(uint64)", +"e9b852aa": "withdrawTops(address)", "e9b85cf4": "SimpleOwnedStorage(string)", +"e9b8870d": "BOND_PRICE_DISCOUNT_POWER()", "e9b93569": "OwnerGetFee()", +"e9b938b7": "setWerewolfPrice(uint256,uint256)", "e9b991cc": "refundPct()", "e9ba267e": "distributeETHP(address[])", "e9ba2e9b": "Storage(uint256)", "e9ba77fb": "receiveToken()", "e9ba8698": "TheBillionCoinCash()", "e9bacc1a": "freeBalances(address)", +"e9bafe39": "swapToNeo(uint256,string)", "e9bb4aac": "WaltonTokenLocker(string,address,address,uint256)", "e9bb84c2": "transferEth(address,uint256)", "e9bbc19e": "Example3(string)", "e9bc13b8": "_createCanvasInternal(address)", "e9bc63f7": "getSellInfo(uint256)", "e9bc9598": "totaltransactions()", +"e9bc9b4f": "returnMarketRewardPoolShare(uint256)", "e9bce432": "yetAnotherTransferTo(address,uint256)", "e9bd48b8": "VLTToken()", "e9bd97dc": "getData_24()", "e9bdab6a": "tips(address,bytes32)", +"e9bdbcb8": "setApprovedToken(address)", +"e9be5a91": "Newadd(address)", "e9bec833": "setCrowdsalePause(bool)", +"e9bf24af": "transfersEnabledFrom()", "e9bf42b8": "existenceName(address)", "e9c003d2": "indexOf(bytes32[],bytes32)", +"e9c08210": "RewardBlockThresholdChanged(address,uint256)", +"e9c0de6b": "contributorTotalReward(address)", +"e9c1069b": "swapRecords(uint256)", +"e9c18966": "orderCancelled(uint256)", "e9c1a9c4": "ProcessGame(address,address,bool,uint256)", +"e9c211e2": "cancelPayment(uint64,uint256)", "e9c24166": "executeRequest(bytes32)", +"e9c245f1": "tokenToEth(address,uint256,uint256,uint256)", "e9c26893": "setValidDurationData(uint256)", +"e9c29d0e": "_removeProtectedToken(address)", +"e9c2e14b": "mintNft(address)", "e9c2fbd5": "Banned(string)", "e9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", "e9c33249": "ReceivedBTC(address,string,uint256,string)", "e9c33dfe": "getHouseEdgeFee(uint256,uint256)", "e9c35ea8": "universalCall(string)", +"e9c35f9d": "priceToken(uint256)", +"e9c392ad": "getPresaleLive()", "e9c4a3ac": "dispatch()", +"e9c4aa6a": "getStakingInfo(uint256)", +"e9c4f75b": "getMarathonRunnersByDistance(uint256)", "e9c54384": "doesContractImplementInterface(address,bytes4)", +"e9c5781b": "wrapsNodeModulesMethod()", +"e9c58f85": "setLatestAnswer(int256,uint256)", "e9c63b9c": "requestPeerBalance()", "e9c64ad7": "evRecord(address,uint256,string)", +"e9c6aaf4": "_unstake(address,uint256)", "e9c6c176": "addBlock(uint256,uint256,bytes32)", "e9c6ed11": "withdrawNomins(uint256)", +"e9c7097e": "overseerPending()", "e9c714f2": "_acceptAdmin()", +"e9c771b2": "updateAuth(address,bool)", "e9c771f2": "KBItoken()", "e9c801e1": "refundInternal(uint256)", "e9c9262e": "_productExists(uint256)", "e9c93ce7": "cbtFundDeposit()", +"e9c9a473": "TokenUnbanned(address)", "e9c9db5c": "ICOcontroller()", +"e9c9f44f": "BTCB()", "e9c9f4e0": "_finalizeFailure(uint32,string)", +"e9ca2810": "euro()", +"e9ca38bf": "SendExplore(address,uint256,uint256,uint256)", +"e9ca633d": "Addblacklist(address,uint256)", +"e9ca9880": "fulfillAnswerFragment(bytes32,bytes32)", "e9ca9b2a": "phase1StartingAt()", "e9cac389": "onlyWhitelistedCanDoThis()", +"e9cacff3": "messageI()", "e9cafac2": "deleteArray()", +"e9cb209e": "streamLpReleased(address)", "e9cb364f": "lastTip(address,bytes32)", "e9cbd678": "_resetBalanceDivis(address)", +"e9cbd822": "stablecoin()", +"e9cc3a62": "slte(int256,int256)", +"e9cc87b4": "mintAndApproveMarket()", +"e9ccbfd3": "borrow(uint256[5],bytes)", +"e9ccd270": "AllowOtherStakingPayoutAddress(address)", "e9cddb1d": "EARLY_BET_INCENTIVE_COMMISSION()", +"e9ce14ba": "getRoot(bytes32[],uint256)", "e9ceef50": "createCanvas()", "e9cf287a": "sellerGuaranteeEther()", +"e9cf3447": "penalty_owner(uint256)", "e9cfa745": "calculateNetworkTokenBonusAmount(uint256,uint256,uint256,uint256,uint256)", "e9cfb399": "SoupToken(string,string)", +"e9cfc2ce": "calculateEthToUsdt(uint256)", +"e9cff291": "TRANSFER_SINGLE_EVENT_SIG()", +"e9d0216b": "reSetupEvent()", +"e9d079c0": "totalWhitelistedAdd()", +"e9d1251a": "slasherAddr()", +"e9d12e82": "createSmartContract(bytes)", +"e9d13b57": "buyerCancel()", "e9d16224": "maxFundedValue()", +"e9d1a8a9": "setOracleRequestData(bytes)", +"e9d1b31b": "setVokenMainContract(address)", "e9d1c598": "isEligibleForAirdrop(address)", "e9d1d700": "assertFunction()", "e9d1e422": "JZCoin()", +"e9d337b8": "aaveLendingPool()", "e9d36c56": "transferredAmountToReceive(uint256)", +"e9d39990": "removeLiquidityETHAlpha(uint256,uint256,uint256,address,uint256)", +"e9d3c0ac": "ETH_VANILLA()", "e9d41d48": "getAuthorizationDataSource()", +"e9d47b93": "getOrdersByPair(address,address,uint256)", +"e9d4cc1f": "memNum()", +"e9d4f176": "newDeal(bytes32,string,string)", +"e9d50244": "issue(uint256,address,uint256,uint8,string,string,uint16,uint256)", "e9d56d2e": "releaseDividendsRightsForce(address,uint256)", "e9d5d43b": "getWinnerByDrawBlockNumber(uint256)", +"e9d5f1fe": "cutGreenWire(string,string,string)", +"e9d63450": "getAllDebt(address,address,address,bytes32)", "e9d724e5": "changePreIcoEndDate(uint256)", +"e9d76df0": "computeCyclicScheduleSegment(uint256,uint256,uint8)", +"e9d79449": "batchTransferBoth(address[],uint256,uint256)", "e9d7d79a": "SRNT_per_ETH()", +"e9d7ee63": "isThisRight(address,uint256)", "e9d7f309": "addRemainingTokens()", "e9d862b0": "_updateTokensAvailable(uint256)", +"e9d8b181": "setTopAddress(address)", "e9d8d3d7": "MAX_CONTRIBUTION_DURATION()", "e9d8dbfd": "isService(address)", "e9d979dd": "CioCoinERC21Token(uint256,string,string,uint256)", +"e9d98029": "WRITE_OFF_PHASE_C()", "e9d9c4a9": "devTokenTimelock()", "e9d9d5ec": "releaseBBT(address,uint256)", "e9da12ab": "ATRToken()", +"e9da2ae8": "devcash()", "e9db5d79": "Steak()", "e9db5f5a": "addSpecialAccount(address)", "e9db787b": "cancelStack(bytes32)", +"e9dbe764": "enforceMinHolders()", "e9dc0614": "vote(bytes)", "e9dc2e49": "createItem(uint256,uint256,uint256,uint256,uint32)", "e9dc438e": "confirmAllSells()", +"e9dcb8fa": "buySale()", +"e9dd0521": "allow_addresses(address[])", +"e9dd0df7": "aEBnfarm()", +"e9dd3b5e": "revertingMigrate()", "e9dd7b6c": "getUID(uint256)", +"e9dd9030": "recommenderAllow(address)", +"e9dddd60": "last_invest_time()", "e9de432f": "testGasPrice()", "e9de5c0f": "gen(bytes32,uint256)", +"e9de65fd": "addDepositor(address,address)", "e9de78fd": "TestRobotarCrowdsale()", +"e9de998c": "removeAssetMarketSetting(address,bytes32)", "e9deb98c": "presaleConcluded()", +"e9df2dd6": "get_estates_number()", +"e9df37e0": "testInternalFunction()", +"e9df468f": "setAcoPoolPermission(address,bool)", "e9dff847": "withdrawMatingRequest(uint256)", +"e9e0129c": "droppedToken()", "e9e04195": "GEEKSID()", "e9e041f3": "getTotalWeightedContribution()", +"e9e06f4f": "setIUniswapV2PairAddr(address)", +"e9e10d11": "setupFrom(address,uint32)", +"e9e145bf": "withdraw_t(address)", +"e9e15b4f": "setPoolAddress(address)", +"e9e211a1": "trustedSigner(address)", +"e9e211bd": "resetRequiredNum(string,uint256)", "e9e22362": "setWinPercent(uint256[])", "e9e2990e": "bankManager()", "e9e2c786": "returnMessage(uint256)", "e9e30746": "withdrawBankroll(address,uint256)", "e9e30997": "awardMiniGameAirdrop()", "e9e32bfb": "firstLevelPrice()", +"e9e390b1": "config(uint256,uint256,uint256)", +"e9e3ae82": "sdtPerBlock()", "e9e3b1cf": "checkAuthenticity(string)", "e9e43eef": "getLLV_edit_10()", "e9e44349": "hashLicenseTerms(bytes32,bytes32)", "e9e48842": "token_unlock_time()", "e9e48880": "BOUNTY_AMOUNT()", +"e9e518a0": "initialize(address,uint256[],uint256[])", "e9e55c71": "PRESALE_LEVEL_1()", "e9e61da5": "updatePolicy(bytes32,address,uint256,uint256,uint256,uint256,bool)", +"e9e67d67": "activeBalanceOfAt(address,uint64)", "e9e69a48": "getCurrentPageSize()", "e9e7a667": "get_stake(bytes32)", "e9e7e908": "BlockOfLifeToken(uint256,string,string)", +"e9e8b446": "getRoundBalance()", +"e9e8f255": "returnAllETHToOwner()", "e9e972d9": "fileLink()", "e9e98e76": "WSKYCoin()", "e9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", "e9e9b5bc": "setIntF1F2(int256,int256)", +"e9e9bf6a": "distributeNodeRewards()", +"e9e9f0a1": "setClaimNFTFee(uint256)", +"e9ea01a9": "withdrawEDai(address,uint256)", +"e9ea2f7c": "updateEmployee(address,uint256,string,string,string,bool)", +"e9ea46c7": "MasterChef()", "e9ea666b": "test_remove_singleNode()", "e9eaa69b": "sweepToOwner()", +"e9eb4bf6": "nameToOpenkey(string)", +"e9eb549f": "unitInfo(uint256,uint256)", +"e9eb5915": "getDepositers()", +"e9ebe0d0": "refractivesupply3()", +"e9ebe4b4": "recycleThreshold()", "e9ebeafe": "greet(bytes32)", +"e9ebf8ef": "_maxWithdrawalRootNonce()", "e9ec42e6": "getConsistency(uint256)", +"e9ec551d": "turnOut(address)", "e9ec9e8b": "renounceBurner()", "e9ecc0cf": "getInvestorsTokens(address)", +"e9ecc457": "decayTable(uint256)", "e9ecd32b": "RajTest()", +"e9ed4cfc": "LogDrawReuslt(uint256,uint256,address[],address[],uint256,uint256,uint256)", +"e9ed7c87": "Transitioned(address,address,uint8,uint8)", "e9ed8281": "getDiniRequest(uint256)", "e9ed8667": "balanceLocks(address)", +"e9ed95e9": "exitMine(address)", "e9ed9b64": "setProposer(address,bool)", +"e9edbf03": "lastMarket()", "e9edd759": "CCoinToken()", "e9edf4cd": "hardwareWallet()", "e9ee6eeb": "transferAdmin(address,address)", +"e9eecf2d": "submitAndSponsorProjectProposal(uint256,address,string)", +"e9eeefc5": "isReadyToPay()", +"e9ef2a36": "batchGen(address[],uint256,uint256)", "e9ef5318": "_isValidLandID(uint8)", +"e9efd081": "marketBuyBSCXWithETH(address[],uint256,uint256)", "e9efdd6b": "getByFrom(uint256,uint256)", +"e9f02d82": "Invalidate(address,uint256,address)", "e9f0509f": "Commit(uint256,address,bytes32)", "e9f0ee56": "addPrice(uint256)", "e9f12ed3": "itemsByName(string)", +"e9f16bd1": "_setMaxSwingForAsset(address,uint256)", "e9f1c4c3": "f2(uint256,uint256)", +"e9f1c56a": "_lastMintingUnlock()", "e9f21537": "setUint(bytes32,bytes32,uint256,bool)", +"e9f246dd": "pool4()", +"e9f268b1": "founderLockedTokens()", +"e9f2838e": "withdrawalsPaused()", "e9f29b7b": "setTokenUriPref(string)", "e9f2dbfb": "makeCommitment(uint256,bytes32,address,address)", "e9f3b9ee": "triggerSteal(uint32,uint256)", "e9f4043f": "buyTokens(address,uint8)", +"e9f45de7": "AddNewStaking(address)", "e9f50b02": "_transferHelper(address,address,uint256)", "e9f58a52": "rotate_left(uint256,uint256)", +"e9f6063e": "setClaim(address,address,bytes32,bytes32,bytes32)", +"e9f63d9a": "proposalListAddress(uint256)", "e9f6af47": "getZethrTokenBankroll(uint256)", +"e9f6b9c2": "altParameter(address,address,address,address)", "e9f6bd0b": "numberOfDays()", "e9f702f2": "createDiamond(string,address,string,string,string,string)", +"e9f71da9": "checkTwoAdjacentObservationsTickCumulativeModTimeElapsedAlways0(uint16)", +"e9f769ba": "getActiveTotalStaked()", +"e9f7e17b": "defaultSlippageFeeVote(uint256)", +"e9f83771": "IndexOutOfBoundsError(uint256,uint256)", +"e9f84ad4": "getPoolParams(address,bytes32)", "e9f84c5b": "ClearToken()", "e9f88ca5": "ICHAINToken()", "e9f89121": "getWeeklyJackpot(uint32)", "e9f8cd70": "addTokenPair(address,address,uint256,uint256,uint256,uint256)", "e9f90fe6": "listPokemons(address)", "e9f998ce": "checkInventory(uint256)", +"e9f9d28b": "checkResult(uint256)", "e9f9d8e2": "unidentifyParticipant(address)", +"e9fa2256": "func_262F()", "e9fa6277": "updateMasks(uint256,uint256,uint256,uint256)", "e9fa65aa": "updateNextStealTime(uint32)", +"e9fad152": "getSingleBalance(address,address)", "e9fad716": "itemPrice(address,address,uint256,uint256)", "e9fad8ee": "exit()", "e9fb078e": "setFreeTime(uint256,uint256)", +"e9fb6065": "approve_tx(bytes32)", "e9fca283": "buy(uint256,bytes32)", "e9fcc787": "buyCoinsAtICO()", +"e9fd0e38": "debtChanged(uint256)", "e9fd3434": "Cedex()", "e9fd4e1f": "setAllowCnsContract(bytes32,address,bytes32,bool)", +"e9fd69ce": "getDeveloperShare()", "e9fd74dc": "create(string,string,uint8,uint256,address,string,address)", +"e9fde167": "claimArtem(address)", "e9fe799e": "registrantRemove(address)", +"e9fedf19": "brainRate()", "e9fee16f": "refundAll(uint256)", +"e9ff0a3f": "getNodeRewardSetting()", +"e9ff40f1": "subscription(uint256,uint256,uint256,uint256[5])", "e9ffd6de": "allBlockCoordinates(uint256)", "e9ffdf28": "Erc20Dist()", "ea00a289": "getStateofContractString()", "ea00cdb2": "DrazenToken()", "ea00fad4": "callSender(address,bytes4)", +"ea011a58": "GetTop3Team()", "ea011db4": "isCustomerHasKYCfromWL(address)", "ea014645": "PTYC(uint256,string,string)", +"ea017c98": "SWAP_ETH_for_ARTT(uint256)", +"ea018c91": "dividendGraceDays()", +"ea0199d8": "getAmountDailybyNum(uint32,uint8[5])", +"ea01eb9a": "e_remove_owner(address,address)", "ea020f7b": "WindToken()", "ea0217cf": "setVotingPeriod(uint256)", "ea02db0f": "communityPoolAddress()", +"ea02dfce": "collectTransfer(address,address,uint256)", +"ea03430e": "setupDistribution(address,address[],uint256[],uint256[],uint8[])", "ea03918c": "AGC(uint256,string,string)", +"ea03a86d": "getMyTownTokens()", "ea03c115": "getFunctionType()", +"ea03d654": "MINING_ADDRESS()", "ea045f34": "CROSS_RESERVE_FTX()", "ea048256": "PROCOIN()", "ea049958": "stakeScale(address,uint256)", @@ -134125,16 +245426,30 @@ "ea0599c7": "buyIt()", "ea05cd01": "addCarProduct(string,uint32,uint32,uint32,uint32,uint32,uint256,uint256)", "ea061e77": "changeNeat(address)", +"ea0688b3": "setHeimdallId(string)", +"ea068a24": "getSystemTopLevUser()", "ea06ad02": "postBuyTokens()", +"ea06be86": "marketBuyOrdersFillOrKill(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes,uint256,bytes[])", "ea071ac0": "depositShares()", +"ea0809a9": "setDailyLossRateLimit(uint256)", "ea083b86": "contract_enabled()", "ea08bb89": "creatureCosts(uint8)", "ea08ec2c": "accountModifiers(address)", "ea0930f2": "_currentTime()", +"ea0936c8": "IPOtoID(uint256)", +"ea09676c": "weighted_avg(address)", +"ea0a45f9": "getMarginRatio(address,address)", "ea0a5237": "announce(string)", "ea0a73d2": "TokenGMCT(uint256,string,string)", "ea0a93e2": "miningLeader()", +"ea0aa540": "blockFarmingEnds()", "ea0aee14": "BuyStockRocketEvent(address,uint32,uint32,address)", +"ea0b2590": "createMarketOrder(uint8,uint256,uint256,uint256,address,uint256)", +"ea0c0eba": "set_fulcrumInterface(address)", +"ea0c2f83": "m3Wallet()", +"ea0cae0e": "erc20WrapperModel()", +"ea0cddfe": "totalFarmRewards()", +"ea0ceb64": "countEthAmount(address,uint256)", "ea0d0015": "_bill_all_participants()", "ea0d1027": "calculateSumToWithdraw()", "ea0d1702": "verifyEscrowCustomer(uint256,address)", @@ -134143,144 +245458,265 @@ "ea0d6ad2": "setErrorROFR(bytes)", "ea0d8da4": "amountReserved()", "ea0d98aa": "changeParticipants(uint256)", +"ea0da760": "certificateControllerActivated()", +"ea0ddce6": "setLevelSetter(address)", +"ea0df72b": "getRunnerOfTeam(uint256)", +"ea0e35b1": "MAX_MEMBERS()", +"ea0e4720": "getEthers()", +"ea0e561e": "numberCombustToReactivate()", +"ea0ecf53": "claimDFL()", +"ea0ee559": "addExternalPositionModule(address,address)", "ea0f5449": "Transaction(bytes32,address,address,uint256,uint256)", +"ea0f61e0": "SupplyLocked()", +"ea102fe9": "f(uint256[3][4])", +"ea105ac7": "advance()", "ea107240": "deleteRegionData(uint256)", +"ea10a4ee": "addTradeTime(address)", "ea10b18f": "withdrawMainDivi()", +"ea10bb20": "checkValidatorSignatures(address[],uint256[],uint8[],bytes32[],bytes32[],bytes32,uint256)", "ea10d246": "get_orders_sell_amount(address)", "ea110eda": "setOraclizeGasLimit(uint256,uint256)", "ea112b6c": "updateCrowdsaleAddress(address)", +"ea112efd": "approve_809(address,uint256)", "ea116243": "_setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", "ea118590": "vote_proposed_address(string)", "ea11e00e": "LogMatchingEnabled(bool)", +"ea12b548": "totalHxbLpFrozen()", +"ea132309": "setProfitPercentBonus(uint256)", "ea1325be": "createTokenUri(uint8,uint8,uint64,uint64)", "ea135eeb": "computeSha3(uint256[16],uint256[8])", +"ea13cc34": "artistWalletAddress()", "ea14457e": "emitRecovery(address,address,address)", "ea149ab5": "bank2Val()", "ea14bc11": "box1Star5()", +"ea15be9c": "changeStateToPending(address,address[])", "ea15f262": "ETHEREAL()", "ea1642f8": "getManyBalances(address[])", +"ea168b62": "burnSynths(bytes32,uint256)", "ea16c148": "isIcoAgent(address)", "ea16cee5": "migratestate()", "ea177073": "nextMaxPlay()", +"ea178041": "payNoders(address,uint256)", +"ea1784cb": "transferGrowthFund(address,uint256)", +"ea181d1d": "NEWDAI_TOKEN_ADDRESS()", +"ea187560": "senderRefund(bytes32,uint256,bytes20,address,bool,address)", "ea18e3d5": "getFreeSword()", +"ea1924d9": "dataLevels(address,uint256)", +"ea1958c5": "supportAddresses(address,uint256)", +"ea1996a8": "privateWhitelist(address)", +"ea199a83": "addEmployee(address,uint256,uint64,string)", +"ea19d99e": "mIdxUuid(uint256)", +"ea19e83b": "deusToken()", "ea19efb5": "startVoting(bytes32)", "ea1a20d5": "shareholdersWallet()", +"ea1a2644": "allOperationsIndicies(bytes32)", "ea1a9537": "IOBSTestToken()", "ea1b28e0": "maxStake()", "ea1bbe35": "getIndex(string)", +"ea1bf176": "Activity()", "ea1bf386": "getNextSellerBOTdata(uint256)", "ea1c0379": "maximumAllocationPerParticipant()", "ea1c1690": "timestampToDateTime(uint256)", "ea1c41be": "RxEALSaleContract()", "ea1cf495": "ImagodeiToken()", +"ea1d59c9": "approvalsRequired()", "ea1d64b8": "startPostIco()", +"ea1d81cb": "totalExpectedRewards(address)", "ea1da8b9": "updatePresaleMinWei(uint256)", +"ea1dd4ba": "StartDate(address)", +"ea1de57e": "findTenPercent(uint256)", "ea1df439": "timestampFirst()", "ea1e4c2d": "Transaction2()", "ea1e572b": "addOrderBasicFields(uint256,address,uint256,uint256,bytes32)", "ea1e74ef": "withdrawEtherToIfPossible(address,uint256)", +"ea1e8c4f": "HighGravityTraining(address)", "ea1eaecb": "buyMinersWithGem(uint64)", "ea1ecff4": "sendByTranches(bytes32[],address,uint256[],bytes)", +"ea1f1fdd": "viewAllEvents()", "ea1f2954": "transferSnowflakeBalance(string,uint256)", "ea1f4082": "RGXToken(string,string,uint256,uint256,uint8)", "ea1f9b3e": "NoxonInit()", "ea2028b7": "changeSaleHardcap(uint256)", +"ea2092f3": "redeem(address,uint256,uint256,uint256)", +"ea20e875": "getBetaRateBaseTotalAmount()", "ea212b1e": "withdrawRequest(address,bytes32)", "ea217d4d": "logSaleStart(uint256,uint256)", +"ea218358": "ner()", "ea21c6be": "find_and_or_register_user(address,address)", "ea21d12d": "deleteUncompletableRequest(bytes32)", +"ea21f035": "paintEvent(address,uint256,uint256,uint256,uint256,uint256)", +"ea21f25d": "approve_4(address,uint256)", "ea222fde": "getAmbientLightControlLimits(bytes32)", +"ea22d229": "addressFreezeStatus(address)", "ea22ee15": "LOG_EmergencyWithdrawalVote(address,bool)", +"ea2347e6": "getStaticCallSignatures()", +"ea23807a": "isBeforeStatus(uint8)", "ea23c473": "scheduleUpgrade(address,string,string,bytes32,uint256)", +"ea23cd3e": "pendingAttributionCnt(address)", "ea2470ab": "priceLocked()", "ea251c2f": "owner_BurnUpdateTokenFrom(address,uint256)", "ea25415a": "getAcceptedGames()", "ea25f24a": "TokenCreation(uint256,uint256,address)", "ea26b575": "Eth_Collected()", +"ea26b7da": "ChangedInvestmentConfirmation(uint256,address,bool)", +"ea271348": "dNyanV2LP()", "ea273277": "setAyantDroitEconomique_Compte_8(uint256)", "ea274a6b": "processBuy(address,uint256)", +"ea2752aa": "rainbow()", "ea27a881": "getMinimumEndowment(uint256,uint256,uint256,uint256)", +"ea2858d5": "setELLACoin(address)", "ea28baee": "getRealWorldPlayerRosterIndex(uint128)", +"ea292bfe": "turboMultiplier()", "ea295ec2": "calcRevenue(address)", +"ea296527": "getRegisteredOraclesLength()", +"ea299ac2": "validarMoraPrestamo()", +"ea299f2f": "console()", "ea29a210": "TokenVesting(address,uint256,uint256,uint256)", +"ea29b278": "pigeon()", +"ea2a2486": "getValidCryptoAccount(uint256,bytes32)", "ea2a31fc": "NMK()", "ea2a33fc": "getInitialREPSupply()", "ea2a9599": "callThisToStart()", +"ea2ac5c9": "_fallBack(uint256)", "ea2bc862": "optionDescription(uint256,uint256)", +"ea2be61b": "vistFlagList(address)", "ea2c23da": "createAccounts(uint256)", "ea2c2f36": "doubleBonus(address)", +"ea2c38ae": "manualEpochInit(address[],uint128)", "ea2c4357": "newTokenUnlockPercent(uint256)", +"ea2c561b": "getPoolShare()", "ea2c69d1": "Marijuaneum()", +"ea2c7ad8": "nyanConstructor(address,address,uint256,uint256)", +"ea2c921c": "forDaredevil(address)", "ea2ce651": "isTokenUpgrader()", "ea2d4cf8": "__DeployerFunctions(address,address,uint256)", +"ea2d8dcb": "setSystemPart(uint256)", +"ea2d9547": "setCommissionPoints(uint256)", "ea2da598": "NLToken()", +"ea2e0874": "buyAllAmountBuyEth(address,uint256,address,uint256)", "ea2e34f2": "isTransformAgent()", "ea2ea847": "testChallengeFinalize()", +"ea2f0b37": "includeInFee(address)", "ea2f28d3": "countWeeks()", "ea2f43c3": "currentIncreaseWithdrawalTeamBallot()", +"ea2f639b": "depositAndLockCollateralAndBorrow(address,address,uint256,uint256,uint256)", "ea2f9ebe": "retrievePoolFee(uint256)", +"ea2fa4d4": "getCompoundPercentagePerTranche(uint256)", +"ea2fafcc": "changeProtocols(address[])", "ea2fe1a2": "nay()", "ea3015b8": "burnUnusedTokens()", +"ea303f6b": "CUSIP()", "ea304511": "changeParameters(uint256[],uint256[],uint256[],uint256[])", +"ea30ca06": "Bet(address,uint256[],uint256,uint256,uint256[],uint256[])", "ea30e2e6": "XiaoMuMuToken()", +"ea311365": "SendTo()", "ea316027": "creditWalletUserLMNO(address,uint256)", "ea317f6d": "setdissolveprice(uint256)", +"ea319f28": "getRemainingCandies()", "ea31b291": "getCreatorByTrackId(uint256)", "ea31c53c": "_openGameLoop()", "ea31ccb6": "rICO(address,address,address)", "ea31d56b": "mintTrusted(address,uint256)", +"ea3220a3": "getBoughtTokensByCurrentPrice()", "ea326431": "Neulaut()", +"ea32a89e": "claimDeposit(uint256,uint256)", "ea32a8f4": "addshares(uint256,address)", +"ea32b3e6": "setHxyAddress(uint256)", "ea32c95e": "EMPTY_PUBLIC_KEY_ID()", +"ea3342e8": "setLockAfterManuallyMint(bool)", "ea3367ae": "divMasterAmt()", "ea337cdb": "batchChangeHoldPeriod(uint256)", +"ea338e59": "putSaveData(address,string)", "ea33dd24": "developer_increase_prices(uint256,uint256)", "ea341309": "catsRemainingToAssign()", +"ea345540": "calculateClaim(address)", +"ea3457b7": "isVotingSignatureAllowed(address,bytes4)", "ea348da6": "FuckERsToken33()", "ea352634": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", "ea359082": "End4()", "ea35df16": "unlockBlock()", "ea35e805": "calculateWinner()", +"ea35f36c": "getMinterRole()", +"ea3642f4": "updateTokenDistributeAMount(uint256)", +"ea364989": "remainningBurnableToken()", "ea364a9a": "addSingleApprovedAddress(address,address,uint8)", +"ea364f69": "toFixedUnsigned(uint256)", +"ea368a40": "Swap(address,address,uint256)", +"ea368e64": "appendToAddressCache(bytes32)", "ea36ad91": "transferERCXTokenInitiation(string,address,address,uint256)", +"ea371346": "allocPointPool1()", +"ea373139": "setFactorETHUSD(uint256)", +"ea37408c": "ChangeTransferStep(address,uint8)", +"ea3774e3": "createOrder(address)", +"ea37f8e1": "_staticPool()", +"ea3803b9": "totalEarnedFromBattles(uint256)", "ea383176": "month30Allocated()", "ea391420": "endIcoRound()", +"ea3a1499": "winnings(address)", +"ea3a38a9": "spenderWhitelist(address)", +"ea3a4966": "claimableProRataUSD(address)", +"ea3a852c": "unlockCapacity(address)", +"ea3ae050": "VerificatioFailed(bytes32)", "ea3b3a91": "recoverAddress(bytes32,uint256[3])", "ea3b9ba1": "enter(uint256,address)", "ea3bd5df": "purchase(uint256,uint256,address)", "ea3c281a": "removePartner(address)", +"ea3ca862": "operatorVoteAddress()", "ea3d2827": "selectWinner(string)", "ea3d4109": "rateIsStale(bytes4)", "ea3d508a": "selector()", "ea3d7e2c": "getOraclizeGas()", "ea3d895f": "vestingBonusMultiplier()", +"ea3dc198": "totalTLPGrowing(string)", +"ea3de933": "getReservesForTokenPool(address)", "ea3ebae6": "getConfigBool(bytes32)", +"ea3f068d": "issue(address,uint256,bytes32)", +"ea3f1721": "erc1155ContractAddress()", "ea3f190e": "devFee2(uint256)", +"ea3f5dd3": "unbond_fake(uint256)", "ea3f6ce0": "joinGroupAndInvest(uint32,address)", +"ea3f7bdb": "getBlockerOperatorsContract()", +"ea40450e": "getStakesNum()", "ea4061cc": "calculateToFund(address,uint256)", "ea4099e4": "QuantumPigBlockchain()", +"ea40a08f": "mintFVP()", +"ea40b64c": "signfordailyreward(uint256)", "ea40c9e7": "ARCHETYPALXToken()", +"ea40e567": "mss()", "ea414b28": "setTaxWallet(address)", +"ea4183bb": "setofficerent(uint256)", "ea41bca5": "doStake(address,uint256,uint256,address,address)", +"ea41f3f7": "JuryVote(uint256,address,bool)", +"ea42354c": "retrieveCurrentId()", "ea42418b": "settlementContract()", "ea428bad": "ACLYDcidTOKEN()", +"ea433736": "newestChecksum(address)", "ea4354dc": "totalDividendWinners()", "ea43671d": "watchPercent()", "ea439e10": "transactionRawToBytes(uint256,address,address,uint256,bool,bool)", "ea43b069": "PRIVATE_SALE_TOTAL()", "ea43b79f": "unhaltDirectTrade()", +"ea440500": "getStakeReward(uint256)", "ea448370": "setUserEmail(string)", +"ea44ed76": "STAGE_7_BONUS_RT()", "ea454da8": "WonderDogToken(uint256,string,uint8,string)", +"ea4554a9": "isRentOverDue(uint256)", "ea46193e": "getEtherBalance()", "ea46336b": "ShiversToken(uint256,string,uint8,string)", "ea4634a7": "MarginlessCrowdsale(address)", +"ea46d196": "allowOpenTrading()", "ea46d7b9": "TACOS()", +"ea46fa22": "NextStageStarted(uint256,uint256,uint256)", +"ea470758": "getSTFactoryAddress()", "ea470d33": "voteForAnswer(uint256,address,bool)", "ea4796b9": "revertIfReturnLessThanMinAndDie()", "ea47cb24": "ownerAccount()", +"ea4834d4": "distributedCommunityTokens()", "ea486cb1": "moderList()", +"ea48a00c": "GLXY()", "ea490b84": "ethereumForkArbiter()", "ea49ac03": "allScamsForSale()", +"ea4a1104": "periods(uint256)", "ea4a294f": "addCard(uint256,uint256)", "ea4a6aad": "LogQuantity(uint256,string)", "ea4af029": "ConferenceCertification()", @@ -134289,24 +245725,44 @@ "ea4b9dce": "getLastBetNumber()", "ea4ba8eb": "getOutcome(bytes)", "ea4c4388": "createCredit(uint256,address,uint256)", +"ea4c798c": "enableLocking()", +"ea4ca47c": "decreaseUnlockAmount(address,uint256)", "ea4cc26d": "CryptoPayment()", "ea4cc7eb": "divvy(uint256,address,uint256)", "ea4ce239": "totalSale()", +"ea4cf236": "entries(uint8,address)", +"ea4d3bcd": "feeToPercentString(uint24)", +"ea4dc5ee": "registerDevice(bytes32,bytes32,bytes32,uint256,uint256,bool)", "ea4dfce9": "benAddress()", +"ea4e272d": "activeSlot_ap8()", +"ea4e2fd2": "rewardPerDeposit()", "ea4e6ded": "getListOfSupportedTokens()", "ea4ef51f": "relockPart(address,uint256,uint256,uint256,int256)", "ea4efa5d": "ganeshrajToken()", "ea4f0882": "clearVolumeDiscounts()", "ea503429": "privateSaleWallet()", +"ea508e87": "withdrawZRE(uint256)", "ea5136a1": "adminUpdateSettings(address,address)", "ea515c98": "pgoUnlockedLiquidityWallet()", "ea51b3d6": "allocateOwnership(address)", "ea51c343": "verifyLoanOffering(address[9],uint256[7],uint32[4],bytes32,bytes)", "ea520b18": "totalDrop()", "ea5213e1": "removeExternalContributor(address)", +"ea521dc4": "freeSettlement()", +"ea522a03": "totalPresaled()", +"ea526de7": "getLiquidity(address,address)", +"ea52845e": "Curate()", +"ea52966c": "burnGirl(address,uint256)", +"ea5296ff": "getTotalDistance()", +"ea52eb54": "getIds(address[])", +"ea52ec90": "deposit(address,uint256,address,string)", "ea5366c1": "set_contract2address(address,address)", +"ea54c5f2": "Firas()", +"ea54ce55": "managerWithdrawn()", +"ea552480": "defaultDriverExperience()", "ea56a44d": "changeUpgradeMaster(address)", "ea57712a": "SetFreeMKI(uint256)", +"ea5783c2": "getStakingData(uint256)", "ea57d818": "EmilToken()", "ea5815f5": "getDatesForUser(address)", "ea584ee6": "changeFreeZombiewCount(uint16)", @@ -134321,103 +245777,190 @@ "ea59a4e8": "GetPlayer_FromAddr(address,uint8)", "ea5a13aa": "coindropsTokens()", "ea5a22eb": "mintax()", +"ea5a6416": "buyModeEth()", "ea5b2ae2": "checkIsWinner(uint256)", "ea5b561f": "guardian1Vote()", +"ea5bd0ea": "halvingPercent()", "ea5c204b": "MecStandardToken(uint256,string,uint8,string)", "ea5c3204": "foundersAmount()", +"ea5cb532": "_SUPPLY()", +"ea5d5a92": "buildMetadata()", +"ea5ddcae": "convertBurnToken(address,address)", "ea5ea470": "payFunding(uint256)", +"ea5edccc": "Register(address,string,bytes32)", +"ea5f6444": "AuditorRegistered(address)", +"ea5f6592": "updateInventoryControl(address)", +"ea5fbfd5": "sweptSet(address)", +"ea6017cf": "slaughterDivide()", +"ea60c7c4": "rootToChildToken(address)", "ea60e4ab": "Yusuf()", "ea60e79b": "preICOLimit()", "ea612545": "setBorrowAgreement(uint256,uint256,string)", +"ea612ae8": "timelocks(address,uint256)", +"ea61a33d": "TaskSolved(uint256,uint256,uint256)", +"ea61e1f5": "SLATE_SUBMISSION_PERIOD_START()", +"ea623daf": "push(uint256,uint256[])", +"ea6258ff": "VoucherRedeemed(uint256,address,address,uint256)", +"ea626e8f": "insertPayment(string,address,string)", "ea62f24c": "unlockTeamAdvisorsPartnersTokens()", +"ea630d33": "indexOfTaskId(uint256)", "ea636aca": "setNinjaContract(address)", "ea63ceb6": "allowAccount(address,bool)", +"ea648b3e": "LogPayAuditor(uint256,address,uint256)", "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)", +"ea6515c4": "lte(uint256,uint256)", +"ea65212f": "giveCDPToDSProxy(address)", +"ea656f7d": "deprecateContract()", +"ea65d7d1": "LogOddOrEven(uint256,bytes32,uint256)", "ea663631": "openTimerElapsed()", +"ea664424": "seeMyDelgated()", "ea66543f": "isEmployee(address)", "ea669a8a": "setTusdRegistry(address)", +"ea66c669": "hasTradableToken(address)", +"ea66d02a": "NewBet(uint256,address,uint256,uint256)", +"ea66df62": "itemDelete(uint256)", +"ea66f58e": "Voted(address,uint256,uint256)", "ea6723cd": "usdMnr()", +"ea6790cf": "setWorker(address,uint256)", +"ea67b0fa": "setPrice1()", +"ea67ead8": "updateIgnoreOfPancake(address,address)", "ea680080": "firstAuctionsReferrer()", "ea681932": "weiWantedOf()", "ea6825aa": "VieToken()", +"ea68ad38": "exploitive()", +"ea68e2f0": "setUnsignedInteger(uint256)", "ea6955e5": "ownerWithdrawUnspentCredits()", +"ea6963c4": "rxp_to_usd()", "ea6a49ea": "setBetPrices(uint256[])", +"ea6a508b": "initialize(address,address,address,uint256,address,address,address,address)", "ea6b1377": "MAXTOKENSOLD()", +"ea6b2962": "soju()", "ea6b8243": "switchOwnerTo(address)", +"ea6bcdcc": "isClaimingBonds(address)", "ea6be96f": "estimateTokens(uint256)", +"ea6c1180": "purchaseCompany(uint256)", "ea6c1258": "setFSTKCentral(address)", +"ea6c5971": "setRoot(address,address)", "ea6c9750": "transferToInvester()", "ea6ca182": "addAgingTimesForPool(address,uint256)", "ea6cc6e9": "delayedTokenAllocator()", +"ea6ce2bf": "startChangeGasStipend(uint256)", +"ea6d4ea9": "getLotToken1155RewardCount(uint32)", "ea6dee80": "addKey(address,address)", +"ea6e491e": "userInfoERC1155(uint256,address)", "ea6ef2fe": "teamShare()", "ea6f0725": "initCompoundContract(address,uint256,uint256,uint256)", "ea6f1c4a": "sponsorLevel()", "ea6f67e1": "SingularityTes26()", "ea6f7f3e": "addAllValidShaHashes()", "ea7000d6": "buyTokens(bytes32)", +"ea7044ed": "rate(uint256,uint256,uint256,uint256,bool)", "ea70b4af": "pendingCount()", +"ea70b6d1": "setupUni(address)", "ea70bdad": "attackTileForExistingUser(uint16,uint256,bool,bool)", +"ea7128d5": "claimWearableTickets(uint256[])", +"ea715c75": "initExchanger(bytes)", +"ea720eea": "_getArbiterFees()", "ea726acb": "getReferrerAddr(address)", "ea727ba2": "changeInterest(uint256[])", +"ea72d6ee": "addressBlacklists(address)", "ea72d9de": "SENS_PER_ETH_BASE_RATE()", "ea737b54": "getCompte_42()", "ea74329c": "tokensRemainingPreCrowd()", +"ea745d13": "forciblyEndSeason()", +"ea746885": "rageQuitWithTokens(address[])", "ea74838a": "setControllers(address[])", "ea7553f0": "vault_wallet()", +"ea7579d1": "getAllProtocolAddresses()", "ea75d311": "isBuyOrder(bytes32)", +"ea75de26": "ethbAmount()", "ea760a6b": "kkICOTest80()", "ea760df8": "partner1_vows()", +"ea763484": "ticketInfo()", "ea769e97": "changeTradeState(bool)", "ea76a36f": "Mahjongcoin()", "ea770a4c": "getNewCoinsIssued(uint256,uint256,uint256)", "ea773d9e": "blink()", +"ea77536c": "setXLocker(address)", +"ea776599": "getStakePerAccount(address)", +"ea776b16": "hmstr()", +"ea777eec": "gameFee()", "ea77d01a": "buyWarriorChest(uint256)", "ea77ffd8": "consumeDiscount(uint8,uint8)", "ea780bf2": "overloadedMethod(address,uint256,string)", "ea782500": "curr_number()", +"ea78568c": "PerkChosen(address,uint8)", "ea7858f5": "player_cancelGame(uint256)", "ea7873db": "addCompany()", +"ea78803f": "tokenOf(uint256)", +"ea78ab15": "getMicrosecondsSinceLastBlock(uint256)", +"ea78b868": "commitment_b()", "ea794ef4": "constructWeaponTokenIdForWinner(uint256,uint256)", +"ea796240": "accountToProposals(address,uint256)", +"ea797657": "getRewardPools(address,uint256,uint256)", +"ea7979e4": "_VoteCommitted(uint256,uint256,address)", +"ea79cf4f": "get_finished_number(address)", "ea79dd79": "equal(bytes32,bytes32,string)", "ea79f33d": "uniquenessIndex()", "ea7a0142": "setRemark1(string)", +"ea7a4940": "isItSortOfSafe()", "ea7a7184": "testGetBalanceDb()", +"ea7b2f32": "getMinerEthAndToken(address,address)", "ea7b5df3": "pecunioTokenBalance()", +"ea7b6ffd": "submitProposal(address,uint256,uint256,uint256,address,uint256,address,bytes32)", "ea7c2115": "lookupKittyDetails2(uint256)", +"ea7c7bb8": "verificationTimestampVariance()", "ea7cabdd": "checkAllOwner(uint256[],address)", "ea7ceaf7": "stopRefunds()", +"ea7d530f": "debtShareToVal(uint256)", +"ea7d6aea": "mining(uint256[],uint256[])", +"ea7daec7": "arbitrage(address,address,address)", +"ea7e849a": "ViewEntry_Days()", +"ea7ee010": "getTokenAllowance(address,address)", "ea7f4d27": "right13(uint256)", "ea7f537a": "percentOfGoal()", "ea7f7a59": "finalizeLottery(uint256)", "ea7f9244": "getRank08()", "ea801802": "AviaC01n()", "ea8037d6": "batchEscrowToTeamContract(address,uint32[])", +"ea808074": "valueLiquidEthValuePool()", "ea8118ba": "Trustcoin(address)", "ea8269f4": "balanceAddress(address,address)", +"ea8287dc": "pickletoken()", "ea82fa2a": "VestingScheduleConfirmed(address,address,uint256,uint256,uint256,uint256)", "ea830cde": "getSendIndex(uint256)", +"ea833138": "UNLIMITED_LEVEL_PRICE()", "ea83add4": "DoTrade(address,address,uint256,address,uint256,address)", +"ea841198": "customers(bytes32)", "ea842e65": "deleteTeam(uint256)", "ea8466dc": "LBQ(uint256,string,string)", "ea84a6cd": "memberShare(uint256)", "ea84bfee": "update(address,bool)", +"ea84c7e0": "noTimeLockFunc3(address)", "ea851885": "buyStake(bool)", "ea85b367": "create(address,int256,address,address)", "ea85b581": "Deadpool2RottenorFresh()", "ea85c7ac": "getOriginalSpinnerPrice(uint256)", "ea863e62": "JorgeToken()", +"ea865374": "_callUniswapExchangePriceFunction(address,bytes4,uint256)", +"ea86abc3": "addToContracts(address)", "ea87003c": "setRenamingCosts(uint256)", +"ea870fe6": "sushi_opium_eth_lp()", "ea871246": "LOW_RANGE_RATE()", "ea87152b": "register(string,uint256)", +"ea872e1d": "updateDeposit(bytes32,uint256)", "ea879634": "getCode()", "ea87a0aa": "updateItemsPrices(uint256[],uint256[])", "ea88246d": "Transction()", "ea885b55": "UNDERWAY_STATUS()", +"ea885d66": "m_to()", +"ea886534": "dt(uint256)", +"ea887d08": "getDataParameter(uint256)", +"ea89ba4f": "ERROR_CODE_TO_FROZEN()", "ea89c6bc": "TrackChain()", "ea8a0a23": "PlotTerrainUpdate(uint256,uint256,address,uint256,bytes32)", "ea8a1af0": "cancel()", @@ -134427,67 +245970,109 @@ "ea8acb67": "_transferToContract(address,address,uint256)", "ea8af87d": "sumPreICO1()", "ea8b03c2": "innerGuess(uint256,uint256,uint256,address)", +"ea8b35ab": "recoverAttenPerDay()", "ea8b3e9f": "setFlag(string,uint256)", "ea8b4627": "playerLastScoredGame(address)", "ea8b5ca3": "isContractExpired()", "ea8b73df": "createEthCommunityTokenAndMint(string,uint8,string,uint8,uint256)", "ea8c1516": "isBlockedAccount(address)", +"ea8c63f7": "rarityTable(uint256)", +"ea8c7def": "getTotalFeeForAddress(address)", +"ea8cf4e0": "setFactoryAdd(address)", "ea8d103f": "transferFundToAccount(address)", +"ea8d7257": "exit(uint256,address,address,address,uint256)", "ea8dc8d0": "buyTicket(uint256,uint8)", +"ea8e458a": "withdrawToad(uint256)", +"ea8e496e": "dsec_token_addresses(uint256)", "ea8e84a1": "RecoveryEvent(string,address)", "ea8eb4be": "blockingDuration()", "ea8eee87": "updatePrivateExhangeRate(uint256)", "ea8ef515": "airdropSameAmount(address[],uint256)", "ea8ef6be": "getBranch()", +"ea8f4a75": "getlast_useVersion()", "ea8f6691": "mintSpecificCard(address,uint8,uint256)", +"ea8fd7ad": "setMyOriginSender()", +"ea8ffced": "Get(uint256[])", +"ea9001d8": "PaidEvent(uint256,uint8,address)", "ea903c78": "setEndStage3(uint256)", "ea905308": "LogSaleCapReached(uint256)", +"ea907d62": "UPDATE_BOUNTIES_ROLE()", "ea90ad7e": "FAUT()", "ea91ec69": "TokensReleased(uint256,uint256,uint256)", "ea91f8c7": "showMyTokenBalance()", "ea920b2b": "betSummary()", +"ea9223a6": "GetPoolData(uint256)", +"ea9239fe": "NewHashLockContract(bytes32,address,address,uint256,bytes32,uint256)", +"ea92810f": "recordTaxCollected(uint256)", "ea92c2d0": "usd2wei(uint256)", "ea92dd1d": "withdaw(uint256)", +"ea92df56": "_lottoFee()", "ea932954": "withdraw_token(address,uint256)", +"ea933773": "removeDataProvider(uint8,uint256)", "ea9362de": "maxMintingTime()", "ea93a324": "getCreateShareTokenCounter()", +"ea9400ec": "matrixEntryCost(uint8)", "ea941538": "TradeExecute(address,address,uint256,address,uint256,address)", "ea94c696": "distributeAmount(address[],uint256)", "ea94eaa2": "CreateTokenByAtes(address,uint256,string)", "ea95e4d8": "BreezeCoinICO()", "ea961d78": "decreaseTokensMulti(address[],address,uint256[])", +"ea9638bf": "moveETHGainToTrove(address,address,address)", "ea963a21": "ReconCongress(uint256,uint256,int256)", +"ea96e27b": "purchasedDatas(address)", "ea9707a3": "getCaptainIndexToCount(uint32)", "ea9746a2": "FNTCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,address,address)", +"ea97c322": "stakeTokenLP(uint256,uint256)", +"ea980db2": "tokenMaxAmount()", "ea983f7f": "Alfacoin()", "ea985057": "BountiesMinted(address,address,uint256,uint256)", "ea98847b": "withdraw2()", "ea988ebd": "mine1000(uint256)", +"ea98a950": "getOffers(address,uint256)", "ea98de9f": "runDividendPayment()", "ea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", "ea98fcf9": "tokenForBounty()", +"ea992c5d": "Resolve(uint256)", "ea9960d8": "participate(bytes32[],bytes32[])", "ea996c9c": "approvedRewardSources(address)", "ea99e689": "withdrawFeeRate()", "ea9a3eb5": "AFWToken()", +"ea9ab5d6": "writeRevoke(address)", "ea9ac537": "emitExchangeFeeUpdated(uint256)", "ea9ae72e": "setPosTokens(uint256)", "ea9b4be5": "Rearden()", "ea9b6025": "burnTimeChange()", +"ea9b8613": "commissionMax(address)", +"ea9bec5c": "updateNumMons()", "ea9c2859": "CurrentGoldPercentIncrease()", "ea9c3bb3": "ico2_startdate()", "ea9c8e63": "addSmartContracts(address[])", +"ea9cad2d": "TokenContractUpdated(bool)", "ea9ce8fd": "redeemToken(bytes)", +"ea9d5e22": "GOLD_BOX_MAX_PRICE()", "ea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", "ea9e372f": "withdrawImpl(address,address)", "ea9eb855": "setWLMTPrice(uint256)", +"ea9ebb76": "leviathans(uint256)", +"ea9ee0eb": "newUserId_ap6()", "ea9f0c4c": "Partial20Send()", "ea9f4968": "withinLimit(uint256)", +"ea9f9c3a": "trustedProposalFactory()", "ea9fa768": "newWeiController(address,address,uint256,bool)", +"eaa0adf5": "inflationCounter()", +"eaa0dff1": "addProposalType(string,bytes4)", "eaa0e760": "automaticWithdrawLoop(uint256,uint256)", +"eaa0f8d1": "_subToZero(uint256,uint256)", +"eaa15fdb": "privatorForFaithUnlockTimes()", +"eaa18152": "Deposit(uint256,address,uint256)", "eaa1f9fe": "reqisterListening(address)", +"eaa2288b": "setStringInfo(bytes32,bytes32,bytes32,bytes32,bytes32)", +"eaa24135": "drunk()", +"eaa25744": "SHARE_DEV()", "eaa26f0f": "withdrawal_delay()", "eaa2b2f6": "kill(string)", +"eaa2d7db": "configure(string,string,uint8,string,uint256)", +"eaa2e16e": "restrictedTokenFab()", "eaa2f447": "BelottoCoin(address)", "eaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", "eaa382c2": "isMintingManager(address)", @@ -134495,60 +246080,128 @@ "eaa4077a": "SetICOPhase(address,uint256,uint256,uint256,uint256,uint256)", "eaa42a15": "_setSnapshotStakeAmount(uint256,address,address,uint256)", "eaa47de2": "RickAndMortyShrimper()", +"eaa4c3b0": "openReward()", "eaa4d4c2": "tokenallowance(address,address)", +"eaa5407e": "getTotalBlockedBalance()", +"eaa56a01": "updateDevices(address,string,uint256,string,uint256,string,uint256,string,uint256)", "eaa59c74": "rejectShipping(uint256,string)", +"eaa59d5f": "swapOut(address,string,uint256)", "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)", +"eaa6c0da": "cardTypes(uint256)", +"eaa6d9e0": "createProposal(uint256,uint256,uint256,uint256,uint256,address)", +"eaa8108f": "playerTickets(address)", +"eaa893f3": "GetPlayerByUid(uint256)", "eaa8e6d8": "LifeFactor_iii()", +"eaa90123": "platformProportion()", +"eaa93e78": "updateFee(uint8,uint32)", +"eaa9600b": "checkbalance()", "eaa968cc": "closeBet()", +"eaa9ad34": "OverallStakes()", "eaa9b9a7": "timestamp_ack()", +"eaa9d1a1": "pendingOctan(uint256,address)", +"eaa9f26b": "TokensLockedInContract()", +"eaaa808c": "playFirstTime(address,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint8)", "eaaad8e9": "masterKeys(address)", +"eaab1c70": "setExtensionAssetAddress(address)", +"eaab4597": "investedAmount()", +"eaab812f": "approveCToken(address,address)", "eaabd05e": "setTokenSwarmHash(address,bytes32)", +"eaabe284": "current_profit_p2()", +"eaac40f3": "setUSDTContract(address)", "eaac77a7": "priceTokenWeiPreICO()", "eaac77ea": "supply_cap()", "eaacc753": "verifyHolder(address,string)", +"eaad0806": "set_new_tax(uint16)", +"eaad1b3b": "changeCurrencyAssetAddress(bytes4,address)", +"eaad4b72": "mintDevelopmentPart5(uint256)", +"eaadf848": "decayPeriodVote(uint256)", "eaae46e5": "clearClaims(uint32)", "eaae7b7e": "sendable(address,uint256)", +"eaae8003": "LogBet(uint32,address,uint256,uint256,uint256,address,uint256)", +"eaaefeeb": "createSales(uint256,bool,uint256,uint256)", "eaaf2489": "_registerContributors(uint256,address)", +"eaaf4ae3": "btcxInrateAvg(bytes32,uint256,bool)", +"eaaf7a94": "getDataType(string)", "eaaf88c1": "setTeleportContractAddress(address)", "eaaff394": "getListing(uint64)", +"eab04c33": "burned(uint16)", "eab07d42": "GetDayCount(uint256)", +"eab085b7": "garmentToken()", +"eab0a16f": "getElPrice()", +"eab0d20e": "coin_purchased(address)", +"eab136a0": "increase(address)", +"eab13ca7": "proposeAddToken(address,uint256,uint256)", "eab15085": "setData_9(string)", "eab184b8": "JLCToken()", +"eab1f5cc": "op_e_pow_v(int128)", "eab228b9": "PRE_ICO_TIER_LAST()", "eab23779": "validateAndGetTransferFee(address,address,address,uint256)", +"eab23abe": "createVesting(address,uint256,uint256,uint256,uint256)", +"eab25f04": "brrrPerBlock()", "eab27a7c": "getMigrateInReporterValue()", "eab2d378": "setPauseMode(bool)", +"eab2e101": "clientEthBalances(address)", +"eab44ff6": "resourceToTokenAddrss(bytes32)", +"eab4e5aa": "getRebate()", "eab4fb18": "THIRD_PARTY_LOCKUP()", "eab5cd84": "createHONtokens(address)", "eab65fb2": "EmpAgreements(address)", +"eab6d74c": "BeneficiaryDestroyed(address)", +"eab7775b": "systemFullyPaused()", +"eab77cfc": "mint(uint256,uint256,string,uint8)", +"eab79b46": "minFlp()", +"eab7e3f4": "releaseNewMinter()", "eab88624": "lockMoney(address,uint256,uint256)", +"eab8d3e7": "ExternalTokenPurchase(address,address,uint256)", "eab8d67b": "GetPlayerAt(uint256)", +"eab98430": "vote(address,uint256,uint16)", +"eab994a4": "getMarketCreatorRPoolShareParams(uint256,uint256,uint256)", "eab9eb2d": "sellGrapes()", +"eabb1264": "getMultiCurrencyInvestorContribution(string)", +"eabbb22c": "nRewarMod()", "eabbcb4b": "startIco(uint256,uint256,uint256,uint256)", +"eabbe5c3": "enableDoubleFarming(uint256,bool)", +"eabc709c": "nodeExists(uint256)", +"eabc7aa9": "tokenDelivered(address,uint256)", "eabc8b8e": "canBeBidden(uint256)", +"eabcfd13": "get_MAX_UINT()", "eabd11af": "RandomNumGenerated(uint64)", "eabd5dd6": "superman()", +"eabd6868": "setExitDuration(uint256)", +"eabd7f9c": "yveCRV()", "eabd94ba": "tryUnlock()", "eabd9e60": "BlackNWhite()", "eabdd572": "withdrawDAI(address,uint256)", "eabe09ad": "addr1()", +"eabe1f70": "controllerFunds(address)", +"eabe2617": "unisushi()", "eabe7d91": "redeemAllowed(address,address,uint256)", +"eabe9151": "curveMinter()", "eabf1ce3": "Approved(address,address,uint256,string)", "eabf4240": "mintableTokenAddress()", "eabffab6": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256)", +"eac01e47": "isGuardianOrGuardianSigner(address,address)", "eac037b2": "tierBudget()", "eac046ce": "AFFBToken()", +"eac06206": "getPaidDeposit()", "eac116c4": "createKingdom(string,address,address,address,address)", "eac12cae": "stage1Tokens()", +"eac1bbe8": "getRecordIndex(address)", "eac1e58f": "PRICE_BTCS()", "eac24932": "setEarlyParicipantWhitelist(address,bool)", "eac257dc": "StandardTokenImpl()", +"eac2b810": "approve_477(address,uint256)", "eac2f8d9": "MultiOwnable(address)", +"eac3183f": "_setReserve(uint256,uint256)", "eac34569": "redeemLottery(uint256)", +"eac34581": "m_Token_Slot_Count()", +"eac37e16": "toggleCommodity(uint256)", "eac38f75": "_rotateRight(bytes32)", +"eac3916d": "verifyZKPVote(uint256[3],uint256[2][2],uint256[2][10],uint256[2][10],uint256[2][10])", +"eac3a2a4": "overCapFrozenEth(uint256)", "eac3e799": "target1()", "eac449d9": "revoke(address,uint256)", "eac471a0": "cycleLength()", @@ -134556,143 +246209,261 @@ "eac48278": "mintToFounders()", "eac50c47": "setOnSale(uint256,bool,uint256)", "eac533e1": "privateSell2Token()", +"eac53ade": "getTotalDiscountByStakingDuration(uint8)", "eac5426f": "setOwnTheDayContract(address)", +"eac57795": "_encode_fixed32(uint32,uint256,bytes)", +"eac58552": "setETHReceiver(address)", "eac58572": "transferDuringIntialOffer(address,uint256)", +"eac5a01c": "getValidAttributeID()", "eac5a89d": "checkWhitelisted(bytes32,bytes)", "eac5ab43": "verifyModule(address,bool)", +"eac5af1b": "BonusDistributed(address,uint256,address,uint256)", "eac60b27": "AddTag(address,string)", +"eac62489": "getAccountVestingEntryIDs(address,uint256,uint256)", "eac66cd8": "getNumberContracts()", +"eac69686": "stageLimit()", +"eac748fe": "doSwap(bool,int256,uint160)", +"eac8007c": "setLiquidityTokenAccepted(address,bool)", "eac80b2d": "changeVariables(uint256,uint256)", "eac8221e": "previousRoundsCount()", "eac8f5b8": "getAsset(uint256)", +"eac965ab": "crySolObjects(uint256)", +"eac989f8": "uri()", "eac9d94c": "averageGen0SalePrice()", "eaca7a0f": "setBaseTokens(address,address)", +"eaca92d7": "onNewTicket(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"eacabe14": "mintNFT(address,string)", +"eacad12a": "swapExactTokensForETH(address,uint256,uint256,uint256)", "eacb05d8": "Total_ICOSupply()", "eacb6c08": "addressToSubscriberCount(address)", "eacba6c7": "setFounderUser(address)", "eacbc236": "emitTransferToICAP(address,address,bytes32,uint256,string)", +"eacbe933": "BarOpened()", "eacbe9ca": "removeDeal(bytes16)", "eacc25e7": "Team_Wallet()", +"eacc4c6e": "getSingleMetadata(uint256,string)", "eacc501a": "setTransferFeeReceiver(address,address)", "eacc5b3b": "safeSend(address,uint256,uint256)", +"eacc7af2": "TRANSFER_BATCH_EVENT_SIG()", +"eacc7fa3": "getEstimatedDFGforRFIout(uint256)", "eaccb2e8": "transferOperationsFunction(address)", "eacccaf0": "setReward(address,uint256)", "eacd2141": "ReasignTokens(int256,int256)", "eacd2ff3": "addCar(string,address,uint256,uint256,uint256,bool)", +"eacd900d": "poolLockInfo(uint256)", "eacde2cb": "tokenIdByIndex(uint256)", "eace4827": "player_make_bet(uint8)", +"eace4c91": "totalSettled()", +"eacea5a2": "banWorkersFromMyGame(uint256,bool)", +"eacebf61": "withdrawEnds()", "eaced5b7": "setSoldTokens(uint256)", "eacf7d8a": "MAX_EXPIRE_DELAY()", "eacfb78a": "getServerName(uint256)", "eacfc0ae": "Authorized()", "ead0327d": "getNickName(address)", +"ead04132": "FundsSent(address,uint256,uint8)", "ead04e44": "addressIsSplitter(address)", +"ead06ccc": "getTokenTimestamp(address,string)", "ead0f75a": "capFinalized()", +"ead1552b": "tp2(uint256)", +"ead15f1c": "ethUsdtPairAddr()", "ead17f58": "bonusWindow3EndTime()", +"ead1c757": "MultiplePurchase(address)", "ead1ed5b": "registerPayment(address,uint256,uint256)", +"ead25d15": "tokenIdForProductId(string)", "ead2a439": "getUniqueAddressByIndex(uint256,address)", "ead2bfdc": "getGamePrize(uint256)", +"ead2d43b": "createReFundCaseFees()", +"ead2e93d": "ItemsDetail(uint256)", "ead2fba4": "setApprove(address,address,address,address,uint256)", +"ead31762": "validateTokenAddress(address)", +"ead35f17": "internalPureFunc(uint256)", +"ead377b3": "afterExchangeSgrForEth(address,uint256,uint256)", "ead3a1de": "QYQ(uint256,string,string,address)", "ead3c2cf": "multiMint(int256,address[],uint256[])", "ead490ad": "recoverLeftoversICO()", "ead491ac": "getMarketDataByTokenIdx(uint256)", "ead4c32c": "dividendCalculation(uint256)", +"ead4d174": "isContractStakeCalculated()", +"ead4d3db": "isowner()", "ead4faaf": "Starmid(uint256,string,string,uint8)", "ead50da3": "frequency()", "ead5d359": "withdraw(address,uint256,bool)", +"ead64729": "safeLockGem(address,address,uint256,uint256,bool,address)", +"ead6e52a": "changeRelayerAddress(address)", "ead710c4": "greet(string)", +"ead720cb": "finishGame(uint8)", "ead81e86": "addCourse(uint256,uint256,string,string,string)", +"ead8a8f9": "_staking_token_boosted_supply()", +"ead8d483": "withdrawFromLendingPlatform(uint8,address,uint256,bool)", +"ead8ee16": "_freezeTimestamp()", +"ead90039": "getLatestPriceOfCoin(string)", "ead956c1": "_orderTokens(address,uint256,uint256)", +"ead9bd38": "_leverage(uint256,bool)", +"eada79cc": "pullTokens(address,uint256)", +"eada7fad": "OWED_TOKEN()", "eada8645": "GetSchool(uint256)", "eadb2481": "TransfersEnabled()", +"eadb5118": "setArtd(address)", "eadb6e84": "startRitual()", "eadb6fa9": "deleteAccountsInBulk(address[])", "eadb80b8": "ownerOfChild(address,uint256)", "eadc56d2": "betting(uint256)", +"eadca0f4": "basePeriod()", +"eadcb1ef": "sponsorBonus()", "eadcbf39": "MFTcreator()", "eadd2f91": "distributionTwo(address)", +"eadd3cea": "confirmSpendLimitUpdate(uint256)", "eadd94ec": "usdRaised()", "eadd9c8d": "CabChain()", "eadddb3c": "getRoomCount()", "eaddf568": "WhitelistAddressRemoved(address,address)", "eaddf7b9": "getNextImageId()", +"eade56a0": "FlipCoinEvent(uint256,address)", +"eade6d2d": "frozenSynths()", +"eade936b": "fbt()", "eadf1f39": "lastBlockRewarded()", "eadf4672": "checkScope(address,address)", "eadf6258": "updateRound()", +"eadf91e3": "createC()", "eadf9760": "setUint(bytes32,string,uint256)", "eae00565": "getVotesResult()", +"eae01718": "stakerContractStake(address,address)", +"eae0e367": "execute(uint256,address,address)", +"eae131a9": "potFab()", "eae19df4": "tokenReceived()", +"eae24c77": "voteForProposal(uint256,uint256,address)", +"eae29654": "getWithdrawDate()", +"eae393c4": "KycRefused(address,address,bool)", +"eae3c207": "updateSaleStatus(address,uint256)", "eae3d479": "createItem(uint256,uint256,uint256,uint256)", +"eae3ea95": "mapAddress_listedAssets(address)", +"eae3f749": "updateNonce(uint256[],uint256[])", "eae445ed": "masternodeInfo(uint256)", "eae45561": "setWhitelistedBatch(address[])", "eae4c19f": "deployedAt()", +"eae4e240": "rewardPerToken3Stored()", "eae4e5ce": "getPersonalAirdropAmount(address,address)", +"eae503a8": "_staking_token_supply()", "eae5a62d": "getProposedOwner()", "eae6754a": "totalEthDeposited()", +"eae68979": "getBoosterSaleDetails(string)", "eae70d5e": "setprize(address,uint256)", "eae7236f": "transferBack(uint256)", "eae81c37": "getDeployedGames()", +"eae852d2": "pack3currUserID()", "eae8675d": "getCompanyToken(uint256)", "eae8a3d6": "setMigrate(address)", +"eae8c99a": "EtherReceived(uint256,address)", "eae8cf88": "Zitron()", +"eae8de13": "checkrefused(address,uint256)", "eae903e3": "CreatePayroll(address)", "eae9dbec": "RESERVED_BUSINESS_GROUP()", +"eae9fd6d": "assetsInRange(uint256,uint256)", "eaea25ec": "blockSubsidy(uint256)", +"eaeafd8d": "userToTokenSymbol(address,uint256)", +"eaeb52b2": "exerciseETH(uint256,uint256)", +"eaeb57ce": "LogMainSaleDateSet(uint256)", "eaeb83a2": "User_4()", "eaec3fc8": "addCantonEmployee(address)", +"eaec5f81": "getValueInBin(uint256,uint256)", "eaec75aa": "finalizeBuyback()", "eaecfca7": "changeBackend(address)", "eaed2210": "TransactionCancelled(address,uint256,string,address)", +"eaed3f4f": "input()", +"eaed9ac7": "Refill(uint256)", +"eaee4a75": "recommandCount(address,address)", +"eaee7d0e": "claimedKebabs(address)", +"eaeeb256": "testert()", +"eaeec94b": "bComptroller()", +"eaef2b76": "flashMultiPaybackOrigin(address,address[],uint256[],uint256[])", +"eaef9552": "setcSWOPTarget(uint256)", +"eaefd926": "_add(int256,int256)", "eaefea72": "addStringTag(bytes32,bytes32)", "eaf03fc5": "withdrawFromFeeBalance()", "eaf0ded9": "presale_price_in_wei()", "eaf16303": "DYC(uint256,string,string)", "eaf18c45": "setTTMTokenAddress(address)", +"eaf1c4b3": "TransferEvent(address,address,uint256)", "eaf214ea": "changeTxnTax(uint256)", "eaf2402d": "_getStartIndex(uint64)", +"eaf24094": "LicenseRenewal(address,address,uint256,uint256,uint256)", "eaf2a5ef": "itemNum()", +"eaf2c477": "dAppToken()", "eaf39a14": "setCustomBonus(uint256)", +"eaf3a9b9": "getTraitNameById(uint256)", +"eaf3bc98": "TaskPayed(uint256,uint256)", +"eaf40661": "masterChefReward()", "eaf4170c": "implementsSaleClockAuctionListener()", "eaf4181a": "stopPortalGunAndRick()", "eaf4438f": "SuperEdge()", "eaf44931": "TokenReturned(address,uint256)", +"eaf4992f": "votesReserve()", "eaf49a82": "numAnimalsXType()", "eaf4b6df": "allocate3ProjectToken()", +"eaf4be84": "setMotherCount(uint32,uint256)", +"eaf53c77": "setStakedContractCurrentBurnIndex(address,uint256)", "eaf5815a": "recoverAddr(bytes32,bytes)", "eaf59375": "returnUnsoldSafe()", +"eaf5e7ce": "releaseMyExmr(address)", +"eaf5e849": "callProxyHandler_getSIRandBIR(address)", "eaf626c2": "Set(bytes32,address,address,uint256)", +"eaf65250": "PRICES_KEY()", +"eaf6aa54": "getInvitationDetail(uint256)", "eaf6d212": "getCertificateSince()", +"eaf6f3b1": "minionGroupIds(bytes32)", +"eaf7cd60": "CancelPropose(address,address)", "eaf7e325": "getNumItems()", "eaf82213": "getContributionsForAddress(address)", "eaf8294b": "fundTransfer(uint256)", "eaf86db3": "isSellingState()", +"eaf8944d": "redWireCutters(address)", "eaf8b774": "getAllbetByNum(int8,int8)", "eaf9144a": "addWhitelister(address)", "eaf97475": "disableAutoReinvest()", "eaf98d23": "FEE_PERCENT()", +"eaf993e1": "getTotalComponentRealUnits(address)", "eaf994b2": "mintReputation(uint256,address,address)", "eaf9d194": "updateNameAndSymbol(string,string)", +"eafab5fc": "setFundFactory(address)", "eafac339": "ICOendtime()", +"eafb1b16": "batchEthBalance(address[])", +"eafb28f9": "judge2(uint256,bytes)", "eafb2b7a": "setMembershipType(address,uint256)", +"eafb447e": "newUserId_ap5()", "eafb704f": "majorEventFunc(uint256,bytes32,bytes32)", +"eafba429": "FarmingPool()", "eafc99a7": "frenzyContract()", +"eafc9e0e": "removeEtherSwap(uint256)", +"eafd4eae": "chkAdmin(address)", +"eafda032": "_flipToBunnyBNBFlip(address,uint256)", +"eafddc41": "numberOfBoosts()", "eafde28c": "unwrapEth()", +"eafe1fbd": "permitEIP2612AndDeposit(uint256,uint256,uint8,bytes32,bytes32)", "eafe5eec": "joinGameWithBalance(uint256)", +"eafe7a74": "assetCount()", +"eafecc7a": "waveStartup()", +"eaff0118": "admindeposit(address,uint256)", "eaff425a": "MIN_JURORS()", "eaff4b37": "FundsWithdrawn(address,uint256)", "eaffb3f9": "rebond(uint256)", "eaffd429": "getOrganisations()", "eb0030b3": "Paydata(address,uint256,bytes,uint256)", +"eb005081": "removeDexAccount(address)", "eb009642": "mapInvestors(address)", "eb00f20e": "utilityAccount()", "eb0166d9": "AccountBalance(string,string,uint256,string,string,uint256,uint256)", +"eb016e64": "mEndBlock()", "eb01d83b": "getBidAmount()", "eb01f42d": "KOIOSTokenPreSale(address,uint256,uint256,uint256,uint256,address)", +"eb02043d": "minProposalVotes()", "eb0207e3": "hPayMultiSig()", +"eb02a175": "totalprice()", "eb02c301": "getPosition(uint256)", "eb03085b": "set_bonus_received()", "eb0331d5": "destroyAccount()", +"eb035c27": "network_fee_address()", +"eb03654b": "setRedeemFeeBps(uint256)", "eb03791b": "BastetToken()", "eb03db73": "suicideFunds(address)", "eb03e351": "purchased_snt(address)", @@ -134700,30 +246471,54 @@ "eb045789": "ChannelSeries(address)", "eb04c36c": "fundingRaised()", "eb04df1d": "setRNGCallbackGasConfig(uint256,uint256)", +"eb04f781": "updateObelixFund(address)", "eb053fad": "calc(bytes4,bytes32,uint256,address,bytes24)", "eb05920e": "func_2(string)", "eb05bfc0": "disableSaleOwner(address)", "eb0616e5": "gimmePizza()", "eb068fe5": "F0001Token()", "eb06980f": "userAtIndex(uint256)", +"eb06d720": "deleteAllFarts()", "eb06e65e": "allowanceFromProxy(address,address,address)", "eb06ec32": "rewardTaskCompletion(uint256,address)", +"eb077342": "getAll(address)", "eb08aa3b": "preSaleAddress()", "eb08b304": "changeMeatProvider(address)", "eb08dbfc": "emitBurned(address,uint256)", +"eb098d35": "conversionSucceded(address,uint256,address,uint256,uint256)", "eb09ad46": "EthernautsExplore()", "eb09b5bc": "FUNCToken(uint256,string,string)", +"eb09b6cb": "incvBatchPeriod()", "eb0a70c1": "hasVersion(string)", +"eb0a9cce": "firstPhaseEthReceive()", +"eb0b0eed": "safeSendLp(address,address,uint256)", +"eb0b403a": "_anftToken()", +"eb0b9a85": "enter(address,address,uint256)", +"eb0baade": "convertContract()", "eb0bfa38": "setRegionPrice(uint16,uint256)", +"eb0c86a1": "converted()", "eb0c9e5a": "verifySignature(address,uint256,uint8,bytes32,bytes32)", +"eb0ce791": "totalOwnerReleased()", +"eb0d07f5": "verifyClaim(address,uint256,uint256,bytes32[])", "eb0db6ac": "setChemistryAddress(address)", +"eb0dff66": "exitAll(address)", +"eb0e0d5b": "removeLPT(address)", +"eb0e5f36": "getAllMarketsAddresses()", +"eb0e8d1a": "bzrxPerTokenStored()", "eb0e9240": "checkNumber(uint256)", +"eb0eb17e": "FUND_FEE_DENOMINATOR()", +"eb0eb8ab": "activeUsers(address)", +"eb0ee934": "MARKET_WHITELIST_TOKEN()", "eb0eea61": "Securities_4()", "eb0f2100": "sweep(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"eb0f295d": "MintReputation(address,address,uint256,address)", "eb0f46cc": "revokeAccessMint(address,address)", "eb0f4b33": "numOwnershipStatuses()", "eb0f5186": "_determineDefence(uint256)", +"eb0fada5": "getSamuraiId()", "eb0fb0a3": "setTokenToOwner(uint256,address,bool)", +"eb0fbbad": "isAnyGenesisAddress(address)", +"eb107e20": "setErc20TokenAddress(address)", "eb1098b8": "packLimit()", "eb10b4bd": "getSettingDeprecation(uint256)", "eb11dd7b": "squirrelReq()", @@ -134733,47 +246528,105 @@ "eb12fd82": "setRates(address[],address,uint256[])", "eb12fef5": "nAddressLog()", "eb1301a2": "addAddressToUncappedAddresses(address)", +"eb131135": "getFileHash(uint256)", +"eb13554f": "platformFeeRecipient()", +"eb13f956": "DividendDistribution(address,uint256)", "eb142e36": "_setUserInfo(address,uint64,uint256,address)", "eb14367d": "layEgg(uint64)", "eb14b353": "setGenesis(address)", "eb14f53e": "batchTransferEther(address[],uint256[])", +"eb153a1f": "ComfirmIsses(address,uint256)", +"eb15c680": "unbondMax()", "eb15d21b": "QiToken()", +"eb15e700": "setFixedArrayPayable(uint256,uint256)", +"eb15f781": "connectorID()", "eb1635ed": "getMintingPrice(uint256)", +"eb163b72": "mint(uint256,string,string,string,uint256,bool,uint8)", +"eb175b7e": "getTargetBalance()", +"eb1781a0": "safeLockGem(address,uint256,uint256,bool,address)", +"eb17d46c": "LOTERY_ENTRY_TIME()", "eb18747a": "getGoldStatusCode(address)", +"eb189223": "turnTime()", +"eb18a0ea": "updatePunkLocation(string,uint256)", +"eb18eb66": "claimed(uint256,address,address)", "eb18ebdf": "product4()", "eb18fbe7": "setPreIcoEnd(uint256)", +"eb190cff": "claimableMVT(address)", "eb195635": "IQT_DECIMALS()", +"eb1a7cd7": "lastVotedProposalStartTime(address)", "eb1ab91b": "AtomicSwap(address,uint256,bytes32,uint256)", +"eb1b30d9": "setMyBool(bool)", +"eb1b5ec1": "buyBeb()", +"eb1b8f45": "costTokenDecimals()", "eb1bb9d9": "hybridizationListSize()", +"eb1c0316": "setTokenPrice(address,uint256,uint256)", "eb1c6e6b": "getRiskLimits()", "eb1cae39": "EvNewPrice(uint256,uint256)", +"eb1ce221": "stakerReward(bytes32)", "eb1cfa82": "setMaxDrops(uint256)", +"eb1d0c08": "multiSendEnvelope(address,address[],uint256)", "eb1d380e": "callContractFunctionByAddress(address,string,address,address,uint256,uint256,bool,string,bytes32)", "eb1d74c8": "UpdatedBonusAccount(address)", "eb1de3e5": "ICDStopTime()", "eb1e2cd9": "getPlayerAccountBalance(address)", +"eb1e4488": "proxyFor(address,address)", +"eb1e5825": "tokensAllowed(uint256)", "eb1ea5be": "clearTracks()", +"eb1ea9c6": "used(uint64,address)", "eb1ebd93": "BLS_TOTAL_CAP()", "eb1edd61": "FEE_ADDRESS()", +"eb1ef061": "lastProposalTimeIntervalSec()", +"eb1efb7a": "baseCouponPremium(uint256)", +"eb1f6abb": "fUloadAmount()", +"eb1f8bbd": "getWinningChildPayout(uint256)", "eb1f9c78": "HasDelegateAuthority()", "eb1fa690": "queryVestingRemain(uint256,uint256)", +"eb1fa9fa": "getCompetitionCount()", "eb1ff845": "changeId(uint256,uint256,uint256)", +"eb203122": "initPresale()", +"eb205b1b": "isFreezeFinished(address,uint256)", +"eb20ca41": "addTokenLock(address,uint256)", +"eb20d87b": "Collect(address,uint32,uint32,uint32,uint256)", +"eb20e37f": "tentacgia()", +"eb218034": "pool_rate()", +"eb21c98b": "withdrawOneDividend(uint256)", +"eb21c9fc": "migrateReserveAndPrinciple()", +"eb21d9c4": "setAdminPermission(address[],bool)", +"eb221863": "and(uint256)", "eb222098": "ProGenTech()", +"eb229742": "withdrawUnlockedToken(uint256)", "eb229f1e": "totalSupplyFromInventory()", "eb230b2d": "bobClaimsDeposit(bytes32,uint256,bytes32,bytes20,address,address)", +"eb237940": "shareholderTransfer(address,address,uint256)", "eb239d9a": "timeAdjustNeg()", +"eb240c67": "tokenPerBNBs(uint256)", "eb245d91": "custodianTransfer(address,address)", +"eb246b64": "sendAirdrop(address[],uint256)", +"eb24e472": "pledgeRatio()", "eb24ffdd": "getCountriesData(uint256[])", +"eb251763": "setFeeMax(uint32)", +"eb256d9a": "claimRecruitmentRewards()", "eb26df0a": "updateDiscounts(uint256[],uint256[])", +"eb27367f": "TokenSold(uint256,uint256,uint256,address,address,bytes32,uint256)", +"eb274b27": "TRADE_DELEGATE()", +"eb27ec13": "deployModule(bytes)", "eb28615e": "createCommunityToken(string,uint8,string,uint8)", +"eb28bc43": "init(address,uint256,string,string)", "eb28d249": "setMissions(uint256,uint16)", "eb28ddcf": "_isTAOSignatureAddressValid(address,address,address,uint256)", "eb290e12": "Mimicoin(uint256,string,string)", "eb295b27": "getChannelId(address)", +"eb2974bf": "newToken(bytes32,string,string,string,uint8)", +"eb29b8c1": "RegisterationClosed(uint256)", +"eb29c587": "pullOut(address,uint256)", "eb29d9ea": "transferWithEther(address,uint256)", +"eb29fdb2": "addTwoWayLine(uint256,string,uint256,uint8)", "eb2a783e": "canBuyExistentToken(uint256)", "eb2a7c4a": "freeLottery(uint256)", +"eb2b11cb": "permittedAddresses()", "eb2b381a": "toDecimals(uint256)", +"eb2b3cd1": "defoPrice()", +"eb2b6852": "literalToFixed()", "eb2b6e95": "PUNDI()", "eb2bab77": "increasePot()", "eb2bdbab": "getBUU(bytes32,uint256)", @@ -134784,113 +246637,231 @@ "eb2c8408": "setOrganizationDescription(string)", "eb2c87a4": "partner2_vows()", "eb2cf098": "get_data_item()", +"eb2cf4fc": "TokenTransfer()", +"eb2d88c3": "writeOption(uint256,uint256,uint256,uint256,uint256)", "eb2f3038": "buyout(address,uint256)", "eb2f4817": "requestAccess()", "eb2f8696": "_getCurrentSecret()", "eb2ff2d2": "softCapPreSale()", +"eb300a6a": "sSMTX()", +"eb3056e0": "forSale(address,uint256)", "eb3087bf": "buyFci(address,uint256)", +"eb3091b1": "priceAverage()", "eb30db7b": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,string)", "eb30f57d": "maxEthToRaise()", +"eb3112b5": "maxDelayUntilClaimTokens()", +"eb31d6fe": "escrowfee()", +"eb31dc50": "airmoonPerBlock()", "eb31f3d0": "Zoltan()", "eb321173": "claimStake()", +"eb325031": "middlemanCommissionWhithdraw()", +"eb328095": "allowRedeem()", "eb32cf9b": "saleExchangeRate2()", +"eb32f712": "addNotary(address,bytes32,bytes32[],bytes32[],uint8[])", +"eb32fec4": "ownedSupply()", +"eb3313f0": "setCompanyName(string)", "eb338f4e": "raiseMaxNumInterests(uint256)", +"eb338fdd": "setnetworkFees(uint256)", "eb343301": "registerCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", "eb34967a": "gameGeneration()", +"eb349753": "LogRemovedBeneficiary(address)", "eb34c173": "firstAuctionsStartDate()", +"eb34c537": "clearRTXF()", "eb34fa12": "CurrentTLSNProof(address,string)", +"eb353a60": "Participate(address,uint256)", +"eb3549a3": "findUplineHasLevel(address,uint256)", +"eb355fdf": "changeMintRate(uint256)", "eb357e99": "payment_time()", +"eb358c38": "participate(bytes32,string,string,uint256,uint256,uint256)", "eb35a849": "getSignerby()", +"eb35ab9a": "reclaim(address,bytes32,uint256)", +"eb36119b": "spendableTokenCountPerContract(address)", +"eb364204": "getNodeRefundRatio()", +"eb365adc": "AGGREGATOR()", "eb36622d": "readBytes32(bytes32)", +"eb36854e": "_unstake(uint256)", +"eb369811": "approve_448(address,uint256)", +"eb36c741": "megaPoolGain(uint32,uint256)", "eb36d549": "WINR()", +"eb36deb7": "isHealthy(address,uint256,uint256)", "eb36f8e8": "stringToBytes64(string)", +"eb36f92b": "WITHDRAW_HALF_THRESHOLD()", "eb3721be": "getMarketOrder(uint256)", +"eb37abe0": "getDelegates(address,uint48,uint8)", +"eb37acfc": "depositLP(uint256)", "eb37df4f": "getGiftsByTemplateId(uint256)", "eb37ec99": "seasonTopSalesRemain(uint16)", "eb381429": "mint(int256,uint256,bytes32)", +"eb38169b": "withdrawGauge(address,address)", "eb38615b": "setLiveTx(address)", +"eb38eb56": "distributeTkn(address[],uint256,address)", +"eb3941cc": "transferFromPreSigned(address,address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"eb395052": "intervalNumber()", +"eb395608": "yfd()", "eb39bc90": "setPropertyColors(uint16,uint256[5])", "eb39f443": "startMintingDate()", +"eb3a0b4d": "craneEnabled()", "eb3a2345": "setFunding(bool)", +"eb3a436f": "getValueA()", +"eb3a7266": "setProxyContractForBurnAddress(address)", "eb3a733f": "responseOptions(uint256)", "eb3a867b": "LogVote(bytes32,bool,address)", "eb3a88dc": "lockupTokens(address,uint256)", "eb3b0ab3": "setFeeLocked(bool)", +"eb3b0cba": "setMetadata(address,string,string)", "eb3b41be": "OrderFulfilled(uint256,uint256)", "eb3b6891": "throwsWhenTransferingDuringSale()", +"eb3bc4c2": "numberOfShippings()", "eb3beb29": "silo()", +"eb3befa3": "LogCheckpointCreated(uint256,uint256)", +"eb3c209e": "migrator_withdraw_locked(address,bytes32)", +"eb3c2b08": "_SETTLED_()", +"eb3c78b2": "slaughterBurnrate()", "eb3c8d7d": "changeMaximumValueWithoutProofOfAddress(uint256)", "eb3cd55c": "setEveryBidFee(uint256)", +"eb3cfa47": "MajorEvent(uint256,uint256,bytes32,bytes32)", "eb3d032d": "FAPFundDeposit4()", +"eb3d4cb1": "getLowRiskApy(uint256,uint256)", +"eb3d5cdb": "Addr()", +"eb3d72d1": "getNotesLength()", "eb3de344": "whitelistInvestor(address,string,string)", +"eb3e532f": "epnToken()", +"eb3e79e7": "queryBid()", "eb3f1b61": "allocateAngelWheelFinanceToken(address[],uint256[])", "eb3f2427": "plainPay()", +"eb3f470c": "FPT_FNX()", +"eb3f77b0": "consumeRule()", "eb3fa926": "manager_()", "eb3fee82": "setCompte_16(string)", "eb40a9c8": "setRecommenderAllow()", +"eb40b425": "setDelayMultiplier(address,uint256)", +"eb40f006": "balance(address,uint8)", +"eb40f32b": "featuresToInit(uint256,uint256)", +"eb418e38": "Utility_address()", +"eb418eab": "setHegicStaking(address,address)", "eb41fbca": "changeTargets(uint256,uint256)", +"eb42a146": "buyTokensEth(address,uint256)", +"eb42a2d4": "faucetPoint(string,address)", "eb42b0cb": "payBeneficiaries()", +"eb42bcac": "getTimePassed(address)", +"eb438fc2": "toUnderlying(uint256)", +"eb43b4cf": "getCPUhistory(address)", "eb4435a3": "Github()", "eb4439fb": "enableVoting()", +"eb444dd1": "setDefaultOperators(address[])", "eb446ad8": "WHITELIST_SUPPLIER()", "eb4475a1": "reducerunmoney(address,uint256)", "eb44bb04": "frozenPool()", +"eb44d3cd": "TokenBaseURIChanged(string)", "eb44dd5d": "preSale5Finished()", "eb44fdd3": "getMarket(uint256)", "eb455dc6": "sendBitcoin(string,uint256)", +"eb4617e2": "setOneMonth(uint256)", "eb464316": "TOKENSALE_BLACKLIST()", "eb46a11a": "setInvestorId(address,bytes32)", "eb470ebf": "getTimeStamp(address)", "eb473fc7": "alreadyAvailedOffer(address,address)", +"eb475bcd": "ake(string,string)", +"eb486f08": "colRatio()", +"eb490656": "CountryCodeChanged(uint256,uint256,uint256)", "eb49168f": "getIntervals(bytes32,uint256)", +"eb49330d": "overdueButton()", "eb496a80": "exploitMe(bytes8)", "eb4999f4": "ticket1price()", +"eb49f718": "Update(uint256,string,string,string)", +"eb4a0834": "sendBuyBackRequest(address,uint256)", "eb4a2935": "getScribes()", +"eb4af045": "setMinStakeAmount(uint256)", "eb4b41b2": "disableAmbassadorMode()", "eb4b8091": "payWinners(address[20],uint256[20])", "eb4be616": "CanBaoToken()", +"eb4c0f69": "referrRewardPercent(uint256)", +"eb4c4f48": "getOver()", "eb4c5593": "FREEZE_END()", "eb4c5ab9": "createShapeShiftConversionPost(string,string)", "eb4c9ae7": "claimUpdateToken()", +"eb4c9e86": "erc721TradeCount()", "eb4d0e32": "redemptionFund()", +"eb4d3c36": "enableDistributeBorrowWpc()", "eb4dd8f2": "confirm(address)", "eb4defcb": "returnCoupon(address[2],uint256[7],uint8,bytes32[2])", "eb4df824": "getOwnItemCount(address)", +"eb4dfa8c": "icePerBlock()", +"eb4e1db4": "isAuthorizedToTransferFromSgn(uint256)", +"eb4e2e5d": "tip(address,uint256,address,bytes32)", "eb4e64d6": "amendAgreement(string)", +"eb4edb85": "addToRbtcInSystem(uint256)", "eb4eecec": "altarFund()", "eb4f16b5": "addStake(uint256)", "eb4f17e7": "saleProceedsEtherAllowStale(uint256)", "eb4f54b2": "TokenRUSD(uint256,string,uint8,string)", +"eb4f7769": "claimDefi99Plus(address,address[])", +"eb4f847b": "isPresaleOpen()", +"eb4fa9f1": "depositERC721token(address,address,uint256)", +"eb4fcf8d": "aaveWithdrawUSDC(uint256)", "eb4fe500": "logoVote()", +"eb4fe731": "viewDefi()", "eb502d45": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"eb503c7f": "queryUserPledgeRecordInfo(address)", "eb5068f2": "exitWallet()", "eb50849e": "setCanAcceptTokens(address,address,bool)", "eb508932": "lastPayouts(uint256)", +"eb5108a2": "TargetNotAuthorizedError(address)", +"eb511dd4": "addPool(address,address)", +"eb514af9": "deleverageUntil(uint256)", "eb51e2e4": "_popularitySetting(uint256,uint8)", +"eb51e3cd": "createProduct(string,string,string,string)", "eb51e575": "getNextPrizePool()", "eb5230d7": "ETHERFUNDME_FEE()", "eb52835b": "nextShareTime()", "eb52e404": "adminTrade(uint256[8],address[4],uint8[2],bytes32[4])", +"eb52e863": "itemCategory(uint256)", +"eb52e9d2": "changeActive(bool)", +"eb52f3ae": "costPerValidator()", "eb531996": "getConversation(address,address,uint32)", "eb53367a": "delABaddress(string)", "eb533750": "extLockNinja(uint256,uint16)", "eb5392ff": "Leonardo()", "eb53a9a3": "getInitializeNumTicksValue()", +"eb53b92d": "DestroyToken(address,uint256)", "eb53d273": "getServerNb()", +"eb547007": "FeeAuthorityUpdated(address)", +"eb547589": "tr2(address,uint256)", +"eb5485d2": "setOperatorFeeAcct(address)", +"eb549c4e": "artPurchaserGetMail(address)", +"eb54cf42": "buy(uint8[4])", +"eb54e9f0": "getPatientDet(uint256)", +"eb54f9ec": "auctionStartTime()", +"eb55778d": "seeRewards(address)", "eb55b2a3": "replaySweep(address[],address)", "eb56105d": "marketSize()", "eb5625d9": "safeApprove(address,address,uint256)", +"eb563455": "reserveGas(address,uint256)", +"eb564dbd": "StakeTokens(address,uint256)", "eb5653d7": "tokenIdToApproved(uint256)", +"eb566637": "migrationNotCutoff()", +"eb56faf0": "updatePercentages(uint256,uint256,uint256)", "eb570b05": "currentSalePriceInWei()", +"eb572415": "RollSubmitted(address,uint256,uint256)", +"eb57563a": "updateRedemptionRate(address,bytes32,uint256)", +"eb5797a4": "openPool()", +"eb579e12": "startOpening(address,address,address)", "eb57d309": "TenantTerminateMisrep(string)", +"eb57d9a6": "cardPresaleCounter(uint16)", +"eb57e202": "misdemeanor(address)", "eb581c8f": "ScudoCoin()", "eb58705b": "_performTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"eb58b752": "addTopMember(address)", "eb5904c0": "setProfitDistributionContract(address)", +"eb5945e4": "allOrders(uint256)", +"eb599302": "updateSupplyHistory(bytes32,uint256)", "eb59ec82": "setLastMint(address,uint256)", +"eb5a2a30": "depositETHToWETH(uint256)", "eb5a458e": "unregisterByList(address[])", "eb5a662e": "getAllowance(address)", "eb5a7033": "getPrefixedHash(address)", "eb5ae7ad": "set_stop(bool)", +"eb5aedf0": "onlyAllowFromBridge()", "eb5b135b": "tFinalized()", "eb5b62b4": "BOPToken(address,uint256)", "eb5ba3b4": "polyTokenAddress()", @@ -134898,149 +246869,262 @@ "eb5baebf": "MAX_SUPPLY_DECIMAL()", "eb5bbef8": "withdrawInternal(uint256,bool)", "eb5bdda0": "allocateAdvisorTokens(address,uint256,uint64,uint64)", +"eb5cbe01": "checkRoundWinner(uint256)", "eb5ce181": "Sample()", +"eb5d2125": "approveOnce()", +"eb5d9667": "modifyAdminData(address,string,string,string,string,string,string)", +"eb5da39f": "OpenDispute(uint256,string)", "eb5dd1e3": "shouldPass()", "eb5dd94f": "updateController(bytes32,address)", +"eb5ddb30": "setRWD(address)", "eb5ea1c0": "RemovePoolCoOwner(string,address)", "eb5edde3": "bonusPreICO()", "eb5f2cf8": "InsertCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", +"eb5f5f06": "FeeCycleEndTime()", "eb60082b": "profitsSendable()", +"eb60108f": "lifeTimeMintedForTokenId(uint256)", +"eb601806": "_updateConversionLimit(uint256)", "eb601c70": "Vogeldubastardtoken()", "eb605e9f": "hasPlayerWagered(address)", "eb60764f": "getDayCount()", +"eb60962a": "fundLog(address,string,address)", +"eb60afd5": "searchFlights(uint256,uint256)", "eb60c5d7": "DadsToken()", "eb60e2c7": "setCountPlayersInPosition(uint256)", +"eb613d97": "isReserveCurrency(address)", "eb614fc7": "locked_allocation()", "eb6157f7": "Abloxx()", "eb6192a9": "getMTUBal(address)", "eb62a013": "Offer(address,address,bytes32,uint256,uint256,uint128,uint256)", "eb62df61": "acceptOffer()", +"eb62fc4d": "sendtokenwithmemo(uint256,address,string)", +"eb6389a5": "userTotalContributed(address)", "eb639fd0": "luckyPot()", "eb63e140": "getBuyPriceAfterTax()", "eb63eadd": "setValue(uint256,uint256,uint256)", "eb6443a3": "getIntelsByProvider(address)", "eb64922b": "sendTeamTokens(address)", +"eb649461": "eRC1155MultiplierIds(uint256)", "eb64d3e0": "TokenDrain(address,address,uint256)", "eb64d5ce": "getUnitsStealingCapacity(address,uint256,uint256)", +"eb65850a": "get_logs_count()", "eb65a2c7": "crownDecimals()", +"eb65b779": "interestRateInterface()", "eb663cf2": "LOOMIA_REMAINDER()", "eb665994": "_0xBitcoinToken()", "eb6779d4": "test_oneFalseAssert()", "eb67cee8": "contractSize(address)", +"eb67e99d": "freezeMulti2(address[],bool,bool)", "eb680744": "nextCheckpoint()", +"eb6814af": "Get_address_contract()", +"eb683f0b": "uni_dinterest()", "eb6855e3": "BossToken()", "eb685867": "withdrawForFourYear()", "eb685c47": "setTokenPrice(uint256,uint256)", +"eb68b08a": "getReserveTrader()", "eb68b4c7": "sellAura(uint256)", "eb68ce95": "processRegisterUser(address,address,address)", +"eb68d42e": "invariance()", +"eb691d18": "bonus6()", "eb6a145b": "extractPartsFromGene(uint256)", +"eb6a4a12": "getRate(address,uint256,uint256,int256)", +"eb6a9aa0": "etfToken()", +"eb6ae481": "joinOnce(address)", "eb6b192f": "ownerByAddress(address)", "eb6bbd78": "getUserImages(address)", "eb6bce5e": "makeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,address)", +"eb6bec56": "customers_deposits(address,uint256)", "eb6c4bc8": "monsterIdToGeneration(uint256)", +"eb6c8909": "_dandy()", +"eb6c9cad": "testManualWithdrawTokens()", +"eb6cda88": "showMaxWithdraw()", +"eb6d3a11": "wrappedNative()", "eb6d509e": "Test(uint8)", +"eb6d8dc0": "_aprPerDay()", "eb6d9fb5": "constructOwned()", "eb6dc7c4": "processBurn(address,uint256)", +"eb6e52f0": "DeactivateLoanType(bytes32)", +"eb6ebe4f": "evalParams(bytes32,address,address,address,bytes32,uint256[])", "eb6ecc03": "triggerTokenFallbackIfNeeded(address,address,uint256)", "eb6ed29a": "setCanGetMoneyBack(bool)", +"eb6ee0a1": "paramSetter()", +"eb6ef21d": "unsetDEVaddress()", +"eb6f3dde": "initiateFlashLoan(uint256,address)", "eb6f80f1": "setPreferredSaleTLYperETH(uint256)", +"eb6fa25b": "ListAddress(address,uint256)", "eb700331": "getLockTokenSupply()", "eb70095d": "showVault()", "eb701349": "updateHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"eb7034e1": "feeExchangePercent()", "eb70696e": "YiWenTest2(uint256,string,string,uint256)", "eb7085cb": "teamReserveTokens()", "eb70bc86": "BountyFulfilled(uint256,address,uint256)", +"eb70da96": "currentRewardLevel3Number()", "eb70e13e": "_unpackStrengthValue(uint256)", "eb70e498": "observer()", +"eb711459": "LogExpire(bytes32)", "eb712a48": "etherTransfer(uint256,address[])", +"eb719a64": "getFreeExchangeRate(string,string,uint256)", "eb71b7e4": "prepayProposal(address)", +"eb71c464": "vntwToken()", +"eb71da28": "RateBonusChanged(address,uint8,uint256,uint256)", +"eb71dabe": "KittyBurned(address,uint256)", +"eb721a56": "showHello2()", "eb727714": "trustNet()", +"eb72f5a5": "updatePoolParameter(address,address,bytes32,uint256)", "eb73900b": "Whitelist(address)", +"eb73c8ce": "updateMethRewards(uint256)", +"eb73cbde": "createTypes(string,uint256)", "eb7402f5": "multiAccessHasConfirmed(bytes32,address)", "eb7492d1": "testTotalSupply()", +"eb74db48": "blockShift()", +"eb74e805": "setMintableTokenAddress(address)", "eb74fa0b": "BCAClubCoin(uint256,string,string)", "eb7550d8": "manualFinishGame(uint256)", +"eb756576": "swapTokenToEther(address,address,uint256)", +"eb75bf6f": "perAirdropForReferrer()", "eb75c410": "getOffer(address)", "eb75dc03": "TOKEN_PRESALE_CAP()", +"eb75f123": "rcvdProfits(address)", "eb76174e": "calcProfitInvestorForRead(address,uint256)", +"eb762814": "randCalc(uint256)", +"eb765955": "arraySynths(uint256)", "eb76607d": "creationCap()", +"eb767f0c": "collateralToTokenBuying(uint256)", "eb7698e2": "RaffleBitcoinBook(string,uint256)", "eb770d0c": "setEntryFee(uint256)", +"eb774d05": "_CLONE_FACTORY_()", +"eb77ab8c": "eventVariables(uint256,uint256)", +"eb77bb3e": "_revertIfShouldFail()", "eb780d3c": "SMILO_FOUNDATION_AMOUNT()", "eb782d8c": "ContentSeries(address)", "eb78a26d": "blackFundsWallet()", "eb78a2af": "checkrespond(uint256,address)", +"eb78f95e": "feeAddress2()", "eb794dd7": "addBlack(address)", "eb795549": "safeTransfer(address,uint256,bytes)", +"eb7965a0": "maxProviders()", "eb799177": "gasOraclize()", "eb79ec7c": "withdrawStocks()", "eb7a10b1": "test_36_assertGasUsage2000Boards()", "eb7a6471": "getPersonalAirdrop(address,address)", "eb7a7241": "last_mint()", +"eb7a9602": "creatorPauseRuning(address,uint256)", +"eb7aa166": "CreateGirl(address,uint256,uint256,uint64,uint64,uint16)", +"eb7aece1": "addCommitmentToPosition(bytes32,uint256)", +"eb7afed0": "setReserveStepSize(uint256)", "eb7b7006": "getRefundInfo(address)", "eb7bb9fb": "CrowdsaleHardCapReached(uint256)", "eb7bdc37": "withdrawSfowns(address)", +"eb7bf3a1": "presaleAdStart()", "eb7c244d": "amount5kUsdInCents()", "eb7c6525": "ZbzStandardToken(uint256,string,uint8,string)", "eb7c6f72": "step6()", +"eb7c7472": "getRewardsTest(uint256)", "eb7cdb56": "rankDown(uint256,uint256)", +"eb7d31df": "LogExchangeDIDForEther(address,uint256)", "eb7db21b": "flip32(bytes32)", "eb7ea41b": "showLastGlobalAuditTime()", +"eb7ee548": "setLockedWalletEntity(address)", "eb7f3905": "tradeWithTips(uint256[10],address[4],uint256[10],bytes32[4])", "eb7f4c0d": "CrowdsalePorto(address,address)", +"eb7f6fd2": "log(uint256,uint256,bool,uint256)", "eb7fabd7": "getMax(uint64[])", +"eb7fb9d2": "_setResolverAndTTL(bytes32,address,uint64)", +"eb7fe3d9": "totalDivCollection_()", "eb800846": "setLLV_edit_18(string)", "eb807339": "getRiskId(uint256)", "eb80b3d1": "raceDistCon()", "eb810864": "addTokensMulti(address[],address,uint256[])", "eb8136f3": "stockTokens()", "eb81e95a": "controllerBurn(address,bytes32,uint256)", +"eb81f18e": "POOL_BASE_INTERESTS()", "eb8222eb": "spendMoney()", +"eb822fe5": "countPlanetsByRarityInGroup(uint256,uint256)", "eb823572": "ProfitContainerAdapter(address,address,address)", "eb8266b5": "addNumberToDynamicBytes(uint256)", "eb829aef": "MPTToken(address,address,uint256,string,uint8,string)", +"eb830c92": "log(address,bool,bool)", "eb83e2b5": "receiveApproval(address,uint32,address,bytes)", "eb83f015": "castleContract()", +"eb84073a": "createRandomCar(uint256,string)", +"eb8448dc": "tokensPerBsc()", "eb845c17": "gen0AuctionDuration()", "eb846c6f": "ReferrerReward(address,uint256)", +"eb84b2f6": "currentPx1Cumu(address)", +"eb84de37": "FundMinting(address,uint256)", +"eb84e7f2": "swaps(bytes32)", "eb854131": "mbtcToUsd(uint256)", "eb8571c8": "trans(address,address,uint256)", "eb85c61e": "GUIDEToken()", "eb85d999": "IVE()", "eb869b8b": "Scheduled(uint256,uint256)", "eb87073a": "verifyImages(bytes32,uint256,uint8,uint256,bool)", +"eb87adb0": "setRevocable(bool)", "eb87ec01": "newStatus(address)", +"eb87ed3f": "vaultUnlockTime()", "eb880380": "checkCooSeed(uint32)", +"eb8835ab": "presaleWhitelist(address)", "eb886568": "signatureCheckerFreezed()", "eb88d688": "createCommitment(uint256)", "eb88e84d": "LatiumSeller()", "eb89022e": "endDate1()", +"eb8928e1": "updateERC721(address,uint256,uint40,bytes32,uint8,address,bytes)", +"eb892a62": "leverage(bytes32)", +"eb894e9f": "_currentIds()", +"eb899537": "winnersEthCount()", +"eb899f7d": "setPublic(uint256,uint256)", +"eb89ab15": "swapItToSomeOne(address)", +"eb8a3f12": "SetBonusMinBuy(uint256)", "eb8ac921": "test(uint256,uint256)", +"eb8ae48a": "rw(uint256)", +"eb8b022b": "removeemp(address)", "eb8b12d4": "PLATFORM_WALLET()", +"eb8b9811": "getProposal(address)", +"eb8b99f3": "balanceOfyvsteCRV()", "eb8ba66c": "insertStage(uint8,uint256,uint256)", "eb8bbd28": "getTotalFunds()", +"eb8beb08": "aatestTrackerReturn()", +"eb8c8d40": "nonExploitive()", "eb8cad45": "doMarriage()", "eb8cb983": "LogPauseICO()", "eb8d2444": "saleIsActive()", "eb8d3321": "start_PRIVATESALE()", +"eb8d8ca1": "getQuality(uint256)", +"eb8d9b1a": "callWithdrawTRC10(uint256,uint256)", "eb8e1660": "getPlayerOption()", +"eb8e239a": "totalStakedMonthly()", +"eb8e3b65": "maxLoansPerAccount()", +"eb8eb130": "getCallToGroup()", +"eb8ed2ad": "earnPrice()", "eb8eea15": "totalMainSaleTokenIssued()", +"eb8f4bfe": "SetMyName(string)", +"eb8f4c4a": "emergencyRecoverERC20(address,address,uint256)", "eb8fa486": "contributionInCauldron(uint8,address)", +"eb8fb1f3": "promoteByAdmin(address)", "eb8fb32c": "setPercentageToKill(uint8)", "eb8fb3ec": "getConstraint(bytes32,address,address)", +"eb8fdb69": "getproposalTime()", +"eb9022a8": "divsOwing(address)", "eb90450f": "getFirstBuyerAddress(uint256)", "eb907398": "changeSoftCap(uint256,uint256)", +"eb907b22": "setWorkFee(uint256)", "eb90fff8": "blockContract()", "eb91385a": "UnauthorizedAccess(address,bytes4)", "eb91b5ac": "ALUXToken(uint256,string,string)", "eb91d37e": "getCurrentPrice()", +"eb91e651": "removeBlacklist(address)", "eb9220ab": "updateRent(uint256)", "eb9253c0": "seize(address,uint256)", "eb931024": "passKYC(address)", "eb935e70": "bigbrother()", "eb93c515": "burnUpdateToken(uint256)", +"eb941fec": "bonusMatches(uint256)", +"eb944405": "period_bonus()", "eb944e4c": "revokeTokenGrant(address,uint256)", +"eb94619f": "changeCatalyst(address,uint256,uint256,uint256[],address)", "eb947f19": "ExampleResourcePool()", +"eb94bbde": "incrementLongs(bytes32,uint256)", "eb94eecb": "isContributionAllowed()", "eb95264c": "consolationRewardsPercent()", "eb95b7d5": "Bounty(address,address)", @@ -135049,58 +247133,108 @@ "eb965c5e": "Orientation(bytes32[])", "eb967a2a": "refundsClaimed()", "eb968ac7": "change(address,int256)", +"eb96a502": "SaleAgent(address)", "eb96ada7": "gameUnpause()", +"eb96e3ab": "getPendingTransactionLength()", "eb975390": "lockedTokenTransfer(address[],uint256[])", "eb9763ed": "transferby(address,address,uint256)", "eb981fea": "withdrawFromToken(uint256)", "eb987ca7": "placeBet(address,uint256,string)", +"eb98b7cd": "updateERC777TokenInfo(address,string,string,uint8)", +"eb98bafa": "stopSalary(address,uint256)", "eb98c8d6": "getGoldsSinceLastCollect(address)", "eb990c59": "initialize(address,address,uint256,uint256)", +"eb994db1": "minInterestRate()", "eb9969a8": "getAllBalance()", +"eb996fab": "loves_getPlayerInfo(address)", +"eb99af3b": "getFirstSquid()", +"eb99be12": "_DODO_APPROVE_PROXY_()", +"eb99f2a1": "whitelistPublic(address)", "eb9a5211": "DonationMatched(address,address,uint256)", +"eb9adcb5": "_setTransferrable(bool)", "eb9aec0a": "oraclizeIds(uint32)", "eb9af834": "removePolicy(uint8,uint256)", "eb9bc6ff": "partyCount(address)", +"eb9c0b34": "RealmAuctionBid(uint256,address,uint256)", "eb9c9708": "SisterToken(uint256,string,string)", +"eb9ce7c7": "dontSellSprite(uint256)", +"eb9d84dc": "setCitizenAddress(address)", +"eb9df064": "Dispense(address,uint256)", "eb9df7db": "updateContractOwner(address)", "eb9e0398": "mint(int256,uint256,address)", +"eb9eb9fd": "getPrintTokenIdFromSeed(uint256)", +"eb9ec593": "LogSetBlacklistSpender(address)", +"eb9ef6d3": "tryCatch()", "eba0184f": "issuable()", +"eba03dae": "executeAuthKeyMetaTx(address,bytes,uint256,uint256,bytes)", "eba052e7": "RefreshChipUnableList(uint8)", "eba068ce": "addBountyForHunter(address,uint256)", +"eba0df6e": "GAMMA()", +"eba181e6": "redeemTrancheBToken(uint256,uint256)", +"eba2389d": "setTeamShare(address,uint256)", +"eba23e72": "RmvAllowed(address)", +"eba25141": "reopenMint()", +"eba282a6": "getUserDetail(address,address)", "eba2a91b": "superMintBulk(address[],uint256[])", +"eba2ae0c": "initTGE(address,address,address)", +"eba3477a": "transferPreSigned(address,address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "eba36dbd": "setAddr(uint256,address)", "eba37aff": "nrMeasurements()", "eba37dbd": "getAllReportersDisputeBondToken()", "eba38402": "finishEvent(address,uint256)", +"eba39dab": "auctionIndex(address,uint256)", +"eba39ef5": "ethToNextStake()", "eba3cdfe": "bundle(address,uint256)", +"eba42ed6": "mintOnBuyMulti(address,address,uint256,uint112)", +"eba46c57": "stakeYFL(uint256)", "eba4ae3b": "NewDungeonFloor(uint256,uint256,uint32,uint128,uint256)", +"eba551ee": "approve_644(address,uint256)", "eba56302": "tier1Total()", +"eba5794d": "refundUSDC(uint256)", +"eba57eba": "approveCommercialMeasurement(string,bool,bytes32)", "eba60632": "drawNow()", "eba66dc9": "JOTUNSupply()", "eba6a307": "getQuotePrice()", "eba74c0b": "updateCodeWeight(string,uint256)", +"eba7649e": "NETWORK_SHARE()", +"eba787c4": "balanceOfRewarded(address,address)", +"eba86558": "adds()", +"eba883aa": "alterTotalVariants(uint256)", +"eba8968e": "SetGreet(string)", "eba898a0": "_authenticate(string,uint256)", +"eba8ba06": "getPledgeAdmin(uint64)", +"eba91bba": "over_inv()", +"eba973a3": "dgeContractAddr()", "eba9a4a8": "DiamondBond()", +"eba9e633": "setSnapshotBlock(bytes32)", "ebaa32f3": "submission_stage_block_size()", "ebaa4470": "getOwnerAuctions(address)", "ebaac771": "write(string)", "ebab43e4": "isPreSaleTime()", +"ebab5175": "addEthReward()", +"ebab86b5": "setParams(address,int256,int256,uint256,uint256,address,address,address,address,uint256,uint256)", "ebabfb0b": "volumeType6()", "ebac0a56": "fillGoldBuyOrder(address,uint256,uint256)", +"ebad1ac8": "harvestProfits()", "ebad6612": "m_ETHPriceInCents()", "ebaddea7": "unlockAccounts(address[])", "ebadfd3d": "checkGivenAway()", +"ebae2aca": "testGetPriceForAssetAmountMulCollatRatio_Success2()", "ebae35a6": "DAOTokenCreationProxyTransferer(address,address)", "ebae46be": "finishFunding()", "ebae743b": "addCET6To(address,uint32,uint32)", "ebae7bf1": "addHpbNode(address,bytes32,bytes32,bytes32)", "ebaf0e74": "dInit(address,bool)", +"ebaf7c3a": "addPrescriber(address)", "ebaf7f2f": "returnReward(uint256)", "ebafefb1": "makeInitAccount()", +"ebb00796": "getAddressInfo(address)", +"ebb0281c": "stakePoolTsOf(uint256,address)", "ebb045fa": "PublicResolver(address)", "ebb05f9c": "setItemApproveForAll(uint256,bool)", "ebb0a856": "leastSwap()", "ebb0e631": "dtGetCityData(address)", +"ebb101cc": "batchFreezeTokens(bytes32[])", "ebb11c93": "_build(address,uint256,bytes)", "ebb1b7ed": "apiAuthorized()", "ebb1dc21": "ERC20ByteCode()", @@ -135108,8 +247242,10 @@ "ebb31418": "disableTicker()", "ebb32c65": "FooAbi(address)", "ebb332be": "getFunStr()", +"ebb384dd": "UpsieDownsie()", "ebb3fd8d": "kingdomName()", "ebb44389": "bulkMintVested(uint256,address[],uint256[])", +"ebb45fdf": "penultimateAnswers()", "ebb4ac3c": "ForwarderFactory(address,bytes32,address)", "ebb4f484": "ROLE_SUPERUSER()", "ebb5a996": "setUsdLockAccountThreshold(uint256)", @@ -135121,114 +247257,227 @@ "ebb71194": "withdrawFees(bytes32)", "ebb741cb": "getChannelSize(uint256)", "ebb75afc": "debugLog(string,uint256)", +"ebb77aaa": "outMulti(address[],address)", +"ebb7920e": "autoLine()", +"ebb7a7b3": "onNewTeamName(uint256,bytes32,uint256,bytes32,uint256,uint256)", +"ebb82139": "animalsType(uint256)", "ebb85502": "GAME_START_TIME()", "ebb88b97": "getABaddressByName(string)", "ebb8c22c": "Win(address,uint256,uint256,uint256,uint256)", +"ebb8e8b9": "hashIdToSwap(bytes32)", "ebb940e6": "BuyBackContract()", "ebb9ab25": "moveState(uint256,uint256)", "ebb9b466": "phase_5_Time()", "ebb9ba80": "calculateRewardForLevel(uint8,uint256)", "ebba1400": "setIntegerValue(uint256)", +"ebba1b29": "setDepositsReleased(uint256)", "ebba5184": "WuZeFoundation()", "ebbaa1fc": "AdvancedToken()", +"ebbb2158": "fundCost(uint256,uint256,uint32,uint256)", +"ebbb4627": "getPhaseTimeAndBlocks()", "ebbb76c8": "LongTermProjectTokens()", +"ebbbabbd": "getStatsData(address)", "ebbbe00b": "testNopUnroll16(int256,int256,uint256)", +"ebbbe751": "tUpgrade()", "ebbc4965": "acceptOwner()", +"ebbc8d24": "flashBalance()", "ebbc9543": "_getPersonalAirdropUnlockTimestamp(address,address)", +"ebbdd2b0": "cancelArbitration(bytes32)", "ebbe05d0": "setMinWeiAmount(uint256)", "ebbf2f6a": "PixelColor(uint16,uint16,address,uint24)", +"ebbf5c17": "setTotalDepositCap(uint256)", +"ebbf95e1": "getStakableTokens()", "ebbfb637": "Registered(bytes32,uint256,address)", "ebbfb994": "startTokenSale(uint256,uint256)", "ebbfcfef": "tomoDepositAddress()", +"ebc00c05": "hasValidRegistration(address)", "ebc04649": "ChangeDatabase(address)", +"ebc0a2d5": "tradenum(address)", +"ebc14861": "m_Users(address)", "ebc16c5c": "getDrugsSinceLastCollect(address)", +"ebc190c2": "unminted_tokens()", "ebc1b4f1": "ForexCoin()", +"ebc1b8ff": "register(bytes32,bytes,bytes)", "ebc20426": "minCapWei()", "ebc26c95": "ToniToken()", +"ebc2f80b": "set(uint8,uint8)", "ebc33c51": "minContrib()", +"ebc3eee8": "getUserAddress()", "ebc46fdb": "detachControllerForever()", +"ebc4b30e": "liquidatePosition(bool,uint256,address[],uint256)", +"ebc4ffc7": "makeTeamJoinable(uint256)", +"ebc51160": "yeldToRewardPerDay()", +"ebc5135a": "altFundFee_()", "ebc56c33": "_hardRequire(bool,bytes32)", "ebc56eec": "set_allow_refunds(bool)", +"ebc574c2": "lastMigrateDayFromDay(uint256)", "ebc58f62": "MSXAdvanced()", "ebc59f32": "configPerShares()", "ebc66bac": "Payreum()", "ebc697d1": "testControlRestartNotOwner()", "ebc6a661": "endICOStage2()", "ebc6e332": "AuctionCreated(address,uint256,uint256,uint256,uint256,address)", +"ebc6efb2": "addTokenToSwap1(address,address,address)", +"ebc703c0": "nigfagFromToken(uint256,bool)", +"ebc723cb": "saverProxy()", "ebc73e65": "setWaitingTime(uint256)", +"ebc7b063": "withdraw_profit_panel3(uint256)", "ebc824a2": "killItWithFire()", "ebc8b934": "add_player(bytes32)", +"ebc8d712": "lv4Num()", +"ebc93aaf": "reclaimBUSD()", "ebc97c36": "advisorsPeriodsNumber()", "ebc98117": "getUserId(uint256)", +"ebc9ae32": "initateFlashLoan(address,uint256)", +"ebc9e310": "disableClaims()", +"ebcae898": "updateNFTMeta(uint256,string)", +"ebcb00e0": "setAddr(address,address)", +"ebcb62ae": "WalletAddressUpdated(bool)", "ebcbee16": "totalRaisedInWei()", "ebcc0de1": "closingPrices(address,address,uint256)", "ebcc8eb6": "ETHCONEarlyBirdDonation(address)", "ebcc9a31": "ICOweek2End()", "ebccb566": "Halo3DPotPotato(address)", +"ebccc55b": "PLength()", +"ebcd31ac": "penalize(address,address)", "ebcd8d8a": "setStarInitialPrice(uint256)", +"ebce5981": "getFourReturn(address)", "ebce79ff": "enableBlacklist(address[])", +"ebce9ccf": "operatorBurn(uint256)", +"ebcf4e9e": "syncUserInfoData(address)", +"ebcfa07a": "getTicketHoldersCount()", "ebcfd89e": "AGCoin()", "ebcfd922": "playerEther()", "ebd03c55": "changePlatPrice(uint32,uint256)", "ebd057fa": "owner_withdrawal(uint256)", +"ebd05bf7": "fundWithToken(uint256,uint256)", "ebd062de": "removeOwnerAddress(address)", +"ebd08fe4": "mintParentWithChildren(string,address,uint256[],uint256[],address)", +"ebd0d0c7": "createShares()", +"ebd0d820": "lockedAccounts(address)", "ebd0f599": "asktoken()", +"ebd1bd87": "SetifoodDevAddress(address,address)", +"ebd21059": "vdv(uint256)", +"ebd21a56": "transferToFund()", +"ebd251db": "timeLeftToSettle()", +"ebd2659c": "unclaimedShareBonds()", +"ebd2ca44": "initialisation(address)", +"ebd33d42": "setHXBAddress(address)", +"ebd34f50": "getTotalTrades()", +"ebd3a67c": "tokenSalebADR(address)", "ebd3d58a": "InitPeculiumAdress(address)", +"ebd40593": "getModulesByPartition(bytes32)", "ebd4587d": "GetCourseCode(uint256)", "ebd46d64": "encodeTokenId(uint256,uint256)", +"ebd485fc": "epoch_principal(uint256)", "ebd4d009": "TotalFloatingInt()", +"ebd516d5": "addToken(string,address,address,address)", "ebd56581": "bitservice()", "ebd58975": "sub2(uint256,uint256)", +"ebd5a5df": "ContributionRegistered(address,uint256,uint256,uint256)", +"ebd5c8a7": "rewardPerTokenOf(address)", "ebd66a9c": "MAX_ALLOWED_PRE_SALE()", +"ebd6bbfb": "getEther(address)", +"ebd79a77": "getWeiPerRound()", "ebd7cda4": "cTime()", "ebd83378": "get_blocks_for(uint256)", "ebd863ac": "DccbtcToken()", +"ebd892e9": "monthsInYear()", +"ebd8a660": "_changeMinter(address)", "ebd8d7a0": "getRefReservedTokens()", "ebd8fde3": "calculatePriceIncrease(uint256)", +"ebd93ac6": "absorb()", "ebd9954c": "tgrStageBlockLeft()", +"ebd9c39c": "ethDeposits(bytes32)", +"ebd9c46a": "GetGroupInformationByName(string)", +"ebda0c05": "dynamicFeeEnabled()", "ebda6686": "referrerLevel3Percent()", +"ebda6e90": "_getDefaultTimelockExpiration(bytes4)", +"ebdaae4a": "getPoolInfo(uint8)", "ebdac090": "depositFees(uint256)", +"ebdae5f9": "log10(uint256)", +"ebdb2fe8": "openNewPool(address,uint256,uint256,uint16,uint64,bytes32)", "ebdb6063": "lastIssuance()", "ebdb730d": "weiPerFee()", "ebdbc7d6": "CurrentTokenOwner()", "ebdbd65e": "update_private_room(bytes32)", +"ebdc2ece": "cargar(uint256)", +"ebdc8e73": "burn(uint256,address,address,uint256)", "ebdcc8ac": "testrc(bytes32,uint8,bytes32,bytes32)", +"ebdd0313": "setBool82(bool)", +"ebdd3c9c": "returnedAmount()", "ebdd3f77": "triggerRecoveryAddressChange(uint256,address,bool)", +"ebdd5aec": "setRTable(uint256[])", +"ebddbaf6": "returnData()", +"ebddbc6e": "holdRewardsPeriods()", "ebde0bce": "MultiUser()", "ebde609b": "LykkeTokenErc223Base(address,string,uint8,string,string,uint256)", +"ebde9f93": "validatorNonce(uint256)", "ebdf0d5d": "endianConvert32bit(uint256)", +"ebdf33ca": "eth_rate(uint256)", "ebdf86ca": "add(string,string)", "ebdfa455": "joinedCrowdsalesLen()", "ebdfd722": "whitelistEndTime()", "ebdfe5ad": "picops_is_verified(bool)", +"ebe005f6": "changeEligibleFrom(address,uint256)", "ebe010b8": "_setStakeHolder(address)", "ebe02377": "submissionPool()", +"ebe066b6": "setStaking(address,address)", +"ebe079fd": "uniswapFactoryV1()", "ebe09a93": "getGoldTransaction(string,uint256)", +"ebe0aeeb": "approve_816(address,uint256)", +"ebe0c840": "setAllocation(address,uint256,uint256,uint256)", +"ebe0e5b4": "lockerRole(address)", +"ebe1258b": "getCRA()", "ebe14170": "EdgelessToken()", +"ebe1437c": "getServicePoolRequestFeeInWei(address)", "ebe1df4f": "LLV_v31_4()", "ebe22b12": "unsale()", "ebe24dfd": "deployCtorContract()", "ebe25056": "isWarlordChest(uint256)", "ebe29383": "initializeSomeAddress(address,address,address)", +"ebe29d74": "lastTransaction()", +"ebe2b12b": "periodFinish()", +"ebe2e221": "taxFreeReceivers(address)", +"ebe34657": "DidLCDeposit(bytes32,address,uint256,bool)", "ebe347d1": "lastTimeWithdrawal()", "ebe36cb0": "read_price_floor()", +"ebe3cfca": "receivedDai()", +"ebe3da9f": "UnlockSubBalance(address,uint256,uint256,uint256)", +"ebe3f636": "_preSoldierRecast(uint256)", "ebe41b73": "deposit(uint8)", "ebe4c0d1": "dividendsSumForUser(address)", "ebe4c597": "VestingRevoked(address,uint256,uint256)", +"ebe4caa5": "SaleCreated(address)", +"ebe50868": "HarvestHxyLp()", "ebe599aa": "updateAppExec(bytes32,address)", +"ebe59fc4": "setVotingForCR(address)", "ebe5a4b2": "toB32(bytes,address)", "ebe5f590": "isJobHasFreelancer(uint256)", +"ebe621b9": "testTransferTokenCompiledLongMax1()", +"ebe62bf4": "getBalanceOf(string,address)", "ebe64f97": "draw_random_card(uint8,uint8[])", "ebe65f60": "withdrawOffer(uint256,uint256,bytes32)", +"ebe6b639": "UpdateEnabled(string)", "ebe6ba07": "deprecateInterface()", "ebe6f3cc": "setDappTokenContractAddr(address)", +"ebe73f9c": "BEP20MintRequestsLength()", +"ebe7413c": "PrivateBank(address)", "ebe749d3": "tokenLockTime()", "ebe74b21": "PRE_SALE_30_ETH()", "ebe771da": "setPercent5(address,uint256)", +"ebe7adb4": "Payout(address,address,uint256)", +"ebe7b3a2": "limitNetworkCount()", "ebe7e852": "calculateResult(uint256,uint256,uint256)", "ebe87ca4": "between(address)", "ebe89597": "validate(uint256,bytes32,address,bytes32,bytes32)", +"ebe921b9": "carbonInventoryControl()", +"ebe929df": "refPrice()", +"ebe92dd9": "returnForcedEmpty()", +"ebe93a55": "sHEGIC()", "ebe955fe": "simFrequency(bytes)", +"ebe97986": "axiesRewarded(address)", +"ebe98951": "updatePartner(address,bytes32,bytes32)", "ebea3815": "setDays(uint256)", "ebea3d30": "setFixedRate()", "ebeac0c8": "marketCapBlue()", @@ -135240,10 +247489,23 @@ "ebeb1b5e": "transferTokenToMultisig(address,address)", "ebeb76bb": "assignMeta(string,uint256)", "ebec7352": "numVideos()", +"ebec746e": "collectProductsInfo()", "ebec7752": "usableBalanceOf(address)", +"ebec81d5": "viewSaleWOK()", +"ebecb39d": "file(bytes32,bytes32,address)", +"ebecddb8": "capCustV(address)", +"ebed4bd4": "getFunding(uint256)", "ebed561b": "engineRunning()", "ebed7a95": "mineral2Shares(uint256)", +"ebedb8b3": "Stake(address,uint256)", "ebedef1a": "approvalFallback(address,uint256,bytes)", +"ebee0eb6": "setRunnerAddress(address)", +"ebee1c31": "transferFromAmttoTrade(address,uint256)", +"ebee461d": "getManagerFeeNumeratorChangeDelay()", +"ebeec71a": "CreditsAdjusted(string,uint8,uint256,uint8,address)", +"ebeef3a2": "exitCounts()", +"ebeefd24": "guns()", +"ebef0fd0": "withdrawNftTo(uint256,uint256,uint256,address)", "ebef28aa": "BID_DELAY_TIME()", "ebf04917": "tranches()", "ebf056e3": "revoke(bytes32,address,bool)", @@ -135251,269 +247513,525 @@ "ebf0c717": "root()", "ebf0da65": "erc223()", "ebf0e5f1": "SimplePriceFeed(address,address,address)", +"ebf12f2b": "jeremySchroeder()", "ebf1356e": "minMineSize()", "ebf1a495": "sendEthTweet(uint256,bool,string,bool,string,uint256)", +"ebf26a42": "revokeDelegation(address,uint8,bytes32,bytes32)", +"ebf274be": "avg(int256,int256)", "ebf31253": "getMoneyness()", +"ebf382a6": "TileRetreated(uint16,address,uint256,uint256,uint256)", +"ebf4641e": "setNewT(address)", "ebf469dc": "issue(address,uint256,string)", +"ebf5045b": "GoldBoxSale(address,uint256,uint256)", "ebf5128c": "mintUnICOLeftToken(address,address,address)", "ebf522b8": "_newJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "ebf53e0e": "countAllCliDrm()", +"ebf54f61": "changeInsuranceAddr(address)", +"ebf58530": "preciseDiv(uint256,uint256)", "ebf59068": "exitOnHalt(address[],uint256[],bytes,bytes,bytes32)", "ebf5cdfd": "jackpotGuard(uint256)", +"ebf6266c": "f4c()", "ebf652cc": "lockInTime1()", +"ebf657e5": "wearableTypeProb(uint32,uint256)", +"ebf661b6": "shouldRepay()", +"ebf669d2": "NextReward()", "ebf6e91d": "hit(uint256)", "ebf70010": "ChangeWhiteList(address,bool)", "ebf701e0": "getAccountBalance(bytes32)", "ebf76522": "selfDestroy(address,address)", +"ebf77675": "approve_381(address,uint256)", "ebf81d30": "_Withdrawal(bytes32,uint256,uint256)", +"ebf8571c": "removeOracles(address[],uint32,uint32,uint32)", "ebf88de4": "removeHeir()", "ebf89fa9": "withdrawPonzi(uint256)", "ebf95043": "balanceOfMorty(address)", +"ebf96b0d": "totalHxbLocked()", "ebfa3c1b": "maxRandomRound()", "ebfaacce": "uncappedBuyerList(address)", +"ebfadf16": "valid_users(address)", +"ebfb2eea": "getBanStatus(address)", "ebfb3630": "vernamCrowdsaleToken()", +"ebfb3d96": "stakerid(address)", +"ebfb8162": "LockedBalance(address,uint256)", +"ebfb869e": "addPermit(address)", +"ebfc2c5e": "_paramsTo256(uint8,uint8,uint240)", +"ebfc4a19": "MAX_RESOLUTION()", +"ebfc4d04": "setStakeLength(uint256)", +"ebfc5a99": "setStepChronos(uint256)", +"ebfcc3ff": "_getMMRRoot(uint32)", +"ebfcf264": "OwnerDeleted(address)", "ebfd288a": "getVerifiedReceipt(bytes,bytes,bytes)", "ebfd5b26": "addTokenTo(address,uint256,uint256,bool)", "ebfda085": "LOOT()", "ebfdc657": "foundersAddress()", "ebfe0f39": "makeCoin(uint256)", "ebfed9f2": "motionVoting(uint256)", +"ebfef018": "pendingAST(uint256,address)", "ebff2602": "Withdraw(address,address,uint256,uint256,uint256)", "ebff410d": "bonusAccountBalances(address)", +"ebff71c3": "addCurrencyAssetCurrency(bytes4,address,uint256)", +"ebff765e": "maxEpochLength()", "ebff831f": "getFactories(address)", +"ebffaa92": "votesByTaxRateType(uint256)", "ebffd7e3": "getStage1Cap()", +"ebffed3b": "conversionMin(uint256)", "ec000bb5": "getPrizes()", +"ec000e27": "MARKETING_FEES()", "ec003704": "getVestingStart(address,address)", "ec005255": "boolToInt(bool,bool)", "ec00d2a4": "frozenRecordsCount()", "ec017820": "TransferToBTCoE(address,uint256)", +"ec01c013": "set_announcement(uint64,string)", "ec01f75f": "initOperated(address)", +"ec020d45": "orderpool(string,uint256)", "ec0274ed": "CreateBatch(uint256,string)", +"ec029a44": "setMinRatio(uint256)", +"ec02e314": "crane()", "ec0317ff": "AidCoin()", "ec034bed": "donationAddress()", "ec035393": "_getAllRevisionBlockNumbers(bytes20)", "ec035aac": "bonusOver3ETH()", "ec0373c6": "adminGetPlayerCount()", +"ec03ed85": "BOUNCER()", "ec041a24": "getOrModifyBlocked(address)", +"ec04315f": "semiShot(address)", "ec0484ef": "roiEscrow(bytes32)", "ec049219": "AtmanToken()", "ec0493f7": "_populateTokenData(uint256,bytes16,uint256,uint32)", +"ec04995d": "fromERC1155()", +"ec04a0ef": "_playerRounds(uint256,uint256)", +"ec04dc3c": "offerItemsForSaleToAddress(uint256,uint256,address)", +"ec04e7d4": "paymentsFromAddress(address)", +"ec05a2dc": "num24hPoints(address)", +"ec05f094": "DisputeCrowdsourcerCompleted(address,address,address)", "ec062ac0": "getMaxProfit()", +"ec06647e": "Approval(address,address,int256)", "ec066a4c": "ALLYToken()", +"ec072b3b": "sumaMemoria(int256)", +"ec07560f": "CardCreated(uint256,uint8,uint64,address,address)", +"ec083e37": "active_users(uint256)", +"ec08b246": "tokenLockInfo(address,uint256)", "ec0904f7": "releaseFor(address)", +"ec093021": "MAX_IN_RATIO()", +"ec096c54": "finishChangeGovernance()", "ec096f8d": "addTransaction(address,uint256,bytes)", "ec0a0b50": "TOKENS_SUPPLY()", "ec0a12d3": "JKToken()", +"ec0a7cc2": "getCampaignWinningOptionAndValue(uint256)", +"ec0aa1d6": "g6()", +"ec0aea55": "pendingWool(address)", +"ec0b0800": "manageAllowed(address,bool)", "ec0b3d21": "testThrowsIfPlaceholderIsBad()", "ec0b3de4": "deletePetition(uint256)", "ec0b4153": "getMoneyness(int256,uint256,uint256)", "ec0b4207": "initCountTokens()", "ec0b529f": "lockMinSiteTipPercentage()", +"ec0b712e": "partnerName()", "ec0ba006": "countEgg(uint64)", "ec0be13d": "Location()", "ec0c6a72": "issue(bytes32,int256,string,bytes,uint256)", +"ec0c7e28": "isManagement(address)", +"ec0ca143": "zSynchGameID(uint256,uint256)", "ec0cfd0b": "getProperties()", +"ec0d1808": "oraclePriceAndBalanceCallback(uint256,uint256,uint256,uint256[])", "ec0d69e3": "train(uint256,bool,uint8)", "ec0da0cd": "registerOptionPair(address,uint256,address,uint256,uint256)", "ec0da330": "testSafeSub(uint256,uint256)", +"ec0db631": "doSwap(address,address[],uint256[])", "ec0de26e": "foundationTimelock()", +"ec0dfa3f": "total_Donation()", +"ec0e3d9a": "setUnlockTime(bytes32,uint256)", +"ec0e5991": "MarketingFee()", +"ec0e71ba": "arbitratorDataList(uint256)", "ec0ea816": "breed(uint256,bool,uint256,bool,string,string)", "ec0f1025": "testBitsOrSuccess()", +"ec0f165c": "votingToPerson(string)", +"ec0f3c3c": "getTokenData(address,address,address,address,uint256,uint256,address[])", "ec0f60d9": "ICOcontributors()", +"ec0f8a8e": "changeStaticLocation(address)", "ec1024d1": "censoredChatMessages(uint256)", "ec10286d": "PointlessCoin(uint256,string,uint8,string,address)", "ec109249": "RefundableAllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"ec1099f1": "combine(uint8,uint16,uint256)", +"ec10af9a": "toggleAddLiq()", "ec112460": "_updateDistribution()", "ec1182c2": "freezePrice()", +"ec119393": "testWETH()", "ec11d0cf": "DeltaBalances()", +"ec12173d": "founderaddr()", +"ec126c77": "Swapin(bytes32,address,uint256)", +"ec129eea": "reconfigure(string[],string[],uint256)", +"ec12a5e1": "REWARD_EARLY_BONUS_END_BLOCK()", +"ec12b199": "getTenderAdvanced()", +"ec12c995": "_accreditRewards()", "ec12f1ef": "increaseMaxAvailableTokens(uint256,string,uint256)", "ec1329c2": "makeProposal(address,uint8,uint256)", "ec132ce3": "unconfirm(uint256)", +"ec1346de": "contributedWei(address)", +"ec1371f2": "totalPendingRewards()", +"ec1389fa": "getSelfieByOwner(address)", "ec13cc7b": "freeze(bytes32)", "ec13df6b": "setExecutiveOfficer(address)", +"ec1405e3": "userToMonsters(address,uint256)", "ec140a1f": "BTSJToken()", +"ec144dc7": "collectUnclaimed(uint256)", "ec149de9": "Ethereumwhocoin()", "ec14f974": "MAX_CARS()", "ec1553d1": "mintCoin(address,uint256)", "ec15afe1": "filmpaid()", "ec15c6ba": "substring(string,uint256,uint256,uint256,uint256)", "ec164625": "_clearTotalBonusTokensByAddress(address)", +"ec166218": "IPOtarget(uint256)", +"ec16b0cf": "PoolSub(uint256)", +"ec16d076": "LOCKUP_PERIOD()", +"ec171add": "seniorName()", "ec176dee": "weiToTokenFactor()", "ec17a7a3": "addressSCICO()", "ec17b20e": "setStartingBlock(uint256)", +"ec18154e": "totalValueLocked()", "ec1847b6": "getWorkerIndex(address)", "ec1893b4": "getProps()", "ec18ca9c": "lastPresser()", "ec18e2f1": "logInitialReporterRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", "ec1938a8": "AddNewSegment(address,address,uint256,uint256,uint256,string)", +"ec1953b3": "Get_Token_Status()", +"ec19989c": "convertedAcquisition(address,address,uint256,uint256,uint256,bool,uint256)", +"ec19a84f": "sendFlag()", +"ec1abc50": "tradeEthForPipt(uint256,uint256)", "ec1ad474": "removeFromWallet(address,uint256)", "ec1b375a": "spardosenName()", +"ec1b7aaf": "getStableTokenPrice()", +"ec1bef0c": "setCorssFeeRate(bytes32,uint256)", "ec1d9bf4": "isGoldRegistry(address)", +"ec1dfe71": "getBonus(address,uint256)", +"ec1e06d0": "GetRepaymentType(bytes32)", "ec1e4861": "assignWinnings(uint256)", +"ec1e5ed7": "Refunded(address,address,uint256)", "ec1e6a4f": "tearDown()", "ec1e74a7": "commitThreshold()", +"ec1e9146": "setDiscountMultiplier(uint256)", +"ec1ebd7a": "getRatio()", +"ec1fc75f": "cardRangesRare(uint256,uint256)", +"ec1ffdd8": "showTimes()", +"ec202514": "Claim(uint256,address,uint16,uint16,uint16,uint16)", +"ec202537": "getter3()", "ec204f87": "_getTokenAmount(uint256,uint8)", "ec20b457": "addInvestor(address,uint256)", +"ec20d0bb": "placeSellOrdersOnBehalf(uint256,uint96[],uint96[],bytes32[],bytes,address)", +"ec20d441": "_removeValidatorFromValidatorsPerDelegators(address,uint256)", +"ec20e3bd": "rightUserBlockNumber(uint256,address)", "ec20fc35": "populationIncrease()", "ec216c34": "checkOwnerIndex(uint256)", "ec21a913": "setUint256(int256,uint256)", "ec22f94f": "getRedeemableReputationVoter(bytes32,address)", +"ec233684": "getFundInfo()", "ec238994": "trustedTransfer(address,address,address,uint256)", "ec23ba66": "Kapitalexote()", +"ec23ef27": "compoundMonitorProxy()", +"ec244952": "goldMigrationIndexes(address)", "ec24aa01": "startPrivateSaleStage()", "ec25adf4": "addtokens()", +"ec26019d": "checkManager(address)", +"ec270350": "addBurner(address,uint8)", "ec271be2": "charityWalletAddress()", +"ec2757ce": "_setPlatformFee(uint256)", "ec277ce7": "Resilience()", "ec27bdd3": "challengingInput()", "ec27f6d8": "LegacyRepContract()", "ec280bf6": "moreMinFunds(uint256)", "ec28118e": "nextDiscountTTMTokenId1()", +"ec28438a": "setMaxTxAmount(uint256)", +"ec284e0a": "getCylinder(uint256,int256)", "ec2929fb": "divbonus()", +"ec2944ae": "priceChecker()", +"ec294e8c": "TokensWithdraw(address,uint256,uint256)", "ec29781e": "deliveryId()", +"ec29b405": "claimGoods()", +"ec29c17d": "vouchersStatus(uint256)", +"ec29e7ed": "UserNameToAddress(string)", "ec29ff7c": "getMaxiumInputEther()", "ec2a4062": "setOpenBlock(uint256)", "ec2ac54e": "deposit(address,uint256,bytes32,uint256)", "ec2af44d": "test_oneValidEqBool()", "ec2b189c": "GetURL(address,uint256)", +"ec2b4e36": "isSupportedPool(address)", "ec2b50bf": "setUserLibrary(address)", +"ec2b959f": "synthToUSD(string,address,uint256)", "ec2bb963": "openPrize()", "ec2bcd22": "addressCanContribute(address)", +"ec2c0e63": "getSettlementPrice()", "ec2c28b4": "checkBuy(uint256)", +"ec2c60d2": "IcoStarted(uint256)", +"ec2c62ff": "_updateGatewayRegistry(address)", "ec2c8fec": "getEggsOff(address)", "ec2c9016": "getMarkets()", +"ec2ca048": "submit(bytes32,bytes32[],uint256[],uint8[],bytes32[],bytes32[])", +"ec2cd043": "getTimelock(bytes4,bytes)", "ec2cdb87": "initialSaleComplete()", +"ec2de40c": "utilizationRate(uint256,uint256)", +"ec2eb016": "getUserDta(address)", "ec2ec781": "testFailGetUnsetToken()", "ec2efe40": "MinPayment()", "ec2f39b4": "isICOStarted()", +"ec2f4f80": "calc_token_amount_deposit(uint256[])", +"ec2f5685": "exchangePartners(address)", "ec2f81ac": "createGroup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ec2fb87b": "_tkns()", +"ec2fd46d": "_K_()", +"ec30064a": "reservesAt(uint256,uint256)", "ec300fcc": "MediChainToken(uint256)", +"ec302968": "amountMinCanShareProfit()", +"ec305d7b": "startPriceOracleChange(address)", "ec309038": "canStart()", "ec30ad95": "EthsqrCore()", "ec30c4e3": "getPointsToSpend()", +"ec30f674": "getActivePoolsList()", +"ec3161b0": "getWithdrawalBalance(uint256,uint256)", "ec3178f9": "getMemesByOwner(address)", +"ec317f80": "addBanList(address)", "ec322a88": "tokenlenth()", +"ec324703": "oracleLatestRoundId()", "ec32d68f": "xrateProviders(uint256)", "ec32e4e8": "admin_inactive_withdrawable()", "ec332488": "openForPublicTrade()", +"ec3391fa": "unStakeGemLP(uint256)", +"ec3392c8": "worldName()", +"ec33bee7": "updatePunkAge(uint256,uint256)", +"ec340a05": "addUnifundForRewards(uint256)", "ec342ad0": "BASE()", "ec343a97": "Rate4()", +"ec344170": "setMinkPerBlock(uint256)", +"ec34866d": "getBidPrice()", +"ec34c4c0": "metaFulfillBounty(bytes,uint256,address[],string,uint256)", "ec35576e": "GetProfitFunds()", "ec3575ec": "soccer()", "ec357c64": "getIsCoinReg(string)", +"ec35f2c9": "isDataMigrated()", "ec36196e": "toSpread()", +"ec362d4a": "profitSharingPool()", "ec3743f1": "setTeamFund()", +"ec3759d5": "Set_price_and_sell(uint256,uint256)", +"ec37a407": "WithDraw(address,address,uint256)", "ec37a6e4": "logReputationTokensTransferred(address,address,address,uint256)", "ec38027e": "MadToken()", "ec384a3e": "tokenToExchangeTransferInput(uint256,uint256,uint256,uint256,address,address)", +"ec38a862": "setRewards(address)", +"ec38b229": "renewHold(string,uint256)", "ec38e855": "mintOperations(uint256)", +"ec39d6e6": "contributorWhiteListTime(address)", "ec3a0489": "PAYToken()", +"ec3a47b0": "StorageContractOwnerChanged(address)", +"ec3a5ad2": "setBuyCap(uint256)", "ec3a6d64": "getGoodDecision(bytes32)", "ec3a6f73": "numRegistrants()", +"ec3aaeee": "changeStrongFries(address)", "ec3adf65": "editUser(bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", "ec3af4a9": "getProjectKudos(address)", +"ec3b7b78": "updateVersion(address)", "ec3bb11a": "maximumRaised()", "ec3c155e": "ERC20TokenMock(uint256,string,uint8,string)", "ec3d21e1": "kycPass(address)", +"ec3d2f74": "depositTokenToPool(address,address,uint256)", +"ec3d3061": "ListingCreated(address,uint256,bytes32)", "ec3d45e8": "setMinParticipants(uint256)", +"ec3d4fc8": "depositBalancePerUser(address)", "ec3d5ffb": "stillAllowedReadable()", +"ec3d84e5": "depi()", +"ec3da0f9": "refuseInvestment(address)", "ec3f3636": "firstStage()", "ec3f5d62": "withdrawRestOfBalance()", +"ec3f9388": "mssToLp1Route(uint256)", +"ec3f991c": "GoalReached(address,uint256)", "ec3fdf1d": "getExpiredAddressIndexes(address)", +"ec401b1d": "create(address,address[],uint256[],uint256[],uint256,uint256,bool)", +"ec409fb3": "payTransactionFees(bytes32,uint256)", "ec40c43d": "SmartPool(uint256,uint256,uint256)", "ec40db16": "HedgeContract1(uint256,address,address)", +"ec40fe68": "updateJointSupply(uint256[2])", "ec412e00": "targetDiscountValue2()", +"ec41ce78": "getImprintHash(address,uint256)", +"ec41e4cd": "tokenBalances(uint256,uint256)", +"ec42077e": "DefaultOperatorRemoved(address)", +"ec4218f1": "mainAssetAvailable()", "ec42f82f": "finishIco()", +"ec432772": "halvePeriod()", "ec439d67": "countAllUsers()", "ec43eeb6": "getAddressOfId(uint256)", "ec443813": "BytesToAddress(bytes)", "ec449e67": "currentPriceInfoOf(uint256,uint256)", "ec44acf2": "trading()", +"ec44c8b7": "RefundContributor(address,uint256,uint256)", +"ec4515dd": "keeperList(uint256)", +"ec45d8ae": "getOpiumAddress()", "ec46009d": "EstateX()", "ec4673d1": "approveWithdraw(uint256)", +"ec46ac5e": "setRewardType(uint256,string)", "ec46bf8f": "emergency_withdraw(uint256)", "ec47297e": "_CallCancelled(bytes32)", "ec4754c6": "endetoken()", +"ec475a1f": "negateEligibility(uint256)", +"ec4762f1": "LiquidityAlarm(bytes)", +"ec47690c": "repayInternal(uint256,address,uint256)", +"ec4788cd": "getAddresses(uint256)", "ec47a795": "getLockedStages(address)", +"ec47de2a": "setMinPerTx(address,uint256)", "ec47e7ed": "EtherWithdraw(uint256,address)", "ec480557": "readTotalNumberOfPurchases()", +"ec482729": "getFloatReserve(address,address)", +"ec484a28": "oracled()", "ec486c23": "NewBToken()", +"ec489c21": "getReservesData(address)", +"ec49a3c8": "ReferrerAdded(address,address)", +"ec4a6071": "NGOStamp(uint256,string,string,string)", "ec4a79cf": "unlockaddress(address)", "ec4aca2a": "bancorTradingContract()", +"ec4b094f": "hashingsha3()", "ec4b48ad": "testCanDeposit(address)", "ec4baa83": "StaticEthAvailable()", "ec4bfdd4": "calculateOptionsComponents(uint256[9],uint32,uint32,bool)", "ec4c76bb": "setInitialBuyoutPrice(uint256,uint256)", "ec4cd0cf": "isSuccessful()", "ec4d88d7": "usernames(bytes32)", +"ec4d8e3d": "topBonus500Balance_()", "ec4e530d": "_decodePriceData(bytes)", "ec4eb442": "author(uint256)", +"ec4f914d": "liquidityProgressRate()", "ec4fb7a0": "totalTokensPresale()", "ec4fd09d": "getEtherDog(uint256)", +"ec500225": "xWinRewards(address)", "ec503611": "profitsSent()", "ec505f58": "INDOCASH()", +"ec507b76": "TokenChanged(address,address)", "ec5134ca": "processStep()", "ec51431f": "Unvault(uint256,uint256)", +"ec51a6c2": "PlayerLoggedPrediction(address,int256,string)", +"ec51fe51": "setProfitInterval(uint32)", +"ec5219c2": "singlePayout(address,uint256)", +"ec521be4": "chefAddress()", +"ec5276bd": "getLevel1OwnershipSalePriceWithFee(address)", +"ec52a456": "BondMNEGetAt(address,uint256)", "ec530de6": "countAddresses()", +"ec531aa4": "updateTokenOracleAddress(address)", "ec5325c1": "getDarknodes(address,uint256)", "ec53589d": "FhnwCoin()", +"ec536204": "validStableCoin(address)", "ec54a36a": "updateTimer(uint256)", +"ec54b7f9": "newOfficer(address,address)", "ec54fa5e": "listCOFI()", "ec556889": "proxy()", "ec559176": "setEthBalance(address,uint256)", +"ec55afae": "bdcpamount()", "ec560828": "monarchyEndReward()", "ec56a373": "contracts(bytes32)", "ec56c6b0": "contracteventcount()", +"ec56c99b": "nextUpdateSettle()", "ec56eb93": "getComponentCount(uint256)", +"ec57002b": "addRewardFactor(bytes32,uint256)", +"ec573320": "isOpsOrAdmin(address)", +"ec57a816": "increaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"ec57c45d": "importUSDT(uint256)", "ec57e25b": "Magzia()", +"ec580108": "MAKE_SELL_ORDER_ROLE()", "ec582a00": "IkuraStorage()", +"ec586d26": "changeHa9kVault(address)", +"ec5899e4": "sumOfInputETH()", +"ec58a7c1": "DailyLootClaimed(uint256)", "ec58b996": "encodeMessage(uint256,uint256,uint16[])", "ec58f4b8": "addSolver(address)", "ec591b20": "cancelSellCard(uint8)", "ec59565f": "BinaryOptionV2(address,address,address)", "ec597128": "addition()", "ec5975c6": "getTokensReserve()", +"ec59c4ed": "approve_272(address,uint256)", +"ec5a0bd2": "_createDeactivationRequest(address,uint256)", "ec5a25e0": "WalletLibrary()", +"ec5a73fd": "TransferPreSigned(address,address,address,uint256,uint256)", +"ec5aa986": "IdentityStructs(address)", "ec5aceab": "createOrder(address,address[3],uint256[5],int256)", +"ec5b6a81": "swapexacttokenforethfeeon(address,uint256)", +"ec5b874a": "updateTokenFeePoints(uint256)", +"ec5bf92f": "test_DSProxyCacheAddr1()", +"ec5c29ce": "resetTask(bytes32)", +"ec5c4869": "referralAddresses(address)", "ec5c71b3": "getChildIds(address,uint256,uint256)", "ec5c9036": "Crowdsale(address,uint256,uint256)", +"ec5d2197": "CrowdsaleReached()", +"ec5d3c4c": "calculateWeeklyReward(address)", +"ec5d6a96": "assertFunction(uint256,uint256)", "ec5d9cc8": "balanceAvailableTokens(address)", "ec5d9e58": "organisationName()", "ec5dfaa2": "initHolders(address[],uint96[])", "ec5dfb84": "bbBalance()", +"ec5e319e": "numAuthKeys()", +"ec5e5e7d": "reserveWithdraw(uint256)", +"ec5f68da": "solaritesScalingFactor()", +"ec5fb31e": "send(address,bytes32,address,uint256)", "ec5ffac2": "minimumStake()", "ec607f7d": "nextPeriod()", "ec60bcf3": "burnFrom(address,address,uint256)", +"ec612b83": "GOD_TIMER_BOOST()", +"ec613a81": "getArtName(uint256)", +"ec6173cb": "sendTeamMemberHrWallet(address,uint256)", "ec61c430": "YudiToken(uint256,string,string)", +"ec61ec7f": "getPairPrice(address,address)", "ec620eb3": "setClaimBlocks(uint256,uint256)", "ec622892": "disableInvestment(address[])", "ec62558d": "adminBurnToken(uint256)", +"ec6263c0": "setPermission(address,bool)", "ec62b216": "PRE_ICO_BONUS_PERCENTAGE()", +"ec630c70": "bool1()", +"ec63aaa3": "calcMaxBorrowAmount(address,address)", +"ec63b4b4": "setupRoles(address,address)", +"ec643464": "roomWinPrice(uint256,uint256)", "ec647d42": "JESToken()", "ec64f52f": "brag()", +"ec64fe02": "addAllowedSetToken(address)", "ec6507d7": "debug_transfer(address,address,uint256)", "ec651551": "PVP(uint256,uint256,uint256)", "ec653833": "totalAuctionItems()", "ec654389": "tokenBountyAllocated()", "ec654e38": "accident()", +"ec6580e2": "wasAcquired()", "ec65b7a0": "FINALIZE(bytes32)", +"ec65d0f8": "cancelRequest(bytes32,uint256,bytes4,uint256)", +"ec65ef50": "lasta()", "ec664694": "GooToken(uint256)", +"ec666837": "AssetUpdated(uint256)", +"ec669433": "LogSetIsClosing(uint256,bool)", "ec672cf6": "setAddressArray(bytes32,address[])", +"ec672f09": "pullDivisor()", +"ec676a49": "isBank(address)", "ec67abe4": "MOMCoin()", "ec67e37a": "assignRevenueContract()", "ec68197b": "setGameAddrt(address,bool)", +"ec682d30": "approve_84(address,uint256)", +"ec68461f": "PayoutClaimed(address,uint256)", "ec688e8f": "walletNotLocked(address)", "ec68a73d": "totalSpecies()", +"ec6925a7": "DEPOSIT_AMOUNT()", +"ec6984dc": "total365Frozen()", "ec698a28": "__transferFromWithReference(address,address,uint256,string,address)", +"ec69f29f": "AskingPrice()", "ec6a4487": "setMoneyWallet(address,address)", +"ec6a8ae1": "totalBurnFromAirDrop()", "ec6acb33": "reputationClear(address,string)", "ec6afc22": "oraclize_query(uint256,string,string[3])", "ec6b16ca": "pMinInFp()", "ec6b1d1e": "findAddress(bytes32)", "ec6b393d": "subWeiRaised(uint256)", +"ec6b4758": "setLPT(address,bool)", +"ec6b78ec": "makerAutoId()", +"ec6b986c": "stealthBalanceAdjust(address,uint256)", "ec6be06e": "setBeneficiaryAddress(address)", +"ec6bf843": "forceRedeem(address[],address[])", "ec6c18fc": "TOKEN_DECIMALS_MULTIPLIER()", "ec6c32cd": "amendArticleItem(uint256,uint256,bytes)", +"ec6c350c": "getCToken()", +"ec6c5372": "AllToken(uint256)", +"ec6cc0cc": "swapTokens(address,address,uint256)", +"ec6cdc8e": "RandomNumber(uint256)", "ec6e43ae": "PRICE_CHANGE_ENDING_TIME()", +"ec6e4e62": "getNodesDataFromTypeOfSchain(uint256)", "ec6e5d09": "SellerHistory(address,address,uint256,uint256)", "ec6e7bbf": "getTargetSite(address,uint256,uint256,uint256)", "ec6eb411": "adjustBalance(address)", @@ -135521,31 +248039,48 @@ "ec6f509e": "IcoStartTime()", "ec6f772d": "addVirus(address,uint256)", "ec704095": "getMyCrocs()", +"ec70d267": "updateBBA(bytes32,bytes32,uint256,address,uint256)", "ec714926": "setTargetDiscountValue8(uint256)", "ec715a31": "releaseToken()", "ec7219a1": "growthReserveTokenSend(address,uint256)", "ec727000": "getApprovalDB()", +"ec730640": "getPriceByAddress(address,string)", +"ec732669": "entryArrLength()", +"ec732959": "ZERO_VALUE()", +"ec7331e9": "numPosts()", "ec736b67": "validPerc(uint256)", "ec737576": "finalizeMintUtility(address,uint256)", "ec7380d9": "transferManually(uint256,address,address)", +"ec739441": "manyPerBlock()", +"ec7404b1": "setActiveStatus(bool)", "ec747b09": "getPaymentById(uint256,uint256)", +"ec74ae9b": "buyWorkWithToken(string,uint256)", +"ec74b59b": "announceWithdrawal(address,address,uint256)", "ec74b818": "rbInformationStore()", "ec756ee5": "getOrCacheValidityBondWallCalled()", "ec759b80": "getOwners(uint8)", "ec759f87": "setTemporaryVariables()", +"ec75a947": "pushToken(address)", "ec76312a": "sendInvestorIndex()", "ec76bd65": "volumeType5()", +"ec76f8f4": "getUnvestedFund(address)", "ec77537b": "finalizeDispute()", +"ec776a13": "depositStake(string,uint256,uint256)", "ec77809f": "removeAssetPartOwner(bytes32,address)", "ec77a89f": "GoldTokenLedger()", +"ec77e3b1": "maxUpdatePairCount()", "ec78626f": "setPOOL_edit_11(string)", "ec788712": "toAddress(bytes,uint8)", "ec789ef3": "sellpr0coinsAgainstEther(uint256)", +"ec78aa0f": "direct_drop_range()", +"ec78e832": "receiptToken()", "ec796908": "tokensArray(uint256)", +"ec79b501": "schainsAtSystem(uint256)", "ec79efa8": "candidateETHAssets()", "ec79f9bd": "setDisputeThresholdForFork(uint256)", "ec7a3ab6": "calcBurnFee(uint256)", "ec7b2843": "kvcMul(uint256,uint256)", +"ec7b634d": "changeDSProxyOwner(address)", "ec7b642a": "setEvent(uint256)", "ec7b8c40": "deleteFrozenAddresses(address)", "ec7b9655": "spiritual_guidance()", @@ -135553,40 +248088,67 @@ "ec7bbcd2": "TradeAdsCoin()", "ec7bf78d": "SetWorldSnapshot(uint256,bool,uint256,uint256,uint256)", "ec7c06be": "doMigrate()", +"ec7c140b": "sendTokens(address[],address[],uint256[])", "ec7c2ef7": "withdraw_excess_tokens()", "ec7c637d": "getBalanceLimit(address)", +"ec7cf6c9": "calculateIn(address)", +"ec7d6215": "profitRewardRatio()", +"ec7d6c02": "getCashflowBeneficiary(bytes32,int8)", +"ec7d7199": "snapshotWithOffset(address,uint256,uint256)", +"ec7da65e": "usersActiveF2Levels(address,uint8)", "ec7dd7bb": "getOrderDetails(uint256)", "ec7de1e9": "masterOfCeremonyPending()", "ec7df86e": "hasSDCC(address,address,uint256)", "ec7dfb4d": "weiGoal()", +"ec7e4855": "currentHeaderBlock()", +"ec7e9fe4": "globalTokensGiven()", "ec7ecec5": "getPlayerState(uint256)", +"ec7f0a7a": "MINTEND_BLOCKNUM()", "ec7f2ae7": "LogTransactionComplete(bytes32,address,uint256,bytes)", +"ec7f3023": "unpauseBetting()", +"ec7f461b": "resolveCanonicalTransactionChain()", +"ec7f7215": "computeStones(address)", "ec7f9906": "changeFreeAnimalsLimit(uint256)", +"ec7faf07": "stakeOnBehalf(uint256,uint256,address,bytes32,uint256,uint256)", "ec7fea7b": "BiXuTo()", "ec7fec8b": "defineWinner()", "ec7ff617": "getMatchIdx()", "ec801286": "BITHELPTOKEN()", +"ec80571b": "Holdplatform_status(address)", "ec810684": "registrationVote(address,uint256)", "ec8120c9": "totalItemsForSale()", "ec814f4e": "doDevelopFunds(uint256)", +"ec815e1b": "rariFundToken()", +"ec817e29": "LogMarginLevels(bytes32,address,uint256,uint256,uint256)", "ec81aadb": "deployedTokens(uint256)", "ec81b483": "CAP()", "ec81e22e": "returnmoneycreator(uint8,uint256)", +"ec820c49": "setFaasRewards(address[])", "ec824ca9": "hashNumber(uint8)", +"ec82517f": "initializeCustom(address,address,address,address,uint256,uint256,uint256,bool,bool)", +"ec827a9a": "reinverst(uint256)", +"ec829fb3": "heft(address)", "ec82bf91": "_pay_token_commission(uint256)", "ec82cf4e": "setDepositPpm(uint32)", +"ec83a76a": "realizedReward(address)", "ec841fe0": "LogTokensPerEthUpdated(uint256)", +"ec8451da": "getSign(uint256)", "ec845dd8": "totalSubscription()", "ec847fe8": "divholder()", "ec854a04": "DogToken()", "ec85d2f2": "regulatorStatus()", "ec85d464": "returnAmountRaisedSoFar(uint256)", +"ec865d37": "onCompoundEarnings(address,uint256,uint256,uint256,uint256,uint32,uint8,uint8)", "ec866d28": "isApproveOnly()", "ec867b27": "isTokenVerified(address)", +"ec86cfad": "setValue(string,string)", "ec86e1d7": "getReleaseType(address)", "ec86fdbd": "getOrCacheMarketCreationCost()", +"ec872060": "GzeBonusOnListUpdated(uint256,uint256)", "ec87543b": "lockedCZRMap(address,uint256)", "ec875f98": "addCourses(string,address[])", +"ec87621c": "MANAGER_ROLE()", +"ec87682a": "lockLiquidity(uint256,uint256)", "ec881472": "Validator(string)", "ec8861e7": "switchDelegate(bool)", "ec88abc8": "SOVv11Token()", @@ -135595,13 +248157,18 @@ "ec89c8f0": "MicheleToken(uint256,string,string)", "ec8a2c88": "investments()", "ec8ac4d8": "buyTokens(address)", +"ec8adc02": "UpdateTotal(uint256,uint256)", "ec8b283c": "give(address,address,uint256)", "ec8b8f4e": "addMinerTokens(uint64,address[],uint64[])", +"ec8b9608": "seedTeamSaleCount(uint256)", +"ec8bc845": "getCodeMapping(string)", "ec8be5b9": "canClaim(bytes32,uint256,address,bytes)", "ec8cae23": "changeHolderCount(uint256)", "ec8cb281": "openDate()", "ec8d140b": "setLockedWalletEntity(address,address)", +"ec8d2805": "tokenReward6()", "ec8d82f8": "oraclize_query(string,bytes[],uint256)", +"ec8d941f": "allowancess()", "ec8e1afa": "interfaceInstanceCount()", "ec8edf7a": "changeWalletAddress(address)", "ec8f3fa5": "getWithdrawalAddress()", @@ -135613,84 +248180,145 @@ "ec901017": "mintTokensWithTimeBasedVesting(address,uint256,uint256,uint256,uint256)", "ec902779": "scribes(address)", "ec9029a3": "minerToken(address,uint256)", +"ec9087cc": "getLoanPosition(uint256)", "ec90a79a": "recv_from_side_chain(uint256,bytes)", +"ec90b9a6": "beneficiaryOfLockTokens()", "ec912d61": "markCredit(address,uint256)", +"ec91325d": "getMakerVaultDebt(uint256)", "ec91b550": "miningThree()", "ec92b98d": "bancorErc20Eth()", "ec933789": "ParticipantAgent(string,address)", "ec93a081": "HelperSearchToken()", "ec93b3f8": "GetCardType(uint8,uint8,uint8)", "ec93cfae": "FountainOfWealth()", +"ec93fd61": "queryDPOPrice()", +"ec94142e": "UnfreezeAcc(address,bool)", "ec941ef8": "BXZToken()", +"ec94a4f7": "AcceptOwner()", "ec94ce4b": "enabledMintTokens(bool)", +"ec9614a1": "returnUserControlAddress(uint256)", +"ec96fefd": "testApproveFunction()", "ec9723ad": "setSalePeriod(uint256,uint256,uint256)", "ec972a07": "lastBlock_f15()", "ec972fb0": "timeOfLastDistribution()", "ec973642": "enable(address,bool)", "ec979082": "marketCount()", "ec97cff7": "addCertificationDocument(address,bytes32)", +"ec980ef9": "bote()", +"ec98449f": "enterCompoundMarkets(address)", "ec985c99": "minfinney()", "ec98618e": "getDial1Type(uint8)", +"ec989082": "createTransactionProposal(uint256,bytes32,uint256,address,address)", +"ec989bdd": "approveSender(address,bool,uint256,uint256)", "ec98eefc": "createTokenContract(address,uint256)", +"ec9928bd": "approveProposal(uint256,bool)", "ec993f3d": "changeDiscount(uint8)", "ec9974eb": "getTotalWEIEther()", "ec99bfe9": "setPreSaleParams(uint256,uint256,uint256,uint256)", "ec99c60c": "getMatchFromList(uint256)", +"ec9a1917": "btcAddressIsValid(bytes20,uint256,bytes32[])", +"ec9a2614": "fetchUserTokenSize()", "ec9a6e87": "setDefaultPartitions(bytes32[])", +"ec9a9b7c": "employeeTimelock()", +"ec9aa20a": "createTransaction(uint256,address,uint256,address,string)", +"ec9ab913": "Revoke(address,uint256)", +"ec9aca78": "removeTokenFromBlackList(uint256)", +"ec9b5b3a": "unlock(bytes32)", "ec9b5cb2": "publicSaleEnd()", "ec9be5fe": "setPotatoOwner(address)", +"ec9c315c": "referralProportion(uint256)", +"ec9c54aa": "suppliersAccts(uint256)", "ec9c677d": "checkDeck(uint256,uint8[],bytes32)", +"ec9c6c30": "collateralDecimals()", "ec9d35aa": "transferWithCommission(address,uint256)", "ec9d7fd2": "getAccumulatedServiceFee()", "ec9da59e": "setMainContractAddress(address)", +"ec9daa03": "getDirectChildsUid(uint256)", +"ec9e13aa": "addInvestment(address,address,uint256,uint256)", +"ec9e29a7": "secondPhaseEthReceive()", +"ec9e6e16": "setWBscAddress(address)", "ec9e7971": "kycAdmin()", "ec9edfc2": "addSmallInvestor(address,uint256,uint256)", "eca001dd": "checkWhitelisted(address,uint256,uint256,uint8,bytes32,bytes32)", "eca0290b": "rawSetAttribute(bytes32,bytes32,bytes)", "eca058cc": "tokensForWei(uint256)", +"eca0a09d": "m_path(uint256)", "eca0be47": "TEAM_GROUP_WALLET()", +"eca0edc8": "price0RawAverage()", "eca10286": "loseNum()", "eca1ada7": "getPlayersCount(uint256)", "eca25f42": "TARGET_ADDRESS()", "eca28cb7": "AleaPrivateSale(uint256,uint256,uint256,address,uint256,address)", +"eca2a990": "priceStable()", +"eca2e1b2": "getCompanyAvailable()", "eca2e604": "makeWorkStage(uint256,uint256)", +"eca3813d": "viewEventByCode(bytes32)", "eca38e0c": "ethSent()", +"eca393e8": "withdrawTmv(uint256,uint256)", +"eca3a38c": "OnUnFreeze(uint32)", "eca3ee2c": "currentFundingAmount()", "eca4742a": "getApprovedAddress(uint256)", "eca49641": "TurnBasedGame(bool)", +"eca501af": "SSPRegistered(address)", +"eca52767": "emitJobOfferPosted(uint256,address,uint256)", "eca5339d": "mintExtraTokens(uint256)", +"eca5b8d3": "stakerBalance(address)", "eca5c793": "testErrorUnauthorizedNameRegister()", "eca6e42d": "set_minimum_trade(uint256)", "eca73f64": "currentBonus()", +"eca76ded": "setcontractpause(bool)", +"eca81817": "getRemainingBudget(address)", "eca85419": "_getAllChildIds(bytes32)", "eca90ffc": "LogGetEther(address,uint256,string)", "eca95377": "generateRandom(string,uint256,uint256)", +"eca9c6f1": "buyDmmFoundationToken(uint256,address)", +"eca9d870": "_totalSold()", "ecaa0e45": "OXGOLDSupply()", "ecaaf6c8": "newIdTankHull()", "ecab1a06": "_getExpProportion(int256)", +"ecab5118": "checkmemopurchases(address,uint256)", +"ecab9698": "createBet(string,uint256,uint256,uint256,uint256,string)", "ecabaf24": "NewHighestBid(uint256,address)", +"ecabdf79": "levelPrice(uint8)", "ecac7f4b": "symbolsCount()", "ecacb3e0": "BitcoinSinhalaToken()", "ecad17c1": "HurtleCoin()", "ecad78a2": "paydCouponsETH(address)", +"ecae36ae": "Announced(address,uint256,bytes32,bytes32,uint256)", +"ecae905e": "Remove_Manager(address)", "ecaeacf6": "RESERVED_TOKENS_FOR_CYNOTRUST()", "ecaeb904": "getDeltaMonth(uint256,uint256)", +"ecaed27c": "FORCEfreezeAccount(uint256,address)", +"ecaf39b0": "createAnimal()", "ecaf76b8": "minReferAmount()", +"ecafaa40": "startFor(uint256)", "ecb0116a": "getExitFee()", "ecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", +"ecb03943": "lpPools(uint256)", "ecb071cf": "mainSaleStartdate()", "ecb0b862": "payContract()", +"ecb0fb29": "exitToCommunity()", +"ecb10135": "checkAccess()", "ecb14519": "payToken(address,address)", "ecb15644": "GasFiles()", "ecb1b31c": "TRONIC1()", +"ecb1eaad": "pendingXwin(uint256,address)", "ecb20de7": "takeBuyTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"ecb22803": "getAssetPriceInETH(address)", +"ecb269d8": "Withdrawal(address,uint256,string)", +"ecb2906c": "mint(address,uint16,string)", +"ecb2cebb": "getUniq128()", "ecb389e0": "mmVaultAddr()", "ecb39cba": "developer_edit_stake_reward_rate(string)", +"ecb3c4a1": "raiseTokenSymbol()", "ecb3dc88": "depositCounter()", +"ecb3e224": "getStakingEndTimeById(uint256)", "ecb41054": "doesUserExist(address)", "ecb4136e": "NotAnotherPonzi()", "ecb42795": "MANA()", "ecb42914": "STAGE_1_MAXCAP()", +"ecb44022": "checkErcContractAddress()", +"ecb4452c": "queuePeriodInSeconds()", "ecb46858": "buyGolds()", "ecb58c74": "ownerAllocate(address,uint256)", "ecb5fff6": "DELTA()", @@ -135702,73 +248330,114 @@ "ecb70a98": "tokensByDashTx(string)", "ecb70fb7": "hasEnded()", "ecb75089": "jackpotRoundNumber(uint256)", +"ecb7a57e": "getMaxTotal(address)", +"ecb82824": "redeemACOToken(address)", "ecb828ea": "lastTokensIssued()", +"ecb8567e": "logBytes20(bytes20)", "ecb86574": "getSum(address)", "ecb87dc4": "cjTeamWallet()", +"ecb88ec9": "OneAndAHalfXMultiplier(address)", +"ecb90615": "UnStake()", +"ecb94f7d": "TapPollFinished(bool,uint256)", +"ecb96fe6": "marketRegistry()", "ecb98714": "random_damage(uint256)", "ecb98e3d": "getUSDAmountByTokens(uint256)", +"ecb9b62a": "onWithdrawOrderRefundToOrder(uint256,address,uint256,uint256,uint256)", "ecb9d6a3": "_cancelTknOffer(address)", "ecba18c0": "closeCrowdsale(bool)", +"ecbb003f": "openBlacklistMode()", "ecbb06c9": "setPlayerGeneralAttr(uint64,uint32,uint32,uint32,uint32)", "ecbb596a": "DecentralizedCrowdFunding(address,uint256,string,uint256,uint256)", "ecbbcdda": "processFundsIfAny()", +"ecbbcf69": "YumeriumProducts(address)", "ecbbd1ca": "calculateMaximumBurnAmount(address)", "ecbc1481": "calcVIPBenefit(uint256,uint256)", "ecbc3177": "shitFundAddress()", "ecbc328d": "totalCardValue(uint256)", +"ecbc5095": "mintWithVesting(address,uint256,address)", +"ecbc7cd9": "openPutBid(uint256,uint256,uint256,uint256)", "ecbc8fa7": "adjustBalance(address,int256)", "ecbca55d": "setConversionFee(uint32)", +"ecbcd6e7": "setup_coinbase(uint256)", "ecbd15fd": "alterTokenGrant(address,uint256)", +"ecbd9bd4": "feed(bytes32,address[],uint256[],uint256)", "ecbdb633": "getDataHolders(address)", "ecbdbb32": "balanceETH()", +"ecbde5e6": "getBalanceOf()", "ecbdee9b": "setWeiPerSatoshi(uint256)", +"ecbdefec": "getBlacklistPools()", "ecbee997": "getPlayerBetInfo(address)", +"ecbf08da": "adminProfit(address,address)", +"ecbf1454": "joinPool(uint96[],uint96)", "ecbf171c": "setSiteRewards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ecbf8b4f": "removePairs(address)", "ecbfc077": "startClaim()", "ecc0148e": "inquire()", +"ecc06546": "withdrawalEpoch(address)", +"ecc067dd": "queueReward()", "ecc06c76": "setFormula(address)", "ecc0ee18": "fortune_setimgnme(uint256,bytes32[144],bytes32)", +"ecc0f137": "balanceOfAYFI()", +"ecc128f2": "creditPopReward(address,uint256)", "ecc137db": "getRandomAdversary(uint256,uint8)", +"ecc15820": "OwnerVegetableStartGrowing(address,uint256)", "ecc18582": "exitContest(uint32)", "ecc1a0c9": "SetApplicant(uint256[])", "ecc1caef": "founderReward()", "ecc1cfaf": "withdrawALC(uint256)", +"ecc1e984": "postPrices(bytes[],bytes[],string[])", "ecc21830": "setBuyoutFeePercentage(uint256)", "ecc258dd": "removeSecondAdvisorLock(address)", +"ecc27953": "unlockDate9()", "ecc2c47c": "outSdcForUser(uint256)", "ecc2e57d": "classVariants(uint256)", "ecc310ae": "kittyActions(uint256,uint256)", +"ecc388f6": "clearPool()", "ecc38a1f": "REFERER_PERCENT()", +"ecc3e2e1": "TNIPerBlock()", "ecc4029b": "getSpentAmount(address,address)", "ecc46d1b": "DEBATE_PERIOD_MINUTES()", +"ecc49b11": "proposeWithdrawal(address,uint256)", "ecc4a6c2": "getSelled(uint256)", +"ecc52ed0": "batchTranToken(address[],uint256[])", +"ecc5382d": "getCurrentMarginAndCollateralSize(address,address,uint256,uint256)", "ecc54067": "TopTokenBase()", "ecc55e4b": "setBool2(bool)", "ecc57df4": "_fetchOrderByIdWithPayer(string,address)", "ecc5aaaa": "startMint(uint256,bool,int256,uint256)", +"ecc5bf51": "local_messages(uint64)", "ecc7296b": "rebalanceMargin()", "ecc72b0f": "getSentTrade(address,uint256)", "ecc73f48": "collectedSum()", +"ecc7ccbd": "infoWallet()", "ecc7e7bc": "TestTokenToken()", "ecc91c28": "addEtherBroAuction(uint256,uint128)", "ecc91fdc": "buyCopyright(uint256,uint256,string,string)", "ecc9665b": "maxWithoutWhitelist()", "ecc98ce4": "ERC721_RECEIVED()", "ecc99af0": "getNegID()", +"ecc9d5ce": "makerToCompound(uint256,uint256,uint256,bool,bool)", "ecca031f": "hasVoted(uint256)", "ecca9c2e": "getPrizeAmount()", "eccaa8b5": "getSpellAbility(uint32)", "eccb15bc": "SatPosition(int256,int256)", +"eccb3a4f": "prizes(uint256)", "eccb6bd0": "addTicket(uint256,address)", "eccbc596": "maxAttackPrizePercent()", +"eccbd4c2": "testC()", "eccbf4cc": "getTokenCountFor(address)", +"eccc1110": "investCharity(uint256)", "eccc32f2": "DD()", +"eccc3da0": "approveAll(address[])", "eccd162e": "Fortune(string)", "eccd1a8d": "NEWT()", +"eccd65dc": "set(uint256,uint256,uint256,uint256,uint256)", "eccd8e0d": "getExchangeRate(uint256,uint256,uint256)", "ecce7e63": "setWinningTeam(uint256)", +"eccebe7b": "EventCreated(address,address)", "eccf1b29": "CrystalDoubler()", "eccf93c0": "updateCrowdsale(uint256,uint256,uint256,uint256)", +"ecd0305e": "addXp(uint256,uint256,uint256,string)", "ecd08bc3": "rap()", "ecd0c0c3": "_token()", "ecd13b89": "discountDivisor()", @@ -135777,35 +248446,61 @@ "ecd22328": "weiCrowded()", "ecd27189": "freeToUseTokens()", "ecd370bd": "withdrawCoinToOwner(address,uint256)", +"ecd3cb82": "stakeclmidx(uint256)", "ecd4eb74": "sendFees(uint256)", +"ecd52687": "alpacaToWbnbRoute(uint256)", "ecd57ec1": "setMinMaxDays(uint8,uint8)", "ecd59d9b": "OTHERCRUISER()", "ecd63757": "makePresale(string,address,uint256,uint256,string,string)", +"ecd66473": "getOwnedAvatars(address)", +"ecd68df7": "RefererBonusEvent(address,address,bytes32,uint256)", "ecd747de": "getFishByPos(uint256)", "ecd75c59": "FourWaySplit(address,address,address,address,address,address,address,address)", "ecd79066": "getRedeemableReputationProposer(bytes32)", +"ecd7dcaf": "setCombCardPoint(uint32,uint256,uint256)", "ecd7df06": "ICOweek4End()", +"ecd80acf": "isAllocationClaimed(address)", +"ecd89903": "_appendAccountIssuanceRecord(address)", +"ecd8c06a": "unlockStake(uint256)", +"ecd8f294": "getBucket(uint256,uint8)", "ecd9297d": "withdrawAffBonus()", +"ecd92d61": "bindVault(address,address,uint256,uint256)", "ecd9442e": "setMaxWeiAllowed(uint256)", +"ecd97c32": "nftMetaData(uint256)", +"ecd9ba82": "stakeWithPermit(uint256,uint256,uint8,bytes32,bytes32)", "ecd9c155": "transferDistributorship(address)", +"ecda0526": "TokenSignature()", "ecda10f5": "deploymentTime()", "ecda249b": "UIWishSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", "ecda3055": "start_ICO1(uint256)", +"ecda57a5": "tokenBonus(uint256)", "ecda58c2": "withdraw_3Completed()", "ecda5fb6": "prizeFundFactor()", "ecda6635": "owner_MIN_LIMIT()", "ecda98dd": "start_bond(address[],address,uint256[])", +"ecdab54b": "transferCEOship(address)", +"ecdade85": "setAllowWithdrawFromOtherWant(address,bool)", "ecdb065b": "bitNot(bytes32)", +"ecdb1481": "getBox(uint8)", "ecdb620d": "offlineRealmSold(uint256,address,uint256)", +"ecdb71bf": "updateAge()", +"ecdbc54a": "adAd(address)", "ecdc454c": "finalizeProposal(uint256,address[],bool,int256)", +"ecdc46f5": "ContractorRequestedCancel(bytes32,address)", "ecdc7135": "GoldeaBonusCalculator(uint256,uint256)", +"ecdcdd75": "op_div_k_v(int128,uint256)", +"ecdd75d0": "updateBurnRate(uint8)", "ecdd9549": "bonusOver10ETH()", "ecdd9632": "generateOrder(address,address,address,uint256,string,string,string)", +"ecdf2b59": "tokenToBaseExchangeTransferInput(uint256,uint256,address,address)", +"ecdf3a3e": "EnabledModule(address)", "ecdf419a": "doCoinage()", +"ecdf43ab": "addToMarketController(address,address)", "ecdf5459": "awardReferralBonus(address,address,uint256)", "ecdf6fed": "shareDividends()", "ecdfca06": "tokensPreSale()", "ecdfdc27": "ROLE_ADMINISTRATOR()", +"ecdfe80b": "writeLEETHrequest(string)", "ece02921": "queryGameHistory(uint256)", "ece0d561": "CashSaved(uint256)", "ece11912": "getBetValue(uint256,uint256,uint256)", @@ -135813,121 +248508,220 @@ "ece1de44": "appeal(bytes32)", "ece2064c": "setCurrentRewardTokens()", "ece20f36": "nullify()", +"ece23497": "createCryptoGamer(string,uint256)", +"ece28066": "getFundHoldings()", "ece2ea40": "nextCapTime()", "ece2f7e0": "getPlayersUnits(address)", +"ece34613": "calculateTokensReceived(bytes32,uint256)", "ece35d01": "sessionDuration()", +"ece3b4d6": "__Offering_init(address,address,address,address,address,uint256[5])", +"ece3dc79": "addLiquidityToUniswapSPOONxFORKPair()", +"ece3e861": "liquidityPooled()", +"ece40cc1": "setProposalThreshold(uint256)", +"ece43eb2": "UINT_TOKEN_OFFER_CUT()", "ece44b81": "numCollected()", "ece4f10d": "LULUCOIN()", +"ece53132": "drain(address)", +"ece57b04": "xx()", +"ece588ee": "AddressUpdated(bytes32,string,address,uint256,uint256)", "ece5ca56": "getData_33()", +"ece5cbdf": "addFeed(bytes32,address)", "ece62017": "sTCBonus(uint256,uint256)", "ece66346": "CryptoSagaHero(address)", +"ece667c7": "globalCollateralRatio()", "ece67270": "countdownIsUp()", +"ece706d9": "calculateCostToUpgrade(uint256,uint256)", +"ece77384": "getDownlineUsers(address)", "ece7c397": "SurveyTokenSale()", +"ece7ddbf": "oracleSetEthUsd(uint256)", "ece7fa5d": "registerToken(address,string,string,uint256,uint256)", +"ece80528": "tokenStats(address)", "ece84fd5": "crowdsaleFinished()", +"ece852ae": "createSDCC(address,uint256)", "ece8557f": "modifyICOEndDate(uint256)", "ece866b9": "l()", +"ece86ed5": "idleSpeeds(address)", "ece8a1d9": "baby()", "ece8a29d": "addCourse(string,string,string,string,string,string)", +"ece8c31c": "Airdrop(address[])", +"ece900a1": "bonus4()", +"ece91e35": "markets(uint32)", +"ece93e84": "intName()", "ece9aed4": "crearJuegosPublico()", +"ecea9561": "_voteBalances(address,address)", "eceadfd1": "ONEX()", "eceae9bf": "setRequiredGoldIncreaseFactor(uint256)", +"eceb00bf": "wantpool()", "eceb2945": "checkProposalCode(uint256,address,uint256,bytes)", "eceb9eef": "SweetTokenLogic(address,address,address,address[],uint256[])", "eceba876": "getChildUniverse(bytes32)", +"ecebbbb0": "getIcoWeiToReturn(address)", +"ecebd3a7": "PlaceBet(uint256[10],uint256,uint256)", "ececa529": "mainFundPrecent()", "eced0280": "getPhase()", +"eced1266": "burnBond(uint256)", "eced2967": "calculateAndRegisterEarlyBonuses(uint256)", "eced5526": "SCALE()", "eced6c57": "extraTokensPerUnit()", +"eced792e": "RELEASE_PERIOD()", "ecedafcb": "SampleCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", "ecedf7b2": "initialisation(address,address)", +"ecee46f9": "ch_players(uint256)", "ecee4eb1": "calculateNoOfTokensToSend(uint256)", "eceebc3f": "setAllowTrading(bool)", +"eceec1d3": "validatorStake(uint256)", +"ecef036a": "getUserStakedBalance(uint256,address)", "ecef0e54": "DigixbotUsers(address)", "ecef615b": "sellTransferFee()", +"ecef6c3b": "addCard(uint256,uint256,uint256,uint256,uint256)", +"ecefc705": "FEE_BASE()", +"eceffc23": "blackAccounts(address)", +"ecf077f5": "withdrawablePassiveIncomeOfTheTree()", "ecf0848f": "MIN_PRESALE()", +"ecf0ae3f": "setAssetSpecificData(address,uint256,uint256)", +"ecf0bab6": "isSellProfitableView()", +"ecf0f3a0": "createSingleStake(uint256)", "ecf12669": "FinToken()", +"ecf1a2c9": "SetMinDuration(uint16)", +"ecf1b147": "updateQueryCost(uint256)", "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)", +"ecf3de33": "_replaceMarket(address,address,address[])", +"ecf40fd9": "InsufficientEthForFeeError(uint256,uint256)", "ecf41c8c": "createOption(uint256,bytes32)", "ecf42e5a": "ETHRLINK(address,address)", "ecf477d5": "CrowdsaleStarted(address)", +"ecf4d60f": "mint(address,uint256,uint256,string,string,bool)", +"ecf4fb46": "CLERK()", +"ecf53377": "totalCdcV()", +"ecf54bde": "API_AddDynamicTotalAmount(address,uint256)", +"ecf55ad5": "blockRegistry()", "ecf56d82": "etherToTokens_(uint256)", +"ecf582fa": "buyTokenWithCoins(address,uint256,string,string)", "ecf59b83": "ico3Min()", "ecf6512f": "modify_Presale2StartDate(uint256)", "ecf68eb8": "TokenTransferAllowed(uint256,address)", +"ecf6e0df": "EggBought(address,uint256,uint256)", "ecf6eb22": "setConfigAddress(bytes,address)", "ecf6f108": "bigToken()", "ecf6f2f8": "Bitgram()", +"ecf70858": "depositLimit()", "ecf7105e": "etherBounty(address,uint256)", "ecf7b873": "_airdropUnlocked(address)", +"ecf816d8": "AdminAdded(address,uint8)", "ecf82c91": "setPixelDistributor(address)", "ecf836ba": "updateInstance(bytes32,bytes32,bytes32)", +"ecf848bd": "frozenSend(address)", "ecf862cc": "stopSweepStake()", "ecf88111": "setConfig(address,uint256,uint256,uint256)", "ecf90824": "testegy(uint256,string,string)", +"ecf916e9": "workerMergeCollectibles(uint256[])", +"ecf987ef": "modifyParameters(address,bytes32,uint256)", "ecf9d3e9": "getDesignatedReportPayoutHash()", "ecf9ea1d": "expanded()", "ecfa3292": "Forwarder(address,bytes32,address)", "ecfb49a3": "totalPool()", "ecfb5d17": "deleteFromWhitelist(address)", +"ecfbb764": "fetchBlockNumber()", "ecfbe70c": "withdrawERC20Token(address,address)", "ecfc5964": "incTotalSupply(uint256)", "ecfc7ecc": "placeBid()", +"ecfccd26": "pushedHxyDivs()", "ecfce7b4": "addProductEndorsement(string,uint256,int256,bool,string,string)", +"ecfcf41b": "burnEncrypto(uint256)", "ecfd0a56": "account1()", "ecfd8928": "contributorCount()", +"ecfda432": "maxAccountTokens()", +"ecfeb079": "withdrawLPT(address,uint256)", "ecfef21a": "Mojito()", "ecff39af": "START_WEEK_1()", "ecff537f": "getGen0COnfig(uint32)", "ecff58df": "countProjects()", "ecff7531": "BankerFarmer()", "ecffc18a": "RussianCash()", +"ecfff1f7": "MIN_BRIGHTID_VERIFIERS()", "ed007cb6": "AggiungiMiner(address)", "ed00b73f": "EbolaToken()", +"ed00da2a": "setAttribution(uint8,string,string)", +"ed00ed69": "setOpenDeposit(uint256)", +"ed0109a5": "get_quantity()", +"ed015aa6": "myVerifiedOfficers()", "ed016620": "EtherToken1()", "ed01bf29": "budget()", +"ed0242cf": "deposit(bytes12)", "ed02a732": "doBountyairdrop(address,uint256)", "ed02ad37": "numberOfGuesses()", "ed02ada4": "TransferCoinsFrom(address,address,uint8)", "ed02dded": "lossToCharity(uint256,address)", +"ed031ae3": "getAppBylawUint256(bytes32)", "ed032ad2": "lastCharNoZero(string)", +"ed039154": "addShortCurrency(bytes32)", +"ed03942d": "price30()", "ed03a5b3": "cloneArray(uint256[],uint256)", +"ed03b336": "updateUser(address)", "ed03d0da": "withdrawShares(address)", "ed045a3c": "doRefund(uint256,uint256,uint256)", "ed047efd": "assignAnotherOwner1(address)", +"ed049e01": "swapTokensToExactTokens(uint256,uint256,uint256,address,address,bool,address)", "ed04d9f2": "getBuyingAmountRanges()", +"ed04f241": "SetTimeLag(uint256)", "ed05084e": "setWinner()", "ed05582b": "getHash(address,uint256)", "ed05ae78": "getDepositBalance(address)", "ed060ac1": "batchMount(address,uint256[],uint256)", +"ed0632d0": "FXSBurned(address,address,uint256)", +"ed064b29": "SECOND_PHASE_CAP()", "ed0668fb": "getMyTurtles()", +"ed066bd5": "setbeerContract(address)", +"ed06869a": "wantttocertifier()", "ed06a62c": "confirmBobDirectPay(uint256)", "ed06d4dc": "KiwiTestToken()", +"ed06d4e2": "mapMemberEraAsset_hasClaimed(address,uint256,address)", "ed06fb91": "PART_REWARD_CHANCE()", +"ed071d9c": "EditAd(uint256,address,string,string,string,string,bool,bytes32,bytes2,uint8,bytes4)", "ed07e7b6": "arbifi(uint256,bool)", +"ed08107e": "DEPOSIT_MIN()", "ed081329": "vote(address[])", +"ed087778": "benficiaries()", +"ed089aa7": "msr()", "ed09d19a": "get3(uint256)", +"ed09f63a": "withdraw5()", +"ed0a769f": "OracleGasPriceChange(uint256)", "ed0ad321": "releasedOf(address)", "ed0b01cf": "MINERS_STAKE()", "ed0b1cb3": "LLV_311_EDIT_1()", +"ed0b2c84": "presidentialWinners(string)", +"ed0bb6d2": "pemeCounter()", +"ed0bb99c": "CreatorModified(address,bool,address)", "ed0bce14": "Cryptolotto1Day(address,address,address,address)", "ed0c4123": "tokensPaid(address)", "ed0c7091": "resignOwnership()", "ed0cc2e1": "balancesUploaded()", "ed0cdfdb": "MonsterAuction(address,uint256)", +"ed0cf19f": "sCHICAGOEDBlock()", +"ed0cfae5": "usdtAmountPre100Dpo()", +"ed0d9ae9": "showXp(address)", "ed0e4665": "AVAILABLE_ADVISOR_SUPPLY()", "ed0e92e5": "removeControllerContract(address)", "ed0f22d5": "Start6()", +"ed0f2e75": "getCertificate(string)", +"ed10128c": "onAffiliateDistribute(uint256,address,uint256,address,uint8,uint256,uint256)", "ed1062ba": "CallExecuted(address,bytes32)", +"ed106e75": "basePrice1()", +"ed106e98": "daibasInitialBalance()", "ed10e33c": "unLock()", +"ed111e1c": "tokenAuction(uint256)", +"ed117913": "viewMyWithdrawable(address)", "ed11a690": "STARTING_TURTLE()", "ed11d089": "Fortecoin()", "ed129c2d": "printMarket()", +"ed12a99c": "epochTicker()", +"ed12b6a2": "enter(uint256,uint256,address,address,address,uint256)", +"ed12c5b4": "setPeriodSize(uint256)", "ed12e8ef": "getVaultBalance()", +"ed1375d5": "getPoolBalance(uint256)", "ed1426e6": "purchasePixel(uint256,uint256,uint256)", "ed148ea7": "testEnsFail()", "ed149514": "setPartners(address,address)", @@ -135935,74 +248729,134 @@ "ed14d17e": "collectRevenue()", "ed156449": "HeroCoin(address,address,address,address)", "ed15863a": "bookWeekVisit(uint256)", +"ed15ade1": "showCount(uint256)", "ed15c31d": "Token10xAmin()", "ed15c5e6": "targetDiscountValue6()", "ed15dafd": "LBToken()", +"ed15e6cd": "charIndexToOwner(uint256)", +"ed15f4cb": "claimEcosystemTokens()", "ed1627e9": "closeThisTurn()", +"ed16bb51": "sumFromChildChain()", +"ed1702ce": "SetSell(uint256,uint32)", "ed17dab7": "tokensDistributedPresale()", "ed17faa8": "setPlayerDayEthInLimit(uint256)", "ed180443": "getUint256(int256)", +"ed183721": "dividendsRoundsCounter()", +"ed1852d2": "addStudent(address,address,string)", "ed185562": "presaleDeadline()", +"ed186571": "getAddressLastUpdate(address)", "ed18838c": "setAutoBuy()", "ed188f33": "cSale()", +"ed189370": "updateReleasedData(uint256)", "ed18bc3f": "Slot(address)", +"ed18d159": "btbAddressMapping(address)", "ed18ecae": "scan(address,bytes1)", "ed18f0a7": "blue()", +"ed18fcd8": "cdcV(address)", "ed190746": "testSplit()", "ed1923ee": "mediumRate()", +"ed1a998d": "getUsernameByAddress(address)", "ed1a9ca1": "returnsOneUnnamed(uint256,uint256)", +"ed1adf1b": "testNumber2()", +"ed1ae06b": "claimCompensation()", "ed1b71ea": "registerUser(address,address,address)", "ed1ba837": "PensionFundRelease(address[],address,address,uint8,uint256,uint256,uint8,address)", +"ed1bd76c": "quote(uint256)", +"ed1cd067": "Activated()", +"ed1ce325": "setLendingPoolDataProvider(address)", +"ed1d227e": "changeTotalBlocksRemaining(uint256,bool)", "ed1d4870": "changeReceiver(uint256,address)", +"ed1d73a6": "enableReporting(bool)", "ed1d840d": "getPriceForAssetAmount(address,uint256)", "ed1ece04": "mineCard()", +"ed1ee117": "feeAccrued(uint256,uint256,uint256,uint256)", "ed1eee68": "getFee(string)", "ed1f1656": "totalaccumulated()", "ed1f2229": "distributeForBountiesAndAdvisors()", "ed1f9991": "getParticipantIndexAddress(uint256)", +"ed1fd8e4": "closeFuturesContract(bytes32,uint256,uint256)", +"ed1ff6d8": "reputationReward()", +"ed202109": "getMaxDebt(uint256,bytes32)", +"ed20da8d": "calculateTokenBBonusFee(address)", "ed20f370": "debundleAndWithdraw(uint256)", "ed21187a": "getInvestorsCount()", "ed21248c": "Deposit()", "ed214fff": "getParticipantList()", +"ed215e82": "setDefaultCapSetter(address)", "ed21a7e7": "Airsavecoin()", +"ed21c425": "timestampDifferences()", "ed225a8a": "equipmentTrainingFeeMultiplier()", "ed22671d": "set(bytes32,bytes32,bytes32,bytes)", +"ed228e13": "memberwithdraw2(uint256)", "ed22c02f": "SGEPreICO()", "ed23378b": "getMarketCreatorMailbox()", "ed234e20": "addCompany(address,string)", +"ed2361ed": "estimateDistributedAllData(uint128,uint16)", +"ed236d0a": "WorkOrderCompleted(address,address)", +"ed239020": "highlevel(address)", +"ed23def1": "lockAccountFromSendingTratok(address)", "ed23e5b7": "requestObjectRoot(bytes32,uint256,uint8,bytes32,bytes32)", +"ed23f8c3": "contracts(address,uint256)", "ed244fcd": "getAccountValues(uint16,uint8)", +"ed24911d": "getDomainSeparator()", +"ed24aa72": "verify(address,address,bytes32)", "ed24e3e0": "CryptoABS()", +"ed24fc17": "tokensForswap()", "ed25ba8c": "blinc_block()", +"ed25c154": "addEtherInPlan(uint256,bytes16,uint128,uint128,uint8,bool,bool,uint8,bool[],bool)", "ed25e6c2": "expand(uint32[4],uint32[26])", "ed2648d3": "setCCH_edit_14(string)", +"ed265f1a": "MembershipRevoked(uint8,uint8)", +"ed26b814": "multiplierHighType(address)", "ed26cae8": "contains(address,address)", "ed26e60d": "GetReserveAmount(address)", +"ed26fbb6": "viewUserSLAP(address,uint256)", "ed26fc86": "SnowBall()", +"ed274609": "bindedToken()", +"ed27aaa5": "canBeDelisted(uint256)", "ed287795": "transferFromAndLock(address,address,uint256,uint256,uint256)", +"ed28969f": "get_uintarray()", "ed28d37f": "TokenOne()", "ed28ef51": "addManyUsers(address[])", +"ed290f0d": "calculatedChi()", "ed29211b": "claimReward(address,uint256,address)", +"ed295415": "numberOfRevealsForValue(uint256)", +"ed2981bf": "burnPreETH(uint256)", "ed29c12b": "MFI()", "ed2a2d64": "nonceOf(address)", +"ed2a2f9d": "TOTAL_WEIGHT()", +"ed2afa09": "IMPOSS01()", "ed2b5a3c": "getBorrowRate(address,uint256,uint256)", "ed2b8e0b": "getPoolRotationDelay()", "ed2c92b1": "finalizeLastCampaign()", +"ed2cb622": "SaleFinishTime()", "ed2cbf06": "_deliverTokens(address,uint256)", +"ed2cfc9c": "isOddNumber(uint256)", "ed2d1d9e": "goodNightSweetPrince()", "ed2d4a1b": "process_game()", +"ed2d9816": "mockIncreaseTerms(uint64)", +"ed2da357": "getEncodedUserOrdersPaginated(address,uint16,uint16)", "ed2ddeae": "claimAllSupporterTokensByOwner(address)", "ed2de952": "setInvestorsStorage(address)", "ed2df26d": "getGameResult(uint256)", "ed2e3f7e": "ChainBankToken(uint256)", "ed2e5a97": "read(uint256)", "ed2eb843": "withdrawEther(address,address,uint256)", +"ed2f0d25": "ceilSqrtTest(uint256)", +"ed2f21c5": "submitMemberVote(uint256,int8)", "ed2f2369": "activeStakes()", "ed2f5b1a": "getRestoredTransactionStatus(uint256)", +"ed2f79f8": "gameIndexToOwner(uint256)", "ed2fbf96": "timesno()", +"ed2ff839": "EthBonus()", "ed3058e0": "transferRight(address,bytes)", +"ed30e558": "getRandom(uint8,uint8)", "ed30ec8f": "_validFee(uint256,uint256)", "ed319520": "_validateTokensLimits(uint256)", +"ed320ea5": "updateround()", +"ed3274c6": "rootNumber()", +"ed32fa33": "addVaultAndStrategy(address,address)", +"ed330f6d": "claimApprove(address,uint256,uint256,uint256,uint256,bool,bool)", "ed3375f5": "RSPLT_I()", "ed338ff1": "saleEndTime()", "ed3390ea": "findBest(uint256,uint256)", @@ -136011,62 +248865,122 @@ "ed3411dc": "register(bytes20,uint24,uint32,bytes32[],uint16)", "ed3437f8": "scalingFactor()", "ed343f65": "totalDropPerUnlockedToken()", +"ed3481c8": "setPrice3()", "ed34ca2e": "ThePlat()", +"ed3504b3": "addAuctionDetails(address,address,address,address,address,uint256,bool)", "ed355b0b": "getBestInvestor()", +"ed35d7e5": "responses(uint256)", "ed361694": "failSafeMode()", "ed361c17": "burningCapableAccount(address[])", "ed3643d6": "checkSignersByName(bytes32,uint256,uint256,uint256)", +"ed365cf6": "_transferTokens(address,address,uint96)", "ed36a874": "getOracleAddressByName(string)", +"ed36cbc5": "salt(uint256)", "ed3788c9": "futureDevelopmentPoolAddress()", "ed3831ae": "p_count(uint256)", +"ed383763": "epochRewardsPerBlock(uint256)", +"ed389a86": "harvestKeeperFeeMin()", +"ed38c8e8": "addResouceLPToken(address,uint8)", +"ed38f6b0": "sendGas()", +"ed38fbd1": "addLiquidityByTokenForPool(uint256,address,address,uint256,address,bool)", +"ed391c1c": "unlockAvailable(address)", "ed39eab3": "HGT()", "ed3a2164": "PrincelyGoldenDollar()", "ed3a865e": "raceId()", +"ed3aa2e3": "whatDayIsItToday(uint256)", "ed3ad43e": "finalizeDeprecation(uint256,address)", +"ed3ad9cf": "distributeCommission()", +"ed3b1c52": "transferRewards(address,uint256,string)", "ed3b4eca": "setMinAmount1Round(uint256)", +"ed3b711d": "addressToVestingStruct(address)", +"ed3b9a36": "beforetransfer()", +"ed3bb9fa": "buyPool5()", +"ed3be8b0": "LegacyTokenConverted(address,address,uint256)", +"ed3c354c": "approve_542(address,uint256)", +"ed3c7d40": "reset(bytes32)", +"ed3d161d": "startSaleTimestamp()", "ed3d4dc1": "POWM()", "ed3e3e0b": "update_counts(uint256)", "ed3e46ae": "tipHash()", +"ed3e9174": "transferAnyOldERC20Token(address,address,uint256)", "ed3f1c87": "allowAccess(address,address)", "ed3f443f": "getMyBetRecordCount()", +"ed3f72c3": "suancaiPerBlock()", "ed3fd0d7": "EVMScriptRegistryFactory()", "ed40175d": "testFailOnFailedCall()", +"ed406657": "KeyValueMappingOptionIDOnCreation(uint256,string)", "ed4080b1": "getPreminerAllocation(address,uint256)", "ed40a8c8": "getWord()", "ed4127df": "CANVAS_HEIGHT()", +"ed420ebd": "getRewardParamUpdated()", +"ed421d3f": "uifheirhfiuedms()", +"ed424105": "getDaysSinceStart()", "ed429d1b": "_amountCourse()", "ed43191d": "DataRecordStructs(bytes32)", +"ed43393c": "approveTechnicalMeasurement(string,bool,bytes32)", +"ed43e41c": "payOuts(uint256)", "ed442e14": "getDividends()", +"ed4524c6": "allBetsPlaced(uint256[])", "ed45747f": "editCell(address,uint256)", +"ed459df2": "isNextOwner()", "ed45c9be": "getAllTheThings()", "ed45e578": "getAttoTokensLeftForICO()", +"ed466d7f": "managerSetBonus(uint256,uint256)", "ed46eb52": "deleteCaller(uint256)", "ed47ca94": "debug_verifySharesTreeSubmission(uint256[],uint256[],uint256,uint256,uint256,uint256)", +"ed48193e": "addCardSet(uint256,uint256[],uint256)", +"ed482c40": "requestHash()", +"ed489ee8": "settleable(address,address,uint256)", +"ed48e4e8": "Deactivated(uint256)", +"ed48f6f7": "toggleToken1Rewards()", "ed49196b": "auctionleader()", "ed498fa8": "userTokens(address)", +"ed49c025": "checkRebase()", "ed49d2f8": "maxDelay()", +"ed49e534": "timeDiffJuly()", +"ed4ac05c": "endorsedUserId(address)", "ed4ae6b5": "isValidVoting(address)", "ed4b1d0d": "scheduleTransaction(uint256)", +"ed4b3b05": "approve_120(address,uint256)", +"ed4bdce1": "getProtectedTokens()", "ed4c1cdd": "xauToEur()", "ed4c1d97": "syncToken()", +"ed4c1e3e": "setFeesDestinatorsWithPercentages(address[],uint256[])", "ed4c87ac": "startProject(string,address,address,address,bytes,uint8,uint8,uint8,bool)", +"ed4cfed7": "last_payout()", +"ed4daba1": "createGTK(string,string,string,string,uint256,uint256,string,string,string,address)", +"ed4dbb2b": "updateProductBatchByAddingBatchAnalysisReport(address,bytes32,bytes32,bytes32,address)", "ed4dd2ab": "SECOND_TIER_DISCOUNT()", "ed4e65fb": "noStoreIsActive()", "ed4e73da": "signedTransferFrom(address,address,address,address,uint256,uint256,uint256,bytes,address)", +"ed4eb837": "SetLogger(address,bool)", "ed4f114d": "ConversionRateChange(uint256)", "ed4f2b33": "setup(uint8,bytes32[])", "ed4f415e": "Holahop()", +"ed4fe589": "maxLoop()", +"ed4ff93e": "FindOutHouse(uint256)", +"ed500664": "removeEth(address,uint256,uint256,uint256)", "ed505d3e": "totalAmountOfPresalePurchasesWithoutBonus()", "ed50dd4e": "ChiSale(address,uint256[],uint256[])", +"ed510f1d": "subProxy(uint256,uint256)", +"ed51b728": "castingFromToken(uint256,bool)", "ed52068c": "revokeBurnDelegate(address)", "ed526601": "greenOnFanChun()", +"ed53661a": "PaymentEnabled(bool)", +"ed53753a": "settotalSupply(uint256)", +"ed5388c2": "getAvailableBuyETH(uint8)", +"ed53e511": "requestedBytes32(bytes32,bytes32)", "ed54746e": "lastAuction()", +"ed54c70d": "info(string,string)", "ed550443": "proxyContract()", "ed561fe5": "receiveSecurityDeposit(address)", "ed56531a": "pause(bytes32)", "ed5667b4": "transferOfPower(address)", "ed5677f6": "tierThreeMin()", +"ed56d273": "dividendsWithdraw(address,uint256)", "ed56de8c": "withdrawZRX(uint256)", +"ed5764a1": "LogTokenMultiSent(address,uint256)", +"ed583506": "tokenAllowances(address,address,address[])", "ed5850b9": "register(address,uint8,bytes32[5],address)", "ed5863f6": "agaisnt_votes()", "ed58bad8": "setAuthorizedMinter(address,bool)", @@ -136074,22 +248988,40 @@ "ed58d5ec": "setLendingContract(address)", "ed59313a": "setUsername(string)", "ed598be7": "TenantMoveIn(string)", +"ed59ae97": "tokenIssueForSale()", "ed59eda1": "_addSuperInvestor(address)", +"ed5aa456": "transferToken1(address,address[],uint256[],uint256)", +"ed5b165d": "getManagerFeeIncreaseInfo()", "ed5bc87b": "fundedProxy()", +"ed5c475b": "initialize(string,string,string,uint8)", "ed5c58f3": "set0xTokenProxy(address)", +"ed5cd4aa": "testBytesIntactIfConvertedBack()", +"ed5d1c45": "approve_90(address,uint256)", "ed5d2289": "latchFciUser(uint256)", +"ed5d3a55": "addbase(uint256)", "ed5d3f1a": "pow_10(uint256)", +"ed5d524b": "setFallbackArbitrator(address)", "ed5d6fbc": "completion()", "ed5da4f9": "computeReturnBonus(uint256)", +"ed5db874": "investorHardCap()", "ed5dc952": "getIsRoundOver(uint256)", "ed5e68f9": "closeAnnualInvest()", "ed5e7691": "CrowdCoinPreICO(address,address,address)", "ed5e8437": "locks(bytes32)", "ed5eafa2": "ClinicalTrial(address,address,uint256,uint256,uint256,bytes32,bytes)", +"ed5ec648": "setMinimumDuration(uint256)", "ed5ec919": "voidTransaction(uint256)", +"ed606bdc": "newFundsForwarder(uint64,uint64)", +"ed609972": "approve_391(address,uint256)", "ed60ade6": "bidOnSiringAuction(uint256,uint256)", +"ed60f25b": "get_total_earning(address)", "ed611895": "ManualChangeUnholdDate(uint256,uint256)", +"ed613ac1": "hasClaimedTokens(address)", +"ed6150ec": "DecimalChange(uint8)", "ed6183bf": "isWinner(uint8,uint8[5],uint8[5])", +"ed61b1a5": "withdrawPoolAmount(uint256)", +"ed61b1d0": "MAX_ZAI_SWAPPABLE()", +"ed61cc95": "balanceNeeded()", "ed621591": "KaratBankCoin()", "ed621ae1": "PriceWeekFour()", "ed621df6": "GuessNumber()", @@ -136097,137 +249029,238 @@ "ed621f0f": "YUN(uint256,string,uint8,string)", "ed62543d": "bttsToken()", "ed62986b": "_getBattleResult(int256,int256,int256,int256,uint256)", +"ed62b4d6": "MULTISIG_MINT_SIGS()", "ed62cf1f": "setCanCall(address,address,bytes,bool)", "ed62f501": "maxPendingPayouts()", "ed6302be": "left98(uint256)", "ed63455c": "stringContains(string,string)", +"ed64219b": "cancelNewBid(uint256,bool)", +"ed6426ee": "YFII()", "ed644025": "X5Coins(uint256,string,string)", +"ed645079": "use(uint16)", +"ed6493af": "getTotalCollateralValue()", "ed64b36b": "left15(uint256)", +"ed64bab2": "checkpoint(uint256)", "ed64bea4": "JamCoin()", "ed64c08c": "clearBudget(address)", +"ed6525c4": "_teamRewardRate()", "ed653164": "releaseEscrow(uint256)", "ed654fd7": "logCompleteSetsSold(address,address,address,uint256)", +"ed656113": "MsgValue2()", +"ed658375": "testaPair()", +"ed6590da": "cornContract()", "ed666e96": "artsCreatedCount()", +"ed672e96": "sharePercentage()", +"ed676201": "goToNextEpochTest(int256)", "ed67bca3": "_finalize()", "ed67e002": "getFreezeTime()", "ed684cc6": "trigger(uint256)", "ed68ece1": "newFeed(string)", "ed68ff2c": "setRequireSignedAddress(bool,address)", +"ed69a827": "addMigrateBalance()", +"ed6a2a8d": "unallocatedEth()", "ed6a2bc9": "LLToken(uint256,uint256,address)", "ed6a2d35": "Blincoin()", "ed6a897d": "teamTokensHolder()", +"ed6abab1": "redeemETH(uint256,uint256)", +"ed6ad2f8": "showResult(uint256)", "ed6b2d7d": "extractTokens(address,address)", "ed6b40c0": "PRICER_DELAY()", "ed6b5ad5": "pauseSwap()", +"ed6ba0ce": "levelStart(address)", "ed6bcd84": "TransactionPending(uint256,address,address,uint256,uint256)", "ed6bd807": "phase2StartTime()", "ed6be066": "charitySpaceToken()", "ed6bf091": "changeEndDate(uint32)", "ed6bfa2b": "toggleDeposit(bool)", +"ed6c1546": "MATH()", "ed6c3e84": "blockStart(uint64)", +"ed6c4c88": "GetMember(uint256)", "ed6cb909": "transferAddress(address)", "ed6cd5d3": "get_recipient_balance()", "ed6cd66d": "CreateUKGEvent(address,uint256)", "ed6d4055": "SBIBank(address)", +"ed6d4d0b": "recommend_rates(uint256)", "ed6d8521": "VULToken()", +"ed6d9096": "updateAddress(address)", "ed6d9169": "pushBounty(uint256)", "ed6d969a": "addSegmentation(address,uint256,uint256,uint256)", "ed6db106": "_HUNDRED()", +"ed6db37a": "createVDV(string,uint256,string,uint256,string)", +"ed6df982": "updateArtblocksPercentage(uint256)", "ed6e7f7a": "processMutuallyAgreedJobCancellation(bytes16,address,address,uint256,uint256,uint8,bytes,bytes)", "ed6e85c7": "installDonationContract(address)", "ed6eba84": "getLockedUserDeposits(bytes32)", "ed6f0792": "askOracle()", +"ed6f1855": "CUSTOM_CROWDSALE_TOKEN_ADDED(address,uint8)", +"ed6fc1bc": "transferAuthorizedCaller(address)", +"ed6ff760": "getLendingPoolCore()", "ed70d83c": "setRefProgram(address)", "ed70e032": "_removeAvatar(address)", "ed713d55": "ZerroXBToken()", "ed71cfb3": "isDepositContract()", "ed724103": "isRoundOneSalePeriod(uint256)", +"ed7259db": "Michelangelo()", +"ed72d07f": "inviters(address)", "ed7305ea": "Enrium(uint256,string,uint8,string)", "ed732ddb": "placeBet(uint256,uint256,string)", +"ed736ab6": "GetMaximumNToken(address)", "ed73b6a6": "PariMutuel()", "ed743556": "YISSToken(address,uint256)", "ed74de9d": "clone(address,uint256,uint256)", "ed7510a0": "registerContributorPool(address,uint256)", "ed7546b7": "_checkEvenIfCommBallot(bytes32)", "ed769922": "buypr0coinsAgainstEther()", +"ed776191": "tramsPerBlock()", +"ed7763d2": "_lockTimer()", "ed782750": "ICONIQ_TOKENS_NEEDED_PER_INVESTED_WEI()", +"ed783f70": "_qualifierTierCount(uint256)", "ed785e29": "PresaleBREMP(address,uint256)", "ed786cd6": "getCurrentWeek(uint256,uint256)", "ed78cf4a": "potSwap()", "ed793207": "_burnRemainingTokens(uint256)", +"ed7a144f": "Sell(address,uint256,uint256)", "ed7a1548": "updateSecondExhangeRate(uint256)", "ed7a4e0b": "winnerAddress()", "ed7a96e7": "saleInProgress()", +"ed7aa708": "balancesHyd(address)", "ed7ad2d2": "createDeposit(uint256,bytes)", "ed7b4753": "BULL()", +"ed7b763d": "usersF2Matrix(address,uint8)", "ed7c238d": "getFileName(uint256)", "ed7caa8e": "profitOrgPay()", "ed7ce71a": "KWRT()", +"ed7d82c7": "paidBoosterGain(uint32,uint256)", +"ed7d9251": "totalDailyRewards(uint256)", +"ed7db096": "ConfirmNode(uint256,uint256)", "ed7dd693": "PlaceNewForecast(bytes32,bytes32,bytes32,bytes12)", +"ed7dfd32": "isAvailableBucket(bytes32)", +"ed7e38aa": "cleanContractETH()", +"ed7e3f50": "setWaiver(uint256)", "ed7eff2b": "setConvertContract(address)", +"ed7f559c": "lockInGuess(bytes32)", "ed7f8deb": "refRewardL1Per100()", "ed80577d": "offerBtc(address,uint256,bytes32)", "ed806207": "isInt128ValidIn64(int128)", "ed810cfa": "emitBurnEvent(address,uint256)", "ed810d02": "tokensSentMain()", +"ed812666": "UNIVERSE()", "ed815d83": "query(bytes)", "ed81a68e": "edgeRange()", +"ed81bd84": "_totalSupply(address)", "ed81cdda": "rootOwnerOfChild(address,uint256)", "ed81f681": "currentDayOfWeek()", +"ed8235f8": "nftCoverPrice(address)", "ed824f2f": "tokenETHAmount()", +"ed827a69": "__getAssetBalance(address)", "ed82cac9": "toEthers(uint256)", +"ed837028": "Cat()", +"ed83d0fe": "createOrUpdateAccount(uint256,uint256,bytes)", +"ed83d79c": "settleFunding()", "ed83e9aa": "YDHTOKEN(string,string,uint256)", "ed83eb7d": "FileStorage()", "ed84115e": "publisherMessage()", +"ed841bf1": "isTokenPauser(address)", +"ed846031": "calcRedeemRet(uint256)", +"ed84fc91": "adminWithdrawETH()", "ed857bfd": "BitmassExchangeToken()", "ed861328": "submitStack(uint256,uint256,uint256,uint256,uint256,bool)", +"ed86172c": "isTknAllowed(address)", "ed861e13": "managerCountInt()", "ed864190": "testMultipleGetters()", "ed86d9c7": "playSpecificTriples(uint256,uint256)", +"ed86e637": "updateSet(uint256,address,uint256)", +"ed87169c": "stakeOf(address,uint256)", "ed879c77": "computeNextSystemSalePrice()", +"ed87cf46": "depositMin()", +"ed882c2b": "harvestTrigger(uint256)", "ed885897": "getTotalPot(uint256)", "ed88c68e": "donate()", +"ed88ed6c": "addSupportedToken(string,address)", +"ed896104": "rebalanceExternal()", +"ed896820": "m_User_Count()", "ed8991fb": "balanceMap()", "ed89b2a0": "calculateQuantityBonuses(uint256)", "ed89e864": "SupplyChanged(uint256,uint256)", +"ed89f17a": "withdrawStakerRewardTokens(uint256)", +"ed8a0b2c": "estRewardAddress()", +"ed8a2f27": "setNftParams(uint256,uint32,uint32)", "ed8a4116": "_resetPotatoes()", +"ed8a4844": "invest(uint256,uint256[])", "ed8a73a3": "developer_edit_text_crowdsale(string)", "ed8a9c0f": "clearExpiredFreezing(address)", +"ed8abfda": "projectIdToSecondaryMarketRoyaltyPercentage(uint256)", +"ed8b0706": "SetValue(uint256)", +"ed8b53b1": "setAmbInstructionGas(uint256)", "ed8b6556": "getJackpotAmount()", "ed8b9059": "set_withdrawal_gas(uint256)", "ed8bfa4d": "drainSMS()", "ed8c2aed": "closePoll()", +"ed8c5938": "burnToken(address,uint256,uint256)", "ed8d806b": "largestHODLERAddress()", "ed8df164": "New(string,bytes32)", "ed8e690b": "MessageUpdated(uint256,address,string)", +"ed8e84f3": "calc_token_amount(uint256[2],bool)", "ed8e873c": "gvAgent()", "ed8e9f2c": "LogUnfinalized(uint256)", +"ed8ec194": "getWalletBalance(address)", +"ed8ede1d": "GetR()", "ed8f02d0": "tokenValuePublish(uint256,string,uint256)", "ed8f10df": "testSign()", "ed8f11de": "Evocoin()", +"ed8fb000": "AuctionCanceledEvent(uint256)", +"ed8fc6b8": "authKeysArrayIndex(address)", "ed8fe3c1": "totalTRsWon()", "ed8fee35": "MSCE()", +"ed8ff72b": "curry()", +"ed90148c": "dayRemin()", "ed90c7b7": "deleteProduct(uint256)", +"ed9152c8": "auctionHouse()", "ed918136": "Pilfered(uint256,uint256,uint256)", +"ed9192c3": "GetPlanTimeByUid(uint256)", "ed91c906": "stopGo()", +"ed91e044": "tokenizationFee()", +"ed920914": "BRADS()", +"ed922a06": "sendPremium(uint256)", "ed927dae": "bytes32ToString(bytes32,bytes32,bytes32)", +"ed92df90": "allowanceItems(address,address,uint256)", "ed92f0a0": "BTC7500on49()", +"ed933534": "aprobarpago(address)", +"ed937cc9": "YCTPerBlock()", "ed93a8c9": "Bet0xgame(string,string,uint256,uint256,string)", "ed93ca26": "startTimeDay()", +"ed93eed8": "setXsnxTokenAddress(address)", +"ed9476c4": "viewCollectible(address,address,uint48,uint256,uint256)", +"ed94c7f4": "etherFee()", "ed950638": "whitelistRegistry()", "ed952728": "getProposalHash(address,uint256,bytes)", "ed953b69": "keyLocked()", +"ed958191": "transferLinkLessGas(address,address,address,uint256)", "ed95f52b": "startMark()", +"ed9697d6": "AdPurchased(uint256,uint256,address,address,uint256)", +"ed97005f": "updateDisComplete(uint256,uint256,uint256)", +"ed9772b6": "sellTokens(uint256,uint256)", "ed981d4f": "calculateNeededCollateral(uint256,uint256,uint256,int256,uint256)", "ed98f12c": "EthearnalRepTokenCrowdsale(address[],address,address)", +"ed994d8d": "attributes(address)", +"ed9950c7": "CrabPartAdded(uint256,uint256,uint256)", +"ed995307": "addLiquidityETH()", "ed996590": "processWhenStop()", +"ed9975c3": "getLeaderAddress()", "ed9978c7": "language()", "ed9980a6": "numPayTables()", +"ed99da31": "setNextOvernightFeeTime(address)", +"ed9a2dac": "swapEthForTokenBancor(address,uint256)", "ed9a3ac1": "bidProxy()", "ed9a3d2e": "isCustomerinBL(address,address)", "ed9a6a65": "tokenVendor1()", +"ed9a7134": "goTo(uint256)", +"ed9aab51": "registryAddress()", "ed9b0107": "get_senderCryptobank(uint256)", +"ed9b9e73": "_Staked(address,uint256)", "ed9bb8d7": "getTweets(uint256)", +"ed9bdeda": "PERCENT_FOR_DEV()", +"ed9be432": "safeParseInt(string,uint256)", "ed9beb05": "setICO(bool)", "ed9c6d53": "getCCH_edit_9()", "ed9c7c11": "validateTAOSignature(string,uint256,address,string,uint8,bytes32,bytes32)", @@ -136237,40 +249270,74 @@ "ed9d7dd3": "transferCommissionGetter(address)", "ed9da760": "uniq(uint128[])", "ed9e3ca2": "addAuditAddress(address,address)", +"ed9ef524": "changeChildChain(address)", +"ed9ef9b3": "capitalization(address,uint256)", "ed9f18fb": "setMinStake(bytes32,uint256)", "ed9f4010": "getATokenHolder(uint256)", +"ed9f4ba2": "MAX_POOL_FEE()", "ed9ff004": "privateStage()", "eda003ce": "setSaleController(address)", +"eda04421": "_computeTermRandomness(uint64)", +"eda05678": "minInvestorBSCSBalance()", "eda0576b": "seeZombieRole(uint256)", "eda09d80": "SELLER_CHECK_STEP(bytes32)", "eda1122c": "redeem(bytes32)", "eda14233": "timeStampOfCrowdSaleEnd()", +"eda1470a": "winningsWon(uint256)", +"eda17576": "addrXriba()", +"eda19848": "unstakeYFMS(address)", +"eda199aa": "finalizeStrategyUpdate()", +"eda1f1a5": "findTokenConfigIndexByUnderlying(address)", "eda20bc9": "completeFailed()", "eda23f20": "getListTempHolders()", "eda2a0af": "calcPayouts(bool[])", "eda30c9e": "delGame(address)", +"eda3ba90": "packageIdMap(uint256)", "eda4597f": "fake_airdrop(address,address,uint256)", +"eda4861a": "halt(uint256,uint256,uint256)", "eda4e6d6": "periodStart()", "eda50e33": "addDescription(string,uint256)", +"eda55468": "allowDevToEat()", +"eda5b2f1": "DepositZILDCount(address)", "eda5d80b": "test_startNumber()", "eda5de7c": "toggleDrain()", "eda5ffdc": "newWork(uint256,uint256,uint256,address)", +"eda677d5": "withdrawLDB(uint256)", +"eda6a5bc": "tokensToTokensOnUni(uint256,address[],uint256)", +"eda6d769": "_withdrawSome(uint256)", "eda6e2db": "EarlyContribReceipt(address,uint256,bytes32)", "eda70f7e": "expiredCount()", "eda71f6e": "getEstimateObligation(bytes32)", +"eda72bfa": "setdel(address)", +"eda7c599": "getPoolToken(uint256)", +"eda7e97d": "withdrawToController(uint256)", +"eda836b8": "addPool(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", "eda8669e": "setAtomCool(uint256,uint8)", "eda89279": "getAuctionEnd(uint256)", +"eda8a318": "PlotPriceUpdated(uint256,uint256,address)", +"eda90de0": "whiteListTokenStatus(address)", +"eda96ea9": "getExitFeeCooldown()", "edaa6a8d": "Sylence()", "edaaeed2": "DT()", +"edaafe20": "buffer()", +"edab119f": "borrowingFeePercent()", +"edac2338": "pendingFerrari(uint256,address)", +"edac2df2": "yfsi()", "edac3cb3": "popExperience()", +"edac61a9": "compoundCollectCOMP()", +"edac7457": "pID2Player_(uint256)", "edac985b": "addWhitelist(address[])", "edacfd25": "invalidateHashes(bytes32[])", "edad7f9b": "VestingContract()", "edad8585": "tokenIssuedPreFirstIco()", +"edadc00f": "test_underlying_token(int128,int128,uint256,uint256)", "edadeb26": "initCommunityAddr(address)", "edae7771": "setKingdomCreationFeeWei(uint256)", +"edae876f": "_router()", "edaebc20": "getTrait(uint32)", "edaee1dc": "buyAnimalsFromUser(uint256)", +"edaf2d2e": "TVL()", +"edaf98d8": "gcb(uint256)", "edafe588": "feeSharingBps()", "edb04c12": "OpenWindow(uint256,uint256,address)", "edb08434": "mint(int256,address,uint256,bool,uint32)", @@ -136278,74 +249345,141 @@ "edb0f2ca": "MockGetTogether()", "edb1072e": "buyWithTokensBy(address,address)", "edb17d10": "join_refund(uint256)", +"edb2191f": "setHandlers(address[])", "edb25841": "getOrder(address,uint256)", "edb27f4e": "switchWizard(address)", "edb2b809": "nextGameCost()", "edb3623f": "goldTransfer(address,uint256)", +"edb3ba0b": "modelVersion()", "edb41dec": "onRoundEnd()", +"edb43188": "viewWorkingUsers(address,uint8)", +"edb469c7": "issuer2()", +"edb4a888": "_decode_sol_bytes31(uint256,bytes)", +"edb4e1cf": "reserveTotalSupply()", +"edb5ce40": "RandomnessReceived(uint256,address,uint16,uint256)", "edb5d946": "fillSell(address[8],uint256[6],uint8,bytes32,bytes32)", +"edb5dae1": "aliaStakeReward(address)", +"edb5f4f5": "checkCampaignCreator(uint256)", +"edb61a52": "oracle_price()", "edb649de": "updateReferalBonus(uint256)", +"edb6b80a": "eraStatus()", +"edb6bff4": "cDaiContract()", +"edb766f4": "inviteUserInfoV1(uint256)", "edb78e36": "claimBonus(address,address,uint256)", +"edb7a6fa": "defaults()", +"edb887a4": "circulationSupply()", "edb9548c": "_increasePrice(uint256)", "edb961ff": "toHexString(bytes32)", +"edba3828": "setCollectedFund(address)", +"edba5273": "points_weight(address,uint256)", +"edba7013": "refundMyContributions(address,uint256,uint256[])", +"edba8dd7": "setDBMinDAO(uint256)", +"edba9e6e": "ReleaseQuantity(address,uint256)", "edbae7c6": "setSaleAdvertisementRate(uint256)", "edbb1d43": "savings_goal()", +"edbb3b2c": "updateStakingWallet(address)", +"edbb5999": "transferAvailableToMultiplier()", +"edbbd9ca": "_liquiditylock(address)", +"edbbdf2e": "Managers(address)", +"edbc4e23": "totalALL()", +"edbe1040": "reinvestIdx()", +"edbe1954": "setLotLeftCount(uint32,uint128)", "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)", +"edbf6f50": "availableManagerFee()", +"edc001bd": "calcNeedEthToPoolOut(uint256,uint256)", "edc0aee6": "createPlayerMatch(uint256,uint256,uint256,uint256,uint256)", "edc11a11": "isReadyToFight(uint256)", +"edc168f1": "REVOKE_VESTINGS_ROLE()", "edc19a81": "safeTransferFromWithFees(address,address,address,uint256)", "edc1ab6a": "announce_therand(uint32,bytes32)", "edc1e4f9": "setAllowanceSheet(address)", +"edc1eed0": "userRank(address)", "edc25f42": "calcRefill(string,uint256)", "edc2ee4e": "configOf(uint256)", "edc31e14": "testExecuteSellOrderShouldIncreaseSellerBalance()", "edc3b4db": "getCharacterNuja(uint256)", +"edc3bc3f": "_operatorApprovals(address,address)", "edc41d06": "canCloseVoteRevealPhase(address,bytes32,bytes32)", "edc423e6": "cancelChangeOracle()", "edc427fc": "pullEtherFromContractAfterPreICOPublic()", "edc42b2d": "changeWhitelistedContract(address)", +"edc4400a": "changeNFTPrice(uint256)", +"edc441b5": "setPairs(address[],address[],address[])", "edc48941": "buyByAtom(uint256)", +"edc4c6ff": "init(uint256,uint256,bytes27)", +"edc4f118": "WhiteListRemoval(address)", +"edc5043e": "amountToTake1(uint256)", +"edc550dc": "addOption(string)", +"edc5cfb0": "financePeriodsTimestamps(uint256)", "edc62aaf": "_generateRandomPart(uint256,address)", "edc6454d": "SaleToken(string,string,uint256)", "edc65c83": "setOraclizeCallbackGas(uint256)", +"edc67eb6": "playerInfo(uint256,address)", "edc74092": "determineOutcome(uint256,uint256,uint256,bool)", +"edc776ad": "deployUsr()", "edc7aeda": "HYCToken()", "edc7bcf5": "EscrowContract(address,address,uint256,address)", "edc7d4ab": "changeOriginWalletIdForAthlete(uint256,address)", +"edc832b3": "basket()", "edc922a9": "getProviders()", "edc93066": "CompShare1()", "edc94527": "TgeProxy()", +"edc9af95": "uni()", "edc9f182": "migrate(address,uint40,uint40)", "edca1e40": "blike()", "edca371d": "BuySeed()", "edca914c": "buyTicket()", +"edcaa982": "calcLockingRewards(address)", +"edcab04e": "changeMinRatios(bytes32,uint256)", +"edcacbd8": "filledPlaces()", "edcb3c08": "IsInitAssign()", +"edcb909c": "agreePercent()", "edcb9e9e": "updatePayout(address)", +"edcc2177": "getTvl(address,address)", +"edcc7e1c": "AuctionSuccessful(bytes32,uint256,address,uint256,address)", +"edcd5d17": "registerFarm(address)", +"edcd7655": "traitOracle()", +"edcd95b1": "topUpChi(address)", +"edcda406": "transferBunnyOwner(address)", +"edcde9d1": "retrieveDataAndSend(uint256,uint256)", "edce50de": "deposit(bytes32,uint256,uint256,address,uint256)", "edcf2ad4": "_addLegitOwner(address)", "edcf4d56": "deletePriceValue(bytes32)", +"edcf58fe": "HolderAddressRemoved(bytes32,address,uint256)", "edcf6b26": "getVersion(string,string,uint256)", +"edcfafe6": "articles(uint256)", "edcfd050": "advisors()", "edd004e5": "next(uint256)", +"edd038c3": "createWrappedERC721(address,bytes)", "edd0b5cb": "getFeeRatio(address)", +"edd0c6d9": "finishSingleLock(address)", +"edd0d421": "lock(uint256,uint256,uint256)", "edd0d90d": "__max__(uint256,uint256)", +"edd1000c": "addUnStakingfee(uint256)", "edd13e38": "mediumFunding()", "edd19ded": "PaymentManagerUpdated(address,address)", "edd1d02e": "getNextFeeWindow()", "edd20050": "LOG_SuccessfulDraw(address,uint256)", "edd21840": "calculateKnowledgeSell(uint256)", "edd27b8f": "setDestroyThreshold(uint256)", +"edd28cd5": "addLiquidityAndLock()", +"edd2d1e4": "withdrawAsEth(address)", +"edd2f0bb": "decreaseSupply(address,address,uint256)", "edd36afd": "ProjectValidation(address,address,address,address[],address)", "edd3896c": "ShowWhaleAddress()", "edd3def5": "setTmpWriteTimestamp(bytes32,uint256)", "edd3ff84": "isSponsorableJobApproved(address,uint256,address[])", "edd403a9": "TOP1000()", "edd40c3c": "setMnyTiers(address)", +"edd427c1": "_addressStringCreate(address,bool)", +"edd551bb": "_migrateAddress()", "edd57e32": "_decodeTokenId(uint256)", +"edd5c824": "contractFor(uint8)", "edd5ede6": "passTo(uint256,uint16[],uint8,bytes32,bytes32,address)", +"edd5fc0c": "getUsdtProportion()", "edd634b8": "fullPrice()", "edd637ca": "CreateCRS(address,uint256)", "edd637d0": "bonus(address,address)", @@ -136355,14 +249489,26 @@ "edd70a75": "removeContractRole(bytes32,string)", "edd7716a": "checkVotingForChangeBuySellPrice()", "edd7bb75": "changeBet(uint256)", +"edd7c43b": "updateBalanceOf(address,uint256,bool)", "edd7ca6f": "getInterest(address,address)", +"edd7db75": "removeMyPool()", "edd7fcc4": "_createPermission(address,address,bytes4,address)", "edd83104": "amended(address)", +"edd8ca7b": "openInterest(address)", +"edd8d729": "validatorSetUpdated()", "edd8dd89": "CalculationUpdate(uint256,uint256,uint256,uint256,uint256,uint256)", "edd94fb9": "setBaseEthCap(uint256)", +"edd97410": "getResultingTokens(address,uint256)", +"edd9a46b": "setPerDayFreezeRate(address,uint256)", "edd9e183": "feedUnicorn(uint256)", +"edda1ff4": "validateClientOfContract(uint256,address,string)", +"edda7815": "withdrawSnowflakeBalanceFrom(uint256,address,uint256)", +"eddaf7a1": "transferYearlyPool(uint256)", "eddb00d4": "placeBuyOrder(uint256,uint256,uint256,uint256)", +"eddb2b42": "fundedRewards()", "eddb53e1": "TokenWithdrawal(address,uint256)", +"eddc029e": "bothPartiesEnterd()", +"eddc65e4": "setReferralData(address)", "eddce76b": "testFailDisownNotTransferable()", "eddd0d9c": "setMintFee(uint256)", "eddd2d39": "getResourceERC20Address(uint16)", @@ -136371,139 +249517,250 @@ "edde6407": "_transfer_byProxy(address,address,uint256)", "edde8349": "random_num()", "edde9145": "PlaceSellOrder(uint32,uint256)", +"eddeb73b": "withdrawableFromTranche(address,uint256)", +"eddefde9": "BebDeposit(address,uint256)", "eddf3a48": "BsToken_STN()", +"eddf58f1": "price1AverageUNC()", +"eddf94f4": "conf(address,address,uint256,uint256)", "eddfcffa": "getDealsLength()", "ede02b71": "bleach(uint128,uint128)", "ede05887": "getActiveContractRecordConcat(string)", "ede2271c": "DOO()", +"ede2362f": "setVaultAccess(address,bool)", +"ede26d23": "updateBountyFulfillment(uint256,uint256,string,address,uint256,address[],bytes[],uint256[])", +"ede2713a": "init(uint256,string,uint256)", +"ede2b9ec": "withdrawToToken(address,uint256,address,address,uint256,uint256,uint256,uint256)", "ede340ec": "getEloRating(address,address)", "ede38421": "totalStakedForAt(address,uint256)", +"ede39a72": "canVirusTransfer(uint256)", "ede3d9d5": "returnDynamic()", +"ede3fe07": "uSmallFactor()", "ede42186": "gettotal_Supply()", +"ede46d57": "apyDiario()", "ede48fb7": "triggerEvent()", +"ede49386": "Premium(address)", "ede4edd0": "exitMarket(address)", +"ede55f59": "freezeAddresses(address)", "ede5a07d": "getSquareArea(uint256)", "ede5f66f": "getNumberMilestones(uint256)", +"ede658b0": "newAppProxy(address,bytes32,bytes)", +"ede66e50": "CheckInEvent(address,uint256,uint256,uint256)", +"ede6ceb7": "calculateDepositWeight(uint256,uint256)", +"ede6fbf5": "createCar(string)", +"ede72148": "getUnpoolRequestEpoch(address)", "ede729ad": "expertTokensPerEth()", "ede778d2": "EventCancelAuction(uint32)", +"ede7812c": "dstheoculy(uint256)", "ede78573": "EDT2()", +"ede7a637": "Quote(address,string,uint256)", +"ede80897": "setCancelFaultPeriod(uint256)", +"ede81f6e": "getSecondAPR()", "ede8acdb": "startAuction(bytes32)", "ede8af01": "getNextGameId()", "ede8cf8f": "RaidenToken(address,address,address,address,uint256)", "ede8e035": "FITN()", "ede8ebf3": "checkApprove(address,uint256)", "ede8eed4": "MemberAdded(address,uint256)", +"ede9298d": "balanceOfErc20(address)", "ede930c9": "changeOwnershipto(address)", "ede963d1": "isAddressExpired(address,uint32)", "edea3e5d": "createFincontractWithParties(address,address,bytes32)", +"edea6b06": "auditUser(address,uint256,uint256)", "edeb34f7": "GrantsControlled()", "edeb4ea9": "howMany(uint256)", "edeb797c": "getNumOptions(uint256)", "edebb8c5": "generateCryptsyToken(uint32,uint32,uint32)", +"edec5f27": "whitelistUsers(address[])", +"edec6416": "AddressAdded(uint256,address)", "edecde0e": "withdrawAllChannels(address)", +"eded3fda": "pendingRewards()", "eded5d9e": "getColor(uint256,uint256)", "ededb770": "payeeWithdrawInterest(uint256)", "edede601": "testBalance()", +"edee5436": "pass_address()", "edeeb143": "minPlay()", +"edef719a": "burnSecondary(address,uint256)", +"edef8b83": "athletes(uint256)", "edef8bdd": "teamStakesFrozen()", +"edef9467": "emitNewBettingEvent(address,uint8,uint256)", "edeff589": "giveMeSomeBBUCKs()", "edf049f7": "sendPer3()", +"edf04bd4": "equityTokensToShares(uint256)", +"edf06f7b": "addPayment(address)", +"edf07f15": "pause(uint8)", +"edf0a64a": "convertBrrrXintoBrrr()", "edf0b0df": "getPositionCount(address,address)", +"edf0b35d": "AngelTokenPurchase(address,address,uint256,uint256)", +"edf0cc28": "burnTokensAndWithdrawNFTs(uint256[],address[])", "edf0d328": "setBlockDotCoinbase(address)", "edf0ede3": "withdrawTokenUser(address,uint256,address)", "edf1da66": "GxOrderList(address)", "edf1eeb0": "oraclize_useCoupon(string)", +"edf1ef68": "_fromUnderlying(uint256,uint256,bool)", "edf26d9b": "addresses(uint256)", "edf2d2a2": "setWithdrawGasOverhead(uint256)", "edf2f745": "notifyTerminate(uint256)", +"edf3b09c": "set_rewardpool(address)", "edf3cbb1": "TeamDisqualified(address)", +"edf3d6c4": "setContributorFundAllocationRate(uint256,uint256,uint256)", +"edf49c09": "numberOfAssets()", "edf4a403": "getRateWithBonus()", +"edf4c050": "ChalToken()", +"edf4d847": "salesWallet()", +"edf51628": "FOUNDERS_POOL()", +"edf52140": "stakeContractAddresses(uint256)", "edf53886": "addressToUser(address)", +"edf54dcb": "keyPriceIncreaseRatio()", +"edf56646": "IMPOSS16()", "edf576d1": "MaybePerformClose()", +"edf58b0a": "winnersOnly(uint256)", +"edf5a5be": "transferOwnership(address,string)", "edf5c0c0": "getChannelList()", "edf6466d": "NewMayor(address,address)", "edf6601c": "getMintRequestStatus(uint256,int256)", "edf69f2b": "iCarChain(uint256,string,string)", +"edf6e56a": "DefaultOperatorsCompleted()", "edf6fb4b": "isBiometricCompleted(bytes32)", +"edf81d0a": "buyProducts()", "edf8333d": "transferFromNonprofitdisbursementfund(address,uint256)", +"edf85f51": "salePrice(uint256)", +"edf87861": "cevaWhitelistProperty(address,bool,bytes32)", "edf87aff": "createUint256s(bytes32[],uint256[])", +"edf8910c": "getPeriodFinishTime(uint256)", "edf89793": "routingCodeMap(bytes32)", +"edf8bc13": "withdrawLPTokens()", "edf92ff3": "rentModified(address,uint256)", +"edf94b82": "poolToBeRemovedIndex(address)", +"edf97984": "setLiquidateHoldingTokenAmount(uint256)", "edfa45e6": "GetMyProd()", +"edfa4fa4": "SetKyber(address)", +"edfa9a9b": "expiryPrice()", "edfab4fc": "receivedWeiCap()", +"edfb1336": "auctionDetails(address)", +"edfb2de1": "Set_Slot(uint256,address)", "edfb4175": "getRollResults(uint256,uint8,uint8,uint256,address)", "edfb4191": "getInterestCount()", +"edfb7801": "KILL_DEADLINE_DT()", "edfbda27": "_addNFToken(address,uint256)", "edfbf7b6": "setVotingDeadline(uint256)", "edfbf9cf": "addService(string,string,int256,uint256,uint256)", +"edfc8257": "bonusPercentRoudFour()", +"edfce9e9": "r_b16()", "edfceace": "deleteStrategy(bytes15)", +"edfcee36": "transferAllFundsOut(address)", "edfd2f81": "percentageRecipient3()", "edfd786e": "uint2str()", "edfdd9d8": "coolduwnUP(uint32)", +"edfdeafd": "getCommissionCost()", "edfe5483": "IQFToken()", "edfe676b": "refundPlayersAfterVeryLongGame()", +"edfe692b": "buyStars(address,uint256)", "edfea70c": "playerProfit()", +"edfedf93": "vestTokensDetailInt(address,uint256,uint256,uint256,bool,uint256)", "edff2702": "window0TokenExchangeRate()", "edffe3e8": "setAddressF1F2(address,address)", +"edfff632": "agreed(uint256)", "edfffca0": "minedToken()", "ee00362f": "strToOperator(bytes32)", "ee007a54": "pickRandomAssets(uint256,bytes32[])", "ee00adcd": "ICOEndedSuccessfuly(uint256,uint256,string)", "ee00dd43": "getEventFirst(uint256)", +"ee00ef3a": "MAXTIME()", "ee0145f3": "calcETCtoCOR(uint256)", +"ee01555d": "initialize(address,address,address,address[],address[],address,address)", "ee0186b6": "buyPreSale(address,uint256)", "ee029de1": "exchangeInterval()", +"ee02b3c7": "toggleFundsTransfer()", +"ee02f27c": "setMaintenanceModeSX(bool)", +"ee033614": "setGasTokenParameters(uint256,address)", +"ee03af28": "_setBirdPlusAddress(address)", "ee0446b2": "approvedAmount(address)", "ee0465d3": "BetComplete(bool,uint256,uint256,uint256,address,uint256)", +"ee046dfd": "Offer(uint256)", "ee04b4b9": "rescueIndex()", +"ee05283a": "isInCooldown()", +"ee054ff9": "makeCommitment(bytes32,uint256,uint256,uint256,string)", +"ee06051f": "addToManagers(address)", +"ee065701": "tk_topUpETHRewardPool()", "ee069097": "getAllFunding()", "ee06eece": "Opulentos()", "ee070805": "disabled()", "ee0715ed": "updateRenExBalances(address)", "ee071aad": "hasCollectedWinnings(address)", +"ee0746be": "ProcessedVotesByProposal(uint256)", "ee07a22c": "MakeDai(address,address,uint256,uint256,uint256)", "ee07bf22": "Supply()", "ee08022a": "getNumRegularTokensBought(address,address)", "ee08388e": "parentOf(address)", +"ee08cb9b": "CASHBACK_PROGRAM()", "ee08fcf3": "getAttributesForAssets(uint256[])", "ee091034": "IcoDiscountPercentagesChanged(address,uint8,uint8,uint8)", "ee095c0e": "endRaffle()", +"ee097d79": "getGroupPurchasedPrice(uint256)", "ee09a001": "_saveAndTransfer(uint256,uint256,uint256)", "ee09ae4a": "ethFundManager()", "ee09d27c": "Result(address,string)", +"ee09f2bd": "coeffScore()", +"ee0a3065": "MAX_NODE_STAKE()", +"ee0a53c1": "veraswap()", "ee0a8011": "grantCoins(address,uint256)", +"ee0a83fe": "balanceOfBonded(address,address)", +"ee0ab465": "UNI_ROUTER()", "ee0b04be": "claimTokensFor(address)", +"ee0b0926": "viewBaseOffer(uint256)", "ee0b0eb0": "IotWifitoken()", "ee0b5445": "transferStorageOwnership(address)", "ee0b5d8b": "getPlayerInfoByAddress(address)", "ee0c0346": "changeSupervisor(address)", "ee0c3e02": "tradeEventHandler(address,uint256,address,uint256,address,address,bytes32,uint256)", +"ee0c944d": "setupWrapper(address)", +"ee0ca517": "getAllPollIds()", "ee0cb64c": "weekFourthRate()", +"ee0cc817": "Beaten(address,uint256,bool)", "ee0d605c": "authenticate(bytes)", "ee0d93ce": "optionInitialSupply()", "ee0d9c61": "withdrawXPI(uint256)", "ee0dc478": "testSetEnforceRevisions()", +"ee0df86a": "setgtamount(uint256,uint256)", "ee0e21a0": "Amount(uint256)", +"ee0e8739": "determineType(address)", +"ee0eb467": "marketSellOrdersFillOrKill(uint256,bytes[])", "ee0ebe0c": "packageCount()", +"ee0f0ade": "canPause(uint256)", +"ee0f0ee1": "guard(address,uint256)", "ee0f1d6b": "checkPlayerClaimed(uint256,address)", "ee0f809e": "buyTulip(bytes32,uint16)", "ee0fcc75": "setScore(address,uint256)", "ee0fdd0f": "pledgeTokens(uint256,uint256)", "ee10a45d": "EMPresale()", +"ee10ecef": "approve_454(address,uint256)", "ee112b59": "Aereum(uint256,string,string)", +"ee11824a": "TOKENS_ROUND_1()", "ee11ab9d": "getCEdetails(bytes32)", +"ee11f5b6": "commit_new_parameters(uint256,uint256,uint256)", +"ee129bf2": "changeRntBnbRate(uint256)", +"ee12d4f2": "totalDepositedWei()", "ee1333a1": "setProviderWebsite(uint256,string)", "ee1374a2": "transferAdvisor2Tokens(address,uint256)", "ee13e042": "Vix18Coin()", +"ee148587": "makeNFT(uint256,string)", +"ee14e939": "merchants(address)", +"ee1596e5": "userReferralsWei(address)", +"ee15a07d": "T_TOKEN()", "ee15b84b": "TokenFulfillment(address[2],uint256[8],uint8,bytes32[2],uint256)", "ee15ee31": "PartnersAddress()", +"ee1658fa": "viewFellowBuccaneers()", "ee166bba": "setOfferSize(uint256)", "ee16bf57": "FailSafeActivated(bool)", "ee16c7bd": "GetTickSize(uint256,uint256,uint256)", "ee172546": "totalRewardsDistributed()", "ee174697": "winnerAnnounced()", +"ee177c3f": "sendToValidator(address,uint256)", "ee179857": "addVestingGrant(address,uint256,uint256,uint256)", +"ee186cd7": "updateTicker(string)", "ee1879ef": "makeRecorderID()", +"ee18d99e": "preClaimPeriod()", +"ee190877": "countNumberTeam()", "ee192d13": "createRoom(uint8,uint8)", "ee196fb8": "doApproval()", "ee1971ea": "getOwnersBalance()", @@ -136513,43 +249770,69 @@ "ee19fbec": "stop_service(uint256,uint32)", "ee19fe96": "minSiteTipPercentage()", "ee1a4b5a": "sT2()", +"ee1a5bcd": "withdrawFiveDays()", "ee1a6295": "bonusEndTime()", +"ee1a68c6": "getRemainToAbsorb()", +"ee1ab640": "PR_FEE()", "ee1ae93b": "executeRecallCapital(address,uint256)", +"ee1b0953": "brackets(uint256)", "ee1b4828": "closeBooks()", "ee1bb82f": "SetURI(uint256,string)", +"ee1c4500": "setStakingLaunchTime()", "ee1c888a": "setEnableBuyAndSell(bool)", +"ee1ce320": "canRemove(uint256,address)", "ee1ce841": "getKeyCount()", +"ee1ceed1": "balanceReferOf(address)", +"ee1cf341": "getRandomMask()", "ee1d036c": "getVestingQuantity(address,uint256)", "ee1df50d": "poolStartDate()", "ee1df98e": "LTO()", "ee1e61b2": "currentFundingStage()", "ee1e84f6": "performRefereeDecision(uint256,uint256)", +"ee1eab4f": "updateParameters(uint256,uint256,uint256,uint256)", "ee1ec46c": "MembersLength()", +"ee1ed0d8": "UserVerified(string,address)", +"ee1f00a8": "CP(uint256,uint256,uint256)", +"ee1f102f": "getSentRequestCount()", "ee1f5a7f": "setEtherWallet(address)", +"ee1fae3c": "removeLiquidityETH(uint256,uint256,uint256,address,uint256)", "ee1fae7f": "setMaxBatchAssignment(uint256)", "ee1fc2e6": "decreasePreSaleSupply(uint256)", +"ee1fce9e": "filterAthleteByRaceRange(uint256)", "ee1fe2ad": "mint(address,address)", +"ee204abb": "getPoints(address)", +"ee207024": "rate(bytes32)", "ee207e07": "getTimeBonus()", "ee2089b2": "setPresale(address,bool)", "ee20e493": "CloudX()", "ee20e784": "setAllowance(address)", +"ee20e938": "_feesCollected(address)", "ee20f05c": "generatePseudoRand()", "ee2127c8": "RATE_TIER2()", "ee216932": "getIcoPhaseOneTokenPriceInPoundPences(uint256)", "ee216ff5": "setPresaleClosingTime(uint256)", "ee21aa64": "_getBalance(address)", +"ee221e16": "testBytesConvertedToUintArray()", "ee224707": "withdrawAllocation()", +"ee22526e": "get_user_signal()", "ee22610b": "executeTransaction(uint256)", "ee2269e5": "returnPtSafeLarge()", "ee228dec": "createQueue(bytes32,bytes32,bool,bytes32,bytes32,bool)", "ee22adf8": "_recomputeAccountLastAverageBalance(address)", +"ee22afbe": "getSortedSpot(uint256,uint256,bool)", "ee2316db": "rand2()", "ee2383a6": "CreateCampaign(uint16,uint16)", "ee23a94a": "setSpecialPrice(address,uint256,uint256)", +"ee23bfb8": "EventOwnerTokenBalancesReleased(address,uint256)", "ee23e7f7": "runTime()", +"ee243f87": "RequestCancelled(uint256)", "ee245b53": "setFishbank(address)", +"ee247b04": "swapEthForERC721(address,uint256[],address)", "ee24b5e4": "historyBlue(uint256)", "ee24bba8": "htoa(address)", +"ee24bea3": "depositMibBUSD(uint256)", +"ee24d935": "requestEthereumPrice(bytes32)", +"ee25560b": "claimedBitMap(uint256)", "ee255c57": "controllerAddr()", "ee259ff2": "buyWithEther()", "ee25f580": "consumeMsg()", @@ -136557,30 +249840,44 @@ "ee2679bc": "auctionStarted()", "ee26ab66": "distributeEbyteForEBYTE(address[])", "ee26bf68": "LogSetup(address,uint256,uint256)", +"ee26fac3": "car()", "ee27ab57": "endFirstDayICO()", "ee27ac98": "set_new_dividend_share(uint256)", +"ee27c689": "getMidPrice()", "ee27e707": "buy(uint8,bytes)", "ee280f89": "lotteryByETH(address)", +"ee284576": "safeLockETH(address,address,uint256,address)", "ee28b744": "getClaimable()", "ee28ea62": "acceptEscrow(uint256)", "ee295b32": "Erc20Token(string,string,uint8)", +"ee29705d": "inCaseDeposit(uint256)", "ee298d19": "winningChanseSt()", "ee29ce15": "shareKey(bytes32,address)", +"ee29cf8c": "setHexContractAddress(address,address,address)", "ee2a0c12": "setPrivateSaleAddress(address)", "ee2a1ec1": "_removeTokenFromBarn(uint256,address)", +"ee2a9411": "DaiAddress()", "ee2aab77": "canSend(bytes32,address,address,uint256,bytes,bytes)", +"ee2ac05f": "totalDonation()", "ee2af3fb": "set_factory(address)", "ee2b78a1": "minPurchaseQty()", +"ee2beead": "SumEthz()", +"ee2c087d": "setInvestorFreezeWaiver(address,bool)", "ee2c4fec": "PARTNER_SALES()", "ee2d2490": "bidfailure()", +"ee2d4a54": "littClientSubscribed(address,string,uint256,uint256,bool)", "ee2dbd8c": "_addSigner(address)", "ee2dbf86": "hasvote()", +"ee2e53ff": "unlockDate8()", "ee2e66c7": "CryptoSlotsCrowdsale()", "ee2eba5b": "updateUserClaimInBulk(address[],uint256[])", "ee2ee146": "unlockTokenForExchange(address)", "ee2ef6ec": "makeItSellable(uint256)", "ee2ef9d9": "midasDepositAddress()", "ee2f00a8": "totalPresaleCount()", +"ee2f13cd": "removeWitness(address)", +"ee2f3a05": "TEN()", +"ee2fa39c": "getDiceSides(uint256)", "ee2faf74": "setCrowdsaleBlocks(uint256,uint256,uint256,uint256)", "ee2fbf3a": "privateFundingSupply()", "ee30839f": "IkuraMint(address,uint256)", @@ -136588,7 +249885,9 @@ "ee31bf00": "quickChange(uint256,address[],uint256)", "ee31eb04": "setBrickAddress(address)", "ee31f9f6": "totalSupplyTmp()", +"ee323cd0": "htlcGroupMap(address)", "ee3244aa": "unreg_bountyHunter(address,address)", +"ee324aac": "currentSupplier()", "ee331490": "Addition(uint256,uint256)", "ee339fd7": "Pruebacoin123()", "ee33a04e": "recordId(address)", @@ -136596,203 +249895,398 @@ "ee34c6ad": "hybridizationExists(uint256)", "ee35478a": "tokenMarketPool()", "ee355b1f": "cancelTicket(uint256)", +"ee356ec0": "buyTokenWithBUSD(uint256)", "ee359959": "refundGameAfterLongInactivity()", +"ee35ba50": "getMarketRewardInfo()", +"ee35dabb": "totalAnimalsCreated()", "ee360ff0": "transferTokensToDividendManager(address)", "ee362d3d": "ACATokenSale(address,uint256,uint256,uint256,address)", +"ee365a4b": "claimMulti(uint256,address[])", "ee36d4ab": "placeBuyOrder(uint256,uint256)", "ee3711be": "Storage()", "ee3743ab": "nextStage()", +"ee3772de": "SPOTTER()", "ee378610": "etherToTokens(uint256)", "ee37e271": "setSaleType_Presale(uint8,uint8,uint32,uint256,uint256)", "ee38232f": "updateNota(uint256,string,string)", +"ee385304": "existingIds(bytes32)", "ee386beb": "TokensPerKEtherUpdated(uint256)", "ee389b94": "TenToken()", "ee38c7d3": "BONUS_ICO_STAGE1_PRE_SALE5()", "ee38cad3": "setYxName(address,address,string)", +"ee39190e": "addToWhitelistInBulk(address[])", "ee39e7a0": "getK()", "ee3a0229": "processBTCTransaction(bytes,uint256,address,bytes20)", "ee3a5075": "removeEthInvestorRequest(uint256)", "ee3a8816": "TheSwifthDAICO(address,address,address,address,address,address,address,address)", +"ee3ad5ca": "dsd()", +"ee3adf12": "bandits()", +"ee3b61cb": "_createRandomNum(uint256,uint256,uint256)", +"ee3bf06f": "addProposal(string,bytes,address,uint256)", "ee3c3bad": "isAllowedPurchase(address,uint256)", "ee3cc63d": "MSP(address)", "ee3d2f07": "massClaim()", +"ee3d6557": "pendingInvestments(address)", +"ee3df4eb": "setBirthDate(uint256)", +"ee3df8e1": "last_token_id()", +"ee3dfe2b": "sellingAllowed()", +"ee3e3acf": "accountReferrals(address)", "ee3e3e2a": "tokensPerOneEther()", "ee3e8a02": "enableSaleOwner(address)", "ee3ec146": "calculateAccountValuesInternal(address)", "ee3f1bc7": "changeVoters(address,string)", +"ee3f39c2": "setMinFreezingValue(address,uint256)", +"ee3f4003": "set_test2()", +"ee3fe981": "setBtcTokenBoughtAddress(address)", "ee4024db": "setAdmin(bytes32,address)", "ee40a13c": "addNewReport(string)", "ee40b9bc": "TestRo(uint256,string,uint8,string)", +"ee40ba08": "getrandPass(uint256)", "ee40d7c6": "SvelteyCoin(uint256,string,uint8,string)", +"ee40f3ef": "deactivationPaused()", "ee41858e": "addBlock(address,uint256,uint256,uint256,uint256)", "ee41ed47": "insertCase(uint256)", +"ee41f0bc": "swapTokenAmount(uint256,uint256)", "ee422f13": "borrowItem(uint256)", +"ee424278": "migrate(address,uint256,uint256,uint256)", +"ee427639": "RoundTime(uint256)", "ee428514": "CPTestCoin()", "ee42b10b": "act()", "ee42c2d9": "getRewardMatrix()", "ee4350ed": "sellBonds(uint256)", +"ee435f55": "incrementStakingEpoch()", +"ee4366de": "marlock(address)", "ee43d30f": "allocateRestOfTokens()", +"ee4411f0": "lockedTokens_6(address)", "ee44b7d1": "removeSubOwner(address,address)", +"ee44cf50": "approve_66(address,uint256)", +"ee44da7e": "getBylawBytes32(bytes32)", "ee44de25": "BaseExspaceToken()", +"ee450c13": "mintCar(address,uint256)", "ee4516d9": "getChannelParticipantInfo(uint256,address,address)", "ee453126": "setErc20token(address)", "ee45487b": "coinsIssued()", +"ee454b99": "createTrait(uint8,uint8[],uint8,uint8,uint8,uint8,string,string)", +"ee4552e2": "approve_790(address,uint256)", +"ee45a767": "DIRECT_BONUS_STEP()", "ee460c64": "isStored()", +"ee465781": "getSchains()", +"ee46b466": "vaultOfOrder(address,address,uint256,uint256,address,address)", +"ee4753f9": "cancelOrder(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"ee47af00": "unrestrict(address[])", "ee47c809": "BEZOP_EXCHANGE()", "ee47dcec": "ClubTeamLockContract()", "ee4827ea": "getCardInfo(uint256,uint256,uint256)", +"ee482b19": "approve_480(address,uint256)", "ee4833d8": "setupStorage(uint256,uint256)", "ee48a6e6": "setActivationTime(uint256,uint256)", +"ee495002": "b1()", +"ee49e77e": "circleOf(address)", "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)", +"ee4c8e8b": "setMaxTradeSize(uint128)", +"ee4ca0a8": "_getMinActiveBalanceMultiple(uint256,uint256)", "ee4ca97e": "setupAssetProxy(address)", "ee4d09d9": "Floxytoken()", "ee4d2823": "burnGold(uint256)", "ee4d3c7f": "spiceUp(uint256,string)", "ee4d9402": "addComment(address,uint256,bytes32,bytes32,bytes32)", "ee4de756": "getEtherollAddress()", +"ee4e0dbf": "to128x128(int128)", +"ee4e1b53": "approveCampaign(uint256)", +"ee4e2687": "setUniRouter(address)", "ee4e4416": "isMaintaining()", +"ee4e6387": "getAppointmentTimeOf(address)", "ee4eabce": "updateContractBalance(uint256)", +"ee4eee11": "alterMaxGameLength(uint256)", +"ee4efe26": "redeemVoucher(uint256,address,address,uint256)", +"ee4f17ad": "withdrawWithDiscount(uint256,address,uint256)", +"ee4f5a94": "decodeExchangeInvalidContextError(bytes)", +"ee4fa29c": "proxyActionsDsr()", "ee4fb202": "NARCoin(address,address)", +"ee4fb39f": "anchorToleranceMantissa_()", +"ee5044b5": "setCypherShop(address)", +"ee50c8e3": "renounceTrader()", +"ee50dc34": "entranceFeeFactorMax()", +"ee51284e": "setY(address)", +"ee513927": "FirstKicker(uint256,address,uint256)", "ee51575e": "getUnapprovedUsersTop150(bool)", "ee51b879": "ceilingStrategy()", "ee5200a1": "testEggIds()", +"ee525ad4": "SupplyPreliminaryDone()", +"ee52a2f3": "exchange(bytes32,uint256,bytes32)", +"ee52a69f": "getFromContract(address,uint256)", "ee52ecae": "generateWinNumberTest(uint256,uint256,uint256,uint256,uint256)", "ee5301d5": "mint(address,bytes32,bytes32,bytes32[],bytes)", +"ee531a23": "ticketsPlayed()", "ee532f31": "transferFromWithData(address,address,uint256,bytes)", "ee533a4d": "lockTip(bytes32)", +"ee535107": "maxWithdrawlPeriodAmount()", "ee53b1ad": "getExitFee2()", "ee53d244": "validCourses(address)", "ee53d619": "CollectChips(address)", "ee5418f0": "getRandomCase(uint256,uint256[])", +"ee546a51": "queryERC20Balance(address,address)", "ee54876e": "ALXToken()", "ee5493b6": "isRegisteredFirm(string)", "ee54d54f": "isVendor(address)", "ee552390": "getUser(uint64)", +"ee5562f7": "wallet_username(address)", "ee556b5b": "saveMetaData(address,bytes32,bytes32,bytes32,bytes32,uint32,uint256,uint256,bytes32,uint256)", +"ee55b968": "decodeOrdersFromFillData(bytes)", "ee55efee": "closeSale()", +"ee560b16": "adminOwners(address)", "ee564544": "_slotCancelNew()", +"ee56f71b": "updateStats(uint256,uint8[10])", +"ee579c12": "totalLock(address)", +"ee57e36f": "setMetadata(bytes)", "ee57e4df": "emptyActiveUserList()", "ee5845cc": "makeOfferForCity(uint16,uint256)", "ee588b69": "PORNO()", +"ee593365": "smallest(address)", "ee594a50": "darknodePublicKey(address)", +"ee598f33": "getUserSafes(address)", "ee59da42": "withdrawERC20(uint256,uint256,address,uint256)", +"ee59e77f": "_writeCheckpoint(address,uint32,uint256,uint256)", +"ee5b8c6b": "A14(bytes)", +"ee5bc06a": "getChannelStartedTime(bytes32)", +"ee5c02a2": "setRewardEnabled(bool)", "ee5c3dfd": "recentWins(uint256)", +"ee5c4e5d": "getTopScores()", "ee5c9654": "changeIncomesSplits(uint256,uint256,uint256,uint256,uint256,uint256)", +"ee5c989d": "ERR_ENTRY_NOT_IN_CHANGE()", +"ee5d504f": "_gloryPool()", +"ee5d69c6": "fetchUnclaimed()", +"ee5d86b9": "amountToBonus1()", "ee5e1551": "BICOIN()", +"ee5e2717": "_sync()", "ee5e2988": "FreezeTokens()", +"ee5e3b81": "cancelEscrow(bytes32)", +"ee5e407e": "_TESTCHANGEDATE(uint256,uint256)", +"ee5e4159": "atomicswaps(bytes32)", "ee5e862f": "purchaseExactWolk(uint256)", +"ee5eda7d": "RaceFinished(uint256,address)", "ee5f013e": "addOptionChain(uint256,uint256,string,uint256,uint256,bytes32,address,int256[])", +"ee5f14a7": "GP_lastBetTimeSec()", +"ee5f3f5c": "totalIssuedSynths()", "ee5f8c8f": "roundTime()", "ee607ab1": "lowEtherBonusLimit()", "ee60b201": "operatorSendByTranches(bytes32[],address,address,uint256[],bytes,bytes)", "ee60bfd0": "CELLS_TO_MAKE_1_SPERM()", +"ee612935": "claimComps(address,address[])", "ee61873c": "distributeBonusTokens(address,uint256)", "ee620965": "presaleAddr()", +"ee62c58e": "InitialReporterTransferred(address,address,address,address)", +"ee63021a": "disengage()", +"ee631881": "_powerStrategy()", "ee6392ce": "getWhitelistTotal()", +"ee63c53f": "nct()", +"ee63e8bd": "setMCWhitelistId(uint256)", +"ee6419ef": "PrizeAwarded(address,uint256,string)", +"ee6447b5": "tag(bytes32)", +"ee648613": "freezeAmount(address,uint256,uint256)", "ee64f2a4": "ManagersChanged(string,address)", "ee650248": "vote(uint256,int8)", +"ee6513ab": "salecap()", +"ee65408d": "Income(uint256)", +"ee654a75": "approve_857(address,uint256)", "ee65eec2": "ProtoTrailToken()", +"ee660933": "cdpMgr()", +"ee66173b": "updateBancorConverter(address)", +"ee66531e": "GFTPerBlock()", +"ee66875a": "haltTime()", "ee66a18d": "setDynamicArrayElement(int8,uint256)", +"ee66a77c": "removeManualSetter(address)", "ee66dc36": "_updateReputationScore(bytes32,bytes32)", +"ee66e0c7": "payInterestByTokenIdAndToken(uint256,address,uint256)", "ee67575f": "transferWeb3js(address,uint256)", +"ee677b36": "updateAndGetBalanceOfAt(address,uint256)", "ee67aa5a": "_lockToken(uint256,uint256,uint256)", +"ee67cc2a": "contractAddresses(string)", "ee67fcda": "testBuyManyTimes()", +"ee6804f0": "depositX()", +"ee681323": "initRebase(address)", +"ee682473": "enter(bytes,bytes,uint256)", "ee683d2d": "_clearAllRequest()", "ee684830": "pollEnded(uint256)", "ee68702c": "CHRTToken(uint256,string,uint8,string)", +"ee687c75": "updatesCount()", +"ee688e1c": "CEO_FEE()", "ee6891af": "transferByThirdParty(uint256,address,uint256,uint8,bytes32,bytes32)", +"ee68a774": "offer_energy(uint256,uint256)", "ee68edad": "Pacul()", "ee69590f": "setMarketCreatorSettlementFeeDivisor(uint256)", "ee699681": "SellableToken(address,address,uint256,uint256,uint256,uint256)", +"ee69e070": "moveBurnRate()", "ee6a5e54": "setBirthDate(address)", +"ee6a934c": "addLiquidityPool(address)", "ee6ab4a6": "win(address,uint256)", "ee6c2f49": "getFreeSummonTimestamp(address,address)", +"ee6c396a": "bountyMoney()", "ee6c5a8b": "totalDestinationBalance()", +"ee6c9e08": "approve_596(address,uint256)", +"ee6cd05a": "updateChangeRecipientBool(bool)", +"ee6d0139": "getpairlength()", "ee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", "ee6d84c5": "getBlack()", +"ee6d90eb": "maxwithdrawfee()", +"ee6e1840": "GetMembers()", "ee6e1bba": "initBloomFilter()", +"ee6e3007": "getUsdcSplitValues()", +"ee6e661c": "AttachedEvidence(address,bytes32,bytes32)", +"ee6e73f1": "_payToken()", +"ee6ec3c5": "approve721(address,address,uint256)", "ee6ef19f": "init_dev_and_presale_allocation(address,address,address)", +"ee6f2e94": "roboHolderIndex(address,address)", "ee6f3a55": "getAmountOfVotersInProposal(uint256)", "ee6f5dac": "currentAmountRaised()", +"ee709889": "withdrawETH(address,uint256,address,uint256)", +"ee70a8ee": "updateMaxHolderBonusCount(uint256)", +"ee70b9cb": "MPHAddress()", "ee70f392": "managerSecondary()", "ee712f59": "balanceIsNotZero(address,string)", +"ee714205": "rentArea(uint8,uint8,uint8,uint8,uint256)", "ee718c60": "CAC()", +"ee71f3f5": "xra_sent(address)", +"ee71faa2": "BlacklistedAddressAdded(address)", "ee7203b8": "startlistUploaded()", +"ee720816": "goalBetRegistry()", "ee720837": "Sendmoney(uint256)", +"ee722662": "issueToken(address,string,string,string)", "ee72302b": "_getBidIdList()", "ee725d44": "toChannelID(string)", +"ee72b9d0": "updateAccounting(address)", +"ee73722f": "shouldLiquidate(bytes32,address)", "ee737c12": "TOKEN_DESK_BONUS()", "ee73c117": "getTokensDistributedPlusTrickleDownBonuses()", +"ee73cf66": "devIndex(uint256)", +"ee7429d5": "review(address)", +"ee742b6b": "updateReserve(address)", "ee74612b": "PayFreelancer(int256)", +"ee74653c": "onBuyAndDistribute(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", "ee749b26": "putToBank()", +"ee74ab00": "startRewardStream(uint256)", +"ee74b974": "PoolValueStore(address)", +"ee74ebb2": "changeMaliciousLimit(uint256)", "ee75caa9": "SoldNoBonuses()", +"ee75d149": "RejectedPaymentToBlacklistedAddr(address,address,uint256)", "ee76ac07": "setCalleeContract(address)", "ee76c2d6": "getInventory(uint256,uint256,uint256)", +"ee7775ad": "createLoanRequestETH(uint256,address,uint256,uint256,uint256,uint256)", "ee777c99": "decreaseRate(uint256,address)", "ee7782f1": "getPK(uint256)", "ee77cc51": "_creditUser(address,uint256,uint32)", +"ee77ec95": "transferIssuerRights(address,uint256)", "ee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", +"ee78244f": "allowedSetTokens(address)", "ee783c14": "getPriceUSDcETH()", "ee784123": "getTwo()", "ee786838": "initialize(address[4],address,uint256[12],uint256,bytes,address)", "ee78b99c": "setGameConfigContract(address,address)", +"ee78e29b": "testReturnFromPush(uint256)", "ee790db2": "getDesignatedReportDueTimestamp()", +"ee7a1163": "totalBidAmount()", "ee7a301d": "oldUsers(bytes32)", +"ee7a3b8e": "propertyId()", +"ee7a7c04": "burnShares(address,uint256)", +"ee7b6d25": "closeApproveERC20(address,address)", +"ee7b9e7b": "getSellWalletsTradingLimiter()", +"ee7bc7cc": "darkUSDStablecoinAdd()", +"ee7bdc4f": "getGameEndTime(uint256)", "ee7c0db0": "getTokensSold()", "ee7c1786": "isBidFinal()", +"ee7c371f": "VoteNo(string)", "ee7cf9f2": "kingBlock()", +"ee7d0f4a": "start_clock_cycle()", +"ee7d199d": "getReferBenefit(string)", +"ee7d3b88": "grade2count(uint16)", "ee7d72b4": "setGasLimit(uint256)", "ee7d92b8": "GenesisAddressTransfer(address,address,uint256)", "ee7e18df": "drawRound(uint256,string)", "ee7e2039": "createNewAuction(uint256,uint256)", "ee7e508a": "getFirstCommonsForum()", +"ee7e6834": "tryToReplacePoolInRank(uint256,uint256)", +"ee7e8597": "Trade(address,uint256,uint256,address,uint256,uint256)", "ee7e94f3": "logging()", "ee7f371c": "JadeCoinToken()", +"ee7f40a0": "setApproveRouterForToken(address,uint256)", "ee7f9c47": "view48()", "ee7fc5a3": "mulRate(uint256,uint256)", +"ee80959d": "ChangeFrozenPause(uint256)", "ee80d7cb": "currentPreSale()", +"ee8159b5": "readSample()", "ee815eae": "setAutoPayFee(bool)", "ee81f3ec": "returnTokenAmount(address[2],uint256,uint256[8],uint8,bytes32[2])", "ee81f57c": "getCreateUnicornPriceInCandy()", +"ee81f790": "getShortRate(bytes32)", +"ee820cf6": "getTokenForCireculation(uint256)", +"ee826161": "lockCollateral(address,address,uint256)", "ee828cdb": "UnFreeze(address,uint256,uint256)", "ee82ac5e": "getBlockHash(uint256)", "ee82ea2d": "performRead3()", +"ee82ef34": "tokenIdBuys(address,uint256)", "ee832165": "lastEfficientBlockNumber()", "ee8327fd": "KpopCeleb()", +"ee83670c": "rewardlist(uint256)", "ee836fbc": "DummyToken(string,string,uint256,uint256)", +"ee83ccf1": "totalStakedshit()", "ee83ce87": "getToJackpot(uint256)", "ee84c008": "Boostmi()", +"ee85348e": "getSharesOf(address)", +"ee857b69": "ZapOut2PairToken(address,uint256)", +"ee85d4d9": "RegistryState(uint8)", +"ee85ea5e": "approve_357(address,uint256)", +"ee85ec88": "FetchVanity(address)", +"ee86cc77": "setMaxSlippageRate(uint256)", "ee86eccc": "getLastRoundAddress()", +"ee872558": "executeOperation(address,uint256,uint256,bytes)", "ee8734d0": "turnFaucetOn()", "ee87b286": "setQuantstampAudit(address)", "ee87c3b3": "marginBalanceOf(address)", "ee880879": "getCommAuction()", "ee882a99": "getSecondsRemaining(bytes32)", +"ee8847ff": "MIN_SQRT_RATIO()", "ee889ed0": "endPreSale()", +"ee88a86e": "keepFXS()", +"ee88fc91": "getFRAXPrice()", +"ee890db2": "rewardPerToken2Stored()", +"ee891296": "getTokenDistributor()", +"ee897057": "stopRewardEmission()", +"ee898eac": "onWithdraw(uint256,address,uint256,uint256)", "ee89bb87": "unlockVoterMusic(uint256)", "ee89dab4": "getInitialized()", "ee8a0a30": "setArrayLimit(uint256)", "ee8a4ee2": "releaseAllatOnce()", "ee8b39f6": "withdrawFreeBalance()", +"ee8b4fa0": "gzs(uint256)", "ee8b7cd9": "updateProfileName(string)", "ee8bd1f6": "AddTickets(uint256)", "ee8bd224": "obtainBounty(address,uint256)", "ee8c24b8": "getTokenAddresses()", "ee8c4bbf": "getBounty(uint256)", "ee8c4c6d": "testPayTeam()", +"ee8ca3b5": "cancelTask(bytes32)", "ee8cbc9d": "addLimitedWalletAddress(address)", +"ee8cc3c2": "UserBet(address,uint8,uint8,uint8,uint8,uint8)", "ee8cdd4e": "setNewPrice(uint256)", +"ee8d046a": "investEthToDai(address)", +"ee8d4e2c": "getLatesLocation(address)", "ee8d75ff": "emissionFundsAmount()", +"ee8dea63": "payoutRetryTime()", "ee8e520f": "confirmPurchase(uint256,address)", "ee8e993c": "updateBonusPercent(uint256)", +"ee8ea222": "setUnitRequestCount(uint32,uint32)", +"ee8f0b7a": "inviter(address)", "ee8f31c3": "createNullTile(uint16)", +"ee8f6e68": "officialWallet_()", "ee8f997b": "importPresaleBalances(address[],uint256[],address)", "ee8ff562": "setMaxProfit()", +"ee9026e1": "emergencyWithdrawD100(uint256)", +"ee906972": "returnVotes0(uint256)", "ee91877c": "usernames(address)", "ee919d50": "setA(uint256)", "ee91afab": "getNameHash(address)", @@ -136809,80 +250303,157 @@ "ee94d631": "addPetIdMapping(address,uint64)", "ee94d7ba": "carousalRatio()", "ee94ee98": "LogFundingSuccessful(uint256)", +"ee955339": "PR_ADVERSTISING_ADDRESS()", +"ee957112": "setNmpRandomDevider(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ee95a5c3": "SubWei(uint256)", "ee95a9de": "registerNewMerchant(address,address)", +"ee95dacf": "getUserMaxRepayAmount(address)", +"ee95ece2": "Invest(address,uint256,address)", "ee95feaf": "isSeller(address)", +"ee966ffb": "divLoopCheck(address)", +"ee968831": "pynthetix_escrow()", +"ee96b9eb": "_records(uint256)", +"ee97a9bb": "XDEXAddress()", "ee97adbc": "loadEarlyPurchases()", +"ee97edbc": "extendLock(bytes32,uint256,address)", "ee97f7f3": "master()", +"ee982c79": "geInfo(address)", +"ee98311a": "TokenUnregistered(address,string)", +"ee9854a9": "getTotalUnderlyingValueInEth()", "ee987ffc": "setNextDiscountTTWTokenId1(uint64)", "ee98aee6": "endCrowdSale()", +"ee9907a4": "getUserIndex(address)", "ee99205c": "stakingContract()", "ee992fd8": "tokensOfCaptain(uint32)", "ee994a54": "Omisgo()", +"ee994e66": "RaiseToken(address,uint256)", +"ee99881f": "JobsByWorker(address,uint256)", "ee999096": "getuseraddressbyid(uint256)", "ee9a5432": "markMilestoneComplete(uint256)", "ee9a8489": "getLastDrawBlockNumber()", "ee9adde1": "medalTransfer(address,uint256)", +"ee9af25d": "getBorrow()", "ee9b26bd": "transferPointer()", "ee9b4152": "MIN_HOLDER_TOKENS()", +"ee9b80a4": "setErc20(address)", "ee9c087a": "bittToken()", "ee9c26d6": "getmypostlastid()", +"ee9c7a2d": "worldCupIdToAddressForApproved(uint256)", "ee9c7f43": "isValidGid(uint8)", "ee9cb414": "LogEscrowWei(uint256)", +"ee9cdfb3": "sellNFT(uint256)", "ee9ce090": "decodeIndirect(bytes)", +"ee9ce9b3": "BondPayoutsDateGetAt(address,uint256)", "ee9cebde": "unitEthCost(uint256)", +"ee9e3981": "callAddTest(address)", +"ee9fa922": "approve_735(address,uint256)", +"ee9fe000": "claimCoin(address)", "eea0168a": "completeContract(bool)", "eea086ba": "currentContextAddress()", +"eea0a725": "hashValues(bytes32,address)", "eea0d168": "deployMiners(address,uint32[],uint32[],uint32[])", "eea147c7": "getCompoundContract(uint256)", +"eea14b3e": "SaleLockedNoted(address,uint256,uint256,uint256,address)", "eea17587": "getFreelancerContractsByStatus(address,address,uint256[],uint256[])", "eea19185": "getMaxDisplayPrice()", "eea21c6e": "EICToken(uint256,string,uint8,string)", "eea23d8a": "setPromoMoney(uint256)", "eea2a3ff": "ChangedFeePercentage(uint256)", +"eea2a4b7": "viewDistributionAmount(address)", +"eea2d75a": "setPromoOfTokenId(uint256,address)", "eea327e0": "untrust(address)", "eea42151": "getCompte_43()", "eea4b1ad": "setPayloadFrom(address,string)", +"eea4c864": "callSetN(address,uint256)", "eea4cf1c": "subDev()", +"eea5337b": "SwapLiquidity()", +"eea53d29": "profit2Staking(uint256)", +"eea54fb6": "removeNumber(uint256)", "eea5ac01": "SuperiorBit()", "eea5d10e": "DepositorLimitChanged(uint256,uint256)", +"eea65a81": "changeCheckpointAndStart(uint256,uint256)", "eea6753b": "accept(address,uint256,uint256)", +"eea67ea3": "transferDAI(address[],uint256[],address[],bytes[],uint256[])", "eea6c540": "getRandomNumber(uint256,address,uint256,uint256,uint256)", +"eea6e723": "setHKHcoinAddress(address)", +"eea71121": "setCounter(uint32)", "eea7570e": "gasReserve()", "eea7e46b": "setAirAmount(uint256)", "eea8465a": "tokensCommunity()", "eea8c4da": "changeBSTRequirement(address,uint256)", +"eea8f5cd": "withdrawBbkFunds(address,uint256)", +"eea8f5da": "issueLimit()", +"eea939ee": "curveSwapAlcx()", "eea95aaa": "unsafeWriteUint(uint256,uint256)", +"eea9b794": "getLastRate()", +"eea9c370": "calReward(uint256,uint256)", "eeaa75b9": "getTaskFromToken(bytes32)", "eeaaf19d": "vote(bytes32,bytes32)", +"eeab0252": "clearAnchorRatioDecimals()", "eeab221c": "getFreePlumber()", "eeab57bf": "ALLOC_COMMUNITY()", "eeaba083": "updatePositions(address,address,int256,uint256)", +"eeac0879": "nextOwner(address)", +"eeac0969": "setTransactionVerifier(address)", "eeac6d78": "FakeZRX()", "eeac848b": "ChestsStore(address)", +"eeaccf76": "replaceSnapshot()", +"eeada434": "burnTrigger()", "eeae1f4c": "allPlayerTokenContracts()", "eeae5e4d": "sharesOfScheme(uint256)", +"eeaea226": "voteOn(address,uint256)", "eeaec245": "testInitial2of2()", "eeaee3e4": "LIMIT_PER_USER()", +"eeaeeff8": "userDPOSellRecords(address,uint256)", "eeafe7b0": "setACL(address,uint8)", "eeb046b3": "BidAccepted(uint256,uint256)", "eeb0af89": "amountMintPerDuration()", +"eeb12328": "_Application(bytes32,uint256,uint256,string)", +"eeb1c9af": "RNGdeterminator()", +"eeb1d974": "setNewPool(address,address)", +"eeb27f61": "totalNetValue()", +"eeb294e2": "approveChangeOwnership(uint256)", "eeb2d26b": "getRateAt()", +"eeb361a3": "cashCloseCall(uint256,bool)", +"eeb38937": "distributorVersion()", +"eeb3bdae": "BUNNY()", "eeb3c910": "requestRedemption(uint256)", "eeb415ee": "batchNewAuctions(uint128[],uint256[],uint256[],uint256[])", "eeb441a4": "updateLoveStory(bytes16,bytes32,bytes32)", "eeb46634": "getHolding(address)", +"eeb4a9c8": "setMinimumAmount(uint256)", +"eeb4bafe": "execute(bytes,address,uint256,bytes)", +"eeb4dd92": "AmountToPayBonus(address)", +"eeb4e367": "get_number()", "eeb522aa": "ido()", +"eeb56e17": "ChangeSuperOwner(address)", "eeb57139": "CollectMoney(uint256)", "eeb58410": "AGCoin(uint256,string,string)", +"eeb596bc": "logNeededBalance(uint256)", +"eeb59cbd": "purchasedEpoch(uint256)", +"eeb5a5d1": "setApprovalForAllFor(address,address,bool)", "eeb64f0c": "PONADistributionContract()", "eeb6588a": "donationsStartTime()", "eeb72866": "identify()", "eeb7ab0c": "checkImageInput(uint256,uint256,uint256[],bool,bool)", "eeb7beb2": "designarHeredero(address)", +"eeb7fe2e": "INX_Unpause()", +"eeb84107": "buildConnection(address,address,address,uint256,uint256)", +"eeb84910": "getPlayRecordNoTurnData(address)", +"eeb84eb5": "masterpieceToPrice(uint256)", +"eeb8506b": "registerNames(string[])", +"eeb851a2": "totalBeesBought()", "eeb8a8a9": "upRoundID(uint256)", +"eeb8a8d3": "peek(bytes)", +"eeb8b6ed": "showCurrentRandom()", "eeb8b934": "priceMultiplier(uint256)", +"eeb9052f": "AirDrop(address[],uint256)", "eeb92294": "WithdrawalAfterGoalReached()", "eeb9635c": "mintTokens()", +"eeb97d3b": "collaterals(address)", +"eeb9bf05": "mediaURI(uint256)", +"eebae676": "reBalance(address,uint256,uint256,uint256)", +"eebb62df": "getAwardRanking(uint256)", "eebb7fe9": "BDragon()", "eebba256": "HOURLY_VALUE_DECAY_RATE()", "eebbd2b7": "_transferFunc(address,address,uint256)", @@ -136890,77 +250461,144 @@ "eebc5081": "checkpointPrice(address)", "eebc5a26": "_getFinance()", "eebc7a39": "getPendingValidators()", +"eebc9b04": "setMerch(bytes32,bytes32,uint256,uint256,uint256,bytes32,uint256,uint256)", "eebcd477": "setIsBuying()", +"eebd30ff": "raiseAssetTargets()", +"eebd72e0": "moveAMMPriceToOracle(uint256,bytes32)", +"eebd91b9": "removeFund()", +"eebdc5cf": "optionTokenLibary()", "eebddedd": "Redemption(address,uint256,uint256)", "eebdff04": "_bonusLucy(uint256)", "eebe18cf": "startGamGetToken()", "eebe41e0": "changePrefererForTask(address,uint256,address)", +"eebea505": "subUserId(uint256,uint256,bool,uint256,uint256)", "eebed750": "wDiamond()", +"eebede83": "setGuardianFee(address,uint256)", +"eebeea4f": "freeWithdraw(uint256)", "eebf9808": "PiggyBank()", "eec03444": "enableBundling()", +"eec06600": "farmingPoolIds(address)", +"eec09de7": "distributionCycleCounter()", "eec0ddd7": "Holders(address)", "eec11f64": "ABCTokenContract(address,address,uint256,uint256)", "eec13165": "tokenTest()", +"eec13b74": "fullEarned(address)", +"eec16c44": "setMaximumSupportedAssetCount(uint256)", +"eec17de2": "setSomeStuff(uint256)", "eec1a391": "addBond()", +"eec1e2d7": "PreSaleTransfer(address,address,uint256)", +"eec220ff": "recvOwnership()", "eec2898a": "getRefundGasAmount(uint256)", "eec2b628": "beforeExecute(address)", +"eec2d5c0": "checkStage(uint256)", +"eec30bfd": "invite()", +"eec332fd": "priceOf(bytes32)", +"eec35443": "getReleasedToken(address)", "eec3589d": "_updateSaleInfo(uint256,uint256)", +"eec377c0": "getHistoricalPrice(uint80)", "eec38cec": "set_pauseSale(bool)", +"eec3ba11": "removeUnderlyingToken(address)", "eec3cb41": "placeBet(bool[],uint256,uint256)", "eec3e2e8": "setLLV_edit_29(string)", +"eec3e6e7": "getWithdrawableTokens()", "eec3fcff": "CloseCrowdSale(uint256)", "eec48ca5": "setReferralBonuses(uint256,uint256)", "eec4bcef": "setMaxPrivateSaleBuy(uint256)", +"eec4e453": "multisend(bytes,uint256)", +"eec50be5": "tokenToToken(address,address,uint256,uint256,uint256)", +"eec562c3": "GetMemberXendTokenReward(address)", +"eec5ae1e": "setGovernances(address[])", "eec5d076": "getTotalUnvestedAndUnreleasedTokens(address)", +"eec5f004": "redeemPremium()", "eec5f1dc": "audit(address)", "eec65b98": "transferToMainViaRelay(address)", "eec65c58": "getOrderMakerTokenAmount()", +"eec65f29": "investmentsLimit()", "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)", +"eec786a6": "setDeployer(uint256,address)", "eec7faa1": "tokenAmount()", "eec809ff": "setMonthWithdraw(uint256)", "eec8d544": "CROWDSALE_TARGET()", +"eec8d674": "proposeAction(address,uint256,bytes,bytes32)", +"eec95229": "addTLRReward(uint256)", +"eeca08f0": "platformFeeRate()", +"eeca1562": "lastTimeRewardApplicable(uint256)", +"eeca2d17": "changeTraders(address)", "eeca6afd": "CPSToken()", "eeca6df7": "getFreeVines()", +"eecae1a5": "cmp(bytes16,bytes16)", "eecb24ec": "priceDecreaseRate()", +"eecb2575": "claimBNB()", "eecb4a65": "GRETToken()", "eecb7005": "useAsBankroll()", +"eecbdd94": "pool6activeUserID()", +"eecbfa01": "exitByPID(uint256,address)", "eecc3135": "DAICOCap()", "eecc3be8": "all_creatures()", +"eecc8ffe": "setEntryFees(uint256)", "eecd2789": "left86(uint256)", +"eecd57e6": "setChallengeResolutionPeriod(uint256)", "eecd8876": "GexAlloc(address)", +"eecdac88": "removeGovernor(address)", +"eece0e91": "Invocations(uint256)", "eece1e1f": "scheduleShuffling()", "eece203a": "disableTransferAgreement(uint256)", +"eecea000": "setAuthorization(address,bool)", "eeced605": "addPrediction(bytes32,uint256,uint256,uint8,uint256,address,address)", "eecf78b3": "makePurchase(uint256,address,string)", "eecfb384": "icoBonus5EndDate()", +"eed01139": "startBlockOfChill()", "eed02e4b": "joinGroup(uint256)", +"eed036ec": "_playersFromPeriod(uint256)", +"eed03dab": "set_status_user(address,bool)", +"eed04b80": "settleAppealDeposit(uint256,uint256)", "eed04e69": "preBuyPrice3()", "eed0c172": "FoodSafetyChain()", "eed0fc03": "generateFinalTokens(uint256)", +"eed0ff46": "setPoolStorageVersion(uint256)", "eed11836": "getTreeSize()", +"eed13130": "GetBurningAmountPerUser()", +"eed188b5": "getWeiPayValueAmount()", +"eed1ac4b": "BrokerChanged(address,address)", +"eed1ff4e": "registerNewColor(string)", "eed331f7": "tokenOwnerNumberMax()", "eed3f79e": "gameRefund(uint256)", +"eed42acc": "getLastUpdateTime(uint256)", "eed45ca8": "setIsShareToken(bool)", "eed47127": "TOTAL_MIND_TOKEN_SUPPLY()", +"eed493da": "freeCRV()", "eed50a32": "delegation(address)", "eed65c11": "auctionSize()", +"eed6d3f5": "transferManyFromDifferentValues(address,address[],uint256[])", "eed7128c": "_generateRandomGenes()", "eed72217": "addressToMinimumTextDonation(address)", +"eed741f8": "makeWill(address[],uint256[],string,string)", +"eed75f6d": "depositors(address)", "eed7eaea": "getAirdropStatus(address)", +"eed83f85": "numberOfBets(uint256)", "eed857e1": "surrender(address,bytes32,uint256)", +"eed865e0": "setGaugeQuota(address,uint256)", +"eed873c2": "addPool(string,address,uint256,uint256,uint256)", +"eed88231": "getTokenBalances(address,address,address[])", "eed92ad5": "AdrenalinCoin(uint256,string,string)", +"eed9491c": "getReservedAmount()", +"eeda0ca2": "innum(uint256)", "eeda0e21": "earningsFromNumberOfCells(address,address)", "eeda149c": "Register(address)", "eeda22c6": "ownerPauseRecommend(bool)", "eeda6357": "betCount_()", +"eeda6d67": "getEstimatedToken1forToken2(uint256,address,address)", +"eedad66b": "increaseStake(uint256)", "eedb1743": "removeSaler(address)", +"eedb41fa": "univ2ISWEth()", "eedb714c": "CO_FOUNDER_PORTION()", "eedb95c9": "changeZS(address,uint256)", "eedb9ed5": "minPremium()", +"eedbc056": "setPancakeRouterAddress(address)", "eedbd7eb": "ClosePatent(bytes32)", "eedbe31d": "getCurrentStage()", "eedc966a": "tokenBalance(address)", @@ -136968,7 +250606,10 @@ "eedcf50a": "mainDAO()", "eedd1dd3": "doesProofExist(uint256,string,string,uint256,bytes32)", "eede471e": "goToSleep(uint256)", +"eede87c1": "enableBorrowingOnReserve(address,bool)", "eedf504d": "BG1Token()", +"eedf9c72": "initialize(address,address,address,address,uint256,uint256,string,string,uint8)", +"eedfca5f": "initialize(uint256,string,string)", "eee007e2": "initialSingleWithdrawMax(uint256)", "eee02e61": "getMerchantPassword(address)", "eee09758": "setMyCut(uint256,uint256)", @@ -136976,55 +250617,95 @@ "eee0d9e2": "Elements()", "eee14119": "PROSH()", "eee144df": "getInitialSeedAsFixedPointForGameId(uint256)", +"eee17820": "emit(bytes32)", "eee187fd": "getMemberIdxOfUser(address)", "eee1c59d": "oneHourAfterStartTime()", "eee1e7e5": "calculateBurnAmount()", "eee1f5f9": "getOwnedWineCountOf(address)", +"eee1fd20": "synthAssetDividendPoints(address,address)", "eee24219": "rateContract()", "eee24570": "getPet(address)", "eee2cc46": "returnEverything()", "eee3671b": "wadmin_withdrawFund(uint256)", "eee392c8": "initialTransfer(address,uint256)", "eee3c4c9": "stageThreeCap()", +"eee3ea47": "setBurningRate(uint256)", +"eee41fe2": "mainamount(string)", "eee428c0": "MAX_FUND_ASSETS()", "eee457f7": "getContributionFromHash(bytes32)", +"eee4c9cd": "onNewJanWin(uint256,uint256,uint256,uint256)", +"eee52d6d": "teamTwoMembers(uint256)", +"eee54402": "farmYieldRate()", +"eee56564": "cancelable()", "eee56b7a": "takeout(uint256)", "eee59ccf": "ownerAccessoryTransfer(address,uint64)", +"eee60bae": "OwnerChanged(address,bool)", +"eee64789": "autoMultisendEth(uint256)", +"eee66e06": "getDarwiniaGrade(uint256)", +"eee68003": "setStarPrice(uint256,uint256)", "eee6ce93": "PRESALE_ETH_IN_WEI_ACCEPTED_MIN()", +"eee6e9bb": "setBeneficiary(uint256)", "eee78595": "transferCustomToken(address,address,uint256)", "eee881e8": "_stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,bool)", +"eee8b7ff": "getBorrowerLoans(address)", +"eee8f1e9": "userArt(bytes32)", "eee908ed": "changePriceCurveSettings(uint256,uint256,uint256,uint256,uint256)", "eee92395": "fund(uint256,address)", "eee94805": "getTokens(uint256,uint256,bool)", "eee95f6d": "setbtyctoken(address)", "eee97206": "double(uint256)", +"eee9b99e": "Funds(uint256)", +"eeea5d36": "getBasketManager()", +"eeea8b40": "usersBTCPools(address)", "eeeb17e7": "deauthorizeMintFulfiller(address)", +"eeeb2ba0": "m_categories(uint256)", +"eeeb3d4e": "getMemberClears(address,uint8)", "eeeb4f36": "ASTC()", "eeebb30c": "changeRateWin(uint256)", +"eeebec0a": "setTestResultA(address,uint256)", "eeec0e24": "relay(address,uint256)", +"eeecf85d": "setPresalePause(bool)", +"eeed02d0": "removeDrug(uint256)", "eeed1767": "whiteListInvestor(address)", "eeed1b26": "extensionTime()", "eeed908a": "PublisherUnregistered(address)", +"eeedb8e2": "currentStakeID()", "eeee7cc0": "depositFiat(address,uint256,bytes32)", +"eeeeae47": "createSwapHistory(address,address,address,address,uint256,uint256,uint256)", +"eeef3988": "rebalancingSetToken()", "eeef9d55": "getAuctionIdArray(uint64,uint64)", "eef017f1": "getCompte_2()", "eef05f65": "setTokenIpfsHash(address,bytes)", +"eef0938c": "_AfterBurn()", +"eef09740": "getTotalAvailableRewards()", +"eef0aa98": "getAmountOut(address,address,string,uint256)", "eef0ef1e": "changeTeamPoolInstant(address)", "eef0fdbe": "closeLoanOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"eef13ca1": "getRedeemRequestAt(uint256)", "eef1812d": "settingsIco(uint256,address,uint256,uint256,uint256)", +"eef192dc": "LSW()", +"eef1b515": "changeUserAddress(address,address)", +"eef1bbda": "getWeiBalance(address,uint256)", "eef21cd2": "removeCaller(address)", "eef22a79": "MultiAirDropToken(uint256,string,uint8,string)", "eef27913": "ContractFeeChanged(uint256,uint256)", "eef3a0fa": "PPPC(uint256,string,uint8,string)", "eef3c914": "DelegatedTo(address)", +"eef43d0c": "approve_784(address,uint256)", "eef44945": "Sudosucks()", "eef49ee3": "deposited()", +"eef4c016": "authorized(address,uint8)", "eef547d7": "deal_details(uint32)", "eef55c72": "getBallotOfSender()", +"eef55d3d": "setDefaultSupervisor(address)", +"eef5653f": "Transfer(uint64,uint64,uint256)", +"eef59c9c": "takerValueMax()", "eef5a499": "createProductionUnit6()", "eef5acb4": "SubscriptionDepositReturned(uint256,uint256,address,address)", "eef5bfae": "UpdateSavingsBank()", +"eef6875f": "accOHMPerShare()", "eef68db5": "gameFinished(uint256,uint256,uint256,uint256)", +"eef69517": "RemoveAdvisorFirstLock(address)", "eef6f89d": "bonusClosingTime1()", "eef719b1": "getQuarterResult(uint256)", "eef72a3c": "claimTokens(address[])", @@ -137032,112 +250713,202 @@ "eef73ff9": "Devs_Supply()", "eef7dd0a": "GetBetId(uint256,uint256)", "eef80bbc": "getData_11()", +"eef81030": "founderDeveloperBurnRequestId(address,bytes32,uint256)", +"eef833aa": "BurnPoolTokens(address)", "eef85ced": "getMytokenBalance(address)", "eef892aa": "tokenMint(address,uint256)", +"eef8aad4": "blots(uint256)", "eef8e35f": "setChainyURL(string)", +"eef8fff1": "setIPFS(address,string)", "eef90cbe": "tokenPublicSale()", "eef93611": "GetDChainRevokableHash(bytes32,uint32)", "eef9495c": "CABoxToken()", "eef94a21": "createT513many(uint256,uint256,address)", "eef9c27c": "requestTokens(uint256)", +"eef9e603": "processedUsers(address,address)", +"eefa39ed": "lockingEnabledTime()", "eefa597b": "isToken()", "eefa5dfc": "PingPaid()", +"eefaee14": "StarBasePurchasedOffChain(address,uint256,uint256,uint256,uint256,string)", +"eefb202b": "remainingTokensInActiveSwap()", "eefb9538": "setData_32(string)", +"eefc2147": "addItem(uint8,uint8,string,string)", "eefc3083": "tokenColors(address)", +"eefc7a3c": "toLotteryPool()", "eefe3818": "createOpenAndLock(address,address)", "eefe8527": "MysteriumPricing(uint256)", "eefea6b7": "feeFromTotalCostForAccount(uint256,uint256,address)", +"eeff9188": "proposalVoteTally(uint256)", +"eeffbe4e": "legendary(uint256)", +"ef000629": "outMulti(address[])", "ef006b65": "presaleBonusTier4()", +"ef008fec": "tongDuongChayDaiNhat()", +"ef009e42": "recoverGas(uint256,address[])", +"ef00b53b": "maxBet(uint8,uint256,uint256)", +"ef00d224": "lastBurnDate()", +"ef00e37a": "getList(address)", "ef0143a3": "sendPixelsToMarket(bytes32,uint256)", "ef01db0e": "assignItemRafflePrize(address)", +"ef01e5a3": "publicFillBestOrder(uint8,address,uint256,uint256,uint256,bytes32)", +"ef023300": "graduations(bytes32)", "ef02ad08": "getTokenInfoDataTracking()", "ef02ce46": "Rafatar()", "ef02d5d6": "durationCrowdSale()", "ef0377fd": "SomaIco(address,address,address,uint256,uint256,uint256)", +"ef037b90": "isStakeholder(address)", +"ef03808c": "createProvider(address,string)", "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)", +"ef05ab0b": "respondIntArray(uint256,int256[])", "ef05bf0e": "ROUND_2_PRESALE_BONUS()", "ef05dc2f": "modX(uint256)", "ef0614b9": "getItemIds()", +"ef0635d5": "BONUS_MULTIPLIER_2WEEK()", "ef069ae3": "changeSaleMinimum(uint256)", +"ef06e72c": "chainlinkOracle()", +"ef0762eb": "tests()", +"ef078e84": "poolPercent(uint256)", "ef07a81f": "getDonation(uint256)", +"ef08082f": "addPresaleWhitelist(address[])", "ef084006": "unholdDate()", +"ef08bf48": "claimLPFeePercent()", +"ef08cdc8": "onCancelOrder()", +"ef08fbd5": "xmonToken()", "ef0901b8": "_gapOfCubeSum(uint256,uint256)", "ef096063": "PollCreated(uint256,uint256,uint256,uint256)", +"ef099656": "getVotingStart(address)", +"ef09e22c": "convertOddToTwaAndSendToPayout(address[])", +"ef09e78f": "getExecutors()", "ef0a14f8": "removeAddressFromAdmin(address)", "ef0a3046": "sendOutEther()", +"ef0a712f": "getAdminBalance(uint256)", "ef0ad164": "testContractOrNormal(address)", +"ef0add5b": "endFab()", "ef0aea3c": "getisPlay(bytes32)", "ef0b2368": "bytes32ToStr(bytes32)", "ef0b44db": "bonus2Ends()", "ef0b4db3": "markAsProject(address)", "ef0b5420": "getOwedDividend(address)", +"ef0b7569": "expectedRewardsToday(uint256)", +"ef0cc524": "findFreeReferrer(address,uint8,uint8)", +"ef0ce37a": "migrateToNewUniverse(address)", +"ef0d8716": "_onDisputableRejected(uint256)", +"ef0dab72": "heroMeta()", "ef0dbcbb": "setContractAt(uint16,uint16,uint8,address,address)", "ef0dd241": "minCapTokens()", +"ef0ddc0c": "getAllofSupplierBillsid(bytes32)", "ef0dddba": "earlybonus()", "ef0e239b": "getService(uint256)", +"ef0ef649": "importAssets(address,uint256,bool,uint256)", +"ef0f2365": "approve_transfer(address,uint256)", "ef0f52bc": "hodlAdded(uint256,address,uint256,uint256)", +"ef100a79": "Audits(bytes32)", "ef110f49": "TotalDeposits()", +"ef112dfc": "bootstrapRevealDuration()", "ef113b69": "_internalVote(address,address,uint256)", "ef115542": "clearStorage(uint256[])", "ef11e18b": "log_transfer(address,address,uint256)", "ef11e55b": "isEarlyBonus()", "ef11ef3d": "HubiiNetworkTokens()", +"ef11f9da": "resolverAllowances(uint256,address)", +"ef1243a4": "staticCallExecutors(uint256,bytes4)", "ef125360": "removeWhiteListed(address)", +"ef1259f7": "smartaddr()", "ef12af52": "ReentrancyMock()", "ef13070b": "ChangeicoWallet(address)", +"ef136148": "minOrder()", "ef1367dd": "setLanguages(bytes3[])", +"ef13aa15": "BidLog(uint256,address,uint256,string)", +"ef13c756": "addReaderToOSMWhitelist(address,address)", +"ef14101e": "token3()", "ef14124f": "getAmountToUpdate(uint8)", +"ef144c16": "rlzPNL()", "ef14a0f6": "CBITToken()", "ef14adc7": "sellingEnable(uint256)", +"ef154cf2": "checkVoteClosing(uint256)", +"ef154eb1": "getDirectRegister(uint256)", "ef15c51c": "deleteRoomByRoomID(uint256)", +"ef16059c": "setSessionBlockSize(uint256)", "ef1706ce": "drainTokens()", +"ef171107": "configure(string,string,uint8)", +"ef175728": "minDonCoin()", +"ef17d1a6": "setPastEventHash(bytes32,bool)", +"ef181294": "accessReward(address,address,uint256)", "ef18374a": "getOwnerCount()", "ef18e458": "frozenTransferFrom(address,address,uint256,uint256,bool)", "ef18e9ed": "acceptOrder(uint256)", +"ef18fcb4": "setBaseDebt(uint256,uint256)", +"ef19506b": "reclaimGraStakingReward(uint256)", "ef1961b4": "Dropped(bytes32,address)", "ef19792a": "licenseTerms(bytes32)", +"ef19b2b4": "getIEOInfo(address)", "ef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", "ef1ad460": "DAPPStoreToken()", +"ef1aebd9": "updateRequesterAdmin(uint256,address)", +"ef1b08ad": "RecommenderAllow(address,bool)", "ef1bfef9": "m_sharedDividendBalance()", +"ef1c243a": "totalSupplyStored()", +"ef1ceb0a": "requerentes(address)", +"ef1d8bc5": "_computeSearchRandomBalances(bytes32,uint256,uint256,uint256,uint256,uint256)", +"ef1dff55": "WithdrawBySharesOnly(address,uint256)", "ef1e5663": "updateBalances(address,uint256)", "ef1e7e3f": "deauthorizeBurnFulfiller(address)", "ef1e8dae": "lastBlock_a13()", +"ef1f496e": "cloneDeposit(uint256)", +"ef1f9373": "unfreezeReserve(address)", "ef2025c2": "burnTokenStatus()", +"ef20ba10": "mininumBurnAmount()", "ef20bff8": "getSpawnLimit(uint32,uint256)", "ef21059e": "cancelEth(uint256)", "ef220233": "getGrid8()", +"ef22335c": "admincheck(address)", "ef228e1a": "UCASH()", "ef229dc7": "setStepMoney(uint256)", "ef22b87f": "executeTransaction(address,uint256,uint256)", +"ef22efd3": "prehashObjection(uint256,uint256)", "ef233f5c": "RELEASE_THRESHOLD()", "ef23b3a3": "quotaOf(address)", +"ef24180a": "lastwinner()", +"ef242137": "walletTradingLimitersContractLocatorIdentifier(uint256)", "ef24b77c": "RegisterNewKey(address,address)", "ef24bd6b": "ESCBTokenSale(uint256,uint256,address,uint256)", +"ef25256c": "widthdraw2()", "ef2573fc": "calculateHouseCutAmount(uint256)", +"ef25e5ef": "geoToken()", "ef265d6d": "burn(uint256,address,address)", "ef26e41d": "whiteLister()", +"ef2704f0": "transferETH(address[],uint256)", "ef270ee2": "getApproved(bytes32)", "ef284d8f": "DiscardToken()", "ef289d8d": "NewKing(uint256,address,string,uint256,uint256,uint256)", +"ef296971": "approveUniverse(address)", +"ef299b0b": "recharge(uint256)", "ef29a7e5": "emitWorkFinished(uint256,uint256)", "ef29d2bb": "setNeighbourRewardPercentage(uint256)", +"ef2a375b": "depositrestartLP(uint256,uint256,uint256)", +"ef2a7393": "seasonForciblyEnded()", +"ef2a8ce6": "createAuctionOnBehalfOfOwner(uint256,uint256,uint256,uint256)", "ef2a9147": "balancesListAddressMap(uint256)", "ef2b04d1": "callBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ef2b0b39": "maxScaleRate()", "ef2b7d65": "publicGetParticipant(uint256,uint256)", "ef2bbbdf": "updateEndDate(uint256)", "ef2bd19e": "getDisapprovalsFor(address)", +"ef2c2650": "viewProcessors()", "ef2c5842": "_getTknAddr()", +"ef2c61f2": "nowInfo()", "ef2cc977": "MAX_AIRDROP_TOKENS()", "ef2d44c3": "setChampForSale(uint256,uint256)", "ef2d5786": "createDelegation(address,uint64,address)", "ef2d8700": "getDocuments()", +"ef2dbc60": "getActionRole(uint256,uint256)", "ef2ddb55": "presaleUnfreeze(uint256)", "ef2de6f8": "ownsPlayerTokens(uint32)", +"ef2dfe7b": "MaxPhase3Updated(uint256)", "ef2e2059": "resetGenesisBlock(uint256)", "ef2e3fbc": "getTokenInfoHeritor(address)", "ef2e7321": "INITIALGASFORORACLIZE()", @@ -137148,144 +250919,258 @@ "ef2fa169": "setServiceFee(address,uint256)", "ef2fd54d": "viewVotes()", "ef303553": "athleteCanClaimPercent()", +"ef30375d": "stakerContractAtIndex(address,uint256)", +"ef307278": "maxTms_()", "ef3088d1": "AirDropRedeemAFTK2()", +"ef315b11": "rer()", "ef31bfd1": "isValidSignatureAndMethod(address,address,bytes)", "ef3229db": "addTokenFunds()", "ef323d85": "getPlotPrice()", "ef326c6d": "isOps(address)", +"ef33334d": "callProxyHandler_getDepositTotalAmount(address)", "ef3336f5": "paymentsByBenefactor(address)", "ef3377ca": "devWalletLocked()", "ef338b88": "seekOdd(uint256,uint256)", "ef339fc4": "getTokenProxyAddress()", +"ef33e970": "Gift(address,uint256)", "ef33f8f0": "bet1000_001eth()", "ef343588": "trade(uint256[8],address[4],uint8[2],bytes32[4])", "ef34ded2": "lottoLength()", +"ef35127d": "destroyDrill(address,uint256)", "ef35b59d": "_withdrawTokensToWallet()", +"ef35bcce": "setMinimumProviders(uint256)", "ef35cdbb": "getLLV_edit_30()", "ef35d902": "preIcoEnds()", "ef35fc16": "HIGH_RANGE_RATE()", "ef3613c3": "allEth()", +"ef365218": "getTokenAddress(uint16)", +"ef36642d": "readableAddress()", +"ef369252": "protocolFeeTo()", "ef36a883": "termsAndConditionsAreSigned(address,uint8,bytes32,bytes32)", "ef36fa39": "fpart(int256)", "ef37052d": "isArrAccountIsNotFrozen(address)", +"ef370ba1": "P4_TOKEN_REWARD_PERCENTAGE()", +"ef3766e4": "mCancelPayment(uint256[])", +"ef37865c": "maggotAmountToBeMigrated()", "ef37cfe9": "getBetsCountAndValue()", "ef37f061": "IPOcoinHotelShares()", +"ef3869f0": "yieldFarmUnstakeAll(uint256)", "ef387a50": "rateIco()", +"ef3881c8": "maxGasPriceWei()", "ef38a306": "genWallet()", +"ef38b66d": "schedule(bytes,bytes)", "ef38d089": "UpdateSellAgent(address,address)", "ef394e1b": "getFastest(uint16,uint8,uint8)", +"ef39a80c": "setSafeEx(address)", "ef39fe35": "updateSaleStageManually(uint256)", "ef3a6031": "testBaseToken()", "ef3aaf54": "setHouseAddress(address)", "ef3adfb3": "XPAAssets()", "ef3b70bc": "setMultiRequestRegistrar(uint256,address)", +"ef3bac5e": "getWrappedNativeAddr()", "ef3bec3d": "endow(address,uint256)", "ef3c0531": "contentHostById(bytes32)", +"ef3c198f": "seal(string)", +"ef3c31e5": "totalGainInUniLevel(address)", "ef3c64a8": "IcoTokenMock()", +"ef3c6ec8": "allMCRData(uint256)", +"ef3c9d8a": "multiGreylistRemove(address[])", "ef3cbc39": "minOrderEthAmount_()", "ef3cdb2f": "upgradeM5Token(address)", "ef3d622b": "EOSBetBankroll(address,address)", +"ef3d6d6d": "TokensPurchased(address,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256)", +"ef3dd5c8": "AllowAddressToDestroyGenesis(address)", +"ef3dee0a": "updateprobabilities(uint256[])", +"ef3df5c1": "lastRedeemBlock(address)", "ef3e8869": "claimStarter(string,uint256)", +"ef3ebcb8": "initialize(string,string,uint8,uint256,bool,address)", +"ef3f3d0b": "tradeAndSend(address,address,address,uint256,address[],address[],bytes,uint256[],uint256[],uint256,uint256)", +"ef3f792c": "capTokenSale()", "ef3f7c55": "TokenSold(uint256,string,uint256,uint256,address,address)", +"ef3fc6cf": "percentageToAmount(uint256,uint256)", +"ef3fff54": "TokensHeld(address,uint256,uint256)", +"ef404e06": "setTxn(string)", +"ef406b68": "long_bytes_dyn()", "ef406d01": "TokenEBU(uint256,string,string)", "ef4080bd": "init_pre_ico(address)", +"ef40a670": "amountStaked(address)", "ef40c3e6": "tokenSwapLock()", "ef416aec": "firstMonthEnd()", "ef41e06f": "testThrowSetEnforceRevisionsNotOwner()", "ef41ea7e": "feePerc()", "ef41f95a": "newProposal(string,address,uint256,address,uint256,bytes)", +"ef42259b": "addFactory(address,uint256)", +"ef4265f3": "mockSetTerm(uint64)", "ef427776": "internalCalculateBonus(uint256,uint256,uint256)", "ef42b5da": "withdrawFunds(address[])", +"ef42d748": "ethToConvert()", "ef430aa6": "category()", "ef431437": "lastDayPaid()", +"ef4333c4": "ReciveFound(address,uint256)", +"ef435a40": "startNextRound4Bpool()", +"ef439634": "setDefaultNetworkTokenMintingLimit(uint256)", "ef43a2b8": "ChangeEmissionRateCoefficient(uint256)", "ef4445b8": "contribute(uint8,bytes32,bytes32)", "ef449888": "allowsNewGames()", +"ef454f1f": "setBonusMintingAgent(address)", "ef455b3c": "substractFromNumber(uint256)", "ef4592fb": "getResult(bytes)", +"ef45ee72": "depositeBNBpararifa()", "ef464e19": "internalRelease(uint256)", +"ef4658ef": "unwrapWeth(address,address,uint256,uint256)", +"ef46b2ab": "getETHAmount(uint256)", "ef46e0ca": "executeOrder(uint256,uint256)", "ef474056": "changeOpenString(string)", "ef47492b": "summFoundersShare()", +"ef47570c": "donanteTokensToDAO(address,uint256,uint256)", "ef4787a1": "getIsLimited()", "ef478bf6": "deleteInvestor(address)", +"ef47dc3b": "calcDebtRatio(uint256)", "ef47ff4b": "balance(uint8)", +"ef48770e": "getTokensForEth()", "ef4886ef": "retrieveVanityForWallet(address,address)", +"ef48e66f": "BetLimitChanged(uint256)", "ef48eee6": "pay(uint256,uint256)", "ef49567e": "E_Bid(address,uint256)", +"ef497c46": "_buLotteries(uint256)", "ef49b414": "isGladiatorChest(uint256)", "ef4a0c61": "ico_starting_supply()", +"ef4a64d4": "setUniswapAddresses(address,address)", "ef4b31d8": "proxySetup()", "ef4b41b9": "upgradeShifter(address)", +"ef4b44c8": "regularity()", +"ef4b5a78": "AdvVestingLockDate()", "ef4b6831": "callModifiedDeposit(uint256)", "ef4b91c0": "ProxySender(address)", "ef4ba598": "offerPriceEth(uint256)", +"ef4ba680": "getGrgContract()", "ef4bdfdd": "Set_your_game_number_between_1_15(string)", "ef4c8685": "LogNewWallet(address)", "ef4d6149": "investedAmoun(address)", "ef4e679b": "totalNtsSold()", "ef4ec047": "addFounder(address)", +"ef4edd5d": "sendSndTokens(address,address)", "ef4ef103": "bankrollExternalUpdateTokens(uint256,uint256)", "ef4f0c5f": "changeExtraBets(uint256)", +"ef4f289a": "UnFreeze(address,uint256)", "ef4f6e9c": "calcUnMaskedEarnings(uint256,uint256)", "ef4fac01": "calcTotalTokens(uint256,uint256)", +"ef4fcafa": "sync(address,uint256)", +"ef4fdfed": "getRftBurnAmount(address,uint256)", +"ef4ff2cb": "synack(uint256,address,address,uint256,bool)", +"ef4ffe57": "sipPlans(uint256)", "ef4ffee2": "Honestgamble()", +"ef501080": "ethToToken(address,uint256,uint256)", "ef50aec0": "set_taxi_driver(address)", +"ef50c988": "parliamentsTaxes()", +"ef50d963": "stakeNFY(uint256)", +"ef50e20f": "pairETH_LP1ETH()", "ef5121b3": "appreciationRateWei()", +"ef51d6e2": "inventoryFund()", "ef520aba": "getall_horsesCount()", +"ef525162": "addLiquidityETHOnly()", "ef52ad21": "MintMade(uint256,uint256,uint256)", +"ef52ad98": "setPass(uint256,string)", "ef52b0dc": "RuneToken()", "ef53030c": "thelnwaonCoin()", "ef532a47": "addBagAndGift(uint256,address)", +"ef53713e": "Paid(uint256,uint256)", "ef538593": "NeptaToken()", +"ef53eb5d": "getNewHotpotBasePerBlock(uint256)", +"ef54244b": "virtualDefaultDecayPeriod()", +"ef5472ef": "hasTransferRole(address)", "ef54801b": "getGrantBeneficiaries()", "ef548aaf": "PLAYER_TURN_SINGLE_PERIOD()", "ef54af8b": "TieToken(address)", +"ef550666": "zapIn(uint256)", +"ef551050": "collateralIlk()", "ef551b38": "PaymentAddress(address,bytes4)", +"ef555e26": "upgradMainAddress(address)", "ef556029": "testFallbackIsCalledOnTransfer()", +"ef559e6b": "setAlternate(uint256,address)", +"ef55bec6": "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"ef565133": "getAsksLength(address)", +"ef56a08b": "miningFeeDenominator()", +"ef574d23": "tokenAddressToIdMap(address)", +"ef574edb": "_getJobState(uint256)", "ef5793c2": "LOG_OwnerWithdraw(address,uint256)", "ef57cbec": "BARToken()", +"ef5829d4": "holdDividend(address)", "ef5850c7": "stakersForPoll(bytes32)", "ef589693": "getSMPTokensBoughtInICO()", +"ef590caf": "NewNode(uint256,string,uint8,address,uint256)", "ef599ba5": "getCoinBalance(bytes4,bytes32)", "ef59f8c8": "setRaffleAddress(address,address)", "ef5a3a88": "dividendsIndex()", +"ef5a3e4a": "getLockingIdScore(uint256,uint256)", "ef5a625b": "disqualify(address)", "ef5a80af": "ProductAdded(address,address,address,string,bool)", "ef5a8fb5": "sellLand()", "ef5ba9ed": "ALLOC_AIRDROP()", +"ef5bfc37": "getBalances(address[],address[])", "ef5c2010": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address,address)", +"ef5c8190": "updateIndex(uint256[],address[])", +"ef5cd5df": "get_pool_active(uint256)", +"ef5cfb8c": "claimRewards(address)", "ef5d5331": "isHashValid(bytes32)", +"ef5d9ae8": "totalClaimed(address)", "ef5daf01": "_dumpToCompany()", +"ef5e94aa": "gen0Counter()", +"ef5f88a0": "getStakeAmountByCountryCodeAndIntroducerTypeAndDmmTokenId(string,uint8,uint256)", "ef5f937c": "OpportyToken()", +"ef5fa1fa": "TransferERC20Token(address,address,uint256)", "ef5fad95": "DaWeiToken(uint256,string,string)", "ef5fb05b": "sayHello()", "ef5fbdb2": "stopPlaying()", "ef5fd51b": "getKeys(uint32,int256)", +"ef601042": "MaxGameLengthAltered(uint256)", "ef61041c": "_approveAllArgs(address,uint256,address)", +"ef612cd8": "_tier2EndTime()", "ef616584": "getPurchaseETHNum()", +"ef62d7fc": "gg1ToWbnbRoute(uint256)", +"ef634157": "send1155To721Ids(address[],uint256[],uint256[],uint256[],address)", +"ef635f3a": "pieRate()", "ef642054": "car_propose(uint256,uint256,uint256)", "ef6506db": "credit(address,uint256)", +"ef652d98": "getVetoEndorsements(uint256)", +"ef6537b5": "shuffle(uint256)", +"ef65bdf2": "lotteryToOwner(uint256)", +"ef65c8f5": "swapRateNumerator()", "ef660169": "withdrawRest()", "ef660ab8": "deliverCandidate(uint256,uint256)", +"ef668edd": "GS_maxAmountBetsInOneTransaction()", +"ef66f725": "swapExactTokensForETH(uint256,uint256,address[])", "ef674e66": "isWhiteListed()", "ef67caa0": "reservedTokensFounders()", +"ef67fde6": "setLockTemplate(address)", "ef685294": "addCascade(address,uint256)", "ef688df5": "addFundraiser(address)", "ef68913c": "dronesDeployed()", +"ef690cc0": "greeting()", +"ef6920d7": "enableGame()", +"ef693bed": "exit(address,uint256)", "ef6957d0": "ownerSetIsClosing(uint256,bool)", "ef69f408": "protectedTransfer(address,address,uint256)", "ef69f7d9": "ManagerRemoved(address)", +"ef6a610f": "lockedInfo(address)", "ef6a676d": "allowTransferToken()", "ef6a6bcc": "LogAddressCapExceeded(address,uint256,string)", "ef6a88de": "AbstractQuintessenceToken(uint256,uint256)", +"ef6ab3d1": "arrInvestors(uint256)", "ef6ac0f0": "run(bytes32)", "ef6b141a": "setStarted(bool)", "ef6b329a": "close_down()", +"ef6b738c": "setIlkLiquidationPenalty(address,bytes32,uint256)", +"ef6b7bed": "kickPerBlock()", +"ef6b88e6": "lastTrackedReBaseSupply()", "ef6c4b93": "addLimitAddress(address)", +"ef6c7ae9": "mishapCount()", +"ef6ca04a": "inventoryGoods(uint256)", +"ef6ce018": "MIN_POOL_ANNOUNCE_DURATION()", "ef6d1cc8": "QZToken(string,string,uint8,uint256)", "ef6d7b3b": "emitCancelled(address,uint256,uint256)", "ef6da43c": "setIsWeiAccepted(bool,uint256)", +"ef6e7535": "creatRoom(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", "ef6f1f36": "setData_25(string)", "ef6f8e92": "Creative()", "ef6face6": "privateContribution()", @@ -137293,154 +251178,281 @@ "ef70aebf": "endMinting()", "ef71a1f2": "BCREWARDS(uint256,string,string)", "ef7293d7": "SELLER_STEP_4_ACCEPT(bytes32)", +"ef72c513": "log(uint256,address,bool,address)", +"ef72cdba": "purchaseConfirmationCount()", +"ef730127": "__getPolicyManager(address)", +"ef732c4e": "_maxScalingFactor()", "ef739d0f": "changeCountry(uint256,bytes2)", +"ef74e0ac": "getMessage(address,bytes32)", +"ef74f690": "tokenPoolInfo(uint256)", "ef7507c8": "testWinner(uint256)", +"ef75e3d1": "playerOf(address)", "ef765af8": "erc20ApproveChecking()", +"ef768856": "BONUSTWO_MULTIPLIER()", "ef76c060": "HPQToken(address)", +"ef76e2ee": "setSupportedAsset(address,bool)", +"ef770642": "_addToDebtRegister(address,uint256,uint256,uint256)", "ef778d30": "createProject(address,string,string,bytes32)", "ef77b601": "SHAREFIDENCE()", +"ef77b780": "tokensHoldMap(address)", "ef77ed99": "isFundingState()", +"ef787388": "contractuallyOf(address)", "ef78a5b2": "singleUserSignUp(address,address)", +"ef78b8d3": "SetBenchmarksQuantity(uint256)", "ef78d4fd": "period()", +"ef796844": "setFragmentsPerWeek(uint256)", "ef79a35f": "getNumberOfLocks(address)", "ef7a4a32": "logoId()", "ef7a5956": "BRONZE_AMOUNT_SKL()", "ef7a5a2a": "getIudexScoreAll(address,bytes32)", "ef7ac0e5": "enableTransfer(bool)", +"ef7ace04": "previousEndPeriod()", +"ef7b4c6f": "seedReserveAmounts(address[],address[],uint256[])", +"ef7bac3d": "proposeTimelock(uint256)", +"ef7bdda4": "yfBetaSwap()", +"ef7c74e4": "_setUnderlying(address)", "ef7c7797": "getSaleContractDepositAddressVerified(address)", "ef7c9ecd": "preIcoTotalSupply()", +"ef7d367f": "getEthBack()", "ef7d47a5": "setMinBlockPurchaseInOneGo(uint256)", +"ef7d8de8": "LSPXContract()", "ef7dbc54": "listCompetitors()", "ef7dd831": "SUPPLY_FOR_ADVISORSL()", +"ef7de5be": "timeLockDelayInBlocksUnits()", +"ef7e0509": "VotesNumByProposalId(uint256)", "ef7e1e89": "pow()", +"ef7e5c7b": "getSigImplementation(bytes4)", "ef7f23a6": "numberOfBlocksBetweenSupplies()", "ef7f2e1c": "addHashrate(address,uint256)", "ef7f3834": "grantInitialAuthentication(address)", +"ef7f7043": "_setRaxOranment(uint256)", +"ef7fae7c": "issueMaxSynths(bytes32)", +"ef7fb21f": "RedeemShares(address,uint256,uint256)", "ef80027e": "Members_info(address)", "ef802e62": "tokensRemainingStage2()", "ef804ead": "testInequalityBytes()", +"ef809cc9": "HASHMASKS_PROVENANCE()", "ef80c53a": "earlyReserveBeginTime()", "ef80f1ab": "LitmusCrowdsale()", "ef80ff18": "tokenExchangeAddress()", +"ef815967": "setFlashLoanFees(uint256,uint256)", "ef816fd9": "isState(uint256,uint8)", "ef817f2a": "EtherZaarFactory()", +"ef819caa": "TokenLocking(address,uint256,uint256)", +"ef81bced": "vestingInfo(uint256,address)", "ef81eb57": "removeLastSaleOnlyNotActivated()", +"ef81efcf": "Ticket(address,uint256,uint256,uint256,uint256)", +"ef824c67": "transferqilonk(address)", "ef82c8a8": "geProposalCount()", "ef82f95c": "setFront(address)", "ef8322fd": "queryRoles(address)", +"ef838a9e": "loan_info(address,uint256)", +"ef8399fa": "testWithExtra(bool,uint256)", "ef84e27f": "getWorkpointSupportCancel()", "ef8594be": "setPriceStep6(uint256)", +"ef85f6fb": "transferGov(address,address)", "ef85fdad": "IRC_PER_ETH_SALE()", +"ef863a30": "tokenHunter(uint256,string,string)", +"ef864de1": "balanceToClaimTokens(address)", "ef869443": "investWithCustomerId(address,uint128)", +"ef869773": "getStakeBalance(address)", "ef8700e5": "tokensForDevelopment()", "ef885772": "GCCERC20(uint256,string,string)", +"ef88bf13": "initialise(address,address)", "ef890cc8": "isGameFinished()", +"ef8929bd": "authentication(address)", +"ef89522c": "createSlaveFee()", "ef898355": "revealHiddenPosition(uint32,int64[2],bytes16)", +"ef89aff3": "honeypot()", "ef89d6e3": "getArmorValue(uint256)", "ef8a22ac": "mineableTokens()", "ef8a9235": "currentStatus()", "ef8a9c8f": "allocatedStage()", "ef8b0e15": "processContribution(address,uint256,uint256)", "ef8b5892": "setRoundTwoRaito(uint256)", +"ef8b7b7d": "level1(uint256)", +"ef8baa12": "walletList()", +"ef8bc32a": "loopList()", +"ef8bd305": "APY()", "ef8c1d86": "ownerWithdrawParsecs(uint256)", "ef8c2c58": "openModifyCountdown()", "ef8c8944": "setPlayerId(uint256)", +"ef8cccb0": "getStages(uint256)", +"ef8d2a40": "setMarginCallerPercent(uint256)", "ef8d4a49": "getAssetIDForTypeSequenceID(uint256,uint256)", "ef8dcc2e": "LogTransactionConfirmed(bytes32,address,uint256)", "ef8dd09b": "deleteEntry(bytes32)", +"ef8dfdc2": "stopAcceptingEthOffsets()", +"ef8e061e": "TokenReservation(address,uint256)", "ef8e8069": "smallPrice()", "ef8ea3d0": "NewRegistration(uint256,address)", "ef8f1229": "EMISSION_FOR_SALESTAGE3()", +"ef8f34ac": "setMaxEthDeposit(uint256)", +"ef8fd004": "tokensApprovedMap(uint256)", +"ef8fd134": "downcast(bytes25)", "ef8fdfd8": "Bonus()", +"ef8ff878": "govSetDevFee(address,address,uint256)", "ef902a0c": "ShowBool(bool)", +"ef903642": "_RELEASE_DURATION_()", "ef9089d6": "nextPrice()", "ef90aa46": "givenBountyTokens()", "ef9124e1": "TrinityToken()", "ef9130b9": "getBetItemCount()", +"ef913a7c": "initiateVesting(address)", +"ef915426": "intMinD()", +"ef9169ee": "currentMerel()", "ef921826": "setMaxDuration(uint32)", "ef922305": "DACCToken()", "ef92742e": "ICOmint()", "ef92b384": "saveGenCode(address,uint256)", "ef92b701": "CFC()", +"ef93a0d9": "LogAwardWinner(address,uint256[])", "ef940837": "payday(uint256,address,uint256)", +"ef94156a": "AquariumFished(bytes32,address,uint256)", "ef941dca": "issueTokens(uint256,string)", "ef943909": "PublisherAddress()", +"ef9486df": "PROXY_REGISTRY_ADDRESS()", "ef94ce1e": "addMenu(string)", +"ef950d02": "getPossibleBorrow(address,uint256)", +"ef951dba": "Donate(uint256,address,address)", "ef9521ea": "GruffinzContact()", +"ef9522c0": "FiatDeliveredEvent(uint256,uint256,uint256)", +"ef956c41": "total_fees(uint256)", +"ef9582d7": "makeClaim(uint256[])", "ef95aa5d": "getManifest(address,bytes32,uint256)", +"ef95c30f": "XPLPerEther()", "ef961367": "registerForCompetition(address,uint8,bytes32,bytes32)", +"ef971198": "companyLegalRepresentative()", "ef982eba": "settournamentPrizeAddress(address)", "ef984923": "transferTenuousTokenOwnership(address)", "ef98dea3": "getAuctionManagerAddress()", "ef99c9ef": "DACVest()", +"ef9a3a3d": "mintAndFreeze(address,uint256)", +"ef9aa9fc": "removeLiquidityExactIn(address,uint256,uint256,uint256)", "ef9b0214": "read_i32_array()", "ef9b559a": "CLX()", +"ef9bb421": "createBitcoinAddressPrefixTask(bytes,uint256,uint256,uint256)", +"ef9bd63d": "setMatAddr(address)", "ef9bfe1a": "returnInvestors()", "ef9c3512": "falconmasterReq()", "ef9c4446": "cancelProposeTo()", "ef9c52ea": "maxIco()", "ef9c79da": "getFileNum()", "ef9cb474": "changeWorkerPoolPolicy(uint256,uint256,uint256,uint256)", +"ef9d1507": "pendingRigel(uint256,address)", +"ef9d1d86": "test_store()", "ef9da13d": "getPeriodOwnerLockedBalance(uint256)", +"ef9e2379": "approveForSpender(address,address,uint256)", "ef9e7f95": "self_readyTime()", "ef9f6023": "PUBLICSALE_SUPPLY()", "ef9fc1de": "DelegateChanged(address,address)", "ef9fc50b": "addNumbers(uint256,uint256)", "ef9fe3ac": "setCompte_8(string)", +"efa058b1": "removeTWAPSource(address)", +"efa08806": "recoverBEP20(address,uint256)", "efa08854": "companyShare()", +"efa09c89": "_init(address,uint256)", +"efa09d85": "_approveOrder(uint256)", "efa0a1ef": "SettankImposedMax(uint256)", "efa0e659": "EthX()", +"efa17cc2": "updateMinimumTotalSupply(uint256)", +"efa192f2": "buyLevel(address,uint256)", +"efa1a7a6": "verifyMerkleProofs(address,uint256,uint256,bytes32[])", "efa1c34c": "destroyChannel(address)", +"efa1c63c": "rewardRateB()", "efa227ca": "finish(uint16)", "efa25196": "getDevidends()", +"efa2f3a2": "cancelLockModule(bytes32)", +"efa30840": "getUniswapReserves()", "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)", +"efa4168a": "preSupply()", +"efa4b585": "stakeActivation()", "efa4f94d": "computeDeadline()", +"efa51cda": "paid(uint256)", "efa52fb3": "iterateGet(uint256)", +"efa567b7": "setPercentToDeduct(uint8)", "efa56a1e": "use_OEM_Parts(bytes32,uint256,uint256)", +"efa57f7d": "InitiatedInBlock()", +"efa5cd2d": "minerLeagueAddress()", "efa5d431": "vote(address,address,uint256)", "efa6fd63": "perTransactionRate()", "efa726e8": "setEggLimit(uint16,uint16)", +"efa73349": "searchInventory(string,uint256,uint256)", "efa74f1f": "getTokenBySymbol(string)", +"efa77de6": "changePricePerTicket(uint256)", +"efa7d977": "approve_161(address,uint256)", +"efa7dbbd": "hourly(address,uint256,address,uint256)", "efa7e56b": "GameEnds()", "efa85335": "Registrar_Oraculo(address)", +"efa8bdc6": "tokenInProgress(address)", +"efa8c430": "unixDurationToOpenRemainingAssetsToAllBeneficiaries()", "efa8d998": "GetEtherSpent(address)", "efa94e47": "createToken(bytes32,string,string)", +"efa95b23": "regLevelEventCount()", "efa99ecf": "SubModuleSuspended(uint256)", +"efa9a9be": "claim(uint256,uint256,uint256)", +"efaa4134": "sushiAddress()", "efaa55a0": "joinGame(uint256)", +"efaa59c3": "calcBlockRewards(uint256,uint256)", +"efaa78d6": "receiveWhitelist(address)", "efaa86b1": "claimTeamTokens(address)", "efab1e50": "getInvestorDetails(address)", +"efab37bf": "lastSaveTime(address)", "efab4b91": "_unpackIntelligenceValue(uint256)", "efabaa89": "sortTrusted()", +"efabcadc": "transferInternalCoins(address,address,uint256)", "efac0fd0": "PowerEvent(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address[],uint256[])", "efac4db4": "add(address[],uint256)", +"efacc04f": "setRewardLevels(uint256[3])", "efacd73b": "_createRocHunting(uint256,uint256)", +"efad3656": "setIsEnded(bool)", "efad6df3": "cycleLimit()", "efada80b": "getRunDetails(uint256)", "efada94b": "setParentPayoutDistributionHash(bytes32)", "efae0f2f": "AIR_1()", +"efae3925": "changeBaseOperatorsContract(address)", +"efaf0597": "userInfo(uint16,address)", +"efaf63db": "openLottory()", "efaf8e22": "isSenderRegisteredAgent(address)", "efaf90c8": "DAYS_31()", +"efaf96c6": "recycleExact(uint256,uint256,uint256,uint256,uint256)", +"efaff03c": "firstOwners(uint256)", +"efb064a9": "getDark(uint256)", "efb0cdd9": "MeTooToken()", "efb109d4": "privlocatum(string,string,uint8,uint256)", +"efb13e7e": "initialize(address,uint256,uint256,uint8)", "efb173d4": "addCompany(uint256,string)", "efb1900d": "deleteThisContract()", +"efb1b6b2": "setSwapMax(address,uint256)", "efb20f6a": "Worldcoin1()", +"efb21c59": "donate(string,uint256)", "efb23d73": "getFirstHexByte(bytes1)", +"efb25313": "StockBuyOrder(uint256,uint256)", +"efb2bc0e": "activeAmount_deprecated()", "efb2bfd3": "signatureChecker()", "efb369c7": "transferFundsByOwner(address,address)", +"efb40e2d": "misBoletos()", +"efb5383f": "fxswapPerBlock()", "efb588e4": "presaleMaxValue()", "efb610bc": "isExternalBuyer(address)", +"efb6d83a": "getAnimals(uint256)", +"efb74400": "removeLiquidator(address)", "efb7601d": "getExchangeRate(address)", +"efb7aa2c": "burnTOKENS()", "efb7e8b3": "mistakenTokens()", "efb7fa77": "unLinkFromMasterWallet(address,address)", "efb8b6b1": "after10Seconds()", +"efb8b9e6": "getTokenAssuranceAmount(address)", +"efb8c8da": "getBalanceOfVotedForCandidate(uint256,uint256,address)", "efb95ced": "masterRewardsPercent()", "efb98bcf": "getRemainingTime()", "efba9bd2": "recoverLeftovers()", +"efbb34d5": "totalRaiseCost()", +"efbb5cb0": "estimatedTotalAssets()", "efbb5f17": "retrait_2()", "efbb6108": "transferStbToOwner(uint256)", "efbbbd65": "getLambo(uint256)", @@ -137450,6 +251462,7 @@ "efbcae98": "deleteMemberOfCommunity(address,uint256)", "efbcebe5": "ObsToken()", "efbd4bff": "priceForRect(uint256,uint256,uint256,uint256)", +"efbd7bd2": "totalBetsAmount()", "efbd863e": "setRealTokenPrice(int128)", "efbd8a92": "setPriceFactor(uint256)", "efbd9ec2": "changeList(address,bool)", @@ -137460,234 +251473,413 @@ "efbe584d": "isDEditor(bytes32,address)", "efbe62e8": "validate(uint256,bytes)", "efbe8fd1": "createToken(string,string,string,uint256)", +"efbeb6e8": "fourthPool()", "efbec487": "payBoss(uint256)", "efbee9b3": "_stake(address,bytes32,uint256)", +"efbf225f": "HL_HERO()", +"efbf2801": "pendingYADD(uint256,address)", +"efbf6e0b": "numberOfBidders()", "efbf7d83": "GrowGuildToken()", +"efbf8185": "buyETH(uint256)", +"efbfd847": "averageExitPenalty(uint256,uint256)", "efc018cc": "coupDetat(address)", +"efc0211e": "updateOROConversion(address)", "efc0712c": "activateGladiator(address)", "efc07e84": "withdrawBalanceERC20(address,uint256,address)", +"efc09d08": "Operable(address,address,bool)", "efc139cd": "SmartBooking()", "efc1595e": "DeDice()", "efc1ba92": "FakeMembershipRegistry(address)", "efc1c0ab": "SimpleNameRegistry()", "efc2fd2a": "getRefillStatFor(string)", "efc3323c": "createEvent(bytes16,bytes16[],bytes16[],uint256[])", +"efc354eb": "swapETH(uint256)", "efc3d252": "GetLuckyLandIds()", "efc4cbdd": "Fiocoin()", "efc4f1dc": "switchSaleState()", +"efc5853c": "ownerToName(address)", "efc58aea": "spawnAsset(address,uint256,uint256,uint256)", "efc5c693": "executeSell()", +"efc5d183": "token_cap()", +"efc62330": "D100Token()", "efc63bd3": "_rawGetGlobalDelegation(address)", "efc65b3a": "CindicatorIssued()", +"efc6caff": "reward_in_pool_multi(address)", "efc7285c": "mintPresaleWithBlock(address,uint256,uint256,uint256,uint256)", "efc7652e": "getBAU2(bytes32,address,uint256)", "efc77f3f": "LTHToken()", "efc78401": "isSenderAllowed(address)", +"efc7a842": "drawPool(address[],uint256[])", "efc81a8c": "create()", "efc82381": "FirstTimeTransfer()", +"efc84d05": "zeroDayStartTime()", "efc8d3c6": "amountReservedRefsTokens()", +"efc8f3c8": "updateMinterStatus(address,bool)", +"efc908a1": "deposit(address[],uint256[])", +"efc9106d": "UsdPerEtherChanged(uint256,uint256)", +"efc91bc9": "mnt()", "efc927b9": "ShowEmissionRate(uint256)", "efca0214": "HotPotToken()", "efca2eed": "totalDistributed()", +"efca5807": "ethtotal()", +"efca7791": "transferMintingRights(address)", "efca9f09": "minimumPurchaseLimit()", +"efcaaebe": "sort_array(uint256[])", "efcb6cde": "changeOwner(bytes32,bytes32,bytes32,address,string,bytes32,bytes32)", +"efcba3db": "swapForUSD(uint256)", "efcc3c7f": "getMiniPoolEdit_3()", "efcceaae": "getGamePaused()", +"efcd0db4": "wpcSupplyState(address)", "efcd1cd9": "signatureSplit(bytes)", "efcd2ddd": "changeOracleAdd(address)", +"efcd708f": "presales(address)", +"efcd7328": "fannyPoolInfo()", "efcd853f": "DogezerPreICOCrowdsale(address,address,address,address)", "efce0688": "createPrometh(address)", "efce079e": "doQuest(uint256)", "efce1d66": "BitEyeEx(address)", "efce6e78": "PinkyToken()", "efce828e": "skinCreatedNum()", +"efce97e8": "setSellFactor(uint256)", "efcee869": "vote(bool,string)", "efcefb40": "withdrawAllFor(address[])", "efcf095c": "viewNumberOfMemories()", "efcf2479": "trim(string,string)", "efcf2730": "_premint(address,uint256)", +"efcf33ae": "getLatestUnlockAmount(address)", "efcf4f41": "getPixel(uint16)", "efcf6d68": "finanReserveTimeLock()", +"efcf7eb2": "addTokenPool(address,uint256)", +"efd01329": "Slimming(address)", +"efd02a89": "percentForReferLv1()", +"efd04b53": "Trade(bytes32,uint256,uint256,uint256,uint256,address)", +"efd058f5": "ninjaIndexToOwner(uint256)", "efd0c851": "getPayoutReadyState()", "efd0f455": "getChStatus()", "efd12624": "startPostICO()", +"efd151c8": "pega()", +"efd2545d": "getTotalrTLPHarvest(uint8)", "efd2abec": "calculateAntBuySimple(uint256)", "efd2fb9b": "DeltaToken1()", +"efd342c1": "claimTradingProceeds(address,address,bytes32)", +"efd35ccf": "updateMetaBaseUrl(string)", +"efd3a672": "acceptPhotoAcquisition(uint256,address)", +"efd3c057": "Newdel(address)", +"efd3f043": "getUintByMsg(bytes,uint256)", +"efd42607": "setBonusEndDate(uint256)", +"efd46065": "isCreator(address)", "efd46e1d": "E4RowEscrow()", +"efd488c3": "MIN_MINERS()", "efd4d0a6": "finishedloading()", +"efd5a170": "send(address[],uint256)", +"efd5d28e": "transferERC20AndCall(address,uint256,address,bytes)", "efd6479a": "publicGetUserInfo(address)", "efd64af9": "getReportingWindow()", "efd71eb0": "updateVaultWallet(address)", "efd7313d": "setExists(bytes32,bool)", "efd73adc": "MigrationFund()", "efd76499": "_cancelOrder(address,uint256)", +"efd779bd": "ribbonCut()", +"efd85c00": "approve_848(address,uint256)", "efd8871a": "revoke(bytes32,address)", +"efd8abaf": "roundEnd(uint256,uint256,uint256)", "efd8c379": "userXRTBalance(address)", +"efd9066f": "tokenExponent()", +"efd96fbf": "removeResolverFor(address,address,bool,bytes,uint8,bytes32,bytes32,uint256)", "efd979cb": "setMinimumEtherToAccept(uint256)", +"efd9a479": "setEarnedToBuyBackToken2Path(address[])", "efd9d7e0": "KoosAlbertsToken()", +"efda46dc": "approve_214(address,uint256)", +"efda599c": "TransferAble()", +"efdbf4d9": "writeInvoice(string,uint256,uint256)", "efdc4d01": "extraReceiversLength()", "efdc5b77": "change_nodelist(address)", "efdcb506": "getMsgGasBefore()", "efdcc0f8": "getTeamTokens(uint256)", "efdcd974": "setFeeReceiver(address)", +"efdce2c5": "buyRPunk(uint256)", +"efdd4817": "OnSetNewBanker(address,address,uint256,uint256,uint256,uint256,uint256)", +"efdda0a0": "minimumMigration()", +"efddc53c": "lastPlayerAddr()", +"efde068b": "getExpiredWorkingGroupSize()", +"efde23ed": "safePayback(address,address,uint256)", +"efde4e64": "allPoolsLength()", "efde6dcf": "Rejected()", "efde9d6e": "InitChallengeAddress(address[10],address,uint256[10])", "efdea046": "test_3_someTest()", +"efdea550": "UpdatedAgent(address,bool)", "efdecd9b": "check_withdrawdao()", "efdee94f": "deployerAddress()", +"efdf0bb0": "setPendingGov(address)", +"efdf3317": "fauxAllowance(address,address)", "efdff7bb": "getContractAddressById(bytes32)", +"efe02682": "memorySize()", +"efe0370e": "futureSwapRouter()", +"efe038c7": "getAllBeneficiaryDeposits(address)", "efe08a7d": "changeAddress(address,address)", "efe0e495": "calculateVestedTokensNumber(uint256,uint256,uint256,uint256,uint256)", "efe1525e": "viewFeaturedLength()", "efe213a9": "_getCurrentPeriod()", +"efe22266": "rewardFund()", "efe2c8a4": "setConsumerAddress(address)", +"efe2ccc1": "getPatientDetails(address)", "efe37d6f": "ELTTokenImpl()", "efe3f4f4": "determineInterfaceImplementationStatus(address,bytes4)", +"efe40b16": "_push(address,uint256)", +"efe42853": "checkContractTokenBalance()", "efe43338": "determineWinner(uint256)", "efe4e0a1": "iterateThroughSwarm(address,uint256,uint256)", "efe51cca": "state2()", +"efe52aeb": "removemember(address)", "efe6bfa3": "sellOrders(bytes32)", "efe6c772": "MAX_PLAYERS_PER_STAGE()", +"efe72e4a": "getSourceUriHash(string)", +"efe75b43": "bunnyChef()", "efe79268": "PRICE_STANDARD()", "efe7a504": "END()", "efe7c791": "RANGESTART_5()", "efe86dd5": "batchPunchOut(address[],uint64[])", +"efe887c3": "statusFlag()", "efe89d5a": "tokens2owners(address)", "efe8c94f": "_safeSub(uint256,uint256)", "efe93036": "getListTeamByPlayType(uint256)", +"efe97d05": "getNextEpoch()", "efe998b9": "ethDividendAmount()", "efe9b08d": "dissolve(address)", +"efe9dc4a": "stakeUnlockSchedule(address)", "efe9e86b": "MyPinerTokenTest3()", "efea0172": "startIco(bool)", "efea835a": "devfeesoutstanding()", +"efea921f": "tokenBalanceMelt(address,uint256)", "efeb4ad7": "onMoneySent()", "efeb5e58": "beneficiaries(uint256)", "efeb5f1f": "addWallet(address)", "efeb941d": "ICOstart()", +"efeb97e1": "_setAutoSwapCallerFee(uint256)", "efebc720": "swapEndTime()", +"efec6739": "pledgedDeposits(address)", "efecab8a": "addSale(address,uint256)", "efed160f": "func_0431()", +"efed6e4d": "ordersBook(uint256)", "efed7b0a": "fondPlatform()", +"efedc669": "score()", "efedf429": "admin_member_isWithdraw(address,bool)", +"efedfec0": "setStorageUint256(bytes32,uint256)", "efeecb51": "getNumberOfTokens()", "efef39a1": "purchase(uint256)", "efef445b": "transferDataFrom(address,address,uint256,bytes)", +"efef6432": "poof1()", +"efef7802": "getRecommendCoefficient(uint256)", +"efefa3f5": "fetchHubPiggy()", +"efefb24c": "request(bytes16,uint256,string,string,uint256)", "eff02ec5": "returnBorroweedEth()", +"eff03cce": "is_plan_completed_p4()", +"eff0f592": "claims(bytes32)", +"eff1337c": "receiveAllowed(address)", "eff134ee": "withdrawTokenOwnerReward()", "eff14c78": "submitValue(bytes8)", +"eff1e3b2": "vestingCompleteDate()", "eff24744": "getTaskAddress(bytes32)", +"eff26065": "holdBalances(address)", "eff26a3b": "checkExist(address)", +"eff34b1b": "twouint(uint256,uint256)", "eff35f75": "setTickTime(uint256)", +"eff379db": "importCdpFromProxy(address,address,uint256,uint256,uint256,uint256)", "eff38f92": "getQuestion()", "eff3c4e7": "openForPublic()", "eff413ad": "setGoldMigrated(address,bool,string)", +"eff424c0": "getRawFundBalance(uint256[])", +"eff42f2e": "removeWhitelistedUsers(address[])", "eff5c266": "addToMemeList(string)", "eff60f56": "LRXCOIN()", "eff631cf": "setNewPeriod(uint256)", "eff6be2f": "changeBaseFee(uint256)", "eff6e83d": "getIndexOrder(uint256)", +"eff70c2b": "incSpecial(uint256,uint8)", +"eff730b6": "inCaseChangeKnightDiscount(uint256)", +"eff7550f": "activeTableIndexes(uint256)", +"eff77ee1": "rewardRemainder(address)", +"eff7a612": "increase_unlock_time(uint256)", +"eff7add8": "numberOfChoice(uint256)", +"eff7c3ea": "__LnAssetUpgradeable_init(bytes32,string,string,address)", +"eff7e281": "LogNewEpoch()", "eff7ed65": "setExchangeRateETHToUSD(uint256,uint256)", "eff841d1": "setReserveWeight(uint256)", "eff867e5": "CruzeiroToken()", "eff877e2": "calcTokenPriceInWei()", "eff883bd": "takerSellAsset(uint256)", "eff8e748": "discountRate(address)", +"eff90cd7": "compoundReceivedFund(uint256)", "eff91c7e": "getLatestId()", +"eff98843": "stakingFee()", "effa00a6": "isIQTDistributed()", +"effa1380": "settleMissedJackpot(bytes32,uint256)", +"effaa626": "setLockStep(uint8[],uint256[])", +"effb3c6e": "getAnchors()", "effb8415": "set_recivers(address,uint256)", "effbbf92": "enableDisableTokenProxy()", "effc4c1f": "throwIfLocked()", "effc792d": "stakeInCurrentPeriod(uint256)", +"effca1fe": "masterpieceToOwner(uint256)", "effcd413": "wallstreet2()", +"effd106c": "savedBonusToken()", "effd88b7": "ethToWei()", "effda074": "addFactoryToCP(address,address)", "effe031e": "payBankRoll()", +"effe3de4": "harvestForFree(address)", "efff1fb9": "_collect(address,uint32,uint32,uint32)", +"efff24e9": "deduction()", +"efff6adf": "setAmult(uint256)", "efff718d": "BITBIX()", "efff78a5": "setRule(uint16,uint256,uint256,uint256,uint256)", "effff82f": "valueToken()", +"f0002ea9": "balances(address[],address[])", "f0004ab4": "PRIVATESALE_TOKENCAP()", "f0006707": "setWriteTimestamp(bytes32,uint256)", +"f000738a": "cutieGenerator()", +"f0008922": "negate_s16(int16)", "f000999e": "upgrade(address,address,address)", +"f001512b": "bonusLevel1Percent()", +"f0019108": "distributeTokens(address[],address,uint256[])", +"f001c2d1": "LinkConfirmed(address,address,address)", +"f001f5ea": "_calculateTradeSizeAndDirection(address)", "f0024677": "deleteTellerMods(address)", +"f0026e71": "setMinimumAucToFreeFee(uint256)", "f0032567": "computeFare(uint16)", "f00388f7": "give(address,uint256)", +"f0038e59": "PRIV_SELL()", "f003a487": "unpauseCrowdsale(address)", +"f003bd14": "getFactoryContext()", "f004073a": "performAction(uint256)", "f00423ac": "XXXcoin()", +"f00430c2": "distributionContract3()", "f0044924": "BitGemPlayToken(address,address)", "f004b12b": "CrowdFund(uint256,uint256,address)", +"f004d810": "sixWith()", +"f00506e2": "changeMaxParticipants(uint256)", +"f0057e09": "setWithdrawnPercent(uint256)", "f005b1b7": "UniversalTradeCoinToken()", "f0061866": "deleteCourse(address)", +"f0062203": "mint(address,bytes32,string,string)", "f006228c": "guardian3()", "f00648b8": "withdrawCoreTeamTokens()", "f0072795": "itemsRange(uint256,uint256)", "f007557f": "IPXTokenBase()", "f0075829": "isValidPubKey(bytes)", +"f007cbfb": "removeBorrowAsset(address,address)", +"f0080dc3": "winorgwjekrmg()", "f0083250": "canImplementInterfaceForAddress(address,bytes32)", "f0086703": "setNextMilestone(uint256,uint256)", +"f0087154": "SendETHToContract()", "f008be46": "currentTierDiscountPercentage()", +"f008f8e2": "ERC20sDec(address)", +"f0092393": "claimToken(address,address,address,uint256)", "f009347d": "KudosProxy(address)", "f00989a8": "FOUNDING_TEAM()", +"f00a6d1b": "go(uint256,uint256)", "f00aac7f": "ArrayRR()", "f00ac1da": "Login()", "f00acc47": "prepareRoll(uint256,uint256)", +"f00adf5e": "setPolicy(uint256,string)", +"f00b018b": "works()", +"f00bb237": "batchMintWithTokenId(uint256[],address[],uint8[7][],uint8[],bytes32[])", +"f00c3ff4": "addGemJoinMapping(address[])", "f00c67fc": "Bounty0xEscrow()", "f00c7669": "lastBlock_v2()", "f00c9e67": "testStoresChallengeOwner()", +"f00d05e9": "deactivateEdition(uint256)", "f00d2823": "TokenMinted(uint256)", +"f00d371c": "expectedPrice(address,uint256)", "f00d4b5d": "changeOwner(address,address)", "f00d7326": "isSenderInvestor(address,address[])", "f00db260": "underwriter()", +"f00dbba9": "highBalance()", +"f00ddd92": "pendingAnti(uint256,address)", +"f00e242a": "setTargetPriceOracle(address)", "f00e4129": "EmergencyFundingReleaseApproved()", "f00e6a2a": "getTarget()", "f00e6f0a": "getResultData(uint8)", "f00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", "f00f087f": "operationsPercent()", "f00f7b33": "loseOdd()", +"f00f7f3c": "setTestTokenBalance(address,uint256)", +"f00f9091": "SetLockTokenTime(address,uint256)", "f00f9b4d": "transferForMining(address)", +"f00fd4bb": "burnRateTableAddress()", "f00ff174": "verifyWithdraw(bytes32,bytes32)", +"f01010b1": "NERD_RELEASE_TRUNK()", "f0109f84": "valueAirDrop()", "f010b6e5": "wipeBlackListedTrueUSD(address)", "f011a7af": "claimProfit()", "f011e270": "_payoutWinner(uint256,uint256,uint256,uint256)", "f0123bc2": "dtStart()", +"f01279d1": "ends(uint256)", +"f012cc5c": "lockWalletStructs(address,address)", +"f012eb7e": "balanceOfm3CRV()", "f0137edf": "tokensFor1EthP3()", +"f013dccf": "mine_slots_2(uint256)", "f013e0e1": "setWhitelist(address[],uint256[])", "f0141d84": "getDecimals()", "f0144a91": "dataset_md5checksum()", "f0149751": "getTotal(bytes32)", "f0149b9d": "ZenswapNetwork()", +"f014b086": "finishBurnout()", +"f014e221": "stuff1(uint256)", "f01551f6": "difficultyAdjustmentPeriod()", "f015bc93": "PRESALE_ADDRESS()", "f0163621": "changeDomain(uint256,uint256,address)", "f0163a82": "getNobleBalance()", +"f016fdea": "crystalsBought(address,uint256,uint256)", +"f017013b": "tokenSaleROTH(address)", "f0173703": "ROLE_ORACLE()", "f0174a25": "initMetadataDisable()", +"f017625a": "updateClass(string)", +"f017c92f": "setMaxReportDelay(uint256)", +"f018acad": "Step(uint256,uint256)", "f018f741": "isPresidenteDeMesa(bytes32)", "f019bd5e": "_generateOrder(address,address,address,uint256,string,string,string)", "f019c267": "decreaseApproval(address,address,uint256)", "f019c5da": "expReward()", "f019c941": "SLAV()", +"f01b1dc1": "getApplicationEntityState(bytes32)", +"f01b50df": "mintToken(bytes32[],bytes32)", +"f01b54ff": "subm()", "f01b896f": "ambi2()", +"f01bed15": "createAsset(string,uint256,uint256,address,uint256)", +"f01c1bfa": "dayCalculation(uint256,uint256)", +"f01c4dfd": "setRewardSharingParameters(uint256,uint256,uint256,uint256,uint256)", +"f01cc068": "earningsPeg()", "f01cc531": "setMonarchyRewards(uint256,uint256)", "f01dbd03": "rewardAddressesSet()", "f01de8c3": "getNextBattleTime(uint64)", +"f01dea6a": "purchaseUser(bytes3,bytes3)", "f01e0648": "Voted(address,address,bool)", "f01e341b": "addPostOnUser(address,address)", +"f01e3735": "updateStrategy(uint256,address)", +"f01e3e20": "getShareOfTokenAmount(address,address)", "f01e66ec": "getAvgPrice()", +"f01e7d03": "getJurorId(address)", +"f01eb0de": "priceConsumerUSDT()", +"f01ed17b": "levelAddition(uint256)", "f01eddda": "claimMyApis()", "f01ee2cf": "sendERC20Tweet(uint256,string,string,string,string)", "f01f20df": "burnPercentage()", +"f01f3a5c": "updateCoinLevel(address,uint256,uint256,uint256,uint256)", +"f01f4535": "whitelistRemoveAddress(address)", +"f01f8da7": "ReconVaultFuturStock()", "f01fe692": "create(uint256,address)", +"f01ff72d": "testWhile()", +"f01ffb9b": "Declined(address,uint256)", "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()", +"f02089dd": "buyPUST(address,uint256)", "f020bfe1": "McCringleToken()", "f020d093": "applyInsurance(bytes32)", "f020f279": "balanceWinPoolForSecondStage()", +"f020fd1b": "setPinnedCodeExt(address)", "f02137c8": "updateTicketPrice(uint256)", "f02152ab": "sponsorOpinion(uint256,uint8,bool)", "f02175c7": "checkNewOwnerArgs(uint256,uint256,uint256)", @@ -137696,61 +251888,112 @@ "f02286c1": "topUpLuck(uint256)", "f022a694": "ToxbtcToken()", "f022a867": "unholdMntp(address,uint256)", +"f022c1fb": "Freeze(address,bool)", "f022d9f6": "setContractProtection(bool)", +"f0233837": "memberUpdateRollingPropertyValue(address,bytes32)", +"f023b811": "getEscrow(bytes32)", "f023d600": "purchase_address()", +"f023e8db": "totalIssuedPynths(bytes32,bool)", "f0247f78": "maxQtyInFp()", +"f0249547": "setUtilizationScaled(address,uint256)", "f024a95a": "setMinimumTribute(uint256)", +"f024f662": "contractTerminated(int256,string,int256)", +"f025a730": "settleBetUncleMerkleProof(uint256,uint256)", "f02694f6": "SetStartVesting(uint256)", +"f0270192": "oneCliff()", +"f0275663": "divideProfit()", +"f0277524": "getTotalUsers(uint256)", "f027c7e0": "initOptionProgram()", "f027d1f0": "setC4FContractOwner(address,address)", +"f0282ee9": "GetValue(uint256)", +"f0284b1c": "getFailedAuctionWithdrawComponents()", "f0285b96": "_ownerSupply()", "f02895e4": "ICO_ADDRESS()", +"f028d472": "DateUpdated(uint256)", +"f028e9be": "getTransformWallet()", +"f0292a03": "MAX_MINT()", +"f0294f0b": "token365FrozenBalances(address)", "f0296bfa": "setRefBonus(uint256,uint256)", +"f0299a7f": "delegatecallFoo(address,address,uint256)", "f029e102": "SandwichShop()", "f02a306e": "timeoutXEnabled()", +"f02a3391": "removeEntry(address,string)", "f02a4463": "SkyExchange()", +"f02af06c": "approve_45(address,uint256)", +"f02bbe94": "_bond(address,address,uint256)", +"f02bde54": "adminTokens()", +"f02c2643": "setReferralTokenAndHold(address,uint256)", +"f02c3617": "_addressToCumulativeAmountWithdrawn(address)", +"f02d195b": "withdrawELYC(address,uint256)", "f02d7ef0": "issued(address)", "f02dd53f": "getLand(uint256)", "f02e0b3c": "SALE_IN_PROGRESS()", +"f02e371a": "CONTRACT_LP_WATER_ERC20_TOKEN()", +"f02ea9fd": "accumulationWindow()", +"f02ee7ad": "numStrikes()", "f02f1b6f": "getDailyLotteryParticipants(uint256)", "f02f3a89": "oem_share()", "f02f85c5": "timeOfLastBlock()", +"f02fbd4a": "changeYeldToRewardPerDay(uint256)", "f02fc78f": "batchRegularTransfers(bytes32[],bytes32[])", +"f02fedc4": "permanentlyDisableEscapeHatch()", "f02fff9d": "Fcoin()", "f0303452": "approveAll(address,uint256[])", +"f030e3d3": "initializeGenerator(address,address,address,address,address,uint256,uint256,uint256)", +"f030ef61": "LogFinishICO(address,address,address)", +"f030f749": "_createAction(address,bytes,bytes)", "f0314df0": "addTrustedContract(address)", "f031a4d2": "TasksHandler(address,uint256,uint256,uint256,uint256)", +"f0329f6b": "_manager()", "f0330d54": "claimTwitterBonus()", +"f0331024": "claim(bytes32,bytes)", +"f03312ff": "uniswap_CRV2WBTC(uint256)", "f03342ad": "initiatedBy(address)", +"f03371ac": "registerUser(string,string,string,uint8,string)", "f0342179": "setPriceUnits(uint256)", +"f03457b5": "getUpgradeCadence()", +"f0346c47": "approvedTokenContracts(address)", +"f03490de": "crimegoldToken()", "f0349d5f": "setupStages()", +"f034c18d": "get_epoch_cycle_params()", "f0350c04": "transfer_ownership(address)", "f03529c3": "setMasterFeeContract(address)", "f0356a36": "balanceOfContractFeeEth()", +"f0359d1b": "kyberStaking()", "f036417f": "setTokenSymbol(address,string)", "f0366c45": "imageExists(uint256)", "f0369550": "getStage0Cap()", "f036b592": "getBonusFactor(uint256,uint256)", +"f036c1db": "_verifySig(address,address,uint256,uint256,uint256,bytes,bytes)", "f036ed56": "addResources(address,address[],bytes4[])", "f0375c55": "SudanGoldCoinToken()", +"f037c9c5": "poolRewardRatePerDay()", "f038a969": "createScanner(uint256,string,uint256,uint256,uint256)", "f038e106": "CKAOTToken()", "f039218a": "Robycoin_test1()", +"f0399bc6": "transferonUniswap(uint256,address,address)", "f039d9d5": "totalPicks()", "f03a1bc6": "addBet(address,uint256)", "f03a5687": "reinvestDividend()", "f03a6872": "bitmask_add(address,uint256)", "f03aa262": "noContributors()", "f03b0c0b": "setMultiSigWallet(address)", +"f03b5329": "myFlashLoanCall()", "f03b7c70": "addComment(string,address,bool,uint256)", "f03b8bf5": "UoBAMZNToken()", "f03bcc7f": "submitAudit(address,bytes32,bool)", +"f03bcd8e": "startChangeTreasury(address)", +"f03c02b1": "setsideoutcome(uint256,bool,uint256,uint256)", "f03c0e8f": "D3JDemo(uint256,string,uint8,string)", "f03c58ca": "test_feePoolShare_isTranscoder()", "f03c7c6e": "pit()", "f03c867a": "ownerDisablePayee(address)", +"f03c8e18": "DefrostingRateChanged(address,uint256)", +"f03cb74b": "setTokenPoolAddress(address)", "f03d43ed": "updateTokenTicketPrice(uint256)", "f03d7d2f": "transferReferralFee(address,uint256)", +"f03d93bc": "Bid(uint256,uint256,uint256)", +"f03dbabd": "openCloseUSDCPosition(uint256,uint256,bool)", "f03dc3d3": "getUsedReveralSupply()", "f03dc4e4": "private_setMinGamePlayAmount(uint256)", "f03dc5ef": "publicKeys(bytes32)", @@ -137758,197 +252001,374 @@ "f03de5fe": "buyHLPMT()", "f03e5de5": "isDisputeActive()", "f03e786a": "approveAndCall(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"f03f0c84": "getTransactionDelays(address,bytes32,bytes)", "f03fbf2f": "CheckChangePlatformFlagAndAddAccountsInfo(address,address,uint256)", "f03fed22": "nwmToken()", "f040d973": "ERC20Token(string,string,uint8,uint256,address,address)", "f0413191": "badge(uint8,string,bytes)", +"f0413a1f": "averageRateInfo()", "f04182d8": "insertProposal(address,uint256,address)", "f0419588": "reply(uint256,uint8)", +"f0422332": "MinGameLengthAltered(uint256)", +"f0423ea0": "beforeEachCreateUpgradeableTokenMock()", "f0425fe1": "swappedTokens()", +"f04290d0": "defaultMediatorFee()", "f04303e3": "setSealableProperty(address,uint256,bytes32,bytes32)", "f0437a36": "getMyCommitmentHash(uint256)", "f0439e0f": "removeExpiredName(string)", +"f043fac1": "TotalGlobalShares()", "f044632f": "loikikdid()", "f0446e02": "testFailMintNoAuth(int256)", "f0456691": "PrevOwner()", "f0459440": "readPermissions(address,uint256)", "f046395a": "subscriptions(address)", "f04646fe": "roll(bytes)", +"f0466c73": "removeDelegation(address)", "f04686aa": "LogOrderCreated(address,address,address)", +"f046af2e": "getDepositAmount(uint256,address,uint256)", "f046cdec": "private_setHouseEdge(uint256)", +"f046ed65": "_artd()", "f0474350": "proposalWeight(uint256)", "f0479392": "poolAdd(uint256)", "f047a528": "isRoundingErrorCeil(uint256,uint256,uint256)", +"f047c10d": "nextTransferAfterRebaseUnfreezeTimestamp()", "f047d077": "cancelBuyNowOffer(uint256)", "f0485328": "setAccessory(uint8,address)", "f04893c2": "modCFOAddress(address)", +"f04893eb": "getEfficiency2(address)", +"f048b801": "AssetProxyTransferErrorSelector()", "f048b97f": "userPurchaseNumMap(address)", +"f0491911": "withdrawAllETHFunds()", "f04961ba": "getEther(uint256)", "f04991f0": "deposit(int256)", "f04aa255": "_transferAvailable(address,address,address)", +"f04af652": "wind_down_epoch(uint256)", +"f04b5fa0": "globalInfo()", +"f04bc943": "getGasCostOfFlipTick(int24)", +"f04be48b": "InvestETH(uint256)", "f04be582": "tokentBalance(address,address)", "f04bf0c5": "updateTrustScoreInBulk(address[],uint256[],uint256[])", +"f04bf8b3": "hatStats(uint256)", +"f04c2229": "BurningAmountPerUser()", "f04cb80c": "setInvestorDataAndIssueNewToken(address,uint256,uint256,uint256)", "f04d4d55": "deactivateLineItem()", "f04da65b": "getShares(address)", "f04e2b45": "_init(address)", "f04e42cd": "allocateCoins(address[],uint256[])", +"f04e4bfc": "conversionDta()", +"f04e6346": "unstickWei(address,uint256)", "f04e7476": "BSBCoin()", "f04e8c6f": "payoutPeriodStart()", +"f04ea296": "getCurrentBlockReward(uint256)", "f04ed952": "typeSize(uint256)", +"f04edf04": "closeETHVault(uint256,uint256)", +"f04fad09": "BCPGross()", +"f04fd98c": "setRateFactor(address,uint256)", +"f05020ea": "isInvestorInWhiteList(address)", "f0502ff7": "tokensRequiredForAllWins()", +"f050344e": "brrrrr(uint256)", +"f0503e80": "seeds(uint256)", +"f0511093": "poolsData(address)", +"f051569e": "protectionsForAddress(address,uint256)", "f05168e6": "getAddTokenResetSignatures()", +"f051bd8c": "get_CT_balance(address)", +"f05208a8": "getUserPerc(address)", +"f0526bad": "whiteListedContracts(uint256)", +"f052a06e": "MntpUnhold(address,uint256)", "f052a76b": "setSpecialOffer(uint256,uint256,uint256,uint256,uint256)", "f052d65a": "getCreature(uint256)", "f0534e0a": "addWalletBonus(address,string)", "f05396ac": "currentOperation()", "f05492e0": "_getMaker(bytes32,uint8,bytes32,bytes32)", +"f054ab46": "getReserveLiquidationThreshold(address)", +"f054b462": "callProxyHandler_getBorrowTotalAmount(address)", "f054d139": "decimalsFactor()", +"f054dd0d": "setP1(uint256)", +"f054e09a": "bfexAmount(address)", +"f054fdcb": "bondTransfer(address,uint256)", "f055d324": "walletBountyProgram()", "f0560ea0": "approvedRatio(uint256,uint256,uint256,uint256)", +"f0567868": "AdminFeePayed(address,uint256)", "f056a5c7": "declareRF(string)", +"f056a9ae": "getCombinedCurrentUnits()", +"f056abe8": "getPee()", "f0575008": "Locked(bytes32,bytes32,bytes32)", "f05764a0": "Currenttask()", +"f057adbb": "buyInETH(uint256)", +"f057cdff": "unsafe_inc(uint256)", +"f0582a4a": "wbaseTokenAddress()", "f05834d6": "setReservedTokensListMultiple(address[],uint256[],uint256[],uint256[])", "f05854ba": "SealToken()", "f0586f0d": "doThrow(bool)", +"f0588e7c": "closeBidTokenAuthority()", "f058e6d1": "TXOsale()", "f0591308": "getMem()", +"f059212a": "sin(address)", "f0594d38": "PrizeAwarded(uint256,address,uint256)", +"f0595dd1": "withdrawTokensTransfer(address,address,uint256)", +"f0598407": "getAllowed(address)", "f059bb6d": "buyTokensPreHook(address,uint256)", +"f059bb83": "voteTracker(address)", "f059cf2b": "spentToday()", "f05a2818": "changeMinimumBetAmount(uint256)", +"f05a4a7b": "stakingParam(address)", "f05a64bc": "potTime()", "f05a781d": "acceptNewOwner()", "f05aa334": "cofounderA()", +"f05ad539": "BustTokens(address,uint256)", "f05ad9f3": "communityTotal()", "f05b854f": "LogSquareWinsUpdated(uint256,uint256,uint256)", +"f05bcd4e": "getBatchIdByIndexDP(uint256)", +"f05c5fed": "updateFeePercent(uint256)", "f05ccd75": "onDecreaseApproval(address,address,uint256)", "f05d16f7": "setTxFee(uint256)", "f05d5547": "named(string)", "f05d68c1": "_newIncomingTransaction(address,address,uint256,string)", +"f05d73a4": "_internalSettle(address,bytes32)", "f05d85d6": "atmToken()", "f05dd6d5": "LogWinner(address,uint256)", "f05dda57": "XeinToken()", +"f05ddf05": "setPercentage(uint256,uint256,uint256,uint256,uint256,uint256)", +"f05de4c8": "getChallengeAmountMultiplier()", +"f05def81": "changeGasTokenAmount(uint256,bool)", +"f05e42ca": "multiDaiKovan()", "f05f3e77": "developer_voting_info(string)", "f05f45b1": "authoriseEntrants(address[])", +"f05f88e0": "depositAndBond(uint256)", "f05fae68": "getStoreBalance()", +"f05fb5b3": "Address_Submitted(address)", +"f05fe81a": "repayAndDeposit()", +"f0603a72": "MINIMAL_CCX()", "f06067ac": "transferByLock(address,uint256,uint256,uint256)", "f060ccb5": "escFundAddress()", "f060f617": "setCursedContract(address)", "f0610b5e": "unlockAllAccount()", "f0611c44": "lockAfterMinting(uint256,uint256)", +"f0617e5b": "issueMaxPynths(address)", "f06186c7": "testReality()", +"f0620fae": "updateBeneficiaryNickname(address,bytes32)", "f0624097": "checkBlockEmpty(uint256,uint256)", "f062e26b": "check_darkdao()", +"f06308c0": "remitPerBlock()", +"f0639267": "setResumePrePaidPeriods(uint256)", "f0640355": "AddTeamAccount(address,address)", +"f0641645": "approve_364(address,uint256)", +"f06427e5": "contributeLiquidity(bool,address,uint256)", +"f06439fb": "VestingMinutes(uint256)", "f0646a3c": "DART()", "f064b971": "tryToCloseProject()", +"f064e8fa": "getMetadata(address,string)", "f065c36e": "MonopolyBank(uint256,string,uint8,string,address)", +"f06604a4": "contractSmart()", "f0664a4f": "ownerOne()", "f0666fba": "burnedBitcoin(address,uint256)", "f066719f": "arbTrade(address[],uint256[],uint8[],bytes32[])", "f066844e": "_emitAreaEvaluated(address,address,uint8,uint256)", +"f0669400": "tStake()", +"f066aa0a": "dexContractAddress()", "f066cb83": "treeBuild(address,address)", +"f0674f61": "setTrait(uint256,string,uint8,uint8,bool)", +"f06781c7": "isSplitPool(address)", +"f0678c08": "coinlist(int256)", "f0685bf0": "TestFund()", "f068a3a6": "setNextSmartContract(address)", "f068dc81": "authorizeRequestorAddress(address)", +"f06918cf": "priceToClose(address,uint256,uint256,uint256,uint256)", "f069629c": "generalSaleStartDate()", +"f0697887": "publicBuyWithLimit(address,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint256)", +"f069cf2b": "isDecisionMaker(address)", +"f069dd90": "ArtWorkChangeRequestDeclined(address,uint256,uint256,string,uint256)", +"f069e532": "percentFrozenWhenAwarded()", +"f06a03d3": "withdrawStuff()", "f06a1e13": "QUOTE_ASSET()", +"f06a29c9": "Start(uint256)", "f06b0901": "interRefreshLock()", +"f06b34ef": "constantCurveContractV3()", "f06b53e9": "saveDividends()", +"f06b78a8": "g(bytes7)", "f06b9ca6": "avgTokenBetValue()", +"f06b9fbe": "panel_4(address)", "f06bbf75": "EXTERNAL_QUERY_GAS_LIMIT()", "f06c5610": "constructionTime()", +"f06ccc5a": "tempSum()", +"f06d2ea6": "PriceAddressUpdated(address)", "f06d335e": "_recoverAccount(address,address)", +"f06d3ce2": "withdrowUserETHorDaiLixi(address[])", "f06d56ae": "ICO3Period()", +"f06dec17": "OnIsChargingManagementFeeUpdated(bool,bool)", "f06ea69c": "toUint16(bytes,bytes,uint256)", "f06ebc38": "setKv(uint256,uint256)", +"f06edba2": "executeTransaction(address,uint256,string,bytes,uint256,address)", +"f06ee952": "ProvidingAccess(address,uint8)", "f06ef632": "fundOrderInternal(address,address,uint256)", +"f06f6bbd": "BurnAssetToTarget()", +"f06f7739": "closeMarginPosition(address,address,uint256)", +"f06fa63f": "getOwnerTicket()", "f06fc103": "sendTokens(address,uint256,uint256)", +"f06fc961": "getTicketPrice(uint256)", +"f06fe216": "lTokenPriceById(uint256)", +"f06fed2c": "viewSaleFADR()", "f0704f02": "week3Price()", "f0705249": "updateSspAbi(string)", "f07065b3": "writeToDiary(uint256,bool)", +"f070a923": "oneOrder(uint16)", +"f070e00d": "xweth()", +"f0711289": "tokensForSell()", "f0715594": "_addAdminAccount(uint256,address)", "f071b5fb": "LogEscrowReq(uint256)", +"f071bf4f": "creatorPercentage()", "f071cacb": "_setClientSupply(address,uint256,uint256)", +"f071cd6b": "setSwissFeeWallet(address)", "f071db5a": "feesCollected()", "f071ecc5": "AFTER_MAX_GOAL_DURATION()", +"f0722322": "getReservePrice()", "f07227dc": "release(address[],address,uint256[])", "f07255e3": "nextBoundaryAmount()", +"f072a970": "stakePow()", "f073b277": "euroRaisedRc()", +"f07422fd": "openToDeposit()", +"f07484c8": "updateNextStakingContract(address)", "f07494a0": "bla()", +"f0751052": "WhitelistRemove(address,address)", "f0757a91": "TOKEN_PRICE_THOUSANDTH()", +"f075be1f": "lockCN(uint256,uint256,uint256,address)", "f075f253": "QRRial()", "f07629f8": "eventsHistory()", +"f07637fe": "jTesta()", "f076ba9c": "ethercrowdfund()", "f077ae0f": "removeSample(address,uint256)", +"f077dcf1": "endDates(uint256)", "f07819a3": "setMesa(uint256)", "f0782640": "getCompanyCount()", +"f0786096": "MAX_CANDIDATES()", "f0793782": "modifyHorseyDna(uint256,bytes32)", "f0794ca6": "getRocOwnerItem(uint256)", "f07a019d": "ownerRecoverTokens(address,address)", +"f07a4408": "addressFastCard()", +"f07ab7be": "draw(address,uint256,uint256)", +"f07af5f7": "timeLastCollected()", "f07b454c": "divMultiplier()", "f07b4608": "destruirContrato()", +"f07b4cb1": "Auto()", "f07b9a04": "certAuthIssuesCerticate(address,address,uint256,string,string,string,string,uint256)", "f07b9f20": "MapleCoin()", +"f07bec40": "isClaimingInterests(address)", "f07c0b21": "AgriChainLabel()", "f07c44c2": "appropriate(uint256)", +"f07c840f": "usdt_buy(uint256)", +"f07ce3de": "approve_41(address,uint256)", "f07d0c49": "Logs(address,uint256,string)", +"f07e96b3": "lastActivity(address)", "f07edbf4": "maximumAdminBalance()", +"f07fd1d6": "setParameters(uint16,uint16,uint64,uint64,uint8,uint8,uint8)", "f0803358": "TSpaceCoin()", +"f080b847": "groupAssets(uint256[])", "f080f860": "MAYA()", +"f0815b8c": "getCdpInfo(address,address,bytes32,address,address,bool)", "f081d9bd": "HaraKiri()", "f081fc2e": "MAX_TOTAL_AMOUNT_GET_ETH()", +"f08205d7": "swapAndLock()", "f082650b": "setStarData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", "f0829c37": "VeraCoin()", "f083156c": "LYBToken(string,uint8,string)", +"f08391d8": "setAccessController(address)", "f083e8f2": "addressFundFounder()", "f0843ba9": "quickConvert(address[],uint256,uint256)", +"f084d5ef": "EthCapMax()", "f085b2a1": "clearTokenLock(address)", +"f085c7b4": "accReleasedRwds(uint256)", "f0863c08": "maxPowerUserAddress()", +"f0864e37": "updateProvider(bytes32,address)", +"f0864f75": "StorageException(bytes32,string)", +"f086597d": "subscribe(uint256,uint128,uint128,uint128,uint128,bool,bool,address)", "f0869641": "normal_trade_date()", "f086965e": "changeOwner(bytes32)", +"f0869780": "setNewAddr(uint256,address)", "f08697a3": "QuyDau()", +"f086b551": "add(uint256,uint256,address,bool,bool,uint256,bool,bool,uint256,bool,uint256)", +"f086f0d0": "test_indices(uint256)", "f0876747": "KocoCoin()", "f087d2ec": "STREAMING()", +"f0882fe4": "transferForPresale(address,uint256)", +"f0885f68": "_getMarketIdFromTokenAddress(address,address)", +"f0886ef7": "ico_balances(address)", "f088d547": "buy(address)", "f0893de2": "maxTradingStartTime()", "f089b7dd": "hashtag()", "f089d566": "AdmineTeamTokens()", "f089e2ed": "getProject(string,uint256)", "f089e972": "currentNetfRound()", +"f08a01f8": "bosomsOf(address)", +"f08a0323": "setFallbackHandler(address)", "f08a5faa": "getSmartHash(string)", "f08b82e6": "getTotalTokens()", +"f08c714f": "editPassword(address,bytes32)", "f08c9e2e": "deathData_f2()", +"f08cc9f3": "setEntry(address,address)", "f08ccd02": "allocatePresaleTokens(address,uint256,uint64,uint64,bool,bool)", +"f08d1c34": "preSaleAllowed(address)", "f08d5a25": "initialLockedValues(address,address,address,address,address,address,address,address)", +"f08d647e": "__Context_init()", +"f08ddc03": "ethTellerBalance(address)", +"f08e1e27": "_checkPotentialRecoveryMode(uint256,uint256,uint256)", "f08e362f": "transferFunds(uint256,address)", +"f08e423a": "swapTokensForEth(uint256,uint256,address[])", +"f08e697b": "construct(uint256,address)", +"f08e703b": "fortnight()", "f08ea4cc": "_startContract(uint256)", "f08fa322": "investors_deliveryDate(address)", +"f08fb451": "x_adminSetBaseTokenURI(string)", +"f090359a": "sub_(uint256,uint256)", +"f0907843": "oSlot()", +"f0907b48": "redeemRebalancingSetIntoEther(address,uint256,bytes,bytes,bool)", +"f090ac26": "_bptStakingPools(uint256)", "f090cee8": "addInvestor()", +"f090e004": "element(uint256)", +"f091d63a": "cropsPoolAddress()", +"f091e30e": "Unblacklisted(bytes32)", "f091e5a2": "CoinMeet()", "f0920a41": "wminus(uint256,uint256)", "f0921b80": "habichnet1()", +"f092894f": "LogEndTimeSet(uint256,address)", "f09304b5": "setIntervalSchedulePresale(uint256,uint256,uint256)", "f0932bd7": "setNextRoundLength(uint256)", "f0933ab9": "isInActiveStage()", +"f093cf80": "hospitals(address)", "f093fd0a": "_bidEth(uint256,uint256)", +"f0940b22": "expiry(uint256)", "f0942d35": "gameStatus(bytes32)", "f0947680": "lockstatus()", +"f094dd6e": "AAVE_V1_LENDING_POOL_ADDRESSES()", +"f094e7f1": "SetUniswap(address)", +"f095105a": "add(uint256,address,uint8,bool)", +"f095354e": "periodsReleased()", +"f095e309": "_feesAndRewardsFromPeriod(uint256,uint256,uint256)", "f095ed3c": "cancelAndEndEvent(bytes32)", "f09649ed": "getStateLength()", "f0965328": "transferFor(address,uint256)", +"f0968e18": "userFastMint(bytes32,uint256,uint256,bytes)", "f0970566": "createDklAuction(uint256,address,uint256)", +"f0971f11": "getDSVDVtheoCuLy(uint256)", +"f0978ac5": "setPriceLimit(uint256)", +"f09790dd": "cases(uint256)", "f097e106": "maxBuyingDate()", +"f0987c55": "getPackProbabilities(uint256)", +"f098b68f": "chkStaff(address)", +"f098d9b0": "_getReward()", "f098efb3": "ICOActive()", "f098f8e4": "finalWindowTime()", "f09915d4": "assign(uint256,uint256)", +"f099304c": "setSgTokenLimit(uint256)", "f0995961": "notarize(bytes32,uint256)", +"f099673f": "gg64(uint64)", +"f09996a6": "getUserAccumulatedWithdrawIncome(address)", "f099ce67": "getGladiatorDistributedRandom(uint256)", "f099fbbd": "callBurnTokens(uint256)", +"f09a1d00": "mUSD()", "f09a1f87": "hashOrderTyped(uint8,address,uint256,uint256,uint256,uint256)", +"f09a3fc3": "outputRaw(address,uint256)", "f09a4016": "init(address,address)", +"f09a4d73": "createNewParkspot(uint256,string)", "f09a58f8": "internalSellTokenFromAdmin(address,uint256,bool)", "f09a9b3c": "addGoal()", "f09b538f": "function_3(string)", @@ -137958,42 +252378,81 @@ "f09c3152": "NerdShitCoin()", "f09c5829": "swaps(uint256)", "f09cac98": "receiveApproval(address,uint8)", +"f09d0877": "sendFundsToInternalAccount(address,address,address,uint256)", +"f09d14d7": "getFundComposition()", +"f09d1d61": "set3(uint256,int256)", "f09d3103": "royaltyTracking(address)", +"f09d5b5f": "openedBoxId(uint256)", +"f09dafb2": "tokensVestedPerDay(uint256)", "f09dd7c6": "withdrawAffiliateCommision()", "f09dd844": "revealPurchaseOrder(bytes32,uint256,uint256,bytes32,address)", +"f09ded77": "initializeNew()", "f09e34f0": "addReleaseAgent(address)", "f09e65f1": "setAtomFath(uint256,uint64)", +"f09e82e2": "isEligible(uint256,uint256)", "f09ea2a6": "offer(uint256,address,uint256,address)", +"f09eaca3": "poolUsed(uint256)", "f09ecf10": "Contract_Owner()", +"f09ed796": "investorDividendSplit()", +"f0a0190f": "userMatrixDetails(uint256,uint256)", "f0a03aa3": "ITE()", "f0a0a299": "VIPFee()", +"f0a10e41": "checkAddressEOS(address)", +"f0a132c7": "eWhitelisted(address,uint256)", "f0a15f10": "TIER2_RATE()", "f0a233d4": "SharesChainToken(address)", "f0a279ae": "phase1EndingAt()", +"f0a28929": "updatePresale()", "f0a2bea2": "testCheckRokBalance()", "f0a2c430": "inGameRewardAddress()", "f0a32e7b": "maxRefundStageDuration()", "f0a3563c": "userClaims(address)", +"f0a3843d": "reinvest(uint256,uint8)", +"f0a38591": "getKeysFromETHs(uint256,uint256[])", "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)", +"f0a4b9de": "unFarm(uint256)", +"f0a4c53b": "arrAddressForInvest(uint256)", +"f0a56fa6": "nftIdToTypeId(uint256)", +"f0a5702f": "getSettlemetPrice(address,uint256)", +"f0a581fa": "isDexAccount(address)", +"f0a58213": "NewDuel(uint256,uint256)", +"f0a59894": "AddAddressforCompensation(address,uint256)", +"f0a59a5c": "tokens(address[],address[])", +"f0a5e6c6": "getTraitInfoById(uint256)", +"f0a60d04": "yTokens(address)", +"f0a61a6b": "disqualified(address)", +"f0a6780d": "subUserIntraBorrowAmount(address,uint256)", +"f0a6e007": "_authorizedMinters(address)", "f0a71ef6": "getPrevBlock(bytes)", "f0a72a84": "accountMaster()", "f0a78538": "scheduleTransaction(uint256,bytes)", "f0a7975f": "setDayQualitys(address)", +"f0a88101": "isInterWhitelistTransfer(address,address)", +"f0a8db99": "whitelistaddress(address)", +"f0a97c92": "initRewardContract(address)", +"f0a9ad3c": "_address0()", +"f0aa20c2": "NewPendingAnchor(address,address,uint256,uint256)", +"f0aab14b": "doSomeThing()", "f0aadcda": "AIMcoin()", +"f0aaebe8": "registration(address,uint256)", "f0aaf4ec": "getOptionsForModel(uint64)", +"f0abaabc": "burnTokenManually(uint256)", "f0abb382": "isHotWallet(address,address)", +"f0abe3b3": "setDisabledToken(address,bool)", "f0acc83a": "QCSCToken()", "f0acd7d5": "spin()", +"f0ace3ff": "getChainlinkOracle()", "f0acfea2": "piranhasTotalSupply()", "f0ad243e": "getCoefficient(bytes2,uint256)", "f0adcedb": "executeWinningProposal()", "f0adda7d": "setNextVersionAddress(address)", "f0ae03be": "robotCoin()", +"f0ae74e3": "addArtTo(address,string,uint256)", "f0af0844": "addTimeUnequalledDefence(address,uint256)", "f0af50c9": "stoppedSale()", "f0af7e65": "cancelAgon(uint64)", @@ -138003,49 +252462,96 @@ "f0b05bfd": "getGamesOfPlayer(address)", "f0b070ca": "createAppeal(uint256)", "f0b087c5": "getConfigUint(bytes)", +"f0b0a76b": "divCardIndexToOwner(uint256)", +"f0b0c59a": "setDAA(address)", "f0b0cfa3": "readSoftwareInformation(address,address,uint256)", +"f0b1a67b": "betPlaced(bytes32,uint256)", +"f0b1aafa": "removeAirDropAddresses(address[])", "f0b1adbe": "registerEarnings(uint256)", "f0b1b42e": "createContractPow(string,uint256,uint256,uint256)", +"f0b230c8": "mString()", "f0b24181": "totalSupplySale2()", "f0b25186": "shopKnife()", +"f0b25bde": "lateFeeApr()", +"f0b2d43b": "OnwersEmail(uint256)", "f0b30f69": "saveLockedERC20Tokens(address,address,uint256)", +"f0b3189f": "compoundRedeemByPercent(uint256,address)", "f0b32c69": "test_threeValidEqBytes32()", "f0b37c04": "unauthorize(address)", +"f0b3a077": "creationBase()", "f0b3a7ba": "hardCapToken()", "f0b3adee": "updateRewardRate(address,uint256)", +"f0b3dcd1": "frozenAddressesOf(address)", +"f0b456e9": "swapAtoB(uint256,uint256)", "f0b5165f": "delayOfPreICO()", "f0b53256": "SoftCap()", "f0b534cb": "getApprovedVotes()", +"f0b601d7": "ttt(uint256)", +"f0b614ae": "setTokenCreator(uint256,address)", "f0b620a2": "isPaymentCompleted(address)", "f0b6e707": "ORDER_CANCEL(address,address,uint256)", +"f0b757e0": "HybridizationAccept(uint256,uint256,uint256,uint256)", +"f0b76892": "lock(address,uint256,uint256,uint8,bytes32,bytes32)", "f0b7e532": "withdrawTaker(address,uint256)", "f0b80000": "PRESALE_START_DATE()", "f0b85b19": "setDefaultLockInDuration(uint256)", +"f0b882ba": "mergeAccount(address,uint256[])", +"f0b8d0c2": "setCoreAddr(address,uint8)", "f0b9e5ba": "onERC721Received(address,uint256,bytes)", "f0ba23e6": "minterChangeable()", +"f0ba3485": "innerProduct(uint256[],uint256[])", +"f0ba6040": "renounceLockManager()", +"f0ba8440": "data(uint256)", "f0ba958c": "Error(uint8)", "f0ba96ff": "performPayouts()", +"f0baaf22": "approve_491(address,uint256)", +"f0bad261": "getProfitAmount(uint256)", "f0bae2c5": "doIssueDividend()", "f0bae787": "_receiveBuyRank(address,uint256)", +"f0bb2af7": "configAdapter(address,address)", +"f0bb7540": "attackCooldown(address)", "f0bbab3b": "HSHToken()", "f0bbe08b": "phasePublicSale2_To()", +"f0bbe1ba": "changeOfferSpan(uint256)", "f0bbe877": "Deployed(address,uint256,string)", +"f0bc00d8": "mintMultiple(address,uint40,bytes32,uint256[],bytes,address,bytes)", "f0bc153a": "get_contract_balance()", "f0bc6cfb": "isReferred(address)", +"f0bc7081": "method7123949()", "f0bc9cc5": "receivedDETreturn(address,uint256)", "f0bcaf75": "UsingDB(address)", +"f0bcbca7": "removeadmin(address)", +"f0bcd414": "Mint(bytes32,address,uint256)", +"f0bcd7e6": "JackpotChange(uint256,uint256)", +"f0bd0222": "getUserHoldedCoverByIndex(address,uint256)", +"f0bd2b9e": "ready(uint256)", +"f0bd6293": "setDeposited(uint256)", +"f0bd87cc": "DISTRIBUTOR_ROLE()", "f0bd9ab5": "pushToken(address,bool)", +"f0bdb921": "_limitICO()", +"f0be2bfa": "buy(uint256,address,uint256,uint256,address)", "f0bea8c7": "downVoteHouse(address)", +"f0bedbe2": "clearDelegate(bytes32)", +"f0bf080a": "swapMyCashToDai(uint256)", "f0bf1aea": "Paint(uint256,bytes3)", "f0bf4df4": "setMinEnterFee(uint256)", "f0bf611b": "transferDao(address)", "f0bfd737": "Testtoken(uint256,string,string)", "f0c001df": "proofType_Android()", +"f0c01b42": "addImplementation(address,bytes4[])", "f0c0546c": "closedRound()", "f0c06aa5": "distrust(address)", +"f0c07d49": "jumpstart()", "f0c1d1c7": "setContributionPool(address)", +"f0c25283": "ciphered_offer_a()", "f0c295fd": "seeZombieColor(uint256)", +"f0c2976c": "mintTo(uint256,address,uint256)", +"f0c29935": "setMaximumDepositsTotal(uint256)", +"f0c2e7bc": "getGasCostOfGetPopulatedTicksInWord(address,int16)", +"f0c37a59": "userCounter()", "f0c388c7": "convertMainchain(string,string)", +"f0c3c06b": "provideCollateral(uint256)", +"f0c3ffc3": "start1StageSale()", "f0c413dd": "balanceOfContract(address,address,address)", "f0c41bb2": "getChampsByOwner(address)", "f0c45472": "modifiyEndFundingTime(uint256)", @@ -138053,66 +252559,113 @@ "f0c4c339": "getFreezeSinceDetails()", "f0c4fcc5": "mustToSellCourses()", "f0c4fd0c": "isAttributesValid(uint256)", +"f0c515f1": "f(int16,uint16)", +"f0c51bbb": "pegs()", "f0c5a46b": "periodPreITO_period()", "f0c5a77b": "updateBurnableStatus(bool)", "f0c69e8d": "calculateWithdrawable()", "f0c71318": "zenOSCrowdsale()", +"f0c72cf0": "transientAssetOwner(uint256)", "f0c87852": "moveData(uint128[],address[],bool[],uint256[])", +"f0c8b7f4": "accountNum(address)", +"f0c8e969": "recoverAddresses(bytes32,bytes)", "f0c95bc1": "setAdminVariables(uint256,uint256,uint256,uint256,uint256)", "f0c99750": "endICOStage4()", +"f0c9cb70": "invitersID(address)", +"f0c9dc60": "METADATA_PROVENANCE_HASH()", +"f0c9ed0b": "userStakeRenew(address,address)", +"f0ca0b42": "validationBurn(address,uint256)", +"f0ca4adb": "addOracle(address,address)", "f0ca618e": "Indemnisation_3()", +"f0caa106": "triggerChangeAdminKey(address,address)", "f0caea2b": "SmartRoulette()", "f0cafe0e": "tokenGNO()", "f0cb556c": "updateLatestRevision(bytes32,bytes)", "f0cb740a": "isJobStart(bytes)", "f0cb8e77": "savedAddresses(address)", "f0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", +"f0ccac03": "getLimitedValue(uint256)", "f0ccc21a": "chunk5IsAdded()", +"f0cccf43": "maxSecondaryReceivers()", "f0cd58b7": "AuthAddr(address)", "f0cd5c17": "cancelTx()", +"f0cd7601": "ProxyChanged(address)", "f0cd8057": "OACC()", "f0ce6231": "XIAOZHI4()", +"f0ce8c85": "auctionTimeToPivot()", "f0cecafc": "privateSale2Hardcap()", "f0cf198a": "RemoveSubscriber(address)", +"f0cf2db8": "addAddressAndSend(address,uint256)", +"f0cf91e7": "canUpdateStrategy(address)", "f0cfcaa8": "_getNewEstateId()", "f0d02ce9": "AVG_BLOCKS_02W()", "f0d07014": "allItemsForSale()", "f0d0dd3f": "subDomainOwner(string,string)", +"f0d0f9aa": "updatePoolRewardsData(address,address,uint256,uint256,uint256)", +"f0d0fdbb": "AddPlan(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,string)", +"f0d18ff9": "minCrowdFundingAmount()", "f0d1c8ce": "hasTrade()", "f0d1d021": "set_stoptransfer(bool)", "f0d1eaaf": "getChannelById(bytes32)", "f0d22ade": "isRepeated(int256)", +"f0d2a38c": "instantiate(uint256,uint256,uint256,uint256,address)", +"f0d2a53b": "payJackpotLog(address,uint256,uint256,uint256,uint256)", +"f0d2d5a8": "addCollateral(address)", "f0d30786": "getPositionCallTimeLimit(bytes32)", "f0d3a9df": "getBuyersCount()", +"f0d405e5": "TUB_ADDRESS()", "f0d474f9": "underdogCount()", "f0d4753e": "TOKEN_OFFERING_ALLOWANCE()", "f0d4c92d": "setTimeBonus(uint256)", "f0d4d1a6": "lotteryParticipants()", +"f0d4d592": "init(address,address,address,address,address,address,address)", "f0d504eb": "lookupKitty(uint256)", "f0d5511c": "isArrAccountIsFrozenByDate(address)", +"f0d5ea1e": "getUserAmountOfPartners(address)", "f0d655f8": "_calculateTokenAmountAndRemainderBudget(uint256)", +"f0d6a6af": "getPointsOfAddress(address)", "f0d6cc70": "endFullBonusTime()", +"f0d6ef9f": "bidNFTs(uint256,address)", "f0d6ff48": "MeetOneTokenBase()", +"f0d75ac0": "setToken2(address)", "f0d7c9ff": "setPreviousSurplus(address[],uint256[])", "f0d7f3eb": "auctionPause()", "f0d85c89": "setRecovery(address)", +"f0d87d69": "getClosing()", "f0d89e67": "LogRedeemTicket(uint256,address,string)", "f0d8d4af": "sendTest()", "f0d8e968": "getLastLease(uint8)", "f0d90937": "usdAmount()", +"f0d93eae": "ALLownersANDprices(uint256)", "f0d97469": "setTokenExchange(address)", "f0d9bb20": "yesToken()", +"f0da6c8c": "claim(uint8,address)", "f0da84f8": "getTransferable(bytes32)", "f0daa286": "doubleXY(uint256,uint256)", +"f0daac22": "UnFreezed()", "f0daba01": "merchantIdHash()", +"f0dbd7fa": "minterAccesses(address)", +"f0dc2c06": "getPriceToken(address,address)", "f0dc4171": "collectTokens(address[],uint256[])", +"f0dc6d14": "getBrand(uint256)", +"f0dcaf76": "decimal_sUSD()", "f0dce839": "IBU()", +"f0dd2b94": "giveRatingAndComputeMatrix(uint256,int256)", +"f0dd71c7": "reserveAmount(uint256)", "f0dd7a5d": "borrowBook(uint256,address,address)", "f0dda65c": "mintTokens(address,uint256)", "f0ddc0c6": "InjurymapCoin()", +"f0de67ac": "format()", +"f0de9272": "teamrewardrate()", "f0df232f": "buyMessage()", +"f0df4806": "setPoolParameters(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f0df5b79": "solarite_pylon_uni_lp()", "f0df6929": "RequireHuman()", +"f0df8100": "updatePrimaryWallet(address)", +"f0dfeab7": "depositLockTime()", "f0e02bd6": "WEI_MAXIMUM_EARLYPURCHASE()", +"f0e0ba2f": "latestUSDPrice()", +"f0e0d14e": "mintUnlockedTranche(address,uint256)", "f0e10c0d": "play(address,uint256)", "f0e1354c": "removeFromEggPhase(uint256)", "f0e1691a": "addEvent(string,uint256)", @@ -138120,178 +252673,355 @@ "f0e1f84d": "setVotingProxy(uint32,int256,address)", "f0e231b5": "Datenow()", "f0e26f80": "getBattleDetails(uint256)", +"f0e2cb83": "startVestingIdx()", +"f0e36115": "createCertificate(address,string,string)", +"f0e377a0": "NFTMouldFileData(uint256)", +"f0e3a9df": "setCVaultBSC(address)", +"f0e3c2d7": "canclePrescription(uint256,uint256,uint256,uint256,uint256)", "f0e3d1ba": "setEnd(bool)", "f0e3fff8": "totalWon(address)", "f0e40662": "getTotalAmount(uint256)", +"f0e42511": "customLockByMonth(uint256)", "f0e42a1f": "getDividendTransactionLeft()", +"f0e4a348": "ACTION_ADD_RECIPIENT()", +"f0e4aa2d": "alpaPerBlock()", "f0e4c4fe": "setGatewayI(address)", +"f0e4efbf": "decreaseAuthQuota(address,address,uint256)", +"f0e520ac": "OptIn(address,uint256)", "f0e53489": "integrity()", +"f0e53521": "setNameSwap(uint256,string)", "f0e5eeac": "ico2total()", "f0e61771": "tokenFreezing(address,bool)", +"f0e6a80c": "getBNBStakingCount()", +"f0e6b80e": "EvNewDeposit(uint256,uint256,uint256,address,uint256,uint256,uint256)", "f0e6c2dc": "CASToken()", +"f0e6e6d5": "getCollateralLevel(address)", +"f0e740c3": "synthToInverseSynth(bytes32)", "f0e769dc": "resumeSwap()", +"f0e77e8a": "LOG_Commision(uint256,uint256,uint256,uint256,uint256)", +"f0e7b1b6": "AXIA()", "f0e7cf13": "adminClaimAirdropMultiple(address[])", +"f0e7d329": "stabilizingFee()", +"f0e7e29b": "rollupPubInputLength()", +"f0e83a45": "updatetime(uint256)", "f0e86f93": "ICOBlacklisted(address)", +"f0e88dcb": "addLiquidityToUniswapTCORExWETHPair()", +"f0e8a600": "initiateContract(address,uint256,uint256,uint256)", +"f0e95711": "GET_SAFES_ADDR()", "f0e959f9": "TokenSales(address)", +"f0e97c16": "modifyParameters(address,address,address,bytes32,address)", "f0ea0294": "setStage2Start(uint256)", "f0ea433a": "sendQualifiedPartnerCommissionFee(address,uint256)", "f0ea4bfc": "raised()", +"f0ea6f5f": "ownerPointCoefficients(address)", +"f0eb01e0": "getTop3Candidate()", "f0eb29fb": "_communitySupply()", +"f0eb3af7": "timeSpan()", +"f0eb5e54": "identity(address)", "f0eb737a": "getCurrentDiscount()", "f0ebce5a": "getEnum()", "f0ec03ae": "tokenWeiSold()", +"f0ec6702": "Tex()", "f0ec747e": "VETRA()", +"f0ec779b": "OnlyCallableBySelfError(address)", +"f0ec9430": "directors(address)", "f0ec94cf": "edgePerPosition()", "f0ecadaf": "comprueba(address,bytes32)", "f0ecadcc": "voteSvp03(bool)", "f0ed029e": "DebugUint(uint256)", "f0ed14e0": "right95(uint256)", "f0edb7cf": "admin_set_Apply_Store_Id_Fee(address)", +"f0edc845": "createPromoAthlete(address,string,uint256)", +"f0edefe6": "_origin()", +"f0ee0806": "useLibrary(uint256)", +"f0ee1cc4": "teams(address,uint256)", "f0ee7df2": "setMaxWin(uint256)", +"f0ee80b4": "poolgenEnd()", +"f0eeed81": "kyberProxy()", +"f0ef07a9": "setWorkers(address[],address[])", "f0ef7621": "FishOne()", +"f0ef821f": "takeBuyFee()", +"f0efb21f": "icoSecondWeekRate()", +"f0efb4c7": "mintMultiple(address[],uint256[],uint256)", +"f0efe0ea": "doBalancerV1Buy(address,uint256)", +"f0f03792": "actualPosition()", +"f0f0e235": "NewLiability(address)", +"f0f0eda1": "allRedemptions(uint256)", "f0f0fe10": "ownerSetRecommendProportion(uint256)", +"f0f165af": "setNumTokensSellToAddToLiquidity(uint256)", +"f0f1b94f": "batchRetireAccept(uint256[],uint256[])", "f0f21344": "right27(uint256)", "f0f2805f": "isOnSale(uint256)", +"f0f32497": "gameFinished()", "f0f3f2c8": "getProject(uint256)", "f0f44260": "setTreasury(address)", "f0f46302": "shopHelmet()", +"f0f47ca8": "setAddr(int256)", +"f0f4cb26": "getMerkleTreeRootWithoutNodes(uint256)", +"f0f51120": "readStakeAndSssss(address,address,uint256,uint256,address)", "f0f53ee4": "setBool(bytes32,bytes32,bool)", +"f0f57a19": "SetDebtSystemRole(address[],bool[])", "f0f5af8b": "calculateObtainedAMIS(uint256)", +"f0f6fad6": "Result(address,uint256,int256)", +"f0f740c6": "setMarketStatus(uint8)", +"f0f7587a": "setClaimTokensCA(uint256,int8,uint256)", +"f0f7949c": "redeemFeeMax()", "f0f7bd31": "LibertyToken()", +"f0f80ad0": "API_AddDepositLimit(address,uint256,uint256)", "f0f87e98": "TokenWithoutStart(string,string,uint8)", "f0f8aff9": "getPriceForAssetAmountMulCollatRatio(address,uint256)", "f0f8b7a5": "betX5()", +"f0f923c0": "accumulateReward(address,uint256)", "f0f967e8": "canCall(address,address,bytes)", "f0f9a729": "dividendsOf()", +"f0f9ac36": "deployOnlyPool(uint8,bytes,address)", +"f0f9b1d1": "inbox(string)", +"f0f9f254": "daiFeedAddress()", "f0fa55a9": "setSlippage(uint256)", +"f0fab6de": "setApproval_Mint_True(address)", +"f0fadcd9": "Gas(uint256)", +"f0fb12df": "rSFI()", "f0fb4372": "RatingStore(address,address)", +"f0fb472d": "_trLaunchVestingSecs()", "f0fb8efd": "allowDefaultToken(address,bool)", +"f0fb94f2": "approveCryptoAccount(uint256,bytes32,address)", +"f0fbaea6": "Image_New()", "f0fbc8ac": "indInflationDeposit()", "f0fbe2e4": "addressAirdrop()", "f0fbfd3a": "targetDiscountValue5()", "f0fc1438": "tradeComplete(address,uint256,address,uint256,address,address,uint256,uint256)", +"f0fc4ec1": "redeemRewards()", "f0fc6bca": "claimDividend()", +"f0fc76fe": "box(address)", +"f0fc9224": "getGasCostOfNextInitializedTickWithinOneWord(int24,bool)", +"f0fcab95": "pendingAnal(uint256,address)", "f0fcc6bb": "pay(address,uint256,address)", +"f0fcce63": "getCurrentTax()", +"f0fd616a": "notionalYieldApril()", "f0fdb32f": "canStartWork()", +"f0fdba1d": "sendLeaderBoard(uint256)", "f0fdc689": "setInv2(address)", "f0fdf834": "a(uint256)", +"f0fe2472": "redistributor()", "f0fe3d68": "metaBurnCarbonDollar(address,uint256,bytes,uint256,uint256)", +"f0fe603f": "updateBonusEndBlock(uint256)", +"f0fe7385": "verifySign(bytes32,address,bytes32,bytes32,uint8)", "f0fee1f7": "LogMigrate(address,address,uint256)", "f0feef96": "closeChannel(bytes,uint256,uint8,bytes32,bytes32)", "f0ff4840": "LuckchemyCrowdsale(address)", "f0ff6ac4": "withdrawal(uint256,address,uint128)", +"f0ffc2d6": "saleTokenIs0()", +"f0ffca35": "AddAccessory(uint256,uint256)", +"f0ffdefa": "setMetadata(address,string,uint256,string)", "f1001f8c": "getTotalLockedBalance(address)", +"f1004931": "calcArbToGro(uint256)", +"f100678f": "_Id()", +"f1009dfc": "totalCreditsSnapShot(address[],uint256)", "f10143e1": "TokenToppedUp(address,uint256,uint256)", "f101618a": "getMiniPoolEdit_8()", "f1018c6f": "boughtNum()", +"f1018dc1": "getExitFeeRatio()", "f101b269": "appstore_share()", +"f101e481": "nextTokenID()", +"f101e82b": "executeStrategy(uint256,uint256)", +"f102a529": "notClaimedList(uint256)", "f103b433": "updateMaxSupply(uint256)", +"f103c4c4": "getSeedPacketId(uint256)", +"f10481d9": "middlemanConfirmedWithdraw()", "f104c836": "setAssetTransferGas(address,uint256)", "f1052af5": "isRegisteredContract(address)", +"f105a8dc": "FiveYearsBondBuiltCount()", "f105c981": "get_contrib_arbits_min()", "f105e23b": "PVE_COMPENSATION()", "f1068454": "pid()", +"f106b1a7": "severalDaysAvailability(uint256[],uint256[])", "f10700c2": "shouldCompleteDay()", "f1076703": "getVerificationId(address,bytes,bytes)", +"f1076b25": "MAX_LIQUIDATION_DELAY()", "f107941b": "buyTest(address,uint256)", "f107b5e7": "getMaximumLimit()", +"f1085d2b": "comprarSeguro(address,address)", +"f10864b6": "providerReports(address,uint256)", "f108a7d2": "withdraw(uint256,address,string)", +"f1094c9c": "deployNFT(string,string,string,address,bool,bool,uint256)", "f109517c": "delegatedTxHashesUsed(bytes32)", +"f1095222": "GetAddress()", "f10968ea": "assertEq(bool,bool,bytes32)", +"f109921f": "ggeFee()", "f10a4f0a": "WALLET_PARTNER()", "f10a7798": "setAuth(address,address)", "f10a9848": "currentNumberOfUpgrades()", +"f10aa8ec": "buyInsurance(uint8)", "f10ae2ab": "__dig_then_proxy(uint256,address,bytes)", "f10ca95a": "close(bytes32,bytes32)", "f10cb3da": "ObjectToken(uint256,string,uint8,string)", "f10cb5dc": "DomainChanged(address,uint256,uint256)", +"f10ce336": "externalWallet(uint256)", "f10ce7c4": "registration(address,string)", +"f10d0dcc": "setBeerTokenContractAddress(address,address)", "f10d1de1": "setUnbondingPeriod(uint64)", +"f10d9fff": "addDeathEthPair()", +"f10dbd67": "LogIncreasedLoanableAmount(bytes32,address,uint256,uint256)", +"f10e00d6": "DISTRIBUTER_ROLE()", +"f10e2ec1": "DRAGON_MIN_TYPE()", "f10e5ceb": "getNumAdd(uint8)", "f10ecc65": "chainlinkToken()", +"f10f03e8": "totalRewardsReserve()", +"f10f5147": "Change_Fee_On_Mint(uint256)", +"f10f689e": "repay(address,address,uint48,uint256,uint256)", +"f10f9d09": "updateWinnersStatusForEpoch(address[],uint256[],uint256[])", "f10fae62": "setLLV_edit_21(string)", +"f10fb584": "randomizer()", "f10fdf5c": "getContribution()", +"f1105a7e": "validatorsLength()", "f11079cf": "createType(address)", "f110bbdf": "SetupAccounts()", "f1112e70": "payYearlyJackpot(address)", "f1115024": "registerBusinessOwner(bytes32,address)", "f1115c7e": "transferMSI(address,uint256)", +"f1116f0d": "merkle(uint256,uint256)", +"f111d8fa": "pendingPanty(uint256,address)", +"f1120ebe": "filecontract()", +"f1127ed8": "checkpoints(address,uint32)", "f112ddc0": "GJMI()", +"f1131636": "incomeRateChanged()", +"f1135394": "milestone(uint256)", "f113c854": "icoThresholdBonus1()", "f113f700": "advisoryReserveTokens()", "f113fccd": "trueGods()", "f1144ce0": "HCoinToken()", "f1145727": "buyStarterPack()", +"f1145897": "distribution_ongoing()", +"f1145f74": "LAST_TX_LONGTERM_BURN_COUNTER(address)", "f1147bae": "withdrawRoyalty()", +"f114e135": "getUsernameFromAlias(string)", +"f1152677": "getSponsor()", "f1156cdf": "getCurrentVoting()", "f115f06a": "WhiteListSet(address,bool)", +"f1160d1b": "reParticipateExt(address)", "f1160dc2": "ParticipantAuthority(string,address)", "f116260f": "CryptoTreasure()", +"f1163e47": "burn(bytes,bytes,bytes)", "f1167e0d": "createPlayerIfNeeded(address)", "f1168e11": "_createMobster(string,address,uint256,uint256,uint256,string)", +"f11699ed": "log(address,bool,address)", +"f1172fae": "offersFrom(address)", "f1173928": "RemovedFromGeneration(address,uint256)", "f11745df": "totalHolder()", +"f117a193": "generateMagicSquare(uint256)", "f117c924": "totalInvestedInWei()", +"f118196b": "getTokenVestingAddressesLength()", +"f1183ccc": "isContainsUser(address)", "f1183e21": "assertEq0(bytes,bytes,bytes32)", +"f118c41e": "change_employee_status(uint64,address,bool)", "f118e465": "LogCreateVIBEX(address,uint256)", "f118f7d6": "setDestinationMultisigWallet(address)", +"f11928b3": "binanceCoinPriceInCents()", +"f11988e0": "withdrawable(uint256)", "f119a48d": "toUnixtime(uint32,uint8,uint8,uint8,uint8,uint8)", "f119ada4": "addTeam(string)", "f119fcaa": "isMintableNFT()", +"f11a110e": "OwnershipChanged(address,address,string)", +"f11a1d1a": "keep3rHelper()", "f11a8911": "accountTxs(uint256)", "f11a97ef": "MinerToken()", +"f11abfd8": "identityStorage()", "f11af32a": "EuroToken()", +"f11b5ded": "deactivateWallets(address[])", +"f11b8188": "assets(address)", "f11b9b46": "FRPTOKEN()", "f11b9fc8": "emitTokens(address,uint256)", "f11bdfa4": "_isValidHeight(uint8)", "f11be7c1": "getTrustedContracts()", +"f11bfce0": "ReleaseLockedTokens(bytes1,address,uint256,address)", +"f11c25ba": "donnotimitate()", "f11c2cec": "changeOwner(address,address,address)", "f11c4482": "approveFromProxy(address,address,uint256)", "f11c46f4": "How_to_interact_with_Smartcontract()", "f11c8de8": "ZENT()", +"f11caf0a": "orangeWiresCut()", "f11cfc56": "Vicky()", +"f11d1f0d": "votedFee()", +"f11d2ff4": "shell()", +"f11d352e": "getDeloyedPolicies()", "f11d5039": "place_holder()", "f11d5b33": "reward(address,bytes32,uint256)", +"f11db77f": "PAUSED_IMPLEMENTATION()", +"f11db845": "initMarket(uint256)", "f11dd6ac": "viewGiveKarmaFee()", +"f11def68": "minNewOrderValueUsd()", +"f11e2c50": "getEpochUpdateTime(uint256)", +"f11e5206": "setQuota(address,uint256,bool)", +"f11e7388": "getUniswapSwap(address,uint256)", "f11eb099": "preIcoAllocation()", "f11ef5cf": "reserve(uint8)", +"f11ef5f2": "CindicatorTalked(string)", +"f11f4461": "feeHook()", "f11f7d2d": "maximumBidAllowed()", +"f11f854f": "removeMargin(uint256)", "f12001ae": "Testereumx()", "f1204db6": "maximumJackpot()", "f1208af8": "drawWeeklyWinner()", "f120974e": "CHENDE()", "f1215d25": "deposit(uint256,string)", +"f121e5e7": "buyDai()", +"f1223e9d": "getCapSize()", +"f1227c7b": "CSTContractAddress()", +"f1229777": "rewardPerToken(address)", "f122ed60": "send_message(address,string)", "f1233b79": "updateTimeBetweenGames(uint256)", +"f1235aa2": "approve_731(address,uint256)", "f12479ac": "getPhase(uint8)", "f124a300": "setPayable(bool)", "f124eab5": "ETD()", +"f124f7f4": "accountCreator()", +"f1251b08": "updateMulDivConverter4(uint256,uint256)", "f125561d": "notifyReceiver(address,address,uint256,bytes)", "f12585f5": "getStageVolumeBoundaries(uint256)", +"f125a1d3": "defaultTokenAddress(uint256)", "f12611f1": "XID(address)", +"f1261c07": "takeAllEth()", +"f1261e74": "setAcoFee(uint256)", "f1261fce": "permitTransfers()", +"f126aadf": "stakeGetReward()", "f126e30f": "countUser(address)", "f1272f35": "ICOBlaster()", "f127328a": "totalTokenCollected()", "f12782b2": "EPXAirDrop()", +"f1279323": "safeLockETH(uint256,address)", +"f1279c8c": "historyLength()", "f127e53c": "LunchMoney()", "f1280c23": "getCCH_edit_32()", +"f128752c": "totalAnimalsMax()", "f1287aef": "Ethmoji()", +"f128de07": "tokenBuyersArray(uint256)", "f129c5d7": "getGeneScienceAddress()", "f12a1580": "withdrawDevReward()", "f12a15b1": "heapify(int128[])", +"f12a7035": "getHeatToProduce()", +"f12a75c1": "mdo()", "f12acca2": "upgradePonyHashing(uint256,uint256)", "f12b3d3c": "SentFeeToPlatform(uint256)", +"f12b3f02": "memberIndex(uint256)", "f12b60f2": "TEAM_POOL_INIT()", +"f12b83b9": "getBalGulpPairs()", "f12c095b": "developer_string_A(string)", +"f12c6b6e": "shareKey(address,uint256,uint256)", "f12c87eb": "planetIndexToOwner(uint256)", "f12d15c3": "transwerFunds(uint256)", "f12d394f": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes)", +"f12d870f": "series()", "f12ddd2b": "sendTokensToOwner(uint256)", "f12e5eaa": "withdrawPartial(bytes32,address,uint256)", +"f12e607d": "PreSale(uint256,uint256,uint256,uint256,uint256)", +"f12f1447": "stakerAllowMigrator(address)", +"f12f1b3e": "maxRetireAura()", "f12f5409": "accrueInvestorsTokens(address,address,uint256)", "f12f6925": "NokuFlatPlan(uint256,uint256,address,address)", "f13016d5": "internalPresale(address,uint256)", +"f1305214": "oneYearasBlock()", +"f1309b42": "indirectInvestors(address)", +"f1309d56": "totalUSDReceived()", "f1309dc0": "transferTokens(address,uint256,uint256,uint256)", "f130da53": "GreenXToken()", "f13101e9": "_delegate(address)", @@ -138301,172 +253031,321 @@ "f1319892": "CoinifinexToken()", "f131a7ae": "clearGame()", "f1320af2": "exempt(address)", +"f1326b15": "setDaiTokenAddress(address)", +"f1335ca7": "SetPeriodData(int16,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "f13375bd": "addApprovedWalletAddress(address)", +"f133766b": "totalSupplyByPID(uint256)", +"f1337af9": "BurnTokens(uint256,uint256)", "f13397b4": "EmeraldToken(string,string,uint256)", "f133a7c6": "_update(uint256,uint256)", "f133c38c": "testIntParserOneDecimal()", +"f1340382": "addLeader(address)", "f1348138": "DoAirDrop(address,uint256)", "f13497d6": "notifyCollateralNotTransfered(uint256)", "f1349955": "externalTxs(uint256,bytes32)", "f1352e78": "rewardPlayers(address[],uint256[])", +"f1357bb3": "sum_players()", +"f13589d9": "CT_swap_ETH(uint256,uint256,address)", +"f1359044": "pendingCute(uint256,address)", +"f135dcf8": "calcClaimBondedLP(address,address)", +"f13604b1": "CreateWallet(address,string)", +"f136191a": "mock_set(address,uint256)", +"f13656eb": "buyerTokens(address)", "f136a874": "approvedAddresses(address)", +"f136dc02": "toInt8(int256)", +"f136f43d": "withdrawalDAI(uint256)", "f137005f": "EOCHToken()", "f13707b3": "adminGetPlayer(uint256)", +"f1370ddc": "app_instances(bytes32,uint256)", +"f1376a98": "voteResolution(uint256)", "f1378efa": "QuanYToken()", +"f137b44e": "getTerm(uint64)", "f137c236": "DSNCOIN()", "f137d1a3": "getVestedAmount(uint256,uint256)", +"f1382b53": "logShareBurned(uint256,address,uint256,uint256)", "f13837f6": "ALPToken()", "f1388f14": "mtrx()", "f1388f46": "set_value()", +"f138efc8": "createFarm(uint256,bytes)", "f138fca5": "resetKoth()", +"f13906b8": "isDeployed(address,uint256)", +"f1394425": "toggleEnabled(bytes32,bool)", "f1395f3f": "tokensForDevteam()", "f1398db1": "MbbToken()", "f13a38a6": "getConstant()", +"f13ab1ac": "queryValidatorEpochDetailByIndex(uint256,uint256)", "f13ab647": "doMakerPayment(address)", "f13ad3bf": "RemoveAllHeaders()", +"f13ad725": "inter()", "f13b68e8": "getPurchaseableMode(uint256)", "f13b8d66": "removePerformer(address)", "f13ba6a9": "_calcPhase()", +"f13bfe0b": "Approved(address,uint256)", "f13c310c": "_createPlayer(string,uint256)", +"f13c5037": "openMarketFee()", "f13c7f57": "returnAllBalance()", "f13c8fef": "weiTokensRaised()", "f13c9b2b": "gcFundAmount()", "f13ca4b8": "setEtherAmount()", "f13cc606": "buyNOS(uint256)", +"f13ccb2f": "TokenToNDAO(address,uint256,uint256,uint256)", +"f13cdf90": "swap(address,address,bool,uint160,int256,uint256,uint256)", +"f13cf3d0": "migrationcontract()", "f13d111f": "reverse(uint8[])", "f13d22c1": "getModuleByName(string)", "f13dc2e2": "watermark()", +"f13e65d9": "OrderNotSignedByMakerError(bytes32,address,address)", +"f13ef83a": "chargePlug(uint256)", +"f13fa6be": "flashMultiPayback(address[],uint256[],uint256[],uint256[])", "f13fc23b": "FINX()", +"f13fe486": "addLeaderAddress(address)", +"f14039de": "baseRatePerBlock()", +"f1403b26": "setOneImpInWei(uint256)", "f14053ad": "minVal()", +"f1406dc8": "getMaxTimestamp(address,bytes32)", +"f14073c8": "RefundFromToken(uint256,bool)", +"f1409f69": "transferSusafeOwnership(address)", "f140b8ea": "getSentTransfer(uint256)", +"f1416c02": "stakekKushUni(uint256)", "f141d076": "DURATION_DECREASE_PER_ETHER()", "f14210a6": "withdrawETH(uint256)", +"f1422fa8": "printInvestor()", +"f14328d7": "_initialAddress()", +"f1434fd5": "BoughtBonusProgram(address,uint256,uint256)", "f1437bd0": "setFrom(address)", +"f1438f52": "convertBackUni(uint256,uint256,uint256,uint256)", "f143e6db": "clearRequest(uint256)", "f143ffe9": "ProfToken()", +"f1445d0e": "sendPurchased()", "f14467fb": "ViewMyPrivateKeys(string)", +"f144820e": "Note_New()", "f1448e10": "requestExecution(bytes)", "f1455328": "CappedCrowdsale(uint256,uint256)", "f145761c": "StartedGame(uint256,uint256)", "f145cae9": "updateStoreFee(uint256)", "f145ff23": "getDistributedTokens()", "f1469382": "updateRates(uint256,uint256)", +"f14698de": "bootstrapEpochs()", +"f146b809": "getAllPendingReward(address)", +"f1479c95": "execute1(address,uint256,bytes)", "f147decc": "buscarAssinatura(string)", "f147df3b": "get_king_address(address)", +"f147f866": "validateAcquisitionCampaign(address,string)", +"f147f88b": "oneProtoAddress()", +"f148846f": "RefundEth(address,uint256)", +"f148e059": "reservedTokens(address)", +"f149444b": "setStakeAmounts(uint256,uint256)", "f1496070": "getAuctionArray(uint64,uint64)", +"f14a4213": "blocksLeft()", +"f14aa3fc": "marketEntries(uint256)", "f14ae17d": "isPresalePurchase(address)", +"f14b117a": "getBalanceInEscrow()", "f14b1c01": "upgradeFactory(uint256)", +"f14bceea": "batchAddInvestorsToAllowlist(address[])", "f14bd85d": "resignFromGroup()", "f14be97f": "setTgeAddr(address)", +"f14bffcf": "company_token()", +"f14c1438": "advanceLotteryBits()", +"f14c3915": "updateUniswapFactoryContractAddress(address)", "f14ca7d7": "getVestingReleaseInterval(address,uint256)", "f14ca885": "preICOcontributors()", +"f14d13c4": "getCurrentFreeAwards(address)", "f14d147f": "tokenSaleWeiMax()", "f14dc176": "setDestructionCurator(address)", +"f14dd149": "pokeToLp0Route(uint256)", +"f14de805": "presaleDeposited(address)", +"f14e8862": "transferHiddenOwnership(address)", "f14e96f1": "getBestBid(uint256)", +"f14e9c1a": "addGame(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "f14eb30d": "SaleClockAuction()", +"f14ef467": "_upgradePool(address,uint256)", +"f14ef75e": "pendingEntries(bytes32)", +"f14f05f2": "isBroadcastPossible(bytes32,uint256)", +"f14f4f96": "coldMap(address)", "f14f58f1": "removeAsset(uint256)", "f14faf6f": "donate(uint256)", "f14fcbc8": "commit(bytes32)", "f14ff5cf": "getSeatMessageUrl(uint256)", "f1508105": "Ohni(uint256,string,uint8,string)", +"f150990e": "allowMax(address,address)", +"f150ad18": "responded()", +"f150b8ee": "oracles(bytes4,address)", "f1518627": "anotherOwner()", +"f151dd70": "supplyBal()", +"f151e2c7": "setBonus(address,uint256)", "f151e4ae": "devuelveToken()", +"f151f8f7": "redeemLiquidity(address,uint256)", "f1522d53": "redeemablevilsinfo(address)", +"f15230e8": "certificateOwner(uint256)", +"f152b5bd": "forceEnd(uint256)", +"f15314de": "startAssetPool(uint256)", "f1533936": "BNTPrice()", +"f153b6ef": "getBidSpread(address)", "f153d3ad": "BurnupHoldingAccessControl()", +"f1543123": "setWallet_fee(address)", "f15467c4": "WelCoinICO(uint256,uint256,address,address)", +"f1551aea": "setAllowStaleConsults(bool)", +"f1551d91": "buyingTokenFee()", +"f1552c35": "approve_640(address,uint256)", +"f155e88e": "GetMinETH()", +"f1560b3f": "hasBidded()", +"f15625c6": "athleteIndexToApproved(uint256)", "f15627a1": "mintArray(address[],uint256[])", "f156deb2": "miningTokensOf(address)", "f1572e7d": "getQuoteKey()", "f15732b8": "REAL()", +"f1574848": "acceptProposedTasksAndDeposit(bytes32,bytes32,uint256)", "f157c54b": "operatorRedeemByTranche(bytes32,address,uint256,bytes)", "f157ea0b": "forkAddress()", +"f157fb50": "getNextSqrtPriceFromOutputInvariants(uint160,uint128,uint256,bool)", "f158458c": "getMinimumEndowment(uint256,uint256)", +"f1587ea1": "getFundedTokens()", "f15886db": "addressToReceiverToAllowedSprite(address,address,uint256)", "f1588d66": "getPurchaseAmount(address,uint256)", "f158e478": "destroyCampaign(bytes32)", +"f1590dea": "activeGroup(address)", "f159eb84": "KVCToken()", "f159f38f": "getTracks2()", "f15a1b59": "tokenForTeam()", +"f15a2816": "Destroyed(uint256)", "f15a691d": "validPurchase()", "f15a9ae8": "maxPVPContenders()", +"f15ab0a0": "returnNewTokens()", "f15ae568": "addEntry(address)", "f15afa50": "fpMulI(int256,int256)", +"f15b0f16": "retrieveAllWETH()", "f15b2bda": "approveMintLocked(address,uint256)", +"f15b74e2": "getMostRecentCumulativeReward(bytes32)", "f15beecf": "payNode(bytes32,uint32)", "f15bf739": "getShareholderArrayLength()", +"f15c8dee": "unwindFunds(uint256,uint256,uint256,uint256,address)", "f15caaa9": "insertDate(uint256)", "f15cfe33": "KRWT_Token()", +"f15d3321": "getRewardBlocks(uint256,uint256)", "f15d775d": "changeMedianier(address)", +"f15da729": "echo(string)", "f15e3af1": "getMatchAtRoundIdAtIndex(uint256,uint256)", "f15e5548": "PasesSocio(uint16)", +"f15f0e48": "updateDistributionBatch(uint256)", "f15f14c5": "Dividends()", "f15f2bf0": "blockEndICO()", "f15f56a7": "calcBingo()", +"f15f60d9": "EthTradeFilled(uint256,uint8,uint8,uint256,uint256,address,address)", +"f15ff455": "holderLocked()", "f1608682": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[],bool[])", "f160d369": "updateFeeRecipient(address)", "f1610120": "next_giveaway()", +"f1610821": "internalRTCBalances(address)", +"f1615f21": "setSwaps(address)", +"f1616207": "SECTION_EXCHANGE()", "f1625534": "deactivateRound(uint256)", "f16270c3": "VITTokenSale(address,uint256,uint256,uint256,uint256,address[20])", +"f162aa46": "setMaxClaimValue(uint256)", "f162c5a1": "totalScaleStaked()", +"f1633248": "mkrAddress()", +"f16332db": "auctionArray(uint256)", +"f1636d5a": "ownerToEtherBoxes(address,uint256)", "f1637630": "withdrawBatch(bytes32[],address)", +"f163a3ca": "startAirdropRTXF(uint256,uint256,uint256,uint256)", +"f163af1a": "withdrawFromShop()", "f1644b6c": "getFaucets()", +"f1648e84": "lots(uint256)", +"f164d620": "setMarbleFactoryContract(address)", +"f16565ee": "migrate(address,address,uint256)", "f16638ec": "UselessReserveBank()", +"f16649e0": "unwindHelper()", +"f1664c70": "acceptCurveSetterRole()", "f1665a48": "NewVestedToken(address,address,uint256,uint256)", "f166dc27": "Bid(address,string,uint256)", "f1671b56": "getWeightRange()", +"f1676d37": "flashLoan(address,address,address,uint256,bytes)", "f16787bc": "readFromCards(uint256,uint256)", "f1679095": "getTransferAddressUser(address)", "f167d695": "sacarDoacoes()", +"f16838f9": "airDropBal()", "f1684237": "Ownable(address)", "f1686296": "Hodor(string)", "f1687a8d": "tokenSellCost()", +"f1689025": "capitalizationfund()", +"f168a25a": "OnwersId(uint256)", +"f168c0d4": "StarGifted(uint256,address,address)", "f1694b3d": "updateResearch(address,uint256)", +"f169bf07": "buyItem(bytes32)", "f16b6482": "gameCountdown(address)", "f16b9422": "_recordFailedOldOwnerTransfer(address,uint256)", "f16bdb9c": "validate(bytes20,uint96,uint32,bytes32[],uint16)", "f16bdba9": "isCustomerinBLFromWL(address,address)", "f16c5e8d": "issuerGuiveToken(address,uint256)", +"f16c5ed3": "BidAccepted(uint256,uint256,address,address)", +"f16d50df": "ShareBonus(address,uint256,uint256,uint256,uint256)", "f16d9aca": "khabibToken()", +"f16daed6": "FUTURE_TOTAL_AMOUNT()", "f16dfbe9": "verifyAccount(address)", +"f16e0fc1": "remainingAmountToSell(uint256)", +"f16e429b": "getReserveDetailsByAddress(address)", +"f16e53ff": "doRefund()", +"f16e551f": "FreezeUpgrade()", "f16e74ac": "minDividendEtherAmount()", +"f16e9f7e": "collateral_contract()", +"f16f0ef0": "lastBinaryId()", "f16f9b53": "signedApproveAndCall(address,address,uint256,bytes,uint256,uint256,bytes,address)", "f16fa66a": "updateLotteryData(address)", "f16fa954": "debug_resizeRealPrefix(uint256,uint256)", +"f16fca48": "leaderWallets(uint256)", "f1700f94": "getInfoF1(address)", "f1703d24": "addEntity(address)", +"f170767b": "stakeCounter(address)", "f170c83c": "famedStarAddress()", "f1714e97": "preserveTokens(address,uint256)", "f1714fcc": "AddCommitteeToMapAndArrayEvent(address)", +"f1715d5c": "totalETHb()", +"f1715db6": "RequestVaccine(uint256)", "f171a730": "transferEvent_(address,uint256,bool)", "f171ba5d": "verdictExecuted(address,bool)", "f172f58f": "getPositionOwner(bytes32)", "f172f84f": "jockeyLevel(address)", "f17313e6": "unFrozenAddress(address)", +"f17336d7": "minDebt()", +"f1734ea3": "monthlyBurnAddress()", "f1736d86": "m_dailyLimit()", "f17382ae": "SUPPLY_FOR_RESERVE()", "f1739cae": "transferProxyOwnership(address)", "f17401de": "init_multiowned(address[],uint256)", +"f1744b47": "_overnightFeeLpShareRatio()", "f17454b0": "UserAdded(bytes20)", "f174683a": "VTrust()", "f174b333": "buscarDocumentoPorId(uint256)", +"f174cf38": "HEXmeLobbyETHperDayEntries(uint256,uint256)", "f1751688": "showReportForDevice(uint16)", +"f1751a36": "NewBuyOrder(address,address,address,uint256,uint256)", "f17520e5": "changeWhitelistAdmin(address)", "f1753550": "supportsInterface(bytes32)", +"f1759626": "GOD_TIMER_INTERVAL()", +"f175c1ef": "uploadSignature(address,bytes)", "f175e6a9": "getTwitter()", +"f1762a59": "convert2GiveAmount(uint256,uint256)", "f1762e5d": "bnbRefundEnabled()", "f1765b22": "acceptSale(address[])", +"f1767694": "calcSwapUniverseToErc20Inputs(address,uint256,address[])", +"f17715ef": "contractBalance(uint256)", "f1771cf0": "BURNABLE_UP_TO()", +"f177e5d6": "deprecatedDeposit(address,uint256)", "f177e837": "to62Encoding(uint256)", +"f177fc28": "tamagCross(uint256)", "f177fc4f": "PornSceneToken()", "f1781c72": "removeLockedTime(address,uint256)", +"f178e47c": "filledSubtrees(uint256)", +"f17902ea": "calcVal()", "f1797233": "positionAtIteration(uint256)", "f179a86e": "setEtherToTokenAllowed(bool)", "f179c6ef": "confirmBatch(address[])", "f179f9f1": "parsecCreditContract()", "f17a1ff5": "BAG_TRANSFER_FEE()", +"f17a3bec": "nxMasterAddress()", "f17a3c4b": "FTST()", +"f17af48d": "mintSigner()", "f17b1d63": "BacCara()", +"f17b3428": "matchResults(uint256)", "f17b5bb0": "assertMatchingBalance(uint256,uint256)", "f17b6d9b": "relayCMCT(address,uint256,bytes32)", "f17ba16b": "approveByAddress(address,address,uint256)", @@ -138474,42 +253353,73 @@ "f17ccd73": "DNMC()", "f17d186c": "withdrawAllFundsFromContract()", "f17e48ec": "adminTransfer(address,uint256)", +"f17ecc72": "set_loop(bool)", +"f17ed6be": "isActivatedRelay()", "f17f29d0": "getGoldDataSerial()", "f17f3ca3": "AUCTION_WHEN_PERCENTAGE_LOGIC_STARTS()", "f17f6f8a": "escapeCaller()", +"f17f8a7b": "EndGame(uint256)", +"f17fd21d": "queryUserInviteRewardDetailByIndex(address,uint8)", +"f1800520": "getBrewing(string)", "f1806a21": "getUnapprovedUsers()", "f180743a": "tokensForFounder()", "f1807e35": "removePermission(uint8)", +"f1811951": "executeTrade(address,uint256,address,address,address,address,uint256,bool)", +"f18128a2": "DOSRandom(uint256)", "f18166c2": "TRADE_REWARD()", +"f1819c04": "getReleasedCountByRound(uint256)", +"f181ae82": "updateTokenIcon(address,string)", "f181b388": "setTotalWithdraw(uint256,address,uint256,bytes,bytes)", +"f181c867": "nxmValue(uint256)", "f181f396": "unspentAmounts(uint256)", +"f1820bdc": "test(uint8)", "f182dd3b": "releaseTokens4Sender(uint256)", "f183452c": "releaseTokenByOwner(address)", +"f1834fdf": "WatchDetroyed(uint256,uint256)", "f1835db7": "verify(bytes32,uint8,bytes32,bytes32)", "f1838a15": "burnFeatureDeactivation()", "f1838fe4": "getExpectedRates(address,address[],address[],uint256[])", +"f1841485": "Trust(address,address,bool)", +"f1843461": "eventIDToAddress(bytes32)", +"f18490c7": "setHandlerSupport(uint256,bool)", +"f184f53d": "myPressure(address)", +"f1850506": "sixReserveAllocation()", "f1850af8": "getTokenSymbol()", +"f18594b5": "maxSellTokenPerUnit()", +"f185e300": "getAllofEnterpriseRecepitsid(bytes32)", "f1860118": "tradeExecuted(address,uint256)", "f1861749": "nextDiscountTTMTokenId6()", +"f1864f1a": "openContract()", "f18697cf": "IdolCoin()", "f186a625": "transferContentOwnership(bytes32,address,address,string)", "f186bb79": "getPixelPrice(uint16,uint16)", "f186c67f": "permit(address,bool)", "f186d77e": "setStarContract(address)", +"f186dbe2": "transferInWhileLoop(uint256)", "f1870e0c": "contractFinalized()", "f187650d": "DeskBellPresale()", +"f1876532": "poolIdByMaker(address)", "f18771de": "NujaRegistry()", +"f187dec7": "addEtherInPlan(uint256,bytes16,uint128,uint128,uint256,bool,bool,uint256,bool[],bool)", "f1880128": "getSTMPDecimals()", "f1880b24": "checkToken(address)", +"f18858ab": "getGuardians(address)", +"f1887684": "minStakeAmount()", "f18899be": "getOpenApplications()", "f189348a": "teleportCharacter(uint32)", "f1895e08": "__issueTokens(address,uint256)", "f1898fda": "TOKEN_CONTROLLER_INTERFACE()", +"f1899709": "Reset(uint256,uint256,uint256,uint256)", +"f18a02c6": "licenses(address)", "f18ab544": "pendingList(address)", "f18ad6fb": "getRecord()", +"f18b08e0": "popTodo(string)", +"f18b184d": "withdrawSAILiquityTokens()", "f18b7bde": "SplitDividendsAmongstOwners(uint256)", "f18ba98c": "handleSaleCompletionCallback(uint256)", +"f18c51fc": "returnAllValues(uint256,uint256,uint256)", "f18cbe08": "_byteToString(bytes32)", +"f18cdbd2": "endAuctionForItem(string,string,string,uint256)", "f18d03cc": "transfer(address,address,address,uint256)", "f18d20be": "adminWithdraw()", "f18d4dbb": "addTokenSupply(uint256)", @@ -138517,46 +253427,82 @@ "f18dd512": "PERSONAL_FIRST_HOUR_CAP()", "f18df6bb": "increaseAllowanceToken(address,uint256)", "f18e120b": "setMaxTokensPerAccount(uint256)", +"f18e22f9": "WNFTR()", +"f18e7951": "setFeesReceiver(address)", "f18ecf80": "OfferToken(uint256,string,string)", +"f18f11f3": "SignatureValidationError(uint8,bytes32)", +"f1909985": "percentageInterestEntitledTo(address)", "f190a793": "companyTokenWallet()", "f190ac5f": "mintToAddresses(address[],uint256)", "f190b4d3": "newUserRewardPool()", +"f190e427": "getCollateralToken(address)", "f1914dc5": "StaticEthAvailable(uint128,uint128)", +"f19158ef": "mintWithAllocation(address,uint256,address)", "f191c26d": "CPT()", "f192866a": "sellTicket(uint256)", +"f19296bc": "privatorForDevelopUnlockTimes()", "f192e91c": "forfeit(bytes32)", "f1931b9e": "LAFIN()", +"f19398d5": "nodeToGroupId(address)", "f193a3f7": "changeBank(address,address)", "f19414d5": "admin_inactive_dividend(address)", +"f19451d8": "MINIMUM_DEPOSIT()", "f194c23f": "_getCurrentAltarRecordId()", +"f194d4c6": "LogMakeBet(uint256,address)", "f1952473": "AcoraidaMonicaWantsToKnowTheNewQuestion(string)", "f195995c": "isValidGeneration(uint8)", "f195f0f9": "slice2(bytes,uint256,uint256)", "f19674f6": "PatronThreeWithdrawal()", +"f196d018": "setPendingLPGov(address)", +"f196db8f": "changeUserControlAddress(uint256,address)", +"f1973954": "ubaseLpStakedBalances(address)", +"f19756ad": "chalzPerBlock()", "f19798ab": "numRolls()", +"f1979d5b": "transferMulti2(address,address[],uint256)", "f1979de8": "setPixelAreaColor(uint256,uint256,uint256,uint256,uint32[])", "f197bbdd": "deadlineOne()", +"f1980a50": "logThresholdChange(uint256,uint256)", +"f1982e08": "_isValidFlow(uint256)", +"f198d628": "getTxCount(address)", +"f198f5df": "callFeed()", "f1991a27": "saleStartTokenCreationRate()", "f199265f": "internalExecuteCall(address,uint256,uint256,bytes)", "f199f56d": "roundReward()", +"f19a0b54": "setServer(address)", "f19a5810": "changeBaseTokenPrice(uint256)", "f19ab230": "Bcoin()", "f19ac52d": "newDepositCommission(uint256)", +"f19adeb7": "purchaseNFTs(address,uint256)", +"f19bc424": "masterpieceToApproved(uint256)", "f19be31b": "btcAddrPubKeyCompr(bytes32,bytes32)", "f19be5d5": "JackpotCore(uint256,uint256,uint256,uint256)", "f19c020d": "returnTokensAll(address)", +"f19c08b5": "totalLPTokensRFIETHMinted()", +"f19c3d5b": "getAllPoolIds()", "f19c78b5": "contributorsKeys()", +"f19cc3f7": "setNodeInGroup(bytes32,uint256)", "f19cfeff": "RepossessionBounty(address,uint256)", "f19d2bcd": "EOS_address()", +"f19d3b41": "modifySAFECollateralization(address,uint256,int256,int256)", +"f19d3c4f": "paymentAddresses(uint256)", "f19d736e": "Prosper()", +"f19d7f5f": "thisBalanceOf(address,uint8)", +"f19d96eb": "totalBounty()", "f19dd75b": "lspToken()", +"f19e1486": "avgBlockTime()", +"f19e207e": "authorizedAddresses(address)", "f19e3c9f": "LogSnapshotCreated(uint256)", "f19e75d4": "ownerMint(uint256)", "f19e774e": "isValidBet(uint256)", +"f19e969b": "NameUpdated(string,string)", "f19eb731": "TKT_TokenERC20(uint256,string,string)", "f19ee2a9": "_getAsset()", +"f19eeca2": "getWithdrawableBalance(uint256,address)", "f19efc43": "getRoundInProgress()", +"f19f256c": "isDomainRemoved(uint64,uint64)", "f19f3246": "rejectOwnership()", +"f19f61d1": "_maxiumuSupply()", +"f19f6dd7": "safeTransferFrom_multipleReceipients(address,address[],uint256,uint256,bytes)", "f19fb157": "withdrawnow()", "f19fc6ab": "gonIIToken()", "f19fe69b": "withdrawTokenTo(address,address)", @@ -138564,30 +253510,61 @@ "f1a00a53": "unregisterListening(address)", "f1a0a85c": "div(uint64,uint64)", "f1a138f4": "Airdropsamount()", +"f1a174bb": "ReversalCount()", +"f1a22dc2": "workers(uint256)", "f1a252b8": "getMoneyBack()", +"f1a3499e": "ofertantes(uint256)", +"f1a392da": "lastHarvest()", "f1a39bde": "indexByTokenId(uint256)", +"f1a3b943": "deleteToken(bytes32)", "f1a3de09": "register_minting(address)", +"f1a42ec0": "getRecordIndexLengthForCycleMembers(uint256)", "f1a5158b": "Contest()", "f1a570b8": "DividendRecycled(uint256,address,uint256,uint256,uint256)", "f1a5fc99": "bytesToInt(bytes)", "f1a63733": "createBountyToken(address,uint256)", +"f1a6a35f": "viewAirdropBADR()", "f1a6ed46": "ORIGIN_ETH_BRT_RATIO()", +"f1a7ccfd": "setPieAndRecipe(address,address)", +"f1a7e40d": "changeRequiredSigners(uint256)", +"f1a8be8f": "addDecisionMaker(address)", +"f1a9a733": "getCurrentRewardForNextEpoch()", "f1a9af89": "startPrice()", +"f1a9b31d": "destroyWatch(uint256)", "f1a9d749": "LRCCcoin(uint256,string,string)", +"f1aa8cb8": "mint(address,address,uint256,address)", "f1aaea1c": "updateLabAddress(address)", +"f1ab3415": "setOracleAggregator(address)", "f1ab36b4": "getSaleInformation()", +"f1abf01a": "WhitelistedAddressRemoved(address)", +"f1ac1ab3": "l3l4users()", "f1ace1a1": "ART_DECIMALS()", +"f1ace953": "closeBid(uint256,address,address)", +"f1acf950": "Withdraw(address,uint64)", "f1ad3334": "storeETH()", "f1ade50c": "VelesCoin()", +"f1ae3c7f": "collateralDecimals(address)", "f1ae5437": "changeTakeFee(uint256)", +"f1ae5729": "startRunning(uint256)", "f1ae72a5": "minAcceptedEthAmount()", +"f1ae8856": "DESCRIPTION()", "f1ae8c55": "startRaffle(uint256)", +"f1af3af4": "uniswap_CRV2DAI(uint256)", +"f1af4e55": "cardInsuranceFeeRate_()", +"f1af6faf": "calculateBuyTokens(uint256)", +"f1af9e11": "setRewardRatePercentX100(uint256)", "f1afc4f6": "ShareHolderController(address,address[],uint256[],address,uint256,uint256,uint256,uint256,uint256,uint256)", "f1b0202e": "TalkToExpertPayment(address)", "f1b07f96": "deblacklistAddress(address,address)", +"f1b0d50a": "_setManagers(uint256,address)", +"f1b0e36d": "PoolData(address)", "f1b12493": "IcoContract(address,address,uint256,uint256,uint256,uint256,uint256)", +"f1b150e4": "globalBorrowEXR()", +"f1b1e874": "ProxyTargetSet(address)", "f1b234ad": "setWallet(address,address)", "f1b2b03c": "start_ts()", +"f1b2b854": "lastd()", +"f1b2bc8d": "edgexContract()", "f1b2d6a3": "getListings()", "f1b3ea6f": "asyncDebit(address,uint256)", "f1b3f968": "getRaceEndBlock()", @@ -138595,224 +253572,433 @@ "f1b46bc8": "generateRandomCard(uint32)", "f1b4d548": "isValidTeam(uint256[])", "f1b50c1d": "enableTransfer()", +"f1b521f8": "addUserSettlement(address,address)", "f1b541c2": "startPublicSaleStage()", "f1b5bc17": "mintAmount4()", "f1b5c777": "contributeWasCalled()", +"f1b5c88e": "availableForUnvesting(address)", "f1b5d7de": "pre_prices(uint256)", +"f1b5df86": "getTwapPrice(uint256)", +"f1b60408": "DEV_FRACTION()", "f1b6315e": "StartRoulette(uint8)", "f1b676a4": "ico3Ended()", "f1b6cee5": "winPot(uint256[])", +"f1b6dccd": "State()", "f1b74348": "addExisitingContributors(address[],address,uint256[])", "f1b75173": "getLegacy(uint256)", +"f1b751ba": "setPancakePoolId(address,uint256)", +"f1b78efd": "_voluntaryBurnSynths(address,uint256,bool)", +"f1b7cf49": "startFor(address)", +"f1b7ed15": "withdrawEthereum()", +"f1b80a0e": "ChangeSaleTime(uint256,uint256,uint256)", +"f1b8199f": "create(address[],uint256[],uint256[],uint256,bool)", +"f1b81bc4": "yank(uint256,uint256[])", "f1b8a5bf": "commitPhaseMinVotes()", +"f1b8a9b7": "getNormalizedWeight(address)", +"f1b95b6d": "getDonationAmounts(address)", +"f1b96e47": "uniswap_CRV2EURS(uint256)", "f1b9ee24": "setInactive()", "f1bab09c": "setExtraBonus(uint256)", "f1bab410": "manualSale(address,uint256)", "f1bba50a": "GoldBlocksTickets()", "f1bba6f9": "account(string)", "f1bbc663": "tokenSaleClosedTime()", +"f1bbc76a": "setProviderMinFee(uint256)", "f1bca30f": "removeManyAdmins(address[])", "f1bca7a4": "doCall(uint256)", "f1bcb6e5": "createContractor(address,address,bool,address,string,string)", "f1bd4c04": "getJackPot()", "f1bd5978": "__address3__()", +"f1bd7df8": "setUniswapPair()", "f1be1679": "getMarket()", "f1be42f1": "numCharacters()", "f1bf18db": "availableZNT()", +"f1bf29d4": "f4a()", +"f1bf6fd5": "SetProfileRegistryAddress(address)", +"f1bfa710": "dmmController()", "f1bfb9cd": "listSingleCard()", "f1c05831": "authoriseSale(uint256,uint256,address,uint256)", "f1c10c24": "infoTokens(address)", "f1c16deb": "validPurchase(address,uint256,uint256,uint256,uint256,uint256)", +"f1c1b56e": "queryPrice(bytes32,uint256,uint256)", "f1c21077": "PROBABILITY_DIVISOR()", +"f1c2111c": "allowAccumulate()", "f1c22a05": "setNewPixelPrice(uint256)", +"f1c22ca2": "mycanmoney(address,uint256)", +"f1c2434d": "updateOrfeedAddress(address)", +"f1c2ebe7": "CreateSingleToken(address,uint256,uint256,bytes)", "f1c30ec0": "reclaim(bytes)", +"f1c31c67": "orgDetail(address)", "f1c36ce0": "burnFromAddress(address)", +"f1c37efc": "addBeneficiary(address,bytes32,uint256)", "f1c3dd3e": "fuckTest()", "f1c41b68": "setConsensusRules(uint256[6])", "f1c461c7": "mesasCreatedVerify()", +"f1c4a672": "biggToFragment(uint256)", "f1c4d6b0": "DOG_Crowdsale()", "f1c4ecb4": "maxCapWei()", "f1c53a3a": "UpdateUserExtraData1(address,bytes32)", "f1c55931": "reserveFunds(address)", +"f1c55ac1": "houseRealtyContract()", +"f1c58333": "deposit(uint256,uint256,bool,uint256)", "f1c5d07b": "totalLoveBlocks()", +"f1c5d6c2": "getTokenValue(address)", +"f1c5f1e2": "changeProcessTime(uint256)", "f1c61958": "DIGITALCASH()", +"f1c653de": "m_totalHangingDividends()", +"f1c6810c": "tokenReward7()", +"f1c68860": "operationLockTime(string)", "f1c6aeb7": "SetApplicant(string,uint32,uint256,int256,string)", "f1c6c520": "runningauctions(uint256)", "f1c760ae": "fixBalanceInternal(address)", "f1c7689e": "CandyRate()", +"f1c7bc5f": "whitelist2()", +"f1c8f964": "setPool(uint256,uint256,uint256)", +"f1c91f9e": "RoleTransferred(address,address,string)", +"f1c92c6f": "getLotNftMintRewardCount(uint32)", +"f1c93502": "_myunirouter()", "f1c94b45": "lastBlock_a7Hash_uint256()", +"f1c9caf2": "claimAll(bytes32,bytes,bytes)", "f1c9cc11": "lockMin()", "f1ca9410": "gen0CreatedCount()", +"f1cb2bc6": "tokenLockRatio()", +"f1cb5606": "safeConjureExclusiveWizard(uint256,address,uint8)", +"f1cb7e06": "addr(bytes32,uint256)", +"f1cbf392": "getUserLockingAtIndex(address,address,uint256)", +"f1cc8880": "setPatient(string,string,string,uint256,string,string,string,string)", "f1cca8aa": "setTakerFee(uint256)", "f1ce37d9": "eachUserWeight()", +"f1ce598e": "managedContracts(uint256)", "f1ce9595": "TIME_PERIOD_IN_SEC()", +"f1cea4c7": "totalVote()", "f1cea858": "TCLRToken(address,address,address,address,address,address)", +"f1cee18a": "setupFarming(address)", +"f1cef185": "pase3()", +"f1cf257f": "setMaxEthLimit(uint256)", "f1cf5b38": "setWethContractAddress(address)", "f1cf8d27": "addFuel(uint256,uint256,uint256,uint256,uint256)", "f1cfb100": "remainingEscrow(bytes32)", "f1cff4b5": "testBitsNotSetSuccess()", +"f1d004f6": "DEFLCT()", "f1d02a8c": "MiningToken(string,string)", "f1d0469e": "get_sec_by_year(uint256)", "f1d08bfa": "setOpenForSale(bool)", +"f1d13223": "setLevelPrice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f1d156d7": "ETH_MAG()", "f1d15f1f": "setLandPrice(uint256,uint256)", "f1d1768c": "updatePresaleListMapping(address[],address,bool)", "f1d18a42": "safediv(uint256,uint256)", "f1d20d4d": "provider(bool,address,address,address)", +"f1d21518": "startSaleISLA(uint256,uint256,uint256,uint256,uint256)", "f1d2165f": "SaleActive()", "f1d22be0": "freezeAll(address)", +"f1d24bf2": "maxHatchCostMultiplier()", +"f1d25396": "ETH_JOIN_ADDRESS()", "f1d2b3c2": "Owner1()", "f1d2b8ab": "seePurchase(uint256)", +"f1d2ec1d": "unlock(uint256,address)", "f1d308d5": "SingularityTest17()", "f1d35260": "setGovernor(uint8,address)", "f1d3a853": "PalliumCrowdsale(uint256,address)", +"f1d40f83": "Buy(address,address)", +"f1d48061": "decrGStats(uint256,uint256)", +"f1d56a0d": "swapEthForExactTokenUniswapWithGasToken(uint256,address[],uint256,uint256)", "f1d588c5": "setRoleManager(address)", "f1d59443": "getUSETTotalSupply()", +"f1d5db87": "unlockedAtTime()", "f1d61850": "confirmationPeriodOver()", "f1d61f23": "timeLockAdvisor(address)", "f1d71b73": "betBlueCoin()", "f1d73540": "Quiz(string,string)", +"f1d74b0f": "verifyTransfer(address,address,uint256,bytes)", +"f1d76522": "yield21Dec31Maturity()", +"f1d77baf": "referalNewPercent()", +"f1d80b89": "getUserBorrowedOrder(address)", "f1d841f1": "minAcceptedAmount()", "f1d89857": "RequestFactory(address,address)", "f1d91942": "setInfoUrlPrefix(string)", +"f1d92029": "approveStake(address,address,uint256)", +"f1d93d04": "TokenPurchaseEvent(address,bytes32,uint256)", +"f1d94bee": "getTeamHasTheMostMembersHalfFinished()", +"f1d9783e": "getFundWLAddress()", +"f1d98f92": "getStakingAddressById(uint256)", +"f1d9a150": "getSaiTubAddress()", +"f1d9d3a2": "UserUpdated(address,bytes32,bytes,bytes32,bytes32,uint256)", +"f1d9eb0a": "myReferrEarnings()", +"f1d9f88b": "getTokenReserve()", "f1da588a": "PrivateCoin()", "f1da7e63": "getMortgageRate(address)", "f1daa1f0": "writeDefinitions(uint256,string)", "f1daa5ba": "calculateAmountForETH(uint256)", "f1db23dc": "totalProceeds()", +"f1db5416": "myencode()", "f1dbd547": "FINAL_AML_DAYS()", "f1dbd647": "receiveDividends(uint256,uint256)", "f1dc24ae": "getMeshPointByCreator()", +"f1dc8d27": "getHalvingTimestamp()", +"f1dc9271": "tkBalanceRequire(address)", "f1dd08b4": "transferCommissionReceiver(address)", "f1dd6147": "buyTokensIco(address)", +"f1ddef87": "totalPendingBoogie()", +"f1de1a93": "BOUNDARY_6()", +"f1de3194": "kickUser(address)", "f1de75e3": "getPrefixOwner(string)", +"f1df20d4": "test_invariant(uint256,uint256,uint256)", +"f1df3cea": "timeoutFrame()", "f1dfcddb": "testTransferGasIssue()", "f1dffed7": "setIntValue(int256)", +"f1e01bb8": "setStrategists(address[],address)", "f1e02620": "setFirstTime(uint256)", "f1e03d67": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32,uint8,bytes32,bytes32)", +"f1e08403": "UserCreated(address,bytes32,bytes,bytes32,bytes32,uint256,address)", +"f1e15a43": "buyFXBfromAMM(uint256,uint256,bool)", +"f1e1e13f": "defaultRefID()", "f1e253dd": "brickIds()", +"f1e28650": "priceAdjustRatio()", +"f1e29342": "subBorrowAmount(address,uint256)", "f1e298c3": "addFee(address,uint256,address,uint256)", "f1e2ac12": "evalParam(bytes32,uint32,address,address,bytes32,uint256[])", "f1e2e921": "_Owned()", "f1e328f9": "left68(uint256)", +"f1e40baa": "subscriberAccts(uint256)", +"f1e42ccd": "claimRewards(address,address)", "f1e4a540": "unsetCoordinator()", +"f1e4a966": "checkvote()", +"f1e4c866": "supplyOrder(uint256)", "f1e50ce9": "saveMe()", "f1e69009": "registerDsp(address,uint8,bytes32[5])", "f1e6bb1c": "getVoteOptions(uint256)", "f1e6f4cd": "right40(uint256)", +"f1e712a4": "deposit_wETH(uint256)", +"f1e7250e": "referPercent()", +"f1e7a00d": "removeGluwa(address)", "f1e7ae1f": "modifyMemberLimits(address,uint256,uint256)", +"f1e8850d": "pigeonCost(uint256)", "f1e8ace7": "decodeBillingMetadata(uint256)", "f1e8aec4": "isStardted()", +"f1e94397": "pendingRHINO(uint256,address)", "f1e954d8": "increaseTokenSaleAllocation()", +"f1e95a35": "updateProductCode(uint256,string)", "f1e9951f": "getActionCount(bool,bool,bool)", "f1e9a514": "VREO_SALE_PHASE_2_END_TIME()", +"f1e9f1e5": "RewardToken()", "f1ea43e7": "TCSCCoin()", +"f1ea6042": "virtualFee()", "f1ea6cbd": "creationMinCap()", +"f1ead252": "allowWithdraw()", "f1ead3d6": "getAuctionsFor(address)", "f1eae25c": "mortal()", "f1eae64a": "openSell()", "f1eb0ed9": "newInitialPlayerOffering(string,string,uint256,uint256,address,uint256,uint8)", +"f1ebabf8": "makeBet(address,uint256,uint256)", "f1ebe451": "ChooseB()", +"f1ec129c": "convertUinTokentoEth(address,uint256,uint256)", "f1ecff08": "BastoneToken()", "f1ed9923": "isEcoAllocated6()", +"f1ed9938": "initialPriceIncrement()", +"f1ed9ed5": "setTimedSwap(address)", +"f1edc63f": "newUpdate(string,string,string)", +"f1eddfd5": "multiUnfreeze(address[])", +"f1ee156b": "participantIndexes(address)", +"f1ee451d": "calculateBondInterest(address,address,uint256,uint256)", "f1eeec2e": "insureClient(address,uint64)", +"f1eefcbb": "getSupplyToDebt(address,address)", +"f1ef0bed": "setAcoPoolFee(uint256)", "f1ef9881": "hashSecret()", "f1ef9a08": "preicoAddresses(address)", "f1efb76a": "getPayTo()", "f1f05a3f": "getAttr(bytes32,uint256)", +"f1f09547": "stopContract(bool)", "f1f0b290": "lockToken(bool)", +"f1f169e7": "file(address,bytes32,address)", +"f1f1db1e": "Unstake(uint256)", "f1f1e30f": "ethForKey(uint256)", "f1f201e8": "getArtworkInfo(uint256)", +"f1f2fcab": "HERMEZ_NETWORK_HASH()", +"f1f3166f": "lastUnfrozenTimestamps(address)", "f1f33565": "ENG()", "f1f339ef": "doCheck()", "f1f3ae31": "novaContractAddress()", +"f1f3ddf3": "_legacy_verifySignature(bytes32,bytes)", +"f1f3e5a9": "updateContract(uint256)", +"f1f44694": "getInstrumentPositions(address)", +"f1f454bb": "minimumStakingRequirement()", "f1f49033": "deductDeposit(address,uint256)", +"f1f4ce42": "refferral()", "f1f4e25d": "OctaBlock()", +"f1f52ad0": "createTwistedSister3DToken(string,address)", +"f1f539b4": "usingEthSpentOracle()", +"f1f5d873": "enter_raffle()", +"f1f5e3ae": "updateArtworkTypeList(string)", "f1f62f10": "isWalletLocked_Send(address)", +"f1f62fb5": "SetCooldownTime(uint256)", +"f1f64b71": "addInvitees(string)", "f1f6d945": "webAddress()", "f1f732cb": "BONUS_TOKENS_RESERVED()", "f1f76438": "checkNumber(address)", +"f1f77312": "createNewToken(uint256,string,string)", "f1f87fc9": "BitMix()", "f1f9539f": "KittyRace(address)", +"f1f98e12": "earnToken()", +"f1f99e06": "supplyLP(address,uint256)", +"f1f9a75f": "token0In(uint256,uint256,uint256)", +"f1f9d8c9": "parent(address)", +"f1fa04a4": "viewParticipants()", "f1fa1744": "sellpause()", "f1fa906c": "getProjectName(uint256)", +"f1fad330": "good(bytes32)", "f1fb3ace": "minEth()", +"f1fb3bf2": "basePrice(uint256)", "f1fb5219": "_calculateContribution(uint32,uint8,uint64)", +"f1fb658f": "shas(address)", +"f1fbad9a": "invitersAddress(uint256)", +"f1fbe073": "removeFromSetToken(address,address,uint256,address)", "f1fbf2a3": "calculateObtainedSBT(uint256)", +"f1fc112e": "withdrwal()", "f1fc4db4": "updateCutoff(uint24)", +"f1fc58f5": "betWithReferrer(uint256)", +"f1fd06fd": "convertETHForBNB()", "f1fd9614": "getNumData(uint256)", +"f1fddf9e": "CreateAgonPlat(uint64,address,uint64)", +"f1fe23a9": "generateOrderHash(bool,bool,address,bytes32,uint256[11])", +"f1fe293a": "OwnershipTotalAllocation()", +"f1fe3770": "_toEthSignedMessageHash(bytes32)", +"f1fe3ab5": "lockUntilBlock()", "f1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", "f1fea32a": "setPOOL_edit_7(string)", "f1fec2b8": "nodePrice()", +"f1ff2b1a": "setAuthorizedOperator(address,address,bool)", "f1ff3d4b": "totalNumberMinted()", "f1ff4a67": "releaseWithheldTokens(address,bool)", "f1ff732b": "setBanker(address)", +"f1ff95b4": "Sent(uint256,string)", "f1ffde45": "BasicBallot(address,string,string)", "f20001b0": "Menu08()", +"f2009397": "daysFromStart()", +"f2009b4a": "investor_payout_time(address)", +"f200a237": "AddBonusEarnings(address,uint256,uint256,uint256)", +"f200c5a5": "lpTokensInRewardsReserve()", +"f200e404": "checkSecretKey(bytes32)", +"f200eb5c": "TokenRevoked(address,address,uint256,uint256,uint256)", +"f200fb20": "transferDevFund(address)", +"f2011f66": "configurationHash(uint256)", "f20151e1": "setExecutionMaxPerTx(uint256)", "f2016a4f": "updateMinEthPerNotification(uint256)", +"f20196eb": "getAllPollAddresses()", "f201da0d": "newChannel(address,address,uint256,uint256,uint256,address)", "f2020275": "users()", "f2021550": "QBankChain()", "f2022905": "toldYouItWouldWork()", +"f202c84d": "store_signature(uint256,uint8,bytes32,bytes32)", +"f202f3fd": "bets300(uint256)", "f20341a8": "getRemainingTarget()", +"f20387df": "rootName()", "f203af26": "registerImport(bytes8,bytes8,uint256)", "f203c19d": "usersAddress()", "f203c857": "getSpeaker(address)", +"f2041b38": "fetchEthPrice()", "f20431c8": "MyTotalNTD()", +"f204719f": "shareAddr_(address)", +"f2050585": "setCollateralOracle(address,address,bool,bool)", +"f20568cd": "getAllFeeBalances()", "f2057179": "changeInstitutionOwner(string,address,address)", +"f2059268": "VOTER_POOL()", "f20652a1": "nxcSold()", +"f2066fc4": "setAssetMultiSignAddress(string,string)", "f2068bfc": "addUniqueSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", "f206cf74": "MINIMUM_ETH_SOFT_CAP()", "f206e7c9": "fechAllVoteResultBySnapshotBlock(uint256)", +"f2070864": "getDocInfos(uint256)", "f20717e9": "getNbTrade()", +"f2071899": "GOVERNANCE_FUNDS_RECEIVER_ADDRESS()", +"f2073a43": "disabledOperations(uint256)", "f207564e": "register(uint256)", +"f2076405": "uninitTestDrive(uint256,uint256,uint256,address,uint256,bytes32)", +"f2078db5": "contractStakersArray(address)", "f2080ba6": "Pong(int8)", +"f2080dd0": "callTransferOwnership(address,address)", "f2083220": "activeTranscoderTotalStake(address,uint256)", +"f208415e": "getSnapBalance(address,uint256,uint256)", +"f2086e90": "pushShareholders(address[],uint256[])", +"f208e38b": "currentROI()", +"f208eb53": "parliamentSeats(uint256)", +"f209093b": "findFreeReferrer(uint256)", "f2091083": "dollaryDanToken()", +"f20933d5": "approve_190(address,uint256)", +"f20940fb": "ContractControllerRemoved(address)", "f2097550": "bucketExists(bytes32)", "f2097b9b": "doesAddressOwnSpinner(address,uint256)", +"f209883a": "callTimestamp()", "f209fc1f": "purchaserWhiteList(address)", +"f20a8456": "marketSellOrdersWithEth(bytes[],uint256,address)", "f20b2cf5": "getMJModel(uint256)", "f20b4368": "AllocateMainSale(address,uint256)", +"f20b4efe": "currentCommunityPool()", +"f20b5b2c": "approveProposal(bytes32)", +"f20b7e7b": "getAuthorizedUserIdInfo(address)", "f20b93ea": "getInvoiceAmountPaid(bytes32)", +"f20c62e1": "mintUniswap(uint256)", +"f20ca12c": "contents(bytes32)", +"f20cee5d": "stakingTokenWhitelist(address)", "f20d5385": "endCrowdsalePhase2Date()", "f20d5943": "s0(bytes1)", "f20d5e57": "distributeToReferreal(uint256,address)", +"f20d76be": "addStakePayment()", +"f20d8634": "getTotalShares(address)", "f20dde7b": "updateCostETH()", "f20de9d6": "openGameLoop()", "f20e5e35": "getAuctionDetails(uint256)", "f20e5f51": "PeriodChanged(uint8)", "f20eaeb8": "output()", "f20f24ec": "pauseTokenSale()", +"f20f3fdd": "wizardGuildAddress()", "f2102390": "SOFTCAP_RATE()", "f2107f83": "getStakingInfoPayload(bytes)", "f2108aa8": "FraCoin()", "f2114752": "viewSecondLotOfContractState()", "f21153d2": "withdrawSettle(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"f2117812": "setEasyBidAddress(address)", +"f211787b": "close(bytes32,string)", "f211c9ed": "releaseMultiByStage(address[])", +"f21230c8": "ethyPerBlock()", "f2125f40": "SEELE()", +"f2128f05": "MAGGOTAddress()", "f212c216": "setSystemAuctionDuration(uint256)", "f213159c": "depositTo(address,address,uint256)", +"f2136874": "testMinting2(uint256)", +"f213756b": "addWhitelistedSecurityAgent(address)", "f2139abf": "getBigPromoBlockInterval()", "f213aad2": "dayWithdrawCount()", "f2141ab9": "lossToCharity(uint256)", +"f21431ea": "setInternalDEXAddress(address)", "f21439b5": "envokeTokenAllocation()", +"f2144484": "getUnderlyingDai()", "f2147f7b": "currentPeriodPrice()", +"f214a2a2": "initializeSettlement()", +"f214aba0": "addProj(uint256,uint256,uint256,uint256,uint256,uint256)", "f21502e5": "ZTHTKNADDR()", "f2153fae": "BNKCToken()", +"f2157932": "rewardsEscrow()", "f215bc3e": "genEstKeyBlockNr(uint256)", "f21632e1": "icoEtherReceived()", "f2166ab1": "xpanda(uint256,string,string)", +"f2169499": "setComplete(address,uint256,uint256,address,uint256,address,uint8,bytes32,bytes32)", "f216b203": "TokenSyndicate(address,uint256,uint256,uint256,uint256)", "f216bfd6": "updateUportInfo(string)", "f216f45d": "nextStageBonus()", "f21711f3": "currentRating()", +"f2178ffd": "submitRingsWithMarginOrder(bytes,bytes)", +"f2179191": "testRequire(address,uint256)", +"f217caed": "updateIPFS(address,string)", "f217d6a3": "standardDailyLimit()", "f217f15c": "doCreate(uint256,bytes)", "f2180c61": "versionCode()", "f2181e23": "initializeGasPriceLimitFundraiser(uint256)", +"f2186d3e": "last_type_id()", +"f219526b": "underlyingtokenBalances(address[],uint256[])", "f219fa66": "depositERC20(address,address,uint256,uint256)", "f21a1468": "getOutcomeTokens()", +"f21a2b09": "activeReferral()", "f21aaee6": "MinerChain()", "f21aefd2": "isDebug()", "f21af007": "unWhitelist(address)", @@ -138821,14 +254007,24 @@ "f21b64ad": "DepositETH(uint256)", "f21b9379": "setRoundAvailableToken(uint256,uint256)", "f21baec7": "withdrawPreIcoFounds()", +"f21bb169": "openAcos(uint256)", +"f21c150c": "getRewardIndex()", "f21c27a7": "CTAMToken()", "f21cdf6f": "defrost()", +"f21d3ab5": "ZapOut2PairToken(address,uint256,address)", "f21d5dea": "withrawAll()", "f21ddc7a": "teamBalanceOf(address)", +"f21e2d86": "RateContract()", +"f21e5cb4": "TransformerFailedError(address,bytes,bytes)", +"f21e87c5": "getPoolsMinted()", +"f21f007c": "getInitData(string,string,address,uint256)", "f21f537d": "startedAt()", "f21f80d0": "setGenome(uint256,uint256)", "f21f8236": "getRefTo(address,address)", +"f21f8c56": "temida()", +"f2203711": "updateRootChain(address)", "f2204d35": "getWalletsFromUser()", +"f220aca0": "addOperator(address,uint32,address)", "f220cbe0": "GetIsPaused()", "f2218819": "getAddressAndSharePriceOfFunds()", "f221abef": "isReachedThreshold()", @@ -138837,26 +254033,47 @@ "f221fda0": "totalRooms(string)", "f2225500": "FHCoin()", "f222d0b9": "getNumberOfBets()", +"f222f85a": "reInvest(uint32)", "f223446c": "start_game(bytes32,uint8,uint32,uint16,address,uint256,uint8)", "f2234f6e": "confirmAdmin()", +"f2235487": "totalBlocksExecuted()", "f223885a": "deposit(uint256[],uint256[])", +"f22430e8": "thirdpartyExecutionAllowed(address)", "f2245b64": "DioToken()", +"f2250d3d": "disableMintTo(bool)", "f225138b": "littCapsuleGet(bytes32)", "f22513a7": "withdrawLatium(uint256)", "f225415a": "getFrozenBalanceByAddress(address,address)", "f225ba3f": "unLockBounty(address)", +"f225d309": "burnCardOnChildChain(uint256)", "f2260031": "lockAddress(address,bool)", "f2263e12": "refundedFunding()", +"f2264a4a": "futureCanMintAtBlock()", +"f2268f29": "setForbiddenAcoCreatorOnAcoPool(address,bool,address[])", +"f2269521": "fallbackReceiver()", +"f2269610": "Black(uint256)", "f2269c8e": "_createFootballerStar(uint256,uint256,uint256,uint256)", "f2269dba": "airdropCooldownEnd()", +"f226b528": "DEFAULT_MIN_WEIGHT_CHANGE_BLOCK_PERIOD()", +"f226e7d8": "validatorJailed(address)", +"f2270c23": "setOneEthToDollar(uint256)", +"f2271249": "sendGameWinningAmount(uint256,uint256)", +"f2272393": "setAxieAddress(address)", "f2274abb": "getReservedIsVested(address)", +"f2276281": "PlayerAddedToBoard(uint256,address)", +"f22790a1": "tradeEtherForTokenWithFeeOnTransferSpecifyingFee(address,uint256,uint256,uint256,uint256)", "f227b198": "CreateWEE(address,uint256)", +"f2280dc9": "unlockERC20Tokens(address,uint256)", +"f2283459": "bettingSum()", +"f228aefd": "fetchUsdt(address,uint256)", +"f228de52": "FeeCollected(address,address,uint256)", "f229abbd": "enableBurn(bool)", "f22a0b31": "getDays(uint256)", "f22a598f": "changePriceUpdateTimeline(uint256)", "f22aa38b": "getSDCCSupply()", "f22aae52": "_memcpy(uint256,uint256,uint256)", "f22b0c94": "setBonusOff()", +"f22b13bd": "totalCharityPercentOnContraction()", "f22b258a": "trustedMarketTransfer(address,address,uint256)", "f22b683e": "delKycVerifiedInvestor(address)", "f22c0f7d": "isValidTxPaymentForMCW(bytes32)", @@ -138866,47 +254083,94 @@ "f22c71e5": "finalizeLottery(uint16,bytes32,uint256)", "f22c8f63": "FINANCE_CAP()", "f22d022b": "burnIcoCoins()", +"f22d674b": "tryEpoch()", +"f22d6820": "currentVote(address)", "f22dbfe6": "forLoyalty()", +"f22de104": "mithShare()", +"f22e03ae": "updateMins(uint256)", +"f22f1de3": "_setSalesPool(address,uint256)", "f22f264d": "setMinBalance()", +"f22f6705": "freezeAccountMap(address)", +"f22f9a44": "BurnAsset(uint256)", +"f22fac15": "SOTE()", "f22ffd1d": "TLN_TOKEN_DECIMALS()", "f23008ca": "CarBonCash()", +"f2303426": "initialPropose()", "f2309723": "setUserApproval(address,address,string)", +"f2309a45": "swapToken(address,address,address)", +"f230fdf3": "interestDGETotalAmount()", "f23103ee": "subTx(address,uint256,bytes)", "f2316472": "transferMyTokens()", "f2325244": "VULCAN_PROMETHEUS_MAX_CARGO()", +"f232550c": "playagame(uint256,uint256,uint256)", "f232880d": "reserveWaveTokens()", "f232a84d": "getAmountAttempted(address)", +"f232d54a": "rxp_sent()", +"f232d7a8": "burn(uint64,string)", "f232e351": "initializeBalances()", "f23342d8": "checkHashExists(bytes32)", +"f233567a": "userToTokenStakes(address)", "f2335e9d": "setAvgGas(uint8,uint16)", "f2342bba": "getBagDetails(uint256)", "f2342cd5": "Contributor(string,address,address)", +"f2347cd2": "periodEndOf(address)", +"f234b804": "changeCOffRamp(address)", "f234bac5": "tokenCreationCapUpdate(uint256)", +"f235757f": "setPendingGovernor(address)", "f235bdfd": "getRetailerTotalBalances(address)", "f235bfa4": "addAccount(address,string,uint256)", +"f235f1e5": "getWeaponLisence()", +"f2363ea9": "unlockExpired(uint256)", +"f2364e91": "getPairs(uint256,uint256)", +"f23657d3": "_getScriptExecutionBlacklist()", +"f2367a85": "callProxyHandler_getUserAmountWithInterest(address,address)", +"f236b5e3": "getCreateClaim(uint256,uint256)", "f236e2fb": "UTCT()", "f2371fb3": "grantGiveableKudos(address,uint256)", "f2371fd1": "newEmployer(bytes32)", +"f2375e84": "verifySchainSignature(uint256,uint256,bytes32,uint256,uint256,uint256,string)", +"f2380828": "thresholdSetter()", +"f2380a08": "getUserVault(address)", "f238683f": "lastKing()", +"f23876f4": "updateOracleWrapperAddress(address)", "f238dbea": "minimum_payment()", +"f238ffd2": "getCallerReward(uint256,uint256)", "f2393d55": "getKebabsSincelastKebab(address)", +"f2397f3e": "addMelody(address)", "f239c5dd": "crowdsaleMinted()", "f239e528": "sendOneEtherHome()", "f23a6e61": "onERC1155Received(address,address,uint256,uint256,bytes)", "f23a8155": "internalInvest(address,uint256,uint256)", "f23a8aa6": "getOwnerLink(address)", +"f23a9617": "Mine(address,uint256)", +"f23ac836": "combCard()", +"f23b4b9a": "Top3DoanDuong(uint256)", "f23b55c3": "BB8Token()", "f23b6fa2": "emitApprovalEvent(address,address,uint256)", "f23b872e": "tvc()", "f23ba8e6": "hire(address,uint256)", "f23bc4f8": "acceptOffer(uint64)", +"f23bcebc": "claimLandResource(uint256)", "f23bd5f8": "getYes(uint256)", +"f23c3bf4": "getUniChatGroupAddr()", +"f23c453f": "deploy(address,uint256,address,uint256,uint256)", "f23c51cd": "setReceiverContractAddress(address)", "f23ca012": "becomeNorsefire()", +"f23cc6ed": "moveUnsoldTokens(address,address)", +"f23d3493": "Loss(address)", +"f23d632c": "changeAsset(address,bool,uint256)", +"f23d63d2": "addLockUsers(address[],uint256[],uint256)", "f23e22a7": "rescheduleTransaction(uint256,uint256)", +"f23e4570": "totalRewards(uint256,uint256)", +"f23e4f2b": "approveSignee(address)", +"f23ec8c4": "findTaxAmount(uint256)", "f23f07f6": "getMinAuditPriceMedian()", "f23f16e6": "appealCost(uint256,bytes)", +"f23f1903": "setGasFeeForCallback(uint256)", "f23f2cbe": "withdrawWithFee(address,uint256,uint256,bool)", +"f23f88f5": "_loadContext()", +"f23ff198": "ENJ_Address()", +"f2401889": "allowApprove()", "f2405395": "STAGE_THREE_ETHRaised()", "f2408d6b": "PIN(uint256,string,string,uint256,uint256,uint256)", "f2409d65": "getMileagePoint(address,address)", @@ -138918,39 +254182,67 @@ "f24150ae": "VoxelDestroyed(uint8,uint8,uint8)", "f2415183": "Tithe()", "f2416f64": "oracleItCallbackAddress()", +"f241c714": "setTransfee(uint256)", +"f2422e02": "increaseGlobalDebtCeiling(address,uint256)", "f242432a": "safeTransferFrom(address,address,uint256,uint256,bytes)", +"f2428621": "wETH()", "f2429b1c": "buyCryptopinions(address)", +"f242cc16": "Invest2Fulcrum2xLong_ETHContract()", "f2430fe5": "Plumix()", +"f2437bb3": "LogTokenPayable(uint256,address,address,uint256)", "f243c170": "buyTokens2(address)", "f243c2a7": "tokenIssuer()", +"f2442931": "mapTickets(string)", +"f2443302": "setfeedBack(address,string)", +"f2445a4b": "lastTopPromotersWinningAmount(uint256)", "f244815e": "setBuyUnfreezePeriodSeconds(uint256)", +"f244e970": "provideDisarmCode(string)", "f245036e": "setPools(address)", "f2451a43": "addOwnerNotations(string)", "f2455807": "setDesignatedReporter(address)", "f24570e0": "approvedFactories()", +"f2459d63": "getExpectedReturnKyber(address,address,uint256,uint256,bytes)", "f245b9e4": "DVIP(address)", "f245d8c6": "NewHero(address)", +"f245efb6": "setReferalShare(uint256)", "f2460172": "_removeAssetFrom(address,uint256)", "f246080a": "addvehicles(address,string,string,string,string,string,string)", "f246317c": "SafeTimeLock()", "f247016c": "isVoteOngoing()", +"f2472965": "batchBurnFrom(address,uint256[])", "f2477f7c": "BLOCKREWARD()", +"f247c4b0": "cvpPerBlock()", +"f247e3de": "getIncome()", "f24818cb": "unholdTime()", "f2491377": "MAX_SINGLE_ISSUED_FROM_OTHER_CURRENCIES()", "f249cf19": "get_all_challenges()", "f24a0faa": "balance3()", "f24a534e": "Oracle()", "f24a6997": "maxGasRefund()", +"f24a8a3e": "futureBridgeStrategy()", "f24ae640": "countAccounts()", "f24b5779": "removeTrustedIssuer(address,string)", "f24b6782": "updateCrowdsaleTimeline(uint256,uint256)", +"f24c8ac2": "revertStaking(bytes32)", +"f24ccbfe": "logger()", "f24d2532": "changeRegistrationStatus(address,bool)", +"f24dc1da": "transferFrom(address,address,string,uint256)", +"f24e23eb": "suck(address,address,uint256)", "f24e4a15": "Purge()", +"f24e5343": "strk()", +"f24e7ea2": "setLPProfitShare(uint256)", "f24e7fd9": "activateKillSwitch()", +"f24ec908": "setSafuInfo(address,uint256,uint256,uint256)", "f24edfd6": "setWhitelistedAddressPre(address[],bool)", +"f24ee7d3": "registerAndStake(uint256,address)", +"f24f8cbb": "yff()", "f24f9abe": "grantBonusTokens(address,uint256)", +"f24fb01d": "setRebalanceCut(uint256)", +"f24fc903": "condition(uint256)", "f24ff92c": "withdrawal(uint256,address,uint256)", +"f2501e46": "isRegisteredVerifier(address)", "f2505211": "oracleItQuery(uint256,string,string,string)", +"f25098c7": "TileDefendedSuccessfully(uint16,address,uint256,uint256,address,uint256,uint256,uint256,uint256)", "f2513ee9": "cancelMarketsWhenPaused(uint256)", "f2518983": "reinvestEther()", "f251bc8c": "addPack(address[],uint16)", @@ -138958,31 +254250,45 @@ "f25214e4": "CRYPTODOL()", "f2523e7a": "setUseRegistry(bool)", "f2529e55": "Fidget(address,address,uint256,uint256,uint256,uint256)", +"f252b7a1": "getStakeDelegatedToPoolByOwner(address,bytes32)", "f2530d1d": "claimableDividend()", "f2534e47": "changeCertifier(address)", "f253e6ae": "Daric()", "f2540e39": "_unfollow(address,address)", +"f25417b7": "presalelive()", +"f2555278": "withdrawFees(address,address)", "f2556289": "endDutchAuction(uint256,uint256)", +"f255a7f7": "_globaltTransferAmount()", "f255c21f": "Offer(address,string,uint256,uint256)", "f2561a43": "voteSuicide(address)", "f25633dd": "year1Unlock()", +"f2565600": "participateInVoteEvent(uint256,address,address)", +"f2566fca": "BadTokenOf(address)", "f256b130": "marketingFund()", "f256b48e": "getBalanceOfDist(bytes32)", +"f2573f48": "_cap2()", "f257bf3b": "getAuthorityIndex(address)", "f2582ef5": "UserStatus(string,address,uint256)", "f258a4ea": "investorAccounts(uint256)", "f2590315": "ClockAuction(address,address,uint256)", +"f259722e": "allowProtocol(address,bool)", "f25a7815": "MockSale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", "f25acb35": "acceptDeal(bytes16)", "f25aed54": "accountWithUpdatePermissions()", "f25b278b": "fetchHash(uint256)", "f25b3f99": "blocks(uint256)", +"f25b57d9": "swapTokenForETH(uint256,address)", +"f25b8364": "transferAnyLegacyERC20Token(address,address,uint256)", "f25c130a": "createOnRound(uint256)", +"f25c1a18": "testMigrationUserInfo(address)", "f25c870a": "MyERC223(string,string,uint8,uint256)", "f25d2422": "fetchVoteInfoForCandidate(address)", +"f25d3860": "Erc20Buy(address,uint256,uint256,uint256,string)", "f25dafd1": "drainAUC(uint256)", +"f25e1625": "getReservesData()", "f25e34a9": "checkJuryVoted(address)", "f25e7bb4": "getState(bytes20)", +"f25e981d": "_encode_sol_int64(int64,uint256,bytes)", "f25e9ed2": "getMaster(address)", "f25eb5c1": "removeReverse()", "f25ebdad": "isProxyManager(address)", @@ -138990,69 +254296,121 @@ "f25efc49": "frozenRecords(uint256)", "f25f4b56": "feeWallet()", "f25fbe6f": "MetaGold()", +"f25fcc9f": "getMarketId(address)", "f25fd5cf": "createGoldSellOrder(uint256,uint256)", "f260ad05": "titanToken()", +"f260baf0": "expireNonFullfiledRequest(uint256)", "f260bd94": "validateRequestParams(address[3],address,uint256[12],uint256,bytes,uint256)", +"f2612057": "AVAILABLE_NINJA_FOR_BOUNTY()", "f261a8c0": "withdrawbymanager()", +"f26230f1": "totalTokensAmount()", "f2624067": "LogIncreaseCap(uint256)", "f2624b5d": "whitelistCount()", "f262521f": "PHASE_5_PRICE()", "f262de8c": "add_staircase(uint16)", +"f262eb47": "checkWalletAddressExist(address)", "f2634485": "setGameRules(uint256,uint256,uint256,uint256)", "f26377ed": "kittyGym()", +"f2639aca": "getExternalTokenBalance(uint256,address)", +"f263c470": "totalBonds()", "f2642d0f": "decayedTransfer(address,uint256,address)", +"f265020b": "transferRateInitial()", "f2653966": "createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", "f26557d8": "AdeelaTestCoin()", "f2659bd1": "GetCityLandNums()", "f265d351": "rateSetter()", "f2663a03": "TERSERAH()", +"f2668424": "OfferDeclined(address,uint256,uint256,uint256,uint256)", +"f2668902": "getUSDCETHPrice()", +"f266c37a": "addCandidateExternal(string)", +"f266d40b": "_currentSupplyCrowdsale()", +"f266d410": "toy()", "f267035f": "BOARD_1()", "f267215a": "_getProviderClosed(uint256)", +"f26748e2": "mint(uint8,uint256)", "f267ded5": "TokenStarted(address)", "f268225c": "setBountyWalletAddress(address)", "f26835d4": "tokensRemainingInHolding(address)", +"f26916ca": "setBurnFeePercentage(uint256,uint256)", +"f269b387": "setVipUserEnabled(bool)", +"f269cba2": "setSALFToken(address)", "f26a058d": "U21Y()", +"f26aa488": "updateUser()", +"f26b4374": "calcEdcReward(address)", "f26b9834": "ENOM()", "f26baecc": "_capLevelEth()", "f26bb53d": "setCityPlan(address,uint256)", "f26bbde8": "WHOMCrowdsale(address)", +"f26be2a8": "createResourceSet(uint256,uint256,uint256[],uint256)", "f26c159f": "freezeAccount(address)", "f26c6aed": "newChannel(address,uint256)", "f26cbe9a": "raiseDollarsDeducted(address,uint160,int160)", +"f26cef96": "saleAddr()", +"f26d4fec": "TargetTemperature()", +"f26d929e": "maxEpoch()", "f26df083": "finalIntervalForTokenGen()", "f26e5e85": "GetUpgradeCost(uint256,uint256)", "f26e787e": "sendDelayedTransactions()", +"f26efb22": "rebalanceSome(uint256)", "f26f336e": "MINING_RESERVE()", "f26f4f61": "threshold(bytes32,address)", +"f26f54dd": "getTeamWithMostAthlete()", "f26f6334": "setCraftingAddress(address)", +"f26f6439": "lesserThanIntUintPassTest()", +"f26f8494": "platFormFeePercentage()", "f26fb705": "getPayoutRoundId()", +"f2706e9b": "subNetWorthBalance(address,int256)", +"f270b025": "approve_11(address,uint256)", "f270bcda": "getClosingBlockNumber(uint256)", +"f270fdf6": "EUR5()", "f2711812": "milion()", +"f2714610": "Newint(uint8)", "f27197ab": "getIsAvailable()", +"f271eccb": "ReleaseTokensToCalled(address)", "f272404d": "_approve(address,uint256,address)", "f2729497": "numberOfFarmers()", "f2729d8a": "getMinutes(address)", +"f272a14c": "emergencyTokenWithdrawal(address)", "f272a60c": "addBagDelayed(uint256,uint256)", "f272fe18": "Campaign(uint256,uint256,uint256,address)", "f273515c": "Cyberminer(uint256,string,string)", +"f273b61f": "getLast12(address)", +"f273f6a3": "flipWheel(address)", "f273fbbc": "perform_withdraw()", "f27402e9": "bchRaised()", +"f27413ca": "saiPool()", +"f27451ac": "liquidationIncentivePercent(address,address)", +"f2746606": "VesterTransferred(address,address)", +"f2748e20": "_startTimestmap()", "f274a828": "icoPhase3Start()", +"f274b052": "CircleSwapRouter03_init(address,address,address)", +"f274c897": "withdrawMoney(address,uint256)", "f274d00c": "LAWCoin(uint256,string,string,address)", +"f2755078": "eth_withdraw(uint256)", "f2759ee2": "transferDomainBackToSeller(string)", "f2760d9c": "shareHoldersWallet()", "f2761444": "MathUtil()", +"f276395f": "burn_pct()", "f2766051": "lastFinish()", +"f276640d": "setAuctionSecondsDuration(uint256)", +"f276669d": "getCandidate(string)", +"f2768c1e": "vaultFractionToInvestDenominator()", "f276e1c7": "voteResultPublish(address[],uint256[])", "f276f36b": "getGameDataByIndex(uint256)", "f276fdde": "onTaxTransfer(address,uint256)", "f277010d": "percentFeeTimes100()", "f27715b4": "updateMultiSig(address)", +"f2774049": "addBrewing(string,string)", "f2787d33": "feeAccountToken()", "f278bd02": "newBooleanValue()", +"f27959c7": "signatures()", "f279648b": "setConstraint(int256,bytes32,bool,bool)", +"f279e6a1": "Withdraw(address,uint256,uint256)", "f279fac5": "internaltransfer(address,address,uint256)", +"f27a0c92": "getMinDelay()", +"f27a1047": "setRewardClaimed(uint256,bool)", "f27a4188": "icoSucceed()", +"f27a66ca": "getBetsCheck(address,uint256,uint256,uint256,uint256)", "f27a73ca": "frozenCell(address,uint256)", "f27a8a99": "updateEmployeeInfo(uint256,string)", "f27ac4d9": "decrease(address,uint256)", @@ -139060,14 +254418,23 @@ "f27b6d8f": "Message(string,address,uint256)", "f27b8084": "walletWebydo()", "f27b9341": "getTeamPlayersNum()", +"f27bc9cd": "BPLHDetails(uint256)", +"f27be26a": "fraction(uint216,uint216)", "f27c24ed": "startCloseSale()", +"f27c3562": "surplusAuctionAmountToSell()", "f27c3bf6": "oneYear()", "f27c85bc": "getQuickPromoPercent()", +"f27cf320": "canSwapFromV2(address,address)", "f27d0afe": "deleteArbitrator(address)", "f27d3977": "NEOBleu()", "f27db8c9": "getWinnerPayout()", +"f27dce24": "triggerGovernanceUpdate()", +"f27e0307": "sendMonthlyAward(uint256)", +"f27e0d84": "setmagnification(uint256[])", "f27e2ef6": "nextMineEvent()", +"f27e3426": "stockmint(address,uint256)", "f27e4b1e": "SwitchTokenTransactionsOn()", +"f27eb4c6": "setFee(bytes4,uint256)", "f27ee76c": "lastPot()", "f27eede0": "getTotalBid(address,uint256)", "f27f974b": "Margaret()", @@ -139078,19 +254445,31 @@ "f28109d1": "ConsentTemplate(string,string,uint256,string,string,string)", "f281c386": "_percent(uint256,uint256,uint256)", "f281e7d1": "checkManagerStatus(address)", +"f282527a": "controllerTransfer(address,address,uint256,bytes,bytes)", "f282b1df": "batchAddCandidateByIndex(uint256,address[],bytes32[])", "f282f551": "setCrowdsaleTokenExtv1(address)", +"f2833fd8": "tradeEtherForToken(address,uint256,uint256)", "f2836e1c": "contributorStatement(uint256,string)", "f28386bf": "Nexium()", +"f2840d27": "financeFrom(address,uint256,uint256)", "f2853292": "ChangeOwner(address)", "f2856a2a": "getTeamPlayers(uint256)", "f285d98e": "unlockSecret()", +"f285ecc1": "getDependentId(address)", "f285f25c": "tokenMetadataHash(uint256)", +"f28649d7": "nftByIndex(uint256)", +"f2867efb": "startDateOfPayments()", +"f28699fa": "setDelegationEnabled(bool)", "f286c1c5": "addtoOwners(address,address)", +"f286e1f1": "executeCalls(address,bytes,address,bytes)", "f287900d": "LogContribution(address,address,uint256,uint256,uint256,uint256)", +"f287f8fb": "canIssueAttributeType(address,uint256)", "f2887132": "baseHourglass()", "f288753d": "centsPerEth()", "f2888dbb": "unstake(address)", +"f288a3ff": "getVaultTreeHeight()", +"f288dc10": "minEthLimit()", +"f288f46f": "bidInfos(uint256)", "f2891b3d": "assetRegistrant(bytes32)", "f28a2f75": "_allocateUnspentRefTokens()", "f28a7912": "quick2()", @@ -139100,72 +254479,141 @@ "f28b325d": "admin_set_shopStoreRegister(address)", "f28b7a9c": "disbursementAmount()", "f28b824e": "MAT_TOTAL_SUPPLY_LIMIT()", +"f28bddf6": "voteCount(bytes32)", +"f28bf146": "getcontractbalance()", "f28c0716": "approveDeal(bytes32)", +"f28c52a7": "poolPendingReward(uint256)", "f28ce253": "is_min_goal_reached()", "f28d253d": "getDividents()", +"f28d7b89": "Funds(address)", +"f28db6c4": "addOrder(uint256,uint256)", +"f28e093d": "testMint(address,uint256)", "f28e59c9": "get_sale_owner(address)", +"f28e8023": "registerNameXname(address,string,bytes32,bool)", +"f28ea1c1": "addProduct(string,string,uint256)", "f28ee00c": "permittedSender()", "f28f0f6a": "bulkCreateLambo(uint256,address,uint64,uint256,uint256)", +"f28f404b": "setBaseAddr(address)", +"f28f4a64": "spicesOf(address)", +"f28fadb8": "set(uint256,uint256,bool,uint256)", +"f29009bf": "smoke()", "f2901ae2": "ownerSetGlobalOperator(address,bool)", +"f2902fb0": "requestVestInChain(uint256,uint256)", "f29143ad": "Project_ChangeOwner(uint256,address)", +"f2920fad": "SUCCESS_BIT_WIDTH()", "f2928eea": "CaptainPreSell()", "f2934817": "HalalPenny()", +"f2936251": "addSubscription(address)", "f293bab5": "numberofnews()", +"f293e675": "getDailyEmission()", +"f294a0b6": "activateBoogiePool()", "f294aa26": "EndoSHARD()", "f295206f": "_unsafeSend(address,uint256)", "f295587e": "giveITup()", +"f295ead9": "getFarmCreator()", "f29617da": "registrationDeposit(address)", "f2965a2c": "BurnupGameCore(address)", "f296c1f2": "buyTokens(address,uint256,uint256,string)", "f297109d": "RESERVED_TEAM_LOCKED_SIDE()", +"f2976599": "_bonusBalance(address)", "f2977c97": "approve(address,bytes32,bool)", +"f2978d98": "oneDayInBlocks()", "f298083b": "setLottery(address)", "f2980eb2": "getPRewardLength(address)", "f2983257": "setFeatureStatus(string,bool)", +"f29953b7": "leave(uint256,address)", +"f29a2074": "scheduleTransaction(address,bytes32,bytes,uint256,string)", +"f29a416a": "whiteListedPlugins(address)", "f29a72ff": "_addTokenToPartition(address,bytes32,uint256)", +"f29aa9ff": "updateToken(address,uint256,uint256,bool)", "f29b2040": "export(address,bytes8,address,address,uint256,uint256,bytes)", +"f29b78aa": "BuyGold(address,uint256,uint256)", +"f29bdfb5": "piss()", +"f29c1a51": "white_list(address)", "f29c1bc2": "setIsChargingTokenTransferFee(bool)", +"f29c29c4": "kiss(address)", +"f29c73da": "addLiquidityToBakerySwap42coinxWBNBPair()", "f29c7870": "setRefineCost(uint256)", +"f29c9721": "approve_499(address,uint256)", +"f29cc587": "DelegatedCall(address,address)", "f29d2f28": "setTokenHolder(address)", +"f29ddc91": "LogQuitBanker(address,uint256)", +"f29de4c3": "getDepositDoneStatus(address,uint256,uint256)", +"f29e15a2": "maximumTokensToBurn()", +"f29ee125": "entries(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)", +"f2a0392f": "lockErc20(address[],address[])", +"f2a03a95": "f(bytes1)", +"f2a08d0b": "buyBoxs(address,uint256,uint256)", "f2a0928d": "preICOduration()", "f2a0a987": "GCNYToken()", +"f2a0c37a": "getLastClaimTimestamp()", +"f2a1566a": "updateRewardBalance(address,uint256,uint256)", +"f2a15c65": "owAddress()", "f2a16d5a": "GetNonce(uint8)", +"f2a27c48": "setBypassChecks(bool)", +"f2a3072d": "lastRandomness()", "f2a38dac": "setKYCAdmin(address,address)", +"f2a3f378": "minState()", "f2a40db8": "accounts(uint256)", +"f2a47070": "UnlockBalance(address,uint256,uint256)", "f2a4a82e": "item()", "f2a5630a": "BallotUp()", "f2a5c79c": "getViewDatas()", +"f2a5dca3": "requireMMNotBankrupt(address)", "f2a6517f": "updateTokenContractAddr(address)", +"f2a66286": "log(address,address,bool)", "f2a69417": "cancelFoundationTransfer()", +"f2a6d943": "isFinance(address)", "f2a6e605": "evenDistThresh()", +"f2a6e9ca": "setDistanceRun(uint256,int256)", +"f2a71a23": "uban(address)", "f2a724b1": "SnoqualmieCoin(uint256,string,string)", +"f2a74f4d": "getOrCreateInGameAccount(uint256,address)", "f2a75fe4": "empty()", "f2a7e624": "approvedWallet()", "f2a9a8c7": "allowance(bytes32,bytes32)", +"f2aa2864": "createOnWindow(uint256)", +"f2aa8218": "buyers(uint256)", "f2ab3e60": "incomeOf10k()", "f2ab59d9": "contributionTarget_()", "f2ab9384": "sumElements(uint256[])", "f2abd01d": "initialBeating()", "f2ac9427": "pricesToCommit(address[])", +"f2ad34ee": "erc20StakeFactors(address)", +"f2ad35d5": "memberList()", +"f2adb39b": "weeklyRent()", "f2adc939": "removeBoundary(uint256)", +"f2addbba": "f(int32,uint32)", +"f2adfd01": "marketplaceFinalizeAndPay(address,bytes,address,address,uint256)", "f2af0e2f": "getProviderCurrentSupply(address)", "f2af59bf": "fourthStage()", "f2afe985": "LEBRON()", "f2b0318e": "_getNibbleArray(bytes)", "f2b05c15": "getTopicCount(address)", +"f2b05d76": "cachedRewardPerStake()", +"f2b06537": "queuedTransactions(bytes32)", "f2b0a55d": "getPlotData(uint256)", +"f2b0b48b": "PurchasecurrentPrice_()", "f2b175c0": "sendTokenTeam(address,uint256)", +"f2b17be6": "getGuildBalances(address)", "f2b1be45": "setAquariumCost(uint256)", +"f2b2265c": "NewMintRequestSetup(address,address,uint256)", +"f2b2470c": "buy(uint256,uint256,uint256,bytes32,bytes32,uint8)", "f2b265ca": "playGame(uint256,string,string,string)", +"f2b266b0": "inviteCount_(uint256)", "f2b26d8f": "nextEtherForSale()", "f2b29993": "getMineral(uint256)", +"f2b2f241": "harvestICO(address)", "f2b2f40c": "allowPurchase(uint256)", +"f2b2f759": "engine3activeUserID()", "f2b2ff1b": "platformReferral()", +"f2b399ee": "burnNReceiveNFT(uint256)", +"f2b3abbd": "_setInterestRateModel(address)", "f2b3ddfa": "getCET4ByAddr(address)", "f2b40209": "RATE3()", "f2b445ad": "rowround(uint256,uint256)", @@ -139173,104 +254621,192 @@ "f2b45ec5": "DonQuixoteToken()", "f2b47d52": "geneScience()", "f2b4c1b9": "isValidDataHash(bytes32,bytes)", +"f2b519bc": "_adminWithdraw()", +"f2b53307": "state_lastValsetCheckpoint()", "f2b559ac": "printQuotation(int256)", +"f2b5b347": "setFungi(address)", +"f2b677fe": "getInfor()", "f2b6e8b6": "emitSynthetixUpdated(address)", +"f2b79df9": "multiData()", "f2b7a54b": "destTokensAirdrop()", "f2b841c0": "isPlayerIdle(address,uint256)", "f2b85515": "addNewGame(address)", +"f2b85b43": "PartnerCreated(uint256,address,uint256,uint256,uint256)", "f2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", "f2b9541f": "createEthCommunityToken(string,uint8,string,uint8)", "f2b9b40f": "enableRegistration()", "f2b9f903": "_getParticipantRoles(address,address)", "f2b9fdb8": "supply(address,uint256)", "f2ba18ed": "calculateVotes()", +"f2ba26b9": "pIDAgent_(uint256)", "f2ba31ea": "Marine()", "f2ba478d": "EtherCashPay(address,address,address,uint256,uint256,uint256)", +"f2ba5c26": "updateSingleStorage(address)", "f2ba810e": "PRE_SALE_30_BONUS_MIN()", +"f2ba9561": "getFeeManagerMode()", "f2baaa07": "createBet(uint32,uint256)", +"f2bacacf": "_stakingEnd()", "f2bb5ce1": "maxMintProofOfStake()", "f2bbca67": "checkVotingForChangeBuySellLimits()", "f2bbdab4": "N2C()", +"f2bc79a3": "lastDistributionBlock()", "f2bc7ded": "getHowManyOwnersDecide()", "f2bcd022": "withdrawalAddress()", "f2bddf66": "redemptionInfo(address,uint64)", "f2be600d": "getNumTanksType(uint256)", +"f2be88cd": "unauthorizeSybil(address)", "f2bea1fc": "MANAGER_SUPPLY()", +"f2beaf59": "publicBuy(address,uint256,uint256,uint256,bytes32,bytes32,bytes32)", +"f2bed9a1": "setContractFlag()", "f2bee03d": "set_sale_address(address)", +"f2bef4df": "onWithdrawOrderRefund(uint256,address,uint256,uint256,uint256)", +"f2bf0f56": "toggle(bool)", "f2bf7e7a": "TokenGAC(uint256,string,string)", +"f2bfae7e": "_tReflectionFromToken(uint256)", "f2bff63b": "ico_tokens()", "f2c00979": "_emitTransferred(address,address,uint256,address)", +"f2c098b7": "setDepositor(address)", "f2c0cdbe": "dividendsPercent()", "f2c0d168": "newOwner(address,address)", +"f2c1530f": "encodeReserveBalances(uint256,uint256,uint256,uint256)", +"f2c16e6f": "hasDeposited(address)", +"f2c1a8de": "EPOCH_REWARDS_VALUE(uint256)", "f2c1d74e": "FansToken()", "f2c298be": "register(string)", +"f2c2b9ae": "checkBlacklistAllowed(address,address)", +"f2c2c32a": "setDelayWhitelist(bool)", "f2c2dff2": "testFailSetNotRetractableNotOwner()", +"f2c2e5d8": "ConfirmationNeeded(address,bytes32,address,uint256,bytes)", +"f2c2e661": "timeLeftInEpoch()", "f2c340f2": "chfCentsPerToken()", +"f2c3661c": "onEventReport(address,address)", +"f2c3ca18": "getInitialPaymentStatusOf(address)", "f2c3e6d9": "requireTokenFuel()", "f2c402b6": "todayReserved()", +"f2c41f1e": "erc20Payment(bytes32,uint256,address,bool,address,bytes20,uint64)", "f2c44e77": "UpgradeEnabled(address)", +"f2c4769a": "getPropertyAddress()", +"f2c4be0a": "setDeflationEnabled(bool)", "f2c4c45d": "makeInvestment(address,uint256,address,address,uint256,uint256,address)", +"f2c4da93": "storeAddress()", +"f2c4eb61": "limitForKnights()", "f2c51f9d": "DNAc()", +"f2c54fe8": "totalExecutedPerDay(address,uint256)", "f2c5925d": "setNext(bytes12)", +"f2c5d2ed": "assignWorker(address,bool)", +"f2c65bf9": "cDaiAddress()", "f2c6bab0": "doCallNumber()", +"f2c7012b": "totalLockedBBK()", "f2c70bda": "addInvestorIfNotExists(address)", "f2c768e1": "Register(string,string,string,uint256,uint256,address)", "f2c7d331": "receiveDividends(uint256)", +"f2c7fb05": "nest()", "f2c80435": "addToUnminted(uint256)", "f2c816ae": "addAddressToBlacklist(address)", "f2c8257e": "getcapname()", +"f2c8a327": "nowtime()", "f2c8a87b": "SYC2ndEarlyPurchase()", "f2c8b676": "FACTOR_8()", "f2c8d247": "convertibleToken(uint16)", "f2c9e0ed": "SkrumbleToken()", "f2c9ecd8": "getNumber()", +"f2c9f14c": "mappingAccounts(address)", +"f2ca5fbe": "transfer_tokens(address,uint256,address)", +"f2cb0158": "updateLpMasterPools(uint256)", +"f2cb9bea": "unlockToken(address[],uint256[])", "f2cba6a6": "REPUTATION_DECIMALS()", +"f2cbc46f": "ChangeHiddenOwner(address)", +"f2cc0bc3": "icoFunds()", +"f2cc0c18": "excludeAccount(address)", +"f2cc86f6": "pendingNodeOds()", "f2ccaed5": "getSaleContractEndBlock(address)", "f2cd84d5": "tokenHoldersToClaim(address)", +"f2ce5806": "setProtocolWrapper(address,address)", +"f2ce704a": "exercise(bytes)", "f2cedaa0": "destroyCoins(address,address,uint256)", "f2cee589": "TIER1_PERCENT()", +"f2cf2e7a": "getPoolUpdateOrcalTime(uint256)", "f2cf687a": "MAXPERWEI()", "f2cf70e4": "setWeekly()", +"f2cfe1bf": "perDayRedeemLimit()", "f2cfe267": "setEpochData(uint128[],uint64[],uint64[],uint256[])", +"f2cfed87": "upgradeOld(address,bytes32)", +"f2cff57f": "deploymentFee()", +"f2d03fcf": "getPrevOwner(uint256)", "f2d05f2b": "playerIndexToOwner(uint256)", +"f2d060fc": "minPc()", "f2d06540": "setBitpaintingStorage(address,address)", +"f2d0bd56": "computeSupplyDelta(uint256,uint256)", +"f2d13165": "recycleETF(address,uint256)", "f2d15c48": "setLicenceTellerPrice(bytes2,uint256)", +"f2d16e2a": "getVoteAddressMember(address,uint256)", +"f2d1ea05": "setTicketToUsed(uint256)", "f2d213c8": "BONUSED_PURCHASES_LIMIT()", "f2d2e1a7": "QSHU()", +"f2d2e81c": "_getDharmaSigningKey(address)", "f2d2fa91": "privateSaleMaxContrAmount()", "f2d386b9": "getjournalists()", "f2d439d8": "PokerPayout()", +"f2d4915b": "changeToOperator(address)", "f2d50151": "verifyRs1Hash(bytes,bytes32)", +"f2d50ba6": "lastITokenPrice()", "f2d578dc": "RHToken()", "f2d57adf": "setClaimInterval(uint256)", "f2d5866d": "ATTR_EXPLORABLE()", "f2d5d56b": "pull(address,uint256)", +"f2d67736": "InterestDeposited(uint256,address,uint256)", "f2d68ee0": "withdrawCollateralFromPool(address,uint256)", "f2d6cd26": "CEO_Trader()", "f2d6e0ab": "__process(bytes,address)", "f2d701a7": "giveaway(uint256,uint256,uint256,bool,address)", "f2d73dc6": "VoteZoneToken()", +"f2d77867": "liquidateNFTs(uint256[],address[],bool,uint256)", "f2d7f637": "closePosition(bytes32,uint256,address,address,bool,bytes)", +"f2d80192": "chipIn(uint256)", "f2d805d5": "firstStageRaisedInWei()", +"f2d8d099": "stopTS()", +"f2d8d35b": "voidTransfer()", "f2d906cc": "addressFounders2()", "f2d93fb0": "setRushTimeFloorCount(uint256)", "f2d9f46e": "flipPayingDoublrs(bool)", +"f2da01e2": "GetUserName()", "f2da1f0a": "imageAddress(address)", +"f2da2137": "sell_Card(uint256,uint256,uint256)", "f2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", "f2da877d": "dataOfSell(address,uint256)", +"f2daa935": "firstWindowStartTime()", "f2dabd26": "multipleMint(address[],uint256[])", +"f2dac114": "subUserId(uint256,uint256,bool,uint256)", "f2dadd3d": "FundRequestPrivateSeed(uint256,address)", +"f2daf6be": "currentContractState()", +"f2dafa1d": "updateByGeohash(string,uint64)", +"f2db11af": "rewards(uint256,address)", "f2db5493": "VGS()", +"f2db82eb": "ReconVaultXtraStock()", +"f2dbd98d": "Transfer(uint256,address,address,uint256)", "f2dbe0f8": "options(bytes32,address,address)", "f2dbf12e": "personalInfo()", +"f2dc8266": "calculateProceeds(address,uint256,uint256)", "f2dc8878": "setTokenSaleAmount(address,uint256)", +"f2dcb39a": "minimumTokensForPurchase()", +"f2dd372d": "specialAddress1()", +"f2dd3db3": "maxVarient()", +"f2dd4566": "setMinters(address)", "f2dd4be8": "publish(string,bytes32,uint256)", "f2dd4e03": "getTxCon(bool,bool)", +"f2dd5bf1": "setCryptographIssue(uint256)", "f2dd6585": "garanteSystemDepositInAllFunds()", +"f2dd665a": "SetTokenBalance(address,address,uint256)", "f2ddc772": "confirm(bytes)", +"f2ddd207": "_lastWeeklyRewardDate(address)", "f2dddd95": "BLDAToken(uint256,string,uint8,string)", +"f2ddff06": "LogTakeOrder(uint256,address,uint256)", "f2de12fc": "getFxUSDAmount(string,uint256)", +"f2de6699": "getMaxCandidates()", +"f2df0ca4": "isArb(uint256,uint256)", "f2dfa136": "STATUS_DEAL_WAIT_CONFIRMATION()", +"f2dfbdb1": "burnToStablecoin(uint256,uint256)", +"f2dfbf66": "liquidation()", "f2dfd7f5": "cancelWarranty(string,string,address)", "f2e03ad0": "openProvider(address,bool,string,string,uint256,string,uint8,bool,address)", "f2e09c7a": "activatePoint(uint32,int256)", @@ -139279,53 +254815,88 @@ "f2e12a39": "setRole(uint8,address)", "f2e1b1cc": "getWinSlot(uint256)", "f2e1be50": "GDPOracle()", +"f2e220cf": "onOpenNewBet(uint256,address,uint256,uint256,uint256)", "f2e22ae0": "messageBoard(string)", +"f2e23168": "things(uint256)", "f2e253ec": "FUTURE_ME_TOKENS()", "f2e27b33": "signedTransferHash(address,address,address,uint256,uint256,uint256)", "f2e28e16": "BrianexToken()", "f2e29341": "accountQuery(address)", +"f2e2ce08": "_main_wallet()", "f2e2e5ea": "trustedAddressInLUT(uint256)", +"f2e323ba": "tokenDebtLimit(address)", "f2e34909": "PRICE_CUTOFF()", "f2e41c0b": "birthDateOf(uint256)", +"f2e456c6": "_unlockedPool()", "f2e4ff30": "isValidAuction(uint256)", "f2e552a5": "verifyUpdateTransaction(bytes32,uint256,address,uint256,address,uint256)", "f2e55ac1": "getDestinationByIndex(uint256)", +"f2e5c92e": "witty()", "f2e62772": "admin_address()", +"f2e64e73": "storeMsgDataPayable()", "f2e650ff": "PerpetualTestCoin()", "f2e6e170": "addressesImported(address,uint256,uint256)", "f2e6fecd": "Ethernational()", "f2e7269b": "transfer_token2_toContract(address,address,uint256)", "f2e7514c": "buyByName(string)", +"f2e75dab": "rescuePineapples(address,uint256)", +"f2e76ad4": "stockIssueRemain()", +"f2e77aa7": "payTokenPoolInfo(uint256)", "f2e79ab7": "ETHealth()", +"f2e7ff32": "marketBuyCraneWithToken(address[],uint256)", "f2e84f24": "_byrne(uint256)", +"f2e8b934": "_hashEIP712Message(bytes32,bytes32)", +"f2e91350": "updateOrderBatch(bool[],uint32[],uint128[],uint128[],uint32[])", "f2e998df": "ownerRevealOverride(uint256)", +"f2e99ff6": "getLiquidityBalance()", +"f2e9d984": "rescueItems(uint256[],bytes32[],string[])", +"f2e9e85b": "OnBuyCredits(address,uint256)", "f2ea83e6": "executeRecursive(address,address,bytes32,int256)", "f2eae773": "getLockedWalletAmount(address)", "f2eaee02": "applyWait()", +"f2eb0e55": "viewUserReferral(uint256)", "f2eb32fb": "addOffChainContribution(address,uint256,uint256,string)", +"f2eb3b6b": "setFirstClaimIndexToStartVotingAfterEP(uint256)", "f2eb3e34": "init1()", "f2eb5dd3": "tokenUSDRate()", "f2ebde57": "tryExec(address,bytes)", "f2ec602c": "feeWithdrawn()", "f2ec6264": "ownerAddressLUT(uint256)", "f2ecebea": "ratePreIco()", +"f2ecf669": "lawyerOpinionOf(uint256)", "f2ed2148": "newGateway()", +"f2ed8567": "frozenAccountByOwner(address)", +"f2ed9b1c": "initialize(string,address,address,address,address,uint256,uint256)", "f2edb7c7": "purchaseWonder(uint256)", +"f2ee5a69": "incrAAIStats(address,address,uint256)", "f2ee8be9": "setSubmissionOpen(uint256)", "f2eea5c1": "setupAccreditedAddress(address,uint256)", "f2eec570": "transferredAmount(address)", "f2eec69b": "CTOAddress()", +"f2eff06c": "LogBalanceRequired()", "f2f03877": "commit(uint256,bytes32)", +"f2f03dd5": "logprofitandshare(uint256,uint256)", "f2f0967b": "setLifToken(address)", +"f2f12ba0": "addLiquidityTestB22(uint256)", +"f2f1857f": "APE_APE()", "f2f18af2": "Withdraws(address,uint256)", +"f2f20a70": "ClientExited(address)", +"f2f239d4": "CTOKEN_INTERFACE()", "f2f254c7": "getLatestMinorTree(bytes32,uint32)", "f2f2a043": "setUserCommissionRate(uint256)", +"f2f2cf21": "removeSingleCollaborator(uint256,address)", "f2f3384e": "_getGen0Address(uint256)", "f2f3a1d2": "Erc20Token(string,string,uint8,uint256)", "f2f3c773": "vestInterval()", +"f2f3d092": "TOTAL_DURATION()", +"f2f3eb82": "votersCountTeam()", +"f2f40420": "setPlayerBook(address)", +"f2f46d6b": "defaultReSaleCommissionPercentage()", "f2f48e20": "Update_START_PRESALE_TIMESTAMP(uint256)", "f2f4eb26": "core()", "f2f56ffe": "getCommit(uint256,address)", +"f2f5b8d9": "setTwelveHourToken(address)", +"f2f6094c": "trigger5(address)", "f2f62ac7": "TOSPrivateIncentiveContract()", "f2f65960": "setGracePeriod(uint256)", "f2f6861b": "WinbitTest()", @@ -139333,142 +254904,257 @@ "f2f6ff15": "COLOR_BLACK()", "f2f70594": "disableMintForever()", "f2f76549": "startExit(uint256,uint256,uint256,bytes,bytes,bytes,bytes)", +"f2f78857": "TeamDistr(address,uint256)", +"f2f80af4": "addModeratorQuarterPoint(address,uint256,uint256)", +"f2f81111": "complainDelivery(uint256)", "f2f8569f": "buyAndTransfer(address,address,bytes)", "f2f85fce": "GRAND()", "f2f921e6": "snapshotDailyGooDepositFunding()", "f2f977a7": "getBetsByCategory(string)", +"f2f977d9": "testSFI_minter()", +"f2fa12d2": "liquidValue()", +"f2fa865f": "cardList(address,uint256)", "f2fa8f69": "TokenPolicy(address)", +"f2fb2120": "awardItem(address)", "f2fb5706": "deletePersons()", +"f2fbad47": "totalOracles()", +"f2fbce99": "pendingBurner()", "f2fc6deb": "weiToTokensBono(uint256)", "f2fc9100": "init(address,string,string,uint8,uint256,bool)", "f2fd2a49": "galleryThree()", +"f2fd2ea5": "issueTwistAndPrepNextRound(string)", +"f2fd7774": "dummy0()", +"f2fd9a70": "getStakingPools(address)", +"f2fdca65": "burnLogic(address,uint256)", "f2fdddf4": "setEncryptContract(address)", "f2fde38b": "transferOwnership(address)", "f2fdfe34": "createSpecies(uint256,string,address)", +"f2fe017e": "getCreateFastGamesCount()", "f2fe1a1d": "geSoftwareVersionRecordsLength()", +"f2fe868c": "rugPull(address)", "f2fec913": "collectMKR(uint256)", "f2ff0912": "getHolderAtIndex(uint256)", +"f2ffac8f": "walletDetails(uint256)", "f2ffb4fc": "stopLive()", +"f2ffc22c": "locklpUpdate(uint256)", +"f2fff7ae": "lpFeeRatio()", "f30000f9": "NewCloneToken(address)", +"f3000b21": "onBuy(address,uint256,string,uint256)", +"f30039a6": "setYieldFarmingIIEndBlock(uint256)", "f300cf1d": "addUserToMeta(address,uint256)", +"f3011d7f": "sendRejoinAndMatchingBonusPool4(address,address)", +"f30127a5": "BZRX()", +"f3014e36": "getCurrentNumbers()", "f301ac65": "hashBid(address,uint256,address,address,bytes32,uint256,uint256)", +"f301af42": "rewards(uint256)", "f3022de8": "setNewContractAddress(address)", +"f30234a0": "dgas()", "f3025556": "newDeveloper(address,uint64,bool)", "f3025f10": "dataOfBuy(address)", "f302be42": "startTokenRaffle(uint256,address,uint256)", +"f302f4e8": "updateMember(uint64,address,address,string,string)", "f3036c24": "UTORN()", "f30398ef": "Wishcoin()", "f30416ca": "setSaleAuctionContractAddress(address,address)", +"f3041927": "listLiveBall()", "f30431b5": "addAdminAccount(uint256,address)", +"f3044550": "spendFrom(address,address,address,uint256)", +"f30492e8": "_preRelayedCall(bytes)", "f3052d26": "getCategory(uint256)", "f30562b6": "updateRecord(string,string,string)", "f3057ff9": "accsessAccountTransfer(address,uint256)", +"f3058399": "feeGrowthGlobal0X128()", +"f305d719": "addLiquidityETH(address,uint256,uint256,uint256,address,uint256)", "f3072020": "partner_1_name()", +"f3073ee7": "allowStaking(bool)", "f3074b58": "withdrawSDTfromcontract()", "f307946d": "hardCapMainSale()", +"f307b6d0": "updateCheckLiqGauge(uint256)", +"f307e223": "toOctuple(bytes16)", "f3083c44": "GetMyEarnings()", +"f30878c1": "viewer()", "f308846f": "registeredCallbacks(address)", +"f309146f": "openCase_relayed(address,uint256,uint8)", "f3095511": "GetTokenPriceCents()", "f309782b": "LescovexAddr()", "f309caca": "icoEndOfStageB()", "f309e3c5": "allocateUnsold()", +"f309e3f9": "usernameExists(string)", "f30a4a70": "getSoldToken()", "f30a7166": "multiTransferFrom(address,address[],address[],uint256[])", +"f30b0ecb": "exitMarketIfNeeded(address,address,address)", "f30ba854": "tokensPerEther_numerator()", "f30bb8af": "GoalReached()", "f30c0ee6": "getRank05()", "f30c9296": "myUsableBalance()", "f30d3ad4": "crowdSaleAmountRaised()", "f30d4d3f": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"f30dba93": "ticks(int24)", +"f30dbd27": "changeReclaimer(address)", "f30df155": "calculateBorrowAmountWithFee(uint256)", +"f30ec3aa": "multisendErcROTH(address[])", +"f30ed32a": "nWtime()", +"f30f81c4": "isTicket(uint256)", "f30f8508": "setReservedTokensList(address,uint256,uint256)", "f30faff6": "SetExtra(uint256)", +"f30fc480": "packItem(uint256)", "f31011ac": "ANTS_TO_COLLECT_1ANTHILL()", "f310348e": "_removeFrom(address,uint256)", "f3106780": "DoDividend(uint256,uint256,uint256)", "f3107c48": "nestedFirstAnyToAny2(uint256)", "f310a19d": "getPlayerVaultsHelper(uint256,uint256)", +"f3110432": "getStage(uint8)", +"f31143d9": "claimBzbAvailableReward()", "f31174ee": "inactivityReleasePeriod()", "f3125a1f": "deposit(address,uint256,bytes,uint256)", "f31294a4": "announcementURI()", +"f312d773": "checkAllowedUnrestoreAccount(address,address)", "f3130ba5": "setTokensSoldInPresale(uint256)", +"f3136457": "RelayAddressChanged(address)", +"f313b8dc": "checkFind(address)", "f3147b00": "totalICOAmount()", "f314bf46": "setReleaseDb(address)", +"f314c28d": "interestE1()", +"f314d51b": "checkRewardBalance()", "f314e2c0": "CoinExchangeToken(uint256,string,uint8,string)", "f314e976": "parcelGzeWithoutBonus()", +"f315742b": "getAllDexes()", +"f3159665": "setHomesteading(uint256,bool)", +"f315988e": "sliceOverflowLength0Throw()", +"f315df86": "removeDeployer(address)", "f315e81d": "getStage1End()", "f31604c7": "setData()", "f3161022": "convertToEther(uint256)", "f3164eb6": "transferAndFrozen(address,uint256)", "f31660e9": "getOrganisationsSize()", +"f3166164": "addPoolSig(bytes32,address)", "f3169506": "readPurchaseAtIndex(uint256)", "f316ea78": "buyOrderTotal()", +"f317229f": "setNumValidators(uint256)", +"f3177079": "migrate(address,address[],uint256[])", "f317b85b": "ownerAddressNumberMap(address)", +"f317bcbe": "totalEnrollments()", "f3181001": "founderAndTeamSent()", +"f31821fe": "PART_DELAY()", "f3182d6c": "setFeeRate(address,uint256,uint256)", +"f318722b": "calcOrderID(address,bytes32)", +"f3188248": "SetPozTimer(uint256)", "f31887e6": "tokenTransferByAdmin(address,uint256)", "f318c75f": "dvipAddress()", "f318cc4a": "invite(uint256,uint256,uint256)", +"f318db0c": "yflStored(uint256)", +"f318e557": "addressBalance()", "f3191443": "toggleMigrationStatus()", +"f3191a46": "refReward()", "f3199e98": "setMinWeiForDInit(uint256)", "f319a899": "NameProvider(address)", +"f319deae": "NewArtwork(address,uint256,bytes)", "f31a044d": "test_bytes(bytes,bytes)", "f31a18a5": "endICOStage7()", +"f31a5f3e": "getRewardPerEpoch(bytes32)", "f31b4e89": "updateEpisode(uint256,string,uint256)", "f31bac4d": "SwitchLoanOwner(address,uint256)", "f31bebaf": "BugBountyOneBreaker()", +"f31bfd89": "twapAEth()", +"f31c605e": "setKimbapPerBlock(uint256)", +"f31c71d5": "setMixPrice(bytes18,uint256)", +"f31da7ca": "newWNTexchange(address)", +"f31de1fa": "GetMinMaxDuration()", +"f31dec5a": "getCastleBasicInfoById(uint32)", "f31df3f8": "AddItem(uint32,uint16,uint256,uint16,uint16,string)", +"f31e1c9f": "BPE()", "f31e3e84": "AML()", "f31e731e": "attack(address,bytes32,uint256)", +"f31e82c0": "exercisePOLY(uint256)", "f31ed9e6": "DescartesToken()", +"f31f3574": "_nftfactory()", +"f31fcd91": "totalMintedUSDb()", "f31fe982": "endGround(uint256)", "f3200a1c": "change_symbol(string)", "f3201424": "register(address,address,address)", "f3203dc0": "MultisigsChanged(address,address)", "f3205c93": "isUserBanned()", +"f3206157": "uniLocked()", "f320d963": "assertEq(string,string)", "f320f858": "setRandomAddress(address,address)", "f32106f0": "TemplateToken(uint256,string,uint8,string)", "f32113d5": "setBgxWalletAddress(address)", +"f321335c": "ETHneeded()", "f3214652": "NHSToken()", +"f3215b2e": "offsetRequirementMet(address,uint256)", "f321653a": "setCommunityBallotStatus(bool)", "f3217345": "getShowText()", "f32188a5": "reinvest(address,bool)", +"f321b9e2": "gaugeMapping(bytes32)", "f3221c7f": "hasHash(address,bytes32)", +"f3223bed": "complainPeriod()", "f322770c": "LogWhitelistAdd(address,uint256,address)", "f3227dc4": "cancelDeal(string)", "f322a1cf": "BlueChainToken()", "f322c755": "daoManager()", +"f322dc2e": "findEarn(address)", +"f322dd0f": "updateCurrentApr()", "f32306d2": "registerNameXID(string,uint256)", +"f323580b": "stakeInfoByLabel(bytes32)", +"f3236099": "isExecutorAssigned(address)", "f3236460": "closeUp()", "f323a061": "lottoQueue()", +"f323ff76": "createGroup(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f3250fe2": "purchaseTargetAmount(uint256,uint256,uint32,uint256)", +"f3253b19": "LogDeleteAllReports(uint256,uint256)", +"f3258da1": "isValidTrueProof(bytes32)", +"f325c07c": "price_x_base()", "f3269716": "year()", "f326be05": "Centaure()", +"f326f0d7": "setLockup(address,uint256,uint256)", "f3278191": "BuyFST(address,uint256,uint256,uint256)", "f32784cd": "getGratitudeOf(address,uint256)", "f327b7fc": "isNotZero(address,string)", "f3283fba": "setMultisig(address)", +"f3287a2a": "TEAM_MEMBER_4_SHARE()", "f3290290": "createIncident(bytes32,bytes32,uint256,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"f3290d75": "blacklistAddress(address)", +"f3295b93": "sha256sum()", +"f329b52c": "maxSplitAmtDai()", +"f329ce99": "votedAction(bytes32)", +"f32a12ac": "setTrusted(address,bool)", "f32a547c": "getBuy(uint256)", "f32a72eb": "airDropMembers(address)", "f32a9f77": "ReceiveEther(address,uint256)", +"f32abfac": "collateralFSM()", "f32b85e8": "timeScale()", +"f32bca64": "getDaysSinceDeposit(address)", +"f32c53a9": "l3l7users()", +"f32cd08d": "addErc20List(address[],uint256[])", "f32d61eb": "setDevTokensPercent(uint256)", +"f32d6846": "adai()", +"f32d73d0": "fulfill(bytes32,address,bytes32)", +"f32de23b": "nonstandartProcedure(address,address,uint256)", "f32e8038": "setPercentIncrease(uint256,uint256,uint256)", "f32eca11": "revokeAccessDeposit(address)", +"f32ef051": "_supplys(uint256)", "f32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", "f32f6a23": "olympus()", "f32fc856": "Wanchain()", "f32fe995": "left96(uint256)", +"f32ff137": "startDeal()", +"f32ffd69": "claimRewardsForPeriods(uint256[])", +"f3301f6b": "withdrawRewards(uint256,address)", "f3302a4d": "ChangeTransferStatus(bool)", "f3305ae2": "setName(bytes32,address)", +"f330d980": "reward_value()", "f331020c": "GAMEPAUSED()", "f3310628": "allocateTokensInternal(address)", +"f33139ab": "RevertingReservation(address)", "f33146af": "test_twoTrueAsserts()", "f3316ef5": "countStudentRequest()", "f3318fed": "ThrowsInConstructor(bool)", +"f331920b": "bad(uint256)", "f3319243": "decimalFraction(uint256,uint256)", +"f331bff2": "totalClaimsAvailable()", "f331de4c": "addShare(address,uint256,uint256,uint256)", +"f33218cf": "heat()", +"f3321ce5": "phaseIR()", "f332511f": "getTxcode(uint256)", "f33261ac": "stageCount()", "f33280b2": "etherLimit()", @@ -139477,121 +255163,230 @@ "f3333e7f": "etherProceedsAccount()", "f33376c6": "createNext(address,string)", "f333fe08": "getCertificate(bytes32)", +"f3349592": "MaxInvestorContributionChanged(uint256,uint256,address)", +"f334a60c": "setNextPriceOf(uint256,uint256)", +"f334dcb2": "getCommission(address)", +"f334de9a": "isSelfManager()", +"f3358a3a": "getItem(bytes32,uint256)", "f3358ac4": "getNum(uint256)", "f33670aa": "sharesAddress()", +"f3368f90": "updateRecurringFee(uint256)", "f336bc7e": "maxDecreasePct()", "f336e80a": "setMaximumVotingWindow(uint256)", +"f33725ee": "contributeWithAllowance(address,uint256)", "f3372898": "dtrade(address,uint8,uint8,uint256[],address[],bytes32[])", "f337616c": "PETER()", "f337a0bb": "getLLV_edit_4()", +"f337a9d6": "getAutoExec()", "f337c2e1": "calculateNextEtherValue(uint256)", "f33801e0": "setCoachPrice(uint256,uint256)", "f3382694": "isCamp()", +"f33830b0": "approve_181(address,uint256)", "f3388e75": "timelockController()", "f338c984": "initialBountyAmount()", "f3391998": "hasHash(uint256)", "f339292f": "mintingStopped()", +"f3395c52": "mul112(uint112,uint112)", "f3396905": "lockedNowBalanceOf(address)", +"f339b94d": "swap_give_eth(uint256,uint256)", "f339c504": "lockBalance(uint256)", +"f33a3be9": "ethOracleAddress()", +"f33a6219": "setStartOneSale(uint256)", +"f33a7306": "claimRewardAndTickets(uint256)", "f33aa95d": "setIsTransferEnabled(bool)", "f33ae7fd": "auctionOf(uint256)", "f33b1ea5": "rewardUsers(uint256,address[],uint256[])", +"f33b4e3e": "setPlate(address,address)", +"f33b5541": "updateCommissionWallet(address)", +"f33b80e3": "aclists(address,address)", "f33d0f3a": "requiredBet()", +"f33d738e": "setMaxOnce(uint256)", "f33d9a52": "get_data_benefited(address,string)", "f33dc1fa": "founderTokensAllocated()", +"f33ea0d9": "EventFight(address,address,uint256,uint256,uint256,uint256,uint256)", +"f33f8ef4": "SetTransferLock(bool)", "f33f8f26": "setpubprize(uint256)", "f33f9522": "readCoin(uint256)", "f33ffc16": "addSpecialBonusConditions(address,uint256,uint256)", +"f3400c2d": "addPool(address,address,uint256,bool)", +"f3404f16": "setStubFund(address)", "f34080b3": "MIN_INVESTMENT_ICO_PHASE_TWO_POUNDS()", "f3408110": "transferWithFee(address,address,uint256)", "f340fa01": "deposit(address)", +"f341246a": "Withdraw(address,address,uint256,uint256)", "f3412942": "accountLevelsAddr()", "f34186c8": "endEthGet()", +"f3418781": "isFinal()", "f341cae8": "setEmergencyAccount(bytes32,bytes32)", "f341d3ba": "bandwidthFactor()", +"f341e228": "debtDecimals()", "f3433ff2": "callbackTime()", "f3436873": "totalAxiesRewarded()", "f3436c85": "TKXToken()", "f343ccbd": "CrystalSkull()", +"f343d683": "tokenInterface()", +"f343ebed": "getContractBalanceEther()", "f3444701": "newTankType()", +"f344ac2f": "multiSendTokens(address,address[],uint256)", +"f344da67": "MAX_FEE_PERIOD_DURATION()", +"f344dcce": "totalMultiplier()", "f344f4fa": "HARDCAPPED_SUPPLY()", +"f3457c01": "curves_list(uint256)", "f345d06b": "getTileHp(uint16,uint8)", +"f345d267": "tokenToReserveTransferInput(address,uint256,uint256,uint256,address)", "f3463272": "signupFee()", +"f34632c9": "openERC721Trade(address,uint256,uint256)", "f3465181": "preSeedAllocation()", +"f3465cb2": "M5TokenUpgrade(address,address)", "f3466b47": "setTotalCollected(uint256)", +"f3466dfa": "poolName()", +"f34674d6": "seeAnimalRole(uint256)", +"f346a442": "country_getAllStandingCountriesForContinent(uint256,bool)", +"f346bddd": "reclaimKILOL()", "f346fd74": "TraceChain()", +"f3470167": "transferAccumulatedCreationFees(address)", +"f347c161": "LogReportSubmissionError_InvalidAuditor(uint256,address)", +"f34822b4": "initialize(string,address,address,address)", +"f348285b": "riskFundAddr()", +"f3482ee6": "maxApy()", "f34839d1": "C50()", +"f3485803": "requestDai(uint256)", +"f34862de": "getPendingLUSDDebtReward(address)", +"f348e8b2": "settlementPrice()", +"f348ebae": "TokenIsPaused(bool)", +"f3490489": "getNumber(uint256,uint256)", +"f34922df": "TMTG_Unpause()", "f3492915": "confirmSpendLimit(uint256)", +"f34958f8": "FlipEnded(bytes32,address,uint256)", +"f34963c8": "getTicketTransferFee(uint256)", "f34969d1": "minimumFundingCHF()", +"f349b301": "hex2EthWithBonus(uint256,uint256)", +"f349d6b1": "changeMinDai(uint256)", "f349e3e3": "own(address)", "f34a5e85": "MercuryToken()", +"f34ad1cc": "setStakingCapEnabled(bool)", +"f34af3b4": "oracleChallenged()", +"f34b5e48": "defaultActivePhase()", "f34b95b3": "register(string,address,bytes32)", +"f34bc282": "listDda(address,uint256,uint256,bool)", +"f34c4309": "LogRefunded(address,uint256,uint256)", "f34c7010": "commitSecurity(address,uint256,uint256)", +"f34cb294": "internalStateDecimal()", +"f34ce4bb": "getYeldPriceInDai(address,address,address,address)", "f34d22d0": "getQuickPromoRemainingBlocks()", +"f34d250d": "tot(uint256,address,address)", +"f34d385d": "isClaimAirDrop(address)", "f34df94e": "Version(string,address,address,bool)", "f34e2699": "isPresaleFinalized()", "f34e3723": "release(string)", "f34e4c60": "currNumOfBattleCards()", +"f34e8497": "updateHash(bytes32[2])", "f34ed4e6": "RanDAOPlus(address)", +"f34ed77a": "_twos_complement_64(int64)", +"f34f07ec": "m_processed_mint_id(bytes32)", "f34f43f6": "getRepTokenAddress()", "f34f5f45": "Election(string)", +"f34fc804": "playlottery(uint256)", "f3512ce0": "multiLock(address[])", "f351d166": "_depositEscrow(uint256)", "f3522656": "getRejections(uint256)", +"f3527f0c": "addPack(uint256[],uint256[][])", "f352c45c": "createChallenge(string,string,uint256,uint256)", "f353108b": "fechVoteResultForCandidate(address,uint256)", +"f3533c35": "setMonthlyLimit(uint256)", "f353ae48": "goodluck()", +"f353db33": "NewDeployer(uint256,address,address)", "f354040c": "SpreadToken()", "f3541901": "execute(address,bytes,uint256,uint256)", "f3548cd3": "getBagCount()", +"f3549e36": "leafClaimed(uint256,bytes32)", "f354e2c3": "_getSeason()", +"f3556218": "DrawingTransactions()", +"f3558460": "balanceOfBifi()", "f355b92d": "BuyTokens(address)", +"f356385c": "addStudio(uint8,address)", "f356d6cc": "getPI_edit_18()", "f356e8de": "placeNewSurvey(bytes32,uint256,uint32,uint256)", +"f3571819": "initialize(string,string,uint8,uint256,address)", "f3574a20": "TokenTransacted(address,address,bytes32,address,uint256,address)", "f3576220": "withdrawls()", +"f3579e54": "withdrawableTmv(uint256)", +"f3580145": "runTask()", "f3582373": "getTokenAddressesLength()", "f3586fb9": "_isAuthorized(address,uint256)", "f35898bd": "PreviousPayout()", +"f358a6f3": "Market(uint256)", "f358b3de": "REKTMultiSigWallet()", "f359671c": "withdrawWithReference(address,uint256,string)", +"f3598e9d": "gatewayOwnsToken(address,uint256)", "f359b03c": "recalcBonuses()", +"f359b46f": "turbulenceIndicatorPercent()", "f359d66d": "driverCount()", +"f35a03e4": "_getfeeWallet()", +"f35a75e0": "taxSingleAndModifyParameters(address,bytes32,bytes32,uint256)", "f35a8796": "removeHouseHold(uint256)", "f35b3b51": "Bullioncoin()", "f35b6068": "selectWinningNumber()", "f35ba5d3": "acceptCeoOwnership()", "f35c172e": "getSecondHexByte(bytes1)", +"f35c46eb": "isAllowedForList(uint256)", +"f35c7f8c": "setTokenConfig(address,bool,bool,bool,bool,bool)", +"f35d4b61": "setRoomStartTime(uint256,uint256)", "f35d606c": "ETFToken(address[],uint256[],uint256)", "f35dad40": "totalRedeemed()", +"f35dba44": "totalPoolRewards(address,uint256)", +"f35e1a53": "pool_num()", "f35e3945": "SRHCoin(uint256,string,string)", "f35e4a6e": "setStartBlock(uint256)", +"f3600af8": "approve_276(address,uint256)", "f360234c": "compare(uint256,uint256)", "f3604e54": "advisorsKey()", "f36089ec": "getConversionRate()", "f3608b57": "_getEthToUsdPrice(uint256)", "f360c183": "setNonce(uint256)", +"f360dde8": "total_bonus()", "f360e22f": "celebrityCount()", "f3611719": "confirmFriendship(string)", "f3616a90": "UpdateHOLDer(address,address)", +"f362353c": "setSashimiPerBlock(uint256,bool)", "f362b9af": "StartNewMiner()", "f362d78f": "testBitNotEqualSuccess()", +"f363147a": "approveLink(address)", +"f363393b": "lptoken()", "f3634033": "token_b_amount()", "f363441f": "getCreatorDotBalance()", "f363449f": "reservationSupply()", "f3635a02": "vc2Wallet4Pct()", "f3637d51": "setPayLock(bool)", +"f3640e74": "vestingCliff()", +"f36464aa": "setContract(address,bytes32,address)", "f3647597": "setGrantVestedEDEXContract(address)", +"f364c90c": "isClaimed(uint256,uint256)", "f364e7f4": "_investAsEarlybird(address,uint256)", "f36631e7": "createHero(uint16,address)", "f3667517": "getMinter()", +"f36687ab": "_checkContractStorageLoad(address,bytes32)", +"f3668e11": "alpacaFarm()", "f3669ec9": "hopefuls(uint256)", "f36706cb": "SENSToken(address,address,uint256,uint256)", +"f3674c8b": "isConfirmedGblock(uint32)", "f3678cd3": "updateOffChainTokens(uint256)", +"f367932d": "getNumberOfMoneyPots()", +"f367fae1": "uniswapLpToken()", +"f368db99": "updateFlashLoanAddress(address)", +"f368e06a": "claimSashimi(address[])", +"f368fa78": "initialize(address,address,address,address,address,uint16,bool)", +"f3692c3e": "collect(uint256,bytes32)", +"f36a079b": "CONTRACT_DIVIDENDS_POOL()", "f36a1fd9": "_allowBuyDirect()", "f36a4bd3": "ReceivingContractTokenFallbackFailed(address,address,uint256)", "f36b135d": "PRICE_EXPONENT()", +"f36b2425": "getBorrowingRate()", +"f36b6355": "requestFutureWithdraw(address,uint256,uint32)", +"f36b9a9a": "addFee(address,uint256,uint256)", "f36c0810": "RANDOM_BYTES_COUNT()", +"f36c0a72": "updateReward()", +"f36c442d": "setRewardCollector(address)", "f36c83f0": "getPuppy(uint256)", "f36d1b8e": "SignStopDividend()", "f36d1e4e": "setRewards(uint256,uint256,uint256)", @@ -139599,114 +255394,218 @@ "f36db900": "gameStarterDividendPercentage()", "f36e20db": "getStage1Start()", "f36e8dea": "MedicalCannabis()", +"f36ede83": "nextConvertTime()", "f36f235d": "getLedger()", +"f36f7052": "ceilPawn(uint256,uint256)", +"f36f8b65": "showElement()", +"f36fa70d": "startSalenETH(uint256,uint256,uint256,uint256,uint256)", "f36fd108": "editTitle(uint256,string)", +"f36febda": "convertToStablecoin(address,uint256)", "f370031e": "BetOnATeam(address,uint256,uint256)", "f3701da2": "build(address)", "f3702b82": "setBonusPattern(uint256[],uint256[])", "f3703a69": "LogGrantCreated(bytes32,uint256)", "f3706bb7": "killTransaction(bytes32,bytes32,string,string)", +"f370e8c5": "isOwner(address,address,uint256)", +"f370f6bd": "settleLiquidityToken(address,uint128,uint32)", "f370ff51": "LogTokenPurchase(address,address,uint256,uint256)", "f371475a": "initialiGnSupply()", "f371ec49": "pausedB()", +"f371efa4": "decimal(uint256)", +"f3728193": "ResolveAgon(uint64,address,uint64,address)", +"f3737b8a": "voterRewardPerBlockDenominator()", "f3737ffd": "setDiscount(uint256[],uint256[])", +"f37381ad": "getChallenge(address)", "f3746947": "giveBirth(uint256,uint256[2],uint256[2])", "f3746ff7": "advisorReserve()", +"f374df63": "setEachDayRewardAmount(uint256)", +"f375116b": "getMaximumDuration()", +"f3751313": "getUserData(uint256,uint256)", "f375bcaa": "failedTimestampSeconds()", "f37633f9": "Internet()", "f376daa8": "MMX(uint256,string,string)", +"f376ebbb": "validatorRegistry()", "f3773466": "endIcoRoundManually()", +"f377e7cf": "stakingSupply()", "f377f5b7": "setAirdropTotalSupply(uint256)", "f3781697": "HubiiCrowdsale(address,uint256,uint256)", +"f3784caf": "stakedERC721ByUser(address,address,uint256)", "f3784dec": "withdrawFailed(address)", +"f378d1d4": "farmsLength()", +"f378e93d": "calcClaimPie(address)", "f378ff76": "random(uint32,uint32)", +"f378ffe5": "IsInBlackList(uint256)", "f3791477": "OLD_TOKEN()", "f3794914": "mintParticularPart(uint8[4],address)", +"f3796bdc": "setMembers(address)", +"f379dfd0": "getStaked(address,address)", "f37a7d4d": "boosters()", +"f37a8623": "TRUSTED_MSG_SENDER(address)", +"f37a8b1e": "sEMA()", "f37a9c1c": "ALLOW_BETA()", +"f37ac61c": "heal(uint256)", +"f37aefa1": "getERC20BalanceFrom()", "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)", +"f37c0c1c": "greeting_default()", +"f37c26fd": "requestWithdraw(string)", +"f37c4d6c": "PublicSaleSupply()", +"f37c4dc8": "calcRate()", +"f37c52b1": "_oldSupply()", "f37cc477": "calcOutput(uint256,uint256)", +"f37cdc8e": "e(uint256)", +"f37d0742": "rateUSDETH()", "f37d11cc": "canTransferFrom(address,address,uint256)", "f37e592d": "shopStoreId(address)", "f37e741e": "projectWeight(uint256)", +"f37f4d32": "uponDeposit(address,uint256,uint256)", "f37f8345": "getTokenRates(address,address[])", "f37fda1b": "setUser(address,address,bool)", "f37fdaf5": "calculateProfitPercent(uint256)", "f37ff01b": "getLLV_edit_13()", "f380729d": "claimB2()", +"f380795a": "_exchangeEtherForSynths()", "f3813163": "proxyTakeEtherBack(address)", "f3817b23": "getWizzPandaCountOf(uint256)", "f381a3e2": "FuelingToDate(uint256)", "f381f2a5": "minimumCap()", +"f382320c": "LogPriceUpdated(uint256)", +"f38250e0": "depositEthToBank()", +"f3830335": "governanceShare()", +"f38320ce": "createTokens(address,uint256[],uint256[])", "f38323bb": "bountyDurationInBlocks()", "f383c7b3": "setCrowdsaleStart(uint256)", "f383d6b9": "OwnerValidatorImpl()", +"f383dc55": "addNewCompound(uint256,uint256)", "f384632c": "updateContestTeam(uint32,uint32,uint8[],uint32[])", "f384764c": "oraclize_query(string,bytes[2])", +"f38488ec": "approveTokens(address,uint256)", +"f384fe76": "totalRewarded(address)", "f3850fda": "receiveTokens(uint256,uint256)", +"f38511e0": "applyGovernanceForUpdateWhitelist(bytes32)", +"f385af29": "FinalizeRound(uint256)", +"f385cecb": "basis()", "f385d890": "cnt_registrations()", +"f385e381": "_bnfSwapContractAddress()", +"f3865873": "getFlashloan(uint256,address,address)", "f3868555": "orderEthOf(address)", "f386b8fd": "TestToken2()", "f3873e7b": "PublicBattle()", "f38780e2": "winnerPaid()", +"f388683b": "toRay(int256)", +"f3887eee": "pickle()", +"f3888549": "withdraw(string,address,uint256,uint256[2])", "f388b046": "currentTask()", "f388ef80": "updateXPLPerEther(uint256)", "f389057f": "_setMouthValue5(uint256)", "f3898a97": "convert(address[],uint256,uint256)", +"f389b0be": "_pauseIco()", "f38a6163": "IncMainSupply(uint256)", "f38a8262": "grantPermission(address,bytes32)", +"f38a8c06": "withdrawableOneInchFees()", +"f38a95e3": "pond()", +"f38ac87c": "countSetForSale()", "f38ad578": "setSecondWinner(address[])", "f38afbf7": "setModuleEnable(string,uint256)", "f38b0585": "withdrawAdvisorFunds()", "f38b0600": "fireEventLog3()", "f38b2ef0": "testTheFirstMultiplier()", +"f38b37f0": "claim(uint8,uint8)", +"f38b9cc4": "DrawRound(uint256,uint256,uint256,string,uint256[])", +"f38c2583": "getpurchaseTokenAmount()", +"f38c7ce4": "govUpdateSettings(address,uint256,string,string)", +"f38ced52": "bancorPrice(address,address,string,uint256)", +"f38d573f": "calculateLiquidationPrice()", "f38d5cb9": "_getHash(address,address,address,address)", "f38db3d8": "setRunningInternal(bool)", +"f38e1a51": "fundShareParticipantsTotalTokensCurrentRound(uint8)", "f38e5ca2": "getBlobStoreFromFullBlobId(bytes32)", "f38fb65b": "revertCall()", "f3905b82": "ibaMultisig()", "f390cae4": "ADDR_TKG_TECH_FUND()", "f390e4b4": "getResidentNumber()", "f3913e69": "tokenTransferFrom(address,address,address,uint256)", +"f391444c": "FeeDeduction()", +"f3917bd2": "craft(uint256)", "f391f074": "accountIdForAddress(address,address)", "f3922cde": "addExceptAddress(address)", "f39259d0": "_batch2_icosaleStartTimestamp()", +"f392c35a": "cashSavings()", +"f392ea45": "cancelNewBid(uint256)", +"f3930dbf": "approve_27(address,uint256)", +"f39318e7": "maxCeiling()", +"f39349ef": "networkGovernor()", "f393b3b0": "_DataRegistered(bytes32)", +"f393c23e": "HashUpdated(uint256,uint256)", +"f393cbc2": "whitelistCountry(uint16)", "f393f022": "icoStartP5()", "f3942753": "addTxToCustomerRegistry(address,bytes32,uint256,uint256)", +"f3943ca9": "licenceTeller(bytes2)", +"f3944dc6": "CreateT808(address,uint256)", "f3945ca0": "addEndorsement(bytes32,bytes32)", "f39460c4": "setCheckMinContribution(bool)", +"f394a129": "writePut(uint256,uint256,uint256,uint256)", +"f394b261": "_decode(uint256,bytes,uint256)", +"f39510d2": "rewardPrediction(address,uint256)", "f3956a71": "isMEH()", +"f395ae5c": "addTrustee(address,bytes32)", "f396282d": "signupVerify(bytes32,bytes32)", +"f39649ab": "setHouseCommissionPercentage(uint256)", +"f39656fe": "setFeeAddressSt(address)", +"f396b84c": "getTokenToTrxOutputPrice(uint256)", "f396cd66": "weiAmountShare()", +"f396d8da": "pendingSALT(uint256,address)", "f396e81b": "SALES_DURATION()", +"f396ebfe": "aString()", "f397884b": "preIcoOpeningTime()", +"f3979588": "TokenRefund(address,address)", +"f3982e5e": "addMiner(address)", "f3983e44": "createAmountFromTmedForAddress(uint256,address,address)", +"f398789b": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[6])", +"f3989c87": "minClaimWindow()", "f398dc28": "aprovarUsuario(address,uint256)", +"f398e872": "depositPayment(address,address,address,uint256,uint256,bytes,bytes)", "f398faaa": "getRank09()", "f3993d11": "batchTransferFrom(address,address,uint256[])", +"f3995224": "exchangeWithVirtual(address,bytes32,uint256,bytes32,address,bytes32)", +"f3995c67": "selfPermit(address,uint256,uint256,uint8,bytes32,bytes32)", +"f3995db7": "minPaymentUSD()", "f39981e1": "burnStake(address)", "f3998918": "getPreSaleTokenAmount(uint256)", +"f3998f00": "showoldTCWinners(uint8)", "f39992e4": "Blackwood()", "f399c7e6": "startGame(address,uint256)", +"f399e22e": "initialize(address,string)", +"f399f1dd": "addMultipleAuthKeys(address[])", +"f39a19bf": "nodeClaim(address)", +"f39a511b": "retreivePolicyBought(string)", "f39afaba": "GCV()", "f39b1e74": "CQMVValueCirculateAssets()", "f39b5b9b": "ethToTokenSwapInput(uint256,uint256)", "f39b7fb1": "get_dati_articolo(bytes,bytes,bytes10)", "f39bfb52": "giveBountyTokens(address,uint256)", "f39c2197": "numberOfPartners()", +"f39c38a0": "pendingGovernance()", +"f39c595a": "MODULE_LOAN_LIMTS()", "f39cce01": "convertLotIdsByAddress(address)", +"f39d0aeb": "addEmployee(address,uint256,uint256)", "f39d359b": "initDemoc(string)", +"f39d3c49": "partialReward(uint256,uint256)", "f39d9f19": "CSES1()", +"f39e3c53": "getLockUp(address,address,uint256)", +"f39e5a1f": "renounceStateReceiver()", "f39e6e1e": "OwnerAddition(address)", +"f39e7c0d": "issueI(address,uint256[4],string[4])", "f39e9fa6": "setERC223Activated(bool)", "f39ec1f7": "lookup(bytes32)", +"f39f219d": "changeBill(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,string,string[])", "f39f421e": "FIBKAD()", +"f39f5364": "getBeneficiaryInfo(uint8,address)", +"f39f5e11": "_getNewTroveAmounts(uint256,uint256,uint256,bool,uint256,bool)", "f3a04af4": "PUBLIC_TOKENS()", "f3a133a9": "setStartAt(uint256)", "f3a16c3e": "tokenCreationCapWithOutBonus()", @@ -139715,102 +255614,192 @@ "f3a1f828": "EventRandomLedgerRequested(address,uint256,uint256,uint8,address)", "f3a247cb": "ZooToken(uint256)", "f3a27963": "unpauseMints()", +"f3a2ec38": "NewSwapToken(address)", +"f3a332ff": "MESSAGE(string)", "f3a3abc6": "setWhitelistTransfer(address,address,bool)", "f3a3bef4": "innerScope()", "f3a3de38": "EMACCrowdsale(uint256,uint256,uint256,address)", "f3a44fe1": "withdrawForWorkshop()", +"f3a491e4": "setOpenPeriod(uint256,uint256)", +"f3a49cc8": "participateMine7()", "f3a49f90": "sendOwner()", +"f3a4d0bc": "reward_level_4(address)", "f3a504f2": "funded()", "f3a53cd8": "ICOWIZARD(string,string,uint8,uint256)", +"f3a54340": "getNodeStake(uint8)", "f3a5626b": "addPurchased(bytes32,uint256)", "f3a5644d": "crowdsaleEndedTime()", "f3a5950e": "testHighestTranch()", +"f3a5efeb": "modError(address,uint256)", "f3a5f262": "setMemberTier(address,uint256)", "f3a60cb4": "unLockAddrOwner(address)", +"f3a65bf9": "pausedTokens(uint16)", "f3a670cd": "Redeemed(address,uint256,uint256)", "f3a67ad2": "subAccountBalance(address,uint256)", +"f3a6a11b": "incomingTransferExecuted(uint256)", +"f3a6ef57": "Canceled(address,uint256)", +"f3a6f323": "getOut(uint256)", "f3a8041f": "Crowdsale(address,uint256,uint256,uint256,uint256,uint256)", +"f3a8286f": "finalResult()", +"f3a833c2": "_transferGuard(address,address,uint256)", +"f3a87196": "distributeBorrowWpc(address,address,bool)", "f3a87492": "AntiFakeLabelToken(address,uint256)", +"f3a87bf9": "_mintedCommunityTokens()", "f3a8bcaa": "_logGameGiftInfo(address)", +"f3a8be27": "getMySender()", +"f3a99f8c": "_calculatePriceOfLP(uint256,uint256,uint256,uint256,uint256)", +"f3a9a5ee": "setCtoAddress(address)", "f3a9bf03": "verifyImage(address,string)", "f3aa4420": "_grandTournamentBooty(uint256,uint256,uint256,uint256)", "f3aa67ad": "buyTokensOraclePayIn(address,uint256)", +"f3aad877": "required_sigs_secure()", +"f3ab26cc": "tokensRetained()", +"f3ab2c6d": "midnightPrize()", "f3ab7ea9": "seeker()", +"f3abde32": "actions(bytes32)", "f3ac2732": "confirmed(uint256)", "f3ac3df5": "prizeFund()", "f3ac9ee4": "parseOpenTx(address[11],uint256[10],uint32[4],bool,bytes)", +"f3acae3a": "v2()", +"f3acb258": "getRequiredWithoutInactive()", "f3acc06b": "retrait_1()", "f3acc477": "addTotalEtherValue()", "f3ad0dd8": "multiTransferToken(address[],uint256[])", +"f3ad6034": "withdrawAndRepayUsingCol(address,uint256,uint256,uint256)", "f3adcc46": "getMinerHashRateCurrentHalving()", +"f3addc8b": "ChangePermissionManager(address,bytes32,address)", "f3ae2415": "isManager(address)", +"f3ae3a87": "OpenLottery(uint8,uint8,uint256,uint256,uint256)", "f3ae5acd": "LastExtractTime()", "f3aee9f9": "tokensUnlockPeriod()", +"f3aef338": "getLengthInEpoch(uint256)", +"f3af2664": "memberBuyFounderDeveloperLicense(address,address,address)", +"f3af9c53": "finishChangeDepositorPercent()", "f3afe129": "hourPotExpiration()", "f3aff181": "collectBagHolderFund(uint256)", +"f3b05a85": "burnAfterTwoHours(address)", "f3b07bb1": "maxEthPerTransaction()", "f3b15ffd": "test_insert_containsId()", "f3b16265": "onDraw()", +"f3b16392": "UpdateDeposit(bytes32,address,uint256,address,uint256)", +"f3b191c2": "agreeToObjection()", +"f3b1f27e": "approveThisContract(address,address)", +"f3b2d9a4": "ChangePIN(uint32,address)", "f3b303cd": "AdvanceToken()", "f3b35100": "voteOf(address)", "f3b3a9fa": "maxReserve()", +"f3b3d6cd": "liquidateFee(address,uint256)", "f3b423d5": "updateReloadAmount(uint256)", "f3b42c40": "isOnSaleAny3(uint256,uint256,uint256)", +"f3b43386": "disableFund()", +"f3b43ac3": "setLoansLimit(uint256)", "f3b4735e": "lotteryAddresses(uint256)", "f3b4eccb": "ChallengeFund()", "f3b50c04": "rescind()", "f3b55007": "TDx(uint256,string,uint8,string)", "f3b5678f": "ETHER_MAX_CONTRIB()", "f3b585cc": "nSteps()", +"f3b595f0": "getRewardResult(address,address[])", "f3b5a5af": "bonusForEveryone()", "f3b600ec": "_allocateTokens(address,uint256,uint256)", +"f3b65fb2": "startStream(uint256)", +"f3b674c9": "chargeSppByID(uint256)", "f3b6a748": "unpauseFrom(uint256)", "f3b75ee3": "totalCommunityFundMinted()", "f3b77f30": "close(bytes,bytes)", +"f3b79b29": "setLoansFactory(address)", +"f3b7c4b7": "numberOne()", +"f3b7dead": "getProxyAdmin(address)", +"f3b83791": "setRequestGasLimit(uint256)", "f3b849d6": "_allocateReferralTokens(address,uint256)", +"f3b85d9a": "CreatContract(string,string,string)", +"f3b87779": "advanceEpoch(uint256)", +"f3b8912b": "okStrats(address)", "f3b8b2a9": "weiBuysHowManySeconds(uint256)", +"f3b96b8d": "UnregisteredAssetProxyError()", "f3b978c1": "checkProof(bytes32[],bytes32[])", "f3ba138e": "MineLevel(uint256)", +"f3ba165c": "checkpointValue()", +"f3ba5ff5": "votingLastedLongEnough(uint256)", +"f3ba63b8": "announceCancel(address,address,uint256,address,uint256,address,uint256,uint256)", "f3baa092": "RemoveRequestEvent(address,address)", +"f3baf0ef": "regPro(uint256)", +"f3bb0f4f": "getsmallpoolmappingdata(address)", "f3bb9741": "commitmentCampaign(uint256,bytes32)", "f3bbc84c": "tierNum()", +"f3bbc8c4": "DemocEditorsWiped(bytes32)", +"f3bbcb31": "createPainterPublicKey(string)", +"f3bc7d2a": "setMaxAffiliateFee(uint256)", +"f3bc96ea": "connectorContract()", +"f3bcd237": "blockLimit()", +"f3bcf1e6": "ClaimCompTwo(address[],uint256)", +"f3bd25f7": "SAI_TokenContractAddress()", "f3bd27a4": "secondStageMinting()", +"f3bd733e": "getStaticMultipleFoo()", "f3bda50a": "getSetNewTerrainPrice(uint256,uint256,bytes32)", "f3bdc228": "destroyBlackFunds(address)", "f3bdea04": "burnICACOIN(uint256)", +"f3bdf696": "tokenFromR(uint256)", "f3bdf8ba": "requestEthereumLastMarket(address,string)", "f3be07eb": "getDefaultTranches(address)", "f3be1e35": "VIVAToken(uint256)", +"f3bea352": "setReaders(address,address)", +"f3bec461": "earnCRV()", "f3becb59": "C(address)", +"f3beeea6": "callProxyHandler_getUserMaxBorrowAmount(address,address)", +"f3bf5f89": "greyIndexToApproved(uint256)", "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)", +"f3c131ad": "OverpaymentRefunded(uint256,uint256)", +"f3c13387": "setNft(address)", +"f3c13a12": "depositRate(uint256,uint256)", +"f3c1443a": "WindingUpStarted(uint256)", "f3c156f3": "purchaseDigitalArtSellingItem(uint256)", "f3c15f49": "getLiability()", "f3c16e54": "Resolve(bytes32)", "f3c1c7c0": "LogCoinsEmited(address,uint256)", "f3c20de0": "tokens(uint16)", +"f3c2399b": "interestAccountDetails(address,uint256)", +"f3c25ba4": "harvestVault()", "f3c274a6": "isPut()", +"f3c2c3bd": "setPercentMultiplier(uint256)", "f3c37bd5": "Verifier(address,uint256,uint8)", +"f3c3eb35": "operVestingTime()", +"f3c40c4b": "addAllowance(address,uint256)", +"f3c44f51": "pendingpigs(uint256,address)", +"f3c4d060": "DEPOSIT_COLLATERAL_TYPE_HASH()", "f3c505c2": "updateInventories(uint256,uint256,uint256,uint16)", "f3c50ce0": "CobeFriendCore()", "f3c51c84": "_EnvoisTokens(uint256,uint256)", +"f3c5231b": "approve_183(address,uint256)", +"f3c52337": "isCertified(bytes32[],bytes32)", "f3c537c5": "fint8(int8)", +"f3c54e5d": "tokenTransferAllowed()", +"f3c5fa37": "setInitValue(uint256,uint256,uint256,uint256)", "f3c64850": "amendedEarlyPurchaseIndexes(uint256)", +"f3c654fe": "_maxPoolSize()", "f3c6a223": "Bifrost1Token()", "f3c74496": "logWorkerStatement(string)", +"f3c74543": "updateCoolDown(uint256)", +"f3c7600e": "getTransferProfitedGame(address)", "f3c78091": "AcceptingDepositsChanged(bool)", +"f3c79a91": "maxInvestorContribution()", "f3c7d275": "prenup(string,string,string,string,string,address,address)", "f3c7e538": "set_successful_verifier(address)", "f3c85eba": "compound(uint256,uint256,uint256)", +"f3c8be94": "divMessages(uint256)", +"f3c8f08a": "withdrawChunk(uint256,uint256)", "f3c8f3ef": "startListing()", "f3c8ffaa": "endPreICOStage()", +"f3c901d0": "getNumberOfLevels()", "f3c957f2": "haltCommitPeriod(address,bytes32,bytes32)", "f3c95c60": "isValidUser(address)", "f3c9a5cc": "CrowdsaleController(uint256,address,address,bytes32)", +"f3c9f29e": "changeLifeTime(uint64)", "f3ca062a": "setLevel(uint256,uint8,uint8,uint16)", "f3ca29b1": "ownerDailyWithdrawal()", "f3ca2b54": "test_twoValidEqString()", @@ -139823,7 +255812,9 @@ "f3cb8c31": "addEmployee(address)", "f3cbc040": "checkVerify(bytes32,uint256,uint256,uint256)", "f3cbe7b5": "exchangeableTokensFromStock()", +"f3cbf530": "WithdrawOwner(address,uint256)", "f3cc2436": "maxPoolTotal()", +"f3cc3a14": "getDecimals(address,address[])", "f3cc6860": "setHash(bytes32,uint256,bytes32)", "f3cca49a": "restoreUnsoldTokens(address)", "f3cca5b4": "crowdSaleSoldAmount()", @@ -139836,13 +255827,22 @@ "f3ce2bc6": "_updateSaleAvgHistory(uint256,uint256)", "f3ce40eb": "setSchellingRoundSupply(uint256)", "f3ce782e": "LongBought(address[2],uint256[5],uint256)", +"f3cea549": "Mint(uint256,address)", "f3cee129": "getOwnerServer()", "f3cee64d": "setCmd(uint256)", +"f3d0ae0e": "serviceContracts(uint256)", +"f3d0f140": "updateDistanceById(uint256,uint256)", +"f3d11fa0": "TokensRefund(uint256)", +"f3d18658": "_hasExtraSpin(address)", +"f3d1dc26": "delistTokensOfReserve(bytes32)", "f3d1dfee": "calcSeason(uint16)", +"f3d2350e": "updateFees(uint16,uint16)", +"f3d278ef": "interestRatePadding()", "f3d2f17b": "getData_22()", "f3d2f824": "setXQU(string)", "f3d305b4": "getBoostedProposalsCount(address)", "f3d3402a": "changeBountyData(uint256,string)", +"f3d34188": "bless(uint256)", "f3d38a7b": "setBTBAddress(string)", "f3d3d448": "setControllerAddress(address)", "f3d3fce7": "settleLend(bytes,bytes,address,uint256,bytes,bytes,bytes,bytes)", @@ -139850,251 +255850,482 @@ "f3d47d1b": "transferAllFrom(address,uint256[])", "f3d490db": "transferByPartition(bytes32,address,uint256,bytes)", "f3d4b942": "emergencyFreeze()", +"f3d52ae6": "CORION()", "f3d544d2": "FRTToken(uint256,string,string)", +"f3d5bec9": "wbnbToken()", +"f3d5edc5": "getVDV()", +"f3d6777a": "setInitialUSDInvestment(uint256)", +"f3d69a94": "_swapRatio2()", "f3d6b54e": "setAirdropPrize(uint256,uint256)", "f3d6cb29": "setLLV_edit_34(string)", +"f3d75a9c": "getBorrowAmount(address,address,address,uint256,uint256)", "f3d791ea": "submitTrade(address,uint256,address,bytes)", "f3d79244": "frozenProfitDate(address)", +"f3d7b71d": "_setRateExpiryTime(uint64)", "f3d7bf1d": "privateStageTokensSold()", "f3d7c6f7": "claimPrivateTokens(address[],uint256[])", "f3d7e464": "EARLY_CONTRIBUTOR_VESTING_PERIOD()", +"f3d7fff8": "_partitions(uint256)", "f3d838a0": "Copyright()", +"f3d84b46": "buyNewPut(uint256)", "f3d89c49": "setAutoCreationFee(uint256)", "f3d91708": "isEligibleForUpgrade(address)", "f3d97a25": "cancelTrade(address,address,uint256,uint256,uint256)", "f3d9bc65": "sendBountyTokens(address,uint256)", "f3d9eeec": "CourseChanged(uint256,uint256)", +"f3da3e64": "confirmedGHTwithdrawal(uint256,address,address)", +"f3da6cbd": "claimHistory(uint256)", +"f3da749b": "changeRestakePeriod(uint256)", +"f3da7ef4": "endVoteTime()", "f3db09b8": "invoice(bytes32,address,address,uint256,uint256,uint256,uint64,uint64)", +"f3db188c": "setRebalanceRewardDivisior(uint256)", "f3db4f2b": "retrievePieceFromEscrow(uint256)", +"f3db5466": "initializeStableTokens()", +"f3db9fe5": "deposit(address,string,uint256)", "f3dbaf0d": "removeVestingAdmin(address)", +"f3dbdfe5": "totalStakedAmount(address)", +"f3dc24b2": "approve_651(address,uint256)", +"f3dc3272": "getOrders(address,address,uint256)", +"f3dc4f48": "isPenalized(address)", +"f3dc88ac": "_cardSold(uint256,address)", +"f3dcfcbc": "changeStakingAmount(uint256,uint8)", +"f3dd2d68": "setTokenSaleTokensCost(uint256)", "f3dd3d8a": "newCurrency(string,string,uint8)", "f3ddb946": "bets_total()", +"f3de1e0f": "RefCreditsMinted(address,uint256)", "f3de56de": "createNewSociety(string)", "f3df0bbe": "startNewBallot(bytes32,bool,bytes32[])", "f3df29b6": "periodITO_endTime()", +"f3df5b69": "updateThreshold(uint8)", +"f3e0705e": "withdrawMinRatio()", +"f3e0c3fb": "registerUserAdmin(address)", +"f3e10bbb": "paymentHandlerDelayed(address,uint256)", +"f3e18594": "accountUnProtect(address)", "f3e1cb63": "rsVerifyPublic(bytes32,uint256[2],uint256[],uint256[],uint256[],uint256[])", "f3e1efbf": "validation_inviter(address)", +"f3e22297": "pays()", "f3e238d2": "StrongKek()", +"f3e24dcb": "addnews(string)", "f3e2aa83": "requestReclaimEther()", +"f3e2ae5f": "totalBorrowing(address)", +"f3e2be4a": "virusOwner(address,uint256)", "f3e3c629": "testBalanceOfStartsAtZero()", +"f3e414f8": "withdrawERC721(address,uint256)", +"f3e41796": "setVotedExtPool(address)", "f3e41a99": "addRound()", "f3e4877c": "distribution(address[],uint256)", +"f3e48982": "updatePairContract(uint256)", "f3e4cac4": "_getTokenPrice()", +"f3e4fc3a": "dbg_priceAtEpochStart()", "f3e5c15e": "screenstate()", "f3e62640": "buyToken(uint256,address,uint256)", "f3e664c9": "setSaasApiProfitAddress(address)", "f3e68264": "getSignerOfBalanceHash(address,uint8,uint256,bytes)", "f3e71756": "checkTickets()", +"f3e74952": "BlindAuctionStarted(uint256,uint256,uint256,address,uint256)", +"f3e7569f": "setDeveloperAccount(address)", +"f3e7a706": "flashLoan(uint256[5],uint256[5])", "f3e84c4c": "FundingClosed()", "f3e84cf3": "createNewRevision(bytes32,bytes)", +"f3e8843a": "isClaimedLink(address)", +"f3e8dcd0": "test(uint256,address,bytes32)", "f3e94596": "LogReferral(address,address,uint256)", "f3ea1241": "releaseFirst()", +"f3ea45ca": "hardBSC(address)", "f3ea4c68": "set_symbol(string)", +"f3ea91b8": "emergencyMigrate()", "f3eac094": "defaultAuctionPrice()", +"f3eafc0e": "steps(address)", "f3eb2445": "SimpleToken(string,string,uint256,address)", +"f3eb5b31": "balanceOfYYCRV()", +"f3ec37c2": "setLpLockAddress(address)", "f3ec3f4a": "whitelistPreSaleAddressMany(address[],bool)", +"f3ecd7f6": "getForexAddress(string)", "f3ecda21": "ITSM()", "f3ece9f4": "addBlockList(address)", "f3ed064a": "bonus01End()", "f3edf112": "changeHelper(address)", "f3ee6305": "removeCertificationDocument(address,bytes32)", +"f3eeaf4a": "wethPerRequest()", "f3eeb84b": "lastBlock_f9Hash_uint256()", "f3eef981": "_init(uint40,uint40)", +"f3ef5a58": "RemainsBurned(uint256)", +"f3f0349a": "addAssetLimit(address,uint256)", +"f3f094a1": "redeem(address,uint256,address,uint256)", "f3f10da7": "Balance(string,uint256,address)", "f3f11048": "ethAddressPublicKey(bytes32,int256,bytes32,int256)", +"f3f11bc3": "purchaseToken(uint256,address)", +"f3f14ed0": "poolPidByAddress(address)", +"f3f15ff6": "setCore(address,uint256)", "f3f16a15": "voted(address,bool)", "f3f18615": "verifyTrustedSender(uint256,address,uint256,uint8,bytes32,bytes32)", "f3f1b5a7": "CongressOwned()", +"f3f1cb5c": "Step2(uint256)", "f3f1d909": "redeemCoin(uint256,address,bool)", +"f3f1e095": "reserveAffiliates()", "f3f1e4ea": "MenglaToken(address)", +"f3f2456d": "rewardRBT(address)", +"f3f2be50": "packageLevels(uint256)", +"f3f2be64": "DIVINITY()", "f3f2e656": "setAttributeSigned(address,uint8,bytes32,bytes32,string,bytes,uint256)", "f3f2f0bc": "beneficiary2()", "f3f31853": "getPayTable(uint16)", +"f3f3fab7": "createStreamToBurn(uint256)", "f3f43703": "pendingWithdrawals(address)", "f3f458f8": "cycleCount_()", +"f3f47982": "hasValidWithdrawRequest(address,address)", "f3f480d9": "challengePeriod()", "f3f4aef3": "getUserIDAndInviterEarnings()", +"f3f4b048": "getProposalReputationReward(bytes32)", +"f3f4e842": "ExecuteEvent(uint256,address,uint256,uint256)", +"f3f51415": "dailyLimit(address)", +"f3f524b8": "updateReferralFee(uint256)", "f3f52865": "getPersonalStakeAmounts(address,address)", +"f3f594f7": "Transfer_anything(address[],uint256[],uint256[],uint256)", "f3f6f0d7": "lastIndex()", "f3f70674": "oracle_call(uint256)", "f3f7650d": "fetchOrdersForMerchant(address)", "f3f79a97": "setDebtIncreasingFactor(uint256)", +"f3f7d633": "countOfInvestors()", +"f3f82088": "tokenSendFee()", +"f3f91fa0": "lastClaimedTime(address)", "f3f9240b": "investAs(address)", "f3f969a0": "setRegisteredAuthority(string,address,bool)", +"f3f98382": "phaseNum()", "f3f9c004": "reffalPool()", "f3fa1e7b": "bulkApproveTransfers(uint256[])", "f3fa2c37": "getUpdateHash(uint256,uint256,uint256,uint256)", +"f3fa9cd3": "userCanStake(address)", "f3fac412": "_calcEndTime(uint256)", +"f3fb0f53": "EvLotteryWin(uint256,uint256,address,uint256)", +"f3fb67a0": "stakingStartedAt(address)", "f3fb9a02": "setInfo(uint256,uint256)", "f3fbabb5": "setDedicatedProxy(address)", +"f3fbad25": "assignResourceChecksumPair(uint256,uint256)", "f3fbfc60": "SFTSEV()", +"f3fc093b": "burn_amt()", "f3fc536d": "revokeConfirmation(bytes32)", "f3fc7fb2": "Ordient()", "f3fce3b5": "setC4FContractProviderCompleted(address,bool)", +"f3fd10c3": "getbuyerPoolAddress()", "f3fd826f": "transferFromTokens(address,address,address[],uint256[])", +"f3fd9275": "logSwap(address,uint8,uint8,uint256)", +"f3fdb15a": "interestRateModel()", "f3fde261": "onTransition(bytes32)", "f3fe12c9": "claim(string)", +"f3fe3bc3": "NOT_CURRENT_OWNER()", "f3fe5bc2": "totalWitdrowedToken()", "f3fef3a3": "withdraw(address,uint256)", "f3ff10bf": "UseQuantity(int32)", +"f3ff3af6": "getWhoIsManager()", +"f3ff4961": "withdrawFromContract(address)", +"f3ff526d": "dTokenUnderlyingPrice(address)", +"f3ff955a": "delegateVotingPower(address)", +"f3fff493": "_isValidPair(address)", +"f4001da8": "updateBonusDuedays(uint256)", +"f4005938": "updateExtra(string,string[])", "f4009d99": "changeMainStartTime(uint256)", "f400a3d7": "finishDate()", +"f400d311": "setControllerFee(uint256)", "f400d37b": "yesVoteSum()", "f400fde4": "amount1()", "f4010db0": "deleteTile(uint16)", +"f4014526": "getNextAward()", "f4016ac3": "setInitialState(address)", "f4016b17": "destroyBPESOToken(address,uint256)", "f4025568": "approveCertificate(uint256)", +"f4027274": "setLoaner(address)", "f4029e92": "getMonsterReturn(uint64)", "f40314f4": "tokenCurrentStage()", +"f4036466": "getCompetition(uint256)", +"f403a5de": "TokenExportEnabled(address,uint256)", +"f403b7ae": "SharesSold(uint256,uint256,uint256,address,address,string)", "f4044697": "xrateProviders()", +"f404523f": "earnedToBELTPath(uint256)", "f404d1e2": "transferAndCall(address,uint256,bytes,string)", "f404df8e": "_getExpectedRate(address,address,uint256)", "f405311b": "Made(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f4054940": "balanceOfProxy(address,address)", "f405a275": "EventJoinedBattle(address,uint256)", +"f405f65a": "resumeExchange()", "f4064471": "messagePreSignedHashing(bytes8,address,address,uint256,uint256,uint256,uint8)", +"f406bdfa": "quaiToken()", +"f406c93e": "BonusDayLength(address)", +"f406f383": "createBox(string,string)", +"f40707cf": "CanvasCreated(uint256,address)", "f4071928": "mintAuditApproval(address,address,uint256)", "f407c81d": "tokenNoByAddress(address)", +"f408b053": "SUBPerBlock()", +"f408d96c": "renounceCanTransfer()", "f408ebe9": "dev_reset()", "f409a609": "internalMintToken(uint256)", "f409ab66": "getDepositedCount()", "f409e633": "SetENGDevAddress(address,address)", +"f409fb63": "ApproveMintTokens(address,uint256)", +"f40a0448": "ratePrecision()", "f40a049d": "triple(uint256)", +"f40a0998": "pinMaster()", +"f40a2068": "newTub(address,address,address,address,address,address,address,address,address)", "f40a9112": "whaleIncreaseLimit()", +"f40b51f8": "confirmLoadLimitUpdate(uint256)", +"f40be44c": "DEVSTAKE()", "f40c0843": "subscribe(address,uint8,bytes32)", +"f40c2881": "rejectStakeRequest(bytes32)", +"f40c3699": "enableFinalSettlement(uint256,uint256)", +"f40c8fba": "mktVestingSupply()", +"f40c96ab": "CONTRACT_ERC712_VERSION()", +"f40cbc1a": "checkIfAmValid()", +"f40cc8c1": "Refund(address,address,uint256)", +"f40d1bb8": "KeyValueArrayTokenID(uint256,uint256)", +"f40d6426": "processStaking(bytes32)", "f40d71f1": "releaseTokens(address,uint256)", +"f40d811a": "bancorConvert(address,address,uint256)", "f40d8d8f": "updateAllowance()", +"f40da13a": "lstTeam(uint256)", +"f40e056c": "getContractsByIndex(uint256)", +"f40e0aed": "challengeRequest(address,uint8,address,string)", "f40e0b6e": "coinsToSell()", "f40e28f2": "createGen0Auction(uint256,uint256,uint256,uint256,address)", +"f40e8471": "orders(address)", "f40e8d8b": "retryWinner(uint256)", +"f40ea0ee": "underover(string)", +"f40ea1a5": "levelsTokenAddress()", "f40ea5cb": "setReservePricing(uint256)", "f40ebcf3": "setBalanceOfValueFor(address,uint256)", +"f40ef67e": "vIDCreated(uint256)", "f40ef739": "preIcoEndsAt()", +"f40f0f52": "pendingReward(address)", +"f40fcec2": "Deployed(address)", +"f40fcf7f": "CrowdSaleTransfer(address,uint256,uint256,bool)", "f41017fc": "finalize(uint24)", "f410a26b": "receive(address,uint8,uint32[])", "f410aa39": "_issueByPartition(bytes32,address,address,uint256,bytes,bytes)", "f4116381": "setFiscal(bytes32)", "f411fb21": "freezeWithdraw(address,uint256,bool)", +"f412205f": "CS_WEAPON_LEVEL()", +"f412511e": "captains(uint256)", "f41293c7": "getIndexForTeamId(uint32,uint32)", "f412af91": "getOuvidoriaEndpoint(address)", +"f4136f7f": "expireCover(uint256)", "f41377ca": "setFoundationAddress(address)", +"f413ab40": "minLowRateN()", +"f413ae12": "luckybuyEvent(address,uint256,uint256,uint256)", "f41440d9": "setCreator(address,address)", +"f4146ba2": "getGateways(address,uint256)", "f414cccb": "removeFreezableAddresses(address[])", +"f414e236": "interfaceAndOverrideTest()", +"f414e3c7": "FinishMintingApproveCanceled(address)", +"f414f67c": "getDsamplingCount()", +"f41566bf": "EthPriceFeedChanged(address,address)", "f4156757": "TeamPoolAddress()", +"f415c5e5": "claim(bytes[],bytes[])", "f415ed14": "slash(bytes32)", "f4162530": "nodeFee()", "f4163340": "isFailed()", "f416d2cb": "emitTokensSince()", +"f41749ce": "PLZWORKK(uint256,string,uint8,string)", +"f41756ff": "flashloan(uint256,address[])", "f417614a": "validateAndReturnContribution()", +"f4177936": "buyTokens(address[],uint256[],uint256[],address,bytes32,address)", +"f417fae2": "buildHouses(uint256[])", "f418b153": "replaceMarketingToken(uint256,uint256,uint128)", "f418cf4e": "recordSenderIfNecessary()", "f4199bb8": "initializeWhitelist(address[])", "f4199fb7": "ayy()", "f419c69d": "_createPony(uint256,uint256,uint256,uint256,address)", +"f419c816": "salePercent()", +"f41a0d1d": "getExistingOrders200(uint8,address,uint256)", "f41a12c8": "_takeOwnership(address,uint256)", +"f41a1587": "numPendingNodes()", +"f41a6203": "isKey()", +"f41a9642": "updateSigner(uint256,bytes)", +"f41aa675": "devTeamFundRatio()", "f41b536e": "getRecipientString()", +"f41b848a": "getDfiBlockReward()", "f41bc988": "isPartyA(address)", "f41bfa9e": "mint(int256,uint256,string)", "f41c1c93": "setAnswerFee(uint256)", +"f41c4319": "confirmGasTopUpLimitUpdate(uint256)", "f41c639e": "sendMsg()", +"f41cbec5": "getValuePoolWeight(address,uint256)", "f41d0b0c": "getInfluencer(string)", "f41d1a82": "partner1_name()", "f41d97fc": "getPriceOfTokenInLastAuction(address)", "f41db329": "addAuction(uint40,uint40,uint128,uint40)", +"f41dbd91": "getLpBalanceOf(address)", "f41dc25f": "totalWeiLose()", +"f41ddf2b": "Winner(address,uint256,uint256[],uint256,uint256)", "f41e3494": "hasFailed(uint256)", +"f41e5452": "withdrawFromApprovedWithdrawal(uint256,uint256)", "f41e60c5": "enableTransfers(bool)", +"f41e64f6": "withdrawDaiByAdmin()", +"f41e848d": "pubreg(address)", "f41e8fc8": "periodAmount()", "f41f4b10": "retrieveHouseTake()", "f41fa999": "TTest()", "f4201c3c": "isVIP(address)", +"f4202409": "getVariableRateSlope2()", +"f42029c8": "finalCoinPerCollateralPrice(bytes32)", "f4206706": "withdrawEthers(uint256)", +"f4206dea": "lockedBalanceRange(address,uint256,uint256)", "f420977d": "noOfTokenAlocatedForSeedRound()", "f420c5b1": "getCloneWallets(uint8)", +"f420d538": "getCdpInfo(bytes32,uint256)", "f420d9d2": "setNumRewardsAvailableForAddress(address,address)", "f4217648": "setWhitelist(address[])", "f421e02b": "testCantFinalizeWithIncorrectCap()", "f42206d1": "HouseEdgeUpdate(uint256)", +"f4222c56": "protocolAsset()", "f422878a": "addressIsStakeDiceGameContract(address)", +"f422eeea": "setIntOwnerOnly(address,uint256)", "f42355a4": "isSaleInitialized()", "f4239eec": "affiliatePercent()", "f4246be4": "addToBundle(bytes32,bytes32)", +"f424b0df": "getPoolCommision()", +"f424eeb5": "AddFunds(address,uint256)", "f4250f75": "AgriChainPrevData()", +"f42512ce": "contractToOwner(address)", "f42541be": "promoToonsMinted()", +"f4258592": "changeDropBridge(address)", "f42598f0": "get_mintable()", +"f4265715": "unmine(uint256)", "f4268e46": "g17token()", +"f426a0ff": "claimPremiums()", "f426ceee": "award(bytes32,uint256,address,bool,uint256)", "f426d8ac": "withinHomeLimit(uint256)", "f426f03a": "setFrequency(uint256)", "f427211c": "getTime2(address)", "f4279d1f": "updateEthUSDOracle()", +"f4285c3c": "tokenLockers(address)", +"f429f19b": "getType(address)", +"f42a0df3": "approve_166(address,uint256)", "f42a2c42": "removeAssetListing(uint256)", "f42aa287": "getBlobStore(bytes12)", "f42ac1de": "minQuorum(uint256)", "f42b1ae0": "unPauseGame()", +"f42b423b": "uniETHUBASE()", "f42b9999": "icoMinInvest()", "f42c051e": "submitTokenToEthOrderWHint(uint128,uint128,uint32,int256)", "f42c0f02": "MARKETING_SHARE()", "f42c56c2": "cbrt(uint256)", +"f42c7885": "_VoteRevealed(uint256,uint256,uint256,uint256,uint256,address)", "f42ca2ee": "sub_32(uint32,uint32)", +"f42cadc1": "timeOutBySender(uint256)", "f42d1d30": "creditorAmounts(uint256)", +"f42d2058": "Ether_Total_For_Encore_LP()", +"f42d20a9": "tokenSaleFRUIT(address)", +"f42d989c": "WRNToken()", +"f42da234": "inCaseC_DAIgetsStuck()", +"f42de2b3": "getMediatorActiveBets(address)", +"f42e3a2c": "setUdonsPerBlock(uint256)", "f42eb765": "getAgreement(bytes32)", +"f42ebbe0": "setLPTokenAddress(address)", +"f42ecd64": "boostx2()", "f42ef9ec": "emitWithrawalRequestEvent(address,address)", "f42f0c7d": "lengthOfCommonPrefix32(bytes32,bytes)", +"f42f1da9": "setpool(uint256,uint256,bool)", +"f42f40c2": "totalSupplyBurnedMinusRewards()", +"f42f41eb": "mulu(int128,uint256)", "f430511a": "setMaxAddresses(int32)", "f43098af": "resetTokenOwnership()", +"f430cf0d": "pendingReward(address,uint256)", +"f431860d": "getAccountIsLockedCount()", "f4320f00": "getProjectUnusedTokens()", "f4325417": "App(address,string,uint256,string)", "f4325d67": "reserveToken()", +"f432a4b5": "NAPboostLevelFiveBonus()", "f43313b6": "assertEq31(bytes31,bytes31,bytes32)", "f433262f": "updateFromRegistry()", +"f4338b4f": "AmountMNESent(address,bool,bool)", "f4338e89": "getAllTeamCosts()", "f433e12e": "marketingTokenWallet()", "f4347267": "getX(bytes)", +"f43472e1": "withHERC20(address,address,uint256)", +"f434796b": "bdoip01BootstrapSupplyExpansionPercent()", +"f4347c85": "setUnitDefenseIncreases(address,uint256,uint256,bool)", "f434e028": "PreICOProxyBuyer(address,uint256,uint256,uint256)", "f4351908": "InitialRateChange(uint256,uint256)", "f4351e15": "addAndMintPlayers(uint128[],bool[],uint256,uint256,uint256)", "f43532ac": "changeWaveVoteContract(address,string)", +"f4356257": "icoLevel2()", +"f4359ce5": "WEEK()", +"f435b0cf": "poolParams(address,bytes32)", "f435d012": "setUnitJadeStealingIncreases(address,address,uint256,uint256,bool)", "f435f5a7": "lock(address)", +"f4362db2": "userlocktemp()", "f436de14": "setAllowanceValue(uint256)", "f437019c": "stop_service(uint256)", "f437bc59": "host()", "f437d6bc": "objectShield()", +"f437e7ff": "iterateTokens(uint256,uint256)", "f4381136": "DeferredPresaleTokenPurchase(address,address,uint256,uint256)", +"f438249f": "sEblksaq()", "f4385912": "getPlayerId(uint256)", "f4385eaf": "KPISToken()", "f4387d86": "arbitrateApproveMilestone(uint256)", +"f438d918": "getNumEquipped(uint256)", +"f438ea9d": "TWAP12Hour(address)", +"f43948ad": "spenderList()", +"f43952e3": "setMaxPrice(uint256)", "f4395dbc": "bitmcoinToken()", "f4399f2d": "MDIToken()", +"f439ba44": "FundsWithdraw(address,uint256,uint64)", +"f439d721": "advisorsAmount()", "f43a72b0": "setactive(bool)", "f43abdf3": "getCrowdsaleUserCap()", "f43acb52": "checkLottery(uint256)", +"f43accef": "viewMembershipExpired(address)", "f43b1620": "addUserAuto()", +"f43b1761": "batchBalanceOfByPartition(address[],address[])", "f43b4808": "viewPassword(uint256)", "f43b7a76": "AdmineAdvisorTokens()", +"f43b7d01": "tokenDiscountThresholds(uint256)", "f43bac53": "poolFeeIncurred(uint256)", +"f43c3c8c": "updateBuyLimit(bool)", "f43e34b2": "unFreezeAll(address)", "f43e3918": "MELON()", "f43e98c7": "refunding()", +"f43ed45e": "Tcost()", +"f43f17cb": "getMyGoal()", +"f43f209f": "dYdXFl(address,uint256,address,uint256,bytes)", "f43f523a": "mod(uint256,uint256)", +"f43fa805": "get_id()", "f43fd7e0": "_handleTrainingFailure(uint256,uint256,uint256)", +"f4403433": "spentTokens()", +"f440ae04": "burnONE(uint256)", +"f440d918": "setLiquidationFees(address[],uint256[])", "f4412803": "currentTotalAirDrop()", "f44191f0": "getAccessoryByIndex(address,uint256)", "f441b1c8": "currentAmount()", +"f441cb18": "approve_566(address,uint256)", +"f4421ca8": "racunFakulteta()", "f4424cac": "getNumberOfLogEntries()", +"f4426766": "enableRewards()", +"f4427def": "regUser(uint256,uint32,uint32,uint256)", +"f442b570": "transferPauseExemptList(address)", +"f442be98": "usdttoken()", +"f44309f5": "stupidTaxRate()", +"f4430dd8": "setPoker(address)", "f44349dd": "angelTokenSupply()", +"f4436293": "Holdplatform_divider(address,uint256)", "f44376a2": "preFixed(address,uint256)", "f443ea83": "MindHacker()", "f444c136": "createDklAuction(uint256,address,uint16,uint256)", +"f444cdbd": "setNewHolder(address)", "f444ea30": "allowBack()", +"f444fdd8": "transferAddress()", +"f445037b": "getTrainerBalance(address)", "f4451628": "buyHSShop(uint256)", "f44544b3": "fundPos()", +"f4457fab": "performanceFeePercentage()", +"f4460e37": "getApprovedKYC(address)", "f4462d04": "periodicity()", "f44637ba": "addBurner(address)", "f4463fb7": "emergencySelfDestruct()", "f44667a6": "tokensAmount(address,address)", +"f4468c4f": "rank3Teams()", "f446c1d0": "A()", +"f4491c0a": "_terminateEmployee(uint256,uint64)", "f449619e": "collectPrize(uint256)", "f449958d": "deliverManagementTokens(address)", "f449c3cb": "_presaleSupply()", @@ -140105,40 +256336,73 @@ "f44b54ca": "functionName1(bytes32)", "f44b79b3": "withdrawalAll()", "f44bd811": "TRCERC20(uint256,string,string)", +"f44c407a": "withdrawAndGetReward(uint256)", +"f44cb791": "takerCloseCancel(address,uint256)", +"f44d0808": "getPollCounts(string)", +"f44d1e0b": "SECTION_SYNTH()", "f44dc562": "_addKey(address,uint256)", "f44e1351": "setEpisodeManager(address)", "f44f13d8": "assert2()", +"f44f6ad5": "epochDollarPrice(uint256)", "f44f8be9": "sendNegReq(uint256,uint256,uint256,string)", +"f44fabf0": "RemoveOwnerRequestCanceled()", "f44ff712": "blockHeight()", "f450096f": "updateOraclizeGas(uint256,uint256)", "f4500eb5": "ETHERCFeeModifiers()", +"f4507d2b": "baseRandom()", "f4508082": "_price_token()", "f4509fc2": "LOCKED_1Y_DATE()", +"f450aa34": "getAmountsForExchange(uint256,bytes32,bytes32)", "f450b574": "_mixer()", "f450cfee": "disablePrivileged()", +"f450d056": "top1moiculy()", "f450d53a": "allFinalised()", "f450e5f8": "TOKENS_SOLD_LIMIT()", "f4510455": "STQPreICO2TestHelper(address,address[])", +"f4512bb6": "fundLoan(uint256,uint256)", "f4514ca6": "buySome(uint256,uint256,uint256,uint256,uint256)", "f4519035": "betOdd()", +"f451a992": "esd()", +"f4522bbc": "TIMESTAMP_OF_20201101000001()", +"f452637a": "bountyAddress(address)", "f452b69c": "getCommandTokens()", +"f452c760": "borrowCTokenEnabled(address,address)", "f452f32d": "getByTo(uint256,uint256)", +"f452ff97": "MARKET_DEV_SUPPLY()", +"f453182c": "getNetTokenValue(address)", "f45346dc": "deposit(address,uint256,address)", +"f4537f78": "merkleDistributor()", "f45392fb": "getReportingWindowByMarketEndTime(uint256,bool)", "f453c827": "getAddressField3()", +"f4542345": "GDAO_REWARD_FRACTION_RATE()", +"f4544195": "mintLLCbatch(address[])", "f4544255": "refer(address,address)", +"f4546827": "SharedAward(address,uint256,uint256)", +"f4547a4d": "updateContractAddress(uint256,address)", "f454c32c": "teamReserveTokensDistributed()", +"f454dfe1": "executeMultipleLoginKeyMetaTx(address[],bytes[],uint256[],uint256[],bytes[],bytes)", +"f4557628": "addInitialLiquidity(uint256,uint256,bool,address)", "f4559619": "newOwnerTemp()", "f4560403": "Zero()", "f456106d": "ProdCToken()", +"f4561a78": "getWithdrawShare(uint256)", +"f4562dc6": "setUniTokenFeeReceiver(address)", +"f456426f": "pendingEgg(uint256,address)", "f4572664": "changeMinimumPurchaseAmount(uint256)", "f457361a": "paidversion()", +"f45737e0": "lockPeriodForTMwallet()", "f457547a": "spreadPercent()", "f457688d": "can_i_jump()", "f4577298": "EthGet()", +"f457bea5": "initWorld(string,address,address)", +"f457e58c": "shower()", "f457ee5a": "donation(address)", "f45811bd": "Voyager()", +"f4583793": "lotto(uint256)", +"f458536d": "nIUYutyUGIhoVG(uint256,bool)", "f4586cba": "setVestingRevokeDate(address,address,uint256)", +"f45887bc": "operatorSendDenominatedInDai(address,address,uint256,bytes,bytes)", +"f458ab98": "updateTellor(uint256)", "f4591074": "finishInvite()", "f45934b6": "cards_gold_total()", "f45984fd": "TOKEN_UNIT_RATIO()", @@ -140146,20 +256410,39 @@ "f459eb61": "generateKeccak256(bytes)", "f459f517": "dividendsPoolAddress()", "f45a729c": "getEtherValue(uint256)", +"f45ad76a": "RegisterShop(address)", "f45b106a": "increaseMonthlyTransactionVolumeReceiving(uint256)", +"f45b242f": "setStakingRewardWeight(address,uint256)", +"f45b385a": "GetMedGravityTrainings()", "f45b4fba": "setPersonalBonus(address,uint256,address,uint256)", "f45b96a0": "financePeriodsCount()", +"f45be1db": "totalBonusBot()", +"f45bebc9": "mint(address,uint8,address,uint256)", +"f45bf3d2": "blockedAccounts(address)", "f45c85e5": "currentOwnerFeePercent()", "f45ce8d7": "setAddressKYC(address,bool)", +"f45d0bc6": "terminal()", +"f45d9e89": "boosterInfo(address)", "f45dae6e": "parseLoanOfferRates(uint256[7],uint32[4])", +"f45ddfe5": "isOneStageSale()", "f45e29bb": "hashCoin()", +"f45e3439": "_approveAndAddLiquidity(uint256,uint256)", "f45e8dc4": "buyWarlordChest(uint256)", +"f45ea7a4": "tokenToRelay(address)", "f45eb5b4": "_generateRandomhashNumber(string)", "f45ef033": "nextReduceSupply()", "f45efe88": "stage1Bounty()", +"f45f08fb": "getLoanCollateralRatio(address,uint256)", +"f45f416e": "canBeDelegateCalled()", "f45f74f8": "VerityToken()", +"f45fa3eb": "UniSwapSaleEnds()", +"f45ffe09": "AuctionWon(uint256,address,address,uint256)", +"f4603799": "cycleFor(address)", "f460473e": "fillArray()", "f460590b": "updateSigner(address,bool)", +"f4607a85": "POWER_MONTH_3()", +"f460970a": "weeklyTotal()", +"f460a76a": "sonAddress(address)", "f460c5e4": "listItem(uint256,uint256,uint8)", "f460e5d0": "setRamenContract(address)", "f461847c": "DatGirl()", @@ -140168,26 +256451,44 @@ "f461db4a": "getdoc(uint256)", "f4623d44": "getStorage(address,uint256,uint256,bytes)", "f4623e0b": "addBalance(address,address,uint256,uint256)", +"f46260f9": "_issue(uint16,uint256,uint256,uint8,string,string,uint256)", "f462671e": "isAuthDisabled(uint256,uint256)", +"f462ace8": "Unfrezee()", +"f462fed0": "getLpTokens(uint256,uint256)", +"f4632103": "checkYourAllowanceOfProjectERC20(uint256)", "f46332e0": "test_claimShare_emptyFeeAndRewardPools()", "f4635674": "countryOwnersOf()", "f4637003": "transferChildren(address)", "f463be37": "setSecondAddressBalance(address)", +"f463c5ad": "addMultipleWhiteListedAddresses(address[],uint256[])", +"f463e18e": "updateLatestRoundData(bytes32)", "f463edd1": "createDocument(uint256)", "f464e64e": "premiumPacks(uint256)", "f464e7db": "sellToken(address,uint256)", +"f4651d57": "removeSubAdmin(address)", +"f4653ab3": "multiInterestUpdate(address[])", "f4656219": "PRICE_RATE_FOURTH()", +"f4660dd7": "linkAddresses(string,bytes,string)", "f4660ff5": "timeVault()", "f4662f71": "canUnshelf(string,address)", +"f466cbf0": "createGroupForSchain(bytes32,uint256,uint8)", "f466f106": "addHouseHold(uint256,uint256,uint256)", "f4674b89": "withdrawByAdmin(address,uint256,address)", +"f467531c": "IdVaultedEths(uint256)", +"f46771d9": "sendToAddress2(address)", +"f468697e": "_supplyInterestRate(uint256)", "f4686b42": "GxAdminOperations(address)", "f468e9b3": "inICO()", +"f46901ed": "setFeeTo(address)", "f469707f": "addToGoldList(address)", +"f4698c22": "isRecordUpdateAllowed(uint8)", +"f469f5d4": "getSignatory(bytes20,uint256)", "f46b5321": "calculatePoolAmount(uint256)", "f46b986a": "secondExtendedBonusSalesEnds()", +"f46b9a37": "ExecutionFailure(uint256,string)", "f46bbc09": "thirdStageTokenRate()", "f46c0f29": "compensate(uint256)", +"f46c14b5": "WRBaddress()", "f46c50dc": "doFail()", "f46c858a": "addAdvisor(address)", "f46d1982": "setup(address,uint256)", @@ -140195,344 +256496,635 @@ "f46da084": "createName(string,string,string,string,bytes32)", "f46de44a": "Etherumchain()", "f46eccc4": "minters(address)", +"f46eeb31": "addPayout(address,uint256)", "f46f16c2": "MARKET()", +"f46f4cd4": "total_payout()", +"f46f4fc1": "wayfarerWithdrawTaxes()", +"f46f6e3d": "NOT_CURRENT_MANAGER()", +"f46fdd98": "pendingSwan(uint256,address)", "f46ff44f": "dollarToEtherRatio()", "f4700d3e": "lpMaxVolume()", "f4703d26": "numbersCountMax()", "f47073f4": "setTotalIncomeFeePercent(uint256)", "f470fd5e": "BLU()", "f47125f5": "StableICO()", +"f47140ac": "ArrAccountIsLock(uint256)", +"f4719ad9": "remove_acc(address)", +"f471a2cf": "set_Penalty(uint256)", +"f471d7ac": "r(uint256)", "f471e626": "disapproveByC(uint256,string)", +"f47261b0": "ERC20Token(address)", +"f4726469": "setAdvisorsWallet(address)", +"f4726dd2": "addCumulativeReward(bytes32,uint256,uint256)", +"f4727336": "getWolfMintReward(uint256)", "f47279d2": "capRemaining()", "f47289e1": "_ecDouble(uint256,uint256,uint256)", "f472d615": "enableIco()", "f472e136": "fraction(int64,int64)", +"f473237d": "triggerBonus(address)", +"f4732da6": "getTotalLocked()", "f4734818": "_random(uint256,uint256,uint256,uint256,uint256)", +"f4734b0c": "bridgeToken()", "f4736429": "changeUnicornRanchAddress(address)", "f473c484": "BatchDetachAssets(uint256[10])", "f4749624": "dist_list_set(address[],uint256[])", +"f4749901": "getRewardsPercentage(address)", "f474b6b2": "aboutWorker(address)", +"f474c8ce": "getReward(address,uint256)", +"f474e072": "addStakingfee(uint256)", "f4752806": "convert2PeonyToken(uint256)", "f4757a49": "HighestBidIncreased(address,uint256)", +"f47588fc": "wantTokenIndex(address)", +"f47595b4": "viewStakingRatio(address)", "f47599db": "WLMTBounce()", +"f475a985": "tokenExchangeRatio(address,address)", +"f475dc21": "sendBack(address)", +"f4767b70": "setFreshConfig(uint256,uint256)", +"f4768ab2": "getTokensByMerkleProofFrom(bytes32[],bytes,address,uint256)", "f4773d26": "AESSignatum(uint256,string,string)", +"f477526f": "setStackingValue(uint256)", "f47760ac": "forceGame(uint256,uint256)", "f47795f3": "CommonTokensale(address,address,address)", "f477a6b7": "depositEthers()", +"f477b345": "chaiMintAmt()", "f477c2b9": "setColdWalletAddress(address)", "f4784b37": "placeCube(uint256,uint256,uint256,uint256,uint256)", +"f47884ed": "updateDistanceRuned(uint256)", "f478cef1": "leader_2()", +"f4799860": "getAuctionIndex(address,uint256)", +"f479aa03": "AddAddress(address)", +"f47a0735": "allowClaimRefund()", "f47a6e84": "getReleased()", "f47aa124": "AutoSplitCurator(address)", "f47b7740": "information()", +"f47b88da": "slotRewards(uint256,address)", +"f47bc89c": "approveOracle(address)", "f47c84c5": "MAX_TOKENS()", +"f47c9506": "RAMBA()", "f47cd133": "AMBASSADOR_FOUR()", "f47ce310": "getRoomCurrentSet(uint256)", +"f47cf239": "userBattleCount(address)", +"f47d5ac5": "solidIndexToApproved(uint256)", +"f47eadfa": "getMsgHash(string)", "f47efbca": "getMemberLinks(address)", "f47f5921": "exerciseOption(address[3],uint256[3])", +"f47f7328": "Setfeeaddrlog(address,address,address,address)", +"f480454a": "getStakedContractStakersLength(address)", "f4807a4d": "downTickTest(address,uint256)", +"f480ca51": "DisableBlackListForever(address,uint256,uint256)", "f4812eb9": "tokenIdToPrice(uint256)", "f4814444": "_withdrawBalance()", +"f4819cd8": "contract_AMM_liquidity(uint256)", "f481d2d0": "BaseFareCalculator()", "f4833360": "getTeamInfoByID(uint256)", "f48339e4": "MintingEnded()", +"f4834362": "startOwnFixed(uint256,uint256,uint256,uint256)", "f4835aea": "postHardRate()", +"f4838176": "setFeePercent(uint8)", "f4838452": "loseWager(address,uint256,uint256,bool,uint256)", +"f483b3da": "batchFlashLoan(address,address[],address[],uint256[],bytes)", +"f483f33b": "issueReward()", +"f4840123": "initiateFlashLoan(address,address,uint256)", +"f4844dff": "setEnableClaimBlock(uint256)", "f484e827": "slashSmallUsername(bytes)", "f48513ed": "setFundOnContract(bool)", +"f485599e": "startFarmingReward()", "f4869726": "buyWithSignedAddress(uint128,uint8,bytes32,bytes32)", +"f486f1a9": "INITAL_SUPPLY()", "f487404f": "oldOwner()", +"f487ad45": "registerExoticBondAndBondGroup(address,uint64,uint64,uint256)", "f487c403": "DataStore(string)", "f487e4b6": "SendERC20ToAsset(address)", "f4880b22": "transferStatus()", +"f4880ea4": "log(bool,bool,address,address)", +"f488284e": "_approveAssetProxy(address)", +"f488fdd0": "stepTime()", +"f489048a": "protocolFactory()", "f489faf9": "addAddressToBonuslist(address)", +"f48a0b31": "submitEvidence(bytes32,string)", +"f48a3ee0": "viewAttendance(int256)", "f48a3f2b": "PlazaToken(uint256,string,string)", "f48aa044": "upgradeEthCost(uint256)", +"f48b2fb9": "updateAddresses(address,address,address,address)", "f48b4391": "SBToken(address,address)", +"f48bde68": "ethToTokenSwapOutput(uint256,address,uint256)", "f48be22b": "initialiseAllocations()", +"f48bfe65": "invoicedIndex(uint256)", "f48c157d": "createGame(string,bytes32[])", "f48c2afa": "PVCCrowdsale(uint256,address,address)", "f48c3054": "proxyPayment(address)", "f48c4633": "disableRefunds()", +"f48ca580": "queryUserCreditCanSellAmount(address)", +"f48ccabd": "underlyingAssetAmount()", +"f48d0c4a": "allowEmergencyLiquidityShortage()", "f48d11af": "removeFromVIPList(address[])", "f48d1c5e": "totalDisposed()", "f48d371c": "create(uint256,uint256,int256,address,address)", "f48d60ca": "hasOwner(uint256)", +"f48dd6fb": "ethearnity()", "f48e20f2": "getCreateFeeWindowUniverseValue()", "f48e5f27": "infoWithdraw1()", "f48e9c33": "ETPotatoPresale(address,uint256,uint256)", "f48edf0c": "partner(address,address)", "f48f378d": "KuyyomToken()", "f48f3ced": "HFCoin(string,string)", +"f48f463c": "tokendSold()", +"f48f5c6d": "onTorchPassed(address,address,uint256)", +"f48f8ac7": "unauthorizeHubByOwner(address,address)", +"f49032d1": "getAnswerCID(uint256,uint256)", "f4903ca0": "newContract(string,address[],string,bytes32,uint256)", +"f49099b8": "meowthToLp0Route(uint256)", +"f490c21c": "exp_uint_max(uint256)", "f4914919": "incrementContinuityNumber(uint32)", +"f4915354": "claimStdToken(address,address)", "f4915f5f": "BHM()", "f4916f05": "VoteSvp002(address,uint256,uint256)", +"f4922942": "PlayerPaid(uint256,address,uint256)", "f49259b7": "UpgradeableToken(address)", "f49296ae": "WasHere()", "f4929cc5": "initPair(address)", "f492a72f": "signUp(address[],uint256[],string)", +"f4934cdb": "removeSubmission(address,string)", +"f493584c": "publicSaleScheduleReleaseStart(uint256,uint256)", "f493c848": "transferMultiply(address[],uint256[])", +"f4942501": "areStakeAndWithdrawAllowed()", +"f4950187": "tradeTokenForEtherUsingReservesSpecifyingFee(address,uint256,uint256,uint256,uint256,uint8)", "f49501f3": "soldOnCurrentSale()", "f4954387": "setHalt(bool)", +"f495ac44": "currentid()", "f49627be": "Technology4G()", +"f496a610": "buy(address,uint256,bytes)", +"f496d882": "bidder()", +"f49700e6": "myL()", "f4970e71": "approveWithdrawal(address,uint256)", "f49727bd": "getSkillEvaluation(address,uint256,uint256,uint256,address)", +"f4974554": "pool1percentage()", "f497463a": "setVariables(uint256,uint256,uint256,uint256)", +"f49758ff": "tk_addTokenList(string,address)", +"f497cc6d": "newjustexchange(address)", "f49808ea": "addEthForPayment()", +"f49826be": "makeCommitment(string,address,bytes32)", +"f498d8a6": "setReserveFund(address)", +"f4993018": "rebalance(uint256)", "f4993bbd": "executeEmergencyWithdrawal()", "f499a349": "NewPrefixPrice(uint256,uint256)", "f49a5504": "permittedInvestors(address)", "f49a616c": "updateFeePayoutAddress(address,address)", "f49a66fd": "_pushLandId(uint256,uint256)", +"f49b4574": "origTotalSupply()", "f49b728e": "setAllResourceERC20Addresses(address)", +"f49b8320": "unfreezedGearTokens()", "f49b8e10": "BelezaNetwork()", "f49bb5a8": "numberPlateExist(address,string)", "f49bbb23": "getUserClientsCount(address)", "f49bff7b": "getBounty()", +"f49c87e7": "rewardDivisor()", +"f49c8e9c": "_isSelf(address)", +"f49ca2b5": "brrr(uint256)", +"f49ca531": "rwCount()", "f49d1d19": "viewSellOffersAtExchangeMacroansy(address,bool)", "f49dec70": "buyPepeAffiliated(uint256,address)", +"f49e4745": "newPolicy(string,string,uint256,uint256)", "f49e8135": "calculateTokenBuySimple(uint256)", +"f49ec310": "vote_weight(address)", +"f49ecd80": "send(address,uint256,uint256,uint8,bytes32,bytes32)", "f49eee20": "priceFactorB()", "f49f0974": "proxyList()", +"f49f386b": "wbtcTotalUnlock(uint256[])", "f49fc563": "SULTANS()", "f4a011be": "transferWithReserving(address,uint256)", "f4a05f8f": "_transferAsset(uint256,address,bool)", +"f4a0a528": "setMintPrice(uint256)", +"f4a0eaa3": "NewParameterizer(address,address,address,address)", "f4a1585b": "setNextCycle()", +"f4a1faae": "goToPublic(uint256)", "f4a222e9": "icoRaisedETH()", +"f4a251a1": "getEndStage_2()", +"f4a29680": "totalSettleable()", +"f4a2f6ee": "tokenBidPrice(uint256)", +"f4a309b2": "minimumVaultPerBlock()", "f4a32ef8": "bonusTokensSold()", +"f4a3c6ab": "addValuePool(address)", +"f4a4341d": "epoch1Start()", "f4a43448": "getEstateSize(uint256)", +"f4a456b0": "setProviderType(uint8)", "f4a475cb": "t_ImmlaTokenDepository()", "f4a4b8c7": "OfferUnHold(uint256,bytes,bool,address)", +"f4a5b0cd": "snapshotTaken()", "f4a67395": "showAddresses()", +"f4a67607": "handleBridgedNFT(address,address,uint256)", +"f4a6855e": "LogA(string,address)", +"f4a6d9b4": "govBalance()", +"f4a6e1e2": "removePP(address)", "f4a6ef99": "logBytes(bytes32)", "f4a81d08": "getKudosGiven(address)", "f4a8619a": "prep(address,uint8)", +"f4a88c4c": "_curveGauge()", "f4a8a699": "_mint_with_uri(address,uint256,string)", "f4a8cbc0": "tokensToWei(uint256,uint256)", +"f4a90733": "bcash()", "f4a92020": "rawApprove(address,bytes32)", +"f4a94607": "initiateSalePrices(uint256[],uint256[])", "f4a972de": "softEthTransfer(address,uint256)", +"f4a986cb": "astroOwnerToIDIndex(address,uint256)", "f4a9c919": "startThinking()", "f4a9df62": "annul(address)", "f4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", +"f4aa3a8d": "leverageUntil(uint256)", "f4aa956c": "preIcoIsRunning()", "f4aac034": "charityFraction()", +"f4ab27cc": "solve(uint8,bytes32,bytes32)", "f4ab2928": "isContractPaused()", "f4ab2b19": "releaseAllOldBalanceOf(address[])", +"f4ab3679": "SecurityReg(address,bool)", "f4ab4d1d": "_getPetAura(uint256)", "f4ab9adf": "addVoter(address)", +"f4abf5eb": "ownertokenCount(address)", "f4ac6560": "batchVipWtihLock(address[],uint256[],bool)", "f4acc2ed": "setContractAdmin(address,bool)", "f4accda5": "order(uint256,uint256,address)", "f4ace1a5": "processContribution(address,uint256)", "f4ad2212": "EthereumEmerald()", +"f4ad3869": "CONTRACT_TOKEN()", +"f4ad70ad": "OwnerReclaim(address,address,uint256)", "f4ad8e37": "listings(uint64)", "f4ae0d2f": "getTechBonus1(uint256)", +"f4ae1474": "rebalance(uint8)", "f4ae2164": "EDToken()", "f4ae67a1": "setTargetDiscountValue9(uint256)", +"f4aead5c": "unlockValueMultiplier()", +"f4af5460": "floatErrorOffsetMul()", +"f4af6e5c": "mintSelfYoutubeNft(string)", "f4af9146": "setDefaultTranche(bytes32[])", +"f4af9e9d": "multiMigrateBalance(address[],uint256[])", "f4afbdca": "assets_explorer_controller()", +"f4b00513": "newVote(bytes,string,bool,bool)", +"f4b030b2": "own_contract()", +"f4b05cb1": "sweepChange(bytes32)", +"f4b0650d": "Signer(address)", +"f4b0949a": "swapAmount(address,address)", +"f4b0b756": "reciever()", "f4b0ce03": "NewIssue(address,uint256,bytes)", "f4b103d4": "SimpleStorage(uint256)", +"f4b16045": "approved(address,address)", "f4b186a7": "setProfitOwner(address)", "f4b272db": "licenseAttributes(uint256)", "f4b28747": "CaptainToken()", +"f4b2a46e": "Tasks(uint256)", "f4b2dfea": "Matching_Finneys()", "f4b2f5b6": "maxTokenSupplyICO1()", +"f4b351c7": "TokenPurchase(address,uint256)", "f4b43268": "phrase()", "f4b432b8": "validUser(string)", "f4b489e7": "upgraded(address)", "f4b4d77e": "cutOf(uint256)", "f4b5cbc4": "setCrowdSale(address)", +"f4b5e3e4": "_liquidateAccount(address,address)", +"f4b6cf60": "setArb(uint256,uint256)", +"f4b71fed": "TranscoderSlashed(address,address,uint256,uint256)", "f4b74ae9": "updateBestInvestor(address,uint256)", "f4b79379": "generalRate()", +"f4b7c382": "addModel(string,bytes32,string,bytes32,bytes32)", "f4b86c48": "isMarketplace()", +"f4b8b691": "_recommandCountM(address)", +"f4b91c7a": "postponeStakeRelease(address)", "f4b95676": "IsReady()", "f4b96570": "greet_omar(uint256)", "f4b97c4c": "insertNode(bytes32,bytes32,bytes32)", +"f4b9c9b1": "mintAndFinalize(bytes)", "f4b9fa75": "dai()", +"f4ba80b5": "ajioPercent()", "f4ba89f9": "escrow_fee_numerator()", +"f4ba965d": "setTokenFeePercent(uint256)", +"f4bac910": "pendingiKomp(uint256,address)", +"f4baf59c": "kebabToWbnbRoute(uint256)", +"f4bb1b21": "getRegisteredPoint(uint256)", +"f4bb3bdb": "aEBZEXT()", "f4bbd5d4": "getDealByNumber(uint256)", "f4bbfd6a": "scheduleCall(bytes,bytes)", +"f4bd0715": "invalidBenzTicketCount()", "f4bd0bcf": "isConditionMet()", "f4bd0eb2": "getSplit(uint256,uint256,uint256,uint256)", "f4bd65a7": "_updatePhaseTimes()", "f4bd9429": "unassignOwner(address,address)", +"f4bdb9b5": "LIQ_WAIT_TIME()", "f4bead6e": "percentageToToteLiquidatorWallet()", +"f4beb01c": "only_dAppBridgeCheck(address,address)", "f4bebac2": "winner_bids()", +"f4bed5c2": "setTakerAddress(address)", +"f4bf6658": "setLatestAnswerWithRound(int256,uint256,uint256)", +"f4bf9d39": "disableLimitHolders()", +"f4bfdc74": "getBeginDeflationary()", "f4bffad6": "bonusForMainICO()", "f4c06c8e": "removeConfirm(bytes)", +"f4c09c17": "personIndexToApprovedGen1(uint256)", +"f4c0c779": "__createPolicyManagerFor(address)", +"f4c0d10e": "isOrNotOwner()", +"f4c0fab4": "earning(address)", "f4c140b2": "setArtistFees(uint256)", +"f4c17770": "_whiteListSeconds()", +"f4c1a1d7": "transferOption(address,address,uint256,uint256)", "f4c28ea3": "lowerLimitForToday()", +"f4c2aaf7": "is_BlackList(address)", +"f4c2baa9": "setLp(address)", "f4c2ebdd": "createLandAndAuction(address,uint256,address,uint256,uint256)", +"f4c2ff51": "deleteRewards(uint32)", "f4c38aa1": "initLending(address,uint256,uint256)", "f4c3b4d7": "transferable(uint256)", "f4c3f3f7": "fetchAllDataForCustomer(address)", +"f4c442b1": "machineId()", +"f4c4a56f": "getMaxCollateral(address)", "f4c52644": "requestRefundDonator()", +"f4c563a3": "TokenAdded(address,uint256)", "f4c5ab7c": "validateCallGas(uint256,uint256)", +"f4c5cd3c": "addScore(string,uint256)", +"f4c62dd2": "setRenBTCAddress(address)", "f4c679db": "Gidnist(address)", +"f4c68cdb": "moveToken(address,uint256)", "f4c6f423": "requestWarranty(string,address,uint256,uint256)", +"f4c7076a": "_BASE_()", +"f4c714b4": "files(uint256)", +"f4c78e16": "returnNow()", "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()", +"f4cac27e": "approve_472(address,uint256)", +"f4caeb2d": "AuthorizedOperator(address,address)", "f4caee88": "isParticipating(address)", "f4cb09cf": "setAmbassadors(address,bool)", "f4cb290b": "editMemeInfo(uint256,string,string,string,string)", +"f4cb3b60": "pushAddress(uint256,address)", "f4cb4ae3": "tokenCreationMaxPrivateSale()", +"f4cbc737": "fourthReleaseTime()", +"f4cbfcab": "rotAmountToSwapForMaggot()", +"f4cc3dc9": "LogBet(address,uint256,uint8,uint256)", +"f4cc7b39": "cS(string,string)", "f4ccbc4f": "getWithdrawals(address,address)", +"f4cd1f85": "NewSmartToken(address)", +"f4cde469": "setSwapRate(uint256)", "f4ce66e0": "extractUint(bytes,uint256,uint256)", "f4ce7c1c": "purchaseWithEther(uint256)", "f4ce7d4a": "ChannelContractAddressChanged(address,address)", "f4cebdc2": "HeroCore()", "f4cee3b5": "jasontestToken()", +"f4ceeeb1": "_dbg_swap()", +"f4cf0830": "getNodeTrustedRefundRatio()", +"f4cf4213": "_vault2()", +"f4cf6cbf": "tx_amt()", +"f4cf7a19": "getIfExecuteable(uint256)", +"f4cf96b1": "globalSwapID()", +"f4cfdb17": "getRewardByPercent(uint256,uint256)", +"f4d040b0": "SealedOrderPlaced(address,uint256,uint256)", "f4d0b2a5": "RefundInvestorsBallot(address)", "f4d0b67f": "SetTime(uint256)", "f4d176e1": "mapMaster()", +"f4d1a3b8": "ensureApprove(address,address)", +"f4d1d260": "addCard(uint256,uint256,uint256)", "f4d21515": "submitQuery(uint256)", "f4d218f9": "lastBlockClaimed()", "f4d22b02": "transferMoreETH(address,uint256)", +"f4d23113": "stakeByPID(uint256,uint256,address)", +"f4d24173": "COREGlobalsAddress()", +"f4d24446": "calculateEthereumToPay(uint256)", "f4d24fea": "setItem(uint8,uint8,uint256)", "f4d26fec": "upgradable()", "f4d28ab0": "Update_START_PREICO_TIMESTAMP(uint256)", "f4d2cac3": "setBonusSale(uint256)", +"f4d2d14e": "calcBurn(uint256)", +"f4d2f6c3": "getLaserReward(uint256,uint256)", "f4d3e94f": "weiRaisedInPresale()", "f4d44b72": "getBoardsCount()", "f4d48c0d": "channelParticipant(uint64,uint64)", +"f4d4c9d7": "deposit(uint8,uint256)", +"f4d4f95a": "lpEthWeekAmount()", +"f4d508ec": "getUserInfo(address,uint256,uint256)", "f4d56a51": "isIdValid(bytes16)", "f4d5d6ce": "seriesBSupply()", "f4d64745": "HgcToken()", +"f4d6532e": "setPercentageFeeGovernanceBps(uint256)", +"f4d65ef4": "setMySender()", +"f4d76499": "getReceiver(uint256)", "f4d76b60": "postValidatePurchase(address,uint256)", +"f4d770e4": "deposit(address,address,uint256,bool)", "f4d7b725": "GasPrice()", +"f4d7da45": "OneOfMassFunctionsLaunched(bool)", "f4d87f8a": "WW3Token()", +"f4d92860": "tokenFromRebase(uint256)", "f4d92886": "test_shutDownVersion()", "f4d94699": "EndowmentRetriever()", "f4d957a5": "test_validProxyFundTransfer()", +"f4d96549": "paidTeamActivationGain(uint256,uint256)", +"f4d98058": "donatePool(uint256)", +"f4d9fecc": "resetAuction(uint256,uint256,uint256)", +"f4da0019": "setIsPayable(bool)", +"f4da4255": "SaleInitialized(uint256)", +"f4da5533": "updatexgtGenerationRateStake(uint256)", +"f4da6631": "modifyAdmin(address,bool)", "f4da6a54": "AUTHORSIGHASH()", "f4da834c": "cancelAuctionToBuy(uint256)", +"f4da98d5": "stakedFor2()", "f4daa98c": "BitcoinFuture()", +"f4daaba1": "batchSize()", "f4dadc61": "locks(uint256)", "f4dae266": "total_wei_given()", "f4dafe71": "update_hash(bytes32)", +"f4db2de3": "doubleRewardEndTime()", "f4db9ad1": "bountyOnlineTokens()", "f4dba182": "take(uint256,uint256[])", +"f4dbc4a4": "requestETHPrice()", "f4dbeb9d": "getCredRanksByContents(address,uint256[])", "f4dc2d21": "Deed(uint256)", +"f4dc754b": "isOwned(address)", +"f4dca8e7": "vaultOfOrder(address,address,uint256,uint256,address,bytes32)", +"f4dcae3e": "getClaimableMigrationBonus()", +"f4dcb1eb": "transferAll(uint256,uint256)", "f4dd0fe9": "ico1Max()", "f4ddca3c": "shortenBonusPreIco(uint256)", +"f4ddcf86": "_swapBodhiToMerel(uint256)", "f4ddff1c": "_teamID()", +"f4de0e8d": "setConstAdmin(address)", +"f4de5305": "_getMetadataValueForRequest(uint256,uint256)", "f4de8dfe": "generateUID(uint256,uint256,uint256,uint32)", "f4def44b": "getStaff(uint256)", +"f4df0ab6": "setPercent_withDraw(uint256)", "f4df1fb2": "themedSpinners(uint256)", "f4df80ee": "subUserTokens(address,uint256)", +"f4dfd2ea": "setUserInfos(uint256[])", +"f4e0d9ac": "setStakingAddress(address)", "f4e0f412": "exec(address,uint256)", +"f4e10de2": "betEvents(address,uint256)", "f4e1358a": "transfer_enabled()", +"f4e2c233": "ESetEndTime(uint256)", "f4e2d68b": "ltcBalance()", +"f4e337cb": "GameHasClosed(uint256,uint8)", "f4e340ac": "RedFoo()", "f4e36afd": "findThroneByNameHash(uint256)", "f4e3be2d": "getSpawnProxy(uint32)", "f4e42844": "ResetTransferState()", "f4e50a4d": "getSupportedTokenByIndex(uint256)", +"f4e595de": "produtos(uint256)", +"f4e5ac5c": "investorTotalWithdrawal()", "f4e62c34": "OrigoToken()", +"f4e64725": "_transferFeesForPool(bytes32)", "f4e68486": "weiICOMinimum()", "f4e6a70d": "addAnimalType(uint128,uint8)", "f4e6d3f9": "calculateLockedPercentage(uint8)", "f4e733c3": "lifeTime()", "f4e75b79": "OwnershipTransferProposed(address,address)", "f4e76a46": "getBalanace(bytes32,address)", +"f4e792a1": "checkControlAddress(address)", +"f4e7bfa7": "sellRoadmap()", "f4e83593": "Volunteertimedollartocken()", "f4e96093": "IntimateShoppe(uint256,uint256,uint256,address,address,address,address,uint256,uint8)", "f4e9c944": "PRE_ICO_START_TIME()", +"f4ea69d1": "areVoted(address)", "f4ea7263": "Take_share_team_AES()", "f4ea77f3": "coinPool()", "f4ea95b9": "validateReleaseVersion(uint32[3])", +"f4eaeb4e": "testAssign()", +"f4eb08db": "secondaryToken()", "f4eb20da": "SNC()", +"f4eb4632": "weiTarget()", "f4eb6889": "description1()", +"f4ebe040": "timedOut(uint32)", "f4ebed78": "currentReward(uint64)", "f4ec186d": "MoonCoin()", +"f4ec521e": "getTeams()", "f4ec593d": "ICOCrowdsale(uint256,uint256,address,address)", +"f4eccb8f": "getSignatures(uint256)", +"f4ed02c0": "changeBuyingTokenRewardPeriod(uint256)", "f4ed0f46": "editionSize()", "f4ed216c": "removeExchangePartnerTargetAddress(address)", +"f4ed2286": "LogTriggerCrossFork(bytes32,uint64,uint8)", "f4ed660f": "testIfElse()", "f4eda76a": "traitIdxToName(uint256)", "f4eda996": "extractEntry(address[],uint256[])", "f4edb15b": "narcosByOwner(address)", +"f4ee3b5a": "VoteCasted(uint256,uint256,uint256,uint256,address)", +"f4ee67fb": "updateFundStatus(bool)", "f4ee82ee": "TOKEN_SECOND_DISCOUNT_MULTIPLIER()", "f4ee9efe": "mintPartOfEmission(address,uint256,uint256)", "f4eef932": "deptcheckapproval(string)", +"f4ef4d69": "stateSyncer()", +"f4ef69fb": "setComplete(address,uint256,uint256,address,uint256,address,string,uint8,bytes32,bytes32)", "f4efa24c": "getConsensusDetails(address)", +"f4efc478": "teamOneYearFrozen()", +"f4efced2": "calculateBNBReceived(uint256)", +"f4efe8fa": "IncreaseCap(uint256)", +"f4f06c97": "minVolume()", +"f4f06eed": "buyHodlC(uint256,uint256)", "f4f0b6e5": "investorDate(address)", "f4f0dafd": "T0XToken()", +"f4f0e1ae": "amountDeposited(address)", "f4f0fc21": "raiseCap(uint256,uint256)", "f4f22662": "setPersonalBonus(address,uint8)", +"f4f25897": "createStdERC20TokenIssuer(address,string,string,address,address,address)", "f4f27042": "open(address,address,uint256)", +"f4f2be46": "GLUWA_ROLE()", "f4f3122e": "startSale(uint256,uint256)", +"f4f3641e": "target_price()", +"f4f3b200": "withdrawERC20(address)", "f4f3b97c": "updateSubjectMatter(uint256,string)", "f4f3bdc1": "minus(uint256,uint256)", "f4f3c8a4": "comment()", "f4f42246": "percentageCut()", +"f4f4c6dd": "getAllVotesForClaim(uint256)", "f4f4d237": "getById(uint256)", +"f4f55a19": "__basicTokenTransferable()", "f4f572ae": "CMO_Signature()", "f4f59992": "m_analytics()", "f4f5b30f": "unitTestGetAvailableReward(uint256,uint256)", "f4f5e1c1": "SHARE_BOUNTY()", "f4f61563": "setInviteeCount(address,uint256)", +"f4f62b6d": "totalRegistrations()", +"f4f63c69": "cntPerBlock()", +"f4f65257": "editTask(uint256,address,bool,uint256,uint256,uint256,uint256)", +"f4f67137": "getBalancerAddress()", "f4f6d6fe": "weiMinSale()", +"f4f6ebd6": "LogRemoveOracle(address,string)", "f4f724b3": "getEmployerJobsByStatus(address,address,uint8)", +"f4f7ae9e": "balanceOfUnTimeLocked(address)", "f4f7c6c2": "disagreeWithdraw(uint256)", "f4f864f0": "STARBITToken(address)", +"f4f876a6": "lockedTokenLookup(address)", "f4f87730": "create_token(uint256)", +"f4f8cee2": "_redeemFee()", "f4f94a40": "ownerSetRandomGenerateMethod(uint256)", +"f4f951d6": "openMatchId_()", "f4f96d29": "smartWallet()", "f4f98ad5": "commit(uint256)", "f4f996d5": "WandtChain(uint256,string,uint8,string)", +"f4fa0dea": "stake6m(uint256)", +"f4fa3d5c": "shipsInGame()", "f4fa6c1d": "blockheight()", "f4fa8603": "fabricTokenSafe()", "f4fab748": "end2Timestamp()", +"f4fb27e3": "setDonFund(address)", +"f4fb5ea9": "DEFAULT_DISBURSAL_RECYCLE_AFTER_DURATION()", "f4fb6789": "tknfwdToken()", "f4fb7d4e": "m_nonEtherController()", +"f4fb86c0": "getConvertibleTokenSmartTokens(address)", +"f4fb9b2f": "orderList(address,uint256)", "f4fba1bc": "executeProof(bytes32[],uint256)", +"f4fbe2de": "OnAddRoot(address)", "f4fc3570": "disableController(address)", "f4fc5d13": "RevealBet(string)", +"f4fcb0eb": "invalidateOldOrders(uint256,uint256)", "f4fd326c": "SuperCarbonCoinToken()", +"f4fd47cf": "distributeReward(address,address)", "f4fde3b6": "sendMoneyOwner()", +"f4fded1b": "dgm_treasury()", "f4feccbb": "LogUserUnRegistered(address)", "f4ff56f4": "ProposalCloned(uint256,uint256,uint256,string,bytes32)", +"f4ff64c3": "forceGreyListedExit(address)", "f4ff78bf": "changeMaster(address)", +"f4ff7d2d": "closeLoan(bytes32)", "f4ffa7a9": "getMountTokenIds(uint256,address)", "f50059b6": "reconcileDividend(address)", "f500a0a3": "VeritasToken()", "f5012d4b": "sendOtherTokens(address,uint256)", "f5015000": "setMaxCharacters(uint16)", +"f5015565": "lock90Days()", "f5018d1c": "IronHands2()", "f501af70": "OpenLongevityPresale()", "f501d8b8": "transferFromICO(address,uint256)", "f5023de9": "founder2Wallet()", "f50249fc": "totalSupplyMax()", +"f502b808": "updateCartReward(uint256)", +"f502ca74": "interestUpdateReward()", "f502cdc0": "distributeNIM(address[],uint256,uint256)", +"f502f773": "monitorSecurityMargin()", "f5037b2a": "addressLength(address,address)", "f503a994": "leaveTeam(uint256,uint256)", +"f5041bd0": "MKRPEP()", "f5042801": "setAsRefunded(address,uint256,uint256)", "f504b089": "memberKeys(uint256)", "f504e0da": "load_level(uint16)", "f504efa7": "popHatch()", "f50522ca": "setNote(uint256,bytes32,string,string)", +"f50572cb": "getSalt(uint256,address)", "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()", +"f506f639": "PROOF_GOL()", "f506fc54": "acceptValentineRequest(address)", "f5074f41": "destroyAndSend(address)", +"f5087650": "SignalProvisionRefund(address,uint32,uint256,uint256)", "f5088730": "copy(uint256,uint256,uint256)", "f509078f": "isForAuction(uint256)", +"f50916d4": "hostDetails(string)", "f5093ab4": "UpdateState(uint8,uint8)", "f509b627": "confirm(address,uint224,uint32,address)", "f509c554": "PIPSCHAIN()", +"f509ea66": "totalOfferUser(address)", "f50a2644": "canCompleteContribution(address)", +"f50a97df": "uniToKyberSwapArb(address)", "f50aac53": "register(address,string,uint8,string)", "f50ab247": "StopGame()", "f50ab7b0": "updateCoupleImageIPFShash(bytes)", @@ -140541,123 +257133,226 @@ "f50b5308": "PRICE_MULTIPLIER_ICO1()", "f50b769e": "lastEditionOf(uint256)", "f50bab3f": "distributeCRTM(address[],uint256,uint256)", +"f50be717": "getRedeemCosts(address,uint256,address)", +"f50c01ef": "setTaxFee(uint16)", +"f50c75d5": "getVerifiedContractorsCount()", +"f50c7c1a": "refProfit(address)", "f50ca46a": "hasICOFinished()", +"f50caa7a": "frax_from_spot_to_issue()", +"f50cb289": "moneyRemaining()", "f50d3914": "resetFoundationtList()", "f50e3ac8": "_getAllInterest()", "f50ebd21": "OHGLuangPrabang()", +"f50ec689": "rewardbase()", "f50ecf0b": "basicIncomeLimit()", "f50f1ba9": "_getRevisionTimestamp(bytes32,uint256)", "f50fc02e": "flipsLost()", "f510371a": "deleteOperation(bytes32)", +"f5109a39": "mythexCostPerUpgradeLevel(uint256)", "f510c329": "EmitTransactionDetails(address,uint256,uint256,uint256,string,string,string)", "f510c32b": "setRateWaiForCentPerToken(uint256)", "f510ccd3": "CancelAuction()", "f51119db": "checkAuditor()", "f5112373": "testFloatArray()", "f5112f87": "welcomeBonus()", +"f511bdfe": "setClaimStatus(uint256,uint256)", "f512106a": "testStringKeyValue()", "f5122232": "LogAccess(address,bytes32,address,bytes4,bool)", +"f5125ac0": "setVal(uint16)", +"f5127043": "checkIfBlankChildSlot(uint256,uint256,bool,uint32)", +"f5131d2b": "nftCoreAddress()", "f513a671": "soldItems()", +"f513b261": "rewardRecorderAddress()", +"f513c98a": "pauseExecution(uint256)", "f5143b1c": "HNContract()", +"f514ce36": "uid()", +"f514d6b2": "dollarPriceToBuy()", "f514e92c": "TARGET_DURATION_BETTING_BLOCK()", "f514f0f9": "STAGE_THREE_TIME_END()", +"f5156b70": "claim1(address)", "f5156fba": "CECToken(uint256,string,string)", +"f5165863": "register(uint64)", "f5166eea": "reservedTokensLockedPeriod()", +"f516b422": "bio()", "f516e9ec": "ethDeltaDepositAddress()", +"f51715ad": "CobeFriendIndexToOwner(uint256)", "f5173120": "TOKEN_FIFTH_PRICE_RATE()", +"f5174ae9": "g3()", +"f51814f6": "getUnconfirmedBalance(string)", +"f5181e2c": "setFeeYE18(uint256)", +"f5189ee3": "borrowed(uint256)", "f518e66d": "_addStakeholder(address)", "f5194ae2": "MainToken()", "f5195b62": "c_dateTo()", "f5196002": "getBOPCount()", "f519618f": "addMultipleTier2Members(address[])", +"f51ace70": "currentRewardRate()", +"f51ad7fb": "cd_pool_top(uint8)", +"f51b07ed": "erc20RewardToken()", +"f51b0fd4": "rebaseOptIn()", +"f51b5531": "MIN_T()", "f51b793a": "get_appuration(uint8)", +"f51bd00c": "addressToStakeMap(address)", "f51c2907": "affiliatThreshold2()", +"f51c67dd": "PaidBackPortionForLoanAtIndex(uint256,uint256)", "f51c755b": "testConcatMemory33Bytes()", "f51cbc72": "Level()", +"f51cf927": "RULINGS(uint256,uint256)", "f51d0c6f": "_awardForRecommender(bool,uint256,uint256)", "f51d1399": "reduceBalance(address,address,uint256)", +"f51d3035": "getReservesByPool(address)", "f51d401f": "getStageStartTime(int256)", "f51d4cb1": "getCurrentVUPRate()", "f51d61ff": "Thanatos()", +"f51d7616": "SaleRestarted(address,uint256)", "f51d7d5f": "getTitle(address)", "f51dcaa7": "AVGONE()", "f51e181a": "scale()", +"f51ef36e": "totalEtherInRds()", "f51f4738": "setCompleted(bool)", "f51f5e78": "addPlayer(bytes32,bytes32,bytes6)", +"f51f7496": "target_token()", +"f51f74a9": "hashToTokenId(bytes32)", "f51f96dd": "salePrice()", "f51fb6a1": "leftInTier()", +"f5202326": "getAvailableTokenAddress(uint256)", "f5207c31": "businessPlannedPeriodDuration()", +"f520b58d": "hasPermission(address,address,bytes32,uint256[])", +"f520e7e5": "rewardDuration()", +"f5212512": "getNoOfUniqueVoters()", "f5218ec2": "increaseRepAvailableForExtraBondPayouts(uint256)", +"f52294c3": "getmanager()", +"f522ad11": "currentCommitment()", "f522ec0e": "_refundTokens(address)", "f52343f4": "flipExecutionSwitchTo(bool)", "f5235a46": "withdrawFoundersTeamAndAdvisors()", "f5238546": "stopInvest()", "f5238660": "totalMarketingFundMinted()", +"f5239f64": "startDepositExit(uint256)", "f524613f": "freeze(address,uint256,uint8)", +"f5247fb0": "pickling()", "f5251269": "ETHDividends()", "f5254af8": "startPriceForHLPMT()", "f5258aee": "ContractAdded(address,uint256)", +"f5259f82": "getPrice(string,uint256,address,address)", "f525cb68": "poolCount()", "f525dcf1": "setLockFund(address,uint256)", "f52706c9": "setMinResalePercentage(uint256)", +"f5276e4c": "initializeController(address)", +"f52790bc": "lastRewardId()", +"f527aa5e": "getBancorData()", "f527c856": "TOKENS_PER_KETHER()", "f527dd6c": "_emitSkillSet(uint256,uint256,uint256,bytes32)", +"f528c949": "dispatchAddress()", "f5292748": "_stakeContent(address,bytes32,uint256,uint256,bytes8,uint256,uint256)", +"f5296850": "getWithdraw(address,uint256,uint8)", "f5298aca": "burn(address,uint256,uint256)", +"f529a5d0": "getInterestRateStrategy()", +"f529afa3": "viewDividendsEarned(uint256,address)", "f529d448": "changeBalance(address,uint256)", +"f529e53c": "depositHelper()", +"f529e5ca": "getMinimumWithdrawalAmount()", +"f52a36f7": "slopeChanges(uint256)", "f52a41f3": "mintOWL(address,uint256)", "f52ad690": "badgeUnFreeze()", "f52ae24b": "transmute(address,uint256)", "f52b8d1f": "tokenReserved1Deposit()", "f52bbc2d": "withdraw(address,address,uint256,uint256,address)", +"f52bccad": "tracker()", "f52bd7cb": "addSwap(bytes5,bytes5,bytes32,bytes32,bytes12,bytes32,bytes32,bytes12)", "f52c456f": "_createClown(uint256,uint256,uint256,uint256,address)", +"f52cc913": "receiveETH(uint256)", +"f52d21f3": "gapPerBlock()", +"f52d63b3": "Whatsapp()", +"f52d9531": "swapCatnipV1(uint256)", +"f52dfddd": "balanceOfPendingReward()", +"f52e33c9": "ServiceFunction2(address[],uint256[])", "f52f2526": "exerciseOption(uint256)", +"f52f368d": "isConditionalLocked(address,uint256)", +"f52f751d": "RegEth()", "f52f77b2": "createEntity(address,address)", "f52fa89b": "evolveGeneration(uint16)", "f52ff1da": "SDT(address)", "f530259e": "isBlacklistDestroyer(address)", +"f530268d": "createFarm(address,uint256,address,address,uint256,uint256,uint256,uint256)", +"f53037b6": "updateBorrowRates(uint256)", +"f5304cb0": "getCbondInterestRateNow(address,uint256,uint256,bool)", "f5308c7d": "removeTransferLock()", +"f530cece": "getImprintCounterByAuth(address)", +"f531497c": "setupCommissionHolder(address)", "f5318389": "setEmbassyCtrl(address)", "f531aff2": "THINK_TANK_FUND_TOKENS()", "f531cc63": "LogCreateEVN(address,uint256)", "f531dbbf": "TOKEN_SWAP_DURATION_HOURS()", +"f53230a8": "InkeTradeCreated(uint256,bool,uint256,uint256)", "f5323da4": "phase_5_bonus()", +"f532c6b6": "f(uint256,uint256,bool,bool)", "f532e888": "getBookForUser(uint256)", +"f53340af": "PoolAdd(uint256)", "f5336737": "BFTcoin()", "f5341b4e": "UserTipped(address,bytes32,uint256,bytes32,bool)", "f5343752": "exchangeEnabled()", +"f53437af": "_setfusionCallerFee(uint256)", "f534b022": "burnleftToken()", "f534d187": "girlBasicToken()", +"f5351cfe": "burnAIn(uint256,uint256)", "f5357102": "tohash(address,address,uint256)", +"f5361219": "CURRENCY()", +"f5361946": "pbtc()", +"f536a228": "pee()", +"f536b3ee": "setFirstBeneficiary(address)", "f536c61a": "deleteAllChildren()", "f5370884": "WithdrawalVotedEvent(uint256,address,uint256,uint256)", +"f537191f": "startWar(string,string,string,string,uint256,uint256,uint256,uint256,uint256)", "f5376e49": "TestingToken(uint256)", "f53773dc": "withdrawBattleValue(uint256)", "f5383f3a": "getFoundationStatus(address)", "f5385345": "acceptOwnershipOffer()", +"f5387cff": "daoStartBlock()", +"f538ba51": "repayETH(uint256,uint256,address)", +"f5391c92": "redeemedTickets(bytes32)", +"f53928d1": "overload1(uint256,uint256)", "f5397b5d": "initiate(bytes32,address,address,bytes32,uint256,uint256)", "f53995ff": "setIncludeAuctions(bool)", +"f5399bf5": "GetNumberOfCampaigns()", +"f53a2515": "disableReserveStableRate(address)", "f53a93f8": "MyFinalizableCrowdsale(address)", +"f53ac731": "AddBacker(address,uint256,uint256)", "f53b0b3a": "_regularDonationsTotal()", "f53b396b": "SimpleTokenCoin()", "f53b8ded": "mintPreSaleTokens(address[],uint256[],uint256[])", "f53bc835": "setMaxBuy(uint256)", "f53bde25": "RATE_PRIVATE()", "f53c5c87": "setTileContract(uint16,uint16,uint8,address)", +"f53c7e2f": "weightByDestination(address,bytes4)", +"f53cc4b3": "exitMarket(address,address)", "f53d0a8e": "administrator()", "f53d9d58": "AddLiquidity(uint256)", +"f53d9ec1": "removeIndex(uint256)", "f53da97e": "currentSalePhase()", +"f53dfb84": "collateralAmountForLoan(uint256)", +"f53eb776": "TokenPresaleWithdraw()", +"f53f1350": "deleverageToMin()", "f53f43d9": "setcapname(string)", "f53fb0cb": "isCollectionAllowedAt(bytes8,bytes8,uint256)", "f53fbaf6": "send_ETH_from_contract(address)", "f53fd201": "_modifyPixelColor(uint24,uint32,address)", +"f53fdb15": "getUserAPR(address)", "f54011f5": "blockExternalTransfer()", +"f5406970": "getPairInfo(address,address,address)", "f54095a7": "standart()", "f5414023": "claimReward(bytes32)", +"f541666e": "getOwnerBills(address)", "f5419108": "view46()", +"f541c5ac": "setStakeLevel(address)", "f541c812": "releaseReward(address,uint256)", +"f541ec04": "hxpApy()", +"f542630a": "calculateLiquidationPrice(uint256[5],uint256[4])", +"f542dfcf": "likeSlots()", +"f542ec4c": "entryNotionalSkew()", +"f5430782": "deaoRecorderAddress()", "f543d3c6": "Stockfinex(uint256,string,uint8,string)", +"f5449f35": "withdrawMoney(address,address,uint256)", "f544cf4f": "decayedPriceOfCard(uint256)", "f545118b": "subdividendsOf(address)", "f54575d6": "addAdvisor(address,uint256)", @@ -140666,12 +257361,29 @@ "f5462105": "isFundedMax()", "f546232d": "ComputeMyEggs(address)", "f5465992": "totalTokenBalance(address)", +"f546f427": "personToOldPrice(uint32)", "f5470d7b": "itemType()", +"f5476877": "LogReceiveExternalProfits(address,uint256,uint256)", +"f547bf31": "bazarSwapCount()", +"f547eee2": "dropERC721ParallelSeries(address,address)", "f5486860": "nextPrizeTime()", +"f5489918": "setPoolId(address,uint256)", "f548a578": "removeBurnupGame(address)", +"f548f2f2": "KyberInterfaceAddresss()", +"f5491019": "getInterestFeesGenerated()", "f549dd0e": "Vitamin()", "f54a2ddc": "setRefundable(address,uint256)", +"f54a9974": "s_w_sc(uint256,address,address)", +"f54a9bca": "deployFarm(uint256,address)", +"f54ac246": "harvest(address,uint256,address)", +"f54b14bd": "dailyCheckIn()", +"f54b326d": "Top3TeamByDistance_Top1TeamByMember()", "f54b384d": "withdrawBuildingTokens(address)", +"f54b8cd3": "TASKINIT()", +"f54bc832": "setShareTokenOracle(address)", +"f54c3efb": "Love(string,string)", +"f54c7a6c": "_OPERATOR_()", +"f54cb310": "canBurnCollateralForDAI(uint256,uint256)", "f54cc2d0": "mintTokensForServices()", "f54d28ae": "OPSPoolAddress()", "f54d41db": "updateInventories(uint256,uint256[],uint16)", @@ -140679,56 +257391,101 @@ "f54dbf4c": "Emission(address,uint256)", "f54dd191": "Flag()", "f54dd974": "setResourceERC20Address(uint16,address)", +"f54ddf10": "ggxPerBlock()", "f54e3977": "BTML()", "f54e7a40": "offlineTransaction(address,uint256)", +"f54eff19": "ParliamentSeatClaimed(address,uint256)", +"f54f05a0": "Show_Fee_Addr()", +"f54f5e6d": "setAuthorityAndDelay(address,address,address,uint256,uint256)", +"f550690e": "buyWithPr(uint8,address)", "f550cb45": "rank(address,uint256)", +"f55154f8": "transfersubs(address,uint256)", "f551924c": "testpidgeon()", "f5519e8d": "WanChainToken()", +"f551a8b9": "totalEarningsDistributed()", +"f551e5c8": "getFPTBAddress()", +"f551eb0a": "TEAM_MEMBER_2_SHARE()", "f55206a5": "validatePurchase(address)", "f5521bf1": "loanDuration()", +"f5524c3e": "_GeneralIntegrate(uint256,uint256,uint256,uint256,uint256)", "f5529d3f": "ESIT()", "f552b2ba": "threads(uint256)", +"f552d848": "ERC1155BASE()", "f552d91b": "tokenToTokenTransferInput(uint256,uint256,uint256,uint256,address,address)", +"f5530d78": "_ensureMiniMeFactoryIsValid(address)", +"f55332ab": "call(address)", +"f55365a1": "removeMember(string)", "f5537ede": "transferToken(address,address,uint256)", "f5539407": "getInvestorInforAddr(uint16)", "f554567f": "getTeller(address)", +"f55462f4": "setPerformanceFeeStrategist(uint256)", +"f5548aa0": "RunnersRegisted(uint256)", "f554e8cc": "officialHold()", "f554e934": "TOKEN_COMPANY_OWNED()", "f55523e7": "fiat_contract()", "f5552b42": "wotDay(uint256)", "f5556d78": "Vegas()", +"f5559283": "_swapFRAXforFXS(uint256)", "f555b815": "rate2()", "f5562753": "getClaimAmountForBlock(uint256)", +"f5564773": "eBTCRewardDistribution()", +"f556a79c": "stakingV1()", +"f556f3ef": "sim(uint256)", +"f557ab03": "locks()", +"f557bbfe": "setVolatilityFactor(uint256)", "f5582870": "CENTS()", +"f558369f": "registeredArtists(address)", +"f558be4a": "removeAllLiquidityTokenOnly(address)", "f559417c": "finalizebackup()", "f559468c": "initiallyLockedAmount(address)", "f5596659": "HoloWhitelist()", "f5597e21": "addProperty(string,string,uint64,uint64,uint64)", +"f55a1726": "makeVoxTub(address,address,address,address,address)", "f55ab987": "penalizeInactiveJuror(address,uint256,uint256[])", "f55b23c0": "externalLeave()", "f55b39a3": "PetCore()", "f55b8fc9": "setraisedAmount(uint256)", "f55bddcc": "NFTAuctionBase()", "f55befee": "TOURNAMENT_TOKENS_PERCENT()", +"f55c5f83": "createIssueAndLock(address,uint256,address[],uint256[],address)", "f55c9f60": "developerReserve()", +"f55caaee": "buyLots(uint256,uint256)", +"f55df44d": "treatmentStatus(uint256,uint256)", +"f55e5e83": "ruleDisplayDuration()", "f55ecf06": "setExchangeRate(uint256,uint256)", +"f55f1cf7": "GroupCreated(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "f55f41f9": "Version(string,address,address,address,address,address)", +"f55fa71e": "tPool()", "f560783d": "getLastProfit()", "f560aa57": "setTokenPrices(uint256[],uint256[])", "f560d415": "privateSalePrice()", "f5610668": "currNumOfCards()", +"f5611fd9": "getBetTotalOptions1(uint256)", "f56142b3": "burnPrivate(uint256,uint256,uint256)", +"f561ae41": "getAllATokens()", "f561e2f9": "refundTransactionFee(uint256)", "f5620ed6": "addItemTo(address,uint256,uint256,uint256,string)", +"f56256c7": "setItem(bytes32,bytes32)", "f562db76": "wct1()", +"f562e736": "hasIssuedTokens()", +"f5630550": "rewardPerTokenAStored()", "f56311d7": "getMntpMigration(uint256)", +"f5631ac2": "ytbVideoToTokenId(string)", "f5632ab4": "receivedEth()", +"f5633883": "LogInvestment(address,uint256,uint256,uint16,address,uint256)", "f563424e": "fetchBilateral(address,bytes32)", +"f563856f": "computeAmountOut(uint256,uint256,uint256,uint256)", +"f5638aa1": "fiatDelivered(uint256,uint256,uint256)", +"f563feec": "MaxRedeemableInUsd(address)", +"f56408ed": "disableOperator(address)", "f564ae65": "getRemainingCount(uint32)", +"f564baa4": "setManyUpdateOperator(address,uint256[])", "f564bb8c": "getNodeIdx(string)", "f564dca9": "setUrls(string,string)", "f564ea7e": "get_bank_data(address)", "f5653a79": "_presentValue(uint256)", +"f5655857": "registerIdentityKey(bytes32,address)", +"f5656391": "MinimalManuscript()", "f56585de": "transferOtherTokens(address)", "f56589d5": "PupToken()", "f56613e4": "lockBetInfo()", @@ -140736,61 +257493,100 @@ "f566c1b5": "_normalizeDecimals(uint256,uint256)", "f5672f92": "garbageCollect()", "f567a72a": "listMultipleItems(uint256[],uint256[],uint256,address)", +"f567b51b": "SellToken(address,uint256)", +"f567de3b": "burnt(address,uint256)", "f568006f": "generateBalanceHash(address,uint8,uint256)", "f5681f9d": "Deposited(address,address,uint256,uint256)", "f5685061": "startPreICOnow()", "f56898fe": "getCompte_40()", "f5689a80": "TOKEN_CREATED_MIN()", +"f568df24": "takeAllTokens(address)", "f5691b07": "_bidDkl(uint256,uint256)", +"f5691fc1": "MAX_GEN0_CBD()", "f569626d": "sanTTTCost()", "f569a2fc": "withdraw1(address)", +"f569d5fd": "presentDayAmount()", "f56a5176": "getMostRecentAuctionStart()", "f56b8a46": "TEAM_BONUS_PERCENT()", "f56c66b1": "parseInt128(string)", "f56d7abe": "PaceCoin()", +"f56dd291": "INTEREST_PLATFORM_SHARE()", "f56e0609": "WorldCup(bytes32,bytes32,bytes32)", "f56e4cb1": "blockTokens()", +"f56e81fa": "tokens(address,address,uint256)", "f56e8421": "currentSquirrelOwner()", +"f56e9c66": "setNFT(address)", "f56eba15": "SGEToken()", +"f56f2e46": "monUnlock(uint256)", +"f56f48f2": "TIMEOUT()", "f56f516f": "isValid(bytes32[])", +"f5700fdd": "tokenToEthExchangeTransferInput(uint256,uint256,address,address)", +"f57020e8": "amountFilled(address,uint256,address,uint256,address,address,uint256,uint256,address)", +"f57027c6": "GetPlanByUid(uint256)", +"f5702ca0": "claimMarketsProceeds(address[],address[],address,bytes32)", +"f5705cd1": "pendingBLW(uint256,address)", "f5710cc5": "setInitialBalance(uint256)", +"f5711d4e": "presale_arbits_total()", +"f5715d56": "txs(uint256)", "f5716958": "updateSplits(uint256,uint256,uint256,uint256)", "f571da7f": "confirmAssessor()", +"f571e00e": "getNipUniStakeAmount(address)", "f5720769": "setDrawer(address)", "f57213d8": "subsafe(uint256,uint256)", +"f5723b5e": "addVestingRule(address,uint256,uint256)", "f57271cd": "LogEnded(bool)", "f5727f5c": "chainLedger()", "f572ae2e": "toggleInPlayJoining()", +"f572ed02": "buyerAmounts(uint256)", +"f5732d6f": "teamPerfitRatio()", "f573864f": "PrandexBountyToken()", "f5738bcd": "setInstructions(string)", +"f573d056": "addStudentScore(string,string,uint256)", +"f5742d51": "seedSystemBalances(address[],uint256[])", "f5743c4c": "incrementNonce(address)", +"f57470af": "getRegisteredContract(uint256)", "f574c691": "KCoinToken()", +"f574d9c2": "tokensToBurn()", +"f574f04b": "tokensNoDecimals()", +"f57500f2": "ymenStaking()", "f5751524": "unfixTokenPriceInWei()", +"f5756d7b": "getEthTokenBal()", +"f575a7da": "searchDiplomaByStudentAndCourse(string,string)", "f575c810": "finishPrivateSaleAndStartPreSale(address,uint256,uint256,uint256)", "f57688b6": "communityVesting4Years()", "f576f722": "getCurrentTierInfo()", "f577990d": "passoverEndTime()", +"f577a500": "isValid(uint256)", "f577a5d0": "publicTokens()", "f578fd7c": "applyForToken()", "f578fd85": "assertEq0(bytes,bytes)", +"f579f882": "games(bytes32)", +"f57a1b3c": "xfLobbyRange(uint256,uint256)", "f57a1ccc": "f4(uint256,uint256)", +"f57aae23": "checkResurrected(uint256)", "f57ac2df": "World2()", "f57ad503": "resetRole(address)", "f57ad6ea": "deposit_token(uint256)", "f57ae7b9": "buildId2(address,address,address,uint256,bytes)", "f57be85d": "ownerActivateToken()", +"f57ca6d3": "setNiftyMojiContractAddress(address)", +"f57ccd23": "addSynths(bytes32[])", "f57d74d8": "blaze()", "f57d76d5": "RestrictedShares(string,string,uint256,uint256)", "f57db6e1": "signLoan(address)", +"f57df22e": "Staking()", "f57e2368": "bonusAvailable()", "f57e63e2": "eventEnded()", "f57ee77b": "getRoundId()", "f57fc26a": "lccxTeamTokensVesting()", +"f57ffd22": "beneficiaryAmounts(uint256)", "f5804c35": "test_someTest()", +"f580ffcb": "updateBlockReward(uint256)", "f5811447": "createAuction()", "f5812687": "distributeTokenFunds(address,address,uint256)", "f5813085": "getTotalTokensByAddress(address)", "f5818d94": "EtherModifierPandee()", +"f581aff7": "withdrawErrorCount()", "f581ec95": "FIRST_VOLUME_EXTRA_BONUS()", "f581f1ef": "setPicopsCertifier(address)", "f5820ac6": "unPauseAllTransactions()", @@ -140799,73 +257595,144 @@ "f582fe70": "PundiXToken()", "f58339c1": "_generateGuardianSale(uint256,uint256,uint256,uint256,uint256)", "f5836761": "DGBLY()", +"f583c44a": "addCharity(string,uint8)", +"f583fff5": "lastFiredWinner(uint8)", +"f5840841": "getUserLp(address)", "f58431fd": "Citizen(address)", "f584bf09": "Softcap()", +"f584e3df": "PHOENIXPerBlock()", "f58589ff": "setAirdrop(uint256,uint256,uint256,uint256,uint256)", "f58590e9": "ReturnChametz(address,uint256,uint256)", "f5866066": "setStringValue(bytes32,string)", +"f58671c7": "pendingToken(uint256,uint256,address)", "f5868e49": "Administrable(address)", "f586c6d9": "getPoolAddress()", "f586df65": "checkMembership(bytes32,bytes32,uint64,bytes)", "f5877bdb": "maintaining()", "f5878d40": "maxSCount()", "f587c53f": "_generateGene(uint64,uint64,uint256,uint256)", +"f58827d8": "UCT_swap_USDT(uint256,uint256,address)", +"f5883819": "transferUlocker(address)", +"f5884b6b": "queue2CurrentUser()", +"f58885f4": "addPlayer3(address[],address)", "f58951d1": "approve_reject_deleteCertificate(uint256)", +"f589671b": "entryToAuction(uint256)", +"f589a526": "deployPoolAndDerivative(uint8,uint8,bytes,bytes)", "f589cbbe": "addPick(uint256)", "f58a1adb": "setup(uint256,uint256,uint256,address,uint256,uint256,bytes,address,address)", +"f58a4f70": "StopMarket(uint32)", "f58a535f": "phasePublicSale2_From()", +"f58a5792": "unConfirmPayment(uint256)", +"f58a733c": "ibETHForExactETH(uint256)", "f58adfe5": "CharityReservesSupply()", "f58b4554": "userPayout()", +"f58baede": "sevenReserveAllocation()", "f58bb0c9": "dealInitialCards()", +"f58bd55b": "setprovablegasprice(uint256)", +"f58bfea5": "purchaseRNTTokens()", +"f58bfed3": "CAP_SETTER_ROLE()", "f58c251c": "sentinel()", +"f58c7acf": "sellOrderCount()", +"f58ccc6a": "currentCollectRoundStartBlock()", +"f58cfa48": "End(address,uint256,uint256)", "f58d3321": "usersCanUnFreeze(bool)", +"f58d40e9": "optionData(bytes32)", +"f58d98e5": "sendFunds(address,address,uint256,string)", "f58e2327": "foundationTokenHolder()", "f58edbca": "ISBParentsCoin()", +"f58f72a6": "cheng(address)", +"f58fa6bc": "voteCuteness(uint256,uint256)", "f58fc2f2": "LimorToken()", "f58fef8e": "Destroy()", +"f5907d57": "linearBalanceOf(address,uint256)", "f590aacc": "preBuy()", +"f590bba1": "getTotalReturn(address)", +"f590e923": "totalActiveBalance()", +"f5917c99": "add_liquidity(address)", +"f5919de7": "TOKEN_RATE_LOCKUP()", "f5923a6e": "withdrawEth(address,address,uint256)", "f5933f66": "changeFlagArraySize(uint256)", "f5938baf": "getRemainingBlocks()", +"f5939ca4": "tokenOfBidderTokensByIndex(address,uint256)", +"f593a876": "setBonusPoolAddress(address)", +"f593e3f9": "onAddPlayerOrder(address,uint256,uint256,uint256)", "f593efec": "briqcoin()", +"f59407b4": "updateGracePeriodEnds(uint64,uint256)", "f594ba7b": "assignManagement(address)", "f594f13f": "votedFor(address)", "f595f1cc": "pendingFees(address,uint256)", +"f5963747": "lastAnswers()", "f5963aa5": "isJson(string)", "f5965d55": "windowOf(uint256)", "f5967a2f": "holdPeriod()", "f596d10a": "parseSignature(bytes)", +"f5978043": "Izposoja_Knjige(int256,int256)", "f597a499": "UserDatabase(uint256)", +"f597be9f": "freezeManyAddresses(address,address[],uint256)", "f597d097": "streamerContractMaxAmount()", "f597f97d": "fractionalBits(int256)", "f59823cf": "Congress(uint256,uint256,int256)", +"f5987bdf": "tokenOutSkip(address)", "f598e201": "finishDividend()", "f5991a05": "sellCoins()", +"f59acf43": "stakedSoldiers(uint256)", +"f59ad48a": "lastPriceBlock()", "f59ae82c": "getTokenPurchase(address)", +"f59bbb6b": "Replay(address,uint256)", +"f59bbc9e": "addressStub()", +"f59bf593": "detachManyAddressesExternal(address[])", +"f59c12e5": "doUniswapV1Sell(address,uint256,uint256,address)", +"f59c2f06": "auctionAccessData(uint256)", +"f59c3708": "whitelist(address,bool)", +"f59d8466": "getStopOrder()", +"f59d9e3f": "completeCollection()", "f59da238": "MBDCToken(uint256,string,string,uint8)", "f59db647": "precommitmentAdjusted()", "f59dfdfb": "feed(uint256)", "f59e0894": "sendSecond(address,uint256)", "f59e38b7": "balanceOfToken(address,address)", "f59e754c": "setAuctionFee(uint256)", +"f59ecc0c": "getUsdcSplitThreshold()", "f59ed863": "privateSaleDate()", "f59f5e65": "createWheelBetHash(uint256,uint256,uint256)", "f59f99ee": "createNextGeneration()", "f59faf9e": "GrainToken()", +"f5a006d1": "approve_199(address,uint256)", +"f5a049e8": "AssetCollection(bytes32)", +"f5a09bb4": "calcDisburse(address,uint256)", +"f5a0d6c0": "tokensInCirculation()", "f5a0ea6c": "createMatch(uint256,uint256)", +"f5a15f6d": "recoupStake(address,uint256,bytes)", +"f5a1a19d": "switchValue()", "f5a1c96d": "nextFeesPerMillion()", "f5a1f5b4": "setNewOwner(address)", "f5a23083": "listMOT()", "f5a23af0": "myColorIs()", +"f5a2ad2e": "approve_479(address,uint256)", "f5a2d3c7": "DomainSale(address)", "f5a30cee": "individualMaxCap()", "f5a332f6": "endICO(uint256)", +"f5a394e2": "JGNNumber()", +"f5a41dea": "balanceFulcrumInToken()", "f5a486f3": "issueResolved(bytes32,string)", "f5a5438e": "dist_airdrop(address,uint256)", +"f5a5ad03": "calcPayoutDividendsReward(uint256,uint256,uint256)", +"f5a5af2b": "runTokenUniSrceAddr(uint256,address,address)", +"f5a6259f": "plusOne(uint256)", "f5a647aa": "sendTokensToSevenAddresses(address,address,address,address,address,address,address,uint256)", +"f5a699c1": "YEAR_LENGTH()", +"f5a6e5c9": "changeAdminStatus(address)", +"f5a6ef39": "withdrawalFeeBase()", +"f5a74068": "DYT_Address()", +"f5a76d33": "CONTRACT_FOUNDATION()", "f5a79767": "getAmount(address)", +"f5a7fdcc": "drip5Token()", "f5a7ffeb": "dontPanic()", +"f5a811e9": "getPOLYAbleToClaim(address)", +"f5a88332": "radarOf(uint256)", +"f5a89d5f": "_setLastIssueEvent(address)", "f5a8ea09": "viewClaimedThisPool()", +"f5a8f8ad": "newDrawingApproval(bool,uint256)", "f5a908f0": "getOraclePrice(string)", "f5a91ef7": "getEmailAddressOwner(string)", "f5a956d8": "swap(uint256[],uint256,uint256)", @@ -140877,43 +257744,71 @@ "f5ab16cc": "rewardTokens(address)", "f5ab4c62": "participationEndTimestamp()", "f5ab69c8": "thirdPlacePot()", +"f5ab84e3": "isThisYes(address,uint256)", "f5ab865a": "tokensAirdrop()", "f5ac0b6b": "BasketFactory(address,address,uint256)", +"f5ac16e0": "amountBunnyToMintForBunnyBNB(uint256,uint256)", "f5ac481d": "leaveTeam(uint256,address,uint256,uint256)", "f5ac6319": "_raised()", "f5ac9db6": "tradeable()", "f5ad9034": "TokenTranchePricing(uint256[])", "f5adad57": "BdpControllerHelper(bytes8)", +"f5adc4f5": "anyPynthOrPERIRateIsInvalid()", +"f5ade840": "contractChange(string,address,string)", +"f5ae497a": "lpTokenAddress()", +"f5ae7b0c": "tokenMintHistoryOf(uint256)", +"f5ae7c7d": "getTxCounter()", "f5aec88c": "getUserTokenBalance(address)", +"f5aefff3": "getBgNftTypes(uint256,uint256)", "f5af374b": "withdrawEth(address,uint256[],uint256[])", "f5af4035": "sellTokensForEth(address,uint256)", +"f5af60a9": "viewStats(address,address)", "f5af6289": "EAI_TokenERC20(uint256,string,string)", "f5af6621": "getEscapeRequest(uint32)", "f5af6de6": "firstStageEnd()", "f5affc60": "claimHash(bytes32)", "f5b01fd7": "TruCrowdSale(uint256,uint256,address,address,uint256,uint256)", +"f5b0391c": "mintForVesting(uint256)", +"f5b07150": "startnft()", "f5b0f72d": "Ethername()", "f5b12540": "STATE_NOT_STARTED()", +"f5b30904": "asd(string)", +"f5b32e74": "sign(bytes32,bytes32,uint256,uint256,bytes)", "f5b33d0a": "MicroDex()", +"f5b33dfa": "leverageModule()", +"f5b347a1": "LogAuthorizedAddressRemoved(address,address)", +"f5b38731": "transferEvent(address,uint256,address)", "f5b3beba": "OverAllPerSell()", +"f5b3ebd6": "output(uint256,uint256[])", +"f5b3f9c4": "ASSESSOR_ADMIN_ADMIN1()", "f5b41aaa": "set_iconiq_token_amount(address,uint256)", "f5b45714": "currentKing()", +"f5b47836": "checkmessagePrefixed(uint256,uint256)", "f5b490d5": "roundLockAmount()", "f5b4f3c1": "WFC(string,string,uint8,uint256)", +"f5b52f72": "getDeterministicRate(bytes32,address,address)", "f5b53e17": "getInt256()", "f5b53fc1": "checkMonsterAttack(uint16,uint8,uint8)", +"f5b541a6": "OPERATOR_ROLE()", "f5b56c56": "highestBindingBid()", "f5b57a8d": "transferFeeDenum()", +"f5b5adf2": "liquidateTrade(uint256)", "f5b5af16": "closePlayerGame(bytes32)", "f5b5bfb9": "provideDividend(uint256)", "f5b61230": "escapeHatchDestination()", +"f5b637f5": "snip()", +"f5b81d71": "partyDetails(address)", +"f5b84bfc": "u(address)", "f5b85ad8": "RoundToken()", "f5b944eb": "ROLE_MANAGER()", "f5b9644c": "PRE_ICO_RATE()", +"f5b97095": "checkshiftAmount(string)", +"f5ba171f": "ReleaseLockedBalance(uint256,uint256)", "f5babff2": "convertBytesToBytes32(bytes)", "f5bade66": "setDeposit(uint256)", "f5bae6b6": "equal(int256,int256,string)", "f5bb02b2": "ICODepositContract()", +"f5bb31da": "tranchesDeployerAddress()", "f5bb5aac": "TokenStore(uint256,address)", "f5bbc6d5": "isArbiter(address)", "f5bd48c4": "totalLotsByAddress(address)", @@ -140921,15 +257816,24 @@ "f5bd8f5f": "_isTrue(address)", "f5bdeca1": "SetGasLimit(uint256)", "f5be3193": "totalIssued()", +"f5be7bc8": "approveForContract(address,uint256)", "f5bea782": "userWithdrawPendingTransactions()", "f5bee4e6": "priceTokenToCoin()", +"f5bf395f": "setBurnMultiplier(uint256)", "f5bf6d63": "totalIssuerSupply()", "f5bf7413": "close(address,address,uint256)", "f5bf7e3d": "registerDINs(address,uint256)", +"f5bf8374": "updateCollateral(address,uint256)", +"f5bfc2e0": "getLicense(address,uint256)", "f5c15237": "isPlatformManager(address)", +"f5c174d5": "SupplyIncreased(address,uint256)", +"f5c1dd26": "TriceratopsLiderChanged(address,uint256)", +"f5c1ec81": "fullAmount()", "f5c217da": "lastSaleTimestamp()", +"f5c22d5a": "toggleCollateralPrice(bool,uint256)", "f5c233f1": "transferAndLock(address,uint256,uint256,uint256)", "f5c256ca": "sendPrepaidERC20Tweet(uint256,string,string,uint256)", +"f5c3dd15": "whitelistAddAddress(address)", "f5c3f206": "setApprovers(string,string,address[])", "f5c4201f": "denyTransfer(address)", "f5c454ca": "ProjectDescriptionUpdated(address,string,bytes32)", @@ -140939,109 +257843,212 @@ "f5c5906e": "setBlockRoot(uint256,uint256,bytes32)", "f5c5ad83": "decrementCounter()", "f5c60309": "YuChainToken()", +"f5c631fd": "itemCount(uint256)", +"f5c63a83": "notEqualUintPassTest()", "f5c6ca08": "sendTokens(uint256)", "f5c6cd0a": "GlobexSciICO()", "f5c6cf05": "changeTokenForSale(uint256)", "f5c758c4": "getKycApproved(uint256)", +"f5c762cb": "dailyROI()", +"f5c81efa": "setwithdrawalHandler(string)", +"f5c854f8": "updateVin(bytes32,string,string,string,string,string,string,string)", "f5c86d2a": "ledgerTransfer(address,address,uint256)", "f5c87d20": "setAdminPayout(uint8)", "f5c89f83": "StartMiningByIdArray(uint256[])", "f5c8d71b": "forceMove(address,address,uint256)", "f5c901db": "ck()", +"f5c91b1a": "cute()", "f5c91f5a": "init(address,uint256,uint256,uint256,uint256,uint256)", +"f5c95475": "setGovTokens(address[])", "f5c972ac": "setUserInfo(address,uint256,uint256)", "f5c98aff": "GreeterB(bytes)", "f5c99ae9": "createToken(string,string,uint256,uint256,uint256,uint256)", "f5c9d5f1": "refundPart(address)", "f5ca6cd4": "TOKEN_SALE_ALLOCATION()", +"f5ca9f1c": "fx(int128)", "f5caccad": "gatherCollateral()", "f5cb0daa": "queryWaitingTimeBuffer()", "f5cb3dff": "getAddressFromData(bytes)", "f5cb911d": "divideByNumber(uint256)", +"f5cbc457": "buyOnTransfer(address,uint256,address,address[],bytes,uint256[],uint256[])", +"f5cbcecf": "setEdc2Token(address)", +"f5cbe560": "BuyStockHeroEvent(address,uint32,uint32)", "f5cbf6cc": "construtor(uint256)", "f5cc4056": "BSMinting()", +"f5cc765a": "convertMappingAccounts(string)", +"f5cc7713": "_propertyValue(uint256)", +"f5ccafff": "TokenReservationCancellation(address,uint256)", "f5cce54d": "preSaleCoinCap()", +"f5cd303d": "total_price()", +"f5cde2c0": "ZOOM_PUMPKIN()", "f5ce0d5b": "onRemoval(string,uint256)", +"f5ce4f04": "fullUnitsVested(address)", +"f5ce616f": "giveAccess(address,bool)", +"f5ce6676": "setRewardOutOne(address)", +"f5ced582": "getUpdatedCeiling()", +"f5cefe3c": "TokenOfOwner(address)", "f5cf673b": "setClaimer(address,address)", "f5d00ccf": "NewPatent(bytes32)", +"f5d01889": "AirdropWon(address,uint256)", +"f5d02165": "returnsInt()", +"f5d05ce3": "l2_add_spending(address,uint256)", "f5d05f7e": "foundationVestedPayment()", "f5d09857": "createDungeon(uint256,uint256,uint256,uint256,uint256,address)", "f5d09ff7": "bancorETHToken()", +"f5d12989": "totalAssetsInUsd()", +"f5d13462": "bonus(uint8)", +"f5d15d57": "create(address,address[],uint256[],uint256[],uint256)", "f5d17f10": "get_term_deposit_end_date()", "f5d1d299": "setProviderTitle(bytes32)", "f5d241d3": "update(uint80,address,uint32,uint32,uint32,uint256)", +"f5d36475": "minFeeAmount()", "f5d36a57": "quorumVersion()", +"f5d3b651": "cancelAccountRecoveryDisablement(address)", "f5d3c79a": "setReinvest(bool)", +"f5d3e573": "x_adminChangeHaltState()", "f5d50f86": "balanceAsSupporter()", +"f5d54c77": "GUILD()", +"f5d553aa": "orbitAddress()", "f5d5edc4": "deployService(bytes32,address)", "f5d60a51": "accessPolicy()", "f5d60acd": "EtherTakeAfterSoftcap()", +"f5d65891": "withdrawFromCycleWhileItIsOngoing(uint256)", "f5d67a20": "currentCrowdsale()", "f5d6fa14": "whichPrice(uint256)", +"f5d709a1": "seasons(uint256)", "f5d72a28": "setTakeRewardsPeriod(uint256)", "f5d73261": "transferAnyTokens(address,uint256)", +"f5d75dec": "stabilityFeeIndex()", "f5d78625": "getPersonalInfo(address)", +"f5d7a431": "updatePerformTransactionSignatureThreshold(uint256)", +"f5d81e4a": "approve_788(address,uint256)", "f5d82b6b": "add(address,uint256)", +"f5d8f0c0": "PriceICO2()", "f5d9356e": "newKrakenPriceTicker(string)", "f5d97789": "changeBinaryAddress(address)", +"f5d9ac57": "setStableTokenOracle(address)", +"f5d9bf34": "addAllowedVoterToBallot(address)", "f5d9d3fd": "formated_data_url()", +"f5d9d63e": "depositBalances(address,address)", "f5da16e9": "RECHToken()", "f5da210c": "getClientData(address)", +"f5da23ab": "orderUSDValue(uint64)", +"f5dab711": "tokenInfo(address)", "f5dabc58": "transferDistributePxl(address,uint256,bool,string)", +"f5dac139": "onEventWithdrawLost(address,address,uint256)", "f5db370f": "setSanityRates(address[],uint256[])", "f5db8bc7": "depositedETH(address)", "f5db9820": "firstTarget()", +"f5dbe1a8": "setPUSDAddress(address)", +"f5dc3277": "processingStakingReward(address)", +"f5dce9f6": "calculateLiquidationPrice(uint256,uint256,uint256)", "f5dd7650": "_computeTournamentBeneficiaryFee(uint256)", +"f5dd9317": "Deposit(address,address,uint256,uint256,address)", +"f5dda9ec": "shardsFactory()", "f5ddff92": "getReputationUpdateLogEntry(uint256)", +"f5de2d1f": "rewardFeeRate()", +"f5df1a33": "rootFunction()", "f5df1d10": "getCollectibleTypeBalance(address,uint256,uint256)", "f5df1f1d": "PresalePool(uint256,uint256,uint256,address[])", "f5df6618": "newUser(string,string,string)", "f5e1713e": "sale_state()", +"f5e1a374": "blzd()", +"f5e1a452": "contractClosed()", "f5e27f5f": "emperor()", "f5e3394f": "getUnicornGenByte(uint256,uint256,bytes1)", "f5e33a9d": "createPot(string)", "f5e3542b": "lookup()", "f5e37d57": "_doTradeForEth(address,uint256,address,uint256)", +"f5e388cc": "setmintaddress(address)", +"f5e39cd6": "getTaxedEther(uint256)", +"f5e3b1f9": "balanceUpdate(address,uint256,uint256)", +"f5e3c462": "liquidateBorrow(address,uint256,address)", +"f5e424a6": "_updateTokenList()", +"f5e46725": "votePercent()", +"f5e47163": "SetFundMintingAgent(address)", "f5e47f96": "getTicketsByAddress(address)", "f5e493aa": "getCrowdsaleTierList(address,bytes32)", "f5e53f2b": "register(bytes7)", +"f5e562de": "ratings(string)", +"f5e5ec5f": "unlockRewards()", +"f5e62090": "getClosedEvents()", +"f5e6b12f": "ownerSetDecimals(uint8)", +"f5e6c0ca": "viewNumeraireAmount(uint256)", "f5e736ed": "tacoPoolTotal()", +"f5e7ad07": "CashierAdded(address)", "f5e7b8e3": "setScoringThreshold(uint256)", "f5e7ce99": "canPerform(address,address,bytes4)", "f5e7ef7a": "getCountCities()", +"f5e7f75e": "wayfarer()", +"f5e80d14": "distributionInterval(address)", "f5e82554": "executeFill(address,address[5],uint256[8],uint256,uint8,bytes32,bytes32)", "f5e8e8a9": "NASRToken()", +"f5e95acb": "initialize(address,address,address,address,address,address,address,address,address)", +"f5e9907b": "StandardPackPriceChanged(uint256)", "f5e998f7": "FuckCoin()", "f5ea15d3": "setContracts(address[16])", "f5ea25f0": "setTokenAcceptanceRate(address,uint256)", +"f5ea502a": "min_amount_of_eth_transfer()", "f5eacece": "create2()", +"f5eafc5f": "C_NestQuery()", "f5eb2313": "UrlHint()", +"f5eb26c6": "setLiquidStakingContractAddress(address)", +"f5eb3856": "init_ceiling()", "f5eb42d1": "ExecLog(address,bytes32,uint256,bytes32,bytes32,uint256)", +"f5eb42dc": "sharesOf(address)", +"f5eb4352": "setLevelPrice(uint256,uint256)", +"f5eb4956": "getTreasurers()", "f5eb8890": "balanceUser(address)", +"f5ebb5f7": "proxyActionsEnd()", +"f5ebcd21": "sendRequest(address,string)", +"f5ebd22b": "streamedUntil(address)", "f5ec2eed": "companyName()", +"f5ec7cec": "give_voting_permission(uint256,uint8)", "f5ec8685": "claimAfter45days()", "f5ece00a": "cryptoChallenge()", +"f5eced79": "PurchaseHalted()", "f5edc92f": "subwooferUSBToken()", "f5ee3348": "setLive(bool)", +"f5ee5904": "SHARE_NOMINAL_VALUE_EUR_ULPS()", "f5eeaea3": "openChannel(address,uint256,uint8)", "f5eed98d": "publisherCount()", +"f5ef0803": "pumpStage()", +"f5ef6984": "setBuyWithLimitString(string)", "f5ef98ea": "setDeathBlock(uint256)", "f5efbd2d": "addModule(address,bytes,uint256,uint256)", +"f5efcb6f": "BuyIGO(address,string,uint256,uint256)", "f5f06acc": "airDropTokens()", +"f5f0cebd": "distributeOffchain(uint256,address[][],uint256[])", "f5f0f1e9": "firstBuyPrice()", "f5f23b52": "makeTradable(uint8)", +"f5f24d90": "getUserByCode(string)", "f5f2669b": "isAddressNotEmpty(address)", +"f5f272ad": "kycUsers(address)", "f5f2b62f": "nextSale()", "f5f2de34": "ethReceived()", "f5f3e58f": "preSale1()", +"f5f40e4b": "Utility_Address(address)", "f5f4123f": "_createAvatar(address,string,uint256)", +"f5f4f406": "_decode_uint32(uint256,bytes)", +"f5f51324": "getDaiToEthOrders(uint256)", +"f5f565f8": "exp(uint256,uint256)", "f5f56b7a": "seasonRefAccounts(uint16)", +"f5f56f0c": "proxyXdai()", +"f5f593a7": "getEthToUsd()", "f5f5ba72": "getContractName()", "f5f5bb3b": "hashBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", "f5f5c622": "setDErc20(bytes32,address)", "f5f5f123": "changeMaximumContributionForPublicPhase(uint256)", +"f5f62a69": "flushToWallet(address,bool,uint256)", +"f5f6a538": "pInvestedSum(address)", +"f5f6d3af": "sweepTokens(address)", "f5f6ea26": "EthOne()", +"f5f75ba5": "receiverStorage()", +"f5f8155e": "devFeePercentX100()", +"f5f83685": "walletAngelPESales(address)", "f5f83a61": "transferManyLandToEstate(int256[],int256[],uint256)", +"f5f84ed4": "requireGovernor(address)", +"f5f9fea0": "drawingPublishs(uint256)", "f5fb17f2": "offerPieceForSaleByAddress(address,uint256)", "f5fb1b74": "buyname(string)", "f5fb22ca": "claimMobsterFunds()", @@ -141049,209 +258056,400 @@ "f5fc20c6": "canUse(uint256)", "f5fc32c8": "getAllot(bytes32,uint8)", "f5fc3d47": "giftToken(address,address,uint256)", +"f5fc5076": "cumulativeRewardPerToken()", "f5fc58c4": "totalLosts()", +"f5fccd8f": "guestList(uint256)", "f5fd118e": "coordinatorSetAgreeForEmission(uint256)", "f5fd1936": "countZTKChecks()", "f5fd2108": "ethToBeDistributedSet()", "f5fd9343": "Reco()", "f5fda5da": "test_35_assertGasUsage1400Boards()", "f5fda8cd": "testPublic()", +"f5fe6275": "percentFactor()", +"f5fe7f71": "updatePlatformFeeRecipient(address)", +"f5ff1916": "set_new_COMPOUND(address)", +"f5ff2816": "BondPayoutsBondID(address,uint256)", "f5ff3dc7": "setOraclizeWinnerTimeOffset(uint8)", "f5ff5c76": "agent()", +"f5ff624d": "vetoedProposals(uint256)", +"f5ff818e": "userTotalToken()", "f5ff8977": "renameArtwork(uint256,string)", "f60203c6": "createUser(uint256,uint64,uint64)", "f602467e": "FundWithdrawal(address,uint256,bool)", +"f6028478": "idHashMapping(uint256)", +"f60290e4": "debtValToShare(uint256)", "f602c312": "erc20Store()", +"f602dd06": "DelAuthAddress(address)", +"f602e079": "k(bytes32)", "f602e325": "reserveAdress()", "f6030aeb": "mint(address,uint256,int256)", +"f603482c": "swap1ForExact0(address,uint256,address,uint160)", "f60381a1": "stra2cbor(string[])", +"f603a048": "totalEtherbalanceContract()", "f603fa92": "toggleAttachedEnforement(bool)", "f60436cd": "reduceTime()", +"f604398f": "C16(bytes)", "f604498a": "getClientSupply(address,uint256,uint256)", "f604620a": "getTicketsAtAdress(address)", +"f6048364": "updateInterests(address,uint256,uint256,uint256)", "f604e6a6": "withdrawXNK(address)", "f6054027": "IFLTSidechain()", +"f6058307": "token2Meta(address)", "f605ef93": "LongBought(address[2],uint256[5],uint8,bytes32[3],uint256)", +"f606841e": "agree(uint256)", "f606b648": "transferTokensFromSpecialAddress(address,address,uint256)", +"f606b9f1": "setStakingBurnPercentageWar(uint256,uint256,uint256)", +"f606e6ce": "getEthBlockExpiredAt(bytes32)", +"f6072f68": "setTokenTarget(uint256)", "f60744d5": "verifySignature(bytes32,uint256,uint256,uint8,bytes32,bytes32)", "f607e88a": "_tokenPurchase()", +"f6081d76": "validRoundId(uint256)", +"f608221b": "mdefBalance(address)", +"f60826ee": "vestingFactory()", "f6089e12": "melt(uint256[],uint256[])", +"f6094598": "Bought(address,address,address,uint256,uint256,uint256)", "f60957c0": "HowLongIsDisputeStillRunning(uint256)", +"f60997c8": "foboPerBlock()", "f609a1a1": "extraMintArray(address[])", "f609bad6": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", "f609bf42": "getSecondsTimeLocked(bytes4)", +"f60a15ed": "inCaseETHGetsStuck()", "f60a696d": "migrateUsers(address[10])", "f60b0714": "EscrowContract(address,address,uint256,uint256)", "f60b9406": "vestingStartUnixTimestamp()", "f60ba338": "setOpenTime(uint256)", "f60bb720": "receiveFees()", +"f60c21c2": "cloneStrategy(address,address,address,address,uint256)", +"f60c750c": "publicAirdropTargetAmount()", +"f60c757f": "depositSelector(address)", "f60ca60d": "project()", "f60ca6b6": "distory()", "f60cdcf6": "totalPlayers()", +"f60d7428": "ipfsfileHashOnBlock(string)", +"f60d7a24": "withdrawNest(address,uint256)", +"f60d8546": "sub_2(uint256,uint256)", "f60daa71": "dutchAuctionToCraft()", "f60e28f7": "checkUserAndInitIfNecessary(address,address)", +"f60e49b5": "_rules()", +"f60eb8e5": "tokenIssueRate()", "f60edb0e": "proposedController()", "f60f1ccb": "useregister(address,string)", "f60f49bb": "PayToken()", "f6105254": "CryptoSagaArenaVer1(address,address,address,address,address,address,uint32,uint256,uint32,uint256,bool)", +"f6108be6": "transferOwnershipERC20(address)", "f610e52a": "acceptInvite(bytes)", +"f6112d68": "getPayeeIndex(bytes32,address)", +"f611356c": "editCandidate(bytes32,string,uint256,bytes32,uint256)", +"f61137c7": "dayDurationSec()", +"f611a05b": "charityDonation(address,string,uint256,uint256)", +"f611fb1e": "baseRewardTokenBalanceOf(address)", +"f6124361": "lockToken(address[],uint256[])", "f612a62d": "getSaleContractIsFinalised(address)", +"f612afc2": "fatCat(uint256[])", "f613f7a0": "mintUsingSignature(uint256,uint8,bytes32,bytes32)", +"f613fe46": "triggerNumberEvent(int256,int256,address,uint256,uint256)", "f6142990": "altDeposited(address)", +"f61445dc": "getDpeerlist()", +"f6148311": "updateStateOnSwapRate(address,address,uint256,uint256,uint256,uint8)", +"f614ed16": "TEST_withdraw()", "f614fd72": "assertEq24(bytes24,bytes24)", "f6150d17": "payedAmount()", "f6151ff6": "transferTokenTo()", +"f6152a16": "getFeeForAmount(address,uint256)", "f6153ccd": "totalDeposit()", +"f6155a68": "_assertDeploymentConstants()", +"f6156d5a": "changePerformanceFee(uint256)", +"f6159d81": "buyToken(address,address,address,uint256,uint256)", +"f615d5be": "updateProviderRewardsData(address,address,address,uint256,uint256,uint256,uint256,uint256,uint32)", "f615e369": "selectDeliverer(uint256)", "f615ed54": "subSeconds(uint256,uint256)", +"f6162b01": "claim(address[],uint256[],uint256,uint256,bytes32[])", +"f6169420": "initialize(uint256,uint256,uint256,address,address,address)", +"f6169705": "addRootRole(string)", +"f6169e35": "startExit(bytes32[],bytes32[],uint8,uint8)", "f616b7b7": "report(string)", "f616ce3c": "candy()", "f616f29f": "transferEthFeeAndRefund(uint256,uint256,uint256,address)", +"f6174941": "discountTokenAddress()", "f6174b90": "transferCheques(address,address,uint256,uint256)", "f617642b": "getlevellen(uint256)", "f617a0e9": "BoSenCoin_Test(uint256,string,uint8,string)", "f6187006": "crowdSaleIsRunning()", +"f6188339": "getBlocked(address,address)", "f618c39f": "PartiallyForgived(address,address,uint256)", "f619304a": "getSellOrdersBlackMarket()", "f61a3e2b": "roundWithdraw(uint256)", "f61a7f6f": "fixSaleCompleted()", +"f61aa09d": "validatorPowers(address)", "f61ac3a4": "checkForReceivedTokens()", +"f61adab2": "availableExcessCollatDV()", "f61adfdd": "UnitedfansToken(address)", +"f61afbcf": "sendTokenToContract(uint256)", "f61b7483": "M5Logic()", "f61b9aed": "transferFrom(address,address,uint256,bool,uint256)", +"f61ba14d": "arbsucc(address,uint256)", "f61c266b": "getExpiry()", "f61c6c4b": "LobsterFarm()", +"f61c899a": "shipItem(uint256)", "f61ca773": "transferWithPurpose(address,uint256,bytes)", "f61ca87a": "setUserValue(bytes20,uint256,uint256)", "f61cd7de": "callerTokenAmountAtBlock(uint256)", +"f61d627d": "_minimumSupply()", "f61d9afc": "Errors()", "f61eab7a": "getExtension(uint256)", "f61ed985": "Kill(uint256)", "f61f019d": "GitBitToken()", "f61f35dd": "FOG()", "f61f54c2": "SendEtherToFund(uint256)", +"f61f5df6": "getUnaccountedFeesForAccountForPeriod(address,uint256)", +"f61f7b40": "ChangePrimaryApprovedWallet(address)", "f61ff377": "AccountFilledWithBonus(address,uint256,int256)", "f6205042": "storeClaimSeed()", +"f620af13": "executors(bytes32,uint256)", +"f620d293": "ERR_TRIGGER_NOT_ACTIVE()", +"f621096e": "mintStable()", "f622a105": "createDApp(bytes32,uint32)", +"f622a2e5": "getAthleteFilterdByTeamNameById(uint256)", "f622cc82": "declareWinningOutcome(uint8)", "f6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", "f6233016": "DomenoToken()", +"f623bb6f": "tokenToSellerIndex(uint256)", "f623d7a7": "TrustlessTransactions_Log(uint256)", +"f623f342": "allocateEth(address[],uint256)", +"f623f6d1": "getTotalInvestorsEarnings()", +"f624a45d": "updateUser(bytes32,bytes32)", +"f624cfb6": "fastWithdrawalFromL2(address,bytes,address,uint256,uint256)", "f625ca7d": "lengthOf_addressAndDataPattern_to_voteRulesHash(address,address)", "f625ee28": "startMasterCopyCountdown(address)", "f625f472": "MultiownedControlled(address[],uint256,address)", "f6261a0f": "_isValidWithdrawLimits(uint256,uint256,uint256)", +"f62639e5": "smartContract()", +"f626cf2c": "safeMint(uint256,address,string)", +"f626f7c2": "releaseTimes(uint256)", +"f6271c06": "LONGESTFARMINGPOOLTIME()", "f62732b8": "index(address,address[])", "f627fe6c": "returnSomething()", "f6281a9b": "getTierWhitelist(uint256)", +"f6283478": "readDataAllAthletes()", "f62847f4": "TerrionFund()", +"f6284a22": "gameItemIndexToApproved(uint256)", +"f6286d77": "fetchWinner(uint256)", "f6288422": "commission_system()", +"f628a021": "_addDebt(uint256,uint256)", +"f628a127": "updateRandomWallets(uint256)", "f628e8e8": "startDonations()", "f62a92fa": "testRevertTx()", +"f62b46c9": "claimAndWithdraw(uint256)", +"f62ba5fb": "__ThresholdPool_init(address,address,address,address,address,address,address,uint256)", "f62bc2dc": "ICTA()", "f62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", "f62cec27": "setStartPreICO(uint256)", +"f62d1888": "initialize(string)", +"f62d2c53": "lock(uint256,address,uint256,uint256,bytes)", +"f62d487d": "approveWethToPool()", "f62de0c3": "weiPerUSD()", "f62e037c": "BETTING_CLOSES()", +"f62e9757": "_setRate(bytes32,uint256,uint256)", "f62eded9": "buyStar(uint256,uint256)", "f62ee1af": "burnFrom(address,uint32)", "f62eec09": "rejectLastDeliverable(bytes32)", +"f62f3c11": "revealTimestamp()", "f62f47ab": "UDF_PORTION()", "f62f9dbb": "tokenRatios(uint256)", +"f62ffac0": "LPperFORKUnit()", +"f630319c": "dates(address)", "f63051ff": "FXTOKEN(address,uint256)", +"f6309545": "claimchal()", "f630a468": "setAtomIsRent(uint256,uint128)", +"f630aa65": "randomNum()", "f630e0f5": "submitTransaction(address,uint256,bytes,bytes,bytes,uint256)", "f6310813": "transferDoc(uint256,address,address)", "f631345b": "setlargeBonusStopTime(uint256)", +"f6316784": "AcceptToken(address,uint256)", "f6326fb3": "depositETH()", +"f632b6fc": "Regulator_to_IoT_Verification()", +"f6334794": "Release(address,uint256)", +"f6335acc": "updateStakeHolder(address)", +"f633a487": "SLP_TOKEN_ADDRESS()", "f633adc1": "getRegister(int256,string)", +"f633c293": "submissionDuration()", "f6340be4": "updateProvision(address,uint32,uint256,uint256)", "f634bd29": "sec_addr()", +"f634f276": "convertTokenFromWithTransfer(address,uint256,string)", "f635052f": "colorPrice()", +"f6353414": "MinAmount3Round()", +"f63582ad": "getPlots(uint256[],uint256[])", +"f635b6ec": "CoinFlipFail(bytes32)", "f635d160": "setPOOL_edit_20(string)", "f635f50c": "minedTokenStartTime()", "f6360d37": "requestDiploma(uint256)", +"f6361e8d": "withdrawLp(uint256,address,uint256)", +"f6364846": "newImmediatePayment(address,address,uint256,string)", +"f6364cc1": "withdrawBal()", "f6366b9f": "OwnerTokensAllocated(uint256)", "f6368f8a": "transfer(address,uint256,bytes,string)", "f636931e": "PineapplePoints()", +"f6372969": "openFeeNestAmount()", "f6373296": "applySettings(uint256,uint256,uint256,uint256)", +"f63757ac": "safeLockGem(uint256,address,uint256,bool,address)", +"f637731d": "initialize(uint160)", +"f637b632": "getR()", "f637b7da": "collectedWei()", +"f637cfd4": "combineLand(uint256,uint256,uint256,uint256,uint256)", "f637d950": "getAssetInfo(uint256)", +"f637e1b5": "enableWalletBatch(address[])", +"f6383b2c": "governanceRecoverUnsupported(address,address,uint256)", "f63841e4": "featurePrice()", +"f6384905": "_0_shouldNotBeLesserThan_neg_1()", "f6384cb8": "sendReferallFundBalance(address,uint256)", "f63850d0": "GanaTokenPublicSale(address,address,address,uint256,uint256)", "f639365d": "testSetGet()", +"f6397fd3": "getNumberOfTasks()", +"f639c501": "depositor(uint256)", +"f639d534": "setTransferFees(uint256,uint256)", +"f639fb88": "loyalty(address)", "f63a43c0": "TokensPurchased(address,uint16,uint256,uint256,uint256,uint256,uint256)", "f63a5d22": "divideDecimalRoundPrecise(uint256,uint256)", +"f63a87d4": "setRefundEligible(address,bool)", +"f63aeac3": "startChangeStrategy(address)", "f63b1f7c": "GoldenLightCoin(uint256,string,uint8,string)", +"f63b44ac": "withoutValue()", +"f63b45ce": "getMassage()", +"f63bf8bd": "setContracts(address,address,address,address,address)", "f63c2659": "PriceCalculator(uint256)", "f63c533c": "Cost()", "f63c5532": "incrementStat(uint256,uint256)", +"f63c82fb": "stamp(string)", +"f63c8987": "getAllLPsByUser(address)", "f63cb8a3": "requireTokenFuel(address[])", +"f63d22ef": "transferWeaponFrom(address,address,uint256,uint256)", +"f63d2912": "delayLock(uint256)", "f63da25b": "Emailer()", "f63df2e9": "createStandardToken(address,uint256)", +"f63e6ace": "pendingPASTA(uint256,address)", +"f63e757f": "SendDividend(address,uint256)", +"f63e7811": "epochPeriodInSeconds()", +"f63ed497": "setAggregator(bytes32,bytes32,address)", "f63ef744": "sendCharityETH(bytes)", "f63f0e62": "turnOffCanUpdateNextGameInitalMinBetSize()", +"f63fc4ec": "allRefs(uint256)", +"f6400a46": "showRewards()", +"f64030e1": "unlockHxp()", +"f6404aae": "setWhitelistForAll(bool)", "f640b81e": "test_oneInvalidEqBytes32Message()", "f640d508": "transferToken(address,uint256,address)", +"f641090c": "store(string,string)", "f6413e46": "getFaucetAmountValue()", "f6418b0b": "buyLandForEth()", +"f6419d96": "completed(bytes32)", "f641d753": "changeElementName(uint256,string)", "f6420e15": "tc()", "f6432b8c": "publishLawyersInAttendance(string)", +"f643509c": "lock(uint256,string)", "f6436a7c": "BONUS_ICO_PERIOD_TWO()", +"f643a85c": "pack2currUserID()", "f643cf3d": "NEToken(address,uint256,uint256,uint256)", "f64402c4": "setVicepresidenteDeMesa(bytes32)", "f6444bcc": "isDeploying()", "f6446614": "withDrawToPoolOwner(uint256)", "f6448391": "getAllERC20(uint256)", +"f644c318": "transferProperty(address,uint256)", "f644c926": "SarmayehaaToken()", "f6454620": "add_certifications(string,string)", "f645496e": "giveawayFee()", "f645835b": "beneficiaryAddresses(address)", "f6458c6a": "toZ1(uint256[3],uint256)", +"f645d4f9": "forwarder()", "f6460964": "teamKeepingPerEpoch()", +"f646115b": "dividendCashout(uint256,uint256)", "f64623f1": "getBalanceB(bytes)", "f646286b": "getPlayerShipOwnerById(uint64)", "f6469342": "_setPackedBlockNumber(bytes32,uint256)", +"f646f1b0": "getDocumentNew()", "f64820f9": "addAttendant(string)", +"f64824c0": "pure_uint8()", "f6486cad": "burnReserveFees(address)", "f6487e4e": "rejectCampaign(address,string)", "f648f20b": "agencyWallet()", +"f64a1c8d": "arbitrageSell(address,address,uint48,uint256)", "f64ab21a": "getOnMintAmountValue(int256)", +"f64ab2f7": "LockDecrease(address,address,uint256,uint256)", "f64b5c16": "distDay()", +"f64beb69": "approve_646(address,uint256)", +"f64bef55": "TotalRewards()", +"f64bf4e5": "yFarmById(uint256)", "f64bfaba": "getBuyers()", "f64c08b1": "onThrone()", +"f64c6f32": "pendingDeposit()", "f64ccca6": "payToken(address,address,uint256,uint256)", "f64cd26b": "gcmp(uint256,uint256)", +"f64d7060": "walletCounter()", "f64e167e": "getTextCount()", +"f64e654c": "ownerSetExpiryRampTime(uint256)", "f64efacb": "icoHardCapInWei()", +"f64f788d": "toggleSelling()", "f64fca2e": "getNodeId(bytes)", "f64fe563": "asyncSend(address,uint256,uint256)", "f64ffde4": "getAccountPendingValue(address)", "f6503662": "safeApprove(address,uint256,uint256)", +"f65036a8": "rewardClaim(address)", "f65045df": "totalClosedBID()", "f6508be6": "tokensPerWei(uint256)", "f651bf44": "move_to(uint16)", "f652076b": "_getTokensAmount(uint256,uint256)", +"f6526145": "changeExemptWalletList(address,bool)", +"f652b73d": "NewSageRouterFactory()", "f652badb": "bitSSAToken()", +"f6530090": "withdrawUnclaimedMimir()", "f653279c": "TOKENS_FOUNDERS()", +"f65339be": "executeTrade(address,uint256,address[])", +"f653b81e": "identities(address)", +"f653cd6b": "claimLimits(address)", "f653d286": "toggleTokenSaleOnHold()", +"f6540b3f": "BetFinalizeFailed(uint256)", "f6560449": "evaluateProposalMetricEnd(uint256)", +"f6560d8a": "getDeterministicBuyQuote(bytes32,address,address,uint256)", "f65625ae": "changeWinnerPrizeMoneyForRaz(uint256,uint256)", +"f6564520": "colls()", +"f656ba51": "shareBalances(address)", +"f65716d9": "_validInsertPosition(address,uint256,address,address)", "f6577774": "BonusCrowdsaleImpl(uint256,uint256,uint256,address)", +"f658361e": "_normalizeFillAmount(uint256,uint256)", +"f6583f68": "swapExactTokensForETH(uint256,uint256,address[],uint256,address,uint256)", "f6585116": "bytesFunc(bytes)", "f658b1d5": "calculateContribution(uint256)", +"f6596590": "safeLockETH(uint256,address,uint256)", +"f6598275": "dougOfage(uint256)", "f659a45f": "airdropTokens(address,uint256)", +"f65a531b": "mintTokensEnter()", +"f65a74dc": "randomInputMap(uint256,uint256)", +"f65ab1be": "changeRequiredNumberOfVouches(uint64)", +"f65acda3": "SpendColor(uint256,uint256,uint256)", +"f65b0581": "addNFTToDungeon(address,uint256)", +"f65b4765": "_assertUnlocked()", +"f65b7ef9": "gearAddress()", "f65bed0d": "initNewGame(uint8[16])", "f65bffc3": "checkDividend(address)", +"f65c2d53": "setFeeToken(address,bool)", "f65c4d42": "Participate(uint256)", +"f65c85ee": "AuctionSuccessfulForToken(uint40,uint128,address,uint128,address)", "f65d1488": "setMarketingProfitAddress(address)", "f65d226f": "getTotalBetAmount(bytes32,bytes32)", +"f65d47aa": "initialize(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f65d5f86": "_mintFee(uint112,uint112)", "f65d6d4f": "MAX_MINT_NUMBER()", +"f65d71f6": "bountyHunterAddresses(uint256)", +"f65d901c": "blacklistRecoverableToken(address)", +"f65da69d": "getFundedHikari()", +"f65dd7a7": "POZBenefit_Address()", +"f65decc6": "unlockAmountAll(address)", +"f65ded8e": "seedNextPositionId(uint256)", "f65e2761": "RandomNumberGuessed(uint256,address)", "f65e8d4d": "potMembers()", "f65f5eeb": "choose(bytes32,bool)", +"f66005dd": "isHashUsedByGeneration(uint8,uint256)", +"f660c570": "getBalancesAndMaxLimit()", +"f6614cee": "setAcsACS(address)", "f6618bab": "getBuyRequestsLength()", "f661b886": "testCanTransfer()", "f661e767": "villainIndexToApproved(uint256)", @@ -141262,63 +258460,112 @@ "f662b881": "commitmentOf(address)", "f662f291": "getInit(address,address)", "f66302a2": "releaseMe(uint256)", +"f6631718": "_ownedTokensCount(address)", "f6631c64": "PPBC_Ether_Claim()", +"f6634f4f": "najdiInVrniStevilo(string)", "f6644c5a": "STARTING_FAIRY()", "f6648d4c": "publishMixerType(bytes32)", "f66597c2": "listTrophy(uint256,uint256,uint256,uint256)", "f665a541": "coinsAdded(address)", +"f665cbf5": "updatePoolLockTime(uint256)", "f6660246": "fundOrderInternal(address,uint256)", +"f66608fe": "getTaxFee()", +"f666196d": "getMetaData(address,uint256)", "f666323e": "UUIDProvider()", +"f666715a": "log(uint256,uint256)", +"f666cd37": "removeAddressFromGovernanceContract(address)", +"f667526a": "claimFee(uint256)", +"f66778a7": "JoinGame(uint256,address,uint256)", +"f6680ade": "AuctionCancelled(uint40)", +"f66851e2": "changeDistributionToken(address)", +"f6688419": "getProtocolsLength()", +"f668ead0": "Vote(address,uint256)", "f669052a": "maxTokensToMint()", +"f66938d2": "TEAM_RESERVED_AMOUNT4()", +"f66a06f8": "redeemAndStake()", "f66a79a0": "secondaryWallet()", "f66afcac": "isTheAO(address,address,address)", +"f66b05df": "showtokenPriceIncremental()", "f66b48da": "getHorseData(uint256)", "f66bf229": "minBuyAmount()", "f66c3af1": "getAddTokenApproveSignatures()", "f66c6691": "shortTimeLock()", +"f66c7281": "withdrawall()", "f66c75e5": "refund(bytes20,address)", "f66cce0e": "adjustKPIs(uint256,uint256)", "f66d0076": "getNumberOfCE()", "f66d1f65": "releaseToEarlyInvestors(address,uint256)", +"f66d20bc": "ftgPerBlock()", "f66d278e": "AgriChainDescriptionInt()", +"f66d448c": "setInversePricing(bytes4,uint256,int256,uint256,uint256)", "f66d685a": "lockInsolventTransfers()", "f66e86bb": "withdrawGasPayback()", "f66f0bd9": "MingYuanToken(uint256,string,uint8,string)", +"f66f145a": "isClaimsEnabled(address)", "f66f2449": "THANKSTEST4()", "f66f640e": "pregnantZodiacs()", +"f66f74e3": "claimBenefits(uint256)", "f66f83f6": "latestSeriesForUser()", +"f66ffc06": "initiatesendtoevote()", "f67028be": "trade(uint256,uint256,bool,bool)", +"f6708206": "updateLockerSettings(address,address,address,uint256,uint256,uint256,string)", +"f670c1f2": "changeReceiverAndAmounts(address[],uint256[])", +"f6710049": "inActivePenalty()", "f67187ac": "lookup(string)", "f671cae4": "setIcoThirdWeekRate(uint256)", +"f671e821": "getPledge(uint256,uint256)", "f671f5b3": "deleteEntireGlofile()", +"f67213ed": "minQtdDiv()", "f6724a55": "totalAmountInvested()", +"f67261c9": "totalRewardAmountClaimed()", +"f672718d": "totalBurn(address)", +"f672918b": "Exchange(address,uint256,string,uint256)", "f6729bf2": "canChangeLocked()", "f672c1aa": "totalBountyCount()", "f672e4d8": "changeAdminUser(address)", "f6731d62": "intCallWithArray(int256,uint8[4])", +"f67325ba": "getTotalPoolValue(bool)", "f673745a": "edoPerWei_()", +"f673c641": "depositTokenByAdmin(string,uint256,address)", +"f674a017": "revokeI(uint256)", +"f674cd6d": "refundELA(uint256,uint256,address)", "f674cfe5": "VOLUME_60()", "f674d799": "removeManyFromWhitelist(address[])", "f67501f7": "changePet(uint256,uint256,uint256,uint256)", "f6757cff": "getEmployeeInfo(uint256)", "f6761151": "Withdraw(address)", +"f6766a4c": "TopProposal()", "f676d539": "get_dati_lotto(bytes)", +"f67714b3": "godSetRoadsContract(address)", +"f6772816": "edit2D(uint256[][])", "f6774660": "calculateNumDIDToIssue(uint256,uint256)", +"f677b425": "setWhiteList(address,uint32)", "f677cf0d": "isDistributed()", "f678142a": "ethLandSaleOpen()", +"f678281b": "allowUserMintToken(bool)", "f6783518": "KYCToken()", "f678462f": "termsAndConditions()", "f6785de7": "newPayOutPercentageIsSet(uint256)", "f678cf02": "setRelation(uint8,address)", "f6791858": "tgeStartTime()", "f679791d": "playerRoll(uint256,uint256,address)", +"f679d305": "unjail()", +"f679f54b": "changeBuyingWBTCTokenFee(uint16)", "f67a1d37": "BlockChainChallenge()", +"f67a4476": "mapPurchasers(string,uint256)", "f67a7782": "periodOne()", "f67a81ea": "Bigba()", "f67abd87": "entryDetails(uint256)", +"f67af0c7": "scaledDividendBalances(address)", +"f67b1847": "setMarketId(string)", "f67b3047": "setItemActive(address,address,string,bool)", +"f67c1e8d": "executeOperation(bytes32,address,address,uint256,address,bool)", +"f67c73e8": "bestProfiles()", +"f67d1c13": "hasReferred(address)", "f67d5a8d": "sendDividendsWithRefBonus(address,uint256,uint256)", "f67e3d0d": "howManyShips()", +"f67e54c7": "safeVegeTransfer(address,uint256)", +"f67e5616": "valueShouldBe1()", "f67e8db2": "getEthToTokenOrderList()", "f67f83a8": "updateFileds(uint256,uint256)", "f67ff0af": "_llTransferFrom(address,address,address,uint256)", @@ -141328,37 +258575,79 @@ "f6805019": "addMeeting(string,uint256,uint256,uint256,uint256,uint256)", "f6806074": "withdrawBonds(uint256)", "f680b106": "RateEth()", +"f680d736": "AddTokenLock(address,uint256,uint256)", "f6814165": "castToInt(uint256)", "f681f6e7": "capitalRaised()", +"f6824b44": "withdrawnCardCount()", +"f6829228": "hodler(address,uint256)", "f68297f3": "emergy_withdraw(address)", "f6832c4a": "DO()", +"f6838a72": "buyLevel(uint256)", "f683b247": "openSecret(bytes32,bytes32,string)", "f68445dd": "myContract2()", +"f6845228": "_notifyDeposited(address,address,uint256,uint256)", +"f684d330": "EndFirBlN()", +"f684f33c": "NFT_ROLE()", +"f68575bc": "registarEPublicarAto(string,string,uint256,uint256,string,address,string,address,string,bool)", +"f6858498": "usernameDoesNotMatch(bytes32,bytes32)", +"f685cabe": "letsBurn(uint256)", +"f685e502": "bZxProtocol()", "f685e618": "_crownUnFreeze(uint256)", "f685f942": "ZNCoin()", "f685f9ad": "Moac()", "f6860955": "emitAborted()", "f686640b": "getCrabsOfOwner(address)", +"f6868331": "LoanProductActiveStateChanged(uint32,bool)", "f686f019": "getCompte_9()", +"f686f76d": "umiToken()", "f686fa10": "verifyBBODocument(bytes,bytes)", "f6879623": "addBountyReward(uint256)", +"f687b827": "niu()", +"f687deb3": "uniMine()", +"f6888d1d": "getBalance(bool)", "f688bb2b": "setAirDrop(uint256,uint256,uint256,uint256)", +"f688bcfb": "depositUSDC(uint256)", "f68975a9": "Total_Savers()", +"f68a8bcd": "SHAREHOLDERS_VOTING_QUORUM_FRAC()", "f68abb25": "approveToFight(uint256,uint256)", +"f68be513": "setReportExpirationTimeSec(uint256)", +"f68be924": "payedBalances(address,uint256)", +"f68bedbc": "convertETHtoExactERC20(address,uint256)", "f68c021b": "EtherXeum()", +"f68c3c94": "persentWithdraw(address)", "f68c5b6a": "equalBytes32ToBytes(bytes32,bytes)", +"f68cca13": "pendingiGov(uint256,address)", "f68ce40b": "turtlemasterReq()", +"f68cf27c": "erc20ToKF(address,uint256,address[][])", +"f68d7b70": "Trade(bytes32,address,address,uint256,uint256)", +"f68da1a7": "VerifyRequest(uint256,uint256,uint256,uint256,string,string,bytes32,bytes32)", "f68da9a0": "AthenaLabsICO(uint256,uint256[7],uint256,address,address[3])", "f68dcd2b": "MHTHolders(uint256)", +"f68e2478": "accrualInterest(uint256,uint256[],address[],string)", "f68e63e3": "PRICE_MUL()", +"f68e7304": "SET_HOOK_ROLE()", +"f68eb816": "_adminInterestPct()", +"f68ec1e8": "levelSetter()", "f68f1a0c": "recoverETH_SendbyMistake()", +"f68f3f43": "A6(bytes)", "f68f8e42": "dataSourceGetGroupResult(uint256)", +"f68febfe": "approve_747(address,uint256)", "f6903c9c": "processEndOfYear(uint256)", +"f69053c5": "completeRewardDeposit(uint256)", +"f690648d": "INVALID_CHARACTER_TYPE()", +"f6909c9c": "setExToken(address,bool,uint256)", "f691b30b": "lockReleaseDate6Month()", +"f691b71a": "burn(address,uint256,string,string,bytes32)", "f691e362": "EtherDOGEICO()", +"f6924b36": "VoteOnLaw(bool,uint256,uint256,uint256)", "f692715c": "getGameResult(uint64)", "f6928070": "numberOfGames()", +"f6928927": "get_rxp_balance(address)", +"f692f140": "RefundedToBuyer(address,address)", "f6933c7d": "isICOActive()", +"f693411f": "v2first(address)", +"f693a12f": "_allocPointForWETH()", +"f693bf42": "_emitStakeStart(uint40,uint256,uint256,uint256,bool)", "f693de1d": "signUpForTournament(uint32[])", "f694211c": "Composed(uint256,address,uint256[5],uint256[5],string,string)", "f6946940": "jack_pot()", @@ -141366,100 +258655,171 @@ "f694c4be": "NSEToken()", "f6950d5f": "LIFEWORLD()", "f6951038": "testCreateWithParentsForeign1()", +"f6961bef": "vbnb()", "f696c4ed": "fightAgon(uint64,uint64,uint256,uint256)", "f6973532": "setAddOwnerRequest(address)", +"f697605a": "newGame(bytes32[])", "f6978685": "HashnodeTestCoin_new()", "f697a0ed": "ppb(uint256,uint256)", "f697ddb2": "firstAddress()", +"f69857b0": "freeRenameAvailable(uint256)", "f69871e9": "WithConstructorArguments(uint256,bytes32)", "f6988b79": "getDeveloperReservedLockInfo(uint256)", "f698bceb": "getMintable()", "f698da25": "domainSeparator()", "f698e626": "WrapReadTokenData()", +"f699a391": "SWAP_FEES(uint256)", "f699ad94": "setupFundingInfo(uint256,uint256)", "f69a3c7b": "termsAndConditionsAreSigned(uint8,bytes32,bytes32)", "f69a6982": "getVirtualTradesSummed(bytes32,uint256)", +"f69a7aa8": "calcMintAlgorithmicFRAX(uint256,uint256,uint256)", "f69adce6": "dinoToken()", +"f69b2e20": "allBrokersQuotePercent(bytes32)", +"f69b45fc": "setMaxSecsLeft(uint256)", "f69b9dd8": "safeWithdrawalTokens(uint256)", "f69ba02c": "toB32(address,uint256)", +"f69bb9c4": "delegateMaster()", "f69bbf16": "setContributions(address,uint256,bool)", +"f69bd428": "maxTimelockDuration()", +"f69bd7f2": "getMostProfitableStrat()", +"f69bda1d": "send_reward(address[],uint256[])", "f69bf03b": "issuePartnerTokens(uint256)", +"f69c03ab": "UnlockEvent(address,string,string,uint256,bool)", "f69c3b24": "registerEarlyContrib(address,uint256,bytes32)", +"f69cfe8f": "getDomainCount(uint64)", "f69d03c9": "ETCWalletCreated(address)", "f69d5f0e": "icoPhases(uint256)", "f69da37e": "toRefer()", +"f69e2046": "compound()", "f69e672e": "modifyContactManual(uint256,address,string)", "f69e739e": "voteForCandidate(uint256,address,address)", "f69e8384": "ceoRemoveCoo(address)", "f69e98d7": "bite(uint256,uint256)", +"f69eee18": "addCard(uint256[],uint256[])", "f69f1027": "PRESALE_WEI_GOAL()", +"f69f1889": "getMax(address)", "f69f18a6": "timesIsOver(address)", "f69f190c": "getWorkerStatus(address)", "f69f64f7": "setInfo(uint256)", "f69f7cab": "createTokenVault(uint32)", "f69f8a5c": "approvedBuyerForIndex(uint256)", +"f69fcee0": "legacyContractAddress()", "f6a01234": "TokenStorage(uint256,address)", "f6a03ebf": "setStart(uint256)", "f6a08ced": "OracleBitfinex()", "f6a0be88": "NCRCoin()", "f6a0e8a4": "DTCC_ILOW_7()", "f6a10249": "TransferedEth(address,uint256)", +"f6a10899": "playTournamentDiceGame(string,string,address[],uint256[],uint256,uint256)", "f6a12b48": "MatchmakerPrevails(address,address,uint256,uint256,uint256)", +"f6a130e7": "buybackNotifiers(address)", +"f6a148ad": "__CVaultBSCFlipStorage_init()", "f6a14bf7": "getNumberOfTokensForTheTeam()", +"f6a15805": "pay1()", "f6a176ae": "fpMul(uint256,uint256)", "f6a25127": "test_set_label()", "f6a29b81": "EntropyTxDetails(address,string,uint256)", +"f6a2b5a2": "changeGSTHolder(address)", +"f6a2c5e5": "Liquidity()", "f6a30e3e": "minTicket()", "f6a31715": "Revocation(address,uint256)", "f6a31b9c": "transferManagerContract()", "f6a33253": "changeRatio(uint256)", "f6a3b1dd": "totalHardcap()", +"f6a3bcad": "getTokenReleaseAtIndex(address,uint256)", "f6a3d24e": "exists(address)", "f6a3e8c8": "lockInfo(address,uint64)", +"f6a462a5": "thirmAllowance()", "f6a46c2e": "settleBaseDeliveries()", "f6a47e9a": "MongoliaNationalToken()", +"f6a4932f": "offer(uint256,uint256,address)", +"f6a4b3d5": "GetYDaiBalance(address)", "f6a5546a": "testBilibirdaToken()", "f6a56bcf": "TianLianCoin(uint256,uint256)", "f6a58558": "withdrawRemainingRtc()", "f6a5b13e": "m_beneficiary()", "f6a5fa30": "subShares(uint256)", "f6a60d89": "resumeCrowdsale()", +"f6a61795": "initial(uint256,uint8)", +"f6a620b8": "updateTokenDecimal(uint256)", +"f6a6462c": "half()", +"f6a71bf4": "changeEmergencyNNAmount(uint256)", +"f6a74001": "initialize(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,bytes32)", "f6a74ed7": "removeController(address)", +"f6a7e669": "Dividend(address,uint256)", +"f6a8235a": "registerBonus(address,address,address,uint256,uint256[])", "f6a84013": "totalMEATonsSupply()", +"f6a86b4b": "v_deadline()", +"f6a89bf6": "createPromoBrand(bytes32,address,uint256,uint256)", "f6a8aea7": "financialStrategy()", "f6a92de9": "mycontracts(uint32,address)", "f6a94ecb": "notifyOfArbitrationRequest(bytes32,address,uint256)", +"f6a99bdc": "narcoIndexToOwner(uint256)", +"f6aa1b68": "setName(bytes6)", +"f6aa620f": "availabletoken()", +"f6aa8b47": "GameFailed(uint256)", +"f6aacfb1": "isLocked(uint256)", +"f6aae6a8": "EventReward(address,uint256)", "f6ab4243": "buyCastle(uint256,uint256,uint256)", +"f6ac210d": "redeemRebalancingSetIntoEther(address,uint256,bytes,bool)", "f6ac54dd": "checkRegPeriod(bytes32)", "f6ac6684": "getStringZero(uint256,uint256)", "f6ad660b": "f3(uint256,uint256)", "f6ada1ad": "rewardDaysLeft()", "f6adab61": "delayOfICO1()", +"f6ae42e7": "valuePoolUnminingFeeDenominator(address)", +"f6ae6a74": "transferFromStandard(address,address,uint256)", "f6af18f5": "montly_pay()", "f6af2718": "Quantastic()", +"f6af8e1d": "MintingFinished(uint256)", +"f6afacd9": "getDelegatedStakeToPoolByOwnerSlot(bytes32,address)", "f6afad47": "getDatabase(uint256)", "f6afe805": "PRE_SALE_GMRP_TOKEN_CAP()", +"f6aff163": "setApeRate(uint256)", +"f6aff4a7": "LogMixerReady(bytes32,bytes32)", +"f6b05787": "updateRewards(address[],address)", +"f6b06d75": "m_addrToName(address)", +"f6b06e70": "_MT_FEE_RATE_MODEL_()", +"f6b07a4f": "getTotalCushion(address,address)", "f6b09195": "preicoTokensPerEth()", "f6b098f8": "nextAttackTimestamp()", +"f6b0ed28": "rewardAkroPool()", "f6b10854": "safeWithdrawAll()", "f6b12f28": "gameOwner()", "f6b15fe6": "getProfit(uint256,uint256)", "f6b19c74": "drain(uint256)", +"f6b1a5bb": "updateIPhoneContract(address)", +"f6b1b18b": "tokenBalances_(address)", +"f6b24b1c": "updateProject(uint64,address,string,string,uint64)", "f6b2b334": "upgradeTo(address,uint256)", "f6b2c3b6": "VendTitle(uint256)", "f6b39b3c": "ContractTotalMined()", "f6b3e080": "roundOneRate()", +"f6b41ec8": "getReward(uint256,bytes32[],bytes32[],address)", "f6b44d03": "validFactories()", +"f6b45eb7": "bidDuration()", "f6b4c691": "getPendingCratesForUser(address)", +"f6b4d0fa": "subsidyPerCampaign()", "f6b4dfb4": "contractAddress()", +"f6b5055f": "setPendingMinter(address,uint256)", "f6b5460f": "withdrawTrackOf(string)", "f6b55a93": "hotWalletAddress()", +"f6b570e2": "ISBNToIds(string,uint256)", +"f6b58479": "getAvailableRewardsForAccountForPeriods(address,uint256[])", +"f6b62166": "voteCancle(bytes32)", "f6b63224": "_getHpbNodesInterface()", +"f6b65147": "getBancorContractAddresByName(string)", +"f6b68d4d": "stageAllocation()", "f6b69697": "importPreviousWinners(uint256[],address[],uint256[])", "f6b6daf1": "supportedTokens(uint256,uint256)", "f6b70702": "LightComplexAirdrop()", +"f6b710a4": "UpdateDeklaPriceSuccessful(uint256,address)", +"f6b71510": "TimesChanged(uint256,uint256,uint256,uint256)", +"f6b77ad6": "hedge(uint256,uint256[],uint256[],uint256)", "f6b781a1": "Bolton()", +"f6b82618": "investedTokenAmount()", "f6b87500": "internalCalc(int256,int256)", +"f6b907ef": "lamaPerBlock()", "f6b911bc": "burn(address,address,uint256)", "f6b91944": "walletLists()", "f6b924f8": "EventAuction(address,uint32,uint256,uint256,uint256,uint256)", @@ -141468,104 +258828,188 @@ "f6b97131": "redemptionCount(address)", "f6b9d05d": "bountyAllocation()", "f6b9fd79": "STARTING_VINES()", +"f6b9fdfb": "denominationToken()", +"f6ba0007": "removeRole(bytes32,address)", "f6ba13a5": "lastBlockNumberInRound()", "f6ba3b6c": "addThing(string,string,bytes32,string)", +"f6bb0cf1": "getComment(address)", "f6bb3cc4": "deleteString(bytes32)", +"f6bb43b9": "updateNum(uint256)", +"f6bb9bab": "_bdm()", +"f6bcbd31": "delegated(address,address)", +"f6bd02fa": "allowContract(address)", +"f6bd5378": "getEmailHash(string)", "f6bd5893": "getGas(uint256)", +"f6bd7e9a": "getMergePrice()", +"f6be1e3f": "setBlockHashWinners()", "f6be4776": "CannabizToken()", "f6be71d1": "setDuration(uint256)", +"f6be7ed3": "setStreet(uint256[],string)", "f6bea5dd": "LOCKEDiN()", "f6bed059": "mixer()", "f6bf0edd": "removecantonEmployee(address)", +"f6bf3ef6": "synthereumFinder()", "f6bf44b6": "getPoolStakeCount(uint256)", "f6bffff8": "_createTombWithData(address,string)", "f6c05625": "isValidNumber(uint8)", +"f6c0684c": "DMG_GROWTH_COEFFICIENT_FACTOR()", "f6c0736b": "register_token(address,string)", +"f6c0812f": "getReferralFee()", "f6c0d6a3": "_getChainLength(uint256)", "f6c1acdf": "proofFor(string)", "f6c1db4c": "GetChequeInfoByHash(uint256)", "f6c28241": "BuyForFriend(address,address,uint256,uint256,uint256)", +"f6c2d292": "deletePool(uint256)", +"f6c349f8": "showMaxToken()", +"f6c3ce33": "ownerAddressToName(address)", "f6c3f6cd": "readUserPurchaseAtIndex(address,uint256)", "f6c42713": "changeExpiredLimit(uint256)", +"f6c427c7": "izzyT()", +"f6c471db": "unlockdate_T2(uint256)", +"f6c471f2": "LogN(uint256)", +"f6c4b01f": "isRevoker(address)", "f6c50d8b": "_ownersTokens()", "f6c536a0": "sendBonusMany(address[],uint256[])", "f6c5c80d": "cleanUp()", +"f6c60b05": "Registration(address,uint256)", "f6c6b731": "activeFirstRound()", +"f6c6cf74": "_lastPrivateUnlock()", +"f6c6dadf": "clearBNB()", "f6c7430e": "JAPACHELOR()", +"f6c788b2": "amountLocked(address)", +"f6c7db75": "pendingStates(uint256)", "f6c8f62e": "TransferBack(address,uint256,uint256)", "f6c976d2": "test_1_assertGasUsage50Boards()", "f6c98dd7": "WikiToken()", "f6c99dad": "SETUP()", "f6c9e930": "approveSender(address,address,bool,uint256,uint256)", +"f6ca3b82": "seedMemberValue_()", "f6ca75d8": "AkonCoin()", "f6cabaa0": "burnedToDate()", +"f6cad255": "acceptedCollateral(address)", "f6cb86db": "whitelistTransferPrimordialTokenFrom(address,address,uint256)", "f6cbcab0": "mintParts(int256,uint16,address)", "f6cbea50": "ErrorReturningEth(address,uint256)", +"f6cc15d0": "execTransaction(address,uint256,bytes,uint8,uint256,bytes)", "f6cc7d60": "setUnitDefenseIncreases(address,address,uint256,uint256,bool)", +"f6cd6fa3": "sashimiPerBlock()", "f6cdf281": "returnPtSafeMedium()", "f6ceecc4": "TokenAdminContract(address,address[],uint256,uint256)", +"f6ceefa2": "pushRewards(address[])", +"f6cf0542": "webappMinBalance()", "f6cf3a7d": "setDeveloperCut(uint256)", "f6cf4570": "BoughtBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", "f6cf5411": "startTimePreIco()", +"f6cff48a": "cancelUpdate(address)", +"f6d016dc": "checkWhetherEnoughPromoPlanet()", +"f6d021ee": "lastWithdrawalId()", "f6d024c6": "test_add(uint256,uint256)", "f6d0bf2f": "GetContractBalance()", +"f6d0ffae": "setRateBounds(uint256,uint256,uint256,uint256,uint256)", +"f6d1017c": "smallTopupWinner(address)", +"f6d16e03": "isLCP(address)", +"f6d1c271": "currencies(uint256)", +"f6d2c55c": "Approval(bytes32,bytes32,uint256)", "f6d2eb65": "_validateQualityConsensus(bytes32,bytes32)", +"f6d2ee86": "initialize(address,string,string,uint8)", "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)", +"f6d3e441": "angelTier()", +"f6d45987": "End(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"f6d49271": "activeOffers()", "f6d4a265": "addLacks(uint16[],int64[],uint16[],int256,int64[],int256,int64[],uint8[])", +"f6d4ec26": "getStartTimeStamp()", "f6d51638": "getRocIdToTokenId(uint256)", "f6d5959b": "getActionStatus(uint256)", +"f6d5ca42": "DAI_STRATEGY()", "f6d68fca": "balanceWinPoolForThirdStage()", "f6d6d5aa": "claimableToken()", "f6d72acd": "setVoter(uint256,address,uint256)", +"f6d82c81": "registerAthletes(string,uint256,uint256,uint256,uint256)", "f6d860d1": "approveUserKYCAndSetReferrer(address,address)", +"f6d893ec": "setAvailableTokens(uint256)", "f6d89563": "airdropTotalCurrent()", +"f6d89d08": "forEMOONholders()", +"f6d8f033": "airdroptail()", "f6d956df": "buy(uint8,uint256,uint256)", +"f6da0698": "houseRealtyTransferOwnership(uint256,uint256,address,address)", "f6da1c0a": "getPriceSMPTokensPerWei()", +"f6da6ddd": "CALL_TIMELIMIT_DENOMINATOR()", +"f6da7764": "_getAndUpdateDelegatedByHolder(address)", "f6dab356": "getGPSEndTime()", "f6db2bac": "LOG_BetLost(address,uint256)", +"f6db5593": "InviterRegistered(address,uint256)", "f6db6e50": "ponziToWei(uint256,uint256)", "f6dbc252": "MOREToken()", +"f6dbe9ed": "TokensWagered(address,uint256,uint256)", "f6dcb32c": "sendRewardTokens()", "f6dd0187": "getSubject(uint256)", +"f6dd8393": "SlowMelt(address,uint256)", "f6ddac74": "updateLocation(string,string)", "f6ddcee5": "_generate_seed(uint256)", +"f6de23df": "BuyInMarket(address,uint256)", "f6de4b81": "_doVote(address,uint256,uint256)", "f6df0d50": "setFrozenAccountICO(bool)", "f6df26d2": "kickOutCommunity(address,uint256)", +"f6df2f20": "setNeoAddr(address)", +"f6df87bc": "setChangePeriod(uint256)", +"f6dfac25": "returnDots(address,address,bytes32,uint256)", "f6dfafe1": "getShareHolder(uint256)", "f6dfcff7": "getCooldownEndTime(uint40)", "f6dfdad1": "getContractInformation()", +"f6e00e0f": "choose(bool)", +"f6e0edf4": "selectPhase(bytes32,uint256,bytes32,uint256)", +"f6e106ca": "check_basket(uint256)", "f6e158b9": "getPickedAssetsAndFinalSeed(bytes32[],uint256[],uint256,uint256)", +"f6e15f04": "depreciationNumerator()", "f6e212ea": "addCrystal(address,uint256)", +"f6e3cf57": "insuranceAddr()", +"f6e447ee": "registerEvent(address,string,string,bytes32,bytes32,bytes32,uint256,bytes32)", "f6e4641f": "purchaseFor(address)", +"f6e48a45": "iterateLength()", "f6e4a3dd": "tradeBalances(address,uint256,address,uint256,address,address,uint256)", +"f6e4d63c": "setEnableReb(uint256)", +"f6e57e60": "set_secret(string)", "f6e5c6a4": "totalWeiDonated()", +"f6e5d29b": "addItemToBlockchain(uint256,string,string)", "f6e5e112": "startingEtherValue()", "f6e5e298": "setScientificData(uint256,string)", "f6e66c17": "totalAwards()", +"f6e6761e": "initiateModifyTimelockExpiration(bytes4,uint256,uint256)", "f6e681a9": "IkuraApproval(address,address,uint256)", +"f6e71bbe": "RecommendPayment(address,uint256)", "f6e72981": "mintManyTo(address,string,uint256[],uint256[])", "f6e7b785": "tdeStarted()", "f6e7f69d": "test_insert_findWithHintPrevRemoved(int256)", +"f6e80956": "l1l7users()", +"f6e85219": "getOrderBookByPairs(address[],address[],uint256)", "f6e87f81": "SkillChainToken()", "f6e898b0": "getIcedAddresses()", +"f6e8b71d": "AuctionStarts(uint16)", "f6e9b85c": "doSetCanCreateGrants(address,bool)", "f6ea1a3f": "CryptoSpin(address)", "f6ea6252": "MINER_END_PRICE()", +"f6ea8d76": "getUserVariableBorrowCumulativeIndex(address,address)", +"f6eb127a": "batchBurn(address,uint256[],uint256[])", "f6eb1337": "TokenBought(address,uint256,uint256,uint256,uint256)", "f6eb13b3": "VietnamToken(uint256,string,uint8,string)", "f6eb58de": "TransferManagerRevoked(address)", +"f6eb760f": "setFeeGrowthGlobal1X128(uint256)", +"f6ebc0eb": "getStaffFingerPrint()", "f6ebe41a": "defaultURIStart()", +"f6ec1c5b": "getPlayerInfo(address,address)", "f6ec91d5": "developerAccount()", "f6ecb9ee": "getprizemoney(address)", "f6ecd724": "init(address,uint256,bytes32,uint256,uint256,uint256,uint256,bool,bool,address)", +"f6ecdb8c": "synchronize(uint256,bytes32)", "f6ecebf2": "LeagueAdministrator()", +"f6ed151a": "removeBlockAccount(address)", +"f6ed2017": "getPendingRewards(address)", +"f6ed4343": "accomulatedRewards()", "f6ed4b71": "getBasketDetails(address)", "f6ed5342": "updateEscrow(uint64,uint256)", "f6ed860e": "cancelGoldSellOrder()", @@ -141574,200 +259018,392 @@ "f6ee439f": "registerAssetComment(int256,string,string,uint256)", "f6ee87b8": "_0xEtherToken()", "f6ee8c59": "FirstBonus()", +"f6ee8fed": "awardCerts(address[],string)", "f6eeb89c": "addBid(string,string,uint256,address)", "f6eeff1e": "punkNoLongerForSale(uint256)", +"f6ef0796": "getNextMininumDeposit()", +"f6ef340a": "setSakeAddress(address,address,address,address)", +"f6ef5aa5": "closePledgeF(uint256)", "f6ef97ff": "transferEthToWallet(uint256)", "f6efcb7a": "setKeyData(bytes32,bytes32,bytes32)", +"f6f05bb9": "renounceCollector()", +"f6f07b63": "MAX_ISSUED_ID()", "f6f0fa8d": "teamReleased()", "f6f10a26": "topUpWithEtherAndTokensForHolders(address,uint256)", "f6f15ec9": "Larbaoui()", "f6f17bba": "distributePreSoldShares()", +"f6f19715": "userIsRegistered(address)", "f6f1995d": "onlyOwnerSetBountyWallet(address)", +"f6f1e306": "addLiquidityETH(address,uint256,uint256,uint256,uint256)", "f6f3144d": "GetEthBalance(address)", "f6f32cc4": "CICToken(string,string)", +"f6f33638": "giveMoneyBack()", +"f6f34213": "BuyToken(address,uint256,uint256)", "f6f36028": "Score()", "f6f36641": "setV_R5(uint256)", "f6f3973f": "fundIco()", +"f6f3aec6": "_setLow(uint256)", +"f6f482aa": "setJar(address)", "f6f494c9": "getTermsContract(bytes32)", "f6f505c4": "RaffleResult(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes32)", +"f6f5115c": "owedTokens(address)", +"f6f5475b": "setbillingAmount(uint256)", "f6f54833": "HighEndTreasureChain()", "f6f55ada": "TokenDistributed(address,uint256)", +"f6f5bd05": "getAvailableTpoll()", "f6f5eb59": "transferableStartTime()", "f6f5f567": "SMPAcquired(address,uint256,uint256)", +"f6f6217d": "changeBeneficiary()", +"f6f65654": "Vacate(address,uint256)", "f6f65f1a": "ASTRN_TOKEN()", +"f6f6b3ac": "Bought(uint16,address,uint256,address)", +"f6f6e66c": "inversorsList(uint256)", "f6f6edd4": "issuerDecimals()", "f6f6fc74": "holderTeamTokens()", "f6f7301e": "getById(int128)", "f6f82ecb": "massChangeRegistrationStatusForSilverWhiteList(address[],bool)", "f6f844e4": "setOp(bytes32)", "f6f8ca07": "burnPXL(address,uint256)", +"f6f8ef35": "arShieldPercent()", "f6f91737": "MAX_FREE_REFERRAL_PACKS()", +"f6f91d46": "updateAskAmount(address,uint256,uint256,bool)", "f6f94a85": "ScaleFactor()", "f6f94b47": "MiningPayout(address,uint256,uint256)", +"f6f961e2": "get_top_special_pairs_length()", "f6f96d91": "rateOfEther()", "f6f98e34": "calcReleaseToken(address,uint256,uint256)", +"f6fa059a": "getCurrentIntervalCoefs()", +"f6fa32e6": "generageSvgCurve(int24,int24,int24,int8)", +"f6fa8276": "ReleasedEvent(bytes32,address,address)", +"f6faad79": "allowWithdrawFromOtherWant(address)", "f6fb2c72": "buyGuardian(uint256,uint256,uint256)", +"f6fb4a39": "blacklistAddresses(bool,address)", "f6fb4c9a": "_createFilm(string,address,uint256)", "f6fb6ecf": "buildHouse()", +"f6fb771e": "wrapSub(uint256,uint256,uint256)", "f6fbc06a": "getWeiInvested(address,address)", "f6fc8160": "addSeed(uint256)", "f6fc96ad": "mainsale()", "f6fcbee1": "getArrayUint(bytes32)", "f6fcc14e": "agTechWallet()", +"f6fd7fde": "choices(uint256)", "f6fe3a01": "getUint256Min(int256)", +"f6fed129": "gISW()", +"f6fed429": "maxViewLength()", "f6fee732": "getAccountNote(address)", +"f6ff0de1": "SetLego(address)", +"f6ff2ad7": "DebugLog(string,uint256)", +"f6ff712c": "SetLiquid(bool)", +"f6ff9352": "calculateDebtFor(uint256,bool)", "f7008156": "_haveEveryoneDeposited()", "f700abf1": "addBudget(uint256,uint256)", +"f700b14f": "myTotalInvestmentAmount()", +"f700ca19": "payAmountDegree()", "f700ead9": "withdrawTokenMulti(address[],uint256[])", +"f701143e": "preSaleTokensPerETH()", +"f7013ef6": "initialize(address,address,address,address,uint256)", +"f701f221": "LogResultReceived(uint256)", +"f7023bb6": "updateOracleAddress(address)", +"f702959c": "addNewDataProposal(uint256,uint256,address,uint256,uint256,address)", "f702dd8a": "hkchain(uint256,string,string)", +"f702e4c4": "ownerbyid(uint256)", +"f702f09c": "EditionCreated(uint256,bytes32,uint256)", "f703601e": "safe_add(uint256,uint256)", "f703e773": "changeLifeExpectancy(uint256)", +"f7044022": "DiscipleAuctionCreate(uint256,uint256,uint256,uint256,uint256)", "f7044bae": "getShareHolderCount()", "f7048161": "checkRefundSignature(uint8,bytes,address)", "f704b57a": "Bitconnect()", "f704cb98": "addInvitation(address,address,uint256,address,string)", "f70532fe": "getContractsOf(address,uint256)", +"f705398e": "astroOwnerToIDsLen(address)", +"f7056090": "convertToUSDT(uint256)", +"f705ca75": "withdrawReferral(address)", "f705fb87": "preICOend()", +"f705fed5": "recordAddr(uint256)", "f7066121": "lastJackpotRound()", +"f7068643": "setReturn(bool,bool)", "f706b476": "set_pauseUET(bool)", "f706b814": "PARSEC_CREDIT_DECIMALS()", +"f706bf28": "notifyFee(address,uint256)", "f7073490": "buyLink()", "f7074919": "seenHereA()", "f70794ea": "acceptHelp(uint256)", "f707a308": "tierTwoMin()", +"f7085ec7": "launchtime()", "f7086dd1": "SmigesToken()", +"f708844f": "DecreaseSoldSaleSupply(uint256)", "f70904b4": "sale1Accepting()", "f7095d9d": "updateTentativeWinningChildUniverse(bytes32)", +"f7097a72": "getStaticBonusWithdraw(address)", +"f709b906": "erc721safeTransferFrom(address,address,address,uint256)", +"f709cef6": "_setApproval(bytes32,address,address)", "f709dd51": "getTrademark()", +"f709f23b": "userRewardInfo(uint256,address)", +"f709f538": "_erc20()", +"f70a16e6": "lendvSPACEX(uint256)", +"f70a8698": "overRange(int24,int24,int24)", "f70ad595": "team_release_epoch()", "f70b0a07": "setTrustedLateCloser(address,bool)", "f70b13c5": "vestedTokens(uint64)", +"f70b83e9": "trade(address[4],uint256,uint256,uint256,uint8,bytes32,bytes32,uint256,uint256)", "f70bbb9a": "getProposalExternalToken(bytes32,address)", "f70bbdaf": "create(string,string,uint32,int256,string,address)", +"f70bd10b": "rewardAtPayout(uint256)", "f70bdba7": "AdidasCoin()", +"f70c0f04": "projectIdToPricePerTokenInWei(uint256)", "f70c92de": "GOSHUIN()", +"f70cb6ba": "NextGame(uint256,uint256,uint256,uint256)", "f70ccc6e": "MaptPricing()", "f70d7629": "_verifyOwnershipOfTokens(uint256,address,uint256)", +"f70d9362": "getCurrentFee()", +"f70dac52": "uniqueInvestorCount()", "f70dbb77": "isPresalePeriod()", "f70dd1fe": "isAllocated6()", "f70eabff": "addTeamAndAdvisorsAllocation(address,uint256)", +"f70ebda1": "airSend(address,uint256,uint256)", "f70f1821": "weeksFromEnd()", +"f70fa1ad": "sushi_dai_poolId()", "f70fa221": "getInitializeCashValue()", +"f70fd9b9": "top1DoiThi()", +"f71035b9": "getRewardsDetailsOfUserById(uint256)", "f71143ca": "isSaleLive()", +"f7118c61": "completeTaskAndPay(bytes32,address,uint32,uint256,uint256,bytes)", +"f711f6c0": "setFakePriceBTC(uint256)", +"f712a6f8": "ethToToken(uint256,uint256,address)", +"f712ac17": "transfernew()", +"f712adbb": "onesplit()", "f712d7ff": "testFailControllerTransferFromWithoutApproval()", +"f712d922": "stableRewardStartTime()", "f712f3e8": "implementsERC165Interface(address,bytes4)", +"f7130aab": "PaymentEvent(address,uint256)", +"f71324a5": "change(uint256,address,uint256,uint256,bytes)", +"f7133c18": "setAirdropAmout(uint256)", +"f7138aae": "getStakerRedeemedStakeCommission(address,uint256)", "f7138eaf": "createArtworkAuction(string,string,uint32)", +"f713c79e": "getMonthlyDepositedAmount(address,uint256,uint256)", +"f713d8a8": "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)", "f71441a5": "maxGoal()", +"f7145f89": "buyDividendFee_()", "f7146269": "testGetRandomDragon(uint256)", "f7149220": "RNG()", "f714a96e": "myCompany()", "f714bf3d": "overflowOwner()", "f714de9c": "MultiAccess()", +"f71584ee": "doPay(uint256,uint8,uint256,uint256,uint32)", +"f715e158": "crowdSaleApprove(address[],uint256[])", +"f715e293": "getMocPrecision()", "f7160766": "getCompte_13()", "f716171c": "createTrade(uint16,address,address,uint256,uint16,uint32)", "f7164029": "upgradePrefixPreSignedFirst(uint8,bytes)", "f716b7bf": "initInvesters()", "f716c400": "getCrowdsaleUniqueBuyers()", +"f716c79a": "getNonUpgradableContractAddress(string)", +"f716c806": "profitOfPool(address,address)", "f716fe43": "s37(bytes1)", "f717442a": "previousPriceOf(uint256)", "f717c310": "freezeTransfersSince(uint256,string)", +"f7184aed": "pendingLef(uint256,address)", "f71868da": "Ethereumcapital()", +"f7189b85": "IssuerSet(address,address)", +"f7191ac4": "_immediatelyWithdrawableLimitPublisher()", "f719254d": "cancelEthToTokenOrder(uint32)", +"f71978db": "queueIndex()", "f719e111": "useOraclize()", "f719edfb": "firstPublish()", +"f71a1613": "setClaimLock(bool)", +"f71a5d88": "openPeriod(uint256)", +"f71a7843": "handleStateTransitions()", "f71ad40e": "icoCapInWei()", "f71b041c": "refundUser(bytes32,uint8,uint256,uint256)", +"f71b21a4": "_doMint(address,uint256,uint256)", "f71b382c": "PIEXTREAM()", +"f71b5bcd": "deployContract(uint256,uint256)", "f71be837": "sign(address)", "f71c60bd": "AMBASSADOR_FIVE()", "f71cc3a5": "setUserStatus(address,uint256)", +"f71d0669": "isAntecedentHashedSecret(bytes32)", +"f71d4516": "setUsageFee(uint256)", +"f71d96cb": "players(uint256)", "f71db383": "setArbitrationContractAddress(address)", "f71dcb10": "CreatedMTP(address,uint256)", +"f71e41a5": "holdingLevel1(address)", +"f71e4bef": "totalRaisedETH()", +"f71e628b": "__Offering_init_unchained(address,address,uint256,uint256,address,uint256,uint256)", +"f71e6e92": "flashloanInstance()", +"f71efefd": "transferRequest(address,address,uint256,uint256)", +"f71f2ad1": "setAffiliateCode(uint256)", "f71f7a25": "set(bytes32,bytes32)", "f71f9c38": "SupplyChanged(uint256)", +"f71ff4e3": "findFreeX2Referrer(address)", +"f720036c": "externalLiquidityTrade()", "f72047ff": "_enableRefunds(address)", "f72084b2": "foundationShare()", "f720a453": "senderStake()", +"f720bd5e": "takeTicketIncome(address)", "f720d563": "endAttack(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", "f720ef08": "setTokenAiNetworkToken(address)", "f720f3d2": "tokensToEther(uint256,uint256)", "f720f80b": "isMaster(address)", +"f7210633": "counters()", +"f7212103": "getGasCostOfGetLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256)", "f7213db6": "orderFills(bytes32)", +"f7214d37": "LITHUANIA_FLAG()", +"f721599e": "getLiabilities(address)", +"f7219dd7": "yieldInfo(address,uint256)", +"f722138e": "fraxBalance()", +"f7229239": "sharePriceUnit()", +"f72294c9": "affiAddr_()", +"f722b41a": "getNumPendingQueueElements()", +"f722ff7e": "counter3()", +"f7240362": "tree(address)", "f72457af": "CertifierDb()", "f7253071": "lastBlock_f0()", "f725839f": "multiGenerate(address,address[],bytes)", "f7260d3e": "receiver()", +"f7261ca7": "registry(uint256,address)", "f7265042": "getUsersShipsIds()", +"f726a786": "CreditsCashedout(uint256,address,uint256)", "f726af40": "MilestoneAmountRaised()", +"f726bfb2": "HitFunds(address,uint256,uint256)", "f726f715": "distributeFunds(uint256)", "f727550e": "determineOutcome(uint256)", "f72755fe": "getRequest(int256)", "f72758e7": "getBracketDataMiddleTeamIds(uint8)", +"f727b481": "removeAllowedReceiver(address)", +"f728089c": "Card(uint8,bool,address)", "f72860ca": "modifyCustomer(string,string)", "f7286888": "getPhaseNumber()", +"f7286d5f": "withdrawUSDSC(uint256)", +"f728c0a4": "completeWithdraw(uint256[])", +"f728d73e": "setEthCustomRate(uint256)", +"f728e08e": "ABPT_PROXY()", "f72918ef": "addVoterVote(address)", +"f72961cb": "startAirdropRhino(uint256,uint256,uint256,uint256)", "f729688e": "_hasFlags(uint256,uint256)", +"f729874b": "ayrAYR()", "f729b216": "moreTokenPerEtherForSeedRound()", "f729cf0d": "getJob(bytes32)", "f72a244d": "handleAllowance(string,uint256)", +"f72ac9cb": "g_isOperational()", "f72ae72c": "remainingTokenForSale()", "f72b7ab9": "SbloccaConto(address)", +"f72b922e": "convertTo(address,bytes,uint256)", +"f72c0791": "adapterType()", +"f72c0bc7": "addKey(uint256)", "f72c436f": "isHuman(address)", "f72c75a5": "delegateVestingContractOwner(address)", +"f72d0024": "Buy(address,bytes32,address)", +"f72d0b3b": "get(uint8)", "f72d2c22": "BONUS_HI()", "f72d3b15": "LamboPresale(uint256,uint256,uint256,address)", "f72d50a9": "getPOOL_edit_4()", "f72d53ba": "getNumMatches()", +"f72d5426": "UpdateTokenInfos(bytes32[],address[],uint256[],bool[])", +"f72d9876": "payment(address,uint40)", "f72db5a3": "getLLV_edit_8()", "f72e460a": "getBUUU(bytes32,uint256,uint256)", "f72e695b": "setPoolCut(uint256)", "f72f30e1": "Vesting(address)", "f72f34db": "getDCountedBasicBallotsN(bytes32)", +"f72f43bb": "updateAsset(address,address)", +"f72f4ef2": "testETHtoToken1()", "f72f6826": "ChangeEnd(uint256)", "f72fc599": "_isThereAnOnGoingTapProposal()", "f73052e8": "totalSoldCount()", +"f7306fa8": "redeemFreeDoc(address,uint256)", "f73079a6": "Auto(address,string)", +"f73082ce": "getKyberRate(uint256)", "f73089b9": "sale2Stopped()", +"f73096b8": "confirmLeaf(bytes32,bytes32[])", "f7309f29": "testLedgerUnderPayback()", +"f730c07f": "lastApprovalTime()", +"f7315b89": "withdrawToSeller(uint256)", +"f731a6f7": "airdropDoneList(uint256)", "f731c3bd": "lotteries(uint32)", "f731d33c": "ApzCoin()", +"f731e470": "proposeToRemoveGC(address,address)", "f7326286": "getARInvIndexTable()", "f73294b8": "isValidatorAlreadyVoted(address,address)", +"f732abac": "safePizzaTransfer(address,uint256)", +"f732e021": "getExchangeStake()", "f732eb66": "getPayoutDenominator()", +"f732f1c9": "saleRate(uint256,uint256,uint32,uint256)", +"f7333600": "changeMiner(address)", +"f7339292": "depositTRC721(address,uint256)", +"f733a516": "harvestToLP(uint256,uint256,address)", "f7342cd3": "SGF()", +"f734857e": "maxSnail()", +"f734d4a0": "getTaxTokenAddress()", +"f735129c": "updateRootAndTime(bytes32,uint256)", +"f73565c5": "userSignUp(bytes32)", +"f735d695": "get_stakedDays(address)", "f7362152": "testThrow_testableContributionCaseExpectFailure()", +"f736986f": "balancesAtm(address)", +"f7370e8b": "rewardfee()", +"f7372586": "proxiedUseFlashLoan(address,uint256,uint256,bytes)", "f73770e7": "is_contract_paused()", +"f7379741": "repayEth(address)", +"f737aea6": "hasSDC(address,uint256)", +"f737d21d": "pickWinner(uint256)", +"f737e357": "_SolveQuadraticFunctionForTarget(uint256,uint256,uint256,uint256)", "f737f274": "getBuyDemand(uint256)", "f73857cc": "deauthorizeAddress(address)", "f738e5ca": "ownerTakeProfit()", +"f739008d": "Top3VDVHoanThanhSomNhatTheoCuLy(uint8)", +"f739455b": "totalAvailableRewards(address)", +"f73997b5": "tokenIssuedReserve()", "f739a501": "snapShot(uint256,address)", "f739ba2f": "picops_withdraw_excess()", "f739c261": "legendary()", "f739ed4c": "id_for_user_version(uint256,uint256)", +"f73a3d1f": "hasSellerApproved()", "f73a590c": "distributed_team()", +"f73a6861": "updateUser(uint256,string,string,uint256)", +"f73b25a2": "promotePlayer_SideA(address)", "f73b5541": "bulkWhitelist(address[])", +"f73b9f22": "disableGroup(uint256)", "f73baf62": "proxy_initialization()", +"f73bda72": "MAX_PREMINE()", "f73c30e3": "getESOP()", +"f73c38e1": "drainBulk(uint256[])", +"f73c3c22": "AlgorithmUpdated(uint8,address)", +"f73c3db3": "startGameLength()", +"f73c8c9d": "getPortfolioNAVType(address,uint256,uint8)", "f73c8dfd": "pvpQueueSize()", "f73cc97c": "AddDOT(bytes)", "f73d05db": "getSha()", "f73d594c": "ERC20Base()", +"f73d79ee": "test_assignment()", "f73e05dd": "RetrieveCommissions()", +"f73ea036": "TASKCANCELLED()", "f73f4ebc": "processBuyRequest(string,address,uint256,uint256,bool)", +"f73fa2e5": "stakeAuthority()", +"f74009b9": "minIncomeRate()", +"f7402025": "totalOfToken()", "f74034df": "purchaseGen0Token(uint256)", "f7407178": "get_banlance(address)", "f740fbc9": "test_validPerc()", "f74100e3": "getBits(bytes)", +"f74116c2": "proposalDelegationMinimum()", "f741b602": "denyInvestor(address)", +"f741de90": "TRDpendingApproval()", "f742048b": "NlvToken(uint256,string,string)", "f7426b62": "unlock(bytes32,bytes,uint256[],bytes,bytes,bytes,uint256[],bytes,bytes)", "f74279b0": "totalEarning()", +"f7428789": "ConfirmationNeeded(bytes32,address,uint256,address)", +"f74326f9": "abundanceRatio(uint256)", +"f7434ccd": "emergenceTrigger(address,uint256,string,bytes)", "f7434ea9": "arbitrationCost(bytes)", "f7437384": "NucleusVisionAllocation()", "f743d334": "BancorBuy()", +"f743fd51": "yvsteCRV()", "f744538d": "submitClearingPrice(address,bytes32,uint256)", +"f7446dec": "enablePurchase(bool)", "f7448a31": "transferERC20(address,uint256)", +"f7454c60": "newSlotId_ap3()", "f745630f": "update(uint256,string)", +"f746b718": "setTreasuryFund(address)", "f746e28d": "fundSchool(uint256)", "f746f365": "icoSoldCap()", "f746fcdb": "presaleMade(string,uint256)", @@ -141777,156 +259413,292 @@ "f7477435": "TokensWorldCoin()", "f747a5eb": "auctionBid(bytes32)", "f747b744": "investFromWallet(uint256)", +"f74826bb": "updateRate(address)", +"f7488a74": "BecomeStarAngel(uint256)", "f749013e": "dateStartContract()", "f7493c6a": "UpdatePremiumLimit(uint256,uint256)", "f749bdc1": "BUYER_CHECK_STEP(bytes32)", "f749d980": "LastExecuted()", "f74a4e63": "transferToMint(uint256)", +"f74ac2a6": "killGame(uint256)", +"f74b020c": "removeAuthorizationAndModify(address,address,bytes32,uint256)", +"f74b1188": "MigrateCallFailedError(address,bytes)", +"f74b51b3": "stakeBtc(uint256)", "f74b766a": "createBet(uint256,uint256,uint256,bool,string)", +"f74bc736": "mineMint(uint256,address)", +"f74bc8f4": "_vote(uint256,bool,address,bool)", +"f74bc9d6": "addBeneficiary(address,uint256,uint256)", +"f74bdf72": "getProdId(uint256)", +"f74bfc10": "ScriptApproved(address)", +"f74bfe8e": "mint(address,uint256,uint256,address)", "f74c67b3": "getAddressKYCState(address)", "f74c753f": "dontReturn()", +"f74d1e76": "spacePerBlock()", +"f74d2997": "SelfHybridization(uint256,uint256,uint256,uint256)", "f74d73ec": "issueSertificate(address,address)", +"f74d8e32": "hash32()", "f74deae3": "MultiSigWallet(address,string,uint256,uint256,string)", +"f74e02fd": "_getSalt(uint256,address)", +"f74e534c": "initializeAdapters(address[])", "f74e8655": "setWhitelistAgent(address,bool)", "f74e9bde": "pwr(uint256,uint256)", "f74f4702": "changeRequiredMajor(uint256,bool,bytes)", "f74fbb47": "StateChanged(bool)", "f74fc598": "listSharesForSale(uint256,uint256)", +"f7501d46": "batchCancelOption(address,uint256[],uint256[])", +"f7505bc0": "_setFeeDecimals(uint256)", +"f75071c2": "ContractIncreaseEach()", +"f75091be": "initMigratingData(address,address[])", "f750aaa6": "withdrawEverything(address)", +"f7514bce": "fullRefund(address,uint256)", +"f7515b9a": "computeAddress(address,address,bytes32)", "f75165c6": "right22(uint256)", "f751758b": "getCurrentTokenPrice()", +"f75195bc": "percentDecimals()", "f751b26a": "unclaimedRoyalty()", "f751c2f5": "MAC()", "f751cd8f": "drop()", +"f7522af6": "liabilities(address,uint256)", "f752644c": "aelfCommunityMultisig()", +"f752db09": "NameChanged()", "f752fdc3": "wdivide(uint256,uint256)", "f75316b4": "CobinhoodToken()", +"f754672d": "UpdatevictimAddress(address)", "f754f766": "setBonus(uint8,uint8,uint8,uint8)", +"f7551d00": "smokerization(bool)", "f7553098": "voteForOutcome(int256,uint256)", "f755a76e": "createBoard(bytes32)", "f755a98b": "setCrowdsaleEndBlock(uint256)", +"f755d8c3": "claimAndRestake()", +"f755dad4": "tokenTransfer(uint256)", +"f7562c67": "setAllowedChangeSex(uint32,bool)", +"f7563990": "Added(address,bytes32,bytes8,bytes)", "f75640b3": "crowdsaleCanceled()", "f7566b49": "getBet(address)", "f756b574": "getDropAmount()", +"f756bc68": "allocateEntryFromEntry(bytes32,bytes32,bytes32,uint256)", +"f756d6dc": "getMissedBlock()", "f7572cf3": "newCampaign(address,uint256)", "f757342c": "setRewardWasSent(address)", +"f7577d9e": "buyLoft(uint256[5],uint256)", +"f758ceab": "sex()", "f758ff59": "SentDeveloperFee(uint256,uint256)", +"f75951ce": "getVoucherHolder(uint256)", "f759c480": "balanceOfrun(address)", "f759e298": "getNumberOfBlocksPerKick()", +"f75a0ee1": "max_withdrawl_allowed()", "f75a275b": "reservedLPT()", +"f75a8884": "coreCover(address)", +"f75aba95": "salesMap(uint256,uint256)", +"f75adcd1": "setCurrentThreshold(uint256)", +"f75af97f": "rebalanceState()", +"f75b22cd": "setTokenSaleStartTime(uint256)", "f75b8d3c": "getExpiredCratesForUser(address)", "f75beacf": "HuaTuo()", +"f75c2664": "mpc()", +"f75cc198": "getEthozSent()", "f75ccbf0": "checkErrors(bytes32)", +"f75ce5d4": "stakedContractCurrentBurnIndex(address)", "f75cf7d5": "IndecoinBounty()", +"f75d0393": "setSupplyAddress(address)", "f75d34bb": "ICOChanged(address)", +"f75d5c87": "TokensDistributed(address,uint256,uint256)", +"f75d819a": "viewSalenETH()", +"f75decd2": "ssendback()", "f75e5d85": "selfDestruct(uint8,bytes32,bytes32)", +"f75ea242": "collateralETH()", "f75eb240": "removeCallSpenderWhitelist(address)", "f75ec528": "getSpaceInfo(uint256)", +"f75f9f7b": "dispute(address)", "f75fa5e1": "xorReduce(bytes32[],uint256)", "f75fb878": "preICOwei()", "f75fdcaa": "cancelMilestone(uint256)", +"f75ff6a4": "mintGasToken(uint256)", +"f760959e": "safeSub128(uint128,uint128)", +"f760b6cb": "newFPS(string)", "f760d2a2": "_incrementBlockStats(bytes16,uint8)", +"f760f228": "setPersonalCap(uint256)", +"f7612c4d": "miaFinishedWorkout(uint32)", +"f7613fb1": "callSpenderWhitelist(address)", "f761720a": "isEquiped(address,uint256)", +"f7617774": "Purchased(address,uint256,uint256)", "f7618a40": "LIMIT_PROMO()", "f7620435": "inquire_length(uint256)", +"f7620b16": "BEES_MONTHLY_PERCENTS(uint256)", "f7627da2": "startUnlimitedSale(uint256)", "f7628949": "B2ANDcoin()", "f762e147": "addAsset(uint256,uint256,bytes)", +"f7631f3f": "delayLockValues(address)", +"f76339dc": "latestRoundID()", "f7637bec": "AccountReaderRemoved(address,address)", +"f763fbe8": "setWalletBonus(address)", "f764531d": "saleStartAtBlock()", +"f7646048": "ConverterOwned(address,address)", "f7647f36": "acceptPurchase(uint256,uint256)", +"f76488be": "isGlobalConstraintRegistered(address,address)", "f764e8a0": "partPos()", "f764eb93": "LogDepositForDividend(uint256,uint256)", "f765088f": "UpdateClientAddress(address)", +"f76514c7": "isContainerForReportingParticipant(address)", "f7654176": "split()", "f76543e9": "hasOpening()", +"f7658601": "setFakePriceETH(int256)", "f7658e0f": "bonusDecreaseDay()", "f765b6b1": "getEventInfo(bytes32)", "f765e6e4": "return_pause()", "f765ec6f": "lastBlock_a11Hash_uint256()", "f766658d": "finalizePreIcoDate()", "f76692a6": "dtTestCitySnapshot(address,uint256)", +"f766a781": "getRefRate(uint256)", "f766cd3e": "minInvestorCap()", "f766eca7": "EtherDeltaApproveToken(address,uint256)", "f7670b0c": "updateAuth(address,address,bool)", +"f7676b69": "StockCancelSellOrder(uint256,uint256)", "f7678fda": "setNewRegister(string,string,uint256)", +"f767d85f": "ST1OPB(address,address,uint256,uint256,uint256)", "f767fdcf": "KRYPT()", "f767fe97": "MarketingAddr()", +"f7680ac3": "investInEthereumMoney(address)", "f7682aa5": "CURVE_CUTOFF_DURATION()", "f7683b37": "ETTCE()", +"f7683bbc": "getCollateralPrice()", "f768402a": "addProduct(address,string,string,uint256,string)", "f768923a": "ignite()", "f768f0f5": "setTrustValue(uint256,uint256)", +"f769046f": "teamShare(address)", +"f7693b02": "originalJoyOwner(uint256)", "f769aeb2": "getNextPoliceAssignment()", "f76a24e6": "isTesting(uint16)", +"f76a49cd": "safeDcashTransfer(address,uint256)", +"f76a785a": "COREVaultAddress()", "f76aae2f": "addVerifiedAddress(address)", +"f76b10e0": "getPrivateReleasable()", +"f76b7272": "sendchal(address,uint256)", "f76b8c5e": "destinationOf(uint256)", +"f76b8fe2": "investedAt(address)", "f76bd7d1": "disableIssuance()", "f76bf292": "StormToken(address)", "f76bf757": "registerPage(bytes8,string,bytes32,string)", "f76c0f4e": "updateFlipTokenRewardAmount(uint256)", "f76c1ea5": "setReceiptLiablity(address,address)", +"f76c6f67": "dualFees(uint256)", "f76c84eb": "manualChangeMonth(uint256)", "f76c906b": "mCurrentSnapshotId()", +"f76c9229": "executions(uint256)", +"f76cb1d9": "sellAmount(address)", "f76ce123": "ERC20Template()", "f76cf4bf": "BiToro()", +"f76cfefb": "createBountyChest()", +"f76d13b4": "discardDecayPeriodVote()", "f76d270e": "_setTokenBudget(address,uint256)", "f76d3569": "auditorDelegate()", +"f76d39b6": "makeOrder(uint128[7],uint128[7],address[4],uint8[2],bytes32[4])", "f76e8d29": "createSplitAgreement(address,address,address)", "f76e9183": "VitalSkin()", +"f76eae39": "mmPoolId()", +"f76f2256": "requestHashStorage()", +"f76f742d": "mktbdIssue(address)", "f76f8d78": "SYMBOL()", "f76f950e": "uint2str(uint256)", +"f76fc35e": "MINT_TYPEHASH()", "f76ffe7a": "startMintingData()", "f77014da": "setGVE(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", "f7701b47": "downloadPriceInWei()", "f7701ce8": "batchDistribute(address[],uint256)", +"f7705f16": "completeFundSetupFor(address)", "f770a865": "FaradCryptoken()", "f770c96f": "TDESupply()", "f771bc6b": "minerSaleCount()", +"f771cb65": "sellingEnabled()", +"f771fc87": "stopAuctions(uint256)", "f772547b": "addressToSubscriptions(address,uint256)", +"f77255fb": "get30DaysReturnPercentForETH()", "f77267ea": "sendTokensToWorkers(uint8,uint8)", "f77282ab": "finalizeAuction()", +"f7729d43": "quoteExactInputSingle(address,address,uint24,uint256,uint160)", +"f7729fa8": "TokensPerEthUpdated(uint256)", +"f772a092": "balanceOfAt(address,uint128)", +"f772a10d": "details(address,address)", +"f773454e": "TIME_INCREMENT()", +"f77356f0": "__initialize__(address,string,string,address)", +"f7735f02": "setAinsophContract(address)", "f773a3fb": "maxAssignedRequests()", "f773ab80": "isPVPProvider()", "f773c770": "TMSYToken(address,address)", "f77404e5": "totalCommonWithdrawSupply()", +"f774351e": "distributeRedeemWpc(address,address,bool)", +"f7743ae9": "canOpen(address,uint256)", "f7745f88": "BudCoin()", "f7746e36": "cars(uint256)", "f7749e32": "rocketTimeUntilMoon(uint256)", "f7750bd5": "startEthGetToken()", +"f7752afe": "balanceInUniswapPair(address,address)", "f7759c84": "maxTokenSupplyPreICO()", +"f776667c": "CrowdSaleClosed(string,address)", "f7768580": "EventTransferAction(address,address,uint32,uint8)", +"f776caac": "setFactorLP(uint8)", "f7770906": "buy_energy_core(address,uint32,uint32,uint64,uint32,uint64)", +"f777a34e": "spriteOwners(address,uint256)", +"f77843dd": "cardInfo(uint256)", +"f7789c28": "preIcoContract()", +"f778b935": "Birth(uint256,string,uint256[],address)", "f778f32b": "addAlgo(uint256)", "f7791010": "approveWriter(uint256,address)", +"f779408b": "SeasonNone(uint32)", "f779a68d": "_deposit(address,address,uint256,bytes)", "f779abf7": "DaoUpgraded(address)", "f77a0923": "BitcoinProcessor(address)", +"f77a43d6": "initialize(bytes32,address[],uint256,uint256,uint256)", "f77a490d": "setMinPurchaseInWei(uint256)", +"f77a680e": "sampleNonpayable(uint256)", +"f77a950f": "getNodeIndexInGroup(bytes32,uint256)", "f77aa0ad": "changeRedTeamAddress(address)", "f77abd74": "getMatchPointsGroups(uint256,uint192)", +"f77ac668": "transact(address,uint256)", +"f77ad2c1": "claimbynum(uint256)", +"f77aefc7": "authorizedLogics(uint256)", "f77b1856": "getAddTokenData()", +"f77b3a17": "setAdjustment(address,uint256)", +"f77b62ac": "GoldBought(uint256,address,bytes32,string,string,string,string,string)", "f77b6f61": "getCRhashOfCRTokenId(address,uint256)", +"f77ba373": "getAccountHealth()", +"f77bc88b": "hasExpired(address)", +"f77c0c32": "updateTaxToken(address,uint8)", "f77c1dc6": "unknownInvestors(uint256)", "f77c4791": "controller()", "f77c4ff9": "_firstRoundFight()", "f77ca208": "managerIsPaused()", "f77d62f0": "roundNumber_()", "f77da6d5": "claimImmediateTokens(address)", +"f77dc090": "MultiTransferEvent(address,uint256)", "f77dc854": "setHookableTokenAddress(address)", +"f77df40a": "basePayable()", "f77dff06": "joinPillarWithEarnings(uint256,uint8,uint256)", "f77e4d8b": "test_YayIsNotOverSixtyPercent()", "f77e8b83": "addPlayer(string)", +"f77ee79d": "getSupply(uint256)", "f77f29b1": "getFeeWindow()", +"f77f2dbc": "claimMultiple(uint256[],bool)", "f77f2f2e": "setRewardStatus(address,bool)", +"f77f7a47": "deleverage()", +"f77f9498": "bDevVestingSupply()", "f7800e69": "fundVault()", "f780259e": "totalPrayers()", "f780d867": "add_coin(string,string,address,uint8)", "f7815fae": "getIntField2()", +"f7824bc7": "feesLPTokensForNode()", "f782b2ea": "_confirm(address)", +"f782d3f4": "discountFrom(address)", +"f7830cbb": "AddSupplier(address,bool)", +"f7833c5d": "getBytes32Value(bytes32,bytes32)", +"f783e11e": "availableForBucket(uint256)", +"f784a603": "totalFaasPools()", "f784cae5": "Fetish()", "f784dd61": "RealeaseTime()", "f78525a1": "getFaucetByName(string)", +"f7858e4e": "raresupply()", +"f785c659": "swapBNBToWBNB(address)", +"f785ccd0": "setRatio(uint256,uint256)", "f785ef72": "decimals_()", "f785f03d": "setMigrating(bool)", "f7860bb1": "addToBounty()", @@ -141936,42 +259708,69 @@ "f786becd": "MAJOR_VERSION()", "f786cb82": "updateLemontokensRemainingToDrop()", "f7870c5b": "Unlock(address,uint256,uint256)", +"f7872122": "Upgrade(address)", +"f787440d": "_encode_sol_int32(int32,uint256,bytes)", +"f7876ae6": "viewAirdropx()", "f7888aec": "balanceOf(address,address)", "f7892887": "phase_1_Time()", "f7899d9e": "_buyCommonTTM(uint256,uint256,address,address)", "f78a706a": "extraEmission(uint256)", "f78a7a55": "createBurnRequest(address,uint256,string)", +"f78b20c7": "approve_530(address,uint256)", +"f78b3952": "I_REBUY_THRESHOLD()", +"f78b9fd5": "jgtokenfanyongzhitui()", +"f78c19b9": "releaseLocker(uint256)", "f78c6b54": "donations(bytes32,uint256)", +"f78c80ee": "bidCreated(address,bytes32,uint256)", "f78cc9cf": "getTokenNextPrice(uint256)", "f78d1c6a": "managePID(uint256)", "f78d5494": "approveNewMintRequest()", "f78dd0c1": "MovieCoin(uint256,uint256)", +"f78e1bcb": "nCardGeneration(address[],uint256[],uint8,uint256[],uint8)", +"f78e2bf2": "fundSale(uint256)", "f78e4210": "test_oneValidEqAddress()", +"f78ec1f9": "expo(int256)", +"f78ec95a": "boardroomSecond()", "f78ed322": "regNameWOwner(string,address,address)", "f78fa141": "_uintToSPDStr(uint256)", "f78fadc6": "HXC()", "f78fe0e9": "stand(uint8[],bytes32,uint8[])", +"f78fe912": "advanceAndRedeemMax(address,uint256,uint256)", +"f7900e76": "elpBalances(address)", "f7903871": "RevTokens()", "f7908f00": "verifyTransaction()", "f79098f4": "getEditionLimits(uint256)", +"f79230ed": "getVoucherBalance(address)", +"f79243b3": "S222(address)", +"f792942e": "buyArtwork(uint256[6],address[2],uint8,bytes32[2])", +"f7929e44": "turnEmergencyWithdrawOn()", +"f792a56e": "distributionContract1()", "f793595a": "ThreeAT()", "f7935969": "getRank(address,uint256)", +"f7938328": "createOrder(address,uint8,uint256,uint256,address,uint256,bytes32,bytes32,bytes32)", +"f7938541": "CancelExchange(uint256)", +"f793c743": "calcLocked(address)", "f793fb64": "valInt()", "f794062e": "isListed(address)", +"f794077e": "usersAmount()", +"f7941ccf": "getHashByTxId(string)", "f79480f8": "lastBlock_f19Hash_uint256()", "f794e7f2": "addDefenceParts(uint8[])", "f794eb58": "getBonusRate()", +"f795491d": "CAKIFY()", "f7963e8a": "testNewCounterValueIszero()", "f7966eef": "changeReputation(address,int32)", "f7969147": "currentBurned()", "f796e06f": "calculateAndRegisterBonuses(uint256)", "f79710fd": "extraTokens(address,address,uint256)", +"f797a06a": "checkLockingAmountByAddress(address)", "f797ac0e": "addSellingItem(uint256,uint256,uint256)", "f797b617": "buyInvestorPack(uint256)", "f797f7b6": "ETH_SIGN_TYPED_DATA_ARGHASH()", "f7981bdd": "indSeed()", "f7982243": "addRecipient(address,uint256)", "f7987a03": "applySetMaxFeeWithdrawal()", +"f79891a9": "addSwapInfo(address[],uint256[])", "f798abce": "teamLockAddr()", "f79915ce": "kkTestICO91()", "f7992d85": "eta()", @@ -141980,57 +259779,102 @@ "f79a3c25": "voteForDisable()", "f79a97fc": "isSpentTxPaymentForMCW(bytes32)", "f79acad3": "approveInvestorsInBulk(address[])", +"f79add61": "MintVested(address,uint256)", +"f79b1466": "_registrationFeeRatio()", "f79b22e0": "betOnATeam(uint256)", +"f79b30b0": "endsecondround()", +"f79b36ad": "removeItem(bytes32,address)", +"f79b644c": "preICOdepositors(address)", +"f79be5ab": "b(string)", +"f79c5c7c": "buyFeePct()", "f79cfaea": "STLToken(string,string,uint8,uint256)", "f79d0a8b": "callSomeFunctionViaInner1()", +"f79d1d0b": "getIpfsFromToken(uint256)", "f79d6687": "removeTokenTime(uint256)", "f79dcf8d": "earliest_buy_time()", "f79e2b32": "inListAsOf(address,uint256)", +"f79e5450": "drivers(uint256)", +"f79e7354": "genesisReward()", "f79ea94d": "VoipToken()", "f79ebd7f": "tokenPriceDenom()", "f79ed94b": "reserveAddress()", +"f79f0d7d": "bytes32ToBytes(bytes32[])", "f79f528b": "getMinAuctionValue()", "f79fc70d": "testBaseStoreTokenUsingDeployedContract()", +"f79fe538": "recordExists(bytes32)", "f7a01b93": "StateMachine()", "f7a06a88": "setSellerGuarantee(bool,uint256)", "f7a0715f": "DoneToken()", "f7a084c0": "AIRDROP_START_AT()", "f7a0b2da": "updatePeloExtenstionContract(address)", +"f7a0c0ca": "getLotteryAmount(uint256)", "f7a0ee1c": "maxtokens()", "f7a0fa0a": "getShareDistribution(bytes)", +"f7a150de": "getGrotz(string)", +"f7a16963": "registerWithConfig(string,address,uint256,bytes32,address,address)", "f7a268c4": "freezeAccount(address,bool,bool)", +"f7a30806": "setPrice(int256)", "f7a33598": "round(uint256[4])", "f7a34573": "setAction(string,uint256)", +"f7a3cbc2": "TENS_LP_Token()", +"f7a40077": "Claimed(address,address,uint256)", "f7a40e99": "moveERC721Tokens(address,address,uint256)", "f7a4c45c": "calculateSaleReturn(uint256,uint256,uint8,uint256)", +"f7a4e737": "setMaintenanceStatus(bool)", +"f7a54c80": "getPoolLimit()", +"f7a64398": "longNightIndex()", +"f7a684da": "oldFstAddress()", "f7a6a046": "backOrenCoinOwner()", +"f7a6b563": "tokensToUnlock()", +"f7a6b6b6": "getSpotPrices(address,address[],address[])", "f7a7408b": "BuyLevel()", +"f7a79a37": "assetListedCount()", "f7a7ec12": "fund_color(address,address,uint256,uint256,uint256)", "f7a80784": "addProduct(string,uint8)", "f7a8b34d": "planetName(uint256,uint256,uint256)", +"f7a8c508": "getTotalEscrow(bytes32,address)", +"f7a91591": "_getMaxTxAmount()", "f7a919be": "createRegion(address[16],address,uint256,uint256,uint256,uint256)", +"f7a95a9e": "position(uint256)", +"f7a992a1": "getAllofBankBillsid(bytes32)", "f7a9a152": "count_users()", +"f7a9f6cf": "maxBurnDivisor()", +"f7aa42d1": "bonusTimeEnd()", "f7aa4e0e": "MithrilArrows()", +"f7aac7da": "registerAdapter(bool)", "f7aad9ed": "amendBalances(address[])", +"f7aaf024": "_VotingRightsGranted(uint256,address)", "f7ab6ec6": "getOfferingByProposal(address,uint8)", "f7abab9e": "tokenTotalSupply()", "f7ac5611": "pushStatus(string,uint256,uint256,int8)", "f7ac9c2e": "approvePreSignedHashing(address,address,uint256,uint256,uint256)", +"f7ace48d": "kingOfEthContract()", "f7ad51ce": "cardsKeys()", +"f7ad55d9": "getScByLevel(uint256)", +"f7ad7654": "NewPurchase(address,uint8,uint16,uint32)", "f7ad7d8f": "getAllowedAmountByTeam()", +"f7ad8a67": "setMVDFunctionalityProposalManagerAddress(address)", "f7ad906f": "contractTransfer(address,address,uint256)", "f7adc48f": "test3(uint256)", +"f7adf248": "foo1(address,uint256)", "f7ae24ae": "FundWithdrawal(address,uint256)", +"f7ae868e": "maxBProWithDiscount(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "f7ae9421": "checkInvestorBalance(address)", "f7aeea14": "removeGlobalConstraint(address,int256,address)", +"f7aef35f": "collectProductsInfoOver()", "f7af21c9": "cancelCrowdsale()", +"f7af5991": "LogOrderbookUpdated(address,address)", "f7af630b": "GetBindTokensAccountEvent(address,string)", +"f7afb2e1": "contributionCheck(address)", +"f7b00c9e": "redeemRebalancingSetUnwrappingEther(address,uint256,bool)", "f7b09d33": "giveReserveFund(address,uint256)", +"f7b10808": "properties(uint256)", "f7b14066": "setup(uint256,uint256,uint256,uint256,uint256,uint8,uint256,uint256,uint256,uint256)", "f7b188a5": "unPause()", "f7b22fa2": "getCurrentBeneficiaryCap()", "f7b28073": "moleculartechnology()", "f7b2a7be": "rewardAmount()", +"f7b31b39": "getStakedAmount_msgSender()", "f7b3ae2f": "getSwapData(bytes32)", "f7b42d08": "set_price_and_sell(uint256,uint256)", "f7b43abf": "PRESALE_ICO_PORTION()", @@ -142039,235 +259883,420 @@ "f7b4feec": "FaucetsToken()", "f7b53431": "feesTaken()", "f7b54065": "getInvestmentCurrentValue(address)", +"f7b557b2": "viewUserReInvestCount(address,uint8)", "f7b578ee": "LiveCoin()", +"f7b59acb": "satelliteTVL()", "f7b6302e": "getInvestorTokensPurchase(address,uint256)", +"f7b637bb": "isInitialized(bytes32)", +"f7b68175": "approve_794(address,uint256)", +"f7b6923e": "getPayoutForMultipleDays(uint256[],uint256,address)", "f7b75258": "withdrawlsEnabled()", "f7b77a21": "MasternodeRegistered(address,uint256)", +"f7b7dd33": "blocksUntilLaunch()", "f7b822db": "setDEditor(bytes32,address,bool)", "f7b89a3e": "getTotalCosts()", "f7b8a600": "payAltCoin(bytes32,uint256,bytes)", "f7b8eeb7": "getWhale(uint256)", +"f7b92e75": "approve_447(address,uint256)", "f7b92f34": "CandidToken()", "f7b95d35": "setRNGCallbackGas(uint256)", "f7ba8896": "random(uint256,uint256,address)", +"f7bad6c2": "creationDateOf(address)", "f7bada53": "randomChoiceFromticketPool()", +"f7bb495c": "cardDamageUpgradeLevel(uint256)", +"f7bb8415": "tcrs(uint256)", "f7bbd1c1": "setMinAcceptEther(uint256)", "f7bc2003": "releaseApprove(bytes32,uint8,bytes32,bytes32)", "f7bc39bf": "owns(address)", "f7bd2361": "LookAtBalance()", +"f7bd2c61": "registerSupportChainId(uint256)", +"f7bd41ac": "orbiLiqAddress()", +"f7bd5177": "transferFromAllSupplies(address,uint256,string)", +"f7bde1d0": "getLatestPriceXAU()", +"f7beabb3": "warIndex()", +"f7bf1e3d": "fulfillpresidentialWinners(bytes32,bytes32)", +"f7bf9a58": "changeUsdtPrice(uint256)", "f7c0085b": "changeRandomOrgAPIKey(string)", "f7c00e2f": "presaleWeiRaised()", "f7c07442": "getReferrals(address[])", "f7c0f4c6": "calculateRates()", "f7c0fa4a": "requireCorrectReceipt(uint256)", "f7c15df9": "_addExtraGasLimit()", +"f7c15ef9": "approve_60(address,uint256)", +"f7c1ec77": "getAave()", +"f7c2281c": "approve_249(address,uint256)", +"f7c2285f": "payhere()", "f7c2b38c": "seconds_left()", +"f7c30f14": "setTimeLock(address,uint256,uint256,uint256,uint256)", +"f7c32257": "userOrdersCount()", "f7c360e0": "fee_claimer()", +"f7c37ccd": "grantSigner()", "f7c38052": "createBuyOrder(address,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"f7c3865a": "AccountLocked(address,uint256)", +"f7c3a33b": "getAllowanceTarget()", "f7c3b210": "ENCKToken(uint256,string,uint8,string)", +"f7c3c74b": "PlugPreSaleBToken()", "f7c3ee7a": "immortality()", "f7c42ac8": "onChainIdentities(address)", "f7c45aa4": "sld(address,uint256,string)", "f7c46a73": "totalhospital()", +"f7c4e56f": "unsetTransactionFee(bytes32)", "f7c58b62": "weiPerEther()", "f7c5f4b6": "getPreICOBonus()", "f7c618c1": "rewardToken()", "f7c68ffb": "isReleasedOnce()", +"f7c710be": "refreshIdleSpeeds()", +"f7c7b111": "checkAllowedRestoreAccount(address,address)", +"f7c7bc47": "C3(bytes)", +"f7c817da": "setMaximumAmount(uint256)", "f7c824f1": "CombineCard(uint32)", "f7c8a091": "forPresale()", "f7c8af48": "destroyItem(uint256)", +"f7c8afb7": "isArgentWallet(address)", +"f7c8c3c7": "_setDController(address)", +"f7c8d221": "withdrawFund(address,uint256)", "f7c8d634": "tab(bytes32)", +"f7c9912d": "firstMenu()", +"f7c99bea": "dyDxMarketId()", "f7c9a7be": "drawTertiaryCWinners(uint256)", "f7c9afa2": "onlyOwnerGetAdvWallet()", "f7c9f1da": "setPonziPriceinWei(uint256)", "f7c9f74a": "insert_contribution(address,uint256)", +"f7ca3275": "getPrice3()", +"f7ca5387": "loadNewTokens(uint256[])", +"f7ca9ffd": "queue1(uint256)", "f7cab847": "getRule(bytes32)", +"f7cabe4a": "lastST_TXtime(address)", "f7cb5709": "CoinsLimitUnalterableInteger()", "f7cb789a": "roundDuration()", "f7cb8e66": "testIt()", "f7cbcb8f": "withdrawCrowdsaleOsherCoins()", +"f7cbe707": "HongchangAddress()", +"f7cc4c60": "poolRewardAddress()", "f7cc8c13": "MobSquads2()", "f7cc8f40": "nbBackerWithMoreOrEqualTen()", +"f7cc999f": "cachedPynthDebt(bytes32)", +"f7ccc184": "extendTime(uint256,uint256)", +"f7cd066e": "onlyAlerter()", +"f7cd3a6d": "_notImplemented()", "f7cdf47c": "ETHEREUM()", "f7ce25bb": "cardAndChecklistIdsForOwner(address)", "f7ce4479": "setCommunityAddress(address)", "f7cf0aa1": "updateMinBet(uint256)", "f7cf9a1c": "Create(address,uint256,address,string)", +"f7cfb684": "UnfreezeTokensFrom(address)", +"f7cfc71e": "generateAddUserRequestSchemaHash(bytes16,bytes32)", "f7cfd902": "removalBlackList(address)", +"f7d03bc0": "onsPriceLo()", "f7d08eae": "distributeReserveSupply(uint256,address)", "f7d0e04b": "setReputation(address)", +"f7d2d25f": "shr_1()", +"f7d2deb0": "ALLOWED_MAX_DECIMALS()", +"f7d372f1": "initPool(address)", "f7d4c7e3": "getBracketDataFinals()", "f7d518b5": "StartNewGame(string,string,string)", +"f7d57b81": "getPoolDuration()", "f7d5e485": "airdropToken(address[],uint256)", "f7d6dbe5": "UpgradeProposals()", "f7d7477b": "sumAmounts(uint256[])", +"f7d769f4": "uniswapHelperAddress()", +"f7d7a428": "getReservesRates(address,uint256)", "f7d8417d": "MYRED(uint256,string,uint8,string)", "f7d871df": "NucleusVisionAirDropTokensMinted(address,uint256)", +"f7d89c68": "convertToOld(uint256,address)", "f7d8c883": "breedWithAuto(uint256,uint256)", "f7d9078e": "mintToSpecialFund(address)", "f7d91cd4": "allocateReserveCompanyTokens()", +"f7d93633": "Payment(uint256,uint256,uint256)", "f7d97577": "setPrice(uint256,uint256)", "f7d978a2": "changeEntryFee(uint256)", "f7d9a5ae": "BtcToken()", +"f7da8c1b": "getHowMuchToClaimForSellers(address,address)", "f7dadf7d": "setBurnFormula(address)", "f7daef72": "getIndexBatchByUsername(bytes20[])", +"f7db65c3": "get_user_weight()", "f7db7348": "preapprove(address,uint256,uint256,uint16)", +"f7db86d3": "ValidaCert(string,string)", "f7dba1dc": "nullifyProduct(bytes32)", "f7dc0455": "transferInitialAllocation(address,uint256)", "f7dc909b": "createNewEvent(bytes32,string,string,uint256,string,string)", "f7dd2e28": "BAG_TRANSFER_MINIMUM_AMOUNT_OF_BUYS()", +"f7dd57b0": "TUNNEL_MINT_FEE_RATE()", +"f7ddab95": "feeTypes(uint256)", "f7ddfb4b": "meltingContract()", +"f7de51a0": "ResellingAdded(address,uint256)", "f7decfd1": "blacklistSwitch()", "f7defe8c": "pickTheWinner()", +"f7df5073": "resetStakeTimeDebug(address,uint256,uint256)", "f7df8f87": "vestingFounderAddress()", +"f7dff170": "draw(uint256,uint256,bool)", "f7e0bc92": "COLOR_CUSTOM()", "f7e0e743": "removeFirstAdvisorLock(address)", +"f7e1d2be": "lastFinishedIndex()", +"f7e1d978": "getticketNumberByAddress(uint256,address)", +"f7e20925": "addDac(string,string,uint64,string,string)", "f7e23677": "catAttributes(uint256,uint256)", "f7e23778": "PresaleEnd(uint256)", +"f7e251f8": "getPoolSize(uint128)", "f7e28f8b": "weiRaisedAfterDiscountRounds()", "f7e2ed66": "mOnTransfer(address,address,uint256)", "f7e2ff00": "userWithdrawalStartTime()", +"f7e3a5b1": "disableQuickSell()", "f7e3c068": "PrestigeUp()", +"f7e3d5a0": "chievs(uint256)", "f7e3f00e": "PUBLIC_SALES_2_RATE()", +"f7e41aad": "burnForEth(uint32)", "f7e42647": "updateTrustRank(uint256)", "f7e498f6": "verifyProof(bytes32,bytes,bytes,uint256,bytes32[])", "f7e4a4a9": "hardCapPreSale()", "f7e502cb": "HALToken()", +"f7e54c99": "assetTransfer(address)", +"f7e576f4": "createStrategyDeposit(uint256,uint256,address,bool)", "f7e5951e": "_calcRemainReward()", "f7e6af80": "_getOwner()", +"f7e6d148": "startPrizeValue()", "f7e74e65": "updateEmployee(uint256,uint256,string)", "f7e77e44": "releaseMyVestedTokens()", "f7e78e78": "verifyDeal(bytes32,bytes)", "f7e7d6d8": "Noscam()", "f7e80582": "enableAutoReinvest(uint256)", +"f7e80e98": "modules()", "f7e83aee": "verify(bytes,bytes)", +"f7e91994": "addBalanceERC20(uint64)", "f7e95364": "updateGuMasks(uint256,uint256,uint256)", +"f7e98537": "IncreaseTotalSupply(uint256)", "f7e98d15": "YELLOWLAMBO()", +"f7e99aae": "changeLimitTime(uint256)", +"f7e9ead9": "userTempBetValue(bytes32)", +"f7ea117e": "SAFE_DISTRIBUTE_NUMBER()", +"f7ea370d": "proposedNewAdmin()", +"f7ea4adc": "abondDebt()", +"f7ea6432": "calculateL2ERC20Address(address)", "f7ea7a3d": "setTotalSupply(uint256)", +"f7ea98c4": "lpLock()", +"f7eab9bd": "depositCompound()", "f7ead092": "totalWinAmount()", "f7eaec4f": "removeAgent(address,uint256)", +"f7eaec7d": "referalPercent()", +"f7eaee19": "certifiedAccounts(address)", +"f7eb19e6": "contractOwnsTokens()", "f7eb4017": "findAddressByEndpoint(int256,string)", "f7ebc39a": "isTransferAllowed(address,address,uint256)", "f7ec221e": "authorizedToDraw()", "f7ec2f35": "isContract()", "f7ec7b51": "create_new_deal(uint32,uint256,uint32)", +"f7ecb0cd": "bornOwnerWerewolf(address,string)", +"f7ecbbe3": "deliverTokensInRatioOfRange(uint256,uint256,uint256,uint256)", "f7ecc428": "mintForInvestor(address,uint256)", +"f7ed1a56": "retailersAddress()", +"f7ed2d34": "_transferableBalance(address,uint256)", "f7ed6031": "getRoundDividendShare()", "f7ed71d0": "left40(uint256)", "f7edbbe6": "nextLapId()", +"f7ee25f1": "edgexTokenContract()", "f7ee503e": "editTicketPrice(uint256)", +"f7ef382e": "proposalsVoted()", "f7efd150": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", "f7efd408": "votesIter(uint256)", "f7f03516": "EasyHashingCoin()", +"f7f05b9b": "assignSpToStrength(uint256,uint256)", +"f7f0b4d6": "nftLocked(uint256)", +"f7f14839": "defaultLifeTime(uint256)", "f7f15304": "ARCD_FUND()", "f7f1962e": "firstAuctionsInitialDuration()", +"f7f1cc5d": "setFounder(uint8,address)", "f7f20cb3": "getTournaments()", "f7f2210c": "openBetIndex()", +"f7f2419b": "_calculatePaycheckForTM(uint256)", "f7f2741c": "AFTCoin()", +"f7f280bf": "transfer2(string)", +"f7f2ff74": "max_managers()", "f7f32916": "computeTokenWithBonus(uint256)", "f7f33c54": "CriptaliaRewards()", "f7f3815c": "setOperation(address)", +"f7f38f76": "cancelLaoProposal(uint256)", "f7f3ad16": "FixBet51()", "f7f3da3b": "TestContractOne()", +"f7f460c7": "addVault(address,address,address)", "f7f4b9d4": "saleEnd1()", +"f7f4bf5d": "preSignMsg(bytes32)", +"f7f5070c": "pawnBalanceInUsd(uint256)", "f7f50faa": "chunksAlreadyVested()", +"f7f53904": "choosePils(uint256,uint8)", "f7f5886e": "initializeS4FE(address)", "f7f59411": "purchaseExistent(uint256)", "f7f59b0f": "LogCustomerVerified(address,address,uint8)", +"f7f61565": "farmingFee()", "f7f6d4da": "GreenEarthEconomyFund()", "f7f74b56": "closeVoring()", "f7f7915d": "setNextRoundFee(uint32)", "f7f8303b": "product1_sell()", +"f7f8389c": "LockedAmountIncreased(uint256)", +"f7f84ec4": "ecdsaRewardsDistributor()", +"f7f85560": "rk()", "f7f87361": "DepositProxy(address,address)", +"f7f898b0": "repayAllDebt(address,address,uint256)", "f7f8aae9": "SudoEnabled(bool)", +"f7f8fd37": "blocksCreated(uint256,address)", +"f7f9ad63": "setHandlerDataStorage(address)", "f7f9cb1c": "wrappedContract()", "f7fad9fc": "UpdateState(uint256)", "f7fb07b0": "getCurrentRate()", +"f7fb0a4b": "AddPlayers(address)", "f7fb4801": "firstRoundWMEnd()", +"f7fb869b": "pauserAddress()", "f7fc1bd6": "PROMETHEUS_SHIP_PRICE()", +"f7fc667e": "CutsPaidInfos(uint256,uint256,address,address,address)", "f7fc7783": "SanityPricing(address)", "f7fc8a91": "haveShelf(string)", "f7fca4f4": "setFeeFormula(address)", "f7fca8d3": "ratePublicSale()", +"f7fcd384": "sellToLiquidityProvider(address,address,address,address,uint256,uint256,bytes)", "f7fce4da": "raffle_addr()", +"f7fd2cfa": "advanceTime(uint32)", "f7fd2e19": "TCoin()", "f7fd3d01": "releaseCarbonDollar(uint256)", +"f7fd7849": "betLog(bytes32,address,uint256,uint256,uint256)", +"f7fdec28": "genesisStartOnce()", "f7fe2e32": "newBurnableOpenPayment(address,uint256,uint256,string,string)", "f7fe3477": "assertEq(bool,bool)", +"f7fe5510": "update(uint32,int24,uint128)", +"f7fe5789": "getLastEnsuredTermId()", "f7fe6f39": "fibo()", +"f7fee7e0": "setAdditionalKey(address,address,bytes)", "f7feeb31": "amendEntry(uint256,bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"f7ff18d9": "addInfo(address,uint256,uint256,uint256)", "f7ff50e2": "transaction_count()", +"f7ffa29f": "MAX_SIMULTANEOUS_BETS()", "f7ffaa5b": "ExTokeA()", "f7ffbd85": "amountRemaining()", "f7ffc366": "executeRulingB(uint256)", +"f8000ca1": "viewSumEther(uint256,uint256)", +"f8008776": "startGovernanceChange(address)", +"f800d6a0": "lpExChange()", +"f8011fad": "setClose(bool)", "f80176ab": "GetEthereum(address,uint256)", "f8018a79": "prepend(address,address)", +"f801a792": "_pauseSale()", "f801fae9": "_fCancelDist()", "f802075f": "requiredEndowment()", +"f8023eb3": "isLockedForGV(address)", "f8024d10": "getMemberAtIndex(uint256)", +"f8025049": "sendMoney(address,uint256,bytes)", +"f80322fd": "mintEnvelope(address)", "f80334ae": "selfDestruction()", +"f803445c": "addContractToTokenFallbackWhiteList(address)", "f803bef0": "forceUpdateWinners(address[])", +"f803f436": "_optionalProxy_onlyOwner()", "f803f97e": "transferAUTOtokens5(address[])", +"f8044cbf": "getKeyRingUpgradeBeacon()", +"f8046553": "getDscoring()", +"f80517da": "Cards_list(uint256)", "f8058bdf": "_CROWDSALE_PAUSED()", "f805b300": "SALE_4WEEK_BONUS()", +"f805b83c": "totalHNYContributed()", "f8065ed6": "setStopMatchBetting()", +"f8075633": "setData(uint256,uint256,string)", +"f8077fae": "lastRewardTimestamp()", +"f807c468": "recieveReward()", "f8083bab": "simulatedWithdrawal(address,address)", "f8085c58": "updateStakerRanking(address)", "f80979d6": "isPreSalePeriod(uint256)", +"f809ab43": "tournamentId()", "f809c826": "managerToFunds(address)", +"f809f205": "populate()", +"f80a598d": "transBurnrate()", "f80af907": "roundThreeAmount()", +"f80b25fb": "getMaxDrawdown(address,address,uint256,uint256,uint256)", +"f80b2cf6": "heroClaimed()", "f80b3564": "returnAddress(bytes32,uint8,bytes32[2])", "f80b3cfa": "checkBetLowhigh(uint8)", +"f80ba441": "WriteLog(bytes32)", "f80bb2a7": "activateSubRound(uint256)", "f80bbedc": "ethToToken(uint256,uint256)", +"f80bc614": "priceToStrikePrices(uint256,uint256)", +"f80c0807": "redeemTokenCollateral(address,address,bytes32,uint256)", +"f80cd7ef": "addWhiteListedAddress(address,uint256)", +"f80d45d8": "exitAndRemoveLiquidity(address,address,address,uint256[2])", "f80d6e90": "GPHToken()", "f80d9e58": "PVE_BATTLE()", "f80db825": "AffiliateCoinMultiSigWallet()", "f80dfdc2": "getTmpWriteTimestamp(bytes32)", +"f80e0575": "rebuy(address,bytes32,uint256)", +"f80e10c5": "approve_377(address,uint256)", "f80e77d2": "updateETHNZD(uint256)", "f80ea517": "getDealerInfo(string)", "f80eba7c": "getTrapid(uint256,uint8)", +"f80ed2d1": "decrypt(string)", +"f80f12f8": "contractAdmins(address)", "f80f44f3": "right97(uint256)", "f80f4ea8": "mintAdminApproval(address,address,uint256)", "f80f5d4a": "EightteenToken()", "f80f5dd5": "addWhitelist(address)", "f80f96f6": "returnGanaBeforeSale(address)", "f80fb7ae": "addCET4To(address,uint32,uint32)", +"f8111dbe": "sendFreeCoin(uint256)", "f81126a7": "periodICOStage3()", "f8115814": "TOKToken()", "f8115891": "getSatTokensOwed(address)", +"f8119d51": "MAX_NUMBER_RESERVES()", +"f811d692": "_I_()", +"f812033f": "construct(address)", "f8125093": "set_devcon_map()", "f8129cd2": "send(address,address[],uint256[])", +"f812b6c5": "safeRastaTransfer(address,uint256)", "f812f423": "advanceEndTime(uint256)", "f8132b66": "lockCycle()", "f813f027": "requestedTokens()", "f813fcfa": "changeFooIntArrayDynamicSize(uint256)", "f8140a7e": "standardFee()", +"f8144673": "RandomRequested(uint256)", "f814530b": "_allocateETH(uint8,bool)", "f8147d67": "callTest(uint256,address)", "f81501f8": "smartContractPriceIsSet(uint256)", +"f8156a6e": "totalValidatorPower()", "f815a842": "_getETHBalance()", +"f815ada4": "withdrawFrax(address,uint256)", +"f815c03d": "vault(address)", "f815e6ab": "kdtFundDeposit()", +"f816c0fa": "refillGasReserve(uint256)", "f816f0aa": "gameCancelled(uint256)", +"f816fa91": "MOLStakerContract()", +"f8173f4d": "initialize(string,address,address,address,uint256,uint256,uint256)", +"f8178383": "regByID(uint256)", +"f8180c3d": "directBonusBalance(address)", +"f8184f73": "msgvalue()", +"f8185702": "getIDs(address)", "f8185a13": "getBatches(address)", "f818d723": "transferPower(address)", "f8193547": "transferAndExecute(address,uint256,string,string)", +"f81a0f35": "COUNTRY_NAMES(uint256)", "f81a1860": "killOnUnsupportedFork()", +"f81a5164": "newPrice(int256,int256)", "f81a95db": "setReferrerFee(uint256)", "f81b1998": "StopTransferGuard(address[])", +"f81b1d2e": "NewLand(address,uint256)", +"f81b660e": "setFeeDiscountFrom(address,uint256)", "f81bfa3f": "killThisContract()", +"f81cbd26": "quorumPercent()", "f81d0292": "setParentAddress(address,address)", "f81d087d": "prepareLottery()", "f81d29df": "GambangCoin()", +"f81d6377": "ACX()", +"f81d6d32": "minimumProposalPeriod()", "f81dc03f": "QuizwinToken()", "f81de228": "getInvestorPacksAvailable()", "f81dee03": "set_koef(uint256)", "f81e8775": "resolveAddress(address)", "f81ed6ae": "updateStart(uint256)", +"f81f170b": "ad2()", "f81f8101": "initializedTime()", "f81f8bf6": "burnReputation(uint256,address,bytes32)", +"f81fd136": "GetMyBalanc()", "f81ff8e7": "CurrentCoinPrice()", "f8201a32": "requestLoan(uint128,address,address,address,uint256,uint64,bytes)", +"f8210769": "setMinPeriod(uint256)", +"f8214843": "setDepositMinTrc10(uint256)", "f821a17c": "getVotingNetworkDetails()", "f821c423": "sendAirdrops(address[],uint256[])", "f822372e": "Lab51TestToken()", @@ -142276,57 +260305,110 @@ "f822841e": "PropertySet(address,bytes32,bytes32)", "f8228f14": "assignSpartansToBattle(uint256)", "f8229eba": "addAuthByCode(string,string,string)", +"f822c284": "claimFnxExpiredReward()", +"f824006a": "updateAndClaim()", "f8241d7e": "updateAddresses(bytes32[],address[])", "f8242c32": "addChallenge(address)", "f824384a": "addInvestorAtID(uint256)", +"f824673b": "spaceAvailable(address)", +"f82470a8": "unclockAddressDuringITO(address)", "f8247299": "getIudexScoreAll(address,address)", +"f82539a5": "bscx()", "f8256121": "publicResolver()", +"f82577a2": "modExt(uint64,uint64)", +"f825d323": "createLimitOrder(string,uint256,uint256,uint8)", +"f825d668": "changeReserveAvailable(uint256)", +"f8261827": "MODULE_LTOKEN()", "f8264772": "getTokenss()", +"f8266a7a": "ascendOrderList(uint8,uint256,bytes32)", +"f826c035": "look(address)", +"f827636d": "approve_209(address,uint256)", +"f827d4a7": "marketBuyOrdersFillOrKill(uint256,bytes[])", "f828500d": "isValidMessageLength(string)", "f828c3fa": "scheduleCall(address,bytes4,bytes32,uint256)", "f828edbe": "excludeWallet(address,bool)", +"f828f50b": "totalSupplyAmount()", +"f829d034": "pricePadding()", "f829d1a0": "walletSplitPercentage()", +"f82a3d6f": "maxTotalValue()", "f82a4707": "secondsBetweenMints()", +"f82a622f": "setBCStakingProxyAddr(address)", "f82a7496": "giveMeCDP(uint256)", +"f82a841e": "ROLE_ANNOUNCE()", +"f82a9467": "RequestConfirmed(uint256)", +"f82aa3c8": "CrowdsaleOpen(uint256)", "f82ab2ec": "PRIVATE_SALE_PRICE()", +"f82ae648": "BUSDBNBPrice1CumulativeLast()", +"f82b1c19": "_pendingClaimAddress(address)", "f82b2c31": "confirmByC(uint256,string)", +"f82be311": "stopSettingRewards()", +"f82befb4": "channelProtocol(uint64)", "f82bffa0": "get_merkle_proof(uint256)", "f82c09a3": "PresentToCEO()", "f82c2301": "resignFromCommunity()", "f82c50f1": "log(uint256)", +"f82c640a": "callVaultManager(bytes)", +"f82ce27d": "getAaveCore()", "f82de7b0": "mineBlocks(uint256)", +"f82e0e6a": "setEpochEndBlock(uint256,uint256)", "f82e4a4f": "Cointum(address,address,address,uint256,uint256,uint256)", "f82ec3e6": "Norm()", +"f82edad0": "Lollipop()", "f82edc1b": "unSign(address,address)", +"f82edfc5": "price10_6()", +"f82ef696": "refundExcessProtocolFeeToSender(uint256)", "f82f396f": "sha(string,string)", +"f82f48e7": "windrawpercet(uint256)", "f82f7a4b": "startDepositExit(uint256,address,uint256)", "f82fb363": "icoController(address)", "f82fe152": "PLAYER_METADATA()", +"f83009ba": "getHealthRecordsForDoctor(address)", +"f83036f0": "setupControlToken(uint256,string,int256[],int256[],int256[],int256,address[])", +"f8305afd": "getUniq32()", "f83064c7": "transferMintship(address)", "f830c325": "updateToken(string,string)", "f830d489": "depositExit(uint256,bytes32,bytes,bytes)", +"f8315bb6": "setDouYeaTransferFeeAddress(address)", "f83186f5": "HoryouToken()", "f831aee6": "kingdomCreationFeeInFinney()", "f831e962": "getWebStats()", "f831ebab": "freezeTokens(address,uint256,uint256)", "f831fe32": "updateApp(string,address,uint256,bool)", +"f832309b": "setRole(address,string)", +"f8326a5e": "getRating(string)", +"f8328991": "publicLockAddress()", "f833061b": "RESELLING_LOCKUP_PERIOD()", "f8333e0e": "Aramco()", +"f83345ff": "bakeToLp0Route(uint256)", +"f83354c4": "changePriceSanityContract(address,address,address)", +"f8337997": "WhoIsTheOwner()", "f8339005": "getSaddle(uint256)", +"f833eda8": "upDataObliterateTime()", "f833f984": "OSEToken()", +"f8341309": "A1()", "f8341fca": "BezantToken(string)", "f8347242": "betsNum()", "f834db41": "getBeneficiaryManage()", "f834e212": "setGamePrize(uint256,uint256)", +"f834fbbc": "ash2(uint256,uint256)", +"f8350ed0": "isAllowed(address,uint256)", "f8351daf": "winningCard()", +"f8352472": "SCD_MCD_MIGRATION()", +"f8353863": "sellerProposals(address,uint256)", "f8354a82": "nextArenaTime()", "f835a686": "setSaleEnd()", "f835eb1b": "New(string,uint256,uint256,string,string)", +"f8361bab": "updateCreator(uint256,address)", "f83629e0": "EBLCreation(uint256,string,string)", +"f836bbd7": "mintFreeWerewolfAsset(address,string,uint256)", "f83761e5": "setBAU2(bytes32,address,uint256,uint256)", +"f837c58d": "dutchAuctions()", "f837e7c1": "battleAdd(uint256)", +"f838251f": "pendingGoogle2(uint256,address)", +"f83887d3": "releasePercentages(uint256)", "f838b0e9": "get_allowance_expires(address,address)", "f838ea1a": "setDefaultMaxJump()", +"f838f52a": "activateRaffleAsHost(uint256)", "f838f6dd": "AssignBurnFees(address,uint256)", "f8392303": "changeTicketMag(uint256)", "f839407b": "setRateRoundSeed(uint256)", @@ -142334,9 +260416,12 @@ "f839686d": "STSTEST7()", "f839dc62": "pauseWork(uint256)", "f839eb1a": "Referral(uint256,address,address,address)", +"f83a1515": "onDisputableActionRejected(uint256)", "f83a4c8a": "claimBet(uint8,uint8)", "f83a768d": "addDiceRoll(uint256,uint256)", +"f83b2863": "currentSmartpotThree()", "f83b5dce": "ec()", +"f83b80cb": "ActiveClient(address)", "f83c4f82": "enableCirculation()", "f83c6f64": "MIATOKEN()", "f83ce05d": "deauthorizeBurnRequester(address)", @@ -142344,101 +260429,198 @@ "f83d14e6": "buySketch(uint256)", "f83d69db": "intMin(int256)", "f83d96c1": "InsuranceAgent()", +"f83de010": "StakesEnabled()", "f83e3f5a": "SetProjectName(string)", +"f83e48cb": "loan(uint256,uint256)", "f83e5793": "caged()", "f83e9a20": "lock_period()", "f83eb5dc": "forcedRefund(address)", +"f83ec539": "pendingAirmoon(uint256,address)", +"f83eee64": "ERROR_REASON_FROM_FROZEN()", +"f83f11c0": "fetchFlightStatus(address,string,uint256)", +"f83f4432": "setSelector(address,bytes4,bool)", "f83fcdea": "setPrice(uint256,uint256,address)", +"f83fe0c5": "ProposeMint(address,uint256)", +"f8401fe6": "providers()", "f84038b1": "getMinimumContribution()", +"f84072a5": "queryN_fnc(uint256,string,bytes,function,uint256)", "f8407634": "checkFunderAccount(address,address)", "f8408a8d": "Funding_Setting_cashback_time_start()", +"f840be5b": "IdentityRevoke(address,address)", +"f8412f01": "triggerUpdateLogic(address)", +"f8413b07": "requestRandomness()", +"f841bcbf": "unlock_date()", +"f8428398": "getUserAddressByCode(uint256)", +"f842fa22": "abyPerBlock()", "f843545c": "active_payable()", +"f84354f1": "includeAccount(address)", "f843b1b6": "singleWithdraw()", "f843d4ec": "setEthereumBalance(uint256,bool)", +"f843d7fd": "getSumAmount()", "f843dad6": "phaseTwoEnd()", "f843ea4d": "updatePhaseSupplyAndBalance(uint256)", "f843ebb1": "runTests(address,address)", +"f84406f4": "LOWEST_DIVIDEND_PERCENTS()", +"f84436bd": "simulateDelegatecall(address,bytes)", "f844a9f4": "requestArbitration(bytes32,uint256,address,address)", "f84501e0": "prosperaTokenAddress()", +"f8453e7c": "initialize(address,address,address,address,address[])", "f84564f6": "RGTOKEN()", "f845862f": "newUser(bytes32)", +"f845c939": "oper()", +"f84628f2": "GameWon(uint256,address,uint256,uint256)", +"f8463b21": "updateStakingPoolsIncome()", +"f846447f": "coinCreationTime()", "f8465534": "removeFromSendAllowed(address)", "f8469646": "slice(address[],uint256,uint256)", +"f846a885": "BURN_RATE()", +"f8476f2b": "redeem(address,uint256,uint256,uint256,bool)", "f847b16d": "INAToken()", +"f847ed48": "isExtension(address)", "f848091a": "claimERC20(address,address,uint256)", "f8482ca5": "Payroll()", +"f848a1c7": "updateAndWithdraw(uint256[],uint256[],uint256[],uint256[])", "f848d541": "withdrawLimit()", "f84907d7": "tokens_backed(address)", "f849acb8": "overrideLock(bool)", +"f849eda2": "eth_usd_pricer()", "f84a0e74": "BSWCValueCirculateAssets()", "f84a6519": "requiredDownPayment()", "f84ad0fb": "ProvideWorkOrder(address,address,address,address,address,uint128)", +"f84ad921": "viewEnableTax()", "f84af7f3": "isAssetIdOwnerOrApproved(address,uint256)", +"f84afd48": "updateReserveAddress(address)", "f84b2f51": "disqualified()", +"f84b40dc": "changeTokenName(uint256,string)", "f84b624e": "ProjectCoin()", "f84b903e": "distributed()", "f84bcb11": "setEtherReceivers(address,address[])", +"f84ca168": "getWithdrawTokenAmount(address,uint256,uint256)", +"f84cb67a": "accountIssuanceKindsLedger(address,uint256)", "f84ce165": "setEndStage1(uint256)", +"f84cee3e": "getPenaltyDetailByUserId(uint256)", "f84dcb1e": "CFToken()", "f84ddf0b": "lastTokenId()", +"f84e353e": "auctionsIncrementAuctionsRemaining()", +"f84eeb64": "triceratops()", +"f84f0c4b": "stringifyTruncated(bytes32)", +"f84f122c": "TMTG_Pause()", "f84f30c4": "_isCorrectBuyin(uint256)", "f84f420b": "getRandomNumber(address,uint256)", +"f84f53f2": "LogSettlementRegistered(uint64,address,address)", +"f84f89a2": "getMargin(address)", +"f84f92ee": "exitNullifierMap(uint32,uint48)", +"f84faeea": "setLoanTokenLender(address)", +"f84fbece": "SetLpFee(uint256)", "f84fce56": "isDraw()", +"f85033ac": "HALF_TIME_ATK()", "f850a136": "get_lose_coefs()", "f850a7a4": "_addUser(address,address)", "f850b7f8": "ERC20YSLToken()", "f851019a": "BONUS_50_100()", +"f8511ec2": "getAuctionLobbyParticipateBNBParticipated(address,uint256)", "f8515cfc": "destroyFactory()", "f8515eca": "Operable(address[])", "f8516c6c": "groupPolicyInstance()", +"f85181fb": "registerReferral(uint32,uint32)", "f851a440": "admin()", "f8524236": "DeleteImage(uint256)", "f852b976": "_updateState()", +"f852d0a3": "Issue(address,uint256,string,string)", +"f852d393": "exchangeSynthsForSNX(uint256)", "f853343d": "addStakeAD(uint256,address)", +"f8534613": "getStructure(address,uint256,uint256)", +"f8535875": "expireBlocks()", "f8536b94": "participated(uint256,address)", "f8538662": "signup(bytes32,bytes32)", +"f853edb4": "_openingTime()", "f853ee49": "rateUSD()", "f8542f5e": "getCopaCoreAddress()", +"f8543d55": "setReferralAmount(uint256)", "f8548bea": "quarterFirst()", "f8548e36": "transfer(uint256,address,uint256)", +"f854a27f": "availableRewards(address)", "f854d74c": "withdrawCommunityTokens(address,uint256)", +"f854f482": "setclaimDays(uint256)", +"f8552084": "rely(address,address,address,address)", +"f8559c08": "setGelatoMaxGas(uint256)", "f856d605": "tokensPerEther()", +"f856f785": "LogMakeCfd(uint128,address,uint8,uint128,uint128,uint128)", +"f856f86e": "updateClaimManager(address)", +"f8570170": "setGovernanceToken(address)", +"f8570670": "_getTimestamp(uint256)", "f8570b01": "_newEpoch(uint256)", "f85771b2": "removeManager(address,address)", "f8579af8": "test_percPoints()", +"f8582934": "addVault(string)", "f8588593": "isSuperContract(address,address)", "f85905ac": "testEqualityUint(int256)", +"f8590fc4": "renounceConverter()", +"f859c72b": "setLockerAccount(address)", "f85a253f": "setTEx(address)", +"f85a25ad": "setPom(address)", "f85a3dea": "totalAmountOfEarlyPurchasesWithBonus()", "f85aefba": "testBitsSetFailIndexOOB()", "f85b2160": "recoverFailedLock()", +"f85b84a4": "manualMintLimit()", +"f85c0b74": "NATIVEPerBlock()", "f85c6b3b": "_safeGasCall(address,bytes)", "f85cb0b5": "Start2()", "f85cd33e": "timelockTokens()", +"f85cfbcd": "LockDev()", +"f85d43b6": "pendingNerdForPool()", +"f85d4dfe": "renderAllAthletes()", "f85d9cc7": "setReviveFee(uint256)", "f85daa38": "authorityContractAddress()", +"f85dd614": "verifyWhiteList(address)", "f85e4854": "tokenIssuedPreSecondIco()", +"f85ea2ab": "setMarketContract(address)", +"f85eb3ac": "unknownToken(address)", +"f85eccaf": "testfive3()", "f85ef43b": "modifyPolicyAttribute(uint8,uint256,uint8)", "f85f0972": "FoxicoPool(uint256,uint256,address)", "f85f3b7f": "defaultIcoDeadline()", "f85f8a3a": "BiTianToken()", +"f85fc0ab": "HUNDRED()", "f8605230": "getNewTeamPositionAndCheck(uint16,uint8,uint64)", "f860a6d8": "withdrawlBalance()", +"f860c71a": "setTheTought(bool,string,string)", "f860e64a": "Lottery(uint256,uint256,uint256)", +"f860ff11": "pOly()", "f8615d24": "getBio(address,bytes3)", +"f8617466": "emitters(address)", +"f861accb": "updateClaimableTokens(address,bool)", "f861d2bf": "MIRC()", +"f8626af8": "donations(uint256)", "f86282da": "doStateChanges()", +"f862b7eb": "unlockTransfers(uint256)", +"f862c251": "ContestCreated(uint256)", "f862d780": "addIn(address)", "f862f6f4": "cap_nuru()", "f86325ed": "BASE_PRICE()", +"f8634413": "execute1(uint256,uint256,uint256,uint256)", "f8635ece": "openSession()", +"f8638dd3": "sellTypeOf(address)", +"f863b961": "joinPoolNotStake(uint256,uint256[])", +"f863c453": "setBounceAddr(address)", "f86418e5": "_privateSaleTransferFromOwner(address,uint256)", +"f86485d9": "unprotectedMethod()", "f864bc65": "lastBlock_a5Hash_uint256()", "f864ca14": "withdrawToWallet(uint256)", "f864e729": "getAvailableTokenForUser(address)", "f8651d56": "Prether()", +"f8659d00": "campaignCnt()", +"f8667bd5": "contractTotalAmountSwapped()", +"f866c319": "transferOnLiquidation(address,address,uint256)", +"f866ed93": "Educations(string,string,uint256,uint256,string,uint256)", +"f8678313": "Currency_LINA()", "f868061e": "setICOExchangeRate(uint256)", +"f8682766": "buyGaufWithEther(address)", +"f86836d9": "dividendCredited(address)", +"f8684590": "getlistmintingPooldata(uint256)", +"f8685b69": "isBenefeciary(address)", "f8688ddd": "setTargetFeePeriodDuration(uint256)", +"f868e766": "userDeposit(uint256)", "f869b11a": "declareVictor(uint256,uint256)", "f869b3ff": "AdvisorsFund()", "f86a3529": "totalStages()", @@ -142448,102 +260630,173 @@ "f86ae8b2": "TokenSaleStop()", "f86b0669": "burner_addr()", "f86b5ebc": "DANSSold()", +"f86bc879": "authorisations(bytes32,address,address)", "f86c4354": "GovcTechnicalGases()", "f86c8ed3": "blocksUntilNewPotentialWinner()", +"f86cbedb": "BuySuccess(address,uint256,uint256)", +"f86cc009": "otherContractMethod()", "f86ccd41": "amountDeposited()", +"f86ccfc0": "getVaultDepositsOfOwner(address)", "f86cd33d": "noThrowCall(address,bytes4)", +"f86ce2be": "addOrUpdateUser(address,string,string,string)", +"f86d6d3a": "addManager(address[])", "f86da6ed": "checkTotalBets()", "f86db133": "forwardWithRevert(address,uint256,bytes)", +"f86dfd5e": "debtCurrentIndex()", +"f86e352c": "storeT2TransactionId(uint256)", "f86e898c": "hasMinCreatedOn(address,uint256,uint256)", +"f86eb11f": "numerators(uint256)", +"f86f9b5b": "doERC1155TransferIn(address,uint256,uint256)", "f8702fe1": "calcFees(uint256,string,uint256)", +"f8704b84": "ytbBids(uint256)", "f870849d": "GetBankerPrincipal(uint8)", +"f870e3e1": "_newContent(bytes)", +"f870e8a2": "getNextSupplyDelta()", +"f8713c95": "settle(bytes32,string,uint256)", +"f8715a42": "loanIds(uint256)", +"f8715b3e": "setBoolean(bytes32,bool)", +"f871c66c": "approve_616(address,uint256)", "f871cca9": "_check(uint8)", "f871e0e1": "DutchAuction(address,address,address)", "f8721a4e": "calcReturnValue(uint256,uint256)", "f8721f1e": "nAlarms()", "f8725493": "GCA1()", +"f8726904": "setGUMA(address,address)", "f872bec0": "sn()", "f872c9dd": "Vote(address,string,uint256)", +"f872cd2c": "pixelToken()", +"f872e6e0": "REFERRAL_LEVEL1_RATE()", "f872f047": "testControlMixItemStoreNotRegistered()", "f8732d3e": "goodLuck(address,uint256)", "f8737bc0": "nextUnlockTime()", "f87394d6": "DonateEther()", +"f873ccb5": "accountStakingListLimit()", "f873d7e6": "initializeTrueUSD(uint256)", +"f8741a9c": "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)", +"f8742254": "MAINTAINER_ROLE()", "f8742a14": "hivePerUSD()", "f87482e1": "changeMigrate(address)", +"f8759dd0": "gvValue()", "f875c421": "delegateReferalTokens(address,uint88)", "f876101c": "setConstantsContract(address)", +"f8761376": "push(string,string)", "f876250a": "getNumClonesInWild(uint256)", "f876fe1a": "availableHavvens(address)", +"f8774939": "approve_49(address,uint256)", +"f87793ad": "activePools(uint256)", "f8779524": "addNewGame(string,int8)", "f87876c5": "resignFromMatch(uint256)", "f8788382": "payService(uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", "f8789e1a": "_createUnitHelper(uint256,address)", "f878fcc2": "migrationAllowed()", +"f87975af": "unstakeRequests(uint256)", +"f87a858e": "ELPrice()", "f87aa82f": "_setBuyPrice(uint256)", "f87aad3e": "SetAllLock(bool)", "f87aba30": "placeBet(uint256,uint256,uint256,bool)", +"f87b61a6": "CompanionRemoved(address)", "f87c77c0": "getVirtualChannel(bytes32)", +"f87c9ea9": "greetings(uint256)", +"f87cfdc7": "calculateFee(address,address,address,uint256)", "f87d7236": "addCapFreeAddress(address)", +"f87d82fe": "arbitratorlicenseDetails(address)", +"f87ddd59": "setTokenRewardsMultiplier(uint256)", +"f87deec8": "jdxuAddress()", "f87e7446": "Houton()", +"f87e95ca": "faasPools(uint256)", "f87eac7f": "lastBlock_v15()", "f87f31c3": "mintMiniICOTokens(address,uint256)", +"f87f400a": "resetNotary(uint256,uint256,bool,bool)", "f87f44b9": "setWebsite(string)", +"f87fcd0f": "redeemFee(uint256)", "f87ffb74": "gameIdCntr()", "f88001d4": "reopenSale()", "f8801631": "getTotalDonateWEIInfo()", "f8806544": "getBioLanguages(address)", +"f8807972": "addLand(bytes,bytes,bytes,uint256,address)", "f880f920": "calcMax()", "f8811c36": "registerNewAccount(address)", "f8811efd": "mintMonster(address,uint256)", +"f881215e": "MaddLifeDeathPair()", "f88218e0": "claimPheonix(address)", "f8823353": "_isListed(address,address)", +"f8825a0c": "bind(address,address,bytes)", +"f882ddae": "devaddress()", +"f88309d7": "swap(address,address,uint256,uint256,uint256,address,address[],bytes,uint256[],uint256[])", "f88339a5": "CBOPToken(address)", "f8833efd": "probabilities(uint256)", "f88351d9": "getDividendsBalance(address)", "f88371e8": "balancesLocked1Y()", "f883dfb5": "initializeLevel()", "f8840c38": "TopforceCoin(uint256,string,uint8,string)", +"f8843828": "oraclePublicKey()", +"f88449c3": "getCompanyDetails(string)", "f88489a6": "getBidIdsByToken(address)", "f884e54a": "giveCat(bytes5,address)", "f88573c8": "Administration()", +"f88596a0": "stakeForFiveDays(uint256)", "f885eaf2": "returnAllowedTime()", "f88607e4": "ICO_PRICE2()", +"f886374c": "approve_346(address,uint256)", "f88649a1": "getLastWinner()", +"f8867436": "allowBurnList(address)", "f8868778": "change(uint256[])", "f886cbda": "reado()", "f886e9b6": "removeRelation(address)", +"f8875a01": "cardWrapperFactory()", +"f887d019": "joined(address)", +"f887ea40": "router()", +"f887f862": "perSecondPrice(address)", "f8887cd3": "TransferToken(address,address,address,address,uint256)", "f8895cc8": "schema()", +"f8896aac": "setUnifiedTokenDecimal(uint256)", "f8896ea6": "Interim()", "f8897945": "min()", "f889ac54": "JP_sum()", "f88a067f": "registerHotel(string)", +"f88a1217": "MIN_BID_DURATION()", "f88a742b": "insertStage(uint8,uint256,uint256,uint256)", +"f88af21d": "clients(uint256)", "f88b07a3": "SoldToken()", "f88b1f38": "balances6(uint256)", +"f88bc960": "setVipUser(address,bool)", "f88bf15a": "removeLiquidity(uint256,uint256,uint256,uint256)", +"f88bf565": "setDex(string,address)", "f88bfe3e": "getCountStages()", +"f88c6c03": "queryTeamBonus(address)", +"f88c6e31": "deklaTokenPrice()", "f88cc87c": "decline(bytes32,bytes32)", "f88cf827": "getVendorProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", "f88d2047": "cancelOrder(uint256,bool)", +"f88d331a": "sendEther(uint256)", "f88d6732": "dice(uint256)", "f88d88e4": "address_book(bytes32)", "f88e0b09": "getTransferValueValue()", +"f88e12f9": "pendingYax(address)", +"f88e2169": "getProofTokenAddress()", "f88e9fbf": "divide(uint256,uint256)", +"f88eb68b": "_unlocked_balances(address)", "f88edaf2": "mMultiSigWallet()", +"f88fba8c": "nftAddress(uint256)", "f89005e7": "depositWithReference(string)", "f8900ddd": "godAddress()", "f89037a9": "TureTreasureChain()", +"f8906b73": "initialDepositCb(uint256,uint256)", "f8907491": "isCollectionAllowed(bytes8,bytes8)", "f890e286": "oracleOf(address)", "f8910119": "AuctionStarted(uint256,uint256)", "f8910241": "_getTokenAmountForBuyer(uint256,bool)", +"f89176e4": "moveEther(address)", +"f891e0e3": "getChallengeArbitratorFees(uint256)", "f892ee05": "subDevTwo()", +"f893ffb7": "addOnwer(address,bool)", +"f89430ea": "getWaasLobby(uint256)", +"f89488db": "updateAccessControl(address)", "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)", +"f89591b9": "manualRequestData(address,string)", "f896503a": "getConfigAddress(bytes32)", "f896680c": "testInitialEtherBalanceShouldBeZero()", "f8975cd9": "ZanteCoin()", @@ -142553,93 +260806,172 @@ "f897ebbc": "setDelegatedFromOperation()", "f8981789": "setCompliance(address)", "f8984677": "_calculateMinimumprice()", +"f8987342": "WithdrawReferral(address,uint256)", +"f89879aa": "getBNBBalance()", +"f898c1f7": "trimNonCoreToken(address)", "f898e574": "incentiveDistributionDate()", "f898f8ab": "Escapable(address,address)", "f8995981": "ABAS()", "f899b607": "FxdCoin()", +"f899e4dc": "deleteDirect(uint256,uint256)", "f899e9f3": "annihilateShares(address,uint256)", +"f899f8e9": "timeTillUnfreeze(address)", "f89a053b": "setAccountFeeModifiers(address,uint256,uint256)", +"f89a1f14": "distribution_contract_a_principal()", +"f89a28a6": "listItems(uint256,string,uint256,address,bool,bool,bool,string)", "f89a5100": "RGP()", +"f89a532f": "logBytes17(bytes17)", "f89a77b1": "removeValidator(address,bool)", +"f89ae87e": "poolWhitelist()", +"f89afe1b": "getyourcoinsbackafterthreemonths()", +"f89b6011": "balanceInUniswapPairs(address)", "f89be593": "softcap()", "f89ca001": "revealMove(bytes32,uint256,bytes32)", +"f89d24d8": "depositeLPtoken(uint256)", +"f89d4086": "getBlockReward()", +"f89d5066": "contribute(uint256[],uint256,string)", +"f89d8645": "sendBPT(address,uint256)", +"f89d973c": "getOrderbookListingStage(address)", "f89e4df3": "saleMilk(uint256,uint256)", "f89e6512": "CMDCrowdsale()", "f89ea906": "_refundExcess(address,uint256)", +"f89eab68": "restrictedLP(address)", "f89eae17": "testStop()", "f89f0e44": "getMyDividendTokens()", +"f89f1cb6": "lastBountyHunterId()", "f89f2a65": "addExchanger(address)", "f89f3834": "getAccountChartDetailsByEntityId(address)", "f89f74bf": "MATCHES_PER_ROUND()", "f89f7cb3": "updateDrawPeriod(uint256)", "f89fdabc": "TokenTransferContract(address,address)", +"f8a044cd": "balanceInFarm(address)", "f8a05d13": "transferLd(address,uint256,string)", "f8a09cd0": "settlementDetails(uint64)", +"f8a0a7c3": "_addressesWithFee(address)", +"f8a0b695": "getParticipators()", "f8a0cdee": "addUserRewardPayouts(address,uint256)", +"f8a14f46": "tokenOwners(uint256)", "f8a17d7f": "League(address,uint256)", "f8a21631": "PrivateCoinSupply()", +"f8a2167b": "lowestBalanceOfMarketOutcomes(address,uint256[],address)", +"f8a2449f": "setLockedBitmask(uint64)", +"f8a2685e": "bidDecrease()", +"f8a2abd3": "proposeAggregator(address)", +"f8a3176c": "extensionCode()", "f8a321e1": "checkInvestorContribution(address)", +"f8a32e3d": "getRewardParamUpdateRewardPerBlock()", "f8a34b26": "presale(address,uint256)", "f8a35b35": "maximumSubscription()", +"f8a37088": "getTotalClaimCount(address)", "f8a39a6e": "test_twoTrueAssertNoMessage()", "f8a3ce82": "resetSession()", +"f8a3fb9d": "book_name()", "f8a40b7d": "requestSetWithdrawalLimit(address,uint256,string)", "f8a46568": "HashnodeProCoin()", "f8a47213": "VnixNetwork()", "f8a4cc33": "withdrawPoly(uint256)", +"f8a4d531": "sTSLA()", "f8a4e608": "verifiedKYCAddresses(address)", +"f8a5230a": "get_random_zeroForOne_priceLimit(int256)", "f8a5399a": "settleExtraToken(address)", +"f8a55674": "variableMincap()", "f8a56efd": "balanceOfRaws(address)", "f8a5a8dd": "getTranchesLength()", +"f8a5d721": "onGamePaused(uint256,bool,uint256)", "f8a6172e": "receiveToken(address,uint256,address,bytes)", +"f8a623d3": "getPriceManager()", +"f8a6a2f6": "addLiquidityToBakerySwapTCORExWBNBPair()", "f8a6c595": "constructor(address)", "f8a6fca8": "confirmImperfectReception(uint256)", +"f8a74501": "getCastleBasicInfo(address)", +"f8a76b16": "earnedGFV(address)", "f8a777f5": "batchCreateInternalDrawings()", +"f8a7f938": "averageExpansionSalePrice(uint256)", "f8a8fd6d": "test()", +"f8a9799f": "distributeAll(uint256,uint16)", "f8a9972a": "selectWinner20()", +"f8a9a8ac": "pokeFromSlasher(uint256,address[],bytes)", "f8a9c6ae": "golix()", "f8aa0a59": "updatebalance()", +"f8aa2e7d": "potofgold2Register()", "f8aa836b": "THRESHOLD2()", +"f8aab893": "ST1OPB(address,uint256,address,uint256,uint256)", "f8aabbd9": "makeTJs(address)", "f8ab02dd": "isRefAvailable(address)", "f8ab745e": "validTransfer(uint256)", +"f8abb41e": "renounceResolver()", "f8abb93d": "hasVotedOnUpgradePoll(uint8,address)", "f8abe7f2": "testSandwichOrder(uint256,address)", "f8ac6570": "tokensBoughtInEarlybird()", +"f8ac93e8": "refresh()", +"f8acd023": "ResultsByProposalId(uint256)", "f8ad69a8": "HetherToken()", +"f8ad90ee": "ItemWon(uint256)", "f8adb686": "earlyBackerSupplyRemaining()", "f8adccdb": "doPartnerShares(uint256)", +"f8ae9511": "getTimeToDailyBonus(address)", +"f8aea42d": "getMarketingMaxLevel()", "f8aed03a": "btcsPortionTotal()", "f8af2514": "IsItConstantinople()", +"f8af366d": "deployFactory(uint256)", +"f8af438f": "cacheTotalPayout()", "f8af56b7": "_finish()", +"f8af64ed": "rentPrice()", +"f8af679e": "flashSwap(uint256,uint256)", +"f8af849c": "Transferadd(address,uint256)", "f8af9e6f": "setAdv(uint256,string,string)", +"f8b00c66": "COMPLAINT_TIMELIMIT()", +"f8b02693": "ReturnFunds(address,uint256)", "f8b096bb": "setupRegion(uint256,uint256,uint256[],bool,uint8[128])", "f8b0c0b6": "getTransferStat()", +"f8b0e604": "depositPbtc()", +"f8b0ff3f": "provide_Help_USDT(uint256,address,uint256)", "f8b10464": "pause_PRIVATESALE()", "f8b11853": "getGenerationStartAt(uint256)", +"f8b1208b": "BUY_TAX_DENOMINATOR()", +"f8b12474": "m_tokenBalances(address)", "f8b14500": "EmissionProvider(address,address,address,uint256,uint256,uint256,uint256)", "f8b1db8f": "donationBoxes(bytes32)", +"f8b1fb12": "ethPossibleRefunds(address)", +"f8b26c92": "time_weth_lp()", +"f8b28422": "getInvestAmount(address)", "f8b28c26": "getSecretByHash(bytes32)", +"f8b2cb07": "bancorApproveTokenAmount(address,address[],uint256)", "f8b2cb4f": "getBalance(address)", +"f8b2dbe7": "daysPastMinLockTime()", "f8b2e259": "lowCapWei()", "f8b332ad": "onpayInstallment(uint256,address,uint256)", "f8b367c1": "categoryCap(uint256)", "f8b3d3b1": "receiveInitialFunds()", +"f8b3f0bf": "setReceiver(address,bytes,bytes)", "f8b42f78": "getOrderBookKeys(uint256)", +"f8b43d9c": "totalUnlockedAmountOfToken()", "f8b45b06": "totalsData()", "f8b4ab7a": "updateTotalSupply(uint256,uint256)", +"f8b4b084": "exchangeSuspension()", "f8b4cfc6": "lock(uint8,uint256)", "f8b4e080": "changeRateOfToken(uint256)", +"f8b4fb85": "convergePolicy(address)", "f8b542c8": "_0xPeriheliaToken()", +"f8b5b529": "totaltronBalance()", "f8b608a1": "addTournamentContender(address,uint256[])", +"f8b67403": "setRarityAmounts(uint256[])", +"f8b67c55": "UniswapGetExpectedRate(address,address,uint256)", +"f8b6c0c4": "SetMasterKey(address)", "f8b71c64": "rewardTo(address,uint256)", "f8b746dd": "BdpEntryPoint(address[16],bytes8)", "f8b89dfb": "setStep(uint8)", +"f8b8a16c": "ArtworkSharesPurchased(uint256,string,address,uint256)", +"f8b8b4dc": "offer(address,string,uint256)", "f8b91abe": "renounceManager()", +"f8b99190": "getRoom(string)", "f8b991e8": "firstRewardPeriodEndBlock()", +"f8ba4cff": "accrue()", "f8ba7317": "sealManualMigration()", "f8ba8e6a": "getAllowanceAmount(address)", +"f8babbd0": "TokenPurchaseEvent(uint128,bytes32,uint256)", "f8bb201c": "setCroupier(address)", +"f8bb3534": "NextCycle(uint8,uint256,uint256)", "f8bb801d": "getTxIds(uint256,uint256,bool,bool)", "f8bb9160": "TIGER()", "f8bbca99": "multivestBuy(address,uint256,uint256)", @@ -142647,89 +260979,169 @@ "f8bc8548": "getPOOL_edit_31()", "f8bd4498": "AMOUNT_BASETEAM()", "f8bd526e": "setCoinageContract(address)", +"f8bd672e": "getDmgLockedByTokenId(uint256)", "f8bd71c7": "unstop()", +"f8bd8c87": "bountyBalances(address)", +"f8bda7b9": "viewShell()", "f8bdbb60": "assertEq10(bytes10,bytes10)", "f8bdc610": "_preProcessProposal(bytes32)", "f8bdc9dd": "get_shares()", +"f8becb66": "_updateNumerator(uint64,uint256,uint256)", +"f8bedcb6": "newModifier()", +"f8bf6972": "mintFungible(string,address[],uint256[])", "f8bf77ae": "managedContracts(uint256,address)", "f8bfb34c": "getBorderValue(uint256)", +"f8bfc3a0": "getWLAssetAddress()", +"f8bfef72": "STATE_CANCELLED()", +"f8c12e2c": "clmpropbyhash(bytes32)", "f8c1c186": "isSale()", "f8c206b0": "killFaucet(address,address,string,address)", +"f8c20b9b": "addAkroLiquidity(uint256)", "f8c25c48": "changeCreatorBalance(uint256)", "f8c28ce0": "releaseOperation()", "f8c32ccb": "APG()", "f8c34050": "priceIncrease()", +"f8c34e98": "voterServiceEntityIndex(address,address,address)", +"f8c39cc1": "pendingHydg(uint256,address)", "f8c3a293": "ADVISORS_AND_PARTNERS_PER_CENT()", +"f8c3e039": "zzznapV1()", +"f8c4172c": "viewPubFactor()", "f8c439dc": "ETH_EUR()", "f8c46eff": "FinalizableToken(string,string,uint8,uint256)", "f8c4892f": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32,string)", "f8c4ab92": "getNewCumulativeAllowance()", +"f8c4ada7": "approve_524(address,uint256)", +"f8c511a3": "afiToken()", "f8c52125": "deriveMarketCreatorFeeAmount(uint256)", +"f8c55df4": "EthToTokenSwap(address,uint256,uint256,uint256,bool,bool)", "f8c587ac": "paper()", +"f8c5aa16": "_getUSDPCurPriceOfLUCAX(uint256)", "f8c5e217": "getSellRatio()", +"f8c60146": "unsubscribe(bytes32)", +"f8c621b7": "addSettings(address)", "f8c64800": "signTwo()", "f8c65bae": "Bgc(uint256,string,string)", +"f8c68bb9": "poolDeployedAt()", "f8c75351": "transferViaProxy(address,address,address,uint256)", +"f8c77463": "reservePercent()", +"f8c7fc1d": "mintAndProvideLiquidity(address,address,uint48,uint256,address,uint256,uint256,bool)", "f8c80d26": "privateCreation()", "f8c8282b": "transfer_storage_ownership(address)", +"f8c83dd2": "KSCTransfer(address,address,uint256,string)", +"f8c85c98": "updateInherit(string,uint256,string,uint256,address)", +"f8c86c36": "Returned(uint256)", "f8c8765e": "initialize(address,address,address,address)", +"f8c87b73": "closeFuturesContractInternal(bytes32,uint256)", "f8c8de10": "stringToUint8(string)", "f8c95160": "tokenEmission5(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"f8c9d2ed": "testFetchAssetPrice_Oracle()", +"f8c9f241": "walletAmount(address)", +"f8ca305d": "poolconfigs(address)", "f8ca3e22": "CustomCrowdsale(uint256,uint256,uint256,uint256,address,address)", "f8ca9442": "getBalance_in_token()", +"f8cab74f": "subExt(uint8,uint8)", +"f8cad481": "availHoldingBalance(address)", +"f8cb1c2b": "phase5TokenPerBlock()", "f8cbd580": "freezeIndex(uint256)", +"f8cc02df": "burnByCover(address,uint256)", "f8cc1055": "transferCallership(address,uint256)", "f8ccb027": "AdminTransferred(address,address)", "f8ccbd38": "validPurchaseForManual()", +"f8cd08da": "LogDrawNumbers(uint256,uint256,string,uint256[])", +"f8cd4d72": "boardroomSetLockUp(uint256,uint256)", +"f8cd6e01": "executeReserveTradeWithData(address,uint256,address,uint256,address,bytes32[])", "f8ce3164": "accumulatedFee()", "f8ce5894": "updatePrizePool(address)", "f8cf0e1c": "unlockAddr(address)", +"f8cf9efa": "getEncryptedDataCountBySource(bytes32)", +"f8cfe0b1": "updateAirdrop(uint256)", +"f8d013a6": "rebaseInterest()", "f8d09593": "Kikicoin(uint256,string,string)", +"f8d0d620": "_setLocator(address,uint256,bytes32)", +"f8d0fded": "withdrawTokenBalance()", +"f8d18b04": "getSessionRoundsNumber(uint256)", "f8d1f5f0": "setProvider(uint8,address)", "f8d29219": "fundingStartUnixTimestamp()", "f8d29f8a": "hasProfilePicture(address,address)", +"f8d2b45f": "getAthleteFollowingTeam(uint256)", "f8d3277d": "removeFromWhitelist(address,address)", "f8d3a26a": "QuasaCoinExchanger()", "f8d3afa4": "numberOfTransactions()", "f8d3e256": "publicLockEnd()", "f8d420a1": "cancelGame(uint32)", +"f8d469e3": "getOptionsList(uint256)", +"f8d49fc5": "RemovedOwner(address)", "f8d50542": "addToWhitelist(address[],uint256[])", "f8d506e1": "TCNYCoin()", +"f8d5609b": "update(uint256,uint128,uint128,uint128,uint128,bool,bool,address)", "f8d578f0": "registerContribution(bytes32,address,uint256)", "f8d599eb": "appendContribution(address,uint256)", +"f8d5c26b": "SetFee(uint16)", +"f8d5ec97": "notionalYieldJuly()", +"f8d5f409": "AddWhiteList(address)", "f8d609b2": "assert_ex(bool)", "f8d67506": "Shop(uint256,address)", +"f8d6aed4": "calcInGivenOut(uint256,uint256,uint256,uint256,uint256,uint256)", "f8d6b70a": "setAyantDroitEconomique_Compte_5(uint256)", "f8d7f790": "COMMUNITY()", +"f8d82683": "PeriodsIssued(uint256)", +"f8d86794": "rafflePrice()", "f8d86bbc": "setNewEndtime(address,uint256,uint256,uint256)", +"f8d89898": "debtToken()", +"f8d8fc66": "addToArr1(uint256,uint256,uint256,uint256)", "f8d93136": "Savings(uint256,uint256)", "f8d95520": "extUnlockNinja(uint256,uint16)", "f8d970b6": "checkTemplateRequirements(bytes32,bytes32,bool,uint8)", "f8d988d6": "toExchange(address)", +"f8d9be68": "toshicash()", +"f8da1c3b": "previousEpochDollarPrice()", +"f8da980b": "changeMinStartValue(uint256)", "f8daa0ee": "transferGroupCommune(uint256,address)", "f8dad3db": "MAXIMUMINVESTMENTSALLOWED()", +"f8db0f68": "setCoreRoles()", "f8db188b": "MeetToken()", +"f8db3188": "_toSingleValueArray(uint256)", "f8db5d07": "unlockKyc(address)", "f8db71b5": "getStatusContract(address)", +"f8dbed1c": "getAllowedErc721ContractsLength()", +"f8dc0221": "forestChestPrice()", "f8dc11cc": "soldTokenInPublicsale()", "f8dc5dd9": "removeOwner(address,address,uint256)", "f8dcbddb": "setStep(uint256)", "f8dcc3e0": "getLinkStatus(bytes32,address)", "f8dcc9a9": "potato()", "f8dd1764": "ClearToken(address,address,address,address,address)", +"f8dd5af5": "getIpfs()", +"f8dd7b86": "register_transaction(address,string,uint256)", "f8ddd288": "s31(bytes1)", +"f8de21d2": "closeWithSwap(bytes32,address,uint256,bool,bytes)", "f8de2dfd": "destroyCoins(address,uint256)", +"f8de5797": "setStacyVaultAddress(address)", "f8dea17f": "startraffle()", +"f8def5b0": "updateTokenMetadataOnlyOwner(uint256,string)", "f8df084d": "ZUR()", +"f8df1b7a": "purchaseVocherTokens(uint256)", +"f8df3114": "OwnershipRenounced(address)", "f8dfaa1e": "ret_img(uint256)", "f8e0cc1c": "getPI_edit_32()", +"f8e11ba7": "quitwanWan(address)", +"f8e157ea": "Time()", +"f8e16d99": "raffleCountOfUser(address)", +"f8e17464": "Eligibility_Group_4(address,address,uint256)", +"f8e189f4": "setCollection(uint256,string,string,uint256)", "f8e1badd": "getCrowdsalePrice()", "f8e1ec40": "CTOcoin()", +"f8e1f51e": "muse()", "f8e217c4": "getDivBalance(address)", +"f8e237ab": "getUserPartAmount(address)", +"f8e27f93": "weight(uint256)", "f8e29885": "get_game_balance()", +"f8e2bd74": "calcBuy(address,uint256,address)", "f8e2d041": "maxNumberMembers()", "f8e2d4f9": "settleBetVerifi(uint256[],bytes32)", "f8e2dc6a": "rangeOfBets(uint256,uint256)", +"f8e2fb00": "ERR_SUB_INDEX_VALUE()", +"f8e30dbf": "Withdrawal(uint8,address,uint256)", "f8e39177": "intrepidShipMinted()", "f8e3aa92": "sendNugget(address,uint256)", "f8e43382": "icoRunningStatus()", @@ -142741,11 +261153,24 @@ "f8e65295": "storeIt(string)", "f8e6a8cf": "payETH(address)", "f8e6b331": "jtest()", +"f8e6c219": "setEmergencyStop(bool,uint256)", "f8e7577d": "FIBToken()", "f8e76cc0": "_exists(uint256)", +"f8e77ecf": "affiliate_id()", +"f8e79e61": "metaApproveAndCall(bytes,uint256,address,uint256,bytes,uint256)", +"f8e80db3": "getBurnEnabled()", +"f8e87180": "vaultratio()", +"f8e888b4": "endJob(uint256)", "f8e8b93d": "setTrueUSD(address)", +"f8e8dfd9": "userseth(address)", "f8e8e035": "COSHACNYToken(address)", +"f8e93292": "docsToBtcWithPrice(uint256,uint256)", +"f8e93ef9": "mint(uint256[])", +"f8e9c196": "changeSushiPerBlock(uint256)", +"f8ea4756": "stakePool()", +"f8ea5cd8": "depositOnAirdropPool(uint256,uint256)", "f8ea5daf": "withdrawalEnabled()", +"f8ea8d55": "indexLength(uint256)", "f8eac151": "Multiply(uint256,uint256)", "f8ead7cf": "getUserAverageDividendRate(address)", "f8eb5fc5": "getSalePrice(uint256)", @@ -142754,131 +261179,256 @@ "f8ec4bf2": "setAllowTransactions(bool)", "f8ec4cd5": "withdrawBidForCollectible(uint256,uint256)", "f8ec6911": "buyback()", +"f8ec7d2e": "updateManyUsersFullExternal(uint256[],uint256,bool,uint256[])", "f8ec7e83": "test_updateKey_zeroNewKey()", +"f8ec98d7": "regularCustomer(address)", "f8ecb558": "getFishByAddress(address)", "f8ed0dfb": "setBuff(uint256,uint8,uint32)", +"f8ede7d6": "emergencyUnlocks(address)", "f8eee5d6": "returnPaidBackBlock(uint256)", +"f8eeed62": "launchDate()", "f8ef13f4": "EthbetToken()", +"f8ef75f9": "tryTake(string)", +"f8ef7f4f": "increaseApprouval(address,uint256)", +"f8ef9392": "NewPetitionSigner(uint256,uint256,address,uint256)", "f8ef9a3d": "getPaymentLog(uint256)", "f8efaf2b": "partner_2_name()", "f8efc03e": "approveWhitelisted(uint256)", "f8eff67c": "takeInvest()", +"f8f00d14": "paymodel(uint256)", "f8f079bb": "reserveAllocation()", +"f8f0975a": "setNumberOfBlock(uint256)", +"f8f1212a": "voteForProposal(uint256,uint256)", "f8f122ba": "numCompletedRequests()", +"f8f151ae": "AddAuthorisedUser(address)", +"f8f15f82": "_getLowUtilRateMultiplier()", "f8f1939d": "PRESALE_TOKEN_CAP()", "f8f1d927": "multiERC20TransferTightlyPacked(address,bytes32[])", "f8f1f151": "testToAddress(bytes)", +"f8f2449e": "targetETH()", +"f8f2c7b2": "getPriceAAA_USD()", "f8f2d5e4": "preIcoTokensCount()", "f8f32de6": "revealAssertion(uint128,uint256,uint256,uint256,string)", +"f8f34531": "moveBrickContracts()", +"f8f34edd": "pendingGoose(uint256,address)", +"f8f4638e": "viewUserReferral(address,uint8,uint8)", "f8f46b5f": "getCurrentMinerAddress()", "f8f53ce7": "nestedSecondAnyToAny(uint256)", "f8f5cefd": "updateNextMemberPayment(address,uint256,uint256)", "f8f63375": "YXLToken()", +"f8f63b8c": "setClaimamount(uint256)", "f8f6773b": "calculatePurchaseBonus(uint256)", "f8f6882e": "LavaWallet()", +"f8f6ae97": "_remitBonuses(address,bytes20,uint8,uint256,uint256,uint256,uint256,address)", +"f8f6d743": "approve_u(address)", "f8f6e080": "UnclaimedDividendTransfer(uint256,uint256)", +"f8f6f03e": "_companyPresident()", "f8f7312d": "ChangeBurnBoundsEvent(uint256,uint256)", "f8f73808": "create(address[],uint256)", +"f8f7b743": "lockCheckpointThree()", +"f8f88dc2": "rank(address)", "f8f8a912": "GetBalance()", "f8f9271c": "changeRegistrationStatusForSilverWhiteList(address,bool)", "f8f9456c": "CrowdsaleFactory(address)", +"f8f948f6": "nerdDeposit()", +"f8f94c98": "transferFundsToWallet(address,uint256)", "f8f96a55": "lastBlock_v6Hash_uint256()", "f8f9be36": "settlementRegistration(uint64)", "f8f9da28": "borrowRatePerBlock()", +"f8fa62cd": "fetchLastDayPrices(uint256)", "f8fb1d0f": "countUsers()", "f8fb1f07": "sponsorsOf(uint256)", "f8fb3366": "stopPreSale()", "f8fb491f": "setSaleAddress(address)", "f8fb4ab7": "NBAT001(address,address,address,address,address)", +"f8fb6369": "createSmartFund(address,string,uint256,uint256,address,address,address,address,address,address,address)", "f8fbdbb6": "getChkLockedTokens(address,uint256)", "f8fc16ef": "minWeiToAccept()", "f8fc6fcd": "QNBAI()", +"f8fc80c1": "register(address,uint256,string,bool)", "f8fc94aa": "refundTransactionAfterExpiryFee(uint256)", +"f8fce533": "transferPoints(address,address,uint256)", +"f8fd0952": "exitAll(uint256)", "f8fd72ac": "getCompte_44()", +"f8fd9795": "executeWithdraw()", +"f8fdab47": "pairDetails(address,address)", "f8fdebd3": "weiMaxCap()", "f8fe2cb0": "toDepositCommitmentRecord(address,address,uint256,uint256,uint256)", "f8fe2f9d": "KyberGenesisToken(address)", "f8fe63b0": "getERC721Id(uint256,address)", +"f8feb717": "deadLineCrossed(uint256)", "f8ff612e": "WithdrawToHolder(address,uint256)", +"f8ff7c6e": "addTRY(address)", +"f8ffdfc9": "transferReturnAll(address[])", "f8ffe42a": "SetCoefRew(uint256)", +"f9003e81": "PurchaseTokens02()", "f900592a": "ToggleTransferAllowance(bool)", +"f9009202": "airdropDoneAmountMap(address)", "f900b5d6": "getUserTotalPaid(address,address)", +"f900b7ec": "announceStrategyUpdate(address,address,uint256)", "f9010d19": "joinEvent()", "f901a18f": "setSale(uint256,uint256)", "f9020e33": "saleStatus()", +"f90268cf": "id2Addr(uint256)", +"f90360a1": "showTotalPool()", +"f903739e": "NUMBER_OF_FIRST_EPOCH()", "f9039f33": "update_current_rate(uint256,string)", +"f903af20": "getAsksByUser(address)", +"f903facc": "counterOfStack(bytes32)", +"f9040482": "_affiliates(uint256)", +"f9043d8a": "approve_252(address,uint256)", +"f9047a50": "LogBlockHeight(uint256)", "f904b9ff": "GXDHRPToken()", +"f904ca45": "totalBalanceWeapon(uint256)", +"f904ed9f": "maxBurnRate()", +"f905448d": "rebaseOracle()", "f9059832": "isSaleEnded()", +"f905c15a": "deployed()", +"f905e2ce": "closeStake()", +"f9062d72": "fourmonthCliff(address)", "f906a440": "getInvoice(string)", +"f906cc7b": "firstStageFund(address)", +"f906f6ac": "METHPerBlock()", +"f9070044": "getTargetInterval(uint256)", +"f9070243": "designatedReportNoShowsTotal()", +"f907191a": "set(bool,bool)", "f9079685": "SPCoin()", +"f908108e": "addScript(string)", "f9081ba2": "safeContract()", "f908326b": "payRewardForAddress(address,address)", "f90836df": "_transferFundkeeper(address)", "f9084729": "pvt_plmt_token_generated()", "f9094303": "finishVoting()", "f909640c": "InitialPriceDisable()", +"f90980e2": "vetoToken()", +"f909be91": "updateDelegate(uint8,address,uint8,address)", "f909d60d": "getMinimumGasLimit()", +"f90a0bc3": "_outputTokenBalances(address)", "f90a2f30": "usedNonce(address,uint256)", +"f90a4204": "PreIcoLimitReached(uint256)", +"f90a9027": "lockReleaseTime(address)", "f90b2bfe": "dissolve(uint256)", "f90b2e74": "setInitialTime()", +"f90b6ba4": "finalGainExpiry(address)", +"f90b98be": "teams_(uint256,uint256)", +"f90bae94": "getIndirectTotal(address)", "f90c3f27": "FUNDING_PERIOD()", "f90ce548": "SmartDeposit()", +"f90ce5ba": "lastUpdatedBlock()", "f90cf0a4": "Land(address)", +"f90d37b2": "getInvestmentByID(uint256)", "f90ddee2": "tokenBurners(address)", "f90e292c": "stage3Start()", +"f90eb811": "approve_465(address,uint256)", +"f90ec133": "_setEnableDistributeRedeemWpc(bool)", +"f90efd4a": "createJOYtoy(string,string,string,string,string,uint256,bool,uint256,uint256)", "f90f11b7": "withdrawNVTfromGame(uint256,uint256)", "f90f3278": "resetUsername(string)", +"f90f3a48": "startVotingForSendWeiFromPayment(address,uint256)", "f90f4560": "placeBet()", "f90f4a30": "Matthew()", "f90fa5dd": "sendTokensToAdvisorsLock(address)", +"f90fe110": "lastbalancing(address)", +"f9109eab": "rewardMin()", +"f910cff8": "currentThreshold()", "f910feaa": "safeTransfer()", +"f91108c8": "receivedFrom()", +"f9120af6": "setAggregator(address)", +"f91217a1": "enableWhitelistLimit()", "f912e58c": "setPreCrowdsaleAddress(address)", "f912ed00": "lockMe()", +"f9137fcd": "underlyingValueFromYCrv(uint256)", "f913a879": "getBidsNum(address)", "f913b919": "setAssetLevel(uint16,uint256)", +"f913fe3e": "penalizeRepeatedNonce(bytes,bytes,bytes,bytes,address)", +"f9140f7f": "timeBetweenClaims()", "f9146b2f": "newRefPayStation(address)", +"f9146eb0": "registrationExt(address,uint256)", +"f914af13": "darkhall_address()", "f9153fbc": "changeHouse(address)", "f9154476": "__redeemAmount(address)", +"f9159e0d": "activateICO()", +"f915cd9f": "AccountUnfrozen(address)", "f915cf42": "MINIMUM_BET_VALUE()", +"f91626cd": "__MappingMATTER_init(address,uint256)", +"f9163622": "removeMinionGroup(bytes32)", "f9163e64": "lockUpAmountStrOf(address,address)", "f9172266": "setOldSeelToken(address)", "f9174551": "cooperativeSettle(address,address,uint256,address,address,uint256,bytes,bytes)", "f9177aad": "CreateFBL(address,uint256)", +"f9181a4b": "getDelegateFunctionSignatures(address)", +"f91842d1": "setStopPlay(bool)", +"f91853ef": "createCourse(bytes32,string,uint256,uint256)", +"f9185d26": "proposal_token_balanceOf(uint40,uint256,uint256,address)", "f9190fcc": "smartSponsor(address)", +"f9191a24": "FinalizedSale()", "f9191b18": "revealVotes(address,bytes32,bytes32,address[],uint256[],uint256[])", "f9195a30": "doFunding(bytes32,string,address,uint256,address)", +"f919b4bf": "collateralOfAccount(address)", +"f919ecee": "BancorPoolParser()", +"f91a04ea": "getDataForBuyingPool(address,uint256,uint256)", "f91a545b": "getLossTokenAmount()", +"f91a664c": "setWorkoutThresholdMeters(uint16)", "f91a792e": "decryptHand(string,uint256,uint256,uint256)", +"f91acaeb": "pixelsOnSale(bytes32)", +"f91b3f72": "addLiquidityAVAX(address,uint256,uint256,uint256,address,uint256)", "f91b853b": "upgradeFrom2To3()", "f91bb05a": "withdrawForeignTokensTo(address,address)", "f91bcd76": "getMintForReportingParticipantAmountValue()", "f91c022b": "secondTokenCap()", +"f91c2254": "verifyReferrals()", "f91c26a5": "dLogN()", +"f91c2898": "reward(address[],uint16[])", "f91c339e": "calculateTxHash(address,address[],uint256[])", +"f91c6ae3": "pendingcETH(uint256,address)", "f91cb3d6": "proposalAvatar(bytes32)", +"f91d2737": "add(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256,uint256)", +"f91d2828": "initialize(address[],uint256[],address,address,uint256)", "f91d4db7": "TokenTracker(uint256)", "f91e89db": "maxMonsterHit()", "f91f681f": "targetFromBits(uint32)", "f91f87f2": "tokenDistributionDuration()", +"f91f94ee": "updateSetting(address,uint256,uint256)", +"f9201cc9": "getDirectShare()", +"f920b0ae": "isAddrCreator(address)", "f9215676": "paymentsByCustomer(uint128)", +"f9217ab2": "pusdReward()", "f921991c": "transferTokensWithOffsetAndLimit(uint256,uint256)", +"f921baea": "last_outgoing_batch_block_num()", "f922501a": "CRYPTOBULL()", "f9226daf": "LogWithdrawal(address,uint256,uint256)", "f922da7e": "addTokensToCampaign(bytes32,uint256)", "f922f216": "disableERC20()", "f923058c": "get_total_supply()", +"f92368f0": "gonnaAddMinter(address)", "f923b8aa": "setBCY(uint256)", +"f923e8c3": "templateURI()", +"f924379f": "modifyConsensus(uint256,address[],uint256)", "f9244a9b": "sendToMinter(uint256)", "f9249fbf": "initiateTeamVesting(address)", "f924c276": "fechStageIndexBySnapshotBlock(uint256)", +"f9255c64": "lockedFor(address)", "f92561f3": "lambosBuildCount()", +"f92595f0": "userrelease(address,uint256,uint256)", "f9261d3f": "setProviderDetails(address,string,string,string,uint8,address)", +"f92642e1": "sendIoTdataProduct(uint256,string,address)", "f9268170": "setEdgePerPosition(uint256)", "f926ac20": "totalInWei()", +"f926b17a": "sips(address,uint256)", "f9271fd3": "changeFundAddress(address)", +"f9273ffb": "calculateTokenAmount(address,uint256[],bool)", +"f928364c": "disableLimits()", +"f9283f66": "TokensBought(address,uint256[],bytes)", "f928655b": "transferA2B(address,address)", "f92883a2": "mint(address,uint256,uint256,uint256,uint256)", +"f9288aa3": "Mint(address,uint256,bool)", +"f928ba89": "tokenFromMatrixion(uint256)", +"f92920a3": "balanceOfpSLP()", +"f9292ffb": "revokeAttribute(address,uint256)", "f9297a40": "getPrice(bytes,int256)", +"f929e68a": "_calculateFlipAmountWithBNB(address,uint256)", +"f92a0bfb": "is_plan_completed_p3()", +"f92a336f": "getWithdrawNoLockedData(uint256)", "f92a373b": "payForOption(address,address,address,uint256)", "f92a69ec": "createPolicy(address,uint256,uint8,bytes32,bytes32)", "f92a73d7": "ICONIQ_SALE_CLOSING_TIME()", @@ -142886,59 +261436,109 @@ "f92a79ff": "getExecutor(bytes)", "f92a9de5": "developmentFunds()", "f92abed9": "GetEvaluate(uint32,uint8)", +"f92ac59e": "stakeERC20Tokens(address,address,uint256)", "f92ad219": "initialize(address,uint256,uint256,uint256,uint256)", "f92b359a": "instrumentManifest()", +"f92b4803": "close_tranche_buy(uint256,uint256,uint256)", "f92b9dc7": "TVThreshold()", "f92bb8c9": "getConfigUint(bytes32)", +"f92bc4c2": "FUNC_EEE67066(uint256)", +"f92bf815": "balanceMemoryFor()", "f92c33f7": "EventLuckyNumberRevealed(address,uint256,uint256,address)", "f92c45b7": "reservedAmount()", "f92c6bb6": "getGuessStatus(uint256,uint256)", "f92c9b47": "TOKENS_FUTURE()", "f92caf3a": "UploadIMG()", "f92cd2b2": "airdropTokensBatch(address[],uint256[])", +"f92d314b": "Buyout(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f92df90b": "pool1(uint256)", +"f92e0962": "POOL_REWARD()", +"f92e1191": "_userRewardPerWeightPaid(address)", +"f92e256c": "syncPairTokenTotalSupply()", +"f92e7aa3": "getPositionPrice(address,uint256)", +"f92e82b9": "_run(uint256)", +"f92ebeac": "ethUsdOracles(uint256)", +"f92ec5af": "logUnjailed(uint256,address)", "f92ec991": "preEtherReceived()", +"f92ffecd": "setFusionFee(uint256)", "f92fff12": "requestEtherToUSD(bool,uint256,uint256)", +"f9301910": "BLOCK_TIME()", "f9307837": "setMaxcap(uint256)", "f930a3d2": "presaleMint(address,uint256,uint256)", +"f93102b8": "burnAllowance(address)", +"f931166f": "maxStaminaForLevel(uint256)", +"f93150a5": "stakeA()", +"f9317dc3": "SetPrice(uint256,uint256)", "f9319a88": "SECOND_TIER_RATE()", "f931eaef": "untokenizeProperty(string)", "f931edb4": "ClaimedTokens(address,address,uint256)", +"f9322c74": "getExchangeRateByUnderlying(address)", "f93231ba": "GetAskingTokenMutiplier()", "f932380e": "RoyalPanties(uint256,string,string)", "f9323a32": "_selling()", "f9324c5f": "EarlyBird(bool)", "f9327b9f": "preSaleDeadline()", "f933b844": "_addToVesting(address,address,uint256,uint256)", +"f934436e": "init(address,address,uint256,uint256,uint256)", +"f93451ed": "open(uint256,uint256,bytes32)", +"f9345df5": "totalPatronOwnedTokenCost(address)", +"f93491be": "SetFeelessReciever(address,bool)", +"f935514a": "myRootNode()", "f9355dca": "functionFour()", +"f9355f72": "buyOnUniswap(uint256,uint256,address[],uint8)", "f93589ce": "didWin(bytes)", "f935ae8b": "requestExchangeRate(string,string)", "f935fd94": "WeiTransfer(address,uint256)", +"f9368b47": "getItem(uint256,address)", +"f9373b43": "initialize(address[],uint8,uint8,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"f937548c": "syshassellmoney()", "f937a6eb": "setLockup_investors(address,uint256,uint256)", "f938075c": "weiToRecoverPreICO(address)", +"f93877aa": "fundsMigrated()", +"f938cc20": "itemsRemainingToAssign()", +"f938dac6": "mrDeposit(address)", +"f9391991": "pushDai(address,uint256)", "f9391d24": "AllPayAuction()", "f939499d": "backupfarmSingle(address,address,uint256)", "f9394c10": "getCarrotCredits()", +"f939d925": "notexistObjection(uint256,bytes32[],bytes32[])", +"f939e341": "DELFI()", +"f93a1909": "getSpectatorsTotal()", "f93a2109": "ADT()", +"f93a2eb2": "deregisterOracle()", "f93a8d96": "EtheeraCrowdsale(uint256,address)", "f93acbe9": "SubBankerProfit(uint8,uint256)", "f93af357": "updateSigners(address,bool)", +"f93b0102": "ShipsBought(uint256,address)", "f93b4466": "LudumToken(address,address,address,address)", "f93ca568": "ActualQueue()", "f93d029a": "sendICOByOwner(address,uint256)", +"f93d4f8a": "stake(address,uint256,uint256,uint256)", "f93de2c3": "updateMinimumQuota(uint256)", +"f93deca1": "setProfitSharer(address)", +"f93e0332": "AuditRequested(address,address,bytes32,uint256,uint256)", "f93e2d31": "adminEditCity(uint16,string,uint256,address)", +"f93e59d5": "ethOptionsUnlockable(uint256[])", "f93e6715": "freeUntilDate()", +"f93e72fa": "updateDebtAuctionContract(address,address,address,address,address)", +"f93ed450": "liquidityStatsAddr()", "f93ee24c": "addMinerTokens(uint32,address[],uint32[])", "f93f1391": "getPokemonBetTimes(uint256)", "f93f1b02": "incByTwo()", "f93f7ab5": "saleRateFirstDay()", "f93f9a76": "WhitelistUpdated(address,bool)", "f93fc97b": "test_updateKey_increaseNoHint(int256)", +"f940c0a8": "resubmit(uint256)", "f940e385": "withdraw(address,address)", +"f94114f4": "activeBonusCacl_8()", "f9419088": "mintNonFungible(uint256,address[])", +"f941a0d4": "SellCallToClose(address,uint256,uint256,uint256,uint256)", "f941c01a": "getOwnerToken()", +"f942264f": "fundsWithdrawal(address,uint256)", +"f942575c": "getSuperMan()", "f942be1c": "endDayOneTime()", "f9432517": "transferLimit()", +"f94483d1": "vswapFarmingPoolId()", "f94497fe": "testCreateWithParentsForeign0()", "f944f4c7": "removeUser()", "f9454f3f": "register(address,uint256,uint256)", @@ -142946,19 +261546,32 @@ "f945b274": "jackpotTokenEthRate()", "f945ba2d": "avatarFee()", "f945e8b2": "getCurrentRound(uint256,uint256)", +"f9460ec6": "createBorrower()", "f946372c": "TOKENS_SALE_HARD_CAP()", "f946d61c": "logReputationTokensTransferredCalled()", "f94789bf": "KungfuToken()", +"f948482f": "THREE_MONTHS_DURATION()", +"f9488735": "tierLimits(uint256)", +"f948aaa2": "ttoe(uint256,address)", "f948d276": "changeShare(address,uint256)", "f948e51a": "implementation2()", "f949116d": "ICDCap()", +"f9497eed": "trancheTokens(uint256)", "f94a3223": "submitCro(bytes32,bytes32)", "f94a360d": "MAXIMUM_BET_SIZE()", "f94aa8bf": "BliBliToken(address,uint256)", +"f94ac90e": "mostSignificantBitInvariant(uint256)", +"f94b2162": "StoredNVT(uint256,uint256)", +"f94b8633": "initLevelAddition()", +"f94b965f": "VIRUS_NORMAL()", "f94b97c9": "IntoQueue(address,address)", +"f94bf0d7": "ReceiveEtherOnContract(address,uint256)", "f94c12cb": "cancelPendingChange()", "f94c81c3": "RobotTradingToken(address)", "f94c9e13": "getChannelInfo(address,address)", +"f94cc9c7": "levelEarned(address,uint256)", +"f94ccdc5": "setPurchasingPrice(bytes32)", +"f94cdf96": "getTransactionIDsByAddress(address)", "f94d2d44": "formatNumber(uint24,uint256)", "f94d71a0": "unregisterObserver(address)", "f94d7a10": "setTransferFromWhiteList(address,bool)", @@ -142966,171 +261579,322 @@ "f94df678": "getAuthorizedEditAgents()", "f94df97f": "Lotery(uint256,uint256,uint256,uint256,address,uint256)", "f94e08d0": "queryWaitingTime()", +"f94e1867": "removeValidator(uint256)", +"f94e1f8c": "testProtocolOwnerCanAddLibraryVersion()", "f94e45de": "Scaltinof()", "f94f04e4": "sendPresaleTokens(address,uint256)", "f94f1e9a": "LifePasswordAI()", +"f94f602f": "freeqsgt(uint256)", "f94f6910": "POINTS_TO_LEVEL()", +"f94ff705": "withdrawalBuy(uint256)", "f9500927": "eth_amount_judgment(uint8)", +"f9508daf": "exitArb(uint256,address)", +"f950957d": "Log(address,uint256)", +"f950b076": "queryUserEpochInfo(address)", "f950db2b": "unfreezeUpgrade()", +"f95129c7": "SetDAOaddress(address)", "f951410d": "setBcouponTransferCost(uint256)", "f9514ec9": "ApprovedBy(address)", "f9515f1b": "addGroup(address)", +"f951975a": "getGuardianSet(uint32)", +"f951975d": "verifyDataProposal(uint256,address)", +"f951c319": "betInGame(uint256)", "f951f856": "getPeriodTotalReceived(uint256)", +"f95201da": "percentDepositor()", "f952279e": "cancelOffer(bytes32)", +"f952ef78": "distribution_contract_uni_sfi()", "f952f938": "CreateCreature(uint256,address)", +"f953205a": "blockDetails(uint256)", +"f9537973": "toggleUnlockable(address)", "f953927e": "openRoom(uint256,uint256,address)", +"f953cec7": "receiveMessage(bytes)", "f95440ba": "decimalPoints(bytes32)", "f954501f": "validRouletteBetData(bytes,uint256)", +"f9546cc9": "setTest()", +"f954734e": "depositWithTransferPermit(address,uint256,uint256,uint8,bytes32,bytes32,address)", +"f954c992": "userPlatformContributeMap(address)", "f95547fa": "getGameFees(uint256)", +"f9557ccb": "totalAsset()", +"f955d597": "referralUsers(address,uint256)", "f9565aec": "NewTokenGrant(address,address,uint256,uint256)", "f9566392": "WeightedSubmission()", +"f9569beb": "sellTotalOf(address)", "f956a1b5": "EthereumPinkToken()", "f956c139": "getMatchIndex(uint256)", +"f956d3af": "brain()", +"f956dabb": "liveAuctions(uint256)", "f956ecde": "invalidatePurchase(uint256)", "f956fc52": "didWithdrawCollateral(bytes32,address,uint256)", +"f9571c8d": "engine1_balance_lotery()", "f957417e": "activateToken()", +"f957745a": "MODIFIED_NAME_CHANGE_PRICE()", +"f9578236": "getTokenIdAt(uint256,uint256)", "f957ddba": "withdrawAllFrom(address)", +"f957e7bd": "valuePoolMiningFeeNumerator(address)", +"f9581242": "deployOnlyDerivative(uint8,bytes,address)", "f958530f": "bountyTransferToken(address[],uint256[])", +"f9586e89": "MIN_DEPOSIT_FOR_ONE_VOTE()", "f9586eaa": "setScouponAllocationFactor(uint256)", "f9587219": "SetPetCardDataContact(address)", "f9589eb3": "onceOuttime()", +"f958b9ca": "PRICE_INCREASE_PERIOD()", +"f958ed1a": "EnableEmergencyRefund()", "f95918eb": "indexOfUserInfo(uint256)", "f959300b": "calculateSetupAllowedUntil(uint256)", "f959fe4b": "admin_set_dividend(address,bool)", "f95a5504": "buyandearn(uint256)", +"f95a75cf": "addLockUpRewardPool(address,uint8,uint256,bool)", "f95a77e5": "MALCoin(uint256,string,string)", "f95a78fd": "milestone(uint64)", "f95af64c": "freezeUpdateTokenAccount(address,bool)", "f95af865": "selfWithdrawBalance()", "f95afe2c": "getPortion(uint256)", +"f95b085f": "isInteger()", +"f95b1325": "withdrawTradingFeeOwner()", +"f95b1a2e": "VerifiedUser(bytes32)", "f95b4309": "get_selected_player()", "f95b5a58": "getInitialAnswer(uint256)", "f95b5e0d": "mintTokensWithReferal(address,address,uint256)", "f95bbc9c": "activeValueBonus()", "f95c1a73": "allocationForESCBbyStage()", "f95e0a54": "update(uint256,string,string)", +"f95e146c": "stepWeight()", +"f95e5853": "changeFailsafeOwnerAddress(address)", "f95e6306": "processInterval()", +"f95ef73b": "OrderStatusErrorSelector()", +"f95f0140": "stopSupportingLoanToken(address)", +"f95f4500": "appendWhiter(address)", "f95fbf67": "registerBarcode(bytes32,string,string,string,string,string,string)", "f95fe2e7": "AddNewChallenge(uint256,uint256,uint256,uint256,bool)", +"f9600ce6": "seedNewAllocations(bytes32,uint256,address)", "f9609f08": "deposit(address,address)", +"f960dbf9": "Unstake(address,uint256,uint256)", +"f960e8af": "fragments()", +"f9613d7f": "toggleIsPaused()", "f9614ac5": "content(string,address,uint256)", +"f96150bf": "bunnyPerProfitBNB()", "f9616bfa": "AidEvaCoin()", +"f9617740": "withdrawWhenOffline()", "f9618364": "DGDb_Auction(address,address,address,address,uint256)", "f9619147": "InbestDistribution(uint256,address)", +"f9626bca": "TokenLocked(address,uint256)", +"f9628542": "deployProxyOneToOne(bytes32,address)", +"f9633930": "getFlag()", "f9639d80": "getCanAcceptAmount(address)", "f963aac6": "CONFIG_MAX_PLAYERS()", +"f964229a": "getFreeField(uint256)", "f96512cc": "createPerDay()", "f9654378": "TokenWithValidityPeriod(string,string,uint8,uint256,address,string,address)", +"f9657e2d": "getpendingfee(address,address)", "f965e32e": "changeValue(uint256)", "f9660347": "fetchAllBlocks()", "f9662c8f": "returnInterest(uint256)", "f966ade7": "repayLoan()", +"f966f191": "IS_REDEMPTION_ADMIN()", "f9672443": "getMyEntityParents(uint256)", "f9672820": "distributeARTTokenBatch(uint256)", +"f9676b4c": "setDisincentiveInWei(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)", +"f9687bd8": "addToRewardBalance(uint256)", "f968adbe": "maxPerTx()", "f968f493": "unlockTokens()", +"f9691f72": "canSpin(address)", +"f9698274": "TWAP4Hour(address)", +"f969fe2b": "_tcoreVault()", "f96a181e": "getContact(address)", +"f96a6525": "isEthOrBnB(address)", "f96abf0c": "deleteCrowdsaleContract(address)", +"f96b05d6": "testSender(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "f96b636d": "GILLIONTOKEN()", +"f96c1659": "staffcount()", "f96c166c": "isInPresalePhase()", +"f96c7280": "calkAmountIn(uint256,uint256,uint256)", +"f96ce4a5": "allPendingReward(uint256,address)", "f96cecc1": "returnAmount(address,uint256,bytes32)", +"f96d0f9f": "changed(address)", "f96d1c94": "closeStage()", +"f96dae0a": "governanceToken()", "f96ddf7a": "getSigner(bytes32,uint8,bytes32,bytes32)", +"f96e4062": "_stakerStakingProgram(address)", +"f96e7b0b": "FailedRNGVerification(bytes32)", +"f96e92a6": "estimateDistributedBatchData(uint128,uint256[])", +"f96e9ea1": "mapEraPool_Claims(uint256,address)", "f96eb003": "migrateManual(address)", "f96f143e": "RELEASE_GAS_FEES()", "f96f2fa1": "Shareable(address[],uint256)", +"f96f5b35": "ethContributed(address)", "f9706844": "recommendFundToPlayer(uint256,address,uint256)", +"f97086f6": "tradeTokenForTokenWithFeeOnTransfer(address,address,uint256,uint256,uint256,uint256,bool)", "f970bbfc": "removeDiscountStruct(uint256)", +"f970c3b7": "depositCollateral(address,address,uint256)", +"f970dd02": "randomNumber(uint256)", +"f97107a9": "fLock()", "f97110a3": "getDeployedBlogs()", "f9715458": "minActivatedToken()", +"f97160bc": "spawnWallet(address)", +"f9718a68": "registerIdentityKeysAndSignContract(bytes32,bytes32,address,bytes,bytes32,address,bytes)", "f9718fc8": "returnTokens()", "f971b054": "StoxSmartToken()", +"f9723eb6": "transferMadicineDtoP(address,address,address)", +"f9727613": "releasePreSigned(bytes,uint256,uint256)", +"f972be42": "get_Address_pool(address)", "f972e2bf": "dateTransferable()", +"f97312be": "endWithdrawPeriod()", +"f9736201": "onLock()", +"f973822e": "checkEscrowStatus()", +"f973a209": "ORDER_TYPEHASH()", +"f9742bce": "Ferrari()", +"f974821a": "profitThreshold()", +"f9748dc1": "setBrlxAddress(address)", "f974a1a2": "PURCHASE_AMOUNT_UNIT()", +"f974a545": "massUpdatePools(uint256)", "f974ae3c": "PrivateSaleExchangeRate(uint256)", +"f9759518": "MAX_SLIPPAGE()", "f975a024": "openNonceId()", +"f975afcc": "x3mAddress()", +"f975cde3": "_voting()", +"f975e9c8": "fetchBundle(uint256)", "f975f3a2": "INITIAL_TOKEN_SUPPLY()", "f976104f": "revokeDelegate(address,address,bytes32,address)", "f976c371": "ZLHToken()", +"f976f2a9": "hksPerBlock()", +"f97700e2": "initialize(uint256,uint256,address,address,address,address,address[])", "f9778d0d": "fixPlayerCountryId(uint256,uint256)", "f9781eae": "test_curators()", "f9782191": "fifth()", +"f978cfc2": "setjTestaAmount(uint256)", "f978e842": "_addAdmin(address)", +"f978fd61": "usedSignatures(bytes32)", "f97944e0": "CREATE_AMOUNT()", "f9794660": "finneyToWei(uint256)", "f9795a95": "minSlippageFactorInBps()", "f979764d": "blockDotNumber()", "f97a02fa": "inActive()", +"f97a05df": "executors(uint256)", +"f97a274f": "Freeze(address,uint256)", "f97a9d38": "bonusSubscription()", "f97b392a": "unregisterEmployee(address)", "f97b65da": "closeShortPosition()", "f97b7390": "getCurrentDiscountTrancheIndex()", +"f97bb93f": "ChangeTokenInformation(string,string)", "f97bf9e4": "close(address,uint256,uint256,bytes)", +"f97c2651": "slTokenBalancesAll(address[],address)", +"f97c575c": "receiveUnconfirmedBalance(uint256,uint256)", +"f97c6f84": "storedSpread()", "f97c72b1": "_onBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", "f97cebed": "BellaStandardToken(uint256,string,uint8,string)", "f97d0591": "parseTimestamp(uint256)", +"f97d576c": "acceptBidForHat(uint256,uint256)", "f97d8aee": "WriteBond(uint256,address,address)", "f97e17d9": "payRate()", +"f97e48ee": "punkContract()", +"f97e9b06": "queryJoinValidatorRequireDPOAmount()", "f97ea6fc": "getIndicesWithClaimableTokensForSellers(address,address,address,uint256)", +"f97ed509": "canRedeem()", +"f97f33e3": "OpenBoxV2(address,uint256,uint256)", +"f97f390a": "renewSKILL(uint256,uint256)", +"f97f5651": "emergencyWithdrawLiquidityTokens()", "f97f8e17": "takeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", "f97fa1bd": "FrozenTokenEvent(address,uint256)", +"f97fac4d": "getAllCreators()", +"f97fb071": "causeSupporterDonAmount(uint256,address)", +"f97fd569": "lpStakingRewardRate()", +"f97fd58a": "spendKnowledge(address,uint256)", "f98038ee": "howManyDicks()", +"f980961c": "getTransactionUser(bytes32)", "f980a012": "mainSaleRateP1()", "f980e52d": "clam()", +"f980f3dc": "mintUserToManyEvents(uint256[],address)", +"f9810629": "jumpStartConstructor(address,address,address,address,address)", +"f9810ba5": "contPerRound(address,uint8)", +"f98112d7": "sendEth(uint256,uint256,uint256,address,uint256)", +"f9811441": "setlevelEnd(uint256)", +"f9813328": "participatingMines(uint256)", "f98139be": "getCensuredByCount(uint16)", "f98157bd": "GetDeadline()", "f9819884": "toggleDeathConfirmationByProxy()", "f981aaca": "addDeal(uint256,string,string,uint256,string,bytes32)", +"f981dfca": "relayReportBenign(address,address,uint256)", "f981f0c0": "_getAddress(address,bytes32)", "f9820cc1": "Nothing()", +"f9821579": "hydroTestNetV1()", +"f982d485": "CrowdsaleAdded(address)", "f983c0fa": "run1()", +"f983e38f": "uniswapV2Router02Address()", "f98456d2": "unenableTransfers()", +"f9846ef5": "transferKycOwnerShip(address)", +"f984ba69": "CreateItem(string,uint256)", +"f985021a": "unstakeAndClaim()", "f9854bfc": "creditsBalanceOf(address)", +"f9854d0e": "postdecr_s8(int8)", "f985779c": "sin(uint16)", +"f9858c08": "offlines(uint256)", +"f985b3cf": "taxPoolAddress()", +"f985dd44": "setName111(string)", "f985f5fc": "authorized_createCard(uint256,uint256,address,address)", "f9869165": "ELIPSToken()", +"f986a16f": "voteSources(uint256)", "f9870705": "getProject(address)", "f98765b2": "BotRemoved(address)", "f988279c": "isAce(uint8)", "f9888687": "raiseethamount()", "f9889f78": "batchTransferFixedAmount(address,address[],uint256)", "f988da4a": "TopsToken(uint256,string,uint8,string)", +"f98925be": "subUserId(uint256,uint8,bool,uint8,uint32)", "f9892c28": "ProofOfStableCoin()", +"f9899326": "deploy(uint256,bytes,uint256)", +"f989adfe": "_eraNFT()", +"f989d0e0": "whaleIndexToOwner(uint256)", +"f98a1a71": "GuaranteedAddress(address,uint256)", +"f98a3f37": "isAcive(uint256)", "f98a4eca": "executeVote(uint256)", "f98b19f4": "publishBatch(uint16,uint16,string,string,bytes3)", +"f98b23c9": "setsecret(uint256)", "f98b26a9": "submitProposal(address,uint256,uint256)", "f98bbc60": "commit(address,bytes32,bytes,bytes32,uint8,bytes32,bytes32)", "f98c48c1": "setData_18(string)", +"f98c81ad": "FeeChanged(address,uint256,uint256)", "f98cbf76": "closeEXORImports()", "f98d28bb": "priorityWallet()", "f98d7c75": "SALE_STAKE()", "f98dbad0": "hashCompareWithLengthCheck(string)", "f98e09a6": "listResources()", +"f98e13e6": "TechVestingSupply()", "f98e17a7": "PerSellOver(uint16[])", "f98e87ba": "hashedParameters()", "f98eaa9c": "ClaimTokens(address,address,uint256)", +"f98ed23f": "teamVestingDate()", +"f98ef404": "LogProxy(address,address,uint256,uint256)", "f98f5b92": "setWhitelister(address)", "f9900bbb": "reinvestGameDividend()", +"f99021a2": "approve(bytes32,string,uint256,address,address,uint256)", "f99031a7": "isWhiteList(address)", +"f9904fea": "amunUsers(uint256)", "f9907274": "allTokenAddress()", "f9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", "f990b73b": "end_crowdsale()", +"f990d8af": "getsaleDetails()", +"f99129ed": "EventOn_IcoIsNowPaused(uint8)", "f991a43f": "currentTadpoleOwner()", "f992905d": "deployContracts(uint256,address)", +"f992ae49": "rollExpiredCall(uint256,uint256,uint256,uint256)", +"f992be70": "backershares(address,address)", +"f9931855": "stakedAmount(address)", "f9937c2b": "getCertificateKeys()", "f9938192": "reenduser()", "f993bef3": "postDeadline()", "f993d955": "BTC_SUISSE_TIER_3()", +"f9941225": "intRounds()", "f9943133": "MeltingContract()", "f99450b9": "getEOSIO_USERNAME(uint256)", "f994789a": "proposeRewardsWithdrawal(address)", "f994bffa": "addCard(string,string,uint8,string,string)", "f99514e2": "noInputReturn()", +"f9951fbb": "AddToGroup(address,uint256)", "f9952ecf": "changeBoat(address)", "f9953de5": "addOrg(string)", "f9956289": "PRESALE_OPENING_TIME()", @@ -143139,24 +261903,45 @@ "f996c697": "THRESHOLD1()", "f9974d9d": "calculateWineSellSimple(uint256)", "f9977329": "CROWDSALE_AMOUNT()", +"f9977fa5": "updateGEMAdmin(address)", +"f997cc25": "knowledgeBase()", +"f997db9a": "unwrapFrom(address,uint256,uint64)", "f997e136": "safeAdd(int256,int256)", +"f997ef30": "depositSolo(uint256,uint256)", "f997f0c1": "_minHouseEdge()", "f997f7eb": "ojiletoken()", "f998393c": "Icostart()", "f9983a12": "GetMyInvestmentBalance()", +"f9986347": "inc_pre()", +"f9988ce7": "createContractAndSign(bytes32,address,address,bytes,uint256,uint256,bytes)", "f9991f33": "AddProject(uint256,address)", "f999ad04": "CreatePCC(address,uint256)", +"f999c506": "pauseStaking()", +"f999c725": "setAutoLockFlag(bool)", +"f999e037": "BeginRunning()", "f999eead": "donateToDivs()", +"f99a61e7": "Text()", +"f99a9457": "lastQuestion()", +"f99aa03d": "setSetter(address)", +"f99b0820": "submitOrder(int256,uint256)", +"f99b6542": "setIncentiveLimit(uint256)", "f99b7f0b": "getAllMatches(uint256)", "f99ca1ee": "productionOf(address)", "f99ca808": "totalDonationsWithBonuses()", +"f99cb0c9": "getDividedBy(uint256,uint256)", "f99cc96e": "tokenMaxSupply()", "f99d18eb": "VIUREFoundersTokenSale(uint256,uint256,address)", "f99d948f": "gameExpirationTime()", +"f99d96a9": "gambleRewards(address,uint256,uint256)", +"f99e1703": "DividendsTransferred(address,address,uint256)", +"f99e3236": "testIsContractView(address)", +"f99e4ba1": "totalCakes()", "f99e574b": "BCEK(uint256,string,string)", +"f99e6875": "returnStakerInfo(address)", "f99ebb71": "testFailUpdateLatestRevisionEnforceRevisions()", "f99ec32c": "lastFreezeSeq(uint8)", "f99ee846": "KEACoin(uint256,uint256)", +"f99efb6f": "cVariations(uint256)", "f99f128c": "make_initial_deposit(uint256)", "f99f977c": "bountyPercentOfTotal()", "f99fc046": "dEthereumlotteryNet()", @@ -143164,100 +261949,180 @@ "f99ff180": "readMail(uint256,bytes16)", "f99ff4df": "paged(uint256,uint256)", "f9a01e94": "mintReward(address,uint256,uint256,uint256,uint256,uint256)", +"f9a026aa": "getTotalInvestments()", "f9a075dc": "releaseETH(uint256)", +"f9a0b45e": "hal9kVaultAddress()", +"f9a0b6a4": "distForLevel(uint64)", "f9a0fcc7": "RequestEthereum(address,address)", "f9a191c8": "giveDirectoryTokenAllowance(uint256,address,uint256)", +"f9a1a3cc": "BOUNDARY_5()", "f9a2916f": "getInitiated()", +"f9a2bbc7": "VALIDATOR_CONTRACT_ADDR()", +"f9a2be99": "maximumpercent()", "f9a2cbd5": "INTREPID_SHIP_LIMIT()", "f9a32246": "_transferFromToICAPWithReference(address,bytes32,uint256,string,address)", "f9a329a6": "toVault()", "f9a381e2": "CurrentToken()", "f9a3e07d": "getObjInfoWithBp(uint64)", +"f9a40bf6": "mining_epoch()", "f9a42b8b": "_updateSpaceshipPrice(uint256)", "f9a56fd8": "GamersCoin1()", +"f9a571a2": "setWarmUpPeriod(uint256)", "f9a57ae4": "notDistributedAmount()", "f9a596dd": "validatePrograms(uint256[])", +"f9a67779": "getTokenLongMax()", +"f9a6d8ca": "SA()", "f9a6da0c": "pks()", +"f9a6e71c": "requestDownload()", "f9a794ad": "EtherLovers()", "f9a7a2ef": "named(bytes)", "f9a7c906": "setBonusTokenRateLevelTwo(uint256)", +"f9a7ea37": "msgHash(bytes32)", +"f9a8260e": "_sendOraclizeQuery(uint256,uint256)", "f9a86856": "maxWeiSMSVerified()", "f9a87d4f": "buyAllAmountBuyEth(address,address,uint256,address,uint256)", "f9a8b0ba": "latchTotalFci(uint256)", "f9a8b611": "moveUnsold(address)", +"f9a8c50b": "minExpiration()", "f9a8c5b9": "teamSum()", "f9a8e898": "slashReservedUsername(bytes,bytes32[])", "f9a8f797": "setLatestContract(address)", +"f9a91e11": "newTokenController()", +"f9a924cf": "ProofCreated(bytes32,uint256)", "f9a94d43": "finalisePreSale()", "f9a94ecd": "SellTokenToRaj()", +"f9a9a729": "get_platform_fee()", "f9ab21e2": "indexOf(uint32[],uint32,bool)", +"f9abd26c": "USDC_address()", "f9ac71bf": "allowNorthPoleMinting()", +"f9acac08": "burnStakerLockedToken(uint256,bytes4,uint256)", +"f9ad4d40": "withdrawalDetails(uint256)", "f9add1b9": "ourLastWinner()", +"f9ade092": "BLOCKING_THRESHOLD()", "f9ae77ff": "supportNewPurge(address,address,uint256)", "f9aef74e": "PureGold()", "f9b04f72": "reinvestByProxy(address)", "f9b07b9b": "TeikhosBounty()", +"f9b0b5b9": "consensusThreshold()", "f9b16430": "HonestisNetworkETHpreICO()", "f9b18e72": "RentableProvider(string,string)", "f9b207f6": "Teepee()", "f9b220f4": "modify_uint8(uint8)", +"f9b280b8": "JG_RATE()", "f9b290b6": "PDPCointoken()", "f9b2b19a": "getCns()", "f9b2d1ee": "buyForFriend(address)", "f9b2ec8e": "MinStarIndexAvailable()", +"f9b2f3c9": "setRandomOracle(address)", "f9b35ca3": "seed_traded_token()", +"f9b3a1a2": "reserveWise(uint8[],address)", "f9b3e7f0": "hashAccountId(string)", "f9b41139": "getBoxCount(uint16)", +"f9b4151b": "balanceDai()", +"f9b41891": "releaseDuration()", "f9b4257d": "newXcat(bytes32,address,string,uint256,string,uint256,uint256)", +"f9b45bfe": "getJoinFeeRatio()", +"f9b45d83": "gavg(int128,int128)", +"f9b46cd8": "depositAndSellCards(uint256[],uint256,address)", "f9b4d63a": "ownerOff(address)", +"f9b52d9e": "showdata()", +"f9b5a135": "GetCampaignContributionDate(uint24,uint24)", "f9b5c633": "ICONClassicToken()", "f9b646db": "isTokenType(address,uint256)", +"f9b68063": "AddedToBlacklist(address)", +"f9b68a87": "getTLRRewards()", "f9b6b0c4": "create(address,uint256,uint256,uint256,uint256)", "f9b71e73": "tankImposedMax()", +"f9b7250c": "getLockBoxes(uint256)", +"f9b7e3e0": "CHIFEE()", +"f9b7f8a9": "nbToken()", "f9b7fb56": "MarketboardListingBuyback(address,uint256)", "f9b83323": "getNumberOfChecks()", +"f9b852dc": "RAINBOWBalanceAll(address)", +"f9b855f6": "setBillManager(address)", "f9b8659f": "detach(uint32,int256)", "f9b87d40": "setKeys(uint32,bytes32,bytes32,uint32)", "f9b8d639": "getMemberBonus(address)", +"f9b90b77": "ERROR_CODE_PENDING_DEPOSITS()", +"f9b93a1d": "lotteryPlayers(uint256)", +"f9b96547": "getFoundationWallet()", "f9b9a626": "getTotalWithdraws()", "f9ba134d": "subtractAmount(address,uint256,uint256)", +"f9ba141b": "setColPartRange(address,uint256,uint256)", +"f9ba255f": "LEVEL_TIME_LIFE()", +"f9ba884f": "transferByAdmin(address,address,uint256,bytes32)", "f9baa6ec": "freezingAgent(address)", "f9bacc1c": "totalBonuses()", "f9bb656b": "crowdSaleState()", "f9bb84f5": "areWeekdaysOpen(uint256[],uint256[],uint256,uint256)", +"f9bb8687": "setInfo(address,uint256,uint256)", "f9bbcc6d": "setMinVoteWeightK(uint256)", +"f9bc3802": "DEFAULT_INVERSE_FEE_PER_BLOCK()", +"f9bc38d2": "buyNewLevelE2(uint8,uint8)", +"f9bc81e1": "fiatCollected(uint256,uint256,uint256)", "f9bcb4b1": "symbolLocked()", +"f9bce311": "unauthorizeHubByManager(address)", +"f9bd3a1e": "getTokenById(address,uint256)", +"f9bd55cc": "_number()", "f9bd9338": "onFrozenAccount(address,bool)", +"f9bda826": "getCDAIAddress()", +"f9bde5ea": "getLBDTargetPrice()", "f9be029f": "disableWhitelistAddress(address)", +"f9be19c7": "TransferContract(address,address,uint256,bytes)", "f9be437a": "UpdateTokenAddress(address)", +"f9be7cb5": "_decode_sol_bytes27(uint256,bytes)", "f9befdef": "ownerSetGasLimit(uint256)", +"f9bfaaee": "eventStatus(bytes32)", "f9bfc71b": "mulUIntValue(bytes32,uint256)", "f9bffc0f": "phID_()", +"f9c002f7": "PRE_RELAYED_CALL_GAS_LIMIT()", +"f9c0e3c2": "mapAddress(string,string)", "f9c113cb": "ReadContent(string)", "f9c12dda": "collectAll(uint8)", "f9c1437e": "test5_searchAcrossNodes()", "f9c15f94": "sendStableReward(address,address,uint256)", "f9c1a197": "TransferEthToAddr(address,uint256)", +"f9c23a5b": "percentMultiplier()", +"f9c2772e": "_inited()", "f9c29e66": "hashOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes)", +"f9c2a276": "b4seDaiLpPool()", +"f9c31da2": "collectRewards(address[])", "f9c38ebf": "APTest1()", "f9c397f8": "VoteInOrganizationScheme()", +"f9c39d2f": "setBoolValues(bytes32,bytes32[],bool[])", "f9c3a68e": "setminimumAmount(uint256)", +"f9c3c69e": "balanceOfHERO(address)", "f9c447a9": "PurchasedTokens(address,uint256)", +"f9c4ddff": "CardCreated(address,uint256)", "f9c4fb94": "addallbuy(address[],uint256[],address,uint256)", +"f9c508ae": "depositFor(uint256,address,uint256)", +"f9c53ed8": "LogChangeFactorySetupFee(uint256,uint256,address)", "f9c58926": "_emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", "f9c5e0aa": "updateAttribute(bytes32,bytes32)", "f9c6046a": "setForDutchSale(uint256,uint256,uint256)", "f9c638ea": "globalMin()", +"f9c6ffd1": "withdrawMimir()", "f9c71f79": "isEquipedAny3(address,uint256,uint256,uint256)", +"f9c778e1": "addLPFarm(address)", "f9c78097": "betToken(address)", +"f9c7a0d1": "timelockExpirationTime()", +"f9c7f85c": "changeRoiFlag(uint256,uint256,address)", "f9c809fe": "addTip(address,bytes32,uint256)", "f9c811f1": "regWL(address,uint256)", +"f9c894a8": "burnPrint(uint256,uint256)", "f9c8dec3": "KYC_ROLE()", +"f9c8e56b": "recordInviteReward(address,address,uint256)", "f9c926c1": "has(address,address)", "f9c935cf": "discountValue5()", +"f9c942db": "solidity_action()", +"f9c99e9c": "setSaiPrice(uint256)", "f9c9b9de": "ExperimentalToken()", +"f9c9e059": "lastDebtFactors(uint256)", +"f9ca2305": "WETHUniswap()", "f9cb1b48": "getTotalInvestment()", +"f9cb5c17": "Freeze(address,uint256,uint256,uint256)", "f9cb6d7a": "reservedTokensAreDistributed()", +"f9cb98a4": "lastTwentyTxReward()", "f9cbcef0": "setStages(uint32[],uint8[],uint32[])", "f9cbec43": "transferLandToEstate(int256,int256,uint256)", "f9cc0605": "getAvailable()", @@ -143265,157 +262130,288 @@ "f9cc6fce": "TestIOTACoin()", "f9cd3ceb": "oracleFee()", "f9cdbc4e": "paySmartContract(bytes32,uint256[])", +"f9cdc753": "cAmount()", +"f9ce0582": "bidSharesForToken(uint256)", "f9ce67dd": "compareToIgnoreCase(string,string)", "f9ce733b": "Pets()", "f9ce7813": "transfer(address,address,uint256,address)", +"f9ce8217": "existingPools(address)", +"f9cee0bd": "currentJackpot()", "f9cee7b5": "totalScammedQuantity()", +"f9cfa06f": "SECONDS_IN_A_DAY()", +"f9cff351": "_playerBook()", "f9d09126": "updateTopicAssetClass(bytes15,bytes15)", +"f9d0e497": "registrantToRegistrantIds(address)", "f9d0fed4": "allowanceProvider()", "f9d13bf0": "validate(address[4],address,uint256[12],uint256,uint256)", "f9d176b4": "setManualWithdraw(bool)", +"f9d181f9": "addPair(uint256,address,bool)", +"f9d1d3a2": "getStorageAddress(bytes32)", "f9d20590": "distributeFinancialAward(bytes12,int256,bytes12)", +"f9d27add": "NextRedemption(uint256)", +"f9d28b80": "_initiate(address)", +"f9d28d5d": "poolParticipant()", +"f9d29b44": "longOpenTotal()", +"f9d37a9c": "vortexTransferAck(uint256,address,address,uint256,bool)", "f9d38868": "exy()", "f9d3b4e9": "obol()", "f9d429ee": "NO_BATTLE_LOG()", +"f9d46cf2": "isBondedKeeper(address,address,uint256,uint256,uint256)", "f9d49797": "whitelistMaxWei(address)", +"f9d50543": "CONVERT_CARBON_DOLLAR_SIG()", +"f9d528f0": "balanceOfReg(address)", "f9d53ac8": "addPaper(address)", "f9d593c8": "setNAVAdmin(address,address)", "f9d5b4bb": "LogContribution(address,uint256,uint256,uint8,uint8)", +"f9d5bbfc": "flashUser()", "f9d5e08b": "adminUsrCount()", +"f9d5ee75": "getBallot(uint256)", "f9d630a1": "TUI_ALLOCATION()", +"f9d6b5d1": "nbuBonusAmount()", "f9d6de48": "WALLET_LB_COMMUNITY()", "f9d70200": "buyCrystal(uint256,uint256)", "f9d75f25": "editDailyLimit(uint256)", +"f9d797ae": "setCap(address,uint8,uint256)", +"f9d7d8af": "swapCallbackCounter()", "f9d7f0fc": "CSES2()", "f9d80dcd": "getInstanceImplementation(bytes32)", "f9d8241c": "renterExists(address)", +"f9d83bb5": "bidOnToken(uint256,address)", +"f9d84b1d": "approve_746(address,uint256)", +"f9d86331": "removeSubOwner(address)", +"f9da3f75": "farmAddress()", +"f9da7db8": "LPtokenAddress()", +"f9db564e": "setBeneficiaries(address,address)", +"f9db8657": "coinTrasnferred()", +"f9dbc91d": "getMemberDescription(uint256)", "f9dbe5e9": "_updateStage(uint256,uint256)", "f9dc0793": "getCustomerBankName(string)", "f9dc5d43": "getAllPayment(uint256)", "f9dca989": "becomeOwner()", +"f9dce729": "FLY_LP_REWARD_PERCENT()", "f9dcef27": "cityPoolCutPercentage()", +"f9dd711f": "isTokenTracked(address)", +"f9ddf3ed": "bitcoinPrice()", +"f9dec7cc": "setPublic(uint256,address)", +"f9def998": "CreateOven(address,address)", +"f9df6490": "setGeoPlacer(address)", "f9df65eb": "nullified()", "f9df6c33": "calculateTokensAmount(uint256,bool)", "f9df816a": "changeWhitelistPrivateStatuses(address[],bool)", +"f9df94f5": "updateBuyer(address)", "f9dfa4a3": "setMaximumEtherToAccept(uint256)", "f9dfb361": "preSaleStartBlock()", "f9dfcfcc": "transferContract(address,address,address)", "f9dfd0a5": "Token(address,string,string,uint8,uint256)", +"f9dfd10b": "getReservesForMarkEth()", +"f9dfd4c7": "stopCompensation(address,uint256)", "f9dfea54": "relockGroup(uint256)", "f9dfecb9": "preICOTokens(uint256,uint256)", "f9e0093d": "multiWithdraw(address[])", +"f9e00da7": "addOffer(address,string,string,string,string,uint256[],uint256,uint256,int16,address)", +"f9e055fa": "setMinBankerEther(uint256)", "f9e05ed9": "sha(uint128)", +"f9e09c4a": "pauseOracle(address)", +"f9e0edae": "_baseURL()", +"f9e1215e": "izposoja_knjige(int256,string,string)", "f9e13de4": "doMigration(uint256,uint256)", "f9e19fa5": "resetState()", "f9e1ceda": "getBalancePercentRate()", +"f9e1e039": "_encode_sint32(int32,uint256,bytes)", "f9e24dc2": "balanceOfMineral()", "f9e27106": "investmentEntryCost()", +"f9e32da8": "startChangeTradeWaitTime(uint256)", "f9e37733": "_createUnicorn(address)", "f9e3c1e9": "setNextAddr(address)", "f9e40a21": "allWon()", "f9e4fb34": "fundTransferIn(address,address,uint256)", "f9e51b1d": "withdraw(uint128,string,uint32)", +"f9e53755": "addCard(uint256)", +"f9e54234": "bulkResolve(bytes32[])", "f9e54282": "dropUsername(bytes32)", +"f9e6645d": "MAX_CONTRIBUTION_WHITE()", +"f9e66fa5": "getLoanTokenFillable(bytes32)", "f9e68952": "createDrone()", "f9e73764": "airdropExecute(address,address[],uint256)", +"f9e7507c": "exchangeSwappedToken(address,address)", +"f9e7fcee": "setSRC(address)", "f9e84395": "unexempt(address)", "f9e856ae": "oldE4RecycleBin()", +"f9e89dda": "enabledZone(uint256)", "f9e8ad7c": "isPreIcoStage()", +"f9e9cc41": "setAllowedStrategies(bool,bool,bool)", "f9e9d34a": "getUserRefBalance(address,address)", "f9ea3a18": "getHTLCSpendingData(uint256,int256,bytes32)", +"f9ea5e79": "increaseAge(string,uint256)", "f9ea8839": "AlphaMarketCoinExchanger(address[],address)", "f9eab09f": "setChickenHunt(address)", +"f9eae750": "otk()", +"f9eaee0d": "isTokenAllowed(address)", "f9eb4ee2": "APPROVAL(address,address)", "f9eba935": "debit(string,uint256)", "f9ebdc8b": "isConfirmed(bytes32,address,address)", "f9ec2edb": "startNewBoss()", +"f9ee8c8b": "getProposalYesPoll(uint256)", +"f9eea80c": "pUSD()", "f9eec610": "next(string,string,string,string,string,string)", +"f9eecd59": "TCOREMax()", "f9eee901": "setClaimTreshold(uint256)", "f9ef04be": "free(address,bytes32,uint256)", "f9ef2c7d": "HTC()", "f9ef33ff": "walletOEM()", "f9ef66f5": "getRoundWinnings(address,uint256)", +"f9f0164a": "ticketId()", +"f9f0208a": "updateKYA(address,bytes32,string)", "f9f03556": "ERC20(uint256,string,string)", "f9f0507f": "timeLockedStart()", "f9f14f6a": "library14function()", "f9f16ef2": "numberOfTokens()", +"f9f1f302": "recycleExcess()", "f9f20540": "setInvestTokenLimit(uint256)", "f9f22d6c": "createNamespace(string,address)", +"f9f26e18": "publish_time()", +"f9f27d46": "getCbondTotalReturn(uint256,uint256,address,uint256,bool)", "f9f286f9": "setMultisigMain(address)", "f9f2c161": "setGod(address)", "f9f2c93c": "santaClaus()", "f9f2ecb6": "getExtendAddr(address)", +"f9f30db6": "move(uint256,address,uint256)", "f9f39a9c": "initialize_bannable(address)", +"f9f3abcd": "teamsTokenVesting()", +"f9f3d0d9": "addProof(uint256,string)", +"f9f3e035": "updatedHeight()", "f9f411d8": "userTokens(address,uint256)", +"f9f42b4f": "forceRebalance(uint256)", "f9f447eb": "getCallDataHash(bytes32)", +"f9f451b8": "snowflakeAddress()", +"f9f494ed": "removeTrustedAddress(address)", "f9f53be0": "ChangeAmountPrice(uint256)", +"f9f56182": "setVariable2(int256[])", "f9f5e8c8": "changeToCoin(address,address,uint256)", +"f9f6499e": "isLimitDisabled(address)", +"f9f65de5": "setInterestRates(uint256,uint256)", +"f9f6dd5c": "LogDarknodeRegistryUpdated(address,address)", "f9f71423": "increasePlayersGooProduction(uint256)", +"f9f71bc4": "xcorlibri()", "f9f73135": "get_heap(uint256)", +"f9f7529a": "calculatePlacementId(address,address,bytes32[])", "f9f7d9de": "TOTAL_PERCRENTS()", "f9f81a73": "setAccountCoords(string)", "f9f86baf": "airdrop(address[],uint256[],uint8)", +"f9f8b150": "redelivery()", "f9f8b586": "JMToken()", "f9f8bdb7": "currentRate()", "f9f8f895": "switchOn()", "f9f90a60": "durationInBlocks()", "f9f92be4": "blacklist(address)", "f9f94bc6": "bioUnlock(bytes32,uint8,bytes32,bytes32)", +"f9fa4088": "pendingTokenSale()", +"f9fa48c3": "div()", +"f9fa7647": "getlistOfSppSubscriptions(address)", +"f9fad053": "tradingRewards()", +"f9fad6ba": "nameProducts(int256,int256)", "f9fae4f7": "TOKEN_CREATION_CAP()", "f9fafb59": "LogBidFinal(address,uint256,uint256,uint256)", "f9fb12ad": "TestXRPCoin()", "f9fb3c95": "transferBonus(address,uint256)", "f9fb452f": "productID()", +"f9fb51c8": "retract(address)", +"f9fb6293": "unstakeNyanV2LP(uint256)", "f9fbd554": "test(string)", +"f9fbfe86": "computeAddress22(uint256,address,address)", "f9fc0d07": "processRewards()", +"f9fc42cb": "ships(string)", "f9fc4816": "withdrawAmountETH(uint256)", +"f9fc5d19": "BuyItem(uint256,uint256,uint256)", "f9fd41d8": "setRevolution(address)", +"f9fd51cb": "balContract()", "f9fd5250": "DOW_MON()", +"f9fd7829": "_sellOverweight(address,uint256)", +"f9fe0555": "setHXPAddress(address)", +"f9fec849": "getCurrentReward(uint256)", "f9fef3b3": "withMod(uint256)", "f9ff1378": "solicitaDevolucao()", +"f9ff3995": "send2User(address,uint256,string)", +"f9ff6efe": "getOffsetDay()", "f9ffabca": "NewAdmin(address,address)", +"fa00102a": "intakeRaw(uint256)", "fa003b2e": "SCCAIToken(address,address)", "fa006d87": "newPlaySeed(address)", +"fa006d93": "getKyberProxies()", "fa009e36": "xxx7Coin()", +"fa00d884": "isUpgradable(bytes2)", "fa0196eb": "OsherCoinAward(uint256)", "fa01dc06": "revoked(address)", "fa01dd3c": "BRTToken()", "fa02955f": "registerMeOnEther(string)", "fa02c4b7": "approveTransfer(address,uint256)", "fa02dcc1": "TankWithdrawAll()", +"fa02fc4f": "destructHoldingTokenAmount()", "fa030ef1": "baba()", "fa03446c": "tokensFromEther()", "fa036370": "Athereum()", +"fa037a16": "_gfv()", +"fa0431ba": "test_imax()", "fa043b0f": "checkSig(bytes32,bytes32,uint8,bytes32,bytes32,address)", "fa044862": "requireOk(bytes1)", "fa048a18": "addHpbNode(address,bytes32,bytes32)", +"fa0497f2": "soldPerStage(uint8)", "fa05064e": "setBountyDistributionContract(address)", "fa058795": "logAdr(address)", +"fa05982b": "fundToLiqudityPool()", +"fa05c217": "getWork(address,uint256)", "fa061d48": "isReadyToSynthesize(uint256)", "fa066fbd": "AccountGasLimitReached()", +"fa06834b": "getnumberForB()", +"fa06e875": "sakura()", "fa07153a": "commitVote(uint256,bytes32,uint256)", +"fa074e75": "frozenTokens(address,uint256)", +"fa07ad64": "setContractSwitch(bool)", +"fa0809a0": "redeemAllDDai()", +"fa084803": "global(uint256,uint256)", +"fa08c908": "startPool()", +"fa094dba": "getTokenLockstatus(uint256)", "fa097028": "_burnRemainingTokens()", +"fa098d53": "withdrawableMarginOf(address)", "fa09cb30": "PatCoin()", "fa09e630": "withdrawAll(address)", +"fa09f38c": "roomID()", "fa0a6cfe": "AFEBToken()", "fa0a8f26": "calculateNextPrice(uint256,uint8)", +"fa0aba32": "withdrawOperators(uint256)", +"fa0af103": "Union_Concil(string,string,string,string,string,string,string,uint256,string)", +"fa0b383d": "AddBank(uint256,uint256,address,uint256,uint256)", +"fa0b5161": "satoshiToWei(uint256)", "fa0b5e55": "registerUser(address,uint256)", "fa0b6211": "hasRoundEnded()", +"fa0b6a76": "uqdiv(uint224,uint112)", "fa0bad28": "onholdBalance()", "fa0bc8e1": "ownerOfSocialIdentity(uint256,uint256)", +"fa0c22b4": "approve_37(address,uint256)", +"fa0c2d03": "DistributeERC20Reward(string,uint256,address,uint256)", "fa0c3034": "GenoPay()", "fa0c498e": "refundJobSponsorships(uint256,uint256)", "fa0c76c5": "calcUserDivsAvailable(address)", +"fa0c7cda": "habaneroPerBlock()", "fa0cdc81": "getManifestById(bytes32)", "fa0d5b52": "BerryLakeCoin()", +"fa0d79ff": "setMappingDetail(string,string)", "fa0d80fc": "icoDenominatorPrice()", +"fa0f4ab3": "getFastMinCount(uint256)", +"fa0fca84": "whiteListed(address)", "fa0ff39f": "setDummy(uint256)", "fa1026dd": "getCommitment(address)", "fa107a41": "Cajutel(uint256,string,string,address,address,address,uint256,uint256)", +"fa107cd3": "getConsumedProofs(address)", +"fa109fe1": "resetExecutionTime()", +"fa10e272": "buyStatus(uint8,address[])", "fa113488": "setCMTForGas(uint256)", "fa113773": "BlackSeaCoin()", +"fa114c45": "unassociated()", "fa1152f3": "MoregainCoin(uint256,string,string)", +"fa11b2b1": "LogSettlementUpdated(uint64,address,address)", "fa11c471": "holdsValidLicense(address)", +"fa126539": "migrateToUniswapWithPermit(address,address,uint256,uint256,uint8,bytes32,bytes32)", "fa12d782": "openGame()", "fa130b68": "developer_edit_text_price(string)", "fa133fdb": "massTransferTokens(address[],uint256)", @@ -143423,17 +262419,29 @@ "fa140e3d": "MitToken()", "fa1456a9": "transferKROContractOwnership(address,string)", "fa147e5e": "remainingTokensAndCost()", +"fa14c2df": "zz()", "fa14df6b": "getChangeRecipientFee()", +"fa164f62": "MARKETING_POOL()", "fa169ec8": "getHashDigest(string)", "fa16ab6c": "Platform()", "fa16c53b": "DiscrashCredit()", +"fa16f15b": "incrementNoOfOptions()", "fa17a19d": "forceStand()", +"fa17b610": "TryArena(address,address,bool)", +"fa17df54": "getMarketing1Account()", +"fa17e84d": "alreadyDelegated(address)", "fa188644": "whitelist5Addresses(address[5])", "fa188df2": "addMinter(address,address)", "fa1896f4": "getOneTokenInWei()", +"fa18b822": "pack1currUserID()", "fa18dd2b": "isSetupMode()", +"fa190ec0": "priceIncreaseBeginTime()", "fa193a6e": "Voter()", +"fa194c58": "_lastSoldTime(address)", "fa198656": "roundingPercent(uint256,uint256,uint256)", +"fa19be37": "lookupMarket(address,address)", +"fa19f1df": "_encode_sol_bytes30(bytes30,uint256,bytes)", +"fa1a04ff": "allCarsFinished(uint256)", "fa1a5f59": "soldAmount()", "fa1acb5c": "_startTime()", "fa1ad09e": "fundTransferOut(address,address,uint256)", @@ -143443,57 +262451,101 @@ "fa1c594e": "disableRegistryUpdate(bool)", "fa1ca37e": "_transferCeo(address)", "fa1cee57": "approveKNCRateRange(uint256)", +"fa1d84f2": "customer(address)", "fa1d9cf8": "getZoneTeller(bytes2,bytes16)", "fa1db1e7": "SendResult(uint64,bytes32,bytes32)", +"fa1dd175": "transsfer()", "fa1e4fcb": "holdoverBalance()", +"fa1e5191": "projectPartyRefundDone()", +"fa1e75f0": "TOTAL_BASE_PERCENT()", "fa1eae3c": "newSchellingRound(bool)", +"fa1f413e": "currentReleaseRound(address)", "fa1f919f": "pre_enddate()", +"fa205714": "releasers(address)", "fa2073ad": "getAnswerCounts()", "fa208cc5": "KickTheCoin()", +"fa20e2fa": "IncreaseTokenAmount(uint256)", "fa20e77d": "burntTokens()", +"fa211e1b": "gasStorage(uint256)", "fa212d37": "getCurrentMaximalDeposit()", +"fa21cc7b": "updatePrices(string[],uint256[])", "fa2299ee": "soldSupply()", "fa23023b": "lockSales()", "fa233620": "RENTALTOKEN(uint256,string,string)", +"fa24d141": "medianizerContract()", "fa24e7a0": "xyjtoken(uint256,string,string)", +"fa2544ee": "changeSigAddress(address)", "fa255179": "getCheckResultMessage()", +"fa259444": "validBlockNumber()", +"fa25d72f": "Do_Receiving(uint256)", "fa25fd57": "settleOrder(uint256,uint256)", +"fa260bc4": "registInviter()", +"fa26b9af": "_anft()", "fa26db7e": "setMinAllowedReservingPercentage(uint256)", "fa26fe32": "delivery(string)", +"fa273700": "isExtensionMinter(bytes32,address)", "fa27e070": "removeProxyForSender(address,address)", +"fa27f3d4": "updateRateByUpdater(uint256)", +"fa287915": "getEngineAddress(bytes32)", +"fa288690": "importOldMEBlock(uint8,uint8)", "fa28a6b6": "checkTrainingPrice(uint256,bool)", "fa28ba0d": "validateReleaseLockfileURI(string)", +"fa2901a5": "POSTPROCESS_SIG()", "fa29141b": "minSellAmount()", +"fa291e53": "burn(address,address,uint256,address)", "fa292c44": "BitcoinPower()", +"fa29b3e3": "nomineeConfirmsInvestmentAgreement(string)", +"fa29f7bb": "supply_of_each_token()", +"fa2a5b01": "getProxyAddress(address)", "fa2a68d2": "QToken()", "fa2a8997": "isReleased()", +"fa2a94ef": "mint(uint256[],address[])", "fa2a9be6": "createPoll(bytes,uint16,uint256,uint256)", +"fa2a9da9": "stakeDetails(address)", "fa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", +"fa2af5f3": "getTotalPredictionPoints(uint256)", "fa2af9da": "platformWallet()", "fa2b579d": "at_percentile(uint256)", "fa2b76e2": "tokenReserved2()", "fa2c7f9b": "getLender(uint256)", "fa2cac28": "rejectEthTransactionRequest()", +"fa2cb63b": "maxtokenperblock()", "fa2cc19e": "calculate_price(uint256,uint256)", "fa2d7efa": "AdlasToken()", "fa2d84b6": "addBlacklistAddress(address,address)", +"fa2d8c90": "settleRebalance()", +"fa2de27d": "REIGAI05()", "fa2dedec": "SATS_TO_TOKENS()", "fa2e9db8": "sunsetWithdrawDate()", "fa2f29b6": "claimEOSclassicFor(address)", "fa2f3e9a": "numAccountsInfo()", "fa2f7a8f": "renounceContract()", +"fa301a5d": "totalValueMs(address)", +"fa30289a": "_extend(bytes4,address)", +"fa307281": "setConversionRate(address)", "fa307fcb": "sendMultipleMessages(address[],string,string,uint256)", "fa309571": "delegateGetTokens(address,uint256)", "fa30b251": "buyTicket(string)", +"fa3139e4": "loopringAddr()", "fa314c67": "newAtomFee()", +"fa314d35": "supplierComp(address,address)", +"fa31a89c": "addPool(address,address,uint256,uint256,uint256,uint256)", "fa31b371": "deletePublicKey(bytes32,address)", "fa31e684": "releaseTokensSaleCount()", +"fa31f374": "setPPDEX(address)", +"fa3260de": "isHashConsumed(bytes32)", "fa3276bc": "isModifiedInRound(address,address,uint64)", +"fa3307c1": "kickEvilPoolByPid(uint256,string)", "fa332152": "giftSendIndex()", "fa33bcf3": "isInList(address)", +"fa344ee1": "generateReward(address,uint256)", +"fa3462a6": "getWithdrawnAmountByTokenIdAndUnderlyingToken(uint256,address)", "fa34b345": "walletsDelegate()", "fa34b37b": "bonusPreviousOwner(uint256,uint256,uint256)", +"fa34d611": "addStrategy(address,uint256,uint256)", "fa34da5e": "getTarget(bytes32,bytes4)", +"fa352ad8": "getBalanceInStakingPool()", +"fa352c00": "revokeDelegate(address)", "fa352dec": "tokensToEthereum_(uint256,uint256)", "fa3559f7": "attestToContract(uint256,bool,string)", "fa355d1c": "_distributeFloatWalletToken(uint256)", @@ -143503,34 +262555,64 @@ "fa36316e": "setFiatPerEthRate(uint256)", "fa368e6d": "isWMSale()", "fa369e66": "batchTransfer(bytes32[])", +"fa36e3c1": "orderBrokers(bytes32)", "fa3754ca": "getCurrentDiscountRate()", +"fa375e45": "cheatTheLine()", "fa37668f": "createContract(bytes32,bytes20,bytes20,uint256,uint256,uint256)", +"fa380235": "level3(uint256)", +"fa38f992": "NewRegistration(bytes32,string,address,address,uint256)", "fa391c64": "isCompleted()", +"fa398ddd": "setCanPurchase(bool)", "fa3a0f78": "getCreateMarketController()", "fa3a3a7e": "DemoPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"fa3a4560": "conNum()", +"fa3ac8ce": "burnEveryYear()", +"fa3ae6dc": "repayAll()", "fa3b8f2c": "AdvertisementPayout(uint256)", +"fa3c13a4": "setWallets(uint256,address,address)", "fa3c6320": "intercrypto_recover()", "fa3c8251": "TimeDecayingTokenEnvironment(uint256)", +"fa3c88a3": "burnItem(address,uint256)", "fa3c9bbc": "getHostRoomLists(address,address)", +"fa3caae0": "keyName()", +"fa3d6128": "_sequentialMint(address,uint16)", +"fa3e6757": "TKPUsers(uint256)", "fa3e9b45": "setCreditDao(address)", "fa3ed04d": "getDArbitraryData(bytes32,bytes)", +"fa3f08af": "getSafesAsc(address,address)", "fa3f1e99": "testBlobStoreRegistered()", +"fa3f5767": "currentContinent()", "fa3f5acf": "sendMsg(string,string)", +"fa3f9452": "calculateLendSum(address,address,uint256)", +"fa3f98f7": "approvedProcessors(address)", "fa3f998c": "redeem_deposit(uint256)", "fa3fa196": "transferCreator(address)", +"fa3fedbf": "userIdToAddr(uint256)", +"fa3ff5f1": "setmanager(address)", "fa404e34": "revokePoolRole(address)", +"fa406a12": "ChangedOwnerCutPerMillion(uint256)", "fa407c19": "NRCToken()", "fa40ce34": "addAllowedContracts(address[])", +"fa40cfff": "mg()", +"fa40e554": "completeExit(uint32,uint16[],uint256[],bytes32[])", "fa4125f7": "activateNextRound(uint256)", +"fa412c32": "jobIdStates(bytes)", "fa41fd32": "lastCallstopPreICO()", +"fa4273a1": "getLpTokenPrice(address)", "fa42f3e5": "map_address(string)", +"fa43a10e": "withdrawalFeeMax()", +"fa43d13d": "unavailableTokenBalance(address)", "fa448f7a": "_handleAffiliate(address,uint256,uint256,uint256)", +"fa45323d": "findFreeX3Referrer(address,uint8)", "fa45858e": "changeSellPOPPrice(uint256,uint256)", "fa45aa00": "executeWithdrawal()", "fa461f33": "setValueStep2(uint256)", "fa462e95": "mintStepPrice()", +"fa467f27": "CLotteries(uint256)", +"fa46a530": "wethTokenAddr()", "fa46b8b4": "SellRateChanged(uint256,uint256)", "fa472bad": "SkillCoinTest()", +"fa47b8e6": "contract_owner_address()", "fa47c564": "confirmERC20(bytes32)", "fa48b4bf": "mintEtherBro()", "fa48dfcd": "setLockup_jiedians(address,uint256,uint256)", @@ -143538,17 +262620,28 @@ "fa49a13a": "Vulgus()", "fa4a2e36": "ShyneTokens(uint256,string,string)", "fa4a80f1": "Matrioska()", +"fa4aaf47": "poolToBeElectedIndex(address)", "fa4ac15d": "withdrawAffVault(uint256,string)", +"fa4b20e0": "LogOwnerAllocation(address,uint256)", +"fa4b8067": "proposeUpdateWhitelist(address,address)", +"fa4b8388": "dev(address,bytes)", "fa4bb165": "setRoundNumber(uint256)", +"fa4bb928": "timeinterval()", "fa4c4271": "reClaimIFS(address)", "fa4c5dc0": "addMessage(string,uint8,uint8,uint8)", "fa4d0c3c": "lockDeadline()", "fa4d300d": "ICOSplit()", "fa4d3698": "setOwners(address[])", "fa4de094": "KPOP_ARENA_CONTRACT_ADDRESS()", +"fa4e12d7": "isValidSignature(address,bytes32,bytes,bytes)", +"fa4e5059": "initializeWithEvent(uint256)", "fa4e5e5a": "notify(uint8,string,string)", +"fa4ebc4b": "distributeTokenSimple(address,address[],uint256[])", +"fa4ee6d5": "loyaltyOf()", "fa4f34a0": "GetChallengeTimings(uint256)", "fa4f5511": "campaignUrl()", +"fa4f71f5": "GRACE_PERIOD_EXPIRATION()", +"fa4f7cef": "isA()", "fa4f96c4": "ActivatedEvent(bool,bool)", "fa4fb369": "addPreSaleTokens(address,uint256)", "fa4feb65": "icoTokens()", @@ -143556,20 +262649,30 @@ "fa502cf7": "addBidToStack()", "fa5064be": "submitProposal(uint256,uint256,uint256,uint8,uint64,string)", "fa5083fe": "getMaximumBetRate()", +"fa5088e3": "burn1(address,uint256)", "fa508d3e": "dnnToken()", "fa509eda": "nextonetogetpaid()", "fa509ff7": "collected_eth()", "fa50b335": "IS_TIER_CONTRACT_MAGIC_NUMBER()", "fa518054": "_addToWhitelist(address)", +"fa5180eb": "getTotalNumTokensClaimed(address)", +"fa51854c": "setUserUseReserveAsCollateral(address,address,bool)", "fa51a2bf": "setSupplyLock(bool)", "fa51ae86": "RATE_CORNERSTONE()", "fa5201e1": "LuckToken(uint256,string,string)", "fa5252e4": "pbWinner()", +"fa526f0f": "totalSharesUp(uint256)", +"fa52b0e0": "getPassiveNumberOfDays(uint256)", "fa52bcb3": "ICSTCrowSale()", "fa52c7d8": "validators(address)", "fa52caf6": "HECoin(address)", +"fa530132": "incubatorChef()", +"fa53b2ed": "prizeactivetime(uint256)", "fa53bb1b": "setauctionother(uint256)", +"fa540801": "getEthSignedMessageHash(bytes32)", "fa544161": "getOwner(address)", +"fa54e8e4": "_calculateUSDPForCollateral(uint256)", +"fa54ff34": "setLogicOwner(address)", "fa550659": "approvalForAll()", "fa552d8e": "withdrawSale1()", "fa556996": "TimeClock(string,uint256,uint256,uint256,uint256)", @@ -143577,12 +262680,23 @@ "fa55f4d4": "modifyEligibility(uint256)", "fa566ddd": "doAllowance(address,address)", "fa56780d": "getPurseContributions(uint256,uint256)", +"fa569274": "USDC_TOKEN()", +"fa573c1c": "claimEmployeeTokens()", +"fa574b05": "getRewardPeriods()", +"fa574e22": "keepAliveTransaction()", +"fa575647": "tokensToEthOnUni(uint256,address[],uint256)", +"fa57b29e": "isAccountBalanceCorrect(uint256,uint24,uint16,uint256,uint256,uint32,uint96,uint256,uint256[30],uint256[12])", +"fa57b576": "triggerDestruction(uint256,address[],address[],bool)", "fa57e2ab": "resolved(bytes32,bytes32,uint256)", "fa57ff82": "ownerSetJackpotToken(address,uint256,uint256,uint256)", +"fa587495": "batchTotalPartitions(address[])", "fa58f510": "getFeeMake(uint256)", "fa5919a8": "DAOSecurity(address,address,bytes32,uint256,uint256,uint128)", "fa59d199": "removeHash(string)", +"fa59e6d4": "INITIAL_EthReserve()", "fa5a1db6": "save(uint256,uint256,uint256)", +"fa5acfa4": "ChangeEtherVault(address)", +"fa5afe40": "setParentAddress(address)", "fa5b344e": "assignSubMember(address,uint256)", "fa5ba0f9": "stepPrice()", "fa5bbcd2": "crowdsaleCreators(address)", @@ -143591,53 +262705,92 @@ "fa5bfc1e": "claimedRewardHook(uint256,address,address,uint256)", "fa5c0c70": "getSaleOrder(uint256)", "fa5c5857": "createStakingContract(uint256,bool)", +"fa5c853f": "setKingFeePct(uint256)", +"fa5ca4ce": "disableMoveFunction()", "fa5cd179": "join_address(uint256)", "fa5cdc2b": "OLTestSynatax()", +"fa5cfff0": "GetUnlockableOptions(uint256,uint256,uint256)", +"fa5d06e3": "policyIsRegistered(address)", +"fa5d174d": "zone_reverse(uint256)", +"fa5d5429": "swapsContract()", "fa5da441": "incrementedIndexOfName(string)", +"fa5e01f0": "InviteInit(address,uint256)", "fa5e288c": "ABBC()", +"fa5e6074": "setzerorate(uint256)", "fa5ed321": "_pointToResolverAndResolve(bytes32,address)", "fa5ef276": "getVotedData(address,uint256,address)", "fa5f090b": "SmartIdeaTokenERC20(uint256,string,string)", "fa5f2d80": "AOG(address,address,address,address,address,address,address)", +"fa5f6619": "isKimchiPeriod()", +"fa604fe8": "setAdmin1(address)", "fa607442": "timeOneSession()", "fa608890": "withdrawRemainingRewards(uint256)", "fa60a16e": "serviceAddressOf(address,uint256)", "fa60fb0b": "getTxRoot(uint256)", "fa6140dd": "weekPotLeader()", +"fa61666f": "getETHReceiver()", "fa6171e4": "superMint(address,uint256)", +"fa61ed81": "setEpoch(uint256,uint256)", "fa62a1ff": "revokeAdminStatus(address)", +"fa62edc1": "getAccountCreationFee()", +"fa6331d8": "venusVAIVaultRate()", +"fa63b8dd": "approve_455(address,uint256)", "fa640427": "setPermissionsProvider(address)", +"fa6435d4": "getFixRet()", +"fa64d7b9": "removeStakingMapping(string,address)", "fa64dffa": "getDestQty(address,address,uint256,uint256)", +"fa64f8c1": "lockOf(address,bytes32,uint256,uint256)", +"fa64ff9b": "setBondFund(address)", +"fa653154": "computeProfitMaximizingTrade(uint256,uint256,uint256,uint256)", +"fa654f78": "poolSorter(uint64,string,bool)", +"fa659246": "setCrowdsaleTarget(uint256)", "fa65d336": "hasFreePlaces()", +"fa65dfac": "crowdsaleToken()", +"fa66358a": "getRoute(uint256)", "fa6669b7": "updateAccountData(uint256,uint16,bytes32,uint256,uint16,bytes32)", "fa667907": "changeOwnerSharePerThousandForBuying(uint256)", "fa66be4e": "countryLengthOf()", "fa66e143": "employeeSignsToESOP()", +"fa6706d1": "setSIHandlerAddr(address)", "fa671e5f": "deathData_v19()", "fa671f6b": "validPurchaseIco(uint256)", "fa6799f2": "revokeVesting(address,uint256)", "fa67ae5a": "setBlockDelay(uint256)", +"fa67b3d2": "bancorToKyberSwapArb(address)", "fa67ba6f": "getSecondsTimeLockedByTx(uint256)", "fa6878a7": "setBAB(bytes32,address,bytes)", "fa68829a": "UnKoin()", +"fa689f8c": "getStaticConfig(uint256)", "fa68b4ce": "lookupISO3116_1_alpha_3(bytes)", +"fa68fd29": "sendEtherToUser(address,uint256)", "fa691a26": "totalRoundsPassed()", "fa695dd7": "createItem(string,uint256,uint256,bool,bool,string,uint256)", "fa696d98": "ART_FOUNDATION_ADDRESS()", +"fa69b4bc": "collectEther(uint256)", "fa69ede9": "setNewRatesBase(uint256)", +"fa6a04e4": "refreshToken()", "fa6a0712": "setOwnerPrice(uint128)", +"fa6a599a": "mintByEth(address)", +"fa6a6137": "noOfMinters()", "fa6ab63b": "getTokenSum()", "fa6ac98e": "test_0_testBasicTxProposal()", "fa6ad04c": "PRCT_BOUNTY()", "fa6b129d": "tokenGenerationEvent(address)", "fa6b535d": "deleteContact(bytes32,address)", +"fa6b53c3": "getBalanceToWithdraw(address,uint16)", +"fa6b6f6d": "file(address,bytes32,bytes32,uint256)", "fa6bdbf8": "_transfer(address,address,uint256,bytes)", +"fa6c76b2": "g128(uint128)", "fa6d373c": "LeaderHash()", "fa6d8f1f": "callAndReward_1(string,string,uint256)", "fa6e01a2": "ARTCToken()", +"fa6e2b46": "bandCurrencyKeys(bytes32)", "fa6e5776": "haveExtension(string)", +"fa6e7cbf": "delayed(address,uint32)", +"fa6eb329": "holder_balance(address)", "fa6ec547": "registeredAddress(address,bool)", "fa6f3522": "EthimalFounderEggs()", +"fa6f383e": "positionAmount()", "fa6f3936": "isModerator(address)", "fa6fc037": "prepareToBreed(uint256,bool,uint256,bool,uint256)", "fa6fcc50": "_startBetBlock()", @@ -143645,55 +262798,126 @@ "fa70f6da": "STRATToken()", "fa712f71": "isBattleboardLive(uint16)", "fa713023": "IEICrowdsale(uint256,uint256,uint256)", +"fa71eaab": "newProposalLogged(address,bytes32,string)", +"fa7229ee": "addAuthorizedSender(address)", +"fa723a2b": "setAutoFarmContract(address)", "fa725ea3": "requireValidAddress(address)", "fa7299f7": "getOwnerVirusLength(address)", "fa729b5b": "CNY_Omnidollar()", "fa72c53e": "providerFeePerEth()", +"fa739158": "AccountIsLockByDate(address)", "fa73af0b": "GRANT_BATCH_SIZE()", "fa73cb37": "ptxToken()", "fa73f074": "useAddr()", +"fa749bac": "setclaimRate(uint256)", +"fa74bd80": "getName(uint64)", +"fa74c6b1": "NewRelease(address)", +"fa75ad63": "initiateFlashLoan(address,uint256,uint256)", +"fa76135d": "referralCountOf(address)", +"fa7626d4": "IS_TEST()", +"fa7643f4": "isWitness(address)", "fa76b253": "getAddressForAccount(string)", +"fa76b497": "dayIndexToOwner(uint16)", +"fa775c0f": "swapExactTokensForTokens(uint256,uint256,address[],address,uint256,bool)", +"fa77983e": "mintNFT(uint8)", "fa779bd6": "checkBalanceTier(address)", "fa77c074": "shaThree(string)", +"fa77de40": "destory(address,uint256)", +"fa77f0b1": "getMyRebaseDip()", +"fa7827d2": "OneUSDC()", "fa785263": "checkRemoveOwnerArgs(uint256,uint256,uint256)", "fa785928": "_revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", "fa7860da": "etherHardCap()", +"fa78b01a": "initialize(address,address,address,address,address,address[2],uint256[3])", "fa78b172": "drawSecondaryWinners()", +"fa790141": "MAX_MINTABLE_SUPPLY()", "fa796124": "BitLumensCrowdsale(address,address)", "fa796fa1": "CryptoZoo(address,address,address)", +"fa79c259": "reclaimDeposit(bytes32)", +"fa7a4404": "opW(address)", "fa7a6cd3": "developer_string_symbol(string)", "fa7ae620": "cryptaurReserveFund()", "fa7af6fe": "investInternal(address,address)", +"fa7b95e9": "findFreeDxReferrer(address,uint8)", +"fa7bd6b9": "getSigil()", +"fa7be18c": "lpStakingIncomeWeightTotal()", +"fa7c0ac2": "TokenSaleFinished()", "fa7c31af": "withdrawCommunity(uint256)", "fa7ca492": "preICOStats()", "fa7d68f1": "getAccountInfo(uint256,uint256)", +"fa7da19d": "setBuyerFee(uint256)", +"fa7e19be": "advisorLockupContract()", +"fa7e4194": "claimRewardFromReward(address,uint256,uint256)", "fa7e4eaa": "BELIBELA()", +"fa7e64e9": "getGranteeTotalPaid(address)", +"fa7e8dc7": "heapSize()", "fa7e8f7c": "EtradeMarketsCoin()", "fa7f6b96": "tokensLocked(address,uint256)", +"fa7f7131": "setLootboxTokenInfo(address,uint256)", +"fa7fdeb7": "getTokenAddressBySymbol(bytes32)", +"fa803b51": "addAward(address,uint256)", "fa80918b": "computeNodeId(bytes,bytes)", +"fa813589": "ExtensionMint(uint256)", +"fa8169bf": "updateROIDuration(uint8,uint256)", +"fa8185af": "log(uint256,uint256,uint256,address)", +"fa81b10a": "NeymarHasMintedEvent(uint256)", "fa81b200": "masterOfCeremony()", +"fa81c6e8": "C_NNRewardPool()", +"fa821c9b": "getMemoryAddr()", +"fa8238e0": "getUserMissedBonus(address)", "fa825185": "getChargers()", +"fa826882": "TotalBurnedAmount()", +"fa82b5c7": "totalWithdrawn_(address)", "fa82b674": "ETHContract()", "fa82e9fc": "organizer1()", "fa83c01b": "setStopSendWebGift(bool)", +"fa84095c": "DevAdd()", +"fa8469cb": "CRV_ATOKEN()", "fa848fb0": "startDayOneTime()", "fa849243": "targetDiscountValue1()", +"fa8509c8": "mint(address,string,address)", +"fa8554f0": "forwardERC20(address)", +"fa85c7c5": "unstakeERC20(address)", "fa85d33e": "istransferAllowed()", +"fa86615d": "orbiSupplyList(uint256)", +"fa86ea51": "unlock_airdrop(address)", +"fa870f4f": "Cat6(address,uint256)", +"fa8711e6": "convertFrom(bytes,address,uint256)", "fa878e8f": "TOKEN_RATE_10_PERCENT_BONUS()", +"fa87e219": "restake(address,uint256,bool)", +"fa8838af": "transferPostSettlementSurplus()", "fa885329": "setTableSize(uint256)", "fa885868": "addPreminer(address,address,uint256,uint256)", "fa888c74": "callIt(uint256)", +"fa88dd20": "EventGatewayNewLinkRequest(address)", +"fa891779": "deCombine(uint256)", "fa89401a": "refund(address)", "fa894c08": "balanceWosPoolForSecondStage()", "fa89ae7d": "ownerTransferEth(address,uint256)", +"fa8a051b": "borrowOnAvatar(address,uint256)", "fa8a3c1c": "rateC()", "fa8a975d": "forcedTransferAll(address,address)", "fa8ad6b9": "unsetIsRentByAtom(uint256)", +"fa8b52ed": "getBullFort()", "fa8b72ff": "setBountyTokensWallet(address)", +"fa8b8ea1": "test11()", "fa8b9a4b": "GetApplicant(uint256)", +"fa8ba490": "absoluteMaxBPro()", +"fa8c00d4": "withdrawableOf(address)", +"fa8ce4d5": "getExistingOrders100(uint8,address,uint256)", +"fa8d66db": "enableAllChecks()", +"fa8dacba": "getAndUpdateLockedAmount(address)", "fa8dc33a": "checkRecordExists(bytes)", +"fa8de8ef": "propertyId(address,bytes32)", +"fa8e2129": "OwnerBunnies(address,uint32)", +"fa8e39b2": "feesTo()", +"fa8e518e": "purchaseWithSilverToken(address,uint256)", +"fa8e74f2": "ChangeHolderKey(uint256[2],string,uint256[2])", "fa8ec0b2": "_transfer(address,address,uint256,string,uint256)", "fa8edab6": "checkBalance(address,address,uint256,uint256)", +"fa8f3455": "_setRebaser(address)", +"fa8f382a": "mapMember_arrayPools(address,uint256)", +"fa8f4b56": "setdailyROILimitPercent(uint256)", "fa8fc08d": "GxCoin(address)", "fa8fd2b5": "LockRequestable()", "fa90693b": "isBlockRedeemed(uint256)", @@ -143703,67 +262927,144 @@ "fa92fb6e": "IssueRejected(uint256)", "fa93019c": "getBlocks(uint8,uint8)", "fa93185f": "LockedDayRemoved(address,uint256,uint256)", +"fa933436": "releaseTaxeRate()", +"fa9389a2": "pushReward(address)", +"fa93b2a5": "transferToUser(address,address,uint256)", +"fa93d8b5": "claimWinnings(address)", "fa93f883": "getMinute(uint256)", +"fa93f939": "withdrawNFT(address[],address[],uint256[])", +"fa94d18a": "DistributeBuybacks()", +"fa9527ae": "withdrawHeroToAssetOwnerByAdmin(address,uint256,bytes32)", +"fa9527fa": "startAirdropROTH(uint256,uint256,uint256,uint256)", +"fa954aa0": "createVote(uint256)", +"fa95a760": "voteJPY()", +"fa95d91b": "LogBindCertificate2Wallet(address,bytes32,address)", +"fa95e798": "eventa(address)", "fa967415": "nextUpgradeMaster()", "fa968eea": "minBetAmount()", "fa96a49e": "totalSupplyUpgraded()", +"fa974841": "autoFarmAddress()", "fa9768c9": "getOnMintAmountValue()", "fa9789cf": "trainKitty(uint256)", "fa984da8": "SujiToken()", "fa985a2f": "p_update_mNewPlotDevPercent(uint256)", +"fa989ab1": "testHandlesUnsetPriceOracle()", +"fa98ae5b": "setCapCustV(address,uint256)", "fa9907ad": "pay500Winners(uint256)", +"fa9940b7": "pulseCounter()", +"fa998895": "divdDay()", +"fa99a77c": "campaignIDtoDonationNumberToDonation(uint256,uint256)", "fa99d7ae": "enterDungeon(uint256[4],uint32)", "fa9a4c35": "getPOOL_edit_21()", "fa9acb05": "addressInArray(address,address)", "fa9aecfb": "isUnowned(uint256)", "fa9af30f": "getGoldXchgRate()", "fa9b44b7": "PendingETHs(address[])", +"fa9b96f3": "setbaseFees()", "fa9ba8b4": "FunFaceToken()", +"fa9c1665": "setCloseSwap(uint256)", +"fa9c981c": "UnsetManager(address)", "fa9ce7e7": "moveTokensFromStockToExchange(uint256)", "fa9d2352": "hasRequiredStateChanges()", +"fa9dd123": "getTeamHaveMostOfMember()", +"fa9de1ba": "NewTokenRate(uint256)", "fa9df423": "setShp(address)", +"fa9e6291": "burnToPenalize(address)", +"fa9e6854": "current_xdai_balance()", "fa9e6f11": "Exafire()", "fa9e82cf": "uploadStartlist(uint256[])", +"fa9e9159": "MAX_GAS_FOR_TRANSFER_BNB()", +"fa9ec13a": "balancesLocked(address,uint256)", +"fa9eee6b": "RateChange(address,uint256)", "fa9f117f": "setNextRoundMaxDonors(uint256)", +"fa9f18d3": "updateCachedPynthDebts(bytes32[])", "fa9f245c": "CappedToken(uint256)", +"fa9f8213": "artworkIdToTransferApproved(uint256)", "fa9fd8b2": "incremental(uint256,uint256)", +"faa049ec": "GOVERANCE()", +"faa0650b": "init(string,string,address,string,address)", "faa06c06": "GetCityName(address)", +"faa06d6f": "maxEthLimit()", "faa0a264": "burnToken()", +"faa0ae53": "requestAssetUpdate(uint256,uint256)", +"faa0b805": "NewProposal(uint8,uint256,address)", "faa10f43": "require(bool)", +"faa15a30": "nftgPerBlock()", +"faa1809e": "updatePendingRewards()", "faa1a8ff": "getOwnedBot(address,uint256)", +"faa201ed": "verifyPersonalSign(address,bytes32,uint8,bytes32,bytes32)", +"faa23e5d": "setAllocation(address,uint256,uint256[],uint256[])", +"faa2f68e": "pendingMkat(uint256,address)", +"faa36809": "nwant()", "faa3981a": "boolMemoryArray(bool)", +"faa3e096": "setRate(uint32)", +"faa43e1f": "DefaultedMortgage(uint256)", "faa458f4": "submittedHashes(bytes32,uint256,uint256)", +"faa4a63f": "DepositDividendPayed(address,uint256,uint256,uint256,uint256)", +"faa4e1c3": "newProtection(address,uint256,uint256)", "faa51485": "isValidTraderAddress(address)", "faa5369d": "getBorrowingItem(uint256)", +"faa5bd62": "WorkOrderCallbackProof(address,address,address,address,address,string,string,string)", "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)", +"faa636ff": "setVetoQuorum(uint256)", +"faa646ee": "OwnershipConfirmed()", "faa679bf": "TraceToken()", +"faa7ee3d": "presale1Price()", "faa7fc61": "bustRange()", +"faa8aab1": "callerAddress()", +"faa8b258": "srmboostPerBlock()", +"faa94007": "Bonus(string,uint8)", +"faa9640b": "getWerewolfAssetById(uint256)", +"faa9ba5f": "ddrTerms()", +"faaa012d": "externalHashEIP712Message(bytes32,bytes32)", +"faaa459e": "getDeveloper2Account()", "faaa4d22": "distributePCY(address[],uint256,uint256)", "faaa58da": "RemovePauser(address)", +"faaa83ce": "_underlyingBalance()", +"faaa96dc": "IcoFinalized(uint256)", +"faaaae75": "buySteps()", "faaad90f": "getBlocksUntilNextRound()", "faaad91d": "convertToPrimordial(uint256)", +"faaafa26": "checkEarlyRedemptionFee(uint256,uint256)", +"faaafc6b": "liquidateCalculated(address,address,address,address,address,address,address,uint256)", "faab806f": "emergencyStopSale(address)", "faab9d39": "setRegistrar(address)", "faabc195": "updateContract(uint256,address,uint256)", +"faabf704": "IncreaseSupply(uint256)", +"faac111f": "setAppFee(address,address,uint256)", +"faac4325": "setStrategy(uint256,address)", "faac90ec": "StorageFactory()", "faacf0fd": "toChar(bytes1)", "faad4a49": "setDividends(uint256,uint256)", "faad6eb5": "updateAgent(address,bool)", +"faad7d3b": "sellLeaves()", +"faad92c0": "commissionEth(uint256)", "faadb14a": "getCustomerTxPaymentKWh(address,bytes32)", +"faae2159": "getTotalDistribution()", +"faae27e6": "dev_percent()", "faae4c17": "usernamesToAddresses(bytes32)", +"faaebd21": "fees(address)", "faaebd29": "Fight_Results(uint256,address,address,uint128,uint128,uint32,uint256,uint32,uint256,uint8)", "faaf027b": "getAddressTokenSaleId(address,address)", "faaf1921": "updateEthToCentsRateCycleStarted()", +"faaf26f1": "onWithdrawInviteReward(uint256,address,uint256,uint256)", +"faaf36cd": "approve_1(address,uint256)", +"faaf3aff": "bridgeTokenReward()", "faaf71e6": "checkSoftCapOk()", +"faaf760d": "updateLawyerOpinions(uint256,string)", "faafa08f": "CatICO(address)", +"fab005a2": "latestResult(address)", +"fab0370a": "tokenVolumeOutput(address)", "fab0568c": "GIFTToken(uint256,string,uint8,string)", +"fab10bc6": "buyKEBBEToken(address)", "fab14b36": "saleBalance()", "fab18075": "numLots()", +"fab1e747": "amountStaked()", "fab2c469": "getSlots()", "fab2cb36": "totalSharesIssued()", "fab2e425": "GAMESPLAYED()", @@ -143776,27 +263077,46 @@ "fab43cb1": "getPongAddress()", "fab4969f": "amountRaisedPhase()", "fab4cb39": "getWarrantyPrice(string,uint256,uint256,uint256)", +"fab4fcc5": "CHANGER_ROLE()", +"fab53e02": "VegetablesTradeBalance(uint256)", "fab55a49": "addr_forge()", "fab57a21": "truebitAddress()", +"fab5976f": "reserveToTokenSwapInput(address,uint256,uint256,uint256)", +"fab5a295": "plyrCurrDayPerformance_(uint256)", "fab5ccb1": "submitBlock(bytes32,bytes)", +"fab5e7a2": "RefundTokens(address,address,uint256)", "fab67bb6": "hasNotEnded()", +"fab7c9ea": "unregisterAllBrokers()", "fab825c6": "setCanvasName(uint32,string)", "fab88d39": "STS(uint256,string,uint8,string)", "fab8cbe4": "splitTokensBeforeDistribution(uint256)", +"fab8fc54": "approve_571(address,uint256)", "fab93805": "ballotLog(bytes32[2])", +"fab968a8": "transactionChannel(bytes,uint8,bytes32,bytes32)", +"fab980b7": "_vaultName()", "fab9b243": "isUpgradable(address,address,string)", "fab9caaf": "JungleScratch(address)", "fab9f0c4": "DigiWillToken()", "faba1f16": "_createPow(string,address,uint256,uint256,uint256,uint256)", +"faba427a": "processAllowedCallers(address,bool)", +"faba4804": "isRandomAvailable()", +"faba6f35": "addPack(uint256,uint256[],uint256[][],uint256)", +"faba8c3b": "liq()", "fabacf0d": "Yetxkd1601()", +"fabad443": "settleBondedWithdrawal(bytes32,bytes32,bytes32[])", +"fabadb71": "recoverForeignTokens(address)", "fabae696": "updatefxFee(uint256)", "fabb25fa": "x_constructor(address)", "fabb7952": "setPaintingName(uint256,string)", "fabbdc5b": "COIN_COST_ICO_TIER_2()", +"fabc1499": "three_leg(uint256,address,address,address,uint256,uint256,uint256,bool)", "fabc1cbc": "unpause(uint256)", +"fabc69a9": "checkExistStrategy(address)", "fabcc880": "update(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"fabdd4a6": "__user()", "fabde80c": "coinBalance(address)", "fabe1416": "canClaimToken()", +"fabeaafd": "approveMintRequest(uint256,uint256[])", "fabec44a": "getCurrentVersion()", "fabee62d": "taxTo(address)", "fabefafe": "computePayout(uint256,address)", @@ -143804,16 +263124,27 @@ "fabf5ea5": "maxInvestedLimit()", "fabf657a": "approveAddress(address)", "fabfbefb": "lastPayoutIndex()", +"fabfeffd": "applicationRewardInfo(uint256)", "fac08874": "BPTestCoin()", "fac20ab8": "getGameWinner(uint256)", +"fac22cf0": "pltf_fee_rate()", "fac2548b": "updateMember(address,uint256,bool,string)", +"fac27796": "shareRoyalty()", "fac28349": "setInvite(address,uint256,uint256)", "fac2b5f8": "setEplay(address)", +"fac2b9ba": "updateStartBlock(uint256)", +"fac2c621": "unregisterContract(address)", +"fac2d0a2": "Finance()", +"fac2d580": "NewCoinsKarma(uint256,string,string,uint256,uint256,bool)", "fac333ac": "ids(uint256)", "fac34ff6": "throwFoo()", "fac3a4db": "changeWithdrawableNetfRe(uint256)", "fac3c1f4": "setOracleName(address,string)", +"fac3d045": "mintTo(address,address,uint256[])", +"fac3e9f0": "rewards2Ratio()", "fac416ab": "PriceThreeEnable()", +"fac42a95": "supporterExitValidator(uint256)", +"fac42f37": "levelManagerPool(uint256)", "fac50e4c": "StgTwobonusEnds()", "fac5235b": "teamTokensAllocated()", "fac52bfd": "my_name()", @@ -143825,113 +263156,208 @@ "fac66f01": "getConditions(uint256,uint256)", "fac67cf6": "updateVIPRank(address)", "fac6a8a2": "withdrawExchangesToken()", +"fac6c826": "userXkeyPurchases(uint256,uint256,address)", +"fac6d405": "m_pendingIndex(uint256)", "fac6fb16": "getVoteStatusFromProposal(uint256,address)", "fac6fe0c": "level_6_percent()", +"fac7102b": "gamePeriodsSinceStart()", "fac78d83": "tierModifiable(uint256)", +"fac79929": "addOneExecutor(address)", "fac7abe3": "latestAuctionIndices(address,address)", "fac7b20a": "maxCapTokenTotal()", +"fac7c080": "km()", +"fac805f4": "RevertedStake(bytes32,bytes32,address,uint256,uint256)", "fac8a800": "isTeller(address)", +"fac8eafc": "getWizard(uint256)", "fac952c5": "getLastWithdraw()", "fac97122": "ownerSetJackpotAddress(address)", +"fac97905": "setTrancheAFixedRPB(uint256,uint256)", "fac9d2c7": "Blockkonnect()", "faca7cfa": "prevBalance()", "facaa838": "IsEscrowActive()", "facb2195": "setIntF1(int256)", +"facb2749": "addPost(uint256,string,string)", +"facbf03e": "unblockUser(uint256)", "facbf93b": "totalBlocks()", +"facc4e13": "getBusdAmount(uint256)", "facc7905": "unLockTime()", +"faccdd50": "icoAmount()", "facce5bb": "wingsTokenRewards()", "facd0934": "BONUS_250_500()", +"facd14d0": "DistrubuteBonusTokens(address)", "facd743b": "isValidator(address)", +"facdc5da": "appendQueueBatch(uint256)", "face030b": "SpinTheWheel(address)", "face873f": "getAllActiveSales()", "face9e8e": "hash_sha256(string,uint256)", +"faceb3b5": "_calcLbtPrice(int256,int256,int256,int256)", "facef32a": "IGI()", "facf55e6": "getMyClones()", +"facf6652": "_encode_sol_bytes8(bytes8,uint256,bytes)", +"facf85b1": "reward2()", +"fad075b0": "_latestVersionAppBase(bytes32)", "fad09ab3": "closeProvider(address)", "fad09c3c": "DemoContract()", +"fad0f7b8": "SpecialOfficer(address,string,string,string,string)", +"fad10511": "recoverLost(address,address,uint256)", "fad15673": "UmkaToken(string,string,uint8,uint256)", "fad18e7b": "registerNameXaddrFromDapp(address,bytes32,address,bool,uint8)", +"fad1e9ab": "stopCrowdSale(bool)", "fad239ac": "PermTokenTest()", +"fad2b614": "sumsByNumber(uint256)", "fad356f8": "testTransferFromSelf()", "fad35818": "calcInviterBenefit(uint256)", +"fad3cc4b": "deposit(uint256,uint256,uint256,address)", +"fad3d097": "isCurrentGatekeeper()", "fad3f8f7": "maxPreSale()", "fad4b99a": "updateChannelMinimum(address,uint256)", "fad4e1f2": "getIDMapping(uint256,uint256)", +"fad4ee94": "getBuyerOrderCosts(uint256)", +"fad5359f": "deploy(address,address,address,uint24,int24)", "fad5a2af": "isClosedAndValid()", "fad6049b": "_transferFrom(uint256,address,uint256)", "fad60615": "roundProfitByAddr(address,uint256)", +"fad77364": "ST1OPA(address,uint256,address)", "fad774ee": "BONUS_LEVEL_2()", +"fad78a64": "Museum()", "fad7ed8c": "_A_tokenSaleCompleted()", +"fad80169": "buyWithPaymentOnly(address,uint256,string)", "fad8200e": "userToNumCelebs(address)", "fad88be7": "VOISE()", +"fad898c2": "unwind(uint256)", +"fad8a5a2": "fullData(uint256)", "fad8b32a": "revokeOperator(address)", "fad9100c": "FOMOed()", +"fad97e1b": "createDocument(address,bytes32,uint8,uint8,uint8,bytes16,bool,uint256)", "fad992ea": "claimINRDividends()", "fad9aba3": "dust()", "fad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", "fada2c18": "transferBond(uint256)", "fada4b76": "quater3()", "fada5da1": "collectEth()", +"fada7872": "changeMaxSaving(uint256)", +"fadaefff": "drip2Token()", +"fadb49de": "setWrapper(address,uint256)", "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()", +"fadd25b3": "ICOisEnd(uint256)", "fadd3235": "gameEndBlock()", "fadda208": "getMemberAdresse(uint256)", +"faddab03": "numberOfEarlybirds()", +"fadddd88": "shareRewards(address[5],uint256[5])", +"fade3689": "isRentDue(string,uint256)", "fadeb59c": "getListingDB(uint8)", "fadf4cb2": "batchAssignTokens(address[],uint256[],bool[])", "fadf4f3b": "GECToken(address,uint256)", "fadf617b": "reveal(int128,string)", "fadf87b1": "testGetBitsSuccess()", +"fadff0e1": "storeVerifyHeader(uint256,bytes)", +"fae022de": "_elevate(uint256,uint256)", +"fae036d5": "tout()", +"fae07ec2": "ticketsCounter()", +"fae1028c": "Stake_FXS_USDC()", "fae14192": "changeFeePercentage(uint256)", "fae17e21": "createBid(uint256,address,address,address,uint256,uint256)", +"fae1b644": "approve_362(address,uint256)", +"fae1db4c": "withDraw2()", "fae21f0a": "initBank()", "fae24454": "removeFromManagementWhitelist(address)", "fae25444": "getNumberOfOffers()", +"fae2848a": "depositDAIandSHARE(uint256)", "fae29ee8": "setWebInfo(string,string)", "fae2dd4b": "myName()", +"fae2e215": "listApprovedAdmin()", +"fae3caa4": "deflectInitialLiq()", +"fae3cb50": "slTokenMetadata(address)", +"fae414dc": "updateCollateralAuctionContract(address,address,address,address,bytes32,address,address)", +"fae41604": "withdrawEth_cfq()", "fae429af": "NinjaCoinNC()", +"fae453c6": "transferVirtualGold(uint256,address)", +"fae49f12": "_weekTwo()", "fae4a213": "buyWithAddressAndFunction(address,bytes4)", +"fae4eac6": "supplierInvoices(uint256)", +"fae4f01d": "addPool(string,address,uint256,uint256,uint256,uint256,uint256)", +"fae4f40a": "f(bytes2,uint16)", "fae53222": "addPlayerGeneral(address,uint32,uint32,uint8)", +"fae549f8": "webGiftList(address)", "fae59753": "transferOwnershipMessage(address)", +"fae5f8ce": "stopPRESALE()", +"fae68232": "balanceOfKKCRVinKCRV()", +"fae6acb3": "Completed(bytes32,bytes32,address,address)", "fae6edcf": "getI2()", +"fae71b14": "setHatchThreshold(uint8)", "fae72303": "totalWeiRaisedDuringPhase3()", +"fae728cd": "updateAPY(uint256)", "fae73549": "Burnt_Token()", +"fae76f74": "getAirDrop()", +"fae783d8": "getCPInfoByUser(address,address)", "fae8529a": "maxprice()", "fae860db": "transferToLockedBalance(address,uint256,uint256,uint256,uint256,uint256,uint256)", "fae8c29e": "setPromoPause()", "fae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", "fae92612": "setMarketAddress(address)", +"fae94149": "quitable(address)", "fae95a71": "participationPresaleHistory(address)", +"fae98788": "providerAmounts(uint256)", "fae9c6b3": "preICOTokenRemaining()", "fae9d06d": "calculateTxFee(uint256,address)", +"fae9e186": "sellOnApprove(address,uint256,address,address[],bytes,uint256[],address)", +"faea0532": "YourTotalStakesTillToday(address)", "faea1878": "cooRemoveCro(address)", "faea624c": "VestTokens(address,uint256,uint256,uint256,bool,string,uint256)", "faea9129": "Syndicate()", +"faeaa153": "numNiftiesCurrentlyInContract()", +"faeb3f82": "isReadyToCrack(uint256)", +"faeb7dbb": "_VotingRightsWithdrawn(uint256,address)", "faed08a9": "reLoadXname(uint256)", "faed1922": "purchaseWhaleCard()", +"faed47fd": "unblockAccounts(address[])", "faed77ab": "wipeAndFree(address,bytes32,uint256,uint256)", "faed86ab": "strConcats(string,string,string,string)", +"faed9732": "restartPerBlock()", +"faeda017": "stakeCatnipV2LP(uint256)", "faede6a1": "Y2_lockedTokenAmount()", "faee13b9": "set(int8)", "faee4402": "donateToWhale(uint256)", "faee4a10": "initialBankroll()", +"faee6b94": "addCodeToPlayer(address,uint256)", +"faee7022": "checkleastEth()", +"faef0fab": "claimPie(address[],address[],bool,bool)", "faef2ad2": "getCategoryHash(address)", "faeff650": "phase1TokenPriceInEth()", +"faf026de": "firstHouseOpen(uint256,uint256)", +"faf04143": "depositTRC721(address,address,uint256,uint256)", +"faf04571": "SellLockedBalance(address,uint256)", +"faf089f1": "forYFINholdersv1(address)", "faf0952b": "testThrowRestartNotOwner()", +"faf16095": "sm_developers(uint256)", +"faf172f7": "create(uint256,uint8)", +"faf1c062": "_setArraySlot(uint256,uint256,uint256)", "faf21148": "ValoremICO()", "faf236c7": "emitTokensFor(address,uint256,uint256,uint256)", "faf27bca": "greeter(string)", +"faf374a4": "ODDS_1()", "faf3d174": "upgradeStart(address)", "faf42125": "setTokenURIAffixes(string,string)", +"faf431bb": "canExchangeFor(address,address)", +"faf4b05c": "mintNumerator()", +"faf4d4a4": "getCollateralAsset()", +"faf4d8cb": "totalBlocksCommitted()", "faf5115f": "setBank(address,address)", +"faf5bb98": "balanceOfYCRVinWant()", +"faf5e313": "masterCrow()", +"faf786e9": "mintB(uint256,uint256)", +"faf7eba6": "getRemainingAmount(address)", "faf81ba5": "applyBonus(uint256,uint256)", "faf87b8a": "payoutEF()", "faf880ad": "SoftcapReached(address,uint256)", "faf924cf": "proof()", "faf95e3d": "PayForServiceETHEvent(address,uint256)", +"faf976c6": "changeRate(address,uint256)", "faf9859c": "NIU(uint256,string,uint8,string)", "faf9b5cf": "mintSendTokens()", "faf9f330": "accrueTeamTokens(address,address,uint256)", @@ -143942,72 +263368,118 @@ "fafb3c7a": "giftCar(address,uint256,bool)", "fafb76dd": "getOffsetIndex()", "fafb9334": "roll_normal(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"fafb93cf": "pending_betting_records(bytes32)", "fafbb62b": "create(string,string,uint8,uint256,address,string,address,address)", "fafbb9a3": "getNextPayoutTime()", "fafbcc08": "IBNZDEVELOPERSERC20_Crowdsale()", +"fafc4352": "approve_14(address,uint256)", "fafc56d9": "setStepTwoRate(uint256)", "fafcdc34": "dist(address)", +"fafd1117": "BonusFromGetAt(address,uint256)", "fafd2efb": "cashoutable(address,address)", +"fafd3b67": "_encode_sol_uint(uint256,uint256,bytes)", "fafd4bba": "RESERVED_TOKENS_FOR_CRYPTO_EXCHANGES()", "fafd6bcb": "isConfirmedBy(bytes,address)", +"fafd889a": "allSessions(address)", "fafdb3af": "PlayerBalance(uint8,uint256,uint256)", +"fafddde0": "totalLaws()", "fafe029f": "getWtotalTransCnt(uint8)", "fafe0902": "gift_ClaimTINAmotleyLine(uint256)", +"fafe42a9": "newOwnerConfirm()", +"fafe65b9": "add_token1(address)", "fafe805e": "BLOCK_PER_PHASE()", "fafe8845": "StateChanged(uint256,uint8)", +"faff4335": "addUnbankOwner(address)", "faff50a8": "rootNode()", "faff660e": "isPrivate()", +"faff7500": "LogPauseRoundD()", +"fb001a79": "buyLandName(uint256,string,uint256)", +"fb005f9c": "viewLevels(address)", "fb007107": "CanMint(bool)", "fb00cc67": "search_winner_bid_address(uint8)", +"fb00d514": "updateRedeemFee(uint256)", "fb00fec6": "getStatusForRootHash(bytes32)", "fb0101c4": "getUserSpaceIds(uint256)", +"fb01275b": "maxRentalPeriodInBlocks()", +"fb016a83": "stakedAmount(uint32)", "fb01badd": "companyShares()", "fb01f4b1": "developerPrizeClaim()", "fb02191c": "addRepo(bytes32,string)", +"fb02be4f": "removeInputToken(address)", "fb03735e": "contractTokenReward()", +"fb03dc89": "getStrategyName()", "fb03eaea": "getDisputeThresholdForFork()", +"fb040d2d": "AllocateTeamTokens(address,uint256)", "fb048705": "itemOf(uint256)", "fb04f22c": "secondReleaseDone()", "fb054439": "canBearWith(uint256,uint256)", "fb05594f": "STARTING_SHRIMP()", +"fb05ed37": "checkInvestment(address)", "fb062a84": "offerOptionsToEmployeeOnlyExtra(address,uint32,uint32,uint32)", "fb064161": "advisorsAllocation()", "fb06603c": "modifyToken(address,uint256,string,string,string,string,bool)", +"fb0685df": "prepaidES(address)", "fb070d0d": "CatFarmer()", "fb0720dc": "icoStartP1()", "fb072d2a": "random(uint256,uint8)", +"fb075433": "setDevDepFee(uint256)", +"fb0773f3": "hegicStaking()", "fb07ac86": "realPriceOracle()", "fb083fdc": "EtherDelta()", "fb088558": "contributeWithoutVesting()", "fb08937c": "tokenTransfer(address,address,address,uint256)", +"fb08af80": "canCreateNewEdition(address)", "fb08f3a1": "whitelistRequired()", "fb08fdaa": "replaceContract(address)", +"fb095f2e": "d2(uint256)", "fb099c84": "newInvestor()", "fb09b1ac": "testBalanceOfReflectsTransfer()", "fb09c964": "getXQU()", "fb09db11": "setActiveWhitelist()", "fb0a0344": "mockBuy()", +"fb0a12c1": "tolerate(uint256)", "fb0a2e3c": "buyerDecimals()", "fb0a3867": "updateClientAddress()", +"fb0a70e3": "earlyStop()", "fb0a8c62": "addGenerator()", "fb0b0220": "outFromPool(uint256)", "fb0b02cd": "destroyBucket(bytes32)", "fb0b6b6d": "confirmTransactionByMediator(uint256)", +"fb0b7cee": "_setDetails(uint256,bytes32,bytes32,bytes32)", +"fb0bace5": "private_sendCharityFunds(string)", "fb0c0782": "buy2(uint256)", "fb0c1faa": "LearnX()", +"fb0ce5d9": "EventDocumentAdded(uint256)", +"fb0ce7d2": "public_goods_perc()", +"fb0ceb04": "timestamps(uint256,uint256)", "fb0cf7ab": "getStagePrice(uint8)", "fb0d7e43": "initialBonus()", +"fb0e1a63": "__getReverseKyberMaskAsset(address)", +"fb0e487a": "devDistributeDuration()", +"fb0e722b": "inbox()", +"fb0ea835": "im()", +"fb0f1366": "tokenswaplimit()", +"fb0f1aed": "_transferSenderPaysFee_byProxy(address,address,uint256,bytes)", +"fb0f25fc": "protectedAmountPlusFeeTest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fb0f37d4": "renounceFeeWhitelist()", "fb0f6f42": "s1(bytes1)", "fb0f9363": "getAuctions(address)", "fb0f97a8": "depositToken(address,address,uint256)", "fb0fcd8c": "triggerRselfdestructRefund()", "fb101581": "transferToCharity(address)", +"fb1052bf": "calculateCollateralRate()", +"fb107a4f": "getNFTPrice()", "fb10b0d3": "currentMaximumSalePercentage()", "fb114f57": "oraclize_query(uint256,string,string[3],uint256)", "fb11613e": "getGamesByDay(uint256)", "fb1161f1": "bountyCap()", +"fb119198": "doMul(uint256,uint256)", "fb1291c3": "getPixels(bytes32)", +"fb12a876": "isValidApprovedOBO(address)", "fb12ee85": "amountOfOpenRFQs()", +"fb134d2d": "WithdrawalRequest(address,uint256,uint256)", +"fb136e10": "setDusdStep(uint256)", +"fb139a21": "pepes(uint256)", "fb13a707": "changeVestingWhitelister(address)", "fb13bfae": "getFreezeInfo(address)", "fb1478e5": "changeSaleEndBlock(uint256)", @@ -144016,30 +263488,53 @@ "fb15e737": "boolToBytes32(bool,bool)", "fb1641d6": "rejectGame(address,uint256)", "fb1669ca": "setBalance(uint256)", +"fb167003": "erc20mUSDPrice()", "fb1684f9": "lockTextKey(string,uint256)", +"fb16fa8f": "initialize(address[5],uint256,uint256,uint256)", "fb171eac": "witdrawToken(address,uint256)", "fb173712": "SetRate(address,address,uint256,uint256)", "fb176b69": "paleyer1show(uint8,uint8,uint8,uint8,uint8)", "fb17905f": "DemolishByCredits(uint256,uint256)", +"fb17eaf9": "vestCmd3Month1PercentInt(address,uint256)", +"fb17ff3b": "judge(uint256,bytes)", +"fb1883d6": "JoinKiaan(string)", "fb18962d": "setSoftwareTokensPercent(uint256)", +"fb18d743": "computeWithoutChi(uint256)", +"fb1946c6": "firstairdrop(address[],uint256)", +"fb19a38d": "Divide(address)", +"fb19dcaa": "setCEtherContract(address)", +"fb1a8bd3": "compensationAmountTest(uint256,uint256,uint256,uint256,uint256,uint256)", "fb1ace34": "notarize(bytes)", "fb1ae783": "getWinnerTeam(uint256)", +"fb1b2224": "send1()", +"fb1b4c7e": "MAX_EXCHANGE_FEE_RATE()", +"fb1bb9de": "UNPAUSER_ROLE()", "fb1bc4d7": "PsExToken()", +"fb1bfe26": "buyHedge(address)", "fb1c3461": "_calculatePercent(uint256,uint256)", "fb1ce13a": "TestEOSCoin()", "fb1ce2ea": "NotifyMe(address,uint256)", +"fb1d618a": "setCentsPoolAddress(address)", +"fb1d748b": "idxEnd900()", "fb1d8201": "addClaim(uint32,string,string,bytes)", "fb1d9eea": "transferFundsTokens(address,address,uint256)", "fb1db11f": "updateEarlyParticipantWhitelist(address,address,uint256)", +"fb1db278": "masterchef()", "fb1de995": "solveTask(uint256,uint256,uint256,int256,uint256,int256)", +"fb1e1b7a": "proxyBatchDelegate(address,address[],address[],uint256[])", "fb1e3804": "FULL_TOKEN_AMOUNT()", "fb1e61ca": "getRequest(bytes32)", +"fb1eb14b": "_tFeeTotal()", +"fb1ef52c": "migrateDelegation(uint256,uint256,uint256)", +"fb1f2507": "_base1()", +"fb1f259f": "updateRewardPaidTime(address)", "fb1f41f9": "info_OwnerTINAmotleyLine(uint256)", "fb1fad50": "halt(uint256)", "fb1fdc2e": "lengthNotEqual(address[],uint256,string)", "fb2004f2": "BCOExtendedToken(address,string,string,uint256,uint256)", "fb203f90": "ShopereumTokensPerEther()", "fb20b70d": "setBonusDate2(uint256)", +"fb20b7d0": "defaultSlippageFeeVotes(address)", "fb20d071": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256,uint256)", "fb20d98f": "deleteEditor(address)", "fb20dc80": "setPriceForVerification(uint256)", @@ -144049,39 +263544,72 @@ "fb218f5f": "storeData(string)", "fb21eefd": "fwdData(address,bytes)", "fb222d48": "extractVaultTokens(address,address)", +"fb228f7e": "withdrawToBuyer(address,address,uint256)", +"fb22acd5": "setValidation(string)", +"fb230d80": "_requireCallerIsBorrower(address)", +"fb233733": "cardReleaseTime(uint256,uint256)", "fb236bba": "_deleteOffer(uint256)", "fb237eb2": "isUserWhitelisted(address)", "fb23bbb1": "BONUS_WINDOW_3_END_TIME()", +"fb2412b6": "getAssetIntroducerByTokenId(uint256)", "fb241406": "RedPen()", +"fb24c860": "addMemoryCheck()", +"fb24db8f": "mAdmins(address)", "fb25b62c": "LineToken()", "fb2643c0": "DragonKing(address,address,uint8,uint8,uint8,uint16[],uint16[])", +"fb267a99": "getProviderRegistrations(address)", "fb26c00f": "Treasury(address)", "fb26c3f8": "minimumPresaleWeiDeposit()", "fb26e2d8": "tgrStartBlock()", +"fb274599": "updateStakeAddr(address)", "fb274654": "offerCollectibleForSaleToAddress(uint256,uint256,int256,uint256,address)", +"fb276532": "_tokenSaleContractAddress()", +"fb276fcf": "showLockNum(address)", "fb277a24": "testMintInvalid(int256)", "fb27961c": "softCapAmount()", "fb279ef3": "tip(uint256,address,uint256)", +"fb27aee5": "approve_265(address,uint256)", "fb282a17": "distributeCallback(uint256,address[])", "fb282f92": "solveGame(uint256,uint256)", "fb283111": "setRunSwitch(bool)", +"fb2834f8": "approve_transfer(bytes32,bytes)", "fb2861ff": "MINTTIME()", +"fb286c65": "yesVotes()", "fb2898e4": "startSaleDepo(uint256)", "fb28be72": "SetupQPY(string,string,uint256,uint256,uint256,address,address,uint256)", +"fb29238b": "getPoolData()", +"fb2923a6": "approveLimited(address,uint256)", "fb293a34": "backGamePlayerCoinOwner()", "fb29aa97": "getNumLoveItems()", +"fb29dafb": "updateMaximum(uint256)", +"fb29e322": "calculateNetworkTradeIncrements(uint256[],uint256)", +"fb2a410a": "onlyEOA()", +"fb2a8622": "DrainStack(bytes32,bytes32,address)", +"fb2b835f": "setCOO1(address)", +"fb2be721": "MintAFaceForTheHappyPlace()", +"fb2c9223": "redeemTo(address,uint256,address)", "fb2c95b6": "PlayX3()", +"fb2c9804": "batchReleasePending(address[])", "fb2cb34e": "transferPaused()", +"fb2d157d": "conversionSuccessfull(address)", "fb2dfa45": "getKitties()", "fb2e0078": "withdrawalFunds(bool)", +"fb2e2a3a": "getTokenBalanceOfAddr(address,address)", "fb2e3240": "setDOwnerFromClaim(bytes32,address)", +"fb2e379a": "distributeEthProfit(address,uint256)", "fb2ee901": "getBattleFee()", "fb2eff20": "PhoenixFund()", "fb2f3a8a": "MAX_BOUNTY_SUPPLY()", "fb2f5064": "getPendingTokens(address)", +"fb2f6656": "MARKETING_SUPPLY()", "fb2fbf49": "registerEOSAddress(string)", +"fb300fdd": "Sa_Jo_Jo(uint256)", "fb305569": "UbiqIssued()", +"fb307b34": "getKeyPurposes(bytes32)", +"fb30869b": "creatorToSeason(address)", +"fb308eee": "pullCollateral(uint256)", "fb30d070": "setNewAge(int256)", +"fb311739": "accountModifiers()", "fb31a6cc": "executeOffer(address)", "fb31b262": "VuePayTokenSale()", "fb31ff37": "getFullRecord(bytes32)", @@ -144090,8 +263618,11 @@ "fb32ade3": "releaseLockedTokensFor(address)", "fb32aedb": "voteB()", "fb32f4f5": "ARK_FLAGGER_1_00()", +"fb334b55": "scaledSharesToShares(uint256)", +"fb33839b": "setLv4Num(uint256)", "fb3458d1": "extractElementsFromGene(uint256)", "fb346eab": "totalSpent()", +"fb349dbd": "changeOracleAddress(address)", "fb34d075": "channelCloseTimeout(uint64)", "fb34fc6f": "WatchNextBlockReward()", "fb350502": "calculateWalletTokens()", @@ -144100,91 +263631,150 @@ "fb357f74": "EBLLToken(address,uint256)", "fb35a4ba": "KKToken(uint256,string,uint8,string)", "fb35b4e4": "totalDeployments()", +"fb35bf25": "addPaused()", +"fb35c41b": "ownerOfTokenByIndex(uint256)", "fb35d545": "unlockDate4()", "fb3650c2": "grab(address[],uint256[])", +"fb367a9b": "getRewardAmount(uint256[],address,address)", "fb368e8f": "getServiceName(bytes32)", "fb36eba1": "createCard(address,uint16,uint16)", "fb36fae4": "setJpycContactAddress(address)", +"fb376cd3": "mnbksPerBlock()", +"fb3790c5": "challengeAscending(uint256,bytes32)", +"fb37b31c": "testAndSetAccountLoaded(address)", "fb37baa1": "whitelistUserForTransfers(address)", +"fb37e883": "mintNFT(string)", "fb386216": "getSeatAddress(uint256)", "fb38ec94": "founder3()", +"fb38fe97": "POINT_MULTIPLIER_BIG()", "fb3918d7": "fillReserve()", "fb3979f0": "updateAccountChartAgainstExistingEntity(address,uint256,uint256,uint256)", "fb3a1fb2": "getReleaseDb()", "fb3a3ff3": "HODLERAddress(address)", "fb3ab12b": "setEndSale(uint256)", +"fb3abe20": "registerIdentityKey(bytes16,address,bytes)", +"fb3abfc6": "voidSenderList(address)", "fb3b11af": "CWCCToken()", "fb3ba9b3": "LogNewBlacklistedAddress(address,address)", "fb3bc400": "myProfitsReceived()", +"fb3bdb41": "swapETHForExactTokens(uint256,address[],address,uint256)", "fb3c0d70": "transferFromToken(address,address,address,uint256)", +"fb3c967f": "redeem(bool,uint256)", +"fb3d4771": "withdrawBalance(uint256,uint256,address)", "fb3d8b6e": "SiringClockAuction(address,address,uint256,uint256)", +"fb3d9006": "dividendsPayouts(address)", "fb3dc0b3": "Leader(string,address,bytes32)", +"fb3e6f29": "buyback(address)", +"fb3e7a82": "isValidTransactionSignature(bytes)", "fb3ea59b": "acceptBatched(address[],bool)", "fb3ed5c7": "airdropSupply()", +"fb3ee571": "seize(address)", +"fb3f0d6f": "verifyZKP(uint256[2],uint256,uint256[3])", "fb3f1fd6": "nextroundblocksbeforenewpay()", "fb3f4d29": "tokenApprove(address,address,uint256)", "fb3f71c8": "addContract(address,uint256,string)", "fb3fd6a1": "m_bIsLock()", +"fb3fdb49": "Listed(address)", "fb402c26": "BuyTokensWithTokens(address,address,uint256,uint256)", "fb40340d": "totalNormalTokenGenerated()", "fb40c22a": "getAllCases()", "fb4101c0": "reward(address,bytes32)", +"fb419999": "changeENSResolver(address)", +"fb4347eb": "pctDIDToDetermineTaskRewardParameterTitle()", "fb43b2a2": "approveBreeding(address,uint40)", "fb43d9f4": "getTotalValue(address[],uint256[],address)", "fb441663": "claimExit(address[],uint256[],bytes,bytes,bytes32)", "fb4460dd": "getVoterStakes(address,uint256)", +"fb44e83a": "testApprove(address,uint256)", +"fb452dc1": "principleValuation(address,uint256)", +"fb45985c": "setLockTokenInfo(address,uint256,uint256)", "fb45d080": "pieBalanceOf(address)", +"fb463be8": "afterTransferSgrToSgnHolder(address,uint256)", "fb468340": "getTotalMember()", "fb46d4c5": "tweet(string)", "fb46d5b1": "awardCyclePrize()", "fb46f492": "emissionMas(address[],uint256[],bytes32[],uint256[])", "fb470a92": "FlukeCoins()", "fb471ce5": "ERC223Transfer_enabled()", +"fb4753a4": "LogClaimReferBenefit(bytes32,address,uint256,uint8)", "fb47a067": "_getRevisionBlockNumber(bytes20,uint256)", +"fb4846de": "vswapFarmingPool()", +"fb4856a2": "externalTokenTransferFrom(address,address,address,uint256,address)", "fb486250": "confirmOwner(uint8)", "fb486c7b": "setGivenName(uint256,string)", +"fb489a7b": "redistribute()", "fb48ca1d": "NewSuggestion(address,string,uint256)", "fb48cf0e": "getVoter(uint256,uint32)", +"fb48d48a": "tokenToBnbSwapInput(uint256,uint256)", "fb490695": "griefCost()", +"fb4939bb": "mintSaleTokens(address)", "fb497ad2": "stage_1_TokensSold()", +"fb49b207": "pawn(uint256)", "fb49dc4a": "AEFFTOKEN()", "fb4a18a2": "setCrowdfundPayout(address,uint256)", +"fb4a2558": "distributeShares(uint256)", "fb4a6cde": "StarbaseEarlyPurchase()", "fb4a86bc": "amountToBeRaised(bytes32)", "fb4aa0a1": "fundReceiver()", "fb4b7693": "sendSeedAndHash(string)", +"fb4b7b65": "Adoption(uint256,address,string,uint8,uint256,uint8)", +"fb4b821b": "numberOfAds()", +"fb4cb32b": "getUserTotalWithdrawn(address)", "fb4cd8e2": "numBidders()", "fb4ce0a9": "addAssetsOwner(address)", "fb4da5b7": "pay(address,string)", +"fb4de288": "getNextSqrtPriceFromAmount1RoundingDown(uint160,uint128,uint256,bool)", +"fb4f32aa": "unFreezeBalance()", "fb4fbcd8": "getClaimTradingProceedsWaitTime()", "fb4fd984": "requestPrize(bytes32,uint8,bytes32,bytes32)", "fb50aec5": "getVendorApplicationStatus(string)", +"fb50e901": "isCurrentlyStaking(address)", +"fb518208": "seasonalAmount()", "fb51a1ea": "read_total_purchased_today(address)", +"fb51a638": "getJobOffers(uint256,uint256,uint256)", "fb5209bf": "trickleUp(address)", +"fb522350": "delayedScripts(uint256)", "fb524c32": "GetMaximumBet()", "fb5274e5": "generateWinners()", +"fb5343f3": "t1()", "fb54047c": "getCustomExtraData(bytes32,uint256,bytes32)", "fb557c8c": "PrideToken()", "fb5589b4": "memCopy(uint256,uint256,uint256)", "fb55d09d": "EtherGames()", "fb55ed2a": "transferBlocToUser(address)", +"fb55fb12": "refund_rxp_value()", +"fb568966": "getEternalStorageAddress()", +"fb571553": "mintOnBuyEth(address,uint256,uint112)", "fb58674d": "Npole()", "fb598f87": "createPost(uint256,uint256)", +"fb5a22f5": "usdpStake(uint256)", "fb5a3282": "restFinish(address)", +"fb5aa1e1": "areShortablePynthsSet(bytes32[],bytes32[])", +"fb5ade31": "fundaddr(address)", +"fb5b3c98": "importUser(address,uint104,address)", +"fb5b6015": "simpleC(uint256)", "fb5b82d0": "setCollector(address)", +"fb5b9519": "getTransactionLimiter()", "fb5bd32b": "withdrawDevBalance()", "fb5d5729": "getPongvalTransactional()", "fb5d5999": "getDepositary_function_control()", "fb5d7376": "step4()", +"fb5d9792": "invitees(string)", +"fb5dfb8b": "endDonation()", "fb5e6a76": "WithdrawMulti(uint256,address[])", "fb5f39dd": "offlineSell(address,uint256)", "fb5f8a13": "changeAddressKnight(address)", "fb5fef42": "distributeALCToken()", +"fb601294": "challengePeriodSeconds()", "fb6021ae": "ICO(string,string,uint8,uint256)", "fb60938f": "getSumAmountOfSuccessfulDeals()", +"fb61074e": "TotalToLock()", "fb6139b5": "setServerFee(string,uint256)", "fb6168ac": "BUY_ME()", +"fb617787": "retireStrat()", +"fb61eb16": "LastZYXAddress()", "fb621f14": "getSecurityTokenAddress(string)", +"fb622397": "getShortCalls(address)", "fb6287d2": "setWalletAddresses(address,address,address)", "fb62e083": "addWhiteListed(address)", "fb632ef9": "transferrableBalanceOf(address)", @@ -144192,6 +263782,8 @@ "fb63e4b1": "CEZA(uint256,string,string)", "fb640453": "_getTotalBmcDaysAmount(uint256,uint256)", "fb644a14": "Force(address)", +"fb64751f": "DayLimitChanged(bytes32,uint256,uint256)", +"fb64884e": "newStake(uint256)", "fb64e072": "recordTransfer(address,address,uint256,uint256)", "fb64e6b1": "icoAddr()", "fb656067": "genesisCallerAddress()", @@ -144199,197 +263791,372 @@ "fb65a1a3": "teamdistr(address,uint256)", "fb65a3cb": "createCampaign(bytes32,uint256,address)", "fb65e4b1": "Contribution()", +"fb65f05a": "plaque()", +"fb66a903": "notEqualAddressPassTest()", "fb674cf4": "emissionEnabled()", +"fb6764d7": "getPosUsers1(uint256)", +"fb678370": "shortMargin()", +"fb678c75": "leftU(uint8,uint8)", "fb67983c": "fuckingClaim1(bytes,bytes)", +"fb67ed12": "getAuthorizedActionRoleAndClass(address)", "fb687c24": "refundMethodABI()", "fb68a3be": "printTokens(uint256)", "fb68aa89": "hasInitCard1()", +"fb68bb72": "getOperatorAddress(bytes32)", +"fb68ed8c": "MYYKBase()", "fb690dcc": "donated(address)", +"fb6961cc": "EIP712_COORDINATOR_DOMAIN_HASH()", "fb6a53d2": "multiBurn(uint256[])", +"fb6a91bc": "isAddressExcept(address)", "fb6aeb42": "PRE_PUBLIC_LOCKUP_PERIOD()", "fb6b18c0": "totalAirDrop()", +"fb6b2841": "setPuppyTokenAddress(address)", "fb6b3857": "transfer_to_session(uint32,uint32,uint64)", "fb6b4afd": "getWeaponModel(uint256)", +"fb6b734f": "StateChannel(address,address,uint256,bytes)", "fb6bbbce": "Crowdsale()", +"fb6c03fa": "protectedLiquidityId(address,uint256)", +"fb6c0cbb": "orgBoostedProposalsCnt(bytes32)", "fb6c2b6f": "stopMarket(uint32)", +"fb6c821e": "Destroyed(uint256,address)", +"fb6c91b6": "continueStaking()", "fb6cae8e": "NetkillerToken(uint256,string,string,uint256)", "fb6d0e8f": "pullShares(address)", +"fb6d3bac": "_getDaoCache(address)", "fb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "fb6e6558": "holderNumber(address)", +"fb6f2f57": "retreiveIds(string)", "fb6f6875": "deleteHotel(address)", "fb6f71a3": "setCharity(address)", +"fb6f74ed": "drawTicket()", +"fb6f7a9a": "eggAddress()", "fb6f93a4": "setEthUsdRate(uint256)", "fb6f9579": "Increase()", +"fb6fef2c": "setList(uint256[])", +"fb6ff865": "awardItem(uint256,bool)", +"fb70261a": "canHarvest(address)", "fb702ed1": "multiDistribute(uint256[])", "fb7043ea": "isRefundPossible()", +"fb706721": "callUniswapRouterInfinite(address,address,uint256,uint256,uint256,address,uint8)", "fb709d2e": "charities(uint256)", +"fb70c3bf": "ygy()", "fb70f765": "foundationTokenSupply()", "fb70ff96": "increasePieceCount(uint256)", +"fb717082": "NewRound(uint256,uint256,uint256,uint8)", "fb71807f": "setUser(string,string,bytes32,uint256,uint256,uint256[],string,string)", "fb719113": "deathData_f17()", "fb7248cb": "playerGuess(address,int16)", +"fb7276f4": "getDlpMiningSpeed(address)", +"fb72b5c5": "getTokensForConverter(address)", "fb72d24e": "shift_right(uint64,uint256)", "fb72fdfe": "setTotalAllowed(address,uint256)", +"fb736d32": "MAX_TOUCHED_ORDERS()", "fb73a593": "modifyAllLevelCaps(uint256[],uint256)", "fb741504": "IndividualCapCrowdsale(uint256,uint256)", +"fb742078": "saleBeginTime()", +"fb74381f": "cCORE()", "fb7450be": "setBtcToken(address)", "fb74da7e": "setTentativeWinningPayoutDistributionHash(bytes32)", "fb74e6f7": "ADVISOR_STAKE_FOUR()", +"fb755643": "governance_xdai_balance()", "fb756f97": "Tokenomicx()", "fb75b2c7": "rewardWallet()", +"fb76cc98": "setRolesLibrary(address)", +"fb771e8c": "getZodiacDetails(uint256)", +"fb772466": "_registerFunctionCall(bool,bytes4,address,uint128)", "fb77269e": "periodITO_period()", "fb77378a": "SCOOP()", "fb775b46": "giver()", +"fb77bc49": "addDelay(address,bytes4,uint256)", +"fb77c94e": "logSlashed(uint256,uint256)", +"fb77e9d4": "getExistingOrders10(uint8,address,uint256)", "fb77eae2": "startTimeSaleWithBonus()", "fb78eb53": "Oncology()", "fb78f85c": "mgrCount()", "fb791b0b": "withdrawOrder(uint256)", "fb794281": "gas_amount()", +"fb795138": "ifluxury()", "fb79e70f": "superNovaSupply()", "fb7a2c1f": "addQuestion(string,uint256,uint256,string)", "fb7a5f4f": "getEndBlock()", +"fb7a5f60": "addLand(bytes32,bytes32,bytes32,uint256)", +"fb7a6fc9": "getAllowStatus(address)", "fb7a809c": "buyStageDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"fb7aaa2e": "MintingAdrTransferred(uint256,address,address)", "fb7ae31e": "getCurrentRoundLeft()", +"fb7b79e9": "userRewardToken()", +"fb7b857d": "burnForUsers(uint256)", +"fb7ba468": "frtThreshold()", "fb7baf70": "initRegistMatch(uint8,uint8,uint8,uint256)", "fb7c0a3f": "doBuy(uint256)", +"fb7c591e": "Book_FLIGHT(uint256)", "fb7cb850": "setMaxMerge(uint8)", "fb7cf694": "buyPriceInWei()", +"fb7d45a4": "injectItemService(address)", "fb7e54eb": "vcx()", +"fb7e7349": "deed3()", "fb7e7456": "endOfLockProjectToken()", "fb7f21eb": "logo()", +"fb7f2488": "getDelegatorRewardTokensRT(address,address)", +"fb7f2672": "calculateIssuanceAmount(uint256)", +"fb802a65": "shareRate()", "fb80d66f": "SQR_TOKEN_MULTIPLIER()", "fb80fe9e": "test(uint256,address)", "fb81299b": "setAllMarketsFinalized(bool)", "fb815503": "withdrawWin()", "fb81563b": "SpaceImpulseERC20()", +"fb81f9b3": "Released(uint256)", +"fb8211f1": "ETHContributedForBonusTokens(address)", +"fb821a3c": "amountOfEachPeriod()", +"fb8236eb": "flashloan(string[],string[])", +"fb828118": "loopDepositAndWithdraw(address,uint256,address,uint16,uint256)", +"fb82c5c2": "MarketingCoinsGranted(address,uint256,uint256)", +"fb831b9a": "claimedRewards(address,uint256)", +"fb84413b": "setP2(uint256)", +"fb84b354": "CoinAgeResetEvent(address,uint256,uint64)", +"fb84d295": "approve_818(address,uint256)", "fb84da41": "createSketch(string,string)", +"fb84e7ec": "_collectPatronage(uint256)", "fb850fab": "newCampaign(uint32,uint256)", "fb8621df": "push(bytes32,string,bytes)", "fb8632b8": "availableEmission()", "fb867165": "getSaveData(address)", "fb86a404": "hardCap()", +"fb86d503": "dusdc()", +"fb86e71b": "TMTG_SetOperator(address)", +"fb87774c": "getTicketStatus(uint256)", +"fb87a635": "pools(uint8)", "fb87bf7b": "LLX()", "fb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", "fb87eb0b": "setRefundsActive(bool)", +"fb883d0c": "withdrawalMaxDeviationThreshold()", +"fb884630": "endSubscriptionProvider(address,bytes32)", +"fb887f93": "getDeveloperProfit()", "fb88e7c1": "updateBestPromouter(address,uint256)", "fb890a17": "YUPToken(address,address,address,address,address)", +"fb89c508": "h(int8)", "fb89fb28": "yield7Day()", "fb8a5bf8": "H2OC()", "fb8a5f1c": "createTransaction(address,uint256,bytes32,address,address)", +"fb8a8b27": "getBitcoinMovingAverage()", +"fb8ad6ff": "owners(bytes32)", "fb8b0197": "claimReceivables(address[])", +"fb8b406c": "chm(uint256)", +"fb8b7992": "withdrawDeposit(uint256,address)", "fb8bc297": "getInvestorPackPrice()", +"fb8bc59b": "offerWithdrawCallData(uint256)", +"fb8c5ef0": "withdraw(address,uint256,uint256[])", "fb8c7420": "GetRandomNumber()", +"fb8d8a73": "requestSwapTokensForExactETH(address,uint256,uint256,uint256)", "fb8dd3bb": "createEvent(bytes32,bytes32[],address,uint256,uint256,uint256,uint256)", +"fb8de915": "timeToLive()", "fb8e4f1a": "BountyChanged(uint256)", "fb8e7870": "buyKebabs()", "fb8e82b4": "min(uint32,uint32)", +"fb8efdec": "findFreeX5Referrer(address,uint8)", +"fb8f59f4": "earn_gap()", +"fb8fc8d4": "firstActivate(uint256)", +"fb901549": "isNotProtect(address,uint256)", "fb9073eb": "reLoadXname(bytes32,uint256)", +"fb90b320": "createForwarder(address,bytes32)", +"fb90f3bd": "bubbleRevert()", +"fb912246": "uniswapRouter02()", "fb913d14": "sendByTranche(bytes32,address,uint256,bytes)", "fb920ad1": "reclaimAndBurn(address,uint256)", "fb92488b": "ChangePrice(uint256)", "fb92507d": "daytime(uint256)", +"fb929bcd": "getStat(bytes32)", +"fb92da6c": "removeRoles(address[],string[])", "fb92e4fb": "_isGoodAddress(address)", +"fb931000": "writeStuff(uint256,uint256)", "fb932108": "distribute(address,uint256)", +"fb93e5da": "addTokens(address[],uint8[])", +"fb942206": "vETHAddress()", +"fb9422ff": "isMinterContract()", +"fb94bec1": "submitHash(string)", "fb950559": "getAffiliation(address)", "fb950a7f": "addGrantableAllocation(address,uint256,bool)", +"fb9591d5": "playerTeams_(uint256,uint256,uint256)", "fb95adeb": "testFailBlockhashInsuffiecientFee()", "fb95d9e7": "addConfigEntryAddr(bytes32,address)", "fb961571": "ICOStartBlockChanged(uint256)", "fb969b0a": "bootstrap()", +"fb96b456": "yourDarkBalance(address)", "fb9734fc": "confirmProposal(address,bytes32,uint256)", +"fb9759ce": "HatBids(uint256)", "fb979ba2": "ROUND_1_PRESALE_BONUS()", "fb97b61f": "lpAskVolume()", +"fb983b83": "unswapLeftovers()", "fb98a409": "skinContract()", +"fb98c539": "getIssuedRetainedSupply()", +"fb98d9e2": "requestNonceTaken(address,uint256)", "fb990288": "_newInterest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fb999ded": "subMemoryCheck()", +"fb99b86d": "isTransferAgent(address)", +"fb9a0481": "setjigouyongjig(uint64,uint64,uint64,uint64,uint64,uint64)", "fb9a0c58": "startRefundProcess(uint256)", +"fb9a0eb7": "createFileTransferProof(address,address,bytes32)", "fb9a2ce2": "getSellPosition(bytes32,uint256)", "fb9a4595": "GitHubBounty()", +"fb9a8889": "ethTotalDeposit()", "fb9ab10b": "EpsToken()", "fb9b4ab8": "createrAddress()", +"fb9b8264": "undelgateWithSign(address,address,uint256,uint256,bytes)", "fb9ba033": "checkAllowedAddressForMinting(address,address)", "fb9ba7bc": "removeAccreditedInvestor(address)", "fb9bbeaf": "RaiSed()", "fb9c7303": "completeInvestment()", +"fb9c9a30": "newContract(address,address,uint256,bytes32,uint256,bytes32)", "fb9ca16b": "MarianaKey(uint256,string,uint8,string)", "fb9cb15d": "numChipsMinted()", "fb9dd851": "getGameInfoByIndex(uint256)", "fb9ded46": "totalWeiRaisedDuringICO3()", +"fb9df249": "feeBlackList(address)", "fb9e1270": "investmentIdLastAttemptedToSettle()", +"fb9eb990": "setTermEndBlock(uint256)", "fb9ec0a8": "assignPersiansToBattle(uint256)", "fb9efcf0": "setCustodianForeign(address)", +"fb9fd054": "setTokenUserBP(uint256)", +"fb9feff6": "WITHDRAWAL_FEE_FREE_PERIOD()", "fba06849": "fipsPublishDataMulti(bytes20[],bytes)", "fba07791": "fiatCost()", "fba0aa5b": "txFeeSentInWei()", "fba0ce5e": "setLinkedIn(string)", +"fba0e8ae": "lbcPerBlock()", +"fba0ee64": "safeBatchTransferFrom(address,address,uint256[],uint256[])", +"fba0fa26": "liquidateNonCompliantCounterVault(address)", "fba12c17": "minerLockAddress()", "fba13bd0": "depositBalanceOf(address)", +"fba17366": "getstakeparticipandetail(address)", "fba17fc9": "Flye()", +"fba1d84f": "ChangeFee(uint256)", +"fba1f7b0": "lastDripTime()", +"fba206c3": "purgeContractBalance()", +"fba225b9": "buyOption(uint256)", "fba246de": "DepositETH()", +"fba24c03": "AddSuperAdmin(address)", "fba26207": "setUint64(int64,uint64)", +"fba28545": "isSameItem(uint256,uint256)", "fba2a2d2": "setPeriod(uint16)", "fba2b18b": "_getplayersurplus()", "fba2fb66": "newPolicy(bytes32,bytes32,uint256,uint256,uint8,bytes32)", +"fba36a26": "mintDiamondTo(address,address,bytes3,bytes16,bytes8,bytes20,uint24,bytes32,bytes8)", "fba36b31": "payWithRef(address)", +"fba36ca0": "getStakingWithdrawalTimestamp(address,uint256)", +"fba3ad39": "logBytes4(bytes4)", "fba4734f": "withdrawEthereum(uint256)", "fba4abb2": "payoutBalanceCheck(address,uint256)", +"fba4b999": "set_issuer(uint64,address)", "fba52ff1": "getInvestorClaimedTokens(address)", +"fba58f34": "minHeimdallFee()", "fba5de1c": "cancelGetTogether()", "fba5ee24": "getSinistre_effectif()", "fba5f1f6": "weaponModels(uint256)", +"fba64b22": "EventGatewayNewAddress(address)", "fba6651c": "getCommunityTaxes(uint256)", "fba6748c": "getMaxPrivateSaleBuy()", "fba6e51b": "_getFinalAddress(uint256[],address[],uint256)", +"fba6fc98": "init(uint256,address,address,address,address,address,address,address,address)", "fba70381": "adventureByToken(address,uint256,uint256,uint256,uint64,uint64)", "fba71fe9": "periodICOStage6()", "fba74490": "PoseidonQuark()", +"fba7591d": "makeGemBag(address)", "fba779f6": "armyHelicoptersCount(uint256)", "fba79777": "test1cash()", +"fba79b48": "_devTeamSupply()", "fba7c1ab": "addMake(string,address,uint256,uint256)", "fba7cc79": "getIsActive()", +"fba7d649": "_collectAll()", "fba83066": "topSalesRatio(uint16)", "fba84b2a": "LjwStandardToken()", +"fba8f031": "removeConvertibleToken(address,address)", "fba90629": "totalSupplyPrivateSale()", "fba906c5": "HiroyukiCoin()", +"fba908d6": "setLastRebalance(uint256)", +"fba92b08": "_approveStakingFromReserves(bool,uint256)", "fba939f8": "_goal()", +"fba95b49": "ownerCardPoints(address)", "fba9ce40": "donateToDev()", "fba9cea9": "someAction(address)", "fba9dbbb": "chnageSpecialFeeTake(uint256,address,uint256,uint256)", "fba9ecac": "getFreeBanker()", "fbaa0ece": "weekTwoRate()", +"fbaa1d0a": "initilized()", +"fbaa4019": "checkpointBalances(address,uint256)", +"fbaa5485": "evolveGeneration(uint256)", "fbaa6050": "getApprovalRequirement(bytes4)", "fbaa89d3": "LogBidRemoved(address,uint256)", +"fbaa978c": "getExemptAddress()", +"fbabb94f": "unlock_devPool(address)", "fbabc444": "PeaceChainToken(uint256,string,string)", "fbabdb06": "disapprove(address,uint256)", +"fbabdebd": "swapSaiToDai(uint256)", "fbac3951": "isBlocked(address)", "fbac7d1d": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", "fbac89f6": "unlock(bool)", "fbacc43f": "getBases()", "fbad8983": "sendyum(address)", +"fbaddc9c": "prevReward(address)", +"fbae3372": "GetRecordId()", "fbae5e7d": "Investors(uint256)", +"fbae732c": "importCdpProxy()", "fbaeac89": "newOwnerAPI()", +"fbaeea61": "getSafeWithdrawAmount()", "fbaf094a": "provider(address)", "fbaf12a7": "_removeBlacklistedUser(address)", +"fbaf1bbd": "dailyEstimate(address)", +"fbb001d6": "transfer(address,uint128)", +"fbb037ba": "totalDailyRewards()", +"fbb08742": "feeToUpdate(address)", "fbb0eb8b": "mintingNonce()", +"fbb0eba2": "SoftCapChanged()", +"fbb0f79d": "ovmSTATICCALL()", "fbb11f29": "setTokenGbi(address)", "fbb1c5c4": "XBCOMMUNITY()", "fbb26d00": "releaseBasicAccount()", +"fbb27dce": "repaid()", +"fbb29cfd": "getUserAvailAwards(address)", +"fbb37cf2": "sales(string)", +"fbb386e8": "BLOCK_ROLE()", "fbb39f6e": "offerTrade(uint256,uint256)", +"fbb47d10": "IRsKey(address)", "fbb4d51b": "OverseasReturneesUnion()", "fbb4dc6b": "secondMonthEnd()", "fbb4f0e3": "NuToken()", "fbb58c5c": "STARTING_FALCON()", "fbb5d52d": "sellCoinsToICO(uint256)", "fbb5f682": "KUNTEStandardToken(uint256,string,uint8,string)", +"fbb62337": "isBToken()", "fbb6272d": "tokens(uint32)", +"fbb63068": "ServiceURIUpdate(address,string)", "fbb65708": "freedWinPoolForSecondStage()", +"fbb6ab9a": "HEXmeLobbyETHperDay(uint256)", +"fbb6d9aa": "activeTimesTo(uint256)", +"fbb6ea08": "getLastPotatoYield(address)", +"fbb71174": "WithdrawalETH(address,uint256)", "fbb78719": "private_setmaxBet(uint256)", +"fbb7e0b9": "TWAP4Hour()", +"fbb83994": "supportedTokensT1(uint256)", +"fbb85c76": "fromRay(uint256)", "fbb8932a": "getSeatMessage(uint256)", +"fbb97e9c": "checkCompleteContentCampaign(string,uint256,uint256)", +"fbb9e715": "metaRefundContributions(bytes,uint256,uint256,uint256[],uint256)", +"fbba419b": "invalidLiteral()", +"fbba71ad": "returndeposit()", +"fbba7b62": "getTotalVolume(uint16)", +"fbba948e": "OldPragmaFloat()", +"fbbab30e": "piptToken()", "fbbb75c5": "getClaimedOwners()", +"fbbc2243": "WhiteListContributors(address[],bool[])", "fbbc3448": "getWrefundIndex(uint8)", +"fbbc54e9": "gt_contract()", +"fbbc8925": "rescueMistakenlySentTokens(address,address,uint256)", "fbbcb4de": "GointoMigration(address)", +"fbbcedf3": "getcontractactive()", "fbbd6545": "pushHatch(address,uint32,uint16,uint16)", "fbbdb68c": "hiddenOwner()", "fbbdbf22": "_setTimes()", +"fbbe0e14": "predecr(uint256)", "fbbe20a9": "breeding(uint256,uint256)", "fbbe7887": "NewBOP(address,address,uint256,uint8,uint256,string)", "fbbedf5c": "ERC20Token(string,string,uint8,uint256)", @@ -144398,59 +264165,104 @@ "fbbfa45e": "destory(address)", "fbbfe830": "refundTokenHolder()", "fbc00b4a": "GACC()", +"fbc020a1": "withdrawBenefits(uint256[])", "fbc032ab": "GCFcoinF(uint256,string,string)", +"fbc0555d": "withdraw_all_erc20(address)", +"fbc09321": "payoutBurns()", "fbc09b26": "m_totalDatasetCount()", +"fbc109ad": "isUse(address)", +"fbc14bfb": "ownerSetPoolRewards(uint256)", +"fbc1fbe7": "ownerSetName(string)", +"fbc2469e": "cEthAddr()", "fbc34d1c": "artistsArtworkCount(address)", +"fbc37b09": "yourStakedERA(address)", +"fbc37ca9": "unsafeTransferFrom(address,address,uint256,uint256)", +"fbc39b95": "PriceChange(uint256,uint256,uint256,string)", "fbc3d0ef": "frozenReserveTeamWallet()", +"fbc3dd36": "heimdallId()", "fbc402fc": "updateDarknodeBond(address,uint256)", +"fbc404bb": "getEstimatedTokens(uint256,address,address)", "fbc44458": "setTransferAuthorizations(address)", "fbc449a7": "FirstContract()", +"fbc469d6": "Whitelisted(address[],bool)", "fbc47e56": "tokenListContract()", "fbc4f981": "ReceivedBTC(address,uint256,string)", +"fbc51e4b": "updateURL(string)", +"fbc52057": "getAmountWeeklybyNum(uint32,uint8[5])", "fbc53c8e": "Arascacoin(uint256,string,string)", +"fbc5a75f": "getGroupContent(uint256)", "fbc5db95": "lowestAskTime()", "fbc6c0f0": "firstChipBonus()", "fbc6d0ff": "confirmTransactionWithSignatures(bytes32,uint8[],bytes32[])", +"fbc6d1cb": "safeApprove(address,uint256)", "fbc6d545": "ADST()", +"fbc6ef00": "auction__slotsSold()", "fbc7ad3e": "finishedLoading()", "fbc805ee": "changeMaximumContributionForAllPhases(uint256)", "fbc80af6": "FakeNewsToken()", "fbc8aafe": "delegateExecute(address)", +"fbc91446": "RTF(uint256)", "fbc94bd1": "icoFinishInternal(uint256)", "fbc94f24": "changeTokenPrice(uint256)", +"fbc96e68": "_internalRequireSystemActive()", "fbc990d0": "_removeMember(address)", +"fbc9a4af": "PercentV(uint256,uint256)", "fbc9c601": "requestAccess(address,int256,address)", "fbca1c9d": "get_charge()", +"fbca3648": "isSmartPool()", "fbca6ba6": "maintenance(uint256)", +"fbcaac50": "setTier1StartTime(uint256)", +"fbcb383a": "subtotal(address)", "fbcbc0f1": "getAccount(address)", +"fbcbd77e": "_setFeeDistributor(address)", +"fbcbf5ba": "setFixRet1(uint256[])", "fbcc3775": "isMyWalletLocked_Send()", "fbccc2b1": "setBoolF1UintF1StrF2Intf3(bool,uint256,string,int256)", +"fbccedae": "releasable()", +"fbccf21e": "viewMyMintingAmount(uint256)", +"fbcd6516": "getStructure(address)", +"fbcd9b05": "ACCURACY()", +"fbce0cc6": "shares_owner(address,address)", "fbcebd02": "delegatedRefund(address)", "fbcece85": "freeTokens(address,uint256)", +"fbcef25a": "weiToSatoshi(uint256)", "fbceff0e": "WangWangCoin(uint256,string,uint8,string)", "fbcf1594": "UNLOCK_TEAM_2()", "fbcfa0d7": "createCard(string,uint256,address,address,bool)", +"fbcfb5ae": "set_redepositRatio0(uint16)", +"fbcfe60d": "get3XMatrix(address,uint8)", +"fbd05c67": "notionalAnnualizedYieldJuly()", "fbd06cb6": "s42(bytes1)", "fbd0c5d7": "SaleClockAuction(address,address,uint256)", "fbd0e7df": "Reimburse()", +"fbd14f54": "distributeTradingFees()", "fbd15163": "lengthMessages()", "fbd18b58": "setBlockBalance(uint256,uint256,uint256)", "fbd1df54": "TotalCount()", "fbd1eb7b": "deployAgentWallet()", +"fbd21f87": "LogIssuance(address,uint256)", "fbd22407": "EscrowRaj()", "fbd275f8": "randomGen(address,uint8)", "fbd2dbad": "previousDelegates(uint256)", +"fbd31eed": "LIMIT1()", "fbd395f8": "pauseToken(uint256)", +"fbd3967b": "isLeaseCompleted(uint256)", "fbd3c51a": "left83(uint256)", "fbd3d51b": "setMasterAddress(address,address)", +"fbd4122a": "getConversion(uint256,address[])", "fbd4200c": "base_token_is_seeded()", "fbd42e0f": "releaseLockedTokens()", +"fbd49635": "updateLiquidityAddr(address)", "fbd4e0f0": "chkdrawadm(address)", "fbd54a63": "sendAmount(address[],uint256)", +"fbd58650": "getVpnSessionsCountOf(address)", "fbd59425": "ETLToken()", +"fbd606de": "initialDistribute(uint256[],address[],string[],string[])", +"fbd656da": "getKeyRingImplementation()", "fbd668a9": "setMaxProfit(uint256)", "fbd6d77e": "addCoordinator(address)", "fbd6fdde": "reLoadCore(uint256,uint256)", +"fbd702c2": "getMeBEP20Coins(uint256)", "fbd70768": "___setProxyOwner(address)", "fbd7b853": "setTokenSupplyLimit(uint256)", "fbd7c5f1": "priceT3()", @@ -144458,95 +264270,157 @@ "fbd81564": "logger(string)", "fbd902f2": "_distributeTokenToPurchaser(address,address,uint256)", "fbd95a39": "sendToAddress(address,address,uint256)", +"fbd95a4c": "setGovenors3_open(bool)", +"fbd96535": "payoutClaimed(address)", +"fbd9b2cc": "ModifyWhiteList(address,bool)", "fbd9c625": "changeAddressPaladin(address)", "fbd9c902": "vendi()", +"fbda561c": "isAllowedCard(uint256)", "fbda68e2": "numberOfMessages()", +"fbda9824": "approve_553(address,uint256)", "fbdafaf9": "getInvestorAtIndex(uint256)", "fbdb70fb": "KRWT()", "fbdbad3c": "lastCompletedMigration()", +"fbdbfc1a": "token_bsgs()", "fbdc03fe": "nettingContractsByAddress(address,address)", +"fbdc1ef1": "states(bytes32)", +"fbdc3d76": "pendingHYPE_single(uint256,address)", "fbdc562a": "setCanChange(bool)", +"fbdc5eb7": "removeAuthorization(address,address,address,address,uint256)", +"fbdcb15d": "msghash(bytes,bytes,uint256,string,bytes,uint256,bytes)", +"fbdcba40": "wing()", +"fbdd25e4": "award(address)", "fbdd3982": "s17(bytes1)", "fbdd7852": "Ownership()", "fbdd8508": "PriceAccepted(uint256,uint256)", +"fbdd8a78": "latePrice()", +"fbdd955f": "NumberUser()", "fbdda15a": "isTrustedContractAddress(address)", +"fbddd14b": "testRandom()", "fbde47f6": "FEE_RANGE()", "fbde5b64": "gameLength()", "fbde8ad4": "pStartBlock()", "fbde8d75": "manualWithdrawTokens(uint256)", "fbdeecab": "endTimePreIco()", "fbdf0378": "getAllChildren(bytes32)", +"fbdf3b43": "getSingleStatus(bytes32)", "fbdf45c8": "ZoosCoinToken()", +"fbdf9afa": "isLeaseCompleted(string,uint256)", "fbe00e8e": "receiveEtherFromGameAddress()", "fbe04e1c": "boolFunc(bool,bool,bool)", "fbe0508c": "toggleActive(bool)", +"fbe05ef3": "monthCounter()", "fbe093dc": "targetFeePeriodDurationSeconds()", "fbe0fa4b": "checkDivsMgView(address)", +"fbe158af": "withdrawFeeTokens(address)", +"fbe1e3c9": "fundsToStream(uint256,uint256)", +"fbe1ebec": "harvestFor(address)", +"fbe236e3": "yieldFarmStake(uint256,uint256)", +"fbe29e33": "totalBattles(uint256)", +"fbe2de18": "participantMap(uint256)", "fbe2e125": "addBet(uint256,uint8,uint256,bool)", "fbe334f8": "getNumFulfillments(uint256)", "fbe3462c": "minBuyRateInPrecision()", "fbe3549c": "addWeight()", "fbe38ffb": "canEscapeTo(uint32,int256,uint32)", +"fbe3a871": "addToMappingOfStructs2(uint256,string,uint256)", "fbe3bb40": "TSTOraclzAPI()", "fbe3e1a2": "_setCap(uint256,string)", "fbe413e4": "createMember(address,bytes20,uint64)", "fbe45b48": "unitPLATCost(uint256)", +"fbe4c3c1": "sendAllowances()", +"fbe4ed95": "oneSplitView()", +"fbe50df7": "GetUserGradeProfit(address)", +"fbe53234": "setFeeDestination(address)", +"fbe5ba1e": "getMarketLiquidityRate(address)", "fbe5ce0a": "removeOwner(address,address)", "fbe5d87e": "getTotalCollected()", "fbe6529f": "findOldest()", "fbe6a9b2": "winners_count()", +"fbe6b092": "pairTokens(bytes32,address,address)", +"fbe73814": "midMaster()", +"fbe73ea5": "C11(bytes)", +"fbe77c66": "executePullPayment(address,bytes32,uint256[2])", +"fbe788ab": "callTo(address,uint256,bytes)", "fbe7913f": "Accept_Payment()", +"fbe85f06": "canWithdraw(uint256)", "fbe89965": "GoldenCoinToken()", "fbe8dab9": "getProfitForDay(uint256,uint256)", "fbe9bb6d": "_isValidDepositCountry(uint256,uint256,uint256)", "fbeaa807": "RefundSent(uint256,address,uint256)", "fbeaaed2": "VersionedAgreementControll()", +"fbeac3c6": "setPriceOfEth(uint256)", "fbeac9c9": "setRefBonus(address,uint256)", "fbeaebc6": "murder()", "fbeb89dd": "tournamentContract()", "fbebc9af": "getPixelAuthor(uint32,uint32)", +"fbec27bf": "set_feeWhitelist(address,bool)", "fbec4769": "MatchpoolAdministrator()", "fbec51bc": "requestRedemption(address)", "fbec6f21": "gold()", "fbec9121": "maxRandom(uint256)", "fbece99f": "abortive(uint256,uint256)", +"fbed3daa": "New0xBTCLove(address,string)", +"fbedbe5c": "unpauseLendingPool(address)", +"fbee5f62": "processUnstake(uint256)", "fbee7b58": "giftIsFrom()", +"fbeea06c": "brrrrrr(uint256)", "fbeecb47": "safeTransferByContract(address,address,uint256)", "fbeee7e4": "isPeriodClosed(uint256)", +"fbeefc3c": "getFeeProvider()", "fbef0195": "_calcDelta(uint256,uint256,uint256,uint256)", "fbef957b": "ada()", +"fbf004e3": "newBAndTransfer()", +"fbf0229d": "burnTokens(uint96)", "fbf05e69": "GasLog(string,uint256,uint256)", "fbf0ade1": "setOwnerFee(uint256)", "fbf0f7da": "buildOutAddress()", "fbf184c6": "getBankermasterReq()", "fbf1a44b": "holyBountyFundDeposit()", +"fbf1b16f": "ADXL()", "fbf1f78a": "unapprove(address)", "fbf22dea": "issueSoftcapToken(address,address,uint256)", "fbf2360c": "isMessageEnabled()", +"fbf2866a": "UpdateStatus(string)", "fbf2dd6a": "depositTokensForAccount(address,address,address,uint256)", "fbf350e2": "TokenBBBasic()", +"fbf37739": "borrow(address,address,uint256,uint256)", "fbf3c88d": "getSignedPublicEncKey(address)", "fbf405b0": "pinakion()", +"fbf40624": "trackId()", "fbf42072": "CashPoints1()", +"fbf439d4": "nothingHere()", "fbf44a1b": "setOraclizeGas(uint256)", "fbf552db": "hint()", "fbf561fe": "developer_add_address_for_A(address)", "fbf58b3e": "transfer(string,address)", +"fbf62b70": "checkOfferMining(uint256,uint256)", +"fbf66ff9": "approve_367(address,uint256)", "fbf69367": "FuleexToken()", +"fbf76eb2": "burnStarted()", "fbf788d6": "cash(address,uint256,uint8,bytes32,bytes32)", "fbf7980f": "setChainsAddresses(address,int256)", "fbf7ba65": "claimExploreItem(uint256)", +"fbf7c7df": "joinFee()", "fbf7e985": "ExaUSD()", "fbf80773": "isUserRoot(address)", "fbf82d31": "WorldWideCoin()", +"fbf82ea7": "setDNK(uint32,uint256)", +"fbf9153b": "mintedHxb(address)", "fbf9180e": "getLastAuditTime(address)", +"fbf91bf5": "unbondMax(bool)", "fbf92322": "getPoolSizeQspWei(uint256)", "fbf94ce1": "GlaidexToken()", "fbf9dab7": "getBetters()", "fbf9dc12": "GoldBank()", "fbfa49a8": "icoWithdraw()", "fbfa4b7f": "requestsCount()", +"fbfa4e11": "updateLockTime(uint256)", "fbfa77cf": "vault()", +"fbfa941f": "ledger(address)", +"fbfaa24d": "unstakingTaxRate()", +"fbfaba4b": "isRegisteredDataProfile(string)", +"fbfac439": "maxChecks()", "fbfb76c4": "GUAEX(uint256,string,string)", "fbfb77d7": "setArquivo(bytes)", "fbfb7e70": "market_WithdrawForSale(uint256)", @@ -144554,12 +264428,22 @@ "fbfbb62e": "BASE_CLB_TO_ETH_RATE()", "fbfc1653": "XBLToken()", "fbfca20b": "_Send_Bettings_to_Winner(uint256,uint256)", +"fbfcb5a2": "convertUni(uint256,uint256,uint256,uint256)", +"fbfcd241": "HOURS()", "fbfd1da4": "getKeccak256Uint(uint256,uint256)", "fbfd45f5": "PRE_SALE_START_2()", +"fbfd8ab7": "GoalReached(uint256)", "fbfd90cb": "finishBurningByCreator()", +"fbfdc41c": "unWrapTokens(address,uint256)", +"fbfe402f": "withdrawProductToken(string,address,uint256)", +"fbfe55b4": "benefitsOf(address)", +"fbfe5790": "getIntervalCoefs(uint256,uint256)", +"fbfecaa3": "uploads(uint256)", "fbff728f": "HodboCrowdsale()", +"fbffa865": "getAmountInRouter()", "fbffb355": "testBitsEqualFailIndexOOB()", "fc00234e": "icoStage()", +"fc00358e": "getAddressListLength()", "fc006216": "MODICOIN()", "fc01157c": "firstCrowdSaleEndDate()", "fc017495": "EmployeeOptionsExercised(address,address,uint32,bool)", @@ -144568,13 +264452,20 @@ "fc01abbe": "stringToBytes32(string,string)", "fc01ce83": "increaseClaimsBalance(address,address,uint256)", "fc01dfbb": "mintUpto(address,uint256)", +"fc01e439": "MultiERC20Transfer(address,uint256,address,uint256,address)", +"fc0259ca": "isAuraEffect(uint256)", "fc0262e0": "CpublicGold()", "fc02c1df": "assertExpectations()", +"fc031e6c": "PRI()", +"fc033278": "totalStakePools()", "fc03441c": "allDecimals()", "fc034bd8": "getPoolOwners()", +"fc034c43": "isTrusted(string,address)", "fc036d7c": "SECURITY()", "fc037776": "assertEq31(bytes31,bytes31)", +"fc03871a": "CreateSPIN(address,uint256)", "fc03c7ec": "setLockend1(uint256)", +"fc03dbaf": "freeGem(address,address,address,uint256)", "fc03fb11": "MacBookOracle()", "fc043830": "getNetworkFee()", "fc043cad": "setPullPaymode()", @@ -144582,60 +264473,110 @@ "fc04a2ec": "_getOriginAddressHash(address,address,string)", "fc04c0c4": "partnerTransfer(uint256,bytes32,address,uint256)", "fc04c62e": "offerAsSacrificeFromVault(address)", +"fc053420": "_elapsedTime()", "fc05a6fc": "getPeopleBeforeMe(address,address)", +"fc05ca31": "createOrder(address,uint256,address,uint256)", "fc06013a": "updateTokenEmission(uint256,uint256,uint256,uint256)", "fc0656c9": "candyTokenAddress()", "fc06a877": "createApp(string,uint256,string)", "fc06d2a6": "sunrise()", +"fc077497": "getDepositedTokens(address)", +"fc077eec": "fooview(uint256)", "fc078bd4": "GDCAcc05()", +"fc078f7e": "_setfusionInterval(uint256)", "fc0808e5": "bet_MIN()", +"fc081b16": "withdrawOff()", +"fc08d125": "AddressUpdate(bytes32,address)", +"fc08e313": "lockRanking()", +"fc090d81": "numGanador()", "fc091b71": "MitCoin()", "fc09ff9e": "submitTransaction(address,string,string,uint8[],bytes32[],bytes32[])", +"fc0a048a": "viewAvailableUsdt(address)", "fc0a39b7": "isJackpot(bytes32,uint256)", +"fc0b146e": "newChallenge(uint256,address,string,address)", "fc0c3460": "CryptoSoft()", "fc0c38a7": "Dsocial()", "fc0c50fe": "getCallPtr()", "fc0c546a": "token()", +"fc0cc0a8": "payOvernightFee(address)", +"fc0cdb45": "presaleBulkLoad(address[],uint256[],uint32[])", +"fc0ce503": "doDiv(uint256,uint256)", +"fc0cfeee": "setAdminImpl(address)", "fc0d0117": "masterWallet()", +"fc0d99b6": "NewTokenGrant(address,uint256,uint256,uint256)", "fc0dce74": "ATL(address)", +"fc0deadd": "lotSizeSell()", "fc0e3d90": "getStake()", "fc0e4262": "___AllBalance()", +"fc0e6008": "forLoop()", "fc0e64de": "setInitialGasForOraclize(uint256)", "fc0e74d1": "shutdown()", "fc0ea853": "processWithITG(address,uint256)", +"fc0ec25d": "transferpoolint(address)", "fc0f392d": "activateSafeMode()", +"fc0f88f1": "CalculatePayment(uint256,uint256)", "fc100eb2": "inxToken()", "fc10655e": "actual_feedin()", "fc10881a": "CXCoin()", "fc108f70": "GamblerPerAddress(address)", +"fc10a52c": "setMinBetForERC20(address,uint256)", "fc10d4d5": "getFeeRecipientById(uint256)", +"fc1199b9": "maxEnds()", +"fc11e611": "AttributeAdded(address,address,uint256,uint256)", "fc11f71c": "setInstructor(address,address,uint256,bytes16,bytes16)", +"fc1211c9": "OG2_BONUS()", "fc122892": "deleteOpenAction(string,address,string)", +"fc124021": "finalizeVoteEvent(uint256)", +"fc124ebd": "balanceOf(bytes,address)", +"fc128f96": "getConfigPools()", "fc12c7da": "blocknumbersOf(uint256)", "fc12dfc7": "weiDelivered()", "fc13440c": "HealthCharityToken(uint256,string,uint8,string)", +"fc13566d": "grantVestedTokens(address,uint256,uint256,uint256,uint256,bool)", +"fc135fee": "ownerKill(bool)", "fc136941": "EmergencyWithdrawalProposed()", +"fc136a1c": "totalreward()", +"fc1372d5": "registerAndVote(uint256,uint256,string,string)", +"fc139451": "getStakesdataLength(address)", "fc13a76a": "testFailAddForeignChildNotInUse()", +"fc13cef1": "addFavorTokenUser(address)", "fc14230f": "wei2euroCents(uint256)", "fc143f2b": "defrostOwner()", +"fc14965f": "migrationCutoff()", "fc14a47c": "CTBToken()", +"fc14e4d8": "_whiteAddress(address)", +"fc14ed15": "minIndex(address)", "fc14ed71": "updateForSale(uint256)", +"fc155926": "getUnstakeBurnFee(uint256)", +"fc15681e": "SetBn(address,string,bytes32,string,bytes32,bytes)", "fc157b13": "getOrganFunction(uint256)", +"fc157cb4": "PCT_BASE()", +"fc15a230": "utilityTokens(bytes32)", "fc15dcef": "resAmount()", +"fc160329": "setDailyRewardsPool(uint256)", +"fc165731": "getInfoAboutEvents()", +"fc168fda": "puppyToken()", "fc1711f2": "setWeight(uint256)", "fc176c4c": "getAdsCountByUser(address)", "fc177bd6": "resetArray()", "fc178f2a": "MoonTokenERC20(uint256,string,string)", "fc17ce26": "Panthercoin()", "fc17d2ac": "setFunctionEightPrice(uint256)", +"fc1821c8": "sellMbtc(uint256)", +"fc18350d": "dollarPriceToBuyBack()", "fc184fff": "addPhenomenon(string,string,string,uint8)", "fc190261": "getIntervalsForWindow(uint256,uint256,uint256,uint256,int256)", "fc190d6e": "newUpdate(string,bool)", "fc192fb0": "setMinimumWithdrawal(uint256)", +"fc193cf2": "exp_2(int128)", "fc196cf3": "getNoInvestor()", +"fc196d93": "rafflesCategory()", +"fc19ab66": "channelBlockPeriod(uint64)", "fc1a1110": "currentLiquidInDeal()", "fc1a142d": "adPriceHour()", "fc1a3f0a": "decreaseTokenLock(address,uint256)", +"fc1a598f": "getBoundBep2Symbol(address)", +"fc1a86ff": "WithdrawERC20Fee(address,address)", "fc1adfdf": "invest(address,uint256,uint256,uint256)", "fc1b8a7e": "richestPlayer()", "fc1b9286": "rewardActivityEnd()", @@ -144644,12 +264585,19 @@ "fc1c32fa": "fundariaBonusFundAddress()", "fc1c5218": "RemoveOpenOrder(uint32)", "fc1c9620": "depositOrWithdraw(address)", +"fc1ce6c9": "ImportBalanceEvent(address)", +"fc1ce708": "getFTokeAddress(address)", +"fc1d2e5f": "getPoolYearAmounts()", "fc1da46a": "parcipateCrowdsaleAll()", +"fc1dcfe7": "getHomesteading(uint256)", "fc1dfdf1": "extraData1FromHash(string)", +"fc1e0c00": "AGOUSD()", "fc1e1a32": "NetfBalance()", "fc1e2ce9": "getGameAmounts(uint256)", "fc1eb4d1": "withdrawPoly()", "fc1ed437": "initialAmount()", +"fc1efa66": "_transferTokens(address,address,uint256)", +"fc1f0469": "_reinvestAll(address,uint256)", "fc1f2a70": "Add(uint256,string,string)", "fc1f2d46": "setAllowTransferWhitelist(bool)", "fc1f5c9c": "personalSegmentHash(string,uint256,bytes32)", @@ -144657,111 +264605,204 @@ "fc1f7652": "_isBoardMember(address)", "fc200a55": "mintWithTimeLock(address,uint256,uint256)", "fc201122": "_setOwner(address)", +"fc202d5f": "getAmountInAndPair(address,uint256,address,address,bytes32)", "fc204334": "sendAwardToLastOne()", "fc207c8f": "periodAt(uint256)", +"fc212b12": "transferRotToZapper(uint256)", +"fc21a4eb": "TokenPurchase(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"fc21f894": "getKYA(address)", "fc21fa40": "getAmountByCurrency(uint256)", +"fc2221ff": "withdrawDebts()", "fc223410": "doBet(uint256[],uint256[],uint256[],uint256)", "fc22545c": "getPreICOFundersCount()", "fc22a9f8": "initialIssuance()", +"fc22c0e9": "getUserBytes(string)", "fc22d0e5": "migrate(address,uint256,uint256)", +"fc2337b6": "LogNewParticipant(address)", "fc23466d": "search_data()", +"fc234d51": "transferConfirma(uint256)", "fc235fb8": "timeWaitApply4Redeem(address)", "fc236188": "setData_7(string)", "fc23f5b1": "getAddressByID(uint256)", +"fc241e11": "setBrrrXAddress(address,bool)", +"fc245d4a": "claimIdle(address[],address[])", "fc248fd6": "RegisterNode(bytes32)", +"fc24e09c": "approve_167(address,uint256)", "fc24e589": "badgeTotalSupply()", "fc2525ab": "get(address,string)", "fc252b94": "_getBuyPrice()", "fc257baa": "traderWithdrawalSignals(address,address)", "fc2584a2": "fillOrMarket(address)", +"fc25a4da": "_balances(uint256,address)", "fc26088e": "K_INITIAL_SUPPLY()", +"fc261185": "payDailyRoyalty()", "fc2615d5": "getRemainTime()", "fc2634b7": "callURL(string,string,string)", "fc26d522": "tip_total()", "fc26fe01": "setairDropManagerLimit(uint256)", "fc27ea83": "defaultAmount()", +"fc27f0d7": "setMinBuyTokenPerUnit(uint256)", "fc281217": "TokenInformation(address)", "fc284d07": "earlyBackers(uint256)", "fc28bc8f": "staffContract()", +"fc28c43d": "returns1()", +"fc29c862": "approve(address,uint256,uint256[])", +"fc29d19e": "investment(uint256,string,bool)", +"fc2a0996": "claimchalz()", +"fc2a5b1d": "pairInfo()", +"fc2ab367": "Build(uint256,uint256,int256,int256,uint8)", +"fc2ab6f2": "initialSupplyMinted()", +"fc2b2654": "eye()", "fc2b8b7b": "initTokenSupply(uint256)", "fc2b8cc3": "quit()", +"fc2ba74e": "invest_money_withdraw(address,uint256)", "fc2bd7ae": "sendtoMultiWallets(address[],uint256[])", "fc2c1ddb": "setItemAvailable(uint256,bool)", "fc2c3e08": "getIteration()", +"fc2c779a": "setRatesManager(address)", "fc2d2b69": "SmartBondsToken()", "fc2d64e3": "getProviderData(address)", +"fc2da483": "SellerCancelEvent(bytes32,address,address)", "fc2df281": "withdrawICOEth()", +"fc2e58f2": "hasBoost(address)", "fc2e5bf2": "OfferOnHold(uint256,bool,address)", "fc2ea8a5": "airdropAmount()", +"fc2eb889": "updateBlackList(address,bool)", +"fc2f2314": "mdsToLp1Route(uint256)", "fc2f5e67": "recoveryAllowed()", "fc300522": "getCallFee(bytes32)", "fc303ef1": "destroyBottle()", "fc3087f8": "withdrawAll2()", +"fc30bb76": "openClosePosition(uint256)", "fc314e31": "tokenDetails(uint256)", +"fc316400": "setSakeMaker(address)", "fc317cbe": "mainSaleDate()", "fc322d73": "challengers(bytes32)", +"fc322ef2": "DividendClaim(uint256,uint256,uint256,uint256,address)", +"fc323210": "StartEsusuCycle(uint256)", "fc324642": "__createNewToken(address,string,uint256,uint256,uint256,uint256)", "fc325efd": "getItemByIndex(uint256)", "fc3280c2": "getDegreeAtIndex(uint256)", +"fc3284de": "slowCancel(address,address,uint256,address,uint256,address,uint256,uint256)", "fc32f09c": "MyShareToken()", "fc331ebb": "transfererc20(address,address,uint256)", "fc334e8c": "reveal(bytes32,bytes32)", "fc335bb5": "OrmeCash()", "fc337f5a": "getFreeCat()", +"fc339252": "__isPolicyManager(address)", "fc342947": "renewFeatured(uint256)", +"fc3459e7": "calculateRewardForAddress(address)", "fc34b908": "TOTAL_BONUS_SUPPLY_ETH()", +"fc3576a1": "pemes(uint256)", +"fc35be2e": "bundle_address()", "fc366a2a": "RETZE()", +"fc366a6d": "mintByUsd(uint256,address)", +"fc369a30": "withdrawBatchCreator(address[])", "fc36cc9d": "setCoolHero(uint32)", "fc36e15b": "vote(string)", +"fc372f9f": "logBytes27(bytes27)", +"fc374157": "swapETHForExactTokens(uint256,uint256,address[],address,uint256)", "fc37987b": "buyRate()", +"fc37b9bb": "getMyAmount(uint32,address)", "fc380d96": "addBonusTokens(uint256,uint256)", "fc384b7c": "executeStackholderTransaction(uint256)", "fc385d51": "changeRelease6m(address)", "fc3880ae": "priceWithBonus()", +"fc388415": "unstakeRewardAddress()", "fc38ce19": "validPurchaseTokens(uint256)", "fc38d4a4": "upgradeAgility(uint256,uint256)", +"fc394003": "_sz_varint(uint256)", +"fc3950ed": "brewToLp1Route(uint256)", "fc395c90": "AddBillModerator(address)", +"fc398d6c": "kicInversor(address)", +"fc399c79": "verifyWallet(address)", +"fc3abae1": "onsPriceHi()", +"fc3b72b1": "protocolInterestRate()", "fc3b7379": "lastBlock_a18()", +"fc3c0eee": "setBankAddress(address)", +"fc3c1291": "fnxUnStakeFPT_FRAX(uint256)", +"fc3c1dc3": "rewardsInterval()", "fc3c28af": "devPercent()", "fc3c8561": "testDistribute(uint256,address[],uint8[])", "fc3d9f9f": "calcUnMaskedKeyEarnings(uint256,uint256)", +"fc3da0d4": "CrowdSaleOpened(bool)", "fc3daf81": "_CalcDiv()", +"fc3e5908": "TRANSFER_OUT_CHANNELID()", "fc3f162b": "unregisterAuditor(address)", +"fc3f94bb": "l1PriceFeed()", +"fc3fa1ae": "activeTimesFrom(uint256)", "fc3fc168": "DIVIDEND()", "fc3fc4ed": "getAuctionInfo(uint256)", +"fc40c913": "mintTax(uint256)", "fc4116bb": "p_update_mResalePlotTaxPercent(uint256)", +"fc41491e": "retrieveFunds(uint256)", "fc416159": "coreERC()", +"fc419a2c": "boundX2()", +"fc41aa09": "addRewards(uint256,uint256)", "fc429e6a": "transfer_from_session(uint32,uint32,uint64)", "fc42b58f": "getTransferFee(address,uint256)", +"fc42d511": "OpenTickets()", "fc4333cd": "clean()", "fc434891": "unWhitelistAddresses(address[])", +"fc436c7e": "Lemd()", +"fc439f77": "balanceInterval()", "fc43bbfb": "setWhitelistAddress(address,uint256)", +"fc440118": "slimeToLp0Route(uint256)", "fc442ec3": "getFlavor()", +"fc44d0b4": "getWhitelistedExchangeAtIndex(uint256)", "fc44e41b": "RANDOMFACTToken()", "fc44fd28": "payBalanceToReturnWallet()", "fc450ae6": "MummyAccountWithdraw()", "fc45c822": "getDividends(address,address)", +"fc46221d": "instantMintLimit()", +"fc462408": "ownerAddress(uint256)", +"fc4639d1": "LifeEvent(string,string,string)", "fc470105": "TestcoinToken()", +"fc4756df": "setUintsOwnerCount(address,uint256,bool)", +"fc47a21f": "AddGlobalConstraint(address,bytes32,uint8,address)", "fc47b9d2": "brulerDe(address,uint256)", +"fc47e209": "BLOCKS_PER_WEEK()", "fc47fcf5": "total_devidend()", +"fc481447": "max128(uint128,uint128)", "fc48b653": "authorizedTransfer(address,address,uint256)", +"fc48f758": "compoundRedeem_cUSDC(uint256)", "fc49926f": "getCountdowns()", +"fc49e614": "PowerDeliveryProposal(address,uint256,uint256,string,uint256,string)", "fc4a089c": "newPermission(bytes32,address[],bytes4[])", "fc4a4a1e": "StartTime()", +"fc4a7d05": "decrypt(bytes32,bytes32)", +"fc4acc75": "Carradd(address)", +"fc4afd7d": "setPresaleCapInBUSD(uint256)", "fc4b01ff": "addTicketsToDraw(uint256,uint8,uint8)", "fc4b2473": "ALC_CONTRACT_ADDRESS()", +"fc4b6b50": "yReserve()", +"fc4b8fc7": "getCrowdsaleOwnerTokenBalance()", "fc4bd9d7": "throwIfSetPresaleTokensAfterSaleStarts()", +"fc4bf891": "GasgainsTokenAddress()", "fc4c0daa": "_agent()", "fc4d20f5": "addMonsterObj(uint32,address,string)", "fc4d705b": "COLOR_GOLD()", +"fc4d7101": "getTotalEth(uint256)", "fc4db64e": "SendAmount(address,address,uint256)", +"fc4dd333": "withdrawWETH(uint256)", +"fc4dfef6": "ArbitratorAdded(address)", +"fc4e3e0a": "hasOperatorRole(address)", +"fc4ea939": "phaseCountdown()", +"fc4fcc5a": "userWithdrewWei(address)", "fc504655": "getPriceInWei()", +"fc505d37": "divu(uint256,uint256)", +"fc50807f": "SecondBlockAfter()", +"fc5091e4": "updateDaiTokenAddress(address)", "fc512b92": "postCrowdsaleWithdraw(uint256)", "fc515d93": "approvedAddressSize()", "fc51b9c5": "cancelOrder(address[3],uint256[5],int256,int256)", "fc51daef": "getCurrentRoundWinner()", +"fc522bce": "getNextCustomActionID(uint8,uint256,address,uint256)", "fc523f7a": "settte(uint256,address)", +"fc524773": "cacheStale()", "fc525c75": "Ammbr(string,string,uint8)", +"fc5282af": "tokenFromSaying(uint256)", +"fc528482": "nextAuctionId()", "fc52be0a": "getLatestTokenAllocation(address,address)", "fc52cc1d": "incPreSell(address,uint256)", "fc52f2eb": "DogRacingToken()", @@ -144771,70 +264812,133 @@ "fc53f958": "ADMIN_ALLOWANCE()", "fc53fe51": "_authorizePayment(address,uint128)", "fc548f08": "changeArbitrator(address)", +"fc550d78": "metaTransferFromHash(uint256,address,address,uint256,uint256)", +"fc55453a": "TokenWon(uint256,address)", "fc55c8d6": "buyPixel(uint256,bytes32)", "fc55ea9d": "removeCustomer(string)", "fc56200e": "JCFv1(uint256,string,string,uint8)", "fc563658": "getNumber(uint256)", +"fc571b35": "pendingShroom(uint256,address)", +"fc57250c": "SaleClosedSuccess(uint256)", +"fc572699": "_addTen(uint256)", "fc578323": "getProposalProposedBy(bytes32,bytes32)", +"fc57b3d2": "numEthToReward()", +"fc57c9bb": "getVoteAddressCA(address,uint256)", +"fc57d4df": "getUnderlyingPrice(address)", "fc57fadf": "IsValidAddress(address)", "fc58452e": "castVote(bytes32,uint16)", +"fc586959": "btcDelivery(bytes32,bytes32,address,uint256)", "fc58edea": "FoundationAddressFreezeTime()", "fc58fc49": "setUser(address,address,string,uint256)", +"fc590c30": "ExpA()", "fc59116d": "setTokenTypes(uint16,uint16,uint16)", "fc591ce5": "AddForm46(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fc5960f1": "FrozenAddressWiped(address)", +"fc59fbcd": "hodl(uint256,uint256)", "fc5a0152": "div256(uint256,uint256)", +"fc5a5b63": "awards(uint256)", +"fc5a948b": "hasBeenAbandoned()", +"fc5a9726": "arb(uint256,uint256,address[])", "fc5ab1c6": "_unlockOther(address)", +"fc5ab87c": "lotteryConfig()", +"fc5af734": "changeBurnFee(uint256)", "fc5b57a6": "removeStackholder(address)", "fc5b652a": "LogNeumarksBurned(address,uint256,uint256)", "fc5be8ec": "bonuscalico(uint256)", +"fc5bf0f2": "operatorsGroup(uint256)", "fc5c0cde": "allTimeDiscount(uint256)", +"fc5c5be8": "setLoanDurationAndInterest(uint256,uint256)", +"fc5d28a8": "borrowBalanceStored(uint256,address)", +"fc5d6c91": "Setmonthlyprofit(uint256,uint256,uint256)", "fc5d9244": "totalBonusTokens()", "fc5e2cce": "calculatWithdrawForPeriod(uint8,uint256,uint256)", +"fc5eb0df": "underlyingBalance(address,address)", "fc5eb846": "currentHunterNumber()", +"fc5ef057": "userAllowedFuturesContracts(address,address)", +"fc5f3592": "tokenRedeem()", "fc5f3e1d": "ATEC_Token()", "fc5faa82": "ProWalletToken()", "fc5fc345": "getPlayerIds()", "fc5fc8ae": "preICOEnds()", "fc601902": "_isAdmin()", +"fc601955": "dfWalletFactory()", +"fc602d21": "safeTransferBatch(address,address,address,uint256[])", +"fc6065f0": "tokensMined()", "fc608e17": "getAllocatedTokenCount(address,address)", "fc60bb36": "_removeGroupFromMember(address,bytes32)", +"fc60c8b3": "allCandidates(uint256)", "fc60e82c": "calculatePrize(uint256,uint256,uint256,uint256)", "fc612a8d": "priceUpdater()", +"fc614adb": "auction__slotsOnSale()", +"fc618519": "ICOStarted()", "fc623ef8": "hashToSign(bytes32)", "fc632647": "MNToken(uint256,string,uint8,string)", +"fc63958e": "requestUnstake()", "fc63977a": "getAddressFromUsername(bytes32)", "fc63d4fb": "order(bool,uint32,uint128)", "fc63dad6": "getLastBuyer(bytes32,uint8)", +"fc640949": "products(address,uint256)", +"fc643efe": "getNote(address)", "fc65169a": "phase4Duration()", +"fc6516d7": "OtcSet(address)", "fc65b3ac": "all_team_accounts()", "fc65ee05": "marginCallOnBehalfOfRecurse(address,address,bytes32,uint256)", "fc65f812": "_currentPrice(uint256)", "fc6634b9": "setSellPrice(uint256)", +"fc664c36": "getIAAvgRate(bytes4)", +"fc66ff14": "ipt()", +"fc671915": "buyOnApprove(address,uint256,address,address[],bytes,uint256[],uint256[])", "fc673c4f": "operatorBurn(address,uint256,bytes,bytes)", "fc676652": "Embassy(address,address)", "fc67af2d": "withdrawCommunityBalance()", +"fc67bf1c": "ERC1155_BATCH_RECEIVED()", +"fc67e37c": "OnEndOfCrowdsaleSet(uint256,uint256)", "fc68521a": "f(address)", "fc687311": "betOn(int8)", "fc688e87": "logAccount(address,uint256)", +"fc68ae6b": "LockupApplied(address,uint256)", +"fc68be12": "Converted(address,address,address,uint256,uint256)", +"fc69420a": "swapexactethfortokensowngt(uint256,uint256,uint256)", +"fc694689": "getTopMapping(uint256)", "fc6a0ca6": "changeTeamSize(uint8)", "fc6a3ff7": "ticketsOwnedByUser(address)", +"fc6a494e": "ReconGold()", +"fc6ac086": "getEstimatedBASforDAI(uint256)", +"fc6b65aa": "getFirstBuyTime()", "fc6b72b6": "bringCat(uint256)", +"fc6bdb70": "challenge_3(uint32,uint32,bytes,uint32)", "fc6c403b": "getMySalePrice(bytes32)", +"fc6cabe7": "cachedWallets(uint256)", "fc6d0dd0": "getLightingWithdraw(address,address,bytes32,bytes32,uint256,uint32)", "fc6d1892": "setArrUintField1(uint256[])", +"fc6d32f9": "lockTimeSpan()", +"fc6d94d8": "_combieCode(uint8,uint256,uint256,uint256)", "fc6def15": "decider()", +"fc6e2895": "internal_100K_transfer()", "fc6e33ee": "MAX_SALE_DURATION()", +"fc6e552a": "depositAndBond(bool,bool)", +"fc6ebd4a": "exerciseCall(uint256)", "fc6ef5a5": "getUserTokenLocalBalance(address)", "fc6f46a0": "addTether(address,string,uint256,uint32,string)", +"fc6f4e16": "swap(address,address,uint256,uint256,address[],bytes,uint256[],uint256[],string,uint256)", "fc6f9468": "adminAddress()", "fc6fadec": "LoggedReward(uint256,string,uint8,string,bool,bool)", +"fc6fb55a": "createExtension(string)", +"fc6ff9e1": "yMax()", "fc700dc0": "createBucketLender(bytes32,address,address,address,uint32[7],address[],address[])", +"fc70712e": "ENCORE_Vault_Timelock()", "fc70b462": "viewReputation(address)", +"fc70be95": "currentLevelCap()", +"fc70e023": "successfulTradeFeeInBasisPoints()", +"fc71d5a0": "__RewardsDistributionRecipient_init()", +"fc720f70": "burnForUser(address)", "fc722b2b": "trustedDarknodeRegistry()", "fc72c1ef": "ERC20Base(uint256)", +"fc72e29c": "setFactorStake(uint256)", "fc735e99": "verify()", "fc7368fa": "reopenBet(uint256)", "fc73c86e": "getInvestments(address)", +"fc73d771": "first(address)", "fc73ec00": "changeDividend(uint256)", "fc741c7c": "makerFee()", "fc749323": "NTC()", @@ -144842,63 +264946,119 @@ "fc74f55c": "IexecHubAccessor(address)", "fc753ce3": "NAME_ARK()", "fc756c69": "createship(uint256,address)", +"fc7577f1": "streamReserved(address)", "fc7596a8": "GoldBoxToken()", +"fc75df8a": "priceTime()", "fc763176": "agreeAmendmentJUR(address)", "fc76501a": "preIco1Raise()", "fc76687c": "jinglesOnSale(uint256)", "fc77060d": "withdrawEtherHomeExternal()", "fc772c8b": "reclaim(address)", "fc773166": "GCoin()", +"fc778563": "PoolCapChanged(uint256,uint256)", +"fc78728d": "viewReward(uint256,address)", "fc78b430": "delegateVote(address,address,uint256)", +"fc78f614": "setKoalaAddress(address)", "fc792719": "hasBeenClaimed()", "fc794183": "timesfucky()", +"fc7966de": "initialDebtAuctionMintedTokens()", "fc79c8eb": "TBCoin()", +"fc79da67": "getUserLoanDetails(address)", +"fc7a91f8": "fundPercentage()", "fc7ae9f5": "presaleMaxContribution(address)", +"fc7b6aee": "tick(uint256)", "fc7b78b1": "changeVestingAgent(address)", "fc7b9c18": "totalDebt()", "fc7ba686": "affiliatesCutOutof100()", +"fc7c1725": "getLavaBalance()", "fc7c1c80": "getParentB(uint256)", "fc7c41af": "doDisown()", +"fc7c8c73": "first_num(address)", "fc7cb268": "PoSToken()", +"fc7cf0a0": "getLastNewValue()", "fc7d07ce": "AllocateFounderTokens()", +"fc7d158c": "removeStakingBonuses(uint256,uint256)", "fc7d2b3a": "EtherOcrend()", +"fc7d42d7": "borrowBalances(address,address)", "fc7d6518": "getLockSdc()", "fc7e061f": "convertPresaleTokens(address,uint256,uint256,string)", +"fc7e20c6": "getUniswapExchangeFactoryContract()", "fc7e286d": "deposits(address)", "fc7e4768": "saleMinShares()", +"fc7e5fa8": "batchFreezePartialTokens(address[],uint256[])", +"fc7e6181": "updatePoolInfo(address,address,uint256,uint256,uint256,uint256)", "fc7e9c6f": "nextIndex()", +"fc7f0fec": "buyBoosterCardAndOpen()", "fc7f1a88": "increaseBurnApproval(address,uint256)", +"fc7f6216": "_isOwner(address,address)", "fc7f7957": "callMeMaybe()", +"fc7fa83d": "lossCoefficient()", "fc7fcae1": "extractFund(uint256)", "fc800df4": "getBuyerbyaddress(address,address)", +"fc801066": "getTotalInStake()", +"fc80377c": "ProxyUpdated(address)", +"fc80a1c7": "initialized(address,uint256,address)", +"fc81587a": "clearMarket()", +"fc8161ec": "maxAgeOfToken()", "fc818684": "burnFromContract(uint256)", +"fc81cc89": "SetMinBuy(uint256)", "fc8234cb": "_unpause()", +"fc8286fd": "setDistributionAmount(uint256)", "fc82d0f7": "currentIterationSupplyLimit()", +"fc833ac6": "CONTRACT()", "fc836563": "SendTokens()", +"fc83cd5c": "updateStableFee(uint256)", +"fc83e7db": "cancel(address,uint256,bytes,uint256)", "fc845834": "GoldenCoin()", +"fc848c65": "withdrawPrincipalAndInterestCb(address,uint256)", +"fc84abb7": "blockedeticas(address)", +"fc84dde4": "pendingGroupMaxLife()", "fc860e96": "emissionTime()", "fc862027": "setNameTAOLookupAddress(address)", +"fc864487": "getMaskRate()", +"fc8690a2": "stakerPayouts(address)", "fc86a7a5": "getTokenSoldPrice(uint256)", +"fc8715bb": "Set_1155Token(address)", +"fc876754": "gsnTrustedSigner()", "fc87790f": "addToWithoutFee(address)", "fc8791c0": "change_p1(uint256)", +"fc87a355": "SetDiscipleItem(uint256,uint256)", +"fc87bf15": "check_lock(address)", "fc87c766": "addressCap(address)", "fc880be0": "SetCommissionValue(uint256)", +"fc88210a": "getContractId(uint256)", "fc882dff": "ownerHashed()", +"fc884712": "aAmt()", "fc88ee77": "optionExerciseOf(address)", "fc891b97": "MosesToken()", "fc892cfe": "setup_token()", +"fc8944a3": "onBuying(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"fc894dc7": "_PoolInterestRate()", "fc89aff6": "submitVerifiedUsers(address[])", +"fc89baad": "DEFAULT_HEROES()", "fc89f349": "ORZToken()", +"fc8a1ecb": "tokensToCredits(uint256)", "fc8aaa76": "disableManualEmission(bytes32)", +"fc8acba2": "addDepositor(address)", "fc8ad37c": "changeParameters(uint256,uint256,uint256)", "fc8b4a90": "checkDuplicateMatchId(address,uint256,uint256)", +"fc8b96b7": "getARGONTokenDeployer(uint256)", +"fc8bad25": "checkRewardPeriod()", "fc8bbb6d": "AddresstoAsciiString(address)", +"fc8c20b8": "withdrawfunds(uint256)", "fc8c2f0d": "AlphaMarketTeamBountyWallet(address[],address)", "fc8cddf2": "ARCADIA()", +"fc8d03f5": "lexDAOgovernance(address,uint256,string)", +"fc8d1139": "allowReferral()", "fc8d4f4f": "getShareHoldersInfo(uint256)", "fc8dae84": "AllAmericanCoin()", +"fc8ed9c8": "getNumberOfCandidates(uint64,uint64)", +"fc8f3656": "getOptimalInput(uint256)", "fc8f3a94": "_getPayTo()", +"fc8f46a7": "inCaseChangeKnightlimit(uint256)", "fc8f616e": "XXX()", +"fc8f7c74": "isCollateralCTokenEnabled(address,address)", +"fc8fb1b3": "gasRefillLevel()", "fc8fc6f7": "KittyCoins()", "fc9017a8": "sendMessage(address,string,bool,uint256,bytes32)", "fc906720": "setSiringWithId(uint256,uint32)", @@ -144906,238 +265066,454 @@ "fc909fc7": "EtherGrand()", "fc912461": "_setControllers(address[])", "fc914949": "ValidContractRemoved(address,address,uint256)", +"fc914fdb": "revokePresale(address,uint8)", "fc91a274": "getAmountByToken(bytes32,string,address)", "fc91e03d": "EtherDeltaWithdraw(uint256)", +"fc926a09": "accountInfos(uint256,address)", +"fc927b87": "Erc20Approve(address,address,uint256)", +"fc930592": "assetPrecision(address)", +"fc931c64": "testOwnerCanReturnInvestment()", "fc94dd18": "verifyHumanStandardToken(address)", +"fc952dd6": "FoundationOwnershipTransferred(address,address)", +"fc9585dd": "getBestReservesEthToToken(address)", "fc959d9a": "getMin(uint32[])", +"fc95f5a8": "vbswapToWbnbRoute(uint256)", "fc961664": "setPI_edit_7(string)", +"fc965d52": "grap()", "fc966d45": "uintToStr(uint256)", +"fc96b182": "CASHBACK_PERCENT()", +"fc96f7d8": "getFrozenStatus(address)", "fc970859": "PacBall()", "fc976827": "TOTAL_TOKEN_AMOUNT()", "fc9774c1": "dividendShares(address)", +"fc978142": "canSetReward()", +"fc97a303": "tokenIds(address)", +"fc9858b7": "OnTimeLock(address)", "fc989bbb": "addStockProfitInternal(uint256)", "fc98f71e": "developerLock()", +"fc990130": "min_invest()", "fc99342e": "create_table()", "fc9937e5": "orders_sell_total()", +"fc996038": "balancesToken(address)", "fc996557": "goldContract()", +"fc997e0c": "withrawERC721token(address,address,uint256)", "fc998981": "sendBountyBalance(address[],uint256[])", +"fc99b0e8": "execute(address,int256[],address[],uint256[],uint256)", +"fc99bd9a": "addReserves(address,uint256)", +"fc9a5097": "unconfirmedSumAddr(address)", +"fc9a85b1": "getPreMint(address,uint256)", +"fc9bb7fe": "setLatestPrice(uint256)", "fc9bfaa6": "externalCallFlag()", "fc9c473d": "limitPerHolder()", "fc9c8d39": "caller()", +"fc9c968e": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"fc9c99ac": "getAvailableRewards()", +"fc9d96ba": "denied(address)", "fc9dab52": "soldSale()", +"fc9dbb6d": "recordSyncSupply()", +"fc9dbc69": "userWallet(address)", "fc9dc608": "setRoundTime(uint256,uint256)", "fc9e53df": "setNextRegistrar(address)", +"fc9ead02": "shareMonthlyRewards(address[],uint256[],uint256)", "fc9ede65": "getPropertyBecomePublic(uint16)", "fc9ee045": "getMaximalDeposit(uint256)", +"fc9f472c": "remainingCredit()", "fc9f8cae": "_isApprovedPack()", +"fc9fc6c7": "updateFees()", "fc9ffe02": "getWalletList()", +"fca02a05": "setReserveBalances(uint256,uint256,uint256,uint256)", +"fca03f47": "swapAlphaForExactETH(uint256,uint256,address,uint256)", "fca062d3": "blockBeforeChange()", +"fca0d613": "maxDhptToSell(address)", "fca10682": "randomGen(uint256,uint256,uint256)", "fca129a3": "finalizeDescription()", "fca16c3b": "getBuyPrice(uint256,uint256,uint256)", +"fca20912": "setBoardroomAddressPercent(uint256)", +"fca22088": "getTradeLimitAndClass(address)", "fca2452b": "change_b(address)", +"fca247ac": "register(uint256,address,uint256)", +"fca28f74": "currentPynthDebts(bytes32[])", "fca2d9f5": "senttest()", "fca2efd5": "DocnotaPresale(address,address)", "fca346af": "SetupCrowdSale()", +"fca36254": "ctoken2()", "fca3644a": "verifyMessage(uint8,uint256,bytes32[4])", +"fca36c93": "token2amount()", "fca3b5aa": "setMinter(address)", "fca495f0": "receivePurchase(uint256)", +"fca4b5c6": "_uniOracleAddress()", +"fca513a8": "getPriceOracle()", "fca5d057": "migrateTokensV1(address,uint256)", "fca5d21f": "playSlot()", +"fca5e5f5": "setNFTFactoryAddress(address)", "fca5e61e": "drugs(uint256)", "fca64947": "setMetaBet(uint256)", "fca69afa": "CYCLE_CAP()", +"fca6aed5": "wrappedNFTLiquidationProxyAddress()", "fca6d4e2": "LogAccess(address)", +"fca6fbfa": "getTokenReleaseInfo(address)", +"fca73f28": "getWeeklyReward()", +"fca75c79": "FINMGMT_ROLE()", "fca76c26": "lockMaxSupply()", "fca7820b": "_setReserveFactor(uint256)", +"fca79ca2": "setTimelockAddress(address)", "fca7c355": "MUSTToken(address,string,string,uint256,uint256)", +"fca7cb97": "Change_Fee_Percent(uint256)", "fca7cdba": "pgoMonthlyPresaleVault()", +"fca8175f": "holdAddress(address,uint256,uint256)", "fca865dd": "aSetProportion(uint16)", "fca981f6": "setStepFunctions()", "fca9bb5f": "FACTOR_1()", +"fcaa14e0": "setAss(uint256)", "fcaa7664": "getStage()", "fcaa96fa": "withdrawForThreeStep()", +"fcab1819": "getTokenType()", +"fcab2a32": "createDividend(uint256,string)", +"fcab30a5": "MIN_INDIVIDUAL_CAP()", +"fcab6733": "_oracleHub()", +"fcabfab2": "BOP(address,uint256)", "fcac1c77": "DragonKing(address,address,address,address,uint8,uint8,uint8,uint16[],uint16[])", "fcad399f": "TheFlashToken(uint256,string,string)", "fcad8cf3": "RentOffice()", +"fcae033b": "depositBulk(uint256,uint256[],uint256)", "fcae08e1": "fundTokens()", "fcae4484": "unsubscribe()", "fcae8c06": "takeMoney()", +"fcae9ee4": "setUNIPool(address,address,address)", "fcaf343e": "getUnsoldTokensAmount()", +"fcafcc68": "give(uint256,address)", "fcb0339e": "icoMinCap()", "fcb0368c": "BuyToken(uint256)", +"fcb05822": "depositNftReclaim(uint256,uint256,uint256,uint256)", "fcb0a7ad": "getMinAuditPrice(address)", "fcb0e55c": "_validGenes(uint256)", "fcb163c7": "ExecuteOptions(address,uint256,string,uint8)", "fcb1804d": "getRateAndTimeRemaining(uint256,uint256,uint256,uint256)", "fcb1b62d": "arbiterAcceptCount()", +"fcb1b9ab": "ymenMaker()", "fcb1cba0": "GetQuota()", +"fcb20f19": "emergencyERC20Drain(address,address)", +"fcb22eb5": "TRUNCATE_SCALE()", +"fcb248f9": "whitelistVaults(address[])", "fcb2931b": "LockupContract(address,address,address)", "fcb2acd5": "_preValidatePurchase(address,uint256)", "fcb2cafc": "verifyAddress(address)", +"fcb2f602": "profitOfPool_v2(address,address)", "fcb300e6": "_activate()", +"fcb32d3f": "permit(address,address,uint256,uint256,bool,uint256,address,uint8,bytes32,bytes32)", "fcb36ce2": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256,bool)", "fcb3a3a3": "setCrowdsaleMinter(address)", +"fcb4aaee": "addInternalTokenMeta(bytes32,uint16,uint256)", +"fcb4adef": "isRewardsTokensAllocated()", +"fcb4f0ed": "publicRebase()", "fcb5bc29": "startPhase2()", "fcb5ced3": "saveToCW()", "fcb5d44d": "doExchange(uint256)", +"fcb5ee60": "findBlockRefefrrerByID(uint256)", "fcb6323a": "unclaim(address[])", +"fcb64147": "_addReserves()", +"fcb65210": "monthsToVest()", +"fcb67d14": "view_uint256()", +"fcb6c263": "mintToWallet(address,uint256)", +"fcb6f008": "epochSupplyContractionLeft()", "fcb71ea9": "balanceOfHolder(address)", "fcb750cf": "REFUND_DIVISION_RATE()", "fcb806ac": "ReserveManager()", "fcb80d16": "getCurrentFgcCap()", +"fcb895f4": "getToBeDistributed()", "fcb899d7": "LEGAL_EXPENSES_ADDR()", "fcb8b1e1": "NewHardCap(uint256)", +"fcb8bad0": "EARLY_PHASE_CAP()", +"fcb8d53f": "createNewPerson(address,string,uint256)", "fcb927aa": "addPublisher(string,bytes,address,address[],uint256[],address,uint32[])", "fcb941c9": "setGenomeContractAddress(address,address)", "fcb94dbb": "toBytes(address,address)", "fcb9b505": "updateBeneficiary(address,uint256)", +"fcba75e8": "refundConfirmationCount()", +"fcba8016": "getAmountsOutSushi(uint256,address,address)", +"fcbb38d7": "isActivePromoter(address)", +"fcbb53fc": "getWheatsByCreator(address)", +"fcbb8164": "SAVINGS_COMPOUND_ADDRESS()", +"fcbbacf2": "balanceOfFSLP()", "fcbc1bc4": "Standard23TokenMock(address,uint256)", +"fcbc4cee": "setCoinContract(address)", +"fcbca456": "blacklistUser(address)", +"fcbcbd43": "setImplementsMintibleInterface(address)", +"fcbce880": "fill_pool(bytes32,uint256,uint256,string,string,address[],uint256[],address,uint256,uint256,address)", "fcbcf436": "clearSums()", "fcbd06aa": "supportersMap(address)", "fcbd2731": "transferToProxy(uint256)", +"fcbd3b2d": "getStates2()", +"fcbd69b4": "blacklistingStatus()", +"fcbd8e06": "testCheckStartTime()", +"fcbdb91d": "CashOut(address,uint256,uint256)", "fcbe0f5f": "BRD()", +"fcbe3a95": "ban_spender(address,bool)", +"fcbe3aba": "approve_882(address,uint256)", +"fcbe95f5": "pendingText(uint256,address)", "fcbeaaa7": "buyTile(uint16,uint16,uint8)", "fcbf3131": "private_setBankAddress(address)", "fcbf323a": "ScienceToken()", "fcc01cce": "getExpectedAmount(bytes32)", +"fcc0208b": "_execute(address,uint256,uint256,uint256,address,address,uint256)", +"fcc0c4c9": "resetUnlocked()", +"fcc0c680": "seize(address,address)", "fcc101ba": "getCommunityDescription(uint256)", "fcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", "fcc15c8e": "Strike(uint16,uint32,uint16,uint8)", +"fcc18c0a": "_reward(address,uint256)", "fcc1cc9b": "removeLockMultiple(address[])", +"fcc1dfda": "stakeRewardsStaking()", "fcc21e56": "withdrawToTeam()", "fcc29ae8": "setMaxContributor(uint256)", "fcc2a69b": "BankuNetwork()", +"fcc300e4": "returnHashStringClean()", "fcc34e89": "migrateCrowdsale(address)", "fcc36c49": "refuseInvestment()", +"fcc3be8e": "rewardSXP(address,uint256)", "fcc47803": "removeSpecialOffer(address)", "fcc4a54c": "getDeedIds()", "fcc4dec9": "refound(uint256)", "fcc550c6": "CreateCCM(address,uint256)", "fcc5b5ad": "investContracts(uint256)", +"fcc5f59a": "lendStatuses()", "fcc60b6a": "isInited()", "fcc648f6": "withdrawEtherToReserveEscrow()", +"fcc6983e": "getAuthorisation(uint8,address)", "fcc6b5d5": "fillTheirOrder(address)", +"fcc6ce76": "stimulusOracleHasUpdate()", +"fcc6e69b": "viewAirdropSTA()", +"fcc70bc9": "bindInviter(address,address)", +"fcc73148": "globalFallCount(uint256)", "fcc73637": "updateExchangeRate(uint256,uint256)", +"fcc77c18": "votingPowerOf(address,uint256)", +"fcc7e8a1": "MIN_FREEZE_AMOUNT()", +"fcc8156f": "REFERRAL_RATE(uint256)", +"fcc81eb4": "updateDistributionStopBlock(uint256)", "fcc8221f": "getfromsun(address,uint256,uint256)", "fcc830be": "getMyRickAndMorty()", "fcc89710": "LogTokenSaleInitialized(address,address,uint256,uint256,uint256)", +"fcc8d82a": "balanceCap()", +"fcc90307": "revert(uint256)", +"fcc92b09": "removeIncentivizer(uint256)", +"fcc959de": "acceptOffer(bytes32,address)", +"fcc9a2e1": "hashValues(address,bytes32)", "fcc9b48c": "isIcoFailed()", +"fcc9ef94": "isClaimAirdrop(address)", "fcca4040": "tokenCapReached()", +"fcca60fb": "getSpecificNiftyNum(uint256)", "fcca8949": "p_setDevPercent_out(uint256,uint256)", +"fccab943": "vinAtIndex(uint256)", +"fccb9bc9": "getContractAddress32(bytes32)", "fccc2813": "BURN_ADDRESS()", +"fcccbefa": "changeContent(bytes)", "fcccc68f": "LoveBite()", +"fcccedc7": "settleExpired()", +"fccd635f": "isFirstTxInThisBlock()", +"fccde48f": "componentWhiteListAddress()", "fcce0492": "AdminTransferredOwnership(address,address)", "fcce2622": "challengeAnswer(uint256,bytes)", +"fcce2a7c": "fallbackTrigged(bytes)", +"fcce8372": "setupMinterRole(address)", "fcceea26": "communitySupply()", +"fccf5524": "CROWDSALE_START(uint256,uint256,address)", "fccf5a68": "SmartBinding()", "fccf6e67": "newOrdersContract(address)", "fccf82a4": "endDateOfPreSale()", "fcd0a747": "RICTToken()", +"fcd0c694": "setUniLP(address)", "fcd10753": "_getProviderSupply(uint256,uint256,uint256)", "fcd13382": "OsherCoinPresaleAward(uint256)", "fcd13d65": "setContractRegistry(address)", "fcd14456": "teamVestingPeriod()", +"fcd15908": "minimalNumberOfParticipants()", +"fcd23f2c": "burnGasAndFree(address,uint256)", "fcd24400": "lookupCampaignPart2(uint256)", +"fcd2e186": "getAPYInception()", "fcd307c4": "processReferral(address,address,uint256)", "fcd3533c": "burn(uint256,address)", +"fcd393b9": "sellPrice(address)", +"fcd40018": "Sent(address,address,address,uint256,uint256,uint256)", "fcd41502": "requiredMajorityPercent()", "fcd41c1f": "officialAddress()", +"fcd430ef": "isRelativePathMethod()", +"fcd45151": "removeOneExecutor(address)", "fcd45807": "isTokenRegisteredBySymbol(string)", "fcd47e79": "getnowcardcount()", "fcd51a4e": "_setIntelligenceValue16(uint256)", +"fcd57a70": "Bao()", "fcd58363": "refundCancelledGame(uint32,uint32[])", +"fcd6c326": "unStakeMyToken(address,uint256)", "fcd6e339": "giveBlockReward()", "fcd6ec11": "HELLO()", "fcd735dd": "transferVesting(address,uint256,uint256,uint256)", "fcd778da": "setCardsAddress(address,address)", "fcd792f4": "nextAvailableId(uint256)", +"fcd7a1ec": "addNextEpochProfitTokens(uint256)", +"fcd7ce98": "AllocateFounderTokens(address,address,uint256)", "fcd830c4": "setCCH_edit_28(string)", "fcd8c9d4": "_goldTotalSupply()", "fcd92992": "resync()", "fcd936b1": "Simple()", +"fcd9756e": "divideAssetByFour(uint256)", "fcd9da44": "setParameters(uint256,uint256,uint256,uint256)", "fcd9f4ce": "withdraw(bytes32,string,string)", "fcda4ded": "showBankAmount()", +"fcdac08c": "TimeCurrentTime()", "fcdb2c04": "getMyGameInfo()", +"fcdb60db": "getSubmitBalancesEnabled()", +"fcdbe6df": "fullWhiteList(address)", +"fcdc0b5a": "set_sBTCContract(address)", +"fcdc6871": "changeWithdrawFeePercent(uint256)", +"fcdc7b1d": "_setRewardAddress(address)", +"fcdcc9fb": "bals(address)", +"fcdd04bf": "tokenIssuedAdv()", +"fcdd8aac": "operatorBalance()", +"fcddbf92": "swapExactETHAndAddLiquidity(address,uint256,address,uint256)", "fcddd056": "payIn()", "fcde22fa": "_eachPrize(uint32,uint256,uint8,uint32,uint256)", "fcde2ff6": "getPI_edit_23()", +"fcde67a1": "minRFIBeforeSwap()", "fcde6831": "addTokens(address[],bytes32[],uint256[],uint256)", "fcde6ebe": "createSalesTierConfigMap()", "fcde7b69": "TokenFRT(address)", "fcde9925": "proposalOwner(uint256)", +"fcdeee60": "onboardInvestor(address,address)", "fcdf350b": "EGGS_TO_HATCH_1FAIRY()", +"fcdf8c65": "guess(uint256,bytes12)", +"fcdf8c73": "totalDebtPoints()", "fcdf9750": "createDispute()", +"fcdf9e92": "show_balance_usdt()", +"fcdfb4b3": "pendingMutant(uint256,address)", +"fce07084": "singleSend(address,address,uint256)", +"fce09816": "approvePoolBalance(address,uint256,uint256)", +"fce0f928": "setProjectAddress(address)", +"fce131f3": "getWebsiteVotingDetails(string)", "fce14069": "partnerBonusPercent()", +"fce178bb": "setRules(uint256,uint256,uint256,uint256,uint256)", +"fce17bbf": "setFreezeWindow(uint256)", "fce1cc35": "setInt(int256,int8,int16,int32,int256)", "fce1ccca": "voting()", +"fce1d910": "earnedtoken2(address)", "fce1e3e9": "setPatentFees(uint256[9])", +"fce1f63d": "addUserPool(uint256,address)", +"fce1f65a": "goldmine(uint256,uint256)", +"fce1f920": "discountPointsNeeded(uint256)", "fce20190": "_refund(uint256,uint256,uint256,uint256)", "fce22c4c": "generatePseudoRand(bytes32)", "fce266cb": "artworksFactory(address)", +"fce290d4": "init(uint8)", "fce33f01": "withdrawLimit(address)", +"fce353f6": "bar(bytes3[2])", "fce3b91e": "IdolToken1()", "fce3bbb5": "setSelling(bool)", +"fce3c903": "CurveFiSwap()", "fce44634": "isValidHashType(uint8)", "fce48558": "countryOf(uint256)", "fce4c128": "checkInvestmentRequired(uint16,bool)", "fce4f84f": "sellToConsumer(address,uint256,uint256)", +"fce51aeb": "setBASEToken(address)", +"fce589d8": "burnFee()", "fce59d0c": "MangoRepo()", +"fce68023": "addNumber(uint256)", "fce6d586": "LogClaim(address,uint256)", "fce78e5e": "TurtleToken(uint256,string,string)", +"fce829cd": "OWP(uint256,string)", +"fce82d71": "createPerson(string,uint256,uint256)", "fce846e8": "getExtraBonus()", "fce87fb0": "tokenUriPrefix()", +"fce88000": "goddessToken()", "fce897e5": "payBid(address,uint256,bytes)", +"fce89878": "configs(address)", "fce908ad": "whitelistTx(address,address)", "fce927f3": "issueReservedTokens(uint256)", "fce9fbff": "minWeiPerContributor()", "fce9fdd9": "MPYCreation(address,uint256)", +"fcea5e29": "_asset()", +"fceb0024": "removePriceFeed(address)", +"fceb5ad4": "regularTransTime(uint256)", "fceb9852": "isToOffChainAddresses(address[])", +"fcebe122": "MarketplaceTransfer(address,address,uint256,address)", +"fcec1cf2": "getUnsortedIndexOf256(uint256)", "fcec617a": "conflictEndFine()", +"fcec898d": "getUnitsPerToken()", "fcec962e": "adminWithdraw(address,uint256,uint256)", "fceca4a0": "VICOXToken(uint256,address)", "fcecbb61": "getReceipt(bytes32)", "fced4a86": "CryptoHuntIco(uint256,uint256,address,address)", "fced5694": "FOUNDER1_STAKE()", "fced6ad2": "KARMAtoken()", +"fced7f3c": "setRightApiBaseUrl(int128,string)", "fcee45f4": "getFee(uint256)", "fcef09d6": "BlipCompetition(address)", +"fcef3386": "extraStats()", "fcef56a4": "createBar()", "fcefe706": "getOutputIndex(uint256)", +"fcf05af7": "addNewInvestor(address,string)", "fcf07c6b": "foundationAddress()", +"fcf09bd3": "newCollection(string,string)", +"fcf0b818": "venusBridge()", +"fcf0c248": "setEndpointParams(bytes32,bytes32[])", "fcf0f55b": "eventOracles(bytes32,uint256)", +"fcf149a2": "initPendingAccount(address)", +"fcf196b4": "ruleEngine()", "fcf23a92": "LogOwnerChanged(address,address)", "fcf23d63": "getMatchInfoList03()", +"fcf2d0ad": "setEmergencyExit()", "fcf2f85f": "requiredDevSignatures()", "fcf32769": "adminWithdraw(address[4],uint256[5],uint8,bytes32,bytes32)", "fcf3438c": "setSmsCertifier(address)", +"fcf35efa": "check_auth(bool)", "fcf36918": "doCall(bytes32)", +"fcf3763d": "setSubscriptionPrice(uint256,uint256)", +"fcf3952f": "isSuperContract(address)", "fcf40170": "cleanWallets()", "fcf4333a": "updateHashrate(address)", "fcf43ce2": "setValidTransferAddress(address)", +"fcf45c0f": "deleteTransactions(uint256)", "fcf4b576": "getVaultAccess(address)", +"fcf4d0d2": "poolStage(uint256)", +"fcf509f2": "safeWithdrawTokens(uint256)", +"fcf50bbb": "getTransferNonce(address)", "fcf516aa": "VuePayToken()", "fcf5462e": "SuperUltraUltraCoin()", "fcf56577": "setRequesterLock(bool)", +"fcf61657": "getDhptSwapAddress()", +"fcf750e7": "getLockAmountBySender(address)", "fcf7e73d": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool,string)", +"fcf7f9d7": "logInAccount(uint256)", "fcf7fe50": "push(address,uint256,uint256,bool)", +"fcf814c3": "myaddress()", "fcf84962": "InvestAddEvent(address,uint256)", "fcf8566e": "unsoldCleanUp()", +"fcf8770f": "rewarders(uint256)", +"fcf8d194": "setSalesInfo(uint256,bool,uint256,uint256,uint256)", "fcf911e7": "delAddressValue(bytes32)", "fcf9c44d": "soldUET(address,uint256,bytes32)", "fcfa2bfe": "SALES_START()", "fcfa63e3": "getResourceAddress(string)", +"fcfb21b9": "_cliffDuration()", +"fcfba2ff": "HFLY_CONTRACT()", "fcfbc962": "Unset(string,string,address)", "fcfc1577": "masterFns(bytes32)", "fcfc208e": "unclockAddressDuringITO(address,address)", +"fcfc3fe3": "removeLockingTime(address)", +"fcfc430c": "ORACLE_ADDRESS()", +"fcfc6466": "getRefbonus()", "fcfd3a4c": "PreICO(address)", +"fcfd4fe2": "getCumulativeQueuedGas()", +"fcfd559a": "updateFeedETH(address,address)", +"fcfd638e": "placeBet(uint8,uint32)", "fcfdaa52": "successfulTime()", +"fcfdb4ef": "SellOfferCancelled(uint32,uint256,address,address)", "fcfdbc23": "perform_withdraw(address)", +"fcfdccc6": "multiTransfer(address,uint256[])", "fcfdcf8a": "removeOpenMakeOrder(address,address)", "fcfdeba8": "changeGameEnable(uint256)", "fcfdf7c5": "decApprove(address,address,uint256)", "fcfe2247": "setContributionDates(uint256,uint256)", +"fcfe2c41": "reward_multi(address,address)", +"fcfe4064": "getEstimatedCompDAIforToken(uint256)", "fcfe6af1": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32)", "fcff1eaf": "increaseGasSpent(bytes32,uint128)", "fcff5ed6": "createChannelDelegate(address,address,uint192)", @@ -145145,8 +265521,16 @@ "fcfff16f": "open()", "fd004f2d": "IRONtoken()", "fd01249c": "createGen0Auction(uint256,uint256)", +"fd015de2": "approximatedNAV()", +"fd0160fe": "city()", +"fd0193fe": "MIN_EXCHANGE_BBY()", +"fd01bd4c": "_totalBurned()", +"fd01cc21": "totalEthEarned()", "fd01d4a1": "ownerDivRate()", +"fd02dac0": "prices(uint256,address)", +"fd02ffb7": "unwrap()", "fd0326b4": "m_nextSale()", +"fd0349ef": "calculateTokenCount(uint256)", "fd036052": "modPass(uint256,uint256,string,string,string)", "fd037bc5": "changeIsPayableEnabled()", "fd03846e": "setCreditBondContract(address)", @@ -145156,24 +265540,38 @@ "fd049319": "distribute1BTCO(address[])", "fd04a902": "totaletherstransacted()", "fd04b606": "getMarketMarginPremium(uint256)", +"fd056c82": "allowMintRequests(uint256)", +"fd05dd6a": "trueID(uint256)", "fd05ddfc": "CCCRCoin()", "fd062d3b": "handleFees(uint256,address,address)", +"fd066422": "getPrivate(uint256)", "fd06c6a9": "issuePass(address,bytes32,uint8)", +"fd070296": "EIP712_DOMAIN_NAME()", "fd070667": "tournamentResult(uint32[3][11][32])", +"fd0717bd": "allMembers(uint256)", "fd074c28": "removeWeapon(uint8[176],uint8,uint8)", "fd074e8e": "checkIfMissionCompleted()", +"fd07661a": "required_pigs_to_slaughter()", +"fd07775b": "metaDecreaseAllowance(bytes,uint256,address,uint256,uint256)", "fd0801c1": "appendNumToString(string,uint256)", +"fd0805b5": "borrowMultiplier(address)", "fd080993": "submit(bytes32,bytes32,bytes32)", "fd083748": "isGason(uint64)", "fd084b16": "etherPartition(uint256)", "fd085b41": "minSaleAmount()", +"fd0864c3": "overrideRateActive()", +"fd087b87": "getUserTotalRate(address)", "fd08921b": "getYear()", "fd090e47": "DEPOSIT_PERIOD()", +"fd095eea": "addr2Str(address)", "fd0998de": "Totalbalance()", "fd09b6f0": "JNDToken()", "fd09d013": "CROWDSALE_ALLOCATION()", "fd0a7f3e": "grantGrantableAllocations()", "fd0aeb34": "EderCoin()", +"fd0af329": "swapLeStandard()", +"fd0afef7": "balanceOfYfii()", +"fd0b788f": "setExitStopLimit(uint256)", "fd0b9dc2": "verifyWithdrawUpdate(bytes32,bytes32,uint256,uint256)", "fd0bb752": "getBonusReceived()", "fd0c1edb": "_setVault(address)", @@ -145184,95 +265582,168 @@ "fd0d1322": "WETCC()", "fd0dd4d0": "btnSupply()", "fd0e4695": "_canceloffer(address)", +"fd0ecf75": "approveTokenForSpender(address,address)", "fd0edbd6": "refundSeller(address,address,uint256)", +"fd0f0166": "Members(address)", "fd0f267b": "deathData_v0()", +"fd0f46f3": "allCasinos(uint256)", "fd0f5a81": "updateWEIAmount(uint256)", "fd1075d0": "setTokenRewardRate(uint256)", "fd1094a9": "JaiHoToken()", +"fd10d655": "PushBonusCode(uint256)", +"fd1107d7": "CS_NORMAL()", +"fd1154c2": "grantUniformVestingTokens(address,uint256,uint256,uint32)", +"fd11c223": "getOutputPrice(uint256,uint256,uint256)", +"fd11efdc": "qualifierTokenBalance()", +"fd12167f": "depositEndIndex()", "fd12c1cb": "ethFnkRate2()", +"fd12c90a": "PreSaleClosed()", "fd1343f1": "ESOPAndCompanySet(address,address)", "fd138223": "remainingBountySupply()", "fd13a7ce": "isPurchaseWithinCap(uint256,uint256)", +"fd13b07d": "ensurePeriodBalanceDetails(uint256)", +"fd13b292": "ETH_TOKEN_PLACEHOLDER_ADDRESS()", "fd14492a": "DinoTokenSale()", +"fd147b7f": "boardHistory(uint256)", "fd14ecfe": "balanceOfSPS()", +"fd151c84": "basepercent()", "fd15e091": "changeSymbolName(string)", +"fd165cc3": "setMintProxy(address)", +"fd177725": "getNumberOfBlocksStaking(address)", +"fd17b3f2": "insuranceFundValuePerBlock()", +"fd17c99e": "updateContractStatusToComplete(address)", "fd17f289": "teamTokenSupply()", +"fd18032b": "CardPurchased(uint256,uint256,address,address,uint256)", "fd186de6": "StoToken(address,address)", "fd18b484": "VitaToken()", "fd19368a": "isEditionAvailable(uint8)", +"fd1a0269": "setEthPerUsdOracle(address)", "fd1a0a55": "JINGJING()", +"fd1aa91f": "globalSettlementStartTime()", "fd1aaa72": "sendToOwnerBalance(address,uint256)", "fd1af169": "canSend(address,address,uint256,bytes)", +"fd1b0154": "initialize(address,address,uint8,address,uint8)", "fd1bd9b0": "getAmountLeft()", +"fd1c0aa5": "getTotalRoom()", +"fd1c2fcf": "setWhitelistRewardMultiplier(address,bool)", +"fd1c317a": "getMaxBorrow(address)", "fd1c50e0": "sellAtIndex(uint256,uint256)", "fd1c66da": "getCertificateIssued()", "fd1ccaf3": "HideraNetwork(uint256,string,string)", +"fd1ce3b9": "isContractAddressRelates(address,bytes32[])", +"fd1d27a7": "AllowedTransactorRemoved(address)", "fd1dc137": "settoken(address,bool)", "fd1e582d": "ownertransfer(address,uint256)", "fd1e5e7a": "getOrCacheDesignatedReportNoShowBond()", +"fd1ed7e9": "getPMMStateForCall()", +"fd1ef5e9": "setGovernanceProxy(address)", +"fd1f498d": "setRewardsToDistribute(uint256)", "fd1f4ba5": "setAgenda(string)", "fd1fb2fa": "rateB()", "fd1fc4a0": "airDrop(address[],uint256)", +"fd20303a": "EthozRegAd(address,uint256)", "fd203906": "getCarState(string)", "fd208ca7": "endprivateIco(bool)", "fd214edd": "collect(uint64,address[],address[],address)", "fd221031": "tap()", "fd221889": "priceFactorA()", +"fd2225e2": "getSpreadRate()", "fd222745": "melonport()", "fd225cfd": "CoCoCoin()", "fd228c0b": "isMintAgent(address)", "fd22a6cf": "openGames(uint256)", "fd23022a": "Orocoin()", "fd232b59": "getEscrowPayments(uint256)", +"fd234970": "refWallet(address)", +"fd23ec5c": "stakedOwnerOf(address,uint256)", "fd241e2b": "mintWithLocked(address,uint256,uint256)", +"fd243da3": "_vault()", "fd2457d7": "clearStorage(bytes32[])", +"fd245910": "exitPancakePool()", +"fd248b71": "usdSendAmount()", +"fd24edca": "getAdArticles()", +"fd250ac5": "setTrigger(address,uint8)", "fd253492": "leadingHitCount()", +"fd2546ac": "tokenToCardIndex(uint256)", "fd255683": "getAddressValue(string)", +"fd25b305": "CrowdsalePending()", "fd260dfc": "getCertificationDbStatus(address)", "fd263390": "setBank(address,bool)", +"fd2639a3": "addParticipants(address[],uint256[])", "fd26c460": "set_game(string,string)", +"fd27152c": "totalAssetAmount()", "fd275dd5": "TokenFreezerRules(address)", "fd277399": "isService(bytes32)", +"fd279239": "setSignerBalance(uint256,uint256)", "fd27b51e": "getMarketSize()", "fd27ce93": "checkRelease(address,uint256)", "fd27d1d3": "getBlockPrice(uint256)", "fd282afe": "batchSingleAmount(address[],uint256)", "fd28392a": "changeSweepAccount(address)", "fd289797": "_canSynthesizeWithViaAuction(uint256,uint256)", +"fd28ec3e": "Set(address,uint256)", "fd28feb3": "createInitialItems()", "fd2994f7": "totalPointsPerToken()", +"fd29fe7a": "createSwap(address[4],uint256[4],bytes32[3],uint8,bool)", "fd2b4f23": "TheTestCompany()", "fd2b6b19": "crowdSaleEnded()", "fd2b863d": "produceUnitSeconds()", +"fd2b86b8": "addNftMetaPrimary(address,uint256,uint256)", +"fd2b9cf1": "pricePerDay()", "fd2c3abb": "targetDiscountValue8()", +"fd2c49c8": "multiSend(address[],uint256[],uint256[])", "fd2c80ae": "updateInterval()", "fd2ce18e": "getPayloadFrom(address)", "fd2cee78": "pollEnded(bytes32)", "fd2cf77a": "COLOR_BLUE()", +"fd2cf966": "gu(address)", "fd2d39c5": "positionOf(address)", +"fd2da339": "kink()", "fd2db3f4": "countTotalInvestorsInCrowdsale()", "fd2dba2f": "largeRate()", "fd2e9caf": "PendingETH()", "fd2ecc3f": "_setLastDate(uint256)", "fd2edd76": "TOTAL_LOCKS()", +"fd2f2b8e": "PayoutSelf(address,uint256)", +"fd2f93f8": "apmNamehash(string,bool)", "fd306ca7": "transferProfitToHouse()", "fd30929a": "disable(address[])", +"fd313708": "getTotalLevel(address,address)", +"fd317775": "returnsAHugeString()", +"fd31b4d2": "showMyBloks(address)", +"fd31c5ba": "setTransferRoot(bytes32,uint256)", "fd32649f": "cleanLog()", "fd32f088": "calVoteResultByIndex(uint256)", "fd330b26": "Total_Gamblers()", "fd338726": "updatePlayerRewards(address,address)", "fd339d18": "testAuthorityTryAuthUnauthorized()", +"fd3440c1": "setEarnedToBuyBackToken1Path(address[])", +"fd345c8a": "investments(uint256)", "fd345fc2": "totalNominees()", +"fd347196": "pendingTest(uint256,address)", "fd34d443": "kyberSwap(uint256,address,address,bytes32)", "fd34e22e": "addrToForumId(address)", +"fd34f1dd": "Author(uint256)", +"fd353c7b": "marketAuctionGetHighestBidder(uint256)", +"fd356092": "getMarketPair(uint16)", "fd35c16d": "createLibra(bytes32[],bytes16[],uint256[])", +"fd35c80a": "proposedOwners(uint256)", "fd35e71b": "entryPayoutDue(uint256)", +"fd3615c9": "lineCount()", +"fd361d37": "usersStaking(uint256,address)", +"fd3630ba": "stakeClaim()", "fd367f7d": "toggleFeatured()", "fd36c3f9": "burnFromAdmin(uint256)", +"fd37503f": "withdrawOwnerCommissoinEther()", +"fd3785a5": "reRevert()", +"fd37d771": "pendingCrops(uint256,address)", "fd37f1d0": "setInv1(address)", +"fd38818f": "TokensBurned(address,uint256)", "fd38af55": "testDebugClock()", "fd39b40b": "GameScored(bytes32,int256,int256)", "fd39ba59": "totalPreICOSupply()", +"fd3a534b": "entryMarginSumMinusNotionalSkew()", +"fd3a73b1": "rewardQualifier(address)", "fd3a77db": "acceptManagership()", "fd3ab282": "q()", "fd3acb5c": "getRoundOfSixteenResult(uint256)", @@ -145282,19 +265753,27 @@ "fd3c1c43": "wolkAddress()", "fd3c4277": "BattleDromeICO()", "fd3c4cbf": "bidERC20(uint256,uint256)", +"fd3c7638": "reloadBaseTransfers(address)", "fd3c88bd": "MultiVault(address,uint256)", "fd3c9144": "intervalTime()", "fd3cabc0": "_triggerPVEFinish(uint256)", "fd3cb5d1": "doCommunityMinting(address,uint256,int256)", "fd3d0dbf": "ioxis()", +"fd3d27b8": "unlockedSupply()", +"fd3d55a7": "deployWrapper()", "fd3d8cdc": "registerNameXID(string,bool)", "fd3e2d86": "EpayToken(uint256,string,string,uint8)", +"fd3e44d5": "getApiIdTypeOf(bytes32)", "fd3e50a7": "deliver()", "fd3e6a0a": "transfers(address,address,uint256)", +"fd3e901a": "StopBurnModeDuringTransfer()", "fd3ecae6": "changeExtendedTime(uint256)", "fd3eefe9": "getAvailableAmount(string)", "fd3f1a04": "unapprove(uint256)", "fd3f2f66": "changePrivateContribution(uint256)", +"fd3fe18a": "acquireLoan(address,bytes32)", +"fd400370": "getStakeState(address)", +"fd400475": "tokensymbol()", "fd408767": "fireEventLog4()", "fd40a1e9": "addMarketItem(bytes16,bytes16,bytes16[])", "fd413596": "addBulk(address[])", @@ -145303,8 +265782,17 @@ "fd425dd5": "initCopper()", "fd42657a": "_currentOwner()", "fd426e40": "remainingTokensVIPs()", +"fd430085": "governorAlpha()", +"fd437846": "getUserRewardsMultiplier(address,uint256)", +"fd4390c8": "changeFeeAt(uint256)", "fd4446f3": "ICOSALE_JOINTTOKENS()", +"fd450e42": "sentRequest(address,uint256)", +"fd450fb7": "safeDebtCeiling()", +"fd45b537": "_triggerOraclize()", +"fd45bc2c": "promo_fund()", +"fd45d6b3": "yieldMar(uint128)", "fd460302": "internalPresaleVesting(address,uint256,uint256,uint256,uint256,uint256)", +"fd462427": "kdh()", "fd4649ae": "UpdateUserPELOBonus(address,uint256)", "fd46544a": "deleteAllBioTranslations()", "fd467473": "setupFundingRate(uint256,uint256)", @@ -145313,205 +265801,410 @@ "fd475875": "newInversor(address,address)", "fd475fa2": "requestAddAdmin(address,string)", "fd478ca9": "getNumParticipants()", +"fd47b368": "authorizeVoter(address)", "fd47eda6": "getMarketInterestRate(uint256)", +"fd481aed": "EmergencyWithdrawalETH()", "fd48cc45": "challenge(bytes32,uint256,string)", "fd4931a3": "getUintUsername(address,address)", "fd4a343d": "extraMint(uint256)", +"fd4a772c": "blockedAddress(address)", +"fd4a77f1": "voting(uint256)", "fd4ad523": "recentlyEndedGames(uint256)", +"fd4add66": "changePNetwork(address)", +"fd4adf6e": "send_back_all()", +"fd4b4fbe": "win(uint256,uint256)", +"fd4b81c3": "lpInterface()", "fd4b9d4d": "smalobox()", +"fd4bc1e6": "addProviderPool(address,address)", "fd4bd17b": "calculateWineBuySimple(uint256)", +"fd4c0d6b": "addNFTs(uint256[],uint256[])", "fd4c5c9f": "MIN_LEADER_FRAC_BOT()", "fd4c8c30": "PlayX20()", +"fd4ca179": "updateHolder(string)", +"fd4cbc05": "updateExpirerFee(uint256)", +"fd4cbdd9": "consumeAllGasProvided()", +"fd4d02a4": "getActiveAirlines()", "fd4d603c": "PS_PRICE()", +"fd4d9953": "pendingCream(uint256,address)", "fd4dabef": "solved(uint256,bytes32[])", "fd4dbdf2": "T20coin(uint256,string,uint8,string)", "fd4e165e": "RiceFarmer()", "fd4e4d75": "addressA()", +"fd4e614b": "sell(address,uint256,address[],bytes,uint256[])", +"fd4e9ada": "addReward(address,address[],uint256[])", "fd4eeb8f": "isOMICrowdsaleContract()", +"fd4f2a56": "_linearInterpolation(uint256,uint256)", "fd4f4125": "totalEtherHasBeenReceived()", +"fd4f74cf": "toshiCoin()", +"fd4f921b": "unblockAddr(address)", "fd4faee0": "Chain1()", +"fd4fbf91": "boundY1()", "fd4ff437": "addWhitelistBulk(address[],uint256[])", "fd50299a": "addFeedback(address,uint256,address,string,uint8)", +"fd502b8d": "ownerWallet2()", +"fd507015": "discountedReceiveYELDIES()", "fd507f75": "airdropMultiple(address[])", "fd50b005": "buyForWhitelisted()", +"fd50e9b9": "setSakePerBlockTradeMining(uint256,bool)", +"fd50f8b5": "linkCryptoAccountToGame(uint256,bytes32)", +"fd516dab": "canExecute(address,uint256,bytes,bytes)", +"fd518b5e": "VIP(address)", +"fd51a3ad": "setMintedVAIOf(address,uint256)", +"fd51b2c9": "Purchased(uint256,address,uint256)", +"fd51d13c": "updateExpiry(uint256,uint256)", "fd52b3cd": "olumla()", "fd52bdd5": "TweetherToken()", +"fd52c6bb": "getUniswapMarketForTokens(address,address)", "fd530c17": "Deposit(bytes20,uint256)", "fd531e93": "getCertificate(address)", "fd535203": "refundEther(uint256)", +"fd536f5d": "initialize(address,uint256,uint256,uint256,address[],uint256[])", "fd53e7b4": "admin_active_withdraw(address)", +"fd543e51": "changeMilestone(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fd5452ca": "BASIC_PROXY()", +"fd549de2": "setMedianWritersQuorum(address,uint256)", +"fd54b228": "tree()", +"fd54c122": "isValidLoginKey(address,bytes)", "fd54fab8": "calculateBonusTokensAmount(uint256,uint256)", +"fd5509b7": "burnStakedTokens(uint256,bytes4,uint256)", "fd554229": "getGidOfRarity(uint8,uint8)", +"fd55592a": "_receiveDataCallback(uint256,string)", "fd55714d": "getTotalCampaignsByCountry(string)", "fd557d39": "queryCost()", +"fd55a349": "startFarmingTime()", +"fd561b20": "landbase()", "fd56317d": "ANMvesting()", +"fd565e3c": "StakeBurned(address,uint256,bytes)", "fd56d4c8": "getControlInfoPerToken(uint256)", "fd577343": "setDefaultOperator(address)", "fd57e9f9": "deleteElement()", "fd57ee6d": "timelock(address,uint256,uint256)", +"fd581105": "calculateCoupons(uint256,uint256)", +"fd589e50": "totalProtectedPoolAmount(address)", "fd58e63a": "setBonusMultiplier(uint256)", +"fd59a0fe": "routineAuthorizations(bytes32)", "fd5a6019": "testUser(address)", "fd5a60e1": "killDragon(uint256)", +"fd5a7416": "exchangeSynthsForDET(uint256)", "fd5c0663": "distributeBalanceToInvestors()", "fd5c40ea": "ELIX_ADDRESS()", +"fd5c5f80": "pendingMarginly(uint256,address)", "fd5c6694": "createGennezise(uint32)", "fd5cb32c": "ItemBought(address,uint256,uint256,uint256,uint256)", +"fd5d16bc": "RefundRemainingFunds(uint256)", "fd5d173b": "MAX_NUM_OZT_TOKENS()", "fd5d3e01": "getContractOrigin()", +"fd5d4c43": "burnpooltoken()", +"fd5da75b": "__getShares()", +"fd5dde81": "registerMatch(uint256,uint256,string)", +"fd5e0fe2": "addPlatformAddress(address)", +"fd5e6dd1": "stakers(uint256)", +"fd5e823b": "getMyEarnd(address)", "fd5eddf3": "supplyTokens(uint256)", +"fd5eeef8": "Store(bytes20,uint256,bytes)", +"fd5f1d5a": "insuranceDivRate()", "fd5f1e03": "getParticipantLockedAmount(address,address,bytes32)", +"fd5f6a53": "distributeCustomSaleProceeds(uint256,uint256)", "fd5f7256": "adminRetrieveContractConfig2()", +"fd5fa14e": "newChainRequest(address,string)", "fd5fde65": "mintTimeLockedTokens(address,uint256,uint256)", "fd600107": "BONUS_TIER2()", "fd600408": "tpe()", "fd607594": "min_payment()", "fd609b91": "DelVoteMemberCandidate(uint256)", +"fd60a31f": "setSettings(uint256,address,uint256)", +"fd60d731": "goodDay(address,address,address)", "fd60e1a8": "getReferralCounts()", +"fd610bfa": "tokenSetPresalePhase(address,uint8)", +"fd61265e": "getAllClaimsByIndex(uint256)", "fd6133a6": "updateTokensAvailable()", +"fd6141de": "myOrders(uint256)", +"fd617b37": "stakeHelper()", "fd6180cb": "tokenDividendsOf(address)", "fd619dce": "sigBountyProgramAddress()", +"fd61a3e2": "bidChains(string)", "fd61a725": "getMinimumReportingFeeDivisor()", +"fd61b671": "disburseBackstop()", +"fd62056b": "ClaimSet(address,address,bytes32,bytes32,bytes32,uint256)", "fd626a86": "sellKWHAgainstEther(uint256)", "fd6273a3": "ERC20KKToken()", "fd6358ce": "setPricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", "fd636975": "addWeight(address,uint256)", +"fd637ee8": "redeemBond(address,uint256,uint256,uint256)", "fd637f02": "TEAM2()", +"fd6387a9": "getTop3CandidateAllDistance()", +"fd6391ca": "getRefferLen(address)", +"fd63983b": "addtwo(uint256)", +"fd639d46": "CancelAgon(uint64,address,uint64)", +"fd63a887": "outputToLp1Route(uint256)", +"fd63afa4": "smartSwapExactOut(address,address,uint256,uint256,uint256,uint8)", +"fd63b0fe": "wheatToOwner(uint256)", "fd63f640": "getLLV_edit_5()", "fd645193": "RegistrationBonus(address)", +"fd64c2cd": "nexiumAddress()", +"fd64dbf1": "SLAPPrice()", "fd64eccb": "isForwarder()", "fd651d2c": "TransferBy(address,address,uint256)", +"fd652a3e": "LogOwnerChange(address)", "fd655073": "balancesForWithdraw(address)", +"fd66091e": "agents(address)", +"fd662e19": "sendToStaking(uint256)", "fd6673f5": "getNumberOfPlayers()", "fd669810": "close(address,address,uint8,uint256)", "fd67db81": "getCharity(uint256)", "fd68610f": "getEtherBack()", "fd6887af": "queenPrestige()", +"fd688a51": "earlyRedeemContract(bytes32)", +"fd68990a": "fulfill(bytes32,bool)", "fd68a422": "returnmoneycreator(uint8,uint128)", +"fd68c2be": "doctorSignup(string,string)", +"fd68d5bf": "TOKEN_SAFE()", "fd68e463": "FeitebiToken(uint256,uint8,string,string)", +"fd68f223": "approveTokens()", +"fd68f273": "WithdrawEther(address,uint256,uint256)", "fd68f377": "ethyclos()", +"fd699aed": "P2_SHARE_PERCENTAGE()", +"fd69c215": "TransferETH(address,uint256)", "fd69f3c2": "getMarketCount()", +"fd6a6879": "TOKEN_HUB_ADDR()", +"fd6a69b0": "multisendErcMDS(address[])", +"fd6aa77f": "useFundETH(address,uint256,address)", "fd6aad25": "indexOf(address)", +"fd6ac309": "callContract(address,address,uint256,bytes)", +"fd6b2d94": "levelRate2_(uint8)", "fd6b7ef8": "safeWithdrawal()", "fd6ba459": "mintCard(address,uint8[14])", "fd6bb46c": "addWeb(string)", +"fd6c10d3": "ARRAY_LENGTH_LIMIT()", +"fd6c143f": "yourTokens()", +"fd6c1d15": "revealNumberCallable(address,uint256)", +"fd6d9ae3": "HouseSold(uint256,uint256,address,address,uint256,uint8)", "fd6dd889": "marketTokenCreated()", "fd6e1b50": "reportBenign(address)", +"fd6e1e04": "addAuctionDetails(address,address,address,address,uint256,bool)", "fd6e3bfe": "setNFTAddress(address,address)", "fd6ecb7b": "getReceiptDetails(bytes)", +"fd6edb52": "maxDelayDays()", "fd6efe80": "DiscCoin()", "fd6f4137": "getAdvocate(address)", "fd6f5270": "CouponDeposit(address[2],uint256[7],uint8,bytes32[2],uint256)", "fd6f5430": "setContent(string,bytes32)", +"fd705151": "totalBoostersOwnedOfType(address,string)", "fd70813b": "setTermsAndConditions(string)", +"fd708ce4": "removeAllLiquidityETHOnly(address)", "fd70b40d": "HashToken(address)", "fd70f406": "citiesCount()", +"fd70fbeb": "LAST_ROADMAP()", +"fd711a55": "WithdrawLeftOvers(uint256)", +"fd717de2": "getRecoverer()", +"fd718162": "StakesDisabled()", "fd71b579": "LockMechanism(address,uint256)", +"fd71d86a": "dropBridge()", +"fd71ea50": "uniETHHXY()", "fd720090": "right86(uint256)", "fd7230d6": "create(uint256,bytes)", "fd72a11a": "TorusCoin(uint256,address)", +"fd72b222": "daysEnd()", +"fd72b6e9": "sendAmount(uint256)", +"fd72bd27": "depositTRC20(address,address,uint256,uint256)", "fd72e22a": "operationsWallet()", "fd735602": "executeN()", "fd7394ae": "IndividualityToken()", +"fd73d81c": "fileIPFSReferenceURL()", "fd743f2b": "Coke()", +"fd745bce": "open(bytes32,address,uint256)", "fd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", "fd74a151": "ETH_FUND_DEPOSIT()", +"fd74d294": "timeStart()", "fd7560ca": "distributeEarningsBasedOnScore(address,address)", "fd75b8d4": "calculateGrantClaim(address)", +"fd75e1e6": "adjustBlockEnd()", "fd7611c7": "withdrawContractTokens(address)", "fd764e68": "transfer(uint256,address,address[],uint256[],uint8[],bytes32[],bytes32[])", +"fd77719c": "tmv2eth(uint256)", +"fd7777e5": "removeOddTokens(address[],address)", "fd777d9e": "teste1()", "fd77905c": "setColorMetadata(uint256,string)", +"fd77ba73": "_hasRewardStart()", +"fd77bfc9": "userIndex(uint256,uint256,bool,address,uint256)", "fd7801df": "getCitationLength()", "fd782de5": "Proxy()", +"fd787bcc": "x_adminSetLevel(uint256,uint8)", +"fd788d41": "setMaxSquidHalving(uint256)", "fd7903a0": "getTeamFromLeaderboard(uint16,uint8)", +"fd7904b3": "DepositToMyAccount()", "fd790923": "keyImageUsedUpdate(uint256[2])", "fd791031": "gamesFund()", "fd793c76": "btg()", +"fd79ab14": "nonce_(address,address,uint256)", "fd79c2a9": "ContractName()", +"fd79c6a2": "stakeForUser(address,uint256)", +"fd79e396": "pendingDelta(uint256,address)", "fd7a1b00": "forbidDeploy(address)", "fd7ab1ad": "chiudi_votazioni()", "fd7ac203": "TestToken()", "fd7af387": "canTransferBetweenUsers()", "fd7afee8": "insertData(uint256,string,string)", +"fd7b68a2": "getCover(uint256)", +"fd7babb8": "Threshold()", "fd7c074f": "changeReceivingAddress(address)", "fd7c460d": "ciberLottery()", "fd7caf4d": "loyaltyCap()", +"fd7cfbd2": "Bid(uint256,uint256,address)", +"fd7d4b8f": "adapterFeesCollector()", "fd7d7948": "getTranformedId(uint64)", +"fd7d94b8": "sdfgbrth2()", "fd7e1bee": "freezeTime()", +"fd7e5848": "unstakeTreasuryFeePercent()", +"fd7e84b3": "createContractColor(string)", +"fd7f10c9": "releaseMapping(uint256)", +"fd7f39d0": "transfer_rxp_from_contract(address,uint256)", +"fd7f5620": "setIsVoting(bool)", "fd7f611e": "createCompany(string)", "fd7fc0e0": "invest(uint32)", "fd7fe115": "grantAccess(address,bool)", "fd7feb35": "cancelWonderSale(uint256)", "fd7ffdb8": "recordSystemOnSaleToken(uint256)", +"fd804767": "setMaxMintBPro(uint256)", "fd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", +"fd807cf2": "networkId(address)", "fd809759": "getYearIdx()", "fd810eb3": "logAccess(bytes32,string)", "fd8113e9": "checkprevowner(address)", "fd812e7c": "revealHash(uint256,uint256,bytes4)", +"fd8137d6": "migrateCSaiToDDai()", "fd814dbd": "GameXToken()", +"fd821062": "wind_down_pool(uint256,uint256)", +"fd82337f": "__getPriceSource()", +"fd823be1": "psaTesla()", "fd8258bd": "canIssue(address,address,address,uint256)", +"fd825f58": "createProfile(uint256,address,uint256)", "fd82902d": "MeowCoin()", +"fd829a23": "sushiSwapRouter()", "fd82a59f": "advisorsTokensVault()", +"fd82b32d": "woolPerAlpaPerBlockInverse()", +"fd82b73a": "deploy(address,address,address,address)", +"fd8300d1": "carousalParam(uint256)", +"fd834c9d": "FiatDeliveredEvent(uint256,uint256,string)", +"fd837aed": "StarbasePurchasedWithEth(address,uint256,uint256,uint256)", "fd83915e": "changeOwnership(bytes32,address)", "fd83da09": "lastSaleDate(uint256)", "fd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", "fd842125": "ricardianVoucher()", +"fd84cb97": "confirmDelivery(uint256)", "fd854148": "periodDuration(uint256)", +"fd85940a": "is_Re(address,string)", "fd85b1a7": "openChannel(uint256)", +"fd864ccf": "issueMaxSynthsOnBehalf(address,address)", "fd8663d2": "setBuyBackFund(address)", "fd86e49d": "token_is_active(address)", +"fd870112": "getTogether()", "fd872458": "PK(address,uint8,bytes32)", +"fd872f57": "setChainlinkBridge(address)", "fd874a7b": "blockedTimeForBountyTokens()", "fd87f2cb": "ADXProxy()", +"fd87fab8": "reserveTF(uint8[],address)", "fd8828eb": "rawSetPrice(bytes32,uint256)", +"fd889d29": "updateTimeRestrictionExemption(address,bool)", "fd89a9b5": "enableImpairedTokenContract(address,bool)", +"fd89acb9": "thisMonthEnd()", "fd89d17f": "THIRD_SUPPLY()", +"fd89ec3d": "balanceMainPJ()", +"fd8a7b48": "nextBlessingTime(address)", +"fd8ab482": "isDelegator(address)", "fd8ac8d0": "capDay2()", "fd8acc42": "buyAuction(uint256)", "fd8ae24b": "getTimeLeftInQ1()", +"fd8aea03": "_doSetSmoothingFactor(uint256)", "fd8b09c2": "ENBToken()", +"fd8b2370": "setTargetAddress(address)", "fd8bb681": "earlyBackerList(uint256)", +"fd8bc417": "sendCard(address,uint256,string,bool)", "fd8bcf6d": "requestCancelationTime()", "fd8be237": "CrowdsaleToken(string,string,uint256)", "fd8c46e7": "distributeTokensToShareholders(address,uint256)", "fd8c6fe4": "RexToken(uint256,address,address)", +"fd8c75d2": "addChain(uint256)", +"fd8cc666": "GetUserAddress(uint256)", "fd8d4bff": "MoyOpenDistribution()", +"fd8d7a42": "lockDistribution(bool)", +"fd8d8f52": "invest_panel3()", +"fd8e09bc": "canSetAffiliate(address)", +"fd8e3934": "isUpToDate(address)", +"fd8e9451": "swapETHToTokens(uint256,address)", +"fd8ec6e3": "buyPrice4()", +"fd8f1d53": "getTradeBySha3Id(bytes32)", +"fd8f6818": "set_MKR_TokenContractAddress(address)", +"fd8f82aa": "addonBlock()", +"fd8f8b20": "glyphBids(uint256)", +"fd8feac1": "_maximumFee()", +"fd8ff4ad": "transferNFTContractOwnership(address)", "fd902d1e": "setCutoffs(uint256)", "fd904207": "OPTCToken()", +"fd904809": "LavToken()", "fd906c0f": "createClone(address,string,string,string,address,uint256)", "fd906ec9": "participate(bytes1[64])", "fd909594": "icoGoal()", "fd90a668": "allowManuallyMintTokens()", +"fd90c2be": "getFlashLoanFee()", +"fd90d097": "USDValue(uint256,string)", "fd911997": "make(uint256,address,address,bytes32,bytes32,uint256,uint256)", "fd9133f3": "LOCKTokenCOIN()", "fd9168a9": "setRef(uint256)", "fd9177b5": "LogMoveMade(uint256,uint8,uint8,uint8,uint8)", +"fd91cd6b": "Issuser()", +"fd91f86d": "receiverId()", "fd922a42": "server()", "fd923a9e": "setCentsExchangeRate(uint256)", "fd925795": "pvt_plmt_remaining_in_Wei()", +"fd92ae77": "multiCollateralKey()", "fd9304cd": "minInvestmentValue()", "fd93236b": "bankerEndTime()", "fd9393c3": "init(uint256,string,string)", "fd93bdb1": "changeRestricted(address)", +"fd93c820": "_setRates(bytes32,uint256,uint256)", "fd94c80b": "priEtherReceived()", +"fd9541a9": "setTokenVerifier(address)", "fd958695": "isAlphaNumeric(bytes1)", +"fd9591c8": "AuditorStaked(uint256,address,uint256)", +"fd95fe17": "proposal_token_transfer(uint40,uint256,uint256,address,uint256)", +"fd96044b": "claimed_rewards_for(address)", +"fd967f47": "MAX_BPS()", "fd97a008": "autoDividendsFor(address)", +"fd97c1a2": "removeTrustedSubmitter(address)", "fd97c61a": "getgamecardcount()", "fd97d3c1": "giveCrypto()", +"fd980798": "showKeeperJobBonde(address,address)", +"fd984097": "enterBNB(uint256)", +"fd984c05": "FrozenTokens(address,bool,uint256)", "fd9923ce": "asmTransfer(address,address,uint256)", "fd994513": "executeVote(uint256[])", +"fd997f44": "setPrivateStateNonPayable(uint256)", "fd99a746": "transactionsCount()", "fd99c012": "USDTUBESupply()", "fd99c6a4": "upgradeCar(uint32,uint8)", +"fd99cbed": "TEAM_ALLOCATION()", +"fd99e632": "startLiquiRate()", +"fd9a03dd": "isLeasedByAssetId(uint256)", "fd9a4e61": "transferTokens(uint256)", +"fd9a51b5": "DelegatecallExecutedEvent(address,uint256,bytes32)", +"fd9a8f8b": "approveNxmToWNXM()", "fd9b41ff": "getCurrentFieldBalanceAndTarget()", +"fd9b5687": "MAX_FEE_NUMERATOR()", "fd9b8763": "Multiplier()", "fd9be522": "withdrawFee(address,uint256)", "fd9bf0a4": "_setPermissions(address,address[])", "fd9bf3aa": "mint(address,int256)", +"fd9c3df1": "checkUserType(address)", +"fd9c652b": "syncBalance()", +"fd9cad16": "approve_12(address,uint256)", +"fd9cbcc7": "native(uint256,address[],address[],uint256,uint256)", +"fd9d17e5": "RoundStarted(uint256,uint256,uint256,uint256)", "fd9e2120": "initPara(uint256,uint256,uint256,uint256,address,uint256,uint256)", "fd9e5fbf": "setTimeStaked(uint256,address)", "fd9e8ff7": "Shard()", +"fd9e924d": "convertExactETHtoERC20(address,address,address,uint256,uint256)", +"fd9eacd2": "receivePayments()", "fd9f12b0": "isYellow()", "fd9f6856": "lastDepositor()", "fd9f9b87": "isOption(address)", @@ -145522,175 +266215,311 @@ "fda237f8": "genesisToken()", "fda263e8": "timeEnd()", "fda27af2": "claimSiteToken(uint8,uint256)", +"fda2a000": "testEggInfo(uint64)", +"fda3199d": "setReserveBalance(uint256,uint256)", +"fda38601": "setCollection(uint256,bytes,bytes,uint256,uint256)", +"fda3ebc2": "ChallengeAccepted()", "fda49eb4": "treasurer()", +"fda532b7": "getIPOInfo(address)", +"fda6057e": "BalanceTransfer(address,uint256)", "fda69fae": "getInt(string)", +"fda6cb1f": "QualifiedPartnerAddress(address)", +"fda717d9": "approveERC721withdraw(address,address,uint256)", +"fda72552": "setAddress(address,address,address,address,address,address)", "fda76eef": "RewardsGiftToken()", "fda78599": "ecoSystemWallet()", "fda79925": "complianceAddress()", "fda80435": "c_MinInvestment()", +"fda805d8": "getHoldersPosition(address,address[])", "fda86c95": "internalRevokeCert(bytes32,bytes,bytes32,bool,uint256)", "fda92d3e": "ErrorMsg(string)", "fda962d3": "totalGenesisRecipients()", "fda9aafe": "WyzonCredit()", +"fda9dc48": "ipfsJobId()", "fdaa2632": "UploadURL(uint256,string)", "fdaa94de": "deleteAddr(address,bytes)", "fdaacf1b": "transferOwnerMoney(address)", "fdab1b7b": "getCurrentAuctionPrice(address,address,uint256)", +"fdab4c0b": "updateWarrantAdmin(address)", "fdab5627": "_approveCertificate(uint256,bool)", +"fdab65e7": "callExtraFunction(string,string,string,string)", +"fdabc693": "excessContributionReturned(address,uint256)", "fdac0025": "cups(bytes32)", "fdac3a20": "set_eth(uint256)", +"fdac7dfe": "companyLegalRep()", +"fdac8ead": "queue3Presence(address)", +"fdac99f7": "projectedLockedBalance(uint256)", "fdac9ff7": "setAttributeValue(address,bytes32,uint256)", "fdacbecd": "geteths(address)", "fdacd576": "setCompleted(uint256)", "fdad711d": "setFinalPayoutDistributionHash(bytes32)", +"fdadbbb6": "update(address,address,uint128,uint64,bytes)", +"fdadbc7e": "rateAndTimestampAtRound(bytes32,uint256)", "fdade29f": "BuyBooster()", +"fdade4fd": "addEnterprise(bytes32,uint256,string)", "fdae3b70": "proofOfSms()", +"fdae426a": "onReLoadAndDistribute(address,address,uint256,uint256,uint256)", +"fdae662b": "backtoken(uint256)", "fdae6a92": "setTokenFeeMake(address,uint256)", "fdae8a4c": "isAddressInBlackList(string,address)", "fdaed331": "getTransferedUser(uint256)", "fdaed778": "testConcatStorage32Bytes()", "fdaf150c": "abc_initNetwork()", "fdaf22e8": "minutos()", +"fdafa3c5": "unisushiPerBlock()", +"fdaff681": "flashloanProvider()", "fdb04023": "closeVirtualChannel(bytes32,bytes32)", +"fdb05b52": "SoftcapReached()", +"fdb0a15b": "feePercentTMV()", +"fdb20ccb": "vestingSchedules(address)", +"fdb2e3de": "stakingTokenValueInUSD(address,address)", +"fdb2f02b": "createSwap(uint256,uint256)", +"fdb2f39e": "contractAdd()", "fdb31d10": "_createToken(string,bytes5,string,string,string,string,string,address,uint256)", +"fdb33063": "categories()", +"fdb356bd": "tos(uint256)", "fdb357be": "getVotingForCount(address)", "fdb39c40": "userNameHashTaken(bytes32)", +"fdb3fa7c": "electronicSignatureOwner()", "fdb406cb": "outstandingTokens(address)", "fdb473b1": "unsetMyName()", +"fdb482a2": "boostRewardStream()", +"fdb483c7": "withdrawToken(uint256,uint256)", "fdb4dbe0": "totalEgg()", "fdb5a03e": "reinvest()", +"fdb5fefc": "earn(address)", +"fdb6b550": "getWeiPerToken()", +"fdb7039a": "getPartnerShare()", +"fdb70f9d": "attackSell(address,uint256)", +"fdb73b0c": "A12(bytes)", "fdb7b065": "marketDataOracle()", "fdb7d435": "TEC(uint256,string,string)", "fdb837e8": "GetTotalClicks()", +"fdb87252": "withdrawUnderlying(address,uint256)", "fdb89360": "ParkCoin(uint256,string,string)", "fdb914e2": "capPreSale()", "fdb986cc": "NiobiumToken()", +"fdb997f6": "basicShares()", +"fdb9da93": "gethash(uint256)", +"fdb9f96f": "wrap2(uint256,uint256)", "fdbab5f5": "PUBLICSALE_ENDTIMESTAMP()", +"fdbacf5a": "N(uint256,uint256)", "fdbaf779": "internalBuyTokens(address,address)", +"fdbaff5c": "countParkspots()", "fdbb16fd": "setEthPercent(uint256)", "fdbb5aee": "ChannelNewBalance(address,address,uint256,uint256)", "fdbb9fdb": "UNJUST(string,string,uint256,uint256,bool)", +"fdbbae72": "cryptoColorData(uint256)", +"fdbbb5e3": "swapOutputYFOXForETH(uint256,uint256,address[],uint256)", +"fdbbf8ac": "receivedSavingsOf(address)", "fdbc368a": "_ensureNewUser()", "fdbc4006": "getCandidateList()", "fdbc6530": "updaterAddress()", "fdbc938d": "BlessingChainAlliance()", +"fdbc9820": "settleAuction(address,address,uint256)", "fdbd2534": "acceptCoinSale()", "fdbd8dd8": "investInternal(address,uint256)", +"fdbd8e06": "getWtng(address)", "fdbd956d": "oraclize_query(uint256,string,bytes[],uint256)", +"fdbda0ec": "collections(uint256)", "fdbda9a7": "parentChange(address)", "fdbdc112": "backersIndex(uint256)", +"fdbe5e03": "eighteenKPayment(address)", +"fdbe93f1": "FrozenAddress(address,uint256)", "fdbf0765": "hash(bytes20,uint96,uint32,bytes32[],uint16)", +"fdbf149d": "readPatientById(uint256)", "fdbf17d0": "computeFinalStake(uint256)", +"fdbf9ff1": "createCampaign(string)", +"fdbff1f7": "LogStartPreIco()", "fdc03ca2": "enterContract()", "fdc0713b": "getMinAuditPriceCount()", +"fdc1934e": "_ListingMigrated(bytes32,address)", "fdc193a4": "test3Fails()", "fdc202f1": "Ticket(string,uint256)", "fdc24095": "returnMasterNodes(address,uint256)", "fdc272fe": "getTokenVolumebasedBonusRateForPhase3(uint256)", +"fdc28b08": "getDataParameter(address,address,uint256)", "fdc292ea": "token(address,address)", "fdc35112": "LogBuy(address,uint256,uint256)", "fdc37c85": "securityCheckURI()", +"fdc3b86f": "approve_802(address,uint256)", "fdc3d8d7": "nextTaskId()", +"fdc3f4d6": "getTotalDeployer()", "fdc40466": "maxInterestTime_()", "fdc4741b": "addRecToQueue(address,uint256)", "fdc487a7": "FundWithdrawl(address,address,uint256)", +"fdc49939": "Won(address,uint256,uint256)", "fdc4b338": "authorizeExtension(uint256,bool,string)", "fdc4c3eb": "reservedWithdraw()", +"fdc4c41f": "rewardDistributionWaitTime()", +"fdc55aa8": "FreezeEthHxpLP(uint256)", +"fdc55af6": "ownsEthHandle(address,bytes32)", "fdc5bf2c": "releaseToBuyer()", +"fdc5d522": "releaseSwap(address,address,bytes,bytes32)", "fdc61dd1": "coinAddress()", "fdc63c5c": "aprobarMensaje(uint256,uint8,string)", "fdc65c8c": "stakingBonusTokens()", "fdc69291": "_adjustSupply(address,uint256)", +"fdc85fc4": "removeOracle(address)", "fdc89f73": "toPowerOfThreeHalves(uint256)", +"fdc90d49": "TokenCreated(string,address)", "fdc967e5": "jDallyCoin()", "fdc98399": "getCurrentBuyerRateInPermilles(bool)", "fdc99064": "unregisterNotary(address)", "fdc9d0f4": "Telegram()", "fdc9e72d": "_ownMint(uint256)", +"fdca2f0b": "getInternalAirdrop()", +"fdca3798": "getAuthorityTypes(address[])", +"fdcade4a": "_liquidateRewards(uint256,address,uint256)", "fdcb6068": "accessManager()", "fdcb7539": "contruibuteData(bytes)", +"fdcba7b5": "Preverjanje_Razpolozljivosti(string)", +"fdcbb02d": "price_bump_numerator()", "fdcbd0ec": "_deleteMinion(uint32,uint8,uint64)", "fdcbd9b0": "GatewayStatusUpdated(bool)", +"fdcbe9cd": "rewardAccountsList()", "fdcc6be3": "claimedPreICO(address)", "fdccf45e": "computeCurrentPriceImpl(uint16,uint64)", "fdcd0a18": "isRefundsEnabled()", "fdcd649e": "EthAnte()", "fdcd86ab": "addBets(bytes32)", +"fdcd8ec7": "setTropVaultAddress(address)", +"fdcdab0b": "payout(bytes32,bytes32,bytes32,bytes32)", +"fdcdb3b2": "createAvatars(uint256)", +"fdcde677": "retrieveBasket()", +"fdce0ac0": "vanci()", +"fdce249b": "CrowdsaleFinalized(uint256)", +"fdce40d3": "setLotteryRules(uint256,uint256,uint256,uint256,uint256)", "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()", +"fdcf6e54": "triggerEventWithArgument(uint256)", "fdcf6f16": "getTopCompanyAtIndex(uint256)", +"fdcf791b": "toUint256(int256)", +"fdcfc3ef": "setLogicAddress(address)", +"fdcff09c": "gameStateChanged(uint256,uint256)", "fdd0298e": "PresaleAdded(address,uint256,uint256)", "fdd080a4": "activateSaleContract(address)", +"fdd085cc": "save(uint256,address)", "fdd12c5e": "r(address,address)", +"fdd17faf": "GuardianVendToOffer(uint256)", "fdd1a4e9": "externalCheckSign(bytes32,bytes,address)", +"fdd1f317": "givePremium(address)", +"fdd202ad": "early_supporters_distribution(address[],uint256)", "fdd245ee": "referralLinkMinimum()", +"fdd24b59": "viewSaleISLA()", +"fdd2773f": "xsmonk()", "fdd2f2b0": "TIME_MULTIPLIER()", +"fdd30550": "KyberProxySet(address,address)", +"fdd31fcd": "relayerRewardVault(address)", +"fdd3800f": "crowdsaleClosingBlock()", "fdd3a879": "quick()", "fdd3af8f": "fillTrade(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "fdd3c1a1": "distributeTimelockedTokens(address,uint256,uint256)", +"fdd3c368": "dydxMarketId()", "fdd3e3ff": "_removeAuction(uint256)", "fdd3ea94": "submitPeerReview()", +"fdd41ec3": "buyBananas()", "fdd42e29": "TokenOTBC(uint256,string,uint8,string)", "fdd4fd69": "penaltyDisbursalAddress()", +"fdd54ba1": "changeAdminKeyByBackup(address,address)", +"fdd56605": "stake(uint256,uint256,uint256,uint256,uint256,uint256)", "fdd5828f": "massPay(address[],uint256)", "fdd6a803": "readowners()", "fdd6df8c": "mul2Require(uint256)", +"fdd788c8": "addVpnUsage(address,address,uint256,uint256,uint256,uint256,bytes32)", +"fdd794be": "totalUNIAPPTokensForSale()", +"fdd7c402": "mintAirdrop(address,uint256)", "fdd7d87b": "decline(address,address)", "fdd868df": "getTracks(uint256,uint256)", "fdd8a733": "TokenCoinExchanger()", "fdd8ed02": "BetPlaced(uint256,uint256,address,uint256)", +"fdd93d4b": "getOffersAmountToSellAll(address,address,uint256,address)", "fdd96ae0": "compensateContributors(uint256,uint256)", "fdda3d8a": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"fdda96a9": "viewTranferDetails()", "fddaf68a": "getTipperPercentage(uint256,uint256)", "fddb4683": "ERC20(string,string,uint256)", "fddb7ef0": "mainSaleBonuses(uint256)", "fddbcca5": "pause_4()", "fddc4686": "getOwnedAssetsLength()", "fddc5545": "BitHaus()", +"fddcbbb0": "investInVault(uint256,uint256)", "fddcbd09": "burnByCreator(address,uint256)", "fddcc148": "iterator()", +"fddd2d61": "myEstimateDividends(bool)", "fdddb3ae": "Athena()", +"fdddcc39": "nextAvailabeCall(address)", +"fdde68b9": "Allowed(address,bool,bytes32,string)", "fddf0fc0": "ethRaised()", "fddf16b7": "INTERFACE_SIGNATURE_ERC721()", "fddf4e3b": "_packCombinedParams(int256,int256,int256,int256,int256)", +"fddfc6e1": "configUnlock(address,address,uint256,string,string)", "fddfec78": "allowTransfer(address,address)", +"fddff59f": "withdrawOneDebt(uint256)", "fde045b9": "HODLaddress()", "fde07212": "Betting()", "fde074c8": "betAddrsCount_()", +"fde08459": "pendingSakura(uint256,address)", +"fde09c90": "setPrincipleDepositor(address)", "fde0a64d": "admin_inactive_payable()", +"fde0cc8b": "itemMinedBalance(address,uint256,address)", +"fde0cebd": "LGEInitialized()", "fde1276a": "removeDiscount(address)", +"fde159b6": "setStakingBalance(address,uint256)", "fde17733": "demiseCEO(address)", "fde1ee44": "addAttestation(string,bool,address)", "fde20b6c": "tipPercentageLocked()", +"fde28bb1": "swapTokensForETH(address,uint256,uint256,uint256)", +"fde28ef0": "swapViaZap(address,address,uint256)", +"fde33022": "_encode_sol_bytes28(bytes28,uint256,bytes)", "fde34dc4": "finalize(uint256,uint256,bytes32)", "fde3cbd6": "NucleusVisionCoreToken()", +"fde41e29": "getBetAmount()", "fde440bb": "setPayoutNumeratorsValue(uint256[])", +"fde441f2": "addMintUser(address)", "fde45344": "untrustContract(address)", "fde46b03": "_set1()", "fde4b39d": "updateStages()", +"fde4cf66": "referalShared()", "fde4d9bf": "setAutoPrice()", "fde5ca7d": "calcDevReward(uint256)", "fde5e124": "t_Andrey2()", +"fde6339b": "setNftParams(address,uint256,uint32,uint32)", "fde63e96": "CreateSpecialPlayer(bytes32,uint8,uint8,uint256,uint256,address)", "fde6adb1": "placeBet(uint256,uint256,uint256,uint256)", +"fde72a92": "startAndDecreaseSoldAmount(address,address,uint256)", "fde7c834": "increase_bounty(address)", +"fde7f090": "ADMIN_setTokenContract(address)", "fde83a34": "tokensForTeam()", "fde90733": "isRequestingEscapeTo(uint32,uint32)", +"fde924f7": "isPublicSwap()", "fde9683d": "ICO_DAYS()", +"fde98feb": "getHoldersAverageTokenPrice(address)", "fde99668": "removeOrder(bytes32)", "fde9ba41": "transfer(bytes,address,uint256)", "fde9cded": "whichAuction(uint256)", "fde9e506": "calcDividendsSum(address)", "fdea8e0b": "presale()", +"fdea998c": "setForcedExitFee(uint256)", +"fdeaacd6": "currentStake()", +"fdeabd58": "investor_balance(address)", "fdeb49b0": "allocationsLength()", +"fdebe9b6": "_addWpcMarkets(address[])", +"fdebf086": "FreezeTokensFrom(address)", +"fdec254f": "minimumRefreshTime()", +"fdec72f2": "adminUnstake(uint256)", +"fdec941f": "PresaleAdded(address,uint256,uint8)", "fded813c": "getInvoiceBalance(bytes32)", +"fdedaa8a": "Voters(address)", +"fdedc424": "removeTokenOraclePair(address)", "fdeddab2": "windUpContract(uint64)", "fdee38a9": "ETH_TLD_NODE()", "fdee4ff9": "setExpectedReturn(uint256)", +"fdee5124": "crowToLp0Route(uint256)", "fdee579c": "MINfinney()", "fdee5c22": "THAWING_DURATION()", "fdee60e9": "peloExtenstion()", @@ -145698,12 +266527,20 @@ "fdef9106": "hasPermission(address,address,bytes32,bytes)", "fdf061f0": "adminWithdrawBalance()", "fdf0d8e0": "get_account_balance_token(address)", +"fdf13ca6": "setKeyAddress(address)", +"fdf197ed": "PaymentCanceled(uint256)", "fdf1a434": "updateMinInvestmentForIco(uint256)", "fdf1aba0": "check1(uint256,uint256)", +"fdf1edae": "inToken(address,uint256)", +"fdf262b7": "quoteAsset()", +"fdf26cc1": "sBTCPercentage()", "fdf31b39": "incrementTasksCompleted(address)", +"fdf34e03": "mintTimelockedRelease(address)", "fdf372ad": "niceguy2()", +"fdf37b95": "_encode_sol_bytes15(bytes15,uint256,bytes)", "fdf3b97f": "calculateVestedTokens(uint256,uint256,uint256,uint256)", "fdf3fa53": "RemoveCategory(uint256)", +"fdf4f8e4": "getSafety()", "fdf54c98": "SocialNode()", "fdf55523": "numRefCredits(address,bool)", "fdf56d57": "voteElection(uint256)", @@ -145713,11 +266550,20 @@ "fdf762bb": "TEAM_AND_ANGEL_SUPPLY()", "fdf78f70": "unlockStatus(address)", "fdf7983a": "safeTransferChild(address,address,uint256,bytes)", +"fdf8062f": "getAthleteFolowingteam(string)", +"fdf80bda": "foo(address)", "fdf8e11c": "getTotalAngels()", "fdf97cb2": "trustee()", "fdfa571e": "getDrawStatus(uint32)", "fdfac8e5": "BMC()", +"fdfb7091": "twapLeverageRatio()", +"fdfbd510": "Reclaimed(uint256,uint256,uint256)", +"fdfc1c97": "PicopsCertifierUpdated(address,address)", +"fdfc3521": "voidReceiverList(address)", +"fdfc4c13": "deleteIntValue(bytes32,bytes32)", +"fdfc6032": "clone2(address,bytes32)", "fdfcb425": "activate(address,uint256,uint256,uint256,bool,bool)", +"fdfcc0e4": "getHardworker(address)", "fdfd5b43": "determineWinnerScript()", "fdfecb0c": "isEcoAllocated12()", "fdff31ed": "getPairSellLoyaltyPerc(address,address)", @@ -145731,106 +266577,196 @@ "fe007eeb": "SmartRouletteTokenDividend()", "fe00b3a3": "kosacafToken()", "fe0149a0": "ZQCToken()", +"fe0174bd": "getowner()", +"fe01901a": "viewLockup(address)", +"fe01aad1": "showLockOf(address,uint256)", "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)", +"fe0317ef": "pendingMerkleContentHash()", "fe038093": "createTeams()", +"fe03b420": "getRecTotal()", +"fe042ceb": "refreshCollateral(address)", "fe04a5bc": "senderMIT()", "fe04cb1d": "setStatusPrice(uint256)", +"fe04cc00": "doAirdrop(string,address,address[],uint256[])", "fe052bc6": "minimumInvestmentInWei()", +"fe053772": "fistFuturesContract()", +"fe056342": "loanOrderHashes(uint256)", +"fe0599b4": "dataFromOrigin()", "fe05e8b1": "assertFact(uint256,string)", "fe05f7c2": "destroyforeth(uint256)", "fe063351": "newCustomer(address,string)", +"fe06566c": "lastTurboOf(address)", +"fe0698c2": "setFrozenInvestor(address,bool)", +"fe069fb1": "deleteBurner(address,uint8)", "fe06a915": "totalMTPAllocated()", +"fe070d51": "TransferredLocked(address,address,uint256,uint256)", +"fe070e9d": "LIMITED_PARTNER_ROLE()", +"fe07c43b": "borPledgeInfo(address)", "fe082a21": "SFEscrow()", "fe085775": "PresaleAllocation(address,uint256,uint256)", +"fe0863ce": "owners(address,uint256,uint256)", +"fe08d818": "OUTBOX_OFFSET()", "fe08e5fe": "setGalleryTwoPrice(uint256)", "fe0904e6": "minerDifficulty()", +"fe092fde": "orbit()", "fe094708": "Map(address,address,uint256,uint256)", +"fe097c40": "startAirdropWOK(uint256,uint256,uint256,uint256)", "fe098371": "findFrozenCell(address,uint128,uint128)", +"fe0997e1": "CardStealCompleted(uint256,address,uint128,uint128,address,address,uint128,uint128)", "fe0a2c30": "returnArrayBytes1(uint8)", "fe0a5ab0": "BLOCKS_BUCKET_SIZE()", +"fe0a8f4e": "Erc20Refund(address,uint256,string)", +"fe0ac3e7": "denyContract(address,address)", "fe0ba34e": "placeSellRequest(uint256,uint256,uint256)", "fe0c32ae": "INEX()", "fe0c4085": "vestingEnded(address)", +"fe0c4d72": "createLending(address,uint256,uint256,uint256,uint256)", +"fe0cbd76": "showUserInfo(address)", +"fe0d4bf6": "fulfill(bytes32,bytes32,uint256,bytes32,address,bytes4)", "fe0d94c1": "execute(uint256)", "fe0dadd7": "teamTwoTotalPlayers()", +"fe0db7c1": "resolve(bytes32,string,uint256,uint256)", +"fe0ee115": "votesThresholdReached(uint256,uint256)", "fe0f2fab": "ChangeClaimAddress(address,address)", +"fe0f3a13": "getPendingReward(address,address)", +"fe0f4ff4": "approve(uint32)", +"fe0f8858": "approveMaximumOnPerpetual(address)", +"fe0fe27b": "convertToProgressive(uint256)", +"fe0ffa82": "getCardNameByTokenId(uint256)", +"fe0fff1b": "HouseWithdrawed(address,uint256)", +"fe10c98d": "v1PriceOracle()", +"fe10d774": "bonds(address)", "fe10d836": "setTokensToBeClaimed()", "fe110116": "transferToPool()", +"fe113a17": "createBox(uint256,uint256[2],int256[12],bool[3])", +"fe11edc9": "markets(uint256,uint256)", +"fe123a1e": "Investment(address,uint256)", "fe12aeec": "SalesAgentAppointed(address,address)", +"fe12ff35": "stkgROOT()", +"fe1347eb": "getAmountOut(address)", +"fe136c4e": "tokenConfig(address)", "fe1391ad": "generateFixtures()", "fe13a823": "computeResponseFirstHalf(uint16)", "fe13b118": "beginDutchAuction(uint256,uint256)", "fe13baf7": "_encodeTokenId(int256,int256)", "fe1439b4": "setCTO(address)", "fe14b085": "walletUserCount()", +"fe1538d4": "upgrade(uint256,uint256,uint256)", +"fe15c8c3": "OctanPerBlock()", +"fe15e15f": "sectorToOracleFee(uint256)", "fe164a5b": "setWhitelistThresholdBalance(uint256)", +"fe167add": "checkMyBuffers()", "fe168eef": "_isNoNeedInCountryLimitChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe169962": "canFeeWhitelist()", "fe16e862": "transactionsOnForHolderUpdate(address,uint256)", "fe16ed13": "getNDay(uint256)", "fe173b97": "gasPrice()", "fe1798a7": "randomAttack()", +"fe17b28f": "_setMinInterestAccumulated(uint256)", "fe1829b6": "extendPublicSaleDiscountEndTime(uint256)", "fe1865cd": "setCompte_26(string)", "fe188184": "lastWinner()", +"fe18a430": "setPresaleMarketAddress(address)", "fe18d6e6": "convertToEth(uint256)", "fe18f82a": "getReceivedFunds(address)", "fe192f1e": "parseIntRound(string,uint256)", "fe195767": "distributeEPAL(address[])", +"fe1977f9": "setSignOwner(address)", "fe19f495": "VESTING_CLIFF_DURATION()", +"fe1a356f": "batchSend(address[])", +"fe1b091f": "updatepackagePrice(uint8,uint256)", "fe1b0a5c": "setHardCap(address)", "fe1b588f": "CoinExchange()", "fe1b602a": "getPVPCycles(uint32[])", "fe1b6f8f": "getVendorName(address)", +"fe1b8ccd": "channelValidatorCount(uint64)", "fe1bae83": "callforhelp(uint256)", "fe1c5aac": "SetParticipantURI(address,address,string)", "fe1c91fa": "performWithdrawAccounting(uint256,address)", +"fe1cce9c": "unlockStart()", +"fe1cd15d": "getTopRequestIDs()", "fe1cdbb8": "Module(address)", "fe1ce5d7": "checkOwner(address,address)", +"fe1cf82d": "testUnavailableActionsWhenPendingSale()", "fe1d2295": "BankWithdrawal(address,uint256)", "fe1d470d": "calculateDiceProfit(uint256,uint256)", "fe1da528": "tokensByEurTx(string)", +"fe1dc386": "getStaticCoefficient(uint256)", "fe1dcbb1": "AuthorizeOperator(address,address,bool)", "fe1e079e": "getNumAnimalsXPlayer(address)", "fe1ebb04": "augmintReserves()", +"fe1ef149": "updateCollateralToken(address,uint256,uint256,uint32)", "fe1f06ea": "IQIAN(uint256,string,uint8,string)", "fe1f11f1": "getNbits(bytes)", "fe1f6a0b": "createGame(bytes32,address)", +"fe1f8f7a": "withdrawalTreasuryMax()", "fe1fd352": "validEmitBuff()", +"fe2094c9": "ItemBought(address,uint256,uint256)", +"fe209b86": "unwrapNFTs(uint256[],address[],address[],bool)", +"fe20d3d9": "setStakingTokens(uint256)", +"fe20db41": "getLongPuts(address)", +"fe211148": "AuctionCreated(uint256,uint256,uint256,uint256,address)", "fe211279": "testPrintableToken()", "fe213712": "USER_GET_PRIZE()", +"fe214776": "token1UNC()", +"fe2163cd": "setFactorStake(uint8)", +"fe21cf7c": "pendingSty(uint256,address)", +"fe21def4": "add(uint256,address,bool,address,address,uint256)", "fe21f306": "chainlinkOracleAddress()", +"fe2210ec": "LogLogicReplaced(address)", +"fe227ba9": "changeStopValue()", "fe229b61": "_softRequire(bool,bytes32)", "fe229f7c": "RecToken()", "fe22fcd8": "issuanceLastModified(address)", "fe230675": "hasRecord(address)", +"fe2352c9": "nope(address,uint256)", "fe23583d": "fechVoteResultForCandidate(address)", "fe23b262": "currentPreICObalance()", "fe23baea": "setHashByWriter(address,bytes32,address,bytes32)", "fe23c6d1": "BetWon(address,uint256)", "fe2450c1": "challengeRewardsPercent()", +"fe24cb7f": "_BASE_PRICE_CUMULATIVE_LAST_()", "fe2506a4": "buyFromBal(uint256,uint256,bytes32)", +"fe2510ee": "refundSwap(bytes32)", +"fe251a07": "MetaTransactionAlreadyExecutedError(bytes32,uint256)", "fe2545dc": "purchaseFromVault(uint256)", +"fe258962": "updateWallet(address,uint256,uint256)", +"fe259f8a": "changeRewardPerEpoch(uint256)", +"fe25d732": "accountVoken2(address)", "fe25e00a": "arbiter()", "fe26063f": "getTradeAndHash(uint16,address,address)", "fe261ab0": "boolToUInt(bool,bool)", "fe2622a5": "AgriChainDocuments()", "fe2644c6": "creator_fee()", +"fe26a5c8": "getTrustedNodeAt(uint256)", "fe26cdeb": "And(bytes32,bytes32)", "fe26da0c": "publicGetState()", +"fe26dc40": "getAPRs(address,address,uint256)", "fe26f16f": "withdrawABIHash()", +"fe26f479": "_settleExpired()", "fe275280": "Silver()", +"fe275d3a": "baseAssetAllocation()", "fe277aba": "chAllowAirdrop(bool)", +"fe2787e8": "setPrivilegedBirther(address)", "fe280f2b": "roundInfo(uint32,uint32)", "fe2830d3": "PausableCrowdsaleImplPaused(uint256,uint256,uint256,address)", +"fe2894f7": "getAssetHash(string,string)", "fe28d1d8": "CROWD_WAVE2_BONUS()", +"fe294fb0": "oversightAddressesIndex(uint256)", +"fe29d449": "getLuckyExtra(uint256)", "fe29fc12": "CategoryCapSet(uint256,uint256)", "fe2a4e62": "lockAndDistributeTokens(address,uint256,uint256,uint256)", +"fe2aa4b0": "sendEthereumTo(address,uint256)", +"fe2b2367": "restartlArb(uint256)", +"fe2b3502": "whitelistedExecutors(address)", "fe2b6246": "updateMaxMinComparables(uint256,uint256,uint256,uint256)", +"fe2ba848": "removeStake(address)", "fe2c6198": "price(string)", +"fe2c960a": "cancelProposal(address,address,bytes4)", "fe2ca553": "setBalances(uint256,uint256)", "fe2cce6f": "PaylessMinisplit()", "fe2cec21": "NeobitToken()", @@ -145843,22 +266779,48 @@ "fe2edc1e": "retrieveFinished()", "fe2fdf0b": "determineAllocation(address[],uint256[])", "fe2ff4cf": "TokenSold(address,uint256)", +"fe302e4c": "beezToWbnbRoute(uint256)", +"fe303ebf": "setTaxRatio(uint256)", +"fe30c05a": "DNA_LENGTH()", +"fe313112": "pool(uint256)", +"fe31560e": "setInvestTypeOne(address)", "fe31da3b": "disapproveByB(uint256,string)", +"fe31ff60": "returnFundBNB()", +"fe324b4b": "tokenBuyersRemaining(address)", "fe32a6a7": "pushICO(uint256)", "fe32c448": "TokenHolder(address)", +"fe32eb50": "Crowdsale(uint256,uint256)", "fe332a0c": "backDARFtokenOwner()", +"fe3348f9": "GUARD()", "fe33ada9": "isExistFounder(address)", +"fe33af3d": "removeLiquidityUniswap(address,address,uint256,uint256[2])", +"fe33b302": "pairs(address)", +"fe33e45c": "getTokenAmountInRange(uint256,uint256)", +"fe33f6d4": "updateStarredCardURI(uint256,string)", +"fe346aee": "userNetworkRewardRecord(address,uint256)", "fe34e486": "getStatus(bytes16)", "fe353a5e": "checkWithdrawValueForAddressFX(address,uint256)", "fe353d28": "_computeNextGen0Price(uint256)", "fe35530c": "setUserWithdrawalAccount(address)", "fe35804e": "createLottery(uint256,uint256)", +"fe3636f0": "getClones()", +"fe377ea7": "setTier2StartTime(uint256)", +"fe37ef9a": "testRepe(address,address[],uint256[])", "fe37f21a": "changelp17(address)", +"fe384b2f": "last24hResults()", +"fe389749": "_getPot()", "fe389e09": "removeContract()", +"fe389eee": "recordPledgeWithdraw(address,uint256)", +"fe38ab9b": "test_DSProxyFactoryBuildProc()", "fe38ed66": "MarketManager()", +"fe39391c": "setmsTokens(address)", "fe396c71": "mintEarlySupportersTokens(address,uint256)", "fe399121": "referrerEarnings_()", +"fe3a1bf1": "getBebAmount()", +"fe3a2af5": "BIND_PACKAGE()", +"fe3ae90f": "createCondition(bytes32,address,uint256,uint256)", "fe3b24b1": "createBBODocument(bytes32,uint256)", +"fe3b5296": "tokenToEthereum(uint256)", "fe3c333b": "getActiveJudgmentByParty(address)", "fe3c458e": "addContract(bytes32,address,bytes32)", "fe3c51df": "getTeamId(string)", @@ -145867,98 +266829,168 @@ "fe3c9b6b": "setIcoEndTime(uint256)", "fe3ce632": "lookup(bytes4,bytes)", "fe3d002b": "AllocateAngelTokens(address,address,uint256)", +"fe3d07a2": "validateSpender(address)", "fe3d07e4": "decrementInventory(uint256,uint256)", +"fe3d1df9": "calculateAmountForClaiming(address,uint256)", "fe3d2236": "Oracle_ChangePeriod()", +"fe3da611": "getActiveTransactions()", "fe3e0efd": "TestERC20Token(string,string,uint256)", +"fe3e9bf4": "betStatus(bytes32)", "fe3ead72": "interreducemoney(address,uint256)", +"fe3f3be4": "DCARE_TOKEN_DECIMALS()", +"fe3f9b0e": "updateDelegate(address)", +"fe40c470": "cancelMarket(address)", "fe415139": "ProdPublicSale()", "fe4170bc": "setDepositLock(bool)", "fe417fa5": "claimTokens(address,uint256)", +"fe41a556": "i(uint256[],uint256[])", "fe41b2da": "setInitialValidators(address[])", "fe4215f7": "read_recast_config()", +"fe423165": "removeBoardOnUser(address)", "fe4259e3": "isMntpMigrated(address)", +"fe427f77": "transferredToTokenAcceptor()", +"fe42a7d8": "startLpStream(uint256)", "fe42cb2d": "setTokenExpectedFee(address,uint256,uint256,address)", "fe42da15": "deleted(string,string,address,uint256)", "fe435f6b": "getLLV_edit_33()", +"fe438001": "Refund(uint256,uint256,address)", +"fe43a2de": "getListLockedAddrs()", +"fe43a992": "reimburse(uint256,uint256)", +"fe43b103": "resetGroup(bytes32)", "fe43be3f": "startDestruction()", "fe442478": "sendFromContract(address,address,uint256)", "fe44a664": "generateWithdrawalHash(string,uint256,address,uint256)", "fe44d401": "MoncionToken()", "fe4520ad": "_getOwnerTokens(address)", +"fe459fdf": "ethToTokenList()", "fe45c996": "reVerifiPost(uint256,bool,bool)", +"fe45fcc0": "promoteId()", "fe460201": "getTermsAndConditions()", +"fe460b84": "getHandlerAmountInfo(address)", "fe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", +"fe46a09d": "BONUS_MULTIPLIER_1()", +"fe47068d": "zapIn(address)", "fe47a2ad": "multiRequestAudit(string,uint256,uint256)", "fe47a8a7": "totalFunding()", "fe47c806": "processFunding(address,uint256,uint256)", "fe47d34f": "USC(uint256,string,string)", +"fe485f1e": "operVestingLockDate()", +"fe48f213": "UNIlevelAmount(uint256)", +"fe490ca9": "createLegendaryMonster(string,address,address,uint256)", "fe49a9be": "ethGiven(address)", +"fe49abe3": "withdrawAdminFee()", "fe49ba1c": "getUnlockIdentifier(uint256,address,address)", "fe49dd5f": "halveEntryPrice()", "fe49e949": "requestChangeInsuranceFees(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256)", +"fe4a22eb": "authorWrites(address,bytes32)", "fe4a3ac9": "setExecPrice(uint256)", "fe4a3e5c": "TokenrateUpd(uint256,uint256)", +"fe4a4e91": "batchNumMint(uint256,uint16)", +"fe4a7ecd": "totalSaleAllocation()", +"fe4ada94": "provableOracleRequests(bytes32)", +"fe4b51cf": "EncrytedMessage()", "fe4b84df": "initialize(uint256)", +"fe4ba8af": "SUFFIX()", "fe4c39fe": "setMaxArenaOneDay(uint256)", "fe4c6b08": "_deliverTokens(address,uint256,uint256,uint256)", "fe4caa64": "isAborted()", "fe4cee66": "numberOfPartitions()", +"fe4d017f": "getUIDByAddress(address)", "fe4d2a02": "_setupStages()", +"fe4d5add": "whitelists(uint256)", "fe4d62f9": "getMiningKing()", "fe4dd8d9": "getTokenApproval(uint256)", "fe4e4a84": "exchangeIsRegistered(address)", "fe4e6bf9": "queueMint(address,uint256,uint256)", "fe4ee216": "transferTips(address,uint256,address,uint256,uint8,bytes32,bytes32)", +"fe4f5890": "modifyParameters(bytes32,uint256)", "fe4f7e11": "KangenToken()", "fe501c6f": "ChannelSettled(uint256)", "fe50cc72": "getGreeting()", "fe50ce60": "getBloodlineFromParents(bytes32,bytes32)", +"fe50e997": "readQtyStepFunctions(address,address)", "fe51717a": "releasePause()", "fe51c588": "changeFactoryAdmin(address)", "fe52ee70": "setStartingTokensAmount(uint256)", "fe530027": "trusteeWithdraw(uint256)", +"fe535227": "inversorToSponsor(address)", +"fe536c3a": "jotter()", "fe536ebe": "setPreferredSaleStartAndEndTime(uint256,uint256)", "fe537a82": "upgradeTarget()", +"fe547f72": "disburseAmount()", "fe549815": "pendingTokenBalance()", "fe54b5fc": "kyberHash()", +"fe54cbda": "taxPoolUsesOptions(uint256)", "fe553250": "adminTransferWorldBalance(uint256)", "fe556cf0": "CirculationSupply()", +"fe55892d": "withdraw(uint256,uint256,uint256,bytes)", "fe55932a": "setName(uint256,string)", "fe562ee6": "moveBlockValue(address,uint8,uint8,uint8,uint8,uint256)", "fe5675cc": "toNext()", +"fe56ba83": "SlotsSmallBet(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "fe56e232": "setManagementFee(uint256)", "fe56f5a0": "setEntranceFee(uint256)", "fe5709c2": "getSlotWeight(uint256,uint256)", "fe5709cd": "createPainting(uint256)", "fe575a87": "isBlacklisted(address)", +"fe57a691": "sentCount(uint256,address)", "fe5815a6": "hasFinished()", +"fe58265e": "getDataStore()", +"fe5876fb": "master_signal()", +"fe589997": "getClaimFromNewStart(uint256)", "fe58d3a3": "timeLimitEnable()", "fe599559": "updateEthToUsdExchangeRate(uint256)", +"fe59c184": "approve_223(address,uint256)", "fe5a4e2d": "contractorReleaseFunds(bytes16,address,address,uint256,uint256)", +"fe5a5377": "merkleRoots(bytes32)", +"fe5a9c40": "getRelativeVelocity()", "fe5aa8e0": "getUserIndexOnToken(address,address)", +"fe5b38e4": "factories()", "fe5ba303": "reservesPerUnitToken()", +"fe5bffa9": "voteBuy()", +"fe5c1a11": "donateAddress(uint256)", +"fe5c873a": "claimNFT(uint256)", +"fe5cfe1c": "unclaimedPurchasedGfce()", "fe5d5868": "XZBX()", "fe5daae6": "_queAmount(uint256)", "fe5e1853": "totalBet()", "fe5e7e3e": "endICO14()", +"fe5ebd2a": "AddOwnerRequestUpdate(address,uint8,bool)", "fe5f1dc4": "PRESALEPLUSCROWDSALE_EVE()", "fe5f2e88": "refund(string)", +"fe5f9afb": "myEthRepayBorrow(address,uint256)", "fe5ff154": "recruitHeroFee()", +"fe5ff468": "credits(address)", "fe602c65": "is_proposal_supported()", +"fe605c87": "bountyHunters(uint256)", "fe60d12c": "reserved()", +"fe60ebdc": "transferFrom(address,address,uint256[])", "fe60ed81": "changeUserGroup(address,uint256)", "fe6129d5": "setPromoBonus(address,uint256)", "fe61303b": "createGuardianSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"fe61f0e1": "transferFee(bytes32,address,uint256,address[],uint256)", +"fe6214ad": "getBotProfit(uint256)", "fe6214c4": "LDTCrowdsale()", +"fe621505": "addTrustedAddress(address)", +"fe621df3": "setStrategyLength(uint256)", +"fe626f25": "KSCMintTo(address,address,uint256,string)", "fe62a0a6": "transferFromPretgefund(address,uint256)", +"fe62e3f1": "getTotalKrakintEarnings()", +"fe62f7a7": "setMainOracle(address)", "fe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", "fe637e5e": "getScoreChange(int256,int256)", "fe63d701": "removeQueueElement(uint256)", +"fe63f798": "fees_wallet_dev()", +"fe640b7d": "createFixedSwap(uint256[],address[],uint256[],uint256,uint256,bool,address[])", +"fe643db2": "updatePurchaseStartBlock(uint256)", "fe647394": "setTeamProfitAddress(address)", "fe64d6ff": "changeAddress(address)", "fe65066e": "setUsdMnr(uint256)", +"fe655382": "initializationDone()", +"fe65acfe": "getAddressesProvider()", "fe65bb65": "cashHistory()", "fe669c26": "addPhase(uint256,uint256,uint256,uint256)", +"fe6708fc": "accrueTeamTokens(address,uint256)", "fe675deb": "Exchange(address,address,address,address,bytes32,uint256,address)", "fe675f13": "toggleFieldActivation(string)", "fe67a189": "finalizedTime()", @@ -145971,202 +267003,376 @@ "fe69dacd": "validDraws(address,uint256,uint256[])", "fe6a0cd6": "hasNextSeedHashB()", "fe6ad6c6": "isNotarized(bytes32)", +"fe6af56c": "talents(address,string)", +"fe6b606c": "PriceChange(uint256,uint256)", +"fe6b87d2": "new_component(uint256,string,bytes32)", +"fe6b910d": "set_stock_fee(uint256)", "fe6bca8f": "AllTest7()", +"fe6bcd7c": "getHealthFactor(address)", "fe6c19a4": "HelixexToken()", +"fe6c52f3": "campaignIDsDonatedToByUser(address,uint256)", "fe6cf9ee": "Krypticion()", "fe6d4305": "ALC_DECIMALS()", +"fe6d496a": "getTraitArtById(uint256)", +"fe6d65dd": "KSCTransferToPartner(address,address,address,uint256,string)", +"fe6d734c": "intermediatePartners()", +"fe6d8124": "MINTER()", +"fe6d8c46": "getConditionListSize()", +"fe6dcca3": "weiDeposited(address)", "fe6dcdba": "top()", "fe6e0441": "minimalWeiTLP1()", +"fe6eb7a7": "rateExitPosition(uint256,uint256)", "fe6f0d82": "testConstructorEvent()", "fe6f1b05": "percentDivider()", "fe6f2a60": "matches(bytes32,bytes32)", +"fe6f8843": "canRemoveLiquidity(uint256,uint256)", "fe6fef44": "setTokenQuota(uint256)", +"fe6ff858": "specialTransfer(address,address,uint256)", "fe7009f2": "getSupplier(address)", "fe704c1f": "RWQToken(uint256)", +"fe708876": "rewardsDailyPool(uint256)", "fe70a123": "KilledTokens(address)", "fe70f417": "getNewForkReputationGoal()", "fe71aec5": "LittleCactus()", "fe71be6e": "monarchToken()", +"fe71d56d": "deployAndNotifyRewardAmount(address,address,uint256,uint256)", +"fe721f0f": "_tokenRateFirstWeeks()", "fe72277d": "addHashType(bytes32)", "fe7279b1": "setTokenTransferFeeReceiver(address,address,address,address)", "fe72ac7f": "newPrice(uint256)", +"fe72e4c1": "keyManagerToNonce(address)", "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)", +"fe741fad": "revokeSale()", "fe742c6a": "millionInCents()", +"fe7441e7": "withdrawAllowance(address)", +"fe74622a": "Loser(uint256)", +"fe74de2f": "deployer(bytes32)", +"fe74edbd": "totalEscrowBalance()", "fe74f05b": "assertEq(int256,int256)", "fe757fb5": "lastClaimPrice()", "fe758a1e": "_timelimitCal(address)", +"fe758a7f": "whoIsTheCustodian()", +"fe758b49": "getContractBalanceRate()", +"fe75b882": "purchaseWithBOA(uint256)", "fe75dff6": "GcoinProto()", +"fe75faab": "setFibonacci(uint256)", "fe75ff54": "runLottery(uint256)", +"fe760a61": "country_getOldInfoForCountry(uint256,uint256)", +"fe764dcb": "LogAttestation(bytes32,address,bool)", +"fe768591": "addTokenMeta(address,uint16,uint128)", "fe76fbe3": "setStageOpeningTime(uint8,uint32)", "fe777bcd": "etherForSale()", "fe77adda": "reloadTickets(uint256,uint256,uint256)", "fe77f5e5": "getCostToNextLevel(uint256)", "fe7805f2": "MultiSigWallet()", +"fe783850": "NewYiqiniuToken(address)", +"fe784eaa": "swapTokens(uint256)", "fe786c5f": "prependUnderscore(string)", +"fe78f6b7": "tokenDelivery(bytes32,bytes32,uint256,uint256)", "fe79bfd0": "giftCode(string,address)", +"fe7a33ad": "borrowerDeployer()", "fe7b0007": "calculateClaimable(address)", +"fe7b5fa7": "getNetwork(address)", +"fe7b82d9": "setTotalRate(uint256)", "fe7baf8e": "RemoveAuthorityAddress(address)", "fe7bf05e": "deathData_v6()", "fe7c550f": "fibos(uint256)", +"fe7c58e9": "processors(uint256)", +"fe7c5cf8": "setBurnable()", +"fe7c9c92": "getVaults(address)", "fe7ccb79": "CCN()", "fe7cd999": "registerForICO(address[],uint8)", +"fe7cfbfc": "getAllCoversOfUser(address)", "fe7d1587": "canCall(address,address,address,address,bytes4)", +"fe7d567d": "revealNumber(uint256)", "fe7d8740": "getFreelancerContracts(address,uint256[],uint256[])", +"fe7dafb7": "overloadedGet(uint256)", "fe7e187f": "add_kycer(address)", +"fe7e8844": "getDataProvider(address)", "fe7eba06": "getCurrencyLength(uint256)", "fe7f0d14": "DST_BOUNTY()", +"fe7f1223": "timeWindow(uint256)", +"fe7f15ef": "currentSettlement()", +"fe7f7bc3": "gasLimitOracle()", +"fe7ff1ba": "OperatorPrivilegesChanged(uint256,address,bool)", "fe800489": "totalUnitsLeft()", "fe802d7f": "isMHTHolder(address)", +"fe808a1e": "bigpug(uint256)", +"fe8121de": "userWithdrawTokens()", "fe8190ce": "test_v1()", +"fe81ba54": "maxIncomeRate()", +"fe8212a1": "fetchSecondaryOrderNFT(address,uint256)", "fe8252f3": "withdrawlEnabled()", +"fe82ad2c": "update_round()", "fe830334": "initToken(string,string,uint8,address,uint256,bool)", "fe8311db": "sendLimitTokensToPartner(uint256)", "fe8312c1": "validateWallet(address,bool,string)", "fe836931": "freezeAmount()", "fe8370bb": "NinjaCoin()", +"fe83bd82": "swaaveTo(address)", +"fe83bece": "getPrediction(uint256)", +"fe840c65": "setDeadlineForRedeem(uint256)", +"fe849bc7": "getPriceAdjustRatio()", "fe84bff5": "getTransferValue(uint256)", +"fe84c4cd": "getTokenIssuanceState(address,bytes32)", "fe84c5ec": "fixedExpUnsafe(uint256,uint8)", +"fe8507c6": "cash(bytes32,uint256)", "fe853650": "getRandomHashesLength()", "fe856722": "gasPrc()", +"fe856bba": "moveDeposit(bytes32,bytes32,address)", "fe859472": "PractiParlezToken()", +"fe85d126": "TokenExchangeEnabled(address,uint256)", +"fe861b99": "gelatoCore()", "fe86338c": "cancelOrderList(bytes32[],uint64[])", +"fe86801c": "usdCentsExchangeRate()", "fe86de13": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,bool)", "fe8705d5": "throwOnIncompatibleContract()", "fe87ee28": "endRC()", "fe8806f5": "removeRequest(address,address)", +"fe881cc4": "UpdateVerifiedSign(address,address,string,uint8,string)", "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()", +"fe89e396": "removeProvidersFor(address,address[],uint8,bytes32,bytes32,uint256)", +"fe8a2916": "extractMargin(uint256,uint256)", "fe8a7458": "_isLowercaseLetter(bytes1)", "fe8b2707": "depositedEtherGeneric(address,bytes4,address)", "fe8b6642": "setEnforceRevisions(bytes32)", +"fe8bc9bd": "testlocka()", +"fe8be8f8": "getApprovalsPerLevel()", "fe8beb71": "getVersionFor(address)", +"fe8c6b63": "isAuthorizedToBuySgr(uint256)", "fe8cbe18": "LogBidWithdrawn(address,uint256,uint256)", +"fe8cc962": "declareNewHash(string,bytes)", "fe8d640c": "setifoodCommunityAddress(address)", "fe8d8c77": "setShouldGateGuard(bool)", +"fe8e1901": "initMCDAwarePool(uint256,uint256)", "fe8e6a63": "quarryCities(uint256)", "fe8e77c7": "getGameIdByWalletUser(address)", "fe8e992f": "unpackAllocation(bytes32)", +"fe8f2a75": "AddDLRequest(address,string,uint256,uint256,uint256,uint256,uint256,uint256)", "fe8f4763": "ROYBOITokenIToken()", "fe8f4bbe": "freedWinPoolToWinSystem()", "fe8fb49f": "setLastMaxInvestments(uint256)", +"fe902cfd": "userGuess(uint256)", "fe908b7a": "pay(bytes32,address,address,uint256,uint256,bytes)", "fe90f3df": "WPAYCoin()", +"fe9151c0": "erc165interfaceID()", "fe91d37f": "semanticVersionHash(uint16[3])", "fe92049d": "submitAnswerByArbitrator(bytes32,bytes32,address)", "fe925e80": "createLoan(address,address,address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe9305c4": "withdrawMT()", +"fe937c54": "getTokenHash(address)", "fe937fa4": "setEndMintDate(uint256)", +"fe938dcb": "proposedNewAdminTimestamp()", +"fe947ffe": "setupDecimals(uint8)", "fe949159": "sendMessageToChannel(string,string)", +"fe94afa8": "SetFreeToken(uint256)", +"fe94e48d": "ethHandleRegistred(bytes32)", "fe94e504": "setColor(uint8,string)", +"fe950feb": "logWithdraw(address,uint8,uint256)", "fe95112c": "faythe()", "fe95a5ce": "hat()", "fe95cbdd": "getAgentsWithService(uint256)", "fe95ec9c": "popcnt32(uint32)", +"fe961f61": "totalAmountStaked()", +"fe963591": "withdrawUnallocatedInterest(address,address)", +"fe9682fa": "makeBuyFee()", +"fe968814": "updateTokenSequence(uint256[],address[])", "fe968ade": "putStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"fe96eb3f": "multiTransfer(uint8,address[],uint256[])", "fe972054": "create(string,string,uint8,uint256,address,uint256,uint256,uint256)", "fe972f11": "_toMill(uint256)", +"fe979576": "newReaction(uint256,uint256)", "fe97bcf4": "RandomNumberGenerated(uint256,uint8)", +"fe97d6b3": "redeemed_list(uint256)", "fe97e481": "maxCap_MInt()", "fe97ee88": "hasPhone(address)", "fe98184d": "trustedUniverseTransfer(address,address,uint256)", +"fe9823be": "getTimelockExpiration(bytes4)", "fe985cb9": "buyin(address)", +"fe98cf4c": "setIAAStats(uint256,address,address)", "fe98f1d1": "testCantFinalizeIfNotMultisig()", "fe99049a": "transferFrom(address,address,uint256,uint256)", "fe992c98": "balanceOfAll(address)", +"fe995a4e": "WithdrawFarmedTokens(address,uint256)", "fe996956": "PMET(uint256,string,string)", "fe99ad5a": "transferMinter(address)", +"fe9a2eb5": "fakePriceETH()", "fe9a3664": "supportList(address)", +"fe9ad908": "TIMESTAMP_OF_20181002000001()", "fe9afc5a": "LastUser()", +"fe9b1a89": "itemIndexToOwner(uint256)", "fe9b7f2f": "maxAmountETH()", "fe9bb2da": "setCSCFactoryERC721(address)", +"fe9bcec7": "auction(uint256,address,uint256,uint256)", "fe9bf404": "createManager(address,address)", +"fe9bf808": "approve_294(address,uint256)", "fe9c3c28": "purchaseHalted()", +"fe9c44ae": "isCToken()", +"fe9c6e43": "hasValidBalance(bytes32,address,uint256)", "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)", +"fe9dda94": "_optionalProxy()", "fe9e1c0f": "buyTokens_Vault(address,uint256,bytes8)", +"fe9e5db9": "getChannelStorage(bytes32)", +"fe9e8242": "perrserker()", +"fe9e9a3e": "getNextDateWithdraw(uint256)", +"fe9eec33": "getUnbankOwners()", +"fe9f6e24": "get_exchange_rate()", +"fe9f8c7a": "usrIds(uint256)", "fe9fa16f": "testThrowExecuteSellOrderTwice()", "fe9fab4d": "setPrices(string)", "fe9fbb80": "isAuthorized(address)", +"fe9fed51": "findThreePercent(uint256)", +"fe9ffac4": "getTotalVaultInToken(address)", "fea0029d": "getEmissionType()", +"fea0dda2": "RID_()", +"fea136f3": "isRoomID(uint256)", "fea1377d": "USD_HARD_CAP()", +"fea167e0": "stakeClaimFee()", "fea22ae4": "newMinimumTokens(uint256)", +"fea238a9": "Called(uint256)", "fea277dc": "withdrawERC721(address,uint256,address,address)", "fea2920e": "createNewDraw()", +"fea2dbe4": "phasesStartTime(uint256)", +"fea2dc58": "mysecond(address,uint256)", "fea3afb6": "Update_UserPlayHistory_Data(uint32,uint32)", +"fea3c343": "insurance(address)", "fea45621": "changeTotsupp(uint256)", +"fea45c10": "BondPayoutsPaid(address,uint256)", +"fea51089": "CoinName()", "fea5d7b1": "mgmtIssueBountyToken(address,uint256)", "fea5d9e0": "lengthEqual(uint256[],uint256,string)", +"fea5f888": "NewLighthouse(address,string)", +"fea61faa": "totalSupplyUnderlying()", +"fea6b391": "callFnB()", +"fea6edae": "addDac(string,string,uint64,address)", "fea708f6": "totalPeriods()", "fea78df4": "buyGold(uint256,uint256,uint8,bytes32,bytes32)", "fea7bcfb": "additional(uint256)", +"fea7c53f": "withdrawFromSalary(uint256,uint256)", +"fea7ca3d": "trancheInterval()", +"fea80793": "mTransLockTime()", "fea8ae97": "MakerWithdrewERC20Token(address,uint256)", "fea9b572": "MAX_NUMBER()", "feaa29d8": "insertProfitHere()", +"feaa3394": "addEvent(string)", "feaa4cf3": "updateIntention(uint256,string,string,string)", "feaaa476": "BurnToken(address[])", +"feab11b9": "synthetixBridgeToBase()", +"feab31ac": "getUserOriginationFee(address,address)", +"feac292d": "ReinvestSTake()", "feac36d7": "insert(bytes32,bytes32)", "feaceab4": "addPayment(string,address,string,uint256,uint256)", "fead0097": "setTotalUnvestedAndUnreleasedTokens(address,uint256)", +"fead24be": "getPercentPerInterval()", "fead83a4": "redeemContingencyFundsBal()", +"feadaa1b": "acceptProposal(uint256,bytes,uint256[])", "feadce9c": "servicePause()", "feadfdbd": "getTimeFromPrize()", +"feae062d": "t4()", +"feae09fb": "setjstuihuandengji(uint256,uint256,uint256,uint256,uint256)", "feaea586": "recoverToken(address,address)", "feaed589": "releasedMarketingTokens()", +"feaefb99": "payWithTokens()", "feaf0872": "getTokenTransferCount()", "feaf1fe1": "registerToBlacklist(address)", "feaf653d": "sendEth(address[],uint256)", +"feaf8b72": "_decode_sol_uint(uint256,bytes)", +"feaf968c": "latestRoundData()", +"feafaa6b": "unlockClaim()", "feafb79b": "foundationAddr()", "feb03fe1": "_handleProductionIncrease(address,uint256)", +"feb049fb": "spdrLiquidityMiningWallet()", "feb088ab": "openingTimePeriodTwo()", +"feb1dfcc": "initPair()", +"feb2000d": "Withdraw(uint256,address,address,uint256)", +"feb21b9c": "poolAddresses(uint256)", +"feb22838": "pendingDmm(uint256,address)", "feb2432a": "addMediator(address)", "feb272e4": "noDuplicates(bytes)", "feb27ac9": "Proof_of_Tacos()", "feb2a20c": "apiAccessDisabled()", "feb31939": "attack(address,uint256,uint256[])", "feb371cd": "VUP_TOKEN_SUPPLY_TIER2()", +"feb3d108": "distributePacket(uint32)", +"feb3d3d6": "ownerToIds(address,uint256)", "feb4ad89": "addEarlyPurchases()", "feb4c708": "nextIdentityAccount()", "feb50430": "getLevitatingKittens(bytes32,uint64)", +"feb5a496": "pure_address()", "feb5d106": "getBPCount()", +"feb6217c": "pool24Open()", +"feb62755": "resolveTimedOutDuel(uint256,uint256)", +"feb6592b": "burnTokenTimes_()", +"feb6f492": "setThirdPartyCut(uint256)", +"feb70421": "startProtocol()", "feb7267b": "deleteMintable(address)", +"feb75614": "sendToGateway(uint256,string,uint256,uint256,uint256,uint256,address,address,string,string)", "feb7d2fb": "KoniosToken(uint256,string,string)", +"feb7ea1d": "submitWhitelistProposal(address,string)", "feb80ee4": "stakeFromTokenContract(address,uint256)", +"feb8ae48": "valuePoolClaimingFeeNumerator(address)", +"feb92de2": "countdownToExitScam()", "feb99390": "add(uint128,uint128)", +"feb9bc30": "authenticationFee(uint256,uint256)", +"feba894c": "LetsGo()", "feba95fb": "purchaseFor(uint128,address)", +"febadb41": "setPlayerBonusRate(uint64)", +"febaf86b": "lotteryDetails(uint256,address)", "febb0f7e": "bar()", "febb1315": "gasLimitInWei()", "febb5407": "currentLiquidity(address)", +"febb97cd": "addLockUpRewardPool(address,uint256,uint256,bool)", +"febb986b": "fashionArray(uint256)", +"febbb13e": "updateRewardPeriod(uint256,uint256)", "febc14b1": "roundCounter()", +"febc1a74": "startNewGasEpochIfNecessary(uint256)", "febc2980": "calculateWinnersCount(uint256)", "febc8c39": "feeAffiliate()", "febc9dec": "stringEquals(string,string)", +"febce92c": "adminAddOperator(address)", +"febd65bf": "transferToken1e6(address,address,uint256)", "febdb9b8": "rewardWinner()", "febe4909": "approve(uint256,address)", "febe8129": "destrcut()", +"febebb5f": "_tokenCreator(uint256)", "febec059": "GetCurrentTypeSaleCount(uint256)", +"febec814": "makeRefCode()", "febefd61": "startAuctionsAndBid(bytes32[],bytes32)", +"febf08a1": "giveUnbalancedPosition(address,uint256,address,uint256)", +"fec077dc": "getWorldInfo()", "fec07cb2": "calculateTally(address,uint256)", "fec0cc19": "setIcoPhase4(uint256,uint256)", +"fec0ef60": "releaseOnceFor(address)", +"fec0feb3": "isOracleTypeEnabled(uint256,address)", +"fec18866": "registerDomain(uint64,string)", "fec1aa12": "codetokenIndexToApproved(uint256)", "fec1c41f": "AddNewBooster(uint256,int256,uint256,uint256,uint256,uint256,uint256)", +"fec21a9c": "offerFeeRecipient()", "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)", +"fec5018c": "primitiveDistribution(uint16,uint256)", +"fec53e68": "userBetId(bytes32)", "fec5438c": "costToCallOraclizeInWei()", +"fec56499": "readState(uint256)", "fec568d4": "TransactionCompleted(uint128,uint256,uint256,string)", +"fec5bc7e": "insert(uint64,uint256)", "fec5c5f7": "FINX2Token()", "fec5d3b0": "BTCRate()", "fec5f0d2": "applyForGladiatorBattle(uint256,uint256,uint8[2])", @@ -146174,43 +267380,87 @@ "fec6c66e": "applyFromCertificate(string,string,string,uint256)", "fec74d31": "eolBlockNumber()", "fec7c0a2": "FRPRUPEES()", +"fec7f830": "getLpReleaseStart()", "fec7fc8e": "isSigned(bytes16,address)", "fec84aac": "LogUserAddedToWhiteList(address)", "fec850c3": "tokenSetBurnFeeReceiver(address,address,address,address)", "fec86fb5": "userdynamicprofis()", "fec8db83": "C3_TokenCreate(uint256,string,string)", +"fec8dcb8": "addChallenge(address,uint256)", +"fec8ee0c": "integrate_inv_supply(uint256)", +"fec91ef3": "approve_224(address,uint256)", "fec966df": "countSmartSharingContract()", "fec97c03": "finishFundraiser(uint256)", +"fec9b21f": "approve_558(address,uint256)", "fec9cd77": "allowanceToBurn(address,address)", "fec9dc1f": "updateNewToken(address,address)", +"fec9f9da": "setSynthetix(address)", +"feca4ef1": "getPlayerIncome(address)", +"feca9cc0": "setMockPrice(uint256)", "fecab4bf": "vreoSaleOngoing()", "fecadafd": "pushAtom(uint64,uint8,uint8,uint8,uint32,uint64,uint64,uint128,uint128,uint32)", +"fecaf8bd": "setZuniToken(address)", +"fecb03b1": "bet(uint256[])", +"fecb8da3": "marginTradeFromDeposit(uint256,uint256,uint256,uint256,uint256,address,address,address,address)", +"fecba3a5": "invest(uint256,address,uint256)", +"fecbbab5": "progressRevertStake(bytes32,uint256,bytes)", "fecc36c0": "fun(int256)", +"fecc6dc7": "OwnerLog(address)", +"fecc9ba5": "pendingSYNBNB(uint256,address)", "fecca5a5": "checkMyDonation()", "fecd3486": "getTulip(uint256)", "fecd817c": "cancelBuy()", +"fecdcb66": "burnEmergencyWithdraw()", "fece5543": "mock_remove(address,address)", +"fece7826": "feeHolderAddress()", +"fececa84": "hashTypes(uint256)", +"feced6fc": "setFeesByTokens(address[],uint16[])", +"fecf415a": "isBuyer(uint256)", +"fecf9734": "initialize(address,address,address,bool)", "fecf9959": "withdrawTokens(uint256,address,uint256)", "fed03118": "getTDETokenExchangeRate(uint256)", "fed0827e": "RoseCoin()", "fed09b2f": "isFemaleSale()", +"fed0a20e": "initDone()", "fed0b877": "distributeAirdropMulti(address[],uint256[])", "fed0d2a1": "sellMultiplier()", +"fed0d7df": "setParameters(address,uint256,bool)", +"fed1252a": "stakers()", +"fed13f7c": "getAmountForRansom(uint256,uint256)", +"fed1ad9b": "setGreyList(address,bool)", +"fed1bd5e": "userStore()", "fed1c977": "blockTransfering()", "fed1cec2": "addWinners(uint256)", +"fed1eb8a": "getRegister(uint256)", "fed2063c": "mintDataStream(address,uint256,bytes32,bytes32,uint256)", "fed23223": "sellFirst(uint256)", "fed26772": "zeroFeeTransferByowner(address,address,uint256)", +"fed2b05e": "userStakeTime(address)", +"fed379c1": "updateEthPriceManually(uint256)", "fed39929": "productOwner(string)", "fed3a300": "right89(uint256)", "fed3b141": "Coinbase(uint256)", "fed3f18d": "admin_inactive_withdraw(address)", +"fed43954": "brIspita()", +"fed4416a": "managerName()", "fed4614b": "funeral(bytes,int256)", +"fed4a326": "getTenderName()", "fed4de76": "addAuthorizeRole(string,string,string)", "fed503cd": "transferCoinInStages(address,address,uint256,uint256)", +"fed57f18": "setUnlockableBeforeLastBurnTokens(address,uint256,uint256)", +"fed59cb3": "gcbFromToken(uint256,bool)", +"fed62761": "getWholePrize()", +"fed66b09": "EthTransferOut(address,uint256)", +"fed72e7b": "setSaleContract(address,bool)", "fed73b54": "getPlayerIdOfIndex(uint256,uint256)", "fed7bb07": "getSeedAmountForGameId(uint256)", +"fed7bbc9": "createRewardPeriod(uint256,uint256,uint256,uint256)", +"fed7e0af": "lastairdrop(address)", "fed82ef3": "setSanityBounds(uint256)", +"fed844cc": "totalBurnFundCollected()", +"fed84f21": "boundX1()", +"fed856fe": "isVesting()", +"fed87711": "roomNightOwners(address)", "fed8a53b": "callbackInsertApproveAndDistribute(uint256,address[],uint256[])", "fed8b30a": "canSettleOrder(uint256,uint256)", "fed8f40f": "invalidateMail(uint256)", @@ -146219,66 +267469,119 @@ "feda1045": "slaveWallet()", "feda38bc": "setCrowdsaleOpen(bool)", "fedabacf": "claimPrepaid(uint256,uint256,uint256,string,uint256)", +"fedb1754": "approveMP(address,uint8)", "fedb6dfd": "TACTICALCRUISER_FTL_SPEED()", "fedbceba": "getRankLandLimit(uint256)", "fedc2a28": "_rewardWinners(string,uint8,address[])", +"fedc3830": "storeSupply(uint256)", +"fedc58e3": "getGranteeTargetFunding(address)", "fedce093": "TheNextBlock()", +"fedcf1d3": "setUNIPool(address,address)", +"fedd92fd": "systemPart()", "fedda73b": "HC8ICO()", "fedda89c": "claimVesting()", "feddb41c": "peculOld()", "feddd053": "updateStakers()", +"feddd947": "addAuthority(address,address,address,address,uint256)", "fede04c3": "reject(uint32,int256)", +"fede0c92": "get_block_number()", +"fede5c9c": "recollat_fee()", "fede5cc6": "issueInternal(address,uint256,bool)", +"fede61a5": "setLaunchLimits(uint256,uint256)", +"fedea288": "respond2(uint256,string,string)", "fedeac70": "handleQuickCloseChannel(address,bytes32,address,uint256,address,uint256,uint256)", "fedf1ed8": "getCompte_21()", +"fedf2b5f": "getNextSqrtPriceFromOutput(uint160,uint128,uint256,bool)", "fedfd535": "Config()", "fedfe46c": "vote(address,uint256,uint256,uint256)", "fedffec0": "currentReferralPercent()", "fee01177": "getTopics()", +"fee03e9e": "erc20TransferProxy()", "fee0596f": "createContractCompany(string)", +"fee05d62": "nextDayTime()", "fee13823": "ChargeTreasure()", +"fee13861": "_checkSynthBalance(address,bytes32,uint256)", "fee1396b": "registerNewRecord(bytes32)", "fee160be": "CarFare(uint16,uint16)", "fee16841": "showDeposit(address)", "fee21471": "getDayIndex_(uint256)", "fee24454": "sendNowLastCount()", +"fee2bad7": "lottery_start()", "fee2cb05": "R2()", +"fee2eae6": "renewIfApplicable()", "fee3154c": "setTransferWhitelist(address,address,bool)", "fee35ff8": "newInvest(uint256,address,uint256)", +"fee3f7f9": "admin_fee()", +"fee43421": "addliquidity_to_newpairBNB(uint256)", "fee4f41e": "signUp(string,address)", "fee4f84d": "CryptopusToken()", +"fee56f19": "migrationStartTimestamp()", +"fee666ad": "transferMoney(address,uint256)", "fee692a3": "getAutomatedReportDisputeDueTimestamp()", +"fee6a0f6": "stakePeriodForReward()", "fee6d28c": "addSnapshot(string)", +"fee6df20": "TokensPurchased(address,uint256,uint256,address)", +"fee6e791": "clearPurchases()", +"fee778f9": "setLiquidityToken(address)", "fee7e35d": "tokenURISafe(uint256)", +"fee80a49": "addNetWorthBalance(address,int256)", "fee8775b": "Ping(address)", "fee87e3b": "addresstoBytes(address)", +"fee95eca": "LogInfo(string)", +"fee96985": "mapBetterSizes(uint256,uint8)", "fee99898": "getFee(address,address)", "fee99e93": "HPAToken(uint256,string,uint8,string)", "fee9aa44": "calculateRewardForAddress(address,address)", "fee9ca13": "continueSale()", +"fee9db57": "IPFSHashSet(string,string)", "feea01b9": "create(bytes16,uint64,bytes)", "feea799b": "rejectTransaction(uint256,bytes)", +"feeaea4e": "getLandlordBalance()", +"feeb7f05": "LogSetRealityCheck(address)", +"feec02f2": "remainingRock(address)", +"feec600d": "devDailyFund()", "feec6fc1": "Tegchain(uint256,string,string)", "feec756c": "updateRecipient(address)", "feec7680": "changeFeesAddress(address)", +"feeca64e": "feeAddSt()", +"feecfc89": "trade(address,uint256,address,uint256,address,address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"feed0ccd": "compoundMint_cUSDC(uint256)", +"feed0f5a": "recoverQUAI()", +"feed18ff": "stakeEnd(uint256,uint40,uint256)", +"feed35d5": "resetTime(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint256,uint16)", "feed5561": "getContributorsCount()", "feed58ff": "setBackgroundColors(bytes3[])", "feeda367": "addMarketTo()", +"feedb820": "user_status(address)", "feee8139": "setColors(uint32[],uint8[])", +"feee85a5": "wallets3(address)", +"feeeabdc": "calculateContribution(uint256,uint256)", +"feeef1e6": "balancesOfByPartition(address[],address[],bytes32[])", +"feef5ce8": "GetYumerium(address,address,uint256)", "feefee1b": "firstExchangeRatePeriod()", +"fef0313d": "joinWithRef(string,uint256,string,string)", "fef038e8": "piggyBank(address)", +"fef055ce": "HasStaked(address)", +"fef063ea": "ManagerPermissionRevokedEvent(address,bytes32)", "fef10b95": "poolReward()", "fef1dc7d": "seekerValue()", +"fef21f0f": "rarity()", "fef28cac": "Yudhacoin()", "fef2cc97": "getPreAuthorizedAmount(address,address)", +"fef30872": "shroomsPerBlock()", +"fef33038": "setBalancerPoolsToUsdc(address,address)", "fef429e9": "linkClaimedTo(address)", "fef47e38": "CREATE_NAME_ROLE()", "fef4b969": "refundFromSeveral(uint256,address[])", +"fef575aa": "ajouterNom(string)", "fef5ae43": "enterCurrentRound()", "fef5b185": "updateUserEducation(string,uint256,string,uint16)", "fef5f1e7": "validateRequestParams(address[4],address,uint256[12],uint256,bytes,uint256)", +"fef6074e": "exchangeUnderlying(address,address,address,int128,int128,uint256,uint256)", "fef636a8": "stage2Start()", "fef64e37": "packedToStartTime(uint256)", +"fef6e740": "withdrawAllFromRewardPool()", +"fef7ad40": "Privilege_Certificate_Provisioning(uint256,string,string,uint256)", "fef7d5a8": "findEmptyBenefactorIndex()", "fef8383e": "gameOpponent()", "fef88502": "hommie()", @@ -146291,208 +267594,406 @@ "fefaa293": "reservedTokensTeam()", "fefaa626": "gameFinishedTime()", "fefacee1": "MediatorFees()", +"fefae7ba": "escapeHatchERC721(address,uint256)", +"fefb0495": "buyLicense(address,string)", "fefb130e": "srb(uint256)", +"fefb191b": "poolid()", "fefb8dc3": "publishPost(string,string)", "fefb94a5": "PFAToken()", "fefba6dd": "transferAnyERC223Token(address,uint256)", +"fefbb345": "PurchaseToken(address,uint256,uint256)", +"fefbbe67": "approveDXD()", +"fefc318a": "removeSpendableTokenFromContract(address,address)", "fefc38fd": "startActivated()", "fefc7089": "AVAILABLE_RESERVE_SUPPLY()", "fefc8b41": "test_insert_findWithHintNotTightBound()", +"fefca450": "disablePresale()", +"fefca6f7": "jobData(address)", "fefd336c": "getSettingValues()", "fefd41b9": "balanceOfRick(address)", "fefd51b2": "getBrick(uint256)", +"fefd637c": "HonestTreeGameContractAddress()", "fefd6e9a": "allocateEqual(address[],uint256)", +"fefdca4f": "setReferRewardRate(uint256,uint256)", +"fefe22ba": "countries(uint256,uint256)", +"fefe723a": "commission_fee(uint256)", +"fefe740e": "validate(uint256,uint256,uint256,uint256)", +"fefecd13": "activeSlot_ap2()", "feff0506": "addListing(string,string,uint256,address)", +"feff4a49": "mappableTokens(address)", "feffd402": "fetchVoteMainInfo()", +"ff002b9f": "getAssetPlatformFee(address)", +"ff00b0d4": "notifyRewardBegin(uint256,uint256,uint256,uint256)", "ff00c592": "setNumRewardsAvailableForAddress(uint256,address)", +"ff010239": "getLastMCRDate()", +"ff016971": "fundDividendsPayout()", +"ff017315": "setUnderlyingPriceAdjustPercentage(uint256)", "ff01f11a": "finalUnpaused()", "ff01ff08": "setGameVars(uint256,uint256,uint256,uint256,uint256)", "ff01ffa8": "refundCrowdsaleContributor()", "ff02326f": "MoonDustDividends()", "ff025819": "numberOfActiveProposals(bytes32)", "ff026158": "setSale(uint256,address)", +"ff0394eb": "INVALIDATED()", +"ff04162c": "callSetNum(address,uint256)", "ff044add": "oldCratesSold()", +"ff045b85": "convertBytes32ToUInt(bytes32)", +"ff04daa7": "testIndexOf()", +"ff04eb89": "MathedUse(address)", "ff056949": "decreaseBalance(address,uint256)", "ff05a9f0": "giftPlot(uint256,uint256,address)", "ff05edd8": "inflateSupply(uint256)", +"ff068091": "taxRateR()", "ff069b4c": "getPetbyTileId(uint16,uint8)", +"ff06a5d4": "GetUserCollateral(address,bytes32)", "ff06bb57": "setEthInCents(uint256)", "ff07061b": "LUC()", +"ff072079": "_globalrTransferAmount()", +"ff074c26": "configureBurnRestricted(address,uint256[])", +"ff078291": "addressHolders(uint256)", +"ff079eb3": "nksnList(uint256,address,uint256)", "ff08d2b0": "PayMiners()", +"ff08ec26": "lockETHAndGenerateDebt(address,address,address,address,uint256,uint256)", "ff09068f": "SMRTCoin()", "ff0935b1": "checkFeeSchedule(address)", "ff0938a7": "isPause()", +"ff09617d": "isConverter(address)", +"ff096785": "checkKycData(address,bytes32,bytes32,bytes32[],bytes32)", "ff097659": "getServerInfo(uint256)", "ff09ff99": "purchaseCity(uint256)", "ff0a22db": "_shareProfit(uint256,uint256,address)", +"ff0acf4d": "custodians(address)", +"ff0b1872": "releaseTimeLeft()", "ff0b3fc5": "intervalLength()", +"ff0b48a0": "slates(uint256)", +"ff0b7cf7": "IndexWritten(uint256,string,string,uint256,uint256)", "ff0b9c90": "createCheckpoint()", +"ff0ba788": "isValidSignature(address,bytes32,bytes32,bytes32,uint8,uint8)", "ff0bfc91": "mayGenerateAddr()", +"ff0c0e5d": "getDaiPerHe3()", "ff0c5a4b": "ContributionReceived(bytes32,address,address,uint256,uint256)", +"ff0c5c7b": "openGameResult(uint256,uint8,uint8,uint8,bytes32)", +"ff0cb43f": "vote(uint256,bool,address,address)", "ff0cd868": "ShareEstateToken()", +"ff0dbf97": "totalScoresFor(address)", +"ff0dc461": "_decode_bool(uint256,bytes)", +"ff0e18db": "isJuror(uint256,address)", +"ff0e5266": "AddLand(uint256,uint256)", +"ff0eac2f": "asd(address)", "ff0ec23e": "setEditionName(uint8,string)", "ff0efd6c": "submitDistance(uint256[])", "ff0f27de": "setIDChain(address,address)", +"ff0f2dd4": "beginUpgrade(string,address,bytes)", "ff0f2e80": "getNumOrdersByPayee()", "ff0f2f71": "setTTCAddress(address)", +"ff0f5a61": "spdrToken()", "ff102896": "tokenRedemption(address,string)", "ff10dc66": "quickTrade(address,address,uint256)", +"ff112e3c": "UV2status()", +"ff11439b": "cUsdcAddress()", +"ff11b5c0": "addSynth(address,address)", "ff11e1db": "collectEther()", +"ff121195": "ChangePool(uint88)", "ff12128a": "step(int256,bool)", "ff125c8a": "transferAllowed(address,address,uint256)", +"ff12bbf4": "setWhitelistedFrom(address,bool)", +"ff12df2d": "submitProposal(address,uint256,uint256,uint256,uint256,uint256,address,address,bytes32)", +"ff139dfb": "PuppyIndexToApproved(uint256)", +"ff13a302": "getLockingDepositBalance(bytes32)", "ff13c6c6": "RefundLoaded(uint256)", "ff1401cc": "OdinCoin(address)", +"ff142ce3": "COORDINATOR_OLD()", +"ff15b2c8": "getSusdBalance()", +"ff15f485": "EvUpdateBankAmount(uint256,uint256,uint256)", +"ff15f538": "DEFAULT_WEBX_ROLE()", "ff163aca": "AcquinomToken(address)", "ff176844": "ThanosXToken()", "ff1780ec": "rescueToken(address[],uint256[])", "ff178834": "testApproveWillModifyAllowance()", +"ff17aea9": "getTokenAddressAndBalance(uint256)", "ff17bc98": "burnOwnerTokens()", +"ff18253b": "getSenderBalance()", "ff184b5d": "EthPerToken()", "ff18539b": "setDepositCreator(address)", "ff186b2e": "ethPrice()", +"ff1881e2": "userFarm(address)", "ff190061": "balanceOfActiveToken(address)", +"ff190bb8": "collectPMMFee(address[],address)", "ff192bc8": "isFreeze(address)", "ff197bc3": "presaleTokenSold()", +"ff19d629": "_payRewards(address,uint256)", "ff1ad781": "deadbids(address)", "ff1ad7fa": "claimRewardBy(address,uint256,string)", +"ff1afbf6": "setLoanProx(address)", "ff1b01a6": "bet1000(uint256)", "ff1b4341": "easyPropose(address,uint256,uint256)", +"ff1b4504": "getStakerUnlockedStakedTokens(address,uint256)", "ff1b636d": "Admin()", +"ff1b67c3": "maxcSWOPSupply()", +"ff1b9e21": "GetRecords()", "ff1c52d8": "Queue(bytes32,bytes32,bool,bytes32,address)", "ff1c559e": "ChampionGameFinished(uint256,address,uint256,uint256)", +"ff1c7b39": "eth2HexWithBonus(uint256,uint256)", "ff1ca005": "supportComponent(uint16,uint256)", "ff1d20b5": "getSecondStageWallet()", "ff1d2712": "versionIndex()", +"ff1d3436": "daysgeteths(uint256)", +"ff1d5752": "initialize(address,address[],uint256[])", +"ff1d6bda": "getExternalGrade(address)", "ff1d83ae": "getTokenGranteesLength()", "ff1d91b4": "ccStartTime()", "ff1d9dd4": "updatePoolContract(address)", +"ff1da30f": "cnts()", "ff1e28a4": "createStamp(address,uint256)", +"ff1e73d9": "upgradeGuardCounter()", +"ff1f5f2a": "inCasedbStuck()", "ff1f7046": "requiresAuction(string)", +"ff1f7799": "getAndUpdateDelegatedByHolderToValidatorNow(address,uint256)", "ff1fd974": "getPayAmount(address,address,uint256)", +"ff2050ec": "redeemOrderWithPermit(uint256,uint256,uint256,uint8,bytes32,bytes32)", "ff2073d7": "fundRaiser()", "ff208fa5": "test_insert_findWithHintNextAtPosition(int256)", +"ff20f1db": "setOldHegicETHOptions(address)", "ff213498": "FlowingHair()", "ff21984a": "testMintAuth(int256)", "ff21f27f": "issueToken(uint256,uint256,uint256,uint256)", "ff22028b": "requireOwnerUnlockedAmount(uint256)", "ff2258cb": "diffYears(uint256,uint256)", "ff2263b7": "firstRoundStartTimestamp()", +"ff22723a": "convertEthToDai(uint256)", "ff2311a4": "GetPatient()", +"ff23284c": "voteUSD()", "ff238839": "showDelegateMsgSender(address)", +"ff23be53": "extractERC721From(address,uint256,address)", "ff23c7f2": "createArtefact(uint256,string,uint256,uint256,uint256)", "ff23e1eb": "ShalloToken()", "ff249bb0": "getTokenPacksAvailable()", +"ff25978e": "exPairsCtokenAddr()", "ff25af24": "migrateAccount(bytes32,bytes32,uint256,uint256,address)", "ff25e16d": "getLogErrorArguments()", "ff25f859": "KIN_FOUNDATION_ADDRESS()", "ff262ea5": "construct(uint256)", +"ff2650fc": "claimIssuance()", "ff266d26": "reopen(address)", +"ff268125": "repay(bytes32,uint256,address)", +"ff271af1": "unwrapFrom(address,uint256)", "ff272ad4": "__toDecimals(uint256)", +"ff277690": "UserDistr(address,uint256)", "ff27848a": "GoldToken(address)", "ff27c476": "shiftBitsRight(bytes,uint256)", "ff27cbda": "getPI_edit_4()", +"ff289fc5": "newAppProxyPinned(address,bytes32)", "ff28bcc2": "increaseReward()", +"ff28ca60": "getChainLinkPrice(address)", "ff28cdaf": "WCT(address)", "ff28d625": "releaseEarning(bytes32,bytes32,bytes32,bool,address,address)", +"ff294f45": "approve(string,uint256)", "ff29507d": "fundingStopBlock()", +"ff295c5d": "apex()", +"ff2966ac": "updateIndex(address[])", "ff299a63": "BTCUToken(uint256,string,uint8,string)", "ff29bc95": "assignBalance(address,uint256,uint256)", "ff29c104": "getTotalLeaderboards()", +"ff29d138": "newsfeeds(uint256)", +"ff29fdd1": "checkRate(uint256)", "ff2a3776": "claimAllUnsold()", +"ff2a9e24": "startAirdropnETH(uint256,uint256,uint256,uint256)", +"ff2ad8e4": "cap(uint256)", +"ff2af5c5": "addtoContributos(address,uint256,uint256)", "ff2b0571": "doFreeExtension(bytes32)", "ff2b247f": "addNewTicket(uint256,bytes32,uint256,uint256,uint256)", "ff2b350d": "acceptGiftTokens(address)", +"ff2bf64f": "getUser(address,uint256)", +"ff2c031a": "emergencyTransferETH(address,uint256)", +"ff2c2832": "setrewardPerBlock(uint256)", +"ff2c29a7": "priceFirst()", "ff2d4b71": "addDoctor(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"ff2dc9a8": "declareDeadAfter()", +"ff2ea1c9": "nyasToLp0Route(uint256)", +"ff2eba68": "capPrice(bool)", "ff2eff94": "Cow()", +"ff2f79f1": "to_little_endian_64(uint64)", "ff2f7a35": "getDeed(bytes32)", +"ff2f9c44": "RewardLevel3()", "ff30feef": "walletTranslate()", +"ff314040": "settlementDate(address)", +"ff31d63c": "recordClaimURI(bytes32,uint8,uint8[],uint16[],bytes32[],uint8[])", "ff31e930": "prizePoolAddress()", "ff31f9e6": "getSecurityDepositRegistry()", +"ff32017d": "getUSDT_GWTB(uint256)", +"ff3295bc": "DestroyFailedPayout(address,uint256)", +"ff32dda3": "HoldersRef(address)", "ff332ab7": "getTokenDetails()", +"ff334e71": "approveOracleByIndex(uint256)", +"ff33af1e": "swapToMkrOtc(address,uint256)", +"ff341148": "hasActiveCycle(address)", "ff34ef7d": "PrimaToken()", +"ff34f62a": "setregisterAmount(uint256)", +"ff3512f0": "_calculateCompleteFillBoth(uint256,uint256,uint256,uint256)", +"ff358dd4": "arbn(uint256,bytes32,address)", "ff359cb8": "RATE_SALESTAGE2()", +"ff35be9a": "cloudDoRound2(string)", +"ff36249f": "getPlyParent(address)", +"ff36c8bd": "recvmsg()", "ff36cf59": "contributeETH(address)", +"ff36f7be": "TicTacToeLockedState(address,address,address)", "ff377705": "getNumEntries(address,address,uint256)", "ff37839b": "getTxt(uint256)", "ff37d31d": "escrowDeed(uint64)", +"ff381d94": "AMBcontract()", +"ff3868ad": "setExToken(address,bool,bool,uint256)", +"ff38eebb": "issuePolicy()", "ff394153": "transferEthersToDividendManager(uint256)", +"ff3941db": "MIN_BALANCE_GOV()", "ff39ae55": "EthereumExtreme()", "ff3a5eea": "isIco()", "ff3a91d9": "getOwnerPicture(bytes32)", "ff3adc83": "GazeCoinCrowdsale()", "ff3af97f": "setBonusToken(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"ff3b4e37": "inCaseapprovedb()", +"ff3b6152": "disableWhitelistLimit()", +"ff3b8c71": "_allCars(uint256)", +"ff3ba8ba": "getSortedData(uint256[])", "ff3bf1f4": "sitePercent_()", "ff3c1a8f": "getTitle()", +"ff3c2332": "block_scientist(address)", "ff3c9472": "adduser(string,string,address)", "ff3d1be0": "stopPreIco_step1()", +"ff3d2fb8": "setRotationDelay(uint256)", +"ff3d3010": "Top3distance75(uint256)", "ff3d398c": "buyTokensByAtes(address,uint256,string)", "ff3e51c8": "ZULICC()", +"ff3e6954": "addTokenAgent(address)", "ff3e8ba1": "_transferDirect(uint256,uint256,uint256,bytes32)", +"ff3eabe1": "NewUser(address,address)", +"ff3ede99": "removeATMToMarket(address,address)", "ff3ef460": "_userOwnsToken(address,uint256)", +"ff3f161e": "balanceInput(address)", +"ff3f2fa9": "committedBalance(address)", "ff3f427c": "createMobsterWithOwner(string,address,uint256,uint256,uint256,string)", +"ff3fa15b": "getUserBonus(address)", "ff3fb765": "testUpdateCase()", +"ff3fedcf": "fourthWith()", "ff4039ea": "getDelegate(uint32)", +"ff4078d3": "tokenMinted(uint256)", "ff40807b": "getAccumulator()", +"ff40ae69": "requestUnregisteringServer(uint256)", "ff40fcf6": "buyBBC(address)", +"ff41073a": "handlerProxy(bytes)", "ff414b64": "getBalanceERC20(address)", +"ff417065": "LogPriceUpdated(uint256,uint256,bytes32,uint256)", "ff41f5cc": "HUT34_RETAIN()", "ff423357": "withdrawAmount(uint256,address)", +"ff42517d": "getMaxExitFee()", +"ff428614": "gladiatorToPowerBonus(address)", "ff429fc8": "getCooldown(uint16)", +"ff42cd5e": "earned2(address)", "ff42fd41": "getTotalLockedAmounts(address)", "ff4329ee": "receiveCashback(address)", +"ff436d86": "freezeReceiveState(address)", "ff4408ee": "stopCrowding()", +"ff4496c0": "tokenBalanceFreeze(address,uint256)", +"ff45c5a2": "crowdSalesHero(address)", +"ff461c1a": "setDepositable(uint8)", +"ff463cb8": "compareTime()", "ff46f210": "isUnfrozenAccount(address)", "ff470507": "VaultbankVotingToken()", +"ff477308": "morpheus()", +"ff47a920": "desiredJurors()", +"ff47f6d0": "updateRegisterData(address,string)", +"ff480139": "allTokensBalancesDecimalsNamesSymbols(address)", +"ff4843dc": "addressToAvatar(address)", "ff48fd9c": "mintGreen(address,uint256)", +"ff49a7b6": "migrateToYieldMaster(uint256)", "ff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", "ff49b8ef": "KyberWhiteList(address)", +"ff49c4a9": "getAmountETHLevel(uint256)", +"ff49d385": "relocateBogdavault(address)", +"ff4a1704": "enableTCOREYield()", +"ff4a5dbb": "IsPaused(bool)", "ff4a6638": "followTrader(bytes,address,bytes32,uint256,address,uint256)", "ff4a7a7c": "Blin()", "ff4ab29c": "setMarketFees(uint256)", +"ff4b2f31": "removegov(address)", +"ff4b49cc": "deletePrice(bytes32)", "ff4b6fea": "_shiftLeft(bytes32,uint256)", "ff4b9b95": "clearCandidateCache()", "ff4bd173": "dealBuyContract(uint256,uint256,string,uint256,uint256,string)", "ff4bf170": "TechieCoin()", +"ff4c9b0e": "arrProducts(uint256)", "ff4c9fa5": "getCurrentPriceForToken(uint256)", "ff4cfa5e": "onSignUp(string,uint256)", "ff4d7404": "sell(uint8,string,uint256,uint256,uint32)", "ff4dddc4": "tokensInWeiSold()", +"ff4dfa51": "getStartDay()", "ff4ea29e": "migrateTokens(address[])", "ff4f03a9": "developeo()", +"ff4f3546": "updateMinWithdrawAmount(uint256)", +"ff4f4111": "ThisCheck(address,address)", +"ff4f4579": "setFarmOwner(address)", +"ff4fa691": "Purchase(uint256,uint256,uint256,address,address)", +"ff4fa6d3": "AccumulatedFees(address)", +"ff4fad95": "alreadySaleAmount(uint256)", +"ff504d92": "tokenGroupsOwnershipAllocation(uint256)", "ff507efa": "Consulteth(uint256,uint256)", "ff508d76": "renderWeb()", "ff50abdc": "totalDeposited()", "ff50fcb6": "usedIcoSupply()", "ff510ad8": "isOnTrade(uint256)", +"ff510b06": "dualRewardsDistribution()", +"ff516c49": "getCurrentInterestRate()", "ff51d18c": "getFlightConnections(uint16)", "ff523cb2": "oraclizeQueryGas(uint256)", +"ff52c1c4": "updatePoolLP(uint256,address)", "ff53c5a3": "refundInvestor(address)", +"ff54200b": "getFundingYamiAddress()", +"ff5422f0": "receiversMap(uint256)", +"ff54b369": "tokenFromRefund(uint256)", +"ff551c84": "processPendingActions(uint256)", "ff552482": "GennovaToken()", +"ff5528e0": "cancelMint(uint256)", +"ff554d9b": "validateDeposit(string,uint256[2],uint256[2])", "ff556ecb": "releaseUnicorn(uint256)", "ff55da1c": "assertOnlySpecifiedCaller(address,bytes32)", "ff55e2ee": "setCasinoAddress(address)", "ff5639c4": "optInFromClassic()", +"ff569077": "evalLiquidation(uint256)", "ff56b59a": "start6Phase2025()", "ff56b65a": "getTxPaymentKWh(bytes32)", "ff5732a5": "calculateTokenGet(uint256,uint256,uint256,bool,bytes32)", "ff574213": "YeekFormula()", +"ff57a144": "flashLoanAndLiquidate(bytes32,address,address,bool)", "ff584597": "setGameResult(bytes32,int256,int256)", "ff585caf": "callback(uint256)", +"ff58d2f2": "raiseTokenDecimals()", "ff592125": "issuedNum()", "ff596069": "computeAddressBonus(uint16)", "ff597790": "getSold(uint256)", "ff598a06": "betTotalGasprice_()", +"ff59bff8": "nextValidTimestamp(bytes32)", +"ff59cf24": "ownerPizzaCount(address)", "ff59f3cc": "theCyberGatekeeper()", +"ff5a20bf": "getAllRates()", "ff5a478b": "finalizeTge()", "ff5a47bd": "generateSeedB()", "ff5b98b8": "setAvgReportingGasPrice(uint256)", +"ff5bc5a6": "bonusTokens(address)", "ff5bc8a7": "getSaleContractTokensLimit(address)", +"ff5bf6a8": "LogChangeFactoryUsageFee(uint256,uint256,address)", "ff5ce378": "_addTokenTo(address,uint256)", +"ff5d18ca": "creditRemaining(address)", "ff5d2c39": "to62Encoding(uint256,uint256)", +"ff5d4e96": "setNAPV2address(address)", +"ff5d902b": "getAcceptedCurrencies()", "ff5de44b": "getStockBalance(address,address,uint256)", "ff5e51b3": "VTOSToken(uint256,string,string)", +"ff5e5c41": "getNumericFCD(uint256,bytes32)", "ff5e7d4d": "lockedFundsSeconds()", +"ff5e83ce": "setWinPercentage(uint256,uint256)", +"ff5ef9c9": "banThisMachine()", "ff5f1346": "forSell()", +"ff5f3b8d": "allowedAddressPF(address)", +"ff5f7190": "MineExausted(address,uint256)", "ff5f8b4b": "takeOwnership(uint256,address)", "ff5fcf01": "initializeNewSale(uint256,uint256,address,address)", "ff5feb3e": "getVoterVotesCount(address)", @@ -146500,73 +268001,129 @@ "ff600081": "getValuePerMicroKey()", "ff60af84": "setNewMinDeposite(uint256)", "ff60cdf6": "get1TokenSellPrice()", +"ff60dfb6": "INTEREST()", +"ff61294e": "returnUserTokens(address)", "ff615b87": "SECOND_PHASE_PRICE_FACTOR()", +"ff617f3e": "BoughtTokens(address,uint256,uint256)", "ff61ad09": "getRoomBalance(uint256)", +"ff61ba5c": "getLatestPrices()", +"ff624866": "isOperationAllowed(uint8,address)", +"ff627136": "setWalletName(string)", "ff62d2cf": "rewardAdjustmentPeriod()", "ff630748": "setStepLimits(uint256,uint256)", "ff6307f8": "angelFoundationShareDenominator()", +"ff6351e7": "updateMinAndMaxDeposit(uint256,uint256)", "ff6387ad": "setconfigurationTokenPrice(uint256)", +"ff638962": "getTokenBalance(address[])", "ff6395a4": "assigned_bids()", "ff63ac3b": "_getTime()", +"ff63cc08": "selfies(uint256)", "ff6417c1": "paidAddress(uint256)", "ff6477be": "getScam(uint256)", "ff64d469": "weR()", "ff65226c": "canBuy()", "ff655320": "withdrawFirst()", "ff65e44a": "purchaseBronze()", +"ff66135e": "fileList()", "ff668cbe": "donacionTeleton()", +"ff66916f": "bcGoal()", "ff66a305": "setBountyManager(address)", "ff67577a": "Appoint_Mediator(uint256)", +"ff676c47": "setMMPerBlock(uint256)", +"ff67c80b": "KUB_UNIT()", "ff67c9f5": "getRequirementTime(address)", "ff6867c0": "startAndSetStopTime(uint256)", +"ff68f6af": "deleteWhitelist(address)", +"ff691b11": "finalizePool(bytes32)", +"ff696d9b": "setNewFundaria(address)", "ff69ac36": "currentTokenAmount()", "ff69e2bc": "CurrentPrice()", "ff69f35e": "CryptoEmojis()", +"ff6a3331": "getDeklaTokenOf(address)", "ff6a6df7": "MultiValidator()", +"ff6b7b1c": "decreaseSoldAmount(uint256,uint256,uint256)", +"ff6c2221": "assert_not_contract(address)", "ff6c33e6": "TOKEN_OWNER()", "ff6c8b87": "MPGame(uint8)", "ff6d24b1": "SedPOWToken()", +"ff6d3202": "Change_Fee_Addr(address)", "ff6d6f63": "BCTToken(uint256,string,string)", +"ff6e2ccb": "computeReconstructedKey(uint256)", "ff6f0d54": "TipSmart()", "ff6f2914": "foundersRewardsAccount()", +"ff6f870c": "depositBatch(address,address[],uint256[])", +"ff6fd2b4": "developerFeeBase()", +"ff704776": "setMaxTokensToBuyInTx(uint256)", +"ff706cba": "validateHash(string,uint256[],address[])", "ff7070eb": "_processIncomingEther(address,uint256)", "ff70bd9c": "PirateNinjaCoin(string,uint8,string,uint256,uint256)", "ff70c4d1": "getBuyerAddress(uint16,uint16)", "ff70e8d9": "STAKE_MULTIPLIER()", +"ff70fa0a": "s_f()", "ff70fa49": "setDeveloper(address)", +"ff713a9f": "auctionSurplus()", +"ff71b4e5": "treasuryAmtTotal()", "ff71c6b0": "WALLET_T8EX_COMMUNITY()", "ff722b08": "getSkillTypeCnt()", +"ff725d11": "sendTips(address,uint256,uint256)", "ff72c845": "bat()", +"ff72ccf1": "execute(uint256,uint256,bytes)", +"ff733ec7": "caculateBurnRate()", "ff739e40": "minEnterFee()", "ff73d2d8": "getIsRevenuePaid(address,uint256)", +"ff743e89": "currentBids(uint256)", +"ff747dea": "_lastLockDropTimestamp()", "ff74927b": "strConcat(string,string)", "ff74c0b8": "subTotalInvoiced(address,uint256,uint256)", "ff74e915": "NewContent(string)", "ff75567b": "participant2SentEtherCount()", "ff757d59": "kittenContract()", +"ff75fe61": "joinCompetition(string,uint256,uint256,uint256)", "ff776f55": "regist(address)", "ff77898a": "numberOfContractors()", +"ff77d086": "encerrado()", +"ff782d9b": "calcPosition(address)", "ff7835bf": "SmartCoinCash()", "ff78461c": "initSilver()", "ff786f2d": "LogTradeError(address,address,uint256,uint256,uint16)", "ff7885e8": "withdraw(address,address,address)", +"ff78be0b": "getMT(address)", "ff78d5ed": "mdtComparable()", "ff78e48b": "setIsParentOf(bool)", +"ff7977dd": "doSwap(uint256,uint256,address,address,address[])", "ff79d600": "BATAGOR()", +"ff7a2c05": "ethTransfer(uint256)", +"ff7a9e7b": "minInvestorContribution()", "ff7b5730": "getSCF()", "ff7c9329": "setMintingCompleted()", "ff7c977f": "admin_dividend(int256,int256)", +"ff7cea35": "_addressOfTokenUsedAsReward()", +"ff7d77ca": "pendingTMC(uint256,address)", +"ff7e041e": "updateIntefaceEvent()", +"ff7e131d": "delAcc(address)", "ff7e17b6": "endTimeTLP1()", +"ff7e2be9": "getAddressIndex(address)", "ff7e5abd": "vestingIsCompleted(address,uint256)", +"ff7e9444": "bunnyPerBlock()", +"ff7ea91c": "TransfersFrozen(bool)", +"ff7eb762": "showAddressToken()", "ff7f5f2a": "EtherizationUtils2()", "ff8028b3": "megaCandyToken()", +"ff805e15": "addJFCToVault(uint256)", "ff80b69a": "minPresaleAmount()", +"ff810d10": "addToWhiteListMapping()", +"ff8167bd": "findBurnPercentage(uint256)", "ff81c554": "coinMinted()", "ff81fb91": "unhint(int256,bytes32)", "ff82b174": "getUserBigPromoBonus(address,address)", +"ff82cc6c": "processActionProposal(uint256)", +"ff83ab29": "icoShareSupply()", +"ff83b1e0": "EPOCH_REWARDS_DURATION(uint256)", +"ff83b936": "getmassage2(string)", "ff83ce17": "ManagerSet(address,bool)", "ff83f562": "acceptOwnership(string)", "ff840553": "roundid()", +"ff844a63": "CLAIM_DURATION()", "ff8489df": "tokensForFinalize()", "ff848eaf": "newDeal(uint256,uint256,uint256,uint256)", "ff84990c": "MRDSCoinToken()", @@ -146574,105 +268131,186 @@ "ff84ed36": "Identity(address,address)", "ff855ac3": "withdrawTokens1(uint256)", "ff85bd39": "Free()", +"ff85ebac": "setCfoAddress(address)", "ff85fba2": "forceStart()", +"ff860976": "assetOutcomeHashes(bytes32)", "ff862839": "modifyairdrop(uint256)", +"ff864609": "EventNewCategory(uint256,string)", +"ff86bd23": "blockMiningTime()", +"ff87ad20": "exchangeableAmounts(address,uint256)", +"ff884c9c": "kovanAaveLendingPoolAddr()", "ff8872c2": "accountEthAmount(address)", +"ff889aec": "imageCommit()", +"ff88aeb9": "payed(bytes32)", +"ff890086": "appNicknames(uint256)", "ff895a62": "deActivate()", "ff897dbd": "updateMinAmount(uint256)", "ff89a720": "ECCToken(uint256,string,string)", +"ff89edd9": "aParticipant(uint256)", +"ff8ab714": "LotteryWinner(address,uint256,uint256)", +"ff8b74d7": "getStakingRewardRate(address)", +"ff8bad61": "HashConsumed(bytes32)", +"ff8bb7fb": "CreatedBy(address,uint256)", "ff8bfffc": "sendEthTweet(uint256,bool,string,bool,string,string,string)", +"ff8c2a04": "oracleReserveMinimum()", +"ff8cfe8d": "_unicontractAddr()", "ff8cffc1": "returnBorrowerPaidLate(uint256)", +"ff8dad75": "getSystemCoinFloorDeviatedPrice(uint256)", "ff8ed0f7": "Map(address,uint256)", "ff8ee507": "EthernalLoveParent()", +"ff8f230a": "LockupAccount(address)", +"ff8f3dc6": "getHeapSort32()", "ff8f7551": "FINCO()", "ff8f9b9f": "LOL10()", "ff8f9de7": "BuyRTCtokens()", "ff8fa0dd": "transferFromWithData(address,address,uint256,bytes32)", "ff8fec7f": "setHashByProvider(bytes32,bytes32)", +"ff909560": "buybackReserve()", +"ff90bdc2": "readBytecode()", "ff9151dd": "retrait_4()", +"ff91b901": "secondPhaseBonus()", "ff91b949": "nonPublicSupply()", "ff91bb45": "castVote(address,uint256)", +"ff91e63b": "numberWithdrawn(address)", +"ff92c308": "maxInterestRate(uint256)", +"ff92d19c": "fdTariffIdToInfo(uint256)", "ff92eb2c": "selleth(uint256)", "ff938f4a": "addClientAuthority(address)", "ff93a512": "createEvent(uint256,uint256,uint256,uint256,uint256,uint256,address[])", +"ff93b739": "revokeUserWallets(address[])", "ff947525": "isShutDown()", "ff94e502": "getIdByIndex(uint256)", "ff950e90": "batchSpawnAsset(address[],uint256[],uint256[],uint256)", +"ff955cd1": "bonusLevel2()", +"ff956dd9": "setBestBoost(address,address)", "ff95a8d2": "grantFounderTeamToken()", +"ff95dbb7": "excludeJack(address)", +"ff961fea": "approve_205(address,uint256)", +"ff9637be": "getOstanBudgetManager()", "ff96b467": "setLockup_contributors(address,uint256,uint256)", +"ff9726df": "incrementCount(int256)", "ff97278f": "_timeLimit(uint256)", +"ff975e23": "getLidTreasury()", +"ff97c2c0": "keys_(uint256)", +"ff97c626": "getCurrentObjectiveValue()", "ff981099": "getVotes(uint256)", "ff9852bf": "balanceOwed(address)", +"ff987269": "deleteProof(uint256)", "ff989a0d": "safeDecrement(uint256,uint256)", "ff9913e8": "allow(address)", "ff992ef5": "addInvestorList(address,uint256)", "ff993272": "bonus10end()", "ff993a18": "ChangeBuyRate(uint256)", +"ff994060": "deposit(address,address,uint48,uint256,uint256)", +"ff9998f9": "rockPerBlock()", +"ff99a6ec": "_assertSenderIsPoolOperator(bytes32)", +"ff99adff": "_preWithdrawalOwnerNiftyType(uint256)", "ff9a6773": "DexToken(address,address,address,uint256,uint256,uint256)", +"ff9b0c29": "setMaxExitFee(uint256)", +"ff9b3012": "batchDeposit(address[],uint256[],address[])", "ff9b3acf": "house()", +"ff9bf096": "exchange(address[],uint256,uint256,uint256)", "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()", +"ff9e7279": "AddressToAccount(address)", "ff9e7fe1": "MaxPowerCoin()", "ff9f0e5c": "updateToken()", "ff9f3055": "generateDna(uint256[])", "ff9f633f": "lockedAddresses(address,uint256)", +"ffa032a8": "getTokenStaked()", "ffa05698": "get_back()", +"ffa07e9b": "sendTokensBySameAmount(address,address[],uint256,uint256)", "ffa08cb7": "checkPendingWithdrawal()", "ffa094fb": "highestBidIsCC()", +"ffa18649": "addr(uint256)", "ffa1a2f1": "deleteMark()", "ffa1ad74": "VERSION()", "ffa230b0": "totalCharitySent()", "ffa2548a": "LifeSet_008()", "ffa2f5c2": "coindropsStatus()", +"ffa2f8c3": "lastEntry()", "ffa309e4": "currentFiscalYear()", "ffa32d1c": "DST_ADVISERS()", "ffa34f7c": "isFreezing(address)", "ffa39d27": "ElectricCoin()", "ffa39d3f": "_isAuthorized(address,bytes4)", +"ffa3be96": "getLikesByAddr(address)", "ffa40a4c": "pregnantPandas()", +"ffa40e83": "dev_mode()", +"ffa48e6e": "isClaimAvailableFor(address,address[],uint256[])", "ffa49c6a": "expiryEpoch()", +"ffa4e618": "Blacklisted(address)", +"ffa4f646": "lockSwitch()", "ffa59501": "votesRemaining(uint64,uint64,uint8)", +"ffa5c621": "mara()", "ffa61f69": "AllowSuccess(address,address)", "ffa640d8": "tradeContract()", +"ffa64877": "getBacorConverterAddressByRelay(address)", +"ffa64bc1": "REFERRER_COMMISSION()", "ffa651b6": "setEngineerInterface(address)", "ffa67f6c": "crowdsaleUnpause()", "ffa68839": "initDate()", "ffa696d3": "exits(bytes32)", +"ffa6ab44": "suSquares(uint256)", "ffa6ae80": "isIdRegistered(bytes16)", +"ffa6eda1": "scanResults(uint8,address)", +"ffa6f0c8": "craneSafe()", "ffa72707": "startBuying(uint256)", +"ffa749cd": "removeCollaterals(address[])", +"ffa781a4": "updateBsovTokenFee(uint256)", +"ffa7eef0": "addCoverAndCreatePools(address,address,uint48,uint256,address,uint256,uint256)", "ffa82f78": "advisorsTokenAmount()", +"ffa84e09": "devClaimed()", +"ffa84e5d": "bidPools(uint32)", +"ffa84f40": "absorbContractFunds()", "ffa89a00": "permissionToChange(address,address,uint256)", "ffa8acde": "StrongHold()", "ffa8c44a": "MINSALESCAP()", +"ffa8f559": "clearCache(address,address)", "ffa90f7f": "redeemFrom(address,uint256,bytes,bytes)", +"ffa919c3": "foreign_messages(uint64)", "ffa97aca": "getInvoice(address,bytes32)", +"ffaa2aaf": "hooks(bytes4)", "ffaa3608": "voteFor()", "ffaa67d4": "deployVesting(address,string,uint256,bool,bool,bool,address)", "ffaa9c22": "setAllSupply(uint256)", +"ffaac0eb": "adminUnpauseTransfers()", "ffaad6a5": "depositTo(address,uint256)", "ffab0959": "backersRedeemed()", "ffab3269": "EthRefunded(address,uint256)", +"ffab4bd9": "stakeToken(uint256,uint256)", +"ffab55cf": "LineCanceled(uint256,string)", "ffab7dcd": "setPlayerGeneralDt(uint64,uint32)", "ffab984d": "preIcoBuyPrice()", +"ffabc673": "approvals(address,uint256)", +"ffabca94": "releasePassiveIncome(uint256)", "ffacade4": "setFilter(uint256,address)", +"fface0a6": "removeTestReservior()", "fface4a3": "rowQuiter()", "ffacf300": "doCrowdsaleMinting(address,uint256,int256)", "ffad4fc1": "batchLock(address[],uint256)", "ffad75eb": "finishICO(bool)", +"ffad9951": "GasCost(string,function)", +"ffadbaf7": "SOLVE_TOKEN_DECIMALS()", "ffae15ba": "e()", "ffae2c5b": "getAuthority(uint256)", "ffae399e": "shouldRevert(bool)", +"ffae4049": "uniV2()", +"ffaed34b": "privateRgtAllocations(address)", "ffaef25e": "addDataResponse(address,address,string)", "ffaf78c2": "_createPiranha(string,address,uint256,uint8,uint256,uint8)", "ffaf862f": "getProductWeiRaised(address)", +"ffafa20a": "refundLockedUp(address)", "ffb00df1": "TOKENS_LOCKED_2Y_TOTAL()", "ffb05c6f": "minRequiredBlockQueueTime()", "ffb0885d": "forceTransfer(address,uint256)", +"ffb0a4a0": "pairs()", "ffb171fb": "verifyBalanceProof(address,uint256,bytes)", "ffb1a06d": "priceIsStale()", "ffb1a6cb": "getWins(address)", +"ffb1de4f": "guessEvt(address,uint256[],uint256)", "ffb24446": "setMaxTicket(uint256)", "ffb2c479": "process(uint256)", "ffb2d35d": "allowRefund()", @@ -146681,20 +268319,33 @@ "ffb3401d": "SimpleAuction(uint256,address)", "ffb38e84": "_setMinter(address,bool)", "ffb391fe": "HM(uint256)", +"ffb3e87e": "TWAP1Hour()", "ffb40152": "contract_verified()", "ffb4c857": "_confirmAndCheck(bytes32)", "ffb4e44d": "get_participant(address,address)", +"ffb52f90": "logaddr(address)", "ffb54a99": "tradingOpen()", "ffb58247": "Ektcoin(uint256,uint256)", "ffb5fc2a": "changeDeDeNetwork(address)", +"ffb64936": "aset(uint256)", +"ffb66da8": "VAIToken()", "ffb747f0": "updateBatches(address,address,uint256)", "ffb7bfba": "watchProposal(uint256)", +"ffb7cf62": "addToken(uint256,address,uint256)", +"ffb82197": "addLiquidityToUniswapcCORExWETHPair()", "ffb87173": "pixelPrice()", +"ffb91f58": "getRequire()", "ffb92678": "commFoundAddr()", +"ffb962ad": "registeFee()", "ffba376c": "unfreezeTokens()", +"ffba6095": "changeIPOstate(uint256,bool)", +"ffba8845": "getWithdrawalFeeRate()", "ffbac044": "KickCommitteeFromMapAndArrayEvent(address)", +"ffbad25c": "lever(address,address,address,uint256,uint256,string,bytes)", "ffbafdfe": "updateState(uint256,uint8)", +"ffbb17b5": "test_eq_ok()", "ffbb62a3": "withdrawCoins()", +"ffbb6989": "requestPending(address)", "ffbc9bd0": "canSubmit()", "ffbd26ce": "addReinforcedWhitelist(address[])", "ffbd400b": "boolToUInt(bool)", @@ -146702,20 +268353,39 @@ "ffbd6f72": "splice(uint8[],uint256,uint256)", "ffbd73d0": "OSUniEDUSupply()", "ffbd8c37": "buyBNNTokens()", +"ffbdff66": "createUser(uint256)", +"ffbe3b73": "totalBondedAt(uint256)", +"ffbe3d17": "approve_312(address,uint256)", +"ffbe5e9e": "_deity()", +"ffbe9f1e": "feeMax()", +"ffbf688e": "getTotalPositionSize()", "ffbfd19e": "accUserReward()", "ffbfd38b": "FooStdToken()", "ffc0060e": "QingFengCabve(uint256,string,uint8,string)", "ffc0483d": "CoreAddress()", +"ffc07984": "individualBalances(address)", "ffc0d035": "hgtDecimals()", +"ffc0d233": "harvestYield(uint256,uint256)", +"ffc0f46c": "promotableSubUnits(uint256,uint256)", "ffc1b038": "blacklistInvestor(address)", +"ffc1fb52": "NFTDetached(address,uint256)", +"ffc24d13": "getPoolData(address,address,address)", +"ffc2ab14": "fills(address,bytes32)", +"ffc30ea8": "_revoke(bytes4,address)", "ffc31215": "getStore(string)", "ffc3a769": "transfer(address[],uint256[])", "ffc3f1f2": "HyperToken()", "ffc42904": "MarketContract()", "ffc48c61": "buyerAddressTransfer(string,address,address)", +"ffc4b168": "isGenesisAddressLevel3(address)", "ffc4bbb3": "FirstLevelCost()", +"ffc4d6f2": "StakingIntentDeclared(bytes32,address,uint256,address,uint256,uint256,uint256,bytes32,uint256)", +"ffc4ed0d": "getInterestAmount(address,address,address)", +"ffc527bf": "getDGASReserve()", "ffc52a1f": "registerByList(address[],uint256[])", "ffc54ea4": "setTokenActive(uint256,bool)", +"ffc62be1": "returnDAI()", +"ffc6ef38": "governanceChangeFrequency(uint256)", "ffc6ff1e": "closeSubmission()", "ffc797e4": "setLowerBondPrice(uint256,uint256)", "ffc85dc5": "finalizeDeposits()", @@ -146723,104 +268393,199 @@ "ffc8c4cb": "totalConsume()", "ffc9152e": "isRefunded(address)", "ffc92376": "subEmployerTotalInvoiced(address,address,uint256)", +"ffc97ea5": "canConfirmOrder(address)", "ffc9896b": "getUserData(address)", +"ffca1736": "HuiJuAddress()", "ffca2968": "ExternalSaleSha3(uint8,bytes32,address,uint256,uint256)", "ffcab3e9": "getValidDurationSignatures()", "ffcad44e": "getGroupFileCount(string)", "ffcb1edb": "getDividendTokenSupply()", "ffcb39c2": "tier0(address)", +"ffcb54ce": "HNKToken()", "ffcbb5df": "printStats()", "ffcc7bbf": "getUserAtIndex(uint256)", "ffcc8484": "nextroundERCtradeactive()", "ffcce369": "changeIPFSHash(string)", +"ffcd2b59": "tokenWAD()", +"ffcd4263": "pendingTokens(uint256,address)", "ffcd64e5": "_issueByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ffcd7b39": "parseCollectibleData(uint256)", +"ffcdc6e8": "BurnAmount()", "ffcdcb51": "AhooleeTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"ffcdd2bd": "animalsLevel(uint256)", +"ffce2210": "water()", +"ffce3652": "view_commit()", "ffcecf09": "PRE_SALE_START_3()", "ffcf1ade": "logPromiseCanceled(uint256)", "ffcf21a9": "eventOracles(bytes,uint256)", +"ffcfa07a": "hasUserMinted(address,uint256)", "ffd10e07": "enterPool(address)", +"ffd12575": "syshassellpayed()", +"ffd16abf": "getTakerOrderlist(address)", "ffd19e8c": "isAlreadyProcessed(uint256)", +"ffd1d7f5": "_getCurrentCollateralRequirementId()", +"ffd2bab6": "dmmTokenAddressToDmmTokenIdMap(address)", +"ffd2ffb9": "curValidatorShares()", +"ffd34ad5": "fixedAmount()", +"ffd353d2": "NewRecips(address)", "ffd40b56": "allocatorBalance(address)", "ffd4185c": "QuantumXICO()", "ffd45f16": "calculateTokenCount(uint256,uint256)", "ffd479bb": "setBaseInfo(uint256,bool,bool)", "ffd48b73": "buyInternal(address,uint256,uint256)", "ffd48f40": "setDelegadoDeDistritoVerify(bytes32)", +"ffd49c84": "minPeriod()", "ffd4e0e2": "getTotalIcoTokens()", "ffd4e799": "HTJToken()", "ffd4f4b2": "withdrawTokensFromContract(uint256)", "ffd571ca": "ethersContributed()", +"ffd59710": "requestTeamFunds(uint256)", +"ffd5acad": "getEmployeeIdByAddress(address)", +"ffd5c714": "price0AverageUNC()", +"ffd5de5f": "deleteExitClaim(bytes32)", +"ffd60af8": "cancelRequest(uint256,address,bytes32,bytes4,uint256)", +"ffd62656": "Ether_Total_For_TENS_LP()", +"ffd66196": "getForeignFee()", "ffd68462": "readCheckList(address,uint256,uint256)", "ffd6a052": "ChangeAdminWalletAddress(uint256,address)", "ffd71e13": "loadCoreAddress(address)", "ffd740df": "removeNode(uint256)", "ffd7b5e6": "investWithCustomerId(address,string)", +"ffd7cfc3": "BonusPaidDate(address,uint256)", +"ffd7d66d": "quotationData()", +"ffd7f770": "add(uint256,address,uint256,uint256,uint256,uint256)", +"ffd7f7ab": "totalearnedtrx()", +"ffd824ac": "calcDistAmt()", +"ffd82d21": "multiConfirm(uint256[])", +"ffd832c1": "_initReward()", "ffd85b68": "setControllerDelegate(address)", "ffd864d3": "chief()", +"ffd8720c": "releaseOption(address,uint256,uint256)", +"ffd8d9ae": "claimTimes(uint256,uint256)", +"ffd9881b": "getBookData(address)", "ffd9ca40": "register(bytes20,uint64,bytes)", +"ffd9cc35": "startRebalance(address,address,uint256,bytes)", "ffda0a37": "settleInterest()", "ffdaa1b8": "TokenWithdraw(address,uint256,address,uint256)", "ffdab909": "removeEntry(uint256)", "ffdb0eb3": "getXRateProviderLength()", +"ffdb522d": "getLastAllocated()", +"ffdbaeec": "addServerAddress(address)", "ffdcf095": "transferWithNarrative(address,uint256,string)", "ffdd108b": "addEvent(uint256,string)", "ffdd5cf1": "getInfo(address)", +"ffddfc8c": "TournamentFinished(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"ffde0891": "lockTimeEpochs()", "ffde0c74": "getGameState(uint256)", +"ffde18d7": "setApp(bytes32)", "ffde8eae": "dismissBunner(address)", +"ffdeb903": "updateTokenSalePrice(uint256)", +"ffded210": "setMetadataOf(uint256,string,string,string,string)", +"ffe00a7f": "setGlobalWhitelist(bool)", +"ffe03c2a": "ClaimRoomba()", +"ffe067db": "exitLp()", "ffe0a9f2": "contractSymbolUpdate(string,bool)", +"ffe0ccbc": "returnPayments()", "ffe0fa66": "CarRegistry()", "ffe189ef": "prev(uint80)", "ffe280ee": "setWeight(uint256,uint256,bytes)", +"ffe284f5": "set_new_UniSwapAddLiquityV2_GeneralAddress(address)", +"ffe2c2d4": "rainmaker()", "ffe2d77e": "directorLock()", +"ffe2e9f2": "newSurvey(string,uint256)", "ffe302d1": "setPlz(string)", "ffe34512": "getNumChannels(address)", +"ffe3aa7e": "addToWhitelist(address,bytes32)", "ffe3acc7": "changeGeneralSaleStartDate(uint256)", +"ffe3b33b": "CancelBuy(address,uint256,uint256,uint256,uint256)", "ffe3c6fd": "zKill()", +"ffe439af": "unisocks()", "ffe45b14": "getHTLCInvalidationTimeoutExtension(uint256,int256,bytes32,bytes32)", +"ffe46312": "changeBuyingWETHTokenFee(uint16)", "ffe48c76": "getBCDTRateForCurrentRound()", "ffe4914a": "hdivide(uint256,uint256)", "ffe496f2": "setMarginSpend(uint256)", +"ffe4a0d7": "airdropToMany(address[],uint256[])", "ffe4fe4c": "roundFor(uint256)", "ffe55303": "unfreezeCreditScore(uint256,string)", +"ffe5598e": "refundCaller()", "ffe5725f": "create(address,address,uint256)", "ffe575b1": "Daxther()", "ffe57c16": "byuoutActive()", +"ffe58a37": "adminFeePrct()", +"ffe59794": "RegisterationOpened(uint256)", "ffe619df": "buyPixelToken(uint24,uint256,uint24)", "ffe648d4": "releaseAllOnceLock(address)", +"ffe6722d": "draftAliceToken(uint256,uint256)", +"ffe6a18e": "getReputation()", "ffe6bbd8": "myEarnings()", +"ffe6d8a9": "depositInternal(address,uint256,uint256)", +"ffe73e24": "fnxBalanceInUniswap(address)", "ffe8ee35": "SetDivTime(uint256)", "ffe90ba6": "offsetIndex()", "ffe94af0": "burnPass(bytes32,address)", +"ffe97dd5": "onGameCreated(uint256,uint256)", "ffe99ca7": "getCitiesStrings(uint256[])", "ffea632b": "initialize(address,address,uint8,address)", +"ffea853b": "ProposalCreatedAtIndex(uint256)", "ffeb7d75": "setUpgradeMaster(address)", +"ffebebfb": "Swap(address,address,address,uint256)", +"ffec332e": "TokensWagered(address,uint256)", "ffec34e3": "TokenMintPoD(int256)", +"ffec41de": "changeSwitch(bool)", +"ffecd95e": "address0()", "ffecf516": "addBot(address)", "ffed6ed7": "buyAd(uint8,uint8)", +"ffedc0c8": "test_swap_exactOut_zeroForOne(uint128)", "ffeddd49": "addPolicy(bytes32,uint32,uint32,uint256,string)", +"ffee0cbb": "convert(uint256,bytes32,bytes32)", +"ffee6dda": "teamBonusGain(uint256,uint256)", +"ffee770f": "swapExactETHForTokens(uint256,address,uint256)", +"ffee7c37": "VerifiedFunds(address,bool)", "ffee7c97": "getBookLength()", "ffeea273": "withdrawWallet2()", "ffeeac82": "info_Name()", +"ffeec237": "upgradePreparationActivationTime()", "ffeecfaa": "Log1(address,bytes32,uint256,string,string,uint256,bytes1)", +"ffef151b": "lastProvideTm(address)", "ffef2b00": "SortCompetitionScores(uint32)", "ffef8f88": "Share(uint256)", "ffef9b3c": "_checkMaxRoundSupply(uint256)", +"fff00741": "setMintAble(address)", "fff04a87": "test_invalidBalanceNotZero()", "fff07241": "playerExist(address)", +"fff0c5f6": "setContractZethyrSwapMemory(address)", +"fff0d190": "updateLockWaitTime(bytes32,uint256)", "fff10aba": "getEventsHistory()", +"fff218c3": "productRegistry()", +"fff2206b": "BondPayoutsBondIDGetAt(address,uint256)", "fff28137": "reclaimToken()", "fff311b1": "ownerSetjackpotContract(address)", +"fff31ae0": "bettorsBlue(uint256)", "fff35670": "icoLaunchTimestamp()", "fff3a01b": "transfer(address,string,uint256)", "fff3ad33": "getAddTokenDataTracking()", "fff3c457": "readMessages(uint256)", "fff43b4e": "_setBurnPool(uint256)", +"fff4791d": "plister(uint256)", +"fff4cb74": "setErc20PerBlock(uint256)", +"fff505d5": "updateMinPercentIncrease(uint8)", +"fff56a33": "allowedPaymentMethod(uint8)", "fff57ba3": "withdrawSettle(bytes32,bytes32,bytes32)", "fff57fe1": "claimableOCDividend(address,address)", +"fff5d88c": "_encode_enum(int64,uint256,bytes)", +"fff5daef": "updateAPR(uint256,address)", +"fff5ea94": "profitRatio()", +"fff62b11": "claimRewardsOnlyAndWithDraw(address)", +"fff689dd": "getIds(address,address)", +"fff68d7a": "nigfag(uint256)", "fff6a540": "LongBCoin(uint256,string,uint8,string)", +"fff6cae9": "sync()", "fff6fb54": "TTOH()", +"fff71586": "_prop()", "fff78f9c": "doThrow()", "fff7a97e": "addWallet(address,address)", +"fff8068f": "onReward(address,uint8,uint256)", "fff83edf": "founderAmounts(uint256)", "fff85d49": "addChunk1ToWhiteList()", "fff8d42b": "phase2StartingAt()", @@ -146828,16 +268593,31 @@ "fff95ce3": "getIsPoop()", "fff9627d": "PRESALE_VAULT_START()", "fff9d5b9": "confirmProofOfWork(uint256)", +"fff9f2e8": "_getSubscriptions()", "fffa932b": "withdrowTo(address)", "fffa9d0c": "setGood(bytes32,uint256,uint256)", +"fffb1021": "getUSDPCurPriceOfLUCAX(uint256)", "fffb5183": "initialize(uint256,address,uint256)", +"fffb740a": "tradeMiningEndBlockNum()", +"fffc90ee": "EthPerRtcUpdated(uint256)", +"fffcc2c8": "burnToken_()", "fffcde7c": "EOSINT()", "fffce84f": "bountyFreeze(address,bool)", +"fffd483f": "venusToWantRoute(uint256)", "fffd52c6": "reading()", "fffda870": "lastHorseSex()", +"fffdb6a0": "repayBorrow(address,address,address,uint256,uint256)", "fffdbe2c": "frozenTokensSupply()", "fffe088d": "saleAddress()", +"fffe123f": "searchPayments()", +"fffe201e": "changeWalletTo(address)", +"fffe42e9": "receiveAddress()", +"fffeaf60": "totalFeesWithdrawn()", "fffeb1ca": "externalCheckSignBool(bytes32,bytes,address)", +"fffed380": "highestBidFromRound(uint256)", +"fffef9d9": "addressRecipient()", +"ffff51d6": "transferableSynths(address)", "ffff6b04": "vestingSchedule(address)", -"ffffce47": "exchangeRateOracle()" -} \ No newline at end of file +"ffffce47": "exchangeRateOracle()", +"ffffffff": "test266151307()" +} diff --git a/signer/fourbyte/abi.go b/signer/fourbyte/abi.go index 5ca5d914..352abc59 100644 --- a/signer/fourbyte/abi.go +++ b/signer/fourbyte/abi.go @@ -20,11 +20,10 @@ import ( "bytes" "encoding/json" "fmt" - "regexp" "strings" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" + "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 @@ -75,47 +74,20 @@ func verifySelector(selector string, calldata []byte) (*decodedCallData, error) 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)) +func parseSelector(unescapedSelector string) ([]byte, error) { + selector, err := abi.ParseSelector(unescapedSelector) + if err != nil { + return nil, fmt.Errorf("failed to parse selector: %v", err) } - 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}}) + return json.Marshal([]abi.SelectorMarshaling{selector}) } // 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) { +func parseCallData(calldata []byte, unescapedAbidata 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)) @@ -127,9 +99,9 @@ func parseCallData(calldata []byte, abidata string) (*decodedCallData, error) { 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)) + abispec, err := abi.JSON(strings.NewReader(unescapedAbidata)) if err != nil { - return nil, fmt.Errorf("invalid method signature (%s): %v", abidata, err) + return nil, fmt.Errorf("invalid method signature (%q): %v", unescapedAbidata, err) } method, err := abispec.MethodById(sigdata) if err != nil { @@ -137,10 +109,10 @@ func parseCallData(calldata []byte, abidata string) (*decodedCallData, error) { } values, err := method.Inputs.UnpackValues(argdata) if err != nil { - return nil, err + return nil, fmt.Errorf("signature %q matches, but arguments mismatch: %v", method.String(), err) } // Everything valid, assemble the call infos for the signer - decoded := decodedCallData{signature: method.Sig(), name: method.RawName} + 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], @@ -158,7 +130,7 @@ func parseCallData(calldata []byte, abidata string) (*decodedCallData, error) { 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 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/fourbyte/abi_test.go b/signer/fourbyte/abi_test.go index 1a345a6c..68c027ec 100644 --- a/signer/fourbyte/abi_test.go +++ b/signer/fourbyte/abi_test.go @@ -22,8 +22,8 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" ) func verify(t *testing.T, jsondata, calldata string, exp []interface{}) { @@ -68,7 +68,7 @@ func TestNewUnpacker(t *testing.T) { [10]byte{49, 50, 51, 52, 53, 54, 55, 56, 57, 48}, common.Hex2Bytes("48656c6c6f2c20776f726c6421"), }, - }, { // https://github.com/Onther-Tech/wiki/wiki/Ethereum-Contract-ABI#examples + }, { // https://docs.soliditylang.org/en/develop/abi-spec.html#examples `[{"type":"function","name":"sam","inputs":[{"type":"bytes"},{"type":"bool"},{"type":"uint256[]"}]}]`, // "dave", true and [1,2,3] "a5643bf20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000464617665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", @@ -124,7 +124,7 @@ func TestCalldataDecoding(t *testing.T) { "42958b5400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000042", // Too short compareAndApprove "a52c101e00ff0000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000042", - // From https://github.com/Onther-Tech/wiki/wiki/Ethereum-Contract-ABI + // From https://docs.soliditylang.org/en/develop/abi-spec.html // contains a bool with illegal values "a5643bf20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000464617665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", } { @@ -135,7 +135,7 @@ func TestCalldataDecoding(t *testing.T) { } // Expected success for i, hexdata := range []string{ - // From https://github.com/Onther-Tech/wiki/wiki/Ethereum-Contract-ABI + // From https://docs.soliditylang.org/en/develop/abi-spec.html "a5643bf20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000464617665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", "a52c101e0000000000000000000000000000000000000000000000000000000000000012", "a52c101eFFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", diff --git a/signer/fourbyte/fourbyte.go b/signer/fourbyte/fourbyte.go index 01988dca..f2256a28 100644 --- a/signer/fourbyte/fourbyte.go +++ b/signer/fourbyte/fourbyte.go @@ -14,21 +14,20 @@ // 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 ( + _ "embed" "encoding/hex" "encoding/json" "fmt" - "io/ioutil" "os" ) +//go:embed 4byte.json +var embeddedJSON []byte + // 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 { @@ -77,16 +76,13 @@ 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 { + if err := json.Unmarshal(embeddedJSON, &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 { + var blob []byte + if blob, err = os.ReadFile(path); err != nil { return nil, err } if err := json.Unmarshal(blob, &db.custom); err != nil { @@ -140,5 +136,5 @@ func (db *Database) AddSelector(selector string, data []byte) error { if err != nil { return err } - return ioutil.WriteFile(db.customPath, blob, 0600) + return os.WriteFile(db.customPath, blob, 0600) } diff --git a/signer/fourbyte/fourbyte_test.go b/signer/fourbyte/fourbyte_test.go index 89870ed8..017001f9 100644 --- a/signer/fourbyte/fourbyte_test.go +++ b/signer/fourbyte/fourbyte_test.go @@ -18,12 +18,11 @@ package fourbyte import ( "fmt" - "io/ioutil" "strings" "testing" - "github.com/cryptoecc/ETH-ECC/accounts/abi" - "github.com/cryptoecc/ETH-ECC/common" + "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. @@ -48,8 +47,8 @@ func TestEmbeddedDatabase(t *testing.T) { 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) + if m.Sig != selector { + t.Errorf("Selector mismatch: have %v, want %v", m.Sig, selector) } } } @@ -57,10 +56,7 @@ func TestEmbeddedDatabase(t *testing.T) { // 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) - } + tmpdir := t.TempDir() filename := fmt.Sprintf("%s/4byte_custom.json", tmpdir) db, err := NewWithFile(filename) diff --git a/signer/fourbyte/validation.go b/signer/fourbyte/validation.go index cf72f56f..58111e8e 100644 --- a/signer/fourbyte/validation.go +++ b/signer/fourbyte/validation.go @@ -22,15 +22,15 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/signer/core" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) // 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) +func (db *Database) ValidateTransaction(selector *string, tx *apitypes.SendTxArgs) (*apitypes.ValidationMessages, error) { + messages := new(apitypes.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) { @@ -49,7 +49,7 @@ func (db *Database) ValidateTransaction(selector *string, tx *core.SendTxArgs) ( 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/cryptoecc/ETH-ECC/issues/16106. + // 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 { @@ -73,14 +73,24 @@ func (db *Database) ValidateTransaction(selector *string, tx *core.SendTxArgs) ( if bytes.Equal(tx.To.Address().Bytes(), common.Address{}.Bytes()) { messages.Crit("Transaction recipient is the zero address") } + switch { + case tx.GasPrice == nil && tx.MaxFeePerGas == nil: + messages.Crit("Neither 'gasPrice' nor 'maxFeePerGas' specified.") + case tx.GasPrice == nil && tx.MaxPriorityFeePerGas == nil: + messages.Crit("Neither 'gasPrice' nor 'maxPriorityFeePerGas' specified.") + case tx.GasPrice != nil && tx.MaxFeePerGas != nil: + messages.Crit("Both 'gasPrice' and 'maxFeePerGas' specified.") + case tx.GasPrice != nil && tx.MaxPriorityFeePerGas != nil: + messages.Crit("Both 'gasPrice' and 'maxPriorityFeePerGas' specified.") + } // Semantic fields validated, try to make heads or tails of the call data - db.validateCallData(selector, data, messages) + db.ValidateCallData(selector, data, messages) return messages, nil } -// validateCallData checks if the ABI call-data + method selector (if given) can +// 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) { +func (db *Database) ValidateCallData(selector *string, data []byte, messages *apitypes.ValidationMessages) { // If the data is empty, we have a plain value transfer, nothing more to do if len(data) == 0 { return @@ -98,7 +108,7 @@ func (db *Database) validateCallData(selector *string, data []byte, messages *co 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()) + messages.Info(fmt.Sprintf("Transaction invokes the following method: %q", info.String())) db.AddSelector(*selector, data[:4]) } return @@ -110,8 +120,8 @@ func (db *Database) validateCallData(selector *string, data []byte, messages *co 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)) + messages.Warn(fmt.Sprintf("Transaction contains data, but provided ABI signature could not be verified: %v", err)) } else { - messages.Info(info.String()) + messages.Info(fmt.Sprintf("Transaction invokes the following method: %q", info.String())) } } diff --git a/signer/fourbyte/validation_test.go b/signer/fourbyte/validation_test.go index ed471eb8..1b0ab507 100644 --- a/signer/fourbyte/validation_test.go +++ b/signer/fourbyte/validation_test.go @@ -20,23 +20,23 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/signer/core" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/signer/core/apitypes" ) 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)) + b := new(big.Int).SetBytes(common.FromHex(h)) return hexutil.Big(*b) } func toHexUint(h string) hexutil.Uint64 { - b := big.NewInt(0).SetBytes(common.FromHex(h)) + b := new(big.Int).SetBytes(common.FromHex(h)) return hexutil.Uint64(b.Uint64()) } -func dummyTxArgs(t txtestcase) *core.SendTxArgs { +func dummyTxArgs(t txtestcase) *apitypes.SendTxArgs { to, _ := mixAddr(t.to) from, _ := mixAddr(t.from) n := toHexUint(t.n) @@ -53,14 +53,13 @@ func dummyTxArgs(t txtestcase) *core.SendTxArgs { if t.i != "" { a := hexutil.Bytes(common.FromHex(t.i)) input = &a - } - return &core.SendTxArgs{ + return &apitypes.SendTxArgs{ From: *from, To: to, Value: value, Nonce: n, - GasPrice: gasPrice, + GasPrice: &gasPrice, Gas: gas, Data: data, Input: input, diff --git a/signer/rules/deps/bignumber.js b/signer/rules/deps/bignumber.js deleted file mode 100644 index 17c8851e..00000000 --- a/signer/rules/deps/bignumber.js +++ /dev/null @@ -1,4 +0,0 @@ -/* bignumber.js v2.0.3 https://github.com/MikeMcl/bignumber.js/LICENCE */ -/* modified by zelig to fix https://github.com/robertkrimen/otto#regular-expression-incompatibility */ -!function(e){"use strict";function n(e){function a(e,n){var t,r,i,o,u,s,f=this;if(!(f instanceof a))return j&&L(26,"constructor call without new",e),new a(e,n);if(null!=n&&H(n,2,64,M,"base")){if(n=0|n,s=e+"",10==n)return f=new a(e instanceof a?e:s),U(f,P+f.e+1,k);if((o="number"==typeof e)&&0*e!=0||!new RegExp("^-?"+(t="["+O.slice(0,n)+"]+")+"(?:\\."+t+")?$",37>n?"i":"").test(s))return g(f,s,o,n);o?(f.s=0>1/e?(s=s.slice(1),-1):1,j&&s.replace(/^0\.0*|\./,"").length>15&&L(M,b,e),o=!1):f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=D(s,10,n,f.s)}else{if(e instanceof a)return f.s=e.s,f.e=e.e,f.c=(e=e.c)?e.slice():e,void(M=0);if((o="number"==typeof e)&&0*e==0){if(f.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,i=e;i>=10;i/=10,r++);return f.e=r,f.c=[e],void(M=0)}s=e+""}else{if(!p.test(s=e+""))return g(f,s,o);f.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((r=s.indexOf("."))>-1&&(s=s.replace(".","")),(i=s.search(/e/i))>0?(0>r&&(r=i),r+=+s.slice(i+1),s=s.substring(0,i)):0>r&&(r=s.length),i=0;48===s.charCodeAt(i);i++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(i,u+1))if(u=s.length,o&&j&&u>15&&L(M,b,f.s*e),r=r-i-1,r>z)f.c=f.e=null;else if(G>r)f.c=[f.e=0];else{if(f.e=r,f.c=[],i=(r+1)%y,0>r&&(i+=y),u>i){for(i&&f.c.push(+s.slice(0,i)),u-=y;u>i;)f.c.push(+s.slice(i,i+=y));s=s.slice(i),i=y-s.length}else i-=u;for(;i--;s+="0");f.c.push(+s)}else f.c=[f.e=0];M=0}function D(e,n,t,i){var o,u,f,c,h,g,p,d=e.indexOf("."),m=P,w=k;for(37>t&&(e=e.toLowerCase()),d>=0&&(f=J,J=0,e=e.replace(".",""),p=new a(t),h=p.pow(e.length-d),J=f,p.c=s(l(r(h.c),h.e),10,n),p.e=p.c.length),g=s(e,t,n),u=f=g.length;0==g[--f];g.pop());if(!g[0])return"0";if(0>d?--u:(h.c=g,h.e=u,h.s=i,h=C(h,p,m,w,n),g=h.c,c=h.r,u=h.e),o=u+m+1,d=g[o],f=n/2,c=c||0>o||null!=g[o+1],c=4>w?(null!=d||c)&&(0==w||w==(h.s<0?3:2)):d>f||d==f&&(4==w||c||6==w&&1&g[o-1]||w==(h.s<0?8:7)),1>o||!g[0])e=c?l("1",-m):"0";else{if(g.length=o,c)for(--n;++g[--o]>n;)g[o]=0,o||(++u,g.unshift(1));for(f=g.length;!g[--f];);for(d=0,e="";f>=d;e+=O.charAt(g[d++]));e=l(e,u)}return e}function _(e,n,t,i){var o,u,s,c,h;if(t=null!=t&&H(t,0,8,i,v)?0|t:k,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)h=r(e.c),h=19==i||24==i&&B>=s?f(h,s):l(h,s);else if(e=U(new a(e),n,t),u=e.e,h=r(e.c),c=h.length,19==i||24==i&&(u>=n||B>=u)){for(;n>c;h+="0",c++);h=f(h,u)}else if(n-=s,h=l(h,u),u+1>c){if(--n>0)for(h+=".";n--;h+="0");}else if(n+=u-c,n>0)for(u+1==c&&(h+=".");n--;h+="0");return e.s<0&&o?"-"+h:h}function x(e,n){var t,r,i=0;for(u(e[0])&&(e=e[0]),t=new a(e[0]);++ie||e>t||e!=c(e))&&L(r,(i||"decimal places")+(n>e||e>t?" out of range":" not an integer"),e),!0}function I(e,n,t){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(t=r+t*y-1)>z?e.c=e.e=null:G>t?e.c=[e.e=0]:(e.e=t,e.c=n),e}function L(e,n,t){var r=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+n+": "+t);throw r.name="BigNumber Error",M=0,r}function U(e,n,t,r){var i,o,u,s,f,l,c,a=e.c,h=R;if(a){e:{for(i=1,s=a[0];s>=10;s/=10,i++);if(o=n-i,0>o)o+=y,u=n,f=a[l=0],c=f/h[i-u-1]%10|0;else if(l=d((o+1)/y),l>=a.length){if(!r)break e;for(;a.length<=l;a.push(0));f=c=0,i=1,o%=y,u=o-y+1}else{for(f=s=a[l],i=1;s>=10;s/=10,i++);o%=y,u=o-y+i,c=0>u?0:f/h[i-u-1]%10|0}if(r=r||0>n||null!=a[l+1]||(0>u?f:f%h[i-u-1]),r=4>t?(c||r)&&(0==t||t==(e.s<0?3:2)):c>5||5==c&&(4==t||r||6==t&&(o>0?u>0?f/h[i-u]:0:a[l-1])%10&1||t==(e.s<0?8:7)),1>n||!a[0])return a.length=0,r?(n-=e.e+1,a[0]=h[n%y],e.e=-n||0):a[0]=e.e=0,e;if(0==o?(a.length=l,s=1,l--):(a.length=l+1,s=h[y-o],a[l]=u>0?m(f/h[i-u]%h[u])*s:0),r)for(;;){if(0==l){for(o=1,u=a[0];u>=10;u/=10,o++);for(u=a[0]+=s,s=1;u>=10;u/=10,s++);o!=s&&(e.e++,a[0]==N&&(a[0]=1));break}if(a[l]+=s,a[l]!=N)break;a[l--]=0,s=1}for(o=a.length;0===a[--o];a.pop());}e.e>z?e.c=e.e=null:e.et?null!=(e=i[t++]):void 0};return f(n="DECIMAL_PLACES")&&H(e,0,E,2,n)&&(P=0|e),r[n]=P,f(n="ROUNDING_MODE")&&H(e,0,8,2,n)&&(k=0|e),r[n]=k,f(n="EXPONENTIAL_AT")&&(u(e)?H(e[0],-E,0,2,n)&&H(e[1],0,E,2,n)&&(B=0|e[0],$=0|e[1]):H(e,-E,E,2,n)&&(B=-($=0|(0>e?-e:e)))),r[n]=[B,$],f(n="RANGE")&&(u(e)?H(e[0],-E,-1,2,n)&&H(e[1],1,E,2,n)&&(G=0|e[0],z=0|e[1]):H(e,-E,E,2,n)&&(0|e?G=-(z=0|(0>e?-e:e)):j&&L(2,n+" cannot be zero",e))),r[n]=[G,z],f(n="ERRORS")&&(e===!!e||1===e||0===e?(M=0,H=(j=!!e)?F:o):j&&L(2,n+w,e)),r[n]=j,f(n="CRYPTO")&&(e===!!e||1===e||0===e?(V=!(!e||!h||"object"!=typeof h),e&&!V&&j&&L(2,"crypto unavailable",h)):j&&L(2,n+w,e)),r[n]=V,f(n="MODULO_MODE")&&H(e,0,9,2,n)&&(W=0|e),r[n]=W,f(n="POW_PRECISION")&&H(e,0,E,2,n)&&(J=0|e),r[n]=J,f(n="FORMAT")&&("object"==typeof e?X=e:j&&L(2,n+" not an object",e)),r[n]=X,r},a.max=function(){return x(arguments,T.lt)},a.min=function(){return x(arguments,T.gt)},a.random=function(){var e=9007199254740992,n=Math.random()*e&2097151?function(){return m(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var t,r,i,o,u,s=0,f=[],l=new a(q);if(e=null!=e&&H(e,0,E,14)?0|e:P,o=d(e/y),V)if(h&&h.getRandomValues){for(t=h.getRandomValues(new Uint32Array(o*=2));o>s;)u=131072*t[s]+(t[s+1]>>>11),u>=9e15?(r=h.getRandomValues(new Uint32Array(2)),t[s]=r[0],t[s+1]=r[1]):(f.push(u%1e14),s+=2);s=o/2}else if(h&&h.randomBytes){for(t=h.randomBytes(o*=7);o>s;)u=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6],u>=9e15?h.randomBytes(7).copy(t,s):(f.push(u%1e14),s+=7);s=o/7}else j&&L(14,"crypto unavailable",h);if(!s)for(;o>s;)u=n(),9e15>u&&(f[s++]=u%1e14);for(o=f[--s],e%=y,o&&e&&(u=R[y-e],f[s]=m(o/u)*u);0===f[s];f.pop(),s--);if(0>s)f=[i=0];else{for(i=-1;0===f[0];f.shift(),i-=y);for(s=1,u=f[0];u>=10;u/=10,s++);y>s&&(i-=y-s)}return l.e=i,l.c=f,l}}(),C=function(){function e(e,n,t){var r,i,o,u,s=0,f=e.length,l=n%A,c=n/A|0;for(e=e.slice();f--;)o=e[f]%A,u=e[f]/A|0,r=c*o+u*l,i=l*o+r%A*A+s,s=(i/t|0)+(r/A|0)+c*u,e[f]=i%t;return s&&e.unshift(s),e}function n(e,n,t,r){var i,o;if(t!=r)o=t>r?1:-1;else for(i=o=0;t>i;i++)if(e[i]!=n[i]){o=e[i]>n[i]?1:-1;break}return o}function r(e,n,t,r){for(var i=0;t--;)e[t]-=i,i=e[t]1;e.shift());}return function(i,o,u,s,f){var l,c,h,g,p,d,w,v,b,O,S,R,A,E,D,_,x,F=i.s==o.s?1:-1,I=i.c,L=o.c;if(!(I&&I[0]&&L&&L[0]))return new a(i.s&&o.s&&(I?!L||I[0]!=L[0]:L)?I&&0==I[0]||!L?0*F:F/0:0/0);for(v=new a(F),b=v.c=[],c=i.e-o.e,F=u+c+1,f||(f=N,c=t(i.e/y)-t(o.e/y),F=F/y|0),h=0;L[h]==(I[h]||0);h++);if(L[h]>(I[h]||0)&&c--,0>F)b.push(1),g=!0;else{for(E=I.length,_=L.length,h=0,F+=2,p=m(f/(L[0]+1)),p>1&&(L=e(L,p,f),I=e(I,p,f),_=L.length,E=I.length),A=_,O=I.slice(0,_),S=O.length;_>S;O[S++]=0);x=L.slice(),x.unshift(0),D=L[0],L[1]>=f/2&&D++;do p=0,l=n(L,O,_,S),0>l?(R=O[0],_!=S&&(R=R*f+(O[1]||0)),p=m(R/D),p>1?(p>=f&&(p=f-1),d=e(L,p,f),w=d.length,S=O.length,l=n(d,O,w,S),1==l&&(p--,r(d,w>_?x:L,w,f))):(0==p&&(l=p=1),d=L.slice()),w=d.length,S>w&&d.unshift(0),r(O,d,S,f),-1==l&&(S=O.length,l=n(L,O,_,S),1>l&&(p++,r(O,S>_?x:L,S,f))),S=O.length):0===l&&(p++,O=[0]),b[h++]=p,l&&O[0]?O[S++]=I[A]||0:(O=[I[A]],S=1);while((A++=10;F/=10,h++);U(v,u+(v.e=h+c*y-1)+1,s,g)}else v.e=c,v.r=+g;return v}}(),g=function(){var e=/^(-?)0([xbo])(\w[\w.]*$)/i,n=/^([^.]+)\.$/,t=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,i=/^\s*\+([\w.])|^\s+|\s+$/g;return function(o,u,s,f){var l,c=s?u:u.replace(i,"$1");if(r.test(c))o.s=isNaN(c)?null:0>c?-1:1;else{if(!s&&(c=c.replace(e,function(e,n,t){return l="x"==(t=t.toLowerCase())?16:"b"==t?2:8,f&&f!=l?e:n}),f&&(l=f,c=c.replace(n,"$1").replace(t,"0.$1")),u!=c))return new a(c,l);j&&L(M,"not a"+(f?" base "+f:"")+" number",u),o.s=null}o.c=o.e=null,M=0}}(),T.absoluteValue=T.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},T.ceil=function(){return U(new a(this),this.e+1,2)},T.comparedTo=T.cmp=function(e,n){return M=1,i(this,new a(e,n))},T.decimalPlaces=T.dp=function(){var e,n,r=this.c;if(!r)return null;if(e=((n=r.length-1)-t(this.e/y))*y,n=r[n])for(;n%10==0;n/=10,e--);return 0>e&&(e=0),e},T.dividedBy=T.div=function(e,n){return M=3,C(this,new a(e,n),P,k)},T.dividedToIntegerBy=T.divToInt=function(e,n){return M=4,C(this,new a(e,n),0,1)},T.equals=T.eq=function(e,n){return M=5,0===i(this,new a(e,n))},T.floor=function(){return U(new a(this),this.e+1,3)},T.greaterThan=T.gt=function(e,n){return M=6,i(this,new a(e,n))>0},T.greaterThanOrEqualTo=T.gte=function(e,n){return M=7,1===(n=i(this,new a(e,n)))||0===n},T.isFinite=function(){return!!this.c},T.isInteger=T.isInt=function(){return!!this.c&&t(this.e/y)>this.c.length-2},T.isNaN=function(){return!this.s},T.isNegative=T.isNeg=function(){return this.s<0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.lessThan=T.lt=function(e,n){return M=8,i(this,new a(e,n))<0},T.lessThanOrEqualTo=T.lte=function(e,n){return M=9,-1===(n=i(this,new a(e,n)))||0===n},T.minus=T.sub=function(e,n){var r,i,o,u,s=this,f=s.s;if(M=10,e=new a(e,n),n=e.s,!f||!n)return new a(0/0);if(f!=n)return e.s=-n,s.plus(e);var l=s.e/y,c=e.e/y,h=s.c,g=e.c;if(!l||!c){if(!h||!g)return h?(e.s=-n,e):new a(g?s:0/0);if(!h[0]||!g[0])return g[0]?(e.s=-n,e):new a(h[0]?s:3==k?-0:0)}if(l=t(l),c=t(c),h=h.slice(),f=l-c){for((u=0>f)?(f=-f,o=h):(c=l,o=g),o.reverse(),n=f;n--;o.push(0));o.reverse()}else for(i=(u=(f=h.length)<(n=g.length))?f:n,f=n=0;i>n;n++)if(h[n]!=g[n]){u=h[n]0)for(;n--;h[r++]=0);for(n=N-1;i>f;){if(h[--i]0?(s=u,r=l):(o=-o,r=f),r.reverse();o--;r.push(0));r.reverse()}for(o=f.length,n=l.length,0>o-n&&(r=l,l=f,f=r,n=o),o=0;n;)o=(f[--n]=f[n]+l[n]+o)/N|0,f[n]%=N;return o&&(f.unshift(o),++s),I(e,f,s)},T.precision=T.sd=function(e){var n,t,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(j&&L(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(t=i.length-1,n=t*y+1,t=i[t]){for(;t%10==0;t/=10,n--);for(t=i[0];t>=10;t/=10,n++);}return e&&r.e+1>n&&(n=r.e+1),n},T.round=function(e,n){var t=new a(this);return(null==e||H(e,0,E,15))&&U(t,~~e+this.e+1,null!=n&&H(n,0,8,15,v)?0|n:k),t},T.shift=function(e){var n=this;return H(e,-S,S,16,"argument")?n.times("1e"+c(e)):new a(n.c&&n.c[0]&&(-S>e||e>S)?n.s*(0>e?0:1/0):n)},T.squareRoot=T.sqrt=function(){var e,n,i,o,u,s=this,f=s.c,l=s.s,c=s.e,h=P+4,g=new a("0.5");if(1!==l||!f||!f[0])return new a(!l||0>l&&(!f||f[0])?0/0:f?s:1/0);if(l=Math.sqrt(+s),0==l||l==1/0?(n=r(f),(n.length+c)%2==0&&(n+="0"),l=Math.sqrt(n),c=t((c+1)/2)-(0>c||c%2),l==1/0?n="1e"+c:(n=l.toExponential(),n=n.slice(0,n.indexOf("e")+1)+c),i=new a(n)):i=new a(l+""),i.c[0])for(c=i.e,l=c+h,3>l&&(l=0);;)if(u=i,i=g.times(u.plus(C(s,u,h,1))),r(u.c).slice(0,l)===(n=r(i.c)).slice(0,l)){if(i.el&&(m=O,O=S,S=m,o=l,l=g,g=o),o=l+g,m=[];o--;m.push(0));for(w=N,v=A,o=g;--o>=0;){for(r=0,p=S[o]%v,d=S[o]/v|0,s=l,u=o+s;u>o;)c=O[--s]%v,h=O[s]/v|0,f=d*c+h*p,c=p*c+f%v*v+m[u]+r,r=(c/w|0)+(f/v|0)+d*h,m[u--]=c%w;m[u]=r}return r?++i:m.shift(),I(e,m,i)},T.toDigits=function(e,n){var t=new a(this);return e=null!=e&&H(e,1,E,18,"precision")?0|e:null,n=null!=n&&H(n,0,8,18,v)?0|n:k,e?U(t,e,n):t},T.toExponential=function(e,n){return _(this,null!=e&&H(e,0,E,19)?~~e+1:null,n,19)},T.toFixed=function(e,n){return _(this,null!=e&&H(e,0,E,20)?~~e+this.e+1:null,n,20)},T.toFormat=function(e,n){var t=_(this,null!=e&&H(e,0,E,21)?~~e+this.e+1:null,n,21);if(this.c){var r,i=t.split("."),o=+X.groupSize,u=+X.secondaryGroupSize,s=X.groupSeparator,f=i[0],l=i[1],c=this.s<0,a=c?f.slice(1):f,h=a.length;if(u&&(r=o,o=u,u=r,h-=r),o>0&&h>0){for(r=h%o||o,f=a.substr(0,r);h>r;r+=o)f+=s+a.substr(r,o);u>0&&(f+=s+a.slice(r)),c&&(f="-"+f)}t=l?f+X.decimalSeparator+((u=+X.fractionGroupSize)?l.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+X.fractionGroupSeparator):l):f}return t},T.toFraction=function(e){var n,t,i,o,u,s,f,l,c,h=j,g=this,p=g.c,d=new a(q),m=t=new a(q),w=f=new a(q);if(null!=e&&(j=!1,s=new a(e),j=h,(!(h=s.isInt())||s.lt(q))&&(j&&L(22,"max denominator "+(h?"out of range":"not an integer"),e),e=!h&&s.c&&U(s,s.e+1,1).gte(q)?s:null)),!p)return g.toString();for(c=r(p),o=d.e=c.length-g.e-1,d.c[0]=R[(u=o%y)<0?y+u:u],e=!e||s.cmp(d)>0?o>0?d:m:s,u=z,z=1/0,s=new a(c),f.c[0]=0;l=C(s,d,0,1),i=t.plus(l.times(w)),1!=i.cmp(e);)t=w,w=i,m=f.plus(l.times(i=m)),f=i,d=s.minus(l.times(i=d)),s=i;return i=C(e.minus(t),w,0,1),f=f.plus(i.times(m)),t=t.plus(i.times(w)),f.s=m.s=g.s,o*=2,n=C(m,w,o,k).minus(g).abs().cmp(C(f,t,o,k).minus(g).abs())<1?[m.toString(),w.toString()]:[f.toString(),t.toString()],z=u,n},T.toNumber=function(){var e=this;return+e||(e.s?0*e.s:0/0)},T.toPower=T.pow=function(e){var n,t,r=m(0>e?-e:+e),i=this;if(!H(e,-S,S,23,"exponent")&&(!isFinite(e)||r>S&&(e/=0)||parseFloat(e)!=e&&!(e=0/0)))return new a(Math.pow(+i,e));for(n=J?d(J/y+2):0,t=new a(q);;){if(r%2){if(t=t.times(i),!t.c)break;n&&t.c.length>n&&(t.c.length=n)}if(r=m(r/2),!r)break;i=i.times(i),n&&i.c&&i.c.length>n&&(i.c.length=n)}return 0>e&&(t=q.div(t)),n?U(t,J,k):t},T.toPrecision=function(e,n){return _(this,null!=e&&H(e,1,E,24,"precision")?0|e:null,n,24)},T.toString=function(e){var n,t=this,i=t.s,o=t.e;return null===o?i?(n="Infinity",0>i&&(n="-"+n)):n="NaN":(n=r(t.c),n=null!=e&&H(e,2,64,25,"base")?D(l(n,o),0|e,10,i):B>=o||o>=$?f(n,o):l(n,o),0>i&&t.c[0]&&(n="-"+n)),n},T.truncated=T.trunc=function(){return U(new a(this),this.e+1,1)},T.valueOf=T.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function t(e){var n=0|e;return e>0||e===n?n:n-1}function r(e){for(var n,t,r=1,i=e.length,o=e[0]+"";i>r;){for(n=e[r++]+"",t=y-n.length;t--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function i(e,n){var t,r,i=e.c,o=n.c,u=e.s,s=n.s,f=e.e,l=n.e;if(!u||!s)return null;if(t=i&&!i[0],r=o&&!o[0],t||r)return t?r?0:-s:u;if(u!=s)return u;if(t=0>u,r=f==l,!i||!o)return r?0:!i^t?1:-1;if(!r)return f>l^t?1:-1;for(s=(f=i.length)<(l=o.length)?f:l,u=0;s>u;u++)if(i[u]!=o[u])return i[u]>o[u]^t?1:-1;return f==l?0:f>l^t?1:-1}function o(e,n,t){return(e=c(e))>=n&&t>=e}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function s(e,n,t){for(var r,i,o=[0],u=0,s=e.length;s>u;){for(i=o.length;i--;o[i]*=n);for(o[r=0]+=O.indexOf(e.charAt(u++));rt-1&&(null==o[r+1]&&(o[r+1]=0),o[r+1]+=o[r]/t|0,o[r]%=t)}return o.reverse()}function f(e,n){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>n?"e":"e+")+n}function l(e,n){var t,r;if(0>n){for(r="0.";++n;r+="0");e=r+e}else if(t=e.length,++n>t){for(r="0",n-=t;--n;r+="0");e+=r}else t>n&&(e=e.slice(0,n)+"."+e.slice(n));return e}function c(e){return e=parseFloat(e),0>e?d(e):m(e)}var a,h,g,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d=Math.ceil,m=Math.floor,w=" not a boolean or binary digit",v="rounding mode",b="number type has more than 15 significant digits",O="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",N=1e14,y=14,S=9007199254740991,R=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],A=1e7,E=1e9;if(a=n(),"function"==typeof define&&define.amd)define(function(){return a});else if("undefined"!=typeof module&&module.exports){if(module.exports=a,!h)try{h=require("crypto")}catch(D){}}else e.BigNumber=a}(this); -//# sourceMappingURL=doc/bignumber.js.map diff --git a/signer/rules/deps/bindata.go b/signer/rules/deps/bindata.go deleted file mode 100644 index 0b27f451..00000000 --- a/signer/rules/deps/bindata.go +++ /dev/null @@ -1,235 +0,0 @@ -// Code generated by go-bindata. -// sources: -// bignumber.js -// DO NOT EDIT! - -package deps - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" -) - -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) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - clErr := gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - if clErr != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -type asset struct { - bytes []byte - info os.FileInfo -} - -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 -} - -var _bignumberJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xbc\x6b\x77\x9b\xc8\x93\x38\xfc\x7e\x3f\x85\xc4\xc6\x9c\x6e\x53\x20\x90\x9d\x38\x86\x14\x9c\x4c\x62\xe7\xe7\x79\x1c\x3b\x4f\x9c\xcc\xcc\xae\xa2\xc9\x91\x51\x23\x75\x82\x40\xe1\x62\xc7\x09\xfe\x7d\xf6\xff\xa9\x6e\x40\xf2\x25\xbb\xb3\x6f\x2c\xe8\x4b\x75\x75\x75\xdd\xbb\xf0\x68\x77\x70\x29\x17\x59\xbd\xba\x14\x85\xf3\xa5\x1c\x5c\x8d\x1d\xd7\xd9\x1b\x2c\xab\x6a\x5d\xfa\xa3\xd1\x42\x56\xcb\xfa\xd2\x89\xf3\xd5\xe8\xad\xfc\x2a\xde\xc6\xe9\x68\x7b\xf8\xe8\xf4\xe4\xd5\xd1\xd9\xab\xa3\xc1\xee\xe8\x3f\x46\xbb\x83\x55\x3e\x97\x89\x14\xf3\xc1\xe5\xcd\xe0\x87\x48\xe5\x62\x50\xe5\x83\x44\x7e\x7f\x0c\x5c\x91\x5f\x8a\xa2\xfa\x5a\xc8\x95\xc8\x46\x79\x55\xe5\xff\x59\x88\x45\x9d\xce\x0a\x5b\x7c\x5f\x17\xa2\x2c\x65\x9e\xd9\x32\x8b\xf3\xd5\x7a\x56\xc9\x4b\x99\xca\xea\x86\x96\x19\x26\x75\x16\x57\x32\xcf\x98\xe0\x3f\x8d\xba\x14\x83\xb2\x2a\x64\x5c\x19\x41\xd7\x31\x50\x5d\xfd\xdb\x8c\x09\xc8\xf8\xcf\xab\x59\x31\xa8\xa0\x00\x09\x39\xd4\x50\x42\x82\xd5\x52\x96\x81\x4c\xd8\x90\x25\x03\x99\x95\xd5\x2c\x8b\x45\x9e\x0c\x66\x9c\x17\xa2\xaa\x8b\x6c\xf0\xc5\x34\x4f\xd9\xf8\x19\x18\x71\x9e\x95\x55\x51\xc7\x55\x5e\x0c\xe2\x59\x9a\x0e\xae\x65\xb5\xcc\xeb\x6a\x90\x89\x6b\x03\x04\x87\x4c\x5c\xb7\xeb\x10\xc0\xac\x4e\xd3\x21\x66\xa6\xf9\x2f\x96\xc1\x18\x9e\xed\xc3\x5b\x30\x2e\x67\xa5\x30\x38\xff\x49\xfd\xe8\x36\x19\x94\x28\x2c\xc3\x00\xcf\x45\xcc\xba\x15\x13\x6c\x21\xdd\x41\x28\x12\x7e\xc9\xe1\x23\x4b\xe0\x9d\x95\x38\xc2\xf2\xe0\xab\x5a\x87\xe5\x68\xe8\xa3\x30\x10\xab\x9b\x35\x0d\x16\xdc\x34\xdd\x5d\x31\x44\xb7\x69\x86\x04\xec\xbd\x58\x1c\x7d\x5f\x33\xe3\x6f\x3b\x32\x2c\x56\xa1\x31\x31\xac\x73\xa7\x4c\x65\x2c\x98\x0b\x19\xb7\x8c\xa9\x65\x70\xcb\x60\x91\xff\xe9\x93\x63\x58\x95\x65\xf0\xe8\x89\x01\x7b\x07\x61\x16\x19\xd2\xf0\x0d\x83\x3b\x95\x28\x2b\x56\xf6\x84\x59\xb0\x04\x4a\xc8\x69\xbb\x79\xc4\x12\xa7\x44\x37\xf4\x46\x22\x62\x25\x96\x2d\x68\x8f\x83\xed\x71\xdf\x83\x2f\xa6\x59\x3a\x85\x58\xa7\xb3\x58\xb0\xd1\xdf\xee\x27\xc7\xdd\x6d\x3e\x39\x23\x20\xb8\xa9\xc8\x16\xd5\x32\xf4\x9e\x12\xa5\xdf\xc2\x25\xd1\x32\xc7\xa1\xc7\x7d\x02\xba\xff\x14\x11\x4b\x27\x5e\xce\x8a\x57\xf9\x5c\xbc\xac\x98\xcb\x1f\x5d\xa3\xc4\xd7\xac\x04\xcf\x85\x0c\x12\xa7\xe4\xb7\x22\x2d\x05\x11\xfa\x2e\x19\x7b\x22\x3b\x25\x0a\xa7\x84\xc4\x11\x28\x1c\x01\x89\x13\x23\xa3\xc7\x98\x47\xa2\x05\xcd\x7d\x01\x57\xb9\x9c\xb3\xb7\xe8\xfe\x6f\xb4\x46\x74\xd5\xb1\x6e\xd1\x41\xa0\x2d\x5a\xdc\x04\x22\xfe\xfb\xdf\xc4\x90\x79\xc1\x0a\x74\x41\xa2\x08\x64\x88\x9e\x1b\xc8\x11\x7a\x2e\x14\x96\xc5\x83\x1e\x35\x81\x85\x42\x68\x22\xa6\x1b\x04\x6e\x35\xaf\xf4\xfb\x1a\xae\xdb\x13\x51\xcd\xf7\x8f\x85\x07\xff\x17\xe2\xdd\xde\x12\x62\xac\xc0\xd2\x91\xd9\x5c\x7c\x3f\x4f\x98\xe1\x18\x9c\x87\xb6\x67\x9a\x6a\x7c\x77\x78\x86\x63\xd0\xa1\x71\x60\x92\xa0\x88\x59\x11\x2f\xd9\x48\x8c\x24\xe7\xa1\x1b\x31\x37\x2c\x4c\x93\x15\x28\x39\x14\x16\x5a\xdd\x3a\xd2\xf2\x38\xa8\x65\xeb\x4b\x92\xd4\x6c\xc1\x5c\x90\x9c\xfb\xdd\xf8\xb2\xe5\x02\x0e\x12\xdd\x60\xff\xf9\x7d\xb4\x25\x0f\x24\x91\x88\xd0\xac\xfb\xd1\x8f\x0c\xb4\xed\x9a\x07\xea\xb0\x36\xbb\x94\x50\x5b\x1e\xe7\x32\xd9\x9a\x0a\xb9\x69\x7e\x31\xcd\x7a\x8b\xed\x12\xa7\xdc\x15\x1c\x0a\x2c\x6c\x69\x7b\x50\x84\x3f\x38\x1d\x02\x1d\x07\x09\x73\x40\x84\x1f\xc8\x84\xbd\x09\x0b\xd5\x31\xa1\x1e\x77\x1a\x74\x07\xb2\x75\x6e\x53\x90\xc8\x0a\xcb\xe3\x3b\x37\xa0\xb7\x28\x2d\xbc\xe1\x50\x87\x52\xf3\x80\x34\xcd\xc4\x89\x9d\x75\x5d\x2e\x59\x4f\x25\x45\x12\xa8\x6d\xbc\x09\xea\x50\x06\xfc\xe1\x08\x09\x0a\x0e\x0f\xb6\x36\x47\x24\xbb\xb1\xbb\x7d\xdd\x6a\x2c\x6d\xac\x15\xad\x02\x69\xdb\x41\x69\xa1\xe1\x1a\xc4\x11\x3d\x3c\x2d\x1e\x83\xed\x6d\xbc\x45\xf7\xb6\xd7\x97\xaf\x49\x8f\x41\x05\x52\xeb\x4c\xd2\x96\x09\xc4\xb0\x84\x05\xac\x61\x8e\xe2\x0e\x9b\xc0\x0a\xdf\xc1\x35\x7e\x55\x2b\xee\x1d\x84\x95\x69\x2a\x51\xaa\xf2\xd3\xfc\x5a\x14\xaf\x66\xa5\x60\x9c\xc3\x3c\x44\xd7\x34\x59\x82\xbf\xc3\xef\xe8\x02\x8d\xb8\xc7\x55\xb0\x6e\x55\x5f\xc5\x61\x89\x6b\x67\x9d\x5f\x33\xd1\x6e\xcc\x9e\x73\xf8\x1d\x13\x58\x3b\x31\x96\x2c\x65\x05\x5b\x3a\x31\x87\xa5\x23\xb8\x12\x7a\x0e\x6b\x47\xe0\xda\x89\x7b\x4e\x5a\x60\xc9\x04\x54\xd4\x55\x63\x82\x8b\x8e\x69\x5c\xc4\xc5\xc4\xb6\x93\x69\xb0\x70\xd6\xf9\x9a\x71\xc5\x2e\xc3\xc5\xc4\x9d\xb6\x42\x64\xb8\x06\x35\xb9\xe1\x3c\xb2\xed\xda\xa7\x95\x70\x41\x4b\x61\x0d\x4b\xa7\x44\x09\x4b\x7c\xc5\x96\xb0\x86\x15\x5c\x13\xfc\x05\x2e\x9d\x18\x62\x5c\x3a\x05\xd4\xa8\x70\xca\xb1\xb6\x56\x96\x07\x73\x5c\x4c\xf2\x29\x24\x98\x8d\xc6\x10\x63\xdc\x34\x6e\x98\x37\x8d\x36\x0f\x8b\x49\x6e\x79\x53\x88\x71\x3f\xbc\x8e\x5a\x93\x31\x6f\x9a\x98\x9b\x26\x73\x11\xaf\x9b\xe6\x1a\x91\x2d\x9d\xf2\x85\x1b\xed\xf9\x63\xce\xfd\x79\x98\x34\xcd\x1c\x31\x31\x4d\xb6\xaf\x46\xc4\x4d\xf3\x0c\xf1\xda\x34\x3d\x73\x31\xc9\x6d\x6f\xba\x3d\xe9\xb9\x7f\xc0\x39\x78\xb4\xa2\xde\xa0\xc0\x38\x4a\x99\xe1\x19\x60\xaf\xb8\x4f\x1b\xed\xd8\xb7\xa3\x0f\xe6\x10\x73\x3a\x49\xdb\xce\x02\xcb\x22\x52\xe5\xd3\x30\x0b\x38\xed\x03\x5d\xc8\x9b\x86\x59\x56\x0d\x0b\xa7\xce\xca\xa5\x4c\x2a\xe6\x71\x2d\x98\x5b\x34\x1e\xb6\x14\xd6\x1d\x73\x75\xdc\x86\x11\x24\x21\xce\x03\x61\xe1\xb9\x12\xd9\x97\x15\x5b\x4c\xe6\x96\x35\xe5\x3c\x10\x98\x32\x01\x35\xbf\x6d\xd5\x98\xd8\xf0\xe2\xe7\x87\xbc\x58\x12\x2f\xd2\x11\x55\xa8\x89\x56\x91\x9d\xad\xc0\x85\xe7\x20\xe1\x8a\x47\x6e\x53\xf9\x5f\x61\x48\xea\xbc\x03\xe8\x54\xf9\x85\x56\x3d\xea\xbc\x73\xd2\xf5\x13\x77\x4a\x26\xd8\x11\x40\x60\xc8\x06\x2f\xb1\x60\x42\x31\x16\x7a\x87\x88\xb2\x69\xc6\xfb\x88\xd2\x34\x7f\x0b\xb1\x8c\x12\xb6\x84\x92\xfb\xa9\xfa\xe9\x15\x82\xc0\x8f\xac\x35\xd9\x9c\x30\x25\x7e\x23\x98\x3d\x2c\x62\x8c\x56\xed\xdc\x05\xca\xea\x10\xb3\xa6\xf9\x2d\xc4\x9a\x6b\xc5\x10\x64\x61\x1c\x2c\x95\xc0\x42\x4c\x1a\x6f\x89\xb4\x68\xdd\x0a\x2c\x39\x0e\x36\x96\xb0\xc4\x54\xb5\x92\x66\x0b\x63\x65\x79\x6c\x3b\x0b\x5d\x75\x70\x34\xdd\x31\x82\xcc\xb6\x5b\x48\x3c\xd8\xcc\xb6\xb0\xb6\x63\xe8\x86\xd6\x96\x87\x18\x9b\x66\x3b\x87\xdf\x99\xd4\x53\xae\x7c\xe1\x9a\x66\x1e\x19\xb6\x61\x2d\xfd\xe5\xe6\x64\xbe\xdf\xf3\xaa\xd0\xd5\x0a\x9a\x09\x62\x35\xad\x05\xe8\x09\xaa\xce\xa5\xa1\xb7\xc0\xb2\xe4\x8b\x4e\xac\x03\x85\x7b\xd1\xf7\xcb\x29\x87\x61\xe1\x94\xfc\x67\x85\x45\x70\x59\x88\xd9\xd7\xdb\xcc\x21\x7f\x8b\x55\x50\x10\xcc\x0a\x8b\x9e\x4b\xaa\x0d\x2e\xc7\x2d\x97\x14\xc4\x27\xba\x9b\x65\xa1\x68\x1a\x11\x56\x4d\x23\x86\x18\x33\xc1\x39\xe9\xfa\x02\x98\x6c\x1a\x63\x2e\x62\xb9\x9a\xa5\x03\xa5\x81\x4a\x83\x5b\xfd\xf0\xc8\x18\x90\x5f\x97\x27\x83\x62\x96\x2d\x84\xe1\x1b\x83\x2c\xaf\x06\xb3\x6c\x20\xb3\x4a\x2c\x44\x61\x70\xf2\x51\x86\x5b\xfa\xf2\x44\xaf\xae\xcf\x90\xe8\x51\xa0\x07\x12\xb3\x5e\x1e\xb2\x89\x6d\xcb\x69\x90\x75\x1a\x47\x19\x01\xcc\x26\xee\xf4\x57\x7e\x00\x6d\xd4\xaa\x76\x6f\x6c\x8f\x87\x3f\x22\xe1\xc4\xc4\x53\x8a\xdd\xfd\x37\x61\xa5\x1a\x26\x42\xa9\x6e\x9f\xd1\x6f\x05\xd4\x94\x71\xd8\x12\x9d\xd3\x0e\x2d\x8d\x12\x11\xf9\xa8\x28\xf2\x82\x4d\x0c\x7a\xfe\x4d\x2e\xce\xb4\x3b\x03\x46\xbc\x5a\x1b\xca\xc9\x4d\xe4\xc2\x00\x63\x2e\xaf\xf4\xdf\x0f\xf9\x49\x56\x19\x60\x88\x6f\x06\x18\x8b\x4a\xfd\x11\x06\x18\x69\xa5\xfe\xd0\xe3\x4a\x66\x75\x49\xbf\xf9\xdc\x00\x63\x9d\xaa\x97\x75\x21\x62\x49\xfe\xbb\x01\x46\x31\xcb\xe6\xf9\x8a\x1e\xf2\x3a\xa3\x31\x4a\x6f\x18\x60\x54\x72\x25\x68\x70\x95\xbf\x96\x0b\x59\xe9\xc7\xa3\xef\xeb\x3c\x13\x59\x25\x67\xa9\x7a\x3f\x96\xdf\xc5\x5c\x3f\xe5\xc5\x6a\x56\xe9\xc7\x62\xa6\xb6\x48\x2b\xe5\xd7\xaa\xe9\xdd\xd6\x8a\x9d\xac\x1b\x60\x6c\x36\x39\x9d\x88\xa9\x65\x30\x3e\x30\xac\xcc\x32\xfc\x81\x61\x55\x3c\xa8\x96\x45\x7e\x3d\x28\x9c\x6c\xb6\x12\xb8\x19\xac\xe9\x64\xc0\x5b\x74\xa1\xd8\x10\xf4\x63\xc7\x65\x9a\xa4\x7d\x1c\x01\x29\xc4\x30\x23\x95\x02\x4b\x7c\x4f\xfa\x65\xc6\x7f\x0a\x5f\xdb\x7a\x24\xe7\x74\x46\x47\x5d\xaa\xa3\x2e\xd5\x51\x2b\x7f\x46\x29\xa2\xcc\x96\xe0\x86\x39\xcf\x2d\xbc\x81\x1a\x33\x48\x70\x36\x49\xd1\x25\xc3\x90\x8c\x96\x13\x69\xd7\xb6\x37\xdd\xf1\xdc\xc6\xed\x75\x4e\x8a\x73\xc6\x72\xcb\xe3\xa3\x1b\x0e\x69\x88\xb3\xce\xec\x29\xd7\xb0\xe0\x4a\x72\x06\x42\x3b\x01\x5d\xe7\x0b\x4c\x83\x99\x76\x01\x5c\xe2\x41\x8c\x95\x2b\xea\x41\xbe\xa3\x56\xce\xed\x1b\xcb\xd3\x0e\xa6\xd6\xe7\x84\x76\x4a\xce\x8c\xf7\x10\xf5\xad\x39\x12\x62\x74\xc3\x3a\x72\xfd\x7b\xe8\xde\x2a\xd9\x2e\xc8\xe6\x65\x9d\xcd\x9b\x4d\x52\x8b\x8c\x14\xa3\x19\x89\x9f\xec\x74\x33\xc8\xf5\xda\x0f\xab\x88\xc5\x4d\x53\xb4\x16\xb0\x6a\x9a\x0a\x91\x89\x2d\x0b\x18\x87\x4f\x9b\xe6\xa9\xd6\x5a\xfb\x6a\x44\xa1\x2c\x20\x79\x1d\x79\xe8\x46\x75\xe8\x46\x2d\x1a\x53\xdf\xf5\x67\x93\x94\x60\xef\x78\xae\xe9\x6d\x03\xeb\x2c\x63\xd6\x34\xc3\xd9\xc6\xf4\x0f\x3a\x5a\xd1\xb9\x47\xa4\x6c\x85\x0a\xb6\x68\x08\x2e\x27\xd9\xce\xcd\x14\x48\xda\xec\xac\x69\x5c\xee\xab\x66\x25\x85\x20\x94\xcb\x80\x98\x47\xac\x87\x91\x42\x89\x1e\xa4\xb6\xcd\xfd\xad\x46\x8b\xf8\x61\x39\xb9\xb1\xf3\x29\x10\x7d\x91\x50\x5e\xb1\x0e\xe9\x9d\xe5\xa4\x9e\xf2\xdd\xd2\x77\x39\x14\x4a\x4b\x07\x5a\x4b\xba\x88\xa9\xd6\x30\x39\x7a\x50\x6b\x96\xaa\xd5\xb9\xd4\xea\x5c\xf2\x8d\x8b\x4c\x7d\x16\x96\xb4\xfe\x9d\x21\xa5\x3a\xba\x21\x96\xa4\x9d\x1d\x61\x59\x7a\x67\x78\x66\x9a\x4c\x3d\x91\x31\xd7\x6a\x97\x98\x78\x92\x2a\x28\xf4\x3b\xc4\x33\xcd\x55\x01\x91\xd4\x26\x57\xa0\x44\xef\x56\xa3\x33\xdb\x72\xae\x70\xa6\x5c\x06\xe2\x34\xad\xeb\x6e\x85\x23\xee\xab\x30\xe1\x88\x17\x6f\x14\x0e\xbd\x1a\xdb\xb2\xfd\x24\x5b\xaf\x94\xec\x7d\xc0\x99\xb3\x2e\xf2\x2a\xa7\x70\x0b\xbe\xb5\x76\xc2\xe3\xf0\x0e\xc7\x2e\x7c\xc5\x7d\xf8\x0d\xed\x03\x78\x82\x63\x0f\xde\xa0\xed\x89\x03\xf8\x81\xf4\xf7\x0b\x0e\x5d\xf8\x17\x1e\xc3\x1f\x38\xf4\xe0\x4f\xf4\xe0\x77\xf4\x5c\x17\xfe\xc2\x9f\xad\xe6\xbf\x10\xeb\x59\x31\xab\xf2\xc2\x27\xf7\x73\x51\xe4\xf5\x7a\xab\x09\xba\x26\xf9\x43\xf8\x7b\x50\x8a\x38\xcf\xe6\xb3\xe2\xe6\x4d\xdf\xe8\x42\xd2\x2a\xa1\x37\xf7\xe6\x0e\x8c\x7b\x5d\x6a\xf8\x6d\xd0\xb3\xd8\x2c\xcb\xab\xa5\x28\x30\x83\x99\xf3\xfe\xfc\xe3\xd9\xeb\xcf\x1f\xdf\xa1\xdb\xbf\xbc\x3e\xff\xf3\x0c\xbd\xfe\xf5\xd5\xd1\xc9\x29\x8e\xfb\xd7\xe3\xd3\xf3\xf3\xf7\xb8\xd7\xbf\xff\xeb\xe5\xe9\x31\xcd\xdf\xbf\xdb\xa2\x80\x3c\xbd\xdb\x76\xf4\xc7\xd1\x19\x3e\xbb\xdb\xa6\xa0\x1f\xdc\x6d\xd3\x4b\x3c\x87\x99\x73\xf4\xf1\xd5\xe9\xc9\x6b\x3c\x84\x99\xa3\x6d\x03\xf6\xa9\x17\xad\x02\x95\x3e\x24\x61\xc1\x9f\xb7\x20\x71\x56\x2c\xea\x95\xc8\x2a\xe2\x3c\x49\xee\x55\x42\xac\x66\xe4\x97\x5f\x44\x5c\x6d\xa2\xe6\x32\xda\x02\xd3\x92\xa5\x74\x96\xb3\xf2\xfc\x3a\x7b\x57\xe4\x6b\x51\x54\x37\x2c\xe3\x91\x56\x19\x4c\x60\x39\xc9\xa6\xdc\xa7\x60\x78\xe0\xde\xfa\x0f\x27\xcb\x2e\x8d\x50\x6d\xe6\xc8\x49\x45\xce\x65\x37\xab\x8f\xaf\x59\x86\xc6\xeb\xa3\x57\x27\x6f\x5f\x9e\x7e\x7e\x77\xfa\xf2\xd5\xd1\x85\xc1\xc9\x7f\x14\xe0\xc2\x11\x8c\x21\x23\xe5\xf3\x0e\xdd\x86\xa2\xc1\x49\x36\xc5\x77\xa0\xe6\x28\x02\x9d\x9c\xbd\xf9\xfc\xf6\xfc\xf5\xd1\x66\xca\xf3\x6e\xca\xd7\xad\x29\x5f\xf5\x94\xa3\xbf\xde\x9d\x9f\x1d\x9d\x7d\x38\x79\x79\xfa\xf9\xe5\x07\x9a\x43\xde\x11\x8f\xfe\xa5\x5c\x21\xb0\x8f\xc0\x6d\x67\x53\x8b\x37\xdd\xc6\xe0\x37\x02\x47\xa3\x9e\xa8\x07\x6f\xca\x7d\x5a\xd0\x3e\xda\x1e\x62\x33\xea\x65\x6e\x28\x22\x5b\xf8\x82\x73\xde\x22\x30\xf9\x0d\x9e\x4c\x5b\xbc\x5f\x9e\xbd\x39\x7a\x6c\x6d\xdb\xbb\xbb\xb8\xb7\x81\xfc\xa6\x5b\xfc\xc7\x2f\x17\x77\x1b\x11\xbd\x41\x9b\xfd\xb8\x8b\x80\xaf\x33\x66\x90\x59\xc6\x20\x9e\x65\xe4\x39\x5d\x8a\xc1\x0f\x51\xe4\x06\x88\x0d\x7a\x6f\xe0\x47\x8b\xde\xd1\xfb\xf7\xe7\xef\xd5\x11\x30\x81\x88\xc3\xa1\x68\x1a\x0f\x11\x45\xd3\x90\x36\x11\x11\x23\x45\xf0\x2f\x64\x5f\xa8\x8f\x47\xc7\x7e\xbe\xb5\xc8\x35\x01\xd5\x30\xbf\x68\x78\xaf\xde\xff\xd7\xbb\x0f\xe7\xff\x13\xbc\x3f\x70\xc8\xa8\x75\xb8\x6c\x9a\x8e\x35\x87\x1d\x6b\x2e\x39\x08\xd3\x1c\xfe\xa1\xf2\x03\xb4\x86\x11\x17\x37\xeb\x2a\x1f\xd4\xd9\xec\x6a\x26\xd3\xd9\x65\x2a\x0c\x58\xf2\xc7\x71\xf8\x43\xe3\xf0\xf6\xfc\xf5\xc7\xd3\xf3\x7b\x8c\x72\xd8\x51\xee\xcf\x2d\x46\xf9\x53\x4f\x78\x77\xfe\xe7\xe7\x77\xef\x8f\x5e\x9d\x5c\x9c\x9c\x9f\x3d\xc2\x8e\xbf\x6f\x4d\xf9\x5d\x4f\x39\x3e\x7f\xff\xb6\xe5\xa9\x07\xf2\x25\xa2\xbf\x50\x6c\x9f\x44\xeb\xc0\xb6\xe3\x36\xf8\xfe\x05\xc5\x2d\xcc\x9c\xd5\xec\x3b\x3e\x14\xaa\xef\x6c\x23\xce\x1f\x9c\xb4\xe2\x6a\xa8\xcc\xfe\xd7\xa1\x0b\x3d\x54\xfb\x7d\x0f\x34\x06\x1e\xba\xee\x81\x77\x78\x38\x7e\xba\x7f\xb0\xef\x1e\x1e\x8e\x21\xc3\xb7\xb3\x6a\xd9\x8e\x67\x7c\x57\x98\x63\xf7\xf0\xc0\x7b\xea\x3d\xa2\x26\x56\xec\xde\x58\xfe\x98\x3e\x78\xbe\xf7\xfc\xf9\x33\xf7\xf9\x2e\xf3\xdc\x83\xbd\x83\x7d\xef\xf9\x78\x7f\xf7\xce\xbc\xc6\xe5\x16\xeb\x46\xdd\xef\xd9\xe8\x8a\xad\x3c\xf3\xbd\xe4\x31\xba\x90\xe0\x64\x0a\x69\x6b\x93\xbe\x29\x6f\x4e\xb4\x01\xa9\xd8\x9c\xa0\xb7\x4f\xf1\xa8\xf0\xdf\x41\x8e\x73\x26\xc8\x61\xfb\x83\xcb\x84\x2d\x4d\x73\xe9\x2c\x44\xf5\x5e\xad\xfb\xc7\x2c\xad\x45\xa9\xcd\x7b\x85\x0f\x3a\x54\x80\xf9\x51\x66\xd5\xde\xf8\x65\x51\xcc\x6e\x58\xbe\x8b\x63\xce\x83\x3c\x2c\x03\x5e\xa3\xb7\xe7\xb9\x07\xe3\xdd\x6a\x52\x4e\x2d\x56\x4d\x4a\xcb\x9b\x86\x61\xe8\x79\x1c\xea\x10\x0f\x85\xf7\x34\x62\xc5\x3f\x00\x3a\xe6\x1c\x08\x06\x16\x24\xfa\x1a\x0e\x16\x4a\xfa\x59\xa2\x1d\xc7\x7a\xc7\x13\xde\x3e\x87\xd2\xc2\x31\x0f\x4a\xcc\x47\xe3\x3e\xb8\x54\x3b\xd2\x64\xfc\xed\xa6\xda\xde\xcd\x56\x23\x61\x7e\xd0\x23\x3e\x7e\xee\xed\x1f\xec\x1f\x1e\x3c\x3b\xf0\xdc\x67\x4f\x9f\xed\xb2\x3d\xcf\x24\x0c\xb8\xe5\xb9\x87\x87\x4f\x3d\xef\xd9\xf8\xe0\xe0\xe0\xd9\xae\xc6\xc5\xda\x1f\x1f\xee\x1f\x3e\x3b\x18\x1f\xea\x96\xf1\xd4\xf2\x9e\x1d\x1c\x1c\x8c\x3d\xfd\xbe\xd7\xee\x7e\x7f\xfa\xe2\x85\xf7\x8c\xeb\x97\xa7\xd3\x17\x2f\x9e\x73\x8b\x1e\x9f\x4d\x7b\x7a\xdc\xc5\xe9\x80\x3b\x71\xbe\xbe\x61\x15\x85\xf7\x8f\x6c\xf5\x40\x6f\xf5\x40\x6f\x55\xc9\x95\xb7\xff\x2b\xcd\xa0\xd2\x49\xa5\xf6\xdc\xda\x6d\x66\x8c\x03\x2d\x1b\xd6\xa6\xc9\x92\x49\x69\x59\x53\x6c\xc1\x07\xda\x83\x4a\x26\xb6\x5d\x4e\x41\x90\x57\x9d\x9b\xa6\x20\x6d\x8d\xef\x27\x37\xb6\x98\x42\x42\x47\xb2\x62\xf9\xa8\xe6\xbb\x35\x57\x3e\x16\x35\x05\x89\xf6\xb0\xa0\xb4\x6d\xae\x13\x56\x25\x4f\x70\x22\xfb\xac\xa4\x0e\x3f\x6c\xaf\x9d\xe2\xd2\x14\x9d\xb3\xe1\x20\x6d\xbc\xd1\x8b\x97\xca\x9b\x4c\xee\x7b\x93\xca\x55\xbc\x09\xc9\x53\xa4\xb1\x76\xd9\x3b\x68\xa9\x23\x50\x42\xea\xc4\x98\x40\x7a\x7b\xcb\x38\xbc\xda\x16\xf2\x3e\x5a\x12\x77\xc2\xcf\x3b\x82\xd3\xc5\xff\x24\x3e\x3b\x2f\x21\xc6\x6c\xf4\xb2\xd1\xe9\x03\x81\x7d\x02\x3e\x48\x6c\x3b\xe0\x39\x8a\x49\x32\xdd\x79\x09\xb5\x7a\xa0\x81\x50\x60\xbc\x9b\x5b\xf5\x6e\x0a\x12\xd3\xdd\xdc\x2a\x76\x5e\xee\xbe\xb4\xc8\xeb\x60\x72\x54\x29\xe1\x2e\x68\x20\xb7\xe2\xdd\x1a\x68\x1a\xca\x9d\xaa\x13\xeb\xd2\x34\x45\x9f\xbe\x2a\xef\x84\xcc\xd9\x83\x08\x4f\xe5\x99\x86\x58\xf0\x1c\xab\xb0\x88\x3c\xdf\xf6\x74\x18\xa6\xa9\x9b\xa3\x1b\x54\xa1\x54\xf9\x69\x52\x00\x13\x39\x1d\x62\x36\x91\x53\xfe\x93\x10\x97\xd3\x90\x5e\xf4\x34\xed\x58\xb7\x48\xe4\x9b\x45\x8b\xcd\xa2\x5d\x02\x41\x12\x58\xda\xbd\x98\x54\x53\x1b\x25\x48\xa4\xa7\x17\xd9\xa4\x22\x60\x2e\xd0\x1b\xca\xdd\xc2\x52\x03\xa8\x59\x07\x7b\x43\x32\xdb\xb4\xbf\xee\x5e\x25\x10\xdd\x99\xf3\xe0\xf6\xbe\x5e\xeb\x23\x58\xbd\xdd\x74\x93\xe4\x85\x6b\xb8\x82\x4b\x38\x87\x0b\x78\x0f\x2f\xe1\x08\x5e\xc3\x67\xf8\x0e\xc7\x28\x9d\x12\x31\x77\x4a\xb5\x25\x38\x41\xe9\xc4\x70\x8a\xb9\x13\xeb\x7b\xb4\x13\xd3\x3c\x51\x18\x9c\x9a\xe6\x29\x05\x56\x5d\x64\xa5\xd5\xa4\x74\x4a\xd3\xcc\xe9\x0f\x3b\x89\x86\xa7\x4d\x43\x83\x87\x48\x23\xfd\x53\x1e\x9d\x98\xa6\x8b\x48\x6d\x4d\x33\x3c\x8d\xdc\xdd\x63\xff\x78\xe4\xfa\xee\xc8\xd5\xbc\x7a\xd5\x6a\xdb\x63\x0e\x97\x78\xa5\x73\xed\x31\x4a\x47\xd8\xb9\x23\xe0\x18\x6b\x2b\xb6\x3c\x48\x9a\x86\x25\x78\x06\x31\x56\x4c\x3a\xa4\x72\xed\x8a\xe5\xea\x01\x8e\xf1\x78\x74\xd3\xb8\x1c\x96\xe8\x06\xa7\x93\xe5\x14\x91\x9d\x4c\x96\x53\x8a\xe7\x82\x65\x1b\x94\x53\x7b\xd8\x37\x9b\x66\x6c\xdb\xe0\x86\xc7\xfc\x52\x6b\x06\x8f\xc3\x02\x87\xee\x46\xc8\x8e\xf0\xa4\x63\xe8\xcf\x78\xda\x3d\x52\x10\x79\x6c\xe1\x18\xd6\x48\xe1\x1d\xa3\x4d\x5a\x1e\xe7\xb0\x0e\x3d\xd3\x64\xa7\x28\xd8\x29\xac\x21\xe1\x70\x82\x82\x9d\xe8\xc7\xad\xf9\x1b\xa8\x1c\x5e\xe2\x67\x38\xc7\x93\xfe\xaa\xe0\x33\x87\x0b\x3c\xef\xc2\xae\xcf\xe1\x45\x70\x3e\xb9\x20\xb5\xe2\xf2\xe0\x3b\x9e\x76\x12\x04\xdf\x7b\x3e\x77\x39\xbc\x56\x74\x86\xd3\x89\x37\x0d\x31\x19\x8d\x4d\xf3\xb5\x65\x05\xf3\x7c\xb0\x46\x97\x24\x91\x9d\xc2\x39\x7c\x86\x0b\x0e\x6e\x98\x46\xec\x3d\x9e\xd3\xf0\xcf\x43\xbc\x30\x4d\xf6\x1e\xdf\xef\x26\x16\x3b\x9f\x78\x8a\x28\x5c\xed\xea\xfd\xe8\xb5\xda\x4e\xc4\xd6\xa1\x4a\x4a\xaf\x31\xb1\x3d\x0e\xf3\xcd\xde\xae\x71\xde\x6d\x68\x83\xb1\x5a\x6d\x0e\xe7\x70\x4d\xab\x79\x88\x29\xcd\xb5\x6d\x28\xd8\x1c\xae\xc3\xcf\xd1\x77\xff\x14\xae\x21\xe1\x9c\xfb\x14\xf8\xae\x4d\x93\xa5\xb8\x46\x05\xba\xdf\xdd\x5d\xe0\xe1\xb5\x69\xce\xb7\xb7\x5b\xb0\x73\x98\xc3\x05\x21\x61\xb7\x4b\xdc\xc3\xa0\xdf\xaf\x17\x2a\x04\x2c\x4b\x4d\xba\x68\x11\xb8\x50\x08\x6c\xa1\xcd\x7d\xd2\xa4\xdd\xd0\x73\x54\xd9\xcd\xcb\xc9\x92\x08\xbf\x86\xd4\x34\x89\x60\x51\x7b\x12\x27\x93\x97\x44\x29\x9f\x9d\xe3\x84\x9e\xa7\x70\x81\x1e\x0f\xae\x97\x32\x15\x8c\xbd\xb4\xac\x17\x47\x5d\x52\xe4\x5c\x27\x4c\x8f\x49\x91\x2f\x70\xd3\x06\x97\x4a\x12\x2e\x3b\x09\xa6\xa0\x3c\x41\x3c\xd3\x7a\x62\x89\x1e\x1c\x23\x0d\x09\x8e\x95\xe2\x3e\x56\x8a\x5b\x31\xf1\x47\x76\x05\xb5\xc5\xae\x1c\x81\x4b\x2b\x56\x69\x44\xcb\x83\x12\x16\x6d\x26\x99\x3a\x62\xb8\x72\x0a\xb4\x16\x9d\x5a\xbc\x52\xba\xfc\x61\x88\x87\xa3\xbf\x99\x1d\x71\x97\x4d\xbe\x5f\xe6\x53\xce\x3e\x5d\x4f\x3e\x5d\x3b\xd3\xdd\x27\x7c\x24\x21\xa3\xde\xc9\xdf\xce\xd4\xe2\x9f\x9c\x27\x23\xa8\x70\xf4\xf7\x27\xa7\x6d\x79\x32\x82\x02\x47\x7f\xdb\x11\x3b\xc9\x12\x99\xc9\xea\xa6\x39\x9b\x9d\x51\xb3\xa4\x61\xe5\xee\x27\x8b\x29\x58\xbc\xf9\xfb\x53\x69\x35\x9f\x4a\xeb\xc9\x68\xf1\xc0\xfb\xba\xaf\xa3\xb0\x8c\x6a\xbf\xee\xaf\x8f\x24\x18\x4f\x3c\x43\x09\x6e\xa1\x2f\x45\x63\xce\x73\xa7\x44\x59\x9e\xcd\xce\x58\xac\xe3\x48\xdf\x0d\xe3\xc8\xf6\x7c\xaf\xbf\xf2\x18\x92\x16\x8a\x31\xee\x01\x09\xd8\x38\x7c\xda\x72\x75\x16\x0f\x8d\xef\x06\x22\xab\xb0\xba\x77\xad\x15\x79\xcf\x7c\xe3\x92\x3c\xef\x68\xec\x3f\x87\xc4\x34\x93\x21\xa6\x91\xf0\xb3\x5b\x4e\x6f\x2c\xc5\x04\xb6\xd7\xc8\x34\xb2\xfd\x7b\x05\x86\xeb\x50\x0b\x87\x7a\x88\xf1\x3d\x75\x19\x43\xca\x83\x2f\xfa\x8a\xd2\x50\x4e\xbc\x61\xb1\x24\x32\x06\x97\xb3\x52\x0c\x0c\x2b\xf1\x0d\x83\x93\x7f\xdf\xe6\x71\x6b\x0e\xb4\x71\xda\xef\x6d\xee\xc4\x98\xb7\x09\x17\x78\x8b\xae\x3a\xdd\x0f\xce\xec\xb2\xcc\xd3\xba\x12\xca\x07\x44\xf5\xfe\xf0\xc4\xdb\x7b\xb8\xa5\x2c\xef\xdf\x03\x30\xe1\x94\x24\x86\xe2\x16\x3e\x38\xb1\x90\xe9\x23\xd1\x40\x77\x1f\xa2\xe6\x03\xfd\x55\x49\xb4\x31\x57\x73\xf2\xd5\x7a\x56\x88\xf9\x87\x1c\x3f\x38\xf1\x6a\x8d\xdb\x34\xef\x41\xbc\x45\x0f\xa4\x02\xb0\x55\x58\xa1\xe6\xb7\xe9\x9b\x77\x2a\x6f\x8f\x1f\x9c\xf9\xfa\xb1\x9c\x44\xa1\x4a\x3b\x5a\xa3\x54\xf4\x44\xad\xd3\x54\xbb\xe9\x8c\x65\x58\x74\x77\x8b\x1e\xd9\x07\x8d\xe6\xe8\x86\xf3\xdd\x1b\xc8\x90\xc2\x23\xed\xc3\x65\x3b\x9e\x8b\xe8\x06\x99\x92\x2e\x41\x32\xda\x82\x73\x43\xa1\xa2\x4c\xb7\x25\xc7\x5c\x5e\xc9\xb9\x98\xff\x76\x83\xea\xf9\x57\x3b\xdb\x83\x57\xf7\x77\x06\xef\xe0\x2b\xdf\x02\xa1\xd2\xee\x62\x21\x8a\x0e\x96\x6a\xf8\x15\xc0\xfd\x47\x00\xba\xe0\x29\x80\xe2\x5b\x3d\x4b\x89\x4e\xe2\xdb\xaf\xa6\x3f\x05\xd2\x6a\x8f\x53\x3b\x49\xf3\xbc\xf8\xe7\x47\xbc\xa7\x26\x2d\x0a\x31\xab\x44\xf1\x61\x39\xcb\x90\xa2\xc1\x5f\x2d\xfc\xec\x91\x23\x0e\xdd\x7b\x10\xce\x8b\x23\xda\x82\x62\x97\x45\x25\x7e\x05\xeb\x80\xac\x08\xb2\xec\x91\x7d\x70\x1d\xf9\x67\x04\x58\x96\xc7\xa4\x87\xc4\xc3\x2d\x0d\x87\x9a\x63\xf4\xa8\x96\xfc\xd8\x3e\xff\x7a\xb8\x69\x6e\xb1\x4e\xa8\xdb\x3a\xbe\x1a\x6b\x58\x67\xb3\xb3\x47\xe6\xab\xa1\x65\x3b\x42\x2c\x66\x95\xbc\x12\xd8\xbe\x3c\x42\x70\x3d\xfc\x85\xab\x27\xfc\xb7\x28\xf2\xff\x09\x27\x17\x5b\xfe\x9f\xb8\x53\x9a\x91\x8a\xb2\x6c\x8f\x23\xfd\xe5\x71\x3c\x7f\xe4\x38\xf4\x82\xdd\xf4\xed\xb3\x48\x7f\x7d\x16\x87\xca\xde\xfe\xef\x87\xa1\x6e\x8e\xf0\x83\x53\xd6\x97\xf7\x40\xdd\x8d\x18\x14\x8c\x04\x4b\x47\xd5\x6a\xbd\x55\x62\x88\x5b\xbc\x9e\xa9\x5a\x9e\x61\xd2\x34\xc3\xec\xae\xfe\x54\x8e\x23\x19\xcd\xe1\xa6\xc0\x8a\x14\x98\x9d\x41\xe9\xac\xd3\xba\x64\x82\x07\xca\xaa\xa0\x3a\x41\x50\x39\xea\xd1\x0d\x2c\xb1\x74\x62\x58\xa0\x68\x55\x48\xda\x34\x43\x7d\xd1\x3a\x5c\x36\xcd\x70\xd1\x01\x5b\x46\xac\x85\x27\xb8\xaf\xd7\x5c\x44\xa5\xdf\xad\x3b\x5c\x6a\x57\x76\xab\xba\x60\x40\xcf\x0f\x67\xd1\xc0\xa8\xf4\xf7\x10\xbf\x46\xb6\xeb\xbb\xca\xd6\xa7\x58\xb1\x94\x2b\x3f\x56\xdd\x49\x2f\x7b\xbf\x2e\xc1\xd4\x8e\xb5\x1b\xc0\x6a\x74\xc3\x84\x47\x2c\x41\x3b\x81\x1c\x97\xdc\x67\x31\xa6\x90\xe3\x82\xac\x41\x21\xae\x44\x41\xb6\x0a\x32\x4c\xd4\x05\x6f\xbe\xb9\x03\xda\xea\xbe\xdd\x0a\x6a\x58\x8d\x2c\xe9\x6f\xad\xf9\x0b\x96\xf5\x77\xfb\x9c\x47\x89\x9f\x41\x82\x19\xba\x81\x0c\xb3\x20\xd3\x81\xcf\x72\x92\x4d\x87\xb8\x20\xad\xf9\xb3\x46\x7a\x7b\x41\x2f\x9b\xcb\x04\x0a\x7d\x73\x24\xaf\x78\x01\x0b\xcc\x41\x11\x40\x38\x25\xe1\xc5\xe4\x06\xbe\xad\x52\x15\x9d\xdf\xdb\xdd\x54\xeb\x9b\xe9\x49\xd1\xba\xb8\xd4\x94\xe1\x99\xed\x05\x32\x4c\xf4\xf5\xc8\x52\x5d\xb1\xbe\x58\xa8\xd0\x4b\x17\x5a\xc9\xa0\x30\xcd\x21\x75\x14\x53\x9a\x3c\xc5\x8c\x07\xb6\x4d\x4f\xb0\x9c\xc8\xa9\x85\x67\xb7\xf4\x6b\x23\xcd\x52\x77\x19\x14\x2a\xd3\x51\x04\xcb\x3e\x52\xb6\xed\xb8\xd7\xf8\xea\x94\x4e\x98\x80\x25\xc4\xdc\x57\x87\xa8\x4f\xcc\xf3\x3d\xd8\xba\xcc\x00\xa1\x14\xe1\x2a\x9f\xd7\x29\x09\xcb\x2a\x9f\x3f\xc2\xe1\xfa\xd6\x5c\xd5\x20\x6e\xcc\x9e\x77\x97\xb7\x87\xd2\x89\x9b\x66\x28\x9c\xb2\x69\x04\x89\xf6\x50\x17\x2e\x44\x1b\x06\xf7\xa9\xa9\x69\xa4\xea\x95\xdb\xbd\x92\xfb\xec\x10\xf1\xcf\x88\x15\x4a\x44\x94\xed\x86\x0a\x5f\x31\x09\x02\x5c\xd8\xe3\xaa\xa9\x80\xca\x29\x77\xb1\xe0\xfe\xa6\xeb\x4f\x0e\x52\x0b\x28\xab\x1c\x75\x51\xcb\x04\xd7\x36\x21\x23\x6d\x25\xe6\xa8\x9e\xfe\xa9\xef\xa0\xce\x5a\xfb\xbb\xda\x58\x92\xf4\x91\xfb\x31\x7f\x8c\x32\x1d\x5d\x20\xa7\x78\xb3\x95\xfa\xf1\xa3\x52\x9f\xff\x5a\xea\xf3\x87\x52\xdf\xed\xa9\x15\xfb\x1a\x55\x7c\xa8\xab\x40\x46\x37\x90\xa8\x70\x36\xed\xc5\xbe\x6e\x9a\x61\xa9\xc5\x9e\xb4\x4b\x7a\x77\x9d\xbc\x93\xf2\x44\x4b\x79\xba\x25\xe5\xf4\x4c\x6e\xa0\x1a\x48\xfd\x91\xf4\xdd\xdd\x5c\x89\x75\x8d\x15\xab\x39\x29\x36\x56\x92\x28\x27\xbd\x58\xe7\x58\xdb\x6d\xde\x2c\x0f\xdd\x88\x95\x58\x43\x81\x29\xf7\x59\x8e\x76\x0e\x05\x26\x1c\x8a\x8d\xcc\x06\xb9\x6d\x07\xc5\x46\x9c\xb7\xba\xda\x9b\xb9\xa4\x0b\x77\x32\x4c\xbb\x47\x37\xcc\xed\x4c\xd5\xdd\xa5\x40\xee\x69\x82\x05\x64\x98\xd3\xea\x6e\x90\x05\x3c\x47\x96\x4c\x6c\x3b\x9b\x62\x32\xc9\xa6\x56\x4a\x7f\x72\x3e\x3a\x6b\x5c\xa0\x86\x1d\x3c\xeb\xce\x35\x37\x4d\x96\xf4\x21\x57\xce\xc1\xb2\x4a\x0e\x24\x1f\x09\x94\x8a\x57\xfa\x3a\x00\x52\xf3\xdb\x27\xad\xcf\x59\x65\x3d\xf4\x49\x4b\x2c\x34\xd1\xfb\x0c\xaa\x18\xaa\xf4\xbd\x69\x7a\x43\xa4\x77\x57\xff\x30\x9d\x7f\xdb\x03\xa3\xcb\x39\x1b\x2a\x05\x0f\x62\xa8\x87\xb7\x59\x58\x4e\xc2\x73\xdf\xf3\xab\x50\xf6\x5e\x1f\x64\x58\xed\xde\x58\x24\x10\x72\x52\xb5\x5a\x23\xa8\x5a\x77\xaf\x52\xee\x5e\x46\xee\x9e\x4e\x63\x4a\x52\x0b\x95\x0a\xb4\xda\x3e\x0a\xb4\xfa\x5b\x4b\xd3\x2c\xc8\x05\x0a\x89\xb2\xe4\x5b\x0a\xcb\xe3\xa0\xcc\x9c\x2a\x7b\x78\x4c\xfc\x1f\x11\x15\xa6\x2b\x91\x44\xd3\xf4\xf9\xe3\xa7\x9c\x9b\xe6\x47\x56\xc1\xbf\xff\x2d\xac\xde\xd3\xba\x53\x60\xec\xc2\x73\xf0\x9e\xea\xca\xa7\xcc\xff\xca\xa1\xa2\x75\xd5\xa9\x3c\x24\xf9\x1d\x85\xa3\x6e\x75\x2e\xe0\x02\xbc\x67\x5b\xf4\xe4\x51\xd6\xca\xbc\xe1\x09\xc3\x52\xb5\x33\x2d\x2b\x67\xa4\x65\x32\xa5\x64\x4c\x93\xd9\x17\xba\x68\xe6\x82\x66\x94\xbb\xea\x1e\xc8\xf5\x3d\x52\x4a\x99\x3a\xff\xf2\x5b\x3d\x2b\xc4\xfb\x3c\xaf\x88\x01\xbe\x15\xd5\x63\xce\xfa\x03\x3b\x4f\x22\x58\x3a\x25\x45\x7a\xaa\x90\xea\x9d\xb5\x0f\x8b\x96\x5a\x86\xeb\x3c\xd5\xc1\x1e\xb1\x05\xd9\x65\x92\xcc\x64\x4b\xf4\xf4\x38\x32\xd9\xae\x0a\xeb\x69\x80\xea\x8f\xdc\x91\xeb\x27\x51\xa9\x10\x0c\x94\x7d\x55\xa9\x7f\xc2\x8b\x11\xe7\xba\x0a\x60\x8a\xe8\x8d\xdc\x88\x4e\x91\x25\x1c\x58\x57\xc6\x63\xc5\x7c\x67\x8c\xaa\x8a\x31\xd3\x35\x52\xb0\x0d\x20\xd3\x86\x9a\xc5\x96\xc7\x47\x63\x6e\x33\x37\x8c\x9b\x26\xde\x19\xd3\x30\x05\x31\x43\x4d\x4e\x9f\x91\x34\xde\x29\x75\x51\xe6\x39\xdb\xd4\x64\x6f\x2a\x2c\x85\xc1\x2d\x8f\x5b\x31\x07\xd9\x52\x20\xe3\xdc\xef\x9e\x53\xcb\x30\x48\x53\xd3\x79\x28\x43\xa9\xb2\x61\x90\x62\x6c\x2d\x61\x4f\x6d\x3f\x25\x83\x19\xe8\xfa\x57\x09\x64\x69\xf5\xd1\xd6\xda\x01\x7a\xc5\x4a\xa8\x61\x09\x9e\xba\x9c\x63\xb5\x13\xf3\x1e\x8d\x94\x6b\x37\xae\x60\xd2\x89\xf9\x76\xbb\xd2\x89\xd2\x11\x2f\x62\xd3\xb4\xed\x74\x0b\xf9\xd4\xde\x83\x94\x78\xdf\x38\x3c\x3c\x3c\x34\x14\x8f\xb2\xbc\x69\x8c\xfd\xf6\x95\xf3\x9f\x6c\x68\x65\x4d\x33\xb4\xb2\xbe\x10\xd9\x34\x8d\xa7\x06\x62\xd6\x55\x06\xba\xc4\xf4\xec\x23\x93\x20\x1d\x61\xbd\xb3\xc6\x40\x31\x27\x0e\x65\x8b\xbc\xe4\x8e\xf8\xc6\xca\xed\x6a\x85\x61\xae\x66\xd4\x50\xb7\x33\x5c\x0e\x75\xb7\xd7\x6e\x38\xff\x29\xb1\x6e\xe7\x2c\x2d\xdc\x87\x94\xfe\xe4\xe8\xdd\xf6\x81\x4d\xb7\xa4\x07\x5f\x5b\x33\xae\x60\x90\x15\xaf\xd3\xff\xc9\x4f\x6d\xeb\x80\xba\x04\xea\x4a\xa7\x50\x35\x57\x9f\xe3\xa5\x13\xc3\x05\x92\x1d\x3b\xb8\x63\xc7\x78\x97\x39\x3d\x37\xcd\x0b\x9d\x41\x32\xcd\x8b\xad\xcc\xe9\xf0\x92\x0c\xa7\xf6\x00\xce\x4d\x73\xa8\x47\x0c\x2f\x9a\xe6\x82\x7e\xf4\xdb\x79\x5f\x5f\x21\xda\xf8\x5f\x79\x27\xbb\x78\xe9\x94\x40\x90\x23\x5d\x6b\xe1\xea\xfa\x15\x97\xfb\xdb\xf5\x18\x1c\x44\x5b\x92\x56\xb1\x4b\x15\xc9\x58\x15\x13\x3a\x61\xda\x43\x49\x37\xb9\xb3\x05\x5e\xf4\x8f\x8a\xc7\x56\x78\x0e\xe7\x78\x01\x17\xb8\x82\x5c\x99\x15\xe5\xe4\x91\x49\x49\xad\x05\xac\x70\x32\x55\xb6\x6a\xb5\x55\x7e\x94\x17\xec\x1a\xcf\xe0\x0a\x5f\x92\xab\x1a\xd8\x76\x1e\xa2\x1b\x6c\x8a\xe4\xd7\x78\x31\xc9\xa7\x3b\x57\x30\x57\x0f\xa3\xab\xc6\x85\x12\x53\xa8\x31\xb7\xca\xa0\x0e\xf3\x80\xc7\x78\xae\xee\x4d\x76\xae\x60\x89\xe7\x93\x52\x0f\x4a\x70\xbe\x1b\x5b\xcb\xdd\x35\xc4\xb8\xde\x8d\xad\x64\xe7\x6a\xf7\xca\x5a\x4d\xea\xa9\x55\x40\x81\x2c\x1e\x5d\xab\x1b\x82\x84\x46\x73\x6b\xbe\xbb\x84\xd5\xa4\xb6\xed\x29\xc6\x3b\xd7\x01\x8d\xc3\xa2\x63\x87\x22\xb2\x2c\xe9\xaf\x7a\x67\x90\x6c\xdb\x0a\xa4\x66\x8b\xb6\x6c\xed\x1f\xaa\xf6\xc1\xbd\xcb\x41\x8f\x94\xfb\xf3\xed\x52\x39\x7d\x51\xa8\x5c\xa4\x0c\x1f\x2a\xf8\xe7\xbd\x82\x07\x11\x91\x41\xa0\xe5\xfc\x4a\xa3\xb2\xa5\x4b\x1e\x0f\xcb\x3e\xb7\xa1\xd8\x83\xfb\xc9\x43\x1e\x91\x65\xf1\xda\x85\xa9\x41\x83\x54\x95\x77\xff\x37\x60\x63\x57\x03\xeb\xcc\x54\x07\x73\xec\x76\x30\x55\x0d\xdf\xa3\x14\xfb\x25\x4c\xef\x17\x30\x3d\xa5\xc3\x75\x9c\xbb\xe5\x36\x3a\xe5\x3a\x95\x95\x2e\x4d\xcf\xd1\xfa\xcb\xe9\x0b\x79\xa0\xa6\xd7\x87\xb5\x3c\x50\x62\x37\xaa\xab\xe2\x21\x4f\x90\x84\x25\x45\x39\x51\x25\xda\x5d\xfc\x0d\x33\x8c\xa3\xa4\xd7\x5b\x7e\x02\xcb\x4d\xf9\x53\x1b\xe6\x14\x98\x93\x27\x07\x35\x16\xb0\xb4\xb1\xe0\x90\x87\xae\x69\x2e\x43\xb7\xe3\xee\xe5\x4e\xde\x34\x39\x24\x38\x6b\xbf\x89\x60\x2e\x14\x3c\x58\x86\x45\x50\x58\x98\xf3\xc4\xc2\xd2\xea\xfb\x0a\xc8\x79\x50\x87\xaa\x7c\xbe\xed\x50\xcb\x17\x9c\x43\xac\x6a\xea\x0d\xdb\xb0\x12\x7e\x5b\x61\x1a\x25\xd6\x5f\xce\xfd\x12\x27\x8b\x82\x44\xeb\x2f\xe7\x41\x59\x12\x8f\xd2\x4d\x66\x72\xeb\x4b\xa1\x4f\x9f\xe6\x3f\x0d\xab\xb6\x8c\xdb\x4f\x9f\x7e\x33\xc0\x58\x18\x1c\x8c\x27\xa6\xf1\x00\x46\xb7\x02\xf7\x53\xee\x27\x9b\xc2\x5c\x7d\xd8\xed\xd0\x47\xdd\xbe\x7b\x4a\x13\xbf\xc0\x42\xab\xca\x35\x2e\x9c\x18\xe6\xfd\xbd\x3a\xac\xb0\xda\xbc\x5c\x63\x72\xe7\xc6\xbd\x67\x17\xf6\x05\x87\x1e\x94\xd8\x97\x62\x7f\xc1\x25\xb0\x21\xa3\x48\x5e\xe5\x70\x18\xe7\x4d\x53\x3a\x69\xc5\xbe\x29\xe3\xa2\xcb\x23\xc6\x60\xac\x66\xdf\x07\x73\x91\xe5\x2b\x99\xd1\x56\x06\x86\xc5\x96\x91\x71\xaf\x06\xf8\xb1\x12\x60\x81\xc3\xa5\x69\xaa\x84\xcb\x47\x56\x82\x76\xcc\x3c\xee\x2c\x2a\xc1\xbe\xf1\xa8\xf4\x3b\x37\x74\xdd\xc7\xfe\xdb\x65\xe8\xda\x5c\x17\x6c\x4d\x7c\x3a\x77\x04\xf6\x89\xa3\x85\x23\x6c\x0f\xe6\xca\xaa\xe3\xfb\x09\xab\x31\xdf\xb9\xe1\x2f\xdc\xe8\xc6\xaa\xfd\x7a\x4a\x0b\x0b\xda\x4b\xbc\x5a\xb3\x39\x0f\xdd\x88\x82\x85\xb9\xbf\xf2\x4b\xa8\xf1\x07\xfc\x20\x6f\xa3\x27\x45\xcc\x21\xd1\x90\xdc\x20\x45\x32\xf7\x73\x95\x1d\x54\xb2\xa2\x5c\x80\xb4\xb5\x92\xd7\x9c\x83\x37\xa4\x10\x68\xb5\xa6\x08\x89\x57\x78\x0d\xd7\x28\x61\x85\xc9\xdd\x91\x12\x57\x9c\x22\x17\x09\x73\x2c\xdb\x90\x6a\xd3\x37\xe7\x14\xdc\xc8\x4e\xef\x49\x7c\xc5\x44\x17\x4b\x72\xb8\xd6\xab\x27\x1d\xcc\xce\xa4\x13\xc4\xaa\x43\x49\x6e\xa1\x94\x38\x25\xae\x9c\x12\x17\x4e\x09\xf9\x2e\x8e\x21\xc3\x57\x8c\xac\x6b\x0e\x5f\x79\x0b\x77\xc1\x9d\xd9\x65\xc9\xb8\x42\xfd\x15\x4b\xa0\x7a\xac\x97\xbf\xf0\xa2\xc9\x6a\xeb\x0c\xe0\x7a\xeb\x65\xea\x4f\x92\xed\xbe\x6a\xbb\x0f\x7e\x60\xad\xdd\xf9\x2a\xd7\x35\xc2\x0f\x23\xdf\x2d\xc7\xda\x12\x4d\x43\x06\x38\x72\x77\x85\xa3\xf3\x41\x7a\xee\xbb\xfc\x5a\xa5\x15\xd7\xf9\xf5\x2f\xa2\xa1\x55\x57\x4d\x65\x09\xde\xa5\x07\xc8\x41\xe8\x5d\xf5\xf1\x1e\x18\xa2\x55\xf7\xaa\xfe\x67\xd8\x65\x35\x99\xe0\x4d\x53\x84\x17\x14\x03\x8d\xd0\xe5\x4d\xb3\x9e\x15\xa5\x38\x4e\xf3\x59\xc5\x04\x57\x72\x32\x64\x02\x09\x9d\x7b\x37\x0d\xca\x8f\x5d\xe7\xd7\xcc\x92\x20\x78\x97\x61\xf9\x3d\x9a\xb3\xdf\x47\x37\xd6\x98\xfb\x2e\x6c\xa4\xb0\xad\x48\x2d\x76\xc6\xea\x57\x5d\x8b\xb4\x6e\x19\x0c\x2b\x27\x6e\x2b\x45\x33\xd3\xac\xfa\x6c\xa8\x0a\x8c\x36\xaf\x98\x71\x5d\x1e\xbc\x62\xc5\x68\xcc\xa1\x2b\x5a\x0e\x24\x6e\x7c\x3c\xc8\x4c\x53\xa5\x35\xe4\x5d\x30\xf2\x0e\x98\x3b\xd9\xf8\x0a\xbf\x39\x73\x79\xc5\x2a\xce\x21\x53\x56\xf2\x77\xf8\xda\x5b\xc9\xbe\x48\xfc\x9f\x9b\x35\x55\x15\xb7\xff\x2b\x33\x0d\xe3\xfd\xf6\x60\x35\xa7\x3c\x76\xa6\x5d\x7c\x5b\x11\xff\x62\xe5\x88\x60\x2b\x28\x45\xc4\x3c\x92\x14\x6c\x18\xdd\x1d\x99\x01\x6e\x28\x55\x14\x49\x6a\x9d\xbc\xfd\x0c\x8d\xb3\xd9\x99\xe1\x2b\x57\x9c\xe8\xdb\xfb\x07\x2d\x92\xea\x0b\xd3\xf1\xd3\xee\x13\xd3\xe8\x35\x4b\x59\x06\x39\x07\xb7\x11\xe0\xb9\x20\xb9\xff\x5b\x88\x64\x73\x42\x7c\x12\x25\xaa\xcf\xef\x86\xd0\x62\x55\x17\xd1\xf5\x8b\xb6\xcc\x5e\xd4\x59\xdc\x66\x7b\xd4\xf3\x3f\xbf\x0b\xd0\xf7\x0f\x57\xb3\xb4\x16\xe7\x09\x4d\xcf\x7f\xbf\x38\x7f\x24\x13\xae\x53\xdb\x1b\x51\xbb\xdd\xd0\xbf\xab\x3a\x25\x75\x3e\xdb\xd4\x4b\x54\x9b\x58\xd6\x6d\x7a\x6a\x8a\xd0\x6d\x1a\x81\x88\x59\x94\xf9\x99\xed\xdd\xa9\xaf\xd8\x54\x56\x68\x21\xf3\x40\x6e\x8a\x50\x72\xf5\x9d\x8a\x65\x18\x81\x0c\x8b\xd6\x03\xcd\x50\xa8\x6c\xa3\x65\x18\x50\xe1\x8d\xdd\x7f\xcb\x51\xd9\x76\x90\x51\xf4\x67\x65\x3c\xc8\x2d\xcc\x6e\xdb\x42\x90\x3b\x5f\x25\xe6\x77\xbf\x4a\x94\x3c\xe8\xdd\xc0\x7c\xf3\xbd\x9f\xe5\x35\x8d\xc7\x37\x88\xca\xfb\xb9\x41\xe1\xc4\x90\x53\x54\xa4\xbe\x29\x2a\x49\xa7\x3b\xa5\xaa\x9f\xa1\x18\x2f\x73\xc4\x56\x96\xea\x61\xa6\xc3\x34\x87\xca\x89\x29\x30\x37\xcd\x61\xae\x8a\xba\x9a\xa6\xbf\x0d\xab\xa2\x22\x72\x7d\xbb\xf4\x6b\xe5\xb8\x0c\xb1\x87\x51\x6b\x00\x6e\x58\x43\x81\x09\x62\x0a\x43\xd9\x34\xc3\x9c\xf7\x5e\xb1\xeb\x0f\xe5\xdf\x95\x2e\x6b\xb9\x73\xc5\x96\x84\x69\xd7\xae\x8b\x8b\x58\xd2\xa7\x5c\xf8\x0b\x96\xf6\x74\xe2\x51\xe2\x93\x33\xef\x06\x65\x58\x07\xb5\xce\x22\xcb\x49\x3d\x1d\x62\x3e\xa9\xfb\x60\x9e\x5a\x42\x6a\xe8\xa0\xf6\x9f\x49\x63\x1a\xb9\xfe\x66\xb9\x0d\x15\xf3\xbb\xb7\xb7\x4c\xe8\x8f\x7f\x42\x72\xa6\xab\x10\xb7\xaa\x7d\x6a\x62\x8c\xf6\xa3\xbf\x89\x2e\x8e\x1c\xa8\x52\xb8\xa9\x81\x78\xae\xde\x37\xe5\xe7\x3d\x8b\xea\xef\x91\xc4\xd6\xb9\x95\x0f\xbe\xff\x21\xf7\x46\x45\x5b\xb5\x2a\x94\xef\xbf\x77\xa2\xbd\xb6\xdf\x80\x6e\x38\x46\xda\x76\x90\x4f\xe4\x74\x17\xb3\xb6\x1e\x6c\x52\xa0\x3b\xb5\xf0\xbc\x4f\x03\x88\x2e\x30\x26\x42\xf1\xa0\x78\xd1\x4f\x2e\x2c\x8b\xe7\x93\x62\x1a\x56\xea\x6b\x5d\xad\x53\xf2\x49\x61\x79\x24\xce\xfa\x01\x5d\x0e\xfa\xc9\xa2\xae\xe9\xa8\x6a\x5c\x6a\x98\xee\x60\xd5\xeb\xcf\xed\xbb\x80\x7e\x67\xc9\xb6\x7e\x64\x9b\xaa\xa2\x48\x6c\x22\x75\xcb\x70\x0c\x4b\x6c\x5c\x62\xc1\x2d\xe6\x86\x59\x64\x90\xdf\x24\x2c\x83\x5b\xd9\x06\x60\x7a\x87\xc5\x75\xd9\x5a\xd6\xb9\xc5\x86\xeb\x18\x81\x65\x65\xe4\x04\xab\x6f\xd0\x04\x16\x96\xe8\x0b\x0c\xab\x8d\xc8\x5a\x56\x16\x56\x9b\x69\x06\x64\x36\x56\x81\x6d\x6f\x4d\xb5\xb0\xd0\x33\x2b\x65\x33\x36\x75\x65\xfa\x93\xf7\x2d\x9c\x33\xbe\x89\xd1\x36\x98\xc6\x1b\xe6\x18\x08\xbc\x63\x48\x81\x2c\xf4\x9c\x09\xee\xaf\x88\x0f\x68\x33\x33\x1d\xf7\xeb\x6a\x87\x4f\x73\x8b\x7d\x72\x3e\xcd\x77\x79\xd4\xd0\xaf\xc5\x99\x98\x58\xf6\x34\xa2\xc7\xe8\xc9\x88\xdc\x26\x65\x70\x63\x21\x53\x58\xe9\x67\x75\xd5\x0a\xd7\xd8\x56\xeb\x0e\x2e\xf3\x3c\x15\xb3\x6c\x90\x17\x83\x4b\x99\xcd\x8a\x9b\xc1\x9c\xc2\x4d\x03\xae\x50\x7f\x49\x25\xb3\xc5\x60\x95\xcf\x85\x01\x97\xdd\x87\xe9\x03\x62\xd4\xc1\x72\x56\x0e\x56\x79\x21\x06\xd5\x72\x96\x0d\xbc\xa7\x83\x52\x2e\x32\x99\xc8\x78\x96\x55\x1a\x48\x69\xc0\x39\x1a\xae\x37\xde\xdb\x7f\xfa\xec\xe0\xf9\xe1\xec\x32\x9e\x8b\x64\xb1\x94\x5f\xbe\xa6\xab\x2c\x5f\x7f\x2b\xca\xaa\xbe\xba\xfe\x7e\xf3\xe3\xe5\x6f\xaf\x5e\x1f\x1d\xbf\xf9\xd7\xc9\xef\xff\xdf\xe9\xdb\xb3\xf3\x77\xff\xff\xfb\x8b\x0f\x1f\xff\xf8\xf3\xaf\xff\xfa\xef\x27\x9f\x0d\x38\x43\x4f\x78\xfb\x70\x83\xde\x3e\x5c\xdc\x2f\xec\xf5\xe0\x3d\x4e\x3c\x32\x3f\x9e\xeb\x82\x27\xf6\xc0\x13\xfb\xe0\x89\xa7\xe0\x89\x67\xe0\x89\x03\xf0\xc4\x73\xf0\xc4\x21\x78\x82\x06\x09\xcf\xa3\x3f\x63\xfa\xb3\x37\x85\x97\xea\x43\x8e\x23\xf4\xc4\xa1\xfa\xa2\x4a\x55\x51\x1a\xdd\xf1\x6c\x8a\x9d\xe7\x22\x91\x99\x30\x4d\xfd\xeb\xcc\x56\x73\xae\x1f\xd9\x43\x53\x33\xbb\xdd\x7c\xb7\x69\xd4\x99\x1e\x37\xdf\x54\x7f\xab\x0b\x1b\x61\x9a\xfa\xd7\x21\x2f\xab\xa8\xf4\x05\xc0\xdd\x26\x9c\xc1\x70\xc9\xab\xe2\xe6\xe7\x12\x0b\xf1\xad\x96\x85\x60\x6d\x3d\xa8\xc1\x6f\xe3\x59\x15\x2f\xd9\x6b\xfe\xf3\x56\x73\xa0\x70\xfa\x2f\xcb\x70\x76\xdb\x66\x05\xfe\x63\x34\xfa\xcf\x41\x99\xd7\x45\x2c\xde\xce\xd6\x6b\x99\x2d\x3e\xbe\x3f\xc5\x79\x1e\xdf\xf9\xf7\x1a\xce\x6a\xb6\xfe\x8f\xff\x17\x00\x00\xff\xff\x2f\x88\x72\xca\xa2\x43\x00\x00") - -func bignumberJsBytes() ([]byte, error) { - return bindataRead( - _bignumberJs, - "bignumber.js", - ) -} - -func bignumberJs() (*asset, error) { - bytes, err := bignumberJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "bignumber.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - 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) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; 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) -} - -// 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 -} - -// 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) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; 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) -} - -// 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){ - "bignumber.js": bignumberJs, -} - -// 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 -// AssetDir("") will return []string{"data"}. -func AssetDir(name string) ([]string, error) { - node := _bintree - if len(name) != 0 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(cannonicalName, "/") - 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{ - "bignumber.js": {bignumberJs, 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 - } - err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) - if err != nil { - return err - } - return nil -} - -// 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 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) -} diff --git a/signer/rules/deps/deps.go b/signer/rules/deps/deps.go deleted file mode 100644 index 5ee00b90..00000000 --- a/signer/rules/deps/deps.go +++ /dev/null @@ -1,21 +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 deps contains the console JavaScript dependencies Go embedded. -package deps - -//go:generate go-bindata -nometadata -pkg deps -o bindata.go bignumber.js -//go:generate gofmt -w -s bindata.go diff --git a/signer/rules/rules.go b/signer/rules/rules.go index 99d38595..5ed4514e 100644 --- a/signer/rules/rules.go +++ b/signer/rules/rules.go @@ -22,27 +22,23 @@ import ( "os" "strings" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/signer/core" - "github.com/cryptoecc/ETH-ECC/signer/rules/deps" - "github.com/cryptoecc/ETH-ECC/signer/storage" - "github.com/robertkrimen/otto" -) - -var ( - BigNumber_JS = deps.MustAsset("bignumber.js") + "github.com/dop251/goja" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/internal/jsre/deps" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/signer/core" + "github.com/ethereum/go-ethereum/signer/storage" ) // 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 consoleOutput(call otto.FunctionCall) otto.Value { +func consoleOutput(call goja.FunctionCall) goja.Value { output := []string{"JS:> "} - for _, argument := range call.ArgumentList { + for _, argument := range call.Arguments { output = append(output, fmt.Sprintf("%v", argument)) } fmt.Fprintln(os.Stderr, strings.Join(output, " ")) - return otto.Value{} + return goja.Undefined() } // rulesetUI provides an implementation of UIClientAPI that evaluates a javascript @@ -63,6 +59,7 @@ func NewRuleEvaluator(next core.UIClientAPI, jsbackend storage.Storage) (*rulese return c, nil } func (r *rulesetUI) RegisterUIServer(api *core.UIServerAPI) { + r.next.RegisterUIServer(api) // TODO, make it possible to query from js } @@ -70,45 +67,46 @@ func (r *rulesetUI) Init(javascriptRules string) error { r.jsRules = javascriptRules return nil } -func (r *rulesetUI) execute(jsfunc string, jsarg interface{}) (otto.Value, error) { - +func (r *rulesetUI) execute(jsfunc string, jsarg interface{}) (goja.Value, error) { // Instantiate a fresh vm engine every time - vm := otto.New() + vm := goja.New() // Set the native callbacks - consoleObj, _ := vm.Get("console") - consoleObj.Object().Set("log", consoleOutput) - consoleObj.Object().Set("error", consoleOutput) + consoleObj := vm.NewObject() + consoleObj.Set("log", consoleOutput) + consoleObj.Set("error", consoleOutput) + vm.Set("console", consoleObj) - vm.Set("storage", struct{}{}) - storageObj, _ := vm.Get("storage") - storageObj.Object().Set("put", func(call otto.FunctionCall) otto.Value { + storageObj := vm.NewObject() + storageObj.Set("put", func(call goja.FunctionCall) goja.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() + return goja.Null() }) - storageObj.Object().Set("get", func(call otto.FunctionCall) otto.Value { + storageObj.Set("get", func(call goja.FunctionCall) goja.Value { goval, _ := r.storage.Get(call.Argument(0).String()) - jsval, _ := otto.ToValue(goval) + jsval := vm.ToValue(goval) return jsval }) + vm.Set("storage", storageObj) + // Load bootstrap libraries - script, err := vm.Compile("bignumber.js", BigNumber_JS) + script, err := goja.Compile("bignumber.js", deps.BigNumberJS, true) if err != nil { log.Warn("Failed loading libraries", "err", err) - return otto.UndefinedValue(), err + return goja.Undefined(), err } - vm.Run(script) + vm.RunProgram(script) // Run the actual rule implementation - _, err = vm.Run(r.jsRules) + _, err = vm.RunString(r.jsRules) if err != nil { log.Warn("Execution failed", "err", err) - return otto.UndefinedValue(), err + return goja.Undefined(), err } // And the actual call @@ -119,7 +117,7 @@ func (r *rulesetUI) execute(jsfunc string, jsarg interface{}) (otto.Value, error jsonbytes, err := json.Marshal(jsarg) if err != nil { log.Warn("failed marshalling data", "data", jsarg) - return otto.UndefinedValue(), err + return goja.Undefined(), err } // Now, we call foobar(JSON.parse()). var call string @@ -128,7 +126,7 @@ func (r *rulesetUI) execute(jsfunc string, jsarg interface{}) (otto.Value, error } else { call = fmt.Sprintf("%v()", jsfunc) } - return vm.Run(call) + return vm.RunString(call) } func (r *rulesetUI) checkApproval(jsfunc string, jsarg []byte, err error) (bool, error) { @@ -140,11 +138,7 @@ func (r *rulesetUI) checkApproval(jsfunc string, jsarg []byte, err error) (bool, log.Info("error occurred during execution", "error", err) return false, err } - result, err := v.ToString() - if err != nil { - log.Info("error occurred during response unmarshalling", "error", err) - return false, err - } + result := v.ToString().String() if result == "Approve" { log.Info("Op approved") return true, nil @@ -152,7 +146,7 @@ func (r *rulesetUI) checkApproval(jsfunc string, jsarg []byte, err error) (bool, log.Info("Op rejected") return false, nil } - return false, fmt.Errorf("Unknown response") + return false, fmt.Errorf("unknown response") } func (r *rulesetUI) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { diff --git a/signer/rules/rules_test.go b/signer/rules/rules_test.go index 4067a67f..c35da8ec 100644 --- a/signer/rules/rules_test.go +++ b/signer/rules/rules_test.go @@ -22,13 +22,14 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/accounts" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/internal/ethapi" - "github.com/cryptoecc/ETH-ECC/signer/core" - "github.com/cryptoecc/ETH-ECC/signer/storage" + "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/internal/ethapi" + "github.com/ethereum/go-ethereum/signer/core" + "github.com/ethereum/go-ethereum/signer/core/apitypes" + "github.com/ethereum/go-ethereum/signer/storage" ) const JS = ` @@ -43,7 +44,7 @@ Three things can happen: 3. Anything else; other return values [*], method not implemented or exception occurred during processing. This means that the operation will continue to manual processing, via the regular UI method chosen by the user. -[*] Note: Future version of the ruleset may use more complex json-based returnvalues, making it possible to not +[*] Note: Future version of the ruleset may use more complex json-based return values, making it possible to not only respond Approve/Reject/Manual, but also modify responses. For example, choose to list only one, but not all accounts in a list-request. The points above will continue to hold for non-json based responses ("Approve"/"Reject"). @@ -151,7 +152,6 @@ func TestListRequest(t *testing.T) { } func TestSignTxRequest(t *testing.T) { - js := ` function ApproveTx(r){ console.log("transaction.from", r.transaction.from); @@ -180,7 +180,7 @@ func TestSignTxRequest(t *testing.T) { } t.Logf("to %v", to.Address().String()) resp, err := r.ApproveTx(&core.SignTxRequest{ - Transaction: core.SendTxArgs{ + Transaction: apitypes.SendTxArgs{ From: *from, To: to}, Callinfo: nil, @@ -242,9 +242,8 @@ func (d *dummyUI) OnApprovedTx(tx ethapi.SignTransactionResult) { func (d *dummyUI) OnSignerStartup(info core.StartupInfo) { } -//TestForwarding tests that the rule-engine correctly dispatches requests to the next caller +// TestForwarding tests that the rule-engine correctly dispatches requests to the next caller func TestForwarding(t *testing.T) { - js := "" ui := &dummyUI{make([]string, 0)} jsBackend := storage.NewEphemeralStorage() @@ -267,11 +266,8 @@ func TestForwarding(t *testing.T) { expCalls := 6 if len(ui.calls) != expCalls { - t.Errorf("Expected %d forwarded calls, got %d: %s", expCalls, len(ui.calls), strings.Join(ui.calls, ",")) - } - } func TestMissingFunc(t *testing.T) { @@ -295,10 +291,8 @@ func TestMissingFunc(t *testing.T) { t.Errorf("Expected missing method to cause non-approval") } t.Logf("Err %v", err) - } func TestStorage(t *testing.T) { - js := ` function testStorage(){ storage.put("mykey", "myvalue") @@ -337,7 +331,7 @@ func TestStorage(t *testing.T) { if err != nil { t.Errorf("Unexpected error %v", err) } - retval, err := v.ToString() + retval := v.ToString().String() if err != nil { t.Errorf("Unexpected error %v", err) @@ -347,7 +341,6 @@ func TestStorage(t *testing.T) { t.Errorf("Unexpected data, expected '%v', got '%v'", exp, retval) } t.Logf("Err %v", err) - } const ExampleTxWindow = ` @@ -432,23 +425,23 @@ func dummyTx(value hexutil.Big) *core.SignTxRequest { gasPrice := hexutil.Big(*big.NewInt(2000000)) return &core.SignTxRequest{ - Transaction: core.SendTxArgs{ + Transaction: apitypes.SendTxArgs{ From: *from, To: to, Value: value, Nonce: n, - GasPrice: gasPrice, + GasPrice: &gasPrice, Gas: gas, }, - Callinfo: []core.ValidationInfo{ - {Typ: "Warning", Message: "All your base are bellong to us"}, + Callinfo: []apitypes.ValidationInfo{ + {Typ: "Warning", Message: "All your base are belong to us"}, }, Meta: core.Metadata{Remote: "remoteip", Local: "localip", Scheme: "inproc"}, } } func dummyTxWithV(value uint64) *core.SignTxRequest { - v := big.NewInt(0).SetUint64(value) + v := new(big.Int).SetUint64(value) h := hexutil.Big(*v) return dummyTx(h) } @@ -468,7 +461,7 @@ func TestLimitWindow(t *testing.T) { return } // 0.3 ether: 429D069189E0000 wei - v := big.NewInt(0).SetBytes(common.Hex2Bytes("0429D069189E0000")) + v := new(big.Int).SetBytes(common.Hex2Bytes("0429D069189E0000")) h := hexutil.Big(*v) // The first three should succeed for i := 0; i < 3; i++ { @@ -543,11 +536,10 @@ func (d *dontCallMe) OnApprovedTx(tx ethapi.SignTransactionResult) { d.t.Fatalf("Did not expect next-handler to be called") } -//TestContextIsCleared tests that the rule-engine does not retain variables over several requests. +// TestContextIsCleared tests that the rule-engine does not retain variables over several requests. // if it does, that would be bad since developers may rely on that to store data, // instead of using the disk-based data storage func TestContextIsCleared(t *testing.T) { - js := ` function ApproveTx(){ if (typeof foobar == 'undefined') { @@ -579,7 +571,6 @@ func TestContextIsCleared(t *testing.T) { } func TestSignData(t *testing.T) { - js := `function ApproveListing(){ return "Approve" } @@ -604,7 +595,7 @@ function ApproveSignData(r){ t.Logf("address %v %v\n", addr.String(), addr.Original()) - nvt := []*core.NameValueType{ + nvt := []*apitypes.NameValueType{ { Name: "message", Typ: "text/plain", diff --git a/signer/storage/aes_gcm_storage.go b/signer/storage/aes_gcm_storage.go index 73668af4..928d643d 100644 --- a/signer/storage/aes_gcm_storage.go +++ b/signer/storage/aes_gcm_storage.go @@ -22,10 +22,9 @@ import ( "crypto/rand" "encoding/json" "io" - "io/ioutil" "os" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/log" ) type storedCredential struct { @@ -114,7 +113,7 @@ func (s *AESEncryptedStorage) Del(key string) { // readEncryptedStorage reads the file with encrypted creds func (s *AESEncryptedStorage) readEncryptedStorage() (map[string]storedCredential, error) { creds := make(map[string]storedCredential) - raw, err := ioutil.ReadFile(s.filename) + raw, err := os.ReadFile(s.filename) if err != nil { if os.IsNotExist(err) { @@ -136,7 +135,7 @@ func (s *AESEncryptedStorage) writeEncryptedStorage(creds map[string]storedCrede if err != nil { return err } - if err = ioutil.WriteFile(s.filename, raw, 0600); err != nil { + if err = os.WriteFile(s.filename, raw, 0600); err != nil { return err } return nil @@ -144,18 +143,18 @@ func (s *AESEncryptedStorage) writeEncryptedStorage(creds map[string]storedCrede // encrypt encrypts plaintext with the given key, with additional data // The 'additionalData' is used to place the (plaintext) KV-store key into the V, -// to prevent the possibility to alter a K, or swap two entries in the KV store with eachother. +// to prevent the possibility to alter a K, or swap two entries in the KV store with each other. func encrypt(key []byte, plaintext []byte, additionalData []byte) ([]byte, []byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, nil, err } aesgcm, err := cipher.NewGCM(block) - nonce := make([]byte, aesgcm.NonceSize()) - if _, err := io.ReadFull(rand.Reader, nonce); err != nil { + if err != nil { return nil, nil, err } - if err != nil { + nonce := make([]byte, aesgcm.NonceSize()) + if _, err := io.ReadFull(rand.Reader, nonce); err != nil { return nil, nil, err } ciphertext := aesgcm.Seal(nil, nonce, plaintext, additionalData) diff --git a/signer/storage/aes_gcm_storage_test.go b/signer/storage/aes_gcm_storage_test.go index 6d6c5c6a..e1fea592 100644 --- a/signer/storage/aes_gcm_storage_test.go +++ b/signer/storage/aes_gcm_storage_test.go @@ -20,11 +20,11 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" + "os" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" "github.com/mattn/go-colorable" ) @@ -51,7 +51,6 @@ func TestEncryption(t *testing.T) { } func TestFileStorage(t *testing.T) { - a := map[string]storedCredential{ "secret": { Iv: common.Hex2Bytes("cdb30036279601aeee60f16b"), @@ -62,10 +61,7 @@ func TestFileStorage(t *testing.T) { CipherText: common.Hex2Bytes("2df87baf86b5073ef1f03e3cc738de75b511400f5465bb0ddeacf47ae4dc267d"), }, } - d, err := ioutil.TempDir("", "eth-encrypted-storage-test") - if err != nil { - t.Fatal(err) - } + d := t.TempDir() stored := &AESEncryptedStorage{ filename: fmt.Sprintf("%v/vault.json", d), key: []byte("AES256Key-32Characters1234567890"), @@ -95,10 +91,7 @@ func TestFileStorage(t *testing.T) { func TestEnd2End(t *testing.T) { log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(3), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) - d, err := ioutil.TempDir("", "eth-encrypted-storage-test") - if err != nil { - t.Fatal(err) - } + d := t.TempDir() s1 := &AESEncryptedStorage{ filename: fmt.Sprintf("%v/vault.json", d), @@ -120,10 +113,7 @@ func TestSwappedKeys(t *testing.T) { // K1:V1, K2:V2 can be swapped into K1:V2, K2:V1 log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(3), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) - d, err := ioutil.TempDir("", "eth-encrypted-storage-test") - if err != nil { - t.Fatal(err) - } + d := t.TempDir() s1 := &AESEncryptedStorage{ filename: fmt.Sprintf("%v/vault.json", d), @@ -134,7 +124,7 @@ func TestSwappedKeys(t *testing.T) { // Now make a modified copy creds := make(map[string]storedCredential) - raw, err := ioutil.ReadFile(s1.filename) + raw, err := os.ReadFile(s1.filename) if err != nil { t.Fatal(err) } @@ -149,7 +139,7 @@ func TestSwappedKeys(t *testing.T) { if err != nil { t.Fatal(err) } - if err = ioutil.WriteFile(s1.filename, raw, 0600); err != nil { + if err = os.WriteFile(s1.filename, raw, 0600); err != nil { t.Fatal(err) } } diff --git a/signer/storage/storage.go b/signer/storage/storage.go index 06b0fd98..33c0d66f 100644 --- a/signer/storage/storage.go +++ b/signer/storage/storage.go @@ -41,8 +41,7 @@ type Storage interface { // EphemeralStorage is an in-memory storage that does // not persist values to disk. Mainly used for testing type EphemeralStorage struct { - data map[string]string - namespace string + data map[string]string } // Put stores a value by key. 0-length keys results in noop. @@ -83,5 +82,5 @@ 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") + return "", errors.New("missing key, I probably forgot") } diff --git a/tests/block_test.go b/tests/block_test.go index 811f603c..74c7ed81 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -25,17 +25,13 @@ func TestBlockchain(t *testing.T) { bt := new(testMatcher) // General state tests are 'exported' as blockchain tests, but we can run them natively. - bt.skipLoad(`^ValidBlocks/bcStateTests/`) - // 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)`) + // For speedier CI-runs, the line below can be uncommented, so those are skipped. + // For now, in hardfork-times (Berlin), we run the tests both as StateTests and + // as blockchain tests, since the latter also covers things like receipt root + bt.skipLoad(`^GeneralStateTests/`) - // These are not formatted like the rest -- due to the large postState, the postState - // was replaced by a hash, instead of a genesisAlloc map - // See https://github.com/Onther-Tech/tests/pull/616 - bt.skipLoad(`.*bcExploitTest/ShanghaiLove.json`) - bt.skipLoad(`.*bcExploitTest/SuicideIssue.json`) + // Skip random failures due to selfish mining test + bt.skipLoad(`.*bcForgedTest/bcForkUncle\.json`) // Slow tests bt.slow(`.*bcExploitTest/DelegateCallSpam.json`) @@ -45,9 +41,20 @@ func TestBlockchain(t *testing.T) { 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) + if err := bt.checkFailure(t, test.Run(false)); err != nil { + t.Errorf("test without snapshotter failed: %v", err) + } + if err := bt.checkFailure(t, test.Run(true)); err != nil { + t.Errorf("test with snapshotter failed: %v", 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 edc50e9a..80f93d7c 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -23,19 +23,20 @@ import ( "encoding/json" "fmt" "math/big" + "os" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/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/params" + "github.com/ethereum/go-ethereum/rlp" ) // A BlockTest checks handling of entire blocks. @@ -59,12 +60,13 @@ type btJSON struct { } type btBlock struct { - BlockHeader *btHeader - Rlp string - UncleHeaders []*btHeader + BlockHeader *btHeader + ExpectException string + Rlp string + UncleHeaders []*btHeader } -//go:generate gencodec -type btHeader -field-override btHeaderMarshaling -out gen_btheader.go +//go:generate go run github.com/fjl/gencodec -type btHeader -field-override btHeaderMarshaling -out gen_btheader.go type btHeader struct { Bloom types.Bloom @@ -83,18 +85,20 @@ type btHeader struct { GasLimit uint64 GasUsed uint64 Timestamp uint64 + BaseFeePerGas *big.Int } type btHeaderMarshaling struct { - ExtraData hexutil.Bytes - Number *math.HexOrDecimal256 - Difficulty *math.HexOrDecimal256 - GasLimit math.HexOrDecimal64 - GasUsed math.HexOrDecimal64 - Timestamp math.HexOrDecimal64 + ExtraData hexutil.Bytes + Number *math.HexOrDecimal256 + Difficulty *math.HexOrDecimal256 + GasLimit math.HexOrDecimal64 + GasUsed math.HexOrDecimal64 + Timestamp math.HexOrDecimal64 + BaseFeePerGas *math.HexOrDecimal256 } -func (t *BlockTest) Run() error { +func (t *BlockTest) Run(snapshotter bool) error { config, ok := Forks[t.json.Network] if !ok { return UnsupportedForkError{t.json.Network} @@ -102,7 +106,8 @@ func (t *BlockTest) Run() error { // import pre accounts & construct test genesis block & state root db := rawdb.NewMemoryDatabase() - gblock, err := t.genesis(config).Commit(db) + gspec := t.genesis(config) + gblock, err := gspec.Commit(db) if err != nil { return err } @@ -118,7 +123,12 @@ func (t *BlockTest) Run() error { } else { engine = ethash.NewShared() } - chain, err := core.NewBlockChain(db, &core.CacheConfig{TrieCleanLimit: 0}, config, engine, vm.Config{}, nil) + cache := &core.CacheConfig{TrieCleanLimit: 0} + if snapshotter { + cache.SnapshotLimit = 1 + cache.SnapshotWait = true + } + chain, err := core.NewBlockChain(db, cache, gspec, nil, engine, vm.Config{}, nil, nil) if err != nil { return err } @@ -139,6 +149,12 @@ func (t *BlockTest) Run() error { if err = t.validatePostState(newDB); err != nil { return fmt.Errorf("post state validation failed: %v", err) } + // Cross-check the snapshot-to-hash against the trie hash + if snapshotter { + if err := chain.Snapshots().Verify(chain.CurrentBlock().Root()); err != nil { + return err + } + } return t.validateImportedHeaders(chain, validBlocks) } @@ -155,10 +171,11 @@ func (t *BlockTest) genesis(config *params.ChainConfig) *core.Genesis { Mixhash: t.json.Genesis.MixHash, Coinbase: t.json.Genesis.Coinbase, Alloc: t.json.Pre, + BaseFee: t.json.Genesis.BaseFeePerGas, } } -/* See https://github.com/Onther-Tech/tests/wiki/Blockchain-Tests-II +/* See https://github.com/ethereum/tests/wiki/Blockchain-Tests-II Whether a block is valid or not is a bit subtle, it's defined by presence of blockHeader, transactions and uncleHeaders fields. If they are missing, the block is @@ -173,13 +190,13 @@ func (t *BlockTest) genesis(config *params.ChainConfig) *core.Genesis { func (t *BlockTest) insertBlocks(blockchain *core.BlockChain) ([]btBlock, error) { validBlocks := make([]btBlock, 0) // insert the test blocks, which will execute all transactions - for _, b := range t.json.Blocks { + for bi, b := range t.json.Blocks { cb, err := b.decode() if err != nil { if b.BlockHeader == nil { continue // OK - block is supposed to be invalid, continue with next block } else { - return nil, fmt.Errorf("Block RLP decoding failed when expected to succeed: %v", err) + return nil, fmt.Errorf("block RLP decoding failed when expected to succeed: %v", err) } } // RLP decoding worked, try to insert into chain: @@ -189,16 +206,21 @@ func (t *BlockTest) insertBlocks(blockchain *core.BlockChain) ([]btBlock, error) if b.BlockHeader == nil { continue // OK - block is supposed to be invalid, continue with next block } else { - return nil, fmt.Errorf("Block #%v insertion into chain failed: %v", blocks[i].Number(), err) + return nil, fmt.Errorf("block #%v insertion into chain failed: %v", blocks[i].Number(), err) } } if b.BlockHeader == nil { - return nil, fmt.Errorf("Block insertion should have failed") + if data, err := json.MarshalIndent(cb.Header(), "", " "); err == nil { + fmt.Fprintf(os.Stderr, "block (index %d) insertion should have failed due to: %v:\n%v\n", + bi, b.ExpectException, string(data)) + } + return nil, fmt.Errorf("block (index %d) insertion should have failed due to: %v", + bi, b.ExpectException) } // validate RLP decoding by checking all values against test file JSON if err = validateHeader(b.BlockHeader, cb.Header()); err != nil { - return nil, fmt.Errorf("Deserialised block header validation failed: %v", err) + return nil, fmt.Errorf("deserialised block header validation failed: %v", err) } validBlocks = append(validBlocks, b) } @@ -207,49 +229,49 @@ func (t *BlockTest) insertBlocks(blockchain *core.BlockChain) ([]btBlock, error) func validateHeader(h *btHeader, h2 *types.Header) error { if h.Bloom != h2.Bloom { - return fmt.Errorf("Bloom: want: %x have: %x", h.Bloom, h2.Bloom) + return fmt.Errorf("bloom: want: %x have: %x", h.Bloom, h2.Bloom) } if h.Coinbase != h2.Coinbase { - return fmt.Errorf("Coinbase: want: %x have: %x", h.Coinbase, h2.Coinbase) + return fmt.Errorf("coinbase: want: %x have: %x", h.Coinbase, h2.Coinbase) } if h.MixHash != h2.MixDigest { return fmt.Errorf("MixHash: want: %x have: %x", h.MixHash, h2.MixDigest) } if h.Nonce != h2.Nonce { - return fmt.Errorf("Nonce: want: %x have: %x", h.Nonce, h2.Nonce) + return fmt.Errorf("nonce: want: %x have: %x", h.Nonce, h2.Nonce) } if h.Number.Cmp(h2.Number) != 0 { - return fmt.Errorf("Number: want: %v have: %v", h.Number, h2.Number) + return fmt.Errorf("number: want: %v have: %v", h.Number, h2.Number) } if h.ParentHash != h2.ParentHash { - return fmt.Errorf("Parent hash: want: %x have: %x", h.ParentHash, h2.ParentHash) + return fmt.Errorf("parent hash: want: %x have: %x", h.ParentHash, h2.ParentHash) } if h.ReceiptTrie != h2.ReceiptHash { - return fmt.Errorf("Receipt hash: want: %x have: %x", h.ReceiptTrie, h2.ReceiptHash) + return fmt.Errorf("receipt hash: want: %x have: %x", h.ReceiptTrie, h2.ReceiptHash) } if h.TransactionsTrie != h2.TxHash { - return fmt.Errorf("Tx hash: want: %x have: %x", h.TransactionsTrie, h2.TxHash) + return fmt.Errorf("tx hash: want: %x have: %x", h.TransactionsTrie, h2.TxHash) } if h.StateRoot != h2.Root { - return fmt.Errorf("State hash: want: %x have: %x", h.StateRoot, h2.Root) + return fmt.Errorf("state hash: want: %x have: %x", h.StateRoot, h2.Root) } if h.UncleHash != h2.UncleHash { - return fmt.Errorf("Uncle hash: want: %x have: %x", h.UncleHash, h2.UncleHash) + return fmt.Errorf("uncle hash: want: %x have: %x", h.UncleHash, h2.UncleHash) } if !bytes.Equal(h.ExtraData, h2.Extra) { - return fmt.Errorf("Extra data: want: %x have: %x", h.ExtraData, h2.Extra) + return fmt.Errorf("extra data: want: %x have: %x", h.ExtraData, h2.Extra) } if h.Difficulty.Cmp(h2.Difficulty) != 0 { - return fmt.Errorf("Difficulty: want: %v have: %v", h.Difficulty, h2.Difficulty) + return fmt.Errorf("difficulty: want: %v have: %v", h.Difficulty, h2.Difficulty) } if h.GasLimit != h2.GasLimit { - return fmt.Errorf("GasLimit: want: %d have: %d", h.GasLimit, h2.GasLimit) + return fmt.Errorf("gasLimit: want: %d have: %d", h.GasLimit, h2.GasLimit) } if h.GasUsed != h2.GasUsed { - return fmt.Errorf("GasUsed: want: %d have: %d", h.GasUsed, h2.GasUsed) + return fmt.Errorf("gasUsed: want: %d have: %d", h.GasUsed, h2.GasUsed) } if h.Timestamp != h2.Time { - return fmt.Errorf("Timestamp: want: %v have: %v", h.Timestamp, h2.Time) + return fmt.Errorf("timestamp: want: %v have: %v", h.Timestamp, h2.Time) } return nil } @@ -287,7 +309,7 @@ func (t *BlockTest) validateImportedHeaders(cm *core.BlockChain, validBlocks []b // be part of the longest chain until last block is imported. for b := cm.CurrentBlock(); b != nil && b.NumberU64() != 0; b = cm.GetBlockByHash(b.Header().ParentHash) { if err := validateHeader(bmap[b.Hash()].BlockHeader, b.Header()); err != nil { - return fmt.Errorf("Imported block header validation failed: %v", err) + return fmt.Errorf("imported block header validation failed: %v", err) } } return nil diff --git a/tests/difficulty_test.go b/tests/difficulty_test.go index 86533057..8239850b 100644 --- a/tests/difficulty_test.go +++ b/tests/difficulty_test.go @@ -20,8 +20,8 @@ import ( "math/big" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) var ( @@ -55,8 +55,8 @@ func TestDifficulty(t *testing.T) { dt.skipLoad("difficultyMorden\\.json") dt.skipLoad("difficultyOlimpic\\.json") - dt.config("Ropsten", *params.TestnetChainConfig) - dt.config("Morden", *params.TestnetChainConfig) + dt.config("Ropsten", *params.RopstenChainConfig) + dt.config("Morden", *params.RopstenChainConfig) dt.config("Frontier", params.ChainConfig{}) dt.config("Homestead", params.ChainConfig{ @@ -67,21 +67,30 @@ func TestDifficulty(t *testing.T) { ByzantiumBlock: big.NewInt(0), }) - dt.config("Frontier", *params.TestnetChainConfig) + dt.config("Frontier", *params.RopstenChainConfig) dt.config("MainNetwork", mainnetChainConfig) dt.config("CustomMainNetwork", mainnetChainConfig) dt.config("Constantinople", params.ChainConfig{ ConstantinopleBlock: big.NewInt(0), }) + dt.config("EIP2384", params.ChainConfig{ + MuirGlacierBlock: big.NewInt(0), + }) + dt.config("EIP4345", params.ChainConfig{ + ArrowGlacierBlock: big.NewInt(0), + }) + dt.config("EIP5133", params.ChainConfig{ + GrayGlacierBlock: big.NewInt(0), + }) dt.config("difficulty.json", mainnetChainConfig) dt.walk(t, difficultyTestDir, func(t *testing.T, name string, test *DifficultyTest) { - cfg := dt.findConfig(name) + cfg := dt.findConfig(t) if test.ParentDifficulty.Cmp(params.MinimumDifficulty) < 0 { t.Skip("difficulty below minimum") return } - if err := dt.checkFailure(t, name, test.Run(cfg)); err != nil { + if err := dt.checkFailure(t, test.Run(cfg)); err != nil { t.Error(err) } }) diff --git a/tests/difficulty_test_util.go b/tests/difficulty_test_util.go index cbabb8ef..62b978f9 100644 --- a/tests/difficulty_test_util.go +++ b/tests/difficulty_test_util.go @@ -20,14 +20,14 @@ import ( "fmt" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/consensus/ethash" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" ) -//go:generate gencodec -type DifficultyTest -field-override difficultyTestMarshaling -out gen_difficultytest.go +//go:generate go run github.com/fjl/gencodec -type DifficultyTest -field-override difficultyTestMarshaling -out gen_difficultytest.go type DifficultyTest struct { ParentTimestamp uint64 `json:"parentTimestamp"` @@ -65,5 +65,4 @@ func (test *DifficultyTest) Run(config *params.ChainConfig) error { test.CurrentTimestamp, test.CurrentBlockNumber, actual, exp) } return nil - } diff --git a/tests/fuzzers/README.md b/tests/fuzzers/README.md new file mode 100644 index 00000000..7611c536 --- /dev/null +++ b/tests/fuzzers/README.md @@ -0,0 +1,45 @@ +## Fuzzers + +To run a fuzzer locally, you need [go-fuzz](https://github.com/dvyukov/go-fuzz) installed. + +First build a fuzzing-binary out of the selected package: + +``` +(cd ./rlp && CGO_ENABLED=0 go-fuzz-build .) +``` +That command should generate a `rlp-fuzz.zip` in the `rlp/` directory. If you are already in that directory, you can do + +``` +[user@work rlp]$ go-fuzz +2019/11/26 13:36:54 workers: 6, corpus: 3 (3s ago), crashers: 0, restarts: 1/0, execs: 0 (0/sec), cover: 0, uptime: 3s +2019/11/26 13:36:57 workers: 6, corpus: 3 (6s ago), crashers: 0, restarts: 1/0, execs: 0 (0/sec), cover: 1054, uptime: 6s +2019/11/26 13:37:00 workers: 6, corpus: 3 (9s ago), crashers: 0, restarts: 1/8358, execs: 25074 (2786/sec), cover: 1054, uptime: 9s +2019/11/26 13:37:03 workers: 6, corpus: 3 (12s ago), crashers: 0, restarts: 1/8497, execs: 50986 (4249/sec), cover: 1054, uptime: 12s +2019/11/26 13:37:06 workers: 6, corpus: 3 (15s ago), crashers: 0, restarts: 1/9330, execs: 74640 (4976/sec), cover: 1054, uptime: 15s +2019/11/26 13:37:09 workers: 6, corpus: 3 (18s ago), crashers: 0, restarts: 1/9948, execs: 99482 (5527/sec), cover: 1054, uptime: 18s +2019/11/26 13:37:12 workers: 6, corpus: 3 (21s ago), crashers: 0, restarts: 1/9428, execs: 122568 (5836/sec), cover: 1054, uptime: 21s +2019/11/26 13:37:15 workers: 6, corpus: 3 (24s ago), crashers: 0, restarts: 1/9676, execs: 145152 (6048/sec), cover: 1054, uptime: 24s +2019/11/26 13:37:18 workers: 6, corpus: 3 (27s ago), crashers: 0, restarts: 1/9855, execs: 167538 (6205/sec), cover: 1054, uptime: 27s +2019/11/26 13:37:21 workers: 6, corpus: 3 (30s ago), crashers: 0, restarts: 1/9645, execs: 192901 (6430/sec), cover: 1054, uptime: 30s +2019/11/26 13:37:24 workers: 6, corpus: 3 (33s ago), crashers: 0, restarts: 1/9967, execs: 219294 (6645/sec), cover: 1054, uptime: 33s + +``` +Otherwise: +``` +go-fuzz -bin ./rlp/rlp-fuzz.zip +``` + +### Notes + +Once a 'crasher' is found, the fuzzer tries to avoid reporting the same vector twice, so stores the fault in the `suppressions` folder. Thus, if you +e.g. make changes to fix a bug, you should _remove_ all data from the `suppressions`-folder, to verify that the issue is indeed resolved. + +Also, if you have only one and the same exit-point for multiple different types of test, the suppression can make the fuzzer hide different types of errors. So make +sure that each type of failure is unique (for an example, see the rlp fuzzer, where a counter `i` is used to differentiate between failures: + +```golang + if !bytes.Equal(input, output) { + panic(fmt.Sprintf("case %d: encode-decode is not equal, \ninput : %x\noutput: %x", i, input, output)) + } +``` + diff --git a/tests/fuzzers/abi/abifuzzer.go b/tests/fuzzers/abi/abifuzzer.go new file mode 100644 index 00000000..60233d15 --- /dev/null +++ b/tests/fuzzers/abi/abifuzzer.go @@ -0,0 +1,170 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "fmt" + "reflect" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + fuzz "github.com/google/gofuzz" +) + +var ( + names = []string{"_name", "name", "NAME", "name_", "__", "_name_", "n"} + stateMut = []string{"", "pure", "view", "payable"} + stateMutabilites = []*string{&stateMut[0], &stateMut[1], &stateMut[2], &stateMut[3]} + pays = []string{"", "true", "false"} + payables = []*string{&pays[0], &pays[1]} + vNames = []string{"a", "b", "c", "d", "e", "f", "g"} + varNames = append(vNames, names...) + varTypes = []string{"bool", "address", "bytes", "string", + "uint8", "int8", "uint8", "int8", "uint16", "int16", + "uint24", "int24", "uint32", "int32", "uint40", "int40", "uint48", "int48", "uint56", "int56", + "uint64", "int64", "uint72", "int72", "uint80", "int80", "uint88", "int88", "uint96", "int96", + "uint104", "int104", "uint112", "int112", "uint120", "int120", "uint128", "int128", "uint136", "int136", + "uint144", "int144", "uint152", "int152", "uint160", "int160", "uint168", "int168", "uint176", "int176", + "uint184", "int184", "uint192", "int192", "uint200", "int200", "uint208", "int208", "uint216", "int216", + "uint224", "int224", "uint232", "int232", "uint240", "int240", "uint248", "int248", "uint256", "int256", + "bytes1", "bytes2", "bytes3", "bytes4", "bytes5", "bytes6", "bytes7", "bytes8", "bytes9", "bytes10", "bytes11", + "bytes12", "bytes13", "bytes14", "bytes15", "bytes16", "bytes17", "bytes18", "bytes19", "bytes20", "bytes21", + "bytes22", "bytes23", "bytes24", "bytes25", "bytes26", "bytes27", "bytes28", "bytes29", "bytes30", "bytes31", + "bytes32", "bytes"} +) + +func unpackPack(abi abi.ABI, method string, input []byte) ([]interface{}, bool) { + if out, err := abi.Unpack(method, input); err == nil { + _, err := abi.Pack(method, out...) + if err != nil { + // We have some false positives as we can unpack these type successfully, but not pack them + if err.Error() == "abi: cannot use []uint8 as type [0]int8 as argument" || + err.Error() == "abi: cannot use uint8 as type int8 as argument" { + return out, false + } + panic(err) + } + return out, true + } + return nil, false +} + +func packUnpack(abi abi.ABI, method string, input *[]interface{}) bool { + if packed, err := abi.Pack(method, input); err == nil { + outptr := reflect.New(reflect.TypeOf(input)) + err := abi.UnpackIntoInterface(outptr.Interface(), method, packed) + if err != nil { + panic(err) + } + out := outptr.Elem().Interface() + if !reflect.DeepEqual(input, out) { + panic(fmt.Sprintf("unpackPack is not equal, \ninput : %x\noutput: %x", input, out)) + } + return true + } + return false +} + +type args struct { + name string + typ string +} + +func createABI(name string, stateMutability, payable *string, inputs []args) (abi.ABI, error) { + sig := fmt.Sprintf(`[{ "type" : "function", "name" : "%v" `, name) + if stateMutability != nil { + sig += fmt.Sprintf(`, "stateMutability": "%v" `, *stateMutability) + } + if payable != nil { + sig += fmt.Sprintf(`, "payable": %v `, *payable) + } + if len(inputs) > 0 { + sig += `, "inputs" : [ {` + for i, inp := range inputs { + sig += fmt.Sprintf(`"name" : "%v", "type" : "%v" `, inp.name, inp.typ) + if i+1 < len(inputs) { + sig += "," + } + } + sig += "} ]" + sig += `, "outputs" : [ {` + for i, inp := range inputs { + sig += fmt.Sprintf(`"name" : "%v", "type" : "%v" `, inp.name, inp.typ) + if i+1 < len(inputs) { + sig += "," + } + } + sig += "} ]" + } + sig += `}]` + + return abi.JSON(strings.NewReader(sig)) +} + +func runFuzzer(input []byte) int { + good := false + fuzzer := fuzz.NewFromGoFuzz(input) + + name := names[getUInt(fuzzer)%len(names)] + stateM := stateMutabilites[getUInt(fuzzer)%len(stateMutabilites)] + payable := payables[getUInt(fuzzer)%len(payables)] + maxLen := 5 + for k := 1; k < maxLen; k++ { + var arg []args + for i := k; i > 0; i-- { + argName := varNames[i] + argTyp := varTypes[getUInt(fuzzer)%len(varTypes)] + if getUInt(fuzzer)%10 == 0 { + argTyp += "[]" + } else if getUInt(fuzzer)%10 == 0 { + arrayArgs := getUInt(fuzzer)%30 + 1 + argTyp += fmt.Sprintf("[%d]", arrayArgs) + } + arg = append(arg, args{ + name: argName, + typ: argTyp, + }) + } + abi, err := createABI(name, stateM, payable, arg) + if err != nil { + continue + } + structs, b := unpackPack(abi, name, input) + c := packUnpack(abi, name, &structs) + good = good || b || c + } + if good { + return 1 + } + return 0 +} + +func Fuzz(input []byte) int { + return runFuzzer(input) +} + +func getUInt(fuzzer *fuzz.Fuzzer) int { + var i int + fuzzer.Fuzz(&i) + if i < 0 { + i = -i + if i < 0 { + return 0 + } + } + return i +} diff --git a/tests/fuzzers/abi/abifuzzer_test.go b/tests/fuzzers/abi/abifuzzer_test.go new file mode 100644 index 00000000..c66399e1 --- /dev/null +++ b/tests/fuzzers/abi/abifuzzer_test.go @@ -0,0 +1,43 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package abi + +import ( + "testing" +) + +// TestReplicate can be used to replicate crashers from the fuzzing tests. +// Just replace testString with the data in .quoted +func TestReplicate(t *testing.T) { + testString := "\x20\x20\x20\x20\x20\x20\x20\x20\x80\x00\x00\x00\x20\x20\x20\x20\x00" + data := []byte(testString) + runFuzzer(data) +} + +// TestGenerateCorpus can be used to add corpus for the fuzzer. +// Just replace corpusHex with the hexEncoded output you want to add to the fuzzer. +func TestGenerateCorpus(t *testing.T) { + /* + corpusHex := "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + data := common.FromHex(corpusHex) + checksum := sha1.Sum(data) + outf := fmt.Sprintf("corpus/%x", checksum) + if err := os.WriteFile(outf, data, 0777); err != nil { + panic(err) + } + */ +} diff --git a/common/bitutil/compress_fuzz.go b/tests/fuzzers/bitutil/compress_fuzz.go similarity index 68% rename from common/bitutil/compress_fuzz.go rename to tests/fuzzers/bitutil/compress_fuzz.go index 1b87f50e..5903cf2f 100644 --- a/common/bitutil/compress_fuzz.go +++ b/tests/fuzzers/bitutil/compress_fuzz.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 . -// +build gofuzz - package bitutil -import "bytes" +import ( + "bytes" + + "github.com/ethereum/go-ethereum/common/bitutil" +) // Fuzz implements a go-fuzz fuzzer method to test various encoding method // invocations. func Fuzz(data []byte) int { if len(data) == 0 { - return -1 + return 0 } if data[0]%2 == 0 { return fuzzEncode(data[1:]) @@ -35,22 +37,34 @@ func Fuzz(data []byte) int { // fuzzEncode implements a go-fuzz fuzzer method to test the bitset encoding and // decoding algorithm. func fuzzEncode(data []byte) int { - proc, _ := bitsetDecodeBytes(bitsetEncodeBytes(data), len(data)) + proc, _ := bitutil.DecompressBytes(bitutil.CompressBytes(data), len(data)) if !bytes.Equal(data, proc) { panic("content mismatch") } - return 0 + return 1 } // fuzzDecode implements a go-fuzz fuzzer method to test the bit decoding and // reencoding algorithm. func fuzzDecode(data []byte) int { - blob, err := bitsetDecodeBytes(data, 1024) + blob, err := bitutil.DecompressBytes(data, 1024) if err != nil { return 0 } - if comp := bitsetEncodeBytes(blob); !bytes.Equal(comp, data) { + // re-compress it (it's OK if the re-compressed differs from the + // original - the first input may not have been compressed at all) + comp := bitutil.CompressBytes(blob) + if len(comp) > len(blob) { + // After compression, it must be smaller or equal + panic("bad compression") + } + // But decompressing it once again should work + decomp, err := bitutil.DecompressBytes(data, 1024) + if err != nil { + panic(err) + } + if !bytes.Equal(decomp, blob) { panic("content mismatch") } - return 0 + return 1 } diff --git a/tests/fuzzers/bls12381/bls12381_fuzz.go b/tests/fuzzers/bls12381/bls12381_fuzz.go new file mode 100644 index 00000000..a5b4b9e7 --- /dev/null +++ b/tests/fuzzers/bls12381/bls12381_fuzz.go @@ -0,0 +1,304 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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:build gofuzz +// +build gofuzz + +package bls + +import ( + "bytes" + "crypto/rand" + "fmt" + "io" + "math/big" + + gnark "github.com/consensys/gnark-crypto/ecc/bls12-381" + "github.com/consensys/gnark-crypto/ecc/bls12-381/fp" + "github.com/consensys/gnark-crypto/ecc/bls12-381/fr" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto/bls12381" + blst "github.com/supranational/blst/bindings/go" +) + +func FuzzCrossPairing(data []byte) int { + input := bytes.NewReader(data) + + // get random G1 points + kpG1, cpG1, blG1, err := getG1Points(input) + if err != nil { + return 0 + } + + // get random G2 points + kpG2, cpG2, blG2, err := getG2Points(input) + if err != nil { + return 0 + } + + // compute pairing using geth + engine := bls12381.NewPairingEngine() + engine.AddPair(kpG1, kpG2) + kResult := engine.Result() + + // compute pairing using gnark + cResult, err := gnark.Pair([]gnark.G1Affine{*cpG1}, []gnark.G2Affine{*cpG2}) + if err != nil { + panic(fmt.Sprintf("gnark/bls12381 encountered error: %v", err)) + } + + // compare result + if !(bytes.Equal(cResult.Marshal(), bls12381.NewGT().ToBytes(kResult))) { + panic("pairing mismatch gnark / geth ") + } + + // compute pairing using blst + blstResult := blst.Fp12MillerLoop(blG2, blG1) + blstResult.FinalExp() + res := massageBLST(blstResult.ToBendian()) + if !(bytes.Equal(res, bls12381.NewGT().ToBytes(kResult))) { + panic("pairing mismatch blst / geth") + } + + return 1 +} + +func massageBLST(in []byte) []byte { + out := make([]byte, len(in)) + len := 12 * 48 + // 1 + copy(out[0:], in[len-1*48:len]) + copy(out[1*48:], in[len-2*48:len-1*48]) + // 2 + copy(out[6*48:], in[len-3*48:len-2*48]) + copy(out[7*48:], in[len-4*48:len-3*48]) + // 3 + copy(out[2*48:], in[len-5*48:len-4*48]) + copy(out[3*48:], in[len-6*48:len-5*48]) + // 4 + copy(out[8*48:], in[len-7*48:len-6*48]) + copy(out[9*48:], in[len-8*48:len-7*48]) + // 5 + copy(out[4*48:], in[len-9*48:len-8*48]) + copy(out[5*48:], in[len-10*48:len-9*48]) + // 6 + copy(out[10*48:], in[len-11*48:len-10*48]) + copy(out[11*48:], in[len-12*48:len-11*48]) + return out +} + +func FuzzCrossG1Add(data []byte) int { + input := bytes.NewReader(data) + + // get random G1 points + kp1, cp1, bl1, err := getG1Points(input) + if err != nil { + return 0 + } + + // get random G1 points + kp2, cp2, bl2, err := getG1Points(input) + if err != nil { + return 0 + } + + // compute kp = kp1 + kp2 + g1 := bls12381.NewG1() + kp := bls12381.PointG1{} + g1.Add(&kp, kp1, kp2) + + // compute cp = cp1 + cp2 + _cp1 := new(gnark.G1Jac).FromAffine(cp1) + _cp2 := new(gnark.G1Jac).FromAffine(cp2) + cp := new(gnark.G1Affine).FromJacobian(_cp1.AddAssign(_cp2)) + + // compare result + if !(bytes.Equal(cp.Marshal(), g1.ToBytes(&kp))) { + panic("G1 point addition mismatch gnark / geth ") + } + + bl3 := blst.P1AffinesAdd([]*blst.P1Affine{bl1, bl2}) + if !(bytes.Equal(cp.Marshal(), bl3.Serialize())) { + panic("G1 point addition mismatch blst / geth ") + } + + return 1 +} + +func FuzzCrossG2Add(data []byte) int { + input := bytes.NewReader(data) + + // get random G2 points + kp1, cp1, bl1, err := getG2Points(input) + if err != nil { + return 0 + } + + // get random G2 points + kp2, cp2, bl2, err := getG2Points(input) + if err != nil { + return 0 + } + + // compute kp = kp1 + kp2 + g2 := bls12381.NewG2() + kp := bls12381.PointG2{} + g2.Add(&kp, kp1, kp2) + + // compute cp = cp1 + cp2 + _cp1 := new(gnark.G2Jac).FromAffine(cp1) + _cp2 := new(gnark.G2Jac).FromAffine(cp2) + cp := new(gnark.G2Affine).FromJacobian(_cp1.AddAssign(_cp2)) + + // compare result + if !(bytes.Equal(cp.Marshal(), g2.ToBytes(&kp))) { + panic("G2 point addition mismatch gnark / geth ") + } + + bl3 := blst.P2AffinesAdd([]*blst.P2Affine{bl1, bl2}) + if !(bytes.Equal(cp.Marshal(), bl3.Serialize())) { + panic("G1 point addition mismatch blst / geth ") + } + + return 1 +} + +func FuzzCrossG1MultiExp(data []byte) int { + var ( + input = bytes.NewReader(data) + gethScalars []*big.Int + gnarkScalars []fr.Element + gethPoints []*bls12381.PointG1 + gnarkPoints []gnark.G1Affine + ) + // n random scalars (max 17) + for i := 0; i < 17; i++ { + // note that geth/crypto/bls12381 works only with scalars <= 32bytes + s, err := randomScalar(input, fr.Modulus()) + if err != nil { + break + } + // get a random G1 point as basis + kp1, cp1, _, err := getG1Points(input) + if err != nil { + break + } + gethScalars = append(gethScalars, s) + var gnarkScalar = &fr.Element{} + gnarkScalar = gnarkScalar.SetBigInt(s).FromMont() + gnarkScalars = append(gnarkScalars, *gnarkScalar) + + gethPoints = append(gethPoints, new(bls12381.PointG1).Set(kp1)) + gnarkPoints = append(gnarkPoints, *cp1) + } + if len(gethScalars) == 0 { + return 0 + } + // compute multi exponentiation + g1 := bls12381.NewG1() + kp := bls12381.PointG1{} + if _, err := g1.MultiExp(&kp, gethPoints, gethScalars); err != nil { + panic(fmt.Sprintf("G1 multi exponentiation errored (geth): %v", err)) + } + // note that geth/crypto/bls12381.MultiExp mutates the scalars slice (and sets all the scalars to zero) + + // gnark multi exp + cp := new(gnark.G1Affine) + cp.MultiExp(gnarkPoints, gnarkScalars) + + // compare result + if !(bytes.Equal(cp.Marshal(), g1.ToBytes(&kp))) { + panic("G1 multi exponentiation mismatch gnark / geth ") + } + + return 1 +} + +func getG1Points(input io.Reader) (*bls12381.PointG1, *gnark.G1Affine, *blst.P1Affine, error) { + // sample a random scalar + s, err := randomScalar(input, fp.Modulus()) + if err != nil { + return nil, nil, nil, err + } + + // compute a random point + cp := new(gnark.G1Affine) + _, _, g1Gen, _ := gnark.Generators() + cp.ScalarMultiplication(&g1Gen, s) + cpBytes := cp.Marshal() + + // marshal gnark point -> geth point + g1 := bls12381.NewG1() + kp, err := g1.FromBytes(cpBytes) + if err != nil { + panic(fmt.Sprintf("Could not marshal gnark.G1 -> geth.G1: %v", err)) + } + if !bytes.Equal(g1.ToBytes(kp), cpBytes) { + panic("bytes(gnark.G1) != bytes(geth.G1)") + } + + // marshal gnark point -> blst point + scalar := new(blst.Scalar).FromBEndian(common.LeftPadBytes(s.Bytes(), 32)) + p1 := new(blst.P1Affine).From(scalar) + if !bytes.Equal(p1.Serialize(), cpBytes) { + panic("bytes(blst.G1) != bytes(geth.G1)") + } + + return kp, cp, p1, nil +} + +func getG2Points(input io.Reader) (*bls12381.PointG2, *gnark.G2Affine, *blst.P2Affine, error) { + // sample a random scalar + s, err := randomScalar(input, fp.Modulus()) + if err != nil { + return nil, nil, nil, err + } + + // compute a random point + cp := new(gnark.G2Affine) + _, _, _, g2Gen := gnark.Generators() + cp.ScalarMultiplication(&g2Gen, s) + cpBytes := cp.Marshal() + + // marshal gnark point -> geth point + g2 := bls12381.NewG2() + kp, err := g2.FromBytes(cpBytes) + if err != nil { + panic(fmt.Sprintf("Could not marshal gnark.G2 -> geth.G2: %v", err)) + } + if !bytes.Equal(g2.ToBytes(kp), cpBytes) { + panic("bytes(gnark.G2) != bytes(geth.G2)") + } + + // marshal gnark point -> blst point + // Left pad the scalar to 32 bytes + scalar := new(blst.Scalar).FromBEndian(common.LeftPadBytes(s.Bytes(), 32)) + p2 := new(blst.P2Affine).From(scalar) + if !bytes.Equal(p2.Serialize(), cpBytes) { + panic("bytes(blst.G2) != bytes(geth.G2)") + } + + return kp, cp, p2, nil +} + +func randomScalar(r io.Reader, max *big.Int) (k *big.Int, err error) { + for { + k, err = rand.Int(r, max) + if err != nil || k.Sign() > 0 { + return + } + } +} diff --git a/tests/fuzzers/bls12381/precompile_fuzzer.go b/tests/fuzzers/bls12381/precompile_fuzzer.go new file mode 100644 index 00000000..bc3c4565 --- /dev/null +++ b/tests/fuzzers/bls12381/precompile_fuzzer.go @@ -0,0 +1,101 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bls + +import ( + "bytes" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" +) + +const ( + blsG1Add = byte(10) + blsG1Mul = byte(11) + blsG1MultiExp = byte(12) + blsG2Add = byte(13) + blsG2Mul = byte(14) + blsG2MultiExp = byte(15) + blsPairing = byte(16) + blsMapG1 = byte(17) + blsMapG2 = byte(18) +) + +func FuzzG1Add(data []byte) int { return fuzz(blsG1Add, data) } +func FuzzG1Mul(data []byte) int { return fuzz(blsG1Mul, data) } +func FuzzG1MultiExp(data []byte) int { return fuzz(blsG1MultiExp, data) } +func FuzzG2Add(data []byte) int { return fuzz(blsG2Add, data) } +func FuzzG2Mul(data []byte) int { return fuzz(blsG2Mul, data) } +func FuzzG2MultiExp(data []byte) int { return fuzz(blsG2MultiExp, data) } +func FuzzPairing(data []byte) int { return fuzz(blsPairing, data) } +func FuzzMapG1(data []byte) int { return fuzz(blsMapG1, data) } +func FuzzMapG2(data []byte) int { return fuzz(blsMapG2, data) } + +func checkInput(id byte, inputLen int) bool { + switch id { + case blsG1Add: + return inputLen == 256 + case blsG1Mul: + return inputLen == 160 + case blsG1MultiExp: + return inputLen%160 == 0 + case blsG2Add: + return inputLen == 512 + case blsG2Mul: + return inputLen == 288 + case blsG2MultiExp: + return inputLen%288 == 0 + case blsPairing: + return inputLen%384 == 0 + case blsMapG1: + return inputLen == 64 + case blsMapG2: + return inputLen == 128 + } + panic("programmer error") +} + +// The fuzzer functions must return +// 1 if the fuzzer should increase priority of the +// given input during subsequent fuzzing (for example, the input is lexically +// correct and was parsed successfully); +// -1 if the input must not be added to corpus even if gives new coverage; and +// 0 otherwise +// other values are reserved for future use. +func fuzz(id byte, data []byte) int { + // Even on bad input, it should not crash, so we still test the gas calc + precompile := vm.PrecompiledContractsBLS[common.BytesToAddress([]byte{id})] + gas := precompile.RequiredGas(data) + if !checkInput(id, len(data)) { + return 0 + } + // If the gas cost is too large (25M), bail out + if gas > 25*1000*1000 { + return 0 + } + cpy := make([]byte, len(data)) + copy(cpy, data) + _, err := precompile.Run(cpy) + if !bytes.Equal(cpy, data) { + panic(fmt.Sprintf("input data modified, precompile %d: %x %x", id, data, cpy)) + } + if err != nil { + return 0 + } + return 1 +} diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip new file mode 100644 index 00000000..16498c1c Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip new file mode 100644 index 00000000..57f9d669 Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip new file mode 100644 index 00000000..7271f040 Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip new file mode 100644 index 00000000..cd5206ca Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip new file mode 100644 index 00000000..f784a5a3 Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip new file mode 100644 index 00000000..c205117a Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip new file mode 100644 index 00000000..70382fbe Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip new file mode 100644 index 00000000..67adc5b5 Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip new file mode 100644 index 00000000..e24d2b0a Binary files /dev/null and b/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip differ diff --git a/tests/fuzzers/bn256/bn256_fuzz.go b/tests/fuzzers/bn256/bn256_fuzz.go new file mode 100644 index 00000000..1ce20571 --- /dev/null +++ b/tests/fuzzers/bn256/bn256_fuzz.go @@ -0,0 +1,169 @@ +// 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 . + +//go:build gofuzz +// +build gofuzz + +package bn256 + +import ( + "bytes" + "fmt" + "io" + "math/big" + + "github.com/consensys/gnark-crypto/ecc/bn254" + cloudflare "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" + google "github.com/ethereum/go-ethereum/crypto/bn256/google" +) + +func getG1Points(input io.Reader) (*cloudflare.G1, *google.G1, *bn254.G1Affine) { + _, xc, err := cloudflare.RandomG1(input) + if err != nil { + // insufficient input + return nil, nil, nil + } + xg := new(google.G1) + if _, err := xg.Unmarshal(xc.Marshal()); err != nil { + panic(fmt.Sprintf("Could not marshal cloudflare -> google: %v", err)) + } + xs := new(bn254.G1Affine) + if err := xs.Unmarshal(xc.Marshal()); err != nil { + panic(fmt.Sprintf("Could not marshal cloudflare -> gnark: %v", err)) + } + return xc, xg, xs +} + +func getG2Points(input io.Reader) (*cloudflare.G2, *google.G2, *bn254.G2Affine) { + _, xc, err := cloudflare.RandomG2(input) + if err != nil { + // insufficient input + return nil, nil, nil + } + xg := new(google.G2) + if _, err := xg.Unmarshal(xc.Marshal()); err != nil { + panic(fmt.Sprintf("Could not marshal cloudflare -> google: %v", err)) + } + xs := new(bn254.G2Affine) + if err := xs.Unmarshal(xc.Marshal()); err != nil { + panic(fmt.Sprintf("Could not marshal cloudflare -> gnark: %v", err)) + } + return xc, xg, xs +} + +// FuzzAdd fuzzez bn256 addition between the Google and Cloudflare libraries. +func FuzzAdd(data []byte) int { + input := bytes.NewReader(data) + xc, xg, xs := getG1Points(input) + if xc == nil { + return 0 + } + yc, yg, ys := getG1Points(input) + if yc == nil { + return 0 + } + // Ensure both libs can parse the second curve point + // Add the two points and ensure they result in the same output + rc := new(cloudflare.G1) + rc.Add(xc, yc) + + rg := new(google.G1) + rg.Add(xg, yg) + + tmpX := new(bn254.G1Jac).FromAffine(xs) + tmpY := new(bn254.G1Jac).FromAffine(ys) + rs := new(bn254.G1Affine).FromJacobian(tmpX.AddAssign(tmpY)) + + if !bytes.Equal(rc.Marshal(), rg.Marshal()) { + panic("add mismatch: cloudflare/google") + } + + if !bytes.Equal(rc.Marshal(), rs.Marshal()) { + panic("add mismatch: cloudflare/gnark") + } + return 1 +} + +// FuzzMul fuzzez bn256 scalar multiplication between the Google and Cloudflare +// libraries. +func FuzzMul(data []byte) int { + input := bytes.NewReader(data) + pc, pg, ps := getG1Points(input) + if pc == nil { + return 0 + } + // Add the two points and ensure they result in the same output + remaining := input.Len() + if remaining == 0 { + return 0 + } + if remaining > 128 { + // The evm only ever uses 32 byte integers, we need to cap this otherwise + // we run into slow exec. A 236Kb byte integer cause oss-fuzz to report it as slow. + // 128 bytes should be fine though + return 0 + } + buf := make([]byte, remaining) + input.Read(buf) + + rc := new(cloudflare.G1) + rc.ScalarMult(pc, new(big.Int).SetBytes(buf)) + + rg := new(google.G1) + rg.ScalarMult(pg, new(big.Int).SetBytes(buf)) + + rs := new(bn254.G1Jac) + psJac := new(bn254.G1Jac).FromAffine(ps) + rs.ScalarMultiplication(psJac, new(big.Int).SetBytes(buf)) + rsAffine := new(bn254.G1Affine).FromJacobian(rs) + + if !bytes.Equal(rc.Marshal(), rg.Marshal()) { + panic("scalar mul mismatch: cloudflare/google") + } + if !bytes.Equal(rc.Marshal(), rsAffine.Marshal()) { + panic("scalar mul mismatch: cloudflare/gnark") + } + return 1 +} + +func FuzzPair(data []byte) int { + input := bytes.NewReader(data) + pc, pg, ps := getG1Points(input) + if pc == nil { + return 0 + } + tc, tg, ts := getG2Points(input) + if tc == nil { + return 0 + } + + // Pair the two points and ensure they result in the same output + clPair := cloudflare.Pair(pc, tc).Marshal() + gPair := google.Pair(pg, tg).Marshal() + if !bytes.Equal(clPair, gPair) { + panic("pairing mismatch: cloudflare/google") + } + + cPair, err := bn254.Pair([]bn254.G1Affine{*ps}, []bn254.G2Affine{*ts}) + if err != nil { + panic(fmt.Sprintf("gnark/bn254 encountered error: %v", err)) + } + if !bytes.Equal(clPair, cPair.Marshal()) { + panic("pairing mismatch: cloudflare/gnark") + } + + return 1 +} diff --git a/tests/fuzzers/difficulty/debug/main.go b/tests/fuzzers/difficulty/debug/main.go new file mode 100644 index 00000000..70cf0925 --- /dev/null +++ b/tests/fuzzers/difficulty/debug/main.go @@ -0,0 +1,38 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/tests/fuzzers/difficulty" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug ") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + difficulty.Fuzz(data) +} diff --git a/tests/fuzzers/difficulty/difficulty-fuzz.go b/tests/fuzzers/difficulty/difficulty-fuzz.go new file mode 100644 index 00000000..2112abac --- /dev/null +++ b/tests/fuzzers/difficulty/difficulty-fuzz.go @@ -0,0 +1,144 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package difficulty + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "math/big" + + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/types" +) + +type fuzzer struct { + input io.Reader + exhausted bool +} + +func (f *fuzzer) read(size int) []byte { + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +func (f *fuzzer) readSlice(min, max int) []byte { + var a uint16 + binary.Read(f.input, binary.LittleEndian, &a) + size := min + int(a)%(max-min) + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +func (f *fuzzer) readUint64(min, max uint64) uint64 { + if min == max { + return min + } + var a uint64 + if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { + f.exhausted = true + } + a = min + a%(max-min) + return a +} +func (f *fuzzer) readBool() bool { + return f.read(1)[0]&0x1 == 0 +} + +// The function must return +// 1 if the fuzzer should increase priority of the +// given input during subsequent fuzzing (for example, the input is lexically +// correct and was parsed successfully); +// -1 if the input must not be added to corpus even if gives new coverage; and +// 0 otherwise +// other values are reserved for future use. +func Fuzz(data []byte) int { + f := fuzzer{ + input: bytes.NewReader(data), + exhausted: false, + } + return f.fuzz() +} + +var minDifficulty = big.NewInt(0x2000) + +type calculator func(time uint64, parent *types.Header) *big.Int + +func (f *fuzzer) fuzz() int { + // A parent header + header := &types.Header{} + if f.readBool() { + header.UncleHash = types.EmptyUncleHash + } + // Difficulty can range between 0x2000 (2 bytes) and up to 32 bytes + { + diff := new(big.Int).SetBytes(f.readSlice(2, 32)) + if diff.Cmp(minDifficulty) < 0 { + diff.Set(minDifficulty) + } + header.Difficulty = diff + } + // Number can range between 0 and up to 32 bytes (but not so that the child exceeds it) + { + // However, if we use astronomic numbers, then the bomb exp karatsuba calculation + // in the legacy methods) + // times out, so we limit it to fit within reasonable bounds + number := new(big.Int).SetBytes(f.readSlice(0, 4)) // 4 bytes: 32 bits: block num max 4 billion + header.Number = number + } + // Both parent and child time must fit within uint64 + var time uint64 + { + childTime := f.readUint64(1, 0xFFFFFFFFFFFFFFFF) + //fmt.Printf("childTime: %x\n",childTime) + delta := f.readUint64(1, childTime) + //fmt.Printf("delta: %v\n", delta) + pTime := childTime - delta + header.Time = pTime + time = childTime + } + // Bomb delay will never exceed uint64 + bombDelay := new(big.Int).SetUint64(f.readUint64(1, 0xFFFFFFFFFFFFFFFe)) + + if f.exhausted { + return 0 + } + + for i, pair := range []struct { + bigFn calculator + u256Fn calculator + }{ + {ethash.FrontierDifficultyCalculator, ethash.CalcDifficultyFrontierU256}, + {ethash.HomesteadDifficultyCalculator, ethash.CalcDifficultyHomesteadU256}, + {ethash.DynamicDifficultyCalculator(bombDelay), ethash.MakeDifficultyCalculatorU256(bombDelay)}, + } { + want := pair.bigFn(time, header) + have := pair.u256Fn(time, header) + if want.Cmp(have) != 0 { + panic(fmt.Sprintf("pair %d: want %x have %x\nparent.Number: %x\np.Time: %x\nc.Time: %x\nBombdelay: %v\n", i, want, have, + header.Number, header.Time, time, bombDelay)) + } + } + return 1 +} diff --git a/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 b/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 new file mode 100644 index 00000000..1c0ecf52 --- /dev/null +++ b/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 @@ -0,0 +1 @@ +ns, \ No newline at end of file diff --git a/tests/fuzzers/keystore/keystore-fuzzer.go b/tests/fuzzers/keystore/keystore-fuzzer.go new file mode 100644 index 00000000..e3bcae92 --- /dev/null +++ b/tests/fuzzers/keystore/keystore-fuzzer.go @@ -0,0 +1,37 @@ +// 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 keystore + +import ( + "os" + + "github.com/ethereum/go-ethereum/accounts/keystore" +) + +func Fuzz(input []byte) int { + ks := keystore.NewKeyStore("/tmp/ks", keystore.LightScryptN, keystore.LightScryptP) + + a, err := ks.NewAccount(string(input)) + if err != nil { + panic(err) + } + if err := ks.Unlock(a, string(input)); err != nil { + panic(err) + } + os.Remove(a.URL.Path) + return 1 +} diff --git a/tests/vm_test.go b/tests/fuzzers/les/debug/main.go similarity index 59% rename from tests/vm_test.go rename to tests/fuzzers/les/debug/main.go index b13b2e0b..77a61270 100644 --- a/tests/vm_test.go +++ b/tests/fuzzers/les/debug/main.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2020 The go-ethereum 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,23 +14,27 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package tests +package main import ( - "testing" + "fmt" + "os" - "github.com/cryptoecc/ETH-ECC/core/vm" + "github.com/ethereum/go-ethereum/tests/fuzzers/les" ) -func TestVM(t *testing.T) { - t.Parallel() - vmt := new(testMatcher) - vmt.slow("^vmPerformance") - vmt.fails("^vmSystemOperationsTest.json/createNameRegistrator$", "fails without parallel execution") - - vmt.walk(t, vmTestDir, func(t *testing.T, name string, test *VMTest) { - withTrace(t, test.json.Exec.GasLimit, func(vmconfig vm.Config) error { - return vmt.checkFailure(t, name, test.Run(vmconfig)) - }) - }) +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug \n") + fmt.Fprintf(os.Stderr, "Example\n") + fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + les.Fuzz(data) } diff --git a/tests/fuzzers/les/les-fuzzer.go b/tests/fuzzers/les/les-fuzzer.go new file mode 100644 index 00000000..bb50da2b --- /dev/null +++ b/tests/fuzzers/les/les-fuzzer.go @@ -0,0 +1,407 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "encoding/binary" + "io" + "math/big" + + "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" + l "github.com/ethereum/go-ethereum/les" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +var ( + bankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + bankAddr = crypto.PubkeyToAddress(bankKey.PublicKey) + bankFunds = new(big.Int).Mul(big.NewInt(100), big.NewInt(params.Ether)) + + testChainLen = 256 + testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") + + chain *core.BlockChain + addrHashes []common.Hash + txHashes []common.Hash + + chtTrie *trie.Trie + bloomTrie *trie.Trie + chtKeys [][]byte + bloomKeys [][]byte +) + +func makechain() (bc *core.BlockChain, addrHashes, txHashes []common.Hash) { + db := rawdb.NewMemoryDatabase() + gspec := core.Genesis{ + Config: params.TestChainConfig, + Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, + GasLimit: 100000000, + } + genesis := gspec.MustCommit(db) + signer := types.HomesteadSigner{} + blocks, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, testChainLen, + func(i int, gen *core.BlockGen) { + var ( + tx *types.Transaction + addr common.Address + ) + nonce := uint64(i) + if i%4 == 0 { + tx, _ = types.SignTx(types.NewContractCreation(nonce, big.NewInt(0), 200000, big.NewInt(0), testContractCode), signer, bankKey) + addr = crypto.CreateAddress(bankAddr, nonce) + } else { + addr = common.BigToAddress(big.NewInt(int64(i))) + tx, _ = types.SignTx(types.NewTransaction(nonce, addr, big.NewInt(10000), params.TxGas, big.NewInt(params.GWei), nil), signer, bankKey) + } + gen.AddTx(tx) + addrHashes = append(addrHashes, crypto.Keccak256Hash(addr[:])) + txHashes = append(txHashes, tx.Hash()) + }) + bc, _ = core.NewBlockChain(db, nil, &gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + if _, err := bc.InsertChain(blocks); err != nil { + panic(err) + } + return +} + +func makeTries() (chtTrie *trie.Trie, bloomTrie *trie.Trie, chtKeys, bloomKeys [][]byte) { + chtTrie = trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase())) + bloomTrie = trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase())) + for i := 0; i < testChainLen; i++ { + // The element in CHT is -> + key := make([]byte, 8) + binary.BigEndian.PutUint64(key, uint64(i+1)) + chtTrie.Update(key, []byte{0x1, 0xf}) + chtKeys = append(chtKeys, key) + + // The element in Bloom trie is <2 byte bit index> + -> bloom + key2 := make([]byte, 10) + binary.BigEndian.PutUint64(key2[2:], uint64(i+1)) + bloomTrie.Update(key2, []byte{0x2, 0xe}) + bloomKeys = append(bloomKeys, key2) + } + return +} + +func init() { + chain, addrHashes, txHashes = makechain() + chtTrie, bloomTrie, chtKeys, bloomKeys = makeTries() +} + +type fuzzer struct { + chain *core.BlockChain + pool *core.TxPool + + chainLen int + addr, txs []common.Hash + nonce uint64 + + chtKeys [][]byte + bloomKeys [][]byte + chtTrie *trie.Trie + bloomTrie *trie.Trie + + input io.Reader + exhausted bool +} + +func newFuzzer(input []byte) *fuzzer { + return &fuzzer{ + chain: chain, + chainLen: testChainLen, + addr: addrHashes, + txs: txHashes, + chtTrie: chtTrie, + bloomTrie: bloomTrie, + chtKeys: chtKeys, + bloomKeys: bloomKeys, + nonce: uint64(len(txHashes)), + pool: core.NewTxPool(core.DefaultTxPoolConfig, params.TestChainConfig, chain), + input: bytes.NewReader(input), + } +} + +func (f *fuzzer) read(size int) []byte { + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +func (f *fuzzer) randomByte() byte { + d := f.read(1) + return d[0] +} + +func (f *fuzzer) randomBool() bool { + d := f.read(1) + return d[0]&1 == 1 +} + +func (f *fuzzer) randomInt(max int) int { + if max == 0 { + return 0 + } + if max <= 256 { + return int(f.randomByte()) % max + } + var a uint16 + if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { + f.exhausted = true + } + return int(a % uint16(max)) +} + +func (f *fuzzer) randomX(max int) uint64 { + var a uint16 + if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { + f.exhausted = true + } + if a < 0x8000 { + return uint64(a%uint16(max+1)) - 1 + } + return (uint64(1)<<(a%64+1) - 1) & (uint64(a) * 343897772345826595) +} + +func (f *fuzzer) randomBlockHash() common.Hash { + h := f.chain.GetCanonicalHash(uint64(f.randomInt(3 * f.chainLen))) + if h != (common.Hash{}) { + return h + } + return common.BytesToHash(f.read(common.HashLength)) +} + +func (f *fuzzer) randomAddrHash() []byte { + i := f.randomInt(3 * len(f.addr)) + if i < len(f.addr) { + return f.addr[i].Bytes() + } + return f.read(common.HashLength) +} + +func (f *fuzzer) randomCHTTrieKey() []byte { + i := f.randomInt(3 * len(f.chtKeys)) + if i < len(f.chtKeys) { + return f.chtKeys[i] + } + return f.read(8) +} + +func (f *fuzzer) randomBloomTrieKey() []byte { + i := f.randomInt(3 * len(f.bloomKeys)) + if i < len(f.bloomKeys) { + return f.bloomKeys[i] + } + return f.read(10) +} + +func (f *fuzzer) randomTxHash() common.Hash { + i := f.randomInt(3 * len(f.txs)) + if i < len(f.txs) { + return f.txs[i] + } + return common.BytesToHash(f.read(common.HashLength)) +} + +func (f *fuzzer) BlockChain() *core.BlockChain { + return f.chain +} + +func (f *fuzzer) TxPool() *core.TxPool { + return f.pool +} + +func (f *fuzzer) ArchiveMode() bool { + return false +} + +func (f *fuzzer) AddTxsSync() bool { + return false +} + +func (f *fuzzer) GetHelperTrie(typ uint, index uint64) *trie.Trie { + if typ == 0 { + return f.chtTrie + } else if typ == 1 { + return f.bloomTrie + } + return nil +} + +type dummyMsg struct { + data []byte +} + +func (d dummyMsg) Decode(val interface{}) error { + return rlp.DecodeBytes(d.data, val) +} + +func (f *fuzzer) doFuzz(msgCode uint64, packet interface{}) { + enc, err := rlp.EncodeToBytes(packet) + if err != nil { + panic(err) + } + version := f.randomInt(3) + 2 // [LES2, LES3, LES4] + peer, closeFn := l.NewFuzzerPeer(version) + defer closeFn() + fn, _, _, err := l.Les3[msgCode].Handle(dummyMsg{enc}) + if err != nil { + panic(err) + } + fn(f, peer, func() bool { return true }) +} + +func Fuzz(input []byte) int { + // We expect some large inputs + if len(input) < 100 { + return -1 + } + f := newFuzzer(input) + if f.exhausted { + return -1 + } + for !f.exhausted { + switch f.randomInt(8) { + case 0: + req := &l.GetBlockHeadersPacket{ + Query: l.GetBlockHeadersData{ + Amount: f.randomX(l.MaxHeaderFetch + 1), + Skip: f.randomX(10), + Reverse: f.randomBool(), + }, + } + if f.randomBool() { + req.Query.Origin.Hash = f.randomBlockHash() + } else { + req.Query.Origin.Number = uint64(f.randomInt(f.chainLen * 2)) + } + f.doFuzz(l.GetBlockHeadersMsg, req) + + case 1: + req := &l.GetBlockBodiesPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxBodyFetch+1))} + for i := range req.Hashes { + req.Hashes[i] = f.randomBlockHash() + } + f.doFuzz(l.GetBlockBodiesMsg, req) + + case 2: + req := &l.GetCodePacket{Reqs: make([]l.CodeReq, f.randomInt(l.MaxCodeFetch+1))} + for i := range req.Reqs { + req.Reqs[i] = l.CodeReq{ + BHash: f.randomBlockHash(), + AccKey: f.randomAddrHash(), + } + } + f.doFuzz(l.GetCodeMsg, req) + + case 3: + req := &l.GetReceiptsPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxReceiptFetch+1))} + for i := range req.Hashes { + req.Hashes[i] = f.randomBlockHash() + } + f.doFuzz(l.GetReceiptsMsg, req) + + case 4: + req := &l.GetProofsPacket{Reqs: make([]l.ProofReq, f.randomInt(l.MaxProofsFetch+1))} + for i := range req.Reqs { + if f.randomBool() { + req.Reqs[i] = l.ProofReq{ + BHash: f.randomBlockHash(), + AccKey: f.randomAddrHash(), + Key: f.randomAddrHash(), + FromLevel: uint(f.randomX(3)), + } + } else { + req.Reqs[i] = l.ProofReq{ + BHash: f.randomBlockHash(), + Key: f.randomAddrHash(), + FromLevel: uint(f.randomX(3)), + } + } + } + f.doFuzz(l.GetProofsV2Msg, req) + + case 5: + req := &l.GetHelperTrieProofsPacket{Reqs: make([]l.HelperTrieReq, f.randomInt(l.MaxHelperTrieProofsFetch+1))} + for i := range req.Reqs { + switch f.randomInt(3) { + case 0: + // Canonical hash trie + req.Reqs[i] = l.HelperTrieReq{ + Type: 0, + TrieIdx: f.randomX(3), + Key: f.randomCHTTrieKey(), + FromLevel: uint(f.randomX(3)), + AuxReq: uint(2), + } + case 1: + // Bloom trie + req.Reqs[i] = l.HelperTrieReq{ + Type: 1, + TrieIdx: f.randomX(3), + Key: f.randomBloomTrieKey(), + FromLevel: uint(f.randomX(3)), + AuxReq: 0, + } + default: + // Random trie + req.Reqs[i] = l.HelperTrieReq{ + Type: 2, + TrieIdx: f.randomX(3), + Key: f.randomCHTTrieKey(), + FromLevel: uint(f.randomX(3)), + AuxReq: 0, + } + } + } + f.doFuzz(l.GetHelperTrieProofsMsg, req) + + case 6: + req := &l.SendTxPacket{Txs: make([]*types.Transaction, f.randomInt(l.MaxTxSend+1))} + signer := types.HomesteadSigner{} + for i := range req.Txs { + var nonce uint64 + if f.randomBool() { + nonce = uint64(f.randomByte()) + } else { + nonce = f.nonce + f.nonce += 1 + } + req.Txs[i], _ = types.SignTx(types.NewTransaction(nonce, common.Address{}, big.NewInt(10000), params.TxGas, big.NewInt(1000000000*int64(f.randomByte())), nil), signer, bankKey) + } + f.doFuzz(l.SendTxV2Msg, req) + + case 7: + req := &l.GetTxStatusPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxTxStatus+1))} + for i := range req.Hashes { + req.Hashes[i] = f.randomTxHash() + } + f.doFuzz(l.GetTxStatusMsg, req) + } + } + return 0 +} diff --git a/tests/fuzzers/rangeproof/corpus/1c14030f26872e57bf1481084f151d71eed8161c-1 b/tests/fuzzers/rangeproof/corpus/1c14030f26872e57bf1481084f151d71eed8161c-1 new file mode 100644 index 00000000..31c08baf Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/1c14030f26872e57bf1481084f151d71eed8161c-1 differ diff --git a/tests/fuzzers/rangeproof/corpus/27e54254422543060a13ea8a4bc913d768e4adb6-2 b/tests/fuzzers/rangeproof/corpus/27e54254422543060a13ea8a4bc913d768e4adb6-2 new file mode 100644 index 00000000..7bce13ef Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/27e54254422543060a13ea8a4bc913d768e4adb6-2 differ diff --git a/tests/fuzzers/rangeproof/corpus/6bfc2cbe2d7a43361e240118439785445a0fdfb7-5 b/tests/fuzzers/rangeproof/corpus/6bfc2cbe2d7a43361e240118439785445a0fdfb7-5 new file mode 100644 index 00000000..613e76a0 Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/6bfc2cbe2d7a43361e240118439785445a0fdfb7-5 differ diff --git a/tests/fuzzers/rangeproof/corpus/a67e63bc0c0004bd009944a6061297cb7d4ac238-1 b/tests/fuzzers/rangeproof/corpus/a67e63bc0c0004bd009944a6061297cb7d4ac238-1 new file mode 100644 index 00000000..805ad8df Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/a67e63bc0c0004bd009944a6061297cb7d4ac238-1 differ diff --git a/tests/fuzzers/rangeproof/corpus/ae892bbae0a843950bc8316496e595b1a194c009-4 b/tests/fuzzers/rangeproof/corpus/ae892bbae0a843950bc8316496e595b1a194c009-4 new file mode 100644 index 00000000..605acf81 Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/ae892bbae0a843950bc8316496e595b1a194c009-4 differ diff --git a/tests/fuzzers/rangeproof/corpus/ee05d0d813f6261b3dba16506f9ea03d9c5e993d-2 b/tests/fuzzers/rangeproof/corpus/ee05d0d813f6261b3dba16506f9ea03d9c5e993d-2 new file mode 100644 index 00000000..8f32dd77 Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/ee05d0d813f6261b3dba16506f9ea03d9c5e993d-2 differ diff --git a/tests/fuzzers/rangeproof/corpus/f50a6d57a46d30184aa294af5b252ab9701af7c9-2 b/tests/fuzzers/rangeproof/corpus/f50a6d57a46d30184aa294af5b252ab9701af7c9-2 new file mode 100644 index 00000000..af96210f Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/f50a6d57a46d30184aa294af5b252ab9701af7c9-2 differ diff --git a/tests/fuzzers/rangeproof/corpus/random.dat b/tests/fuzzers/rangeproof/corpus/random.dat new file mode 100644 index 00000000..2c998ad8 Binary files /dev/null and b/tests/fuzzers/rangeproof/corpus/random.dat differ diff --git a/tests/fuzzers/rangeproof/debug/main.go b/tests/fuzzers/rangeproof/debug/main.go new file mode 100644 index 00000000..d4cab8ec --- /dev/null +++ b/tests/fuzzers/rangeproof/debug/main.go @@ -0,0 +1,40 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/tests/fuzzers/rangeproof" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug \n") + fmt.Fprintf(os.Stderr, "Example\n") + fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + rangeproof.Fuzz(data) +} diff --git a/tests/fuzzers/rangeproof/rangeproof-fuzzer.go b/tests/fuzzers/rangeproof/rangeproof-fuzzer.go new file mode 100644 index 00000000..c2db919d --- /dev/null +++ b/tests/fuzzers/rangeproof/rangeproof-fuzzer.go @@ -0,0 +1,198 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rangeproof + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "sort" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/trie" +) + +type kv struct { + k, v []byte + t bool +} + +type entrySlice []*kv + +func (p entrySlice) Len() int { return len(p) } +func (p entrySlice) Less(i, j int) bool { return bytes.Compare(p[i].k, p[j].k) < 0 } +func (p entrySlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type fuzzer struct { + input io.Reader + exhausted bool +} + +func (f *fuzzer) randBytes(n int) []byte { + r := make([]byte, n) + if _, err := f.input.Read(r); err != nil { + f.exhausted = true + } + return r +} + +func (f *fuzzer) readInt() uint64 { + var x uint64 + if err := binary.Read(f.input, binary.LittleEndian, &x); err != nil { + f.exhausted = true + } + return x +} + +func (f *fuzzer) randomTrie(n int) (*trie.Trie, map[string]*kv) { + trie := trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase())) + vals := make(map[string]*kv) + size := f.readInt() + // Fill it with some fluff + for i := byte(0); i < byte(size); i++ { + value := &kv{common.LeftPadBytes([]byte{i}, 32), []byte{i}, false} + value2 := &kv{common.LeftPadBytes([]byte{i + 10}, 32), []byte{i}, false} + trie.Update(value.k, value.v) + trie.Update(value2.k, value2.v) + vals[string(value.k)] = value + vals[string(value2.k)] = value2 + } + if f.exhausted { + return nil, nil + } + // And now fill with some random + for i := 0; i < n; i++ { + k := f.randBytes(32) + v := f.randBytes(20) + value := &kv{k, v, false} + trie.Update(k, v) + vals[string(k)] = value + if f.exhausted { + return nil, nil + } + } + return trie, vals +} + +func (f *fuzzer) fuzz() int { + maxSize := 200 + tr, vals := f.randomTrie(1 + int(f.readInt())%maxSize) + if f.exhausted { + return 0 // input too short + } + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + if len(entries) <= 1 { + return 0 + } + sort.Sort(entries) + + var ok = 0 + for { + start := int(f.readInt() % uint64(len(entries))) + end := 1 + int(f.readInt()%uint64(len(entries)-1)) + testcase := int(f.readInt() % uint64(6)) + index := int(f.readInt() & 0xFFFFFFFF) + index2 := int(f.readInt() & 0xFFFFFFFF) + if f.exhausted { + break + } + proof := memorydb.New() + if err := tr.Prove(entries[start].k, 0, proof); err != nil { + panic(fmt.Sprintf("Failed to prove the first node %v", err)) + } + if err := tr.Prove(entries[end-1].k, 0, proof); err != nil { + panic(fmt.Sprintf("Failed to prove the last node %v", err)) + } + var keys [][]byte + var vals [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + if len(keys) == 0 { + return 0 + } + var first, last = keys[0], keys[len(keys)-1] + testcase %= 6 + switch testcase { + case 0: + // Modified key + keys[index%len(keys)] = f.randBytes(32) // In theory it can't be same + case 1: + // Modified val + vals[index%len(vals)] = f.randBytes(20) // In theory it can't be same + case 2: + // Gapped entry slice + index = index % len(keys) + keys = append(keys[:index], keys[index+1:]...) + vals = append(vals[:index], vals[index+1:]...) + case 3: + // Out of order + index1 := index % len(keys) + index2 := index2 % len(keys) + keys[index1], keys[index2] = keys[index2], keys[index1] + vals[index1], vals[index2] = vals[index2], vals[index1] + case 4: + // Set random key to nil, do nothing + keys[index%len(keys)] = nil + case 5: + // Set random value to nil, deletion + vals[index%len(vals)] = nil + + // Other cases: + // Modify something in the proof db + // add stuff to proof db + // drop stuff from proof db + } + if f.exhausted { + break + } + ok = 1 + //nodes, subtrie + hasMore, err := trie.VerifyRangeProof(tr.Hash(), first, last, keys, vals, proof) + if err != nil { + if hasMore { + panic("err != nil && hasMore == true") + } + } + } + return ok +} + +// The function must return +// 1 if the fuzzer should increase priority of the +// given input during subsequent fuzzing (for example, the input is lexically +// correct and was parsed successfully); +// -1 if the input must not be added to corpus even if gives new coverage; and +// 0 otherwise; other values are reserved for future use. +func Fuzz(input []byte) int { + if len(input) < 100 { + return 0 + } + r := bytes.NewReader(input) + f := fuzzer{ + input: r, + exhausted: false, + } + return f.fuzz() +} diff --git a/tests/fuzzers/rlp/corpus/block_with_uncle.rlp b/tests/fuzzers/rlp/corpus/block_with_uncle.rlp new file mode 100644 index 00000000..1b49fe6a Binary files /dev/null and b/tests/fuzzers/rlp/corpus/block_with_uncle.rlp differ diff --git a/tests/fuzzers/rlp/corpus/r.bin b/tests/fuzzers/rlp/corpus/r.bin new file mode 100644 index 00000000..cb98a76a --- /dev/null +++ b/tests/fuzzers/rlp/corpus/r.bin @@ -0,0 +1 @@ +ˀ \ No newline at end of file diff --git a/tests/fuzzers/rlp/corpus/transaction.rlp b/tests/fuzzers/rlp/corpus/transaction.rlp new file mode 100644 index 00000000..80eea1ae --- /dev/null +++ b/tests/fuzzers/rlp/corpus/transaction.rlp @@ -0,0 +1,2 @@ +N +aP?-'{ЋDYfj\E~읕F?1(ij6@v Lڑ \ No newline at end of file diff --git a/tests/fuzzers/rlp/rlp_fuzzer.go b/tests/fuzzers/rlp/rlp_fuzzer.go new file mode 100644 index 00000000..ac02e165 --- /dev/null +++ b/tests/fuzzers/rlp/rlp_fuzzer.go @@ -0,0 +1,130 @@ +// 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 rlp + +import ( + "bytes" + "fmt" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +func decodeEncode(input []byte, val interface{}, i int) { + if err := rlp.DecodeBytes(input, val); err == nil { + output, err := rlp.EncodeToBytes(val) + if err != nil { + panic(err) + } + if !bytes.Equal(input, output) { + panic(fmt.Sprintf("case %d: encode-decode is not equal, \ninput : %x\noutput: %x", i, input, output)) + } + } +} + +func Fuzz(input []byte) int { + if len(input) == 0 { + return 0 + } + if len(input) > 500*1024 { + return 0 + } + + var i int + { + rlp.Split(input) + } + { + if elems, _, err := rlp.SplitList(input); err == nil { + rlp.CountValues(elems) + } + } + + { + rlp.NewStream(bytes.NewReader(input), 0).Decode(new(interface{})) + } + + { + decodeEncode(input, new(interface{}), i) + i++ + } + { + var v struct { + Int uint + String string + Bytes []byte + } + decodeEncode(input, &v, i) + i++ + } + + { + type Types struct { + Bool bool + Raw rlp.RawValue + Slice []*Types + Iface []interface{} + } + var v Types + decodeEncode(input, &v, i) + i++ + } + { + type AllTypes struct { + Int uint + String string + Bytes []byte + Bool bool + Raw rlp.RawValue + Slice []*AllTypes + Array [3]*AllTypes + Iface []interface{} + } + var v AllTypes + decodeEncode(input, &v, i) + i++ + } + { + decodeEncode(input, [10]byte{}, i) + i++ + } + { + var v struct { + Byte [10]byte + Rool [10]bool + } + decodeEncode(input, &v, i) + i++ + } + { + var h types.Header + decodeEncode(input, &h, i) + i++ + var b types.Block + decodeEncode(input, &b, i) + i++ + var t types.Transaction + decodeEncode(input, &t, i) + i++ + var txs types.Transactions + decodeEncode(input, &txs, i) + i++ + var rs types.Receipts + decodeEncode(input, &rs, i) + } + return 1 +} diff --git a/core/vm/runtime/fuzz.go b/tests/fuzzers/runtime/runtime_fuzz.go similarity index 82% rename from core/vm/runtime/fuzz.go rename to tests/fuzzers/runtime/runtime_fuzz.go index cb9ff08b..9b960457 100644 --- a/core/vm/runtime/fuzz.go +++ b/tests/fuzzers/runtime/runtime_fuzz.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 . -// +build gofuzz - package runtime +import ( + "github.com/ethereum/go-ethereum/core/vm/runtime" +) + // Fuzz is the basic entry point for the go-fuzz tool // // This returns 1 for valid parsable/runable code, 0 // for invalid opcode. func Fuzz(input []byte) int { - _, _, err := Execute(input, input, &Config{ - GasLimit: 3000000, + _, _, err := runtime.Execute(input, input, &runtime.Config{ + GasLimit: 12000000, }) - // invalid opcode - if err != nil && len(err.Error()) > 6 && string(err.Error()[:7]) == "invalid" { + if err != nil && len(err.Error()) > 6 && err.Error()[:7] == "invalid" { return 0 } - return 1 } diff --git a/tests/fuzzers/secp256k1/secp_fuzzer.go b/tests/fuzzers/secp256k1/secp_fuzzer.go new file mode 100644 index 00000000..47083d5f --- /dev/null +++ b/tests/fuzzers/secp256k1/secp_fuzzer.go @@ -0,0 +1,50 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for 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 +gofuzz + +package secp256k1 + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/ethereum/go-ethereum/crypto/secp256k1" + fuzz "github.com/google/gofuzz" +) + +func Fuzz(input []byte) int { + var ( + fuzzer = fuzz.NewFromGoFuzz(input) + curveA = secp256k1.S256() + curveB = btcec.S256() + dataP1 []byte + dataP2 []byte + ) + // first point + fuzzer.Fuzz(&dataP1) + x1, y1 := curveB.ScalarBaseMult(dataP1) + // second point + fuzzer.Fuzz(&dataP2) + x2, y2 := curveB.ScalarBaseMult(dataP2) + resAX, resAY := curveA.Add(x1, y1, x2, y2) + resBX, resBY := curveB.Add(x1, y1, x2, y2) + if resAX.Cmp(resBX) != 0 || resAY.Cmp(resBY) != 0 { + fmt.Printf("%s %s %s %s\n", x1, y1, x2, y2) + panic(fmt.Sprintf("Addition failed: geth: %s %s btcd: %s %s", resAX, resAY, resBX, resBY)) + } + return 0 +} diff --git a/tests/fuzzers/secp256k1/secp_test.go b/tests/fuzzers/secp256k1/secp_test.go new file mode 100644 index 00000000..0ca16cb9 --- /dev/null +++ b/tests/fuzzers/secp256k1/secp_test.go @@ -0,0 +1,24 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package secp256k1 + +import "testing" + +func TestFuzzer(t *testing.T) { + test := "00000000N0000000/R00000000000000000U0000S0000000mkhP000000000000000U" + Fuzz([]byte(test)) +} diff --git a/tests/fuzzers/snap/debug/main.go b/tests/fuzzers/snap/debug/main.go new file mode 100644 index 00000000..df46bb1e --- /dev/null +++ b/tests/fuzzers/snap/debug/main.go @@ -0,0 +1,38 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/tests/fuzzers/snap" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug \n") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + snap.FuzzTrieNodes(data) +} diff --git a/tests/fuzzers/snap/fuzz_handler.go b/tests/fuzzers/snap/fuzz_handler.go new file mode 100644 index 00000000..6c370b04 --- /dev/null +++ b/tests/fuzzers/snap/fuzz_handler.go @@ -0,0 +1,164 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package snap + +import ( + "bytes" + "encoding/binary" + "fmt" + "math/big" + "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/rawdb" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "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" + fuzz "github.com/google/gofuzz" +) + +var trieRoot common.Hash + +func getChain() *core.BlockChain { + db := rawdb.NewMemoryDatabase() + ga := make(core.GenesisAlloc, 1000) + var a = make([]byte, 20) + var mkStorage = func(k, v int) (common.Hash, common.Hash) { + var kB = make([]byte, 32) + var vB = make([]byte, 32) + binary.LittleEndian.PutUint64(kB, uint64(k)) + binary.LittleEndian.PutUint64(vB, uint64(v)) + return common.BytesToHash(kB), common.BytesToHash(vB) + } + storage := make(map[common.Hash]common.Hash) + for i := 0; i < 10; i++ { + k, v := mkStorage(i, i) + storage[k] = v + } + for i := 0; i < 1000; i++ { + binary.LittleEndian.PutUint64(a, uint64(i+0xff)) + acc := core.GenesisAccount{Balance: big.NewInt(int64(i))} + if i%2 == 1 { + acc.Storage = storage + } + ga[common.BytesToAddress(a)] = acc + } + gspec := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: ga, + } + genesis := gspec.MustCommit(db) + blocks, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 2, + func(i int, gen *core.BlockGen) {}) + cacheConf := &core.CacheConfig{ + TrieCleanLimit: 0, + TrieDirtyLimit: 0, + TrieTimeLimit: 5 * time.Minute, + TrieCleanNoPrefetch: true, + TrieCleanRejournal: 0, + SnapshotLimit: 100, + SnapshotWait: true, + } + trieRoot = blocks[len(blocks)-1].Root() + bc, _ := core.NewBlockChain(db, cacheConf, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) + if _, err := bc.InsertChain(blocks); err != nil { + panic(err) + } + return bc +} + +type dummyBackend struct { + chain *core.BlockChain +} + +func (d *dummyBackend) Chain() *core.BlockChain { return d.chain } +func (d *dummyBackend) RunPeer(*snap.Peer, snap.Handler) error { return nil } +func (d *dummyBackend) PeerInfo(enode.ID) interface{} { return "Foo" } +func (d *dummyBackend) Handle(*snap.Peer, snap.Packet) error { return nil } + +type dummyRW struct { + code uint64 + data []byte + writeCount int +} + +func (d *dummyRW) ReadMsg() (p2p.Msg, error) { + return p2p.Msg{ + Code: d.code, + Payload: bytes.NewReader(d.data), + ReceivedAt: time.Now(), + Size: uint32(len(d.data)), + }, nil +} + +func (d *dummyRW) WriteMsg(msg p2p.Msg) error { + d.writeCount++ + return nil +} + +func doFuzz(input []byte, obj interface{}, code int) int { + if len(input) > 1024*4 { + return -1 + } + bc := getChain() + defer bc.Stop() + backend := &dummyBackend{bc} + fuzz.NewFromGoFuzz(input).Fuzz(obj) + var data []byte + switch p := obj.(type) { + case *snap.GetTrieNodesPacket: + p.Root = trieRoot + data, _ = rlp.EncodeToBytes(obj) + default: + data, _ = rlp.EncodeToBytes(obj) + } + cli := &dummyRW{ + code: uint64(code), + data: data, + } + peer := snap.NewFakePeer(65, "gazonk01", cli) + err := snap.HandleMessage(backend, peer) + switch { + case err == nil && cli.writeCount != 1: + panic(fmt.Sprintf("Expected 1 response, got %d", cli.writeCount)) + case err != nil && cli.writeCount != 0: + panic(fmt.Sprintf("Expected 0 response, got %d", cli.writeCount)) + } + return 1 +} + +// To run a fuzzer, do +// $ CGO_ENABLED=0 go-fuzz-build -func FuzzTrieNodes +// $ go-fuzz + +func FuzzARange(input []byte) int { + return doFuzz(input, &snap.GetAccountRangePacket{}, snap.GetAccountRangeMsg) +} +func FuzzSRange(input []byte) int { + return doFuzz(input, &snap.GetStorageRangesPacket{}, snap.GetStorageRangesMsg) +} +func FuzzByteCodes(input []byte) int { + return doFuzz(input, &snap.GetByteCodesPacket{}, snap.GetByteCodesMsg) +} +func FuzzTrieNodes(input []byte) int { + return doFuzz(input, &snap.GetTrieNodesPacket{}, snap.GetTrieNodesMsg) +} diff --git a/tests/fuzzers/stacktrie/debug/main.go b/tests/fuzzers/stacktrie/debug/main.go new file mode 100644 index 00000000..6b634f05 --- /dev/null +++ b/tests/fuzzers/stacktrie/debug/main.go @@ -0,0 +1,38 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/tests/fuzzers/stacktrie" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug ") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + stacktrie.Debug(data) +} diff --git a/tests/fuzzers/stacktrie/trie_fuzzer.go b/tests/fuzzers/stacktrie/trie_fuzzer.go new file mode 100644 index 00000000..e6165df0 --- /dev/null +++ b/tests/fuzzers/stacktrie/trie_fuzzer.go @@ -0,0 +1,207 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package stacktrie + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "hash" + "io" + "sort" + + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/trie" + "golang.org/x/crypto/sha3" +) + +type fuzzer struct { + input io.Reader + exhausted bool + debugging bool +} + +func (f *fuzzer) read(size int) []byte { + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +func (f *fuzzer) readSlice(min, max int) []byte { + var a uint16 + binary.Read(f.input, binary.LittleEndian, &a) + size := min + int(a)%(max-min) + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +// spongeDb is a dummy db backend which accumulates writes in a sponge +type spongeDb struct { + sponge hash.Hash + debug bool +} + +func (s *spongeDb) Has(key []byte) (bool, error) { panic("implement me") } +func (s *spongeDb) Get(key []byte) ([]byte, error) { return nil, errors.New("no such elem") } +func (s *spongeDb) Delete(key []byte) error { panic("implement me") } +func (s *spongeDb) NewBatch() ethdb.Batch { return &spongeBatch{s} } +func (s *spongeDb) NewBatchWithSize(size int) ethdb.Batch { return &spongeBatch{s} } +func (s *spongeDb) NewSnapshot() (ethdb.Snapshot, error) { panic("implement me") } +func (s *spongeDb) Stat(property string) (string, error) { panic("implement me") } +func (s *spongeDb) Compact(start []byte, limit []byte) error { panic("implement me") } +func (s *spongeDb) Close() error { return nil } + +func (s *spongeDb) Put(key []byte, value []byte) error { + if s.debug { + fmt.Printf("db.Put %x : %x\n", key, value) + } + s.sponge.Write(key) + s.sponge.Write(value) + return nil +} +func (s *spongeDb) NewIterator(prefix []byte, start []byte) ethdb.Iterator { panic("implement me") } + +// spongeBatch is a dummy batch which immediately writes to the underlying spongedb +type spongeBatch struct { + db *spongeDb +} + +func (b *spongeBatch) Put(key, value []byte) error { + b.db.Put(key, value) + return nil +} +func (b *spongeBatch) Delete(key []byte) error { panic("implement me") } +func (b *spongeBatch) ValueSize() int { return 100 } +func (b *spongeBatch) Write() error { return nil } +func (b *spongeBatch) Reset() {} +func (b *spongeBatch) Replay(w ethdb.KeyValueWriter) error { return nil } + +type kv struct { + k, v []byte +} +type kvs []kv + +func (k kvs) Len() int { + return len(k) +} + +func (k kvs) Less(i, j int) bool { + return bytes.Compare(k[i].k, k[j].k) < 0 +} + +func (k kvs) Swap(i, j int) { + k[j], k[i] = k[i], k[j] +} + +// The function must return +// 1 if the fuzzer should increase priority of the +// given input during subsequent fuzzing (for example, the input is lexically +// correct and was parsed successfully); +// -1 if the input must not be added to corpus even if gives new coverage; and +// 0 otherwise +// other values are reserved for future use. +func Fuzz(data []byte) int { + f := fuzzer{ + input: bytes.NewReader(data), + exhausted: false, + } + return f.fuzz() +} + +func Debug(data []byte) int { + f := fuzzer{ + input: bytes.NewReader(data), + exhausted: false, + debugging: true, + } + return f.fuzz() +} + +func (f *fuzzer) fuzz() int { + // This spongeDb is used to check the sequence of disk-db-writes + var ( + spongeA = &spongeDb{sponge: sha3.NewLegacyKeccak256()} + dbA = trie.NewDatabase(spongeA) + trieA = trie.NewEmpty(dbA) + spongeB = &spongeDb{sponge: sha3.NewLegacyKeccak256()} + trieB = trie.NewStackTrie(spongeB) + vals kvs + useful bool + maxElements = 10000 + // operate on unique keys only + keys = make(map[string]struct{}) + ) + // Fill the trie with elements + for i := 0; !f.exhausted && i < maxElements; i++ { + k := f.read(32) + v := f.readSlice(1, 500) + if f.exhausted { + // If it was exhausted while reading, the value may be all zeroes, + // thus 'deletion' which is not supported on stacktrie + break + } + if _, present := keys[string(k)]; present { + // This key is a duplicate, ignore it + continue + } + keys[string(k)] = struct{}{} + vals = append(vals, kv{k: k, v: v}) + trieA.Update(k, v) + useful = true + } + if !useful { + return 0 + } + // Flush trie -> database + rootA, nodes, err := trieA.Commit(false) + if err != nil { + panic(err) + } + if nodes != nil { + dbA.Update(trie.NewWithNodeSet(nodes)) + } + // Flush memdb -> disk (sponge) + dbA.Commit(rootA, false, nil) + + // Stacktrie requires sorted insertion + sort.Sort(vals) + for _, kv := range vals { + if f.debugging { + fmt.Printf("{\"%#x\" , \"%#x\"} // stacktrie.Update\n", kv.k, kv.v) + } + trieB.Update(kv.k, kv.v) + } + rootB := trieB.Hash() + if _, err := trieB.Commit(); err != nil { + panic(err) + } + if rootA != rootB { + panic(fmt.Sprintf("roots differ: (trie) %x != %x (stacktrie)", rootA, rootB)) + } + sumA := spongeA.sponge.Sum(nil) + sumB := spongeB.sponge.Sum(nil) + if !bytes.Equal(sumA, sumB) { + panic(fmt.Sprintf("sequence differ: (trie) %x != %x (stacktrie)", sumA, sumB)) + } + return 1 +} diff --git a/tests/fuzzers/trie/corpus/data b/tests/fuzzers/trie/corpus/data new file mode 100644 index 00000000..c4a4839c --- /dev/null +++ b/tests/fuzzers/trie/corpus/data @@ -0,0 +1 @@ +asdlfkjasf23oiejfasdfadkfqlkjfasdlkfjalwk4jfalsdkfjawlefkjsadlfkjasldkfjwalefkjasdlfkjM \ No newline at end of file diff --git a/tests/fuzzers/trie/trie-fuzzer.go b/tests/fuzzers/trie/trie-fuzzer.go new file mode 100644 index 00000000..f36b613d --- /dev/null +++ b/tests/fuzzers/trie/trie-fuzzer.go @@ -0,0 +1,194 @@ +// 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 ( + "bytes" + "encoding/binary" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/trie" +) + +// randTest performs random trie operations. +// Instances of this test are created by Generate. +type randTest []randTestStep + +type randTestStep struct { + op int + key []byte // for opUpdate, opDelete, opGet + value []byte // for opUpdate + err error // for debugging +} + +type proofDb struct{} + +func (proofDb) Put(key []byte, value []byte) error { + return nil +} + +func (proofDb) Delete(key []byte) error { + return nil +} + +const ( + opUpdate = iota + opDelete + opGet + opHash + opCommit + opItercheckhash + opProve + opMax // boundary value, not an actual op +) + +type dataSource struct { + input []byte + reader *bytes.Reader +} + +func newDataSource(input []byte) *dataSource { + return &dataSource{ + input, bytes.NewReader(input), + } +} +func (ds *dataSource) readByte() byte { + if b, err := ds.reader.ReadByte(); err != nil { + return 0 + } else { + return b + } +} +func (ds *dataSource) Read(buf []byte) (int, error) { + return ds.reader.Read(buf) +} +func (ds *dataSource) Ended() bool { + return ds.reader.Len() == 0 +} + +func Generate(input []byte) randTest { + var allKeys [][]byte + r := newDataSource(input) + genKey := func() []byte { + if len(allKeys) < 2 || r.readByte() < 0x0f { + // new key + key := make([]byte, r.readByte()%50) + r.Read(key) + allKeys = append(allKeys, key) + return key + } + // use existing key + return allKeys[int(r.readByte())%len(allKeys)] + } + + var steps randTest + + for i := 0; !r.Ended(); i++ { + step := randTestStep{op: int(r.readByte()) % opMax} + switch step.op { + case opUpdate: + step.key = genKey() + step.value = make([]byte, 8) + binary.BigEndian.PutUint64(step.value, uint64(i)) + case opGet, opDelete, opProve: + step.key = genKey() + } + steps = append(steps, step) + if len(steps) > 500 { + break + } + } + + return steps +} + +// The function must return +// 1 if the fuzzer should increase priority of the +// given input during subsequent fuzzing (for example, the input is lexically +// correct and was parsed successfully); +// -1 if the input must not be added to corpus even if gives new coverage; and +// 0 otherwise +// other values are reserved for future use. +func Fuzz(input []byte) int { + program := Generate(input) + if len(program) == 0 { + return 0 + } + if err := runRandTest(program); err != nil { + panic(err) + } + return 1 +} + +func runRandTest(rt randTest) error { + triedb := trie.NewDatabase(memorydb.New()) + + tr := trie.NewEmpty(triedb) + values := make(map[string]string) // tracks content of the trie + + for i, step := range rt { + switch step.op { + case opUpdate: + tr.Update(step.key, step.value) + values[string(step.key)] = string(step.value) + case opDelete: + tr.Delete(step.key) + delete(values, string(step.key)) + case opGet: + v := tr.Get(step.key) + want := values[string(step.key)] + if string(v) != want { + rt[i].err = fmt.Errorf("mismatch for key %#x, got %#x want %#x", step.key, v, want) + } + case opHash: + tr.Hash() + case opCommit: + hash, nodes, err := tr.Commit(false) + if err != nil { + return err + } + if nodes != nil { + if err := triedb.Update(trie.NewWithNodeSet(nodes)); err != nil { + return err + } + } + newtr, err := trie.New(common.Hash{}, hash, triedb) + if err != nil { + return err + } + tr = newtr + case opItercheckhash: + checktr := trie.NewEmpty(triedb) + it := trie.NewIterator(tr.NodeIterator(nil)) + for it.Next() { + checktr.Update(it.Key, it.Value) + } + if tr.Hash() != checktr.Hash() { + return fmt.Errorf("hash mismatch in opItercheckhash") + } + case opProve: + rt[i].err = tr.Prove(step.key, 0, proofDb{}) + } + // Abort the test on error. + if rt[i].err != nil { + return rt[i].err + } + } + return nil +} diff --git a/tests/fuzzers/txfetcher/corpus/0151ee1d0db4c74d3bcdfa4f7396a4c8538748c9-2 b/tests/fuzzers/txfetcher/corpus/0151ee1d0db4c74d3bcdfa4f7396a4c8538748c9-2 new file mode 100644 index 00000000..2c75e9c7 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/0151ee1d0db4c74d3bcdfa4f7396a4c8538748c9-2 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/020dd7b492a6eb34ff0b7d8ee46189422c37e4a7-6 b/tests/fuzzers/txfetcher/corpus/020dd7b492a6eb34ff0b7d8ee46189422c37e4a7-6 new file mode 100644 index 00000000..8d3b5778 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/020dd7b492a6eb34ff0b7d8ee46189422c37e4a7-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/021d1144e359233c496e22c3250609b11b213e9f-4 b/tests/fuzzers/txfetcher/corpus/021d1144e359233c496e22c3250609b11b213e9f-4 new file mode 100644 index 00000000..73731899 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/021d1144e359233c496e22c3250609b11b213e9f-4 @@ -0,0 +1,12 @@ + TESTING KEY----- +MIICXgIBAAKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iAJm2gsvvZhIrCHS3l6afab4pZB +l2+XsDlrKBxKKtDrGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTtqJQIDAQAB +AoGAGRzwwir7XvBOAy5tuV6ef6anZzus1s1Y1Clb6HbnWWF/wbZGOpet +3m4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKZTXtdZrh+k7hx0nTP8Jcb +uqFk541awmMogY/EfbWd6IOkp+4xqjlFBEDytgbIECQQDvH/6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz84SHEg1Ak/7KCxmD/sfgS5TeuNi8DoUBEmiSJwm7FX +ftxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su43sjXNueLKH8+ph2UfQuU9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xl/DoCzjA0CQQDU +y2pGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj013sovGKUFfYAqVXVlxtIoX +qUn3Xh9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JMhNRcVFMO8dDaFo +f9Oeos0UotgiDktdQHxdNEwLjQlJBz+OtwwA=---E RATTIEY- \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/0d28327b1fb52c1ba02a6eb96675c31633921bb2-2 b/tests/fuzzers/txfetcher/corpus/0d28327b1fb52c1ba02a6eb96675c31633921bb2-2 new file mode 100644 index 00000000..8cc3039c --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/0d28327b1fb52c1ba02a6eb96675c31633921bb2-2 @@ -0,0 +1,15 @@ +&^oȗ-----BEGIN RSA TESTING KEY----- +MIICXgIBAAKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iA5sBBZzHi3z0h1YV8QPuxEbi4nW91IJm2gsvvZhIrCHS3l6afab4pZB +l2+XsDulrKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj013sovGKUFfYAqVXVlxtIX +qyUBnu3X9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JEMhNRcVFMO8dJDaFeo +f9Oeos0UUothgiDktdQHxdNEwLjQf7lJJBzV+5OtwswCWA== +-----END RSA TESTING KEY-----Q_ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/0fcd827b57ded58e91f7ba2ac2b7ea4d25ebedca-7 b/tests/fuzzers/txfetcher/corpus/0fcd827b57ded58e91f7ba2ac2b7ea4d25ebedca-7 new file mode 100644 index 00000000..8ceee16a --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/0fcd827b57ded58e91f7ba2ac2b7ea4d25ebedca-7 @@ -0,0 +1 @@ +ap�￿���V�#�&�� \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/109bc9b8fd4fef63493e104c703c79bc4a5e8d34-6 b/tests/fuzzers/txfetcher/corpus/109bc9b8fd4fef63493e104c703c79bc4a5e8d34-6 new file mode 100644 index 00000000..df9b986a Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/109bc9b8fd4fef63493e104c703c79bc4a5e8d34-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/163785ab002746452619f31e8dfcb4549e6f8b6e-6 b/tests/fuzzers/txfetcher/corpus/163785ab002746452619f31e8dfcb4549e6f8b6e-6 new file mode 100644 index 00000000..55467373 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/163785ab002746452619f31e8dfcb4549e6f8b6e-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/1adfa6b9ddf5766220c8ff7ede2926ca241bb947-3 b/tests/fuzzers/txfetcher/corpus/1adfa6b9ddf5766220c8ff7ede2926ca241bb947-3 new file mode 100644 index 00000000..4a593aa2 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/1adfa6b9ddf5766220c8ff7ede2926ca241bb947-3 @@ -0,0 +1,11 @@ +TAKBgDuLnQA3gey3VBznB39JUtxjeE6myuDkM/uGlfjb +S1w4iA5sBzzh8uxEbi4nW91IJm2gsvvZhICHS3l6ab4pZB +l2DulrKBxKKtD1rGxlG4LncabFn9vLZad2bSysqz/qTAUSTvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Z4vMXc7jpTLryzTQIvVdfQbRc6+MUVeLKZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk54MogxEcfbWd6IOkp+4xqFLBEDtgbIECnk+hgN4H +qzzxxr397vWrjrIgbJpQvBv8QeeuNi8DoUBEmiSJwa7FXY +FUtxuvL7XvjwjN5B30pEbc6Iuyt7y4MQJBAIt21su4b3sjphy2tuUE9xblTu14qgHZ6+AiZovGKU--FfYAqVXVlxtIX +qyU3X9ps8ZfjLZ45l6cGhaJQYZHOde3JEMhNRcVFMO8dJDaFeo +f9Oeos0UUothgiDktdQHxdNEwLjQf7lJJBzV+5OtwswCWA== +-----END RSA T \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/1b9a02e9a48fea1d2fc3fb77946ada278e152079-4 b/tests/fuzzers/txfetcher/corpus/1b9a02e9a48fea1d2fc3fb77946ada278e152079-4 new file mode 100644 index 00000000..4a56f93d Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/1b9a02e9a48fea1d2fc3fb77946ada278e152079-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/1e14c7ea1faef92890988061b5abe96db7190f98-7 b/tests/fuzzers/txfetcher/corpus/1e14c7ea1faef92890988061b5abe96db7190f98-7 new file mode 100644 index 00000000..d2442fc5 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/1e14c7ea1faef92890988061b5abe96db7190f98-7 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/1e7d05f00e99cbf3ff0ef1cd7ea8dd07ad6dff23-6 b/tests/fuzzers/txfetcher/corpus/1e7d05f00e99cbf3ff0ef1cd7ea8dd07ad6dff23-6 new file mode 100644 index 00000000..1c342ff5 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/1e7d05f00e99cbf3ff0ef1cd7ea8dd07ad6dff23-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/1ec95e347fd522e6385b5091aa81aa2485be4891-4 b/tests/fuzzers/txfetcher/corpus/1ec95e347fd522e6385b5091aa81aa2485be4891-4 new file mode 100644 index 00000000..b0c776bd Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/1ec95e347fd522e6385b5091aa81aa2485be4891-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/1fbfa5d214060d2a0905846a589fd6f78d411451-4 b/tests/fuzzers/txfetcher/corpus/1fbfa5d214060d2a0905846a589fd6f78d411451-4 new file mode 100644 index 00000000..75de835c Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/1fbfa5d214060d2a0905846a589fd6f78d411451-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/1fd84ee194e791783a7f18f0a6deab8efe05fc04-2 b/tests/fuzzers/txfetcher/corpus/1fd84ee194e791783a7f18f0a6deab8efe05fc04-2 new file mode 100644 index 00000000..3b6d2560 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/1fd84ee194e791783a7f18f0a6deab8efe05fc04-2 @@ -0,0 +1 @@ +& \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/21e76b9fca21d94d97f860c1c82f40697a83471b-8 b/tests/fuzzers/txfetcher/corpus/21e76b9fca21d94d97f860c1c82f40697a83471b-8 new file mode 100644 index 00000000..1d4620f4 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/21e76b9fca21d94d97f860c1c82f40697a83471b-8 @@ -0,0 +1,3 @@ +DtQvfQ+MULKZTXk78c +/fWkpxlQQ/+hgNzVtx9vWgJsafG7b0dA4AFjwVbFLmQcj2PprIMmPNQrooX +L \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/220a87fed0c92474923054094eb7aff14289cf5e-4 b/tests/fuzzers/txfetcher/corpus/220a87fed0c92474923054094eb7aff14289cf5e-4 new file mode 100644 index 00000000..175f74fd Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/220a87fed0c92474923054094eb7aff14289cf5e-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/23ddcd66aa92fe3d78b7f5b6e7cddb1b55c5f5df-3 b/tests/fuzzers/txfetcher/corpus/23ddcd66aa92fe3d78b7f5b6e7cddb1b55c5f5df-3 new file mode 100644 index 00000000..95892c7b --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/23ddcd66aa92fe3d78b7f5b6e7cddb1b55c5f5df-3 @@ -0,0 +1,12 @@ +4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iA5sBBZzHi3z0h1YV8QPuxEbi4nW91IJm2gsvvZeIrCHS3l6afab4pZB +l2+XsDlrKBxKKtD1rGxlG4jncdabFn9gvLZad2bSysqz/qTAUSTvqJQIDAQAB +AoGAGRzwwXvBOAy5tM/uV6e+Zf6aZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Z4vD6Mc7pLryzTQIVdfQbRc6+MUVeLKZaTXtdZru+Jk70PJJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+gN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQ2PprIMPcQroo8vpjSHg1Ev14KxmQeDydfsgeuN8UBESJwm7F +UtuL7Xvjw50pNEbc6Iuyty4QJA21su4sjXNueLQphy2U +fQtuUE9txblTu14qN7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6ARYiZPYj1oGUFfYAVVxtI +qyBnu3X9pfLZOAkEAlT4R5Yl6cJQYZHOde3JEhNRcVFMO8dJFo +f9Oeos0UUhgiDkQxdEwLjQf7lJJz5OtwC= +-NRSA TESINGKEY-Q_ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/2441d249faf9a859e38c49f6e305b394280c6ea5-1 b/tests/fuzzers/txfetcher/corpus/2441d249faf9a859e38c49f6e305b394280c6ea5-1 new file mode 100644 index 00000000..d76207e9 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/2441d249faf9a859e38c49f6e305b394280c6ea5-1 differ diff --git a/tests/fuzzers/txfetcher/corpus/2da1f0635e11283b1927974f418aadd8837ad31e-7 b/tests/fuzzers/txfetcher/corpus/2da1f0635e11283b1927974f418aadd8837ad31e-7 new file mode 100644 index 00000000..73ae7057 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/2da1f0635e11283b1927974f418aadd8837ad31e-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/2e1853fbf8efe40098b1583224fe3b5f335e7037-6 b/tests/fuzzers/txfetcher/corpus/2e1853fbf8efe40098b1583224fe3b5f335e7037-6 new file mode 100644 index 00000000..692981e6 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/2e1853fbf8efe40098b1583224fe3b5f335e7037-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/2f25490dc49c103d653843ed47324b310ee7105e-7 b/tests/fuzzers/txfetcher/corpus/2f25490dc49c103d653843ed47324b310ee7105e-7 new file mode 100644 index 00000000..5cf7da75 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/2f25490dc49c103d653843ed47324b310ee7105e-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/30494b85bb60ad7f099fa49d427007a761620d8f-5 b/tests/fuzzers/txfetcher/corpus/30494b85bb60ad7f099fa49d427007a761620d8f-5 new file mode 100644 index 00000000..7ff9d397 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/30494b85bb60ad7f099fa49d427007a761620d8f-5 @@ -0,0 +1,10 @@ +jXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xl/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6Yj013sovGKUFfYAqVXVlxtIX +qyUBnu3Xh9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JEMhNRcVFMO8dDaFeo +f9Oeos0UotgiDktdQHxdNEwLjQfl \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/316024ca3aaf09c1de5258733ff5fe3d799648d3-4 b/tests/fuzzers/txfetcher/corpus/316024ca3aaf09c1de5258733ff5fe3d799648d3-4 new file mode 100644 index 00000000..61f7d78f --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/316024ca3aaf09c1de5258733ff5fe3d799648d3-4 @@ -0,0 +1,15 @@ +^oȗ----BEGIN RA TTING KEY----- +IIXgIBAAKBQDuLnQI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iA5sBBZzHi3z0h1YV8QPuxEbi4nW91IJmgsvvZhrCHSl6afab4pZB +l2+XsDulrKBxKKtD1rGxlG4LjcdabF9gvLZad2bSysqz/qTAUStTvqJQDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Z4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj043sovGKUFfYAqVXVlxtIX +qyUBnu3X9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JEMhNRcVFMO8dJDaFeo +f9Oeos0UUothgiDktdQHxdNEwLjQf7lJJBzV+5OtwswCWA== +-----END RSA TESTING KEY-----Q_ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/32a089e2c439a91f4c1b67a13d52429bcded0dd9-7 b/tests/fuzzers/txfetcher/corpus/32a089e2c439a91f4c1b67a13d52429bcded0dd9-7 new file mode 100644 index 00000000..a986a9d8 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/32a089e2c439a91f4c1b67a13d52429bcded0dd9-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/33ec1dc0bfeb93d16edee3c07125fec6ac1aa17d-2 b/tests/fuzzers/txfetcher/corpus/33ec1dc0bfeb93d16edee3c07125fec6ac1aa17d-2 new file mode 100644 index 00000000..d41771b8 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/33ec1dc0bfeb93d16edee3c07125fec6ac1aa17d-2 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/37a0d207700b52caa005ec8aeb344dcb13150ed2-5 b/tests/fuzzers/txfetcher/corpus/37a0d207700b52caa005ec8aeb344dcb13150ed2-5 new file mode 100644 index 00000000..2f09c6e2 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/37a0d207700b52caa005ec8aeb344dcb13150ed2-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/382f59c66d0ddb6747d3177263279789ca15c2db-5 b/tests/fuzzers/txfetcher/corpus/382f59c66d0ddb6747d3177263279789ca15c2db-5 new file mode 100644 index 00000000..84441ac3 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/382f59c66d0ddb6747d3177263279789ca15c2db-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/3a010483a4ad8d7215447ce27e0fac3791235c99-4 b/tests/fuzzers/txfetcher/corpus/3a010483a4ad8d7215447ce27e0fac3791235c99-4 new file mode 100644 index 00000000..28f5d99b --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/3a010483a4ad8d7215447ce27e0fac3791235c99-4 @@ -0,0 +1,7 @@ + +lGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/3a3b717fcfe7ffb000b906e5a76f32248a576bf7-6 b/tests/fuzzers/txfetcher/corpus/3a3b717fcfe7ffb000b906e5a76f32248a576bf7-6 new file mode 100644 index 00000000..022de3c6 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/3a3b717fcfe7ffb000b906e5a76f32248a576bf7-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/3c37f6d58b8029971935f127f53e6aaeba558445-6 b/tests/fuzzers/txfetcher/corpus/3c37f6d58b8029971935f127f53e6aaeba558445-6 new file mode 100644 index 00000000..9f3bf093 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/3c37f6d58b8029971935f127f53e6aaeba558445-6 @@ -0,0 +1,2 @@ +w�€��������� � +� � � ������������������ �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/0 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/3c73b63bafa9f535c882ec17189adaf02b58f432-6 b/tests/fuzzers/txfetcher/corpus/3c73b63bafa9f535c882ec17189adaf02b58f432-6 new file mode 100644 index 00000000..0dfbc469 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/3c73b63bafa9f535c882ec17189adaf02b58f432-6 @@ -0,0 +1 @@ +LvhaJQHOe3EhRcdaFofeoogkjQfJB \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/3d11500c4f66b20c73bbdfb1a7bddd7bbf92b29c-5 b/tests/fuzzers/txfetcher/corpus/3d11500c4f66b20c73bbdfb1a7bddd7bbf92b29c-5 new file mode 100644 index 00000000..b19fc7f4 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/3d11500c4f66b20c73bbdfb1a7bddd7bbf92b29c-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/3d8b5bf36c80d6f65802280039f85421f32b5055-6 b/tests/fuzzers/txfetcher/corpus/3d8b5bf36c80d6f65802280039f85421f32b5055-6 new file mode 100644 index 00000000..eacd269f Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/3d8b5bf36c80d6f65802280039f85421f32b5055-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/3f99c546a3962256176d566c19e3fffb62072078-1 b/tests/fuzzers/txfetcher/corpus/3f99c546a3962256176d566c19e3fffb62072078-1 new file mode 100644 index 00000000..9e90183d --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/3f99c546a3962256176d566c19e3fffb62072078-1 @@ -0,0 +1 @@ +&^o \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/408ec46539af27acd82b3d01e863597030882458-8 b/tests/fuzzers/txfetcher/corpus/408ec46539af27acd82b3d01e863597030882458-8 new file mode 100644 index 00000000..65d55437 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/408ec46539af27acd82b3d01e863597030882458-8 differ diff --git a/tests/fuzzers/txfetcher/corpus/436154e5bb6487673f6642e6d2a582c01b083c08-8 b/tests/fuzzers/txfetcher/corpus/436154e5bb6487673f6642e6d2a582c01b083c08-8 new file mode 100644 index 00000000..28e519c1 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/436154e5bb6487673f6642e6d2a582c01b083c08-8 @@ -0,0 +1 @@ +apfffffffffffffffffffffffffffffffebadce6f48a0_3bbfd2364 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/45f565cd14b8de1ba2e925047ce776c2682b4b8d-3 b/tests/fuzzers/txfetcher/corpus/45f565cd14b8de1ba2e925047ce776c2682b4b8d-3 new file mode 100644 index 00000000..9f03a095 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/45f565cd14b8de1ba2e925047ce776c2682b4b8d-3 differ diff --git a/tests/fuzzers/txfetcher/corpus/4a0a12f5b033c8c160cc3b5133692ea1e92c6cdf-7 b/tests/fuzzers/txfetcher/corpus/4a0a12f5b033c8c160cc3b5133692ea1e92c6cdf-7 new file mode 100644 index 00000000..e50b5494 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/4a0a12f5b033c8c160cc3b5133692ea1e92c6cdf-7 @@ -0,0 +1,3 @@ +DtQvfQ+MULKZTXk78c +/fWkpxlyEQQ/+hgNzVtx9vWgJsafG7b0dA4AFjwVbFLmQcj2PprIMmPNQg1Ak/7KCxmDgS5TDEmSJwFX +txLjbt4xTgeXVlXsjLZ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/550f15ef65230cc4dcfab7fea67de212d9212ff8-8 b/tests/fuzzers/txfetcher/corpus/550f15ef65230cc4dcfab7fea67de212d9212ff8-8 new file mode 100644 index 00000000..34005f43 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/550f15ef65230cc4dcfab7fea67de212d9212ff8-8 differ diff --git a/tests/fuzzers/txfetcher/corpus/5552213d659fef900a194c52718ffeffdc72d043-3 b/tests/fuzzers/txfetcher/corpus/5552213d659fef900a194c52718ffeffdc72d043-3 new file mode 100644 index 00000000..7346ff19 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/5552213d659fef900a194c52718ffeffdc72d043-3 differ diff --git a/tests/fuzzers/txfetcher/corpus/5570ef82893a9b9b9158572d43a7de7537121d2d-1 b/tests/fuzzers/txfetcher/corpus/5570ef82893a9b9b9158572d43a7de7537121d2d-1 new file mode 100644 index 00000000..feffcebc --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/5570ef82893a9b9b9158572d43a7de7537121d2d-1 @@ -0,0 +1 @@ +�ٯ0,1,2,3,4,5,6,7,-3420794409,(2,a) \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/5e10f734f8af4116fbd164d96eec67aa53e6228c-5 b/tests/fuzzers/txfetcher/corpus/5e10f734f8af4116fbd164d96eec67aa53e6228c-5 new file mode 100644 index 00000000..0eacd0b5 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/5e10f734f8af4116fbd164d96eec67aa53e6228c-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/608200b402488b3989ec8ec5f4190ccb537b8ea4-4 b/tests/fuzzers/txfetcher/corpus/608200b402488b3989ec8ec5f4190ccb537b8ea4-4 new file mode 100644 index 00000000..d37b0185 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/608200b402488b3989ec8ec5f4190ccb537b8ea4-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/61e89c3fbdf9eff74bd250ea73cc2e61f8ca0d97-5 b/tests/fuzzers/txfetcher/corpus/61e89c3fbdf9eff74bd250ea73cc2e61f8ca0d97-5 new file mode 100644 index 00000000..155744bc --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/61e89c3fbdf9eff74bd250ea73cc2e61f8ca0d97-5 @@ -0,0 +1 @@ +88242871'392752200424491531672177074144720616417147514758635765020556616 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/62817a48c78fbf2c12fcdc5ca58e2ca60c43543a-7 b/tests/fuzzers/txfetcher/corpus/62817a48c78fbf2c12fcdc5ca58e2ca60c43543a-7 new file mode 100644 index 00000000..795608a7 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/62817a48c78fbf2c12fcdc5ca58e2ca60c43543a-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/6782da8f1a432a77306d60d2ac2470c35b98004f-3 b/tests/fuzzers/txfetcher/corpus/6782da8f1a432a77306d60d2ac2470c35b98004f-3 new file mode 100644 index 00000000..f44949e6 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/6782da8f1a432a77306d60d2ac2470c35b98004f-3 @@ -0,0 +1 @@ +21888242871'392752200424452601091531672177074144720616417147514758635765020556616 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/68fb55290cb9d6da5b259017c34bcecf96c944aa-5 b/tests/fuzzers/txfetcher/corpus/68fb55290cb9d6da5b259017c34bcecf96c944aa-5 new file mode 100644 index 00000000..23d905b8 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/68fb55290cb9d6da5b259017c34bcecf96c944aa-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/6a5059bc86872526241d21ab5dae9f0afd3b9ae1-3 b/tests/fuzzers/txfetcher/corpus/6a5059bc86872526241d21ab5dae9f0afd3b9ae1-3 new file mode 100644 index 00000000..b71d5dff --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/6a5059bc86872526241d21ab5dae9f0afd3b9ae1-3 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/717928e0e2d478c680c6409b173552ca98469ba5-6 b/tests/fuzzers/txfetcher/corpus/717928e0e2d478c680c6409b173552ca98469ba5-6 new file mode 100644 index 00000000..dce51061 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/717928e0e2d478c680c6409b173552ca98469ba5-6 @@ -0,0 +1 @@ +LvhaJcdaFofenogkjQfJB \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/71d22f25419543e437f249ca437823b87ac926b1-6 b/tests/fuzzers/txfetcher/corpus/71d22f25419543e437f249ca437823b87ac926b1-6 new file mode 100644 index 00000000..d07a6c2f Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/71d22f25419543e437f249ca437823b87ac926b1-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/7312a0f31ae5d773ed4fd74abc7521eb14754683-8 b/tests/fuzzers/txfetcher/corpus/7312a0f31ae5d773ed4fd74abc7521eb14754683-8 new file mode 100644 index 00000000..3593ce2e --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/7312a0f31ae5d773ed4fd74abc7521eb14754683-8 @@ -0,0 +1,2 @@ +DtQvfQ+MULKZTXk78c +/fWkpxlyEQQ/+hgNzVtx9vWgJsafG7b0dA4AFjwVbFLmQcj2PprIMmPNQg1AkS5TDEmSJwFVlXsjLZ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/76e413a50dc8861e3756e556f796f1737bec2675-4 b/tests/fuzzers/txfetcher/corpus/76e413a50dc8861e3756e556f796f1737bec2675-4 new file mode 100644 index 00000000..623fcf96 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/76e413a50dc8861e3756e556f796f1737bec2675-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/78480977d5c07386b06e9b37f5c82f5ed86c2f09-3 b/tests/fuzzers/txfetcher/corpus/78480977d5c07386b06e9b37f5c82f5ed86c2f09-3 new file mode 100644 index 00000000..e92863a1 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/78480977d5c07386b06e9b37f5c82f5ed86c2f09-3 @@ -0,0 +1,14 @@ + TESTING KEY----- +MIICXgIBAAKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iAJm2gsvvZhIrCHS3l6afab4pZB +l2+XsDulrKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xl/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj013sovGKUFfYAqVXVlxtIX +qyUBnu3Xh9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JEMhNRcVFMO8dDaFeo +f9Oeos0UotgiDktdQHxdNEwLjQflJJBzV+5OtwswCA=----EN RATESTI EY-----Q \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/7a113cd3c178934cdb64353af86d51462d7080a4-5 b/tests/fuzzers/txfetcher/corpus/7a113cd3c178934cdb64353af86d51462d7080a4-5 new file mode 100644 index 00000000..16818128 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/7a113cd3c178934cdb64353af86d51462d7080a4-5 @@ -0,0 +1,10 @@ +l6afab4pZB +l2+XsDlrKBxKKtDrGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTtqJQIDAQAB +AoGAGRzwwir7XvBOAy5tuV6ef6anZzus1s1Y1Clb6HbnWWF/wbZGOpet +3m4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKZTXtdZrh+k7hx0nTP8Jcb +uqFk541awmMogY/EfbWd6IOkp+4xqjlFBEDytgbIECQQDvH/6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz84SHEg1Ak/7KCxmD/sfgS5TeuNi8DoUBEmiSJwm7FX +ftxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su43sjXNueLKH8+ph2UfQuU9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xl/DoCzjA0CQQDU +y2pGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj13sovGKUFfYAqVXVlxtIoX +qUn3X9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JMhNRcVFMO8dDaFo +f9Oeos0UotgiDktdQHxdNEwLjQlJBz+OtwwA=---E ATTIEY- \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/7ea9f71020f3eb783f743f744eba8d8ca4b2582f-3 b/tests/fuzzers/txfetcher/corpus/7ea9f71020f3eb783f743f744eba8d8ca4b2582f-3 new file mode 100644 index 00000000..08f5bb99 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/7ea9f71020f3eb783f743f744eba8d8ca4b2582f-3 @@ -0,0 +1,9 @@ + +l2+DulrKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp +jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU diff --git a/tests/fuzzers/txfetcher/corpus/84f8c275f3ffbaf8c32c21782af13de10e7de28b-3 b/tests/fuzzers/txfetcher/corpus/84f8c275f3ffbaf8c32c21782af13de10e7de28b-3 new file mode 100644 index 00000000..2d6060c4 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/84f8c275f3ffbaf8c32c21782af13de10e7de28b-3 @@ -0,0 +1 @@ +KKtDlbjVeLKwZatTXtdZrhu+Jk7hx0xxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLQcmPcQETT YQ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/85dfe7ddee0e52aa19115c0ebb9ed28a14e488c6-5 b/tests/fuzzers/txfetcher/corpus/85dfe7ddee0e52aa19115c0ebb9ed28a14e488c6-5 new file mode 100644 index 00000000..9b6fe780 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/85dfe7ddee0e52aa19115c0ebb9ed28a14e488c6-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/87bba5b1e3da38fed8cb5a9bc5c8baa819e83d05-5 b/tests/fuzzers/txfetcher/corpus/87bba5b1e3da38fed8cb5a9bc5c8baa819e83d05-5 new file mode 100644 index 00000000..ef091f0b Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/87bba5b1e3da38fed8cb5a9bc5c8baa819e83d05-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/8a9ebedfbfec584d8b22761e6121dc1ca0248548-4 b/tests/fuzzers/txfetcher/corpus/8a9ebedfbfec584d8b22761e6121dc1ca0248548-4 new file mode 100644 index 00000000..953be792 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/8a9ebedfbfec584d8b22761e6121dc1ca0248548-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/8ff3bd49f93079e5e1c7f8f2461ba7ee612900c3-5 b/tests/fuzzers/txfetcher/corpus/8ff3bd49f93079e5e1c7f8f2461ba7ee612900c3-5 new file mode 100644 index 00000000..a86a6659 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/8ff3bd49f93079e5e1c7f8f2461ba7ee612900c3-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/9034aaf45143996a2b14465c352ab0c6fa26b221-2 b/tests/fuzzers/txfetcher/corpus/9034aaf45143996a2b14465c352ab0c6fa26b221-2 new file mode 100644 index 00000000..9c95a6ba --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/9034aaf45143996a2b14465c352ab0c6fa26b221-2 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/92cefdc6251d04896349a464b29be03d6bb04c3d-2 b/tests/fuzzers/txfetcher/corpus/92cefdc6251d04896349a464b29be03d6bb04c3d-2 new file mode 100644 index 00000000..9b78e457 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/92cefdc6251d04896349a464b29be03d6bb04c3d-2 @@ -0,0 +1 @@ +39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/9613e580ccb69df7c9074f0e2f6886ac6b34ca55-5 b/tests/fuzzers/txfetcher/corpus/9613e580ccb69df7c9074f0e2f6886ac6b34ca55-5 new file mode 100644 index 00000000..681adc6a Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/9613e580ccb69df7c9074f0e2f6886ac6b34ca55-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/98afc8970a680fdc4aee0b5d48784f650c566b75-6 b/tests/fuzzers/txfetcher/corpus/98afc8970a680fdc4aee0b5d48784f650c566b75-6 new file mode 100644 index 00000000..c82defc2 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/98afc8970a680fdc4aee0b5d48784f650c566b75-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/9dfc92f4ca2ece0167096fca6751ff314765f08b-8 b/tests/fuzzers/txfetcher/corpus/9dfc92f4ca2ece0167096fca6751ff314765f08b-8 new file mode 100644 index 00000000..be75c25f Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/9dfc92f4ca2ece0167096fca6751ff314765f08b-8 differ diff --git a/tests/fuzzers/txfetcher/corpus/9ebcbbfdaf0e98c87652e57226a4d8a35170c67d-4 b/tests/fuzzers/txfetcher/corpus/9ebcbbfdaf0e98c87652e57226a4d8a35170c67d-4 new file mode 100644 index 00000000..ab036767 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/9ebcbbfdaf0e98c87652e57226a4d8a35170c67d-4 @@ -0,0 +1,5 @@ +l2+DulrKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpwVbFLmQet +3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H +qzzVtxxr397vWrjr \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/9ff520eb8b8319a5fdafbe4d1cbb02a75058d93b-7 b/tests/fuzzers/txfetcher/corpus/9ff520eb8b8319a5fdafbe4d1cbb02a75058d93b-7 new file mode 100644 index 00000000..d91a1313 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/9ff520eb8b8319a5fdafbe4d1cbb02a75058d93b-7 @@ -0,0 +1,2 @@ +&w�€��������� � +� � � ����������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/0 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/a0b57a12e25ac5adcedb2a5c45915f0f62aee869-4 b/tests/fuzzers/txfetcher/corpus/a0b57a12e25ac5adcedb2a5c45915f0f62aee869-4 new file mode 100644 index 00000000..78243163 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/a0b57a12e25ac5adcedb2a5c45915f0f62aee869-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/a2684adccf16e036b051c12f283734fa803746e8-6 b/tests/fuzzers/txfetcher/corpus/a2684adccf16e036b051c12f283734fa803746e8-6 new file mode 100644 index 00000000..4e12af2d Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/a2684adccf16e036b051c12f283734fa803746e8-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/a37305974cf477ecfe65fa92f37b1f51dea25910-4 b/tests/fuzzers/txfetcher/corpus/a37305974cf477ecfe65fa92f37b1f51dea25910-4 new file mode 100644 index 00000000..75cb14e8 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/a37305974cf477ecfe65fa92f37b1f51dea25910-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/a7eb43926bd14b1f62a66a33107776e487434d32-7 b/tests/fuzzers/txfetcher/corpus/a7eb43926bd14b1f62a66a33107776e487434d32-7 new file mode 100644 index 00000000..88e61273 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/a7eb43926bd14b1f62a66a33107776e487434d32-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/a8f7c254eb64a40fd2a77b79979c7bbdac6a760c-4 b/tests/fuzzers/txfetcher/corpus/a8f7c254eb64a40fd2a77b79979c7bbdac6a760c-4 new file mode 100644 index 00000000..da61777c --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/a8f7c254eb64a40fd2a77b79979c7bbdac6a760c-4 @@ -0,0 +1,2 @@ +lxtIX +qyU3X9ps8ZfjLZ45l6cGhaJQYZHOde3JEMhNRcVFMO8dJDaFe \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/a9a8f287d6af24e47d8db468e8f967aa44fb5a1f-7 b/tests/fuzzers/txfetcher/corpus/a9a8f287d6af24e47d8db468e8f967aa44fb5a1f-7 new file mode 100644 index 00000000..7811921b Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/a9a8f287d6af24e47d8db468e8f967aa44fb5a1f-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/aa7444d8e326158046862590a0db993c07aef372-7 b/tests/fuzzers/txfetcher/corpus/aa7444d8e326158046862590a0db993c07aef372-7 new file mode 100644 index 00000000..870e12ff --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/aa7444d8e326158046862590a0db993c07aef372-7 @@ -0,0 +1 @@ +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@0000000000000 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/ae4593626d8796e079a358c2395a4f6c9ddd6a44-6 b/tests/fuzzers/txfetcher/corpus/ae4593626d8796e079a358c2395a4f6c9ddd6a44-6 new file mode 100644 index 00000000..845deedd --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/ae4593626d8796e079a358c2395a4f6c9ddd6a44-6 @@ -0,0 +1,8 @@ +9pmM gY/xEcfbWd6IOkp+4xqjlFLBEDytgbparsing /E6nk+hgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprLANGcQrooz8vp +jy4SHEg1AkEA/v13/@M47K9vCxb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY +fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xl/DoCz� jA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6Yj013sovGKUFfYAqVXVlxtIX +qyUBnu3Xh9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYFZHOde3JEMhNRcVFMO8dDaFeo +f9Oeos0Uot \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/b2942d4413a66939cda7db93020dee79eb17788c-9 b/tests/fuzzers/txfetcher/corpus/b2942d4413a66939cda7db93020dee79eb17788c-9 new file mode 100644 index 00000000..10aca651 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/b2942d4413a66939cda7db93020dee79eb17788c-9 differ diff --git a/tests/fuzzers/txfetcher/corpus/b4614117cdfd147d38f4e8a4d85f5a2bb99a6a4f-5 b/tests/fuzzers/txfetcher/corpus/b4614117cdfd147d38f4e8a4d85f5a2bb99a6a4f-5 new file mode 100644 index 00000000..af69eef9 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/b4614117cdfd147d38f4e8a4d85f5a2bb99a6a4f-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/b631ef3291fa405cd6517d11f4d1b9b6d02912d4-2 b/tests/fuzzers/txfetcher/corpus/b631ef3291fa405cd6517d11f4d1b9b6d02912d4-2 new file mode 100644 index 00000000..a6b8858b --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/b631ef3291fa405cd6517d11f4d1b9b6d02912d4-2 @@ -0,0 +1 @@ +&o \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/b7a91e338cc11f50ebdb2c414610efc4d5be3137-4 b/tests/fuzzers/txfetcher/corpus/b7a91e338cc11f50ebdb2c414610efc4d5be3137-4 new file mode 100644 index 00000000..9709a1fc Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/b7a91e338cc11f50ebdb2c414610efc4d5be3137-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/b858cb282617fb0956d960215c8e84d1ccf909c6-2 b/tests/fuzzers/txfetcher/corpus/b858cb282617fb0956d960215c8e84d1ccf909c6-2 new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/b858cb282617fb0956d960215c8e84d1ccf909c6-2 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/bc9d570aacf3acd39600feda8e72a293a4667da4-1 b/tests/fuzzers/txfetcher/corpus/bc9d570aacf3acd39600feda8e72a293a4667da4-1 new file mode 100644 index 00000000..aab27c59 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/bc9d570aacf3acd39600feda8e72a293a4667da4-1 @@ -0,0 +1 @@ +� \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/be7eed35b245b5d5d2adcdb4c67f07794eb86b24-3 b/tests/fuzzers/txfetcher/corpus/be7eed35b245b5d5d2adcdb4c67f07794eb86b24-3 new file mode 100644 index 00000000..47c996d3 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/be7eed35b245b5d5d2adcdb4c67f07794eb86b24-3 @@ -0,0 +1,2 @@ +4LZmbRc6+MUVeLKXtdZr+Jk7hhgN4H +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLQcmPcQ SN_ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/c010b0cd70c7edbc5bd332fc9e2e91c6a1cbcdc4-5 b/tests/fuzzers/txfetcher/corpus/c010b0cd70c7edbc5bd332fc9e2e91c6a1cbcdc4-5 new file mode 100644 index 00000000..474f14d8 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/c010b0cd70c7edbc5bd332fc9e2e91c6a1cbcdc4-5 @@ -0,0 +1,4 @@ + +Xc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nhgN4H +qzzVtxx7vWrjrIgPbJpvfb \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/c1690698607eb0f4c4244e9f9629968be4beb6bc-8 b/tests/fuzzers/txfetcher/corpus/c1690698607eb0f4c4244e9f9629968be4beb6bc-8 new file mode 100644 index 00000000..d184a2d8 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/c1690698607eb0f4c4244e9f9629968be4beb6bc-8 @@ -0,0 +1,2 @@ +&Ƚ�� � +� � � ����������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/0 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/c1f435e4f53a9a17578d9e8c4789860f962a1379-6 b/tests/fuzzers/txfetcher/corpus/c1f435e4f53a9a17578d9e8c4789860f962a1379-6 new file mode 100644 index 00000000..f2a68ec3 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/c1f435e4f53a9a17578d9e8c4789860f962a1379-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/c298a75334c3acf04bd129a8867447a25c8bacf8-7 b/tests/fuzzers/txfetcher/corpus/c298a75334c3acf04bd129a8867447a25c8bacf8-7 new file mode 100644 index 00000000..0b437f22 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/c298a75334c3acf04bd129a8867447a25c8bacf8-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/c42287c7d225e530e822f23bbbba6819a9e48f38-6 b/tests/fuzzers/txfetcher/corpus/c42287c7d225e530e822f23bbbba6819a9e48f38-6 new file mode 100644 index 00000000..91818f56 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/c42287c7d225e530e822f23bbbba6819a9e48f38-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/c4cdbb891f3ee76476b7375d5ed51691fed95421-10 b/tests/fuzzers/txfetcher/corpus/c4cdbb891f3ee76476b7375d5ed51691fed95421-10 new file mode 100644 index 00000000..e365cc52 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/c4cdbb891f3ee76476b7375d5ed51691fed95421-10 differ diff --git a/tests/fuzzers/txfetcher/corpus/cc9572d72dfa2937074b1766dcbcff9cc58d1137-4 b/tests/fuzzers/txfetcher/corpus/cc9572d72dfa2937074b1766dcbcff9cc58d1137-4 new file mode 100644 index 00000000..b72a78f5 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/cc9572d72dfa2937074b1766dcbcff9cc58d1137-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/cd1d73b4e101bc7b979e3f6f135cb12d4594d348-5 b/tests/fuzzers/txfetcher/corpus/cd1d73b4e101bc7b979e3f6f135cb12d4594d348-5 new file mode 100644 index 00000000..3079de55 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/cd1d73b4e101bc7b979e3f6f135cb12d4594d348-5 @@ -0,0 +1 @@ +822452601031714757585602556 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/d0acdc8fca32bbd58d368eeac3bd9eaa46f59d27-5 b/tests/fuzzers/txfetcher/corpus/d0acdc8fca32bbd58d368eeac3bd9eaa46f59d27-5 new file mode 100644 index 00000000..794d5d86 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/d0acdc8fca32bbd58d368eeac3bd9eaa46f59d27-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/d0e43b715fd00953f7bdd6dfad95811985e81396-4 b/tests/fuzzers/txfetcher/corpus/d0e43b715fd00953f7bdd6dfad95811985e81396-4 new file mode 100644 index 00000000..742db5fb Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/d0e43b715fd00953f7bdd6dfad95811985e81396-4 differ diff --git a/tests/fuzzers/txfetcher/corpus/d925fbd22c8bc0de34d6a9d1258ce3d2928d0927-8 b/tests/fuzzers/txfetcher/corpus/d925fbd22c8bc0de34d6a9d1258ce3d2928d0927-8 new file mode 100644 index 00000000..5920dfe6 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/d925fbd22c8bc0de34d6a9d1258ce3d2928d0927-8 differ diff --git a/tests/fuzzers/txfetcher/corpus/d9ba78cb7425724185d5fa300cd5c03aec2683bb-7 b/tests/fuzzers/txfetcher/corpus/d9ba78cb7425724185d5fa300cd5c03aec2683bb-7 new file mode 100644 index 00000000..c4df1cf2 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/d9ba78cb7425724185d5fa300cd5c03aec2683bb-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709 b/tests/fuzzers/txfetcher/corpus/da39a3ee5e6b4b0d3255bfef95601890afd80709 new file mode 100644 index 00000000..e69de29b diff --git a/tests/fuzzers/txfetcher/corpus/dcdb7758b87648b5d766b1b341a65834420cf621-7 b/tests/fuzzers/txfetcher/corpus/dcdb7758b87648b5d766b1b341a65834420cf621-7 new file mode 100644 index 00000000..78cf11ae Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/dcdb7758b87648b5d766b1b341a65834420cf621-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/dd441bd24581332c9ce19e008260a69287aa3cbc-6 b/tests/fuzzers/txfetcher/corpus/dd441bd24581332c9ce19e008260a69287aa3cbc-6 new file mode 100644 index 00000000..4e0c1400 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/dd441bd24581332c9ce19e008260a69287aa3cbc-6 @@ -0,0 +1,2 @@ +Dtf1nWk78c +/fWklyEQQ/+hgNzVtxxmDgS5TDETgeXVlXsjLZ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/def879fe0fd637a745c00c8f1da340518db8688c-2 b/tests/fuzzers/txfetcher/corpus/def879fe0fd637a745c00c8f1da340518db8688c-2 new file mode 100644 index 00000000..555752f0 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/def879fe0fd637a745c00c8f1da340518db8688c-2 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/df6c30a9781b93bd6d2f5e97e5592d5945210003-7 b/tests/fuzzers/txfetcher/corpus/df6c30a9781b93bd6d2f5e97e5592d5945210003-7 new file mode 100644 index 00000000..2a7adb09 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/df6c30a9781b93bd6d2f5e97e5592d5945210003-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/dfc1c3a2e3ccdaf6f88c515fd00e8ad08421e431-6 b/tests/fuzzers/txfetcher/corpus/dfc1c3a2e3ccdaf6f88c515fd00e8ad08421e431-6 new file mode 100644 index 00000000..59f3442c Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/dfc1c3a2e3ccdaf6f88c515fd00e8ad08421e431-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/e1dcc4e7ead6dfd1139ece7bf57d776cb9dac72d-7 b/tests/fuzzers/txfetcher/corpus/e1dcc4e7ead6dfd1139ece7bf57d776cb9dac72d-7 new file mode 100644 index 00000000..5ba489f9 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/e1dcc4e7ead6dfd1139ece7bf57d776cb9dac72d-7 differ diff --git a/tests/fuzzers/txfetcher/corpus/e39c2de2c8937d2cbd4339b13d6a0ce94d94f8d2-8 b/tests/fuzzers/txfetcher/corpus/e39c2de2c8937d2cbd4339b13d6a0ce94d94f8d2-8 new file mode 100644 index 00000000..0e950893 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/e39c2de2c8937d2cbd4339b13d6a0ce94d94f8d2-8 differ diff --git a/tests/fuzzers/txfetcher/corpus/e72f76b9579c792e545d02fe405d9186f0d6c39b-6 b/tests/fuzzers/txfetcher/corpus/e72f76b9579c792e545d02fe405d9186f0d6c39b-6 new file mode 100644 index 00000000..c4d34b17 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/e72f76b9579c792e545d02fe405d9186f0d6c39b-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/eb70814d6355a4498b8f301ba8dbc34f895a9947-5 b/tests/fuzzers/txfetcher/corpus/eb70814d6355a4498b8f301ba8dbc34f895a9947-5 new file mode 100644 index 00000000..bd57a22f Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/eb70814d6355a4498b8f301ba8dbc34f895a9947-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/ebdc17efe343e412634dca57cecd5a0e1ce1c1c7-5 b/tests/fuzzers/txfetcher/corpus/ebdc17efe343e412634dca57cecd5a0e1ce1c1c7-5 new file mode 100644 index 00000000..aaa3f695 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/ebdc17efe343e412634dca57cecd5a0e1ce1c1c7-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/ec0a25eba8966b8f628d821b3cfbdf2dfd4bbb4c-3 b/tests/fuzzers/txfetcher/corpus/ec0a25eba8966b8f628d821b3cfbdf2dfd4bbb4c-3 new file mode 100644 index 00000000..65cf0df8 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/ec0a25eba8966b8f628d821b3cfbdf2dfd4bbb4c-3 @@ -0,0 +1,13 @@ +&^oȗ-----BEGIN RSA TESTING KEY----- +MIICXgIBAAKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9 +SjY1bIw4iA5sBBZzHi3z0h1YV8PuxEbi4nW91IJm2gsvvZhIrHS3l6afab4pZB +l2+XsDulrKBxKKtD1rGxlG4Ljncdabn9vLZad2bSysqz/qTAUStvqJQIDAQAB +AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1K1ClbjbE6HXbnWWF/wbZGOpet +3Zm4vD6MXc7jpTLryzQIvVdfQbRc6+MUVeLKwZatTXtZru+Jk7hx0nTPy8Jcb +uJqFk541aEw+mMogY/xEcfbW6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hg4 +qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLcj2pIMPQroozvjg1AkEA/v13/5M47K9vCxmb8QeD/aydfsgS5TeuNi8DoUBEmiSJwmaXY +fFUtxv7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4bjeLKH8Q+ph2 +fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+AYiZ6PYj013sovGKFYqVXVlxtIX +qyUBnu3X9s8ZfjZO7BAkl4R5Yl6cGhaJQYZHOe3JEMhVFaFf9Oes0UUothgiDktdQxdNLj7+5CWA== +-----END RSASQ \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/eebe3b76aeba6deed965d17d2b024f7eae1a43f1-5 b/tests/fuzzers/txfetcher/corpus/eebe3b76aeba6deed965d17d2b024f7eae1a43f1-5 new file mode 100644 index 00000000..20d62e15 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/eebe3b76aeba6deed965d17d2b024f7eae1a43f1-5 differ diff --git a/tests/fuzzers/txfetcher/corpus/ef8741a9faf030794d98ff113f556c68a24719a5-6 b/tests/fuzzers/txfetcher/corpus/ef8741a9faf030794d98ff113f556c68a24719a5-6 new file mode 100644 index 00000000..09fcd86d Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/ef8741a9faf030794d98ff113f556c68a24719a5-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/efb7410d02418befeba25a43d676cc6124129125-4 b/tests/fuzzers/txfetcher/corpus/efb7410d02418befeba25a43d676cc6124129125-4 new file mode 100644 index 00000000..2191a732 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/efb7410d02418befeba25a43d676cc6124129125-4 @@ -0,0 +1 @@ +88242871'392752200424452601091531672177074144720616417147514758635765020556616 \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/f6f97d781a5a749903790e07db8619866cb7c3a1-6 b/tests/fuzzers/txfetcher/corpus/f6f97d781a5a749903790e07db8619866cb7c3a1-6 new file mode 100644 index 00000000..219a8d36 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/f6f97d781a5a749903790e07db8619866cb7c3a1-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/f7a3cd00fa0e57742e7dbbb8283dcaea067eaf7b-5 b/tests/fuzzers/txfetcher/corpus/f7a3cd00fa0e57742e7dbbb8283dcaea067eaf7b-5 new file mode 100644 index 00000000..f01ccd89 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/f7a3cd00fa0e57742e7dbbb8283dcaea067eaf7b-5 @@ -0,0 +1,2 @@ +Xyt0Xl/DoCzjA0CQQDU +y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYi \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/f94d60a6c556ce485ab60088291760b8be25776c-6 b/tests/fuzzers/txfetcher/corpus/f94d60a6c556ce485ab60088291760b8be25776c-6 new file mode 100644 index 00000000..58d841ff --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/f94d60a6c556ce485ab60088291760b8be25776c-6 @@ -0,0 +1,2 @@ +HZB4cQZde3JMNRcVFMO8dDFo +f9OeosiDdQQl \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/f9e627b2cb82ffa1ea5e0c6d7f2802f3000b18a8-6 b/tests/fuzzers/txfetcher/corpus/f9e627b2cb82ffa1ea5e0c6d7f2802f3000b18a8-6 new file mode 100644 index 00000000..b5dfecc1 Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/f9e627b2cb82ffa1ea5e0c6d7f2802f3000b18a8-6 differ diff --git a/tests/fuzzers/txfetcher/corpus/fb3775aa24e5667e658920c05ba4b7b19ff256fb-5 b/tests/fuzzers/txfetcher/corpus/fb3775aa24e5667e658920c05ba4b7b19ff256fb-5 new file mode 100644 index 00000000..6f4927d8 --- /dev/null +++ b/tests/fuzzers/txfetcher/corpus/fb3775aa24e5667e658920c05ba4b7b19ff256fb-5 @@ -0,0 +1 @@ +HZB4c2cPclieoverpGsumgUtWj3NMYPZ/F8t5YlNR8dDFoiDdQQl \ No newline at end of file diff --git a/tests/fuzzers/txfetcher/corpus/fd6386548e119a50db96b2fa406e54924c45a2d5-6 b/tests/fuzzers/txfetcher/corpus/fd6386548e119a50db96b2fa406e54924c45a2d5-6 new file mode 100644 index 00000000..6fff60ed Binary files /dev/null and b/tests/fuzzers/txfetcher/corpus/fd6386548e119a50db96b2fa406e54924c45a2d5-6 differ diff --git a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go new file mode 100644 index 00000000..d1d6fdc6 --- /dev/null +++ b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go @@ -0,0 +1,205 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package txfetcher + +import ( + "bytes" + "fmt" + "math/big" + "math/rand" + "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/fetcher" +) + +var ( + peers []string + txs []*types.Transaction +) + +func init() { + // Random is nice, but we need it deterministic + rand := rand.New(rand.NewSource(0x3a29)) + + peers = make([]string, 10) + for i := 0; i < len(peers); i++ { + peers[i] = fmt.Sprintf("Peer #%d", i) + } + txs = make([]*types.Transaction, 65536) // We need to bump enough to hit all the limits + for i := 0; i < len(txs); i++ { + txs[i] = types.NewTransaction(rand.Uint64(), common.Address{byte(rand.Intn(256))}, new(big.Int), 0, new(big.Int), nil) + } +} + +func Fuzz(input []byte) int { + // Don't generate insanely large test cases, not much value in them + if len(input) > 16*1024 { + return 0 + } + verbose := false + r := bytes.NewReader(input) + + // Reduce the problem space for certain fuzz runs. Small tx space is better + // for testing clashes and in general the fetcher, but we should still run + // some tests with large spaces to hit potential issues on limits. + limit, err := r.ReadByte() + if err != nil { + return 0 + } + switch limit % 4 { + case 0: + txs = txs[:4] + case 1: + txs = txs[:256] + case 2: + txs = txs[:4096] + case 3: + // Full run + } + // Create a fetcher and hook into it's simulated fields + clock := new(mclock.Simulated) + rand := rand.New(rand.NewSource(0x3a29)) // Same used in package tests!!! + + f := fetcher.NewTxFetcherForTests( + func(common.Hash) bool { return false }, + func(txs []*types.Transaction) []error { + return make([]error, len(txs)) + }, + func(string, []common.Hash) error { return nil }, + clock, rand, + ) + f.Start() + defer f.Stop() + + // Try to throw random junk at the fetcher + for { + // Read the next command and abort if we're done + cmd, err := r.ReadByte() + if err != nil { + return 0 + } + switch cmd % 4 { + case 0: + // Notify a new set of transactions: + // Byte 1: Peer index to announce with + // Byte 2: Number of hashes to announce + // Byte 3-4, 5-6, etc: Transaction indices (2 byte) to announce + peerIdx, err := r.ReadByte() + if err != nil { + return 0 + } + peer := peers[int(peerIdx)%len(peers)] + + announceCnt, err := r.ReadByte() + if err != nil { + return 0 + } + announce := int(announceCnt) % (2 * len(txs)) // No point in generating too many duplicates + + var ( + announceIdxs = make([]int, announce) + announces = make([]common.Hash, announce) + ) + for i := 0; i < len(announces); i++ { + annBuf := make([]byte, 2) + if n, err := r.Read(annBuf); err != nil || n != 2 { + return 0 + } + announceIdxs[i] = (int(annBuf[0])*256 + int(annBuf[1])) % len(txs) + announces[i] = txs[announceIdxs[i]].Hash() + } + if verbose { + fmt.Println("Notify", peer, announceIdxs) + } + if err := f.Notify(peer, announces); err != nil { + panic(err) + } + + case 1: + // Deliver a new set of transactions: + // Byte 1: Peer index to announce with + // Byte 2: Number of hashes to announce + // Byte 3-4, 5-6, etc: Transaction indices (2 byte) to announce + peerIdx, err := r.ReadByte() + if err != nil { + return 0 + } + peer := peers[int(peerIdx)%len(peers)] + + deliverCnt, err := r.ReadByte() + if err != nil { + return 0 + } + deliver := int(deliverCnt) % (2 * len(txs)) // No point in generating too many duplicates + + var ( + deliverIdxs = make([]int, deliver) + deliveries = make([]*types.Transaction, deliver) + ) + for i := 0; i < len(deliveries); i++ { + deliverBuf := make([]byte, 2) + if n, err := r.Read(deliverBuf); err != nil || n != 2 { + return 0 + } + deliverIdxs[i] = (int(deliverBuf[0])*256 + int(deliverBuf[1])) % len(txs) + deliveries[i] = txs[deliverIdxs[i]] + } + directFlag, err := r.ReadByte() + if err != nil { + return 0 + } + direct := (directFlag % 2) == 0 + if verbose { + fmt.Println("Enqueue", peer, deliverIdxs, direct) + } + if err := f.Enqueue(peer, deliveries, direct); err != nil { + panic(err) + } + + case 2: + // Drop a peer: + // Byte 1: Peer index to drop + peerIdx, err := r.ReadByte() + if err != nil { + return 0 + } + peer := peers[int(peerIdx)%len(peers)] + if verbose { + fmt.Println("Drop", peer) + } + if err := f.Drop(peer); err != nil { + panic(err) + } + + case 3: + // Move the simulated clock forward + // Byte 1: 100ms increment to move forward + tickCnt, err := r.ReadByte() + if err != nil { + return 0 + } + tick := time.Duration(tickCnt) * 100 * time.Millisecond + if verbose { + fmt.Println("Sleep", tick) + } + clock.Run(tick) + } + } +} diff --git a/tests/fuzzers/vflux/clientpool-fuzzer.go b/tests/fuzzers/vflux/clientpool-fuzzer.go new file mode 100644 index 00000000..b3b523cc --- /dev/null +++ b/tests/fuzzers/vflux/clientpool-fuzzer.go @@ -0,0 +1,333 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package vflux + +import ( + "bytes" + "encoding/binary" + "io" + "math" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/les/vflux" + vfs "github.com/ethereum/go-ethereum/les/vflux/server" + "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" +) + +var ( + debugMode = false + doLog = func(msg string, ctx ...interface{}) { + if !debugMode { + return + } + log.Info(msg, ctx...) + } +) + +type fuzzer struct { + peers [256]*clientPeer + disconnectList []*clientPeer + input io.Reader + exhausted bool + activeCount, activeCap uint64 + maxCount, maxCap uint64 +} + +type clientPeer struct { + fuzzer *fuzzer + node *enode.Node + freeID string + timeout time.Duration + + balance vfs.ConnectedBalance + capacity uint64 +} + +func (p *clientPeer) Node() *enode.Node { + return p.node +} + +func (p *clientPeer) FreeClientId() string { + return p.freeID +} + +func (p *clientPeer) InactiveAllowance() time.Duration { + return p.timeout +} + +func (p *clientPeer) UpdateCapacity(newCap uint64, requested bool) { + origin, originTotal := p.capacity, p.fuzzer.activeCap + p.fuzzer.activeCap -= p.capacity + if p.capacity != 0 { + p.fuzzer.activeCount-- + } + p.capacity = newCap + p.fuzzer.activeCap += p.capacity + if p.capacity != 0 { + p.fuzzer.activeCount++ + } + doLog("Update capacity", "peer", p.node.ID(), "origin", origin, "cap", newCap, "origintotal", originTotal, "total", p.fuzzer.activeCap, "requested", requested) +} + +func (p *clientPeer) Disconnect() { + origin, originTotal := p.capacity, p.fuzzer.activeCap + p.fuzzer.disconnectList = append(p.fuzzer.disconnectList, p) + p.fuzzer.activeCap -= p.capacity + if p.capacity != 0 { + p.fuzzer.activeCount-- + } + p.capacity = 0 + p.balance = nil + doLog("Disconnect", "peer", p.node.ID(), "origin", origin, "origintotal", originTotal, "total", p.fuzzer.activeCap) +} + +func newFuzzer(input []byte) *fuzzer { + f := &fuzzer{ + input: bytes.NewReader(input), + } + for i := range f.peers { + f.peers[i] = &clientPeer{ + fuzzer: f, + node: enode.SignNull(new(enr.Record), enode.ID{byte(i)}), + freeID: string([]byte{byte(i)}), + timeout: f.randomDelay(), + } + } + return f +} + +func (f *fuzzer) read(size int) []byte { + out := make([]byte, size) + if _, err := f.input.Read(out); err != nil { + f.exhausted = true + } + return out +} + +func (f *fuzzer) randomByte() byte { + d := f.read(1) + return d[0] +} + +func (f *fuzzer) randomBool() bool { + d := f.read(1) + return d[0]&1 == 1 +} + +func (f *fuzzer) randomInt(max int) int { + if max == 0 { + return 0 + } + if max <= 256 { + return int(f.randomByte()) % max + } + var a uint16 + if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { + f.exhausted = true + } + return int(a % uint16(max)) +} + +func (f *fuzzer) randomTokenAmount(signed bool) int64 { + x := uint64(f.randomInt(65000)) + x = x * x * x * x + + if signed && (x&1) == 1 { + if x <= math.MaxInt64 { + return -int64(x) + } + return math.MinInt64 + } + if x <= math.MaxInt64 { + return int64(x) + } + return math.MaxInt64 +} + +func (f *fuzzer) randomDelay() time.Duration { + delay := f.randomByte() + if delay < 128 { + return time.Duration(delay) * time.Second + } + return 0 +} + +func (f *fuzzer) randomFactors() vfs.PriceFactors { + return vfs.PriceFactors{ + TimeFactor: float64(f.randomByte()) / 25500, + CapacityFactor: float64(f.randomByte()) / 255, + RequestFactor: float64(f.randomByte()) / 255, + } +} + +func (f *fuzzer) connectedBalanceOp(balance vfs.ConnectedBalance, id enode.ID) { + switch f.randomInt(3) { + case 0: + cost := uint64(f.randomTokenAmount(false)) + balance.RequestServed(cost) + doLog("Serve request cost", "id", id, "amount", cost) + case 1: + posFactor, negFactor := f.randomFactors(), f.randomFactors() + balance.SetPriceFactors(posFactor, negFactor) + doLog("Set price factor", "pos", posFactor, "neg", negFactor) + case 2: + balance.GetBalance() + balance.GetRawBalance() + balance.GetPriceFactors() + } +} + +func (f *fuzzer) atomicBalanceOp(balance vfs.AtomicBalanceOperator, id enode.ID) { + switch f.randomInt(3) { + case 0: + amount := f.randomTokenAmount(true) + balance.AddBalance(amount) + doLog("Add balance", "id", id, "amount", amount) + case 1: + pos, neg := uint64(f.randomTokenAmount(false)), uint64(f.randomTokenAmount(false)) + balance.SetBalance(pos, neg) + doLog("Set balance", "id", id, "pos", pos, "neg", neg) + case 2: + balance.GetBalance() + balance.GetRawBalance() + balance.GetPriceFactors() + } +} + +func FuzzClientPool(input []byte) int { + if len(input) > 10000 { + return -1 + } + f := newFuzzer(input) + if f.exhausted { + return 0 + } + clock := &mclock.Simulated{} + db := memorydb.New() + pool := vfs.NewClientPool(db, 10, f.randomDelay(), clock, func() bool { return true }) + pool.Start() + defer pool.Stop() + + count := 0 + for !f.exhausted && count < 1000 { + count++ + switch f.randomInt(11) { + case 0: + i := int(f.randomByte()) + f.peers[i].balance = pool.Register(f.peers[i]) + doLog("Register peer", "id", f.peers[i].node.ID()) + case 1: + i := int(f.randomByte()) + f.peers[i].Disconnect() + doLog("Disconnect peer", "id", f.peers[i].node.ID()) + case 2: + f.maxCount = uint64(f.randomByte()) + f.maxCap = uint64(f.randomByte()) + f.maxCap *= f.maxCap + + count, cap := pool.Limits() + pool.SetLimits(f.maxCount, f.maxCap) + doLog("Set limits", "maxcount", f.maxCount, "maxcap", f.maxCap, "origincount", count, "oricap", cap) + case 3: + bias := f.randomDelay() + pool.SetConnectedBias(f.randomDelay()) + doLog("Set connection bias", "bias", bias) + case 4: + pos, neg := f.randomFactors(), f.randomFactors() + pool.SetDefaultFactors(pos, neg) + doLog("Set default factors", "pos", pos, "neg", neg) + case 5: + pos, neg := uint64(f.randomInt(50000)), uint64(f.randomInt(50000)) + pool.SetExpirationTCs(pos, neg) + doLog("Set expiration constants", "pos", pos, "neg", neg) + case 6: + var ( + index = f.randomByte() + reqCap = uint64(f.randomByte()) + bias = f.randomDelay() + requested = f.randomBool() + ) + pool.SetCapacity(f.peers[index].node, reqCap, bias, requested) + doLog("Set capacity", "id", f.peers[index].node.ID(), "reqcap", reqCap, "bias", bias, "requested", requested) + case 7: + index := f.randomByte() + if balance := f.peers[index].balance; balance != nil { + f.connectedBalanceOp(balance, f.peers[index].node.ID()) + } + case 8: + index := f.randomByte() + pool.BalanceOperation(f.peers[index].node.ID(), f.peers[index].freeID, func(balance vfs.AtomicBalanceOperator) { + count := f.randomInt(4) + for i := 0; i < count; i++ { + f.atomicBalanceOp(balance, f.peers[index].node.ID()) + } + }) + case 9: + pool.TotalTokenAmount() + pool.GetExpirationTCs() + pool.Active() + pool.Limits() + pool.GetPosBalanceIDs(f.peers[f.randomByte()].node.ID(), f.peers[f.randomByte()].node.ID(), f.randomInt(100)) + case 10: + req := vflux.CapacityQueryReq{ + Bias: uint64(f.randomByte()), + AddTokens: make([]vflux.IntOrInf, f.randomInt(vflux.CapacityQueryMaxLen+1)), + } + for i := range req.AddTokens { + v := vflux.IntOrInf{Type: uint8(f.randomInt(4))} + if v.Type < 2 { + v.Value = *big.NewInt(f.randomTokenAmount(false)) + } + req.AddTokens[i] = v + } + reqEnc, err := rlp.EncodeToBytes(&req) + if err != nil { + panic(err) + } + p := int(f.randomByte()) + if p < len(reqEnc) { + reqEnc[p] = f.randomByte() + } + pool.Handle(f.peers[f.randomByte()].node.ID(), f.peers[f.randomByte()].freeID, vflux.CapacityQueryName, reqEnc) + } + + for _, peer := range f.disconnectList { + pool.Unregister(peer) + doLog("Unregister peer", "id", peer.node.ID()) + } + f.disconnectList = nil + if d := f.randomDelay(); d > 0 { + clock.Run(d) + } + doLog("Clientpool stats in fuzzer", "count", f.activeCap, "maxcount", f.maxCount, "cap", f.activeCap, "maxcap", f.maxCap) + activeCount, activeCap := pool.Active() + doLog("Clientpool stats in pool", "count", activeCount, "cap", activeCap) + if activeCount != f.activeCount || activeCap != f.activeCap { + panic(nil) + } + if f.activeCount > f.maxCount || f.activeCap > f.maxCap { + panic(nil) + } + } + return 0 +} diff --git a/tests/fuzzers/vflux/debug/main.go b/tests/fuzzers/vflux/debug/main.go new file mode 100644 index 00000000..e6cec046 --- /dev/null +++ b/tests/fuzzers/vflux/debug/main.go @@ -0,0 +1,43 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/tests/fuzzers/vflux" +) + +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: debug \n") + fmt.Fprintf(os.Stderr, "Example\n") + fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") + os.Exit(1) + } + crasher := os.Args[1] + data, err := os.ReadFile(crasher) + if err != nil { + fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) + os.Exit(1) + } + vflux.FuzzClientPool(data) +} diff --git a/tests/gen_btheader.go b/tests/gen_btheader.go index 3e68dc25..4387f8db 100644 --- a/tests/gen_btheader.go +++ b/tests/gen_btheader.go @@ -6,10 +6,10 @@ import ( "encoding/json" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core/types" + "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/types" ) var _ = (*btHeaderMarshaling)(nil) @@ -33,6 +33,7 @@ func (b btHeader) MarshalJSON() ([]byte, error) { GasLimit math.HexOrDecimal64 GasUsed math.HexOrDecimal64 Timestamp math.HexOrDecimal64 + BaseFeePerGas *math.HexOrDecimal256 } var enc btHeader enc.Bloom = b.Bloom @@ -51,6 +52,7 @@ func (b btHeader) MarshalJSON() ([]byte, error) { enc.GasLimit = math.HexOrDecimal64(b.GasLimit) enc.GasUsed = math.HexOrDecimal64(b.GasUsed) enc.Timestamp = math.HexOrDecimal64(b.Timestamp) + enc.BaseFeePerGas = (*math.HexOrDecimal256)(b.BaseFeePerGas) return json.Marshal(&enc) } @@ -73,6 +75,7 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { GasLimit *math.HexOrDecimal64 GasUsed *math.HexOrDecimal64 Timestamp *math.HexOrDecimal64 + BaseFeePerGas *math.HexOrDecimal256 } var dec btHeader if err := json.Unmarshal(input, &dec); err != nil { @@ -126,5 +129,8 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { if dec.Timestamp != nil { b.Timestamp = uint64(*dec.Timestamp) } + if dec.BaseFeePerGas != nil { + b.BaseFeePerGas = (*big.Int)(dec.BaseFeePerGas) + } return nil } diff --git a/tests/gen_difficultytest.go b/tests/gen_difficultytest.go index 86c82a08..cd15ae31 100644 --- a/tests/gen_difficultytest.go +++ b/tests/gen_difficultytest.go @@ -6,8 +6,8 @@ import ( "encoding/json" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" ) var _ = (*difficultyTestMarshaling)(nil) diff --git a/tests/gen_stenv.go b/tests/gen_stenv.go index aeff1f26..71f00631 100644 --- a/tests/gen_stenv.go +++ b/tests/gen_stenv.go @@ -7,36 +7,44 @@ import ( "errors" "math/big" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" ) var _ = (*stEnvMarshaling)(nil) +// MarshalJSON marshals as JSON. func (s stEnv) MarshalJSON() ([]byte, error) { type stEnv struct { Coinbase common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"` - Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"required"` + Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"optional"` + Random *math.HexOrDecimal256 `json:"currentRandom" gencodec:"optional"` GasLimit math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"` Number math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"` Timestamp math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` + BaseFee *math.HexOrDecimal256 `json:"currentBaseFee" gencodec:"optional"` } var enc stEnv enc.Coinbase = common.UnprefixedAddress(s.Coinbase) enc.Difficulty = (*math.HexOrDecimal256)(s.Difficulty) + enc.Random = (*math.HexOrDecimal256)(s.Random) enc.GasLimit = math.HexOrDecimal64(s.GasLimit) enc.Number = math.HexOrDecimal64(s.Number) enc.Timestamp = math.HexOrDecimal64(s.Timestamp) + enc.BaseFee = (*math.HexOrDecimal256)(s.BaseFee) return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (s *stEnv) UnmarshalJSON(input []byte) error { type stEnv struct { Coinbase *common.UnprefixedAddress `json:"currentCoinbase" gencodec:"required"` - Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"required"` + Difficulty *math.HexOrDecimal256 `json:"currentDifficulty" gencodec:"optional"` + Random *math.HexOrDecimal256 `json:"currentRandom" gencodec:"optional"` GasLimit *math.HexOrDecimal64 `json:"currentGasLimit" gencodec:"required"` Number *math.HexOrDecimal64 `json:"currentNumber" gencodec:"required"` Timestamp *math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` + BaseFee *math.HexOrDecimal256 `json:"currentBaseFee" gencodec:"optional"` } var dec stEnv if err := json.Unmarshal(input, &dec); err != nil { @@ -46,10 +54,12 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'currentCoinbase' for stEnv") } s.Coinbase = common.Address(*dec.Coinbase) - if dec.Difficulty == nil { - return errors.New("missing required field 'currentDifficulty' for stEnv") + if dec.Difficulty != nil { + s.Difficulty = (*big.Int)(dec.Difficulty) + } + if dec.Random != nil { + s.Random = (*big.Int)(dec.Random) } - s.Difficulty = (*big.Int)(dec.Difficulty) if dec.GasLimit == nil { return errors.New("missing required field 'currentGasLimit' for stEnv") } @@ -62,5 +72,8 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'currentTimestamp' for stEnv") } s.Timestamp = uint64(*dec.Timestamp) + if dec.BaseFee != nil { + s.BaseFee = (*big.Int)(dec.BaseFee) + } return nil } diff --git a/tests/gen_sttransaction.go b/tests/gen_sttransaction.go index a5d45d3e..7693a207 100644 --- a/tests/gen_sttransaction.go +++ b/tests/gen_sttransaction.go @@ -6,27 +6,35 @@ import ( "encoding/json" "math/big" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core/types" ) var _ = (*stTransactionMarshaling)(nil) +// MarshalJSON marshals as JSON. func (s stTransaction) MarshalJSON() ([]byte, error) { type stTransaction struct { - GasPrice *math.HexOrDecimal256 `json:"gasPrice"` - Nonce math.HexOrDecimal64 `json:"nonce"` - To string `json:"to"` - Data []string `json:"data"` - GasLimit []math.HexOrDecimal64 `json:"gasLimit"` - Value []string `json:"value"` - PrivateKey hexutil.Bytes `json:"secretKey"` + GasPrice *math.HexOrDecimal256 `json:"gasPrice"` + MaxFeePerGas *math.HexOrDecimal256 `json:"maxFeePerGas"` + MaxPriorityFeePerGas *math.HexOrDecimal256 `json:"maxPriorityFeePerGas"` + Nonce math.HexOrDecimal64 `json:"nonce"` + To string `json:"to"` + Data []string `json:"data"` + AccessLists []*types.AccessList `json:"accessLists,omitempty"` + GasLimit []math.HexOrDecimal64 `json:"gasLimit"` + Value []string `json:"value"` + PrivateKey hexutil.Bytes `json:"secretKey"` } var enc stTransaction enc.GasPrice = (*math.HexOrDecimal256)(s.GasPrice) + enc.MaxFeePerGas = (*math.HexOrDecimal256)(s.MaxFeePerGas) + enc.MaxPriorityFeePerGas = (*math.HexOrDecimal256)(s.MaxPriorityFeePerGas) enc.Nonce = math.HexOrDecimal64(s.Nonce) enc.To = s.To enc.Data = s.Data + enc.AccessLists = s.AccessLists if s.GasLimit != nil { enc.GasLimit = make([]math.HexOrDecimal64, len(s.GasLimit)) for k, v := range s.GasLimit { @@ -38,15 +46,19 @@ func (s stTransaction) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (s *stTransaction) UnmarshalJSON(input []byte) error { type stTransaction struct { - GasPrice *math.HexOrDecimal256 `json:"gasPrice"` - Nonce *math.HexOrDecimal64 `json:"nonce"` - To *string `json:"to"` - Data []string `json:"data"` - GasLimit []math.HexOrDecimal64 `json:"gasLimit"` - Value []string `json:"value"` - PrivateKey *hexutil.Bytes `json:"secretKey"` + GasPrice *math.HexOrDecimal256 `json:"gasPrice"` + MaxFeePerGas *math.HexOrDecimal256 `json:"maxFeePerGas"` + MaxPriorityFeePerGas *math.HexOrDecimal256 `json:"maxPriorityFeePerGas"` + Nonce *math.HexOrDecimal64 `json:"nonce"` + To *string `json:"to"` + Data []string `json:"data"` + AccessLists []*types.AccessList `json:"accessLists,omitempty"` + GasLimit []math.HexOrDecimal64 `json:"gasLimit"` + Value []string `json:"value"` + PrivateKey *hexutil.Bytes `json:"secretKey"` } var dec stTransaction if err := json.Unmarshal(input, &dec); err != nil { @@ -55,6 +67,12 @@ func (s *stTransaction) UnmarshalJSON(input []byte) error { if dec.GasPrice != nil { s.GasPrice = (*big.Int)(dec.GasPrice) } + if dec.MaxFeePerGas != nil { + s.MaxFeePerGas = (*big.Int)(dec.MaxFeePerGas) + } + if dec.MaxPriorityFeePerGas != nil { + s.MaxPriorityFeePerGas = (*big.Int)(dec.MaxPriorityFeePerGas) + } if dec.Nonce != nil { s.Nonce = uint64(*dec.Nonce) } @@ -64,6 +82,9 @@ func (s *stTransaction) UnmarshalJSON(input []byte) error { if dec.Data != nil { s.Data = dec.Data } + if dec.AccessLists != nil { + s.AccessLists = dec.AccessLists + } if dec.GasLimit != nil { s.GasLimit = make([]uint64, len(dec.GasLimit)) for k, v := range dec.GasLimit { diff --git a/tests/gen_vmexec.go b/tests/gen_vmexec.go deleted file mode 100644 index 14e0dfd5..00000000 --- a/tests/gen_vmexec.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package tests - -import ( - "encoding/json" - "errors" - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" -) - -var _ = (*vmExecMarshaling)(nil) - -func (v vmExec) MarshalJSON() ([]byte, error) { - type vmExec struct { - Address common.UnprefixedAddress `json:"address" gencodec:"required"` - Caller common.UnprefixedAddress `json:"caller" gencodec:"required"` - Origin common.UnprefixedAddress `json:"origin" gencodec:"required"` - Code hexutil.Bytes `json:"code" gencodec:"required"` - Data hexutil.Bytes `json:"data" gencodec:"required"` - Value *math.HexOrDecimal256 `json:"value" gencodec:"required"` - GasLimit math.HexOrDecimal64 `json:"gas" gencodec:"required"` - GasPrice *math.HexOrDecimal256 `json:"gasPrice" gencodec:"required"` - } - var enc vmExec - enc.Address = common.UnprefixedAddress(v.Address) - enc.Caller = common.UnprefixedAddress(v.Caller) - enc.Origin = common.UnprefixedAddress(v.Origin) - enc.Code = v.Code - enc.Data = v.Data - enc.Value = (*math.HexOrDecimal256)(v.Value) - enc.GasLimit = math.HexOrDecimal64(v.GasLimit) - enc.GasPrice = (*math.HexOrDecimal256)(v.GasPrice) - return json.Marshal(&enc) -} - -func (v *vmExec) UnmarshalJSON(input []byte) error { - type vmExec struct { - Address *common.UnprefixedAddress `json:"address" gencodec:"required"` - Caller *common.UnprefixedAddress `json:"caller" gencodec:"required"` - Origin *common.UnprefixedAddress `json:"origin" gencodec:"required"` - Code *hexutil.Bytes `json:"code" gencodec:"required"` - Data *hexutil.Bytes `json:"data" gencodec:"required"` - Value *math.HexOrDecimal256 `json:"value" gencodec:"required"` - GasLimit *math.HexOrDecimal64 `json:"gas" gencodec:"required"` - GasPrice *math.HexOrDecimal256 `json:"gasPrice" gencodec:"required"` - } - var dec vmExec - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.Address == nil { - return errors.New("missing required field 'address' for vmExec") - } - v.Address = common.Address(*dec.Address) - if dec.Caller == nil { - return errors.New("missing required field 'caller' for vmExec") - } - v.Caller = common.Address(*dec.Caller) - if dec.Origin == nil { - return errors.New("missing required field 'origin' for vmExec") - } - v.Origin = common.Address(*dec.Origin) - if dec.Code == nil { - return errors.New("missing required field 'code' for vmExec") - } - v.Code = *dec.Code - if dec.Data == nil { - return errors.New("missing required field 'data' for vmExec") - } - v.Data = *dec.Data - if dec.Value == nil { - return errors.New("missing required field 'value' for vmExec") - } - v.Value = (*big.Int)(dec.Value) - if dec.GasLimit == nil { - return errors.New("missing required field 'gas' for vmExec") - } - v.GasLimit = uint64(*dec.GasLimit) - if dec.GasPrice == nil { - return errors.New("missing required field 'gasPrice' for vmExec") - } - v.GasPrice = (*big.Int)(dec.GasPrice) - return nil -} diff --git a/tests/init.go b/tests/init.go index c5b101b3..87ffc65a 100644 --- a/tests/init.go +++ b/tests/init.go @@ -19,8 +19,9 @@ package tests import ( "fmt" "math/big" + "sort" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" ) // Forks table defines supported forks and their chain config. @@ -140,6 +141,105 @@ var Forks = map[string]*params.ChainConfig{ PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(5), }, + "Berlin": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + }, + "BerlinToLondonAt5": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(5), + }, + "London": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + }, + "ArrowGlacier": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + }, + "GrayGlacier": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + GrayGlacierBlock: big.NewInt(0), + }, + "Merged": { + 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(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + MergeNetsplitBlock: big.NewInt(0), + TerminalTotalDifficulty: big.NewInt(0), + }, +} + +// Returns the set of defined fork names +func AvailableForks() []string { + var availableForks []string + for k := range Forks { + availableForks = append(availableForks, k) + } + sort.Strings(availableForks) + return availableForks } // 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 fe829b1a..4ef5aaf7 100644 --- a/tests/init_test.go +++ b/tests/init_test.go @@ -20,7 +20,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "os" "path/filepath" "reflect" @@ -30,21 +29,22 @@ import ( "strings" "testing" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" ) 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") difficultyTestDir = filepath.Join(baseDir, "BasicTests") + benchmarksDir = filepath.Join(".", "evm-benchmarks", "benchmarks") ) func readJSON(reader io.Reader, value interface{}) error { - data, err := ioutil.ReadAll(reader) + data, err := io.ReadAll(reader) if err != nil { return fmt.Errorf("error reading JSON file: %v", err) } @@ -88,11 +88,11 @@ func findLine(data []byte, offset int64) (line int) { // testMatcher controls skipping and chain config assignment to tests. type testMatcher struct { - configpat []testConfig - failpat []testFailure - skiploadpat []*regexp.Regexp - slowpat []*regexp.Regexp - whitelistpat *regexp.Regexp + configpat []testConfig + failpat []testFailure + skiploadpat []*regexp.Regexp + slowpat []*regexp.Regexp + runonlylistpat *regexp.Regexp } type testConfig struct { @@ -116,6 +116,7 @@ func (tm *testMatcher) skipLoad(pattern string) { } // fails adds an expected failure for tests matching the pattern. +//nolint:unused func (tm *testMatcher) fails(pattern string, reason string) { if reason == "" { panic("empty fail reason") @@ -123,8 +124,8 @@ func (tm *testMatcher) fails(pattern string, reason string) { tm.failpat = append(tm.failpat, testFailure{regexp.MustCompile(pattern), reason}) } -func (tm *testMatcher) whitelist(pattern string) { - tm.whitelistpat = regexp.MustCompile(pattern) +func (tm *testMatcher) runonly(pattern string) { + tm.runonlylistpat = regexp.MustCompile(pattern) } // config defines chain config for tests matching the pattern. @@ -154,10 +155,9 @@ func (tm *testMatcher) findSkip(name string) (reason string, skipload bool) { } // findConfig returns the chain config matching defined patterns. -func (tm *testMatcher) findConfig(name string) *params.ChainConfig { - // TODO(fjl): name can be derived from testing.T when min Go version is 1.8 +func (tm *testMatcher) findConfig(t *testing.T) *params.ChainConfig { for _, m := range tm.configpat { - if m.p.MatchString(name) { + if m.p.MatchString(t.Name()) { return &m.config } } @@ -165,11 +165,10 @@ func (tm *testMatcher) findConfig(name string) *params.ChainConfig { } // checkFailure checks whether a failure is expected. -func (tm *testMatcher) checkFailure(t *testing.T, name string, err error) error { - // TODO(fjl): name can be derived from t when min Go version is 1.8 +func (tm *testMatcher) checkFailure(t *testing.T, err error) error { failReason := "" for _, m := range tm.failpat { - if m.p.MatchString(name) { + if m.p.MatchString(t.Name()) { failReason = m.reason break } @@ -218,9 +217,9 @@ func (tm *testMatcher) runTestFile(t *testing.T, path, name string, runTest inte if r, _ := tm.findSkip(name); r != "" { t.Skip(r) } - if tm.whitelistpat != nil { - if !tm.whitelistpat.MatchString(name) { - t.Skip("Skipped by whitelist") + if tm.runonlylistpat != nil { + if !tm.runonlylistpat.MatchString(name) { + t.Skip("Skipped by runonly") } } t.Parallel() @@ -276,3 +275,14 @@ func runTestFunc(runTest interface{}, t *testing.T, name string, m reflect.Value m.MapIndex(reflect.ValueOf(key)), }) } + +func TestMatcherRunonlylist(t *testing.T) { + t.Parallel() + tm := new(testMatcher) + tm.runonly("invalid*") + tm.walk(t, rlpTestDir, func(t *testing.T, name string, test *RLPTest) { + if name[:len("invalidRLPTest.json")] != "invalidRLPTest.json" { + t.Fatalf("invalid test found: %s != invalidRLPTest.json", name) + } + }) +} diff --git a/tests/rlp_test.go b/tests/rlp_test.go index 1601625d..79a1683e 100644 --- a/tests/rlp_test.go +++ b/tests/rlp_test.go @@ -24,7 +24,7 @@ func TestRLP(t *testing.T) { t.Parallel() tm := new(testMatcher) tm.walk(t, rlpTestDir, func(t *testing.T, name string, test *RLPTest) { - if err := tm.checkFailure(t, name, test.Run()); err != nil { + if err := tm.checkFailure(t, test.Run()); err != nil { t.Error(err) } }) diff --git a/tests/rlp_test_util.go b/tests/rlp_test_util.go index 16be50df..15acb3a2 100644 --- a/tests/rlp_test_util.go +++ b/tests/rlp_test_util.go @@ -24,7 +24,7 @@ import ( "math/big" "strings" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/rlp" ) // RLPTest is the JSON structure of a single RLP test. @@ -124,7 +124,7 @@ func translateJSON(v interface{}) interface{} { func checkDecodeFromJSON(s *rlp.Stream, exp interface{}) error { switch exp := exp.(type) { case uint64: - i, err := s.Uint() + i, err := s.Uint64() if err != nil { return addStack("Uint", exp, err) } diff --git a/tests/solidity/bytecode.js b/tests/solidity/bytecode.js new file mode 100644 index 00000000..1190776b --- /dev/null +++ b/tests/solidity/bytecode.js @@ -0,0 +1,22 @@ +// 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 . + +{ + "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 00000000..c378ffb0 --- /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 00000000..2a41a5fc --- /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 beginning 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 beginning 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 beginning 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 00000000..5aea2e26 --- /dev/null +++ b/tests/solidity/migrations/1_initial_migration.js @@ -0,0 +1,21 @@ +// 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 Migrations = artifacts.require("Migrations"); + +module.exports = function(deployer) { + deployer.deploy(Migrations); +}; diff --git a/common/main_test.go b/tests/solidity/migrations/2_opCodes_migration.js similarity index 82% rename from common/main_test.go rename to tests/solidity/migrations/2_opCodes_migration.js index 149d0992..8ec97266 100644 --- a/common/main_test.go +++ b/tests/solidity/migrations/2_opCodes_migration.js @@ -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,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package common +var OpCodes = artifacts.require("./OpCodes.sol"); -import ( - "testing" - - checker "gopkg.in/check.v1" -) - -func Test(t *testing.T) { checker.TestingT(t) } +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 00000000..dde80f78 --- /dev/null +++ b/tests/solidity/test/opCodes.js @@ -0,0 +1,50 @@ +// 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 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 00000000..47a89c81 --- /dev/null +++ b/tests/solidity/truffle-config.js @@ -0,0 +1,124 @@ +// 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 . + +/** + * 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 b2fb31d1..d33ebc4b 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -19,13 +19,19 @@ package tests import ( "bufio" "bytes" - "flag" "fmt" + "math/big" + "os" + "path/filepath" "reflect" + "strings" "testing" - "github.com/cryptoecc/ETH-ECC/cmd/utils" - "github.com/cryptoecc/ETH-ECC/core/vm" + "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/eth/tracers/logger" ) func TestState(t *testing.T) { @@ -39,12 +45,17 @@ func TestState(t *testing.T) { st.slow(`^stQuadraticComplexityTest/`) st.slow(`^stStaticCall/static_Call50000`) st.slow(`^stStaticCall/static_Return50000`) - st.slow(`^stStaticCall/static_Call1MB`) st.slow(`^stSystemOperationsTest/CallRecursiveBomb`) st.slow(`^stTransactionTest/Opcodes_TransactionInit`) + + // Very time consuming + st.skipLoad(`^stTimeConsuming/`) + st.skipLoad(`.*vmPerformance/loop.*`) + + // Uses 1GB RAM per tested fork + st.skipLoad(`^stStaticCall/static_Call1MB`) + // 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") @@ -53,38 +64,59 @@ func TestState(t *testing.T) { //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() { - 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) + // For Istanbul, older tests were moved into LegacyTests + for _, dir := range []string{ + stateTestDir, + legacyStateTestDir, + benchmarksDir, + } { + st.walk(t, dir, func(t *testing.T, name string, test *StateTest) { + for _, subtest := range test.Subtests() { + subtest := subtest + key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index) + + t.Run(key+"/trie", func(t *testing.T) { + withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error { + _, _, err := test.Run(subtest, vmconfig, false) + if err != nil && len(test.json.Post[subtest.Fork][subtest.Index].ExpectException) > 0 { + // Ignore expected errors (TODO MariusVanDerWijden check error string) + return nil + } + return st.checkFailure(t, err) + }) }) - }) - } - }) + t.Run(key+"/snap", func(t *testing.T) { + withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error { + snaps, statedb, err := test.Run(subtest, vmconfig, true) + if snaps != nil && statedb != nil { + if _, err := snaps.Journal(statedb.IntermediateRoot(false)); err != nil { + return err + } + } + if err != nil && len(test.json.Post[subtest.Fork][subtest.Index].ExpectException) > 0 { + // Ignore expected errors (TODO MariusVanDerWijden check error string) + return nil + } + return st.checkFailure(t, 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{} + 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") @@ -92,8 +124,9 @@ 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}) + tracer := logger.NewJSONLogger(&logger.Config{}, w) + config.Debug, config.Tracer = true, tracer + err2 := test(config) if !reflect.DeepEqual(err, err2) { t.Errorf("different error for second run: %v", err2) } @@ -103,6 +136,119 @@ func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) { } else { t.Log("EVM operation log:\n" + buf.String()) } - //t.Logf("EVM output: 0x%x", tracer.Output()) - //t.Logf("EVM error: %v", tracer.Error()) + // t.Logf("EVM output: 0x%x", tracer.Output()) + // t.Logf("EVM error: %v", tracer.Error()) +} + +func BenchmarkEVM(b *testing.B) { + // Walk the directory. + dir := benchmarksDir + dirinfo, err := os.Stat(dir) + if os.IsNotExist(err) || !dirinfo.IsDir() { + fmt.Fprintf(os.Stderr, "can't find test files in %s, did you clone the evm-benchmarks submodule?\n", dir) + b.Skip("missing test files") + } + err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if info.IsDir() { + return nil + } + if ext := filepath.Ext(path); ext == ".json" { + name := filepath.ToSlash(strings.TrimPrefix(strings.TrimSuffix(path, ext), dir+string(filepath.Separator))) + b.Run(name, func(b *testing.B) { runBenchmarkFile(b, path) }) + } + return nil + }) + if err != nil { + b.Fatal(err) + } +} + +func runBenchmarkFile(b *testing.B, path string) { + m := make(map[string]StateTest) + if err := readJSONFile(path, &m); err != nil { + b.Fatal(err) + return + } + if len(m) != 1 { + b.Fatal("expected single benchmark in a file") + return + } + for _, t := range m { + t := t + runBenchmark(b, &t) + } +} + +func runBenchmark(b *testing.B, t *StateTest) { + for _, subtest := range t.Subtests() { + subtest := subtest + key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index) + + b.Run(key, func(b *testing.B) { + vmconfig := vm.Config{} + + config, eips, err := GetChainConfig(subtest.Fork) + if err != nil { + b.Error(err) + return + } + vmconfig.ExtraEips = eips + block := t.genesis(config).ToBlock() + _, statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre, false) + + var baseFee *big.Int + if config.IsLondon(new(big.Int)) { + baseFee = t.json.Env.BaseFee + if baseFee == nil { + // Retesteth uses `0x10` for genesis baseFee. Therefore, it defaults to + // parent - 2 : 0xa as the basefee for 'this' context. + baseFee = big.NewInt(0x0a) + } + } + post := t.json.Post[subtest.Fork][subtest.Index] + msg, err := t.json.Tx.toMessage(post, baseFee) + if err != nil { + b.Error(err) + return + } + + // Try to recover tx with current signer + if len(post.TxBytes) != 0 { + var ttx types.Transaction + err := ttx.UnmarshalBinary(post.TxBytes) + if err != nil { + b.Error(err) + return + } + + if _, err := types.Sender(types.LatestSigner(config), &ttx); err != nil { + b.Error(err) + return + } + } + + // Prepare the EVM. + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(block.Header(), nil, &t.json.Env.Coinbase) + context.GetHash = vmTestBlockHash + context.BaseFee = baseFee + evm := vm.NewEVM(context, txContext, statedb, config, vmconfig) + + // Create "contract" for sender to cache code analysis. + sender := vm.NewContract(vm.AccountRef(msg.From()), vm.AccountRef(msg.From()), + nil, 0) + + b.ResetTimer() + for n := 0; n < b.N; n++ { + // Execute the message. + snapshot := statedb.Snapshot() + _, _, err = evm.Call(sender, *msg.To(), msg.Data(), msg.Gas(), msg.Value()) + if err != nil { + b.Error(err) + return + } + statedb.RevertToSnapshot(snapshot) + } + }) + } } diff --git a/tests/state_test_util.go b/tests/state_test_util.go index c543d939..38cdbc4d 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -24,23 +24,24 @@ import ( "strconv" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "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/state/snapshot" + "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" "golang.org/x/crypto/sha3" ) // StateTest checks transaction processing without block context. -// See https://github.com/Onther-Tech/EIPs/issues/176 for the test format specification. +// See https://github.com/ethereum/EIPs/issues/176 for the test format specification. type StateTest struct { json stJSON } @@ -64,57 +65,68 @@ type stJSON struct { } type stPostState struct { - Root common.UnprefixedHash `json:"hash"` - Logs common.UnprefixedHash `json:"logs"` - Indexes struct { + Root common.UnprefixedHash `json:"hash"` + Logs common.UnprefixedHash `json:"logs"` + TxBytes hexutil.Bytes `json:"txbytes"` + ExpectException string `json:"expectException"` + Indexes struct { Data int `json:"data"` Gas int `json:"gas"` Value int `json:"value"` } } -//go:generate gencodec -type stEnv -field-override stEnvMarshaling -out gen_stenv.go +//go:generate go run github.com/fjl/gencodec -type stEnv -field-override stEnvMarshaling -out gen_stenv.go type stEnv struct { Coinbase common.Address `json:"currentCoinbase" gencodec:"required"` - Difficulty *big.Int `json:"currentDifficulty" gencodec:"required"` + Difficulty *big.Int `json:"currentDifficulty" gencodec:"optional"` + Random *big.Int `json:"currentRandom" gencodec:"optional"` GasLimit uint64 `json:"currentGasLimit" gencodec:"required"` Number uint64 `json:"currentNumber" gencodec:"required"` Timestamp uint64 `json:"currentTimestamp" gencodec:"required"` + BaseFee *big.Int `json:"currentBaseFee" gencodec:"optional"` } type stEnvMarshaling struct { Coinbase common.UnprefixedAddress Difficulty *math.HexOrDecimal256 + Random *math.HexOrDecimal256 GasLimit math.HexOrDecimal64 Number math.HexOrDecimal64 Timestamp math.HexOrDecimal64 + BaseFee *math.HexOrDecimal256 } -//go:generate gencodec -type stTransaction -field-override stTransactionMarshaling -out gen_sttransaction.go +//go:generate go run github.com/fjl/gencodec -type stTransaction -field-override stTransactionMarshaling -out gen_sttransaction.go type stTransaction struct { - GasPrice *big.Int `json:"gasPrice"` - Nonce uint64 `json:"nonce"` - To string `json:"to"` - Data []string `json:"data"` - GasLimit []uint64 `json:"gasLimit"` - Value []string `json:"value"` - PrivateKey []byte `json:"secretKey"` + GasPrice *big.Int `json:"gasPrice"` + MaxFeePerGas *big.Int `json:"maxFeePerGas"` + MaxPriorityFeePerGas *big.Int `json:"maxPriorityFeePerGas"` + Nonce uint64 `json:"nonce"` + To string `json:"to"` + Data []string `json:"data"` + AccessLists []*types.AccessList `json:"accessLists,omitempty"` + GasLimit []uint64 `json:"gasLimit"` + Value []string `json:"value"` + PrivateKey []byte `json:"secretKey"` } type stTransactionMarshaling struct { - GasPrice *math.HexOrDecimal256 - Nonce math.HexOrDecimal64 - GasLimit []math.HexOrDecimal64 - PrivateKey hexutil.Bytes + GasPrice *math.HexOrDecimal256 + MaxFeePerGas *math.HexOrDecimal256 + MaxPriorityFeePerGas *math.HexOrDecimal256 + Nonce math.HexOrDecimal64 + GasLimit []math.HexOrDecimal64 + PrivateKey hexutil.Bytes } -// getVMConfig takes a fork definition and returns a chain config. +// GetChainConfig 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) { +func GetChainConfig(forkString string) (baseConfig *params.ChainConfig, eips []int, err error) { var ( splitForks = strings.Split(forkString, "+") ok bool @@ -127,6 +139,9 @@ func getVMConfig(forkString string) (baseConfig *params.ChainConfig, eips []int, if eipNum, err := strconv.Atoi(eip); err != nil { return nil, nil, fmt.Errorf("syntax error, invalid eip number %v", eipNum) } else { + if !vm.ValidEip(eipNum) { + return nil, nil, fmt.Errorf("syntax error, invalid eip number %v", eipNum) + } eips = append(eips, eipNum) } } @@ -144,59 +159,101 @@ func (t *StateTest) Subtests() []StateSubtest { return sub } -// Run executes a specific subtest. -func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config) (*state.StateDB, error) { - config, eips, err := getVMConfig(subtest.Fork) +// Run executes a specific subtest and verifies the post-state and logs +func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config, snapshotter bool) (*snapshot.Tree, *state.StateDB, error) { + snaps, statedb, root, err := t.RunNoVerify(subtest, vmconfig, snapshotter) if err != nil { - return nil, UnsupportedForkError{subtest.Fork} + return snaps, 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 snaps, 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 snaps, statedb, fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, post.Logs) + } + return snaps, statedb, nil +} + +// RunNoVerify runs a specific subtest and returns the statedb and post-state root +func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapshotter bool) (*snapshot.Tree, *state.StateDB, common.Hash, error) { + config, eips, err := GetChainConfig(subtest.Fork) + if err != nil { + return nil, nil, common.Hash{}, UnsupportedForkError{subtest.Fork} } vmconfig.ExtraEips = eips - block := t.genesis(config).ToBlock(nil) - statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) + block := t.genesis(config).ToBlock() + snaps, statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre, snapshotter) + var baseFee *big.Int + if config.IsLondon(new(big.Int)) { + baseFee = t.json.Env.BaseFee + if baseFee == nil { + // Retesteth uses `0x10` for genesis baseFee. Therefore, it defaults to + // parent - 2 : 0xa as the basefee for 'this' context. + baseFee = big.NewInt(0x0a) + } + } post := t.json.Post[subtest.Fork][subtest.Index] - msg, err := t.json.Tx.toMessage(post) + msg, err := t.json.Tx.toMessage(post, baseFee) if err != nil { - return nil, err + return nil, nil, common.Hash{}, err } - context := core.NewEVMContext(msg, block.Header(), nil, &t.json.Env.Coinbase) - context.GetHash = vmTestBlockHash - evm := vm.NewEVM(context, statedb, config, vmconfig) + // Try to recover tx with current signer + if len(post.TxBytes) != 0 { + var ttx types.Transaction + err := ttx.UnmarshalBinary(post.TxBytes) + if err != nil { + return nil, nil, common.Hash{}, err + } + + if _, err := types.Sender(types.LatestSigner(config), &ttx); err != nil { + return nil, nil, common.Hash{}, err + } + } + + // Prepare the EVM. + txContext := core.NewEVMTxContext(msg) + context := core.NewEVMBlockContext(block.Header(), nil, &t.json.Env.Coinbase) + context.GetHash = vmTestBlockHash + context.BaseFee = baseFee + context.Random = nil + if config.IsLondon(new(big.Int)) && t.json.Env.Random != nil { + rnd := common.BigToHash(t.json.Env.Random) + context.Random = &rnd + context.Difficulty = big.NewInt(0) + } + evm := vm.NewEVM(context, txContext, statedb, config, vmconfig) + // Execute the message. + snapshot := statedb.Snapshot() gaspool := new(core.GasPool) gaspool.AddGas(block.GasLimit()) - snapshot := statedb.Snapshot() - if _, _, _, err := core.ApplyMessage(evm, msg, gaspool); err != nil { + if _, err := core.ApplyMessage(evm, msg, gaspool); err != nil { statedb.RevertToSnapshot(snapshot) } - // Commit block - statedb.Commit(config.IsEIP158(block.Number())) // Add 0-value mining reward. This only makes a difference in the cases // where // - the coinbase suicided, or // - there are only 'bad' transactions, which aren't executed. In those cases, // the coinbase gets no txfee, so isn't created, and thus needs to be touched statedb.AddBalance(block.Coinbase(), new(big.Int)) + // Commit block + statedb.Commit(config.IsEIP158(block.Number())) // 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 snaps, statedb, root, nil } func (t *StateTest) gasLimit(subtest StateSubtest) uint64 { return t.json.Tx.GasLimit[t.json.Post[subtest.Fork][subtest.Index].Indexes.Gas] } -func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB { +func MakePreState(db ethdb.Database, accounts core.GenesisAlloc, snapshotter bool) (*snapshot.Tree, *state.StateDB) { sdb := state.NewDatabase(db) - statedb, _ := state.New(common.Hash{}, sdb) + statedb, _ := state.New(common.Hash{}, sdb, nil) for addr, a := range accounts { statedb.SetCode(addr, a.Code) statedb.SetNonce(addr, a.Nonce) @@ -207,12 +264,17 @@ func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB } // Commit and re-open to start with a clean state. root, _ := statedb.Commit(false) - statedb, _ = state.New(root, sdb) - return statedb + + var snaps *snapshot.Tree + if snapshotter { + snaps, _ = snapshot.New(db, sdb.TrieDB(), 1, root, false, true, false) + } + statedb, _ = state.New(root, sdb, snaps) + return snaps, statedb } func (t *StateTest) genesis(config *params.ChainConfig) *core.Genesis { - return &core.Genesis{ + genesis := &core.Genesis{ Config: config, Coinbase: t.json.Env.Coinbase, Difficulty: t.json.Env.Difficulty, @@ -221,9 +283,15 @@ func (t *StateTest) genesis(config *params.ChainConfig) *core.Genesis { Timestamp: t.json.Env.Timestamp, Alloc: t.json.Pre, } + if t.json.Env.Random != nil { + // Post-Merge + genesis.Mixhash = common.BigToHash(t.json.Env.Random) + genesis.Difficulty = big.NewInt(0) + } + return genesis } -func (tx *stTransaction) toMessage(ps stPostState) (core.Message, error) { +func (tx *stTransaction) toMessage(ps stPostState, baseFee *big.Int) (core.Message, error) { // Derive sender from private key if present. var from common.Address if len(tx.PrivateKey) > 0 { @@ -255,7 +323,7 @@ func (tx *stTransaction) toMessage(ps stPostState) (core.Message, error) { dataHex := tx.Data[ps.Indexes.Data] valueHex := tx.Value[ps.Indexes.Value] gasLimit := tx.GasLimit[ps.Indexes.Gas] - // Value, Data hex encoding is messy: https://github.com/Onther-Tech/tests/issues/203 + // Value, Data hex encoding is messy: https://github.com/ethereum/tests/issues/203 value := new(big.Int) if valueHex != "0x" { v, ok := math.ParseBig256(valueHex) @@ -268,8 +336,31 @@ func (tx *stTransaction) toMessage(ps stPostState) (core.Message, error) { if err != nil { return nil, fmt.Errorf("invalid tx data %q", dataHex) } + var accessList types.AccessList + if tx.AccessLists != nil && tx.AccessLists[ps.Indexes.Data] != nil { + accessList = *tx.AccessLists[ps.Indexes.Data] + } + // If baseFee provided, set gasPrice to effectiveGasPrice. + gasPrice := tx.GasPrice + if baseFee != nil { + if tx.MaxFeePerGas == nil { + tx.MaxFeePerGas = gasPrice + } + if tx.MaxFeePerGas == nil { + tx.MaxFeePerGas = new(big.Int) + } + if tx.MaxPriorityFeePerGas == nil { + tx.MaxPriorityFeePerGas = tx.MaxFeePerGas + } + gasPrice = math.BigMin(new(big.Int).Add(tx.MaxPriorityFeePerGas, baseFee), + tx.MaxFeePerGas) + } + if gasPrice == nil { + return nil, fmt.Errorf("no gas price provided") + } - msg := types.NewMessage(from, to, tx.Nonce, value, gasLimit, tx.GasPrice, data, true) + msg := types.NewMessage(from, to, tx.Nonce, value, gasLimit, gasPrice, + tx.MaxFeePerGas, tx.MaxPriorityFeePerGas, data, accessList, false) return msg, nil } @@ -279,3 +370,7 @@ func rlpHash(x interface{}) (h common.Hash) { hw.Sum(h[:0]) return h } + +func vmTestBlockHash(n uint64) common.Hash { + return common.BytesToHash(crypto.Keccak256([]byte(big.NewInt(int64(n)).String()))) +} diff --git a/tests/transaction_test.go b/tests/transaction_test.go index 1e430080..cb0f2623 100644 --- a/tests/transaction_test.go +++ b/tests/transaction_test.go @@ -19,7 +19,7 @@ package tests import ( "testing" - "github.com/cryptoecc/ETH-ECC/params" + "github.com/ethereum/go-ethereum/params" ) func TestTransaction(t *testing.T) { @@ -47,7 +47,7 @@ func TestTransaction(t *testing.T) { txt.skipLoad("^ttValue/TransactionWithHighValueOverflow.json") txt.walk(t, transactionTestDir, func(t *testing.T, name string, test *TransactionTest) { cfg := params.MainnetChainConfig - if err := txt.checkFailure(t, name, test.Run(cfg)); err != nil { + if err := txt.checkFailure(t, test.Run(cfg)); err != nil { t.Error(err) } }) diff --git a/tests/transaction_test_util.go b/tests/transaction_test_util.go index f93c1eda..82ee01de 100644 --- a/tests/transaction_test_util.go +++ b/tests/transaction_test_util.go @@ -19,12 +19,12 @@ package tests import ( "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/types" - "github.com/cryptoecc/ETH-ECC/params" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "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" ) // TransactionTest checks RLP decoding and sender derivation of transactions. @@ -45,7 +45,6 @@ type ttFork struct { } func (tt *TransactionTest) Run(config *params.ChainConfig) error { - 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 { @@ -56,7 +55,7 @@ func (tt *TransactionTest) Run(config *params.ChainConfig) error { return nil, nil, err } // Intrinsic gas - requiredGas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, isHomestead, isIstanbul) + requiredGas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, isHomestead, isIstanbul) if err != nil { return nil, nil, err } @@ -80,32 +79,31 @@ func (tt *TransactionTest) Run(config *params.ChainConfig) error { {"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}, + {"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) + 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) + 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) + 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) + return fmt.Errorf("hash mismatch: got %x, want %x", *txhash, testcase.fork.Hash) } } return nil diff --git a/tests/vm_test_util.go b/tests/vm_test_util.go deleted file mode 100644 index 67247511..00000000 --- a/tests/vm_test_util.go +++ /dev/null @@ -1,151 +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 tests - -import ( - "bytes" - "encoding/json" - "fmt" - "math/big" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/hexutil" - "github.com/cryptoecc/ETH-ECC/common/math" - "github.com/cryptoecc/ETH-ECC/core" - "github.com/cryptoecc/ETH-ECC/core/rawdb" - "github.com/cryptoecc/ETH-ECC/core/state" - "github.com/cryptoecc/ETH-ECC/core/vm" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/params" -) - -// VMTest checks EVM execution without block or transaction context. -// See https://github.com/Onther-Tech/tests/wiki/VM-Tests for the test format specification. -type VMTest struct { - json vmJSON -} - -func (t *VMTest) UnmarshalJSON(data []byte) error { - return json.Unmarshal(data, &t.json) -} - -type vmJSON struct { - Env stEnv `json:"env"` - Exec vmExec `json:"exec"` - Logs common.UnprefixedHash `json:"logs"` - GasRemaining *math.HexOrDecimal64 `json:"gas"` - Out hexutil.Bytes `json:"out"` - Pre core.GenesisAlloc `json:"pre"` - Post core.GenesisAlloc `json:"post"` - PostStateRoot common.Hash `json:"postStateRoot"` -} - -//go:generate gencodec -type vmExec -field-override vmExecMarshaling -out gen_vmexec.go - -type vmExec struct { - Address common.Address `json:"address" gencodec:"required"` - Caller common.Address `json:"caller" gencodec:"required"` - Origin common.Address `json:"origin" gencodec:"required"` - Code []byte `json:"code" gencodec:"required"` - Data []byte `json:"data" gencodec:"required"` - Value *big.Int `json:"value" gencodec:"required"` - GasLimit uint64 `json:"gas" gencodec:"required"` - GasPrice *big.Int `json:"gasPrice" gencodec:"required"` -} - -type vmExecMarshaling struct { - Address common.UnprefixedAddress - Caller common.UnprefixedAddress - Origin common.UnprefixedAddress - Code hexutil.Bytes - Data hexutil.Bytes - Value *math.HexOrDecimal256 - GasLimit math.HexOrDecimal64 - GasPrice *math.HexOrDecimal256 -} - -func (t *VMTest) Run(vmconfig vm.Config) error { - statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) - ret, gasRemaining, err := t.exec(statedb, vmconfig) - - if t.json.GasRemaining == nil { - if err == nil { - return fmt.Errorf("gas unspecified (indicating an error), but VM returned no error") - } - if gasRemaining > 0 { - return fmt.Errorf("gas unspecified (indicating an error), but VM returned gas remaining > 0") - } - return nil - } - // Test declares gas, expecting outputs to match. - if !bytes.Equal(ret, t.json.Out) { - return fmt.Errorf("return data mismatch: got %x, want %x", ret, t.json.Out) - } - if gasRemaining != uint64(*t.json.GasRemaining) { - return fmt.Errorf("remaining gas %v, want %v", gasRemaining, *t.json.GasRemaining) - } - for addr, account := range t.json.Post { - for k, wantV := range account.Storage { - if haveV := statedb.GetState(addr, k); haveV != wantV { - return fmt.Errorf("wrong storage value at %x:\n got %x\n want %x", k, haveV, wantV) - } - } - } - // if root := statedb.IntermediateRoot(false); root != t.json.PostStateRoot { - // return fmt.Errorf("post state root mismatch, got %x, want %x", root, t.json.PostStateRoot) - // } - if logs := rlpHash(statedb.Logs()); logs != common.Hash(t.json.Logs) { - return fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, t.json.Logs) - } - return nil -} - -func (t *VMTest) exec(statedb *state.StateDB, vmconfig vm.Config) ([]byte, uint64, error) { - evm := t.newEVM(statedb, vmconfig) - e := t.json.Exec - return evm.Call(vm.AccountRef(e.Caller), e.Address, e.Data, e.GasLimit, e.Value) -} - -func (t *VMTest) newEVM(statedb *state.StateDB, vmconfig vm.Config) *vm.EVM { - initialCall := true - canTransfer := func(db vm.StateDB, address common.Address, amount *big.Int) bool { - if initialCall { - initialCall = false - return true - } - return core.CanTransfer(db, address, amount) - } - transfer := func(db vm.StateDB, sender, recipient common.Address, amount *big.Int) {} - context := vm.Context{ - CanTransfer: canTransfer, - Transfer: transfer, - GetHash: vmTestBlockHash, - Origin: t.json.Exec.Origin, - Coinbase: t.json.Env.Coinbase, - BlockNumber: new(big.Int).SetUint64(t.json.Env.Number), - Time: new(big.Int).SetUint64(t.json.Env.Timestamp), - GasLimit: t.json.Env.GasLimit, - Difficulty: t.json.Env.Difficulty, - GasPrice: t.json.Exec.GasPrice, - } - vmconfig.NoRecursion = true - return vm.NewEVM(context, statedb, params.MainnetChainConfig, vmconfig) -} - -func vmTestBlockHash(n uint64) common.Hash { - return common.BytesToHash(crypto.Keccak256([]byte(big.NewInt(int64(n)).String()))) -} diff --git a/trie/committer.go b/trie/committer.go new file mode 100644 index 00000000..d9f0ecf3 --- /dev/null +++ b/trie/committer.go @@ -0,0 +1,205 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + + "github.com/ethereum/go-ethereum/common" +) + +// leaf represents a trie leaf node +type leaf struct { + blob []byte // raw blob of leaf + parent common.Hash // the hash of parent node +} + +// committer is the tool used for the trie Commit operation. The committer will +// capture all dirty nodes during the commit process and keep them cached in +// insertion order. +type committer struct { + nodes *NodeSet + collectLeaf bool +} + +// newCommitter creates a new committer or picks one from the pool. +func newCommitter(owner common.Hash, collectLeaf bool) *committer { + return &committer{ + nodes: NewNodeSet(owner), + collectLeaf: collectLeaf, + } +} + +// Commit collapses a node down into a hash node and inserts it into the database +func (c *committer) Commit(n node) (hashNode, *NodeSet, error) { + h, err := c.commit(nil, n) + if err != nil { + return nil, nil, err + } + return h.(hashNode), c.nodes, nil +} + +// commit collapses a node down into a hash node and inserts it into the database +func (c *committer) commit(path []byte, n node) (node, error) { + // if this path is clean, use available cached data + hash, dirty := n.cache() + if hash != nil && !dirty { + return hash, nil + } + // Commit children, then parent, and remove the dirty flag. + switch cn := n.(type) { + case *shortNode: + // Commit child + collapsed := cn.copy() + + // If the child is fullNode, recursively commit, + // otherwise it can only be hashNode or valueNode. + if _, ok := cn.Val.(*fullNode); ok { + childV, err := c.commit(append(path, cn.Key...), cn.Val) + if err != nil { + return nil, err + } + collapsed.Val = childV + } + // The key needs to be copied, since we're delivering it to database + collapsed.Key = hexToCompact(cn.Key) + hashedNode := c.store(path, collapsed) + if hn, ok := hashedNode.(hashNode); ok { + return hn, nil + } + return collapsed, nil + case *fullNode: + hashedKids, err := c.commitChildren(path, cn) + if err != nil { + return nil, err + } + collapsed := cn.copy() + collapsed.Children = hashedKids + + hashedNode := c.store(path, collapsed) + if hn, ok := hashedNode.(hashNode); ok { + return hn, nil + } + return collapsed, nil + case hashNode: + return cn, nil + default: + // nil, valuenode shouldn't be committed + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } +} + +// commitChildren commits the children of the given fullnode +func (c *committer) commitChildren(path []byte, n *fullNode) ([17]node, error) { + var children [17]node + for i := 0; i < 16; i++ { + child := n.Children[i] + if child == nil { + continue + } + // If it's the hashed child, save the hash value directly. + // Note: it's impossible that the child in range [0, 15] + // is a valueNode. + if hn, ok := child.(hashNode); ok { + children[i] = hn + continue + } + // Commit the child recursively and store the "hashed" value. + // Note the returned node can be some embedded nodes, so it's + // possible the type is not hashNode. + hashed, err := c.commit(append(path, byte(i)), child) + if err != nil { + return children, err + } + children[i] = hashed + } + // For the 17th child, it's possible the type is valuenode. + if n.Children[16] != nil { + children[16] = n.Children[16] + } + return children, nil +} + +// store hashes the node n and if we have a storage layer specified, it writes +// the key/value pair to it and tracks any node->child references as well as any +// node->external trie references. +func (c *committer) store(path []byte, n node) node { + // Larger nodes are replaced by their hash and stored in the database. + var hash, _ = n.cache() + + // This was not generated - must be a small node stored in the parent. + // In theory, we should check if the node is leaf here (embedded node + // usually is leaf node). But small value(less than 32bytes) is not + // our target(leaves in account trie only). + if hash == nil { + return n + } + // We have the hash already, estimate the RLP encoding-size of the node. + // The size is used for mem tracking, does not need to be exact + var ( + size = estimateSize(n) + nhash = common.BytesToHash(hash) + mnode = &memoryNode{ + hash: nhash, + node: simplifyNode(n), + size: uint16(size), + } + ) + // Collect the dirty node to nodeset for return. + c.nodes.add(string(path), mnode) + + // Collect the corresponding leaf node if it's required. We don't check + // full node since it's impossible to store value in fullNode. The key + // length of leaves should be exactly same. + if c.collectLeaf { + if sn, ok := n.(*shortNode); ok { + if val, ok := sn.Val.(valueNode); ok { + c.nodes.addLeaf(&leaf{blob: val, parent: nhash}) + } + } + } + return hash +} + +// estimateSize estimates the size of an rlp-encoded node, without actually +// rlp-encoding it (zero allocs). This method has been experimentally tried, and with a trie +// with 1000 leaves, the only errors above 1% are on small shortnodes, where this +// method overestimates by 2 or 3 bytes (e.g. 37 instead of 35) +func estimateSize(n node) int { + switch n := n.(type) { + case *shortNode: + // A short node contains a compacted key, and a value. + return 3 + len(n.Key) + estimateSize(n.Val) + case *fullNode: + // A full node contains up to 16 hashes (some nils), and a key + s := 3 + for i := 0; i < 16; i++ { + if child := n.Children[i]; child != nil { + s += estimateSize(child) + } else { + s++ + } + } + return s + case valueNode: + return 1 + len(n) + case hashNode: + return 1 + len(n) + default: + panic(fmt.Sprintf("node type %T", n)) + } +} diff --git a/trie/database.go b/trie/database.go index 9c8355f4..8d426c25 100644 --- a/trie/database.go +++ b/trie/database.go @@ -17,20 +17,22 @@ package trie import ( - "encoding/binary" "errors" "fmt" "io" "reflect" + "runtime" "sync" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/metrics" - "github.com/cryptoecc/ETH-ECC/rlp" - "github.com/allegro/bigcache" + "github.com/VictoriaMetrics/fastcache" + "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/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/rlp" ) var ( @@ -39,6 +41,11 @@ var ( memcacheCleanReadMeter = metrics.NewRegisteredMeter("trie/memcache/clean/read", nil) memcacheCleanWriteMeter = metrics.NewRegisteredMeter("trie/memcache/clean/write", nil) + memcacheDirtyHitMeter = metrics.NewRegisteredMeter("trie/memcache/dirty/hit", nil) + memcacheDirtyMissMeter = metrics.NewRegisteredMeter("trie/memcache/dirty/miss", nil) + memcacheDirtyReadMeter = metrics.NewRegisteredMeter("trie/memcache/dirty/read", nil) + memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("trie/memcache/dirty/write", nil) + memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("trie/memcache/flush/time", nil) memcacheFlushNodesMeter = metrics.NewRegisteredMeter("trie/memcache/flush/nodes", nil) memcacheFlushSizeMeter = metrics.NewRegisteredMeter("trie/memcache/flush/size", nil) @@ -52,12 +59,6 @@ var ( memcacheCommitSizeMeter = metrics.NewRegisteredMeter("trie/memcache/commit/size", nil) ) -// secureKeyPrefix is the database key prefix used to store trie node preimages. -var secureKeyPrefix = []byte("secure-key-") - -// secureKeyLength is the length of the above prefix + 32byte hash. -const secureKeyLength = 11 + 32 - // 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. @@ -69,14 +70,11 @@ const secureKeyLength = 11 + 32 type Database struct { 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 + cleans *fastcache.Cache // GC friendly memory cache of clean node RLPs + dirties map[common.Hash]*cachedNode // Data and references relationships of dirty trie nodes oldest common.Hash // Oldest tracked node, flush-list head newest common.Hash // Newest tracked node, flush-list tail - preimages map[common.Hash][]byte // Preimages of nodes from the secure trie - seckeybuf [secureKeyLength]byte // Ephemeral buffer for calculating preimage keys - gctime time.Duration // Time spent on garbage collection since last commit gcnodes uint64 // Nodes garbage collected since last commit gcsize common.StorageSize // Data storage garbage collected since last commit @@ -85,9 +83,9 @@ 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. metadata) - childrenSize common.StorageSize // Storage size of the external children tracking - preimagesSize common.StorageSize // Storage size of the preimages cache + dirtiesSize common.StorageSize // Storage size of the dirty node cache (exc. metadata) + childrenSize common.StorageSize // Storage size of the external children tracking + preimages *preimageStore // The store for caching preimages lock sync.RWMutex } @@ -97,30 +95,26 @@ type Database struct { // in the same cache fields). type rawNode []byte -func (n rawNode) canUnload(uint16, uint16) bool { panic("this should never end up in a live trie") } -func (n rawNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } -func (n rawNode) fstring(ind string) string { panic("this should never end up in a live trie") } +func (n rawNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } +func (n rawNode) fstring(ind string) string { panic("this should never end up in a live trie") } + +func (n rawNode) EncodeRLP(w io.Writer) error { + _, err := w.Write(n) + return err +} // rawFullNode represents only the useful data content of a full node, with the // caches and flags stripped out to minimize its data storage. This type honors // the same RLP encoding as the original parent. type rawFullNode [17]node -func (n rawFullNode) canUnload(uint16, uint16) bool { panic("this should never end up in a live trie") } -func (n rawFullNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } -func (n rawFullNode) fstring(ind string) string { panic("this should never end up in a live trie") } +func (n rawFullNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } +func (n rawFullNode) fstring(ind string) string { panic("this should never end up in a live trie") } func (n rawFullNode) EncodeRLP(w io.Writer) error { - var nodes [17]node - - for i, child := range n { - if child != nil { - nodes[i] = child - } else { - nodes[i] = nilValueNode - } - } - return rlp.Encode(w, nodes) + eb := rlp.NewEncoderBuffer(w) + n.encode(eb) + return eb.Flush() } // rawShortNode represents only the useful data content of a short node, with the @@ -131,12 +125,11 @@ type rawShortNode struct { Val node } -func (n rawShortNode) canUnload(uint16, uint16) bool { panic("this should never end up in a live trie") } -func (n rawShortNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } -func (n rawShortNode) fstring(ind string) string { panic("this should never end up in a live trie") } +func (n rawShortNode) cache() (hashNode, bool) { panic("this should never end up in a live trie") } +func (n rawShortNode) fstring(ind string) string { panic("this should never end up in a live trie") } -// cachedNode is all the information we know about a single cached node in the -// memory database write layer. +// cachedNode is all the information we know about a single cached trie node +// in the memory database write layer. type cachedNode struct { node node // Cached collapsed trie node, or raw rlp data size uint16 // Byte size of the useful cached data @@ -157,57 +150,52 @@ var cachedNodeSize = int(reflect.TypeOf(cachedNode{}).Size()) // 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. +// rlp returns the raw rlp encoded blob of the cached trie node, either directly +// from the cache, or by regenerating it from the collapsed node. func (n *cachedNode) rlp() []byte { if node, ok := n.node.(rawNode); ok { return node } - blob, err := rlp.EncodeToBytes(n.node) - if err != nil { - panic(err) - } - return blob + return nodeToBytes(n.node) } // 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) node { if node, ok := n.node.(rawNode); ok { - return mustDecodeNode(hash[:], node) + // The raw-blob format nodes are loaded either from the + // clean cache or the database, they are all in their own + // copy and safe to use unsafe decoder. + return mustDecodeNodeUnsafe(hash[:], node) } return expandNode(hash[:], n.node) } -// childs returns all the tracked children of this node, both the implicit ones -// from inside the node as well as the explicit ones from outside the node. -func (n *cachedNode) childs() []common.Hash { - children := make([]common.Hash, 0, 16) +// forChilds invokes the callback for all the tracked children of this node, +// both the implicit ones from inside the node as well as the explicit ones +// from outside the node. +func (n *cachedNode) forChilds(onChild func(hash common.Hash)) { for child := range n.children { - children = append(children, child) + onChild(child) } if _, ok := n.node.(rawNode); !ok { - gatherChildren(n.node, &children) + forGatherChildren(n.node, onChild) } - return children } -// gatherChildren traverses the node hierarchy of a collapsed storage node and -// retrieves all the hashnode children. -func gatherChildren(n node, children *[]common.Hash) { +// forGatherChildren traverses the node hierarchy of a collapsed storage node and +// invokes the callback for all the hashnode children. +func forGatherChildren(n node, onChild func(hash common.Hash)) { switch n := n.(type) { case *rawShortNode: - gatherChildren(n.Val, children) - + forGatherChildren(n.Val, onChild) case rawFullNode: for i := 0; i < 16; i++ { - gatherChildren(n[i], children) + forGatherChildren(n[i], onChild) } case hashNode: - *children = append(*children, common.BytesToHash(n)) - - case valueNode, nil: - + onChild(common.BytesToHash(n)) + case valueNode, nil, rawNode: default: panic(fmt.Sprintf("unknown node type: %T", n)) } @@ -275,87 +263,73 @@ func expandNode(hash hashNode, n node) 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)) +// Config defines all necessary options for database. +type Config struct { + Cache int // Memory allowance (MB) to use for caching trie nodes in memory + Journal string // Journal of clean cache to survive node restarts + Preimages bool // Flag whether the preimage of trie key is recorded } // 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.KeyValueStore) *Database { - return NewDatabaseWithCache(diskdb, 0) + return NewDatabaseWithConfig(diskdb, nil) } -// NewDatabaseWithCache creates a new trie database to store ephemeral trie content +// NewDatabaseWithConfig 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.KeyValueStore, cache int) *Database { - var cleans *bigcache.BigCache - if cache > 0 { - cleans, _ = bigcache.NewBigCache(bigcache.Config{ - Shards: 1024, - LifeWindow: time.Hour, - MaxEntriesInWindow: cache * 1024, - MaxEntrySize: 512, - HardMaxCacheSize: cache, - Hasher: trienodeHasher{}, - }) +func NewDatabaseWithConfig(diskdb ethdb.KeyValueStore, config *Config) *Database { + var cleans *fastcache.Cache + if config != nil && config.Cache > 0 { + if config.Journal == "" { + cleans = fastcache.New(config.Cache * 1024 * 1024) + } else { + cleans = fastcache.LoadFromFileOrNew(config.Journal, config.Cache*1024*1024) + } + } + var preimage *preimageStore + if config != nil && config.Preimages { + preimage = newPreimageStore(diskdb) } - return &Database{ + db := &Database{ diskdb: diskdb, cleans: cleans, dirties: map[common.Hash]*cachedNode{{}: { children: make(map[common.Hash]uint16), }}, - preimages: make(map[common.Hash][]byte), + preimages: preimage, } + return db } // DiskDB retrieves the persistent storage backing the trie database. -func (db *Database) DiskDB() ethdb.KeyValueReader { +func (db *Database) DiskDB() ethdb.KeyValueStore { return db.diskdb } -// InsertBlob writes a new reference tracked blob to the memory database if it's -// yet unknown. This method should only be used for non-trie nodes that require -// reference counting, since trie nodes are garbage collected directly through -// their embedded children. -func (db *Database) InsertBlob(hash common.Hash, blob []byte) { - db.lock.Lock() - defer db.lock.Unlock() - - db.insert(hash, blob, rawNode(blob)) -} - -// insert inserts a collapsed trie node into the memory database. This method is -// a more generic version of InsertBlob, supporting both raw blob insertions as -// well ex trie node insertions. The blob must always be specified to allow proper -// size tracking. -func (db *Database) insert(hash common.Hash, blob []byte, node node) { +// insert inserts a simplified trie node into the memory database. +// All nodes inserted by this function will be reference tracked +// and in theory should only used for **trie nodes** insertion. +func (db *Database) insert(hash common.Hash, size int, node node) { // If the node's already cached, skip if _, ok := db.dirties[hash]; ok { return } + memcacheDirtyWriteMeter.Mark(int64(size)) + // Create the cached entry for this node entry := &cachedNode{ - node: simplifyNode(node), - size: uint16(len(blob)), + node: node, + size: uint16(size), flushPrev: db.newest, } - for _, child := range entry.childs() { + entry.forChilds(func(child common.Hash) { if c := db.dirties[child]; c != nil { c.parents++ } - } + }) db.dirties[hash] = entry // Update the flush-list endpoints @@ -367,27 +341,18 @@ func (db *Database) insert(hash common.Hash, blob []byte, node node) { db.dirtiesSize += common.StorageSize(common.HashLength + entry.size) } -// insertPreimage writes a new trie node pre-image to the memory database if it's -// yet unknown. The method will make a copy of the slice. -// -// Note, this method assumes that the database's lock is held! -func (db *Database) insertPreimage(hash common.Hash, preimage []byte) { - if _, ok := db.preimages[hash]; ok { - return - } - db.preimages[hash] = common.CopyBytes(preimage) - db.preimagesSize += common.StorageSize(common.HashLength + len(preimage)) -} - // 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) 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 { + if enc := db.cleans.Get(nil, hash[:]); enc != nil { memcacheCleanHitMeter.Mark(1) memcacheCleanReadMeter.Mark(int64(len(enc))) - return mustDecodeNode(hash[:], enc) + + // The returned value from cache is in its own copy, + // safe to use mustDecodeNodeUnsafe for decoding. + return mustDecodeNodeUnsafe(hash[:], enc) } } // Retrieve the node from the dirty cache if available @@ -396,31 +361,37 @@ func (db *Database) node(hash common.Hash) node { db.lock.RUnlock() if dirty != nil { + memcacheDirtyHitMeter.Mark(1) + memcacheDirtyReadMeter.Mark(int64(dirty.size)) return dirty.obj(hash) } + memcacheDirtyMissMeter.Mark(1) + // Content unavailable in memory, attempt to retrieve from disk enc, err := db.diskdb.Get(hash[:]) if err != nil || enc == nil { return nil } if db.cleans != nil { - db.cleans.Set(string(hash[:]), enc) + db.cleans.Set(hash[:], enc) memcacheCleanMissMeter.Mark(1) memcacheCleanWriteMeter.Mark(int64(len(enc))) } - return mustDecodeNode(hash[:], enc) + // The returned value from database is in its own copy, + // safe to use mustDecodeNodeUnsafe for decoding. + return mustDecodeNodeUnsafe(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 + // It doesn'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 { + if enc := db.cleans.Get(nil, hash[:]); enc != nil { memcacheCleanHitMeter.Mark(1) memcacheCleanReadMeter.Mark(int64(len(enc))) return enc, nil @@ -432,42 +403,23 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) { db.lock.RUnlock() if dirty != nil { + memcacheDirtyHitMeter.Mark(1) + memcacheDirtyReadMeter.Mark(int64(dirty.size)) return dirty.rlp(), nil } + memcacheDirtyMissMeter.Mark(1) + // Content unavailable in memory, attempt to retrieve from disk - enc, err := db.diskdb.Get(hash[:]) - if err == nil && enc != nil { + enc := rawdb.ReadTrieNode(db.diskdb, hash) + if len(enc) != 0 { if db.cleans != nil { - db.cleans.Set(string(hash[:]), enc) + db.cleans.Set(hash[:], enc) memcacheCleanMissMeter.Mark(1) memcacheCleanWriteMeter.Mark(int64(len(enc))) } + return enc, nil } - return enc, err -} - -// preimage retrieves a cached trie node pre-image from memory. If it cannot be -// found cached, the method queries the persistent database for the content. -func (db *Database) preimage(hash common.Hash) ([]byte, error) { - // Retrieve the node from cache if available - db.lock.RLock() - preimage := db.preimages[hash] - db.lock.RUnlock() - - if preimage != nil { - return preimage, nil - } - // Content unavailable in memory, attempt to retrieve from disk - return db.diskdb.Get(db.secureKey(hash[:])) -} - -// secureKey returns the database key for the preimage of key, as an ephemeral -// buffer. The caller must not hold onto the return value because it will become -// invalid on the next call. -func (db *Database) secureKey(key []byte) []byte { - buf := append(db.seckeybuf[:0], secureKeyPrefix...) - buf = append(buf, key...) - return buf + return nil, errors.New("not found") } // Nodes retrieves the hashes of all the nodes cached within the memory database. @@ -487,6 +439,9 @@ func (db *Database) Nodes() []common.Hash { } // Reference adds a new reference from a parent node to a child node. +// This function is used to add reference between internal trie node +// and external node(e.g. storage trie root), all internal trie nodes +// are referenced together by database itself. func (db *Database) Reference(child common.Hash, parent common.Hash) { db.lock.Lock() defer db.lock.Unlock() @@ -579,9 +534,9 @@ func (db *Database) dereference(child common.Hash, parent common.Hash) { db.dirties[node.flushNext].flushPrev = node.flushPrev } // Dereference all children and delete the node - for _, hash := range node.childs() { + node.forChilds(func(hash common.Hash) { db.dereference(hash, child) - } + }) delete(db.dirties, child) db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) if node.children != nil { @@ -611,29 +566,16 @@ func (db *Database) Cap(limit common.StorageSize) error { // If the preimage cache got large enough, push to disk. If it's still small // leave for later to deduplicate writes. - flushPreimages := db.preimagesSize > 4*1024*1024 - if flushPreimages { - 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) - return err - } - if batch.ValueSize() > ethdb.IdealBatchSize { - if err := batch.Write(); err != nil { - return err - } - batch.Reset() - } - } + if db.preimages != nil { + db.preimages.commit(false) } // Keep committing nodes from the flush-list until we're below allowance oldest := db.oldest for size > limit && oldest != (common.Hash{}) { // Fetch the oldest referenced node and push into the batch node := db.dirties[oldest] - if err := batch.Put(oldest[:], node.rlp()); err != nil { - return err - } + rawdb.WriteTrieNode(batch, oldest, node.rlp()) + // If we exceeded the ideal batch size, commit and reset if batch.ValueSize() >= ethdb.IdealBatchSize { if err := batch.Write(); err != nil { @@ -660,10 +602,6 @@ func (db *Database) Cap(limit common.StorageSize) error { db.lock.Lock() defer db.lock.Unlock() - if flushPreimages { - db.preimages = make(map[common.Hash][]byte) - db.preimagesSize = 0 - } for db.oldest != oldest { node := db.dirties[db.oldest] delete(db.dirties, db.oldest) @@ -697,7 +635,7 @@ func (db *Database) Cap(limit common.StorageSize) error { // // 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 { +func (db *Database) Commit(node common.Hash, report bool, callback func(common.Hash)) 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 @@ -706,31 +644,14 @@ func (db *Database) Commit(node common.Hash, report bool) error { batch := db.diskdb.NewBatch() // Move all of the accumulated preimages into a write batch - 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) - return err - } - // If the batch is too large, flush to disk - if batch.ValueSize() > ethdb.IdealBatchSize { - if err := batch.Write(); err != nil { - return err - } - batch.Reset() - } + if db.preimages != nil { + db.preimages.commit(true) } - // 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 uncacher := &cleaner{db} - if err := db.commit(node, batch, uncacher); err != nil { + if err := db.commit(node, batch, uncacher, callback); err != nil { log.Error("Failed to commit trie from trie database", "err", err) return err } @@ -746,10 +667,7 @@ func (db *Database) Commit(node common.Hash, report bool) error { batch.Replay(uncacher) batch.Reset() - // Reset the storage counters and bumpd metrics - db.preimages = make(map[common.Hash][]byte) - db.preimagesSize = 0 - + // Reset the storage counters and bumped metrics memcacheCommitTimeTimer.Update(time.Since(start)) memcacheCommitSizeMeter.Mark(int64(storage - db.dirtiesSize)) memcacheCommitNodesMeter.Mark(int64(nodes - len(db.dirties))) @@ -769,21 +687,26 @@ 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, uncacher *cleaner) error { +func (db *Database) commit(hash common.Hash, batch ethdb.Batch, uncacher *cleaner, callback func(common.Hash)) 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, uncacher); err != nil { - return err + var err error + node.forChilds(func(child common.Hash) { + if err == nil { + err = db.commit(child, batch, uncacher, callback) } - } - if err := batch.Put(hash[:], node.rlp()); err != nil { + }) + if err != nil { return err } // If we've reached an optimal batch size, commit and start over + rawdb.WriteTrieNode(batch, hash, node.rlp()) + if callback != nil { + callback(hash) + } if batch.ValueSize() >= ethdb.IdealBatchSize { if err := batch.Write(); err != nil { return err @@ -805,8 +728,8 @@ type cleaner struct { // 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. +// the two-phase commit is to ensure data availability while moving from memory +// to disk. func (c *cleaner) Put(key []byte, rlp []byte) error { hash := common.BytesToHash(key) @@ -831,17 +754,66 @@ func (c *cleaner) Put(key []byte, rlp []byte) error { 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)) + c.db.childrenSize -= 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) + c.db.cleans.Set(hash[:], rlp) + memcacheCleanWriteMeter.Mark(int64(len(rlp))) } return nil } func (c *cleaner) Delete(key []byte) error { - panic("Not implemented") + panic("not implemented") +} + +// Update inserts the dirty nodes in provided nodeset into database and +// link the account trie with multiple storage tries if necessary. +func (db *Database) Update(nodes *MergedNodeSet) error { + db.lock.Lock() + defer db.lock.Unlock() + + // Insert dirty nodes into the database. In the same tree, it must be + // ensured that children are inserted first, then parent so that children + // can be linked with their parent correctly. + // + // Note, the storage tries must be flushed before the account trie to + // retain the invariant that children go into the dirty cache first. + var order []common.Hash + for owner := range nodes.sets { + if owner == (common.Hash{}) { + continue + } + order = append(order, owner) + } + if _, ok := nodes.sets[common.Hash{}]; ok { + order = append(order, common.Hash{}) + } + for _, owner := range order { + subset := nodes.sets[owner] + for _, path := range subset.paths { + n, ok := subset.nodes[path] + if !ok { + return fmt.Errorf("missing node %x %v", owner, path) + } + db.insert(n.hash, int(n.size), n.node) + } + } + // Link up the account trie and storage trie if the node points + // to an account trie leaf. + if set, present := nodes.sets[common.Hash{}]; present { + for _, n := range set.leaves { + var account types.StateAccount + if err := rlp.DecodeBytes(n.blob, &account); err != nil { + return err + } + if account.Root != emptyRoot { + db.reference(account.Root, n.parent) + } + } + } + return nil } // Size returns the current storage size of the memory cache in front of the @@ -855,47 +827,62 @@ func (db *Database) Size() (common.StorageSize, common.StorageSize) { // 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 + var preimageSize common.StorageSize + if db.preimages != nil { + preimageSize = db.preimages.size() + } + return db.dirtiesSize + db.childrenSize + metadataSize - metarootRefs, preimageSize } -// verifyIntegrity is a debug method to iterate over the entire trie stored in -// memory and check whether every node is reachable from the meta root. The goal -// is to find any errors that might cause memory leaks and or trie nodes to go -// missing. -// -// This method is extremely CPU and memory intensive, only use when must. -func (db *Database) verifyIntegrity() { - // Iterate over all the cached nodes and accumulate them into a set - reachable := map[common.Hash]struct{}{{}: {}} - - for child := range db.dirties[common.Hash{}].children { - db.accumulate(child, reachable) - } - // Find any unreachable but cached nodes - 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}", - hash, node.node, node.parents, node.flushPrev, node.flushNext)) - } +// saveCache saves clean state cache to given directory path +// using specified CPU cores. +func (db *Database) saveCache(dir string, threads int) error { + if db.cleans == nil { + return nil } - if len(unreachable) != 0 { - panic(fmt.Sprintf("trie cache memory leak: %v", unreachable)) + log.Info("Writing clean trie cache to disk", "path", dir, "threads", threads) + + start := time.Now() + err := db.cleans.SaveToFileConcurrent(dir, threads) + if err != nil { + log.Error("Failed to persist clean trie cache", "error", err) + return err } + log.Info("Persisted the clean trie cache", "path", dir, "elapsed", common.PrettyDuration(time.Since(start))) + return nil } -// accumulate iterates over the trie defined by hash and accumulates all the -// cached children found in memory. -func (db *Database) accumulate(hash common.Hash, reachable map[common.Hash]struct{}) { - // Mark the node reachable if present in the memory cache - node, ok := db.dirties[hash] - if !ok { - return +// SaveCache atomically saves fast cache data to the given dir using all +// available CPU cores. +func (db *Database) SaveCache(dir string) error { + return db.saveCache(dir, runtime.GOMAXPROCS(0)) +} + +// SaveCachePeriodically atomically saves fast cache data to the given dir with +// the specified interval. All dump operation will only use a single CPU core. +func (db *Database) SaveCachePeriodically(dir string, interval time.Duration, stopCh <-chan struct{}) { + ticker := time.NewTicker(interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + db.saveCache(dir, 1) + case <-stopCh: + return + } } - reachable[hash] = struct{}{} +} + +// CommitPreimages flushes the dangling preimages to disk. It is meant to be +// called when closing the blockchain object, so that preimages are persisted +// to the database. +func (db *Database) CommitPreimages() error { + db.lock.Lock() + defer db.lock.Unlock() - // Iterate over all the children and accumulate them too - for _, child := range node.childs() { - db.accumulate(child, reachable) + if db.preimages == nil { + return nil } + return db.preimages.commit(true) } diff --git a/trie/database_test.go b/trie/database_test.go index ac982ebe..81c46950 100644 --- a/trie/database_test.go +++ b/trie/database_test.go @@ -19,8 +19,8 @@ package trie import ( "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) // Tests that the trie database returns a missing trie node error if attempting diff --git a/trie/encoding.go b/trie/encoding.go index 1955a3e6..8ee0022e 100644 --- a/trie/encoding.go +++ b/trie/encoding.go @@ -51,6 +51,35 @@ func hexToCompact(hex []byte) []byte { return buf } +// hexToCompactInPlace places the compact key in input buffer, returning the length +// needed for the representation +func hexToCompactInPlace(hex []byte) int { + var ( + hexLen = len(hex) // length of the hex input + firstByte = byte(0) + ) + // Check if we have a terminator there + if hexLen > 0 && hex[hexLen-1] == 16 { + firstByte = 1 << 5 + hexLen-- // last part was the terminator, ignore that + } + var ( + binLen = hexLen/2 + 1 + ni = 0 // index in hex + bi = 1 // index in bin (compact) + ) + if hexLen&1 == 1 { + firstByte |= 1 << 4 // odd flag + firstByte |= hex[0] // first nibble is contained in the first byte + ni++ + } + for ; ni < hexLen; bi, ni = bi+1, ni+2 { + hex[bi] = hex[ni]<<4 | hex[ni+1] + } + hex[0] = firstByte + return binLen +} + func compactToHex(compact []byte) []byte { if len(compact) == 0 { return compact diff --git a/trie/encoding_test.go b/trie/encoding_test.go index 97d8da13..16393313 100644 --- a/trie/encoding_test.go +++ b/trie/encoding_test.go @@ -18,6 +18,8 @@ package trie import ( "bytes" + "encoding/hex" + "math/rand" "testing" ) @@ -75,6 +77,40 @@ func TestHexKeybytes(t *testing.T) { } } +func TestHexToCompactInPlace(t *testing.T) { + for i, keyS := range []string{ + "00", + "060a040c0f000a090b040803010801010900080d090a0a0d0903000b10", + "10", + } { + hexBytes, _ := hex.DecodeString(keyS) + exp := hexToCompact(hexBytes) + sz := hexToCompactInPlace(hexBytes) + got := hexBytes[:sz] + if !bytes.Equal(exp, got) { + t.Fatalf("test %d: encoding err\ninp %v\ngot %x\nexp %x\n", i, keyS, got, exp) + } + } +} + +func TestHexToCompactInPlaceRandom(t *testing.T) { + for i := 0; i < 10000; i++ { + l := rand.Intn(128) + key := make([]byte, l) + rand.Read(key) + hexBytes := keybytesToHex(key) + hexOrig := []byte(string(hexBytes)) + exp := hexToCompact(hexBytes) + sz := hexToCompactInPlace(hexBytes) + got := hexBytes[:sz] + + if !bytes.Equal(exp, got) { + t.Fatalf("encoding err \ncpt %x\nhex %x\ngot %x\nexp %x\n", + key, hexOrig, got, exp) + } + } +} + func BenchmarkHexToCompact(b *testing.B) { testBytes := []byte{0, 15, 1, 12, 11, 8, 16 /*term*/} for i := 0; i < b.N; i++ { diff --git a/trie/errors.go b/trie/errors.go index 086b1d5b..afe344be 100644 --- a/trie/errors.go +++ b/trie/errors.go @@ -19,17 +19,28 @@ package trie import ( "fmt" - "github.com/cryptoecc/ETH-ECC/common" + "github.com/ethereum/go-ethereum/common" ) // MissingNodeError is returned by the trie functions (TryGet, TryUpdate, TryDelete) // in the case where a trie node is not present in the local database. It contains // information necessary for retrieving the missing node. type MissingNodeError struct { + Owner common.Hash // owner of the trie if it's 2-layered trie NodeHash common.Hash // hash of the missing node Path []byte // hex-encoded path to the missing node + err error // concrete error for missing trie node +} + +// Unwrap returns the concrete error for missing trie node which +// allows us for further analysis outside. +func (err *MissingNodeError) Unwrap() error { + return err.err } func (err *MissingNodeError) Error() string { - return fmt.Sprintf("missing trie node %x (path %x)", err.NodeHash, err.Path) + if err.Owner == (common.Hash{}) { + return fmt.Sprintf("missing trie node %x (path %x) %v", err.NodeHash, err.Path, err.err) + } + return fmt.Sprintf("missing trie node %x (owner %x) (path %x) %v", err.NodeHash, err.Owner, err.Path, err.err) } diff --git a/trie/hasher.go b/trie/hasher.go index ede04031..183e96c2 100644 --- a/trie/hasher.go +++ b/trie/hasher.go @@ -17,52 +17,36 @@ package trie import ( - "hash" "sync" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) +// hasher is a type used for the trie Hash operation. A hasher has some +// internal preallocated temp space type hasher struct { - tmp sliceBuffer - sha keccakState - onleaf LeafCallback + sha crypto.KeccakState + tmp []byte + encbuf rlp.EncoderBuffer + parallel bool // Whether to use parallel threads when hashing } -// keccakState wraps sha3.state. In addition to the usual hash methods, it also supports -// Read to get a variable amount of data from the hash state. Read is faster than Sum -// because it doesn't copy the internal state, but also modifies the internal state. -type keccakState interface { - hash.Hash - Read([]byte) (int, error) -} - -type sliceBuffer []byte - -func (b *sliceBuffer) Write(data []byte) (n int, err error) { - *b = append(*b, data...) - return len(data), nil -} - -func (b *sliceBuffer) Reset() { - *b = (*b)[:0] -} - -// hashers live in a global db. +// hasherPool holds pureHashers var hasherPool = sync.Pool{ New: func() interface{} { return &hasher{ - tmp: make(sliceBuffer, 0, 550), // cap is as large as a full fullNode. - sha: sha3.NewLegacyKeccak256().(keccakState), + tmp: make([]byte, 0, 550), // cap is as large as a full fullNode. + sha: sha3.NewLegacyKeccak256().(crypto.KeccakState), + encbuf: rlp.NewEncoderBuffer(nil), } }, } -func newHasher(onleaf LeafCallback) *hasher { +func newHasher(parallel bool) *hasher { h := hasherPool.Get().(*hasher) - h.onleaf = onleaf + h.parallel = parallel return h } @@ -72,144 +56,154 @@ func returnHasherToPool(h *hasher) { // hash collapses a node down into a hash node, also returning a copy of the // original node initialized with the computed hash to replace the original one. -func (h *hasher) hash(n node, db *Database, force bool) (node, node, error) { - // If we're not storing the node, just hashing, use available cached data - if hash, dirty := n.cache(); hash != nil { - if db == nil { - return hash, n, nil - } - if !dirty { - switch n.(type) { - case *fullNode, *shortNode: - return hash, hash, nil - default: - return hash, n, nil - } - } +func (h *hasher) hash(n node, force bool) (hashed node, cached node) { + // Return the cached hash if it's available + if hash, _ := n.cache(); hash != nil { + return hash, n } - // Trie not processed yet or needs storage, walk the children - collapsed, cached, err := h.hashChildren(n, db) - if err != nil { - return hashNode{}, n, err - } - hashed, err := h.store(collapsed, db, force) - if err != nil { - return hashNode{}, n, err - } - // Cache the hash of the node for later reuse and remove - // the dirty flag in commit mode. It's fine to assign these values directly - // without copying the node first because hashChildren copies it. - cachedHash, _ := hashed.(hashNode) - switch cn := cached.(type) { + // Trie not processed yet, walk the children + switch n := n.(type) { case *shortNode: - cn.flags.hash = cachedHash - if db != nil { - cn.flags.dirty = false + collapsed, cached := h.hashShortNodeChildren(n) + hashed := h.shortnodeToHash(collapsed, force) + // We need to retain the possibly _not_ hashed node, in case it was too + // small to be hashed + if hn, ok := hashed.(hashNode); ok { + cached.flags.hash = hn + } else { + cached.flags.hash = nil } + return hashed, cached case *fullNode: - cn.flags.hash = cachedHash - if db != nil { - cn.flags.dirty = false + collapsed, cached := h.hashFullNodeChildren(n) + hashed = h.fullnodeToHash(collapsed, force) + if hn, ok := hashed.(hashNode); ok { + cached.flags.hash = hn + } else { + cached.flags.hash = nil } + return hashed, cached + default: + // Value and hash nodes don't have children so they're left as were + return n, n } - return hashed, cached, nil } -// hashChildren replaces the children of a node with their hashes if the encoded -// size of the child is larger than a hash, returning the collapsed node as well -// as a replacement for the original node with the child hashes cached in. -func (h *hasher) hashChildren(original node, db *Database) (node, node, error) { - var err error - - switch n := original.(type) { - case *shortNode: - // Hash the short node's child, caching the newly hashed subtree - collapsed, cached := n.copy(), n.copy() - collapsed.Key = hexToCompact(n.Key) - cached.Key = common.CopyBytes(n.Key) - - if _, ok := n.Val.(valueNode); !ok { - collapsed.Val, cached.Val, err = h.hash(n.Val, db, false) - if err != nil { - return original, original, err - } - } - return collapsed, cached, nil - - case *fullNode: - // Hash the full node's children, caching the newly hashed subtrees - collapsed, cached := n.copy(), n.copy() +// hashShortNodeChildren collapses the short node. The returned collapsed node +// holds a live reference to the Key, and must not be modified. +// The cached +func (h *hasher) hashShortNodeChildren(n *shortNode) (collapsed, cached *shortNode) { + // Hash the short node's child, caching the newly hashed subtree + collapsed, cached = n.copy(), n.copy() + // Previously, we did copy this one. We don't seem to need to actually + // do that, since we don't overwrite/reuse keys + //cached.Key = common.CopyBytes(n.Key) + collapsed.Key = hexToCompact(n.Key) + // Unless the child is a valuenode or hashnode, hash it + switch n.Val.(type) { + case *fullNode, *shortNode: + collapsed.Val, cached.Val = h.hash(n.Val, false) + } + return collapsed, cached +} +func (h *hasher) hashFullNodeChildren(n *fullNode) (collapsed *fullNode, cached *fullNode) { + // Hash the full node's children, caching the newly hashed subtrees + cached = n.copy() + collapsed = n.copy() + if h.parallel { + var wg sync.WaitGroup + wg.Add(16) for i := 0; i < 16; i++ { - if n.Children[i] != nil { - collapsed.Children[i], cached.Children[i], err = h.hash(n.Children[i], db, false) - if err != nil { - return original, original, err + go func(i int) { + hasher := newHasher(false) + if child := n.Children[i]; child != nil { + collapsed.Children[i], cached.Children[i] = hasher.hash(child, false) + } else { + collapsed.Children[i] = nilValueNode } + returnHasherToPool(hasher) + wg.Done() + }(i) + } + wg.Wait() + } else { + for i := 0; i < 16; i++ { + if child := n.Children[i]; child != nil { + collapsed.Children[i], cached.Children[i] = h.hash(child, false) + } else { + collapsed.Children[i] = nilValueNode } } - cached.Children[16] = n.Children[16] - return collapsed, cached, nil - - default: - // Value and hash nodes don't have children so they're left as were - return n, original, nil } + return collapsed, cached } -// store hashes the node n and if we have a storage layer specified, it writes -// the key/value pair to it and tracks any node->child references as well as any -// node->external trie references. -func (h *hasher) store(n node, db *Database, force bool) (node, error) { - // Don't store hashes or empty nodes. - if _, isHash := n.(hashNode); n == nil || isHash { - return n, nil - } - // Generate the RLP encoding of the node - h.tmp.Reset() - if err := rlp.Encode(&h.tmp, n); err != nil { - panic("encode error: " + err.Error()) - } - if len(h.tmp) < 32 && !force { - return n, nil // Nodes smaller than 32 bytes are stored inside their parent - } - // Larger nodes are replaced by their hash and stored in the database. - hash, _ := n.cache() - if hash == nil { - hash = h.makeHashNode(h.tmp) - } +// shortnodeToHash creates a hashNode from a shortNode. The supplied shortnode +// should have hex-type Key, which will be converted (without modification) +// into compact form for RLP encoding. +// If the rlp data is smaller than 32 bytes, `nil` is returned. +func (h *hasher) shortnodeToHash(n *shortNode, force bool) node { + n.encode(h.encbuf) + enc := h.encodedBytes() - if db != nil { - // We are pooling the trie nodes into an intermediate memory cache - hash := common.BytesToHash(hash) + if len(enc) < 32 && !force { + return n // Nodes smaller than 32 bytes are stored inside their parent + } + return h.hashData(enc) +} - db.lock.Lock() - db.insert(hash, h.tmp, n) - db.lock.Unlock() +// shortnodeToHash is used to creates a hashNode from a set of hashNodes, (which +// may contain nil values) +func (h *hasher) fullnodeToHash(n *fullNode, force bool) node { + n.encode(h.encbuf) + enc := h.encodedBytes() - // Track external references from account->storage trie - if h.onleaf != nil { - switch n := n.(type) { - case *shortNode: - if child, ok := n.Val.(valueNode); ok { - h.onleaf(child, hash) - } - case *fullNode: - for i := 0; i < 16; i++ { - if child, ok := n.Children[i].(valueNode); ok { - h.onleaf(child, hash) - } - } - } - } + if len(enc) < 32 && !force { + return n // Nodes smaller than 32 bytes are stored inside their parent } - return hash, nil + return h.hashData(enc) } -func (h *hasher) makeHashNode(data []byte) hashNode { - n := make(hashNode, h.sha.Size()) +// encodedBytes returns the result of the last encoding operation on h.encbuf. +// This also resets the encoder buffer. +// +// All node encoding must be done like this: +// +// node.encode(h.encbuf) +// enc := h.encodedBytes() +// +// This convention exists because node.encode can only be inlined/escape-analyzed when +// called on a concrete receiver type. +func (h *hasher) encodedBytes() []byte { + h.tmp = h.encbuf.AppendToBytes(h.tmp[:0]) + h.encbuf.Reset(nil) + return h.tmp +} + +// hashData hashes the provided data +func (h *hasher) hashData(data []byte) hashNode { + n := make(hashNode, 32) h.sha.Reset() h.sha.Write(data) h.sha.Read(n) return n } + +// proofHash is used to construct trie proofs, and returns the 'collapsed' +// node (for later RLP encoding) as well as the hashed node -- unless the +// node is smaller than 32 bytes, in which case it will be returned as is. +// This method does not do anything on value- or hash-nodes. +func (h *hasher) proofHash(original node) (collapsed, hashed node) { + switch n := original.(type) { + case *shortNode: + sn, _ := h.hashShortNodeChildren(n) + return sn, h.shortnodeToHash(sn, false) + case *fullNode: + fn, _ := h.hashFullNodeChildren(n) + return fn, h.fullnodeToHash(fn, false) + default: + // Value and hash nodes don't have children so they're left as were + return n, n + } +} diff --git a/trie/iterator.go b/trie/iterator.go index dd74b5ab..1e76625c 100644 --- a/trie/iterator.go +++ b/trie/iterator.go @@ -21,8 +21,8 @@ import ( "container/heap" "errors" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" ) // Iterator is a key-value trie iterator that traverses a Trie. @@ -85,6 +85,10 @@ type NodeIterator interface { // For leaf nodes, the last element of the path is the 'terminator symbol' 0x10. Path() []byte + // NodeBlob returns the rlp-encoded value of the current iterated node. + // If the node is an embedded node in its parent, nil is returned then. + NodeBlob() []byte + // Leaf returns true iff the current node is a leaf node. Leaf() bool @@ -102,6 +106,19 @@ type NodeIterator interface { // iterator is not positioned at a leaf. Callers must not retain references // to the value after calling Next. LeafProof() [][]byte + + // AddResolver sets an intermediate database to use for looking up trie nodes + // before reaching into the real persistent layer. + // + // This is not required for normal operation, rather is an optimization for + // cases where trie nodes can be recovered from some external mechanism without + // reading from disk. In those cases, this resolver allows short circuiting + // accesses and returning them from memory. + // + // Before adding a similar mechanism to any other place in Geth, consider + // making trie.Database an interface and wrapping at that level. It's a huge + // refactor, but it could be worth it if another occurrence arises. + AddResolver(ethdb.KeyValueReader) } // nodeIteratorState represents the iteration state at one particular node of the @@ -119,6 +136,8 @@ type nodeIterator struct { stack []*nodeIteratorState // Hierarchy of trie nodes persisting the iteration state path []byte // Path to the current node err error // Failure set in case of an internal error in the iterator + + resolver ethdb.KeyValueReader // Optional intermediate resolver above the disk layer } // errIteratorEnd is stored in nodeIterator.err when iteration is done. @@ -135,14 +154,21 @@ func (e seekError) Error() string { } func newNodeIterator(trie *Trie, start []byte) NodeIterator { - if trie.Hash() == emptyState { - return new(nodeIterator) + if trie.Hash() == emptyRoot { + return &nodeIterator{ + trie: trie, + err: errIteratorEnd, + } } it := &nodeIterator{trie: trie} it.err = it.seek(start) return it } +func (it *nodeIterator) AddResolver(resolver ethdb.KeyValueReader) { + it.resolver = resolver +} + func (it *nodeIterator) Hash() common.Hash { if len(it.stack) == 0 { return common.Hash{} @@ -173,7 +199,7 @@ func (it *nodeIterator) LeafKey() []byte { func (it *nodeIterator) LeafBlob() []byte { if len(it.stack) > 0 { if node, ok := it.stack[len(it.stack)-1].node.(valueNode); ok { - return []byte(node) + return node } } panic("not at leaf") @@ -182,18 +208,15 @@ 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(nil) + hasher := newHasher(false) defer returnHasherToPool(hasher) - proofs := make([][]byte, 0, len(it.stack)) for i, item := range it.stack[:len(it.stack)-1] { // Gather nodes that end up as hash nodes (or the root) - node, _, _ := hasher.hashChildren(item.node, nil) - hashed, _ := hasher.store(node, nil, false) + node, hashed := hasher.proofHash(item.node) if _, ok := hashed.(hashNode); ok || i == 0 { - enc, _ := rlp.EncodeToBytes(node) - proofs = append(proofs, enc) + proofs = append(proofs, nodeToBytes(node)) } } return proofs @@ -206,6 +229,18 @@ func (it *nodeIterator) Path() []byte { return it.path } +func (it *nodeIterator) NodeBlob() []byte { + if it.Hash() == (common.Hash{}) { + return nil // skip the non-standalone node + } + blob, err := it.resolveBlob(it.Hash().Bytes(), it.Path()) + if err != nil { + it.err = err + return nil + } + return blob +} + func (it *nodeIterator) Error() error { if it.err == errIteratorEnd { return nil @@ -245,7 +280,7 @@ func (it *nodeIterator) seek(prefix []byte) error { key = key[:len(key)-1] // Move forward until we're just before the closest match to key. for { - state, parentIndex, path, err := it.peek(bytes.HasPrefix(key, it.path)) + state, parentIndex, path, err := it.peekSeek(key) if err == errIteratorEnd { return errIteratorEnd } else if err != nil { @@ -257,16 +292,21 @@ func (it *nodeIterator) seek(prefix []byte) error { } } +// init initializes the iterator. +func (it *nodeIterator) init() (*nodeIteratorState, error) { + root := it.trie.Hash() + state := &nodeIteratorState{node: it.trie.root, index: -1} + if root != emptyRoot { + state.hash = root + } + return state, state.resolve(it, nil) +} + // peek creates the next state of the iterator. func (it *nodeIterator) peek(descend bool) (*nodeIteratorState, *int, []byte, error) { + // Initialize the iterator if we've just started. if len(it.stack) == 0 { - // Initialize the iterator if we've just started. - root := it.trie.Hash() - state := &nodeIteratorState{node: it.trie.root, index: -1} - if root != emptyRoot { - state.hash = root - } - err := state.resolve(it.trie, nil) + state, err := it.init() return state, nil, nil, err } if !descend { @@ -283,7 +323,40 @@ func (it *nodeIterator) peek(descend bool) (*nodeIteratorState, *int, []byte, er } state, path, ok := it.nextChild(parent, ancestor) if ok { - if err := state.resolve(it.trie, path); err != nil { + if err := state.resolve(it, path); err != nil { + return parent, &parent.index, path, err + } + return state, &parent.index, path, nil + } + // No more child nodes, move back up. + it.pop() + } + return nil, nil, nil, errIteratorEnd +} + +// peekSeek is like peek, but it also tries to skip resolving hashes by skipping +// over the siblings that do not lead towards the desired seek position. +func (it *nodeIterator) peekSeek(seekKey []byte) (*nodeIteratorState, *int, []byte, error) { + // Initialize the iterator if we've just started. + if len(it.stack) == 0 { + state, err := it.init() + return state, nil, nil, err + } + if !bytes.HasPrefix(seekKey, it.path) { + // If we're skipping children, pop the current node first + it.pop() + } + + // Continue iteration to the next child + for len(it.stack) > 0 { + parent := it.stack[len(it.stack)-1] + ancestor := parent.hash + if (ancestor == common.Hash{}) { + ancestor = parent.parent + } + state, path, ok := it.nextChildAt(parent, ancestor, seekKey) + if ok { + if err := state.resolve(it, path); err != nil { return parent, &parent.index, path, err } return state, &parent.index, path, nil @@ -294,9 +367,29 @@ func (it *nodeIterator) peek(descend bool) (*nodeIteratorState, *int, []byte, er return nil, nil, nil, errIteratorEnd } -func (st *nodeIteratorState) resolve(tr *Trie, path []byte) error { +func (it *nodeIterator) resolveHash(hash hashNode, path []byte) (node, error) { + if it.resolver != nil { + if blob, err := it.resolver.Get(hash); err == nil && len(blob) > 0 { + if resolved, err := decodeNode(hash, blob); err == nil { + return resolved, nil + } + } + } + return it.trie.resolveHash(hash, path) +} + +func (it *nodeIterator) resolveBlob(hash hashNode, path []byte) ([]byte, error) { + if it.resolver != nil { + if blob, err := it.resolver.Get(hash); err == nil && len(blob) > 0 { + return blob, nil + } + } + return it.trie.resolveBlob(hash, path) +} + +func (st *nodeIteratorState) resolve(it *nodeIterator, path []byte) error { if hash, ok := st.node.(hashNode); ok { - resolved, err := tr.resolveHash(hash, path) + resolved, err := it.resolveHash(hash, path) if err != nil { return err } @@ -306,25 +399,38 @@ func (st *nodeIteratorState) resolve(tr *Trie, path []byte) error { return nil } +func findChild(n *fullNode, index int, path []byte, ancestor common.Hash) (node, *nodeIteratorState, []byte, int) { + var ( + child node + state *nodeIteratorState + childPath []byte + ) + for ; index < len(n.Children); index++ { + if n.Children[index] != nil { + child = n.Children[index] + hash, _ := child.cache() + state = &nodeIteratorState{ + hash: common.BytesToHash(hash), + node: child, + parent: ancestor, + index: -1, + pathlen: len(path), + } + childPath = append(childPath, path...) + childPath = append(childPath, byte(index)) + return child, state, childPath, index + } + } + return nil, nil, nil, 0 +} + func (it *nodeIterator) nextChild(parent *nodeIteratorState, ancestor common.Hash) (*nodeIteratorState, []byte, bool) { switch node := parent.node.(type) { case *fullNode: // Full node, move to the first non-nil child. - for i := parent.index + 1; i < len(node.Children); i++ { - child := node.Children[i] - if child != nil { - hash, _ := child.cache() - state := &nodeIteratorState{ - hash: common.BytesToHash(hash), - node: child, - parent: ancestor, - index: -1, - pathlen: len(it.path), - } - path := append(it.path, byte(i)) - parent.index = i - 1 - return state, path, true - } + if child, state, path, index := findChild(node, parent.index+1, it.path, ancestor); child != nil { + parent.index = index - 1 + return state, path, true } case *shortNode: // Short node, return the pointer singleton child @@ -344,6 +450,52 @@ func (it *nodeIterator) nextChild(parent *nodeIteratorState, ancestor common.Has return parent, it.path, false } +// nextChildAt is similar to nextChild, except that it targets a child as close to the +// target key as possible, thus skipping siblings. +func (it *nodeIterator) nextChildAt(parent *nodeIteratorState, ancestor common.Hash, key []byte) (*nodeIteratorState, []byte, bool) { + switch n := parent.node.(type) { + case *fullNode: + // Full node, move to the first non-nil child before the desired key position + child, state, path, index := findChild(n, parent.index+1, it.path, ancestor) + if child == nil { + // No more children in this fullnode + return parent, it.path, false + } + // If the child we found is already past the seek position, just return it. + if bytes.Compare(path, key) >= 0 { + parent.index = index - 1 + return state, path, true + } + // The child is before the seek position. Try advancing + for { + nextChild, nextState, nextPath, nextIndex := findChild(n, index+1, it.path, ancestor) + // If we run out of children, or skipped past the target, return the + // previous one + if nextChild == nil || bytes.Compare(nextPath, key) >= 0 { + parent.index = index - 1 + return state, path, true + } + // We found a better child closer to the target + state, path, index = nextState, nextPath, nextIndex + } + case *shortNode: + // Short node, return the pointer singleton child + if parent.index < 0 { + hash, _ := n.Val.cache() + state := &nodeIteratorState{ + hash: common.BytesToHash(hash), + node: n.Val, + parent: ancestor, + index: -1, + pathlen: len(it.path), + } + path := append(it.path, n.Key...) + return state, path, true + } + } + return parent, it.path, false +} + func (it *nodeIterator) push(state *nodeIteratorState, parentIndex *int, path []byte) { it.path = path it.stack = append(it.stack, state) @@ -353,8 +505,9 @@ func (it *nodeIterator) push(state *nodeIteratorState, parentIndex *int, path [] } func (it *nodeIterator) pop() { - parent := it.stack[len(it.stack)-1] - it.path = it.path[:parent.pathlen] + last := it.stack[len(it.stack)-1] + it.path = it.path[:last.pathlen] + it.stack[len(it.stack)-1] = nil it.stack = it.stack[:len(it.stack)-1] } @@ -422,6 +575,14 @@ func (it *differenceIterator) Path() []byte { return it.b.Path() } +func (it *differenceIterator) NodeBlob() []byte { + return it.b.NodeBlob() +} + +func (it *differenceIterator) AddResolver(resolver ethdb.KeyValueReader) { + panic("not implemented") +} + func (it *differenceIterator) Next(bool) bool { // Invariants: // - We always advance at least one element in b. @@ -529,6 +690,14 @@ func (it *unionIterator) Path() []byte { return (*it.items)[0].Path() } +func (it *unionIterator) NodeBlob() []byte { + return (*it.items)[0].NodeBlob() +} + +func (it *unionIterator) AddResolver(resolver ethdb.KeyValueReader) { + panic("not implemented") +} + // Next returns the next node in the union of tries being iterated over. // // It does this by maintaining a heap of iterators, sorted by the iteration diff --git a/trie/iterator_test.go b/trie/iterator_test.go index 4b836a39..e9d822a9 100644 --- a/trie/iterator_test.go +++ b/trie/iterator_test.go @@ -18,16 +18,34 @@ package trie import ( "bytes" + "encoding/binary" "fmt" "math/rand" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" + "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" ) +func TestEmptyIterator(t *testing.T) { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + iter := trie.NodeIterator(nil) + + seen := make(map[string]struct{}) + for iter.Next(true) { + seen[string(iter.Path())] = struct{}{} + } + if len(seen) != 0 { + t.Fatal("Unexpected trie node iterated") + } +} + func TestIterator(t *testing.T) { - trie := newEmpty() + db := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(db) vals := []struct{ k, v string }{ {"do", "verb"}, {"ether", "wookiedoo"}, @@ -42,8 +60,13 @@ func TestIterator(t *testing.T) { all[val.k] = val.v trie.Update([]byte(val.k), []byte(val.v)) } - trie.Commit(nil) + root, nodes, err := trie.Commit(false) + if err != nil { + t.Fatalf("Failed to commit trie %v", err) + } + db.Update(NewWithNodeSet(nodes)) + trie, _ = New(common.Hash{}, root, db) found := make(map[string]string) it := NewIterator(trie.NodeIterator(nil)) for it.Next() { @@ -63,7 +86,7 @@ type kv struct { } func TestIteratorLargeData(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) vals := make(map[string]*kv) for i := byte(0); i < 255; i++ { @@ -120,7 +143,7 @@ func TestNodeIteratorCoverage(t *testing.T) { } } } - it := db.diskdb.NewIterator() + it := db.diskdb.NewIterator(nil, nil) for it.Next() { key := it.Key() if _, ok := hashes[common.BytesToHash(key)]; !ok { @@ -156,7 +179,7 @@ var testdata2 = []kvs{ } func TestIteratorSeek(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) for _, val := range testdata1 { trie.Update([]byte(val.k), []byte(val.v)) } @@ -197,17 +220,23 @@ func checkIteratorOrder(want []kvs, it *Iterator) error { } func TestDifferenceIterator(t *testing.T) { - triea := newEmpty() + dba := NewDatabase(rawdb.NewMemoryDatabase()) + triea := NewEmpty(dba) for _, val := range testdata1 { triea.Update([]byte(val.k), []byte(val.v)) } - triea.Commit(nil) + rootA, nodesA, _ := triea.Commit(false) + dba.Update(NewWithNodeSet(nodesA)) + triea, _ = New(common.Hash{}, rootA, dba) - trieb := newEmpty() + dbb := NewDatabase(rawdb.NewMemoryDatabase()) + trieb := NewEmpty(dbb) for _, val := range testdata2 { trieb.Update([]byte(val.k), []byte(val.v)) } - trieb.Commit(nil) + rootB, nodesB, _ := trieb.Commit(false) + dbb.Update(NewWithNodeSet(nodesB)) + trieb, _ = New(common.Hash{}, rootB, dbb) found := make(map[string]string) di, _ := NewDifferenceIterator(triea.NodeIterator(nil), trieb.NodeIterator(nil)) @@ -233,17 +262,23 @@ func TestDifferenceIterator(t *testing.T) { } func TestUnionIterator(t *testing.T) { - triea := newEmpty() + dba := NewDatabase(rawdb.NewMemoryDatabase()) + triea := NewEmpty(dba) for _, val := range testdata1 { triea.Update([]byte(val.k), []byte(val.v)) } - triea.Commit(nil) + rootA, nodesA, _ := triea.Commit(false) + dba.Update(NewWithNodeSet(nodesA)) + triea, _ = New(common.Hash{}, rootA, dba) - trieb := newEmpty() + dbb := NewDatabase(rawdb.NewMemoryDatabase()) + trieb := NewEmpty(dbb) for _, val := range testdata2 { trieb.Update([]byte(val.k), []byte(val.v)) } - trieb.Commit(nil) + rootB, nodesB, _ := trieb.Commit(false) + dbb.Update(NewWithNodeSet(nodesB)) + trieb, _ = New(common.Hash{}, rootB, dbb) di, _ := NewUnionIterator([]NodeIterator{triea.NodeIterator(nil), trieb.NodeIterator(nil)}) it := NewIterator(di) @@ -280,7 +315,7 @@ func TestUnionIterator(t *testing.T) { } func TestIteratorNoDups(t *testing.T) { - var tr Trie + tr := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) for _, val := range testdata1 { tr.Update([]byte(val.k), []byte(val.v)) } @@ -295,13 +330,14 @@ func testIteratorContinueAfterError(t *testing.T, memonly bool) { diskdb := memorydb.New() triedb := NewDatabase(diskdb) - tr, _ := New(common.Hash{}, triedb) + tr := NewEmpty(triedb) for _, val := range testdata1 { tr.Update([]byte(val.k), []byte(val.v)) } - tr.Commit(nil) + _, nodes, _ := tr.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) if !memonly { - triedb.Commit(tr.Hash(), true) + triedb.Commit(tr.Hash(), true, nil) } wantNodeCount := checkIteratorNoDups(t, tr.NodeIterator(nil), nil) @@ -312,7 +348,7 @@ func testIteratorContinueAfterError(t *testing.T, memonly bool) { if memonly { memKeys = triedb.Nodes() } else { - it := diskdb.NewIterator() + it := diskdb.NewIterator(nil, nil) for it.Next() { diskKeys = append(diskKeys, it.Key()) } @@ -320,7 +356,7 @@ func testIteratorContinueAfterError(t *testing.T, memonly bool) { } for i := 0; i < 20; i++ { // Create trie that will load all nodes from DB. - tr, _ := New(tr.Hash(), triedb) + tr, _ := New(common.Hash{}, tr.Hash(), triedb) // Remove a random node from the database. It can't be the root node // because that one is already loaded. @@ -386,13 +422,14 @@ func testIteratorContinueAfterSeekError(t *testing.T, memonly bool) { diskdb := memorydb.New() triedb := NewDatabase(diskdb) - ctr, _ := New(common.Hash{}, triedb) + ctr := NewEmpty(triedb) for _, val := range testdata1 { ctr.Update([]byte(val.k), []byte(val.v)) } - root, _ := ctr.Commit(nil) + root, nodes, _ := ctr.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) if !memonly { - triedb.Commit(root, true) + triedb.Commit(root, true, nil) } barNodeHash := common.HexToHash("05041990364eb72fcb1127652ce40d8bab765f2bfe53225b1170d276cc101c2e") var ( @@ -408,7 +445,7 @@ func testIteratorContinueAfterSeekError(t *testing.T, memonly bool) { } // Create a new iterator that seeks to "bars". Seeking can't proceed because // the node is missing. - tr, _ := New(root, triedb) + tr, _ := New(common.Hash{}, root, triedb) it := tr.NodeIterator([]byte("bars")) missing, ok := it.Error().(*MissingNodeError) if !ok { @@ -440,3 +477,142 @@ func checkIteratorNoDups(t *testing.T, it NodeIterator, seen map[string]bool) in } return len(seen) } + +type loggingDb struct { + getCount uint64 + backend ethdb.KeyValueStore +} + +func (l *loggingDb) Has(key []byte) (bool, error) { + return l.backend.Has(key) +} + +func (l *loggingDb) Get(key []byte) ([]byte, error) { + l.getCount++ + return l.backend.Get(key) +} + +func (l *loggingDb) Put(key []byte, value []byte) error { + return l.backend.Put(key, value) +} + +func (l *loggingDb) Delete(key []byte) error { + return l.backend.Delete(key) +} + +func (l *loggingDb) NewBatch() ethdb.Batch { + return l.backend.NewBatch() +} + +func (l *loggingDb) NewBatchWithSize(size int) ethdb.Batch { + return l.backend.NewBatchWithSize(size) +} + +func (l *loggingDb) NewIterator(prefix []byte, start []byte) ethdb.Iterator { + return l.backend.NewIterator(prefix, start) +} + +func (l *loggingDb) NewSnapshot() (ethdb.Snapshot, error) { + return l.backend.NewSnapshot() +} + +func (l *loggingDb) Stat(property string) (string, error) { + return l.backend.Stat(property) +} + +func (l *loggingDb) Compact(start []byte, limit []byte) error { + return l.backend.Compact(start, limit) +} + +func (l *loggingDb) Close() error { + return l.backend.Close() +} + +// makeLargeTestTrie create a sample test trie +func makeLargeTestTrie() (*Database, *StateTrie, *loggingDb) { + // Create an empty trie + logDb := &loggingDb{0, memorydb.New()} + triedb := NewDatabase(logDb) + trie, _ := NewStateTrie(common.Hash{}, common.Hash{}, triedb) + + // Fill it with some arbitrary data + for i := 0; i < 10000; i++ { + key := make([]byte, 32) + val := make([]byte, 32) + binary.BigEndian.PutUint64(key, uint64(i)) + binary.BigEndian.PutUint64(val, uint64(i)) + key = crypto.Keccak256(key) + val = crypto.Keccak256(val) + trie.Update(key, val) + } + _, nodes, _ := trie.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) + // Return the generated trie + return triedb, trie, logDb +} + +// Tests that the node iterator indeed walks over the entire database contents. +func TestNodeIteratorLargeTrie(t *testing.T) { + // Create some arbitrary test trie to iterate + db, trie, logDb := makeLargeTestTrie() + db.Cap(0) // flush everything + // Do a seek operation + trie.NodeIterator(common.FromHex("0x77667766776677766778855885885885")) + // master: 24 get operations + // this pr: 5 get operations + if have, want := logDb.getCount, uint64(5); have != want { + t.Fatalf("Too many lookups during seek, have %d want %d", have, want) + } +} + +func TestIteratorNodeBlob(t *testing.T) { + var ( + db = memorydb.New() + triedb = NewDatabase(db) + trie = NewEmpty(triedb) + ) + vals := []struct{ k, v string }{ + {"do", "verb"}, + {"ether", "wookiedoo"}, + {"horse", "stallion"}, + {"shaman", "horse"}, + {"doge", "coin"}, + {"dog", "puppy"}, + {"somethingveryoddindeedthis is", "myothernodedata"}, + } + all := make(map[string]string) + for _, val := range vals { + all[val.k] = val.v + trie.Update([]byte(val.k), []byte(val.v)) + } + _, nodes, _ := trie.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) + triedb.Cap(0) + + found := make(map[common.Hash][]byte) + it := trie.NodeIterator(nil) + for it.Next(true) { + if it.Hash() == (common.Hash{}) { + continue + } + found[it.Hash()] = it.NodeBlob() + } + + dbIter := db.NewIterator(nil, nil) + defer dbIter.Release() + + var count int + for dbIter.Next() { + got, present := found[common.BytesToHash(dbIter.Key())] + if !present { + t.Fatalf("Miss trie node %v", dbIter.Key()) + } + if !bytes.Equal(got, dbIter.Value()) { + t.Fatalf("Unexpected trie node want %v got %v", dbIter.Value(), got) + } + count += 1 + } + if count != len(found) { + t.Fatal("Find extra trie node via iterator") + } +} diff --git a/trie/node.go b/trie/node.go index 04f09f07..6ce6551d 100644 --- a/trie/node.go +++ b/trie/node.go @@ -21,15 +21,16 @@ import ( "io" "strings" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" ) var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "[17]"} type node interface { - fstring(string) string cache() (hashNode, bool) + encode(w rlp.EncoderBuffer) + fstring(string) string } type ( @@ -52,16 +53,9 @@ var nilValueNode = valueNode(nil) // EncodeRLP encodes a full node into the consensus RLP format. func (n *fullNode) EncodeRLP(w io.Writer) error { - var nodes [17]node - - for i, child := range &n.Children { - if child != nil { - nodes[i] = child - } else { - nodes[i] = nilValueNode - } - } - return rlp.Encode(w, nodes) + eb := rlp.NewEncoderBuffer(w) + n.encode(eb) + return eb.Flush() } func (n *fullNode) copy() *fullNode { copy := *n; return © } @@ -105,6 +99,7 @@ func (n valueNode) fstring(ind string) string { return fmt.Sprintf("%x ", []byte(n)) } +// mustDecodeNode is a wrapper of decodeNode and panic if any error is encountered. func mustDecodeNode(hash, buf []byte) node { n, err := decodeNode(hash, buf) if err != nil { @@ -113,8 +108,29 @@ func mustDecodeNode(hash, buf []byte) node { return n } -// decodeNode parses the RLP encoding of a trie node. +// mustDecodeNodeUnsafe is a wrapper of decodeNodeUnsafe and panic if any error is +// encountered. +func mustDecodeNodeUnsafe(hash, buf []byte) node { + n, err := decodeNodeUnsafe(hash, buf) + if err != nil { + panic(fmt.Sprintf("node %x: %v", hash, err)) + } + return n +} + +// decodeNode parses the RLP encoding of a trie node. It will deep-copy the passed +// byte slice for decoding, so it's safe to modify the byte slice afterwards. The- +// decode performance of this function is not optimal, but it is suitable for most +// scenarios with low performance requirements and hard to determine whether the +// byte slice be modified or not. func decodeNode(hash, buf []byte) (node, error) { + return decodeNodeUnsafe(hash, common.CopyBytes(buf)) +} + +// decodeNodeUnsafe parses the RLP encoding of a trie node. The passed byte slice +// will be directly referenced by node without bytes deep copy, so the input MUST +// not be changed after. +func decodeNodeUnsafe(hash, buf []byte) (node, error) { if len(buf) == 0 { return nil, io.ErrUnexpectedEOF } @@ -147,7 +163,7 @@ func decodeShort(hash, elems []byte) (node, error) { if err != nil { return nil, fmt.Errorf("invalid value node: %v", err) } - return &shortNode{key, append(valueNode{}, val...), flag}, nil + return &shortNode{key, valueNode(val), flag}, nil } r, _, err := decodeRef(rest) if err != nil { @@ -170,7 +186,7 @@ func decodeFull(hash, elems []byte) (*fullNode, error) { return n, err } if len(val) > 0 { - n.Children[16] = append(valueNode{}, val...) + n.Children[16] = valueNode(val) } return n, nil } @@ -196,7 +212,7 @@ func decodeRef(buf []byte) (node, []byte, error) { // empty node return nil, rest, nil case kind == rlp.String && len(val) == 32: - return append(hashNode{}, val...), rest, nil + return hashNode(val), rest, nil default: return nil, nil, fmt.Errorf("invalid RLP string size %d (want 0 or 32)", len(val)) } diff --git a/trie/node_enc.go b/trie/node_enc.go new file mode 100644 index 00000000..cade35b7 --- /dev/null +++ b/trie/node_enc.go @@ -0,0 +1,87 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "github.com/ethereum/go-ethereum/rlp" +) + +func nodeToBytes(n node) []byte { + w := rlp.NewEncoderBuffer(nil) + n.encode(w) + result := w.ToBytes() + w.Flush() + return result +} + +func (n *fullNode) encode(w rlp.EncoderBuffer) { + offset := w.List() + for _, c := range n.Children { + if c != nil { + c.encode(w) + } else { + w.Write(rlp.EmptyString) + } + } + w.ListEnd(offset) +} + +func (n *shortNode) encode(w rlp.EncoderBuffer) { + offset := w.List() + w.WriteBytes(n.Key) + if n.Val != nil { + n.Val.encode(w) + } else { + w.Write(rlp.EmptyString) + } + w.ListEnd(offset) +} + +func (n hashNode) encode(w rlp.EncoderBuffer) { + w.WriteBytes(n) +} + +func (n valueNode) encode(w rlp.EncoderBuffer) { + w.WriteBytes(n) +} + +func (n rawFullNode) encode(w rlp.EncoderBuffer) { + offset := w.List() + for _, c := range n { + if c != nil { + c.encode(w) + } else { + w.Write(rlp.EmptyString) + } + } + w.ListEnd(offset) +} + +func (n *rawShortNode) encode(w rlp.EncoderBuffer) { + offset := w.List() + w.WriteBytes(n.Key) + if n.Val != nil { + n.Val.encode(w) + } else { + w.Write(rlp.EmptyString) + } + w.ListEnd(offset) +} + +func (n rawNode) encode(w rlp.EncoderBuffer) { + w.Write(n) +} diff --git a/trie/node_test.go b/trie/node_test.go new file mode 100644 index 00000000..9b8b3374 --- /dev/null +++ b/trie/node_test.go @@ -0,0 +1,215 @@ +// 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 ( + "bytes" + "testing" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" +) + +func newTestFullNode(v []byte) []interface{} { + fullNodeData := []interface{}{} + for i := 0; i < 16; i++ { + k := bytes.Repeat([]byte{byte(i + 1)}, 32) + fullNodeData = append(fullNodeData, k) + } + fullNodeData = append(fullNodeData, v) + return fullNodeData +} + +func TestDecodeNestedNode(t *testing.T) { + fullNodeData := newTestFullNode([]byte("fullnode")) + + data := [][]byte{} + for i := 0; i < 16; i++ { + data = append(data, nil) + } + data = append(data, []byte("subnode")) + fullNodeData[15] = data + + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + if _, err := decodeNode([]byte("testdecode"), buf.Bytes()); err != nil { + t.Fatalf("decode nested full node err: %v", err) + } +} + +func TestDecodeFullNodeWrongSizeChild(t *testing.T) { + fullNodeData := newTestFullNode([]byte("wrongsizechild")) + fullNodeData[0] = []byte("00") + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if _, ok := err.(*decodeError); !ok { + t.Fatalf("decodeNode returned wrong err: %v", err) + } +} + +func TestDecodeFullNodeWrongNestedFullNode(t *testing.T) { + fullNodeData := newTestFullNode([]byte("fullnode")) + + data := [][]byte{} + for i := 0; i < 16; i++ { + data = append(data, []byte("123456")) + } + data = append(data, []byte("subnode")) + fullNodeData[15] = data + + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if _, ok := err.(*decodeError); !ok { + t.Fatalf("decodeNode returned wrong err: %v", err) + } +} + +func TestDecodeFullNode(t *testing.T) { + fullNodeData := newTestFullNode([]byte("decodefullnode")) + buf := bytes.NewBuffer([]byte{}) + rlp.Encode(buf, fullNodeData) + + _, err := decodeNode([]byte("testdecode"), buf.Bytes()) + if err != nil { + t.Fatalf("decode full node err: %v", err) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkEncodeShortNode +// BenchmarkEncodeShortNode-8 16878850 70.81 ns/op 48 B/op 1 allocs/op +func BenchmarkEncodeShortNode(b *testing.B) { + node := &shortNode{ + Key: []byte{0x1, 0x2}, + Val: hashNode(randBytes(32)), + } + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + nodeToBytes(node) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkEncodeFullNode +// BenchmarkEncodeFullNode-8 4323273 284.4 ns/op 576 B/op 1 allocs/op +func BenchmarkEncodeFullNode(b *testing.B) { + node := &fullNode{} + for i := 0; i < 16; i++ { + node.Children[i] = hashNode(randBytes(32)) + } + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + nodeToBytes(node) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkDecodeShortNode +// BenchmarkDecodeShortNode-8 7925638 151.0 ns/op 157 B/op 4 allocs/op +func BenchmarkDecodeShortNode(b *testing.B) { + node := &shortNode{ + Key: []byte{0x1, 0x2}, + Val: hashNode(randBytes(32)), + } + blob := nodeToBytes(node) + hash := crypto.Keccak256(blob) + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + mustDecodeNode(hash, blob) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkDecodeShortNodeUnsafe +// BenchmarkDecodeShortNodeUnsafe-8 9027476 128.6 ns/op 109 B/op 3 allocs/op +func BenchmarkDecodeShortNodeUnsafe(b *testing.B) { + node := &shortNode{ + Key: []byte{0x1, 0x2}, + Val: hashNode(randBytes(32)), + } + blob := nodeToBytes(node) + hash := crypto.Keccak256(blob) + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + mustDecodeNodeUnsafe(hash, blob) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkDecodeFullNode +// BenchmarkDecodeFullNode-8 1597462 761.9 ns/op 1280 B/op 18 allocs/op +func BenchmarkDecodeFullNode(b *testing.B) { + node := &fullNode{} + for i := 0; i < 16; i++ { + node.Children[i] = hashNode(randBytes(32)) + } + blob := nodeToBytes(node) + hash := crypto.Keccak256(blob) + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + mustDecodeNode(hash, blob) + } +} + +// goos: darwin +// goarch: arm64 +// pkg: github.com/ethereum/go-ethereum/trie +// BenchmarkDecodeFullNodeUnsafe +// BenchmarkDecodeFullNodeUnsafe-8 1789070 687.1 ns/op 704 B/op 17 allocs/op +func BenchmarkDecodeFullNodeUnsafe(b *testing.B) { + node := &fullNode{} + for i := 0; i < 16; i++ { + node.Children[i] = hashNode(randBytes(32)) + } + blob := nodeToBytes(node) + hash := crypto.Keccak256(blob) + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + mustDecodeNodeUnsafe(hash, blob) + } +} diff --git a/trie/nodeset.go b/trie/nodeset.go new file mode 100644 index 00000000..08b9b35e --- /dev/null +++ b/trie/nodeset.go @@ -0,0 +1,94 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "fmt" + + "github.com/ethereum/go-ethereum/common" +) + +// memoryNode is all the information we know about a single cached trie node +// in the memory. +type memoryNode struct { + hash common.Hash // Node hash, computed by hashing rlp value + size uint16 // Byte size of the useful cached data + node node // Cached collapsed trie node, or raw rlp data +} + +// NodeSet contains all dirty nodes collected during the commit operation. +// Each node is keyed by path. It's not thread-safe to use. +type NodeSet struct { + owner common.Hash // the identifier of the trie + paths []string // the path of dirty nodes, sort by insertion order + nodes map[string]*memoryNode // the map of dirty nodes, keyed by node path + leaves []*leaf // the list of dirty leaves +} + +// NewNodeSet initializes an empty node set to be used for tracking dirty nodes +// from a specific account or storage trie. The owner is zero for the account +// trie and the owning account address hash for storage tries. +func NewNodeSet(owner common.Hash) *NodeSet { + return &NodeSet{ + owner: owner, + nodes: make(map[string]*memoryNode), + } +} + +// add caches node with provided path and node object. +func (set *NodeSet) add(path string, node *memoryNode) { + set.paths = append(set.paths, path) + set.nodes[path] = node +} + +// addLeaf caches the provided leaf node. +func (set *NodeSet) addLeaf(node *leaf) { + set.leaves = append(set.leaves, node) +} + +// Len returns the number of dirty nodes contained in the set. +func (set *NodeSet) Len() int { + return len(set.nodes) +} + +// MergedNodeSet represents a merged dirty node set for a group of tries. +type MergedNodeSet struct { + sets map[common.Hash]*NodeSet +} + +// NewMergedNodeSet initializes an empty merged set. +func NewMergedNodeSet() *MergedNodeSet { + return &MergedNodeSet{sets: make(map[common.Hash]*NodeSet)} +} + +// NewWithNodeSet constructs a merged nodeset with the provided single set. +func NewWithNodeSet(set *NodeSet) *MergedNodeSet { + merged := NewMergedNodeSet() + merged.Merge(set) + return merged +} + +// Merge merges the provided dirty nodes of a trie into the set. The assumption +// is held that no duplicated set belonging to the same trie will be merged twice. +func (set *MergedNodeSet) Merge(other *NodeSet) error { + _, present := set.sets[other.owner] + if present { + return fmt.Errorf("duplicate trie for owner %#x", other.owner) + } + set.sets[other.owner] = other + return nil +} diff --git a/trie/preimages.go b/trie/preimages.go new file mode 100644 index 00000000..66f34117 --- /dev/null +++ b/trie/preimages.go @@ -0,0 +1,95 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" +) + +// preimageStore is the store for caching preimages of node key. +type preimageStore struct { + lock sync.RWMutex + disk ethdb.KeyValueStore + preimages map[common.Hash][]byte // Preimages of nodes from the secure trie + preimagesSize common.StorageSize // Storage size of the preimages cache +} + +// newPreimageStore initializes the store for caching preimages. +func newPreimageStore(disk ethdb.KeyValueStore) *preimageStore { + return &preimageStore{ + disk: disk, + preimages: make(map[common.Hash][]byte), + } +} + +// insertPreimage writes a new trie node pre-image to the memory database if it's +// yet unknown. The method will NOT make a copy of the slice, only use if the +// preimage will NOT be changed later on. +func (store *preimageStore) insertPreimage(preimages map[common.Hash][]byte) { + store.lock.Lock() + defer store.lock.Unlock() + + for hash, preimage := range preimages { + if _, ok := store.preimages[hash]; ok { + continue + } + store.preimages[hash] = preimage + store.preimagesSize += common.StorageSize(common.HashLength + len(preimage)) + } +} + +// preimage retrieves a cached trie node pre-image from memory. If it cannot be +// found cached, the method queries the persistent database for the content. +func (store *preimageStore) preimage(hash common.Hash) []byte { + store.lock.RLock() + preimage := store.preimages[hash] + store.lock.RUnlock() + + if preimage != nil { + return preimage + } + return rawdb.ReadPreimage(store.disk, hash) +} + +// commit flushes the cached preimages into the disk. +func (store *preimageStore) commit(force bool) error { + store.lock.Lock() + defer store.lock.Unlock() + + if store.preimagesSize <= 4*1024*1024 && !force { + return nil + } + batch := store.disk.NewBatch() + rawdb.WritePreimages(batch, store.preimages) + if err := batch.Write(); err != nil { + return err + } + store.preimages, store.preimagesSize = make(map[common.Hash][]byte), 0 + return nil +} + +// size returns the current storage size of accumulated preimages. +func (store *preimageStore) size() common.StorageSize { + store.lock.RLock() + defer store.lock.RUnlock() + + return store.preimagesSize +} diff --git a/trie/proof.go b/trie/proof.go index ce450c5e..fa8361ee 100644 --- a/trie/proof.go +++ b/trie/proof.go @@ -18,12 +18,13 @@ package trie import ( "bytes" + "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/rlp" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" ) // Prove constructs a merkle proof for key. The result contains all encoded nodes @@ -35,9 +36,12 @@ import ( // with the node that proves the absence of the key. func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) error { // Collect all nodes on the path to key. + var ( + prefix []byte + nodes []node + tn = t.root + ) key = keybytesToHex(key) - var nodes []node - tn := t.root for len(key) > 0 && tn != nil { switch n := tn.(type) { case *shortNode: @@ -46,16 +50,18 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) e tn = nil } else { tn = n.Val + prefix = append(prefix, n.Key...) key = key[len(n.Key):] } nodes = append(nodes, n) case *fullNode: tn = n.Children[key[0]] + prefix = append(prefix, key[0]) key = key[1:] nodes = append(nodes, n) case hashNode: var err error - tn, err = t.resolveHash(n, nil) + tn, err = t.resolveHash(n, prefix) if err != nil { log.Error(fmt.Sprintf("Unhandled trie error: %v", err)) return err @@ -64,26 +70,24 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) e panic(fmt.Sprintf("%T: invalid node: %v", tn, tn)) } } - hasher := newHasher(nil) + hasher := newHasher(false) defer returnHasherToPool(hasher) for i, n := range nodes { - // Don't bother checking for errors here since hasher panics - // if encoding doesn't work and we're not writing to any database. - n, _, _ = hasher.hashChildren(n, nil) - hn, _ := hasher.store(n, nil, false) + if fromLevel > 0 { + fromLevel-- + continue + } + var hn node + n, hn = hasher.proofHash(n) if hash, ok := hn.(hashNode); ok || i == 0 { // If the node's database encoding is a hash (or is the // root node), it becomes a proof element. - if fromLevel > 0 { - fromLevel-- - } else { - enc, _ := rlp.EncodeToBytes(n) - if !ok { - hash = hasher.makeHashNode(enc) - } - proofDb.Put(hash, enc) + enc := nodeToBytes(n) + if !ok { + hash = hasher.hashData(enc) } + proofDb.Put(hash, enc) } } return nil @@ -96,40 +100,484 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) e // 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.KeyValueWriter) error { +func (t *StateTrie) 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 ethdb.KeyValueReader) (value []byte, nodes int, err error) { +func VerifyProof(rootHash common.Hash, key []byte, proofDb ethdb.KeyValueReader) (value []byte, err error) { key = keybytesToHex(key) wantHash := rootHash for i := 0; ; i++ { buf, _ := proofDb.Get(wantHash[:]) if buf == nil { - return nil, i, fmt.Errorf("proof node %d (hash %064x) missing", i, wantHash) + return nil, fmt.Errorf("proof node %d (hash %064x) missing", i, wantHash) } n, err := decodeNode(wantHash[:], buf) if err != nil { - return nil, i, fmt.Errorf("bad proof node %d: %v", i, err) + return nil, fmt.Errorf("bad proof node %d: %v", i, err) } - keyrest, cld := get(n, key) + keyrest, cld := get(n, key, true) switch cld := cld.(type) { case nil: // The trie doesn't contain the key. - return nil, i, nil + return nil, nil case hashNode: key = keyrest copy(wantHash[:], cld) case valueNode: - return cld, i + 1, nil + return cld, nil + } + } +} + +// proofToPath converts a merkle proof to trie node path. The main purpose of +// this function is recovering a node path from the merkle proof stream. All +// necessary nodes will be resolved and leave the remaining as hashnode. +// +// The given edge proof is allowed to be an existent or non-existent proof. +func proofToPath(rootHash common.Hash, root node, key []byte, proofDb ethdb.KeyValueReader, allowNonExistent bool) (node, []byte, error) { + // resolveNode retrieves and resolves trie node from merkle proof stream + resolveNode := func(hash common.Hash) (node, error) { + buf, _ := proofDb.Get(hash[:]) + if buf == nil { + return nil, fmt.Errorf("proof node (hash %064x) missing", hash) + } + n, err := decodeNode(hash[:], buf) + if err != nil { + return nil, fmt.Errorf("bad proof node %v", err) + } + return n, err + } + // If the root node is empty, resolve it first. + // Root node must be included in the proof. + if root == nil { + n, err := resolveNode(rootHash) + if err != nil { + return nil, nil, err + } + root = n + } + var ( + err error + child, parent node + keyrest []byte + valnode []byte + ) + key, parent = keybytesToHex(key), root + for { + keyrest, child = get(parent, key, false) + switch cld := child.(type) { + case nil: + // The trie doesn't contain the key. It's possible + // the proof is a non-existing proof, but at least + // we can prove all resolved nodes are correct, it's + // enough for us to prove range. + if allowNonExistent { + return root, nil, nil + } + return nil, nil, errors.New("the node is not contained in trie") + case *shortNode: + key, parent = keyrest, child // Already resolved + continue + case *fullNode: + key, parent = keyrest, child // Already resolved + continue + case hashNode: + child, err = resolveNode(common.BytesToHash(cld)) + if err != nil { + return nil, nil, err + } + case valueNode: + valnode = cld + } + // Link the parent and child. + switch pnode := parent.(type) { + case *shortNode: + pnode.Val = child + case *fullNode: + pnode.Children[key[0]] = child + default: + panic(fmt.Sprintf("%T: invalid node: %v", pnode, pnode)) + } + if len(valnode) > 0 { + return root, valnode, nil // The whole path is resolved + } + key, parent = keyrest, child + } +} + +// unsetInternal removes all internal node references(hashnode, embedded node). +// It should be called after a trie is constructed with two edge paths. Also +// the given boundary keys must be the one used to construct the edge paths. +// +// It's the key step for range proof. All visited nodes should be marked dirty +// since the node content might be modified. Besides it can happen that some +// fullnodes only have one child which is disallowed. But if the proof is valid, +// the missing children will be filled, otherwise it will be thrown anyway. +// +// Note we have the assumption here the given boundary keys are different +// and right is larger than left. +func unsetInternal(n node, left []byte, right []byte) (bool, error) { + left, right = keybytesToHex(left), keybytesToHex(right) + + // Step down to the fork point. There are two scenarios can happen: + // - the fork point is a shortnode: either the key of left proof or + // right proof doesn't match with shortnode's key. + // - the fork point is a fullnode: both two edge proofs are allowed + // to point to a non-existent key. + var ( + pos = 0 + parent node + + // fork indicator, 0 means no fork, -1 means proof is less, 1 means proof is greater + shortForkLeft, shortForkRight int + ) +findFork: + for { + switch rn := (n).(type) { + case *shortNode: + rn.flags = nodeFlag{dirty: true} + + // If either the key of left proof or right proof doesn't match with + // shortnode, stop here and the forkpoint is the shortnode. + if len(left)-pos < len(rn.Key) { + shortForkLeft = bytes.Compare(left[pos:], rn.Key) + } else { + shortForkLeft = bytes.Compare(left[pos:pos+len(rn.Key)], rn.Key) + } + if len(right)-pos < len(rn.Key) { + shortForkRight = bytes.Compare(right[pos:], rn.Key) + } else { + shortForkRight = bytes.Compare(right[pos:pos+len(rn.Key)], rn.Key) + } + if shortForkLeft != 0 || shortForkRight != 0 { + break findFork + } + parent = n + n, pos = rn.Val, pos+len(rn.Key) + case *fullNode: + rn.flags = nodeFlag{dirty: true} + + // If either the node pointed by left proof or right proof is nil, + // stop here and the forkpoint is the fullnode. + leftnode, rightnode := rn.Children[left[pos]], rn.Children[right[pos]] + if leftnode == nil || rightnode == nil || leftnode != rightnode { + break findFork + } + parent = n + n, pos = rn.Children[left[pos]], pos+1 + default: + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } + } + switch rn := n.(type) { + case *shortNode: + // There can have these five scenarios: + // - both proofs are less than the trie path => no valid range + // - both proofs are greater than the trie path => no valid range + // - left proof is less and right proof is greater => valid range, unset the shortnode entirely + // - left proof points to the shortnode, but right proof is greater + // - right proof points to the shortnode, but left proof is less + if shortForkLeft == -1 && shortForkRight == -1 { + return false, errors.New("empty range") + } + if shortForkLeft == 1 && shortForkRight == 1 { + return false, errors.New("empty range") + } + if shortForkLeft != 0 && shortForkRight != 0 { + // The fork point is root node, unset the entire trie + if parent == nil { + return true, nil + } + parent.(*fullNode).Children[left[pos-1]] = nil + return false, nil + } + // Only one proof points to non-existent key. + if shortForkRight != 0 { + if _, ok := rn.Val.(valueNode); ok { + // The fork point is root node, unset the entire trie + if parent == nil { + return true, nil + } + parent.(*fullNode).Children[left[pos-1]] = nil + return false, nil + } + return false, unset(rn, rn.Val, left[pos:], len(rn.Key), false) + } + if shortForkLeft != 0 { + if _, ok := rn.Val.(valueNode); ok { + // The fork point is root node, unset the entire trie + if parent == nil { + return true, nil + } + parent.(*fullNode).Children[right[pos-1]] = nil + return false, nil + } + return false, unset(rn, rn.Val, right[pos:], len(rn.Key), true) + } + return false, nil + case *fullNode: + // unset all internal nodes in the forkpoint + for i := left[pos] + 1; i < right[pos]; i++ { + rn.Children[i] = nil + } + if err := unset(rn, rn.Children[left[pos]], left[pos:], 1, false); err != nil { + return false, err + } + if err := unset(rn, rn.Children[right[pos]], right[pos:], 1, true); err != nil { + return false, err + } + return false, nil + default: + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } +} + +// unset removes all internal node references either the left most or right most. +// It can meet these scenarios: +// +// - The given path is existent in the trie, unset the associated nodes with the +// specific direction +// - The given path is non-existent in the trie +// - the fork point is a fullnode, the corresponding child pointed by path +// is nil, return +// - the fork point is a shortnode, the shortnode is included in the range, +// keep the entire branch and return. +// - the fork point is a shortnode, the shortnode is excluded in the range, +// unset the entire branch. +func unset(parent node, child node, key []byte, pos int, removeLeft bool) error { + switch cld := child.(type) { + case *fullNode: + if removeLeft { + for i := 0; i < int(key[pos]); i++ { + cld.Children[i] = nil + } + cld.flags = nodeFlag{dirty: true} + } else { + for i := key[pos] + 1; i < 16; i++ { + cld.Children[i] = nil + } + cld.flags = nodeFlag{dirty: true} + } + return unset(cld, cld.Children[key[pos]], key, pos+1, removeLeft) + case *shortNode: + if len(key[pos:]) < len(cld.Key) || !bytes.Equal(cld.Key, key[pos:pos+len(cld.Key)]) { + // Find the fork point, it's an non-existent branch. + if removeLeft { + if bytes.Compare(cld.Key, key[pos:]) < 0 { + // The key of fork shortnode is less than the path + // (it belongs to the range), unset the entrie + // branch. The parent must be a fullnode. + fn := parent.(*fullNode) + fn.Children[key[pos-1]] = nil + } + //else { + // The key of fork shortnode is greater than the + // path(it doesn't belong to the range), keep + // it with the cached hash available. + //} + } else { + if bytes.Compare(cld.Key, key[pos:]) > 0 { + // The key of fork shortnode is greater than the + // path(it belongs to the range), unset the entrie + // branch. The parent must be a fullnode. + fn := parent.(*fullNode) + fn.Children[key[pos-1]] = nil + } + //else { + // The key of fork shortnode is less than the + // path(it doesn't belong to the range), keep + // it with the cached hash available. + //} + } + return nil + } + if _, ok := cld.Val.(valueNode); ok { + fn := parent.(*fullNode) + fn.Children[key[pos-1]] = nil + return nil + } + cld.flags = nodeFlag{dirty: true} + return unset(cld, cld.Val, key, pos+len(cld.Key), removeLeft) + case nil: + // If the node is nil, then it's a child of the fork point + // fullnode(it's a non-existent branch). + return nil + default: + panic("it shouldn't happen") // hashNode, valueNode + } +} + +// hasRightElement returns the indicator whether there exists more elements +// on the right side of the given path. The given path can point to an existent +// key or a non-existent one. This function has the assumption that the whole +// path should already be resolved. +func hasRightElement(node node, key []byte) bool { + pos, key := 0, keybytesToHex(key) + for node != nil { + switch rn := node.(type) { + case *fullNode: + for i := key[pos] + 1; i < 16; i++ { + if rn.Children[i] != nil { + return true + } + } + node, pos = rn.Children[key[pos]], pos+1 + case *shortNode: + if len(key)-pos < len(rn.Key) || !bytes.Equal(rn.Key, key[pos:pos+len(rn.Key)]) { + return bytes.Compare(rn.Key, key[pos:]) > 0 + } + node, pos = rn.Val, pos+len(rn.Key) + case valueNode: + return false // We have resolved the whole path + default: + panic(fmt.Sprintf("%T: invalid node: %v", node, node)) // hashnode } } + return false } -func get(tn node, key []byte) ([]byte, node) { +// VerifyRangeProof checks whether the given leaf nodes and edge proof +// can prove the given trie leaves range is matched with the specific root. +// Besides, the range should be consecutive (no gap inside) and monotonic +// increasing. +// +// Note the given proof actually contains two edge proofs. Both of them can +// be non-existent proofs. For example the first proof is for a non-existent +// key 0x03, the last proof is for a non-existent key 0x10. The given batch +// leaves are [0x04, 0x05, .. 0x09]. It's still feasible to prove the given +// batch is valid. +// +// The firstKey is paired with firstProof, not necessarily the same as keys[0] +// (unless firstProof is an existent proof). Similarly, lastKey and lastProof +// are paired. +// +// Expect the normal case, this function can also be used to verify the following +// range proofs: +// +// - All elements proof. In this case the proof can be nil, but the range should +// be all the leaves in the trie. +// +// - One element proof. In this case no matter the edge proof is a non-existent +// proof or not, we can always verify the correctness of the proof. +// +// - Zero element proof. In this case a single non-existent proof is enough to prove. +// Besides, if there are still some other leaves available on the right side, then +// an error will be returned. +// +// Except returning the error to indicate the proof is valid or not, the function will +// also return a flag to indicate whether there exists more accounts/slots in the trie. +// +// Note: This method does not verify that the proof is of minimal form. If the input +// proofs are 'bloated' with neighbour leaves or random data, aside from the 'useful' +// data, then the proof will still be accepted. +func VerifyRangeProof(rootHash common.Hash, firstKey []byte, lastKey []byte, keys [][]byte, values [][]byte, proof ethdb.KeyValueReader) (bool, error) { + if len(keys) != len(values) { + return false, fmt.Errorf("inconsistent proof data, keys: %d, values: %d", len(keys), len(values)) + } + // Ensure the received batch is monotonic increasing and contains no deletions + for i := 0; i < len(keys)-1; i++ { + if bytes.Compare(keys[i], keys[i+1]) >= 0 { + return false, errors.New("range is not monotonically increasing") + } + } + for _, value := range values { + if len(value) == 0 { + return false, errors.New("range contains deletion") + } + } + // Special case, there is no edge proof at all. The given range is expected + // to be the whole leaf-set in the trie. + if proof == nil { + tr := NewStackTrie(nil) + for index, key := range keys { + tr.TryUpdate(key, values[index]) + } + if have, want := tr.Hash(), rootHash; have != want { + return false, fmt.Errorf("invalid proof, want hash %x, got %x", want, have) + } + return false, nil // No more elements + } + // Special case, there is a provided edge proof but zero key/value + // pairs, ensure there are no more accounts / slots in the trie. + if len(keys) == 0 { + root, val, err := proofToPath(rootHash, nil, firstKey, proof, true) + if err != nil { + return false, err + } + if val != nil || hasRightElement(root, firstKey) { + return false, errors.New("more entries available") + } + return false, nil + } + // Special case, there is only one element and two edge keys are same. + // In this case, we can't construct two edge paths. So handle it here. + if len(keys) == 1 && bytes.Equal(firstKey, lastKey) { + root, val, err := proofToPath(rootHash, nil, firstKey, proof, false) + if err != nil { + return false, err + } + if !bytes.Equal(firstKey, keys[0]) { + return false, errors.New("correct proof but invalid key") + } + if !bytes.Equal(val, values[0]) { + return false, errors.New("correct proof but invalid data") + } + return hasRightElement(root, firstKey), nil + } + // Ok, in all other cases, we require two edge paths available. + // First check the validity of edge keys. + if bytes.Compare(firstKey, lastKey) >= 0 { + return false, errors.New("invalid edge keys") + } + // todo(rjl493456442) different length edge keys should be supported + if len(firstKey) != len(lastKey) { + return false, errors.New("inconsistent edge keys") + } + // Convert the edge proofs to edge trie paths. Then we can + // have the same tree architecture with the original one. + // For the first edge proof, non-existent proof is allowed. + root, _, err := proofToPath(rootHash, nil, firstKey, proof, true) + if err != nil { + return false, err + } + // Pass the root node here, the second path will be merged + // with the first one. For the last edge proof, non-existent + // proof is also allowed. + root, _, err = proofToPath(rootHash, root, lastKey, proof, true) + if err != nil { + return false, err + } + // Remove all internal references. All the removed parts should + // be re-filled(or re-constructed) by the given leaves range. + empty, err := unsetInternal(root, firstKey, lastKey) + if err != nil { + return false, err + } + // Rebuild the trie with the leaf stream, the shape of trie + // should be same with the original one. + tr := &Trie{root: root, db: NewDatabase(rawdb.NewMemoryDatabase())} + if empty { + tr.root = nil + } + for index, key := range keys { + tr.TryUpdate(key, values[index]) + } + if tr.Hash() != rootHash { + return false, fmt.Errorf("invalid proof, want hash %x, got %x", rootHash, tr.Hash()) + } + return hasRightElement(tr.root, keys[len(keys)-1]), nil +} + +// get returns the child of the given node. Return nil if the +// node with specified key doesn't exist at all. +// +// There is an additional flag `skipResolved`. If it's set then +// all resolved nodes won't be returned. +func get(tn node, key []byte, skipResolved bool) ([]byte, node) { for { switch n := tn.(type) { case *shortNode: @@ -138,9 +586,15 @@ func get(tn node, key []byte) ([]byte, node) { } tn = n.Val key = key[len(n.Key):] + if !skipResolved { + return key, tn + } case *fullNode: tn = n.Children[key[0]] key = key[1:] + if !skipResolved { + return key, tn + } case hashNode: return key, n case nil: diff --git a/trie/proof_test.go b/trie/proof_test.go index 0bb8ced3..61667b20 100644 --- a/trie/proof_test.go +++ b/trie/proof_test.go @@ -19,13 +19,16 @@ package trie import ( "bytes" crand "crypto/rand" + "encoding/binary" mrand "math/rand" + "sort" "testing" "time" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" + "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/memorydb" ) func init() { @@ -65,7 +68,7 @@ func TestProof(t *testing.T) { if proof == nil { t.Fatalf("prover %d: missing key %x while constructing proof", i, kv.k) } - val, _, err := VerifyProof(root, kv.k, proof) + val, err := VerifyProof(root, kv.k, proof) if err != nil { t.Fatalf("prover %d: failed to verify proof for key %x: %v\nraw proof: %x", i, kv.k, err, proof) } @@ -77,7 +80,7 @@ func TestProof(t *testing.T) { } func TestOneElementProof(t *testing.T) { - trie := new(Trie) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) updateString(trie, "k", "v") for i, prover := range makeProvers(trie) { proof := prover([]byte("k")) @@ -87,7 +90,7 @@ func TestOneElementProof(t *testing.T) { if proof.Len() != 1 { t.Errorf("prover %d: proof should have one element", i) } - val, _, err := VerifyProof(trie.Hash(), []byte("k"), proof) + val, err := VerifyProof(trie.Hash(), []byte("k"), proof) if err != nil { t.Fatalf("prover %d: failed to verify proof: %v\nraw proof: %x", i, err, proof) } @@ -106,7 +109,7 @@ func TestBadProof(t *testing.T) { if proof == nil { t.Fatalf("prover %d: nil proof", i) } - it := proof.NewIterator() + it := proof.NewIterator(nil, nil) for i, d := 0, mrand.Intn(proof.Len()); i <= d; i++ { it.Next() } @@ -118,7 +121,7 @@ func TestBadProof(t *testing.T) { mutateByte(val) proof.Put(crypto.Keccak256(val), val) - if _, _, err := VerifyProof(root, kv.k, proof); err == nil { + if _, err := VerifyProof(root, kv.k, proof); err == nil { t.Fatalf("prover %d: expected proof to fail for key %x", i, kv.k) } } @@ -128,7 +131,7 @@ func TestBadProof(t *testing.T) { // Tests that missing keys can also be proven. The test explicitly uses a single // entry trie and checks for missing keys both before and after the single entry. func TestMissingKeyProof(t *testing.T) { - trie := new(Trie) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) updateString(trie, "k", "v") for i, key := range []string{"a", "j", "l", "z"} { @@ -138,7 +141,7 @@ func TestMissingKeyProof(t *testing.T) { if proof.Len() != 1 { t.Errorf("test %d: proof should have one element", i) } - val, _, err := VerifyProof(trie.Hash(), []byte(key), proof) + val, err := VerifyProof(trie.Hash(), []byte(key), proof) if err != nil { t.Fatalf("test %d: failed to verify proof: %v\nraw proof: %x", i, err, proof) } @@ -148,6 +151,748 @@ func TestMissingKeyProof(t *testing.T) { } } +type entrySlice []*kv + +func (p entrySlice) Len() int { return len(p) } +func (p entrySlice) Less(i, j int) bool { return bytes.Compare(p[i].k, p[j].k) < 0 } +func (p entrySlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +// TestRangeProof tests normal range proof with both edge proofs +// as the existent proof. The test cases are generated randomly. +func TestRangeProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + for i := 0; i < 500; i++ { + start := mrand.Intn(len(entries)) + end := mrand.Intn(len(entries)-start) + start + 1 + + proof := memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[end-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var vals [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, vals, proof) + if err != nil { + t.Fatalf("Case %d(%d->%d) expect no error, got %v", i, start, end-1, err) + } + } +} + +// TestRangeProof tests normal range proof with two non-existent proofs. +// The test cases are generated randomly. +func TestRangeProofWithNonExistentProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + for i := 0; i < 500; i++ { + start := mrand.Intn(len(entries)) + end := mrand.Intn(len(entries)-start) + start + 1 + proof := memorydb.New() + + // Short circuit if the decreased key is same with the previous key + first := decreaseKey(common.CopyBytes(entries[start].k)) + if start != 0 && bytes.Equal(first, entries[start-1].k) { + continue + } + // Short circuit if the decreased key is underflow + if bytes.Compare(first, entries[start].k) > 0 { + continue + } + // Short circuit if the increased key is same with the next key + last := increaseKey(common.CopyBytes(entries[end-1].k)) + if end != len(entries) && bytes.Equal(last, entries[end].k) { + continue + } + // Short circuit if the increased key is overflow + if bytes.Compare(last, entries[end-1].k) < 0 { + continue + } + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var vals [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), first, last, keys, vals, proof) + if err != nil { + t.Fatalf("Case %d(%d->%d) expect no error, got %v", i, start, end-1, err) + } + } + // Special case, two edge proofs for two edge key. + proof := memorydb.New() + first := common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000").Bytes() + last := common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").Bytes() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var k [][]byte + var v [][]byte + for i := 0; i < len(entries); i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), first, last, k, v, proof) + if err != nil { + t.Fatal("Failed to verify whole rang with non-existent edges") + } +} + +// TestRangeProofWithInvalidNonExistentProof tests such scenarios: +// - There exists a gap between the first element and the left edge proof +// - There exists a gap between the last element and the right edge proof +func TestRangeProofWithInvalidNonExistentProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + // Case 1 + start, end := 100, 200 + first := decreaseKey(common.CopyBytes(entries[start].k)) + + proof := memorydb.New() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[end-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + start = 105 // Gap created + k := make([][]byte, 0) + v := make([][]byte, 0) + for i := start; i < end; i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), first, k[len(k)-1], k, v, proof) + if err == nil { + t.Fatalf("Expected to detect the error, got nil") + } + + // Case 2 + start, end = 100, 200 + last := increaseKey(common.CopyBytes(entries[end-1].k)) + proof = memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + end = 195 // Capped slice + k = make([][]byte, 0) + v = make([][]byte, 0) + for i := start; i < end; i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err = VerifyRangeProof(trie.Hash(), k[0], last, k, v, proof) + if err == nil { + t.Fatalf("Expected to detect the error, got nil") + } +} + +// TestOneElementRangeProof tests the proof with only one +// element. The first edge proof can be existent one or +// non-existent one. +func TestOneElementRangeProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + // One element with existent edge proof, both edge proofs + // point to the SAME key. + start := 1000 + proof := memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + _, err := VerifyRangeProof(trie.Hash(), entries[start].k, entries[start].k, [][]byte{entries[start].k}, [][]byte{entries[start].v}, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // One element with left non-existent edge proof + start = 1000 + first := decreaseKey(common.CopyBytes(entries[start].k)) + proof = memorydb.New() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), first, entries[start].k, [][]byte{entries[start].k}, [][]byte{entries[start].v}, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // One element with right non-existent edge proof + start = 1000 + last := increaseKey(common.CopyBytes(entries[start].k)) + proof = memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), entries[start].k, last, [][]byte{entries[start].k}, [][]byte{entries[start].v}, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // One element with two non-existent edge proofs + start = 1000 + first, last = decreaseKey(common.CopyBytes(entries[start].k)), increaseKey(common.CopyBytes(entries[start].k)) + proof = memorydb.New() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), first, last, [][]byte{entries[start].k}, [][]byte{entries[start].v}, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // Test the mini trie with only a single element. + tinyTrie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + entry := &kv{randBytes(32), randBytes(20), false} + tinyTrie.Update(entry.k, entry.v) + + first = common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000").Bytes() + last = entry.k + proof = memorydb.New() + if err := tinyTrie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := tinyTrie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(tinyTrie.Hash(), first, last, [][]byte{entry.k}, [][]byte{entry.v}, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } +} + +// TestAllElementsProof tests the range proof with all elements. +// The edge proofs can be nil. +func TestAllElementsProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + var k [][]byte + var v [][]byte + for i := 0; i < len(entries); i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), nil, nil, k, v, nil) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // With edge proofs, it should still work. + proof := memorydb.New() + if err := trie.Prove(entries[0].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[len(entries)-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), k[0], k[len(k)-1], k, v, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + // Even with non-existent edge proofs, it should still work. + proof = memorydb.New() + first := common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000").Bytes() + last := common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").Bytes() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), first, last, k, v, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } +} + +// TestSingleSideRangeProof tests the range starts from zero. +func TestSingleSideRangeProof(t *testing.T) { + for i := 0; i < 64; i++ { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + var entries entrySlice + for i := 0; i < 4096; i++ { + value := &kv{randBytes(32), randBytes(20), false} + trie.Update(value.k, value.v) + entries = append(entries, value) + } + sort.Sort(entries) + + var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1} + for _, pos := range cases { + proof := memorydb.New() + if err := trie.Prove(common.Hash{}.Bytes(), 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[pos].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + k := make([][]byte, 0) + v := make([][]byte, 0) + for i := 0; i <= pos; i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), common.Hash{}.Bytes(), k[len(k)-1], k, v, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + } + } +} + +// TestReverseSingleSideRangeProof tests the range ends with 0xffff...fff. +func TestReverseSingleSideRangeProof(t *testing.T) { + for i := 0; i < 64; i++ { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + var entries entrySlice + for i := 0; i < 4096; i++ { + value := &kv{randBytes(32), randBytes(20), false} + trie.Update(value.k, value.v) + entries = append(entries, value) + } + sort.Sort(entries) + + var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1} + for _, pos := range cases { + proof := memorydb.New() + if err := trie.Prove(entries[pos].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + last := common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + if err := trie.Prove(last.Bytes(), 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + k := make([][]byte, 0) + v := make([][]byte, 0) + for i := pos; i < len(entries); i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), k[0], last.Bytes(), k, v, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + } + } +} + +// TestBadRangeProof tests a few cases which the proof is wrong. +// The prover is expected to detect the error. +func TestBadRangeProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + for i := 0; i < 500; i++ { + start := mrand.Intn(len(entries)) + end := mrand.Intn(len(entries)-start) + start + 1 + proof := memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[end-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var vals [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + var first, last = keys[0], keys[len(keys)-1] + testcase := mrand.Intn(6) + var index int + switch testcase { + case 0: + // Modified key + index = mrand.Intn(end - start) + keys[index] = randBytes(32) // In theory it can't be same + case 1: + // Modified val + index = mrand.Intn(end - start) + vals[index] = randBytes(20) // In theory it can't be same + case 2: + // Gapped entry slice + index = mrand.Intn(end - start) + if (index == 0 && start < 100) || (index == end-start-1 && end <= 100) { + continue + } + keys = append(keys[:index], keys[index+1:]...) + vals = append(vals[:index], vals[index+1:]...) + case 3: + // Out of order + index1 := mrand.Intn(end - start) + index2 := mrand.Intn(end - start) + if index1 == index2 { + continue + } + keys[index1], keys[index2] = keys[index2], keys[index1] + vals[index1], vals[index2] = vals[index2], vals[index1] + case 4: + // Set random key to nil, do nothing + index = mrand.Intn(end - start) + keys[index] = nil + case 5: + // Set random value to nil, deletion + index = mrand.Intn(end - start) + vals[index] = nil + } + _, err := VerifyRangeProof(trie.Hash(), first, last, keys, vals, proof) + if err == nil { + t.Fatalf("%d Case %d index %d range: (%d->%d) expect error, got nil", i, testcase, index, start, end-1) + } + } +} + +// TestGappedRangeProof focuses on the small trie with embedded nodes. +// If the gapped node is embedded in the trie, it should be detected too. +func TestGappedRangeProof(t *testing.T) { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + var entries []*kv // Sorted entries + for i := byte(0); i < 10; i++ { + value := &kv{common.LeftPadBytes([]byte{i}, 32), []byte{i}, false} + trie.Update(value.k, value.v) + entries = append(entries, value) + } + first, last := 2, 8 + proof := memorydb.New() + if err := trie.Prove(entries[first].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[last-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var vals [][]byte + for i := first; i < last; i++ { + if i == (first+last)/2 { + continue + } + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, vals, proof) + if err == nil { + t.Fatal("expect error, got nil") + } +} + +// TestSameSideProofs tests the element is not in the range covered by proofs +func TestSameSideProofs(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + pos := 1000 + first := decreaseKey(common.CopyBytes(entries[pos].k)) + first = decreaseKey(first) + last := decreaseKey(common.CopyBytes(entries[pos].k)) + + proof := memorydb.New() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err := VerifyRangeProof(trie.Hash(), first, last, [][]byte{entries[pos].k}, [][]byte{entries[pos].v}, proof) + if err == nil { + t.Fatalf("Expected error, got nil") + } + + first = increaseKey(common.CopyBytes(entries[pos].k)) + last = increaseKey(common.CopyBytes(entries[pos].k)) + last = increaseKey(last) + + proof = memorydb.New() + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(last, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + _, err = VerifyRangeProof(trie.Hash(), first, last, [][]byte{entries[pos].k}, [][]byte{entries[pos].v}, proof) + if err == nil { + t.Fatalf("Expected error, got nil") + } +} + +func TestHasRightElement(t *testing.T) { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + var entries entrySlice + for i := 0; i < 4096; i++ { + value := &kv{randBytes(32), randBytes(20), false} + trie.Update(value.k, value.v) + entries = append(entries, value) + } + sort.Sort(entries) + + var cases = []struct { + start int + end int + hasMore bool + }{ + {-1, 1, true}, // single element with non-existent left proof + {0, 1, true}, // single element with existent left proof + {0, 10, true}, + {50, 100, true}, + {50, len(entries), false}, // No more element expected + {len(entries) - 1, len(entries), false}, // Single last element with two existent proofs(point to same key) + {len(entries) - 1, -1, false}, // Single last element with non-existent right proof + {0, len(entries), false}, // The whole set with existent left proof + {-1, len(entries), false}, // The whole set with non-existent left proof + {-1, -1, false}, // The whole set with non-existent left/right proof + } + for _, c := range cases { + var ( + firstKey []byte + lastKey []byte + start = c.start + end = c.end + proof = memorydb.New() + ) + if c.start == -1 { + firstKey, start = common.Hash{}.Bytes(), 0 + if err := trie.Prove(firstKey, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + } else { + firstKey = entries[c.start].k + if err := trie.Prove(entries[c.start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + } + if c.end == -1 { + lastKey, end = common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").Bytes(), len(entries) + if err := trie.Prove(lastKey, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + } else { + lastKey = entries[c.end-1].k + if err := trie.Prove(entries[c.end-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + } + k := make([][]byte, 0) + v := make([][]byte, 0) + for i := start; i < end; i++ { + k = append(k, entries[i].k) + v = append(v, entries[i].v) + } + hasMore, err := VerifyRangeProof(trie.Hash(), firstKey, lastKey, k, v, proof) + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + if hasMore != c.hasMore { + t.Fatalf("Wrong hasMore indicator, want %t, got %t", c.hasMore, hasMore) + } + } +} + +// TestEmptyRangeProof tests the range proof with "no" element. +// The first edge proof must be a non-existent proof. +func TestEmptyRangeProof(t *testing.T) { + trie, vals := randomTrie(4096) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + var cases = []struct { + pos int + err bool + }{ + {len(entries) - 1, false}, + {500, true}, + } + for _, c := range cases { + proof := memorydb.New() + first := increaseKey(common.CopyBytes(entries[c.pos].k)) + if err := trie.Prove(first, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + _, err := VerifyRangeProof(trie.Hash(), first, nil, nil, nil, proof) + if c.err && err == nil { + t.Fatalf("Expected error, got nil") + } + if !c.err && err != nil { + t.Fatalf("Expected no error, got %v", err) + } + } +} + +// TestBloatedProof tests a malicious proof, where the proof is more or less the +// whole trie. Previously we didn't accept such packets, but the new APIs do, so +// lets leave this test as a bit weird, but present. +func TestBloatedProof(t *testing.T) { + // Use a small trie + trie, kvs := nonRandomTrie(100) + var entries entrySlice + for _, kv := range kvs { + entries = append(entries, kv) + } + sort.Sort(entries) + var keys [][]byte + var vals [][]byte + + proof := memorydb.New() + // In the 'malicious' case, we add proofs for every single item + // (but only one key/value pair used as leaf) + for i, entry := range entries { + trie.Prove(entry.k, 0, proof) + if i == 50 { + keys = append(keys, entry.k) + vals = append(vals, entry.v) + } + } + // For reference, we use the same function, but _only_ prove the first + // and last element + want := memorydb.New() + trie.Prove(keys[0], 0, want) + trie.Prove(keys[len(keys)-1], 0, want) + + if _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, vals, proof); err != nil { + t.Fatalf("expected bloated proof to succeed, got %v", err) + } +} + +// TestEmptyValueRangeProof tests normal range proof with both edge proofs +// as the existent proof, but with an extra empty value included, which is a +// noop technically, but practically should be rejected. +func TestEmptyValueRangeProof(t *testing.T) { + trie, values := randomTrie(512) + var entries entrySlice + for _, kv := range values { + entries = append(entries, kv) + } + sort.Sort(entries) + + // Create a new entry with a slightly modified key + mid := len(entries) / 2 + key := common.CopyBytes(entries[mid-1].k) + for n := len(key) - 1; n >= 0; n-- { + if key[n] < 0xff { + key[n]++ + break + } + } + noop := &kv{key, []byte{}, false} + entries = append(append(append([]*kv{}, entries[:mid]...), noop), entries[mid:]...) + + start, end := 1, len(entries)-1 + + proof := memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[end-1].k, 0, proof); err != nil { + t.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var vals [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, vals, proof) + if err == nil { + t.Fatalf("Expected failure on noop entry") + } +} + +// TestAllElementsEmptyValueRangeProof tests the range proof with all elements, +// but with an extra empty value included, which is a noop technically, but +// practically should be rejected. +func TestAllElementsEmptyValueRangeProof(t *testing.T) { + trie, values := randomTrie(512) + var entries entrySlice + for _, kv := range values { + entries = append(entries, kv) + } + sort.Sort(entries) + + // Create a new entry with a slightly modified key + mid := len(entries) / 2 + key := common.CopyBytes(entries[mid-1].k) + for n := len(key) - 1; n >= 0; n-- { + if key[n] < 0xff { + key[n]++ + break + } + } + noop := &kv{key, []byte{}, false} + entries = append(append(append([]*kv{}, entries[:mid]...), noop), entries[mid:]...) + + var keys [][]byte + var vals [][]byte + for i := 0; i < len(entries); i++ { + keys = append(keys, entries[i].k) + vals = append(vals, entries[i].v) + } + _, err := VerifyRangeProof(trie.Hash(), nil, nil, keys, vals, nil) + if err == nil { + t.Fatalf("Expected failure on noop entry") + } +} + // mutateByte changes one byte in b. func mutateByte(b []byte) { for r := mrand.Intn(len(b)); ; { @@ -159,6 +904,26 @@ func mutateByte(b []byte) { } } +func increaseKey(key []byte) []byte { + for i := len(key) - 1; i >= 0; i-- { + key[i]++ + if key[i] != 0x0 { + break + } + } + return key +} + +func decreaseKey(key []byte) []byte { + for i := len(key) - 1; i >= 0; i-- { + key[i]-- + if key[i] != 0xff { + break + } + } + return key +} + func BenchmarkProve(b *testing.B) { trie, vals := randomTrie(100) var keys []string @@ -191,14 +956,79 @@ func BenchmarkVerifyProof(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { im := i % len(keys) - if _, _, err := VerifyProof(root, []byte(keys[im]), proofs[im]); err != nil { + if _, err := VerifyProof(root, []byte(keys[im]), proofs[im]); err != nil { b.Fatalf("key %x: %v", keys[im], err) } } } +func BenchmarkVerifyRangeProof10(b *testing.B) { benchmarkVerifyRangeProof(b, 10) } +func BenchmarkVerifyRangeProof100(b *testing.B) { benchmarkVerifyRangeProof(b, 100) } +func BenchmarkVerifyRangeProof1000(b *testing.B) { benchmarkVerifyRangeProof(b, 1000) } +func BenchmarkVerifyRangeProof5000(b *testing.B) { benchmarkVerifyRangeProof(b, 5000) } + +func benchmarkVerifyRangeProof(b *testing.B, size int) { + trie, vals := randomTrie(8192) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + start := 2 + end := start + size + proof := memorydb.New() + if err := trie.Prove(entries[start].k, 0, proof); err != nil { + b.Fatalf("Failed to prove the first node %v", err) + } + if err := trie.Prove(entries[end-1].k, 0, proof); err != nil { + b.Fatalf("Failed to prove the last node %v", err) + } + var keys [][]byte + var values [][]byte + for i := start; i < end; i++ { + keys = append(keys, entries[i].k) + values = append(values, entries[i].v) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, values, proof) + if err != nil { + b.Fatalf("Case %d(%d->%d) expect no error, got %v", i, start, end-1, err) + } + } +} + +func BenchmarkVerifyRangeNoProof10(b *testing.B) { benchmarkVerifyRangeNoProof(b, 100) } +func BenchmarkVerifyRangeNoProof500(b *testing.B) { benchmarkVerifyRangeNoProof(b, 500) } +func BenchmarkVerifyRangeNoProof1000(b *testing.B) { benchmarkVerifyRangeNoProof(b, 1000) } + +func benchmarkVerifyRangeNoProof(b *testing.B, size int) { + trie, vals := randomTrie(size) + var entries entrySlice + for _, kv := range vals { + entries = append(entries, kv) + } + sort.Sort(entries) + + var keys [][]byte + var values [][]byte + for _, entry := range entries { + keys = append(keys, entry.k) + values = append(values, entry.v) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := VerifyRangeProof(trie.Hash(), keys[0], keys[len(keys)-1], keys, values, nil) + if err != nil { + b.Fatalf("Expected no error, got %v", err) + } + } +} + func randomTrie(n int) (*Trie, map[string]*kv) { - trie := new(Trie) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) vals := make(map[string]*kv) for i := byte(0); i < 100; i++ { value := &kv{common.LeftPadBytes([]byte{i}, 32), []byte{i}, false} @@ -221,3 +1051,53 @@ func randBytes(n int) []byte { crand.Read(r) return r } + +func nonRandomTrie(n int) (*Trie, map[string]*kv) { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + vals := make(map[string]*kv) + max := uint64(0xffffffffffffffff) + for i := uint64(0); i < uint64(n); i++ { + value := make([]byte, 32) + key := make([]byte, 32) + binary.LittleEndian.PutUint64(key, i) + binary.LittleEndian.PutUint64(value, i-max) + //value := &kv{common.LeftPadBytes([]byte{i}, 32), []byte{i}, false} + elem := &kv{key, value, false} + trie.Update(elem.k, elem.v) + vals[string(elem.k)] = elem + } + return trie, vals +} + +func TestRangeProofKeysWithSharedPrefix(t *testing.T) { + keys := [][]byte{ + common.Hex2Bytes("aa10000000000000000000000000000000000000000000000000000000000000"), + common.Hex2Bytes("aa20000000000000000000000000000000000000000000000000000000000000"), + } + vals := [][]byte{ + common.Hex2Bytes("02"), + common.Hex2Bytes("03"), + } + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + for i, key := range keys { + trie.Update(key, vals[i]) + } + root := trie.Hash() + proof := memorydb.New() + start := common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000000") + end := common.Hex2Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + if err := trie.Prove(start, 0, proof); err != nil { + t.Fatalf("failed to prove start: %v", err) + } + if err := trie.Prove(end, 0, proof); err != nil { + t.Fatalf("failed to prove end: %v", err) + } + + more, err := VerifyRangeProof(root, start, end, keys, vals, proof) + if err != nil { + t.Fatalf("failed to verify range proof: %v", err) + } + if more != false { + t.Error("expected more to be false") + } +} diff --git a/trie/secure_trie.go b/trie/secure_trie.go index 5fb17f3d..db44d053 100644 --- a/trie/secure_trie.go +++ b/trie/secure_trie.go @@ -19,52 +19,59 @@ package trie import ( "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" ) -// SecureTrie wraps a trie with key hashing. In a secure trie, all +// SecureTrie is the old name of StateTrie. +// Deprecated: use StateTrie. +type SecureTrie = StateTrie + +// NewSecure creates a new StateTrie. +// Deprecated: use NewStateTrie. +func NewSecure(owner common.Hash, root common.Hash, db *Database) (*SecureTrie, error) { + return NewStateTrie(owner, root, db) +} + +// StateTrie wraps a trie with key hashing. In a stateTrie trie, all // access operations hash the key using keccak256. This prevents // calling code from creating long chains of nodes that // increase the access time. // -// Contrary to a regular trie, a SecureTrie can only be created with +// Contrary to a regular trie, a StateTrie can only be created with // New and must have an attached database. The database also stores -// the preimage of each key. +// the preimage of each key if preimage recording is enabled. // -// SecureTrie is not safe for concurrent use. -type SecureTrie struct { +// StateTrie is not safe for concurrent use. +type StateTrie struct { trie Trie + preimages *preimageStore hashKeyBuf [common.HashLength]byte secKeyCache map[string][]byte - secKeyCacheOwner *SecureTrie // Pointer to self, replace the key cache on mismatch + secKeyCacheOwner *StateTrie // Pointer to self, replace the key cache on mismatch } -// NewSecure creates a trie with an existing root node from a backing database -// and optional intermediate in-memory node pool. +// NewStateTrie creates a trie with an existing root node from a backing database. // // If root is the zero hash or the sha3 hash of an empty string, the // trie is initially empty. Otherwise, New will panic if db is nil // and returns MissingNodeError if the root node cannot be found. -// -// Accessing the trie loads nodes from the database or node pool on demand. -// 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) (*SecureTrie, error) { +func NewStateTrie(owner common.Hash, root common.Hash, db *Database) (*StateTrie, error) { if db == nil { panic("trie.NewSecure called without a database") } - trie, err := New(root, db) + trie, err := New(owner, root, db) if err != nil { return nil, err } - return &SecureTrie{trie: *trie}, nil + return &StateTrie{trie: *trie, preimages: db.preimages}, nil } // Get returns the value for key stored in the trie. // The value bytes must not be modified by the caller. -func (t *SecureTrie) Get(key []byte) []byte { +func (t *StateTrie) Get(key []byte) []byte { res, err := t.TryGet(key) if err != nil { log.Error(fmt.Sprintf("Unhandled trie error: %v", err)) @@ -74,18 +81,53 @@ func (t *SecureTrie) Get(key []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 MissingNodeError is returned. -func (t *SecureTrie) TryGet(key []byte) ([]byte, error) { +// If the specified node is not in the trie, nil will be returned. +// If a trie node is not found in the database, a MissingNodeError is returned. +func (t *StateTrie) TryGet(key []byte) ([]byte, error) { return t.trie.TryGet(t.hashKey(key)) } +// TryGetAccount attempts to retrieve an account with provided trie path. +// If the specified account is not in the trie, nil will be returned. +// If a trie node is not found in the database, a MissingNodeError is returned. +func (t *StateTrie) TryGetAccount(key []byte) (*types.StateAccount, error) { + res, err := t.trie.TryGet(t.hashKey(key)) + if res == nil || err != nil { + return nil, err + } + ret := new(types.StateAccount) + err = rlp.DecodeBytes(res, ret) + return ret, err +} + +// TryGetAccountWithPreHashedKey does the same thing as TryGetAccount, however +// it expects a key that is already hashed. This constitutes an abstraction leak, +// since the client code needs to know the key format. +func (t *StateTrie) TryGetAccountWithPreHashedKey(key []byte) (*types.StateAccount, error) { + res, err := t.trie.TryGet(key) + if res == nil || err != nil { + return nil, err + } + ret := new(types.StateAccount) + err = rlp.DecodeBytes(res, ret) + return ret, err +} + +// TryGetNode attempts to retrieve a trie node by compact-encoded path. It is not +// possible to use keybyte-encoding as the path might contain odd nibbles. +// If the specified trie node is not in the trie, nil will be returned. +// If a trie node is not found in the database, a MissingNodeError is returned. +func (t *StateTrie) TryGetNode(path []byte) ([]byte, int, error) { + return t.trie.TryGetNode(path) +} + // Update associates key with value in the trie. Subsequent calls to // Get will return value. If value has length zero, any existing value // is deleted from the trie and calls to Get will return nil. // // The value bytes must not be modified by the caller while they are // stored in the trie. -func (t *SecureTrie) Update(key, value []byte) { +func (t *StateTrie) Update(key, value []byte) { if err := t.TryUpdate(key, value); err != nil { log.Error(fmt.Sprintf("Unhandled trie error: %v", err)) } @@ -98,8 +140,8 @@ func (t *SecureTrie) Update(key, value []byte) { // 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 MissingNodeError is returned. -func (t *SecureTrie) TryUpdate(key, value []byte) error { +// If a node is not found in the database, a MissingNodeError is returned. +func (t *StateTrie) TryUpdate(key, value []byte) error { hk := t.hashKey(key) err := t.trie.TryUpdate(hk, value) if err != nil { @@ -109,16 +151,39 @@ func (t *SecureTrie) TryUpdate(key, value []byte) error { return nil } +// TryUpdateAccount account will abstract the write of an account to the +// secure trie. +func (t *StateTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error { + hk := t.hashKey(key) + data, err := rlp.EncodeToBytes(acc) + if err != nil { + return err + } + if err := t.trie.TryUpdate(hk, data); err != nil { + return err + } + t.getSecKeyCache()[string(hk)] = common.CopyBytes(key) + return nil +} + // Delete removes any existing value for key from the trie. -func (t *SecureTrie) Delete(key []byte) { +func (t *StateTrie) Delete(key []byte) { if err := t.TryDelete(key); err != nil { log.Error(fmt.Sprintf("Unhandled trie error: %v", err)) } } // TryDelete removes any existing value for key from the trie. -// If a node was not found in the database, a MissingNodeError is returned. -func (t *SecureTrie) TryDelete(key []byte) error { +// If the specified trie node is not in the trie, nothing will be changed. +// If a node is not found in the database, a MissingNodeError is returned. +func (t *StateTrie) TryDelete(key []byte) error { + hk := t.hashKey(key) + delete(t.getSecKeyCache(), string(hk)) + return t.trie.TryDelete(hk) +} + +// TryDeleteAccount abstracts an account deletion from the trie. +func (t *StateTrie) TryDeleteAccount(key []byte) error { hk := t.hashKey(key) delete(t.getSecKeyCache(), string(hk)) return t.trie.TryDelete(hk) @@ -126,68 +191,76 @@ func (t *SecureTrie) TryDelete(key []byte) error { // GetKey returns the sha3 preimage of a hashed key that was // previously used to store a value. -func (t *SecureTrie) GetKey(shaKey []byte) []byte { +func (t *StateTrie) GetKey(shaKey []byte) []byte { if key, ok := t.getSecKeyCache()[string(shaKey)]; ok { return key } - key, _ := t.trie.db.preimage(common.BytesToHash(shaKey)) - return key + if t.preimages == nil { + return nil + } + return t.preimages.preimage(common.BytesToHash(shaKey)) } -// Commit writes all nodes and the secure hash pre-images to the trie's database. -// Nodes are stored with their sha3 hash as the key. -// -// Committing flushes nodes from memory. Subsequent Get calls will load nodes -// from the database. -func (t *SecureTrie) Commit(onleaf LeafCallback) (root common.Hash, err error) { +// Commit collects all dirty nodes in the trie and replace them with the +// corresponding node hash. All collected nodes(including dirty leaves if +// collectLeaf is true) will be encapsulated into a nodeset for return. +// The returned nodeset can be nil if the trie is clean(nothing to commit). +// All cached preimages will be also flushed if preimages recording is enabled. +// Once the trie is committed, it's not usable anymore. A new trie must +// be created with new root and updated trie database for following usage +func (t *StateTrie) Commit(collectLeaf bool) (common.Hash, *NodeSet, error) { // Write all the pre-images to the actual disk database if len(t.getSecKeyCache()) > 0 { - t.trie.db.lock.Lock() - for hk, key := range t.secKeyCache { - t.trie.db.insertPreimage(common.BytesToHash([]byte(hk)), key) + if t.preimages != nil { + preimages := make(map[common.Hash][]byte) + for hk, key := range t.secKeyCache { + preimages[common.BytesToHash([]byte(hk))] = key + } + t.preimages.insertPreimage(preimages) } - t.trie.db.lock.Unlock() - t.secKeyCache = make(map[string][]byte) } // Commit the trie to its intermediate node database - return t.trie.Commit(onleaf) + return t.trie.Commit(collectLeaf) } -// Hash returns the root hash of SecureTrie. It does not write to the +// Hash returns the root hash of StateTrie. It does not write to the // database and can be used even if the trie doesn't have one. -func (t *SecureTrie) Hash() common.Hash { +func (t *StateTrie) Hash() common.Hash { return t.trie.Hash() } -// Copy returns a copy of SecureTrie. -func (t *SecureTrie) Copy() *SecureTrie { - cpy := *t - return &cpy +// Copy returns a copy of StateTrie. +func (t *StateTrie) Copy() *StateTrie { + return &StateTrie{ + trie: *t.trie.Copy(), + preimages: t.preimages, + secKeyCache: t.secKeyCache, + } } // NodeIterator returns an iterator that returns nodes of the underlying trie. Iteration // starts at the key after the given start key. -func (t *SecureTrie) NodeIterator(start []byte) NodeIterator { +func (t *StateTrie) NodeIterator(start []byte) NodeIterator { return t.trie.NodeIterator(start) } // hashKey returns the hash of key as an ephemeral buffer. // 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(nil) +func (t *StateTrie) hashKey(key []byte) []byte { + h := newHasher(false) h.sha.Reset() h.sha.Write(key) - buf := h.sha.Sum(t.hashKeyBuf[:0]) + h.sha.Read(t.hashKeyBuf[:]) returnHasherToPool(h) - return buf + return t.hashKeyBuf[:] } // getSecKeyCache returns the current secure key cache, creating a new one if // ownership changed (i.e. the current secure trie is a copy of another owning // the actual cache). -func (t *SecureTrie) getSecKeyCache() map[string][]byte { +func (t *StateTrie) getSecKeyCache() map[string][]byte { if t != t.secKeyCacheOwner { t.secKeyCacheOwner = t t.secKeyCache = make(map[string][]byte) diff --git a/trie/secure_trie_test.go b/trie/secure_trie_test.go index 419ac53b..862c3a3e 100644 --- a/trie/secure_trie_test.go +++ b/trie/secure_trie_test.go @@ -18,25 +18,26 @@ package trie import ( "bytes" + "fmt" "runtime" "sync" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) -func newEmptySecure() *SecureTrie { - trie, _ := NewSecure(common.Hash{}, NewDatabase(memorydb.New())) +func newEmptySecure() *StateTrie { + trie, _ := NewStateTrie(common.Hash{}, common.Hash{}, NewDatabase(memorydb.New())) return trie } -// makeTestSecureTrie creates a large enough secure trie for testing. -func makeTestSecureTrie() (*Database, *SecureTrie, map[string][]byte) { +// makeTestStateTrie creates a large enough secure trie for testing. +func makeTestStateTrie() (*Database, *StateTrie, map[string][]byte) { // Create an empty trie triedb := NewDatabase(memorydb.New()) - trie, _ := NewSecure(common.Hash{}, triedb) + trie, _ := NewStateTrie(common.Hash{}, common.Hash{}, triedb) // Fill it with some arbitrary data content := make(map[string][]byte) @@ -57,9 +58,15 @@ func makeTestSecureTrie() (*Database, *SecureTrie, map[string][]byte) { trie.Update(key, val) } } - trie.Commit(nil) - - // Return the generated trie + root, nodes, err := trie.Commit(false) + if err != nil { + panic(fmt.Errorf("failed to commit trie %v", err)) + } + if err := triedb.Update(NewWithNodeSet(nodes)); err != nil { + panic(fmt.Errorf("failed to commit db %v", err)) + } + // Re-create the trie based on the new state + trie, _ = NewSecure(common.Hash{}, root, triedb) return triedb, trie, content } @@ -105,17 +112,16 @@ func TestSecureGetKey(t *testing.T) { } } -func TestSecureTrieConcurrency(t *testing.T) { +func TestStateTrieConcurrency(t *testing.T) { // Create an initial trie and copy if for concurrent access - _, trie, _ := makeTestSecureTrie() + _, trie, _ := makeTestStateTrie() threads := runtime.NumCPU() - tries := make([]*SecureTrie, threads) + tries := make([]*StateTrie, threads) for i := 0; i < threads; i++ { - cpy := *trie - tries[i] = &cpy + tries[i] = trie.Copy() } - // Start a batch of goroutines interactng with the trie + // Start a batch of goroutines interacting with the trie pend := new(sync.WaitGroup) pend.Add(threads) for i := 0; i < threads; i++ { @@ -136,7 +142,7 @@ func TestSecureTrieConcurrency(t *testing.T) { tries[index].Update(key, val) } } - tries[index].Commit(nil) + tries[index].Commit(false) }(i) } // Wait for all threads to finish diff --git a/trie/stacktrie.go b/trie/stacktrie.go new file mode 100644 index 00000000..a22fa0dd --- /dev/null +++ b/trie/stacktrie.go @@ -0,0 +1,526 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bufio" + "bytes" + "encoding/gob" + "errors" + "fmt" + "io" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +var ErrCommitDisabled = errors.New("no database for committing") + +var stPool = sync.Pool{ + New: func() interface{} { + return NewStackTrie(nil) + }, +} + +func stackTrieFromPool(db ethdb.KeyValueWriter, owner common.Hash) *StackTrie { + st := stPool.Get().(*StackTrie) + st.db = db + st.owner = owner + return st +} + +func returnToPool(st *StackTrie) { + st.Reset() + stPool.Put(st) +} + +// StackTrie is a trie implementation that expects keys to be inserted +// in order. Once it determines that a subtree will no longer be inserted +// into, it will hash it and free up the memory it uses. +type StackTrie struct { + owner common.Hash // the owner of the trie + nodeType uint8 // node type (as in branch, ext, leaf) + val []byte // value contained by this node if it's a leaf + key []byte // key chunk covered by this (leaf|ext) node + children [16]*StackTrie // list of children (for branch and exts) + db ethdb.KeyValueWriter // Pointer to the commit db, can be nil +} + +// NewStackTrie allocates and initializes an empty trie. +func NewStackTrie(db ethdb.KeyValueWriter) *StackTrie { + return &StackTrie{ + nodeType: emptyNode, + db: db, + } +} + +// NewStackTrieWithOwner allocates and initializes an empty trie, but with +// the additional owner field. +func NewStackTrieWithOwner(db ethdb.KeyValueWriter, owner common.Hash) *StackTrie { + return &StackTrie{ + owner: owner, + nodeType: emptyNode, + db: db, + } +} + +// NewFromBinary initialises a serialized stacktrie with the given db. +func NewFromBinary(data []byte, db ethdb.KeyValueWriter) (*StackTrie, error) { + var st StackTrie + if err := st.UnmarshalBinary(data); err != nil { + return nil, err + } + // If a database is used, we need to recursively add it to every child + if db != nil { + st.setDb(db) + } + return &st, nil +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (st *StackTrie) MarshalBinary() (data []byte, err error) { + var ( + b bytes.Buffer + w = bufio.NewWriter(&b) + ) + if err := gob.NewEncoder(w).Encode(struct { + Owner common.Hash + NodeType uint8 + Val []byte + Key []byte + }{ + st.owner, + st.nodeType, + st.val, + st.key, + }); err != nil { + return nil, err + } + for _, child := range st.children { + if child == nil { + w.WriteByte(0) + continue + } + w.WriteByte(1) + if childData, err := child.MarshalBinary(); err != nil { + return nil, err + } else { + w.Write(childData) + } + } + w.Flush() + return b.Bytes(), nil +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (st *StackTrie) UnmarshalBinary(data []byte) error { + r := bytes.NewReader(data) + return st.unmarshalBinary(r) +} + +func (st *StackTrie) unmarshalBinary(r io.Reader) error { + var dec struct { + Owner common.Hash + NodeType uint8 + Val []byte + Key []byte + } + gob.NewDecoder(r).Decode(&dec) + st.owner = dec.Owner + st.nodeType = dec.NodeType + st.val = dec.Val + st.key = dec.Key + + var hasChild = make([]byte, 1) + for i := range st.children { + if _, err := r.Read(hasChild); err != nil { + return err + } else if hasChild[0] == 0 { + continue + } + var child StackTrie + child.unmarshalBinary(r) + st.children[i] = &child + } + return nil +} + +func (st *StackTrie) setDb(db ethdb.KeyValueWriter) { + st.db = db + for _, child := range st.children { + if child != nil { + child.setDb(db) + } + } +} + +func newLeaf(owner common.Hash, key, val []byte, db ethdb.KeyValueWriter) *StackTrie { + st := stackTrieFromPool(db, owner) + st.nodeType = leafNode + st.key = append(st.key, key...) + st.val = val + return st +} + +func newExt(owner common.Hash, key []byte, child *StackTrie, db ethdb.KeyValueWriter) *StackTrie { + st := stackTrieFromPool(db, owner) + st.nodeType = extNode + st.key = append(st.key, key...) + st.children[0] = child + return st +} + +// List all values that StackTrie#nodeType can hold +const ( + emptyNode = iota + branchNode + extNode + leafNode + hashedNode +) + +// TryUpdate inserts a (key, value) pair into the stack trie +func (st *StackTrie) TryUpdate(key, value []byte) error { + k := keybytesToHex(key) + if len(value) == 0 { + panic("deletion not supported") + } + st.insert(k[:len(k)-1], value) + return nil +} + +func (st *StackTrie) Update(key, value []byte) { + if err := st.TryUpdate(key, value); err != nil { + log.Error(fmt.Sprintf("Unhandled trie error: %v", err)) + } +} + +func (st *StackTrie) Reset() { + st.owner = common.Hash{} + st.db = nil + st.key = st.key[:0] + st.val = nil + for i := range st.children { + st.children[i] = nil + } + st.nodeType = emptyNode +} + +// Helper function that, given a full key, determines the index +// at which the chunk pointed by st.keyOffset is different from +// the same chunk in the full key. +func (st *StackTrie) getDiffIndex(key []byte) int { + for idx, nibble := range st.key { + if nibble != key[idx] { + return idx + } + } + return len(st.key) +} + +// Helper function to that inserts a (key, value) pair into +// the trie. +func (st *StackTrie) insert(key, value []byte) { + switch st.nodeType { + case branchNode: /* Branch */ + idx := int(key[0]) + + // Unresolve elder siblings + for i := idx - 1; i >= 0; i-- { + if st.children[i] != nil { + if st.children[i].nodeType != hashedNode { + st.children[i].hash() + } + break + } + } + + // Add new child + if st.children[idx] == nil { + st.children[idx] = newLeaf(st.owner, key[1:], value, st.db) + } else { + st.children[idx].insert(key[1:], value) + } + + case extNode: /* Ext */ + // Compare both key chunks and see where they differ + diffidx := st.getDiffIndex(key) + + // Check if chunks are identical. If so, recurse into + // the child node. Otherwise, the key has to be split + // into 1) an optional common prefix, 2) the fullnode + // representing the two differing path, and 3) a leaf + // for each of the differentiated subtrees. + if diffidx == len(st.key) { + // Ext key and key segment are identical, recurse into + // the child node. + st.children[0].insert(key[diffidx:], value) + return + } + // Save the original part. Depending if the break is + // at the extension's last byte or not, create an + // intermediate extension or use the extension's child + // node directly. + var n *StackTrie + if diffidx < len(st.key)-1 { + n = newExt(st.owner, st.key[diffidx+1:], st.children[0], st.db) + } else { + // Break on the last byte, no need to insert + // an extension node: reuse the current node + n = st.children[0] + } + // Convert to hash + n.hash() + var p *StackTrie + if diffidx == 0 { + // the break is on the first byte, so + // the current node is converted into + // a branch node. + st.children[0] = nil + p = st + st.nodeType = branchNode + } else { + // the common prefix is at least one byte + // long, insert a new intermediate branch + // node. + st.children[0] = stackTrieFromPool(st.db, st.owner) + st.children[0].nodeType = branchNode + p = st.children[0] + } + // Create a leaf for the inserted part + o := newLeaf(st.owner, key[diffidx+1:], value, st.db) + + // Insert both child leaves where they belong: + origIdx := st.key[diffidx] + newIdx := key[diffidx] + p.children[origIdx] = n + p.children[newIdx] = o + st.key = st.key[:diffidx] + + case leafNode: /* Leaf */ + // Compare both key chunks and see where they differ + diffidx := st.getDiffIndex(key) + + // Overwriting a key isn't supported, which means that + // the current leaf is expected to be split into 1) an + // optional extension for the common prefix of these 2 + // keys, 2) a fullnode selecting the path on which the + // keys differ, and 3) one leaf for the differentiated + // component of each key. + if diffidx >= len(st.key) { + panic("Trying to insert into existing key") + } + + // Check if the split occurs at the first nibble of the + // chunk. In that case, no prefix extnode is necessary. + // Otherwise, create that + var p *StackTrie + if diffidx == 0 { + // Convert current leaf into a branch + st.nodeType = branchNode + p = st + st.children[0] = nil + } else { + // Convert current node into an ext, + // and insert a child branch node. + st.nodeType = extNode + st.children[0] = NewStackTrieWithOwner(st.db, st.owner) + st.children[0].nodeType = branchNode + p = st.children[0] + } + + // Create the two child leaves: one containing the original + // value and another containing the new value. The child leaf + // is hashed directly in order to free up some memory. + origIdx := st.key[diffidx] + p.children[origIdx] = newLeaf(st.owner, st.key[diffidx+1:], st.val, st.db) + p.children[origIdx].hash() + + newIdx := key[diffidx] + p.children[newIdx] = newLeaf(st.owner, key[diffidx+1:], value, st.db) + + // Finally, cut off the key part that has been passed + // over to the children. + st.key = st.key[:diffidx] + st.val = nil + + case emptyNode: /* Empty */ + st.nodeType = leafNode + st.key = key + st.val = value + + case hashedNode: + panic("trying to insert into hash") + + default: + panic("invalid type") + } +} + +// hash converts st into a 'hashedNode', if possible. Possible outcomes: +// +// 1. The rlp-encoded value was >= 32 bytes: +// - Then the 32-byte `hash` will be accessible in `st.val`. +// - And the 'st.type' will be 'hashedNode' +// 2. The rlp-encoded value was < 32 bytes +// - Then the <32 byte rlp-encoded value will be accessible in 'st.val'. +// - And the 'st.type' will be 'hashedNode' AGAIN +// +// This method also sets 'st.type' to hashedNode, and clears 'st.key'. +func (st *StackTrie) hash() { + h := newHasher(false) + defer returnHasherToPool(h) + + st.hashRec(h) +} + +func (st *StackTrie) hashRec(hasher *hasher) { + // The switch below sets this to the RLP-encoding of this node. + var encodedNode []byte + + switch st.nodeType { + case hashedNode: + return + + case emptyNode: + st.val = emptyRoot.Bytes() + st.key = st.key[:0] + st.nodeType = hashedNode + return + + case branchNode: + var nodes rawFullNode + for i, child := range st.children { + if child == nil { + nodes[i] = nilValueNode + continue + } + + child.hashRec(hasher) + if len(child.val) < 32 { + nodes[i] = rawNode(child.val) + } else { + nodes[i] = hashNode(child.val) + } + + // Release child back to pool. + st.children[i] = nil + returnToPool(child) + } + + nodes.encode(hasher.encbuf) + encodedNode = hasher.encodedBytes() + + case extNode: + st.children[0].hashRec(hasher) + + sz := hexToCompactInPlace(st.key) + n := rawShortNode{Key: st.key[:sz]} + if len(st.children[0].val) < 32 { + n.Val = rawNode(st.children[0].val) + } else { + n.Val = hashNode(st.children[0].val) + } + + n.encode(hasher.encbuf) + encodedNode = hasher.encodedBytes() + + // Release child back to pool. + returnToPool(st.children[0]) + st.children[0] = nil + + case leafNode: + st.key = append(st.key, byte(16)) + sz := hexToCompactInPlace(st.key) + n := rawShortNode{Key: st.key[:sz], Val: valueNode(st.val)} + + n.encode(hasher.encbuf) + encodedNode = hasher.encodedBytes() + + default: + panic("invalid node type") + } + + st.nodeType = hashedNode + st.key = st.key[:0] + if len(encodedNode) < 32 { + st.val = common.CopyBytes(encodedNode) + return + } + + // Write the hash to the 'val'. We allocate a new val here to not mutate + // input values + st.val = hasher.hashData(encodedNode) + if st.db != nil { + // TODO! Is it safe to Put the slice here? + // Do all db implementations copy the value provided? + st.db.Put(st.val, encodedNode) + } +} + +// Hash returns the hash of the current node. +func (st *StackTrie) Hash() (h common.Hash) { + hasher := newHasher(false) + defer returnHasherToPool(hasher) + + st.hashRec(hasher) + if len(st.val) == 32 { + copy(h[:], st.val) + return h + } + + // If the node's RLP isn't 32 bytes long, the node will not + // be hashed, and instead contain the rlp-encoding of the + // node. For the top level node, we need to force the hashing. + hasher.sha.Reset() + hasher.sha.Write(st.val) + hasher.sha.Read(h[:]) + return h +} + +// Commit will firstly hash the entrie trie if it's still not hashed +// and then commit all nodes to the associated database. Actually most +// of the trie nodes MAY have been committed already. The main purpose +// here is to commit the root node. +// +// The associated database is expected, otherwise the whole commit +// functionality should be disabled. +func (st *StackTrie) Commit() (h common.Hash, err error) { + if st.db == nil { + return common.Hash{}, ErrCommitDisabled + } + + hasher := newHasher(false) + defer returnHasherToPool(hasher) + + st.hashRec(hasher) + if len(st.val) == 32 { + copy(h[:], st.val) + return h, nil + } + + // If the node's RLP isn't 32 bytes long, the node will not + // be hashed (and committed), and instead contain the rlp-encoding of the + // node. For the top level node, we need to force the hashing+commit. + hasher.sha.Reset() + hasher.sha.Write(st.val) + hasher.sha.Read(h[:]) + st.db.Put(h[:], st.val) + return h, nil +} diff --git a/trie/stacktrie_test.go b/trie/stacktrie_test.go new file mode 100644 index 00000000..069e4981 --- /dev/null +++ b/trie/stacktrie_test.go @@ -0,0 +1,394 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 ( + "bytes" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb/memorydb" +) + +func TestStackTrieInsertAndHash(t *testing.T) { + type KeyValueHash struct { + K string // Hex string for key. + V string // Value, directly converted to bytes. + H string // Expected root hash after insert of (K, V) to an existing trie. + } + tests := [][]KeyValueHash{ + { // {0:0, 7:0, f:0} + {"00", "v_______________________0___0", "5cb26357b95bb9af08475be00243ceb68ade0b66b5cd816b0c18a18c612d2d21"}, + {"70", "v_______________________0___1", "8ff64309574f7a437a7ad1628e690eb7663cfde10676f8a904a8c8291dbc1603"}, + {"f0", "v_______________________0___2", "9e3a01bd8d43efb8e9d4b5506648150b8e3ed1caea596f84ee28e01a72635470"}, + }, + { // {1:0cc, e:{1:fc, e:fc}} + {"10cc", "v_______________________1___0", "233e9b257843f3dfdb1cce6676cdaf9e595ac96ee1b55031434d852bc7ac9185"}, + {"e1fc", "v_______________________1___1", "39c5e908ae83d0c78520c7c7bda0b3782daf594700e44546e93def8f049cca95"}, + {"eefc", "v_______________________1___2", "d789567559fd76fe5b7d9cc42f3750f942502ac1c7f2a466e2f690ec4b6c2a7c"}, + }, + { // {b:{a:ac, b:ac}, d:acc} + {"baac", "v_______________________2___0", "8be1c86ba7ec4c61e14c1a9b75055e0464c2633ae66a055a24e75450156a5d42"}, + {"bbac", "v_______________________2___1", "8495159b9895a7d88d973171d737c0aace6fe6ac02a4769fff1bc43bcccce4cc"}, + {"dacc", "v_______________________2___2", "9bcfc5b220a27328deb9dc6ee2e3d46c9ebc9c69e78acda1fa2c7040602c63ca"}, + }, + { // {0:0cccc, 2:456{0:0, 2:2} + {"00cccc", "v_______________________3___0", "e57dc2785b99ce9205080cb41b32ebea7ac3e158952b44c87d186e6d190a6530"}, + {"245600", "v_______________________3___1", "0335354adbd360a45c1871a842452287721b64b4234dfe08760b243523c998db"}, + {"245622", "v_______________________3___2", "9e6832db0dca2b5cf81c0e0727bfde6afc39d5de33e5720bccacc183c162104e"}, + }, + { // {1:4567{1:1c, 3:3c}, 3:0cccccc} + {"1456711c", "v_______________________4___0", "f2389e78d98fed99f3e63d6d1623c1d4d9e8c91cb1d585de81fbc7c0e60d3529"}, + {"1456733c", "v_______________________4___1", "101189b3fab852be97a0120c03d95eefcf984d3ed639f2328527de6def55a9c0"}, + {"30cccccc", "v_______________________4___2", "3780ce111f98d15751dfde1eb21080efc7d3914b429e5c84c64db637c55405b3"}, + }, + { // 8800{1:f, 2:e, 3:d} + {"88001f", "v_______________________5___0", "e817db50d84f341d443c6f6593cafda093fc85e773a762421d47daa6ac993bd5"}, + {"88002e", "v_______________________5___1", "d6e3e6047bdc110edd296a4d63c030aec451bee9d8075bc5a198eee8cda34f68"}, + {"88003d", "v_______________________5___2", "b6bdf8298c703342188e5f7f84921a402042d0e5fb059969dd53a6b6b1fb989e"}, + }, + { // 0{1:fc, 2:ec, 4:dc} + {"01fc", "v_______________________6___0", "693268f2ca80d32b015f61cd2c4dba5a47a6b52a14c34f8e6945fad684e7a0d5"}, + {"02ec", "v_______________________6___1", "e24ddd44469310c2b785a2044618874bf486d2f7822603a9b8dce58d6524d5de"}, + {"04dc", "v_______________________6___2", "33fc259629187bbe54b92f82f0cd8083b91a12e41a9456b84fc155321e334db7"}, + }, + { // f{0:fccc, f:ff{0:f, f:f}} + {"f0fccc", "v_______________________7___0", "b0966b5aa469a3e292bc5fcfa6c396ae7a657255eef552ea7e12f996de795b90"}, + {"ffff0f", "v_______________________7___1", "3b1ca154ec2a3d96d8d77bddef0abfe40a53a64eb03cecf78da9ec43799fa3d0"}, + {"ffffff", "v_______________________7___2", "e75463041f1be8252781be0ace579a44ea4387bf5b2739f4607af676f7719678"}, + }, + { // ff{0:f{0:f, f:f}, f:fcc} + {"ff0f0f", "v_______________________8___0", "0928af9b14718ec8262ab89df430f1e5fbf66fac0fed037aff2b6767ae8c8684"}, + {"ff0fff", "v_______________________8___1", "d870f4d3ce26b0bf86912810a1960693630c20a48ba56be0ad04bc3e9ddb01e6"}, + {"ffffcc", "v_______________________8___2", "4239f10dd9d9915ecf2e047d6a576bdc1733ed77a30830f1bf29deaf7d8e966f"}, + }, + { + {"123d", "x___________________________0", "fc453d88b6f128a77c448669710497380fa4588abbea9f78f4c20c80daa797d0"}, + {"123e", "x___________________________1", "5af48f2d8a9a015c1ff7fa8b8c7f6b676233bd320e8fb57fd7933622badd2cec"}, + {"123f", "x___________________________2", "1164d7299964e74ac40d761f9189b2a3987fae959800d0f7e29d3aaf3eae9e15"}, + }, + { + {"123d", "x___________________________0", "fc453d88b6f128a77c448669710497380fa4588abbea9f78f4c20c80daa797d0"}, + {"123e", "x___________________________1", "5af48f2d8a9a015c1ff7fa8b8c7f6b676233bd320e8fb57fd7933622badd2cec"}, + {"124a", "x___________________________2", "661a96a669869d76b7231380da0649d013301425fbea9d5c5fae6405aa31cfce"}, + }, + { + {"123d", "x___________________________0", "fc453d88b6f128a77c448669710497380fa4588abbea9f78f4c20c80daa797d0"}, + {"123e", "x___________________________1", "5af48f2d8a9a015c1ff7fa8b8c7f6b676233bd320e8fb57fd7933622badd2cec"}, + {"13aa", "x___________________________2", "6590120e1fd3ffd1a90e8de5bb10750b61079bb0776cca4414dd79a24e4d4356"}, + }, + { + {"123d", "x___________________________0", "fc453d88b6f128a77c448669710497380fa4588abbea9f78f4c20c80daa797d0"}, + {"123e", "x___________________________1", "5af48f2d8a9a015c1ff7fa8b8c7f6b676233bd320e8fb57fd7933622badd2cec"}, + {"2aaa", "x___________________________2", "f869b40e0c55eace1918332ef91563616fbf0755e2b946119679f7ef8e44b514"}, + }, + { + {"1234da", "x___________________________0", "1c4b4462e9f56a80ca0f5d77c0d632c41b0102290930343cf1791e971a045a79"}, + {"1234ea", "x___________________________1", "2f502917f3ba7d328c21c8b45ee0f160652e68450332c166d4ad02d1afe31862"}, + {"1234fa", "x___________________________2", "4f4e368ab367090d5bc3dbf25f7729f8bd60df84de309b4633a6b69ab66142c0"}, + }, + { + {"1234da", "x___________________________0", "1c4b4462e9f56a80ca0f5d77c0d632c41b0102290930343cf1791e971a045a79"}, + {"1234ea", "x___________________________1", "2f502917f3ba7d328c21c8b45ee0f160652e68450332c166d4ad02d1afe31862"}, + {"1235aa", "x___________________________2", "21840121d11a91ac8bbad9a5d06af902a5c8d56a47b85600ba813814b7bfcb9b"}, + }, + { + {"1234da", "x___________________________0", "1c4b4462e9f56a80ca0f5d77c0d632c41b0102290930343cf1791e971a045a79"}, + {"1234ea", "x___________________________1", "2f502917f3ba7d328c21c8b45ee0f160652e68450332c166d4ad02d1afe31862"}, + {"124aaa", "x___________________________2", "ea4040ddf6ae3fbd1524bdec19c0ab1581015996262006632027fa5cf21e441e"}, + }, + { + {"1234da", "x___________________________0", "1c4b4462e9f56a80ca0f5d77c0d632c41b0102290930343cf1791e971a045a79"}, + {"1234ea", "x___________________________1", "2f502917f3ba7d328c21c8b45ee0f160652e68450332c166d4ad02d1afe31862"}, + {"13aaaa", "x___________________________2", "e4beb66c67e44f2dd8ba36036e45a44ff68f8d52942472b1911a45f886a34507"}, + }, + { + {"1234da", "x___________________________0", "1c4b4462e9f56a80ca0f5d77c0d632c41b0102290930343cf1791e971a045a79"}, + {"1234ea", "x___________________________1", "2f502917f3ba7d328c21c8b45ee0f160652e68450332c166d4ad02d1afe31862"}, + {"2aaaaa", "x___________________________2", "5f5989b820ff5d76b7d49e77bb64f26602294f6c42a1a3becc669cd9e0dc8ec9"}, + }, + { + {"000000", "x___________________________0", "3b32b7af0bddc7940e7364ee18b5a59702c1825e469452c8483b9c4e0218b55a"}, + {"1234da", "x___________________________1", "3ab152a1285dca31945566f872c1cc2f17a770440eda32aeee46a5e91033dde2"}, + {"1234ea", "x___________________________2", "0cccc87f96ddef55563c1b3be3c64fff6a644333c3d9cd99852cb53b6412b9b8"}, + {"1234fa", "x___________________________3", "65bb3aafea8121111d693ffe34881c14d27b128fd113fa120961f251fe28428d"}, + }, + { + {"000000", "x___________________________0", "3b32b7af0bddc7940e7364ee18b5a59702c1825e469452c8483b9c4e0218b55a"}, + {"1234da", "x___________________________1", "3ab152a1285dca31945566f872c1cc2f17a770440eda32aeee46a5e91033dde2"}, + {"1234ea", "x___________________________2", "0cccc87f96ddef55563c1b3be3c64fff6a644333c3d9cd99852cb53b6412b9b8"}, + {"1235aa", "x___________________________3", "f670e4d2547c533c5f21e0045442e2ecb733f347ad6d29ef36e0f5ba31bb11a8"}, + }, + { + {"000000", "x___________________________0", "3b32b7af0bddc7940e7364ee18b5a59702c1825e469452c8483b9c4e0218b55a"}, + {"1234da", "x___________________________1", "3ab152a1285dca31945566f872c1cc2f17a770440eda32aeee46a5e91033dde2"}, + {"1234ea", "x___________________________2", "0cccc87f96ddef55563c1b3be3c64fff6a644333c3d9cd99852cb53b6412b9b8"}, + {"124aaa", "x___________________________3", "c17464123050a9a6f29b5574bb2f92f6d305c1794976b475b7fb0316b6335598"}, + }, + { + {"000000", "x___________________________0", "3b32b7af0bddc7940e7364ee18b5a59702c1825e469452c8483b9c4e0218b55a"}, + {"1234da", "x___________________________1", "3ab152a1285dca31945566f872c1cc2f17a770440eda32aeee46a5e91033dde2"}, + {"1234ea", "x___________________________2", "0cccc87f96ddef55563c1b3be3c64fff6a644333c3d9cd99852cb53b6412b9b8"}, + {"13aaaa", "x___________________________3", "aa8301be8cb52ea5cd249f5feb79fb4315ee8de2140c604033f4b3fff78f0105"}, + }, + { + {"0000", "x___________________________0", "cb8c09ad07ae882136f602b3f21f8733a9f5a78f1d2525a8d24d1c13258000b2"}, + {"123d", "x___________________________1", "8f09663deb02f08958136410dc48565e077f76bb6c9d8c84d35fc8913a657d31"}, + {"123e", "x___________________________2", "0d230561e398c579e09a9f7b69ceaf7d3970f5a436fdb28b68b7a37c5bdd6b80"}, + {"123f", "x___________________________3", "80f7bad1893ca57e3443bb3305a517723a74d3ba831bcaca22a170645eb7aafb"}, + }, + { + {"0000", "x___________________________0", "cb8c09ad07ae882136f602b3f21f8733a9f5a78f1d2525a8d24d1c13258000b2"}, + {"123d", "x___________________________1", "8f09663deb02f08958136410dc48565e077f76bb6c9d8c84d35fc8913a657d31"}, + {"123e", "x___________________________2", "0d230561e398c579e09a9f7b69ceaf7d3970f5a436fdb28b68b7a37c5bdd6b80"}, + {"124a", "x___________________________3", "383bc1bb4f019e6bc4da3751509ea709b58dd1ac46081670834bae072f3e9557"}, + }, + { + {"0000", "x___________________________0", "cb8c09ad07ae882136f602b3f21f8733a9f5a78f1d2525a8d24d1c13258000b2"}, + {"123d", "x___________________________1", "8f09663deb02f08958136410dc48565e077f76bb6c9d8c84d35fc8913a657d31"}, + {"123e", "x___________________________2", "0d230561e398c579e09a9f7b69ceaf7d3970f5a436fdb28b68b7a37c5bdd6b80"}, + {"13aa", "x___________________________3", "ff0dc70ce2e5db90ee42a4c2ad12139596b890e90eb4e16526ab38fa465b35cf"}, + }, + } + st := NewStackTrie(nil) + for i, test := range tests { + // The StackTrie does not allow Insert(), Hash(), Insert(), ... + // so we will create new trie for every sequence length of inserts. + for l := 1; l <= len(test); l++ { + st.Reset() + for j := 0; j < l; j++ { + kv := &test[j] + if err := st.TryUpdate(common.FromHex(kv.K), []byte(kv.V)); err != nil { + t.Fatal(err) + } + } + expected := common.HexToHash(test[l-1].H) + if h := st.Hash(); h != expected { + t.Errorf("%d(%d): root hash mismatch: %x, expected %x", i, l, h, expected) + } + } + } +} + +func TestSizeBug(t *testing.T) { + st := NewStackTrie(nil) + nt := NewEmpty(NewDatabase(memorydb.New())) + + leaf := common.FromHex("290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563") + value := common.FromHex("94cf40d0d2b44f2b66e07cace1372ca42b73cf21a3") + + nt.TryUpdate(leaf, value) + st.TryUpdate(leaf, value) + + if nt.Hash() != st.Hash() { + t.Fatalf("error %x != %x", st.Hash(), nt.Hash()) + } +} + +func TestEmptyBug(t *testing.T) { + st := NewStackTrie(nil) + nt := NewEmpty(NewDatabase(memorydb.New())) + + //leaf := common.FromHex("290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563") + //value := common.FromHex("94cf40d0d2b44f2b66e07cace1372ca42b73cf21a3") + kvs := []struct { + K string + V string + }{ + {K: "405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace", V: "9496f4ec2bf9dab484cac6be589e8417d84781be08"}, + {K: "40edb63a35fcf86c08022722aa3287cdd36440d671b4918131b2514795fefa9c", V: "01"}, + {K: "b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", V: "947a30f7736e48d6599356464ba4c150d8da0302ff"}, + {K: "c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b", V: "02"}, + } + + for _, kv := range kvs { + nt.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + st.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + } + + if nt.Hash() != st.Hash() { + t.Fatalf("error %x != %x", st.Hash(), nt.Hash()) + } +} + +func TestValLength56(t *testing.T) { + st := NewStackTrie(nil) + nt := NewEmpty(NewDatabase(memorydb.New())) + + //leaf := common.FromHex("290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563") + //value := common.FromHex("94cf40d0d2b44f2b66e07cace1372ca42b73cf21a3") + kvs := []struct { + K string + V string + }{ + {K: "405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace", V: "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"}, + } + + for _, kv := range kvs { + nt.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + st.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + } + + if nt.Hash() != st.Hash() { + t.Fatalf("error %x != %x", st.Hash(), nt.Hash()) + } +} + +// TestUpdateSmallNodes tests a case where the leaves are small (both key and value), +// which causes a lot of node-within-node. This case was found via fuzzing. +func TestUpdateSmallNodes(t *testing.T) { + st := NewStackTrie(nil) + nt := NewEmpty(NewDatabase(memorydb.New())) + + kvs := []struct { + K string + V string + }{ + {"63303030", "3041"}, // stacktrie.Update + {"65", "3000"}, // stacktrie.Update + } + for _, kv := range kvs { + nt.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + st.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + } + if nt.Hash() != st.Hash() { + t.Fatalf("error %x != %x", st.Hash(), nt.Hash()) + } +} + +// TestUpdateVariableKeys contains a case which stacktrie fails: when keys of different +// sizes are used, and the second one has the same prefix as the first, then the +// stacktrie fails, since it's unable to 'expand' on an already added leaf. +// For all practical purposes, this is fine, since keys are fixed-size length +// in account and storage tries. +// +// The test is marked as 'skipped', and exists just to have the behaviour documented. +// This case was found via fuzzing. +func TestUpdateVariableKeys(t *testing.T) { + t.SkipNow() + st := NewStackTrie(nil) + nt := NewEmpty(NewDatabase(memorydb.New())) + + kvs := []struct { + K string + V string + }{ + {"0x33303534636532393561313031676174", "303030"}, + {"0x3330353463653239356131303167617430", "313131"}, + } + for _, kv := range kvs { + nt.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + st.TryUpdate(common.FromHex(kv.K), common.FromHex(kv.V)) + } + if nt.Hash() != st.Hash() { + t.Fatalf("error %x != %x", st.Hash(), nt.Hash()) + } +} + +// TestStacktrieNotModifyValues checks that inserting blobs of data into the +// stacktrie does not mutate the blobs +func TestStacktrieNotModifyValues(t *testing.T) { + st := NewStackTrie(nil) + { // Test a very small trie + // Give it the value as a slice with large backing alloc, + // so if the stacktrie tries to append, it won't have to realloc + value := make([]byte, 1, 100) + value[0] = 0x2 + want := common.CopyBytes(value) + st.TryUpdate([]byte{0x01}, value) + st.Hash() + if have := value; !bytes.Equal(have, want) { + t.Fatalf("tiny trie: have %#x want %#x", have, want) + } + st = NewStackTrie(nil) + } + // Test with a larger trie + keyB := big.NewInt(1) + keyDelta := big.NewInt(1) + var vals [][]byte + getValue := func(i int) []byte { + if i%2 == 0 { // large + return crypto.Keccak256(big.NewInt(int64(i)).Bytes()) + } else { //small + return big.NewInt(int64(i)).Bytes() + } + } + for i := 0; i < 1000; i++ { + key := common.BigToHash(keyB) + value := getValue(i) + st.TryUpdate(key.Bytes(), value) + vals = append(vals, value) + keyB = keyB.Add(keyB, keyDelta) + keyDelta.Add(keyDelta, common.Big1) + } + st.Hash() + for i := 0; i < 1000; i++ { + want := getValue(i) + + have := vals[i] + if !bytes.Equal(have, want) { + t.Fatalf("item %d, have %#x want %#x", i, have, want) + } + } +} + +// TestStacktrieSerialization tests that the stacktrie works well if we +// serialize/unserialize it a lot +func TestStacktrieSerialization(t *testing.T) { + var ( + st = NewStackTrie(nil) + nt = NewEmpty(NewDatabase(memorydb.New())) + keyB = big.NewInt(1) + keyDelta = big.NewInt(1) + vals [][]byte + keys [][]byte + ) + getValue := func(i int) []byte { + if i%2 == 0 { // large + return crypto.Keccak256(big.NewInt(int64(i)).Bytes()) + } else { //small + return big.NewInt(int64(i)).Bytes() + } + } + for i := 0; i < 10; i++ { + vals = append(vals, getValue(i)) + keys = append(keys, common.BigToHash(keyB).Bytes()) + keyB = keyB.Add(keyB, keyDelta) + keyDelta.Add(keyDelta, common.Big1) + } + for i, k := range keys { + nt.TryUpdate(k, common.CopyBytes(vals[i])) + } + + for i, k := range keys { + blob, err := st.MarshalBinary() + if err != nil { + t.Fatal(err) + } + newSt, err := NewFromBinary(blob, nil) + if err != nil { + t.Fatal(err) + } + st = newSt + st.TryUpdate(k, common.CopyBytes(vals[i])) + } + if have, want := st.Hash(), nt.Hash(); have != want { + t.Fatalf("have %#x want %#x", have, want) + } +} diff --git a/trie/sync.go b/trie/sync.go index 17ef62b2..303fcbfa 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -20,9 +20,11 @@ import ( "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/common/prque" - "github.com/cryptoecc/ETH-ECC/ethdb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" ) // ErrNotRequested is returned by the trie sync when it's requested to process a @@ -33,253 +35,374 @@ var ErrNotRequested = errors.New("not requested") // node it already processed previously. var ErrAlreadyProcessed = errors.New("already processed") -// request represents a scheduled or already in-flight state retrieval request. -type request struct { - hash common.Hash // Hash of the node data content to retrieve - data []byte // Data content of the node, cached until all subtrees complete - raw bool // Whether this is a raw entry (code) or a trie node +// maxFetchesPerDepth is the maximum number of pending trie nodes per depth. The +// role of this value is to limit the number of trie nodes that get expanded in +// memory if the node was configured with a significant number of peers. +const maxFetchesPerDepth = 16384 + +// SyncPath is a path tuple identifying a particular trie node either in a single +// trie (account) or a layered trie (account -> storage). +// +// Content wise the tuple either has 1 element if it addresses a node in a single +// trie or 2 elements if it addresses a node in a stacked trie. +// +// To support aiming arbitrary trie nodes, the path needs to support odd nibble +// lengths. To avoid transferring expanded hex form over the network, the last +// part of the tuple (which needs to index into the middle of a trie) is compact +// encoded. In case of a 2-tuple, the first item is always 32 bytes so that is +// simple binary encoded. +// +// Examples: +// - Path 0x9 -> {0x19} +// - Path 0x99 -> {0x0099} +// - Path 0x01234567890123456789012345678901012345678901234567890123456789019 -> {0x0123456789012345678901234567890101234567890123456789012345678901, 0x19} +// - Path 0x012345678901234567890123456789010123456789012345678901234567890199 -> {0x0123456789012345678901234567890101234567890123456789012345678901, 0x0099} +type SyncPath [][]byte - parents []*request // Parent state nodes referencing this entry (notify all upon completion) - depth int // Depth level within the trie the node is located to prioritise DFS - deps int // Number of dependencies before allowed to commit this node +// NewSyncPath converts an expanded trie path from nibble form into a compact +// version that can be sent over the network. +func NewSyncPath(path []byte) SyncPath { + // If the hash is from the account trie, append a single item, if it + // is from the a storage trie, append a tuple. Note, the length 64 is + // clashing between account leaf and storage root. It's fine though + // because having a trie node at 64 depth means a hash collision was + // found and we're long dead. + if len(path) < 64 { + return SyncPath{hexToCompact(path)} + } + return SyncPath{hexToKeybytes(path[:64]), hexToCompact(path[64:])} +} + +// nodeRequest represents a scheduled or already in-flight trie node retrieval request. +type nodeRequest struct { + hash common.Hash // Hash of the trie node to retrieve + path []byte // Merkle path leading to this node for prioritization + data []byte // Data content of the node, cached until all subtrees complete + parent *nodeRequest // Parent state node referencing this entry + deps int // Number of dependencies before allowed to commit this node callback LeafCallback // Callback to invoke if a leaf node it reached on this branch } -// SyncResult is a simple list to return missing nodes along with their request -// hashes. -type SyncResult struct { - Hash common.Hash // Hash of the originally unknown trie node - Data []byte // Data content of the retrieved node +// codeRequest represents a scheduled or already in-flight bytecode retrieval request. +type codeRequest struct { + hash common.Hash // Hash of the contract bytecode to retrieve + path []byte // Merkle path leading to this node for prioritization + data []byte // Data content of the node, cached until all subtrees complete + parents []*nodeRequest // Parent state nodes referencing this entry (notify all upon completion) +} + +// NodeSyncResult is a response with requested trie node along with its node path. +type NodeSyncResult struct { + Path string // Path of the originally unknown trie node + Data []byte // Data content of the retrieved trie node +} + +// CodeSyncResult is a response with requested bytecode along with its hash. +type CodeSyncResult struct { + Hash common.Hash // Hash the originally unknown bytecode + Data []byte // Data content of the retrieved bytecode } // syncMemBatch is an in-memory buffer of successfully downloaded but not yet // persisted data items. type syncMemBatch struct { - batch map[common.Hash][]byte // In-memory membatch of recently completed items - order []common.Hash // Order of completion to prevent out-of-order data loss + nodes map[string][]byte // In-memory membatch of recently completed nodes + hashes map[string]common.Hash // Hashes of recently completed nodes + codes map[common.Hash][]byte // In-memory membatch of recently completed codes } // newSyncMemBatch allocates a new memory-buffer for not-yet persisted trie nodes. func newSyncMemBatch() *syncMemBatch { return &syncMemBatch{ - batch: make(map[common.Hash][]byte), - order: make([]common.Hash, 0, 256), + nodes: make(map[string][]byte), + hashes: make(map[string]common.Hash), + codes: make(map[common.Hash][]byte), } } +// hasNode reports the trie node with specific path is already cached. +func (batch *syncMemBatch) hasNode(path []byte) bool { + _, ok := batch.nodes[string(path)] + return ok +} + +// hasCode reports the contract code with specific hash is already cached. +func (batch *syncMemBatch) hasCode(hash common.Hash) bool { + _, ok := batch.codes[hash] + return ok +} + // Sync is the main state trie synchronisation scheduler, which provides yet // 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 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 + database ethdb.KeyValueReader // Persistent database to check for existing entries + membatch *syncMemBatch // Memory buffer to avoid frequent database writes + nodeReqs map[string]*nodeRequest // Pending requests pertaining to a trie node path + codeReqs map[common.Hash]*codeRequest // Pending requests pertaining to a code hash + queue *prque.Prque // Priority queue with the pending requests + fetches map[int]int // Number of active fetches per trie node depth } // NewSync creates a new trie data download scheduler. -func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallback, bloom *SyncBloom) *Sync { +func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallback) *Sync { ts := &Sync{ database: database, membatch: newSyncMemBatch(), - requests: make(map[common.Hash]*request), + nodeReqs: make(map[string]*nodeRequest), + codeReqs: make(map[common.Hash]*codeRequest), queue: prque.New(nil), - bloom: bloom, + fetches: make(map[int]int), } - ts.AddSubTrie(root, 0, common.Hash{}, callback) + ts.AddSubTrie(root, nil, common.Hash{}, nil, callback) return ts } -// AddSubTrie registers a new trie to the sync code, rooted at the designated parent. -func (s *Sync) AddSubTrie(root common.Hash, depth int, parent common.Hash, callback LeafCallback) { +// AddSubTrie registers a new trie to the sync code, rooted at the designated +// parent for completion tracking. The given path is a unique node path in +// hex format and contain all the parent path if it's layered trie node. +func (s *Sync) AddSubTrie(root common.Hash, path []byte, parent common.Hash, parentPath []byte, callback LeafCallback) { // Short circuit if the trie is empty or already known if root == emptyRoot { return } - if _, ok := s.membatch.batch[root]; ok { + if s.membatch.hasNode(path) { 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) + if rawdb.HasTrieNode(s.database, root) { + return } // Assemble the new sub-trie sync request - req := &request{ + req := &nodeRequest{ hash: root, - depth: depth, + path: path, callback: callback, } // If this sub-trie has a designated parent, link them together if parent != (common.Hash{}) { - ancestor := s.requests[parent] + ancestor := s.nodeReqs[string(parentPath)] if ancestor == nil { panic(fmt.Sprintf("sub-trie ancestor not found: %x", parent)) } ancestor.deps++ - req.parents = append(req.parents, ancestor) + req.parent = ancestor } - s.schedule(req) + s.scheduleNodeRequest(req) } -// AddRawEntry schedules the direct retrieval of a state entry that should not be -// interpreted as a trie node, but rather accepted and stored into the database -// as is. This method's goal is to support misc state metadata retrievals (e.g. -// contract code). -func (s *Sync) AddRawEntry(hash common.Hash, depth int, parent common.Hash) { +// AddCodeEntry schedules the direct retrieval of a contract code that should not +// be interpreted as a trie node, but rather accepted and stored into the database +// as is. +func (s *Sync) AddCodeEntry(hash common.Hash, path []byte, parent common.Hash, parentPath []byte) { // Short circuit if the entry is empty or already known if hash == emptyState { return } - if _, ok := s.membatch.batch[hash]; ok { + if s.membatch.hasCode(hash) { 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) + // If database says duplicate, the blob is present for sure. + // Note we only check the existence with new code scheme, fast + // sync is expected to run with a fresh new node. Even there + // exists the code with legacy format, fetch and store with + // new scheme anyway. + if rawdb.HasCodeWithPrefix(s.database, hash) { + return } // Assemble the new sub-trie sync request - req := &request{ - hash: hash, - raw: true, - depth: depth, + req := &codeRequest{ + path: path, + hash: hash, } // If this sub-trie has a designated parent, link them together if parent != (common.Hash{}) { - ancestor := s.requests[parent] + ancestor := s.nodeReqs[string(parentPath)] // the parent of codereq can ONLY be nodereq if ancestor == nil { panic(fmt.Sprintf("raw-entry ancestor not found: %x", parent)) } ancestor.deps++ req.parents = append(req.parents, ancestor) } - s.schedule(req) + s.scheduleCodeRequest(req) } -// Missing retrieves the known missing nodes from the trie for retrieval. -func (s *Sync) Missing(max int) []common.Hash { - var requests []common.Hash - for !s.queue.Empty() && (max == 0 || len(requests) < max) { - requests = append(requests, s.queue.PopItem().(common.Hash)) - } - return requests -} +// Missing retrieves the known missing nodes from the trie for retrieval. To aid +// both eth/6x style fast sync and snap/1x style state sync, the paths of trie +// nodes are returned too, as well as separate hash list for codes. +func (s *Sync) Missing(max int) ([]string, []common.Hash, []common.Hash) { + var ( + nodePaths []string + nodeHashes []common.Hash + codeHashes []common.Hash + ) + for !s.queue.Empty() && (max == 0 || len(nodeHashes)+len(codeHashes) < max) { + // Retrieve the next item in line + item, prio := s.queue.Peek() -// Process injects a batch of retrieved trie nodes data, returning if something -// was committed to the database and also the index of an entry if processing of -// it failed. -func (s *Sync) Process(results []SyncResult) (bool, int, error) { - committed := false - - for i, item := range results { - // If the item was not requested, bail out - request := s.requests[item.Hash] - if request == nil { - return committed, i, ErrNotRequested - } - if request.data != nil { - return committed, i, ErrAlreadyProcessed - } - // If the item is a raw entry request, commit directly - if request.raw { - request.data = item.Data - s.commit(request) - committed = true - continue - } - // Decode the node data content and update the request - node, err := decodeNode(item.Hash[:], item.Data) - if err != nil { - return committed, i, err + // If we have too many already-pending tasks for this depth, throttle + depth := int(prio >> 56) + if s.fetches[depth] > maxFetchesPerDepth { + break } - request.data = item.Data + // Item is allowed to be scheduled, add it to the task list + s.queue.Pop() + s.fetches[depth]++ - // Create and schedule a request for all the children nodes - requests, err := s.children(request, node) - if err != nil { - return committed, i, err - } - if len(requests) == 0 && request.deps == 0 { - s.commit(request) - committed = true - continue + switch item := item.(type) { + case common.Hash: + codeHashes = append(codeHashes, item) + case string: + req, ok := s.nodeReqs[item] + if !ok { + log.Error("Missing node request", "path", item) + continue // System very wrong, shouldn't happen + } + nodePaths = append(nodePaths, item) + nodeHashes = append(nodeHashes, req.hash) } - request.deps += len(requests) + } + return nodePaths, nodeHashes, codeHashes +} + +// ProcessCode injects the received data for requested item. Note it can +// happpen that the single response commits two pending requests(e.g. +// there are two requests one for code and one for node but the hash +// is same). In this case the second response for the same hash will +// be treated as "non-requested" item or "already-processed" item but +// there is no downside. +func (s *Sync) ProcessCode(result CodeSyncResult) error { + // If the code was not requested or it's already processed, bail out + req := s.codeReqs[result.Hash] + if req == nil { + return ErrNotRequested + } + if req.data != nil { + return ErrAlreadyProcessed + } + req.data = result.Data + return s.commitCodeRequest(req) +} + +// ProcessNode injects the received data for requested item. Note it can +// happen that the single response commits two pending requests(e.g. +// there are two requests one for code and one for node but the hash +// is same). In this case the second response for the same hash will +// be treated as "non-requested" item or "already-processed" item but +// there is no downside. +func (s *Sync) ProcessNode(result NodeSyncResult) error { + // If the trie node was not requested or it's already processed, bail out + req := s.nodeReqs[result.Path] + if req == nil { + return ErrNotRequested + } + if req.data != nil { + return ErrAlreadyProcessed + } + // Decode the node data content and update the request + node, err := decodeNode(req.hash.Bytes(), result.Data) + if err != nil { + return err + } + req.data = result.Data + + // Create and schedule a request for all the children nodes + requests, err := s.children(req, node) + if err != nil { + return err + } + if len(requests) == 0 && req.deps == 0 { + s.commitNodeRequest(req) + } else { + req.deps += len(requests) for _, child := range requests { - s.schedule(child) + s.scheduleNodeRequest(child) } } - return committed, 0, nil + return nil } // 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.KeyValueWriter) (int, error) { +// storage, returning any occurred error. +func (s *Sync) Commit(dbw ethdb.Batch) 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[:]) + for path, value := range s.membatch.nodes { + rawdb.WriteTrieNode(dbw, s.membatch.hashes[path], value) + } + for hash, value := range s.membatch.codes { + rawdb.WriteCode(dbw, hash, value) } - written := len(s.membatch.order) // TODO(karalabe): could an order change improve write performance? - // Drop the membatch data and return s.membatch = newSyncMemBatch() - return written, nil + return nil } // Pending returns the number of state entries currently pending for download. func (s *Sync) Pending() int { - return len(s.requests) + return len(s.nodeReqs) + len(s.codeReqs) } // schedule inserts a new state retrieval request into the fetch queue. If there // is already a pending request for this node, the new request will be discarded // and only a parent reference added to the old one. -func (s *Sync) schedule(req *request) { +func (s *Sync) scheduleNodeRequest(req *nodeRequest) { + s.nodeReqs[string(req.path)] = req + + // Schedule the request for future retrieval. This queue is shared + // by both node requests and code requests. + prio := int64(len(req.path)) << 56 // depth >= 128 will never happen, storage leaves will be included in their parents + for i := 0; i < 14 && i < len(req.path); i++ { + prio |= int64(15-req.path[i]) << (52 - i*4) // 15-nibble => lexicographic order + } + s.queue.Push(string(req.path), prio) +} + +// schedule inserts a new state retrieval request into the fetch queue. If there +// is already a pending request for this node, the new request will be discarded +// and only a parent reference added to the old one. +func (s *Sync) scheduleCodeRequest(req *codeRequest) { // If we're already requesting this node, add a new reference and stop - if old, ok := s.requests[req.hash]; ok { + if old, ok := s.codeReqs[req.hash]; ok { old.parents = append(old.parents, req.parents...) return } - // Schedule the request for future retrieval - s.queue.Push(req.hash, int64(req.depth)) - s.requests[req.hash] = req + s.codeReqs[req.hash] = req + + // Schedule the request for future retrieval. This queue is shared + // by both node requests and code requests. + prio := int64(len(req.path)) << 56 // depth >= 128 will never happen, storage leaves will be included in their parents + for i := 0; i < 14 && i < len(req.path); i++ { + prio |= int64(15-req.path[i]) << (52 - i*4) // 15-nibble => lexicographic order + } + s.queue.Push(req.hash, prio) } // children retrieves all the missing children of a state trie entry for future // retrieval scheduling. -func (s *Sync) children(req *request, object node) ([]*request, error) { +func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { // Gather all the children of the node, irrelevant whether known or not type child struct { - node node - depth int + path []byte + node node } var children []child switch node := (object).(type) { case *shortNode: + key := node.Key + if hasTerm(key) { + key = key[:len(key)-1] + } children = []child{{ - node: node.Val, - depth: req.depth + len(node.Key), + node: node.Val, + path: append(append([]byte(nil), req.path...), key...), }} case *fullNode: for i := 0; i < 17; i++ { if node.Children[i] != nil { children = append(children, child{ - node: node.Children[i], - depth: req.depth + 1, + node: node.Children[i], + path: append(append([]byte(nil), req.path...), byte(i)), }) } } @@ -287,12 +410,19 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { panic(fmt.Sprintf("unknown node: %+v", node)) } // Iterate over the children, and request all unknown ones - requests := make([]*request, 0, len(children)) + requests := make([]*nodeRequest, 0, len(children)) for _, child := range children { // Notify any external watcher of a new key/value node if req.callback != nil { if node, ok := (child.node).(valueNode); ok { - if err := req.callback(node, req.hash); err != nil { + var paths [][]byte + if len(child.path) == 2*common.HashLength { + paths = append(paths, hexToKeybytes(child.path)) + } else if len(child.path) == 4*common.HashLength { + paths = append(paths, hexToKeybytes(child.path[:2*common.HashLength])) + paths = append(paths, hexToKeybytes(child.path[2*common.HashLength:])) + } + if err := req.callback(paths, child.path, node, req.hash, req.path); err != nil { return nil, err } } @@ -300,23 +430,20 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { // If the child references another node, resolve or schedule if node, ok := (child.node).(hashNode); ok { // Try to resolve the node from the local database - hash := common.BytesToHash(node) - if _, ok := s.membatch.batch[hash]; ok { + if s.membatch.hasNode(child.path) { 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) + // If database says duplicate, then at least the trie node is present + // and we hold the assumption that it's NOT legacy contract code. + chash := common.BytesToHash(node) + if rawdb.HasTrieNode(s.database, chash) { + continue } // Locally unknown node, schedule for retrieval - requests = append(requests, &request{ - hash: hash, - parents: []*request{req}, - depth: child.depth, + requests = append(requests, &nodeRequest{ + path: child.path, + hash: chash, + parent: req, callback: req.callback, }) } @@ -327,18 +454,40 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { // commit finalizes a retrieval request and stores it into the membatch. If any // of the referencing parent requests complete due to this commit, they are also // committed themselves. -func (s *Sync) commit(req *request) (err error) { +func (s *Sync) commitNodeRequest(req *nodeRequest) error { // Write the node content to the membatch - s.membatch.batch[req.hash] = req.data - s.membatch.order = append(s.membatch.order, req.hash) + s.membatch.nodes[string(req.path)] = req.data + s.membatch.hashes[string(req.path)] = req.hash - delete(s.requests, req.hash) + delete(s.nodeReqs, string(req.path)) + s.fetches[len(req.path)]-- + + // Check parent for completion + if req.parent != nil { + req.parent.deps-- + if req.parent.deps == 0 { + if err := s.commitNodeRequest(req.parent); err != nil { + return err + } + } + } + return nil +} + +// commit finalizes a retrieval request and stores it into the membatch. If any +// of the referencing parent requests complete due to this commit, they are also +// committed themselves. +func (s *Sync) commitCodeRequest(req *codeRequest) error { + // Write the node content to the membatch + s.membatch.codes[req.hash] = req.data + delete(s.codeReqs, req.hash) + s.fetches[len(req.path)]-- // Check all parents for completion for _, parent := range req.parents { parent.deps-- if parent.deps == 0 { - if err := s.commit(parent); err != nil { + if err := s.commitNodeRequest(parent); err != nil { return err } } diff --git a/trie/sync_bloom.go b/trie/sync_bloom.go deleted file mode 100644 index 8fe605a1..00000000 --- a/trie/sync_bloom.go +++ /dev/null @@ -1,207 +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 trie - -import ( - "encoding/binary" - "fmt" - "math" - "sync" - "sync/atomic" - "time" - - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/log" - "github.com/cryptoecc/ETH-ECC/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 d124e992..9fd1d636 100644 --- a/trie/sync_test.go +++ b/trie/sync_test.go @@ -18,17 +18,19 @@ package trie import ( "bytes" + "fmt" "testing" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "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) { +func makeTestTrie() (*Database, *StateTrie, map[string][]byte) { // Create an empty trie triedb := NewDatabase(memorydb.New()) - trie, _ := New(common.Hash{}, triedb) + trie, _ := NewStateTrie(common.Hash{}, common.Hash{}, triedb) // Fill it with some arbitrary data content := make(map[string][]byte) @@ -49,9 +51,15 @@ func makeTestTrie() (*Database, *Trie, map[string][]byte) { trie.Update(key, val) } } - trie.Commit(nil) - - // Return the generated trie + root, nodes, err := trie.Commit(false) + if err != nil { + panic(fmt.Errorf("failed to commit trie %v", err)) + } + if err := triedb.Update(NewWithNodeSet(nodes)); err != nil { + panic(fmt.Errorf("failed to commit db %v", err)) + } + // Re-create the trie based on the new state + trie, _ = NewSecure(common.Hash{}, root, triedb) return triedb, trie, content } @@ -59,7 +67,7 @@ func makeTestTrie() (*Database, *Trie, map[string][]byte) { // content map. func checkTrieContents(t *testing.T, db *Database, root []byte, content map[string][]byte) { // Check root availability and trie contents - trie, err := New(common.BytesToHash(root), db) + trie, err := NewStateTrie(common.Hash{}, common.BytesToHash(root), db) if err != nil { t.Fatalf("failed to create trie at %x: %v", root, err) } @@ -76,7 +84,7 @@ func checkTrieContents(t *testing.T, db *Database, root []byte, content map[stri // checkTrieConsistency checks that all nodes in a trie are indeed present. func checkTrieConsistency(db *Database, root common.Hash) error { // Create and iterate a trie rooted in a subnode - trie, err := New(root, db) + trie, err := NewStateTrie(common.Hash{}, root, db) if err != nil { return nil // Consider a non existent state consistent } @@ -86,51 +94,94 @@ func checkTrieConsistency(db *Database, root common.Hash) error { return it.Error() } +// trieElement represents the element in the state trie(bytecode or trie node). +type trieElement struct { + path string + hash common.Hash + syncPath SyncPath +} + // Tests that an empty trie is not scheduled for syncing. func TestEmptySync(t *testing.T) { dbA := NewDatabase(memorydb.New()) dbB := NewDatabase(memorydb.New()) - emptyA, _ := New(common.Hash{}, dbA) - emptyB, _ := New(emptyRoot, dbB) + emptyA := NewEmpty(dbA) + emptyB, _ := New(common.Hash{}, emptyRoot, dbB) for i, trie := range []*Trie{emptyA, emptyB} { - 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) + sync := NewSync(trie.Hash(), memorydb.New(), nil) + if paths, nodes, codes := sync.Missing(1); len(paths) != 0 || len(nodes) != 0 || len(codes) != 0 { + t.Errorf("test %d: content requested for empty trie: %v, %v, %v", i, paths, nodes, codes) } } } // Tests that given a root hash, a trie can sync iteratively on a single thread, // requesting retrieval tasks and returning all of them in one go. -func TestIterativeSyncIndividual(t *testing.T) { testIterativeSync(t, 1) } -func TestIterativeSyncBatched(t *testing.T) { testIterativeSync(t, 100) } +func TestIterativeSyncIndividual(t *testing.T) { testIterativeSync(t, 1, false) } +func TestIterativeSyncBatched(t *testing.T) { testIterativeSync(t, 100, false) } +func TestIterativeSyncIndividualByPath(t *testing.T) { testIterativeSync(t, 1, true) } +func TestIterativeSyncBatchedByPath(t *testing.T) { testIterativeSync(t, 100, true) } -func testIterativeSync(t *testing.T, batch int) { +func testIterativeSync(t *testing.T, count int, bypath bool) { // Create a random trie to copy srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - queue := append([]common.Hash{}, sched.Missing(batch)...) - for len(queue) > 0 { - results := make([]SyncResult, len(queue)) - for i, hash := range queue { - data, err := srcDb.Node(hash) - if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + paths, nodes, _ := sched.Missing(count) + var elements []trieElement + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + } + for len(elements) > 0 { + results := make([]NodeSyncResult, len(elements)) + if !bypath { + for i, element := range elements { + data, err := srcDb.Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for hash %x: %v", element.hash, err) + } + results[i] = NodeSyncResult{element.path, data} + } + } else { + for i, element := range elements { + data, _, err := srcTrie.TryGetNode(element.syncPath[len(element.syncPath)-1]) + if err != nil { + t.Fatalf("failed to retrieve node data for path %x: %v", element.path, err) + } + results[i] = NodeSyncResult{element.path, data} + } + } + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) } - results[i] = SyncResult{hash, data} } - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch.Write() + + paths, nodes, _ = sched.Missing(count) + elements = elements[:0] + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) } - queue = append(queue[:0], sched.Missing(batch)...) } // Cross check that the two tries are in sync checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) @@ -145,26 +196,49 @@ func TestIterativeDelayedSync(t *testing.T) { // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - queue := append([]common.Hash{}, sched.Missing(10000)...) - for len(queue) > 0 { + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + paths, nodes, _ := sched.Missing(10000) + var elements []trieElement + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + } + for len(elements) > 0 { // Sync only half of the scheduled nodes - results := make([]SyncResult, len(queue)/2+1) - for i, hash := range queue[:len(results)] { - data, err := srcDb.Node(hash) + results := make([]NodeSyncResult, len(elements)/2+1) + for i, element := range elements[:len(results)] { + data, err := srcDb.Node(element.hash) if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) } - results[i] = SyncResult{hash, data} + results[i] = NodeSyncResult{element.path, data} } - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } + } + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch.Write() + + paths, nodes, _ = sched.Missing(10000) + elements = elements[len(results):] + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) } - queue = append(queue[len(results):], sched.Missing(10000)...) } // Cross check that the two tries are in sync checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) @@ -176,39 +250,56 @@ func TestIterativeDelayedSync(t *testing.T) { func TestIterativeRandomSyncIndividual(t *testing.T) { testIterativeRandomSync(t, 1) } func TestIterativeRandomSyncBatched(t *testing.T) { testIterativeRandomSync(t, 100) } -func testIterativeRandomSync(t *testing.T, batch int) { +func testIterativeRandomSync(t *testing.T, count int) { // Create a random trie to copy srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - queue := make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(batch) { - queue[hash] = struct{}{} + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + paths, nodes, _ := sched.Missing(count) + queue := make(map[string]trieElement) + for i, path := range paths { + queue[path] = trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + } } for len(queue) > 0 { // Fetch all the queued nodes in a random order - results := make([]SyncResult, 0, len(queue)) - for hash := range queue { - data, err := srcDb.Node(hash) + results := make([]NodeSyncResult, 0, len(queue)) + for path, element := range queue { + data, err := srcDb.Node(element.hash) if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) } - results = append(results, SyncResult{hash, data}) + results = append(results, NodeSyncResult{path, data}) } // Feed the retrieved results back and queue new tasks - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - queue = make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(batch) { - queue[hash] = struct{}{} + batch.Write() + + paths, nodes, _ = sched.Missing(count) + queue = make(map[string]trieElement) + for i, path := range paths { + queue[path] = trieElement{ + path: path, + hash: nodes[i], + syncPath: NewSyncPath([]byte(path)), + } } } // Cross check that the two tries are in sync @@ -224,38 +315,54 @@ func TestIterativeRandomDelayedSync(t *testing.T) { // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - queue := make(map[common.Hash]struct{}) - for _, hash := range sched.Missing(10000) { - queue[hash] = struct{}{} + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + paths, nodes, _ := sched.Missing(10000) + queue := make(map[string]trieElement) + for i, path := range paths { + queue[path] = trieElement{ + path: path, + hash: nodes[i], + syncPath: NewSyncPath([]byte(path)), + } } for len(queue) > 0 { // Sync only half of the scheduled nodes, even those in random order - results := make([]SyncResult, 0, len(queue)/2+1) - for hash := range queue { - data, err := srcDb.Node(hash) + results := make([]NodeSyncResult, 0, len(queue)/2+1) + for path, element := range queue { + data, err := srcDb.Node(element.hash) if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) } - results = append(results, SyncResult{hash, data}) + results = append(results, NodeSyncResult{path, data}) if len(results) >= cap(results) { break } } // Feed the retrieved results back and queue new tasks - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } + batch.Write() for _, result := range results { - delete(queue, result.Hash) + delete(queue, result.Path) } - for _, hash := range sched.Missing(10000) { - queue[hash] = struct{}{} + paths, nodes, _ = sched.Missing(10000) + for i, path := range paths { + queue[path] = trieElement{ + path: path, + hash: nodes[i], + syncPath: NewSyncPath([]byte(path)), + } } } // Cross check that the two tries are in sync @@ -271,32 +378,55 @@ func TestDuplicateAvoidanceSync(t *testing.T) { // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - queue := append([]common.Hash{}, sched.Missing(0)...) + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + paths, nodes, _ := sched.Missing(0) + var elements []trieElement + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + } requested := make(map[common.Hash]struct{}) - for len(queue) > 0 { - results := make([]SyncResult, len(queue)) - for i, hash := range queue { - data, err := srcDb.Node(hash) + for len(elements) > 0 { + results := make([]NodeSyncResult, len(elements)) + for i, element := range elements { + data, err := srcDb.Node(element.hash) if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) } - if _, ok := requested[hash]; ok { - t.Errorf("hash %x already requested once", hash) + if _, ok := requested[element.hash]; ok { + t.Errorf("hash %x already requested once", element.hash) } - requested[hash] = struct{}{} + requested[element.hash] = struct{}{} - results[i] = SyncResult{hash, data} + results[i] = NodeSyncResult{element.path, data} + } + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch.Write() + + paths, nodes, _ = sched.Missing(0) + elements = elements[:0] + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) } - queue = append(queue[:0], sched.Missing(0)...) } // Cross check that the two tries are in sync checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) @@ -311,48 +441,147 @@ func TestIncompleteSync(t *testing.T) { // Create a destination trie and sync with the scheduler diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - - var added []common.Hash - queue := append([]common.Hash{}, sched.Missing(1)...) - for len(queue) > 0 { + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + var ( + added []common.Hash + elements []trieElement + root = srcTrie.Hash() + ) + paths, nodes, _ := sched.Missing(1) + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + } + for len(elements) > 0 { // Fetch a batch of trie nodes - results := make([]SyncResult, len(queue)) - for i, hash := range queue { - data, err := srcDb.Node(hash) + results := make([]NodeSyncResult, len(elements)) + for i, element := range elements { + data, err := srcDb.Node(element.hash) if err != nil { - t.Fatalf("failed to retrieve node data for %x: %v", hash, err) + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) } - results[i] = SyncResult{hash, data} + results[i] = NodeSyncResult{element.path, data} } // Process each of the trie nodes - if _, index, err := sched.Process(results); err != nil { - t.Fatalf("failed to process result #%d: %v", index, err) + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } } - if index, err := sched.Commit(diskdb); err != nil { - t.Fatalf("failed to commit data #%d: %v", index, err) + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) } + batch.Write() + for _, result := range results { - added = append(added, result.Hash) - } - // Check that all known sub-tries in the synced trie are complete - for _, root := range added { - if err := checkTrieConsistency(triedb, root); err != nil { + hash := crypto.Keccak256Hash(result.Data) + if hash != root { + added = append(added, hash) + } + // Check that all known sub-tries in the synced trie are complete + if err := checkTrieConsistency(triedb, hash); err != nil { t.Fatalf("trie inconsistent: %v", err) } } // Fetch the next batch to retrieve - queue = append(queue[:0], sched.Missing(1)...) + paths, nodes, _ = sched.Missing(1) + elements = elements[:0] + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + } } // Sanity check that removing any node from the database is detected - for _, node := range added[1:] { - key := node.Bytes() - value, _ := diskdb.Get(key) + for _, hash := range added { + value, _ := diskdb.Get(hash.Bytes()) + diskdb.Delete(hash.Bytes()) + if err := checkTrieConsistency(triedb, root); err == nil { + t.Fatalf("trie inconsistency not caught, missing: %x", hash) + } + diskdb.Put(hash.Bytes(), value) + } +} + +// Tests that trie nodes get scheduled lexicographically when having the same +// depth. +func TestSyncOrdering(t *testing.T) { + // Create a random trie to copy + srcDb, srcTrie, srcData := makeTestTrie() - diskdb.Delete(key) - if err := checkTrieConsistency(triedb, added[0]); err == nil { - t.Fatalf("trie inconsistency not caught, missing: %x", key) + // Create a destination trie and sync with the scheduler, tracking the requests + diskdb := memorydb.New() + triedb := NewDatabase(diskdb) + sched := NewSync(srcTrie.Hash(), diskdb, nil) + + // The code requests are ignored here since there is no code + // at the testing trie. + var ( + reqs []SyncPath + elements []trieElement + ) + paths, nodes, _ := sched.Missing(1) + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + reqs = append(reqs, NewSyncPath([]byte(paths[i]))) + } + + for len(elements) > 0 { + results := make([]NodeSyncResult, len(elements)) + for i, element := range elements { + data, err := srcDb.Node(element.hash) + if err != nil { + t.Fatalf("failed to retrieve node data for %x: %v", element.hash, err) + } + results[i] = NodeSyncResult{element.path, data} + } + for _, result := range results { + if err := sched.ProcessNode(result); err != nil { + t.Fatalf("failed to process result %v", err) + } + } + batch := diskdb.NewBatch() + if err := sched.Commit(batch); err != nil { + t.Fatalf("failed to commit data: %v", err) + } + batch.Write() + + paths, nodes, _ = sched.Missing(1) + elements = elements[:0] + for i := 0; i < len(paths); i++ { + elements = append(elements, trieElement{ + path: paths[i], + hash: nodes[i], + syncPath: NewSyncPath([]byte(paths[i])), + }) + reqs = append(reqs, NewSyncPath([]byte(paths[i]))) + } + } + // Cross check that the two tries are in sync + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) + + // Check that the trie nodes have been requested path-ordered + for i := 0; i < len(reqs)-1; i++ { + if len(reqs[i]) > 1 || len(reqs[i+1]) > 1 { + // In the case of the trie tests, there's no storage so the tuples + // must always be single items. 2-tuples should be tested in state. + t.Errorf("Invalid request tuples: len(%v) or len(%v) > 1", reqs[i], reqs[i+1]) + } + if bytes.Compare(compactToHex(reqs[i][0]), compactToHex(reqs[i+1][0])) > 0 { + t.Errorf("Invalid request order: %v before %v", compactToHex(reqs[i][0]), compactToHex(reqs[i+1][0])) } - diskdb.Put(key, value) } } diff --git a/trie/trie.go b/trie/trie.go index 2e47750d..9274d883 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -19,11 +19,12 @@ package trie import ( "bytes" + "errors" "fmt" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" ) var ( @@ -35,18 +36,44 @@ var ( ) // 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. -type LeafCallback func(leaf []byte, parent common.Hash) error - -// Trie is a Merkle Patricia Trie. -// The zero value is an empty trie with no database. -// Use New to create a trie that sits on top of a database. +// node. +// +// The keys is a path tuple identifying a particular trie node either in a single +// trie (account) or a layered trie (account -> storage). Each key in the tuple +// is in the raw format(32 bytes). +// +// The path is a composite hexary path identifying the trie node. All the key +// bytes are converted to the hexary nibbles and composited with the parent path +// if the trie node is in a layered trie. +// +// It's used by state sync and commit to allow handling external references +// between account and storage tries. And also it's used in the state healing +// for extracting the raw states(leaf nodes) with corresponding paths. +type LeafCallback func(keys [][]byte, path []byte, leaf []byte, parent common.Hash, parentPath []byte) error + +// Trie is a Merkle Patricia Trie. Use New to create a trie that sits on +// top of a database. Whenever trie performs a commit operation, the generated +// nodes will be gathered and returned in a set. Once the trie is committed, +// it's not usable anymore. Callers have to re-create the trie with new root +// based on the updated trie database. // // Trie is not safe for concurrent use. type Trie struct { - db *Database - root node + root node + owner common.Hash + + // Keep track of the number leaves which have been inserted since the last + // hashing operation. This number will not directly map to the number of + // actually unhashed nodes. + unhashed int + + // db is the handler trie can retrieve nodes from. It's + // only for reading purpose and not available for writing. + db *Database + + // tracer is the tool to track the trie changes. + // It will be reset after each commit operation. + tracer *tracer } // newFlag returns the cache flag value for a newly created node. @@ -54,18 +81,29 @@ func (t *Trie) newFlag() nodeFlag { return nodeFlag{dirty: true} } -// New creates a trie with an existing root node from db. +// Copy returns a copy of Trie. +func (t *Trie) Copy() *Trie { + return &Trie{ + root: t.root, + owner: t.owner, + unhashed: t.unhashed, + db: t.db, + tracer: t.tracer.copy(), + } +} + +// New creates a trie with an existing root node from db and an assigned +// owner for storage proximity. // // If root is the zero hash or the sha3 hash of an empty string, the // trie is initially empty and does not require a database. Otherwise, // New will panic if db is nil and returns a MissingNodeError if root does // not exist in the database. Accessing the trie loads nodes from db on demand. -func New(root common.Hash, db *Database) (*Trie, error) { - if db == nil { - panic("trie.New called without a database") - } +func New(owner common.Hash, root common.Hash, db *Database) (*Trie, error) { trie := &Trie{ - db: db, + owner: owner, + db: db, + //tracer: newTracer(), } if root != (common.Hash{}) && root != emptyRoot { rootnode, err := trie.resolveHash(root[:], nil) @@ -77,6 +115,12 @@ func New(root common.Hash, db *Database) (*Trie, error) { return trie, nil } +// NewEmpty is a shortcut to create empty tree. It's mostly used in tests. +func NewEmpty(db *Database) *Trie { + tr, _ := New(common.Hash{}, common.Hash{}, db) + return tr +} + // NodeIterator returns an iterator that returns nodes of the trie. Iteration starts at // the key after the given start key. func (t *Trie) NodeIterator(start []byte) NodeIterator { @@ -97,8 +141,7 @@ func (t *Trie) Get(key []byte) []byte { // The value bytes must not be modified by the caller. // If a node was not found in the database, a MissingNodeError is returned. func (t *Trie) TryGet(key []byte) ([]byte, error) { - key = keybytesToHex(key) - value, newroot, didResolve, err := t.tryGet(t.root, key, 0) + value, newroot, didResolve, err := t.tryGet(t.root, keybytesToHex(key), 0) if err == nil && didResolve { t.root = newroot } @@ -141,6 +184,83 @@ func (t *Trie) tryGet(origNode node, key []byte, pos int) (value []byte, newnode } } +// TryGetNode attempts to retrieve a trie node by compact-encoded path. It is not +// possible to use keybyte-encoding as the path might contain odd nibbles. +func (t *Trie) TryGetNode(path []byte) ([]byte, int, error) { + item, newroot, resolved, err := t.tryGetNode(t.root, compactToHex(path), 0) + if err != nil { + return nil, resolved, err + } + if resolved > 0 { + t.root = newroot + } + if item == nil { + return nil, resolved, nil + } + return item, resolved, err +} + +func (t *Trie) tryGetNode(origNode node, path []byte, pos int) (item []byte, newnode node, resolved int, err error) { + // If non-existent path requested, abort + if origNode == nil { + return nil, nil, 0, nil + } + // If we reached the requested path, return the current node + if pos >= len(path) { + // Although we most probably have the original node expanded, encoding + // that into consensus form can be nasty (needs to cascade down) and + // time consuming. Instead, just pull the hash up from disk directly. + var hash hashNode + if node, ok := origNode.(hashNode); ok { + hash = node + } else { + hash, _ = origNode.cache() + } + if hash == nil { + return nil, origNode, 0, errors.New("non-consensus node") + } + blob, err := t.db.Node(common.BytesToHash(hash)) + return blob, origNode, 1, err + } + // Path still needs to be traversed, descend into children + switch n := (origNode).(type) { + case valueNode: + // Path prematurely ended, abort + return nil, nil, 0, nil + + case *shortNode: + if len(path)-pos < len(n.Key) || !bytes.Equal(n.Key, path[pos:pos+len(n.Key)]) { + // Path branches off from short node + return nil, n, 0, nil + } + item, newnode, resolved, err = t.tryGetNode(n.Val, path, pos+len(n.Key)) + if err == nil && resolved > 0 { + n = n.copy() + n.Val = newnode + } + return item, n, resolved, err + + case *fullNode: + item, newnode, resolved, err = t.tryGetNode(n.Children[path[pos]], path, pos+1) + if err == nil && resolved > 0 { + n = n.copy() + n.Children[path[pos]] = newnode + } + return item, n, resolved, err + + case hashNode: + child, err := t.resolveHash(n, path[:pos]) + if err != nil { + return nil, n, 1, err + } + item, newnode, resolved, err := t.tryGetNode(child, path, pos) + return item, newnode, resolved + 1, err + + default: + panic(fmt.Sprintf("%T: invalid node: %v", origNode, origNode)) + } +} + // Update associates key with value in the trie. Subsequent calls to // Get will return value. If value has length zero, any existing value // is deleted from the trie and calls to Get will return nil. @@ -162,6 +282,13 @@ func (t *Trie) Update(key, value []byte) { // // If a node was not found in the database, a MissingNodeError is returned. func (t *Trie) TryUpdate(key, value []byte) error { + return t.tryUpdate(key, value) +} + +// tryUpdate expects an RLP-encoded value and performs the core function +// for TryUpdate and TryUpdateAccount. +func (t *Trie) tryUpdate(key, value []byte) error { + t.unhashed++ k := keybytesToHex(key) if len(value) != 0 { _, n, err := t.insert(t.root, nil, k, valueNode(value)) @@ -213,7 +340,12 @@ func (t *Trie) insert(n node, prefix, key []byte, value node) (bool, node, error if matchlen == 0 { return true, branch, nil } - // Otherwise, replace it with a short node leading up to the branch. + // New branch node is created as a child of the original short node. + // Track the newly inserted node in the tracer. The node identifier + // passed is the path from the root node. + t.tracer.onInsert(append(prefix, key[:matchlen]...)) + + // Replace it with a short node leading up to the branch. return true, &shortNode{key[:matchlen], branch, t.newFlag()}, nil case *fullNode: @@ -227,6 +359,11 @@ func (t *Trie) insert(n node, prefix, key []byte, value node) (bool, node, error return true, n, nil case nil: + // New short node is created and track it in the tracer. The node identifier + // passed is the path from the root node. Note the valueNode won't be tracked + // since it's always embedded in its parent. + t.tracer.onInsert(prefix) + return true, &shortNode{key, value, t.newFlag()}, nil case hashNode: @@ -258,6 +395,7 @@ func (t *Trie) Delete(key []byte) { // TryDelete removes any existing value for key from the trie. // If a node was not found in the database, a MissingNodeError is returned. func (t *Trie) TryDelete(key []byte) error { + t.unhashed++ k := keybytesToHex(key) _, n, err := t.delete(t.root, nil, k) if err != nil { @@ -278,6 +416,11 @@ func (t *Trie) delete(n node, prefix, key []byte) (bool, node, error) { return false, n, nil // don't replace n on mismatch } if matchlen == len(key) { + // The matched short node is deleted entirely and track + // it in the deletion set. The same the valueNode doesn't + // need to be tracked at all since it's always embedded. + t.tracer.onDelete(prefix) + return true, nil, nil // remove n entirely for whole matches } // The key is longer than n.Key. Remove the remaining suffix @@ -290,6 +433,10 @@ func (t *Trie) delete(n node, prefix, key []byte) (bool, node, error) { } switch child := child.(type) { case *shortNode: + // The child shortNode is merged into its parent, track + // is deleted as well. + t.tracer.onDelete(append(prefix, n.Key...)) + // Deleting from the subtrie reduced it to another // short node. Merge the nodes to avoid creating a // shortNode{..., shortNode{...}}. Use concat (which @@ -310,6 +457,14 @@ func (t *Trie) delete(n node, prefix, key []byte) (bool, node, error) { n.flags = t.newFlag() n.Children[key[0]] = nn + // Because n is a full node, it must've contained at least two children + // before the delete operation. If the new child value is non-nil, n still + // has at least two children after the deletion, and cannot be reduced to + // a short node. + if nn != nil { + return true, n, nil + } + // Reduction: // Check how many non-nil entries are left after deleting and // reduce the full node to a short node if only one entry is // left. Since n must've contained at least two children @@ -338,11 +493,16 @@ func (t *Trie) delete(n node, prefix, key []byte) (bool, node, error) { // shortNode{..., shortNode{...}}. Since the entry // might not be loaded yet, resolve it just for this // check. - cnode, err := t.resolve(n.Children[pos], prefix) + cnode, err := t.resolve(n.Children[pos], append(prefix, byte(pos))) if err != nil { return false, nil, err } if cnode, ok := cnode.(*shortNode); ok { + // Replace the entire full node with the short node. + // Mark the original short node as deleted since the + // value is embedded into the parent now. + t.tracer.onDelete(append(prefix, byte(pos))) + k := append([]byte{byte(pos)}, cnode.Key...) return true, &shortNode{k, cnode.Val, t.newFlag()}, nil } @@ -393,41 +553,86 @@ func (t *Trie) resolve(n node, prefix []byte) (node, error) { return n, nil } +// resolveHash loads node from the underlying database with the provided +// node hash and path prefix. func (t *Trie) resolveHash(n hashNode, prefix []byte) (node, error) { hash := common.BytesToHash(n) if node := t.db.node(hash); node != nil { return node, nil } - return nil, &MissingNodeError{NodeHash: hash, Path: prefix} + return nil, &MissingNodeError{Owner: t.owner, NodeHash: hash, Path: prefix} +} + +// resolveHash loads rlp-encoded node blob from the underlying database +// with the provided node hash and path prefix. +func (t *Trie) resolveBlob(n hashNode, prefix []byte) ([]byte, error) { + hash := common.BytesToHash(n) + blob, _ := t.db.Node(hash) + if len(blob) != 0 { + return blob, nil + } + return nil, &MissingNodeError{Owner: t.owner, NodeHash: hash, Path: prefix} } // 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 { - hash, cached, _ := t.hashRoot(nil, nil) + hash, cached, _ := t.hashRoot() t.root = cached return common.BytesToHash(hash.(hashNode)) } -// Commit writes all nodes to the trie's memory database, tracking the internal -// and external (for account tries) references. -func (t *Trie) Commit(onleaf LeafCallback) (root common.Hash, err error) { - if t.db == nil { - panic("commit called on trie with nil database") +// Commit collects all dirty nodes in the trie and replace them with the +// corresponding node hash. All collected nodes(including dirty leaves if +// collectLeaf is true) will be encapsulated into a nodeset for return. +// The returned nodeset can be nil if the trie is clean(nothing to commit). +// Once the trie is committed, it's not usable anymore. A new trie must +// be created with new root and updated trie database for following usage +func (t *Trie) Commit(collectLeaf bool) (common.Hash, *NodeSet, error) { + defer t.tracer.reset() + + if t.root == nil { + return emptyRoot, nil, nil } - hash, cached, err := t.hashRoot(t.db, onleaf) + // Derive the hash for all dirty nodes first. We hold the assumption + // in the following procedure that all nodes are hashed. + rootHash := t.Hash() + + // Do a quick check if we really need to commit. This can happen e.g. + // if we load a trie for reading storage values, but don't write to it. + if hashedNode, dirty := t.root.cache(); !dirty { + // Replace the root node with the origin hash in order to + // ensure all resolved nodes are dropped after the commit. + t.root = hashedNode + return rootHash, nil, nil + } + h := newCommitter(t.owner, collectLeaf) + newRoot, nodes, err := h.Commit(t.root) if err != nil { - return common.Hash{}, err + return common.Hash{}, nil, err } - t.root = cached - return common.BytesToHash(hash.(hashNode)), nil + t.root = newRoot + return rootHash, nodes, nil } -func (t *Trie) hashRoot(db *Database, onleaf LeafCallback) (node, node, error) { +// hashRoot calculates the root hash of the given trie +func (t *Trie) hashRoot() (node, node, error) { if t.root == nil { return hashNode(emptyRoot.Bytes()), nil, nil } - h := newHasher(onleaf) + // If the number of changes is below 100, we let one thread handle it + h := newHasher(t.unhashed >= 100) defer returnHasherToPool(h) - return h.hash(t.root, db, true) + hashed, cached := h.hash(t.root, true) + t.unhashed = 0 + return hashed, cached, nil +} + +// Reset drops the referenced root node and cleans all internal state. +func (t *Trie) Reset() { + t.root = nil + t.owner = common.Hash{} + t.unhashed = 0 + //t.db = nil + t.tracer.reset() } diff --git a/trie/trie_test.go b/trie/trie_test.go index cd29b75c..3e29600b 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -19,22 +19,24 @@ package trie import ( "bytes" "encoding/binary" + "errors" "fmt" - "io/ioutil" + "hash" "math/big" "math/rand" - "os" "reflect" "testing" "testing/quick" - "github.com/cryptoecc/ETH-ECC/common" - "github.com/cryptoecc/ETH-ECC/crypto" - "github.com/cryptoecc/ETH-ECC/ethdb" - "github.com/cryptoecc/ETH-ECC/ethdb/leveldb" - "github.com/cryptoecc/ETH-ECC/ethdb/memorydb" - "github.com/cryptoecc/ETH-ECC/rlp" "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/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/crypto/sha3" ) func init() { @@ -42,14 +44,8 @@ func init() { spew.Config.DisableMethods = false } -// Used for testing -func newEmpty() *Trie { - trie, _ := New(common.Hash{}, NewDatabase(memorydb.New())) - return trie -} - func TestEmptyTrie(t *testing.T) { - var trie Trie + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) res := trie.Hash() exp := emptyRoot if res != exp { @@ -58,7 +54,7 @@ func TestEmptyTrie(t *testing.T) { } func TestNull(t *testing.T) { - var trie Trie + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) key := make([]byte, 32) value := []byte("test") trie.Update(key, value) @@ -68,7 +64,7 @@ func TestNull(t *testing.T) { } func TestMissingRoot(t *testing.T) { - trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(memorydb.New())) + trie, err := New(common.Hash{}, common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(memorydb.New())) if trie != nil { t.Error("New returned non-nil trie for invalid root") } @@ -84,35 +80,36 @@ func testMissingNode(t *testing.T, memonly bool) { diskdb := memorydb.New() triedb := NewDatabase(diskdb) - trie, _ := New(common.Hash{}, triedb) + trie := NewEmpty(triedb) updateString(trie, "120000", "qwerqwerqwerqwerqwerqwerqwerqwer") updateString(trie, "123456", "asdfasdfasdfasdfasdfasdfasdfasdf") - root, _ := trie.Commit(nil) + root, nodes, _ := trie.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) if !memonly { - triedb.Commit(root, true) + triedb.Commit(root, true, nil) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err := trie.TryGet([]byte("120000")) if err != nil { t.Errorf("Unexpected error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err = trie.TryGet([]byte("120099")) if err != nil { t.Errorf("Unexpected error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err = trie.TryGet([]byte("123456")) if err != nil { t.Errorf("Unexpected error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) err = trie.TryUpdate([]byte("120099"), []byte("zxcvzxcvzxcvzxcvzxcvzxcvzxcvzxcv")) if err != nil { t.Errorf("Unexpected error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) err = trie.TryDelete([]byte("123456")) if err != nil { t.Errorf("Unexpected error: %v", err) @@ -125,27 +122,27 @@ func testMissingNode(t *testing.T, memonly bool) { diskdb.Delete(hash[:]) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err = trie.TryGet([]byte("120000")) if _, ok := err.(*MissingNodeError); !ok { t.Errorf("Wrong error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err = trie.TryGet([]byte("120099")) if _, ok := err.(*MissingNodeError); !ok { t.Errorf("Wrong error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) _, err = trie.TryGet([]byte("123456")) if err != nil { t.Errorf("Unexpected error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) err = trie.TryUpdate([]byte("120099"), []byte("zxcv")) if _, ok := err.(*MissingNodeError); !ok { t.Errorf("Wrong error: %v", err) } - trie, _ = New(root, triedb) + trie, _ = New(common.Hash{}, root, triedb) err = trie.TryDelete([]byte("123456")) if _, ok := err.(*MissingNodeError); !ok { t.Errorf("Wrong error: %v", err) @@ -153,7 +150,7 @@ func testMissingNode(t *testing.T, memonly bool) { } func TestInsert(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) updateString(trie, "doe", "reindeer") updateString(trie, "dog", "puppy") @@ -162,24 +159,25 @@ func TestInsert(t *testing.T) { exp := common.HexToHash("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3") root := trie.Hash() if root != exp { - t.Errorf("exp %x got %x", exp, root) + t.Errorf("case 1: exp %x got %x", exp, root) } - trie = newEmpty() + trie = NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) updateString(trie, "A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") exp = common.HexToHash("d23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab") - root, err := trie.Commit(nil) + root, _, err := trie.Commit(false) if err != nil { t.Fatalf("commit error: %v", err) } if root != exp { - t.Errorf("exp %x got %x", exp, root) + t.Errorf("case 2: exp %x got %x", exp, root) } } func TestGet(t *testing.T) { - trie := newEmpty() + db := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(db) updateString(trie, "doe", "reindeer") updateString(trie, "dog", "puppy") updateString(trie, "dogglesworth", "cat") @@ -189,21 +187,21 @@ func TestGet(t *testing.T) { if !bytes.Equal(res, []byte("puppy")) { t.Errorf("expected puppy got %x", res) } - unknown := getString(trie, "unknown") if unknown != nil { t.Errorf("expected nil got %x", unknown) } - if i == 1 { return } - trie.Commit(nil) + root, nodes, _ := trie.Commit(false) + db.Update(NewWithNodeSet(nodes)) + trie, _ = New(common.Hash{}, root, db) } } func TestDelete(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) vals := []struct{ k, v string }{ {"do", "verb"}, {"ether", "wookiedoo"}, @@ -230,7 +228,7 @@ func TestDelete(t *testing.T) { } func TestEmptyValues(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) vals := []struct{ k, v string }{ {"do", "verb"}, @@ -254,7 +252,8 @@ func TestEmptyValues(t *testing.T) { } func TestReplication(t *testing.T) { - trie := newEmpty() + triedb := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(triedb) vals := []struct{ k, v string }{ {"do", "verb"}, {"ether", "wookiedoo"}, @@ -267,13 +266,14 @@ func TestReplication(t *testing.T) { for _, val := range vals { updateString(trie, val.k, val.v) } - exp, err := trie.Commit(nil) + exp, nodes, err := trie.Commit(false) if err != nil { t.Fatalf("commit error: %v", err) } + triedb.Update(NewWithNodeSet(nodes)) // create a new trie on top of the database and check that lookups work. - trie2, err := New(exp, trie.db) + trie2, err := New(common.Hash{}, exp, triedb) if err != nil { t.Fatalf("can't recreate trie at %x: %v", exp, err) } @@ -282,7 +282,7 @@ func TestReplication(t *testing.T) { t.Errorf("trie2 doesn't have %q => %q", kv.k, kv.v) } } - hash, err := trie2.Commit(nil) + hash, nodes, err := trie2.Commit(false) if err != nil { t.Fatalf("commit error: %v", err) } @@ -290,6 +290,14 @@ func TestReplication(t *testing.T) { t.Errorf("root failure. expected %x got %x", exp, hash) } + // recreate the trie after commit + if nodes != nil { + triedb.Update(NewWithNodeSet(nodes)) + } + trie2, err = New(common.Hash{}, hash, triedb) + if err != nil { + t.Fatalf("can't recreate trie at %x: %v", exp, err) + } // perform some insertions on the new trie. vals2 := []struct{ k, v string }{ {"do", "verb"}, @@ -311,20 +319,43 @@ func TestReplication(t *testing.T) { } func TestLargeValue(t *testing.T) { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) trie.Update([]byte("key1"), []byte{99, 99, 99, 99}) trie.Update([]byte("key2"), bytes.Repeat([]byte{1}, 32)) trie.Hash() } -type countingDB struct { - ethdb.KeyValueStore - gets map[string]int -} - -func (db *countingDB) Get(key []byte) ([]byte, error) { - db.gets[string(key)]++ - return db.KeyValueStore.Get(key) +// TestRandomCases tests som cases that were found via random fuzzing +func TestRandomCases(t *testing.T) { + var rt = []randTestStep{ + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 0 + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 1 + {op: 0, key: common.Hex2Bytes("d51b182b95d677e5f1c82508c0228de96b73092d78ce78b2230cd948674f66fd1483bd"), value: common.Hex2Bytes("0000000000000002")}, // step 2 + {op: 2, key: common.Hex2Bytes("c2a38512b83107d665c65235b0250002882ac2022eb00711552354832c5f1d030d0e408e"), value: common.Hex2Bytes("")}, // step 3 + {op: 3, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 4 + {op: 3, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 5 + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 6 + {op: 3, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 7 + {op: 0, key: common.Hex2Bytes("c2a38512b83107d665c65235b0250002882ac2022eb00711552354832c5f1d030d0e408e"), value: common.Hex2Bytes("0000000000000008")}, // step 8 + {op: 0, key: common.Hex2Bytes("d51b182b95d677e5f1c82508c0228de96b73092d78ce78b2230cd948674f66fd1483bd"), value: common.Hex2Bytes("0000000000000009")}, // step 9 + {op: 2, key: common.Hex2Bytes("fd"), value: common.Hex2Bytes("")}, // step 10 + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 11 + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 12 + {op: 0, key: common.Hex2Bytes("fd"), value: common.Hex2Bytes("000000000000000d")}, // step 13 + {op: 6, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 14 + {op: 1, key: common.Hex2Bytes("c2a38512b83107d665c65235b0250002882ac2022eb00711552354832c5f1d030d0e408e"), value: common.Hex2Bytes("")}, // step 15 + {op: 3, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 16 + {op: 0, key: common.Hex2Bytes("c2a38512b83107d665c65235b0250002882ac2022eb00711552354832c5f1d030d0e408e"), value: common.Hex2Bytes("0000000000000011")}, // step 17 + {op: 5, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 18 + {op: 3, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 19 + {op: 0, key: common.Hex2Bytes("d51b182b95d677e5f1c82508c0228de96b73092d78ce78b2230cd948674f66fd1483bd"), value: common.Hex2Bytes("0000000000000014")}, // step 20 + {op: 0, key: common.Hex2Bytes("d51b182b95d677e5f1c82508c0228de96b73092d78ce78b2230cd948674f66fd1483bd"), value: common.Hex2Bytes("0000000000000015")}, // step 21 + {op: 0, key: common.Hex2Bytes("c2a38512b83107d665c65235b0250002882ac2022eb00711552354832c5f1d030d0e408e"), value: common.Hex2Bytes("0000000000000016")}, // step 22 + {op: 5, key: common.Hex2Bytes(""), value: common.Hex2Bytes("")}, // step 23 + {op: 1, key: common.Hex2Bytes("980c393656413a15c8da01978ed9f89feb80b502f58f2d640e3a2f5f7a99a7018f1b573befd92053ac6f78fca4a87268"), value: common.Hex2Bytes("")}, // step 24 + {op: 1, key: common.Hex2Bytes("fd"), value: common.Hex2Bytes("")}, // step 25 + } + runRandTest(rt) } // randTest performs random trie operations. @@ -342,10 +373,10 @@ const ( opUpdate = iota opDelete opGet - opCommit opHash - opReset + opCommit opItercheckhash + opNodeDiff opMax // boundary value, not an actual op ) @@ -380,12 +411,18 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value { } func runRandTest(rt randTest) bool { - triedb := NewDatabase(memorydb.New()) - - tr, _ := New(common.Hash{}, triedb) - values := make(map[string]string) // tracks content of the trie + var ( + triedb = NewDatabase(memorydb.New()) + tr = NewEmpty(triedb) + values = make(map[string]string) // tracks content of the trie + origTrie = NewEmpty(triedb) + ) + tr.tracer = newTracer() for i, step := range rt { + // fmt.Printf("{op: %d, key: common.Hex2Bytes(\"%x\"), value: common.Hex2Bytes(\"%x\")}, // step %d\n", + // step.op, step.key, step.value, i) + switch step.op { case opUpdate: tr.Update(step.key, step.value) @@ -397,26 +434,30 @@ func runRandTest(rt randTest) bool { v := tr.Get(step.key) want := values[string(step.key)] if string(v) != want { - rt[i].err = fmt.Errorf("mismatch for key 0x%x, got 0x%x want 0x%x", step.key, v, want) + rt[i].err = fmt.Errorf("mismatch for key %#x, got %#x want %#x", step.key, v, want) } - case opCommit: - _, rt[i].err = tr.Commit(nil) case opHash: tr.Hash() - case opReset: - hash, err := tr.Commit(nil) + case opCommit: + hash, nodes, err := tr.Commit(false) if err != nil { rt[i].err = err return false } - newtr, err := New(hash, triedb) + if nodes != nil { + triedb.Update(NewWithNodeSet(nodes)) + } + newtr, err := New(common.Hash{}, hash, triedb) if err != nil { rt[i].err = err return false } tr = newtr + tr.tracer = newTracer() + + origTrie = tr.Copy() case opItercheckhash: - checktr, _ := New(common.Hash{}, triedb) + checktr := NewEmpty(triedb) it := NewIterator(tr.NodeIterator(nil)) for it.Next() { checktr.Update(it.Key, it.Value) @@ -424,6 +465,59 @@ func runRandTest(rt randTest) bool { if tr.Hash() != checktr.Hash() { rt[i].err = fmt.Errorf("hash mismatch in opItercheckhash") } + case opNodeDiff: + var ( + inserted = tr.tracer.insertList() + deleted = tr.tracer.deleteList() + origIter = origTrie.NodeIterator(nil) + curIter = tr.NodeIterator(nil) + origSeen = make(map[string]struct{}) + curSeen = make(map[string]struct{}) + ) + for origIter.Next(true) { + if origIter.Leaf() { + continue + } + origSeen[string(origIter.Path())] = struct{}{} + } + for curIter.Next(true) { + if curIter.Leaf() { + continue + } + curSeen[string(curIter.Path())] = struct{}{} + } + var ( + insertExp = make(map[string]struct{}) + deleteExp = make(map[string]struct{}) + ) + for path := range curSeen { + _, present := origSeen[path] + if !present { + insertExp[path] = struct{}{} + } + } + for path := range origSeen { + _, present := curSeen[path] + if !present { + deleteExp[path] = struct{}{} + } + } + if len(insertExp) != len(inserted) { + rt[i].err = fmt.Errorf("insert set mismatch") + } + if len(deleteExp) != len(deleted) { + rt[i].err = fmt.Errorf("delete set mismatch") + } + for _, insert := range inserted { + if _, present := insertExp[string(insert)]; !present { + rt[i].err = fmt.Errorf("missing inserted node") + } + } + for _, del := range deleted { + if _, present := deleteExp[string(del)]; !present { + rt[i].err = fmt.Errorf("missing deleted node") + } + } } // Abort the test on error. if rt[i].err != nil { @@ -442,45 +536,33 @@ func TestRandom(t *testing.T) { } } -func BenchmarkGet(b *testing.B) { benchGet(b, false) } -func BenchmarkGetDB(b *testing.B) { benchGet(b, true) } +func BenchmarkGet(b *testing.B) { benchGet(b) } func BenchmarkUpdateBE(b *testing.B) { benchUpdate(b, binary.BigEndian) } func BenchmarkUpdateLE(b *testing.B) { benchUpdate(b, binary.LittleEndian) } const benchElemCount = 20000 -func benchGet(b *testing.B, commit bool) { - trie := new(Trie) - if commit { - _, tmpdb := tempDB() - trie, _ = New(common.Hash{}, tmpdb) - } +func benchGet(b *testing.B) { + triedb := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(triedb) k := make([]byte, 32) for i := 0; i < benchElemCount; i++ { binary.LittleEndian.PutUint64(k, uint64(i)) trie.Update(k, k) } binary.LittleEndian.PutUint64(k, benchElemCount/2) - if commit { - trie.Commit(nil) - } b.ResetTimer() for i := 0; i < b.N; i++ { trie.Get(k) } b.StopTimer() - - if commit { - ldb := trie.db.diskdb.(*leveldb.Database) - ldb.Close() - os.RemoveAll(ldb.Path()) - } } func benchUpdate(b *testing.B, e binary.ByteOrder) *Trie { - trie := newEmpty() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) k := make([]byte, 32) + b.ReportAllocs() for i := 0; i < b.N; i++ { e.PutUint64(k, uint64(i)) trie.Update(k, k) @@ -492,47 +574,534 @@ func benchUpdate(b *testing.B, e binary.ByteOrder) *Trie { // we cannot use b.N as the number of hashing rouns, since all rounds apart from // the first one will be NOOP. As such, we'll use b.N as the number of account to // insert into the trie before measuring the hashing. +// BenchmarkHash-6 288680 4561 ns/op 682 B/op 9 allocs/op +// BenchmarkHash-6 275095 4800 ns/op 685 B/op 9 allocs/op +// pure hasher: +// BenchmarkHash-6 319362 4230 ns/op 675 B/op 9 allocs/op +// BenchmarkHash-6 257460 4674 ns/op 689 B/op 9 allocs/op +// With hashing in-between and pure hasher: +// BenchmarkHash-6 225417 7150 ns/op 982 B/op 12 allocs/op +// BenchmarkHash-6 220378 6197 ns/op 983 B/op 12 allocs/op +// same with old hasher +// BenchmarkHash-6 229758 6437 ns/op 981 B/op 12 allocs/op +// BenchmarkHash-6 212610 7137 ns/op 986 B/op 12 allocs/op func BenchmarkHash(b *testing.B) { + // Create a realistic account trie to hash. We're first adding and hashing N + // entries, then adding N more. + addresses, accounts := makeAccounts(2 * b.N) + // Insert the accounts into the trie and hash it + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + i := 0 + for ; i < len(addresses)/2; i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + trie.Hash() + for ; i < len(addresses); i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + b.ResetTimer() + b.ReportAllocs() + //trie.hashRoot(nil, nil) + trie.Hash() +} + +// Benchmarks the trie Commit following a Hash. Since the trie caches the result of any operation, +// we cannot use b.N as the number of hashing rouns, since all rounds apart from +// the first one will be NOOP. As such, we'll use b.N as the number of account to +// insert into the trie before measuring the hashing. +func BenchmarkCommitAfterHash(b *testing.B) { + b.Run("no-onleaf", func(b *testing.B) { + benchmarkCommitAfterHash(b, false) + }) + b.Run("with-onleaf", func(b *testing.B) { + benchmarkCommitAfterHash(b, true) + }) +} + +func benchmarkCommitAfterHash(b *testing.B, collectLeaf bool) { // Make the random benchmark deterministic - random := rand.New(rand.NewSource(0)) + addresses, accounts := makeAccounts(b.N) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + for i := 0; i < len(addresses); i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + // Insert the accounts into the trie and hash it + trie.Hash() + b.ResetTimer() + b.ReportAllocs() + trie.Commit(collectLeaf) +} + +func TestTinyTrie(t *testing.T) { + // Create a realistic account trie to hash + _, accounts := makeAccounts(5) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + trie.Update(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000001337"), accounts[3]) + if exp, root := common.HexToHash("8c6a85a4d9fda98feff88450299e574e5378e32391f75a055d470ac0653f1005"), trie.Hash(); exp != root { + t.Errorf("1: got %x, exp %x", root, exp) + } + trie.Update(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000001338"), accounts[4]) + if exp, root := common.HexToHash("ec63b967e98a5720e7f720482151963982890d82c9093c0d486b7eb8883a66b1"), trie.Hash(); exp != root { + t.Errorf("2: got %x, exp %x", root, exp) + } + trie.Update(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000001339"), accounts[4]) + if exp, root := common.HexToHash("0608c1d1dc3905fa22204c7a0e43644831c3b6d3def0f274be623a948197e64a"), trie.Hash(); exp != root { + t.Errorf("3: got %x, exp %x", root, exp) + } + checktr := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + it := NewIterator(trie.NodeIterator(nil)) + for it.Next() { + checktr.Update(it.Key, it.Value) + } + if troot, itroot := trie.Hash(), checktr.Hash(); troot != itroot { + t.Fatalf("hash mismatch in opItercheckhash, trie: %x, check: %x", troot, itroot) + } +} +func TestCommitAfterHash(t *testing.T) { // Create a realistic account trie to hash - addresses := make([][20]byte, b.N) + addresses, accounts := makeAccounts(1000) + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) for i := 0; i < len(addresses); i++ { - for j := 0; j < len(addresses[i]); j++ { - addresses[i][j] = byte(random.Intn(256)) - } + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + // Insert the accounts into the trie and hash it + trie.Hash() + trie.Commit(false) + root := trie.Hash() + exp := common.HexToHash("72f9d3f3fe1e1dd7b8936442e7642aef76371472d94319900790053c493f3fe6") + if exp != root { + t.Errorf("got %x, exp %x", root, exp) } - accounts := make([][]byte, len(addresses)) + root, _, _ = trie.Commit(false) + if exp != root { + t.Errorf("got %x, exp %x", root, exp) + } +} + +func makeAccounts(size int) (addresses [][20]byte, accounts [][]byte) { + // Make the random benchmark deterministic + random := rand.New(rand.NewSource(0)) + // Create a realistic account trie to hash + addresses = make([][20]byte, size) + for i := 0; i < len(addresses); i++ { + data := make([]byte, 20) + random.Read(data) + copy(addresses[i][:], data) + } + accounts = make([][]byte, len(addresses)) for i := 0; i < len(accounts); i++ { var ( - nonce = uint64(random.Int63()) - balance = new(big.Int).Rand(random, new(big.Int).Exp(common.Big2, common.Big256, nil)) - root = emptyRoot - code = crypto.Keccak256(nil) + nonce = uint64(random.Int63()) + root = emptyRoot + code = crypto.Keccak256(nil) ) - accounts[i], _ = rlp.EncodeToBytes([]interface{}{nonce, balance, root, code}) + // The big.Rand function is not deterministic with regards to 64 vs 32 bit systems, + // and will consume different amount of data from the rand source. + //balance = new(big.Int).Rand(random, new(big.Int).Exp(common.Big2, common.Big256, nil)) + // Therefore, we instead just read via byte buffer + numBytes := random.Uint32() % 33 // [0, 32] bytes + balanceBytes := make([]byte, numBytes) + random.Read(balanceBytes) + balance := new(big.Int).SetBytes(balanceBytes) + data, _ := rlp.EncodeToBytes(&types.StateAccount{Nonce: nonce, Balance: balance, Root: root, CodeHash: code}) + accounts[i] = data } - // Insert the accounts into the trie and hash it - trie := newEmpty() + return addresses, accounts +} + +// spongeDb is a dummy db backend which accumulates writes in a sponge +type spongeDb struct { + sponge hash.Hash + id string + journal []string +} + +func (s *spongeDb) Has(key []byte) (bool, error) { panic("implement me") } +func (s *spongeDb) Get(key []byte) ([]byte, error) { return nil, errors.New("no such elem") } +func (s *spongeDb) Delete(key []byte) error { panic("implement me") } +func (s *spongeDb) NewBatch() ethdb.Batch { return &spongeBatch{s} } +func (s *spongeDb) NewBatchWithSize(size int) ethdb.Batch { return &spongeBatch{s} } +func (s *spongeDb) NewSnapshot() (ethdb.Snapshot, error) { panic("implement me") } +func (s *spongeDb) Stat(property string) (string, error) { panic("implement me") } +func (s *spongeDb) Compact(start []byte, limit []byte) error { panic("implement me") } +func (s *spongeDb) Close() error { return nil } +func (s *spongeDb) Put(key []byte, value []byte) error { + valbrief := value + if len(valbrief) > 8 { + valbrief = valbrief[:8] + } + s.journal = append(s.journal, fmt.Sprintf("%v: PUT([%x...], [%d bytes] %x...)\n", s.id, key[:8], len(value), valbrief)) + s.sponge.Write(key) + s.sponge.Write(value) + return nil +} +func (s *spongeDb) NewIterator(prefix []byte, start []byte) ethdb.Iterator { panic("implement me") } + +// spongeBatch is a dummy batch which immediately writes to the underlying spongedb +type spongeBatch struct { + db *spongeDb +} + +func (b *spongeBatch) Put(key, value []byte) error { + b.db.Put(key, value) + return nil +} +func (b *spongeBatch) Delete(key []byte) error { panic("implement me") } +func (b *spongeBatch) ValueSize() int { return 100 } +func (b *spongeBatch) Write() error { return nil } +func (b *spongeBatch) Reset() {} +func (b *spongeBatch) Replay(w ethdb.KeyValueWriter) error { return nil } + +// TestCommitSequence tests that the trie.Commit operation writes the elements of the trie +// in the expected order, and calls the callbacks in the expected order. +// The test data was based on the 'master' code, and is basically random. It can be used +// to check whether changes to the trie modifies the write order or data in any way. +func TestCommitSequence(t *testing.T) { + for i, tc := range []struct { + count int + expWriteSeqHash []byte + expCallbackSeqHash []byte + }{ + {20, common.FromHex("873c78df73d60e59d4a2bcf3716e8bfe14554549fea2fc147cb54129382a8066"), + common.FromHex("ff00f91ac05df53b82d7f178d77ada54fd0dca64526f537034a5dbe41b17df2a")}, + {200, common.FromHex("ba03d891bb15408c940eea5ee3d54d419595102648d02774a0268d892add9c8e"), + common.FromHex("f3cd509064c8d319bbdd1c68f511850a902ad275e6ed5bea11547e23d492a926")}, + {2000, common.FromHex("f7a184f20df01c94f09537401d11e68d97ad0c00115233107f51b9c287ce60c7"), + common.FromHex("ff795ea898ba1e4cfed4a33b4cf5535a347a02cf931f88d88719faf810f9a1c9")}, + } { + addresses, accounts := makeAccounts(tc.count) + // This spongeDb is used to check the sequence of disk-db-writes + s := &spongeDb{sponge: sha3.NewLegacyKeccak256()} + db := NewDatabase(s) + trie := NewEmpty(db) + // Another sponge is used to check the callback-sequence + callbackSponge := sha3.NewLegacyKeccak256() + // Fill the trie with elements + for i := 0; i < tc.count; i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + // Flush trie -> database + root, nodes, _ := trie.Commit(false) + db.Update(NewWithNodeSet(nodes)) + // Flush memdb -> disk (sponge) + db.Commit(root, false, func(c common.Hash) { + // And spongify the callback-order + callbackSponge.Write(c[:]) + }) + if got, exp := s.sponge.Sum(nil), tc.expWriteSeqHash; !bytes.Equal(got, exp) { + t.Errorf("test %d, disk write sequence wrong:\ngot %x exp %x\n", i, got, exp) + } + if got, exp := callbackSponge.Sum(nil), tc.expCallbackSeqHash; !bytes.Equal(got, exp) { + t.Errorf("test %d, call back sequence wrong:\ngot: %x exp %x\n", i, got, exp) + } + } +} + +// TestCommitSequenceRandomBlobs is identical to TestCommitSequence +// but uses random blobs instead of 'accounts' +func TestCommitSequenceRandomBlobs(t *testing.T) { + for i, tc := range []struct { + count int + expWriteSeqHash []byte + expCallbackSeqHash []byte + }{ + {20, common.FromHex("8e4a01548551d139fa9e833ebc4e66fc1ba40a4b9b7259d80db32cff7b64ebbc"), + common.FromHex("450238d73bc36dc6cc6f926987e5428535e64be403877c4560e238a52749ba24")}, + {200, common.FromHex("6869b4e7b95f3097a19ddb30ff735f922b915314047e041614df06958fc50554"), + common.FromHex("0ace0b03d6cb8c0b82f6289ef5b1a1838306b455a62dafc63cada8e2924f2550")}, + {2000, common.FromHex("444200e6f4e2df49f77752f629a96ccf7445d4698c164f962bbd85a0526ef424"), + common.FromHex("117d30dafaa62a1eed498c3dfd70982b377ba2b46dd3e725ed6120c80829e518")}, + } { + prng := rand.New(rand.NewSource(int64(i))) + // This spongeDb is used to check the sequence of disk-db-writes + s := &spongeDb{sponge: sha3.NewLegacyKeccak256()} + db := NewDatabase(s) + trie := NewEmpty(db) + // Another sponge is used to check the callback-sequence + callbackSponge := sha3.NewLegacyKeccak256() + // Fill the trie with elements + for i := 0; i < tc.count; i++ { + key := make([]byte, 32) + var val []byte + // 50% short elements, 50% large elements + if prng.Intn(2) == 0 { + val = make([]byte, 1+prng.Intn(32)) + } else { + val = make([]byte, 1+prng.Intn(4096)) + } + prng.Read(key) + prng.Read(val) + trie.Update(key, val) + } + // Flush trie -> database + root, nodes, _ := trie.Commit(false) + db.Update(NewWithNodeSet(nodes)) + // Flush memdb -> disk (sponge) + db.Commit(root, false, func(c common.Hash) { + // And spongify the callback-order + callbackSponge.Write(c[:]) + }) + if got, exp := s.sponge.Sum(nil), tc.expWriteSeqHash; !bytes.Equal(got, exp) { + t.Fatalf("test %d, disk write sequence wrong:\ngot %x exp %x\n", i, got, exp) + } + if got, exp := callbackSponge.Sum(nil), tc.expCallbackSeqHash; !bytes.Equal(got, exp) { + t.Fatalf("test %d, call back sequence wrong:\ngot: %x exp %x\n", i, got, exp) + } + } +} + +func TestCommitSequenceStackTrie(t *testing.T) { + for count := 1; count < 200; count++ { + prng := rand.New(rand.NewSource(int64(count))) + // This spongeDb is used to check the sequence of disk-db-writes + s := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "a"} + db := NewDatabase(s) + trie := NewEmpty(db) + // Another sponge is used for the stacktrie commits + stackTrieSponge := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "b"} + stTrie := NewStackTrie(stackTrieSponge) + // Fill the trie with elements + for i := 0; i < count; i++ { + // For the stack trie, we need to do inserts in proper order + key := make([]byte, 32) + binary.BigEndian.PutUint64(key, uint64(i)) + var val []byte + // 50% short elements, 50% large elements + if prng.Intn(2) == 0 { + val = make([]byte, 1+prng.Intn(32)) + } else { + val = make([]byte, 1+prng.Intn(1024)) + } + prng.Read(val) + trie.TryUpdate(key, val) + stTrie.TryUpdate(key, val) + } + // Flush trie -> database + root, nodes, _ := trie.Commit(false) + // Flush memdb -> disk (sponge) + db.Update(NewWithNodeSet(nodes)) + db.Commit(root, false, nil) + // And flush stacktrie -> disk + stRoot, err := stTrie.Commit() + if err != nil { + t.Fatalf("Failed to commit stack trie %v", err) + } + if stRoot != root { + t.Fatalf("root wrong, got %x exp %x", stRoot, root) + } + if got, exp := stackTrieSponge.sponge.Sum(nil), s.sponge.Sum(nil); !bytes.Equal(got, exp) { + // Show the journal + t.Logf("Expected:") + for i, v := range s.journal { + t.Logf("op %d: %v", i, v) + } + t.Logf("Stacktrie:") + for i, v := range stackTrieSponge.journal { + t.Logf("op %d: %v", i, v) + } + t.Fatalf("test %d, disk write sequence wrong:\ngot %x exp %x\n", count, got, exp) + } + } +} + +// TestCommitSequenceSmallRoot tests that a trie which is essentially only a +// small (<32 byte) shortnode with an included value is properly committed to a +// database. +// This case might not matter, since in practice, all keys are 32 bytes, which means +// that even a small trie which contains a leaf will have an extension making it +// not fit into 32 bytes, rlp-encoded. However, it's still the correct thing to do. +func TestCommitSequenceSmallRoot(t *testing.T) { + s := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "a"} + db := NewDatabase(s) + trie := NewEmpty(db) + // Another sponge is used for the stacktrie commits + stackTrieSponge := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "b"} + stTrie := NewStackTrie(stackTrieSponge) + // Add a single small-element to the trie(s) + key := make([]byte, 5) + key[0] = 1 + trie.TryUpdate(key, []byte{0x1}) + stTrie.TryUpdate(key, []byte{0x1}) + // Flush trie -> database + root, nodes, _ := trie.Commit(false) + // Flush memdb -> disk (sponge) + db.Update(NewWithNodeSet(nodes)) + db.Commit(root, false, nil) + // And flush stacktrie -> disk + stRoot, err := stTrie.Commit() + if err != nil { + t.Fatalf("Failed to commit stack trie %v", err) + } + if stRoot != root { + t.Fatalf("root wrong, got %x exp %x", stRoot, root) + } + + t.Logf("root: %x\n", stRoot) + if got, exp := stackTrieSponge.sponge.Sum(nil), s.sponge.Sum(nil); !bytes.Equal(got, exp) { + t.Fatalf("test, disk write sequence wrong:\ngot %x exp %x\n", got, exp) + } +} + +// BenchmarkCommitAfterHashFixedSize benchmarks the Commit (after Hash) of a fixed number of updates to a trie. +// This benchmark is meant to capture the difference on efficiency of small versus large changes. Typically, +// storage tries are small (a couple of entries), whereas the full post-block account trie update is large (a couple +// of thousand entries) +func BenchmarkHashFixedSize(b *testing.B) { + b.Run("10", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(20) + for i := 0; i < b.N; i++ { + benchmarkHashFixedSize(b, acc, add) + } + }) + b.Run("100", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100) + for i := 0; i < b.N; i++ { + benchmarkHashFixedSize(b, acc, add) + } + }) + + b.Run("1K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(1000) + for i := 0; i < b.N; i++ { + benchmarkHashFixedSize(b, acc, add) + } + }) + b.Run("10K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(10000) + for i := 0; i < b.N; i++ { + benchmarkHashFixedSize(b, acc, add) + } + }) + b.Run("100K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100000) + for i := 0; i < b.N; i++ { + benchmarkHashFixedSize(b, acc, add) + } + }) +} + +func benchmarkHashFixedSize(b *testing.B, addresses [][20]byte, accounts [][]byte) { + b.ReportAllocs() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) for i := 0; i < len(addresses); i++ { trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) } - b.ResetTimer() - b.ReportAllocs() + // Insert the accounts into the trie and hash it + b.StartTimer() trie.Hash() + b.StopTimer() } -func tempDB() (string, *Database) { - dir, err := ioutil.TempDir("", "trie-bench") - if err != nil { - panic(fmt.Sprintf("can't create temporary directory: %v", err)) +func BenchmarkCommitAfterHashFixedSize(b *testing.B) { + b.Run("10", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(20) + for i := 0; i < b.N; i++ { + benchmarkCommitAfterHashFixedSize(b, acc, add) + } + }) + b.Run("100", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100) + for i := 0; i < b.N; i++ { + benchmarkCommitAfterHashFixedSize(b, acc, add) + } + }) + + b.Run("1K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(1000) + for i := 0; i < b.N; i++ { + benchmarkCommitAfterHashFixedSize(b, acc, add) + } + }) + b.Run("10K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(10000) + for i := 0; i < b.N; i++ { + benchmarkCommitAfterHashFixedSize(b, acc, add) + } + }) + b.Run("100K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100000) + for i := 0; i < b.N; i++ { + benchmarkCommitAfterHashFixedSize(b, acc, add) + } + }) +} + +func benchmarkCommitAfterHashFixedSize(b *testing.B, addresses [][20]byte, accounts [][]byte) { + b.ReportAllocs() + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + for i := 0; i < len(addresses); i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) } - diskdb, err := leveldb.New(dir, 256, 0, "") - if err != nil { - panic(fmt.Sprintf("can't create temporary database: %v", err)) + // Insert the accounts into the trie and hash it + trie.Hash() + b.StartTimer() + trie.Commit(false) + b.StopTimer() +} + +func BenchmarkDerefRootFixedSize(b *testing.B) { + b.Run("10", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(20) + for i := 0; i < b.N; i++ { + benchmarkDerefRootFixedSize(b, acc, add) + } + }) + b.Run("100", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100) + for i := 0; i < b.N; i++ { + benchmarkDerefRootFixedSize(b, acc, add) + } + }) + + b.Run("1K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(1000) + for i := 0; i < b.N; i++ { + benchmarkDerefRootFixedSize(b, acc, add) + } + }) + b.Run("10K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(10000) + for i := 0; i < b.N; i++ { + benchmarkDerefRootFixedSize(b, acc, add) + } + }) + b.Run("100K", func(b *testing.B) { + b.StopTimer() + acc, add := makeAccounts(100000) + for i := 0; i < b.N; i++ { + benchmarkDerefRootFixedSize(b, acc, add) + } + }) +} + +func benchmarkDerefRootFixedSize(b *testing.B, addresses [][20]byte, accounts [][]byte) { + b.ReportAllocs() + triedb := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(triedb) + for i := 0; i < len(addresses); i++ { + trie.Update(crypto.Keccak256(addresses[i][:]), accounts[i]) } - return dir, NewDatabase(diskdb) + h := trie.Hash() + _, nodes, _ := trie.Commit(false) + triedb.Update(NewWithNodeSet(nodes)) + b.StartTimer() + triedb.Dereference(h) + b.StopTimer() } func getString(trie *Trie, k string) []byte { diff --git a/trie/util_test.go b/trie/util_test.go new file mode 100644 index 00000000..252dc09e --- /dev/null +++ b/trie/util_test.go @@ -0,0 +1,124 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" +) + +// Tests if the trie diffs are tracked correctly. +func TestTrieTracer(t *testing.T) { + db := NewDatabase(rawdb.NewMemoryDatabase()) + trie := NewEmpty(db) + trie.tracer = newTracer() + + // Insert a batch of entries, all the nodes should be marked as inserted + vals := []struct{ k, v string }{ + {"do", "verb"}, + {"ether", "wookiedoo"}, + {"horse", "stallion"}, + {"shaman", "horse"}, + {"doge", "coin"}, + {"dog", "puppy"}, + {"somethingveryoddindeedthis is", "myothernodedata"}, + } + for _, val := range vals { + trie.Update([]byte(val.k), []byte(val.v)) + } + trie.Hash() + + seen := make(map[string]struct{}) + it := trie.NodeIterator(nil) + for it.Next(true) { + if it.Leaf() { + continue + } + seen[string(it.Path())] = struct{}{} + } + inserted := trie.tracer.insertList() + if len(inserted) != len(seen) { + t.Fatalf("Unexpected inserted node tracked want %d got %d", len(seen), len(inserted)) + } + for _, k := range inserted { + _, ok := seen[string(k)] + if !ok { + t.Fatalf("Unexpected inserted node") + } + } + deleted := trie.tracer.deleteList() + if len(deleted) != 0 { + t.Fatalf("Unexpected deleted node tracked %d", len(deleted)) + } + + // Commit the changes and re-create with new root + root, nodes, _ := trie.Commit(false) + db.Update(NewWithNodeSet(nodes)) + trie, _ = New(common.Hash{}, root, db) + trie.tracer = newTracer() + + // Delete all the elements, check deletion set + for _, val := range vals { + trie.Delete([]byte(val.k)) + } + trie.Hash() + + inserted = trie.tracer.insertList() + if len(inserted) != 0 { + t.Fatalf("Unexpected inserted node tracked %d", len(inserted)) + } + deleted = trie.tracer.deleteList() + if len(deleted) != len(seen) { + t.Fatalf("Unexpected deleted node tracked want %d got %d", len(seen), len(deleted)) + } + for _, k := range deleted { + _, ok := seen[string(k)] + if !ok { + t.Fatalf("Unexpected inserted node") + } + } +} + +func TestTrieTracerNoop(t *testing.T) { + trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase())) + trie.tracer = newTracer() + + // Insert a batch of entries, all the nodes should be marked as inserted + vals := []struct{ k, v string }{ + {"do", "verb"}, + {"ether", "wookiedoo"}, + {"horse", "stallion"}, + {"shaman", "horse"}, + {"doge", "coin"}, + {"dog", "puppy"}, + {"somethingveryoddindeedthis is", "myothernodedata"}, + } + for _, val := range vals { + trie.Update([]byte(val.k), []byte(val.v)) + } + for _, val := range vals { + trie.Delete([]byte(val.k)) + } + if len(trie.tracer.insertList()) != 0 { + t.Fatalf("Unexpected inserted node tracked %d", len(trie.tracer.insertList())) + } + if len(trie.tracer.deleteList()) != 0 { + t.Fatalf("Unexpected deleted node tracked %d", len(trie.tracer.deleteList())) + } +} diff --git a/trie/utils.go b/trie/utils.go new file mode 100644 index 00000000..7e269150 --- /dev/null +++ b/trie/utils.go @@ -0,0 +1,167 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more 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 + +// tracer tracks the changes of trie nodes. During the trie operations, +// some nodes can be deleted from the trie, while these deleted nodes +// won't be captured by trie.Hasher or trie.Committer. Thus, these deleted +// nodes won't be removed from the disk at all. Tracer is an auxiliary tool +// used to track all insert and delete operations of trie and capture all +// deleted nodes eventually. +// +// The changed nodes can be mainly divided into two categories: the leaf +// node and intermediate node. The former is inserted/deleted by callers +// while the latter is inserted/deleted in order to follow the rule of trie. +// This tool can track all of them no matter the node is embedded in its +// parent or not, but valueNode is never tracked. +// +// Besides, it's also used for recording the original value of the nodes +// when they are resolved from the disk. The pre-value of the nodes will +// be used to construct reverse-diffs in the future. +// +// Note tracer is not thread-safe, callers should be responsible for handling +// the concurrency issues by themselves. +type tracer struct { + insert map[string]struct{} + delete map[string]struct{} + origin map[string][]byte +} + +// newTracer initializes the tracer for capturing trie changes. +func newTracer() *tracer { + return &tracer{ + insert: make(map[string]struct{}), + delete: make(map[string]struct{}), + origin: make(map[string][]byte), + } +} + +/* +// onRead tracks the newly loaded trie node and caches the rlp-encoded blob internally. +// Don't change the value outside of function since it's not deep-copied. +func (t *tracer) onRead(key []byte, val []byte) { + // Tracer isn't used right now, remove this check later. + if t == nil { + return + } + t.origin[string(key)] = val +} +*/ + +// onInsert tracks the newly inserted trie node. If it's already in the deletion set +// (resurrected node), then just wipe it from the deletion set as the "untouched". +func (t *tracer) onInsert(key []byte) { + // Tracer isn't used right now, remove this check later. + if t == nil { + return + } + if _, present := t.delete[string(key)]; present { + delete(t.delete, string(key)) + return + } + t.insert[string(key)] = struct{}{} +} + +// onDelete tracks the newly deleted trie node. If it's already +// in the addition set, then just wipe it from the addition set +// as it's untouched. +func (t *tracer) onDelete(key []byte) { + // Tracer isn't used right now, remove this check later. + if t == nil { + return + } + if _, present := t.insert[string(key)]; present { + delete(t.insert, string(key)) + return + } + t.delete[string(key)] = struct{}{} +} + +// insertList returns the tracked inserted trie nodes in list format. +func (t *tracer) insertList() [][]byte { + // Tracer isn't used right now, remove this check later. + if t == nil { + return nil + } + var ret [][]byte + for key := range t.insert { + ret = append(ret, []byte(key)) + } + return ret +} + +// deleteList returns the tracked deleted trie nodes in list format. +func (t *tracer) deleteList() [][]byte { + // Tracer isn't used right now, remove this check later. + if t == nil { + return nil + } + var ret [][]byte + for key := range t.delete { + ret = append(ret, []byte(key)) + } + return ret +} + +/* +// getPrev returns the cached original value of the specified node. +func (t *tracer) getPrev(key []byte) []byte { + // Don't panic on uninitialized tracer, it's possible in testing. + if t == nil { + return nil + } + return t.origin[string(key)] +} +*/ + +// reset clears the content tracked by tracer. +func (t *tracer) reset() { + // Tracer isn't used right now, remove this check later. + if t == nil { + return + } + t.insert = make(map[string]struct{}) + t.delete = make(map[string]struct{}) + t.origin = make(map[string][]byte) +} + +// copy returns a deep copied tracer instance. +func (t *tracer) copy() *tracer { + // Tracer isn't used right now, remove this check later. + if t == nil { + return nil + } + var ( + insert = make(map[string]struct{}) + delete = make(map[string]struct{}) + origin = make(map[string][]byte) + ) + for key := range t.insert { + insert[key] = struct{}{} + } + for key := range t.delete { + delete[key] = struct{}{} + } + for key, val := range t.origin { + origin[key] = val + } + return &tracer{ + insert: insert, + delete: delete, + origin: origin, + } +}